ZGlmZiAtLWdpdCBhLy5ienJpZ25vcmUgYi8uYnpyaWdub3JlCmluZGV4IGM5YTM5YmMuLmU1ODg1OTUgMTAwNjQ0Ci0tLSBhLy5ienJpZ25vcmUKKysrIGIvLmJ6cmlnbm9yZQpAQCAtMTQsMzUgKzE0LDIyIEBACiBweWNvbmZpZy5oCiBsaWJweXRob24qLmEKIHB5dGhvbi5leGUKLUNQOTM2LlRYVAotU0hJRlRfSklTWDAyMTMuVFhUCi1KT0hBQi5UWFQKLUVVQy1KUC5UWFQKLU5vcm1hbGl6YXRpb25UZXN0LTMuMi4wLnR4dAotTm9ybWFsaXphdGlvblRlc3QudHh0Ci1CSUc1LlRYVAotQklHNUhLU0NTLTIwMDQuVFhUCi1DUDk0OS5UWFQKLUVVQy1DTi5UWFQKLUJJRzVIS1NDUy5UWFQKLVNISUZUSklTLlRYVAotRVVDLUtSLlRYVAotRVVDLUpJU1gwMjEzLlRYVAotQ1A5MzIuVFhUCi1DUDk1MC5UWFQKK3B5dGhvbi1nZGIucHkKIHJlZmxvZy50eHQKLWdiLTE4MDMwLTIwMDAueG1sCiB0YWdzCiBUQUdTCiAuZ2RiX2hpc3RvcnkKIERvYy90b29scy9zcGhpbngKIERvYy90b29scy9qaW5qYQorRG9jL3Rvb2xzL2ppbmphMgogRG9jL3Rvb2xzL3B5Z21lbnRzCiBEb2MvdG9vbHMvZG9jdXRpbHMKK01pc2MvcHl0aG9uLnBjCiBNb2R1bGVzL1NldHVwCiBNb2R1bGVzL1NldHVwLmNvbmZpZwogTW9kdWxlcy9TZXR1cC5sb2NhbAogTW9kdWxlcy9jb25maWcuYwogUGFyc2VyL3BnZW4KK0xpYi90ZXN0L2RhdGEvKgogTGliL2xpYjJ0bzMvR3JhbW1hcioucGlja2xlCiBMaWIvbGliMnRvMy9QYXR0ZXJuR3JhbW1hcioucGlja2xlCmRpZmYgLS1naXQgYS8uaGdpZ25vcmUgYi8uaGdpZ25vcmUKaW5kZXggMDY2MTAzYS4uM2VkM2FlZiAxMDA2NDQKLS0tIGEvLmhnaWdub3JlCisrKyBiLy5oZ2lnbm9yZQpAQCAtMSw1MSArMSwzNyBAQAogLmdkYl9oaXN0b3J5CiAucHVyaWZ5Ci0uc3ZuCi1CSUc1LlRYVAotQklHNUhLU0NTLTIwMDQuVFhUCi1CSUc1SEtTQ1MuVFhUCi1DUDkzMi5UWFQKLUNQOTM2LlRYVAotQ1A5NDkuVFhUCi1DUDk1MC5UWFQKLUVVQy1DTi5UWFQKLUVVQy1KSVNYMDIxMy5UWFQKLUVVQy1KUC5UWFQKLUVVQy1LUi5UWFQKLUpPSEFCLlRYVAorLnN2bi8KIE1ha2VmaWxlJAogTWFrZWZpbGUucHJlJAotTm9ybWFsaXphdGlvblRlc3QtMy4yLjAudHh0Ci1Ob3JtYWxpemF0aW9uVGVzdC50eHQKLVNISUZUSklTLlRYVAotU0hJRlRfSklTWDAyMTMuVFhUCi1UQUdTCi1hdXRvbTR0ZS5jYWNoZQotYnVpbGQKLWJ1aWxkbm8KK1RBR1MkCithdXRvbTR0ZS5jYWNoZSQKK2J1aWxkLworYnVpbGRubyQKIGNvbmZpZy5jYWNoZQogY29uZmlnLmxvZwogY29uZmlnLnN0YXR1cwogY29uZmlnLnN0YXR1cy5saW5lbm8KIGRiX2hvbWUKLWdiLTE4MDMwLTIwMDAueG1sCi1wbGF0Zm9ybQotcHljb25maWcuaAotcHl0aG9uCi1weXRob24uZXhlCi1yZWZsb2cudHh0Ci10YWdzCitwbGF0Zm9ybSQKK3B5Y29uZmlnLmgkCitweXRob24kCitweXRob24uZXhlJAorcmVmbG9nLnR4dCQKK3RhZ3MkCiBMaWIvcGxhdC1tYWMvZXJyb3JzLnJzcmMuZGYucnNyYwogRG9jL3Rvb2xzL3NwaGlueC8KIERvYy90b29scy9kb2N1dGlscy8KIERvYy90b29scy9qaW5qYS8KK0RvYy90b29scy9qaW5qYTIvCiBEb2MvdG9vbHMvcHlnbWVudHMvCi1Nb2R1bGVzL1NldHVwCitNaXNjL3B5dGhvbi5wYworTW9kdWxlcy9TZXR1cCQKIE1vZHVsZXMvU2V0dXAuY29uZmlnCiBNb2R1bGVzL1NldHVwLmxvY2FsCiBNb2R1bGVzL2NvbmZpZy5jCi1QYXJzZXIvcGdlbgotY29yZQorUGFyc2VyL3BnZW4kCiteY29yZQorXnB5dGhvbi1nZGIucHkKIAogc3ludGF4OiBnbG9iCiBsaWJweXRob24qLmEKQEAgLTU4LDYgKzQ0LDcgQEAKICoucmVqCiAqfgogTGliL2xpYjJ0bzMvKi5waWNrbGUKK0xpYi90ZXN0L2RhdGEvKgogUENidWlsZC8qLmV4ZQogUENidWlsZC8qLmRsbAogUENidWlsZC8qLnBkYgpkaWZmIC0tZ2l0IGEvLmhndGFncyBiLy5oZ3RhZ3MKaW5kZXggMTJiNjZmYS4uMThkODVkMiAxMDA2NDQKLS0tIGEvLmhndGFncworKysgYi8uaGd0YWdzCkBAIC01Miw3ICs1Miw2IEBACiA3ZTM4N2E5ZGNjNzk5NTRhNzc2OTVhZGVmOGI1OTNkYTM1YmUxMjE0IHYyLjRiMgogZmY4MGQ4YmJlZjZlMTM0MjZjOGE4NWQ3ZjlkODM3YjhmOGY4OTgzNCB2Mi40YzEKIGYzMWUxOGQzMTNjN2E0ZmM2NjkxNGIyZDI3ZTEzMGEwZjcyYzBiNjkgdjIuNAotM2RhYmQ5YmI0OTZlOWE2OGNkNmNkOTRiNzYyMjk3M2ZjNzY2NDA1YSB2Mi41YTAKIDY3MTkyZGEzZTY5Yzk4NWJiMTI3MmRhOTMyZDdkZTYwNzMwMzNmYWQgdjIuNWEwCiA4OTZmOWZlYWQxN2U3MjBlYzRhMjFkZTNhYzIxNDUxOGRhODQ4NDVmIHYyLjVhMQogMjZkMDc3MGYyYjdlZTI4OWEzOWEzYjU1ZGNlYzFjMWVlNjU4NDljNSB2Mi41YTIKQEAgLTY4LDE3ICs2NywxMyBAQAogMWViYjJhOGNjMDZjOTQ0NzFkNzJiNTQ3NmMyMDUwYzRkMTE1YTFhYSB2Mi42cmMxCiA1MjU3OTIwOTdjNjMwOGE3OGE3NmI3YjVmNTZiYmQ4YTI0YzI2YWNmIHYyLjZyYzIKIDk1ZmZmNWE2YTI3NjUyMGIyZTdlMGY3NWZlMzAzZjQ5Mzc2NTY3YTUgdjIuNgotY2FiZjMwM2U3ODdhYTVjZDcyMDliNDBlM2IyY2FiYTNlZTc1YzVhNSB2Mi42LjEKLTAxZjFhZTgzNjMxYWU4MmJkODU5OGExMWMxN2UzZjliM2Y1NmMzOGEgdjIuNi4yYzEKLTRmZWJhMDlhODI2YmE5OWU1YjQ4MjcwN2IzZDk2NDNlYmEzNDE1NmYgdjIuNi4yCi0xODczNTQyYzAwMDAwYzRiN2NlMmM3OTkyZDFmMmQ4N2Y4NjYyMzJhIHYyLjYuM3JjMQotMDBjMzM5NmQ3YThjNGFiNGMyYzg0MWQ2MTAxM2EwNzNhZTkyMWQwZiB2Mi42LjMKLTI1YWE5MGE2ODY1YjYzMTMzOTYyZGQ2NDYyNmM1M2M3YjZmZDQ3ZDUgdjIuNi40cmMxCi1lYTFmZGFmYmU0ZmUyNDU4YWMxNzI4N2UwZDZjNzA5ZWQwMGZjZTVjIHYyLjYuNHJjMgotODgwM2MzZDYxZGEyNzVjNzFjYWJlOWU5ZDAyNzRkYWM5OTAyZTJjMCB2Mi42LjQKLWM5ZjY4ZTQyYWI3OTZhM2JhYjRmOGNmM2NjNjljZTEwNTAzY2I5OTAgdjIuNi41cmMxCi1mYTQ2MzA5MTY2OTkwNDYzNTdhNWFjMTY4ODRmM2ZjNDdiZDBlYWE2IHYyLjYuNXJjMgotOTlhZjRiNDRlN2U0OTAzOTA4MTdhNTk3YTU0MjU0NmQ3NDllNjk4ZSB2Mi42LjUKLWMxZGM5ZTc5ODZhMmE4ZTEwNzBlYzdiZWU3NDg1MjBmZWJlZjM4MmUgdjIuNi42cmMxCi1lMTg5ZGM4ZmQ2NjE1NGVmNDZkOWNkMjI1ODRkNTY2NjliNTQ0Y2EzIHYyLjYuNnJjMgotOWY4NzcxZTA5MDUyNzdmOGIzYzI3OTkxMTNhMDYyZmRhNDE2NDk5NSB2Mi42LjYKK2I0MTA3ZWIwMGI0MjcxZmI3M2E5ZTFiNzM2ZDRmMjM0NjA5NTA3NzggdjIuN2ExCithZGM4NWViYzcyNzFjYzIyZTI0ZTgxNjc4MmJiMmI4ZDdmYTNhNmIzIHYyLjdhMgorNDE4MDU1N2I3YTliYjlkZDUzNDFhMThhZjE5OWY4NDNmMTk5ZTQ2ZSB2Mi43YTMKK2QyZTEwMjdlZGRlODRhMDI4NTNmY2Y5NzkwZjMxMWYxMGY0NmNmMGEgdjIuN2E0Cis2MTU1MGExMzAyYjA3YTczMTQzNmE4NGIyZDg2ZWIyYmFiM2IyZmIwIHYyLjdiMQorNmJiOTg5MWQ0Mjc1YmQ0MmE2OWIzZDkwM2QxM2I2ODc1NDNjOTE1ZCB2Mi43YjIKKzM4MWM1ZWViNTExMDM4ZDA5MWQ4ZTA4MDhjNGI4NTA4N2VkMmY2ODQgdjIuN3JjMQorMTNlNWIwYjIwNzFhMmE0MjA2N2ZiMDNmYWNjOTMxNDA5ZmE2YmE1MCB2Mi43cmMyCis2M2Q5ZjAwZmVhMDczMGMxYzQzN2E1MGY2NGE0MmI3NzkyYmRjYmZiIHYyLjdyYzEKKzUzOTVmOTY1ODhkNGYwMTk5ZDMyOWNiNzllYjEwOTY0OGRjNGVmNWUgdjIuNy4xCmRpZmYgLS1naXQgYS9EZW1vL2NnaS9jZ2kxLnB5IGIvRGVtby9jZ2kvY2dpMS5weQppbmRleCA5ZDI1YzdkLi5jNmYzZWZhIDEwMDc1NQotLS0gYS9EZW1vL2NnaS9jZ2kxLnB5CisrKyBiL0RlbW8vY2dpL2NnaTEucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvbG9jYWwvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKICIiIkNHSSB0ZXN0IDEgLSBjaGVjayBzZXJ2ZXIgc2V0dXAuIiIiCiAKZGlmZiAtLWdpdCBhL0RlbW8vY2dpL2NnaTIucHkgYi9EZW1vL2NnaS9jZ2kyLnB5CmluZGV4IGQ5NTZmNjUuLjgwMjZjNTUgMTAwNzU1Ci0tLSBhL0RlbW8vY2dpL2NnaTIucHkKKysrIGIvRGVtby9jZ2kvY2dpMi5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KIAogIiIiQ0dJIHRlc3QgMiAtIGJhc2ljIHVzZSBvZiBjZ2kgbW9kdWxlLiIiIgogCmRpZmYgLS1naXQgYS9EZW1vL2NnaS9jZ2kzLnB5IGIvRGVtby9jZ2kvY2dpMy5weQppbmRleCBhMzQyMWI1Li42NjkzYTg2IDEwMDc1NQotLS0gYS9EZW1vL2NnaS9jZ2kzLnB5CisrKyBiL0RlbW8vY2dpL2NnaTMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvbG9jYWwvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKICIiIkNHSSB0ZXN0IDMgKHBlcnNpc3RlbnQgZGF0YSkuIiIiCiAKZGlmZiAtLWdpdCBhL0RlbW8vY2xhc3Nlcy9Db21wbGV4LnB5IGIvRGVtby9jbGFzc2VzL0NvbXBsZXgucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9jbGFzc2VzL0RhdGVzLnB5IGIvRGVtby9jbGFzc2VzL0RhdGVzLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vY2xhc3Nlcy9EYm0ucHkgYi9EZW1vL2NsYXNzZXMvRGJtLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vY2xhc3Nlcy9SYW5nZS5weSBiL0RlbW8vY2xhc3Nlcy9SYW5nZS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL2NsYXNzZXMvUmV2LnB5IGIvRGVtby9jbGFzc2VzL1Jldi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL2NsYXNzZXMvVmVjLnB5IGIvRGVtby9jbGFzc2VzL1ZlYy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDU2Y2I4MzkuLmI4NzcxZWEKLS0tIGEvRGVtby9jbGFzc2VzL1ZlYy5weQorKysgYi9EZW1vL2NsYXNzZXMvVmVjLnB5CkBAIC0xLDIzICsxLDQxIEBACi0jIEEgc2ltcGxlIHZlY3RvciBjbGFzcwotCi0KLWRlZiB2ZWMoKnYpOgotICAgIHJldHVybiBWZWMoKnYpCi0KLQogY2xhc3MgVmVjOgorICAgICIiIiBBIHNpbXBsZSB2ZWN0b3IgY2xhc3MKIAorICAgIEluc3RhbmNlcyBvZiB0aGUgVmVjIGNsYXNzICBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBudW1iZXJzCisKKyAgICA+Pj4gYSA9IFZlYygxLCAyLCAzKQorICAgID4+PiBiID0gVmVjKDMsIDIsIDEpCisKKyAgICBhZGRlZAorICAgID4+PiBhICsgYgorICAgIFZlYyg0LCA0LCA0KQorCisgICAgc3VidHJhY3RlZAorICAgID4+PiBhIC0gYgorICAgIFZlYygtMiwgMCwgMikKKworICAgIGFuZCBtdWx0aXBsaWVkIGJ5IGEgc2NhbGFyIG9uIHRoZSBsZWZ0CisgICAgPj4+IDMuMCAqIGEKKyAgICBWZWMoMy4wLCA2LjAsIDkuMCkKKworICAgIG9yIG9uIHRoZSByaWdodAorICAgID4+PiBhICogMy4wCisgICAgVmVjKDMuMCwgNi4wLCA5LjApCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICp2KToKICAgICAgICAgc2VsZi52ID0gbGlzdCh2KQogCi0gICAgZGVmIGZyb21saXN0KHNlbGYsIHYpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tbGlzdChjbHMsIHYpOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2LCBsaXN0KToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgotICAgICAgICBzZWxmLnYgPSB2WzpdCi0gICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIGluc3QgPSBjbHMoKQorICAgICAgICBpbnN0LnYgPSB2CisgICAgICAgIHJldHVybiBpbnN0CiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAndmVjKCcgKyByZXByKHNlbGYudilbMTotMV0gKyAnKScKKyAgICAgICAgYXJncyA9ICcsICcuam9pbihyZXByKHgpIGZvciB4IGluIHNlbGYudikKKyAgICAgICAgcmV0dXJuICdWZWMoezB9KScuZm9ybWF0KGFyZ3MpCiAKICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnYpCkBAIC0yNywyOCArNDUsMjQgQEAKIAogICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKICAgICAgICAgIyBFbGVtZW50LXdpc2UgYWRkaXRpb24KLSAgICAgICAgdiA9IG1hcChsYW1iZGEgeCwgeTogeCt5LCBzZWxmLCBvdGhlcikKLSAgICAgICAgcmV0dXJuIFZlYygpLmZyb21saXN0KHYpCisgICAgICAgIHYgPSBbeCArIHkgZm9yIHgsIHkgaW4gemlwKHNlbGYudiwgb3RoZXIudildCisgICAgICAgIHJldHVybiBWZWMuZnJvbWxpc3QodikKIAogICAgIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKICAgICAgICAgIyBFbGVtZW50LXdpc2Ugc3VidHJhY3Rpb24KLSAgICAgICAgdiA9IG1hcChsYW1iZGEgeCwgeTogeC15LCBzZWxmLCBvdGhlcikKLSAgICAgICAgcmV0dXJuIFZlYygpLmZyb21saXN0KHYpCisgICAgICAgIHYgPSBbeCAtIHkgZm9yIHgsIHkgaW4gemlwKHNlbGYudiwgb3RoZXIudildCisgICAgICAgIHJldHVybiBWZWMuZnJvbWxpc3QodikKIAogICAgIGRlZiBfX211bF9fKHNlbGYsIHNjYWxhcik6CiAgICAgICAgICMgTXVsdGlwbHkgYnkgc2NhbGFyCi0gICAgICAgIHYgPSBtYXAobGFtYmRhIHg6IHgqc2NhbGFyLCBzZWxmLnYpCi0gICAgICAgIHJldHVybiBWZWMoKS5mcm9tbGlzdCh2KQorICAgICAgICB2ID0gW3ggKiBzY2FsYXIgZm9yIHggaW4gc2VsZi52XQorICAgICAgICByZXR1cm4gVmVjLmZyb21saXN0KHYpCiAKKyAgICBfX3JtdWxfXyA9IF9fbXVsX18KIAogCiBkZWYgdGVzdCgpOgotICAgIGEgPSB2ZWMoMSwgMiwgMykKLSAgICBiID0gdmVjKDMsIDIsIDEpCi0gICAgcHJpbnQgYQotICAgIHByaW50IGIKLSAgICBwcmludCBhK2IKLSAgICBwcmludCBhLWIKLSAgICBwcmludCBhKjMuMAorICAgIGltcG9ydCBkb2N0ZXN0CisgICAgZG9jdGVzdC50ZXN0bW9kKCkKIAogdGVzdCgpCmRpZmYgLS1naXQgYS9EZW1vL2NsYXNzZXMvYml0dmVjLnB5IGIvRGVtby9jbGFzc2VzL2JpdHZlYy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL2VtYmVkL01ha2VmaWxlIGIvRGVtby9lbWJlZC9NYWtlZmlsZQppbmRleCBkZGJkZDkyLi4xOWJhMzQ0IDEwMDY0NAotLS0gYS9EZW1vL2VtYmVkL01ha2VmaWxlCisrKyBiL0RlbW8vZW1iZWQvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjIE1ha2VmaWxlIGZvciBlbWJlZGRlZCBQeXRob24gdXNlIGRlbW8uCi0jIChUaGlzIHZlcnNpb24gdGFpbG9yZWQgZm9yIG15IFJlZCBIYXQgTGludXggNi4xIHNldHVwOworIyAoVGhpcyB2ZXJzaW9uIG9yaWdpbmFsbHkgd3JpdHRlbiBvbiBSZWQgSGF0IExpbnV4IDYuMTsKICMgZWRpdCBsaW5lcyBtYXJrZWQgd2l0aCBYWFguKQogCiAjIFhYWCBUaGUgY29tcGlsZXIgeW91IGFyZSB1c2luZwpAQCAtMTAsNyArMTAsNyBAQAogc3JjZGlyPQkJLi4vLi4KIAogIyBQeXRob24gdmVyc2lvbgotVkVSU0lPTj0JMi42CitWRVJTSU9OPQkyLjcKIAogIyBDb21waWxlciBmbGFncwogT1BUPQkJLWcKQEAgLTIxLDcgKzIxLDcgQEAKICMgVGhlIFB5dGhvbiBsaWJyYXJ5CiBMSUJQWVRIT049CSQoYmxkZGlyKS9saWJweXRob24kKFZFUlNJT04pLmEKIAotIyBYWFggZWRpdCBMSUJTIChpbiBwYXJ0aWN1bGFyKSB0byBtYXRjaCAkKGJsZGRpcikvTW9kdWxlcy9NYWtlZmlsZQorIyBYWFggZWRpdCBMSUJTIChpbiBwYXJ0aWN1bGFyKSB0byBtYXRjaCAkKGJsZGRpcikvTWFrZWZpbGUKIExJQlM9CQktbG5zbCAtbGRsIC1scmVhZGxpbmUgLWx0ZXJtY2FwIC1saWVlZSAtbHB0aHJlYWQgLWx1dGlsCiBMREZMQUdTPQktWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMKIFNZU0xJQlM9CS1sbQpkaWZmIC0tZ2l0IGEvRGVtby9lbWJlZC9kZW1vLmMgYi9EZW1vL2VtYmVkL2RlbW8uYwppbmRleCA1NWJjODA4Li4wMGM1YTBlIDEwMDY0NAotLS0gYS9EZW1vL2VtYmVkL2RlbW8uYworKysgYi9EZW1vL2VtYmVkL2RlbW8uYwpAQCAtMTYsMTAgKzE2LDE5IEBACiAgICAgaW5pdHh5enp5KCk7CiAKICAgICAvKiBEZWZpbmUgc3lzLmFyZ3YuICBJdCBpcyB1cCB0byB0aGUgYXBwbGljYXRpb24gaWYgeW91Ci0gICAgICAgd2FudCB0aGlzOyB5b3UgY2FuIGFsc28gbGV0IGl0IHVuZGVmaW5lZCAoc2luY2UgdGhlIFB5dGhvbgorICAgICAgIHdhbnQgdGhpczsgeW91IGNhbiBhbHNvIGxlYXZlIGl0IHVuZGVmaW5lZCAoc2luY2UgdGhlIFB5dGhvbgogICAgICAgIGNvZGUgaXMgZ2VuZXJhbGx5IG5vdCBhIG1haW4gcHJvZ3JhbSBpdCBoYXMgbm8gYnVzaW5lc3MKLSAgICAgICB0b3VjaGluZyBzeXMuYXJndi4uLikgKi8KLSAgICBQeVN5c19TZXRBcmd2KGFyZ2MsIGFyZ3YpOworICAgICAgIHRvdWNoaW5nIHN5cy5hcmd2Li4uKSAKKworICAgICAgIElmIHRoZSB0aGlyZCBhcmd1bWVudCBpcyB0cnVlLCBzeXMucGF0aCBpcyBtb2RpZmllZCB0byBpbmNsdWRlCisgICAgICAgZWl0aGVyIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc2NyaXB0IG5hbWVkIGJ5IGFyZ3ZbMF0sIG9yCisgICAgICAgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBUaGlzIGNhbiBiZSByaXNreTsgaWYgeW91IHJ1bgorICAgICAgIGFuIGFwcGxpY2F0aW9uIGVtYmVkZGluZyBQeXRob24gaW4gYSBkaXJlY3RvcnkgY29udHJvbGxlZCBieQorICAgICAgIHNvbWVvbmUgZWxzZSwgYXR0YWNrZXJzIGNvdWxkIHB1dCBhIFRyb2phbi1ob3JzZSBtb2R1bGUgaW4gdGhlCisgICAgICAgZGlyZWN0b3J5IChzYXksIGEgZmlsZSBuYW1lZCBvcy5weSkgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIHdvdWxkCisgICAgICAgdGhlbiBpbXBvcnQgYW5kIHJ1bi4KKyAgICAqLworICAgIFB5U3lzX1NldEFyZ3ZFeChhcmdjLCBhcmd2LCAwKTsKIAogICAgIC8qIERvIHNvbWUgYXBwbGljYXRpb24gc3BlY2lmaWMgY29kZSAqLwogICAgIHByaW50ZigiSGVsbG8sIGJyYXZlIG5ldyB3b3JsZFxuXG4iKTsKZGlmZiAtLWdpdCBhL0RlbW8vaW1wdXRpbC9pbXBvcnRlcnMucHkgYi9EZW1vL2ltcHV0aWwvaW1wb3J0ZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjRmZjAyLi4wMDAwMDAwCi0tLSBhL0RlbW8vaW1wdXRpbC9pbXBvcnRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotIwotIyBpbXBvcnRlcnMucHkKLSMKLSMgRGVtb25zdHJhdGlvbiBzdWJjbGFzc2VzIG9mIGltcHV0aWwuSW1wb3J0ZXIKLSMKLQotIyBUaGVyZSBzaG91bGQgYmUgY29uc2lkZXJhdGlvbiBmb3IgdGhlIGltcG9ydHMgYmVsb3cgaWYgaXQgaXMgZGVzaXJhYmxlCi0jIHRvIGhhdmUgImFsbCIgbW9kdWxlcyBiZSBpbXBvcnRlZCB0aHJvdWdoIHRoZSBpbXB1dGlsIHN5c3RlbS4KLQotIyB0aGVzZSBhcmUgQyBleHRlbnNpb25zCi1pbXBvcnQgc3lzCi1pbXBvcnQgaW1wCi1pbXBvcnQgc3RydWN0Ci1pbXBvcnQgbWFyc2hhbAotCi0jIHRoZXNlIGFyZSAucHkgbW9kdWxlcwotaW1wb3J0IGltcHV0aWwKLWltcG9ydCBvcwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLV9UdXBsZVR5cGUgPSB0eXBlKCgpKQotX1N0cmluZ1R5cGUgPSB0eXBlKCcnKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgYnl0ZS1jb21waWxlZCBmaWxlIHN1ZmZpYyBjaGFyYWN0ZXIKLV9zdWZmaXhfY2hhciA9IF9fZGVidWdfXyBhbmQgJ2MnIG9yICdvJwotCi0jIGJ5dGUtY29tcGlsZWQgZmlsZSBzdWZmaXgKLV9zdWZmaXggPSAnLnB5JyArIF9zdWZmaXhfY2hhcgotCi0jIHRoZSBDX0VYVEVOU0lPTiBzdWZmaXhlcwotX2Nfc3VmZml4ZXMgPSBmaWx0ZXIobGFtYmRhIHg6IHhbMl0gPT0gaW1wLkNfRVhURU5TSU9OLCBpbXAuZ2V0X3N1ZmZpeGVzKCkpCi0KLWRlZiBfdGltZXN0YW1wKHBhdGhuYW1lKToKLSAgICAiUmV0dXJuIHRoZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGFzIGEgTG9uZy4iCi0gICAgdHJ5OgotICAgICAgICBzID0gb3Muc3RhdChwYXRobmFtZSkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICByZXR1cm4gbG9uZyhzWzhdKQotCi1kZWYgX2ZzX2ltcG9ydChkaXIsIG1vZG5hbWUsIGZxbmFtZSk6Ci0gICAgIkZldGNoIGEgbW9kdWxlIGZyb20gdGhlIGZpbGVzeXN0ZW0uIgotCi0gICAgcGF0aG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBtb2RuYW1lKQotICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aG5hbWUpOgotICAgICAgICB2YWx1ZXMgPSB7ICdfX3BrZ2Rpcl9fJyA6IHBhdGhuYW1lLCAnX19wYXRoX18nIDogWyBwYXRobmFtZSBdIH0KLSAgICAgICAgaXNwa2cgPSAxCi0gICAgICAgIHBhdGhuYW1lID0gb3MucGF0aC5qb2luKHBhdGhuYW1lLCAnX19pbml0X18nKQotICAgIGVsc2U6Ci0gICAgICAgIHZhbHVlcyA9IHsgfQotICAgICAgICBpc3BrZyA9IDAKLQotICAgICAgICAjIGxvb2sgZm9yIGR5bmxvYWQgbW9kdWxlcwotICAgICAgICBmb3IgZGVzYyBpbiBfY19zdWZmaXhlczoKLSAgICAgICAgICAgIGZpbGUgPSBwYXRobmFtZSArIGRlc2NbMF0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZSwgZGVzY1sxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wLmxvYWRfbW9kdWxlKGZxbmFtZSwgZnAsIGZpbGUsIGRlc2MpCi0gICAgICAgICAgICAgICAgdmFsdWVzWydfX2ZpbGVfXyddID0gZmlsZQotICAgICAgICAgICAgICAgIHJldHVybiAwLCBtb2R1bGUsIHZhbHVlcwotCi0gICAgdF9weSA9IF90aW1lc3RhbXAocGF0aG5hbWUgKyAnLnB5JykKLSAgICB0X3B5YyA9IF90aW1lc3RhbXAocGF0aG5hbWUgKyBfc3VmZml4KQotICAgIGlmIHRfcHkgaXMgTm9uZSBhbmQgdF9weWMgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBjb2RlID0gTm9uZQotICAgIGlmIHRfcHkgaXMgTm9uZSBvciAodF9weWMgaXMgbm90IE5vbmUgYW5kIHRfcHljID49IHRfcHkpOgotICAgICAgICBmaWxlID0gcGF0aG5hbWUgKyBfc3VmZml4Ci0gICAgICAgIGYgPSBvcGVuKGZpbGUsICdyYicpCi0gICAgICAgIGlmIGYucmVhZCg0KSA9PSBpbXAuZ2V0X21hZ2ljKCk6Ci0gICAgICAgICAgICB0ID0gc3RydWN0LnVucGFjaygnPEknLCBmLnJlYWQoNCkpWzBdCi0gICAgICAgICAgICBpZiB0ID09IHRfcHk6Ci0gICAgICAgICAgICAgICAgY29kZSA9IG1hcnNoYWwubG9hZChmKQotICAgICAgICBmLmNsb3NlKCkKLSAgICBpZiBjb2RlIGlzIE5vbmU6Ci0gICAgICAgIGZpbGUgPSBwYXRobmFtZSArICcucHknCi0gICAgICAgIGNvZGUgPSBfY29tcGlsZShmaWxlLCB0X3B5KQotCi0gICAgdmFsdWVzWydfX2ZpbGVfXyddID0gZmlsZQotICAgIHJldHVybiBpc3BrZywgY29kZSwgdmFsdWVzCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgU2ltcGxlIGZ1bmN0aW9uLWJhc2VkIGltcG9ydGVyCi0jCi1jbGFzcyBGdW5jSW1wb3J0ZXIoaW1wdXRpbC5JbXBvcnRlcik6Ci0gICAgIkltcG9ydGVyIHN1YmNsYXNzIHRvIGRlbGVnYXRlIHRvIGEgZnVuY3Rpb24gcmF0aGVyIHRoYW4gbWV0aG9kIG92ZXJyaWRlcy4iCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMpOgotICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIHBhcmVudCwgbW9kbmFtZSwgZnFuYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZnVuYyhwYXJlbnQsIG1vZG5hbWUsIGZxbmFtZSkKLQotZGVmIGluc3RhbGxfd2l0aChmdW5jKToKLSAgICBGdW5jSW1wb3J0ZXIoZnVuYykuaW5zdGFsbCgpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyBCYXNlIGNsYXNzIGZvciBhcmNoaXZlLWJhc2VkIGltcG9ydGluZwotIwotY2xhc3MgUGFja2FnZUFyY2hpdmVJbXBvcnRlcihpbXB1dGlsLkltcG9ydGVyKToKLSAgICAiIiJJbXBvcnRlciBzdWJjbGFzcyB0byBpbXBvcnQgZnJvbSAoZmlsZSkgYXJjaGl2ZXMuCi0KLSAgICBUaGlzIEltcG9ydGVyIGhhbmRsZXMgaW1wb3J0cyBvZiB0aGUgc3R5bGUgPGFyY2hpdmU+LjxzdWJmaWxlPiwgd2hlcmUKLSAgICA8YXJjaGl2ZT4gY2FuIGJlIGxvY2F0ZWQgdXNpbmcgYSBzdWJjbGFzcy1zcGVjaWZpYyBtZWNoYW5pc20gYW5kIHRoZQotICAgIDxzdWJmaWxlPiBpcyBmb3VuZCBpbiB0aGUgYXJjaGl2ZSB1c2luZyBhIHN1YmNsYXNzLXNwZWNpZmljIG1lY2hhbmlzbS4KLQotICAgIFRoaXMgY2xhc3MgZGVmaW5lcyB0d28gaG9va3MgZm9yIHN1YmNsYXNzZXM6IG9uZSB0byBsb2NhdGUgYW4gYXJjaGl2ZQotICAgIChhbmQgcG9zc2libHkgcmV0dXJuIHNvbWUgY29udGV4dCBmb3IgZnV0dXJlIHN1YmZpbGUgbG9va3VwcyksIGFuZCBvbmUKLSAgICB0byBsb2NhdGUgc3ViZmlsZXMuCi0gICAgIiIiCi0KLSAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgcGFyZW50LCBtb2RuYW1lLCBmcW5hbWUpOgotICAgICAgICBpZiBwYXJlbnQ6Ci0gICAgICAgICAgICAjIHRoZSBJbXBvcnRlci5fZmluaXNoX2ltcG9ydCBsb2dpYyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIGltcG9ydHMKLSAgICAgICAgICAgICMgdW5kZXIgdGhlIHRvcCBsZXZlbCBtb2R1bGUgKHBhY2thZ2UgLyBhcmNoaXZlKS4KLSAgICAgICAgICAgIGFzc2VydCBwYXJlbnQuX19pbXBvcnRlcl9fID09IHNlbGYKLQotICAgICAgICAgICAgIyBpZiBhIHBhcmVudCAicGFja2FnZSIgaXMgcHJvdmlkZWQsIHRoZW4gd2UgYXJlIGltcG9ydGluZyBhCi0gICAgICAgICAgICAjIHN1Yi1maWxlIGZyb20gdGhlIGFyY2hpdmUuCi0gICAgICAgICAgICByZXN1bHQgPSBzZWxmLmdldF9zdWJmaWxlKHBhcmVudC5fX2FyY2hpdmVfXywgbW9kbmFtZSkKLSAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgX1R1cGxlVHlwZSk6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihyZXN1bHQpID09IDIKLSAgICAgICAgICAgICAgICByZXR1cm4gKDAsKSArIHJlc3VsdAotICAgICAgICAgICAgcmV0dXJuIDAsIHJlc3VsdCwge30KLQotICAgICAgICAjIG5vIHBhcmVudCB3YXMgcHJvdmlkZWQsIHNvIHRoZSBhcmNoaXZlIHNob3VsZCBleGlzdCBzb21ld2hlcmUgb24gdGhlCi0gICAgICAgICMgZGVmYXVsdCAicGF0aCIuCi0gICAgICAgIGFyY2hpdmUgPSBzZWxmLmdldF9hcmNoaXZlKG1vZG5hbWUpCi0gICAgICAgIGlmIGFyY2hpdmUgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiAxLCAiIiwgeydfX2FyY2hpdmVfXyc6YXJjaGl2ZX0KLQotICAgIGRlZiBnZXRfYXJjaGl2ZShzZWxmLCBtb2RuYW1lKToKLSAgICAgICAgIiIiR2V0IGFuIGFyY2hpdmUgb2YgbW9kdWxlcy4KLQotICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgbG9jYXRlIGFuIGFyY2hpdmUgYW5kIHJldHVybiBhIHZhbHVlIHdoaWNoIGNhbiBiZQotICAgICAgICB1c2VkIGJ5IGdldF9zdWJmaWxlIHRvIGxvYWQgbW9kdWxlcyBmcm9tIGl0LiBUaGUgdmFsdWUgbWF5IGJlIGEgc2ltcGxlCi0gICAgICAgIHBhdGhuYW1lLCBhbiBvcGVuIGZpbGUsIG9yIGEgY29tcGxleCBvYmplY3QgdGhhdCBjYWNoZXMgaW5mb3JtYXRpb24KLSAgICAgICAgZm9yIGZ1dHVyZSBpbXBvcnRzLgotCi0gICAgICAgIFJldHVybiBOb25lIGlmIHRoZSBhcmNoaXZlIHdhcyBub3QgZm91bmQuCi0gICAgICAgICIiIgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJnZXRfYXJjaGl2ZSBub3QgaW1wbGVtZW50ZWQiCi0KLSAgICBkZWYgZ2V0X3N1YmZpbGUoc2VsZiwgYXJjaGl2ZSwgbW9kbmFtZSk6Ci0gICAgICAgICIiIkdldCBjb2RlIGZyb20gYSBzdWJmaWxlIGluIHRoZSBzcGVjaWZpZWQgYXJjaGl2ZS4KLQotICAgICAgICBHaXZlbiB0aGUgc3BlY2lmaWVkIGFyY2hpdmUgKGFzIHJldHVybmVkIGJ5IGdldF9hcmNoaXZlKCkpLCBsb2NhdGUKLSAgICAgICAgYW5kIHJldHVybiBhIGNvZGUgb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZSBuYW1lLgotCi0gICAgICAgIEEgMi10dXBsZSBtYXkgYmUgcmV0dXJuZWQsIGNvbnNpc3Rpbmcgb2YgYSBjb2RlIG9iamVjdCBhbmQgYSBkaWN0Ci0gICAgICAgIG9mIG5hbWUvdmFsdWVzIHRvIHBsYWNlIGludG8gdGhlIHRhcmdldCBtb2R1bGUuCi0KLSAgICAgICAgUmV0dXJuIE5vbmUgaWYgdGhlIHN1YmZpbGUgd2FzIG5vdCBmb3VuZC4KLSAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgImdldF9zdWJmaWxlIG5vdCBpbXBsZW1lbnRlZCIKLQotCi1jbGFzcyBQYWNrYWdlQXJjaGl2ZShQYWNrYWdlQXJjaGl2ZUltcG9ydGVyKToKLSAgICAiUGFja2FnZUFyY2hpdmVJbXBvcnRlciBzdWJjbGFzcyB0aGF0IHJlZmVycyB0byBhIHNwZWNpZmljIGFyY2hpdmUuIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZG5hbWUsIGFyY2hpdmVfcGF0aG5hbWUpOgotICAgICAgICBzZWxmLl9fbW9kbmFtZSA9IG1vZG5hbWUKLSAgICAgICAgc2VsZi5fX3BhdGggPSBhcmNoaXZlX3BhdGhuYW1lCi0KLSAgICBkZWYgZ2V0X2FyY2hpdmUoc2VsZiwgbW9kbmFtZSk6Ci0gICAgICAgIGlmIG1vZG5hbWUgPT0gc2VsZi5fX21vZG5hbWU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fX3BhdGgKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICMgZ2V0X3N1YmZpbGUgaXMgcGFzc2VkIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBhcmNoaXZlCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyBFbXVsYXRlIHRoZSBzdGFuZGFyZCBkaXJlY3RvcnktYmFzZWQgaW1wb3J0IG1lY2hhbmlzbQotIwotY2xhc3MgRGlyZWN0b3J5SW1wb3J0ZXIoaW1wdXRpbC5JbXBvcnRlcik6Ci0gICAgIkltcG9ydGVyIHN1YmNsYXNzIHRvIGVtdWxhdGUgdGhlIHN0YW5kYXJkIGltcG9ydGVyLiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIpOgotICAgICAgICBzZWxmLmRpciA9IGRpcgotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIHBhcmVudCwgbW9kbmFtZSwgZnFuYW1lKToKLSAgICAgICAgaWYgcGFyZW50OgotICAgICAgICAgICAgZGlyID0gcGFyZW50Ll9fcGtnZGlyX18KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRpciA9IHNlbGYuZGlyCi0KLSAgICAgICAgIyBSZXR1cm4gdGhlIG1vZHVsZSAoYW5kIG90aGVyIGluZm8pIGlmIGZvdW5kIGluIHRoZSBzcGVjaWZpZWQKLSAgICAgICAgIyBkaXJlY3RvcnkuIE90aGVyd2lzZSwgcmV0dXJuIE5vbmUuCi0gICAgICAgIHJldHVybiBfZnNfaW1wb3J0KGRpciwgbW9kbmFtZSwgZnFuYW1lKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJzwlcy4lcyBmb3IgIiVzIiBhdCAweCV4PicgJSAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZChzZWxmKSkKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIEVtdWxhdGUgdGhlIHN0YW5kYXJkIHBhdGgtc3R5bGUgaW1wb3J0IG1lY2hhbmlzbQotIwotY2xhc3MgUGF0aEltcG9ydGVyKGltcHV0aWwuSW1wb3J0ZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPXN5cy5wYXRoKToKLSAgICAgICAgc2VsZi5wYXRoID0gcGF0aAotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIHBhcmVudCwgbW9kbmFtZSwgZnFuYW1lKToKLSAgICAgICAgaWYgcGFyZW50OgotICAgICAgICAgICAgIyB3ZSBhcmUgbG9va2luZyBmb3IgYSBtb2R1bGUgaW5zaWRlIG9mIGEgc3BlY2lmaWMgcGFja2FnZQotICAgICAgICAgICAgcmV0dXJuIF9mc19pbXBvcnQocGFyZW50Ll9fcGtnZGlyX18sIG1vZG5hbWUsIGZxbmFtZSkKLQotICAgICAgICAjIHNjYW4gc3lzLnBhdGgsIGxvb2tpbmcgZm9yIHRoZSByZXF1ZXN0ZWQgbW9kdWxlCi0gICAgICAgIGZvciBkaXIgaW4gc2VsZi5wYXRoOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkaXIsIF9TdHJpbmdUeXBlKToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBfZnNfaW1wb3J0KGRpciwgbW9kbmFtZSwgZnFuYW1lKQotICAgICAgICAgICAgICAgIGlmIHJlc3VsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgICAgICMgbm90IGZvdW5kCi0gICAgICAgIHJldHVybiBOb25lCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotZGVmIF90ZXN0X2RpcigpOgotICAgICJEZWJ1Zy90ZXN0IGZ1bmN0aW9uIHRvIGNyZWF0ZSBEaXJlY3RvcnlJbXBvcnRlcnMgZnJvbSBzeXMucGF0aC4iCi0gICAgaW1wdXRpbC5JbXBvcnRNYW5hZ2VyKCkuaW5zdGFsbCgpCi0gICAgcGF0aCA9IHN5cy5wYXRoWzpdCi0gICAgcGF0aC5yZXZlcnNlKCkKLSAgICBmb3IgZCBpbiBwYXRoOgotICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgRGlyZWN0b3J5SW1wb3J0ZXIoZCkpCi0gICAgc3lzLnBhdGguaW5zZXJ0KDAsIGltcHV0aWwuQnVpbHRpbkltcG9ydGVyKCkpCi0KLWRlZiBfdGVzdF9yZXZhbXAoKToKLSAgICAiRGVidWcvdGVzdCBmdW5jdGlvbiBmb3IgdGhlIHJldmFtcGVkIGltcG9ydCBzeXN0ZW0uIgotICAgIGltcHV0aWwuSW1wb3J0TWFuYWdlcigpLmluc3RhbGwoKQotICAgIHN5cy5wYXRoLmluc2VydCgwLCBQYXRoSW1wb3J0ZXIoKSkKLSAgICBzeXMucGF0aC5pbnNlcnQoMCwgaW1wdXRpbC5CdWlsdGluSW1wb3J0ZXIoKSkKZGlmZiAtLWdpdCBhL0RlbW8vaW1wdXRpbC9rbmVlLnB5IGIvRGVtby9pbXB1dGlsL2tuZWUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NzY0ZGEuLjAwMDAwMDAKLS0tIGEvRGVtby9pbXB1dGlsL2tuZWUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotIiIiQW4gUHl0aG9uIHJlLWltcGxlbWVudGF0aW9uIG9mIGhpZXJhcmNoaWNhbCBtb2R1bGUgaW1wb3J0LgotCi1UaGlzIGNvZGUgaXMgaW50ZW5kZWQgdG8gYmUgcmVhZCwgbm90IGV4ZWN1dGVkLiAgSG93ZXZlciwgaXQgZG9lcyB3b3JrCi0tLSBhbGwgeW91IG5lZWQgdG8gZG8gdG8gZW5hYmxlIGl0IGlzICJpbXBvcnQga25lZSIuCi0KLShUaGUgbmFtZSBpcyBhIHB1biBvbiB0aGUga2x1bmtpZXIgcHJlZGVjZXNzb3Igb2YgdGhpcyBtb2R1bGUsICJuaSIuKQotCi0iIiIKLQotaW1wb3J0IHN5cywgaW1wLCBfX2J1aWx0aW5fXwotCi0KLSMgUmVwbGFjZW1lbnQgZm9yIF9faW1wb3J0X18oKQotZGVmIGltcG9ydF9ob29rKG5hbWUsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUsIGZyb21saXN0PU5vbmUpOgotICAgIHBhcmVudCA9IGRldGVybWluZV9wYXJlbnQoZ2xvYmFscykKLSAgICBxLCB0YWlsID0gZmluZF9oZWFkX3BhY2thZ2UocGFyZW50LCBuYW1lKQotICAgIG0gPSBsb2FkX3RhaWwocSwgdGFpbCkKLSAgICBpZiBub3QgZnJvbWxpc3Q6Ci0gICAgICAgIHJldHVybiBxCi0gICAgaWYgaGFzYXR0cihtLCAiX19wYXRoX18iKToKLSAgICAgICAgZW5zdXJlX2Zyb21saXN0KG0sIGZyb21saXN0KQotICAgIHJldHVybiBtCi0KLWRlZiBkZXRlcm1pbmVfcGFyZW50KGdsb2JhbHMpOgotICAgIGlmIG5vdCBnbG9iYWxzIG9yICBub3QgZ2xvYmFscy5oYXNfa2V5KCJfX25hbWVfXyIpOgotICAgICAgICByZXR1cm4gTm9uZQotICAgIHBuYW1lID0gZ2xvYmFsc1snX19uYW1lX18nXQotICAgIGlmIGdsb2JhbHMuaGFzX2tleSgiX19wYXRoX18iKToKLSAgICAgICAgcGFyZW50ID0gc3lzLm1vZHVsZXNbcG5hbWVdCi0gICAgICAgIGFzc2VydCBnbG9iYWxzIGlzIHBhcmVudC5fX2RpY3RfXwotICAgICAgICByZXR1cm4gcGFyZW50Ci0gICAgaWYgJy4nIGluIHBuYW1lOgotICAgICAgICBpID0gcG5hbWUucmZpbmQoJy4nKQotICAgICAgICBwbmFtZSA9IHBuYW1lWzppXQotICAgICAgICBwYXJlbnQgPSBzeXMubW9kdWxlc1twbmFtZV0KLSAgICAgICAgYXNzZXJ0IHBhcmVudC5fX25hbWVfXyA9PSBwbmFtZQotICAgICAgICByZXR1cm4gcGFyZW50Ci0gICAgcmV0dXJuIE5vbmUKLQotZGVmIGZpbmRfaGVhZF9wYWNrYWdlKHBhcmVudCwgbmFtZSk6Ci0gICAgaWYgJy4nIGluIG5hbWU6Ci0gICAgICAgIGkgPSBuYW1lLmZpbmQoJy4nKQotICAgICAgICBoZWFkID0gbmFtZVs6aV0KLSAgICAgICAgdGFpbCA9IG5hbWVbaSsxOl0KLSAgICBlbHNlOgotICAgICAgICBoZWFkID0gbmFtZQotICAgICAgICB0YWlsID0gIiIKLSAgICBpZiBwYXJlbnQ6Ci0gICAgICAgIHFuYW1lID0gIiVzLiVzIiAlIChwYXJlbnQuX19uYW1lX18sIGhlYWQpCi0gICAgZWxzZToKLSAgICAgICAgcW5hbWUgPSBoZWFkCi0gICAgcSA9IGltcG9ydF9tb2R1bGUoaGVhZCwgcW5hbWUsIHBhcmVudCkKLSAgICBpZiBxOiByZXR1cm4gcSwgdGFpbAotICAgIGlmIHBhcmVudDoKLSAgICAgICAgcW5hbWUgPSBoZWFkCi0gICAgICAgIHBhcmVudCA9IE5vbmUKLSAgICAgICAgcSA9IGltcG9ydF9tb2R1bGUoaGVhZCwgcW5hbWUsIHBhcmVudCkKLSAgICAgICAgaWYgcTogcmV0dXJuIHEsIHRhaWwKLSAgICByYWlzZSBJbXBvcnRFcnJvciwgIk5vIG1vZHVsZSBuYW1lZCAiICsgcW5hbWUKLQotZGVmIGxvYWRfdGFpbChxLCB0YWlsKToKLSAgICBtID0gcQotICAgIHdoaWxlIHRhaWw6Ci0gICAgICAgIGkgPSB0YWlsLmZpbmQoJy4nKQotICAgICAgICBpZiBpIDwgMDogaSA9IGxlbih0YWlsKQotICAgICAgICBoZWFkLCB0YWlsID0gdGFpbFs6aV0sIHRhaWxbaSsxOl0KLSAgICAgICAgbW5hbWUgPSAiJXMuJXMiICUgKG0uX19uYW1lX18sIGhlYWQpCi0gICAgICAgIG0gPSBpbXBvcnRfbW9kdWxlKGhlYWQsIG1uYW1lLCBtKQotICAgICAgICBpZiBub3QgbToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yLCAiTm8gbW9kdWxlIG5hbWVkICIgKyBtbmFtZQotICAgIHJldHVybiBtCi0KLWRlZiBlbnN1cmVfZnJvbWxpc3QobSwgZnJvbWxpc3QsIHJlY3Vyc2l2ZT0wKToKLSAgICBmb3Igc3ViIGluIGZyb21saXN0OgotICAgICAgICBpZiBzdWIgPT0gIioiOgotICAgICAgICAgICAgaWYgbm90IHJlY3Vyc2l2ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGFsbCA9IG0uX19hbGxfXwotICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGVuc3VyZV9mcm9tbGlzdChtLCBhbGwsIDEpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBzdWIgIT0gIioiIGFuZCBub3QgaGFzYXR0cihtLCBzdWIpOgotICAgICAgICAgICAgc3VibmFtZSA9ICIlcy4lcyIgJSAobS5fX25hbWVfXywgc3ViKQotICAgICAgICAgICAgc3VibW9kID0gaW1wb3J0X21vZHVsZShzdWIsIHN1Ym5hbWUsIG0pCi0gICAgICAgICAgICBpZiBub3Qgc3VibW9kOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yLCAiTm8gbW9kdWxlIG5hbWVkICIgKyBzdWJuYW1lCi0KLWRlZiBpbXBvcnRfbW9kdWxlKHBhcnRuYW1lLCBmcW5hbWUsIHBhcmVudCk6Ci0gICAgdHJ5OgotICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbZnFuYW1lXQotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIHRyeToKLSAgICAgICAgZnAsIHBhdGhuYW1lLCBzdHVmZiA9IGltcC5maW5kX21vZHVsZShwYXJ0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgYW5kIHBhcmVudC5fX3BhdGhfXykKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgdHJ5OgotICAgICAgICBtID0gaW1wLmxvYWRfbW9kdWxlKGZxbmFtZSwgZnAsIHBhdGhuYW1lLCBzdHVmZikKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBmcDogZnAuY2xvc2UoKQotICAgIGlmIHBhcmVudDoKLSAgICAgICAgc2V0YXR0cihwYXJlbnQsIHBhcnRuYW1lLCBtKQotICAgIHJldHVybiBtCi0KLQotIyBSZXBsYWNlbWVudCBmb3IgcmVsb2FkKCkKLWRlZiByZWxvYWRfaG9vayhtb2R1bGUpOgotICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KLSAgICBpZiAnLicgbm90IGluIG5hbWU6Ci0gICAgICAgIHJldHVybiBpbXBvcnRfbW9kdWxlKG5hbWUsIG5hbWUsIE5vbmUpCi0gICAgaSA9IG5hbWUucmZpbmQoJy4nKQotICAgIHBuYW1lID0gbmFtZVs6aV0KLSAgICBwYXJlbnQgPSBzeXMubW9kdWxlc1twbmFtZV0KLSAgICByZXR1cm4gaW1wb3J0X21vZHVsZShuYW1lW2krMTpdLCBuYW1lLCBwYXJlbnQpCi0KLQotIyBTYXZlIHRoZSBvcmlnaW5hbCBob29rcwotb3JpZ2luYWxfaW1wb3J0ID0gX19idWlsdGluX18uX19pbXBvcnRfXwotb3JpZ2luYWxfcmVsb2FkID0gX19idWlsdGluX18ucmVsb2FkCi0KLSMgTm93IGluc3RhbGwgb3VyIGhvb2tzCi1fX2J1aWx0aW5fXy5fX2ltcG9ydF9fID0gaW1wb3J0X2hvb2sKLV9fYnVpbHRpbl9fLnJlbG9hZCA9IHJlbG9hZF9ob29rCmRpZmYgLS1naXQgYS9EZW1vL21kNXRlc3QvbWQ1ZHJpdmVyLnB5IGIvRGVtby9tZDV0ZXN0L21kNWRyaXZlci5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3BhcnNlci9SRUFETUUgYi9EZW1vL3BhcnNlci9SRUFETUUKaW5kZXggYTU3NmQzMy4uZmQ1ZWIyNSAxMDA2NDQKLS0tIGEvRGVtby9wYXJzZXIvUkVBRE1FCisrKyBiL0RlbW8vcGFyc2VyL1JFQURNRQpAQCAtNiwyNiArNiwyNyBAQAogRmlsZXM6CiAtLS0tLS0KIAotCUZJTEVTCSAgICAgLS0gbGlzdCBvZiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhcnNlciBtb2R1bGUuCisgICAgRklMRVMgICAgICAgIC0tIGxpc3Qgb2YgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXJzZXIgbW9kdWxlLgogCi0JUkVBRE1FCSAgICAgLS0gdGhpcyBmaWxlLgorICAgIFJFQURNRSAgICAgICAtLSB0aGlzIGZpbGUuCiAKLQlleGFtcGxlLnB5ICAgLS0JbW9kdWxlIHRoYXQgdXNlcyB0aGUgYHBhcnNlcicgbW9kdWxlIHRvIGV4dHJhY3QKLQkJCWluZm9ybWF0aW9uIGZyb20gdGhlIHBhcnNlIHRyZWUgb2YgUHl0aG9uIHNvdXJjZQotCQkJY29kZS4KKyAgICBkb2NzdHJpbmcucHkgLS0gc2FtcGxlIHNvdXJjZSBmaWxlIGNvbnRhaW5pbmcgb25seSBhIG1vZHVsZSBkb2NzdHJpbmcuCiAKLQlkb2NzdHJpbmcucHkgLS0gc2FtcGxlIHNvdXJjZSBmaWxlIGNvbnRhaW5pbmcgb25seSBhIG1vZHVsZSBkb2NzdHJpbmcuCisgICAgZXhhbXBsZS5weSAgIC0tIG1vZHVsZSB0aGF0IHVzZXMgdGhlIGBwYXJzZXInIG1vZHVsZSB0byBleHRyYWN0CisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGZyb20gdGhlIHBhcnNlIHRyZWUgb2YgUHl0aG9uIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBjb2RlLgogCi0Jc2ltcGxlLnB5ICAgIC0tIHNhbXBsZSBzb3VyY2UgY29udGFpbmluZyBhICJzaG9ydCBmb3JtIiBkZWZpbml0aW9uLgorICAgIHNpbXBsZS5weSAgICAtLSBzYW1wbGUgc291cmNlIGNvbnRhaW5pbmcgYSAic2hvcnQgZm9ybSIgZGVmaW5pdGlvbi4KIAotCXNvdXJjZS5weSAgICAtLQlzYW1wbGUgc291cmNlIGNvZGUgdXNlZCB0byBkZW1vbnN0cmF0ZSBhYmlsaXR5IHRvCi0JCQloYW5kbGUgbmVzdGVkIGNvbnN0cnVjdHMgZWFzaWx5IHVzaW5nIHRoZSBmdW5jdGlvbnMKLQkJCWFuZCBjbGFzc2VzIGluIGV4YW1wbGUucHkuCisgICAgc291cmNlLnB5ICAgIC0tIHNhbXBsZSBzb3VyY2UgY29kZSB1c2VkIHRvIGRlbW9uc3RyYXRlIGFiaWxpdHkgdG8KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlIG5lc3RlZCBjb25zdHJ1Y3RzIGVhc2lseSB1c2luZyB0aGUgZnVuY3Rpb25zCisgICAgICAgICAgICAgICAgICAgIGFuZCBjbGFzc2VzIGluIGV4YW1wbGUucHkuCiAKLQl0ZXN0X3BhcnNlci5weSAgcHJvZ3JhbSB0byBwdXQgdGhlIHBhcnNlciBtb2R1bGUgdGhyb3VnaCBpdHMgcGFjZXMuCisgICAgdGVzdF9wYXJzZXIucHkgIHByb2dyYW0gdG8gcHV0IHRoZSBwYXJzZXIgbW9kdWxlIHRocm91Z2ggaXRzIHBhY2VzLgogCi0JdW5wYXJzZS5weQlBU1QgKDIuNSkgYmFzZWQgZXhhbXBsZSB0byByZWNyZWF0ZSBzb3VyY2UgY29kZQotCQkJZnJvbSBhbiBBU1QuIFRoaXMgaXMgaW5jb21wbGV0ZTsgY29udHJpYnV0aW9ucwotCQkJYXJlIHdlbGNvbWUuCisgICAgdGVzdF91bnBhcnNlLnB5IHRlc3RzIGZvciB0aGUgdW5wYXJzZSBtb2R1bGUKKworICAgIHVucGFyc2UucHkgICAgICBBU1QgKDIuNykgYmFzZWQgZXhhbXBsZSB0byByZWNyZWF0ZSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICBmcm9tIGFuIEFTVC4KIAogRW5qb3khCmRpZmYgLS1naXQgYS9EZW1vL3BhcnNlci90ZXN0X3BhcnNlci5weSBiL0RlbW8vcGFyc2VyL3Rlc3RfcGFyc2VyLnB5CmluZGV4IGJlMzliY2EuLmRiNGU2ZmUgMTAwNzU1Ci0tLSBhL0RlbW8vcGFyc2VyL3Rlc3RfcGFyc2VyLnB5CisrKyBiL0RlbW8vcGFyc2VyL3Rlc3RfcGFyc2VyLnB5CkBAIC0xMSwxOSArMTEsMTkgQEAKICAgICBnbG9iYWwgX251bUZhaWxlZAogICAgIHByaW50ICctLS0tJywgZmlsZU5hbWUsCiAgICAgdHJ5OgotICAgICAgICBhc3QgPSBwYXJzZXIuc3VpdGUodCkKLSAgICAgICAgdHVwID0gcGFyc2VyLmFzdDJ0dXBsZShhc3QpCi0gICAgICAgICMgdGhpcyBkaXNjYXJkcyB0aGUgZmlyc3QgQVNUOyBhIGh1Z2UgbWVtb3J5IHNhdmluZ3Mgd2hlbiBydW5uaW5nCisgICAgICAgIHN0ID0gcGFyc2VyLnN1aXRlKHQpCisgICAgICAgIHR1cCA9IHBhcnNlci5zdDJ0dXBsZShzdCkKKyAgICAgICAgIyB0aGlzIGRpc2NhcmRzIHRoZSBmaXJzdCBTVDsgYSBodWdlIG1lbW9yeSBzYXZpbmdzIHdoZW4gcnVubmluZwogICAgICAgICAjIGFnYWluc3QgYSBsYXJnZSBzb3VyY2UgZmlsZSBsaWtlIFRraW50ZXIucHkuCi0gICAgICAgIGFzdCA9IE5vbmUKLSAgICAgICAgbmV3ID0gcGFyc2VyLnR1cGxlMmFzdCh0dXApCisgICAgICAgIHN0ID0gTm9uZQorICAgICAgICBuZXcgPSBwYXJzZXIudHVwbGUyc3QodHVwKQogICAgIGV4Y2VwdCBwYXJzZXIuUGFyc2VyRXJyb3IsIGVycjoKICAgICAgICAgcHJpbnQKICAgICAgICAgcHJpbnQgJ3BhcnNlciBtb2R1bGUgcmFpc2VkIGV4Y2VwdGlvbiBvbiBpbnB1dCBmaWxlJywgZmlsZU5hbWUgKyAnOicKICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCiAgICAgICAgIF9udW1GYWlsZWQgPSBfbnVtRmFpbGVkICsgMQogICAgIGVsc2U6Ci0gICAgICAgIGlmIHR1cCAhPSBwYXJzZXIuYXN0MnR1cGxlKG5ldyk6CisgICAgICAgIGlmIHR1cCAhPSBwYXJzZXIuc3QydHVwbGUobmV3KToKICAgICAgICAgICAgIHByaW50CiAgICAgICAgICAgICBwcmludCAncGFyc2VyIG1vZHVsZSBmYWlsZWQgb24gaW5wdXQgZmlsZScsIGZpbGVOYW1lCiAgICAgICAgICAgICBfbnVtRmFpbGVkID0gX251bUZhaWxlZCArIDEKZGlmZiAtLWdpdCBhL0RlbW8vcGFyc2VyL3Rlc3RfdW5wYXJzZS5weSBiL0RlbW8vcGFyc2VyL3Rlc3RfdW5wYXJzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWNmZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvRGVtby9wYXJzZXIvdGVzdF91bnBhcnNlLnB5CkBAIC0wLDAgKzEsMjEzIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgY1N0cmluZ0lPCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB0b2tlbml6ZQoraW1wb3J0IGFzdAoraW1wb3J0IHVucGFyc2UKKworZGVmIHJlYWRfcHlmaWxlKGZpbGVuYW1lKToKKyAgICAiIiJSZWFkIGFuZCByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIGEgUHl0aG9uIHNvdXJjZSBmaWxlIChhcyBhCisgICAgc3RyaW5nKSwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZmlsZSBlbmNvZGluZy4iIiIKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgcHlmaWxlOgorICAgICAgICBzb3VyY2UgPSBweWZpbGUucmVhZCgpCisgICAgcmV0dXJuIHNvdXJjZQorCitmb3JfZWxzZSA9ICIiIlwKK2RlZiBmKCk6CisgICAgZm9yIHggaW4gcmFuZ2UoMTApOgorICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIHkgPSAyCisgICAgeiA9IDMKKyIiIgorCit3aGlsZV9lbHNlID0gIiIiXAorZGVmIGcoKToKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIHkgPSAyCisgICAgeiA9IDMKKyIiIgorCityZWxhdGl2ZV9pbXBvcnQgPSAiIiJcCitmcm9tIC4gaW1wb3J0IGZyZWQKK2Zyb20gLi4gaW1wb3J0IGJhcm5leQorZnJvbSAuYXVzdHJhbGlhIGltcG9ydCBzaHJpbXAgYXMgcHJhd25zCisiIiIKKworY2xhc3NfZGVjb3JhdG9yID0gIiIiXAorQGYxKGFyZykKK0BmMgorY2xhc3MgRm9vOiBwYXNzCisiIiIKKworZWxpZjEgPSAiIiJcCitpZiBjb25kMToKKyAgICBzdWl0ZTEKK2VsaWYgY29uZDI6CisgICAgc3VpdGUyCitlbHNlOgorICAgIHN1aXRlMworIiIiCisKK2VsaWYyID0gIiIiXAoraWYgY29uZDE6CisgICAgc3VpdGUxCitlbGlmIGNvbmQyOgorICAgIHN1aXRlMgorIiIiCisKK3RyeV9leGNlcHRfZmluYWxseSA9ICIiIlwKK3RyeToKKyAgICBzdWl0ZTEKK2V4Y2VwdCBleDE6CisgICAgc3VpdGUyCitleGNlcHQgZXgyOgorICAgIHN1aXRlMworZWxzZToKKyAgICBzdWl0ZTQKK2ZpbmFsbHk6CisgICAgc3VpdGU1CisiIiIKKworY2xhc3MgQVNUVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRBU1RFcXVhbChzZWxmLCBhc3QxLCBhc3QyKToKKyAgICAgICAgZHVtcDEgPSBhc3QuZHVtcChhc3QxKQorICAgICAgICBkdW1wMiA9IGFzdC5kdW1wKGFzdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmR1bXAoYXN0MSksIGFzdC5kdW1wKGFzdDIpKQorCisgICAgZGVmIGNoZWNrX3JvdW5kdHJpcChzZWxmLCBjb2RlMSwgZmlsZW5hbWU9ImludGVybmFsIik6CisgICAgICAgIGFzdDEgPSBjb21waWxlKGNvZGUxLCBmaWxlbmFtZSwgImV4ZWMiLCBhc3QuUHlDRl9PTkxZX0FTVCkKKyAgICAgICAgdW5wYXJzZV9idWZmZXIgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICB1bnBhcnNlLlVucGFyc2VyKGFzdDEsIHVucGFyc2VfYnVmZmVyKQorICAgICAgICBjb2RlMiA9IHVucGFyc2VfYnVmZmVyLmdldHZhbHVlKCkKKyAgICAgICAgYXN0MiA9IGNvbXBpbGUoY29kZTIsIGZpbGVuYW1lLCAiZXhlYyIsIGFzdC5QeUNGX09OTFlfQVNUKQorICAgICAgICBzZWxmLmFzc2VydEFTVEVxdWFsKGFzdDEsIGFzdDIpCisKK2NsYXNzIFVucGFyc2VUZXN0Q2FzZShBU1RUZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBmb3Igc3BlY2lmaWMgYnVncyBmb3VuZCBpbiBlYXJsaWVyIHZlcnNpb25zIG9mIHVucGFyc2UKKworICAgIGRlZiB0ZXN0X2RlbF9zdGF0ZW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWwgeCwgeSwgeiIpCisKKyAgICBkZWYgdGVzdF9zaGlmdHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCI0NSA8PCAyIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIjEzID4+IDciKQorCisgICAgZGVmIHRlc3RfZm9yX2Vsc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKGZvcl9lbHNlKQorCisgICAgZGVmIHRlc3Rfd2hpbGVfZWxzZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAod2hpbGVfZWxzZSkKKworICAgIGRlZiB0ZXN0X3VuYXJ5X3BhcmVucyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIigtMSkqKjciKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiKC0xLikqKjgiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiKC0xaikqKjYiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgibm90IFRydWUgb3IgRmFsc2UiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiVHJ1ZSBvciBub3QgRmFsc2UiKQorCisgICAgZGVmIHRlc3RfaW50ZWdlcl9wYXJlbnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCIzIC5fX2Fic19fKCkiKQorCisgICAgZGVmIHRlc3RfaHVnZV9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIjFlMTAwMCIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCItMWUxMDAwIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIjFlMTAwMGoiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLTFlMTAwMGoiKQorCisgICAgZGVmIHRlc3RfbWluX2ludChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoc3RyKC1zeXMubWF4aW50LTEpKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLSglcykiICUgKHN5cy5tYXhpbnQgKyAxKSkKKworICAgIGRlZiB0ZXN0X2ltYWdpbmFyeV9saXRlcmFscyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIjdqIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIi03aiIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCItKDdqKSIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCIwaiIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCItMGoiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLSgwaikiKQorCisgICAgZGVmIHRlc3RfbmVnYXRpdmVfemVybyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIi0wIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIi0oMCkiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLTBiMCIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCItKDBiMCkiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLTBvMCIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCItKDBvMCkiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLTB4MCIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCItKDB4MCkiKQorCisgICAgZGVmIHRlc3RfbGFtYmRhX3BhcmVudGhlc2VzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiKGxhbWJkYTogaW50KSgpIikKKworICAgIGRlZiB0ZXN0X2NoYWluZWRfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCIxIDwgNCA8PSA1IikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImEgaXMgYiBpcyBjIGlzIG5vdCBkIikKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImRlZiBmKCk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoYSk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoYiA9IDIpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImRlZiBmKGEsIGIpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImRlZiBmKGEsIGIgPSAyKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWYgZihhID0gNSwgYiA9IDIpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImRlZiBmKCphcmdzLCAqKmt3YXJncyk6IHBhc3MiKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfaW1wb3J0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcChyZWxhdGl2ZV9pbXBvcnQpCisKKyAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImInMTIzJyIpCisKKyAgICBkZWYgdGVzdF9zZXRfbGl0ZXJhbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoInsnYScsICdiJywgJ2MnfSIpCisKKyAgICBkZWYgdGVzdF9zZXRfY29tcHJlaGVuc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoInt4IGZvciB4IGluIHJhbmdlKDUpfSIpCisKKyAgICBkZWYgdGVzdF9kaWN0X2NvbXByZWhlbnNpb24oc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJ7eDogeCp4IGZvciB4IGluIHJhbmdlKDEwKX0iKQorCisgICAgZGVmIHRlc3RfY2xhc3NfZGVjb3JhdG9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoY2xhc3NfZGVjb3JhdG9yKQorCisgICAgZGVmIHRlc3RfZWxpZnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKGVsaWYxKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcChlbGlmMikKKworICAgIGRlZiB0ZXN0X3RyeV9leGNlcHRfZmluYWxseShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAodHJ5X2V4Y2VwdF9maW5hbGx5KQorCitjbGFzcyBEaXJlY3RvcnlUZXN0Q2FzZShBU1RUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCByb3VuZHRyaXAgYmVoYXZpb3VyIG9uIGFsbCBmaWxlcyBpbiBMaWIgYW5kIExpYi90ZXN0LiIiIgorCisgICAgIyB0ZXN0IGRpcmVjdG9yaWVzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgZGlzdHJpYnV0aW9uCisgICAgdGVzdF9kaXJlY3RvcmllcyA9ICdMaWInLCBvcy5wYXRoLmpvaW4oJ0xpYicsICd0ZXN0JykKKworICAgIGRlZiB0ZXN0X2ZpbGVzKHNlbGYpOgorICAgICAgICAjIGdldCBuYW1lcyBvZiBmaWxlcyB0byB0ZXN0CisgICAgICAgIGRpc3RfZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIG9zLnBhcmRpciwgb3MucGFyZGlyKQorCisgICAgICAgIG5hbWVzID0gW10KKyAgICAgICAgZm9yIGQgaW4gc2VsZi50ZXN0X2RpcmVjdG9yaWVzOgorICAgICAgICAgICAgdGVzdF9kaXIgPSBvcy5wYXRoLmpvaW4oZGlzdF9kaXIsIGQpCisgICAgICAgICAgICBmb3IgbiBpbiBvcy5saXN0ZGlyKHRlc3RfZGlyKToKKyAgICAgICAgICAgICAgICBpZiBuLmVuZHN3aXRoKCcucHknKSBhbmQgbm90IG4uc3RhcnRzd2l0aCgnYmFkJyk6CisgICAgICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChvcy5wYXRoLmpvaW4odGVzdF9kaXIsIG4pKQorCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCdUZXN0aW5nICVzJyAlIGZpbGVuYW1lKQorICAgICAgICAgICAgc291cmNlID0gcmVhZF9weWZpbGUoZmlsZW5hbWUpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcChzb3VyY2UpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVW5wYXJzZVRlc3RDYXNlLCBEaXJlY3RvcnlUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9wYXJzZXIvdGV4aXByZS5kYXQgYi9EZW1vL3BhcnNlci90ZXhpcHJlLmRhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFkMDNhNi4uMDAwMDAwMAotLS0gYS9EZW1vL3BhcnNlci90ZXhpcHJlLmRhdAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi1caW5wdXQgdGV4aW5mbyAgIEBjIC0qLXRleGluZm8tKi0KLUBjICUqKnN0YXJ0IG9mIGhlYWRlcgotQHNldGZpbGVuYW1lIHBhcnNlci5pbmZvCi1Ac2V0dGl0bGUgUHl0aG9uIFBhcnNlciBNb2R1bGUgUmVmZXJlbmNlCi1Ac2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkCi1AZm9vdG5vdGVzdHlsZSBlbmQKLUBjICUqKmVuZCBvZiBoZWFkZXIKLQotQGlmaW5mbwotVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlcwotcHVibGlzaGVkIGJ5IHRoZSBvcHRpb25hbCBAY29kZXtwYXJzZXJ9IG1vZHVsZSBhbmQgZ2l2ZXMgZXhhbXBsZXMgb2YKLWhvdyB0aGV5IG1heSBiZSB1c2VkLiAgSXQgY29udGFpbnMgdGhlIHNhbWUgdGV4dCBhcyB0aGUgY2hhcHRlciBvbiB0aGUKLUBjb2Rle3BhcnNlcn0gbW9kdWxlIGluIHRoZSBAY2l0ZXtQeXRob24gTGlicmFyeSBSZWZlcmVuY2V9LCBidXQgaXMKLXByZXNlbnRlZCBhcyBhIHNlcGFyYXRlIGRvY3VtZW50LgotCi1Db3B5cmlnaHQgMTk5NS0xOTk2IGJ5IEZyZWQgTC4gRHJha2UsIEpyLiwgUmVzdG9uLCBWaXJnaW5pYSwgVVNBLCBhbmQKLVZpcmdpbmlhIFBvbHl0ZWNobmljIEluc3RpdHV0ZSBhbmQgU3RhdGUgVW5pdmVyc2l0eSwgQmxhY2tzYnVyZywKLVZpcmdpbmlhLCBVU0EuICBQb3J0aW9ucyBvZiB0aGUgc29mdHdhcmUgY29weXJpZ2h0IDE5OTEtMTk5NSBieQotU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLCBBbXN0ZXJkYW0sIFRoZSBOZXRoZXJsYW5kcy4gIENvcHlpbmcgaXMKLXBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIFB5dGhvbiBkaXN0cmlidXRpb24sCi13aXRoIHRoZSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9uIHRoYXQgdGhpcyBhZGRpdGlvbmFsIG5vdGljZSBiZSBpbmNsdWRlZAotYW5kIG1haW50YWluZWQgb24gYWxsIGRpc3RyaWJ1dGVkIGNvcGllcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgRnJlZCBMLiBEcmFrZSwgSnIuIGFuZAotVmlyZ2luaWEgUG9seXRlY2huaWMgSW5zdGl0dXRlIGFuZCBTdGF0ZSBVbml2ZXJzaXR5IG5vdCBiZSB1c2VkIGluCi1hZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCi13aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCi0KLUZSRUQgTC4gRFJBS0UsIEpSLiBBTkQgVklSR0lOSUEgUE9MWVRFQ0hOSUMgSU5TVElUVVRFIEFORCBTVEFURQotVU5JVkVSU0lUWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAotSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTwotRVZFTlQgU0hBTEwgRlJFRCBMLiBEUkFLRSwgSlIuIE9SIFZJUkdJTklBIFBPTFlURUNITklDIElOU1RJVFVURSBBTkQKLVNUQVRFIFVOSVZFUlNJVFkgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi1QUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgotVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgotUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLUBlbmQgaWZpbmZvCi0KLUB0aXRsZXBhZ2UKLUB0aXRsZSBQeXRob24gUGFyc2VyIE1vZHVsZSBSZWZlcmVuY2UKLUBhdXRob3IgRnJlZCBMLiBEcmFrZSwgSnIuCi0KLUBjICBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBzdGFydCB0aGUgY29weXJpZ2h0IHBhZ2UuCi1AcGFnZQotQHZza2lwIDBwdCBwbHVzIDFmaWxsbAotQ29weXJpZ2h0IDE5OTUtMTk5NiBieSBGcmVkIEwuIERyYWtlLCBKci4sIFJlc3RvbiwgVmlyZ2luaWEsIFVTQSwgYW5kCi1WaXJnaW5pYSBQb2x5dGVjaG5pYyBJbnN0aXR1dGUgYW5kIFN0YXRlIFVuaXZlcnNpdHksIEJsYWNrc2J1cmcsCi1WaXJnaW5pYSwgVVNBLiAgUG9ydGlvbnMgb2YgdGhlIHNvZnR3YXJlIGNvcHlyaWdodCAxOTkxLTE5OTUgYnkKLVN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLCBUaGUgTmV0aGVybGFuZHMuICBDb3B5aW5nIGlzCi1wZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBQeXRob24gZGlzdHJpYnV0aW9uLAotd2l0aCB0aGUgYWRkaXRpb25hbCByZXN0cmljdGlvbiB0aGF0IHRoaXMgYWRkaXRpb25hbCBub3RpY2UgYmUgaW5jbHVkZWQKLWFuZCBtYWludGFpbmVkIG9uIGFsbCBkaXN0cmlidXRlZCBjb3BpZXMuCi0KLUBjZW50ZXIgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgRnJlZCBMLiBEcmFrZSwgSnIuIGFuZAotVmlyZ2luaWEgUG9seXRlY2huaWMgSW5zdGl0dXRlIGFuZCBTdGF0ZSBVbml2ZXJzaXR5IG5vdCBiZSB1c2VkIGluCi1hZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCi13aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCi0KLUZSRUQgTC4gRFJBS0UsIEpSLiBBTkQgVklSR0lOSUEgUE9MWVRFQ0hOSUMgSU5TVElUVVRFIEFORCBTVEFURQotVU5JVkVSU0lUWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAotSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTwotRVZFTlQgU0hBTEwgRlJFRCBMLiBEUkFLRSwgSlIuIE9SIFZJUkdJTklBIFBPTFlURUNITklDIElOU1RJVFVURSBBTkQKLVNUQVRFIFVOSVZFUlNJVFkgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi1QUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgotVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgotUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLUBlbmQgdGl0bGVwYWdlCi0KLQotQG5vZGUgVG9wLCBPdmVydmlldywgKGRpciksIChkaXIpCi1AdG9wIFRoZSBQeXRob24gUGFyc2VyIE1vZHVsZQotCi1AaWZpbmZvCi1UaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2VzCi1wdWJsaXNoZWQgYnkgdGhlIG9wdGlvbmFsIEBjb2Rle3BhcnNlcn0gbW9kdWxlIGFuZCBnaXZlcyBleGFtcGxlcyBvZgotaG93IHRoZXkgbWF5IGJlIHVzZWQuICBJdCBjb250YWlucyB0aGUgc2FtZSB0ZXh0IGFzIHRoZSBjaGFwdGVyIG9uIHRoZQotQGNvZGV7cGFyc2VyfSBtb2R1bGUgaW4gdGhlIEBjaXRle1B5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZX0sIGJ1dCBpcwotcHJlc2VudGVkIGFzIGEgc2VwYXJhdGUgZG9jdW1lbnQuCi0KLVRoaXMgdmVyc2lvbiBjb3JyZXNwb25kcyB0byBQeXRob24gdmVyc2lvbiAxLjQgKDEgU2VwdC4gMTk5NikuCi0KLUBlbmQgaWZpbmZvCi0KLUBjIHBsYWNlaG9sZGVyIGZvciB0aGUgbWFzdGVyIG1lbnUgLS0gcGF0Y2hlZCBieSB0ZXhpbmZvLWFsbC1tZW51cy11cGRhdGUKLUBtZW51Ci1AZW5kIG1lbnUKZGlmZiAtLWdpdCBhL0RlbW8vcGFyc2VyL3VucGFyc2UucHkgYi9EZW1vL3BhcnNlci91bnBhcnNlLnB5CmluZGV4IGJmYjhhMDkuLjFiMWZmMjkgMTAwNjQ0Ci0tLSBhL0RlbW8vcGFyc2VyL3VucGFyc2UucHkKKysrIGIvRGVtby9wYXJzZXIvdW5wYXJzZS5weQpAQCAtMSwxNSArMSwxOSBAQAogIlVzYWdlOiB1bnBhcnNlLnB5IDxwYXRoIHRvIHNvdXJjZSBmaWxlPiIKIGltcG9ydCBzeXMKLWltcG9ydCBfYXN0CitpbXBvcnQgYXN0CiBpbXBvcnQgY1N0cmluZ0lPCiBpbXBvcnQgb3MKIAorIyBMYXJnZSBmbG9hdCBhbmQgaW1hZ2luYXJ5IGxpdGVyYWxzIGdldCB0dXJuZWQgaW50byBpbmZpbml0aWVzIGluIHRoZSBBU1QuCisjIFdlIHVucGFyc2UgdGhvc2UgaW5maW5pdGllcyB0byBJTkZTVFIuCitJTkZTVFIgPSAiMWUiICsgcmVwcihzeXMuZmxvYXRfaW5mby5tYXhfMTBfZXhwICsgMSkKKwogZGVmIGludGVybGVhdmUoaW50ZXIsIGYsIHNlcSk6CiAgICAgIiIiQ2FsbCBmIG9uIGVhY2ggaXRlbSBpbiBzZXEsIGNhbGxpbmcgaW50ZXIoKSBpbiBiZXR3ZWVuLgogICAgICIiIgogICAgIHNlcSA9IGl0ZXIoc2VxKQogICAgIHRyeToKLSAgICAgICAgZihzZXEubmV4dCgpKQorICAgICAgICBmKG5leHQoc2VxKSkKICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgcGFzcwogICAgIGVsc2U6CkBAIC0yMCwxNSArMjQsMTYgQEAKIGNsYXNzIFVucGFyc2VyOgogICAgICIiIk1ldGhvZHMgaW4gdGhpcyBjbGFzcyByZWN1cnNpdmVseSB0cmF2ZXJzZSBhbiBBU1QgYW5kCiAgICAgb3V0cHV0IHNvdXJjZSBjb2RlIGZvciB0aGUgYWJzdHJhY3Qgc3ludGF4OyBvcmlnaW5hbCBmb3JtYXR0aW5nCi0gICAgaXMgZGlzcmVnYXJnZWQuICIiIgorICAgIGlzIGRpc3JlZ2FyZGVkLiAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmVlLCBmaWxlID0gc3lzLnN0ZG91dCk6CiAgICAgICAgICIiIlVucGFyc2VyKHRyZWUsIGZpbGU9c3lzLnN0ZG91dCkgLT4gTm9uZS4KICAgICAgICAgIFByaW50IHRoZSBzb3VyY2UgZm9yIHRyZWUgdG8gZmlsZS4iIiIKICAgICAgICAgc2VsZi5mID0gZmlsZQorICAgICAgICBzZWxmLmZ1dHVyZV9pbXBvcnRzID0gW10KICAgICAgICAgc2VsZi5faW5kZW50ID0gMAogICAgICAgICBzZWxmLmRpc3BhdGNoKHRyZWUpCi0gICAgICAgIHByaW50ID4+c2VsZi5mLCIiCisgICAgICAgIHNlbGYuZi53cml0ZSgiIikKICAgICAgICAgc2VsZi5mLmZsdXNoKCkKIAogICAgIGRlZiBmaWxsKHNlbGYsIHRleHQgPSAiIik6CkBAIC03OSwxMSArODQsMTYgQEAKICAgICAgICAgaW50ZXJsZWF2ZShsYW1iZGE6IHNlbGYud3JpdGUoIiwgIiksIHNlbGYuZGlzcGF0Y2gsIHQubmFtZXMpCiAKICAgICBkZWYgX0ltcG9ydEZyb20oc2VsZiwgdCk6CisgICAgICAgICMgQSBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG1heSBhZmZlY3QgdW5wYXJzaW5nLCBzbyByZWNvcmQgaXQuCisgICAgICAgIGlmIHQubW9kdWxlIGFuZCB0Lm1vZHVsZSA9PSAnX19mdXR1cmVfXyc6CisgICAgICAgICAgICBzZWxmLmZ1dHVyZV9pbXBvcnRzLmV4dGVuZChuLm5hbWUgZm9yIG4gaW4gdC5uYW1lcykKKwogICAgICAgICBzZWxmLmZpbGwoImZyb20gIikKLSAgICAgICAgc2VsZi53cml0ZSh0Lm1vZHVsZSkKKyAgICAgICAgc2VsZi53cml0ZSgiLiIgKiB0LmxldmVsKQorICAgICAgICBpZiB0Lm1vZHVsZToKKyAgICAgICAgICAgIHNlbGYud3JpdGUodC5tb2R1bGUpCiAgICAgICAgIHNlbGYud3JpdGUoIiBpbXBvcnQgIikKICAgICAgICAgaW50ZXJsZWF2ZShsYW1iZGE6IHNlbGYud3JpdGUoIiwgIiksIHNlbGYuZGlzcGF0Y2gsIHQubmFtZXMpCi0gICAgICAgICMgWFhYKGpwZSkgd2hhdCBpcyBsZXZlbCBmb3I/CiAKICAgICBkZWYgX0Fzc2lnbihzZWxmLCB0KToKICAgICAgICAgc2VsZi5maWxsKCkKQEAgLTExNSw3ICsxMjUsNyBAQAogCiAgICAgZGVmIF9EZWxldGUoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYuZmlsbCgiZGVsICIpCi0gICAgICAgIHNlbGYuZGlzcGF0Y2godC50YXJnZXRzKQorICAgICAgICBpbnRlcmxlYXZlKGxhbWJkYTogc2VsZi53cml0ZSgiLCAiKSwgc2VsZi5kaXNwYXRjaCwgdC50YXJnZXRzKQogCiAgICAgZGVmIF9Bc3NlcnQoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYuZmlsbCgiYXNzZXJ0ICIpCkBAIC0xODYsMTAgKzE5NiwxNCBAQAogICAgICAgICAgICAgc2VsZi5sZWF2ZSgpCiAKICAgICBkZWYgX1RyeUZpbmFsbHkoc2VsZiwgdCk6Ci0gICAgICAgIHNlbGYuZmlsbCgidHJ5IikKLSAgICAgICAgc2VsZi5lbnRlcigpCi0gICAgICAgIHNlbGYuZGlzcGF0Y2godC5ib2R5KQotICAgICAgICBzZWxmLmxlYXZlKCkKKyAgICAgICAgaWYgbGVuKHQuYm9keSkgPT0gMSBhbmQgaXNpbnN0YW5jZSh0LmJvZHlbMF0sIGFzdC5UcnlFeGNlcHQpOgorICAgICAgICAgICAgIyB0cnktZXhjZXB0LWZpbmFsbHkKKyAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5ib2R5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5maWxsKCJ0cnkiKQorICAgICAgICAgICAgc2VsZi5lbnRlcigpCisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYm9keSkKKyAgICAgICAgICAgIHNlbGYubGVhdmUoKQogCiAgICAgICAgIHNlbGYuZmlsbCgiZmluYWxseSIpCiAgICAgICAgIHNlbGYuZW50ZXIoKQpAQCAtMjAyLDcgKzIxNiw3IEBACiAgICAgICAgICAgICBzZWxmLndyaXRlKCIgIikKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC50eXBlKQogICAgICAgICBpZiB0Lm5hbWU6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKCIsICIpCisgICAgICAgICAgICBzZWxmLndyaXRlKCIgYXMgIikKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5uYW1lKQogICAgICAgICBzZWxmLmVudGVyKCkKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCkBAIC0yMTAsNiArMjI0LDkgQEAKIAogICAgIGRlZiBfQ2xhc3NEZWYoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUoIlxuIikKKyAgICAgICAgZm9yIGRlY28gaW4gdC5kZWNvcmF0b3JfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZmlsbCgiQCIpCisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGRlY28pCiAgICAgICAgIHNlbGYuZmlsbCgiY2xhc3MgIit0Lm5hbWUpCiAgICAgICAgIGlmIHQuYmFzZXM6CiAgICAgICAgICAgICBzZWxmLndyaXRlKCIoIikKQEAgLTI0NSwxNSArMjYyLDI0IEBACiAgICAgICAgICAgICBzZWxmLmZpbGwoImVsc2UiKQogICAgICAgICAgICAgc2VsZi5lbnRlcigpCiAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQub3JlbHNlKQotICAgICAgICAgICAgc2VsZi5sZWF2ZQorICAgICAgICAgICAgc2VsZi5sZWF2ZSgpCiAKICAgICBkZWYgX0lmKHNlbGYsIHQpOgogICAgICAgICBzZWxmLmZpbGwoImlmICIpCiAgICAgICAgIHNlbGYuZGlzcGF0Y2godC50ZXN0KQogICAgICAgICBzZWxmLmVudGVyKCkKLSAgICAgICAgIyBYWFggZWxpZj8KICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCiAgICAgICAgIHNlbGYubGVhdmUoKQorICAgICAgICAjIGNvbGxhcHNlIG5lc3RlZCBpZnMgaW50byBlcXVpdmFsZW50IGVsaWZzLgorICAgICAgICB3aGlsZSAodC5vcmVsc2UgYW5kIGxlbih0Lm9yZWxzZSkgPT0gMSBhbmQKKyAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodC5vcmVsc2VbMF0sIGFzdC5JZikpOgorICAgICAgICAgICAgdCA9IHQub3JlbHNlWzBdCisgICAgICAgICAgICBzZWxmLmZpbGwoImVsaWYgIikKKyAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC50ZXN0KQorICAgICAgICAgICAgc2VsZi5lbnRlcigpCisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYm9keSkKKyAgICAgICAgICAgIHNlbGYubGVhdmUoKQorICAgICAgICAjIGZpbmFsIGVsc2UKICAgICAgICAgaWYgdC5vcmVsc2U6CiAgICAgICAgICAgICBzZWxmLmZpbGwoImVsc2UiKQogICAgICAgICAgICAgc2VsZi5lbnRlcigpCkBAIC0yNzAsNyArMjk2LDcgQEAKICAgICAgICAgICAgIHNlbGYuZmlsbCgiZWxzZSIpCiAgICAgICAgICAgICBzZWxmLmVudGVyKCkKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5vcmVsc2UpCi0gICAgICAgICAgICBzZWxmLmxlYXZlCisgICAgICAgICAgICBzZWxmLmxlYXZlKCkKIAogICAgIGRlZiBfV2l0aChzZWxmLCB0KToKICAgICAgICAgc2VsZi5maWxsKCJ3aXRoICIpCkBAIC0yODQsNyArMzEwLDE3IEBACiAKICAgICAjIGV4cHIKICAgICBkZWYgX1N0cihzZWxmLCB0cmVlKToKLSAgICAgICAgc2VsZi53cml0ZShyZXByKHRyZWUucykpCisgICAgICAgICMgaWYgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzIGlzIGluIGVmZmVjdCwKKyAgICAgICAgIyB0aGVuIHdlIHdhbnQgdG8gb3V0cHV0IHN0cmluZyBsaXRlcmFscyB1c2luZyBhICdiJyBwcmVmaXgKKyAgICAgICAgIyBhbmQgdW5pY29kZSBsaXRlcmFscyB3aXRoIG5vIHByZWZpeC4KKyAgICAgICAgaWYgInVuaWNvZGVfbGl0ZXJhbHMiIG5vdCBpbiBzZWxmLmZ1dHVyZV9pbXBvcnRzOgorICAgICAgICAgICAgc2VsZi53cml0ZShyZXByKHRyZWUucykpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0cmVlLnMsIHN0cik6CisgICAgICAgICAgICBzZWxmLndyaXRlKCJiIiArIHJlcHIodHJlZS5zKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHRyZWUucywgdW5pY29kZSk6CisgICAgICAgICAgICBzZWxmLndyaXRlKHJlcHIodHJlZS5zKS5sc3RyaXAoInUiKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgInNob3VsZG4ndCBnZXQgaGVyZSIKIAogICAgIGRlZiBfTmFtZShzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSh0LmlkKQpAQCAtMjk1LDcgKzMzMSwxNCBAQAogICAgICAgICBzZWxmLndyaXRlKCJgIikKIAogICAgIGRlZiBfTnVtKHNlbGYsIHQpOgotICAgICAgICBzZWxmLndyaXRlKHJlcHIodC5uKSkKKyAgICAgICAgcmVwcl9uID0gcmVwcih0Lm4pCisgICAgICAgICMgUGFyZW50aGVzaXplIG5lZ2F0aXZlIG51bWJlcnMsIHRvIGF2b2lkIHR1cm5pbmcgKC0xKSoqMiBpbnRvIC0xKioyLgorICAgICAgICBpZiByZXByX24uc3RhcnRzd2l0aCgiLSIpOgorICAgICAgICAgICAgc2VsZi53cml0ZSgiKCIpCisgICAgICAgICMgU3Vic3RpdHV0ZSBvdmVyZmxvd2luZyBkZWNpbWFsIGxpdGVyYWwgZm9yIEFTVCBpbmZpbml0aWVzLgorICAgICAgICBzZWxmLndyaXRlKHJlcHJfbi5yZXBsYWNlKCJpbmYiLCBJTkZTVFIpKQorICAgICAgICBpZiByZXByX24uc3RhcnRzd2l0aCgiLSIpOgorICAgICAgICAgICAgc2VsZi53cml0ZSgiKSIpCiAKICAgICBkZWYgX0xpc3Qoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUoIlsiKQpAQCAtMzE2LDYgKzM1OSwyMiBAQAogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChnZW4pCiAgICAgICAgIHNlbGYud3JpdGUoIikiKQogCisgICAgZGVmIF9TZXRDb21wKHNlbGYsIHQpOgorICAgICAgICBzZWxmLndyaXRlKCJ7IikKKyAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmVsdCkKKyAgICAgICAgZm9yIGdlbiBpbiB0LmdlbmVyYXRvcnM6CisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGdlbikKKyAgICAgICAgc2VsZi53cml0ZSgifSIpCisKKyAgICBkZWYgX0RpY3RDb21wKHNlbGYsIHQpOgorICAgICAgICBzZWxmLndyaXRlKCJ7IikKKyAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmtleSkKKyAgICAgICAgc2VsZi53cml0ZSgiOiAiKQorICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFsdWUpCisgICAgICAgIGZvciBnZW4gaW4gdC5nZW5lcmF0b3JzOgorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChnZW4pCisgICAgICAgIHNlbGYud3JpdGUoIn0iKQorCiAgICAgZGVmIF9jb21wcmVoZW5zaW9uKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKCIgZm9yICIpCiAgICAgICAgIHNlbGYuZGlzcGF0Y2godC50YXJnZXQpCkBAIC0zMzQsMTMgKzM5MywyMCBAQAogICAgICAgICBzZWxmLmRpc3BhdGNoKHQub3JlbHNlKQogICAgICAgICBzZWxmLndyaXRlKCIpIikKIAorICAgIGRlZiBfU2V0KHNlbGYsIHQpOgorICAgICAgICBhc3NlcnQodC5lbHRzKSAjIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZWxlbWVudAorICAgICAgICBzZWxmLndyaXRlKCJ7IikKKyAgICAgICAgaW50ZXJsZWF2ZShsYW1iZGE6IHNlbGYud3JpdGUoIiwgIiksIHNlbGYuZGlzcGF0Y2gsIHQuZWx0cykKKyAgICAgICAgc2VsZi53cml0ZSgifSIpCisKICAgICBkZWYgX0RpY3Qoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUoInsiKQotICAgICAgICBkZWYgd3JpdGVtKChrLCB2KSk6CisgICAgICAgIGRlZiB3cml0ZV9wYWlyKHBhaXIpOgorICAgICAgICAgICAgKGssIHYpID0gcGFpcgogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChrKQogICAgICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh2KQotICAgICAgICBpbnRlcmxlYXZlKGxhbWJkYTogc2VsZi53cml0ZSgiLCAiKSwgd3JpdGVtLCB6aXAodC5rZXlzLCB0LnZhbHVlcykpCisgICAgICAgIGludGVybGVhdmUobGFtYmRhOiBzZWxmLndyaXRlKCIsICIpLCB3cml0ZV9wYWlyLCB6aXAodC5rZXlzLCB0LnZhbHVlcykpCiAgICAgICAgIHNlbGYud3JpdGUoIn0iKQogCiAgICAgZGVmIF9UdXBsZShzZWxmLCB0KToKQEAgLTM1NSwxMyArNDIxLDI0IEBACiAKICAgICB1bm9wID0geyJJbnZlcnQiOiJ+IiwgIk5vdCI6ICJub3QiLCAiVUFkZCI6IisiLCAiVVN1YiI6Ii0ifQogICAgIGRlZiBfVW5hcnlPcChzZWxmLCB0KToKLSAgICAgICAgc2VsZi53cml0ZShzZWxmLnVub3BbdC5vcC5fX2NsYXNzX18uX19uYW1lX19dKQogICAgICAgICBzZWxmLndyaXRlKCIoIikKLSAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lm9wZXJhbmQpCisgICAgICAgIHNlbGYud3JpdGUoc2VsZi51bm9wW3Qub3AuX19jbGFzc19fLl9fbmFtZV9fXSkKKyAgICAgICAgc2VsZi53cml0ZSgiICIpCisgICAgICAgICMgSWYgd2UncmUgYXBwbHlpbmcgdW5hcnkgbWludXMgdG8gYSBudW1iZXIsIHBhcmVudGhlc2l6ZSB0aGUgbnVtYmVyLgorICAgICAgICAjIFRoaXMgaXMgbmVjZXNzYXJ5OiAtMjE0NzQ4MzY0OCBpcyBkaWZmZXJlbnQgZnJvbSAtKDIxNDc0ODM2NDgpIG9uCisgICAgICAgICMgYSAzMi1iaXQgbWFjaGluZSAodGhlIGZpcnN0IGlzIGFuIGludCwgdGhlIHNlY29uZCBhIGxvbmcpLCBhbmQKKyAgICAgICAgIyAtN2ogaXMgZGlmZmVyZW50IGZyb20gLSg3aikuICAoVGhlIGZpcnN0IGhhcyByZWFsIHBhcnQgMC4wLCB0aGUgc2Vjb25kCisgICAgICAgICMgaGFzIHJlYWwgcGFydCAtMC4wLikKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0Lm9wLCBhc3QuVVN1YikgYW5kIGlzaW5zdGFuY2UodC5vcGVyYW5kLCBhc3QuTnVtKToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoIigiKQorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lm9wZXJhbmQpCisgICAgICAgICAgICBzZWxmLndyaXRlKCIpIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5vcGVyYW5kKQogICAgICAgICBzZWxmLndyaXRlKCIpIikKIAogICAgIGJpbm9wID0geyAiQWRkIjoiKyIsICJTdWIiOiItIiwgIk11bHQiOiIqIiwgIkRpdiI6Ii8iLCAiTW9kIjoiJSIsCi0gICAgICAgICAgICAgICAgICAgICJMU2hpZnQiOiI+PiIsICJSU2hpZnQiOiI8PCIsICJCaXRPciI6InwiLCAiQml0WG9yIjoiXiIsICJCaXRBbmQiOiImIiwKKyAgICAgICAgICAgICAgICAgICAgIkxTaGlmdCI6Ijw8IiwgIlJTaGlmdCI6Ij4+IiwgIkJpdE9yIjoifCIsICJCaXRYb3IiOiJeIiwgIkJpdEFuZCI6IiYiLAogICAgICAgICAgICAgICAgICAgICAiRmxvb3JEaXYiOiIvLyIsICJQb3ciOiAiKioifQogICAgIGRlZiBfQmluT3Aoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUoIigiKQpAQCAtMzc4LDkgKzQ1NSw5IEBACiAgICAgICAgIGZvciBvLCBlIGluIHppcCh0Lm9wcywgdC5jb21wYXJhdG9ycyk6CiAgICAgICAgICAgICBzZWxmLndyaXRlKCIgIiArIHNlbGYuY21wb3BzW28uX19jbGFzc19fLl9fbmFtZV9fXSArICIgIikKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2goZSkKLSAgICAgICAgICAgIHNlbGYud3JpdGUoIikiKQorICAgICAgICBzZWxmLndyaXRlKCIpIikKIAotICAgIGJvb2xvcHMgPSB7X2FzdC5BbmQ6ICdhbmQnLCBfYXN0Lk9yOiAnb3InfQorICAgIGJvb2xvcHMgPSB7YXN0LkFuZDogJ2FuZCcsIGFzdC5PcjogJ29yJ30KICAgICBkZWYgX0Jvb2xPcChzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSgiKCIpCiAgICAgICAgIHMgPSAiICVzICIgJSBzZWxmLmJvb2xvcHNbdC5vcC5fX2NsYXNzX19dCkBAIC0zODksNiArNDY2LDExIEBACiAKICAgICBkZWYgX0F0dHJpYnV0ZShzZWxmLHQpOgogICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFsdWUpCisgICAgICAgICMgU3BlY2lhbCBjYXNlOiAzLl9fYWJzX18oKSBpcyBhIHN5bnRheCBlcnJvciwgc28gaWYgdC52YWx1ZQorICAgICAgICAjIGlzIGFuIGludGVnZXIgbGl0ZXJhbCB0aGVuIHdlIG5lZWQgdG8gZWl0aGVyIHBhcmVudGhlc2l6ZQorICAgICAgICAjIGl0IG9yIGFkZCBhbiBleHRyYSBzcGFjZSB0byBnZXQgMyAuX19hYnNfXygpLgorICAgICAgICBpZiBpc2luc3RhbmNlKHQudmFsdWUsIGFzdC5OdW0pIGFuZCBpc2luc3RhbmNlKHQudmFsdWUubiwgaW50KToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoIiAiKQogICAgICAgICBzZWxmLndyaXRlKCIuIikKICAgICAgICAgc2VsZi53cml0ZSh0LmF0dHIpCiAKQEAgLTQ0NSwyMSArNTI3LDI0IEBACiAgICAgIyBvdGhlcnMKICAgICBkZWYgX2FyZ3VtZW50cyhzZWxmLCB0KToKICAgICAgICAgZmlyc3QgPSBUcnVlCi0gICAgICAgIG5vbkRlZiA9IGxlbih0LmFyZ3MpLWxlbih0LmRlZmF1bHRzKQotICAgICAgICBmb3IgYSBpbiB0LmFyZ3NbMDpub25EZWZdOgotICAgICAgICAgICAgaWYgZmlyc3Q6Zmlyc3QgPSBGYWxzZQotICAgICAgICAgICAgZWxzZTogc2VsZi53cml0ZSgiLCAiKQotICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChhKQotICAgICAgICBmb3IgYSxkIGluIHppcCh0LmFyZ3Nbbm9uRGVmOl0sIHQuZGVmYXVsdHMpOgorICAgICAgICAjIG5vcm1hbCBhcmd1bWVudHMKKyAgICAgICAgZGVmYXVsdHMgPSBbTm9uZV0gKiAobGVuKHQuYXJncykgLSBsZW4odC5kZWZhdWx0cykpICsgdC5kZWZhdWx0cworICAgICAgICBmb3IgYSxkIGluIHppcCh0LmFyZ3MsIGRlZmF1bHRzKToKICAgICAgICAgICAgIGlmIGZpcnN0OmZpcnN0ID0gRmFsc2UKICAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2goYSksCi0gICAgICAgICAgICBzZWxmLndyaXRlKCI9IikKLSAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2goZCkKKyAgICAgICAgICAgIGlmIGQ6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiPSIpCisgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChkKQorCisgICAgICAgICMgdmFyYXJncwogICAgICAgICBpZiB0LnZhcmFyZzoKICAgICAgICAgICAgIGlmIGZpcnN0OmZpcnN0ID0gRmFsc2UKICAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIHNlbGYud3JpdGUoIioiK3QudmFyYXJnKQorICAgICAgICAgICAgc2VsZi53cml0ZSgiKiIpCisgICAgICAgICAgICBzZWxmLndyaXRlKHQudmFyYXJnKQorCisgICAgICAgICMga3dhcmdzCiAgICAgICAgIGlmIHQua3dhcmc6CiAgICAgICAgICAgICBpZiBmaXJzdDpmaXJzdCA9IEZhbHNlCiAgICAgICAgICAgICBlbHNlOiBzZWxmLndyaXRlKCIsICIpCkBAIC00NzEsMTAgKzU1NiwxMiBAQAogICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFsdWUpCiAKICAgICBkZWYgX0xhbWJkYShzZWxmLCB0KToKKyAgICAgICAgc2VsZi53cml0ZSgiKCIpCiAgICAgICAgIHNlbGYud3JpdGUoImxhbWJkYSAiKQogICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYXJncykKICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQogICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYm9keSkKKyAgICAgICAgc2VsZi53cml0ZSgiKSIpCiAKICAgICBkZWYgX2FsaWFzKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKHQubmFtZSkKQEAgLTQ4Miw4ICs1NjksOSBAQAogICAgICAgICAgICAgc2VsZi53cml0ZSgiIGFzICIrdC5hc25hbWUpCiAKIGRlZiByb3VuZHRyaXAoZmlsZW5hbWUsIG91dHB1dD1zeXMuc3Rkb3V0KToKLSAgICBzb3VyY2UgPSBvcGVuKGZpbGVuYW1lKS5yZWFkKCkKLSAgICB0cmVlID0gY29tcGlsZShzb3VyY2UsIGZpbGVuYW1lLCAiZXhlYyIsIF9hc3QuUHlDRl9PTkxZX0FTVCkKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgcHlmaWxlOgorICAgICAgICBzb3VyY2UgPSBweWZpbGUucmVhZCgpCisgICAgdHJlZSA9IGNvbXBpbGUoc291cmNlLCBmaWxlbmFtZSwgImV4ZWMiLCBhc3QuUHlDRl9PTkxZX0FTVCkKICAgICBVbnBhcnNlcih0cmVlLCBvdXRwdXQpCiAKIApAQCAtNDkyLDcgKzU4MCw3IEBACiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IFtuIGZvciBuIGluIG9zLmxpc3RkaXIoYSkgaWYgbi5lbmRzd2l0aCgnLnB5JyldCiAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJEaXJlY3Rvcnkgbm90IHJlYWRhYmxlOiAlcyIgJSBhCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkRpcmVjdG9yeSBub3QgcmVhZGFibGU6ICVzIiAlIGEpCiAgICAgZWxzZToKICAgICAgICAgZm9yIG4gaW4gbmFtZXM6CiAgICAgICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihhLCBuKQpAQCAtNTAxLDcgKzU4OSw3IEBACiAgICAgICAgICAgICAgICAgcHJpbnQgJ1Rlc3RpbmcgJXMnICUgZnVsbG5hbWUKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHJvdW5kdHJpcChmdWxsbmFtZSwgb3V0cHV0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgICAgICBwcmludCAnICBGYWlsZWQgdG8gY29tcGlsZSwgZXhjZXB0aW9uIGlzICVzJyAlIHJlcHIoZSkKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihmdWxsbmFtZSk6CiAgICAgICAgICAgICAgICAgdGVzdGRpcihmdWxsbmFtZSkKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvRlNQcm94eS5weSBiL0RlbW8vcGRpc3QvRlNQcm94eS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IGExYWI2MzUuLjg3MWM4NGYKLS0tIGEvRGVtby9wZGlzdC9GU1Byb3h5LnB5CisrKyBiL0RlbW8vcGRpc3QvRlNQcm94eS5weQpAQCAtMjMsMTIgKzIzLDcgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgZm5tYXRjaAogCi1pZiBvcy5uYW1lID09ICdtYWMnOgotICAgIGltcG9ydCBtYWNmcwotICAgIG1heG5hbWVsZW4gPSAzMQotZWxzZToKLSAgICBtYWNmcyA9IE5vbmUKLSAgICBtYXhuYW1lbGVuID0gMjU1CittYXhuYW1lbGVuID0gMjU1CiAKIHNraXBuYW1lcyA9IChvcy5jdXJkaXIsIG9zLnBhcmRpcikKIApAQCAtNjMsMTYgKzU4LDEwIEBACiAgICAgICAgIHJldHVybiBpZ25vcmUKIAogICAgIGRlZiBfaGlkZGVuKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBvcy5uYW1lID09ICdtYWMnOgotICAgICAgICAgICAgcmV0dXJuIG5hbWVbMF0gPT0gJygnIGFuZCBuYW1lWy0xXSA9PSAnKScKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBuYW1lWzBdID09ICcuJworICAgICAgICByZXR1cm4gbmFtZVswXSA9PSAnLicKIAogICAgIGRlZiBfaGlkZShzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICAgICAgICAgIHJldHVybiAnKCVzKScgJSBuYW1lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gJy4lcycgJSBuYW1lCisgICAgICAgIHJldHVybiAnLiVzJyAlIG5hbWUKIAogICAgIGRlZiB2aXNpYmxlKHNlbGYsIG5hbWUpOgogICAgICAgICBpZiBsZW4obmFtZSkgPiBtYXhuYW1lbGVuOiByZXR1cm4gMApAQCAtODEsMTggKzcwLDggQEAKICAgICAgICAgaWYgc2VsZi5faGlkZGVuKG5hbWUpOiByZXR1cm4gMAogICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChuYW1lKQogICAgICAgICBpZiBoZWFkIG9yIG5vdCB0YWlsOiByZXR1cm4gMAotICAgICAgICBpZiBtYWNmczoKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG5hbWUpIGFuZCBub3Qgb3MucGF0aC5pc2RpcihuYW1lKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGZzID0gbWFjZnMuRlNTcGVjKG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGMsIHQgPSBmcy5HZXRDcmVhdG9yVHlwZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHQgIT0gJ1RFWFQnOiByZXR1cm4gMAotICAgICAgICAgICAgICAgIGV4Y2VwdCBtYWNmcy5lcnJvciwgbXNnOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiKioqIiwgbmFtZSwgbXNnCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhuYW1lKTogcmV0dXJuIDAKLSAgICAgICAgICAgIGlmICdcMCcgaW4gb3BlbihuYW1lLCAncmInKS5yZWFkKDUxMik6IHJldHVybiAwCisgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKG5hbWUpOiByZXR1cm4gMAorICAgICAgICBpZiAnXDAnIGluIG9wZW4obmFtZSwgJ3JiJykucmVhZCg1MTIpOiByZXR1cm4gMAogICAgICAgICBmb3IgaWduIGluIHNlbGYuX2lnbm9yZToKICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChuYW1lLCBpZ24pOiByZXR1cm4gMAogICAgICAgICByZXR1cm4gMQpkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9jbGllbnQucHkgYi9EZW1vL3BkaXN0L2NsaWVudC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L2NtZGZ3LnB5IGIvRGVtby9wZGlzdC9jbWRmdy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L2NtcHRyZWUucHkgYi9EZW1vL3BkaXN0L2NtcHRyZWUucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9jdnNsaWIucHkgYi9EZW1vL3BkaXN0L2N2c2xpYi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L2N2c2xvY2sucHkgYi9EZW1vL3BkaXN0L2N2c2xvY2sucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9tYWMucHkgYi9EZW1vL3BkaXN0L21hYy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L3Jjc2NsaWVudC5weSBiL0RlbW8vcGRpc3QvcmNzY2xpZW50LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvcmNzbGliLnB5IGIvRGVtby9wZGlzdC9yY3NsaWIucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9zZWN1cml0eS5weSBiL0RlbW8vcGRpc3Qvc2VjdXJpdHkucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9zZXJ2ZXIucHkgYi9EZW1vL3BkaXN0L3NlcnZlci5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L3N1bXRyZWUucHkgYi9EZW1vL3BkaXN0L3N1bXRyZWUucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL1JFQURNRSBiL0RlbW8vc2NyaXB0cy9SRUFETUUKaW5kZXggZDg0MzRlOC4uZDE5Y2M4MSAxMDA2NDQKLS0tIGEvRGVtby9zY3JpcHRzL1JFQURNRQorKysgYi9EZW1vL3NjcmlwdHMvUkVBRE1FCkBAIC0yLDE4ICsyLDE3IEBACiAKIFNlZSBhbHNvIHRoZSBUb29scy9zY3JpcHRzIGRpcmVjdG9yeSEKIAotYmVlci5weQkJCVByaW50IHRoZSBjbGFzc2ljICdib3R0bGVzIG9mIGJlZXInIGxpc3QuCitiZWVyLnB5CQkJUHJpbnQgdGhlIGNsYXNzaWMgJ2JvdHRsZXMgb2YgYmVlcicgbGlzdAogZXFmaXgucHkJCUZpeCAucHkgZmlsZXMgdG8gdXNlIHRoZSBjb3JyZWN0IGVxdWFsaXR5IHRlc3Qgb3BlcmF0b3IKIGZhY3QucHkJCQlGYWN0b3JpemUgbnVtYmVycwotZmluZC11bmFtZS5weQkJU2VhcmNoIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgdXNpbmcgcmVnZXhwcy4KK2ZpbmQtdW5hbWUucHkJCVNlYXJjaCBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIHVzaW5nIHJlZ2V4cHMKIGZyb20ucHkJCQlTdW1tYXJpemUgbWFpbGJveAotZnRwc3RhdHMucHkJCVN1bW1hcml6ZSBmdHAgZGFlbW9uIGxvZyBmaWxlCiBscHdhdGNoLnB5CQlXYXRjaCBCU0QgbGluZSBwcmludGVyIHF1ZXVlcwogbWFrZWRpci5weQkJTGlrZSBta2RpciAtcAogbWFya292LnB5CQlNYXJrb3YgY2hhaW4gc2ltdWxhdGlvbiBvZiB3b3JkcyBvciBjaGFyYWN0ZXJzCi1tYm94Y29udnZlcnQucHkJCUNvbnZlcnQgTUggb3IgTU1ERiBtYWlsYm94ZXMgdG8gdW5peCBtYWlsYm94IGZvcm1hdAotbWtyY3MucHkJCUZpeCBzeW1saW5rcyBuYW1lZCBSQ1MgaW50byBwYXJhbGxlbCB0cmVlCittYm94Y29udmVydC5weQkJQ29udmVydCBNSCBvciBNTURGIG1haWxib3hlcyB0byB1bml4IG1haWxib3ggZm9ybWF0CiBtb3JzZS5weQkJUHJvZHVjZSBtb3JzZSBjb2RlIChhdWRpYmxlIG9yIG9uIEFJRkYgZmlsZSkKK25ld3NsaXN0LnB5CQlMaXN0IGFsbCBuZXdzZ3JvdXBzIG9uIGEgTk5UUCBzZXJ2ZXIgYXMgSFRNTCBwYWdlcwogcGkucHkJCQlQcmludCBhbGwgZGlnaXRzIG9mIHBpIC0tIGdpdmVuIGVub3VnaCB0aW1lIGFuZCBtZW1vcnkKIHBwLnB5CQkJRW11bGF0ZSBzb21lIFBlcmwgY29tbWFuZCBsaW5lIG9wdGlvbnMKIHByaW1lcy5weQkJUHJpbnQgcHJpbWUgbnVtYmVycwpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL2JlZXIucHkgYi9EZW1vL3NjcmlwdHMvYmVlci5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDFiOWFjOGIuLmUzMzFjYzkKLS0tIGEvRGVtby9zY3JpcHRzL2JlZXIucHkKKysrIGIvRGVtby9zY3JpcHRzL2JlZXIucHkKQEAgLTEsMTQgKzEsMjAgQEAKICMhIC91c3IvYmluL2VudiBweXRob24KKwogIyBCeSBHdlIsIGRlbXlzdGlmaWVkIGFmdGVyIGEgdmVyc2lvbiBieSBGcmVkcmlrIEx1bmRoLgorCiBpbXBvcnQgc3lzCisKIG4gPSAxMDAKLWlmIHN5cy5hcmd2WzE6XTogbiA9IGludChzeXMuYXJndlsxXSkKK2lmIHN5cy5hcmd2WzE6XToKKyAgICBuID0gaW50KHN5cy5hcmd2WzFdKQorCiBkZWYgYm90dGxlKG4pOgogICAgIGlmIG4gPT0gMDogcmV0dXJuICJubyBtb3JlIGJvdHRsZXMgb2YgYmVlciIKICAgICBpZiBuID09IDE6IHJldHVybiAib25lIGJvdHRsZSBvZiBiZWVyIgogICAgIHJldHVybiBzdHIobikgKyAiIGJvdHRsZXMgb2YgYmVlciIKLWZvciBpIGluIHJhbmdlKG4pOgotICAgIHByaW50IGJvdHRsZShuLWkpLCAib24gdGhlIHdhbGwsIgotICAgIHByaW50IGJvdHRsZShuLWkpICsgIi4iCisKK2ZvciBpIGluIHJhbmdlKG4sIDAsIC0xKToKKyAgICBwcmludCBib3R0bGUoaSksICJvbiB0aGUgd2FsbCwiCisgICAgcHJpbnQgYm90dGxlKGkpICsgIi4iCiAgICAgcHJpbnQgIlRha2Ugb25lIGRvd24sIHBhc3MgaXQgYXJvdW5kLCIKLSAgICBwcmludCBib3R0bGUobi1pLTEpLCAib24gdGhlIHdhbGwuIgorICAgIHByaW50IGJvdHRsZShpLTEpLCAib24gdGhlIHdhbGwuIgpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL2ZhY3QucHkgYi9EZW1vL3NjcmlwdHMvZmFjdC5weQppbmRleCBjMDMwMTg3Li44ZWUyNTg4IDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvZmFjdC5weQorKysgYi9EZW1vL3NjcmlwdHMvZmFjdC5weQpAQCAtOSwzOSArOSw0MSBAQAogZnJvbSBtYXRoIGltcG9ydCBzcXJ0CiAKIGRlZiBmYWN0KG4pOgotICAgIGlmIG4gPCAxOiByYWlzZSBWYWx1ZUVycm9yICMgZmFjdCgpIGFyZ3VtZW50IHNob3VsZCBiZSA+PSAxCi0gICAgaWYgbiA9PSAxOiByZXR1cm4gW10gICAgIyBzcGVjaWFsIGNhc2UKKyAgICBpZiBuIDwgMToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZmFjdCgpIGFyZ3VtZW50IHNob3VsZCBiZSA+PSAxJykKKyAgICBpZiBuID09IDE6CisgICAgICAgIHJldHVybiBbXSAgIyBzcGVjaWFsIGNhc2UKICAgICByZXMgPSBbXQotICAgICMgVHJlYXQgZXZlbiBmYWN0b3JzIHNwZWNpYWwsIHNvIHdlIGNhbiB1c2UgaSA9IGkrMiBsYXRlcgotICAgIHdoaWxlIG4lMiA9PSAwOgorICAgICMgVHJlYXQgZXZlbiBmYWN0b3JzIHNwZWNpYWwsIHNvIHdlIGNhbiB1c2UgaSArPSAyIGxhdGVyCisgICAgd2hpbGUgbiAlIDIgPT0gMDoKICAgICAgICAgcmVzLmFwcGVuZCgyKQotICAgICAgICBuID0gbi8vMgorICAgICAgICBuIC8vPSAyCiAgICAgIyBUcnkgb2RkIG51bWJlcnMgdXAgdG8gc3FydChuKQotICAgIGxpbWl0ID0gc3FydChmbG9hdChuKzEpKQorICAgIGxpbWl0ID0gc3FydChuKzEpCiAgICAgaSA9IDMKICAgICB3aGlsZSBpIDw9IGxpbWl0OgotICAgICAgICBpZiBuJWkgPT0gMDoKKyAgICAgICAgaWYgbiAlIGkgPT0gMDoKICAgICAgICAgICAgIHJlcy5hcHBlbmQoaSkKLSAgICAgICAgICAgIG4gPSBuLy9pCisgICAgICAgICAgICBuIC8vPSBpCiAgICAgICAgICAgICBsaW1pdCA9IHNxcnQobisxKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaSA9IGkrMgorICAgICAgICAgICAgaSArPSAyCiAgICAgaWYgbiAhPSAxOgogICAgICAgICByZXMuYXBwZW5kKG4pCiAgICAgcmV0dXJuIHJlcwogCiBkZWYgbWFpbigpOgogICAgIGlmIGxlbihzeXMuYXJndikgPiAxOgotICAgICAgICBmb3IgYXJnIGluIHN5cy5hcmd2WzE6XToKLSAgICAgICAgICAgIG4gPSBldmFsKGFyZykKLSAgICAgICAgICAgIHByaW50IG4sIGZhY3QobikKKyAgICAgICAgc291cmNlID0gc3lzLmFyZ3ZbMTpdCiAgICAgZWxzZToKKyAgICAgICAgc291cmNlID0gaXRlcihyYXdfaW5wdXQsICcnKQorICAgIGZvciBhcmcgaW4gc291cmNlOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgIG4gPSBpbnB1dCgpCi0gICAgICAgICAgICAgICAgcHJpbnQgbiwgZmFjdChuKQotICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBuID0gaW50KGFyZykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwcmludCBhcmcsICdpcyBub3QgYW4gaW50ZWdlcicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50IG4sIGZhY3QobikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9maW5kLXVuYW1lLnB5IGIvRGVtby9zY3JpcHRzL2ZpbmQtdW5hbWUucHkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBiNzZiOWYwLi45NThmOGE0Ci0tLSBhL0RlbW8vc2NyaXB0cy9maW5kLXVuYW1lLnB5CisrKyBiL0RlbW8vc2NyaXB0cy9maW5kLXVuYW1lLnB5CkBAIC0yMSwyMCArMjEsMjAgQEAKIGltcG9ydCByZQogCiBkZWYgbWFpbihhcmdzKToKLSAgICB1bmljb2RlX25hbWVzPSBbXQorICAgIHVuaWNvZGVfbmFtZXMgPSBbXQogICAgIGZvciBpeCBpbiByYW5nZShzeXMubWF4dW5pY29kZSsxKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdW5pY29kZV9uYW1lcy5hcHBlbmQoIChpeCwgdW5pY29kZWRhdGEubmFtZSh1bmljaHIoaXgpKSkgKQorICAgICAgICAgICAgdW5pY29kZV9uYW1lcy5hcHBlbmQoKGl4LCB1bmljb2RlZGF0YS5uYW1lKHVuaWNocihpeCkpKSkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6ICMgbm8gbmFtZSBmb3IgdGhlIGNoYXJhY3RlcgogICAgICAgICAgICAgcGFzcwogICAgIGZvciBhcmcgaW4gYXJnczoKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZShhcmcsIHJlLkkpCi0gICAgICAgIG1hdGNoZXMgPSBbKHgseSkgZm9yICh4LHkpIGluIHVuaWNvZGVfbmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgcGF0LnNlYXJjaCh5KSBpcyBub3QgTm9uZV0KKyAgICAgICAgbWF0Y2hlcyA9IFsoeSx4KSBmb3IgKHgseSkgaW4gdW5pY29kZV9uYW1lcworICAgICAgICAgICAgICAgICAgIGlmIHBhdC5zZWFyY2goeSkgaXMgbm90IE5vbmVdCiAgICAgICAgIGlmIG1hdGNoZXM6CiAgICAgICAgICAgICBwcmludCAiKioqIiwgYXJnLCAibWF0Y2hlcyIsICIqKioiCi0gICAgICAgICAgICBmb3IgKHgseSkgaW4gbWF0Y2hlczoKLSAgICAgICAgICAgICAgICBwcmludCAiJXMgKCVkKSIgJSAoeSx4KQorICAgICAgICAgICAgZm9yIG1hdGNoIGluIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgcHJpbnQgIiVzICglZCkiICUgbWF0Y2gKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKHN5cy5hcmd2WzE6XSkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9mdHBzdGF0cy5weSBiL0RlbW8vc2NyaXB0cy9mdHBzdGF0cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODgxYjcxNy4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvZnRwc3RhdHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIEV4dHJhY3Qgc3RhdGlzdGljcyBmcm9tIGZ0cCBkYWVtb24gbG9nLgotCi0jIFVzYWdlOgotIyBmdHBzdGF0cyBbLW0gbWF4aXRlbXNdIFstcyBzZWFyY2hdIFtmaWxlXQotIyAtbSBtYXhpdGVtczogcmVzdHJpY3QgbnVtYmVyIG9mIGl0ZW1zIGluICJ0b3AtTiIgbGlzdHMsIGRlZmF1bHQgMjUuCi0jIC1zIHN0cmluZzogICByZXN0cmljdCBzdGF0aXN0aWNzIHRvIGxpbmVzIGNvbnRhaW5pbmcgdGhpcyBzdHJpbmcuCi0jIERlZmF1bHQgZmlsZSBpcyAvdXNyL2FkbS9mdHBkOyAgYSAiLSIgbWVhbnMgcmVhZCBzdGFuZGFyZCBpbnB1dC4KLQotIyBUaGUgc2NyaXB0IG11c3QgYmUgcnVuIG9uIHRoZSBob3N0IHdoZXJlIHRoZSBmdHAgZGFlbW9uIHJ1bnMuCi0jIChBdCBDV0kgdGhpcyBpcyBjdXJyZW50bHkgYnVpemVyZC4pCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHJlCi1pbXBvcnQgc3RyaW5nCi1pbXBvcnQgZ2V0b3B0Ci0KLXBhdCA9ICdeKFthLXpBLVowLTkgOl0qKSEoLiopISguKikhKFs8Pl0uKikhKFswLTldKykhKFswLTldKykkJwotcHJvZyA9IHJlLmNvbXBpbGUocGF0KQotCi1kZWYgbWFpbigpOgotICAgIG1heGl0ZW1zID0gMjUKLSAgICBzZWFyY2ggPSBOb25lCi0gICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdtOnM6JykKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6Ci0gICAgICAgIHByaW50IG1zZwotICAgICAgICBwcmludCAndXNhZ2U6IGZ0cHN0YXRzIFstbSBtYXhpdGVtc10gW2ZpbGVdJwotICAgICAgICBzeXMuZXhpdCgyKQotICAgIGZvciBvLCBhIGluIG9wdHM6Ci0gICAgICAgIGlmIG8gPT0gJy1tJzoKLSAgICAgICAgICAgIG1heGl0ZW1zID0gc3RyaW5nLmF0b2koYSkKLSAgICAgICAgaWYgbyA9PSAnLXMnOgotICAgICAgICAgICAgc2VhcmNoID0gYQotICAgIGZpbGUgPSAnL3Vzci9hZG0vZnRwZCcKLSAgICBpZiBhcmdzOiBmaWxlID0gYXJnc1swXQotICAgIGlmIGZpbGUgPT0gJy0nOgotICAgICAgICBmID0gc3lzLnN0ZGluCi0gICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3InKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgotICAgICAgICAgICAgcHJpbnQgZmlsZSwgJzonLCBtc2cKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgYnlkYXRlID0ge30KLSAgICBieXRpbWUgPSB7fQotICAgIGJ5ZmlsZSA9IHt9Ci0gICAgYnlkaXIgPSB7fQotICAgIGJ5aG9zdCA9IHt9Ci0gICAgYnl1c2VyID0ge30KLSAgICBieXR5cGUgPSB7fQotICAgIGxpbmVubyA9IDAKLSAgICB0cnk6Ci0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKLSAgICAgICAgICAgIGxpbmVubyA9IGxpbmVubyArIDEKLSAgICAgICAgICAgIGlmIHNlYXJjaCBhbmQgc3RyaW5nLmZpbmQobGluZSwgc2VhcmNoKSA8IDA6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIHByb2cubWF0Y2gobGluZSkgPCAwOgotICAgICAgICAgICAgICAgIHByaW50ICdCYWQgbGluZScsIGxpbmVubywgJzonLCByZXByKGxpbmUpCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGl0ZW1zID0gcHJvZy5ncm91cCgxLCAyLCAzLCA0LCA1LCA2KQotICAgICAgICAgICAgKGxvZ3RpbWUsIGxvZ3VzZXIsIGxvZ2hvc3QsIGxvZ2ZpbGUsIGxvZ2J5dGVzLAotICAgICAgICAgICAgIGxvZ3h4eDIpID0gaXRlbXMKLSMjICAgICAgICAgICAgICAgICAgICAgIHByaW50IGxvZ3RpbWUKLSMjICAgICAgICAgICAgICAgICAgICAgIHByaW50ICctLT4nLCBsb2d1c2VyCi0jIyAgICAgICAgICAgICAgICAgICAgICBwcmludCAnLS0+IC0tPicsIGxvZ2hvc3QKLSMjICAgICAgICAgICAgICAgICAgICAgIHByaW50ICctLT4gLS0+IC0tPicsIGxvZ2ZpbGUKLSMjICAgICAgICAgICAgICAgICAgICAgIHByaW50ICctLT4gLS0+IC0tPiAtLT4nLCBsb2dieXRlcwotIyMgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJy0tPiAtLT4gLS0+IC0tPiAtLT4nLCBsb2d4eHgyCi0jIyAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiBsb2d0aW1lLCBsb2dob3N0LCBsb2dieXRlcywgbG9neHh4MjoKLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgJyEnIGluIGk6IHByaW50ICc/Pz8nLCBpCi0gICAgICAgICAgICBhZGQoYnlkYXRlLCBsb2d0aW1lWy00Ol0gKyAnICcgKyBsb2d0aW1lWzo2XSwgaXRlbXMpCi0gICAgICAgICAgICBhZGQoYnl0aW1lLCBsb2d0aW1lWzc6OV0gKyAnOjAwLTU5JywgaXRlbXMpCi0gICAgICAgICAgICBkaXJlY3Rpb24sIGxvZ2ZpbGUgPSBsb2dmaWxlWzBdLCBsb2dmaWxlWzE6XQotICAgICAgICAgICAgIyBUaGUgcmVhbCBwYXRoIHByb2JhYmx5IHN0YXJ0cyBhdCB0aGUgbGFzdCAvLy4uLgotICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICBpID0gc3RyaW5nLmZpbmQobG9nZmlsZSwgJy8vJykKLSAgICAgICAgICAgICAgICBpZiBpIDwgMDogYnJlYWsKLSAgICAgICAgICAgICAgICBsb2dmaWxlID0gbG9nZmlsZVtpKzE6XQotICAgICAgICAgICAgYWRkKGJ5ZmlsZSwgbG9nZmlsZSArICcgJyArIGRpcmVjdGlvbiwgaXRlbXMpCi0gICAgICAgICAgICBsb2dkaXIgPSBvcy5wYXRoLmRpcm5hbWUobG9nZmlsZSkKLSMjICAgICAgICAgICAgICBsb2dkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKGxvZ2RpcikgKyAnLy4nCi0gICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgIGFkZChieWRpciwgbG9nZGlyICsgJyAnICsgZGlyZWN0aW9uLCBpdGVtcykKLSAgICAgICAgICAgICAgICBkaXJoZWFkID0gb3MucGF0aC5kaXJuYW1lKGxvZ2RpcikKLSAgICAgICAgICAgICAgICBpZiBkaXJoZWFkID09IGxvZ2RpcjogYnJlYWsKLSAgICAgICAgICAgICAgICBsb2dkaXIgPSBkaXJoZWFkCi0gICAgICAgICAgICBhZGQoYnlob3N0LCBsb2dob3N0LCBpdGVtcykKLSAgICAgICAgICAgIGFkZChieXVzZXIsIGxvZ3VzZXIsIGl0ZW1zKQotICAgICAgICAgICAgYWRkKGJ5dHlwZSwgZGlyZWN0aW9uLCBpdGVtcykKLSAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgIHByaW50ICdJbnRlcnJ1cHRlZCBhdCBsaW5lJywgbGluZW5vCi0gICAgc2hvdyhieXR5cGUsICdieSB0cmFuc2ZlciBkaXJlY3Rpb24nLCBtYXhpdGVtcykKLSAgICBzaG93KGJ5ZGlyLCAnYnkgZGlyZWN0b3J5JywgbWF4aXRlbXMpCi0gICAgc2hvdyhieWZpbGUsICdieSBmaWxlJywgbWF4aXRlbXMpCi0gICAgc2hvdyhieWhvc3QsICdieSBob3N0JywgbWF4aXRlbXMpCi0gICAgc2hvdyhieXVzZXIsICdieSB1c2VyJywgbWF4aXRlbXMpCi0gICAgc2hvd2JhcihieWRhdGUsICdieSBkYXRlJykKLSAgICBzaG93YmFyKGJ5dGltZSwgJ2J5IHRpbWUgb2YgZGF5JykKLQotZGVmIHNob3diYXIoZGljdCwgdGl0bGUpOgotICAgIG4gPSBsZW4odGl0bGUpCi0gICAgcHJpbnQgJz0nKigoNzAtbikvLzIpLCB0aXRsZSwgJz0nKigoNzEtbikvLzIpCi0gICAgbGlzdCA9IFtdCi0gICAga2V5cyA9IGRpY3Qua2V5cygpCi0gICAga2V5cy5zb3J0KCkKLSAgICBmb3Iga2V5IGluIGtleXM6Ci0gICAgICAgIG4gPSBsZW4oc3RyKGtleSkpCi0gICAgICAgIGxpc3QuYXBwZW5kKChsZW4oZGljdFtrZXldKSwga2V5KSkKLSAgICBtYXhrZXlsZW5ndGggPSAwCi0gICAgbWF4Y291bnQgPSAwCi0gICAgZm9yIGNvdW50LCBrZXkgaW4gbGlzdDoKLSAgICAgICAgbWF4a2V5bGVuZ3RoID0gbWF4KG1heGtleWxlbmd0aCwgbGVuKGtleSkpCi0gICAgICAgIG1heGNvdW50ID0gbWF4KG1heGNvdW50LCBjb3VudCkKLSAgICBtYXhiYXJsZW5ndGggPSA3MiAtIG1heGtleWxlbmd0aCAtIDcKLSAgICBmb3IgY291bnQsIGtleSBpbiBsaXN0OgotICAgICAgICBiYXJsZW5ndGggPSBpbnQocm91bmQobWF4YmFybGVuZ3RoKmZsb2F0KGNvdW50KS9tYXhjb3VudCkpCi0gICAgICAgIGJhciA9ICcqJypiYXJsZW5ndGgKLSAgICAgICAgcHJpbnQgJyU1ZCAlLSpzICVzJyAlIChjb3VudCwgbWF4a2V5bGVuZ3RoLCBrZXksIGJhcikKLQotZGVmIHNob3coZGljdCwgdGl0bGUsIG1heGl0ZW1zKToKLSAgICBpZiBsZW4oZGljdCkgPiBtYXhpdGVtczoKLSAgICAgICAgdGl0bGUgPSB0aXRsZSArICcgKGZpcnN0ICVkKSclbWF4aXRlbXMKLSAgICBuID0gbGVuKHRpdGxlKQotICAgIHByaW50ICc9JyooKDcwLW4pLy8yKSwgdGl0bGUsICc9JyooKDcxLW4pLy8yKQotICAgIGxpc3QgPSBbXQotICAgIGtleXMgPSBkaWN0LmtleXMoKQotICAgIGZvciBrZXkgaW4ga2V5czoKLSAgICAgICAgbGlzdC5hcHBlbmQoKC1sZW4oZGljdFtrZXldKSwga2V5KSkKLSAgICBsaXN0LnNvcnQoKQotICAgIGZvciBjb3VudCwga2V5IGluIGxpc3RbOm1heGl0ZW1zXToKLSAgICAgICAgcHJpbnQgJyU1ZCAlcycgJSAoLWNvdW50LCBrZXkpCi0KLWRlZiBhZGQoZGljdCwga2V5LCBpdGVtKToKLSAgICBpZiBkaWN0Lmhhc19rZXkoa2V5KToKLSAgICAgICAgZGljdFtrZXldLmFwcGVuZChpdGVtKQotICAgIGVsc2U6Ci0gICAgICAgIGRpY3Rba2V5XSA9IFtpdGVtXQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL2xwd2F0Y2gucHkgYi9EZW1vL3NjcmlwdHMvbHB3YXRjaC5weQppbmRleCA3MTVjYmI4Li45ZDIwN2I5IDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvbHB3YXRjaC5weQorKysgYi9EZW1vL3NjcmlwdHMvbHB3YXRjaC5weQpAQCAtMywxMCArMyw5IEBACiAjIFdhdGNoIGxpbmUgcHJpbnRlciBxdWV1ZShzKS4KICMgSW50ZW5kZWQgZm9yIEJTRCA0LjMgbHBxLgogCi1pbXBvcnQgcG9zaXgKK2ltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLWltcG9ydCBzdHJpbmcKIAogREVGX1BSSU5URVIgPSAncHNjJwogREVGX0RFTEFZID0gMTAKQEAgLTE0LDk0ICsxMyw4NyBAQAogZGVmIG1haW4oKToKICAgICBkZWxheSA9IERFRl9ERUxBWSAjIFhYWCBVc2UgZ2V0b3B0KCkgbGF0ZXIKICAgICB0cnk6Ci0gICAgICAgIHRoaXN1c2VyID0gcG9zaXguZW52aXJvblsnTE9HTkFNRSddCisgICAgICAgIHRoaXN1c2VyID0gb3MuZW52aXJvblsnTE9HTkFNRSddCiAgICAgZXhjZXB0OgotICAgICAgICB0aGlzdXNlciA9IHBvc2l4LmVudmlyb25bJ1VTRVInXQorICAgICAgICB0aGlzdXNlciA9IG9zLmVudmlyb25bJ1VTRVInXQogICAgIHByaW50ZXJzID0gc3lzLmFyZ3ZbMTpdCiAgICAgaWYgcHJpbnRlcnM6CiAgICAgICAgICMgU3RyaXAgJy1QJyBmcm9tIHByaW50ZXIgbmFtZXMganVzdCBpbiBjYXNlCiAgICAgICAgICMgdGhlIHVzZXIgc3BlY2lmaWVkIGl0Li4uCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihwcmludGVycykpOgotICAgICAgICAgICAgaWYgcHJpbnRlcnNbaV1bOjJdID09ICctUCc6Ci0gICAgICAgICAgICAgICAgcHJpbnRlcnNbaV0gPSBwcmludGVyc1tpXVsyOl0KKyAgICAgICAgZm9yIGksIG5hbWUgaW4gZW51bWVyYXRlKHByaW50ZXJzKToKKyAgICAgICAgICAgIGlmIG5hbWVbOjJdID09ICctUCc6CisgICAgICAgICAgICAgICAgcHJpbnRlcnNbaV0gPSBuYW1lWzI6XQogICAgIGVsc2U6Ci0gICAgICAgIGlmIHBvc2l4LmVudmlyb24uaGFzX2tleSgnUFJJTlRFUicpOgotICAgICAgICAgICAgcHJpbnRlcnMgPSBbcG9zaXguZW52aXJvblsnUFJJTlRFUiddXQorICAgICAgICBpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ1BSSU5URVInKToKKyAgICAgICAgICAgIHByaW50ZXJzID0gW29zLmVudmlyb25bJ1BSSU5URVInXV0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHByaW50ZXJzID0gW0RFRl9QUklOVEVSXQotICAgICMKLSAgICBjbGVhcmhvbWUgPSBwb3NpeC5wb3BlbignY2xlYXInLCAncicpLnJlYWQoKQotICAgICMKLSAgICB3aGlsZSAxOgorCisgICAgY2xlYXJob21lID0gb3MucG9wZW4oJ2NsZWFyJywgJ3InKS5yZWFkKCkKKworICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHRleHQgPSBjbGVhcmhvbWUKICAgICAgICAgZm9yIG5hbWUgaW4gcHJpbnRlcnM6Ci0gICAgICAgICAgICB0ZXh0ID0gdGV4dCArIG1ha2VzdGF0dXMobmFtZSwgdGhpc3VzZXIpICsgJ1xuJworICAgICAgICAgICAgdGV4dCArPSBtYWtlc3RhdHVzKG5hbWUsIHRoaXN1c2VyKSArICdcbicKICAgICAgICAgcHJpbnQgdGV4dAogICAgICAgICB0aW1lLnNsZWVwKGRlbGF5KQogCiBkZWYgbWFrZXN0YXR1cyhuYW1lLCB0aGlzdXNlcik6Ci0gICAgcGlwZSA9IHBvc2l4LnBvcGVuKCdscHEgLVAnICsgbmFtZSArICcgMj4mMScsICdyJykKKyAgICBwaXBlID0gb3MucG9wZW4oJ2xwcSAtUCcgKyBuYW1lICsgJyAyPiYxJywgJ3InKQogICAgIGxpbmVzID0gW10KICAgICB1c2VycyA9IHt9CiAgICAgYWhlYWRieXRlcyA9IDAKICAgICBhaGVhZGpvYnMgPSAwCi0gICAgdXNlcnNlZW4gPSAwCisgICAgdXNlcnNlZW4gPSBGYWxzZQogICAgIHRvdGFsYnl0ZXMgPSAwCiAgICAgdG90YWxqb2JzID0gMAotICAgIHdoaWxlIDE6Ci0gICAgICAgIGxpbmUgPSBwaXBlLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrCi0gICAgICAgIGZpZWxkcyA9IHN0cmluZy5zcGxpdChsaW5lKQorICAgIGZvciBsaW5lIGluIHBpcGU6CisgICAgICAgIGZpZWxkcyA9IGxpbmUuc3BsaXQoKQogICAgICAgICBuID0gbGVuKGZpZWxkcykKICAgICAgICAgaWYgbGVuKGZpZWxkcykgPj0gNiBhbmQgZmllbGRzW24tMV0gPT0gJ2J5dGVzJzoKLSAgICAgICAgICAgIHJhbmsgPSBmaWVsZHNbMF0KLSAgICAgICAgICAgIHVzZXIgPSBmaWVsZHNbMV0KLSAgICAgICAgICAgIGpvYiA9IGZpZWxkc1syXQorICAgICAgICAgICAgcmFuaywgdXNlciwgam9iID0gZmllbGRzWzA6M10KICAgICAgICAgICAgIGZpbGVzID0gZmllbGRzWzM6LTJdCi0gICAgICAgICAgICBieXRlcyA9IGV2YWwoZmllbGRzW24tMl0pCisgICAgICAgICAgICBieXRlcyA9IGludChmaWVsZHNbbi0yXSkKICAgICAgICAgICAgIGlmIHVzZXIgPT0gdGhpc3VzZXI6Ci0gICAgICAgICAgICAgICAgdXNlcnNlZW4gPSAxCisgICAgICAgICAgICAgICAgdXNlcnNlZW4gPSBUcnVlCiAgICAgICAgICAgICBlbGlmIG5vdCB1c2Vyc2VlbjoKLSAgICAgICAgICAgICAgICBhaGVhZGJ5dGVzID0gYWhlYWRieXRlcyArIGJ5dGVzCi0gICAgICAgICAgICAgICAgYWhlYWRqb2JzID0gYWhlYWRqb2JzICsgMQotICAgICAgICAgICAgdG90YWxieXRlcyA9IHRvdGFsYnl0ZXMgKyBieXRlcwotICAgICAgICAgICAgdG90YWxqb2JzID0gdG90YWxqb2JzICsgMQotICAgICAgICAgICAgaWYgdXNlcnMuaGFzX2tleSh1c2VyKToKLSAgICAgICAgICAgICAgICB1am9icywgdWJ5dGVzID0gdXNlcnNbdXNlcl0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdWpvYnMsIHVieXRlcyA9IDAsIDAKLSAgICAgICAgICAgIHVqb2JzID0gdWpvYnMgKyAxCi0gICAgICAgICAgICB1Ynl0ZXMgPSB1Ynl0ZXMgKyBieXRlcworICAgICAgICAgICAgICAgIGFoZWFkYnl0ZXMgKz0gYnl0ZXMKKyAgICAgICAgICAgICAgICBhaGVhZGpvYnMgKz0gMQorICAgICAgICAgICAgdG90YWxieXRlcyArPSBieXRlcworICAgICAgICAgICAgdG90YWxqb2JzICs9IDEKKyAgICAgICAgICAgIHVqb2JzLCB1Ynl0ZXMgPSB1c2Vycy5nZXQodXNlciwgKDAsIDApKQorICAgICAgICAgICAgdWpvYnMgKz0gMQorICAgICAgICAgICAgdWJ5dGVzICs9IGJ5dGVzCiAgICAgICAgICAgICB1c2Vyc1t1c2VyXSA9IHVqb2JzLCB1Ynl0ZXMKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGZpZWxkcyBhbmQgZmllbGRzWzBdIDw+ICdSYW5rJzoKLSAgICAgICAgICAgICAgICBsaW5lID0gc3RyaW5nLnN0cmlwKGxpbmUpCisgICAgICAgICAgICBpZiBmaWVsZHMgYW5kIGZpZWxkc1swXSAhPSAnUmFuayc6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gJ25vIGVudHJpZXMnOgogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbmFtZSArICc6IGlkbGUnCiAgICAgICAgICAgICAgICAgZWxpZiBsaW5lWy0yMjpdID09ICcgaXMgcmVhZHkgYW5kIHByaW50aW5nJzoKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IG5hbWUKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKLSAgICAjCisKICAgICBpZiB0b3RhbGpvYnM6Ci0gICAgICAgIGxpbmUgPSAnJWQgSycgJSAoKHRvdGFsYnl0ZXMrMTAyMykvLzEwMjQpCi0gICAgICAgIGlmIHRvdGFsam9icyA8PiBsZW4odXNlcnMpOgotICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnICglZCBqb2JzKScgJSB0b3RhbGpvYnMKKyAgICAgICAgbGluZSA9ICclZCBLJyAlICgodG90YWxieXRlcysxMDIzKSAvLyAxMDI0KQorICAgICAgICBpZiB0b3RhbGpvYnMgIT0gbGVuKHVzZXJzKToKKyAgICAgICAgICAgIGxpbmUgKz0gJyAoJWQgam9icyknICUgdG90YWxqb2JzCiAgICAgICAgIGlmIGxlbih1c2VycykgPT0gMToKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJyBmb3IgJXMnICUgKHVzZXJzLmtleXMoKVswXSwpCisgICAgICAgICAgICBsaW5lICs9ICcgZm9yICVzJyAlICh1c2Vycy5rZXlzKClbMF0sKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnIGZvciAlZCB1c2VycycgJSBsZW4odXNlcnMpCisgICAgICAgICAgICBsaW5lICs9ICcgZm9yICVkIHVzZXJzJyAlIGxlbih1c2VycykKICAgICAgICAgICAgIGlmIHVzZXJzZWVuOgogICAgICAgICAgICAgICAgIGlmIGFoZWFkam9icyA9PSAwOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gIGxpbmUgKyAnICglcyBmaXJzdCknICUgdGhpc3VzZXIKKyAgICAgICAgICAgICAgICAgICAgbGluZSArPSAnICglcyBmaXJzdCknICUgdGhpc3VzZXIKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICcgKCVkIEsgYmVmb3JlICVzKScgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhaGVhZGJ5dGVzKzEwMjMpLy8xMDI0LCB0aGlzdXNlcikKKyAgICAgICAgICAgICAgICAgICAgbGluZSArPSAnICglZCBLIGJlZm9yZSAlcyknICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgKGFoZWFkYnl0ZXMrMTAyMykgLy8gMTAyNCwgdGhpc3VzZXIpCiAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQotICAgICMKKwogICAgIHN0cyA9IHBpcGUuY2xvc2UoKQogICAgIGlmIHN0czoKICAgICAgICAgbGluZXMuYXBwZW5kKCdscHEgZXhpdCBzdGF0dXMgJXInICUgKHN0cywpKQotICAgIHJldHVybiBzdHJpbmcuam9pbmZpZWxkcyhsaW5lcywgJzogJykKKyAgICByZXR1cm4gJzogJy5qb2luKGxpbmVzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRyeToKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9tYXJrb3YucHkgYi9EZW1vL3NjcmlwdHMvbWFya292LnB5CmluZGV4IDdhNGZjMDEuLmRmNGRlYzAgMTAwNzU1Ci0tLSBhL0RlbW8vc2NyaXB0cy9tYXJrb3YucHkKKysrIGIvRGVtby9zY3JpcHRzL21hcmtvdi5weQpAQCAtNSwxMSArNSwxMCBAQAogICAgICAgICBzZWxmLmhpc3RzaXplID0gaGlzdHNpemUKICAgICAgICAgc2VsZi5jaG9pY2UgPSBjaG9pY2UKICAgICAgICAgc2VsZi50cmFucyA9IHt9CisKICAgICBkZWYgYWRkKHNlbGYsIHN0YXRlLCBuZXh0KToKLSAgICAgICAgaWYgbm90IHNlbGYudHJhbnMuaGFzX2tleShzdGF0ZSk6Ci0gICAgICAgICAgICBzZWxmLnRyYW5zW3N0YXRlXSA9IFtuZXh0XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi50cmFuc1tzdGF0ZV0uYXBwZW5kKG5leHQpCisgICAgICAgIHNlbGYudHJhbnMuc2V0ZGVmYXVsdChzdGF0ZSwgW10pLmFwcGVuZChuZXh0KQorCiAgICAgZGVmIHB1dChzZWxmLCBzZXEpOgogICAgICAgICBuID0gc2VsZi5oaXN0c2l6ZQogICAgICAgICBhZGQgPSBzZWxmLmFkZApAQCAtMTcsMjYgKzE2LDI5IEBACiAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZXEpKToKICAgICAgICAgICAgIGFkZChzZXFbbWF4KDAsIGktbik6aV0sIHNlcVtpOmkrMV0pCiAgICAgICAgIGFkZChzZXFbbGVuKHNlcSktbjpdLCBOb25lKQorCiAgICAgZGVmIGdldChzZWxmKToKICAgICAgICAgY2hvaWNlID0gc2VsZi5jaG9pY2UKICAgICAgICAgdHJhbnMgPSBzZWxmLnRyYW5zCiAgICAgICAgIG4gPSBzZWxmLmhpc3RzaXplCiAgICAgICAgIHNlcSA9IGNob2ljZSh0cmFuc1tOb25lXSkKLSAgICAgICAgd2hpbGUgMToKKyAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHN1YnNlcSA9IHNlcVttYXgoMCwgbGVuKHNlcSktbik6XQogICAgICAgICAgICAgb3B0aW9ucyA9IHRyYW5zW3N1YnNlcV0KICAgICAgICAgICAgIG5leHQgPSBjaG9pY2Uob3B0aW9ucykKLSAgICAgICAgICAgIGlmIG5vdCBuZXh0OiBicmVhawotICAgICAgICAgICAgc2VxID0gc2VxICsgbmV4dAorICAgICAgICAgICAgaWYgbm90IG5leHQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNlcSArPSBuZXh0CiAgICAgICAgIHJldHVybiBzZXEKIAorCiBkZWYgdGVzdCgpOgotICAgIGltcG9ydCBzeXMsIHN0cmluZywgcmFuZG9tLCBnZXRvcHQKKyAgICBpbXBvcnQgc3lzLCByYW5kb20sIGdldG9wdAogICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KICAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICcwMTIzNDU2Nzg5Y2R3JykKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJncywgJzAxMjM0NTY3ODljZHdxJykKICAgICBleGNlcHQgZ2V0b3B0LmVycm9yOgotICAgICAgICBwcmludCAnVXNhZ2U6IG1hcmtvdiBbLSNdIFstY2RkcXddIFtmaWxlXSAuLi4nCisgICAgICAgIHByaW50ICdVc2FnZTogJXMgWy0jXSBbLWNkZHF3XSBbZmlsZV0gLi4uJyAlIHN5cy5hcmd2WzBdCiAgICAgICAgIHByaW50ICdPcHRpb25zOicKICAgICAgICAgcHJpbnQgJy0jOiAxLWRpZ2l0IGhpc3Rvcnkgc2l6ZSAoZGVmYXVsdCAyKScKICAgICAgICAgcHJpbnQgJy1jOiBjaGFyYWN0ZXJzIChkZWZhdWx0KScKQEAgLTQ5LDE2ICs1MSwxOSBAQAogICAgICAgICBwcmludCAnZXhhY3RseSBvbmUgc3BhY2Ugc2VwYXJhdGluZyB3b3Jkcy4nCiAgICAgICAgIHByaW50ICdPdXRwdXQgY29uc2lzdHMgb2YgcGFyYWdyYXBocyBzZXBhcmF0ZWQgYnkgYmxhbmsnCiAgICAgICAgIHByaW50ICdsaW5lcywgd2hlcmUgbGluZXMgYXJlIG5vIGxvbmdlciB0aGFuIDcyIGNoYXJhY3RlcnMuJworICAgICAgICBzeXMuZXhpdCgyKQogICAgIGhpc3RzaXplID0gMgotICAgIGRvX3dvcmRzID0gMAorICAgIGRvX3dvcmRzID0gRmFsc2UKICAgICBkZWJ1ZyA9IDEKICAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICBpZiAnLTAnIDw9IG8gPD0gJy05JzogaGlzdHNpemUgPSBldmFsKG9bMTpdKQotICAgICAgICBpZiBvID09ICctYyc6IGRvX3dvcmRzID0gMAotICAgICAgICBpZiBvID09ICctZCc6IGRlYnVnID0gZGVidWcgKyAxCisgICAgICAgIGlmICctMCcgPD0gbyA8PSAnLTknOiBoaXN0c2l6ZSA9IGludChvWzE6XSkKKyAgICAgICAgaWYgbyA9PSAnLWMnOiBkb193b3JkcyA9IEZhbHNlCisgICAgICAgIGlmIG8gPT0gJy1kJzogZGVidWcgKz0gMQogICAgICAgICBpZiBvID09ICctcSc6IGRlYnVnID0gMAotICAgICAgICBpZiBvID09ICctdyc6IGRvX3dvcmRzID0gMQotICAgIGlmIG5vdCBhcmdzOiBhcmdzID0gWyctJ10KKyAgICAgICAgaWYgbyA9PSAnLXcnOiBkb193b3JkcyA9IFRydWUKKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgYXJncyA9IFsnLSddCisKICAgICBtID0gTWFya292KGhpc3RzaXplLCByYW5kb20uY2hvaWNlKQogICAgIHRyeToKICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGFyZ3M6CkBAIC03MiwxMyArNzcsMTUgQEAKICAgICAgICAgICAgIGlmIGRlYnVnOiBwcmludCAncHJvY2Vzc2luZycsIGZpbGVuYW1lLCAnLi4uJwogICAgICAgICAgICAgdGV4dCA9IGYucmVhZCgpCiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHBhcmFsaXN0ID0gc3RyaW5nLnNwbGl0ZmllbGRzKHRleHQsICdcblxuJykKKyAgICAgICAgICAgIHBhcmFsaXN0ID0gdGV4dC5zcGxpdCgnXG5cbicpCiAgICAgICAgICAgICBmb3IgcGFyYSBpbiBwYXJhbGlzdDoKICAgICAgICAgICAgICAgICBpZiBkZWJ1ZyA+IDE6IHByaW50ICdmZWVkaW5nIC4uLicKLSAgICAgICAgICAgICAgICB3b3JkcyA9IHN0cmluZy5zcGxpdChwYXJhKQorICAgICAgICAgICAgICAgIHdvcmRzID0gcGFyYS5zcGxpdCgpCiAgICAgICAgICAgICAgICAgaWYgd29yZHM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGRvX3dvcmRzOiBkYXRhID0gdHVwbGUod29yZHMpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6IGRhdGEgPSBzdHJpbmcuam9pbmZpZWxkcyh3b3JkcywgJyAnKQorICAgICAgICAgICAgICAgICAgICBpZiBkb193b3JkczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0dXBsZSh3b3JkcykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAnICcuam9pbih3b3JkcykKICAgICAgICAgICAgICAgICAgICAgbS5wdXQoZGF0YSkKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgIHByaW50ICdJbnRlcnJ1cHRlZCAtLSBjb250aW51ZSB3aXRoIGRhdGEgcmVhZCBzbyBmYXInCkBAIC04NiwxNiArOTMsMTkgQEAKICAgICAgICAgcHJpbnQgJ05vIHZhbGlkIGlucHV0IGZpbGVzJwogICAgICAgICByZXR1cm4KICAgICBpZiBkZWJ1ZzogcHJpbnQgJ2RvbmUuJworCiAgICAgaWYgZGVidWcgPiAxOgogICAgICAgICBmb3Iga2V5IGluIG0udHJhbnMua2V5cygpOgogICAgICAgICAgICAgaWYga2V5IGlzIE5vbmUgb3IgbGVuKGtleSkgPCBoaXN0c2l6ZToKICAgICAgICAgICAgICAgICBwcmludCByZXByKGtleSksIG0udHJhbnNba2V5XQogICAgICAgICBpZiBoaXN0c2l6ZSA9PSAwOiBwcmludCByZXByKCcnKSwgbS50cmFuc1snJ10KICAgICAgICAgcHJpbnQKLSAgICB3aGlsZSAxOgorICAgIHdoaWxlIFRydWU6CiAgICAgICAgIGRhdGEgPSBtLmdldCgpCi0gICAgICAgIGlmIGRvX3dvcmRzOiB3b3JkcyA9IGRhdGEKLSAgICAgICAgZWxzZTogd29yZHMgPSBzdHJpbmcuc3BsaXQoZGF0YSkKKyAgICAgICAgaWYgZG9fd29yZHM6CisgICAgICAgICAgICB3b3JkcyA9IGRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdvcmRzID0gZGF0YS5zcGxpdCgpCiAgICAgICAgIG4gPSAwCiAgICAgICAgIGxpbWl0ID0gNzIKICAgICAgICAgZm9yIHcgaW4gd29yZHM6CkBAIC0xMDMsMTUgKzExMyw5IEBACiAgICAgICAgICAgICAgICAgcHJpbnQKICAgICAgICAgICAgICAgICBuID0gMAogICAgICAgICAgICAgcHJpbnQgdywKLSAgICAgICAgICAgIG4gPSBuICsgbGVuKHcpICsgMQorICAgICAgICAgICAgbiArPSBsZW4odykgKyAxCiAgICAgICAgIHByaW50CiAgICAgICAgIHByaW50CiAKLWRlZiB0dXBsZShsaXN0KToKLSAgICBpZiBsZW4obGlzdCkgPT0gMDogcmV0dXJuICgpCi0gICAgaWYgbGVuKGxpc3QpID09IDE6IHJldHVybiAobGlzdFswXSwpCi0gICAgaSA9IGxlbihsaXN0KS8vMgotICAgIHJldHVybiB0dXBsZShsaXN0WzppXSkgKyB0dXBsZShsaXN0W2k6XSkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9ta3Jjcy5weSBiL0RlbW8vc2NyaXB0cy9ta3Jjcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggY2FjZGRhMC4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvbWtyY3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQSByYXRoZXIgc3BlY2lhbGl6ZWQgc2NyaXB0IHRvIG1ha2Ugc3VyZSB0aGF0IGEgc3ltYm9saWMgbGluayBuYW1lZAotIyBSQ1MgZXhpc3RzIHBvaW50aW5nIHRvIGEgcmVhbCBSQ1MgZGlyZWN0b3J5IGluIGEgcGFyYWxsZWwgdHJlZQotIyByZWZlcmVuY2VkIGFzIFJDU3RyZWUgaW4gYW4gYW5jZXN0b3IgZGlyZWN0b3J5LgotIyAoSSB1c2UgdGhpcyBiZWNhdXNlIEkgbGlrZSBteSBSQ1MgZmlsZXMgdG8gcmVzaWRlIG9uIGEgcGh5c2ljYWxseQotIyBkaWZmZXJlbnQgbWFjaGluZSkuCi0KLWltcG9ydCBvcwotCi1kZWYgbWFpbigpOgotICAgIHJjc3RyZWUgPSAnUkNTdHJlZScKLSAgICByY3MgPSAnUkNTJwotICAgIGlmIG9zLnBhdGguaXNsaW5rKHJjcyk6Ci0gICAgICAgIHByaW50ICclciBpcyBhIHN5bWxpbmsgdG8gJXInICUgKHJjcywgb3MucmVhZGxpbmsocmNzKSkKLSAgICAgICAgcmV0dXJuCi0gICAgaWYgb3MucGF0aC5pc2RpcihyY3MpOgotICAgICAgICBwcmludCAnJXIgaXMgYW4gb3JkaW5hcnkgZGlyZWN0b3J5JyAlIChyY3MsKQotICAgICAgICByZXR1cm4KLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhyY3MpOgotICAgICAgICBwcmludCAnJXIgaXMgYSBmaWxlPyE/IScgJSAocmNzLCkKLSAgICAgICAgcmV0dXJuCi0gICAgIwotICAgIHAgPSBvcy5nZXRjd2QoKQotICAgIHVwID0gJycKLSAgICBkb3duID0gJycKLSAgICAjIEludmFyaWFudHM6Ci0gICAgIyAoMSkgam9pbihwLCBkb3duKSBpcyB0aGUgY3VycmVudCBkaXJlY3RvcnkKLSAgICAjICgyKSB1cCBpcyB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgcAotICAgICMgRXJnbzoKLSAgICAjICgzKSBqb2luKHVwLCBkb3duKSBpcyB0aGUgY3VycmVudCBkaXJlY3RvcnkKLSAgICAjcHJpbnQgJ3AgPScsIHJlcHIocCkKLSAgICB3aGlsZSBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4ocCwgcmNzdHJlZSkpOgotICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChwKQotICAgICAgICAjcHJpbnQgJ2hlYWQgPSAlcjsgdGFpbCA9ICVyJyAlIChoZWFkLCB0YWlsKQotICAgICAgICBpZiBub3QgdGFpbDoKLSAgICAgICAgICAgIHByaW50ICdTb3JyeSwgbm8gYW5jZXN0b3IgZGlyIGNvbnRhaW5zICVyJyAlIChyY3N0cmVlLCkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBwID0gaGVhZAotICAgICAgICB1cCA9IG9zLnBhdGguam9pbihvcy5wYXJkaXIsIHVwKQotICAgICAgICBkb3duID0gb3MucGF0aC5qb2luKHRhaWwsIGRvd24pCi0gICAgICAgICNwcmludCAncCA9ICVyOyB1cCA9ICVyOyBkb3duID0gJXInICUgKHAsIHVwLCBkb3duKQotICAgIHRoZXJlID0gb3MucGF0aC5qb2luKHVwLCByY3N0cmVlKQotICAgIHRoZXJlID0gb3MucGF0aC5qb2luKHRoZXJlLCBkb3duKQotICAgIHRoZXJlID0gb3MucGF0aC5qb2luKHRoZXJlLCByY3MpCi0gICAgaWYgb3MucGF0aC5pc2Rpcih0aGVyZSk6Ci0gICAgICAgIHByaW50ICclciBhbHJlYWR5IGV4aXN0cycgJSAodGhlcmUsICkKLSAgICBlbHNlOgotICAgICAgICBwcmludCAnbWFraW5nICVyJyAlICh0aGVyZSwpCi0gICAgICAgIG1ha2VkaXJzKHRoZXJlKQotICAgIHByaW50ICdtYWtpbmcgc3ltbGluayAlciAtPiAlcicgJSAocmNzLCB0aGVyZSkKLSAgICBvcy5zeW1saW5rKHRoZXJlLCByY3MpCi0KLWRlZiBtYWtlZGlycyhwKToKLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihwKToKLSAgICAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQocCkKLSAgICAgICAgbWFrZWRpcnMoaGVhZCkKLSAgICAgICAgb3MubWtkaXIocCwgMDc3NykKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9tb3JzZS5weSBiL0RlbW8vc2NyaXB0cy9tb3JzZS5weQppbmRleCAzZGE0OWRhLi4yNjVmYWU5IDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvbW9yc2UucHkKKysrIGIvRGVtby9zY3JpcHRzL21vcnNlLnB5CkBAIC0xLDMgKzEsNSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCiAjIERBSCBzaG91bGQgYmUgdGhyZWUgRE9Ucy4KICMgU3BhY2UgYmV0d2VlbiBET1RzIGFuZCBEQUhzIHNob3VsZCBiZSBvbmUgRE9ULgogIyBTcGFjZSBiZXR3ZWVuIHR3byBsZXR0ZXJzIHNob3VsZCBiZSBvbmUgREFILgpAQCAtMzYsNTMgKzM4LDQ0IEBACiAgICAgICAgICdYJzogJy0uLi0nLCAgICAgICAgICAgICd4JzogJy0uLi0nLAogICAgICAgICAnWSc6ICctLi0tJywgICAgICAgICAgICAneSc6ICctLi0tJywKICAgICAgICAgJ1onOiAnLS0uLicsICAgICAgICAgICAgJ3onOiAnLS0uLicsCi0gICAgICAgICcwJzogJy0tLS0tJywKLSAgICAgICAgJzEnOiAnLi0tLS0nLAotICAgICAgICAnMic6ICcuLi0tLScsCi0gICAgICAgICczJzogJy4uLi0tJywKLSAgICAgICAgJzQnOiAnLi4uLi0nLAotICAgICAgICAnNSc6ICcuLi4uLicsCi0gICAgICAgICc2JzogJy0uLi4uJywKLSAgICAgICAgJzcnOiAnLS0uLi4nLAotICAgICAgICAnOCc6ICctLS0uLicsCi0gICAgICAgICc5JzogJy0tLS0uJywKLSAgICAgICAgJywnOiAnLS0uLi0tJywKLSAgICAgICAgJy4nOiAnLi0uLS4tJywKLSAgICAgICAgJz8nOiAnLi4tLS4uJywKLSAgICAgICAgJzsnOiAnLS4tLi0uJywKLSAgICAgICAgJzonOiAnLS0tLi4uJywKLSAgICAgICAgIiciOiAnLi0tLS0uJywKLSAgICAgICAgJy0nOiAnLS4uLi4tJywKLSAgICAgICAgJy8nOiAnLS4uLS4nLAotICAgICAgICAnKCc6ICctLi0tLi0nLAotICAgICAgICAnKSc6ICctLi0tLi0nLAotICAgICAgICAnXyc6ICcuLi0tLi0nLAotICAgICAgICAnICc6ICcgJworICAgICAgICAnMCc6ICctLS0tLScsICAgICAgICAgICAnLCc6ICctLS4uLS0nLAorICAgICAgICAnMSc6ICcuLS0tLScsICAgICAgICAgICAnLic6ICcuLS4tLi0nLAorICAgICAgICAnMic6ICcuLi0tLScsICAgICAgICAgICAnPyc6ICcuLi0tLi4nLAorICAgICAgICAnMyc6ICcuLi4tLScsICAgICAgICAgICAnOyc6ICctLi0uLS4nLAorICAgICAgICAnNCc6ICcuLi4uLScsICAgICAgICAgICAnOic6ICctLS0uLi4nLAorICAgICAgICAnNSc6ICcuLi4uLicsICAgICAgICAgICAiJyI6ICcuLS0tLS4nLAorICAgICAgICAnNic6ICctLi4uLicsICAgICAgICAgICAnLSc6ICctLi4uLi0nLAorICAgICAgICAnNyc6ICctLS4uLicsICAgICAgICAgICAnLyc6ICctLi4tLicsCisgICAgICAgICc4JzogJy0tLS4uJywgICAgICAgICAgICcoJzogJy0uLS0uLScsCisgICAgICAgICc5JzogJy0tLS0uJywgICAgICAgICAgICcpJzogJy0uLS0uLScsCisgICAgICAgICcgJzogJyAnLCAgICAgICAgICAgICAgICdfJzogJy4uLS0uLScsCiB9CiAKK25vd2F2ZSA9ICdcMCcgKiAyMDAKKwogIyBJZiB3ZSBwbGF5IGF0IDQ0LjEga0h6ICh3aGljaCB3ZSBkbyksIHRoZW4gaWYgd2UgcHJvZHVjZSBvbmUgc2luZQogIyB3YXZlIGluIDEwMCBzYW1wbGVzLCB3ZSBnZXQgYSB0b25lIG9mIDQ0MSBIei4gIElmIHdlIHByb2R1Y2UgdHdvCiAjIHNpbmUgd2F2ZXMgaW4gdGhlc2UgMTAwIHNhbXBsZXMsIHdlIGdldCBhIHRvbmUgb2YgODgyIEh6LiAgODgyIEh6CiAjIGFwcGVhcnMgdG8gYmUgYSBuaWNlIG9uZSBmb3IgcGxheWluZyBtb3JzZSBjb2RlLgogZGVmIG1rd2F2ZShvY3RhdmUpOgotICAgIGdsb2JhbCBzaW5ld2F2ZSwgbm93YXZlCiAgICAgc2luZXdhdmUgPSAnJwogICAgIGZvciBpIGluIHJhbmdlKDEwMCk6Ci0gICAgICAgIHZhbCA9IGludChtYXRoLnNpbihtYXRoLnBpICogZmxvYXQoaSkgKiBvY3RhdmUgLyA1MC4wKSAqIDMwMDAwKQotICAgICAgICBzaW5ld2F2ZSA9IHNpbmV3YXZlICsgY2hyKCh2YWwgPj4gOCkgJiAyNTUpICsgY2hyKHZhbCAmIDI1NSkKLSAgICBub3dhdmUgPSAnXDAnICogMjAwCisgICAgICAgIHZhbCA9IGludChtYXRoLnNpbihtYXRoLnBpICogaSAqIG9jdGF2ZSAvIDUwLjApICogMzAwMDApCisgICAgICAgIHNpbmV3YXZlICs9IGNocigodmFsID4+IDgpICYgMjU1KSArIGNocih2YWwgJiAyNTUpCisgICAgcmV0dXJuIHNpbmV3YXZlCiAKLW1rd2F2ZShPQ1RBVkUpCitkZWZhdWx0d2F2ZSA9IG1rd2F2ZShPQ1RBVkUpCiAKIGRlZiBtYWluKCk6Ci0gICAgaW1wb3J0IGdldG9wdCwgc3RyaW5nCisgICAgaW1wb3J0IGdldG9wdAogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnbzpwOicpCiAgICAgZXhjZXB0IGdldG9wdC5lcnJvcjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnVXNhZ2UgJyArIHN5cy5hcmd2WzBdICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnIFsgLW8gb3V0ZmlsZSBdIFsgYXJncyBdIC4uLlxuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAnIFsgLW8gb3V0ZmlsZSBdIFsgLXAgb2N0YXZlIF0gWyB3b3JkcyBdIC4uLlxuJykKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBkZXYgPSBOb25lCisgICAgd2F2ZSA9IGRlZmF1bHR3YXZlCiAgICAgZm9yIG8sIGEgaW4gb3B0czoKICAgICAgICAgaWYgbyA9PSAnLW8nOgogICAgICAgICAgICAgaW1wb3J0IGFpZmMKQEAgLTkxLDcgKzg0LDcgQEAKICAgICAgICAgICAgIGRldi5zZXRzYW1wd2lkdGgoMikKICAgICAgICAgICAgIGRldi5zZXRuY2hhbm5lbHMoMSkKICAgICAgICAgaWYgbyA9PSAnLXAnOgotICAgICAgICAgICAgbWt3YXZlKHN0cmluZy5hdG9pKGEpKQorICAgICAgICAgICAgd2F2ZSA9IG1rd2F2ZShpbnQoYSkpCiAgICAgaWYgbm90IGRldjoKICAgICAgICAgaW1wb3J0IGF1ZGlvZGV2CiAgICAgICAgIGRldiA9IGF1ZGlvZGV2LkF1ZGlvRGV2KCkKQEAgLTEwMSwxOCArOTQsMTQgQEAKICAgICAgICAgZGV2LmNsb3NlID0gZGV2LnN0b3AKICAgICAgICAgZGV2LndyaXRlZnJhbWVzcmF3ID0gZGV2LndyaXRlZnJhbWVzCiAgICAgaWYgYXJnczoKLSAgICAgICAgbGluZSA9IHN0cmluZy5qb2luKGFyZ3MpCisgICAgICAgIHNvdXJjZSA9IFsnICcuam9pbihhcmdzKV0KICAgICBlbHNlOgotICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKLSAgICB3aGlsZSBsaW5lOgorICAgICAgICBzb3VyY2UgPSBpdGVyKHN5cy5zdGRpbi5yZWFkbGluZSwgJycpCisgICAgZm9yIGxpbmUgaW4gc291cmNlOgogICAgICAgICBtbGluZSA9IG1vcnNlKGxpbmUpCi0gICAgICAgIHBsYXkobWxpbmUsIGRldikKKyAgICAgICAgcGxheShtbGluZSwgZGV2LCB3YXZlKQogICAgICAgICBpZiBoYXNhdHRyKGRldiwgJ3dhaXQnKToKICAgICAgICAgICAgIGRldi53YWl0KCkKLSAgICAgICAgaWYgbm90IGFyZ3M6Ci0gICAgICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmUgPSAnJwogICAgIGRldi5jbG9zZSgpCiAKICMgQ29udmVydCBhIHN0cmluZyB0byBtb3JzZSBjb2RlIHdpdGggXDAwMSBiZXR3ZWVuIHRoZSBjaGFyYWN0ZXJzIGluCkBAIC0xMjEsMjkgKzExMCwyOSBAQAogICAgIHJlcyA9ICcnCiAgICAgZm9yIGMgaW4gbGluZToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVzID0gcmVzICsgbW9yc2V0YWJbY10gKyAnXDAwMScKKyAgICAgICAgICAgIHJlcyArPSBtb3JzZXRhYltjXSArICdcMDAxJwogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgcmV0dXJuIHJlcwogCiAjIFBsYXkgYSBsaW5lIG9mIG1vcnNlIGNvZGUuCi1kZWYgcGxheShsaW5lLCBkZXYpOgorZGVmIHBsYXkobGluZSwgZGV2LCB3YXZlKToKICAgICBmb3IgYyBpbiBsaW5lOgogICAgICAgICBpZiBjID09ICcuJzoKLSAgICAgICAgICAgIHNpbmUoZGV2LCBET1QpCisgICAgICAgICAgICBzaW5lKGRldiwgRE9ULCB3YXZlKQogICAgICAgICBlbGlmIGMgPT0gJy0nOgotICAgICAgICAgICAgc2luZShkZXYsIERBSCkKKyAgICAgICAgICAgIHNpbmUoZGV2LCBEQUgsIHdhdmUpCiAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICMgc3BhY2UKICAgICAgICAgICAgIHBhdXNlKGRldiwgREFIICsgRE9UKQogICAgICAgICBwYXVzZShkZXYsIERPVCkKIAotZGVmIHNpbmUoZGV2LCBsZW5ndGgpOgorZGVmIHNpbmUoZGV2LCBsZW5ndGgsIHdhdmUpOgogICAgIGZvciBpIGluIHJhbmdlKGxlbmd0aCk6Ci0gICAgICAgIGRldi53cml0ZWZyYW1lc3JhdyhzaW5ld2F2ZSkKKyAgICAgICAgZGV2LndyaXRlZnJhbWVzcmF3KHdhdmUpCiAKIGRlZiBwYXVzZShkZXYsIGxlbmd0aCk6CiAgICAgZm9yIGkgaW4gcmFuZ2UobGVuZ3RoKToKICAgICAgICAgZGV2LndyaXRlZnJhbWVzcmF3KG5vd2F2ZSkKIAotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyBvciBzeXMuYXJndlswXSA9PSBfX25hbWVfXzoKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvbmV3c2xpc3QucHkgYi9EZW1vL3NjcmlwdHMvbmV3c2xpc3QucHkKaW5kZXggMWRjOGFmMi4uYTkxZTkwMSAxMDA3NTUKLS0tIGEvRGVtby9zY3JpcHRzL25ld3NsaXN0LnB5CisrKyBiL0RlbW8vc2NyaXB0cy9uZXdzbGlzdC5weQpAQCAtMzIsMjIgKzMyLDIyIEBACiAjIGZyYXNlckBldXJvcGFyYy54ZXJveC5jb20gICAgICAgICAgICAgICAgICAgICBxczEwMUBjbC5jYW0uYWMudWsKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotaW1wb3J0IHN5cyxubnRwbGliLCBzdHJpbmcsIG1hcnNoYWwsIHRpbWUsIG9zLCBwb3NpeCwgc3RyaW5nCitpbXBvcnQgc3lzLCBubnRwbGliLCBtYXJzaGFsLCB0aW1lLCBvcwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBDaGVjayB0aGVzZSB2YXJpYWJsZXMgYmVmb3JlIHJ1bm5pbmchICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIAogIyBUb3AgZGlyZWN0b3J5LgogIyBGaWxlbmFtZXMgd2hpY2ggZG9uJ3Qgc3RhcnQgd2l0aCAvIGFyZSB0YWtlbiBhcyBiZWluZyByZWxhdGl2ZSB0byB0aGlzLgotdG9wZGlyPScvYW5mcy9xc2JpZ2Rpc2Mvd2ViL2h0bWwvbmV3c3BhZ2UnCit0b3BkaXIgPSBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vbmV3c3BhZ2UnKQogCiAjIFRoZSBuYW1lIG9mIHlvdXIgTk5UUCBob3N0CiAjIGVnLgogIyAgICBuZXdzaG9zdCA9ICdubnRwLXNlcnYuY2wuY2FtLmFjLnVrJwogIyBvciB1c2UgZm9sbG93aW5nIHRvIGdldCB0aGUgbmFtZSBmcm9tIHRoZSBOTlRQU0VSVkVSIGVudmlyb25tZW50CiAjIHZhcmlhYmxlOgotIyAgICBuZXdzaG9zdCA9IHBvc2l4LmVudmlyb25bJ05OVFBTRVJWRVInXQotbmV3c2hvc3QgPSAnbm50cC1zZXJ2LmNsLmNhbS5hYy51aycKKyMgICAgbmV3c2hvc3QgPSBvcy5lbnZpcm9uWydOTlRQU0VSVkVSJ10KK25ld3Nob3N0ID0gJ25ld3MuZXhhbXBsZS5jb20nCiAKICMgVGhlIGZpbGVuYW1lIGZvciBhIGxvY2FsIGNhY2hlIG9mIHRoZSBuZXdzZ3JvdXAgbGlzdAogdHJlZWZpbGUgPSAnZ3JvdXB0cmVlJwpAQCAtODEsNyArODEsNyBAQAogIyBwYWdlbGlua2ljb24gY2FuIGNvbnRhaW4gaHRtbCB0byBwdXQgYW4gaWNvbiBhZnRlciBsaW5rcyB0bwogIyBmdXJ0aGVyIHBhZ2VzLiBUaGlzIGhlbHBzIHRvIG1ha2UgaW1wb3J0YW50IGxpbmtzIHN0YW5kIG91dC4KICMgU2V0IHRvICcnIGlmIG5vdCB3YW50ZWQsIG9yICcuLi4nIGlzIHF1aXRlIGEgZ29vZCBvbmUuCi1wYWdlbGlua2ljb249Jy4uLiA8aW1nIHNyYz0iaHR0cDovL3BlbGljYW4uY2wuY2FtLmFjLnVrL2ljb25zL3BhZ2UueGJtIj4gJworcGFnZWxpbmtpY29uID0gJy4uLiA8aW1nIHNyYz0iaHR0cDovL3BlbGljYW4uY2wuY2FtLmFjLnVrL2ljb25zL3BhZ2UueGJtIj4gJwogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBMZXNzIGltcG9ydGFudCBwZXJzb25hbCBwcmVmZXJlbmNlczoKQEAgLTEwNiw3ICsxMDYsNyBAQAogZnJvbSBzdGF0IGltcG9ydCAqCiAKIHJjc3JldiA9ICckUmV2aXNpb24kJwotcmNzcmV2ID0gc3RyaW5nLmpvaW4oZmlsdGVyKGxhbWJkYSBzOiAnJCcgbm90IGluIHMsIHN0cmluZy5zcGxpdChyY3NyZXYpKSkKK3Jjc3JldiA9ICcgJy5qb2luKGZpbHRlcihsYW1iZGEgczogJyQnIG5vdCBpbiBzLCByY3NyZXYuc3BsaXQoKSkpCiBkZXNjID0ge30KIAogIyBNYWtlIChwb3NzaWJseSkgcmVsYXRpdmUgZmlsZW5hbWVzIGludG8gYWJzb2x1dGUgb25lcwpAQCAtMTIwLDcgKzEyMCw3IEBACiBkZWYgYWRkdG90cmVlKHRyZWUsIGdyb3Vwcyk6CiAgICAgcHJpbnQgJ1VwZGF0aW5nIHRyZWUuLi4nCiAgICAgZm9yIGkgaW4gZ3JvdXBzOgotICAgICAgICBwYXJ0cyA9IHN0cmluZy5zcGxpdGZpZWxkcyhpLCcuJykKKyAgICAgICAgcGFydHMgPSBpLnNwbGl0KCcuJykKICAgICAgICAgbWFrZWxlYWYodHJlZSwgcGFydHMpCiAKICMgTWFrZWxlYWYgbWFrZXMgYSBsZWFmIGFuZCB0aGUgYnJhbmNoIGxlYWRpbmcgdG8gaXQgaWYgbmVjZXNzYXJ5CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICBqID0gcGF0aFswXQogICAgIGwgPSBsZW4ocGF0aCkKIAotICAgIGlmIG5vdCB0cmVlLmhhc19rZXkoaik6CisgICAgaWYgaiBub3QgaW4gdHJlZToKICAgICAgICAgdHJlZVtqXSA9IHt9CiAgICAgaWYgbCA9PSAxOgogICAgICAgICB0cmVlW2pdWycuJ10gPSAnLicKQEAgLTE0MSwzNCArMTQxLDM4IEBACiAjIHRvIHRob3NlIGdyb3VwcyBiZWdpbm5pbmcgd2l0aCA8cm9vdD4uCiAKIGRlZiBjcmVhdGVwYWdlKHJvb3QsIHRyZWUsIHApOgotICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhZ2VkaXIscm9vdCsnLmh0bWwnKQorICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhZ2VkaXIsIHJvb3QrJy5odG1sJykKICAgICBpZiByb290ID09IHJvb3RwYWdlOgogICAgICAgICBkZXRhaWwgPSAnJwogICAgIGVsc2U6CiAgICAgICAgIGRldGFpbCA9ICcgdW5kZXIgJyArIHJvb3QKLSAgICBmID0gb3BlbihmaWxlbmFtZSwndycpCi0gICAgIyBmLndyaXRlKCdDb250ZW50LVR5cGU6IHRleHQvaHRtbFxuJykKLSAgICBmLndyaXRlKCc8VElUTEU+TmV3c2dyb3VwcyBhdmFpbGFibGUnICsgZGV0YWlsICsgJzwvVElUTEU+XG4nKQotICAgIGYud3JpdGUoJzxIMT5OZXdzZ3JvdXBzIGF2YWlsYWJsZScgKyBkZXRhaWwgKyc8L0gxPlxuJykKLSAgICBmLndyaXRlKCc8QSBIUkVGPSInK2h0dHBwcmVmK3Jvb3RwYWdlKycuaHRtbCI+QmFjayB0byB0b3AgbGV2ZWw8L0E+PFA+XG4nKQotICAgIHByaW50dHJlZShmLHRyZWUsMCxwKQotICAgIGYud3JpdGUoJzxJPlRoaXMgcGFnZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgXCduZXdzbGlzdFwnIHYuICcrcmNzcmV2KycuJykKLSAgICBmLndyaXRlKHRpbWUuY3RpbWUodGltZS50aW1lKCkpICsgJzwvST48UD4nKQotICAgIGYuY2xvc2UoKQorICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAjIGYud3JpdGUoJ0NvbnRlbnQtVHlwZTogdGV4dC9odG1sXG4nKQorICAgICAgICBmLndyaXRlKCc8aHRtbD5cbjxoZWFkPlxuJykKKyAgICAgICAgZi53cml0ZSgnPHRpdGxlPk5ld3Nncm91cHMgYXZhaWxhYmxlJXM8L3RpdGxlPlxuJyAlIGRldGFpbCkKKyAgICAgICAgZi53cml0ZSgnPC9oZWFkPlxuPGJvZHk+XG4nKQorICAgICAgICBmLndyaXRlKCc8aDE+TmV3c2dyb3VwcyBhdmFpbGFibGUlczwvaDE+XG4nICUgZGV0YWlsKQorICAgICAgICBmLndyaXRlKCc8YSBocmVmPSIlcyVzLmh0bWwiPkJhY2sgdG8gdG9wIGxldmVsPC9hPjxwPlxuJyAlCisgICAgICAgICAgICAgICAgKGh0dHBwcmVmLCByb290cGFnZSkpCisgICAgICAgIHByaW50dHJlZShmLCB0cmVlLCAwLCBwKQorICAgICAgICBmLndyaXRlKCdcbjxwPicpCisgICAgICAgIGYud3JpdGUoIjxpPlRoaXMgcGFnZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgJ25ld3NsaXN0JyB2LiAlcy4iICUKKyAgICAgICAgICAgICAgICByY3NyZXYpCisgICAgICAgIGYud3JpdGUodGltZS5jdGltZSh0aW1lLnRpbWUoKSkgKyAnPC9pPlxuJykKKyAgICAgICAgZi53cml0ZSgnPC9ib2R5PlxuPC9odG1sPlxuJykKIAogIyBQcmludHRyZWUgcHJpbnRzIHRoZSBncm91cHMgYXMgYSBidWxsZXRlZCBsaXN0LiAgR3JvdXBzIHdpdGgKICMgbW9yZSB0aGFuIDxzdWJsaXN0c2l6ZT4gc3ViZ3JvdXBzIHdpbGwgYmUgcHV0IG9uIGEgc2VwYXJhdGUgcGFnZS4KICMgT3RoZXIgc2V0cyBvZiBzdWJncm91cHMgYXJlIGp1c3QgaW5kZW50ZWQuCiAKIGRlZiBwcmludHRyZWUoZiwgdHJlZSwgaW5kZW50LCBwKToKLSAgICBnbG9iYWwgZGVzYwogICAgIGwgPSBsZW4odHJlZSkKIAotICAgIGlmIGwgPiBzdWJsaXN0c2l6ZSBhbmQgaW5kZW50PjA6CisgICAgaWYgbCA+IHN1Ymxpc3RzaXplIGFuZCBpbmRlbnQgPiAwOgogICAgICAgICAjIENyZWF0ZSBhIG5ldyBwYWdlIGFuZCBhIGxpbmsgdG8gaXQKLSAgICAgICAgZi53cml0ZSgnPExJPjxCPjxBIEhSRUY9IicraHR0cHByZWYrcFsxOl0rJy5odG1sIj4nKQotICAgICAgICBmLndyaXRlKHBbMTpdKycuKicpCi0gICAgICAgIGYud3JpdGUoJzwvQT48L0I+JytwYWdlbGlua2ljb24rJ1xuJykKKyAgICAgICAgZi53cml0ZSgnPGxpPjxiPjxhIGhyZWY9IiVzJXMuaHRtbCI+JyAlIChodHRwcHJlZiwgcFsxOl0pKQorICAgICAgICBmLndyaXRlKHBbMTpdICsgJy4qJykKKyAgICAgICAgZi53cml0ZSgnPC9hPjwvYj4lc1xuJyAlIHBhZ2VsaW5raWNvbikKICAgICAgICAgY3JlYXRlcGFnZShwWzE6XSwgdHJlZSwgcCkKICAgICAgICAgcmV0dXJuCiAKQEAgLTE3OCw2NyArMTgyLDY0IEBACiAgICAgICAgIGtsLnNvcnQoKQogICAgICAgICBpZiBpbmRlbnQgPiAwOgogICAgICAgICAgICAgIyBDcmVhdGUgYSBzdWItbGlzdAotICAgICAgICAgICAgZi53cml0ZSgnPExJPicrcFsxOl0rJ1xuPFVMPicpCisgICAgICAgICAgICBmLndyaXRlKCc8bGk+JXNcbjx1bD4nICUgcFsxOl0pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIENyZWF0ZSBhIG1haW4gbGlzdAotICAgICAgICAgICAgZi53cml0ZSgnPFVMPicpCisgICAgICAgICAgICBmLndyaXRlKCc8dWw+JykKICAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgMQogCiAgICAgZm9yIGkgaW4ga2w6CiAgICAgICAgIGlmIGkgPT0gJy4nOgogICAgICAgICAgICAgIyBPdXRwdXQgYSBuZXdzZ3JvdXAKLSAgICAgICAgICAgIGYud3JpdGUoJzxMST48QSBIUkVGPSJuZXdzOicgKyBwWzE6XSArICciPicrIHBbMTpdICsgJzwvQT4gJykKLSAgICAgICAgICAgIGlmIGRlc2MuaGFzX2tleShwWzE6XSk6Ci0gICAgICAgICAgICAgICAgZi53cml0ZSgnICAgICA8ST4nK2Rlc2NbcFsxOl1dKyc8L0k+XG4nKQorICAgICAgICAgICAgZi53cml0ZSgnPGxpPjxhIGhyZWY9Im5ld3M6JXMiPiVzPC9hPiAnICUgKHBbMTpdLCBwWzE6XSkpCisgICAgICAgICAgICBpZiBwWzE6XSBpbiBkZXNjOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICAgPGk+JXM8L2k+XG4nICUgZGVzY1twWzE6XV0pCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgT3V0cHV0IGEgaGllcmFyY2h5Ci0gICAgICAgICAgICBwcmludHRyZWUoZix0cmVlW2ldLCBpbmRlbnQsIHArJy4nK2kpCisgICAgICAgICAgICBwcmludHRyZWUoZiwgdHJlZVtpXSwgaW5kZW50LCBwKycuJytpKQogCiAgICAgaWYgbCA+IDE6Ci0gICAgICAgIGYud3JpdGUoJ1xuPC9VTD4nKQorICAgICAgICBmLndyaXRlKCdcbjwvdWw+JykKIAogIyBSZWFkaW5nIGRlc2NyaXB0aW9ucyBmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIFRoaXMgcmV0dXJucyBhbiBhcnJheSBtYXBwaW5nIGdyb3VwIG5hbWUgdG8gaXRzIGRlc2NyaXB0aW9uCisjIFRoaXMgcmV0dXJucyBhIGRpY3QgbWFwcGluZyBncm91cCBuYW1lIHRvIGl0cyBkZXNjcmlwdGlvbgogCiBkZWYgcmVhZGRlc2MoZGVzY2ZpbGUpOgogICAgIGdsb2JhbCBkZXNjCi0KICAgICBkZXNjID0ge30KIAogICAgIGlmIGRlc2NmaWxlID09ICcnOgogICAgICAgICByZXR1cm4KIAogICAgIHRyeToKLSAgICAgICAgZCA9IG9wZW4oZGVzY2ZpbGUsICdyJykKLSAgICAgICAgcHJpbnQgJ1JlYWRpbmcgZGVzY3JpcHRpb25zLi4uJwotICAgIGV4Y2VwdCAoSU9FcnJvcik6CisgICAgICAgIHdpdGggb3BlbihkZXNjZmlsZSwgJ3InKSBhcyBkOgorICAgICAgICAgICAgcHJpbnQgJ1JlYWRpbmcgZGVzY3JpcHRpb25zLi4uJworICAgICAgICAgICAgZm9yIGwgaW4gZDoKKyAgICAgICAgICAgICAgICBiaXRzID0gbC5zcGxpdCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBncnAgPSBiaXRzWzBdCisgICAgICAgICAgICAgICAgICAgIGRzYyA9ICcgJy5qb2luKGJpdHNbMTpdKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZHNjKSA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjW2dycF0gPSBkc2MKKyAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICBwcmludCAnRmFpbGVkIHRvIG9wZW4gZGVzY3JpcHRpb24gZmlsZSAnICsgZGVzY2ZpbGUKICAgICAgICAgcmV0dXJuCi0gICAgbCA9IGQucmVhZGxpbmUoKQotICAgIHdoaWxlIGwgIT0gJyc6Ci0gICAgICAgIGJpdHMgPSBzdHJpbmcuc3BsaXQobCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZ3JwID0gYml0c1swXQotICAgICAgICAgICAgZHNjID0gc3RyaW5nLmpvaW4oYml0c1sxOl0pCi0gICAgICAgICAgICBpZiBsZW4oZHNjKT4xOgotICAgICAgICAgICAgICAgIGRlc2NbZ3JwXSA9IGRzYwotICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBsID0gZC5yZWFkbGluZSgpCiAKICMgQ2hlY2sgdGhhdCBvdXB1dCBkaXJlY3RvcnkgZXhpc3RzLCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgYW5kIG9mZmVyIHRvIGNyZWF0ZSBpdCBpZiBub3QKIAogZGVmIGNoZWNrb3BkaXIocGFnZWRpcik6CiAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocGFnZWRpcik6Ci0gICAgICAgIHByaW50ICdEaXJlY3RvcnkgJytwYWdlZGlyKycgZG9lcyBub3QgZXhpc3QuJworICAgICAgICBwcmludCAnRGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0LicgJSBwYWdlZGlyCiAgICAgICAgIHByaW50ICdTaGFsbCBJIGNyZWF0ZSBpdCBmb3IgeW91PyAoeS9uKScKICAgICAgICAgaWYgc3lzLnN0ZGluLnJlYWRsaW5lKClbMF0gPT0gJ3knOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKHBhZ2VkaXIsMDc3NykKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihwYWdlZGlyLCAwNzc3KQogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHByaW50ICdTb3JyeSAtIGZhaWxlZCEnCiAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKQEAgLTI1OCwyMyArMjU5LDIxIEBACiAgICAgICAgIHByaW50ICdJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlIHJ1biBuZXdzbGlzdCwgdGhlbicKICAgICAgICAgcHJpbnQgJ3VzZSB0aGUgLWEgb3B0aW9uIHRvIGNyZWF0ZSBpdC4nCiAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgdHJlZWRhdGUgPSAnJTAyZCUwMmQlMDJkJyAlICh0cmVldGltZVswXSAlIDEwMCAsdHJlZXRpbWVbMV0sIHRyZWV0aW1lWzJdKQorICAgIHRyZWVkYXRlID0gJyUwMmQlMDJkJTAyZCcgJSAodHJlZXRpbWVbMF0gJSAxMDAsIHRyZWV0aW1lWzFdLCB0cmVldGltZVsyXSkKICAgICB0cnk6Ci0gICAgICAgIGR1bXAgPSBvcGVuKHRyZWVmaWxlLCdyJykKLSAgICAgICAgdHJlZSA9IG1hcnNoYWwubG9hZChkdW1wKQotICAgICAgICBkdW1wLmNsb3NlKCkKLSAgICBleGNlcHQgKElPRXJyb3IpOgorICAgICAgICB3aXRoIG9wZW4odHJlZWZpbGUsICdyYicpIGFzIGR1bXA6CisgICAgICAgICAgICB0cmVlID0gbWFyc2hhbC5sb2FkKGR1bXApCisgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgIHByaW50ICdDYW5ub3Qgb3BlbiBsb2NhbCBncm91cCBsaXN0ICcgKyB0cmVlZmlsZQogICAgIHJldHVybiAodHJlZSwgdHJlZWRhdGUpCiAKIGRlZiB3cml0ZWxvY2FsbGlzdCh0cmVlZmlsZSwgdHJlZSk6CiAgICAgdHJ5OgotICAgICAgICBkdW1wID0gb3Blbih0cmVlZmlsZSwndycpCi0gICAgICAgIGdyb3VwcyA9IG1hcnNoYWwuZHVtcCh0cmVlLGR1bXApCi0gICAgICAgIGR1bXAuY2xvc2UoKQotICAgICAgICBwcmludCAnU2F2ZWQgbGlzdCB0byAnK3RyZWVmaWxlKydcbicKKyAgICAgICAgd2l0aCBvcGVuKHRyZWVmaWxlLCAnd2InKSBhcyBkdW1wOgorICAgICAgICAgICAgZ3JvdXBzID0gbWFyc2hhbC5kdW1wKHRyZWUsIGR1bXApCisgICAgICAgIHByaW50ICdTYXZlZCBsaXN0IHRvICVzXG4nICUgdHJlZWZpbGUKICAgICBleGNlcHQ6Ci0gICAgICAgIHByaW50ICdTb3JyeSAtIGZhaWxlZCB0byB3cml0ZSB0byBsb2NhbCBncm91cCBjYWNoZSAnK3RyZWVmaWxlCisgICAgICAgIHByaW50ICdTb3JyeSAtIGZhaWxlZCB0byB3cml0ZSB0byBsb2NhbCBncm91cCBjYWNoZScsIHRyZWVmaWxlCiAgICAgICAgIHByaW50ICdEb2VzIGl0IChvciBpdHMgZGlyZWN0b3J5KSBoYXZlIHRoZSBjb3JyZWN0IHBlcm1pc3Npb25zPycKICAgICAgICAgc3lzLmV4aXQoMSkKIApAQCAtMjgyLDE2ICsyODEsMTYgQEAKIAogZGVmIGdldGFsbGdyb3VwcyhzZXJ2ZXIpOgogICAgIHByaW50ICdHZXR0aW5nIGxpc3Qgb2YgYWxsIGdyb3Vwcy4uLicKLSAgICB0cmVlZGF0ZT0nMDEwMTAxJworICAgIHRyZWVkYXRlID0gJzAxMDEwMScKICAgICBpbmZvID0gc2VydmVyLmxpc3QoKVsxXQogICAgIGdyb3VwcyA9IFtdCiAgICAgcHJpbnQgJ1Byb2Nlc3NpbmcuLi4nCiAgICAgaWYgc2tpcGVtcHR5OgogICAgICAgICBwcmludCAnXG5JZ25vcmluZyBmb2xsb3dpbmcgZW1wdHkgZ3JvdXBzOicKICAgICBmb3IgaSBpbiBpbmZvOgotICAgICAgICBncnBuYW1lID0gc3RyaW5nLnNwbGl0KGlbMF0pWzBdCi0gICAgICAgIGlmIHNraXBlbXB0eSBhbmQgc3RyaW5nLmF0b2koaVsxXSkgPCBzdHJpbmcuYXRvaShpWzJdKToKLSAgICAgICAgICAgIHByaW50IGdycG5hbWUrJyAnLAorICAgICAgICBncnBuYW1lID0gaVswXS5zcGxpdCgpWzBdCisgICAgICAgIGlmIHNraXBlbXB0eSBhbmQgaW50KGlbMV0pIDwgaW50KGlbMl0pOgorICAgICAgICAgICAgcHJpbnQgZ3JwbmFtZSArICcgJywKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGdyb3Vwcy5hcHBlbmQoZ3JwbmFtZSkKICAgICBwcmludCAnXG4nCkBAIC0zMDIsMTMgKzMwMSwxMyBAQAogIyBSZXR1cm4gbGlzdCBvZiBuZXcgZ3JvdXBzIG9uIHNlcnZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBkZWYgZ2V0bmV3Z3JvdXBzKHNlcnZlciwgdHJlZWRhdGUpOgotICAgIHByaW50ICdHZXR0aW5nIGxpc3Qgb2YgbmV3IGdyb3VwcyBzaW5jZSBzdGFydCBvZiAnK3RyZWVkYXRlKycuLi4nLAotICAgIGluZm8gPSBzZXJ2ZXIubmV3Z3JvdXBzKHRyZWVkYXRlLCcwMDAwMDEnKVsxXQorICAgIHByaW50ICdHZXR0aW5nIGxpc3Qgb2YgbmV3IGdyb3VwcyBzaW5jZSBzdGFydCBvZiAlcy4uLicgJSB0cmVlZGF0ZSwKKyAgICBpbmZvID0gc2VydmVyLm5ld2dyb3Vwcyh0cmVlZGF0ZSwgJzAwMDAwMScpWzFdCiAgICAgcHJpbnQgJ2dvdCAlZC4nICUgbGVuKGluZm8pCiAgICAgcHJpbnQgJ1Byb2Nlc3NpbmcuLi4nLAogICAgIGdyb3VwcyA9IFtdCiAgICAgZm9yIGkgaW4gaW5mbzoKLSAgICAgICAgZ3JwbmFtZSA9IHN0cmluZy5zcGxpdChpKVswXQorICAgICAgICBncnBuYW1lID0gaS5zcGxpdCgpWzBdCiAgICAgICAgIGdyb3Vwcy5hcHBlbmQoZ3JwbmFtZSkKICAgICBwcmludCAnRG9uZScKICAgICByZXR1cm4gZ3JvdXBzCkBAIC0zMTYsMjggKzMxNSwyNSBAQAogIyBOb3cgdGhlIG1haW4gcHJvZ3JhbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBkZWYgbWFpbigpOgotICAgIGdsb2JhbCBkZXNjCi0KLSAgICB0cmVlPXt9CisgICAgdHJlZSA9IHt9CiAKICAgICAjIENoZWNrIHRoYXQgdGhlIG91dHB1dCBkaXJlY3RvcnkgZXhpc3RzCiAgICAgY2hlY2tvcGRpcihwYWdlZGlyKQogCiAgICAgdHJ5OgotICAgICAgICBwcmludCAnQ29ubmVjdGluZyB0byAnK25ld3Nob3N0KycuLi4nCisgICAgICAgIHByaW50ICdDb25uZWN0aW5nIHRvICVzLi4uJyAlIG5ld3Nob3N0CiAgICAgICAgIGlmIHN5cy52ZXJzaW9uWzBdID09ICcwJzoKICAgICAgICAgICAgIHMgPSBOTlRQLmluaXQobmV3c2hvc3QpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzID0gTk5UUChuZXdzaG9zdCkKLSAgICAgICAgY29ubmVjdGVkID0gMQorICAgICAgICBjb25uZWN0ZWQgPSBUcnVlCiAgICAgZXhjZXB0IChubnRwbGliLmVycm9yX3RlbXAsIG5udHBsaWIuZXJyb3JfcGVybSksIHg6CiAgICAgICAgIHByaW50ICdFcnJvciBjb25uZWN0aW5nIHRvIGhvc3Q6JywgeAogICAgICAgICBwcmludCAnSVwnbGwgdHJ5IHRvIHVzZSBqdXN0IHRoZSBsb2NhbCBsaXN0LicKLSAgICAgICAgY29ubmVjdGVkID0gMAorICAgICAgICBjb25uZWN0ZWQgPSBGYWxzZQogCiAgICAgIyBJZiAtYSBpcyBzcGVjaWZpZWQsIHJlYWQgdGhlIGZ1bGwgbGlzdCBvZiBncm91cHMgZnJvbSBzZXJ2ZXIKICAgICBpZiBjb25uZWN0ZWQgYW5kIGxlbihzeXMuYXJndikgPiAxIGFuZCBzeXMuYXJndlsxXSA9PSAnLWEnOgotCiAgICAgICAgIGdyb3VwcyA9IGdldGFsbGdyb3VwcyhzKQogCiAgICAgIyBPdGhlcndpc2UganVzdCByZWFkIHRoZSBsb2NhbCBmaWxlIGFuZCB0aGVuIGFkZApkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL3BpLnB5IGIvRGVtby9zY3JpcHRzL3BpLnB5CmluZGV4IGU2ZTNiODIuLjA3NDBjZDAgMTAwNzU1Ci0tLSBhL0RlbW8vc2NyaXB0cy9waS5weQorKysgYi9EZW1vL3NjcmlwdHMvcGkucHkKQEAgLTExLDIxICsxMSwyMCBAQAogaW1wb3J0IHN5cwogCiBkZWYgbWFpbigpOgotICAgIGssIGEsIGIsIGExLCBiMSA9IDJMLCA0TCwgMUwsIDEyTCwgNEwKLSAgICB3aGlsZSAxOgorICAgIGssIGEsIGIsIGExLCBiMSA9IDIsIDQsIDEsIDEyLCA0CisgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgIyBOZXh0IGFwcHJveGltYXRpb24KLSAgICAgICAgcCwgcSwgayA9IGsqaywgMkwqaysxTCwgaysxTAorICAgICAgICBwLCBxLCBrID0gayprLCAyKmsrMSwgaysxCiAgICAgICAgIGEsIGIsIGExLCBiMSA9IGExLCBiMSwgcCphK3EqYTEsIHAqYitxKmIxCiAgICAgICAgICMgUHJpbnQgY29tbW9uIGRpZ2l0cwogICAgICAgICBkLCBkMSA9IGEvL2IsIGExLy9iMQogICAgICAgICB3aGlsZSBkID09IGQxOgogICAgICAgICAgICAgb3V0cHV0KGQpCi0gICAgICAgICAgICBhLCBhMSA9IDEwTCooYSViKSwgMTBMKihhMSViMSkKKyAgICAgICAgICAgIGEsIGExID0gMTAqKGElYiksIDEwKihhMSViMSkKICAgICAgICAgICAgIGQsIGQxID0gYS8vYiwgYTEvL2IxCiAKIGRlZiBvdXRwdXQoZCk6CiAgICAgIyBVc2Ugd3JpdGUoKSB0byBhdm9pZCBzcGFjZXMgYmV0d2VlbiB0aGUgZGlnaXRzCi0gICAgIyBVc2Ugc3RyKCkgdG8gYXZvaWQgdGhlICdMJwogICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyKGQpKQogICAgICMgRmx1c2ggc28gdGhlIG91dHB1dCBpcyBzZWVuIGltbWVkaWF0ZWx5CiAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvcHAucHkgYi9EZW1vL3NjcmlwdHMvcHAucHkKaW5kZXggMDQ5MWZhOS4uZWZiZTVjZiAxMDA3NTUKLS0tIGEvRGVtby9zY3JpcHRzL3BwLnB5CisrKyBiL0RlbW8vc2NyaXB0cy9wcC5weQpAQCAtMjIsNyArMjIsNiBAQAogIyAtIGV4Y2VwdCBmb3IgLW4vLXAsIHJ1biBkaXJlY3RseSBmcm9tIHRoZSBmaWxlIGlmIGF0IGFsbCBwb3NzaWJsZQogCiBpbXBvcnQgc3lzCi1pbXBvcnQgc3RyaW5nCiBpbXBvcnQgZ2V0b3B0CiAKIEZTID0gJycKQEAgLTM2LDcgKzM1LDcgQEAKIHRyeToKICAgICBvcHRsaXN0LCBBUkdTID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdhY2RlOkY6bnAnKQogZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgotICAgIHN5cy5zdGRlcnIud3JpdGUoc3lzLmFyZ3ZbMF0gKyAnOiAnICsgbXNnICsgJ1xuJykKKyAgICBzeXMuc3RkZXJyLndyaXRlKCclczogJXNcbicgJSAoc3lzLmFyZ3ZbMF0sIG1zZykpCiAgICAgc3lzLmV4aXQoMikKIAogZm9yIG9wdGlvbiwgb3B0YXJnIGluIG9wdGxpc3Q6CkBAIC00Nyw3ICs0Niw3IEBACiAgICAgZWxpZiBvcHRpb24gPT0gJy1kJzoKICAgICAgICAgREZMQUcgPSAxCiAgICAgZWxpZiBvcHRpb24gPT0gJy1lJzoKLSAgICAgICAgZm9yIGxpbmUgaW4gc3RyaW5nLnNwbGl0ZmllbGRzKG9wdGFyZywgJ1xuJyk6CisgICAgICAgIGZvciBsaW5lIGluIG9wdGFyZy5zcGxpdCgnXG4nKToKICAgICAgICAgICAgIFNDUklQVC5hcHBlbmQobGluZSkKICAgICBlbGlmIG9wdGlvbiA9PSAnLUYnOgogICAgICAgICBGUyA9IG9wdGFyZwpAQCAtODEsMzEgKzgwLDMxIEBACiBlbGlmIE5GTEFHOgogICAgICMgTm90ZSB0aGF0IGl0IGlzIG9uIHB1cnBvc2UgdGhhdCBBRkxBRyBhbmQgUEZMQUcgYXJlCiAgICAgIyB0ZXN0ZWQgZHluYW1pY2FsbHkgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AKLSAgICBwcm9sb2d1ZSA9IFsgXAotICAgICAgICAgICAgJ0xJTkVDT1VOVCA9IDAnLCBcCi0gICAgICAgICAgICAnZm9yIEZJTEUgaW4gQVJHUzonLCBcCi0gICAgICAgICAgICAnICAgXHRpZiBGSUxFID09IFwnLVwnOicsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0RlAgPSBzeXMuc3RkaW4nLCBcCi0gICAgICAgICAgICAnICAgXHRlbHNlOicsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0RlAgPSBvcGVuKEZJTEUsIFwnclwnKScsIFwKLSAgICAgICAgICAgICcgICBcdExJTkVOTyA9IDAnLCBcCi0gICAgICAgICAgICAnICAgXHR3aGlsZSAxOicsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0TElORSA9IEZQLnJlYWRsaW5lKCknLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdGlmIG5vdCBMSU5FOiBicmVhaycsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0TElORU5PID0gTElORU5PICsgMScsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0TElORUNPVU5UID0gTElORUNPVU5UICsgMScsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0TCA9IExJTkVbOi0xXScsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0YWZsYWcgPSBBRkxBRycsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0aWYgYWZsYWc6JywgXAotICAgICAgICAgICAgJyAgIFx0ICAgXHQgICBcdGlmIEZTOiBGID0gc3RyaW5nLnNwbGl0ZmllbGRzKEwsIEZTKScsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0ICAgXHRlbHNlOiBGID0gc3RyaW5nLnNwbGl0KEwpJyBcCisgICAgcHJvbG9ndWUgPSBbCisgICAgICAgICAgICAnTElORUNPVU5UID0gMCcsCisgICAgICAgICAgICAnZm9yIEZJTEUgaW4gQVJHUzonLAorICAgICAgICAgICAgJyAgIFx0aWYgRklMRSA9PSBcJy1cJzonLAorICAgICAgICAgICAgJyAgIFx0ICAgXHRGUCA9IHN5cy5zdGRpbicsCisgICAgICAgICAgICAnICAgXHRlbHNlOicsCisgICAgICAgICAgICAnICAgXHQgICBcdEZQID0gb3BlbihGSUxFLCBcJ3JcJyknLAorICAgICAgICAgICAgJyAgIFx0TElORU5PID0gMCcsCisgICAgICAgICAgICAnICAgXHR3aGlsZSAxOicsCisgICAgICAgICAgICAnICAgXHQgICBcdExJTkUgPSBGUC5yZWFkbGluZSgpJywKKyAgICAgICAgICAgICcgICBcdCAgIFx0aWYgbm90IExJTkU6IGJyZWFrJywKKyAgICAgICAgICAgICcgICBcdCAgIFx0TElORU5PID0gTElORU5PICsgMScsCisgICAgICAgICAgICAnICAgXHQgICBcdExJTkVDT1VOVCA9IExJTkVDT1VOVCArIDEnLAorICAgICAgICAgICAgJyAgIFx0ICAgXHRMID0gTElORVs6LTFdJywKKyAgICAgICAgICAgICcgICBcdCAgIFx0YWZsYWcgPSBBRkxBRycsCisgICAgICAgICAgICAnICAgXHQgICBcdGlmIGFmbGFnOicsCisgICAgICAgICAgICAnICAgXHQgICBcdCAgIFx0aWYgRlM6IEYgPSBMLnNwbGl0KEZTKScsCisgICAgICAgICAgICAnICAgXHQgICBcdCAgIFx0ZWxzZTogRiA9IEwuc3BsaXQoKScKICAgICAgICAgICAgIF0KLSAgICBlcGlsb2d1ZSA9IFsgXAotICAgICAgICAgICAgJyAgIFx0ICAgXHRpZiBub3QgUEZMQUc6IGNvbnRpbnVlJywgXAotICAgICAgICAgICAgJyAgIFx0ICAgXHRpZiBhZmxhZzonLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdCAgIFx0aWYgRlM6IHByaW50IHN0cmluZy5qb2luZmllbGRzKEYsIEZTKScsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0ICAgXHRlbHNlOiBwcmludCBzdHJpbmcuam9pbihGKScsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0ZWxzZTogcHJpbnQgTCcsIFwKKyAgICBlcGlsb2d1ZSA9IFsKKyAgICAgICAgICAgICcgICBcdCAgIFx0aWYgbm90IFBGTEFHOiBjb250aW51ZScsCisgICAgICAgICAgICAnICAgXHQgICBcdGlmIGFmbGFnOicsCisgICAgICAgICAgICAnICAgXHQgICBcdCAgIFx0aWYgRlM6IHByaW50IEZTLmpvaW4oRiknLAorICAgICAgICAgICAgJyAgIFx0ICAgXHQgICBcdGVsc2U6IHByaW50IFwnIFwnLmpvaW4oRiknLAorICAgICAgICAgICAgJyAgIFx0ICAgXHRlbHNlOiBwcmludCBMJywKICAgICAgICAgICAgIF0KIGVsc2U6CiAgICAgcHJvbG9ndWUgPSBbJ2lmIDE6J10KQEAgLTExNCwxMCArMTEzLDEwIEBACiAjIE5vdGUgdGhhdCB3ZSBpbmRlbnQgdXNpbmcgdGFicyBvbmx5LCBzbyB0aGF0IGFueSBpbmRlbnRhdGlvbiBzdHlsZQogIyB1c2VkIGluICdjb21tYW5kJyB3aWxsIGNvbWUgb3V0IHJpZ2h0IGFmdGVyIHJlLWluZGVudGF0aW9uLgogCi1wcm9ncmFtID0gc3RyaW5nLmpvaW5maWVsZHMocHJvbG9ndWUsICdcbicpICsgJ1xuJworcHJvZ3JhbSA9ICdcbicuam9pbihwcm9sb2d1ZSkgKyAnXG4nCiBmb3IgbGluZSBpbiBTQ1JJUFQ6Ci0gICAgcHJvZ3JhbSA9IHByb2dyYW0gKyAoJyAgIFx0ICAgXHQnICsgbGluZSArICdcbicpCi1wcm9ncmFtID0gcHJvZ3JhbSArIChzdHJpbmcuam9pbmZpZWxkcyhlcGlsb2d1ZSwgJ1xuJykgKyAnXG4nKQorICAgIHByb2dyYW0gKz0gJyAgIFx0ICAgXHQnICsgbGluZSArICdcbicKK3Byb2dyYW0gKz0gJ1xuJy5qb2luKGVwaWxvZ3VlKSArICdcbicKIAogaW1wb3J0IHRlbXBmaWxlCiBmcCA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCkBAIC0xMjUsNiArMTI0LDYgQEAKIGZwLmZsdXNoKCkKIGlmIERGTEFHOgogICAgIGltcG9ydCBwZGIKLSAgICBwZGIucnVuKCdleGVjZmlsZSglciknICUgKHRmbiwpKQorICAgIHBkYi5ydW4oJ2V4ZWNmaWxlKCVyKScgJSAoZnAubmFtZSwpKQogZWxzZToKLSAgICBleGVjZmlsZSh0Zm4pCisgICAgZXhlY2ZpbGUoZnAubmFtZSkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9wcmltZXMucHkgYi9EZW1vL3NjcmlwdHMvcHJpbWVzLnB5CmluZGV4IDU5MzVhM2MuLjJiZjViYTIgMTAwNzU1Ci0tLSBhL0RlbW8vc2NyaXB0cy9wcmltZXMucHkKKysrIGIvRGVtby9zY3JpcHRzL3ByaW1lcy5weQpAQCAtMiwyNiArMiwyOSBAQAogCiAjIFByaW50IHByaW1lIG51bWJlcnMgaW4gYSBnaXZlbiByYW5nZQogCi1kZWYgbWFpbigpOgotICAgIGltcG9ydCBzeXMKLSAgICBtaW4sIG1heCA9IDIsIDB4N2ZmZmZmZmYKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIG1pbiA9IGludChldmFsKHN5cy5hcmd2WzFdKSkKLSAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgotICAgICAgICAgICAgbWF4ID0gaW50KGV2YWwoc3lzLmFyZ3ZbMl0pKQotICAgIHByaW1lcyhtaW4sIG1heCkKLQogZGVmIHByaW1lcyhtaW4sIG1heCk6Ci0gICAgaWYgMiA+PSBtaW46IHByaW50IDIKKyAgICBpZiBtYXggPj0gMiA+PSBtaW46CisgICAgICAgIHByaW50IDIKICAgICBwcmltZXMgPSBbMl0KICAgICBpID0gMwogICAgIHdoaWxlIGkgPD0gbWF4OgogICAgICAgICBmb3IgcCBpbiBwcmltZXM6Ci0gICAgICAgICAgICBpZiBpJXAgPT0gMCBvciBwKnAgPiBpOiBicmVhawotICAgICAgICBpZiBpJXAgPD4gMDoKKyAgICAgICAgICAgIGlmIGkgJSBwID09IDAgb3IgcCpwID4gaToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBpICUgcCAhPSAwOgogICAgICAgICAgICAgcHJpbWVzLmFwcGVuZChpKQotICAgICAgICAgICAgaWYgaSA+PSBtaW46IHByaW50IGkKLSAgICAgICAgaSA9IGkrMgorICAgICAgICAgICAgaWYgaSA+PSBtaW46CisgICAgICAgICAgICAgICAgcHJpbnQgaQorICAgICAgICBpICs9IDIKKworZGVmIG1haW4oKToKKyAgICBpbXBvcnQgc3lzCisgICAgbWluLCBtYXggPSAyLCAweDdmZmZmZmZmCisgICAgaWYgc3lzLmFyZ3ZbMTpdOgorICAgICAgICBtaW4gPSBpbnQoc3lzLmFyZ3ZbMV0pCisgICAgICAgIGlmIHN5cy5hcmd2WzI6XToKKyAgICAgICAgICAgIG1heCA9IGludChzeXMuYXJndlsyXSkKKyAgICBwcmltZXMobWluLCBtYXgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvcXVlZW5zLnB5IGIvRGVtby9zY3JpcHRzL3F1ZWVucy5weQppbmRleCA3NDc1NmJlLi44NjZhN2IyIDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvcXVlZW5zLnB5CisrKyBiL0RlbW8vc2NyaXB0cy9xdWVlbnMucHkKQEAgLTE5LDggKzE5LDggQEAKIAogICAgIGRlZiByZXNldChzZWxmKToKICAgICAgICAgbiA9IHNlbGYubgotICAgICAgICBzZWxmLnkgPSBbTm9uZV0qbiAgICAgICAgICAgICAgICMgV2hlcmUgaXMgdGhlIHF1ZWVuIGluIGNvbHVtbiB4Ci0gICAgICAgIHNlbGYucm93ID0gWzBdKm4gICAgICAgICAgICAgICAgIyBJcyByb3dbeV0gc2FmZT8KKyAgICAgICAgc2VsZi55ID0gW05vbmVdICogbiAgICAgICAgICAgICAjIFdoZXJlIGlzIHRoZSBxdWVlbiBpbiBjb2x1bW4geAorICAgICAgICBzZWxmLnJvdyA9IFswXSAqIG4gICAgICAgICAgICAgICMgSXMgcm93W3ldIHNhZmU/CiAgICAgICAgIHNlbGYudXAgPSBbMF0gKiAoMipuLTEpICAgICAgICAgIyBJcyB1cHdhcmQgZGlhZ29uYWxbeC15XSBzYWZlPwogICAgICAgICBzZWxmLmRvd24gPSBbMF0gKiAoMipuLTEpICAgICAgICMgSXMgZG93bndhcmQgZGlhZ29uYWxbeCt5XSBzYWZlPwogICAgICAgICBzZWxmLm5mb3VuZCA9IDAgICAgICAgICAgICAgICAgICMgSW5zdHJ1bWVudGF0aW9uCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIHNlbGYudXBbeC15XSA9IDAKICAgICAgICAgc2VsZi5kb3duW3greV0gPSAwCiAKLSAgICBzaWxlbnQgPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHNldCwgY291bnQgc29sdXRpb25zIG9ubHkKKyAgICBzaWxlbnQgPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHRydWUsIGNvdW50IHNvbHV0aW9ucyBvbmx5CiAKICAgICBkZWYgZGlzcGxheShzZWxmKToKICAgICAgICAgc2VsZi5uZm91bmQgPSBzZWxmLm5mb3VuZCArIDEKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9zY3JpcHQucHkgYi9EZW1vL3NjcmlwdHMvc2NyaXB0LnB5CmluZGV4IDZlYWE3YWUuLmE4YWNhNGEgMTAwNzU1Ci0tLSBhL0RlbW8vc2NyaXB0cy9zY3JpcHQucHkKKysrIGIvRGVtby9zY3JpcHRzL3NjcmlwdC5weQpAQCAtMSw0ICsxLDUgQEAKICMhIC91c3IvYmluL2VudiBweXRob24KKwogIyBzY3JpcHQucHkgLS0gTWFrZSB0eXBlc2NyaXB0IG9mIHRlcm1pbmFsIHNlc3Npb24uCiAjIFVzYWdlOgogIyAgICAgICAtYSAgICAgIEFwcGVuZCB0byB0eXBlc2NyaXB0LgpAQCAtNiwxMiArNywxMiBAQAogIyBBdXRob3I6IFN0ZWVuIEx1bWhvbHQuCiAKIAotaW1wb3J0IG9zLCB0aW1lLCBzeXMKK2ltcG9ydCBvcywgdGltZSwgc3lzLCBnZXRvcHQKIGltcG9ydCBwdHkKIAogZGVmIHJlYWQoZmQpOgogICAgIGRhdGEgPSBvcy5yZWFkKGZkLCAxMDI0KQotICAgIGZpbGUud3JpdGUoZGF0YSkKKyAgICBzY3JpcHQud3JpdGUoZGF0YSkKICAgICByZXR1cm4gZGF0YQogCiBzaGVsbCA9ICdzaCcKQEAgLTE5LDE1ICsyMCwyMyBAQAogbW9kZSA9ICd3JwogaWYgb3MuZW52aXJvbi5oYXNfa2V5KCdTSEVMTCcpOgogICAgIHNoZWxsID0gb3MuZW52aXJvblsnU0hFTEwnXQotaWYgJy1hJyBpbiBzeXMuYXJndjoKLSAgICBtb2RlID0gJ2EnCi1pZiAnLXAnIGluIHN5cy5hcmd2OgotICAgIHNoZWxsID0gJ3B5dGhvbicKIAotZmlsZSA9IG9wZW4oZmlsZW5hbWUsIG1vZGUpCit0cnk6CisgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnYXAnKQorZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIHByaW50ICclczogJXMnICUgKHN5cy5hcmd2WzBdLCBtc2cpCisgICAgc3lzLmV4aXQoMikKKworZm9yIG8sIGEgaW4gb3B0czoKKyAgICBpZiBvID09ICctYSc6CisgICAgICAgIG1vZGUgPSAnYScKKyAgICBlbGlmIG8gPT0gJy1wJzoKKyAgICAgICAgc2hlbGwgPSAncHl0aG9uJworCitzY3JpcHQgPSBvcGVuKGZpbGVuYW1lLCBtb2RlKQogCiBzeXMuc3Rkb3V0LndyaXRlKCdTY3JpcHQgc3RhcnRlZCwgZmlsZSBpcyAlc1xuJyAlIGZpbGVuYW1lKQotZmlsZS53cml0ZSgnU2NyaXB0IHN0YXJ0ZWQgb24gJXNcbicgJSB0aW1lLmN0aW1lKHRpbWUudGltZSgpKSkKK3NjcmlwdC53cml0ZSgnU2NyaXB0IHN0YXJ0ZWQgb24gJXNcbicgJSB0aW1lLmN0aW1lKHRpbWUudGltZSgpKSkKIHB0eS5zcGF3bihzaGVsbCwgcmVhZCkKLWZpbGUud3JpdGUoJ1NjcmlwdCBkb25lIG9uICVzXG4nICUgdGltZS5jdGltZSh0aW1lLnRpbWUoKSkpCitzY3JpcHQud3JpdGUoJ1NjcmlwdCBkb25lIG9uICVzXG4nICUgdGltZS5jdGltZSh0aW1lLnRpbWUoKSkpCiBzeXMuc3Rkb3V0LndyaXRlKCdTY3JpcHQgZG9uZSwgZmlsZSBpcyAlc1xuJyAlIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL3VuYmlydGhkYXkucHkgYi9EZW1vL3NjcmlwdHMvdW5iaXJ0aGRheS5weQppbmRleCA4ZWQ5MDg0Li4wNTZhZDQ0IDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvdW5iaXJ0aGRheS5weQorKysgYi9EZW1vL3NjcmlwdHMvdW5iaXJ0aGRheS5weQpAQCAtMTAsMjkgKzEwLDI2IEBACiBpbXBvcnQgY2FsZW5kYXIKIAogZGVmIG1haW4oKToKLSAgICAjIE5vdGUgdGhhdCB0aGUgcmFuZ2UgY2hlY2tzIGJlbG93IGFsc28gY2hlY2sgZm9yIGJhZCB0eXBlcywKLSAgICAjIGUuZy4gMy4xNCBvciAoKS4gIEhvd2V2ZXIgc3ludGFjdGljYWxseSBpbnZhbGlkIHJlcGxpZXMKLSAgICAjIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLgogICAgIGlmIHN5cy5hcmd2WzE6XToKICAgICAgICAgeWVhciA9IGludChzeXMuYXJndlsxXSkKICAgICBlbHNlOgogICAgICAgICB5ZWFyID0gaW50KHJhd19pbnB1dCgnSW4gd2hpY2ggeWVhciB3ZXJlIHlvdSBib3JuPyAnKSkKLSAgICBpZiAwPD15ZWFyPDEwMDoKKyAgICBpZiAwIDw9IHllYXIgPCAxMDA6CiAgICAgICAgIHByaW50ICJJJ2xsIGFzc3VtZSB0aGF0IGJ5IiwgeWVhciwKICAgICAgICAgeWVhciA9IHllYXIgKyAxOTAwCiAgICAgICAgIHByaW50ICd5b3UgbWVhbicsIHllYXIsICdhbmQgbm90IHRoZSBlYXJseSBDaHJpc3RpYW4gZXJhJwotICAgIGVsaWYgbm90ICgxODUwPD15ZWFyPD0yMDAyKToKKyAgICBlbGlmIG5vdCAoMTg1MCA8PSB5ZWFyIDw9IHRpbWUubG9jYWx0aW1lKClbMF0pOgogICAgICAgICBwcmludCAiSXQncyBoYXJkIHRvIGJlbGlldmUgeW91IHdlcmUgYm9ybiBpbiIsIHllYXIKICAgICAgICAgcmV0dXJuCi0gICAgIworCiAgICAgaWYgc3lzLmFyZ3ZbMjpdOgogICAgICAgICBtb250aCA9IGludChzeXMuYXJndlsyXSkKICAgICBlbHNlOgogICAgICAgICBtb250aCA9IGludChyYXdfaW5wdXQoJ0FuZCBpbiB3aGljaCBtb250aD8gKDEtMTIpICcpKQotICAgIGlmIG5vdCAoMTw9bW9udGg8PTEyKToKKyAgICBpZiBub3QgKDEgPD0gbW9udGggPD0gMTIpOgogICAgICAgICBwcmludCAnVGhlcmUgaXMgbm8gbW9udGggbnVtYmVyZWQnLCBtb250aAogICAgICAgICByZXR1cm4KLSAgICAjCisKICAgICBpZiBzeXMuYXJndlszOl06CiAgICAgICAgIGRheSA9IGludChzeXMuYXJndlszXSkKICAgICBlbHNlOgpAQCAtNDEsMzYgKzM4LDM2IEBACiAgICAgICAgIG1heGRheSA9IDI5CiAgICAgZWxzZToKICAgICAgICAgbWF4ZGF5ID0gY2FsZW5kYXIubWRheXNbbW9udGhdCi0gICAgaWYgbm90ICgxPD1kYXk8PW1heGRheSk6CisgICAgaWYgbm90ICgxIDw9IGRheSA8PSBtYXhkYXkpOgogICAgICAgICBwcmludCAnVGhlcmUgYXJlIG5vJywgZGF5LCAnZGF5cyBpbiB0aGF0IG1vbnRoIScKICAgICAgICAgcmV0dXJuCi0gICAgIworCiAgICAgYmRheXR1cGxlID0gKHllYXIsIG1vbnRoLCBkYXkpCiAgICAgYmRheWRhdGUgPSBta2RhdGUoYmRheXR1cGxlKQogICAgIHByaW50ICdZb3Ugd2VyZSBib3JuIG9uJywgZm9ybWF0KGJkYXl0dXBsZSkKLSAgICAjCisKICAgICB0b2RheXR1cGxlID0gdGltZS5sb2NhbHRpbWUoKVs6M10KICAgICB0b2RheWRhdGUgPSBta2RhdGUodG9kYXl0dXBsZSkKICAgICBwcmludCAnVG9kYXkgaXMnLCBmb3JtYXQodG9kYXl0dXBsZSkKLSAgICAjCisKICAgICBpZiBiZGF5dHVwbGUgPiB0b2RheXR1cGxlOgogICAgICAgICBwcmludCAnWW91IGFyZSBhIHRpbWUgdHJhdmVsZXIuICBHbyBiYWNrIHRvIHRoZSBmdXR1cmUhJwogICAgICAgICByZXR1cm4KLSAgICAjCisKICAgICBpZiBiZGF5dHVwbGUgPT0gdG9kYXl0dXBsZToKICAgICAgICAgcHJpbnQgJ1lvdSB3ZXJlIGJvcm4gdG9kYXkuICBIYXZlIGEgbmljZSBsaWZlIScKICAgICAgICAgcmV0dXJuCi0gICAgIworCiAgICAgZGF5cyA9IHRvZGF5ZGF0ZSAtIGJkYXlkYXRlCiAgICAgcHJpbnQgJ1lvdSBoYXZlIGxpdmVkJywgZGF5cywgJ2RheXMnCi0gICAgIworCiAgICAgYWdlID0gMAogICAgIGZvciB5IGluIHJhbmdlKHllYXIsIHRvZGF5dHVwbGVbMF0gKyAxKToKICAgICAgICAgaWYgYmRheXR1cGxlIDwgKHksIG1vbnRoLCBkYXkpIDw9IHRvZGF5dHVwbGU6CiAgICAgICAgICAgICBhZ2UgPSBhZ2UgKyAxCi0gICAgIworCiAgICAgcHJpbnQgJ1lvdSBhcmUnLCBhZ2UsICd5ZWFycyBvbGQnCi0gICAgIworCiAgICAgaWYgdG9kYXl0dXBsZVsxOl0gPT0gYmRheXR1cGxlWzE6XToKICAgICAgICAgcHJpbnQgJ0NvbmdyYXR1bGF0aW9ucyEgIFRvZGF5IGlzIHlvdXInLCBudGgoYWdlKSwgJ2JpcnRoZGF5JwogICAgICAgICBwcmludCAnWWVzdGVyZGF5IHdhcyB5b3VyJywKQEAgLTg4LDEwICs4NSwxMCBAQAogICAgIHJldHVybiAnJWR0aCcgJSBuCiAKIGRlZiBta2RhdGUoKHllYXIsIG1vbnRoLCBkYXkpKToKLSAgICAjIEphbnVhcmkgMXN0LCBpbiAwIEEuRC4gaXMgYXJiaXRyYXJpbHkgZGVmaW5lZCB0byBiZSBkYXkgMSwKKyAgICAjIEphbnVhcnkgMXN0LCBpbiAwIEEuRC4gaXMgYXJiaXRyYXJpbHkgZGVmaW5lZCB0byBiZSBkYXkgMSwKICAgICAjIGV2ZW4gdGhvdWdoIHRoYXQgZGF5IG5ldmVyIGFjdHVhbGx5IGV4aXN0ZWQgYW5kIHRoZSBjYWxlbmRhcgogICAgICMgd2FzIGRpZmZlcmVudCB0aGVuLi4uCi0gICAgZGF5cyA9IHllYXIqMzY1ICAgICAgICAgICAgICAgICAjIHllYXJzLCByb3VnaGx5CisgICAgZGF5cyA9IHllYXIqMzY1ICAgICAgICAgICAgICAgICAgIyB5ZWFycywgcm91Z2hseQogICAgIGRheXMgPSBkYXlzICsgKHllYXIrMykvLzQgICAgICAgICMgcGx1cyBsZWFwIHllYXJzLCByb3VnaGx5CiAgICAgZGF5cyA9IGRheXMgLSAoeWVhcis5OSkvLzEwMCAgICAgIyBtaW51cyBub24tbGVhcCB5ZWFycyBldmVyeSBjZW50dXJ5CiAgICAgZGF5cyA9IGRheXMgKyAoeWVhciszOTkpLy80MDAgICAgIyBwbHVzIGxlYXAgeWVhcnMgZXZlcnkgNCBjZW50aXJ1ZXMKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy93aC5weSBiL0RlbW8vc2NyaXB0cy93aC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjliMDllZi4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvd2gucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSMgVGhpcyBpcyBoZXJlIHNvIEkgY2FuIHVzZSAnd2gnIGluc3RlYWQgb2YgJ3doaWNoJyBpbiAnfi9iaW4vZ2VuZXJpY19weXRob24nCi1pbXBvcnQgd2hpY2gKZGlmZiAtLWdpdCBhL0RlbW8vc29ja2V0cy9SRUFETUUgYi9EZW1vL3NvY2tldHMvUkVBRE1FCmluZGV4IGY1NDA1YWIuLmViYTdjMjMgMTAwNjQ0Ci0tLSBhL0RlbW8vc29ja2V0cy9SRUFETUUKKysrIGIvRGVtby9zb2NrZXRzL1JFQURNRQpAQCAtNSwxNyArNSwxMCBAQAogZmluZ2VyLnB5CQlDbGllbnQgZm9yIHRoZSAnZmluZ2VyJyBwcm90b2NvbC4KIGZ0cC5weQkJCUEgdmVyeSBzaW1wbGUgZnRwIGNsaWVudC4KIGdvcGhlci5weQkJQSBzaW1wbGUgZ29waGVyIGNsaWVudC4KK21jYXN0LnB5CQlJUHY0L3Y2IG11bHRpY2FzdCBleGFtcGxlCiByYWRpby5weQkJUmVjZWl2ZSB0aW1lIGJyb2FkY2FzdHMgZnJvbSBicm9hZGNhc3QucHkuCiB0ZWxuZXQucHkJCUNsaWVudCBmb3IgdGhlICd0ZWxuZXQnIHByb3RvY29sLgogdGhyb3VnaHB1dC5weQkJQ2xpZW50IGFuZCBzZXJ2ZXIgdG8gbWVhc3VyZSBUQ1AgdGhyb3VnaHB1dC4KIHVuaXhjbGllbnQucHkJCVVuaXggc29ja2V0IGV4YW1wbGUsIGNsaWVudCBzaWRlCiB1bml4c2VydmVyLnB5CQlVbml4IHNvY2tldCBleGFtcGxlLCBzZXJ2ZXIgc2lkZQogdWRwZWNoby5weQkJQ2xpZW50IGFuZCBzZXJ2ZXIgZm9yIHRoZSBVRFAgZWNobyBwcm90b2NvbC4KLQotVGhlIGZvbGxvd2luZyBmaWxlIGlzIG9ubHkgcmVsZXZhbnQgb24gU0dJIG1hY2hpbmVzIChvciBvdGhlciBzeXN0ZW1zCi10aGF0IHN1cHBvcnQgbXVsdGljYXN0KToKLQotbWNhc3QucHkJCUEgUHl0aG9uIHRyYW5zbGF0aW9uIG9mCi0JCQkvdXNyL3Blb3BsZS80RGdpZnRzL2V4YW1wbGVzL25ldHdvcmsvbWNhc3QuYwotCQkJKE5vdGUgdGhhdCBJTi5weSBpcyBpbiAuLi8uLi9saWIvc2dpLikKLQpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL2Jyb2FkY2FzdC5weSBiL0RlbW8vc29ja2V0cy9icm9hZGNhc3QucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL2Z0cC5weSBiL0RlbW8vc29ja2V0cy9mdHAucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL21jYXN0LnB5IGIvRGVtby9zb2NrZXRzL21jYXN0LnB5CmluZGV4IDFhYmQzMDUuLjE4NzM5NTkgMTAwNzU1Ci0tLSBhL0RlbW8vc29ja2V0cy9tY2FzdC5weQorKysgYi9EZW1vL3NvY2tldHMvbWNhc3QucHkKQEAgLTEsOTMgKzEsODAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIwogIyBTZW5kL3JlY2VpdmUgVURQIG11bHRpY2FzdCBwYWNrZXRzLgogIyBSZXF1aXJlcyB0aGF0IHlvdXIgT1Mga2VybmVsIHN1cHBvcnRzIElQIG11bHRpY2FzdC4KLSMgVGhpcyBpcyBidWlsdC1pbiBvbiBTR0ksIHN0aWxsIG9wdGlvbmFsIGZvciBtb3N0IG90aGVyIHZlbmRvcnMuCiAjCiAjIFVzYWdlOgotIyAgIG1jYXN0IC1zIChzZW5kZXIpCi0jICAgbWNhc3QgLWIgKHNlbmRlciwgdXNpbmcgYnJvYWRjYXN0IGluc3RlYWQgbXVsdGljYXN0KQotIyAgIG1jYXN0ICAgIChyZWNlaXZlcnMpCisjICAgbWNhc3QgLXMgKHNlbmRlciwgSVB2NCkKKyMgICBtY2FzdCAtcyAtNiAoc2VuZGVyLCBJUHY2KQorIyAgIG1jYXN0ICAgIChyZWNlaXZlcnMsIElQdjQpCisjICAgbWNhc3QgIC02ICAocmVjZWl2ZXJzLCBJUHY2KQogCiBNWVBPUlQgPSA4MTIzCi1NWUdST1VQID0gJzIyNS4wLjAuMjUwJworTVlHUk9VUF80ID0gJzIyNS4wLjAuMjUwJworTVlHUk9VUF82ID0gJ2ZmMTU6NzA3OTo3NDY4OjZmNmU6NjQ2NTo2ZDZmOjZkNjM6NjE3MycKK01ZVFRMID0gMSAjIEluY3JlYXNlIHRvIHJlYWNoIG90aGVyIG5ldHdvcmtzCiAKLWltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgc3RydWN0Ci1mcm9tIHNvY2tldCBpbXBvcnQgKgoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cwogCi0KLSMgTWFpbiBwcm9ncmFtCiBkZWYgbWFpbigpOgotICAgIGZsYWdzID0gc3lzLmFyZ3ZbMTpdCi0gICAgIwotICAgIGlmIGZsYWdzOgotICAgICAgICBzZW5kZXIoZmxhZ3NbMF0pCisgICAgZ3JvdXAgPSBNWUdST1VQXzYgaWYgIi02IiBpbiBzeXMuYXJndlsxOl0gZWxzZSBNWUdST1VQXzQKKworICAgIGlmICItcyIgaW4gc3lzLmFyZ3ZbMTpdOgorICAgICAgICBzZW5kZXIoZ3JvdXApCiAgICAgZWxzZToKLSAgICAgICAgcmVjZWl2ZXIoKQorICAgICAgICByZWNlaXZlcihncm91cCkKIAogCi0jIFNlbmRlciBzdWJyb3V0aW5lIChvbmx5IG9uZSBwZXIgbG9jYWwgYXJlYSBuZXR3b3JrKQotZGVmIHNlbmRlcihmbGFnKToKLSAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0pCi0gICAgaWYgZmxhZyA9PSAnLWInOgotICAgICAgICBzLnNldHNvY2tvcHQoU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULCAxKQotICAgICAgICBteWdyb3VwID0gJzxicm9hZGNhc3Q+JworZGVmIHNlbmRlcihncm91cCk6CisgICAgYWRkcmluZm8gPSBzb2NrZXQuZ2V0YWRkcmluZm8oZ3JvdXAsIE5vbmUpWzBdCisKKyAgICBzID0gc29ja2V0LnNvY2tldChhZGRyaW5mb1swXSwgc29ja2V0LlNPQ0tfREdSQU0pCisKKyAgICAjIFNldCBUaW1lLXRvLWxpdmUgKG9wdGlvbmFsKQorICAgIHR0bF9iaW4gPSBzdHJ1Y3QucGFjaygnQGknLCBNWVRUTCkKKyAgICBpZiBhZGRyaW5mb1swXSA9PSBzb2NrZXQuQUZfSU5FVDogIyBJUHY0CisgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUCwgc29ja2V0LklQX01VTFRJQ0FTVF9UVEwsIHR0bF9iaW4pCiAgICAgZWxzZToKLSAgICAgICAgbXlncm91cCA9IE1ZR1JPVVAKLSAgICAgICAgdHRsID0gc3RydWN0LnBhY2soJ2InLCAxKSAgICAgICAgICAgICAgICMgVGltZS10by1saXZlCi0gICAgICAgIHMuc2V0c29ja29wdChJUFBST1RPX0lQLCBJUF9NVUxUSUNBU1RfVFRMLCB0dGwpCi0gICAgd2hpbGUgMToKKyAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCB0dGxfYmluKQorCisgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgZGF0YSA9IHJlcHIodGltZS50aW1lKCkpCi0jIyAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyAoMTQwMCAtIGxlbihkYXRhKSkgKiAnXDAnCi0gICAgICAgIHMuc2VuZHRvKGRhdGEsIChteWdyb3VwLCBNWVBPUlQpKQorICAgICAgICBzLnNlbmR0byhkYXRhICsgJ1wwJywgKGFkZHJpbmZvWzRdWzBdLCBNWVBPUlQpKQogICAgICAgICB0aW1lLnNsZWVwKDEpCiAKIAotIyBSZWNlaXZlciBzdWJyb3V0aW5lIChhcyBtYW55IGFzIHlvdSBsaWtlKQotZGVmIHJlY2VpdmVyKCk6Ci0gICAgIyBPcGVuIGFuZCBpbml0aWFsaXplIHRoZSBzb2NrZXQKLSAgICBzID0gb3Blbm1jYXN0c29jayhNWUdST1VQLCBNWVBPUlQpCi0gICAgIwotICAgICMgTG9vcCwgcHJpbnRpbmcgYW55IGRhdGEgd2UgcmVjZWl2ZQotICAgIHdoaWxlIDE6Ci0gICAgICAgIGRhdGEsIHNlbmRlciA9IHMucmVjdmZyb20oMTUwMCkKLSAgICAgICAgd2hpbGUgZGF0YVstMTpdID09ICdcMCc6IGRhdGEgPSBkYXRhWzotMV0gIyBTdHJpcCB0cmFpbGluZyBcMCdzCi0gICAgICAgIHByaW50IHNlbmRlciwgJzonLCByZXByKGRhdGEpCitkZWYgcmVjZWl2ZXIoZ3JvdXApOgorICAgICMgTG9vayB1cCBtdWx0aWNhc3QgZ3JvdXAgYWRkcmVzcyBpbiBuYW1lIHNlcnZlciBhbmQgZmluZCBvdXQgSVAgdmVyc2lvbgorICAgIGFkZHJpbmZvID0gc29ja2V0LmdldGFkZHJpbmZvKGdyb3VwLCBOb25lKVswXQogCi0KLSMgT3BlbiBhIFVEUCBzb2NrZXQsIGJpbmQgaXQgdG8gYSBwb3J0IGFuZCBzZWxlY3QgYSBtdWx0aWNhc3QgZ3JvdXAKLWRlZiBvcGVubWNhc3Rzb2NrKGdyb3VwLCBwb3J0KToKLSAgICAjIEltcG9ydCBtb2R1bGVzIHVzZWQgb25seSBoZXJlCi0gICAgaW1wb3J0IHN0cmluZwotICAgIGltcG9ydCBzdHJ1Y3QKLSAgICAjCiAgICAgIyBDcmVhdGUgYSBzb2NrZXQKLSAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0pCi0gICAgIworICAgIHMgPSBzb2NrZXQuc29ja2V0KGFkZHJpbmZvWzBdLCBzb2NrZXQuU09DS19ER1JBTSkKKwogICAgICMgQWxsb3cgbXVsdGlwbGUgY29waWVzIG9mIHRoaXMgcHJvZ3JhbSBvbiBvbmUgbWFjaGluZQogICAgICMgKG5vdCBzdHJpY3RseSBuZWVkZWQpCi0gICAgcy5zZXRzb2Nrb3B0KFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgMSkKLSAgICAjCisgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorCiAgICAgIyBCaW5kIGl0IHRvIHRoZSBwb3J0Ci0gICAgcy5iaW5kKCgnJywgcG9ydCkpCi0gICAgIwotICAgICMgTG9vayB1cCBtdWx0aWNhc3QgZ3JvdXAgYWRkcmVzcyBpbiBuYW1lIHNlcnZlcgotICAgICMgKGRvZXNuJ3QgaHVydCBpZiBpdCBpcyBhbHJlYWR5IGluIGRkZC5kZGQuZGRkLmRkZCBmb3JtYXQpCi0gICAgZ3JvdXAgPSBnZXRob3N0YnluYW1lKGdyb3VwKQotICAgICMKLSAgICAjIENvbnN0cnVjdCBiaW5hcnkgZ3JvdXAgYWRkcmVzcwotICAgIGJ5dGVzID0gbWFwKGludCwgc3RyaW5nLnNwbGl0KGdyb3VwLCAiLiIpKQotICAgIGdycGFkZHIgPSAwCi0gICAgZm9yIGJ5dGUgaW4gYnl0ZXM6IGdycGFkZHIgPSAoZ3JwYWRkciA8PCA4KSB8IGJ5dGUKLSAgICAjCi0gICAgIyBDb25zdHJ1Y3Qgc3RydWN0IG1yZXEgZnJvbSBncnBhZGRyIGFuZCBpZmFkZHIKLSAgICBpZmFkZHIgPSBJTkFERFJfQU5ZCi0gICAgbXJlcSA9IHN0cnVjdC5wYWNrKCdsbCcsIGh0b25sKGdycGFkZHIpLCBodG9ubChpZmFkZHIpKQotICAgICMKLSAgICAjIEFkZCBncm91cCBtZW1iZXJzaGlwCi0gICAgcy5zZXRzb2Nrb3B0KElQUFJPVE9fSVAsIElQX0FERF9NRU1CRVJTSElQLCBtcmVxKQotICAgICMKLSAgICByZXR1cm4gcworICAgIHMuYmluZCgoJycsIE1ZUE9SVCkpCisKKyAgICBncm91cF9iaW4gPSBzb2NrZXQuaW5ldF9wdG9uKGFkZHJpbmZvWzBdLCBhZGRyaW5mb1s0XVswXSkKKyAgICAjIEpvaW4gZ3JvdXAKKyAgICBpZiBhZGRyaW5mb1swXSA9PSBzb2NrZXQuQUZfSU5FVDogIyBJUHY0CisgICAgICAgIG1yZXEgPSBncm91cF9iaW4gKyBzdHJ1Y3QucGFjaygnPUknLCBzb2NrZXQuSU5BRERSX0FOWSkKKyAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQLCBzb2NrZXQuSVBfQUREX01FTUJFUlNISVAsIG1yZXEpCisgICAgZWxzZToKKyAgICAgICAgbXJlcSA9IGdyb3VwX2JpbiArIHN0cnVjdC5wYWNrKCdASScsIDApCisgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9KT0lOX0dST1VQLCBtcmVxKQorCisgICAgIyBMb29wLCBwcmludGluZyBhbnkgZGF0YSB3ZSByZWNlaXZlCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgZGF0YSwgc2VuZGVyID0gcy5yZWN2ZnJvbSgxNTAwKQorICAgICAgICB3aGlsZSBkYXRhWy0xOl0gPT0gJ1wwJzogZGF0YSA9IGRhdGFbOi0xXSAjIFN0cmlwIHRyYWlsaW5nIFwwJ3MKKyAgICAgICAgcHJpbnQgKHN0cihzZW5kZXIpICsgJyAgJyArIHJlcHIoZGF0YSkpCiAKIAotbWFpbigpCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL3JhZGlvLnB5IGIvRGVtby9zb2NrZXRzL3JhZGlvLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvQmFsbG9vbi5weSBiL0RlbW8vdGl4L3NhbXBsZXMvQmFsbG9vbi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL0J0bkJveC5weSBiL0RlbW8vdGl4L3NhbXBsZXMvQnRuQm94LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvQ21wSW1nLnB5IGIvRGVtby90aXgvc2FtcGxlcy9DbXBJbWcucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9Db21ib0JveC5weSBiL0RlbW8vdGl4L3NhbXBsZXMvQ29tYm9Cb3gucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9Db250cm9sLnB5IGIvRGVtby90aXgvc2FtcGxlcy9Db250cm9sLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvRGlyTGlzdC5weSBiL0RlbW8vdGl4L3NhbXBsZXMvRGlyTGlzdC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL0RpclRyZWUucHkgYi9EZW1vL3RpeC9zYW1wbGVzL0RpclRyZWUucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9Ob3RlQm9vay5weSBiL0RlbW8vdGl4L3NhbXBsZXMvTm90ZUJvb2sucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9PcHRNZW51LnB5IGIvRGVtby90aXgvc2FtcGxlcy9PcHRNZW51LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvUGFuZWRXaW4ucHkgYi9EZW1vL3RpeC9zYW1wbGVzL1BhbmVkV2luLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvUG9wTWVudS5weSBiL0RlbW8vdGl4L3NhbXBsZXMvUG9wTWVudS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL1NITGlzdDEucHkgYi9EZW1vL3RpeC9zYW1wbGVzL1NITGlzdDEucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9TSExpc3QyLnB5IGIvRGVtby90aXgvc2FtcGxlcy9TSExpc3QyLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvVHJlZS5weSBiL0RlbW8vdGl4L3NhbXBsZXMvVHJlZS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvUkVBRE1FIGIvRGVtby90a2ludGVyL1JFQURNRQppbmRleCBmMjQ1ZDE2Li5jOWYxOGRmIDEwMDY0NAotLS0gYS9EZW1vL3RraW50ZXIvUkVBRE1FCisrKyBiL0RlbW8vdGtpbnRlci9SRUFETUUKQEAgLTgsMyArOCw0IEBACiAKIGd1aWRvCQlteSBvcmlnaW5hbCBleGFtcGxlIHNldCAoZmFpcmx5IHJhbmRvbSBjb2xsZWN0aW9uKQogbWF0dAkJTWF0dCBDb253YXkncyBleGFtcGxlcywgdG8gZ28gd2l0aCBoaXMgbGlmZXNhdmVyIGRvY3VtZW50Cit0dGsgICAgICAgICBFeGFtcGxlcyB1c2luZyB0aGUgdHRrIG1vZHVsZQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL0F0dHJEaWFsb2cucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vQXR0ckRpYWxvZy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vTWFuUGFnZS5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9NYW5QYWdlLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9TaGVsbFdpbmRvdy5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9TaGVsbFdpbmRvdy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vaGFub2kucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vaGFub2kucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL2hlbGxvLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL2hlbGxvLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9pbWFnZWRyYXcucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vaW1hZ2VkcmF3LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9pbWFnZXZpZXcucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vaW1hZ2V2aWV3LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9saXN0dHJlZS5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9saXN0dHJlZS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vd2lzaC5weSBiL0RlbW8vdGtpbnRlci9ndWlkby93aXNoLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvY29tYm9fdGhlbWVzLnB5IGIvRGVtby90a2ludGVyL3R0ay9jb21ib190aGVtZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMzE2NAotLS0gL2Rldi9udWxsCisrKyBiL0RlbW8vdGtpbnRlci90dGsvY29tYm9fdGhlbWVzLnB5CkBAIC0wLDAgKzEsNDYgQEAKKyIiIlR0ayBUaGVtZSBTZWxlY3Rvci4KKworQWx0aG91Z2ggaXQgaXMgYSB0aGVtZSBzZWxlY3RvciwgeW91IHdvbid0IG5vdGljZSBtYW55IGNoYW5nZXMgc2luY2UKK3RoZXJlIGlzIG9ubHkgYSBjb21ib2JveCBhbmQgYSBmcmFtZSBhcm91bmQuCisiIiIKK2ltcG9ydCB0dGsKKworY2xhc3MgQXBwKHR0ay5GcmFtZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICB0dGsuRnJhbWUuX19pbml0X18oc2VsZikKKworICAgICAgICBzZWxmLnN0eWxlID0gdHRrLlN0eWxlKCkKKyAgICAgICAgc2VsZi5fc2V0dXBfd2lkZ2V0cygpCisKKyAgICBkZWYgX2NoYW5nZV90aGVtZShzZWxmLCBldmVudCk6CisgICAgICAgIGlmIGV2ZW50LndpZGdldC5jdXJyZW50KCk6ICMgdmFsdWUgIzAgaXMgbm90IGEgdGhlbWUKKyAgICAgICAgICAgIG5ld3RoZW1lID0gZXZlbnQud2lkZ2V0LmdldCgpCisgICAgICAgICAgICAjIGNoYW5nZSB0byB0aGUgbmV3IHRoZW1lIGFuZCByZWZyZXNoIGFsbCB0aGUgd2lkZ2V0cworICAgICAgICAgICAgc2VsZi5zdHlsZS50aGVtZV91c2UobmV3dGhlbWUpCisKKyAgICBkZWYgX3NldHVwX3dpZGdldHMoc2VsZik6CisgICAgICAgIHRoZW1lcyA9IGxpc3Qoc2VsZi5zdHlsZS50aGVtZV9uYW1lcygpKQorICAgICAgICB0aGVtZXMuaW5zZXJ0KDAsICJQaWNrIGEgdGhlbWUiKQorICAgICAgICAjIENyZWF0ZSBhIHJlYWRvbmx5IENvbWJvYm94IHdoaWNoIHdpbGwgZGlzcGxheSA0IHZhbHVlcyBhdCBtYXgsCisgICAgICAgICMgd2hpY2ggd2lsbCBjYXVzZSBpdCB0byBjcmVhdGUgYSBzY3JvbGxiYXIgaWYgdGhlcmUgYXJlIG1vcmUKKyAgICAgICAgIyB0aGFuIDQgdmFsdWVzIGluIHRvdGFsLgorICAgICAgICB0aGVtZXNfY29tYm8gPSB0dGsuQ29tYm9ib3goc2VsZiwgdmFsdWVzPXRoZW1lcywgc3RhdGU9InJlYWRvbmx5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD00KQorICAgICAgICB0aGVtZXNfY29tYm8uc2V0KHRoZW1lc1swXSkgIyBzZXRzIHRoZSBjb21ib2JveCB2YWx1ZSB0byAiUGljayBhIHRoZW1lIgorICAgICAgICAjIENvbWJvYm94IHdpZGdldCBnZW5lcmF0ZXMgYSA8PENvbWJvYm94U2VsZWN0ZWQ+PiB2aXJ0dWFsIGV2ZW50CisgICAgICAgICMgd2hlbiB0aGUgdXNlciBzZWxlY3RzIGFuIGVsZW1lbnQuIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIGFmdGVyCisgICAgICAgICMgdGhlIGxpc3Rib3ggaXMgdW5wb3N0ZWQgKGFmdGVyIHlvdSBzZWxlY3QgYW4gaXRlbSwgdGhlIGNvbWJvYm94J3MKKyAgICAgICAgIyBsaXN0Ym94IGRpc2FwcGVhcnMsIHRoZW4gaXQgaXMgc2FpZCB0aGF0IGxpc3Rib3ggaXMgbm93IHVucG9zdGVkKS4KKyAgICAgICAgdGhlbWVzX2NvbWJvLmJpbmQoIjw8Q29tYm9ib3hTZWxlY3RlZD4+Iiwgc2VsZi5fY2hhbmdlX3RoZW1lKQorICAgICAgICB0aGVtZXNfY29tYm8ucGFjayhmaWxsPSd4JykKKworICAgICAgICBzZWxmLnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD0xKQorCisKK2RlZiBtYWluKCk6CisgICAgYXBwID0gQXBwKCkKKyAgICBhcHAubWFzdGVyLnRpdGxlKCJUdGsgQ29tYm9ib3giKQorICAgIGFwcC5tYWlubG9vcCgpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL2RpcmJyb3dzZXIucHkgYi9EZW1vL3RraW50ZXIvdHRrL2RpcmJyb3dzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRmNzliZAotLS0gL2Rldi9udWxsCisrKyBiL0RlbW8vdGtpbnRlci90dGsvZGlyYnJvd3Nlci5weQpAQCAtMCwwICsxLDkzIEBACisiIiJBIGRpcmVjdG9yeSBicm93c2VyIHVzaW5nIFR0ayBUcmVldmlldy4KKworQmFzZWQgb24gdGhlIGRlbW8gZm91bmQgaW4gVGsgOC41IGxpYnJhcnkvZGVtb3MvYnJvd3NlCisiIiIKK2ltcG9ydCBvcworaW1wb3J0IGdsb2IKK2ltcG9ydCBUa2ludGVyCitpbXBvcnQgdHRrCisKK2RlZiBwb3B1bGF0ZV90cmVlKHRyZWUsIG5vZGUpOgorICAgIGlmIHRyZWUuc2V0KG5vZGUsICJ0eXBlIikgIT0gJ2RpcmVjdG9yeSc6CisgICAgICAgIHJldHVybgorCisgICAgcGF0aCA9IHRyZWUuc2V0KG5vZGUsICJmdWxscGF0aCIpCisgICAgdHJlZS5kZWxldGUoKnRyZWUuZ2V0X2NoaWxkcmVuKG5vZGUpKQorCisgICAgcGFyZW50ID0gdHJlZS5wYXJlbnQobm9kZSkKKyAgICBzcGVjaWFsX2RpcnMgPSBbXSBpZiBwYXJlbnQgZWxzZSBnbG9iLmdsb2IoJy4nKSArIGdsb2IuZ2xvYignLi4nKQorCisgICAgZm9yIHAgaW4gc3BlY2lhbF9kaXJzICsgb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgcHR5cGUgPSBOb25lCisgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4ocGF0aCwgcCkucmVwbGFjZSgnXFwnLCAnLycpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocCk6IHB0eXBlID0gImRpcmVjdG9yeSIKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShwKTogcHR5cGUgPSAiZmlsZSIKKworICAgICAgICBmbmFtZSA9IG9zLnBhdGguc3BsaXQocClbMV0KKyAgICAgICAgaWQgPSB0cmVlLmluc2VydChub2RlLCAiZW5kIiwgdGV4dD1mbmFtZSwgdmFsdWVzPVtwLCBwdHlwZV0pCisKKyAgICAgICAgaWYgcHR5cGUgPT0gJ2RpcmVjdG9yeSc6CisgICAgICAgICAgICBpZiBmbmFtZSBub3QgaW4gKCcuJywgJy4uJyk6CisgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQoaWQsIDAsIHRleHQ9ImR1bW15IikKKyAgICAgICAgICAgICAgICB0cmVlLml0ZW0oaWQsIHRleHQ9Zm5hbWUpCisgICAgICAgIGVsaWYgcHR5cGUgPT0gJ2ZpbGUnOgorICAgICAgICAgICAgc2l6ZSA9IG9zLnN0YXQocCkuc3Rfc2l6ZQorICAgICAgICAgICAgdHJlZS5zZXQoaWQsICJzaXplIiwgIiVkIGJ5dGVzIiAlIHNpemUpCisKKworZGVmIHBvcHVsYXRlX3Jvb3RzKHRyZWUpOgorICAgIGRpciA9IG9zLnBhdGguYWJzcGF0aCgnLicpLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgIG5vZGUgPSB0cmVlLmluc2VydCgnJywgJ2VuZCcsIHRleHQ9ZGlyLCB2YWx1ZXM9W2RpciwgImRpcmVjdG9yeSJdKQorICAgIHBvcHVsYXRlX3RyZWUodHJlZSwgbm9kZSkKKworZGVmIHVwZGF0ZV90cmVlKGV2ZW50KToKKyAgICB0cmVlID0gZXZlbnQud2lkZ2V0CisgICAgcG9wdWxhdGVfdHJlZSh0cmVlLCB0cmVlLmZvY3VzKCkpCisKK2RlZiBjaGFuZ2VfZGlyKGV2ZW50KToKKyAgICB0cmVlID0gZXZlbnQud2lkZ2V0CisgICAgbm9kZSA9IHRyZWUuZm9jdXMoKQorICAgIGlmIHRyZWUucGFyZW50KG5vZGUpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKHRyZWUuc2V0KG5vZGUsICJmdWxscGF0aCIpKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgb3MuY2hkaXIocGF0aCkKKyAgICAgICAgICAgIHRyZWUuZGVsZXRlKHRyZWUuZ2V0X2NoaWxkcmVuKCcnKSkKKyAgICAgICAgICAgIHBvcHVsYXRlX3Jvb3RzKHRyZWUpCisKK2RlZiBhdXRvc2Nyb2xsKHNiYXIsIGZpcnN0LCBsYXN0KToKKyAgICAiIiJIaWRlIGFuZCBzaG93IHNjcm9sbGJhciBhcyBuZWVkZWQuIiIiCisgICAgZmlyc3QsIGxhc3QgPSBmbG9hdChmaXJzdCksIGZsb2F0KGxhc3QpCisgICAgaWYgZmlyc3QgPD0gMCBhbmQgbGFzdCA+PSAxOgorICAgICAgICBzYmFyLmdyaWRfcmVtb3ZlKCkKKyAgICBlbHNlOgorICAgICAgICBzYmFyLmdyaWQoKQorICAgIHNiYXIuc2V0KGZpcnN0LCBsYXN0KQorCityb290ID0gVGtpbnRlci5UaygpCisKK3ZzYiA9IHR0ay5TY3JvbGxiYXIob3JpZW50PSJ2ZXJ0aWNhbCIpCitoc2IgPSB0dGsuU2Nyb2xsYmFyKG9yaWVudD0iaG9yaXpvbnRhbCIpCisKK3RyZWUgPSB0dGsuVHJlZXZpZXcoY29sdW1ucz0oImZ1bGxwYXRoIiwgInR5cGUiLCAic2l6ZSIpLAorICAgIGRpc3BsYXljb2x1bW5zPSJzaXplIiwgeXNjcm9sbGNvbW1hbmQ9bGFtYmRhIGYsIGw6IGF1dG9zY3JvbGwodnNiLCBmLCBsKSwKKyAgICB4c2Nyb2xsY29tbWFuZD1sYW1iZGEgZiwgbDphdXRvc2Nyb2xsKGhzYiwgZiwgbCkpCisKK3ZzYlsnY29tbWFuZCddID0gdHJlZS55dmlldworaHNiWydjb21tYW5kJ10gPSB0cmVlLnh2aWV3CisKK3RyZWUuaGVhZGluZygiIzAiLCB0ZXh0PSJEaXJlY3RvcnkgU3RydWN0dXJlIiwgYW5jaG9yPSd3JykKK3RyZWUuaGVhZGluZygic2l6ZSIsIHRleHQ9IkZpbGUgU2l6ZSIsIGFuY2hvcj0ndycpCit0cmVlLmNvbHVtbigic2l6ZSIsIHN0cmV0Y2g9MCwgd2lkdGg9MTAwKQorCitwb3B1bGF0ZV9yb290cyh0cmVlKQordHJlZS5iaW5kKCc8PFRyZWV2aWV3T3Blbj4+JywgdXBkYXRlX3RyZWUpCit0cmVlLmJpbmQoJzxEb3VibGUtQnV0dG9uLTE+JywgY2hhbmdlX2RpcikKKworIyBBcnJhbmdlIHRoZSB0cmVlIGFuZCBpdHMgc2Nyb2xsYmFycyBpbiB0aGUgdG9wbGV2ZWwKK3RyZWUuZ3JpZChjb2x1bW49MCwgcm93PTAsIHN0aWNreT0nbnN3ZScpCit2c2IuZ3JpZChjb2x1bW49MSwgcm93PTAsIHN0aWNreT0nbnMnKQoraHNiLmdyaWQoY29sdW1uPTAsIHJvdz0xLCBzdGlja3k9J2V3JykKK3Jvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgd2VpZ2h0PTEpCityb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQorCityb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvaW1nL2Nsb3NlLmdpZiBiL0RlbW8vdGtpbnRlci90dGsvaW1nL2Nsb3NlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGNmNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvRGVtby90a2ludGVyL3R0ay9pbWcvY2xvc2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvaW1nL2Nsb3NlX2FjdGl2ZS5naWYgYi9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZV9hY3RpdmUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiN2YzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZV9hY3RpdmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvaW1nL2Nsb3NlX3ByZXNzZWQuZ2lmIGIvRGVtby90a2ludGVyL3R0ay9pbWcvY2xvc2VfcHJlc3NlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxNjk1NAotLS0gL2Rldi9udWxsCisrKyBiL0RlbW8vdGtpbnRlci90dGsvaW1nL2Nsb3NlX3ByZXNzZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvbGlzdGJveF9zY3JvbGxjbWQucHkgYi9EZW1vL3RraW50ZXIvdHRrL2xpc3Rib3hfc2Nyb2xsY21kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYTU2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL2xpc3Rib3hfc2Nyb2xsY21kLnB5CkBAIC0wLDAgKzEsMzcgQEAKKyIiIlNhbXBsZSB0YWtlbiBmcm9tOiBodHRwOi8vd3d3LnRrZG9jcy5jb20vdHV0b3JpYWwvbW9yZXdpZGdldHMuaHRtbCBhbmQKK2NvbnZlcnRlZCB0byBQeXRob24sIG1haW5seSB0byBkZW1vbnN0cmF0ZSB4c2Nyb2xsY29tbWFuZCBvcHRpb24uCisKK2dyaWQgW3RrOjpsaXN0Ym94IC5sIC15c2Nyb2xsY29tbWFuZCAiLnMgc2V0IiAtaGVpZ2h0IDVdIC1jb2x1bW4gMCAtcm93IDAgLXN0aWNreSBud2VzCitncmlkIFt0dGs6OnNjcm9sbGJhciAucyAtY29tbWFuZCAiLmwgeXZpZXciIC1vcmllbnQgdmVydGljYWxdIC1jb2x1bW4gMSAtcm93IDAgLXN0aWNreSBucworZ3JpZCBbdHRrOjpsYWJlbCAuc3RhdCAtdGV4dCAiU3RhdHVzIG1lc3NhZ2UgaGVyZSIgLWFuY2hvciB3XSAtY29sdW1uIDAgLXJvdyAxIC1zdGlja3kgd2UKK2dyaWQgW3R0azo6c2l6ZWdyaXAgLnN6XSAtY29sdW1uIDEgLXJvdyAxIC1zdGlja3kgc2UKK2dyaWQgY29sdW1uY29uZmlndXJlIC4gMCAtd2VpZ2h0IDE7IGdyaWQgcm93Y29uZmlndXJlIC4gMCAtd2VpZ2h0IDEKK2ZvciB7c2V0IGkgMH0geyRpPDEwMH0ge2luY3IgaX0geworICAgLmwgaW5zZXJ0IGVuZCAiTGluZSAkaSBvZiAxMDAiCisgICB9CisiIiIKK2ltcG9ydCBUa2ludGVyCitpbXBvcnQgdHRrCisKK3Jvb3QgPSBUa2ludGVyLlRrKCkKKworbCA9IFRraW50ZXIuTGlzdGJveChoZWlnaHQ9NSkKK2wuZ3JpZChjb2x1bW49MCwgcm93PTAsIHN0aWNreT0nbndlcycpCisKK3MgPSB0dGsuU2Nyb2xsYmFyKGNvbW1hbmQ9bC55dmlldywgb3JpZW50PSd2ZXJ0aWNhbCcpCitsWyd5c2Nyb2xsY29tbWFuZCddID0gcy5zZXQKK3MuZ3JpZChjb2x1bW49MSwgcm93PTAsIHN0aWNreT0ibnMiKQorCitzdGF0ID0gdHRrLkxhYmVsKHRleHQ9IlN0YXR1cyBtZXNzYWdlIGhlcmUiLCBhbmNob3I9J3cnKQorc3RhdC5ncmlkKGNvbHVtbj0wLCByb3c9MSwgc3RpY2t5PSd3ZScpCisKK3N6ID0gdHRrLlNpemVncmlwKCkKK3N6LmdyaWQoY29sdW1uPTEsIHJvdz0xLCBzdGlja3k9J3NlJykKKworcm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkKK3Jvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgd2VpZ2h0PTEpCisKK2ZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgbC5pbnNlcnQoJ2VuZCcsICJMaW5lICVkIG9mIDEwMCIgJSBpKQorCityb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvbWFjX3NlYXJjaGVudHJ5LnB5IGIvRGVtby90a2ludGVyL3R0ay9tYWNfc2VhcmNoZW50cnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkNWFhOQotLS0gL2Rldi9udWxsCisrKyBiL0RlbW8vdGtpbnRlci90dGsvbWFjX3NlYXJjaGVudHJ5LnB5CkBAIC0wLDAgKzEsNzggQEAKKyIiIk1hYyBzdHlsZSBzZWFyY2ggd2lkZ2V0CisKK1RyYW5zbGF0ZWQgZnJvbSBUY2wgY29kZSBieSBTY2hlbHRlIEJyb24sIGh0dHA6Ly93aWtpLnRjbC50ay8xODE4OAorIiIiCitpbXBvcnQgVGtpbnRlcgoraW1wb3J0IHR0aworCityb290ID0gVGtpbnRlci5UaygpCisKK2RhdGEgPSAiIiIKK1IwbEdPRGxoS2dBYUFPZm5BRmRaVmxsYldGcGNXVnRkV2x4ZVcxMWZYRjloWG1CaVgyWm5aV2hwWjJscmFHeHVhMjV3YlhKMAorY1hSMmMzVjNkSFo0ZFhoNmQzeCtlMzEvZkg2QWZZU0dnNGVKaG9pS2g0cU1pWXVOaW8yUGpIbVVxbnFWcTN5WHJaR1RrSktVCitrWCthc0pTV2szMmN1SldYbElHY3M1YVlsWDZldVplWmxvT2V0WmlhbDRTZnRwcWJtSVdndDRHaHZZYWh1SUtpdnB1ZG1ZZWkKK3VZT2p2NXllbTRpanVvU2t3SVdsd1ltbHU1NmduWWFtd3AraG5vZW53NHVudmFDaW40aW94SkNudVp5a3JJbXB4Wm1sc29hcQorekkycHY2S2tvWkdvdW9xcXhwcW1zNGVyemFPbG9vNnF3WXVyeDVLcXU1dW50SWlzenFTbW81Q3J3b3lzeUplcXRwT3J2SnlvCit0WkdzdzQydHlwU3N2YWFvcFpLdHhKV3R2cDZxdDQrdXk2ZXBwcE91eFpDdnpLaXFwNXF1dVpTdnhveXgwNm1ycUpXd3g0MnkKKzFKS3h6cG13d2Fxc3FaYXh5STZ6MVpxeHdxdXRxcE96ejQrMDFxeXVxNTZ5dnBpenlwUzAwSm0weTVXMTBacTF6SmEyMHJDeQorcnB1M3pxaXp3Ykd6cjZDM3laeTR6N0swc2FHNHlwMjUwTE8xc3FLNXk1NjYwWis3MHFPN3pLeTR4YUM4MDZTOHpiYTR0YUc5CisxS1c5enE2Nng2Kzd5TGk2dDZTLzFyQzh5cm03dUxPOHhMRzl5N3E4dWJTOXhhYkIyYW5CMDdLK3pMVyt4ck8vemE3Q3pyVEEKK3pyakF5TFhCejc3QnZiYkMwSy9HMkxqRDBibkUwckxLMjhUR3c4Ykl4Y0xMMDd2UDI4SE4yOHJNeWN2T3lyL1QzOERVNGNuUgorMnMvUnp0SFQwTkxVMGNUWTVNclc1TXZYNWRIWDJjM1o1OWJZMWRQYjVOYmIzZExlN052ZDJ0M2YzTlhoNzk3ZzNkM2o1ZG5sCis5T1BsNGVUbTQrTG42dHpvOXVYbjVPYm81ZURwOGVmcDV1SHE4dVhxN2VqcTUrbnI2T1BzOU92dTZ1bnU4TzN2Nit2dzgrN3cKKzdleng5Ty94N3ZEeTcvSHo4Ty8xOS9QMTh2VDM4L0wzK2ZiNDlQZjU5dlg2L2ZqNjkvYjcvdm43K1ByOCtmZjkvL3Y5K3Z6LworKy83Ly9QLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy95SC9DMDVGVkZORFFWQkZNaTR3QXdFQUFBQWgrUVFKWkFEL0FDd0MKK0FBSUFLQUFXQUFBSS9nRC9DUno0YndVR0NnOGVRRmpJc0dIREJ3NGlUTEFRZ3FCRmdpc3VlUENpeUpPcFV5QkRpaFJweXBNaQorTHg4cWFMaElNSXlHRlo1c0FVc21qWnJObXpoeldwTzJESmd0VHlzcWZHRHB4b01iVzhla2VRc1h6dHk0cDFDalJqVVhycHMzCithc0pzdWNsUTR1S0tTYmFtTVIzbjFKelpzMmpSa2gxSHp1eFZYWDh5NENEWUF3cXVhK0RJblZyUndNR0pVMmtEcDMxS1RoeTEKK1hHV0dEbHhoaTFyVFBBVUlDQkJBb0VBZXNvSXpuNlZtNjhNS2dWQVVIZnRtemhPQ0JDdFF3UUtTb0FCZ3pabkpkU01teUlQQQorRmJDb3RkVVFBSWhOYTlCNkRQQ0FHYlphYytTb3dWSU1SVmU0cHdrQTRHcHFEbHd1QUFtTVp4NG5UdGZuZjFtTzVKRUROeTQ2CitNSEpreFFFRGdLQzQ5clBqd0MwYnFHYVp1T29aQUtqQlBFNE5nQXpVdlljV09jMFFaRjkxaW1BbkNESEo1SkZBQUpOMEkyQmEKKzRpUkRVQy9nT0VWTkR3SVVjRUFCQ0FnQUFBVFVUSWdXT01CWVJGcDgwZ2hpQVFJSVZBQUVBd0pJWUkySlpuVWppMFhTWUFZTworTmNzUUE4d3kwaENUd0FBU1hHT2lPTkZjeEF0cFRva1RIem5maUxNTk1Ba2NBTXVFNDNqREMwdkxlR09XZTJSNW80c24xTGdICitHemtXc3ZUUE1nRU9hQTQzM0FnNFRqak11RGtRTU5pMHRaMTJzcVdvSjBIQVRNUE5mZkFaWjZVMHdMQXlxSjYyUkdvTExyaEkKK2FxbWxwendhRUFBaCtRUUpaQUQvQUN3QUFBQUFLZ0FhQUFBSS9nRC9DUnc0MEpFaFFvRUMrZkdqY09IQ01SQWpSa3hEc0tMRgorZjVZY0FjSUQ1ODJaanlCREpobVpaSWpKSVV5U0VESGlCTWhGZ2hydGROblJBZ1NIbXpoejZzVFpRY1NMSVR4K0NIbjVieFNrCitOejVNQ01HeTU1Q2pUVkNqYnVKRXRTclZRM3V3cURCUlF3ckZpNDc2U0hIeG93OHFYY2VtVmJQR3RtMjF0M0NuVGFQMjdKZ3UKK1ZIdHVpSWpCc3VJbVFrUmlpRUVGVE5vMmNPVE1LVjdNdUxFNWNONjhRVU9HU2d3S0cxRXFKcUpEWTgrclp0OFVqeHROdW5UagorY1kzRGdaT1dTNDZLSUZnR2ppSTBaSXNxYXFOTmpXamdZTVVweDhBZGMzdjJhb3NOTUFJMURicXlJOVd5Y09iNElBZ2dRRUFCCitBM2xRQnhldC9URzRjTXBJL3RId1llU2ZJenhNMHVUS05zN1VnQVFyWUwxYWthREE3KzNidWVWcVk0TkpsVWhJY1FMTll4OEUKK0FJUTAxbXdqVFE4RGVOQWRmb3VOQTg0NDBHQkNReEpZM01FR0Q2cDRZODQ0Q1FDQWl6Y1NncE1MQUFsQXVKMDNxT3lRUkJSMworbkVIRUsrQk1HS0l1aTRrRERBQUlQS2lpWXVTWVNNUVFSQ0RDeGhpemlQTVlCZ0RrRWFFYUFHUUEzWStNalVQT0xGb01vVVVoCitjS3hSQzRuZ2VJTGlIOFFrazBjQ0FVelNEWldwemJMRUUxRXdnZ2NZcVdDajJETkFERkRBQVFVZ0lBQUFFRkRESm1QWXFOSkYKK0YxczRjc2NUbUNEakRUamRTUE9IQlFnZ1VBRVFEQWdnZ1RXRFBvWU1Ka0ZvVWRSbWRkeXlqV0xlVUxNTU1jQXNJdzB4NHdrTQorSU1FMWcyNXp5eHBIeEZZVUhteUlnZ3c0SDRvaklUbmZpTE1OTUFrY0FBdWI0QlFqaWhSZERHVEpIbXZjNFFvMXdENkltamU2CitlSUxiaitCUTR3cXU1UTNFQ1NKMEZPS0tNdHY0bUJnMzNQdzR6amJLdUJJSUUxeFlwSWtoZFFRaXlpN090QXVjajZkdDQ4d3UKK290UWhCUmE2VnZTSklSd2hJa290dmdSVHpNVVlaNnh4TWNqNFFrc3BlS0R4eFJoRW1VZklIV2pBZ1FjaWpFRGlzc3VYdkN5egorekg3UThZUVVSeERoVXNuL2JDSW5SM0FFTGZUUVpCUnQ5QkJKa0NHRkZWaE13VE5CbG5CQ1NDR0VJSlFRSUFrbFpNWFdSQkFSCitSUlJXRU5Id1JRRUJBRHM9IiIiCisKKworczEgPSBUa2ludGVyLlBob3RvSW1hZ2UoInNlYXJjaDEiLCBkYXRhPWRhdGEsIGZvcm1hdD0iZ2lmIC1pbmRleCAwIikKK3MyID0gVGtpbnRlci5QaG90b0ltYWdlKCJzZWFyY2gyIiwgZGF0YT1kYXRhLCBmb3JtYXQ9ImdpZiAtaW5kZXggMSIpCisKK3N0eWxlID0gdHRrLlN0eWxlKCkKKworc3R5bGUuZWxlbWVudF9jcmVhdGUoIlNlYXJjaC5maWVsZCIsICJpbWFnZSIsICJzZWFyY2gxIiwKKyAgICAoImZvY3VzIiwgInNlYXJjaDIiKSwgYm9yZGVyPVsyMiwgNywgMTRdLCBzdGlja3k9ImV3IikKKworc3R5bGUubGF5b3V0KCJTZWFyY2guZW50cnkiLCBbCisgICAgKCJTZWFyY2guZmllbGQiLCB7InN0aWNreSI6ICJuc3dlIiwgImJvcmRlciI6IDEsICJjaGlsZHJlbiI6CisgICAgICAgIFsoIkVudHJ5LnBhZGRpbmciLCB7InN0aWNreSI6ICJuc3dlIiwgImNoaWxkcmVuIjoKKyAgICAgICAgICAgIFsoIkVudHJ5LnRleHRhcmVhIiwgeyJzdGlja3kiOiAibnN3ZSJ9KV0KKyAgICAgICAgfSldCisgICAgfSldCispCisKK3N0eWxlLmNvbmZpZ3VyZSgiU2VhcmNoLmVudHJ5IiwgYmFja2dyb3VuZD0iI2IyYjJiMiIpCisKK3Jvb3QuY29uZmlndXJlKGJhY2tncm91bmQ9IiNiMmIyYjIiKQorCitlMSA9IHR0ay5FbnRyeShzdHlsZT0iU2VhcmNoLmVudHJ5Iiwgd2lkdGg9MjApCitlMiA9IHR0ay5FbnRyeShzdHlsZT0iU2VhcmNoLmVudHJ5Iiwgd2lkdGg9MjApCisKK2UxLmdyaWQocGFkeD0xMCwgcGFkeT0xMCkKK2UyLmdyaWQocGFkeD0xMCwgcGFkeT0xMCkKKworcm9vdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL25vdGVib29rX2Nsb3NlYnRuLnB5IGIvRGVtby90a2ludGVyL3R0ay9ub3RlYm9va19jbG9zZWJ0bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDQxNjhkCi0tLSAvZGV2L251bGwKKysrIGIvRGVtby90a2ludGVyL3R0ay9ub3RlYm9va19jbG9zZWJ0bi5weQpAQCAtMCwwICsxLDc4IEBACisiIiJBIFR0ayBOb3RlYm9vayB3aXRoIGNsb3NlIGJ1dHRvbnMuCisKK0Jhc2VkIG9uIGFuIGV4YW1wbGUgYnkgcGF0dGhveXRzLCBodHRwOi8vcGFzdGUudGNsZXJzLnRrLzg5NgorIiIiCitpbXBvcnQgb3MKK2ltcG9ydCBUa2ludGVyCitpbXBvcnQgdHRrCisKK3Jvb3QgPSBUa2ludGVyLlRrKCkKKworaW1nZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdpbWcnKQoraTEgPSBUa2ludGVyLlBob3RvSW1hZ2UoImltZ19jbG9zZSIsIGZpbGU9b3MucGF0aC5qb2luKGltZ2RpciwgJ2Nsb3NlLmdpZicpKQoraTIgPSBUa2ludGVyLlBob3RvSW1hZ2UoImltZ19jbG9zZWFjdGl2ZSIsCisgICAgZmlsZT1vcy5wYXRoLmpvaW4oaW1nZGlyLCAnY2xvc2VfYWN0aXZlLmdpZicpKQoraTMgPSBUa2ludGVyLlBob3RvSW1hZ2UoImltZ19jbG9zZXByZXNzZWQiLAorICAgIGZpbGU9b3MucGF0aC5qb2luKGltZ2RpciwgJ2Nsb3NlX3ByZXNzZWQuZ2lmJykpCisKK3N0eWxlID0gdHRrLlN0eWxlKCkKKworc3R5bGUuZWxlbWVudF9jcmVhdGUoImNsb3NlIiwgImltYWdlIiwgImltZ19jbG9zZSIsCisgICAgKCJhY3RpdmUiLCAicHJlc3NlZCIsICIhZGlzYWJsZWQiLCAiaW1nX2Nsb3NlcHJlc3NlZCIpLAorICAgICgiYWN0aXZlIiwgIiFkaXNhYmxlZCIsICJpbWdfY2xvc2VhY3RpdmUiKSwgYm9yZGVyPTgsIHN0aWNreT0nJykKKworc3R5bGUubGF5b3V0KCJCdXR0b25Ob3RlYm9vayIsIFsoIkJ1dHRvbk5vdGVib29rLmNsaWVudCIsIHsic3RpY2t5IjogIm5zd2UifSldKQorc3R5bGUubGF5b3V0KCJCdXR0b25Ob3RlYm9vay5UYWIiLCBbCisgICAgKCJCdXR0b25Ob3RlYm9vay50YWIiLCB7InN0aWNreSI6ICJuc3dlIiwgImNoaWxkcmVuIjoKKyAgICAgICAgWygiQnV0dG9uTm90ZWJvb2sucGFkZGluZyIsIHsic2lkZSI6ICJ0b3AiLCAic3RpY2t5IjogIm5zd2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiI6CisgICAgICAgICAgICBbKCJCdXR0b25Ob3RlYm9vay5mb2N1cyIsIHsic2lkZSI6ICJ0b3AiLCAic3RpY2t5IjogIm5zd2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICBbKCJCdXR0b25Ob3RlYm9vay5sYWJlbCIsIHsic2lkZSI6ICJsZWZ0IiwgInN0aWNreSI6ICcnfSksCisgICAgICAgICAgICAgICAgICgiQnV0dG9uTm90ZWJvb2suY2xvc2UiLCB7InNpZGUiOiAibGVmdCIsICJzdGlja3kiOiAnJ30pXQorICAgICAgICAgICAgfSldCisgICAgICAgIH0pXQorICAgIH0pXQorKQorCitkZWYgYnRuX3ByZXNzKGV2ZW50KToKKyAgICB4LCB5LCB3aWRnZXQgPSBldmVudC54LCBldmVudC55LCBldmVudC53aWRnZXQKKyAgICBlbGVtID0gd2lkZ2V0LmlkZW50aWZ5KHgsIHkpCisgICAgaW5kZXggPSB3aWRnZXQuaW5kZXgoIkAlZCwlZCIgJSAoeCwgeSkpCisKKyAgICBpZiAiY2xvc2UiIGluIGVsZW06CisgICAgICAgIHdpZGdldC5zdGF0ZShbJ3ByZXNzZWQnXSkKKyAgICAgICAgd2lkZ2V0LnByZXNzZWRfaW5kZXggPSBpbmRleAorCitkZWYgYnRuX3JlbGVhc2UoZXZlbnQpOgorICAgIHgsIHksIHdpZGdldCA9IGV2ZW50LngsIGV2ZW50LnksIGV2ZW50LndpZGdldAorCisgICAgaWYgbm90IHdpZGdldC5pbnN0YXRlKFsncHJlc3NlZCddKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBlbGVtID0gIHdpZGdldC5pZGVudGlmeSh4LCB5KQorICAgIGluZGV4ID0gd2lkZ2V0LmluZGV4KCJAJWQsJWQiICUgKHgsIHkpKQorCisgICAgaWYgImNsb3NlIiBpbiBlbGVtIGFuZCB3aWRnZXQucHJlc3NlZF9pbmRleCA9PSBpbmRleDoKKyAgICAgICAgd2lkZ2V0LmZvcmdldChpbmRleCkKKyAgICAgICAgd2lkZ2V0LmV2ZW50X2dlbmVyYXRlKCI8PE5vdGVib29rQ2xvc2VkVGFiPj4iKQorCisgICAgd2lkZ2V0LnN0YXRlKFsiIXByZXNzZWQiXSkKKyAgICB3aWRnZXQucHJlc3NlZF9pbmRleCA9IE5vbmUKKworCityb290LmJpbmRfY2xhc3MoIlROb3RlYm9vayIsICI8QnV0dG9uUHJlc3MtMT4iLCBidG5fcHJlc3MsIFRydWUpCityb290LmJpbmRfY2xhc3MoIlROb3RlYm9vayIsICI8QnV0dG9uUmVsZWFzZS0xPiIsIGJ0bl9yZWxlYXNlKQorCisjIGNyZWF0ZSBhIHR0ayBub3RlYm9vayB3aXRoIG91ciBjdXN0b20gc3R5bGUsIGFuZCBhZGQgc29tZSB0YWJzIHRvIGl0CituYiA9IHR0ay5Ob3RlYm9vayh3aWR0aD0yMDAsIGhlaWdodD0yMDAsIHN0eWxlPSJCdXR0b25Ob3RlYm9vayIpCituYi5wcmVzc2VkX2luZGV4ID0gTm9uZQorZjEgPSBUa2ludGVyLkZyYW1lKG5iLCBiYWNrZ3JvdW5kPSJyZWQiKQorZjIgPSBUa2ludGVyLkZyYW1lKG5iLCBiYWNrZ3JvdW5kPSJncmVlbiIpCitmMyA9IFRraW50ZXIuRnJhbWUobmIsIGJhY2tncm91bmQ9ImJsdWUiKQorbmIuYWRkKGYxLCB0ZXh0PSdSZWQnLCBwYWRkaW5nPTMpCituYi5hZGQoZjIsIHRleHQ9J0dyZWVuJywgcGFkZGluZz0zKQorbmIuYWRkKGYzLCB0ZXh0PSdCbHVlJywgcGFkZGluZz0zKQorbmIucGFjayhleHBhbmQ9MSwgZmlsbD0nYm90aCcpCisKK3Jvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9wbGFzdGlrX3RoZW1lLnB5IGIvRGVtby90a2ludGVyL3R0ay9wbGFzdGlrX3RoZW1lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MjJkOTAKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL3BsYXN0aWtfdGhlbWUucHkKQEAgLTAsMCArMSwyNjkgQEAKKyIiIlRoaXMgZGVtb25zdHJhdGVzIGdvb2QgcGFydCBvZiB0aGUgc3ludGF4IGFjY2VwdGVkIGJ5IHRoZW1lX2NyZWF0ZS4KKworVGhpcyBpcyBhIHRyYW5zbGF0aW9uIG9mIHBsYXN0aWsudGNsIHRvIHB5dGhvbi4KK1lvdSB3aWxsIG5lZWQgdGhlIGltYWdlcyB1c2VkIGJ5IHRoZSBwbGFzdGlrIHRoZW1lIHRvIHRlc3QgdGhpcy4gVGhlCitpbWFnZXMgKGFuZCBvdGhlciB0aWxlIHRoZW1lcykgY2FuIGJlIHJldHJpdmVkIGJ5IGRvaW5nOgorCiskIGN2cyAtejMgLWQ6cHNlcnZlcjphbm9ueW1vdXNAdGt0YWJsZS5jdnMuc291cmNlZm9yZ2UubmV0Oi9jdnNyb290L3RrdGFibGUgXAorICBjbyB0aWxlLXRoZW1lcworCitUbyB0ZXN0IHRoaXMgbW9kdWxlIHlvdSBzaG91bGQgZG8sIGZvciBleGFtcGxlOgorCitpbXBvcnQgVGtpbnRlcgoraW1wb3J0IHBsYXN0aWtfdGhlbWUKKworcm9vdCA9IFRraW50ZXIuVGsoKQorcGxhc3Rpa190aGVtZS5pbnN0YWxsKHBsYXN0aWtfaW1hZ2VfZGlyKQorLi4uCisKK1doZXJlIHBsYXN0aWtfaW1hZ2VfZGlyIGNvbnRhaW5zIHRoZSBwYXRoIHRvIHRoZSBpbWFnZXMgZGlyZWN0b3J5IHVzZWQgYnkKK3RoZSBwbGFzdGlrIHRoZW1lLCBzb21ldGhpbmcgbGlrZTogdGlsZS10aGVtZXMvcGxhc3Rpay9wbGFzdGlrCisiIiIKK2ltcG9ydCBvcworaW1wb3J0IGdsb2IKK2ltcG9ydCB0dGsKK2Zyb20gVGtpbnRlciBpbXBvcnQgUGhvdG9JbWFnZQorCitfX2FsbF9fID0gWydpbnN0YWxsJ10KKworY29sb3JzID0geworICAgICJmcmFtZSI6ICIjZWZlZmVmIiwKKyAgICAiZGlzYWJsZWRmZyI6ICIjYWFhYWFhIiwKKyAgICAic2VsZWN0YmciOiAiIzY1N2E5ZSIsCisgICAgInNlbGVjdGZnIjogIiNmZmZmZmYiCisgICAgfQorCitpbWdzID0ge30KK2RlZiBfbG9hZF9pbWdzKGltZ2Rpcik6CisgICAgaW1nZGlyID0gb3MucGF0aC5leHBhbmR1c2VyKGltZ2RpcikKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihpbWdkaXIpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVyIGlzIG5vdCBhIGRpcmVjdG9yeSwgY2FuJ3QgbG9hZCBpbWFnZXMiICUgaW1nZGlyKQorICAgIGZvciBmIGluIGdsb2IuZ2xvYigiJXMvKi5naWYiICUgaW1nZGlyKToKKyAgICAgICAgaW1nID0gb3MucGF0aC5zcGxpdChmKVsxXQorICAgICAgICBuYW1lID0gaW1nWzotNF0KKyAgICAgICAgaW1nc1tuYW1lXSA9IFBob3RvSW1hZ2UobmFtZSwgZmlsZT1mLCBmb3JtYXQ9ImdpZjg5IikKKworZGVmIGluc3RhbGwoaW1nZGlyKToKKyAgICBfbG9hZF9pbWdzKGltZ2RpcikKKyAgICBzdHlsZSA9IHR0ay5TdHlsZSgpCisgICAgc3R5bGUudGhlbWVfY3JlYXRlKCJwbGFzdGlrIiwgImRlZmF1bHQiLCBzZXR0aW5ncz17CisgICAgICAgICIuIjogeworICAgICAgICAgICAgImNvbmZpZ3VyZSI6CisgICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kIjogY29sb3JzWydmcmFtZSddLAorICAgICAgICAgICAgICAgICAidHJvdWdoY29sb3IiOiBjb2xvcnNbJ2ZyYW1lJ10sCisgICAgICAgICAgICAgICAgICJzZWxlY3RiYWNrZ3JvdW5kIjogY29sb3JzWydzZWxlY3RiZyddLAorICAgICAgICAgICAgICAgICAic2VsZWN0Zm9yZWdyb3VuZCI6IGNvbG9yc1snc2VsZWN0ZmcnXSwKKyAgICAgICAgICAgICAgICAgImZpZWxkYmFja2dyb3VuZCI6IGNvbG9yc1snZnJhbWUnXSwKKyAgICAgICAgICAgICAgICAgImZvbnQiOiAiVGtEZWZhdWx0Rm9udCIsCisgICAgICAgICAgICAgICAgICJib3JkZXJ3aWR0aCI6IDF9LAorICAgICAgICAgICAgIm1hcCI6IHsiZm9yZWdyb3VuZCI6IFsoImRpc2FibGVkIiwgY29sb3JzWydkaXNhYmxlZGZnJ10pXX0KKyAgICAgICAgfSwKKworICAgICAgICAiVmVydGljYWwuVFNjcm9sbGJhciI6IHsibGF5b3V0IjogWworICAgICAgICAgICAgKCJWZXJ0aWNhbC5TY3JvbGxiYXIudXBhcnJvdyIsIHsic2lkZSI6ICJ0b3AiLCAic3RpY2t5IjogJyd9KSwKKyAgICAgICAgICAgICgiVmVydGljYWwuU2Nyb2xsYmFyLmRvd25hcnJvdyIsIHsic2lkZSI6ICJib3R0b20iLCAic3RpY2t5IjogJyd9KSwKKyAgICAgICAgICAgICgiVmVydGljYWwuU2Nyb2xsYmFyLnVwYXJyb3ciLCB7InNpZGUiOiAiYm90dG9tIiwgInN0aWNreSI6ICcnfSksCisgICAgICAgICAgICAoIlZlcnRpY2FsLlNjcm9sbGJhci50cm91Z2giLCB7InN0aWNreSI6ICJucyIsICJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgWygiVmVydGljYWwuU2Nyb2xsYmFyLnRodW1iIiwgeyJleHBhbmQiOiAxLCAidW5pdCI6IDEsCisgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiI6IFsoIlZlcnRpY2FsLlNjcm9sbGJhci5ncmlwIiwgeyJzdGlja3kiOiAnJ30pXQorICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgfSldCisgICAgICAgIH0sCisKKyAgICAgICAgIkhvcml6b250YWwuVFNjcm9sbGJhciI6IHsibGF5b3V0IjogWworICAgICAgICAgICAgKCJIb3Jpem9udGFsLlNjcm9sbGJhci5sZWZ0YXJyb3ciLCB7InNpZGUiOiAibGVmdCIsICJzdGlja3kiOiAnJ30pLAorICAgICAgICAgICAgKCJIb3Jpem9udGFsLlNjcm9sbGJhci5yaWdodGFycm93IiwKKyAgICAgICAgICAgICAgICB7InNpZGUiOiAicmlnaHQiLCAic3RpY2t5IjogJyd9KSwKKyAgICAgICAgICAgICgiSG9yaXpvbnRhbC5TY3JvbGxiYXIubGVmdGFycm93IiwKKyAgICAgICAgICAgICAgICB7InNpZGUiOiAicmlnaHQiLCAic3RpY2t5IjogJyd9KSwKKyAgICAgICAgICAgICgiSG9yaXpvbnRhbC5TY3JvbGxiYXIudHJvdWdoIiwgeyJzdGlja3kiOiAiZXciLCAiY2hpbGRyZW4iOgorICAgICAgICAgICAgICAgIFsoIkhvcml6b250YWwuU2Nyb2xsYmFyLnRodW1iIiwgeyJleHBhbmQiOiAxLCAidW5pdCI6IDEsCisgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiI6IFsoIkhvcml6b250YWwuU2Nyb2xsYmFyLmdyaXAiLCB7InN0aWNreSI6ICcnfSldCisgICAgICAgICAgICAgICAgfSldCisgICAgICAgICAgICB9KV0KKyAgICAgICAgfSwKKworICAgICAgICAiVEJ1dHRvbiI6IHsKKyAgICAgICAgICAgICJjb25maWd1cmUiOiB7IndpZHRoIjogMTAsICJhbmNob3IiOiAiY2VudGVyIn0sCisgICAgICAgICAgICAibGF5b3V0IjogWworICAgICAgICAgICAgICAgICgiQnV0dG9uLmJ1dHRvbiIsIHsiY2hpbGRyZW4iOgorICAgICAgICAgICAgICAgICAgICBbKCJCdXR0b24uZm9jdXMiLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoIkJ1dHRvbi5wYWRkaW5nIiwgeyJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygiQnV0dG9uLmxhYmVsIiwgeyJzaWRlIjogImxlZnQiLCAiZXhwYW5kIjogMX0pXQorICAgICAgICAgICAgICAgICAgICAgICAgfSldCisgICAgICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisKKyAgICAgICAgIlRvb2xidXR0b24iOiB7CisgICAgICAgICAgICAiY29uZmlndXJlIjogeyJhbmNob3IiOiAiY2VudGVyIn0sCisgICAgICAgICAgICAibGF5b3V0IjogWworICAgICAgICAgICAgICAgICgiVG9vbGJ1dHRvbi5ib3JkZXIiLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICAgICAgWygiVG9vbGJ1dHRvbi5idXR0b24iLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoIlRvb2xidXR0b24ucGFkZGluZyIsIHsiY2hpbGRyZW4iOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoIlRvb2xidXR0b24ubGFiZWwiLCB7InNpZGUiOiJsZWZ0IiwgImV4cGFuZCI6MX0pXQorICAgICAgICAgICAgICAgICAgICAgICAgfSldCisgICAgICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisKKyAgICAgICAgIlRNZW51YnV0dG9uIjogeyJsYXlvdXQiOiBbCisgICAgICAgICAgICAoIk1lbnVidXR0b24uYnV0dG9uIiwgeyJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgWygiTWVudWJ1dHRvbi5pbmRpY2F0b3IiLCB7InNpZGUiOiAicmlnaHQifSksCisgICAgICAgICAgICAgICAgICgiTWVudWJ1dHRvbi5mb2N1cyIsIHsiY2hpbGRyZW4iOgorICAgICAgICAgICAgICAgICAgICBbKCJNZW51YnV0dG9uLnBhZGRpbmciLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoIk1lbnVidXR0b24ubGFiZWwiLCB7InNpZGUiOiAibGVmdCIsICJleHBhbmQiOiAxfSldCisgICAgICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgfSldCisgICAgICAgIH0sCisKKyAgICAgICAgIlROb3RlYm9vayI6IHsiY29uZmlndXJlIjogeyJ0YWJtYXJnaW5zIjogWzAsIDIsIDAsIDBdfX0sCisgICAgICAgICJUTm90ZWJvb2sudGFiIjogeworICAgICAgICAgICAgImNvbmZpZ3VyZSI6IHsicGFkZGluZyI6IFs2LCAyLCA2LCAyXSwgImV4cGFuZCI6IFswLCAwLCAyXX0sCisgICAgICAgICAgICAibWFwIjogeyJleHBhbmQiOiBbKCJzZWxlY3RlZCIsIFsxLCAyLCA0LCAyXSldfQorICAgICAgICB9LAorICAgICAgICAiVHJlZXZpZXciOiB7ImNvbmZpZ3VyZSI6IHsicGFkZGluZyI6IDB9fSwKKworICAgICAgICAjIGVsZW1lbnRzCisgICAgICAgICJCdXR0b24uYnV0dG9uIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2J1dHRvbi1uJywKKyAgICAgICAgICAgICAgICAoInByZXNzZWQiLCAnYnV0dG9uLXAnKSwgKCJhY3RpdmUiLCAnYnV0dG9uLWgnKSwKKyAgICAgICAgICAgICAgICB7ImJvcmRlciI6IFs0LCAxMF0sICJwYWRkaW5nIjogNCwgInN0aWNreSI6ImV3bnMifQorICAgICAgICAgICAgKQorICAgICAgICB9LAorCisgICAgICAgICJUb29sYnV0dG9uLmJ1dHRvbiI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICd0YnV0dG9uLW4nLAorICAgICAgICAgICAgICAgICgic2VsZWN0ZWQiLCAndGJ1dHRvbi1wJyksICgicHJlc3NlZCIsICd0YnV0dG9uLXAnKSwKKyAgICAgICAgICAgICAgICAoImFjdGl2ZSIsICd0YnV0dG9uLWgnKSwKKyAgICAgICAgICAgICAgICB7ImJvcmRlciI6IFs0LCA5XSwgInBhZGRpbmciOiAzLCAic3RpY2t5IjogIm5ld3MifQorICAgICAgICAgICAgKQorICAgICAgICB9LAorCisgICAgICAgICJDaGVja2J1dHRvbi5pbmRpY2F0b3IiOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnY2hlY2stbnUnLAorICAgICAgICAgICAgICAgICgnYWN0aXZlJywgJ3NlbGVjdGVkJywgJ2NoZWNrLWhjJyksCisgICAgICAgICAgICAgICAgKCdwcmVzc2VkJywgJ3NlbGVjdGVkJywgJ2NoZWNrLXBjJyksCisgICAgICAgICAgICAgICAgKCdhY3RpdmUnLCAnY2hlY2staHUnKSwKKyAgICAgICAgICAgICAgICAoInNlbGVjdGVkIiwgJ2NoZWNrLW5jJyksCisgICAgICAgICAgICAgICAgeyJzdGlja3kiOiAnJ30KKyAgICAgICAgICAgICkKKyAgICAgICAgfSwKKworICAgICAgICAiUmFkaW9idXR0b24uaW5kaWNhdG9yIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ3JhZGlvLW51JywKKyAgICAgICAgICAgICAgICAoJ2FjdGl2ZScsICdzZWxlY3RlZCcsICdyYWRpby1oYycpLAorICAgICAgICAgICAgICAgICgncHJlc3NlZCcsICdzZWxlY3RlZCcsICdyYWRpby1wYycpLAorICAgICAgICAgICAgICAgICgnYWN0aXZlJywgJ3JhZGlvLWh1JyksICgnc2VsZWN0ZWQnLCAncmFkaW8tbmMnKSwKKyAgICAgICAgICAgICAgICB7InN0aWNreSI6ICcnfQorICAgICAgICAgICAgKQorICAgICAgICB9LAorCisgICAgICAgICJIb3Jpem9udGFsLlNjcm9sbGJhci50aHVtYiI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdoc2ItbicsIHsiYm9yZGVyIjogMywgInN0aWNreSI6ICJldyJ9KQorICAgICAgICB9LAorCisgICAgICAgICJIb3Jpem9udGFsLlNjcm9sbGJhci5ncmlwIjogeyJlbGVtZW50IGNyZWF0ZSI6ICgiaW1hZ2UiLCAnaHNiLWcnKX0sCisgICAgICAgICJIb3Jpem9udGFsLlNjcm9sbGJhci50cm91Z2giOiB7ImVsZW1lbnQgY3JlYXRlIjogKCJpbWFnZSIsICdoc2ItdCcpfSwKKyAgICAgICAgIlZlcnRpY2FsLlNjcm9sbGJhci50aHVtYiI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICd2c2ItbicsIHsiYm9yZGVyIjogMywgInN0aWNreSI6ICJucyJ9KQorICAgICAgICB9LAorICAgICAgICAiVmVydGljYWwuU2Nyb2xsYmFyLmdyaXAiOiB7ImVsZW1lbnQgY3JlYXRlIjogKCJpbWFnZSIsICd2c2ItZycpfSwKKyAgICAgICAgIlZlcnRpY2FsLlNjcm9sbGJhci50cm91Z2giOiB7ImVsZW1lbnQgY3JlYXRlIjogKCJpbWFnZSIsICd2c2ItdCcpfSwKKyAgICAgICAgIlNjcm9sbGJhci51cGFycm93IjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2Fycm93dXAtbicsICgicHJlc3NlZCIsICdhcnJvd3VwLXAnKSwgeyJzdGlja3kiOiAnJ30pCisgICAgICAgIH0sCisgICAgICAgICJTY3JvbGxiYXIuZG93bmFycm93IjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2Fycm93ZG93bi1uJywKKyAgICAgICAgICAgICgicHJlc3NlZCIsICdhcnJvd2Rvd24tcCcpLCB7J3N0aWNreSc6ICcnfSkKKyAgICAgICAgfSwKKyAgICAgICAgIlNjcm9sbGJhci5sZWZ0YXJyb3ciOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnYXJyb3dsZWZ0LW4nLAorICAgICAgICAgICAgKCJwcmVzc2VkIiwgJ2Fycm93bGVmdC1wJyksIHsnc3RpY2t5JzogJyd9KQorICAgICAgICB9LAorICAgICAgICAiU2Nyb2xsYmFyLnJpZ2h0YXJyb3ciOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnYXJyb3dyaWdodC1uJywgKCJwcmVzc2VkIiwgJ2Fycm93cmlnaHQtcCcpLAorICAgICAgICAgICAgeydzdGlja3knOiAnJ30pCisgICAgICAgIH0sCisKKyAgICAgICAgIkhvcml6b250YWwuU2NhbGUuc2xpZGVyIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2hzbGlkZXItbicsIHsnc3RpY2t5JzogJyd9KQorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbC5TY2FsZS50cm91Z2giOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnaHNsaWRlci10Jywgeydib3JkZXInOiAxLCAncGFkZGluZyc6IDB9KQorICAgICAgICB9LAorICAgICAgICAiVmVydGljYWwuU2NhbGUuc2xpZGVyIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ3ZzbGlkZXItbicsIHsnc3RpY2t5JzogJyd9KQorICAgICAgICB9LAorICAgICAgICAiVmVydGljYWwuU2NhbGUudHJvdWdoIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ3ZzbGlkZXItdCcsIHsnYm9yZGVyJzogMSwgJ3BhZGRpbmcnOiAwfSkKKyAgICAgICAgfSwKKworICAgICAgICAiRW50cnkuZmllbGQiOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnZW50cnktbicsCisgICAgICAgICAgICAgICAgKCJmb2N1cyIsICdlbnRyeS1mJyksCisgICAgICAgICAgICAgICAgeydib3JkZXInOiAyLCAncGFkZGluZyc6IFszLCA0XSwgJ3N0aWNreSc6ICduZXdzJ30KKyAgICAgICAgICAgICkKKyAgICAgICAgfSwKKworICAgICAgICAiTGFiZWxmcmFtZS5ib3JkZXIiOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnYm9yZGVyJywgeydib3JkZXInOiA0LCAncGFkZGluZyc6IDQsICdzdGlja3knOiAnbmV3cyd9KQorICAgICAgICB9LAorCisgICAgICAgICJNZW51YnV0dG9uLmJ1dHRvbiI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdjb21iby1yJywKKyAgICAgICAgICAgICAgICAoJ2FjdGl2ZScsICdjb21iby1yYScpLAorICAgICAgICAgICAgICAgIHsnc3RpY2t5JzogJ25ld3MnLCAnYm9yZGVyJzogWzQsIDYsIDI0LCAxNV0sCisgICAgICAgICAgICAgICAgICdwYWRkaW5nJzogWzQsIDQsIDVdfQorICAgICAgICAgICAgKQorICAgICAgICB9LAorICAgICAgICAiTWVudWJ1dHRvbi5pbmRpY2F0b3IiOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnYXJyb3ctZCcsIHsic3RpY2t5IjogImUiLCAiYm9yZGVyIjogWzE1LCAwLCAwLCAwXX0pCisgICAgICAgIH0sCisKKyAgICAgICAgIkNvbWJvYm94LmZpZWxkIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2NvbWJvLW4nLAorICAgICAgICAgICAgICAgICgncmVhZG9ubHknLCAnYWN0aXZlJywgJ2NvbWJvLXJhJyksCisgICAgICAgICAgICAgICAgKCdmb2N1cycsICdhY3RpdmUnLCAnY29tYm8tZmEnKSwKKyAgICAgICAgICAgICAgICAoJ2FjdGl2ZScsICdjb21iby1hJyksICgnIXJlYWRvbmx5JywgJ2ZvY3VzJywgJ2NvbWJvLWYnKSwKKyAgICAgICAgICAgICAgICAoJ3JlYWRvbmx5JywgJ2NvbWJvLXInKSwKKyAgICAgICAgICAgICAgICB7J2JvcmRlcic6IFs0LCA2LCAyNCwgMTVdLCAncGFkZGluZyc6IFs0LCA0LCA1XSwKKyAgICAgICAgICAgICAgICAgJ3N0aWNreSc6ICduZXdzJ30KKyAgICAgICAgICAgICkKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbWJvYm94LmRvd25hcnJvdyI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdhcnJvdy1kJywgeydzdGlja3knOiAnZScsICdib3JkZXInOiBbMTUsIDAsIDAsIDBdfSkKKyAgICAgICAgIH0sCisKKyAgICAgICAgIk5vdGVib29rLmNsaWVudCI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdub3RlYm9vay1jJywgeydib3JkZXInOiA0fSkKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVib29rLnRhYiI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdub3RlYm9vay10bicsCisgICAgICAgICAgICAgICAgKCJzZWxlY3RlZCIsICdub3RlYm9vay10cycpLCAoImFjdGl2ZSIsICdub3RlYm9vay10YScpLAorICAgICAgICAgICAgICAgIHsncGFkZGluZyc6IFswLCAyLCAwLCAwXSwgJ2JvcmRlcic6IFs0LCAxMCwgNCwgMTBdfQorICAgICAgICAgICAgKQorICAgICAgICB9LAorCisgICAgICAgICJQcm9ncmVzc2Jhci50cm91Z2giOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnaHByb2dyZXNzLXQnLCB7J2JvcmRlcic6IDJ9KQorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbC5Qcm9ncmVzc2Jhci5wYmFyIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2hwcm9ncmVzcy1iJywgeydib3JkZXInOiBbMiwgOV19KQorICAgICAgICB9LAorICAgICAgICAiVmVydGljYWwuUHJvZ3Jlc3NiYXIucGJhciI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICd2cHJvZ3Jlc3MtYicsIHsnYm9yZGVyJzogWzksIDJdfSkKKyAgICAgICAgfSwKKworICAgICAgICAiVHJlZWhlYWRpbmcuY2VsbCI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICd0cmVlLW4nLAorICAgICAgICAgICAgICAgICgicHJlc3NlZCIsICd0cmVlLXAnKSwKKyAgICAgICAgICAgICAgICB7J2JvcmRlcic6IFs0LCAxMF0sICdwYWRkaW5nJzogNCwgJ3N0aWNreSc6ICduZXdzJ30KKyAgICAgICAgICAgICkKKyAgICAgICAgfQorCisgICAgfSkKKyAgICBzdHlsZS50aGVtZV91c2UoInBsYXN0aWsiKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9yb3VuZGZyYW1lLnB5IGIvRGVtby90a2ludGVyL3R0ay9yb3VuZGZyYW1lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMjE0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL3JvdW5kZnJhbWUucHkKQEAgLTAsMCArMSwxMTEgQEAKKyIiIlR0ayBGcmFtZSB3aXRoIHJvdW5kZWQgY29ybmVycy4KKworQmFzZWQgb24gYW4gZXhhbXBsZSBieSBCcnlhbiBPYWtsZXksIGZvdW5kIGF0OiBodHRwOi8vd2lraS50Y2wudGsvMjAxNTIiIiIKK2ltcG9ydCBUa2ludGVyCitpbXBvcnQgdHRrCisKK3Jvb3QgPSBUa2ludGVyLlRrKCkKKworaW1nMSA9IFRraW50ZXIuUGhvdG9JbWFnZSgiZnJhbWVGb2N1c0JvcmRlciIsIGRhdGE9IiIiCitSMGxHT0RsaFFBQkFBUGNBQUh4K2ZNVEN4S1NpcE9UaTVKU1NsTlRTMUxTeXRQVHk5SXlLak16S3pLeXEKK3JPenE3Snlhbk56YTNMeTZ2UHo2L0lTQ2hNVEd4S1NtcE9UbTVKU1dsTlRXMUxTMnRQVDI5SXlPak16Tworekt5dXJPenU3Snllbk56ZTNMeSt2UHorL09rQUtPVUE1SUVBRW53QUFBQ3VRQUNVQUFGQkFBQitBRllkCitRQUMwQUFCQkFBQitBSWpNQXVFRUFCSU5BQUFBQUhNZ0FRQUFBQUFBQUFBQUFLalN4T0lFSkJJSXBRQUEKK3NSZ0JNTzRBQUpBQUFId0NBSEFBQUFVQUFKRUFBSHdBQVArZUVQOENaLzhBaWY4QUFHMEJEQVVBQUpFQQorQUh3QUFJWFlBT2Z4QUlFU0FId0FBQUJBTVFBYk1CWkdNQUFBSUVnZ0pRTUFJQUFBQUFBQWZxZ2FYRVNJCis1QmRCRWdCK0FHZ0FMR0VBQUJZQUFBQUFBQUNzTndBRUFBQU1Md0FBQUg2MU1RQklBQUJDTThCK0FBQVUKK0FBQUFBQUFBcFFBQXNmOEJydjhBbFA4QVFmOEFmdjhBelA4QTFQOEFRZjhBZmdBQXJBQUFCQUFBREFBQQorQUFDUURBRGpBQUFTQUFBQUFBQ0FBQURWQUJaQkFBQitBTGpNd09JRWh4SU5VQUFBQU5JZ0FPWUFBSUVBCitBSHdBQUdqU0FHRUVBQllJQUFBQUFFb0JCK01BQUlFQUFId0NBQ0FCQUpzQUFGQUFBQUFBQUdqSkFHR0wKK0FBRkJGZ0IrQUdtSUFBQVFBQUJIQUFCK0FQUW9BT0UvQUJJQUFBQUFBQURRQUFEakFBQVNBQUFBQVBpRgorQVBjckFCS0RBQUI4QUJnQUdPNEFBSkFBcVh3QUFIQUFBQVVBQUpFQUFId0FBUDhBQVA4QUFQOEFBUDhBCitBRzBwSXdXM0FKR1NBSHg4QUVvY0kvUUFBSUNwQUh3QUFBQTBTQUJrNnhhREVnQjhBQUQvL3dELy93RC8KKy93RC8vMmdBQUdFQUFCWUFBQUFBQUFDMC9BSGo1QUFTRWdBQUFBQTAxZ0JrV0FDRFRBQjhBRmY0M1BUMworNUlBU0Vud0FBT0FZZCtQdU1CS1FUd0I4QUdnQUVHRzM1UmFTRWdCOEFPai9OT0wvWkJML2d3RC9mTWtjCitxNHNBNVVHcEVuNEFBSWcwMnhCay8wZUQvMzU4ZngvNGlBRGs1UUFTRWdBQUFBTG5IQUJrQUFDRHFRQjgKK0FNeUlOQVJrWkEyRGd3QjhmQkFCSEwwQUFFVUFxUUFBQUlBeEtPTUFQeEl3QUFBQUFJU2NBT1B4QUJJUworQUFBQUFJSUFuUXdBLzBJQVIzY0FBQ3dBQUFBQVFBQkFBQUFJL3dBL0NCeElzS0RCZ3dnVEtseklzS0ZECitneGNlTm54QXNhTEZpeGd6VXJ6QXNXUEZDdzhrRGd5NUVlUURrQnhQb2x5cHNtWEtseDFoWG5TNDhVRUgKK0N3b29NQ0RBZ0lKT0NqeDk5Z3o2aytqUW5rV1I5bFJnWVlESmtBay9EbEFnSU1JQ1psaXphdDNLdGF0WAorckFzaUNORGd0Q0pDbFFrb0ZNZ3FzdTNBckJrb1pEZ0E4dURKQXdrNGJHRG10bTlCWmdjWXpLMDc4bTRECitDZ2Y0K2wwc2tOa0dDZzNvVWhSNGQ0R0NESW9aTTJaV1FNRUN5WlF2TE1nZ0liUG16UUl5ZkNaNVljTUUKK0F3Rk1uL2JMTElLQkNSdE1IbGpRUWNEVjJacVpUUkRRWWZXRkF3TXFVSkFOdkM4ekJoVVdiRGk1WVVBQgorQnN5YnQyVkdvVUtIM0FjbWRQK0ltMTI3eE9jSmloK29Yc0VEZHZPTHVRZklNR0JEOVF3QmxzT256Y0JECitoZnJzdVZmZWZnekpSNTk5QStDbkg0SGI5ZmNmZ3UyOXg2QklCZ0tZWUg0RFRvalFjLzVaR0dHR0docFUKK0lZSUtnaGdpUVJ3K0dLQ0VKeFpJd1h3V2x0aGlReWw2S09DTUxzSklJb1k0TGxRamhEZjJtTkNJOS9FbworNUlZTzJzamlrWCs5ZUdDUkN6TDVWNUpBTGlsbFkwN0dhT1NWYjFHNW9va3pFbmxobEZ4KzhPT1haYjZWCis1WTVrY25sbWNrR21LYWFNYVpycEpaeFdYam5ubG1XKytXR2RacTVaWFFFZXRLbW5seFBnbDZlVVloSnEKK0tLT0kwaW1ub05iRjJTY0ZIUUpKd1c5OVRzQkFBQVZZV0VBQUhFUUFab2kxY1FEcUFBZUVWMEVBQ3BULworSnFjQUNnUlFBVzZ1TldDYllLY3l5RXdHREJnUXdhMnRUbEJCQWhZSVFNRmVqQzVBZ1FBV0pOREFCSzN5Citsb0VERWpDZ1Y2L2FPY1lCQXdwNGtJRjZyVmtYZ0FFYzhJUVpWaWZDQlJRSEdxeWEyM0hHSXBzVEJnU1UKK09zRlgvUGJyVlZqcFlzQ0FCQTRrUUN4SHUxMW9nQVFVSU9Bd0FUcEJMREZRRkU5c2NjVVlTMHdBeEQ1aAorNERBQ0ZFZ2diQUhrM2pWQkEvZ3RUSUhIRUFEZzhzc3d4eXp6ekRRREFBRUVDR0FRc2dIaVRpc1pSZXNOCitnTElIQmlqd0xRRVllUHp4MGt3MzdmVFNTanVNcjdaTXpmY2dZWlVaaTU4REdzVEt3YmRnYXl0MjJHU1AKK2JYYllZM01nZ1FJYU9ORHpBSjhSOWtGbFFoZVFRQUFPV0dDQUFScndkdDIzQm44SDd2ZmdnQk11ZU9FRworV09CQkFBa1UwRUI5b0JHVWRYSUZaSkJBQkFFRXNQam1tbmZPK2VlZWgvNTVCQkVrMFBoL0U4UTltZVFxCitiYkRBQkFOMDBFQURGUlJRKysyMjU0Nzc3cnIzanJ2akZUVFF3UUNwejd1NlFSdXQ1L29FekEvZy9QUFEKK1J5Lzk5Tkl6Ly9vR3JacFVVRUFBT3c9PSIiIikKKworaW1nMiA9IFRraW50ZXIuUGhvdG9JbWFnZSgiZnJhbWVCb3JkZXIiLCBkYXRhPSIiIgorUjBsR09EbGhRQUJBQVBjQUFIeCtmTVRDeEtTaXBPVGk1SlNTbE5UUzFMU3l0UFR5OUl5S2pNekt6S3lxCityT3pxN0p5YW5OemEzTHk2dlB6Ni9JU0NoTVRHeEtTbXBPVG01SlNXbE5UVzFMUzJ0UFQyOUl5T2pNek8KK3pLeXVyT3p1N0p5ZW5OemUzTHkrdlB6Ky9Pa0FLT1VBNUlFQUVud0FBQUN1UUFDVUFBRkJBQUIrQUZZZAorUUFDMEFBQkJBQUIrQUlqTUF1RUVBQklOQUFBQUFITWdBUUFBQUFBQUFBQUFBS2pTeE9JRUpCSUlwUUFBCitzUmdCTU80QUFKQUFBSHdDQUhBQUFBVUFBSkVBQUh3QUFQK2VFUDhDWi84QWlmOEFBRzBCREFVQUFKRUEKK0FId0FBSVhZQU9meEFJRVNBSHdBQUFCQU1RQWJNQlpHTUFBQUlFZ2dKUU1BSUFBQUFBQUFmcWdhWEVTSQorNUJkQkVnQitBR2dBTEdFQUFCWUFBQUFBQUFDc053QUVBQUFNTHdBQUFINjFNUUJJQUFCQ004QitBQUFVCitBQUFBQUFBQXBRQUFzZjhCcnY4QWxQOEFRZjhBZnY4QXpQOEExUDhBUWY4QWZnQUFyQUFBQkFBQURBQUEKK0FBQ1FEQURqQUFBU0FBQUFBQUNBQUFEVkFCWkJBQUIrQUxqTXdPSUVoeElOVUFBQUFOSWdBT1lBQUlFQQorQUh3QUFHalNBR0VFQUJZSUFBQUFBRW9CQitNQUFJRUFBSHdDQUNBQkFKc0FBRkFBQUFBQUFHakpBR0dMCitBQUZCRmdCK0FHbUlBQUFRQUFCSEFBQitBUFFvQU9FL0FCSUFBQUFBQUFEUUFBRGpBQUFTQUFBQUFQaUYKK0FQY3JBQktEQUFCOEFCZ0FHTzRBQUpBQXFYd0FBSEFBQUFVQUFKRUFBSHdBQVA4QUFQOEFBUDhBQVA4QQorQUcwcEl3VzNBSkdTQUh4OEFFb2NJL1FBQUlDcEFId0FBQUEwU0FCazZ4YURFZ0I4QUFELy93RC8vd0QvCisvd0QvLzJnQUFHRUFBQllBQUFBQUFBQzAvQUhqNUFBU0VnQUFBQUEwMWdCa1dBQ0RUQUI4QUZmNDNQVDMKKzVJQVNFbndBQU9BWWQrUHVNQktRVHdCOEFHZ0FFR0czNVJhU0VnQjhBT2ovTk9ML1pCTC9nd0QvZk1rYworcTRzQTVVR3BFbjRBQUlnMDJ4QmsvMGVELzM1OGZ4LzRpQURrNVFBU0VnQUFBQUxuSEFCa0FBQ0RxUUI4CitBTXlJTkFSa1pBMkRnd0I4ZkJBQkhMMEFBRVVBcVFBQUFJQXhLT01BUHhJd0FBQUFBSVNjQU9QeEFCSVMKK0FBQUFBSUlBblF3QS8wSUFSM2NBQUN3QUFBQUFRQUJBQUFBSS93QS9DQnhJc0tEQmd3Z1RLbHpJc0tGRAorZ3hjZU5ueEFzYUxGaXhnelVyekFzV1BGQ3c4a0RneTVFZVFEa0J4UG9seXBzbVhLbHgxaFhuUzQ4VUVICitDd29vTUNEQWdJSk9Dang5OWd6NmsralFua1dSOWxSZ1lZREprQWsvRGxBZ0lNSUNrVmdITG9nZ1FJUFQKK2lnaFZKcUJRSUt2Wmdoa29aRGdBOHVESkF3azRiRGhMZCtBQkJtdmJqbnpiZ01LQnVvQS9iS0RRZ0MxRgorZ1c4WEtNZ1FPSEFCQlFzTUk3NndJSU9FeG8wRlpJaE04c0tHQ1FZQ1lBNGN3Y0NFRFNZUExPZ2c0T3JvCit1aE1FZE9CODRjQ0FDaFJlQjJaUVljR0dreHNHRkdDZ0d6Q0ZDaDFRSDVqUUlXM3h1Z3dTekQ0UXZJSUgKKzRzL1BVZ2lRWWNDRzRCa0M1UC9PYnBhQmh3cmVxMThuYjNaNzkrOER3bzluTDlJOGV2aldzZE9YNkQ1OQorZlBINzFYZWVmL2tGeUI5My9zbG40RVAyRWJqZWdnMzFCNStDRURMVUlINFBWcWlRaE9BQnFLRkNGNnFuCiszNGNIY2ZqZmZDUWFGT0p0R2FaWWtJa1V1bGpRaWdYSytDS0NFM3BvNDBBMHRyZ2pqRHJ1K0VHUEkvNkkKK1k0Y283a2lra0FNQm1hU05Tekw1Z1pOU0Rqa2doa1hhYUdJQkhqd3BZNGdUaEplbGpGdDJXU1dZTVFwWgorNXBndVVuQ2xlaFM0dHVNRURBUlFnSDhGQk1CQkJFeEd3SUdkQXh5d1hBVUJLSENaa0FJb0VFQUZwMzNXCitRR2w0N1pnQkF3WkV3S2lnRTFTUWdBVUNVRENYaXd0UUlJQUZDVFF3Z2FDclplQ0FCQXpJbGVJR0hERC8KK29JQUhHVXpubVhBQkdNQUJUNHhwbUJZQkhHZ0FLR3ExWmJwcFRoZ0FHOEVFQVc2MUt3WU1TT0JBQXBkeQorcE5wL0JraEFBUUxjRXFDVHQrQUNKVzY0NUk1ckxyZ0VlT3NUQnR3aVFJRUVsUlpnNjFzVE5CQmV0aFN3CitDd0VBL1Bicjc3OEFCeXd3QUJCQWdBQUc3eHBBcTZtR1VVVGRBUFo2WUlBQ3NSS0FBYnZ0WnF6eHhoeG4KK2pERzN5YmJLRkhmMzZaVllwdUU1b0lHaEhNVHFjcXN3dnl4enpEUy9IRE1IRWlpZ2dRTUxEeENaWGg4aworQm5FQkNRVGdnQVVHR0tDQjBrdHIwUFRUVEVmdHROUlFUMjJBQlI0RWtFQUJEWGduR1VFbjMxWkFCZ2xFCitFRUFBV2FlTjl0cHF0ODMyMjIxSEVFRUNXNk0zd2MrSGdhM1NCZ3RNT0RCQUJ3MDBVRUVCZ3hkTytPR0cKK0o0NzQ0b1p6WFVFREhReHdON0Y1RzdRUmRYeFBvUGtBbkhmdStlZWdodzY2NW4xdklLaEpCUVVFQURzPSIiIikKKworc3R5bGUgPSB0dGsuU3R5bGUoKQorCitzdHlsZS5lbGVtZW50X2NyZWF0ZSgiUm91bmRlZEZyYW1lIiwgImltYWdlIiwgImZyYW1lQm9yZGVyIiwKKyAgICAoImZvY3VzIiwgImZyYW1lRm9jdXNCb3JkZXIiKSwgYm9yZGVyPTE2LCBzdGlja3k9Im5zZXciKQorCitzdHlsZS5sYXlvdXQoIlJvdW5kZWRGcmFtZSIsIFsoIlJvdW5kZWRGcmFtZSIsIHsic3RpY2t5IjogIm5zZXcifSldKQorc3R5bGUuY29uZmlndXJlKCJURW50cnkiLCBib3JkZXJ3aWR0aD0wKQorCitmcmFtZSA9IHR0ay5GcmFtZShzdHlsZT0iUm91bmRlZEZyYW1lIiwgcGFkZGluZz0xMCkKK2ZyYW1lLnBhY2soZmlsbD0neCcpCisKK2ZyYW1lMiA9IHR0ay5GcmFtZShzdHlsZT0iUm91bmRlZEZyYW1lIiwgcGFkZGluZz0xMCkKK2ZyYW1lMi5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9MSkKKworZW50cnkgPSB0dGsuRW50cnkoZnJhbWUsIHRleHQ9J1Rlc3QnKQorZW50cnkucGFjayhmaWxsPSd4JykKK2VudHJ5LmJpbmQoIjxGb2N1c0luPiIsIGxhbWJkYSBldnQ6IGZyYW1lLnN0YXRlKFsiZm9jdXMiXSkpCitlbnRyeS5iaW5kKCI8Rm9jdXNPdXQ+IiwgbGFtYmRhIGV2dDogZnJhbWUuc3RhdGUoWyIhZm9jdXMiXSkpCisKK3RleHQgPSBUa2ludGVyLlRleHQoZnJhbWUyLCBib3JkZXJ3aWR0aD0wLCBiZz0id2hpdGUiLCBoaWdobGlnaHR0aGlja25lc3M9MCkKK3RleHQucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPTEpCit0ZXh0LmJpbmQoIjxGb2N1c0luPiIsIGxhbWJkYSBldnQ6IGZyYW1lMi5zdGF0ZShbImZvY3VzIl0pKQordGV4dC5iaW5kKCI8Rm9jdXNPdXQ+IiwgbGFtYmRhIGV2dDogZnJhbWUyLnN0YXRlKFsiIWZvY3VzIl0pKQorCityb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvdGhlbWVfc2VsZWN0b3IucHkgYi9EZW1vL3RraW50ZXIvdHRrL3RoZW1lX3NlbGVjdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjg0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL3RoZW1lX3NlbGVjdG9yLnB5CkBAIC0wLDAgKzEsNjEgQEAKKyIiIlR0ayBUaGVtZSBTZWxlY3RvciB2Mi4KKworVGhpcyBpcyBhbiBpbXByb3ZlbWVudCBmcm9tIHRoZSBvdGhlciB0aGVtZSBzZWxlY3RvciAodGhlbWVzX2NvbWJvLnB5KQorc2luY2Ugbm93IHlvdSBjYW4gbm90aWNlIHRoZW1lIGNoYW5nZXMgaW4gVHRrIENvbWJvYm94LCBUdGsgRnJhbWUsCitUdGsgTGFiZWwgYW5kIFR0ayBCdXR0b24uCisiIiIKK2ltcG9ydCBUa2ludGVyCitpbXBvcnQgdHRrCisKK2NsYXNzIEFwcCh0dGsuRnJhbWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgdHRrLkZyYW1lLl9faW5pdF9fKHNlbGYsIGJvcmRlcndpZHRoPTMpCisKKyAgICAgICAgc2VsZi5zdHlsZSA9IHR0ay5TdHlsZSgpCisKKyAgICAgICAgIyBYWFggSWRlYWxseSBJIHdvdWxkbid0IHdhbnQgdG8gY3JlYXRlIGEgVGtpbnRlci5JbnRWYXIgdG8gbWFrZQorICAgICAgICAjICAgICBpdCB3b3JrcyB3aXRoIENoZWNrYnV0dG9uIHZhcmlhYmxlIG9wdGlvbi4KKyAgICAgICAgc2VsZi50aGVtZV9hdXRvY2hhbmdlID0gVGtpbnRlci5JbnRWYXIoc2VsZiwgMCkKKyAgICAgICAgc2VsZi5fc2V0dXBfd2lkZ2V0cygpCisKKyAgICBkZWYgX2NoYW5nZV90aGVtZShzZWxmKToKKyAgICAgICAgc2VsZi5zdHlsZS50aGVtZV91c2Uoc2VsZi50aGVtZXNfY29tYm8uZ2V0KCkpCisKKyAgICBkZWYgX3RoZW1lX3NlbF9jaGFuZ2VkKHNlbGYsIHdpZGdldCk6CisgICAgICAgIGlmIHNlbGYudGhlbWVfYXV0b2NoYW5nZS5nZXQoKToKKyAgICAgICAgICAgIHNlbGYuX2NoYW5nZV90aGVtZSgpCisKKyAgICBkZWYgX3NldHVwX3dpZGdldHMoc2VsZik6CisgICAgICAgIHRoZW1lc19sYmwgPSB0dGsuTGFiZWwoc2VsZiwgdGV4dD0iVGhlbWVzIikKKworICAgICAgICB0aGVtZXMgPSBzZWxmLnN0eWxlLnRoZW1lX25hbWVzKCkKKyAgICAgICAgc2VsZi50aGVtZXNfY29tYm8gPSB0dGsuQ29tYm9ib3goc2VsZiwgdmFsdWVzPXRoZW1lcywgc3RhdGU9InJlYWRvbmx5IikKKyAgICAgICAgc2VsZi50aGVtZXNfY29tYm8uc2V0KHRoZW1lc1swXSkKKyAgICAgICAgc2VsZi50aGVtZXNfY29tYm8uYmluZCgiPDxDb21ib2JveFNlbGVjdGVkPj4iLCBzZWxmLl90aGVtZV9zZWxfY2hhbmdlZCkKKworICAgICAgICBjaGFuZ2VfYnRuID0gdHRrLkJ1dHRvbihzZWxmLCB0ZXh0PSdDaGFuZ2UgVGhlbWUnLAorICAgICAgICAgICAgY29tbWFuZD1zZWxmLl9jaGFuZ2VfdGhlbWUpCisKKyAgICAgICAgdGhlbWVfY2hhbmdlX2NoZWNrYnRuID0gdHRrLkNoZWNrYnV0dG9uKHNlbGYsCisgICAgICAgICAgICB0ZXh0PSJDaGFuZ2UgdGhlbWVzIHdoZW4gY29tYm9ib3ggaXRlbSBpcyBhY3RpdmF0ZWQiLAorICAgICAgICAgICAgdmFyaWFibGU9c2VsZi50aGVtZV9hdXRvY2hhbmdlKQorCisgICAgICAgIHRoZW1lc19sYmwuZ3JpZChpcGFkeD02LCBzdGlja3k9InciKQorICAgICAgICBzZWxmLnRoZW1lc19jb21iby5ncmlkKHJvdz0wLCBjb2x1bW49MSwgcGFkeD02LCBzdGlja3k9ImV3IikKKyAgICAgICAgY2hhbmdlX2J0bi5ncmlkKHJvdz0wLCBjb2x1bW49MiwgcGFkeD02LCBzdGlja3k9ImUiKQorICAgICAgICB0aGVtZV9jaGFuZ2VfY2hlY2tidG4uZ3JpZChyb3c9MSwgY29sdW1uc3Bhbj0zLCBzdGlja3k9InciLCBwYWR5PTYpCisKKyAgICAgICAgdG9wID0gc2VsZi53aW5mb190b3BsZXZlbCgpCisgICAgICAgIHRvcC5yb3djb25maWd1cmUoMCwgd2VpZ2h0PTEpCisgICAgICAgIHRvcC5jb2x1bW5jb25maWd1cmUoMCwgd2VpZ2h0PTEpCisgICAgICAgIHNlbGYuY29sdW1uY29uZmlndXJlKDEsIHdlaWdodD0xKQorICAgICAgICBzZWxmLmdyaWQocm93PTAsIGNvbHVtbj0wLCBzdGlja3k9Im5zZXciLCBjb2x1bW5zcGFuPTMsIHJvd3NwYW49MikKKworCitkZWYgbWFpbigpOgorICAgIGFwcCA9IEFwcCgpCisgICAgYXBwLm1hc3Rlci50aXRsZSgiVGhlbWUgU2VsZWN0b3IiKQorICAgIGFwcC5tYWlubG9vcCgpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL3RyZWV2aWV3X211bHRpY29sdW1uLnB5IGIvRGVtby90a2ludGVyL3R0ay90cmVldmlld19tdWx0aWNvbHVtbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGVkYzRmCi0tLSAvZGV2L251bGwKKysrIGIvRGVtby90a2ludGVyL3R0ay90cmVldmlld19tdWx0aWNvbHVtbi5weQpAQCAtMCwwICsxLDEwNyBAQAorIiIiRGVtbyBiYXNlZCBvbiB0aGUgZGVtbyBtY2xpc3QgaW5jbHVkZWQgd2l0aCB0ayBzb3VyY2UgZGlzdHJpYnV0aW9uLiIiIgoraW1wb3J0IFRraW50ZXIKK2ltcG9ydCB0a0ZvbnQKK2ltcG9ydCB0dGsKKwordHJlZV9jb2x1bW5zID0gKCJjb3VudHJ5IiwgImNhcGl0YWwiLCAiY3VycmVuY3kiKQordHJlZV9kYXRhID0gWworICAgICgiQXJnZW50aW5hIiwgICAgICAiQnVlbm9zIEFpcmVzIiwgICAgICJBUlMiKSwKKyAgICAoIkF1c3RyYWxpYSIsICAgICAgIkNhbmJlcnJhIiwgICAgICAgICAiQVVEIiksCisgICAgKCJCcmF6aWwiLCAgICAgICAgICJCcmF6aWxpYSIsICAgICAgICAgIkJSTCIpLAorICAgICgiQ2FuYWRhIiwgICAgICAgICAiT3R0YXdhIiwgICAgICAgICAgICJDQUQiKSwKKyAgICAoIkNoaW5hIiwgICAgICAgICAgIkJlaWppbmciLCAgICAgICAgICAiQ05ZIiksCisgICAgKCJGcmFuY2UiLCAgICAgICAgICJQYXJpcyIsICAgICAgICAgICAgIkVVUiIpLAorICAgICgiR2VybWFueSIsICAgICAgICAiQmVybGluIiwgICAgICAgICAgICJFVVIiKSwKKyAgICAoIkluZGlhIiwgICAgICAgICAgIk5ldyBEZWxoaSIsICAgICAgICAiSU5SIiksCisgICAgKCJJdGFseSIsICAgICAgICAgICJSb21lIiwgICAgICAgICAgICAgIkVVUiIpLAorICAgICgiSmFwYW4iLCAgICAgICAgICAiVG9reW8iLCAgICAgICAgICAgICJKUFkiKSwKKyAgICAoIk1leGljbyIsICAgICAgICAgIk1leGljbyBDaXR5IiwgICAgICAiTVhOIiksCisgICAgKCJSdXNzaWEiLCAgICAgICAgICJNb3Njb3ciLCAgICAgICAgICAgIlJVQiIpLAorICAgICgiU291dGggQWZyaWNhIiwgICAiUHJldG9yaWEiLCAgICAgICAgICJaQVIiKSwKKyAgICAoIlVuaXRlZCBLaW5nZG9tIiwgIkxvbmRvbiIsICAgICAgICAgICAiR0JQIiksCisgICAgKCJVbml0ZWQgU3RhdGVzIiwgICJXYXNoaW5ndG9uLCBELkMuIiwgIlVTRCIpCisgICAgXQorCitkZWYgc29ydGJ5KHRyZWUsIGNvbCwgZGVzY2VuZGluZyk6CisgICAgIiIiU29ydCB0cmVlIGNvbnRlbnRzIHdoZW4gYSBjb2x1bW4gaXMgY2xpY2tlZCBvbi4iIiIKKyAgICAjIGdyYWIgdmFsdWVzIHRvIHNvcnQKKyAgICBkYXRhID0gWyh0cmVlLnNldChjaGlsZCwgY29sKSwgY2hpbGQpIGZvciBjaGlsZCBpbiB0cmVlLmdldF9jaGlsZHJlbignJyldCisKKyAgICAjIHJlb3JkZXIgZGF0YQorICAgIGRhdGEuc29ydChyZXZlcnNlPWRlc2NlbmRpbmcpCisgICAgZm9yIGluZHgsIGl0ZW0gaW4gZW51bWVyYXRlKGRhdGEpOgorICAgICAgICB0cmVlLm1vdmUoaXRlbVsxXSwgJycsIGluZHgpCisKKyAgICAjIHN3aXRjaCB0aGUgaGVhZGluZyBzbyB0aGF0IGl0IHdpbGwgc29ydCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uCisgICAgdHJlZS5oZWFkaW5nKGNvbCwKKyAgICAgICAgY29tbWFuZD1sYW1iZGEgY29sPWNvbDogc29ydGJ5KHRyZWUsIGNvbCwgaW50KG5vdCBkZXNjZW5kaW5nKSkpCisKK2NsYXNzIEFwcChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi50cmVlID0gTm9uZQorICAgICAgICBzZWxmLl9zZXR1cF93aWRnZXRzKCkKKyAgICAgICAgc2VsZi5fYnVpbGRfdHJlZSgpCisKKyAgICBkZWYgX3NldHVwX3dpZGdldHMoc2VsZik6CisgICAgICAgIG1zZyA9IHR0ay5MYWJlbCh3cmFwbGVuZ3RoPSI0aSIsIGp1c3RpZnk9ImxlZnQiLCBhbmNob3I9Im4iLAorICAgICAgICAgICAgcGFkZGluZz0oMTAsIDIsIDEwLCA2KSwKKyAgICAgICAgICAgIHRleHQ9KCJUdGsgaXMgdGhlIG5ldyBUayB0aGVtZWQgd2lkZ2V0IHNldC4gT25lIG9mIHRoZSB3aWRnZXRzIGl0ICIKKyAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyBpcyBhIHRyZWUgd2lkZ2V0LCB3aGljaCBjYW4gYmUgY29uZmlndXJlZCB0byAiCisgICAgICAgICAgICAgICAgICAiZGlzcGxheSBtdWx0aXBsZSBjb2x1bW5zIG9mIGluZm9ybWF0aW9uYWwgZGF0YSB3aXRob3V0ICIKKyAgICAgICAgICAgICAgICAgICJkaXNwbGF5aW5nIHRoZSB0cmVlIGl0c2VsZi4gVGhpcyBpcyBhIHNpbXBsZSB3YXkgdG8gYnVpbGQgIgorICAgICAgICAgICAgICAgICAgImEgbGlzdGJveCB0aGF0IGhhcyBtdWx0aXBsZSBjb2x1bW5zLiBDbGlja2luZyBvbiB0aGUgIgorICAgICAgICAgICAgICAgICAgImhlYWRpbmcgZm9yIGEgY29sdW1uIHdpbGwgc29ydCB0aGUgZGF0YSBieSB0aGF0IGNvbHVtbi4gIgorICAgICAgICAgICAgICAgICAgIllvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zIGJ5IGRyYWdnaW5nICIKKyAgICAgICAgICAgICAgICAgICJ0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGVtLiIpKQorICAgICAgICBtc2cucGFjayhmaWxsPSd4JykKKworICAgICAgICBjb250YWluZXIgPSB0dGsuRnJhbWUoKQorICAgICAgICBjb250YWluZXIucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPVRydWUpCisKKyAgICAgICAgIyBYWFggU291bmRzIGxpa2UgYSBnb29kIHN1cHBvcnQgY2xhc3Mgd291bGQgYmUgb25lIGZvciBjb25zdHJ1Y3RpbmcKKyAgICAgICAgIyAgICAgYSB0cmVldmlldyB3aXRoIHNjcm9sbGJhcnMuCisgICAgICAgIHNlbGYudHJlZSA9IHR0ay5UcmVldmlldyhjb2x1bW5zPXRyZWVfY29sdW1ucywgc2hvdz0iaGVhZGluZ3MiKQorICAgICAgICB2c2IgPSB0dGsuU2Nyb2xsYmFyKG9yaWVudD0idmVydGljYWwiLCBjb21tYW5kPXNlbGYudHJlZS55dmlldykKKyAgICAgICAgaHNiID0gdHRrLlNjcm9sbGJhcihvcmllbnQ9Imhvcml6b250YWwiLCBjb21tYW5kPXNlbGYudHJlZS54dmlldykKKyAgICAgICAgc2VsZi50cmVlLmNvbmZpZ3VyZSh5c2Nyb2xsY29tbWFuZD12c2Iuc2V0LCB4c2Nyb2xsY29tbWFuZD1oc2Iuc2V0KQorICAgICAgICBzZWxmLnRyZWUuZ3JpZChjb2x1bW49MCwgcm93PTAsIHN0aWNreT0nbnNldycsIGluXz1jb250YWluZXIpCisgICAgICAgIHZzYi5ncmlkKGNvbHVtbj0xLCByb3c9MCwgc3RpY2t5PSducycsIGluXz1jb250YWluZXIpCisgICAgICAgIGhzYi5ncmlkKGNvbHVtbj0wLCByb3c9MSwgc3RpY2t5PSdldycsIGluXz1jb250YWluZXIpCisKKyAgICAgICAgY29udGFpbmVyLmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICBjb250YWluZXIuZ3JpZF9yb3djb25maWd1cmUoMCwgd2VpZ2h0PTEpCisKKyAgICBkZWYgX2J1aWxkX3RyZWUoc2VsZik6CisgICAgICAgIGZvciBjb2wgaW4gdHJlZV9jb2x1bW5zOgorICAgICAgICAgICAgc2VsZi50cmVlLmhlYWRpbmcoY29sLCB0ZXh0PWNvbC50aXRsZSgpLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhIGM9Y29sOiBzb3J0Ynkoc2VsZi50cmVlLCBjLCAwKSkKKyAgICAgICAgICAgICMgWFhYIHRrRm9udC5Gb250KCkubWVhc3VyZSBleHBlY3RlZCBhcmdzIGFyZSBpbmNvcnJlY3QgYWNjb3JkaW5nCisgICAgICAgICAgICAjICAgICB0byB0aGUgVGsgZG9jcworICAgICAgICAgICAgc2VsZi50cmVlLmNvbHVtbihjb2wsIHdpZHRoPXRrRm9udC5Gb250KCkubWVhc3VyZShjb2wudGl0bGUoKSkpCisKKyAgICAgICAgZm9yIGl0ZW0gaW4gdHJlZV9kYXRhOgorICAgICAgICAgICAgc2VsZi50cmVlLmluc2VydCgnJywgJ2VuZCcsIHZhbHVlcz1pdGVtKQorCisgICAgICAgICAgICAjIGFkanVzdCBjb2x1bW5zIGxlbmdodHMgaWYgbmVjZXNzYXJ5CisgICAgICAgICAgICBmb3IgaW5keCwgdmFsIGluIGVudW1lcmF0ZShpdGVtKToKKyAgICAgICAgICAgICAgICBpbGVuID0gdGtGb250LkZvbnQoKS5tZWFzdXJlKHZhbCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnRyZWUuY29sdW1uKHRyZWVfY29sdW1uc1tpbmR4XSwgd2lkdGg9Tm9uZSkgPCBpbGVuOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnRyZWUuY29sdW1uKHRyZWVfY29sdW1uc1tpbmR4XSwgd2lkdGg9aWxlbikKKworZGVmIG1haW4oKToKKyAgICByb290ID0gVGtpbnRlci5UaygpCisgICAgcm9vdC53bV90aXRsZSgiTXVsdGktQ29sdW1uIExpc3QiKQorICAgIHJvb3Qud21faWNvbm5hbWUoIm1jbGlzdCIpCisKKyAgICBpbXBvcnQgcGxhc3Rpa190aGVtZQorICAgIHRyeToKKyAgICAgICAgcGxhc3Rpa190aGVtZS5pbnN0YWxsKCd+L3RpbGUtdGhlbWVzL3BsYXN0aWsvcGxhc3RpaycpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oInBsYXN0aWsgdGhlbWUgYmVpbmcgdXNlZCB3aXRob3V0IGltYWdlcyIpCisKKyAgICBhcHAgPSBBcHAoKQorICAgIHJvb3QubWFpbmxvb3AoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay90dGtjYWxlbmRhci5weSBiL0RlbW8vdGtpbnRlci90dGsvdHRrY2FsZW5kYXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFhNDVjNQotLS0gL2Rldi9udWxsCisrKyBiL0RlbW8vdGtpbnRlci90dGsvdHRrY2FsZW5kYXIucHkKQEAgLTAsMCArMSwyMzEgQEAKKyIiIgorU2ltcGxlIGNhbGVuZGFyIHVzaW5nIHR0ayBUcmVldmlldyB0b2dldGhlciB3aXRoIGNhbGVuZGFyIGFuZCBkYXRldGltZQorY2xhc3Nlcy4KKyIiIgoraW1wb3J0IGNhbGVuZGFyCitpbXBvcnQgVGtpbnRlcgoraW1wb3J0IHRrRm9udAoraW1wb3J0IHR0aworCitkZWYgZ2V0X2NhbGVuZGFyKGxvY2FsZSwgZndkYXkpOgorICAgICMgaW5zdGFudGlhdGUgcHJvcGVyIGNhbGVuZGFyIGNsYXNzCisgICAgaWYgbG9jYWxlIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBjYWxlbmRhci5UZXh0Q2FsZW5kYXIoZndkYXkpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGNhbGVuZGFyLkxvY2FsZVRleHRDYWxlbmRhcihmd2RheSwgbG9jYWxlKQorCitjbGFzcyBDYWxlbmRhcih0dGsuRnJhbWUpOgorICAgICMgWFhYIFRvRG86IGNnZXQgYW5kIGNvbmZpZ3VyZQorCisgICAgZGF0ZXRpbWUgPSBjYWxlbmRhci5kYXRldGltZS5kYXRldGltZQorICAgIHRpbWVkZWx0YSA9IGNhbGVuZGFyLmRhdGV0aW1lLnRpbWVkZWx0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIGxvY2FsZSwgZmlyc3R3ZWVrZGF5LCB5ZWFyLCBtb250aCwgc2VsZWN0YmFja2dyb3VuZCwKKyAgICAgICAgICAgIHNlbGVjdGZvcmVncm91bmQKKyAgICAgICAgIiIiCisgICAgICAgICMgcmVtb3ZlIGN1c3RvbSBvcHRpb25zIGZyb20ga3cgYmVmb3JlIGluaXRpYWxpemF0aW5nIHR0ay5GcmFtZQorICAgICAgICBmd2RheSA9IGt3LnBvcCgnZmlyc3R3ZWVrZGF5JywgY2FsZW5kYXIuTU9OREFZKQorICAgICAgICB5ZWFyID0ga3cucG9wKCd5ZWFyJywgc2VsZi5kYXRldGltZS5ub3coKS55ZWFyKQorICAgICAgICBtb250aCA9IGt3LnBvcCgnbW9udGgnLCBzZWxmLmRhdGV0aW1lLm5vdygpLm1vbnRoKQorICAgICAgICBsb2NhbGUgPSBrdy5wb3AoJ2xvY2FsZScsIE5vbmUpCisgICAgICAgIHNlbF9iZyA9IGt3LnBvcCgnc2VsZWN0YmFja2dyb3VuZCcsICcjZWNmZmM0JykKKyAgICAgICAgc2VsX2ZnID0ga3cucG9wKCdzZWxlY3Rmb3JlZ3JvdW5kJywgJyMwNTY0MGUnKQorCisgICAgICAgIHNlbGYuX2RhdGUgPSBzZWxmLmRhdGV0aW1lKHllYXIsIG1vbnRoLCAxKQorICAgICAgICBzZWxmLl9zZWxlY3Rpb24gPSBOb25lICMgbm8gZGF0ZSBzZWxlY3RlZAorCisgICAgICAgIHR0ay5GcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICoqa3cpCisKKyAgICAgICAgc2VsZi5fY2FsID0gZ2V0X2NhbGVuZGFyKGxvY2FsZSwgZndkYXkpCisKKyAgICAgICAgc2VsZi5fX3NldHVwX3N0eWxlcygpICAgICAgICMgY3JlYXRlcyBjdXN0b20gc3R5bGVzCisgICAgICAgIHNlbGYuX19wbGFjZV93aWRnZXRzKCkgICAgICAjIHBhY2svZ3JpZCB1c2VkIHdpZGdldHMKKyAgICAgICAgc2VsZi5fX2NvbmZpZ19jYWxlbmRhcigpICAgICMgYWRqdXN0IGNhbGVuZGFyIGNvbHVtbnMgYW5kIHNldHVwIHRhZ3MKKyAgICAgICAgIyBjb25maWd1cmUgYSBjYW52YXMsIGFuZCBwcm9wZXIgYmluZGluZ3MsIGZvciBzZWxlY3RpbmcgZGF0ZXMKKyAgICAgICAgc2VsZi5fX3NldHVwX3NlbGVjdGlvbihzZWxfYmcsIHNlbF9mZykKKworICAgICAgICAjIHN0b3JlIGl0ZW1zIGlkcywgdXNlZCBmb3IgaW5zZXJ0aW9uIGxhdGVyCisgICAgICAgIHNlbGYuX2l0ZW1zID0gW3NlbGYuX2NhbGVuZGFyLmluc2VydCgnJywgJ2VuZCcsIHZhbHVlcz0nJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSg2KV0KKyAgICAgICAgIyBpbnNlcnQgZGF0ZXMgaW4gdGhlIGN1cnJlbnRseSBlbXB0eSBjYWxlbmRhcgorICAgICAgICBzZWxmLl9idWlsZF9jYWxlbmRhcigpCisKKyAgICAgICAgIyBzZXQgdGhlIG1pbmltYWwgc2l6ZSBmb3IgdGhlIHdpZGdldAorICAgICAgICBzZWxmLl9jYWxlbmRhci5iaW5kKCc8TWFwPicsIHNlbGYuX19taW5zaXplKQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGl0ZW0sIHZhbHVlKToKKyAgICAgICAgaWYgaXRlbSBpbiAoJ3llYXInLCAnbW9udGgnKToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJhdHRyaWJ1dGUgJyVzJyBpcyBub3Qgd3JpdGVhYmxlIiAlIGl0ZW0pCisgICAgICAgIGVsaWYgaXRlbSA9PSAnc2VsZWN0YmFja2dyb3VuZCc6CisgICAgICAgICAgICBzZWxmLl9jYW52YXNbJ2JhY2tncm91bmQnXSA9IHZhbHVlCisgICAgICAgIGVsaWYgaXRlbSA9PSAnc2VsZWN0Zm9yZWdyb3VuZCc6CisgICAgICAgICAgICBzZWxmLl9jYW52YXMuaXRlbWNvbmZpZ3VyZShzZWxmLl9jYW52YXMudGV4dCwgaXRlbT12YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHR0ay5GcmFtZS5fX3NldGl0ZW1fXyhzZWxmLCBpdGVtLCB2YWx1ZSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpdGVtKToKKyAgICAgICAgaWYgaXRlbSBpbiAoJ3llYXInLCAnbW9udGgnKToKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX2RhdGUsIGl0ZW0pCisgICAgICAgIGVsaWYgaXRlbSA9PSAnc2VsZWN0YmFja2dyb3VuZCc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FudmFzWydiYWNrZ3JvdW5kJ10KKyAgICAgICAgZWxpZiBpdGVtID09ICdzZWxlY3Rmb3JlZ3JvdW5kJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jYW52YXMuaXRlbWNnZXQoc2VsZi5fY2FudmFzLnRleHQsICdmaWxsJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHIgPSB0dGsudGNsb2Jqc190b19weSh7aXRlbTogdHRrLkZyYW1lLl9fZ2V0aXRlbV9fKHNlbGYsIGl0ZW0pfSkKKyAgICAgICAgICAgIHJldHVybiByW2l0ZW1dCisKKyAgICBkZWYgX19zZXR1cF9zdHlsZXMoc2VsZik6CisgICAgICAgICMgY3VzdG9tIHR0ayBzdHlsZXMKKyAgICAgICAgc3R5bGUgPSB0dGsuU3R5bGUoc2VsZi5tYXN0ZXIpCisgICAgICAgIGFycm93X2xheW91dCA9IGxhbWJkYSBkaXI6ICgKKyAgICAgICAgICAgIFsoJ0J1dHRvbi5mb2N1cycsIHsnY2hpbGRyZW4nOiBbKCdCdXR0b24uJXNhcnJvdycgJSBkaXIsIE5vbmUpXX0pXQorICAgICAgICApCisgICAgICAgIHN0eWxlLmxheW91dCgnTC5UQnV0dG9uJywgYXJyb3dfbGF5b3V0KCdsZWZ0JykpCisgICAgICAgIHN0eWxlLmxheW91dCgnUi5UQnV0dG9uJywgYXJyb3dfbGF5b3V0KCdyaWdodCcpKQorCisgICAgZGVmIF9fcGxhY2Vfd2lkZ2V0cyhzZWxmKToKKyAgICAgICAgIyBoZWFkZXIgZnJhbWUgYW5kIGl0cyB3aWRnZXRzCisgICAgICAgIGhmcmFtZSA9IHR0ay5GcmFtZShzZWxmKQorICAgICAgICBsYnRuID0gdHRrLkJ1dHRvbihoZnJhbWUsIHN0eWxlPSdMLlRCdXR0b24nLCBjb21tYW5kPXNlbGYuX3ByZXZfbW9udGgpCisgICAgICAgIHJidG4gPSB0dGsuQnV0dG9uKGhmcmFtZSwgc3R5bGU9J1IuVEJ1dHRvbicsIGNvbW1hbmQ9c2VsZi5fbmV4dF9tb250aCkKKyAgICAgICAgc2VsZi5faGVhZGVyID0gdHRrLkxhYmVsKGhmcmFtZSwgd2lkdGg9MTUsIGFuY2hvcj0nY2VudGVyJykKKyAgICAgICAgIyB0aGUgY2FsZW5kYXIKKyAgICAgICAgc2VsZi5fY2FsZW5kYXIgPSB0dGsuVHJlZXZpZXcoc2hvdz0nJywgc2VsZWN0bW9kZT0nbm9uZScsIGhlaWdodD03KQorCisgICAgICAgICMgcGFjayB0aGUgd2lkZ2V0cworICAgICAgICBoZnJhbWUucGFjayhpbl89c2VsZiwgc2lkZT0ndG9wJywgcGFkeT00LCBhbmNob3I9J2NlbnRlcicpCisgICAgICAgIGxidG4uZ3JpZChpbl89aGZyYW1lKQorICAgICAgICBzZWxmLl9oZWFkZXIuZ3JpZChpbl89aGZyYW1lLCBjb2x1bW49MSwgcm93PTAsIHBhZHg9MTIpCisgICAgICAgIHJidG4uZ3JpZChpbl89aGZyYW1lLCBjb2x1bW49Miwgcm93PTApCisgICAgICAgIHNlbGYuX2NhbGVuZGFyLnBhY2soaW5fPXNlbGYsIGV4cGFuZD0xLCBmaWxsPSdib3RoJywgc2lkZT0nYm90dG9tJykKKworICAgIGRlZiBfX2NvbmZpZ19jYWxlbmRhcihzZWxmKToKKyAgICAgICAgY29scyA9IHNlbGYuX2NhbC5mb3JtYXR3ZWVraGVhZGVyKDMpLnNwbGl0KCkKKyAgICAgICAgc2VsZi5fY2FsZW5kYXJbJ2NvbHVtbnMnXSA9IGNvbHMKKyAgICAgICAgc2VsZi5fY2FsZW5kYXIudGFnX2NvbmZpZ3VyZSgnaGVhZGVyJywgYmFja2dyb3VuZD0nZ3JleTkwJykKKyAgICAgICAgc2VsZi5fY2FsZW5kYXIuaW5zZXJ0KCcnLCAnZW5kJywgdmFsdWVzPWNvbHMsIHRhZz0naGVhZGVyJykKKyAgICAgICAgIyBhZGp1c3QgaXRzIGNvbHVtbnMgd2lkdGgKKyAgICAgICAgZm9udCA9IHRrRm9udC5Gb250KCkKKyAgICAgICAgbWF4d2lkdGggPSBtYXgoZm9udC5tZWFzdXJlKGNvbCkgZm9yIGNvbCBpbiBjb2xzKQorICAgICAgICBmb3IgY29sIGluIGNvbHM6CisgICAgICAgICAgICBzZWxmLl9jYWxlbmRhci5jb2x1bW4oY29sLCB3aWR0aD1tYXh3aWR0aCwgbWlud2lkdGg9bWF4d2lkdGgsCisgICAgICAgICAgICAgICAgYW5jaG9yPSdlJykKKworICAgIGRlZiBfX3NldHVwX3NlbGVjdGlvbihzZWxmLCBzZWxfYmcsIHNlbF9mZyk6CisgICAgICAgIHNlbGYuX2ZvbnQgPSB0a0ZvbnQuRm9udCgpCisgICAgICAgIHNlbGYuX2NhbnZhcyA9IGNhbnZhcyA9IFRraW50ZXIuQ2FudmFzKHNlbGYuX2NhbGVuZGFyLAorICAgICAgICAgICAgYmFja2dyb3VuZD1zZWxfYmcsIGJvcmRlcndpZHRoPTAsIGhpZ2hsaWdodHRoaWNrbmVzcz0wKQorICAgICAgICBjYW52YXMudGV4dCA9IGNhbnZhcy5jcmVhdGVfdGV4dCgwLCAwLCBmaWxsPXNlbF9mZywgYW5jaG9yPSd3JykKKworICAgICAgICBjYW52YXMuYmluZCgnPEJ1dHRvblByZXNzLTE+JywgbGFtYmRhIGV2dDogY2FudmFzLnBsYWNlX2ZvcmdldCgpKQorICAgICAgICBzZWxmLl9jYWxlbmRhci5iaW5kKCc8Q29uZmlndXJlPicsIGxhbWJkYSBldnQ6IGNhbnZhcy5wbGFjZV9mb3JnZXQoKSkKKyAgICAgICAgc2VsZi5fY2FsZW5kYXIuYmluZCgnPEJ1dHRvblByZXNzLTE+Jywgc2VsZi5fcHJlc3NlZCkKKworICAgIGRlZiBfX21pbnNpemUoc2VsZiwgZXZ0KToKKyAgICAgICAgd2lkdGgsIGhlaWdodCA9IHNlbGYuX2NhbGVuZGFyLm1hc3Rlci5nZW9tZXRyeSgpLnNwbGl0KCd4JykKKyAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0WzpoZWlnaHQuaW5kZXgoJysnKV0KKyAgICAgICAgc2VsZi5fY2FsZW5kYXIubWFzdGVyLm1pbnNpemUod2lkdGgsIGhlaWdodCkKKworICAgIGRlZiBfYnVpbGRfY2FsZW5kYXIoc2VsZik6CisgICAgICAgIHllYXIsIG1vbnRoID0gc2VsZi5fZGF0ZS55ZWFyLCBzZWxmLl9kYXRlLm1vbnRoCisKKyAgICAgICAgIyB1cGRhdGUgaGVhZGVyIHRleHQgKE1vbnRoLCBZRUFSKQorICAgICAgICBoZWFkZXIgPSBzZWxmLl9jYWwuZm9ybWF0bW9udGhuYW1lKHllYXIsIG1vbnRoLCAwKQorICAgICAgICBzZWxmLl9oZWFkZXJbJ3RleHQnXSA9IGhlYWRlci50aXRsZSgpCisKKyAgICAgICAgIyB1cGRhdGUgY2FsZW5kYXIgc2hvd24gZGF0ZXMKKyAgICAgICAgY2FsID0gc2VsZi5fY2FsLm1vbnRoZGF5c2NhbGVuZGFyKHllYXIsIG1vbnRoKQorICAgICAgICBmb3IgaW5keCwgaXRlbSBpbiBlbnVtZXJhdGUoc2VsZi5faXRlbXMpOgorICAgICAgICAgICAgd2VlayA9IGNhbFtpbmR4XSBpZiBpbmR4IDwgbGVuKGNhbCkgZWxzZSBbXQorICAgICAgICAgICAgZm10X3dlZWsgPSBbKCclMDJkJyAlIGRheSkgaWYgZGF5IGVsc2UgJycgZm9yIGRheSBpbiB3ZWVrXQorICAgICAgICAgICAgc2VsZi5fY2FsZW5kYXIuaXRlbShpdGVtLCB2YWx1ZXM9Zm10X3dlZWspCisKKyAgICBkZWYgX3Nob3dfc2VsZWN0aW9uKHNlbGYsIHRleHQsIGJib3gpOgorICAgICAgICAiIiJDb25maWd1cmUgY2FudmFzIGZvciBhIG5ldyBzZWxlY3Rpb24uIiIiCisgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQgPSBiYm94CisKKyAgICAgICAgdGV4dHcgPSBzZWxmLl9mb250Lm1lYXN1cmUodGV4dCkKKworICAgICAgICBjYW52YXMgPSBzZWxmLl9jYW52YXMKKyAgICAgICAgY2FudmFzLmNvbmZpZ3VyZSh3aWR0aD13aWR0aCwgaGVpZ2h0PWhlaWdodCkKKyAgICAgICAgY2FudmFzLmNvb3JkcyhjYW52YXMudGV4dCwgd2lkdGggLSB0ZXh0dywgaGVpZ2h0IC8gMiAtIDEpCisgICAgICAgIGNhbnZhcy5pdGVtY29uZmlndXJlKGNhbnZhcy50ZXh0LCB0ZXh0PXRleHQpCisgICAgICAgIGNhbnZhcy5wbGFjZShpbl89c2VsZi5fY2FsZW5kYXIsIHg9eCwgeT15KQorCisgICAgIyBDYWxsYmFja3MKKworICAgIGRlZiBfcHJlc3NlZChzZWxmLCBldnQpOgorICAgICAgICAiIiJDbGlja2VkIHNvbWV3aGVyZSBpbiB0aGUgY2FsZW5kYXIuIiIiCisgICAgICAgIHgsIHksIHdpZGdldCA9IGV2dC54LCBldnQueSwgZXZ0LndpZGdldAorICAgICAgICBpdGVtID0gd2lkZ2V0LmlkZW50aWZ5X3Jvdyh5KQorICAgICAgICBjb2x1bW4gPSB3aWRnZXQuaWRlbnRpZnlfY29sdW1uKHgpCisKKyAgICAgICAgaWYgbm90IGNvbHVtbiBvciBub3QgaXRlbSBpbiBzZWxmLl9pdGVtczoKKyAgICAgICAgICAgICMgY2xpY2tlZCBpbiB0aGUgd2Vla2RheXMgcm93IG9yIGp1c3Qgb3V0c2lkZSB0aGUgY29sdW1ucworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaXRlbV92YWx1ZXMgPSB3aWRnZXQuaXRlbShpdGVtKVsndmFsdWVzJ10KKyAgICAgICAgaWYgbm90IGxlbihpdGVtX3ZhbHVlcyk6ICMgcm93IGlzIGVtcHR5IGZvciB0aGlzIG1vbnRoCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0ZXh0ID0gaXRlbV92YWx1ZXNbaW50KGNvbHVtblsxXSkgLSAxXQorICAgICAgICBpZiBub3QgdGV4dDogIyBkYXRlIGlzIGVtcHR5CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBiYm94ID0gd2lkZ2V0LmJib3goaXRlbSwgY29sdW1uKQorICAgICAgICBpZiBub3QgYmJveDogIyBjYWxlbmRhciBub3QgdmlzaWJsZSB5ZXQKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgdXBkYXRlIGFuZCB0aGVuIHNob3cgc2VsZWN0aW9uCisgICAgICAgIHRleHQgPSAnJTAyZCcgJSB0ZXh0CisgICAgICAgIHNlbGYuX3NlbGVjdGlvbiA9ICh0ZXh0LCBpdGVtLCBjb2x1bW4pCisgICAgICAgIHNlbGYuX3Nob3dfc2VsZWN0aW9uKHRleHQsIGJib3gpCisKKyAgICBkZWYgX3ByZXZfbW9udGgoc2VsZik6CisgICAgICAgICIiIlVwZGF0ZWQgY2FsZW5kYXIgdG8gc2hvdyB0aGUgcHJldmlvdXMgbW9udGguIiIiCisgICAgICAgIHNlbGYuX2NhbnZhcy5wbGFjZV9mb3JnZXQoKQorCisgICAgICAgIHNlbGYuX2RhdGUgPSBzZWxmLl9kYXRlIC0gc2VsZi50aW1lZGVsdGEoZGF5cz0xKQorICAgICAgICBzZWxmLl9kYXRlID0gc2VsZi5kYXRldGltZShzZWxmLl9kYXRlLnllYXIsIHNlbGYuX2RhdGUubW9udGgsIDEpCisgICAgICAgIHNlbGYuX2J1aWxkX2NhbGVuZGFyKCkgIyByZWNvbnN0dWN0IGNhbGVuZGFyCisKKyAgICBkZWYgX25leHRfbW9udGgoc2VsZik6CisgICAgICAgICIiIlVwZGF0ZSBjYWxlbmRhciB0byBzaG93IHRoZSBuZXh0IG1vbnRoLiIiIgorICAgICAgICBzZWxmLl9jYW52YXMucGxhY2VfZm9yZ2V0KCkKKworICAgICAgICB5ZWFyLCBtb250aCA9IHNlbGYuX2RhdGUueWVhciwgc2VsZi5fZGF0ZS5tb250aAorICAgICAgICBzZWxmLl9kYXRlID0gc2VsZi5fZGF0ZSArIHNlbGYudGltZWRlbHRhKAorICAgICAgICAgICAgZGF5cz1jYWxlbmRhci5tb250aHJhbmdlKHllYXIsIG1vbnRoKVsxXSArIDEpCisgICAgICAgIHNlbGYuX2RhdGUgPSBzZWxmLmRhdGV0aW1lKHNlbGYuX2RhdGUueWVhciwgc2VsZi5fZGF0ZS5tb250aCwgMSkKKyAgICAgICAgc2VsZi5fYnVpbGRfY2FsZW5kYXIoKSAjIHJlY29uc3RydWN0IGNhbGVuZGFyCisKKyAgICAjIFByb3BlcnRpZXMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZWxlY3Rpb24oc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIGRhdGV0aW1lIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBzZWxlY3RlZCBkYXRlLiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fc2VsZWN0aW9uOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICB5ZWFyLCBtb250aCA9IHNlbGYuX2RhdGUueWVhciwgc2VsZi5fZGF0ZS5tb250aAorICAgICAgICByZXR1cm4gc2VsZi5kYXRldGltZSh5ZWFyLCBtb250aCwgaW50KHNlbGYuX3NlbGVjdGlvblswXSkpCisKK2RlZiB0ZXN0KCk6CisgICAgaW1wb3J0IHN5cworICAgIHJvb3QgPSBUa2ludGVyLlRrKCkKKyAgICByb290LnRpdGxlKCdUdGsgQ2FsZW5kYXInKQorICAgIHR0a2NhbCA9IENhbGVuZGFyKGZpcnN0d2Vla2RheT1jYWxlbmRhci5TVU5EQVkpCisgICAgdHRrY2FsLnBhY2soZXhwYW5kPTEsIGZpbGw9J2JvdGgnKQorCisgICAgaWYgJ3dpbicgbm90IGluIHN5cy5wbGF0Zm9ybToKKyAgICAgICAgc3R5bGUgPSB0dGsuU3R5bGUoKQorICAgICAgICBzdHlsZS50aGVtZV91c2UoJ2NsYW0nKQorCisgICAgcm9vdC5tYWlubG9vcCgpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdCgpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL3dpZGdldF9zdGF0ZS5weSBiL0RlbW8vdGtpbnRlci90dGsvd2lkZ2V0X3N0YXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MmMyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL3dpZGdldF9zdGF0ZS5weQpAQCAtMCwwICsxLDgzIEBACisiIiJTYW1wbGUgZGVtbyBzaG93aW5nIHdpZGdldCBzdGF0ZXMgYW5kIHNvbWUgZm9udCBzdHlsaW5nLiIiIgoraW1wb3J0IHR0aworCitzdGF0ZXMgPSBbJ2FjdGl2ZScsICdkaXNhYmxlZCcsICdmb2N1cycsICdwcmVzc2VkJywgJ3NlbGVjdGVkJywKKyAgICAgICAgICAnYmFja2dyb3VuZCcsICdyZWFkb25seScsICdhbHRlcm5hdGUnLCAnaW52YWxpZCddCisKK2ZvciBzdGF0ZSBpbiBzdGF0ZXNbOl06CisgICAgc3RhdGVzLmFwcGVuZCgiISIgKyBzdGF0ZSkKKworZGVmIHJlc2V0X3N0YXRlKHdpZGdldCk6CisgICAgbm9zdGF0ZSA9IHN0YXRlc1tsZW4oc3RhdGVzKSAvLyAyOl0KKyAgICB3aWRnZXQuc3RhdGUobm9zdGF0ZSkKKworY2xhc3MgQXBwKHR0ay5GcmFtZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpdGxlPU5vbmUpOgorICAgICAgICB0dGsuRnJhbWUuX19pbml0X18oc2VsZiwgYm9yZGVyd2lkdGg9NikKKyAgICAgICAgc2VsZi5tYXN0ZXIudGl0bGUodGl0bGUpCisKKyAgICAgICAgc2VsZi5zdHlsZSA9IHR0ay5TdHlsZSgpCisKKyAgICAgICAgIyBnZXQgZGVmYXVsdCBmb250IHNpemUgYW5kIGZhbWlseQorICAgICAgICBidG5fZm9udCA9IHNlbGYuc3R5bGUubG9va3VwKCJUQnV0dG9uIiwgImZvbnQiKQorICAgICAgICBmc2l6ZSA9IHN0cihzZWxmLnRrLmV2YWwoImZvbnQgY29uZmlndXJlICVzIC1zaXplIiAlIGJ0bl9mb250KSkKKyAgICAgICAgc2VsZi5mb250X2ZhbWlseSA9IHNlbGYudGsuZXZhbCgiZm9udCBjb25maWd1cmUgJXMgLWZhbWlseSIgJSBidG5fZm9udCkKKyAgICAgICAgaWYgJyAnIGluIHNlbGYuZm9udF9mYW1pbHk6CisgICAgICAgICAgICBzZWxmLmZvbnRfZmFtaWx5ID0gJ3slc30nICUgc2VsZi5mb250X2ZhbWlseQorICAgICAgICBzZWxmLmZzaXplX3ByZWZpeCA9IGZzaXplWzBdIGlmIGZzaXplWzBdID09ICctJyBlbHNlICcnCisgICAgICAgIHNlbGYuYmFzZV9mc2l6ZSA9IGludChmc2l6ZVsxIGlmIGZzaXplWzBdID09ICctJyBlbHNlIDA6XSkKKworICAgICAgICAjIGEgbGlzdCB0byBob2xkIGFsbCB0aGUgd2lkZ2V0cyB0aGF0IHdpbGwgaGF2ZSB0aGVpciBzdGF0ZXMgY2hhbmdlZAorICAgICAgICBzZWxmLnVwZGF0ZV93aWRnZXRzID0gW10KKworICAgICAgICBzZWxmLl9zZXR1cF93aWRnZXRzKCkKKworICAgIGRlZiBfc2V0X2ZvbnQoc2VsZiwgZXh0cmE9MCk6CisgICAgICAgIHNlbGYuc3R5bGUuY29uZmlndXJlKCJUQnV0dG9uIiwgZm9udD0iJXMgJXMlZCIgJSAoc2VsZi5mb250X2ZhbWlseSwKKyAgICAgICAgICAgIHNlbGYuZnNpemVfcHJlZml4LCBzZWxmLmJhc2VfZnNpemUgKyBleHRyYSkpCisKKyAgICBkZWYgX25ld19zdGF0ZShzZWxmLCB3aWRnZXQsIG5ld3RleHQpOgorICAgICAgICB3aWRnZXQgPSBzZWxmLm5hbWV0b3dpZGdldCh3aWRnZXQpCisKKyAgICAgICAgaWYgbm90IG5ld3RleHQ6CisgICAgICAgICAgICBnb29kc3RhdGVzID0gWyJkaXNhYmxlZCJdCisgICAgICAgICAgICBmb250X2V4dHJhID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBzZXQgd2lkZ2V0IHN0YXRlIGFjY29yZGluZyB0byB3aGF0IGhhcyBiZWVuIGVudGVyZWQgaW4gdGhlIGVudHJ5CisgICAgICAgICAgICBuZXdzdGF0ZXMgPSBzZXQobmV3dGV4dC5zcGxpdCgpKSAjIGVsaW1pbmF0ZSBkdXBsaWNhdGVzCisKKyAgICAgICAgICAgICMga2VlcCBvbmx5IHRoZSB2YWxpZCBzdGF0ZXMKKyAgICAgICAgICAgIGdvb2RzdGF0ZXMgPSBbc3RhdGUgZm9yIHN0YXRlIGluIG5ld3N0YXRlcyBpZiBzdGF0ZSBpbiBzdGF0ZXNdCisgICAgICAgICAgICAjIGRlZmluZSBhIG5ldyBmb250IHNpemUgYmFzZWQgb24gYW1vdW50IG9mIHN0YXRlcworICAgICAgICAgICAgZm9udF9leHRyYSA9IDIgKiBsZW4oZ29vZHN0YXRlcykKKworICAgICAgICAjIHNldCBuZXcgd2lkZ2V0IHN0YXRlCisgICAgICAgIGZvciB3aWRnZXQgaW4gc2VsZi51cGRhdGVfd2lkZ2V0czoKKyAgICAgICAgICAgIHJlc2V0X3N0YXRlKHdpZGdldCkgIyByZW1vdmUgYW55IHByZXZpb3VzIHN0YXRlIGZyb20gdGhlIHdpZGdldAorICAgICAgICAgICAgd2lkZ2V0LnN0YXRlKGdvb2RzdGF0ZXMpCisKKyAgICAgICAgIyB1cGRhdGUgVHRrIEJ1dHRvbiBmb250IHNpemUKKyAgICAgICAgc2VsZi5fc2V0X2ZvbnQoZm9udF9leHRyYSkKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGRlZiBfc2V0dXBfd2lkZ2V0cyhzZWxmKToKKyAgICAgICAgYnRuID0gdHRrLkJ1dHRvbihzZWxmLCB0ZXh0PSdFbnRlciBzdGF0ZXMgYW5kIHdhdGNoJykKKworICAgICAgICBlbnRyeSA9IHR0ay5FbnRyeShzZWxmLCBjdXJzb3I9J3h0ZXJtJywgdmFsaWRhdGU9ImtleSIpCisgICAgICAgIGVudHJ5Wyd2YWxpZGF0ZWNvbW1hbmQnXSA9IChzZWxmLnJlZ2lzdGVyKHNlbGYuX25ld19zdGF0ZSksICclVycsICclUCcpCisgICAgICAgIGVudHJ5LmZvY3VzKCkKKworICAgICAgICBzZWxmLnVwZGF0ZV93aWRnZXRzLmFwcGVuZChidG4pCisgICAgICAgIGVudHJ5LnZhbGlkYXRlKCkKKworICAgICAgICBlbnRyeS5wYWNrKGZpbGw9J3gnLCBwYWR4PTYpCisgICAgICAgIGJ0bi5wYWNrKHNpZGU9J2xlZnQnLCBwYWR5PTYsIHBhZHg9NiwgYW5jaG9yPSduJykKKyAgICAgICAgc2VsZi5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9MSkKKworCitkZWYgbWFpbigpOgorICAgIGFwcCA9IEFwcCgiV2lkZ2V0IFN0YXRlIFRlc3RlciIpCisgICAgYXBwLm1haW5sb29wKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX0lfZG9udGxpa2VfdGlsdGRlbW8ucHkgYi9EZW1vL3R1cnRsZS90ZGVtb19JX2RvbnRsaWtlX3RpbHRkZW1vLnB5CmluZGV4IGFkZWM1MmIuLmM5ZTZlNjUgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3RkZW1vX0lfZG9udGxpa2VfdGlsdGRlbW8ucHkKKysrIGIvRGVtby90dXJ0bGUvdGRlbW9fSV9kb250bGlrZV90aWx0ZGVtby5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KICIiIiAgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICB0ZGVtby1JX2RvbnRfbGlrZV90aWx0ZGVtby5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fYnl0ZWRlc2lnbi5weSBiL0RlbW8vdHVydGxlL3RkZW1vX2J5dGVkZXNpZ24ucHkKaW5kZXggNmY1M2U5Zi4uYmVkNjcxZCAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fYnl0ZWRlc2lnbi5weQorKysgYi9EZW1vL3R1cnRsZS90ZGVtb19ieXRlZGVzaWduLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIiIiICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgICAgdGRlbW9fYnl0ZWRlc2lnbi5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fY2xvY2sucHkgYi9EZW1vL3R1cnRsZS90ZGVtb19jbG9jay5weQppbmRleCAxMWMzN2YwLi5iNjI4MGJiIDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19jbG9jay5weQorKysgYi9EZW1vL3R1cnRsZS90ZGVtb19jbG9jay5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KICMgLSotIGNvZGluZzogY3AxMjUyIC0qLQogIiIiICAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb19mcmFjdGFsY3VydmVzLnB5IGIvRGVtby90dXJ0bGUvdGRlbW9fZnJhY3RhbGN1cnZlcy5weQppbmRleCBmMzRjNWZjLi4yYWM4ZWNkIDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19mcmFjdGFsY3VydmVzLnB5CisrKyBiL0RlbW8vdHVydGxlL3RkZW1vX2ZyYWN0YWxjdXJ2ZXMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAiIiIgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICB0ZGVtb19mcmFjdGFsQ3VydmVzLnB5CmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb19saW5kZW5tYXllcl9pbmRpYW4ucHkgYi9EZW1vL3R1cnRsZS90ZGVtb19saW5kZW5tYXllcl9pbmRpYW4ucHkKaW5kZXggNGYyMDcxNi4uOTJjOGNmZiAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fbGluZGVubWF5ZXJfaW5kaWFuLnB5CisrKyBiL0RlbW8vdHVydGxlL3RkZW1vX2xpbmRlbm1heWVyX2luZGlhbi5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KICIiIiAgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICB4dHhfbGluZGVubWF5ZXJfaW5kaWFuLnB5CmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb19taW5pbWFsX2hhbm9pLnB5IGIvRGVtby90dXJ0bGUvdGRlbW9fbWluaW1hbF9oYW5vaS5weQppbmRleCA0ZTJhZDQ4Li44YTFjYWE4IDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19taW5pbWFsX2hhbm9pLnB5CisrKyBiL0RlbW8vdHVydGxlL3RkZW1vX21pbmltYWxfaGFub2kucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAiIiIgICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgICAgIHRkZW1vX21pbmltYWxfaGFub2kucHkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX25pbS5weSBiL0RlbW8vdHVydGxlL3RkZW1vX25pbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTY2ZDdlCi0tLSAvZGV2L251bGwKKysrIGIvRGVtby90dXJ0bGUvdGRlbW9fbmltLnB5CkBAIC0wLDAgKzEsMjI3IEBACisiIiIgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKKworICAgICAgICAgICAgdGRlbW9fbmltLnB5CisgICAgICAgICAKK1BsYXkgbmltIGFnYWluc3QgdGhlIGNvbXB1dGVyLiBUaGUgcGxheWVyCit3aG8gdGFrZXMgdGhlIGxhc3Qgc3RpY2sgaXMgdGhlIHdpbm5lci4KKworSW1wbGVtZW50cyB0aGUgbW9kZWwtdmlldy1jb250cm9sbGVyCitkZXNpZ24gcGF0dGVybi4KKyIiIgorCisKK2ltcG9ydCB0dXJ0bGUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCB0aW1lCisKK1NDUkVFTldJRFRIID0gNjQwCitTQ1JFRU5IRUlHSFQgPSA0ODAKKworTUlOU1RJQ0tTID0gNworTUFYU1RJQ0tTID0gMzEKKworSFVOSVQgPSBTQ1JFRU5IRUlHSFQgLy8gMTIKK1dVTklUID0gU0NSRUVOV0lEVEggLy8gKChNQVhTVElDS1MgLy8gNSkgKiAxMSArIChNQVhTVElDS1MgJSA1KSAqIDIpCisKK1NDT0xPUiA9ICg2MywgNjMsIDMxKQorSENPTE9SID0gKDI1NSwgMjA0LCAyMDQpCitDT0xPUiA9ICgyMDQsIDIwNCwgMjU1KQorCitkZWYgcmFuZG9tcm93KCk6CisgICAgcmV0dXJuIHJhbmRvbS5yYW5kaW50KE1JTlNUSUNLUywgTUFYU1RJQ0tTKQorCitkZWYgY29tcHV0ZXJ6dWcoc3RhdGUpOgorICAgIHhvcmVkID0gc3RhdGVbMF0gXiBzdGF0ZVsxXSBeIHN0YXRlWzJdCisgICAgaWYgeG9yZWQgPT0gMDoKKyAgICAgICAgcmV0dXJuIHJhbmRvbW1vdmUoc3RhdGUpCisgICAgZm9yIHogaW4gcmFuZ2UoMyk6CisgICAgICAgIHMgPSBzdGF0ZVt6XSBeIHhvcmVkCisgICAgICAgIGlmIHMgPD0gc3RhdGVbel06CisgICAgICAgICAgICBtb3ZlID0gKHosIHMpCisgICAgICAgICAgICByZXR1cm4gbW92ZQorCitkZWYgcmFuZG9tbW92ZShzdGF0ZSk6CisgICAgbSA9IG1heChzdGF0ZSkgICAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB6ID0gcmFuZG9tLnJhbmRpbnQoMCwyKQorICAgICAgICBpZiBzdGF0ZVt6XSA+IChtID4gMSk6CisgICAgICAgICAgICBicmVhaworICAgIHJhbmQgPSByYW5kb20ucmFuZGludChtID4gMSwgc3RhdGVbel0tMSkKKyAgICByZXR1cm4geiwgcmFuZAorCisKK2NsYXNzIE5pbU1vZGVsKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdhbWUpOgorICAgICAgICBzZWxmLmdhbWUgPSBnYW1lCisKKyAgICBkZWYgc2V0dXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2FtZS5zdGF0ZSBub3QgaW4gW05pbS5DUkVBVEVELCBOaW0uT1ZFUl06CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5zdGlja3MgPSBbcmFuZG9tcm93KCksIHJhbmRvbXJvdygpLCByYW5kb21yb3coKV0KKyAgICAgICAgc2VsZi5wbGF5ZXIgPSAwCisgICAgICAgIHNlbGYud2lubmVyID0gTm9uZQorICAgICAgICBzZWxmLmdhbWUudmlldy5zZXR1cCgpCisgICAgICAgIHNlbGYuZ2FtZS5zdGF0ZSA9IE5pbS5SVU5OSU5HCisgICAgICAgIAorICAgIGRlZiBtb3ZlKHNlbGYsIHJvdywgY29sKToKKyAgICAgICAgbWF4c3BhbHRlID0gc2VsZi5zdGlja3Nbcm93XQorICAgICAgICBzZWxmLnN0aWNrc1tyb3ddID0gY29sCisgICAgICAgIHNlbGYuZ2FtZS52aWV3Lm5vdGlmeV9tb3ZlKHJvdywgY29sLCBtYXhzcGFsdGUsIHNlbGYucGxheWVyKQorICAgICAgICBpZiBzZWxmLmdhbWVfb3ZlcigpOgorICAgICAgICAgICAgc2VsZi5nYW1lLnN0YXRlID0gTmltLk9WRVIKKyAgICAgICAgICAgIHNlbGYud2lubmVyID0gc2VsZi5wbGF5ZXIKKyAgICAgICAgICAgIHNlbGYuZ2FtZS52aWV3Lm5vdGlmeV9vdmVyKCkKKyAgICAgICAgZWxpZiBzZWxmLnBsYXllciA9PSAwOgorICAgICAgICAgICAgc2VsZi5wbGF5ZXIgPSAxCisgICAgICAgICAgICByb3csIGNvbCA9IGNvbXB1dGVyenVnKHNlbGYuc3RpY2tzKQorICAgICAgICAgICAgc2VsZi5tb3ZlKHJvdywgY29sKQorICAgICAgICAgICAgc2VsZi5wbGF5ZXIgPSAwCisgICAgICAgIAorICAgIGRlZiBnYW1lX292ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnN0aWNrcyA9PSBbMCwgMCwgMF0KKworICAgIGRlZiBub3RpZnlfbW92ZShzZWxmLCByb3csIGNvbCk6CisgICAgICAgIGlmIHNlbGYuc3RpY2tzW3Jvd10gPD0gY29sOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubW92ZShyb3csIGNvbCkKKworCitjbGFzcyBTdGljayh0dXJ0bGUuVHVydGxlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm93LCBjb2wsIGdhbWUpOgorICAgICAgICB0dXJ0bGUuVHVydGxlLl9faW5pdF9fKHNlbGYsIHZpc2libGU9RmFsc2UpCisgICAgICAgIHNlbGYucm93ID0gcm93CisgICAgICAgIHNlbGYuY29sID0gY29sCisgICAgICAgIHNlbGYuZ2FtZSA9IGdhbWUKKyAgICAgICAgeCwgeSA9IHNlbGYuY29vcmRzKHJvdywgY29sKQorICAgICAgICBzZWxmLnNoYXBlKCJzcXVhcmUiKQorICAgICAgICBzZWxmLnNoYXBlc2l6ZShIVU5JVC8xMC4wLCBXVU5JVC8yMC4wKQorICAgICAgICBzZWxmLnNwZWVkKDApCisgICAgICAgIHNlbGYucHUoKQorICAgICAgICBzZWxmLmdvdG8oeCx5KQorICAgICAgICBzZWxmLmNvbG9yKCJ3aGl0ZSIpCisgICAgICAgIHNlbGYuc2hvd3R1cnRsZSgpCisgICAgICAgICAgICAKKyAgICBkZWYgY29vcmRzKHNlbGYsIHJvdywgY29sKToKKyAgICAgICAgcGFja2V0LCByZW1haW5kZXIgPSBkaXZtb2QoY29sLCA1KQorICAgICAgICB4ID0gKDMgKyAxMSAqIHBhY2tldCArIDIgKiByZW1haW5kZXIpICogV1VOSVQKKyAgICAgICAgeSA9ICgyICsgMyAqIHJvdykgKiBIVU5JVAorICAgICAgICByZXR1cm4geCAtIFNDUkVFTldJRFRIIC8vIDIgKyBXVU5JVCAvLyAyLCBTQ1JFRU5IRUlHSFQgLy8gMiAtIHkgLSBIVU5JVCAvLyAyCisgICAgICAgIAorICAgIGRlZiBtYWtlbW92ZShzZWxmLCB4LCB5KToKKyAgICAgICAgaWYgc2VsZi5nYW1lLnN0YXRlICE9IE5pbS5SVU5OSU5HOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZ2FtZS5jb250cm9sbGVyLm5vdGlmeV9tb3ZlKHNlbGYucm93LCBzZWxmLmNvbCkKKworCitjbGFzcyBOaW1WaWV3KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdhbWUpOgorICAgICAgICBzZWxmLmdhbWUgPSBnYW1lCisgICAgICAgIHNlbGYuc2NyZWVuID0gZ2FtZS5zY3JlZW4KKyAgICAgICAgc2VsZi5tb2RlbCA9IGdhbWUubW9kZWwKKyAgICAgICAgc2VsZi5zY3JlZW4uY29sb3Jtb2RlKDI1NSkKKyAgICAgICAgc2VsZi5zY3JlZW4udHJhY2VyKEZhbHNlKQorICAgICAgICBzZWxmLnNjcmVlbi5iZ2NvbG9yKCgyNDAsIDI0MCwgMjU1KSkKKyAgICAgICAgc2VsZi53cml0ZXIgPSB0dXJ0bGUuVHVydGxlKHZpc2libGU9RmFsc2UpCisgICAgICAgIHNlbGYud3JpdGVyLnB1KCkKKyAgICAgICAgc2VsZi53cml0ZXIuc3BlZWQoMCkKKyAgICAgICAgc2VsZi5zdGlja3MgPSB7fQorICAgICAgICBmb3Igcm93IGluIHJhbmdlKDMpOgorICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZShNQVhTVElDS1MpOgorICAgICAgICAgICAgICAgIHNlbGYuc3RpY2tzWyhyb3csIGNvbCldID0gU3RpY2socm93LCBjb2wsIGdhbWUpCisgICAgICAgIHNlbGYuZGlzcGxheSgiLi4uIGEgbW9tZW50IHBsZWFzZSAuLi4iKQorICAgICAgICBzZWxmLnNjcmVlbi50cmFjZXIoVHJ1ZSkKKworICAgIGRlZiBkaXNwbGF5KHNlbGYsIG1zZzEsIG1zZzI9Tm9uZSk6CisgICAgICAgIHNlbGYuc2NyZWVuLnRyYWNlcihGYWxzZSkKKyAgICAgICAgc2VsZi53cml0ZXIuY2xlYXIoKQorICAgICAgICBpZiBtc2cyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZXIuZ290bygwLCAtIFNDUkVFTkhFSUdIVCAvLyAyICsgNDgpCisgICAgICAgICAgICBzZWxmLndyaXRlci5wZW5jb2xvcigicmVkIikKKyAgICAgICAgICAgIHNlbGYud3JpdGVyLndyaXRlKG1zZzIsIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsMTgsImJvbGQiKSkKKyAgICAgICAgc2VsZi53cml0ZXIuZ290bygwLCAtIFNDUkVFTkhFSUdIVCAvLyAyICsgMjApCisgICAgICAgIHNlbGYud3JpdGVyLnBlbmNvbG9yKCJibGFjayIpCisgICAgICAgIHNlbGYud3JpdGVyLndyaXRlKG1zZzEsIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsMTQsImJvbGQiKSkKKyAgICAgICAgc2VsZi5zY3JlZW4udHJhY2VyKFRydWUpCisgICAgICAgIAorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICBzZWxmLnNjcmVlbi50cmFjZXIoRmFsc2UpCisgICAgICAgIGZvciByb3cgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBmb3IgY29sIGluIHJhbmdlKHNlbGYubW9kZWwuc3RpY2tzW3Jvd10pOgorICAgICAgICAgICAgICAgIHNlbGYuc3RpY2tzWyhyb3csIGNvbCldLmNvbG9yKFNDT0xPUikKKyAgICAgICAgZm9yIHJvdyBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIGZvciBjb2wgaW4gcmFuZ2Uoc2VsZi5tb2RlbC5zdGlja3Nbcm93XSwgTUFYU1RJQ0tTKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0aWNrc1socm93LCBjb2wpXS5jb2xvcigid2hpdGUiKQorICAgICAgICBzZWxmLmRpc3BsYXkoIllvdXIgdHVybiEgQ2xpY2sgbGVmdG1vc3Qgc3RpY2sgdG8gcmVtb3ZlLiIpCisgICAgICAgIHNlbGYuc2NyZWVuLnRyYWNlcihUcnVlKQorCisgICAgZGVmIG5vdGlmeV9tb3ZlKHNlbGYsIHJvdywgY29sLCBtYXhzcGFsdGUsIHBsYXllcik6CisgICAgICAgIGlmIHBsYXllciA9PSAwOgorICAgICAgICAgICAgZmFyYmUgPSBIQ09MT1IKKyAgICAgICAgICAgIGZvciBzIGluIHJhbmdlKGNvbCwgbWF4c3BhbHRlKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0aWNrc1socm93LCBzKV0uY29sb3IoZmFyYmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRpc3BsYXkoIiAuLi4gdGhpbmtpbmcgLi4uICAgICAgICAgIikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICAgICAgc2VsZi5kaXNwbGF5KCIgLi4uIHRoaW5raW5nIC4uLiBhYWFoIC4uLiIpCisgICAgICAgICAgICBmYXJiZSA9IENPTE9SCisgICAgICAgICAgICBmb3IgcyBpbiByYW5nZShtYXhzcGFsdGUtMSwgY29sLTEsIC0xKToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMikKKyAgICAgICAgICAgICAgICBzZWxmLnN0aWNrc1socm93LCBzKV0uY29sb3IoZmFyYmUpCisgICAgICAgICAgICBzZWxmLmRpc3BsYXkoIllvdXIgdHVybiEgQ2xpY2sgbGVmdG1vc3Qgc3RpY2sgdG8gcmVtb3ZlLiIpCisKKyAgICBkZWYgbm90aWZ5X292ZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2FtZS5tb2RlbC53aW5uZXIgPT0gMDoKKyAgICAgICAgICAgIG1zZzIgPSAiQ29uZ3JhdHMuIFlvdSdyZSB0aGUgd2lubmVyISEhIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnMiA9ICJTb3JyeSwgdGhlIGNvbXB1dGVyIGlzIHRoZSB3aW5uZXIuIgorICAgICAgICBzZWxmLmRpc3BsYXkoIlRvIHBsYXkgYWdhaW4gcHJlc3Mgc3BhY2UgYmFyLiBUbyBsZWF2ZSBwcmVzcyBFU0MuIiwgbXNnMikKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nYW1lLnN0YXRlID09IE5pbS5PVkVSOgorICAgICAgICAgICAgc2VsZi5zY3JlZW4uY2xlYXIoKQorCitjbGFzcyBOaW1Db250cm9sbGVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2FtZSk6CisgICAgICAgIHNlbGYuZ2FtZSA9IGdhbWUKKyAgICAgICAgc2VsZi5zdGlja3MgPSBnYW1lLnZpZXcuc3RpY2tzCisgICAgICAgIHNlbGYuQlVTWSA9IEZhbHNlCisgICAgICAgIGZvciBzdGljayBpbiBzZWxmLnN0aWNrcy52YWx1ZXMoKToKKyAgICAgICAgICAgIHN0aWNrLm9uY2xpY2soc3RpY2subWFrZW1vdmUpCisgICAgICAgIHNlbGYuZ2FtZS5zY3JlZW4ub25rZXkoc2VsZi5nYW1lLm1vZGVsLnNldHVwLCAic3BhY2UiKQorICAgICAgICBzZWxmLmdhbWUuc2NyZWVuLm9ua2V5KHNlbGYuZ2FtZS52aWV3LmNsZWFyLCAiRXNjYXBlIikKKyAgICAgICAgc2VsZi5nYW1lLnZpZXcuZGlzcGxheSgiUHJlc3Mgc3BhY2UgYmFyIHRvIHN0YXJ0IGdhbWUiKQorICAgICAgICBzZWxmLmdhbWUuc2NyZWVuLmxpc3RlbigpCisKKyAgICBkZWYgbm90aWZ5X21vdmUoc2VsZiwgcm93LCBjb2wpOgorICAgICAgICBpZiBzZWxmLkJVU1k6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5CVVNZID0gVHJ1ZQorICAgICAgICBzZWxmLmdhbWUubW9kZWwubm90aWZ5X21vdmUocm93LCBjb2wpCisgICAgICAgIHNlbGYuQlVTWSA9IEZhbHNlCisgICAgICAgICAgICAgICAgCitjbGFzcyBOaW0ob2JqZWN0KToKKyAgICBDUkVBVEVEID0gMAorICAgIFJVTk5JTkcgPSAxCisgICAgT1ZFUiA9IDIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2NyZWVuKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9IE5pbS5DUkVBVEVEIAorICAgICAgICBzZWxmLnNjcmVlbiA9IHNjcmVlbgorICAgICAgICBzZWxmLm1vZGVsID0gTmltTW9kZWwoc2VsZikKKyAgICAgICAgc2VsZi52aWV3ID0gTmltVmlldyhzZWxmKQorICAgICAgICBzZWxmLmNvbnRyb2xsZXIgPSBOaW1Db250cm9sbGVyKHNlbGYpCisgICAgICAgIAorCittYWluc2NyZWVuID0gdHVydGxlLlNjcmVlbigpCittYWluc2NyZWVuLm1vZGUoInN0YW5kYXJkIikKK21haW5zY3JlZW4uc2V0dXAoU0NSRUVOV0lEVEgsIFNDUkVFTkhFSUdIVCkKKworZGVmIG1haW4oKToKKyAgICBuaW0gPSBOaW0obWFpbnNjcmVlbikKKyAgICByZXR1cm4gIkVWRU5UTE9PUCEiCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCisgICAgdHVydGxlLm1haW5sb29wKCkKKyAgICAKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX3BhaW50LnB5IGIvRGVtby90dXJ0bGUvdGRlbW9fcGFpbnQucHkKaW5kZXggNjU3NDFkYS4uZTFkNjMwMyAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fcGFpbnQucHkKKysrIGIvRGVtby90dXJ0bGUvdGRlbW9fcGFpbnQucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAiIiIgICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgICAgICAgIHRkZW1vX3BhaW50LnB5CmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb19wZWFjZS5weSBiL0RlbW8vdHVydGxlL3RkZW1vX3BlYWNlLnB5CmluZGV4IGVhNTcwNjkuLjEzMDQ0YzkgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3RkZW1vX3BlYWNlLnB5CisrKyBiL0RlbW8vdHVydGxlL3RkZW1vX3BlYWNlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIiIiICAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgICAgICAgIHRkZW1vX3BlYWNlLnB5CmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb19wZW5yb3NlLnB5IGIvRGVtby90dXJ0bGUvdGRlbW9fcGVucm9zZS5weQppbmRleCA0ZDhhNjFlLi5mNTgyNGQ3IDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19wZW5yb3NlLnB5CisrKyBiL0RlbW8vdHVydGxlL3RkZW1vX3BlbnJvc2UucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAiIiIgICAgICAgeHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgICAgeHR4X2tpdGVzX2FuZF9kYXJ0cy5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fcGxhbmV0X2FuZF9tb29uLnB5IGIvRGVtby90dXJ0bGUvdGRlbW9fcGxhbmV0X2FuZF9tb29uLnB5CmluZGV4IGUzYzg3YTAuLjIyM2Q4N2IgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3RkZW1vX3BsYW5ldF9hbmRfbW9vbi5weQorKysgYi9EZW1vL3R1cnRsZS90ZGVtb19wbGFuZXRfYW5kX21vb24ucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAiIiIgICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgICAgdGRlbW9fcGxhbmV0c19hbmRfbW9vbi5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fdHJlZS5weSBiL0RlbW8vdHVydGxlL3RkZW1vX3RyZWUucHkKaW5kZXggM2M3MTc4Yy4uNmZjODczNSAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fdHJlZS5weQorKysgYi9EZW1vL3R1cnRsZS90ZGVtb190cmVlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIiIiICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgICAgICAgICB0ZGVtb190cmVlLnB5CmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb195aW55YW5nLnB5IGIvRGVtby90dXJ0bGUvdGRlbW9feWlueWFuZy5weQppbmRleCA0N2I4YjJmLi4wNGRkNzU4IDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb195aW55YW5nLnB5CisrKyBiL0RlbW8vdHVydGxlL3RkZW1vX3lpbnlhbmcucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAiIiIgICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgICAgICAgIHRkZW1vX3lpbnlhbmcucHkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3R1cnRsZURlbW8ucHkgYi9EZW1vL3R1cnRsZS90dXJ0bGVEZW1vLnB5CmluZGV4IDM4YTQ0ZTAuLjMwYjVlNWIgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3R1cnRsZURlbW8ucHkKKysrIGIvRGVtby90dXJ0bGUvdHVydGxlRGVtby5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KIGltcG9ydCBzeXMKIGltcG9ydCBvcwogCkBAIC0yMTIsNyArMjEyLDcgQEAKICAgICAgICAgICAgIHNlbGYudGV4dC5kZWxldGUoIjEuMCIsICJlbmQiKQogICAgICAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgiMS4wIixjaGFycykKICAgICAgICAgICAgIGRpcmVjLCBmbmFtZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCi0gICAgICAgICAgICBzZWxmLnJvb3QudGl0bGUoZm5hbWVbNjotM10rIiAtIGFuIHh0dXJ0bGUgZXhhbXBsZSIpCisgICAgICAgICAgICBzZWxmLnJvb3QudGl0bGUoZm5hbWVbNjotM10rIiAtIGEgUHl0aG9uIHR1cnRsZSBncmFwaGljcyBleGFtcGxlIikKICAgICAgICAgICAgIHNlbGYubW9kdWxlID0gX19pbXBvcnRfXyhmbmFtZVs6LTNdKQogICAgICAgICAgICAgcmVsb2FkKHNlbGYubW9kdWxlKQogICAgICAgICAgICAgc2VsZi5jb25maWdHVUkoTk9STUFMLCBOT1JNQUwsIERJU0FCTEVELCBESVNBQkxFRCwKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3R1cnRsZWRlbW9fdHdvX2NhbnZhc2VzLnB5IGIvRGVtby90dXJ0bGUvdHVydGxlZGVtb190d29fY2FudmFzZXMucHkKaW5kZXggNWNkZTBlZi4uNWE5ODMxZCAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdHVydGxlZGVtb190d29fY2FudmFzZXMucHkKKysrIGIvRGVtby90dXJ0bGUvdHVydGxlZGVtb190d29fY2FudmFzZXMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjIyBERU1PTlNUUkFURVMgVVNFIE9GIDIgQ0FOVkFTRVMsIFNPIENBTk5PVCBCRSBSVU4gSU4gREVNT1ZJRVdFUiEKICIiInR1cnRsZSBleGFtcGxlOiBVc2luZyBUdXJ0bGVTY3JlZW4gYW5kIFJhd1R1cnRsZQogZm9yIGRyYXdpbmcgb24gdHdvIGRpc3RpbmN0IGNhbnZhc2VzLgpkaWZmIC0tZ2l0IGEvRGVtby94bWwvZWxlbV9jb3VudC5weSBiL0RlbW8veG1sL2VsZW1fY291bnQucHkKaW5kZXggN2I1MzE4OS4uZjRlNmVmNSAxMDA2NDQKLS0tIGEvRGVtby94bWwvZWxlbV9jb3VudC5weQorKysgYi9EZW1vL3htbC9lbGVtX2NvdW50LnB5CkBAIC0xLDQgKzEsMTAgQEAKKyIiIgorQSBzaW1wbGUgZGVtbyB0aGF0IHJlYWRzIGluIGFuIFhNTCBkb2N1bWVudCBhbmQgZGlzcGxheXMgdGhlIG51bWJlciBvZgorZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyBhIHRhbGx5IG9mIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGJ5IG5hbWUuCisiIiIKKwogaW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKIAogZnJvbSB4bWwuc2F4IGltcG9ydCBtYWtlX3BhcnNlciwgaGFuZGxlcgogCkBAIC03LDE2ICsxMywxNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5fZWxlbXMgPSAwCiAgICAgICAgIHNlbGYuX2F0dHJzID0gMAotICAgICAgICBzZWxmLl9lbGVtX3R5cGVzID0ge30KLSAgICAgICAgc2VsZi5fYXR0cl90eXBlcyA9IHt9CisgICAgICAgIHNlbGYuX2VsZW1fdHlwZXMgPSBkZWZhdWx0ZGljdChpbnQpCisgICAgICAgIHNlbGYuX2F0dHJfdHlwZXMgPSBkZWZhdWx0ZGljdChpbnQpCiAKICAgICBkZWYgc3RhcnRFbGVtZW50KHNlbGYsIG5hbWUsIGF0dHJzKToKLSAgICAgICAgc2VsZi5fZWxlbXMgPSBzZWxmLl9lbGVtcyArIDEKLSAgICAgICAgc2VsZi5fYXR0cnMgPSBzZWxmLl9hdHRycyArIGxlbihhdHRycykKLSAgICAgICAgc2VsZi5fZWxlbV90eXBlc1tuYW1lXSA9IHNlbGYuX2VsZW1fdHlwZXMuZ2V0KG5hbWUsIDApICsgMQorICAgICAgICBzZWxmLl9lbGVtcyArPSAxCisgICAgICAgIHNlbGYuX2F0dHJzICs9IGxlbihhdHRycykKKyAgICAgICAgc2VsZi5fZWxlbV90eXBlc1tuYW1lXSArPSAxCiAKICAgICAgICAgZm9yIG5hbWUgaW4gYXR0cnMua2V5cygpOgotICAgICAgICAgICAgc2VsZi5fYXR0cl90eXBlc1tuYW1lXSA9IHNlbGYuX2F0dHJfdHlwZXMuZ2V0KG5hbWUsIDApICsgMQorICAgICAgICAgICAgc2VsZi5fYXR0cl90eXBlc1tuYW1lXSArPSAxCiAKICAgICBkZWYgZW5kRG9jdW1lbnQoc2VsZik6CiAgICAgICAgIHByaW50ICJUaGVyZSB3ZXJlIiwgc2VsZi5fZWxlbXMsICJlbGVtZW50cy4iCkBAIC0zMCw3ICszNiw3IEBACiAgICAgICAgIGZvciBwYWlyIGluICBzZWxmLl9hdHRyX3R5cGVzLml0ZW1zKCk6CiAgICAgICAgICAgICBwcmludCAiJTIwcyAlZCIgJSBwYWlyCiAKLQotcGFyc2VyID0gbWFrZV9wYXJzZXIoKQotcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKEZhbmN5Q291bnRlcigpKQotcGFyc2VyLnBhcnNlKHN5cy5hcmd2WzFdKQoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwYXJzZXIgPSBtYWtlX3BhcnNlcigpCisgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKEZhbmN5Q291bnRlcigpKQorICAgIHBhcnNlci5wYXJzZShzeXMuYXJndlsxXSkKZGlmZiAtLWdpdCBhL0RlbW8veG1sL3JvdW5kdHJpcC5weSBiL0RlbW8veG1sL3JvdW5kdHJpcC5weQppbmRleCA4ZDdkNDM3Li44MDFjMDA5IDEwMDY0NAotLS0gYS9EZW1vL3htbC9yb3VuZHRyaXAucHkKKysrIGIvRGVtby94bWwvcm91bmR0cmlwLnB5CkBAIC0zLDcgKzMsNyBAQAogYnV0IG5vdCBuZWNlc3NhcmlseSBpZGVudGljYWwsIGRvY3VtZW50LgogIiIiCiAKLWltcG9ydCBzeXMsIHN0cmluZworaW1wb3J0IHN5cwogCiBmcm9tIHhtbC5zYXggaW1wb3J0IHNheHV0aWxzLCBoYW5kbGVyLCBtYWtlX3BhcnNlcgogCkBAIC0xMSw3ICsxMSw3IEBACiAKIGNsYXNzIENvbnRlbnRHZW5lcmF0b3IoaGFuZGxlci5Db250ZW50SGFuZGxlcik6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0ID0gc3lzLnN0ZG91dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dD1zeXMuc3Rkb3V0KToKICAgICAgICAgaGFuZGxlci5Db250ZW50SGFuZGxlci5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLl9vdXQgPSBvdXQKIApAQCAtNDAsNiArNDAsNyBAQAogCiAjIC0tLSBUaGUgbWFpbiBwcm9ncmFtCiAKLXBhcnNlciA9IG1ha2VfcGFyc2VyKCkKLXBhcnNlci5zZXRDb250ZW50SGFuZGxlcihDb250ZW50R2VuZXJhdG9yKCkpCi1wYXJzZXIucGFyc2Uoc3lzLmFyZ3ZbMV0pCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHBhcnNlciA9IG1ha2VfcGFyc2VyKCkKKyAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoQ29udGVudEdlbmVyYXRvcigpKQorICAgIHBhcnNlci5wYXJzZShzeXMuYXJndlsxXSkKZGlmZiAtLWdpdCBhL0RlbW8veG1sL3JzczJodG1sLnB5IGIvRGVtby94bWwvcnNzMmh0bWwucHkKaW5kZXggMTVjOTg5MS4uZjIwNjdhOSAxMDA2NDQKLS0tIGEvRGVtby94bWwvcnNzMmh0bWwucHkKKysrIGIvRGVtby94bWwvcnNzMmh0bWwucHkKQEAgLTEsNDUgKzEsNTAgQEAKKyIiIgorQSBkZW1vIHRoYXQgcmVhZHMgaW4gYW4gUlNTIFhNTCBkb2N1bWVudCBhbmQgZW1pdHMgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcKK2EgbGlzdCBvZiB0aGUgaW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgZmVlZC4KKyIiIgorCiBpbXBvcnQgc3lzCitpbXBvcnQgY29kZWNzCiAKIGZyb20geG1sLnNheCBpbXBvcnQgbWFrZV9wYXJzZXIsIGhhbmRsZXIKIAogIyAtLS0gVGVtcGxhdGVzCiAKLXRvcCA9IFwKLSIiIgordG9wID0gIiIiXAogPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLTxIVE1MPgotPEhFQUQ+Ci0gIDxUSVRMRT4lczwvVElUTEU+Ci08L0hFQUQ+Cis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+JXM8L3RpdGxlPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8L2hlYWQ+CiAKLTxCT0RZPgotPEgxPiVzPC9IMT4KKzxib2R5PgorPGgxPiVzPC9oMT4KICIiIgogCi1ib3R0b20gPSBcCi0iIiIKK2JvdHRvbSA9ICIiIgogPC91bD4KIAotPEhSPgotPEFERFJFU1M+Ci1Db252ZXJ0ZWQgdG8gSFRNTCBieSBzYXhfcnNzMmh0bWwucHkuCi08L0FERFJFU1M+Cis8aHI+Cis8YWRkcmVzcz4KK0NvbnZlcnRlZCB0byBIVE1MIGJ5IHJzczJodG1sLnB5LgorPC9hZGRyZXNzPgogCi08L0JPRFk+Ci08L0hUTUw+Cis8L2JvZHk+Cis8L2h0bWw+CiAiIiIKIAogIyAtLS0gVGhlIENvbnRlbnRIYW5kbGVyCiAKIGNsYXNzIFJTU0hhbmRsZXIoaGFuZGxlci5Db250ZW50SGFuZGxlcik6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0ID0gc3lzLnN0ZG91dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dD1zeXMuc3Rkb3V0KToKICAgICAgICAgaGFuZGxlci5Db250ZW50SGFuZGxlci5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9vdXQgPSBvdXQKKyAgICAgICAgc2VsZi5fb3V0ID0gY29kZWNzLmdldHdyaXRlcigndXRmLTgnKShvdXQpCiAKICAgICAgICAgc2VsZi5fdGV4dCA9ICIiCiAgICAgICAgIHNlbGYuX3BhcmVudCA9IE5vbmUKLSAgICAgICAgc2VsZi5fbGlzdF9zdGFydGVkID0gMAorICAgICAgICBzZWxmLl9saXN0X3N0YXJ0ZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl90aXRsZSA9IE5vbmUKICAgICAgICAgc2VsZi5fbGluayA9IE5vbmUKICAgICAgICAgc2VsZi5fZGVzY3IgPSAiIgpAQCAtNjksNyArNzQsNyBAQAogICAgICAgICAgICAgZWxpZiBuYW1lID09ICJpdGVtIjoKICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbGlzdF9zdGFydGVkOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9vdXQud3JpdGUoIjx1bD5cbiIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2xpc3Rfc3RhcnRlZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGlzdF9zdGFydGVkID0gVHJ1ZQogCiAgICAgICAgICAgICAgICAgc2VsZi5fb3V0LndyaXRlKCcgIDxsaT48YSBocmVmPSIlcyI+JXM8L2E+ICVzXG4nICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX2xpbmssIHNlbGYuX3RpdGxlLCBzZWxmLl9kZXNjcikpCkBAIC04Niw2ICs5MSw3IEBACiAKICMgLS0tIE1haW4gcHJvZ3JhbQogCi1wYXJzZXIgPSBtYWtlX3BhcnNlcigpCi1wYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoUlNTSGFuZGxlcigpKQotcGFyc2VyLnBhcnNlKHN5cy5hcmd2WzFdKQoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwYXJzZXIgPSBtYWtlX3BhcnNlcigpCisgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKFJTU0hhbmRsZXIoKSkKKyAgICBwYXJzZXIucGFyc2Uoc3lzLmFyZ3ZbMV0pCmRpZmYgLS1naXQgYS9Eb2MvQUNLUy50eHQgYi9Eb2MvQUNLUy50eHQKaW5kZXggMzhjM2RjMi4uMmFhMDMxNiAxMDA2NDQKLS0tIGEvRG9jL0FDS1MudHh0CisrKyBiL0RvYy9BQ0tTLnR4dApAQCAtMTgsNiArMTgsNyBAQAogICAgKiBPbGl2ZXIgQW5kcmljaAogICAgKiBIZWlkaSBBbm5leHN0YWQKICAgICogSmVzw7pzIENlYSBBdmnDs24KKyAgICogTWFudWVsIEJhbHNlcmEKICAgICogRGFuaWVsIEJhcmNsYXkKICAgICogQ2hyaXMgQmFya2VyCiAgICAqIERvbiBCYXNoZm9yZApAQCAtMTA5LDYgKzExMCw3IEBACiAgICAqIEFuZHJldyBNLiBLdWNobGluZwogICAgKiBEYXZlIEt1aGxtYW4KICAgICogRXJubyBLdXVzZWxhCisgICAqIFJvc3MgTGFnZXJ3YWxsCiAgICAqIFRob21hcyBMYW1iCiAgICAqIERldGxlZiBMYW5uZXJ0CiAgICAqIFBpZXJzIExhdWRlcgpAQCAtMTI2LDYgKzEyOCw3IEBACiAgICAqIEFuZHJldyBNYWNJbnR5cmUKICAgICogVmxhZGltaXIgTWFyYW5nb3pvdgogICAgKiBWaW5jZW50IE1hcmNoZXR0aQorICAgKiBXZXN0bGV5IE1hcnTDrW5legogICAgKiBMYXVyYSBNYXRzb24KICAgICogRGFuaWVsIE1heQogICAgKiBSZWJlY2NhIE1jQ3JlYXJ5CkBAIC0xMzYsNiArMTM5LDcgQEAKICAgICogUm9zcyBNb29yZQogICAgKiBTam9lcmQgTXVsbGVuZGVyCiAgICAqIERhbGUgTmFnYXRhCisgICAqIE1pY2hhbCBOb3dpa293c2tpIAogICAgKiBOZyBQaGVuZyBTaW9uZwogICAgKiBLb3JheSBPbmVyCiAgICAqIFRvbWFzIE9wcGVsc3RydXAKQEAgLTE1NSw2ICsxNTksNyBAQAogICAgKiBQYXVsIFByZXNjb2QKICAgICogRXJpYyBTLiBSYXltb25kCiAgICAqIEVkd2FyZCBLLiBSZWFtCisgICAqIFRlcnJ5IEouIFJlZWR5CiAgICAqIFNlYW4gUmVpZnNjaG5laWRlcgogICAgKiBCZXJuaGFyZCBSZWl0ZXIKICAgICogQXJtaW4gUmlnbwpAQCAtMjA1LDYgKzIxMCw3IEBACiAgICAqIE1hdHMgV2ljaG1hbm4KICAgICogR2VycnkgV2llbmVyCiAgICAqIFRpbW90aHkgV2lsZAorICAgKiBQYXVsIFdpbmtsZXIKICAgICogQ29sbGluIFdpbnRlcgogICAgKiBCbGFrZSBXaW50b24KICAgICogRGFuIFdvbGZlCmRpZmYgLS1naXQgYS9Eb2MvTWFrZWZpbGUgYi9Eb2MvTWFrZWZpbGUKaW5kZXggZjkwNGU1Zi4uMjA0OTk4NiAxMDA2NDQKLS0tIGEvRG9jL01ha2VmaWxlCisrKyBiL0RvYy9NYWtlZmlsZQpAQCAtMzQsMTIgKzM0LDEzIEBACiAJQGVjaG8gIiAgZGlzdCAgICAgICB0byBjcmVhdGUgYSBcImRpc3RcIiBkaXJlY3Rvcnkgd2l0aCBhcmNoaXZlZCBkb2NzIGZvciBkb3dubG9hZCIKIAlAZWNobyAiICBzdXNwaWNpb3VzIHRvIGNoZWNrIGZvciBzdXNwaWNpb3VzIG1hcmt1cCBpbiBvdXRwdXQgdGV4dCIKIAlAZWNobyAiICBjaGVjayAgICAgIHRvIHJ1biBhIGNoZWNrIGZvciBmcmVxdWVudCBtYXJrdXAgZXJyb3JzIgorCUBlY2hvICIgIHNlcnZlICAgICAgdG8gc2VydmUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGxvY2FsaG9zdCAoODAwMCkiCiAKICMgTm90ZTogaWYgeW91IHVwZGF0ZSB2ZXJzaW9ucyBoZXJlLCBkbyB0aGUgc2FtZSBpbiBtYWtlLmJhdCBhbmQgUkVBRE1FLnR4dAogY2hlY2tvdXQ6CiAJQGlmIFsgISAtZCB0b29scy9zcGhpbnggXTsgdGhlbiBcCiAJICBlY2hvICJDaGVja2luZyBvdXQgU3BoaW54Li4uIjsgXAotCSAgc3ZuIGNoZWNrb3V0ICQoU1ZOUk9PVCkvZXh0ZXJuYWwvU3BoaW54LTAuNi41L3NwaGlueCB0b29scy9zcGhpbng7IFwKKwkgIHN2biBjaGVja291dCAkKFNWTlJPT1QpL2V4dGVybmFsL1NwaGlueC0wLjYuNy9zcGhpbnggdG9vbHMvc3BoaW54OyBcCiAJZmkKIAlAaWYgWyAhIC1kIHRvb2xzL2RvY3V0aWxzIF07IHRoZW4gXAogCSAgZWNobyAiQ2hlY2tpbmcgb3V0IERvY3V0aWxzLi4uIjsgXApAQCAtODYsMTMgKzg3LDE0IEBACiAKIGxpbmtjaGVjazogQlVJTERFUiA9IGxpbmtjaGVjawogbGlua2NoZWNrOiBidWlsZAotCUBlY2hvICJMaW5rIGNoZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkgZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQgIiBcCisJQGVjaG8gIkxpbmsgY2hlY2sgY29tcGxldGU7IGxvb2sgZm9yIGFueSBlcnJvcnMgaW4gdGhlIGFib3ZlIG91dHB1dCIgXAogCSAgICAgICJvciBpbiBidWlsZC8kKEJVSUxERVIpL291dHB1dC50eHQiCiAKIHN1c3BpY2lvdXM6IEJVSUxERVIgPSBzdXNwaWNpb3VzCiBzdXNwaWNpb3VzOiBidWlsZAotCUBlY2hvICJTdXNwaWNpb3VzIGNoZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkgZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQgIiBcCi0JICAgICAgIm9yIGluIGJ1aWxkLyQoQlVJTERFUikvc3VzcGljaW91cy50eHQiCisJQGVjaG8gIlN1c3BpY2lvdXMgY2hlY2sgY29tcGxldGU7IGxvb2sgZm9yIGFueSBlcnJvcnMgaW4gdGhlIGFib3ZlIG91dHB1dCIgXAorCSAgICAgICJvciBpbiBidWlsZC8kKEJVSUxERVIpL3N1c3BpY2lvdXMuY3N2LiAgSWYgYWxsIGlzc3VlcyBhcmUgZmFsc2UiIFwKKwkgICAgICAicG9zaXRpdmVzLCBhcHBlbmQgdGhhdCBmaWxlIHRvIHRvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2LiIKIAogY292ZXJhZ2U6IEJVSUxERVIgPSBjb3ZlcmFnZQogY292ZXJhZ2U6IGJ1aWxkCkBAIC0xMDAsMTMgKzEwMiwxMyBAQAogCiBkb2N0ZXN0OiBCVUlMREVSID0gZG9jdGVzdAogZG9jdGVzdDogYnVpbGQKLQlAZWNobyAiVGVzdGluZyBvZiBkb2N0ZXN0cyBpbiB0aGUgc291cmNlcyBmaW5pc2hlZCwgbG9vayBhdCB0aGUgIiBcCisJQGVjaG8gIlRlc3Rpbmcgb2YgZG9jdGVzdHMgaW4gdGhlIHNvdXJjZXMgZmluaXNoZWQsIGxvb2sgYXQgdGhlIiBcCiAJICAgICAgInJlc3VsdHMgaW4gYnVpbGQvZG9jdGVzdC9vdXRwdXQudHh0IgogCiBweWRvYy10b3BpY3M6IEJVSUxERVIgPSBweWRvYy10b3BpY3MKIHB5ZG9jLXRvcGljczogYnVpbGQKLQlAZWNobyAiQnVpbGRpbmcgZmluaXNoZWQ7IG5vdyBjb3B5IGJ1aWxkL3B5ZG9jLXRvcGljcy9weWRvY190b3BpY3MucHkgIiBcCi0JICAgICAgImludG8gdGhlIExpYi8gZGlyZWN0b3J5IgorCUBlY2hvICJCdWlsZGluZyBmaW5pc2hlZDsgbm93IGNvcHkgYnVpbGQvcHlkb2MtdG9waWNzL3RvcGljcy5weSIgXAorCSAgICAgICJ0byBMaWIvcHlkb2NfZGF0YS90b3BpY3MucHkiCiAKIGh0bWx2aWV3OiBodG1sCiAJICQoUFlUSE9OKSAtYyAiaW1wb3J0IHdlYmJyb3dzZXI7IHdlYmJyb3dzZXIub3BlbignYnVpbGQvaHRtbC9pbmRleC5odG1sJykiCkBAIC0xMTksNyArMTIxLDcgQEAKIAktcm0gLXJmIHRvb2xzL2RvY3V0aWxzCiAKIGRpc3Q6Ci0JLXJtIC1yZiBkaXN0CisJcm0gLXJmIGRpc3QKIAlta2RpciAtcCBkaXN0CiAKIAkjIGFyY2hpdmUgdGhlIEhUTUwKQEAgLTEzOSw5ICsxNDEsOSBAQAogCShjZCBkaXN0OyB6aXAgLXEgLXIgLTkgcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtdGV4dC56aXAgcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtdGV4dCkKIAlybSAtciBkaXN0L3B5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLXRleHQKIAlybSBkaXN0L3B5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLXRleHQudGFyCi0JCisKIAkjIGFyY2hpdmUgdGhlIEE0IGxhdGV4Ci0JLXJtIC1yIGJ1aWxkL2xhdGV4CisJcm0gLXJmIGJ1aWxkL2xhdGV4CiAJbWFrZSBsYXRleCBQQVBFUj1hNAogCS1zZWQgLWkgJ3MvbWFrZWluZGV4L21ha2VpbmRleCAtcS8nIGJ1aWxkL2xhdGV4L01ha2VmaWxlCiAJKGNkIGJ1aWxkL2xhdGV4OyBtYWtlIGNsZWFuICYmIG1ha2UgYWxsLXBkZiAmJiBtYWtlIEZNVD1wZGYgemlwIGJ6MikKQEAgLTE0OSw3ICsxNTEsNyBAQAogCWNwIGJ1aWxkL2xhdGV4L2RvY3MtcGRmLnRhci5iejIgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1wZGYtYTQudGFyLmJ6MgogCiAJIyBhcmNoaXZlIHRoZSBsZXR0ZXIgbGF0ZXgKLQlybSAtciBidWlsZC9sYXRleAorCXJtIC1yZiBidWlsZC9sYXRleAogCW1ha2UgbGF0ZXggUEFQRVI9bGV0dGVyCiAJLXNlZCAtaSAncy9tYWtlaW5kZXgvbWFrZWluZGV4IC1xLycgYnVpbGQvbGF0ZXgvTWFrZWZpbGUKIAkoY2QgYnVpbGQvbGF0ZXg7IG1ha2UgY2xlYW4gJiYgbWFrZSBhbGwtcGRmICYmIG1ha2UgRk1UPXBkZiB6aXAgYnoyKQpAQCAtMTU5LDYgKzE2MSw5IEBACiBjaGVjazoKIAkkKFBZVEhPTikgdG9vbHMvcnN0bGludC5weSAtaSB0b29scwogCitzZXJ2ZToKKwkuLi9Ub29scy9zY3JpcHRzL3NlcnZlLnB5IGJ1aWxkL2h0bWwKKwogIyBUYXJnZXRzIGZvciBkYWlseSBhdXRvbWF0ZWQgZG9jIGJ1aWxkCiAKICMgZm9yIGRldmVsb3BtZW50IHJlbGVhc2VzOiBhbHdheXMgYnVpbGQKZGlmZiAtLWdpdCBhL0RvYy9SRUFETUUudHh0IGIvRG9jL1JFQURNRS50eHQKaW5kZXggZDMyZDFlZC4uMGU3MGJlNSAxMDA2NDQKLS0tIGEvRG9jL1JFQURNRS50eHQKKysrIGIvRG9jL1JFQURNRS50eHQKQEAgLTczLDcgKzczLDcgQEAKIAogWW91J2xsIG5lZWQgdG8gaW5zdGFsbCB0aGUgU3BoaW54IHBhY2thZ2UsIGVpdGhlciBieSBjaGVja2luZyBpdCBvdXQgdmlhIDo6CiAKLSAgIHN2biBjbyBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvU3BoaW54LTAuNi41L3NwaGlueCB0b29scy9zcGhpbngKKyAgIHN2biBjbyBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvU3BoaW54LTAuNi43L3NwaGlueCB0b29scy9zcGhpbngKIAogb3IgYnkgaW5zdGFsbGluZyBpdCBmcm9tIFB5UEkuCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9idWZmZXIucnN0IGIvRG9jL2MtYXBpL2J1ZmZlci5yc3QKaW5kZXggZGJmYWU0Zi4uZWU1ZDE3YSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2J1ZmZlci5yc3QKKysrIGIvRG9jL2MtYXBpL2J1ZmZlci5yc3QKQEAgLTIsMTAgKzIsMTEgQEAKIAogLi4gX2J1ZmZlcm9iamVjdHM6CiAKLUJ1ZmZlciBPYmplY3RzCi0tLS0tLS0tLS0tLS0tLQorQnVmZmVycyBhbmQgTWVtb3J5dmlldyBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLi4gc2VjdGlvbmF1dGhvcjo6IEdyZWcgU3RlaW4gPGdzdGVpbkBseXJhLm9yZz4KKy4uIHNlY3Rpb25hdXRob3I6OiBCZW5qYW1pbiBQZXRlcnNvbgogCiAKIC4uIGluZGV4OjoKQEAgLTMwMCwxMiArMzAxLDU2IEBACiAgICBsZW5ndGguICBSZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMSAod2l0aCByYWlzaW5nIGFuIGVycm9yKSBvbiBlcnJvci4KIAogCitNZW1vcnlWaWV3IG9iamVjdHMKKz09PT09PT09PT09PT09PT09PQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworQSA6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdCBleHBvc2VzIHRoZSBuZXcgQyBsZXZlbCBidWZmZXIgaW50ZXJmYWNlIGFzIGEKK1B5dGhvbiBvYmplY3Qgd2hpY2ggY2FuIHRoZW4gYmUgcGFzc2VkIGFyb3VuZCBsaWtlIGFueSBvdGhlciBvYmplY3QuCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0ICpQeU1lbW9yeVZpZXdfRnJvbU9iamVjdChQeU9iamVjdCAqb2JqKQorCisgICBDcmVhdGUgYSBtZW1vcnl2aWV3IG9iamVjdCBmcm9tIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIG5ldyBidWZmZXIKKyAgIGludGVyZmFjZS4KKworCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCAqUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoUHlfYnVmZmVyICp2aWV3KQorCisgICBDcmVhdGUgYSBtZW1vcnl2aWV3IG9iamVjdCB3cmFwcGluZyB0aGUgZ2l2ZW4gYnVmZmVyLWluZm8gc3RydWN0dXJlICp2aWV3Ki4KKyAgIFRoZSBtZW1vcnl2aWV3IG9iamVjdCB0aGVuIG93bnMgdGhlIGJ1ZmZlciwgd2hpY2ggbWVhbnMgeW91IHNob3VsZG4ndAorICAgdHJ5IHRvIHJlbGVhc2UgaXQgeW91cnNlbGY6IGl0IHdpbGwgYmUgcmVsZWFzZWQgb24gZGVhbGxvY2F0aW9uIG9mIHRoZQorICAgbWVtb3J5dmlldyBvYmplY3QuCisKKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QgKlB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzKFB5T2JqZWN0ICpvYmosIGludCBidWZmZXJ0eXBlLCBjaGFyIG9yZGVyKQorCisgICBDcmVhdGUgYSBtZW1vcnl2aWV3IG9iamVjdCB0byBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5IChpbiBlaXRoZXIKKyAgICdDJyBvciAnRidvcnRyYW4gKm9yZGVyKikgZnJvbSBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBidWZmZXIKKyAgIGludGVyZmFjZS4gSWYgbWVtb3J5IGlzIGNvbnRpZ3VvdXMsIHRoZSBtZW1vcnl2aWV3IG9iamVjdCBwb2ludHMgdG8gdGhlCisgICBvcmlnaW5hbCBtZW1vcnkuIE90aGVyd2lzZSBjb3B5IGlzIG1hZGUgYW5kIHRoZSBtZW1vcnl2aWV3IHBvaW50cyB0byBhCisgICBuZXcgYnl0ZXMgb2JqZWN0LgorCisKKy4uIGNmdW5jdGlvbjo6IGludCBQeU1lbW9yeVZpZXdfQ2hlY2soUHlPYmplY3QgKm9iaikKKworICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCAqb2JqKiBpcyBhIG1lbW9yeXZpZXcgb2JqZWN0LiAgSXQgaXMgbm90CisgICBjdXJyZW50bHkgYWxsb3dlZCB0byBjcmVhdGUgc3ViY2xhc3NlcyBvZiA6Y2xhc3M6YG1lbW9yeXZpZXdgLgorCisKKy4uIGNmdW5jdGlvbjo6IFB5X2J1ZmZlciAqUHlNZW1vcnlWaWV3X0dFVF9CVUZGRVIoUHlPYmplY3QgKm9iaikKKworICAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyLWluZm8gc3RydWN0dXJlIHdyYXBwZWQgYnkgdGhlIGdpdmVuCisgICBvYmplY3QuICBUaGUgb2JqZWN0ICoqbXVzdCoqIGJlIGEgbWVtb3J5dmlldyBpbnN0YW5jZTsgdGhpcyBtYWNybyBkb2Vzbid0CisgICBjaGVjayBpdHMgdHlwZSwgeW91IG11c3QgZG8gaXQgeW91cnNlbGYgb3IgeW91IHdpbGwgcmlzayBjcmFzaGVzLgorCisKIE9sZC1zdHlsZSBidWZmZXIgb2JqZWN0cwogPT09PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIGluZGV4Ojogc2luZ2xlOiBQeUJ1ZmZlclByb2NzCiAKLU1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGJ1ZmZlciBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgaW4gdGhlIHNlY3Rpb24KK01vcmUgaW5mb3JtYXRpb24gb24gdGhlIG9sZCBidWZmZXIgaW50ZXJmYWNlIGlzIHByb3ZpZGVkIGluIHRoZSBzZWN0aW9uCiA6cmVmOmBidWZmZXItc3RydWN0c2AsIHVuZGVyIHRoZSBkZXNjcmlwdGlvbiBmb3IgOmN0eXBlOmBQeUJ1ZmZlclByb2NzYC4KIAogQSAiYnVmZmVyIG9iamVjdCIgaXMgZGVmaW5lZCBpbiB0aGUgOmZpbGU6YGJ1ZmZlcm9iamVjdC5oYCBoZWFkZXIgKGluY2x1ZGVkIGJ5CmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY2Fwc3VsZS5yc3QgYi9Eb2MvYy1hcGkvY2Fwc3VsZS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzOTMxNAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9jLWFwaS9jYXBzdWxlLnJzdApAQCAtMCwwICsxLDE1MCBAQAorLi4gaGlnaGxpZ2h0bGFuZzo6IGMKKworLi4gX2NhcHN1bGVzOgorCitDYXBzdWxlcworLS0tLS0tLS0KKworLi4gaW5kZXg6OiBvYmplY3Q6IENhcHN1bGUKKworUmVmZXIgdG8gOnJlZjpgdXNpbmctY2Fwc3VsZXNgIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZXNlIG9iamVjdHMuCisKKworLi4gY3R5cGU6OiBQeUNhcHN1bGUKKworICAgVGhpcyBzdWJ0eXBlIG9mIDpjdHlwZTpgUHlPYmplY3RgIHJlcHJlc2VudHMgYW4gb3BhcXVlIHZhbHVlLCB1c2VmdWwgZm9yIEMKKyAgIGV4dGVuc2lvbiBtb2R1bGVzIHdobyBuZWVkIHRvIHBhc3MgYW4gb3BhcXVlIHZhbHVlIChhcyBhIDpjdHlwZTpgdm9pZFwqYAorICAgcG9pbnRlcikgdGhyb3VnaCBQeXRob24gY29kZSB0byBvdGhlciBDIGNvZGUuICBJdCBpcyBvZnRlbiB1c2VkIHRvIG1ha2UgYSBDCisgICBmdW5jdGlvbiBwb2ludGVyIGRlZmluZWQgaW4gb25lIG1vZHVsZSBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcywgc28gdGhlCisgICByZWd1bGFyIGltcG9ydCBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gYWNjZXNzIEMgQVBJcyBkZWZpbmVkIGluIGR5bmFtaWNhbGx5CisgICBsb2FkZWQgbW9kdWxlcy4KKworLi4gY3R5cGU6OiBQeUNhcHN1bGVfRGVzdHJ1Y3RvcgorCisgICBUaGUgdHlwZSBvZiBhIGRlc3RydWN0b3IgY2FsbGJhY2sgZm9yIGEgY2Fwc3VsZS4gIERlZmluZWQgYXM6OgorCisgICAgICB0eXBlZGVmIHZvaWQgKCpQeUNhcHN1bGVfRGVzdHJ1Y3RvcikoUHlPYmplY3QgKik7CisKKyAgIFNlZSA6Y2Z1bmM6YFB5Q2Fwc3VsZV9OZXdgIGZvciB0aGUgc2VtYW50aWNzIG9mIFB5Q2Fwc3VsZV9EZXN0cnVjdG9yCisgICBjYWxsYmFja3MuCisKKworLi4gY2Z1bmN0aW9uOjogaW50IFB5Q2Fwc3VsZV9DaGVja0V4YWN0KFB5T2JqZWN0ICpwKQorCisgICBSZXR1cm4gdHJ1ZSBpZiBpdHMgYXJndW1lbnQgaXMgYSA6Y3R5cGU6YFB5Q2Fwc3VsZWAuCisKKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q2Fwc3VsZV9OZXcodm9pZCAqcG9pbnRlciwgY29uc3QgY2hhciAqbmFtZSwgUHlDYXBzdWxlX0Rlc3RydWN0b3IgZGVzdHJ1Y3RvcikKKworICAgQ3JlYXRlIGEgOmN0eXBlOmBQeUNhcHN1bGVgIGVuY2Fwc3VsYXRpbmcgdGhlICpwb2ludGVyKi4gIFRoZSAqcG9pbnRlcioKKyAgIGFyZ3VtZW50IG1heSBub3QgYmUgKk5VTEwqLgorCisgICBPbiBmYWlsdXJlLCBzZXQgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gKk5VTEwqLgorCisgICBUaGUgKm5hbWUqIHN0cmluZyBtYXkgZWl0aGVyIGJlICpOVUxMKiBvciBhIHBvaW50ZXIgdG8gYSB2YWxpZCBDIHN0cmluZy4gIElmCisgICBub24tKk5VTEwqLCB0aGlzIHN0cmluZyBtdXN0IG91dGxpdmUgdGhlIGNhcHN1bGUuICAoVGhvdWdoIGl0IGlzIHBlcm1pdHRlZCB0bworICAgZnJlZSBpdCBpbnNpZGUgdGhlICpkZXN0cnVjdG9yKi4pCisKKyAgIElmIHRoZSAqZGVzdHJ1Y3RvciogYXJndW1lbnQgaXMgbm90ICpOVUxMKiwgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUKKyAgIGNhcHN1bGUgYXMgaXRzIGFyZ3VtZW50IHdoZW4gaXQgaXMgZGVzdHJveWVkLgorCisgICBJZiB0aGlzIGNhcHN1bGUgd2lsbCBiZSBzdG9yZWQgYXMgYW4gYXR0cmlidXRlIG9mIGEgbW9kdWxlLCB0aGUgKm5hbWUqIHNob3VsZAorICAgYmUgc3BlY2lmaWVkIGFzIGBgbW9kdWxlbmFtZS5hdHRyaWJ1dGVuYW1lYGAuICBUaGlzIHdpbGwgZW5hYmxlIG90aGVyIG1vZHVsZXMKKyAgIHRvIGltcG9ydCB0aGUgY2Fwc3VsZSB1c2luZyA6Y2Z1bmM6YFB5Q2Fwc3VsZV9JbXBvcnRgLgorCisKKy4uIGNmdW5jdGlvbjo6IHZvaWQqIFB5Q2Fwc3VsZV9HZXRQb2ludGVyKFB5T2JqZWN0ICpjYXBzdWxlLCBjb25zdCBjaGFyICpuYW1lKQorCisgICBSZXRyaWV2ZSB0aGUgKnBvaW50ZXIqIHN0b3JlZCBpbiB0aGUgY2Fwc3VsZS4gIE9uIGZhaWx1cmUsIHNldCBhbiBleGNlcHRpb24KKyAgIGFuZCByZXR1cm4gKk5VTEwqLgorCisgICBUaGUgKm5hbWUqIHBhcmFtZXRlciBtdXN0IGNvbXBhcmUgZXhhY3RseSB0byB0aGUgbmFtZSBzdG9yZWQgaW4gdGhlIGNhcHN1bGUuCisgICBJZiB0aGUgbmFtZSBzdG9yZWQgaW4gdGhlIGNhcHN1bGUgaXMgKk5VTEwqLCB0aGUgKm5hbWUqIHBhc3NlZCBpbiBtdXN0IGFsc28KKyAgIGJlICpOVUxMKi4gIFB5dGhvbiB1c2VzIHRoZSBDIGZ1bmN0aW9uIDpjZnVuYzpgc3RyY21wYCB0byBjb21wYXJlIGNhcHN1bGUKKyAgIG5hbWVzLgorCisKKy4uIGNmdW5jdGlvbjo6IFB5Q2Fwc3VsZV9EZXN0cnVjdG9yIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yKFB5T2JqZWN0ICpjYXBzdWxlKQorCisgICBSZXR1cm4gdGhlIGN1cnJlbnQgZGVzdHJ1Y3RvciBzdG9yZWQgaW4gdGhlIGNhcHN1bGUuICBPbiBmYWlsdXJlLCBzZXQgYW4KKyAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJuICpOVUxMKi4KKworICAgSXQgaXMgbGVnYWwgZm9yIGEgY2Fwc3VsZSB0byBoYXZlIGEgKk5VTEwqIGRlc3RydWN0b3IuICBUaGlzIG1ha2VzIGEgKk5VTEwqCisgICByZXR1cm4gY29kZSBzb21ld2hhdCBhbWJpZ3VvdXM7IHVzZSA6Y2Z1bmM6YFB5Q2Fwc3VsZV9Jc1ZhbGlkYCBvcgorICAgOmNmdW5jOmBQeUVycl9PY2N1cnJlZGAgdG8gZGlzYW1iaWd1YXRlLgorCisKKy4uIGNmdW5jdGlvbjo6IHZvaWQqIFB5Q2Fwc3VsZV9HZXRDb250ZXh0KFB5T2JqZWN0ICpjYXBzdWxlKQorCisgICBSZXR1cm4gdGhlIGN1cnJlbnQgY29udGV4dCBzdG9yZWQgaW4gdGhlIGNhcHN1bGUuICBPbiBmYWlsdXJlLCBzZXQgYW4KKyAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJuICpOVUxMKi4KKworICAgSXQgaXMgbGVnYWwgZm9yIGEgY2Fwc3VsZSB0byBoYXZlIGEgKk5VTEwqIGNvbnRleHQuICBUaGlzIG1ha2VzIGEgKk5VTEwqCisgICByZXR1cm4gY29kZSBzb21ld2hhdCBhbWJpZ3VvdXM7IHVzZSA6Y2Z1bmM6YFB5Q2Fwc3VsZV9Jc1ZhbGlkYCBvcgorICAgOmNmdW5jOmBQeUVycl9PY2N1cnJlZGAgdG8gZGlzYW1iaWd1YXRlLgorCisKKy4uIGNmdW5jdGlvbjo6IGNvbnN0IGNoYXIqIFB5Q2Fwc3VsZV9HZXROYW1lKFB5T2JqZWN0ICpjYXBzdWxlKQorCisgICBSZXR1cm4gdGhlIGN1cnJlbnQgbmFtZSBzdG9yZWQgaW4gdGhlIGNhcHN1bGUuICBPbiBmYWlsdXJlLCBzZXQgYW4gZXhjZXB0aW9uCisgICBhbmQgcmV0dXJuICpOVUxMKi4KKworICAgSXQgaXMgbGVnYWwgZm9yIGEgY2Fwc3VsZSB0byBoYXZlIGEgKk5VTEwqIG5hbWUuICBUaGlzIG1ha2VzIGEgKk5VTEwqIHJldHVybgorICAgY29kZSBzb21ld2hhdCBhbWJpZ3VvdXM7IHVzZSA6Y2Z1bmM6YFB5Q2Fwc3VsZV9Jc1ZhbGlkYCBvcgorICAgOmNmdW5jOmBQeUVycl9PY2N1cnJlZGAgdG8gZGlzYW1iaWd1YXRlLgorCisKKy4uIGNmdW5jdGlvbjo6IHZvaWQqIFB5Q2Fwc3VsZV9JbXBvcnQoY29uc3QgY2hhciAqbmFtZSwgaW50IG5vX2Jsb2NrKQorCisgICBJbXBvcnQgYSBwb2ludGVyIHRvIGEgQyBvYmplY3QgZnJvbSBhIGNhcHN1bGUgYXR0cmlidXRlIGluIGEgbW9kdWxlLiAgVGhlCisgICAqbmFtZSogcGFyYW1ldGVyIHNob3VsZCBzcGVjaWZ5IHRoZSBmdWxsIG5hbWUgdG8gdGhlIGF0dHJpYnV0ZSwgYXMgaW4KKyAgIGBgbW9kdWxlLmF0dHJpYnV0ZWBgLiAgVGhlICpuYW1lKiBzdG9yZWQgaW4gdGhlIGNhcHN1bGUgbXVzdCBtYXRjaCB0aGlzCisgICBzdHJpbmcgZXhhY3RseS4gIElmICpub19ibG9jayogaXMgdHJ1ZSwgaW1wb3J0IHRoZSBtb2R1bGUgd2l0aG91dCBibG9ja2luZworICAgKHVzaW5nIDpjZnVuYzpgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9ja2ApLiAgSWYgKm5vX2Jsb2NrKiBpcyBmYWxzZSwKKyAgIGltcG9ydCB0aGUgbW9kdWxlIGNvbnZlbnRpb25hbGx5ICh1c2luZyA6Y2Z1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZWApLgorCisgICBSZXR1cm4gdGhlIGNhcHN1bGUncyBpbnRlcm5hbCAqcG9pbnRlciogb24gc3VjY2Vzcy4gIE9uIGZhaWx1cmUsIHNldCBhbgorICAgZXhjZXB0aW9uIGFuZCByZXR1cm4gKk5VTEwqLiAgSG93ZXZlciwgaWYgOmNmdW5jOmBQeUNhcHN1bGVfSW1wb3J0YCBmYWlsZWQgdG8KKyAgIGltcG9ydCB0aGUgbW9kdWxlLCBhbmQgKm5vX2Jsb2NrKiB3YXMgdHJ1ZSwgbm8gZXhjZXB0aW9uIGlzIHNldC4KKworLi4gY2Z1bmN0aW9uOjogaW50IFB5Q2Fwc3VsZV9Jc1ZhbGlkKFB5T2JqZWN0ICpjYXBzdWxlLCBjb25zdCBjaGFyICpuYW1lKQorCisgICBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90ICpjYXBzdWxlKiBpcyBhIHZhbGlkIGNhcHN1bGUuICBBIHZhbGlkIGNhcHN1bGUgaXMKKyAgIG5vbi0qTlVMTCosIHBhc3NlcyA6Y2Z1bmM6YFB5Q2Fwc3VsZV9DaGVja0V4YWN0YCwgaGFzIGEgbm9uLSpOVUxMKiBwb2ludGVyCisgICBzdG9yZWQgaW4gaXQsIGFuZCBpdHMgaW50ZXJuYWwgbmFtZSBtYXRjaGVzIHRoZSAqbmFtZSogcGFyYW1ldGVyLiAgKFNlZQorICAgOmNmdW5jOmBQeUNhcHN1bGVfR2V0UG9pbnRlcmAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyBjYXBzdWxlIG5hbWVzIGFyZQorICAgY29tcGFyZWQuKQorCisgICBJbiBvdGhlciB3b3JkcywgaWYgOmNmdW5jOmBQeUNhcHN1bGVfSXNWYWxpZGAgcmV0dXJucyBhIHRydWUgdmFsdWUsIGNhbGxzIHRvCisgICBhbnkgb2YgdGhlIGFjY2Vzc29ycyAoYW55IGZ1bmN0aW9uIHN0YXJ0aW5nIHdpdGggOmNmdW5jOmBQeUNhcHN1bGVfR2V0YCkgYXJlCisgICBndWFyYW50ZWVkIHRvIHN1Y2NlZWQuCisKKyAgIFJldHVybiBhIG5vbnplcm8gdmFsdWUgaWYgdGhlIG9iamVjdCBpcyB2YWxpZCBhbmQgbWF0Y2hlcyB0aGUgbmFtZSBwYXNzZWQgaW4uCisgICBSZXR1cm4gMCBvdGhlcndpc2UuICBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGZhaWwuCisKKy4uIGNmdW5jdGlvbjo6IGludCBQeUNhcHN1bGVfU2V0Q29udGV4dChQeU9iamVjdCAqY2Fwc3VsZSwgdm9pZCAqY29udGV4dCkKKworICAgU2V0IHRoZSBjb250ZXh0IHBvaW50ZXIgaW5zaWRlICpjYXBzdWxlKiB0byAqY29udGV4dCouCisKKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MuICBSZXR1cm4gbm9uemVybyBhbmQgc2V0IGFuIGV4Y2VwdGlvbiBvbiBmYWlsdXJlLgorCisuLiBjZnVuY3Rpb246OiBpbnQgUHlDYXBzdWxlX1NldERlc3RydWN0b3IoUHlPYmplY3QgKmNhcHN1bGUsIFB5Q2Fwc3VsZV9EZXN0cnVjdG9yIGRlc3RydWN0b3IpCisKKyAgIFNldCB0aGUgZGVzdHJ1Y3RvciBpbnNpZGUgKmNhcHN1bGUqIHRvICpkZXN0cnVjdG9yKi4KKworICAgUmV0dXJuIDAgb24gc3VjY2Vzcy4gIFJldHVybiBub256ZXJvIGFuZCBzZXQgYW4gZXhjZXB0aW9uIG9uIGZhaWx1cmUuCisKKy4uIGNmdW5jdGlvbjo6IGludCBQeUNhcHN1bGVfU2V0TmFtZShQeU9iamVjdCAqY2Fwc3VsZSwgY29uc3QgY2hhciAqbmFtZSkKKworICAgU2V0IHRoZSBuYW1lIGluc2lkZSAqY2Fwc3VsZSogdG8gKm5hbWUqLiAgSWYgbm9uLSpOVUxMKiwgdGhlIG5hbWUgbXVzdAorICAgb3V0bGl2ZSB0aGUgY2Fwc3VsZS4gIElmIHRoZSBwcmV2aW91cyAqbmFtZSogc3RvcmVkIGluIHRoZSBjYXBzdWxlIHdhcyBub3QKKyAgICpOVUxMKiwgbm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGZyZWUgaXQuCisKKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MuICBSZXR1cm4gbm9uemVybyBhbmQgc2V0IGFuIGV4Y2VwdGlvbiBvbiBmYWlsdXJlLgorCisuLiBjZnVuY3Rpb246OiBpbnQgUHlDYXBzdWxlX1NldFBvaW50ZXIoUHlPYmplY3QgKmNhcHN1bGUsIHZvaWQgKnBvaW50ZXIpCisKKyAgIFNldCB0aGUgdm9pZCBwb2ludGVyIGluc2lkZSAqY2Fwc3VsZSogdG8gKnBvaW50ZXIqLiAgVGhlIHBvaW50ZXIgbWF5IG5vdCBiZQorICAgKk5VTEwqLgorCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLiAgUmV0dXJuIG5vbnplcm8gYW5kIHNldCBhbiBleGNlcHRpb24gb24gZmFpbHVyZS4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9jb2JqZWN0LnJzdCBiL0RvYy9jLWFwaS9jb2JqZWN0LnJzdAppbmRleCAxMGY3YmJhLi43M2ZiYmY1IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvY29iamVjdC5yc3QKKysrIGIvRG9jL2MtYXBpL2NvYmplY3QucnN0CkBAIC03LDggKzcsMTEgQEAKIAogLi4gaW5kZXg6OiBvYmplY3Q6IENPYmplY3QKIAotUmVmZXIgdG8gOnJlZjpgdXNpbmctY29iamVjdHNgIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZXNlIG9iamVjdHMuCiAKKy4uIHdhcm5pbmc6OgorCisgICBUaGUgQ09iamVjdCBBUEkgaXMgZGVwcmVjYXRlZCBhcyBvZiBQeXRob24gMi43LiAgUGxlYXNlIHN3aXRjaCB0byB0aGUgbmV3CisgICA6cmVmOmBjYXBzdWxlc2AgQVBJLgogCiAuLiBjdHlwZTo6IFB5Q09iamVjdAogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29kZS5yc3QgYi9Eb2MvYy1hcGkvY29kZS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjYThjNQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9jLWFwaS9jb2RlLnJzdApAQCAtMCwwICsxLDUwIEBACisuLiBoaWdobGlnaHRsYW5nOjogYworCisuLiBfY29kZW9iamVjdHM6CisKK0NvZGUgT2JqZWN0cworLS0tLS0tLS0tLS0tCisKKy4uIHNlY3Rpb25hdXRob3I6OiBKZWZmcmV5IFlhc3NraW4gPGp5YXNza2luQGdtYWlsLmNvbT4KKworCisuLiBpbmRleDo6CisgICBvYmplY3Q6IGNvZGUKKworQ29kZSBvYmplY3RzIGFyZSBhIGxvdy1sZXZlbCBkZXRhaWwgb2YgdGhlIENQeXRob24gaW1wbGVtZW50YXRpb24uCitFYWNoIG9uZSByZXByZXNlbnRzIGEgY2h1bmsgb2YgZXhlY3V0YWJsZSBjb2RlIHRoYXQgaGFzbid0IHlldCBiZWVuCitib3VuZCBpbnRvIGEgZnVuY3Rpb24uCisKKy4uIGN0eXBlOjogUHlDb2RlT2JqZWN0CisKKyAgIFRoZSBDIHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0cyB1c2VkIHRvIGRlc2NyaWJlIGNvZGUgb2JqZWN0cy4gIFRoZQorICAgZmllbGRzIG9mIHRoaXMgdHlwZSBhcmUgc3ViamVjdCB0byBjaGFuZ2UgYXQgYW55IHRpbWUuCisKKworLi4gY3Zhcjo6IFB5VHlwZU9iamVjdCBQeUNvZGVfVHlwZQorCisgICBUaGlzIGlzIGFuIGluc3RhbmNlIG9mIDpjdHlwZTpgUHlUeXBlT2JqZWN0YCByZXByZXNlbnRpbmcgdGhlIFB5dGhvbgorICAgOmNsYXNzOmBjb2RlYCB0eXBlLgorCisKKy4uIGNmdW5jdGlvbjo6IGludCBQeUNvZGVfQ2hlY2soUHlPYmplY3QgKmNvKQorCisgICBSZXR1cm4gdHJ1ZSBpZiAqY28qIGlzIGEgOmNsYXNzOmBjb2RlYCBvYmplY3QKKworLi4gY2Z1bmN0aW9uOjogaW50IFB5Q29kZV9HZXROdW1GcmVlKFB5T2JqZWN0ICpjbykKKworICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJlZSB2YXJpYWJsZXMgaW4gKmNvKi4KKworLi4gY2Z1bmN0aW9uOjogUHlDb2RlT2JqZWN0ICpQeUNvZGVfTmV3KGludCBhcmdjb3VudCwgaW50IG5sb2NhbHMsIGludCBzdGFja3NpemUsIGludCBmbGFncywgUHlPYmplY3QgKmNvZGUsIFB5T2JqZWN0ICpjb25zdHMsIFB5T2JqZWN0ICpuYW1lcywgUHlPYmplY3QgKnZhcm5hbWVzLCBQeU9iamVjdCAqZnJlZXZhcnMsIFB5T2JqZWN0ICpjZWxsdmFycywgUHlPYmplY3QgKmZpbGVuYW1lLCBQeU9iamVjdCAqbmFtZSwgaW50IGZpcnN0bGluZW5vLCBQeU9iamVjdCAqbG5vdGFiKQorCisgICBSZXR1cm4gYSBuZXcgY29kZSBvYmplY3QuICBJZiB5b3UgbmVlZCBhIGR1bW15IGNvZGUgb2JqZWN0IHRvCisgICBjcmVhdGUgYSBmcmFtZSwgdXNlIDpjZnVuYzpgUHlDb2RlX05ld0VtcHR5YCBpbnN0ZWFkLiAgQ2FsbGluZworICAgOmNmdW5jOmBQeUNvZGVfTmV3YCBkaXJlY3RseSBjYW4gYmluZCB5b3UgdG8gYSBwcmVjaXNlIFB5dGhvbgorICAgdmVyc2lvbiBzaW5jZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYnl0ZWNvZGUgY2hhbmdlcyBvZnRlbi4KKworCisuLiBjZnVuY3Rpb246OiBpbnQgUHlDb2RlX05ld0VtcHR5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmdW5jbmFtZSwgaW50IGZpcnN0bGluZW5vKQorCisgICBSZXR1cm4gYSBuZXcgZW1wdHkgY29kZSBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lLAorICAgZnVuY3Rpb24gbmFtZSwgYW5kIGZpcnN0IGxpbmUgbnVtYmVyLiAgSXQgaXMgaWxsZWdhbCB0bworICAgOmtleXdvcmQ6YGV4ZWNgIG9yIDpmdW5jOmBldmFsYCB0aGUgcmVzdWx0aW5nIGNvZGUgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NvZGVjLnJzdCBiL0RvYy9jLWFwaS9jb2RlYy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5N2QzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9jLWFwaS9jb2RlYy5yc3QKQEAgLTAsMCArMSwxMTggQEAKKy4uIF9jb2RlYy1yZWdpc3RyeToKKworQ29kZWMgcmVnaXN0cnkgYW5kIHN1cHBvcnQgZnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gY2Z1bmN0aW9uOjogaW50IFB5Q29kZWNfUmVnaXN0ZXIoUHlPYmplY3QgKnNlYXJjaF9mdW5jdGlvbikKKworICAgUmVnaXN0ZXIgYSBuZXcgY29kZWMgc2VhcmNoIGZ1bmN0aW9uLgorCisgICBBcyBzaWRlIGVmZmVjdCwgdGhpcyB0cmllcyB0byBsb2FkIHRoZSA6bW9kOmBlbmNvZGluZ3NgIHBhY2thZ2UsIGlmIG5vdCB5ZXQKKyAgIGRvbmUsIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIGFsd2F5cyBmaXJzdCBpbiB0aGUgbGlzdCBvZiBzZWFyY2ggZnVuY3Rpb25zLgorCisuLiBjZnVuY3Rpb246OiBpbnQgUHlDb2RlY19Lbm93bkVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nKQorCisgICBSZXR1cm4gYGAxYGAgb3IgYGAwYGAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlcmUgaXMgYSByZWdpc3RlcmVkIGNvZGVjIGZvcgorICAgdGhlIGdpdmVuICplbmNvZGluZyouCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0VuY29kZShQeU9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorCisgICBHZW5lcmljIGNvZGVjIGJhc2VkIGVuY29kaW5nIEFQSS4KKworICAgKm9iamVjdCogaXMgcGFzc2VkIHRocm91Z2ggdGhlIGVuY29kZXIgZnVuY3Rpb24gZm91bmQgZm9yIHRoZSBnaXZlbgorICAgKmVuY29kaW5nKiB1c2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgbWV0aG9kIGRlZmluZWQgYnkgKmVycm9ycyouICAqZXJyb3JzKiBtYXkKKyAgIGJlICpOVUxMKiB0byB1c2UgdGhlIGRlZmF1bHQgbWV0aG9kIGRlZmluZWQgZm9yIHRoZSBjb2RlYy4gIFJhaXNlcyBhCisgICA6ZXhjOmBMb29rdXBFcnJvcmAgaWYgbm8gZW5jb2RlciBjYW4gYmUgZm91bmQuCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0RlY29kZShQeU9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorCisgICBHZW5lcmljIGNvZGVjIGJhc2VkIGRlY29kaW5nIEFQSS4KKworICAgKm9iamVjdCogaXMgcGFzc2VkIHRocm91Z2ggdGhlIGRlY29kZXIgZnVuY3Rpb24gZm91bmQgZm9yIHRoZSBnaXZlbgorICAgKmVuY29kaW5nKiB1c2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgbWV0aG9kIGRlZmluZWQgYnkgKmVycm9ycyouICAqZXJyb3JzKiBtYXkKKyAgIGJlICpOVUxMKiB0byB1c2UgdGhlIGRlZmF1bHQgbWV0aG9kIGRlZmluZWQgZm9yIHRoZSBjb2RlYy4gIFJhaXNlcyBhCisgICA6ZXhjOmBMb29rdXBFcnJvcmAgaWYgbm8gZW5jb2RlciBjYW4gYmUgZm91bmQuCisKKworQ29kZWMgbG9va3VwIEFQSQorLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgdGhlICplbmNvZGluZyogc3RyaW5nIGlzIGxvb2tlZCB1cCBjb252ZXJ0ZWQgdG8gYWxsCitsb3dlci1jYXNlIGNoYXJhY3RlcnMsIHdoaWNoIG1ha2VzIGVuY29kaW5ncyBsb29rZWQgdXAgdGhyb3VnaCB0aGlzIG1lY2hhbmlzbQorZWZmZWN0aXZlbHkgY2FzZS1pbnNlbnNpdGl2ZS4gIElmIG5vIGNvZGVjIGlzIGZvdW5kLCBhIDpleGM6YEtleUVycm9yYCBpcyBzZXQKK2FuZCAqTlVMTCogcmV0dXJuZWQuCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0VuY29kZXIoY29uc3QgY2hhciAqZW5jb2RpbmcpCisKKyAgIEdldCBhbiBlbmNvZGVyIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gKmVuY29kaW5nKi4KKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29kZWNfRGVjb2Rlcihjb25zdCBjaGFyICplbmNvZGluZykKKworICAgR2V0IGEgZGVjb2RlciBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0luY3JlbWVudGFsRW5jb2Rlcihjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorCisgICBHZXQgYW4gOmNsYXNzOmBJbmNyZW1lbnRhbEVuY29kZXJgIG9iamVjdCBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0luY3JlbWVudGFsRGVjb2Rlcihjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorCisgICBHZXQgYW4gOmNsYXNzOmBJbmNyZW1lbnRhbERlY29kZXJgIG9iamVjdCBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX1N0cmVhbVJlYWRlcihjb25zdCBjaGFyICplbmNvZGluZywgUHlPYmplY3QgKnN0cmVhbSwgY29uc3QgY2hhciAqZXJyb3JzKQorCisgICBHZXQgYSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgZmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX1N0cmVhbVdyaXRlcihjb25zdCBjaGFyICplbmNvZGluZywgUHlPYmplY3QgKnN0cmVhbSwgY29uc3QgY2hhciAqZXJyb3JzKQorCisgICBHZXQgYSA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAgZmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCisKKworUmVnaXN0cnkgQVBJIGZvciBVbmljb2RlIGVuY29kaW5nIGVycm9yIGhhbmRsZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gY2Z1bmN0aW9uOjogaW50IFB5Q29kZWNfUmVnaXN0ZXJFcnJvcihjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqZXJyb3IpCisKKyAgIFJlZ2lzdGVyIHRoZSBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBmdW5jdGlvbiAqZXJyb3IqIHVuZGVyIHRoZSBnaXZlbiAqbmFtZSouCisgICBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGEgY29kZWMgd2hlbiBpdCBlbmNvdW50ZXJzCisgICB1bmVuY29kYWJsZSBjaGFyYWN0ZXJzL3VuZGVjb2RhYmxlIGJ5dGVzIGFuZCAqbmFtZSogaXMgc3BlY2lmaWVkIGFzIHRoZSBlcnJvcgorICAgcGFyYW1ldGVyIGluIHRoZSBjYWxsIHRvIHRoZSBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9uLgorCisgICBUaGUgY2FsbGJhY2sgZ2V0cyBhIHNpbmdsZSBhcmd1bWVudCwgYW4gaW5zdGFuY2Ugb2YKKyAgIDpleGM6YFVuaWNvZGVFbmNvZGVFcnJvcmAsIDpleGM6YFVuaWNvZGVEZWNvZGVFcnJvcmAgb3IKKyAgIDpleGM6YFVuaWNvZGVUcmFuc2xhdGVFcnJvcmAgdGhhdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvYmxlbWF0aWMKKyAgIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgb3IgYnl0ZXMgYW5kIHRoZWlyIG9mZnNldCBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIChzZWUKKyAgIDpyZWY6YHVuaWNvZGVleGNlcHRpb25zYCBmb3IgZnVuY3Rpb25zIHRvIGV4dHJhY3QgdGhpcyBpbmZvcm1hdGlvbikuICBUaGUKKyAgIGNhbGxiYWNrIG11c3QgZWl0aGVyIHJhaXNlIHRoZSBnaXZlbiBleGNlcHRpb24sIG9yIHJldHVybiBhIHR3by1pdGVtIHR1cGxlCisgICBjb250YWluaW5nIHRoZSByZXBsYWNlbWVudCBmb3IgdGhlIHByb2JsZW1hdGljIHNlcXVlbmNlLCBhbmQgYW4gaW50ZWdlcgorICAgZ2l2aW5nIHRoZSBvZmZzZXQgaW4gdGhlIG9yaWdpbmFsIHN0cmluZyBhdCB3aGljaCBlbmNvZGluZy9kZWNvZGluZyBzaG91bGQgYmUKKyAgIHJlc3VtZWQuCisKKyAgIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzLCBgYC0xYGAgb24gZXJyb3IuCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0xvb2t1cEVycm9yKGNvbnN0IGNoYXIgKm5hbWUpCisKKyAgIExvb2t1cCB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciAqbmFtZSouICBBcyBhCisgICBzcGVjaWFsIGNhc2UgKk5VTEwqIGNhbiBiZSBwYXNzZWQsIGluIHdoaWNoIGNhc2UgdGhlIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrCisgICBmb3IgInN0cmljdCIgd2lsbCBiZSByZXR1cm5lZC4KKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29kZWNfU3RyaWN0RXJyb3JzKFB5T2JqZWN0ICpleGMpCisKKyAgIFJhaXNlICpleGMqIGFzIGFuIGV4Y2VwdGlvbi4KKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29kZWNfSWdub3JlRXJyb3JzKFB5T2JqZWN0ICpleGMpCisKKyAgIElnbm9yZSB0aGUgdW5pY29kZSBlcnJvciwgc2tpcHBpbmcgdGhlIGZhdWx0eSBpbnB1dC4KKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29kZWNfUmVwbGFjZUVycm9ycyhQeU9iamVjdCAqZXhjKQorCisgICBSZXBsYWNlIHRoZSB1bmljb2RlIGVuY29kZSBlcnJvciB3aXRoIGBgP2BgIG9yIGBgVStGRkZEYGAuCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzKFB5T2JqZWN0ICpleGMpCisKKyAgIFJlcGxhY2UgdGhlIHVuaWNvZGUgZW5jb2RlIGVycm9yIHdpdGggWE1MIGNoYXJhY3RlciByZWZlcmVuY2VzLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzKFB5T2JqZWN0ICpleGMpCisKKyAgIFJlcGxhY2UgdGhlIHVuaWNvZGUgZW5jb2RlIGVycm9yIHdpdGggYmFja3NsYXNoIGVzY2FwZXMgKGBgXHhgYCwgYGBcdWBgIGFuZAorICAgYGBcVWBgKS4KKwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdCBiL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKaW5kZXggNjk1ODY0Ni4uNWVlNjExYiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdAorKysgYi9Eb2MvYy1hcGkvY29uY3JldGUucnN0CkBAIC0xMDAsOCArMTAwLDEwIEBACiAgICBkZXNjcmlwdG9yLnJzdAogICAgc2xpY2UucnN0CiAgICB3ZWFrcmVmLnJzdAorICAgY2Fwc3VsZS5yc3QKICAgIGNvYmplY3QucnN0CiAgICBjZWxsLnJzdAogICAgZ2VuLnJzdAogICAgZGF0ZXRpbWUucnN0CiAgICBzZXQucnN0CisgICBjb2RlLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NvbnZlcnNpb24ucnN0IGIvRG9jL2MtYXBpL2NvbnZlcnNpb24ucnN0CmluZGV4IDBjODFiYzAuLmIzMjEwMGIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9jb252ZXJzaW9uLnJzdAorKysgYi9Eb2MvYy1hcGkvY29udmVyc2lvbi5yc3QKQEAgLTUxLDYgKzUxLDQwIEBACiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBwcm92aWRlIGxvY2FsZS1pbmRlcGVuZGVudCBzdHJpbmcgdG8gbnVtYmVyIGNvbnZlcnNpb25zLgogCiAKKy4uIGNmdW5jdGlvbjo6IGRvdWJsZSBQeU9TX3N0cmluZ190b19kb3VibGUoY29uc3QgY2hhciAqcywgY2hhciAqKmVuZHB0ciwgUHlPYmplY3QgKm92ZXJmbG93X2V4Y2VwdGlvbikKKworICAgQ29udmVydCBhIHN0cmluZyBgYHNgYCB0byBhIDpjdHlwZTpgZG91YmxlYCwgcmFpc2luZyBhIFB5dGhvbgorICAgZXhjZXB0aW9uIG9uIGZhaWx1cmUuICBUaGUgc2V0IG9mIGFjY2VwdGVkIHN0cmluZ3MgY29ycmVzcG9uZHMgdG8KKyAgIHRoZSBzZXQgb2Ygc3RyaW5ncyBhY2NlcHRlZCBieSBQeXRob24ncyA6ZnVuYzpgZmxvYXRgIGNvbnN0cnVjdG9yLAorICAgZXhjZXB0IHRoYXQgYGBzYGAgbXVzdCBub3QgaGF2ZSBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisgICBUaGUgY29udmVyc2lvbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgY3VycmVudCBsb2NhbGUuCisKKyAgIElmIGBgZW5kcHRyYGAgaXMgYGBOVUxMYGAsIGNvbnZlcnQgdGhlIHdob2xlIHN0cmluZy4gIFJhaXNlCisgICBWYWx1ZUVycm9yIGFuZCByZXR1cm4gYGAtMS4wYGAgaWYgdGhlIHN0cmluZyBpcyBub3QgYSB2YWxpZAorICAgcmVwcmVzZW50YXRpb24gb2YgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuCisKKyAgIElmIGVuZHB0ciBpcyBub3QgYGBOVUxMYGAsIGNvbnZlcnQgYXMgbXVjaCBvZiB0aGUgc3RyaW5nIGFzCisgICBwb3NzaWJsZSBhbmQgc2V0IGBgKmVuZHB0cmBgIHRvIHBvaW50IHRvIHRoZSBmaXJzdCB1bmNvbnZlcnRlZAorICAgY2hhcmFjdGVyLiAgSWYgbm8gaW5pdGlhbCBzZWdtZW50IG9mIHRoZSBzdHJpbmcgaXMgdGhlIHZhbGlkCisgICByZXByZXNlbnRhdGlvbiBvZiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgc2V0IGBgKmVuZHB0cmBgIHRvIHBvaW50CisgICB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcsIHJhaXNlIFZhbHVlRXJyb3IsIGFuZCByZXR1cm4KKyAgIGBgLTEuMGBgLgorCisgICBJZiBgYHNgYCByZXByZXNlbnRzIGEgdmFsdWUgdGhhdCBpcyB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBmbG9hdAorICAgKGZvciBleGFtcGxlLCBgYCIxZTUwMCJgYCBpcyBzdWNoIGEgc3RyaW5nIG9uIG1hbnkgcGxhdGZvcm1zKSB0aGVuCisgICBpZiBgYG92ZXJmbG93X2V4Y2VwdGlvbmBgIGlzIGBgTlVMTGBgIHJldHVybiBgYFB5X0hVR0VfVkFMYGAgKHdpdGgKKyAgIGFuIGFwcHJvcHJpYXRlIHNpZ24pIGFuZCBkb24ndCBzZXQgYW55IGV4Y2VwdGlvbi4gIE90aGVyd2lzZSwKKyAgIGBgb3ZlcmZsb3dfZXhjZXB0aW9uYGAgbXVzdCBwb2ludCB0byBhIFB5dGhvbiBleGNlcHRpb24gb2JqZWN0OworICAgcmFpc2UgdGhhdCBleGNlcHRpb24gYW5kIHJldHVybiBgYC0xLjBgYC4gIEluIGJvdGggY2FzZXMsIHNldAorICAgYGAqZW5kcHRyYGAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgY29udmVydGVkIHZhbHVlLgorCisgICBJZiBhbnkgb3RoZXIgZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgY29udmVyc2lvbiAoZm9yIGV4YW1wbGUgYW4KKyAgIG91dC1vZi1tZW1vcnkgZXJyb3IpLCBzZXQgdGhlIGFwcHJvcHJpYXRlIFB5dGhvbiBleGNlcHRpb24gYW5kCisgICByZXR1cm4gYGAtMS4wYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIC4uIGNmdW5jdGlvbjo6IGRvdWJsZSBQeU9TX2FzY2lpX3N0cnRvZChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyKQogCiAgICBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgOmN0eXBlOmBkb3VibGVgLiBUaGlzIGZ1bmN0aW9uIGJlaGF2ZXMgbGlrZSB0aGUgU3RhbmRhcmQgQwpAQCAtNjAsMTIgKzk0LDE2IEBACiAgICA6Y2Z1bmM6YFB5T1NfYXNjaWlfc3RydG9kYCBzaG91bGQgdHlwaWNhbGx5IGJlIHVzZWQgZm9yIHJlYWRpbmcgY29uZmlndXJhdGlvbgogICAgZmlsZXMgb3Igb3RoZXIgbm9uLXVzZXIgaW5wdXQgdGhhdCBzaG91bGQgYmUgbG9jYWxlIGluZGVwZW5kZW50LgogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjQKLQogICAgU2VlIHRoZSBVbml4IG1hbiBwYWdlIDptYW5wYWdlOmBzdHJ0b2QoMilgIGZvciBkZXRhaWxzLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjQKIAotLi4gY2Z1bmN0aW9uOjogY2hhciAqIFB5T1NfYXNjaWlfZm9ybWF0ZChjaGFyICpidWZmZXIsIHNpemVfdCBidWZfbGVuLCBjb25zdCBjaGFyICpmb3JtYXQsIGRvdWJsZSBkKQorICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgVXNlIDpjZnVuYzpgUHlPU19zdHJpbmdfdG9fZG91YmxlYCBpbnN0ZWFkLgorCisKKworLi4gY2Z1bmN0aW9uOjogY2hhciogUHlPU19hc2NpaV9mb3JtYXRkKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwgZG91YmxlIGQpCiAKICAgIENvbnZlcnQgYSA6Y3R5cGU6YGRvdWJsZWAgdG8gYSBzdHJpbmcgdXNpbmcgdGhlIGBgJy4nYGAgYXMgdGhlIGRlY2ltYWwKICAgIHNlcGFyYXRvci4gKmZvcm1hdCogaXMgYSA6Y2Z1bmM6YHByaW50ZmBcIC1zdHlsZSBmb3JtYXQgc3RyaW5nIHNwZWNpZnlpbmcgdGhlCkBAIC03NiwxOCArMTE0LDU4IEBACiAgICB0aGUgY29udmVyc2lvbiBmYWlsZWQuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNAorICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZW1vdmVkIGluIFB5dGhvbiAyLjcgYW5kIDMuMS4gIFVzZSA6ZnVuYzpgUHlPU19kb3VibGVfdG9fc3RyaW5nYAorICAgICAgaW5zdGVhZC4KKworCisuLiBjZnVuY3Rpb246OiBjaGFyKiBQeU9TX2RvdWJsZV90b19zdHJpbmcoZG91YmxlIHZhbCwgY2hhciBmb3JtYXRfY29kZSwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzLCBpbnQgKnB0eXBlKQorCisgICBDb252ZXJ0IGEgOmN0eXBlOmBkb3VibGVgICp2YWwqIHRvIGEgc3RyaW5nIHVzaW5nIHN1cHBsaWVkCisgICAqZm9ybWF0X2NvZGUqLCAqcHJlY2lzaW9uKiwgYW5kICpmbGFncyouCisKKyAgICpmb3JtYXRfY29kZSogbXVzdCBiZSBvbmUgb2YgYGAnZSdgYCwgYGAnRSdgYCwgYGAnZidgYCwgYGAnRidgYCwKKyAgIGBgJ2cnYGAsIGBgJ0cnYGAgb3IgYGAncidgYC4gIEZvciBgYCdyJ2BgLCB0aGUgc3VwcGxpZWQgKnByZWNpc2lvbioKKyAgIG11c3QgYmUgMCBhbmQgaXMgaWdub3JlZC4gIFRoZSBgYCdyJ2BgIGZvcm1hdCBjb2RlIHNwZWNpZmllcyB0aGUKKyAgIHN0YW5kYXJkIDpmdW5jOmByZXByYCBmb3JtYXQuCisKKyAgICpmbGFncyogY2FuIGJlIHplcm8gb3IgbW9yZSBvZiB0aGUgdmFsdWVzICpQeV9EVFNGX1NJR04qLAorICAgKlB5X0RUU0ZfQUREX0RPVF8wKiwgb3IgKlB5X0RUU0ZfQUxUKiwgb3ItZWQgdG9nZXRoZXI6CisKKyAgICogKlB5X0RUU0ZfU0lHTiogbWVhbnMgdG8gYWx3YXlzIHByZWNlZGUgdGhlIHJldHVybmVkIHN0cmluZyB3aXRoIGEgc2lnbgorICAgICBjaGFyYWN0ZXIsIGV2ZW4gaWYgKnZhbCogaXMgbm9uLW5lZ2F0aXZlLgorCisgICAqICpQeV9EVFNGX0FERF9ET1RfMCogbWVhbnMgdG8gZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIHN0cmluZyB3aWxsIG5vdCBsb29rCisgICAgIGxpa2UgYW4gaW50ZWdlci4KKworICAgKiAqUHlfRFRTRl9BTFQqIG1lYW5zIHRvIGFwcGx5ICJhbHRlcm5hdGUiIGZvcm1hdHRpbmcgcnVsZXMuICBTZWUgdGhlCisgICAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6Y2Z1bmM6YFB5T1Nfc25wcmludGZgIGBgJyMnYGAgc3BlY2lmaWVyIGZvcgorICAgICBkZXRhaWxzLgorCisgICBJZiAqcHR5cGUqIGlzIG5vbi1OVUxMLCB0aGVuIHRoZSB2YWx1ZSBpdCBwb2ludHMgdG8gd2lsbCBiZSBzZXQgdG8gb25lIG9mCisgICAqUHlfRFRTVF9GSU5JVEUqLCAqUHlfRFRTVF9JTkZJTklURSosIG9yICpQeV9EVFNUX05BTiosIHNpZ25pZnlpbmcgdGhhdAorICAgKnZhbCogaXMgYSBmaW5pdGUgbnVtYmVyLCBhbiBpbmZpbml0ZSBudW1iZXIsIG9yIG5vdCBhIG51bWJlciwgcmVzcGVjdGl2ZWx5LgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcG9pbnRlciB0byAqYnVmZmVyKiB3aXRoIHRoZSBjb252ZXJ0ZWQgc3RyaW5nIG9yCisgICAqTlVMTCogaWYgdGhlIGNvbnZlcnNpb24gZmFpbGVkLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZQorICAgcmV0dXJuZWQgc3RyaW5nIGJ5IGNhbGxpbmcgOmNmdW5jOmBQeU1lbV9GcmVlYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CiAKIAogLi4gY2Z1bmN0aW9uOjogZG91YmxlIFB5T1NfYXNjaWlfYXRvZihjb25zdCBjaGFyICpucHRyKQogCiAgICBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgOmN0eXBlOmBkb3VibGVgIGluIGEgbG9jYWxlLWluZGVwZW5kZW50IHdheS4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMi40Ci0KICAgIFNlZSB0aGUgVW5peCBtYW4gcGFnZSA6bWFucGFnZTpgYXRvZigyKWAgZm9yIGRldGFpbHMuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNAogCi0uLiBjZnVuY3Rpb246OiBjaGFyICogUHlPU19zdHJpY21wKGNoYXIgKnMxLCBjaGFyICpzMikKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjEKKyAgICAgIFVzZSA6Y2Z1bmM6YFB5T1Nfc3RyaW5nX3RvX2RvdWJsZWAgaW5zdGVhZC4KKworCisuLiBjZnVuY3Rpb246OiBjaGFyKiBQeU9TX3N0cmljbXAoY2hhciAqczEsIGNoYXIgKnMyKQogCiAgICBDYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gb2Ygc3RyaW5ncy4gVGhlIGZ1bmN0aW9uIHdvcmtzIGFsbW9zdAogICAgaWRlbnRpY2FsbHkgdG8gOmNmdW5jOmBzdHJjbXBgIGV4Y2VwdCB0aGF0IGl0IGlnbm9yZXMgdGhlIGNhc2UuCkBAIC05NSw3ICsxNzMsNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CiAKIAotLi4gY2Z1bmN0aW9uOjogY2hhciAqIFB5T1Nfc3RybmljbXAoY2hhciAqczEsIGNoYXIgKnMyLCBQeV9zc2l6ZV90ICBzaXplKQorLi4gY2Z1bmN0aW9uOjogY2hhciogUHlPU19zdHJuaWNtcChjaGFyICpzMSwgY2hhciAqczIsIFB5X3NzaXplX3QgIHNpemUpCiAKICAgIENhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbiBvZiBzdHJpbmdzLiBUaGUgZnVuY3Rpb24gd29ya3MgYWxtb3N0CiAgICBpZGVudGljYWxseSB0byA6Y2Z1bmM6YHN0cm5jbXBgIGV4Y2VwdCB0aGF0IGl0IGlnbm9yZXMgdGhlIGNhc2UuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZGljdC5yc3QgYi9Eb2MvYy1hcGkvZGljdC5yc3QKaW5kZXggZWQwN2Y2Ni4uMDY2ZTdmMSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2RpY3QucnN0CisrKyBiL0RvYy9jLWFwaS9kaWN0LnJzdApAQCAtMTk5LDggKzE5OSw4IEBACiAuLiBjZnVuY3Rpb246OiBpbnQgUHlEaWN0X01lcmdlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG92ZXJyaWRlKQogCiAgICBJdGVyYXRlIG92ZXIgbWFwcGluZyBvYmplY3QgKmIqIGFkZGluZyBrZXktdmFsdWUgcGFpcnMgdG8gZGljdGlvbmFyeSAqYSouCi0gICAqYiogbWF5IGJlIGEgZGljdGlvbmFyeSwgb3IgYW55IG9iamVjdCBzdXBwb3J0aW5nIDpmdW5jOmBQeU1hcHBpbmdfS2V5c2AKLSAgIGFuZCA6ZnVuYzpgUHlPYmplY3RfR2V0SXRlbWAuIElmICpvdmVycmlkZSogaXMgdHJ1ZSwgZXhpc3RpbmcgcGFpcnMgaW4gKmEqCisgICAqYiogbWF5IGJlIGEgZGljdGlvbmFyeSwgb3IgYW55IG9iamVjdCBzdXBwb3J0aW5nIDpjZnVuYzpgUHlNYXBwaW5nX0tleXNgCisgICBhbmQgOmNmdW5jOmBQeU9iamVjdF9HZXRJdGVtYC4gSWYgKm92ZXJyaWRlKiBpcyB0cnVlLCBleGlzdGluZyBwYWlycyBpbiAqYSoKICAgIHdpbGwgYmUgcmVwbGFjZWQgaWYgYSBtYXRjaGluZyBrZXkgaXMgZm91bmQgaW4gKmIqLCBvdGhlcndpc2UgcGFpcnMgd2lsbAogICAgb25seSBiZSBhZGRlZCBpZiB0aGVyZSBpcyBub3QgYSBtYXRjaGluZyBrZXkgaW4gKmEqLiBSZXR1cm4gYGAwYGAgb24KICAgIHN1Y2Nlc3Mgb3IgYGAtMWBgIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0IGIvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CmluZGV4IDE0MWYzNTcuLmU5Y2VkMGIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdAorKysgYi9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKQEAgLTE1MSw2NCArMTUxLDEwIEBACiAKIC4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9Gb3JtYXQoUHlPYmplY3QgKmV4Y2VwdGlvbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAKLSAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZXJyb3IgaW5kaWNhdG9yIGFuZCByZXR1cm5zICpOVUxMKi4gKmV4Y2VwdGlvbiogc2hvdWxkIGJlCi0gICBhIFB5dGhvbiBleGNlcHRpb24gKGNsYXNzLCBub3QgYW4gaW5zdGFuY2UpLiAgKmZvcm1hdCogc2hvdWxkIGJlIGEgc3RyaW5nLAotICAgY29udGFpbmluZyBmb3JtYXQgY29kZXMsIHNpbWlsYXIgdG8gOmNmdW5jOmBwcmludGZgLiBUaGUgYGB3aWR0aC5wcmVjaXNpb25gYAotICAgYmVmb3JlIGEgZm9ybWF0IGNvZGUgaXMgcGFyc2VkLCBidXQgdGhlIHdpZHRoIHBhcnQgaXMgaWdub3JlZC4KLQotICAgLi4gJSBUaGlzIHNob3VsZCBiZSBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSB0YWJsZSBpbiBQeVN0cmluZ19Gcm9tRm9ybWF0LgotICAgLi4gJSBPbmUgc2hvdWxkIGp1c3QgcmVmZXIgdG8gdGhlIG90aGVyLgotICAgLi4gJSBUaGUgZGVzY3JpcHRpb25zIGZvciAlemQgYW5kICV6dSBhcmUgd3JvbmcsIGJ1dCB0aGUgdHJ1dGggaXMgY29tcGxpY2F0ZWQKLSAgIC4uICUgYmVjYXVzZSBub3QgYWxsIGNvbXBpbGVycyBzdXBwb3J0IHRoZSAleiB3aWR0aCBtb2RpZmllciAtLSB3ZSBmYWtlIGl0Ci0gICAuLiAlIHdoZW4gbmVjZXNzYXJ5IHZpYSBpbnRlcnBvbGF0aW5nIFBZX0ZPUk1BVF9TSVpFX1QuCi0gICAuLiAlICV1LCAlbHUsICV6dSBzaG91bGQgaGF2ZSAibmV3IGluIFB5dGhvbiAyLjUiIGJsdXJicy4KLQotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCBGb3JtYXQgQ2hhcmFjdGVycyB8IFR5cGUgICAgICAgICAgfCBDb21tZW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotICAgfCA6YXR0cjpgJSVgICAgICAgICB8ICpuL2EqICAgICAgICAgfCBUaGUgbGl0ZXJhbCAlIGNoYXJhY3Rlci4gICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJWNgICAgICAgICB8IGludCAgICAgICAgICAgfCBBIHNpbmdsZSBjaGFyYWN0ZXIsICAgICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCByZXByZXNlbnRlZCBhcyBhbiBDIGludC4gICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJWRgICAgICAgICB8IGludCAgICAgICAgICAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJWQiKWBgLiAgICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJXVgICAgICAgICB8IHVuc2lnbmVkIGludCAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJXUiKWBgLiAgICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJWxkYCAgICAgICB8IGxvbmcgICAgICAgICAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJWxkIilgYC4gICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJWx1YCAgICAgICB8IHVuc2lnbmVkIGxvbmcgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJWx1IilgYC4gICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJXpkYCAgICAgICB8IFB5X3NzaXplX3QgICAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJXpkIilgYC4gICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJXp1YCAgICAgICB8IHNpemVfdCAgICAgICAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJXp1IilgYC4gICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJWlgICAgICAgICB8IGludCAgICAgICAgICAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJWkiKWBgLiAgICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJXhgICAgICAgICB8IGludCAgICAgICAgICAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJXgiKWBgLiAgICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJXNgICAgICAgICB8IGNoYXJcKiAgICAgICAgfCBBIG51bGwtdGVybWluYXRlZCBDIGNoYXJhY3RlciAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBhcnJheS4gICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6YXR0cjpgJXBgICAgICAgICB8IHZvaWRcKiAgICAgICAgfCBUaGUgaGV4IHJlcHJlc2VudGF0aW9uIG9mIGEgQyAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBwb2ludGVyLiBNb3N0bHkgZXF1aXZhbGVudCB0byAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJXAiKWBgIGV4Y2VwdCB0aGF0ICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBpdCBpcyBndWFyYW50ZWVkIHRvIHN0YXJ0IHdpdGggfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB0aGUgbGl0ZXJhbCBgYDB4YGAgcmVnYXJkbGVzcyAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBvZiB3aGF0IHRoZSBwbGF0Zm9ybSdzICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZmBgIHlpZWxkcy4gICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICBBbiB1bnJlY29nbml6ZWQgZm9ybWF0IGNoYXJhY3RlciBjYXVzZXMgYWxsIHRoZSByZXN0IG9mIHRoZSBmb3JtYXQgc3RyaW5nIHRvIGJlCi0gICBjb3BpZWQgYXMtaXMgdG8gdGhlIHJlc3VsdCBzdHJpbmcsIGFuZCBhbnkgZXh0cmEgYXJndW1lbnRzIGRpc2NhcmRlZC4KKyAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZXJyb3IgaW5kaWNhdG9yIGFuZCByZXR1cm5zICpOVUxMKi4gICpleGNlcHRpb24qCisgICBzaG91bGQgYmUgYSBQeXRob24gZXhjZXB0aW9uIGNsYXNzLiAgVGhlICpmb3JtYXQqIGFuZCBzdWJzZXF1ZW50CisgICBwYXJhbWV0ZXJzIGhlbHAgZm9ybWF0IHRoZSBlcnJvciBtZXNzYWdlOyB0aGV5IGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhbmQKKyAgIHZhbHVlcyBhcyBpbiA6Y2Z1bmM6YFB5U3RyaW5nX0Zyb21Gb3JtYXRgLgogCiAKIC4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU2V0Tm9uZShQeU9iamVjdCAqdHlwZSkKQEAgLTQxNyw2ICszNjMsMTUgQEAKICAgIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBkaWN0aW9uYXJ5IG9mIGNsYXNzIHZhcmlhYmxlcyBhbmQgbWV0aG9kcy4KIAogCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYyhjaGFyICpuYW1lLCBjaGFyICpkb2MsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCkKKworICAgU2FtZSBhcyA6Y2Z1bmM6YFB5RXJyX05ld0V4Y2VwdGlvbmAsIGV4Y2VwdCB0aGF0IHRoZSBuZXcgZXhjZXB0aW9uIGNsYXNzIGNhbgorICAgZWFzaWx5IGJlIGdpdmVuIGEgZG9jc3RyaW5nOiBJZiAqZG9jKiBpcyBub24tKk5VTEwqLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlCisgICBkb2NzdHJpbmcgZm9yIHRoZSBleGNlcHRpb24gY2xhc3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIC4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKFB5T2JqZWN0ICpvYmopCiAKICAgIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBwcmludHMgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gYGBzeXMuc3RkZXJyYGAgd2hlbiBhbgpAQCAtNDI5LDYgKzM4NCw4MyBAQAogICAgdGhlIHdhcm5pbmcgbWVzc2FnZS4KIAogCisuLiBfdW5pY29kZWV4Y2VwdGlvbnM6CisKK1VuaWNvZGUgRXhjZXB0aW9uIE9iamVjdHMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gY3JlYXRlIGFuZCBtb2RpZnkgVW5pY29kZSBleGNlcHRpb25zIGZyb20gQy4KKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZShjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqb2JqZWN0LCBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQsIGNvbnN0IGNoYXIgKnJlYXNvbikKKworICAgQ3JlYXRlIGEgOmNsYXNzOmBVbmljb2RlRGVjb2RlRXJyb3JgIG9iamVjdCB3aXRoIHRoZSBhdHRyaWJ1dGVzICplbmNvZGluZyosCisgICAqb2JqZWN0KiwgKmxlbmd0aCosICpzdGFydCosICplbmQqIGFuZCAqcmVhc29uKi4KKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZShjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgUHlfVU5JQ09ERSAqb2JqZWN0LCBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQsIGNvbnN0IGNoYXIgKnJlYXNvbikKKworICAgQ3JlYXRlIGEgOmNsYXNzOmBVbmljb2RlRW5jb2RlRXJyb3JgIG9iamVjdCB3aXRoIHRoZSBhdHRyaWJ1dGVzICplbmNvZGluZyosCisgICAqb2JqZWN0KiwgKmxlbmd0aCosICpzdGFydCosICplbmQqIGFuZCAqcmVhc29uKi4KKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0NyZWF0ZShjb25zdCBQeV9VTklDT0RFICpvYmplY3QsIFB5X3NzaXplX3QgbGVuZ3RoLCBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCwgY29uc3QgY2hhciAqcmVhc29uKQorCisgICBDcmVhdGUgYSA6Y2xhc3M6YFVuaWNvZGVUcmFuc2xhdGVFcnJvcmAgb2JqZWN0IHdpdGggdGhlIGF0dHJpYnV0ZXMgKm9iamVjdCosCisgICAqbGVuZ3RoKiwgKnN0YXJ0KiwgKmVuZCogYW5kICpyZWFzb24qLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcoUHlPYmplY3QgKmV4YykKKyAgICAgICAgICAgICAgIFB5T2JqZWN0KiBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZyhQeU9iamVjdCAqZXhjKQorCisgICBSZXR1cm4gdGhlICplbmNvZGluZyogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0LgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0KFB5T2JqZWN0ICpleGMpCisgICAgICAgICAgICAgICBQeU9iamVjdCogUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0KFB5T2JqZWN0ICpleGMpCisgICAgICAgICAgICAgICBQeU9iamVjdCogUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0KFB5T2JqZWN0ICpleGMpCisKKyAgIFJldHVybiB0aGUgKm9iamVjdCogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0LgorCisuLiBjZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCAqc3RhcnQpCisgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCAqc3RhcnQpCisgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCAqc3RhcnQpCisKKyAgIEdldCB0aGUgKnN0YXJ0KiBhdHRyaWJ1dGUgb2YgdGhlIGdpdmVuIGV4Y2VwdGlvbiBvYmplY3QgYW5kIHBsYWNlIGl0IGludG8KKyAgICpcKnN0YXJ0Ki4gICpzdGFydCogbXVzdCBub3QgYmUgKk5VTEwqLiAgUmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3MsIGBgLTFgYCBvbgorICAgZmFpbHVyZS4KKworLi4gY2Z1bmN0aW9uOjogaW50IFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0KFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3Qgc3RhcnQpCisgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0U3RhcnQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCBzdGFydCkKKyAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90IHN0YXJ0KQorCisgICBTZXQgdGhlICpzdGFydCogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0IHRvICpzdGFydCouICBSZXR1cm4KKyAgIGBgMGBgIG9uIHN1Y2Nlc3MsIGBgLTFgYCBvbiBmYWlsdXJlLgorCisuLiBjZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kKFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgKmVuZCkKKyAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCAqZW5kKQorICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90ICplbmQpCisKKyAgIEdldCB0aGUgKmVuZCogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0IGFuZCBwbGFjZSBpdCBpbnRvCisgICAqXCplbmQqLiAgKmVuZCogbXVzdCBub3QgYmUgKk5VTEwqLiAgUmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3MsIGBgLTFgYCBvbgorICAgZmFpbHVyZS4KKworLi4gY2Z1bmN0aW9uOjogaW50IFB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90IGVuZCkKKyAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCBlbmQpCisgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kKFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgZW5kKQorCisgICBTZXQgdGhlICplbmQqIGF0dHJpYnV0ZSBvZiB0aGUgZ2l2ZW4gZXhjZXB0aW9uIG9iamVjdCB0byAqZW5kKi4gIFJldHVybiBgYDBgYAorICAgb24gc3VjY2VzcywgYGAtMWBgIG9uIGZhaWx1cmUuCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24oUHlPYmplY3QgKmV4YykKKyAgICAgICAgICAgICAgIFB5T2JqZWN0KiBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24oUHlPYmplY3QgKmV4YykKKyAgICAgICAgICAgICAgIFB5T2JqZWN0KiBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24oUHlPYmplY3QgKmV4YykKKworICAgUmV0dXJuIHRoZSAqcmVhc29uKiBhdHRyaWJ1dGUgb2YgdGhlIGdpdmVuIGV4Y2VwdGlvbiBvYmplY3QuCisKKy4uIGNmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24oUHlPYmplY3QgKmV4YywgY29uc3QgY2hhciAqcmVhc29uKQorICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbihQeU9iamVjdCAqZXhjLCBjb25zdCBjaGFyICpyZWFzb24pCisgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKnJlYXNvbikKKworICAgU2V0IHRoZSAqcmVhc29uKiBhdHRyaWJ1dGUgb2YgdGhlIGdpdmVuIGV4Y2VwdGlvbiBvYmplY3QgdG8gKnJlYXNvbiouICBSZXR1cm4KKyAgIGBgMGBgIG9uIHN1Y2Nlc3MsIGBgLTFgYCBvbiBmYWlsdXJlLgorCisKIFJlY3Vyc2lvbiBDb250cm9sCiA9PT09PT09PT09PT09PT09PQogCkBAIC01NzgsMTQgKzYxMCwxMCBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKIAotRGVwcmVjYXRpb24gb2YgU3RyaW5nIEV4Y2VwdGlvbnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTdHJpbmcgRXhjZXB0aW9ucworPT09PT09PT09PT09PT09PT0KIAotLi4gaW5kZXg6OiBzaW5nbGU6IEJhc2VFeGNlcHRpb24gKGJ1aWx0LWluIGV4Y2VwdGlvbikKLQotQWxsIGV4Y2VwdGlvbnMgYnVpbHQgaW50byBQeXRob24gb3IgcHJvdmlkZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgYXJlIGRlcml2ZWQKLWZyb20gOmV4YzpgQmFzZUV4Y2VwdGlvbmAuCi0KLVN0cmluZyBleGNlcHRpb25zIGFyZSBzdGlsbCBzdXBwb3J0ZWQgaW4gdGhlIGludGVycHJldGVyIHRvIGFsbG93IGV4aXN0aW5nIGNvZGUKLXRvIHJ1biB1bm1vZGlmaWVkLCBidXQgdGhpcyB3aWxsIGFsc28gY2hhbmdlIGluIGEgZnV0dXJlIHJlbGVhc2UuCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgorICAgQWxsIGV4Y2VwdGlvbnMgdG8gYmUgcmFpc2VkIG9yIGNhdWdodCBtdXN0IGJlIGRlcml2ZWQgZnJvbSA6ZXhjOmBCYXNlRXhjZXB0aW9uYC4KKyAgIFRyeWluZyB0byByYWlzZSBhIHN0cmluZyBleGNlcHRpb24gbm93IHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgLgogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZmlsZS5yc3QgYi9Eb2MvYy1hcGkvZmlsZS5yc3QKaW5kZXggNWQ3NDM1NS4uYmRiOGM0OSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ZpbGUucnN0CisrKyBiL0RvYy9jLWFwaS9maWxlLnJzdApAQCAtNjMsNyArNjMsNyBAQAogICAgUmV0dXJuIHRoZSBmaWxlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggKnAqIGFzIGEgOmN0eXBlOmBGSUxFXCpgLgogCiAgICBJZiB0aGUgY2FsbGVyIHdpbGwgZXZlciB1c2UgdGhlIHJldHVybmVkIDpjdHlwZTpgRklMRVwqYCBvYmplY3Qgd2hpbGUKLSAgIHRoZSBHSUwgaXMgcmVsZWFzZWQgaXQgbXVzdCBhbHNvIGNhbGwgdGhlIDpjZnVuYzpgUHlGaWxlX0luY1VzZUNvdW50YCBhbmQKKyAgIHRoZSA6dGVybTpgR0lMYCBpcyByZWxlYXNlZCBpdCBtdXN0IGFsc28gY2FsbCB0aGUgOmNmdW5jOmBQeUZpbGVfSW5jVXNlQ291bnRgIGFuZAogICAgOmNmdW5jOmBQeUZpbGVfRGVjVXNlQ291bnRgIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3cgYXMgYXBwcm9wcmlhdGUuCiAKIApAQCAtNzYsMTAgKzc2LDE5IEBACiAgICBmaW5pc2hlZCB3aXRoIHRoZSA6Y3R5cGU6YEZJTEVcKmAuICBPdGhlcndpc2UgdGhlIGZpbGUgb2JqZWN0IHdpbGwKICAgIG5ldmVyIGJlIGNsb3NlZCBieSBQeXRob24uCiAKLSAgIFRoZSBHSUwgbXVzdCBiZSBoZWxkIHdoaWxlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgIFRoZSA6dGVybTpgR0lMYCBtdXN0IGJlIGhlbGQgd2hpbGUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogCi0gICBUaGUgc3VnZ2VzdGVkIHVzZSBpcyB0byBjYWxsIHRoaXMgYWZ0ZXIgOmNmdW5jOmBQeUZpbGVfQXNGaWxlYCBqdXN0IGJlZm9yZQotICAgeW91IHJlbGVhc2UgdGhlIEdJTC4KKyAgIFRoZSBzdWdnZXN0ZWQgdXNlIGlzIHRvIGNhbGwgdGhpcyBhZnRlciA6Y2Z1bmM6YFB5RmlsZV9Bc0ZpbGVgIGFuZCBiZWZvcmUKKyAgIHlvdSByZWxlYXNlIHRoZSBHSUw6OgorCisgICAgICBGSUxFICpmcCA9IFB5RmlsZV9Bc0ZpbGUocCk7CisgICAgICBQeUZpbGVfSW5jVXNlQ291bnQocCk7CisgICAgICAvKiAuLi4gKi8KKyAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgIGRvX3NvbWV0aGluZyhmcCk7CisgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgLyogLi4uICovCisgICAgICBQeUZpbGVfRGVjVXNlQ291bnQocCk7CiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCkBAIC05MCw3ICs5OSw4IEBACiAgICBpbmRpY2F0ZSB0aGF0IHRoZSBjYWxsZXIgaXMgZG9uZSB3aXRoIGl0cyBvd24gdXNlIG9mIHRoZSA6Y3R5cGU6YEZJTEVcKmAuCiAgICBUaGlzIG1heSBvbmx5IGJlIGNhbGxlZCB0byB1bmRvIGEgcHJpb3IgY2FsbCB0byA6Y2Z1bmM6YFB5RmlsZV9JbmNVc2VDb3VudGAuCiAKLSAgIFRoZSBHSUwgbXVzdCBiZSBoZWxkIHdoaWxlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgIFRoZSA6dGVybTpgR0lMYCBtdXN0IGJlIGhlbGQgd2hpbGUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIChzZWUgdGhlIGV4YW1wbGUKKyAgIGFib3ZlKS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9mbG9hdC5yc3QgYi9Eb2MvYy1hcGkvZmxvYXQucnN0CmluZGV4IGM0MDk5YTMuLjI5NWZiOTAgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9mbG9hdC5yc3QKKysrIGIvRG9jL2MtYXBpL2Zsb2F0LnJzdApAQCAtOTIsMyArOTIsMjcgQEAKICAgIGJlIGZyZWVkLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKworCisuLiBjZnVuY3Rpb246OiB2b2lkIFB5RmxvYXRfQXNTdHJpbmcoY2hhciAqYnVmLCBQeUZsb2F0T2JqZWN0ICp2KQorCisgICBDb252ZXJ0IHRoZSBhcmd1bWVudCAqdiogdG8gYSBzdHJpbmcsIHVzaW5nIHRoZSBzYW1lIHJ1bGVzIGFzCisgICA6ZnVuYzpgc3RyYC4gVGhlIGxlbmd0aCBvZiAqYnVmKiBzaG91bGQgYmUgYXQgbGVhc3QgMTAwLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIHVuc2FmZSB0byBjYWxsIGJlY2F1c2UgaXQgd3JpdGVzIHRvIGEgYnVmZmVyIHdob3NlCisgICBsZW5ndGggaXQgZG9lcyBub3Qga25vdy4KKworICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgVXNlIDpmdW5jOmBQeU9iamVjdF9TdHJgIG9yIDpmdW5jOmBQeU9TX2RvdWJsZV90b19zdHJpbmdgIGluc3RlYWQuCisKKworLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUZsb2F0X0FzUmVwclN0cmluZyhjaGFyICpidWYsIFB5RmxvYXRPYmplY3QgKnYpCisKKyAgIFNhbWUgYXMgUHlGbG9hdF9Bc1N0cmluZywgZXhjZXB0IHVzZXMgdGhlIHNhbWUgcnVsZXMgYXMKKyAgIDpmdW5jOmByZXByYC4gIFRoZSBsZW5ndGggb2YgKmJ1Ziogc2hvdWxkIGJlIGF0IGxlYXN0IDEwMC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyB1bnNhZmUgdG8gY2FsbCBiZWNhdXNlIGl0IHdyaXRlcyB0byBhIGJ1ZmZlciB3aG9zZQorICAgbGVuZ3RoIGl0IGRvZXMgbm90IGtub3cuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgIFVzZSA6ZnVuYzpgUHlPYmplY3RfUmVwcmAgb3IgOmZ1bmM6YFB5T1NfZG91YmxlX3RvX3N0cmluZ2AgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9pbXBvcnQucnN0IGIvRG9jL2MtYXBpL2ltcG9ydC5yc3QKaW5kZXggNTU4ODk2Yy4uM2RhMTQxNSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ltcG9ydC5yc3QKKysrIGIvRG9jL2MtYXBpL2ltcG9ydC5yc3QKQEAgLTI0MSw3ICsyNDEsNyBAQAogICAgdHJpY2tzIHdpdGggdGhpcyB0byBwcm92aWRlIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBjb2xsZWN0aW9uIG9mIGZyb3plbiBtb2R1bGVzLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUltcG9ydF9BcHBlbmRJbml0dGFiKGNoYXIgKm5hbWUsIHZvaWQgKCppbml0ZnVuYykodm9pZCkpCisuLiBjZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfQXBwZW5kSW5pdHRhYihjb25zdCBjaGFyICpuYW1lLCB2b2lkICgqaW5pdGZ1bmMpKHZvaWQpKQogCiAgICBBZGQgYSBzaW5nbGUgbW9kdWxlIHRvIHRoZSBleGlzdGluZyB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLiAgVGhpcyBpcyBhCiAgICBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCA6Y2Z1bmM6YFB5SW1wb3J0X0V4dGVuZEluaXR0YWJgLCByZXR1cm5pbmcgYGAtMWBgIGlmCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW5pdC5yc3QgYi9Eb2MvYy1hcGkvaW5pdC5yc3QKaW5kZXggNWQ0ZGEyMi4uZmQ2YTlhMiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2luaXQucnN0CisrKyBiL0RvYy9jLWFwaS9pbml0LnJzdApAQCAtOCw2ICs4LDEwIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAKK0luaXRpYWxpemluZyBhbmQgZmluYWxpemluZyB0aGUgaW50ZXJwcmV0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCiAuLiBjZnVuY3Rpb246OiB2b2lkIFB5X0luaXRpYWxpemUoKQogCiAgICAuLiBpbmRleDo6CkBAIC04Myw4NSArODcsOCBAQAogICAgOmNmdW5jOmBQeV9GaW5hbGl6ZWAgbW9yZSB0aGFuIG9uY2UuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlfTmV3SW50ZXJwcmV0ZXIoKQotCi0gICAuLiBpbmRleDo6Ci0gICAgICBtb2R1bGU6IF9fYnVpbHRpbl9fCi0gICAgICBtb2R1bGU6IF9fbWFpbl9fCi0gICAgICBtb2R1bGU6IHN5cwotICAgICAgc2luZ2xlOiBzdGRvdXQgKGluIG1vZHVsZSBzeXMpCi0gICAgICBzaW5nbGU6IHN0ZGVyciAoaW4gbW9kdWxlIHN5cykKLSAgICAgIHNpbmdsZTogc3RkaW4gKGluIG1vZHVsZSBzeXMpCi0KLSAgIENyZWF0ZSBhIG5ldyBzdWItaW50ZXJwcmV0ZXIuICBUaGlzIGlzIGFuIChhbG1vc3QpIHRvdGFsbHkgc2VwYXJhdGUgZW52aXJvbm1lbnQKLSAgIGZvciB0aGUgZXhlY3V0aW9uIG9mIFB5dGhvbiBjb2RlLiAgSW4gcGFydGljdWxhciwgdGhlIG5ldyBpbnRlcnByZXRlciBoYXMKLSAgIHNlcGFyYXRlLCBpbmRlcGVuZGVudCB2ZXJzaW9ucyBvZiBhbGwgaW1wb3J0ZWQgbW9kdWxlcywgaW5jbHVkaW5nIHRoZQotICAgZnVuZGFtZW50YWwgbW9kdWxlcyA6bW9kOmBfX2J1aWx0aW5fX2AsIDptb2Q6YF9fbWFpbl9fYCBhbmQgOm1vZDpgc3lzYC4gIFRoZQotICAgdGFibGUgb2YgbG9hZGVkIG1vZHVsZXMgKGBgc3lzLm1vZHVsZXNgYCkgYW5kIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGgKLSAgIChgYHN5cy5wYXRoYGApIGFyZSBhbHNvIHNlcGFyYXRlLiAgVGhlIG5ldyBlbnZpcm9ubWVudCBoYXMgbm8gYGBzeXMuYXJndmBgCi0gICB2YXJpYWJsZS4gIEl0IGhhcyBuZXcgc3RhbmRhcmQgSS9PIHN0cmVhbSBmaWxlIG9iamVjdHMgYGBzeXMuc3RkaW5gYCwKLSAgIGBgc3lzLnN0ZG91dGBgIGFuZCBgYHN5cy5zdGRlcnJgYCAoaG93ZXZlciB0aGVzZSByZWZlciB0byB0aGUgc2FtZSB1bmRlcmx5aW5nCi0gICA6Y3R5cGU6YEZJTEVgIHN0cnVjdHVyZXMgaW4gdGhlIEMgbGlicmFyeSkuCi0KLSAgIFRoZSByZXR1cm4gdmFsdWUgcG9pbnRzIHRvIHRoZSBmaXJzdCB0aHJlYWQgc3RhdGUgY3JlYXRlZCBpbiB0aGUgbmV3Ci0gICBzdWItaW50ZXJwcmV0ZXIuICBUaGlzIHRocmVhZCBzdGF0ZSBpcyBtYWRlIGluIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZS4KLSAgIE5vdGUgdGhhdCBubyBhY3R1YWwgdGhyZWFkIGlzIGNyZWF0ZWQ7IHNlZSB0aGUgZGlzY3Vzc2lvbiBvZiB0aHJlYWQgc3RhdGVzCi0gICBiZWxvdy4gIElmIGNyZWF0aW9uIG9mIHRoZSBuZXcgaW50ZXJwcmV0ZXIgaXMgdW5zdWNjZXNzZnVsLCAqTlVMTCogaXMKLSAgIHJldHVybmVkOyBubyBleGNlcHRpb24gaXMgc2V0IHNpbmNlIHRoZSBleGNlcHRpb24gc3RhdGUgaXMgc3RvcmVkIGluIHRoZQotICAgY3VycmVudCB0aHJlYWQgc3RhdGUgYW5kIHRoZXJlIG1heSBub3QgYmUgYSBjdXJyZW50IHRocmVhZCBzdGF0ZS4gIChMaWtlIGFsbAotICAgb3RoZXIgUHl0aG9uL0MgQVBJIGZ1bmN0aW9ucywgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUKLSAgIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgaXMgc3RpbGwgaGVsZCB3aGVuIGl0IHJldHVybnM7IGhvd2V2ZXIsIHVubGlrZSBtb3N0Ci0gICBvdGhlciBQeXRob24vQyBBUEkgZnVuY3Rpb25zLCB0aGVyZSBuZWVkbid0IGJlIGEgY3VycmVudCB0aHJlYWQgc3RhdGUgb24KLSAgIGVudHJ5LikKLQotICAgLi4gaW5kZXg6OgotICAgICAgc2luZ2xlOiBQeV9GaW5hbGl6ZSgpCi0gICAgICBzaW5nbGU6IFB5X0luaXRpYWxpemUoKQotCi0gICBFeHRlbnNpb24gbW9kdWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gKHN1Yi0paW50ZXJwcmV0ZXJzIGFzIGZvbGxvd3M6IHRoZSBmaXJzdAotICAgdGltZSBhIHBhcnRpY3VsYXIgZXh0ZW5zaW9uIGlzIGltcG9ydGVkLCBpdCBpcyBpbml0aWFsaXplZCBub3JtYWxseSwgYW5kIGEKLSAgIChzaGFsbG93KSBjb3B5IG9mIGl0cyBtb2R1bGUncyBkaWN0aW9uYXJ5IGlzIHNxdWlycmVsZWQgYXdheS4gIFdoZW4gdGhlIHNhbWUKLSAgIGV4dGVuc2lvbiBpcyBpbXBvcnRlZCBieSBhbm90aGVyIChzdWItKWludGVycHJldGVyLCBhIG5ldyBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQKLSAgIGFuZCBmaWxsZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhpcyBjb3B5OyB0aGUgZXh0ZW5zaW9uJ3MgYGBpbml0YGAgZnVuY3Rpb24gaXMKLSAgIG5vdCBjYWxsZWQuICBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0IGhhcHBlbnMgd2hlbiBhbiBleHRlbnNpb24gaXMKLSAgIGltcG9ydGVkIGFmdGVyIHRoZSBpbnRlcnByZXRlciBoYXMgYmVlbiBjb21wbGV0ZWx5IHJlLWluaXRpYWxpemVkIGJ5IGNhbGxpbmcKLSAgIDpjZnVuYzpgUHlfRmluYWxpemVgIGFuZCA6Y2Z1bmM6YFB5X0luaXRpYWxpemVgOyBpbiB0aGF0IGNhc2UsIHRoZSBleHRlbnNpb24ncwotICAgYGBpbml0bW9kdWxlYGAgZnVuY3Rpb24gKmlzKiBjYWxsZWQgYWdhaW4uCi0KLSAgIC4uIGluZGV4Ojogc2luZ2xlOiBjbG9zZSgpIChpbiBtb2R1bGUgb3MpCi0KLSAgICoqQnVncyBhbmQgY2F2ZWF0czoqKiBCZWNhdXNlIHN1Yi1pbnRlcnByZXRlcnMgKGFuZCB0aGUgbWFpbiBpbnRlcnByZXRlcikgYXJlCi0gICBwYXJ0IG9mIHRoZSBzYW1lIHByb2Nlc3MsIHRoZSBpbnN1bGF0aW9uIGJldHdlZW4gdGhlbSBpc24ndCBwZXJmZWN0IC0tLSBmb3IKLSAgIGV4YW1wbGUsIHVzaW5nIGxvdy1sZXZlbCBmaWxlIG9wZXJhdGlvbnMgbGlrZSAgOmZ1bmM6YG9zLmNsb3NlYCB0aGV5IGNhbgotICAgKGFjY2lkZW50YWxseSBvciBtYWxpY2lvdXNseSkgYWZmZWN0IGVhY2ggb3RoZXIncyBvcGVuIGZpbGVzLiAgQmVjYXVzZSBvZiB0aGUKLSAgIHdheSBleHRlbnNpb25zIGFyZSBzaGFyZWQgYmV0d2VlbiAoc3ViLSlpbnRlcnByZXRlcnMsIHNvbWUgZXh0ZW5zaW9ucyBtYXkgbm90Ci0gICB3b3JrIHByb3Blcmx5OyB0aGlzIGlzIGVzcGVjaWFsbHkgbGlrZWx5IHdoZW4gdGhlIGV4dGVuc2lvbiBtYWtlcyB1c2Ugb2YKLSAgIChzdGF0aWMpIGdsb2JhbCB2YXJpYWJsZXMsIG9yIHdoZW4gdGhlIGV4dGVuc2lvbiBtYW5pcHVsYXRlcyBpdHMgbW9kdWxlJ3MKLSAgIGRpY3Rpb25hcnkgYWZ0ZXIgaXRzIGluaXRpYWxpemF0aW9uLiAgSXQgaXMgcG9zc2libGUgdG8gaW5zZXJ0IG9iamVjdHMgY3JlYXRlZAotICAgaW4gb25lIHN1Yi1pbnRlcnByZXRlciBpbnRvIGEgbmFtZXNwYWNlIG9mIGFub3RoZXIgc3ViLWludGVycHJldGVyOyB0aGlzIHNob3VsZAotICAgYmUgZG9uZSB3aXRoIGdyZWF0IGNhcmUgdG8gYXZvaWQgc2hhcmluZyB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLCBtZXRob2RzLAotICAgaW5zdGFuY2VzIG9yIGNsYXNzZXMgYmV0d2VlbiBzdWItaW50ZXJwcmV0ZXJzLCBzaW5jZSBpbXBvcnQgb3BlcmF0aW9ucyBleGVjdXRlZAotICAgYnkgc3VjaCBvYmplY3RzIG1heSBhZmZlY3QgdGhlIHdyb25nIChzdWItKWludGVycHJldGVyJ3MgZGljdGlvbmFyeSBvZiBsb2FkZWQKLSAgIG1vZHVsZXMuICAoWFhYIFRoaXMgaXMgYSBoYXJkLXRvLWZpeCBidWcgdGhhdCB3aWxsIGJlIGFkZHJlc3NlZCBpbiBhIGZ1dHVyZQotICAgcmVsZWFzZS4pCi0KLSAgIEFsc28gbm90ZSB0aGF0IHRoZSB1c2Ugb2YgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGV4dGVuc2lvbgotICAgbW9kdWxlcyBzdWNoIGFzIFB5T2JqQyBhbmQgY3R5cGVzIHRoYXQgdXNlIHRoZSA6Y2Z1bmM6YFB5R0lMU3RhdGVfXCpgIEFQSXMgKGFuZAotICAgdGhpcyBpcyBpbmhlcmVudCBpbiB0aGUgd2F5IHRoZSA6Y2Z1bmM6YFB5R0lMU3RhdGVfXCpgIGZ1bmN0aW9ucyB3b3JrKS4gIFNpbXBsZQotICAgdGhpbmdzIG1heSB3b3JrLCBidXQgY29uZnVzaW5nIGJlaGF2aW9yIHdpbGwgYWx3YXlzIGJlIG5lYXIuCi0KLQotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeV9FbmRJbnRlcnByZXRlcihQeVRocmVhZFN0YXRlICp0c3RhdGUpCi0KLSAgIC4uIGluZGV4Ojogc2luZ2xlOiBQeV9GaW5hbGl6ZSgpCi0KLSAgIERlc3Ryb3kgdGhlIChzdWItKWludGVycHJldGVyIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUuIFRoZSBnaXZlbgotICAgdGhyZWFkIHN0YXRlIG11c3QgYmUgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlLiAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHRocmVhZAotICAgc3RhdGVzIGJlbG93LiAgV2hlbiB0aGUgY2FsbCByZXR1cm5zLCB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgaXMgKk5VTEwqLiAgQWxsCi0gICB0aHJlYWQgc3RhdGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVycHJldGVyIGFyZSBkZXN0cm95ZWQuICAoVGhlIGdsb2JhbAotICAgaW50ZXJwcmV0ZXIgbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgaXMgc3RpbGwgaGVsZAotICAgd2hlbiBpdCByZXR1cm5zLikgIDpjZnVuYzpgUHlfRmluYWxpemVgIHdpbGwgZGVzdHJveSBhbGwgc3ViLWludGVycHJldGVycyB0aGF0Ci0gICBoYXZlbid0IGJlZW4gZXhwbGljaXRseSBkZXN0cm95ZWQgYXQgdGhhdCBwb2ludC4KK1Byb2Nlc3Mtd2lkZSBwYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PQogCiAKIC4uIGNmdW5jdGlvbjo6IHZvaWQgUHlfU2V0UHJvZ3JhbU5hbWUoY2hhciAqbmFtZSkKQEAgLTM4NiwxNCArMzEzLDE1IEBACiAKIC4uIGNmdW5jdGlvbjo6IHZvaWQgUHlTeXNfU2V0QXJndihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKLSAgIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZgIHdpdGggKnVwZGF0ZXBhdGgqIHNldCB0byAxLgorICAgVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIDpjZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoICp1cGRhdGVwYXRoKiBzZXQgdG8gMS4KIAogCiAuLiBjZnVuY3Rpb246OiB2b2lkIFB5X1NldFB5dGhvbkhvbWUoY2hhciAqaG9tZSkKIAogICAgU2V0IHRoZSBkZWZhdWx0ICJob21lIiBkaXJlY3RvcnksIHRoYXQgaXMsIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhbmRhcmQKLSAgIFB5dGhvbiBsaWJyYXJpZXMuICBUaGUgbGlicmFyaWVzIGFyZSBzZWFyY2hlZCBpbgotICAgOmZpbGU6YHtob21lfS9saWIvcHl0aG9ue3ZlcnNpb259YCBhbmQgOmZpbGU6YHtob21lfS9saWIvcHl0aG9ue3ZlcnNpb259YC4KKyAgIFB5dGhvbiBsaWJyYXJpZXMuICBTZWUgOmVudnZhcjpgUFlUSE9OSE9NRWAgZm9yIHRoZSBtZWFuaW5nIG9mIHRoZQorICAgYXJndW1lbnQgc3RyaW5nLgorCiAgICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGEgemVyby10ZXJtaW5hdGVkIGNoYXJhY3RlciBzdHJpbmcgaW4gc3RhdGljCiAgICBzdG9yYWdlIHdob3NlIGNvbnRlbnRzIHdpbGwgbm90IGNoYW5nZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwcm9ncmFtJ3MKICAgIGV4ZWN1dGlvbi4gIE5vIGNvZGUgaW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3aWxsIGNoYW5nZSB0aGUgY29udGVudHMgb2YKQEAgLTQxMywxMyArMzQxLDE0IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAuLiBpbmRleDo6CisgICBzaW5nbGU6IEdJTAogICAgc2luZ2xlOiBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jawogICAgc2luZ2xlOiBpbnRlcnByZXRlciBsb2NrCiAgICBzaW5nbGU6IGxvY2ssIGludGVycHJldGVyCiAKLVRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgbm90IGZ1bGx5IHRocmVhZCBzYWZlLiAgSW4gb3JkZXIgdG8gc3VwcG9ydAotbXVsdGktdGhyZWFkZWQgUHl0aG9uIHByb2dyYW1zLCB0aGVyZSdzIGEgZ2xvYmFsIGxvY2ssIGNhbGxlZCB0aGUgOmRmbjpgZ2xvYmFsCi1pbnRlcnByZXRlciBsb2NrYCBvciA6ZGZuOmBHSUxgLCB0aGF0IG11c3QgYmUgaGVsZCBieSB0aGUgY3VycmVudCB0aHJlYWQgYmVmb3JlCitUaGUgUHl0aG9uIGludGVycHJldGVyIGlzIG5vdCBmdWxseSB0aHJlYWQtc2FmZS4gIEluIG9yZGVyIHRvIHN1cHBvcnQKK211bHRpLXRocmVhZGVkIFB5dGhvbiBwcm9ncmFtcywgdGhlcmUncyBhIGdsb2JhbCBsb2NrLCBjYWxsZWQgdGhlIDp0ZXJtOmBnbG9iYWwKK2ludGVycHJldGVyIGxvY2tgIG9yIDp0ZXJtOmBHSUxgLCB0aGF0IG11c3QgYmUgaGVsZCBieSB0aGUgY3VycmVudCB0aHJlYWQgYmVmb3JlCiBpdCBjYW4gc2FmZWx5IGFjY2VzcyBQeXRob24gb2JqZWN0cy4gV2l0aG91dCB0aGUgbG9jaywgZXZlbiB0aGUgc2ltcGxlc3QKIG9wZXJhdGlvbnMgY291bGQgY2F1c2UgcHJvYmxlbXMgaW4gYSBtdWx0aS10aHJlYWRlZCBwcm9ncmFtOiBmb3IgZXhhbXBsZSwgd2hlbgogdHdvIHRocmVhZHMgc2ltdWx0YW5lb3VzbHkgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHNhbWUgb2JqZWN0LCB0aGUKQEAgLTQyNywzOSArMzU2LDM4IEBACiAKIC4uIGluZGV4Ojogc2luZ2xlOiBzZXRjaGVja2ludGVydmFsKCkgKGluIG1vZHVsZSBzeXMpCiAKLVRoZXJlZm9yZSwgdGhlIHJ1bGUgZXhpc3RzIHRoYXQgb25seSB0aGUgdGhyZWFkIHRoYXQgaGFzIGFjcXVpcmVkIHRoZSBnbG9iYWwKLWludGVycHJldGVyIGxvY2sgbWF5IG9wZXJhdGUgb24gUHl0aG9uIG9iamVjdHMgb3IgY2FsbCBQeXRob24vQyBBUEkgZnVuY3Rpb25zLgotSW4gb3JkZXIgdG8gc3VwcG9ydCBtdWx0aS10aHJlYWRlZCBQeXRob24gcHJvZ3JhbXMsIHRoZSBpbnRlcnByZXRlciByZWd1bGFybHkKLXJlbGVhc2VzIGFuZCByZWFjcXVpcmVzIHRoZSBsb2NrIC0tLSBieSBkZWZhdWx0LCBldmVyeSAxMDAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zCi0odGhpcyBjYW4gYmUgY2hhbmdlZCB3aXRoICA6ZnVuYzpgc3lzLnNldGNoZWNraW50ZXJ2YWxgKS4gIFRoZSBsb2NrIGlzIGFsc28KLXJlbGVhc2VkIGFuZCByZWFjcXVpcmVkIGFyb3VuZCBwb3RlbnRpYWxseSBibG9ja2luZyBJL08gb3BlcmF0aW9ucyBsaWtlIHJlYWRpbmcKLW9yIHdyaXRpbmcgYSBmaWxlLCBzbyB0aGF0IG90aGVyIHRocmVhZHMgY2FuIHJ1biB3aGlsZSB0aGUgdGhyZWFkIHRoYXQgcmVxdWVzdHMKLXRoZSBJL08gaXMgd2FpdGluZyBmb3IgdGhlIEkvTyBvcGVyYXRpb24gdG8gY29tcGxldGUuCitUaGVyZWZvcmUsIHRoZSBydWxlIGV4aXN0cyB0aGF0IG9ubHkgdGhlIHRocmVhZCB0aGF0IGhhcyBhY3F1aXJlZCB0aGUKKzp0ZXJtOmBHSUxgIG1heSBvcGVyYXRlIG9uIFB5dGhvbiBvYmplY3RzIG9yIGNhbGwgUHl0aG9uL0MgQVBJIGZ1bmN0aW9ucy4KK0luIG9yZGVyIHRvIGVtdWxhdGUgY29uY3VycmVuY3kgb2YgZXhlY3V0aW9uLCB0aGUgaW50ZXJwcmV0ZXIgcmVndWxhcmx5Cit0cmllcyB0byBzd2l0Y2ggdGhyZWFkcyAoc2VlIDpmdW5jOmBzeXMuc2V0Y2hlY2tpbnRlcnZhbGApLiAgVGhlIGxvY2sgaXMgYWxzbworcmVsZWFzZWQgYXJvdW5kIHBvdGVudGlhbGx5IGJsb2NraW5nIEkvTyBvcGVyYXRpb25zIGxpa2UgcmVhZGluZyBvciB3cml0aW5nCithIGZpbGUsIHNvIHRoYXQgb3RoZXIgUHl0aG9uIHRocmVhZHMgY2FuIHJ1biBpbiB0aGUgbWVhbnRpbWUuCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogUHlUaHJlYWRTdGF0ZQogICAgc2luZ2xlOiBQeVRocmVhZFN0YXRlCiAKLVRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbmVlZHMgdG8ga2VlcCBzb21lIGJvb2trZWVwaW5nIGluZm9ybWF0aW9uIHNlcGFyYXRlIHBlcgotdGhyZWFkIC0tLSBmb3IgdGhpcyBpdCB1c2VzIGEgZGF0YSBzdHJ1Y3R1cmUgY2FsbGVkIDpjdHlwZTpgUHlUaHJlYWRTdGF0ZWAuCi1UaGVyZSdzIG9uZSBnbG9iYWwgdmFyaWFibGUsIGhvd2V2ZXI6IHRoZSBwb2ludGVyIHRvIHRoZSBjdXJyZW50Ci06Y3R5cGU6YFB5VGhyZWFkU3RhdGVgIHN0cnVjdHVyZS4gIEJlZm9yZSB0aGUgYWRkaXRpb24gb2YgOmRmbjpgdGhyZWFkLWxvY2FsCi1zdG9yYWdlYCAoOmRmbjpgVExTYCkgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIGhhZCB0byBiZSBtYW5pcHVsYXRlZAotZXhwbGljaXRseS4KK1RoZSBQeXRob24gaW50ZXJwcmV0ZXIga2VlcHMgc29tZSB0aHJlYWQtc3BlY2lmaWMgYm9va2tlZXBpbmcgaW5mb3JtYXRpb24KK2luc2lkZSBhIGRhdGEgc3RydWN0dXJlIGNhbGxlZCA6Y3R5cGU6YFB5VGhyZWFkU3RhdGVgLiAgVGhlcmUncyBhbHNvIG9uZQorZ2xvYmFsIHZhcmlhYmxlIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IDpjdHlwZTpgUHlUaHJlYWRTdGF0ZWA6IGl0IGNhbgorYmUgcmV0cmlldmVkIHVzaW5nIDpjZnVuYzpgUHlUaHJlYWRTdGF0ZV9HZXRgLgogCi1UaGlzIGlzIGVhc3kgZW5vdWdoIGluIG1vc3QgY2FzZXMuICBNb3N0IGNvZGUgbWFuaXB1bGF0aW5nIHRoZSBnbG9iYWwKLWludGVycHJldGVyIGxvY2sgaGFzIHRoZSBmb2xsb3dpbmcgc2ltcGxlIHN0cnVjdHVyZTo6CitSZWxlYXNpbmcgdGhlIEdJTCBmcm9tIGV4dGVuc2lvbiBjb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01vc3QgZXh0ZW5zaW9uIGNvZGUgbWFuaXB1bGF0aW5nIHRoZSA6dGVybTpgR0lMYCBoYXMgdGhlIGZvbGxvd2luZyBzaW1wbGUKK3N0cnVjdHVyZTo6CiAKICAgIFNhdmUgdGhlIHRocmVhZCBzdGF0ZSBpbiBhIGxvY2FsIHZhcmlhYmxlLgogICAgUmVsZWFzZSB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2suCi0gICAuLi5EbyBzb21lIGJsb2NraW5nIEkvTyBvcGVyYXRpb24uLi4KKyAgIC4uLiBEbyBzb21lIGJsb2NraW5nIEkvTyBvcGVyYXRpb24gLi4uCiAgICBSZWFjcXVpcmUgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLgogICAgUmVzdG9yZSB0aGUgdGhyZWFkIHN0YXRlIGZyb20gdGhlIGxvY2FsIHZhcmlhYmxlLgogCiBUaGlzIGlzIHNvIGNvbW1vbiB0aGF0IGEgcGFpciBvZiBtYWNyb3MgZXhpc3RzIHRvIHNpbXBsaWZ5IGl0OjoKIAogICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgLi4uRG8gc29tZSBibG9ja2luZyBJL08gb3BlcmF0aW9uLi4uCisgICAuLi4gRG8gc29tZSBibG9ja2luZyBJL08gb3BlcmF0aW9uIC4uLgogICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogLi4gaW5kZXg6OgpAQCAtNDY4LDkgKzM5Niw4IEBACiAKIFRoZSA6Y21hY3JvOmBQeV9CRUdJTl9BTExPV19USFJFQURTYCBtYWNybyBvcGVucyBhIG5ldyBibG9jayBhbmQgZGVjbGFyZXMgYQogaGlkZGVuIGxvY2FsIHZhcmlhYmxlOyB0aGUgOmNtYWNybzpgUHlfRU5EX0FMTE9XX1RIUkVBRFNgIG1hY3JvIGNsb3NlcyB0aGUKLWJsb2NrLiAgQW5vdGhlciBhZHZhbnRhZ2Ugb2YgdXNpbmcgdGhlc2UgdHdvIG1hY3JvcyBpcyB0aGF0IHdoZW4gUHl0aG9uIGlzCi1jb21waWxlZCB3aXRob3V0IHRocmVhZCBzdXBwb3J0LCB0aGV5IGFyZSBkZWZpbmVkIGVtcHR5LCB0aHVzIHNhdmluZyB0aGUgdGhyZWFkCi1zdGF0ZSBhbmQgR0lMIG1hbmlwdWxhdGlvbnMuCitibG9jay4gIFRoZXNlIHR3byBtYWNyb3MgYXJlIHN0aWxsIGF2YWlsYWJsZSB3aGVuIFB5dGhvbiBpcyBjb21waWxlZCB3aXRob3V0Cit0aHJlYWQgc3VwcG9ydCAodGhleSBzaW1wbHkgaGF2ZSBhbiBlbXB0eSBleHBhbnNpb24pLgogCiBXaGVuIHRocmVhZCBzdXBwb3J0IGlzIGVuYWJsZWQsIHRoZSBibG9jayBhYm92ZSBleHBhbmRzIHRvIHRoZSBmb2xsb3dpbmcgY29kZTo6CiAKQEAgLTQ4MCw2NSArNDA3LDYwIEBACiAgICAuLi5EbyBzb21lIGJsb2NraW5nIEkvTyBvcGVyYXRpb24uLi4KICAgIFB5RXZhbF9SZXN0b3JlVGhyZWFkKF9zYXZlKTsKIAotVXNpbmcgZXZlbiBsb3dlciBsZXZlbCBwcmltaXRpdmVzLCB3ZSBjYW4gZ2V0IHJvdWdobHkgdGhlIHNhbWUgZWZmZWN0IGFzCi1mb2xsb3dzOjoKLQotICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0KLSAgIF9zYXZlID0gUHlUaHJlYWRTdGF0ZV9Td2FwKE5VTEwpOwotICAgUHlFdmFsX1JlbGVhc2VMb2NrKCk7Ci0gICAuLi5EbyBzb21lIGJsb2NraW5nIEkvTyBvcGVyYXRpb24uLi4KLSAgIFB5RXZhbF9BY3F1aXJlTG9jaygpOwotICAgUHlUaHJlYWRTdGF0ZV9Td2FwKF9zYXZlKTsKLQogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBQeUV2YWxfUmVzdG9yZVRocmVhZCgpCi0gICBzaW5nbGU6IGVycm5vCiAgICBzaW5nbGU6IFB5RXZhbF9TYXZlVGhyZWFkKCkKLSAgIHNpbmdsZTogUHlFdmFsX1JlbGVhc2VMb2NrKCkKLSAgIHNpbmdsZTogUHlFdmFsX0FjcXVpcmVMb2NrKCkKIAotVGhlcmUgYXJlIHNvbWUgc3VidGxlIGRpZmZlcmVuY2VzOyBpbiBwYXJ0aWN1bGFyLCA6Y2Z1bmM6YFB5RXZhbF9SZXN0b3JlVGhyZWFkYAotc2F2ZXMgYW5kIHJlc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGUgIGdsb2JhbCB2YXJpYWJsZSA6Y2RhdGE6YGVycm5vYCwgc2luY2UgdGhlCi1sb2NrIG1hbmlwdWxhdGlvbiBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCA6Y2RhdGE6YGVycm5vYCBpcyBsZWZ0IGFsb25lLiAgQWxzbywKLXdoZW4gdGhyZWFkIHN1cHBvcnQgaXMgZGlzYWJsZWQsIDpjZnVuYzpgUHlFdmFsX1NhdmVUaHJlYWRgIGFuZAotOmNmdW5jOmBQeUV2YWxfUmVzdG9yZVRocmVhZGAgZG9uJ3QgbWFuaXB1bGF0ZSB0aGUgR0lMOyBpbiB0aGlzIGNhc2UsCi06Y2Z1bmM6YFB5RXZhbF9SZWxlYXNlTG9ja2AgYW5kIDpjZnVuYzpgUHlFdmFsX0FjcXVpcmVMb2NrYCBhcmUgbm90IGF2YWlsYWJsZS4KLVRoaXMgaXMgZG9uZSBzbyB0aGF0IGR5bmFtaWNhbGx5IGxvYWRlZCBleHRlbnNpb25zIGNvbXBpbGVkIHdpdGggdGhyZWFkIHN1cHBvcnQKLWVuYWJsZWQgY2FuIGJlIGxvYWRlZCBieSBhbiBpbnRlcnByZXRlciB0aGF0IHdhcyBjb21waWxlZCB3aXRoIGRpc2FibGVkIHRocmVhZAotc3VwcG9ydC4KK0hlcmUgaXMgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrOiB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2sgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBwb2ludGVyIHRvIHRoZQorY3VycmVudCB0aHJlYWQgc3RhdGUuICBXaGVuIHJlbGVhc2luZyB0aGUgbG9jayBhbmQgc2F2aW5nIHRoZSB0aHJlYWQgc3RhdGUsCit0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgcG9pbnRlciBtdXN0IGJlIHJldHJpZXZlZCBiZWZvcmUgdGhlIGxvY2sgaXMgcmVsZWFzZWQKKyhzaW5jZSBhbm90aGVyIHRocmVhZCBjb3VsZCBpbW1lZGlhdGVseSBhY3F1aXJlIHRoZSBsb2NrIGFuZCBzdG9yZSBpdHMgb3duIHRocmVhZAorc3RhdGUgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZSkuIENvbnZlcnNlbHksIHdoZW4gYWNxdWlyaW5nIHRoZSBsb2NrIGFuZCByZXN0b3JpbmcKK3RoZSB0aHJlYWQgc3RhdGUsIHRoZSBsb2NrIG11c3QgYmUgYWNxdWlyZWQgYmVmb3JlIHN0b3JpbmcgdGhlIHRocmVhZCBzdGF0ZQorcG9pbnRlci4KIAotVGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgcG9pbnRlciB0byB0aGUgY3VycmVudCB0aHJlYWQKLXN0YXRlLiAgV2hlbiByZWxlYXNpbmcgdGhlIGxvY2sgYW5kIHNhdmluZyB0aGUgdGhyZWFkIHN0YXRlLCB0aGUgY3VycmVudCB0aHJlYWQKLXN0YXRlIHBvaW50ZXIgbXVzdCBiZSByZXRyaWV2ZWQgYmVmb3JlIHRoZSBsb2NrIGlzIHJlbGVhc2VkIChzaW5jZSBhbm90aGVyCi10aHJlYWQgY291bGQgaW1tZWRpYXRlbHkgYWNxdWlyZSB0aGUgbG9jayBhbmQgc3RvcmUgaXRzIG93biB0aHJlYWQgc3RhdGUgaW4gdGhlCi1nbG9iYWwgdmFyaWFibGUpLiBDb252ZXJzZWx5LCB3aGVuIGFjcXVpcmluZyB0aGUgbG9jayBhbmQgcmVzdG9yaW5nIHRoZSB0aHJlYWQKLXN0YXRlLCB0aGUgbG9jayBtdXN0IGJlIGFjcXVpcmVkIGJlZm9yZSBzdG9yaW5nIHRoZSB0aHJlYWQgc3RhdGUgcG9pbnRlci4KKy4uIG5vdGU6OgorICAgQ2FsbGluZyBzeXN0ZW0gSS9PIGZ1bmN0aW9ucyBpcyB0aGUgbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHJlbGVhc2luZworICAgdGhlIEdJTCwgYnV0IGl0IGNhbiBhbHNvIGJlIHVzZWZ1bCBiZWZvcmUgY2FsbGluZyBsb25nLXJ1bm5pbmcgY29tcHV0YXRpb25zCisgICB3aGljaCBkb24ndCBuZWVkIGFjY2VzcyB0byBQeXRob24gb2JqZWN0cywgc3VjaCBhcyBjb21wcmVzc2lvbiBvcgorICAgY3J5cHRvZ3JhcGhpYyBmdW5jdGlvbnMgb3BlcmF0aW5nIG92ZXIgbWVtb3J5IGJ1ZmZlcnMuICBGb3IgZXhhbXBsZSwgdGhlCisgICBzdGFuZGFyZCA6bW9kOmB6bGliYCBhbmQgOm1vZDpgaGFzaGxpYmAgbW9kdWxlcyByZWxlYXNlIHRoZSBHSUwgd2hlbgorICAgY29tcHJlc3Npbmcgb3IgaGFzaGluZyBkYXRhLgogCi1JdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHdoZW4gdGhyZWFkcyBhcmUgY3JlYXRlZCBmcm9tIEMsIHRoZXkgZG9uJ3QgaGF2ZQotdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLCBub3IgaXMgdGhlcmUgYSB0aHJlYWQgc3RhdGUgZGF0YSBzdHJ1Y3R1cmUgZm9yCi10aGVtLiAgU3VjaCB0aHJlYWRzIG11c3QgYm9vdHN0cmFwIHRoZW1zZWx2ZXMgaW50byBleGlzdGVuY2UsIGJ5IGZpcnN0Ci1jcmVhdGluZyBhIHRocmVhZCBzdGF0ZSBkYXRhIHN0cnVjdHVyZSwgdGhlbiBhY3F1aXJpbmcgdGhlIGxvY2ssIGFuZCBmaW5hbGx5Ci1zdG9yaW5nIHRoZWlyIHRocmVhZCBzdGF0ZSBwb2ludGVyLCBiZWZvcmUgdGhleSBjYW4gc3RhcnQgdXNpbmcgdGhlIFB5dGhvbi9DCi1BUEkuICBXaGVuIHRoZXkgYXJlIGRvbmUsIHRoZXkgc2hvdWxkIHJlc2V0IHRoZSB0aHJlYWQgc3RhdGUgcG9pbnRlciwgcmVsZWFzZQotdGhlIGxvY2ssIGFuZCBmaW5hbGx5IGZyZWUgdGhlaXIgdGhyZWFkIHN0YXRlIGRhdGEgc3RydWN0dXJlLgorTm9uLVB5dGhvbiBjcmVhdGVkIHRocmVhZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUJlZ2lubmluZyB3aXRoIHZlcnNpb24gMi4zLCB0aHJlYWRzIGNhbiBub3cgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlCi06Y2Z1bmM6YFB5R0lMU3RhdGVfXCpgIGZ1bmN0aW9ucyB0byBkbyBhbGwgb2YgdGhlIGFib3ZlIGF1dG9tYXRpY2FsbHkuICBUaGUKLXR5cGljYWwgaWRpb20gZm9yIGNhbGxpbmcgaW50byBQeXRob24gZnJvbSBhIEMgdGhyZWFkIGlzIG5vdzo6CitXaGVuIHRocmVhZHMgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlIGRlZGljYXRlZCBQeXRob24gQVBJcyAoc3VjaCBhcyB0aGUKKzptb2Q6YHRocmVhZGluZ2AgbW9kdWxlKSwgYSB0aHJlYWQgc3RhdGUgaXMgYXV0b21hdGljYWxseSBhc3NvY2lhdGVkIHRvIHRoZW0KK2FuZCB0aGUgY29kZSBzaG93ZWQgYWJvdmUgaXMgdGhlcmVmb3JlIGNvcnJlY3QuICBIb3dldmVyLCB3aGVuIHRocmVhZHMgYXJlCitjcmVhdGVkIGZyb20gQyAoZm9yIGV4YW1wbGUgYnkgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IHdpdGggaXRzIG93biB0aHJlYWQKK21hbmFnZW1lbnQpLCB0aGV5IGRvbid0IGhvbGQgdGhlIEdJTCwgbm9yIGlzIHRoZXJlIGEgdGhyZWFkIHN0YXRlIHN0cnVjdHVyZQorZm9yIHRoZW0uCisKK0lmIHlvdSBuZWVkIHRvIGNhbGwgUHl0aG9uIGNvZGUgZnJvbSB0aGVzZSB0aHJlYWRzIChvZnRlbiB0aGlzIHdpbGwgYmUgcGFydAorb2YgYSBjYWxsYmFjayBBUEkgcHJvdmlkZWQgYnkgdGhlIGFmb3JlbWVudGlvbmVkIHRoaXJkLXBhcnR5IGxpYnJhcnkpLAoreW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgdGhlc2UgdGhyZWFkcyB3aXRoIHRoZSBpbnRlcnByZXRlciBieQorY3JlYXRpbmcgYSB0aHJlYWQgc3RhdGUgZGF0YSBzdHJ1Y3R1cmUsIHRoZW4gYWNxdWlyaW5nIHRoZSBHSUwsIGFuZCBmaW5hbGx5CitzdG9yaW5nIHRoZWlyIHRocmVhZCBzdGF0ZSBwb2ludGVyLCBiZWZvcmUgeW91IGNhbiBzdGFydCB1c2luZyB0aGUgUHl0aG9uL0MKK0FQSS4gIFdoZW4geW91IGFyZSBkb25lLCB5b3Ugc2hvdWxkIHJlc2V0IHRoZSB0aHJlYWQgc3RhdGUgcG9pbnRlciwgcmVsZWFzZQordGhlIEdJTCwgYW5kIGZpbmFsbHkgZnJlZSB0aGUgdGhyZWFkIHN0YXRlIGRhdGEgc3RydWN0dXJlLgorCitUaGUgOmNmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgYW5kIDpjZnVuYzpgUHlHSUxTdGF0ZV9SZWxlYXNlYCBmdW5jdGlvbnMgZG8KK2FsbCBvZiB0aGUgYWJvdmUgYXV0b21hdGljYWxseS4gIFRoZSB0eXBpY2FsIGlkaW9tIGZvciBjYWxsaW5nIGludG8gUHl0aG9uCitmcm9tIGEgQyB0aHJlYWQgaXM6OgogCiAgICBQeUdJTFN0YXRlX1NUQVRFIGdzdGF0ZTsKICAgIGdzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAKLSAgIC8qIFBlcmZvcm0gUHl0aG9uIGFjdGlvbnMgaGVyZS4gICovCisgICAvKiBQZXJmb3JtIFB5dGhvbiBhY3Rpb25zIGhlcmUuICovCiAgICByZXN1bHQgPSBDYWxsU29tZUZ1bmN0aW9uKCk7Ci0gICAvKiBldmFsdWF0ZSByZXN1bHQgKi8KKyAgIC8qIGV2YWx1YXRlIHJlc3VsdCBvciBoYW5kbGUgZXhjZXB0aW9uICovCiAKICAgIC8qIFJlbGVhc2UgdGhlIHRocmVhZC4gTm8gUHl0aG9uIEFQSSBhbGxvd2VkIGJleW9uZCB0aGlzIHBvaW50LiAqLwogICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdzdGF0ZSk7CiAKIE5vdGUgdGhhdCB0aGUgOmNmdW5jOmBQeUdJTFN0YXRlX1wqYCBmdW5jdGlvbnMgYXNzdW1lIHRoZXJlIGlzIG9ubHkgb25lIGdsb2JhbAotaW50ZXJwcmV0ZXIgKGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSA6Y2Z1bmM6YFB5X0luaXRpYWxpemVgKS4gIFB5dGhvbiBzdGlsbAoraW50ZXJwcmV0ZXIgKGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSA6Y2Z1bmM6YFB5X0luaXRpYWxpemVgKS4gIFB5dGhvbgogc3VwcG9ydHMgdGhlIGNyZWF0aW9uIG9mIGFkZGl0aW9uYWwgaW50ZXJwcmV0ZXJzICh1c2luZwogOmNmdW5jOmBQeV9OZXdJbnRlcnByZXRlcmApLCBidXQgbWl4aW5nIG11bHRpcGxlIGludGVycHJldGVycyBhbmQgdGhlCiA6Y2Z1bmM6YFB5R0lMU3RhdGVfXCpgIEFQSSBpcyB1bnN1cHBvcnRlZC4KQEAgLTU2MCw2ICs0ODIsMTMgQEAKIDpjZnVuYzpgUHlPU19BZnRlckZvcmtgIHRyaWVzIHRvIHJlc2V0IHRoZSBuZWNlc3NhcnkgbG9ja3MsIGJ1dCBpcyBub3QKIGFsd2F5cyBhYmxlIHRvLgogCisKK0hpZ2gtbGV2ZWwgQVBJCistLS0tLS0tLS0tLS0tLQorCitUaGVzZSBhcmUgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCB0eXBlcyBhbmQgZnVuY3Rpb25zIHdoZW4gd3JpdGluZyBDIGV4dGVuc2lvbgorY29kZSwgb3Igd2hlbiBlbWJlZGRpbmcgdGhlIFB5dGhvbiBpbnRlcnByZXRlcjoKKwogLi4gY3R5cGU6OiBQeUludGVycHJldGVyU3RhdGUKIAogICAgVGhpcyBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBzdGF0ZSBzaGFyZWQgYnkgYSBudW1iZXIgb2YgY29vcGVyYXRpbmcKQEAgLTYwMSwyMSArNTMwLDIyIEBACiAKICAgIC4uIGluZGV4OjogbW9kdWxlOiB0aHJlYWQKIAotICAgV2hlbiBvbmx5IHRoZSBtYWluIHRocmVhZCBleGlzdHMsIG5vIEdJTCBvcGVyYXRpb25zIGFyZSBuZWVkZWQuIFRoaXMgaXMgYQotICAgY29tbW9uIHNpdHVhdGlvbiAobW9zdCBQeXRob24gcHJvZ3JhbXMgZG8gbm90IHVzZSB0aHJlYWRzKSwgYW5kIHRoZSBsb2NrCi0gICBvcGVyYXRpb25zIHNsb3cgdGhlIGludGVycHJldGVyIGRvd24gYSBiaXQuIFRoZXJlZm9yZSwgdGhlIGxvY2sgaXMgbm90Ci0gICBjcmVhdGVkIGluaXRpYWxseS4gIFRoaXMgc2l0dWF0aW9uIGlzIGVxdWl2YWxlbnQgdG8gaGF2aW5nIGFjcXVpcmVkIHRoZSBsb2NrOgotICAgd2hlbiB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRocmVhZCwgYWxsIG9iamVjdCBhY2Nlc3NlcyBhcmUgc2FmZS4gIFRoZXJlZm9yZSwKLSAgIHdoZW4gdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2ssIGl0IGFsc28gYWNxdWlyZXMKLSAgIGl0LiAgQmVmb3JlIHRoZSBQeXRob24gOm1vZDpgdGhyZWFkYCBtb2R1bGUgY3JlYXRlcyBhIG5ldyB0aHJlYWQsIGtub3dpbmcKLSAgIHRoYXQgZWl0aGVyIGl0IGhhcyB0aGUgbG9jayBvciB0aGUgbG9jayBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldCwgaXQgY2FsbHMKLSAgIDpjZnVuYzpgUHlFdmFsX0luaXRUaHJlYWRzYC4gIFdoZW4gdGhpcyBjYWxsIHJldHVybnMsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdAotICAgdGhlIGxvY2sgaGFzIGJlZW4gY3JlYXRlZCBhbmQgdGhhdCB0aGUgY2FsbGluZyB0aHJlYWQgaGFzIGFjcXVpcmVkIGl0LgorICAgLi4gbm90ZTo6CisgICAgICBXaGVuIG9ubHkgdGhlIG1haW4gdGhyZWFkIGV4aXN0cywgbm8gR0lMIG9wZXJhdGlvbnMgYXJlIG5lZWRlZC4gVGhpcyBpcyBhCisgICAgICBjb21tb24gc2l0dWF0aW9uIChtb3N0IFB5dGhvbiBwcm9ncmFtcyBkbyBub3QgdXNlIHRocmVhZHMpLCBhbmQgdGhlIGxvY2sKKyAgICAgIG9wZXJhdGlvbnMgc2xvdyB0aGUgaW50ZXJwcmV0ZXIgZG93biBhIGJpdC4gVGhlcmVmb3JlLCB0aGUgbG9jayBpcyBub3QKKyAgICAgIGNyZWF0ZWQgaW5pdGlhbGx5LiAgVGhpcyBzaXR1YXRpb24gaXMgZXF1aXZhbGVudCB0byBoYXZpbmcgYWNxdWlyZWQgdGhlIGxvY2s6CisgICAgICB3aGVuIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGhyZWFkLCBhbGwgb2JqZWN0IGFjY2Vzc2VzIGFyZSBzYWZlLiAgVGhlcmVmb3JlLAorICAgICAgd2hlbiB0aGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jaywgaXQgYWxzbyBhY3F1aXJlcworICAgICAgaXQuICBCZWZvcmUgdGhlIFB5dGhvbiA6bW9kOmBfdGhyZWFkYCBtb2R1bGUgY3JlYXRlcyBhIG5ldyB0aHJlYWQsIGtub3dpbmcKKyAgICAgIHRoYXQgZWl0aGVyIGl0IGhhcyB0aGUgbG9jayBvciB0aGUgbG9jayBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldCwgaXQgY2FsbHMKKyAgICAgIDpjZnVuYzpgUHlFdmFsX0luaXRUaHJlYWRzYC4gIFdoZW4gdGhpcyBjYWxsIHJldHVybnMsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdAorICAgICAgdGhlIGxvY2sgaGFzIGJlZW4gY3JlYXRlZCBhbmQgdGhhdCB0aGUgY2FsbGluZyB0aHJlYWQgaGFzIGFjcXVpcmVkIGl0LgogCi0gICBJdCBpcyAqKm5vdCoqIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gaXQgaXMgdW5rbm93biB3aGljaCB0aHJlYWQgKGlmCi0gICBhbnkpIGN1cnJlbnRseSBoYXMgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLgorICAgICAgSXQgaXMgKipub3QqKiBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGl0IGlzIHVua25vd24gd2hpY2ggdGhyZWFkIChpZgorICAgICAgYW55KSBjdXJyZW50bHkgaGFzIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jay4KIAotICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIHdoZW4gdGhyZWFkIHN1cHBvcnQgaXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIHdoZW4gdGhyZWFkIHN1cHBvcnQgaXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLgogCiAKIC4uIGNmdW5jdGlvbjo6IGludCBQeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkKCkKQEAgLTYyOCwzNyArNTU4LDYgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNAogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX0FjcXVpcmVMb2NrKCkKLQotICAgQWNxdWlyZSB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2suICBUaGUgbG9jayBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGVhcmxpZXIuCi0gICBJZiB0aGlzIHRocmVhZCBhbHJlYWR5IGhhcyB0aGUgbG9jaywgYSBkZWFkbG9jayBlbnN1ZXMuICBUaGlzIGZ1bmN0aW9uIGlzIG5vdAotICAgYXZhaWxhYmxlIHdoZW4gdGhyZWFkIHN1cHBvcnQgaXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLgotCi0KLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX1JlbGVhc2VMb2NrKCkKLQotICAgUmVsZWFzZSB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2suICBUaGUgbG9jayBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGVhcmxpZXIuCi0gICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCi0KLQotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUV2YWxfQWNxdWlyZVRocmVhZChQeVRocmVhZFN0YXRlICp0c3RhdGUpCi0KLSAgIEFjcXVpcmUgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIGFuZCBzZXQgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIHRvCi0gICAqdHN0YXRlKiwgd2hpY2ggc2hvdWxkIG5vdCBiZSAqTlVMTCouICBUaGUgbG9jayBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGVhcmxpZXIuCi0gICBJZiB0aGlzIHRocmVhZCBhbHJlYWR5IGhhcyB0aGUgbG9jaywgZGVhZGxvY2sgZW5zdWVzLiAgVGhpcyBmdW5jdGlvbiBpcyBub3QKLSAgIGF2YWlsYWJsZSB3aGVuIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4KLQotCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9SZWxlYXNlVGhyZWFkKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKLQotICAgUmVzZXQgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIHRvICpOVUxMKiBhbmQgcmVsZWFzZSB0aGUgZ2xvYmFsIGludGVycHJldGVyCi0gICBsb2NrLiAgVGhlIGxvY2sgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBlYXJsaWVyIGFuZCBtdXN0IGJlIGhlbGQgYnkgdGhlIGN1cnJlbnQKLSAgIHRocmVhZC4gIFRoZSAqdHN0YXRlKiBhcmd1bWVudCwgd2hpY2ggbXVzdCBub3QgYmUgKk5VTEwqLCBpcyBvbmx5IHVzZWQgdG8gY2hlY2sKLSAgIHRoYXQgaXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgLS0tIGlmIGl0IGlzbid0LCBhIGZhdGFsIGVycm9yIGlzCi0gICByZXBvcnRlZC4gVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIHdoZW4gdGhyZWFkIHN1cHBvcnQgaXMgZGlzYWJsZWQgYXQKLSAgIGNvbXBpbGUgdGltZS4KLQotCiAuLiBjZnVuY3Rpb246OiBQeVRocmVhZFN0YXRlKiBQeUV2YWxfU2F2ZVRocmVhZCgpCiAKICAgIFJlbGVhc2UgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIChpZiBpdCBoYXMgYmVlbiBjcmVhdGVkIGFuZCB0aHJlYWQKQEAgLTY3Nyw2ICs1NzYsMjAgQEAKICAgIHdoZW4gdGhyZWFkIHN1cHBvcnQgaXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLikKIAogCisuLiBjZnVuY3Rpb246OiBQeVRocmVhZFN0YXRlKiBQeVRocmVhZFN0YXRlX0dldCgpCisKKyAgIFJldHVybiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUuICBUaGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2sgbXVzdCBiZSBoZWxkLgorICAgV2hlbiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgaXMgKk5VTEwqLCB0aGlzIGlzc3VlcyBhIGZhdGFsIGVycm9yIChzbyB0aGF0CisgICB0aGUgY2FsbGVyIG5lZWRuJ3QgY2hlY2sgZm9yICpOVUxMKikuCisKKworLi4gY2Z1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlUaHJlYWRTdGF0ZV9Td2FwKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKKworICAgU3dhcCB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgd2l0aCB0aGUgdGhyZWFkIHN0YXRlIGdpdmVuIGJ5IHRoZSBhcmd1bWVudAorICAgKnRzdGF0ZSosIHdoaWNoIG1heSBiZSAqTlVMTCouICBUaGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2sgbXVzdCBiZSBoZWxkCisgICBhbmQgaXMgbm90IHJlbGVhc2VkLgorCisKIC4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX1JlSW5pdFRocmVhZHMoKQogCiAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIDpjZnVuYzpgUHlPU19BZnRlckZvcmtgIHRvIGVuc3VyZSB0aGF0IG5ld2x5CkBAIC02ODQsNiArNTk3LDQ3IEBACiAgICBhcmUgbm90IHJ1bm5pbmcgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCiAKIAorVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdXNlIHRocmVhZC1sb2NhbCBzdG9yYWdlLCBhbmQgYXJlIG5vdCBjb21wYXRpYmxlCit3aXRoIHN1Yi1pbnRlcnByZXRlcnM6CisKKy4uIGNmdW5jdGlvbjo6IFB5R0lMU3RhdGVfU1RBVEUgUHlHSUxTdGF0ZV9FbnN1cmUoKQorCisgICBFbnN1cmUgdGhhdCB0aGUgY3VycmVudCB0aHJlYWQgaXMgcmVhZHkgdG8gY2FsbCB0aGUgUHl0aG9uIEMgQVBJIHJlZ2FyZGxlc3MKKyAgIG9mIHRoZSBjdXJyZW50IHN0YXRlIG9mIFB5dGhvbiwgb3Igb2YgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLiBUaGlzIG1heQorICAgYmUgY2FsbGVkIGFzIG1hbnkgdGltZXMgYXMgZGVzaXJlZCBieSBhIHRocmVhZCBhcyBsb25nIGFzIGVhY2ggY2FsbCBpcworICAgbWF0Y2hlZCB3aXRoIGEgY2FsbCB0byA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAuIEluIGdlbmVyYWwsIG90aGVyCisgICB0aHJlYWQtcmVsYXRlZCBBUElzIG1heSBiZSB1c2VkIGJldHdlZW4gOmNmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgYW5kCisgICA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgY2FsbHMgYXMgbG9uZyBhcyB0aGUgdGhyZWFkIHN0YXRlIGlzIHJlc3RvcmVkIHRvCisgICBpdHMgcHJldmlvdXMgc3RhdGUgYmVmb3JlIHRoZSBSZWxlYXNlKCkuICBGb3IgZXhhbXBsZSwgbm9ybWFsIHVzYWdlIG9mIHRoZQorICAgOmNtYWNybzpgUHlfQkVHSU5fQUxMT1dfVEhSRUFEU2AgYW5kIDpjbWFjcm86YFB5X0VORF9BTExPV19USFJFQURTYCBtYWNyb3MgaXMKKyAgIGFjY2VwdGFibGUuCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gb3BhcXVlICJoYW5kbGUiIHRvIHRoZSB0aHJlYWQgc3RhdGUgd2hlbgorICAgOmNmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgd2FzIGNhbGxlZCwgYW5kIG11c3QgYmUgcGFzc2VkIHRvCisgICA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgdG8gZW5zdXJlIFB5dGhvbiBpcyBsZWZ0IGluIHRoZSBzYW1lIHN0YXRlLiBFdmVuCisgICB0aG91Z2ggcmVjdXJzaXZlIGNhbGxzIGFyZSBhbGxvd2VkLCB0aGVzZSBoYW5kbGVzICpjYW5ub3QqIGJlIHNoYXJlZCAtIGVhY2gKKyAgIHVuaXF1ZSBjYWxsIHRvIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIG11c3Qgc2F2ZSB0aGUgaGFuZGxlIGZvciBpdHMgY2FsbAorICAgdG8gOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgLgorCisgICBXaGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zLCB0aGUgY3VycmVudCB0aHJlYWQgd2lsbCBob2xkIHRoZSBHSUwgYW5kIGJlIGFibGUKKyAgIHRvIGNhbGwgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlLiAgRmFpbHVyZSBpcyBhIGZhdGFsIGVycm9yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKKworCisuLiBjZnVuY3Rpb246OiB2b2lkIFB5R0lMU3RhdGVfUmVsZWFzZShQeUdJTFN0YXRlX1NUQVRFKQorCisgICBSZWxlYXNlIGFueSByZXNvdXJjZXMgcHJldmlvdXNseSBhY3F1aXJlZC4gIEFmdGVyIHRoaXMgY2FsbCwgUHl0aG9uJ3Mgc3RhdGUgd2lsbAorICAgYmUgdGhlIHNhbWUgYXMgaXQgd2FzIHByaW9yIHRvIHRoZSBjb3JyZXNwb25kaW5nIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGNhbGwKKyAgIChidXQgZ2VuZXJhbGx5IHRoaXMgc3RhdGUgd2lsbCBiZSB1bmtub3duIHRvIHRoZSBjYWxsZXIsIGhlbmNlIHRoZSB1c2Ugb2YgdGhlCisgICBHSUxTdGF0ZSBBUEkpLgorCisgICBFdmVyeSBjYWxsIHRvIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIG11c3QgYmUgbWF0Y2hlZCBieSBhIGNhbGwgdG8KKyAgIDpjZnVuYzpgUHlHSUxTdGF0ZV9SZWxlYXNlYCBvbiB0aGUgc2FtZSB0aHJlYWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMworCisKIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBub3JtYWxseSB1c2VkIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb247IGxvb2sgZm9yCiBleGFtcGxlIHVzYWdlIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbi4KIApAQCAtNzE3LDYgKzY3MSwxMCBAQAogICAgOmNtYWNybzpgUHlfQkVHSU5fQUxMT1dfVEhSRUFEU2Agd2l0aG91dCB0aGUgb3BlbmluZyBicmFjZSBhbmQgdmFyaWFibGUKICAgIGRlY2xhcmF0aW9uLiAgSXQgaXMgYSBuby1vcCB3aGVuIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4KIAorCitMb3ctbGV2ZWwgQVBJCistLS0tLS0tLS0tLS0tCisKIEFsbCBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgd2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBlbmFibGVkCiBhdCBjb21waWxlIHRpbWUsIGFuZCBtdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4gdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIGhhcwogYmVlbiBjcmVhdGVkLgpAQCAtNzYyLDE5ICs3MjAsNiBAQAogICAgOmNmdW5jOmBQeVRocmVhZFN0YXRlX0NsZWFyYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeVRocmVhZFN0YXRlKiBQeVRocmVhZFN0YXRlX0dldCgpCi0KLSAgIFJldHVybiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUuICBUaGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2sgbXVzdCBiZSBoZWxkLgotICAgV2hlbiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgaXMgKk5VTEwqLCB0aGlzIGlzc3VlcyBhIGZhdGFsIGVycm9yIChzbyB0aGF0Ci0gICB0aGUgY2FsbGVyIG5lZWRuJ3QgY2hlY2sgZm9yICpOVUxMKikuCi0KLQotLi4gY2Z1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlUaHJlYWRTdGF0ZV9Td2FwKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKLQotICAgU3dhcCB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgd2l0aCB0aGUgdGhyZWFkIHN0YXRlIGdpdmVuIGJ5IHRoZSBhcmd1bWVudAotICAgKnRzdGF0ZSosIHdoaWNoIG1heSBiZSAqTlVMTCouICBUaGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2sgbXVzdCBiZSBoZWxkLgotCi0KIC4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVRocmVhZFN0YXRlX0dldERpY3QoKQogCiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGluIHdoaWNoIGV4dGVuc2lvbnMgY2FuIHN0b3JlIHRocmVhZC1zcGVjaWZpYyBzdGF0ZQpAQCAtODAxLDQyICs3NDYsMTkwIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKIAogCi0uLiBjZnVuY3Rpb246OiBQeUdJTFN0YXRlX1NUQVRFIFB5R0lMU3RhdGVfRW5zdXJlKCkKKy4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX0FjcXVpcmVUaHJlYWQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogCi0gICBFbnN1cmUgdGhhdCB0aGUgY3VycmVudCB0aHJlYWQgaXMgcmVhZHkgdG8gY2FsbCB0aGUgUHl0aG9uIEMgQVBJIHJlZ2FyZGxlc3MKLSAgIG9mIHRoZSBjdXJyZW50IHN0YXRlIG9mIFB5dGhvbiwgb3Igb2YgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLiBUaGlzIG1heQotICAgYmUgY2FsbGVkIGFzIG1hbnkgdGltZXMgYXMgZGVzaXJlZCBieSBhIHRocmVhZCBhcyBsb25nIGFzIGVhY2ggY2FsbCBpcwotICAgbWF0Y2hlZCB3aXRoIGEgY2FsbCB0byA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAuIEluIGdlbmVyYWwsIG90aGVyCi0gICB0aHJlYWQtcmVsYXRlZCBBUElzIG1heSBiZSB1c2VkIGJldHdlZW4gOmNmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgYW5kCi0gICA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgY2FsbHMgYXMgbG9uZyBhcyB0aGUgdGhyZWFkIHN0YXRlIGlzIHJlc3RvcmVkIHRvCi0gICBpdHMgcHJldmlvdXMgc3RhdGUgYmVmb3JlIHRoZSBSZWxlYXNlKCkuICBGb3IgZXhhbXBsZSwgbm9ybWFsIHVzYWdlIG9mIHRoZQotICAgOmNtYWNybzpgUHlfQkVHSU5fQUxMT1dfVEhSRUFEU2AgYW5kIDpjbWFjcm86YFB5X0VORF9BTExPV19USFJFQURTYCBtYWNyb3MgaXMKLSAgIGFjY2VwdGFibGUuCisgICBBY3F1aXJlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBhbmQgc2V0IHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSB0bworICAgKnRzdGF0ZSosIHdoaWNoIHNob3VsZCBub3QgYmUgKk5VTEwqLiAgVGhlIGxvY2sgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBlYXJsaWVyLgorICAgSWYgdGhpcyB0aHJlYWQgYWxyZWFkeSBoYXMgdGhlIGxvY2ssIGRlYWRsb2NrIGVuc3Vlcy4KIAotICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvcGFxdWUgImhhbmRsZSIgdG8gdGhlIHRocmVhZCBzdGF0ZSB3aGVuCi0gICA6Y2Z1bmM6YFB5R0lMU3RhdGVfRW5zdXJlYCB3YXMgY2FsbGVkLCBhbmQgbXVzdCBiZSBwYXNzZWQgdG8KLSAgIDpjZnVuYzpgUHlHSUxTdGF0ZV9SZWxlYXNlYCB0byBlbnN1cmUgUHl0aG9uIGlzIGxlZnQgaW4gdGhlIHNhbWUgc3RhdGUuIEV2ZW4KLSAgIHRob3VnaCByZWN1cnNpdmUgY2FsbHMgYXJlIGFsbG93ZWQsIHRoZXNlIGhhbmRsZXMgKmNhbm5vdCogYmUgc2hhcmVkIC0gZWFjaAotICAgdW5pcXVlIGNhbGwgdG8gOmNmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgbXVzdCBzYXZlIHRoZSBoYW5kbGUgZm9yIGl0cyBjYWxsCi0gICB0byA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAuCi0KLSAgIFdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMsIHRoZSBjdXJyZW50IHRocmVhZCB3aWxsIGhvbGQgdGhlIEdJTC4gRmFpbHVyZSBpcyBhCi0gICBmYXRhbCBlcnJvci4KLQotICAgLi4gdmVyc2lvbmFkZGVkOjogMi4zCisgICA6Y2Z1bmM6YFB5RXZhbF9SZXN0b3JlVGhyZWFkYCBpcyBhIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiB3aGljaCBpcyBhbHdheXMKKyAgIGF2YWlsYWJsZSAoZXZlbiB3aGVuIHRocmVhZCBzdXBwb3J0IGlzbid0IGVuYWJsZWQgb3Igd2hlbiB0aHJlYWRzIGhhdmUKKyAgIG5vdCBiZWVuIGluaXRpYWxpemVkKS4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5R0lMU3RhdGVfUmVsZWFzZShQeUdJTFN0YXRlX1NUQVRFKQorLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUV2YWxfUmVsZWFzZVRocmVhZChQeVRocmVhZFN0YXRlICp0c3RhdGUpCiAKLSAgIFJlbGVhc2UgYW55IHJlc291cmNlcyBwcmV2aW91c2x5IGFjcXVpcmVkLiAgQWZ0ZXIgdGhpcyBjYWxsLCBQeXRob24ncyBzdGF0ZSB3aWxsCi0gICBiZSB0aGUgc2FtZSBhcyBpdCB3YXMgcHJpb3IgdG8gdGhlIGNvcnJlc3BvbmRpbmcgOmNmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgY2FsbAotICAgKGJ1dCBnZW5lcmFsbHkgdGhpcyBzdGF0ZSB3aWxsIGJlIHVua25vd24gdG8gdGhlIGNhbGxlciwgaGVuY2UgdGhlIHVzZSBvZiB0aGUKLSAgIEdJTFN0YXRlIEFQSS4pCisgICBSZXNldCB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgdG8gKk5VTEwqIGFuZCByZWxlYXNlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIKKyAgIGxvY2suICBUaGUgbG9jayBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGVhcmxpZXIgYW5kIG11c3QgYmUgaGVsZCBieSB0aGUgY3VycmVudAorICAgdGhyZWFkLiAgVGhlICp0c3RhdGUqIGFyZ3VtZW50LCB3aGljaCBtdXN0IG5vdCBiZSAqTlVMTCosIGlzIG9ubHkgdXNlZCB0byBjaGVjaworICAgdGhhdCBpdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSAtLS0gaWYgaXQgaXNuJ3QsIGEgZmF0YWwgZXJyb3IgaXMKKyAgIHJlcG9ydGVkLgogCi0gICBFdmVyeSBjYWxsIHRvIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIG11c3QgYmUgbWF0Y2hlZCBieSBhIGNhbGwgdG8KLSAgIDpjZnVuYzpgUHlHSUxTdGF0ZV9SZWxlYXNlYCBvbiB0aGUgc2FtZSB0aHJlYWQuCisgICA6Y2Z1bmM6YFB5RXZhbF9TYXZlVGhyZWFkYCBpcyBhIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiB3aGljaCBpcyBhbHdheXMKKyAgIGF2YWlsYWJsZSAoZXZlbiB3aGVuIHRocmVhZCBzdXBwb3J0IGlzbid0IGVuYWJsZWQgb3Igd2hlbiB0aHJlYWRzIGhhdmUKKyAgIG5vdCBiZWVuIGluaXRpYWxpemVkKS4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMi4zCisKKy4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX0FjcXVpcmVMb2NrKCkKKworICAgQWNxdWlyZSB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2suICBUaGUgbG9jayBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGVhcmxpZXIuCisgICBJZiB0aGlzIHRocmVhZCBhbHJlYWR5IGhhcyB0aGUgbG9jaywgYSBkZWFkbG9jayBlbnN1ZXMuCisKKyAgIC4uIHdhcm5pbmc6OgorICAgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlLiAgUGxlYXNlIHVzZQorICAgICAgOmNmdW5jOmBQeUV2YWxfUmVzdG9yZVRocmVhZGAgb3IgOmNmdW5jOmBQeUV2YWxfQWNxdWlyZVRocmVhZGAKKyAgICAgIGluc3RlYWQuCisKKworLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUV2YWxfUmVsZWFzZUxvY2soKQorCisgICBSZWxlYXNlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jay4gIFRoZSBsb2NrIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgZWFybGllci4KKworICAgLi4gd2FybmluZzo6CisgICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUuICBQbGVhc2UgdXNlCisgICAgICA6Y2Z1bmM6YFB5RXZhbF9TYXZlVGhyZWFkYCBvciA6Y2Z1bmM6YFB5RXZhbF9SZWxlYXNlVGhyZWFkYAorICAgICAgaW5zdGVhZC4KKworCitTdWItaW50ZXJwcmV0ZXIgc3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PT0KKworV2hpbGUgaW4gbW9zdCB1c2VzLCB5b3Ugd2lsbCBvbmx5IGVtYmVkIGEgc2luZ2xlIFB5dGhvbiBpbnRlcnByZXRlciwgdGhlcmUKK2FyZSBjYXNlcyB3aGVyZSB5b3UgbmVlZCB0byBjcmVhdGUgc2V2ZXJhbCBpbmRlcGVuZGVudCBpbnRlcnByZXRlcnMgaW4gdGhlCitzYW1lIHByb2Nlc3MgYW5kIHBlcmhhcHMgZXZlbiBpbiB0aGUgc2FtZSB0aHJlYWQuICBTdWItaW50ZXJwcmV0ZXJzIGFsbG93Cit5b3UgdG8gZG8gdGhhdC4gIFlvdSBjYW4gc3dpdGNoIGJldHdlZW4gc3ViLWludGVycHJldGVycyB1c2luZyB0aGUKKzpjZnVuYzpgUHlUaHJlYWRTdGF0ZV9Td2FwYCBmdW5jdGlvbi4gIFlvdSBjYW4gY3JlYXRlIGFuZCBkZXN0cm95IHRoZW0KK3VzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCisKKy4uIGNmdW5jdGlvbjo6IFB5VGhyZWFkU3RhdGUqIFB5X05ld0ludGVycHJldGVyKCkKKworICAgLi4gaW5kZXg6OgorICAgICAgbW9kdWxlOiBidWlsdGlucworICAgICAgbW9kdWxlOiBfX21haW5fXworICAgICAgbW9kdWxlOiBzeXMKKyAgICAgIHNpbmdsZTogc3Rkb3V0IChpbiBtb2R1bGUgc3lzKQorICAgICAgc2luZ2xlOiBzdGRlcnIgKGluIG1vZHVsZSBzeXMpCisgICAgICBzaW5nbGU6IHN0ZGluIChpbiBtb2R1bGUgc3lzKQorCisgICBDcmVhdGUgYSBuZXcgc3ViLWludGVycHJldGVyLiAgVGhpcyBpcyBhbiAoYWxtb3N0KSB0b3RhbGx5IHNlcGFyYXRlIGVudmlyb25tZW50CisgICBmb3IgdGhlIGV4ZWN1dGlvbiBvZiBQeXRob24gY29kZS4gIEluIHBhcnRpY3VsYXIsIHRoZSBuZXcgaW50ZXJwcmV0ZXIgaGFzCisgICBzZXBhcmF0ZSwgaW5kZXBlbmRlbnQgdmVyc2lvbnMgb2YgYWxsIGltcG9ydGVkIG1vZHVsZXMsIGluY2x1ZGluZyB0aGUKKyAgIGZ1bmRhbWVudGFsIG1vZHVsZXMgOm1vZDpgYnVpbHRpbnNgLCA6bW9kOmBfX21haW5fX2AgYW5kIDptb2Q6YHN5c2AuICBUaGUKKyAgIHRhYmxlIG9mIGxvYWRlZCBtb2R1bGVzIChgYHN5cy5tb2R1bGVzYGApIGFuZCB0aGUgbW9kdWxlIHNlYXJjaCBwYXRoCisgICAoYGBzeXMucGF0aGBgKSBhcmUgYWxzbyBzZXBhcmF0ZS4gIFRoZSBuZXcgZW52aXJvbm1lbnQgaGFzIG5vIGBgc3lzLmFyZ3ZgYAorICAgdmFyaWFibGUuICBJdCBoYXMgbmV3IHN0YW5kYXJkIEkvTyBzdHJlYW0gZmlsZSBvYmplY3RzIGBgc3lzLnN0ZGluYGAsCisgICBgYHN5cy5zdGRvdXRgYCBhbmQgYGBzeXMuc3RkZXJyYGAgKGhvd2V2ZXIgdGhlc2UgcmVmZXIgdG8gdGhlIHNhbWUgdW5kZXJseWluZworICAgZmlsZSBkZXNjcmlwdG9ycykuCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgcG9pbnRzIHRvIHRoZSBmaXJzdCB0aHJlYWQgc3RhdGUgY3JlYXRlZCBpbiB0aGUgbmV3CisgICBzdWItaW50ZXJwcmV0ZXIuICBUaGlzIHRocmVhZCBzdGF0ZSBpcyBtYWRlIGluIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZS4KKyAgIE5vdGUgdGhhdCBubyBhY3R1YWwgdGhyZWFkIGlzIGNyZWF0ZWQ7IHNlZSB0aGUgZGlzY3Vzc2lvbiBvZiB0aHJlYWQgc3RhdGVzCisgICBiZWxvdy4gIElmIGNyZWF0aW9uIG9mIHRoZSBuZXcgaW50ZXJwcmV0ZXIgaXMgdW5zdWNjZXNzZnVsLCAqTlVMTCogaXMKKyAgIHJldHVybmVkOyBubyBleGNlcHRpb24gaXMgc2V0IHNpbmNlIHRoZSBleGNlcHRpb24gc3RhdGUgaXMgc3RvcmVkIGluIHRoZQorICAgY3VycmVudCB0aHJlYWQgc3RhdGUgYW5kIHRoZXJlIG1heSBub3QgYmUgYSBjdXJyZW50IHRocmVhZCBzdGF0ZS4gIChMaWtlIGFsbAorICAgb3RoZXIgUHl0aG9uL0MgQVBJIGZ1bmN0aW9ucywgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUKKyAgIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgaXMgc3RpbGwgaGVsZCB3aGVuIGl0IHJldHVybnM7IGhvd2V2ZXIsIHVubGlrZSBtb3N0CisgICBvdGhlciBQeXRob24vQyBBUEkgZnVuY3Rpb25zLCB0aGVyZSBuZWVkbid0IGJlIGEgY3VycmVudCB0aHJlYWQgc3RhdGUgb24KKyAgIGVudHJ5LikKKworICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBQeV9GaW5hbGl6ZSgpCisgICAgICBzaW5nbGU6IFB5X0luaXRpYWxpemUoKQorCisgICBFeHRlbnNpb24gbW9kdWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gKHN1Yi0paW50ZXJwcmV0ZXJzIGFzIGZvbGxvd3M6IHRoZSBmaXJzdAorICAgdGltZSBhIHBhcnRpY3VsYXIgZXh0ZW5zaW9uIGlzIGltcG9ydGVkLCBpdCBpcyBpbml0aWFsaXplZCBub3JtYWxseSwgYW5kIGEKKyAgIChzaGFsbG93KSBjb3B5IG9mIGl0cyBtb2R1bGUncyBkaWN0aW9uYXJ5IGlzIHNxdWlycmVsZWQgYXdheS4gIFdoZW4gdGhlIHNhbWUKKyAgIGV4dGVuc2lvbiBpcyBpbXBvcnRlZCBieSBhbm90aGVyIChzdWItKWludGVycHJldGVyLCBhIG5ldyBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQKKyAgIGFuZCBmaWxsZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhpcyBjb3B5OyB0aGUgZXh0ZW5zaW9uJ3MgYGBpbml0YGAgZnVuY3Rpb24gaXMKKyAgIG5vdCBjYWxsZWQuICBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0IGhhcHBlbnMgd2hlbiBhbiBleHRlbnNpb24gaXMKKyAgIGltcG9ydGVkIGFmdGVyIHRoZSBpbnRlcnByZXRlciBoYXMgYmVlbiBjb21wbGV0ZWx5IHJlLWluaXRpYWxpemVkIGJ5IGNhbGxpbmcKKyAgIDpjZnVuYzpgUHlfRmluYWxpemVgIGFuZCA6Y2Z1bmM6YFB5X0luaXRpYWxpemVgOyBpbiB0aGF0IGNhc2UsIHRoZSBleHRlbnNpb24ncworICAgYGBpbml0bW9kdWxlYGAgZnVuY3Rpb24gKmlzKiBjYWxsZWQgYWdhaW4uCisKKyAgIC4uIGluZGV4Ojogc2luZ2xlOiBjbG9zZSgpIChpbiBtb2R1bGUgb3MpCisKKworLi4gY2Z1bmN0aW9uOjogdm9pZCBQeV9FbmRJbnRlcnByZXRlcihQeVRocmVhZFN0YXRlICp0c3RhdGUpCisKKyAgIC4uIGluZGV4Ojogc2luZ2xlOiBQeV9GaW5hbGl6ZSgpCisKKyAgIERlc3Ryb3kgdGhlIChzdWItKWludGVycHJldGVyIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUuIFRoZSBnaXZlbgorICAgdGhyZWFkIHN0YXRlIG11c3QgYmUgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlLiAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHRocmVhZAorICAgc3RhdGVzIGJlbG93LiAgV2hlbiB0aGUgY2FsbCByZXR1cm5zLCB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgaXMgKk5VTEwqLiAgQWxsCisgICB0aHJlYWQgc3RhdGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVycHJldGVyIGFyZSBkZXN0cm95ZWQuICAoVGhlIGdsb2JhbAorICAgaW50ZXJwcmV0ZXIgbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgaXMgc3RpbGwgaGVsZAorICAgd2hlbiBpdCByZXR1cm5zLikgIDpjZnVuYzpgUHlfRmluYWxpemVgIHdpbGwgZGVzdHJveSBhbGwgc3ViLWludGVycHJldGVycyB0aGF0CisgICBoYXZlbid0IGJlZW4gZXhwbGljaXRseSBkZXN0cm95ZWQgYXQgdGhhdCBwb2ludC4KKworCitCdWdzIGFuZCBjYXZlYXRzCistLS0tLS0tLS0tLS0tLS0tCisKK0JlY2F1c2Ugc3ViLWludGVycHJldGVycyAoYW5kIHRoZSBtYWluIGludGVycHJldGVyKSBhcmUgcGFydCBvZiB0aGUgc2FtZQorcHJvY2VzcywgdGhlIGluc3VsYXRpb24gYmV0d2VlbiB0aGVtIGlzbid0IHBlcmZlY3QgLS0tIGZvciBleGFtcGxlLCB1c2luZworbG93LWxldmVsIGZpbGUgb3BlcmF0aW9ucyBsaWtlICA6ZnVuYzpgb3MuY2xvc2VgIHRoZXkgY2FuCisoYWNjaWRlbnRhbGx5IG9yIG1hbGljaW91c2x5KSBhZmZlY3QgZWFjaCBvdGhlcidzIG9wZW4gZmlsZXMuICBCZWNhdXNlIG9mIHRoZQord2F5IGV4dGVuc2lvbnMgYXJlIHNoYXJlZCBiZXR3ZWVuIChzdWItKWludGVycHJldGVycywgc29tZSBleHRlbnNpb25zIG1heSBub3QKK3dvcmsgcHJvcGVybHk7IHRoaXMgaXMgZXNwZWNpYWxseSBsaWtlbHkgd2hlbiB0aGUgZXh0ZW5zaW9uIG1ha2VzIHVzZSBvZgorKHN0YXRpYykgZ2xvYmFsIHZhcmlhYmxlcywgb3Igd2hlbiB0aGUgZXh0ZW5zaW9uIG1hbmlwdWxhdGVzIGl0cyBtb2R1bGUncworZGljdGlvbmFyeSBhZnRlciBpdHMgaW5pdGlhbGl6YXRpb24uICBJdCBpcyBwb3NzaWJsZSB0byBpbnNlcnQgb2JqZWN0cyBjcmVhdGVkCitpbiBvbmUgc3ViLWludGVycHJldGVyIGludG8gYSBuYW1lc3BhY2Ugb2YgYW5vdGhlciBzdWItaW50ZXJwcmV0ZXI7IHRoaXMgc2hvdWxkCitiZSBkb25lIHdpdGggZ3JlYXQgY2FyZSB0byBhdm9pZCBzaGFyaW5nIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMsIG1ldGhvZHMsCitpbnN0YW5jZXMgb3IgY2xhc3NlcyBiZXR3ZWVuIHN1Yi1pbnRlcnByZXRlcnMsIHNpbmNlIGltcG9ydCBvcGVyYXRpb25zIGV4ZWN1dGVkCitieSBzdWNoIG9iamVjdHMgbWF5IGFmZmVjdCB0aGUgd3JvbmcgKHN1Yi0paW50ZXJwcmV0ZXIncyBkaWN0aW9uYXJ5IG9mIGxvYWRlZAorbW9kdWxlcy4KKworQWxzbyBub3RlIHRoYXQgY29tYmluaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB3aXRoIDpjZnVuYzpgUHlHSUxTdGF0ZV9cKmAgQVBJcworaXMgZGVsaWNhdGUsIGJlY29tZSB0aGVzZSBBUElzIGFzc3VtZSBhIGJpamVjdGlvbiBiZXR3ZWVuIFB5dGhvbiB0aHJlYWQgc3RhdGVzCithbmQgT1MtbGV2ZWwgdGhyZWFkcywgYW4gYXNzdW1wdGlvbiBicm9rZW4gYnkgdGhlIHByZXNlbmNlIG9mIHN1Yi1pbnRlcnByZXRlcnMuCitJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3Qgc3dpdGNoIHN1Yi1pbnRlcnByZXRlcnMgYmV0d2VlbiBhIHBhaXIKK29mIG1hdGNoaW5nIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGFuZCA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgY2FsbHMuCitGdXJ0aGVybW9yZSwgZXh0ZW5zaW9ucyAoc3VjaCBhcyA6bW9kOmBjdHlwZXNgKSB1c2luZyB0aGVzZSBBUElzIHRvIGFsbG93IGNhbGxpbmcKK29mIFB5dGhvbiBjb2RlIGZyb20gbm9uLVB5dGhvbiBjcmVhdGVkIHRocmVhZHMgd2lsbCBwcm9iYWJseSBiZSBicm9rZW4gd2hlbiB1c2luZworc3ViLWludGVycHJldGVycy4KKworCitBc3luY2hyb25vdXMgTm90aWZpY2F0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQSBtZWNoYW5pc20gaXMgcHJvdmlkZWQgdG8gbWFrZSBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9ucyB0byB0aGUgbWFpbgoraW50ZXJwcmV0ZXIgdGhyZWFkLiAgVGhlc2Ugbm90aWZpY2F0aW9ucyB0YWtlIHRoZSBmb3JtIG9mIGEgZnVuY3Rpb24KK3BvaW50ZXIgYW5kIGEgdm9pZCBhcmd1bWVudC4KKworLi4gaW5kZXg6OiBzaW5nbGU6IHNldGNoZWNraW50ZXJ2YWwoKSAoaW4gbW9kdWxlIHN5cykKKworRXZlcnkgY2hlY2sgaW50ZXJ2YWwsIHdoZW4gdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIGlzIHJlbGVhc2VkIGFuZAorcmVhY3F1aXJlZCwgUHl0aG9uIHdpbGwgYWxzbyBjYWxsIGFueSBzdWNoIHByb3ZpZGVkIGZ1bmN0aW9ucy4gIFRoaXMgY2FuIGJlIHVzZWQKK2ZvciBleGFtcGxlIGJ5IGFzeW5jaHJvbm91cyBJTyBoYW5kbGVycy4gIFRoZSBub3RpZmljYXRpb24gY2FuIGJlIHNjaGVkdWxlZCBmcm9tCithIHdvcmtlciB0aHJlYWQgYW5kIHRoZSBhY3R1YWwgY2FsbCB0aGFuIG1hZGUgYXQgdGhlIGVhcmxpZXN0IGNvbnZlbmllbmNlIGJ5IHRoZQorbWFpbiB0aHJlYWQgd2hlcmUgaXQgaGFzIHBvc3Nlc3Npb24gb2YgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIGFuZCBjYW4KK3BlcmZvcm0gYW55IFB5dGhvbiBBUEkgY2FsbHMuCisKKy4uIGNmdW5jdGlvbjo6IHZvaWQgUHlfQWRkUGVuZGluZ0NhbGwoIGludCAoKmZ1bmMpKHZvaWQgKiwgdm9pZCAqYXJnKSApCisKKyAgIC4uIGluZGV4Ojogc2luZ2xlOiBQeV9BZGRQZW5kaW5nQ2FsbCgpCisKKyAgIFBvc3QgYSBub3RpZmljYXRpb24gdG8gdGhlIFB5dGhvbiBtYWluIHRocmVhZC4gIElmIHN1Y2Nlc3NmdWwsICpmdW5jKiB3aWxsIGJlCisgICBjYWxsZWQgd2l0aCB0aGUgYXJndW1lbnQgKmFyZyogYXQgdGhlIGVhcmxpZXN0IGNvbnZlbmllbmNlLiAgKmZ1bmMqIHdpbGwgYmUKKyAgIGNhbGxlZCBoYXZpbmcgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIGhlbGQgYW5kIGNhbiB0aHVzIHVzZSB0aGUgZnVsbAorICAgUHl0aG9uIEFQSSBhbmQgY2FuIHRha2UgYW55IGFjdGlvbiBzdWNoIGFzIHNldHRpbmcgb2JqZWN0IGF0dHJpYnV0ZXMgdG8KKyAgIHNpZ25hbCBJTyBjb21wbGV0aW9uLiAgSXQgbXVzdCByZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBzaWduYWxsaW5nIGFuCisgICBleGNlcHRpb24uICBUaGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uIHdvbid0IGJlIGludGVycnVwdGVkIHRvIHBlcmZvcm0gYW5vdGhlcgorICAgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbiByZWN1cnNpdmVseSwgYnV0IGl0IGNhbiBzdGlsbCBiZSBpbnRlcnJ1cHRlZCB0bworICAgc3dpdGNoIHRocmVhZHMgaWYgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIGlzIHJlbGVhc2VkLCBmb3IgZXhhbXBsZSwgaWYgaXQKKyAgIGNhbGxzIGJhY2sgaW50byBQeXRob24gY29kZS4KKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgb24gc3VjY2VzcyBpbiB3aGljaCBjYXNlIHRoZSBub3RpZmljYXRpb24gaGFzIGJlZW4KKyAgIHNjaGVkdWxlZC4gIE90aGVyd2lzZSwgZm9yIGV4YW1wbGUgaWYgdGhlIG5vdGlmaWNhdGlvbiBidWZmZXIgaXMgZnVsbCwgaXQKKyAgIHJldHVybnMgLTEgd2l0aG91dCBzZXR0aW5nIGFueSBleGNlcHRpb24uCisKKyAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLCBiZSBpdCBhIFB5dGhvbiB0aHJlYWQgb3Igc29tZQorICAgb3RoZXIgc3lzdGVtIHRocmVhZC4gIElmIGl0IGlzIGEgUHl0aG9uIHRocmVhZCwgaXQgZG9lc24ndCBtYXR0ZXIgaWYgaXQgaG9sZHMKKyAgIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBvciBub3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCiAKIAogLi4gX3Byb2ZpbGluZzoKQEAgLTg4MSwxMyArOTc0LDE0IEBACiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCA6Y29uc3Q6YFB5VHJhY2VfTElORWAgICAgICAgIHwgQWx3YXlzICpOVUxMKi4gICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IDpjb25zdDpgUHlUcmFjZV9SRVRVUk5gICAgICAgfCBWYWx1ZSBiZWluZyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiAgfAorICAgfCA6Y29uc3Q6YFB5VHJhY2VfUkVUVVJOYCAgICAgIHwgVmFsdWUgYmVpbmcgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciwgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yICpOVUxMKiBpZiBjYXVzZWQgYnkgYW4gZXhjZXB0aW9uLiB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YFB5VHJhY2VfQ19DQUxMYCAgICAgIHwgTmFtZSBvZiBmdW5jdGlvbiBiZWluZyBjYWxsZWQuICAgICAgIHwKKyAgIHwgOmNvbnN0OmBQeVRyYWNlX0NfQ0FMTGAgICAgICB8IEZ1bmN0aW9uIG9iamVjdCBiZWluZyBjYWxsZWQuICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YFB5VHJhY2VfQ19FWENFUFRJT05gIHwgQWx3YXlzICpOVUxMKi4gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgOmNvbnN0OmBQeVRyYWNlX0NfRVhDRVBUSU9OYCB8IEZ1bmN0aW9uIG9iamVjdCBiZWluZyBjYWxsZWQuICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YFB5VHJhY2VfQ19SRVRVUk5gICAgIHwgQWx3YXlzICpOVUxMKi4gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgOmNvbnN0OmBQeVRyYWNlX0NfUkVUVVJOYCAgICB8IEZ1bmN0aW9uIG9iamVjdCBiZWluZyBjYWxsZWQuICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAKQEAgLTkzMiw3ICsxMDI2LDcgQEAKIC4uIGN2YXI6OiBpbnQgUHlUcmFjZV9DX0VYQ0VQVElPTgogCiAgICBUaGUgdmFsdWUgZm9yIHRoZSAqd2hhdCogcGFyYW1ldGVyIHRvIDpjdHlwZTpgUHlfdHJhY2VmdW5jYCBmdW5jdGlvbnMgd2hlbiBhIEMKLSAgIGZ1bmN0aW9uIGhhcyB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgZnVuY3Rpb24gaGFzIHJhaXNlZCBhbiBleGNlcHRpb24uCiAKIAogLi4gY3Zhcjo6IGludCBQeVRyYWNlX0NfUkVUVVJOCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW50cm8ucnN0IGIvRG9jL2MtYXBpL2ludHJvLnJzdAppbmRleCBjNTYwMDBlLi5hMmU0N2Q5IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW50cm8ucnN0CisrKyBiL0RvYy9jLWFwaS9pbnRyby5yc3QKQEAgLTQxLDggKzQxLDggQEAKICAgICNpbmNsdWRlICJQeXRob24uaCIKIAogVGhpcyBpbXBsaWVzIGluY2x1c2lvbiBvZiB0aGUgZm9sbG93aW5nIHN0YW5kYXJkIGhlYWRlcnM6IGBgPHN0ZGlvLmg+YGAsCi1gYDxzdHJpbmcuaD5gYCwgYGA8ZXJybm8uaD5gYCwgYGA8bGltaXRzLmg+YGAsIGFuZCBgYDxzdGRsaWIuaD5gYCAoaWYKLWF2YWlsYWJsZSkuCitgYDxzdHJpbmcuaD5gYCwgYGA8ZXJybm8uaD5gYCwgYGA8bGltaXRzLmg+YGAsIGBgPGFzc2VydC5oPmBgIGFuZCBgYDxzdGRsaWIuaD5gYAorKGlmIGF2YWlsYWJsZSkuCiAKIC4uIG5vdGU6OgogCkBAIC0zNjEsMTUgKzM2MSwxNiBAQAogCiAuLiBpbmRleDo6IHNpbmdsZTogUHlFcnJfT2NjdXJyZWQoKQogCi1Gb3IgQyBwcm9ncmFtbWVycywgaG93ZXZlciwgZXJyb3IgY2hlY2tpbmcgYWx3YXlzIGhhcyB0byBiZSBleHBsaWNpdC4gICBBbGwKLWZ1bmN0aW9ucyBpbiB0aGUgUHl0aG9uL0MgQVBJIGNhbiByYWlzZSBleGNlcHRpb25zLCB1bmxlc3MgYW4gIGV4cGxpY2l0IGNsYWltIGlzCi1tYWRlIG90aGVyd2lzZSBpbiBhIGZ1bmN0aW9uJ3MgZG9jdW1lbnRhdGlvbi4gIEluICBnZW5lcmFsLCB3aGVuIGEgZnVuY3Rpb24KLWVuY291bnRlcnMgYW4gZXJyb3IsIGl0IHNldHMgYW4gZXhjZXB0aW9uLCAgZGlzY2FyZHMgYW55IG9iamVjdCByZWZlcmVuY2VzIHRoYXQKLWl0IG93bnMsIGFuZCByZXR1cm5zIGFuICBlcnJvciBpbmRpY2F0b3IgLS0tIHVzdWFsbHkgKk5VTEwqIG9yIGBgLTFgYC4gIEEgZmV3Ci1mdW5jdGlvbnMgIHJldHVybiBhIEJvb2xlYW4gdHJ1ZS9mYWxzZSByZXN1bHQsIHdpdGggZmFsc2UgaW5kaWNhdGluZyBhbiBlcnJvci4KLVZlcnkgZmV3IGZ1bmN0aW9ucyByZXR1cm4gbm8gZXhwbGljaXQgZXJyb3IgaW5kaWNhdG9yIG9yIGhhdmUgYW4gIGFtYmlndW91cwotcmV0dXJuIHZhbHVlLCBhbmQgcmVxdWlyZSBleHBsaWNpdCB0ZXN0aW5nIGZvciBlcnJvcnMgd2l0aAotOmNmdW5jOmBQeUVycl9PY2N1cnJlZGAuCitGb3IgQyBwcm9ncmFtbWVycywgaG93ZXZlciwgZXJyb3IgY2hlY2tpbmcgYWx3YXlzIGhhcyB0byBiZSBleHBsaWNpdC4gIEFsbAorZnVuY3Rpb25zIGluIHRoZSBQeXRob24vQyBBUEkgY2FuIHJhaXNlIGV4Y2VwdGlvbnMsIHVubGVzcyBhbiBleHBsaWNpdCBjbGFpbSBpcworbWFkZSBvdGhlcndpc2UgaW4gYSBmdW5jdGlvbidzIGRvY3VtZW50YXRpb24uICBJbiBnZW5lcmFsLCB3aGVuIGEgZnVuY3Rpb24KK2VuY291bnRlcnMgYW4gZXJyb3IsIGl0IHNldHMgYW4gZXhjZXB0aW9uLCBkaXNjYXJkcyBhbnkgb2JqZWN0IHJlZmVyZW5jZXMgdGhhdAoraXQgb3ducywgYW5kIHJldHVybnMgYW4gZXJyb3IgaW5kaWNhdG9yLiAgSWYgbm90IGRvY3VtZW50ZWQgb3RoZXJ3aXNlLCB0aGlzCitpbmRpY2F0b3IgaXMgZWl0aGVyICpOVUxMKiBvciBgYC0xYGAsIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdHlwZS4KK0EgZmV3IGZ1bmN0aW9ucyByZXR1cm4gYSBCb29sZWFuIHRydWUvZmFsc2UgcmVzdWx0LCB3aXRoIGZhbHNlIGluZGljYXRpbmcgYW4KK2Vycm9yLiAgVmVyeSBmZXcgZnVuY3Rpb25zIHJldHVybiBubyBleHBsaWNpdCBlcnJvciBpbmRpY2F0b3Igb3IgaGF2ZSBhbgorYW1iaWd1b3VzIHJldHVybiB2YWx1ZSwgYW5kIHJlcXVpcmUgZXhwbGljaXQgdGVzdGluZyBmb3IgZXJyb3JzIHdpdGgKKzpjZnVuYzpgUHlFcnJfT2NjdXJyZWRgLiAgVGhlc2UgZXhjZXB0aW9ucyBhcmUgYWx3YXlzIGV4cGxpY2l0bHkgZG9jdW1lbnRlZC4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBQeUVycl9TZXRTdHJpbmcoKQpAQCAtNTI0LDEyICs1MjUsMTIgQEAKIDptb2Q6YF9fYnVpbHRpbl9fYCwgOm1vZDpgX19tYWluX19gLCA6bW9kOmBzeXNgLCBhbmQgOm1vZDpgZXhjZXB0aW9uc2AuICBJdCBhbHNvCiBpbml0aWFsaXplcyB0aGUgbW9kdWxlIHNlYXJjaCBwYXRoIChgYHN5cy5wYXRoYGApLgogCi0uLiBpbmRleDo6IHNpbmdsZTogUHlTeXNfU2V0QXJndigpCisuLiBpbmRleDo6IHNpbmdsZTogUHlTeXNfU2V0QXJndkV4KCkKIAogOmNmdW5jOmBQeV9Jbml0aWFsaXplYCBkb2VzIG5vdCBzZXQgdGhlICJzY3JpcHQgYXJndW1lbnQgbGlzdCIgIChgYHN5cy5hcmd2YGApLgotSWYgdGhpcyB2YXJpYWJsZSBpcyBuZWVkZWQgYnkgUHl0aG9uIGNvZGUgdGhhdCAgd2lsbCBiZSBleGVjdXRlZCBsYXRlciwgaXQgbXVzdAotYmUgc2V0IGV4cGxpY2l0bHkgd2l0aCBhIGNhbGwgdG8gIGBgUHlTeXNfU2V0QXJndihhcmdjLCBhcmd2KWBgIHN1YnNlcXVlbnQgdG8KLXRoZSBjYWxsIHRvIDpjZnVuYzpgUHlfSW5pdGlhbGl6ZWAuCitJZiB0aGlzIHZhcmlhYmxlIGlzIG5lZWRlZCBieSBQeXRob24gY29kZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgbGF0ZXIsIGl0IG11c3QKK2JlIHNldCBleHBsaWNpdGx5IHdpdGggYSBjYWxsIHRvICBgYFB5U3lzX1NldEFyZ3ZFeChhcmdjLCBhcmd2LCB1cGRhdGVwYXRoKWBgCithZnRlciB0aGUgY2FsbCB0byA6Y2Z1bmM6YFB5X0luaXRpYWxpemVgLgogCiBPbiBtb3N0IHN5c3RlbXMgKGluIHBhcnRpY3VsYXIsIG9uIFVuaXggYW5kIFdpbmRvd3MsIGFsdGhvdWdoIHRoZSBkZXRhaWxzIGFyZQogc2xpZ2h0bHkgZGlmZmVyZW50KSwgOmNmdW5jOmBQeV9Jbml0aWFsaXplYCBjYWxjdWxhdGVzIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGgKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9saXN0LnJzdCBiL0RvYy9jLWFwaS9saXN0LnJzdAppbmRleCAyNDJiNGU2Li5kMjRhYTcyIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbGlzdC5yc3QKKysrIGIvRG9jL2MtYXBpL2xpc3QucnN0CkBAIC00Miw3ICs0Miw3IEBACiAKICAgIC4uIG5vdGU6OgogCi0gICAgICBJZiAqbGVuZ3RoKiBpcyBncmVhdGVyIHRoYW4gemVybywgdGhlIHJldHVybmVkIGxpc3Qgb2JqZWN0J3MgaXRlbXMgYXJlCisgICAgICBJZiAqbGVuKiBpcyBncmVhdGVyIHRoYW4gemVybywgdGhlIHJldHVybmVkIGxpc3Qgb2JqZWN0J3MgaXRlbXMgYXJlCiAgICAgICBzZXQgdG8gYGBOVUxMYGAuICBUaHVzIHlvdSBjYW5ub3QgdXNlIGFic3RyYWN0IEFQSSBmdW5jdGlvbnMgc3VjaCBhcwogICAgICAgOmNmdW5jOmBQeVNlcXVlbmNlX1NldEl0ZW1gICBvciBleHBvc2UgdGhlIG9iamVjdCB0byBQeXRob24gY29kZSBiZWZvcmUKICAgICAgIHNldHRpbmcgYWxsIGl0ZW1zIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCA6Y2Z1bmM6YFB5TGlzdF9TZXRJdGVtYC4KQEAgLTc1LDkgKzc1LDkgQEAKIAogLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TGlzdF9HZXRJdGVtKFB5T2JqZWN0ICpsaXN0LCBQeV9zc2l6ZV90IGluZGV4KQogCi0gICBSZXR1cm4gdGhlIG9iamVjdCBhdCBwb3NpdGlvbiAqcG9zKiBpbiB0aGUgbGlzdCBwb2ludGVkIHRvIGJ5ICpwKi4gIFRoZQorICAgUmV0dXJuIHRoZSBvYmplY3QgYXQgcG9zaXRpb24gKmluZGV4KiBpbiB0aGUgbGlzdCBwb2ludGVkIHRvIGJ5ICpsaXN0Ki4gIFRoZQogICAgcG9zaXRpb24gbXVzdCBiZSBwb3NpdGl2ZSwgaW5kZXhpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBsaXN0IGlzIG5vdAotICAgc3VwcG9ydGVkLiAgSWYgKnBvcyogaXMgb3V0IG9mIGJvdW5kcywgcmV0dXJuICpOVUxMKiBhbmQgc2V0IGFuCisgICBzdXBwb3J0ZWQuICBJZiAqaW5kZXgqIGlzIG91dCBvZiBib3VuZHMsIHJldHVybiAqTlVMTCogYW5kIHNldCBhbgogICAgOmV4YzpgSW5kZXhFcnJvcmAgZXhjZXB0aW9uLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNQpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2xvbmcucnN0IGIvRG9jL2MtYXBpL2xvbmcucnN0CmluZGV4IDllYjlmNjAuLjExZDI5MDggMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9sb25nLnJzdAorKysgYi9Eb2MvYy1hcGkvbG9uZy5yc3QKQEAgLTY1LDYgKzY1LDIyIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIAogCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgdikKKworICAgUmV0dXJuIGEgbmV3IDpjdHlwZTpgUHlMb25nT2JqZWN0YCBvYmplY3Qgd2l0aCBhIHZhbHVlIG9mICp2Kiwgb3IgKk5VTEwqCisgICBvbiBmYWlsdXJlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKworCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21TaXplX3Qoc2l6ZV90IHYpCisKKyAgIFJldHVybiBhIG5ldyA6Y3R5cGU6YFB5TG9uZ09iamVjdGAgb2JqZWN0IHdpdGggYSB2YWx1ZSBvZiAqdiosIG9yICpOVUxMKgorICAgb24gZmFpbHVyZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CisKKwogLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoUFlfTE9OR19MT05HIHYpCiAKICAgIFJldHVybiBhIG5ldyA6Y3R5cGU6YFB5TG9uZ09iamVjdGAgb2JqZWN0IGZyb20gYSBDIDpjdHlwZTpgbG9uZyBsb25nYCwgb3IgKk5VTEwqCkBAIC04Nyw3ICsxMDMsNyBAQAogCiAgICBSZXR1cm4gYSBuZXcgOmN0eXBlOmBQeUxvbmdPYmplY3RgIGJhc2VkIG9uIHRoZSBzdHJpbmcgdmFsdWUgaW4gKnN0ciosIHdoaWNoIGlzCiAgICBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJhZGl4IGluICpiYXNlKi4gIElmICpwZW5kKiBpcyBub24tKk5VTEwqLAotICAgYGAqcGVuZGBgIHdpbGwgcG9pbnQgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiAqc3RyKiB3aGljaCBmb2xsb3dzIHRoZQorICAgKlwqcGVuZCogd2lsbCBwb2ludCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGluICpzdHIqIHdoaWNoIGZvbGxvd3MgdGhlCiAgICByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyLiAgSWYgKmJhc2UqIGlzIGBgMGBgLCB0aGUgcmFkaXggd2lsbCBiZSBkZXRlcm1pbmVkCiAgICBiYXNlZCBvbiB0aGUgbGVhZGluZyBjaGFyYWN0ZXJzIG9mICpzdHIqOiBpZiAqc3RyKiBzdGFydHMgd2l0aCBgYCcweCdgYCBvcgogICAgYGAnMFgnYGAsIHJhZGl4IDE2IHdpbGwgYmUgdXNlZDsgaWYgKnN0ciogc3RhcnRzIHdpdGggYGAnMCdgYCwgcmFkaXggOCB3aWxsIGJlCkBAIC0xMzMsNiArMTQ5LDMyIEBACiAgICBhbmQgYGAtMWBgIHdpbGwgYmUgcmV0dXJuZWQuCiAKIAorLi4gY2Z1bmN0aW9uOjogbG9uZyBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKnB5bG9uZywgaW50ICpvdmVyZmxvdykKKworICAgUmV0dXJuIGEgQyA6Y3R5cGU6YGxvbmdgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZgorICAgKnB5bG9uZyouICBJZiAqcHlsb25nKiBpcyBncmVhdGVyIHRoYW4gOmNvbnN0OmBMT05HX01BWGAgb3IgbGVzcworICAgdGhhbiA6Y29uc3Q6YExPTkdfTUlOYCwgc2V0ICpcKm92ZXJmbG93KiB0byBgYDFgYCBvciBgYC0xYGAsCisgICByZXNwZWN0aXZlbHksIGFuZCByZXR1cm4gYGAtMWBgOyBvdGhlcndpc2UsIHNldCAqXCpvdmVyZmxvdyogdG8KKyAgIGBgMGBgLiAgSWYgYW55IG90aGVyIGV4Y2VwdGlvbiBvY2N1cnMgKGZvciBleGFtcGxlIGEgVHlwZUVycm9yIG9yCisgICBNZW1vcnlFcnJvciksIHRoZW4gYGAtMWBgIHdpbGwgYmUgcmV0dXJuZWQgYW5kICpcKm92ZXJmbG93KiB3aWxsCisgICBiZSBgYDBgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gY2Z1bmN0aW9uOjogUFlfTE9OR19MT05HIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKnB5bG9uZywgaW50ICpvdmVyZmxvdykKKworICAgUmV0dXJuIGEgQyA6Y3R5cGU6YGxvbmcgbG9uZ2AgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mCisgICAqcHlsb25nKi4gIElmICpweWxvbmcqIGlzIGdyZWF0ZXIgdGhhbiA6Y29uc3Q6YFBZX0xMT05HX01BWGAgb3IgbGVzcworICAgdGhhbiA6Y29uc3Q6YFBZX0xMT05HX01JTmAsIHNldCAqXCpvdmVyZmxvdyogdG8gYGAxYGAgb3IgYGAtMWBgLAorICAgcmVzcGVjdGl2ZWx5LCBhbmQgcmV0dXJuIGBgLTFgYDsgb3RoZXJ3aXNlLCBzZXQgKlwqb3ZlcmZsb3cqIHRvCisgICBgYDBgYC4gIElmIGFueSBvdGhlciBleGNlcHRpb24gb2NjdXJzIChmb3IgZXhhbXBsZSBhIFR5cGVFcnJvciBvcgorICAgTWVtb3J5RXJyb3IpLCB0aGVuIGBgLTFgYCB3aWxsIGJlIHJldHVybmVkIGFuZCAqXCpvdmVyZmxvdyogd2lsbAorICAgYmUgYGAwYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIC4uIGNmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlMb25nX0FzU3NpemVfdChQeU9iamVjdCAqcHlsb25nKQogCiAgICAuLiBpbmRleDo6CkBAIC0xNTcsMjMgKzE5OSw0NiBAQAogICAgcmFpc2VkLgogCiAKKy4uIGNmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlMb25nX0FzU3NpemVfdChQeU9iamVjdCAqcHlsb25nKQorCisgICAuLiBpbmRleDo6CisgICAgICBzaW5nbGU6IFBZX1NTSVpFX1RfTUFYCisKKyAgIFJldHVybiBhIDpjdHlwZTpgUHlfc3NpemVfdGAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mICpweWxvbmcqLiAgSWYKKyAgICpweWxvbmcqIGlzIGdyZWF0ZXIgdGhhbiA6Y29uc3Q6YFBZX1NTSVpFX1RfTUFYYCwgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgaXMKKyAgIHJhaXNlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CisKKwogLi4gY2Z1bmN0aW9uOjogUFlfTE9OR19MT05HIFB5TG9uZ19Bc0xvbmdMb25nKFB5T2JqZWN0ICpweWxvbmcpCiAKLSAgIFJldHVybiBhIEMgOmN0eXBlOmBsb25nIGxvbmdgIGZyb20gYSBQeXRob24gbG9uZyBpbnRlZ2VyLiAgSWYgKnB5bG9uZyogY2Fubm90IGJlCi0gICByZXByZXNlbnRlZCBhcyBhIDpjdHlwZTpgbG9uZyBsb25nYCwgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgd2lsbCBiZSByYWlzZWQuCisgICAuLiBpbmRleDo6CisgICAgICBzaW5nbGU6IE92ZXJmbG93RXJyb3IgKGJ1aWx0LWluIGV4Y2VwdGlvbikKKworICAgUmV0dXJuIGEgQyA6Y3R5cGU6YGxvbmcgbG9uZ2AgZnJvbSBhIFB5dGhvbiBsb25nIGludGVnZXIuICBJZgorICAgKnB5bG9uZyogY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGEgOmN0eXBlOmBsb25nIGxvbmdgLCBhbgorICAgOmV4YzpgT3ZlcmZsb3dFcnJvcmAgaXMgcmFpc2VkIGFuZCBgYC0xYGAgaXMgcmV0dXJuZWQuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMgogCiAKIC4uIGNmdW5jdGlvbjo6IHVuc2lnbmVkIFBZX0xPTkdfTE9ORyBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKFB5T2JqZWN0ICpweWxvbmcpCiAKLSAgIFJldHVybiBhIEMgOmN0eXBlOmB1bnNpZ25lZCBsb25nIGxvbmdgIGZyb20gYSBQeXRob24gbG9uZyBpbnRlZ2VyLiBJZiAqcHlsb25nKgotICAgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGFuIDpjdHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYCwgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAKLSAgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSB2YWx1ZSBpcyBwb3NpdGl2ZSwgb3IgYSA6ZXhjOmBUeXBlRXJyb3JgIHdpbGwgYmUgcmFpc2VkIGlmCi0gICB0aGUgdmFsdWUgaXMgbmVnYXRpdmUuCisgICAuLiBpbmRleDo6CisgICAgICBzaW5nbGU6IE92ZXJmbG93RXJyb3IgKGJ1aWx0LWluIGV4Y2VwdGlvbikKKworICAgUmV0dXJuIGEgQyA6Y3R5cGU6YHVuc2lnbmVkIGxvbmcgbG9uZ2AgZnJvbSBhIFB5dGhvbiBsb25nIGludGVnZXIuIElmCisgICAqcHlsb25nKiBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgYW4gOmN0eXBlOmB1bnNpZ25lZCBsb25nIGxvbmdgLCBhbgorICAgOmV4YzpgT3ZlcmZsb3dFcnJvcmAgaXMgcmFpc2VkIGFuZCBgYCh1bnNpZ25lZCBsb25nIGxvbmcpLTFgYCBpcworICAgcmV0dXJuZWQuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgQSBuZWdhdGl2ZSAqcHlsb25nKiBub3cgcmFpc2VzIDpleGM6YE92ZXJmbG93RXJyb3JgLCBub3QKKyAgICAgIDpleGM6YFR5cGVFcnJvcmAuCisKIAogLi4gY2Z1bmN0aW9uOjogdW5zaWduZWQgbG9uZyBQeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrKFB5T2JqZWN0ICppbykKIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL29iamJ1ZmZlci5yc3QgYi9Eb2MvYy1hcGkvb2JqYnVmZmVyLnJzdAppbmRleCAwZjRkY2NmLi45M2Y1ZmYwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvb2JqYnVmZmVyLnJzdAorKysgYi9Eb2MvYy1hcGkvb2JqYnVmZmVyLnJzdApAQCAtMiwxMCArMiwxMCBAQAogCiAuLiBfYWJzdHJhY3QtYnVmZmVyOgogCisKIE9sZCBCdWZmZXIgUHJvdG9jb2wKID09PT09PT09PT09PT09PT09PT0KIAotCiBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBsZWdhY3kgYnVmZmVyIHByb3RvY29sLCB3aGljaCBoYXMgYmVlbiBpbnRyb2R1Y2VkCiBpbiBQeXRob24gMS42LiBJdCBpcyBzdGlsbCBzdXBwb3J0ZWQgYnV0IGRlcHJlY2F0ZWQgaW4gdGhlIFB5dGhvbiAyLnggc2VyaWVzLgogUHl0aG9uIDMuMCBpbnRyb2R1Y2VzIGEgbmV3IGJ1ZmZlciBwcm90b2NvbCB3aGljaCBmaXhlcyB3ZWFrbmVzc2VzIGFuZApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3JlZmxlY3Rpb24ucnN0IGIvRG9jL2MtYXBpL3JlZmxlY3Rpb24ucnN0CmluZGV4IDgyMmM1OTMuLjM5OTZjMWYgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9yZWZsZWN0aW9uLnJzdAorKysgYi9Eb2MvYy1hcGkvcmVmbGVjdGlvbi5yc3QKQEAgLTI5LDYgKzI5LDExIEBACiAgICBjdXJyZW50bHkgZXhlY3V0aW5nLgogCiAKKy4uIGNmdW5jdGlvbjo6IGludCBQeUZyYW1lX0dldExpbmVOdW1iZXIoUHlGcmFtZU9iamVjdCAqZnJhbWUpCisKKyAgIFJldHVybiB0aGUgbGluZSBudW1iZXIgdGhhdCAqZnJhbWUqIGlzIGN1cnJlbnRseSBleGVjdXRpbmcuCisKKwogLi4gY2Z1bmN0aW9uOjogaW50IFB5RXZhbF9HZXRSZXN0cmljdGVkKCkKIAogICAgSWYgdGhlcmUgaXMgYSBjdXJyZW50IGZyYW1lIGFuZCBpdCBpcyBleGVjdXRpbmcgaW4gcmVzdHJpY3RlZCBtb2RlLCByZXR1cm4gdHJ1ZSwKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zdHJpbmcucnN0IGIvRG9jL2MtYXBpL3N0cmluZy5yc3QKaW5kZXggYzdkMjdhMy4uOWI5NTg1OSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3N0cmluZy5yc3QKKysrIGIvRG9jL2MtYXBpL3N0cmluZy5yc3QKQEAgLTc4LDYgKzc4LDggQEAKICAgIC4uICUgVGhlIGRlc2NyaXB0aW9ucyBmb3IgJXpkIGFuZCAlenUgYXJlIHdyb25nLCBidXQgdGhlIHRydXRoIGlzIGNvbXBsaWNhdGVkCiAgICAuLiAlIGJlY2F1c2Ugbm90IGFsbCBjb21waWxlcnMgc3VwcG9ydCB0aGUgJXogd2lkdGggbW9kaWZpZXIgLS0gd2UgZmFrZSBpdAogICAgLi4gJSB3aGVuIG5lY2Vzc2FyeSB2aWEgaW50ZXJwb2xhdGluZyBQWV9GT1JNQVRfU0laRV9ULgorICAgLi4gJSBTaW1pbGFyIGNvbW1lbnRzIGFwcGx5IHRvIHRoZSAlbGwgd2lkdGggbW9kaWZpZXIgYW5kCisgICAuLiAlIFBZX0ZPUk1BVF9MT05HX0xPTkcuCiAgICAuLiAlICV1LCAlbHUsICV6dSBzaG91bGQgaGF2ZSAibmV3IGluIFB5dGhvbiAyLjUiIGJsdXJicy4KIAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMTAwLDYgKzEwMiwxMiBAQAogICAgfCA6YXR0cjpgJWx1YCAgICAgICB8IHVuc2lnbmVkIGxvbmcgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJWx1IilgYC4gICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6YXR0cjpgJWxsZGAgICAgICB8IGxvbmcgbG9uZyAgICAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJWxsZCIpYGAuICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6YXR0cjpgJWxsdWAgICAgICB8IHVuc2lnbmVkICAgICAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICB8IGxvbmcgbG9uZyAgICAgfCBgYHByaW50ZigiJWxsdSIpYGAuICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCA6YXR0cjpgJXpkYCAgICAgICB8IFB5X3NzaXplX3QgICAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJXpkIilgYC4gICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMTI3LDYgKzEzNSwxNCBAQAogICAgQW4gdW5yZWNvZ25pemVkIGZvcm1hdCBjaGFyYWN0ZXIgY2F1c2VzIGFsbCB0aGUgcmVzdCBvZiB0aGUgZm9ybWF0IHN0cmluZyB0byBiZQogICAgY29waWVkIGFzLWlzIHRvIHRoZSByZXN1bHQgc3RyaW5nLCBhbmQgYW55IGV4dHJhIGFyZ3VtZW50cyBkaXNjYXJkZWQuCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYCIlbGxkImAgYW5kIGAiJWxsdSJgIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBvbmx5IGF2YWlsYWJsZQorICAgICAgd2hlbiA6Y29uc3Q6YEhBVkVfTE9OR19MT05HYCBpcyBkZWZpbmVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgU3VwcG9ydCBmb3IgYCIlbGxkImAgYW5kIGAiJWxsdSJgIGFkZGVkLgorCiAKIC4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVN0cmluZ19Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdCBiL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdAppbmRleCA2ZWYzMWQyLi41YmU4OGFjIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvc3RydWN0dXJlcy5yc3QKKysrIGIvRG9jL2MtYXBpL3N0cnVjdHVyZXMucnN0CkBAIC0xMzcsMTIgKzEzNywxMCBAQAogCiAgICBUaGlzIGlzIHRoZSB0eXBpY2FsIGNhbGxpbmcgY29udmVudGlvbiwgd2hlcmUgdGhlIG1ldGhvZHMgaGF2ZSB0aGUgdHlwZQogICAgOmN0eXBlOmBQeUNGdW5jdGlvbmAuIFRoZSBmdW5jdGlvbiBleHBlY3RzIHR3byA6Y3R5cGU6YFB5T2JqZWN0XCpgIHZhbHVlcy4KLSAgIFRoZSBmaXJzdCBvbmUgaXMgdGhlICpzZWxmKiBvYmplY3QgZm9yIG1ldGhvZHM7IGZvciBtb2R1bGUgZnVuY3Rpb25zLCBpdAotICAgaGFzIHRoZSB2YWx1ZSBnaXZlbiB0byA6Y2Z1bmM6YFB5X0luaXRNb2R1bGU0YCAob3IgKk5VTEwqIGlmCi0gICA6Y2Z1bmM6YFB5X0luaXRNb2R1bGVgIHdhcyB1c2VkKS4gIFRoZSBzZWNvbmQgcGFyYW1ldGVyIChvZnRlbiBjYWxsZWQKLSAgICphcmdzKikgaXMgYSB0dXBsZSBvYmplY3QgcmVwcmVzZW50aW5nIGFsbCBhcmd1bWVudHMuIFRoaXMgcGFyYW1ldGVyIGlzCi0gICB0eXBpY2FsbHkgcHJvY2Vzc2VkIHVzaW5nIDpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgb3IKLSAgIDpjZnVuYzpgUHlBcmdfVW5wYWNrVHVwbGVgLgorICAgVGhlIGZpcnN0IG9uZSBpcyB0aGUgKnNlbGYqIG9iamVjdCBmb3IgbWV0aG9kczsgZm9yIG1vZHVsZSBmdW5jdGlvbnMsIGl0IGlzCisgICB0aGUgbW9kdWxlIG9iamVjdC4gIFRoZSBzZWNvbmQgcGFyYW1ldGVyIChvZnRlbiBjYWxsZWQgKmFyZ3MqKSBpcyBhIHR1cGxlCisgICBvYmplY3QgcmVwcmVzZW50aW5nIGFsbCBhcmd1bWVudHMuICBUaGlzIHBhcmFtZXRlciBpcyB0eXBpY2FsbHkgcHJvY2Vzc2VkCisgICB1c2luZyA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIG9yIDpjZnVuYzpgUHlBcmdfVW5wYWNrVHVwbGVgLgogCiAKIC4uIGRhdGE6OiBNRVRIX0tFWVdPUkRTCkBAIC0xNTgsOSArMTU2LDkgQEAKIAogICAgTWV0aG9kcyB3aXRob3V0IHBhcmFtZXRlcnMgZG9uJ3QgbmVlZCB0byBjaGVjayB3aGV0aGVyIGFyZ3VtZW50cyBhcmUgZ2l2ZW4gaWYKICAgIHRoZXkgYXJlIGxpc3RlZCB3aXRoIHRoZSA6Y29uc3Q6YE1FVEhfTk9BUkdTYCBmbGFnLiAgVGhleSBuZWVkIHRvIGJlIG9mIHR5cGUKLSAgIDpjdHlwZTpgUHlDRnVuY3Rpb25gLiAgV2hlbiB1c2VkIHdpdGggb2JqZWN0IG1ldGhvZHMsIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMKLSAgIHR5cGljYWxseSBuYW1lZCBgYHNlbGZgYCBhbmQgd2lsbCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgaW5zdGFuY2UuCi0gICBJbiBhbGwgY2FzZXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgd2lsbCBiZSAqTlVMTCouCisgICA6Y3R5cGU6YFB5Q0Z1bmN0aW9uYC4gIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdHlwaWNhbGx5IG5hbWVkIGBgc2VsZmBgIGFuZAorICAgd2lsbCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2R1bGUgb3Igb2JqZWN0IGluc3RhbmNlLiAgSW4gYWxsIGNhc2VzIHRoZQorICAgc2Vjb25kIHBhcmFtZXRlciB3aWxsIGJlICpOVUxMKi4KIAogCiAuLiBkYXRhOjogTUVUSF9PCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvc3lzLnJzdCBiL0RvYy9jLWFwaS9zeXMucnN0CmluZGV4IGY0NmZiOWEuLjY3ODhiYzkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9zeXMucnN0CisrKyBiL0RvYy9jLWFwaS9zeXMucnN0CkBAIC0xNSwxMyArMTUsNiBAQAogICAgb25lIG9mIHRoZSBzdHJpbmdzIGBgJzxzdGRpbj4nYGAgb3IgYGAnPz8/J2BgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGxvbmcgUHlPU19HZXRMYXN0TW9kaWZpY2F0aW9uVGltZShjaGFyICpmaWxlbmFtZSkKLQotICAgUmV0dXJuIHRoZSB0aW1lIG9mIGxhc3QgbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlICpmaWxlbmFtZSouIFRoZSByZXN1bHQgaXMKLSAgIGVuY29kZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSB0aW1lc3RhbXAgcmV0dXJuZWQgYnkgdGhlIHN0YW5kYXJkIEMgbGlicmFyeQotICAgZnVuY3Rpb24gOmNmdW5jOmB0aW1lYC4KLQotCiAuLiBjZnVuY3Rpb246OiB2b2lkIFB5T1NfQWZ0ZXJGb3JrKCkKIAogICAgRnVuY3Rpb24gdG8gdXBkYXRlIHNvbWUgaW50ZXJuYWwgc3RhdGUgYWZ0ZXIgYSBwcm9jZXNzIGZvcms7IHRoaXMgc2hvdWxkIGJlCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdHlwZW9iai5yc3QgYi9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKaW5kZXggODQ4OWMzNS4uOWFmNGNmYyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3R5cGVvYmoucnN0CisrKyBiL0RvYy9jLWFwaS90eXBlb2JqLnJzdApAQCAtODIwLDcgKzgyMCw5IEBACiAgICBUaGlzIGZpZWxkIGlzIG5vdCBpbmhlcml0ZWQgYnkgc3VidHlwZXMgKGNvbXB1dGVkIGF0dHJpYnV0ZXMgYXJlIGluaGVyaXRlZAogICAgdGhyb3VnaCBhIGRpZmZlcmVudCBtZWNoYW5pc20pLgogCi0gICBEb2NzIGZvciBQeUdldFNldERlZiAoWFhYIGJlbG9uZyBlbHNld2hlcmUpOjoKKyAgIC4uIFhYWCBiZWxvbmdzIGVsc2V3aGVyZQorCisgICBEb2NzIGZvciBQeUdldFNldERlZjo6CiAKICAgICAgIHR5cGVkZWYgUHlPYmplY3QgKigqZ2V0dGVyKShQeU9iamVjdCAqLCB2b2lkICopOwogICAgICAgdHlwZWRlZiBpbnQgKCpzZXR0ZXIpKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIHZvaWQgKik7CkBAIC04NjcsNyArODY5LDcgQEAKIAogICAgICAgUHlPYmplY3QgKiB0cF9kZXNjcl9nZXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICp0eXBlKTsKIAotICAgWFhYIGV4cGxhaW4uCisgICAuLiBYWFggZXhwbGFpbi4KIAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCiAKQEAgLTg4Miw3ICs4ODQsNyBAQAogCiAgICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KIAotICAgWFhYIGV4cGxhaW4uCisgICAuLiBYWFggZXhwbGFpbi4KIAogCiAuLiBjbWVtYmVyOjogbG9uZyBQeVR5cGVPYmplY3QudHBfZGljdG9mZnNldApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3VuaWNvZGUucnN0IGIvRG9jL2MtYXBpL3VuaWNvZGUucnN0CmluZGV4IDAyODgyNzEuLjk2NGQyYzggMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS91bmljb2RlLnJzdAorKysgYi9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKQEAgLTIwOCw3ICsyMDgsNyBAQAogCiAuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zyb21Vbmljb2RlKGNvbnN0IFB5X1VOSUNPREUgKnUsIFB5X3NzaXplX3Qgc2l6ZSkKIAotICAgQ3JlYXRlIGEgVW5pY29kZSBPYmplY3QgZnJvbSB0aGUgUHlfVU5JQ09ERSBidWZmZXIgKnUqIG9mIHRoZSBnaXZlbiBzaXplLiAqdSoKKyAgIENyZWF0ZSBhIFVuaWNvZGUgb2JqZWN0IGZyb20gdGhlIFB5X1VOSUNPREUgYnVmZmVyICp1KiBvZiB0aGUgZ2l2ZW4gc2l6ZS4gKnUqCiAgICBtYXkgYmUgKk5VTEwqIHdoaWNoIGNhdXNlcyB0aGUgY29udGVudHMgdG8gYmUgdW5kZWZpbmVkLiBJdCBpcyB0aGUgdXNlcidzCiAgICByZXNwb25zaWJpbGl0eSB0byBmaWxsIGluIHRoZSBuZWVkZWQgZGF0YS4gIFRoZSBidWZmZXIgaXMgY29waWVkIGludG8gdGhlIG5ldwogICAgb2JqZWN0LiBJZiB0aGUgYnVmZmVyIGlzIG5vdCAqTlVMTCosIHRoZSByZXR1cm4gdmFsdWUgbWlnaHQgYmUgYSBzaGFyZWQgb2JqZWN0LgpAQCAtMjIwLDYgKzIyMCwxMTEgQEAKICAgICAgIGNoYW5nZXMgaW4geW91ciBjb2RlIGZvciBwcm9wZXJseSBzdXBwb3J0aW5nIDY0LWJpdCBzeXN0ZW1zLgogCiAKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoY29uc3QgY2hhciAqdSwgUHlfc3NpemVfdCBzaXplKQorCisgICBDcmVhdGUgYSBVbmljb2RlIG9iamVjdCBmcm9tIHRoZSBjaGFyIGJ1ZmZlciAqdSouICBUaGUgYnl0ZXMgd2lsbCBiZSBpbnRlcnByZXRlZAorICAgYXMgYmVpbmcgVVRGLTggZW5jb2RlZC4gICp1KiBtYXkgYWxzbyBiZSAqTlVMTCogd2hpY2gKKyAgIGNhdXNlcyB0aGUgY29udGVudHMgdG8gYmUgdW5kZWZpbmVkLiBJdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZpbGwgaW4KKyAgIHRoZSBuZWVkZWQgZGF0YS4gIFRoZSBidWZmZXIgaXMgY29waWVkIGludG8gdGhlIG5ldyBvYmplY3QuIElmIHRoZSBidWZmZXIgaXMgbm90CisgICAqTlVMTCosIHRoZSByZXR1cm4gdmFsdWUgbWlnaHQgYmUgYSBzaGFyZWQgb2JqZWN0LiBUaGVyZWZvcmUsIG1vZGlmaWNhdGlvbiBvZgorICAgdGhlIHJlc3VsdGluZyBVbmljb2RlIG9iamVjdCBpcyBvbmx5IGFsbG93ZWQgd2hlbiAqdSogaXMgKk5VTEwqLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKworCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCAqUHlVbmljb2RlX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqdSkKKworICAgQ3JlYXRlIGEgVW5pY29kZSBvYmplY3QgZnJvbSBhbiBVVEYtOCBlbmNvZGVkIG51bGwtdGVybWluYXRlZCBjaGFyIGJ1ZmZlcgorICAgKnUqLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKworCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zyb21Gb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisKKyAgIFRha2UgYSBDIDpjZnVuYzpgcHJpbnRmYFwgLXN0eWxlICpmb3JtYXQqIHN0cmluZyBhbmQgYSB2YXJpYWJsZSBudW1iZXIgb2YKKyAgIGFyZ3VtZW50cywgY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgUHl0aG9uIHVuaWNvZGUgc3RyaW5nIGFuZCByZXR1cm4KKyAgIGEgc3RyaW5nIHdpdGggdGhlIHZhbHVlcyBmb3JtYXR0ZWQgaW50byBpdC4gIFRoZSB2YXJpYWJsZSBhcmd1bWVudHMgbXVzdCBiZSBDCisgICB0eXBlcyBhbmQgbXVzdCBjb3JyZXNwb25kIGV4YWN0bHkgdG8gdGhlIGZvcm1hdCBjaGFyYWN0ZXJzIGluIHRoZSAqZm9ybWF0KgorICAgc3RyaW5nLiAgVGhlIGZvbGxvd2luZyBmb3JtYXQgY2hhcmFjdGVycyBhcmUgYWxsb3dlZDoKKworICAgLi4gJSBUaGUgZGVzY3JpcHRpb25zIGZvciAlemQgYW5kICV6dSBhcmUgd3JvbmcsIGJ1dCB0aGUgdHJ1dGggaXMgY29tcGxpY2F0ZWQKKyAgIC4uICUgYmVjYXVzZSBub3QgYWxsIGNvbXBpbGVycyBzdXBwb3J0IHRoZSAleiB3aWR0aCBtb2RpZmllciAtLSB3ZSBmYWtlIGl0CisgICAuLiAlIHdoZW4gbmVjZXNzYXJ5IHZpYSBpbnRlcnBvbGF0aW5nIFBZX0ZPUk1BVF9TSVpFX1QuCisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRm9ybWF0IENoYXJhY3RlcnMgfCBUeXBlICAgICAgICAgICAgICAgIHwgQ29tbWVudCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgOmF0dHI6YCUlYCAgICAgICAgfCAqbi9hKiAgICAgICAgICAgICAgIHwgVGhlIGxpdGVyYWwgJSBjaGFyYWN0ZXIuICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVjYCAgICAgICAgfCBpbnQgICAgICAgICAgICAgICAgIHwgQSBzaW5nbGUgY2hhcmFjdGVyLCAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgcmVwcmVzZW50ZWQgYXMgYW4gQyBpbnQuICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVkYCAgICAgICAgfCBpbnQgICAgICAgICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVkIilgYC4gICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCV1YCAgICAgICAgfCB1bnNpZ25lZCBpbnQgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiV1IilgYC4gICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVsZGAgICAgICAgfCBsb25nICAgICAgICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVsZCIpYGAuICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVsdWAgICAgICAgfCB1bnNpZ25lZCBsb25nICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVsdSIpYGAuICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCV6ZGAgICAgICAgfCBQeV9zc2l6ZV90ICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiV6ZCIpYGAuICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCV6dWAgICAgICAgfCBzaXplX3QgICAgICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiV6dSIpYGAuICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVpYCAgICAgICAgfCBpbnQgICAgICAgICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVpIilgYC4gICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCV4YCAgICAgICAgfCBpbnQgICAgICAgICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiV4IilgYC4gICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVzYCAgICAgICAgfCBjaGFyXCogICAgICAgICAgICAgIHwgQSBudWxsLXRlcm1pbmF0ZWQgQyBjaGFyYWN0ZXIgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYXJyYXkuICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVwYCAgICAgICAgfCB2b2lkXCogICAgICAgICAgICAgIHwgVGhlIGhleCByZXByZXNlbnRhdGlvbiBvZiBhIEMgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgcG9pbnRlci4gTW9zdGx5IGVxdWl2YWxlbnQgdG8gIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVwIilgYCBleGNlcHQgdGhhdCAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgaXQgaXMgZ3VhcmFudGVlZCB0byBzdGFydCB3aXRoIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGxpdGVyYWwgYGAweGBgIHJlZ2FyZGxlc3MgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgb2Ygd2hhdCB0aGUgcGxhdGZvcm0ncyAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGZgYCB5aWVsZHMuICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVVYCAgICAgICAgfCBQeU9iamVjdFwqICAgICAgICAgIHwgQSB1bmljb2RlIG9iamVjdC4gICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVWYCAgICAgICAgfCBQeU9iamVjdFwqLCBjaGFyIFwqIHwgQSB1bmljb2RlIG9iamVjdCAod2hpY2ggbWF5IGJlIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgKk5VTEwqKSBhbmQgYSBudWxsLXRlcm1pbmF0ZWQgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgQyBjaGFyYWN0ZXIgYXJyYXkgYXMgYSBzZWNvbmQgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgcGFyYW1ldGVyICh3aGljaCB3aWxsIGJlIHVzZWQsIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgaWYgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgKk5VTEwqKS4gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVTYCAgICAgICAgfCBQeU9iamVjdFwqICAgICAgICAgIHwgVGhlIHJlc3VsdCBvZiBjYWxsaW5nICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgOmZ1bmM6YFB5T2JqZWN0X1VuaWNvZGVgLiAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVSYCAgICAgICAgfCBQeU9iamVjdFwqICAgICAgICAgIHwgVGhlIHJlc3VsdCBvZiBjYWxsaW5nICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgOmZ1bmM6YFB5T2JqZWN0X1JlcHJgLiAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgQW4gdW5yZWNvZ25pemVkIGZvcm1hdCBjaGFyYWN0ZXIgY2F1c2VzIGFsbCB0aGUgcmVzdCBvZiB0aGUgZm9ybWF0IHN0cmluZyB0byBiZQorICAgY29waWVkIGFzLWlzIHRvIHRoZSByZXN1bHQgc3RyaW5nLCBhbmQgYW55IGV4dHJhIGFyZ3VtZW50cyBkaXNjYXJkZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgorCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQorCisgICBJZGVudGljYWwgdG8gOmZ1bmM6YFB5VW5pY29kZV9Gcm9tRm9ybWF0YCBleGNlcHQgdGhhdCBpdCB0YWtlcyBleGFjdGx5IHR3bworICAgYXJndW1lbnRzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKworCiAuLiBjZnVuY3Rpb246OiBQeV9VTklDT0RFKiBQeVVuaWNvZGVfQXNVbmljb2RlKFB5T2JqZWN0ICp1bmljb2RlKQogCiAgICBSZXR1cm4gYSByZWFkLW9ubHkgcG9pbnRlciB0byB0aGUgVW5pY29kZSBvYmplY3QncyBpbnRlcm5hbCA6Y3R5cGU6YFB5X1VOSUNPREVgCkBAIC01NzksNyArNjg0LDcgQEAKICAgICpzKi4gIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkgdGhlIGNvZGVjLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzLCBQeV9zc2l6ZV90ICpjb25zdW1lZCkKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzLCBQeV9zc2l6ZV90ICpjb25zdW1lZCkKIAogICAgSWYgKmNvbnN1bWVkKiBpcyAqTlVMTCosIGJlaGF2ZSBsaWtlIDpjZnVuYzpgUHlVbmljb2RlX0RlY29kZVVURjdgLiAgSWYKICAgICpjb25zdW1lZCogaXMgbm90ICpOVUxMKiwgdHJhaWxpbmcgaW5jb21wbGV0ZSBVVEYtNyBiYXNlLTY0IHNlY3Rpb25zIHdpbGwgbm90CmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdXRpbGl0aWVzLnJzdCBiL0RvYy9jLWFwaS91dGlsaXRpZXMucnN0CmluZGV4IDQ5OWE1MTAuLmY0MzkzM2IgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS91dGlsaXRpZXMucnN0CisrKyBiL0RvYy9jLWFwaS91dGlsaXRpZXMucnN0CkBAIC0xOSwzICsxOSw0IEBACiAgICBhcmcucnN0CiAgICBjb252ZXJzaW9uLnJzdAogICAgcmVmbGVjdGlvbi5yc3QKKyAgIGNvZGVjLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdCBiL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKaW5kZXggMWNhMTFjYi4uMjNmN2M4NSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdAorKysgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CkBAIC0xMjEsMTMgKzEyMSwxMyBAQAogCiAuLiBjZnVuY3Rpb246OiBpbnQgUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiAKLSAgIFJlYWQgYW5kIGV4ZWN1dGUgYSBzaW5nbGUgc3RhdGVtZW50IGZyb20gYSBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmFjdGl2ZQotICAgZGV2aWNlIGFjY29yZGluZyB0byB0aGUgKmZsYWdzKiBhcmd1bWVudC4gIElmICpmaWxlbmFtZSogaXMgKk5VTEwqLCBgYCI/Pz8iYGAgaXMKLSAgIHVzZWQgaW5zdGVhZC4gIFRoZSB1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgdXNpbmcgYGBzeXMucHMxYGAgYW5kIGBgc3lzLnBzMmBgLgotICAgUmV0dXJucyBgYDBgYCB3aGVuIHRoZSBpbnB1dCB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LCBgYC0xYGAgaWYgdGhlcmUgd2FzIGFuCi0gICBleGNlcHRpb24sIG9yIGFuIGVycm9yIGNvZGUgZnJvbSB0aGUgOmZpbGU6YGVycmNvZGUuaGAgaW5jbHVkZSBmaWxlIGRpc3RyaWJ1dGVkCi0gICBhcyBwYXJ0IG9mIFB5dGhvbiBpZiB0aGVyZSB3YXMgYSBwYXJzZSBlcnJvci4gIChOb3RlIHRoYXQgOmZpbGU6YGVycmNvZGUuaGAgaXMKLSAgIG5vdCBpbmNsdWRlZCBieSA6ZmlsZTpgUHl0aG9uLmhgLCBzbyBtdXN0IGJlIGluY2x1ZGVkIHNwZWNpZmljYWxseSBpZiBuZWVkZWQuKQorICAgUmVhZCBhbmQgZXhlY3V0ZSBhIHNpbmdsZSBzdGF0ZW1lbnQgZnJvbSBhIGZpbGUgYXNzb2NpYXRlZCB3aXRoIGFuCisgICBpbnRlcmFjdGl2ZSBkZXZpY2UgYWNjb3JkaW5nIHRvIHRoZSAqZmxhZ3MqIGFyZ3VtZW50LiAgVGhlIHVzZXIgd2lsbCBiZQorICAgcHJvbXB0ZWQgdXNpbmcgYGBzeXMucHMxYGAgYW5kIGBgc3lzLnBzMmBgLiAgUmV0dXJucyBgYDBgYCB3aGVuIHRoZSBpbnB1dCB3YXMKKyAgIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSwgYGAtMWBgIGlmIHRoZXJlIHdhcyBhbiBleGNlcHRpb24sIG9yIGFuIGVycm9yIGNvZGUKKyAgIGZyb20gdGhlIDpmaWxlOmBlcnJjb2RlLmhgIGluY2x1ZGUgZmlsZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIFB5dGhvbiBpZgorICAgdGhlcmUgd2FzIGEgcGFyc2UgZXJyb3IuICAoTm90ZSB0aGF0IDpmaWxlOmBlcnJjb2RlLmhgIGlzIG5vdCBpbmNsdWRlZCBieQorICAgOmZpbGU6YFB5dGhvbi5oYCwgc28gbXVzdCBiZSBpbmNsdWRlZCBzcGVjaWZpY2FsbHkgaWYgbmVlZGVkLikKIAogCiAuLiBjZnVuY3Rpb246OiBpbnQgUHlSdW5fSW50ZXJhY3RpdmVMb29wKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKQEAgLTEzNiwxMSArMTM2LDExIEBACiAgICBsZWF2aW5nICpmbGFncyogc2V0IHRvICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsICBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKKy4uIGNmdW5jdGlvbjo6IGludCBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiAKICAgIFJlYWQgYW5kIGV4ZWN1dGUgc3RhdGVtZW50cyBmcm9tIGEgZmlsZSBhc3NvY2lhdGVkIHdpdGggYW4gaW50ZXJhY3RpdmUgZGV2aWNlCi0gICB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIElmICpmaWxlbmFtZSogaXMgKk5VTEwqLCBgYCI/Pz8iYGAgaXMgdXNlZCBpbnN0ZWFkLiAgVGhlCi0gICB1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgdXNpbmcgYGBzeXMucHMxYGAgYW5kIGBgc3lzLnBzMmBgLiAgUmV0dXJucyBgYDBgYCBhdCBFT0YuCisgICB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIFRoZSB1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgdXNpbmcgYGBzeXMucHMxYGAgYW5kCisgICBgYHN5cy5wczJgYC4gIFJldHVybnMgYGAwYGAgYXQgRU9GLgogCiAKIC4uIGNmdW5jdGlvbjo6IHN0cnVjdCBfbm9kZSogUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc3RhcnQpCmRpZmYgLS1naXQgYS9Eb2MvY29uZi5weSBiL0RvYy9jb25mLnB5CmluZGV4IGE4NGY5YzMuLmI1MTRiZmYgMTAwNjQ0Ci0tLSBhL0RvYy9jb25mLnB5CisrKyBiL0RvYy9jb25mLnB5CkBAIC0xMjUsNyArMTI1LDkgQEAKICAgICAoJ3R1dG9yaWFsL2luZGV4JywgJ3R1dG9yaWFsLnRleCcsCiAgICAgICdQeXRob24gVHV0b3JpYWwnLCBfc3RkYXV0aG9yLCAnbWFudWFsJyksCiAgICAgKCd1c2luZy9pbmRleCcsICd1c2luZy50ZXgnLAotICAgICAnVXNpbmcgUHl0aG9uJywgX3N0ZGF1dGhvciwgJ21hbnVhbCcpLAorICAgICAnUHl0aG9uIFNldHVwIGFuZCBVc2FnZScsIF9zdGRhdXRob3IsICdtYW51YWwnKSwKKyAgICAoJ2ZhcS9pbmRleCcsICdmYXEudGV4JywKKyAgICAgJ1B5dGhvbiBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucycsIF9zdGRhdXRob3IsICdtYW51YWwnKSwKICAgICAoJ3doYXRzbmV3LycgKyB2ZXJzaW9uLCAnd2hhdHNuZXcudGV4JywKICAgICAgJ1doYXRcJ3MgTmV3IGluIFB5dGhvbicsICdBLiBNLiBLdWNobGluZycsICdob3d0bycpLAogXQpkaWZmIC0tZ2l0IGEvRG9jL2RhdGEvcmVmY291bnRzLmRhdCBiL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKaW5kZXggOTBhZDJiZi4uMWZjODk2ZiAxMDA2NDQKLS0tIGEvRG9jL2RhdGEvcmVmY291bnRzLmRhdAorKysgYi9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CkBAIC01NSw2ICs1NSw0NSBAQAogUHlCdWZmZXJfTmV3OlB5T2JqZWN0Kjo6KzE6CiBQeUJ1ZmZlcl9OZXc6aW50OnNpemU6OgogCitQeUNhcHN1bGVfR2V0Q29udGV4dDp2b2lkICo6OjoKK1B5Q2Fwc3VsZV9HZXRDb250ZXh0OlB5T2JqZWN0KjpzZWxmOjA6CisKK1B5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yOnZvaWQgKCopKFB5T2JqZWN0ICopOjo6CitQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcjpQeU9iamVjdCo6c2VsZjowOgorCitQeUNhcHN1bGVfR2V0TmFtZTpjb25zdCBjaGFyICo6OjoKK1B5Q2Fwc3VsZV9HZXROYW1lOlB5T2JqZWN0KjpzZWxmOjA6CisKK1B5Q2Fwc3VsZV9HZXRQb2ludGVyOnZvaWQqOjo6CitQeUNhcHN1bGVfR2V0UG9pbnRlcjpQeU9iamVjdCo6c2VsZjowOgorUHlDYXBzdWxlX0dldFBvaW50ZXI6Y29uc3QgY2hhciAqOm5hbWU6OgorCitQeUNhcHN1bGVfSW1wb3J0OnZvaWQgKjo6OgorUHlDYXBzdWxlX0ltcG9ydDpjb25zdCBjaGFyICo6bmFtZTo6CitQeUNhcHN1bGVfSW1wb3J0OmludDpub19ibG9jazo6CisKK1B5Q2Fwc3VsZV9OZXc6UHlPYmplY3QqOjorMToKK1B5Q2Fwc3VsZV9OZXc6dm9pZCo6cG9pbnRlcjo6CitQeUNhcHN1bGVfTmV3OmNvbnN0IGNoYXIgKjpuYW1lOjoKK1B5Q2Fwc3VsZV9OZXc6OnZvaWQgKCogZGVzdHJ1Y3RvcikoUHlPYmplY3QqICk6OgorCitQeUNhcHN1bGVfU2V0Q29udGV4dDppbnQ6OjoKK1B5Q2Fwc3VsZV9TZXRDb250ZXh0OlB5T2JqZWN0KjpzZWxmOjA6CitQeUNhcHN1bGVfU2V0Q29udGV4dDp2b2lkICo6Y29udGV4dDo6CisKK1B5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yOmludDo6OgorUHlDYXBzdWxlX1NldERlc3RydWN0b3I6UHlPYmplY3QqOnNlbGY6MDoKK1B5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yOnZvaWQgKCopKFB5T2JqZWN0ICopOmRlc3RydWN0b3I6OgorCitQeUNhcHN1bGVfU2V0TmFtZTppbnQ6OjoKK1B5Q2Fwc3VsZV9TZXROYW1lOlB5T2JqZWN0KjpzZWxmOjA6CitQeUNhcHN1bGVfU2V0TmFtZTpjb25zdCBjaGFyICo6bmFtZTo6CisKK1B5Q2Fwc3VsZV9TZXRQb2ludGVyOmludDo6OgorUHlDYXBzdWxlX1NldFBvaW50ZXI6UHlPYmplY3QqOnNlbGY6MDoKK1B5Q2Fwc3VsZV9TZXRQb2ludGVyOnZvaWQqOnBvaW50ZXI6OgorCisKIFB5Q09iamVjdF9Bc1ZvaWRQdHI6dm9pZCo6OjoKIFB5Q09iamVjdF9Bc1ZvaWRQdHI6UHlPYmplY3QqOnNlbGY6MDoKIApAQCAtMjQyLDYgKzI4MSwxMiBAQAogUHlFcnJfTmV3RXhjZXB0aW9uOlB5T2JqZWN0KjpiYXNlOjA6CiBQeUVycl9OZXdFeGNlcHRpb246UHlPYmplY3QqOmRpY3Q6MDoKIAorUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYzpQeU9iamVjdCo6OisxOgorUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYzpjaGFyKjpuYW1lOjoKK1B5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M6Y2hhcio6ZG9jOjoKK1B5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M6UHlPYmplY3QqOmJhc2U6MDoKK1B5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M6UHlPYmplY3QqOmRpY3Q6MDoKKwogUHlFcnJfTm9NZW1vcnk6UHlPYmplY3QqOjpudWxsOgogCiBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb246dm9pZDo6OgpAQCAtNTkzLDYgKzYzOCw5IEBACiBQeUxvbmdfQXNMb25nOmxvbmc6OjoKIFB5TG9uZ19Bc0xvbmc6UHlPYmplY3QqOnB5bG9uZzowOgogCitQeUxvbmdfQXNTc2l6ZV90OnNzaXplX3Q6OjoKK1B5TG9uZ19Bc1NzaXplX3Q6UHlPYmplY3QqOnB5bG9uZzowOgorCiBQeUxvbmdfQXNVbnNpZ25lZExvbmc6dW5zaWduZWQgbG9uZzo6OgogUHlMb25nX0FzVW5zaWduZWRMb25nOlB5T2JqZWN0KjpweWxvbmc6MDoKIApAQCAtNjExLDYgKzY1OSwxMiBAQAogUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nOlB5T2JqZWN0Kjo6KzE6CiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc6dW5zaWduZWQgbG9uZyBsb25nOnY6OgogCitQeUxvbmdfRnJvbVNpemVfdDpQeU9iamVjdCo6OisxOgorUHlMb25nX0Zyb21TaXplX3Q6c2l6ZV90OnY6OgorCitQeUxvbmdfRnJvbVNzaXplX3Q6UHlPYmplY3QqOjorMToKK1B5TG9uZ19Gcm9tU3NpemVfdDpzc2l6ZV90OnY6OgorCiBQeUxvbmdfRnJvbVN0cmluZzpQeU9iamVjdCo6OisxOgogUHlMb25nX0Zyb21TdHJpbmc6Y2hhcio6c3RyOjoKIFB5TG9uZ19Gcm9tU3RyaW5nOmNoYXIqKjpwZW5kOjoKQEAgLTg1Myw5ICs5MDcsNiBAQAogUHlOdW1iZXJfWG9yOlB5T2JqZWN0KjpvMTowOgogUHlOdW1iZXJfWG9yOlB5T2JqZWN0KjpvMjowOgogCi1QeU9TX0dldExhc3RNb2RpZmljYXRpb25UaW1lOmxvbmc6OjoKLVB5T1NfR2V0TGFzdE1vZGlmaWNhdGlvblRpbWU6Y2hhcio6ZmlsZW5hbWU6OgotCiBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yOmludDo6OiAKIFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I6UHlPYmplY3QqOm86MDoKIApAQCAtMTQzMSw2ICsxNDgyLDIxIEBACiBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Q6Y29uc3QgY2hhcio6ZW5jb2Rpbmc6OgogUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0OmNvbnN0IGNoYXIqOmVycm9yczo6CiAKK1B5VW5pY29kZV9Gcm9tRm9ybWF0OlB5T2JqZWN0Kjo6KzE6CitQeVVuaWNvZGVfRnJvbUZvcm1hdDpjb25zdCBjaGFyKjpmb3JtYXQ6OgorUHlVbmljb2RlX0Zyb21Gb3JtYXQ6Oi4uLjo6CisKK1B5VW5pY29kZV9Gcm9tRm9ybWF0VjpQeU9iamVjdCo6OisxOgorUHlVbmljb2RlX0Zyb21Gb3JtYXRWOmNvbnN0IGNoYXIqOmZvcm1hdDo6CitQeVVuaWNvZGVfRnJvbUZvcm1hdFY6dmFfbGlzdDp2YXJnczo6CisKK1B5VW5pY29kZV9Gcm9tU3RyaW5nOlB5T2JqZWN0Kjo6KzE6CitQeVVuaWNvZGVfRnJvbVN0cmluZzpjb25zdCBjaGFyKjp1OjoKKworUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplOlB5T2JqZWN0Kjo6KzE6CitQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemU6Y29uc3QgY2hhcio6dTo6CitQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemU6c3NpemVfdDpzaXplOjoKKwogUHlVbmljb2RlX0Zyb21XaWRlQ2hhcjpQeU9iamVjdCo6OisxOgogUHlVbmljb2RlX0Zyb21XaWRlQ2hhcjpjb25zdCB3Y2hhcl90Kjp3OjoKIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXI6aW50OnNpemU6OgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9hcGlyZWYucnN0IGIvRG9jL2Rpc3R1dGlscy9hcGlyZWYucnN0CmluZGV4IDBhODg1OTguLmIyOGEzYWYgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2FwaXJlZi5yc3QKQEAgLTg0NywyMyArODQ3LDYgQEAKIDpjbGFzczpgVW5peENDb21waWxlcmAgdGhhdCBoYW5kbGVzIHRoZSBFTVggcG9ydCBvZiB0aGUgR05VIEMgY29tcGlsZXIgdG8gT1MvMi4KIAogCi06bW9kOmBkaXN0dXRpbHMubXdlcmtzY29tcGlsZXJgIC0tLSBNZXRyb3dlcmtzIENvZGVXYXJyaW9yIHN1cHBvcnQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0uLiBtb2R1bGU6OiBkaXN0dXRpbHMubXdlcmtzY29tcGlsZXIKLSAgIDpzeW5vcHNpczogTWV0cm93ZXJrcyBDb2RlV2FycmlvciBzdXBwb3J0Ci0KLQotQ29udGFpbnMgOmNsYXNzOmBNV2Vya3NDb21waWxlcmAsIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhYnN0cmFjdAotOmNsYXNzOmBDQ29tcGlsZXJgIGNsYXNzIGZvciBNZXRyb1dlcmtzIENvZGVXYXJyaW9yIG9uIHRoZSBwcmUtTWFjIE9TIFgKLU1hY2ludG9zaC4gTmVlZHMgd29yayB0byBzdXBwb3J0IENXIG9uIFdpbmRvd3Mgb3IgTWFjIE9TIFguCi0KLS4uICUgXHN1YnNlY3Rpb257VXRpbGl0eSBtb2R1bGVzfQotLi4gJQotLi4gJSBUaGUgZm9sbG93aW5nIG1vZHVsZXMgYWxsIHByb3ZpZGUgZ2VuZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucy4gVGhleSBoYXZlbid0Ci0uLiAlIGFsbCBiZWVuIGRvY3VtZW50ZWQgeWV0LgotCi0KIDptb2Q6YGRpc3R1dGlscy5hcmNoaXZlX3V0aWxgIC0tLSAgQXJjaGl2aW5nIHV0aWxpdGllcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTkwNSw3ICs4ODgsNyBAQAogLi4gZnVuY3Rpb246OiBtYWtlX3ppcGZpbGUoYmFzZV9uYW1lLCBiYXNlX2RpclssIHZlcmJvc2U9MCwgZHJ5X3J1bj0wXSkKIAogICAgQ3JlYXRlIGEgemlwIGZpbGUgZnJvbSBhbGwgZmlsZXMgaW4gYW5kIHVuZGVyICpiYXNlX2RpciouICBUaGUgb3V0cHV0IHppcCBmaWxlCi0gICB3aWxsIGJlIG5hbWVkICpiYXNlX2RpciogKyA6ZmlsZTpgLnppcGAuICBVc2VzIGVpdGhlciB0aGUgIDptb2Q6YHppcGZpbGVgIFB5dGhvbgorICAgd2lsbCBiZSBuYW1lZCAqYmFzZV9uYW1lKiArIDpmaWxlOmAuemlwYC4gIFVzZXMgZWl0aGVyIHRoZSAgOm1vZDpgemlwZmlsZWAgUHl0aG9uCiAgICBtb2R1bGUgKGlmIGF2YWlsYWJsZSkgb3IgdGhlIEluZm9aSVAgOmZpbGU6YHppcGAgIHV0aWxpdHkgKGlmIGluc3RhbGxlZCBhbmQKICAgIGZvdW5kIG9uIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoKS4gIElmIG5laXRoZXIgIHRvb2wgaXMgYXZhaWxhYmxlLCByYWlzZXMKICAgIDpleGM6YERpc3R1dGlsc0V4ZWNFcnJvcmAuICAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IHppcCBmaWxlLgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0IGIvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CmluZGV4IGYxZGFkNzcuLjhjODNkMTEgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKQEAgLTgwLDcgKzgwLDcgQEAKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiB8IGBgdGFyYGAgICAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgICAgICB8IFwoMykgICAgfAogKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGB6aXBgYCAgICAgfCB6aXAgZmlsZSAoOmZpbGU6YC56aXBgKSAgICAgIHwgXCg0KSAgICB8Cit8IGBgemlwYGAgICAgIHwgemlwIGZpbGUgKDpmaWxlOmAuemlwYCkgICAgICB8ICgyKSwoNCkgfAogKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIHwgYGBycG1gYCAgICAgfCBSUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgXCg1KSAgICB8CiArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwpAQCAtOTAsOSArOTAsMTIgQEAKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiB8IGBgcnBtYGAgICAgIHwgUlBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwoNSkgICAgfAogKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGB3aW5pbnN0YGAgfCBzZWxmLWV4dHJhY3RpbmcgWklQIGZpbGUgZm9yIHwgKDIpLCg0KSB8Cit8IGBgd2luaW5zdGBgIHwgc2VsZi1leHRyYWN0aW5nIFpJUCBmaWxlIGZvciB8IFwoNCkgICAgfAogfCAgICAgICAgICAgICB8IFdpbmRvd3MgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCit8IGBgbXNpYGAgICAgIHwgTWljcm9zb2Z0IEluc3RhbGxlci4gICAgICAgICB8ICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKKwogCiBOb3RlczoKIApAQCAtMTAyLDggKzEwNSw2IEBACiAoMikKICAgIGRlZmF1bHQgb24gV2luZG93cwogCi0gICAqKlwqXCoqKiB0by1kbyEgKipcKlwqKioKLQogKDMpCiAgICByZXF1aXJlcyBleHRlcm5hbCB1dGlsaXRpZXM6IDpwcm9ncmFtOmB0YXJgIGFuZCBwb3NzaWJseSBvbmUgb2YgOnByb2dyYW06YGd6aXBgLAogICAgOnByb2dyYW06YGJ6aXAyYCwgb3IgOnByb2dyYW06YGNvbXByZXNzYApAQCAtMTMzLDYgKzEzNCw4IEBACiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpjb21tYW5kOmBiZGlzdF93aW5pbnN0YCB8IHdpbmluc3QgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDpjb21tYW5kOmBiZGlzdF9tc2lgICAgICB8IG1zaSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZ2l2ZSBkZXRhaWxzIG9uIHRoZSBpbmRpdmlkdWFsIDpjb21tYW5kOmBiZGlzdF9cKmAKIGNvbW1hbmRzLgpAQCAtMjM4LDcgKzI0MSw4IEBACiBjb25maWd1cmF0aW9uIGZpbGUsIDpmaWxlOmBzZXR1cC5jZmdgXCAtLS1zZWUgc2VjdGlvbiA6cmVmOmBzZXR1cC1jb25maWdgLiAgSWYKIHlvdSBkaXN0cmlidXRlIG9yIHBhY2thZ2UgbWFueSBQeXRob24gbW9kdWxlIGRpc3RyaWJ1dGlvbnMsIHlvdSBtaWdodCB3YW50IHRvCiBwdXQgb3B0aW9ucyB0aGF0IGFwcGx5IHRvIGFsbCBvZiB0aGVtIGluIHlvdXIgcGVyc29uYWwgRGlzdHV0aWxzIGNvbmZpZ3VyYXRpb24KLWZpbGUgKDpmaWxlOmB+Ly5weWRpc3R1dGlscy5jZmdgKS4KK2ZpbGUgKDpmaWxlOmB+Ly5weWRpc3R1dGlscy5jZmdgKS4gIElmIHlvdSB3YW50IHRvIHRlbXBvcmFyaWx5IGRpc2FibGUKK3RoaXMgZmlsZSwgeW91IGNhbiBwYXNzIHRoZSAtLW5vLXVzZXItY2ZnIG9wdGlvbiB0byBzZXR1cC5weS4KIAogVGhlcmUgYXJlIHRocmVlIHN0ZXBzIHRvIGJ1aWxkaW5nIGEgYmluYXJ5IFJQTSBwYWNrYWdlLCBhbGwgb2Ygd2hpY2ggYXJlCiBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIERpc3R1dGlsczoKQEAgLTMxOCw3ICszMjIsNyBAQAogb3B0aW9uLgogCiBCeSBkZWZhdWx0IHRoZSBpbnN0YWxsZXIgd2lsbCBkaXNwbGF5IHRoZSBjb29sICJQeXRob24gUG93ZXJlZCIgbG9nbyB3aGVuIGl0IGlzCi1ydW4sIGJ1dCB5b3UgY2FuIGFsc28gc3VwcGx5IHlvdXIgb3duIDE1MngxNjEgYml0bWFwIHdoaWNoIG11c3QgYmUgYSBXaW5kb3dzCitydW4sIGJ1dCB5b3UgY2FuIGFsc28gc3VwcGx5IHlvdXIgb3duIDE1MngyNjEgYml0bWFwIHdoaWNoIG11c3QgYmUgYSBXaW5kb3dzCiA6ZmlsZTpgLmJtcGAgZmlsZSB3aXRoIHRoZSA6b3B0aW9uOmAtLWJpdG1hcGAgb3B0aW9uLgogCiBUaGUgaW5zdGFsbGVyIHdpbGwgYWxzbyBkaXNwbGF5IGEgbGFyZ2UgdGl0bGUgb24gdGhlIGRlc2t0b3AgYmFja2dyb3VuZCB3aW5kb3cKQEAgLTM1NCw3ICszNTgsNyBAQAogCiBUbyBjcm9zcy1jb21waWxlLCB5b3UgbXVzdCBkb3dubG9hZCB0aGUgUHl0aG9uIHNvdXJjZSBjb2RlIGFuZCBjcm9zcy1jb21waWxlCiBQeXRob24gaXRzZWxmIGZvciB0aGUgcGxhdGZvcm0geW91IGFyZSB0YXJnZXR0aW5nIC0gaXQgaXMgbm90IHBvc3NpYmxlIGZyb20gYQotYmluYXJ5IGluc3RhbGx0aW9uIG9mIFB5dGhvbiAoYXMgdGhlIC5saWIgZXRjIGZpbGUgZm9yIG90aGVyIHBsYXRmb3JtcyBhcmUKK2JpbmFyeSBpbnN0YWxsYXRpb24gb2YgUHl0aG9uIChhcyB0aGUgLmxpYiBldGMgZmlsZSBmb3Igb3RoZXIgcGxhdGZvcm1zIGFyZQogbm90IGluY2x1ZGVkLikgIEluIHByYWN0aWNlLCB0aGlzIG1lYW5zIHRoZSB1c2VyIG9mIGEgMzIgYml0IG9wZXJhdGluZwogc3lzdGVtIHdpbGwgbmVlZCB0byB1c2UgVmlzdWFsIFN0dWRpbyAyMDA4IHRvIG9wZW4gdGhlCiA6ZmlsZTpgUENCdWlsZC9QQ2J1aWxkLnNsbmAgc29sdXRpb24gaW4gdGhlIFB5dGhvbiBzb3VyY2UgdHJlZSBhbmQgYnVpbGQgdGhlCkBAIC0zNzEsNyArMzc1LDcgQEAKIFRoZSBQb3N0aW5zdGFsbGF0aW9uIHNjcmlwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMywgYSBwb3N0aW5zdGFsbGF0aW9uIHNjcmlwdCBjYW4gYmUgc3BlY2lmaWVkIHdoaWNoIHRoZQorU3RhcnRpbmcgd2l0aCBQeXRob24gMi4zLCBhIHBvc3RpbnN0YWxsYXRpb24gc2NyaXB0IGNhbiBiZSBzcGVjaWZpZWQgd2l0aCB0aGUKIDpvcHRpb246YC0taW5zdGFsbC1zY3JpcHRgIG9wdGlvbi4gIFRoZSBiYXNlbmFtZSBvZiB0aGUgc2NyaXB0IG11c3QgYmUKIHNwZWNpZmllZCwgYW5kIHRoZSBzY3JpcHQgZmlsZW5hbWUgbXVzdCBhbHNvIGJlIGxpc3RlZCBpbiB0aGUgc2NyaXB0cyBhcmd1bWVudAogdG8gdGhlIHNldHVwIGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9jb21tYW5kcmVmLnJzdCBiL0RvYy9kaXN0dXRpbHMvY29tbWFuZHJlZi5yc3QKaW5kZXggZmJlNDBkZS4uNzI4Mjk2MSAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9jb21tYW5kcmVmLnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2NvbW1hbmRyZWYucnN0CkBAIC00OCw1MCArNDgsNiBAQAogLi4gJSBcbGFiZWx7Y2xlYW4tY21kfQogCiAKLS4uIF9zZGlzdC1jbWQ6Ci0KLUNyZWF0aW5nIGEgc291cmNlIGRpc3RyaWJ1dGlvbjogdGhlIDpjb21tYW5kOmBzZGlzdGAgY29tbWFuZAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSoqXCpcKioqIGZyYWdtZW50IG1vdmVkIGRvd24gZnJvbSBhYm92ZTogbmVlZHMgY29udGV4dCEgKipcKlwqKioKLQotVGhlIG1hbmlmZXN0IHRlbXBsYXRlIGNvbW1hbmRzIGFyZToKLQotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IENvbW1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCA6Y29tbWFuZDpgaW5jbHVkZSBwYXQxIHBhdDIgLi4uYCAgICAgICAgICB8IGluY2x1ZGUgYWxsIGZpbGVzIG1hdGNoaW5nIGFueSBvZiB0aGUgbGlzdGVkICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGF0dGVybnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29tbWFuZDpgZXhjbHVkZSBwYXQxIHBhdDIgLi4uYCAgICAgICAgICB8IGV4Y2x1ZGUgYWxsIGZpbGVzIG1hdGNoaW5nIGFueSBvZiB0aGUgbGlzdGVkICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGF0dGVybnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29tbWFuZDpgcmVjdXJzaXZlLWluY2x1ZGUgZGlyIHBhdDEgcGF0MiB8IGluY2x1ZGUgYWxsIGZpbGVzIHVuZGVyICpkaXIqIG1hdGNoaW5nIGFueSBvZiB8Ci18IC4uLmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGxpc3RlZCBwYXR0ZXJucyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29tbWFuZDpgcmVjdXJzaXZlLWV4Y2x1ZGUgZGlyIHBhdDEgcGF0MiB8IGV4Y2x1ZGUgYWxsIGZpbGVzIHVuZGVyICpkaXIqIG1hdGNoaW5nIGFueSBvZiB8Ci18IC4uLmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGxpc3RlZCBwYXR0ZXJucyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29tbWFuZDpgZ2xvYmFsLWluY2x1ZGUgcGF0MSBwYXQyIC4uLmAgICB8IGluY2x1ZGUgYWxsIGZpbGVzIGFueXdoZXJlIGluIHRoZSBzb3VyY2UgdHJlZSB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbWF0Y2hpbmcgLS0tICYgYW55IG9mIHRoZSBsaXN0ZWQgcGF0dGVybnMgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29tbWFuZDpgZ2xvYmFsLWV4Y2x1ZGUgcGF0MSBwYXQyIC4uLmAgICB8IGV4Y2x1ZGUgYWxsIGZpbGVzIGFueXdoZXJlIGluIHRoZSBzb3VyY2UgdHJlZSB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbWF0Y2hpbmcgLS0tICYgYW55IG9mIHRoZSBsaXN0ZWQgcGF0dGVybnMgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29tbWFuZDpgcHJ1bmUgZGlyYCAgICAgICAgICAgICAgICAgICAgICB8IGV4Y2x1ZGUgYWxsIGZpbGVzIHVuZGVyICpkaXIqICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbW1hbmQ6YGdyYWZ0IGRpcmAgICAgICAgICAgICAgICAgICAgICAgfCBpbmNsdWRlIGFsbCBmaWxlcyB1bmRlciAqZGlyKiAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLVRoZSBwYXR0ZXJucyBoZXJlIGFyZSBVbml4LXN0eWxlICJnbG9iIiBwYXR0ZXJuczogYGAqYGAgbWF0Y2hlcyBhbnkgc2VxdWVuY2Ugb2YKLXJlZ3VsYXIgZmlsZW5hbWUgY2hhcmFjdGVycywgYGA/YGAgbWF0Y2hlcyBhbnkgc2luZ2xlIHJlZ3VsYXIgZmlsZW5hbWUKLWNoYXJhY3RlciwgYW5kIGBgW3JhbmdlXWBgIG1hdGNoZXMgYW55IG9mIHRoZSBjaGFyYWN0ZXJzIGluICpyYW5nZSogKGUuZy4sCi1gYGEtemBgLCBgYGEtekEtWmBgLCBgYGEtZjAtOV8uYGApLiAgVGhlIGRlZmluaXRpb24gb2YgInJlZ3VsYXIgZmlsZW5hbWUKLWNoYXJhY3RlciIgaXMgcGxhdGZvcm0tc3BlY2lmaWM6IG9uIFVuaXggaXQgaXMgYW55dGhpbmcgZXhjZXB0IHNsYXNoOyBvbiBXaW5kb3dzCi1hbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIG9yIGNvbG9uLgotCi0qKlwqXCoqKiBXaW5kb3dzIHN1cHBvcnQgbm90IHRoZXJlIHlldCAqKlwqXCoqKgotCiAuLiAlIFxzZWN0aW9ue0NyZWF0aW5nIGEgYnVpbHQgZGlzdHJpYnV0aW9uOiB0aGUKIC4uICUgXHByb3RlY3RcY29tbWFuZHtiZGlzdH0gY29tbWFuZCBmYW1pbHl9CiAuLiAlIFxsYWJlbHtiZGlzdC1jbWRzfQpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXgucnN0IGIvRG9jL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXgucnN0CmluZGV4IDkxMjI0OGUuLjE0OTgzOTQgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvcGFja2FnZWluZGV4LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5yc3QKQEAgLTgsMTcgKzgsMTcgQEAKIHBhY2thZ2VkIHdpdGggZGlzdHV0aWxzLiBUaGUgZGlzdHV0aWxzIGNvbW1hbmQgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBpcyB1c2VkIHRvCiBzdWJtaXQgeW91ciBkaXN0cmlidXRpb24ncyBtZXRhLWRhdGEgdG8gdGhlIGluZGV4LiBJdCBpcyBpbnZva2VkIGFzIGZvbGxvd3M6OgogCi0gICBweXRob24gc2V0dXAucHkgcmVnaXN0ZXIKKyAgICBweXRob24gc2V0dXAucHkgcmVnaXN0ZXIKIAogRGlzdHV0aWxzIHdpbGwgcmVzcG9uZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvbXB0OjoKIAotICAgcnVubmluZyByZWdpc3RlcgotICAgV2UgbmVlZCB0byBrbm93IHdobyB5b3UgYXJlLCBzbyBwbGVhc2UgY2hvb3NlIGVpdGhlcjoKLSAgICAxLiB1c2UgeW91ciBleGlzdGluZyBsb2dpbiwKLSAgICAyLiByZWdpc3RlciBhcyBhIG5ldyB1c2VyLAotICAgIDMuIGhhdmUgdGhlIHNlcnZlciBnZW5lcmF0ZSBhIG5ldyBwYXNzd29yZCBmb3IgeW91IChhbmQgZW1haWwgaXQgdG8geW91KSwgb3IKLSAgICA0LiBxdWl0Ci0gICBZb3VyIHNlbGVjdGlvbiBbZGVmYXVsdCAxXToKKyAgICBydW5uaW5nIHJlZ2lzdGVyCisgICAgV2UgbmVlZCB0byBrbm93IHdobyB5b3UgYXJlLCBzbyBwbGVhc2UgY2hvb3NlIGVpdGhlcjoKKyAgICAgICAgMS4gdXNlIHlvdXIgZXhpc3RpbmcgbG9naW4sCisgICAgICAgIDIuIHJlZ2lzdGVyIGFzIGEgbmV3IHVzZXIsCisgICAgICAgIDMuIGhhdmUgdGhlIHNlcnZlciBnZW5lcmF0ZSBhIG5ldyBwYXNzd29yZCBmb3IgeW91IChhbmQgZW1haWwgaXQgdG8geW91KSwgb3IKKyAgICAgICAgNC4gcXVpdAorICAgIFlvdXIgc2VsZWN0aW9uIFtkZWZhdWx0IDFdOgogCiBOb3RlOiBpZiB5b3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgc2F2ZWQgbG9jYWxseSwgeW91IHdpbGwgbm90IHNlZSB0aGlzCiBtZW51LgpAQCAtNTUsMzkgKzU1LDUwIEBACiAKIFRoZSBmb3JtYXQgb2YgdGhlIDpmaWxlOmAucHlwaXJjYCBmaWxlIGlzIGFzIGZvbGxvd3M6OgogCi0gICBbZGlzdHV0aWxzXQotICAgaW5kZXgtc2VydmVycyA9Ci0gICAgIHB5cGkKKyAgICBbZGlzdHV0aWxzXQorICAgIGluZGV4LXNlcnZlcnMgPQorICAgICAgICBweXBpCiAKLSAgIFtweXBpXQotICAgcmVwb3NpdG9yeTogPHJlcG9zaXRvcnktdXJsPgotICAgdXNlcm5hbWU6IDx1c2VybmFtZT4KLSAgIHBhc3N3b3JkOiA8cGFzc3dvcmQ+CisgICAgW3B5cGldCisgICAgcmVwb3NpdG9yeTogPHJlcG9zaXRvcnktdXJsPgorICAgIHVzZXJuYW1lOiA8dXNlcm5hbWU+CisgICAgcGFzc3dvcmQ6IDxwYXNzd29yZD4KIAotKnJlcG9zaXRvcnkqIGNhbiBiZSBvbWl0dGVkIGFuZCBkZWZhdWx0cyB0byBgYGh0dHA6Ly93d3cucHl0aG9uLm9yZy9weXBpYGAuCitUaGUgKmRpc3R1dGlscyogc2VjdGlvbiBkZWZpbmVzIGEgKmluZGV4LXNlcnZlcnMqIHZhcmlhYmxlIHRoYXQgbGlzdHMgdGhlCituYW1lIG9mIGFsbCBzZWN0aW9ucyBkZXNjcmliaW5nIGEgcmVwb3NpdG9yeS4KIAotSWYgeW91IHdhbnQgdG8gZGVmaW5lIGFub3RoZXIgc2VydmVyIGEgbmV3IHNlY3Rpb24gY2FuIGJlIGNyZWF0ZWQ6OgorRWFjaCBzZWN0aW9uIGRlc2NyaWJpbmcgYSByZXBvc2l0b3J5IGRlZmluZXMgdGhyZWUgdmFyaWFibGVzOgogCi0gICBbZGlzdHV0aWxzXQotICAgaW5kZXgtc2VydmVycyA9Ci0gICAgIHB5cGkKLSAgICAgb3RoZXIKKy0gKnJlcG9zaXRvcnkqLCB0aGF0IGRlZmluZXMgdGhlIHVybCBvZiB0aGUgUHlQSSBzZXJ2ZXIuIERlZmF1bHRzIHRvCisgICAgYGBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHlwaWBgLgorLSAqdXNlcm5hbWUqLCB3aGljaCBpcyB0aGUgcmVnaXN0ZXJlZCB1c2VybmFtZSBvbiB0aGUgUHlQSSBzZXJ2ZXIuCistICpwYXNzd29yZCosIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZS4gSWYgb21pdHRlZCB0aGUgdXNlcgorICAgIHdpbGwgYmUgcHJvbXB0IHRvIHR5cGUgaXQgd2hlbiBuZWVkZWQuCiAKLSAgIFtweXBpXQotICAgcmVwb3NpdG9yeTogPHJlcG9zaXRvcnktdXJsPgotICAgdXNlcm5hbWU6IDx1c2VybmFtZT4KLSAgIHBhc3N3b3JkOiA8cGFzc3dvcmQ+CitJZiB5b3Ugd2FudCB0byBkZWZpbmUgYW5vdGhlciBzZXJ2ZXIgYSBuZXcgc2VjdGlvbiBjYW4gYmUgY3JlYXRlZCBhbmQKK2xpc3RlZCBpbiB0aGUgKmluZGV4LXNlcnZlcnMqIHZhcmlhYmxlOjoKIAotICAgW290aGVyXQotICAgcmVwb3NpdG9yeTogaHR0cDovL2V4YW1wbGUuY29tL3B5cGkKLSAgIHVzZXJuYW1lOiA8dXNlcm5hbWU+Ci0gICBwYXNzd29yZDogPHBhc3N3b3JkPgorICAgIFtkaXN0dXRpbHNdCisgICAgaW5kZXgtc2VydmVycyA9CisgICAgICAgIHB5cGkKKyAgICAgICAgb3RoZXIKIAotVGhlIGNvbW1hbmQgY2FuIHRoZW4gYmUgY2FsbGVkIHdpdGggdGhlIC1yIG9wdGlvbjo6CisgICAgW3B5cGldCisgICAgcmVwb3NpdG9yeTogPHJlcG9zaXRvcnktdXJsPgorICAgIHVzZXJuYW1lOiA8dXNlcm5hbWU+CisgICAgcGFzc3dvcmQ6IDxwYXNzd29yZD4KIAotICAgcHl0aG9uIHNldHVwLnB5IHJlZ2lzdGVyIC1yIGh0dHA6Ly9leGFtcGxlLmNvbS9weXBpCisgICAgW290aGVyXQorICAgIHJlcG9zaXRvcnk6IGh0dHA6Ly9leGFtcGxlLmNvbS9weXBpCisgICAgdXNlcm5hbWU6IDx1c2VybmFtZT4KKyAgICBwYXNzd29yZDogPHBhc3N3b3JkPgogCi1PciBldmVuIHdpdGggdGhlIHNlY3Rpb24gbmFtZTo6Cis6Y29tbWFuZDpgcmVnaXN0ZXJgIGNhbiB0aGVuIGJlIGNhbGxlZCB3aXRoIHRoZSAtciBvcHRpb24gdG8gcG9pbnQgdGhlCityZXBvc2l0b3J5IHRvIHdvcmsgd2l0aDo6CiAKLSAgIHB5dGhvbiBzZXR1cC5weSByZWdpc3RlciAtciBvdGhlcgorICAgIHB5dGhvbiBzZXR1cC5weSByZWdpc3RlciAtciBodHRwOi8vZXhhbXBsZS5jb20vcHlwaQogCitGb3IgY29udmVuaWVuY2UsIHRoZSBuYW1lIG9mIHRoZSBzZWN0aW9uIHRoYXQgZGVzY3JpYmVzIHRoZSByZXBvc2l0b3J5CittYXkgYWxzbyBiZSB1c2VkOjoKKworICAgIHB5dGhvbiBzZXR1cC5weSByZWdpc3RlciAtciBvdGhlcgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5yc3QgYi9Eb2MvZGlzdHV0aWxzL3NldHVwc2NyaXB0LnJzdAppbmRleCBiNjNlMjA5Li5lNDU3OTE4IDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL3NldHVwc2NyaXB0LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL3NldHVwc2NyaXB0LnJzdApAQCAtMTksMTggKzE5LDE4IEBACiBkaXN0cmlidXRpb25zLiAgVGhlIERpc3R1dGlscycgb3duIHNldHVwIHNjcmlwdCwgc2hvd24gaGVyZSwgaXMgdXNlZCB0byBpbnN0YWxsCiB0aGUgcGFja2FnZSBpbnRvIFB5dGhvbiAxLjUuMi4pIDo6CiAKLSAgICMhL3Vzci9iaW4vZW52IHB5dGhvbgorICAgICMhL3Vzci9iaW4vZW52IHB5dGhvbgogCi0gICBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAorICAgIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCiAKLSAgIHNldHVwKG5hbWU9J0Rpc3R1dGlscycsCi0gICAgICAgICB2ZXJzaW9uPScxLjAnLAotICAgICAgICAgZGVzY3JpcHRpb249J1B5dGhvbiBEaXN0cmlidXRpb24gVXRpbGl0aWVzJywKLSAgICAgICAgIGF1dGhvcj0nR3JlZyBXYXJkJywKLSAgICAgICAgIGF1dGhvcl9lbWFpbD0nZ3dhcmRAcHl0aG9uLm5ldCcsCi0gICAgICAgICB1cmw9J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9zaWdzL2Rpc3R1dGlscy1zaWcvJywKLSAgICAgICAgIHBhY2thZ2VzPVsnZGlzdHV0aWxzJywgJ2Rpc3R1dGlscy5jb21tYW5kJ10sCi0gICAgICAgICkKKyAgICBzZXR1cChuYW1lPSdEaXN0dXRpbHMnLAorICAgICAgICAgIHZlcnNpb249JzEuMCcsCisgICAgICAgICAgZGVzY3JpcHRpb249J1B5dGhvbiBEaXN0cmlidXRpb24gVXRpbGl0aWVzJywKKyAgICAgICAgICBhdXRob3I9J0dyZWcgV2FyZCcsCisgICAgICAgICAgYXV0aG9yX2VtYWlsPSdnd2FyZEBweXRob24ubmV0JywKKyAgICAgICAgICB1cmw9J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9zaWdzL2Rpc3R1dGlscy1zaWcvJywKKyAgICAgICAgICBwYWNrYWdlcz1bJ2Rpc3R1dGlscycsICdkaXN0dXRpbHMuY29tbWFuZCddLAorICAgICAgICAgKQogCiBUaGVyZSBhcmUgb25seSB0d28gZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGlzIGFuZCB0aGUgdHJpdmlhbCBvbmUtZmlsZQogZGlzdHJpYnV0aW9uIHByZXNlbnRlZCBpbiBzZWN0aW9uIDpyZWY6YGRpc3R1dGlscy1zaW1wbGUtZXhhbXBsZWA6IG1vcmUgbWV0YWRhdGEsIGFuZCB0aGUKQEAgLTUzLDggKzUzLDggQEAKIDpmdW5jOmBvcy5saXN0ZGlyYCB0byBzcGVjaWZ5IGZpbGVzLCB5b3Ugc2hvdWxkIGJlIGNhcmVmdWwgdG8gd3JpdGUgcG9ydGFibGUKIGNvZGUgaW5zdGVhZCBvZiBoYXJkY29kaW5nIHBhdGggc2VwYXJhdG9yczo6CiAKLSAgIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oJ215ZGlyJywgJ3N1YmRpcicsICcqLmh0bWwnKSkKLSAgIG9zLmxpc3RkaXIob3MucGF0aC5qb2luKCdteWRpcicsICdzdWJkaXInKSkKKyAgICBnbG9iLmdsb2Iob3MucGF0aC5qb2luKCdteWRpcicsICdzdWJkaXInLCAnKi5odG1sJykpCisgICAgb3MubGlzdGRpcihvcy5wYXRoLmpvaW4oJ215ZGlyJywgJ3N1YmRpcicpKQogCiAKIC4uIF9saXN0aW5nLXBhY2thZ2VzOgpAQCAtODEsNyArODEsNyBAQAogcGFja2FnZSBhdCBhbGwpIGFyZSBpbiA6ZmlsZTpgbGliYCwgbW9kdWxlcyBpbiB0aGUgOm1vZDpgZm9vYCBwYWNrYWdlIGFyZSBpbgogOmZpbGU6YGxpYi9mb29gLCBhbmQgc28gZm9ydGguICBUaGVuIHlvdSB3b3VsZCBwdXQgOjoKIAotICAgcGFja2FnZV9kaXIgPSB7Jyc6ICdsaWInfQorICAgIHBhY2thZ2VfZGlyID0geycnOiAnbGliJ30KIAogaW4geW91ciBzZXR1cCBzY3JpcHQuICBUaGUga2V5cyB0byB0aGlzIGRpY3Rpb25hcnkgYXJlIHBhY2thZ2UgbmFtZXMsIGFuZCBhbgogZW1wdHkgcGFja2FnZSBuYW1lIHN0YW5kcyBmb3IgdGhlIHJvb3QgcGFja2FnZS4gIFRoZSB2YWx1ZXMgYXJlIGRpcmVjdG9yeSBuYW1lcwpAQCAtOTIsNyArOTIsNyBAQAogOmZpbGU6YGxpYmAsIHRoZSA6bW9kOmBmb28uYmFyYCBwYWNrYWdlIGluIDpmaWxlOmBsaWIvYmFyYCwgZXRjLiAgVGhpcyB3b3VsZCBiZQogd3JpdHRlbiBpbiB0aGUgc2V0dXAgc2NyaXB0IGFzIDo6CiAKLSAgIHBhY2thZ2VfZGlyID0geydmb28nOiAnbGliJ30KKyAgICBwYWNrYWdlX2RpciA9IHsnZm9vJzogJ2xpYid9CiAKIEEgYGBwYWNrYWdlOiBkaXJgYCBlbnRyeSBpbiB0aGUgOm9wdGlvbjpgcGFja2FnZV9kaXJgIGRpY3Rpb25hcnkgaW1wbGljaXRseQogYXBwbGllcyB0byBhbGwgcGFja2FnZXMgYmVsb3cgKnBhY2thZ2UqLCBzbyB0aGUgOm1vZDpgZm9vLmJhcmAgY2FzZSBpcwpAQCAtMTE0LDcgKzExNCw3IEBACiAicm9vdCBwYWNrYWdlIiAoaS5lLiwgbm8gcGFja2FnZSBhdCBhbGwpLiAgVGhpcyBzaW1wbGVzdCBjYXNlIHdhcyBzaG93biBpbgogc2VjdGlvbiA6cmVmOmBkaXN0dXRpbHMtc2ltcGxlLWV4YW1wbGVgOyBoZXJlIGlzIGEgc2xpZ2h0bHkgbW9yZSBpbnZvbHZlZCBleGFtcGxlOjoKIAotICAgcHlfbW9kdWxlcyA9IFsnbW9kMScsICdwa2cubW9kMiddCisgICAgcHlfbW9kdWxlcyA9IFsnbW9kMScsICdwa2cubW9kMiddCiAKIFRoaXMgZGVzY3JpYmVzIHR3byBtb2R1bGVzLCBvbmUgb2YgdGhlbSBpbiB0aGUgInJvb3QiIHBhY2thZ2UsIHRoZSBvdGhlciBpbiB0aGUKIDptb2Q6YHBrZ2AgcGFja2FnZS4gIEFnYWluLCB0aGUgZGVmYXVsdCBwYWNrYWdlL2RpcmVjdG9yeSBsYXlvdXQgaW1wbGllcyB0aGF0CkBAIC0xNDQsMTcgKzE0NCwxNyBAQAogaW1wbGVtZW50ZWQgYnkgOmZpbGU6YGZvby5jYC4gIElmIG5vIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIHRvIHRoZQogY29tcGlsZXIvbGlua2VyIGFyZSBuZWVkZWQsIGRlc2NyaWJpbmcgdGhpcyBleHRlbnNpb24gaXMgcXVpdGUgc2ltcGxlOjoKIAotICAgRXh0ZW5zaW9uKCdmb28nLCBbJ2Zvby5jJ10pCisgICAgRXh0ZW5zaW9uKCdmb28nLCBbJ2Zvby5jJ10pCiAKIFRoZSA6Y2xhc3M6YEV4dGVuc2lvbmAgY2xhc3MgY2FuIGJlIGltcG9ydGVkIGZyb20gOm1vZDpgZGlzdHV0aWxzLmNvcmVgIGFsb25nCiB3aXRoIDpmdW5jOmBzZXR1cGAuICBUaHVzLCB0aGUgc2V0dXAgc2NyaXB0IGZvciBhIG1vZHVsZSBkaXN0cmlidXRpb24gdGhhdAogY29udGFpbnMgb25seSB0aGlzIG9uZSBleHRlbnNpb24gYW5kIG5vdGhpbmcgZWxzZSBtaWdodCBiZTo6CiAKLSAgIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwLCBFeHRlbnNpb24KLSAgIHNldHVwKG5hbWU9J2ZvbycsCi0gICAgICAgICB2ZXJzaW9uPScxLjAnLAotICAgICAgICAgZXh0X21vZHVsZXM9W0V4dGVuc2lvbignZm9vJywgWydmb28uYyddKV0sCi0gICAgICAgICApCisgICAgZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgorICAgIHNldHVwKG5hbWU9J2ZvbycsCisgICAgICAgICAgdmVyc2lvbj0nMS4wJywKKyAgICAgICAgICBleHRfbW9kdWxlcz1bRXh0ZW5zaW9uKCdmb28nLCBbJ2Zvby5jJ10pXSwKKyAgICAgICAgICApCiAKIFRoZSA6Y2xhc3M6YEV4dGVuc2lvbmAgY2xhc3MgKGFjdHVhbGx5LCB0aGUgdW5kZXJseWluZyBleHRlbnNpb24tYnVpbGRpbmcKIG1hY2hpbmVyeSBpbXBsZW1lbnRlZCBieSB0aGUgOmNvbW1hbmQ6YGJ1aWxkX2V4dGAgY29tbWFuZCkgc3VwcG9ydHMgYSBncmVhdCBkZWFsCkBAIC0xNjgsMTEgKzE2OCwxMSBAQAogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSA6Y2xhc3M6YEV4dGVuc2lvbmAgY29uc3RydWN0b3IgaXMgYWx3YXlzIHRoZSBuYW1lIG9mCiB0aGUgZXh0ZW5zaW9uLCBpbmNsdWRpbmcgYW55IHBhY2thZ2UgbmFtZXMuICBGb3IgZXhhbXBsZSwgOjoKIAotICAgRXh0ZW5zaW9uKCdmb28nLCBbJ3NyYy9mb28xLmMnLCAnc3JjL2ZvbzIuYyddKQorICAgIEV4dGVuc2lvbignZm9vJywgWydzcmMvZm9vMS5jJywgJ3NyYy9mb28yLmMnXSkKIAogZGVzY3JpYmVzIGFuIGV4dGVuc2lvbiB0aGF0IGxpdmVzIGluIHRoZSByb290IHBhY2thZ2UsIHdoaWxlIDo6CiAKLSAgIEV4dGVuc2lvbigncGtnLmZvbycsIFsnc3JjL2ZvbzEuYycsICdzcmMvZm9vMi5jJ10pCisgICAgRXh0ZW5zaW9uKCdwa2cuZm9vJywgWydzcmMvZm9vMS5jJywgJ3NyYy9mb28yLmMnXSkKIAogZGVzY3JpYmVzIHRoZSBzYW1lIGV4dGVuc2lvbiBpbiB0aGUgOm1vZDpgcGtnYCBwYWNrYWdlLiAgVGhlIHNvdXJjZSBmaWxlcyBhbmQKIHJlc3VsdGluZyBvYmplY3QgY29kZSBhcmUgaWRlbnRpY2FsIGluIGJvdGggY2FzZXM7IHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgd2hlcmUKQEAgLTE4MywxMSArMTgzLDExIEBACiBzYW1lIGJhc2UgcGFja2FnZSksIHVzZSB0aGUgOm9wdGlvbjpgZXh0X3BhY2thZ2VgIGtleXdvcmQgYXJndW1lbnQgdG8KIDpmdW5jOmBzZXR1cGAuICBGb3IgZXhhbXBsZSwgOjoKIAotICAgc2V0dXAoLi4uLAotICAgICAgICAgZXh0X3BhY2thZ2U9J3BrZycsCi0gICAgICAgICBleHRfbW9kdWxlcz1bRXh0ZW5zaW9uKCdmb28nLCBbJ2Zvby5jJ10pLAotICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbignc3VicGtnLmJhcicsIFsnYmFyLmMnXSldLAotICAgICAgICApCisgICAgc2V0dXAoLi4uLAorICAgICAgICAgIGV4dF9wYWNrYWdlPSdwa2cnLAorICAgICAgICAgIGV4dF9tb2R1bGVzPVtFeHRlbnNpb24oJ2ZvbycsIFsnZm9vLmMnXSksCisgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbignc3VicGtnLmJhcicsIFsnYmFyLmMnXSldLAorICAgICAgICAgKQogCiB3aWxsIGNvbXBpbGUgOmZpbGU6YGZvby5jYCB0byB0aGUgZXh0ZW5zaW9uIDptb2Q6YHBrZy5mb29gLCBhbmQgOmZpbGU6YGJhci5jYCB0bwogOm1vZDpgcGtnLnN1YnBrZy5iYXJgLgpAQCAtMjEyLDE1ICsyMTIsMTUgQEAKIFRoaXMgd2FybmluZyBub3R3aXRoc3RhbmRpbmcsIG9wdGlvbnMgdG8gU1dJRyBjYW4gYmUgY3VycmVudGx5IHBhc3NlZCBsaWtlCiB0aGlzOjoKIAotICAgc2V0dXAoLi4uLAotICAgICAgICAgZXh0X21vZHVsZXM9W0V4dGVuc2lvbignX2ZvbycsIFsnZm9vLmknXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpZ19vcHRzPVsnLW1vZGVybicsICctSS4uL2luY2x1ZGUnXSldLAotICAgICAgICAgcHlfbW9kdWxlcz1bJ2ZvbyddLAotICAgICAgICApCisgICAgc2V0dXAoLi4uLAorICAgICAgICAgIGV4dF9tb2R1bGVzPVtFeHRlbnNpb24oJ19mb28nLCBbJ2Zvby5pJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2lnX29wdHM9WyctbW9kZXJuJywgJy1JLi4vaW5jbHVkZSddKV0sCisgICAgICAgICAgcHlfbW9kdWxlcz1bJ2ZvbyddLAorICAgICAgICAgKQogCiBPciBvbiB0aGUgY29tbWFuZGxpbmUgbGlrZSB0aGlzOjoKIAotICAgPiBweXRob24gc2V0dXAucHkgYnVpbGRfZXh0IC0tc3dpZy1vcHRzPSItbW9kZXJuIC1JLi4vaW5jbHVkZSIKKyAgICA+IHB5dGhvbiBzZXR1cC5weSBidWlsZF9leHQgLS1zd2lnLW9wdHM9Ii1tb2Rlcm4gLUkuLi9pbmNsdWRlIgogCiBPbiBzb21lIHBsYXRmb3JtcywgeW91IGNhbiBpbmNsdWRlIG5vbi1zb3VyY2UgZmlsZXMgdGhhdCBhcmUgcHJvY2Vzc2VkIGJ5IHRoZQogY29tcGlsZXIgYW5kIGluY2x1ZGVkIGluIHlvdXIgZXh0ZW5zaW9uLiAgQ3VycmVudGx5LCB0aGlzIGp1c3QgbWVhbnMgV2luZG93cwpAQCAtMjM5LDE4ICsyMzksMTggQEAKIEZvciBleGFtcGxlLCBpZiB5b3VyIGV4dGVuc2lvbiByZXF1aXJlcyBoZWFkZXIgZmlsZXMgaW4gdGhlIDpmaWxlOmBpbmNsdWRlYAogZGlyZWN0b3J5IHVuZGVyIHlvdXIgZGlzdHJpYnV0aW9uIHJvb3QsIHVzZSB0aGUgYGBpbmNsdWRlX2RpcnNgYCBvcHRpb246OgogCi0gICBFeHRlbnNpb24oJ2ZvbycsIFsnZm9vLmMnXSwgaW5jbHVkZV9kaXJzPVsnaW5jbHVkZSddKQorICAgIEV4dGVuc2lvbignZm9vJywgWydmb28uYyddLCBpbmNsdWRlX2RpcnM9WydpbmNsdWRlJ10pCiAKIFlvdSBjYW4gc3BlY2lmeSBhYnNvbHV0ZSBkaXJlY3RvcmllcyB0aGVyZTsgaWYgeW91IGtub3cgdGhhdCB5b3VyIGV4dGVuc2lvbiB3aWxsCiBvbmx5IGJlIGJ1aWx0IG9uIFVuaXggc3lzdGVtcyB3aXRoIFgxMVI2IGluc3RhbGxlZCB0byA6ZmlsZTpgL3VzcmAsIHlvdSBjYW4gZ2V0CiBhd2F5IHdpdGggOjoKIAotICAgRXh0ZW5zaW9uKCdmb28nLCBbJ2Zvby5jJ10sIGluY2x1ZGVfZGlycz1bJy91c3IvaW5jbHVkZS9YMTEnXSkKKyAgICBFeHRlbnNpb24oJ2ZvbycsIFsnZm9vLmMnXSwgaW5jbHVkZV9kaXJzPVsnL3Vzci9pbmNsdWRlL1gxMSddKQogCiBZb3Ugc2hvdWxkIGF2b2lkIHRoaXMgc29ydCBvZiBub24tcG9ydGFibGUgdXNhZ2UgaWYgeW91IHBsYW4gdG8gZGlzdHJpYnV0ZSB5b3VyCiBjb2RlOiBpdCdzIHByb2JhYmx5IGJldHRlciB0byB3cml0ZSBDIGNvZGUgbGlrZSAgOjoKIAotICAgI2luY2x1ZGUgPFgxMS9YbGliLmg+CisgICAgI2luY2x1ZGUgPFgxMS9YbGliLmg+CiAKIElmIHlvdSBuZWVkIHRvIGluY2x1ZGUgaGVhZGVyIGZpbGVzIGZyb20gc29tZSBvdGhlciBQeXRob24gZXh0ZW5zaW9uLCB5b3UgY2FuCiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IGhlYWRlciBmaWxlcyBhcmUgaW5zdGFsbGVkIGluIGEgY29uc2lzdGVudCB3YXkKQEAgLTI2MiwxNyArMjYyLDE3IEBACiBpbmNsdWRlZCBpbiB0aGUgc2VhcmNoIHBhdGggd2hlbiBidWlsZGluZyBQeXRob24gZXh0ZW5zaW9ucywgdGhlIGJlc3QgYXBwcm9hY2gKIGlzIHRvIHdyaXRlIEMgY29kZSBsaWtlICA6OgogCi0gICAjaW5jbHVkZSA8TnVtZXJpY2FsL2FycmF5b2JqZWN0Lmg+CisgICAgI2luY2x1ZGUgPE51bWVyaWNhbC9hcnJheW9iamVjdC5oPgogCiBJZiB5b3UgbXVzdCBwdXQgdGhlIDpmaWxlOmBOdW1lcmljYWxgIGluY2x1ZGUgZGlyZWN0b3J5IHJpZ2h0IGludG8geW91ciBoZWFkZXIKIHNlYXJjaCBwYXRoLCB0aG91Z2gsIHlvdSBjYW4gZmluZCB0aGF0IGRpcmVjdG9yeSB1c2luZyB0aGUgRGlzdHV0aWxzCiA6bW9kOmBkaXN0dXRpbHMuc3lzY29uZmlnYCBtb2R1bGU6OgogCi0gICBmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9weXRob25faW5jCi0gICBpbmNkaXIgPSBvcy5wYXRoLmpvaW4oZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0xKSwgJ051bWVyaWNhbCcpCi0gICBzZXR1cCguLi4sCi0gICAgICAgICBFeHRlbnNpb24oLi4uLCBpbmNsdWRlX2RpcnM9W2luY2Rpcl0pLAotICAgICAgICAgKQorICAgIGZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgZ2V0X3B5dGhvbl9pbmMKKyAgICBpbmNkaXIgPSBvcy5wYXRoLmpvaW4oZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0xKSwgJ051bWVyaWNhbCcpCisgICAgc2V0dXAoLi4uLAorICAgICAgICAgIEV4dGVuc2lvbiguLi4sIGluY2x1ZGVfZGlycz1baW5jZGlyXSksCisgICAgICAgICAgKQogCiBFdmVuIHRob3VnaCB0aGlzIGlzIHF1aXRlIHBvcnRhYmxlLS0taXQgd2lsbCB3b3JrIG9uIGFueSBQeXRob24gaW5zdGFsbGF0aW9uLAogcmVnYXJkbGVzcyBvZiBwbGF0Zm9ybS0tLWl0J3MgcHJvYmFibHkgZWFzaWVyIHRvIGp1c3Qgd3JpdGUgeW91ciBDIGNvZGUgaW4gdGhlCkBAIC0yODgsMTcgKzI4OCwxNyBAQAogCiBGb3IgZXhhbXBsZTo6CiAKLSAgIEV4dGVuc2lvbiguLi4sCi0gICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1bKCdOREVCVUcnLCAnMScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnSEFWRV9TVFJGVElNRScsIE5vbmUpXSwKLSAgICAgICAgICAgICB1bmRlZl9tYWNyb3M9WydIQVZFX0ZPTycsICdIQVZFX0JBUiddKQorICAgIEV4dGVuc2lvbiguLi4sCisgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WygnTkRFQlVHJywgJzEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdIQVZFX1NUUkZUSU1FJywgTm9uZSldLAorICAgICAgICAgICAgICB1bmRlZl9tYWNyb3M9WydIQVZFX0ZPTycsICdIQVZFX0JBUiddKQogCiBpcyB0aGUgZXF1aXZhbGVudCBvZiBoYXZpbmcgdGhpcyBhdCB0aGUgdG9wIG9mIGV2ZXJ5IEMgc291cmNlIGZpbGU6OgogCi0gICAjZGVmaW5lIE5ERUJVRyAxCi0gICAjZGVmaW5lIEhBVkVfU1RSRlRJTUUKLSAgICN1bmRlZiBIQVZFX0ZPTwotICAgI3VuZGVmIEhBVkVfQkFSCisgICAgI2RlZmluZSBOREVCVUcgMQorICAgICNkZWZpbmUgSEFWRV9TVFJGVElNRQorICAgICN1bmRlZiBIQVZFX0ZPTworICAgICN1bmRlZiBIQVZFX0JBUgogCiAKIExpYnJhcnkgb3B0aW9ucwpAQCAtMzEzLDE1ICszMTMsMTUgQEAKIEZvciBleGFtcGxlLCBpZiB5b3UgbmVlZCB0byBsaW5rIGFnYWluc3QgbGlicmFyaWVzIGtub3duIHRvIGJlIGluIHRoZSBzdGFuZGFyZAogbGlicmFyeSBzZWFyY2ggcGF0aCBvbiB0YXJnZXQgc3lzdGVtcyA6OgogCi0gICBFeHRlbnNpb24oLi4uLAotICAgICAgICAgICAgIGxpYnJhcmllcz1bJ2dkYm0nLCAncmVhZGxpbmUnXSkKKyAgICBFeHRlbnNpb24oLi4uLAorICAgICAgICAgICAgICBsaWJyYXJpZXM9WydnZGJtJywgJ3JlYWRsaW5lJ10pCiAKIElmIHlvdSBuZWVkIHRvIGxpbmsgd2l0aCBsaWJyYXJpZXMgaW4gYSBub24tc3RhbmRhcmQgbG9jYXRpb24sIHlvdSdsbCBoYXZlIHRvCiBpbmNsdWRlIHRoZSBsb2NhdGlvbiBpbiBgYGxpYnJhcnlfZGlyc2BgOjoKIAotICAgRXh0ZW5zaW9uKC4uLiwKLSAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9WycvdXNyL1gxMVI2L2xpYiddLAotICAgICAgICAgICAgIGxpYnJhcmllcz1bJ1gxMScsICdYdCddKQorICAgIEV4dGVuc2lvbiguLi4sCisgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1bJy91c3IvWDExUjYvbGliJ10sCisgICAgICAgICAgICAgIGxpYnJhcmllcz1bJ1gxMScsICdYdCddKQogCiAoQWdhaW4sIHRoaXMgc29ydCBvZiBub24tcG9ydGFibGUgY29uc3RydWN0IHNob3VsZCBiZSBhdm9pZGVkIGlmIHlvdSBpbnRlbmQgdG8KIGRpc3RyaWJ1dGUgeW91ciBjb2RlLikKQEAgLTMzNCw2ICszMzQsMTAgQEAKIAogVGhlcmUgYXJlIHN0aWxsIHNvbWUgb3RoZXIgb3B0aW9ucyB3aGljaCBjYW4gYmUgdXNlZCB0byBoYW5kbGUgc3BlY2lhbCBjYXNlcy4KIAorVGhlIDpvcHRpb246YG9wdGlvbmFsYCBvcHRpb24gaXMgYSBib29sZWFuOyBpZiBpdCBpcyB0cnVlLAorYSBidWlsZCBmYWlsdXJlIGluIHRoZSBleHRlbnNpb24gd2lsbCBub3QgYWJvcnQgdGhlIGJ1aWxkIHByb2Nlc3MsIGJ1dAoraW5zdGVhZCBzaW1wbHkgbm90IGluc3RhbGwgdGhlIGZhaWxpbmcgZXh0ZW5zaW9uLgorCiBUaGUgOm9wdGlvbjpgZXh0cmFfb2JqZWN0c2Agb3B0aW9uIGlzIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgdG8gYmUgcGFzc2VkIHRvIHRoZQogbGlua2VyLiBUaGVzZSBmaWxlcyBtdXN0IG5vdCBoYXZlIGV4dGVuc2lvbnMsIGFzIHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgdGhlCiBjb21waWxlciBpcyB1c2VkLgpAQCAtMzQ3LDYgKzM1MSwxMCBAQAogYnVpbGRpbmcgY29tcGlsZWQgZXh0ZW5zaW9uczogRGlzdHV0aWxzICB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIGBgaW5pdG1vZHVsZWBgCiB0byB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzLgogCitUaGUgOm9wdGlvbjpgZGVwZW5kc2Agb3B0aW9uIGlzIGEgbGlzdCBvZiBmaWxlcyB0aGF0IHRoZSBleHRlbnNpb24gZGVwZW5kcyBvbgorKGZvciBleGFtcGxlIGhlYWRlciBmaWxlcykuIFRoZSBidWlsZCBjb21tYW5kIHdpbGwgY2FsbCB0aGUgY29tcGlsZXIgb24gdGhlCitzb3VyY2VzIHRvIHJlYnVpbGQgZXh0ZW5zaW9uIGlmIGFueSBvbiB0aGlzIGZpbGVzIGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZQorcHJldmlvdXMgYnVpbGQuCiAKIFJlbGF0aW9uc2hpcHMgYmV0d2VlbiBEaXN0cmlidXRpb25zIGFuZCBQYWNrYWdlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNzUsOCArMzgzLDggQEAKIHBhcmVudGhlc2VzLiAgRWFjaCBxdWFsaWZpZXIgbWF5IGNvbnNpc3Qgb2YgYSBjb21wYXJpc29uIG9wZXJhdG9yIGFuZCBhIHZlcnNpb24KIG51bWJlci4gIFRoZSBhY2NlcHRlZCBjb21wYXJpc29uIG9wZXJhdG9ycyBhcmU6OgogCi0gICA8ICAgID4gICAgPT0KLSAgIDw9ICAgPj0gICAhPQorICAgIDwgICAgPiAgICA9PQorICAgIDw9ICAgPj0gICAhPQogCiBUaGVzZSBjYW4gYmUgY29tYmluZWQgYnkgdXNpbmcgbXVsdGlwbGUgcXVhbGlmaWVycyBzZXBhcmF0ZWQgYnkgY29tbWFzIChhbmQKIG9wdGlvbmFsIHdoaXRlc3BhY2UpLiAgSW4gdGhpcyBjYXNlLCBhbGwgb2YgdGhlIHF1YWxpZmllcnMgbXVzdCBiZSBtYXRjaGVkOyBhCkBAIC00MjMsNiArNDMxLDcgQEAKIGRpc3RyaWJ1dGlvbiBiZWluZyBkZXNjcmliZWQuICBJZiBubyBxdWFsaWZpZXJzIGFyZSBnaXZlbiwgYWxsIHZlcnNpb25zIG9mIHRoZQogbmFtZWQgbW9kdWxlIG9yIHBhY2thZ2UgYXJlIHVuZGVyc3Rvb2QgdG8gYmUgb2Jzb2xldGVkLgogCisuLiBfZGlzdHV0aWxzLWluc3RhbGxpbmctc2NyaXB0czoKIAogSW5zdGFsbGluZyBTY3JpcHRzCiA9PT09PT09PT09PT09PT09PT0KQEAgLTQ0MSwxMCArNDUwLDE1IEBACiBUaGUgOm9wdGlvbjpgc2NyaXB0c2Agb3B0aW9uIHNpbXBseSBpcyBhIGxpc3Qgb2YgZmlsZXMgdG8gYmUgaGFuZGxlZCBpbiB0aGlzCiB3YXkuICBGcm9tIHRoZSBQeVhNTCBzZXR1cCBzY3JpcHQ6OgogCi0gICBzZXR1cCguLi4sCi0gICAgICAgICBzY3JpcHRzPVsnc2NyaXB0cy94bWxwcm9jX3BhcnNlJywgJ3NjcmlwdHMveG1scHJvY192YWwnXQotICAgICAgICAgKQorICAgIHNldHVwKC4uLiwKKyAgICAgICAgICBzY3JpcHRzPVsnc2NyaXB0cy94bWxwcm9jX3BhcnNlJywgJ3NjcmlwdHMveG1scHJvY192YWwnXQorICAgICAgICAgICkKIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICBBbGwgdGhlIHNjcmlwdHMgd2lsbCBhbHNvIGJlIGFkZGVkIHRvIHRoZSBgYE1BTklGRVNUYGAKKyAgICBmaWxlIGlmIG5vIHRlbXBsYXRlIGlzIHByb3ZpZGVkLiBTZWUgOnJlZjpgbWFuaWZlc3RgLgorCisuLiBfZGlzdHV0aWxzLWluc3RhbGxpbmctcGFja2FnZS1kYXRhOgogCiBJbnN0YWxsaW5nIFBhY2thZ2UgRGF0YQogPT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQ2OCwyNiArNDgyLDMyIEBACiBGb3IgZXhhbXBsZSwgaWYgYSBwYWNrYWdlIHNob3VsZCBjb250YWluIGEgc3ViZGlyZWN0b3J5IHdpdGggc2V2ZXJhbCBkYXRhIGZpbGVzLAogdGhlIGZpbGVzIGNhbiBiZSBhcnJhbmdlZCBsaWtlIHRoaXMgaW4gdGhlIHNvdXJjZSB0cmVlOjoKIAotICAgc2V0dXAucHkKLSAgIHNyYy8KLSAgICAgICBteXBrZy8KLSAgICAgICAgICAgX19pbml0X18ucHkKLSAgICAgICAgICAgbW9kdWxlLnB5Ci0gICAgICAgICAgIGRhdGEvCi0gICAgICAgICAgICAgICB0YWJsZXMuZGF0Ci0gICAgICAgICAgICAgICBzcG9vbnMuZGF0Ci0gICAgICAgICAgICAgICBmb3Jrcy5kYXQKKyAgICBzZXR1cC5weQorICAgIHNyYy8KKyAgICAgICAgbXlwa2cvCisgICAgICAgICAgICBfX2luaXRfXy5weQorICAgICAgICAgICAgbW9kdWxlLnB5CisgICAgICAgICAgICBkYXRhLworICAgICAgICAgICAgICAgIHRhYmxlcy5kYXQKKyAgICAgICAgICAgICAgICBzcG9vbnMuZGF0CisgICAgICAgICAgICAgICAgZm9ya3MuZGF0CiAKIFRoZSBjb3JyZXNwb25kaW5nIGNhbGwgdG8gOmZ1bmM6YHNldHVwYCBtaWdodCBiZTo6CiAKLSAgIHNldHVwKC4uLiwKLSAgICAgICAgIHBhY2thZ2VzPVsnbXlwa2cnXSwKLSAgICAgICAgIHBhY2thZ2VfZGlyPXsnbXlwa2cnOiAnc3JjL215cGtnJ30sCi0gICAgICAgICBwYWNrYWdlX2RhdGE9eydteXBrZyc6IFsnZGF0YS8qLmRhdCddfSwKLSAgICAgICAgICkKKyAgICBzZXR1cCguLi4sCisgICAgICAgICAgcGFja2FnZXM9WydteXBrZyddLAorICAgICAgICAgIHBhY2thZ2VfZGlyPXsnbXlwa2cnOiAnc3JjL215cGtnJ30sCisgICAgICAgICAgcGFja2FnZV9kYXRhPXsnbXlwa2cnOiBbJ2RhdGEvKi5kYXQnXX0sCisgICAgICAgICAgKQogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjQKIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICBBbGwgdGhlIGZpbGVzIHRoYXQgbWF0Y2ggYGBwYWNrYWdlX2RhdGFgYCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBgYE1BTklGRVNUYGAKKyAgICBmaWxlIGlmIG5vIHRlbXBsYXRlIGlzIHByb3ZpZGVkLiBTZWUgOnJlZjpgbWFuaWZlc3RgLgorCisKKy4uIF9kaXN0dXRpbHMtYWRkaXRpb25hbC1maWxlczoKIAogSW5zdGFsbGluZyBBZGRpdGlvbmFsIEZpbGVzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQ5OSwxMSArNTE5LDExIEBACiA6b3B0aW9uOmBkYXRhX2ZpbGVzYCBzcGVjaWZpZXMgYSBzZXF1ZW5jZSBvZiAoKmRpcmVjdG9yeSosICpmaWxlcyopIHBhaXJzIGluIHRoZQogZm9sbG93aW5nIHdheTo6CiAKLSAgIHNldHVwKC4uLiwKLSAgICAgICAgIGRhdGFfZmlsZXM9WygnYml0bWFwcycsIFsnYm0vYjEuZ2lmJywgJ2JtL2IyLmdpZiddKSwKLSAgICAgICAgICAgICAgICAgICAgICgnY29uZmlnJywgWydjZmcvZGF0YS5jZmcnXSksCi0gICAgICAgICAgICAgICAgICAgICAoJy9ldGMvaW5pdC5kJywgWydpbml0LXNjcmlwdCddKV0KLSAgICAgICAgKQorICAgIHNldHVwKC4uLiwKKyAgICAgICAgICBkYXRhX2ZpbGVzPVsoJ2JpdG1hcHMnLCBbJ2JtL2IxLmdpZicsICdibS9iMi5naWYnXSksCisgICAgICAgICAgICAgICAgICAgICAgKCdjb25maWcnLCBbJ2NmZy9kYXRhLmNmZyddKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJy9ldGMvaW5pdC5kJywgWydpbml0LXNjcmlwdCddKV0KKyAgICAgICAgICkKIAogTm90ZSB0aGF0IHlvdSBjYW4gc3BlY2lmeSB0aGUgZGlyZWN0b3J5IG5hbWVzIHdoZXJlIHRoZSBkYXRhIGZpbGVzIHdpbGwgYmUKIGluc3RhbGxlZCwgYnV0IHlvdSBjYW5ub3QgcmVuYW1lIHRoZSBkYXRhIGZpbGVzIHRoZW1zZWx2ZXMuCkBAIC01MjMsNiArNTQzLDExIEBACiBmaWxlcyBkaXJlY3RseSBpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSwgYW4gZW1wdHkgc3RyaW5nIHNob3VsZCBiZSBnaXZlbiBhcyB0aGUKIGRpcmVjdG9yeS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICBBbGwgdGhlIGZpbGVzIHRoYXQgbWF0Y2ggYGBkYXRhX2ZpbGVzYGAgd2lsbCBiZSBhZGRlZCB0byB0aGUgYGBNQU5JRkVTVGBgCisgICAgZmlsZSBpZiBubyB0ZW1wbGF0ZSBpcyBwcm92aWRlZC4gU2VlIDpyZWY6YG1hbmlmZXN0YC4KKworCiAKIC4uIF9tZXRhLWRhdGE6CiAKQEAgLTU1NSw3ICs1ODAsNyBAQAogfCAgICAgICAgICAgICAgICAgICAgICB8IGRlc2NyaXB0aW9uIG9mIHRoZSAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICB8IHBhY2thZ2UgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKwotfCBgYGxvbmdfZGVzY3JpcHRpb25gYCB8IGxvbmdlciBkZXNjcmlwdGlvbiBvZiB0aGUgfCBsb25nIHN0cmluZyAgICAgfCAgICAgICAgfAorfCBgYGxvbmdfZGVzY3JpcHRpb25gYCB8IGxvbmdlciBkZXNjcmlwdGlvbiBvZiB0aGUgfCBsb25nIHN0cmluZyAgICAgfCBcKDUpICAgfAogfCAgICAgICAgICAgICAgICAgICAgICB8IHBhY2thZ2UgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKwogfCBgYGRvd25sb2FkX3VybGBgICAgICB8IGxvY2F0aW9uIHdoZXJlIHRoZSAgICAgICAgfCBVUkwgICAgICAgICAgICAgfCBcKDQpICAgfApAQCAtNTcxLDE4ICs1OTYsMjIgQEAKIE5vdGVzOgogCiAoMSkKLSAgIFRoZXNlIGZpZWxkcyBhcmUgcmVxdWlyZWQuCisgICAgVGhlc2UgZmllbGRzIGFyZSByZXF1aXJlZC4KIAogKDIpCi0gICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHZlcnNpb25zIHRha2UgdGhlIGZvcm0gKm1ham9yLm1pbm9yWy5wYXRjaFsuc3ViXV0qLgorICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdmVyc2lvbnMgdGFrZSB0aGUgZm9ybSAqbWFqb3IubWlub3JbLnBhdGNoWy5zdWJdXSouCiAKICgzKQotICAgRWl0aGVyIHRoZSBhdXRob3Igb3IgdGhlIG1haW50YWluZXIgbXVzdCBiZSBpZGVudGlmaWVkLgorICAgIEVpdGhlciB0aGUgYXV0aG9yIG9yIHRoZSBtYWludGFpbmVyIG11c3QgYmUgaWRlbnRpZmllZC4KIAogKDQpCi0gICBUaGVzZSBmaWVsZHMgc2hvdWxkIG5vdCBiZSB1c2VkIGlmIHlvdXIgcGFja2FnZSBpcyB0byBiZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uCi0gICB2ZXJzaW9ucyBwcmlvciB0byAyLjIuMyBvciAyLjMuICBUaGUgbGlzdCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgYFB5UEkgd2Vic2l0ZQotICAgPGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT5gXy4KKyAgICBUaGVzZSBmaWVsZHMgc2hvdWxkIG5vdCBiZSB1c2VkIGlmIHlvdXIgcGFja2FnZSBpcyB0byBiZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uCisgICAgdmVyc2lvbnMgcHJpb3IgdG8gMi4yLjMgb3IgMi4zLiAgVGhlIGxpc3QgaXMgYXZhaWxhYmxlIGZyb20gdGhlIGBQeVBJIHdlYnNpdGUKKyAgICA8aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfLgorCisoNSkKKyAgICBUaGUgYGBsb25nX2Rlc2NyaXB0aW9uYGAgZmllbGQgaXMgdXNlZCBieSBQeVBJIHdoZW4geW91IGFyZSByZWdpc3RlcmluZyBhCisgICAgcGFja2FnZSwgdG8gYnVpbGQgaXRzIGhvbWUgcGFnZS4KIAogKDYpCiAgICAgVGhlIGBgbGljZW5zZWBgIGZpZWxkIGlzIGEgdGV4dCBpbmRpY2F0aW5nIHRoZSBsaWNlbnNlIGNvdmVyaW5nIHRoZQpAQCAtNTkyLDE0ICs2MjEsMTQgQEAKICAgICBhY3RzIGFzIGFuIGFsaWFzIGZvciBgYGxpY2Vuc2VgYC4KIAogJ3Nob3J0IHN0cmluZycKLSAgIEEgc2luZ2xlIGxpbmUgb2YgdGV4dCwgbm90IG1vcmUgdGhhbiAyMDAgY2hhcmFjdGVycy4KKyAgICBBIHNpbmdsZSBsaW5lIG9mIHRleHQsIG5vdCBtb3JlIHRoYW4gMjAwIGNoYXJhY3RlcnMuCiAKICdsb25nIHN0cmluZycKLSAgIE11bHRpcGxlIGxpbmVzIG9mIHBsYWluIHRleHQgaW4gcmVTdHJ1Y3R1cmVkVGV4dCBmb3JtYXQgKHNlZQotICAgaHR0cDovL2RvY3V0aWxzLnNmLm5ldC8pLgorICAgIE11bHRpcGxlIGxpbmVzIG9mIHBsYWluIHRleHQgaW4gcmVTdHJ1Y3R1cmVkVGV4dCBmb3JtYXQgKHNlZQorICAgIGh0dHA6Ly9kb2N1dGlscy5zZi5uZXQvKS4KIAogJ2xpc3Qgb2Ygc3RyaW5ncycKLSAgIFNlZSBiZWxvdy4KKyAgICBTZWUgYmVsb3cuCiAKIE5vbmUgb2YgdGhlIHN0cmluZyB2YWx1ZXMgbWF5IGJlIFVuaWNvZGUuCiAKQEAgLTYxNSw0NCArNjQ0LDQ0IEBACiAoZm9yIGZpbmFsIHByZS1yZWxlYXNlIHJlbGVhc2UgdGVzdGluZykuIFNvbWUgZXhhbXBsZXM6CiAKIDAuMS4wCi0gICB0aGUgZmlyc3QsIGV4cGVyaW1lbnRhbCByZWxlYXNlIG9mIGEgcGFja2FnZQorICAgIHRoZSBmaXJzdCwgZXhwZXJpbWVudGFsIHJlbGVhc2Ugb2YgYSBwYWNrYWdlCiAKIDEuMC4xYTIKLSAgIHRoZSBzZWNvbmQgYWxwaGEgcmVsZWFzZSBvZiB0aGUgZmlyc3QgcGF0Y2ggdmVyc2lvbiBvZiAxLjAKKyAgICB0aGUgc2Vjb25kIGFscGhhIHJlbGVhc2Ugb2YgdGhlIGZpcnN0IHBhdGNoIHZlcnNpb24gb2YgMS4wCiAKIDpvcHRpb246YGNsYXNzaWZpZXJzYCBhcmUgc3BlY2lmaWVkIGluIGEgUHl0aG9uIGxpc3Q6OgogCi0gICBzZXR1cCguLi4sCi0gICAgICAgICBjbGFzc2lmaWVycz1bCi0gICAgICAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsCi0gICAgICAgICAgICAgJ0Vudmlyb25tZW50IDo6IENvbnNvbGUnLAotICAgICAgICAgICAgICdFbnZpcm9ubWVudCA6OiBXZWIgRW52aXJvbm1lbnQnLAotICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBFbmQgVXNlcnMvRGVza3RvcCcsCi0gICAgICAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMnLAotICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBTeXN0ZW0gQWRtaW5pc3RyYXRvcnMnLAotICAgICAgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBMaWNlbnNlJywKLSAgICAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBNYWNPUyA6OiBNYWNPUyBYJywKLSAgICAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBNaWNyb3NvZnQgOjogV2luZG93cycsCi0gICAgICAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogUE9TSVgnLAotICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLAotICAgICAgICAgICAgICdUb3BpYyA6OiBDb21tdW5pY2F0aW9ucyA6OiBFbWFpbCcsCi0gICAgICAgICAgICAgJ1RvcGljIDo6IE9mZmljZS9CdXNpbmVzcycsCi0gICAgICAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IEJ1ZyBUcmFja2luZycsCi0gICAgICAgICAgICAgXSwKLSAgICAgICAgICkKKyAgICBzZXR1cCguLi4sCisgICAgICAgICAgY2xhc3NpZmllcnM9WworICAgICAgICAgICAgICAnRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDQgLSBCZXRhJywKKyAgICAgICAgICAgICAgJ0Vudmlyb25tZW50IDo6IENvbnNvbGUnLAorICAgICAgICAgICAgICAnRW52aXJvbm1lbnQgOjogV2ViIEVudmlyb25tZW50JywKKyAgICAgICAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IEVuZCBVc2Vycy9EZXNrdG9wJywKKyAgICAgICAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMnLAorICAgICAgICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogU3lzdGVtIEFkbWluaXN0cmF0b3JzJywKKyAgICAgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIExpY2Vuc2UnLAorICAgICAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBNYWNPUyA6OiBNYWNPUyBYJywKKyAgICAgICAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogTWljcm9zb2Z0IDo6IFdpbmRvd3MnLAorICAgICAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBQT1NJWCcsCisgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLAorICAgICAgICAgICAgICAnVG9waWMgOjogQ29tbXVuaWNhdGlvbnMgOjogRW1haWwnLAorICAgICAgICAgICAgICAnVG9waWMgOjogT2ZmaWNlL0J1c2luZXNzJywKKyAgICAgICAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IEJ1ZyBUcmFja2luZycsCisgICAgICAgICAgICAgIF0sCisgICAgICAgICAgKQogCiBJZiB5b3Ugd2lzaCB0byBpbmNsdWRlIGNsYXNzaWZpZXJzIGluIHlvdXIgOmZpbGU6YHNldHVwLnB5YCBmaWxlIGFuZCBhbHNvIHdpc2gKIHRvIHJlbWFpbiBiYWNrd2FyZHMtY29tcGF0aWJsZSB3aXRoIFB5dGhvbiByZWxlYXNlcyBwcmlvciB0byAyLjIuMywgdGhlbiB5b3UgY2FuCiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudCBpbiB5b3VyIDpmaWxlOmBzZXR1cC5weWAgYmVmb3JlIHRoZQogOmZ1bmM6YHNldHVwYCBjYWxsLiA6OgogCi0gICAjIHBhdGNoIGRpc3R1dGlscyBpZiBpdCBjYW4ndCBjb3BlIHdpdGggdGhlICJjbGFzc2lmaWVycyIgb3IKLSAgICMgImRvd25sb2FkX3VybCIga2V5d29yZHMKLSAgIGZyb20gc3lzIGltcG9ydCB2ZXJzaW9uCi0gICBpZiB2ZXJzaW9uIDwgJzIuMi4zJzoKLSAgICAgICBmcm9tIGRpc3R1dGlscy5kaXN0IGltcG9ydCBEaXN0cmlidXRpb25NZXRhZGF0YQotICAgICAgIERpc3RyaWJ1dGlvbk1ldGFkYXRhLmNsYXNzaWZpZXJzID0gTm9uZQotICAgICAgIERpc3RyaWJ1dGlvbk1ldGFkYXRhLmRvd25sb2FkX3VybCA9IE5vbmUKKyAgICAjIHBhdGNoIGRpc3R1dGlscyBpZiBpdCBjYW4ndCBjb3BlIHdpdGggdGhlICJjbGFzc2lmaWVycyIgb3IKKyAgICAjICJkb3dubG9hZF91cmwiIGtleXdvcmRzCisgICAgZnJvbSBzeXMgaW1wb3J0IHZlcnNpb24KKyAgICBpZiB2ZXJzaW9uIDwgJzIuMi4zJzoKKyAgICAgICAgZnJvbSBkaXN0dXRpbHMuZGlzdCBpbXBvcnQgRGlzdHJpYnV0aW9uTWV0YWRhdGEKKyAgICAgICAgRGlzdHJpYnV0aW9uTWV0YWRhdGEuY2xhc3NpZmllcnMgPSBOb25lCisgICAgICAgIERpc3RyaWJ1dGlvbk1ldGFkYXRhLmRvd25sb2FkX3VybCA9IE5vbmUKIAogCiBEZWJ1Z2dpbmcgdGhlIHNldHVwIHNjcmlwdApAQCAtNjc0LDUgKzcwMywzIEBACiB0byBhbnl0aGluZyBleGNlcHQgYW4gZW1wdHkgc3RyaW5nLCBhbmQgZGlzdHV0aWxzIHdpbGwgbm93IHByaW50IGRldGFpbGVkCiBpbmZvcm1hdGlvbiB3aGF0IGl0IGlzIGRvaW5nLCBhbmQgcHJpbnRzIHRoZSBmdWxsIHRyYWNlYmFjayBpbiBjYXNlIGFuIGV4Y2VwdGlvbgogb2NjdXJzLgotCi0KZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QgYi9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CmluZGV4IDlmZWJkMTAuLmZjODYwZGUgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdApAQCAtMjYsMTYgKzI2LDE2IEBACiArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rCiB8IGBgemlwYGAgICB8IHppcCBmaWxlICg6ZmlsZTpgLnppcGApIHwgKDEpLCgzKSB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCi18IGBgZ3p0YXJgYCB8IGd6aXAnZWQgdGFyIGZpbGUgICAgICAgIHwgKDIpLCg0KSB8Cit8IGBgZ3p0YXJgYCB8IGd6aXAnZWQgdGFyIGZpbGUgICAgICAgIHwgXCgyKSAgICB8CiB8ICAgICAgICAgICB8ICg6ZmlsZTpgLnRhci5nemApICAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCi18IGBgYnp0YXJgYCB8IGJ6aXAyJ2VkIHRhciBmaWxlICAgICAgIHwgXCg0KSAgICB8Cit8IGBgYnp0YXJgYCB8IGJ6aXAyJ2VkIHRhciBmaWxlICAgICAgIHwgICAgICAgICB8CiB8ICAgICAgICAgICB8ICg6ZmlsZTpgLnRhci5iejJgKSAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiB8IGBgenRhcmBgICB8IGNvbXByZXNzZWQgdGFyIGZpbGUgICAgIHwgXCg0KSAgICB8CiB8ICAgICAgICAgICB8ICg6ZmlsZTpgLnRhci5aYCkgICAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCi18IGBgdGFyYGAgICB8IHRhciBmaWxlICg6ZmlsZTpgLnRhcmApIHwgXCg0KSAgICB8Cit8IGBgdGFyYGAgICB8IHRhciBmaWxlICg6ZmlsZTpgLnRhcmApIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiAKIE5vdGVzOgpAQCAtNTEsOCArNTEsMTYgQEAKICAgIG9mIHRoZSBzdGFuZGFyZCBQeXRob24gbGlicmFyeSBzaW5jZSBQeXRob24gMS42KQogCiAoNCkKLSAgIHJlcXVpcmVzIGV4dGVybmFsIHV0aWxpdGllczogOnByb2dyYW06YHRhcmAgYW5kIHBvc3NpYmx5IG9uZSBvZiA6cHJvZ3JhbTpgZ3ppcGAsCi0gICA6cHJvZ3JhbTpgYnppcDJgLCBvciA6cHJvZ3JhbTpgY29tcHJlc3NgCisgICByZXF1aXJlcyB0aGUgOnByb2dyYW06YGNvbXByZXNzYCBwcm9ncmFtLiBOb3RpY2UgdGhhdCB0aGlzIGZvcm1hdCBpcyBub3cKKyAgIHBlbmRpbmcgZm9yIGRlcHJlY2F0aW9uIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQeXRob24uCisKK1doZW4gdXNpbmcgYW55IGBgdGFyYGAgZm9ybWF0IChgYGd6dGFyYGAsIGBgYnp0YXJgYCwgYGB6dGFyYGAgb3IKK2BgdGFyYGApIHVuZGVyIFVuaXgsIHlvdSBjYW4gc3BlY2lmeSB0aGUgYGBvd25lcmBgIGFuZCBgYGdyb3VwYGAgbmFtZXMKK3RoYXQgd2lsbCBiZSBzZXQgZm9yIGVhY2ggbWVtYmVyIG9mIHRoZSBhcmNoaXZlLgorCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgYWxsIGZpbGVzIG9mIHRoZSBhcmNoaXZlIHRvIGJlIG93bmVkIGJ5IHJvb3Q6OgorCisgICAgcHl0aG9uIHNldHVwLnB5IHNkaXN0IC0tb3duZXI9cm9vdCAtLWdyb3VwPXJvb3QKIAogCiAuLiBfbWFuaWZlc3Q6CkBAIC03NCw2ICs4Miw3IEBACiAgICAgIDptZXRoOmBnZXRfc291cmNlX2ZpbGVzYCBtZXRob2QgaW4gOmZpbGU6YGJ1aWxkX2NsaWIucHlgIQogCiAqIHNjcmlwdHMgaWRlbnRpZmllZCBieSB0aGUgOm9wdGlvbjpgc2NyaXB0c2Agb3B0aW9uCisgIFNlZSA6cmVmOmBkaXN0dXRpbHMtaW5zdGFsbGluZy1zY3JpcHRzYC4KIAogKiBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSB0ZXN0IHNjcmlwdDogOmZpbGU6YHRlc3QvdGVzdFwqLnB5YCAoY3VycmVudGx5LCB0aGUKICAgRGlzdHV0aWxzIGRvbid0IGRvIGFueXRoaW5nIHdpdGggdGVzdCBzY3JpcHRzIGV4Y2VwdCBpbmNsdWRlIHRoZW0gaW4gc291cmNlCkBAIC04Myw2ICs5MiwxMiBAQAogKiA6ZmlsZTpgUkVBRE1FLnR4dGAgKG9yIDpmaWxlOmBSRUFETUVgKSwgOmZpbGU6YHNldHVwLnB5YCAob3Igd2hhdGV2ZXIgIHlvdQogICBjYWxsZWQgeW91ciBzZXR1cCBzY3JpcHQpLCBhbmQgOmZpbGU6YHNldHVwLmNmZ2AKIAorKiBhbGwgZmlsZXMgdGhhdCBtYXRjaGVzIHRoZSBgYHBhY2thZ2VfZGF0YWBgIG1ldGFkYXRhLgorICBTZWUgOnJlZjpgZGlzdHV0aWxzLWluc3RhbGxpbmctcGFja2FnZS1kYXRhYC4KKworKiBhbGwgZmlsZXMgdGhhdCBtYXRjaGVzIHRoZSBgYGRhdGFfZmlsZXNgYCBtZXRhZGF0YS4KKyAgU2VlIDpyZWY6YGRpc3R1dGlscy1hZGRpdGlvbmFsLWZpbGVzYC4KKwogU29tZXRpbWVzIHRoaXMgaXMgZW5vdWdoLCBidXQgdXN1YWxseSB5b3Ugd2lsbCB3YW50IHRvIHNwZWNpZnkgYWRkaXRpb25hbCBmaWxlcwogdG8gZGlzdHJpYnV0ZS4gIFRoZSB0eXBpY2FsIHdheSB0byBkbyB0aGlzIGlzIHRvIHdyaXRlIGEgKm1hbmlmZXN0IHRlbXBsYXRlKiwKIGNhbGxlZCA6ZmlsZTpgTUFOSUZFU1QuaW5gIGJ5IGRlZmF1bHQuICBUaGUgbWFuaWZlc3QgdGVtcGxhdGUgaXMganVzdCBhIGxpc3Qgb2YKQEAgLTk2LDkgKzExMSw2NCBAQAogOmZpbGU6YE1BTklGRVNUYCwgeW91IG11c3Qgc3BlY2lmeSBldmVyeXRoaW5nOiB0aGUgZGVmYXVsdCBzZXQgb2YgZmlsZXMKIGRlc2NyaWJlZCBhYm92ZSBkb2VzIG5vdCBhcHBseSBpbiB0aGlzIGNhc2UuCiAKKy4uIHZlcnNpb25hZGRlZDo6IDIuNworICAgOmZpbGU6YE1BTklGRVNUYCBmaWxlcyBzdGFydCB3aXRoIGEgY29tbWVudCBpbmRpY2F0aW5nIHRoZXkgYXJlIGdlbmVyYXRlZC4KKyAgIEZpbGVzIHdpdGhvdXQgdGhpcyBjb21tZW50IGFyZSBub3Qgb3ZlcndyaXR0ZW4gb3IgcmVtb3ZlZC4KKworU2VlIDpyZWY6YG1hbmlmZXN0X3RlbXBsYXRlYCBzZWN0aW9uIGZvciBhIHN5bnRheCByZWZlcmVuY2UuCisKKy4uIF9tYW5pZmVzdC1vcHRpb25zOgorCitNYW5pZmVzdC1yZWxhdGVkIG9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgbm9ybWFsIGNvdXJzZSBvZiBvcGVyYXRpb25zIGZvciB0aGUgOmNvbW1hbmQ6YHNkaXN0YCBjb21tYW5kIGlzIGFzIGZvbGxvd3M6CisKKyogaWYgdGhlIG1hbmlmZXN0IGZpbGUsIDpmaWxlOmBNQU5JRkVTVGAgZG9lc24ndCBleGlzdCwgcmVhZCA6ZmlsZTpgTUFOSUZFU1QuaW5gCisgIGFuZCBjcmVhdGUgdGhlIG1hbmlmZXN0CisKKyogaWYgbmVpdGhlciA6ZmlsZTpgTUFOSUZFU1RgIG5vciA6ZmlsZTpgTUFOSUZFU1QuaW5gIGV4aXN0LCBjcmVhdGUgYSBtYW5pZmVzdAorICB3aXRoIGp1c3QgdGhlIGRlZmF1bHQgZmlsZSBzZXQKKworKiBpZiBlaXRoZXIgOmZpbGU6YE1BTklGRVNULmluYCBvciB0aGUgc2V0dXAgc2NyaXB0ICg6ZmlsZTpgc2V0dXAucHlgKSBhcmUgbW9yZQorICByZWNlbnQgdGhhbiA6ZmlsZTpgTUFOSUZFU1RgLCByZWNyZWF0ZSA6ZmlsZTpgTUFOSUZFU1RgIGJ5IHJlYWRpbmcKKyAgOmZpbGU6YE1BTklGRVNULmluYAorCisqIHVzZSB0aGUgbGlzdCBvZiBmaWxlcyBub3cgaW4gOmZpbGU6YE1BTklGRVNUYCAoZWl0aGVyIGp1c3QgZ2VuZXJhdGVkIG9yIHJlYWQKKyAgaW4pIHRvIGNyZWF0ZSB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBhcmNoaXZlKHMpCisKK1RoZXJlIGFyZSBhIGNvdXBsZSBvZiBvcHRpb25zIHRoYXQgbW9kaWZ5IHRoaXMgYmVoYXZpb3VyLiAgRmlyc3QsIHVzZSB0aGUKKzpvcHRpb246YC0tbm8tZGVmYXVsdHNgIGFuZCA6b3B0aW9uOmAtLW5vLXBydW5lYCB0byBkaXNhYmxlIHRoZSBzdGFuZGFyZAorImluY2x1ZGUiIGFuZCAiZXhjbHVkZSIgc2V0cy4KKworU2Vjb25kLCB5b3UgbWlnaHQganVzdCB3YW50IHRvIChyZSlnZW5lcmF0ZSB0aGUgbWFuaWZlc3QsIGJ1dCBub3QgY3JlYXRlIGEKK3NvdXJjZSBkaXN0cmlidXRpb246OgorCisgICBweXRob24gc2V0dXAucHkgc2Rpc3QgLS1tYW5pZmVzdC1vbmx5CisKKzpvcHRpb246YC1vYCBpcyBhIHNob3J0Y3V0IGZvciA6b3B0aW9uOmAtLW1hbmlmZXN0LW9ubHlgLgorCisuLiBfbWFuaWZlc3RfdGVtcGxhdGU6CisKK1RoZSBNQU5JRkVTVC5pbiB0ZW1wbGF0ZQorPT09PT09PT09PT09PT09PT09PT09PT09CisKK0EgOmZpbGU6YE1BTklGRVNULmluYCBmaWxlIGNhbiBiZSBhZGRlZCBpbiBhIHByb2plY3QgdG8gZGVmaW5lIHRoZSBsaXN0IG9mCitmaWxlcyB0byBpbmNsdWRlIGluIHRoZSBkaXN0cmlidXRpb24gYnVpbHQgYnkgdGhlIDpjb21tYW5kOmBzZGlzdGAgY29tbWFuZC4KKworV2hlbiA6Y29tbWFuZDpgc2Rpc3RgIGlzIHJ1biwgaXQgd2lsbCBsb29rIGZvciB0aGUgOmZpbGU6YE1BTklGRVNULmluYCBmaWxlCithbmQgaW50ZXJwcmV0IGl0IHRvIGdlbmVyYXRlIHRoZSA6ZmlsZTpgTUFOSUZFU1RgIGZpbGUgdGhhdCBjb250YWlucyB0aGUKK2xpc3Qgb2YgZmlsZXMgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBwYWNrYWdlLgorCitUaGlzIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB3aGVuIHRoZSBkZWZhdWx0IGxpc3Qgb2YgZmlsZXMgaXMgbm90IGVub3VnaC4KKyhTZWUgOnJlZjpgbWFuaWZlc3RgKS4KKworUHJpbmNpcGxlCistLS0tLS0tLS0KKwogVGhlIG1hbmlmZXN0IHRlbXBsYXRlIGhhcyBvbmUgY29tbWFuZCBwZXIgbGluZSwgd2hlcmUgZWFjaCBjb21tYW5kIHNwZWNpZmllcyBhCiBzZXQgb2YgZmlsZXMgdG8gaW5jbHVkZSBvciBleGNsdWRlIGZyb20gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uICBGb3IgYW4KLWV4YW1wbGUsIGFnYWluIHdlIHR1cm4gdG8gdGhlIERpc3R1dGlscycgb3duIG1hbmlmZXN0IHRlbXBsYXRlOjoKK2V4YW1wbGUsIGxldCdzIGxvb2sgYXQgdGhlIERpc3R1dGlscycgb3duIG1hbmlmZXN0IHRlbXBsYXRlOjoKIAogICAgaW5jbHVkZSAqLnR4dAogICAgcmVjdXJzaXZlLWluY2x1ZGUgZXhhbXBsZXMgKi50eHQgKi5weQpAQCAtMTEwLDkgKzE4MCw3IEBACiA6ZmlsZTpgZXhhbXBsZXMvc2FtcGxlPy9idWlsZGAuICBBbGwgb2YgdGhpcyBpcyBkb25lICphZnRlciogdGhlIHN0YW5kYXJkCiBpbmNsdWRlIHNldCwgc28geW91IGNhbiBleGNsdWRlIGZpbGVzIGZyb20gdGhlIHN0YW5kYXJkIHNldCB3aXRoIGV4cGxpY2l0CiBpbnN0cnVjdGlvbnMgaW4gdGhlIG1hbmlmZXN0IHRlbXBsYXRlLiAgKE9yLCB5b3UgY2FuIHVzZSB0aGUKLTpvcHRpb246YC0tbm8tZGVmYXVsdHNgIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBzdGFuZGFyZCBzZXQgZW50aXJlbHkuKSAgVGhlcmUgYXJlCi1zZXZlcmFsIG90aGVyIGNvbW1hbmRzIGF2YWlsYWJsZSBpbiB0aGUgbWFuaWZlc3QgdGVtcGxhdGUgbWluaS1sYW5ndWFnZTsgc2VlCi1zZWN0aW9uIDpyZWY6YHNkaXN0LWNtZGAuCis6b3B0aW9uOmAtLW5vLWRlZmF1bHRzYCBvcHRpb24gdG8gZGlzYWJsZSB0aGUgc3RhbmRhcmQgc2V0IGVudGlyZWx5LikKIAogVGhlIG9yZGVyIG9mIGNvbW1hbmRzIGluIHRoZSBtYW5pZmVzdCB0ZW1wbGF0ZSBtYXR0ZXJzOiBpbml0aWFsbHksIHdlIGhhdmUgdGhlCiBsaXN0IG9mIGRlZmF1bHQgZmlsZXMgYXMgZGVzY3JpYmVkIGFib3ZlLCBhbmQgZWFjaCBjb21tYW5kIGluIHRoZSB0ZW1wbGF0ZSBhZGRzCkBAIC0xNjYsMzYgKzIzNCw0NSBAQAogdGhlbSB0byB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb24gb24geW91ciBwbGF0Zm9ybS4gVGhhdCB3YXksIHRoZSBtYW5pZmVzdAogdGVtcGxhdGUgaXMgcG9ydGFibGUgYWNyb3NzIG9wZXJhdGluZyBzeXN0ZW1zLgogCitDb21tYW5kcworLS0tLS0tLS0KIAotLi4gX21hbmlmZXN0LW9wdGlvbnM6CitUaGUgbWFuaWZlc3QgdGVtcGxhdGUgY29tbWFuZHMgYXJlOgogCi1NYW5pZmVzdC1yZWxhdGVkIG9wdGlvbnMKLT09PT09PT09PT09PT09PT09PT09PT09PQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvbW1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCA6Y29tbWFuZDpgaW5jbHVkZSBwYXQxIHBhdDIgLi4uYCAgICAgICAgICB8IGluY2x1ZGUgYWxsIGZpbGVzIG1hdGNoaW5nIGFueSBvZiB0aGUgbGlzdGVkICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGF0dGVybnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y29tbWFuZDpgZXhjbHVkZSBwYXQxIHBhdDIgLi4uYCAgICAgICAgICB8IGV4Y2x1ZGUgYWxsIGZpbGVzIG1hdGNoaW5nIGFueSBvZiB0aGUgbGlzdGVkICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGF0dGVybnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y29tbWFuZDpgcmVjdXJzaXZlLWluY2x1ZGUgZGlyIHBhdDEgcGF0MiB8IGluY2x1ZGUgYWxsIGZpbGVzIHVuZGVyICpkaXIqIG1hdGNoaW5nIGFueSBvZiB8Cit8IC4uLmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGxpc3RlZCBwYXR0ZXJucyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y29tbWFuZDpgcmVjdXJzaXZlLWV4Y2x1ZGUgZGlyIHBhdDEgcGF0MiB8IGV4Y2x1ZGUgYWxsIGZpbGVzIHVuZGVyICpkaXIqIG1hdGNoaW5nIGFueSBvZiB8Cit8IC4uLmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGxpc3RlZCBwYXR0ZXJucyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y29tbWFuZDpgZ2xvYmFsLWluY2x1ZGUgcGF0MSBwYXQyIC4uLmAgICB8IGluY2x1ZGUgYWxsIGZpbGVzIGFueXdoZXJlIGluIHRoZSBzb3VyY2UgdHJlZSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbWF0Y2hpbmcgLS0tICYgYW55IG9mIHRoZSBsaXN0ZWQgcGF0dGVybnMgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y29tbWFuZDpgZ2xvYmFsLWV4Y2x1ZGUgcGF0MSBwYXQyIC4uLmAgICB8IGV4Y2x1ZGUgYWxsIGZpbGVzIGFueXdoZXJlIGluIHRoZSBzb3VyY2UgdHJlZSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbWF0Y2hpbmcgLS0tICYgYW55IG9mIHRoZSBsaXN0ZWQgcGF0dGVybnMgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y29tbWFuZDpgcHJ1bmUgZGlyYCAgICAgICAgICAgICAgICAgICAgICB8IGV4Y2x1ZGUgYWxsIGZpbGVzIHVuZGVyICpkaXIqICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNvbW1hbmQ6YGdyYWZ0IGRpcmAgICAgICAgICAgICAgICAgICAgICAgfCBpbmNsdWRlIGFsbCBmaWxlcyB1bmRlciAqZGlyKiAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLVRoZSBub3JtYWwgY291cnNlIG9mIG9wZXJhdGlvbnMgZm9yIHRoZSA6Y29tbWFuZDpgc2Rpc3RgIGNvbW1hbmQgaXMgYXMgZm9sbG93czoKK1RoZSBwYXR0ZXJucyBoZXJlIGFyZSBVbml4LXN0eWxlICJnbG9iIiBwYXR0ZXJuczogYGAqYGAgbWF0Y2hlcyBhbnkgc2VxdWVuY2Ugb2YKK3JlZ3VsYXIgZmlsZW5hbWUgY2hhcmFjdGVycywgYGA/YGAgbWF0Y2hlcyBhbnkgc2luZ2xlIHJlZ3VsYXIgZmlsZW5hbWUKK2NoYXJhY3RlciwgYW5kIGBgW3JhbmdlXWBgIG1hdGNoZXMgYW55IG9mIHRoZSBjaGFyYWN0ZXJzIGluICpyYW5nZSogKGUuZy4sCitgYGEtemBgLCBgYGEtekEtWmBgLCBgYGEtZjAtOV8uYGApLiAgVGhlIGRlZmluaXRpb24gb2YgInJlZ3VsYXIgZmlsZW5hbWUKK2NoYXJhY3RlciIgaXMgcGxhdGZvcm0tc3BlY2lmaWM6IG9uIFVuaXggaXQgaXMgYW55dGhpbmcgZXhjZXB0IHNsYXNoOyBvbiBXaW5kb3dzCithbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIG9yIGNvbG9uLgogCi0qIGlmIHRoZSBtYW5pZmVzdCBmaWxlLCA6ZmlsZTpgTUFOSUZFU1RgIGRvZXNuJ3QgZXhpc3QsIHJlYWQgOmZpbGU6YE1BTklGRVNULmluYAotICBhbmQgY3JlYXRlIHRoZSBtYW5pZmVzdAotCi0qIGlmIG5laXRoZXIgOmZpbGU6YE1BTklGRVNUYCBub3IgOmZpbGU6YE1BTklGRVNULmluYCBleGlzdCwgY3JlYXRlIGEgbWFuaWZlc3QKLSAgd2l0aCBqdXN0IHRoZSBkZWZhdWx0IGZpbGUgc2V0Ci0KLSogaWYgZWl0aGVyIDpmaWxlOmBNQU5JRkVTVC5pbmAgb3IgdGhlIHNldHVwIHNjcmlwdCAoOmZpbGU6YHNldHVwLnB5YCkgYXJlIG1vcmUKLSAgcmVjZW50IHRoYW4gOmZpbGU6YE1BTklGRVNUYCwgcmVjcmVhdGUgOmZpbGU6YE1BTklGRVNUYCBieSByZWFkaW5nCi0gIDpmaWxlOmBNQU5JRkVTVC5pbmAKLQotKiB1c2UgdGhlIGxpc3Qgb2YgZmlsZXMgbm93IGluIDpmaWxlOmBNQU5JRkVTVGAgKGVpdGhlciBqdXN0IGdlbmVyYXRlZCBvciByZWFkCi0gIGluKSB0byBjcmVhdGUgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gYXJjaGl2ZShzKQotCi1UaGVyZSBhcmUgYSBjb3VwbGUgb2Ygb3B0aW9ucyB0aGF0IG1vZGlmeSB0aGlzIGJlaGF2aW91ci4gIEZpcnN0LCB1c2UgdGhlCi06b3B0aW9uOmAtLW5vLWRlZmF1bHRzYCBhbmQgOm9wdGlvbjpgLS1uby1wcnVuZWAgdG8gZGlzYWJsZSB0aGUgc3RhbmRhcmQKLSJpbmNsdWRlIiBhbmQgImV4Y2x1ZGUiIHNldHMuCi0KLVNlY29uZCwgeW91IG1pZ2h0IGp1c3Qgd2FudCB0byAocmUpZ2VuZXJhdGUgdGhlIG1hbmlmZXN0LCBidXQgbm90IGNyZWF0ZSBhIHNvdXJjZQotZGlzdHJpYnV0aW9uOjoKLQotICAgcHl0aG9uIHNldHVwLnB5IHNkaXN0IC0tbWFuaWZlc3Qtb25seQotCi06b3B0aW9uOmAtb2AgaXMgYSBzaG9ydGN1dCBmb3IgOm9wdGlvbjpgLS1tYW5pZmVzdC1vbmx5YC4KLQotCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgIEFuIGV4aXN0aW5nIGdlbmVyYXRlZCA6ZmlsZTpgTUFOSUZFU1RgIHdpbGwgYmUgcmVnZW5lcmF0ZWQgd2l0aG91dAorICAgIDpjb21tYW5kOmBzZGlzdGAgY29tcGFyaW5nIGl0cyBtb2RpZmljYXRpb24gdGltZSB0byB0aGUgb25lIG9mCisgICAgOmZpbGU6YE1BTklGRVNULmluYCBvciA6ZmlsZTpgc2V0dXAucHlgLgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy91cGxvYWRpbmcucnN0IGIvRG9jL2Rpc3R1dGlscy91cGxvYWRpbmcucnN0CmluZGV4IDY2ZjcxMmIuLjkzNjQwMmIgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvdXBsb2FkaW5nLnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL3VwbG9hZGluZy5yc3QKQEAgLTEzLDcgKzEzLDcgQEAKIFRoZSBjb21tYW5kIGlzIGludm9rZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYnVpbGRpbmcgb25lIG9yIG1vcmUgZGlzdHJpYnV0aW9uCiBmaWxlcy4gIEZvciBleGFtcGxlLCB0aGUgY29tbWFuZCA6OgogCi0gICBweXRob24gc2V0dXAucHkgc2Rpc3QgYmRpc3Rfd2luaW5zdCB1cGxvYWQKKyAgICBweXRob24gc2V0dXAucHkgc2Rpc3QgYmRpc3Rfd2luaW5zdCB1cGxvYWQKIAogd2lsbCBjYXVzZSB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBhbmQgdGhlIFdpbmRvd3MgaW5zdGFsbGVyIHRvIGJlIHVwbG9hZGVkIHRvCiBQeVBJLiAgTm90ZSB0aGF0IHRoZXNlIHdpbGwgYmUgdXBsb2FkZWQgZXZlbiBpZiB0aGV5IGFyZSBidWlsdCB1c2luZyBhbiBlYXJsaWVyCkBAIC0yMiwxMSArMjIsMTQgQEAKIAogVGhlIDpjb21tYW5kOmB1cGxvYWRgIGNvbW1hbmQgdXNlcyB0aGUgdXNlcm5hbWUsIHBhc3N3b3JkLCBhbmQgcmVwb3NpdG9yeSBVUkwKIGZyb20gdGhlIDpmaWxlOmAkSE9NRS8ucHlwaXJjYCBmaWxlIChzZWUgc2VjdGlvbiA6cmVmOmBweXBpcmNgIGZvciBtb3JlIG9uIHRoaXMKLWZpbGUpLgorZmlsZSkuIElmIGEgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBjb21tYW5kIHdhcyBwcmV2aW91c2x5IGNhbGxlZCBpbiB0aGUgc2FtZSBjb21tYW5kLAorYW5kIGlmIHRoZSBwYXNzd29yZCB3YXMgZW50ZXJlZCBpbiB0aGUgcHJvbXB0LCA6Y29tbWFuZDpgdXBsb2FkYCB3aWxsIHJldXNlIHRoZQorZW50ZXJlZCBwYXNzd29yZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHN0b3JlIGEgY2xlYXIgdGV4dAorcGFzc3dvcmQgaW4gdGhlIDpmaWxlOmAkSE9NRS8ucHlwaXJjYCBmaWxlLgogCiBZb3UgY2FuIHNwZWNpZnkgYW5vdGhlciBQeVBJIHNlcnZlciB3aXRoIHRoZSA6b3B0aW9uOmAtLXJlcG9zaXRvcnk9KnVybCpgIG9wdGlvbjo6CiAKLSAgIHB5dGhvbiBzZXR1cC5weSBzZGlzdCBiZGlzdF93aW5pbnN0IHVwbG9hZCAtciBodHRwOi8vZXhhbXBsZS5jb20vcHlwaQorICAgIHB5dGhvbiBzZXR1cC5weSBzZGlzdCBiZGlzdF93aW5pbnN0IHVwbG9hZCAtciBodHRwOi8vZXhhbXBsZS5jb20vcHlwaQogCiBTZWUgc2VjdGlvbiA6cmVmOmBweXBpcmNgIGZvciBtb3JlIG9uIGRlZmluaW5nIHNldmVyYWwgc2VydmVycy4KIApAQCAtNDEsMyArNDQsMzQgQEAKIDpvcHRpb246YC0tc2hvdy1yZXNwb25zZWAgKHdoaWNoIGRpc3BsYXlzIHRoZSBmdWxsIHJlc3BvbnNlIHRleHQgZnJvbSB0aGUgUHlQSQogc2VydmVyIGZvciBoZWxwIGluIGRlYnVnZ2luZyB1cGxvYWQgcHJvYmxlbXMpLgogCitQeVBJIHBhY2thZ2UgZGlzcGxheQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIGBgbG9uZ19kZXNjcmlwdGlvbmBgIGZpZWxkIHBsYXlzIGEgc3BlY2lhbCByb2xlIGF0IFB5UEkuIEl0IGlzIHVzZWQgYnkKK3RoZSBzZXJ2ZXIgdG8gZGlzcGxheSBhIGhvbWUgcGFnZSBmb3IgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZS4KKworSWYgeW91IHVzZSB0aGUgYHJlU3RydWN0dXJlZFRleHQgPGh0dHA6Ly9kb2N1dGlscy5zb3VyY2Vmb3JnZS5uZXQvcnN0Lmh0bWw+YF8KK3N5bnRheCBmb3IgdGhpcyBmaWVsZCwgUHlQSSB3aWxsIHBhcnNlIGl0IGFuZCBkaXNwbGF5IGFuIEhUTUwgb3V0cHV0IGZvcgordGhlIHBhY2thZ2UgaG9tZSBwYWdlLgorCitUaGUgYGBsb25nX2Rlc2NyaXB0aW9uYGAgZmllbGQgY2FuIGJlIGF0dGFjaGVkIHRvIGEgdGV4dCBmaWxlIGxvY2F0ZWQKK2luIHRoZSBwYWNrYWdlOjoKKworICAgIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCisKKyAgICB3aXRoIG9wZW4oJ1JFQURNRS50eHQnKSBhcyBmaWxlOgorICAgICAgICBsb25nX2Rlc2NyaXB0aW9uID0gZmlsZS5yZWFkKCkKKworICAgIHNldHVwKG5hbWU9J0Rpc3R1dGlscycsCisgICAgICAgICAgbG9uZ19kZXNjcmlwdGlvbj1sb25nX2Rlc2NyaXB0aW9uKQorCitJbiB0aGF0IGNhc2UsIDpmaWxlOmBSRUFETUUudHh0YCBpcyBhIHJlZ3VsYXIgcmVTdHJ1Y3R1cmVkVGV4dCB0ZXh0IGZpbGUgbG9jYXRlZAoraW4gdGhlIHJvb3Qgb2YgdGhlIHBhY2thZ2UgYmVzaWRlcyA6ZmlsZTpgc2V0dXAucHlgLgorCitUbyBwcmV2ZW50IHJlZ2lzdGVyaW5nIGJyb2tlbiByZVN0cnVjdHVyZWRUZXh0IGNvbnRlbnQsIHlvdSBjYW4gdXNlIHRoZQorOnByb2dyYW06YHJzdDJodG1sYCBwcm9ncmFtIHRoYXQgaXMgcHJvdmlkZWQgYnkgdGhlIDptb2Q6YGRvY3V0aWxzYCBwYWNrYWdlCithbmQgY2hlY2sgdGhlIGBgbG9uZ19kZXNjcmlwdGlvbmBgIGZyb20gdGhlIGNvbW1hbmQgbGluZTo6CisKKyAgICAkIHB5dGhvbiBzZXR1cC5weSAtLWxvbmctZGVzY3JpcHRpb24gfCByc3QyaHRtbC5weSA+IG91dHB1dC5odG1sCisKKzptb2Q6YGRvY3V0aWxzYCB3aWxsIGRpc3BsYXkgYSB3YXJuaW5nIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nIHdpdGggeW91ciBzeW50YXguCmRpZmYgLS1naXQgYS9Eb2MvZG9jdW1lbnRpbmcvbWFya3VwLnJzdCBiL0RvYy9kb2N1bWVudGluZy9tYXJrdXAucnN0CmluZGV4IGM2ZjViNzQuLmQ3ZDIzY2QgMTAwNjQ0Ci0tLSBhL0RvYy9kb2N1bWVudGluZy9tYXJrdXAucnN0CisrKyBiL0RvYy9kb2N1bWVudGluZy9tYXJrdXAucnN0CkBAIC01MjQsMTAgKzUyNCw2IEBACiAgICBJZiB5b3UgZG9uJ3QgbmVlZCB0aGUgInZhcmlhYmxlIHBhcnQiIGluZGljYXRpb24sIHVzZSB0aGUgc3RhbmRhcmQKICAgIGBgYGBjb2RlYGBgYCBpbnN0ZWFkLgogCi0uLiBkZXNjcmliZTo6IHZhcgotCi0gICBBIFB5dGhvbiBvciBDIHZhcmlhYmxlIG9yIHBhcmFtZXRlciBuYW1lLgotCiAKIFRoZSBmb2xsb3dpbmcgcm9sZXMgZ2VuZXJhdGUgZXh0ZXJuYWwgbGlua3M6CiAKQEAgLTY5OSwxMCArNjk1LDEwIEBACiAgICAgICAuLiB0b2N0cmVlOjoKICAgICAgICAgIDptYXhkZXB0aDogMgogCi0gICAgICAgICBpbnRyby5yc3QKLSAgICAgICAgIHN0cmluZ3MucnN0Ci0gICAgICAgICBkYXRhdHlwZXMucnN0Ci0gICAgICAgICBudW1lcmljLnJzdAorICAgICAgICAgaW50cm8KKyAgICAgICAgIHN0cmluZ3MKKyAgICAgICAgIGRhdGF0eXBlcworICAgICAgICAgbnVtZXJpYwogICAgICAgICAgKG1hbnkgbW9yZSBmaWxlcyBsaXN0ZWQgaGVyZSkKIAogICAgVGhpcyBhY2NvbXBsaXNoZXMgdHdvIHRoaW5nczoKQEAgLTcxMCw4ICs3MDYsOCBAQAogICAgKiBUYWJsZXMgb2YgY29udGVudHMgZnJvbSBhbGwgdGhvc2UgZmlsZXMgYXJlIGluc2VydGVkLCB3aXRoIGEgbWF4aW11bSBkZXB0aAogICAgICBvZiB0d28sIHRoYXQgbWVhbnMgb25lIG5lc3RlZCBoZWFkaW5nLiAgYGB0b2N0cmVlYGAgZGlyZWN0aXZlcyBpbiB0aG9zZQogICAgICBmaWxlcyBhcmUgYWxzbyB0YWtlbiBpbnRvIGFjY291bnQuCi0gICAqIFNwaGlueCBrbm93cyB0aGF0IHRoZSByZWxhdGl2ZSBvcmRlciBvZiB0aGUgZmlsZXMgYGBpbnRyby5yc3RgYCwKLSAgICAgYGBzdHJpbmdzLnJzdGBgIGFuZCBzbyBmb3J0aCwgYW5kIGl0IGtub3dzIHRoYXQgdGhleSBhcmUgY2hpbGRyZW4gb2YgdGhlCisgICAqIFNwaGlueCBrbm93cyB0aGF0IHRoZSByZWxhdGl2ZSBvcmRlciBvZiB0aGUgZmlsZXMgYGBpbnRyb2BgLAorICAgICBgYHN0cmluZ3NgYCBhbmQgc28gZm9ydGgsIGFuZCBpdCBrbm93cyB0aGF0IHRoZXkgYXJlIGNoaWxkcmVuIG9mIHRoZQogICAgICBzaG93biBmaWxlLCB0aGUgbGlicmFyeSBpbmRleC4gIEZyb20gdGhpcyBpbmZvcm1hdGlvbiBpdCBnZW5lcmF0ZXMgIm5leHQKICAgICAgY2hhcHRlciIsICJwcmV2aW91cyBjaGFwdGVyIiBhbmQgInBhcmVudCBjaGFwdGVyIiBsaW5rcy4KIApkaWZmIC0tZ2l0IGEvRG9jL2RvY3VtZW50aW5nL3N0eWxlLnJzdCBiL0RvYy9kb2N1bWVudGluZy9zdHlsZS5yc3QKaW5kZXggNjE0NTU1OS4uYzNkZGVkOSAxMDA2NDQKLS0tIGEvRG9jL2RvY3VtZW50aW5nL3N0eWxlLnJzdAorKysgYi9Eb2MvZG9jdW1lbnRpbmcvc3R5bGUucnN0CkBAIC03LDcgKzcsNyBAQAogd2hlcmV2ZXIgcG9zc2libGUuIFRoaXMgcGFydGljdWxhciBzdHlsZSBndWlkZSB3YXMgc2VsZWN0ZWQgbW9zdGx5IGJlY2F1c2UgaXQKIHNlZW1zIHJlYXNvbmFibGUgYW5kIGlzIGVhc3kgdG8gZ2V0IG9ubGluZS4KIAotVG9waWNzIHdoaWNoIGFyZSBub3QgY292ZXJlZCBpbiB0aGUgQXBwbGUncyBzdHlsZSBndWlkZSB3aWxsIGJlIGRpc2N1c3NlZCBpbgorVG9waWNzIHdoaWNoIGFyZSBub3QgY292ZXJlZCBpbiBBcHBsZSdzIHN0eWxlIGd1aWRlIHdpbGwgYmUgZGlzY3Vzc2VkIGluCiB0aGlzIGRvY3VtZW50LgogCiBBbGwgcmVTVCBmaWxlcyB1c2UgYW4gaW5kZW50YXRpb24gb2YgMyBzcGFjZXMuICBUaGUgbWF4aW11bSBsaW5lIGxlbmd0aCBpcyA4MApkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9leHRlbmRpbmcucnN0IGIvRG9jL2V4dGVuZGluZy9leHRlbmRpbmcucnN0CmluZGV4IDU4ODUzNGEuLmFkNmE5ZjMgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvZXh0ZW5kaW5nLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL2V4dGVuZGluZy5yc3QKQEAgLTg5LDEwICs4OSw4IEBACiBmdW5jdGlvbi4gIFRoZSBDIGZ1bmN0aW9uIGFsd2F5cyBoYXMgdHdvIGFyZ3VtZW50cywgY29udmVudGlvbmFsbHkgbmFtZWQgKnNlbGYqCiBhbmQgKmFyZ3MqLgogCi1UaGUgKnNlbGYqIGFyZ3VtZW50IGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBDIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBidWlsdC1pbgotbWV0aG9kLCBub3QgYSBmdW5jdGlvbi4gSW4gdGhlIGV4YW1wbGUsICpzZWxmKiB3aWxsIGFsd2F5cyBiZSBhICpOVUxMKiBwb2ludGVyLAotc2luY2Ugd2UgYXJlIGRlZmluaW5nIGEgZnVuY3Rpb24sIG5vdCBhIG1ldGhvZC4gIChUaGlzIGlzIGRvbmUgc28gdGhhdCB0aGUKLWludGVycHJldGVyIGRvZXNuJ3QgaGF2ZSB0byB1bmRlcnN0YW5kIHR3byBkaWZmZXJlbnQgdHlwZXMgb2YgQyBmdW5jdGlvbnMuKQorVGhlICpzZWxmKiBhcmd1bWVudCBwb2ludHMgdG8gdGhlIG1vZHVsZSBvYmplY3QgZm9yIG1vZHVsZS1sZXZlbCBmdW5jdGlvbnM7Citmb3IgYSBtZXRob2QgaXQgd291bGQgcG9pbnQgdG8gdGhlIG9iamVjdCBpbnN0YW5jZS4KIAogVGhlICphcmdzKiBhcmd1bWVudCB3aWxsIGJlIGEgcG9pbnRlciB0byBhIFB5dGhvbiB0dXBsZSBvYmplY3QgY29udGFpbmluZyB0aGUKIGFyZ3VtZW50cy4gIEVhY2ggaXRlbSBvZiB0aGUgdHVwbGUgY29ycmVzcG9uZHMgdG8gYW4gYXJndW1lbnQgaW4gdGhlIGNhbGwncwpAQCAtMzkxLDEyICszODksNyBAQAogCiBBIG1vcmUgc3Vic3RhbnRpYWwgZXhhbXBsZSBtb2R1bGUgaXMgaW5jbHVkZWQgaW4gdGhlIFB5dGhvbiBzb3VyY2UgZGlzdHJpYnV0aW9uCiBhcyA6ZmlsZTpgTW9kdWxlcy94eG1vZHVsZS5jYC4gIFRoaXMgZmlsZSBtYXkgYmUgdXNlZCBhcyBhICB0ZW1wbGF0ZSBvciBzaW1wbHkKLXJlYWQgYXMgYW4gZXhhbXBsZS4gIFRoZSA6cHJvZ3JhbTpgbW9kdWxhdG9yLnB5YCBzY3JpcHQgaW5jbHVkZWQgaW4gdGhlIHNvdXJjZQotZGlzdHJpYnV0aW9uIG9yIFdpbmRvd3MgaW5zdGFsbCBwcm92aWRlcyAgYSBzaW1wbGUgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvcgotZGVjbGFyaW5nIHRoZSBmdW5jdGlvbnMgYW5kIG9iamVjdHMgd2hpY2ggYSBtb2R1bGUgc2hvdWxkIGltcGxlbWVudCwgYW5kIGNhbgotZ2VuZXJhdGUgYSB0ZW1wbGF0ZSB3aGljaCBjYW4gYmUgZmlsbGVkIGluLiAgVGhlIHNjcmlwdCBsaXZlcyBpbiB0aGUKLTpmaWxlOmBUb29scy9tb2R1bGF0b3IvYCBkaXJlY3Rvcnk7IHNlZSB0aGUgOmZpbGU6YFJFQURNRWAgZmlsZSB0aGVyZSBmb3IgbW9yZQotaW5mb3JtYXRpb24uCityZWFkIGFzIGFuIGV4YW1wbGUuCiAKIAogLi4gX2NvbXBpbGF0aW9uOgpAQCAtMTA4NCw3ICsxMDc3LDcgQEAKIGRlZmluZSB0aGlzIHN5bWJvbCkuCiAKIAotLi4gX3VzaW5nLWNvYmplY3RzOgorLi4gX3VzaW5nLWNhcHN1bGVzOgogCiBQcm92aWRpbmcgYSBDIEFQSSBmb3IgYW4gRXh0ZW5zaW9uIE1vZHVsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTExMjAsMjMgKzExMTMsNDAgQEAKIG90aGVyIGV4dGVuc2lvbiBtb2R1bGVzIG11c3QgYmUgZXhwb3J0ZWQgaW4gYSBkaWZmZXJlbnQgd2F5LgogCiBQeXRob24gcHJvdmlkZXMgYSBzcGVjaWFsIG1lY2hhbmlzbSB0byBwYXNzIEMtbGV2ZWwgaW5mb3JtYXRpb24gKHBvaW50ZXJzKSBmcm9tCi1vbmUgZXh0ZW5zaW9uIG1vZHVsZSB0byBhbm90aGVyIG9uZTogQ09iamVjdHMuIEEgQ09iamVjdCBpcyBhIFB5dGhvbiBkYXRhIHR5cGUKLXdoaWNoIHN0b3JlcyBhIHBvaW50ZXIgKDpjdHlwZTpgdm9pZCBcKmApLiAgQ09iamVjdHMgY2FuIG9ubHkgYmUgY3JlYXRlZCBhbmQKK29uZSBleHRlbnNpb24gbW9kdWxlIHRvIGFub3RoZXIgb25lOiBDYXBzdWxlcy4gQSBDYXBzdWxlIGlzIGEgUHl0aG9uIGRhdGEgdHlwZQord2hpY2ggc3RvcmVzIGEgcG9pbnRlciAoOmN0eXBlOmB2b2lkIFwqYCkuICBDYXBzdWxlcyBjYW4gb25seSBiZSBjcmVhdGVkIGFuZAogYWNjZXNzZWQgdmlhIHRoZWlyIEMgQVBJLCBidXQgdGhleSBjYW4gYmUgcGFzc2VkIGFyb3VuZCBsaWtlIGFueSBvdGhlciBQeXRob24KIG9iamVjdC4gSW4gcGFydGljdWxhciwgIHRoZXkgY2FuIGJlIGFzc2lnbmVkIHRvIGEgbmFtZSBpbiBhbiBleHRlbnNpb24gbW9kdWxlJ3MKIG5hbWVzcGFjZS4gT3RoZXIgZXh0ZW5zaW9uIG1vZHVsZXMgY2FuIHRoZW4gaW1wb3J0IHRoaXMgbW9kdWxlLCByZXRyaWV2ZSB0aGUKLXZhbHVlIG9mIHRoaXMgbmFtZSwgYW5kIHRoZW4gcmV0cmlldmUgdGhlIHBvaW50ZXIgZnJvbSB0aGUgQ09iamVjdC4KK3ZhbHVlIG9mIHRoaXMgbmFtZSwgYW5kIHRoZW4gcmV0cmlldmUgdGhlIHBvaW50ZXIgZnJvbSB0aGUgQ2Fwc3VsZS4KIAotVGhlcmUgYXJlIG1hbnkgd2F5cyBpbiB3aGljaCBDT2JqZWN0cyBjYW4gYmUgdXNlZCB0byBleHBvcnQgdGhlIEMgQVBJIG9mIGFuCi1leHRlbnNpb24gbW9kdWxlLiBFYWNoIG5hbWUgY291bGQgZ2V0IGl0cyBvd24gQ09iamVjdCwgb3IgYWxsIEMgQVBJIHBvaW50ZXJzCi1jb3VsZCBiZSBzdG9yZWQgaW4gYW4gYXJyYXkgd2hvc2UgYWRkcmVzcyBpcyBwdWJsaXNoZWQgaW4gYSBDT2JqZWN0LiBBbmQgdGhlCitUaGVyZSBhcmUgbWFueSB3YXlzIGluIHdoaWNoIENhcHN1bGVzIGNhbiBiZSB1c2VkIHRvIGV4cG9ydCB0aGUgQyBBUEkgb2YgYW4KK2V4dGVuc2lvbiBtb2R1bGUuIEVhY2ggZnVuY3Rpb24gY291bGQgZ2V0IGl0cyBvd24gQ2Fwc3VsZSwgb3IgYWxsIEMgQVBJIHBvaW50ZXJzCitjb3VsZCBiZSBzdG9yZWQgaW4gYW4gYXJyYXkgd2hvc2UgYWRkcmVzcyBpcyBwdWJsaXNoZWQgaW4gYSBDYXBzdWxlLiBBbmQgdGhlCiB2YXJpb3VzIHRhc2tzIG9mIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgdGhlIHBvaW50ZXJzIGNhbiBiZSBkaXN0cmlidXRlZCBpbgogZGlmZmVyZW50IHdheXMgYmV0d2VlbiB0aGUgbW9kdWxlIHByb3ZpZGluZyB0aGUgY29kZSBhbmQgdGhlIGNsaWVudCBtb2R1bGVzLgogCitXaGljaGV2ZXIgbWV0aG9kIHlvdSBjaG9vc2UsIGl0J3MgaW1wb3J0YW50IHRvIG5hbWUgeW91ciBDYXBzdWxlcyBwcm9wZXJseS4KK1RoZSBmdW5jdGlvbiA6Y2Z1bmM6YFB5Q2Fwc3VsZV9OZXdgIHRha2VzIGEgbmFtZSBwYXJhbWV0ZXIKKyg6Y3R5cGU6YGNvbnN0IGNoYXIgXCpgKTsgeW91J3JlIHBlcm1pdHRlZCB0byBwYXNzIGluIGEgKk5VTEwqIG5hbWUsIGJ1dAord2Ugc3Ryb25nbHkgZW5jb3VyYWdlIHlvdSB0byBzcGVjaWZ5IGEgbmFtZS4gIFByb3Blcmx5IG5hbWVkIENhcHN1bGVzIHByb3ZpZGUKK2EgZGVncmVlIG9mIHJ1bnRpbWUgdHlwZS1zYWZldHk7IHRoZXJlIGlzIG5vIGZlYXNpYmxlIHdheSB0byB0ZWxsIG9uZSB1bm5hbWVkCitDYXBzdWxlIGZyb20gYW5vdGhlci4KKworSW4gcGFydGljdWxhciwgQ2Fwc3VsZXMgdXNlZCB0byBleHBvc2UgQyBBUElzIHNob3VsZCBiZSBnaXZlbiBhIG5hbWUgZm9sbG93aW5nCit0aGlzIGNvbnZlbnRpb246OgorCisgICAgbW9kdWxlbmFtZS5hdHRyaWJ1dGVuYW1lCisKK1RoZSBjb252ZW5pZW5jZSBmdW5jdGlvbiA6Y2Z1bmM6YFB5Q2Fwc3VsZV9JbXBvcnRgIG1ha2VzIGl0IGVhc3kgdG8KK2xvYWQgYSBDIEFQSSBwcm92aWRlZCB2aWEgYSBDYXBzdWxlLCBidXQgb25seSBpZiB0aGUgQ2Fwc3VsZSdzIG5hbWUKK21hdGNoZXMgdGhpcyBjb252ZW50aW9uLiAgVGhpcyBiZWhhdmlvciBnaXZlcyBDIEFQSSB1c2VycyBhIGhpZ2ggZGVncmVlCitvZiBjZXJ0YWludHkgdGhhdCB0aGUgQ2Fwc3VsZSB0aGV5IGxvYWQgY29udGFpbnMgdGhlIGNvcnJlY3QgQyBBUEkuCisKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgYW4gYXBwcm9hY2ggdGhhdCBwdXRzIG1vc3Qgb2YgdGhlIGJ1cmRlbiBvbgogdGhlIHdyaXRlciBvZiB0aGUgZXhwb3J0aW5nIG1vZHVsZSwgd2hpY2ggaXMgYXBwcm9wcmlhdGUgZm9yIGNvbW1vbmx5IHVzZWQKIGxpYnJhcnkgbW9kdWxlcy4gSXQgc3RvcmVzIGFsbCBDIEFQSSBwb2ludGVycyAoanVzdCBvbmUgaW4gdGhlIGV4YW1wbGUhKSBpbiBhbgotYXJyYXkgb2YgOmN0eXBlOmB2b2lkYCBwb2ludGVycyB3aGljaCBiZWNvbWVzIHRoZSB2YWx1ZSBvZiBhIENPYmplY3QuIFRoZSBoZWFkZXIKK2FycmF5IG9mIDpjdHlwZTpgdm9pZGAgcG9pbnRlcnMgd2hpY2ggYmVjb21lcyB0aGUgdmFsdWUgb2YgYSBDYXBzdWxlLiBUaGUgaGVhZGVyCiBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZHVsZSBwcm92aWRlcyBhIG1hY3JvIHRoYXQgdGFrZXMgY2FyZSBvZiBpbXBvcnRpbmcKIHRoZSBtb2R1bGUgYW5kIHJldHJpZXZpbmcgaXRzIEMgQVBJIHBvaW50ZXJzOyBjbGllbnQgbW9kdWxlcyBvbmx5IGhhdmUgdG8gY2FsbAogdGhpcyBtYWNybyBiZWZvcmUgYWNjZXNzaW5nIHRoZSBDIEFQSS4KQEAgLTExOTgsOCArMTIwOCw4IEBACiAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgQyBBUEkgcG9pbnRlciBhcnJheSAqLwogICAgICAgIFB5U3BhbV9BUElbUHlTcGFtX1N5c3RlbV9OVU1dID0gKHZvaWQgKilQeVNwYW1fU3lzdGVtOwogCi0gICAgICAgLyogQ3JlYXRlIGEgQ09iamVjdCBjb250YWluaW5nIHRoZSBBUEkgcG9pbnRlciBhcnJheSdzIGFkZHJlc3MgKi8KLSAgICAgICBjX2FwaV9vYmplY3QgPSBQeUNPYmplY3RfRnJvbVZvaWRQdHIoKHZvaWQgKilQeVNwYW1fQVBJLCBOVUxMKTsKKyAgICAgICAvKiBDcmVhdGUgYSBDYXBzdWxlIGNvbnRhaW5pbmcgdGhlIEFQSSBwb2ludGVyIGFycmF5J3MgYWRkcmVzcyAqLworICAgICAgIGNfYXBpX29iamVjdCA9IFB5Q2Fwc3VsZV9OZXcoKHZvaWQgKilQeVNwYW1fQVBJLCAic3BhbS5fQ19BUEkiLCBOVUxMKTsKIAogICAgICAgIGlmIChjX2FwaV9vYmplY3QgIT0gTlVMTCkKICAgICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJfQ19BUEkiLCBjX2FwaV9vYmplY3QpOwpAQCAtMTI0MSwyOCArMTI1MSwxNCBAQAogICAgI2RlZmluZSBQeVNwYW1fU3lzdGVtIFwKICAgICAoKihQeVNwYW1fU3lzdGVtX1JFVFVSTiAoKilQeVNwYW1fU3lzdGVtX1BST1RPKSBQeVNwYW1fQVBJW1B5U3BhbV9TeXN0ZW1fTlVNXSkKIAotICAgLyogUmV0dXJuIC0xIGFuZCBzZXQgZXhjZXB0aW9uIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MuICovCisgICAvKiBSZXR1cm4gLTEgb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4KKyAgICAqIFB5Q2Fwc3VsZV9JbXBvcnQgd2lsbCBzZXQgYW4gZXhjZXB0aW9uIGlmIHRoZXJlJ3MgYW4gZXJyb3IuCisgICAgKi8KICAgIHN0YXRpYyBpbnQKICAgIGltcG9ydF9zcGFtKHZvaWQpCiAgICB7Ci0gICAgICAgUHlPYmplY3QgKmNfYXBpX29iamVjdDsKLSAgICAgICBQeU9iamVjdCAqbW9kdWxlOwotCi0gICAgICAgbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJzcGFtIik7Ci0gICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQotICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICBjX2FwaV9vYmplY3QgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG1vZHVsZSwgIl9DX0FQSSIpOwotICAgICAgIGlmIChjX2FwaV9vYmplY3QgPT0gTlVMTCkgewotICAgICAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKLSAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgIH0KLSAgICAgICBpZiAoUHlDT2JqZWN0X0NoZWNrKGNfYXBpX29iamVjdCkpCi0gICAgICAgICAgIFB5U3BhbV9BUEkgPSAodm9pZCAqKilQeUNPYmplY3RfQXNWb2lkUHRyKGNfYXBpX29iamVjdCk7Ci0KLSAgICAgICBQeV9ERUNSRUYoY19hcGlfb2JqZWN0KTsKLSAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKLSAgICAgICByZXR1cm4gMDsKKyAgICAgICBQeVNwYW1fQVBJID0gKHZvaWQgKiopUHlDYXBzdWxlX0ltcG9ydCgic3BhbS5fQ19BUEkiLCAwKTsKKyAgICAgICByZXR1cm4gKFB5U3BhbV9BUEkgIT0gTlVMTCkgPyAwIDogLTE7CiAgICB9CiAKICAgICNlbmRpZgpAQCAtMTI5NCwxMSArMTI5MCwxMSBAQAogcmF0aGVyIGNvbXBsaWNhdGVkLiBIb3dldmVyLCB0aGUgYmFzaWMgc3RydWN0dXJlIGlzIHRoZSBzYW1lIGZvciBlYWNoIGZ1bmN0aW9uCiB0aGF0IGlzIGV4cG9ydGVkLCBzbyBpdCBoYXMgdG8gYmUgbGVhcm5lZCBvbmx5IG9uY2UuCiAKLUZpbmFsbHkgaXQgc2hvdWxkIGJlIG1lbnRpb25lZCB0aGF0IENPYmplY3RzIG9mZmVyIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSwKK0ZpbmFsbHkgaXQgc2hvdWxkIGJlIG1lbnRpb25lZCB0aGF0IENhcHN1bGVzIG9mZmVyIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSwKIHdoaWNoIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIHRoZSBwb2ludGVyCi1zdG9yZWQgaW4gYSBDT2JqZWN0LiBUaGUgZGV0YWlscyBhcmUgZGVzY3JpYmVkIGluIHRoZSBQeXRob24vQyBBUEkgUmVmZXJlbmNlCi1NYW51YWwgaW4gdGhlIHNlY3Rpb24gOnJlZjpgY29iamVjdHNgIGFuZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ09iamVjdHMgKGZpbGVzCi06ZmlsZTpgSW5jbHVkZS9jb2JqZWN0LmhgIGFuZCA6ZmlsZTpgT2JqZWN0cy9jb2JqZWN0LmNgIGluIHRoZSBQeXRob24gc291cmNlCitzdG9yZWQgaW4gYSBDYXBzdWxlLiBUaGUgZGV0YWlscyBhcmUgZGVzY3JpYmVkIGluIHRoZSBQeXRob24vQyBBUEkgUmVmZXJlbmNlCitNYW51YWwgaW4gdGhlIHNlY3Rpb24gOnJlZjpgY2Fwc3VsZXNgIGFuZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ2Fwc3VsZXMgKGZpbGVzCis6ZmlsZTpgSW5jbHVkZS9weWNhcHN1bGUuaGAgYW5kIDpmaWxlOmBPYmplY3RzL3B5Y2Fwc3VsZS5jYCBpbiB0aGUgUHl0aG9uIHNvdXJjZQogY29kZSBkaXN0cmlidXRpb24pLgogCiAuLiBydWJyaWM6OiBGb290bm90ZXMKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvd2luZG93cy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL3dpbmRvd3MucnN0CmluZGV4IGFhYzFkMmQuLmJlYjJlZTQgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvd2luZG93cy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy93aW5kb3dzLnJzdApAQCAtMTE0LDcgKzExNCw3IEBACiAgICBOb3cgeW91ciBvcHRpb25zIGFyZToKIAogIy4gQ29weSA6ZmlsZTpgZXhhbXBsZS5zbG5gIGFuZCA6ZmlsZTpgZXhhbXBsZS52Y3Byb2pgLCByZW5hbWUgdGhlbSB0bwotICAgICAgOmZpbGU6YHNwYW0uXCpgLCBhbmQgZWRpdCB0aGVtIGJ5IGhhbmQsIG9yCisgICA6ZmlsZTpgc3BhbS5cKmAsIGFuZCBlZGl0IHRoZW0gYnkgaGFuZCwgb3IKIAogIy4gQ3JlYXRlIGEgYnJhbmQgbmV3IHByb2plY3Q7IGluc3RydWN0aW9ucyBhcmUgYmVsb3cuCiAKQEAgLTE3NSwxNiArMTc1LDE2IEBACiAKICAgIFB5T2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUpCiAKLUNoYW5nZSBpdCB0bzo6CitTdGF0aWMgdHlwZSBvYmplY3QgaW5pdGlhbGl6ZXJzIGluIGV4dGVuc2lvbiBtb2R1bGVzIG1heSBjYXVzZQorY29tcGlsZXMgdG8gZmFpbCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgbGlrZSAiaW5pdGlhbGl6ZXIgbm90IGEKK2NvbnN0YW50Ii4gIFRoaXMgc2hvd3MgdXAgd2hlbiBidWlsZGluZyBETEwgdW5kZXIgTVNWQy4gIENoYW5nZSBpdCB0bzo6CiAKICAgIFB5T2JqZWN0X0hFQURfSU5JVChOVUxMKQogCiBhbmQgYWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjo6CiAKLSAgIE15T2JqZWN0X1R5cGUub2JfdHlwZSA9ICZQeVR5cGVfVHlwZTsKLQotUmVmZXIgdG8gc2VjdGlvbiAzIG9mIHRoZSBgUHl0aG9uIEZBUSA8aHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9mYXE+YF8gZm9yCi1kZXRhaWxzIG9uIHdoeSB5b3UgbXVzdCBkbyB0aGlzLgorICAgaWYgKFB5VHlwZV9SZWFkeSgmTXlPYmplY3RfVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogCiAuLiBfZHluYW1pYy1saW5raW5nOgpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9kZXNpZ24ucnN0IGIvRG9jL2ZhcS9kZXNpZ24ucnN0CmluZGV4IDJlMmNlMmUuLjA5NDM3OTYgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvZGVzaWduLnJzdAorKysgYi9Eb2MvZmFxL2Rlc2lnbi5yc3QKQEAgLTI4LDcgKzI4LDcgQEAKIElmIHlvdSdyZSB1c2VkIHRvIHJlYWRpbmcgYW5kIHdyaXRpbmcgY29kZSB0aGF0IHVzZXMgb25lIHN0eWxlLCB5b3Ugd2lsbCBmZWVsIGF0CiBsZWFzdCBzbGlnaHRseSB1bmVhc3kgd2hlbiByZWFkaW5nIChvciBiZWluZyByZXF1aXJlZCB0byB3cml0ZSkgYW5vdGhlciBzdHlsZS4KIAotTWFueSBjb2Rpbmcgc3R5bGVzIHBsYWNlIGJlZ2luL2VuZCBicmFja2V0cyBvbiBhIGxpbmUgYnkgdGhlbXNlbGYuICBUaGlzIG1ha2VzCitNYW55IGNvZGluZyBzdHlsZXMgcGxhY2UgYmVnaW4vZW5kIGJyYWNrZXRzIG9uIGEgbGluZSBieSB0aGVtc2VsdmVzLiAgVGhpcyBtYWtlcwogcHJvZ3JhbXMgY29uc2lkZXJhYmx5IGxvbmdlciBhbmQgd2FzdGVzIHZhbHVhYmxlIHNjcmVlbiBzcGFjZSwgbWFraW5nIGl0IGhhcmRlcgogdG8gZ2V0IGEgZ29vZCBvdmVydmlldyBvZiBhIHByb2dyYW0uICBJZGVhbGx5LCBhIGZ1bmN0aW9uIHNob3VsZCBmaXQgb24gb25lCiBzY3JlZW4gKHNheSwgMjAtMzAgbGluZXMpLiAgMjAgbGluZXMgb2YgUHl0aG9uIGNhbiBkbyBhIGxvdCBtb3JlIHdvcmsgdGhhbiAyMApAQCAtNzUsOSArNzUsOSBAQAogZnVuY3Rpb24gcHJpbnRzIGZld2VyIGRpZ2l0cyBhbmQgdGhpcyBvZnRlbiByZXN1bHRzIGluIHRoZSBtb3JlIHNlbnNpYmxlIG51bWJlcgogdGhhdCB3YXMgcHJvYmFibHkgaW50ZW5kZWQ6OgogCi0gICA+Pj4gMC4yCi0gICAwLjIwMDAwMDAwMDAwMDAwMDAxCi0gICA+Pj4gcHJpbnQgMC4yCisgICA+Pj4gMS4xIC0gMC45CisgICAwLjIwMDAwMDAwMDAwMDAwMDA3CisgICA+Pj4gcHJpbnQgMS4xIC0gMC45CiAgICAwLjIKIAogT25lIG9mIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBpcyB0aGF0IGl0IGlzIGVycm9yLXByb25lIHRvIGNvbXBhcmUgdGhlIHJlc3VsdApkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9ndWkucnN0IGIvRG9jL2ZhcS9ndWkucnN0CmluZGV4IDFmMmFlMDkuLmQzN2Y0ODAgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvZ3VpLnJzdAorKysgYi9Eb2MvZmFxL2d1aS5yc3QKQEAgLTYsMTggKzYsMTUgQEAKIAogLi4gY29udGVudHM6OgogCi1HZW5lcmFsIEdVSSBRdWVzdGlvbnMKLT09PT09PT09PT09PT09PT09PT09PQotCiBXaGF0IHBsYXRmb3JtLWluZGVwZW5kZW50IEdVSSB0b29sa2l0cyBleGlzdCBmb3IgUHl0aG9uPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIERlcGVuZGluZyBvbiB3aGF0IHBsYXRmb3JtKHMpIHlvdSBhcmUgYWltaW5nIGF0LCB0aGVyZSBhcmUgc2V2ZXJhbC4KIAogLi4gWFhYIGNoZWNrIGxpbmtzCiAKIFRraW50ZXIKLScnJycnJycKKy0tLS0tLS0KIAogU3RhbmRhcmQgYnVpbGRzIG9mIFB5dGhvbiBpbmNsdWRlIGFuIG9iamVjdC1vcmllbnRlZCBpbnRlcmZhY2UgdG8gdGhlIFRjbC9Uawogd2lkZ2V0IHNldCwgY2FsbGVkIFRraW50ZXIuICBUaGlzIGlzIHByb2JhYmx5IHRoZSBlYXNpZXN0IHRvIGluc3RhbGwgYW5kIHVzZS4KQEAgLTI2LDIyICsyMywyNyBAQAogVW5peCBwbGF0Zm9ybXMuCiAKIHd4V2lkZ2V0cwotJycnJycnJycnCistLS0tLS0tLS0KIAotd3hXaWRnZXRzIGlzIGEgR1VJIGNsYXNzIGxpYnJhcnkgd3JpdHRlbiBpbiBDKysgdGhhdCdzIGEgcG9ydGFibGUKLWludGVyZmFjZSB0byB2YXJpb3VzIHBsYXRmb3JtLXNwZWNpZmljIGxpYnJhcmllcywgYW5kIHRoYXQgaGFzIGEKLVB5dGhvbiBpbnRlcmZhY2UgY2FsbGVkIGB3eFB5dGhvbiA8aHR0cDovL3d3dy53eHB5dGhvbi5vcmc+YF9fLgord3hXaWRnZXRzIChodHRwOi8vd3d3Lnd4d2lkZ2V0cy5vcmcpIGlzIGEgZnJlZSwgcG9ydGFibGUgR1VJIGNsYXNzCitsaWJyYXJ5IHdyaXR0ZW4gaW4gQysrIHRoYXQgcHJvdmlkZXMgYSBuYXRpdmUgbG9vayBhbmQgZmVlbCBvbiBhCitudW1iZXIgb2YgcGxhdGZvcm1zLCB3aXRoIFdpbmRvd3MsIE1hY09TIFgsIEdUSywgWDExLCBhbGwgbGlzdGVkIGFzCitjdXJyZW50IHN0YWJsZSB0YXJnZXRzLiAgTGFuZ3VhZ2UgYmluZGluZ3MgYXJlIGF2YWlsYWJsZSBmb3IgYSBudW1iZXIKK29mIGxhbmd1YWdlcyBpbmNsdWRpbmcgUHl0aG9uLCBQZXJsLCBSdWJ5LCBldGMuCiAKLXd4V2lkZ2V0cyBwcmVzZXJ2ZXMgdGhlIGxvb2sgYW5kIGZlZWwgb2YgdGhlCi11bmRlcmx5aW5nIGdyYXBoaWNzIHRvb2xraXQsIGFuZCBoYXMgYSBsYXJnZSBzZXQgb2Ygd2lkZ2V0cyBhbmQKLWNvbGxlY3Rpb24gb2YgR0RJIGNsYXNzZXMuICBTZWUgYHRoZSB3eFdpZGdldHMgcGFnZQotPGh0dHA6Ly93d3cud3h3aWRnZXRzLm9yZz5gXyBmb3IgbW9yZSBkZXRhaWxzLgord3hQeXRob24gKGh0dHA6Ly93d3cud3hweXRob24ub3JnKSBpcyB0aGUgUHl0aG9uIGJpbmRpbmcgZm9yCit3eHdpZGdldHMuICBXaGlsZSBpdCBvZnRlbiBsYWdzIHNsaWdodGx5IGJlaGluZCB0aGUgb2ZmaWNpYWwgd3hXaWRnZXRzCityZWxlYXNlcywgaXQgYWxzbyBvZmZlcnMgYSBudW1iZXIgb2YgZmVhdHVyZXMgdmlhIHB1cmUgUHl0aG9uCitleHRlbnNpb25zIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2UgYmluZGluZ3MuICBUaGVyZQoraXMgYW4gYWN0aXZlIHd4UHl0aG9uIHVzZXIgYW5kIGRldmVsb3BlciBjb21tdW5pdHkuCiAKLXd4V2lkZ2V0cyBzdXBwb3J0cyBXaW5kb3dzIGFuZCBNYWNPUzsgb24gVW5peCB2YXJpYW50cywKLWl0IHN1cHBvcnRzIGJvdGggR1RrKyBhbmQgTW90aWYgdG9vbGtpdHMuCitCb3RoIHd4V2lkZ2V0cyBhbmQgd3hQeXRob24gYXJlIGZyZWUsIG9wZW4gc291cmNlLCBzb2Z0d2FyZSB3aXRoCitwZXJtaXNzaXZlIGxpY2VuY2VzIHRoYXQgYWxsb3cgdGhlaXIgdXNlIGluIGNvbW1lcmNpYWwgcHJvZHVjdHMgYXMKK3dlbGwgYXMgaW4gZnJlZXdhcmUgb3Igc2hhcmV3YXJlLgorCiAKIFF0Ci0nJycKKy0tLQogCiBUaGVyZSBhcmUgYmluZGluZ3MgYXZhaWxhYmxlIGZvciB0aGUgUXQgdG9vbGtpdCAoYFB5UXQKIDxodHRwOi8vd3d3LnJpdmVyYmFua2NvbXB1dGluZy5jby51ay9zb2Z0d2FyZS9weXF0Lz5gXykgYW5kIGZvciBLREUgKGBQeUtERSA8aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvcHlrZGUvaW50cm8+YF9fKS4gIElmCkBAIC01MiwxMyArNTQsMTMgQEAKIDxodHRwOi8vd3d3LnRyb2xsdGVjaC5jb20+YF8uCiAKIEd0aysKLScnJycKKy0tLS0KIAogUHlHdGsgYmluZGluZ3MgZm9yIHRoZSBgR3RrKyB0b29sa2l0IDxodHRwOi8vd3d3Lmd0ay5vcmc+YF8gaGF2ZSBiZWVuCiBpbXBsZW1lbnRlZCBieSBKYW1lcyBIZW5zdHJpZGdlOyBzZWUgPGh0dHA6Ly93d3cucHlndGsub3JnPi4KIAogRkxUSwotJycnJworLS0tLQogCiBQeXRob24gYmluZGluZ3MgZm9yIGB0aGUgRkxUSyB0b29sa2l0IDxodHRwOi8vd3d3LmZsdGsub3JnPmBfLCBhIHNpbXBsZSB5ZXQKIHBvd2VyZnVsIGFuZCBtYXR1cmUgY3Jvc3MtcGxhdGZvcm0gd2luZG93aW5nIHN5c3RlbSwgYXJlIGF2YWlsYWJsZSBmcm9tIGB0aGUKQEAgLTY2LDcgKzY4LDcgQEAKIAogCiBGT1gKLScnJworLS0tLQogCiBBIHdyYXBwZXIgZm9yIGB0aGUgRk9YIHRvb2xraXQgPGh0dHA6Ly93d3cuZm94LXRvb2xraXQub3JnLz5gXyBjYWxsZWQgYEZYcHkKIDxodHRwOi8vZnhweS5zb3VyY2Vmb3JnZS5uZXQvPmBfIGlzIGF2YWlsYWJsZS4gIEZPWCBzdXBwb3J0cyBib3RoIFVuaXggdmFyaWFudHMKQEAgLTc0LDEzICs3NiwxMyBAQAogCiAKIE9wZW5HTAotJycnJycnCistLS0tLS0KIAogRm9yIE9wZW5HTCBiaW5kaW5ncywgc2VlIGBQeU9wZW5HTCA8aHR0cDovL3B5b3BlbmdsLnNvdXJjZWZvcmdlLm5ldD5gXy4KIAogCiBXaGF0IHBsYXRmb3JtLXNwZWNpZmljIEdVSSB0b29sa2l0cyBleGlzdCBmb3IgUHl0aG9uPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIGBUaGUgTWFjIHBvcnQgPGh0dHA6Ly9weXRob24ub3JnL2Rvd25sb2FkL21hYz5gXyBieSBKYWNrIEphbnNlbiBoYXMgYSByaWNoIGFuZAogZXZlci1ncm93aW5nIHNldCBvZiBtb2R1bGVzIHRoYXQgc3VwcG9ydCB0aGUgbmF0aXZlIE1hYyB0b29sYm94IGNhbGxzLiAgVGhlIHBvcnQKZGlmZiAtLWdpdCBhL0RvYy9mYXEvbGlicmFyeS5yc3QgYi9Eb2MvZmFxL2xpYnJhcnkucnN0CmluZGV4IDRiMGMzZDMuLmMxMjJkNzIgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvbGlicmFyeS5yc3QKKysrIGIvRG9jL2ZhcS9saWJyYXJ5LnJzdApAQCAtNDU4LDcgKzQ1OCw3IEBACiAKIFRvIHRydW5jYXRlIGEgZmlsZSwgb3BlbiBpdCB1c2luZyBgYGYgPSBvcGVuKGZpbGVuYW1lLCAicisiKWBgLCBhbmQgdXNlCiBgYGYudHJ1bmNhdGUob2Zmc2V0KWBgOyBvZmZzZXQgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgc2VlayBwb3NpdGlvbi4gIFRoZXJlJ3MKLWFsc28gYGBgb3MuZnRydW5jYXRlKGZkLCBvZmZzZXQpYGAgZm9yIGZpbGVzIG9wZW5lZCB3aXRoIDpmdW5jOmBvcy5vcGVuYCwgd2hlcmUKK2Fsc28gYGBvcy5mdHJ1bmNhdGUoZmQsIG9mZnNldClgYCBmb3IgZmlsZXMgb3BlbmVkIHdpdGggOmZ1bmM6YG9zLm9wZW5gLCB3aGVyZQogYGBmZGBgIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgKGEgc21hbGwgaW50ZWdlcikuCiAKIFRoZSA6bW9kOmBzaHV0aWxgIG1vZHVsZSBhbHNvIGNvbnRhaW5zIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0byB3b3JrIG9uIGZpbGVzCkBAIC02NzIsOSArNjcyLDggQEAKICAgIGlmIHJlcGx5ICE9IDIwMDoKICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGh0dHBvYmouZ2V0ZmlsZSgpLnJlYWQoKSkKIAotTm90ZSB0aGF0IGluIGdlbmVyYWwgZm9yIFVSTC1lbmNvZGVkIFBPU1Qgb3BlcmF0aW9ucywgcXVlcnkgc3RyaW5ncyBtdXN0IGJlCi1xdW90ZWQgYnkgdXNpbmcgOmZ1bmM6YHVybGxpYi5xdW90ZWAuICBGb3IgZXhhbXBsZSB0byBzZW5kIG5hbWU9Ikd1eSBTdGVlbGUsCi1Kci4iOjoKK05vdGUgdGhhdCBpbiBnZW5lcmFsIGZvciBwZXJjZW50LWVuY29kZWQgUE9TVCBvcGVyYXRpb25zLCBxdWVyeSBzdHJpbmdzIG11c3QgYmUKK3F1b3RlZCB1c2luZyA6ZnVuYzpgdXJsbGliLnF1b3RlYC4gIEZvciBleGFtcGxlIHRvIHNlbmQgbmFtZT0iR3V5IFN0ZWVsZSwgSnIuIjo6CiAKICAgID4+PiBmcm9tIHVybGxpYiBpbXBvcnQgcXVvdGUKICAgID4+PiB4ID0gcXVvdGUoIkd1eSBTdGVlbGUsIEpyLiIpCmRpZmYgLS1naXQgYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdCBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CmluZGV4IGM1NGJiMjguLmU1M2ZhY2QgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CisrKyBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CkBAIC05NDQsNyArOTQ0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogU3RhcnRpbmcgd2l0aCBQeXRob24gMi4yLCB5b3UgY2FuIHVzZSBgYFMucnN0cmlwKCJcclxuIilgYCB0byByZW1vdmUgYWxsCi1vY2N1cmVuY2VzIG9mIGFueSBsaW5lIHRlcm1pbmF0b3IgZnJvbSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgYGBTYGAgd2l0aG91dAorb2NjdXJyZW5jZXMgb2YgYW55IGxpbmUgdGVybWluYXRvciBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBgYFNgYCB3aXRob3V0CiByZW1vdmluZyBvdGhlciB0cmFpbGluZyB3aGl0ZXNwYWNlLiAgSWYgdGhlIHN0cmluZyBgYFNgYCByZXByZXNlbnRzIG1vcmUgdGhhbgogb25lIGxpbmUsIHdpdGggc2V2ZXJhbCBlbXB0eSBsaW5lcyBhdCB0aGUgZW5kLCB0aGUgbGluZSB0ZXJtaW5hdG9ycyBmb3IgYWxsIHRoZQogYmxhbmsgbGluZXMgd2lsbCBiZSByZW1vdmVkOjoKQEAgLTk3OSw4ICs5NzksOCBAQAogOmZ1bmM6YGZsb2F0YC4gIGBgc3BsaXQoKWBgIHN1cHBvcnRzIGFuIG9wdGlvbmFsICJzZXAiIHBhcmFtZXRlciB3aGljaCBpcyB1c2VmdWwKIGlmIHRoZSBsaW5lIHVzZXMgc29tZXRoaW5nIG90aGVyIHRoYW4gd2hpdGVzcGFjZSBhcyBhIHNlcGFyYXRvci4KIAotRm9yIG1vcmUgY29tcGxpY2F0ZWQgaW5wdXQgcGFyc2luZywgcmVndWxhciBleHByZXNzaW9ucyBtb3JlIHBvd2VyZnVsIHRoYW4gQydzCi06Y2Z1bmM6YHNzY2FuZmAgYW5kIGJldHRlciBzdWl0ZWQgZm9yIHRoZSB0YXNrLgorRm9yIG1vcmUgY29tcGxpY2F0ZWQgaW5wdXQgcGFyc2luZywgcmVndWxhciBleHByZXNzaW9ucyBhcmUgbW9yZSBwb3dlcmZ1bAordGhhbiBDJ3MgOmNmdW5jOmBzc2NhbmZgIGFuZCBiZXR0ZXIgc3VpdGVkIGZvciB0aGUgdGFzay4KIAogCiBXaGF0IGRvZXMgJ1VuaWNvZGVFcnJvcjogQVNDSUkgW2RlY29kaW5nLGVuY29kaW5nXSBlcnJvcjogb3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KScgbWVhbj8KZGlmZiAtLWdpdCBhL0RvYy9mYXEvd2luZG93cy5yc3QgYi9Eb2MvZmFxL3dpbmRvd3MucnN0CmluZGV4IDM1M2M0MDAuLjQ3YzA5YWQgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvd2luZG93cy5yc3QKKysrIGIvRG9jL2ZhcS93aW5kb3dzLnJzdApAQCAtMjg2LDIwICsyODYsMTggQEAKIAogMS4gRG8gX25vdF8gYnVpbGQgUHl0aG9uIGludG8geW91ciAuZXhlIGZpbGUgZGlyZWN0bHkuICBPbiBXaW5kb3dzLCBQeXRob24gbXVzdAogICAgYmUgYSBETEwgdG8gaGFuZGxlIGltcG9ydGluZyBtb2R1bGVzIHRoYXQgYXJlIHRoZW1zZWx2ZXMgRExMJ3MuICAoVGhpcyBpcyB0aGUKLSAgIGZpcnN0IGtleSB1bmRvY3VtZW50ZWQgZmFjdC4pIEluc3RlYWQsIGxpbmsgdG8gOmZpbGU6YHB5dGhvbntOTn0uZGxsYDsgaXQgaXMKLSAgIHR5cGljYWxseSBpbnN0YWxsZWQgaW4gYGBDOlxXaW5kb3dzXFN5c3RlbWBgLiAgTk4gaXMgdGhlIFB5dGhvbiB2ZXJzaW9uLCBhCisgICBmaXJzdCBrZXkgdW5kb2N1bWVudGVkIGZhY3QuKSAgSW5zdGVhZCwgbGluayB0byA6ZmlsZTpgcHl0aG9ue05OfS5kbGxgOyBpdCBpcworICAgdHlwaWNhbGx5IGluc3RhbGxlZCBpbiBgYEM6XFdpbmRvd3NcU3lzdGVtYGAuICAqTk4qIGlzIHRoZSBQeXRob24gdmVyc2lvbiwgYQogICAgbnVtYmVyIHN1Y2ggYXMgIjIzIiBmb3IgUHl0aG9uIDIuMy4KIAotICAgWW91IGNhbiBsaW5rIHRvIFB5dGhvbiBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5LiAgTGlua2luZyBzdGF0aWNhbGx5IG1lYW5zCi0gICBsaW5raW5nIGFnYWluc3QgOmZpbGU6YHB5dGhvbntOTn0ubGliYCwgd2hpbGUgZHluYW1pY2FsbHkgbGlua2luZyBtZWFucwotICAgbGlua2luZyBhZ2FpbnN0IDpmaWxlOmBweXRob257Tk59LmRsbGAuICBUaGUgZHJhd2JhY2sgdG8gZHluYW1pYyBsaW5raW5nIGlzCi0gICB0aGF0IHlvdXIgYXBwIHdvbid0IHJ1biBpZiA6ZmlsZTpgcHl0aG9ue05OfS5kbGxgIGRvZXMgbm90IGV4aXN0IG9uIHlvdXIKLSAgIHN5c3RlbS4gIChHZW5lcmFsIG5vdGU6IDpmaWxlOmBweXRob257Tk59LmxpYmAgaXMgdGhlIHNvLWNhbGxlZCAiaW1wb3J0IGxpYiIKLSAgIGNvcnJlc3BvbmRpbmcgdG8gOmZpbGU6YHB5dGhvbi5kbGxgLiAgSXQgbWVyZWx5IGRlZmluZXMgc3ltYm9scyBmb3IgdGhlCi0gICBsaW5rZXIuKQorICAgWW91IGNhbiBsaW5rIHRvIFB5dGhvbiBpbiB0d28gZGlmZmVyZW50IHdheXMuICBMb2FkLXRpbWUgbGlua2luZyBtZWFucworICAgbGlua2luZyBhZ2FpbnN0IDpmaWxlOmBweXRob257Tk59LmxpYmAsIHdoaWxlIHJ1bi10aW1lIGxpbmtpbmcgbWVhbnMgbGlua2luZworICAgYWdhaW5zdCA6ZmlsZTpgcHl0aG9ue05OfS5kbGxgLiAgKEdlbmVyYWwgbm90ZTogOmZpbGU6YHB5dGhvbntOTn0ubGliYCBpcyB0aGUKKyAgIHNvLWNhbGxlZCAiaW1wb3J0IGxpYiIgY29ycmVzcG9uZGluZyB0byA6ZmlsZTpgcHl0aG9ue05OfS5kbGxgLiAgSXQgbWVyZWx5CisgICBkZWZpbmVzIHN5bWJvbHMgZm9yIHRoZSBsaW5rZXIuKQogCi0gICBMaW5raW5nIGR5bmFtaWNhbGx5IGdyZWF0bHkgc2ltcGxpZmllcyBsaW5rIG9wdGlvbnM7IGV2ZXJ5dGhpbmcgaGFwcGVucyBhdAotICAgcnVuIHRpbWUuICBZb3VyIGNvZGUgbXVzdCBsb2FkIDpmaWxlOmBweXRob257Tk59LmRsbGAgdXNpbmcgdGhlIFdpbmRvd3MKKyAgIFJ1bi10aW1lIGxpbmtpbmcgZ3JlYXRseSBzaW1wbGlmaWVzIGxpbmsgb3B0aW9uczsgZXZlcnl0aGluZyBoYXBwZW5zIGF0IHJ1bgorICAgdGltZS4gIFlvdXIgY29kZSBtdXN0IGxvYWQgOmZpbGU6YHB5dGhvbntOTn0uZGxsYCB1c2luZyB0aGUgV2luZG93cwogICAgYGBMb2FkTGlicmFyeUV4KClgYCByb3V0aW5lLiAgVGhlIGNvZGUgbXVzdCBhbHNvIHVzZSBhY2Nlc3Mgcm91dGluZXMgYW5kIGRhdGEKICAgIGluIDpmaWxlOmBweXRob257Tk59LmRsbGAgKHRoYXQgaXMsIFB5dGhvbidzIEMgQVBJJ3MpIHVzaW5nIHBvaW50ZXJzIG9idGFpbmVkCiAgICBieSB0aGUgV2luZG93cyBgYEdldFByb2NBZGRyZXNzKClgYCByb3V0aW5lLiAgTWFjcm9zIGNhbiBtYWtlIHVzaW5nIHRoZXNlCkBAIC0zMDgsNiArMzA2LDggQEAKICAgIEJvcmxhbmQgbm90ZTogY29udmVydCA6ZmlsZTpgcHl0aG9ue05OfS5saWJgIHRvIE9NRiBmb3JtYXQgdXNpbmcgQ29mZjJPbWYuZXhlCiAgICBmaXJzdC4KIAorICAgLi4gWFhYIHdoYXQgYWJvdXQgc3RhdGljIGxpbmtpbmc/CisKIDIuIElmIHlvdSB1c2UgU1dJRywgaXQgaXMgZWFzeSB0byBjcmVhdGUgYSBQeXRob24gImV4dGVuc2lvbiBtb2R1bGUiIHRoYXQgd2lsbAogICAgbWFrZSB0aGUgYXBwJ3MgZGF0YSBhbmQgbWV0aG9kcyBhdmFpbGFibGUgdG8gUHl0aG9uLiAgU1dJRyB3aWxsIGhhbmRsZSBqdXN0CiAgICBhYm91dCBhbGwgdGhlIGdydW5neSBkZXRhaWxzIGZvciB5b3UuICBUaGUgcmVzdWx0IGlzIEMgY29kZSB0aGF0IHlvdSBsaW5rCkBAIC00NDEsNyArNDQxLDcgQEAKIEhvdyBkbyBJIGVtdWxhdGUgb3Mua2lsbCgpIGluIFdpbmRvd3M/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UbyB0ZXJtaW5hdGUgYSBwcm9jZXNzLCB5b3UgY2FuIHVzZSBjdHlwZXM6OgorUHJpb3IgdG8gUHl0aG9uIDIuNyBhbmQgMy4yLCB0byB0ZXJtaW5hdGUgYSBwcm9jZXNzLCB5b3UgY2FuIHVzZSA6bW9kOmBjdHlwZXNgOjoKIAogICAgaW1wb3J0IGN0eXBlcwogCkBAIC00NTEsNiArNDUxLDExIEBACiAgICAgICAgaGFuZGxlID0ga2VybmVsMzIuT3BlblByb2Nlc3MoMSwgMCwgcGlkKQogICAgICAgIHJldHVybiAoMCAhPSBrZXJuZWwzMi5UZXJtaW5hdGVQcm9jZXNzKGhhbmRsZSwgMCkpCiAKK0luIDIuNyBhbmQgMy4yLCA6ZnVuYzpgb3Mua2lsbGAgaXMgaW1wbGVtZW50ZWQgc2ltaWxhciB0byB0aGUgYWJvdmUgZnVuY3Rpb24sCit3aXRoIHRoZSBhZGRpdGlvbmFsIGZlYXR1cmUgb2YgYmVpbmcgYWJsZSB0byBzZW5kIENUUkwrQyBhbmQgQ1RSTCtCUkVBSwordG8gY29uc29sZSBzdWJwcm9jZXNzZXMgd2hpY2ggYXJlIGRlc2lnbmVkIHRvIGhhbmRsZSB0aG9zZSBzaWduYWxzLiBTZWUKKzpmdW5jOmBvcy5raWxsYCBmb3IgZnVydGhlciBkZXRhaWxzLgorCiAKIFdoeSBkb2VzIG9zLnBhdGguaXNkaXIoKSBmYWlsIG9uIE5UIHNoYXJlZCBkaXJlY3Rvcmllcz8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU4OSw3ICs1OTQsNyBAQAogCiBUaGUgUHl0aG9uIGluc3RhbGxlciBpc3N1ZXMgYSB3YXJuaW5nIGxpa2UgdGhpczo6CiAKLSAgIFRoaXMgdmVyc2lvbiB1c2VzIGBgQ1RMM0QzMi5ETExgYCB3aGljaCBpcyBub3QgdGhlIGNvcnJlY3QgdmVyc2lvbi4KKyAgIFRoaXMgdmVyc2lvbiB1c2VzIENUTDNEMzIuRExMIHdoaWNoIGlzIG5vdCB0aGUgY29ycmVjdCB2ZXJzaW9uLgogICAgVGhpcyB2ZXJzaW9uIGlzIHVzZWQgZm9yIHdpbmRvd3MgTlQgYXBwbGljYXRpb25zIG9ubHkuCiAKIFRpbSBQZXRlcnM6CmRpZmYgLS1naXQgYS9Eb2MvZ2xvc3NhcnkucnN0IGIvRG9jL2dsb3NzYXJ5LnJzdAppbmRleCA1Y2YzYWVlLi43ODIyNjM0IDEwMDY0NAotLS0gYS9Eb2MvZ2xvc3NhcnkucnN0CisrKyBiL0RvYy9nbG9zc2FyeS5yc3QKQEAgLTE5LDcgKzE5LDcgQEAKIAogICAgMnRvMwogICAgICAgQSB0b29sIHRoYXQgdHJpZXMgdG8gY29udmVydCBQeXRob24gMi54IGNvZGUgdG8gUHl0aG9uIDMueCBjb2RlIGJ5Ci0gICAgICBoYW5kbGluZyBtb3N0IG9mIHRoZSBpbmNvbXBhdGliaWxpdGVzIHdoaWNoIGNhbiBiZSBkZXRlY3RlZCBieSBwYXJzaW5nIHRoZQorICAgICAgaGFuZGxpbmcgbW9zdCBvZiB0aGUgaW5jb21wYXRpYmlsaXRpZXMgd2hpY2ggY2FuIGJlIGRldGVjdGVkIGJ5IHBhcnNpbmcgdGhlCiAgICAgICBzb3VyY2UgYW5kIHRyYXZlcnNpbmcgdGhlIHBhcnNlIHRyZWUuCiAKICAgICAgIDJ0bzMgaXMgYXZhaWxhYmxlIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFzIDptb2Q6YGxpYjJ0bzNgOyBhIHN0YW5kYWxvbmUKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgIDpyZWY6YDJ0bzMtcmVmZXJlbmNlYC4KIAogICAgYWJzdHJhY3QgYmFzZSBjbGFzcwotICAgICAgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChhYmJyZXZpYXRlZCBBQkNzKSBjb21wbGVtZW50IDp0ZXJtOmBkdWNrLXR5cGluZ2AgYnkKKyAgICAgIDpyZWY6YGFic3RyYWN0LWJhc2UtY2xhc3Nlc2AgY29tcGxlbWVudCA6dGVybTpgZHVjay10eXBpbmdgIGJ5CiAgICAgICBwcm92aWRpbmcgYSB3YXkgdG8gZGVmaW5lIGludGVyZmFjZXMgd2hlbiBvdGhlciB0ZWNobmlxdWVzIGxpa2UKICAgICAgIDpmdW5jOmBoYXNhdHRyYCB3b3VsZCBiZSBjbHVtc3kuIFB5dGhvbiBjb21lcyB3aXRoIG1hbnkgYnVpbHQtaW4gQUJDcyBmb3IKICAgICAgIGRhdGEgc3RydWN0dXJlcyAoaW4gdGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUpLCBudW1iZXJzIChpbiB0aGUKQEAgLTYzLDYgKzYzLDkgQEAKICAgICAgICJpbnRlcm1lZGlhdGUgbGFuZ3VhZ2UiIGlzIHNhaWQgdG8gcnVuIG9uIGEgOnRlcm06YHZpcnR1YWwgbWFjaGluZWAKICAgICAgIHRoYXQgZXhlY3V0ZXMgdGhlIG1hY2hpbmUgY29kZSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggYnl0ZWNvZGUuCiAKKyAgICAgIEEgbGlzdCBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMgY2FuIGJlIGZvdW5kIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorICAgICAgOnJlZjpgdGhlIGRpcyBtb2R1bGUgPGJ5dGVjb2Rlcz5gLgorCiAgICBjbGFzcwogICAgICAgQSB0ZW1wbGF0ZSBmb3IgY3JlYXRpbmcgdXNlci1kZWZpbmVkIG9iamVjdHMuIENsYXNzIGRlZmluaXRpb25zCiAgICAgICBub3JtYWxseSBjb250YWluIG1ldGhvZCBkZWZpbml0aW9ucyB3aGljaCBvcGVyYXRlIG9uIGluc3RhbmNlcyBvZiB0aGUKQEAgLTEwMyw5ICsxMDYsMTAgQEAKICAgICAgIFNlZSA6cGVwOmAzNDNgLgogCiAgICBDUHl0aG9uCi0gICAgICBUaGUgY2Fub25pY2FsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuICBUaGUKLSAgICAgIHRlcm0gIkNQeXRob24iIGlzIHVzZWQgaW4gY29udGV4dHMgd2hlbiBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggdGhpcwotICAgICAgaW1wbGVtZW50YXRpb24gZnJvbSBvdGhlcnMgc3VjaCBhcyBKeXRob24gb3IgSXJvblB5dGhvbi4KKyAgICAgIFRoZSBjYW5vbmljYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSwgYXMKKyAgICAgIGRpc3RyaWJ1dGVkIG9uIGBweXRob24ub3JnIDxodHRwOi8vcHl0aG9uLm9yZz5gXy4gIFRoZSB0ZXJtICJDUHl0aG9uIgorICAgICAgaXMgdXNlZCB3aGVuIG5lY2Vzc2FyeSB0byBkaXN0aW5ndWlzaCB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gb3RoZXJzCisgICAgICBzdWNoIGFzIEp5dGhvbiBvciBJcm9uUHl0aG9uLgogCiAgICBkZWNvcmF0b3IKICAgICAgIEEgZnVuY3Rpb24gcmV0dXJuaW5nIGFub3RoZXIgZnVuY3Rpb24sIHVzdWFsbHkgYXBwbGllZCBhcyBhIGZ1bmN0aW9uCkBAIC0xNDAsMTAgKzE0NCw5IEBACiAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkZXNjcmlwdG9ycycgbWV0aG9kcywgc2VlIDpyZWY6YGRlc2NyaXB0b3JzYC4KIAogICAgZGljdGlvbmFyeQotICAgICAgQW4gYXNzb2NpYXRpdmUgYXJyYXksIHdoZXJlIGFyYml0cmFyeSBrZXlzIGFyZSBtYXBwZWQgdG8gdmFsdWVzLiAgVGhlIHVzZQotICAgICAgb2YgOmNsYXNzOmBkaWN0YCBjbG9zZWx5IHJlc2VtYmxlcyB0aGF0IGZvciA6Y2xhc3M6YGxpc3RgLCBidXQgdGhlIGtleXMgY2FuCi0gICAgICBiZSBhbnkgb2JqZWN0IHdpdGggYSA6bWV0aDpgX19oYXNoX19gIGZ1bmN0aW9uLCBub3QganVzdCBpbnRlZ2Vycy4KLSAgICAgIENhbGxlZCBhIGhhc2ggaW4gUGVybC4KKyAgICAgIEFuIGFzc29jaWF0aXZlIGFycmF5LCB3aGVyZSBhcmJpdHJhcnkga2V5cyBhcmUgbWFwcGVkIHRvIHZhbHVlcy4gIFRoZSBrZXlzCisgICAgICBjYW4gYmUgYW55IG9iamVjdCB3aXRoIDptZXRoOmBfX2hhc2hfX2AgZnVuY3Rpb24gYW5kIDptZXRoOmBfX2VxX19gCisgICAgICBtZXRob2RzLiBDYWxsZWQgYSBoYXNoIGluIFBlcmwuCiAKICAgIGRvY3N0cmluZwogICAgICAgQSBzdHJpbmcgbGl0ZXJhbCB3aGljaCBhcHBlYXJzIGFzIHRoZSBmaXJzdCBleHByZXNzaW9uIGluIGEgY2xhc3MsCkBAIC0xNTQsOSArMTU3LDkgQEAKICAgICAgIG9iamVjdC4KIAogICAgZHVjay10eXBpbmcKLSAgICAgIEEgcHl0aG9uaWMgcHJvZ3JhbW1pbmcgc3R5bGUgd2hpY2ggZGV0ZXJtaW5lcyBhbiBvYmplY3QncyB0eXBlIGJ5IGluc3BlY3Rpb24KLSAgICAgIG9mIGl0cyBtZXRob2Qgb3IgYXR0cmlidXRlIHNpZ25hdHVyZSByYXRoZXIgdGhhbiBieSBleHBsaWNpdCByZWxhdGlvbnNoaXAKLSAgICAgIHRvIHNvbWUgdHlwZSBvYmplY3QgKCJJZiBpdCBsb29rcyBsaWtlIGEgZHVjayBhbmQgcXVhY2tzIGxpa2UgYSBkdWNrLCBpdAorICAgICAgQSBwcm9ncmFtbWluZyBzdHlsZSB3aGljaCBkb2VzIG5vdCBsb29rIGF0IGFuIG9iamVjdCdzIHR5cGUgdG8gZGV0ZXJtaW5lCisgICAgICBpZiBpdCBoYXMgdGhlIHJpZ2h0IGludGVyZmFjZTsgaW5zdGVhZCwgdGhlIG1ldGhvZCBvciBhdHRyaWJ1dGUgaXMgc2ltcGx5CisgICAgICBjYWxsZWQgb3IgdXNlZCAoIklmIGl0IGxvb2tzIGxpa2UgYSBkdWNrIGFuZCBxdWFja3MgbGlrZSBhIGR1Y2ssIGl0CiAgICAgICBtdXN0IGJlIGEgZHVjay4iKSAgQnkgZW1waGFzaXppbmcgaW50ZXJmYWNlcyByYXRoZXIgdGhhbiBzcGVjaWZpYyB0eXBlcywKICAgICAgIHdlbGwtZGVzaWduZWQgY29kZSBpbXByb3ZlcyBpdHMgZmxleGliaWxpdHkgYnkgYWxsb3dpbmcgcG9seW1vcnBoaWMKICAgICAgIHN1YnN0aXR1dGlvbi4gIER1Y2stdHlwaW5nIGF2b2lkcyB0ZXN0cyB1c2luZyA6ZnVuYzpgdHlwZWAgb3IKQEAgLTE4MiwyMSArMTg1LDI4IEBACiAgICAgICBub3QgZXhwcmVzc2lvbnMuCiAKICAgIGV4dGVuc2lvbiBtb2R1bGUKLSAgICAgIEEgbW9kdWxlIHdyaXR0ZW4gaW4gQyBvciBDKyssIHVzaW5nIFB5dGhvbidzIEMgQVBJIHRvIGludGVyYWN0IHdpdGggdGhlIGNvcmUgYW5kCi0gICAgICB3aXRoIHVzZXIgY29kZS4KKyAgICAgIEEgbW9kdWxlIHdyaXR0ZW4gaW4gQyBvciBDKyssIHVzaW5nIFB5dGhvbidzIEMgQVBJIHRvIGludGVyYWN0IHdpdGggdGhlCisgICAgICBjb3JlIGFuZCB3aXRoIHVzZXIgY29kZS4KIAogICAgZmluZGVyCiAgICAgICBBbiBvYmplY3QgdGhhdCB0cmllcyB0byBmaW5kIHRoZSA6dGVybTpgbG9hZGVyYCBmb3IgYSBtb2R1bGUuIEl0IG11c3QKICAgICAgIGltcGxlbWVudCBhIG1ldGhvZCBuYW1lZCA6bWV0aDpgZmluZF9tb2R1bGVgLiBTZWUgOnBlcDpgMzAyYCBmb3IKICAgICAgIGRldGFpbHMuCiAKKyAgIGZsb29yIGRpdmlzaW9uCisgICAgICBNYXRoZW1hdGljYWwgZGl2aXNpb24gdGhhdCByb3VuZHMgZG93biB0byBuZWFyZXN0IGludGVnZXIuICBUaGUgZmxvb3IKKyAgICAgIGRpdmlzaW9uIG9wZXJhdG9yIGlzIGBgLy9gYC4gIEZvciBleGFtcGxlLCB0aGUgZXhwcmVzc2lvbiBgYDExIC8vIDRgYAorICAgICAgZXZhbHVhdGVzIHRvIGBgMmBgIGluIGNvbnRyYXN0IHRvIHRoZSBgYDIuNzVgYCByZXR1cm5lZCBieSBmbG9hdCB0cnVlCisgICAgICBkaXZpc2lvbi4gIE5vdGUgdGhhdCBgYCgtMTEpIC8vIDRgYCBpcyBgYC0zYGAgYmVjYXVzZSB0aGF0IGlzIGBgLTIuNzVgYAorICAgICAgcm91bmRlZCAqZG93bndhcmQqLiBTZWUgOnBlcDpgMjM4YC4KKwogICAgZnVuY3Rpb24KICAgICAgIEEgc2VyaWVzIG9mIHN0YXRlbWVudHMgd2hpY2ggcmV0dXJucyBzb21lIHZhbHVlIHRvIGEgY2FsbGVyLiBJdCBjYW4gYWxzbwogICAgICAgYmUgcGFzc2VkIHplcm8gb3IgbW9yZSBhcmd1bWVudHMgd2hpY2ggbWF5IGJlIHVzZWQgaW4gdGhlIGV4ZWN1dGlvbiBvZgogICAgICAgdGhlIGJvZHkuIFNlZSBhbHNvIDp0ZXJtOmBhcmd1bWVudGAgYW5kIDp0ZXJtOmBtZXRob2RgLgogCiAgICBfX2Z1dHVyZV9fCi0gICAgICBBIHBzZXVkbyBtb2R1bGUgd2hpY2ggcHJvZ3JhbW1lcnMgY2FuIHVzZSB0byBlbmFibGUgbmV3IGxhbmd1YWdlIGZlYXR1cmVzCisgICAgICBBIHBzZXVkby1tb2R1bGUgd2hpY2ggcHJvZ3JhbW1lcnMgY2FuIHVzZSB0byBlbmFibGUgbmV3IGxhbmd1YWdlIGZlYXR1cmVzCiAgICAgICB3aGljaCBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBpbnRlcnByZXRlci4gIEZvciBleGFtcGxlLCB0aGUKICAgICAgIGV4cHJlc3Npb24gYGAxMS80YGAgY3VycmVudGx5IGV2YWx1YXRlcyB0byBgYDJgYC4gSWYgdGhlIG1vZHVsZSBpbiB3aGljaAogICAgICAgaXQgaXMgZXhlY3V0ZWQgaGFkIGVuYWJsZWQgKnRydWUgZGl2aXNpb24qIGJ5IGV4ZWN1dGluZzo6CkBAIC0yMjEsMTMgKzIzMSwxMyBAQAogCiAgICBnZW5lcmF0b3IKICAgICAgIEEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBpdGVyYXRvci4gIEl0IGxvb2tzIGxpa2UgYSBub3JtYWwgZnVuY3Rpb24KLSAgICAgIGV4Y2VwdCB0aGF0IHZhbHVlcyBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1c2luZyBhIDprZXl3b3JkOmB5aWVsZGAKLSAgICAgIHN0YXRlbWVudCBpbnN0ZWFkIG9mIGEgOmtleXdvcmQ6YHJldHVybmAgc3RhdGVtZW50LiAgR2VuZXJhdG9yIGZ1bmN0aW9ucwotICAgICAgb2Z0ZW4gY29udGFpbiBvbmUgb3IgbW9yZSA6a2V5d29yZDpgZm9yYCBvciA6a2V5d29yZDpgd2hpbGVgIGxvb3BzIHdoaWNoCi0gICAgICA6a2V5d29yZDpgeWllbGRgIGVsZW1lbnRzIGJhY2sgdG8gdGhlIGNhbGxlci4gIFRoZSBmdW5jdGlvbiBleGVjdXRpb24gaXMKLSAgICAgIHN0b3BwZWQgYXQgdGhlIDprZXl3b3JkOmB5aWVsZGAga2V5d29yZCAocmV0dXJuaW5nIHRoZSByZXN1bHQpIGFuZCBpcwotICAgICAgcmVzdW1lZCB0aGVyZSB3aGVuIHRoZSBuZXh0IGVsZW1lbnQgaXMgcmVxdWVzdGVkIGJ5IGNhbGxpbmcgdGhlCi0gICAgICA6bWV0aDpgbmV4dGAgbWV0aG9kIG9mIHRoZSByZXR1cm5lZCBpdGVyYXRvci4KKyAgICAgIGV4Y2VwdCB0aGF0IGl0IGNvbnRhaW5zIDprZXl3b3JkOmB5aWVsZGAgc3RhdGVtZW50cyBmb3IgcHJvZHVjaW5nIGEgc2VyaWVzCisgICAgICBhIHZhbHVlcyB1c2FibGUgaW4gYSBmb3ItbG9vcCBvciB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgb25lIGF0IGEgdGltZSB3aXRoCisgICAgICB0aGUgOmZ1bmM6YG5leHRgIGZ1bmN0aW9uLiBFYWNoIDprZXl3b3JkOmB5aWVsZGAgdGVtcG9yYXJpbHkgc3VzcGVuZHMKKyAgICAgIHByb2Nlc3NpbmcsIHJlbWVtYmVyaW5nIHRoZSBsb2NhdGlvbiBleGVjdXRpb24gc3RhdGUgKGluY2x1ZGluZyBsb2NhbAorICAgICAgdmFyaWFibGVzIGFuZCBwZW5kaW5nIHRyeS1zdGF0ZW1lbnRzKS4gIFdoZW4gdGhlIGdlbmVyYXRvciByZXN1bWVzLCBpdAorICAgICAgcGlja3MtdXAgd2hlcmUgaXQgbGVmdC1vZmYgKGluIGNvbnRyYXN0IHRvIGZ1bmN0aW9ucyB3aGljaCBzdGFydCBmcmVzaCBvbgorICAgICAgZXZlcnkgaW52b2NhdGlvbikuCiAKICAgICAgIC4uIGluZGV4Ojogc2luZ2xlOiBnZW5lcmF0b3IgZXhwcmVzc2lvbgogCkBAIC0yNDQsMTYgKzI1NCwyNSBAQAogICAgICAgU2VlIDp0ZXJtOmBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9ja2AuCiAKICAgIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrCi0gICAgICBUaGUgbG9jayB1c2VkIGJ5IFB5dGhvbiB0aHJlYWRzIHRvIGFzc3VyZSB0aGF0IG9ubHkgb25lIHRocmVhZAotICAgICAgZXhlY3V0ZXMgaW4gdGhlIDp0ZXJtOmBDUHl0aG9uYCA6dGVybTpgdmlydHVhbCBtYWNoaW5lYCBhdCBhIHRpbWUuCi0gICAgICBUaGlzIHNpbXBsaWZpZXMgdGhlIENQeXRob24gaW1wbGVtZW50YXRpb24gYnkgYXNzdXJpbmcgdGhhdCBubyB0d28KLSAgICAgIHByb2Nlc3NlcyBjYW4gYWNjZXNzIHRoZSBzYW1lIG1lbW9yeSBhdCB0aGUgc2FtZSB0aW1lLiAgTG9ja2luZyB0aGUKLSAgICAgIGVudGlyZSBpbnRlcnByZXRlciBtYWtlcyBpdCBlYXNpZXIgZm9yIHRoZSBpbnRlcnByZXRlciB0byBiZQotICAgICAgbXVsdGktdGhyZWFkZWQsIGF0IHRoZSBleHBlbnNlIG9mIG11Y2ggb2YgdGhlIHBhcmFsbGVsaXNtIGFmZm9yZGVkIGJ5Ci0gICAgICBtdWx0aS1wcm9jZXNzb3IgbWFjaGluZXMuICBFZmZvcnRzIGhhdmUgYmVlbiBtYWRlIGluIHRoZSBwYXN0IHRvCi0gICAgICBjcmVhdGUgYSAiZnJlZS10aHJlYWRlZCIgaW50ZXJwcmV0ZXIgKG9uZSB3aGljaCBsb2NrcyBzaGFyZWQgZGF0YSBhdCBhCi0gICAgICBtdWNoIGZpbmVyIGdyYW51bGFyaXR5KSwgYnV0IHNvIGZhciBub25lIGhhdmUgYmVlbiBzdWNjZXNzZnVsIGJlY2F1c2UKLSAgICAgIHBlcmZvcm1hbmNlIHN1ZmZlcmVkIGluIHRoZSBjb21tb24gc2luZ2xlLXByb2Nlc3NvciBjYXNlLgorICAgICAgVGhlIG1lY2hhbmlzbSB1c2VkIGJ5IHRoZSA6dGVybTpgQ1B5dGhvbmAgaW50ZXJwcmV0ZXIgdG8gYXNzdXJlIHRoYXQKKyAgICAgIG9ubHkgb25lIHRocmVhZCBleGVjdXRlcyBQeXRob24gOnRlcm06YGJ5dGVjb2RlYCBhdCBhIHRpbWUuCisgICAgICBUaGlzIHNpbXBsaWZpZXMgdGhlIENQeXRob24gaW1wbGVtZW50YXRpb24gYnkgbWFraW5nIHRoZSBvYmplY3QgbW9kZWwKKyAgICAgIChpbmNsdWRpbmcgY3JpdGljYWwgYnVpbHQtaW4gdHlwZXMgc3VjaCBhcyA6Y2xhc3M6YGRpY3RgKSBpbXBsaWNpdGx5CisgICAgICBzYWZlIGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MuICBMb2NraW5nIHRoZSBlbnRpcmUgaW50ZXJwcmV0ZXIKKyAgICAgIG1ha2VzIGl0IGVhc2llciBmb3IgdGhlIGludGVycHJldGVyIHRvIGJlIG11bHRpLXRocmVhZGVkLCBhdCB0aGUKKyAgICAgIGV4cGVuc2Ugb2YgbXVjaCBvZiB0aGUgcGFyYWxsZWxpc20gYWZmb3JkZWQgYnkgbXVsdGktcHJvY2Vzc29yCisgICAgICBtYWNoaW5lcy4KKworICAgICAgSG93ZXZlciwgc29tZSBleHRlbnNpb24gbW9kdWxlcywgZWl0aGVyIHN0YW5kYXJkIG9yIHRoaXJkLXBhcnR5LAorICAgICAgYXJlIGRlc2lnbmVkIHNvIGFzIHRvIHJlbGVhc2UgdGhlIEdJTCB3aGVuIGRvaW5nIGNvbXB1dGF0aW9uYWxseS1pbnRlbnNpdmUKKyAgICAgIHRhc2tzIHN1Y2ggYXMgY29tcHJlc3Npb24gb3IgaGFzaGluZy4gIEFsc28sIHRoZSBHSUwgaXMgYWx3YXlzIHJlbGVhc2VkCisgICAgICB3aGVuIGRvaW5nIEkvTy4KKworICAgICAgUGFzdCBlZmZvcnRzIHRvIGNyZWF0ZSBhICJmcmVlLXRocmVhZGVkIiBpbnRlcnByZXRlciAob25lIHdoaWNoIGxvY2tzCisgICAgICBzaGFyZWQgZGF0YSBhdCBhIG11Y2ggZmluZXIgZ3JhbnVsYXJpdHkpIGhhdmUgbm90IGJlZW4gc3VjY2Vzc2Z1bAorICAgICAgYmVjYXVzZSBwZXJmb3JtYW5jZSBzdWZmZXJlZCBpbiB0aGUgY29tbW9uIHNpbmdsZS1wcm9jZXNzb3IgY2FzZS4gSXQKKyAgICAgIGlzIGJlbGlldmVkIHRoYXQgb3ZlcmNvbWluZyB0aGlzIHBlcmZvcm1hbmNlIGlzc3VlIHdvdWxkIG1ha2UgdGhlCisgICAgICBpbXBsZW1lbnRhdGlvbiBtdWNoIG1vcmUgY29tcGxpY2F0ZWQgYW5kIHRoZXJlZm9yZSBjb3N0bGllciB0byBtYWludGFpbi4KIAogICAgaGFzaGFibGUKICAgICAgIEFuIG9iamVjdCBpcyAqaGFzaGFibGUqIGlmIGl0IGhhcyBhIGhhc2ggdmFsdWUgd2hpY2ggbmV2ZXIgY2hhbmdlcyBkdXJpbmcKQEAgLTI3Miw5ICsyOTEsNyBAQAogICAgSURMRQogICAgICAgQW4gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uLiAgSURMRSBpcyBhIGJhc2ljIGVkaXRvcgogICAgICAgYW5kIGludGVycHJldGVyIGVudmlyb25tZW50IHdoaWNoIHNoaXBzIHdpdGggdGhlIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbiBvZgotICAgICAgUHl0aG9uLiAgR29vZCBmb3IgYmVnaW5uZXJzLCBpdCBhbHNvIHNlcnZlcyBhcyBjbGVhciBleGFtcGxlIGNvZGUgZm9yCi0gICAgICB0aG9zZSB3YW50aW5nIHRvIGltcGxlbWVudCBhIG1vZGVyYXRlbHkgc29waGlzdGljYXRlZCwgbXVsdGktcGxhdGZvcm0gR1VJCi0gICAgICBhcHBsaWNhdGlvbi4KKyAgICAgIFB5dGhvbi4KIAogICAgaW1tdXRhYmxlCiAgICAgICBBbiBvYmplY3Qgd2l0aCBhIGZpeGVkIHZhbHVlLiAgSW1tdXRhYmxlIG9iamVjdHMgaW5jbHVkZSBudW1iZXJzLCBzdHJpbmdzIGFuZApAQCAtMzQ5LDEyICszNjYsNTIgQEAKIAogICAgICAgTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gOnJlZjpgdHlwZWl0ZXJgLgogCisgICBrZXkgZnVuY3Rpb24KKyAgICAgIEEga2V5IGZ1bmN0aW9uIG9yIGNvbGxhdGlvbiBmdW5jdGlvbiBpcyBhIGNhbGxhYmxlIHRoYXQgcmV0dXJucyBhIHZhbHVlCisgICAgICB1c2VkIGZvciBzb3J0aW5nIG9yIG9yZGVyaW5nLiAgRm9yIGV4YW1wbGUsIDpmdW5jOmBsb2NhbGUuc3RyeGZybWAgaXMKKyAgICAgIHVzZWQgdG8gcHJvZHVjZSBhIHNvcnQga2V5IHRoYXQgaXMgYXdhcmUgb2YgbG9jYWxlIHNwZWNpZmljIHNvcnQKKyAgICAgIGNvbnZlbnRpb25zLgorCisgICAgICBBIG51bWJlciBvZiB0b29scyBpbiBQeXRob24gYWNjZXB0IGtleSBmdW5jdGlvbnMgdG8gY29udHJvbCBob3cgZWxlbWVudHMKKyAgICAgIGFyZSBvcmRlcmVkIG9yIGdyb3VwZWQuICBUaGV5IGluY2x1ZGUgOmZ1bmM6YG1pbmAsIDpmdW5jOmBtYXhgLAorICAgICAgOmZ1bmM6YHNvcnRlZGAsIDptZXRoOmBsaXN0LnNvcnRgLCA6ZnVuYzpgaGVhcHEubnNtYWxsZXN0YCwKKyAgICAgIDpmdW5jOmBoZWFwcS5ubGFyZ2VzdGAsIGFuZCA6ZnVuYzpgaXRlcnRvb2xzLmdyb3VwYnlgLgorCisgICAgICBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGNyZWF0ZSBhIGtleSBmdW5jdGlvbi4gIEZvciBleGFtcGxlLiB0aGUKKyAgICAgIDptZXRoOmBzdHIubG93ZXJgIG1ldGhvZCBjYW4gc2VydmUgYXMgYSBrZXkgZnVuY3Rpb24gZm9yIGNhc2UgaW5zZW5zaXRpdmUKKyAgICAgIHNvcnRzLiAgQWx0ZXJuYXRpdmVseSwgYW4gYWQtaG9jIGtleSBmdW5jdGlvbiBjYW4gYmUgYnVpbHQgZnJvbSBhCisgICAgICA6a2V5d29yZDpgbGFtYmRhYCBleHByZXNzaW9uIHN1Y2ggYXMgYGBsYW1iZGEgcjogKHJbMF0sIHJbMl0pYGAuICBBbHNvLAorICAgICAgdGhlIDptb2Q6YG9wZXJhdG9yYCBtb2R1bGUgcHJvdmlkZXMgdGhyZWUga2V5IGZ1bmN0aW9uIGNvbnN0dWN0b3JzOgorICAgICAgOmZ1bmM6YH5vcGVyYXRvci5hdHRyZ2V0dGVyYCwgOmZ1bmM6YH5vcGVyYXRvci5pdGVtZ2V0dGVyYCwgYW5kCisgICAgICA6ZnVuYzpgfm9wZXJhdG9yLm1ldGhvZGNhbGxlcmAuICBTZWUgdGhlIDpyZWY6YFNvcnRpbmcgSE9XIFRPCisgICAgICA8c29ydGluZ2hvd3RvPmAgZm9yIGV4YW1wbGVzIG9mIGhvdyB0byBjcmVhdGUgYW5kIHVzZSBrZXkgZnVuY3Rpb25zLgorCiAgICBrZXl3b3JkIGFyZ3VtZW50CiAgICAgICBBcmd1bWVudHMgd2hpY2ggYXJlIHByZWNlZGVkIHdpdGggYSBgYHZhcmlhYmxlX25hbWU9YGAgaW4gdGhlIGNhbGwuCiAgICAgICBUaGUgdmFyaWFibGUgbmFtZSBkZXNpZ25hdGVzIHRoZSBsb2NhbCBuYW1lIGluIHRoZSBmdW5jdGlvbiB0byB3aGljaCB0aGUKICAgICAgIHZhbHVlIGlzIGFzc2lnbmVkLiAgYGAqKmBgIGlzIHVzZWQgdG8gYWNjZXB0IG9yIHBhc3MgYSBkaWN0aW9uYXJ5IG9mCiAgICAgICBrZXl3b3JkIGFyZ3VtZW50cy4gIFNlZSA6dGVybTpgYXJndW1lbnRgLgogCisgICBrZXkgZnVuY3Rpb24KKyAgICAgIEEga2V5IGZ1bmN0aW9uIG9yIGNvbGxhdGlvbiBmdW5jdGlvbiBpcyBhIGNhbGxhYmxlIHRoYXQgcmV0dXJucyBhIHZhbHVlCisgICAgICB1c2VkIGZvciBzb3J0aW5nIG9yIG9yZGVyaW5nLiAgRm9yIGV4YW1wbGUsIDpmdW5jOmBsb2NhbGUuc3RyeGZybWAgaXMKKyAgICAgIHVzZWQgdG8gcHJvZHVjZSBhIHNvcnQga2V5IHRoYXQgaXMgYXdhcmUgb2YgbG9jYWxlIHNwZWNpZmljIHNvcnQKKyAgICAgIGNvbnZlbnRpb25zLgorCisgICAgICBBIG51bWJlciBvZiB0b29scyBpbiBQeXRob24gYWNjZXB0IGtleSBmdW5jdGlvbnMgdG8gY29udHJvbCBob3cgZWxlbWVudHMKKyAgICAgIGFyZSBvcmRlcmVkIG9yIGdyb3VwZWQuICBUaGV5IGluY2x1ZGUgOmZ1bmM6YG1pbmAsIDpmdW5jOmBtYXhgLAorICAgICAgOmZ1bmM6YHNvcnRlZGAsIDptZXRoOmBsaXN0LnNvcnRgLCA6ZnVuYzpgaGVhcHEubnNtYWxsZXN0YCwKKyAgICAgIDpmdW5jOmBoZWFwcS5ubGFyZ2VzdGAsIGFuZCA6ZnVuYzpgaXRlcnRvb2xzLmdyb3VwYnlgLgorCisgICAgICBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGNyZWF0ZSBhIGtleSBmdW5jdGlvbi4gIEZvciBleGFtcGxlLiB0aGUKKyAgICAgIDptZXRoOmBzdHIubG93ZXJgIG1ldGhvZCBjYW4gc2VydmUgYXMgYSBrZXkgZnVuY3Rpb24gZm9yIGNhc2UgaW5zZW5zaXRpdmUKKyAgICAgIHNvcnRzLiAgQWx0ZXJuYXRpdmVseSwgYW4gYWQtaG9jIGtleSBmdW5jdGlvbiBjYW4gYmUgYnVpbHQgZnJvbSBhCisgICAgICA6a2V5d29yZDpgbGFtYmRhYCBleHByZXNzaW9uIHN1Y2ggYXMgYGBsYW1iZGEgcjogKHJbMF0sIHJbMl0pYGAuICBBbHNvLAorICAgICAgdGhlIDptb2Q6YG9wZXJhdG9yYCBtb2R1bGUgcHJvdmlkZXMgdGhyZWUga2V5IGZ1bmN0aW9uIGNvbnN0dWN0b3JzOgorICAgICAgOmZ1bmM6YH5vcGVyYXRvci5hdHRyZ2V0dGVyYCwgOmZ1bmM6YH5vcGVyYXRvci5pdGVtZ2V0dGVyYCwgYW5kCisgICAgICA6ZnVuYzpgfm9wZXJhdG9yLm1ldGhvZGNhbGxlcmAuICBTZWUgdGhlIDpyZWY6YHNvcnRpbmdob3d0b2AgZm9yCisgICAgICBleGFtcGxlcyBvZiBob3cgdG8gY3JlYXRlIGFuZCB1c2Uga2V5IGZ1bmN0aW9ucy4KKwogICAgbGFtYmRhCiAgICAgICBBbiBhbm9ueW1vdXMgaW5saW5lIGZ1bmN0aW9uIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgOnRlcm06YGV4cHJlc3Npb25gCiAgICAgICB3aGljaCBpcyBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiAgVGhlIHN5bnRheCB0byBjcmVhdGUKQEAgLTM4NSw4ICs0NDIsMTEgQEAKICAgICAgIDp0ZXJtOmBmaW5kZXJgLiBTZWUgOnBlcDpgMzAyYCBmb3IgZGV0YWlscy4KIAogICAgbWFwcGluZwotICAgICAgQSBjb250YWluZXIgb2JqZWN0IChzdWNoIGFzIDpjbGFzczpgZGljdGApIHdoaWNoIHN1cHBvcnRzIGFyYml0cmFyeSBrZXkKLSAgICAgIGxvb2t1cHMgdXNpbmcgdGhlIHNwZWNpYWwgbWV0aG9kIDptZXRoOmBfX2dldGl0ZW1fX2AuCisgICAgICBBIGNvbnRhaW5lciBvYmplY3QgdGhhdCBzdXBwb3J0cyBhcmJpdHJhcnkga2V5IGxvb2t1cHMgYW5kIGltcGxlbWVudHMgdGhlCisgICAgICBtZXRob2RzIHNwZWNpZmllZCBpbiB0aGUgOmNsYXNzOmBNYXBwaW5nYCBvciA6Y2xhc3M6YE11dGFibGVNYXBwaW5nYAorICAgICAgOnJlZjpgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIDxhYnN0cmFjdC1iYXNlLWNsYXNzZXM+YC4gRXhhbXBsZXMgaW5jbHVkZQorICAgICAgOmNsYXNzOmBkaWN0YCwgOmNsYXNzOmBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdGAsCisgICAgICA6Y2xhc3M6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCBhbmQgOmNsYXNzOmBjb2xsZWN0aW9ucy5Db3VudGVyYC4KIAogICAgbWV0YWNsYXNzCiAgICAgICBUaGUgY2xhc3Mgb2YgYSBjbGFzcy4gIENsYXNzIGRlZmluaXRpb25zIGNyZWF0ZSBhIGNsYXNzIG5hbWUsIGEgY2xhc3MKQEAgLTU0Miw2ICs2MDIsMTMgQEAKICAgICAgIG9iamVjdCBoYXMgYSB0eXBlLiAgQW4gb2JqZWN0J3MgdHlwZSBpcyBhY2Nlc3NpYmxlIGFzIGl0cwogICAgICAgOmF0dHI6YF9fY2xhc3NfX2AgYXR0cmlidXRlIG9yIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBgYHR5cGUob2JqKWBgLgogCisgICB2aWV3CisgICAgICBUaGUgb2JqZWN0cyByZXR1cm5lZCBmcm9tIDptZXRoOmBkaWN0LnZpZXdrZXlzYCwgOm1ldGg6YGRpY3Qudmlld3ZhbHVlc2AsCisgICAgICBhbmQgOm1ldGg6YGRpY3Qudmlld2l0ZW1zYCBhcmUgY2FsbGVkIGRpY3Rpb25hcnkgdmlld3MuICBUaGV5IGFyZSBsYXp5CisgICAgICBzZXF1ZW5jZXMgdGhhdCB3aWxsIHNlZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIGRpY3Rpb25hcnkuICBUbyBmb3JjZQorICAgICAgdGhlIGRpY3Rpb25hcnkgdmlldyB0byBiZWNvbWUgYSBmdWxsIGxpc3QgdXNlIGBgbGlzdChkaWN0dmlldylgYC4gIFNlZQorICAgICAgOnJlZjpgZGljdC12aWV3c2AuCisKICAgIHZpcnR1YWwgbWFjaGluZQogICAgICAgQSBjb21wdXRlciBkZWZpbmVkIGVudGlyZWx5IGluIHNvZnR3YXJlLiAgUHl0aG9uJ3MgdmlydHVhbCBtYWNoaW5lCiAgICAgICBleGVjdXRlcyB0aGUgOnRlcm06YGJ5dGVjb2RlYCBlbWl0dGVkIGJ5IHRoZSBieXRlY29kZSBjb21waWxlci4KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9jcG9ydGluZy5yc3QgYi9Eb2MvaG93dG8vY3BvcnRpbmcucnN0CmluZGV4IGMwYjU5MzMuLjgwMzBmMTMgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9jcG9ydGluZy5yc3QKKysrIGIvRG9jL2hvd3RvL2Nwb3J0aW5nLnJzdApAQCAtNDgsOSArNDgsOSBAQAogY29tcGF0aWJpbGl0eSB3aXRoIDMuMCwgOmN0eXBlOmBQeVVuaWNvZGVgIHNob3VsZCBiZSB1c2VkIGZvciB0ZXh0dWFsIGRhdGEgYW5kCiA6Y3R5cGU6YFB5Qnl0ZXNgIGZvciBiaW5hcnkgZGF0YS4gIEl0J3MgYWxzbyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdAogOmN0eXBlOmBQeUJ5dGVzYCBhbmQgOmN0eXBlOmBQeVVuaWNvZGVgIGluIDMuMCBhcmUgbm90IGludGVyY2hhbmdlYWJsZSBsaWtlCi06Y3R5cGU6YFB5U3RyaW5nYCBhbmQgOmN0eXBlOmBQeVN0cmluZ2AgYXJlIGluIDIueC4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cwotYmVzdCBwcmFjdGljZXMgd2l0aCByZWdhcmRzIHRvIDpjdHlwZTpgUHlVbmljb2RlYCwgOmN0eXBlOmBQeVN0cmluZ2AsIGFuZAotOmN0eXBlOmBQeUJ5dGVzYC4gOjoKKzpjdHlwZTpgUHlTdHJpbmdgIGFuZCA6Y3R5cGU6YFB5VW5pY29kZWAgYXJlIGluIDIueC4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQorc2hvd3MgYmVzdCBwcmFjdGljZXMgd2l0aCByZWdhcmRzIHRvIDpjdHlwZTpgUHlVbmljb2RlYCwgOmN0eXBlOmBQeVN0cmluZ2AsCithbmQgOmN0eXBlOmBQeUJ5dGVzYC4gOjoKIAogICAgI2luY2x1ZGUgInN0ZGxpYi5oIgogICAgI2luY2x1ZGUgIlB5dGhvbi5oIgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2Rlc2NyaXB0b3IucnN0IGIvRG9jL2hvd3RvL2Rlc2NyaXB0b3IucnN0CmluZGV4IDNjYzQzN2YuLjU1YTFkNjIgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9kZXNjcmlwdG9yLnJzdAorKysgYi9Eb2MvaG93dG8vZGVzY3JpcHRvci5yc3QKQEAgLTI5Niw3ICsyOTYsNyBAQAogICAgIDxib3VuZCBtZXRob2QgRC5mIG9mIDxfX21haW5fXy5EIG9iamVjdCBhdCAweDAwQjE4QzkwPj4KIAogVGhlIG91dHB1dCBzdWdnZXN0cyB0aGF0IGJvdW5kIGFuZCB1bmJvdW5kIG1ldGhvZHMgYXJlIHR3byBkaWZmZXJlbnQgdHlwZXMuCi1XaGlsZSB0aGV5IGNvdWxkIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCB0aGF0IHdheSwgdGhlIGFjdHVhbCBDIGltcGxlbWVudGlvbiBvZgorV2hpbGUgdGhleSBjb3VsZCBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgdGhhdCB3YXksIHRoZSBhY3R1YWwgQyBpbXBsZW1lbnRhdGlvbiBvZgogOmN0eXBlOmBQeU1ldGhvZF9UeXBlYCBpbgogYE9iamVjdHMvY2xhc3NvYmplY3QuYyA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL3RydW5rL09iamVjdHMvY2xhc3NvYmplY3QuYz92aWV3PW1hcmt1cD5gXwogaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdHdvIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vZG9hbmRkb250LnJzdCBiL0RvYy9ob3d0by9kb2FuZGRvbnQucnN0CmluZGV4IDA1ZDhkZjkuLjJlOWUwYjggMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9kb2FuZGRvbnQucnN0CisrKyBiL0RvYy9ob3d0by9kb2FuZGRvbnQucnN0CkBAIC0xNDQsMzAgKzE0NCw0NCBAQAogLS0tLS0tLQogCiBQeXRob24gaGFzIHRoZSBgYGV4Y2VwdDpgYCBjbGF1c2UsIHdoaWNoIGNhdGNoZXMgYWxsIGV4Y2VwdGlvbnMuIFNpbmNlICpldmVyeSoKLWVycm9yIGluIFB5dGhvbiByYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGlzIG1ha2VzIG1hbnkgcHJvZ3JhbW1pbmcgZXJyb3JzIGxvb2sKLWxpa2UgcnVudGltZSBwcm9ibGVtcywgYW5kIGhpbmRlcnMgdGhlIGRlYnVnZ2luZyBwcm9jZXNzLgorZXJyb3IgaW4gUHl0aG9uIHJhaXNlcyBhbiBleGNlcHRpb24sIHVzaW5nIGBgZXhjZXB0OmBgIGNhbiBtYWtlIG1hbnkKK3Byb2dyYW1taW5nIGVycm9ycyBsb29rIGxpa2UgcnVudGltZSBwcm9ibGVtcywgd2hpY2ggaGluZGVycyB0aGUgZGVidWdnaW5nCitwcm9jZXNzLgogCi1UaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYSBncmVhdCBleGFtcGxlOjoKK1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyBhIGdyZWF0IGV4YW1wbGUgb2Ygd2h5IHRoaXMgaXMgYmFkOjoKIAogICAgdHJ5OgogICAgICAgIGZvbyA9IG9wbmUoImZpbGUiKSAjIG1pc3NwZWxsZWQgIm9wZW4iCiAgICBleGNlcHQ6CiAgICAgICAgc3lzLmV4aXQoImNvdWxkIG5vdCBvcGVuIGZpbGUhIikKIAotVGhlIHNlY29uZCBsaW5lIHRyaWdnZXJzIGEgOmV4YzpgTmFtZUVycm9yYCB3aGljaCBpcyBjYXVnaHQgYnkgdGhlIGV4Y2VwdAotY2xhdXNlLiBUaGUgcHJvZ3JhbSB3aWxsIGV4aXQsIGFuZCB5b3Ugd2lsbCBoYXZlIG5vIGlkZWEgdGhhdCB0aGlzIGhhcyBub3RoaW5nCi10byBkbyB3aXRoIHRoZSByZWFkYWJpbGl0eSBvZiBgYCJmaWxlImBgLgorVGhlIHNlY29uZCBsaW5lIHRyaWdnZXJzIGEgOmV4YzpgTmFtZUVycm9yYCwgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBleGNlcHQKK2NsYXVzZS4gVGhlIHByb2dyYW0gd2lsbCBleGl0LCBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgdGhlIHByb2dyYW0gcHJpbnRzIHdpbGwKK21ha2UgeW91IHRoaW5rIHRoZSBwcm9ibGVtIGlzIHRoZSByZWFkYWJpbGl0eSBvZiBgYCJmaWxlImBgIHdoZW4gaW4gZmFjdAordGhlIHJlYWwgZXJyb3IgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBgYCJmaWxlImBgLgogCi1UaGUgZXhhbXBsZSBhYm92ZSBpcyBiZXR0ZXIgd3JpdHRlbiA6OgorQSBiZXR0ZXIgd2F5IHRvIHdyaXRlIHRoZSBhYm92ZSBpcyA6OgogCiAgICB0cnk6Ci0gICAgICAgZm9vID0gb3BuZSgiZmlsZSIpICMgd2lsbCBiZSBjaGFuZ2VkIHRvICJvcGVuIiBhcyBzb29uIGFzIHdlIHJ1biBpdAorICAgICAgIGZvbyA9IG9wbmUoImZpbGUiKQogICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgc3lzLmV4aXQoImNvdWxkIG5vdCBvcGVuIGZpbGUiKQogCi1UaGVyZSBhcmUgc29tZSBzaXR1YXRpb25zIGluIHdoaWNoIHRoZSBgYGV4Y2VwdDpgYCBjbGF1c2UgaXMgdXNlZnVsOiBmb3IKLWV4YW1wbGUsIGluIGEgZnJhbWV3b3JrIHdoZW4gcnVubmluZyBjYWxsYmFja3MsIGl0IGlzIGdvb2Qgbm90IHRvIGxldCBhbnkKLWNhbGxiYWNrIGRpc3R1cmIgdGhlIGZyYW1ld29yay4KK1doZW4gdGhpcyBpcyBydW4sIFB5dGhvbiB3aWxsIHByb2R1Y2UgYSB0cmFjZWJhY2sgc2hvd2luZyB0aGUgOmV4YzpgTmFtZUVycm9yYCwKK2FuZCBpdCB3aWxsIGJlIGltbWVkaWF0ZWx5IGFwcGFyZW50IHdoYXQgbmVlZHMgdG8gYmUgZml4ZWQuCisKKy4uIGluZGV4OjogYmFyZSBleGNlcHQsIGV4Y2VwdDsgYmFyZQorCitCZWNhdXNlIGBgZXhjZXB0OmBgIGNhdGNoZXMgKmFsbCogZXhjZXB0aW9ucywgaW5jbHVkaW5nIDpleGM6YFN5c3RlbUV4aXRgLAorOmV4YzpgS2V5Ym9hcmRJbnRlcnJ1cHRgLCBhbmQgOmV4YzpgR2VuZXJhdG9yRXhpdGAgKHdoaWNoIGlzIG5vdCBhbiBlcnJvciBhbmQKK3Nob3VsZCBub3Qgbm9ybWFsbHkgYmUgY2F1Z2h0IGJ5IHVzZXIgY29kZSksIHVzaW5nIGEgYmFyZSBgYGV4Y2VwdDpgYCBpcyBhbG1vc3QKK25ldmVyIGEgZ29vZCBpZGVhLiAgSW4gc2l0dWF0aW9ucyB3aGVyZSB5b3UgbmVlZCB0byBjYXRjaCBhbGwgIm5vcm1hbCIgZXJyb3JzLAorc3VjaCBhcyBpbiBhIGZyYW1ld29yayB0aGF0IHJ1bnMgY2FsbGJhY2tzLCB5b3UgY2FuIGNhdGNoIHRoZSBiYXNlIGNsYXNzIGZvcgorYWxsIG5vcm1hbCBleGNlcHRpb25zLCA6ZXhjOmBFeGNlcHRpb25gLiAgVW5mb3J0dW5hdGVseSBpbiBQeXRob24gMi54IGl0IGlzCitwb3NzaWJsZSBmb3IgdGhpcmQtcGFydHkgY29kZSB0byByYWlzZSBleGNlcHRpb25zIHRoYXQgZG8gbm90IGluaGVyaXQgZnJvbQorOmV4YzpgRXhjZXB0aW9uYCwgc28gaW4gUHl0aG9uIDIueCB0aGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB5b3UgbWF5IGhhdmUgdG8KK3VzZSBhIGJhcmUgYGBleGNlcHQ6YGAgYW5kIG1hbnVhbGx5IHJlLXJhaXNlIHRoZSBleGNlcHRpb25zIHlvdSBkb24ndCB3YW50Cit0byBjYXRjaC4KIAogCiBFeGNlcHRpb25zCkBAIC0xODUsNTEgKzE5OSw2MCBAQAogICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgIHJldHVybiBvcGVuKGZpbGUpLnJlYWRsaW5lKCkKIAotQ29uc2lkZXIgdGhlIGNhc2UgdGhlIGZpbGUgZ2V0cyBkZWxldGVkIGJldHdlZW4gdGhlIHRpbWUgdGhlIGNhbGwgdG8KLTpmdW5jOmBvcy5wYXRoLmV4aXN0c2AgaXMgbWFkZSBhbmQgdGhlIHRpbWUgOmZ1bmM6YG9wZW5gIGlzIGNhbGxlZC4gVGhhdCBtZWFucwotdGhlIGxhc3QgbGluZSB3aWxsIHRocm93IGFuIDpleGM6YElPRXJyb3JgLiBUaGUgc2FtZSB3b3VsZCBoYXBwZW4gaWYgKmZpbGUqCi1leGlzdHMgYnV0IGhhcyBubyByZWFkIHBlcm1pc3Npb24uIFNpbmNlIHRlc3RpbmcgdGhpcyBvbiBhIG5vcm1hbCBtYWNoaW5lIG9uCi1leGlzdGluZyBhbmQgbm9uLWV4aXN0aW5nIGZpbGVzIG1ha2UgaXQgc2VlbSBidWdsZXNzLCB0aGF0IG1lYW5zIGluIHRlc3RpbmcgdGhlCi1yZXN1bHRzIHdpbGwgc2VlbSBmaW5lLCBhbmQgdGhlIGNvZGUgd2lsbCBnZXQgc2hpcHBlZC4gVGhlbiBhbiB1bmhhbmRsZWQKLTpleGM6YElPRXJyb3JgIGVzY2FwZXMgdG8gdGhlIHVzZXIsIHdobyBoYXMgdG8gd2F0Y2ggdGhlIHVnbHkgdHJhY2ViYWNrLgorQ29uc2lkZXIgdGhlIGNhc2Ugd2hlcmUgdGhlIGZpbGUgZ2V0cyBkZWxldGVkIGJldHdlZW4gdGhlIHRpbWUgdGhlIGNhbGwgdG8KKzpmdW5jOmBvcy5wYXRoLmV4aXN0c2AgaXMgbWFkZSBhbmQgdGhlIHRpbWUgOmZ1bmM6YG9wZW5gIGlzIGNhbGxlZC4gSW4gdGhhdAorY2FzZSB0aGUgbGFzdCBsaW5lIHdpbGwgcmFpc2UgYW4gOmV4YzpgSU9FcnJvcmAuICBUaGUgc2FtZSB0aGluZyB3b3VsZCBoYXBwZW4KK2lmICpmaWxlKiBleGlzdHMgYnV0IGhhcyBubyByZWFkIHBlcm1pc3Npb24uICBTaW5jZSB0ZXN0aW5nIHRoaXMgb24gYSBub3JtYWwKK21hY2hpbmUgb24gZXhpc3RlbnQgYW5kIG5vbi1leGlzdGVudCBmaWxlcyBtYWtlcyBpdCBzZWVtIGJ1Z2xlc3MsIHRoZSB0ZXN0CityZXN1bHRzIHdpbGwgc2VlbSBmaW5lLCBhbmQgdGhlIGNvZGUgd2lsbCBnZXQgc2hpcHBlZC4gIExhdGVyIGFuIHVuaGFuZGxlZAorOmV4YzpgSU9FcnJvcmAgKG9yIHBlcmhhcHMgc29tZSBvdGhlciA6ZXhjOmBFbnZpcm9ubWVudEVycm9yYCkgZXNjYXBlcyB0byB0aGUKK3VzZXIsIHdobyBnZXRzIHRvIHdhdGNoIHRoZSB1Z2x5IHRyYWNlYmFjay4KIAotSGVyZSBpcyBhIGJldHRlciB3YXkgdG8gZG8gaXQuIDo6CitIZXJlIGlzIGEgc29tZXdoYXQgYmV0dGVyIHdheSB0byBkbyBpdC4gOjoKIAogICAgZGVmIGdldF9zdGF0dXMoZmlsZSk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXR1cm4gb3BlbihmaWxlKS5yZWFkbGluZSgpCi0gICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKToKLSAgICAgICAgICAgcHJpbnQgImZpbGUgbm90IGZvdW5kIgorICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgcHJpbnQgIlVuYWJsZSB0byBvcGVuIGZpbGU6IHt9Ii5mb3JtYXQoZXJyKQogICAgICAgICAgICBzeXMuZXhpdCgxKQogCi1JbiB0aGlzIHZlcnNpb24sIFwqZWl0aGVyXCogdGhlIGZpbGUgZ2V0cyBvcGVuZWQgYW5kIHRoZSBsaW5lIGlzIHJlYWQgKHNvIGl0Ci13b3JrcyBldmVuIG9uIGZsYWt5IE5GUyBvciBTTUIgY29ubmVjdGlvbnMpLCBvciB0aGUgbWVzc2FnZSBpcyBwcmludGVkIGFuZCB0aGUKLWFwcGxpY2F0aW9uIGFib3J0ZWQuCitJbiB0aGlzIHZlcnNpb24sICplaXRoZXIqIHRoZSBmaWxlIGdldHMgb3BlbmVkIGFuZCB0aGUgbGluZSBpcyByZWFkIChzbyBpdAord29ya3MgZXZlbiBvbiBmbGFreSBORlMgb3IgU01CIGNvbm5lY3Rpb25zKSwgb3IgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkCit0aGF0IHByb3ZpZGVzIGFsbCB0aGUgYXZhaWxhYmxlIGluZm9ybWF0aW9uIG9uIHdoeSB0aGUgb3BlbiBmYWlsZWQsIGFuZCB0aGUKK2FwcGxpY2F0aW9uIGlzIGFib3J0ZWQuCiAKLVN0aWxsLCA6ZnVuYzpgZ2V0X3N0YXR1c2AgbWFrZXMgdG9vIG1hbnkgYXNzdW1wdGlvbnMgLS0tIHRoYXQgaXQgd2lsbCBvbmx5IGJlCi11c2VkIGluIGEgc2hvcnQgcnVubmluZyBzY3JpcHQsIGFuZCBub3QsIHNheSwgaW4gYSBsb25nIHJ1bm5pbmcgc2VydmVyLiBTdXJlLAotdGhlIGNhbGxlciBjb3VsZCBkbyBzb21ldGhpbmcgbGlrZSA6OgorSG93ZXZlciwgZXZlbiB0aGlzIHZlcnNpb24gb2YgOmZ1bmM6YGdldF9zdGF0dXNgIG1ha2VzIHRvbyBtYW55IGFzc3VtcHRpb25zIC0tLQordGhhdCBpdCB3aWxsIG9ubHkgYmUgdXNlZCBpbiBhIHNob3J0IHJ1bm5pbmcgc2NyaXB0LCBhbmQgbm90LCBzYXksIGluIGEgbG9uZworcnVubmluZyBzZXJ2ZXIuIFN1cmUsIHRoZSBjYWxsZXIgY291bGQgZG8gc29tZXRoaW5nIGxpa2UgOjoKIAogICAgdHJ5OgogICAgICAgIHN0YXR1cyA9IGdldF9zdGF0dXMobG9nKQogICAgZXhjZXB0IFN5c3RlbUV4aXQ6CiAgICAgICAgc3RhdHVzID0gTm9uZQogCi1TbywgdHJ5IHRvIG1ha2UgYXMgZmV3IGBgZXhjZXB0YGAgY2xhdXNlcyBpbiB5b3VyIGNvZGUgLS0tIHRob3NlIHdpbGwgdXN1YWxseSBiZQotYSBjYXRjaC1hbGwgaW4gdGhlIDpmdW5jOmBtYWluYCwgb3IgaW5zaWRlIGNhbGxzIHdoaWNoIHNob3VsZCBhbHdheXMgc3VjY2VlZC4KK0J1dCB0aGVyZSBpcyBhIGJldHRlciB3YXkuICBZb3Ugc2hvdWxkIHRyeSB0byB1c2UgYXMgZmV3IGBgZXhjZXB0YGAgY2xhdXNlcyBpbgoreW91ciBjb2RlIGFzIHlvdSBjYW4gLS0tIHRoZSBvbmVzIHlvdSBkbyB1c2Ugd2lsbCB1c3VhbGx5IGJlIGluc2lkZSBjYWxscyB3aGljaAorc2hvdWxkIGFsd2F5cyBzdWNjZWVkLCBvciBhIGNhdGNoLWFsbCBpbiBhIG1haW4gZnVuY3Rpb24uCiAKLVNvLCB0aGUgYmVzdCB2ZXJzaW9uIGlzIHByb2JhYmx5IDo6CitTbywgYW4gZXZlbiBiZXR0ZXIgdmVyc2lvbiBvZiA6ZnVuYzpgZ2V0X3N0YXR1cygpYCBpcyBwcm9iYWJseSA6OgogCiAgICBkZWYgZ2V0X3N0YXR1cyhmaWxlKToKICAgICAgICByZXR1cm4gb3BlbihmaWxlKS5yZWFkbGluZSgpCiAKLVRoZSBjYWxsZXIgY2FuIGRlYWwgd2l0aCB0aGUgZXhjZXB0aW9uIGlmIGl0IHdhbnRzIChmb3IgZXhhbXBsZSwgaWYgaXQgIHRyaWVzCitUaGUgY2FsbGVyIGNhbiBkZWFsIHdpdGggdGhlIGV4Y2VwdGlvbiBpZiBpdCB3YW50cyAoZm9yIGV4YW1wbGUsIGlmIGl0IHRyaWVzCiBzZXZlcmFsIGZpbGVzIGluIGEgbG9vcCksIG9yIGp1c3QgbGV0IHRoZSBleGNlcHRpb24gZmlsdGVyIHVwd2FyZHMgdG8gKml0cyoKIGNhbGxlci4KIAotVGhlIGxhc3QgdmVyc2lvbiBpcyBub3QgdmVyeSBnb29kIGVpdGhlciAtLS0gZHVlIHRvIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHRoZQotZmlsZSB3b3VsZCBub3QgYmUgY2xvc2VkIHdoZW4gYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCB1bnRpbCB0aGUgaGFuZGxlciBmaW5pc2hlcywKLWFuZCBwZXJoYXBzIG5vdCBhdCBhbGwgaW4gbm9uLUMgaW1wbGVtZW50YXRpb25zIChlLmcuLCBKeXRob24pLiA6OgorQnV0IHRoZSBsYXN0IHZlcnNpb24gc3RpbGwgaGFzIGEgc2VyaW91cyBwcm9ibGVtIC0tLSBkdWUgdG8gaW1wbGVtZW50YXRpb24KK2RldGFpbHMgaW4gQ1B5dGhvbiwgdGhlIGZpbGUgd291bGQgbm90IGJlIGNsb3NlZCB3aGVuIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQKK3VudGlsIHRoZSBleGNlcHRpb24gaGFuZGxlciBmaW5pc2hlczsgYW5kLCB3b3JzZSwgaW4gb3RoZXIgaW1wbGVtZW50YXRpb25zCisoZS5nLiwgSnl0aG9uKSBpdCBtaWdodCBub3QgYmUgY2xvc2VkIGF0IGFsbCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90CithbiBleGNlcHRpb24gaXMgcmFpc2VkLgorCitUaGUgYmVzdCB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYGBvcGVuKClgYCBjYWxsIGFzIGEgY29udGV4dAorbWFuYWdlciwgd2hpY2ggd2lsbCBlbnN1cmUgdGhhdCB0aGUgZmlsZSBnZXRzIGNsb3NlZCBhcyBzb29uIGFzIHRoZQorZnVuY3Rpb24gcmV0dXJuczo6CiAKICAgIGRlZiBnZXRfc3RhdHVzKGZpbGUpOgogICAgICAgIHdpdGggb3BlbihmaWxlKSBhcyBmcDoKQEAgLTI1OCwyMyArMjgxLDIyIEBACiBNb3JlIHVzZWZ1bCBmdW5jdGlvbnMgaW4gOm1vZDpgb3MucGF0aGA6IDpmdW5jOmBiYXNlbmFtZWAsICA6ZnVuYzpgZGlybmFtZWAgYW5kCiA6ZnVuYzpgc3BsaXRleHRgLgogCi1UaGVyZSBhcmUgYWxzbyBtYW55IHVzZWZ1bCBidWlsdC1pbiBmdW5jdGlvbnMgcGVvcGxlIHNlZW0gbm90IHRvIGJlIGF3YXJlIG9mIGZvcgotc29tZSByZWFzb246IDpmdW5jOmBtaW5gIGFuZCA6ZnVuYzpgbWF4YCBjYW4gZmluZCB0aGUgbWluaW11bS9tYXhpbXVtIG9mIGFueQotc2VxdWVuY2Ugd2l0aCBjb21wYXJhYmxlIHNlbWFudGljcywgZm9yIGV4YW1wbGUsIHlldCBtYW55IHBlb3BsZSB3cml0ZSB0aGVpciBvd24KLTpmdW5jOmBtYXhgLzpmdW5jOmBtaW5gLiBBbm90aGVyIGhpZ2hseSB1c2VmdWwgZnVuY3Rpb24gaXMgOmZ1bmM6YHJlZHVjZWAuIEEKLWNsYXNzaWNhbCB1c2Ugb2YgOmZ1bmM6YHJlZHVjZWAgaXMgc29tZXRoaW5nIGxpa2UgOjoKK1RoZXJlIGFyZSBhbHNvIG1hbnkgdXNlZnVsIGJ1aWx0LWluIGZ1bmN0aW9ucyBwZW9wbGUgc2VlbSBub3QgdG8gYmUgYXdhcmUgb2YKK2ZvciBzb21lIHJlYXNvbjogOmZ1bmM6YG1pbmAgYW5kIDpmdW5jOmBtYXhgIGNhbiBmaW5kIHRoZSBtaW5pbXVtL21heGltdW0gb2YKK2FueSBzZXF1ZW5jZSB3aXRoIGNvbXBhcmFibGUgc2VtYW50aWNzLCBmb3IgZXhhbXBsZSwgeWV0IG1hbnkgcGVvcGxlIHdyaXRlCit0aGVpciBvd24gOmZ1bmM6YG1heGAvOmZ1bmM6YG1pbmAuIEFub3RoZXIgaGlnaGx5IHVzZWZ1bCBmdW5jdGlvbiBpcworOmZ1bmM6YHJlZHVjZWAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVwZWF0bHkgYXBwbHkgYSBiaW5hcnkgb3BlcmF0aW9uIHRvIGEKK3NlcXVlbmNlLCByZWR1Y2luZyBpdCB0byBhIHNpbmdsZSB2YWx1ZS4gIEZvciBleGFtcGxlLCBjb21wdXRlIGEgZmFjdG9yaWFsCit3aXRoIGEgc2VyaWVzIG9mIG11bHRpcGx5IG9wZXJhdGlvbnM6OgogCi0gICBpbXBvcnQgc3lzLCBvcGVyYXRvcgotICAgbnVtcyA9IG1hcChmbG9hdCwgc3lzLmFyZ3ZbMTpdKQotICAgcHJpbnQgcmVkdWNlKG9wZXJhdG9yLmFkZCwgbnVtcykvbGVuKG51bXMpCisgICA+Pj4gbiA9IDQKKyAgID4+PiBpbXBvcnQgb3BlcmF0b3IKKyAgID4+PiByZWR1Y2Uob3BlcmF0b3IubXVsLCByYW5nZSgxLCBuKzEpKQorICAgMjQKIAotVGhpcyBjdXRlIGxpdHRsZSBzY3JpcHQgcHJpbnRzIHRoZSBhdmVyYWdlIG9mIGFsbCBudW1iZXJzIGdpdmVuIG9uIHRoZSBjb21tYW5kCi1saW5lLiBUaGUgOmZ1bmM6YHJlZHVjZWAgYWRkcyB1cCBhbGwgdGhlIG51bWJlcnMsIGFuZCB0aGUgcmVzdCBpcyBqdXN0IHNvbWUKLXByZS0gYW5kIHBvc3Rwcm9jZXNzaW5nLgotCi1PbiB0aGUgc2FtZSBub3RlLCBub3RlIHRoYXQgOmZ1bmM6YGZsb2F0YCwgOmZ1bmM6YGludGAgYW5kIDpmdW5jOmBsb25nYCBhbGwKLWFjY2VwdCBhcmd1bWVudHMgb2YgdHlwZSBzdHJpbmcsIGFuZCBzbyBhcmUgc3VpdGVkIHRvIHBhcnNpbmcgLS0tIGFzc3VtaW5nIHlvdQotYXJlIHJlYWR5IHRvIGRlYWwgd2l0aCB0aGUgOmV4YzpgVmFsdWVFcnJvcmAgdGhleSByYWlzZS4KK1doZW4gaXQgY29tZXMgdG8gcGFyc2luZyBudW1iZXJzLCBub3RlIHRoYXQgOmZ1bmM6YGZsb2F0YCwgOmZ1bmM6YGludGAgYW5kCis6ZnVuYzpgbG9uZ2AgYWxsIGFjY2VwdCBzdHJpbmcgYXJndW1lbnRzIGFuZCB3aWxsIHJlamVjdCBpbGwtZm9ybWVkIHN0cmluZ3MKK2J5IHJhaXNpbmcgYW4gOmV4YzpgVmFsdWVFcnJvcmAuCiAKIAogVXNpbmcgQmFja3NsYXNoIHRvIENvbnRpbnVlIFN0YXRlbWVudHMKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdCBiL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdAppbmRleCBmNTUzY2ViLi40YWUyMTZhIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKKysrIGIvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CkBAIC01LDkgKzUsNiBAQAogOkF1dGhvcjogQS4gTS4gS3VjaGxpbmcKIDpSZWxlYXNlOiAwLjMxCiAKLShUaGlzIGlzIGEgZmlyc3QgZHJhZnQuICBQbGVhc2Ugc2VuZCBjb21tZW50cy9lcnJvciByZXBvcnRzL3N1Z2dlc3Rpb25zIHRvCi1hbWtAYW1rLmNhLikKLQogSW4gdGhpcyBkb2N1bWVudCwgd2UnbGwgdGFrZSBhIHRvdXIgb2YgUHl0aG9uJ3MgZmVhdHVyZXMgc3VpdGFibGUgZm9yCiBpbXBsZW1lbnRpbmcgcHJvZ3JhbXMgaW4gYSBmdW5jdGlvbmFsIHN0eWxlLiAgQWZ0ZXIgYW4gaW50cm9kdWN0aW9uIHRvIHRoZQogY29uY2VwdHMgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZywgd2UnbGwgbG9vayBhdCBsYW5ndWFnZSBmZWF0dXJlcyBzdWNoIGFzCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vcmVnZXgucnN0IGIvRG9jL2hvd3RvL3JlZ2V4LnJzdAppbmRleCAxYWIyOTFhLi4xMDA1YzIzIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vcmVnZXgucnN0CisrKyBiL0RvYy9ob3d0by9yZWdleC5yc3QKQEAgLTUsNyArNSw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIDpBdXRob3I6IEEuTS4gS3VjaGxpbmcgPGFta0BhbWsuY2E+Ci06UmVsZWFzZTogMC4wNQogCiAuLiBUT0RPOgogICAgRG9jdW1lbnQgbG9va2JlaGluZCBhc3NlcnRpb25zCkBAIC0xMTMsNyArMTEyLDEwIEBACiBTb21lIG9mIHRoZSBzcGVjaWFsIHNlcXVlbmNlcyBiZWdpbm5pbmcgd2l0aCBgYCdcJ2BgIHJlcHJlc2VudCBwcmVkZWZpbmVkIHNldHMKIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgb2Z0ZW4gdXNlZnVsLCBzdWNoIGFzIHRoZSBzZXQgb2YgZGlnaXRzLCB0aGUgc2V0IG9mCiBsZXR0ZXJzLCBvciB0aGUgc2V0IG9mIGFueXRoaW5nIHRoYXQgaXNuJ3Qgd2hpdGVzcGFjZS4gIFRoZSBmb2xsb3dpbmcgcHJlZGVmaW5lZAotc3BlY2lhbCBzZXF1ZW5jZXMgYXJlIGF2YWlsYWJsZToKK3NwZWNpYWwgc2VxdWVuY2VzIGFyZSBhIHN1YnNldCBvZiB0aG9zZSBhdmFpbGFibGUuIFRoZSBlcXVpdmFsZW50IGNsYXNzZXMgYXJlCitmb3IgYnl0ZSBzdHJpbmcgcGF0dGVybnMuIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2Ygc2VxdWVuY2VzIGFuZCBleHBhbmRlZCBjbGFzcworZGVmaW5pdGlvbnMgZm9yIFVuaWNvZGUgc3RyaW5nIHBhdHRlcm5zLCBzZWUgdGhlIGxhc3QgcGFydCBvZgorOnJlZjpgUmVndWxhciBFeHByZXNzaW9uIFN5bnRheCA8cmUtc3ludGF4PmAuCiAKIGBgXGRgYAogICAgTWF0Y2hlcyBhbnkgZGVjaW1hbCBkaWdpdDsgdGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBjbGFzcyBgYFswLTldYGAuCkBAIC0yNjQsNyArMjY2LDcgQEAKICAgID4+PiBpbXBvcnQgcmUKICAgID4+PiBwID0gcmUuY29tcGlsZSgnYWIqJykKICAgID4+PiBwcmludCBwCi0gICA8X3NyZS5TUkVfUGF0dGVybiBvYmplY3QgYXQgODBiNDE1MD4KKyAgIDxfc3JlLlNSRV9QYXR0ZXJuIG9iamVjdCBhdCAweC4uLj4KIAogOmZ1bmM6YHJlLmNvbXBpbGVgIGFsc28gYWNjZXB0cyBhbiBvcHRpb25hbCAqZmxhZ3MqIGFyZ3VtZW50LCB1c2VkIHRvIGVuYWJsZQogdmFyaW91cyBzcGVjaWFsIGZlYXR1cmVzIGFuZCBzeW50YXggdmFyaWF0aW9ucy4gIFdlJ2xsIGdvIG92ZXIgdGhlIGF2YWlsYWJsZQpAQCAtMzc3LDcgKzM3OSw3IEBACiAgICA+Pj4gaW1wb3J0IHJlCiAgICA+Pj4gcCA9IHJlLmNvbXBpbGUoJ1thLXpdKycpCiAgICA+Pj4gcAotICAgPF9zcmUuU1JFX1BhdHRlcm4gb2JqZWN0IGF0IDgwYzNjMjg+CisgICA8X3NyZS5TUkVfUGF0dGVybiBvYmplY3QgYXQgMHguLi4+CiAKIE5vdywgeW91IGNhbiB0cnkgbWF0Y2hpbmcgdmFyaW91cyBzdHJpbmdzIGFnYWluc3QgdGhlIFJFIGBgW2Etel0rYGAuICBBbiBlbXB0eQogc3RyaW5nIHNob3VsZG4ndCBtYXRjaCBhdCBhbGwsIHNpbmNlIGBgK2BgIG1lYW5zICdvbmUgb3IgbW9yZSByZXBldGl0aW9ucycuCkBAIC0zOTUsNyArMzk3LDcgQEAKIAogICAgPj4+IG0gPSBwLm1hdGNoKCd0ZW1wbycpCiAgICA+Pj4gcHJpbnQgbQotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCA4MGM0ZjY4PgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KIAogTm93IHlvdSBjYW4gcXVlcnkgdGhlIDpjbGFzczpgTWF0Y2hPYmplY3RgIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF0Y2hpbmcKIHN0cmluZy4gICA6Y2xhc3M6YE1hdGNoT2JqZWN0YCBpbnN0YW5jZXMgYWxzbyBoYXZlIHNldmVyYWwgbWV0aG9kcyBhbmQKQEAgLTQzNCw3ICs0MzYsNyBAQAogICAgPj4+IHByaW50IHAubWF0Y2goJzo6OiBtZXNzYWdlJykKICAgIE5vbmUKICAgID4+PiBtID0gcC5zZWFyY2goJzo6OiBtZXNzYWdlJykgOyBwcmludCBtCi0gICA8cmUuTWF0Y2hPYmplY3QgaW5zdGFuY2UgYXQgODBjOTY1MD4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CiAgICA+Pj4gbS5ncm91cCgpCiAgICAnbWVzc2FnZScKICAgID4+PiBtLnNwYW4oKQpAQCAtNDg1LDcgKzQ4Nyw3IEBACiAgICA+Pj4gcHJpbnQgcmUubWF0Y2gocidGcm9tXHMrJywgJ0Zyb21hZ2UgYW1rJykKICAgIE5vbmUKICAgID4+PiByZS5tYXRjaChyJ0Zyb21ccysnLCAnRnJvbSBhbWsgVGh1IE1heSAxNCAxOToxMjoxMCAxOTk4JykKLSAgIDxyZS5NYXRjaE9iamVjdCBpbnN0YW5jZSBhdCA4MGM1OTc4PgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KIAogVW5kZXIgdGhlIGhvb2QsIHRoZXNlIGZ1bmN0aW9ucyBzaW1wbHkgY3JlYXRlIGEgcGF0dGVybiBvYmplY3QgZm9yIHlvdQogYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBvbiBpdC4gIFRoZXkgYWxzbyBzdG9yZSB0aGUgY29tcGlsZWQgb2JqZWN0IGluIGEKQEAgLTY4Niw3ICs2ODgsNyBAQAogICAgbGluZSwgdGhlIFJFIHRvIHVzZSBpcyBgYF5Gcm9tYGAuIDo6CiAKICAgICAgID4+PiBwcmludCByZS5zZWFyY2goJ15Gcm9tJywgJ0Zyb20gSGVyZSB0byBFdGVybml0eScpCi0gICAgICA8cmUuTWF0Y2hPYmplY3QgaW5zdGFuY2UgYXQgODBjMTUyMD4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CiAgICAgICA+Pj4gcHJpbnQgcmUuc2VhcmNoKCdeRnJvbScsICdSZWNpdGluZyBGcm9tIE1lbW9yeScpCiAgICAgICBOb25lCiAKQEAgLTY5OCwxMSArNzAwLDExIEBACiAgICBvciBhbnkgbG9jYXRpb24gZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGNoYXJhY3Rlci4gICAgIDo6CiAKICAgICAgID4+PiBwcmludCByZS5zZWFyY2goJ30kJywgJ3tibG9ja30nKQotICAgICAgPHJlLk1hdGNoT2JqZWN0IGluc3RhbmNlIGF0IDgwYWRmYTg+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgogICAgICAgPj4+IHByaW50IHJlLnNlYXJjaCgnfSQnLCAne2Jsb2NrfSAnKQogICAgICAgTm9uZQogICAgICAgPj4+IHByaW50IHJlLnNlYXJjaCgnfSQnLCAne2Jsb2NrfVxuJykKLSAgICAgIDxyZS5NYXRjaE9iamVjdCBpbnN0YW5jZSBhdCA4MGFkZmE4PgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KIAogICAgVG8gbWF0Y2ggYSBsaXRlcmFsIGBgJyQnYGAsIHVzZSBgYFwkYGAgb3IgZW5jbG9zZSBpdCBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsCiAgICBhcyBpbiAgYGBbJF1gYC4KQEAgLTcyNyw3ICs3MjksNyBAQAogCiAgICAgICA+Pj4gcCA9IHJlLmNvbXBpbGUocidcYmNsYXNzXGInKQogICAgICAgPj4+IHByaW50IHAuc2VhcmNoKCdubyBjbGFzcyBhdCBhbGwnKQotICAgICAgPHJlLk1hdGNoT2JqZWN0IGluc3RhbmNlIGF0IDgwYzhmMjg+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgogICAgICAgPj4+IHByaW50IHAuc2VhcmNoKCd0aGUgZGVjbGFzc2lmaWVkIGFsZ29yaXRobScpCiAgICAgICBOb25lCiAgICAgICA+Pj4gcHJpbnQgcC5zZWFyY2goJ29uZSBzdWJjbGFzcyBpcycpCkBAIC03NDUsNyArNzQ3LDcgQEAKICAgICAgID4+PiBwcmludCBwLnNlYXJjaCgnbm8gY2xhc3MgYXQgYWxsJykKICAgICAgIE5vbmUKICAgICAgID4+PiBwcmludCBwLnNlYXJjaCgnXGInICsgJ2NsYXNzJyArICdcYicpCi0gICAgICA8cmUuTWF0Y2hPYmplY3QgaW5zdGFuY2UgYXQgODBjM2VlMD4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CiAKICAgIFNlY29uZCwgaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCB3aGVyZSB0aGVyZSdzIG5vIHVzZSBmb3IgdGhpcyBhc3NlcnRpb24sCiAgICBgYFxiYGAgcmVwcmVzZW50cyB0aGUgYmFja3NwYWNlIGNoYXJhY3RlciwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24ncwpAQCAtMTMxNSw3ICsxMzE3LDcgQEAKIGJlICp2ZXJ5KiBjb21wbGljYXRlZC4gIFVzZSBhbiBIVE1MIG9yIFhNTCBwYXJzZXIgbW9kdWxlIGZvciBzdWNoIHRhc2tzLikKIAogCi1Ob3QgVXNpbmcgcmUuVkVSQk9TRQorVXNpbmcgcmUuVkVSQk9TRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQnkgbm93IHlvdSd2ZSBwcm9iYWJseSBub3RpY2VkIHRoYXQgcmVndWxhciBleHByZXNzaW9ucyBhcmUgYSB2ZXJ5IGNvbXBhY3QKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9zb2NrZXRzLnJzdCBiL0RvYy9ob3d0by9zb2NrZXRzLnJzdAppbmRleCAxOTI4YzJhLi40MDAyYTNkIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vc29ja2V0cy5yc3QKKysrIGIvRG9jL2hvd3RvL3NvY2tldHMucnN0CkBAIC0zMTQsNyArMzE0LDcgQEAKIE5vbi1ibG9ja2luZyBTb2NrZXRzCiA9PT09PT09PT09PT09PT09PT09PQogCi1JZiB5b3UndmUgdW5kZXJzdG9vZCB0aGUgcHJlY2VlZGluZywgeW91IGFscmVhZHkga25vdyBtb3N0IG9mIHdoYXQgeW91IG5lZWQgdG8KK0lmIHlvdSd2ZSB1bmRlcnN0b29kIHRoZSBwcmVjZWRpbmcsIHlvdSBhbHJlYWR5IGtub3cgbW9zdCBvZiB3aGF0IHlvdSBuZWVkIHRvCiBrbm93IGFib3V0IHRoZSBtZWNoYW5pY3Mgb2YgdXNpbmcgc29ja2V0cy4gWW91J2xsIHN0aWxsIHVzZSB0aGUgc2FtZSBjYWxscywgaW4KIG11Y2ggdGhlIHNhbWUgd2F5cy4gSXQncyBqdXN0IHRoYXQsIGlmIHlvdSBkbyBpdCByaWdodCwgeW91ciBhcHAgd2lsbCBiZSBhbG1vc3QKIGluc2lkZS1vdXQuCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vc29ydGluZy5yc3QgYi9Eb2MvaG93dG8vc29ydGluZy5yc3QKaW5kZXggNzkwMDhhNy4uNzQ2ZTQwYyAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3NvcnRpbmcucnN0CisrKyBiL0RvYy9ob3d0by9zb3J0aW5nLnJzdApAQCAtMSwzICsxLDUgQEAKKy4uIF9zb3J0aW5naG93dG86CisKIFNvcnRpbmcgSE9XIFRPCiAqKioqKioqKioqKioqKgogCkBAIC02LDggKzgsOCBAQAogCiAKIFB5dGhvbiBsaXN0cyBoYXZlIGEgYnVpbHQtaW4gOm1ldGg6YGxpc3Quc29ydGAgbWV0aG9kIHRoYXQgbW9kaWZpZXMgdGhlIGxpc3QKLWluLXBsYWNlIGFuZCBhIDpmdW5jOmBzb3J0ZWRgIGJ1aWx0LWluIGZ1bmN0aW9uIHRoYXQgYnVpbGRzIGEgbmV3IHNvcnRlZCBsaXN0Ci1mcm9tIGFuIGl0ZXJhYmxlLgoraW4tcGxhY2UuICBUaGVyZSBpcyBhbHNvIGEgOmZ1bmM6YHNvcnRlZGAgYnVpbHQtaW4gZnVuY3Rpb24gdGhhdCBidWlsZHMgYSBuZXcKK3NvcnRlZCBsaXN0IGZyb20gYW4gaXRlcmFibGUuCiAKIEluIHRoaXMgZG9jdW1lbnQsIHdlIGV4cGxvcmUgdGhlIHZhcmlvdXMgdGVjaG5pcXVlcyBmb3Igc29ydGluZyBkYXRhIHVzaW5nIFB5dGhvbi4KIApkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3VuaWNvZGUucnN0IGIvRG9jL2hvd3RvL3VuaWNvZGUucnN0CmluZGV4IDRlNDkyMWMuLmZmM2M3MjEgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by91bmljb2RlLnJzdAorKysgYi9Eb2MvaG93dG8vdW5pY29kZS5yc3QKQEAgLTIsMTAgKzIsMTIgQEAKICAgVW5pY29kZSBIT1dUTwogKioqKioqKioqKioqKioqKioKIAotOlJlbGVhc2U6IDEuMDIKKzpSZWxlYXNlOiAxLjAzCiAKLVRoaXMgSE9XVE8gZGlzY3Vzc2VzIFB5dGhvbidzIHN1cHBvcnQgZm9yIFVuaWNvZGUsIGFuZCBleHBsYWlucyB2YXJpb3VzIHByb2JsZW1zCi10aGF0IHBlb3BsZSBjb21tb25seSBlbmNvdW50ZXIgd2hlbiB0cnlpbmcgdG8gd29yayB3aXRoIFVuaWNvZGUuCitUaGlzIEhPV1RPIGRpc2N1c3NlcyBQeXRob24gMi54J3Mgc3VwcG9ydCBmb3IgVW5pY29kZSwgYW5kIGV4cGxhaW5zCit2YXJpb3VzIHByb2JsZW1zIHRoYXQgcGVvcGxlIGNvbW1vbmx5IGVuY291bnRlciB3aGVuIHRyeWluZyB0byB3b3JrCit3aXRoIFVuaWNvZGUuICAoVGhpcyBIT1dUTyBoYXMgbm90IHlldCBiZWVuIHVwZGF0ZWQgdG8gY292ZXIgdGhlIDMueAordmVyc2lvbnMgb2YgUHl0aG9uLikKIAogSW50cm9kdWN0aW9uIHRvIFVuaWNvZGUKID09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNDQsOCArMTQ2LDkgQEAKIDQuIE1hbnkgSW50ZXJuZXQgc3RhbmRhcmRzIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIHRleHR1YWwgZGF0YSwgYW5kIGNhbid0CiAgICBoYW5kbGUgY29udGVudCB3aXRoIGVtYmVkZGVkIHplcm8gYnl0ZXMuCiAKLUdlbmVyYWxseSBwZW9wbGUgZG9uJ3QgdXNlIHRoaXMgZW5jb2RpbmcsIGluc3RlYWQgY2hvb3Npbmcgb3RoZXIgZW5jb2RpbmdzIHRoYXQKLWFyZSBtb3JlIGVmZmljaWVudCBhbmQgY29udmVuaWVudC4KK0dlbmVyYWxseSBwZW9wbGUgZG9uJ3QgdXNlIHRoaXMgZW5jb2RpbmcsIGluc3RlYWQgY2hvb3Npbmcgb3RoZXIKK2VuY29kaW5ncyB0aGF0IGFyZSBtb3JlIGVmZmljaWVudCBhbmQgY29udmVuaWVudC4gIFVURi04IGlzIHByb2JhYmx5Cit0aGUgbW9zdCBjb21tb25seSBzdXBwb3J0ZWQgZW5jb2Rpbmc7IGl0IHdpbGwgYmUgZGlzY3Vzc2VkIGJlbG93LgogCiBFbmNvZGluZ3MgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgZXZlcnkgcG9zc2libGUgVW5pY29kZSBjaGFyYWN0ZXIsIGFuZCBtb3N0CiBlbmNvZGluZ3MgZG9uJ3QuICBGb3IgZXhhbXBsZSwgUHl0aG9uJ3MgZGVmYXVsdCBlbmNvZGluZyBpcyB0aGUgJ2FzY2lpJwpAQCAtMjIyLDggKzIyNSw4IEBACiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOD4sIGZvciBleGFtcGxlLgogCiAKLVB5dGhvbidzIFVuaWNvZGUgU3VwcG9ydAotPT09PT09PT09PT09PT09PT09PT09PT09CitQeXRob24gMi54J3MgVW5pY29kZSBTdXBwb3J0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIE5vdyB0aGF0IHlvdSd2ZSBsZWFybmVkIHRoZSBydWRpbWVudHMgb2YgVW5pY29kZSwgd2UgY2FuIGxvb2sgYXQgUHl0aG9uJ3MKIFVuaWNvZGUgZmVhdHVyZXMuCkBAIC0yNzIsNyArMjc1LDcgQEAKICAgICA+Pj4gdW5pY29kZSgnXHg4MGFiYycsIGVycm9ycz0naWdub3JlJykKICAgICB1J2FiYycKIAotRW5jb2RpbmdzIGFyZSBzcGVjaWZpZWQgYXMgc3RyaW5ncyBjb250YWluaW5nIHRoZSBlbmNvZGluZydzIG5hbWUuICBQeXRob24gMi40CitFbmNvZGluZ3MgYXJlIHNwZWNpZmllZCBhcyBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGVuY29kaW5nJ3MgbmFtZS4gIFB5dGhvbiAyLjcKIGNvbWVzIHdpdGggcm91Z2hseSAxMDAgZGlmZmVyZW50IGVuY29kaW5nczsgc2VlIHRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UgYXQKIDpyZWY6YHN0YW5kYXJkLWVuY29kaW5nc2AgZm9yIGEgbGlzdC4gIFNvbWUgZW5jb2RpbmdzCiBoYXZlIG11bHRpcGxlIG5hbWVzOyBmb3IgZXhhbXBsZSwgJ2xhdGluLTEnLCAnaXNvXzg4NTlfMScgYW5kICc4ODU5JyBhcmUgYWxsCkBAIC00MjcsMTEgKzQzMCwxOSBAQAogCiBXaGVuIHlvdSBydW4gaXQgd2l0aCBQeXRob24gMi40LCBpdCB3aWxsIG91dHB1dCB0aGUgZm9sbG93aW5nIHdhcm5pbmc6OgogCi0gICAgYW1rOn4kIHB5dGhvbiBwMjYzLnB5CisgICAgYW1rOn4kIHB5dGhvbjIuNCBwMjYzLnB5CiAgICAgc3lzOjE6IERlcHJlY2F0aW9uV2FybmluZzogTm9uLUFTQ0lJIGNoYXJhY3RlciAnXHhlOScKICAgICAgICAgIGluIGZpbGUgcDI2My5weSBvbiBsaW5lIDIsIGJ1dCBubyBlbmNvZGluZyBkZWNsYXJlZDsKICAgICAgICAgIHNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcGVwcy9wZXAtMDI2My5odG1sIGZvciBkZXRhaWxzCiAKK1B5dGhvbiAyLjUgYW5kIGhpZ2hlciBhcmUgc3RyaWN0ZXIgYW5kIHdpbGwgcHJvZHVjZSBhIHN5bnRheCBlcnJvcjo6CisKKyAgICBhbWs6fiQgcHl0aG9uMi41IHAyNjMucHkKKyAgICBGaWxlICIvdG1wL3AyNjMucHkiLCBsaW5lIDIKKyAgICBTeW50YXhFcnJvcjogTm9uLUFTQ0lJIGNoYXJhY3RlciAnXHhjMycgaW4gZmlsZSAvdG1wL3AyNjMucHkKKyAgICAgIG9uIGxpbmUgMiwgYnV0IG5vIGVuY29kaW5nIGRlY2xhcmVkOyBzZWUKKyAgICAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wZXBzL3BlcC0wMjYzLmh0bWwgZm9yIGRldGFpbHMKKwogCiBVbmljb2RlIFByb3BlcnRpZXMKIC0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDcyLDcgKzQ4Myw3IEBACiBmcm9tIHRoZSBhYm92ZSBvdXRwdXQsIGBgJ0xsJ2BgIG1lYW5zICdMZXR0ZXIsIGxvd2VyY2FzZScsIGBgJ05vJ2BgIG1lYW5zCiAiTnVtYmVyLCBvdGhlciIsIGBgJ01uJ2BgIGlzICJNYXJrLCBub25zcGFjaW5nIiwgYW5kIGBgJ1NvJ2BgIGlzICJTeW1ib2wsCiBvdGhlciIuICBTZWUKLTxodHRwOi8vdW5pY29kZS5vcmcvUHVibGljLzUuMS4wL3VjZC9VQ0QuaHRtbCNHZW5lcmFsX0NhdGVnb3J5X1ZhbHVlcz4gZm9yIGEKKzxodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHI0NC8jR2VuZXJhbF9DYXRlZ29yeV9WYWx1ZXM+IGZvciBhCiBsaXN0IG9mIGNhdGVnb3J5IGNvZGVzLgogCiBSZWZlcmVuY2VzCkBAIC02OTMsNyArNzA0LDExIEBACiAKIFZlcnNpb24gMS4wMjogcG9zdGVkIEF1Z3VzdCAxNiAyMDA1LiAgQ29ycmVjdHMgZmFjdHVhbCBlcnJvcnMuCiAKK1ZlcnNpb24gMS4wMzogcG9zdGVkIEp1bmUgMjAgMjAxMC4gIE5vdGVzIHRoYXQgUHl0aG9uIDMueCBpcyBub3QgY292ZXJlZCwKK2FuZCB0aGF0IHRoZSBIT1dUTyBvbmx5IGNvdmVycyAyLnguCiAKKworLi4gY29tbWVudCBEZXNjcmliZSBQeXRob24gMy54IHN1cHBvcnQgKG5ldyBzZWN0aW9uPyBuZXcgZG9jdW1lbnQ/KQogLi4gY29tbWVudCBBZGRpdGlvbmFsIHRvcGljOiBidWlsZGluZyBQeXRob24gdy8gVUNTMiBvciBVQ1M0IHN1cHBvcnQKIC4uIGNvbW1lbnQgRGVzY3JpYmUgb2JzY3VyZSAtVSBzd2l0Y2ggc29tZXdoZXJlPwogLi4gY29tbWVudCBEZXNjcmliZSB1c2Ugb2YgY29kZWNzLlN0cmVhbVJlY29kZXIgYW5kIFN0cmVhbVJlYWRlcldyaXRlcgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3dlYnNlcnZlcnMucnN0IGIvRG9jL2hvd3RvL3dlYnNlcnZlcnMucnN0CmluZGV4IDVhN2IxNmEuLjAzODUzZjQgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdAorKysgYi9Eb2MvaG93dG8vd2Vic2VydmVycy5yc3QKQEAgLTUzMCw3ICs1MzAsNyBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgVGhlcmUgYXJlIG1hbnkgdGVtcGxhdGUgZW5naW5lcyBjb21wZXRpbmcgZm9yIGF0dGVudGlvbiwgYmVjdWFzZSBpdCBpcworICAgVGhlcmUgYXJlIG1hbnkgdGVtcGxhdGUgZW5naW5lcyBjb21wZXRpbmcgZm9yIGF0dGVudGlvbiwgYmVjYXVzZSBpdCBpcwogICAgcHJldHR5IGVhc3kgdG8gY3JlYXRlIHRoZW0gaW4gUHl0aG9uLiAgVGhlIHBhZ2UgYFRlbXBsYXRpbmcKICAgIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vVGVtcGxhdGluZz5gXyBpbiB0aGUgd2lraSBsaXN0cyBhIGJpZywKICAgIGV2ZXItZ3Jvd2luZyBudW1iZXIgb2YgdGhlc2UuICBUaGUgdGhyZWUgbGlzdGVkIGFib3ZlIGFyZSBjb25zaWRlcmVkICJzZWNvbmQKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9lbWFpbC1hbHRlcm5hdGl2ZS5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1hbHRlcm5hdGl2ZS5weQppbmRleCA4MmUzZmZhLi44MmQ2MDVlIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkKKysrIGIvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KIAogaW1wb3J0IHNtdHBsaWIKIApkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLWhlYWRlcnMucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtaGVhZGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjRjM2ZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2luY2x1ZGVzL2VtYWlsLWhlYWRlcnMucHkKQEAgLTAsMCArMSwxNyBAQAorIyBJbXBvcnQgdGhlIGVtYWlsIG1vZHVsZXMgd2UnbGwgbmVlZAorZnJvbSBlbWFpbC5wYXJzZXIgaW1wb3J0IFBhcnNlcgorCisjICBJZiB0aGUgZS1tYWlsIGhlYWRlcnMgYXJlIGluIGEgZmlsZSwgdW5jb21tZW50IHRoaXMgbGluZToKKyNoZWFkZXJzID0gUGFyc2VyKCkucGFyc2Uob3BlbihtZXNzYWdlZmlsZSwgJ3InKSkKKworIyAgT3IgZm9yIHBhcnNpbmcgaGVhZGVycyBpbiBhIHN0cmluZywgdXNlOgoraGVhZGVycyA9IFBhcnNlcigpLnBhcnNlc3RyKCdGcm9tOiA8dXNlckBleGFtcGxlLmNvbT5cbicKKyAgICAgICAgJ1RvOiA8c29tZW9uZV9lbHNlQGV4YW1wbGUuY29tPlxuJworICAgICAgICAnU3ViamVjdDogVGVzdCBtZXNzYWdlXG4nCisgICAgICAgICdcbicKKyAgICAgICAgJ0JvZHkgd291bGQgZ28gaGVyZVxuJykKKworIyAgTm93IHRoZSBoZWFkZXIgaXRlbXMgY2FuIGJlIGFjY2Vzc2VkIGFzIGEgZGljdGlvbmFyeToKK3ByaW50ICdUbzogJXMnICUgaGVhZGVyc1sndG8nXQorcHJpbnQgJ0Zyb206ICVzJyAlIGhlYWRlcnNbJ2Zyb20nXQorcHJpbnQgJ1N1YmplY3Q6ICVzJyAlIGhlYWRlcnNbJ3N1YmplY3QnXQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL3NxbGl0ZTMvbG9hZF9leHRlbnNpb24ucHkgYi9Eb2MvaW5jbHVkZXMvc3FsaXRlMy9sb2FkX2V4dGVuc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Zjg5M2M5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2luY2x1ZGVzL3NxbGl0ZTMvbG9hZF9leHRlbnNpb24ucHkKQEAgLTAsMCArMSwyNiBAQAoraW1wb3J0IHNxbGl0ZTMKKworY29uID0gc3FsaXRlMy5jb25uZWN0KCI6bWVtb3J5OiIpCisKKyMgZW5hYmxlIGV4dGVuc2lvbiBsb2FkaW5nCitjb24uZW5hYmxlX2xvYWRfZXh0ZW5zaW9uKFRydWUpCisKKyMgTG9hZCB0aGUgZnVsbHRleHQgc2VhcmNoIGV4dGVuc2lvbgorY29uLmV4ZWN1dGUoInNlbGVjdCBsb2FkX2V4dGVuc2lvbignLi9mdHMzLnNvJykiKQorCisjIGFsdGVybmF0aXZlbHkgeW91IGNhbiBsb2FkIHRoZSBleHRlbnNpb24gdXNpbmcgYW4gQVBJIGNhbGw6CisjIGNvbi5sb2FkX2V4dGVuc2lvbigiLi9mdHMzLnNvIikKKworIyBkaXNhYmxlIGV4dGVuc2lvbiBsYW9kaW5nIGFnYWluCitjb24uZW5hYmxlX2xvYWRfZXh0ZW5zaW9uKEZhbHNlKQorCisjIGV4YW1wbGUgZnJvbSBTUUxpdGUgd2lraQorY29uLmV4ZWN1dGUoImNyZWF0ZSB2aXJ0dWFsIHRhYmxlIHJlY2lwZSB1c2luZyBmdHMzKG5hbWUsIGluZ3JlZGllbnRzKSIpCitjb24uZXhlY3V0ZXNjcmlwdCgiIiIKKyAgICBpbnNlcnQgaW50byByZWNpcGUgKG5hbWUsIGluZ3JlZGllbnRzKSB2YWx1ZXMgKCdicm9jY29saSBzdGV3JywgJ2Jyb2Njb2xpIHBlcHBlcnMgY2hlZXNlIHRvbWF0b2VzJyk7CisgICAgaW5zZXJ0IGludG8gcmVjaXBlIChuYW1lLCBpbmdyZWRpZW50cykgdmFsdWVzICgncHVtcGtpbiBzdGV3JywgJ3B1bXBraW4gb25pb25zIGdhcmxpYyBjZWxlcnknKTsKKyAgICBpbnNlcnQgaW50byByZWNpcGUgKG5hbWUsIGluZ3JlZGllbnRzKSB2YWx1ZXMgKCdicm9jY29saSBwaWUnLCAnYnJvY2NvbGkgY2hlZXNlIG9uaW9ucyBmbG91cicpOworICAgIGluc2VydCBpbnRvIHJlY2lwZSAobmFtZSwgaW5ncmVkaWVudHMpIHZhbHVlcyAoJ3B1bXBraW4gcGllJywgJ3B1bXBraW4gc3VnYXIgZmxvdXIgYnV0dGVyJyk7CisgICAgIiIiKQorZm9yIHJvdyBpbiBjb24uZXhlY3V0ZSgic2VsZWN0IHJvd2lkLCBuYW1lLCBpbmdyZWRpZW50cyBmcm9tIHJlY2lwZSB3aGVyZSBuYW1lIG1hdGNoICdwaWUnIik6CisgICAgcHJpbnQgcm93CmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvdHppbmZvLWV4YW1wbGVzLnB5IGIvRG9jL2luY2x1ZGVzL3R6aW5mby1leGFtcGxlcy5weQppbmRleCAyZGU5NWQ0Li41MTMyNDI5IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvdHppbmZvLWV4YW1wbGVzLnB5CisrKyBiL0RvYy9pbmNsdWRlcy90emluZm8tZXhhbXBsZXMucHkKQEAgLTcxLDcgKzcxLDcgQEAKICAgICBkZWYgX2lzZHN0KHNlbGYsIGR0KToKICAgICAgICAgdHQgPSAoZHQueWVhciwgZHQubW9udGgsIGR0LmRheSwKICAgICAgICAgICAgICAgZHQuaG91ciwgZHQubWludXRlLCBkdC5zZWNvbmQsCi0gICAgICAgICAgICAgIGR0LndlZWtkYXkoKSwgMCwgLTEpCisgICAgICAgICAgICAgIGR0LndlZWtkYXkoKSwgMCwgMCkKICAgICAgICAgc3RhbXAgPSBfdGltZS5ta3RpbWUodHQpCiAgICAgICAgIHR0ID0gX3RpbWUubG9jYWx0aW1lKHN0YW1wKQogICAgICAgICByZXR1cm4gdHQudG1faXNkc3QgPiAwCmRpZmYgLS1naXQgYS9Eb2MvaW5zdGFsbC9pbmRleC5yc3QgYi9Eb2MvaW5zdGFsbC9pbmRleC5yc3QKaW5kZXggYTVkMjY3MS4uYWYxMTNlZSAxMDA2NDQKLS0tIGEvRG9jL2luc3RhbGwvaW5kZXgucnN0CisrKyBiL0RvYy9pbnN0YWxsL2luZGV4LnJzdApAQCAtNjk0LDYgKzY5NCw5IEBACiB8IGxvY2FsICAgICAgICB8IDpmaWxlOmBzZXR1cC5jZmdgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXCgzKSAgfAogKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKIAorT24gYWxsIHBsYXRmb3JtcywgdGhlICJwZXJzb25hbCIgZmlsZSBjYW4gYmUgdGVtcG9yYXJpbHkgZGlzYWJsZWQgYnkKK3Bhc3NpbmcgdGhlIGAtLW5vLXVzZXItY2ZnYCBvcHRpb24uCisKIE5vdGVzOgogCiAoMSkKQEAgLTkyOSwxNSArOTMyLDM0IEBACiBHTlUgQyAvIEN5Z3dpbiAvIE1pbkdXCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVRoZXNlIGluc3RydWN0aW9ucyBvbmx5IGFwcGx5IGlmIHlvdSdyZSB1c2luZyBhIHZlcnNpb24gb2YgUHl0aG9uIHByaW9yICB0bwotMi40LjEgd2l0aCBhIE1pbkdXIHByaW9yIHRvIDMuMC4wICh3aXRoIGJpbnV0aWxzLTIuMTMuOTAtMjAwMzAxMTEtMSkuCi0KIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIG5lY2Vzc2FyeSBzdGVwcyB0byB1c2UgRGlzdHV0aWxzIHdpdGggdGhlIEdOVSBDL0MrKwogY29tcGlsZXJzIGluIHRoZWlyIEN5Z3dpbiBhbmQgTWluR1cgZGlzdHJpYnV0aW9ucy4gWyNdXyBGb3IgYSBQeXRob24gaW50ZXJwcmV0ZXIKIHRoYXQgd2FzIGJ1aWx0IHdpdGggQ3lnd2luLCBldmVyeXRoaW5nIHNob3VsZCB3b3JrIHdpdGhvdXQgYW55IG9mIHRoZXNlCiBmb2xsb3dpbmcgc3RlcHMuCiAKLVRoZXNlIGNvbXBpbGVycyByZXF1aXJlIHNvbWUgc3BlY2lhbCBsaWJyYXJpZXMuIFRoaXMgdGFzayBpcyBtb3JlIGNvbXBsZXggdGhhbgorTm90IGFsbCBleHRlbnNpb25zIGNhbiBiZSBidWlsdCB3aXRoIE1pbkdXIG9yIEN5Z3dpbiwgYnV0IG1hbnkgY2FuLiAgRXh0ZW5zaW9ucworbW9zdCBsaWtlbHkgdG8gbm90IHdvcmsgYXJlIHRob3NlIHRoYXQgdXNlIEMrKyBvciBkZXBlbmQgb24gTWljcm9zb2Z0IFZpc3VhbCBDCitleHRlbnNpb25zLgorCitUbyBsZXQgRGlzdHV0aWxzIGNvbXBpbGUgeW91ciBleHRlbnNpb24gd2l0aCBDeWd3aW4geW91IGhhdmUgdG8gdHlwZTo6CisKKyAgIHB5dGhvbiBzZXR1cC5weSBidWlsZCAtLWNvbXBpbGVyPWN5Z3dpbgorCithbmQgZm9yIEN5Z3dpbiBpbiBuby1jeWd3aW4gbW9kZSBbI11fIG9yIGZvciBNaW5HVyB0eXBlOjoKKworICAgcHl0aG9uIHNldHVwLnB5IGJ1aWxkIC0tY29tcGlsZXI9bWluZ3czMgorCitJZiB5b3Ugd2FudCB0byB1c2UgYW55IG9mIHRoZXNlIG9wdGlvbnMvY29tcGlsZXJzIGFzIGRlZmF1bHQsIHlvdSBzaG91bGQKK2NvbnNpZGVyIHdyaXRpbmcgaXQgaW4geW91ciBwZXJzb25hbCBvciBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yCitEaXN0dXRpbHMgKHNlZSBzZWN0aW9uIDpyZWY6YGluc3QtY29uZmlnLWZpbGVzYC4pCisKK09sZGVyIFZlcnNpb25zIG9mIFB5dGhvbiBhbmQgTWluR1cKKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKK1RoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIG9ubHkgYXBwbHkgaWYgeW91J3JlIHVzaW5nIGEgdmVyc2lvbiBvZiBQeXRob24KK2luZmVyaW9yIHRvIDIuNC4xIHdpdGggYSBNaW5HVyBpbmZlcmlvciB0byAzLjAuMCAod2l0aAorYmludXRpbHMtMi4xMy45MC0yMDAzMDExMS0xKS4KKworVGhlc2UgY29tcGlsZXJzIHJlcXVpcmUgc29tZSBzcGVjaWFsIGxpYnJhcmllcy4gIFRoaXMgdGFzayBpcyBtb3JlIGNvbXBsZXggdGhhbgogZm9yIEJvcmxhbmQncyBDKyssIGJlY2F1c2UgdGhlcmUgaXMgbm8gcHJvZ3JhbSB0byBjb252ZXJ0IHRoZSBsaWJyYXJ5LiAgRmlyc3QKIHlvdSBoYXZlIHRvIGNyZWF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB3aGljaCB0aGUgUHl0aG9uIERMTCBleHBvcnRzLiAoWW91IGNhbiBmaW5kCiBhIGdvb2QgcHJvZ3JhbSBmb3IgdGhpcyB0YXNrIGF0CkBAIC05NjcsMTggKzk4OSw2IEBACiB0aGVtIHRvby4gVGhlIGNvbnZlcnRlZCBmaWxlcyBoYXZlIHRvIHJlc2lkZSBpbiB0aGUgc2FtZSBkaXJlY3RvcmllcyBhcyB0aGUKIG5vcm1hbCBsaWJyYXJpZXMgZG8uCiAKLVRvIGxldCBEaXN0dXRpbHMgY29tcGlsZSB5b3VyIGV4dGVuc2lvbiB3aXRoIEN5Z3dpbiB5b3Ugbm93IGhhdmUgdG8gdHlwZSA6OgotCi0gICBweXRob24gc2V0dXAucHkgYnVpbGQgLS1jb21waWxlcj1jeWd3aW4KLQotYW5kIGZvciBDeWd3aW4gaW4gbm8tY3lnd2luIG1vZGUgWyNdXyBvciBmb3IgTWluR1cgdHlwZTo6Ci0KLSAgIHB5dGhvbiBzZXR1cC5weSBidWlsZCAtLWNvbXBpbGVyPW1pbmd3MzIKLQotSWYgeW91IHdhbnQgdG8gdXNlIGFueSBvZiB0aGVzZSBvcHRpb25zL2NvbXBpbGVycyBhcyBkZWZhdWx0LCB5b3Ugc2hvdWxkCi1jb25zaWRlciB0byB3cml0ZSBpdCBpbiB5b3VyIHBlcnNvbmFsIG9yIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IKLURpc3R1dGlscyAoc2VlIHNlY3Rpb24gOnJlZjpgaW5zdC1jb25maWctZmlsZXNgLikKLQogCiAuLiBzZWVhbHNvOjoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvMnRvMy5yc3QgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdAppbmRleCBmM2JlOGZhLi5kZTMxMjUxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS8ydG8zLnJzdAorKysgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdApAQCAtODksNyArODksNyBAQAogU2luY2Ugc29tZSBwcmludCBzdGF0ZW1lbnRzIGNhbiBiZSBwYXJzZWQgYXMgZnVuY3Rpb24gY2FsbHMgb3Igc3RhdGVtZW50cywgMnRvMwogY2Fubm90IGFsd2F5cyByZWFkIGZpbGVzIGNvbnRhaW5pbmcgdGhlIHByaW50IGZ1bmN0aW9uLiAgV2hlbiAydG8zIGRldGVjdHMgdGhlCiBwcmVzZW5jZSBvZiB0aGUgYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uYGAgY29tcGlsZXIgZGlyZWN0aXZlLCBpdAotbW9kaWZpZXMgaXRzIGludGVybmFsIGdyYW1tYXIgdG8gaW50ZXJwZXJ0IDpmdW5jOmBwcmludGAgYXMgYSBmdW5jdGlvbi4gIFRoaXMKK21vZGlmaWVzIGl0cyBpbnRlcm5hbCBncmFtbWFyIHRvIGludGVycHJldCA6ZnVuYzpgcHJpbnRgIGFzIGEgZnVuY3Rpb24uICBUaGlzCiBjaGFuZ2UgY2FuIGFsc28gYmUgZW5hYmxlZCBtYW51YWxseSB3aXRoIHRoZSA6b3B0aW9uOmAtcGAgZmxhZy4gIFVzZQogOm9wdGlvbjpgLXBgIHRvIHJ1biBmaXhlcnMgb24gY29kZSB0aGF0IGFscmVhZHkgaGFzIGhhZCBpdHMgcHJpbnQgc3RhdGVtZW50cwogY29udmVydGVkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvX3dpbnJlZy5yc3QgYi9Eb2MvbGlicmFyeS9fd2lucmVnLnJzdAppbmRleCAzNjI3MTMwLi44MjVjZTFmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9fd2lucmVnLnJzdAorKysgYi9Eb2MvbGlicmFyeS9fd2lucmVnLnJzdApAQCAtNjUsNiArNjUsMzQgQEAKICAgIDpleGM6YFdpbmRvd3NFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAogCisuLiBmdW5jdGlvbjo6IENyZWF0ZUtleUV4KGtleSwgc3ViX2tleVssIHJlc1ssIHNhbV1dKQorCisgICBDcmVhdGVzIG9yIG9wZW5zIHRoZSBzcGVjaWZpZWQga2V5LCByZXR1cm5pbmcgYQorICAgOnJlZjpgaGFuZGxlIG9iamVjdCA8aGFuZGxlLW9iamVjdD5gLgorCisgICAqa2V5KiBpcyBhbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBvbmUgb2YgdGhlIHByZWRlZmluZWQKKyAgIDpyZWY6YEhLRVlfKiBjb25zdGFudHMgPGhrZXktY29uc3RhbnRzPmAuCisKKyAgICpzdWJfa2V5KiBpcyBhIHN0cmluZyB0aGF0IG5hbWVzIHRoZSBrZXkgdGhpcyBtZXRob2Qgb3BlbnMgb3IgY3JlYXRlcy4KKworICAgKnJlcyogaXMgYSByZXNlcnZlZCBpbnRlZ2VyLCBhbmQgbXVzdCBiZSB6ZXJvLiBUaGUgZGVmYXVsdCBpcyB6ZXJvLgorCisgICAqc2FtKiBpcyBhbiBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIGFuIGFjY2VzcyBtYXNrIHRoYXQgZGVzY3JpYmVzIHRoZSBkZXNpcmVkCisgICBzZWN1cml0eSBhY2Nlc3MgZm9yIHRoZSBrZXkuICBEZWZhdWx0IGlzIDpjb25zdDpgS0VZX0FMTF9BQ0NFU1NgLiAgU2VlCisgICA6cmVmOmBBY2Nlc3MgUmlnaHRzIDxhY2Nlc3MtcmlnaHRzPmAgZm9yIG90aGVyIGFsbG93ZWQgdmFsdWVzLgorCisKKyAgIElmICprZXkqIGlzIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBrZXlzLCAqc3ViX2tleSogbWF5IGJlIGBgTm9uZWBgLiBJbiB0aGF0CisgICBjYXNlLCB0aGUgaGFuZGxlIHJldHVybmVkIGlzIHRoZSBzYW1lIGtleSBoYW5kbGUgcGFzc2VkIGluIHRvIHRoZSBmdW5jdGlvbi4KKworICAgSWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cywgdGhpcyBmdW5jdGlvbiBvcGVucyB0aGUgZXhpc3Rpbmcga2V5LgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBoYW5kbGUgb2YgdGhlIG9wZW5lZCBrZXkuIElmIHRoZSBmdW5jdGlvbiBmYWlscywgYQorICAgOmV4YzpgV2luZG93c0Vycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBmdW5jdGlvbjo6IERlbGV0ZUtleShrZXksIHN1Yl9rZXkpCiAKICAgIERlbGV0ZXMgdGhlIHNwZWNpZmllZCBrZXkuCkBAIC03Miw4ICsxMDAsOCBAQAogICAgKmtleSogaXMgYW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZAogICAgOnJlZjpgSEtFWV8qIGNvbnN0YW50cyA8aGtleS1jb25zdGFudHM+YC4KIAotICAgKnN1Yl9rZXkqIGlzIGEgc3RyaW5nIHRoYXQgbXVzdCBiZSBhIHN1YmtleSBvZiB0aGUga2V5ICBpZGVudGlmaWVkIGJ5IHRoZSAqa2V5KgotICAgcGFyYW1ldGVyLiAgVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSAgYGBOb25lYGAsIGFuZCB0aGUga2V5IG1heSBub3QgaGF2ZSBzdWJrZXlzLgorICAgKnN1Yl9rZXkqIGlzIGEgc3RyaW5nIHRoYXQgbXVzdCBiZSBhIHN1YmtleSBvZiB0aGUga2V5IGlkZW50aWZpZWQgYnkgdGhlICprZXkqCisgICBwYXJhbWV0ZXIuICBUaGlzIHZhbHVlIG11c3Qgbm90IGJlIGBgTm9uZWBgLCBhbmQgdGhlIGtleSBtYXkgbm90IGhhdmUgc3Via2V5cy4KIAogICAgKlRoaXMgbWV0aG9kIGNhbiBub3QgZGVsZXRlIGtleXMgd2l0aCBzdWJrZXlzLioKIApAQCAtODEsNiArMTA5LDQwIEBACiAgICBJZiB0aGUgbWV0aG9kIGZhaWxzLCBhIDpleGM6YFdpbmRvd3NFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAogCisuLiBmdW5jdGlvbjo6IERlbGV0ZUtleUV4KGtleSwgc3ViX2tleVssIHNhbVssIHJlc11dKQorCisgICBEZWxldGVzIHRoZSBzcGVjaWZpZWQga2V5LgorCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSA6ZnVuYzpgRGVsZXRlS2V5RXhgIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHdpdGggdGhlIFJlZ0RlbGV0ZUtleUV4CisgICAgICBXaW5kb3dzIEFQSSBmdW5jdGlvbiwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gNjQtYml0IHZlcnNpb25zIG9mIFdpbmRvd3MuCisgICAgICBTZWUgdGhlIGBSZWdEZWxldGVLZXlFeCBkb2N1bWVudGF0aW9uCisgICAgICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzI0ODQ3JTI4VlMuODUlMjkuYXNweD5gX18uCisKKyAgICprZXkqIGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQKKyAgIDpyZWY6YEhLRVlfKiBjb25zdGFudHMgPGhrZXktY29uc3RhbnRzPmAuCisKKyAgICpzdWJfa2V5KiBpcyBhIHN0cmluZyB0aGF0IG11c3QgYmUgYSBzdWJrZXkgb2YgdGhlIGtleSBpZGVudGlmaWVkIGJ5IHRoZQorICAgKmtleSogcGFyYW1ldGVyLiBUaGlzIHZhbHVlIG11c3Qgbm90IGJlIGBgTm9uZWBgLCBhbmQgdGhlIGtleSBtYXkgbm90IGhhdmUKKyAgIHN1YmtleXMuCisKKyAgICpyZXMqIGlzIGEgcmVzZXJ2ZWQgaW50ZWdlciwgYW5kIG11c3QgYmUgemVyby4gVGhlIGRlZmF1bHQgaXMgemVyby4KKworICAgKnNhbSogaXMgYW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBhbiBhY2Nlc3MgbWFzayB0aGF0IGRlc2NyaWJlcyB0aGUgZGVzaXJlZAorICAgc2VjdXJpdHkgYWNjZXNzIGZvciB0aGUga2V5LiAgRGVmYXVsdCBpcyA6Y29uc3Q6YEtFWV9XT1c2NF82NEtFWWAuICBTZWUKKyAgIDpyZWY6YEFjY2VzcyBSaWdodHMgPGFjY2Vzcy1yaWdodHM+YCBmb3Igb3RoZXIgYWxsb3dlZCB2YWx1ZXMuCisKKworICAgKlRoaXMgbWV0aG9kIGNhbiBub3QgZGVsZXRlIGtleXMgd2l0aCBzdWJrZXlzLioKKworICAgSWYgdGhlIG1ldGhvZCBzdWNjZWVkcywgdGhlIGVudGlyZSBrZXksIGluY2x1ZGluZyBhbGwgb2YgaXRzIHZhbHVlcywgaXMKKyAgIHJlbW92ZWQuIElmIHRoZSBtZXRob2QgZmFpbHMsIGEgOmV4YzpgV2luZG93c0Vycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkLgorCisgICBPbiB1bnN1cHBvcnRlZCBXaW5kb3dzIHZlcnNpb25zLCA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpcyByYWlzZWQuCisKKy4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIC4uIGZ1bmN0aW9uOjogRGVsZXRlVmFsdWUoa2V5LCB2YWx1ZSkKIAogICAgUmVtb3ZlcyBhIG5hbWVkIHZhbHVlIGZyb20gYSByZWdpc3RyeSBrZXkuCkBAIC0xODMsNyArMjQ1LDcgQEAKICAgIEEgY2FsbCB0byA6ZnVuYzpgTG9hZEtleWAgZmFpbHMgaWYgdGhlIGNhbGxpbmcgcHJvY2VzcyBkb2VzIG5vdCBoYXZlIHRoZQogICAgOmNvbnN0OmBTRV9SRVNUT1JFX1BSSVZJTEVHRWAgcHJpdmlsZWdlLiAgTm90ZSB0aGF0IHByaXZpbGVnZXMgYXJlIGRpZmZlcmVudAogICAgZnJvbSBwZXJtaXNzaW9ucyAtLSBzZWUgdGhlIGBSZWdMb2FkS2V5IGRvY3VtZW50YXRpb24KLSAgIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM3MjQ4ODklMjh2PVZTLjg1JTI5LmFzcHg+YF8gZm9yCisgICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzI0ODg5JTI4dj1WUy44NSUyOS5hc3B4PmBfXyBmb3IKICAgIG1vcmUgZGV0YWlscy4KIAogICAgSWYgKmtleSogaXMgYSBoYW5kbGUgcmV0dXJuZWQgYnkgOmZ1bmM6YENvbm5lY3RSZWdpc3RyeWAsIHRoZW4gdGhlIHBhdGgKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FsbG9zLnJzdCBiL0RvYy9saWJyYXJ5L2FsbG9zLnJzdAppbmRleCA2YzU4MzdkLi5iMTM1NDg1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hbGxvcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWxsb3MucnN0CkBAIC0xNiw2ICsxNiw3IEBACiAgICBvcy5yc3QKICAgIGlvLnJzdAogICAgdGltZS5yc3QKKyAgIGFyZ3BhcnNlLnJzdAogICAgb3B0cGFyc2UucnN0CiAgICBnZXRvcHQucnN0CiAgICBsb2dnaW5nLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0IGIvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMjE0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QKQEAgLTAsMCArMSwxNzc1IEBACis6bW9kOmBhcmdwYXJzZWAgLS0tIFBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnMsIGFyZ3VtZW50cyBhbmQgc3ViLWNvbW1hbmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGFyZ3BhcnNlCisgICA6c3lub3BzaXM6IENvbW1hbmQtbGluZSBvcHRpb24gYW5kIGFyZ3VtZW50IHBhcnNpbmcgbGlicmFyeS4KKy4uIG1vZHVsZWF1dGhvcjo6IFN0ZXZlbiBCZXRoYXJkIDxzdGV2ZW4uYmV0aGFyZEBnbWFpbC5jb20+CisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKy4uIHNlY3Rpb25hdXRob3I6OiBTdGV2ZW4gQmV0aGFyZCA8c3RldmVuLmJldGhhcmRAZ21haWwuY29tPgorCisKK1RoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlIG1ha2VzIGl0IGVhc3kgdG8gd3JpdGUgdXNlciBmcmllbmRseSBjb21tYW5kIGxpbmUKK2ludGVyZmFjZXMuIFRoZSBwcm9ncmFtIGRlZmluZXMgd2hhdCBhcmd1bWVudHMgaXQgcmVxdWlyZXMsIGFuZCA6bW9kOmBhcmdwYXJzZWAKK3dpbGwgZmlndXJlIG91dCBob3cgdG8gcGFyc2UgdGhvc2Ugb3V0IG9mIDpkYXRhOmBzeXMuYXJndmAuICBUaGUgOm1vZDpgYXJncGFyc2VgCittb2R1bGUgYWxzbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyBoZWxwIGFuZCB1c2FnZSBtZXNzYWdlcyBhbmQgaXNzdWVzIGVycm9ycword2hlbiB1c2VycyBnaXZlIHRoZSBwcm9ncmFtIGludmFsaWQgYXJndW1lbnRzLgorCisKK0V4YW1wbGUKKy0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBjb2RlIGlzIGEgUHl0aG9uIHByb2dyYW0gdGhhdCB0YWtlcyBhIGxpc3Qgb2YgaW50ZWdlcnMgYW5kCitwcm9kdWNlcyBlaXRoZXIgdGhlIHN1bSBvciB0aGUgbWF4OjoKKworICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdQcm9jZXNzIHNvbWUgaW50ZWdlcnMuJykKKyAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ludGVnZXJzJywgbWV0YXZhcj0nTicsIHR5cGU9aW50LCBuYXJncz0nKycsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nYW4gaW50ZWdlciBmb3IgdGhlIGFjY3VtdWxhdG9yJykKKyAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3VtJywgZGVzdD0nYWNjdW11bGF0ZScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0PXN1bSwgZGVmYXVsdD1tYXgsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc3VtIHRoZSBpbnRlZ2VycyAoZGVmYXVsdDogZmluZCB0aGUgbWF4KScpCisKKyAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICBwcmludCBhcmdzLmFjY3VtdWxhdGUoYXJncy5pbnRlZ2VycykKKworQXNzdW1pbmcgdGhlIFB5dGhvbiBjb2RlIGFib3ZlIGlzIHNhdmVkIGludG8gYSBmaWxlIGNhbGxlZCBgYHByb2cucHlgYCwgaXQgY2FuCitiZSBydW4gYXQgdGhlIGNvbW1hbmQgbGluZSBhbmQgcHJvdmlkZXMgdXNlZnVsIGhlbHAgbWVzc2FnZXM6OgorCisgICAkIHByb2cucHkgLWgKKyAgIHVzYWdlOiBwcm9nLnB5IFstaF0gWy0tc3VtXSBOIFtOIC4uLl0KKworICAgUHJvY2VzcyBzb21lIGludGVnZXJzLgorCisgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICBOICAgICAgICAgICBhbiBpbnRlZ2VyIGZvciB0aGUgYWNjdW11bGF0b3IKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLXN1bSAgICAgICBzdW0gdGhlIGludGVnZXJzIChkZWZhdWx0OiBmaW5kIHRoZSBtYXgpCisKK1doZW4gcnVuIHdpdGggdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50cywgaXQgcHJpbnRzIGVpdGhlciB0aGUgc3VtIG9yIHRoZSBtYXggb2YKK3RoZSBjb21tYW5kLWxpbmUgaW50ZWdlcnM6OgorCisgICAkIHByb2cucHkgMSAyIDMgNAorICAgNAorCisgICAkIHByb2cucHkgMSAyIDMgNCAtLXN1bQorICAgMTAKKworSWYgaW52YWxpZCBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBpc3N1ZSBhbiBlcnJvcjo6CisKKyAgICQgcHJvZy5weSBhIGIgYworICAgdXNhZ2U6IHByb2cucHkgWy1oXSBbLS1zdW1dIE4gW04gLi4uXQorICAgcHJvZy5weTogZXJyb3I6IGFyZ3VtZW50IE46IGludmFsaWQgaW50IHZhbHVlOiAnYScKKworVGhlIGZvbGxvd2luZyBzZWN0aW9ucyB3YWxrIHlvdSB0aHJvdWdoIHRoaXMgZXhhbXBsZS4KKworCitDcmVhdGluZyBhIHBhcnNlcgorXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZpcnN0IHN0ZXAgaW4gdXNpbmcgdGhlIDptb2Q6YGFyZ3BhcnNlYCBpcyBjcmVhdGluZyBhbgorOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0OjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdQcm9jZXNzIHNvbWUgaW50ZWdlcnMuJykKKworVGhlIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdCB3aWxsIGhvbGQgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8KK3BhcnNlIHRoZSBjb21tYW5kIGxpbmUgaW50byBweXRob24gZGF0YSB0eXBlcy4KKworCitBZGRpbmcgYXJndW1lbnRzCiteXl5eXl5eXl5eXl5eXl5eCisKK0ZpbGxpbmcgYW4gOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBwcm9ncmFtIGFyZ3VtZW50cyBpcworZG9uZSBieSBtYWtpbmcgY2FsbHMgdG8gdGhlIDptZXRoOmB+QXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YCBtZXRob2QuCitHZW5lcmFsbHksIHRoZXNlIGNhbGxzIHRlbGwgdGhlIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGhvdyB0byB0YWtlIHRoZSBzdHJpbmdzCitvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCB0dXJuIHRoZW0gaW50byBvYmplY3RzLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kCit1c2VkIHdoZW4gOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5wYXJzZV9hcmdzYCBpcyBjYWxsZWQuIEZvciBleGFtcGxlOjoKKworICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ludGVnZXJzJywgbWV0YXZhcj0nTicsIHR5cGU9aW50LCBuYXJncz0nKycsCisgICAuLi4gICAgICAgICAgICAgICAgICAgICBoZWxwPSdhbiBpbnRlZ2VyIGZvciB0aGUgYWNjdW11bGF0b3InKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3VtJywgZGVzdD0nYWNjdW11bGF0ZScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLAorICAgLi4uICAgICAgICAgICAgICAgICAgICAgY29uc3Q9c3VtLCBkZWZhdWx0PW1heCwKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3N1bSB0aGUgaW50ZWdlcnMgKGRlZmF1bHQ6IGZpbmQgdGhlIG1heCknKQorCitMYXRlciwgY2FsbGluZyA6bWV0aDpgcGFyc2VfYXJnc2Agd2lsbCByZXR1cm4gYW4gb2JqZWN0IHdpdGgKK3R3byBhdHRyaWJ1dGVzLCBgYGludGVnZXJzYGAgYW5kIGBgYWNjdW11bGF0ZWBgLiAgVGhlIGBgaW50ZWdlcnNgYCBhdHRyaWJ1dGUKK3dpbGwgYmUgYSBsaXN0IG9mIG9uZSBvciBtb3JlIGludHMsIGFuZCB0aGUgYGBhY2N1bXVsYXRlYGAgYXR0cmlidXRlIHdpbGwgYmUKK2VpdGhlciB0aGUgOmZ1bmM6YHN1bWAgZnVuY3Rpb24sIGlmIGBgLS1zdW1gYCB3YXMgc3BlY2lmaWVkIGF0IHRoZSBjb21tYW5kIGxpbmUsCitvciB0aGUgOmZ1bmM6YG1heGAgZnVuY3Rpb24gaWYgaXQgd2FzIG5vdC4KKworCitQYXJzaW5nIGFyZ3VtZW50cworXl5eXl5eXl5eXl5eXl5eXl4KKworOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgcGFyc2VzIGFyZ3MgdGhyb3VnaCB0aGUKKzptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc2AgbWV0aG9kLiAgVGhpcyB3aWxsIGluc3BlY3QgdGhlIGNvbW1hbmQtbGluZSwKK2NvbnZlcnQgZWFjaCBhcmcgdG8gdGhlIGFwcHJvcHJpYXRlIHR5cGUgYW5kIHRoZW4gaW52b2tlIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uCitJbiBtb3N0IGNhc2VzLCB0aGlzIG1lYW5zIGEgc2ltcGxlIG5hbWVzcGFjZSBvYmplY3Qgd2lsbCBiZSBidWlsdCB1cCBmcm9tCithdHRyaWJ1dGVzIHBhcnNlZCBvdXQgb2YgdGhlIGNvbW1hbmQtbGluZTo6CisKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tc3VtJywgJzcnLCAnLTEnLCAnNDInXSkKKyAgIE5hbWVzcGFjZShhY2N1bXVsYXRlPTxidWlsdC1pbiBmdW5jdGlvbiBzdW0+LCBpbnRlZ2Vycz1bNywgLTEsIDQyXSkKKworSW4gYSBzY3JpcHQsIDptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc2Agd2lsbCB0eXBpY2FsbHkgYmUgY2FsbGVkIHdpdGggbm8KK2FyZ3VtZW50cywgYW5kIHRoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIHRoZQorY29tbWFuZC1saW5lIGFyZ3MgZnJvbSA6ZGF0YTpgc3lzLmFyZ3ZgLgorCisKK0FyZ3VtZW50UGFyc2VyIG9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBBcmd1bWVudFBhcnNlcihbZGVzY3JpcHRpb25dLCBbZXBpbG9nXSwgW3Byb2ddLCBbdXNhZ2VdLCBbYWRkX2hlbHBdLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmd1bWVudF9kZWZhdWx0XSwgW3BhcmVudHNdLCBbcHJlZml4X2NoYXJzXSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmxpY3RfaGFuZGxlcl0sIFtmb3JtYXR0ZXJfY2xhc3NdKQorCisgICBDcmVhdGUgYSBuZXcgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0LiAgRWFjaCBwYXJhbWV0ZXIgaGFzIGl0cyBvd24gbW9yZQorICAgZGV0YWlsZWQgZGVzY3JpcHRpb24gYmVsb3csIGJ1dCBpbiBzaG9ydCB0aGV5IGFyZToKKworICAgKiBkZXNjcmlwdGlvbl8gLSBUZXh0IHRvIGRpc3BsYXkgYmVmb3JlIHRoZSBhcmd1bWVudCBoZWxwLgorCisgICAqIGVwaWxvZ18gLSBUZXh0IHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIGFyZ3VtZW50IGhlbHAuCisKKyAgICogYWRkX2hlbHBfIC0gQWRkIGEgLWgvLS1oZWxwIG9wdGlvbiB0byB0aGUgcGFyc2VyLiAoZGVmYXVsdDogYGBUcnVlYGApCisKKyAgICogYXJndW1lbnRfZGVmYXVsdF8gLSBTZXQgdGhlIGdsb2JhbCBkZWZhdWx0IHZhbHVlIGZvciBhcmd1bWVudHMuCisgICAgIChkZWZhdWx0OiBgYE5vbmVgYCkKKworICAgKiBwYXJlbnRzXyAtIEEgbGlzdCBvZiA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIHdob3NlIGFyZ3VtZW50cyBzaG91bGQKKyAgICAgYWxzbyBiZSBpbmNsdWRlZC4KKworICAgKiBwcmVmaXhfY2hhcnNfIC0gVGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRoYXQgcHJlZml4IG9wdGlvbmFsIGFyZ3VtZW50cy4KKyAgICAgKGRlZmF1bHQ6ICctJykKKworICAgKiBmcm9tZmlsZV9wcmVmaXhfY2hhcnNfIC0gVGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRoYXQgcHJlZml4IGZpbGVzIGZyb20KKyAgICAgd2hpY2ggYWRkaXRpb25hbCBhcmd1bWVudHMgc2hvdWxkIGJlIHJlYWQuIChkZWZhdWx0OiBgYE5vbmVgYCkKKworICAgKiBmb3JtYXR0ZXJfY2xhc3NfIC0gQSBjbGFzcyBmb3IgY3VzdG9taXppbmcgdGhlIGhlbHAgb3V0cHV0LgorCisgICAqIGNvbmZsaWN0X2hhbmRsZXJfIC0gVXN1YWxseSB1bm5lY2Vzc2FyeSwgZGVmaW5lcyBzdHJhdGVneSBmb3IgcmVzb2x2aW5nCisgICAgIGNvbmZsaWN0aW5nIG9wdGlvbmFscy4KKworICAgKiBwcm9nXyAtIFRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIChkZWZhdWx0OgorICAgICA6ZGF0YTpgc3lzLmFyZ3ZbMF1gKQorCisgICAqIHVzYWdlXyAtIFRoZSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcHJvZ3JhbSB1c2FnZSAoZGVmYXVsdDogZ2VuZXJhdGVkKQorCitUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIGhvdyBlYWNoIG9mIHRoZXNlIGFyZSB1c2VkLgorCisKK2Rlc2NyaXB0aW9uCiteXl5eXl5eXl5eXgorCitNb3N0IGNhbGxzIHRvIHRoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBjb25zdHJ1Y3RvciB3aWxsIHVzZSB0aGUKK2BgZGVzY3JpcHRpb249YGAga2V5d29yZCBhcmd1bWVudC4gIFRoaXMgYXJndW1lbnQgZ2l2ZXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZgord2hhdCB0aGUgcHJvZ3JhbSBkb2VzIGFuZCBob3cgaXQgd29ya3MuICBJbiBoZWxwIG1lc3NhZ2VzLCB0aGUgZGVzY3JpcHRpb24gaXMKK2Rpc3BsYXllZCBiZXR3ZWVuIHRoZSBjb21tYW5kLWxpbmUgdXNhZ2Ugc3RyaW5nIGFuZCB0aGUgaGVscCBtZXNzYWdlcyBmb3IgdGhlCit2YXJpb3VzIGFyZ3VtZW50czo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nQSBmb28gdGhhdCBiYXJzJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogYXJncGFyc2UucHkgWy1oXQorCisgICBBIGZvbyB0aGF0IGJhcnMKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworQnkgZGVmYXVsdCwgdGhlIGRlc2NyaXB0aW9uIHdpbGwgYmUgbGluZS13cmFwcGVkIHNvIHRoYXQgaXQgZml0cyB3aXRoaW4gdGhlCitnaXZlbiBzcGFjZS4gIFRvIGNoYW5nZSB0aGlzIGJlaGF2aW9yLCBzZWUgdGhlIGZvcm1hdHRlcl9jbGFzc18gYXJndW1lbnQuCisKKworZXBpbG9nCiteXl5eXl4KKworU29tZSBwcm9ncmFtcyBsaWtlIHRvIGRpc3BsYXkgYWRkaXRpb25hbCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvZ3JhbSBhZnRlciB0aGUKK2Rlc2NyaXB0aW9uIG9mIHRoZSBhcmd1bWVudHMuICBTdWNoIHRleHQgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgYGBlcGlsb2c9YGAKK2FyZ3VtZW50IHRvIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgLi4uICAgICBkZXNjcmlwdGlvbj0nQSBmb28gdGhhdCBiYXJzJywKKyAgIC4uLiAgICAgZXBpbG9nPSJBbmQgdGhhdCdzIGhvdyB5b3UnZCBmb28gYSBiYXIiKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBhcmdwYXJzZS5weSBbLWhdCisKKyAgIEEgZm9vIHRoYXQgYmFycworCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorCisgICBBbmQgdGhhdCdzIGhvdyB5b3UnZCBmb28gYSBiYXIKKworQXMgd2l0aCB0aGUgZGVzY3JpcHRpb25fIGFyZ3VtZW50LCB0aGUgYGBlcGlsb2c9YGAgdGV4dCBpcyBieSBkZWZhdWx0CitsaW5lLXdyYXBwZWQsIGJ1dCB0aGlzIGJlaGF2aW9yIGNhbiBiZSBhZGp1c3RlZCB3aXRoIHRoZSBmb3JtYXR0ZXJfY2xhc3NfCithcmd1bWVudCB0byA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYC4KKworCithZGRfaGVscAorXl5eXl5eXl4KKworQnkgZGVmYXVsdCwgQXJndW1lbnRQYXJzZXIgb2JqZWN0cyBhZGQgYW4gb3B0aW9uIHdoaWNoIHNpbXBseSBkaXNwbGF5cwordGhlIHBhcnNlcidzIGhlbHAgbWVzc2FnZS4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgZmlsZSBuYW1lZAorYGBteXByb2dyYW0ucHlgYCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgY29kZTo6CisKKyAgIGltcG9ydCBhcmdwYXJzZQorICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpCisgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCitJZiBgYC1oYGAgb3IgYGAtLWhlbHBgYCBpcyBzdXBwbGllZCBpcyBhdCB0aGUgY29tbWFuZC1saW5lLCB0aGUgQXJndW1lbnRQYXJzZXIKK2hlbHAgd2lsbCBiZSBwcmludGVkOjoKKworICAgJCBweXRob24gbXlwcm9ncmFtLnB5IC0taGVscAorICAgdXNhZ2U6IG15cHJvZ3JhbS5weSBbLWhdIFstLWZvbyBGT09dCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKworT2NjYXNpb25hbGx5LCBpdCBtYXkgYmUgdXNlZnVsIHRvIGRpc2FibGUgdGhlIGFkZGl0aW9uIG9mIHRoaXMgaGVscCBvcHRpb24uCitUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSBwYXNzaW5nIGBgRmFsc2VgYCBhcyB0aGUgYGBhZGRfaGVscD1gYCBhcmd1bWVudCB0bworOmNsYXNzOmBBcmd1bWVudFBhcnNlcmA6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycsIGFkZF9oZWxwPUZhbHNlKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBQUk9HIFstLWZvbyBGT09dCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtLWZvbyBGT08gIGZvbyBoZWxwCisKK1RoZSBoZWxwIG9wdGlvbiBpcyB0eXBpY2FsbHkgYGAtaC8tLWhlbHBgYC4gVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGlzCitpZiB0aGUgYGBwcmVmaXhfY2hhcnM9YGAgaXMgc3BlY2lmaWVkIGFuZCBkb2VzIG5vdCBpbmNsdWRlIGBgJy0nYGAsIGluCit3aGljaCBjYXNlIGBgLWhgYCBhbmQgYGAtLWhlbHBgYCBhcmUgbm90IHZhbGlkIG9wdGlvbnMuICBJbgordGhpcyBjYXNlLCB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGBgcHJlZml4X2NoYXJzYGAgaXMgdXNlZCB0byBwcmVmaXgKK3RoZSBoZWxwIG9wdGlvbnM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycsIHByZWZpeF9jaGFycz0nKy8nKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBQUk9HIFsraF0KKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAraCwgKytoZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKKworcHJlZml4X2NoYXJzCiteXl5eXl5eXl5eXl4KKworTW9zdCBjb21tYW5kLWxpbmUgb3B0aW9ucyB3aWxsIHVzZSBgYCctJ2BgIGFzIHRoZSBwcmVmaXgsIGUuZy4gYGAtZi8tLWZvb2BgLgorUGFyc2VycyB0aGF0IG5lZWQgdG8gc3VwcG9ydCBkaWZmZXJlbnQgb3IgYWRkaXRpb25hbCBwcmVmaXgKK2NoYXJhY3RlcnMsIGUuZy4gZm9yIG9wdGlvbnMKK2xpa2UgYGArZmBgIG9yIGBgL2Zvb2BgLCBtYXkgc3BlY2lmeSB0aGVtIHVzaW5nIHRoZSBgYHByZWZpeF9jaGFycz1gYCBhcmd1bWVudAordG8gdGhlIEFyZ3VtZW50UGFyc2VyIGNvbnN0cnVjdG9yOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCBwcmVmaXhfY2hhcnM9Jy0rJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCcrZicpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnKytiYXInKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcrZiBYICsrYmFyIFknLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFyPSdZJywgZj0nWCcpCisKK1RoZSBgYHByZWZpeF9jaGFycz1gYCBhcmd1bWVudCBkZWZhdWx0cyB0byBgYCctJ2BgLiBTdXBwbHlpbmcgYSBzZXQgb2YKK2NoYXJhY3RlcnMgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIGBgJy0nYGAgd2lsbCBjYXVzZSBgYC1mLy0tZm9vYGAgb3B0aW9ucyB0byBiZQorZGlzYWxsb3dlZC4KKworCitmcm9tZmlsZV9wcmVmaXhfY2hhcnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitTb21ldGltZXMsIGZvciBleGFtcGxlIHdoZW4gZGVhbGluZyB3aXRoIGEgcGFydGljdWxhcmx5IGxvbmcgYXJndW1lbnQgbGlzdHMsIGl0CittYXkgbWFrZSBzZW5zZSB0byBrZWVwIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyBpbiBhIGZpbGUgcmF0aGVyIHRoYW4gdHlwaW5nIGl0IG91dAorYXQgdGhlIGNvbW1hbmQgbGluZS4gIElmIHRoZSBgYGZyb21maWxlX3ByZWZpeF9jaGFycz1gYCBhcmd1bWVudCBpcyBnaXZlbiB0byB0aGUKKzpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGNvbnN0cnVjdG9yLCB0aGVuIGFyZ3VtZW50cyB0aGF0IHN0YXJ0IHdpdGggYW55IG9mIHRoZQorc3BlY2lmaWVkIGNoYXJhY3RlcnMgd2lsbCBiZSB0cmVhdGVkIGFzIGZpbGVzLCBhbmQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUKK2FyZ3VtZW50cyB0aGV5IGNvbnRhaW4uICBGb3IgZXhhbXBsZTo6CisKKyAgID4+PiB3aXRoIG9wZW4oJ2FyZ3MudHh0JywgJ3cnKSBhcyBmcDoKKyAgIC4uLiAgICBmcC53cml0ZSgnLWZcbmJhcicpCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZnJvbWZpbGVfcHJlZml4X2NoYXJzPSdAJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctZicsICdmb28nLCAnQGFyZ3MudHh0J10pCisgICBOYW1lc3BhY2UoZj0nYmFyJykKKworQXJndW1lbnRzIHJlYWQgZnJvbSBhIGZpbGUgbXVzdCBieSBkZWZhdWx0IGJlIG9uZSBwZXIgbGluZSAoYnV0IHNlZSBhbHNvCis6bWV0aDpgY29udmVydF9hcmdfbGluZV90b19hcmdzYCkgYW5kIGFyZSB0cmVhdGVkIGFzIGlmIHRoZXkgd2VyZSBpbiB0aGUgc2FtZQorcGxhY2UgYXMgdGhlIG9yaWdpbmFsIGZpbGUgcmVmZXJlbmNpbmcgYXJndW1lbnQgb24gdGhlIGNvbW1hbmQgbGluZS4gIFNvIGluIHRoZQorZXhhbXBsZSBhYm92ZSwgdGhlIGV4cHJlc3Npb24gYGBbJy1mJywgJ2ZvbycsICdAYXJncy50eHQnXWBgIGlzIGNvbnNpZGVyZWQKK2VxdWl2YWxlbnQgdG8gdGhlIGV4cHJlc3Npb24gYGBbJy1mJywgJ2ZvbycsICctZicsICdiYXInXWBgLgorCitUaGUgYGBmcm9tZmlsZV9wcmVmaXhfY2hhcnM9YGAgYXJndW1lbnQgZGVmYXVsdHMgdG8gYGBOb25lYGAsIG1lYW5pbmcgdGhhdAorYXJndW1lbnRzIHdpbGwgbmV2ZXIgYmUgdHJlYXRlZCBhcyBmaWxlIHJlZmVyZW5jZXMuCisKKworYXJndW1lbnRfZGVmYXVsdAorXl5eXl5eXl5eXl5eXl5eXgorCitHZW5lcmFsbHksIGFyZ3VtZW50IGRlZmF1bHRzIGFyZSBzcGVjaWZpZWQgZWl0aGVyIGJ5IHBhc3NpbmcgYSBkZWZhdWx0IHRvCis6bWV0aDpgYWRkX2FyZ3VtZW50YCBvciBieSBjYWxsaW5nIHRoZSA6bWV0aDpgc2V0X2RlZmF1bHRzYCBtZXRob2RzIHdpdGggYQorc3BlY2lmaWMgc2V0IG9mIG5hbWUtdmFsdWUgcGFpcnMuICBTb21ldGltZXMgaG93ZXZlciwgaXQgbWF5IGJlIHVzZWZ1bCB0bworc3BlY2lmeSBhIHNpbmdsZSBwYXJzZXItd2lkZSBkZWZhdWx0IGZvciBhcmd1bWVudHMuICBUaGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgYnkKK3Bhc3NpbmcgdGhlIGBgYXJndW1lbnRfZGVmYXVsdD1gYCBrZXl3b3JkIGFyZ3VtZW50IHRvIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgLgorRm9yIGV4YW1wbGUsIHRvIGdsb2JhbGx5IHN1cHByZXNzIGF0dHJpYnV0ZSBjcmVhdGlvbiBvbiA6bWV0aDpgcGFyc2VfYXJnc2AKK2NhbGxzLCB3ZSBzdXBwbHkgYGBhcmd1bWVudF9kZWZhdWx0PVNVUFBSRVNTYGA6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoYXJndW1lbnRfZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9Jz8nKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1mb28nLCAnMScsICdCQVInXSkKKyAgIE5hbWVzcGFjZShiYXI9J0JBUicsIGZvbz0nMScpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICBOYW1lc3BhY2UoKQorCisKK3BhcmVudHMKK15eXl5eXl4KKworU29tZXRpbWVzLCBzZXZlcmFsIHBhcnNlcnMgc2hhcmUgYSBjb21tb24gc2V0IG9mIGFyZ3VtZW50cy4gUmF0aGVyIHRoYW4KK3JlcGVhdGluZyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2UgYXJndW1lbnRzLCBhIHNpbmdsZSBwYXJzZXIgd2l0aCBhbGwgdGhlCitzaGFyZWQgYXJndW1lbnRzIGFuZCBwYXNzZWQgdG8gYGBwYXJlbnRzPWBgIGFyZ3VtZW50IHRvIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgCitjYW4gYmUgdXNlZC4gIFRoZSBgYHBhcmVudHM9YGAgYXJndW1lbnQgdGFrZXMgYSBsaXN0IG9mIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgCitvYmplY3RzLCBjb2xsZWN0cyBhbGwgdGhlIHBvc2l0aW9uYWwgYW5kIG9wdGlvbmFsIGFjdGlvbnMgZnJvbSB0aGVtLCBhbmQgYWRkcwordGhlc2UgYWN0aW9ucyB0byB0aGUgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0IGJlaW5nIGNvbnN0cnVjdGVkOjoKKworICAgPj4+IHBhcmVudF9wYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgID4+PiBwYXJlbnRfcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wYXJlbnQnLCB0eXBlPWludCkKKworICAgPj4+IGZvb19wYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRfcGFyc2VyXSkKKyAgID4+PiBmb29fcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJykKKyAgID4+PiBmb29fcGFyc2VyLnBhcnNlX2FyZ3MoWyctLXBhcmVudCcsICcyJywgJ1hYWCddKQorICAgTmFtZXNwYWNlKGZvbz0nWFhYJywgcGFyZW50PTIpCisKKyAgID4+PiBiYXJfcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50X3BhcnNlcl0pCisgICA+Pj4gYmFyX3BhcnNlci5hZGRfYXJndW1lbnQoJy0tYmFyJykKKyAgID4+PiBiYXJfcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWJhcicsICdZWVknXSkKKyAgIE5hbWVzcGFjZShiYXI9J1lZWScsIHBhcmVudD1Ob25lKQorCitOb3RlIHRoYXQgbW9zdCBwYXJlbnQgcGFyc2VycyB3aWxsIHNwZWNpZnkgYGBhZGRfaGVscD1GYWxzZWBgLiAgT3RoZXJ3aXNlLCB0aGUKKzpjbGFzczpgQXJndW1lbnRQYXJzZXJgIHdpbGwgc2VlIHR3byBgYC1oLy0taGVscGBgIG9wdGlvbnMgKG9uZSBpbiB0aGUgcGFyZW50CithbmQgb25lIGluIHRoZSBjaGlsZCkgYW5kIHJhaXNlIGFuIGVycm9yLgorCisKK2Zvcm1hdHRlcl9jbGFzcworXl5eXl5eXl5eXl5eXl5eCisKKzpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdHMgYWxsb3cgdGhlIGhlbHAgZm9ybWF0dGluZyB0byBiZSBjdXN0b21pemVkIGJ5CitzcGVjaWZ5aW5nIGFuIGFsdGVybmF0ZSBmb3JtYXR0aW5nIGNsYXNzLiAgQ3VycmVudGx5LCB0aGVyZSBhcmUgdGhyZWUgc3VjaAorY2xhc3NlczogOmNsYXNzOmBhcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXJgLAorOmNsYXNzOmBhcmdwYXJzZS5SYXdUZXh0SGVscEZvcm1hdHRlcmAgYW5kCis6Y2xhc3M6YGFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyYC4gIFRoZSBmaXJzdCB0d28gYWxsb3cgbW9yZQorY29udHJvbCBvdmVyIGhvdyB0ZXh0dWFsIGRlc2NyaXB0aW9ucyBhcmUgZGlzcGxheWVkLCB3aGlsZSB0aGUgbGFzdAorYXV0b21hdGljYWxseSBhZGRzIGluZm9ybWF0aW9uIGFib3V0IGFyZ3VtZW50IGRlZmF1bHQgdmFsdWVzLgorCitCeSBkZWZhdWx0LCA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIGxpbmUtd3JhcCB0aGUgZGVzY3JpcHRpb25fIGFuZAorZXBpbG9nXyB0ZXh0cyBpbiBjb21tYW5kLWxpbmUgaGVscCBtZXNzYWdlczo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgIC4uLiAgICAgcHJvZz0nUFJPRycsCisgICAuLi4gICAgIGRlc2NyaXB0aW9uPScnJ3RoaXMgZGVzY3JpcHRpb24KKyAgIC4uLiAgICAgICAgIHdhcyBpbmRlbnRlZCB3ZWlyZAorICAgLi4uICAgICAgICAgICAgIGJ1dCB0aGF0IGlzIG9rYXknJycsCisgICAuLi4gICAgIGVwaWxvZz0nJycKKyAgIC4uLiAgICAgICAgICAgICBsaWtld2lzZSBmb3IgdGhpcyBlcGlsb2cgd2hvc2Ugd2hpdGVzcGFjZSB3aWxsCisgICAuLi4gICAgICAgICBiZSBjbGVhbmVkIHVwIGFuZCB3aG9zZSB3b3JkcyB3aWxsIGJlIHdyYXBwZWQKKyAgIC4uLiAgICAgICAgIGFjcm9zcyBhIGNvdXBsZSBsaW5lcycnJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogUFJPRyBbLWhdCisKKyAgIHRoaXMgZGVzY3JpcHRpb24gd2FzIGluZGVudGVkIHdlaXJkIGJ1dCB0aGF0IGlzIG9rYXkKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworICAgbGlrZXdpc2UgZm9yIHRoaXMgZXBpbG9nIHdob3NlIHdoaXRlc3BhY2Ugd2lsbCBiZSBjbGVhbmVkIHVwIGFuZCB3aG9zZSB3b3JkcworICAgd2lsbCBiZSB3cmFwcGVkIGFjcm9zcyBhIGNvdXBsZSBsaW5lcworCitQYXNzaW5nIDpjbGFzczpgYXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyYCBhcyBgYGZvcm1hdHRlcl9jbGFzcz1gYAoraW5kaWNhdGVzIHRoYXQgZGVzY3JpcHRpb25fIGFuZCBlcGlsb2dfIGFyZSBhbHJlYWR5IGNvcnJlY3RseSBmb3JtYXR0ZWQgYW5kCitzaG91bGQgbm90IGJlIGxpbmUtd3JhcHBlZDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgIC4uLiAgICAgcHJvZz0nUFJPRycsCisgICAuLi4gICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIsCisgICAuLi4gICAgIGRlc2NyaXB0aW9uPXRleHR3cmFwLmRlZGVudCgnJydcCisgICAuLi4gICAgICAgICBQbGVhc2UgZG8gbm90IG1lc3MgdXAgdGhpcyB0ZXh0IQorICAgLi4uICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC4uLiAgICAgICAgICAgICBJIGhhdmUgaW5kZW50ZWQgaXQKKyAgIC4uLiAgICAgICAgICAgICBleGFjdGx5IHRoZSB3YXkKKyAgIC4uLiAgICAgICAgICAgICBJIHdhbnQgaXQKKyAgIC4uLiAgICAgICAgICcnJykpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IFBST0cgWy1oXQorCisgICBQbGVhc2UgZG8gbm90IG1lc3MgdXAgdGhpcyB0ZXh0IQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIEkgaGF2ZSBpbmRlbnRlZCBpdAorICAgICAgZXhhY3RseSB0aGUgd2F5CisgICAgICBJIHdhbnQgaXQKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworOmNsYXNzOmBSYXdUZXh0SGVscEZvcm1hdHRlcmAgbWFpbnRhaW5zIHdoaXRlc3BhY2UgZm9yIGFsbCBzb3J0cyBvZiBoZWxwIHRleHQKK2luY2x1ZGluZyBhcmd1bWVudCBkZXNjcmlwdGlvbnMuCisKK1RoZSBvdGhlciBmb3JtYXR0ZXIgY2xhc3MgYXZhaWxhYmxlLCA6Y2xhc3M6YEFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyYCwKK3dpbGwgYWRkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGVhY2ggb2YgdGhlIGFyZ3VtZW50czo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgIC4uLiAgICAgcHJvZz0nUFJPRycsCisgICAuLi4gICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcikKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIHR5cGU9aW50LCBkZWZhdWx0PTQyLCBoZWxwPSdGT08hJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBuYXJncz0nKicsIGRlZmF1bHQ9WzEsIDIsIDNdLCBoZWxwPSdCQVIhJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyBGT09dIFtiYXIgW2JhciAuLi5dXQorCisgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICBiYXIgICAgICAgICBCQVIhIChkZWZhdWx0OiBbMSwgMiwgM10pCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLS1mb28gRk9PICAgRk9PISAoZGVmYXVsdDogNDIpCisKKworY29uZmxpY3RfaGFuZGxlcgorXl5eXl5eXl5eXl5eXl5eXgorCis6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIGRvIG5vdCBhbGxvdyB0d28gYWN0aW9ucyB3aXRoIHRoZSBzYW1lIG9wdGlvbgorc3RyaW5nLiAgQnkgZGVmYXVsdCwgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0cyByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIGFuCithdHRlbXB0IGlzIG1hZGUgdG8gY3JlYXRlIGFuIGFyZ3VtZW50IHdpdGggYW4gb3B0aW9uIHN0cmluZyB0aGF0IGlzIGFscmVhZHkgaW4KK3VzZTo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZvbycsIGhlbHA9J29sZCBmb28gaGVscCcpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBoZWxwPSduZXcgZm9vIGhlbHAnKQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uCisgICBBcmd1bWVudEVycm9yOiBhcmd1bWVudCAtLWZvbzogY29uZmxpY3Rpbmcgb3B0aW9uIHN0cmluZyhzKTogLS1mb28KKworU29tZXRpbWVzIChlLmcuIHdoZW4gdXNpbmcgcGFyZW50c18pIGl0IG1heSBiZSB1c2VmdWwgdG8gc2ltcGx5IG92ZXJyaWRlIGFueQorb2xkZXIgYXJndW1lbnRzIHdpdGggdGhlIHNhbWUgb3B0aW9uIHN0cmluZy4gIFRvIGdldCB0aGlzIGJlaGF2aW9yLCB0aGUgdmFsdWUKK2BgJ3Jlc29sdmUnYGAgY2FuIGJlIHN1cHBsaWVkIHRvIHRoZSBgYGNvbmZsaWN0X2hhbmRsZXI9YGAgYXJndW1lbnQgb2YKKzpjbGFzczpgQXJndW1lbnRQYXJzZXJgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCBjb25mbGljdF9oYW5kbGVyPSdyZXNvbHZlJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZvbycsIGhlbHA9J29sZCBmb28gaGVscCcpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBoZWxwPSduZXcgZm9vIGhlbHAnKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy1mIEZPT10gWy0tZm9vIEZPT10KKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtZiBGT08gICAgICBvbGQgZm9vIGhlbHAKKyAgICAtLWZvbyBGT08gICBuZXcgZm9vIGhlbHAKKworTm90ZSB0aGF0IDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdHMgb25seSByZW1vdmUgYW4gYWN0aW9uIGlmIGFsbCBvZiBpdHMKK29wdGlvbiBzdHJpbmdzIGFyZSBvdmVycmlkZGVuLiAgU28sIGluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgb2xkIGBgLWYvLS1mb29gYAorYWN0aW9uIGlzIHJldGFpbmVkIGFzIHRoZSBgYC1mYGAgYWN0aW9uLCBiZWNhdXNlIG9ubHkgdGhlIGBgLS1mb29gYCBvcHRpb24KK3N0cmluZyB3YXMgb3ZlcnJpZGRlbi4KKworCitwcm9nCiteXl5eCisKK0J5IGRlZmF1bHQsIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdHMgdXNlcyBgYHN5cy5hcmd2WzBdYGAgdG8gZGV0ZXJtaW5lCitob3cgdG8gZGlzcGxheSB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSBpbiBoZWxwIG1lc3NhZ2VzLiAgVGhpcyBkZWZhdWx0IGlzIGFsbW9zdAorYWx3YXlzIGRlc2lyYWJsZSBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaGVscCBtZXNzYWdlcyBtYXRjaCBob3cgdGhlIHByb2dyYW0gd2FzCitpbnZva2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSBmaWxlIG5hbWVkCitgYG15cHJvZ3JhbS5weWBgIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOjoKKworICAgaW1wb3J0IGFyZ3BhcnNlCisgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJykKKyAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKK1RoZSBoZWxwIGZvciB0aGlzIHByb2dyYW0gd2lsbCBkaXNwbGF5IGBgbXlwcm9ncmFtLnB5YGAgYXMgdGhlIHByb2dyYW0gbmFtZQorKHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhlIHByb2dyYW0gd2FzIGludm9rZWQgZnJvbSk6OgorCisgICAkIHB5dGhvbiBteXByb2dyYW0ucHkgLS1oZWxwCisgICB1c2FnZTogbXlwcm9ncmFtLnB5IFstaF0gWy0tZm9vIEZPT10KKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBGT08gICBmb28gaGVscAorICAgJCBjZCAuLgorICAgJCBweXRob24gc3ViZGlyXG15cHJvZ3JhbS5weSAtLWhlbHAKKyAgIHVzYWdlOiBteXByb2dyYW0ucHkgWy1oXSBbLS1mb28gRk9PXQorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwCisKK1RvIGNoYW5nZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IsIGFub3RoZXIgdmFsdWUgY2FuIGJlIHN1cHBsaWVkIHVzaW5nIHRoZQorYGBwcm9nPWBgIGFyZ3VtZW50IHRvIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J215cHJvZ3JhbScpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IG15cHJvZ3JhbSBbLWhdCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKK05vdGUgdGhhdCB0aGUgcHJvZ3JhbSBuYW1lLCB3aGV0aGVyIGRldGVybWluZWQgZnJvbSBgYHN5cy5hcmd2WzBdYGAgb3IgZnJvbSB0aGUKK2BgcHJvZz1gYCBhcmd1bWVudCwgaXMgYXZhaWxhYmxlIHRvIGhlbHAgbWVzc2FnZXMgdXNpbmcgdGhlIGBgJShwcm9nKXNgYCBmb3JtYXQKK3NwZWNpZmllci4KKworOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J215cHJvZ3JhbScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBoZWxwPSdmb28gb2YgdGhlICUocHJvZylzIHByb2dyYW0nKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBteXByb2dyYW0gWy1oXSBbLS1mb28gRk9PXQorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vIEZPTyAgIGZvbyBvZiB0aGUgbXlwcm9ncmFtIHByb2dyYW0KKworCit1c2FnZQorXl5eXl4KKworQnkgZGVmYXVsdCwgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgY2FsY3VsYXRlcyB0aGUgdXNhZ2UgbWVzc2FnZSBmcm9tIHRoZQorYXJndW1lbnRzIGl0IGNvbnRhaW5zOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgbmFyZ3M9Jz8nLCBoZWxwPSdmb28gaGVscCcpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9JysnLCBoZWxwPSdiYXIgaGVscCcpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gW0ZPT11dIGJhciBbYmFyIC4uLl0KKworICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgYmFyICAgICAgICAgIGJhciBoZWxwCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vIFtGT09dICBmb28gaGVscAorCitUaGUgZGVmYXVsdCBtZXNzYWdlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGBgdXNhZ2U9YGAga2V5d29yZCBhcmd1bWVudDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgdXNhZ2U9JyUocHJvZylzIFtvcHRpb25zXScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBuYXJncz0nPycsIGhlbHA9J2ZvbyBoZWxwJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBuYXJncz0nKycsIGhlbHA9J2JhciBoZWxwJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogUFJPRyBbb3B0aW9uc10KKworICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgYmFyICAgICAgICAgIGJhciBoZWxwCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vIFtGT09dICBmb28gaGVscAorCitUaGUgYGAlKHByb2cpc2BgIGZvcm1hdCBzcGVjaWZpZXIgaXMgYXZhaWxhYmxlIHRvIGZpbGwgaW4gdGhlIHByb2dyYW0gbmFtZSBpbgoreW91ciB1c2FnZSBtZXNzYWdlcy4KKworCitUaGUgYWRkX2FyZ3VtZW50KCkgbWV0aG9kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudChuYW1lIG9yIGZsYWdzLi4uLCBbYWN0aW9uXSwgW25hcmdzXSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnN0XSwgW2RlZmF1bHRdLCBbdHlwZV0sIFtjaG9pY2VzXSwgW3JlcXVpcmVkXSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBdLCBbbWV0YXZhcl0sIFtkZXN0XSkKKworICAgRGVmaW5lIGhvdyBhIHNpbmdsZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgc2hvdWxkIGJlIHBhcnNlZC4gIEVhY2ggcGFyYW1ldGVyCisgICBoYXMgaXRzIG93biBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGJlbG93LCBidXQgaW4gc2hvcnQgdGhleSBhcmU6CisKKyAgICogYG5hbWUgb3IgZmxhZ3NgXyAtIEVpdGhlciBhIG5hbWUgb3IgYSBsaXN0IG9mIG9wdGlvbiBzdHJpbmdzLCBlLmcuIGBgZm9vYGAKKyAgICAgb3IgYGAtZiwgLS1mb29gYAorCisgICAqIGFjdGlvbl8gLSBUaGUgYmFzaWMgdHlwZSBvZiBhY3Rpb24gdG8gYmUgdGFrZW4gd2hlbiB0aGlzIGFyZ3VtZW50IGlzCisgICAgIGVuY291bnRlcmVkIGF0IHRoZSBjb21tYW5kLWxpbmUuCisKKyAgICogbmFyZ3NfIC0gVGhlIG51bWJlciBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIGJlIGNvbnN1bWVkLgorCisgICAqIGNvbnN0XyAtIEEgY29uc3RhbnQgdmFsdWUgcmVxdWlyZWQgYnkgc29tZSBhY3Rpb25fIGFuZCBuYXJnc18gc2VsZWN0aW9ucy4KKworICAgKiBkZWZhdWx0XyAtIFRoZSB2YWx1ZSBwcm9kdWNlZCBpZiB0aGUgYXJndW1lbnQgaXMgYWJzZW50IGZyb20gdGhlCisgICAgIGNvbW1hbmQtbGluZS4KKworICAgKiB0eXBlXyAtIFRoZSB0eXBlIHRvIHdoaWNoIHRoZSBjb21tYW5kLWxpbmUgYXJnIHNob3VsZCBiZSBjb252ZXJ0ZWQuCisKKyAgICogY2hvaWNlc18gLSBBIGNvbnRhaW5lciBvZiB0aGUgYWxsb3dhYmxlIHZhbHVlcyBmb3IgdGhlIGFyZ3VtZW50LgorCisgICAqIHJlcXVpcmVkXyAtIFdoZXRoZXIgb3Igbm90IHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIG1heSBiZSBvbWl0dGVkCisgICAgIChvcHRpb25hbHMgb25seSkuCisKKyAgICogaGVscF8gLSBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIGFyZ3VtZW50IGRvZXMuCisKKyAgICogbWV0YXZhcl8gLSBBIG5hbWUgZm9yIHRoZSBhcmd1bWVudCBpbiB1c2FnZSBtZXNzYWdlcy4KKworICAgKiBkZXN0XyAtIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gYmUgYWRkZWQgdG8gdGhlIG9iamVjdCByZXR1cm5lZCBieQorICAgICA6bWV0aDpgcGFyc2VfYXJnc2AuCisKK1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgaG93IGVhY2ggb2YgdGhlc2UgYXJlIHVzZWQuCisKKworbmFtZSBvciBmbGFncworXl5eXl5eXl5eXl5eXgorCitUaGUgOm1ldGg6YGFkZF9hcmd1bWVudGAgbWV0aG9kIG11c3Qga25vdyB3aGV0aGVyIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCBsaWtlCitgYC1mYGAgb3IgYGAtLWZvb2BgLCBvciBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIGxpa2UgYSBsaXN0IG9mIGZpbGVuYW1lcywgaXMKK2V4cGVjdGVkLiAgVGhlIGZpcnN0IGFyZ3VtZW50cyBwYXNzZWQgdG8gOm1ldGg6YGFkZF9hcmd1bWVudGAgbXVzdCB0aGVyZWZvcmUgYmUKK2VpdGhlciBhIHNlcmllcyBvZiBmbGFncywgb3IgYSBzaW1wbGUgYXJndW1lbnQgbmFtZS4gIEZvciBleGFtcGxlLCBhbiBvcHRpb25hbAorYXJndW1lbnQgY291bGQgYmUgY3JlYXRlZCBsaWtlOjoKKworICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZm9vJykKKword2hpbGUgYSBwb3NpdGlvbmFsIGFyZ3VtZW50IGNvdWxkIGJlIGNyZWF0ZWQgbGlrZTo6CisKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInKQorCitXaGVuIDptZXRoOmBwYXJzZV9hcmdzYCBpcyBjYWxsZWQsIG9wdGlvbmFsIGFyZ3VtZW50cyB3aWxsIGJlIGlkZW50aWZpZWQgYnkgdGhlCitgYC1gYCBwcmVmaXgsIGFuZCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgcG9zaXRpb25hbDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZvbycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJ0JBUiddKQorICAgTmFtZXNwYWNlKGJhcj0nQkFSJywgZm9vPU5vbmUpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydCQVInLCAnLS1mb28nLCAnRk9PJ10pCisgICBOYW1lc3BhY2UoYmFyPSdCQVInLCBmb289J0ZPTycpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbycsICdGT08nXSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy1mIEZPT10gYmFyCisgICBQUk9HOiBlcnJvcjogdG9vIGZldyBhcmd1bWVudHMKKworCithY3Rpb24KK15eXl5eXgorCis6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIGFzc29jaWF0ZSBjb21tYW5kLWxpbmUgYXJncyB3aXRoIGFjdGlvbnMuICBUaGVzZQorYWN0aW9ucyBjYW4gZG8ganVzdCBhYm91dCBhbnl0aGluZyB3aXRoIHRoZSBjb21tYW5kLWxpbmUgYXJncyBhc3NvY2lhdGVkIHdpdGgKK3RoZW0sIHRob3VnaCBtb3N0IGFjdGlvbnMgc2ltcGx5IGFkZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIG9iamVjdCByZXR1cm5lZCBieQorOm1ldGg6YHBhcnNlX2FyZ3NgLiAgVGhlIGBgYWN0aW9uYGAga2V5d29yZCBhcmd1bWVudCBzcGVjaWZpZXMgaG93IHRoZQorY29tbWFuZC1saW5lIGFyZ3Mgc2hvdWxkIGJlIGhhbmRsZWQuIFRoZSBzdXBwb3J0ZWQgYWN0aW9ucyBhcmU6CisKKyogYGAnc3RvcmUnYGAgLSBUaGlzIGp1c3Qgc3RvcmVzIHRoZSBhcmd1bWVudCdzIHZhbHVlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAorICAgYWN0aW9uLiBGb3IgZXhhbXBsZTo6CisKKyAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycpCisgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbyAxJy5zcGxpdCgpKQorICAgIE5hbWVzcGFjZShmb289JzEnKQorCisqIGBgJ3N0b3JlX2NvbnN0J2BgIC0gVGhpcyBzdG9yZXMgdGhlIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY29uc3RfIGtleXdvcmQKKyAgIGFyZ3VtZW50LiAgKE5vdGUgdGhhdCB0aGUgY29uc3RfIGtleXdvcmQgYXJndW1lbnQgZGVmYXVsdHMgdG8gdGhlIHJhdGhlcgorICAgdW5oZWxwZnVsIGBgTm9uZWBgLikgIFRoZSBgYCdzdG9yZV9jb25zdCdgYCBhY3Rpb24gaXMgbW9zdCBjb21tb25seSB1c2VkIHdpdGgKKyAgIG9wdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHNwZWNpZnkgc29tZSBzb3J0IG9mIGZsYWcuICBGb3IgZXhhbXBsZTo6CisKKyAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD00MikKKyAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vJy5zcGxpdCgpKQorICAgIE5hbWVzcGFjZShmb289NDIpCisKKyogYGAnc3RvcmVfdHJ1ZSdgYCBhbmQgYGAnc3RvcmVfZmFsc2UnYGAgLSBUaGVzZSBzdG9yZSB0aGUgdmFsdWVzIGBgVHJ1ZWBgIGFuZAorICBgYEZhbHNlYGAgcmVzcGVjdGl2ZWx5LiAgVGhlc2UgYXJlIHNwZWNpYWwgY2FzZXMgb2YgYGAnc3RvcmVfY29uc3QnYGAuICBGb3IKKyAgZXhhbXBsZTo6CisKKyAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmFyJywgYWN0aW9uPSdzdG9yZV9mYWxzZScpCisgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbyAtLWJhcicuc3BsaXQoKSkKKyAgICBOYW1lc3BhY2UoYmFyPUZhbHNlLCBmb289VHJ1ZSkKKworKiBgYCdhcHBlbmQnYGAgLSBUaGlzIHN0b3JlcyBhIGxpc3QsIGFuZCBhcHBlbmRzIGVhY2ggYXJndW1lbnQgdmFsdWUgdG8gdGhlCisgIGxpc3QuICBUaGlzIGlzIHVzZWZ1bCB0byBhbGxvdyBhbiBvcHRpb24gdG8gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgorICBFeGFtcGxlIHVzYWdlOjoKKworICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdhcHBlbmQnKQorICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gMSAtLWZvbyAyJy5zcGxpdCgpKQorICAgIE5hbWVzcGFjZShmb289WycxJywgJzInXSkKKworKiBgYCdhcHBlbmRfY29uc3QnYGAgLSBUaGlzIHN0b3JlcyBhIGxpc3QsIGFuZCBhcHBlbmRzIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkKKyAgdGhlIGNvbnN0XyBrZXl3b3JkIGFyZ3VtZW50IHRvIHRoZSBsaXN0LiAgKE5vdGUgdGhhdCB0aGUgY29uc3RfIGtleXdvcmQKKyAgYXJndW1lbnQgZGVmYXVsdHMgdG8gYGBOb25lYGAuKSAgVGhlIGBgJ2FwcGVuZF9jb25zdCdgYCBhY3Rpb24gaXMgdHlwaWNhbGx5CisgIHVzZWZ1bCB3aGVuIG11bHRpcGxlIGFyZ3VtZW50cyBuZWVkIHRvIHN0b3JlIGNvbnN0YW50cyB0byB0aGUgc2FtZSBsaXN0LiBGb3IKKyAgZXhhbXBsZTo6CisKKyAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN0cicsIGRlc3Q9J3R5cGVzJywgYWN0aW9uPSdhcHBlbmRfY29uc3QnLCBjb25zdD1zdHIpCisgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW50JywgZGVzdD0ndHlwZXMnLCBhY3Rpb249J2FwcGVuZF9jb25zdCcsIGNvbnN0PWludCkKKyAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tc3RyIC0taW50Jy5zcGxpdCgpKQorICAgIE5hbWVzcGFjZSh0eXBlcz1bPHR5cGUgJ3N0cic+LCA8dHlwZSAnaW50Jz5dKQorCisqIGBgJ3ZlcnNpb24nYGAgLSBUaGlzIGV4cGVjdHMgYSBgYHZlcnNpb249YGAga2V5d29yZCBhcmd1bWVudCBpbiB0aGUKKyAgOm1ldGg6YGFkZF9hcmd1bWVudGAgY2FsbCwgYW5kIHByaW50cyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0cyB3aGVuCisgIGludm9rZWQuCisKKyAgICA+Pj4gaW1wb3J0IGFyZ3BhcnNlCisgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSclKHByb2cpcyAyLjAnKQorICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tdmVyc2lvbiddKQorICAgIFBST0cgMi4wCisKK1lvdSBjYW4gYWxzbyBzcGVjaWZ5IGFuIGFyYml0cmFyeSBhY3Rpb24gYnkgcGFzc2luZyBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzCit0aGUgQWN0aW9uIEFQSS4gIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvIGV4dGVuZAorOmNsYXNzOmBhcmdwYXJzZS5BY3Rpb25gLCBzdXBwbHlpbmcgYW4gYXBwcm9wcmlhdGUgYGBfX2NhbGxfX2BgIG1ldGhvZC4gIFRoZQorYGBfX2NhbGxfX2BgIG1ldGhvZCBzaG91bGQgYWNjZXB0IGZvdXIgcGFyYW1ldGVyczoKKworKiBgYHBhcnNlcmBgIC0gVGhlIEFyZ3VtZW50UGFyc2VyIG9iamVjdCB3aGljaCBjb250YWlucyB0aGlzIGFjdGlvbi4KKworKiBgYG5hbWVzcGFjZWBgIC0gVGhlIG5hbWVzcGFjZSBvYmplY3QgdGhhdCB3aWxsIGJlIHJldHVybmVkIGJ5CisgIDptZXRoOmBwYXJzZV9hcmdzYC4gIE1vc3QgYWN0aW9ucyBhZGQgYW4gYXR0cmlidXRlIHRvIHRoaXMgb2JqZWN0LgorCisqIGBgdmFsdWVzYGAgLSBUaGUgYXNzb2NpYXRlZCBjb21tYW5kLWxpbmUgYXJncywgd2l0aCBhbnkgdHlwZS1jb252ZXJzaW9ucworICBhcHBsaWVkLiAgKFR5cGUtY29udmVyc2lvbnMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSB0eXBlXyBrZXl3b3JkIGFyZ3VtZW50IHRvCisgIDptZXRoOmBhZGRfYXJndW1lbnRgLgorCisqIGBgb3B0aW9uX3N0cmluZ2BgIC0gVGhlIG9wdGlvbiBzdHJpbmcgdGhhdCB3YXMgdXNlZCB0byBpbnZva2UgdGhpcyBhY3Rpb24uCisgIFRoZSBgYG9wdGlvbl9zdHJpbmdgYCBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIHdpbGwgYmUgYWJzZW50IGlmIHRoZSBhY3Rpb24KKyAgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcG9zaXRpb25hbCBhcmd1bWVudC4KKworQW4gZXhhbXBsZSBvZiBhIGN1c3RvbSBhY3Rpb246OgorCisgICA+Pj4gY2xhc3MgRm9vQWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6CisgICAuLi4gICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgLi4uICAgICAgICAgcHJpbnQgJyVyICVyICVyJyAlIChuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZykKKyAgIC4uLiAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIHZhbHVlcykKKyAgIC4uLgorICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj1Gb29BY3Rpb24pCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgYWN0aW9uPUZvb0FjdGlvbikKKyAgID4+PiBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoJzEgLS1mb28gMicuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShiYXI9Tm9uZSwgZm9vPU5vbmUpICcxJyBOb25lCisgICBOYW1lc3BhY2UoYmFyPScxJywgZm9vPU5vbmUpICcyJyAnLS1mb28nCisgICA+Pj4gYXJncworICAgTmFtZXNwYWNlKGJhcj0nMScsIGZvbz0nMicpCisKKworbmFyZ3MKK15eXl5eCisKK0FyZ3VtZW50UGFyc2VyIG9iamVjdHMgdXN1YWxseSBhc3NvY2lhdGUgYSBzaW5nbGUgY29tbWFuZC1saW5lIGFyZ3VtZW50IHdpdGggYQorc2luZ2xlIGFjdGlvbiB0byBiZSB0YWtlbi4gIFRoZSBgYG5hcmdzYGAga2V5d29yZCBhcmd1bWVudCBhc3NvY2lhdGVzIGEKK2RpZmZlcmVudCBudW1iZXIgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB3aXRoIGEgc2luZ2xlIGFjdGlvbi4uICBUaGUgc3VwcG9ydGVkCit2YWx1ZXMgYXJlOgorCisqIE4gKGFuIGludGVnZXIpLiAgTiBhcmdzIGZyb20gdGhlIGNvbW1hbmQtbGluZSB3aWxsIGJlIGdhdGhlcmVkIHRvZ2V0aGVyIGludG8gYQorICBsaXN0LiAgRm9yIGV4YW1wbGU6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIG5hcmdzPTIpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBuYXJncz0xKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJ2MgLS1mb28gYSBiJy5zcGxpdCgpKQorICAgICBOYW1lc3BhY2UoYmFyPVsnYyddLCBmb289WydhJywgJ2InXSkKKworICBOb3RlIHRoYXQgYGBuYXJncz0xYGAgcHJvZHVjZXMgYSBsaXN0IG9mIG9uZSBpdGVtLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbQorICB0aGUgZGVmYXVsdCwgaW4gd2hpY2ggdGhlIGl0ZW0gaXMgcHJvZHVjZWQgYnkgaXRzZWxmLgorCisqIGBgJz8nYGAuIE9uZSBhcmcgd2lsbCBiZSBjb25zdW1lZCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgaWYgcG9zc2libGUsIGFuZAorICBwcm9kdWNlZCBhcyBhIHNpbmdsZSBpdGVtLiAgSWYgbm8gY29tbWFuZC1saW5lIGFyZyBpcyBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbQorICBkZWZhdWx0XyB3aWxsIGJlIHByb2R1Y2VkLiAgTm90ZSB0aGF0IGZvciBvcHRpb25hbCBhcmd1bWVudHMsIHRoZXJlIGlzIGFuCisgIGFkZGl0aW9uYWwgY2FzZSAtIHRoZSBvcHRpb24gc3RyaW5nIGlzIHByZXNlbnQgYnV0IG5vdCBmb2xsb3dlZCBieSBhCisgIGNvbW1hbmQtbGluZSBhcmcuICBJbiB0aGlzIGNhc2UgdGhlIHZhbHVlIGZyb20gY29uc3RfIHdpbGwgYmUgcHJvZHVjZWQuICBTb21lCisgIGV4YW1wbGVzIHRvIGlsbHVzdHJhdGUgdGhpczo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgbmFyZ3M9Jz8nLCBjb25zdD0nYycsIGRlZmF1bHQ9J2QnKQorICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PSdkJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdYWCAtLWZvbyBZWScuc3BsaXQoKSkKKyAgICAgTmFtZXNwYWNlKGJhcj0nWFgnLCBmb289J1lZJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdYWCAtLWZvbycuc3BsaXQoKSkKKyAgICAgTmFtZXNwYWNlKGJhcj0nWFgnLCBmb289J2MnKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJycuc3BsaXQoKSkKKyAgICAgTmFtZXNwYWNlKGJhcj0nZCcsIGZvbz0nZCcpCisKKyAgT25lIG9mIHRoZSBtb3JlIGNvbW1vbiB1c2VzIG9mIGBgbmFyZ3M9Jz8nYGAgaXMgdG8gYWxsb3cgb3B0aW9uYWwgaW5wdXQgYW5kCisgIG91dHB1dCBmaWxlczo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2luZmlsZScsIG5hcmdzPSc/JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgncicpLAorICAgICAuLi4gICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PXN5cy5zdGRpbikKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ291dGZpbGUnLCBuYXJncz0nPycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3cnKSwKKyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1zeXMuc3Rkb3V0KQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydpbnB1dC50eHQnLCAnb3V0cHV0LnR4dCddKQorICAgICBOYW1lc3BhY2UoaW5maWxlPTxvcGVuIGZpbGUgJ2lucHV0LnR4dCcsIG1vZGUgJ3InIGF0IDB4Li4uPiwKKyAgICAgICAgICAgICAgIG91dGZpbGU9PG9wZW4gZmlsZSAnb3V0cHV0LnR4dCcsIG1vZGUgJ3cnIGF0IDB4Li4uPikKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgICBOYW1lc3BhY2UoaW5maWxlPTxvcGVuIGZpbGUgJzxzdGRpbj4nLCBtb2RlICdyJyBhdCAweC4uLj4sCisgICAgICAgICAgICAgICBvdXRmaWxlPTxvcGVuIGZpbGUgJzxzdGRvdXQ+JywgbW9kZSAndycgYXQgMHguLi4+KQorCisqIGBgJyonYGAuICBBbGwgY29tbWFuZC1saW5lIGFyZ3MgcHJlc2VudCBhcmUgZ2F0aGVyZWQgaW50byBhIGxpc3QuICBOb3RlIHRoYXQKKyAgaXQgZ2VuZXJhbGx5IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50CisgIHdpdGggYGBuYXJncz0nKidgYCwgYnV0IG11bHRpcGxlIG9wdGlvbmFsIGFyZ3VtZW50cyB3aXRoIGBgbmFyZ3M9JyonYGAgaXMKKyAgcG9zc2libGUuICBGb3IgZXhhbXBsZTo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgbmFyZ3M9JyonKQorICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1iYXInLCBuYXJncz0nKicpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXonLCBuYXJncz0nKicpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnYSBiIC0tZm9vIHggeSAtLWJhciAxIDInLnNwbGl0KCkpCisgICAgIE5hbWVzcGFjZShiYXI9WycxJywgJzInXSwgYmF6PVsnYScsICdiJ10sIGZvbz1bJ3gnLCAneSddKQorCisqIGBgJysnYGAuIEp1c3QgbGlrZSBgYCcqJ2BgLCBhbGwgY29tbWFuZC1saW5lIGFyZ3MgcHJlc2VudCBhcmUgZ2F0aGVyZWQgaW50byBhCisgIGxpc3QuICBBZGRpdGlvbmFsbHksIGFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBnZW5lcmF0ZWQgaWYgdGhlcmUgd2Fzbid0IGF0CisgIGxlYXN0IG9uZSBjb21tYW5kLWxpbmUgYXJnIHByZXNlbnQuICBGb3IgZXhhbXBsZTo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJywgbmFyZ3M9JysnKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJ2EgYicuc3BsaXQoKSkKKyAgICAgTmFtZXNwYWNlKGZvbz1bJ2EnLCAnYiddKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJycuc3BsaXQoKSkKKyAgICAgdXNhZ2U6IFBST0cgWy1oXSBmb28gW2ZvbyAuLi5dCisgICAgIFBST0c6IGVycm9yOiB0b28gZmV3IGFyZ3VtZW50cworCitJZiB0aGUgYGBuYXJnc2BgIGtleXdvcmQgYXJndW1lbnQgaXMgbm90IHByb3ZpZGVkLCB0aGUgbnVtYmVyIG9mIGFyZ3MgY29uc3VtZWQKK2lzIGRldGVybWluZWQgYnkgdGhlIGFjdGlvbl8uICBHZW5lcmFsbHkgdGhpcyBtZWFucyBhIHNpbmdsZSBjb21tYW5kLWxpbmUgYXJnCit3aWxsIGJlIGNvbnN1bWVkIGFuZCBhIHNpbmdsZSBpdGVtIChub3QgYSBsaXN0KSB3aWxsIGJlIHByb2R1Y2VkLgorCisKK2NvbnN0CiteXl5eXgorCitUaGUgYGBjb25zdGBgIGFyZ3VtZW50IG9mIDptZXRoOmBhZGRfYXJndW1lbnRgIGlzIHVzZWQgdG8gaG9sZCBjb25zdGFudCB2YWx1ZXMKK3RoYXQgYXJlIG5vdCByZWFkIGZyb20gdGhlIGNvbW1hbmQgbGluZSBidXQgYXJlIHJlcXVpcmVkIGZvciB0aGUgdmFyaW91cworQXJndW1lbnRQYXJzZXIgYWN0aW9ucy4gIFRoZSB0d28gbW9zdCBjb21tb24gdXNlcyBvZiBpdCBhcmU6CisKKyogV2hlbiA6bWV0aDpgYWRkX2FyZ3VtZW50YCBpcyBjYWxsZWQgd2l0aCBgYGFjdGlvbj0nc3RvcmVfY29uc3QnYGAgb3IKKyAgYGBhY3Rpb249J2FwcGVuZF9jb25zdCdgYC4gIFRoZXNlIGFjdGlvbnMgYWRkIHRoZSBgYGNvbnN0YGAgdmFsdWUgdG8gb25lIG9mCisgIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgOm1ldGg6YHBhcnNlX2FyZ3NgLiAgU2VlIHRoZSBhY3Rpb25fCisgIGRlc2NyaXB0aW9uIGZvciBleGFtcGxlcy4KKworKiBXaGVuIDptZXRoOmBhZGRfYXJndW1lbnRgIGlzIGNhbGxlZCB3aXRoIG9wdGlvbiBzdHJpbmdzIChsaWtlIGBgLWZgYCBvcgorICBgYC0tZm9vYGApIGFuZCBgYG5hcmdzPSc/J2BgLiAgVGhpcyBjcmVhdGVzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgY2FuIGJlCisgIGZvbGxvd2VkIGJ5IHplcm8gb3Igb25lIGNvbW1hbmQtbGluZSBhcmdzLiAgV2hlbiBwYXJzaW5nIHRoZSBjb21tYW5kLWxpbmUsIGlmCisgIHRoZSBvcHRpb24gc3RyaW5nIGlzIGVuY291bnRlcmVkIHdpdGggbm8gY29tbWFuZC1saW5lIGFyZyBmb2xsb3dpbmcgaXQsIHRoZQorICB2YWx1ZSBvZiBgYGNvbnN0YGAgd2lsbCBiZSBhc3N1bWVkIGluc3RlYWQuIFNlZSB0aGUgbmFyZ3NfIGRlc2NyaXB0aW9uIGZvcgorICBleGFtcGxlcy4KKworVGhlIGBgY29uc3RgYCBrZXl3b3JkIGFyZ3VtZW50IGRlZmF1bHRzIHRvIGBgTm9uZWBgLgorCisKK2RlZmF1bHQKK15eXl5eXl4KKworQWxsIG9wdGlvbmFsIGFyZ3VtZW50cyBhbmQgc29tZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBtYXkgYmUgb21pdHRlZCBhdCB0aGUKK2NvbW1hbmQtbGluZS4gIFRoZSBgYGRlZmF1bHRgYCBrZXl3b3JkIGFyZ3VtZW50IG9mIDptZXRoOmBhZGRfYXJndW1lbnRgLCB3aG9zZQordmFsdWUgZGVmYXVsdHMgdG8gYGBOb25lYGAsIHNwZWNpZmllcyB3aGF0IHZhbHVlIHNob3VsZCBiZSB1c2VkIGlmIHRoZQorY29tbWFuZC1saW5lIGFyZyBpcyBub3QgcHJlc2VudC4gIEZvciBvcHRpb25hbCBhcmd1bWVudHMsIHRoZSBgYGRlZmF1bHRgYCB2YWx1ZQoraXMgdXNlZCB3aGVuIHRoZSBvcHRpb24gc3RyaW5nIHdhcyBub3QgcHJlc2VudCBhdCB0aGUgY29tbWFuZCBsaW5lOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGRlZmF1bHQ9NDIpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vIDInLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPScyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvbz00MikKKworRm9yIHBvc2l0aW9uYWwgYXJndW1lbnRzIHdpdGggbmFyZ3NfIGBgPSc/J2BgIG9yIGBgJyonYGAsIHRoZSBgYGRlZmF1bHRgYCB2YWx1ZQoraXMgdXNlZCB3aGVuIG5vIGNvbW1hbmQtbGluZSBhcmcgd2FzIHByZXNlbnQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIG5hcmdzPSc/JywgZGVmYXVsdD00MikKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnYScuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289J2EnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPTQyKQorCisKK1Byb3ZpZGluZyBgYGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1NgYCBjYXVzZXMgbm8gYXR0cmlidXRlIHRvIGJlIGFkZGVkIGlmIHRoZQorY29tbWFuZC1saW5lIGFyZ3VtZW50IHdhcyBub3QgcHJlc2VudC46OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgIE5hbWVzcGFjZSgpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbycsICcxJ10pCisgICBOYW1lc3BhY2UoZm9vPScxJykKKworCit0eXBlCiteXl5eCisKK0J5IGRlZmF1bHQsIEFyZ3VtZW50UGFyc2VyIG9iamVjdHMgcmVhZCBjb21tYW5kLWxpbmUgYXJncyBpbiBhcyBzaW1wbGUgc3RyaW5ncy4KK0hvd2V2ZXIsIHF1aXRlIG9mdGVuIHRoZSBjb21tYW5kLWxpbmUgc3RyaW5nIHNob3VsZCBpbnN0ZWFkIGJlIGludGVycHJldGVkIGFzCithbm90aGVyIHR5cGUsIGxpa2UgYSA6Y2xhc3M6YGZsb2F0YCwgOmNsYXNzOmBpbnRgIG9yIDpjbGFzczpgZmlsZWAuICBUaGUKK2BgdHlwZWBgIGtleXdvcmQgYXJndW1lbnQgb2YgOm1ldGg6YGFkZF9hcmd1bWVudGAgYWxsb3dzIGFueSBuZWNlc3NhcnkKK3R5cGUtY2hlY2tpbmcgYW5kIHR5cGUtY29udmVyc2lvbnMgdG8gYmUgcGVyZm9ybWVkLiAgTWFueSBjb21tb24gYnVpbHQtaW4gdHlwZXMKK2NhbiBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSB2YWx1ZSBvZiB0aGUgYGB0eXBlYGAgYXJndW1lbnQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIHR5cGU9aW50KQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIHR5cGU9ZmlsZSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnMiB0ZW1wLnR4dCcuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShiYXI9PG9wZW4gZmlsZSAndGVtcC50eHQnLCBtb2RlICdyJyBhdCAweC4uLj4sIGZvbz0yKQorCitUbyBlYXNlIHRoZSB1c2Ugb2YgdmFyaW91cyB0eXBlcyBvZiBmaWxlcywgdGhlIGFyZ3BhcnNlIG1vZHVsZSBwcm92aWRlcyB0aGUKK2ZhY3RvcnkgRmlsZVR5cGUgd2hpY2ggdGFrZXMgdGhlIGBgbW9kZT1gYCBhbmQgYGBidWZzaXplPWBgIGFyZ3VtZW50cyBvZiB0aGUKK2BgZmlsZWBgIG9iamVjdC4gIEZvciBleGFtcGxlLCBgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYQord3JpdGFibGUgZmlsZTo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycpKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnb3V0LnR4dCddKQorICAgTmFtZXNwYWNlKGJhcj08b3BlbiBmaWxlICdvdXQudHh0JywgbW9kZSAndycgYXQgMHguLi4+KQorCitgYHR5cGU9YGAgY2FuIHRha2UgYW55IGNhbGxhYmxlIHRoYXQgdGFrZXMgYSBzaW5nbGUgc3RyaW5nIGFyZ3VtZW50IGFuZCByZXR1cm5zCit0aGUgdHlwZS1jb252ZXJ0ZWQgdmFsdWU6OgorCisgICA+Pj4gZGVmIHBlcmZlY3Rfc3F1YXJlKHN0cmluZyk6CisgICAuLi4gICAgIHZhbHVlID0gaW50KHN0cmluZykKKyAgIC4uLiAgICAgc3FydCA9IG1hdGguc3FydCh2YWx1ZSkKKyAgIC4uLiAgICAgaWYgc3FydCAhPSBpbnQoc3FydCk6CisgICAuLi4gICAgICAgICBtc2cgPSAiJXIgaXMgbm90IGEgcGVyZmVjdCBzcXVhcmUiICUgc3RyaW5nCisgICAuLi4gICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcihtc2cpCisgICAuLi4gICAgIHJldHVybiB2YWx1ZQorICAgLi4uCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJywgdHlwZT1wZXJmZWN0X3NxdWFyZSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnOScuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289OSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnNycuc3BsaXQoKSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gZm9vCisgICBQUk9HOiBlcnJvcjogYXJndW1lbnQgZm9vOiAnNycgaXMgbm90IGEgcGVyZmVjdCBzcXVhcmUKKworVGhlIGNob2ljZXNfIGtleXdvcmQgYXJndW1lbnQgbWF5IGJlIG1vcmUgY29udmVuaWVudCBmb3IgdHlwZSBjaGVja2VycyB0aGF0CitzaW1wbHkgY2hlY2sgYWdhaW5zdCBhIHJhbmdlIG9mIHZhbHVlczo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nLCB0eXBlPWludCwgY2hvaWNlcz14cmFuZ2UoNSwgMTApKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCc3Jy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvbz03KQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcxMScuc3BsaXQoKSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gezUsNiw3LDgsOX0KKyAgIFBST0c6IGVycm9yOiBhcmd1bWVudCBmb286IGludmFsaWQgY2hvaWNlOiAxMSAoY2hvb3NlIGZyb20gNSwgNiwgNywgOCwgOSkKKworU2VlIHRoZSBjaG9pY2VzXyBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKworY2hvaWNlcworXl5eXl5eXgorCitTb21lIGNvbW1hbmQtbGluZSBhcmdzIHNob3VsZCBiZSBzZWxlY3RlZCBmcm9tIGEgcmVzdHJpY3RlZCBzZXQgb2YgdmFsdWVzLgorVGhlc2UgY2FuIGJlIGhhbmRsZWQgYnkgcGFzc2luZyBhIGNvbnRhaW5lciBvYmplY3QgYXMgdGhlIGBgY2hvaWNlc2BgIGtleXdvcmQKK2FyZ3VtZW50IHRvIDptZXRoOmBhZGRfYXJndW1lbnRgLiAgV2hlbiB0aGUgY29tbWFuZC1saW5lIGlzIHBhcnNlZCwgYXJnIHZhbHVlcword2lsbCBiZSBjaGVja2VkLCBhbmQgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZCBpZiB0aGUgYXJnIHdhcyBub3Qgb25lCitvZiB0aGUgYWNjZXB0YWJsZSB2YWx1ZXM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJywgY2hvaWNlcz0nYWJjJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnYycuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289J2MnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdYJy5zcGxpdCgpKQorICAgdXNhZ2U6IFBST0cgWy1oXSB7YSxiLGN9CisgICBQUk9HOiBlcnJvcjogYXJndW1lbnQgZm9vOiBpbnZhbGlkIGNob2ljZTogJ1gnIChjaG9vc2UgZnJvbSAnYScsICdiJywgJ2MnKQorCitOb3RlIHRoYXQgaW5jbHVzaW9uIGluIHRoZSBgYGNob2ljZXNgYCBjb250YWluZXIgaXMgY2hlY2tlZCBhZnRlciBhbnkgdHlwZV8KK2NvbnZlcnNpb25zIGhhdmUgYmVlbiBwZXJmb3JtZWQsIHNvIHRoZSB0eXBlIG9mIHRoZSBvYmplY3RzIGluIHRoZSBgYGNob2ljZXNgYAorY29udGFpbmVyIHNob3VsZCBtYXRjaCB0aGUgdHlwZV8gc3BlY2lmaWVkOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIHR5cGU9Y29tcGxleCwgY2hvaWNlcz1bMSwgMWpdKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcxaicuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289MWopCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tIC00Jy5zcGxpdCgpKQorICAgdXNhZ2U6IFBST0cgWy1oXSB7MSwxan0KKyAgIFBST0c6IGVycm9yOiBhcmd1bWVudCBmb286IGludmFsaWQgY2hvaWNlOiAoLTQrMGopIChjaG9vc2UgZnJvbSAxLCAxaikKKworQW55IG9iamVjdCB0aGF0IHN1cHBvcnRzIHRoZSBgYGluYGAgb3BlcmF0b3IgY2FuIGJlIHBhc3NlZCBhcyB0aGUgYGBjaG9pY2VzYGAKK3ZhbHVlLCBzbyA6Y2xhc3M6YGRpY3RgIG9iamVjdHMsIDpjbGFzczpgc2V0YCBvYmplY3RzLCBjdXN0b20gY29udGFpbmVycywKK2V0Yy4gYXJlIGFsbCBzdXBwb3J0ZWQuCisKKworcmVxdWlyZWQKK15eXl5eXl5eCisKK0luIGdlbmVyYWwsIHRoZSBhcmdwYXJzZSBtb2R1bGUgYXNzdW1lcyB0aGF0IGZsYWdzIGxpa2UgYGAtZmBgIGFuZCBgYC0tYmFyYGAKK2luZGljYXRlICpvcHRpb25hbCogYXJndW1lbnRzLCB3aGljaCBjYW4gYWx3YXlzIGJlIG9taXR0ZWQgYXQgdGhlIGNvbW1hbmQtbGluZS4KK1RvIG1ha2UgYW4gb3B0aW9uICpyZXF1aXJlZCosIGBgVHJ1ZWBgIGNhbiBiZSBzcGVjaWZpZWQgZm9yIHRoZSBgYHJlcXVpcmVkPWBgCitrZXl3b3JkIGFyZ3VtZW50IHRvIDptZXRoOmBhZGRfYXJndW1lbnRgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIHJlcXVpcmVkPVRydWUpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbycsICdCQVInXSkKKyAgIE5hbWVzcGFjZShmb289J0JBUicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICB1c2FnZTogYXJncGFyc2UucHkgWy1oXSBbLS1mb28gRk9PXQorICAgYXJncGFyc2UucHk6IGVycm9yOiBvcHRpb24gLS1mb28gaXMgcmVxdWlyZWQKKworQXMgdGhlIGV4YW1wbGUgc2hvd3MsIGlmIGFuIG9wdGlvbiBpcyBtYXJrZWQgYXMgYGByZXF1aXJlZGBgLCA6bWV0aDpgcGFyc2VfYXJnc2AKK3dpbGwgcmVwb3J0IGFuIGVycm9yIGlmIHRoYXQgb3B0aW9uIGlzIG5vdCBwcmVzZW50IGF0IHRoZSBjb21tYW5kIGxpbmUuCisKKy4uIG5vdGU6OgorCisgICAgUmVxdWlyZWQgb3B0aW9ucyBhcmUgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgYmFkIGZvcm0gYmVjYXVzZSB1c2VycyBleHBlY3QKKyAgICAqb3B0aW9ucyogdG8gYmUgKm9wdGlvbmFsKiwgYW5kIHRodXMgdGhleSBzaG91bGQgYmUgYXZvaWRlZCB3aGVuIHBvc3NpYmxlLgorCisKK2hlbHAKK15eXl4KKworVGhlIGBgaGVscGBgIHZhbHVlIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnQuCitXaGVuIGEgdXNlciByZXF1ZXN0cyBoZWxwICh1c3VhbGx5IGJ5IHVzaW5nIGBgLWhgYCBvciBgYC0taGVscGBgIGF0IHRoZQorY29tbWFuZC1saW5lKSwgdGhlc2UgYGBoZWxwYGAgZGVzY3JpcHRpb25zIHdpbGwgYmUgZGlzcGxheWVkIHdpdGggZWFjaAorYXJndW1lbnQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nZnJvYmJsZScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgLi4uICAgICAgICAgaGVscD0nZm9vIHRoZSBiYXJzIGJlZm9yZSBmcm9iYmxpbmcnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIG5hcmdzPScrJywKKyAgIC4uLiAgICAgICAgIGhlbHA9J29uZSBvZiB0aGUgYmFycyB0byBiZSBmcm9iYmxlZCcpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy1oJy5zcGxpdCgpKQorICAgdXNhZ2U6IGZyb2JibGUgWy1oXSBbLS1mb29dIGJhciBbYmFyIC4uLl0KKworICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgYmFyICAgICBvbmUgb2YgdGhlIGJhcnMgdG8gYmUgZnJvYmJsZWQKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyAgIGZvbyB0aGUgYmFycyBiZWZvcmUgZnJvYmJsaW5nCisKK1RoZSBgYGhlbHBgYCBzdHJpbmdzIGNhbiBpbmNsdWRlIHZhcmlvdXMgZm9ybWF0IHNwZWNpZmllcnMgdG8gYXZvaWQgcmVwZXRpdGlvbgorb2YgdGhpbmdzIGxpa2UgdGhlIHByb2dyYW0gbmFtZSBvciB0aGUgYXJndW1lbnQgZGVmYXVsdF8uICBUaGUgYXZhaWxhYmxlCitzcGVjaWZpZXJzIGluY2x1ZGUgdGhlIHByb2dyYW0gbmFtZSwgYGAlKHByb2cpc2BgIGFuZCBtb3N0IGtleXdvcmQgYXJndW1lbnRzIHRvCis6bWV0aDpgYWRkX2FyZ3VtZW50YCwgZS5nLiBgYCUoZGVmYXVsdClzYGAsIGBgJSh0eXBlKXNgYCwgZXRjLjo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdmcm9iYmxlJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBuYXJncz0nPycsIHR5cGU9aW50LCBkZWZhdWx0PTQyLAorICAgLi4uICAgICAgICAgaGVscD0ndGhlIGJhciB0byAlKHByb2cpcyAoZGVmYXVsdDogJShkZWZhdWx0KXMpJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogZnJvYmJsZSBbLWhdIFtiYXJdCisKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgIGJhciAgICAgdGhlIGJhciB0byBmcm9iYmxlIChkZWZhdWx0OiA0MikKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworCittZXRhdmFyCiteXl5eXl5eCisKK1doZW4gOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgZ2VuZXJhdGVzIGhlbHAgbWVzc2FnZXMsIGl0IG5lZWQgc29tZSB3YXkgdG8gcmVmZXIKK3RvIGVhY2ggZXhwZWN0ZWQgYXJndW1lbnQuICBCeSBkZWZhdWx0LCBBcmd1bWVudFBhcnNlciBvYmplY3RzIHVzZSB0aGUgZGVzdF8KK3ZhbHVlIGFzIHRoZSAibmFtZSIgb2YgZWFjaCBvYmplY3QuICBCeSBkZWZhdWx0LCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudAorYWN0aW9ucywgdGhlIGRlc3RfIHZhbHVlIGlzIHVzZWQgZGlyZWN0bHksIGFuZCBmb3Igb3B0aW9uYWwgYXJndW1lbnQgYWN0aW9ucywKK3RoZSBkZXN0XyB2YWx1ZSBpcyB1cHBlcmNhc2VkLiAgU28sIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgd2l0aAorYGBkZXN0PSdiYXInYGAgd2lsbCB0aGF0IGFyZ3VtZW50IHdpbGwgYmUgcmVmZXJyZWQgdG8gYXMgYGBiYXJgYC4gQSBzaW5nbGUKK29wdGlvbmFsIGFyZ3VtZW50IGBgLS1mb29gYCB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIHNpbmdsZSBjb21tYW5kLWxpbmUgYXJnCit3aWxsIGJlIHJlZmVycmVkIHRvIGFzIGBgRk9PYGAuICBBbiBleGFtcGxlOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWCAtLWZvbyBZJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGJhcj0nWCcsIGZvbz0nWScpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6ICBbLWhdIFstLWZvbyBGT09dIGJhcgorCisgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICBiYXIKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBGT08KKworQW4gYWx0ZXJuYXRpdmUgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIHdpdGggYGBtZXRhdmFyYGA6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgbWV0YXZhcj0nWVlZJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBtZXRhdmFyPSdYWFgnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdYIC0tZm9vIFknLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFyPSdYJywgZm9vPSdZJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogIFstaF0gWy0tZm9vIFlZWV0gWFhYCisKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgIFhYWAorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vIFlZWQorCitOb3RlIHRoYXQgYGBtZXRhdmFyYGAgb25seSBjaGFuZ2VzIHRoZSAqZGlzcGxheWVkKiBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlCithdHRyaWJ1dGUgb24gdGhlIDptZXRoOmBwYXJzZV9hcmdzYCBvYmplY3QgaXMgc3RpbGwgZGV0ZXJtaW5lZCBieSB0aGUgZGVzdF8KK3ZhbHVlLgorCitEaWZmZXJlbnQgdmFsdWVzIG9mIGBgbmFyZ3NgYCBtYXkgY2F1c2UgdGhlIG1ldGF2YXIgdG8gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy4KK1Byb3ZpZGluZyBhIHR1cGxlIHRvIGBgbWV0YXZhcmBgIHNwZWNpZmllcyBhIGRpZmZlcmVudCBkaXNwbGF5IGZvciBlYWNoIG9mIHRoZQorYXJndW1lbnRzOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgbmFyZ3M9MikKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIG5hcmdzPTIsIG1ldGF2YXI9KCdiYXInLCAnYmF6JykpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWCBYXSBbLS1mb28gYmFyIGJhel0KKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAteCBYIFgKKyAgICAtLWZvbyBiYXIgYmF6CisKKworZGVzdAorXl5eXgorCitNb3N0IDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGFjdGlvbnMgYWRkIHNvbWUgdmFsdWUgYXMgYW4gYXR0cmlidXRlIG9mIHRoZQorb2JqZWN0IHJldHVybmVkIGJ5IDptZXRoOmBwYXJzZV9hcmdzYC4gIFRoZSBuYW1lIG9mIHRoaXMgYXR0cmlidXRlIGlzIGRldGVybWluZWQKK2J5IHRoZSBgYGRlc3RgYCBrZXl3b3JkIGFyZ3VtZW50IG9mIDptZXRoOmBhZGRfYXJndW1lbnRgLiAgRm9yIHBvc2l0aW9uYWwKK2FyZ3VtZW50IGFjdGlvbnMsIGBgZGVzdGBgIGlzIG5vcm1hbGx5IHN1cHBsaWVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0bworOm1ldGg6YGFkZF9hcmd1bWVudGA6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJ1hYWCcuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShiYXI9J1hYWCcpCisKK0ZvciBvcHRpb25hbCBhcmd1bWVudCBhY3Rpb25zLCB0aGUgdmFsdWUgb2YgYGBkZXN0YGAgaXMgbm9ybWFsbHkgaW5mZXJyZWQgZnJvbQordGhlIG9wdGlvbiBzdHJpbmdzLiAgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgZ2VuZXJhdGVzIHRoZSB2YWx1ZSBvZiBgYGRlc3RgYCBieQordGFraW5nIHRoZSBmaXJzdCBsb25nIG9wdGlvbiBzdHJpbmcgYW5kIHN0cmlwcGluZyBhd2F5IHRoZSBpbml0aWFsIGBgJy0tJ2BgCitzdHJpbmcuICBJZiBubyBsb25nIG9wdGlvbiBzdHJpbmdzIHdlcmUgc3VwcGxpZWQsIGBgZGVzdGBgIHdpbGwgYmUgZGVyaXZlZCBmcm9tCit0aGUgZmlyc3Qgc2hvcnQgb3B0aW9uIHN0cmluZyBieSBzdHJpcHBpbmcgdGhlIGluaXRpYWwgYGAnLSdgYCBjaGFyYWN0ZXIuICBBbnkKK2ludGVybmFsIGBgJy0nYGAgY2hhcmFjdGVycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBgYCdfJ2BgIGNoYXJhY3RlcnMgdG8gbWFrZSBzdXJlCit0aGUgc3RyaW5nIGlzIGEgdmFsaWQgYXR0cmlidXRlIG5hbWUuICBUaGUgZXhhbXBsZXMgYmVsb3cgaWxsdXN0cmF0ZSB0aGlzCitiZWhhdmlvcjo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mb28tYmFyJywgJy0tZm9vJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsICcteScpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy1mIDEgLXggMicuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb29fYmFyPScxJywgeD0nMicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vIDEgLXkgMicuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb29fYmFyPScxJywgeD0nMicpCisKK2BgZGVzdGBgIGFsbG93cyBhIGN1c3RvbSBhdHRyaWJ1dGUgbmFtZSB0byBiZSBwcm92aWRlZDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBkZXN0PSdiYXInKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbyBYWFgnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFyPSdYWFgnKQorCisKK1RoZSBwYXJzZV9hcmdzKCkgbWV0aG9kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9Tm9uZSwgbmFtZXNwYWNlPU5vbmUpCisKKyAgIENvbnZlcnQgYXJndW1lbnQgc3RyaW5ncyB0byBvYmplY3RzIGFuZCBhc3NpZ24gdGhlbSBhcyBhdHRyaWJ1dGVzIG9mIHRoZQorICAgbmFtZXNwYWNlLiAgUmV0dXJuIHRoZSBwb3B1bGF0ZWQgbmFtZXNwYWNlLgorCisgICBQcmV2aW91cyBjYWxscyB0byA6bWV0aDpgYWRkX2FyZ3VtZW50YCBkZXRlcm1pbmUgZXhhY3RseSB3aGF0IG9iamVjdHMgYXJlCisgICBjcmVhdGVkIGFuZCBob3cgdGhleSBhcmUgYXNzaWduZWQuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKyAgIDptZXRoOmBhZGRfYXJndW1lbnRgIGZvciBkZXRhaWxzLgorCisgICBCeSBkZWZhdWx0LCB0aGUgYXJnIHN0cmluZ3MgYXJlIHRha2VuIGZyb20gOmRhdGE6YHN5cy5hcmd2YCwgYW5kIGEgbmV3IGVtcHR5CisgICA6Y2xhc3M6YE5hbWVzcGFjZWAgb2JqZWN0IGlzIGNyZWF0ZWQgZm9yIHRoZSBhdHRyaWJ1dGVzLgorCisKK09wdGlvbiB2YWx1ZSBzeW50YXgKK15eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIDptZXRoOmBwYXJzZV9hcmdzYCBtZXRob2Qgc3VwcG9ydHMgc2V2ZXJhbCB3YXlzIG9mIHNwZWNpZnlpbmcgdGhlIHZhbHVlIG9mCithbiBvcHRpb24gKGlmIGl0IHRha2VzIG9uZSkuICBJbiB0aGUgc2ltcGxlc3QgY2FzZSwgdGhlIG9wdGlvbiBhbmQgaXRzIHZhbHVlIGFyZQorcGFzc2VkIGFzIHR3byBzZXBhcmF0ZSBhcmd1bWVudHM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLXggWCcuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289Tm9uZSwgeD0nWCcpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vIEZPTycuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289J0ZPTycsIHg9Tm9uZSkKKworRm9yIGxvbmcgb3B0aW9ucyAob3B0aW9ucyB3aXRoIG5hbWVzIGxvbmdlciB0aGFuIGEgc2luZ2xlIGNoYXJhY3RlciksIHRoZSBvcHRpb24KK2FuZCB2YWx1ZSBjYW4gYWxzbyBiZSBwYXNzZWQgYXMgYSBzaW5nbGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50LCB1c2luZyBgYD1gYCB0bworc2VwYXJhdGUgdGhlbTo6CisKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb289Rk9PJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvbz0nRk9PJywgeD1Ob25lKQorCitGb3Igc2hvcnQgb3B0aW9ucyAob3B0aW9ucyBvbmx5IG9uZSBjaGFyYWN0ZXIgbG9uZyksIHRoZSBvcHRpb24gYW5kIGl0cyB2YWx1ZQorY2FuIGJlIGNvbmNhdGVuYXRlZDo6CisKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLXhYJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvbz1Ob25lLCB4PSdYJykKKworU2V2ZXJhbCBzaG9ydCBvcHRpb25zIGNhbiBiZSBqb2luZWQgdG9nZXRoZXIsIHVzaW5nIG9ubHkgYSBzaW5nbGUgYGAtYGAgcHJlZml4LAorYXMgbG9uZyBhcyBvbmx5IHRoZSBsYXN0IG9wdGlvbiAob3Igbm9uZSBvZiB0aGVtKSByZXF1aXJlcyBhIHZhbHVlOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLXonKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcteHl6Wicuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZSh4PVRydWUsIHk9VHJ1ZSwgej0nWicpCisKKworSW52YWxpZCBhcmd1bWVudHMKK15eXl5eXl5eXl5eXl5eXl5eCisKK1doaWxlIHBhcnNpbmcgdGhlIGNvbW1hbmQtbGluZSwgYGBwYXJzZV9hcmdzYGAgY2hlY2tzIGZvciBhIHZhcmlldHkgb2YgZXJyb3JzLAoraW5jbHVkaW5nIGFtYmlndW91cyBvcHRpb25zLCBpbnZhbGlkIHR5cGVzLCBpbnZhbGlkIG9wdGlvbnMsIHdyb25nIG51bWJlciBvZgorcG9zaXRpb25hbCBhcmd1bWVudHMsIGV0Yy4gIFdoZW4gaXQgZW5jb3VudGVycyBzdWNoIGFuIGVycm9yLCBpdCBleGl0cyBhbmQKK3ByaW50cyB0aGUgZXJyb3IgYWxvbmcgd2l0aCBhIHVzYWdlIG1lc3NhZ2U6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCB0eXBlPWludCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBuYXJncz0nPycpCisKKyAgID4+PiAjIGludmFsaWQgdHlwZQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1mb28nLCAnc3BhbSddKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBbYmFyXQorICAgUFJPRzogZXJyb3I6IGFyZ3VtZW50IC0tZm9vOiBpbnZhbGlkIGludCB2YWx1ZTogJ3NwYW0nCisKKyAgID4+PiAjIGludmFsaWQgb3B0aW9uCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWJhciddKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBbYmFyXQorICAgUFJPRzogZXJyb3I6IG5vIHN1Y2ggb3B0aW9uOiAtLWJhcgorCisgICA+Pj4gIyB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydzcGFtJywgJ2JhZGdlciddKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBbYmFyXQorICAgUFJPRzogZXJyb3I6IGV4dHJhIGFyZ3VtZW50cyBmb3VuZDogYmFkZ2VyCisKKworQXJndW1lbnRzIGNvbnRhaW5pbmcgYGAiLSJgYAorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgYGBwYXJzZV9hcmdzYGAgbWV0aG9kIGF0dGVtcHRzIHRvIGdpdmUgZXJyb3JzIHdoZW5ldmVyIHRoZSB1c2VyIGhhcyBjbGVhcmx5CittYWRlIGEgbWlzdGFrZSwgYnV0IHNvbWUgc2l0dWF0aW9ucyBhcmUgaW5oZXJlbnRseSBhbWJpZ3VvdXMuICBGb3IgZXhhbXBsZSwgdGhlCitjb21tYW5kLWxpbmUgYXJnIGBgJy0xJ2BgIGNvdWxkIGVpdGhlciBiZSBhbiBhdHRlbXB0IHRvIHNwZWNpZnkgYW4gb3B0aW9uIG9yIGFuCithdHRlbXB0IHRvIHByb3ZpZGUgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgVGhlIGBgcGFyc2VfYXJnc2BgIG1ldGhvZCBpcyBjYXV0aW91cworaGVyZTogcG9zaXRpb25hbCBhcmd1bWVudHMgbWF5IG9ubHkgYmVnaW4gd2l0aCBgYCctJ2BgIGlmIHRoZXkgbG9vayBsaWtlCituZWdhdGl2ZSBudW1iZXJzIGFuZCB0aGVyZSBhcmUgbm8gb3B0aW9ucyBpbiB0aGUgcGFyc2VyIHRoYXQgbG9vayBsaWtlIG5lZ2F0aXZlCitudW1iZXJzOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy14JykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nLCBuYXJncz0nPycpCisKKyAgID4+PiAjIG5vIG5lZ2F0aXZlIG51bWJlciBvcHRpb25zLCBzbyAtMSBpcyBhIHBvc2l0aW9uYWwgYXJndW1lbnQKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy14JywgJy0xJ10pCisgICBOYW1lc3BhY2UoZm9vPU5vbmUsIHg9Jy0xJykKKworICAgPj4+ICMgbm8gbmVnYXRpdmUgbnVtYmVyIG9wdGlvbnMsIHNvIC0xIGFuZCAtNSBhcmUgcG9zaXRpb25hbCBhcmd1bWVudHMKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy14JywgJy0xJywgJy01J10pCisgICBOYW1lc3BhY2UoZm9vPSctNScsIHg9Jy0xJykKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0xJywgZGVzdD0nb25lJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nLCBuYXJncz0nPycpCisKKyAgID4+PiAjIG5lZ2F0aXZlIG51bWJlciBvcHRpb25zIHByZXNlbnQsIHNvIC0xIGlzIGFuIG9wdGlvbgorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLTEnLCAnWCddKQorICAgTmFtZXNwYWNlKGZvbz1Ob25lLCBvbmU9J1gnKQorCisgICA+Pj4gIyBuZWdhdGl2ZSBudW1iZXIgb3B0aW9ucyBwcmVzZW50LCBzbyAtMiBpcyBhbiBvcHRpb24KKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0yJ10pCisgICB1c2FnZTogUFJPRyBbLWhdIFstMSBPTkVdIFtmb29dCisgICBQUk9HOiBlcnJvcjogbm8gc3VjaCBvcHRpb246IC0yCisKKyAgID4+PiAjIG5lZ2F0aXZlIG51bWJlciBvcHRpb25zIHByZXNlbnQsIHNvIGJvdGggLTFzIGFyZSBvcHRpb25zCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctMScsICctMSddKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLTEgT05FXSBbZm9vXQorICAgUFJPRzogZXJyb3I6IGFyZ3VtZW50IC0xOiBleHBlY3RlZCBvbmUgYXJndW1lbnQKKworSWYgeW91IGhhdmUgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhdCBtdXN0IGJlZ2luIHdpdGggYGAnLSdgYCBhbmQgZG9uJ3QgbG9vaworbGlrZSBuZWdhdGl2ZSBudW1iZXJzLCB5b3UgY2FuIGluc2VydCB0aGUgcHNldWRvLWFyZ3VtZW50IGBgJy0tJ2BgIHdoaWNoIHRlbGxzCitgYHBhcnNlX2FyZ3NgYCB0aGF0IGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhhdCBpcyBhIHBvc2l0aW9uYWwgYXJndW1lbnQ6OgorCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLScsICctZiddKQorICAgTmFtZXNwYWNlKGZvbz0nLWYnLCBvbmU9Tm9uZSkKKworCitBcmd1bWVudCBhYmJyZXZpYXRpb25zCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSA6bWV0aDpgcGFyc2VfYXJnc2AgbWV0aG9kIGFsbG93cyBsb25nIG9wdGlvbnMgdG8gYmUgYWJicmV2aWF0ZWQgaWYgdGhlCithYmJyZXZpYXRpb24gaXMgdW5hbWJpZ3VvdXM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWJhY29uJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYmFkZ2VyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLWJhYyBNTU0nLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFjb249J01NTScsIGJhZGdlcj1Ob25lKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctYmFkIFdPT0QnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFjb249Tm9uZSwgYmFkZ2VyPSdXT09EJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLWJhIEJBJy5zcGxpdCgpKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLWJhY29uIEJBQ09OXSBbLWJhZGdlciBCQURHRVJdCisgICBQUk9HOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogLWJhIGNvdWxkIG1hdGNoIC1iYWRnZXIsIC1iYWNvbgorCitBbiBlcnJvciBpcyBwcm9kdWNlZCBmb3IgYXJndW1lbnRzIHRoYXQgY291bGQgcHJvZHVjZSBtb3JlIHRoYW4gb25lIG9wdGlvbnMuCisKKworQmV5b25kIGBgc3lzLmFyZ3ZgYAorXl5eXl5eXl5eXl5eXl5eXl5eXgorCitTb21ldGltZXMgaXQgbWF5IGJlIHVzZWZ1bCB0byBoYXZlIGFuIEFyZ3VtZW50UGFyc2VyIHBhcnNlIGFyZ3Mgb3RoZXIgdGhhbiB0aG9zZQorb2YgOmRhdGE6YHN5cy5hcmd2YC4gIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBwYXNzaW5nIGEgbGlzdCBvZiBzdHJpbmdzIHRvCitgYHBhcnNlX2FyZ3NgYC4gIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIGF0IHRoZSBpbnRlcmFjdGl2ZSBwcm9tcHQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAuLi4gICAgICdpbnRlZ2VycycsIG1ldGF2YXI9J2ludCcsIHR5cGU9aW50LCBjaG9pY2VzPXhyYW5nZSgxMCksCisgICAuLi4gIG5hcmdzPScrJywgaGVscD0nYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC4uOScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgIC4uLiAgICAgJy0tc3VtJywgZGVzdD0nYWNjdW11bGF0ZScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD1zdW0sCisgICAuLi4gICBkZWZhdWx0PW1heCwgaGVscD0nc3VtIHRoZSBpbnRlZ2VycyAoZGVmYXVsdDogZmluZCB0aGUgbWF4KScpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWycxJywgJzInLCAnMycsICc0J10pCisgICBOYW1lc3BhY2UoYWNjdW11bGF0ZT08YnVpbHQtaW4gZnVuY3Rpb24gbWF4PiwgaW50ZWdlcnM9WzEsIDIsIDMsIDRdKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcxIDIgMyA0IC0tc3VtJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGFjY3VtdWxhdGU9PGJ1aWx0LWluIGZ1bmN0aW9uIHN1bT4sIGludGVnZXJzPVsxLCAyLCAzLCA0XSkKKworCitDdXN0b20gbmFtZXNwYWNlcworXl5eXl5eXl5eXl5eXl5eXl4KKworSXQgbWF5IGFsc28gYmUgdXNlZnVsIHRvIGhhdmUgYW4gOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgYXNzaWduIGF0dHJpYnV0ZXMgdG8gYW4KK2FscmVhZHkgZXhpc3Rpbmcgb2JqZWN0LCByYXRoZXIgdGhhbiB0aGUgbmV3bHktY3JlYXRlZCA6Y2xhc3M6YE5hbWVzcGFjZWAgb2JqZWN0Cit0aGF0IGlzIG5vcm1hbGx5IHVzZWQuICBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSBzcGVjaWZ5aW5nIHRoZSBgYG5hbWVzcGFjZT1gYAora2V5d29yZCBhcmd1bWVudDo6CisKKyAgID4+PiBjbGFzcyBDKG9iamVjdCk6CisgICAuLi4gICAgIHBhc3MKKyAgIC4uLgorICAgPj4+IGMgPSBDKCkKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9WyctLWZvbycsICdCQVInXSwgbmFtZXNwYWNlPWMpCisgICA+Pj4gYy5mb28KKyAgICdCQVInCisKKworT3RoZXIgdXRpbGl0aWVzCistLS0tLS0tLS0tLS0tLS0KKworU3ViLWNvbW1hbmRzCiteXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIuYWRkX3N1YnBhcnNlcnMoKQorCisgICBNYW55IHByb2dyYW1zIHNwbGl0IHVwIHRoZWlyIGZ1bmN0aW9uYWxpdHkgaW50byBhIG51bWJlciBvZiBzdWItY29tbWFuZHMsCisgICBmb3IgZXhhbXBsZSwgdGhlIGBgc3ZuYGAgcHJvZ3JhbSBjYW4gaW52b2tlIHN1Yi1jb21tYW5kcyBsaWtlIGBgc3ZuCisgICBjaGVja291dGBgLCBgYHN2biB1cGRhdGVgYCwgYW5kIGBgc3ZuIGNvbW1pdGBgLiAgU3BsaXR0aW5nIHVwIGZ1bmN0aW9uYWxpdHkKKyAgIHRoaXMgd2F5IGNhbiBiZSBhIHBhcnRpY3VsYXJseSBnb29kIGlkZWEgd2hlbiBhIHByb2dyYW0gcGVyZm9ybXMgc2V2ZXJhbAorICAgZGlmZmVyZW50IGZ1bmN0aW9ucyB3aGljaCByZXF1aXJlIGRpZmZlcmVudCBraW5kcyBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzLgorICAgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgc3VwcG9ydHMgdGhlIGNyZWF0aW9uIG9mIHN1Y2ggc3ViLWNvbW1hbmRzIHdpdGggdGhlCisgICA6bWV0aDpgYWRkX3N1YnBhcnNlcnNgIG1ldGhvZC4gIFRoZSA6bWV0aDpgYWRkX3N1YnBhcnNlcnNgIG1ldGhvZCBpcyBub3JtYWxseQorICAgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzIGFuZCByZXR1cm5zIGFuIHNwZWNpYWwgYWN0aW9uIG9iamVjdC4gIFRoaXMgb2JqZWN0CisgICBoYXMgYSBzaW5nbGUgbWV0aG9kLCBgYGFkZF9wYXJzZXJgYCwgd2hpY2ggdGFrZXMgYSBjb21tYW5kIG5hbWUgYW5kIGFueQorICAgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgY29uc3RydWN0b3IgYXJndW1lbnRzLCBhbmQgcmV0dXJucyBhbgorICAgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0IHRoYXQgY2FuIGJlIG1vZGlmaWVkIGFzIHVzdWFsLgorCisgICBTb21lIGV4YW1wbGUgdXNhZ2U6OgorCisgICAgID4+PiAjIGNyZWF0ZSB0aGUgdG9wLWxldmVsIHBhcnNlcgorICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJykKKyAgICAgPj4+IHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoaGVscD0nc3ViLWNvbW1hbmQgaGVscCcpCisgICAgID4+PgorICAgICA+Pj4gIyBjcmVhdGUgdGhlIHBhcnNlciBmb3IgdGhlICJhIiBjb21tYW5kCisgICAgID4+PiBwYXJzZXJfYSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYScsIGhlbHA9J2EgaGVscCcpCisgICAgID4+PiBwYXJzZXJfYS5hZGRfYXJndW1lbnQoJ2JhcicsIHR5cGU9aW50LCBoZWxwPSdiYXIgaGVscCcpCisgICAgID4+PgorICAgICA+Pj4gIyBjcmVhdGUgdGhlIHBhcnNlciBmb3IgdGhlICJiIiBjb21tYW5kCisgICAgID4+PiBwYXJzZXJfYiA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYicsIGhlbHA9J2IgaGVscCcpCisgICAgID4+PiBwYXJzZXJfYi5hZGRfYXJndW1lbnQoJy0tYmF6JywgY2hvaWNlcz0nWFlaJywgaGVscD0nYmF6IGhlbHAnKQorICAgICA+Pj4KKyAgICAgPj4+ICMgcGFyc2Ugc29tZSBhcmcgbGlzdHMKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnYScsICcxMiddKQorICAgICBOYW1lc3BhY2UoYmFyPTEyLCBmb289RmFsc2UpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tZm9vJywgJ2InLCAnLS1iYXonLCAnWiddKQorICAgICBOYW1lc3BhY2UoYmF6PSdaJywgZm9vPVRydWUpCisKKyAgIE5vdGUgdGhhdCB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IDptZXRoOmBwYXJzZV9hcmdzYCB3aWxsIG9ubHkgY29udGFpbgorICAgYXR0cmlidXRlcyBmb3IgdGhlIG1haW4gcGFyc2VyIGFuZCB0aGUgc3VicGFyc2VyIHRoYXQgd2FzIHNlbGVjdGVkIGJ5IHRoZQorICAgY29tbWFuZCBsaW5lIChhbmQgbm90IGFueSBvdGhlciBzdWJwYXJzZXJzKS4gIFNvIGluIHRoZSBleGFtcGxlIGFib3ZlLCB3aGVuCisgICB0aGUgYGAiYSJgYCBjb21tYW5kIGlzIHNwZWNpZmllZCwgb25seSB0aGUgYGBmb29gYCBhbmQgYGBiYXJgYCBhdHRyaWJ1dGVzIGFyZQorICAgcHJlc2VudCwgYW5kIHdoZW4gdGhlIGBgImIiYGAgY29tbWFuZCBpcyBzcGVjaWZpZWQsIG9ubHkgdGhlIGBgZm9vYGAgYW5kCisgICBgYGJhemBgIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQuCisKKyAgIFNpbWlsYXJseSwgd2hlbiBhIGhlbHAgbWVzc2FnZSBpcyByZXF1ZXN0ZWQgZnJvbSBhIHN1YnBhcnNlciwgb25seSB0aGUgaGVscAorICAgZm9yIHRoYXQgcGFydGljdWxhciBwYXJzZXIgd2lsbCBiZSBwcmludGVkLiAgVGhlIGhlbHAgbWVzc2FnZSB3aWxsIG5vdAorICAgaW5jbHVkZSBwYXJlbnQgcGFyc2VyIG9yIHNpYmxpbmcgcGFyc2VyIG1lc3NhZ2VzLiAgKEEgaGVscCBtZXNzYWdlIGZvciBlYWNoCisgICBzdWJwYXJzZXIgY29tbWFuZCwgaG93ZXZlciwgY2FuIGJlIGdpdmVuIGJ5IHN1cHBseWluZyB0aGUgYGBoZWxwPWBgIGFyZ3VtZW50CisgICB0byBgYGFkZF9wYXJzZXJgYCBhcyBhYm92ZS4pCisKKyAgIDo6CisKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1oZWxwJ10pCisgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSB7YSxifSAuLi4KKworICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICB7YSxifSAgIHN1Yi1jb21tYW5kIGhlbHAKKyAgICAgYSAgICAgYSBoZWxwCisgICAgIGIgICAgIGIgaGVscAorCisgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgLS1mb28gICBmb28gaGVscAorCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJ2EnLCAnLS1oZWxwJ10pCisgICAgIHVzYWdlOiBQUk9HIGEgWy1oXSBiYXIKKworICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICBiYXIgICAgIGJhciBoZWxwCisKKyAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydiJywgJy0taGVscCddKQorICAgICB1c2FnZTogUFJPRyBiIFstaF0gWy0tYmF6IHtYLFksWn1dCisKKyAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAtLWJheiB7WCxZLFp9ICBiYXogaGVscAorCisgICBUaGUgOm1ldGg6YGFkZF9zdWJwYXJzZXJzYCBtZXRob2QgYWxzbyBzdXBwb3J0cyBgYHRpdGxlYGAgYW5kIGBgZGVzY3JpcHRpb25gYAorICAga2V5d29yZCBhcmd1bWVudHMuICBXaGVuIGVpdGhlciBpcyBwcmVzZW50LCB0aGUgc3VicGFyc2VyJ3MgY29tbWFuZHMgd2lsbAorICAgYXBwZWFyIGluIHRoZWlyIG93biBncm91cCBpbiB0aGUgaGVscCBvdXRwdXQuICBGb3IgZXhhbXBsZTo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgPj4+IHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnModGl0bGU9J3N1YmNvbW1hbmRzJywKKyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J3ZhbGlkIHN1YmNvbW1hbmRzJywKKyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nYWRkaXRpb25hbCBoZWxwJykKKyAgICAgPj4+IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZm9vJykKKyAgICAgPj4+IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYmFyJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLWgnXSkKKyAgICAgdXNhZ2U6ICBbLWhdIHtmb28sYmFyfSAuLi4KKworICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorCisgICAgIHN1YmNvbW1hbmRzOgorICAgICAgIHZhbGlkIHN1YmNvbW1hbmRzCisKKyAgICAgICB7Zm9vLGJhcn0gICBhZGRpdGlvbmFsIGhlbHAKKworCisgICBPbmUgcGFydGljdWxhcmx5IGVmZmVjdGl2ZSB3YXkgb2YgaGFuZGxpbmcgc3ViLWNvbW1hbmRzIGlzIHRvIGNvbWJpbmUgdGhlIHVzZQorICAgb2YgdGhlIDptZXRoOmBhZGRfc3VicGFyc2Vyc2AgbWV0aG9kIHdpdGggY2FsbHMgdG8gOm1ldGg6YHNldF9kZWZhdWx0c2Agc28KKyAgIHRoYXQgZWFjaCBzdWJwYXJzZXIga25vd3Mgd2hpY2ggUHl0aG9uIGZ1bmN0aW9uIGl0IHNob3VsZCBleGVjdXRlLiAgRm9yCisgICBleGFtcGxlOjoKKworICAgICA+Pj4gIyBzdWItY29tbWFuZCBmdW5jdGlvbnMKKyAgICAgPj4+IGRlZiBmb28oYXJncyk6CisgICAgIC4uLiAgICAgcHJpbnQgYXJncy54ICogYXJncy55CisgICAgIC4uLgorICAgICA+Pj4gZGVmIGJhcihhcmdzKToKKyAgICAgLi4uICAgICBwcmludCAnKCglcykpJyAlIGFyZ3MuegorICAgICAuLi4KKyAgICAgPj4+ICMgY3JlYXRlIHRoZSB0b3AtbGV2ZWwgcGFyc2VyCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKyAgICAgPj4+CisgICAgID4+PiAjIGNyZWF0ZSB0aGUgcGFyc2VyIGZvciB0aGUgImZvbyIgY29tbWFuZAorICAgICA+Pj4gcGFyc2VyX2ZvbyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZm9vJykKKyAgICAgPj4+IHBhcnNlcl9mb28uYWRkX2FyZ3VtZW50KCcteCcsIHR5cGU9aW50LCBkZWZhdWx0PTEpCisgICAgID4+PiBwYXJzZXJfZm9vLmFkZF9hcmd1bWVudCgneScsIHR5cGU9ZmxvYXQpCisgICAgID4+PiBwYXJzZXJfZm9vLnNldF9kZWZhdWx0cyhmdW5jPWZvbykKKyAgICAgPj4+CisgICAgID4+PiAjIGNyZWF0ZSB0aGUgcGFyc2VyIGZvciB0aGUgImJhciIgY29tbWFuZAorICAgICA+Pj4gcGFyc2VyX2JhciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYmFyJykKKyAgICAgPj4+IHBhcnNlcl9iYXIuYWRkX2FyZ3VtZW50KCd6JykKKyAgICAgPj4+IHBhcnNlcl9iYXIuc2V0X2RlZmF1bHRzKGZ1bmM9YmFyKQorICAgICA+Pj4KKyAgICAgPj4+ICMgcGFyc2UgdGhlIGFyZ3MgYW5kIGNhbGwgd2hhdGV2ZXIgZnVuY3Rpb24gd2FzIHNlbGVjdGVkCisgICAgID4+PiBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoJ2ZvbyAxIC14IDInLnNwbGl0KCkpCisgICAgID4+PiBhcmdzLmZ1bmMoYXJncykKKyAgICAgMi4wCisgICAgID4+PgorICAgICA+Pj4gIyBwYXJzZSB0aGUgYXJncyBhbmQgY2FsbCB3aGF0ZXZlciBmdW5jdGlvbiB3YXMgc2VsZWN0ZWQKKyAgICAgPj4+IGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygnYmFyIFhZWllYJy5zcGxpdCgpKQorICAgICA+Pj4gYXJncy5mdW5jKGFyZ3MpCisgICAgICgoWFlaWVgpKQorCisgICBUaGlzIHdheSwgeW91IGNhbiBsZXQgOm1ldGg6YHBhcnNlX2FyZ3NgIGRvZXMgdGhlIGpvYiBvZiBjYWxsaW5nIHRoZQorICAgYXBwcm9wcmlhdGUgZnVuY3Rpb24gYWZ0ZXIgYXJndW1lbnQgcGFyc2luZyBpcyBjb21wbGV0ZS4gIEFzc29jaWF0aW5nCisgICBmdW5jdGlvbnMgd2l0aCBhY3Rpb25zIGxpa2UgdGhpcyBpcyB0eXBpY2FsbHkgdGhlIGVhc2llc3Qgd2F5IHRvIGhhbmRsZSB0aGUKKyAgIGRpZmZlcmVudCBhY3Rpb25zIGZvciBlYWNoIG9mIHlvdXIgc3VicGFyc2Vycy4gIEhvd2V2ZXIsIGlmIGl0IGlzIG5lY2Vzc2FyeQorICAgdG8gY2hlY2sgdGhlIG5hbWUgb2YgdGhlIHN1YnBhcnNlciB0aGF0IHdhcyBpbnZva2VkLCB0aGUgYGBkZXN0YGAga2V5d29yZAorICAgYXJndW1lbnQgdG8gdGhlIDptZXRoOmBhZGRfc3VicGFyc2Vyc2AgY2FsbCB3aWxsIHdvcms6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKGRlc3Q9J3N1YnBhcnNlcl9uYW1lJykKKyAgICAgPj4+IHN1YnBhcnNlcjEgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzEnKQorICAgICA+Pj4gc3VicGFyc2VyMS5hZGRfYXJndW1lbnQoJy14JykKKyAgICAgPj4+IHN1YnBhcnNlcjIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzInKQorICAgICA+Pj4gc3VicGFyc2VyMi5hZGRfYXJndW1lbnQoJ3knKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWycyJywgJ2Zyb2JibGUnXSkKKyAgICAgTmFtZXNwYWNlKHN1YnBhcnNlcl9uYW1lPScyJywgeT0nZnJvYmJsZScpCisKKworRmlsZVR5cGUgb2JqZWN0cworXl5eXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IEZpbGVUeXBlKG1vZGU9J3InLCBidWZzaXplPU5vbmUpCisKKyAgIFRoZSA6Y2xhc3M6YEZpbGVUeXBlYCBmYWN0b3J5IGNyZWF0ZXMgb2JqZWN0cyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHR5cGUKKyAgIGFyZ3VtZW50IG9mIDptZXRoOmBBcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgLiAgQXJndW1lbnRzIHRoYXQgaGF2ZQorICAgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhcyB0aGVpciB0eXBlIHdpbGwgb3BlbiBjb21tYW5kLWxpbmUgYXJncyBhcyBmaWxlcworICAgd2l0aCB0aGUgcmVxdWVzdGVkIG1vZGVzIGFuZCBidWZmZXIgc2l6ZXM6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRwdXQnLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3YicsIDApKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1vdXRwdXQnLCAnb3V0J10pCisgICBOYW1lc3BhY2Uob3V0cHV0PTxvcGVuIGZpbGUgJ291dCcsIG1vZGUgJ3diJyBhdCAweC4uLj4pCisKKyAgIEZpbGVUeXBlIG9iamVjdHMgdW5kZXJzdGFuZCB0aGUgcHNldWRvLWFyZ3VtZW50IGBgJy0nYGAgYW5kIGF1dG9tYXRpY2FsbHkKKyAgIGNvbnZlcnQgdGhpcyBpbnRvIGBgc3lzLnN0ZGluYGAgZm9yIHJlYWRhYmxlIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHMgYW5kCisgICBgYHN5cy5zdGRvdXRgYCBmb3Igd3JpdGFibGUgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0czoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdpbmZpbGUnLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCdyJykpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctJ10pCisgICBOYW1lc3BhY2UoaW5maWxlPTxvcGVuIGZpbGUgJzxzdGRpbj4nLCBtb2RlICdyJyBhdCAweC4uLj4pCisKKworQXJndW1lbnQgZ3JvdXBzCiteXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKHRpdGxlPU5vbmUsIGRlc2NyaXB0aW9uPU5vbmUpCisKKyAgIEJ5IGRlZmF1bHQsIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGdyb3VwcyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGludG8KKyAgICJwb3NpdGlvbmFsIGFyZ3VtZW50cyIgYW5kICJvcHRpb25hbCBhcmd1bWVudHMiIHdoZW4gZGlzcGxheWluZyBoZWxwCisgICBtZXNzYWdlcy4gV2hlbiB0aGVyZSBpcyBhIGJldHRlciBjb25jZXB0dWFsIGdyb3VwaW5nIG9mIGFyZ3VtZW50cyB0aGFuIHRoaXMKKyAgIGRlZmF1bHQgb25lLCBhcHByb3ByaWF0ZSBncm91cHMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlCisgICA6bWV0aDpgYWRkX2FyZ3VtZW50X2dyb3VwYCBtZXRob2Q6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgID4+PiBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2dyb3VwJykKKyAgICAgPj4+IGdyb3VwLmFkZF9hcmd1bWVudCgnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpCisgICAgID4+PiBncm91cC5hZGRfYXJndW1lbnQoJ2JhcicsIGhlbHA9J2JhciBoZWxwJykKKyAgICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgdXNhZ2U6IFBST0cgWy0tZm9vIEZPT10gYmFyCisKKyAgICAgZ3JvdXA6CisgICAgICAgYmFyICAgIGJhciBoZWxwCisgICAgICAgLS1mb28gRk9PICBmb28gaGVscAorCisgICBUaGUgOm1ldGg6YGFkZF9hcmd1bWVudF9ncm91cGAgbWV0aG9kIHJldHVybnMgYW4gYXJndW1lbnQgZ3JvdXAgb2JqZWN0IHdoaWNoCisgICBoYXMgYW4gOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgIG1ldGhvZCBqdXN0IGxpa2UgYSByZWd1bGFyCisgICA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYC4gIFdoZW4gYW4gYXJndW1lbnQgaXMgYWRkZWQgdG8gdGhlIGdyb3VwLCB0aGUgcGFyc2VyCisgICB0cmVhdHMgaXQganVzdCBsaWtlIGEgbm9ybWFsIGFyZ3VtZW50LCBidXQgZGlzcGxheXMgdGhlIGFyZ3VtZW50IGluIGEKKyAgIHNlcGFyYXRlIGdyb3VwIGZvciBoZWxwIG1lc3NhZ2VzLiAgVGhlIDptZXRoOmBhZGRfYXJndW1lbnRfZ3JvdXBgIG1ldGhvZAorICAgYWNjZXB0cyAqdGl0bGUqIGFuZCAqZGVzY3JpcHRpb24qIGFyZ3VtZW50cyB3aGljaCBjYW4gYmUgdXNlZCB0bworICAgY3VzdG9taXplIHRoaXMgZGlzcGxheTo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICAgPj4+IGdyb3VwMSA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2dyb3VwMScsICdncm91cDEgZGVzY3JpcHRpb24nKQorICAgICA+Pj4gZ3JvdXAxLmFkZF9hcmd1bWVudCgnZm9vJywgaGVscD0nZm9vIGhlbHAnKQorICAgICA+Pj4gZ3JvdXAyID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnZ3JvdXAyJywgJ2dyb3VwMiBkZXNjcmlwdGlvbicpCisgICAgID4+PiBncm91cDIuYWRkX2FyZ3VtZW50KCctLWJhcicsIGhlbHA9J2JhciBoZWxwJykKKyAgICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgdXNhZ2U6IFBST0cgWy0tYmFyIEJBUl0gZm9vCisKKyAgICAgZ3JvdXAxOgorICAgICAgIGdyb3VwMSBkZXNjcmlwdGlvbgorCisgICAgICAgZm9vICAgIGZvbyBoZWxwCisKKyAgICAgZ3JvdXAyOgorICAgICAgIGdyb3VwMiBkZXNjcmlwdGlvbgorCisgICAgICAgLS1iYXIgQkFSICBiYXIgaGVscAorCisgICBOb3RlIHRoYXQgYW55IGFyZ3VtZW50cyBub3QgeW91ciB1c2VyIGRlZmluZWQgZ3JvdXBzIHdpbGwgZW5kIHVwIGJhY2sgaW4gdGhlCisgICB1c3VhbCAicG9zaXRpb25hbCBhcmd1bWVudHMiIGFuZCAib3B0aW9uYWwgYXJndW1lbnRzIiBzZWN0aW9ucy4KKworCitNdXR1YWwgZXhjbHVzaW9uCiteXl5eXl5eXl5eXl5eXl5eCisKKy4uIG1ldGhvZDo6IGFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9RmFsc2UpCisKKyAgIENyZWF0ZSBhIG11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cC4gYXJncGFyc2Ugd2lsbCBtYWtlIHN1cmUgdGhhdCBvbmx5IG9uZSBvZgorICAgdGhlIGFyZ3VtZW50cyBpbiB0aGUgbXV0dWFsbHkgZXhjbHVzaXZlIGdyb3VwIHdhcyBwcmVzZW50IG9uIHRoZSBjb21tYW5kCisgICBsaW5lOjoKKworICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgID4+PiBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgPj4+IGdyb3VwLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICA+Pj4gZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWJhcicsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbyddKQorICAgICBOYW1lc3BhY2UoYmFyPVRydWUsIGZvbz1UcnVlKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWJhciddKQorICAgICBOYW1lc3BhY2UoYmFyPUZhbHNlLCBmb289RmFsc2UpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tZm9vJywgJy0tYmFyJ10pCisgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIHwgLS1iYXJdCisgICAgIFBST0c6IGVycm9yOiBhcmd1bWVudCAtLWJhcjogbm90IGFsbG93ZWQgd2l0aCBhcmd1bWVudCAtLWZvbworCisgICBUaGUgOm1ldGg6YGFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBgIG1ldGhvZCBhbHNvIGFjY2VwdHMgYSAqcmVxdWlyZWQqCisgICBhcmd1bWVudCwgdG8gaW5kaWNhdGUgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhcmd1bWVudHMKKyAgIGlzIHJlcXVpcmVkOjoKKworICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgID4+PiBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPVRydWUpCisgICAgID4+PiBncm91cC5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgPj4+IGdyb3VwLmFkZF9hcmd1bWVudCgnLS1iYXInLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgICB1c2FnZTogUFJPRyBbLWhdICgtLWZvbyB8IC0tYmFyKQorICAgICBQUk9HOiBlcnJvcjogb25lIG9mIHRoZSBhcmd1bWVudHMgLS1mb28gLS1iYXIgaXMgcmVxdWlyZWQKKworICAgTm90ZSB0aGF0IGN1cnJlbnRseSBtdXR1YWxseSBleGNsdXNpdmUgYXJndW1lbnQgZ3JvdXBzIGRvIG5vdCBzdXBwb3J0IHRoZQorICAgKnRpdGxlKiBhbmQgKmRlc2NyaXB0aW9uKiBhcmd1bWVudHMgb2YgOm1ldGg6YGFkZF9hcmd1bWVudF9ncm91cGAuCisKKworUGFyc2VyIGRlZmF1bHRzCiteXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIuc2V0X2RlZmF1bHRzKCoqa3dhcmdzKQorCisgICBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IDptZXRoOmBwYXJzZV9hcmdzYAorICAgd2lsbCBiZSBmdWxseSBkZXRlcm1pbmVkIGJ5IGluc3BlY3RpbmcgdGhlIGNvbW1hbmQtbGluZSBhcmdzIGFuZCB0aGUgYXJndW1lbnQKKyAgIGFjdGlvbnMuICA6bWV0aDpgQXJndW1lbnRQYXJzZXIuc2V0X2RlZmF1bHRzYCBhbGxvd3Mgc29tZSBhZGRpdGlvbmFsCisgICBhdHRyaWJ1dGVzIHRoYXQgYXJlIGRldGVybWluZWQgd2l0aG91dCBhbnkgaW5zcGVjdGlvbiBvZiB0aGUgY29tbWFuZC1saW5lIHRvCisgICBiZSBhZGRlZDo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIHR5cGU9aW50KQorICAgICA+Pj4gcGFyc2VyLnNldF9kZWZhdWx0cyhiYXI9NDIsIGJhej0nYmFkZ2VyJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnNzM2J10pCisgICAgIE5hbWVzcGFjZShiYXI9NDIsIGJhej0nYmFkZ2VyJywgZm9vPTczNikKKworICAgTm90ZSB0aGF0IHBhcnNlci1sZXZlbCBkZWZhdWx0cyBhbHdheXMgb3ZlcnJpZGUgYXJndW1lbnQtbGV2ZWwgZGVmYXVsdHM6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGRlZmF1bHQ9J2JhcicpCisgICAgID4+PiBwYXJzZXIuc2V0X2RlZmF1bHRzKGZvbz0nc3BhbScpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgICAgTmFtZXNwYWNlKGZvbz0nc3BhbScpCisKKyAgIFBhcnNlci1sZXZlbCBkZWZhdWx0cyBjYW4gYmUgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIHdvcmtpbmcgd2l0aCBtdWx0aXBsZQorICAgcGFyc2Vycy4gIFNlZSB0aGUgOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfc3VicGFyc2Vyc2AgbWV0aG9kIGZvciBhbgorICAgZXhhbXBsZSBvZiB0aGlzIHR5cGUuCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLmdldF9kZWZhdWx0KGRlc3QpCisKKyAgIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBuYW1lc3BhY2UgYXR0cmlidXRlLCBhcyBzZXQgYnkgZWl0aGVyCisgICA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudGAgb3IgYnkKKyAgIDptZXRoOmB+QXJndW1lbnRQYXJzZXIuc2V0X2RlZmF1bHRzYDo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgZGVmYXVsdD0nYmFkZ2VyJykKKyAgICAgPj4+IHBhcnNlci5nZXRfZGVmYXVsdCgnZm9vJykKKyAgICAgJ2JhZGdlcicKKworCitQcmludGluZyBoZWxwCiteXl5eXl5eXl5eXl5eCisKK0luIG1vc3QgdHlwaWNhbCBhcHBsaWNhdGlvbnMsIDptZXRoOmBwYXJzZV9hcmdzYCB3aWxsIHRha2UgY2FyZSBvZiBmb3JtYXR0aW5nCithbmQgcHJpbnRpbmcgYW55IHVzYWdlIG9yIGVycm9yIG1lc3NhZ2VzLiAgSG93ZXZlciwgc2V2ZXJhbCBmb3JtYXR0aW5nIG1ldGhvZHMKK2FyZSBhdmFpbGFibGU6CisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLnByaW50X3VzYWdlKGZpbGU9Tm9uZSkKKworICAgUHJpbnQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBob3cgdGhlIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIHNob3VsZCBiZQorICAgaW52b2tlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgSWYgKmZpbGUqIGlzIGBgTm9uZWBgLCA6ZGF0YTpgc3lzLnN0ZG91dGAgaXMKKyAgIGFzc3VtZWQuCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLnByaW50X2hlbHAoZmlsZT1Ob25lKQorCisgICBQcmludCBhIGhlbHAgbWVzc2FnZSwgaW5jbHVkaW5nIHRoZSBwcm9ncmFtIHVzYWdlIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgIGFyZ3VtZW50cyByZWdpc3RlcmVkIHdpdGggdGhlIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgLiAgSWYgKmZpbGUqIGlzCisgICBgYE5vbmVgYCwgOmRhdGE6YHN5cy5zdGRvdXRgIGlzIGFzc3VtZWQuCisKK1RoZXJlIGFyZSBhbHNvIHZhcmlhbnRzIG9mIHRoZXNlIG1ldGhvZHMgdGhhdCBzaW1wbHkgcmV0dXJuIGEgc3RyaW5nIGluc3RlYWQgb2YKK3ByaW50aW5nIGl0OgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5mb3JtYXRfdXNhZ2UoKQorCisgICBSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGUKKyAgIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLmZvcm1hdF9oZWxwKCkKKworICAgUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBoZWxwIG1lc3NhZ2UsIGluY2x1ZGluZyB0aGUgcHJvZ3JhbSB1c2FnZSBhbmQKKyAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhcmd1bWVudHMgcmVnaXN0ZXJlZCB3aXRoIHRoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYC4KKworCitQYXJ0aWFsIHBhcnNpbmcKK15eXl5eXl5eXl5eXl5eXgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3M9Tm9uZSwgbmFtZXNwYWNlPU5vbmUpCisKK1NvbWV0aW1lcyBhIHNjcmlwdCBtYXkgb25seSBwYXJzZSBhIGZldyBvZiB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cywgcGFzc2luZwordGhlIHJlbWFpbmluZyBhcmd1bWVudHMgb24gdG8gYW5vdGhlciBzY3JpcHQgb3IgcHJvZ3JhbS4gSW4gdGhlc2UgY2FzZXMsIHRoZQorOm1ldGg6YHBhcnNlX2tub3duX2FyZ3NgIG1ldGhvZCBjYW4gYmUgdXNlZnVsLiAgSXQgd29ya3MgbXVjaCBsaWtlCis6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IHByb2R1Y2UgYW4gZXJyb3Igd2hlbgorZXh0cmEgYXJndW1lbnRzIGFyZSBwcmVzZW50LiAgSW5zdGVhZCwgaXQgcmV0dXJucyBhIHR3byBpdGVtIHR1cGxlIGNvbnRhaW5pbmcKK3RoZSBwb3B1bGF0ZWQgbmFtZXNwYWNlIGFuZCB0aGUgbGlzdCBvZiByZW1haW5pbmcgYXJndW1lbnQgc3RyaW5ncy4KKworOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgID4+PiBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhbJy0tZm9vJywgJy0tYmFkZ2VyJywgJ0JBUicsICdzcGFtJ10pCisgICAoTmFtZXNwYWNlKGJhcj0nQkFSJywgZm9vPVRydWUpLCBbJy0tYmFkZ2VyJywgJ3NwYW0nXSkKKworCitDdXN0b21pemluZyBmaWxlIHBhcnNpbmcKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5jb252ZXJ0X2FyZ19saW5lX3RvX2FyZ3MoYXJnX2xpbmUpCisKKyAgIEFyZ3VtZW50cyB0aGF0IGFyZSByZWFkIGZyb20gYSBmaWxlIChzZWUgdGhlICpmcm9tZmlsZV9wcmVmaXhfY2hhcnMqCisgICBrZXl3b3JkIGFyZ3VtZW50IHRvIHRoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBjb25zdHJ1Y3RvcikgYXJlIHJlYWQgb25lCisgICBhcmd1bWVudCBwZXIgbGluZS4gOm1ldGg6YGNvbnZlcnRfYXJnX2xpbmVfdG9fYXJnc2AgY2FuIGJlIG92ZXJyaWRlbiBmb3IKKyAgIGZhbmNpZXIgcmVhZGluZy4KKworICAgVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQgKmFyZ19saW5lKiB3aGljaCBpcyBhIHN0cmluZyByZWFkIGZyb20KKyAgIHRoZSBhcmd1bWVudCBmaWxlLiAgSXQgcmV0dXJucyBhIGxpc3Qgb2YgYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoaXMgc3RyaW5nLgorICAgVGhlIG1ldGhvZCBpcyBjYWxsZWQgb25jZSBwZXIgbGluZSByZWFkIGZyb20gdGhlIGFyZ3VtZW50IGZpbGUsIGluIG9yZGVyLgorCisgICBBIHVzZWZ1bCBvdmVycmlkZSBvZiB0aGlzIG1ldGhvZCBpcyBvbmUgdGhhdCB0cmVhdHMgZWFjaCBzcGFjZS1zZXBhcmF0ZWQgd29yZAorICAgYXMgYW4gYXJndW1lbnQ6OgorCisgICAgZGVmIGNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhzZWxmLCBhcmdfbGluZSk6CisgICAgICAgIGZvciBhcmcgaW4gYXJnX2xpbmUuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIG5vdCBhcmcuc3RyaXAoKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgeWllbGQgYXJnCisKKworRXhpdGluZyBtZXRob2RzCiteXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIuZXhpdChzdGF0dXM9MCwgbWVzc2FnZT1Ob25lKQorCisgICBUaGlzIG1ldGhvZCB0ZXJtaW5hdGVzIHRoZSBwcm9ncmFtLCBleGl0aW5nIHdpdGggdGhlIHNwZWNpZmllZCAqc3RhdHVzKgorICAgYW5kLCBpZiBnaXZlbiwgaXQgcHJpbnRzIGEgKm1lc3NhZ2UqIGJlZm9yZSB0aGF0LgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5lcnJvcihtZXNzYWdlKQorCisgICBUaGlzIG1ldGhvZCBwcmludHMgYSB1c2FnZSBtZXNzYWdlIGluY2x1ZGluZyB0aGUgKm1lc3NhZ2UqIHRvIHRoZQorICAgc3RhbmRhcmQgb3V0cHV0IGFuZCB0ZXJtaW5hdGVzIHRoZSBwcm9ncmFtIHdpdGggYSBzdGF0dXMgY29kZSBvZiAyLgorCisKKy4uIF9hcmdwYXJzZS1mcm9tLW9wdHBhcnNlOgorCitVcGdyYWRpbmcgb3B0cGFyc2UgY29kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3JpZ2luYWxseSwgdGhlIGFyZ3BhcnNlIG1vZHVsZSBoYWQgYXR0ZW1wdGVkIHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aAorb3B0cGFyc2UuICBIb3dldmVyLCBvcHRwYXJzZSB3YXMgZGlmZmljdWx0IHRvIGV4dGVuZCB0cmFuc3BhcmVudGx5LCBwYXJ0aWN1bGFybHkKK3dpdGggdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCB0aGUgbmV3IGBgbmFyZ3M9YGAgc3BlY2lmaWVycyBhbmQgYmV0dGVyCit1c2FnZSBtZXNzYWdlcy4gIFdoZW4gbW9zdCBldmVyeXRoaW5nIGluIG9wdHBhcnNlIGhhZCBlaXRoZXIgYmVlbiBjb3B5LXBhc3RlZAorb3ZlciBvciBtb25rZXktcGF0Y2hlZCwgaXQgbm8gbG9uZ2VyIHNlZW1lZCBwcmFjdGljYWwgdG8gdHJ5IHRvIG1haW50YWluIHRoZQorYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKK0EgcGFydGlhbCB1cGdyYWRlIHBhdGggZnJvbSBvcHRwYXJzZSB0byBhcmdwYXJzZToKKworKiBSZXBsYWNlIGFsbCBgYGFkZF9vcHRpb24oKWBgIGNhbGxzIHdpdGggOm1ldGg6YEFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudGAKKyAgY2FsbHMuCisKKyogUmVwbGFjZSBgYG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpYGAgd2l0aCBgYGFyZ3MgPQorICBwYXJzZXIucGFyc2VfYXJncygpYGAgYW5kIGFkZCBhZGRpdGlvbmFsIDptZXRoOmBBcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgCisgIGNhbGxzIGZvciB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMuCisKKyogUmVwbGFjZSBjYWxsYmFjayBhY3Rpb25zIGFuZCB0aGUgYGBjYWxsYmFja18qYGAga2V5d29yZCBhcmd1bWVudHMgd2l0aAorICBgYHR5cGVgYCBvciBgYGFjdGlvbmBgIGFyZ3VtZW50cy4KKworKiBSZXBsYWNlIHN0cmluZyBuYW1lcyBmb3IgYGB0eXBlYGAga2V5d29yZCBhcmd1bWVudHMgd2l0aCB0aGUgY29ycmVzcG9uZGluZworICB0eXBlIG9iamVjdHMgKGUuZy4gaW50LCBmbG9hdCwgY29tcGxleCwgZXRjKS4KKworKiBSZXBsYWNlIDpjbGFzczpgb3B0cGFyc2UuVmFsdWVzYCB3aXRoIDpjbGFzczpgTmFtZXNwYWNlYCBhbmQKKyAgOmV4Yzpgb3B0cGFyc2UuT3B0aW9uRXJyb3JgIGFuZCA6ZXhjOmBvcHRwYXJzZS5PcHRpb25WYWx1ZUVycm9yYCB3aXRoCisgIDpleGM6YEFyZ3VtZW50RXJyb3JgLgorCisqIFJlcGxhY2Ugc3RyaW5ncyB3aXRoIGltcGxpY2l0IGFyZ3VtZW50cyBzdWNoIGFzIGBgJWRlZmF1bHRgYCBvciBgYCVwcm9nYGAgd2l0aAorICB0aGUgc3RhbmRhcmQgcHl0aG9uIHN5bnRheCB0byB1c2UgZGljdGlvbmFyaWVzIHRvIGZvcm1hdCBzdHJpbmdzLCB0aGF0IGlzLAorICBgYCUoZGVmYXVsdClzYGAgYW5kIGBgJShwcm9nKXNgYC4KKworKiBSZXBsYWNlIHRoZSBPcHRpb25QYXJzZXIgY29uc3RydWN0b3IgYGB2ZXJzaW9uYGAgYXJndW1lbnQgd2l0aCBhIGNhbGwgdG8KKyAgYGBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSc8dGhlIHZlcnNpb24+JylgYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN0LnJzdCBiL0RvYy9saWJyYXJ5L2FzdC5yc3QKaW5kZXggODJjYTZlMy4uZWYzNmY1MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9hc3QucnN0CkBAIC0yOCw2ICsyOCwxMSBAQAogY29tcGlsZWQgaW50byBhIFB5dGhvbiBjb2RlIG9iamVjdCB1c2luZyB0aGUgYnVpbHQtaW4gOmZ1bmM6YGNvbXBpbGVgIGZ1bmN0aW9uLgogCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYGFzdCBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvYXN0LnB5P3ZpZXc9bWFya3VwPmBfCisKIE5vZGUgY2xhc3NlcwogLS0tLS0tLS0tLS0tCiAKQEAgLTEyMiw5ICsxMjcsOSBAQAogQXBhcnQgZnJvbSB0aGUgbm9kZSBjbGFzc2VzLCA6bW9kOmBhc3RgIG1vZHVsZSBkZWZpbmVzIHRoZXNlIHV0aWxpdHkgZnVuY3Rpb25zCiBhbmQgY2xhc3NlcyBmb3IgdHJhdmVyc2luZyBhYnN0cmFjdCBzeW50YXggdHJlZXM6CiAKLS4uIGZ1bmN0aW9uOjogcGFyc2UoZXhwciwgZmlsZW5hbWU9Jzx1bmtub3duPicsIG1vZGU9J2V4ZWMnKQorLi4gZnVuY3Rpb246OiBwYXJzZShzb3VyY2UsIGZpbGVuYW1lPSc8dW5rbm93bj4nLCBtb2RlPSdleGVjJykKIAotICAgUGFyc2UgYW4gZXhwcmVzc2lvbiBpbnRvIGFuIEFTVCBub2RlLiAgRXF1aXZhbGVudCB0byBgYGNvbXBpbGUoZXhwciwKKyAgIFBhcnNlIHRoZSBzb3VyY2UgaW50byBhbiBBU1Qgbm9kZS4gIEVxdWl2YWxlbnQgdG8gYGBjb21waWxlKHNvdXJjZSwKICAgIGZpbGVuYW1lLCBtb2RlLCBhc3QuUHlDRl9PTkxZX0FTVClgYC4KIAogCkBAIC0xODIsOSArMTg3LDkgQEAKIAogLi4gZnVuY3Rpb246OiB3YWxrKG5vZGUpCiAKLSAgIFJlY3Vyc2l2ZWx5IHlpZWxkIGFsbCBjaGlsZCBub2RlcyBvZiAqbm9kZSosIGluIG5vIHNwZWNpZmllZCBvcmRlci4gIFRoaXMgaXMKLSAgIHVzZWZ1bCBpZiB5b3Ugb25seSB3YW50IHRvIG1vZGlmeSBub2RlcyBpbiBwbGFjZSBhbmQgZG9uJ3QgY2FyZSBhYm91dCB0aGUKLSAgIGNvbnRleHQuCisgICBSZWN1cnNpdmVseSB5aWVsZCBhbGwgZGVzY2VuZGFudCBub2RlcyBpbiB0aGUgdHJlZSBzdGFydGluZyBhdCAqbm9kZSoKKyAgIChpbmNsdWRpbmcgKm5vZGUqIGl0c2VsZiksIGluIG5vIHNwZWNpZmllZCBvcmRlci4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBvbmx5CisgICB3YW50IHRvIG1vZGlmeSBub2RlcyBpbiBwbGFjZSBhbmQgZG9uJ3QgY2FyZSBhYm91dCB0aGUgY29udGV4dC4KIAogCiAuLiBjbGFzczo6IE5vZGVWaXNpdG9yKCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdAppbmRleCA0NjhlNWI1Li44MTNhYzIxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CkBAIC0yMTEsMTAgKzIxMSwxMyBAQAogICAgLi4gbWV0aG9kOjogYWNjZXB0KCkKIAogICAgICAgQWNjZXB0IGEgY29ubmVjdGlvbi4gIFRoZSBzb2NrZXQgbXVzdCBiZSBib3VuZCB0byBhbiBhZGRyZXNzIGFuZCBsaXN0ZW5pbmcKLSAgICAgIGZvciBjb25uZWN0aW9ucy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwYWlyIGBgKGNvbm4sIGFkZHJlc3MpYGAgd2hlcmUKLSAgICAgICpjb25uKiBpcyBhICpuZXcqIHNvY2tldCBvYmplY3QgdXNhYmxlIHRvIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvbiB0aGUKLSAgICAgIGNvbm5lY3Rpb24sIGFuZCAqYWRkcmVzcyogaXMgdGhlIGFkZHJlc3MgYm91bmQgdG8gdGhlIHNvY2tldCBvbiB0aGUgb3RoZXIKLSAgICAgIGVuZCBvZiB0aGUgY29ubmVjdGlvbi4KKyAgICAgIGZvciBjb25uZWN0aW9ucy4gIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGVpdGhlciBgYE5vbmVgYCBvciBhIHBhaXIKKyAgICAgIGBgKGNvbm4sIGFkZHJlc3MpYGAgd2hlcmUgKmNvbm4qIGlzIGEgKm5ldyogc29ja2V0IG9iamVjdCB1c2FibGUgdG8gc2VuZAorICAgICAgYW5kIHJlY2VpdmUgZGF0YSBvbiB0aGUgY29ubmVjdGlvbiwgYW5kICphZGRyZXNzKiBpcyB0aGUgYWRkcmVzcyBib3VuZCB0bworICAgICAgdGhlIHNvY2tldCBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLgorICAgICAgV2hlbiBgYE5vbmVgYCBpcyByZXR1cm5lZCBpdCBtZWFucyB0aGUgY29ubmVjdGlvbiBkaWRuJ3QgdGFrZSBwbGFjZSwgaW4KKyAgICAgIHdoaWNoIGNhc2UgdGhlIHNlcnZlciBzaG91bGQganVzdCBpZ25vcmUgdGhpcyBldmVudCBhbmQga2VlcCBsaXN0ZW5pbmcKKyAgICAgIGZvciBmdXJ0aGVyIGluY29taW5nIGNvbm5lY3Rpb25zLgogCiAKICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKQEAgLTIyNCw2ICsyMjcsMTIgQEAKICAgICAgIGZsdXNoZWQpLiAgU29ja2V0cyBhcmUgYXV0b21hdGljYWxseSBjbG9zZWQgd2hlbiB0aGV5IGFyZQogICAgICAgZ2FyYmFnZS1jb2xsZWN0ZWQuCiAKKy4uIGNsYXNzOjogZGlzcGF0Y2hlcl93aXRoX3NlbmQoKQorCisgICBBIDpjbGFzczpgZGlzcGF0Y2hlcmAgc3ViY2xhc3Mgd2hpY2ggYWRkcyBzaW1wbGUgYnVmZmVyZWQgb3V0cHV0IGNhcGFiaWxpdHksCisgICB1c2VmdWwgZm9yIHNpbXBsZSBjbGllbnRzLiBGb3IgbW9yZSBzb3BoaXN0aWNhdGVkIHVzYWdlIHVzZQorICAgOmNsYXNzOmBhc3luY2hhdC5hc3luY19jaGF0YC4KKwogLi4gY2xhc3M6OiBmaWxlX2Rpc3BhdGNoZXIoKQogCiAgICBBIGZpbGVfZGlzcGF0Y2hlciB0YWtlcyBhIGZpbGUgZGVzY3JpcHRvciBvciBmaWxlIG9iamVjdCBhbG9uZyB3aXRoIGFuCkBAIC0yNDAsNyArMjQ5LDcgQEAKICAgIHNvY2tldCBmb3IgdXNlIGJ5IHRoZSA6Y2xhc3M6YGZpbGVfZGlzcGF0Y2hlcmAgY2xhc3MuICBBdmFpbGFiaWxpdHk6IFVOSVguCiAKIAotLi4gX2FzeW5jb3JlLWV4YW1wbGU6CisuLiBfYXN5bmNvcmUtZXhhbXBsZS0xOgogCiBhc3luY29yZSBFeGFtcGxlIGJhc2ljIEhUVFAgY2xpZW50CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNTAsNyArMjU5LDcgQEAKIAogICAgaW1wb3J0IGFzeW5jb3JlLCBzb2NrZXQKIAotICAgY2xhc3MgaHR0cF9jbGllbnQoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CisgICBjbGFzcyBIVFRQQ2xpZW50KGFzeW5jb3JlLmRpc3BhdGNoZXIpOgogCiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBhdGgpOgogICAgICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYpCkBAIC0yNzQsNiArMjgzLDQ2IEBACiAgICAgICAgICAgIHNlbnQgPSBzZWxmLnNlbmQoc2VsZi5idWZmZXIpCiAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gc2VsZi5idWZmZXJbc2VudDpdCiAKLSAgIGMgPSBodHRwX2NsaWVudCgnd3d3LnB5dGhvbi5vcmcnLCAnLycpCiAKKyAgIGNsaWVudCA9IEhUVFBDbGllbnQoJ3d3dy5weXRob24ub3JnJywgJy8nKQogICAgYXN5bmNvcmUubG9vcCgpCisKKy4uIF9hc3luY29yZS1leGFtcGxlLTI6CisKK2FzeW5jb3JlIEV4YW1wbGUgYmFzaWMgZWNobyBzZXJ2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSBpcyBhIGJhc2ljIGVjaG8gc2VydmVyIHRoYXQgdXNlcyB0aGUgOmNsYXNzOmBkaXNwYXRjaGVyYCBjbGFzcyB0byBhY2NlcHQKK2Nvbm5lY3Rpb25zIGFuZCBkaXNwYXRjaGVzIHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyB0byBhIGhhbmRsZXI6OgorCisgICAgaW1wb3J0IGFzeW5jb3JlCisgICAgaW1wb3J0IHNvY2tldAorCisgICAgY2xhc3MgRWNob0hhbmRsZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcl93aXRoX3NlbmQpOgorCisgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlY3YoODE5MikKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5zZW5kKGRhdGEpCisKKyAgICBjbGFzcyBFY2hvU2VydmVyKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc2VsZi5zZXRfcmV1c2VfYWRkcigpCisgICAgICAgICAgICBzZWxmLmJpbmQoKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgc2VsZi5saXN0ZW4oNSkKKworICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgICAgIHBhaXIgPSBzZWxmLmFjY2VwdCgpCisgICAgICAgICAgICBpZiBwYWlyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzb2NrLCBhZGRyID0gcGFpcgorICAgICAgICAgICAgICAgIHByaW50ICdJbmNvbWluZyBjb25uZWN0aW9uIGZyb20gJXMnICUgcmVwcihhZGRyKQorICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBFY2hvSGFuZGxlcihzb2NrKQorCisgICAgc2VydmVyID0gRWNob1NlcnZlcignbG9jYWxob3N0JywgODA4MCkKKyAgICBhc3luY29yZS5sb29wKCkKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXRleGl0LnJzdCBiL0RvYy9saWJyYXJ5L2F0ZXhpdC5yc3QKaW5kZXggOGIzM2Q1Yy4uZWFiOGNkOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXRleGl0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9hdGV4aXQucnN0CkBAIC0xNCw5ICsxNCwxNCBAQAogZnVuY3Rpb25zLiAgRnVuY3Rpb25zIHRodXMgcmVnaXN0ZXJlZCBhcmUgYXV0b21hdGljYWxseSBleGVjdXRlZCB1cG9uIG5vcm1hbAogaW50ZXJwcmV0ZXIgdGVybWluYXRpb24uCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYGF0ZXhpdCBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9hdGV4aXQucHk/dmlldz1tYXJrdXA+YF8KKwogTm90ZTogdGhlIGZ1bmN0aW9ucyByZWdpc3RlcmVkIHZpYSB0aGlzIG1vZHVsZSBhcmUgbm90IGNhbGxlZCB3aGVuIHRoZSBwcm9ncmFtCi1pcyBraWxsZWQgYnkgYSBzaWduYWwsIHdoZW4gYSBQeXRob24gZmF0YWwgaW50ZXJuYWwgZXJyb3IgaXMgZGV0ZWN0ZWQsIG9yIHdoZW4KLTpmdW5jOmBvcy5fZXhpdGAgaXMgY2FsbGVkLgoraXMga2lsbGVkIGJ5IGEgc2lnbmFsIG5vdCBoYW5kbGVkIGJ5IFB5dGhvbiwgd2hlbiBhIFB5dGhvbiBmYXRhbCBpbnRlcm5hbCBlcnJvcgoraXMgZGV0ZWN0ZWQsIG9yIHdoZW4gOmZ1bmM6YG9zLl9leGl0YCBpcyBjYWxsZWQuCiAKIC4uIGluZGV4Ojogc2luZ2xlOiBleGl0ZnVuYyAoaW4gc3lzKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hdWRpb29wLnJzdCBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CmluZGV4IGI0OTdlMWYuLjI5YzM5MTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CisrKyBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CkBAIC0yMzYsOCArMjM2LDggQEAKICAgIGRlZiBtdWxfc3RlcmVvKHNhbXBsZSwgd2lkdGgsIGxmYWN0b3IsIHJmYWN0b3IpOgogICAgICAgIGxzYW1wbGUgPSBhdWRpb29wLnRvbW9ubyhzYW1wbGUsIHdpZHRoLCAxLCAwKQogICAgICAgIHJzYW1wbGUgPSBhdWRpb29wLnRvbW9ubyhzYW1wbGUsIHdpZHRoLCAwLCAxKQotICAgICAgIGxzYW1wbGUgPSBhdWRpb29wLm11bChzYW1wbGUsIHdpZHRoLCBsZmFjdG9yKQotICAgICAgIHJzYW1wbGUgPSBhdWRpb29wLm11bChzYW1wbGUsIHdpZHRoLCByZmFjdG9yKQorICAgICAgIGxzYW1wbGUgPSBhdWRpb29wLm11bChsc2FtcGxlLCB3aWR0aCwgbGZhY3RvcikKKyAgICAgICByc2FtcGxlID0gYXVkaW9vcC5tdWwocnNhbXBsZSwgd2lkdGgsIHJmYWN0b3IpCiAgICAgICAgbHNhbXBsZSA9IGF1ZGlvb3AudG9zdGVyZW8obHNhbXBsZSwgd2lkdGgsIDEsIDApCiAgICAgICAgcnNhbXBsZSA9IGF1ZGlvb3AudG9zdGVyZW8ocnNhbXBsZSwgd2lkdGgsIDAsIDEpCiAgICAgICAgcmV0dXJuIGF1ZGlvb3AuYWRkKGxzYW1wbGUsIHJzYW1wbGUsIHdpZHRoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdCBiL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKaW5kZXggMDg0NjYwZC4uYWI4NTQzNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmBiYXNlNjRgIC0tLSBSRkMgMzU0ODogQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCBEYXRhIEVuY29kaW5ncwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmRiLnJzdCBiL0RvYy9saWJyYXJ5L2JkYi5yc3QKaW5kZXggNGVlMmYxOS4uOTMzMDRkZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmRiLnJzdAorKysgYi9Eb2MvbGlicmFyeS9iZGIucnN0CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICogYGAiZXhjZXB0aW9uImBgOiBBbiBleGNlcHRpb24gaGFzIG9jY3VycmVkLgogICAgICAgKiBgYCJjX2NhbGwiYGA6IEEgQyBmdW5jdGlvbiBpcyBhYm91dCB0byBiZSBjYWxsZWQuCiAgICAgICAqIGBgImNfcmV0dXJuImBgOiBBIEMgZnVuY3Rpb24gaGFzIHJldHVybmVkLgotICAgICAgKiBgYCJjX2V4Y2VwdGlvbiJgYDogQSBDIGZ1bmN0aW9uIGhhcyB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgICAgKiBgYCJjX2V4Y2VwdGlvbiJgYDogQSBDIGZ1bmN0aW9uIGhhcyByYWlzZWQgYW4gZXhjZXB0aW9uLgogCiAgICAgICBGb3IgdGhlIFB5dGhvbiBldmVudHMsIHNwZWNpYWxpemVkIGZ1bmN0aW9ucyAoc2VlIGJlbG93KSBhcmUgY2FsbGVkLiAgRm9yCiAgICAgICB0aGUgQyBldmVudHMsIG5vIGFjdGlvbiBpcyB0YWtlbi4KQEAgLTM0MiwxMiArMzQyLDEwIEBACiAuLiBmdW5jdGlvbjo6IGVmZmVjdGl2ZShmaWxlLCBsaW5lLCBmcmFtZSkKIAogICAgRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFuIGVmZmVjdGl2ZSAoYWN0aXZlKSBicmVha3BvaW50IGF0IHRoaXMgbGluZSBvZiBjb2RlLgotICAgUmV0dXJuIGJyZWFrcG9pbnQgbnVtYmVyIG9yIDAgaWYgbm9uZS4KLQotICAgQ2FsbGVkIG9ubHkgaWYgd2Uga25vdyB0aGVyZSBpcyBhIGJyZWFrcG9pbnQgYXQgdGhpcyBsb2NhdGlvbi4gIFJldHVybnMgdGhlCi0gICBicmVha3BvaW50IHRoYXQgd2FzIHRyaWdnZXJlZCBhbmQgYSBmbGFnIHRoYXQgaW5kaWNhdGVzIGlmIGl0IGlzIG9rIHRvIGRlbGV0ZQotICAgYSB0ZW1wb3JhcnkgYnJlYWtwb2ludC4KKyAgIFJldHVybiBhIHR1cGxlIG9mIHRoZSBicmVha3BvaW50IGFuZCBhIGJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgaWYgaXQgaXMgb2sKKyAgIHRvIGRlbGV0ZSBhIHRlbXBvcmFyeSBicmVha3BvaW50LiAgUmV0dXJuIGBgKE5vbmUsIE5vbmUpYGAgaWYgdGhlcmUgaXMgbm8KKyAgIG1hdGNoaW5nIGJyZWFrcG9pbnQuCiAKIC4uIGZ1bmN0aW9uOjogc2V0X3RyYWNlKCkKIAotICAgU3RhcnRzIGRlYnVnZ2luZyB3aXRoIGEgOmNsYXNzOmBCZGJgIGluc3RhbmNlIGZyb20gY2FsbGVyJ3MgZnJhbWUuCisgICBTdGFydCBkZWJ1Z2dpbmcgd2l0aCBhIDpjbGFzczpgQmRiYCBpbnN0YW5jZSBmcm9tIGNhbGxlcidzIGZyYW1lLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmlzZWN0LnJzdCBiL0RvYy9saWJyYXJ5L2Jpc2VjdC5yc3QKaW5kZXggZWIzMjM1NC4uNDhjYjMzMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmlzZWN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9iaXNlY3QucnN0CkBAIC0xLDEwICsxLDEwIEBACi0KIDptb2Q6YGJpc2VjdGAgLS0tIEFycmF5IGJpc2VjdGlvbiBhbGdvcml0aG0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogYmlzZWN0CiAgICA6c3lub3BzaXM6IEFycmF5IGJpc2VjdGlvbiBhbGdvcml0aG1zIGZvciBiaW5hcnkgc2VhcmNoaW5nLgogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CisuLiBzZWN0aW9uYXV0aG9yOjogUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbiBhdCByY24uY29tPgogLi4gZXhhbXBsZSBiYXNlZCBvbiB0aGUgUHlNb2R1bGVzIEZBUSBlbnRyeSBieSBBYXJvbiBXYXR0ZXJzIDxhcndAcHl0aG9ucHJvcy5jb20+CiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIG1haW50YWluaW5nIGEgbGlzdCBpbiBzb3J0ZWQgb3JkZXIgd2l0aG91dApAQCAtMTQsODAgKzE0LDEyNSBAQAogYWxnb3JpdGhtIHRvIGRvIGl0cyB3b3JrLiAgVGhlIHNvdXJjZSBjb2RlIG1heSBiZSBtb3N0IHVzZWZ1bCBhcyBhIHdvcmtpbmcKIGV4YW1wbGUgb2YgdGhlIGFsZ29yaXRobSAodGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMgYXJlIGFscmVhZHkgcmlnaHQhKS4KIAorLi4gdmVyc2lvbmFkZGVkOjogMi4xCisKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYGJpc2VjdCBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvYmlzZWN0LnB5P3ZpZXc9bWFya3VwPmBfCisKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBwcm92aWRlZDoKIAogCi0uLiBmdW5jdGlvbjo6IGJpc2VjdF9sZWZ0KGxpc3QsIGl0ZW1bLCBsb1ssIGhpXV0pCisuLiBmdW5jdGlvbjo6IGJpc2VjdF9sZWZ0KGEsIHgsIGxvPTAsIGhpPWxlbihhKSkKIAotICAgTG9jYXRlIHRoZSBwcm9wZXIgaW5zZXJ0aW9uIHBvaW50IGZvciAqaXRlbSogaW4gKmxpc3QqIHRvIG1haW50YWluIHNvcnRlZCBvcmRlci4KLSAgIFRoZSBwYXJhbWV0ZXJzICpsbyogYW5kICpoaSogbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSBhIHN1YnNldCBvZiB0aGUgbGlzdCB3aGljaAotICAgc2hvdWxkIGJlIGNvbnNpZGVyZWQ7IGJ5IGRlZmF1bHQgdGhlIGVudGlyZSBsaXN0IGlzIHVzZWQuICBJZiAqaXRlbSogaXMgYWxyZWFkeQotICAgcHJlc2VudCBpbiAqbGlzdCosIHRoZSBpbnNlcnRpb24gcG9pbnQgd2lsbCBiZSBiZWZvcmUgKHRvIHRoZSBsZWZ0IG9mKSBhbnkKLSAgIGV4aXN0aW5nIGVudHJpZXMuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdGhlIGZpcnN0IHBhcmFtZXRlcgotICAgdG8gYGBsaXN0Lmluc2VydCgpYGAuICBUaGlzIGFzc3VtZXMgdGhhdCAqbGlzdCogaXMgYWxyZWFkeSBzb3J0ZWQuCisgICBMb2NhdGUgdGhlIGluc2VydGlvbiBwb2ludCBmb3IgKngqIGluICphKiB0byBtYWludGFpbiBzb3J0ZWQgb3JkZXIuCisgICBUaGUgcGFyYW1ldGVycyAqbG8qIGFuZCAqaGkqIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgYSBzdWJzZXQgb2YgdGhlIGxpc3QKKyAgIHdoaWNoIHNob3VsZCBiZSBjb25zaWRlcmVkOyBieSBkZWZhdWx0IHRoZSBlbnRpcmUgbGlzdCBpcyB1c2VkLiAgSWYgKngqIGlzCisgICBhbHJlYWR5IHByZXNlbnQgaW4gKmEqLCB0aGUgaW5zZXJ0aW9uIHBvaW50IHdpbGwgYmUgYmVmb3JlICh0byB0aGUgbGVmdCBvZikKKyAgIGFueSBleGlzdGluZyBlbnRyaWVzLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBmaXJzdAorICAgcGFyYW1ldGVyIHRvIGBgbGlzdC5pbnNlcnQoKWBgIGFzc3VtaW5nIHRoYXQgKmEqIGlzIGFscmVhZHkgc29ydGVkLgogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjEKKyAgIFRoZSByZXR1cm5lZCBpbnNlcnRpb24gcG9pbnQgKmkqIHBhcnRpdGlvbnMgdGhlIGFycmF5ICphKiBpbnRvIHR3byBoYWx2ZXMgc28KKyAgIHRoYXQgYGBhbGwodmFsIDwgeCBmb3IgdmFsIGluIGFbbG86aV0pYGAgZm9yIHRoZSBsZWZ0IHNpZGUgYW5kCisgICBgYGFsbCh2YWwgPj0geCBmb3IgdmFsIGluIGFbaTpoaV0pYGAgZm9yIHRoZSByaWdodCBzaWRlLgorCisuLiBmdW5jdGlvbjo6IGJpc2VjdF9yaWdodChhLCB4LCBsbz0wLCBoaT1sZW4oYSkpCisgICAgICAgICAgICAgIGJpc2VjdChhLCB4LCBsbz0wLCBoaT1sZW4oYSkpCisKKyAgIFNpbWlsYXIgdG8gOmZ1bmM6YGJpc2VjdF9sZWZ0YCwgYnV0IHJldHVybnMgYW4gaW5zZXJ0aW9uIHBvaW50IHdoaWNoIGNvbWVzCisgICBhZnRlciAodG8gdGhlIHJpZ2h0IG9mKSBhbnkgZXhpc3RpbmcgZW50cmllcyBvZiAqeCogaW4gKmEqLgorCisgICBUaGUgcmV0dXJuZWQgaW5zZXJ0aW9uIHBvaW50ICppKiBwYXJ0aXRpb25zIHRoZSBhcnJheSAqYSogaW50byB0d28gaGFsdmVzIHNvCisgICB0aGF0IGBgYWxsKHZhbCA8PSB4IGZvciB2YWwgaW4gYVtsbzppXSlgYCBmb3IgdGhlIGxlZnQgc2lkZSBhbmQKKyAgIGBgYWxsKHZhbCA+IHggZm9yIHZhbCBpbiBhW2k6aGldKWBgIGZvciB0aGUgcmlnaHQgc2lkZS4KKworLi4gZnVuY3Rpb246OiBpbnNvcnRfbGVmdChhLCB4LCBsbz0wLCBoaT1sZW4oYSkpCisKKyAgIEluc2VydCAqeCogaW4gKmEqIGluIHNvcnRlZCBvcmRlci4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgYGBhLmluc2VydChiaXNlY3QuYmlzZWN0X2xlZnQoYSwgeCwgbG8sIGhpKSwgeClgYCBhc3N1bWluZyB0aGF0ICphKiBpcworICAgYWxyZWFkeSBzb3J0ZWQuICBLZWVwIGluIG1pbmQgdGhhdCB0aGUgTyhsb2cgbikgc2VhcmNoIGlzIGRvbWluYXRlZCBieQorICAgdGhlIHNsb3cgTyhuKSBpbnNlcnRpb24gc3RlcC4KKworLi4gZnVuY3Rpb246OiBpbnNvcnRfcmlnaHQoYSwgeCwgbG89MCwgaGk9bGVuKGEpKQorICAgICAgICAgICAgICBpbnNvcnQoYSwgeCwgbG89MCwgaGk9bGVuKGEpKQorCisgICBTaW1pbGFyIHRvIDpmdW5jOmBpbnNvcnRfbGVmdGAsIGJ1dCBpbnNlcnRpbmcgKngqIGluICphKiBhZnRlciBhbnkgZXhpc3RpbmcKKyAgIGVudHJpZXMgb2YgKngqLgorCisuLiBzZWVhbHNvOjoKKworICAgYFNvcnRlZENvbGxlY3Rpb24gcmVjaXBlCisgICA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc3MTk3LXNvcnRlZGNvbGxlY3Rpb24vPmBfIHRoYXQgdXNlcworICAgYmlzZWN0IHRvIGJ1aWxkIGEgZnVsbC1mZWF0dXJlZCBjb2xsZWN0aW9uIGNsYXNzIHdpdGggc3RyYWlnaHQtZm9yd2FyZCBzZWFyY2gKKyAgIG1ldGhvZHMgYW5kIHN1cHBvcnQgZm9yIGEga2V5LWZ1bmN0aW9uLiAgVGhlIGtleXMgYXJlIHByZWNvbXB1dGVkIHRvIHNhdmUKKyAgIHVubmVjZXNzYXJ5IGNhbGxzIHRvIHRoZSBrZXkgZnVuY3Rpb24gZHVyaW5nIHNlYXJjaGVzLgogCiAKLS4uIGZ1bmN0aW9uOjogYmlzZWN0X3JpZ2h0KGxpc3QsIGl0ZW1bLCBsb1ssIGhpXV0pCitTZWFyY2hpbmcgU29ydGVkIExpc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgIFNpbWlsYXIgdG8gOmZ1bmM6YGJpc2VjdF9sZWZ0YCwgYnV0IHJldHVybnMgYW4gaW5zZXJ0aW9uIHBvaW50IHdoaWNoIGNvbWVzIGFmdGVyCi0gICAodG8gdGhlIHJpZ2h0IG9mKSBhbnkgZXhpc3RpbmcgZW50cmllcyBvZiAqaXRlbSogaW4gKmxpc3QqLgorVGhlIGFib3ZlIDpmdW5jOmBiaXNlY3RgIGZ1bmN0aW9ucyBhcmUgdXNlZnVsIGZvciBmaW5kaW5nIGluc2VydGlvbiBwb2ludHMgYnV0CitjYW4gYmUgdHJpY2t5IG9yIGF3a3dhcmQgdG8gdXNlIGZvciBjb21tb24gc2VhcmNoaW5nIHRhc2tzLiBUaGUgZm9sbG93aW5nIGZpdmUKK2Z1bmN0aW9ucyBzaG93IGhvdyB0byB0cmFuc2Zvcm0gdGhlbSBpbnRvIHRoZSBzdGFuZGFyZCBsb29rdXBzIGZvciBzb3J0ZWQKK2xpc3RzOjoKIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMi4xCisgICAgZGVmIGluZGV4KGEsIHgpOgorICAgICAgICAnTG9jYXRlIHRoZSBsZWZ0bW9zdCB2YWx1ZSBleGFjdGx5IGVxdWFsIHRvIHgnCisgICAgICAgIGkgPSBiaXNlY3RfbGVmdChhLCB4KQorICAgICAgICBpZiBpICE9IGxlbihhKSBhbmQgYVtpXSA9PSB4OgorICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCisgICAgZGVmIGZpbmRfbHQoYSwgeCk6CisgICAgICAgICdGaW5kIHJpZ2h0bW9zdCB2YWx1ZSBsZXNzIHRoYW4geCcKKyAgICAgICAgaSA9IGJpc2VjdF9sZWZ0KGEsIHgpCisgICAgICAgIGlmIGk6CisgICAgICAgICAgICByZXR1cm4gYVtpLTFdCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgIGRlZiBmaW5kX2xlKGEsIHgpOgorICAgICAgICAnRmluZCByaWdodG1vc3QgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHgnCisgICAgICAgIGkgPSBiaXNlY3RfcmlnaHQoYSwgeCkKKyAgICAgICAgaWYgaToKKyAgICAgICAgICAgIHJldHVybiBhW2ktMV0KKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCisgICAgZGVmIGZpbmRfZ3QoYSwgeCk6CisgICAgICAgICdGaW5kIGxlZnRtb3N0IHZhbHVlIGdyZWF0ZXIgdGhhbiB4JworICAgICAgICBpID0gYmlzZWN0X3JpZ2h0KGEsIHgpCisgICAgICAgIGlmIGkgIT0gbGVuKGEpOgorICAgICAgICAgICAgcmV0dXJuIGFbaV0KKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCisgICAgZGVmIGZpbmRfZ2UoYSwgeCk6CisgICAgICAgICdGaW5kIGxlZnRtb3N0IGl0ZW0gZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHgnCisgICAgICAgIGkgPSBiaXNlY3RfbGVmdChhLCB4KQorICAgICAgICBpZiBpICE9IGxlbihhKToKKyAgICAgICAgICAgIHJldHVybiBhW2ldCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKIAogCi0uLiBmdW5jdGlvbjo6IGJpc2VjdCguLi4pCi0KLSAgIEFsaWFzIGZvciA6ZnVuYzpgYmlzZWN0X3JpZ2h0YC4KLQotCi0uLiBmdW5jdGlvbjo6IGluc29ydF9sZWZ0KGxpc3QsIGl0ZW1bLCBsb1ssIGhpXV0pCi0KLSAgIEluc2VydCAqaXRlbSogaW4gKmxpc3QqIGluIHNvcnRlZCBvcmRlci4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bwotICAgYGBsaXN0Lmluc2VydChiaXNlY3QuYmlzZWN0X2xlZnQobGlzdCwgaXRlbSwgbG8sIGhpKSwgaXRlbSlgYC4gIFRoaXMgYXNzdW1lcwotICAgdGhhdCAqbGlzdCogaXMgYWxyZWFkeSBzb3J0ZWQuCi0KLSAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMQotCi0KLS4uIGZ1bmN0aW9uOjogaW5zb3J0X3JpZ2h0KGxpc3QsIGl0ZW1bLCBsb1ssIGhpXV0pCi0KLSAgIFNpbWlsYXIgdG8gOmZ1bmM6YGluc29ydF9sZWZ0YCwgYnV0IGluc2VydGluZyAqaXRlbSogaW4gKmxpc3QqIGFmdGVyIGFueQotICAgZXhpc3RpbmcgZW50cmllcyBvZiAqaXRlbSouCi0KLSAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMQotCi0KLS4uIGZ1bmN0aW9uOjogaW5zb3J0KC4uLikKLQotICAgQWxpYXMgZm9yIDpmdW5jOmBpbnNvcnRfcmlnaHRgLgotCi0KLUV4YW1wbGVzCi0tLS0tLS0tLQorT3RoZXIgRXhhbXBsZXMKKy0tLS0tLS0tLS0tLS0tCiAKIC4uIF9iaXNlY3QtZXhhbXBsZToKIAotVGhlIDpmdW5jOmBiaXNlY3RgIGZ1bmN0aW9uIGlzIGdlbmVyYWxseSB1c2VmdWwgZm9yIGNhdGVnb3JpemluZyBudW1lcmljIGRhdGEuCi1UaGlzIGV4YW1wbGUgdXNlcyA6ZnVuYzpgYmlzZWN0YCB0byBsb29rIHVwIGEgbGV0dGVyIGdyYWRlIGZvciBhbiBleGFtIHRvdGFsCi0oc2F5KSBiYXNlZCBvbiBhIHNldCBvZiBvcmRlcmVkIG51bWVyaWMgYnJlYWtwb2ludHM6IDg1IGFuZCB1cCBpcyBhbiAnQScsIDc1Li44NAotaXMgYSAnQicsIGV0Yy4KK1RoZSA6ZnVuYzpgYmlzZWN0YCBmdW5jdGlvbiBjYW4gYmUgdXNlZnVsIGZvciBudW1lcmljIHRhYmxlIGxvb2t1cHMuIFRoaXMKK2V4YW1wbGUgdXNlcyA6ZnVuYzpgYmlzZWN0YCB0byBsb29rIHVwIGEgbGV0dGVyIGdyYWRlIGZvciBhbiBleGFtIHNjb3JlIChzYXkpCitiYXNlZCBvbiBhIHNldCBvZiBvcmRlcmVkIG51bWVyaWMgYnJlYWtwb2ludHM6IDkwIGFuZCB1cCBpcyBhbiAnQScsIDgwIHRvIDg5IGlzCithICdCJywgYW5kIHNvIG9uOjoKIAotICAgPj4+IGdyYWRlcyA9ICJGRURDQkEiCi0gICA+Pj4gYnJlYWtwb2ludHMgPSBbMzAsIDQ0LCA2NiwgNzUsIDg1XQotICAgPj4+IGZyb20gYmlzZWN0IGltcG9ydCBiaXNlY3QKLSAgID4+PiBkZWYgZ3JhZGUodG90YWwpOgotICAgLi4uICAgICAgICAgICByZXR1cm4gZ3JhZGVzW2Jpc2VjdChicmVha3BvaW50cywgdG90YWwpXQorICAgPj4+IGRlZiBncmFkZShzY29yZSwgYnJlYWtwb2ludHM9WzYwLCA3MCwgODAsIDkwXSwgZ3JhZGVzPSdGRENCQScpOgorICAgLi4uICAgICBpID0gYmlzZWN0KGJyZWFrcG9pbnRzLCBzY29yZSkKKyAgIC4uLiAgICAgcmV0dXJuIGdyYWRlc1tpXQogICAgLi4uCi0gICA+Pj4gZ3JhZGUoNjYpCi0gICAnQycKLSAgID4+PiBtYXAoZ3JhZGUsIFszMywgOTksIDc3LCA0NCwgMTIsIDg4XSkKLSAgIFsnRScsICdBJywgJ0InLCAnRCcsICdGJywgJ0EnXQorICAgPj4+IFtncmFkZShzY29yZSkgZm9yIHNjb3JlIGluIFszMywgOTksIDc3LCA3MCwgODksIDkwLCAxMDBdXQorICAgWydGJywgJ0EnLCAnQycsICdDJywgJ0InLCAnQScsICdBJ10KIAogVW5saWtlIHRoZSA6ZnVuYzpgc29ydGVkYCBmdW5jdGlvbiwgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3IgdGhlIDpmdW5jOmBiaXNlY3RgCiBmdW5jdGlvbnMgdG8gaGF2ZSAqa2V5KiBvciAqcmV2ZXJzZWQqIGFyZ3VtZW50cyBiZWNhdXNlIHRoYXQgd291bGQgbGVhZCB0byBhbgotaW5lZmZpY2VudCBkZXNpZ24gKHN1Y2Nlc3NpdmUgY2FsbHMgdG8gYmlzZWN0IGZ1bmN0aW9ucyB3b3VsZCBub3QgInJlbWVtYmVyIgoraW5lZmZpY2llbnQgZGVzaWduIChzdWNjZXNzaXZlIGNhbGxzIHRvIGJpc2VjdCBmdW5jdGlvbnMgd291bGQgbm90ICJyZW1lbWJlciIKIGFsbCBvZiB0aGUgcHJldmlvdXMga2V5IGxvb2t1cHMpLgogCiBJbnN0ZWFkLCBpdCBpcyBiZXR0ZXIgdG8gc2VhcmNoIGEgbGlzdCBvZiBwcmVjb21wdXRlZCBrZXlzIHRvIGZpbmQgdGhlIGluZGV4CkBAIC0xMDQsMyArMTQ5LDQgQEAKICAgICAoJ3JlZCcsIDUpCiAgICAgPj4+IGRhdGFbYmlzZWN0X2xlZnQoa2V5cywgOCldCiAgICAgKCd5ZWxsb3cnLCA4KQorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9iejIucnN0IGIvRG9jL2xpYnJhcnkvYnoyLnJzdAppbmRleCBiZjhlYmMwLi5lZDI4MWJkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9iejIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2J6Mi5yc3QKQEAgLTYxLDYgKzYxLDExIEBACiAgICByZWFkaW5nLiBJbnN0YW5jZXMgc3VwcG9ydCBpdGVyYXRpb24gaW4gdGhlIHNhbWUgd2F5IGFzIG5vcm1hbCA6Y2xhc3M6YGZpbGVgCiAgICBpbnN0YW5jZXMuCiAKKyAgIDpjbGFzczpgQloyRmlsZWAgc3VwcG9ydHMgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBTdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCisKIAogICAgLi4gbWV0aG9kOjogY2xvc2UoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jYWxlbmRhci5yc3QgYi9Eb2MvbGlicmFyeS9jYWxlbmRhci5yc3QKaW5kZXggZDY1MGZmNC4uMjI0NWU1MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY2FsZW5kYXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NhbGVuZGFyLnJzdApAQCAtMTYsMTIgKzE2LDE2IEBACiBhcmUgZ2l2ZW4gYXMgaW50ZWdlcnMuIEZvciByZWxhdGVkCiBmdW5jdGlvbmFsaXR5LCBzZWUgYWxzbyB0aGUgOm1vZDpgZGF0ZXRpbWVgIGFuZCA6bW9kOmB0aW1lYCBtb2R1bGVzLgogCi1Nb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgY2xhc3NzZXMgcmVseSBvbiB0aGUgOm1vZDpgZGF0ZXRpbWVgIG1vZHVsZSB3aGljaAorTW9zdCBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgcmVseSBvbiB0aGUgOm1vZDpgZGF0ZXRpbWVgIG1vZHVsZSB3aGljaAogdXNlcyBhbiBpZGVhbGl6ZWQgY2FsZW5kYXIsIHRoZSBjdXJyZW50IEdyZWdvcmlhbiBjYWxlbmRhciBpbmRlZmluaXRlbHkgZXh0ZW5kZWQKIGluIGJvdGggZGlyZWN0aW9ucy4gIFRoaXMgbWF0Y2hlcyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgInByb2xlcHRpYyBHcmVnb3JpYW4iCiBjYWxlbmRhciBpbiBEZXJzaG93aXR6IGFuZCBSZWluZ29sZCdzIGJvb2sgIkNhbGVuZHJpY2FsIENhbGN1bGF0aW9ucyIsIHdoZXJlCiBpdCdzIHRoZSBiYXNlIGNhbGVuZGFyIGZvciBhbGwgY29tcHV0YXRpb25zLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBjYWxlbmRhciBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvY2FsZW5kYXIucHk/dmlldz1tYXJrdXA+YF8KIAogLi4gY2xhc3M6OiBDYWxlbmRhcihbZmlyc3R3ZWVrZGF5XSkKIApAQCAtMTc4LDkgKzE4Miw5IEBACiAuLiBjbGFzczo6IExvY2FsZVRleHRDYWxlbmRhcihbZmlyc3R3ZWVrZGF5WywgbG9jYWxlXV0pCiAKICAgIFRoaXMgc3ViY2xhc3Mgb2YgOmNsYXNzOmBUZXh0Q2FsZW5kYXJgIGNhbiBiZSBwYXNzZWQgYSBsb2NhbGUgbmFtZSBpbiB0aGUKLSAgIGNvbnN0cnVjdG9yIGFuZCB3aWxsIHJldHVybiBtb250aCBhbmQgd2Vla2RheSBuYW1lcyBpbiB0aGUgc3BlY2lmaWVkCi0gICBsb2NhbGUuIElmIHRoaXMgbG9jYWxlIGluY2x1ZGVzIGFuIGVuY29kaW5nIGFsbCBzdHJpbmdzIGNvbnRhaW5pbmcgbW9udGggYW5kCi0gICB3ZWVrZGF5IG5hbWVzIHdpbGwgYmUgcmV0dXJuZWQgYXMgdW5pY29kZS4KKyAgIGNvbnN0cnVjdG9yIGFuZCB3aWxsIHJldHVybiBtb250aCBhbmQgd2Vla2RheSBuYW1lcyBpbiB0aGUgc3BlY2lmaWVkIGxvY2FsZS4KKyAgIElmIHRoaXMgbG9jYWxlIGluY2x1ZGVzIGFuIGVuY29kaW5nIGFsbCBzdHJpbmdzIGNvbnRhaW5pbmcgbW9udGggYW5kIHdlZWtkYXkKKyAgIG5hbWVzIHdpbGwgYmUgcmV0dXJuZWQgYXMgdW5pY29kZS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKQEAgLTE5NCw2ICsxOTgsMTMgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKKy4uIG5vdGU6OgorCisgICBUaGUgOm1ldGg6YGZvcm1hdHdlZWtkYXlgIGFuZCA6bWV0aDpgZm9ybWF0bW9udGhuYW1lYCBtZXRob2RzIG9mIHRoZXNlIHR3bworICAgY2xhc3NlcyB0ZW1wb3JhcmlseSBjaGFuZ2UgdGhlIGN1cnJlbnQgbG9jYWxlIHRvIHRoZSBnaXZlbiAqbG9jYWxlKi4gIEJlY2F1c2UKKyAgIHRoZSBjdXJyZW50IGxvY2FsZSBpcyBhIHByb2Nlc3Mtd2lkZSBzZXR0aW5nLCB0aGV5IGFyZSBub3QgdGhyZWFkLXNhZmUuCisKKwogRm9yIHNpbXBsZSB0ZXh0IGNhbGVuZGFycyB0aGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucy4KIAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jZ2kucnN0IGIvRG9jL2xpYnJhcnkvY2dpLnJzdAppbmRleCBmMGMwYTA3Li4xNDljZjIzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jZ2kucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NnaS5yc3QKQEAgLTM1NCw3ICszNTQsNyBAQAogICAgdGhhdCBzaW5nbGUgcXVvdGVzIGFyZSBuZXZlciB0cmFuc2xhdGVkLgogCiAgICBJZiB0aGUgdmFsdWUgdG8gYmUgcXVvdGVkIG1pZ2h0IGluY2x1ZGUgc2luZ2xlLSBvciBkb3VibGUtcXVvdGUgY2hhcmFjdGVycywKLSAgIG9yIGJvdGgsIGNvbnNpZGVyIHVzaW5nIHRoZSA6ZnVuYzpgcXVvdGVhdHRyYCBmdW5jdGlvbiBpbiB0aGUKKyAgIG9yIGJvdGgsIGNvbnNpZGVyIHVzaW5nIHRoZSA6ZnVuYzpgfnhtbC5zYXguc2F4dXRpbHMucXVvdGVhdHRyYCBmdW5jdGlvbiBpbiB0aGUKICAgIDptb2Q6YHhtbC5zYXguc2F4dXRpbHNgIG1vZHVsZSBpbnN0ZWFkLgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NtZC5yc3QgYi9Eb2MvbGlicmFyeS9jbWQucnN0CmluZGV4IGNjNDk5OTAuLmIzNTM3M2MgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NtZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY21kLnJzdApAQCAtMTIsNiArMTIsMTAgQEAKIHRvb2xzLCBhbmQgcHJvdG90eXBlcyB0aGF0IHdpbGwgbGF0ZXIgYmUgd3JhcHBlZCBpbiBhIG1vcmUgc29waGlzdGljYXRlZAogaW50ZXJmYWNlLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBjbWQgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL2NtZC5weT92aWV3PW1hcmt1cD5gXwogCiAuLiBjbGFzczo6IENtZChbY29tcGxldGVrZXlbLCBzdGRpblssIHN0ZG91dF1dXSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdCBiL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKaW5kZXggZDk2NjI2Mi4uNzFiZjI1YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CkBAIC03NjAsNyArNzYwLDcgQEAKIAogVW5pY29kZSBzdHJpbmdzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBhcyBzZXF1ZW5jZXMgb2YgY29kZXBvaW50cyAodG8gYmUgcHJlY2lzZQogYXMgOmN0eXBlOmBQeV9VTklDT0RFYCBhcnJheXMpLiBEZXBlbmRpbmcgb24gdGhlIHdheSBQeXRob24gaXMgY29tcGlsZWQgKGVpdGhlcgotdmlhIDpvcHRpb246YC0tZW5hYmxlLXVuaWNvZGU9dWNzMmAgb3IgOm9wdGlvbjpgLS1lbmFibGUtdW5pY29kZT11Y3M0YCwgd2l0aCB0aGUKK3ZpYSBgYC0tZW5hYmxlLXVuaWNvZGU9dWNzMmBgIG9yIGBgLS1lbmFibGUtdW5pY29kZT11Y3M0YGAsIHdpdGggdGhlCiBmb3JtZXIgYmVpbmcgdGhlIGRlZmF1bHQpIDpjdHlwZTpgUHlfVU5JQ09ERWAgaXMgZWl0aGVyIGEgMTYtYml0IG9yIDMyLWJpdCBkYXRhCiB0eXBlLiBPbmNlIGEgVW5pY29kZSBvYmplY3QgaXMgdXNlZCBvdXRzaWRlIG9mIENQVSBhbmQgbWVtb3J5LCBDUFUgZW5kaWFubmVzcwogYW5kIGhvdyB0aGVzZSBhcnJheXMgYXJlIHN0b3JlZCBhcyBieXRlcyBiZWNvbWUgYW4gaXNzdWUuICBUcmFuc2Zvcm1pbmcgYQpAQCAtOTA4LDYgKzkwOCw4IEBACiB8IGNwNTAwICAgICAgICAgICB8IEVCQ0RJQy1DUC1CRSwgRUJDRElDLUNQLUNILCAgICB8IFdlc3Rlcm4gRXVyb3BlICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICB8IElCTTUwMCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGNwNzIwICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFyYWJpYyAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGNwNzM3ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdyZWVrICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGNwNzc1ICAgICAgICAgICB8IElCTTc3NSAgICAgICAgICAgICAgICAgICAgICAgICB8IEJhbHRpYyBsYW5ndWFnZXMgICAgICAgICAgICAgICB8CkBAIC05MjMsNiArOTI1LDggQEAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3A4NTcgICAgICAgICAgIHwgODU3LCBJQk04NTcgICAgICAgICAgICAgICAgICAgIHwgVHVya2lzaCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgY3A4NTggICAgICAgICAgIHwgODU4LCBJQk04NTggICAgICAgICAgICAgICAgICAgIHwgV2VzdGVybiBFdXJvcGUgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3A4NjAgICAgICAgICAgIHwgODYwLCBJQk04NjAgICAgICAgICAgICAgICAgICAgIHwgUG9ydHVndWVzZSAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3A4NjEgICAgICAgICAgIHwgODYxLCBDUC1JUywgSUJNODYxICAgICAgICAgICAgIHwgSWNlbGFuZGljICAgICAgICAgICAgICAgICAgICAgIHwKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdAppbmRleCBiNzRjMjRkLi4zOGQ5ZmE1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CkBAIC0xNSwxNDQgKzE1LDIwNiBAQAogICAgaW1wb3J0IGl0ZXJ0b29scwogICAgX19uYW1lX18gPSAnPGRvY3Rlc3Q+JwogCi1UaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGhpZ2gtcGVyZm9ybWFuY2UgY29udGFpbmVyIGRhdGF0eXBlcy4gIEN1cnJlbnRseSwKLXRoZXJlIGFyZSB0d28gZGF0YXR5cGVzLCA6Y2xhc3M6YGRlcXVlYCBhbmQgOmNsYXNzOmBkZWZhdWx0ZGljdGAsIGFuZAotb25lIGRhdGF0eXBlIGZhY3RvcnkgZnVuY3Rpb24sIDpmdW5jOmBuYW1lZHR1cGxlYC4KK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgc3BlY2lhbGl6ZWQgY29udGFpbmVyIGRhdGF0eXBlcyBwcm92aWRpbmcgYWx0ZXJuYXRpdmVzIHRvCitQeXRob24ncyBnZW5lcmFsIHB1cnBvc2UgYnVpbHQtaW4gY29udGFpbmVycywgOmNsYXNzOmBkaWN0YCwgOmNsYXNzOmBsaXN0YCwKKzpjbGFzczpgc2V0YCwgYW5kIDpjbGFzczpgdHVwbGVgLgogCi0uLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNQotICAgQWRkZWQgOmNsYXNzOmBkZWZhdWx0ZGljdGAuCis9PT09PT09PT09PT09PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6ZnVuYzpgbmFtZWR0dXBsZWAgICAgICBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyB0dXBsZSBzdWJjbGFzc2VzIHdpdGggbmFtZWQgZmllbGRzICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi42Cis6Y2xhc3M6YGRlcXVlYCAgICAgICAgICBsaXN0LWxpa2UgY29udGFpbmVyIHdpdGggZmFzdCBhcHBlbmRzIGFuZCBwb3BzIG9uIGVpdGhlciBlbmQgICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi40Cis6Y2xhc3M6YENvdW50ZXJgICAgICAgICBkaWN0IHN1YmNsYXNzIGZvciBjb3VudGluZyBoYXNoYWJsZSBvYmplY3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43Cis6Y2xhc3M6YE9yZGVyZWREaWN0YCAgICBkaWN0IHN1YmNsYXNzIHRoYXQgcmVtZW1iZXJzIHRoZSBvcmRlciBlbnRyaWVzIHdlcmUgYWRkZWQgICAgICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43Cis6Y2xhc3M6YGRlZmF1bHRkaWN0YCAgICBkaWN0IHN1YmNsYXNzIHRoYXQgY2FsbHMgYSBmYWN0b3J5IGZ1bmN0aW9uIHRvIHN1cHBseSBtaXNzaW5nIHZhbHVlcyAgLi4gdmVyc2lvbmFkZGVkOjogMi41Cis9PT09PT09PT09PT09PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLS4uIHZlcnNpb25jaGFuZ2VkOjogMi42Ci0gICBBZGRlZCA6ZnVuYzpgbmFtZWR0dXBsZWAuCi0KLVRoZSBzcGVjaWFsaXplZCBjb250YWluZXJzIHByb3ZpZGVkIGluIHRoaXMgbW9kdWxlIHByb3ZpZGUgYWx0ZXJuYXRpdmVzCi10byBQeXRob24ncyBnZW5lcmFsIHB1cnBvc2UgYnVpbHQtaW4gY29udGFpbmVycywgOmNsYXNzOmBkaWN0YCwKLTpjbGFzczpgbGlzdGAsIDpjbGFzczpgc2V0YCwgYW5kIDpjbGFzczpgdHVwbGVgLgotCi1CZXNpZGVzIHRoZSBjb250YWluZXJzIHByb3ZpZGVkIGhlcmUsIHRoZSBvcHRpb25hbCA6bW9kOmBic2RkYmAKLW1vZHVsZSBvZmZlcnMgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIGluLW1lbW9yeSBvciBmaWxlIGJhc2VkIG9yZGVyZWQKLWRpY3Rpb25hcmllcyB3aXRoIHN0cmluZyBrZXlzIHVzaW5nIHRoZSA6bWV0aDpgYnNkZGIuYnRvcGVuYCBtZXRob2QuCi0KLUluIGFkZGl0aW9uIHRvIGNvbnRhaW5lcnMsIHRoZSBjb2xsZWN0aW9ucyBtb2R1bGUgcHJvdmlkZXMgc29tZSBBQkNzCi0oYWJzdHJhY3QgYmFzZSBjbGFzc2VzKSB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3Qgd2hldGhlciBhIGNsYXNzCi1wcm92aWRlcyBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLCBmb3IgZXhhbXBsZSwgaXMgaXQgaGFzaGFibGUgb3IKLWEgbWFwcGluZy4KLQotLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKLSAgIEFkZGVkIGFic3RyYWN0IGJhc2UgY2xhc3Nlcy4KLQotQUJDcyAtIGFic3RyYWN0IGJhc2UgY2xhc3NlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgY29sbGVjdGlvbnMgbW9kdWxlIG9mZmVycyB0aGUgZm9sbG93aW5nIEFCQ3M6Ci0KLT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQUJDICAgICAgICAgICAgICAgICAgICAgICAgSW5oZXJpdHMgICAgICAgICAgICAgICBBYnN0cmFjdCBNZXRob2RzICAgICAgICBNaXhpbiBNZXRob2RzCi09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTpjbGFzczpgQ29udGFpbmVyYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYAotOmNsYXNzOmBIYXNoYWJsZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9faGFzaF9fYGAKLTpjbGFzczpgSXRlcmFibGVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2l0ZXJfX2BgCi06Y2xhc3M6YEl0ZXJhdG9yYCAgICAgICAgICA6Y2xhc3M6YEl0ZXJhYmxlYCAgICAgIGBgbmV4dGBgICAgICAgICAgICAgICAgIGBgX19pdGVyX19gYAotOmNsYXNzOmBTaXplZGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fbGVuX19gYAotOmNsYXNzOmBDYWxsYWJsZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fY2FsbF9fYGAKLQotOmNsYXNzOmBTZXF1ZW5jZWAgICAgICAgICAgOmNsYXNzOmBTaXplZGAsICAgICAgICBgYF9fZ2V0aXRlbV9fYGAgICAgICAgICBgYF9fY29udGFpbnNfX2BgLiBgYF9faXRlcl9fYGAsIGBgX19yZXZlcnNlZF9fYGAuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YEl0ZXJhYmxlYCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgaW5kZXhgYCwgYW5kIGBgY291bnRgYAotICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzOmBDb250YWluZXJgCi0KLTpjbGFzczpgTXV0YWJsZVNlcXVlbmNlYCAgIDpjbGFzczpgU2VxdWVuY2VgICAgICAgYGBfX3NldGl0ZW1fX2BgICAgICAgICAgSW5oZXJpdGVkIFNlcXVlbmNlIG1ldGhvZHMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19kZWxpdGVtX19gYCwgICAgICAgIGBgYXBwZW5kYGAsIGBgcmV2ZXJzZWBgLCBgYGV4dGVuZGBgLCBgYHBvcGBgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYGBpbnNlcnRgYCAgICAgICAgICBgYHJlbW92ZWBgLCBhbmQgYGBfX2lhZGRfX2BgCi0KLTpjbGFzczpgU2V0YCAgICAgICAgICAgICAgIDpjbGFzczpgU2l6ZWRgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2xlX19gYCwgYGBfX2x0X19gYCwgYGBfX2VxX19gYCwgYGBfX25lX19gYCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgSXRlcmFibGVgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2d0X19gYCwgYGBfX2dlX19gYCwgYGBfX2FuZF9fYGAsIGBgX19vcl9fYGAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgQ29udGFpbmVyYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX3N1Yl9fYGAsIGBgX194b3JfX2BgLCBhbmQgYGBpc2Rpc2pvaW50YGAKLQotOmNsYXNzOmBNdXRhYmxlU2V0YCAgICAgICAgOmNsYXNzOmBTZXRgICAgICAgICAgICBgYGFkZGBgIGFuZCAgICAgICAgICAgICBJbmhlcml0ZWQgU2V0IG1ldGhvZHMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgZGlzY2FyZGBgICAgICAgICAgICAgIGBgY2xlYXJgYCwgYGBwb3BgYCwgYGByZW1vdmVgYCwgYGBfX2lvcl9fYGAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19pYW5kX19gYCwgYGBfX2l4b3JfX2BgLCBhbmQgYGBfX2lzdWJfX2BgCi0KLTpjbGFzczpgTWFwcGluZ2AgICAgICAgICAgIDpjbGFzczpgU2l6ZWRgLCAgICAgICAgYGBfX2dldGl0ZW1fX2BgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYCwgYGBrZXlzYGAsIGBgaXRlbXNgYCwgYGB2YWx1ZXNgYCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgSXRlcmFibGVgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBnZXRgYCwgYGBfX2VxX19gYCwgYW5kIGBgX19uZV9fYGAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgQ29udGFpbmVyYAotCi06Y2xhc3M6YE11dGFibGVNYXBwaW5nYCAgICA6Y2xhc3M6YE1hcHBpbmdgICAgICAgIGBgX19zZXRpdGVtX19gYCBhbmQgICAgIEluaGVyaXRlZCBNYXBwaW5nIG1ldGhvZHMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19kZWxpdGVtX19gYCAgICAgICAgIGBgcG9wYGAsIGBgcG9waXRlbWBgLCBgYGNsZWFyYGAsIGBgdXBkYXRlYGAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgYHNldGRlZmF1bHRgYAotCi0KLTpjbGFzczpgTWFwcGluZ1ZpZXdgICAgICAgIDpjbGFzczpgU2l6ZWRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2xlbl9fYGAKLTpjbGFzczpgS2V5c1ZpZXdgICAgICAgICAgIDpjbGFzczpgTWFwcGluZ1ZpZXdgLCAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgU2V0YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2l0ZXJfX2BgCi06Y2xhc3M6YEl0ZW1zVmlld2AgICAgICAgICA6Y2xhc3M6YE1hcHBpbmdWaWV3YCwgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19jb250YWluc19fYGAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YFNldGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19pdGVyX19gYAotOmNsYXNzOmBWYWx1ZXNWaWV3YCAgICAgICAgOmNsYXNzOmBNYXBwaW5nVmlld2AgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fY29udGFpbnNfX2BgLCBgYF9faXRlcl9fYGAKLT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGVzZSBBQkNzIGFsbG93IHVzIHRvIGFzayBjbGFzc2VzIG9yIGluc3RhbmNlcyBpZiB0aGV5IHByb3ZpZGUKLXBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSwgZm9yIGV4YW1wbGU6OgotCi0gICAgc2l6ZSA9IE5vbmUKLSAgICBpZiBpc2luc3RhbmNlKG15dmFyLCBjb2xsZWN0aW9ucy5TaXplZCk6Ci0gICAgICAgIHNpemUgPSBsZW4obXl2YXIpCi0KLVNldmVyYWwgb2YgdGhlIEFCQ3MgYXJlIGFsc28gdXNlZnVsIGFzIG1peGlucyB0aGF0IG1ha2UgaXQgZWFzaWVyIHRvIGRldmVsb3AKLWNsYXNzZXMgc3VwcG9ydGluZyBjb250YWluZXIgQVBJcy4gIEZvciBleGFtcGxlLCB0byB3cml0ZSBhIGNsYXNzIHN1cHBvcnRpbmcKLXRoZSBmdWxsIDpjbGFzczpgU2V0YCBBUEksIGl0IG9ubHkgbmVjZXNzYXJ5IHRvIHN1cHBseSB0aGUgdGhyZWUgdW5kZXJseWluZwotYWJzdHJhY3QgbWV0aG9kczogOm1ldGg6YF9fY29udGFpbnNfX2AsIDptZXRoOmBfX2l0ZXJfX2AsIGFuZCA6bWV0aDpgX19sZW5fX2AuCi1UaGUgQUJDIHN1cHBsaWVzIHRoZSByZW1haW5pbmcgbWV0aG9kcyBzdWNoIGFzIDptZXRoOmBfX2FuZF9fYCBhbmQKLTptZXRoOmBpc2Rpc2pvaW50YCA6OgotCi0gICAgY2xhc3MgTGlzdEJhc2VkU2V0KGNvbGxlY3Rpb25zLlNldCk6Ci0gICAgICAgICAnJycgQWx0ZXJuYXRlIHNldCBpbXBsZW1lbnRhdGlvbiBmYXZvcmluZyBzcGFjZSBvdmVyIHNwZWVkCi0gICAgICAgICAgICAgYW5kIG5vdCByZXF1aXJpbmcgdGhlIHNldCBlbGVtZW50cyB0byBiZSBoYXNoYWJsZS4gJycnCi0gICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGUpOgotICAgICAgICAgICAgIHNlbGYuZWxlbWVudHMgPSBsc3QgPSBbXQotICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdGVyYWJsZToKLSAgICAgICAgICAgICAgICAgaWYgdmFsdWUgbm90IGluIGxzdDoKLSAgICAgICAgICAgICAgICAgICAgIGxzdC5hcHBlbmQodmFsdWUpCi0gICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5lbGVtZW50cykKLSAgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgotICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbiBzZWxmLmVsZW1lbnRzCi0gICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuZWxlbWVudHMpCi0KLSAgICBzMSA9IExpc3RCYXNlZFNldCgnYWJjZGVmJykKLSAgICBzMiA9IExpc3RCYXNlZFNldCgnZGVmZ2hpJykKLSAgICBvdmVybGFwID0gczEgJiBzMiAgICAgICAgICAgICMgVGhlIF9fYW5kX18oKSBtZXRob2QgaXMgc3VwcG9ydGVkIGF1dG9tYXRpY2FsbHkKLQotTm90ZXMgb24gdXNpbmcgOmNsYXNzOmBTZXRgIGFuZCA6Y2xhc3M6YE11dGFibGVTZXRgIGFzIGEgbWl4aW46Ci0KLSgxKQotICAgU2luY2Ugc29tZSBzZXQgb3BlcmF0aW9ucyBjcmVhdGUgbmV3IHNldHMsIHRoZSBkZWZhdWx0IG1peGluIG1ldGhvZHMgbmVlZAotICAgYSB3YXkgdG8gY3JlYXRlIG5ldyBpbnN0YW5jZXMgZnJvbSBhbiBpdGVyYWJsZS4gVGhlIGNsYXNzIGNvbnN0cnVjdG9yIGlzCi0gICBhc3N1bWVkIHRvIGhhdmUgYSBzaWduYXR1cmUgaW4gdGhlIGZvcm0gYGBDbGFzc05hbWUoaXRlcmFibGUpYGAuCi0gICBUaGF0IGFzc3VtcHRpb24gaXMgZmFjdG9yZWQtb3V0IHRvIGFuIGludGVybmFsIGNsYXNzbWV0aG9kIGNhbGxlZAotICAgOm1ldGg6YF9mcm9tX2l0ZXJhYmxlYCB3aGljaCBjYWxscyBgYGNscyhpdGVyYWJsZSlgYCB0byBwcm9kdWNlIGEgbmV3IHNldC4KLSAgIElmIHRoZSA6Y2xhc3M6YFNldGAgbWl4aW4gaXMgYmVpbmcgdXNlZCBpbiBhIGNsYXNzIHdpdGggYSBkaWZmZXJlbnQKLSAgIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSwgeW91IHdpbGwgbmVlZCB0byBvdmVycmlkZSA6bWV0aDpgZnJvbV9pdGVyYWJsZWAKLSAgIHdpdGggYSBjbGFzc21ldGhvZCB0aGF0IGNhbiBjb25zdHJ1Y3QgbmV3IGluc3RhbmNlcyBmcm9tCi0gICBhbiBpdGVyYWJsZSBhcmd1bWVudC4KLQotKDIpCi0gICBUbyBvdmVycmlkZSB0aGUgY29tcGFyaXNvbnMgKHByZXN1bWFibHkgZm9yIHNwZWVkLCBhcyB0aGUKLSAgIHNlbWFudGljcyBhcmUgZml4ZWQpLCByZWRlZmluZSA6bWV0aDpgX19sZV9fYCBhbmQKLSAgIHRoZW4gdGhlIG90aGVyIG9wZXJhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IGZvbGxvdyBzdWl0LgotCi0oMykKLSAgIFRoZSA6Y2xhc3M6YFNldGAgbWl4aW4gcHJvdmlkZXMgYSA6bWV0aDpgX2hhc2hgIG1ldGhvZCB0byBjb21wdXRlIGEgaGFzaCB2YWx1ZQotICAgZm9yIHRoZSBzZXQ7IGhvd2V2ZXIsIDptZXRoOmBfX2hhc2hfX2AgaXMgbm90IGRlZmluZWQgYmVjYXVzZSBub3QgYWxsIHNldHMKLSAgIGFyZSBoYXNoYWJsZSBvciBpbW11dGFibGUuICBUbyBhZGQgc2V0IGhhc2hhYmlsdHkgdXNpbmcgbWl4aW5zLAotICAgaW5oZXJpdCBmcm9tIGJvdGggOm1ldGg6YFNldGAgYW5kIDptZXRoOmBIYXNoYWJsZWAsIHRoZW4gZGVmaW5lCi0gICBgYF9faGFzaF9fID0gU2V0Ll9oYXNoYGAuCitJbiBhZGRpdGlvbiB0byB0aGUgY29uY3JldGUgY29udGFpbmVyIGNsYXNzZXMsIHRoZSBjb2xsZWN0aW9ucyBtb2R1bGUgcHJvdmlkZXMKKzpyZWY6YGFic3RyYWN0LWJhc2UtY2xhc3Nlc2AgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHdoZXRoZXIgYSBjbGFzcyBwcm92aWRlcyBhCitwYXJ0aWN1bGFyIGludGVyZmFjZSwgZm9yIGV4YW1wbGUsIHdoZXRoZXIgaXQgaXMgaGFzaGFibGUgb3IgYSBtYXBwaW5nLgogCiAuLiBzZWVhbHNvOjoKIAotICAgKiBgT3JkZXJlZFNldCByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NjY5NC8+YF8gZm9yIGFuCi0gICAgIGV4YW1wbGUgYnVpbHQgb24gOmNsYXNzOmBNdXRhYmxlU2V0YC4KKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgY29sbGVjdGlvbnMgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL2NvbGxlY3Rpb25zLnB5P3ZpZXc9bWFya3VwPmBfCiAKLSAgICogRm9yIG1vcmUgYWJvdXQgQUJDcywgc2VlIHRoZSA6bW9kOmBhYmNgIG1vZHVsZSBhbmQgOnBlcDpgMzExOWAuCis6Y2xhc3M6YENvdW50ZXJgIG9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGNvdW50ZXIgdG9vbCBpcyBwcm92aWRlZCB0byBzdXBwb3J0IGNvbnZlbmllbnQgYW5kIHJhcGlkIHRhbGxpZXMuCitGb3IgZXhhbXBsZTo6CisKKyAgICA+Pj4gIyBUYWxseSBvY2N1cnJlbmNlcyBvZiB3b3JkcyBpbiBhIGxpc3QKKyAgICA+Pj4gY250ID0gQ291bnRlcigpCisgICAgPj4+IGZvciB3b3JkIGluIFsncmVkJywgJ2JsdWUnLCAncmVkJywgJ2dyZWVuJywgJ2JsdWUnLCAnYmx1ZSddOgorICAgIC4uLiAgICAgY250W3dvcmRdICs9IDEKKyAgICA+Pj4gY250CisgICAgQ291bnRlcih7J2JsdWUnOiAzLCAncmVkJzogMiwgJ2dyZWVuJzogMX0pCisKKyAgICA+Pj4gIyBGaW5kIHRoZSB0ZW4gbW9zdCBjb21tb24gd29yZHMgaW4gSGFtbGV0CisgICAgPj4+IGltcG9ydCByZQorICAgID4+PiB3b3JkcyA9IHJlLmZpbmRhbGwoJ1x3KycsIG9wZW4oJ2hhbWxldC50eHQnKS5yZWFkKCkubG93ZXIoKSkKKyAgICA+Pj4gQ291bnRlcih3b3JkcykubW9zdF9jb21tb24oMTApCisgICAgWygndGhlJywgMTE0MyksICgnYW5kJywgOTY2KSwgKCd0bycsIDc2MiksICgnb2YnLCA2NjkpLCAoJ2knLCA2MzEpLAorICAgICAoJ3lvdScsIDU1NCksICAoJ2EnLCA1NDYpLCAoJ215JywgNTE0KSwgKCdoYW1sZXQnLCA0NzEpLCAoJ2luJywgNDUxKV0KKworLi4gY2xhc3M6OiBDb3VudGVyKFtpdGVyYWJsZS1vci1tYXBwaW5nXSkKKworICAgQSA6Y2xhc3M6YENvdW50ZXJgIGlzIGEgOmNsYXNzOmBkaWN0YCBzdWJjbGFzcyBmb3IgY291bnRpbmcgaGFzaGFibGUgb2JqZWN0cy4KKyAgIEl0IGlzIGFuIHVub3JkZXJlZCBjb2xsZWN0aW9uIHdoZXJlIGVsZW1lbnRzIGFyZSBzdG9yZWQgYXMgZGljdGlvbmFyeSBrZXlzCisgICBhbmQgdGhlaXIgY291bnRzIGFyZSBzdG9yZWQgYXMgZGljdGlvbmFyeSB2YWx1ZXMuICBDb3VudHMgYXJlIGFsbG93ZWQgdG8gYmUKKyAgIGFueSBpbnRlZ2VyIHZhbHVlIGluY2x1ZGluZyB6ZXJvIG9yIG5lZ2F0aXZlIGNvdW50cy4gIFRoZSA6Y2xhc3M6YENvdW50ZXJgCisgICBjbGFzcyBpcyBzaW1pbGFyIHRvIGJhZ3Mgb3IgbXVsdGlzZXRzIGluIG90aGVyIGxhbmd1YWdlcy4KKworICAgRWxlbWVudHMgYXJlIGNvdW50ZWQgZnJvbSBhbiAqaXRlcmFibGUqIG9yIGluaXRpYWxpemVkIGZyb20gYW5vdGhlcgorICAgKm1hcHBpbmcqIChvciBjb3VudGVyKToKKworICAgICAgICA+Pj4gYyA9IENvdW50ZXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBuZXcsIGVtcHR5IGNvdW50ZXIKKyAgICAgICAgPj4+IGMgPSBDb3VudGVyKCdnYWxsYWhhZCcpICAgICAgICAgICAgICAgICAjIGEgbmV3IGNvdW50ZXIgZnJvbSBhbiBpdGVyYWJsZQorICAgICAgICA+Pj4gYyA9IENvdW50ZXIoeydyZWQnOiA0LCAnYmx1ZSc6IDJ9KSAgICAgICMgYSBuZXcgY291bnRlciBmcm9tIGEgbWFwcGluZworICAgICAgICA+Pj4gYyA9IENvdW50ZXIoY2F0cz00LCBkb2dzPTgpICAgICAgICAgICAgICMgYSBuZXcgY291bnRlciBmcm9tIGtleXdvcmQgYXJncworCisgICBDb3VudGVyIG9iamVjdHMgaGF2ZSBhIGRpY3Rpb25hcnkgaW50ZXJmYWNlIGV4Y2VwdCB0aGF0IHRoZXkgcmV0dXJuIGEgemVybworICAgY291bnQgZm9yIG1pc3NpbmcgaXRlbXMgaW5zdGVhZCBvZiByYWlzaW5nIGEgOmV4YzpgS2V5RXJyb3JgOgorCisgICAgICAgID4+PiBjID0gQ291bnRlcihbJ2VnZ3MnLCAnaGFtJ10pCisgICAgICAgID4+PiBjWydiYWNvbiddICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb3VudCBvZiBhIG1pc3NpbmcgZWxlbWVudCBpcyB6ZXJvCisgICAgICAgIDAKKworICAgU2V0dGluZyBhIGNvdW50IHRvIHplcm8gZG9lcyBub3QgcmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSBhIGNvdW50ZXIuCisgICBVc2UgYGBkZWxgYCB0byByZW1vdmUgaXQgZW50aXJlbHk6CisKKyAgICAgICAgPj4+IGNbJ3NhdXNhZ2UnXSA9IDAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvdW50ZXIgZW50cnkgd2l0aCBhIHplcm8gY291bnQKKyAgICAgICAgPj4+IGRlbCBjWydzYXVzYWdlJ10gICAgICAgICAgICAgICAgICAgICAgICAjIGRlbCBhY3R1YWxseSByZW1vdmVzIHRoZSBlbnRyeQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICBDb3VudGVyIG9iamVjdHMgc3VwcG9ydCB0aHJlZSBtZXRob2RzIGJleW9uZCB0aG9zZSBhdmFpbGFibGUgZm9yIGFsbAorICAgZGljdGlvbmFyaWVzOgorCisgICAuLiBtZXRob2Q6OiBlbGVtZW50cygpCisKKyAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIGVsZW1lbnRzIHJlcGVhdGluZyBlYWNoIGFzIG1hbnkgdGltZXMgYXMgaXRzCisgICAgICBjb3VudC4gIEVsZW1lbnRzIGFyZSByZXR1cm5lZCBpbiBhcmJpdHJhcnkgb3JkZXIuICBJZiBhbiBlbGVtZW50J3MgY291bnQKKyAgICAgIGlzIGxlc3MgdGhhbiBvbmUsIDptZXRoOmBlbGVtZW50c2Agd2lsbCBpZ25vcmUgaXQuCisKKyAgICAgICAgICAgID4+PiBjID0gQ291bnRlcihhPTQsIGI9MiwgYz0wLCBkPS0yKQorICAgICAgICAgICAgPj4+IGxpc3QoYy5lbGVtZW50cygpKQorICAgICAgICAgICAgWydhJywgJ2EnLCAnYScsICdhJywgJ2InLCAnYiddCisKKyAgIC4uIG1ldGhvZDo6IG1vc3RfY29tbW9uKFtuXSkKKworICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgKm4qIG1vc3QgY29tbW9uIGVsZW1lbnRzIGFuZCB0aGVpciBjb3VudHMgZnJvbSB0aGUKKyAgICAgIG1vc3QgY29tbW9uIHRvIHRoZSBsZWFzdC4gIElmICpuKiBpcyBub3Qgc3BlY2lmaWVkLCA6ZnVuYzpgbW9zdF9jb21tb25gCisgICAgICByZXR1cm5zICphbGwqIGVsZW1lbnRzIGluIHRoZSBjb3VudGVyLiAgRWxlbWVudHMgd2l0aCBlcXVhbCBjb3VudHMgYXJlCisgICAgICBvcmRlcmVkIGFyYml0cmFyaWx5OgorCisgICAgICAgICAgICA+Pj4gQ291bnRlcignYWJyYWNhZGFicmEnKS5tb3N0X2NvbW1vbigzKQorICAgICAgICAgICAgWygnYScsIDUpLCAoJ3InLCAyKSwgKCdiJywgMildCisKKyAgIC4uIG1ldGhvZDo6IHN1YnRyYWN0KFtpdGVyYWJsZS1vci1tYXBwaW5nXSkKKworICAgICAgRWxlbWVudHMgYXJlIHN1YnRyYWN0ZWQgZnJvbSBhbiAqaXRlcmFibGUqIG9yIGZyb20gYW5vdGhlciAqbWFwcGluZyoKKyAgICAgIChvciBjb3VudGVyKS4gIExpa2UgOm1ldGg6YGRpY3QudXBkYXRlYCBidXQgc3VidHJhY3RzIGNvdW50cyBpbnN0ZWFkCisgICAgICBvZiByZXBsYWNpbmcgdGhlbS4gIEJvdGggaW5wdXRzIGFuZCBvdXRwdXRzIG1heSBiZSB6ZXJvIG9yIG5lZ2F0aXZlLgorCisgICAgICAgICAgICA+Pj4gYyA9IENvdW50ZXIoYT00LCBiPTIsIGM9MCwgZD0tMikKKyAgICAgICAgICAgID4+PiBkID0gQ291bnRlcihhPTEsIGI9MiwgYz0zLCBkPTQpCisgICAgICAgICAgICA+Pj4gYy5zdWJ0cmFjdChkKQorICAgICAgICAgICAgQ291bnRlcih7J2EnOiAzLCAnYic6IDAsICdjJzogLTMsICdkJzogLTZ9KQorCisgICBUaGUgdXN1YWwgZGljdGlvbmFyeSBtZXRob2RzIGFyZSBhdmFpbGFibGUgZm9yIDpjbGFzczpgQ291bnRlcmAgb2JqZWN0cworICAgZXhjZXB0IGZvciB0d28gd2hpY2ggd29yayBkaWZmZXJlbnRseSBmb3IgY291bnRlcnMuCisKKyAgIC4uIG1ldGhvZDo6IGZyb21rZXlzKGl0ZXJhYmxlKQorCisgICAgICBUaGlzIGNsYXNzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIDpjbGFzczpgQ291bnRlcmAgb2JqZWN0cy4KKworICAgLi4gbWV0aG9kOjogdXBkYXRlKFtpdGVyYWJsZS1vci1tYXBwaW5nXSkKKworICAgICAgRWxlbWVudHMgYXJlIGNvdW50ZWQgZnJvbSBhbiAqaXRlcmFibGUqIG9yIGFkZGVkLWluIGZyb20gYW5vdGhlcgorICAgICAgKm1hcHBpbmcqIChvciBjb3VudGVyKS4gIExpa2UgOm1ldGg6YGRpY3QudXBkYXRlYCBidXQgYWRkcyBjb3VudHMKKyAgICAgIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uICBBbHNvLCB0aGUgKml0ZXJhYmxlKiBpcyBleHBlY3RlZCB0byBiZSBhCisgICAgICBzZXF1ZW5jZSBvZiBlbGVtZW50cywgbm90IGEgc2VxdWVuY2Ugb2YgYGAoa2V5LCB2YWx1ZSlgYCBwYWlycy4KKworQ29tbW9uIHBhdHRlcm5zIGZvciB3b3JraW5nIHdpdGggOmNsYXNzOmBDb3VudGVyYCBvYmplY3RzOjoKKworICAgIHN1bShjLnZhbHVlcygpKSAgICAgICAgICAgICAgICAgIyB0b3RhbCBvZiBhbGwgY291bnRzCisgICAgYy5jbGVhcigpICAgICAgICAgICAgICAgICAgICAgICAjIHJlc2V0IGFsbCBjb3VudHMKKyAgICBsaXN0KGMpICAgICAgICAgICAgICAgICAgICAgICAgICMgbGlzdCB1bmlxdWUgZWxlbWVudHMKKyAgICBzZXQoYykgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCB0byBhIHNldAorICAgIGRpY3QoYykgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHRvIGEgcmVndWxhciBkaWN0aW9uYXJ5CisgICAgYy5pdGVtcygpICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgdG8gYSBsaXN0IG9mIChlbGVtLCBjbnQpIHBhaXJzCisgICAgQ291bnRlcihkaWN0KGxpc3Rfb2ZfcGFpcnMpKSAgICAjIGNvbnZlcnQgZnJvbSBhIGxpc3Qgb2YgKGVsZW0sIGNudCkgcGFpcnMKKyAgICBjLm1vc3RfY29tbW9uKClbOi1uOi0xXSAgICAgICAgICMgbiBsZWFzdCBjb21tb24gZWxlbWVudHMKKyAgICBjICs9IENvdW50ZXIoKSAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIHplcm8gYW5kIG5lZ2F0aXZlIGNvdW50cworCitTZXZlcmFsIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zIGFyZSBwcm92aWRlZCBmb3IgY29tYmluaW5nIDpjbGFzczpgQ291bnRlcmAKK29iamVjdHMgdG8gcHJvZHVjZSBtdWx0aXNldHMgKGNvdW50ZXJzIHRoYXQgaGF2ZSBjb3VudHMgZ3JlYXRlciB0aGFuIHplcm8pLgorQWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIGNvbWJpbmUgY291bnRlcnMgYnkgYWRkaW5nIG9yIHN1YnRyYWN0aW5nIHRoZSBjb3VudHMKK29mIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMuICBJbnRlcnNlY3Rpb24gYW5kIHVuaW9uIHJldHVybiB0aGUgbWluaW11bSBhbmQKK21heGltdW0gb2YgY29ycmVzcG9uZGluZyBjb3VudHMuICBFYWNoIG9wZXJhdGlvbiBjYW4gYWNjZXB0IGlucHV0cyB3aXRoIHNpZ25lZAorY291bnRzLCBidXQgdGhlIG91dHB1dCB3aWxsIGV4Y2x1ZGUgcmVzdWx0cyB3aXRoIGNvdW50cyBvZiB6ZXJvIG9yIGxlc3MuCisKKyAgICA+Pj4gYyA9IENvdW50ZXIoYT0zLCBiPTEpCisgICAgPj4+IGQgPSBDb3VudGVyKGE9MSwgYj0yKQorICAgID4+PiBjICsgZCAgICAgICAgICAgICAgICAgICAgICAgIyBhZGQgdHdvIGNvdW50ZXJzIHRvZ2V0aGVyOiAgY1t4XSArIGRbeF0KKyAgICBDb3VudGVyKHsnYSc6IDQsICdiJzogM30pCisgICAgPj4+IGMgLSBkICAgICAgICAgICAgICAgICAgICAgICAjIHN1YnRyYWN0IChrZWVwaW5nIG9ubHkgcG9zaXRpdmUgY291bnRzKQorICAgIENvdW50ZXIoeydhJzogMn0pCisgICAgPj4+IGMgJiBkICAgICAgICAgICAgICAgICAgICAgICAjIGludGVyc2VjdGlvbjogIG1pbihjW3hdLCBkW3hdKQorICAgIENvdW50ZXIoeydhJzogMSwgJ2InOiAxfSkKKyAgICA+Pj4gYyB8IGQgICAgICAgICAgICAgICAgICAgICAgICMgdW5pb246ICBtYXgoY1t4XSwgZFt4XSkKKyAgICBDb3VudGVyKHsnYSc6IDMsICdiJzogMn0pCisKKy4uIG5vdGU6OgorCisgICBDb3VudGVycyB3ZXJlIHByaW1hcmlseSBkZXNpZ25lZCB0byB3b3JrIHdpdGggcG9zaXRpdmUgaW50ZWdlcnMgdG8gcmVwcmVzZW50CisgICBydW5uaW5nIGNvdW50czsgaG93ZXZlciwgY2FyZSB3YXMgdGFrZW4gdG8gbm90IHVubmVjZXNzYXJpbHkgcHJlY2x1ZGUgdXNlCisgICBjYXNlcyBuZWVkaW5nIG90aGVyIHR5cGVzIG9yIG5lZ2F0aXZlIHZhbHVlcy4gIFRvIGhlbHAgd2l0aCB0aG9zZSB1c2UgY2FzZXMsCisgICB0aGlzIHNlY3Rpb24gZG9jdW1lbnRzIHRoZSBtaW5pbXVtIHJhbmdlIGFuZCB0eXBlIHJlc3RyaWN0aW9ucy4KKworICAgKiBUaGUgOmNsYXNzOmBDb3VudGVyYCBjbGFzcyBpdHNlbGYgaXMgYSBkaWN0aW9uYXJ5IHN1YmNsYXNzIHdpdGggbm8KKyAgICAgcmVzdHJpY3Rpb25zIG9uIGl0cyBrZXlzIGFuZCB2YWx1ZXMuICBUaGUgdmFsdWVzIGFyZSBpbnRlbmRlZCB0byBiZSBudW1iZXJzCisgICAgIHJlcHJlc2VudGluZyBjb3VudHMsIGJ1dCB5b3UgKmNvdWxkKiBzdG9yZSBhbnl0aGluZyBpbiB0aGUgdmFsdWUgZmllbGQuCisKKyAgICogVGhlIDptZXRoOmBtb3N0X2NvbW1vbmAgbWV0aG9kIHJlcXVpcmVzIG9ubHkgdGhhdCB0aGUgdmFsdWVzIGJlIG9yZGVyYWJsZS4KKworICAgKiBGb3IgaW4tcGxhY2Ugb3BlcmF0aW9ucyBzdWNoIGFzIGBgY1trZXldICs9IDFgYCwgdGhlIHZhbHVlIHR5cGUgbmVlZCBvbmx5CisgICAgIHN1cHBvcnQgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uLiAgU28gZnJhY3Rpb25zLCBmbG9hdHMsIGFuZCBkZWNpbWFscyB3b3VsZAorICAgICB3b3JrIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgYXJlIHN1cHBvcnRlZC4gIFRoZSBzYW1lIGlzIGFsc28gdHJ1ZSBmb3IKKyAgICAgOm1ldGg6YHVwZGF0ZWAgYW5kIDptZXRoOmBzdWJ0cmFjdGAgd2hpY2ggYWxsb3cgbmVnYXRpdmUgYW5kIHplcm8gdmFsdWVzCisgICAgIGZvciBib3RoIGlucHV0cyBhbmQgb3V0cHV0cy4KKworICAgKiBUaGUgbXVsdGlzZXQgbWV0aG9kcyBhcmUgZGVzaWduZWQgb25seSBmb3IgdXNlIGNhc2VzIHdpdGggcG9zaXRpdmUgdmFsdWVzLgorICAgICBUaGUgaW5wdXRzIG1heSBiZSBuZWdhdGl2ZSBvciB6ZXJvLCBidXQgb25seSBvdXRwdXRzIHdpdGggcG9zaXRpdmUgdmFsdWVzCisgICAgIGFyZSBjcmVhdGVkLiAgVGhlcmUgYXJlIG5vIHR5cGUgcmVzdHJpY3Rpb25zLCBidXQgdGhlIHZhbHVlIHR5cGUgbmVlZHMgdG8KKyAgICAgc3VwcG9ydCBzdXBwb3J0IGFkZGl0aW9uLCBzdWJ0cmFjdGlvbiwgYW5kIGNvbXBhcmlzb24uCisKKyAgICogVGhlIDptZXRoOmBlbGVtZW50c2AgbWV0aG9kIHJlcXVpcmVzIGludGVnZXIgY291bnRzLiAgSXQgaWdub3JlcyB6ZXJvIGFuZAorICAgICBuZWdhdGl2ZSBjb3VudHMuCisKKy4uIHNlZWFsc286OgorCisgICAgKiBgQ291bnRlciBjbGFzcyA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NjExLz5gXworICAgICAgYWRhcHRlZCBmb3IgUHl0aG9uIDIuNSBhbmQgYW4gZWFybHkgYEJhZyByZWNpcGUKKyAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNTkxNzQvPmBfIGZvciBQeXRob24gMi40LgorCisgICAgKiBgQmFnIGNsYXNzIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc21hbGx0YWxrL21hbnVhbC1iYXNlL2h0bWxfbm9kZS9CYWcuaHRtbD5gXworICAgICAgaW4gU21hbGx0YWxrLgorCisgICAgKiBXaWtpcGVkaWEgZW50cnkgZm9yIGBNdWx0aXNldHMgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTXVsdGlzZXQ+YF9cLgorCisgICAgKiBgQysrIG11bHRpc2V0cyA8aHR0cDovL3d3dy5kZW1vMnMuY29tL1R1dG9yaWFsL0NwcC8wMzgwX19zZXQtbXVsdGlzZXQvQ2F0YWxvZzAzODBfX3NldC1tdWx0aXNldC5odG0+YF8KKyAgICAgIHR1dG9yaWFsIHdpdGggZXhhbXBsZXMuCisKKyAgICAqIEZvciBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBvbiBtdWx0aXNldHMgYW5kIHRoZWlyIHVzZSBjYXNlcywgc2VlCisgICAgICAqS251dGgsIERvbmFsZC4gVGhlIEFydCBvZiBDb21wdXRlciBQcm9ncmFtbWluZyBWb2x1bWUgSUksCisgICAgICBTZWN0aW9uIDQuNi4zLCBFeGVyY2lzZSAxOSpcLgorCisgICAgKiBUbyBlbnVtZXJhdGUgYWxsIGRpc3RpbmN0IG11bHRpc2V0cyBvZiBhIGdpdmVuIHNpemUgb3ZlciBhIGdpdmVuIHNldCBvZgorICAgICAgZWxlbWVudHMsIHNlZSA6ZnVuYzpgaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50YC4KKworICAgICAgICAgIG1hcChDb3VudGVyLCBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnQUJDJywgMikpIC0tPiBBQSBBQiBBQyBCQiBCQyBDQwogCiAKIDpjbGFzczpgZGVxdWVgIG9iamVjdHMKQEAgLTIwNCw2ICsyNjYsMTIgQEAKICAgICAgIFJlbW92ZSBhbGwgZWxlbWVudHMgZnJvbSB0aGUgZGVxdWUgbGVhdmluZyBpdCB3aXRoIGxlbmd0aCAwLgogCiAKKyAgIC4uIG1ldGhvZDo6IGNvdW50KHgpCisKKyAgICAgIENvdW50IHRoZSBudW1iZXIgb2YgZGVxdWUgZWxlbWVudHMgZXF1YWwgdG8gKngqLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKwogICAgLi4gbWV0aG9kOjogZXh0ZW5kKGl0ZXJhYmxlKQogCiAgICAgICBFeHRlbmQgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGRlcXVlIGJ5IGFwcGVuZGluZyBlbGVtZW50cyBmcm9tIHRoZSBpdGVyYWJsZQpAQCAtMjM2LDYgKzMwNCwxMSBAQAogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKIAorICAgLi4gbWV0aG9kOjogcmV2ZXJzZSgpCisKKyAgICAgIFJldmVyc2UgdGhlIGVsZW1lbnRzIG9mIHRoZSBkZXF1ZSBpbi1wbGFjZSBhbmQgdGhlbiByZXR1cm4gYGBOb25lYGAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCiAgICAuLiBtZXRob2Q6OiByb3RhdGUobikKIApAQCAtMjQ0LDYgKzMxNywxNSBAQAogICAgICAgYGBkLmFwcGVuZGxlZnQoZC5wb3AoKSlgYC4KIAogCisgICBEZXF1ZSBvYmplY3RzIGFsc28gcHJvdmlkZSBvbmUgcmVhZC1vbmx5IGF0dHJpYnV0ZToKKworICAgLi4gYXR0cmlidXRlOjogbWF4bGVuCisKKyAgICAgIE1heGltdW0gc2l6ZSBvZiBhIGRlcXVlIG9yICpOb25lKiBpZiB1bmJvdW5kZWQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSwgZGVxdWVzIHN1cHBvcnQgaXRlcmF0aW9uLCBwaWNrbGluZywgYGBsZW4oZClgYCwKIGBgcmV2ZXJzZWQoZClgYCwgYGBjb3B5LmNvcHkoZClgYCwgYGBjb3B5LmRlZXBjb3B5KGQpYGAsIG1lbWJlcnNoaXAgdGVzdGluZyB3aXRoCiB0aGUgOmtleXdvcmQ6YGluYCBvcGVyYXRvciwgYW5kIHN1YnNjcmlwdCByZWZlcmVuY2VzIHN1Y2ggYXMgYGBkWy0xXWBgLiAgSW5kZXhlZApAQCAtNDc1LDcgKzU1Nyw3IEBACiBzZWxmLWRvY3VtZW50aW5nIGNvZGUuICBUaGV5IGNhbiBiZSB1c2VkIHdoZXJldmVyIHJlZ3VsYXIgdHVwbGVzIGFyZSB1c2VkLCBhbmQKIHRoZXkgYWRkIHRoZSBhYmlsaXR5IHRvIGFjY2VzcyBmaWVsZHMgYnkgbmFtZSBpbnN0ZWFkIG9mIHBvc2l0aW9uIGluZGV4LgogCi0uLiBmdW5jdGlvbjo6IG5hbWVkdHVwbGUodHlwZW5hbWUsIGZpZWxkX25hbWVzLCBbdmVyYm9zZV0pCisuLiBmdW5jdGlvbjo6IG5hbWVkdHVwbGUodHlwZW5hbWUsIGZpZWxkX25hbWVzLCBbdmVyYm9zZT1GYWxzZV0sIFtyZW5hbWU9RmFsc2VdKQogCiAgICBSZXR1cm5zIGEgbmV3IHR1cGxlIHN1YmNsYXNzIG5hbWVkICp0eXBlbmFtZSouICBUaGUgbmV3IHN1YmNsYXNzIGlzIHVzZWQgdG8KICAgIGNyZWF0ZSB0dXBsZS1saWtlIG9iamVjdHMgdGhhdCBoYXZlIGZpZWxkcyBhY2Nlc3NpYmxlIGJ5IGF0dHJpYnV0ZSBsb29rdXAgYXMKQEAgLTQ5Myw2ICs1NzUsMTEgQEAKICAgIGEgOm1vZDpga2V5d29yZGAgc3VjaCBhcyAqY2xhc3MqLCAqZm9yKiwgKnJldHVybiosICpnbG9iYWwqLCAqcGFzcyosICpwcmludCosCiAgICBvciAqcmFpc2UqLgogCisgICBJZiAqcmVuYW1lKiBpcyB0cnVlLCBpbnZhbGlkIGZpZWxkbmFtZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQKKyAgIHdpdGggcG9zaXRpb25hbCBuYW1lcy4gIEZvciBleGFtcGxlLCBgYFsnYWJjJywgJ2RlZicsICdnaGknLCAnYWJjJ11gYCBpcworICAgY29udmVydGVkIHRvIGBgWydhYmMnLCAnXzEnLCAnZ2hpJywgJ18zJ11gYCwgZWxpbWluYXRpbmcgdGhlIGtleXdvcmQKKyAgIGBgZGVmYGAgYW5kIHRoZSBkdXBsaWNhdGUgZmllbGRuYW1lIGBgYWJjYGAuCisKICAgIElmICp2ZXJib3NlKiBpcyB0cnVlLCB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyBwcmludGVkIGp1c3QgYmVmb3JlIGJlaW5nIGJ1aWx0LgogCiAgICBOYW1lZCB0dXBsZSBpbnN0YW5jZXMgZG8gbm90IGhhdmUgcGVyLWluc3RhbmNlIGRpY3Rpb25hcmllcywgc28gdGhleSBhcmUKQEAgLTUwMCwyNCArNTg3LDE1IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgYWRkZWQgc3VwcG9ydCBmb3IgKnJlbmFtZSouCisKIEV4YW1wbGU6CiAKIC4uIGRvY3Rlc3Q6OgogICAgOm9wdGlvbnM6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQogCi0gICA+Pj4gUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknKQotICAgPj4+IHAgPSBQb2ludCgxMSwgeT0yMikgICAgICMgaW5zdGFudGlhdGUgd2l0aCBwb3NpdGlvbmFsIG9yIGtleXdvcmQgYXJndW1lbnRzCi0gICA+Pj4gcFswXSArIHBbMV0gICAgICAgICAgICAgIyBpbmRleGFibGUgbGlrZSB0aGUgcGxhaW4gdHVwbGUgKDExLCAyMikKLSAgIDMzCi0gICA+Pj4geCwgeSA9IHAgICAgICAgICAgICAgICAgIyB1bnBhY2sgbGlrZSBhIHJlZ3VsYXIgdHVwbGUKLSAgID4+PiB4LCB5Ci0gICAoMTEsIDIyKQotICAgPj4+IHAueCArIHAueSAgICAgICAgICAgICAgICMgZmllbGRzIGFsc28gYWNjZXNzaWJsZSBieSBuYW1lCi0gICAzMwotICAgPj4+IHAgICAgICAgICAgICAgICAgICAgICAgICMgcmVhZGFibGUgX19yZXByX18gd2l0aCBhIG5hbWU9dmFsdWUgc3R5bGUKLSAgIFBvaW50KHg9MTEsIHk9MjIpCi0KLSAgID4+PiBQb2ludCA9IG5hbWVkdHVwbGUoJ1BvaW50JywgJ3ggeScsIHZlcmJvc2U9VHJ1ZSkgIyBzaG93IHRoZSBjbGFzcyBkZWZpbml0aW9uCisgICA+Pj4gUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknLCB2ZXJib3NlPVRydWUpCiAgICBjbGFzcyBQb2ludCh0dXBsZSk6CiAgICAgICAgICAgICdQb2ludCh4LCB5KScKICAgIDxCTEFOS0xJTkU+CkBAIC01MjYsNiArNjA0LDcgQEAKICAgICAgICAgICAgX2ZpZWxkcyA9ICgneCcsICd5JykKICAgIDxCTEFOS0xJTkU+CiAgICAgICAgICAgIGRlZiBfX25ld19fKF9jbHMsIHgsIHkpOgorICAgICAgICAgICAgICAgJ0NyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBQb2ludCh4LCB5KScKICAgICAgICAgICAgICAgIHJldHVybiBfdHVwbGUuX19uZXdfXyhfY2xzLCAoeCwgeSkpCiAgICA8QkxBTktMSU5FPgogICAgICAgICAgICBAY2xhc3NtZXRob2QKQEAgLTUzNywxMSArNjE2LDEyIEBACiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAgICA8QkxBTktMSU5FPgogICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAnUmV0dXJuIGEgbmljZWx5IGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbiBzdHJpbmcnCiAgICAgICAgICAgICAgICByZXR1cm4gJ1BvaW50KHg9JXIsIHk9JXIpJyAlIHNlbGYKICAgIDxCTEFOS0xJTkU+Ci0gICAgICAgICAgIGRlZiBfYXNkaWN0KHQpOgotICAgICAgICAgICAgICAgJ1JldHVybiBhIG5ldyBkaWN0IHdoaWNoIG1hcHMgZmllbGQgbmFtZXMgdG8gdGhlaXIgdmFsdWVzJwotICAgICAgICAgICAgICAgcmV0dXJuIHsneCc6IHRbMF0sICd5JzogdFsxXX0KKyAgICAgICAgICAgZGVmIF9hc2RpY3Qoc2VsZik6CisgICAgICAgICAgICAgICAnUmV0dXJuIGEgbmV3IE9yZGVyZWREaWN0IHdoaWNoIG1hcHMgZmllbGQgbmFtZXMgdG8gdGhlaXIgdmFsdWVzJworICAgICAgICAgICAgICAgcmV0dXJuIE9yZGVyZWREaWN0KHppcChzZWxmLl9maWVsZHMsIHNlbGYpKQogICAgPEJMQU5LTElORT4KICAgICAgICAgICAgZGVmIF9yZXBsYWNlKF9zZWxmLCAqKmt3ZHMpOgogICAgICAgICAgICAgICAgJ1JldHVybiBhIG5ldyBQb2ludCBvYmplY3QgcmVwbGFjaW5nIHNwZWNpZmllZCBmaWVsZHMgd2l0aCBuZXcgdmFsdWVzJwpAQCAtNTUxLDEwICs2MzEsMjIgQEAKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgIDxCTEFOS0xJTkU+CiAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICdSZXR1cm4gc2VsZiBhcyBhIHBsYWluIHR1cGxlLiAgIFVzZWQgYnkgY29weSBhbmQgcGlja2xlLicKICAgICAgICAgICAgICAgIHJldHVybiB0dXBsZShzZWxmKQogICAgPEJMQU5LTElORT4KLSAgICAgICAgICAgeCA9IF9wcm9wZXJ0eShfaXRlbWdldHRlcigwKSkKLSAgICAgICAgICAgeSA9IF9wcm9wZXJ0eShfaXRlbWdldHRlcigxKSkKKyAgICAgICAgICAgeCA9IF9wcm9wZXJ0eShfaXRlbWdldHRlcigwKSwgZG9jPSdBbGlhcyBmb3IgZmllbGQgbnVtYmVyIDAnKQorICAgICAgICAgICB5ID0gX3Byb3BlcnR5KF9pdGVtZ2V0dGVyKDEpLCBkb2M9J0FsaWFzIGZvciBmaWVsZCBudW1iZXIgMScpCisKKyAgID4+PiBwID0gUG9pbnQoMTEsIHk9MjIpICAgICAjIGluc3RhbnRpYXRlIHdpdGggcG9zaXRpb25hbCBvciBrZXl3b3JkIGFyZ3VtZW50cworICAgPj4+IHBbMF0gKyBwWzFdICAgICAgICAgICAgICMgaW5kZXhhYmxlIGxpa2UgdGhlIHBsYWluIHR1cGxlICgxMSwgMjIpCisgICAzMworICAgPj4+IHgsIHkgPSBwICAgICAgICAgICAgICAgICMgdW5wYWNrIGxpa2UgYSByZWd1bGFyIHR1cGxlCisgICA+Pj4geCwgeQorICAgKDExLCAyMikKKyAgID4+PiBwLnggKyBwLnkgICAgICAgICAgICAgICAjIGZpZWxkcyBhbHNvIGFjY2Vzc2libGUgYnkgbmFtZQorICAgMzMKKyAgID4+PiBwICAgICAgICAgICAgICAgICAgICAgICAjIHJlYWRhYmxlIF9fcmVwcl9fIHdpdGggYSBuYW1lPXZhbHVlIHN0eWxlCisgICBQb2ludCh4PTExLCB5PTIyKQogCiBOYW1lZCB0dXBsZXMgYXJlIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBhc3NpZ25pbmcgZmllbGQgbmFtZXMgdG8gcmVzdWx0IHR1cGxlcyByZXR1cm5lZAogYnkgdGhlIDptb2Q6YGNzdmAgb3IgOm1vZDpgc3FsaXRlM2AgbW9kdWxlczo6CkBAIC01ODgsMTAgKzY4MCwxNCBAQAogCiAuLiBtZXRob2Q6OiBzb21lbmFtZWR0dXBsZS5fYXNkaWN0KCkKIAotICAgUmV0dXJuIGEgbmV3IGRpY3Qgd2hpY2ggbWFwcyBmaWVsZCBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlczo6CisgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBPcmRlcmVkRGljdGAgd2hpY2ggbWFwcyBmaWVsZCBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nCisgICB2YWx1ZXM6OgogCiAgICAgICA+Pj4gcC5fYXNkaWN0KCkKLSAgICAgIHsneCc6IDExLCAneSc6IDIyfQorICAgICAgT3JkZXJlZERpY3QoWygneCcsIDExKSwgKCd5JywgMjIpXSkKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFJldHVybnMgYW4gOmNsYXNzOmBPcmRlcmVkRGljdGAgaW5zdGVhZCBvZiBhIHJlZ3VsYXIgOmNsYXNzOmBkaWN0YC4KIAogLi4gbWV0aG9kOjogc29tZW5hbWVkdHVwbGUuX3JlcGxhY2Uoa3dhcmdzKQogCkBAIC02NzgsMyArNzc0LDE5OSBAQAogCiAgICBgTmFtZWQgdHVwbGUgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81MDAyNjEvPmBfCiAgICBhZGFwdGVkIGZvciBQeXRob24gMi40LgorCisKKzpjbGFzczpgT3JkZXJlZERpY3RgIG9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3JkZXJlZCBkaWN0aW9uYXJpZXMgYXJlIGp1c3QgbGlrZSByZWd1bGFyIGRpY3Rpb25hcmllcyBidXQgdGhleSByZW1lbWJlciB0aGUKK29yZGVyIHRoYXQgaXRlbXMgd2VyZSBpbnNlcnRlZC4gIFdoZW4gaXRlcmF0aW5nIG92ZXIgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5LAordGhlIGl0ZW1zIGFyZSByZXR1cm5lZCBpbiB0aGUgb3JkZXIgdGhlaXIga2V5cyB3ZXJlIGZpcnN0IGFkZGVkLgorCisuLiBjbGFzczo6IE9yZGVyZWREaWN0KFtpdGVtc10pCisKKyAgIFJldHVybiBhbiBpbnN0YW5jZSBvZiBhIGRpY3Qgc3ViY2xhc3MsIHN1cHBvcnRpbmcgdGhlIHVzdWFsIDpjbGFzczpgZGljdGAKKyAgIG1ldGhvZHMuICBBbiAqT3JkZXJlZERpY3QqIGlzIGEgZGljdCB0aGF0IHJlbWVtYmVycyB0aGUgb3JkZXIgdGhhdCBrZXlzCisgICB3ZXJlIGZpcnN0IGluc2VydGVkLiBJZiBhIG5ldyBlbnRyeSBvdmVyd3JpdGVzIGFuIGV4aXN0aW5nIGVudHJ5LCB0aGUKKyAgIG9yaWdpbmFsIGluc2VydGlvbiBwb3NpdGlvbiBpcyBsZWZ0IHVuY2hhbmdlZC4gIERlbGV0aW5nIGFuIGVudHJ5IGFuZAorICAgcmVpbnNlcnRpbmcgaXQgd2lsbCBtb3ZlIGl0IHRvIHRoZSBlbmQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisuLiBtZXRob2Q6OiBPcmRlcmVkRGljdC5wb3BpdGVtKGxhc3Q9VHJ1ZSkKKworICAgVGhlIDptZXRoOmBwb3BpdGVtYCBtZXRob2QgZm9yIG9yZGVyZWQgZGljdGlvbmFyaWVzIHJldHVybnMgYW5kIHJlbW92ZXMKKyAgIGEgKGtleSwgdmFsdWUpIHBhaXIuICBUaGUgcGFpcnMgYXJlIHJldHVybmVkIGluIExJRk8gb3JkZXIgaWYgKmxhc3QqIGlzCisgICB0cnVlIG9yIEZJRk8gb3JkZXIgaWYgZmFsc2UuCisKK0luIGFkZGl0aW9uIHRvIHRoZSB1c3VhbCBtYXBwaW5nIG1ldGhvZHMsIG9yZGVyZWQgZGljdGlvbmFyaWVzIGFsc28gc3VwcG9ydAorcmV2ZXJzZSBpdGVyYXRpb24gdXNpbmcgOmZ1bmM6YHJldmVyc2VkYC4KKworRXF1YWxpdHkgdGVzdHMgYmV0d2VlbiA6Y2xhc3M6YE9yZGVyZWREaWN0YCBvYmplY3RzIGFyZSBvcmRlci1zZW5zaXRpdmUKK2FuZCBhcmUgaW1wbGVtZW50ZWQgYXMgYGBsaXN0KG9kMS5pdGVtcygpKT09bGlzdChvZDIuaXRlbXMoKSlgYC4KK0VxdWFsaXR5IHRlc3RzIGJldHdlZW4gOmNsYXNzOmBPcmRlcmVkRGljdGAgb2JqZWN0cyBhbmQgb3RoZXIKKzpjbGFzczpgTWFwcGluZ2Agb2JqZWN0cyBhcmUgb3JkZXItaW5zZW5zaXRpdmUgbGlrZSByZWd1bGFyIGRpY3Rpb25hcmllcy4KK1RoaXMgYWxsb3dzIDpjbGFzczpgT3JkZXJlZERpY3RgIG9iamVjdHMgdG8gYmUgc3Vic3RpdHV0ZWQgYW55d2hlcmUgYQorcmVndWxhciBkaWN0aW9uYXJ5IGlzIHVzZWQuCisKK1RoZSA6Y2xhc3M6YE9yZGVyZWREaWN0YCBjb25zdHJ1Y3RvciBhbmQgOm1ldGg6YHVwZGF0ZWAgbWV0aG9kIGJvdGggYWNjZXB0CitrZXl3b3JkIGFyZ3VtZW50cywgYnV0IHRoZWlyIG9yZGVyIGlzIGxvc3QgYmVjYXVzZSBQeXRob24ncyBmdW5jdGlvbiBjYWxsCitzZW1hbnRpY3MgcGFzcy1pbiBrZXl3b3JkIGFyZ3VtZW50cyB1c2luZyBhIHJlZ3VsYXIgdW5vcmRlcmVkIGRpY3Rpb25hcnkuCisKKy4uIHNlZWFsc286OgorCisgICBgRXF1aXZhbGVudCBPcmRlcmVkRGljdCByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NjY5My8+YF8KKyAgIHRoYXQgcnVucyBvbiBQeXRob24gMi40IG9yIGxhdGVyLgorCitTaW5jZSBhbiBvcmRlcmVkIGRpY3Rpb25hcnkgcmVtZW1iZXJzIGl0cyBpbnNlcnRpb24gb3JkZXIsIGl0IGNhbiBiZSB1c2VkCitpbiBjb25qdWN0aW9uIHdpdGggc29ydGluZyB0byBtYWtlIGEgc29ydGVkIGRpY3Rpb25hcnk6OgorCisgICAgPj4+ICMgcmVndWxhciB1bnNvcnRlZCBkaWN0aW9uYXJ5CisgICAgPj4+IGQgPSB7J2JhbmFuYSc6IDMsICdhcHBsZSc6NCwgJ3BlYXInOiAxLCAnb3JhbmdlJzogMn0KKworICAgID4+PiAjIGRpY3Rpb25hcnkgc29ydGVkIGJ5IGtleQorICAgID4+PiBPcmRlcmVkRGljdChzb3J0ZWQoZC5pdGVtcygpLCBrZXk9bGFtYmRhIHQ6IHRbMF0pKQorICAgIE9yZGVyZWREaWN0KFsoJ2FwcGxlJywgNCksICgnYmFuYW5hJywgMyksICgnb3JhbmdlJywgMiksICgncGVhcicsIDEpXSkKKworICAgID4+PiAjIGRpY3Rpb25hcnkgc29ydGVkIGJ5IHZhbHVlCisgICAgPj4+IE9yZGVyZWREaWN0KHNvcnRlZChkLml0ZW1zKCksIGtleT1sYW1iZGEgdDogdFsxXSkpCisgICAgT3JkZXJlZERpY3QoWygncGVhcicsIDEpLCAoJ29yYW5nZScsIDIpLCAoJ2JhbmFuYScsIDMpLCAoJ2FwcGxlJywgNCldKQorCisgICAgPj4+ICMgZGljdGlvbmFyeSBzb3J0ZWQgYnkgbGVuZ3RoIG9mIHRoZSBrZXkgc3RyaW5nCisgICAgPj4+IE9yZGVyZWREaWN0KHNvcnRlZChkLml0ZW1zKCksIGtleT1sYW1iZGEgdDogbGVuKHRbMF0pKSkKKyAgICBPcmRlcmVkRGljdChbKCdwZWFyJywgMSksICgnYXBwbGUnLCA0KSwgKCdvcmFuZ2UnLCAyKSwgKCdiYW5hbmEnLCAzKV0pCisKK1RoZSBuZXcgc29ydGVkIGRpY3Rpb25hcmllcyBtYWludGFpbiB0aGVpciBzb3J0IG9yZGVyIHdoZW4gZW50cmllcworYXJlIGRlbGV0ZWQuICBCdXQgd2hlbiBuZXcga2V5cyBhcmUgYWRkZWQsIHRoZSBrZXlzIGFyZSBhcHBlbmRlZAordG8gdGhlIGVuZCBhbmQgdGhlIHNvcnQgaXMgbm90IG1haW50YWluZWQuCisKK0l0IGlzIGFsc28gc3RyYWlnaHQtZm9yd2FyZCB0byBjcmVhdGUgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5IHZhcmlhbnQKK3RoYXQgdGhlIHJlbWVtYmVycyB0aGUgb3JkZXIgdGhlIGtleXMgd2VyZSAqbGFzdCogaW5zZXJ0ZWQuCitJZiBhIG5ldyBlbnRyeSBvdmVyd3JpdGVzIGFuIGV4aXN0aW5nIGVudHJ5LCB0aGUKK29yaWdpbmFsIGluc2VydGlvbiBwb3NpdGlvbiBpcyBjaGFuZ2VkIGFuZCBtb3ZlZCB0byB0aGUgZW5kOjoKKworICAgIGNsYXNzIExhc3RVcGRhdGVkT3JkZXJlZERpY3QoT3JkZXJlZERpY3QpOgorICAgICAgICAnU3RvcmUgaXRlbXMgaW4gdGhlIG9yZGVyIHRoZSBrZXlzIHdlcmUgbGFzdCBhZGRlZCcKKyAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgaWYga2V5IGluIHNlbGY6CisgICAgICAgICAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICAgICAgT3JkZXJlZERpY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSkKKworCisuLiBfYWJzdHJhY3QtYmFzZS1jbGFzc2VzOgorCitBQkNzIC0gYWJzdHJhY3QgYmFzZSBjbGFzc2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb2xsZWN0aW9ucyBtb2R1bGUgb2ZmZXJzIHRoZSBmb2xsb3dpbmcgQUJDczoKKworPT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBQkMgICAgICAgICAgICAgICAgICAgICAgICBJbmhlcml0cyAgICAgICAgICAgICAgIEFic3RyYWN0IE1ldGhvZHMgICAgICAgIE1peGluIE1ldGhvZHMKKz09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOmNsYXNzOmBDb250YWluZXJgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fY29udGFpbnNfX2BgCis6Y2xhc3M6YEhhc2hhYmxlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19oYXNoX19gYAorOmNsYXNzOmBJdGVyYWJsZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9faXRlcl9fYGAKKzpjbGFzczpgSXRlcmF0b3JgICAgICAgICAgIDpjbGFzczpgSXRlcmFibGVgICAgICAgYGBuZXh0YGAgICAgICAgICAgICAgICAgYGBfX2l0ZXJfX2BgCis6Y2xhc3M6YFNpemVkYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19sZW5fX2BgCis6Y2xhc3M6YENhbGxhYmxlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19jYWxsX19gYAorCis6Y2xhc3M6YFNlcXVlbmNlYCAgICAgICAgICA6Y2xhc3M6YFNpemVkYCwgICAgICAgIGBgX19nZXRpdGVtX19gYCAgICAgICAgIGBgX19jb250YWluc19fYGAuIGBgX19pdGVyX19gYCwgYGBfX3JldmVyc2VkX19gYCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgSXRlcmFibGVgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBpbmRleGBgLCBhbmQgYGBjb3VudGBgCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YENvbnRhaW5lcmAKKworOmNsYXNzOmBNdXRhYmxlU2VxdWVuY2VgICAgOmNsYXNzOmBTZXF1ZW5jZWAgICAgICBgYF9fc2V0aXRlbV9fYGAgICAgICAgICBJbmhlcml0ZWQgU2VxdWVuY2UgbWV0aG9kcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2RlbGl0ZW1fX2BgLCAgICAgICAgYGBhcHBlbmRgYCwgYGByZXZlcnNlYGAsIGBgZXh0ZW5kYGAsIGBgcG9wYGAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgYGluc2VydGBgICAgICAgICAgIGBgcmVtb3ZlYGAsIGFuZCBgYF9faWFkZF9fYGAKKworOmNsYXNzOmBTZXRgICAgICAgICAgICAgICAgOmNsYXNzOmBTaXplZGAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fbGVfX2BgLCBgYF9fbHRfX2BgLCBgYF9fZXFfX2BgLCBgYF9fbmVfX2BgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzOmBJdGVyYWJsZWAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fZ3RfX2BgLCBgYF9fZ2VfX2BgLCBgYF9fYW5kX19gYCwgYGBfX29yX19gYCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgQ29udGFpbmVyYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX3N1Yl9fYGAsIGBgX194b3JfX2BgLCBhbmQgYGBpc2Rpc2pvaW50YGAKKworOmNsYXNzOmBNdXRhYmxlU2V0YCAgICAgICAgOmNsYXNzOmBTZXRgICAgICAgICAgICBgYGFkZGBgIGFuZCAgICAgICAgICAgICBJbmhlcml0ZWQgU2V0IG1ldGhvZHMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgZGlzY2FyZGBgICAgICAgICAgICAgIGBgY2xlYXJgYCwgYGBwb3BgYCwgYGByZW1vdmVgYCwgYGBfX2lvcl9fYGAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19pYW5kX19gYCwgYGBfX2l4b3JfX2BgLCBhbmQgYGBfX2lzdWJfX2BgCisKKzpjbGFzczpgTWFwcGluZ2AgICAgICAgICAgIDpjbGFzczpgU2l6ZWRgLCAgICAgICAgYGBfX2dldGl0ZW1fX2BgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYCwgYGBrZXlzYGAsIGBgaXRlbXNgYCwgYGB2YWx1ZXNgYCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgSXRlcmFibGVgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBnZXRgYCwgYGBfX2VxX19gYCwgYW5kIGBgX19uZV9fYGAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgQ29udGFpbmVyYAorCis6Y2xhc3M6YE11dGFibGVNYXBwaW5nYCAgICA6Y2xhc3M6YE1hcHBpbmdgICAgICAgIGBgX19zZXRpdGVtX19gYCBhbmQgICAgIEluaGVyaXRlZCBNYXBwaW5nIG1ldGhvZHMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19kZWxpdGVtX19gYCAgICAgICAgIGBgcG9wYGAsIGBgcG9waXRlbWBgLCBgYGNsZWFyYGAsIGBgdXBkYXRlYGAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgYHNldGRlZmF1bHRgYAorCisKKzpjbGFzczpgTWFwcGluZ1ZpZXdgICAgICAgIDpjbGFzczpgU2l6ZWRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2xlbl9fYGAKKzpjbGFzczpgS2V5c1ZpZXdgICAgICAgICAgIDpjbGFzczpgTWFwcGluZ1ZpZXdgLCAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgU2V0YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2l0ZXJfX2BgCis6Y2xhc3M6YEl0ZW1zVmlld2AgICAgICAgICA6Y2xhc3M6YE1hcHBpbmdWaWV3YCwgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19jb250YWluc19fYGAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YFNldGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19pdGVyX19gYAorOmNsYXNzOmBWYWx1ZXNWaWV3YCAgICAgICAgOmNsYXNzOmBNYXBwaW5nVmlld2AgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fY29udGFpbnNfX2BgLCBgYF9faXRlcl9fYGAKKz09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVzZSBBQkNzIGFsbG93IHVzIHRvIGFzayBjbGFzc2VzIG9yIGluc3RhbmNlcyBpZiB0aGV5IHByb3ZpZGUKK3BhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSwgZm9yIGV4YW1wbGU6OgorCisgICAgc2l6ZSA9IE5vbmUKKyAgICBpZiBpc2luc3RhbmNlKG15dmFyLCBjb2xsZWN0aW9ucy5TaXplZCk6CisgICAgICAgIHNpemUgPSBsZW4obXl2YXIpCisKK1NldmVyYWwgb2YgdGhlIEFCQ3MgYXJlIGFsc28gdXNlZnVsIGFzIG1peGlucyB0aGF0IG1ha2UgaXQgZWFzaWVyIHRvIGRldmVsb3AKK2NsYXNzZXMgc3VwcG9ydGluZyBjb250YWluZXIgQVBJcy4gIEZvciBleGFtcGxlLCB0byB3cml0ZSBhIGNsYXNzIHN1cHBvcnRpbmcKK3RoZSBmdWxsIDpjbGFzczpgU2V0YCBBUEksIGl0IG9ubHkgbmVjZXNzYXJ5IHRvIHN1cHBseSB0aGUgdGhyZWUgdW5kZXJseWluZworYWJzdHJhY3QgbWV0aG9kczogOm1ldGg6YF9fY29udGFpbnNfX2AsIDptZXRoOmBfX2l0ZXJfX2AsIGFuZCA6bWV0aDpgX19sZW5fX2AuCitUaGUgQUJDIHN1cHBsaWVzIHRoZSByZW1haW5pbmcgbWV0aG9kcyBzdWNoIGFzIDptZXRoOmBfX2FuZF9fYCBhbmQKKzptZXRoOmBpc2Rpc2pvaW50YCA6OgorCisgICAgY2xhc3MgTGlzdEJhc2VkU2V0KGNvbGxlY3Rpb25zLlNldCk6CisgICAgICAgICAnJycgQWx0ZXJuYXRlIHNldCBpbXBsZW1lbnRhdGlvbiBmYXZvcmluZyBzcGFjZSBvdmVyIHNwZWVkCisgICAgICAgICAgICAgYW5kIG5vdCByZXF1aXJpbmcgdGhlIHNldCBlbGVtZW50cyB0byBiZSBoYXNoYWJsZS4gJycnCisgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGUpOgorICAgICAgICAgICAgIHNlbGYuZWxlbWVudHMgPSBsc3QgPSBbXQorICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdGVyYWJsZToKKyAgICAgICAgICAgICAgICAgaWYgdmFsdWUgbm90IGluIGxzdDoKKyAgICAgICAgICAgICAgICAgICAgIGxzdC5hcHBlbmQodmFsdWUpCisgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5lbGVtZW50cykKKyAgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbiBzZWxmLmVsZW1lbnRzCisgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuZWxlbWVudHMpCisKKyAgICBzMSA9IExpc3RCYXNlZFNldCgnYWJjZGVmJykKKyAgICBzMiA9IExpc3RCYXNlZFNldCgnZGVmZ2hpJykKKyAgICBvdmVybGFwID0gczEgJiBzMiAgICAgICAgICAgICMgVGhlIF9fYW5kX18oKSBtZXRob2QgaXMgc3VwcG9ydGVkIGF1dG9tYXRpY2FsbHkKKworTm90ZXMgb24gdXNpbmcgOmNsYXNzOmBTZXRgIGFuZCA6Y2xhc3M6YE11dGFibGVTZXRgIGFzIGEgbWl4aW46CisKKygxKQorICAgU2luY2Ugc29tZSBzZXQgb3BlcmF0aW9ucyBjcmVhdGUgbmV3IHNldHMsIHRoZSBkZWZhdWx0IG1peGluIG1ldGhvZHMgbmVlZAorICAgYSB3YXkgdG8gY3JlYXRlIG5ldyBpbnN0YW5jZXMgZnJvbSBhbiBpdGVyYWJsZS4gVGhlIGNsYXNzIGNvbnN0cnVjdG9yIGlzCisgICBhc3N1bWVkIHRvIGhhdmUgYSBzaWduYXR1cmUgaW4gdGhlIGZvcm0gYGBDbGFzc05hbWUoaXRlcmFibGUpYGAuCisgICBUaGF0IGFzc3VtcHRpb24gaXMgZmFjdG9yZWQtb3V0IHRvIGFuIGludGVybmFsIGNsYXNzbWV0aG9kIGNhbGxlZAorICAgOm1ldGg6YF9mcm9tX2l0ZXJhYmxlYCB3aGljaCBjYWxscyBgYGNscyhpdGVyYWJsZSlgYCB0byBwcm9kdWNlIGEgbmV3IHNldC4KKyAgIElmIHRoZSA6Y2xhc3M6YFNldGAgbWl4aW4gaXMgYmVpbmcgdXNlZCBpbiBhIGNsYXNzIHdpdGggYSBkaWZmZXJlbnQKKyAgIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSwgeW91IHdpbGwgbmVlZCB0byBvdmVycmlkZSA6bWV0aDpgZnJvbV9pdGVyYWJsZWAKKyAgIHdpdGggYSBjbGFzc21ldGhvZCB0aGF0IGNhbiBjb25zdHJ1Y3QgbmV3IGluc3RhbmNlcyBmcm9tCisgICBhbiBpdGVyYWJsZSBhcmd1bWVudC4KKworKDIpCisgICBUbyBvdmVycmlkZSB0aGUgY29tcGFyaXNvbnMgKHByZXN1bWFibHkgZm9yIHNwZWVkLCBhcyB0aGUKKyAgIHNlbWFudGljcyBhcmUgZml4ZWQpLCByZWRlZmluZSA6bWV0aDpgX19sZV9fYCBhbmQKKyAgIHRoZW4gdGhlIG90aGVyIG9wZXJhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IGZvbGxvdyBzdWl0LgorCisoMykKKyAgIFRoZSA6Y2xhc3M6YFNldGAgbWl4aW4gcHJvdmlkZXMgYSA6bWV0aDpgX2hhc2hgIG1ldGhvZCB0byBjb21wdXRlIGEgaGFzaCB2YWx1ZQorICAgZm9yIHRoZSBzZXQ7IGhvd2V2ZXIsIDptZXRoOmBfX2hhc2hfX2AgaXMgbm90IGRlZmluZWQgYmVjYXVzZSBub3QgYWxsIHNldHMKKyAgIGFyZSBoYXNoYWJsZSBvciBpbW11dGFibGUuICBUbyBhZGQgc2V0IGhhc2hhYmlsdHkgdXNpbmcgbWl4aW5zLAorICAgaW5oZXJpdCBmcm9tIGJvdGggOm1ldGg6YFNldGAgYW5kIDptZXRoOmBIYXNoYWJsZWAsIHRoZW4gZGVmaW5lCisgICBgYF9faGFzaF9fID0gU2V0Ll9oYXNoYGAuCisKKy4uIHNlZWFsc286OgorCisgICAqIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgUHl0aG9uIHNvdXJjZSBjb2RlIGZvciB0aGUgY29sbGVjdGlvbnMgYWJzdHJhY3QgYmFzZSBjbGFzc2VzCisgICAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9fYWJjb2xsLnB5P3ZpZXc9bWFya3VwPmBfCisKKyAgICogYE9yZGVyZWRTZXQgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2OTQvPmBfIGZvciBhbgorICAgICBleGFtcGxlIGJ1aWx0IG9uIDpjbGFzczpgTXV0YWJsZVNldGAuCisKKyAgICogRm9yIG1vcmUgYWJvdXQgQUJDcywgc2VlIHRoZSA6bW9kOmBhYmNgIG1vZHVsZSBhbmQgOnBlcDpgMzExOWAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb21tYW5kcy5yc3QgYi9Eb2MvbGlicmFyeS9jb21tYW5kcy5yc3QKaW5kZXggMGIzNDdmNy4uOTE2ZTRhNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29tbWFuZHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbW1hbmRzLnJzdApAQCAtNSw2ICs1LDEyIEBACiAuLiBtb2R1bGU6OiBjb21tYW5kcwogICAgOnBsYXRmb3JtOiBVbml4CiAgICA6c3lub3BzaXM6IFV0aWxpdHkgZnVuY3Rpb25zIGZvciBydW5uaW5nIGV4dGVybmFsIGNvbW1hbmRzLgorICAgOmRlcHJlY2F0ZWQ6CisKKy4uIGRlcHJlY2F0ZWQ6OiAyLjYKKyAgIFRoZSA6bW9kOmBjb21tYW5kc2AgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gUHl0aG9uIDMuMC4gIFVzZSB0aGUKKyAgIDptb2Q6YHN1YnByb2Nlc3NgIG1vZHVsZSBpbnN0ZWFkLgorCiAuLiBzZWN0aW9uYXV0aG9yOjogU3VlIFdpbGxpYW1zIDxzYndAcHJvdmlzLmNvbT4KIAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdCBiL0RvYy9saWJyYXJ5L2NvbXBpbGVhbGwucnN0CmluZGV4IDg2ZjYwZmIuLmNmMGQ1ZjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbXBpbGVhbGwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbXBpbGVhbGwucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmBjb21waWxlYWxsYCAtLS0gQnl0ZS1jb21waWxlIFB5dGhvbiBsaWJyYXJpZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC03LDQxICs2LDExNyBAQAogCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBpbnN0YWxsaW5nIFB5dGhvbgotbGlicmFyaWVzLiAgVGhlc2UgZnVuY3Rpb25zIGNvbXBpbGUgUHl0aG9uIHNvdXJjZSBmaWxlcyBpbiBhIGRpcmVjdG9yeSB0cmVlLAotYWxsb3dpbmcgdXNlcnMgd2l0aG91dCBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvIHRoZSBsaWJyYXJpZXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YKLWNhY2hlZCBieXRlLWNvZGUgZmlsZXMuCi0KLVRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIHVzZWQgYXMgYSBzY3JpcHQgKHVzaW5nIHRoZSA6b3B0aW9uOmAtbWAgUHl0aG9uIGZsYWcpIHRvCi1jb21waWxlIFB5dGhvbiBzb3VyY2VzLiAgRGlyZWN0b3JpZXMgdG8gcmVjdXJzaXZlbHkgdHJhdmVyc2UgKHBhc3NpbmcKLTpvcHRpb246YC1sYCBzdG9wcyB0aGUgcmVjdXJzaXZlIGJlaGF2aW9yKSBmb3Igc291cmNlcyBhcmUgbGlzdGVkIG9uIHRoZSBjb21tYW5kCi1saW5lLiAgSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGludm9jYXRpb24gaXMgZXF1aXZhbGVudCB0byBgYC1sCi1zeXMucGF0aGBgLiAgUHJpbnRpbmcgbGlzdHMgb2YgdGhlIGZpbGVzIGNvbXBpbGVkIGNhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZQotOm9wdGlvbjpgLXFgIGZsYWcuICBJbiBhZGRpdGlvbiwgdGhlIDpvcHRpb246YC14YCBvcHRpb24gdGFrZXMgYSByZWd1bGFyCi1leHByZXNzaW9uIGFyZ3VtZW50LiAgQWxsIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIGV4cHJlc3Npb24gd2lsbCBiZSBza2lwcGVkLgorbGlicmFyaWVzLiAgVGhlc2UgZnVuY3Rpb25zIGNvbXBpbGUgUHl0aG9uIHNvdXJjZSBmaWxlcyBpbiBhIGRpcmVjdG9yeSB0cmVlLgorVGhpcyBtb2R1bGUgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBjYWNoZWQgYnl0ZS1jb2RlIGZpbGVzIGF0IGxpYnJhcnkKK2luc3RhbGxhdGlvbiB0aW1lLCB3aGljaCBtYWtlcyB0aGVtIGF2YWlsYWJsZSBmb3IgdXNlIGV2ZW4gYnkgdXNlcnMgd2hvIGRvbid0CitoYXZlIHdyaXRlIHBlcm1pc3Npb24gdG8gdGhlIGxpYnJhcnkgZGlyZWN0b3JpZXMuCiAKIAotLi4gZnVuY3Rpb246OiBjb21waWxlX2RpcihkaXJbLCBtYXhsZXZlbHNbLCBkZGlyWywgZm9yY2VbLCAgcnhbLCBxdWlldF1dXV1dKQorQ29tbWFuZC1saW5lIHVzZQorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIG1vZHVsZSBjYW4gd29yayBhcyBhIHNjcmlwdCAodXNpbmcgOnByb2dyYW06YHB5dGhvbiAtbSBjb21waWxlYWxsYCkgdG8KK2NvbXBpbGUgUHl0aG9uIHNvdXJjZXMuCisKKy4uIHByb2dyYW06OiBjb21waWxlYWxsCisKKy4uIGNtZG9wdGlvbjo6IFtkaXJlY3Rvcnl8ZmlsZV0uLi4KKworICAgUG9zaXRpb25hbCBhcmd1bWVudHMgYXJlIGZpbGVzIHRvIGNvbXBpbGUgb3IgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluCisgICBzb3VyY2UgZmlsZXMsIHRyYXZlcnNlZCByZWN1cnNpdmVseS4gIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBiZWhhdmUgYXMgaWYKKyAgIHRoZSBjb21tYW5kIGxpbmUgd2FzIGBgLWwgPGRpcmVjdG9yaWVzIGZyb20gc3lzLnBhdGg+YGAuCisKKy4uIGNtZG9wdGlvbjo6IC1sCisKKyAgIERvIG5vdCByZWN1cnNlIGludG8gc3ViZGlyZWN0b3JpZXMsIG9ubHkgY29tcGlsZSBzb3VyY2UgY29kZSBmaWxlcyBkaXJlY3RseQorICAgY29udGFpbmVkIGluIHRoZSBuYW1lZCBvciBpbXBsaWVkIGRpcmVjdG9yaWVzLgorCisuLiBjbWRvcHRpb246OiAtZgorCisgICBGb3JjZSByZWJ1aWxkIGV2ZW4gaWYgdGltZXN0YW1wcyBhcmUgdXAtdG8tZGF0ZS4KKworLi4gY21kb3B0aW9uOjogLXEKKworICAgRG8gbm90IHByaW50IHRoZSBsaXN0IG9mIGZpbGVzIGNvbXBpbGVkLCBwcmludCBvbmx5IGVycm9yIG1lc3NhZ2VzLgorCisuLiBjbWRvcHRpb246OiAtZCBkZXN0ZGlyCisKKyAgIERpcmVjdG9yeSBwcmVwZW5kZWQgdG8gdGhlIHBhdGggdG8gZWFjaCBmaWxlIGJlaW5nIGNvbXBpbGVkLiAgVGhpcyB3aWxsCisgICBhcHBlYXIgaW4gY29tcGlsYXRpb24gdGltZSB0cmFjZWJhY2tzLCBhbmQgaXMgYWxzbyBjb21waWxlZCBpbiB0byB0aGUKKyAgIGJ5dGUtY29kZSBmaWxlLCB3aGVyZSBpdCB3aWxsIGJlIHVzZWQgaW4gdHJhY2ViYWNrcyBhbmQgb3RoZXIgbWVzc2FnZXMgaW4KKyAgIGNhc2VzIHdoZXJlIHRoZSBzb3VyY2UgZmlsZSBkb2VzIG5vdCBleGlzdCBhdCB0aGUgdGltZSB0aGUgYnl0ZS1jb2RlIGZpbGUgaXMKKyAgIGV4ZWN1dGVkLgorCisuLiBjbWRvcHRpb246OiAteCByZWdleAorCisgICByZWdleCBpcyB1c2VkIHRvIHNlYXJjaCB0aGUgZnVsbCBwYXRoIHRvIGVhY2ggZmlsZSBjb25zaWRlcmVkIGZvcgorICAgY29tcGlsYXRpb24sIGFuZCBpZiB0aGUgcmVnZXggcHJvZHVjZXMgYSBtYXRjaCwgdGhlIGZpbGUgaXMgc2tpcHBlZC4KKworLi4gY21kb3B0aW9uOjogLWkgbGlzdAorCisgICBSZWFkIHRoZSBmaWxlIGBgbGlzdGBgIGFuZCBhZGQgZWFjaCBsaW5lIHRoYXQgaXQgY29udGFpbnMgdG8gdGhlIGxpc3Qgb2YKKyAgIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBjb21waWxlLiAgSWYgYGBsaXN0YGAgaXMgYGAtYGAsIHJlYWQgbGluZXMgZnJvbQorICAgYGBzdGRpbmBgLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgQWRkZWQgdGhlIGBgLWlgYCAgb3B0aW9uLgorCisKK1B1YmxpYyBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0KKworLi4gZnVuY3Rpb246OiBjb21waWxlX2RpcihkaXJbLCBtYXhsZXZlbHNbLCBkZGlyWywgZm9yY2VbLCByeFssIHF1aWV0XV1dXV0pCiAKICAgIFJlY3Vyc2l2ZWx5IGRlc2NlbmQgdGhlIGRpcmVjdG9yeSB0cmVlIG5hbWVkIGJ5ICpkaXIqLCBjb21waWxpbmcgYWxsIDpmaWxlOmAucHlgCi0gICBmaWxlcyBhbG9uZyB0aGUgd2F5LiAgVGhlICptYXhsZXZlbHMqIHBhcmFtZXRlciBpcyB1c2VkIHRvIGxpbWl0IHRoZSBkZXB0aCBvZgotICAgdGhlIHJlY3Vyc2lvbjsgaXQgZGVmYXVsdHMgdG8gYGAxMGBgLiAgSWYgKmRkaXIqIGlzIGdpdmVuLCBpdCBpcyB1c2VkIGFzIHRoZQotICAgYmFzZSBwYXRoIGZyb20gIHdoaWNoIHRoZSBmaWxlbmFtZXMgdXNlZCBpbiBlcnJvciBtZXNzYWdlcyB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgIGZpbGVzIGFsb25nIHRoZSB3YXkuCisKKyAgIFRoZSAqbWF4bGV2ZWxzKiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBsaW1pdCB0aGUgZGVwdGggb2YgdGhlIHJlY3Vyc2lvbjsgaXQKKyAgIGRlZmF1bHRzIHRvIGBgMTBgYC4KKworICAgSWYgKmRkaXIqIGlzIGdpdmVuLCBpdCBpcyBwcmVwZW5kZWQgdG8gdGhlIHBhdGggdG8gZWFjaCBmaWxlIGJlaW5nIGNvbXBpbGVkCisgICBmb3IgdXNlIGluIGNvbXBpbGF0aW9uIHRpbWUgdHJhY2ViYWNrcywgYW5kIGlzIGFsc28gY29tcGlsZWQgaW4gdG8gdGhlCisgICBieXRlLWNvZGUgZmlsZSwgd2hlcmUgaXQgd2lsbCBiZSB1c2VkIGluIHRyYWNlYmFja3MgYW5kIG90aGVyIG1lc3NhZ2VzIGluCisgICBjYXNlcyB3aGVyZSB0aGUgc291cmNlIGZpbGUgZG9lcyBub3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGJ5dGUtY29kZSBmaWxlIGlzCisgICBleGVjdXRlZC4KKwogICAgSWYgKmZvcmNlKiBpcyB0cnVlLCBtb2R1bGVzIGFyZSByZS1jb21waWxlZCBldmVuIGlmIHRoZSB0aW1lc3RhbXBzIGFyZSB1cCB0bwogICAgZGF0ZS4KIAotICAgSWYgKnJ4KiBpcyBnaXZlbiwgaXQgc3BlY2lmaWVzIGEgcmVndWxhciBleHByZXNzaW9uIG9mIGZpbGUgbmFtZXMgdG8gZXhjbHVkZQotICAgZnJvbSB0aGUgc2VhcmNoOyB0aGF0IGV4cHJlc3Npb24gaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBmdWxsIHBhdGguCisgICBJZiAqcngqIGlzIGdpdmVuLCBpdHMgc2VhcmNoIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRlIHBhdGggdG8gZWFjaAorICAgZmlsZSBjb25zaWRlcmVkIGZvciBjb21waWxhdGlvbiwgYW5kIGlmIGl0IHJldHVybnMgYSB0cnVlIHZhbHVlLCB0aGUgZmlsZQorICAgaXMgc2tpcHBlZC4KIAotICAgSWYgKnF1aWV0KiBpcyB0cnVlLCBub3RoaW5nIGlzIHByaW50ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCBpbiBub3JtYWwKLSAgIG9wZXJhdGlvbi4KKyAgIElmICpxdWlldCogaXMgdHJ1ZSwgbm90aGluZyBpcyBwcmludGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgdW5sZXNzIGVycm9ycworICAgb2NjdXIuCisKKworLi4gZnVuY3Rpb246OiBjb21waWxlX2ZpbGUoZnVsbG5hbWVbLCBkZGlyWywgZm9yY2VbLCByeFssIHF1aWV0XV1dXSkKKworICAgQ29tcGlsZSB0aGUgZmlsZSB3aXRoIHBhdGggKmZ1bGxuYW1lKi4KKworICAgSWYgKmRkaXIqIGlzIGdpdmVuLCBpdCBpcyBwcmVwZW5kZWQgdG8gdGhlIHBhdGggdG8gdGhlIGZpbGUgYmVpbmcgY29tcGlsZWQKKyAgIGZvciB1c2UgaW4gY29tcGlsYXRpb24gdGltZSB0cmFjZWJhY2tzLCBhbmQgaXMgYWxzbyBjb21waWxlZCBpbiB0byB0aGUKKyAgIGJ5dGUtY29kZSBmaWxlLCB3aGVyZSBpdCB3aWxsIGJlIHVzZWQgaW4gdHJhY2ViYWNrcyBhbmQgb3RoZXIgbWVzc2FnZXMgaW4KKyAgIGNhc2VzIHdoZXJlIHRoZSBzb3VyY2UgZmlsZSBkb2VzIG5vdCBleGlzdCBhdCB0aGUgdGltZSB0aGUgYnl0ZS1jb2RlIGZpbGUgaXMKKyAgIGV4ZWN1dGVkLgorCisgICBJZiAqcngqIGlzIGdpdmVuLCBpdHMgc2VhcmNoIG1ldGhvZCBpcyBwYXNzZWQgdGhlIGZ1bGwgcGF0aCBuYW1lIHRvIHRoZQorICAgZmlsZSBiZWluZyBjb21waWxlZCwgYW5kIGlmIGl0IHJldHVybnMgYSB0cnVlIHZhbHVlLCB0aGUgZmlsZSBpcyBub3QKKyAgIGNvbXBpbGVkIGFuZCBgYFRydWVgYCBpcyByZXR1cm5lZC4KKworICAgSWYgKnF1aWV0KiBpcyB0cnVlLCBub3RoaW5nIGlzIHByaW50ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCB1bmxlc3MgZXJyb3JzCisgICBvY2N1ci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CiAKIAogLi4gZnVuY3Rpb246OiBjb21waWxlX3BhdGgoW3NraXBfY3VyZGlyWywgbWF4bGV2ZWxzWywgZm9yY2VdXV0pCiAKICAgIEJ5dGUtY29tcGlsZSBhbGwgdGhlIDpmaWxlOmAucHlgIGZpbGVzIGZvdW5kIGFsb25nIGBgc3lzLnBhdGhgYC4gSWYKLSAgICpza2lwX2N1cmRpciogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgbm90IGluY2x1ZGVkIGluCi0gICB0aGUgc2VhcmNoLiAgVGhlICptYXhsZXZlbHMqIGFuZCAqZm9yY2UqIHBhcmFtZXRlcnMgZGVmYXVsdCB0byBgYDBgYCBhbmQgYXJlCi0gICBwYXNzZWQgdG8gdGhlIDpmdW5jOmBjb21waWxlX2RpcmAgZnVuY3Rpb24uCisgICAqc2tpcF9jdXJkaXIqIGlzIHRydWUgKHRoZSBkZWZhdWx0KSwgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIG5vdCBpbmNsdWRlZAorICAgaW4gdGhlIHNlYXJjaC4gIEFsbCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gdGhlIDpmdW5jOmBjb21waWxlX2RpcmAKKyAgIGZ1bmN0aW9uLiAgTm90ZSB0aGF0IHVubGlrZSB0aGUgb3RoZXIgY29tcGlsZSBmdW5jdGlvbnMsIGBgbWF4bGV2ZWxzYGAKKyAgIGRlZmF1bHRzIHRvIGBgMGBgLgogCiBUbyBmb3JjZSBhIHJlY29tcGlsZSBvZiBhbGwgdGhlIDpmaWxlOmAucHlgIGZpbGVzIGluIHRoZSA6ZmlsZTpgTGliL2AKIHN1YmRpcmVjdG9yeSBhbmQgYWxsIGl0cyBzdWJkaXJlY3Rvcmllczo6CkBAIC01OSw0ICsxMzQsMyBAQAogCiAgICBNb2R1bGUgOm1vZDpgcHlfY29tcGlsZWAKICAgICAgIEJ5dGUtY29tcGlsZSBhIHNpbmdsZSBzb3VyY2UgZmlsZS4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29tcGlsZXIucnN0IGIvRG9jL2xpYnJhcnkvY29tcGlsZXIucnN0CmluZGV4IDk5MTYyOGEuLjQ1OGU2NTMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbXBpbGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb21waWxlci5yc3QKQEAgLTE4LDcgKzE4LDcgQEAKIAogVGhlIDptb2Q6YGNvbXBpbGVyYCBwYWNrYWdlIGlzIGEgUHl0aG9uIHNvdXJjZSB0byBieXRlY29kZSB0cmFuc2xhdG9yIHdyaXR0ZW4gaW4KIFB5dGhvbi4gIEl0IHVzZXMgdGhlIGJ1aWx0LWluIHBhcnNlciBhbmQgc3RhbmRhcmQgOm1vZDpgcGFyc2VyYCBtb2R1bGUgdG8KLWdlbmVyYXRlZCBhIGNvbmNyZXRlIHN5bnRheCB0cmVlLiAgVGhpcyB0cmVlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYW4gYWJzdHJhY3QKK2dlbmVyYXRlIGEgY29uY3JldGUgc3ludGF4IHRyZWUuICBUaGlzIHRyZWUgaXMgdXNlZCB0byBnZW5lcmF0ZSBhbiBhYnN0cmFjdAogc3ludGF4IHRyZWUgKEFTVCkgYW5kIHRoZW4gUHl0aG9uIGJ5dGVjb2RlLgogCiBUaGUgZnVsbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBwYWNrYWdlIGR1cGxpY2F0ZXMgdGhlIGJ1aWx0LWluIGNvbXBpbGVyIHByb3ZpZGVkCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25maWdwYXJzZXIucnN0IGIvRG9jL2xpYnJhcnkvY29uZmlncGFyc2VyLnJzdAppbmRleCA4NjdmMDkxLi40YjFlN2EwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25maWdwYXJzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5yc3QKQEAgLTQzLDcgKzQzLDcgQEAKIAogQ29uZmlndXJhdGlvbiBmaWxlcyBtYXkgaW5jbHVkZSBjb21tZW50cywgcHJlZml4ZWQgYnkgc3BlY2lmaWMgY2hhcmFjdGVycyAoYGAjYGAKIGFuZCBgYDtgYCkuICBDb21tZW50cyBtYXkgYXBwZWFyIG9uIHRoZWlyIG93biBpbiBhbiBvdGhlcndpc2UgZW1wdHkgbGluZSwgb3IgbWF5Ci1iZSBlbnRlcmVkIGluIGxpbmVzIGhvbGRpbmcgdmFsdWVzIG9yIHNwZWN0aW9uIG5hbWVzLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGV5CitiZSBlbnRlcmVkIGluIGxpbmVzIGhvbGRpbmcgdmFsdWVzIG9yIHNlY3Rpb24gbmFtZXMuICBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZXkKIG5lZWQgdG8gYmUgcHJlY2VkZWQgYnkgYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciB0byBiZSByZWNvZ25pemVkIGFzIGEgY29tbWVudC4KIChGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIG9ubHkgYGA7YGAgc3RhcnRzIGFuIGlubGluZSBjb21tZW50LCB3aGlsZSBgYCNgYAogZG9lcyBub3QuKQpAQCAtNzQsMTIgKzc0LDE2IEBACiB3cml0ZS1iYWNrLCBhcyB3aWxsIGJlIHRoZSBrZXlzIHdpdGhpbiBlYWNoIHNlY3Rpb24uCiAKIAotLi4gY2xhc3M6OiBSYXdDb25maWdQYXJzZXIoW2RlZmF1bHRzWywgZGljdF90eXBlXV0pCisuLiBjbGFzczo6IFJhd0NvbmZpZ1BhcnNlcihbZGVmYXVsdHNbLCBkaWN0X3R5cGVbLCBhbGxvd19ub192YWx1ZV1dXSkKIAogICAgVGhlIGJhc2ljIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiAgV2hlbiAqZGVmYXVsdHMqIGlzIGdpdmVuLCBpdCBpcyBpbml0aWFsaXplZAogICAgaW50byB0aGUgZGljdGlvbmFyeSBvZiBpbnRyaW5zaWMgZGVmYXVsdHMuICBXaGVuICpkaWN0X3R5cGUqIGlzIGdpdmVuLCBpdCB3aWxsCiAgICBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgZGljdGlvbmFyeSBvYmplY3RzIGZvciB0aGUgbGlzdCBvZiBzZWN0aW9ucywgZm9yIHRoZQotICAgb3B0aW9ucyB3aXRoaW4gYSBzZWN0aW9uLCBhbmQgZm9yIHRoZSBkZWZhdWx0IHZhbHVlcy4gVGhpcyBjbGFzcyBkb2VzIG5vdAorICAgb3B0aW9ucyB3aXRoaW4gYSBzZWN0aW9uLCBhbmQgZm9yIHRoZSBkZWZhdWx0IHZhbHVlcy4gIFdoZW4gKmFsbG93X25vX3ZhbHVlKgorICAgaXMgdHJ1ZSAoZGVmYXVsdDogYGBGYWxzZWBgKSwgb3B0aW9ucyB3aXRob3V0IHZhbHVlcyBhcmUgYWNjZXB0ZWQ7IHRoZSB2YWx1ZQorICAgcHJlc2VudGVkIGZvciB0aGVzZSBpcyBgYE5vbmVgYC4KKworICAgVGhpcyBjbGFzcyBkb2VzIG5vdAogICAgc3VwcG9ydCB0aGUgbWFnaWNhbCBpbnRlcnBvbGF0aW9uIGJlaGF2aW9yLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKQEAgLTg3LDggKzkxLDEyIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgogICAgICAgKmRpY3RfdHlwZSogd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgVGhlIGRlZmF1bHQgKmRpY3RfdHlwZSogaXMgOmNsYXNzOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAuCisgICAgICAqYWxsb3dfbm9fdmFsdWUqIHdhcyBhZGRlZC4KIAotLi4gY2xhc3M6OiBDb25maWdQYXJzZXIoW2RlZmF1bHRzWywgZGljdF90eXBlXV0pCisKKy4uIGNsYXNzOjogQ29uZmlnUGFyc2VyKFtkZWZhdWx0c1ssIGRpY3RfdHlwZVssIGFsbG93X25vX3ZhbHVlXV1dKQogCiAgICBEZXJpdmVkIGNsYXNzIG9mIDpjbGFzczpgUmF3Q29uZmlnUGFyc2VyYCB0aGF0IGltcGxlbWVudHMgdGhlIG1hZ2ljYWwKICAgIGludGVycG9sYXRpb24gZmVhdHVyZSBhbmQgYWRkcyBvcHRpb25hbCBhcmd1bWVudHMgdG8gdGhlIDptZXRoOmBnZXRgIGFuZApAQCAtMTAzLDggKzExMSwxNyBAQAogICAgb3B0aW9uIG5hbWVzIHRvIGxvd2VyIGNhc2UpLCB0aGUgdmFsdWVzIGBgZm9vICUoYmFyKXNgYCBhbmQgYGBmb28gJShCQVIpc2BgIGFyZQogICAgZXF1aXZhbGVudC4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMi4zCiAKLS4uIGNsYXNzOjogU2FmZUNvbmZpZ1BhcnNlcihbZGVmYXVsdHNbLCBkaWN0X3R5cGVdXSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CisgICAgICAqZGljdF90eXBlKiB3YXMgYWRkZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBUaGUgZGVmYXVsdCAqZGljdF90eXBlKiBpcyA6Y2xhc3M6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YC4KKyAgICAgICphbGxvd19ub192YWx1ZSogd2FzIGFkZGVkLgorCisKKy4uIGNsYXNzOjogU2FmZUNvbmZpZ1BhcnNlcihbZGVmYXVsdHNbLCBkaWN0X3R5cGVbLCBhbGxvd19ub192YWx1ZV1dXSkKIAogICAgRGVyaXZlZCBjbGFzcyBvZiA6Y2xhc3M6YENvbmZpZ1BhcnNlcmAgdGhhdCBpbXBsZW1lbnRzIGEgbW9yZS1zYW5lIHZhcmlhbnQgb2YKICAgIHRoZSBtYWdpY2FsIGludGVycG9sYXRpb24gZmVhdHVyZS4gIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgbW9yZSBwcmVkaWN0YWJsZSBhcwpAQCAtMTE1LDYgKzEzMiwxMyBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKKyAgICAgICpkaWN0X3R5cGUqIHdhcyBhZGRlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFRoZSBkZWZhdWx0ICpkaWN0X3R5cGUqIGlzIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgLgorICAgICAgKmFsbG93X25vX3ZhbHVlKiB3YXMgYWRkZWQuCisKIAogLi4gZXhjZXB0aW9uOjogRXJyb3IKIApAQCAtNDg2LDMgKzUxMCwzOCBAQAogICAgICAgICAgICBvcHRfbW92ZShjb25maWcsIHNlY3Rpb24xLCBzZWN0aW9uMiwgb3B0aW9uKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGNvbmZpZy5yZW1vdmVfb3B0aW9uKHNlY3Rpb24xLCBvcHRpb24pCisKK1NvbWUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUga25vd24gdG8gaW5jbHVkZSBzZXR0aW5ncyB3aXRob3V0IHZhbHVlcywgYnV0IHdoaWNoCitvdGhlcndpc2UgY29uZm9ybSB0byB0aGUgc3ludGF4IHN1cHBvcnRlZCBieSA6bW9kOmBDb25maWdQYXJzZXJgLiAgVGhlCisqYWxsb3dfbm9fdmFsdWUqIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBzdWNoCit2YWx1ZXMgc2hvdWxkIGJlIGFjY2VwdGVkOgorCisuLiBkb2N0ZXN0OjoKKworICAgPj4+IGltcG9ydCBDb25maWdQYXJzZXIKKyAgID4+PiBpbXBvcnQgaW8KKworICAgPj4+IHNhbXBsZV9jb25maWcgPSAiIiIKKyAgIC4uLiBbbXlzcWxkXQorICAgLi4uIHVzZXIgPSBteXNxbAorICAgLi4uIHBpZC1maWxlID0gL3Zhci9ydW4vbXlzcWxkL215c3FsZC5waWQKKyAgIC4uLiBza2lwLWV4dGVybmFsLWxvY2tpbmcKKyAgIC4uLiBvbGRfcGFzc3dvcmRzID0gMQorICAgLi4uIHNraXAtYmRiCisgICAuLi4gc2tpcC1pbm5vZGIKKyAgIC4uLiAiIiIKKyAgID4+PiBjb25maWcgPSBDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyKGFsbG93X25vX3ZhbHVlPVRydWUpCisgICA+Pj4gY29uZmlnLnJlYWRmcChpby5CeXRlc0lPKHNhbXBsZV9jb25maWcpKQorCisgICA+Pj4gIyBTZXR0aW5ncyB3aXRoIHZhbHVlcyBhcmUgdHJlYXRlZCBhcyBiZWZvcmU6CisgICA+Pj4gY29uZmlnLmdldCgibXlzcWxkIiwgInVzZXIiKQorICAgJ215c3FsJworCisgICA+Pj4gIyBTZXR0aW5ncyB3aXRob3V0IHZhbHVlcyBwcm92aWRlIE5vbmU6CisgICA+Pj4gY29uZmlnLmdldCgibXlzcWxkIiwgInNraXAtYmRiIikKKworICAgPj4+ICMgU2V0dGluZ3Mgd2hpY2ggYXJlbid0IHNwZWNpZmllZCBzdGlsbCByYWlzZSBhbiBlcnJvcjoKKyAgID4+PiBjb25maWcuZ2V0KCJteXNxbGQiLCAiZG9lcy1ub3QtZXhpc3QiKQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAuLi4KKyAgIENvbmZpZ1BhcnNlci5Ob09wdGlvbkVycm9yOiBObyBvcHRpb24gJ2RvZXMtbm90LWV4aXN0JyBpbiBzZWN0aW9uOiAnbXlzcWxkJwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uc3RhbnRzLnJzdCBiL0RvYy9saWJyYXJ5L2NvbnN0YW50cy5yc3QKaW5kZXggZTZkOTI3YS4uODBlNzkyYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29uc3RhbnRzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25zdGFudHMucnN0CkBAIC00MiwxNCArNDIsMTcgQEAKIC4uIGRhdGE6OiBfX2RlYnVnX18KIAogICAgVGhpcyBjb25zdGFudCBpcyB0cnVlIGlmIFB5dGhvbiB3YXMgbm90IHN0YXJ0ZWQgd2l0aCBhbiA6b3B0aW9uOmAtT2Agb3B0aW9uLgotICAgSXQgY2Fubm90IGJlIHJlYXNzaWduZWQuICBTZWUgYWxzbyB0aGUgOmtleXdvcmQ6YGFzc2VydGAgc3RhdGVtZW50LgorICAgU2VlIGFsc28gdGhlIDprZXl3b3JkOmBhc3NlcnRgIHN0YXRlbWVudC4KIAogCiAuLiBub3RlOjoKIAotICAgVGhlIG5hbWUgOmRhdGE6YE5vbmVgIGNhbm5vdCBiZSByZWFzc2lnbmVkIChhc3NpZ25tZW50cyB0byBpdCwgZXZlbiBhcyBhbgotICAgYXR0cmlidXRlIG5hbWUsIHJhaXNlIDpleGM6YFN5bnRheEVycm9yYCksIHNvIGl0IGNhbiBiZSBjb25zaWRlcmVkIGEgInRydWUiCi0gICBjb25zdGFudC4KKyAgIFRoZSBuYW1lcyA6ZGF0YTpgTm9uZWAgYW5kIDpkYXRhOmBfX2RlYnVnX19gIGNhbm5vdCBiZSByZWFzc2lnbmVkCisgICAoYXNzaWdubWVudHMgdG8gdGhlbSwgZXZlbiBhcyBhbiBhdHRyaWJ1dGUgbmFtZSwgcmFpc2UgOmV4YzpgU3ludGF4RXJyb3JgKSwKKyAgIHNvIHRoZXkgY2FuIGJlIGNvbnNpZGVyZWQgInRydWUiIGNvbnN0YW50cy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEFzc2lnbm1lbnRzIHRvIGBgX19kZWJ1Z19fYGAgYXMgYW4gYXR0cmlidXRlIGJlY2FtZSBpbGxlZ2FsLgogCiAKIENvbnN0YW50cyBhZGRlZCBieSB0aGUgOm1vZDpgc2l0ZWAgbW9kdWxlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdCBiL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CmluZGV4IGI1ZTlhYTguLmM0MzUwODIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CkBAIC0xMSw2ICsxMSwxMSBAQAogc3RhdGVtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgYWxzbyA6cmVmOmB0eXBlY29udGV4dG1hbmFnZXJgIGFuZAogOnJlZjpgY29udGV4dC1tYW5hZ2Vyc2AuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYGNvbnRleHRsaWIgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvY29udGV4dGxpYi5weT92aWV3PW1hcmt1cD5gXworCiBGdW5jdGlvbnMgcHJvdmlkZWQ6CiAKIApAQCAtNTgsMjEgKzYzLDE4IEBACiAKICAgIENvbWJpbmUgbXVsdGlwbGUgY29udGV4dCBtYW5hZ2VycyBpbnRvIGEgc2luZ2xlIG5lc3RlZCBjb250ZXh0IG1hbmFnZXIuCiAKLSAgIENvZGUgbGlrZSB0aGlzOjoKKyAgIFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgdGhlIG11bHRpcGxlIG1hbmFnZXIgZm9ybQorICAgb2YgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCisKKyAgIFRoZSBvbmUgYWR2YW50YWdlIG9mIHRoaXMgZnVuY3Rpb24gb3ZlciB0aGUgbXVsdGlwbGUgbWFuYWdlciBmb3JtIG9mIHRoZQorICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBpcyB0aGF0IGFyZ3VtZW50IHVucGFja2luZyBhbGxvd3MgaXQgdG8gYmUKKyAgIHVzZWQgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBjb250ZXh0IG1hbmFnZXJzIGFzIGZvbGxvd3M6OgogCiAgICAgICBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IG5lc3RlZAogCi0gICAgICB3aXRoIG5lc3RlZChBKCksIEIoKSwgQygpKSBhcyAoWCwgWSwgWik6CisgICAgICB3aXRoIG5lc3RlZCgqbWFuYWdlcnMpOgogICAgICAgICAgIGRvX3NvbWV0aGluZygpCiAKLSAgIGlzIGVxdWl2YWxlbnQgdG8gdGhpczo6Ci0KLSAgICAgIG0xLCBtMiwgbTMgPSBBKCksIEIoKSwgQygpCi0gICAgICB3aXRoIG0xIGFzIFg6Ci0gICAgICAgICAgd2l0aCBtMiBhcyBZOgotICAgICAgICAgICAgICB3aXRoIG0zIGFzIFo6Ci0gICAgICAgICAgICAgICAgICBkb19zb21ldGhpbmcoKQotCiAgICBOb3RlIHRoYXQgaWYgdGhlIDptZXRoOmBfX2V4aXRfX2AgbWV0aG9kIG9mIG9uZSBvZiB0aGUgbmVzdGVkIGNvbnRleHQgbWFuYWdlcnMKICAgIGluZGljYXRlcyBhbiBleGNlcHRpb24gc2hvdWxkIGJlIHN1cHByZXNzZWQsIG5vIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiB3aWxsIGJlCiAgICBwYXNzZWQgdG8gYW55IHJlbWFpbmluZyBvdXRlciBjb250ZXh0IG1hbmFnZXJzLiBTaW1pbGFybHksIGlmIHRoZQpAQCAtODIsNiArODQsMjggQEAKICAgIDptZXRoOmBfX2V4aXRfX2AgbWV0aG9kcyBzaG91bGQgYXZvaWQgcmFpc2luZyBleGNlcHRpb25zLCBhbmQgaW4gcGFydGljdWxhciB0aGV5CiAgICBzaG91bGQgbm90IHJlLXJhaXNlIGEgcGFzc2VkLWluIGV4Y2VwdGlvbi4KIAorICAgVGhpcyBmdW5jdGlvbiBoYXMgdHdvIG1ham9yIHF1aXJrcyB0aGF0IGhhdmUgbGVkIHRvIGl0IGJlaW5nIGRlcHJlY2F0ZWQuIEZpcnN0bHksCisgICBhcyB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgYWxsIGNvbnN0cnVjdGVkIGJlZm9yZSB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZCwgdGhlCisgICA6bWV0aDpgX19uZXdfX2AgYW5kIDptZXRoOmBfX2luaXRfX2AgbWV0aG9kcyBvZiB0aGUgaW5uZXIgY29udGV4dCBtYW5hZ2VycyBhcmUKKyAgIG5vdCBhY3R1YWxseSBjb3ZlcmVkIGJ5IHRoZSBzY29wZSBvZiB0aGUgb3V0ZXIgY29udGV4dCBtYW5hZ2Vycy4gVGhhdCBtZWFucywgZm9yCisgICBleGFtcGxlLCB0aGF0IHVzaW5nIDpmdW5jOmBuZXN0ZWRgIHRvIG9wZW4gdHdvIGZpbGVzIGlzIGEgcHJvZ3JhbW1pbmcgZXJyb3IgYXMgdGhlCisgICBmaXJzdCBmaWxlIHdpbGwgbm90IGJlIGNsb3NlZCBwcm9tcHRseSBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gb3BlbmluZworICAgdGhlIHNlY29uZCBmaWxlLgorCisgICBTZWNvbmRseSwgaWYgdGhlIDptZXRoOmBfX2VudGVyX19gIG1ldGhvZCBvZiBvbmUgb2YgdGhlIGlubmVyIGNvbnRleHQgbWFuYWdlcnMKKyAgIHJhaXNlcyBhbiBleGNlcHRpb24gdGhhdCBpcyBjYXVnaHQgYW5kIHN1cHByZXNzZWQgYnkgdGhlIDptZXRoOmBfX2V4aXRfX2AgbWV0aG9kCisgICBvZiBvbmUgb2YgdGhlIG91dGVyIGNvbnRleHQgbWFuYWdlcnMsIHRoaXMgY29uc3RydWN0IHdpbGwgcmFpc2UKKyAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgcmF0aGVyIHRoYW4gc2tpcHBpbmcgdGhlIGJvZHkgb2YgdGhlIDprZXl3b3JkOmB3aXRoYAorICAgc3RhdGVtZW50LgorCisgICBEZXZlbG9wZXJzIHRoYXQgbmVlZCB0byBzdXBwb3J0IG5lc3Rpbmcgb2YgYSB2YXJpYWJsZSBudW1iZXIgb2YgY29udGV4dCBtYW5hZ2VycworICAgY2FuIGVpdGhlciB1c2UgdGhlIDptb2Q6YHdhcm5pbmdzYCBtb2R1bGUgdG8gc3VwcHJlc3MgdGhlIERlcHJlY2F0aW9uV2FybmluZworICAgcmFpc2VkIGJ5IHRoaXMgZnVuY3Rpb24gb3IgZWxzZSB1c2UgdGhpcyBmdW5jdGlvbiBhcyBhIG1vZGVsIGZvciBhbiBhcHBsaWNhdGlvbgorICAgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgIFRoZSB3aXRoLXN0YXRlbWVudCBub3cgc3VwcG9ydHMgdGhpcyBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5ICh3aXRob3V0IHRoZQorICAgICAgY29uZnVzaW5nIGVycm9yIHByb25lIHF1aXJrcykuCiAKIC4uIGZ1bmN0aW9uOjogY2xvc2luZyh0aGluZykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29va2llLnJzdCBiL0RvYy9saWJyYXJ5L2Nvb2tpZS5yc3QKaW5kZXggYjZhODVmNS4uM2JkYzYxYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29va2llLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb29raWUucnN0CkBAIC0yMzUsOCArMjM1LDYgQEAKIAogICAgPj4+IGltcG9ydCBDb29raWUKICAgID4+PiBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCi0gICA+Pj4gQyA9IENvb2tpZS5TZXJpYWxDb29raWUoKQotICAgPj4+IEMgPSBDb29raWUuU21hcnRDb29raWUoKQogICAgPj4+IENbImZpZyJdID0gIm5ld3RvbiIKICAgID4+PiBDWyJzdWdhciJdID0gIndhZmVyIgogICAgPj4+IHByaW50IEMgIyBnZW5lcmF0ZSBIVFRQIGhlYWRlcnMKQEAgLTI0NSwyOCArMjQzLDI3IEBACiAgICA+Pj4gcHJpbnQgQy5vdXRwdXQoKSAjIHNhbWUgdGhpbmcKICAgIFNldC1Db29raWU6IGZpZz1uZXd0b24KICAgIFNldC1Db29raWU6IHN1Z2FyPXdhZmVyCi0gICA+Pj4gQyA9IENvb2tpZS5TbWFydENvb2tpZSgpCisgICA+Pj4gQyA9IENvb2tpZS5TaW1wbGVDb29raWUoKQogICAgPj4+IENbInJvY2t5Il0gPSAicm9hZCIKICAgID4+PiBDWyJyb2NreSJdWyJwYXRoIl0gPSAiL2Nvb2tpZSIKICAgID4+PiBwcmludCBDLm91dHB1dChoZWFkZXI9IkNvb2tpZToiKQogICAgQ29va2llOiByb2NreT1yb2FkOyBQYXRoPS9jb29raWUKICAgID4+PiBwcmludCBDLm91dHB1dChhdHRycz1bXSwgaGVhZGVyPSJDb29raWU6IikKICAgIENvb2tpZTogcm9ja3k9cm9hZAotICAgPj4+IEMgPSBDb29raWUuU21hcnRDb29raWUoKQorICAgPj4+IEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkKICAgID4+PiBDLmxvYWQoImNoaXBzPWFob3k7IHZpZW5uYT1maW5nZXIiKSAjIGxvYWQgZnJvbSBhIHN0cmluZyAoSFRUUCBoZWFkZXIpCiAgICA+Pj4gcHJpbnQgQwogICAgU2V0LUNvb2tpZTogY2hpcHM9YWhveQogICAgU2V0LUNvb2tpZTogdmllbm5hPWZpbmdlcgotICAgPj4+IEMgPSBDb29raWUuU21hcnRDb29raWUoKQorICAgPj4+IEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkKICAgID4+PiBDLmxvYWQoJ2tlZWJsZXI9IkU9ZXZlcnlib2R5OyBMPVxcIkxvdmVzXFwiOyBmdWRnZT1cXDAxMjsiOycpCiAgICA+Pj4gcHJpbnQgQwogICAgU2V0LUNvb2tpZToga2VlYmxlcj0iRT1ldmVyeWJvZHk7IEw9XCJMb3Zlc1wiOyBmdWRnZT1cMDEyOyIKLSAgID4+PiBDID0gQ29va2llLlNtYXJ0Q29va2llKCkKKyAgID4+PiBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCiAgICA+Pj4gQ1sib3JlbyJdID0gImRvdWJsZXN0dWZmIgogICAgPj4+IENbIm9yZW8iXVsicGF0aCJdID0gIi8iCiAgICA+Pj4gcHJpbnQgQwogICAgU2V0LUNvb2tpZTogb3Jlbz1kb3VibGVzdHVmZjsgUGF0aD0vCi0gICA+Pj4gQyA9IENvb2tpZS5TbWFydENvb2tpZSgpCiAgICA+Pj4gQ1sidHdpeCJdID0gIm5vbmUgZm9yIHlvdSIKICAgID4+PiBDWyJ0d2l4Il0udmFsdWUKICAgICdub25lIGZvciB5b3UnCkBAIC0yODAsNiArMjc3LDggQEAKICAgID4+PiBwcmludCBDCiAgICBTZXQtQ29va2llOiBudW1iZXI9NwogICAgU2V0LUNvb2tpZTogc3RyaW5nPXNldmVuCisgICA+Pj4gIyBTZXJpYWxDb29raWUgYW5kIFNtYXJ0Q29va2llIGFyZSBkZXByZWNhdGVkCisgICA+Pj4gIyB1c2luZyBpdCBjYW4gY2F1c2Ugc2VjdXJpdHkgbG9vcGhvbGVzIGluIHlvdXIgY29kZS4KICAgID4+PiBDID0gQ29va2llLlNlcmlhbENvb2tpZSgpCiAgICA+Pj4gQ1sibnVtYmVyIl0gPSA3CiAgICA+Pj4gQ1sic3RyaW5nIl0gPSAic2V2ZW4iCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jc3YucnN0IGIvRG9jL2xpYnJhcnkvY3N2LnJzdAppbmRleCBjMzk5YmI3Li4wMzk0MTcwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jc3YucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Nzdi5yc3QKQEAgLTQyNCw2ICs0MjQsMTYgQEAKICAgIEEgcmVhZC1vbmx5IGRlc2NyaXB0aW9uIG9mIHRoZSBkaWFsZWN0IGluIHVzZSBieSB0aGUgd3JpdGVyLgogCiAKK0RpY3RXcml0ZXIgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgcHVibGljIG1ldGhvZDoKKworCisuLiBtZXRob2Q6OiBEaWN0V3JpdGVyLndyaXRlaGVhZGVyKCkKKworICAgV3JpdGUgYSByb3cgd2l0aCB0aGUgZmllbGQgbmFtZXMgKGFzIHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3IpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBfY3N2LWV4YW1wbGVzOgogCiBFeGFtcGxlcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3R5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L2N0eXBlcy5yc3QKaW5kZXggNTgyMzAwYy4uZjQzZTE2NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3R5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jdHlwZXMucnN0CkBAIC0yMjAsNiArMjIwLDggQEAKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3R5cGVzIHR5cGUgICAgICAgICAgfCBDIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFB5dGhvbiB0eXBlICAgICAgICAgICAgICAgIHwKICs9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3wgOmNsYXNzOmBjX2Jvb2xgICAgICAgfCA6Y3R5cGU6YF9Cb29sYCAgICAgICAgICAgICAgICAgICAgICAgICB8IGJvb2wgKDEpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgOmNsYXNzOmBjX2NoYXJgICAgICAgfCA6Y3R5cGU6YGNoYXJgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEtY2hhcmFjdGVyIHN0cmluZyAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgOmNsYXNzOmBjX3djaGFyYCAgICAgfCA6Y3R5cGU6YHdjaGFyX3RgICAgICAgICAgICAgICAgICAgICAgICB8IDEtY2hhcmFjdGVyIHVuaWNvZGUgc3RyaW5nIHwKQEAgLTI1OCw2ICsyNjAsOSBAQAogfCA6Y2xhc3M6YGNfdm9pZF9wYCAgICB8IDpjdHlwZTpgdm9pZCAqYCAgICAgICAgICAgICAgICAgICAgICAgIHwgaW50L2xvbmcgb3IgYGBOb25lYGAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCisoMSkKKyAgIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFueSBvYmplY3Qgd2l0aCBhIHRydXRoIHZhbHVlLgorCiBBbGwgdGhlc2UgdHlwZXMgY2FuIGJlIGNyZWF0ZWQgYnkgY2FsbGluZyB0aGVtIHdpdGggYW4gb3B0aW9uYWwgaW5pdGlhbGl6ZXIgb2YKIHRoZSBjb3JyZWN0IHR5cGUgYW5kIHZhbHVlOjoKIApAQCAtMjI0OCw2ICsyMjUzLDEzIEBACiAgICBSZXByZXNlbnRzIHRoZSBDIDpjdHlwZTpgc2l6ZV90YCBkYXRhdHlwZS4KIAogCisuLiBjbGFzczo6IGNfc3NpemVfdAorCisgICBSZXByZXNlbnRzIHRoZSBDIDpjdHlwZTpgc3NpemVfdGAgZGF0YXR5cGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIC4uIGNsYXNzOjogY191Ynl0ZQogCiAgICBSZXByZXNlbnRzIHRoZSBDIDpjdHlwZTpgdW5zaWduZWQgY2hhcmAgZGF0YXR5cGUsIGl0IGludGVycHJldHMgdGhlIHZhbHVlIGFzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QgYi9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKaW5kZXggMTVhNjYxNi4uMjQyMjliYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdApAQCAtMjg0LDEyICsyODQsMjggQEAKIGVmZmljaWVudCBwaWNrbGluZywgYW5kIGluIEJvb2xlYW4gY29udGV4dHMsIGEgOmNsYXNzOmB0aW1lZGVsdGFgIG9iamVjdCBpcwogY29uc2lkZXJlZCB0byBiZSB0cnVlIGlmIGFuZCBvbmx5IGlmIGl0IGlzbid0IGVxdWFsIHRvIGBgdGltZWRlbHRhKDApYGAuCiAKK0luc3RhbmNlIG1ldGhvZHM6CisKKy4uIG1ldGhvZDo6IHRpbWVkZWx0YS50b3RhbF9zZWNvbmRzKCkKKworICAgUmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2Vjb25kcyBjb250YWluZWQgaW4gdGhlIGR1cmF0aW9uLgorICAgRXF1aXZhbGVudCB0byBgYCh0ZC5taWNyb3NlY29uZHMgKyAodGQuc2Vjb25kcyArIHRkLmRheXMgKiAyNCAqCisgICAzNjAwKSAqIDEwKio2KSAvIDEwKio2YGAgY29tcHV0ZWQgd2l0aCB0cnVlIGRpdmlzaW9uIGVuYWJsZWQuCisKKyAgIE5vdGUgdGhhdCBmb3IgdmVyeSBsYXJnZSB0aW1lIGludGVydmFscyAoZ3JlYXRlciB0aGFuIDI3MCB5ZWFycyBvbgorICAgbW9zdCBwbGF0Zm9ybXMpIHRoaXMgbWV0aG9kIHdpbGwgbG9zZSBtaWNyb3NlY29uZCBhY2N1cmFjeS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogRXhhbXBsZSB1c2FnZToKIAogICAgID4+PiBmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKICAgICA+Pj4geWVhciA9IHRpbWVkZWx0YShkYXlzPTM2NSkKICAgICA+Pj4gYW5vdGhlcl95ZWFyID0gdGltZWRlbHRhKHdlZWtzPTQwLCBkYXlzPTg0LCBob3Vycz0yMywKICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXM9NTAsIHNlY29uZHM9NjAwKSAgIyBhZGRzIHVwIHRvIDM2NSBkYXlzCisgICAgPj4+IHllYXIudG90YWxfc2Vjb25kcygpCisgICAgMzE1MzYwMDAuMAogICAgID4+PiB5ZWFyID09IGFub3RoZXJfeWVhcgogICAgIFRydWUKICAgICA+Pj4gdGVuX3llYXJzID0gMTAgKiB5ZWFyCkBAIC00NTcsNyArNDczLDkgQEAKICAgIFJldHVybiBhIDpjbGFzczpgdGltZS5zdHJ1Y3RfdGltZWAgc3VjaCBhcyByZXR1cm5lZCBieSA6ZnVuYzpgdGltZS5sb2NhbHRpbWVgLgogICAgVGhlIGhvdXJzLCBtaW51dGVzIGFuZCBzZWNvbmRzIGFyZSAwLCBhbmQgdGhlIERTVCBmbGFnIGlzIC0xLiBgYGQudGltZXR1cGxlKClgYAogICAgaXMgZXF1aXZhbGVudCB0byBgYHRpbWUuc3RydWN0X3RpbWUoKGQueWVhciwgZC5tb250aCwgZC5kYXksIDAsIDAsIDAsCi0gICBkLndlZWtkYXkoKSwgZC50b29yZGluYWwoKSAtIGRhdGUoZC55ZWFyLCAxLCAxKS50b29yZGluYWwoKSArIDEsIC0xKSlgYAorICAgZC53ZWVrZGF5KCksIHlkYXksIC0xKSlgYCwgd2hlcmUgYGB5ZGF5ID0gZC50b29yZGluYWwoKSAtIGRhdGUoZC55ZWFyLCAxLAorICAgMSkudG9vcmRpbmFsKCkgKyAxYGAgaXMgdGhlIGRheSBudW1iZXIgd2l0aGluIHRoZSBjdXJyZW50IHllYXIgc3RhcnRpbmcgd2l0aAorICAgYGAxYGAgZm9yIEphbnVhcnkgMXN0LgogCiAKIC4uIG1ldGhvZDo6IGRhdGUudG9vcmRpbmFsKCkKQEAgLTkyMiwxMiArOTQwLDEzIEBACiAKICAgIFJldHVybiBhIDpjbGFzczpgdGltZS5zdHJ1Y3RfdGltZWAgc3VjaCBhcyByZXR1cm5lZCBieSA6ZnVuYzpgdGltZS5sb2NhbHRpbWVgLgogICAgYGBkLnRpbWV0dXBsZSgpYGAgaXMgZXF1aXZhbGVudCB0byBgYHRpbWUuc3RydWN0X3RpbWUoKGQueWVhciwgZC5tb250aCwgZC5kYXksCi0gICBkLmhvdXIsIGQubWludXRlLCBkLnNlY29uZCwgZC53ZWVrZGF5KCksIGQudG9vcmRpbmFsKCkgLSBkYXRlKGQueWVhciwgMSwKLSAgIDEpLnRvb3JkaW5hbCgpICsgMSwgZHN0KSlgYCBUaGUgOmF0dHI6YHRtX2lzZHN0YCBmbGFnIG9mIHRoZSByZXN1bHQgaXMgc2V0Ci0gICBhY2NvcmRpbmcgdG8gdGhlIDptZXRoOmBkc3RgIG1ldGhvZDogIDphdHRyOmB0emluZm9gIGlzIGBgTm9uZWBgIG9yIDptZXRoOmBkc3RgCi0gICByZXR1cm5zIGBgTm9uZWBgLCA6YXR0cjpgdG1faXNkc3RgIGlzIHNldCB0byAgYGAtMWBgOyBlbHNlIGlmIDptZXRoOmBkc3RgCi0gICByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUsIDphdHRyOmB0bV9pc2RzdGAgaXMgc2V0IHRvIGBgMWBgOyBlbHNlIGBgdG1faXNkc3RgYCBpcwotICAgc2V0IHRvIGBgMGBgLgorICAgZC5ob3VyLCBkLm1pbnV0ZSwgZC5zZWNvbmQsIGQud2Vla2RheSgpLCB5ZGF5LCBkc3QpKWBgLCB3aGVyZSBgYHlkYXkgPQorICAgZC50b29yZGluYWwoKSAtIGRhdGUoZC55ZWFyLCAxLCAxKS50b29yZGluYWwoKSArIDFgYCBpcyB0aGUgZGF5IG51bWJlciB3aXRoaW4KKyAgIHRoZSBjdXJyZW50IHllYXIgc3RhcnRpbmcgd2l0aCBgYDFgYCBmb3IgSmFudWFyeSAxc3QuIFRoZSA6YXR0cjpgdG1faXNkc3RgIGZsYWcKKyAgIG9mIHRoZSByZXN1bHQgaXMgc2V0IGFjY29yZGluZyB0byB0aGUgOm1ldGg6YGRzdGAgbWV0aG9kOiA6YXR0cjpgdHppbmZvYCBpcworICAgYGBOb25lYGAgb3IgOm1ldGg6YGRzdGAgcmV0dXJucyBgYE5vbmVgYCwgOmF0dHI6YHRtX2lzZHN0YCBpcyBzZXQgdG8gYGAtMWBgOworICAgZWxzZSBpZiA6bWV0aDpgZHN0YCByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUsIDphdHRyOmB0bV9pc2RzdGAgaXMgc2V0IHRvIGBgMWBgOworICAgZWxzZSA6YXR0cjpgdG1faXNkc3RgIGlzIHNldCB0byBgYDBgYC4KIAogCiAuLiBtZXRob2Q6OiBkYXRldGltZS51dGN0aW1ldHVwbGUoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGVjaW1hbC5yc3QgYi9Eb2MvbGlicmFyeS9kZWNpbWFsLnJzdAppbmRleCBhZDQ0YmRhLi4zNTc4ODJmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZWNpbWFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kZWNpbWFsLnJzdApAQCAtMzUsOSArMzUsOSBAQAogICBwZW9wbGUgbGVhcm4gYXQgc2Nob29sLiIgLS0gZXhjZXJwdCBmcm9tIHRoZSBkZWNpbWFsIGFyaXRobWV0aWMgc3BlY2lmaWNhdGlvbi4KIAogKiBEZWNpbWFsIG51bWJlcnMgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuICBJbiBjb250cmFzdCwgbnVtYmVycyBsaWtlCi0gIDpjb25zdDpgMS4xYCBkbyBub3QgaGF2ZSBhbiBleGFjdCByZXByZXNlbnRhdGlvbiBpbiBiaW5hcnkgZmxvYXRpbmcgcG9pbnQuIEVuZAotICB1c2VycyB0eXBpY2FsbHkgd291bGQgbm90IGV4cGVjdCA6Y29uc3Q6YDEuMWAgdG8gZGlzcGxheSBhcwotICA6Y29uc3Q6YDEuMTAwMDAwMDAwMDAwMDAwMWAgYXMgaXQgZG9lcyB3aXRoIGJpbmFyeSBmbG9hdGluZyBwb2ludC4KKyAgOmNvbnN0OmAxLjFgIGFuZCA6Y29uc3Q6YDIuMmAgZG8gbm90IGhhdmUgYW4gZXhhY3QgcmVwcmVzZW50YXRpb25zIGluIGJpbmFyeQorICBmbG9hdGluZyBwb2ludC4gIEVuZCB1c2VycyB0eXBpY2FsbHkgd291bGQgbm90IGV4cGVjdCBgYDEuMSArIDIuMmBgIHRvIGRpc3BsYXkKKyAgYXMgOmNvbnN0OmAzLjMwMDAwMDAwMDAwMDAwMDNgIGFzIGl0IGRvZXMgd2l0aCBiaW5hcnkgZmxvYXRpbmcgcG9pbnQuCiAKICogVGhlIGV4YWN0bmVzcyBjYXJyaWVzIG92ZXIgaW50byBhcml0aG1ldGljLiAgSW4gZGVjaW1hbCBmbG9hdGluZyBwb2ludCwgYGAwLjEKICAgKyAwLjEgKyAwLjEgLSAwLjNgYCBpcyBleGFjdGx5IGVxdWFsIHRvIHplcm8uICBJbiBiaW5hcnkgZmxvYXRpbmcgcG9pbnQsIHRoZSByZXN1bHQKQEAgLTU3LDYgKzU3LDcgQEAKICAgYWx0ZXJhYmxlIHByZWNpc2lvbiAoZGVmYXVsdGluZyB0byAyOCBwbGFjZXMpIHdoaWNoIGNhbiBiZSBhcyBsYXJnZSBhcyBuZWVkZWQgZm9yCiAgIGEgZ2l2ZW4gcHJvYmxlbToKIAorICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCAqCiAgICAgID4+PiBnZXRjb250ZXh0KCkucHJlYyA9IDYKICAgICAgPj4+IERlY2ltYWwoMSkgLyBEZWNpbWFsKDcpCiAgICAgIERlY2ltYWwoJzAuMTQyODU3JykKQEAgLTEzMywxMCArMTM0LDkgQEAKIAogICAgPj4+IGdldGNvbnRleHQoKS5wcmVjID0gNyAgICAgICAjIFNldCBhIG5ldyBwcmVjaXNpb24KIAotRGVjaW1hbCBpbnN0YW5jZXMgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gaW50ZWdlcnMsIHN0cmluZ3MsIG9yIHR1cGxlcy4gIFRvCi1jcmVhdGUgYSBEZWNpbWFsIGZyb20gYSA6Y2xhc3M6YGZsb2F0YCwgZmlyc3QgY29udmVydCBpdCB0byBhIHN0cmluZy4gIFRoaXMKLXNlcnZlcyBhcyBhbiBleHBsaWNpdCByZW1pbmRlciBvZiB0aGUgZGV0YWlscyBvZiB0aGUgY29udmVyc2lvbiAoaW5jbHVkaW5nCi1yZXByZXNlbnRhdGlvbiBlcnJvcikuICBEZWNpbWFsIG51bWJlcnMgaW5jbHVkZSBzcGVjaWFsIHZhbHVlcyBzdWNoIGFzCitEZWNpbWFsIGluc3RhbmNlcyBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBpbnRlZ2Vycywgc3RyaW5ncywgZmxvYXRzLCBvciB0dXBsZXMuCitDb25zdHJ1Y3Rpb24gZnJvbSBhbiBpbnRlZ2VyIG9yIGEgZmxvYXQgcGVyZm9ybXMgYW4gZXhhY3QgY29udmVyc2lvbiBvZiB0aGUKK3ZhbHVlIG9mIHRoYXQgaW50ZWdlciBvciBmbG9hdC4gIERlY2ltYWwgbnVtYmVycyBpbmNsdWRlIHNwZWNpYWwgdmFsdWVzIHN1Y2ggYXMKIDpjb25zdDpgTmFOYCB3aGljaCBzdGFuZHMgZm9yICJOb3QgYSBudW1iZXIiLCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUKIDpjb25zdDpgSW5maW5pdHlgLCBhbmQgOmNvbnN0OmAtMGAuCiAKQEAgLTE0NSw2ICsxNDUsOCBAQAogICAgRGVjaW1hbCgnMTAnKQogICAgPj4+IERlY2ltYWwoJzMuMTQnKQogICAgRGVjaW1hbCgnMy4xNCcpCisgICA+Pj4gRGVjaW1hbCgzLjE0KQorICAgRGVjaW1hbCgnMy4xNDAwMDAwMDAwMDAwMDAxMjQzNDQ5Nzg3NTgwMTc1MzI1Mjc0NDY3NDY4MjYxNzE4NzUnKQogICAgPj4+IERlY2ltYWwoKDAsICgzLCAxLCA0KSwgLTIpKQogICAgRGVjaW1hbCgnMy4xNCcpCiAgICA+Pj4gRGVjaW1hbChzdHIoMi4wICoqIDAuNSkpCkBAIC0xOTMsNyArMTk1LDcgQEAKICAgID4+PiBzdHIoYSkKICAgICcxLjM0JwogICAgPj4+IGZsb2F0KGEpCi0gICAxLjM0MDAwMDAwMDAwMDAwMDEKKyAgIDEuMzQKICAgID4+PiByb3VuZChhLCAxKSAgICAgIyByb3VuZCgpIGZpcnN0IGNvbnZlcnRzIHRvIGJpbmFyeSBmbG9hdGluZyBwb2ludAogICAgMS4zCiAgICA+Pj4gaW50KGEpCkBAIC0zMTQsNyArMzE2LDcgQEAKIAogICAgQ29uc3RydWN0IGEgbmV3IDpjbGFzczpgRGVjaW1hbGAgb2JqZWN0IGJhc2VkIGZyb20gKnZhbHVlKi4KIAotICAgKnZhbHVlKiBjYW4gYmUgYW4gaW50ZWdlciwgc3RyaW5nLCB0dXBsZSwgb3IgYW5vdGhlciA6Y2xhc3M6YERlY2ltYWxgCisgICAqdmFsdWUqIGNhbiBiZSBhbiBpbnRlZ2VyLCBzdHJpbmcsIHR1cGxlLCA6Y2xhc3M6YGZsb2F0YCwgb3IgYW5vdGhlciA6Y2xhc3M6YERlY2ltYWxgCiAgICBvYmplY3QuIElmIG5vICp2YWx1ZSogaXMgZ2l2ZW4sIHJldHVybnMgYGBEZWNpbWFsKCcwJylgYC4gIElmICp2YWx1ZSogaXMgYQogICAgc3RyaW5nLCBpdCBzaG91bGQgY29uZm9ybSB0byB0aGUgZGVjaW1hbCBudW1lcmljIHN0cmluZyBzeW50YXggYWZ0ZXIgbGVhZGluZwogICAgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgcmVtb3ZlZDo6CkBAIC0zNDEsNiArMzQzLDEyIEBACiAgICBkaWdpdHMsIGFuZCBhbiBpbnRlZ2VyIGV4cG9uZW50LiBGb3IgZXhhbXBsZSwgYGBEZWNpbWFsKCgwLCAoMSwgNCwgMSwgNCksIC0zKSlgYAogICAgcmV0dXJucyBgYERlY2ltYWwoJzEuNDE0JylgYC4KIAorICAgSWYgKnZhbHVlKiBpcyBhIDpjbGFzczpgZmxvYXRgLCB0aGUgYmluYXJ5IGZsb2F0aW5nIHBvaW50IHZhbHVlIGlzIGxvc3NsZXNzbHkKKyAgIGNvbnZlcnRlZCB0byBpdHMgZXhhY3QgZGVjaW1hbCBlcXVpdmFsZW50LiAgVGhpcyBjb252ZXJzaW9uIGNhbiBvZnRlbiByZXF1aXJlCisgICA1MyBvciBtb3JlIGRpZ2l0cyBvZiBwcmVjaXNpb24uICBGb3IgZXhhbXBsZSwgYGBEZWNpbWFsKGZsb2F0KCcxLjEnKSlgYAorICAgY29udmVydHMgdG8KKyAgIGBgRGVjaW1hbCgnMS4xMDAwMDAwMDAwMDAwMDAwODg4MTc4NDE5NzAwMTI1MjMyMzM4OTA1MzM0NDcyNjU2MjUnKWBgLgorCiAgICBUaGUgKmNvbnRleHQqIHByZWNpc2lvbiBkb2VzIG5vdCBhZmZlY3QgaG93IG1hbnkgZGlnaXRzIGFyZSBzdG9yZWQuIFRoYXQgaXMKICAgIGRldGVybWluZWQgZXhjbHVzaXZlbHkgYnkgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gKnZhbHVlKi4gRm9yIGV4YW1wbGUsCiAgICBgYERlY2ltYWwoJzMuMDAwMDAnKWBgIHJlY29yZHMgYWxsIGZpdmUgemVyb3MgZXZlbiBpZiB0aGUgY29udGV4dCBwcmVjaXNpb24gaXMKQEAgLTM1Nyw2ICszNjUsOSBAQAogICAgICAgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSBwZXJtaXR0ZWQgd2hlbgogICAgICAgY3JlYXRpbmcgYSBEZWNpbWFsIGluc3RhbmNlIGZyb20gYSBzdHJpbmcuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBUaGUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yIGlzIG5vdyBwZXJtaXR0ZWQgdG8gYmUgYSA6Y2xhc3M6YGZsb2F0YCBpbnN0YW5jZS4KKwogICAgRGVjaW1hbCBmbG9hdGluZyBwb2ludCBvYmplY3RzIHNoYXJlIG1hbnkgcHJvcGVydGllcyB3aXRoIHRoZSBvdGhlciBidWlsdC1pbgogICAgbnVtZXJpYyB0eXBlcyBzdWNoIGFzIDpjbGFzczpgZmxvYXRgIGFuZCA6Y2xhc3M6YGludGAuICBBbGwgb2YgdGhlIHVzdWFsIG1hdGgKICAgIG9wZXJhdGlvbnMgYW5kIHNwZWNpYWwgbWV0aG9kcyBhcHBseS4gIExpa2V3aXNlLCBkZWNpbWFsIG9iamVjdHMgY2FuIGJlCkBAIC0zNjQsNiArMzc1LDI0IEBACiAgICBjb21wYXJlZCwgc29ydGVkLCBhbmQgY29lcmNlZCB0byBhbm90aGVyIHR5cGUgKHN1Y2ggYXMgOmNsYXNzOmBmbG9hdGAgb3IKICAgIDpjbGFzczpgbG9uZ2ApLgogCisgICBEZWNpbWFsIG9iamVjdHMgY2Fubm90IGdlbmVyYWxseSBiZSBjb21iaW5lZCB3aXRoIGZsb2F0cyBpbgorICAgYXJpdGhtZXRpYyBvcGVyYXRpb25zOiBhbiBhdHRlbXB0IHRvIGFkZCBhIDpjbGFzczpgRGVjaW1hbGAgdG8gYQorICAgOmNsYXNzOmBmbG9hdGAsIGZvciBleGFtcGxlLCB3aWxsIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYC4KKyAgIFRoZXJlJ3Mgb25lIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IGl0J3MgcG9zc2libGUgdG8gdXNlIFB5dGhvbidzCisgICBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBjb21wYXJlIGEgOmNsYXNzOmBmbG9hdGAgaW5zdGFuY2UgYGB4YGAKKyAgIHdpdGggYSA6Y2xhc3M6YERlY2ltYWxgIGluc3RhbmNlIGBgeWBgLiAgV2l0aG91dCB0aGlzIGV4Y2VwdGlvbiwKKyAgIGNvbXBhcmlzb25zIGJldHdlZW4gOmNsYXNzOmBEZWNpbWFsYCBhbmQgOmNsYXNzOmBmbG9hdGAgaW5zdGFuY2VzCisgICB3b3VsZCBmb2xsb3cgdGhlIGdlbmVyYWwgcnVsZXMgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mIGRpZmZlcmVudAorICAgdHlwZXMgZGVzY3JpYmVkIGluIHRoZSA6cmVmOmBleHByZXNzaW9uc2Agc2VjdGlvbiBvZiB0aGUgcmVmZXJlbmNlCisgICBtYW51YWwsIGxlYWRpbmcgdG8gY29uZnVzaW5nIHJlc3VsdHMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBBIGNvbXBhcmlzb24gYmV0d2VlbiBhIDpjbGFzczpgZmxvYXRgIGluc3RhbmNlIGBgeGBgIGFuZCBhCisgICAgICA6Y2xhc3M6YERlY2ltYWxgIGluc3RhbmNlIGBgeWBgIG5vdyByZXR1cm5zIGEgcmVzdWx0IGJhc2VkIG9uCisgICAgICB0aGUgdmFsdWVzIG9mIGBgeGBgIGFuZCBgYHlgYC4gIEluIGVhcmxpZXIgdmVyc2lvbnMgYGB4IDwgeWBgCisgICAgICByZXR1cm5lZCB0aGUgc2FtZSAoYXJiaXRyYXJ5KSByZXN1bHQgZm9yIGFueSA6Y2xhc3M6YERlY2ltYWxgCisgICAgICBpbnN0YW5jZSBgYHhgYCBhbmQgYW55IDpjbGFzczpgZmxvYXRgIGluc3RhbmNlIGBgeWBgLgorCiAgICBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgbnVtZXJpYyBwcm9wZXJ0aWVzLCBkZWNpbWFsIGZsb2F0aW5nIHBvaW50CiAgICBvYmplY3RzIGFsc28gaGF2ZSBhIG51bWJlciBvZiBzcGVjaWFsaXplZCBtZXRob2RzOgogCkBAIC00OTAsNiArNTE5LDMyIEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCisgICAuLiBtZXRob2Q6OiBmcm9tX2Zsb2F0KGYpCisKKyAgICAgIENsYXNzbWV0aG9kIHRoYXQgY29udmVydHMgYSBmbG9hdCB0byBhIGRlY2ltYWwgbnVtYmVyLCBleGFjdGx5LgorCisgICAgICBOb3RlIGBEZWNpbWFsLmZyb21fZmxvYXQoMC4xKWAgaXMgbm90IHRoZSBzYW1lIGFzIGBEZWNpbWFsKCcwLjEnKWAuCisgICAgICBTaW5jZSAwLjEgaXMgbm90IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBiaW5hcnkgZmxvYXRpbmcgcG9pbnQsIHRoZQorICAgICAgdmFsdWUgaXMgc3RvcmVkIGFzIHRoZSBuZWFyZXN0IHJlcHJlc2VudGFibGUgdmFsdWUgd2hpY2ggaXMKKyAgICAgIGAweDEuOTk5OTk5OTk5OTk5YXAtNGAuICBUaGF0IGVxdWl2YWxlbnQgdmFsdWUgaW4gZGVjaW1hbCBpcworICAgICAgYDAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1NzgyNzAyMTE4MTU4MzQwNDU0MTAxNTYyNWAuCisKKyAgICAgIC4uIG5vdGU6OiBGcm9tIFB5dGhvbiAyLjcgb253YXJkcywgYSA6Y2xhc3M6YERlY2ltYWxgIGluc3RhbmNlCisgICAgICAgICBjYW4gYWxzbyBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBmcm9tIGEgOmNsYXNzOmBmbG9hdGAuCisKKyAgICAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICAgICAgPj4+IERlY2ltYWwuZnJvbV9mbG9hdCgwLjEpCisgICAgICAgICAgRGVjaW1hbCgnMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1JykKKyAgICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCduYW4nKSkKKyAgICAgICAgICBEZWNpbWFsKCdOYU4nKQorICAgICAgICAgID4+PiBEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ2luZicpKQorICAgICAgICAgIERlY2ltYWwoJ0luZmluaXR5JykKKyAgICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCctaW5mJykpCisgICAgICAgICAgRGVjaW1hbCgnLUluZmluaXR5JykKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKICAgIC4uIG1ldGhvZDo6IGZtYShvdGhlciwgdGhpcmRbLCBjb250ZXh0XSkKIAogICAgICAgRnVzZWQgbXVsdGlwbHktYWRkLiAgUmV0dXJuIHNlbGYqb3RoZXIrdGhpcmQgd2l0aCBubyByb3VuZGluZyBvZiB0aGUKQEAgLTk3Niw4ICsxMDMxLDExIEBACiAgICBhIGxhcmdlIG51bWJlciBvZiBtZXRob2RzIGZvciBkb2luZyBhcml0aG1ldGljIGRpcmVjdGx5IGluIGEgZ2l2ZW4gY29udGV4dC4KICAgIEluIGFkZGl0aW9uLCBmb3IgZWFjaCBvZiB0aGUgOmNsYXNzOmBEZWNpbWFsYCBtZXRob2RzIGRlc2NyaWJlZCBhYm92ZSAod2l0aAogICAgdGhlIGV4Y2VwdGlvbiBvZiB0aGUgOm1ldGg6YGFkanVzdGVkYCBhbmQgOm1ldGg6YGFzX3R1cGxlYCBtZXRob2RzKSB0aGVyZSBpcwotICAgYSBjb3JyZXNwb25kaW5nIDpjbGFzczpgQ29udGV4dGAgbWV0aG9kLiAgRm9yIGV4YW1wbGUsIGBgQy5leHAoeClgYCBpcwotICAgZXF1aXZhbGVudCB0byBgYHguZXhwKGNvbnRleHQ9QylgYC4KKyAgIGEgY29ycmVzcG9uZGluZyA6Y2xhc3M6YENvbnRleHRgIG1ldGhvZC4gIEZvciBleGFtcGxlLCBmb3IgYSA6Y2xhc3M6YENvbnRleHRgCisgICBpbnN0YW5jZSBgYENgYCBhbmQgOmNsYXNzOmBEZWNpbWFsYCBpbnN0YW5jZSBgYHhgYCwgYGBDLmV4cCh4KWBgIGlzCisgICBlcXVpdmFsZW50IHRvIGBgeC5leHAoY29udGV4dD1DKWBgLiAgRWFjaCA6Y2xhc3M6YENvbnRleHRgIG1ldGhvZCBhY2NlcHRzIGEKKyAgIFB5dGhvbiBpbnRlZ2VyIChhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YGludGAgb3IgOmNsYXNzOmBsb25nYCkgYW55d2hlcmUgdGhhdCBhCisgICBEZWNpbWFsIGluc3RhbmNlIGlzIGFjY2VwdGVkLgogCiAKICAgIC4uIG1ldGhvZDo6IGNsZWFyX2ZsYWdzKCkKQEAgLTEwMTYsNiArMTA3NCwyNiBAQAogICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgc3RyaW5nLCBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgaXMKICAgICAgIHBlcm1pdHRlZC4KIAorICAgLi4gbWV0aG9kOjogY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdChmKQorCisgICAgICBDcmVhdGVzIGEgbmV3IERlY2ltYWwgaW5zdGFuY2UgZnJvbSBhIGZsb2F0ICpmKiBidXQgcm91bmRpbmcgdXNpbmcgKnNlbGYqCisgICAgICBhcyB0aGUgY29udGV4dC4gIFVubGlrZSB0aGUgOm1ldGg6YERlY2ltYWwuZnJvbV9mbG9hdGAgY2xhc3MgbWV0aG9kLAorICAgICAgdGhlIGNvbnRleHQgcHJlY2lzaW9uLCByb3VuZGluZyBtZXRob2QsIGZsYWdzLCBhbmQgdHJhcHMgYXJlIGFwcGxpZWQgdG8KKyAgICAgIHRoZSBjb252ZXJzaW9uLgorCisgICAgICAuLiBkb2N0ZXN0OjoKKworICAgICAgICAgPj4+IGNvbnRleHQgPSBDb250ZXh0KHByZWM9NSwgcm91bmRpbmc9Uk9VTkRfRE9XTikKKyAgICAgICAgID4+PiBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQobWF0aC5waSkKKyAgICAgICAgIERlY2ltYWwoJzMuMTQxNScpCisgICAgICAgICA+Pj4gY29udGV4dCA9IENvbnRleHQocHJlYz01LCB0cmFwcz1bSW5leGFjdF0pCisgICAgICAgICA+Pj4gY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KG1hdGgucGkpCisgICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgICAgICAgLi4uCisgICAgICAgICBJbmV4YWN0OiBOb25lCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCiAgICAuLiBtZXRob2Q6OiBFdGlueSgpCiAKICAgICAgIFJldHVybnMgYSB2YWx1ZSBlcXVhbCB0byBgYEVtaW4gLSBwcmVjICsgMWBgIHdoaWNoIGlzIHRoZSBtaW5pbXVtIGV4cG9uZW50CkBAIC0xODcyLDQ5ICsxOTUwLDI5IEBACiBvcmlnaW5hbCdzIHR3by1wbGFjZSBzaWduaWZpY2FuY2UuCiAKIElmIGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IGNhcmUgYWJvdXQgdHJhY2tpbmcgc2lnbmlmaWNhbmNlLCBpdCBpcyBlYXN5IHRvCi1yZW1vdmUgdGhlIGV4cG9uZW50IGFuZCB0cmFpbGluZyB6ZXJvZXMsIGxvc2luZyBzaWduaWZpY2FuY2UsIGJ1dCBrZWVwaW5nIHRoZQotdmFsdWUgdW5jaGFuZ2VkOgorcmVtb3ZlIHRoZSBleHBvbmVudCBhbmQgdHJhaWxpbmcgemVyb3MsIGxvc2luZyBzaWduaWZpY2FuY2UsIGJ1dCBrZWVwaW5nIHRoZQordmFsdWUgdW5jaGFuZ2VkOjoKIAotICAgID4+PiBkZWYgcmVtb3ZlX2V4cG9uZW50KGQpOgotICAgIC4uLiAgICAgcmV0dXJuIGQucXVhbnRpemUoRGVjaW1hbCgxKSkgaWYgZCA9PSBkLnRvX2ludGVncmFsKCkgZWxzZSBkLm5vcm1hbGl6ZSgpCisgICAgZGVmIHJlbW92ZV9leHBvbmVudChkKToKKyAgICAgICAgJycnUmVtb3ZlIGV4cG9uZW50IGFuZCB0cmFpbGluZyB6ZXJvcy4KIAotICAgID4+PiByZW1vdmVfZXhwb25lbnQoRGVjaW1hbCgnNUUrMycpKQotICAgIERlY2ltYWwoJzUwMDAnKQorICAgICAgICA+Pj4gcmVtb3ZlX2V4cG9uZW50KERlY2ltYWwoJzVFKzMnKSkKKyAgICAgICAgRGVjaW1hbCgnNTAwMCcpCisKKyAgICAgICAgJycnCisgICAgICAgIHJldHVybiBkLnF1YW50aXplKERlY2ltYWwoMSkpIGlmIGQgPT0gZC50b19pbnRlZ3JhbCgpIGVsc2UgZC5ub3JtYWxpemUoKQogCiBRLiBJcyB0aGVyZSBhIHdheSB0byBjb252ZXJ0IGEgcmVndWxhciBmbG9hdCB0byBhIDpjbGFzczpgRGVjaW1hbGA/CiAKLUEuIFllcywgYWxsIGJpbmFyeSBmbG9hdGluZyBwb2ludCBudW1iZXJzIGNhbiBiZSBleGFjdGx5IGV4cHJlc3NlZCBhcyBhCi1EZWNpbWFsLiAgQW4gZXhhY3QgY29udmVyc2lvbiBtYXkgdGFrZSBtb3JlIHByZWNpc2lvbiB0aGFuIGludHVpdGlvbiB3b3VsZAotc3VnZ2VzdCwgc28gd2UgdHJhcCA6Y29uc3Q6YEluZXhhY3RgIHRvIHNpZ25hbCBhIG5lZWQgZm9yIG1vcmUgcHJlY2lzaW9uOgotCi0uLiB0ZXN0Y29kZTo6Ci0KLSAgICBkZWYgZmxvYXRfdG9fZGVjaW1hbChmKToKLSAgICAgICAgIkNvbnZlcnQgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgdG8gYSBEZWNpbWFsIHdpdGggbm8gbG9zcyBvZiBpbmZvcm1hdGlvbiIKLSAgICAgICAgbiwgZCA9IGYuYXNfaW50ZWdlcl9yYXRpbygpCi0gICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IgPSBEZWNpbWFsKG4pLCBEZWNpbWFsKGQpCi0gICAgICAgIGN0eCA9IENvbnRleHQocHJlYz02MCkKLSAgICAgICAgcmVzdWx0ID0gY3R4LmRpdmlkZShudW1lcmF0b3IsIGRlbm9taW5hdG9yKQotICAgICAgICB3aGlsZSBjdHguZmxhZ3NbSW5leGFjdF06Ci0gICAgICAgICAgICBjdHguZmxhZ3NbSW5leGFjdF0gPSBGYWxzZQotICAgICAgICAgICAgY3R4LnByZWMgKj0gMgotICAgICAgICAgICAgcmVzdWx0ID0gY3R4LmRpdmlkZShudW1lcmF0b3IsIGRlbm9taW5hdG9yKQotICAgICAgICByZXR1cm4gcmVzdWx0CitBLiBZZXMsIGFueSBiaW5hcnkgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGNhbiBiZSBleGFjdGx5IGV4cHJlc3NlZCBhcyBhCitEZWNpbWFsIHRob3VnaCBhbiBleGFjdCBjb252ZXJzaW9uIG1heSB0YWtlIG1vcmUgcHJlY2lzaW9uIHRoYW4gaW50dWl0aW9uIHdvdWxkCitzdWdnZXN0OgogCiAuLiBkb2N0ZXN0OjoKIAotICAgID4+PiBmbG9hdF90b19kZWNpbWFsKG1hdGgucGkpCisgICAgPj4+IERlY2ltYWwobWF0aC5waSkKICAgICBEZWNpbWFsKCczLjE0MTU5MjY1MzU4OTc5MzExNTk5Nzk2MzQ2ODU0NDE4NTE2MTU5MDU3NjE3MTg3NScpCiAKLVEuIFdoeSBpc24ndCB0aGUgOmZ1bmM6YGZsb2F0X3RvX2RlY2ltYWxgIHJvdXRpbmUgaW5jbHVkZWQgaW4gdGhlIG1vZHVsZT8KLQotQS4gVGhlcmUgaXMgc29tZSBxdWVzdGlvbiBhYm91dCB3aGV0aGVyIGl0IGlzIGFkdmlzYWJsZSB0byBtaXggYmluYXJ5IGFuZAotZGVjaW1hbCBmbG9hdGluZyBwb2ludC4gIEFsc28sIGl0cyB1c2UgcmVxdWlyZXMgc29tZSBjYXJlIHRvIGF2b2lkIHRoZQotcmVwcmVzZW50YXRpb24gaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCBiaW5hcnkgZmxvYXRpbmcgcG9pbnQ6Ci0KLSAgID4+PiBmbG9hdF90b19kZWNpbWFsKDEuMSkKLSAgIERlY2ltYWwoJzEuMTAwMDAwMDAwMDAwMDAwMDg4ODE3ODQxOTcwMDEyNTIzMjMzODkwNTMzNDQ3MjY1NjI1JykKLQogUS4gV2l0aGluIGEgY29tcGxleCBjYWxjdWxhdGlvbiwgaG93IGNhbiBJIG1ha2Ugc3VyZSB0aGF0IEkgaGF2ZW4ndCBnb3R0ZW4gYQogc3B1cmlvdXMgcmVzdWx0IGJlY2F1c2Ugb2YgaW5zdWZmaWNpZW50IHByZWNpc2lvbiBvciByb3VuZGluZyBhbm9tYWxpZXMuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RpZmZsaWIucnN0IGIvRG9jL2xpYnJhcnkvZGlmZmxpYi5yc3QKaW5kZXggOWNkNzZlMy4uMjI1YjQ4NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGlmZmxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGlmZmxpYi5yc3QKQEAgLTM3LDExICszNywxNiBAQAogICAgY29tcGxpY2F0ZWQgd2F5IG9uIGhvdyBtYW55IGVsZW1lbnRzIHRoZSBzZXF1ZW5jZXMgaGF2ZSBpbiBjb21tb247IGJlc3QgY2FzZQogICAgdGltZSBpcyBsaW5lYXIuCiAKLSAgICoqSGV1cmlzdGljOioqIFRvIHNwZWVkLXVwIG1hdGNoaW5nLCBpdGVtcyB0aGF0IGFwcGVhciBtb3JlIHRoYW4gMSUgb2YgdGhlCi0gICB0aW1lIGluIHNlcXVlbmNlcyBvZiBhdCBsZWFzdCAyMDAgaXRlbXMgYXJlIHRyZWF0ZWQgYXMganVuay4gIFRoaXMgaGFzIHRoZQotICAgdW5mb3J0dW5hdGUgc2lkZS1lZmZlY3Qgb2YgZ2l2aW5nIGJhZCByZXN1bHRzIGZvciBzZXF1ZW5jZXMgY29uc3RydWN0ZWQgZnJvbQotICAgYSBzbWFsbCBzZXQgb2YgaXRlbXMuICBBbiBvcHRpb24gdG8gdHVybiBvZmYgdGhlIGhldXJpc3RpYyB3aWxsIGJlIGFkZGVkIHRvIGEKLSAgIGZ1dHVyZSB2ZXJzaW9uLgorICAgKipBdXRvbWF0aWMganVuayBoZXVyaXN0aWM6KiogOmNsYXNzOmBTZXF1ZW5jZU1hdGNoZXJgIHN1cHBvcnRzIGEgaGV1cmlzdGljIHRoYXQKKyAgIGF1dG9tYXRpY2FsbHkgdHJlYXRzIGNlcnRhaW4gc2VxdWVuY2UgaXRlbXMgYXMganVuay4gVGhlIGhldXJpc3RpYyBjb3VudHMgaG93IG1hbnkKKyAgIHRpbWVzIGVhY2ggaW5kaXZpZHVhbCBpdGVtIGFwcGVhcnMgaW4gdGhlIHNlcXVlbmNlLiBJZiBhbiBpdGVtJ3MgZHVwbGljYXRlcyAoYWZ0ZXIKKyAgIHRoZSBmaXJzdCBvbmUpIGFjY291bnQgZm9yIG1vcmUgdGhhbiAxJSBvZiB0aGUgc2VxdWVuY2UgYW5kIHRoZSBzZXF1ZW5jZSBpcyBhdCBsZWFzdAorICAgMjAwIGl0ZW1zIGxvbmcsIHRoaXMgaXRlbSBpcyBtYXJrZWQgYXMgInBvcHVsYXIiIGFuZCBpcyB0cmVhdGVkIGFzIGp1bmsgZm9yCisgICB0aGUgcHVycG9zZSBvZiBzZXF1ZW5jZSBtYXRjaGluZy4gVGhpcyBoZXVyaXN0aWMgY2FuIGJlIHR1cm5lZCBvZmYgYnkgc2V0dGluZworICAgdGhlIGBgYXV0b2p1bmtgYCBhcmd1bWVudCB0byBgYEZhbHNlYGAgd2hlbiBjcmVhdGluZyB0aGUgOmNsYXNzOmBTZXF1ZW5jZU1hdGNoZXJgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcuMQorICAgICAgVGhlICphdXRvanVuayogcGFyYW1ldGVyLgogCiAuLiBjbGFzczo6IERpZmZlcgogCkBAIC0xNTEsOCArMTU2LDggQEAKIAogICAgVGhlIGNvbnRleHQgZGlmZiBmb3JtYXQgbm9ybWFsbHkgaGFzIGEgaGVhZGVyIGZvciBmaWxlbmFtZXMgYW5kIG1vZGlmaWNhdGlvbgogICAgdGltZXMuICBBbnkgb3IgYWxsIG9mIHRoZXNlIG1heSBiZSBzcGVjaWZpZWQgdXNpbmcgc3RyaW5ncyBmb3IgKmZyb21maWxlKiwKLSAgICp0b2ZpbGUqLCAqZnJvbWZpbGVkYXRlKiwgYW5kICp0b2ZpbGVkYXRlKi4gVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkKLSAgIGV4cHJlc3NlZCBpbiB0aGUgZm9ybWF0IHJldHVybmVkIGJ5IDpmdW5jOmB0aW1lLmN0aW1lYC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZQorICAgKnRvZmlsZSosICpmcm9tZmlsZWRhdGUqLCBhbmQgKnRvZmlsZWRhdGUqLiAgVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkKKyAgIGV4cHJlc3NlZCBpbiB0aGUgSVNPIDg2MDEgZm9ybWF0LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUKICAgIHN0cmluZ3MgZGVmYXVsdCB0byBibGFua3MuCiAKICAgICAgID4+PiBzMSA9IFsnYmFjb25cbicsICdlZ2dzXG4nLCAnaGFtXG4nLCAnZ3VpZG9cbiddCkBAIC0yODYsOCArMjkxLDggQEAKIAogICAgVGhlIGNvbnRleHQgZGlmZiBmb3JtYXQgbm9ybWFsbHkgaGFzIGEgaGVhZGVyIGZvciBmaWxlbmFtZXMgYW5kIG1vZGlmaWNhdGlvbgogICAgdGltZXMuICBBbnkgb3IgYWxsIG9mIHRoZXNlIG1heSBiZSBzcGVjaWZpZWQgdXNpbmcgc3RyaW5ncyBmb3IgKmZyb21maWxlKiwKLSAgICp0b2ZpbGUqLCAqZnJvbWZpbGVkYXRlKiwgYW5kICp0b2ZpbGVkYXRlKi4gVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkKLSAgIGV4cHJlc3NlZCBpbiB0aGUgZm9ybWF0IHJldHVybmVkIGJ5IDpmdW5jOmB0aW1lLmN0aW1lYC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZQorICAgKnRvZmlsZSosICpmcm9tZmlsZWRhdGUqLCBhbmQgKnRvZmlsZWRhdGUqLiAgVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkKKyAgIGV4cHJlc3NlZCBpbiB0aGUgSVNPIDg2MDEgZm9ybWF0LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUKICAgIHN0cmluZ3MgZGVmYXVsdCB0byBibGFua3MuCiAKICAgICAgID4+PiBzMSA9IFsnYmFjb25cbicsICdlZ2dzXG4nLCAnaGFtXG4nLCAnZ3VpZG9cbiddCkBAIC0zMzksNyArMzQ0LDcgQEAKIFRoZSA6Y2xhc3M6YFNlcXVlbmNlTWF0Y2hlcmAgY2xhc3MgaGFzIHRoaXMgY29uc3RydWN0b3I6CiAKIAotLi4gY2xhc3M6OiBTZXF1ZW5jZU1hdGNoZXIoW2lzanVua1ssIGFbLCBiXV1dKQorLi4gY2xhc3M6OiBTZXF1ZW5jZU1hdGNoZXIoW2lzanVua1ssIGFbLCBiWywgYXV0b2p1bms9VHJ1ZV1dXV0pCiAKICAgIE9wdGlvbmFsIGFyZ3VtZW50ICppc2p1bmsqIG11c3QgYmUgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSBvciBhIG9uZS1hcmd1bWVudAogICAgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNlcXVlbmNlIGVsZW1lbnQgYW5kIHJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUKQEAgLTM1NSw4ICszNjAsMTMgQEAKICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudHMgKmEqIGFuZCAqYiogYXJlIHNlcXVlbmNlcyB0byBiZSBjb21wYXJlZDsgYm90aCBkZWZhdWx0IHRvCiAgICBlbXB0eSBzdHJpbmdzLiAgVGhlIGVsZW1lbnRzIG9mIGJvdGggc2VxdWVuY2VzIG11c3QgYmUgOnRlcm06YGhhc2hhYmxlYC4KIAotICAgOmNsYXNzOmBTZXF1ZW5jZU1hdGNoZXJgIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmF1dG9qdW5rKiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHRoZSBhdXRvbWF0aWMganVuaworICAgaGV1cmlzdGljLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcuMQorICAgICAgVGhlICphdXRvanVuayogcGFyYW1ldGVyLgorCisgICA6Y2xhc3M6YFNlcXVlbmNlTWF0Y2hlcmAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogICAgLi4gbWV0aG9kOjogc2V0X3NlcXMoYSwgYikKIApAQCAtNTE3LDE2ICs1MjcsMTEgQEAKIAogICAgICAgUmV0dXJuIGFuIHVwcGVyIGJvdW5kIG9uIDptZXRoOmByYXRpb2AgcmVsYXRpdmVseSBxdWlja2x5LgogCi0gICAgICBUaGlzIGlzbid0IGRlZmluZWQgYmV5b25kIHRoYXQgaXQgaXMgYW4gdXBwZXIgYm91bmQgb24gOm1ldGg6YHJhdGlvYCwgYW5kCi0gICAgICBpcyBmYXN0ZXIgdG8gY29tcHV0ZS4KLQogCiAgICAuLiBtZXRob2Q6OiByZWFsX3F1aWNrX3JhdGlvKCkKIAogICAgICAgUmV0dXJuIGFuIHVwcGVyIGJvdW5kIG9uIDptZXRoOmByYXRpb2AgdmVyeSBxdWlja2x5LgogCi0gICAgICBUaGlzIGlzbid0IGRlZmluZWQgYmV5b25kIHRoYXQgaXQgaXMgYW4gdXBwZXIgYm91bmQgb24gOm1ldGg6YHJhdGlvYCwgYW5kCi0gICAgICBpcyBmYXN0ZXIgdG8gY29tcHV0ZSB0aGFuIGVpdGhlciA6bWV0aDpgcmF0aW9gIG9yIDptZXRoOmBxdWlja19yYXRpb2AuCiAKIFRoZSB0aHJlZSBtZXRob2RzIHRoYXQgcmV0dXJuIHRoZSByYXRpbyBvZiBtYXRjaGluZyB0byB0b3RhbCBjaGFyYWN0ZXJzIGNhbiBnaXZlCiBkaWZmZXJlbnQgcmVzdWx0cyBkdWUgdG8gZGlmZmVyaW5nIGxldmVscyBvZiBhcHByb3hpbWF0aW9uLCBhbHRob3VnaApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlzLnJzdCBiL0RvYy9saWJyYXJ5L2Rpcy5yc3QKaW5kZXggZTNmMzBjYi4uOWFkZGZlNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGlzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kaXMucnN0CkBAIC0xMSw2ICsxMSwxMSBAQAogaW5wdXQgaXMgZGVmaW5lZCBpbiB0aGUgZmlsZSA6ZmlsZTpgSW5jbHVkZS9vcGNvZGUuaGAgYW5kIHVzZWQgYnkgdGhlIGNvbXBpbGVyCiBhbmQgdGhlIGludGVycHJldGVyLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBkaXMgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL2Rpcy5weT92aWV3PW1hcmt1cD5gXworCiAuLiBpbXBsLWRldGFpbDo6CiAKICAgIEJ5dGVjb2RlIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUgQ1B5dGhvbiBpbnRlcnByZXRlciEgIE5vCkBAIC03MCw4ICs3NSwyMSBAQAogCiAuLiBmdW5jdGlvbjo6IGRpc2NvKGNvZGVbLCBsYXN0aV0pCiAKLSAgIEEgc3lub255bSBmb3IgZGlzYXNzZW1ibGUuICBJdCBpcyBtb3JlIGNvbnZlbmllbnQgdG8gdHlwZSwgYW5kIGtlcHQgZm9yCi0gICBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciBQeXRob24gcmVsZWFzZXMuCisgICBBIHN5bm9ueW0gZm9yIDpmdW5jOmBkaXNhc3NlbWJsZWAuICBJdCBpcyBtb3JlIGNvbnZlbmllbnQgdG8gdHlwZSwgYW5kIGtlcHQKKyAgIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciBQeXRob24gcmVsZWFzZXMuCisKKworLi4gZnVuY3Rpb246OiBmaW5kbGluZXN0YXJ0cyhjb2RlKQorCisgICBUaGlzIGdlbmVyYXRvciBmdW5jdGlvbiB1c2VzIHRoZSBgYGNvX2ZpcnN0bGluZW5vYGAgYW5kIGBgY29fbG5vdGFiYGAKKyAgIGF0dHJpYnV0ZXMgb2YgdGhlIGNvZGUgb2JqZWN0ICpjb2RlKiB0byBmaW5kIHRoZSBvZmZzZXRzIHdoaWNoIGFyZSBzdGFydHMgb2YKKyAgIGxpbmVzIGluIHRoZSBzb3VyY2UgY29kZS4gIFRoZXkgYXJlIGdlbmVyYXRlZCBhcyBgYChvZmZzZXQsIGxpbmVubylgYCBwYWlycy4KKworCisuLiBmdW5jdGlvbjo6IGZpbmRsYWJlbHMoY29kZSkKKworICAgRGV0ZWN0IGFsbCBvZmZzZXRzIGluIHRoZSBjb2RlIG9iamVjdCAqY29kZSogd2hpY2ggYXJlIGp1bXAgdGFyZ2V0cywgYW5kCisgICByZXR1cm4gYSBsaXN0IG9mIHRoZXNlIG9mZnNldHMuCiAKIAogLi4gZGF0YTo6IG9wbmFtZQpAQCAtODEsNyArOTksNyBAQAogCiAuLiBkYXRhOjogb3BtYXAKIAotICAgRGljdGlvbmFyeSBtYXBwaW5nIGJ5dGVjb2RlcyB0byBvcGVyYXRpb24gbmFtZXMuCisgICBEaWN0aW9uYXJ5IG1hcHBpbmcgb3BlcmF0aW9uIG5hbWVzIHRvIGJ5dGVjb2Rlcy4KIAogCiAuLiBkYXRhOjogY21wX29wCkBAIC00NjksOSArNDg3LDExIEBACiAgICBhZGRyZXNzIHRvIGp1bXAgdG8gKHdoaWNoIHNob3VsZCBiZSBhIGBgRk9SX0lURVJgYCBpbnN0cnVjdGlvbikuCiAKIAotLi4gb3Bjb2RlOjogTElTVF9BUFBFTkQgKCkKKy4uIG9wY29kZTo6IExJU1RfQVBQRU5EIChpKQogCi0gICBDYWxscyBgYGxpc3QuYXBwZW5kKFRPUzEsIFRPUylgYC4gIFVzZWQgdG8gaW1wbGVtZW50IGxpc3QgY29tcHJlaGVuc2lvbnMuCisgICBDYWxscyBgYGxpc3QuYXBwZW5kKFRPU1staV0sIFRPUylgYC4gIFVzZWQgdG8gaW1wbGVtZW50IGxpc3QgY29tcHJlaGVuc2lvbnMuCisgICBXaGlsZSB0aGUgYXBwZW5kZWQgdmFsdWUgaXMgcG9wcGVkIG9mZiwgdGhlIGxpc3Qgb2JqZWN0IHJlbWFpbnMgb24gdGhlCisgICBzdGFjayBzbyB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgZnVydGhlciBpdGVyYXRpb25zIG9mIHRoZSBsb29wLgogCiAKIC4uIG9wY29kZTo6IExPQURfTE9DQUxTICgpCkBAIC01MjMsNiArNTQzLDE4IEBACiAgICB0aGUgbmFtZXMgb2YgdGhlIGJhc2UgY2xhc3NlcywgYW5kIFRPUzIgdGhlIGNsYXNzIG5hbWUuCiAKIAorLi4gb3Bjb2RlOjogU0VUVVBfV0lUSCAoZGVsdGEpCisKKyAgIFRoaXMgb3Bjb2RlIHBlcmZvcm1zIHNldmVyYWwgb3BlcmF0aW9ucyBiZWZvcmUgYSB3aXRoIGJsb2NrIHN0YXJ0cy4gIEZpcnN0LAorICAgaXQgbG9hZHMgOm1ldGg6YH5vYmplY3QuX19leGl0X19gIGZyb20gdGhlIGNvbnRleHQgbWFuYWdlciBhbmQgcHVzaGVzIGl0IG9udG8KKyAgIHRoZSBzdGFjayBmb3IgbGF0ZXIgdXNlIGJ5IDpvcGNvZGU6YFdJVEhfQ0xFQU5VUGAuICBUaGVuLAorICAgOm1ldGg6YH5vYmplY3QuX19lbnRlcl9fYCBpcyBjYWxsZWQsIGFuZCBhIGZpbmFsbHkgYmxvY2sgcG9pbnRpbmcgdG8gKmRlbHRhKgorICAgaXMgcHVzaGVkLiAgRmluYWxseSwgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBlbnRlciBtZXRob2QgaXMgcHVzaGVkIG9udG8KKyAgIHRoZSBzdGFjay4gIFRoZSBuZXh0IG9wY29kZSB3aWxsIGVpdGhlciBpZ25vcmUgaXQgKDpvcGNvZGU6YFBPUF9UT1BgKSwgb3IKKyAgIHN0b3JlIGl0IGluIChhKSB2YXJpYWJsZShzKSAoOm9wY29kZTpgU1RPUkVfRkFTVGAsIDpvcGNvZGU6YFNUT1JFX05BTUVgLCBvcgorICAgOm9wY29kZTpgVU5QQUNLX1NFUVVFTkNFYCkuCisKKwogLi4gb3Bjb2RlOjogV0lUSF9DTEVBTlVQICgpCiAKICAgIENsZWFucyB1cCB0aGUgc3RhY2sgd2hlbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgYmxvY2sgZXhpdHMuICBPbiB0b3Agb2YKQEAgLTY1NSwxNiArNjg3LDI2IEBACiAgICBJbmNyZW1lbnRzIGJ5dGVjb2RlIGNvdW50ZXIgYnkgKmRlbHRhKi4KIAogCi0uLiBvcGNvZGU6OiBKVU1QX0lGX1RSVUUgKGRlbHRhKQorLi4gb3Bjb2RlOjogUE9QX0pVTVBfSUZfVFJVRSAodGFyZ2V0KQogCi0gICBJZiBUT1MgaXMgdHJ1ZSwgaW5jcmVtZW50IHRoZSBieXRlY29kZSBjb3VudGVyIGJ5ICpkZWx0YSouICBUT1MgaXMgbGVmdCBvbiB0aGUKLSAgIHN0YWNrLgorICAgSWYgVE9TIGlzIHRydWUsIHNldHMgdGhlIGJ5dGVjb2RlIGNvdW50ZXIgdG8gKnRhcmdldCouICBUT1MgaXMgcG9wcGVkLgogCiAKLS4uIG9wY29kZTo6IEpVTVBfSUZfRkFMU0UgKGRlbHRhKQorLi4gb3Bjb2RlOjogUE9QX0pVTVBfSUZfRkFMU0UgKHRhcmdldCkKIAotICAgSWYgVE9TIGlzIGZhbHNlLCBpbmNyZW1lbnQgdGhlIGJ5dGVjb2RlIGNvdW50ZXIgYnkgKmRlbHRhKi4gIFRPUyBpcyBub3QKLSAgIGNoYW5nZWQuCisgICBJZiBUT1MgaXMgZmFsc2UsIHNldHMgdGhlIGJ5dGVjb2RlIGNvdW50ZXIgdG8gKnRhcmdldCouICBUT1MgaXMgcG9wcGVkLgorCisKKy4uIG9wY29kZTo6IEpVTVBfSUZfVFJVRV9PUl9QT1AgKHRhcmdldCkKKworICAgSWYgVE9TIGlzIHRydWUsIHNldHMgdGhlIGJ5dGVjb2RlIGNvdW50ZXIgdG8gKnRhcmdldCogYW5kIGxlYXZlcyBUT1MKKyAgIG9uIHRoZSBzdGFjay4gIE90aGVyd2lzZSAoVE9TIGlzIGZhbHNlKSwgVE9TIGlzIHBvcHBlZC4KKworCisuLiBvcGNvZGU6OiBKVU1QX0lGX0ZBTFNFX09SX1BPUCAodGFyZ2V0KQorCisgICBJZiBUT1MgaXMgZmFsc2UsIHNldHMgdGhlIGJ5dGVjb2RlIGNvdW50ZXIgdG8gKnRhcmdldCogYW5kIGxlYXZlcworICAgVE9TIG9uIHRoZSBzdGFjay4gIE90aGVyd2lzZSAoVE9TIGlzIHRydWUpLCBUT1MgaXMgcG9wcGVkLgogCiAKIC4uIG9wY29kZTo6IEpVTVBfQUJTT0xVVEUgKHRhcmdldCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0IGIvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKaW5kZXggMWE0M2EzMy4uODY4MDRjYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKQEAgLTk1LDcgKzk1LDcgQEAKICAgICQKIAogVGhlcmUncyBubyBvdXRwdXQhICBUaGF0J3Mgbm9ybWFsLCBhbmQgaXQgbWVhbnMgYWxsIHRoZSBleGFtcGxlcyB3b3JrZWQuICBQYXNzCi06b3B0aW9uOmAtdmAgdG8gdGhlIHNjcmlwdCwgYW5kIDptb2Q6YGRvY3Rlc3RgIHByaW50cyBhIGRldGFpbGVkIGxvZyBvZiB3aGF0CitgYC12YGAgdG8gdGhlIHNjcmlwdCwgYW5kIDptb2Q6YGRvY3Rlc3RgIHByaW50cyBhIGRldGFpbGVkIGxvZyBvZiB3aGF0CiBpdCdzIHRyeWluZywgYW5kIHByaW50cyBhIHN1bW1hcnkgYXQgdGhlIGVuZDo6CiAKICAgICQgcHl0aG9uIGV4YW1wbGUucHkgLXYKQEAgLTE2Myw3ICsxNjMsNyBAQAogZmluYWwgbGluZSBvZiBvdXRwdXQgaXMgYGAqKipUZXN0IEZhaWxlZCoqKiBOIGZhaWx1cmVzLmBgLCB3aGVyZSAqTiogaXMgdGhlCiBudW1iZXIgb2YgZXhhbXBsZXMgdGhhdCBmYWlsZWQuCiAKLVJ1biBpdCB3aXRoIHRoZSA6b3B0aW9uOmAtdmAgc3dpdGNoIGluc3RlYWQ6OgorUnVuIGl0IHdpdGggdGhlIGBgLXZgYCBzd2l0Y2ggaW5zdGVhZDo6CiAKICAgIHB5dGhvbiBNLnB5IC12CiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiBZb3UgY2FuIGZvcmNlIHZlcmJvc2UgbW9kZSBieSBwYXNzaW5nIGBgdmVyYm9zZT1UcnVlYGAgdG8gOmZ1bmM6YHRlc3Rtb2RgLCBvcgogcHJvaGliaXQgaXQgYnkgcGFzc2luZyBgYHZlcmJvc2U9RmFsc2VgYC4gIEluIGVpdGhlciBvZiB0aG9zZSBjYXNlcywKLWBgc3lzLmFyZ3ZgYCBpcyBub3QgZXhhbWluZWQgYnkgOmZ1bmM6YHRlc3Rtb2RgIChzbyBwYXNzaW5nIDpvcHRpb246YC12YCBvciBub3QKK2Bgc3lzLmFyZ3ZgYCBpcyBub3QgZXhhbWluZWQgYnkgOmZ1bmM6YHRlc3Rtb2RgIChzbyBwYXNzaW5nIGBgLXZgYCBvciBub3QKIGhhcyBubyBlZmZlY3QpLgogCiBTaW5jZSBQeXRob24gMi42LCB0aGVyZSBpcyBhbHNvIGEgY29tbWFuZCBsaW5lIHNob3J0Y3V0IGZvciBydW5uaW5nCkBAIC0yNDIsNyArMjQyLDcgQEAKIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVsbCBpdCB0byBsb29rIGZvciBmaWxlcyBpbiBvdGhlciBsb2NhdGlvbnMuCiAKIExpa2UgOmZ1bmM6YHRlc3Rtb2RgLCA6ZnVuYzpgdGVzdGZpbGVgJ3MgdmVyYm9zaXR5IGNhbiBiZSBzZXQgd2l0aCB0aGUKLTpvcHRpb246YC12YCBjb21tYW5kLWxpbmUgc3dpdGNoIG9yIHdpdGggdGhlIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnQKK2BgLXZgYCBjb21tYW5kLWxpbmUgc3dpdGNoIG9yIHdpdGggdGhlIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnQKICp2ZXJib3NlKi4KIAogU2luY2UgUHl0aG9uIDIuNiwgdGhlcmUgaXMgYWxzbyBhIGNvbW1hbmQgbGluZSBzaG9ydGN1dCBmb3IgcnVubmluZwpAQCAtMzMxLDcgKzMzMSw3IEBACiAgIGJsYW5rIGxpbmUsIHB1dCBgYDxCTEFOS0xJTkU+YGAgaW4geW91ciBkb2N0ZXN0IGV4YW1wbGUgZWFjaCBwbGFjZSBhIGJsYW5rIGxpbmUKICAgaXMgZXhwZWN0ZWQuCiAKLSAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjQKKyAgLi4gdmVyc2lvbmFkZGVkOjogMi40CiAgICAgIGBgPEJMQU5LTElORT5gYCB3YXMgYWRkZWQ7IHRoZXJlIHdhcyBubyB3YXkgdG8gdXNlIGV4cGVjdGVkIG91dHB1dCBjb250YWluaW5nCiAgICAgIGVtcHR5IGxpbmVzIGluIHByZXZpb3VzIHZlcnNpb25zLgogCkBAIC00NDYsNiArNDQ2LDkgQEAKIFRoZSBsYXN0IHRocmVlIGxpbmVzIChzdGFydGluZyB3aXRoIDpleGM6YFZhbHVlRXJyb3JgKSBhcmUgY29tcGFyZWQgYWdhaW5zdCB0aGUKIGV4Y2VwdGlvbidzIHR5cGUgYW5kIGRldGFpbCwgYW5kIHRoZSByZXN0IGFyZSBpZ25vcmVkLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNAorICAgUHJldmlvdXMgdmVyc2lvbnMgd2VyZSB1bmFibGUgdG8gaGFuZGxlIG11bHRpLWxpbmUgZXhjZXB0aW9uIGRldGFpbHMuCisKIEJlc3QgcHJhY3RpY2UgaXMgdG8gb21pdCB0aGUgdHJhY2ViYWNrIHN0YWNrLCB1bmxlc3MgaXQgYWRkcyBzaWduaWZpY2FudAogZG9jdW1lbnRhdGlvbiB2YWx1ZSB0byB0aGUgZXhhbXBsZS4gIFNvIHRoZSBsYXN0IGV4YW1wbGUgaXMgcHJvYmFibHkgYmV0dGVyIGFzOjoKIApAQCAtNDc3LDggKzQ4MCw5IEBACiAgIHdpdGggYW4gYWxwaGFudW1lcmljIGlzIHRha2VuIHRvIGJlIHRoZSBzdGFydCBvZiB0aGUgZXhjZXB0aW9uIGRldGFpbC4gIE9mCiAgIGNvdXJzZSB0aGlzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGZvciBnZW51aW5lIHRyYWNlYmFja3MuCiAKLSogV2hlbiB0aGUgOmNvbnN0OmBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTGAgZG9jdGVzdCBvcHRpb24gaXMgaXMgc3BlY2lmaWVkLAotICBldmVyeXRoaW5nIGZvbGxvd2luZyB0aGUgbGVmdG1vc3QgY29sb24gaXMgaWdub3JlZC4KKyogV2hlbiB0aGUgOmNvbnN0OmBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTGAgZG9jdGVzdCBvcHRpb24gaXMgc3BlY2lmaWVkLAorICBldmVyeXRoaW5nIGZvbGxvd2luZyB0aGUgbGVmdG1vc3QgY29sb24gYW5kIGFueSBtb2R1bGUgaW5mb3JtYXRpb24gaW4gdGhlCisgIGV4Y2VwdGlvbiBuYW1lIGlzIGlnbm9yZWQuCiAKICogVGhlIGludGVyYWN0aXZlIHNoZWxsIG9taXRzIHRoZSB0cmFjZWJhY2sgaGVhZGVyIGxpbmUgZm9yIHNvbWUKICAgOmV4YzpgU3ludGF4RXJyb3JgXCBzLiAgQnV0IGRvY3Rlc3QgdXNlcyB0aGUgdHJhY2ViYWNrIGhlYWRlciBsaW5lIHRvCkBAIC01MDYsMTAgKzUxMCw2IEBACiAgICAgICAgICBeCiAgICAgIFN5bnRheEVycm9yOiBpbnZhbGlkIHN5bnRheAogCi0uLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNAotICAgVGhlIGFiaWxpdHkgdG8gaGFuZGxlIGEgbXVsdGktbGluZSBleGNlcHRpb24gZGV0YWlsLCBhbmQgdGhlCi0gICA6Y29uc3Q6YElHTk9SRV9FWENFUFRJT05fREVUQUlMYCBkb2N0ZXN0IG9wdGlvbiwgd2VyZSBhZGRlZC4KLQogCiAuLiBfZG9jdGVzdC1vcHRpb25zOgogCkBAIC01NzIsMjAgKzU3MiwzOCBAQAogICAgZXhjZXB0aW9uIHJhaXNlZCBpcyBgYFZhbHVlRXJyb3I6IDMqMTRgYCwgYnV0IHdpbGwgZmFpbCwgZS5nLiwgaWYKICAgIDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkLgogCi0gICBOb3RlIHRoYXQgYSBzaW1pbGFyIGVmZmVjdCBjYW4gYmUgb2J0YWluZWQgdXNpbmcgOmNvbnN0OmBFTExJUFNJU2AsIGFuZAotICAgOmNvbnN0OmBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTGAgbWF5IGdvIGF3YXkgd2hlbiBQeXRob24gcmVsZWFzZXMgcHJpb3IgdG8gMi40Ci0gICBiZWNvbWUgdW5pbnRlcmVzdGluZy4gIFVudGlsIHRoZW4sIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIGlzIHRoZSBvbmx5Ci0gICBjbGVhciB3YXkgdG8gd3JpdGUgYSBkb2N0ZXN0IHRoYXQgZG9lc24ndCBjYXJlIGFib3V0IHRoZSBleGNlcHRpb24gZGV0YWlsIHlldAotICAgY29udGludWVzIHRvIHBhc3MgdW5kZXIgUHl0aG9uIHJlbGVhc2VzIHByaW9yIHRvIDIuNCAoZG9jdGVzdCBkaXJlY3RpdmVzIGFwcGVhcgotICAgdG8gYmUgY29tbWVudHMgdG8gdGhlbSkuICBGb3IgZXhhbXBsZSwgOjoKKyAgIEl0IHdpbGwgYWxzbyBpZ25vcmUgdGhlIG1vZHVsZSBuYW1lIHVzZWQgaW4gUHl0aG9uIDMgZG9jdGVzdCByZXBvcnRzLiBIZW5jZQorICAgYm90aCB0aGVzZSB2YXJpYXRpb25zIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHRlc3QgaXMgcnVuIHVuZGVyCisgICBQeXRob24gMi43IG9yIFB5dGhvbiAzLjIgKG9yIGxhdGVyIHZlcnNpb25zKToKKworICAgICAgPj4+IHJhaXNlIEN1c3RvbUVycm9yKCdtZXNzYWdlJykgI2RvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgQ3VzdG9tRXJyb3I6IG1lc3NhZ2UKKworICAgICAgPj4+IHJhaXNlIEN1c3RvbUVycm9yKCdtZXNzYWdlJykgI2RvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgbXlfbW9kdWxlLkN1c3RvbUVycm9yOiBtZXNzYWdlCisKKyAgIE5vdGUgdGhhdCA6Y29uc3Q6YEVMTElQU0lTYCBjYW4gYWxzbyBiZSB1c2VkIHRvIGlnbm9yZSB0aGUKKyAgIGRldGFpbHMgb2YgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlLCBidXQgc3VjaCBhIHRlc3QgbWF5IHN0aWxsIGZhaWwgYmFzZWQKKyAgIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBtb2R1bGUgZGV0YWlscyBhcmUgcHJpbnRlZCBhcyBwYXJ0IG9mIHRoZQorICAgZXhjZXB0aW9uIG5hbWUuIFVzaW5nIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIGFuZCB0aGUgZGV0YWlscworICAgZnJvbSBQeXRob24gMi4zIGlzIGFsc28gdGhlIG9ubHkgY2xlYXIgd2F5IHRvIHdyaXRlIGEgZG9jdGVzdCB0aGF0IGRvZXNuJ3QKKyAgIGNhcmUgYWJvdXQgdGhlIGV4Y2VwdGlvbiBkZXRhaWwgeWV0IGNvbnRpbnVlcyB0byBwYXNzIHVuZGVyIFB5dGhvbiAyLjMgb3IKKyAgIGVhcmxpZXIgKHRob3NlIHJlbGVhc2VzIGRvIG5vdCBzdXBwb3J0IGRvY3Rlc3QgZGlyZWN0aXZlcyBhbmQgaWdub3JlIHRoZW0KKyAgIGFzIGlycmVsZXZhbnQgY29tbWVudHMpLiBGb3IgZXhhbXBsZSwgOjoKIAogICAgICAgPj4+ICgxLCAyKVszXSA9ICdtb28nICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwogICAgICAgVHlwZUVycm9yOiBvYmplY3QgZG9lc24ndCBzdXBwb3J0IGl0ZW0gYXNzaWdubWVudAogCi0gICBwYXNzZXMgdW5kZXIgUHl0aG9uIDIuNCBhbmQgUHl0aG9uIDIuMy4gIFRoZSBkZXRhaWwgY2hhbmdlZCBpbiAyLjQsIHRvIHNheSAiZG9lcwotICAgbm90IiBpbnN0ZWFkIG9mICJkb2Vzbid0Ii4KKyAgIHBhc3NlcyB1bmRlciBQeXRob24gMi4zIGFuZCBsYXRlciBQeXRob24gdmVyc2lvbnMsIGV2ZW4gdGhvdWdoIHRoZSBkZXRhaWwKKyAgIGNoYW5nZWQgaW4gUHl0aG9uIDIuNCB0byBzYXkgImRvZXMgbm90IiBpbnN0ZWFkIG9mICJkb2Vzbid0Ii4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIG5vdyBhbHNvIGlnbm9yZXMgYW55IGluZm9ybWF0aW9uCisgICAgICByZWxhdGluZyB0byB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIGV4Y2VwdGlvbiB1bmRlciB0ZXN0CiAKIAogLi4gZGF0YTo6IFNLSVAKQEAgLTU5OCw2ICs2MTYsOCBAQAogCiAgICBUaGUgU0tJUCBmbGFnIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHRlbXBvcmFyaWx5ICJjb21tZW50aW5nIG91dCIgZXhhbXBsZXMuCiAKKy4uIHZlcnNpb25hZGRlZDo6IDIuNQorCiAKIC4uIGRhdGE6OiBDT01QQVJJU09OX0ZMQUdTCiAKQEAgLTcwMCwxNyArNzIwLDEzIEBACiBmdW5jdGlvbnMgdGhhdCBydW4gZG9jdGVzdHMsIGVzdGFibGlzaGluZyBkaWZmZXJlbnQgZGVmYXVsdHMuICBJbiBzdWNoIGNhc2VzLAogZGlzYWJsaW5nIGFuIG9wdGlvbiB2aWEgYGAtYGAgaW4gYSBkaXJlY3RpdmUgY2FuIGJlIHVzZWZ1bC4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjQKLSAgIENvbnN0YW50cyA6Y29uc3Q6YERPTlRfQUNDRVBUX0JMQU5LTElORWAsIDpjb25zdDpgTk9STUFMSVpFX1dISVRFU1BBQ0VgLAorLi4gdmVyc2lvbmFkZGVkOjogMi40CisgICBEb2N0ZXN0IGRpcmVjdGl2ZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGNvbnN0YW50cworICAgOmNvbnN0OmBET05UX0FDQ0VQVF9CTEFOS0xJTkVgLCA6Y29uc3Q6YE5PUk1BTElaRV9XSElURVNQQUNFYCwKICAgIDpjb25zdDpgRUxMSVBTSVNgLCA6Y29uc3Q6YElHTk9SRV9FWENFUFRJT05fREVUQUlMYCwgOmNvbnN0OmBSRVBPUlRfVURJRkZgLAogICAgOmNvbnN0OmBSRVBPUlRfQ0RJRkZgLCA6Y29uc3Q6YFJFUE9SVF9ORElGRmAsCiAgICA6Y29uc3Q6YFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkVgLCA6Y29uc3Q6YENPTVBBUklTT05fRkxBR1NgIGFuZAotICAgOmNvbnN0OmBSRVBPUlRJTkdfRkxBR1NgIHdlcmUgYWRkZWQ7IGJ5IGRlZmF1bHQgYGA8QkxBTktMSU5FPmBgIGluIGV4cGVjdGVkCi0gICBvdXRwdXQgbWF0Y2hlcyBhbiBlbXB0eSBsaW5lIGluIGFjdHVhbCBvdXRwdXQ7IGFuZCBkb2N0ZXN0IGRpcmVjdGl2ZXMgd2VyZQotICAgYWRkZWQuCi0KLS4uIHZlcnNpb25jaGFuZ2VkOjogMi41Ci0gICBDb25zdGFudCA6Y29uc3Q6YFNLSVBgIHdhcyBhZGRlZC4KKyAgIDpjb25zdDpgUkVQT1JUSU5HX0ZMQUdTYCB3ZXJlIGFkZGVkLgogCiBUaGVyZSdzIGFsc28gYSB3YXkgdG8gcmVnaXN0ZXIgbmV3IG9wdGlvbiBmbGFnIG5hbWVzLCBhbHRob3VnaCB0aGlzIGlzbid0IHVzZWZ1bAogdW5sZXNzIHlvdSBpbnRlbmQgdG8gZXh0ZW5kIDptb2Q6YGRvY3Rlc3RgIGludGVybmFscyB2aWEgc3ViY2xhc3Npbmc6CkBAIC05NTYsMTggKzk3MiwxNyBAQAogc3VwcGxpZXMgbWFueSBmbGV4aWJsZSB3YXlzIHRvIGNvbWJpbmUgdGVzdHMgZnJvbSBtdWx0aXBsZSBzb3VyY2VzLiAgU28sIGluCiBQeXRob24gMi40LCA6bW9kOmBkb2N0ZXN0YCdzIDpjbGFzczpgVGVzdGVyYCBjbGFzcyBpcyBkZXByZWNhdGVkLCBhbmQKIDptb2Q6YGRvY3Rlc3RgIHByb3ZpZGVzIHR3byBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgOm1vZDpgdW5pdHRlc3RgCi10ZXN0IHN1aXRlcyBmcm9tIG1vZHVsZXMgYW5kIHRleHQgZmlsZXMgY29udGFpbmluZyBkb2N0ZXN0cy4gIFRoZXNlIHRlc3Qgc3VpdGVzCi1jYW4gdGhlbiBiZSBydW4gdXNpbmcgOm1vZDpgdW5pdHRlc3RgIHRlc3QgcnVubmVyczo6Cit0ZXN0IHN1aXRlcyBmcm9tIG1vZHVsZXMgYW5kIHRleHQgZmlsZXMgY29udGFpbmluZyBkb2N0ZXN0cy4gIFRvIGludGVncmF0ZSB3aXRoCis6bW9kOmB1bml0dGVzdGAgdGVzdCBkaXNjb3ZlcnksIGluY2x1ZGUgYSA6ZnVuYzpgbG9hZF90ZXN0c2AgZnVuY3Rpb24gaW4geW91cgordGVzdCBtb2R1bGU6OgogCiAgICBpbXBvcnQgdW5pdHRlc3QKICAgIGltcG9ydCBkb2N0ZXN0Ci0gICBpbXBvcnQgbXlfbW9kdWxlX3dpdGhfZG9jdGVzdHMsIGFuZF9hbm90aGVyCisgICBpbXBvcnQgbXlfbW9kdWxlX3dpdGhfZG9jdGVzdHMKIAotICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgZm9yIG1vZCBpbiBteV9tb2R1bGVfd2l0aF9kb2N0ZXN0cywgYW5kX2Fub3RoZXI6Ci0gICAgICAgc3VpdGUuYWRkVGVzdChkb2N0ZXN0LkRvY1Rlc3RTdWl0ZShtb2QpKQotICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQotICAgcnVubmVyLnJ1bihzdWl0ZSkKKyAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIGlnbm9yZSk6CisgICAgICAgdGVzdHMuYWRkVGVzdHMoZG9jdGVzdC5Eb2NUZXN0U3VpdGUobXlfbW9kdWxlX3dpdGhfZG9jdGVzdHMpKQorICAgICAgIHJldHVybiB0ZXN0cwogCiBUaGVyZSBhcmUgdHdvIG1haW4gZnVuY3Rpb25zIGZvciBjcmVhdGluZyA6Y2xhc3M6YHVuaXR0ZXN0LlRlc3RTdWl0ZWAgaW5zdGFuY2VzCiBmcm9tIHRleHQgZmlsZXMgYW5kIG1vZHVsZXMgd2l0aCBkb2N0ZXN0czoKQEAgLTE0MzgsNyArMTQ1Myw3IEBACiAgICB2ZXJib3NpdHkuICBJZiAqdmVyYm9zZSogaXMgYGBUcnVlYGAsIHRoZW4gaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBhYm91dCBlYWNoCiAgICBleGFtcGxlLCBhcyBpdCBpcyBydW4uICBJZiAqdmVyYm9zZSogaXMgYGBGYWxzZWBgLCB0aGVuIG9ubHkgZmFpbHVyZXMgYXJlCiAgICBwcmludGVkLiAgSWYgKnZlcmJvc2UqIGlzIHVuc3BlY2lmaWVkLCBvciBgYE5vbmVgYCwgdGhlbiB2ZXJib3NlIG91dHB1dCBpcyB1c2VkCi0gICBpZmYgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2ggOm9wdGlvbjpgLXZgIGlzIHVzZWQuCisgICBpZmYgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2ggYGAtdmBgIGlzIHVzZWQuCiAKICAgIFRoZSBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50ICpvcHRpb25mbGFncyogY2FuIGJlIHVzZWQgdG8gY29udHJvbCBob3cgdGhlIHRlc3QKICAgIHJ1bm5lciBjb21wYXJlcyBleHBlY3RlZCBvdXRwdXQgdG8gYWN0dWFsIG91dHB1dCwgYW5kIGhvdyBpdCBkaXNwbGF5cyBmYWlsdXJlcy4KQEAgLTE3NTMsNyArMTc2OCw3IEBACiAKIC4uIGV4Y2VwdGlvbjo6IERvY1Rlc3RGYWlsdXJlKHRlc3QsIGV4YW1wbGUsIGdvdCkKIAotICAgQW4gZXhjZXB0aW9uIHRocm93biBieSA6Y2xhc3M6YERvY1Rlc3RSdW5uZXJgIHRvIHNpZ25hbCB0aGF0IGEgZG9jdGVzdCBleGFtcGxlJ3MKKyAgIEFuIGV4Y2VwdGlvbiByYWlzZWQgYnkgOmNsYXNzOmBEb2NUZXN0UnVubmVyYCB0byBzaWduYWwgdGhhdCBhIGRvY3Rlc3QgZXhhbXBsZSdzCiAgICBhY3R1YWwgb3V0cHV0IGRpZCBub3QgbWF0Y2ggaXRzIGV4cGVjdGVkIG91dHB1dC4gVGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyBhcmUKICAgIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbWVtYmVyIHZhcmlhYmxlcyBvZiB0aGUgc2FtZSBuYW1lcy4KIApAQCAtMTc3Nyw5ICsxNzkyLDkgQEAKIAogLi4gZXhjZXB0aW9uOjogVW5leHBlY3RlZEV4Y2VwdGlvbih0ZXN0LCBleGFtcGxlLCBleGNfaW5mbykKIAotICAgQW4gZXhjZXB0aW9uIHRocm93biBieSA6Y2xhc3M6YERvY1Rlc3RSdW5uZXJgIHRvIHNpZ25hbCB0aGF0IGEgZG9jdGVzdCBleGFtcGxlCi0gICByYWlzZWQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24uICBUaGUgY29uc3RydWN0b3IgYXJndW1lbnRzIGFyZSB1c2VkIHRvCi0gICBpbml0aWFsaXplIHRoZSBtZW1iZXIgdmFyaWFibGVzIG9mIHRoZSBzYW1lIG5hbWVzLgorICAgQW4gZXhjZXB0aW9uIHJhaXNlZCBieSA6Y2xhc3M6YERvY1Rlc3RSdW5uZXJgIHRvIHNpZ25hbCB0aGF0IGEgZG9jdGVzdAorICAgZXhhbXBsZSByYWlzZWQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24uICBUaGUgY29uc3RydWN0b3IgYXJndW1lbnRzIGFyZSB1c2VkCisgICB0byBpbml0aWFsaXplIHRoZSBtZW1iZXIgdmFyaWFibGVzIG9mIHRoZSBzYW1lIG5hbWVzLgogCiA6ZXhjOmBVbmV4cGVjdGVkRXhjZXB0aW9uYCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhcmlhYmxlczoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwtZXhhbXBsZXMucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwtZXhhbXBsZXMucnN0CmluZGV4IGMxYjE2ZGEuLjMyY2VjZjMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QKQEAgLTExLDYgKzExLDEyIEBACiAuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL2VtYWlsLXNpbXBsZS5weQogCiAKK0FuZCBwYXJzaW5nIFJGQzgyMiBoZWFkZXJzIGNhbiBlYXNpbHkgYmUgZG9uZSBieSB0aGUgcGFyc2UoZmlsZW5hbWUpIG9yCitwYXJzZXN0cihtZXNzYWdlX2FzX3N0cmluZykgbWV0aG9kcyBvZiB0aGUgUGFyc2VyKCkgY2xhc3M6CisKKy4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvZW1haWwtaGVhZGVycy5weQorCisKIEhlcmUncyBhbiBleGFtcGxlIG9mIGhvdyB0byBzZW5kIGEgTUlNRSBtZXNzYWdlIGNvbnRhaW5pbmcgYSBidW5jaCBvZiBmYW1pbHkKIHBpY3R1cmVzIHRoYXQgbWF5IGJlIHJlc2lkaW5nIGluIGEgZGlyZWN0b3J5OgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5lcnJvcnMucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwuZXJyb3JzLnJzdAppbmRleCA3YTBjNTJhLi4wNjU5OGQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5lcnJvcnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLmVycm9ycy5yc3QKQEAgLTE3LDcgKzE3LDcgQEAKIAogLi4gZXhjZXB0aW9uOjogTWVzc2FnZVBhcnNlRXJyb3IoKQogCi0gICBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBleGNlcHRpb25zIHRocm93biBieSB0aGUgOmNsYXNzOmB+ZW1haWwucGFyc2VyLlBhcnNlcmAKKyAgIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoZSA6Y2xhc3M6YH5lbWFpbC5wYXJzZXIuUGFyc2VyYAogICAgY2xhc3MuICBJdCBpcyBkZXJpdmVkIGZyb20gOmV4YzpgTWVzc2FnZUVycm9yYC4KIAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5oZWFkZXIucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwuaGVhZGVyLnJzdAppbmRleCA3MTgyMDA1Li5mZTA5ZGU1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5oZWFkZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLmhlYWRlci5yc3QKQEAgLTY1LDcgKzY1LDcgQEAKICAgIGNoYXJhY3RlciBzZXQgaXMgdXNlZCBib3RoIGFzICpzKidzIGluaXRpYWwgY2hhcnNldCBhbmQgYXMgdGhlIGRlZmF1bHQgZm9yCiAgICBzdWJzZXF1ZW50IDptZXRoOmBhcHBlbmRgIGNhbGxzLgogCi0gICBUaGUgbWF4aW11bSBsaW5lIGxlbmd0aCBjYW4gYmUgc3BlY2lmaWVkIGV4cGxpY2l0IHZpYSAqbWF4bGluZWxlbiouICBGb3IKKyAgIFRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIGNhbiBiZSBzcGVjaWZpZWQgZXhwbGljaXRseSB2aWEgKm1heGxpbmVsZW4qLiAgRm9yCiAgICBzcGxpdHRpbmcgdGhlIGZpcnN0IGxpbmUgdG8gYSBzaG9ydGVyIHZhbHVlICh0byBhY2NvdW50IGZvciB0aGUgZmllbGQgaGVhZGVyCiAgICB3aGljaCBpc24ndCBpbmNsdWRlZCBpbiAqcyosIGUuZy4gOm1haWxoZWFkZXI6YFN1YmplY3RgKSBwYXNzIGluIHRoZSBuYW1lIG9mIHRoZQogICAgZmllbGQgaW4gKmhlYWRlcl9uYW1lKi4gIFRoZSBkZWZhdWx0ICptYXhsaW5lbGVuKiBpcyA3NiwgYW5kIHRoZSBkZWZhdWx0IHZhbHVlCkBAIC03NCw3ICs3NCw4IEBACiAKICAgIE9wdGlvbmFsICpjb250aW51YXRpb25fd3MqIG11c3QgYmUgOnJmYzpgMjgyMmBcIC1jb21wbGlhbnQgZm9sZGluZyB3aGl0ZXNwYWNlLAogICAgYW5kIGlzIHVzdWFsbHkgZWl0aGVyIGEgc3BhY2Ugb3IgYSBoYXJkIHRhYiBjaGFyYWN0ZXIuIFRoaXMgY2hhcmFjdGVyIHdpbGwgYmUKLSAgIHByZXBlbmRlZCB0byBjb250aW51YXRpb24gbGluZXMuCisgICBwcmVwZW5kZWQgdG8gY29udGludWF0aW9uIGxpbmVzLiAgKmNvbnRpbnVhdGlvbl93cyogZGVmYXVsdHMgdG8gYSBzaW5nbGUKKyAgIHNwYWNlIGNoYXJhY3RlciAoIiAiKS4KIAogICAgT3B0aW9uYWwgKmVycm9ycyogaXMgcGFzc2VkIHN0cmFpZ2h0IHRocm91Z2ggdG8gdGhlIDptZXRoOmBhcHBlbmRgIG1ldGhvZC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdAppbmRleCA0Y2MzODgwLi42ZjQwYzA1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdApAQCAtMjY2LDcgKzI2NiwxMiBAQAogICAgICAgdGFrZW4gYXMgdGhlIHBhcmFtZXRlciBuYW1lLCB3aXRoIHVuZGVyc2NvcmVzIGNvbnZlcnRlZCB0byBkYXNoZXMgKHNpbmNlCiAgICAgICBkYXNoZXMgYXJlIGlsbGVnYWwgaW4gUHl0aG9uIGlkZW50aWZpZXJzKS4gIE5vcm1hbGx5LCB0aGUgcGFyYW1ldGVyIHdpbGwKICAgICAgIGJlIGFkZGVkIGFzIGBga2V5PSJ2YWx1ZSJgYCB1bmxlc3MgdGhlIHZhbHVlIGlzIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlCi0gICAgICBvbmx5IHRoZSBrZXkgd2lsbCBiZSBhZGRlZC4KKyAgICAgIG9ubHkgdGhlIGtleSB3aWxsIGJlIGFkZGVkLiAgSWYgdGhlIHZhbHVlIGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLAorICAgICAgaXQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSB0aHJlZSB0dXBsZSBpbiB0aGUgZm9ybWF0CisgICAgICBgYChDSEFSU0VULCBMQU5HVUFHRSwgVkFMVUUpYGAsIHdoZXJlIGBgQ0hBUlNFVGBgIGlzIGEgc3RyaW5nIG5hbWluZyB0aGUKKyAgICAgIGNoYXJzZXQgdG8gYmUgdXNlZCB0byBlbmNvZGUgdGhlIHZhbHVlLCBgYExBTkdVQUdFYGAgY2FuIHVzdWFsbHkgYmUgc2V0CisgICAgICB0byBgYE5vbmVgYCBvciB0aGUgZW1wdHkgc3RyaW5nIChzZWUgOlJGQzpgMjIzMWAgZm9yIG90aGVyIHBvc3NpYmlsaXRpZXMpLAorICAgICAgYW5kIGBgVkFMVUVgYCBpcyB0aGUgc3RyaW5nIHZhbHVlIGNvbnRhaW5pbmcgbm9uLUFTQ0lJIGNvZGUgcG9pbnRzLgogCiAgICAgICBIZXJlJ3MgYW4gZXhhbXBsZTo6CiAKQEAgLTI3Niw2ICsyODEsMTUgQEAKIAogICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImJ1ZC5naWYiCiAKKyAgICAgIEFuIGV4YW1wbGUgd2l0aCB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzOjoKKworICAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZT0oJ2lzby04ODU5LTEnLCAnJywgJ0Z1w59iYWxsZXIucHB0JykpCisKKyAgICAgIFdoaWNoIHByb2R1Y2VzIDo6CisKKyAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lKj0iaXNvLTg4NTktMScnRnUlREZiYWxsZXIucHB0IgorCiAKICAgIC4uIG1ldGhvZDo6IHJlcGxhY2VfaGVhZGVyKF9uYW1lLCBfdmFsdWUpCiAKQEAgLTM4MCw3ICszOTQsNyBAQAogICAgICAgOnJmYzpgMjIzMWAsIHlvdSBjYW4gY29sbGFwc2UgdGhlIHBhcmFtZXRlciB2YWx1ZSBieSBjYWxsaW5nCiAgICAgICA6ZnVuYzpgZW1haWwudXRpbHMuY29sbGFwc2VfcmZjMjIzMV92YWx1ZWAsIHBhc3NpbmcgaW4gdGhlIHJldHVybiB2YWx1ZQogICAgICAgZnJvbSA6bWV0aDpgZ2V0X3BhcmFtYC4gIFRoaXMgd2lsbCByZXR1cm4gYSBzdWl0YWJseSBkZWNvZGVkIFVuaWNvZGUKLSAgICAgIHN0cmluZyB3aG4gdGhlIHZhbHVlIGlzIGEgdHVwbGUsIG9yIHRoZSBvcmlnaW5hbCBzdHJpbmcgdW5xdW90ZWQgaWYgaXQKKyAgICAgIHN0cmluZyB3aGVuIHRoZSB2YWx1ZSBpcyBhIHR1cGxlLCBvciB0aGUgb3JpZ2luYWwgc3RyaW5nIHVucXVvdGVkIGlmIGl0CiAgICAgICBpc24ndC4gIEZvciBleGFtcGxlOjoKIAogICAgICAgICAgcmF3cGFyYW0gPSBtc2cuZ2V0X3BhcmFtKCdmb28nKQpAQCAtNDQ4LDkgKzQ2MiwxMCBAQAogICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYGBmaWxlbmFtZWBgIHBhcmFtZXRlciBvZiB0aGUKICAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIgb2YgdGhlIG1lc3NhZ2UuICBJZiB0aGUgaGVhZGVyCiAgICAgICBkb2VzIG5vdCBoYXZlIGEgYGBmaWxlbmFtZWBgIHBhcmFtZXRlciwgdGhpcyBtZXRob2QgZmFsbHMgYmFjayB0byBsb29raW5nCi0gICAgICBmb3IgdGhlIGBgbmFtZWBgIHBhcmFtZXRlci4gIElmIG5laXRoZXIgaXMgZm91bmQsIG9yIHRoZSBoZWFkZXIgaXMKLSAgICAgIG1pc3NpbmcsIHRoZW4gKmZhaWxvYmoqIGlzIHJldHVybmVkLiAgVGhlIHJldHVybmVkIHN0cmluZyB3aWxsIGFsd2F5cyBiZQotICAgICAgdW5xdW90ZWQgYXMgcGVyIDpmdW5jOmBlbWFpbC51dGlscy51bnF1b3RlYC4KKyAgICAgIGZvciB0aGUgYGBuYW1lYGAgcGFyYW1ldGVyIG9uIHRoZSA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIuICBJZgorICAgICAgbmVpdGhlciBpcyBmb3VuZCwgb3IgdGhlIGhlYWRlciBpcyBtaXNzaW5nLCB0aGVuICpmYWlsb2JqKiBpcyByZXR1cm5lZC4KKyAgICAgIFRoZSByZXR1cm5lZCBzdHJpbmcgd2lsbCBhbHdheXMgYmUgdW5xdW90ZWQgYXMgcGVyCisgICAgICA6ZnVuYzpgZW1haWwudXRpbHMudW5xdW90ZWAuCiAKIAogICAgLi4gbWV0aG9kOjogZ2V0X2JvdW5kYXJ5KFtmYWlsb2JqXSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKaW5kZXggMmYwN2QyOS4uNTg4Njc2OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKQEAgLTI2LDcgKzI2LDcgQEAKIAogVGhlIGJ1aWx0LWluIGV4Y2VwdGlvbnMgbGlzdGVkIGJlbG93IGNhbiBiZSBnZW5lcmF0ZWQgYnkgdGhlIGludGVycHJldGVyIG9yCiBidWlsdC1pbiBmdW5jdGlvbnMuICBFeGNlcHQgd2hlcmUgbWVudGlvbmVkLCB0aGV5IGhhdmUgYW4gImFzc29jaWF0ZWQgdmFsdWUiCi1pbmRpY2F0aW5nIHRoZSBkZXRhaWxlZCBjYXVzZSBvZiB0aGUgZXJyb3IuIFRoaXMgbWF5IGJlIGEgc3RyaW5nIG9yIGEgdHVwbGUKK2luZGljYXRpbmcgdGhlIGRldGFpbGVkIGNhdXNlIG9mIHRoZSBlcnJvci4gIFRoaXMgbWF5IGJlIGEgc3RyaW5nIG9yIGEgdHVwbGUKIGNvbnRhaW5pbmcgc2V2ZXJhbCBpdGVtcyBvZiBpbmZvcm1hdGlvbiAoZS5nLiwgYW4gZXJyb3IgY29kZSBhbmQgYSBzdHJpbmcKIGV4cGxhaW5pbmcgdGhlIGNvZGUpLiBUaGUgYXNzb2NpYXRlZCB2YWx1ZSBpcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZQogOmtleXdvcmQ6YHJhaXNlYCBzdGF0ZW1lbnQuICBJZiB0aGUgZXhjZXB0aW9uIGNsYXNzIGlzIGRlcml2ZWQgZnJvbSB0aGUgc3RhbmRhcmQKQEAgLTQ2LDE4ICs0NiwzNSBAQAogCiBUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgYXJlIG9ubHkgdXNlZCBhcyBiYXNlIGNsYXNzZXMgZm9yIG90aGVyIGV4Y2VwdGlvbnMuCiAKLQogLi4gZXhjZXB0aW9uOjogQmFzZUV4Y2VwdGlvbgogCiAgICBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIGJ1aWx0LWluIGV4Y2VwdGlvbnMuICBJdCBpcyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkKLSAgIGluaGVyaXRlZCBieSB1c2VyLWRlZmluZWQgY2xhc3NlcyAoZm9yIHRoYXQgdXNlIDpleGM6YEV4Y2VwdGlvbmApLiAgSWYKKyAgIGluaGVyaXRlZCBieSB1c2VyLWRlZmluZWQgY2xhc3NlcyAoZm9yIHRoYXQsIHVzZSA6ZXhjOmBFeGNlcHRpb25gKS4gIElmCiAgICA6ZnVuYzpgc3RyYCBvciA6ZnVuYzpgdW5pY29kZWAgaXMgY2FsbGVkIG9uIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MsIHRoZQotICAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFyZ3VtZW50KHMpIHRvIHRoZSBpbnN0YW5jZSBhcmUgcmV0dXJuZWQgb3IgdGhlIGVtcHR5Ci0gICBzdHJpbmcgd2hlbiB0aGVyZSB3ZXJlIG5vIGFyZ3VtZW50cy4gIEFsbCBhcmd1bWVudHMgYXJlICBzdG9yZWQgaW4gOmF0dHI6YGFyZ3NgCi0gICBhcyBhIHR1cGxlLgorICAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFyZ3VtZW50KHMpIHRvIHRoZSBpbnN0YW5jZSBhcmUgcmV0dXJuZWQsIG9yIHRoZSBlbXB0eQorICAgc3RyaW5nIHdoZW4gdGhlcmUgd2VyZSBubyBhcmd1bWVudHMuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNQogCisgICAuLiBhdHRyaWJ1dGU6OiBhcmdzCisKKyAgICAgIFRoZSB0dXBsZSBvZiBhcmd1bWVudHMgZ2l2ZW4gdG8gdGhlIGV4Y2VwdGlvbiBjb25zdHJ1Y3Rvci4gIFNvbWUgYnVpbHQtaW4KKyAgICAgIGV4Y2VwdGlvbnMgKGxpa2UgOmV4YzpgSU9FcnJvcmApIGV4cGVjdCBhIGNlcnRhaW4gbnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQKKyAgICAgIGFzc2lnbiBhIHNwZWNpYWwgbWVhbmluZyB0byB0aGUgZWxlbWVudHMgb2YgdGhpcyB0dXBsZSwgd2hpbGUgb3RoZXJzIGFyZQorICAgICAgdXN1YWxseSBjYWxsZWQgb25seSB3aXRoIGEgc2luZ2xlIHN0cmluZyBnaXZpbmcgYW4gZXJyb3IgbWVzc2FnZS4KKworICAgLi4gbWV0aG9kOjogd2l0aF90cmFjZWJhY2sodGIpCisKKyAgICAgIFRoaXMgbWV0aG9kIHNldHMgKnRiKiBhcyB0aGUgbmV3IHRyYWNlYmFjayBmb3IgdGhlIGV4Y2VwdGlvbiBhbmQgcmV0dXJucworICAgICAgdGhlIGV4Y2VwdGlvbiBvYmplY3QuICBJdCBpcyB1c3VhbGx5IHVzZWQgaW4gZXhjZXB0aW9uIGhhbmRsaW5nIGNvZGUgbGlrZQorICAgICAgdGhpczo6CisKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAuLi4KKyAgICAgICAgIGV4Y2VwdCBTb21lRXhjZXB0aW9uOgorICAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KKyAgICAgICAgICAgICByYWlzZSBPdGhlckV4Y2VwdGlvbiguLi4pLndpdGhfdHJhY2ViYWNrKHRiKQorCiAKIC4uIGV4Y2VwdGlvbjo6IEV4Y2VwdGlvbgogCkBAIC04Miw2ICs5OSwxMiBAQAogICAgOmV4YzpgRmxvYXRpbmdQb2ludEVycm9yYC4KIAogCisuLiBleGNlcHRpb246OiBCdWZmZXJFcnJvcgorCisgICBSYWlzZWQgd2hlbiBhIDpyZWY6YGJ1ZmZlciA8YnVmZmVyb2JqZWN0cz5gIHJlbGF0ZWQgb3BlcmF0aW9uIGNhbm5vdCBiZQorICAgcGVyZm9ybWVkLgorCisKIC4uIGV4Y2VwdGlvbjo6IExvb2t1cEVycm9yCiAKICAgIFRoZSBiYXNlIGNsYXNzIGZvciB0aGUgZXhjZXB0aW9ucyB0aGF0IGFyZSByYWlzZWQgd2hlbiBhIGtleSBvciBpbmRleCB1c2VkIG9uCkBAIC0xNDEsNyArMTY0LDcgQEAKIAogICAgUmFpc2VkIHdoZW4gYSBmbG9hdGluZyBwb2ludCBvcGVyYXRpb24gZmFpbHMuICBUaGlzIGV4Y2VwdGlvbiBpcyBhbHdheXMgZGVmaW5lZCwKICAgIGJ1dCBjYW4gb25seSBiZSByYWlzZWQgd2hlbiBQeXRob24gaXMgY29uZmlndXJlZCB3aXRoIHRoZQotICAgOm9wdGlvbjpgLS13aXRoLWZwZWN0bGAgb3B0aW9uLCBvciB0aGUgOmNvbnN0OmBXQU5UX1NJR0ZQRV9IQU5ETEVSYCBzeW1ib2wgaXMKKyAgIGBgLS13aXRoLWZwZWN0bGBgIG9wdGlvbiwgb3IgdGhlIDpjb25zdDpgV0FOVF9TSUdGUEVfSEFORExFUmAgc3ltYm9sIGlzCiAgICBkZWZpbmVkIGluIHRoZSA6ZmlsZTpgcHljb25maWcuaGAgZmlsZS4KIAogCkBAIC0zMDEsNiArMzI0LDE4IEBACiAgICBvZiB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIHJldHVybnMgb25seSB0aGUgbWVzc2FnZS4KIAogCisuLiBleGNlcHRpb246OiBJbmRlbnRhdGlvbkVycm9yCisKKyAgIEJhc2UgY2xhc3MgZm9yIHN5bnRheCBlcnJvcnMgcmVsYXRlZCB0byBpbmNvcnJlY3QgaW5kZW50YXRpb24uICBUaGlzIGlzIGEKKyAgIHN1YmNsYXNzIG9mIDpleGM6YFN5bnRheEVycm9yYC4KKworCisuLiBleGNlcHRpb246OiBUYWJFcnJvcgorCisgICBSYWlzZWQgd2hlbiBpbmRlbnRhdGlvbiBjb250YWlucyBhbiBpbmNvbnNpc3RlbnQgdXNlIG9mIHRhYnMgYW5kIHNwYWNlcy4KKyAgIFRoaXMgaXMgYSBzdWJjbGFzcyBvZiA6ZXhjOmBJbmRlbnRhdGlvbkVycm9yYC4KKworCiAuLiBleGNlcHRpb246OiBTeXN0ZW1FcnJvcgogCiAgICBSYWlzZWQgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgZmluZHMgYW4gaW50ZXJuYWwgZXJyb3IsIGJ1dCB0aGUgc2l0dWF0aW9uIGRvZXMgbm90CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9maWxlY21wLnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0CmluZGV4IDExZDc0YmEuLjY5OWU1MTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0CkBAIC0xMSw2ICsxMSwxMSBAQAogd2l0aCB2YXJpb3VzIG9wdGlvbmFsIHRpbWUvY29ycmVjdG5lc3MgdHJhZGUtb2Zmcy4gRm9yIGNvbXBhcmluZyBmaWxlcywKIHNlZSBhbHNvIHRoZSA6bW9kOmBkaWZmbGliYCBtb2R1bGUuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYGZpbGVjbXAgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvZmlsZWNtcC5weT92aWV3PW1hcmt1cD5gXworCiBUaGUgOm1vZDpgZmlsZWNtcGAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKaW5kZXggZmZkMTA5Yy4uNzA5MjM3ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CkBAIC00NCw2ICs0NCwxMSBAQAogcmV0dXJucyBhbiBhY2NvcmRpbmdseSBvcGVuZWQgZmlsZS1saWtlIG9iamVjdC4gVHdvIHVzZWZ1bCBob29rcyBhcmUgYWxyZWFkeQogcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYGZpbGVpbnB1dCBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9maWxlaW5wdXQucHk/dmlldz1tYXJrdXA+YF8KKwogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2Ugb2YgdGhpcyBtb2R1bGU6CiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZm5tYXRjaC5yc3QgYi9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdAppbmRleCA2N2FhMmY0Li5jYjFmYTEwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdApAQCAtMzQsNiArMzQsMTAgQEAKIGEgcGVyaW9kIGFyZSBub3Qgc3BlY2lhbCBmb3IgdGhpcyBtb2R1bGUsIGFuZCBhcmUgbWF0Y2hlZCBieSB0aGUgYGAqYGAgYW5kIGBgP2BgCiBwYXR0ZXJucy4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgZm5tYXRjaCBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9mbm1hdGNoLnB5P3ZpZXc9bWFya3VwPmBfCiAKIC4uIGZ1bmN0aW9uOjogZm5tYXRjaChmaWxlbmFtZSwgcGF0dGVybikKIApAQCAtNzMsNiArNzcsOCBAQAogCiAgICBSZXR1cm4gdGhlIHNoZWxsLXN0eWxlICpwYXR0ZXJuKiBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uCiAKKyAgIEJlIGF3YXJlIHRoZXJlIGlzIG5vIHdheSB0byBxdW90ZSBtZXRhLWNoYXJhY3RlcnMuCisKICAgIEV4YW1wbGU6CiAKICAgICAgID4+PiBpbXBvcnQgZm5tYXRjaCwgcmUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZyYWN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9mcmFjdGlvbnMucnN0CmluZGV4IDM2ZGYxMWMuLjFjYTlhOWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZyYWN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnJhY3Rpb25zLnJzdApAQCAtMTcsMzAgKzE3LDM0IEBACiAKIC4uIGNsYXNzOjogRnJhY3Rpb24obnVtZXJhdG9yPTAsIGRlbm9taW5hdG9yPTEpCiAgICAgICAgICAgIEZyYWN0aW9uKG90aGVyX2ZyYWN0aW9uKQorICAgICAgICAgICBGcmFjdGlvbihmbG9hdCkKKyAgICAgICAgICAgRnJhY3Rpb24oZGVjaW1hbCkKICAgICAgICAgICAgRnJhY3Rpb24oc3RyaW5nKQogCi0gICBUaGUgZmlyc3QgdmVyc2lvbiByZXF1aXJlcyB0aGF0ICpudW1lcmF0b3IqIGFuZCAqZGVub21pbmF0b3IqIGFyZQotICAgaW5zdGFuY2VzIG9mIDpjbGFzczpgbnVtYmVycy5JbnRlZ3JhbGAgYW5kIHJldHVybnMgYSBuZXcKLSAgIDpjbGFzczpgRnJhY3Rpb25gIGluc3RhbmNlIHdpdGggdmFsdWUgYGBudW1lcmF0b3IvZGVub21pbmF0b3JgYC4gSWYKLSAgICpkZW5vbWluYXRvciogaXMgOmNvbnN0OmAwYCwgaXQgcmFpc2VzIGEKLSAgIDpleGM6YFplcm9EaXZpc2lvbkVycm9yYC4gVGhlIHNlY29uZCB2ZXJzaW9uIHJlcXVpcmVzIHRoYXQKLSAgICpvdGhlcl9mcmFjdGlvbiogaXMgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBudW1iZXJzLlJhdGlvbmFsYCBhbmQKLSAgIHJldHVybnMgYW4gOmNsYXNzOmBGcmFjdGlvbmAgaW5zdGFuY2Ugd2l0aCB0aGUgc2FtZSB2YWx1ZS4gIFRoZQotICAgbGFzdCB2ZXJzaW9uIG9mIHRoZSBjb25zdHJ1Y3RvciBleHBlY3RzIGEgc3RyaW5nIG9yIHVuaWNvZGUKLSAgIGluc3RhbmNlIGluIG9uZSBvZiB0d28gcG9zc2libGUgZm9ybXMuICBUaGUgZmlyc3QgZm9ybSBpczo6CisgICBUaGUgZmlyc3QgdmVyc2lvbiByZXF1aXJlcyB0aGF0ICpudW1lcmF0b3IqIGFuZCAqZGVub21pbmF0b3IqIGFyZSBpbnN0YW5jZXMKKyAgIG9mIDpjbGFzczpgbnVtYmVycy5SYXRpb25hbGAgYW5kIHJldHVybnMgYSBuZXcgOmNsYXNzOmBGcmFjdGlvbmAgaW5zdGFuY2UKKyAgIHdpdGggdmFsdWUgYGBudW1lcmF0b3IvZGVub21pbmF0b3JgYC4gSWYgKmRlbm9taW5hdG9yKiBpcyA6Y29uc3Q6YDBgLCBpdAorICAgcmFpc2VzIGEgOmV4YzpgWmVyb0RpdmlzaW9uRXJyb3JgLiBUaGUgc2Vjb25kIHZlcnNpb24gcmVxdWlyZXMgdGhhdAorICAgKm90aGVyX2ZyYWN0aW9uKiBpcyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YG51bWJlcnMuUmF0aW9uYWxgIGFuZCByZXR1cm5zIGEKKyAgIDpjbGFzczpgRnJhY3Rpb25gIGluc3RhbmNlIHdpdGggdGhlIHNhbWUgdmFsdWUuICBUaGUgbmV4dCB0d28gdmVyc2lvbnMgYWNjZXB0CisgICBlaXRoZXIgYSA6Y2xhc3M6YGZsb2F0YCBvciBhIDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYCBpbnN0YW5jZSwgYW5kIHJldHVybiBhCisgICA6Y2xhc3M6YEZyYWN0aW9uYCBpbnN0YW5jZSB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgdmFsdWUuICBOb3RlIHRoYXQgZHVlIHRvIHRoZQorICAgdXN1YWwgaXNzdWVzIHdpdGggYmluYXJ5IGZsb2F0aW5nLXBvaW50IChzZWUgOnJlZjpgdHV0LWZwLWlzc3Vlc2ApLCB0aGUKKyAgIGFyZ3VtZW50IHRvIGBgRnJhY3Rpb24oMS4xKWBgIGlzIG5vdCBleGFjdGx5IGVxdWFsIHRvIDExLzEwLCBhbmQgc28KKyAgIGBgRnJhY3Rpb24oMS4xKWBgIGRvZXMgKm5vdCogcmV0dXJuIGBgRnJhY3Rpb24oMTEsIDEwKWBgIGFzIG9uZSBtaWdodCBleHBlY3QuCisgICAoQnV0IHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDptZXRoOmBsaW1pdF9kZW5vbWluYXRvcmAgbWV0aG9kIGJlbG93LikKKyAgIFRoZSBsYXN0IHZlcnNpb24gb2YgdGhlIGNvbnN0cnVjdG9yIGV4cGVjdHMgYSBzdHJpbmcgb3IgdW5pY29kZSBpbnN0YW5jZS4KKyAgIFRoZSB1c3VhbCBmb3JtIGZvciB0aGlzIGluc3RhbmNlIGlzOjoKIAogICAgICAgW3NpZ25dIG51bWVyYXRvciBbJy8nIGRlbm9taW5hdG9yXQogCiAgICB3aGVyZSB0aGUgb3B0aW9uYWwgYGBzaWduYGAgbWF5IGJlIGVpdGhlciAnKycgb3IgJy0nIGFuZAogICAgYGBudW1lcmF0b3JgYCBhbmQgYGBkZW5vbWluYXRvcmBgIChpZiBwcmVzZW50KSBhcmUgc3RyaW5ncyBvZgotICAgZGVjaW1hbCBkaWdpdHMuICBUaGUgc2Vjb25kIHBlcm1pdHRlZCBmb3JtIGlzIHRoYXQgb2YgYSBudW1iZXIKLSAgIGNvbnRhaW5pbmcgYSBkZWNpbWFsIHBvaW50OjoKLQotICAgICAgW3NpZ25dIGludGVnZXIgJy4nIFtmcmFjdGlvbl0gfCBbc2lnbl0gJy4nIGZyYWN0aW9uCi0KLSAgIHdoZXJlIGBgaW50ZWdlcmBgIGFuZCBgYGZyYWN0aW9uYGAgYXJlIHN0cmluZ3Mgb2YgZGlnaXRzLiAgSW4KLSAgIGVpdGhlciBmb3JtIHRoZSBpbnB1dCBzdHJpbmcgbWF5IGFsc28gaGF2ZSBsZWFkaW5nIGFuZC9vciB0cmFpbGluZwotICAgd2hpdGVzcGFjZS4gIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6OgorICAgZGVjaW1hbCBkaWdpdHMuICBJbiBhZGRpdGlvbiwgYW55IHN0cmluZyB0aGF0IHJlcHJlc2VudHMgYSBmaW5pdGUKKyAgIHZhbHVlIGFuZCBpcyBhY2NlcHRlZCBieSB0aGUgOmNsYXNzOmBmbG9hdGAgY29uc3RydWN0b3IgaXMgYWxzbworICAgYWNjZXB0ZWQgYnkgdGhlIDpjbGFzczpgRnJhY3Rpb25gIGNvbnN0cnVjdG9yLiAgSW4gZWl0aGVyIGZvcm0gdGhlCisgICBpbnB1dCBzdHJpbmcgbWF5IGFsc28gaGF2ZSBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczo6CiAKICAgICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24KICAgICAgID4+PiBGcmFjdGlvbigxNiwgLTEwKQpAQCAtNTgsNiArNjIsMTUgQEAKICAgICAgIEZyYWN0aW9uKDE0MTQyMTMsIDEwMDAwMDApCiAgICAgICA+Pj4gRnJhY3Rpb24oJy0uMTI1JykKICAgICAgIEZyYWN0aW9uKC0xLCA4KQorICAgICAgPj4+IEZyYWN0aW9uKCc3ZS02JykKKyAgICAgIEZyYWN0aW9uKDcsIDEwMDAwMDApCisgICAgICA+Pj4gRnJhY3Rpb24oMi4yNSkKKyAgICAgIEZyYWN0aW9uKDksIDQpCisgICAgICA+Pj4gRnJhY3Rpb24oMS4xKQorICAgICAgRnJhY3Rpb24oMjQ3Njk3OTc5NTA1Mzc3MywgMjI1MTc5OTgxMzY4NTI0OCkKKyAgICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKKyAgICAgID4+PiBGcmFjdGlvbihEZWNpbWFsKCcxLjEnKSkKKyAgICAgIEZyYWN0aW9uKDExLCAxMCkKIAogCiAgICBUaGUgOmNsYXNzOmBGcmFjdGlvbmAgY2xhc3MgaW5oZXJpdHMgZnJvbSB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcwpAQCAtNjYsNiArNzksMTAgQEAKICAgIGFuZCBzaG91bGQgYmUgdHJlYXRlZCBhcyBpbW11dGFibGUuICBJbiBhZGRpdGlvbiwKICAgIDpjbGFzczpgRnJhY3Rpb25gIGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBUaGUgOmNsYXNzOmBGcmFjdGlvbmAgY29uc3RydWN0b3Igbm93IGFjY2VwdHMgOmNsYXNzOmBmbG9hdGAgYW5kCisgICAgICA6Y2xhc3M6YGRlY2ltYWwuRGVjaW1hbGAgaW5zdGFuY2VzLgorCiAKICAgIC4uIG1ldGhvZDo6IGZyb21fZmxvYXQoZmx0KQogCkBAIC03MywxMiArOTAsMTkgQEAKICAgICAgIHZhbHVlIG9mICpmbHQqLCB3aGljaCBtdXN0IGJlIGEgOmNsYXNzOmBmbG9hdGAuIEJld2FyZSB0aGF0CiAgICAgICBgYEZyYWN0aW9uLmZyb21fZmxvYXQoMC4zKWBgIGlzIG5vdCB0aGUgc2FtZSB2YWx1ZSBhcyBgYEZyYWN0aW9uKDMsIDEwKWBgCiAKKyAgICAgIC4uIG5vdGU6OiBGcm9tIFB5dGhvbiAyLjcgb253YXJkcywgeW91IGNhbiBhbHNvIGNvbnN0cnVjdCBhCisgICAgICAgICA6Y2xhc3M6YEZyYWN0aW9uYCBpbnN0YW5jZSBkaXJlY3RseSBmcm9tIGEgOmNsYXNzOmBmbG9hdGAuCisKIAogICAgLi4gbWV0aG9kOjogZnJvbV9kZWNpbWFsKGRlYykKIAogICAgICAgVGhpcyBjbGFzcyBtZXRob2QgY29uc3RydWN0cyBhIDpjbGFzczpgRnJhY3Rpb25gIHJlcHJlc2VudGluZyB0aGUgZXhhY3QKICAgICAgIHZhbHVlIG9mICpkZWMqLCB3aGljaCBtdXN0IGJlIGEgOmNsYXNzOmBkZWNpbWFsLkRlY2ltYWxgLgogCisgICAgICAuLiBub3RlOjogRnJvbSBQeXRob24gMi43IG9ud2FyZHMsIHlvdSBjYW4gYWxzbyBjb25zdHJ1Y3QgYQorICAgICAgICAgOmNsYXNzOmBGcmFjdGlvbmAgaW5zdGFuY2UgZGlyZWN0bHkgZnJvbSBhIDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYAorICAgICAgICAgaW5zdGFuY2UuCisKIAogICAgLi4gbWV0aG9kOjogbGltaXRfZGVub21pbmF0b3IobWF4X2Rlbm9taW5hdG9yPTEwMDAwMDApCiAKQEAgLTkzLDEwICsxMTcsMTIgQEAKICAgICAgIG9yIGZvciByZWNvdmVyaW5nIGEgcmF0aW9uYWwgbnVtYmVyIHRoYXQncyByZXByZXNlbnRlZCBhcyBhIGZsb2F0OgogCiAgICAgICAgICA+Pj4gZnJvbSBtYXRoIGltcG9ydCBwaSwgY29zCi0gICAgICAgICA+Pj4gRnJhY3Rpb24uZnJvbV9mbG9hdChjb3MocGkvMykpCisgICAgICAgICA+Pj4gRnJhY3Rpb24oY29zKHBpLzMpKQogICAgICAgICAgRnJhY3Rpb24oNDUwMzU5OTYyNzM3MDQ5NywgOTAwNzE5OTI1NDc0MDk5MikKLSAgICAgICAgID4+PiBGcmFjdGlvbi5mcm9tX2Zsb2F0KGNvcyhwaS8zKSkubGltaXRfZGVub21pbmF0b3IoKQorICAgICAgICAgPj4+IEZyYWN0aW9uKGNvcyhwaS8zKSkubGltaXRfZGVub21pbmF0b3IoKQogICAgICAgICAgRnJhY3Rpb24oMSwgMikKKyAgICAgICAgID4+PiBGcmFjdGlvbigxLjEpLmxpbWl0X2Rlbm9taW5hdG9yKCkKKyAgICAgICAgIEZyYWN0aW9uKDExLCAxMCkKIAogCiAuLiBmdW5jdGlvbjo6IGdjZChhLCBiKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QKaW5kZXggZjQ4OTQ2OS4uYjZkYjk4MyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdHBsaWIucnN0CkBAIC01MCw2ICs1MCw0MCBAQAogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KIAogCisuLiBjbGFzczo6IEZUUF9UTFMoW2hvc3RbLCB1c2VyWywgcGFzc3dkWywgYWNjdFssIGtleWZpbGVbLCBjZXJ0ZmlsZVssIHRpbWVvdXRdXV1dXV1dKQorCisgICBBIDpjbGFzczpgRlRQYCBzdWJjbGFzcyB3aGljaCBhZGRzIFRMUyBzdXBwb3J0IHRvIEZUUCBhcyBkZXNjcmliZWQgaW4KKyAgIDpyZmM6YDQyMTdgLgorICAgQ29ubmVjdCBhcyB1c3VhbCB0byBwb3J0IDIxIGltcGxpY2l0bHkgc2VjdXJpbmcgdGhlIEZUUCBjb250cm9sIGNvbm5lY3Rpb24KKyAgIGJlZm9yZSBhdXRoZW50aWNhdGluZy4gU2VjdXJpbmcgdGhlIGRhdGEgY29ubmVjdGlvbiByZXF1aXJlcyB0aGUgdXNlciB0bworICAgZXhwbGljaXRseSBhc2sgZm9yIGl0IGJ5IGNhbGxpbmcgdGhlIDptZXRoOmBwcm90X3BgIG1ldGhvZC4KKyAgICprZXlmaWxlKiBhbmQgKmNlcnRmaWxlKiBhcmUgb3B0aW9uYWwgLS0gdGhleSBjYW4gY29udGFpbiBhIFBFTSBmb3JtYXR0ZWQKKyAgIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlIG5hbWUgZm9yIHRoZSBTU0wgY29ubmVjdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKyAgIEhlcmUncyBhIHNhbXBsZSBzZXNzaW9uIHVzaW5nIHRoZSA6Y2xhc3M6YEZUUF9UTFNgIGNsYXNzOgorCisgICA+Pj4gZnJvbSBmdHBsaWIgaW1wb3J0IEZUUF9UTFMKKyAgID4+PiBmdHBzID0gRlRQX1RMUygnZnRwLnB5dGhvbi5vcmcnKQorICAgPj4+IGZ0cHMubG9naW4oKSAgICAgICAgICAgIyBsb2dpbiBhbm9ueW1vdXNseSBiZWZvcmUgc2VjdXJpbmcgY29udHJvbCBjaGFubmVsCisgICA+Pj4gZnRwcy5wcm90X3AoKSAgICAgICAgICAjIHN3aXRjaCB0byBzZWN1cmUgZGF0YSBjb25uZWN0aW9uCisgICA+Pj4gZnRwcy5yZXRybGluZXMoJ0xJU1QnKSAjIGxpc3QgZGlyZWN0b3J5IGNvbnRlbnQgc2VjdXJlbHkKKyAgIHRvdGFsIDkKKyAgIGRyd3hyLXhyLXggICA4IHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCAuCisgICBkcnd4ci14ci14ICAgOCByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgLi4KKyAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCBiaW4KKyAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCBldGMKKyAgIGQtd3hyd3hyLXggICAyIGZ0cCAgICAgIHdoZWVsICAgICAgICAxMDI0IFNlcCAgNSAxMzo0MyBpbmNvbWluZworICAgZHJ3eHIteHIteCAgIDIgcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgTm92IDE3ICAxOTkzIGxpYgorICAgZHJ3eHIteHIteCAgIDYgMTA5NCAgICAgd2hlZWwgICAgICAgIDEwMjQgU2VwIDEzIDE5OjA3IHB1YgorICAgZHJ3eHIteHIteCAgIDMgcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IHVzcgorICAgLXJ3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAzMTIgQXVnICAxICAxOTk0IHdlbGNvbWUubXNnCisgICAnMjI2IFRyYW5zZmVyIGNvbXBsZXRlLicKKyAgID4+PiBmdHBzLnF1aXQoKQorICAgPj4+CisKKwogLi4gZXhjZXB0aW9uOjogZXJyb3JfcmVwbHkKIAogICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIHVuZXhwZWN0ZWQgcmVwbHkgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLgpAQCAtNTcsMTggKzkxLDIxIEBACiAKIC4uIGV4Y2VwdGlvbjo6IGVycm9yX3RlbXAKIAotICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIGVycm9yIGNvZGUgaW4gdGhlIHJhbmdlIDQwMC0tNDk5IGlzIHJlY2VpdmVkLgorICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIGVycm9yIGNvZGUgc2lnbmlmeWluZyBhIHRlbXBvcmFyeSBlcnJvciAocmVzcG9uc2UKKyAgIGNvZGVzIGluIHRoZSByYW5nZSA0MDAtLTQ5OSkgaXMgcmVjZWl2ZWQuCiAKIAogLi4gZXhjZXB0aW9uOjogZXJyb3JfcGVybQogCi0gICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYW4gZXJyb3IgY29kZSBpbiB0aGUgcmFuZ2UgNTAwLS01OTkgaXMgcmVjZWl2ZWQuCisgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYW4gZXJyb3IgY29kZSBzaWduaWZ5aW5nIGEgcGVybWFuZW50IGVycm9yIChyZXNwb25zZQorICAgY29kZXMgaW4gdGhlIHJhbmdlIDUwMC0tNTk5KSBpcyByZWNlaXZlZC4KIAogCiAuLiBleGNlcHRpb246OiBlcnJvcl9wcm90bwogCi0gICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSByZXBseSBpcyByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdAotICAgYmVnaW4gd2l0aCBhIGRpZ2l0IGluIHRoZSByYW5nZSAxLS01LgorICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgcmVwbHkgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIHRoYXQgZG9lcyBub3QgZml0CisgICB0aGUgcmVzcG9uc2Ugc3BlY2lmaWNhdGlvbnMgb2YgdGhlIEZpbGUgVHJhbnNmZXIgUHJvdG9jb2wsIGkuZS4gYmVnaW4gd2l0aCBhCisgICBkaWdpdCBpbiB0aGUgcmFuZ2UgMS0tNS4KIAogCiAuLiBkYXRhOjogYWxsX2Vycm9ycwpAQCAtNzYsNyArMTEzLDcgQEAKICAgIFRoZSBzZXQgb2YgYWxsIGV4Y2VwdGlvbnMgKGFzIGEgdHVwbGUpIHRoYXQgbWV0aG9kcyBvZiA6Y2xhc3M6YEZUUGAKICAgIGluc3RhbmNlcyBtYXkgcmFpc2UgYXMgYSByZXN1bHQgb2YgcHJvYmxlbXMgd2l0aCB0aGUgRlRQIGNvbm5lY3Rpb24gKGFzCiAgICBvcHBvc2VkIHRvIHByb2dyYW1taW5nIGVycm9ycyBtYWRlIGJ5IHRoZSBjYWxsZXIpLiAgVGhpcyBzZXQgaW5jbHVkZXMgdGhlCi0gICBmb3VyIGV4Y2VwdGlvbnMgbGlzdGVkIGJlbG93IGFzIHdlbGwgYXMgOmV4Yzpgc29ja2V0LmVycm9yYCBhbmQKKyAgIGZvdXIgZXhjZXB0aW9ucyBsaXN0ZWQgYWJvdmUgYXMgd2VsbCBhcyA6ZXhjOmBzb2NrZXQuZXJyb3JgIGFuZAogICAgOmV4YzpgSU9FcnJvcmAuCiAKIApAQCAtMTY0LDkgKzIwMSw5IEBACiAKIC4uIG1ldGhvZDo6IEZUUC52b2lkY21kKGNvbW1hbmQpCiAKLSAgIFNlbmQgYSBzaW1wbGUgY29tbWFuZCBzdHJpbmcgdG8gdGhlIHNlcnZlciBhbmQgaGFuZGxlIHRoZSByZXNwb25zZS4gUmV0dXJuCi0gICBub3RoaW5nIGlmIGEgcmVzcG9uc2UgY29kZSBpbiB0aGUgcmFuZ2UgMjAwLS0yOTkgaXMgcmVjZWl2ZWQuIFJhaXNlIGFuIGV4Y2VwdGlvbgotICAgb3RoZXJ3aXNlLgorICAgU2VuZCBhIHNpbXBsZSBjb21tYW5kIHN0cmluZyB0byB0aGUgc2VydmVyIGFuZCBoYW5kbGUgdGhlIHJlc3BvbnNlLiAgUmV0dXJuCisgICBub3RoaW5nIGlmIGEgcmVzcG9uc2UgY29kZSBjb3JyZXNwb25kaW5nIHRvIHN1Y2Nlc3MgKGNvZGVzIGluIHRoZSByYW5nZQorICAgMjAwLS0yOTkpIGlzIHJlY2VpdmVkLiAgUmFpc2UgOmV4YzpgZXJyb3JfcmVwbHlgIG90aGVyd2lzZS4KIAogCiAuLiBtZXRob2Q6OiBGVFAucmV0cmJpbmFyeShjb21tYW5kLCBjYWxsYmFja1ssIG1heGJsb2Nrc2l6ZVssIHJlc3RdXSkKQEAgLTE4Niw5ICsyMjMsMTEgQEAKICAgIFJldHJpZXZlIGEgZmlsZSBvciBkaXJlY3RvcnkgbGlzdGluZyBpbiBBU0NJSSB0cmFuc2ZlciBtb2RlLiAgKmNvbW1hbmQqCiAgICBzaG91bGQgYmUgYW4gYXBwcm9wcmlhdGUgYGBSRVRSYGAgY29tbWFuZCAoc2VlIDptZXRoOmByZXRyYmluYXJ5YCkgb3IgYQogICAgY29tbWFuZCBzdWNoIGFzIGBgTElTVGBgLCBgYE5MU1RgYCBvciBgYE1MU0RgYCAodXN1YWxseSBqdXN0IHRoZSBzdHJpbmcKLSAgIGBgJ0xJU1QnYGApLiAgVGhlICpjYWxsYmFjayogZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoIGxpbmUgd2l0aCBhCi0gICBzdHJpbmcgYXJndW1lbnQgY29udGFpbmluZyB0aGUgbGluZSB3aXRoIHRoZSB0cmFpbGluZyBDUkxGIHN0cmlwcGVkLgotICAgVGhlIGRlZmF1bHQgKmNhbGxiYWNrKiBwcmludHMgdGhlIGxpbmUgdG8gYGBzeXMuc3Rkb3V0YGAuCisgICBgYCdMSVNUJ2BgKS4gIGBgTElTVGBgIHJldHJpZXZlcyBhIGxpc3Qgb2YgZmlsZXMgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRob3NlIGZpbGVzLgorICAgYGBOTFNUYGAgcmV0cmlldmVzIGEgbGlzdCBvZiBmaWxlIG5hbWVzLiAgT24gc29tZSBzZXJ2ZXJzLCBgYE1MU0RgYCByZXRyaWV2ZXMKKyAgIGEgbWFjaGluZSByZWFkYWJsZSBsaXN0IG9mIGZpbGVzIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aG9zZSBmaWxlcy4gIFRoZSAqY2FsbGJhY2sqCisgICBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2ggbGluZSB3aXRoIGEgc3RyaW5nIGFyZ3VtZW50IGNvbnRhaW5pbmcgdGhlIGxpbmUgd2l0aAorICAgdGhlIHRyYWlsaW5nIENSTEYgc3RyaXBwZWQuICBUaGUgZGVmYXVsdCAqY2FsbGJhY2sqIHByaW50cyB0aGUgbGluZSB0byBgYHN5cy5zdGRvdXRgYC4KIAogCiAuLiBtZXRob2Q6OiBGVFAuc2V0X3Bhc3YoYm9vbGVhbikKQEAgLTE5OCwxNCArMjM3LDE1IEBACiAgICBpdCBpcyBvbiBieSBkZWZhdWx0LikKIAogCi0uLiBtZXRob2Q6OiBGVFAuc3RvcmJpbmFyeShjb21tYW5kLCBmaWxlWywgYmxvY2tzaXplLCBjYWxsYmFja10pCisuLiBtZXRob2Q6OiBGVFAuc3RvcmJpbmFyeShjb21tYW5kLCBmaWxlWywgYmxvY2tzaXplLCBjYWxsYmFjaywgcmVzdF0pCiAKICAgIFN0b3JlIGEgZmlsZSBpbiBiaW5hcnkgdHJhbnNmZXIgbW9kZS4gICpjb21tYW5kKiBzaG91bGQgYmUgYW4gYXBwcm9wcmlhdGUKICAgIGBgU1RPUmBgIGNvbW1hbmQ6IGBgIlNUT1IgZmlsZW5hbWUiYGAuICpmaWxlKiBpcyBhbiBvcGVuIGZpbGUgb2JqZWN0IHdoaWNoIGlzCiAgICByZWFkIHVudGlsIEVPRiB1c2luZyBpdHMgOm1ldGg6YHJlYWRgIG1ldGhvZCBpbiBibG9ja3Mgb2Ygc2l6ZSAqYmxvY2tzaXplKiB0bwogICAgcHJvdmlkZSB0aGUgZGF0YSB0byBiZSBzdG9yZWQuICBUaGUgKmJsb2Nrc2l6ZSogYXJndW1lbnQgZGVmYXVsdHMgdG8gODE5Mi4KICAgICpjYWxsYmFjayogaXMgYW4gb3B0aW9uYWwgc2luZ2xlIHBhcmFtZXRlciBjYWxsYWJsZSB0aGF0IGlzIGNhbGxlZAotICAgb24gZWFjaCBibG9jayBvZiBkYXRhIGFmdGVyIGl0IGlzIHNlbnQuCisgICBvbiBlYWNoIGJsb2NrIG9mIGRhdGEgYWZ0ZXIgaXQgaXMgc2VudC4gKnJlc3QqIG1lYW5zIHRoZSBzYW1lIHRoaW5nIGFzIGluCisgICB0aGUgOm1ldGg6YHRyYW5zZmVyY21kYCBtZXRob2QuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4xCiAgICAgICBkZWZhdWx0IGZvciAqYmxvY2tzaXplKiBhZGRlZC4KQEAgLTIxMyw2ICsyNTMsOCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKICAgICAgICpjYWxsYmFjayogcGFyYW1ldGVyIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgKnJlc3QqIHBhcmFtZXRlciBhZGRlZC4KIAogLi4gbWV0aG9kOjogRlRQLnN0b3JsaW5lcyhjb21tYW5kLCBmaWxlWywgY2FsbGJhY2tdKQogCkBAIC0yNTYsMTAgKzI5OCwxMCBAQAogCiAuLiBtZXRob2Q6OiBGVFAubmxzdChhcmd1bWVudFssIC4uLl0pCiAKLSAgIFJldHVybiBhIGxpc3Qgb2YgZmlsZXMgYXMgcmV0dXJuZWQgYnkgdGhlIGBgTkxTVGBgIGNvbW1hbmQuICBUaGUgb3B0aW9uYWwKLSAgICphcmd1bWVudCogaXMgYSBkaXJlY3RvcnkgdG8gbGlzdCAoZGVmYXVsdCBpcyB0aGUgY3VycmVudCBzZXJ2ZXIgZGlyZWN0b3J5KS4KLSAgIE11bHRpcGxlIGFyZ3VtZW50cyBjYW4gYmUgdXNlZCB0byBwYXNzIG5vbi1zdGFuZGFyZCBvcHRpb25zIHRvIHRoZSBgYE5MU1RgYAotICAgY29tbWFuZC4KKyAgIFJldHVybiBhIGxpc3Qgb2YgZmlsZSBuYW1lcyBhcyByZXR1cm5lZCBieSB0aGUgYGBOTFNUYGAgY29tbWFuZC4gIFRoZQorICAgb3B0aW9uYWwgKmFyZ3VtZW50KiBpcyBhIGRpcmVjdG9yeSB0byBsaXN0IChkZWZhdWx0IGlzIHRoZSBjdXJyZW50IHNlcnZlcgorICAgZGlyZWN0b3J5KS4gIE11bHRpcGxlIGFyZ3VtZW50cyBjYW4gYmUgdXNlZCB0byBwYXNzIG5vbi1zdGFuZGFyZCBvcHRpb25zIHRvCisgICB0aGUgYGBOTFNUYGAgY29tbWFuZC4KIAogCiAuLiBtZXRob2Q6OiBGVFAuZGlyKGFyZ3VtZW50WywgLi4uXSkKQEAgLTMyOSwzICszNzEsMjYgQEAKICAgIDptZXRoOmBjbG9zZWAgb3IgOm1ldGg6YHF1aXRgIHlvdSBjYW5ub3QgcmVvcGVuIHRoZSBjb25uZWN0aW9uIGJ5IGlzc3VpbmcKICAgIGFub3RoZXIgOm1ldGg6YGxvZ2luYCBtZXRob2QpLgogCisKK0ZUUF9UTFMgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tCisKKzpjbGFzczpgRlRQX1RMU2AgY2xhc3MgaW5oZXJpdHMgZnJvbSA6Y2xhc3M6YEZUUGAsIGRlZmluaW5nIHRoZXNlIGFkZGl0aW9uYWwgb2JqZWN0czoKKworLi4gYXR0cmlidXRlOjogRlRQX1RMUy5zc2xfdmVyc2lvbgorCisgICBUaGUgU1NMIHZlcnNpb24gdG8gdXNlIChkZWZhdWx0cyB0byAqVExTdjEqKS4KKworLi4gbWV0aG9kOjogRlRQX1RMUy5hdXRoKCkKKworICAgU2V0IHVwIHNlY3VyZSBjb250cm9sIGNvbm5lY3Rpb24gYnkgdXNpbmcgVExTIG9yIFNTTCwgZGVwZW5kaW5nIG9uIHdoYXQgc3BlY2lmaWVkIGluIDptZXRoOmBzc2xfdmVyc2lvbmAgYXR0cmlidXRlLgorCisuLiBtZXRob2Q6OiBGVFBfVExTLnByb3RfcCgpCisKKyAgIFNldCB1cCBzZWN1cmUgZGF0YSBjb25uZWN0aW9uLgorCisuLiBtZXRob2Q6OiBGVFBfVExTLnByb3RfYygpCisKKyAgIFNldCB1cCBjbGVhciB0ZXh0IGRhdGEgY29ubmVjdGlvbi4KKworCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdAppbmRleCBmMjRjNDZkLi40YjYzYzlmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKQEAgLTcsNiArNywyNiBAQAogVGhlIFB5dGhvbiBpbnRlcnByZXRlciBoYXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIGJ1aWx0IGludG8gaXQgdGhhdCBhcmUgYWx3YXlzCiBhdmFpbGFibGUuICBUaGV5IGFyZSBsaXN0ZWQgaGVyZSBpbiBhbHBoYWJldGljYWwgb3JkZXIuCiAKKz09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PQorLi4gICAgICAgICAgICAgICAgICAgLi4gICAgICAgICAgICAgICAgIEJ1aWx0LWluIEZ1bmN0aW9ucyAgLi4gICAgICAgICAgICAgICAgIC4uCis9PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT0KKzpmdW5jOmBhYnNgICAgICAgICAgIDpmdW5jOmBkaXZtb2RgICAgICA6ZnVuYzpgaW5wdXRgICAgICAgIDpmdW5jOmBvcGVuYCAgICAgICA6ZnVuYzpgc3RhdGljbWV0aG9kYAorOmZ1bmM6YGFsbGAgICAgICAgICAgOmZ1bmM6YGVudW1lcmF0ZWAgIDpmdW5jOmBpbnRgICAgICAgICAgOmZ1bmM6YG9yZGAgICAgICAgIDpmdW5jOmBzdHJgCis6ZnVuYzpgYW55YCAgICAgICAgICA6ZnVuYzpgZXZhbGAgICAgICAgOmZ1bmM6YGlzaW5zdGFuY2VgICA6ZnVuYzpgcG93YCAgICAgICAgOmZ1bmM6YHN1bWAKKzpmdW5jOmBiYXNlc3RyaW5nYCAgIDpmdW5jOmBleGVjZmlsZWAgICA6ZnVuYzpgaXNzdWJjbGFzc2AgIDpmdW5jOmBwcmludGAgICAgICA6ZnVuYzpgc3VwZXJgCis6ZnVuYzpgYmluYCAgICAgICAgICA6ZnVuYzpgZmlsZWAgICAgICAgOmZ1bmM6YGl0ZXJgICAgICAgICA6ZnVuYzpgcHJvcGVydHlgICAgOmZ1bmM6YHR1cGxlYAorOmZ1bmM6YGJvb2xgICAgICAgICAgOmZ1bmM6YGZpbHRlcmAgICAgIDpmdW5jOmBsZW5gICAgICAgICAgOmZ1bmM6YHJhbmdlYCAgICAgIDpmdW5jOmB0eXBlYAorOmZ1bmM6YGJ5dGVhcnJheWAgICAgOmZ1bmM6YGZsb2F0YCAgICAgIDpmdW5jOmBsaXN0YCAgICAgICAgOmZ1bmM6YHJhd19pbnB1dGAgIDpmdW5jOmB1bmljaHJgCis6ZnVuYzpgY2FsbGFibGVgICAgICA6ZnVuYzpgZm9ybWF0YCAgICAgOmZ1bmM6YGxvY2Fsc2AgICAgICA6ZnVuYzpgcmVkdWNlYCAgICAgOmZ1bmM6YHVuaWNvZGVgCis6ZnVuYzpgY2hyYCAgICAgICAgICA6ZnVuYzpgZnJvemVuc2V0YCAgOmZ1bmM6YGxvbmdgICAgICAgICA6ZnVuYzpgcmVsb2FkYCAgICAgOmZ1bmM6YHZhcnNgCis6ZnVuYzpgY2xhc3NtZXRob2RgICA6ZnVuYzpgZ2V0YXR0cmAgICAgOmZ1bmM6YG1hcGAgICAgICAgICA6ZnVuYzpgcmVwcmAgICAgICAgOmZ1bmM6YHhyYW5nZWAKKzpmdW5jOmBjbXBgICAgICAgICAgIDpmdW5jOmBnbG9iYWxzYCAgICA6ZnVuYzpgbWF4YCAgICAgICAgIDpmdW5jOmByZXZlcnNlZGAgICA6ZnVuYzpgemlwYAorOmZ1bmM6YGNvbXBpbGVgICAgICAgOmZ1bmM6YGhhc2F0dHJgICAgIDpmdW5jOmBtZW1vcnl2aWV3YCAgOmZ1bmM6YHJvdW5kYCAgICAgIDpmdW5jOmBfX2ltcG9ydF9fYAorOmZ1bmM6YGNvbXBsZXhgICAgICAgOmZ1bmM6YGhhc2hgICAgICAgIDpmdW5jOmBtaW5gICAgICAgICAgOmZ1bmM6YHNldGAgICAgICAgIDpmdW5jOmBhcHBseWAKKzpmdW5jOmBkZWxhdHRyYCAgICAgIDpmdW5jOmBoZWxwYCAgICAgICA6ZnVuYzpgbmV4dGAgICAgICAgIDpmdW5jOmBzZXRhdHRyYCAgICA6ZnVuYzpgYnVmZmVyYAorOmZ1bmM6YGRpY3RgICAgICAgICAgOmZ1bmM6YGhleGAgICAgICAgIDpmdW5jOmBvYmplY3RgICAgICAgOmZ1bmM6YHNsaWNlYCAgICAgIDpmdW5jOmBjb2VyY2VgCis6ZnVuYzpgZGlyYCAgICAgICAgICA6ZnVuYzpgaWRgICAgICAgICAgOmZ1bmM6YG9jdGAgICAgICAgICA6ZnVuYzpgc29ydGVkYCAgICAgOmZ1bmM6YGludGVybmAKKz09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PQogCiAuLiBmdW5jdGlvbjo6IGFicyh4KQogCkBAIC03OCw2ICs5OCwzMiBAQAogICAgICAgSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA6Y29uc3Q6YEZhbHNlYC4KIAogCisuLiBmdW5jdGlvbjo6IGJ5dGVhcnJheShbc291cmNlWywgZW5jb2RpbmdbLCBlcnJvcnNdXV0pCisKKyAgIFJldHVybiBhIG5ldyBhcnJheSBvZiBieXRlcy4gIFRoZSA6Y2xhc3M6YGJ5dGVhcnJheWAgdHlwZSBpcyBhIG11dGFibGUKKyAgIHNlcXVlbmNlIG9mIGludGVnZXJzIGluIHRoZSByYW5nZSAwIDw9IHggPCAyNTYuICBJdCBoYXMgbW9zdCBvZiB0aGUgdXN1YWwKKyAgIG1ldGhvZHMgb2YgbXV0YWJsZSBzZXF1ZW5jZXMsIGRlc2NyaWJlZCBpbiA6cmVmOmB0eXBlc3NlcS1tdXRhYmxlYCwgYXMgd2VsbAorICAgYXMgbW9zdCBtZXRob2RzIHRoYXQgdGhlIDpjbGFzczpgc3RyYCB0eXBlIGhhcywgc2VlIDpyZWY6YHN0cmluZy1tZXRob2RzYC4KKworICAgVGhlIG9wdGlvbmFsICpzb3VyY2UqIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBhcnJheSBpbiBhIGZldworICAgZGlmZmVyZW50IHdheXM6CisKKyAgICogSWYgaXQgaXMgYSAqc3RyaW5nKiwgeW91IG11c3QgYWxzbyBnaXZlIHRoZSAqZW5jb2RpbmcqIChhbmQgb3B0aW9uYWxseSwKKyAgICAgKmVycm9ycyopIHBhcmFtZXRlcnM7IDpmdW5jOmBieXRlYXJyYXlgIHRoZW4gY29udmVydHMgdGhlIHN0cmluZyB0bworICAgICBieXRlcyB1c2luZyA6bWV0aDpgc3RyLmVuY29kZWAuCisKKyAgICogSWYgaXQgaXMgYW4gKmludGVnZXIqLCB0aGUgYXJyYXkgd2lsbCBoYXZlIHRoYXQgc2l6ZSBhbmQgd2lsbCBiZQorICAgICBpbml0aWFsaXplZCB3aXRoIG51bGwgYnl0ZXMuCisKKyAgICogSWYgaXQgaXMgYW4gb2JqZWN0IGNvbmZvcm1pbmcgdG8gdGhlICpidWZmZXIqIGludGVyZmFjZSwgYSByZWFkLW9ubHkgYnVmZmVyCisgICAgIG9mIHRoZSBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGJ5dGVzIGFycmF5LgorCisgICAqIElmIGl0IGlzIGFuICppdGVyYWJsZSosIGl0IG11c3QgYmUgYW4gaXRlcmFibGUgb2YgaW50ZWdlcnMgaW4gdGhlIHJhbmdlCisgICAgIGBgMCA8PSB4IDwgMjU2YGAsIHdoaWNoIGFyZSB1c2VkIGFzIHRoZSBpbml0aWFsIGNvbnRlbnRzIG9mIHRoZSBhcnJheS4KKworICAgV2l0aG91dCBhbiBhcmd1bWVudCwgYW4gYXJyYXkgb2Ygc2l6ZSAwIGlzIGNyZWF0ZWQuCisKKwogLi4gZnVuY3Rpb246OiBjYWxsYWJsZShvYmplY3QpCiAKICAgIFJldHVybiA6Y29uc3Q6YFRydWVgIGlmIHRoZSAqb2JqZWN0KiBhcmd1bWVudCBhcHBlYXJzIGNhbGxhYmxlLApAQCAtMTczLDExICsyMTksMTAgQEAKIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIFdoZW4gY29tcGlsaW5nIGEgc3RyaW5nIHdpdGggbXVsdGktbGluZSBjb2RlLCBsaW5lIGVuZGluZ3MgbXVzdCBiZQotICAgICAgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgbmV3bGluZSBjaGFyYWN0ZXIgKGBgJ1xuJ2BgKSwgYW5kIHRoZSBpbnB1dCBtdXN0Ci0gICAgICBiZSB0ZXJtaW5hdGVkIGJ5IGF0IGxlYXN0IG9uZSBuZXdsaW5lIGNoYXJhY3Rlci4gIElmIGxpbmUgZW5kaW5ncyBhcmUKLSAgICAgIHJlcHJlc2VudGVkIGJ5IGBgJ1xyXG4nYGAsIHVzZSA6bWV0aDpgc3RyLnJlcGxhY2VgIHRvIGNoYW5nZSB0aGVtIGludG8KLSAgICAgIGBgJ1xuJ2BgLgorICAgICAgV2hlbiBjb21waWxpbmcgYSBzdHJpbmcgd2l0aCBtdWx0aS1saW5lIGNvZGUgaW4gYGAnc2luZ2xlJ2BgIG9yCisgICAgICBgYCdldmFsJ2BgIG1vZGUsIGlucHV0IG11c3QgYmUgdGVybWluYXRlZCBieSBhdCBsZWFzdCBvbmUgbmV3bGluZQorICAgICAgY2hhcmFjdGVyLiAgVGhpcyBpcyB0byBmYWNpbGl0YXRlIGRldGVjdGlvbiBvZiBpbmNvbXBsZXRlIGFuZCBjb21wbGV0ZQorICAgICAgc3RhdGVtZW50cyBpbiB0aGUgOm1vZDpgY29kZWAgbW9kdWxlLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuMwogICAgICAgVGhlICpmbGFncyogYW5kICpkb250X2luaGVyaXQqIGFyZ3VtZW50cyB3ZXJlIGFkZGVkLgpAQCAtMTg1LDYgKzIzMCwxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKICAgICAgIFN1cHBvcnQgZm9yIGNvbXBpbGluZyBBU1Qgb2JqZWN0cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEFsbG93ZWQgdXNlIG9mIFdpbmRvd3MgYW5kIE1hYyBuZXdsaW5lcy4gIEFsc28gaW5wdXQgaW4gYGAnZXhlYydgYCBtb2RlCisgICAgICBkb2VzIG5vdCBoYXZlIHRvIGVuZCBpbiBhIG5ld2xpbmUgYW55bW9yZS4KKwogCiAuLiBmdW5jdGlvbjo6IGNvbXBsZXgoW3JlYWxbLCBpbWFnXV0pCiAKQEAgLTM0NCw2ICszOTMsOSBAQAogICAgcmV0dXJucyB0aGUgY3VycmVudCBnbG9iYWwgYW5kIGxvY2FsIGRpY3Rpb25hcnksIHJlc3BlY3RpdmVseSwgd2hpY2ggbWF5IGJlCiAgICB1c2VmdWwgdG8gcGFzcyBhcm91bmQgZm9yIHVzZSBieSA6ZnVuYzpgZXZhbGAgb3IgOmZ1bmM6YGV4ZWNmaWxlYC4KIAorICAgU2VlIDpmdW5jOmBhc3QubGl0ZXJhbF9ldmFsYCBmb3IgYSBmdW5jdGlvbiB0aGF0IGNhbiBzYWZlbHkgZXZhbHVhdGUgc3RyaW5ncworICAgd2l0aCBleHByZXNzaW9ucyBjb250YWluaW5nIG9ubHkgbGl0ZXJhbHMuCisKIAogLi4gZnVuY3Rpb246OiBleGVjZmlsZShmaWxlbmFtZVssIGdsb2JhbHNbLCBsb2NhbHNdXSkKIApAQCAtNDYyLDcgKzUxNCw3IEBACiAKIC4uIGZ1bmN0aW9uOjogZ2V0YXR0cihvYmplY3QsIG5hbWVbLCBkZWZhdWx0XSkKIAotICAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYXR0cmlidXRlZCBvZiAqb2JqZWN0Ki4gICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLgorICAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYXR0cmlidXRlIG9mICpvYmplY3QqLiAgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuCiAgICBJZiB0aGUgc3RyaW5nIGlzIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgb2JqZWN0J3MgYXR0cmlidXRlcywgdGhlIHJlc3VsdCBpcyB0aGUKICAgIHZhbHVlIG9mIHRoYXQgYXR0cmlidXRlLiAgRm9yIGV4YW1wbGUsIGBgZ2V0YXR0cih4LCAnZm9vYmFyJylgYCBpcyBlcXVpdmFsZW50IHRvCiAgICBgYHguZm9vYmFyYGAuICBJZiB0aGUgbmFtZWQgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0LCAqZGVmYXVsdCogaXMgcmV0dXJuZWQgaWYKQEAgLTY4OSw2ICs3NDEsMTMgQEAKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBvcHRpb25hbCAqa2V5KiBhcmd1bWVudC4KIAogCisuLiBmdW5jdGlvbjo6IG1lbW9yeXZpZXcob2JqKQorICAgOm5vaW5kZXg6CisKKyAgIFJldHVybiBhICJtZW1vcnkgdmlldyIgb2JqZWN0IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gYXJndW1lbnQuICBTZWUKKyAgIDpyZWY6YHR5cGVtZW1vcnl2aWV3YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCiAuLiBmdW5jdGlvbjo6IG1pbihpdGVyYWJsZVssIGFyZ3MuLi5dW2tleV0pCiAKICAgIFdpdGggYSBzaW5nbGUgYXJndW1lbnQgKml0ZXJhYmxlKiwgcmV0dXJuIHRoZSBzbWFsbGVzdCBpdGVtIG9mIGEgbm9uLWVtcHR5CkBAIC0xMDg4LDYgKzExNDcsMTQgQEAKICAgIGV4YW1wbGUsIGBgcm91bmQoMC41KWBgIGlzIGBgMS4wYGAgYW5kIGBgcm91bmQoLTAuNSlgYCBpcyBgYC0xLjBgYCkuCiAKIAorICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBiZWhhdmlvciBvZiA6ZnVuYzpgcm91bmRgIGZvciBmbG9hdHMgY2FuIGJlIHN1cnByaXNpbmc6IGZvciBleGFtcGxlLAorICAgICAgYGByb3VuZCgyLjY3NSwgMilgYCBnaXZlcyBgYDIuNjdgYCBpbnN0ZWFkIG9mIHRoZSBleHBlY3RlZCBgYDIuNjhgYC4KKyAgICAgIFRoaXMgaXMgbm90IGEgYnVnOiBpdCdzIGEgcmVzdWx0IG9mIHRoZSBmYWN0IHRoYXQgbW9zdCBkZWNpbWFsIGZyYWN0aW9ucworICAgICAgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhIGZsb2F0LiAgU2VlIDpyZWY6YHR1dC1mcC1pc3N1ZXNgIGZvcgorICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKwogLi4gZnVuY3Rpb246OiBzZXQoW2l0ZXJhYmxlXSkKICAgIDpub2luZGV4OgogCkBAIC0xMTQ4LDkgKzEyMTUsOCBAQAogICAgSW4gZ2VuZXJhbCwgdGhlICprZXkqIGFuZCAqcmV2ZXJzZSogY29udmVyc2lvbiBwcm9jZXNzZXMgYXJlIG11Y2ggZmFzdGVyCiAgICB0aGFuIHNwZWNpZnlpbmcgYW4gZXF1aXZhbGVudCAqY21wKiBmdW5jdGlvbi4gIFRoaXMgaXMgYmVjYXVzZSAqY21wKiBpcwogICAgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBlYWNoIGxpc3QgZWxlbWVudCB3aGlsZSAqa2V5KiBhbmQgKnJldmVyc2UqIHRvdWNoCi0gICBlYWNoIGVsZW1lbnQgb25seSBvbmNlLiAgVG8gY29udmVydCBhbiBvbGQtc3R5bGUgKmNtcCogZnVuY3Rpb24gdG8gYSAqa2V5KgotICAgZnVuY3Rpb24sIHNlZSB0aGUgYENtcFRvS2V5IHJlY2lwZSBpbiB0aGUgQVNQTiBjb29rYm9vawotICAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NjY1My8+YF9cLgorICAgZWFjaCBlbGVtZW50IG9ubHkgb25jZS4gIFVzZSA6ZnVuYzpgZnVuY3Rvb2xzLmNtcF90b19rZXlgIHRvIGNvbnZlcnQgYW4KKyAgIG9sZC1zdHlsZSAqY21wKiBmdW5jdGlvbiB0byBhICprZXkqIGZ1bmN0aW9uLgogCiAgICBGb3Igc29ydGluZyBleGFtcGxlcyBhbmQgYSBicmllZiBzb3J0aW5nIHR1dG9yaWFsLCBzZWUgYFNvcnRpbmcgSG93VG8KICAgIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vSG93VG8vU29ydGluZy8+YF9cLgpAQCAtMTIwNywxMCArMTI3MywxMyBAQAogCiAgICBTdW1zICpzdGFydCogYW5kIHRoZSBpdGVtcyBvZiBhbiAqaXRlcmFibGUqIGZyb20gbGVmdCB0byByaWdodCBhbmQgcmV0dXJucyB0aGUKICAgIHRvdGFsLiAgKnN0YXJ0KiBkZWZhdWx0cyB0byBgYDBgYC4gVGhlICppdGVyYWJsZSoncyBpdGVtcyBhcmUgbm9ybWFsbHkgbnVtYmVycywKLSAgIGFuZCBhcmUgbm90IGFsbG93ZWQgdG8gYmUgc3RyaW5ncy4gIFRoZSBmYXN0LCBjb3JyZWN0IHdheSB0byBjb25jYXRlbmF0ZSBhCi0gICBzZXF1ZW5jZSBvZiBzdHJpbmdzIGlzIGJ5IGNhbGxpbmcgYGAnJy5qb2luKHNlcXVlbmNlKWBgLiBOb3RlIHRoYXQKLSAgIGBgc3VtKHJhbmdlKG4pLCBtKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGByZWR1Y2Uob3BlcmF0b3IuYWRkLCByYW5nZShuKSwgbSlgYAotICAgVG8gYWRkIGZsb2F0aW5nIHBvaW50IHZhbHVlcyB3aXRoIGV4dGVuZGVkIHByZWNpc2lvbiwgc2VlIDpmdW5jOmBtYXRoLmZzdW1gXC4KKyAgIGFuZCB0aGUgc3RhcnQgdmFsdWUgaXMgbm90IGFsbG93ZWQgdG8gYmUgYSBzdHJpbmcuCisKKyAgIEZvciBzb21lIHVzZSBjYXNlcywgdGhlcmUgYXJlIGdvb2QgYWx0ZXJuYXRpdmVzIHRvIDpmdW5jOmBzdW1gLgorICAgVGhlIHByZWZlcnJlZCwgZmFzdCB3YXkgdG8gY29uY2F0ZW5hdGUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGlzIGJ5IGNhbGxpbmcKKyAgIGBgJycuam9pbihzZXF1ZW5jZSlgYC4gIFRvIGFkZCBmbG9hdGluZyBwb2ludCB2YWx1ZXMgd2l0aCBleHRlbmRlZCBwcmVjaXNpb24sCisgICBzZWUgOmZ1bmM6YG1hdGguZnN1bWBcLiAgVG8gY29uY2F0ZW5hdGUgYSBzZXJpZXMgb2YgaXRlcmFibGVzLCBjb25zaWRlciB1c2luZworICAgOmZ1bmM6YGl0ZXJ0b29scy5jaGFpbmAuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMwogCkBAIC0xMzk0LDggKzE0NjMsOCBAQAogICAgICAgcmVzdHJpY3RzIGFsbCBhcmd1bWVudHMgdG8gbmF0aXZlIEMgbG9uZ3MgKCJzaG9ydCIgUHl0aG9uIGludGVnZXJzKSwgYW5kCiAgICAgICBhbHNvIHJlcXVpcmVzIHRoYXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBmaXQgaW4gYSBuYXRpdmUgQyBsb25nLiAgSWYgYQogICAgICAgbGFyZ2VyIHJhbmdlIGlzIG5lZWRlZCwgYW4gYWx0ZXJuYXRlIHZlcnNpb24gY2FuIGJlIGNyYWZ0ZWQgdXNpbmcgdGhlCi0gICAgICA6bW9kOmBpdGVydG9vbHNgIG1vZHVsZTogYGB0YWtld2hpbGUobGFtYmRhIHg6IHg8c3RvcCwgKHN0YXJ0K2kqc3RlcAotICAgICAgZm9yIGkgaW4gY291bnQoKSkpYGAuCisgICAgICA6bW9kOmBpdGVydG9vbHNgIG1vZHVsZTogYGBpc2xpY2UoY291bnQoc3RhcnQsIHN0ZXApLAorICAgICAgKHN0b3Atc3RhcnQrc3RlcC0xKS8vc3RlcClgYC4KIAogCiAuLiBmdW5jdGlvbjo6IHppcChbaXRlcmFibGUsIC4uLl0pCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0IGIvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAppbmRleCBhMDlkM2NmLi43ODdjMDAwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKQEAgLTE1LDggKzE1LDU2IEBACiBvciByZXR1cm4gb3RoZXIgZnVuY3Rpb25zLiBJbiBnZW5lcmFsLCBhbnkgY2FsbGFibGUgb2JqZWN0IGNhbiBiZSB0cmVhdGVkIGFzIGEKIGZ1bmN0aW9uIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBtb2R1bGUuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYGZ1bmN0b29scyBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9mdW5jdG9vbHMucHk/dmlldz1tYXJrdXA+YF8KKwogVGhlIDptb2Q6YGZ1bmN0b29sc2AgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKKy4uICBmdW5jdGlvbjo6IGNtcF90b19rZXkoZnVuYykKKworICAgVHJhbnNmb3JtIGFuIG9sZC1zdHlsZSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIGEga2V5LWZ1bmN0aW9uLiAgVXNlZCB3aXRoCisgICB0b29scyB0aGF0IGFjY2VwdCBrZXkgZnVuY3Rpb25zIChzdWNoIGFzIDpmdW5jOmBzb3J0ZWRgLCA6ZnVuYzpgbWluYCwKKyAgIDpmdW5jOmBtYXhgLCA6ZnVuYzpgaGVhcHEubmxhcmdlc3RgLCA6ZnVuYzpgaGVhcHEubnNtYWxsZXN0YCwKKyAgIDpmdW5jOmBpdGVydG9vbHMuZ3JvdXBieWApLiAgVGhpcyBmdW5jdGlvbiBpcyBwcmltYXJpbHkgdXNlZCBhcyBhIHRyYW5zaXRpb24KKyAgIHRvb2wgZm9yIHByb2dyYW1zIGJlaW5nIGNvbnZlcnRlZCB0byBQeTMueCB3aGVyZSBjb21wYXJpc29uIGZ1bmN0aW9ucyBhcmUgbm8KKyAgIGxvbmdlciBzdXBwb3J0ZWQuCisKKyAgIEEgY29tcGFyZSBmdW5jdGlvbiBpcyBhbnkgY2FsbGFibGUgdGhhdCBhY2NlcHQgdHdvIGFyZ3VtZW50cywgY29tcGFyZXMgdGhlbSwKKyAgIGFuZCByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIGZvciBsZXNzLXRoYW4sIHplcm8gZm9yIGVxdWFsaXR5LCBvciBhIHBvc2l0aXZlCisgICBudW1iZXIgZm9yIGdyZWF0ZXItdGhhbi4gIEEga2V5IGZ1bmN0aW9uIGlzIGEgY2FsbGFibGUgdGhhdCBhY2NlcHRzIG9uZQorICAgYXJndW1lbnQgYW5kIHJldHVybnMgYW5vdGhlciB2YWx1ZSB0aGF0IGluZGljYXRlcyB0aGUgcG9zaXRpb24gaW4gdGhlIGRlc2lyZWQKKyAgIGNvbGxhdGlvbiBzZXF1ZW5jZS4KKworICAgRXhhbXBsZTo6CisKKyAgICAgICBzb3J0ZWQoaXRlcmFibGUsIGtleT1jbXBfdG9fa2V5KGxvY2FsZS5zdHJjb2xsKSkgICMgbG9jYWxlLWF3YXJlIHNvcnQgb3JkZXIKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKy4uIGZ1bmN0aW9uOjogdG90YWxfb3JkZXJpbmcoY2xzKQorCisgICBHaXZlbiBhIGNsYXNzIGRlZmluaW5nIG9uZSBvciBtb3JlIHJpY2ggY29tcGFyaXNvbiBvcmRlcmluZyBtZXRob2RzLCB0aGlzCisgICBjbGFzcyBkZWNvcmF0b3Igc3VwcGxpZXMgdGhlIHJlc3QuICBUaGlzIHNpbXBsaWZpZXMgdGhlIGVmZm9ydCBpbnZvbHZlZAorICAgaW4gc3BlY2lmeWluZyBhbGwgb2YgdGhlIHBvc3NpYmxlIHJpY2ggY29tcGFyaXNvbiBvcGVyYXRpb25zOgorCisgICBUaGUgY2xhc3MgbXVzdCBkZWZpbmUgb25lIG9mIDptZXRoOmBfX2x0X19gLCA6bWV0aDpgX19sZV9fYCwKKyAgIDptZXRoOmBfX2d0X19gLCBvciA6bWV0aDpgX19nZV9fYC4KKyAgIEluIGFkZGl0aW9uLCB0aGUgY2xhc3Mgc2hvdWxkIHN1cHBseSBhbiA6bWV0aDpgX19lcV9fYCBtZXRob2QuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgIEB0b3RhbF9vcmRlcmluZworICAgICAgIGNsYXNzIFN0dWRlbnQ6CisgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAob3RoZXIubGFzdG5hbWUubG93ZXIoKSwgb3RoZXIuZmlyc3RuYW1lLmxvd2VyKCkpKQorICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIHJldHVybiAoKHNlbGYubGFzdG5hbWUubG93ZXIoKSwgc2VsZi5maXJzdG5hbWUubG93ZXIoKSkgPAorICAgICAgICAgICAgICAgICAgICAgICAob3RoZXIubGFzdG5hbWUubG93ZXIoKSwgb3RoZXIuZmlyc3RuYW1lLmxvd2VyKCkpKQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogLi4gZnVuY3Rpb246OiByZWR1Y2UoZnVuY3Rpb24sIGl0ZXJhYmxlWywgaW5pdGlhbGl6ZXJdKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nYy5yc3QgYi9Eb2MvbGlicmFyeS9nYy5yc3QKaW5kZXggNzA3NDc3Ni4uODBhMmQ5MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2djLnJzdApAQCAtMTQwLDYgKzE0MCwzMSBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKIAorLi4gZnVuY3Rpb246OiBpc190cmFja2VkKG9iaikKKworICAgUmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgY3VycmVudGx5IHRyYWNrZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLAorICAgRmFsc2Ugb3RoZXJ3aXNlLiAgQXMgYSBnZW5lcmFsIHJ1bGUsIGluc3RhbmNlcyBvZiBhdG9taWMgdHlwZXMgYXJlbid0CisgICB0cmFja2VkIGFuZCBpbnN0YW5jZXMgb2Ygbm9uLWF0b21pYyB0eXBlcyAoY29udGFpbmVycywgdXNlci1kZWZpbmVkCisgICBvYmplY3RzLi4uKSBhcmUuICBIb3dldmVyLCBzb21lIHR5cGUtc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBjYW4gYmUgcHJlc2VudAorICAgaW4gb3JkZXIgdG8gc3VwcHJlc3MgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGZvb3RwcmludCBvZiBzaW1wbGUgaW5zdGFuY2VzCisgICAoZS5nLiBkaWN0cyBjb250YWluaW5nIG9ubHkgYXRvbWljIGtleXMgYW5kIHZhbHVlcyk6OgorCisgICAgICA+Pj4gZ2MuaXNfdHJhY2tlZCgwKQorICAgICAgRmFsc2UKKyAgICAgID4+PiBnYy5pc190cmFja2VkKCJhIikKKyAgICAgIEZhbHNlCisgICAgICA+Pj4gZ2MuaXNfdHJhY2tlZChbXSkKKyAgICAgIFRydWUKKyAgICAgID4+PiBnYy5pc190cmFja2VkKHt9KQorICAgICAgRmFsc2UKKyAgICAgID4+PiBnYy5pc190cmFja2VkKHsiYSI6IDF9KQorICAgICAgRmFsc2UKKyAgICAgID4+PiBnYy5pc190cmFja2VkKHsiYSI6IFtdfSkKKyAgICAgIFRydWUKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogVGhlIGZvbGxvd2luZyB2YXJpYWJsZSBpcyBwcm92aWRlZCBmb3IgcmVhZC1vbmx5IGFjY2VzcyAoeW91IGNhbiBtdXRhdGUgaXRzCiB2YWx1ZSBidXQgc2hvdWxkIG5vdCByZWJpbmQgaXQpOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nZXRvcHQucnN0IGIvRG9jL2xpYnJhcnkvZ2V0b3B0LnJzdAppbmRleCA5Mjc5NTNjLi40ZDY1Yzc5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nZXRvcHQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2dldG9wdC5yc3QKQEAgLTEsMTEgKzEsMTcgQEAKIAotOm1vZDpgZ2V0b3B0YCAtLS0gUGFyc2VyIGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOm1vZDpgZ2V0b3B0YCAtLS0gQy1zdHlsZSBwYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogZ2V0b3B0CiAgICA6c3lub3BzaXM6IFBvcnRhYmxlIHBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnM7IHN1cHBvcnQgYm90aCBzaG9ydCBhbmQgbG9uZyBvcHRpb24KICAgICAgICAgICAgICAgbmFtZXMuCiAKKy4uIG5vdGU6OgorICAgVGhlIDptb2Q6YGdldG9wdGAgbW9kdWxlIGlzIGEgcGFyc2VyIGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucyB3aG9zZSBBUEkgaXMKKyAgIGRlc2lnbmVkIHRvIGJlIGZhbWlsaWFyIHRvIHVzZXJzIG9mIHRoZSBDIDpjZnVuYzpgZ2V0b3B0YCBmdW5jdGlvbi4gVXNlcnMgd2hvCisgICBhcmUgdW5mYW1pbGlhciB3aXRoIHRoZSBDIDpjZnVuYzpgZ2V0b3B0YCBmdW5jdGlvbiBvciB3aG8gd291bGQgbGlrZSB0byB3cml0ZQorICAgbGVzcyBjb2RlIGFuZCBnZXQgYmV0dGVyIGhlbHAgYW5kIGVycm9yIG1lc3NhZ2VzIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGUKKyAgIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUgaW5zdGVhZC4KIAogVGhpcyBtb2R1bGUgaGVscHMgc2NyaXB0cyB0byBwYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBpbiBgYHN5cy5hcmd2YGAuCiBJdCBzdXBwb3J0cyB0aGUgc2FtZSBjb252ZW50aW9ucyBhcyB0aGUgVW5peCA6Y2Z1bmM6YGdldG9wdGAgZnVuY3Rpb24gKGluY2x1ZGluZwpAQCAtMzUsMTQgKzQxLDE0IEBACiAgICAgICBub24tR05VIFVuaXggc3lzdGVtcyB3b3JrLgogCiAgICAqbG9uZ19vcHRpb25zKiwgaWYgc3BlY2lmaWVkLCBtdXN0IGJlIGEgbGlzdCBvZiBzdHJpbmdzIHdpdGggdGhlIG5hbWVzIG9mIHRoZQotICAgbG9uZyBvcHRpb25zIHdoaWNoIHNob3VsZCBiZSBzdXBwb3J0ZWQuICBUaGUgbGVhZGluZyBgYCctYGBcIGBgLSdgYAorICAgbG9uZyBvcHRpb25zIHdoaWNoIHNob3VsZCBiZSBzdXBwb3J0ZWQuICBUaGUgbGVhZGluZyBgYCctLSdgYAogICAgY2hhcmFjdGVycyBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBvcHRpb24gbmFtZS4gIExvbmcgb3B0aW9ucyB3aGljaAogICAgcmVxdWlyZSBhbiBhcmd1bWVudCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYW4gZXF1YWwgc2lnbiAoYGAnPSdgYCkuICBPcHRpb25hbAogICAgYXJndW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLiAgVG8gYWNjZXB0IG9ubHkgbG9uZyBvcHRpb25zLCAqb3B0aW9ucyogc2hvdWxkCiAgICBiZSBhbiBlbXB0eSBzdHJpbmcuICBMb25nIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZSBjYW4gYmUgcmVjb2duaXplZCBzbwogICAgbG9uZyBhcyB0aGV5IHByb3ZpZGUgYSBwcmVmaXggb2YgdGhlIG9wdGlvbiBuYW1lIHRoYXQgbWF0Y2hlcyBleGFjdGx5IG9uZSBvZgogICAgdGhlIGFjY2VwdGVkIG9wdGlvbnMuICBGb3IgZXhhbXBsZSwgaWYgKmxvbmdfb3B0aW9ucyogaXMgYGBbJ2ZvbycsICdmcm9iJ11gYCwKLSAgIHRoZSBvcHRpb24gOm9wdGlvbjpgLS1mb2Agd2lsbCBtYXRjaCBhcyA6b3B0aW9uOmAtLWZvb2AsIGJ1dCA6b3B0aW9uOmAtLWZgCisgICB0aGUgb3B0aW9uIGBgLS1mb2BgIHdpbGwgbWF0Y2ggYXMgYGAtLWZvb2BgLCBidXQgYGAtLWZgYAogICAgd2lsbCBub3QgbWF0Y2ggdW5pcXVlbHksIHNvIDpleGM6YEdldG9wdEVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAogICAgVGhlIHJldHVybiB2YWx1ZSBjb25zaXN0cyBvZiB0d28gZWxlbWVudHM6IHRoZSBmaXJzdCBpcyBhIGxpc3Qgb2YgYGAob3B0aW9uLApAQCAtNTAsNyArNTYsNyBAQAogICAgb3B0aW9uIGxpc3Qgd2FzIHN0cmlwcGVkICh0aGlzIGlzIGEgdHJhaWxpbmcgc2xpY2Ugb2YgKmFyZ3MqKS4gIEVhY2gKICAgIG9wdGlvbi1hbmQtdmFsdWUgcGFpciByZXR1cm5lZCBoYXMgdGhlIG9wdGlvbiBhcyBpdHMgZmlyc3QgZWxlbWVudCwgcHJlZml4ZWQKICAgIHdpdGggYSBoeXBoZW4gZm9yIHNob3J0IG9wdGlvbnMgKGUuZy4sIGBgJy14J2BgKSBvciB0d28gaHlwaGVucyBmb3IgbG9uZwotICAgb3B0aW9ucyAoZS5nLiwgYGAnLWBgXCBgYC1sb25nLW9wdGlvbidgYCksIGFuZCB0aGUgb3B0aW9uIGFyZ3VtZW50IGFzIGl0cworICAgb3B0aW9ucyAoZS5nLiwgYGAnLS1sb25nLW9wdGlvbidgYCksIGFuZCB0aGUgb3B0aW9uIGFyZ3VtZW50IGFzIGl0cwogICAgc2Vjb25kIGVsZW1lbnQsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgb3B0aW9uIGhhcyBubyBhcmd1bWVudC4gIFRoZQogICAgb3B0aW9ucyBvY2N1ciBpbiB0aGUgbGlzdCBpbiB0aGUgc2FtZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgZm91bmQsIHRodXMKICAgIGFsbG93aW5nIG11bHRpcGxlIG9jY3VycmVuY2VzLiAgTG9uZyBhbmQgc2hvcnQgb3B0aW9ucyBtYXkgYmUgbWl4ZWQuCkBAIC02Myw3ICs2OSw3IEBACiAgICBpbnRlcm1peGVkLiBUaGUgOmZ1bmM6YGdldG9wdGAgZnVuY3Rpb24gc3RvcHMgcHJvY2Vzc2luZyBvcHRpb25zIGFzIHNvb24gYXMgYQogICAgbm9uLW9wdGlvbiBhcmd1bWVudCBpcyBlbmNvdW50ZXJlZC4KIAotICAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgb3B0aW9uIHN0cmluZyBpcyAnKycsIG9yIGlmIHRoZSBlbnZpcm9ubWVudAorICAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgb3B0aW9uIHN0cmluZyBpcyBgYCcrJ2BgLCBvciBpZiB0aGUgZW52aXJvbm1lbnQKICAgIHZhcmlhYmxlIDplbnZ2YXI6YFBPU0lYTFlfQ09SUkVDVGAgaXMgc2V0LCB0aGVuIG9wdGlvbiBwcm9jZXNzaW5nIHN0b3BzIGFzCiAgICBzb29uIGFzIGEgbm9uLW9wdGlvbiBhcmd1bWVudCBpcyBlbmNvdW50ZXJlZC4KIApAQCAtMTQyLDkgKzE0OCwyMSBAQAogICAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICAgICBtYWluKCkKIAorTm90ZSB0aGF0IGFuIGVxdWl2YWxlbnQgY29tbWFuZCBsaW5lIGludGVyZmFjZSBjb3VsZCBiZSBwcm9kdWNlZCB3aXRoIGxlc3MgY29kZQorYW5kIG1vcmUgaW5mb3JtYXRpdmUgaGVscCBhbmQgZXJyb3IgbWVzc2FnZXMgYnkgdXNpbmcgdGhlIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGU6OgorCisgICBpbXBvcnQgYXJncGFyc2UKKworICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vdXRwdXQnKQorICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgZGVzdD0ndmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICAgICAjIC4uLiBkbyBzb21ldGhpbmcgd2l0aCBhcmdzLm91dHB1dCAuLi4KKyAgICAgICAjIC4uLiBkbyBzb21ldGhpbmcgd2l0aCBhcmdzLnZlcmJvc2UgLi4KIAogLi4gc2VlYWxzbzo6CiAKLSAgIE1vZHVsZSA6bW9kOmBvcHRwYXJzZWAKLSAgICAgIE1vcmUgb2JqZWN0LW9yaWVudGVkIGNvbW1hbmQgbGluZSBvcHRpb24gcGFyc2luZy4KKyAgIE1vZHVsZSA6bW9kOmBhcmdwYXJzZWAKKyAgICAgIEFsdGVybmF0aXZlIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kIGFyZ3VtZW50IHBhcnNpbmcgbGlicmFyeS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2xvYi5yc3QgYi9Eb2MvbGlicmFyeS9nbG9iLnJzdAppbmRleCA1ZjI4NDgwLi4xZWY5YTMxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nbG9iLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nbG9iLnJzdApAQCAtMTYsNiArMTYsMTAgQEAKIHN1YnNoZWxsLiAgKEZvciB0aWxkZSBhbmQgc2hlbGwgdmFyaWFibGUgZXhwYW5zaW9uLCB1c2UKIDpmdW5jOmBvcy5wYXRoLmV4cGFuZHVzZXJgIGFuZCA6ZnVuYzpgb3MucGF0aC5leHBhbmR2YXJzYC4pCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYGdsb2IgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL2dsb2IucHk/dmlldz1tYXJrdXA+YF8KIAogLi4gZnVuY3Rpb246OiBnbG9iKHBhdGhuYW1lKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ncnAucnN0IGIvRG9jL2xpYnJhcnkvZ3JwLnJzdAppbmRleCBhNzFjMzA4Li5mMjBhMjEyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ncnAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2dycC5yc3QKQEAgLTMxLDcgKzMxLDkgQEAKIFRoZSBnaWQgaXMgYW4gaW50ZWdlciwgbmFtZSBhbmQgcGFzc3dvcmQgYXJlIHN0cmluZ3MsIGFuZCB0aGUgbWVtYmVyIGxpc3QgaXMgYQogbGlzdCBvZiBzdHJpbmdzLiAoTm90ZSB0aGF0IG1vc3QgdXNlcnMgYXJlIG5vdCBleHBsaWNpdGx5IGxpc3RlZCBhcyBtZW1iZXJzIG9mCiB0aGUgZ3JvdXAgdGhleSBhcmUgaW4gYWNjb3JkaW5nIHRvIHRoZSBwYXNzd29yZCBkYXRhYmFzZS4gIENoZWNrIGJvdGggZGF0YWJhc2VzCi10byBnZXQgY29tcGxldGUgbWVtYmVyc2hpcCBpbmZvcm1hdGlvbi4pCit0byBnZXQgY29tcGxldGUgbWVtYmVyc2hpcCBpbmZvcm1hdGlvbi4gIEFsc28gbm90ZSB0aGF0IGEgYGBncl9uYW1lYGAgdGhhdAorc3RhcnRzIHdpdGggYSBgYCtgYCBvciBgYC1gYCBpcyBsaWtlbHkgdG8gYmUgYSBZUC9OSVMgcmVmZXJlbmNlIGFuZCBtYXkgbm90IGJlCithY2Nlc3NpYmxlIHZpYSA6ZnVuYzpgZ2V0Z3JuYW1gIG9yIDpmdW5jOmBnZXRncmdpZGAuKQogCiBJdCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgaXRlbXM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2d6aXAucnN0IGIvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKaW5kZXggMzQ5MzE2Mi4uMTc4OTZjMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKQEAgLTI0LDcgKzI0LDcgQEAKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGl0ZW1zOgogCiAKLS4uIGNsYXNzOjogR3ppcEZpbGUoW2ZpbGVuYW1lWywgbW9kZVssIGNvbXByZXNzbGV2ZWxbLCBmaWxlb2JqXV1dXSkKKy4uIGNsYXNzOjogR3ppcEZpbGUoW2ZpbGVuYW1lWywgbW9kZVssIGNvbXByZXNzbGV2ZWxbLCBmaWxlb2JqWywgbXRpbWVdXV1dXSkKIAogICAgQ29uc3RydWN0b3IgZm9yIHRoZSA6Y2xhc3M6YEd6aXBGaWxlYCBjbGFzcywgd2hpY2ggc2ltdWxhdGVzIG1vc3Qgb2YgdGhlIG1ldGhvZHMKICAgIG9mIGEgZmlsZSBvYmplY3QsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgOm1ldGg6YHJlYWRpbnRvYCBhbmQKQEAgLTUyLDEzICs1MiwyOSBAQAogICAgbGV2ZWwgb2YgY29tcHJlc3Npb247IGBgMWBgIGlzIGZhc3Rlc3QgYW5kIHByb2R1Y2VzIHRoZSBsZWFzdCBjb21wcmVzc2lvbiwgYW5kCiAgICBgYDlgYCBpcyBzbG93ZXN0IGFuZCBwcm9kdWNlcyB0aGUgbW9zdCBjb21wcmVzc2lvbi4gIFRoZSBkZWZhdWx0IGlzIGBgOWBgLgogCisgICBUaGUgKm10aW1lKiBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBudW1lcmljIHRpbWVzdGFtcCB0byBiZSB3cml0dGVuIHRvCisgICB0aGUgc3RyZWFtIHdoZW4gY29tcHJlc3NpbmcuICBBbGwgOnByb2dyYW06YGd6aXBgIGNvbXByZXNzZWQgc3RyZWFtcyBhcmUKKyAgIHJlcXVpcmVkIHRvIGNvbnRhaW4gYSB0aW1lc3RhbXAuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgY3VycmVudAorICAgdGltZSBpcyB1c2VkLiAgVGhpcyBtb2R1bGUgaWdub3JlcyB0aGUgdGltZXN0YW1wIHdoZW4gZGVjb21wcmVzc2luZzsKKyAgIGhvd2V2ZXIsIHNvbWUgcHJvZ3JhbXMsIHN1Y2ggYXMgOnByb2dyYW06YGd1bnppcGBcICwgbWFrZSB1c2Ugb2YgaXQuCisgICBUaGUgZm9ybWF0IG9mIHRoZSB0aW1lc3RhbXAgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICBgYHRpbWUudGltZSgpYGAgYW5kIG9mIHRoZSBgYHN0X210aW1lYGAgbWVtYmVyIG9mIHRoZSBvYmplY3QgcmV0dXJuZWQKKyAgIGJ5IGBgb3Muc3RhdCgpYGAuCisKICAgIENhbGxpbmcgYSA6Y2xhc3M6YEd6aXBGaWxlYCBvYmplY3QncyA6bWV0aDpgY2xvc2VgIG1ldGhvZCBkb2VzIG5vdCBjbG9zZQogICAgKmZpbGVvYmoqLCBzaW5jZSB5b3UgbWlnaHQgd2lzaCB0byBhcHBlbmQgbW9yZSBtYXRlcmlhbCBhZnRlciB0aGUgY29tcHJlc3NlZAogICAgZGF0YS4gIFRoaXMgYWxzbyBhbGxvd3MgeW91IHRvIHBhc3MgYSA6Y2xhc3M6YFN0cmluZ0lPYCBvYmplY3Qgb3BlbmVkIGZvcgogICAgd3JpdGluZyBhcyAqZmlsZW9iaiosIGFuZCByZXRyaWV2ZSB0aGUgcmVzdWx0aW5nIG1lbW9yeSBidWZmZXIgdXNpbmcgdGhlCiAgICA6Y2xhc3M6YFN0cmluZ0lPYCBvYmplY3QncyA6bWV0aDpgZ2V0dmFsdWVgIG1ldGhvZC4KIAotICAgOmNsYXNzOmBHemlwRmlsZWAgc3VwcG9ydHMgaXRlcmF0aW9uLgorICAgOmNsYXNzOmBHemlwRmlsZWAgc3VwcG9ydHMgaXRlcmF0aW9uIGFuZCB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFN1cHBvcnQgZm9yIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdhcyBhZGRlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFN1cHBvcnQgZm9yIHplcm8tcGFkZGVkIGZpbGVzIHdhcyBhZGRlZC4KKwogCiAuLiBmdW5jdGlvbjo6IG9wZW4oZmlsZW5hbWVbLCBtb2RlWywgY29tcHJlc3NsZXZlbF1dKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9oYXNobGliLnJzdCBiL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0CmluZGV4IGE4ODlhMmYuLjUxYWM5M2IgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0CkBAIC03NCw2ICs3NCwxNSBAQAogICAgPj4+IGguaGV4ZGlnZXN0KCkKICAgICdjYzRhNWNlMWIzZGY0OGFlYzVkMjJkMWYxNmI4OTRhMGI4OTRlY2NjJwogCitUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNvbnN0YW50IGF0dHJpYnV0ZToKKworLi4gZGF0YTo6IGhhc2hsaWIuYWxnb3JpdGhtcworCisgICBBIHR1cGxlIHByb3ZpZGluZyB0aGUgbmFtZXMgb2YgdGhlIGhhc2ggYWxnb3JpdGhtcyBndWFyYW50ZWVkIHRvIGJlCisgICBzdXBwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgcHJvdmlkZWQgYXMgY29uc3RhbnQgYXR0cmlidXRlcyBvZiB0aGUgaGFzaCBvYmplY3RzCiByZXR1cm5lZCBieSB0aGUgY29uc3RydWN0b3JzOgogCkBAIC05NSw2ICsxMDQsMTIgQEAKICAgIGEgc2luZ2xlIGNhbGwgd2l0aCB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIGFyZ3VtZW50czogYGBtLnVwZGF0ZShhKTsKICAgIG0udXBkYXRlKGIpYGAgaXMgZXF1aXZhbGVudCB0byBgYG0udXBkYXRlKGErYilgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKworICAgICAgVGhlIFB5dGhvbiBHSUwgaXMgcmVsZWFzZWQgdG8gYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBydW4gd2hpbGUKKyAgICAgIGhhc2ggdXBkYXRlcyBvbiBkYXRhIGxhcmdlciB0aGFuIDIwNDggYnl0ZXMgaXMgdGFraW5nIHBsYWNlIHdoZW4KKyAgICAgIHVzaW5nIGhhc2ggYWxnb3JpdGhtcyBzdXBwbGllZCBieSBPcGVuU1NMLgorCiAKIC4uIG1ldGhvZDo6IGhhc2guZGlnZXN0KCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaGVhcHEucnN0IGIvRG9jL2xpYnJhcnkvaGVhcHEucnN0CmluZGV4IDlhNDQwNDcuLmE2YjliYTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2hlYXBxLnJzdAorKysgYi9Eb2MvbGlicmFyeS9oZWFwcS5yc3QKQEAgLTYsMTcgKzYsMjQgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEtldmluIE8nQ29ubm9yCiAuLiBzZWN0aW9uYXV0aG9yOjogR3VpZG8gdmFuIFJvc3N1bSA8Z3VpZG9AcHl0aG9uLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBGcmFuw6dvaXMgUGluYXJkCisuLiBzZWN0aW9uYXV0aG9yOjogUmF5bW9uZCBIZXR0aW5nZXIKIAogLi4gdmVyc2lvbmFkZGVkOjogMi4zCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBoZWFwIHF1ZXVlIGFsZ29yaXRobSwgYWxzbyBrbm93bgogYXMgdGhlIHByaW9yaXR5IHF1ZXVlIGFsZ29yaXRobS4KIAotSGVhcHMgYXJlIGFycmF5cyBmb3Igd2hpY2ggYGBoZWFwW2tdIDw9IGhlYXBbMiprKzFdYGAgYW5kIGBgaGVhcFtrXSA8PQotaGVhcFsyKmsrMl1gYCBmb3IgYWxsICprKiwgY291bnRpbmcgZWxlbWVudHMgZnJvbSB6ZXJvLiAgRm9yIHRoZSBzYWtlIG9mCi1jb21wYXJpc29uLCBub24tZXhpc3RpbmcgZWxlbWVudHMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5maW5pdGUuICBUaGUKLWludGVyZXN0aW5nIHByb3BlcnR5IG9mIGEgaGVhcCBpcyB0aGF0IGBgaGVhcFswXWBgIGlzIGFsd2F5cyBpdHMgc21hbGxlc3QKLWVsZW1lbnQuCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBoZWFwcSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9oZWFwcS5weT92aWV3PW1hcmt1cD5gXworCitIZWFwcyBhcmUgYmluYXJ5IHRyZWVzIGZvciB3aGljaCBldmVyeSBwYXJlbnQgbm9kZSBoYXMgYSB2YWx1ZSBsZXNzIHRoYW4gb3IKK2VxdWFsIHRvIGFueSBvZiBpdHMgY2hpbGRyZW4uICBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgYXJyYXlzIGZvciB3aGljaAorYGBoZWFwW2tdIDw9IGhlYXBbMiprKzFdYGAgYW5kIGBgaGVhcFtrXSA8PSBoZWFwWzIqaysyXWBgIGZvciBhbGwgKmsqLCBjb3VudGluZworZWxlbWVudHMgZnJvbSB6ZXJvLiAgRm9yIHRoZSBzYWtlIG9mIGNvbXBhcmlzb24sIG5vbi1leGlzdGluZyBlbGVtZW50cyBhcmUKK2NvbnNpZGVyZWQgdG8gYmUgaW5maW5pdGUuICBUaGUgaW50ZXJlc3RpbmcgcHJvcGVydHkgb2YgYSBoZWFwIGlzIHRoYXQgaXRzCitzbWFsbGVzdCBlbGVtZW50IGlzIGFsd2F5cyB0aGUgcm9vdCwgYGBoZWFwWzBdYGAuCiAKIFRoZSBBUEkgYmVsb3cgZGlmZmVycyBmcm9tIHRleHRib29rIGhlYXAgYWxnb3JpdGhtcyBpbiB0d28gYXNwZWN0czogKGEpIFdlIHVzZQogemVyby1iYXNlZCBpbmRleGluZy4gIFRoaXMgbWFrZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBpbmRleCBmb3IgYSBub2RlCkBAIC02Miw0NSArNjksMTYgQEAKIAogICAgUG9wIGFuZCByZXR1cm4gdGhlIHNtYWxsZXN0IGl0ZW0gZnJvbSB0aGUgKmhlYXAqLCBhbmQgYWxzbyBwdXNoIHRoZSBuZXcgKml0ZW0qLgogICAgVGhlIGhlYXAgc2l6ZSBkb2Vzbid0IGNoYW5nZS4gSWYgdGhlIGhlYXAgaXMgZW1wdHksIDpleGM6YEluZGV4RXJyb3JgIGlzIHJhaXNlZC4KLSAgIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiA6ZnVuYzpgaGVhcHBvcGAgZm9sbG93ZWQgYnkgIDpmdW5jOmBoZWFwcHVzaGAsIGFuZAotICAgY2FuIGJlIG1vcmUgYXBwcm9wcmlhdGUgd2hlbiB1c2luZyBhIGZpeGVkLXNpemUgaGVhcC4gIE5vdGUgdGhhdCB0aGUgdmFsdWUKLSAgIHJldHVybmVkIG1heSBiZSBsYXJnZXIgdGhhbiAqaXRlbSohICBUaGF0IGNvbnN0cmFpbnMgcmVhc29uYWJsZSB1c2VzIG9mIHRoaXMKLSAgIHJvdXRpbmUgdW5sZXNzIHdyaXR0ZW4gYXMgcGFydCBvZiBhIGNvbmRpdGlvbmFsIHJlcGxhY2VtZW50OjoKIAotICAgICAgaWYgaXRlbSA+IGhlYXBbMF06Ci0gICAgICAgICAgaXRlbSA9IGhlYXByZXBsYWNlKGhlYXAsIGl0ZW0pCisgICBUaGlzIG9uZSBzdGVwIG9wZXJhdGlvbiBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGEgOmZ1bmM6YGhlYXBwb3BgIGZvbGxvd2VkIGJ5CisgICA6ZnVuYzpgaGVhcHB1c2hgIGFuZCBjYW4gYmUgbW9yZSBhcHByb3ByaWF0ZSB3aGVuIHVzaW5nIGEgZml4ZWQtc2l6ZSBoZWFwLgorICAgVGhlIHBvcC9wdXNoIGNvbWJpbmF0aW9uIGFsd2F5cyByZXR1cm5zIGFuIGVsZW1lbnQgZnJvbSB0aGUgaGVhcCBhbmQgcmVwbGFjZXMKKyAgIGl0IHdpdGggKml0ZW0qLgogCi1FeGFtcGxlIG9mIHVzZToKLQotICAgPj4+IGZyb20gaGVhcHEgaW1wb3J0IGhlYXBwdXNoLCBoZWFwcG9wCi0gICA+Pj4gaGVhcCA9IFtdCi0gICA+Pj4gZGF0YSA9IFsxLCAzLCA1LCA3LCA5LCAyLCA0LCA2LCA4LCAwXQotICAgPj4+IGZvciBpdGVtIGluIGRhdGE6Ci0gICAuLi4gICAgIGhlYXBwdXNoKGhlYXAsIGl0ZW0pCi0gICAuLi4KLSAgID4+PiBvcmRlcmVkID0gW10KLSAgID4+PiB3aGlsZSBoZWFwOgotICAgLi4uICAgICBvcmRlcmVkLmFwcGVuZChoZWFwcG9wKGhlYXApKQotICAgLi4uCi0gICA+Pj4gcHJpbnQgb3JkZXJlZAotICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCi0gICA+Pj4gZGF0YS5zb3J0KCkKLSAgID4+PiBwcmludCBkYXRhID09IG9yZGVyZWQKLSAgIFRydWUKLQotVXNpbmcgYSBoZWFwIHRvIGluc2VydCBpdGVtcyBhdCB0aGUgY29ycmVjdCBwbGFjZSBpbiBhIHByaW9yaXR5IHF1ZXVlOgotCi0gICA+Pj4gaGVhcCA9IFtdCi0gICA+Pj4gZGF0YSA9IFsoMSwgJ0onKSwgKDQsICdOJyksICgzLCAnSCcpLCAoMiwgJ08nKV0KLSAgID4+PiBmb3IgaXRlbSBpbiBkYXRhOgotICAgLi4uICAgICBoZWFwcHVzaChoZWFwLCBpdGVtKQotICAgLi4uCi0gICA+Pj4gd2hpbGUgaGVhcDoKLSAgIC4uLiAgICAgcHJpbnQgaGVhcHBvcChoZWFwKVsxXQotICAgSgotICAgTwotICAgSAotICAgTgorICAgVGhlIHZhbHVlIHJldHVybmVkIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgKml0ZW0qIGFkZGVkLiAgSWYgdGhhdCBpc24ndAorICAgZGVzaXJlZCwgY29uc2lkZXIgdXNpbmcgOmZ1bmM6YGhlYXBwdXNocG9wYCBpbnN0ZWFkLiAgSXRzIHB1c2gvcG9wCisgICBjb21iaW5hdGlvbiByZXR1cm5zIHRoZSBzbWFsbGVyIG9mIHRoZSB0d28gdmFsdWVzLCBsZWF2aW5nIHRoZSBsYXJnZXIgdmFsdWUKKyAgIG9uIHRoZSBoZWFwLgogCiAKIFRoZSBtb2R1bGUgYWxzbyBvZmZlcnMgdGhyZWUgZ2VuZXJhbCBwdXJwb3NlIGZ1bmN0aW9ucyBiYXNlZCBvbiBoZWFwcy4KQEAgLTE1MSwxMiArMTI5LDEwMCBAQAogZnVuY3Rpb25zLgogCiAKK0Jhc2ljIEV4YW1wbGVzCistLS0tLS0tLS0tLS0tLQorCitBIGBoZWFwc29ydCA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWFwc29ydD5gXyBjYW4gYmUgaW1wbGVtZW50ZWQgYnkKK3B1c2hpbmcgYWxsIHZhbHVlcyBvbnRvIGEgaGVhcCBhbmQgdGhlbiBwb3BwaW5nIG9mZiB0aGUgc21hbGxlc3QgdmFsdWVzIG9uZSBhdCBhCit0aW1lOjoKKworICAgPj4+IGRlZiBoZWFwc29ydChpdGVyYWJsZSk6CisgICAuLi4gICAgICdFcXVpdmFsZW50IHRvIHNvcnRlZChpdGVyYWJsZSknCisgICAuLi4gICAgIGggPSBbXQorICAgLi4uICAgICBmb3IgdmFsdWUgaW4gaXRlcmFibGU6CisgICAuLi4gICAgICAgICBoZWFwcHVzaChoLCB2YWx1ZSkKKyAgIC4uLiAgICAgcmV0dXJuIFtoZWFwcG9wKGgpIGZvciBpIGluIHJhbmdlKGxlbihoKSldCisgICAuLi4KKyAgID4+PiBoZWFwc29ydChbMSwgMywgNSwgNywgOSwgMiwgNCwgNiwgOCwgMF0pCisgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKworSGVhcCBlbGVtZW50cyBjYW4gYmUgdHVwbGVzLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGFzc2lnbmluZyBjb21wYXJpc29uIHZhbHVlcworKHN1Y2ggYXMgdGFzayBwcmlvcml0aWVzKSBhbG9uZ3NpZGUgdGhlIG1haW4gcmVjb3JkIGJlaW5nIHRyYWNrZWQ6OgorCisgICAgPj4+IGggPSBbXQorICAgID4+PiBoZWFwcHVzaChoLCAoNSwgJ3dyaXRlIGNvZGUnKSkKKyAgICA+Pj4gaGVhcHB1c2goaCwgKDcsICdyZWxlYXNlIHByb2R1Y3QnKSkKKyAgICA+Pj4gaGVhcHB1c2goaCwgKDEsICd3cml0ZSBzcGVjJykpCisgICAgPj4+IGhlYXBwdXNoKGgsICgzLCAnY3JlYXRlIHRlc3RzJykpCisgICAgPj4+IGhlYXBwb3AoaCkKKyAgICAoMSwgJ3dyaXRlIHNwZWMnKQorCisKK1ByaW9yaXR5IFF1ZXVlIEltcGxlbWVudGF0aW9uIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGBwcmlvcml0eSBxdWV1ZSA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qcmlvcml0eV9xdWV1ZT5gXyBpcyBjb21tb24gdXNlCitmb3IgYSBoZWFwLCBhbmQgaXQgcHJlc2VudHMgc2V2ZXJhbCBpbXBsZW1lbnRhdGlvbiBjaGFsbGVuZ2VzOgorCisqIFNvcnQgc3RhYmlsaXR5OiAgaG93IGRvIHlvdSBnZXQgdHdvIHRhc2tzIHdpdGggZXF1YWwgcHJpb3JpdGllcyB0byBiZSByZXR1cm5lZAorICBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIG9yaWdpbmFsbHkgYWRkZWQ/CisKKyogSW4gdGhlIGZ1dHVyZSB3aXRoIFB5dGhvbiAzLCB0dXBsZSBjb21wYXJpc29uIGJyZWFrcyBmb3IgKHByaW9yaXR5LCB0YXNrKQorICBwYWlycyBpZiB0aGUgcHJpb3JpdGllcyBhcmUgZXF1YWwgYW5kIHRoZSB0YXNrcyBkbyBub3QgaGF2ZSBhIGRlZmF1bHQKKyAgY29tcGFyaXNvbiBvcmRlci4KKworKiBJZiB0aGUgcHJpb3JpdHkgb2YgYSB0YXNrIGNoYW5nZXMsIGhvdyBkbyB5b3UgbW92ZSBpdCB0byBhIG5ldyBwb3NpdGlvbiBpbgorICB0aGUgaGVhcD8KKworKiBPciBpZiBhIHBlbmRpbmcgdGFzayBuZWVkcyB0byBiZSBkZWxldGVkLCBob3cgZG8geW91IGZpbmQgaXQgYW5kIHJlbW92ZSBpdAorICBmcm9tIHRoZSBxdWV1ZT8KKworQSBzb2x1dGlvbiB0byB0aGUgZmlyc3QgdHdvIGNoYWxsZW5nZXMgaXMgdG8gc3RvcmUgZW50cmllcyBhcyAzLWVsZW1lbnQgbGlzdAoraW5jbHVkaW5nIHRoZSBwcmlvcml0eSwgYW4gZW50cnkgY291bnQsIGFuZCB0aGUgdGFzay4gIFRoZSBlbnRyeSBjb3VudCBzZXJ2ZXMgYXMKK2EgdGllLWJyZWFrZXIgc28gdGhhdCB0d28gdGFza3Mgd2l0aCB0aGUgc2FtZSBwcmlvcml0eSBhcmUgcmV0dXJuZWQgaW4gdGhlIG9yZGVyCit0aGV5IHdlcmUgYWRkZWQuIEFuZCBzaW5jZSBubyB0d28gZW50cnkgY291bnRzIGFyZSB0aGUgc2FtZSwgdGhlIHR1cGxlCitjb21wYXJpc29uIHdpbGwgbmV2ZXIgYXR0ZW1wdCB0byBkaXJlY3RseSBjb21wYXJlIHR3byB0YXNrcy4KKworVGhlIHJlbWFpbmluZyBjaGFsbGVuZ2VzIHJldm9sdmUgYXJvdW5kIGZpbmRpbmcgYSBwZW5kaW5nIHRhc2sgYW5kIG1ha2luZworY2hhbmdlcyB0byBpdHMgcHJpb3JpdHkgb3IgcmVtb3ZpbmcgaXQgZW50aXJlbHkuICBGaW5kaW5nIGEgdGFzayBjYW4gYmUgZG9uZQord2l0aCBhIGRpY3Rpb25hcnkgcG9pbnRpbmcgdG8gYW4gZW50cnkgaW4gdGhlIHF1ZXVlLgorCitSZW1vdmluZyB0aGUgZW50cnkgb3IgY2hhbmdpbmcgaXRzIHByaW9yaXR5IGlzIG1vcmUgZGlmZmljdWx0IGJlY2F1c2UgaXQgd291bGQKK2JyZWFrIHRoZSBoZWFwIHN0cnVjdHVyZSBpbnZhcmlhbnRzLiAgU28sIGEgcG9zc2libGUgc29sdXRpb24gaXMgdG8gbWFyayBhbgorZW50cnkgYXMgaW52YWxpZCBhbmQgb3B0aW9uYWxseSBhZGQgYSBuZXcgZW50cnkgd2l0aCB0aGUgcmV2aXNlZCBwcmlvcml0eTo6CisKKyAgICBwcSA9IFtdICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHByaW9yaXR5IHF1ZXVlIGxpc3QKKyAgICBjb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KDEpICAgICMgdW5pcXVlIHNlcXVlbmNlIGNvdW50CisgICAgdGFza19maW5kZXIgPSB7fSAgICAgICAgICAgICAgICAjIG1hcHBpbmcgb2YgdGFza3MgdG8gZW50cmllcworICAgIElOVkFMSUQgPSAwICAgICAgICAgICAgICAgICAgICAgIyBtYXJrIGFuIGVudHJ5IGFzIGRlbGV0ZWQKKworICAgIGRlZiBhZGRfdGFzayhwcmlvcml0eSwgdGFzaywgY291bnQ9Tm9uZSk6CisgICAgICAgIGlmIGNvdW50IGlzIE5vbmU6CisgICAgICAgICAgICBjb3VudCA9IG5leHQoY291bnRlcikKKyAgICAgICAgZW50cnkgPSBbcHJpb3JpdHksIGNvdW50LCB0YXNrXQorICAgICAgICB0YXNrX2ZpbmRlclt0YXNrXSA9IGVudHJ5CisgICAgICAgIGhlYXBwdXNoKHBxLCBlbnRyeSkKKworICAgIGRlZiBnZXRfdG9wX3ByaW9yaXR5KCk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBwcmlvcml0eSwgY291bnQsIHRhc2sgPSBoZWFwcG9wKHBxKQorICAgICAgICAgICAgZGVsIHRhc2tfZmluZGVyW3Rhc2tdCisgICAgICAgICAgICBpZiBjb3VudCBpcyBub3QgSU5WQUxJRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFzaworCisgICAgZGVmIGRlbGV0ZV90YXNrKHRhc2spOgorICAgICAgICBlbnRyeSA9IHRhc2tfZmluZGVyW3Rhc2tdCisgICAgICAgIGVudHJ5WzFdID0gSU5WQUxJRAorCisgICAgZGVmIHJlcHJpb3JpdGl6ZShwcmlvcml0eSwgdGFzayk6CisgICAgICAgIGVudHJ5ID0gdGFza19maW5kZXJbdGFza10KKyAgICAgICAgYWRkX3Rhc2socHJpb3JpdHksIHRhc2ssIGVudHJ5WzFdKQorICAgICAgICBlbnRyeVsxXSA9IElOVkFMSUQKKworCiBUaGVvcnkKIC0tLS0tLQogCi0oVGhpcyBleHBsYW5hdGlvbiBpcyBkdWUgdG8gRnJhbsOnb2lzIFBpbmFyZC4gIFRoZSBQeXRob24gY29kZSBmb3IgdGhpcyBtb2R1bGUKLXdhcyBjb250cmlidXRlZCBieSBLZXZpbiBPJ0Nvbm5vci4pCi0KIEhlYXBzIGFyZSBhcnJheXMgZm9yIHdoaWNoIGBgYVtrXSA8PSBhWzIqaysxXWBgIGFuZCBgYGFba10gPD0gYVsyKmsrMl1gYCBmb3IgYWxsCiAqayosIGNvdW50aW5nIGVsZW1lbnRzIGZyb20gMC4gIEZvciB0aGUgc2FrZSBvZiBjb21wYXJpc29uLCBub24tZXhpc3RpbmcKIGVsZW1lbnRzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluZmluaXRlLiAgVGhlIGludGVyZXN0aW5nIHByb3BlcnR5IG9mIGEgaGVhcCBpcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaG1hYy5yc3QgYi9Eb2MvbGlicmFyeS9obWFjLnJzdAppbmRleCA4YjNiOTJiLi40ODBkMGE3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9obWFjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9obWFjLnJzdApAQCAtMTksMTAgKzE5LDYgQEAKICAgIGlzIG1hZGUuICpkaWdlc3Rtb2QqIGlzIHRoZSBkaWdlc3QgY29uc3RydWN0b3Igb3IgbW9kdWxlIGZvciB0aGUgSE1BQyBvYmplY3QgdG8KICAgIHVzZS4gSXQgZGVmYXVsdHMgdG8gIHRoZSA6ZnVuYzpgaGFzaGxpYi5tZDVgIGNvbnN0cnVjdG9yLgogCi0gICAuLiBub3RlOjoKLQotICAgICAgVGhlIG1kNSBoYXNoIGhhcyBrbm93biB3ZWFrbmVzc2VzIGJ1dCByZW1haW5zIHRoZSBkZWZhdWx0IGZvciBiYWNrd2FyZHMKLSAgICAgIGNvbXBhdGliaWxpdHkuIENob29zZSBhIGJldHRlciBvbmUgZm9yIHlvdXIgYXBwbGljYXRpb24uCiAKIEFuIEhNQUMgb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0dHBsaWIucnN0IGIvRG9jL2xpYnJhcnkvaHR0cGxpYi5yc3QKaW5kZXggMDY4OWIwZS4uNDM2ODU3YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHR0cGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHR0cGxpYi5yc3QKQEAgLTM0LDcgKzM0LDcgQEAKIFRoZSBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAKLS4uIGNsYXNzOjogSFRUUENvbm5lY3Rpb24oaG9zdFssIHBvcnRbLCBzdHJpY3RbLCB0aW1lb3V0XV1dKQorLi4gY2xhc3M6OiBIVFRQQ29ubmVjdGlvbihob3N0WywgcG9ydFssIHN0cmljdFssIHRpbWVvdXRbLCBzb3VyY2VfYWRkcmVzc11dXV0pCiAKICAgIEFuIDpjbGFzczpgSFRUUENvbm5lY3Rpb25gIGluc3RhbmNlIHJlcHJlc2VudHMgb25lIHRyYW5zYWN0aW9uIHdpdGggYW4gSFRUUAogICAgc2VydmVyLiAgSXQgc2hvdWxkIGJlIGluc3RhbnRpYXRlZCBwYXNzaW5nIGl0IGEgaG9zdCBhbmQgb3B0aW9uYWwgcG9ydApAQCAtNDYsNiArNDYsOCBAQAogICAgc3RhdHVzIGxpbmUuICBJZiB0aGUgb3B0aW9uYWwgKnRpbWVvdXQqIHBhcmFtZXRlciBpcyBnaXZlbiwgYmxvY2tpbmcKICAgIG9wZXJhdGlvbnMgKGxpa2UgY29ubmVjdGlvbiBhdHRlbXB0cykgd2lsbCB0aW1lb3V0IGFmdGVyIHRoYXQgbWFueSBzZWNvbmRzCiAgICAoaWYgaXQgaXMgbm90IGdpdmVuLCB0aGUgZ2xvYmFsIGRlZmF1bHQgdGltZW91dCBzZXR0aW5nIGlzIHVzZWQpLgorICAgVGhlIG9wdGlvbmFsICpzb3VyY2VfYWRkcmVzcyogcGFyYW1ldGVyIG1heSBiZSBhIHR1cGxlIG9mIGEgKGhvc3QsIHBvcnQpCisgICB0byB1c2UgYXMgdGhlIHNvdXJjZSBhZGRyZXNzIHRoZSBIVFRQIGNvbm5lY3Rpb24gaXMgbWFkZSBmcm9tLgogCiAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjYWxscyBhbGwgY3JlYXRlIGluc3RhbmNlcyB0aGF0IGNvbm5lY3QgdG8gdGhlIHNlcnZlcgogICAgYXQgdGhlIHNhbWUgaG9zdCBhbmQgcG9ydDo6CkBAIC02MCwyMyArNjIsMjggQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgKnNvdXJjZV9hZGRyZXNzKiB3YXMgYWRkZWQuCiAKLS4uIGNsYXNzOjogSFRUUFNDb25uZWN0aW9uKGhvc3RbLCBwb3J0Wywga2V5X2ZpbGVbLCBjZXJ0X2ZpbGVbLCBzdHJpY3RbLCB0aW1lb3V0XV1dXV0pCisKKy4uIGNsYXNzOjogSFRUUFNDb25uZWN0aW9uKGhvc3RbLCBwb3J0Wywga2V5X2ZpbGVbLCBjZXJ0X2ZpbGVbLCBzdHJpY3RbLCB0aW1lb3V0Wywgc291cmNlX2FkZHJlc3NdXV1dXV0pCiAKICAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBIVFRQQ29ubmVjdGlvbmAgdGhhdCB1c2VzIFNTTCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoCiAgICBzZWN1cmUgc2VydmVycy4gIERlZmF1bHQgcG9ydCBpcyBgYDQ0M2BgLiAqa2V5X2ZpbGUqIGlzIHRoZSBuYW1lIG9mIGEgUEVNCiAgICBmb3JtYXR0ZWQgZmlsZSB0aGF0IGNvbnRhaW5zIHlvdXIgcHJpdmF0ZSBrZXkuICpjZXJ0X2ZpbGUqIGlzIGEgUEVNIGZvcm1hdHRlZAogICAgY2VydGlmaWNhdGUgY2hhaW4gZmlsZS4KIAotICAgLi4gbm90ZTo6Ci0KLSAgICAgIFRoaXMgZG9lcyBub3QgZG8gYW55IGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbi4KKyAgIC4uIHdhcm5pbmc6OgorICAgICAgVGhpcyBkb2VzIG5vdCBkbyBhbnkgdmVyaWZpY2F0aW9uIG9mIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4wCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgKnNvdXJjZV9hZGRyZXNzKiB3YXMgYWRkZWQuCisKIAogLi4gY2xhc3M6OiBIVFRQUmVzcG9uc2Uoc29ja1ssIGRlYnVnbGV2ZWw9MF1bLCBzdHJpY3Q9MF0pCiAKQEAgLTQzNiw2ICs0NDMsMTcgQEAKICAgIGRlYnVnIGxldmVsIGlzIGBgMGBgLCBtZWFuaW5nIG5vIGRlYnVnZ2luZyBvdXRwdXQgaXMgcHJpbnRlZC4KIAogCisuLiBtZXRob2Q6OiBIVFRQQ29ubmVjdGlvbi5zZXRfdHVubmVsKGhvc3QscG9ydD1Ob25lLCBoZWFkZXJzPU5vbmUpCisKKyAgIFNldCB0aGUgaG9zdCBhbmQgdGhlIHBvcnQgZm9yIEhUVFAgQ29ubmVjdCBUdW5uZWxsaW5nLiBOb3JtYWxseSB1c2VkIHdoZW4KKyAgIGl0IGlzIHJlcXVpcmVkIHRvIGRvIEhUVFBTIENvbmVjdGlvbiB0aHJvdWdoIGEgcHJveHkgc2VydmVyLgorCisgICBUaGUgaGVhZGVycyBhcmd1bWVudCBzaG91bGQgYmUgYSBtYXBwaW5nIG9mIGV4dHJhIEhUVFAgaGVhZGVycyB0byB0byBzZW50CisgICB3aXRoIHRoZSBDT05ORUNUIHJlcXVlc3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIC4uIG1ldGhvZDo6IEhUVFBDb25uZWN0aW9uLmNvbm5lY3QoKQogCiAgICBDb25uZWN0IHRvIHRoZSBzZXJ2ZXIgc3BlY2lmaWVkIHdoZW4gdGhlIG9iamVjdCB3YXMgY3JlYXRlZC4KQEAgLTUwNyw2ICs1MjUsOSBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjQKIAorLi4gbWV0aG9kOjogSFRUUFJlc3BvbnNlLmZpbGVubygpCisKKyAgIFJldHVybnMgdGhlIGBgZmlsZW5vYGAgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgogCiAuLiBhdHRyaWJ1dGU6OiBIVFRQUmVzcG9uc2UubXNnCiAKQEAgLTU0OSw5ICs1NzAsOCBAQAogICAgPj4+IGRhdGEyID0gcjIucmVhZCgpCiAgICA+Pj4gY29ubi5jbG9zZSgpCiAKLUhlcmUgaXMgYW4gZXhhbXBsZSBzZXNzaW9uIHRoYXQgdXNlcyBgYEhFQURgYCBtZXRob2QuIE5vdGUgdGhhdCBgYEhFQURgYCBtZXRob2QKLW5ldmVyIHJldHVybnMgYW55IGRhdGEuIDo6Ci0KK0hlcmUgaXMgYW4gZXhhbXBsZSBzZXNzaW9uIHRoYXQgdXNlcyB0aGUgYGBIRUFEYGAgbWV0aG9kLiAgTm90ZSB0aGF0IHRoZQorYGBIRUFEYGAgbWV0aG9kIG5ldmVyIHJldHVybnMgYW55IGRhdGEuIDo6CiAKICAgID4+PiBpbXBvcnQgaHR0cGxpYgogICAgPj4+IGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCJ3d3cucHl0aG9uLm9yZyIpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pZGxlLnJzdCBiL0RvYy9saWJyYXJ5L2lkbGUucnN0CmluZGV4IDFiNzhmYjkuLjZiZDE4OTggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2lkbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lkbGUucnN0CkBAIC0yODYsMTMgKzI4NiwxMyBAQAogCiBJZiB0aGVyZSBhcmUgYXJndW1lbnRzOgogCi0jLiBJZiA6b3B0aW9uOmAtZWAgaXMgdXNlZCwgYXJndW1lbnRzIGFyZSBmaWxlcyBvcGVuZWQgZm9yIGVkaXRpbmcgYW5kCisjLiBJZiBgYC1lYGAgaXMgdXNlZCwgYXJndW1lbnRzIGFyZSBmaWxlcyBvcGVuZWQgZm9yIGVkaXRpbmcgYW5kCiAgICBgYHN5cy5hcmd2YGAgcmVmbGVjdHMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gSURMRSBpdHNlbGYuCiAKLSMuIE90aGVyd2lzZSwgaWYgOm9wdGlvbjpgLWNgIGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgorIy4gT3RoZXJ3aXNlLCBpZiBgYC1jYGAgaXMgdXNlZCwgYWxsIGFyZ3VtZW50cyBhcmUgcGxhY2VkIGluCiAgICBgYHN5cy5hcmd2WzE6Li4uXWBgLCB3aXRoIGBgc3lzLmFyZ3ZbMF1gYCBzZXQgdG8gYGAnLWMnYGAuCiAKLSMuIE90aGVyd2lzZSwgaWYgbmVpdGhlciA6b3B0aW9uOmAtZWAgbm9yIDpvcHRpb246YC1jYCBpcyB1c2VkLCB0aGUgZmlyc3QKKyMuIE90aGVyd2lzZSwgaWYgbmVpdGhlciBgYC1lYGAgbm9yIGBgLWNgYCBpcyB1c2VkLCB0aGUgZmlyc3QKICAgIGFyZ3VtZW50IGlzIGEgc2NyaXB0IHdoaWNoIGlzIGV4ZWN1dGVkIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgaW4KICAgIGBgc3lzLmFyZ3ZbMTouLi5dYGAgIGFuZCBgYHN5cy5hcmd2WzBdYGAgc2V0IHRvIHRoZSBzY3JpcHQgbmFtZS4gIElmIHRoZSBzY3JpcHQKICAgIG5hbWUgaXMgJy0nLCBubyBzY3JpcHQgaXMgZXhlY3V0ZWQgYnV0IGFuIGludGVyYWN0aXZlIFB5dGhvbiBzZXNzaW9uIGlzIHN0YXJ0ZWQ7CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdCBiL0RvYy9saWJyYXJ5L2ltYXBsaWIucnN0CmluZGV4IGUxOGQ3ZDUuLmZkMDkwNDEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltYXBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ltYXBsaWIucnN0CkBAIC04NCw5ICs4NCw5IEBACiAKIC4uIGZ1bmN0aW9uOjogSW50ZXJuYWxkYXRlMnR1cGxlKGRhdGVzdHIpCiAKLSAgIENvbnZlcnRzIGFuIElNQVA0IElOVEVSTkFMREFURSBzdHJpbmcgdG8gQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUuIFJldHVybnMgYQotICAgOm1vZDpgdGltZWAgbW9kdWxlIHR1cGxlLgotCisgICBQYXJzZSBhbiBJTUFQNCBgYElOVEVSTkFMREFURWBgIHN0cmluZyBhbmQgcmV0dXJuIGNvcnJlc3BvbmRpbmcgbG9jYWwKKyAgIHRpbWUuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgOmNsYXNzOmB0aW1lLnN0cnVjdF90aW1lYCBpbnN0YW5jZSBvcgorICAgTm9uZSBpZiB0aGUgc3RyaW5nIGhhcyB3cm9uZyBmb3JtYXQuCiAKIC4uIGZ1bmN0aW9uOjogSW50MkFQKG51bSkKIApAQCAtMTAxLDkgKzEwMSwxMyBAQAogCiAuLiBmdW5jdGlvbjo6IFRpbWUySW50ZXJuYWxkYXRlKGRhdGVfdGltZSkKIAotICAgQ29udmVydHMgYSA6bW9kOmB0aW1lYCBtb2R1bGUgdHVwbGUgdG8gYW4gSU1BUDQgYGBJTlRFUk5BTERBVEVgYCByZXByZXNlbnRhdGlvbi4KLSAgIFJldHVybnMgYSBzdHJpbmcgaW4gdGhlIGZvcm06IGBgIkRELU1tbS1ZWVlZIEhIOk1NOlNTICtISE1NImBgIChpbmNsdWRpbmcKLSAgIGRvdWJsZS1xdW90ZXMpLgorICAgQ29udmVydCAqZGF0ZV90aW1lKiB0byBhbiBJTUFQNCBgYElOVEVSTkFMREFURWBgIHJlcHJlc2VudGF0aW9uLiAgVGhlCisgICByZXR1cm4gdmFsdWUgaXMgYSBzdHJpbmcgaW4gdGhlIGZvcm06IGBgIkRELU1tbS1ZWVlZIEhIOk1NOlNTCisgICArSEhNTSJgYCAoaW5jbHVkaW5nIGRvdWJsZS1xdW90ZXMpLiAgVGhlICpkYXRlX3RpbWUqIGFyZ3VtZW50IGNhbiBiZSBhCisgICBudW1iZXIgKGludCBvciBmbG9hdCkgcmVwcmVzZW5pbmcgc2Vjb25kcyBzaW5jZSBlcG9jaCAoYXMgcmV0dXJuZWQKKyAgIGJ5IDpmdW5jOmB0aW1lLnRpbWVgKSwgYSA5LXR1cGxlIHJlcHJlc2VudGluZyBsb2NhbCB0aW1lIChhcyByZXR1cm5lZCBieQorICAgOmZ1bmM6YHRpbWUubG9jYWx0aW1lYCksIG9yIGEgZG91YmxlLXF1b3RlZCBzdHJpbmcuICBJbiB0aGUgbGFzdCBjYXNlLCBpdAorICAgaXMgYXNzdW1lZCB0byBhbHJlYWR5IGJlIGluIHRoZSBjb3JyZWN0IGZvcm1hdC4KIAogTm90ZSB0aGF0IElNQVA0IG1lc3NhZ2UgbnVtYmVycyBjaGFuZ2UgYXMgdGhlIG1haWxib3ggY2hhbmdlczsgaW4gcGFydGljdWxhciwKIGFmdGVyIGFuIGBgRVhQVU5HRWBgIGNvbW1hbmQgcGVyZm9ybXMgZGVsZXRpb25zIHRoZSByZW1haW5pbmcgbWVzc2FnZXMgYXJlCkBAIC0zMDMsOSArMzA3LDEwIEBACiAKIC4uIG1ldGhvZDo6IElNQVA0Lm9wZW4oaG9zdCwgcG9ydCkKIAotICAgT3BlbnMgc29ja2V0IHRvICpwb3J0KiBhdCAqaG9zdCouIFRoZSBjb25uZWN0aW9uIG9iamVjdHMgZXN0YWJsaXNoZWQgYnkgdGhpcworICAgT3BlbnMgc29ja2V0IHRvICpwb3J0KiBhdCAqaG9zdCouICBUaGlzIG1ldGhvZCBpcyBpbXBsaWNpdGx5IGNhbGxlZCBieQorICAgdGhlIDpjbGFzczpgSU1BUDRgIGNvbnN0cnVjdG9yLiAgVGhlIGNvbm5lY3Rpb24gb2JqZWN0cyBlc3RhYmxpc2hlZCBieSB0aGlzCiAgICBtZXRob2Qgd2lsbCBiZSB1c2VkIGluIHRoZSBgYHJlYWRgYCwgYGByZWFkbGluZWBgLCBgYHNlbmRgYCwgYW5kIGBgc2h1dGRvd25gYAotICAgbWV0aG9kcy4gWW91IG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZC4KKyAgIG1ldGhvZHMuICBZb3UgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kLgogCiAKIC4uIG1ldGhvZDo6IElNQVA0LnBhcnRpYWwobWVzc2FnZV9udW0sIG1lc3NhZ2VfcGFydCwgc3RhcnQsIGxlbmd0aCkKQEAgLTQwMSw3ICs0MDYsOCBAQAogCiAuLiBtZXRob2Q6OiBJTUFQNC5zaHV0ZG93bigpCiAKLSAgIENsb3NlIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgaW4gYGBvcGVuYGAuIFlvdSBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCisgICBDbG9zZSBjb25uZWN0aW9uIGVzdGFibGlzaGVkIGluIGBgb3BlbmBgLiAgVGhpcyBtZXRob2QgaXMgaW1wbGljaXRseQorICAgY2FsbGVkIGJ5IDptZXRoOmBJTUFQNC5sb2dvdXRgLiAgWW91IG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZC4KIAogCiAuLiBtZXRob2Q6OiBJTUFQNC5zb2NrZXQoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1wLnJzdCBiL0RvYy9saWJyYXJ5L2ltcC5yc3QKaW5kZXggY2Y0NjU1Yi4uNjA3ZGQxNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW1wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbXAucnN0CkBAIC0xMTYsOCArMTE2LDcgQEAKIC4uIGZ1bmN0aW9uOjogYWNxdWlyZV9sb2NrKCkKIAogICAgQWNxdWlyZSB0aGUgaW50ZXJwcmV0ZXIncyBpbXBvcnQgbG9jayBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLiAgVGhpcyBsb2NrIHNob3VsZAotICAgYmUgdXNlZCBieSBpbXBvcnQgaG9va3MgdG8gZW5zdXJlIHRocmVhZC1zYWZldHkgd2hlbiBpbXBvcnRpbmcgbW9kdWxlcy4gT24KLSAgIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorICAgYmUgdXNlZCBieSBpbXBvcnQgaG9va3MgdG8gZW5zdXJlIHRocmVhZC1zYWZldHkgd2hlbiBpbXBvcnRpbmcgbW9kdWxlcy4KIAogICAgT25jZSBhIHRocmVhZCBoYXMgYWNxdWlyZWQgdGhlIGltcG9ydCBsb2NrLCB0aGUgc2FtZSB0aHJlYWQgbWF5IGFjcXVpcmUgaXQKICAgIGFnYWluIHdpdGhvdXQgYmxvY2tpbmc7IHRoZSB0aHJlYWQgbXVzdCByZWxlYXNlIGl0IG9uY2UgZm9yIGVhY2ggdGltZSBpdCBoYXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MzA3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CkBAIC0wLDAgKzEsMjcgQEAKKzptb2Q6YGltcG9ydGxpYmAgLS0gQ29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIDpmdW5jOmBfX2ltcG9ydF9fYAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGltcG9ydGxpYgorICAgOnN5bm9wc2lzOiBDb252ZW5pZW5jZSB3cmFwcGVycyBmb3IgX19pbXBvcnRfXworCisuLiBtb2R1bGVhdXRob3I6OiBCcmV0dCBDYW5ub24gPGJyZXR0QHB5dGhvbi5vcmc+CisuLiBzZWN0aW9uYXV0aG9yOjogQnJldHQgQ2Fubm9uIDxicmV0dEBweXRob24ub3JnPgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworVGhpcyBtb2R1bGUgaXMgYSBtaW5vciBzdWJzZXQgb2Ygd2hhdCBpcyBhdmFpbGFibGUgaW4gdGhlIG1vcmUgZnVsbC1mZWF0dXJlZAorcGFja2FnZSBvZiB0aGUgc2FtZSBuYW1lIGZyb20gUHl0aG9uIDMuMSB0aGF0IHByb3ZpZGVzIGEgY29tcGxldGUKK2ltcGxlbWVudGF0aW9uIG9mIDprZXl3b3JkOmBpbXBvcnRgLiBXaGF0IGlzIGhlcmUgaGFzIGJlZW4gcHJvdmlkZWQgdG8KK2hlbHAgZWFzZSBpbiB0cmFuc2l0aW9uaW5nIGZyb20gMi43IHRvIDMuMS4KKworCisuLiBmdW5jdGlvbjo6IGltcG9ydF9tb2R1bGUobmFtZSwgcGFja2FnZT1Ob25lKQorCisgICAgSW1wb3J0IGEgbW9kdWxlLiBUaGUgKm5hbWUqIGFyZ3VtZW50IHNwZWNpZmllcyB3aGF0IG1vZHVsZSB0bworICAgIGltcG9ydCBpbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSB0ZXJtcworICAgIChlLmcuIGVpdGhlciBgYHBrZy5tb2RgYCBvciBgYC4ubW9kYGApLiBJZiB0aGUgbmFtZSBpcworICAgIHNwZWNpZmllZCBpbiByZWxhdGl2ZSB0ZXJtcywgdGhlbiB0aGUgKnBhY2thZ2UqIGFyZ3VtZW50IG11c3QgYmUKKyAgICBzcGVjaWZpZWQgdG8gdGhlIHBhY2thZ2Ugd2hpY2ggaXMgdG8gYWN0IGFzIHRoZSBhbmNob3IgZm9yIHJlc29sdmluZyB0aGUKKyAgICBwYWNrYWdlIG5hbWUgKGUuZy4gYGBpbXBvcnRfbW9kdWxlKCcuLm1vZCcsICdwa2cuc3VicGtnJylgYCB3aWxsIGltcG9ydAorICAgIGBgcGtnLm1vZGBgKS4gIFRoZSBzcGVjaWZpZWQgbW9kdWxlIHdpbGwgYmUgaW5zZXJ0ZWQgaW50bworICAgIDpkYXRhOmBzeXMubW9kdWxlc2AgYW5kIHJldHVybmVkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdAppbmRleCAyOWRjNmFlLi44NTBmZjA4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdApAQCAtMjM0LDE0ICsyMzQsMTQgQEAKIAogICAgUmV0dXJuIGEgdHVwbGUgb2YgdmFsdWVzIHRoYXQgZGVzY3JpYmUgaG93IFB5dGhvbiB3aWxsIGludGVycHJldCB0aGUgZmlsZQogICAgaWRlbnRpZmllZCBieSAqcGF0aCogaWYgaXQgaXMgYSBtb2R1bGUsIG9yIGBgTm9uZWBgIGlmIGl0IHdvdWxkIG5vdCBiZQotICAgaWRlbnRpZmllZCBhcyBhIG1vZHVsZS4gIFRoZSByZXR1cm4gdHVwbGUgaXMgYGAobmFtZSwgc3VmZml4LCBtb2RlLCBtdHlwZSlgYCwKLSAgIHdoZXJlICpuYW1lKiBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdpdGhvdXQgdGhlIG5hbWUgb2YgYW55IGVuY2xvc2luZwotICAgcGFja2FnZSwgKnN1ZmZpeCogaXMgdGhlIHRyYWlsaW5nIHBhcnQgb2YgdGhlIGZpbGUgbmFtZSAod2hpY2ggbWF5IG5vdCBiZSBhCi0gICBkb3QtZGVsaW1pdGVkIGV4dGVuc2lvbiksICptb2RlKiBpcyB0aGUgOmZ1bmM6YG9wZW5gIG1vZGUgdGhhdCB3b3VsZCBiZSB1c2VkCi0gICAoYGAncidgYCBvciBgYCdyYidgYCksIGFuZCAqbXR5cGUqIGlzIGFuIGludGVnZXIgZ2l2aW5nIHRoZSB0eXBlIG9mIHRoZQotICAgbW9kdWxlLiAgKm10eXBlKiB3aWxsIGhhdmUgYSB2YWx1ZSB3aGljaCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIGNvbnN0YW50cwotICAgZGVmaW5lZCBpbiB0aGUgOm1vZDpgaW1wYCBtb2R1bGU7IHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBtb2R1bGUgZm9yCi0gICBtb3JlIGluZm9ybWF0aW9uIG9uIG1vZHVsZSB0eXBlcy4KKyAgIGlkZW50aWZpZWQgYXMgYSBtb2R1bGUuICBUaGUgcmV0dXJuIHR1cGxlIGlzIGBgKG5hbWUsIHN1ZmZpeCwgbW9kZSwKKyAgIG1vZHVsZV90eXBlKWBgLCB3aGVyZSAqbmFtZSogaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB3aXRob3V0IHRoZSBuYW1lIG9mCisgICBhbnkgZW5jbG9zaW5nIHBhY2thZ2UsICpzdWZmaXgqIGlzIHRoZSB0cmFpbGluZyBwYXJ0IG9mIHRoZSBmaWxlIG5hbWUgKHdoaWNoCisgICBtYXkgbm90IGJlIGEgZG90LWRlbGltaXRlZCBleHRlbnNpb24pLCAqbW9kZSogaXMgdGhlIDpmdW5jOmBvcGVuYCBtb2RlIHRoYXQKKyAgIHdvdWxkIGJlIHVzZWQgKGBgJ3InYGAgb3IgYGAncmInYGApLCBhbmQgKm1vZHVsZV90eXBlKiBpcyBhbiBpbnRlZ2VyIGdpdmluZworICAgdGhlIHR5cGUgb2YgdGhlIG1vZHVsZS4gICptb2R1bGVfdHlwZSogd2lsbCBoYXZlIGEgdmFsdWUgd2hpY2ggY2FuIGJlCisgICBjb21wYXJlZCB0byB0aGUgY29uc3RhbnRzIGRlZmluZWQgaW4gdGhlIDptb2Q6YGltcGAgbW9kdWxlOyBzZWUgdGhlCisgICBkb2N1bWVudGF0aW9uIGZvciB0aGF0IG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBtb2R1bGUgdHlwZXMuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CiAgICAgICBSZXR1cm5zIGEgOnRlcm06YG5hbWVkIHR1cGxlYCBgYE1vZHVsZUluZm8obmFtZSwgc3VmZml4LCBtb2RlLApAQCAtMjYzLDE3ICsyNjMsMjAgQEAKIAogLi4gZnVuY3Rpb246OiBpc2NsYXNzKG9iamVjdCkKIAotICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIGNsYXNzLgorICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIGNsYXNzLCB3aGV0aGVyIGJ1aWx0LWluIG9yIGNyZWF0ZWQgaW4gUHl0aG9uCisgICBjb2RlLgogCiAKIC4uIGZ1bmN0aW9uOjogaXNtZXRob2Qob2JqZWN0KQogCi0gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgbWV0aG9kLgorICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIGJvdW5kIG1ldGhvZCB3cml0dGVuIGluIFB5dGhvbi4KIAogCiAuLiBmdW5jdGlvbjo6IGlzZnVuY3Rpb24ob2JqZWN0KQogCi0gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgUHl0aG9uIGZ1bmN0aW9uIG9yIHVubmFtZWQgKDp0ZXJtOmBsYW1iZGFgKSBmdW5jdGlvbi4KKyAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBQeXRob24gZnVuY3Rpb24sIHdoaWNoIGluY2x1ZGVzIGZ1bmN0aW9ucworICAgY3JlYXRlZCBieSBhIDp0ZXJtOmBsYW1iZGFgIGV4cHJlc3Npb24uCisKIAogLi4gZnVuY3Rpb246OiBpc2dlbmVyYXRvcmZ1bmN0aW9uKG9iamVjdCkKIApAQCAtMjgxLDEyICsyODQsMTQgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CiAKKwogLi4gZnVuY3Rpb246OiBpc2dlbmVyYXRvcihvYmplY3QpCiAKICAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBnZW5lcmF0b3IuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCisKIC4uIGZ1bmN0aW9uOjogaXN0cmFjZWJhY2sob2JqZWN0KQogCiAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgdHJhY2ViYWNrLgpAQCAtMzA0LDEzICszMDksMTQgQEAKIAogLi4gZnVuY3Rpb246OiBpc2J1aWx0aW4ob2JqZWN0KQogCi0gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgYnVpbHQtaW4gZnVuY3Rpb24uCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgYnVpbHQtaW4gZnVuY3Rpb24gb3IgYSBib3VuZCBidWlsdC1pbiBtZXRob2QuCiAKIAogLi4gZnVuY3Rpb246OiBpc3JvdXRpbmUob2JqZWN0KQogCiAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgdXNlci1kZWZpbmVkIG9yIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIG1ldGhvZC4KIAorCiAuLiBmdW5jdGlvbjo6IGlzYWJzdHJhY3Qob2JqZWN0KQogCiAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MuCkBAIC0zMjAsOCArMzI2LDkgQEAKIAogLi4gZnVuY3Rpb246OiBpc21ldGhvZGRlc2NyaXB0b3Iob2JqZWN0KQogCi0gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgbWV0aG9kIGRlc2NyaXB0b3IsIGJ1dCBub3QgaWYgOmZ1bmM6YGlzbWV0aG9kYAotICAgb3IgOmZ1bmM6YGlzY2xhc3NgIG9yIDpmdW5jOmBpc2Z1bmN0aW9uYCBhcmUgdHJ1ZS4KKyAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBtZXRob2QgZGVzY3JpcHRvciwgYnV0IG5vdCBpZgorICAgOmZ1bmM6YGlzbWV0aG9kYCwgOmZ1bmM6YGlzY2xhc3NgLCA6ZnVuYzpgaXNmdW5jdGlvbmAgb3IgOmZ1bmM6YGlzYnVpbHRpbmAKKyAgIGFyZSB0cnVlLgogCiAgICBUaGlzIGlzIG5ldyBhcyBvZiBQeXRob24gMi4yLCBhbmQsIGZvciBleGFtcGxlLCBpcyB0cnVlIG9mCiAgICBgYGludC5fX2FkZF9fYGAuIEFuIG9iamVjdCBwYXNzaW5nIHRoaXMgdGVzdCBoYXMgYSA6YXR0cjpgX19nZXRfX2AgYXR0cmlidXRlCkBAIC00NTcsMTIgKzQ2NCwxMyBAQAogCiAuLiBmdW5jdGlvbjo6IGdldGFyZ3NwZWMoZnVuYykKIAotICAgR2V0IHRoZSBuYW1lcyBhbmQgZGVmYXVsdCB2YWx1ZXMgb2YgYSBQeXRob24gZnVuY3Rpb24ncyBhcmd1bWVudHMuIEEgdHVwbGUgb2YgZm91cgotICAgdGhpbmdzIGlzIHJldHVybmVkOiBgYChhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMpYGAuICphcmdzKiBpcyBhIGxpc3Qgb2YKLSAgIHRoZSBhcmd1bWVudCBuYW1lcyAoaXQgbWF5IGNvbnRhaW4gbmVzdGVkIGxpc3RzKS4gKnZhcmFyZ3MqIGFuZCAqdmFya3cqIGFyZSB0aGUKLSAgIG5hbWVzIG9mIHRoZSBgYCpgYCBhbmQgYGAqKmBgIGFyZ3VtZW50cyBvciBgYE5vbmVgYC4gKmRlZmF1bHRzKiBpcyBhIHR1cGxlIG9mCi0gICBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlcyBvciBOb25lIGlmIHRoZXJlIGFyZSBubyBkZWZhdWx0IGFyZ3VtZW50czsgaWYgdGhpcyB0dXBsZQotICAgaGFzICpuKiBlbGVtZW50cywgdGhleSBjb3JyZXNwb25kIHRvIHRoZSBsYXN0ICpuKiBlbGVtZW50cyBsaXN0ZWQgaW4gKmFyZ3MqLgorICAgR2V0IHRoZSBuYW1lcyBhbmQgZGVmYXVsdCB2YWx1ZXMgb2YgYSBQeXRob24gZnVuY3Rpb24ncyBhcmd1bWVudHMuIEEgdHVwbGUgb2YKKyAgIGZvdXIgdGhpbmdzIGlzIHJldHVybmVkOiBgYChhcmdzLCB2YXJhcmdzLCBrZXl3b3JkcywgZGVmYXVsdHMpYGAuICphcmdzKiBpcyBhCisgICBsaXN0IG9mIHRoZSBhcmd1bWVudCBuYW1lcyAoaXQgbWF5IGNvbnRhaW4gbmVzdGVkIGxpc3RzKS4gKnZhcmFyZ3MqIGFuZAorICAgKmtleXdvcmRzKiBhcmUgdGhlIG5hbWVzIG9mIHRoZSBgYCpgYCBhbmQgYGAqKmBgIGFyZ3VtZW50cyBvcgorICAgYGBOb25lYGAuICpkZWZhdWx0cyogaXMgYSB0dXBsZSBvZiBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlcyBvciBOb25lIGlmIHRoZXJlCisgICBhcmUgbm8gZGVmYXVsdCBhcmd1bWVudHM7IGlmIHRoaXMgdHVwbGUgaGFzICpuKiBlbGVtZW50cywgdGhleSBjb3JyZXNwb25kIHRvCisgICB0aGUgbGFzdCAqbiogZWxlbWVudHMgbGlzdGVkIGluICphcmdzKi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKICAgICAgIFJldHVybnMgYSA6dGVybTpgbmFtZWQgdHVwbGVgIGBgQXJnU3BlYyhhcmdzLCB2YXJhcmdzLCBrZXl3b3JkcywKQEAgLTQ3MSwxMSArNDc5LDExIEBACiAKIC4uIGZ1bmN0aW9uOjogZ2V0YXJndmFsdWVzKGZyYW1lKQogCi0gICBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGEgcGFydGljdWxhciBmcmFtZS4gQSB0dXBsZSBvZiBmb3VyCi0gICB0aGluZ3MgaXMgcmV0dXJuZWQ6IGBgKGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBsb2NhbHMpYGAuICphcmdzKiBpcyBhIGxpc3Qgb2YgdGhlCi0gICBhcmd1bWVudCBuYW1lcyAoaXQgbWF5IGNvbnRhaW4gbmVzdGVkIGxpc3RzKS4gKnZhcmFyZ3MqIGFuZCAqdmFya3cqIGFyZSB0aGUKLSAgIG5hbWVzIG9mIHRoZSBgYCpgYCBhbmQgYGAqKmBgIGFyZ3VtZW50cyBvciBgYE5vbmVgYC4gKmxvY2FscyogaXMgdGhlIGxvY2FscwotICAgZGljdGlvbmFyeSBvZiB0aGUgZ2l2ZW4gZnJhbWUuCisgICBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGEgcGFydGljdWxhciBmcmFtZS4gQSB0dXBsZSBvZgorICAgZm91ciB0aGluZ3MgaXMgcmV0dXJuZWQ6IGBgKGFyZ3MsIHZhcmFyZ3MsIGtleXdvcmRzLCBsb2NhbHMpYGAuICphcmdzKiBpcyBhCisgICBsaXN0IG9mIHRoZSBhcmd1bWVudCBuYW1lcyAoaXQgbWF5IGNvbnRhaW4gbmVzdGVkIGxpc3RzKS4gKnZhcmFyZ3MqIGFuZAorICAgKmtleXdvcmRzKiBhcmUgdGhlIG5hbWVzIG9mIHRoZSBgYCpgYCBhbmQgYGAqKmBgIGFyZ3VtZW50cyBvciBgYE5vbmVgYC4KKyAgICpsb2NhbHMqIGlzIHRoZSBsb2NhbHMgZGljdGlvbmFyeSBvZiB0aGUgZ2l2ZW4gZnJhbWUuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CiAgICAgICBSZXR1cm5zIGEgOnRlcm06YG5hbWVkIHR1cGxlYCBgYEFyZ0luZm8oYXJncywgdmFyYXJncywga2V5d29yZHMsCkBAIC01MDQsNiArNTEyLDMyIEBACiAgICBtZXRhdHlwZSBpcyBpbiB1c2UsIGNscyB3aWxsIGJlIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSB0dXBsZS4KIAogCisuLiBmdW5jdGlvbjo6IGdldGNhbGxhcmdzKGZ1bmNbLCAqYXJnc11bLCAqKmt3ZHNdKQorCisgICBCaW5kIHRoZSAqYXJncyogYW5kICprd2RzKiB0byB0aGUgYXJndW1lbnQgbmFtZXMgb2YgdGhlIFB5dGhvbiBmdW5jdGlvbiBvcgorICAgbWV0aG9kICpmdW5jKiwgYXMgaWYgaXQgd2FzIGNhbGxlZCB3aXRoIHRoZW0uIEZvciBib3VuZCBtZXRob2RzLCBiaW5kIGFsc28gdGhlCisgICBmaXJzdCBhcmd1bWVudCAodHlwaWNhbGx5IG5hbWVkIGBgc2VsZmBgKSB0byB0aGUgYXNzb2NpYXRlZCBpbnN0YW5jZS4gQSBkaWN0CisgICBpcyByZXR1cm5lZCwgbWFwcGluZyB0aGUgYXJndW1lbnQgbmFtZXMgKGluY2x1ZGluZyB0aGUgbmFtZXMgb2YgdGhlIGBgKmBgIGFuZAorICAgYGAqKmBgIGFyZ3VtZW50cywgaWYgYW55KSB0byB0aGVpciB2YWx1ZXMgZnJvbSAqYXJncyogYW5kICprd2RzKi4gSW4gY2FzZSBvZgorICAgaW52b2tpbmcgKmZ1bmMqIGluY29ycmVjdGx5LCBpLmUuIHdoZW5ldmVyIGBgZnVuYygqYXJncywgKiprd2RzKWBgIHdvdWxkIHJhaXNlCisgICBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiBpbmNvbXBhdGlibGUgc2lnbmF0dXJlLCBhbiBleGNlcHRpb24gb2YgdGhlIHNhbWUgdHlwZQorICAgYW5kIHRoZSBzYW1lIG9yIHNpbWlsYXIgbWVzc2FnZSBpcyByYWlzZWQuIEZvciBleGFtcGxlOjoKKworICAgID4+PiBmcm9tIGluc3BlY3QgaW1wb3J0IGdldGNhbGxhcmdzCisgICAgPj4+IGRlZiBmKGEsIGI9MSwgKnBvcywgKipuYW1lZCk6CisgICAgLi4uICAgICBwYXNzCisgICAgPj4+IGdldGNhbGxhcmdzKGYsIDEsIDIsIDMpCisgICAgeydhJzogMSwgJ25hbWVkJzoge30sICdiJzogMiwgJ3Bvcyc6ICgzLCl9CisgICAgPj4+IGdldGNhbGxhcmdzKGYsIGE9MiwgeD00KQorICAgIHsnYSc6IDIsICduYW1lZCc6IHsneCc6IDR9LCAnYic6IDEsICdwb3MnOiAoKX0KKyAgICA+Pj4gZ2V0Y2FsbGFyZ3MoZikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgdGFrZXMgYXQgbGVhc3QgMSBhcmd1bWVudCAoMCBnaXZlbikKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogLi4gX2luc3BlY3Qtc3RhY2s6CiAKIFRoZSBpbnRlcnByZXRlciBzdGFjawpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW8ucnN0IGIvRG9jL2xpYnJhcnkvaW8ucnN0CmluZGV4IGUzZjhiMzYuLjNjZmFhZWQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2lvLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pby5yc3QKQEAgLTYsMTYgKzYsMzAgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEd1aWRvIHZhbiBSb3NzdW0gPGd1aWRvQHB5dGhvbi5vcmc+CiAuLiBtb2R1bGVhdXRob3I6OiBNaWtlIFZlcmRvbmUgPG1pa2UudmVyZG9uZUBnbWFpbC5jb20+CiAuLiBtb2R1bGVhdXRob3I6OiBNYXJrIFJ1c3NlbGwgPG1hcmsucnVzc2VsbEB6ZW4uY28udWs+CisuLiBtb2R1bGVhdXRob3I6OiBBbnRvaW5lIFBpdHJvdSA8c29saXBzaXNAcGl0cm91Lm5ldD4KKy4uIG1vZHVsZWF1dGhvcjo6IEFtYXVyeSBGb3JnZW90IGQnQXJjIDxhbWF1cnlmYUBnbWFpbC5jb20+CisuLiBtb2R1bGVhdXRob3I6OiBCZW5qYW1pbiBQZXRlcnNvbiA8YmVuamFtaW5AcHl0aG9uLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBCZW5qYW1pbiBQZXRlcnNvbiA8YmVuamFtaW5AcHl0aG9uLm9yZz4KKwogLi4gdmVyc2lvbmFkZGVkOjogMi42CiAKLVRoZSA6bW9kOmBpb2AgbW9kdWxlIHByb3ZpZGVzIHRoZSBQeXRob24gaW50ZXJmYWNlcyB0byBzdHJlYW0gaGFuZGxpbmcuICBUaGUKLWJ1aWx0LWluIDpmdW5jOmBvcGVuYCBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLgorVGhlIDptb2Q6YGlvYCBtb2R1bGUgcHJvdmlkZXMgdGhlIFB5dGhvbiBpbnRlcmZhY2VzIHRvIHN0cmVhbSBoYW5kbGluZy4KK1VuZGVyIFB5dGhvbiAyLngsIHRoaXMgaXMgcHJvcG9zZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGJ1aWx0LWluCis6Y2xhc3M6YGZpbGVgIG9iamVjdCwgYnV0IGluIFB5dGhvbiAzLnggaXQgaXMgdGhlIGRlZmF1bHQgaW50ZXJmYWNlIHRvCithY2Nlc3MgZmlsZXMgYW5kIHN0cmVhbXMuCisKKy4uIG5vdGU6OgorCisgICBTaW5jZSB0aGlzIG1vZHVsZSBoYXMgYmVlbiBkZXNpZ25lZCBwcmltYXJpbHkgZm9yIFB5dGhvbiAzLngsIHlvdSBoYXZlIHRvCisgICBiZSBhd2FyZSB0aGF0IGFsbCB1c2VzIG9mICJieXRlcyIgaW4gdGhpcyBkb2N1bWVudCByZWZlciB0byB0aGUKKyAgIDpjbGFzczpgc3RyYCB0eXBlIChvZiB3aGljaCA6Y2xhc3M6YGJ5dGVzYCBpcyBhbiBhbGlhcyksIGFuZCBhbGwgdXNlcworICAgb2YgInRleHQiIHJlZmVyIHRvIHRoZSA6Y2xhc3M6YHVuaWNvZGVgIHR5cGUuICBGdXJ0aGVybW9yZSwgdGhvc2UgdHdvCisgICB0eXBlcyBhcmUgbm90IGludGVyY2hhbmdlYWJsZSBpbiB0aGUgOm1vZDpgaW9gIEFQSXMuCiAKIEF0IHRoZSB0b3Agb2YgdGhlIEkvTyBoaWVyYXJjaHkgaXMgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgOmNsYXNzOmBJT0Jhc2VgLiAgSXQKIGRlZmluZXMgdGhlIGJhc2ljIGludGVyZmFjZSB0byBhIHN0cmVhbS4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlcmUgaXMgbm8KIHNlcGFyYXRpb24gYmV0d2VlbiByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHN0cmVhbXM7IGltcGxlbWVudGF0aW9ucyBhcmUgYWxsb3dlZAotdG8gdGhyb3cgYW4gOmV4YzpgSU9FcnJvcmAgaWYgdGhleSBkbyBub3Qgc3VwcG9ydCBhIGdpdmVuIG9wZXJhdGlvbi4KK3RvIHJhaXNlIGFuIDpleGM6YElPRXJyb3JgIGlmIHRoZXkgZG8gbm90IHN1cHBvcnQgYSBnaXZlbiBvcGVyYXRpb24uCiAKIEV4dGVuZGluZyA6Y2xhc3M6YElPQmFzZWAgaXMgOmNsYXNzOmBSYXdJT0Jhc2VgIHdoaWNoIGRlYWxzIHNpbXBseSB3aXRoIHRoZQogcmVhZGluZyBhbmQgd3JpdGluZyBvZiByYXcgYnl0ZXMgdG8gYSBzdHJlYW0uICA6Y2xhc3M6YEZpbGVJT2Agc3ViY2xhc3NlcwpAQCAtMzEsMTAgKzQ1LDEwIEBACiAKIEFub3RoZXIgOmNsYXNzOmBJT0Jhc2VgIHN1YmNsYXNzLCA6Y2xhc3M6YFRleHRJT0Jhc2VgLCBkZWFscyB3aXRoCiBzdHJlYW1zIHdob3NlIGJ5dGVzIHJlcHJlc2VudCB0ZXh0LCBhbmQgaGFuZGxlcyBlbmNvZGluZyBhbmQgZGVjb2RpbmcKLWZyb20gYW5kIHRvIHN0cmluZ3MuIDpjbGFzczpgVGV4dElPV3JhcHBlcmAsIHdoaWNoIGV4dGVuZHMgaXQsIGlzIGEKLWJ1ZmZlcmVkIHRleHQgaW50ZXJmYWNlIHRvIGEgYnVmZmVyZWQgcmF3IHN0cmVhbQorZnJvbSBhbmQgdG8gOmNsYXNzOmB1bmljb2RlYCBzdHJpbmdzLiAgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYCwgd2hpY2ggZXh0ZW5kcworaXQsIGlzIGEgYnVmZmVyZWQgdGV4dCBpbnRlcmZhY2UgdG8gYSBidWZmZXJlZCByYXcgc3RyZWFtCiAoOmNsYXNzOmBCdWZmZXJlZElPQmFzZWApLiBGaW5hbGx5LCA6Y2xhc3M6YFN0cmluZ0lPYCBpcyBhbiBpbi1tZW1vcnkKLXN0cmVhbSBmb3IgdGV4dC4KK3N0cmVhbSBmb3IgdW5pY29kZSB0ZXh0LgogCiBBcmd1bWVudCBuYW1lcyBhcmUgbm90IHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24sIGFuZCBvbmx5IHRoZSBhcmd1bWVudHMgb2YKIDpmdW5jOmAub3BlbmAgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYXMga2V5d29yZCBhcmd1bWVudHMuCkBAIC00OSwxNiArNjMsMTYgQEAKICAgIGNsYXNzZXMuICA6ZnVuYzpgLm9wZW5gIHVzZXMgdGhlIGZpbGUncyBibGtzaXplIChhcyBvYnRhaW5lZCBieQogICAgOmZ1bmM6YG9zLnN0YXRgKSBpZiBwb3NzaWJsZS4KIAotLi4gZnVuY3Rpb246OiBvcGVuKGZpbGVbLCBtb2RlWywgYnVmZmVyaW5nWywgZW5jb2RpbmdbLCBlcnJvcnNbLCBuZXdsaW5lWywgY2xvc2VmZD1UcnVlXV1dXV1dKQorLi4gZnVuY3Rpb246OiBvcGVuKGZpbGUsIG1vZGU9J3InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUsIGNsb3NlZmQ9VHJ1ZSkKIAotICAgT3BlbiAqZmlsZSogYW5kIHJldHVybiBhIHN0cmVhbS4gIElmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQsIGFuCi0gICA6ZXhjOmBJT0Vycm9yYCBpcyByYWlzZWQuCisgICBPcGVuICpmaWxlKiBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZyBzdHJlYW0uICBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLAorICAgYW4gOmV4YzpgSU9FcnJvcmAgaXMgcmFpc2VkLgogCi0gICAqZmlsZSogaXMgZWl0aGVyIGEgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSAoYW5kIHRoZSBwYXRoIGlmIHRoZSBmaWxlIGlzbid0IGluCi0gICB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkgb2YgdGhlIGZpbGUgdG8gYmUgb3BlbmVkIG9yIGEgZmlsZQotICAgZGVzY3JpcHRvciBvZiB0aGUgZmlsZSB0byBiZSBvcGVuZWQuICAoSWYgYSBmaWxlIGRlc2NyaXB0b3IgaXMgZ2l2ZW4sCi0gICBmb3IgZXhhbXBsZSwgZnJvbSA6ZnVuYzpgb3MuZmRvcGVuYCwgaXQgaXMgY2xvc2VkIHdoZW4gdGhlIHJldHVybmVkCi0gICBJL08gb2JqZWN0IGlzIGNsb3NlZCwgdW5sZXNzICpjbG9zZWZkKiBpcyBzZXQgdG8gYGBGYWxzZWBgLikKKyAgICpmaWxlKiBpcyBlaXRoZXIgYSBzdHJpbmcgZ2l2aW5nIHRoZSBwYXRobmFtZSAoYWJzb2x1dGUgb3IKKyAgIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KSBvZiB0aGUgZmlsZSB0byBiZSBvcGVuZWQgb3IKKyAgIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBmaWxlIHRvIGJlIHdyYXBwZWQuICAoSWYgYSBmaWxlIGRlc2NyaXB0b3IKKyAgIGlzIGdpdmVuLCBpdCBpcyBjbG9zZWQgd2hlbiB0aGUgcmV0dXJuZWQgSS9PIG9iamVjdCBpcyBjbG9zZWQsIHVubGVzcworICAgKmNsb3NlZmQqIGlzIHNldCB0byBgYEZhbHNlYGAuKQogCiAgICAqbW9kZSogaXMgYW4gb3B0aW9uYWwgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBtb2RlIGluIHdoaWNoIHRoZSBmaWxlIGlzCiAgICBvcGVuZWQuICBJdCBkZWZhdWx0cyB0byBgYCdyJ2BgIHdoaWNoIG1lYW5zIG9wZW4gZm9yIHJlYWRpbmcgaW4gdGV4dCBtb2RlLgpAQCAtODgsMTEgKzEwMiwxMSBAQAogCiAgICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGZpbGVzIG9wZW5lZCBpbiBiaW5hcnkgYW5kIHRleHQgbW9kZXMsIGV2ZW4gd2hlbgogICAgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSBkb2Vzbid0LiAgRmlsZXMgb3BlbmVkIGluIGJpbmFyeSBtb2RlCi0gICAoaW5jbHVkaW5nIGBgJ2InYGAgaW4gdGhlICptb2RlKiBhcmd1bWVudCkgcmV0dXJuIGNvbnRlbnRzIGFzIGBgYnl0ZXNgYAorICAgKGluY2x1ZGluZyBgYCdiJ2BgIGluIHRoZSAqbW9kZSogYXJndW1lbnQpIHJldHVybiBjb250ZW50cyBhcyA6Y2xhc3M6YGJ5dGVzYAogICAgb2JqZWN0cyB3aXRob3V0IGFueSBkZWNvZGluZy4gIEluIHRleHQgbW9kZSAodGhlIGRlZmF1bHQsIG9yIHdoZW4gYGAndCdgYCBpcwogICAgaW5jbHVkZWQgaW4gdGhlICptb2RlKiBhcmd1bWVudCksIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUgcmV0dXJuZWQgYXMKLSAgIHN0cmluZ3MsIHRoZSBieXRlcyBoYXZpbmcgYmVlbiBmaXJzdCBkZWNvZGVkIHVzaW5nIGEgcGxhdGZvcm0tZGVwZW5kZW50Ci0gICBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkICplbmNvZGluZyogaWYgZ2l2ZW4uCisgICA6Y2xhc3M6YHVuaWNvZGVgIHN0cmluZ3MsIHRoZSBieXRlcyBoYXZpbmcgYmVlbiBmaXJzdCBkZWNvZGVkIHVzaW5nIGEKKyAgIHBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkICplbmNvZGluZyogaWYgZ2l2ZW4uCiAKICAgICpidWZmZXJpbmcqIGlzIGFuIG9wdGlvbmFsIGludGVnZXIgdXNlZCB0byBzZXQgdGhlIGJ1ZmZlcmluZyBwb2xpY3kuCiAgICBQYXNzIDAgdG8gc3dpdGNoIGJ1ZmZlcmluZyBvZmYgKG9ubHkgYWxsb3dlZCBpbiBiaW5hcnkgbW9kZSksIDEgdG8gc2VsZWN0CkBAIC0xMTEsMTkgKzEyNSwyMSBAQAogCiAgICAqZW5jb2RpbmcqIGlzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB1c2VkIHRvIGRlY29kZSBvciBlbmNvZGUgdGhlIGZpbGUuCiAgICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gdGV4dCBtb2RlLiAgVGhlIGRlZmF1bHQgZW5jb2RpbmcgaXMgcGxhdGZvcm0KLSAgIGRlcGVuZGVudCwgYnV0IGFueSBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgUHl0aG9uIGNhbiBiZSB1c2VkLiAgU2VlIHRoZQotICAgOm1vZDpgY29kZWNzYCBtb2R1bGUgZm9yIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBlbmNvZGluZ3MuCisgICBkZXBlbmRlbnQgKHdoYXRldmVyIDpmdW5jOmBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmdgIHJldHVybnMpLCBidXQgYW55CisgICBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgUHl0aG9uIGNhbiBiZSB1c2VkLiAgU2VlIHRoZSA6bW9kOmBjb2RlY3NgIG1vZHVsZSBmb3IKKyAgIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBlbmNvZGluZ3MuCiAKICAgICplcnJvcnMqIGlzIGFuIG9wdGlvbmFsIHN0cmluZyB0aGF0IHNwZWNpZmllcyBob3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nCi0gICBlcnJvcnMgYXJlIHRvIGJlIGhhbmRsZWQuICBQYXNzIGBgJ3N0cmljdCdgYCB0byByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgCi0gICBleGNlcHRpb24gaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgZXJyb3IgKHRoZSBkZWZhdWx0IG9mIGBgTm9uZWBgIGhhcyB0aGUgc2FtZQotICAgZWZmZWN0KSwgb3IgcGFzcyBgYCdpZ25vcmUnYGAgdG8gaWdub3JlIGVycm9ycy4gIChOb3RlIHRoYXQgaWdub3JpbmcgZW5jb2RpbmcKLSAgIGVycm9ycyBjYW4gbGVhZCB0byBkYXRhIGxvc3MuKSAgYGAncmVwbGFjZSdgYCBjYXVzZXMgYSByZXBsYWNlbWVudCBtYXJrZXIKLSAgIChzdWNoIGFzIGBgJz8nYGApIHRvIGJlIGluc2VydGVkIHdoZXJlIHRoZXJlIGlzIG1hbGZvcm1lZCBkYXRhLiAgV2hlbgotICAgd3JpdGluZywgYGAneG1sY2hhcnJlZnJlcGxhY2UnYGAgKHJlcGxhY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgWE1MIGNoYXJhY3RlcgotICAgcmVmZXJlbmNlKSBvciBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgIChyZXBsYWNlIHdpdGggYmFja3NsYXNoZWQgZXNjYXBlCi0gICBzZXF1ZW5jZXMpIGNhbiBiZSB1c2VkLiAgQW55IG90aGVyIGVycm9yIGhhbmRsaW5nIG5hbWUgdGhhdCBoYXMgYmVlbgotICAgcmVnaXN0ZXJlZCB3aXRoIDpmdW5jOmBjb2RlY3MucmVnaXN0ZXJfZXJyb3JgIGlzIGFsc28gdmFsaWQuCisgICBlcnJvcnMgYXJlIHRvIGJlIGhhbmRsZWQtLXRoaXMgY2Fubm90IGJlIHVzZWQgaW4gYmluYXJ5IG1vZGUuICBQYXNzCisgICBgYCdzdHJpY3QnYGAgdG8gcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBleGNlcHRpb24gaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcKKyAgIGVycm9yICh0aGUgZGVmYXVsdCBvZiBgYE5vbmVgYCBoYXMgdGhlIHNhbWUgZWZmZWN0KSwgb3IgcGFzcyBgYCdpZ25vcmUnYGAgdG8KKyAgIGlnbm9yZSBlcnJvcnMuICAoTm90ZSB0aGF0IGlnbm9yaW5nIGVuY29kaW5nIGVycm9ycyBjYW4gbGVhZCB0byBkYXRhIGxvc3MuKQorICAgYGAncmVwbGFjZSdgYCBjYXVzZXMgYSByZXBsYWNlbWVudCBtYXJrZXIgKHN1Y2ggYXMgYGAnPydgYCkgdG8gYmUgaW5zZXJ0ZWQKKyAgIHdoZXJlIHRoZXJlIGlzIG1hbGZvcm1lZCBkYXRhLiAgV2hlbiB3cml0aW5nLCBgYCd4bWxjaGFycmVmcmVwbGFjZSdgYAorICAgKHJlcGxhY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgWE1MIGNoYXJhY3RlciByZWZlcmVuY2UpIG9yCisgICBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgIChyZXBsYWNlIHdpdGggYmFja3NsYXNoZWQgZXNjYXBlIHNlcXVlbmNlcykgY2FuIGJlCisgICB1c2VkLiAgQW55IG90aGVyIGVycm9yIGhhbmRsaW5nIG5hbWUgdGhhdCBoYXMgYmVlbiByZWdpc3RlcmVkIHdpdGgKKyAgIDpmdW5jOmBjb2RlY3MucmVnaXN0ZXJfZXJyb3JgIGlzIGFsc28gdmFsaWQuCiAKICAgICpuZXdsaW5lKiBjb250cm9scyBob3cgdW5pdmVyc2FsIG5ld2xpbmVzIHdvcmtzIChpdCBvbmx5IGFwcGxpZXMgdG8gdGV4dAogICAgbW9kZSkuICBJdCBjYW4gYmUgYGBOb25lYGAsIGBgJydgYCwgYGAnXG4nYGAsIGBgJ1xyJ2BgLCBhbmQgYGAnXHJcbidgYC4gIEl0CkBAIC0xNDMsMjMgKzE1OSwyNiBAQAogICAgICB0aGUgb3RoZXIgbGVnYWwgdmFsdWVzLCBhbnkgYGAnXG4nYGAgY2hhcmFjdGVycyB3cml0dGVuIGFyZSB0cmFuc2xhdGVkIHRvCiAgICAgIHRoZSBnaXZlbiBzdHJpbmcuCiAKLSAgIElmICpjbG9zZWZkKiBpcyBgYEZhbHNlYGAgYW5kIGEgZmlsZSBkZXNjcmlwdG9yIHJhdGhlciB0aGFuIGEKLSAgIGZpbGVuYW1lIHdhcyBnaXZlbiwgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUga2VwdCBvcGVuCi0gICB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZC4gIElmIGEgZmlsZW5hbWUgaXMgZ2l2ZW4gKmNsb3NlZmQqIGhhcyBubwotICAgZWZmZWN0IGJ1dCBtdXN0IGJlIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCkuCisgICBJZiAqY2xvc2VmZCogaXMgYGBGYWxzZWBgIGFuZCBhIGZpbGUgZGVzY3JpcHRvciByYXRoZXIgdGhhbiBhIGZpbGVuYW1lIHdhcworICAgZ2l2ZW4sIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGtlcHQgb3BlbiB3aGVuIHRoZSBmaWxlIGlzCisgICBjbG9zZWQuICBJZiBhIGZpbGVuYW1lIGlzIGdpdmVuICpjbG9zZWZkKiBoYXMgbm8gZWZmZWN0IGFuZCBtdXN0IGJlIGBgVHJ1ZWBgCisgICAodGhlIGRlZmF1bHQpLgogCi0gICBUaGUgdHlwZSBvZiBmaWxlIG9iamVjdCByZXR1cm5lZCBieSB0aGUgOmZ1bmM6YC5vcGVuYCBmdW5jdGlvbiBkZXBlbmRzCi0gICBvbiB0aGUgbW9kZS4gIFdoZW4gOmZ1bmM6YC5vcGVuYCBpcyB1c2VkIHRvIG9wZW4gYSBmaWxlIGluIGEgdGV4dCBtb2RlCi0gICAoYGAndydgYCwgYGAncidgYCwgYGAnd3QnYGAsIGBgJ3J0J2BgLCBldGMuKSwgaXQgcmV0dXJucyBhCi0gICA6Y2xhc3M6YFRleHRJT1dyYXBwZXJgLiBXaGVuIHVzZWQgdG8gb3BlbiBhIGZpbGUgaW4gYSBiaW5hcnkgbW9kZSwKLSAgIHRoZSByZXR1cm5lZCBjbGFzcyB2YXJpZXM6IGluIHJlYWQgYmluYXJ5IG1vZGUsIGl0IHJldHVybnMgYQotICAgOmNsYXNzOmBCdWZmZXJlZFJlYWRlcmA7IGluIHdyaXRlIGJpbmFyeSBhbmQgYXBwZW5kIGJpbmFyeSBtb2RlcywgaXQKLSAgIHJldHVybnMgYSA6Y2xhc3M6YEJ1ZmZlcmVkV3JpdGVyYCwgYW5kIGluIHJlYWQvd3JpdGUgbW9kZSwgaXQgcmV0dXJucwotICAgYSA6Y2xhc3M6YEJ1ZmZlcmVkUmFuZG9tYC4KKyAgIFRoZSB0eXBlIG9mIGZpbGUgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSA6ZnVuYzpgLm9wZW5gIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhlCisgICBtb2RlLiAgV2hlbiA6ZnVuYzpgLm9wZW5gIGlzIHVzZWQgdG8gb3BlbiBhIGZpbGUgaW4gYSB0ZXh0IG1vZGUgKGBgJ3cnYGAsCisgICBgYCdyJ2BgLCBgYCd3dCdgYCwgYGAncnQnYGAsIGV0Yy4pLCBpdCByZXR1cm5zIGEgc3ViY2xhc3Mgb2YKKyAgIDpjbGFzczpgVGV4dElPQmFzZWAgKHNwZWNpZmljYWxseSA6Y2xhc3M6YFRleHRJT1dyYXBwZXJgKS4gIFdoZW4gdXNlZCB0byBvcGVuCisgICBhIGZpbGUgaW4gYSBiaW5hcnkgbW9kZSB3aXRoIGJ1ZmZlcmluZywgdGhlIHJldHVybmVkIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YKKyAgIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgLiAgVGhlIGV4YWN0IGNsYXNzIHZhcmllczogaW4gcmVhZCBiaW5hcnkgbW9kZSwgaXQKKyAgIHJldHVybnMgYSA6Y2xhc3M6YEJ1ZmZlcmVkUmVhZGVyYDsgaW4gd3JpdGUgYmluYXJ5IGFuZCBhcHBlbmQgYmluYXJ5IG1vZGVzLAorICAgaXQgcmV0dXJucyBhIDpjbGFzczpgQnVmZmVyZWRXcml0ZXJgLCBhbmQgaW4gcmVhZC93cml0ZSBtb2RlLCBpdCByZXR1cm5zIGEKKyAgIDpjbGFzczpgQnVmZmVyZWRSYW5kb21gLiAgV2hlbiBidWZmZXJpbmcgaXMgZGlzYWJsZWQsIHRoZSByYXcgc3RyZWFtLCBhCisgICBzdWJjbGFzcyBvZiA6Y2xhc3M6YFJhd0lPQmFzZWAsIDpjbGFzczpgRmlsZUlPYCwgaXMgcmV0dXJuZWQuCiAKLSAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGEgc3RyaW5nIG9yIGJ5dGVhcnJheSBhcyBhIGZpbGUgZm9yIGJvdGggcmVhZGluZwotICAgYW5kIHdyaXRpbmcuICBGb3Igc3RyaW5ncyA6Y2xhc3M6YFN0cmluZ0lPYCBjYW4gYmUgdXNlZCBsaWtlIGEgZmlsZSBvcGVuZWQgaW4KLSAgIGEgdGV4dCBtb2RlLCBhbmQgZm9yIGJ5dGVhcnJheXMgYSA6Y2xhc3M6YEJ5dGVzSU9gIGNhbiBiZSB1c2VkIGxpa2UgYQorICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYW4gOmNsYXNzOmB1bmljb2RlYCBvciA6Y2xhc3M6YGJ5dGVzYCBzdHJpbmcKKyAgIGFzIGEgZmlsZSBmb3IgYm90aCByZWFkaW5nIGFuZCB3cml0aW5nLiAgRm9yIDpjbGFzczpgdW5pY29kZWAgc3RyaW5ncworICAgOmNsYXNzOmBTdHJpbmdJT2AgY2FuIGJlIHVzZWQgbGlrZSBhIGZpbGUgb3BlbmVkIGluIHRleHQgbW9kZSwKKyAgIGFuZCBmb3IgOmNsYXNzOmBieXRlc2AgYSA6Y2xhc3M6YEJ5dGVzSU9gIGNhbiBiZSB1c2VkIGxpa2UgYQogICAgZmlsZSBvcGVuZWQgaW4gYSBiaW5hcnkgbW9kZS4KIAogCkBAIC0yMDMsMjIgKzIyMiwyNSBAQAogICAgc3VwcG9ydCBhcmUgY2FsbGVkLgogCiAgICBUaGUgYmFzaWMgdHlwZSB1c2VkIGZvciBiaW5hcnkgZGF0YSByZWFkIGZyb20gb3Igd3JpdHRlbiB0byBhIGZpbGUgaXMKLSAgIDpjbGFzczpgYnl0ZXNgLiAgOmNsYXNzOmBieXRlYXJyYXlgXHMgYXJlIGFjY2VwdGVkIHRvbywgYW5kIGluIHNvbWUgY2FzZXMKLSAgIChzdWNoIGFzIDpjbGFzczpgcmVhZGludG9gKSByZXF1aXJlZC4gIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoCi0gICA6Y2xhc3M6YHN0cmAgZGF0YS4KKyAgIDpjbGFzczpgYnl0ZXNgIChhbHNvIGtub3duIGFzIDpjbGFzczpgc3RyYCkuICA6Y2xhc3M6YGJ5dGVhcnJheWBccyBhcmUKKyAgIGFjY2VwdGVkIHRvbywgYW5kIGluIHNvbWUgY2FzZXMgKHN1Y2ggYXMgOmNsYXNzOmByZWFkaW50b2ApIHJlcXVpcmVkLgorICAgVGV4dCBJL08gY2xhc3NlcyB3b3JrIHdpdGggOmNsYXNzOmB1bmljb2RlYCBkYXRhLgogCiAgICBOb3RlIHRoYXQgY2FsbGluZyBhbnkgbWV0aG9kIChldmVuIGlucXVpcmllcykgb24gYSBjbG9zZWQgc3RyZWFtIGlzCiAgICB1bmRlZmluZWQuICBJbXBsZW1lbnRhdGlvbnMgbWF5IHJhaXNlIDpleGM6YElPRXJyb3JgIGluIHRoaXMgY2FzZS4KIAogICAgSU9CYXNlIChhbmQgaXRzIHN1YmNsYXNzZXMpIHN1cHBvcnQgdGhlIGl0ZXJhdG9yIHByb3RvY29sLCBtZWFuaW5nIHRoYXQgYW4KICAgIDpjbGFzczpgSU9CYXNlYCBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgeWllbGRpbmcgdGhlIGxpbmVzIGluIGEgc3RyZWFtLgorICAgTGluZXMgYXJlIGRlZmluZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHN0cmVhbSBpcworICAgYSBiaW5hcnkgc3RyZWFtICh5aWVsZGluZyA6Y2xhc3M6YGJ5dGVzYCksIG9yIGEgdGV4dCBzdHJlYW0gKHlpZWxkaW5nCisgICA6Y2xhc3M6YHVuaWNvZGVgIHN0cmluZ3MpLiAgU2VlIDptZXRoOmByZWFkbGluZWAgYmVsb3cuCiAKICAgIElPQmFzZSBpcyBhbHNvIGEgY29udGV4dCBtYW5hZ2VyIGFuZCB0aGVyZWZvcmUgc3VwcG9ydHMgdGhlCiAgICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiAgSW4gdGhpcyBleGFtcGxlLCAqZmlsZSogaXMgY2xvc2VkIGFmdGVyIHRoZQogICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCdzIHN1aXRlIGlzIGZpbmlzaGVkLS0tZXZlbiBpZiBhbiBleGNlcHRpb24gb2NjdXJzOjoKIAotICAgICAgd2l0aCBvcGVuKCdzcGFtLnR4dCcsICd3JykgYXMgZmlsZToKLSAgICAgICAgICBmaWxlLndyaXRlKCdTcGFtIGFuZCBlZ2dzIScpCisgICAgICB3aXRoIGlvLm9wZW4oJ3NwYW0udHh0JywgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgIGZpbGUud3JpdGUodSdTcGFtIGFuZCBlZ2dzIScpCiAKICAgIDpjbGFzczpgSU9CYXNlYCBwcm92aWRlcyB0aGVzZSBkYXRhIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHM6CiAKQEAgLTIyNiw3ICsyNDgsNyBAQAogCiAgICAgICBGbHVzaCBhbmQgY2xvc2UgdGhpcyBzdHJlYW0uIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIGZpbGUgaXMKICAgICAgIGFscmVhZHkgY2xvc2VkLiBPbmNlIHRoZSBmaWxlIGlzIGNsb3NlZCwgYW55IG9wZXJhdGlvbiBvbiB0aGUgZmlsZQotICAgICAgKGUuZy4gcmVhZGluZyBvciB3cml0aW5nKSB3aWxsIHJhaXNlIGFuIDpleGM6YFZhbHVlRXJyb3JgLgorICAgICAgKGUuZy4gcmVhZGluZyBvciB3cml0aW5nKSB3aWxsIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAuCiAKICAgICAgIEFzIGEgY29udmVuaWVuY2UsIGl0IGlzIGFsbG93ZWQgdG8gY2FsbCB0aGlzIG1ldGhvZCBtb3JlIHRoYW4gb25jZTsKICAgICAgIG9ubHkgdGhlIGZpcnN0IGNhbGwsIGhvd2V2ZXIsIHdpbGwgaGF2ZSBhbiBlZmZlY3QuCkBAIC0yNTYsNyArMjc4LDcgQEAKICAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgc3RyZWFtIGNhbiBiZSByZWFkIGZyb20uICBJZiBGYWxzZSwgOm1ldGg6YHJlYWRgCiAgICAgICB3aWxsIHJhaXNlIDpleGM6YElPRXJyb3JgLgogCi0gICAuLiBtZXRob2Q6OiByZWFkbGluZShbbGltaXRdKQorICAgLi4gbWV0aG9kOjogcmVhZGxpbmUobGltaXQ9LTEpCiAKICAgICAgIFJlYWQgYW5kIHJldHVybiBvbmUgbGluZSBmcm9tIHRoZSBzdHJlYW0uICBJZiAqbGltaXQqIGlzIHNwZWNpZmllZCwgYXQKICAgICAgIG1vc3QgKmxpbWl0KiBieXRlcyB3aWxsIGJlIHJlYWQuCkBAIC0yNjUsMjQgKzI4NywzMCBAQAogICAgICAgdGhlICpuZXdsaW5lcyogYXJndW1lbnQgdG8gOmZ1bmM6YC5vcGVuYCBjYW4gYmUgdXNlZCB0byBzZWxlY3QgdGhlIGxpbmUKICAgICAgIHRlcm1pbmF0b3IocykgcmVjb2duaXplZC4KIAotICAgLi4gbWV0aG9kOjogcmVhZGxpbmVzKFtoaW50XSkKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lcyhoaW50PS0xKQogCiAgICAgICBSZWFkIGFuZCByZXR1cm4gYSBsaXN0IG9mIGxpbmVzIGZyb20gdGhlIHN0cmVhbS4gICpoaW50KiBjYW4gYmUgc3BlY2lmaWVkCiAgICAgICB0byBjb250cm9sIHRoZSBudW1iZXIgb2YgbGluZXMgcmVhZDogbm8gbW9yZSBsaW5lcyB3aWxsIGJlIHJlYWQgaWYgdGhlCiAgICAgICB0b3RhbCBzaXplIChpbiBieXRlcy9jaGFyYWN0ZXJzKSBvZiBhbGwgbGluZXMgc28gZmFyIGV4Y2VlZHMgKmhpbnQqLgogCi0gICAuLiBtZXRob2Q6OiBzZWVrKG9mZnNldFssIHdoZW5jZV0pCisgICAuLiBtZXRob2Q6OiBzZWVrKG9mZnNldCwgd2hlbmNlPVNFRUtfU0VUKQogCiAgICAgICBDaGFuZ2UgdGhlIHN0cmVhbSBwb3NpdGlvbiB0byB0aGUgZ2l2ZW4gYnl0ZSAqb2Zmc2V0Ki4gICpvZmZzZXQqIGlzCiAgICAgICBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gaW5kaWNhdGVkIGJ5ICp3aGVuY2UqLiAgVmFsdWVzIGZvcgogICAgICAgKndoZW5jZSogYXJlOgogCi0gICAgICAqIGBgMGBgIC0tIHN0YXJ0IG9mIHRoZSBzdHJlYW0gKHRoZSBkZWZhdWx0KTsgKm9mZnNldCogc2hvdWxkIGJlIHplcm8gb3IgcG9zaXRpdmUKLSAgICAgICogYGAxYGAgLS0gY3VycmVudCBzdHJlYW0gcG9zaXRpb247ICpvZmZzZXQqIG1heSBiZSBuZWdhdGl2ZQotICAgICAgKiBgYDJgYCAtLSBlbmQgb2YgdGhlIHN0cmVhbTsgKm9mZnNldCogaXMgdXN1YWxseSBuZWdhdGl2ZQorICAgICAgKiA6ZGF0YTpgU0VFS19TRVRgIG9yIGBgMGBgIC0tIHN0YXJ0IG9mIHRoZSBzdHJlYW0gKHRoZSBkZWZhdWx0KTsKKyAgICAgICAgKm9mZnNldCogc2hvdWxkIGJlIHplcm8gb3IgcG9zaXRpdmUKKyAgICAgICogOmRhdGE6YFNFRUtfQ1VSYCBvciBgYDFgYCAtLSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbjsgKm9mZnNldCogbWF5CisgICAgICAgIGJlIG5lZ2F0aXZlCisgICAgICAqIDpkYXRhOmBTRUVLX0VORGAgb3IgYGAyYGAgLS0gZW5kIG9mIHRoZSBzdHJlYW07ICpvZmZzZXQqIGlzIHVzdWFsbHkKKyAgICAgICAgbmVnYXRpdmUKIAogICAgICAgUmV0dXJuIHRoZSBuZXcgYWJzb2x1dGUgcG9zaXRpb24uCiAKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworICAgICAgICAgVGhlIGBgU0VFS18qYGAgY29uc3RhbnRzCisKICAgIC4uIG1ldGhvZDo6IHNlZWthYmxlKCkKIAogICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBzdHJlYW0gc3VwcG9ydHMgcmFuZG9tIGFjY2Vzcy4gIElmIGBgRmFsc2VgYCwKQEAgLTI5Miw3ICszMjAsNyBAQAogCiAgICAgICBSZXR1cm4gdGhlIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uLgogCi0gICAuLiBtZXRob2Q6OiB0cnVuY2F0ZShbc2l6ZV0pCisgICAuLiBtZXRob2Q6OiB0cnVuY2F0ZShzaXplPU5vbmUpCiAKICAgICAgIFJlc2l6ZSB0aGUgc3RyZWFtIHRvIHRoZSBnaXZlbiAqc2l6ZSogaW4gYnl0ZXMgKG9yIHRoZSBjdXJyZW50IHBvc2l0aW9uCiAgICAgICBpZiAqc2l6ZSogaXMgbm90IHNwZWNpZmllZCkuICBUaGUgY3VycmVudCBzdHJlYW0gcG9zaXRpb24gaXNuJ3QgY2hhbmdlZC4KQEAgLTMxOCwxNSArMzQ2LDIzIEBACiAgICBCYXNlIGNsYXNzIGZvciByYXcgYmluYXJ5IEkvTy4gIEl0IGluaGVyaXRzIDpjbGFzczpgSU9CYXNlYC4gIFRoZXJlIGlzIG5vCiAgICBwdWJsaWMgY29uc3RydWN0b3IuCiAKKyAgIFJhdyBiaW5hcnkgSS9PIHR5cGljYWxseSBwcm92aWRlcyBsb3ctbGV2ZWwgYWNjZXNzIHRvIGFuIHVuZGVybHlpbmcgT1MKKyAgIGRldmljZSBvciBBUEksIGFuZCBkb2VzIG5vdCB0cnkgdG8gZW5jYXBzdWxhdGUgaXQgaW4gaGlnaC1sZXZlbCBwcmltaXRpdmVzCisgICAodGhpcyBpcyBsZWZ0IHRvIEJ1ZmZlcmVkIEkvTyBhbmQgVGV4dCBJL08sIGRlc2NyaWJlZCBsYXRlciBpbiB0aGlzIHBhZ2UpLgorCiAgICBJbiBhZGRpdGlvbiB0byB0aGUgYXR0cmlidXRlcyBhbmQgbWV0aG9kcyBmcm9tIDpjbGFzczpgSU9CYXNlYCwKICAgIFJhd0lPQmFzZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQoW25dKQorICAgLi4gbWV0aG9kOjogcmVhZChuPS0xKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gYWxsIHRoZSBieXRlcyBmcm9tIHRoZSBzdHJlYW0gdW50aWwgRU9GLCBvciBpZiAqbiogaXMKLSAgICAgIHNwZWNpZmllZCwgdXAgdG8gKm4qIGJ5dGVzLiAgT25seSBvbmUgc3lzdGVtIGNhbGwgaXMgZXZlciBtYWRlLiAgQW4gZW1wdHkKLSAgICAgIGJ5dGVzIG9iamVjdCBpcyByZXR1cm5lZCBvbiBFT0Y7IGBgTm9uZWBgIGlzIHJldHVybmVkIGlmIHRoZSBvYmplY3QgaXMgc2V0Ci0gICAgICBub3QgdG8gYmxvY2sgYW5kIGhhcyBubyBkYXRhIHRvIHJlYWQuCisgICAgICBSZWFkIHVwIHRvICpuKiBieXRlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybiB0aGVtLiAgQXMgYSBjb252ZW5pZW5jZSwKKyAgICAgIGlmICpuKiBpcyB1bnNwZWNpZmllZCBvciAtMSwgOm1ldGg6YHJlYWRhbGxgIGlzIGNhbGxlZC4gIE90aGVyd2lzZSwKKyAgICAgIG9ubHkgb25lIHN5c3RlbSBjYWxsIGlzIGV2ZXIgbWFkZS4gIEZld2VyIHRoYW4gKm4qIGJ5dGVzIG1heSBiZQorICAgICAgcmV0dXJuZWQgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FsbCByZXR1cm5zIGZld2VyIHRoYW4gKm4qIGJ5dGVzLgorCisgICAgICBJZiAwIGJ5dGVzIGFyZSByZXR1cm5lZCwgYW5kICpuKiB3YXMgbm90IDAsIHRoaXMgaW5kaWNhdGVzIGVuZCBvZiBmaWxlLgorICAgICAgSWYgdGhlIG9iamVjdCBpcyBpbiBub24tYmxvY2tpbmcgbW9kZSBhbmQgbm8gYnl0ZXMgYXJlIGF2YWlsYWJsZSwKKyAgICAgIGBgTm9uZWBgIGlzIHJldHVybmVkLgogCiAgICAuLiBtZXRob2Q6OiByZWFkYWxsKCkKIApAQCAtMzM1LDM4ICszNzEsNjUgQEAKIAogICAgLi4gbWV0aG9kOjogcmVhZGludG8oYikKIAotICAgICAgUmVhZCB1cCB0byBsZW4oYikgYnl0ZXMgaW50byBieXRlYXJyYXkgKmIqIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcwotICAgICAgcmVhZC4KKyAgICAgIFJlYWQgdXAgdG8gbGVuKGIpIGJ5dGVzIGludG8gYnl0ZWFycmF5ICpiKiBhbmQgcmV0dXJuIHRoZSBudW1iZXIKKyAgICAgIG9mIGJ5dGVzIHJlYWQuICBJZiB0aGUgb2JqZWN0IGlzIGluIG5vbi1ibG9ja2luZyBtb2RlIGFuZCBubworICAgICAgYnl0ZXMgYXJlIGF2YWlsYWJsZSwgYGBOb25lYGAgaXMgcmV0dXJuZWQuCiAKICAgIC4uIG1ldGhvZDo6IHdyaXRlKGIpCiAKICAgICAgIFdyaXRlIHRoZSBnaXZlbiBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LCAqYiosIHRvIHRoZSB1bmRlcmx5aW5nIHJhdwotICAgICAgc3RyZWFtIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIChUaGlzIGlzIG5ldmVyIGxlc3MgdGhhbgotICAgICAgYGBsZW4oYilgYCwgc2luY2UgaWYgdGhlIHdyaXRlIGZhaWxzLCBhbiA6ZXhjOmBJT0Vycm9yYCB3aWxsIGJlIHJhaXNlZCkuCisgICAgICBzdHJlYW0gYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uICBUaGlzIGNhbiBiZSBsZXNzIHRoYW4KKyAgICAgIGBgbGVuKGIpYGAsIGRlcGVuZGluZyBvbiBzcGVjaWZpY3Mgb2YgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSwgYW5kCisgICAgICBlc3BlY2lhbGx5IGlmIGl0IGlzIGluIG5vbi1ibG9ja2luZyBtb2RlLiAgYGBOb25lYGAgaXMgcmV0dXJuZWQgaWYgdGhlCisgICAgICByYXcgc3RyZWFtIGlzIHNldCBub3QgdG8gYmxvY2sgYW5kIG5vIHNpbmdsZSBieXRlIGNvdWxkIGJlIHJlYWRpbHkKKyAgICAgIHdyaXR0ZW4gdG8gaXQuCiAKIAogLi4gY2xhc3M6OiBCdWZmZXJlZElPQmFzZQogCi0gICBCYXNlIGNsYXNzIGZvciBzdHJlYW1zIHRoYXQgc3VwcG9ydCBidWZmZXJpbmcuICBJdCBpbmhlcml0cyA6Y2xhc3M6YElPQmFzZWAuCi0gICBUaGVyZSBpcyBubyBwdWJsaWMgY29uc3RydWN0b3IuCisgICBCYXNlIGNsYXNzIGZvciBiaW5hcnkgc3RyZWFtcyB0aGF0IHN1cHBvcnQgc29tZSBraW5kIG9mIGJ1ZmZlcmluZy4KKyAgIEl0IGluaGVyaXRzIDpjbGFzczpgSU9CYXNlYC4gVGhlcmUgaXMgbm8gcHVibGljIGNvbnN0cnVjdG9yLgogCi0gICBUaGUgbWFpbiBkaWZmZXJlbmNlIHdpdGggOmNsYXNzOmBSYXdJT0Jhc2VgIGlzIHRoYXQgdGhlIDptZXRoOmByZWFkYCBtZXRob2QKLSAgIHN1cHBvcnRzIG9taXR0aW5nIHRoZSAqc2l6ZSogYXJndW1lbnQsIGFuZCBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdAorICAgVGhlIG1haW4gZGlmZmVyZW5jZSB3aXRoIDpjbGFzczpgUmF3SU9CYXNlYCBpcyB0aGF0IG1ldGhvZHMgOm1ldGg6YHJlYWRgLAorICAgOm1ldGg6YHJlYWRpbnRvYCBhbmQgOm1ldGg6YHdyaXRlYCB3aWxsIHRyeSAocmVzcGVjdGl2ZWx5KSB0byByZWFkIGFzIG11Y2gKKyAgIGlucHV0IGFzIHJlcXVlc3RlZCBvciB0byBjb25zdW1lIGFsbCBnaXZlbiBvdXRwdXQsIGF0IHRoZSBleHBlbnNlIG9mCisgICBtYWtpbmcgcGVyaGFwcyBtb3JlIHRoYW4gb25lIHN5c3RlbSBjYWxsLgorCisgICBJbiBhZGRpdGlvbiwgdGhvc2UgbWV0aG9kcyBjYW4gcmFpc2UgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpZiB0aGUKKyAgIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyBpbiBub24tYmxvY2tpbmcgbW9kZSBhbmQgY2Fubm90IHRha2Ugb3IgZ2l2ZQorICAgZW5vdWdoIGRhdGE7IHVubGlrZSB0aGVpciA6Y2xhc3M6YFJhd0lPQmFzZWAgY291bnRlcnBhcnRzLCB0aGV5IHdpbGwKKyAgIG5ldmVyIHJldHVybiBgYE5vbmVgYC4KKworICAgQmVzaWRlcywgdGhlIDptZXRoOmByZWFkYCBtZXRob2QgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQKICAgIGltcGxlbWVudGF0aW9uIHRoYXQgZGVmZXJzIHRvIDptZXRoOmByZWFkaW50b2AuCiAKLSAgIEluIGFkZGl0aW9uLCA6bWV0aDpgcmVhZGAsIDptZXRoOmByZWFkaW50b2AsIGFuZCA6bWV0aDpgd3JpdGVgIG1heSByYWlzZQotICAgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIGluIG5vbi1ibG9ja2luZyBtb2RlCi0gICBhbmQgbm90IHJlYWR5OyB1bmxpa2UgdGhlaXIgcmF3IGNvdW50ZXJwYXJ0cywgdGhleSB3aWxsIG5ldmVyIHJldHVybgotICAgYGBOb25lYGAuCisgICBBIHR5cGljYWwgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAgaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBpbmhlcml0IGZyb20gYQorICAgOmNsYXNzOmBSYXdJT0Jhc2VgIGltcGxlbWVudGF0aW9uLCBidXQgd3JhcCBvbmUsIGxpa2UKKyAgIDpjbGFzczpgQnVmZmVyZWRXcml0ZXJgIGFuZCA6Y2xhc3M6YEJ1ZmZlcmVkUmVhZGVyYCBkby4KIAotICAgQSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgaW5oZXJpdCBmcm9tIGEgOmNsYXNzOmBSYXdJT0Jhc2VgCi0gICBpbXBsZW1lbnRhdGlvbiwgYnV0IHdyYXAgb25lIGxpa2UgOmNsYXNzOmBCdWZmZXJlZFdyaXRlcmAgYW5kCi0gICA6Y2xhc3M6YEJ1ZmZlcmVkUmVhZGVyYC4KLQotICAgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAgcHJvdmlkZXMgb3Igb3ZlcnJpZGVzIHRoZXNlIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8KKyAgIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIHByb3ZpZGVzIG9yIG92ZXJyaWRlcyB0aGVzZSBtZW1iZXJzIGluIGFkZGl0aW9uIHRvCiAgICB0aG9zZSBmcm9tIDpjbGFzczpgSU9CYXNlYDoKIAotICAgLi4gbWV0aG9kOjogcmVhZChbbl0pCisgICAuLiBhdHRyaWJ1dGU6OiByYXcKKworICAgICAgVGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSAoYSA6Y2xhc3M6YFJhd0lPQmFzZWAgaW5zdGFuY2UpIHRoYXQKKyAgICAgIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIGRlYWxzIHdpdGguICBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZQorICAgICAgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAgQVBJIGFuZCBtYXkgbm90IGV4aXN0IG9uIHNvbWUgaW1wbGVtZW50YXRpb25zLgorCisgICAuLiBtZXRob2Q6OiBkZXRhY2goKQorCisgICAgICBTZXBhcmF0ZSB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGZyb20gdGhlIGJ1ZmZlciBhbmQgcmV0dXJuIGl0LgorCisgICAgICBBZnRlciB0aGUgcmF3IHN0cmVhbSBoYXMgYmVlbiBkZXRhY2hlZCwgdGhlIGJ1ZmZlciBpcyBpbiBhbiB1bnVzYWJsZQorICAgICAgc3RhdGUuCisKKyAgICAgIFNvbWUgYnVmZmVycywgbGlrZSA6Y2xhc3M6YEJ5dGVzSU9gLCBkbyBub3QgaGF2ZSB0aGUgY29uY2VwdCBvZiBhIHNpbmdsZQorICAgICAgcmF3IHN0cmVhbSB0byByZXR1cm4gZnJvbSB0aGlzIG1ldGhvZC4gIFRoZXkgcmFpc2UKKyAgICAgIDpleGM6YFVuc3VwcG9ydGVkT3BlcmF0aW9uYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKyAgIC4uIG1ldGhvZDo6IHJlYWQobj0tMSkKIAogICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcy4gIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBgYE5vbmVgYCwgb3IKICAgICAgIG5lZ2F0aXZlLCBkYXRhIGlzIHJlYWQgYW5kIHJldHVybmVkIHVudGlsIEVPRiBpcyByZWFjaGVkLiAgQW4gZW1wdHkgYnl0ZXMKQEAgLTM3OCw4ICs0NDEsMTUgQEAKICAgICAgIG9uZSByYXcgcmVhZCB3aWxsIGJlIGlzc3VlZCwgYW5kIGEgc2hvcnQgcmVzdWx0IGRvZXMgbm90IGltcGx5IHRoYXQgRU9GIGlzCiAgICAgICBpbW1pbmVudC4KIAotICAgICAgQSA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGhhcyBubwotICAgICAgZGF0YSBhdCB0aGUgbW9tZW50LgorICAgICAgQSA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIGluCisgICAgICBub24gYmxvY2tpbmctbW9kZSwgYW5kIGhhcyBubyBkYXRhIGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50LgorCisgICAuLiBtZXRob2Q6OiByZWFkMShuPS0xKQorCisgICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKm4qIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcKKyAgICAgIHJhdyBzdHJlYW0ncyA6bWV0aDpgflJhd0lPQmFzZS5yZWFkYCBtZXRob2QuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91CisgICAgICBhcmUgaW1wbGVtZW50aW5nIHlvdXIgb3duIGJ1ZmZlcmluZyBvbiB0b3Agb2YgYSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYAorICAgICAgb2JqZWN0LgogCiAgICAuLiBtZXRob2Q6OiByZWFkaW50byhiKQogCkBAIC0zODcsMzUgKzQ1Nyw0NyBAQAogICAgICAgcmVhZC4KIAogICAgICAgTGlrZSA6bWV0aDpgcmVhZGAsIG11bHRpcGxlIHJlYWRzIG1heSBiZSBpc3N1ZWQgdG8gdGhlIHVuZGVybHlpbmcgcmF3Ci0gICAgICBzdHJlYW0sIHVubGVzcyB0aGUgbGF0dGVyIGlzICdpbnRlcmFjdGl2ZS4nCisgICAgICBzdHJlYW0sIHVubGVzcyB0aGUgbGF0dGVyIGlzICdpbnRlcmFjdGl2ZScuCiAKLSAgICAgIEEgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpcyByYWlzZWQgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBoYXMgbm8KLSAgICAgIGRhdGEgYXQgdGhlIG1vbWVudC4KKyAgICAgIEEgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpcyByYWlzZWQgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyBpbgorICAgICAgbm9uIGJsb2NraW5nLW1vZGUsIGFuZCBoYXMgbm8gZGF0YSBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC4KIAogICAgLi4gbWV0aG9kOjogd3JpdGUoYikKIAotICAgICAgV3JpdGUgdGhlIGdpdmVuIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QsICpiKiwgdG8gdGhlIHVuZGVybHlpbmcgcmF3Ci0gICAgICBzdHJlYW0gYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gKG5ldmVyIGxlc3MgdGhhbiBgYGxlbihiKWBgLAotICAgICAgc2luY2UgaWYgdGhlIHdyaXRlIGZhaWxzIGFuIDpleGM6YElPRXJyb3JgIHdpbGwgYmUgcmFpc2VkKS4KKyAgICAgIFdyaXRlIHRoZSBnaXZlbiBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LCAqYiogYW5kIHJldHVybiB0aGUgbnVtYmVyCisgICAgICBvZiBieXRlcyB3cml0dGVuIChuZXZlciBsZXNzIHRoYW4gYGBsZW4oYilgYCwgc2luY2UgaWYgdGhlIHdyaXRlIGZhaWxzCisgICAgICBhbiA6ZXhjOmBJT0Vycm9yYCB3aWxsIGJlIHJhaXNlZCkuICBEZXBlbmRpbmcgb24gdGhlIGFjdHVhbAorICAgICAgaW1wbGVtZW50YXRpb24sIHRoZXNlIGJ5dGVzIG1heSBiZSByZWFkaWx5IHdyaXR0ZW4gdG8gdGhlIHVuZGVybHlpbmcKKyAgICAgIHN0cmVhbSwgb3IgaGVsZCBpbiBhIGJ1ZmZlciBmb3IgcGVyZm9ybWFuY2UgYW5kIGxhdGVuY3kgcmVhc29ucy4KIAotICAgICAgQSA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgYnVmZmVyIGlzIGZ1bGwsIGFuZCB0aGUKLSAgICAgIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBjYW5ub3QgYWNjZXB0IG1vcmUgZGF0YSBhdCB0aGUgbW9tZW50LgorICAgICAgV2hlbiBpbiBub24tYmxvY2tpbmcgbW9kZSwgYSA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUKKyAgICAgIGRhdGEgbmVlZGVkIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJhdyBzdHJlYW0gYnV0IGl0IGNvdWxkbid0IGFjY2VwdAorICAgICAgYWxsIHRoZSBkYXRhIHdpdGhvdXQgYmxvY2tpbmcuCiAKIAogUmF3IEZpbGUgSS9PCiAtLS0tLS0tLS0tLS0KIAotLi4gY2xhc3M6OiBGaWxlSU8obmFtZVssIG1vZGVdKQorLi4gY2xhc3M6OiBGaWxlSU8obmFtZSwgbW9kZT0ncicsIGNsb3NlZmQ9VHJ1ZSkKIAotICAgOmNsYXNzOmBGaWxlSU9gIHJlcHJlc2VudHMgYSBmaWxlIGNvbnRhaW5pbmcgYnl0ZXMgZGF0YS4gIEl0IGltcGxlbWVudHMKLSAgIHRoZSA6Y2xhc3M6YFJhd0lPQmFzZWAgaW50ZXJmYWNlIChhbmQgdGhlcmVmb3JlIHRoZSA6Y2xhc3M6YElPQmFzZWAKLSAgIGludGVyZmFjZSwgdG9vKS4KKyAgIDpjbGFzczpgRmlsZUlPYCByZXByZXNlbnRzIGFuIE9TLWxldmVsIGZpbGUgY29udGFpbmluZyBieXRlcyBkYXRhLgorICAgSXQgaW1wbGVtZW50cyB0aGUgOmNsYXNzOmBSYXdJT0Jhc2VgIGludGVyZmFjZSAoYW5kIHRoZXJlZm9yZSB0aGUKKyAgIDpjbGFzczpgSU9CYXNlYCBpbnRlcmZhY2UsIHRvbykuCisKKyAgIFRoZSAqbmFtZSogY2FuIGJlIG9uZSBvZiB0d28gdGhpbmdzOgorCisgICAqIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCB0byB0aGUgZmlsZSB3aGljaCB3aWxsIGJlIG9wZW5lZDsKKyAgICogYW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBhbiBleGlzdGluZyBPUy1sZXZlbCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgdG8gd2hpY2ggdGhlIHJlc3VsdGluZyA6Y2xhc3M6YEZpbGVJT2Agb2JqZWN0IHdpbGwgZ2l2ZSBhY2Nlc3MuCiAKICAgIFRoZSAqbW9kZSogY2FuIGJlIGBgJ3InYGAsIGBgJ3cnYGAgb3IgYGAnYSdgYCBmb3IgcmVhZGluZyAoZGVmYXVsdCksIHdyaXRpbmcsCiAgICBvciBhcHBlbmRpbmcuICBUaGUgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdCB3aGVuIG9wZW5lZCBmb3IKICAgIHdyaXRpbmcgb3IgYXBwZW5kaW5nOyBpdCB3aWxsIGJlIHRydW5jYXRlZCB3aGVuIG9wZW5lZCBmb3Igd3JpdGluZy4gIEFkZCBhCiAgICBgYCcrJ2BgIHRvIHRoZSBtb2RlIHRvIGFsbG93IHNpbXVsdGFuZW91cyByZWFkaW5nIGFuZCB3cml0aW5nLgogCisgICBUaGUgOm1ldGg6YHJlYWRgICh3aGVuIGNhbGxlZCB3aXRoIGEgcG9zaXRpdmUgYXJndW1lbnQpLCA6bWV0aDpgcmVhZGludG9gCisgICBhbmQgOm1ldGg6YHdyaXRlYCBtZXRob2RzIG9uIHRoaXMgY2xhc3Mgd2lsbCBvbmx5IG1ha2Ugb25lIHN5c3RlbSBjYWxsLgorCiAgICBJbiBhZGRpdGlvbiB0byB0aGUgYXR0cmlidXRlcyBhbmQgbWV0aG9kcyBmcm9tIDpjbGFzczpgSU9CYXNlYCBhbmQKICAgIDpjbGFzczpgUmF3SU9CYXNlYCwgOmNsYXNzOmBGaWxlSU9gIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZGF0YQogICAgYXR0cmlidXRlcyBhbmQgbWV0aG9kczoKQEAgLTQyOSwzOCArNTExLDE5IEBACiAgICAgICBUaGUgZmlsZSBuYW1lLiAgVGhpcyBpcyB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBmaWxlIHdoZW4gbm8gbmFtZSBpcwogICAgICAgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLgogCi0gICAuLiBtZXRob2Q6OiByZWFkKFtuXSkKLQotICAgICAgUmVhZCBhbmQgcmV0dXJuIGF0IG1vc3QgKm4qIGJ5dGVzLiAgT25seSBvbmUgc3lzdGVtIGNhbGwgaXMgbWFkZSwgc28gaXQgaXMKLSAgICAgIHBvc3NpYmxlIHRoYXQgbGVzcyBkYXRhIHRoYW4gd2FzIHJlcXVlc3RlZCBpcyByZXR1cm5lZC4gIFVzZSA6ZnVuYzpgbGVuYAotICAgICAgb24gdGhlIHJldHVybmVkIGJ5dGVzIG9iamVjdCB0byBzZWUgaG93IG1hbnkgYnl0ZXMgd2VyZSBhY3R1YWxseSByZXR1cm5lZC4KLSAgICAgIChJbiBub24tYmxvY2tpbmcgbW9kZSwgYGBOb25lYGAgaXMgcmV0dXJuZWQgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZS4pCi0KLSAgIC4uIG1ldGhvZDo6IHJlYWRhbGwoKQotCi0gICAgICBSZWFkIGFuZCByZXR1cm4gdGhlIGVudGlyZSBmaWxlJ3MgY29udGVudHMgaW4gYSBzaW5nbGUgYnl0ZXMgb2JqZWN0LiAgQXMKLSAgICAgIG11Y2ggYXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIGlzIHJldHVybmVkIGluIG5vbi1ibG9ja2luZyBtb2RlLiAgSWYgdGhlCi0gICAgICBFT0YgaGFzIGJlZW4gcmVhY2hlZCwgYGBiJydgYCBpcyByZXR1cm5lZC4KLQotICAgLi4gbWV0aG9kOjogd3JpdGUoYikKLQotICAgICAgV3JpdGUgdGhlIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QsICpiKiwgdG8gdGhlIGZpbGUsIGFuZCByZXR1cm4KLSAgICAgIHRoZSBudW1iZXIgYWN0dWFsbHkgd3JpdHRlbi4gT25seSBvbmUgc3lzdGVtIGNhbGwgaXMgbWFkZSwgc28gaXQKLSAgICAgIGlzIHBvc3NpYmxlIHRoYXQgb25seSBzb21lIG9mIHRoZSBkYXRhIGlzIHdyaXR0ZW4uCi0KLSAgIE5vdGUgdGhhdCB0aGUgaW5oZXJpdGVkIGBgcmVhZGludG8oKWBgIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQgb24KLSAgIDpjbGFzczpgRmlsZUlPYCBvYmplY3RzLgotCiAKIEJ1ZmZlcmVkIFN0cmVhbXMKIC0tLS0tLS0tLS0tLS0tLS0KIAorQnVmZmVyZWQgSS9PIHN0cmVhbXMgcHJvdmlkZSBhIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UgdG8gYW4gSS9PIGRldmljZQordGhhbiByYXcgSS9PIGRvZXMuCisKIC4uIGNsYXNzOjogQnl0ZXNJTyhbaW5pdGlhbF9ieXRlc10pCiAKICAgIEEgc3RyZWFtIGltcGxlbWVudGF0aW9uIHVzaW5nIGFuIGluLW1lbW9yeSBieXRlcyBidWZmZXIuICBJdCBpbmhlcml0cwogICAgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAuCiAKLSAgIFRoZSBhcmd1bWVudCAqaW5pdGlhbF9ieXRlcyogaXMgYW4gb3B0aW9uYWwgaW5pdGlhbCBieXRlYXJyYXkuCisgICBUaGUgYXJndW1lbnQgKmluaXRpYWxfYnl0ZXMqIGlzIGFuIG9wdGlvbmFsIGluaXRpYWwgOmNsYXNzOmBieXRlc2AuCiAKICAgIDpjbGFzczpgQnl0ZXNJT2AgcHJvdmlkZXMgb3Igb3ZlcnJpZGVzIHRoZXNlIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8gdGhvc2UKICAgIGZyb20gOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAgYW5kIDpjbGFzczpgSU9CYXNlYDoKQEAgLTQ3NCwxMCArNTM3LDEzIEBACiAgICAgICBJbiA6Y2xhc3M6YEJ5dGVzSU9gLCB0aGlzIGlzIHRoZSBzYW1lIGFzIDptZXRoOmByZWFkYC4KIAogCi0uLiBjbGFzczo6IEJ1ZmZlcmVkUmVhZGVyKHJhd1ssIGJ1ZmZlcl9zaXplXSkKKy4uIGNsYXNzOjogQnVmZmVyZWRSZWFkZXIocmF3LCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKQogCi0gICBBIGJ1ZmZlciBmb3IgYSByZWFkYWJsZSwgc2VxdWVudGlhbCA6Y2xhc3M6YFJhd0lPQmFzZWAgb2JqZWN0LiAgSXQgaW5oZXJpdHMKLSAgIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgLgorICAgQSBidWZmZXIgcHJvdmlkaW5nIGhpZ2hlci1sZXZlbCBhY2Nlc3MgdG8gYSByZWFkYWJsZSwgc2VxdWVudGlhbAorICAgOmNsYXNzOmBSYXdJT0Jhc2VgIG9iamVjdC4gIEl0IGluaGVyaXRzIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgLgorICAgV2hlbiByZWFkaW5nIGRhdGEgZnJvbSB0aGlzIG9iamVjdCwgYSBsYXJnZXIgYW1vdW50IG9mIGRhdGEgbWF5IGJlCisgICByZXF1ZXN0ZWQgZnJvbSB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtLCBhbmQga2VwdCBpbiBhbiBpbnRlcm5hbCBidWZmZXIuCisgICBUaGUgYnVmZmVyZWQgZGF0YSBjYW4gdGhlbiBiZSByZXR1cm5lZCBkaXJlY3RseSBvbiBzdWJzZXF1ZW50IHJlYWRzLgogCiAgICBUaGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgIGZvciB0aGUgZ2l2ZW4gcmVhZGFibGUKICAgICpyYXcqIHN0cmVhbSBhbmQgKmJ1ZmZlcl9zaXplKi4gIElmICpidWZmZXJfc2l6ZSogaXMgb21pdHRlZCwKQEAgLTQ4OCwxMSArNTU0LDkgQEAKIAogICAgLi4gbWV0aG9kOjogcGVlayhbbl0pCiAKLSAgICAgIFJldHVybiAxIChvciAqbiogaWYgc3BlY2lmaWVkKSBieXRlcyBmcm9tIGEgYnVmZmVyIHdpdGhvdXQgYWR2YW5jaW5nIHRoZQotICAgICAgcG9zaXRpb24uICBPbmx5IGEgc2luZ2xlIHJlYWQgb24gdGhlIHJhdyBzdHJlYW0gaXMgZG9uZSB0byBzYXRpc2Z5IHRoZQotICAgICAgY2FsbC4gVGhlIG51bWJlciBvZiBieXRlcyByZXR1cm5lZCBtYXkgYmUgbGVzcyB0aGFuIHJlcXVlc3RlZCBzaW5jZSBhdAotICAgICAgbW9zdCBhbGwgdGhlIGJ1ZmZlcidzIGJ5dGVzIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZCBhcmUKLSAgICAgIHJldHVybmVkLgorICAgICAgUmV0dXJuIGJ5dGVzIGZyb20gdGhlIHN0cmVhbSB3aXRob3V0IGFkdmFuY2luZyB0aGUgcG9zaXRpb24uICBBdCBtb3N0IG9uZQorICAgICAgc2luZ2xlIHJlYWQgb24gdGhlIHJhdyBzdHJlYW0gaXMgZG9uZSB0byBzYXRpc2Z5IHRoZSBjYWxsLiBUaGUgbnVtYmVyIG9mCisgICAgICBieXRlcyByZXR1cm5lZCBtYXkgYmUgbGVzcyBvciBtb3JlIHRoYW4gcmVxdWVzdGVkLgogCiAgICAuLiBtZXRob2Q6OiByZWFkKFtuXSkKIApAQCAtNTA2LDE1ICs1NzAsMjQgQEAKICAgICAgIE90aGVyd2lzZSwgb25lIHJhdyBzdHJlYW0gcmVhZCBjYWxsIGlzIG1hZGUuCiAKIAotLi4gY2xhc3M6OiBCdWZmZXJlZFdyaXRlcihyYXdbLCBidWZmZXJfc2l6ZVssIG1heF9idWZmZXJfc2l6ZV1dKQorLi4gY2xhc3M6OiBCdWZmZXJlZFdyaXRlcihyYXcsIGJ1ZmZlcl9zaXplPURFRkFVTFRfQlVGRkVSX1NJWkUpCiAKLSAgIEEgYnVmZmVyIGZvciBhIHdyaXRlYWJsZSBzZXF1ZW50aWFsIFJhd0lPIG9iamVjdC4gIEl0IGluaGVyaXRzCi0gICA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYC4KKyAgIEEgYnVmZmVyIHByb3ZpZGluZyBoaWdoZXItbGV2ZWwgYWNjZXNzIHRvIGEgd3JpdGVhYmxlLCBzZXF1ZW50aWFsCisgICA6Y2xhc3M6YFJhd0lPQmFzZWAgb2JqZWN0LiAgSXQgaW5oZXJpdHMgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAuCisgICBXaGVuIHdyaXRpbmcgdG8gdGhpcyBvYmplY3QsIGRhdGEgaXMgbm9ybWFsbHkgaGVsZCBpbnRvIGFuIGludGVybmFsCisgICBidWZmZXIuICBUaGUgYnVmZmVyIHdpbGwgYmUgd3JpdHRlbiBvdXQgdG8gdGhlIHVuZGVybHlpbmcgOmNsYXNzOmBSYXdJT0Jhc2VgCisgICBvYmplY3QgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zLCBpbmNsdWRpbmc6CisKKyAgICogd2hlbiB0aGUgYnVmZmVyIGdldHMgdG9vIHNtYWxsIGZvciBhbGwgcGVuZGluZyBkYXRhOworICAgKiB3aGVuIDptZXRoOmBmbHVzaCgpYCBpcyBjYWxsZWQ7CisgICAqIHdoZW4gYSA6bWV0aDpgc2VlaygpYCBpcyByZXF1ZXN0ZWQgKGZvciA6Y2xhc3M6YEJ1ZmZlcmVkUmFuZG9tYCBvYmplY3RzKTsKKyAgICogd2hlbiB0aGUgOmNsYXNzOmBCdWZmZXJlZFdyaXRlcmAgb2JqZWN0IGlzIGNsb3NlZCBvciBkZXN0cm95ZWQuCiAKICAgIFRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgOmNsYXNzOmBCdWZmZXJlZFdyaXRlcmAgZm9yIHRoZSBnaXZlbiB3cml0ZWFibGUKICAgICpyYXcqIHN0cmVhbS4gIElmIHRoZSAqYnVmZmVyX3NpemUqIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG8KLSAgIDpkYXRhOmBERUFGVUxUX0JVRkZFUl9TSVpFYC4gIElmICptYXhfYnVmZmVyX3NpemUqIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvCi0gICB0d2ljZSB0aGUgYnVmZmVyIHNpemUuCisgICA6ZGF0YTpgREVGQVVMVF9CVUZGRVJfU0laRWAuCisKKyAgIEEgdGhpcmQgYXJndW1lbnQsICptYXhfYnVmZmVyX3NpemUqLCBpcyBzdXBwb3J0ZWQsIGJ1dCB1bnVzZWQgYW5kIGRlcHJlY2F0ZWQuCiAKICAgIDpjbGFzczpgQnVmZmVyZWRXcml0ZXJgIHByb3ZpZGVzIG9yIG92ZXJyaWRlcyB0aGVzZSBtZXRob2RzIGluIGFkZGl0aW9uIHRvCiAgICB0aG9zZSBmcm9tIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIGFuZCA6Y2xhc3M6YElPQmFzZWA6CkBAIC01MjYsMzUgKzU5OSw0MSBAQAogCiAgICAuLiBtZXRob2Q6OiB3cml0ZShiKQogCi0gICAgICBXcml0ZSB0aGUgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdCwgKmIqLCBvbnRvIHRoZSByYXcgc3RyZWFtIGFuZCByZXR1cm4KLSAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4gIEEgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpcyByYWlzZWQgd2hlbiB0aGUKLSAgICAgIHJhdyBzdHJlYW0gYmxvY2tzLgorICAgICAgV3JpdGUgdGhlIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QsICpiKiBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAgICAgIHdyaXR0ZW4uICBXaGVuIGluIG5vbi1ibG9ja2luZyBtb2RlLCBhIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaXMgcmFpc2VkCisgICAgICBpZiB0aGUgYnVmZmVyIG5lZWRzIHRvIGJlIHdyaXR0ZW4gb3V0IGJ1dCB0aGUgcmF3IHN0cmVhbSBibG9ja3MuCiAKIAotLi4gY2xhc3M6OiBCdWZmZXJlZFJXUGFpcihyZWFkZXIsIHdyaXRlclssIGJ1ZmZlcl9zaXplWywgbWF4X2J1ZmZlcl9zaXplXV0pCisuLiBjbGFzczo6IEJ1ZmZlcmVkUldQYWlyKHJlYWRlciwgd3JpdGVyLCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKQogCi0gICBBIGNvbWJpbmVkIGJ1ZmZlcmVkIHdyaXRlciBhbmQgcmVhZGVyIG9iamVjdCBmb3IgYSByYXcgc3RyZWFtIHRoYXQgY2FuIGJlCi0gICB3cml0dGVuIHRvIGFuZCByZWFkIGZyb20uICBJdCBoYXMgYW5kIHN1cHBvcnRzIGJvdGggOm1ldGg6YHJlYWRgLCA6bWV0aDpgd3JpdGVgLAotICAgYW5kIHRoZWlyIHZhcmlhbnRzLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHNvY2tldHMgYW5kIHR3by13YXkgcGlwZXMuCi0gICBJdCBpbmhlcml0cyA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYC4KKyAgIEEgYnVmZmVyZWQgSS9PIG9iamVjdCBnaXZpbmcgYSBjb21iaW5lZCwgaGlnaGVyLWxldmVsIGFjY2VzcyB0byB0d28KKyAgIHNlcXVlbnRpYWwgOmNsYXNzOmBSYXdJT0Jhc2VgIG9iamVjdHM6IG9uZSByZWFkYWJsZSwgdGhlIG90aGVyIHdyaXRlYWJsZS4KKyAgIEl0IGlzIHVzZWZ1bCBmb3IgcGFpcnMgb2YgdW5pZGlyZWN0aW9uYWwgY29tbXVuaWNhdGlvbiBjaGFubmVscworICAgKHBpcGVzLCBmb3IgaW5zdGFuY2UpLiAgSXQgaW5oZXJpdHMgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAuCiAKICAgICpyZWFkZXIqIGFuZCAqd3JpdGVyKiBhcmUgOmNsYXNzOmBSYXdJT0Jhc2VgIG9iamVjdHMgdGhhdCBhcmUgcmVhZGFibGUgYW5kCiAgICB3cml0ZWFibGUgcmVzcGVjdGl2ZWx5LiAgSWYgdGhlICpidWZmZXJfc2l6ZSogaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0bwotICAgOmRhdGE6YERFRkFVTFRfQlVGRkVSX1NJWkVgLiAgVGhlICptYXhfYnVmZmVyX3NpemUqIChmb3IgdGhlIGJ1ZmZlcmVkIHdyaXRlcikKLSAgIGRlZmF1bHRzIHRvIHR3aWNlIHRoZSBidWZmZXIgc2l6ZS4KKyAgIDpkYXRhOmBERUZBVUxUX0JVRkZFUl9TSVpFYC4KIAotICAgOmNsYXNzOmBCdWZmZXJlZFJXUGFpcmAgaW1wbGVtZW50cyBhbGwgb2YgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWBcJ3MgbWV0aG9kcy4KKyAgIEEgZm91cnRoIGFyZ3VtZW50LCAqbWF4X2J1ZmZlcl9zaXplKiwgaXMgc3VwcG9ydGVkLCBidXQgdW51c2VkIGFuZAorICAgZGVwcmVjYXRlZC4KKworICAgOmNsYXNzOmBCdWZmZXJlZFJXUGFpcmAgaW1wbGVtZW50cyBhbGwgb2YgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWBcJ3MgbWV0aG9kcworICAgZXhjZXB0IGZvciA6bWV0aDpgfkJ1ZmZlcmVkSU9CYXNlLmRldGFjaGAsIHdoaWNoIHJhaXNlcworICAgOmV4YzpgVW5zdXBwb3J0ZWRPcGVyYXRpb25gLgogCiAKLS4uIGNsYXNzOjogQnVmZmVyZWRSYW5kb20ocmF3WywgYnVmZmVyX3NpemVbLCBtYXhfYnVmZmVyX3NpemVdXSkKKy4uIGNsYXNzOjogQnVmZmVyZWRSYW5kb20ocmF3LCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKQogCiAgICBBIGJ1ZmZlcmVkIGludGVyZmFjZSB0byByYW5kb20gYWNjZXNzIHN0cmVhbXMuICBJdCBpbmhlcml0cwotICAgOmNsYXNzOmBCdWZmZXJlZFJlYWRlcmAgYW5kIDpjbGFzczpgQnVmZmVyZWRXcml0ZXJgLgorICAgOmNsYXNzOmBCdWZmZXJlZFJlYWRlcmAgYW5kIDpjbGFzczpgQnVmZmVyZWRXcml0ZXJgLCBhbmQgZnVydGhlciBzdXBwb3J0cworICAgOm1ldGg6YHNlZWtgIGFuZCA6bWV0aDpgdGVsbGAgZnVuY3Rpb25hbGl0eS4KIAogICAgVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSByZWFkZXIgYW5kIHdyaXRlciBmb3IgYSBzZWVrYWJsZSByYXcgc3RyZWFtLCBnaXZlbgogICAgaW4gdGhlIGZpcnN0IGFyZ3VtZW50LiAgSWYgdGhlICpidWZmZXJfc2l6ZSogaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0bwotICAgOmRhdGE6YERFRkFVTFRfQlVGRkVSX1NJWkVgLiAgVGhlICptYXhfYnVmZmVyX3NpemUqIChmb3IgdGhlIGJ1ZmZlcmVkIHdyaXRlcikKLSAgIGRlZmF1bHRzIHRvIHR3aWNlIHRoZSBidWZmZXIgc2l6ZS4KKyAgIDpkYXRhOmBERUZBVUxUX0JVRkZFUl9TSVpFYC4KKworICAgQSB0aGlyZCBhcmd1bWVudCwgKm1heF9idWZmZXJfc2l6ZSosIGlzIHN1cHBvcnRlZCwgYnV0IHVudXNlZCBhbmQgZGVwcmVjYXRlZC4KIAogICAgOmNsYXNzOmBCdWZmZXJlZFJhbmRvbWAgaXMgY2FwYWJsZSBvZiBhbnl0aGluZyA6Y2xhc3M6YEJ1ZmZlcmVkUmVhZGVyYCBvcgogICAgOmNsYXNzOmBCdWZmZXJlZFdyaXRlcmAgY2FuIGRvLgpAQCAtNTY1LDEwICs2NDQsMTAgQEAKIAogLi4gY2xhc3M6OiBUZXh0SU9CYXNlCiAKLSAgIEJhc2UgY2xhc3MgZm9yIHRleHQgc3RyZWFtcy4gIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBjaGFyYWN0ZXIgYW5kIGxpbmUgYmFzZWQKLSAgIGludGVyZmFjZSB0byBzdHJlYW0gSS9PLiAgVGhlcmUgaXMgbm8gOm1ldGg6YHJlYWRpbnRvYCBtZXRob2QgYmVjYXVzZQotICAgUHl0aG9uJ3MgY2hhcmFjdGVyIHN0cmluZ3MgYXJlIGltbXV0YWJsZS4gIEl0IGluaGVyaXRzIDpjbGFzczpgSU9CYXNlYC4KLSAgIFRoZXJlIGlzIG5vIHB1YmxpYyBjb25zdHJ1Y3Rvci4KKyAgIEJhc2UgY2xhc3MgZm9yIHRleHQgc3RyZWFtcy4gIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gdW5pY29kZSBjaGFyYWN0ZXIKKyAgIGFuZCBsaW5lIGJhc2VkIGludGVyZmFjZSB0byBzdHJlYW0gSS9PLiAgVGhlcmUgaXMgbm8gOm1ldGg6YHJlYWRpbnRvYAorICAgbWV0aG9kIGJlY2F1c2UgUHl0aG9uJ3MgOmNsYXNzOmB1bmljb2RlYCBzdHJpbmdzIGFyZSBpbW11dGFibGUuCisgICBJdCBpbmhlcml0cyA6Y2xhc3M6YElPQmFzZWAuICBUaGVyZSBpcyBubyBwdWJsaWMgY29uc3RydWN0b3IuCiAKICAgIDpjbGFzczpgVGV4dElPQmFzZWAgcHJvdmlkZXMgb3Igb3ZlcnJpZGVzIHRoZXNlIGRhdGEgYXR0cmlidXRlcyBhbmQKICAgIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8gdGhvc2UgZnJvbSA6Y2xhc3M6YElPQmFzZWA6CkBAIC01NzgsMzAgKzY1Nyw1NSBAQAogICAgICAgVGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIHVzZWQgdG8gZGVjb2RlIHRoZSBzdHJlYW0ncyBieXRlcyBpbnRvCiAgICAgICBzdHJpbmdzLCBhbmQgdG8gZW5jb2RlIHN0cmluZ3MgaW50byBieXRlcy4KIAorICAgLi4gYXR0cmlidXRlOjogZXJyb3JzCisKKyAgICAgIFRoZSBlcnJvciBzZXR0aW5nIG9mIHRoZSBkZWNvZGVyIG9yIGVuY29kZXIuCisKICAgIC4uIGF0dHJpYnV0ZTo6IG5ld2xpbmVzCiAKICAgICAgIEEgc3RyaW5nLCBhIHR1cGxlIG9mIHN0cmluZ3MsIG9yIGBgTm9uZWBgLCBpbmRpY2F0aW5nIHRoZSBuZXdsaW5lcwotICAgICAgdHJhbnNsYXRlZCBzbyBmYXIuCisgICAgICB0cmFuc2xhdGVkIHNvIGZhci4gIERlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBpbml0aWFsCisgICAgICBjb25zdHJ1Y3RvciBmbGFncywgdGhpcyBtYXkgbm90IGJlIGF2YWlsYWJsZS4KKworICAgLi4gYXR0cmlidXRlOjogYnVmZmVyCisKKyAgICAgIFRoZSB1bmRlcmx5aW5nIGJpbmFyeSBidWZmZXIgKGEgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAgaW5zdGFuY2UpIHRoYXQKKyAgICAgIDpjbGFzczpgVGV4dElPQmFzZWAgZGVhbHMgd2l0aC4gIFRoaXMgaXMgbm90IHBhcnQgb2YgdGhlCisgICAgICA6Y2xhc3M6YFRleHRJT0Jhc2VgIEFQSSBhbmQgbWF5IG5vdCBleGlzdCBvbiBzb21lIGltcGxlbWVudGF0aW9ucy4KKworICAgLi4gbWV0aG9kOjogZGV0YWNoKCkKKworICAgICAgU2VwYXJhdGUgdGhlIHVuZGVybHlpbmcgYmluYXJ5IGJ1ZmZlciBmcm9tIHRoZSA6Y2xhc3M6YFRleHRJT0Jhc2VgIGFuZAorICAgICAgcmV0dXJuIGl0LgorCisgICAgICBBZnRlciB0aGUgdW5kZXJseWluZyBidWZmZXIgaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSA6Y2xhc3M6YFRleHRJT0Jhc2VgIGlzCisgICAgICBpbiBhbiB1bnVzYWJsZSBzdGF0ZS4KKworICAgICAgU29tZSA6Y2xhc3M6YFRleHRJT0Jhc2VgIGltcGxlbWVudGF0aW9ucywgbGlrZSA6Y2xhc3M6YFN0cmluZ0lPYCwgbWF5IG5vdAorICAgICAgaGF2ZSB0aGUgY29uY2VwdCBvZiBhbiB1bmRlcmx5aW5nIGJ1ZmZlciBhbmQgY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsCisgICAgICByYWlzZSA6ZXhjOmBVbnN1cHBvcnRlZE9wZXJhdGlvbmAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCiAgICAuLiBtZXRob2Q6OiByZWFkKG4pCiAKICAgICAgIFJlYWQgYW5kIHJldHVybiBhdCBtb3N0ICpuKiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbSBhcyBhIHNpbmdsZQotICAgICAgOmNsYXNzOmBzdHJgLiAgSWYgKm4qIGlzIG5lZ2F0aXZlIG9yIGBgTm9uZWBgLCByZWFkcyB0byBFT0YuCisgICAgICA6Y2xhc3M6YHVuaWNvZGVgLiAgSWYgKm4qIGlzIG5lZ2F0aXZlIG9yIGBgTm9uZWBgLCByZWFkcyB1bnRpbCBFT0YuCiAKICAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKCkKIAotICAgICAgUmVhZCB1bnRpbCBuZXdsaW5lIG9yIEVPRiBhbmQgcmV0dXJuIGEgc2luZ2xlIGBgc3RyYGAuICBJZiB0aGUgc3RyZWFtIGlzCi0gICAgICBhbHJlYWR5IGF0IEVPRiwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorICAgICAgUmVhZCB1bnRpbCBuZXdsaW5lIG9yIEVPRiBhbmQgcmV0dXJuIGEgc2luZ2xlIGBgdW5pY29kZWBgLiAgSWYgdGhlCisgICAgICBzdHJlYW0gaXMgYWxyZWFkeSBhdCBFT0YsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KIAogICAgLi4gbWV0aG9kOjogd3JpdGUocykKIAotICAgICAgV3JpdGUgdGhlIHN0cmluZyAqcyogdG8gdGhlIHN0cmVhbSBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycwotICAgICAgd3JpdHRlbi4KKyAgICAgIFdyaXRlIHRoZSA6Y2xhc3M6YHVuaWNvZGVgIHN0cmluZyAqcyogdG8gdGhlIHN0cmVhbSBhbmQgcmV0dXJuIHRoZQorICAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbi4KIAogCi0uLiBjbGFzczo6IFRleHRJT1dyYXBwZXIoYnVmZmVyWywgZW5jb2RpbmdbLCBlcnJvcnNbLCBuZXdsaW5lWywgbGluZV9idWZmZXJpbmddXV1dKQorLi4gY2xhc3M6OiBUZXh0SU9XcmFwcGVyKGJ1ZmZlciwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSwgbGluZV9idWZmZXJpbmc9RmFsc2UpCiAKLSAgIEEgYnVmZmVyZWQgdGV4dCBzdHJlYW0gb3ZlciBhIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIHJhdyBzdHJlYW0sICpidWZmZXIqLgorICAgQSBidWZmZXJlZCB0ZXh0IHN0cmVhbSBvdmVyIGEgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAgYmluYXJ5IHN0cmVhbS4KICAgIEl0IGluaGVyaXRzIDpjbGFzczpgVGV4dElPQmFzZWAuCiAKICAgICplbmNvZGluZyogZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIHRoYXQgdGhlIHN0cmVhbSB3aWxsIGJlIGRlY29kZWQgb3IKQEAgLTYzMCwzMiArNzM0LDQ3IEBACiAgICBJZiAqbGluZV9idWZmZXJpbmcqIGlzIGBgVHJ1ZWBgLCA6bWV0aDpgZmx1c2hgIGlzIGltcGxpZWQgd2hlbiBhIGNhbGwgdG8KICAgIHdyaXRlIGNvbnRhaW5zIGEgbmV3bGluZSBjaGFyYWN0ZXIuCiAKLSAgIDpjbGFzczpgVGV4dElPV3JhcHBlcmAgcHJvdmlkZXMgdGhlc2UgZGF0YSBhdHRyaWJ1dGVzIGluIGFkZGl0aW9uIHRvIHRob3NlIG9mCisgICA6Y2xhc3M6YFRleHRJT1dyYXBwZXJgIHByb3ZpZGVzIG9uZSBhdHRyaWJ1dGUgaW4gYWRkaXRpb24gdG8gdGhvc2Ugb2YKICAgIDpjbGFzczpgVGV4dElPQmFzZWAgYW5kIGl0cyBwYXJlbnRzOgogCi0gICAuLiBhdHRyaWJ1dGU6OiBlcnJvcnMKLQotICAgICAgVGhlIGVuY29kaW5nIGFuZCBkZWNvZGluZyBlcnJvciBzZXR0aW5nLgotCiAgICAuLiBhdHRyaWJ1dGU6OiBsaW5lX2J1ZmZlcmluZwogCiAgICAgICBXaGV0aGVyIGxpbmUgYnVmZmVyaW5nIGlzIGVuYWJsZWQuCiAKIAotLi4gY2xhc3M6OiBTdHJpbmdJTyhbaW5pdGlhbF92YWx1ZVssIGVuY29kaW5nWywgZXJyb3JzWywgbmV3bGluZV1dXV0pCisuLiBjbGFzczo6IFN0cmluZ0lPKGluaXRpYWxfdmFsdWU9dScnLCBuZXdsaW5lPU5vbmUpCiAKLSAgIEFuIGluLW1lbW9yeSBzdHJlYW0gZm9yIHRleHQuICBJdCBpbmhlcml0cyA6Y2xhc3M6YFRleHRJT1dyYXBwZXJgLgorICAgQW4gaW4tbWVtb3J5IHN0cmVhbSBmb3IgdW5pY29kZSB0ZXh0LiAgSXQgaW5oZXJpdHMgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYC4KIAotICAgQ3JlYXRlIGEgbmV3IFN0cmluZ0lPIHN0cmVhbSB3aXRoIGFuIGluaXRhbCB2YWx1ZSwgZW5jb2RpbmcsIGVycm9yIGhhbmRsaW5nLAotICAgYW5kIG5ld2xpbmUgc2V0dGluZy4gIFNlZSA6Y2xhc3M6YFRleHRJT1dyYXBwZXJgXCdzIGNvbnN0cnVjdG9yIGZvciBtb3JlCi0gICBpbmZvcm1hdGlvbi4KKyAgIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBidWZmZXIgKGFuIGVtcHR5IHVuaWNvZGUgc3RyaW5nIGJ5IGRlZmF1bHQpIGNhbgorICAgYmUgc2V0IGJ5IHByb3ZpZGluZyAqaW5pdGlhbF92YWx1ZSouICBUaGUgKm5ld2xpbmUqIGFyZ3VtZW50IHdvcmtzIGxpa2UKKyAgIHRoYXQgb2YgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYC4gIFRoZSBkZWZhdWx0IGlzIHRvIGRvIG5vIG5ld2xpbmUKKyAgIHRyYW5zbGF0aW9uLgogCiAgICA6Y2xhc3M6YFN0cmluZ0lPYCBwcm92aWRlcyB0aGlzIG1ldGhvZCBpbiBhZGRpdGlvbiB0byB0aG9zZSBmcm9tCiAgICA6Y2xhc3M6YFRleHRJT1dyYXBwZXJgIGFuZCBpdHMgcGFyZW50czoKIAogICAgLi4gbWV0aG9kOjogZ2V0dmFsdWUoKQogCi0gICAgICBSZXR1cm4gYSBgYHN0cmBgIGNvbnRhaW5pbmcgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyLgorICAgICAgUmV0dXJuIGEgYGB1bmljb2RlYGAgY29udGFpbmluZyB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgYXQgYW55CisgICAgICB0aW1lIGJlZm9yZSB0aGUgOmNsYXNzOmBTdHJpbmdJT2Agb2JqZWN0J3MgOm1ldGg6YGNsb3NlYCBtZXRob2QgaXMKKyAgICAgIGNhbGxlZC4KKworICAgRXhhbXBsZSB1c2FnZTo6CisKKyAgICAgIGltcG9ydCBpbworCisgICAgICBvdXRwdXQgPSBpby5TdHJpbmdJTygpCisgICAgICBvdXRwdXQud3JpdGUodSdGaXJzdCBsaW5lLlxuJykKKyAgICAgIG91dHB1dC53cml0ZSh1J1NlY29uZCBsaW5lLlxuJykKKworICAgICAgIyBSZXRyaWV2ZSBmaWxlIGNvbnRlbnRzIC0tIHRoaXMgd2lsbCBiZQorICAgICAgIyB1J0ZpcnN0IGxpbmUuXG5TZWNvbmQgbGluZS5cbicKKyAgICAgIGNvbnRlbnRzID0gb3V0cHV0LmdldHZhbHVlKCkKKworICAgICAgIyBDbG9zZSBvYmplY3QgYW5kIGRpc2NhcmQgbWVtb3J5IGJ1ZmZlciAtLQorICAgICAgIyAuZ2V0dmFsdWUoKSB3aWxsIG5vdyByYWlzZSBhbiBleGNlcHRpb24uCisgICAgICBvdXRwdXQuY2xvc2UoKQogCiAKIC4uIGNsYXNzOjogSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcgpAQCAtNjYzLDMgKzc4Miw2OCBAQAogICAgQSBoZWxwZXIgY29kZWMgdGhhdCBkZWNvZGVzIG5ld2xpbmVzIGZvciB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS4gIEl0CiAgICBpbmhlcml0cyA6Y2xhc3M6YGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXJgLgogCisKK0FkdmFuY2VkIHRvcGljcworLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUgd2Ugd2lsbCBkaXNjdXNzIHNldmVyYWwgYWR2YW5jZWQgdG9waWNzIHBlcnRhaW5pbmcgdG8gdGhlIGNvbmNyZXRlCitJL08gaW1wbGVtZW50YXRpb25zIGRlc2NyaWJlZCBhYm92ZS4KKworUGVyZm9ybWFuY2UKK15eXl5eXl5eXl5eCisKK0JpbmFyeSBJL08KKyIiIiIiIiIiIiIKKworQnkgcmVhZGluZyBhbmQgd3JpdGluZyBvbmx5IGxhcmdlIGNodW5rcyBvZiBkYXRhIGV2ZW4gd2hlbiB0aGUgdXNlciBhc2tzCitmb3IgYSBzaW5nbGUgYnl0ZSwgYnVmZmVyZWQgSS9PIGlzIGRlc2lnbmVkIHRvIGhpZGUgYW55IGluZWZmaWNpZW5jeSBpbgorY2FsbGluZyBhbmQgZXhlY3V0aW5nIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgdW5idWZmZXJlZCBJL08gcm91dGluZXMuICBUaGUKK2dhaW4gd2lsbCB2YXJ5IHZlcnkgbXVjaCBkZXBlbmRpbmcgb24gdGhlIE9TIGFuZCB0aGUga2luZCBvZiBJL08gd2hpY2ggaXMKK3BlcmZvcm1lZCAoZm9yIGV4YW1wbGUsIG9uIHNvbWUgY29udGVtcG9yYXJ5IE9TZXMgc3VjaCBhcyBMaW51eCwgdW5idWZmZXJlZAorZGlzayBJL08gY2FuIGJlIGFzIGZhc3QgYXMgYnVmZmVyZWQgSS9PKS4gIFRoZSBib3R0b20gbGluZSwgaG93ZXZlciwgaXMKK3RoYXQgYnVmZmVyZWQgSS9PIHdpbGwgb2ZmZXIgeW91IHByZWRpY3RhYmxlIHBlcmZvcm1hbmNlIHJlZ2FyZGxlc3Mgb2YgdGhlCitwbGF0Zm9ybSBhbmQgdGhlIGJhY2tpbmcgZGV2aWNlLiAgVGhlcmVmb3JlLCBpdCBpcyBtb3N0IGFsd2F5cyBwcmVmZXJhYmxlIHRvCit1c2UgYnVmZmVyZWQgSS9PIHJhdGhlciB0aGFuIHVuYnVmZmVyZWQgSS9PLgorCitUZXh0IEkvTworIiIiIiIiIiIKKworVGV4dCBJL08gb3ZlciBhIGJpbmFyeSBzdG9yYWdlIChzdWNoIGFzIGEgZmlsZSkgaXMgc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhhbgorYmluYXJ5IEkvTyBvdmVyIHRoZSBzYW1lIHN0b3JhZ2UsIGJlY2F1c2UgaXQgaW1wbGllcyBjb252ZXJzaW9ucyBmcm9tCit1bmljb2RlIHRvIGJpbmFyeSBkYXRhIHVzaW5nIGEgY2hhcmFjdGVyIGNvZGVjLiAgVGhpcyBjYW4gYmVjb21lIG5vdGljZWFibGUKK2lmIHlvdSBoYW5kbGUgaHVnZSBhbW91bnRzIG9mIHRleHQgZGF0YSAoZm9yIGV4YW1wbGUgdmVyeSBsYXJnZSBsb2cgZmlsZXMpLgorQWxzbywgOm1ldGg6YFRleHRJT1dyYXBwZXIudGVsbGAgYW5kIDptZXRoOmBUZXh0SU9XcmFwcGVyLnNlZWtgIGFyZSBib3RoCitxdWl0ZSBzbG93IGR1ZSB0byB0aGUgcmVjb25zdHJ1Y3Rpb24gYWxnb3JpdGhtIHVzZWQuCisKKzpjbGFzczpgU3RyaW5nSU9gLCBob3dldmVyLCBpcyBhIG5hdGl2ZSBpbi1tZW1vcnkgdW5pY29kZSBjb250YWluZXIgYW5kIHdpbGwKK2V4aGliaXQgc2ltaWxhciBzcGVlZCB0byA6Y2xhc3M6YEJ5dGVzSU9gLgorCitNdWx0aS10aHJlYWRpbmcKK15eXl5eXl5eXl5eXl5eXgorCis6Y2xhc3M6YEZpbGVJT2Agb2JqZWN0cyBhcmUgdGhyZWFkLXNhZmUgdG8gdGhlIGV4dGVudCB0aGF0IHRoZSBvcGVyYXRpbmcKK3N5c3RlbSBjYWxscyAoc3VjaCBhcyBgYHJlYWQoMilgYCB1bmRlciBVbml4KSB0aGV5IGFyZSB3cmFwcGluZyBhcmUgdGhyZWFkLXNhZmUKK3Rvby4KKworQmluYXJ5IGJ1ZmZlcmVkIG9iamVjdHMgKGluc3RhbmNlcyBvZiA6Y2xhc3M6YEJ1ZmZlcmVkUmVhZGVyYCwKKzpjbGFzczpgQnVmZmVyZWRXcml0ZXJgLCA6Y2xhc3M6YEJ1ZmZlcmVkUmFuZG9tYCBhbmQgOmNsYXNzOmBCdWZmZXJlZFJXUGFpcmApCitwcm90ZWN0IHRoZWlyIGludGVybmFsIHN0cnVjdHVyZXMgdXNpbmcgYSBsb2NrOyBpdCBpcyB0aGVyZWZvcmUgc2FmZSB0byBjYWxsCit0aGVtIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBhdCBvbmNlLgorCis6Y2xhc3M6YFRleHRJT1dyYXBwZXJgIG9iamVjdHMgYXJlIG5vdCB0aHJlYWQtc2FmZS4KKworUmVlbnRyYW5jeQorXl5eXl5eXl5eXgorCitCaW5hcnkgYnVmZmVyZWQgb2JqZWN0cyAoaW5zdGFuY2VzIG9mIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgLAorOmNsYXNzOmBCdWZmZXJlZFdyaXRlcmAsIDpjbGFzczpgQnVmZmVyZWRSYW5kb21gIGFuZCA6Y2xhc3M6YEJ1ZmZlcmVkUldQYWlyYCkKK2FyZSBub3QgcmVlbnRyYW50LiAgV2hpbGUgcmVlbnRyYW50IGNhbGxzIHdpbGwgbm90IGhhcHBlbiBpbiBub3JtYWwgc2l0dWF0aW9ucywKK3RoZXkgY2FuIGFyaXNlIGlmIHlvdSBhcmUgZG9pbmcgSS9PIGluIGEgOm1vZDpgc2lnbmFsYCBoYW5kbGVyLiAgSWYgaXQgaXMKK2F0dGVtcHRlZCB0byBlbnRlciBhIGJ1ZmZlcmVkIG9iamVjdCBhZ2FpbiB3aGlsZSBhbHJlYWR5IGJlaW5nIGFjY2Vzc2VkCisqZnJvbSB0aGUgc2FtZSB0aHJlYWQqLCB0aGVuIGEgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCisKK1RoZSBhYm92ZSBpbXBsaWNpdGx5IGV4dGVuZHMgdG8gdGV4dCBmaWxlcywgc2luY2UgdGhlIDpmdW5jOmBvcGVuKClgCitmdW5jdGlvbiB3aWxsIHdyYXAgYSBidWZmZXJlZCBvYmplY3QgaW5zaWRlIGEgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYC4gIFRoaXMKK2luY2x1ZGVzIHN0YW5kYXJkIHN0cmVhbXMgYW5kIHRoZXJlZm9yZSBhZmZlY3RzIHRoZSBidWlsdC1pbiBmdW5jdGlvbgorOmZ1bmM6YHByaW50KClgIGFzIHdlbGwuCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2l0ZXJ0b29scy5yc3QgYi9Eb2MvbGlicmFyeS9pdGVydG9vbHMucnN0CmluZGV4IDMzNjMwYTUuLmI3ZjQwN2QgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2l0ZXJ0b29scy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaXRlcnRvb2xzLnJzdApAQCAtMzgsNyArMzgsNyBAQAogPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIEl0ZXJhdG9yICAgICAgICAgICAgQXJndW1lbnRzICAgICAgICAgICAgICAgUmVzdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUKID09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci06ZnVuYzpgY291bnRgICAgICAgIHN0YXJ0ICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBzdGFydCsxLCBzdGFydCsyLCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGNvdW50KDEwKSAtLT4gMTAgMTEgMTIgMTMgMTQgLi4uYGAKKzpmdW5jOmBjb3VudGAgICAgICAgc3RhcnQsIFtzdGVwXSAgICAgICAgICAgc3RhcnQsIHN0YXJ0K3N0ZXAsIHN0YXJ0KzIqc3RlcCwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgY291bnQoMTApIC0tPiAxMCAxMSAxMiAxMyAxNCAuLi5gYAogOmZ1bmM6YGN5Y2xlYCAgICAgICBwICAgICAgICAgICAgICAgICAgICAgICBwMCwgcDEsIC4uLiBwbGFzdCwgcDAsIHAxLCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBjeWNsZSgnQUJDRCcpIC0tPiBBIEIgQyBEIEEgQiBDIEQgLi4uYGAKIDpmdW5jOmByZXBlYXRgICAgICAgZWxlbSBbLG5dICAgICAgICAgICAgICAgZWxlbSwgZWxlbSwgZWxlbSwgLi4uIGVuZGxlc3NseSBvciB1cCB0byBuIHRpbWVzICAgICAgICAgICAgICAgIGBgcmVwZWF0KDEwLCAzKSAtLT4gMTAgMTAgMTBgYAogPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQ5LDYgKzQ5LDcgQEAKIEl0ZXJhdG9yICAgICAgICAgICAgICAgIEFyZ3VtZW50cyAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUKID09PT09PT09PT09PT09PT09PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIDpmdW5jOmBjaGFpbmAgICAgICAgICAgIHAsIHEsIC4uLiAgICAgICAgICAgICAgICAgICAgICAgcDAsIHAxLCAuLi4gcGxhc3QsIHEwLCBxMSwgLi4uICAgICAgICAgICAgICAgICAgICAgIGBgY2hhaW4oJ0FCQycsICdERUYnKSAtLT4gQSBCIEMgRCBFIEZgYAorOmZ1bmM6YGNvbXByZXNzYCAgICAgICAgZGF0YSwgc2VsZWN0b3JzICAgICAgICAgICAgICAgICAoZFswXSBpZiBzWzBdKSwgKGRbMV0gaWYgc1sxXSksIC4uLiAgICAgICAgICAgICAgICAgYGBjb21wcmVzcygnQUJDREVGJywgWzEsMCwxLDAsMSwxXSkgLS0+IEEgQyBFIEZgYAogOmZ1bmM6YGRyb3B3aGlsZWAgICAgICAgcHJlZCwgc2VxICAgICAgICAgICAgICAgICAgICAgICBzZXFbbl0sIHNlcVtuKzFdLCBzdGFydGluZyB3aGVuIHByZWQgZmFpbHMgICAgICAgICAgYGBkcm9wd2hpbGUobGFtYmRhIHg6IHg8NSwgWzEsNCw2LDQsMV0pIC0tPiA2IDQgMWBgCiA6ZnVuYzpgZ3JvdXBieWAgICAgICAgICBpdGVyYWJsZVssIGtleWZ1bmNdICAgICAgICAgICAgIHN1Yi1pdGVyYXRvcnMgZ3JvdXBlZCBieSB2YWx1ZSBvZiBrZXlmdW5jKHYpCiA6ZnVuYzpgaWZpbHRlcmAgICAgICAgICBwcmVkLCBzZXEgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIG9mIHNlcSB3aGVyZSBwcmVkKGVsZW0pIGlzIFRydWUgICAgICAgICAgICBgYGlmaWx0ZXIobGFtYmRhIHg6IHglMiwgcmFuZ2UoMTApKSAtLT4gMSAzIDUgNyA5YGAKQEAgLTcwLDEwICs3MSwxMSBAQAogOmZ1bmM6YHByb2R1Y3RgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIHEsIC4uLiBbcmVwZWF0PTFdICAgICAgIGNhcnRlc2lhbiBwcm9kdWN0LCBlcXVpdmFsZW50IHRvIGEgbmVzdGVkIGZvci1sb29wCiA6ZnVuYzpgcGVybXV0YXRpb25zYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFssIHJdICAgICAgICAgICAgICAgICAgICAgci1sZW5ndGggdHVwbGVzLCBhbGwgcG9zc2libGUgb3JkZXJpbmdzLCBubyByZXBlYXRlZCBlbGVtZW50cwogOmZ1bmM6YGNvbWJpbmF0aW9uc2AgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIHIgICAgICAgICAgICAgICAgICAgICAgIHItbGVuZ3RoIHR1cGxlcywgaW4gc29ydGVkIG9yZGVyLCBubyByZXBlYXRlZCBlbGVtZW50cwotfAorOmZ1bmM6YGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50YCAgICAgICAgICAgIHAsIHIgICAgICAgICAgICAgICAgICAgICAgIHItbGVuZ3RoIHR1cGxlcywgaW4gc29ydGVkIG9yZGVyLCB3aXRoIHJlcGVhdGVkIGVsZW1lbnRzCiBgYHByb2R1Y3QoJ0FCQ0QnLCByZXBlYXQ9MilgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBBQSBBQiBBQyBBRCBCQSBCQiBCQyBCRCBDQSBDQiBDQyBDRCBEQSBEQiBEQyBERGBgCiBgYHBlcm11dGF0aW9ucygnQUJDRCcsIDIpYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBBQiBBQyBBRCBCQSBCQyBCRCBDQSBDQiBDRCBEQSBEQiBEQ2BgCiBgYGNvbWJpbmF0aW9ucygnQUJDRCcsIDIpYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBBQiBBQyBBRCBCQyBCRCBDRGBgCitgYGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCdBQkNEJywgMilgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBBQSBBQiBBQyBBRCBCQiBCQyBCRCBDQyBDRCBERGBgCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgPT09PT09PT09PT09PT09PT09PT0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKQEAgLTE2NiwxOSArMTY4LDg3IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCi0uLiBmdW5jdGlvbjo6IGNvdW50KFtuXSkKKy4uIGZ1bmN0aW9uOjogY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoaXRlcmFibGUsIHIpCiAKLSAgIE1ha2UgYW4gaXRlcmF0b3IgdGhhdCByZXR1cm5zIGNvbnNlY3V0aXZlIGludGVnZXJzIHN0YXJ0aW5nIHdpdGggKm4qLiBJZiBub3QKLSAgIHNwZWNpZmllZCAqbiogZGVmYXVsdHMgdG8gemVyby4gICBPZnRlbiB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIDpmdW5jOmBpbWFwYCB0bwotICAgZ2VuZXJhdGUgY29uc2VjdXRpdmUgZGF0YSBwb2ludHMuIEFsc28sIHVzZWQgd2l0aCA6ZnVuYzpgaXppcGAgdG8gYWRkIHNlcXVlbmNlCi0gICBudW1iZXJzLiAgRXF1aXZhbGVudCB0bzo6CisgICBSZXR1cm4gKnIqIGxlbmd0aCBzdWJzZXF1ZW5jZXMgb2YgZWxlbWVudHMgZnJvbSB0aGUgaW5wdXQgKml0ZXJhYmxlKgorICAgYWxsb3dpbmcgaW5kaXZpZHVhbCBlbGVtZW50cyB0byBiZSByZXBlYXRlZCBtb3JlIHRoYW4gb25jZS4KIAotICAgICAgZGVmIGNvdW50KG49MCk6CisgICBDb21iaW5hdGlvbnMgYXJlIGVtaXR0ZWQgaW4gbGV4aWNvZ3JhcGhpYyBzb3J0IG9yZGVyLiAgU28sIGlmIHRoZQorICAgaW5wdXQgKml0ZXJhYmxlKiBpcyBzb3J0ZWQsIHRoZSBjb21iaW5hdGlvbiB0dXBsZXMgd2lsbCBiZSBwcm9kdWNlZAorICAgaW4gc29ydGVkIG9yZGVyLgorCisgICBFbGVtZW50cyBhcmUgdHJlYXRlZCBhcyB1bmlxdWUgYmFzZWQgb24gdGhlaXIgcG9zaXRpb24sIG5vdCBvbiB0aGVpcgorICAgdmFsdWUuICBTbyBpZiB0aGUgaW5wdXQgZWxlbWVudHMgYXJlIHVuaXF1ZSwgdGhlIGdlbmVyYXRlZCBjb21iaW5hdGlvbnMKKyAgIHdpbGwgYWxzbyBiZSB1bmlxdWUuCisKKyAgIEVxdWl2YWxlbnQgdG86OgorCisgICAgICAgIGRlZiBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcik6CisgICAgICAgICAgICAjIGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCdBQkMnLCAyKSAtLT4gQUEgQUIgQUMgQkIgQkMgQ0MKKyAgICAgICAgICAgIHBvb2wgPSB0dXBsZShpdGVyYWJsZSkKKyAgICAgICAgICAgIG4gPSBsZW4ocG9vbCkKKyAgICAgICAgICAgIGlmIG5vdCBuIGFuZCByOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaW5kaWNlcyA9IFswXSAqIHIKKyAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UocikpOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmRpY2VzW2ldICE9IG4gLSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBpbmRpY2VzW2k6XSA9IFtpbmRpY2VzW2ldICsgMV0gKiAociAtIGkpCisgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorCisgICBUaGUgY29kZSBmb3IgOmZ1bmM6YGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50YCBjYW4gYmUgYWxzbyBleHByZXNzZWQgYXMKKyAgIGEgc3Vic2VxdWVuY2Ugb2YgOmZ1bmM6YHByb2R1Y3RgIGFmdGVyIGZpbHRlcmluZyBlbnRyaWVzIHdoZXJlIHRoZSBlbGVtZW50cworICAgYXJlIG5vdCBpbiBzb3J0ZWQgb3JkZXIgKGFjY29yZGluZyB0byB0aGVpciBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgcG9vbCk6OgorCisgICAgICAgIGRlZiBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcik6CisgICAgICAgICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCisgICAgICAgICAgICBuID0gbGVuKHBvb2wpCisgICAgICAgICAgICBmb3IgaW5kaWNlcyBpbiBwcm9kdWN0KHJhbmdlKG4pLCByZXBlYXQ9cik6CisgICAgICAgICAgICAgICAgaWYgc29ydGVkKGluZGljZXMpID09IGxpc3QoaW5kaWNlcyk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKworICAgVGhlIG51bWJlciBvZiBpdGVtcyByZXR1cm5lZCBpcyBgYChuK3ItMSkhIC8gciEgLyAobi0xKSFgYCB3aGVuIGBgbiA+IDBgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKy4uIGZ1bmN0aW9uOjogY29tcHJlc3MoZGF0YSwgc2VsZWN0b3JzKQorCisgICBNYWtlIGFuIGl0ZXJhdG9yIHRoYXQgZmlsdGVycyBlbGVtZW50cyBmcm9tICpkYXRhKiByZXR1cm5pbmcgb25seSB0aG9zZSB0aGF0CisgICBoYXZlIGEgY29ycmVzcG9uZGluZyBlbGVtZW50IGluICpzZWxlY3RvcnMqIHRoYXQgZXZhbHVhdGVzIHRvIGBgVHJ1ZWBgLgorICAgU3RvcHMgd2hlbiBlaXRoZXIgdGhlICpkYXRhKiBvciAqc2VsZWN0b3JzKiBpdGVyYWJsZXMgaGFzIGJlZW4gZXhoYXVzdGVkLgorICAgRXF1aXZhbGVudCB0bzo6CisKKyAgICAgICBkZWYgY29tcHJlc3MoZGF0YSwgc2VsZWN0b3JzKToKKyAgICAgICAgICAgIyBjb21wcmVzcygnQUJDREVGJywgWzEsMCwxLDAsMSwxXSkgLS0+IEEgQyBFIEYKKyAgICAgICAgICAgcmV0dXJuIChkIGZvciBkLCBzIGluIGl6aXAoZGF0YSwgc2VsZWN0b3JzKSBpZiBzKQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisuLiBmdW5jdGlvbjo6IGNvdW50KHN0YXJ0PTAsIHN0ZXA9MSkKKworICAgTWFrZSBhbiBpdGVyYXRvciB0aGF0IHJldHVybnMgZXZlbmx5IHNwYWNlZCB2YWx1ZXMgc3RhcnRpbmcgd2l0aCAqbiouIE9mdGVuCisgICB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIDpmdW5jOmBpbWFwYCB0byBnZW5lcmF0ZSBjb25zZWN1dGl2ZSBkYXRhIHBvaW50cy4KKyAgIEFsc28sIHVzZWQgd2l0aCA6ZnVuYzpgaXppcGAgdG8gYWRkIHNlcXVlbmNlIG51bWJlcnMuICBFcXVpdmFsZW50IHRvOjoKKworICAgICAgZGVmIGNvdW50KHN0YXJ0PTAsIHN0ZXA9MSk6CiAgICAgICAgICAgIyBjb3VudCgxMCkgLS0+IDEwIDExIDEyIDEzIDE0IC4uLgorICAgICAgICAgICMgY291bnQoMi41LCAwLjUpIC0+IDIuNSAzLjAgMy41IC4uLgorICAgICAgICAgIG4gPSBzdGFydAogICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgIHlpZWxkIG4KLSAgICAgICAgICAgICAgbiArPSAxCisgICAgICAgICAgICAgIG4gKz0gc3RlcAogCisgICBXaGVuIGNvdW50aW5nIHdpdGggZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgYmV0dGVyIGFjY3VyYWN5IGNhbiBzb21ldGltZXMgYmUKKyAgIGFjaGlldmVkIGJ5IHN1YnN0aXR1dGluZyBtdWx0aXBsaWNhdGl2ZSBjb2RlIHN1Y2ggYXM6IGBgKHN0YXJ0ICsgc3RlcCAqIGkKKyAgIGZvciBpIGluIGNvdW50KCkpYGAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBhZGRlZCAqc3RlcCogYXJndW1lbnQgYW5kIGFsbG93ZWQgbm9uLWludGVnZXIgYXJndW1lbnRzLgogCiAuLiBmdW5jdGlvbjo6IGN5Y2xlKGl0ZXJhYmxlKQogCkBAIC01NzMsNDMgKzY0Myw2IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjQKIAogCi0uLiBfaXRlcnRvb2xzLWV4YW1wbGU6Ci0KLUV4YW1wbGVzCi0tLS0tLS0tLQotCi1UaGUgZm9sbG93aW5nIGV4YW1wbGVzIHNob3cgY29tbW9uIHVzZXMgZm9yIGVhY2ggdG9vbCBhbmQgZGVtb25zdHJhdGUgd2F5cyB0aGV5Ci1jYW4gYmUgY29tYmluZWQuCi0KLS4uIGRvY3Rlc3Q6OgotCi0gICA+Pj4gIyBTaG93IGEgZGljdGlvbmFyeSBzb3J0ZWQgYW5kIGdyb3VwZWQgYnkgdmFsdWUKLSAgID4+PiBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyCi0gICA+Pj4gZCA9IGRpY3QoYT0xLCBiPTIsIGM9MSwgZD0yLCBlPTEsIGY9MiwgZz0zKQotICAgPj4+IGRpID0gc29ydGVkKGQuaXRlcml0ZW1zKCksIGtleT1pdGVtZ2V0dGVyKDEpKQotICAgPj4+IGZvciBrLCBnIGluIGdyb3VwYnkoZGksIGtleT1pdGVtZ2V0dGVyKDEpKToKLSAgIC4uLiAgICAgcHJpbnQgaywgbWFwKGl0ZW1nZXR0ZXIoMCksIGcpCi0gICAuLi4KLSAgIDEgWydhJywgJ2MnLCAnZSddCi0gICAyIFsnYicsICdkJywgJ2YnXQotICAgMyBbJ2cnXQotCi0gICA+Pj4gIyBGaW5kIHJ1bnMgb2YgY29uc2VjdXRpdmUgbnVtYmVycyB1c2luZyBncm91cGJ5LiAgVGhlIGtleSB0byB0aGUgc29sdXRpb24KLSAgID4+PiAjIGlzIGRpZmZlcmVuY2luZyB3aXRoIGEgcmFuZ2Ugc28gdGhhdCBjb25zZWN1dGl2ZSBudW1iZXJzIGFsbCBhcHBlYXIgaW4KLSAgID4+PiAjIHNhbWUgZ3JvdXAuCi0gICA+Pj4gZGF0YSA9IFsgMSwgIDQsNSw2LCAxMCwgMTUsMTYsMTcsMTgsIDIyLCAyNSwyNiwyNywyOF0KLSAgID4+PiBmb3IgaywgZyBpbiBncm91cGJ5KGVudW1lcmF0ZShkYXRhKSwgbGFtYmRhIChpLHgpOmkteCk6Ci0gICAuLi4gICAgIHByaW50IG1hcChpdGVtZ2V0dGVyKDEpLCBnKQotICAgLi4uCi0gICBbMV0KLSAgIFs0LCA1LCA2XQotICAgWzEwXQotICAgWzE1LCAxNiwgMTcsIDE4XQotICAgWzIyXQotICAgWzI1LCAyNiwgMjcsIDI4XQotCi0KLQogLi4gX2l0ZXJ0b29scy1yZWNpcGVzOgogCiBSZWNpcGVzCkBAIC02MzgsMTIgKzY3MSwxMiBAQAogCiAgICBkZWYgY29uc3VtZShpdGVyYXRvciwgbik6CiAgICAgICAgIkFkdmFuY2UgdGhlIGl0ZXJhdG9yIG4tc3RlcHMgYWhlYWQuIElmIG4gaXMgbm9uZSwgY29uc3VtZSBlbnRpcmVseS4iCi0gICAgICAgIyBUaGUgdGVjaG5pcXVlIHVzZXMgb2JqZWN0cyB0aGF0IGNvbnN1bWUgaXRlcmF0b3JzIGF0IEMgc3BlZWQuCisgICAgICAgIyBVc2UgZnVuY3Rpb25zIHRoYXQgY29uc3VtZSBpdGVyYXRvcnMgYXQgQyBzcGVlZC4KICAgICAgICBpZiBuIGlzIE5vbmU6CiAgICAgICAgICAgICMgZmVlZCB0aGUgZW50aXJlIGl0ZXJhdG9yIGludG8gYSB6ZXJvLWxlbmd0aCBkZXF1ZQogICAgICAgICAgICBjb2xsZWN0aW9ucy5kZXF1ZShpdGVyYXRvciwgbWF4bGVuPTApCiAgICAgICAgZWxzZToKLSAgICAgICAgICAgIyBhZHZhbmNlIHRvIHRoZSBlbXRweSBzbGljZSBzdGFydGluZyBhdCBwb3NpdGlvbiBuCisgICAgICAgICAgICMgYWR2YW5jZSB0byB0aGUgZW1wdHkgc2xpY2Ugc3RhcnRpbmcgYXQgcG9zaXRpb24gbgogICAgICAgICAgICBuZXh0KGlzbGljZShpdGVyYXRvciwgbiwgbiksIE5vbmUpCiAKICAgIGRlZiBudGgoaXRlcmFibGUsIG4sIGRlZmF1bHQ9Tm9uZSk6CkBAIC03MDUsMjggKzczOCw2IEBACiAgICAgICAgICAgICAgICBwZW5kaW5nIC09IDEKICAgICAgICAgICAgICAgIG5leHRzID0gY3ljbGUoaXNsaWNlKG5leHRzLCBwZW5kaW5nKSkKIAotICAgZGVmIGNvbXByZXNzKGRhdGEsIHNlbGVjdG9ycyk6Ci0gICAgICAgImNvbXByZXNzKCdBQkNERUYnLCBbMSwwLDEsMCwxLDFdKSAtLT4gQSBDIEUgRiIKLSAgICAgICByZXR1cm4gKGQgZm9yIGQsIHMgaW4gaXppcChkYXRhLCBzZWxlY3RvcnMpIGlmIHMpCi0KLSAgIGRlZiBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcik6Ci0gICAgICAgImNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCdBQkMnLCAyKSAtLT4gQUEgQUIgQUMgQkIgQkMgQ0MiCi0gICAgICAgIyBudW1iZXIgaXRlbXMgcmV0dXJuZWQ6ICAobityLTEpISAvIHIhIC8gKG4tMSkhCi0gICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQotICAgICAgIG4gPSBsZW4ocG9vbCkKLSAgICAgICBpZiBub3QgbiBhbmQgcjoKLSAgICAgICAgICAgcmV0dXJuCi0gICAgICAgaW5kaWNlcyA9IFswXSAqIHIKLSAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCi0gICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UocikpOgotICAgICAgICAgICAgICAgaWYgaW5kaWNlc1tpXSAhPSBuIC0gMToKLSAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgIGluZGljZXNbaTpdID0gW2luZGljZXNbaV0gKyAxXSAqIChyIC0gaSkKLSAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQotCiAgICBkZWYgcG93ZXJzZXQoaXRlcmFibGUpOgogICAgICAgICJwb3dlcnNldChbMSwyLDNdKSAtLT4gKCkgKDEsKSAoMiwpICgzLCkgKDEsMikgKDEsMykgKDIsMykgKDEsMiwzKSIKICAgICAgICBzID0gbGlzdChpdGVyYWJsZSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2pzb24ucnN0IGIvRG9jL2xpYnJhcnkvanNvbi5yc3QKaW5kZXggOGZhNzkwZS4uYmU1NGVlYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvanNvbi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvanNvbi5yc3QKQEAgLTcsNyArNyw3IEBACiAuLiBzZWN0aW9uYXV0aG9yOjogQm9iIElwcG9saXRvIDxib2JAcmVkaXZpLmNvbT4KIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCi1KU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz4gaXMgYSBzdWJzZXQgb2YgSmF2YVNjcmlwdAorYEpTT04gKEphdmFTY3JpcHQgT2JqZWN0IE5vdGF0aW9uKSA8aHR0cDovL2pzb24ub3JnPmBfIGlzIGEgc3Vic2V0IG9mIEphdmFTY3JpcHQKIHN5bnRheCAoRUNNQS0yNjIgM3JkIGVkaXRpb24pIHVzZWQgYXMgYSBsaWdodHdlaWdodCBkYXRhIGludGVyY2hhbmdlIGZvcm1hdC4KIAogOm1vZDpganNvbmAgZXhwb3NlcyBhbiBBUEkgZmFtaWxpYXIgdG8gdXNlcnMgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiAgICBUbyB1c2UgYSBjdXN0b20gOmNsYXNzOmBKU09ORW5jb2RlcmAgc3ViY2xhc3MgKGUuZy4gb25lIHRoYXQgb3ZlcnJpZGVzIHRoZQogICAgOm1ldGg6YGRlZmF1bHRgIG1ldGhvZCB0byBzZXJpYWxpemUgYWRkaXRpb25hbCB0eXBlcyksIHNwZWNpZnkgaXQgd2l0aCB0aGUKLSAgICpjbHMqIGt3YXJnLgorICAgKmNscyoga3dhcmc7IG90aGVyd2lzZSA6Y2xhc3M6YEpTT05FbmNvZGVyYCBpcyB1c2VkLgogCiAKIC4uIGZ1bmN0aW9uOjogZHVtcHMob2JqWywgc2tpcGtleXNbLCBlbnN1cmVfYXNjaWlbLCBjaGVja19jaXJjdWxhclssIGFsbG93X25hblssIGNsc1ssIGluZGVudFssIHNlcGFyYXRvcnNbLCBlbmNvZGluZ1ssIGRlZmF1bHRbLCAqKmt3XV1dXV1dXV1dXSkKQEAgLTE2Niw3ICsxNjYsNyBAQAogICAgOmZ1bmM6YGR1bXBgLgogCiAKLS4uIGZ1bmN0aW9uOjogbG9hZChmcFssIGVuY29kaW5nWywgY2xzWywgb2JqZWN0X2hvb2tbLCBwYXJzZV9mbG9hdFssIHBhcnNlX2ludFssIHBhcnNlX2NvbnN0YW50WywgKiprd11dXV1dXV0pCisuLiBmdW5jdGlvbjo6IGxvYWQoZnBbLCBlbmNvZGluZ1ssIGNsc1ssIG9iamVjdF9ob29rWywgcGFyc2VfZmxvYXRbLCBwYXJzZV9pbnRbLCBwYXJzZV9jb25zdGFudFssIG9iamVjdF9wYWlyc19ob29rWywgKiprd11dXV1dXV1dKQogCiAgICBEZXNlcmlhbGl6ZSAqZnAqIChhIGBgLnJlYWQoKWBgLXN1cHBvcnRpbmcgZmlsZS1saWtlIG9iamVjdCBjb250YWluaW5nIGEgSlNPTgogICAgZG9jdW1lbnQpIHRvIGEgUHl0aG9uIG9iamVjdC4KQEAgLTE4Miw2ICsxODIsMTcgQEAKICAgICpvYmplY3RfaG9vayogd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIDpjbGFzczpgZGljdGAuICBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQKICAgIHRvIGltcGxlbWVudCBjdXN0b20gZGVjb2RlcnMgKGUuZy4gSlNPTi1SUEMgY2xhc3MgaGludGluZykuCiAKKyAgICpvYmplY3RfcGFpcnNfaG9vayogaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZQorICAgcmVzdWx0IG9mIGFueSBvYmplY3QgbGl0ZXJhbCBkZWNvZGVkIHdpdGggYW4gb3JkZXJlZCBsaXN0IG9mIHBhaXJzLiAgVGhlCisgICByZXR1cm4gdmFsdWUgb2YgKm9iamVjdF9wYWlyc19ob29rKiB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUKKyAgIDpjbGFzczpgZGljdGAuICBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycyB0aGF0CisgICByZWx5IG9uIHRoZSBvcmRlciB0aGF0IHRoZSBrZXkgYW5kIHZhbHVlIHBhaXJzIGFyZSBkZWNvZGVkIChmb3IgZXhhbXBsZSwKKyAgIDpmdW5jOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgd2lsbCByZW1lbWJlciB0aGUgb3JkZXIgb2YgaW5zZXJ0aW9uKS4gSWYKKyAgICpvYmplY3RfaG9vayogaXMgYWxzbyBkZWZpbmVkLCB0aGUgKm9iamVjdF9wYWlyc19ob29rKiB0YWtlcyBwcmlvcml0eS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yICpvYmplY3RfcGFpcnNfaG9vayouCisKICAgICpwYXJzZV9mbG9hdCosIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc3RyaW5nIG9mIGV2ZXJ5IEpTT04KICAgIGZsb2F0IHRvIGJlIGRlY29kZWQuICBCeSBkZWZhdWx0LCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBmbG9hdChudW1fc3RyKWBgLgogICAgVGhpcyBjYW4gYmUgdXNlZCB0byB1c2UgYW5vdGhlciBkYXRhdHlwZSBvciBwYXJzZXIgZm9yIEpTT04gZmxvYXRzCkBAIC0xOTgsMTEgKzIwOSwxMSBAQAogICAgYXJlIGVuY291bnRlcmVkLgogCiAgICBUbyB1c2UgYSBjdXN0b20gOmNsYXNzOmBKU09ORGVjb2RlcmAgc3ViY2xhc3MsIHNwZWNpZnkgaXQgd2l0aCB0aGUgYGBjbHNgYAotICAga3dhcmcuICBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUKLSAgIGNsYXNzLgorICAga3dhcmc7IG90aGVyd2lzZSA6Y2xhc3M6YEpTT05EZWNvZGVyYCBpcyB1c2VkLiAgQWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cworICAgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjbGFzcy4KIAogCi0uLiBmdW5jdGlvbjo6IGxvYWRzKHNbLCBlbmNvZGluZ1ssIGNsc1ssIG9iamVjdF9ob29rWywgcGFyc2VfZmxvYXRbLCBwYXJzZV9pbnRbLCBwYXJzZV9jb25zdGFudFssICoqa3ddXV1dXV1dKQorLi4gZnVuY3Rpb246OiBsb2FkcyhzWywgZW5jb2RpbmdbLCBjbHNbLCBvYmplY3RfaG9va1ssIHBhcnNlX2Zsb2F0WywgcGFyc2VfaW50WywgcGFyc2VfY29uc3RhbnRbLCBvYmplY3RfcGFpcnNfaG9va1ssICoqa3ddXV1dXV1dXSkKIAogICAgRGVzZXJpYWxpemUgKnMqIChhIDpjbGFzczpgc3RyYCBvciA6Y2xhc3M6YHVuaWNvZGVgIGluc3RhbmNlIGNvbnRhaW5pbmcgYSBKU09OCiAgICBkb2N1bWVudCkgdG8gYSBQeXRob24gb2JqZWN0LgpAQCAtMjEyLDEzICsyMjMsMTMgQEAKICAgIHNwZWNpZmllZC4gIEVuY29kaW5ncyB0aGF0IGFyZSBub3QgQVNDSUkgYmFzZWQgKHN1Y2ggYXMgVUNTLTIpIGFyZSBub3QKICAgIGFsbG93ZWQgYW5kIHNob3VsZCBiZSBkZWNvZGVkIHRvIDpjbGFzczpgdW5pY29kZWAgZmlyc3QuCiAKLSAgIFRoZSBvdGhlciBhcmd1bWVudHMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBkdW1wYC4KKyAgIFRoZSBvdGhlciBhcmd1bWVudHMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBsb2FkYC4KIAogCiBFbmNvZGVycyBhbmQgZGVjb2RlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0uLiBjbGFzczo6IEpTT05EZWNvZGVyKFtlbmNvZGluZ1ssIG9iamVjdF9ob29rWywgcGFyc2VfZmxvYXRbLCBwYXJzZV9pbnRbLCBwYXJzZV9jb25zdGFudFssIHN0cmljdF1dXV1dXSkKKy4uIGNsYXNzOjogSlNPTkRlY29kZXIoW2VuY29kaW5nWywgb2JqZWN0X2hvb2tbLCBwYXJzZV9mbG9hdFssIHBhcnNlX2ludFssIHBhcnNlX2NvbnN0YW50Wywgc3RyaWN0Wywgb2JqZWN0X3BhaXJzX2hvb2tdXV1dXV1dKQogCiAgICBTaW1wbGUgSlNPTiBkZWNvZGVyLgogCkBAIC0yNTksNiArMjcwLDE3IEBACiAgICA6Y2xhc3M6YGRpY3RgLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGN1c3RvbSBkZXNlcmlhbGl6YXRpb25zIChlLmcuIHRvCiAgICBzdXBwb3J0IEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgogCisgICAqb2JqZWN0X3BhaXJzX2hvb2sqLCBpZiBzcGVjaWZpZWQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIGV2ZXJ5CisgICBKU09OIG9iamVjdCBkZWNvZGVkIHdpdGggYW4gb3JkZXJlZCBsaXN0IG9mIHBhaXJzLiAgVGhlIHJldHVybiB2YWx1ZSBvZgorICAgKm9iamVjdF9wYWlyc19ob29rKiB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgOmNsYXNzOmBkaWN0YC4gIFRoaXMKKyAgIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycyB0aGF0IHJlbHkgb24gdGhlIG9yZGVyCisgICB0aGF0IHRoZSBrZXkgYW5kIHZhbHVlIHBhaXJzIGFyZSBkZWNvZGVkIChmb3IgZXhhbXBsZSwKKyAgIDpmdW5jOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgd2lsbCByZW1lbWJlciB0aGUgb3JkZXIgb2YgaW5zZXJ0aW9uKS4gSWYKKyAgICpvYmplY3RfaG9vayogaXMgYWxzbyBkZWZpbmVkLCB0aGUgKm9iamVjdF9wYWlyc19ob29rKiB0YWtlcyBwcmlvcml0eS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yICpvYmplY3RfcGFpcnNfaG9vayouCisKICAgICpwYXJzZV9mbG9hdCosIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc3RyaW5nIG9mIGV2ZXJ5IEpTT04KICAgIGZsb2F0IHRvIGJlIGRlY29kZWQuICBCeSBkZWZhdWx0LCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBmbG9hdChudW1fc3RyKWBgLgogICAgVGhpcyBjYW4gYmUgdXNlZCB0byB1c2UgYW5vdGhlciBkYXRhdHlwZSBvciBwYXJzZXIgZm9yIEpTT04gZmxvYXRzCkBAIC0yNzQsNiArMjk2LDExIEBACiAgICBgYCdmYWxzZSdgYC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGludmFsaWQgSlNPTiBudW1iZXJzCiAgICBhcmUgZW5jb3VudGVyZWQuCiAKKyAgIElmICpzdHJpY3QqIGlzIGBgRmFsc2VgYCAoYGBUcnVlYGAgaXMgdGhlIGRlZmF1bHQpLCB0aGVuIGNvbnRyb2wgY2hhcmFjdGVycworICAgd2lsbCBiZSBhbGxvd2VkIGluc2lkZSBzdHJpbmdzLiAgQ29udHJvbCBjaGFyYWN0ZXJzIGluIHRoaXMgY29udGV4dCBhcmUKKyAgIHRob3NlIHdpdGggY2hhcmFjdGVyIGNvZGVzIGluIHRoZSAwLTMxIHJhbmdlLCBpbmNsdWRpbmcgYGAnXHQnYGAgKHRhYiksCisgICBgYCdcbidgYCwgYGAnXHInYGAgYW5kIGBgJ1wwJ2BgLgorCiAKICAgIC4uIG1ldGhvZDo6IGRlY29kZShzKQogCkBAIC0zMzgsNyArMzY1LDcgQEAKICAgIGVuY29kZXJzIGFuZCBkZWNvZGVycy4gIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBhIDpleGM6YFZhbHVlRXJyb3JgIHRvIGVuY29kZQogICAgc3VjaCBmbG9hdHMuCiAKLSAgIElmICpzb3J0X2tleXMqIGlzIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCksIHRoZW4gdGhlIG91dHB1dCBvZiBkaWN0aW9uYXJpZXMKKyAgIElmICpzb3J0X2tleXMqIGlzIGBgVHJ1ZWBgIChkZWZhdWx0IGBgRmFsc2VgYCksIHRoZW4gdGhlIG91dHB1dCBvZiBkaWN0aW9uYXJpZXMKICAgIHdpbGwgYmUgc29ydGVkIGJ5IGtleTsgdGhpcyBpcyB1c2VmdWwgZm9yIHJlZ3Jlc3Npb24gdGVzdHMgdG8gZW5zdXJlIHRoYXQKICAgIEpTT04gc2VyaWFsaXphdGlvbnMgY2FuIGJlIGNvbXBhcmVkIG9uIGEgZGF5LXRvLWRheSBiYXNpcy4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkva2V5d29yZC5yc3QgYi9Eb2MvbGlicmFyeS9rZXl3b3JkLnJzdAppbmRleCAzMmEyZDM0Li4zYjY5ZDBiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9rZXl3b3JkLnJzdAorKysgYi9Eb2MvbGlicmFyeS9rZXl3b3JkLnJzdApAQCAtMjAsMyArMjAsOCBAQAogICAga2V5d29yZHMgYXJlIGRlZmluZWQgdG8gb25seSBiZSBhY3RpdmUgd2hlbiBwYXJ0aWN1bGFyIDptb2Q6YF9fZnV0dXJlX19gCiAgICBzdGF0ZW1lbnRzIGFyZSBpbiBlZmZlY3QsIHRoZXNlIHdpbGwgYmUgaW5jbHVkZWQgYXMgd2VsbC4KIAorCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBrZXl3b3JkIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9rZXl3b3JkLnB5P3ZpZXc9bWFya3VwPmBfCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9saW5lY2FjaGUucnN0IGIvRG9jL2xpYnJhcnkvbGluZWNhY2hlLnJzdAppbmRleCBmM2Q4Mzc5Li44ZWJlZTA1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9saW5lY2FjaGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xpbmVjYWNoZS5yc3QKQEAgLTEyLDEyICsxMiwxNyBAQAogbGluZXMgYXJlIHJlYWQgZnJvbSBhIHNpbmdsZSBmaWxlLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSA6bW9kOmB0cmFjZWJhY2tgIG1vZHVsZQogdG8gcmV0cmlldmUgc291cmNlIGxpbmVzIGZvciBpbmNsdXNpb24gaW4gIHRoZSBmb3JtYXR0ZWQgdHJhY2ViYWNrLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBsaW5lY2FjaGUgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL2xpbmVjYWNoZS5weT92aWV3PW1hcmt1cD5gXworCiBUaGUgOm1vZDpgbGluZWNhY2hlYCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAogCiAuLiBmdW5jdGlvbjo6IGdldGxpbmUoZmlsZW5hbWUsIGxpbmVub1ssIG1vZHVsZV9nbG9iYWxzXSkKIAotICAgR2V0IGxpbmUgKmxpbmVubyogZnJvbSBmaWxlIG5hbWVkICpmaWxlbmFtZSouIFRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciB0aHJvdyBhbgorICAgR2V0IGxpbmUgKmxpbmVubyogZnJvbSBmaWxlIG5hbWVkICpmaWxlbmFtZSouIFRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciByYWlzZSBhbgogICAgZXhjZXB0aW9uIC0tLSBpdCB3aWxsIHJldHVybiBgYCcnYGAgb24gZXJyb3JzICh0aGUgdGVybWluYXRpbmcgbmV3bGluZSBjaGFyYWN0ZXIKICAgIHdpbGwgYmUgaW5jbHVkZWQgZm9yIGxpbmVzIHRoYXQgYXJlIGZvdW5kKS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbG9jYWxlLnJzdCBiL0RvYy9saWJyYXJ5L2xvY2FsZS5yc3QKaW5kZXggN2I0YTA1Zi4uZjU4N2QwNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbG9jYWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2NhbGUucnN0CkBAIC00MCw3ICs0MCw3IEBACiAgICBJZiAqbG9jYWxlKiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgY3VycmVudCBzZXR0aW5nIGZvciAqY2F0ZWdvcnkqIGlzCiAgICByZXR1cm5lZC4KIAotICAgOmZ1bmM6YHNldGxvY2FsZWAgaXMgbm90IHRocmVhZCBzYWZlIG9uIG1vc3Qgc3lzdGVtcy4gQXBwbGljYXRpb25zIHR5cGljYWxseQorICAgOmZ1bmM6YHNldGxvY2FsZWAgaXMgbm90IHRocmVhZC1zYWZlIG9uIG1vc3Qgc3lzdGVtcy4gQXBwbGljYXRpb25zIHR5cGljYWxseQogICAgc3RhcnQgd2l0aCBhIGNhbGwgb2YgOjoKIAogICAgICAgaW1wb3J0IGxvY2FsZQpAQCAtNTU0LDcgKzU1NCw3IEBACiAKIFB5dGhvbiBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vcm1hbGx5IGZpbmQgbm8gbmVlZCB0byBpbnZva2UgdGhlc2UgZnVuY3Rpb25zLCBhbmQKIHNob3VsZCB1c2UgOm1vZDpgZ2V0dGV4dGAgaW5zdGVhZC4gIEEga25vd24gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZSBhcmUKLWFwcGxpY2F0aW9ucyB0aGF0IGxpbmsgdXNlIGFkZGl0aW9uYWwgQyBsaWJyYXJpZXMgd2hpY2ggaW50ZXJuYWxseSBpbnZva2UKK2FwcGxpY2F0aW9ucyB0aGF0IGxpbmsgd2l0aCBhZGRpdGlvbmFsIEMgbGlicmFyaWVzIHdoaWNoIGludGVybmFsbHkgaW52b2tlCiA6Y2Z1bmM6YGdldHRleHRgIG9yIDpmdW5jOmBkY2dldHRleHRgLiAgRm9yIHRoZXNlIGFwcGxpY2F0aW9ucywgaXQgbWF5IGJlCiBuZWNlc3NhcnkgdG8gYmluZCB0aGUgdGV4dCBkb21haW4sIHNvIHRoYXQgdGhlIGxpYnJhcmllcyBjYW4gcHJvcGVybHkgbG9jYXRlCiB0aGVpciBtZXNzYWdlIGNhdGFsb2dzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdAppbmRleCBjOTViOGRlLi45ODk4ZDA4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdApAQCAtMzIxLDI4ICszMjEsNDYgQEAKIAogICAgICIlKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcyIKIAorRm9ybWF0dGVycyB1c2UgYSB1c2VyLWNvbmZpZ3VyYWJsZSBmdW5jdGlvbiB0byBjb252ZXJ0IHRoZSBjcmVhdGlvbiB0aW1lIG9mIGEKK3JlY29yZCB0byBhIHR1cGxlLiBCeSBkZWZhdWx0LCA6ZnVuYzpgdGltZS5sb2NhbHRpbWVgIGlzIHVzZWQ7IHRvIGNoYW5nZSB0aGlzCitmb3IgYSBwYXJ0aWN1bGFyIGZvcm1hdHRlciBpbnN0YW5jZSwgc2V0IHRoZSBgYGNvbnZlcnRlcmBgIGF0dHJpYnV0ZSBvZiB0aGUKK2luc3RhbmNlIHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgOmZ1bmM6YHRpbWUubG9jYWx0aW1lYCBvcgorOmZ1bmM6YHRpbWUuZ210aW1lYC4gVG8gY2hhbmdlIGl0IGZvciBhbGwgZm9ybWF0dGVycywgZm9yIGV4YW1wbGUgaWYgeW91IHdhbnQKK2FsbCBsb2dnaW5nIHRpbWVzIHRvIGJlIHNob3duIGluIEdNVCwgc2V0IHRoZSBgYGNvbnZlcnRlcmBgIGF0dHJpYnV0ZSBpbiB0aGUKK0Zvcm1hdHRlciBjbGFzcyAodG8gYGB0aW1lLmdtdGltZWBgIGZvciBHTVQgZGlzcGxheSkuCisKIAogQ29uZmlndXJpbmcgTG9nZ2luZwogXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1Qcm9ncmFtbWVycyBjYW4gY29uZmlndXJlIGxvZ2dpbmcgZWl0aGVyIGJ5IGNyZWF0aW5nIGxvZ2dlcnMsIGhhbmRsZXJzLCBhbmQKLWZvcm1hdHRlcnMgZXhwbGljaXRseSBpbiBhIG1haW4gbW9kdWxlIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gbWV0aG9kcyBsaXN0ZWQKLWFib3ZlICh1c2luZyBQeXRob24gY29kZSksIG9yIGJ5IGNyZWF0aW5nIGEgbG9nZ2luZyBjb25maWcgZmlsZS4gIFRoZSBmb2xsb3dpbmcKLWNvZGUgaXMgYW4gZXhhbXBsZSBvZiBjb25maWd1cmluZyBhIHZlcnkgc2ltcGxlIGxvZ2dlciwgYSBjb25zb2xlIGhhbmRsZXIsIGFuZCBhCi1zaW1wbGUgZm9ybWF0dGVyIGluIGEgUHl0aG9uIG1vZHVsZTo6CitQcm9ncmFtbWVycyBjYW4gY29uZmlndXJlIGxvZ2dpbmcgaW4gdGhyZWUgd2F5czoKKworMS4gQ3JlYXRpbmcgbG9nZ2VycywgaGFuZGxlcnMsIGFuZCBmb3JtYXR0ZXJzIGV4cGxpY2l0bHkgdXNpbmcgUHl0aG9uCisgICBjb2RlIHRoYXQgY2FsbHMgdGhlIGNvbmZpZ3VyYXRpb24gbWV0aG9kcyBsaXN0ZWQgYWJvdmUuCisyLiBDcmVhdGluZyBhIGxvZ2dpbmcgY29uZmlnIGZpbGUgYW5kIHJlYWRpbmcgaXQgdXNpbmcgdGhlIDpmdW5jOmBmaWxlQ29uZmlnYAorICAgZnVuY3Rpb24uCiszLiBDcmVhdGluZyBhIGRpY3Rpb25hcnkgb2YgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcGFzc2luZyBpdAorICAgdG8gdGhlIDpmdW5jOmBkaWN0Q29uZmlnYCBmdW5jdGlvbi4KKworVGhlIGZvbGxvd2luZyBleGFtcGxlIGNvbmZpZ3VyZXMgYSB2ZXJ5IHNpbXBsZSBsb2dnZXIsIGEgY29uc29sZQoraGFuZGxlciwgYW5kIGEgc2ltcGxlIGZvcm1hdHRlciB1c2luZyBQeXRob24gY29kZTo6CiAKICAgICBpbXBvcnQgbG9nZ2luZwogCiAgICAgIyBjcmVhdGUgbG9nZ2VyCiAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInNpbXBsZV9leGFtcGxlIikKICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKwogICAgICMgY3JlYXRlIGNvbnNvbGUgaGFuZGxlciBhbmQgc2V0IGxldmVsIHRvIGRlYnVnCiAgICAgY2ggPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQogICAgIGNoLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKICAgICAjIGNyZWF0ZSBmb3JtYXR0ZXIKICAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcigiJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcyIpCisKICAgICAjIGFkZCBmb3JtYXR0ZXIgdG8gY2gKICAgICBjaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorCiAgICAgIyBhZGQgY2ggdG8gbG9nZ2VyCiAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY2gpCiAKQEAgLTQyNSw2ICs0NDMsNTIgQEAKIGNvZGUgYXBwcm9hY2gsIG1haW5seSBzZXBhcmF0aW9uIG9mIGNvbmZpZ3VyYXRpb24gYW5kIGNvZGUgYW5kIHRoZSBhYmlsaXR5IG9mCiBub25jb2RlcnMgdG8gZWFzaWx5IG1vZGlmeSB0aGUgbG9nZ2luZyBwcm9wZXJ0aWVzLgogCitOb3RlIHRoYXQgdGhlIGNsYXNzIG5hbWVzIHJlZmVyZW5jZWQgaW4gY29uZmlnIGZpbGVzIG5lZWQgdG8gYmUgZWl0aGVyIHJlbGF0aXZlCit0byB0aGUgbG9nZ2luZyBtb2R1bGUsIG9yIGFic29sdXRlIHZhbHVlcyB3aGljaCBjYW4gYmUgcmVzb2x2ZWQgdXNpbmcgbm9ybWFsCitpbXBvcnQgbWVjaGFuaXNtcy4gVGh1cywgeW91IGNvdWxkIHVzZSBlaXRoZXIgOmNsYXNzOmBoYW5kbGVycy5XYXRjaGVkRmlsZUhhbmRsZXJgCisocmVsYXRpdmUgdG8gdGhlIGxvZ2dpbmcgbW9kdWxlKSBvciA6Y2xhc3M6YG15cGFja2FnZS5teW1vZHVsZS5NeUhhbmRsZXJgIChmb3IgYQorY2xhc3MgZGVmaW5lZCBpbiBwYWNrYWdlIDptb2Q6YG15cGFja2FnZWAgYW5kIG1vZHVsZSA6bW9kOmBteW1vZHVsZWAsIHdoZXJlCis6bW9kOmBteXBhY2thZ2VgIGlzIGF2YWlsYWJsZSBvbiB0aGUgUHl0aG9uIGltcG9ydCBwYXRoKS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKworSW4gUHl0aG9uIDIuNywgYSBuZXcgbWVhbnMgb2YgY29uZmlndXJpbmcgbG9nZ2luZyBoYXMgYmVlbiBpbnRyb2R1Y2VkLCB1c2luZworZGljdGlvbmFyaWVzIHRvIGhvbGQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4gVGhpcyBwcm92aWRlcyBhIHN1cGVyc2V0IG9mIHRoZQorZnVuY3Rpb25hbGl0eSBvZiB0aGUgY29uZmlnLWZpbGUtYmFzZWQgYXBwcm9hY2ggb3V0bGluZWQgYWJvdmUsIGFuZCBpcyB0aGUKK3JlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGZvciBuZXcgYXBwbGljYXRpb25zIGFuZCBkZXBsb3ltZW50cy4gQmVjYXVzZQorYSBQeXRob24gZGljdGlvbmFyeSBpcyB1c2VkIHRvIGhvbGQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiwgYW5kIHNpbmNlIHlvdQorY2FuIHBvcHVsYXRlIHRoYXQgZGljdGlvbmFyeSB1c2luZyBkaWZmZXJlbnQgbWVhbnMsIHlvdSBoYXZlIG1vcmUgb3B0aW9ucyBmb3IKK2NvbmZpZ3VyYXRpb24uIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBhIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiBKU09OIGZvcm1hdCwKK29yLCBpZiB5b3UgaGF2ZSBhY2Nlc3MgdG8gWUFNTCBwcm9jZXNzaW5nIGZ1bmN0aW9uYWxpdHksIGEgZmlsZSBpbiBZQU1MCitmb3JtYXQsIHRvIHBvcHVsYXRlIHRoZSBjb25maWd1cmF0aW9uIGRpY3Rpb25hcnkuIE9yLCBvZiBjb3Vyc2UsIHlvdSBjYW4KK2NvbnN0cnVjdCB0aGUgZGljdGlvbmFyeSBpbiBQeXRob24gY29kZSwgcmVjZWl2ZSBpdCBpbiBwaWNrbGVkIGZvcm0gb3ZlciBhCitzb2NrZXQsIG9yIHVzZSB3aGF0ZXZlciBhcHByb2FjaCBtYWtlcyBzZW5zZSBmb3IgeW91ciBhcHBsaWNhdGlvbi4KKworSGVyZSdzIGFuIGV4YW1wbGUgb2YgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBhcyBhYm92ZSwgaW4gWUFNTCBmb3JtYXQgZm9yCit0aGUgbmV3IGRpY3Rpb25hcnktYmFzZWQgYXBwcm9hY2g6OgorCisgICAgdmVyc2lvbjogMQorICAgIGZvcm1hdHRlcnM6CisgICAgICBzaW1wbGU6CisgICAgICAgIGZvcm1hdDogZm9ybWF0PSUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMKKyAgICBoYW5kbGVyczoKKyAgICAgIGNvbnNvbGU6CisgICAgICAgIGNsYXNzOiBsb2dnaW5nLlN0cmVhbUhhbmRsZXIKKyAgICAgICAgbGV2ZWw6IERFQlVHCisgICAgICAgIGZvcm1hdHRlcjogc2ltcGxlCisgICAgICAgIHN0cmVhbTogZXh0Oi8vc3lzLnN0ZG91dAorICAgIGxvZ2dlcnM6CisgICAgICBzaW1wbGVFeGFtcGxlOgorICAgICAgICBsZXZlbDogREVCVUcKKyAgICAgICAgaGFuZGxlcnM6IFtjb25zb2xlXQorICAgICAgICBwcm9wYWdhdGU6IG5vCisgICAgcm9vdDoKKyAgICAgICAgbGV2ZWw6IERFQlVHCisgICAgICAgIGhhbmRsZXJzOiBbY29uc29sZV0KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbG9nZ2luZyB1c2luZyBhIGRpY3Rpb25hcnksIHNlZQorOnJlZjpgbG9nZ2luZy1jb25maWctYXBpYC4KKwogLi4gX2xpYnJhcnktY29uZmlnOgogCiBDb25maWd1cmluZyBMb2dnaW5nIGZvciBhIExpYnJhcnkKQEAgLTQ2Niw2ICs1MzAsMTcgQEAKIGxpYnJhcmllcywgdGhlbiB0aGUgbG9nZ2VyIG5hbWUgc3BlY2lmaWVkIGNhbiBiZSAib3JnbmFtZS5mb28iIHJhdGhlciB0aGFuCiBqdXN0ICJmb28iLgogCisqKlBMRUFTRSBOT1RFOioqIEl0IGlzIHN0cm9uZ2x5IGFkdmlzZWQgdGhhdCB5b3UgKmRvIG5vdCBhZGQgYW55IGhhbmRsZXJzIG90aGVyCit0aGFuKiA6Y2xhc3M6YE51bGxIYW5kbGVyYCAqdG8geW91ciBsaWJyYXJ5J3MgbG9nZ2VycyouIFRoaXMgaXMgYmVjYXVzZSB0aGUKK2NvbmZpZ3VyYXRpb24gb2YgaGFuZGxlcnMgaXMgdGhlIHByZXJvZ2F0aXZlIG9mIHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgd2hvCit1c2VzIHlvdXIgbGlicmFyeS4gVGhlIGFwcGxpY2F0aW9uIGRldmVsb3BlciBrbm93cyB0aGVpciB0YXJnZXQgYXVkaWVuY2UgYW5kCit3aGF0IGhhbmRsZXJzIGFyZSBtb3N0IGFwcHJvcHJpYXRlIGZvciB0aGVpciBhcHBsaWNhdGlvbjogaWYgeW91IGFkZCBoYW5kbGVycworInVuZGVyIHRoZSBob29kIiwgeW91IG1pZ2h0IHdlbGwgaW50ZXJmZXJlIHdpdGggdGhlaXIgYWJpbGl0eSB0byBjYXJyeSBvdXQKK3VuaXQgdGVzdHMgYW5kIGRlbGl2ZXIgbG9ncyB3aGljaCBzdWl0IHRoZWlyIHJlcXVpcmVtZW50cy4KKworLi4gdmVyc2lvbmFkZGVkOjogMi43CisgICBUaGUgOmNsYXNzOmBOdWxsSGFuZGxlcmAgY2xhc3MuCisKIAogTG9nZ2luZyBMZXZlbHMKIC0tLS0tLS0tLS0tLS0tCkBAIC01MjMsNiArNTk4LDIyIEBACiB0aGUgbWVzc2FnZSB0byBpdHMgZGVzdGluYXRpb24uIE1vc3QgdXNlci1kZWZpbmVkIHN1YmNsYXNzZXMgb2YgOmNsYXNzOmBIYW5kbGVyYAogd2lsbCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgOm1ldGg6YGVtaXRgLgogCisuLiBfY3VzdG9tLWxldmVsczoKKworQ3VzdG9tIExldmVscworXl5eXl5eXl5eXl5eXgorCitEZWZpbmluZyB5b3VyIG93biBsZXZlbHMgaXMgcG9zc2libGUsIGJ1dCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgYXMgdGhlCitleGlzdGluZyBsZXZlbHMgaGF2ZSBiZWVuIGNob3NlbiBvbiB0aGUgYmFzaXMgb2YgcHJhY3RpY2FsIGV4cGVyaWVuY2UuCitIb3dldmVyLCBpZiB5b3UgYXJlIGNvbnZpbmNlZCB0aGF0IHlvdSBuZWVkIGN1c3RvbSBsZXZlbHMsIGdyZWF0IGNhcmUgc2hvdWxkCitiZSBleGVyY2lzZWQgd2hlbiBkb2luZyB0aGlzLCBhbmQgaXQgaXMgcG9zc2libHkgKmEgdmVyeSBiYWQgaWRlYSB0byBkZWZpbmUKK2N1c3RvbSBsZXZlbHMgaWYgeW91IGFyZSBkZXZlbG9waW5nIGEgbGlicmFyeSouIFRoYXQncyBiZWNhdXNlIGlmIG11bHRpcGxlCitsaWJyYXJ5IGF1dGhvcnMgYWxsIGRlZmluZSB0aGVpciBvd24gY3VzdG9tIGxldmVscywgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdAordGhlIGxvZ2dpbmcgb3V0cHV0IGZyb20gc3VjaCBtdWx0aXBsZSBsaWJyYXJpZXMgdXNlZCB0b2dldGhlciB3aWxsIGJlCitkaWZmaWN1bHQgZm9yIHRoZSB1c2luZyBkZXZlbG9wZXIgdG8gY29udHJvbCBhbmQvb3IgaW50ZXJwcmV0LCBiZWNhdXNlIGEKK2dpdmVuIG51bWVyaWMgdmFsdWUgbWlnaHQgbWVhbiBkaWZmZXJlbnQgdGhpbmdzIGZvciBkaWZmZXJlbnQgbGlicmFyaWVzLgorCisKIFVzZWZ1bCBIYW5kbGVycwogLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTU3MSw3ICs2NjIsMTYgQEAKICAgIG5hbWUuIFRoaXMgaGFuZGxlciBpcyBvbmx5IHVzZWZ1bCBvbiBVbml4LWxpa2Ugc3lzdGVtczsgV2luZG93cyBkb2VzIG5vdAogICAgc3VwcG9ydCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gdXNlZC4KIAotVGhlIDpjbGFzczpgU3RyZWFtSGFuZGxlcmAgYW5kIDpjbGFzczpgRmlsZUhhbmRsZXJgCisjLiA6cmVmOmBudWxsLWhhbmRsZXJgIGluc3RhbmNlcyBkbyBub3RoaW5nIHdpdGggZXJyb3IgbWVzc2FnZXMuIFRoZXkgYXJlIHVzZWQKKyAgIGJ5IGxpYnJhcnkgZGV2ZWxvcGVycyB3aG8gd2FudCB0byB1c2UgbG9nZ2luZywgYnV0IHdhbnQgdG8gYXZvaWQgdGhlICJObworICAgaGFuZGxlcnMgY291bGQgYmUgZm91bmQgZm9yIGxvZ2dlciBYWFgiIG1lc3NhZ2Ugd2hpY2ggY2FuIGJlIGRpc3BsYXllZCBpZgorICAgdGhlIGxpYnJhcnkgdXNlciBoYXMgbm90IGNvbmZpZ3VyZWQgbG9nZ2luZy4gU2VlIDpyZWY6YGxpYnJhcnktY29uZmlnYCBmb3IKKyAgIG1vcmUgaW5mb3JtYXRpb24uCisKKy4uIHZlcnNpb25hZGRlZDo6IDIuNworICAgVGhlIDpjbGFzczpgTnVsbEhhbmRsZXJgIGNsYXNzLgorCitUaGUgOmNsYXNzOmBOdWxsSGFuZGxlcmAsIDpjbGFzczpgU3RyZWFtSGFuZGxlcmAgYW5kIDpjbGFzczpgRmlsZUhhbmRsZXJgCiBjbGFzc2VzIGFyZSBkZWZpbmVkIGluIHRoZSBjb3JlIGxvZ2dpbmcgcGFja2FnZS4gVGhlIG90aGVyIGhhbmRsZXJzIGFyZQogZGVmaW5lZCBpbiBhIHN1Yi0gbW9kdWxlLCA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYC4gKFRoZXJlIGlzIGFsc28gYW5vdGhlcgogc3ViLW1vZHVsZSwgOm1vZDpgbG9nZ2luZy5jb25maWdgLCBmb3IgY29uZmlndXJhdGlvbiBmdW5jdGlvbmFsaXR5LikKQEAgLTY1MCw3ICs3NTAsNyBAQAogICAgICAgZCA9IHsnY2xpZW50aXAnOiAnMTkyLjE2OC4wLjEnLCAndXNlcic6ICdmYmxvZ2dzJ30KICAgICAgIGxvZ2dpbmcud2FybmluZygiUHJvdG9jb2wgcHJvYmxlbTogJXMiLCAiY29ubmVjdGlvbiByZXNldCIsIGV4dHJhPWQpCiAKLSAgIHdvdWxkIHByaW50IHNvbWV0aGluZyBsaWtlICA6OgorICAgd291bGQgcHJpbnQgc29tZXRoaW5nIGxpa2U6OgogCiAgICAgICAyMDA2LTAyLTA4IDIyOjIwOjAyLDE2NSAxOTIuMTY4LjAuMSBmYmxvZ2dzICBQcm90b2NvbCBwcm9ibGVtOiBjb25uZWN0aW9uIHJlc2V0CiAKQEAgLTcxMiw2ICs4MTIsMTQgQEAKICAgIExvZ3MgYSBtZXNzYWdlIHdpdGggbGV2ZWwgKmxldmVsKiBvbiB0aGUgcm9vdCBsb2dnZXIuIFRoZSBvdGhlciBhcmd1bWVudHMgYXJlCiAgICBpbnRlcnByZXRlZCBhcyBmb3IgOmZ1bmM6YGRlYnVnYC4KIAorICAgUExFQVNFIE5PVEU6IFRoZSBhYm92ZSBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zIHdoaWNoIGRlbGVnYXRlIHRvIHRoZSByb290CisgICBsb2dnZXIgc2hvdWxkICpub3QqIGJlIHVzZWQgaW4gdGhyZWFkcywgaW4gdmVyc2lvbnMgb2YgUHl0aG9uIGVhcmxpZXIgdGhhbgorICAgMi43LjEgYW5kIDMuMiwgdW5sZXNzIGF0IGxlYXN0IG9uZSBoYW5kbGVyIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSByb290CisgICBsb2dnZXIgKmJlZm9yZSogdGhlIHRocmVhZHMgYXJlIHN0YXJ0ZWQuIFRoZXNlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBjYWxsCisgICA6ZnVuYzpgYmFzaWNDb25maWdgIHRvIGVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBoYW5kbGVyIGlzIGF2YWlsYWJsZTsgaW4KKyAgIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uLCB0aGlzIGNhbiAodW5kZXIgcmFyZSBjaXJjdW1zdGFuY2VzKSBsZWFkIHRvCisgICBoYW5kbGVycyBiZWluZyBhZGRlZCBtdWx0aXBsZSB0aW1lcyB0byB0aGUgcm9vdCBsb2dnZXIsIHdoaWNoIGNhbiBpbiB0dXJuCisgICBsZWFkIHRvIG11bHRpcGxlIG1lc3NhZ2VzIGZvciB0aGUgc2FtZSBldmVudC4KIAogLi4gZnVuY3Rpb246OiBkaXNhYmxlKGx2bCkKIApAQCAtNzMzLDYgKzg0MSw4IEBACiAgICByZWdpc3RlcmVkIHVzaW5nIHRoaXMgZnVuY3Rpb24sIGxldmVscyBzaG91bGQgYmUgcG9zaXRpdmUgaW50ZWdlcnMgYW5kIHRoZXkKICAgIHNob3VsZCBpbmNyZWFzZSBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIHNldmVyaXR5LgogCisgICBOT1RFOiBJZiB5b3UgYXJlIHRoaW5raW5nIG9mIGRlZmluaW5nIHlvdXIgb3duIGxldmVscywgcGxlYXNlIHNlZSB0aGUgc2VjdGlvbgorICAgb24gOnJlZjpgY3VzdG9tLWxldmVsc2AuCiAKIC4uIGZ1bmN0aW9uOjogZ2V0TGV2ZWxOYW1lKGx2bCkKIApAQCAtNzY3LDYgKzg3NywxMyBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjQKICAgICAgIEZvcm1lcmx5LCA6ZnVuYzpgYmFzaWNDb25maWdgIGRpZCBub3QgdGFrZSBhbnkga2V5d29yZCBhcmd1bWVudHMuCiAKKyAgIFBMRUFTRSBOT1RFOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQKKyAgIGJlZm9yZSBvdGhlciB0aHJlYWRzIGFyZSBzdGFydGVkLiBJbiB2ZXJzaW9ucyBvZiBQeXRob24gcHJpb3IgdG8KKyAgIDIuNy4xIGFuZCAzLjIsIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcywKKyAgIGl0IGlzIHBvc3NpYmxlIChpbiByYXJlIGNpcmN1bXN0YW5jZXMpIHRoYXQgYSBoYW5kbGVyIHdpbGwgYmUgYWRkZWQKKyAgIHRvIHRoZSByb290IGxvZ2dlciBtb3JlIHRoYW4gb25jZSwgbGVhZGluZyB0byB1bmV4cGVjdGVkIHJlc3VsdHMKKyAgIHN1Y2ggYXMgbWVzc2FnZXMgYmVpbmcgZHVwbGljYXRlZCBpbiB0aGUgbG9nLgorCiAgICBUaGUgZm9sbG93aW5nIGtleXdvcmQgYXJndW1lbnRzIGFyZSBzdXBwb3J0ZWQuCiAKICAgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC04MTEsNiArOTI4LDcgQEAKICAgIHdoaWNoIG5lZWQgdG8gdXNlIGN1c3RvbSBsb2dnZXIgYmVoYXZpb3IuCiAKIAorCiAuLiBzZWVhbHNvOjoKIAogICAgOnBlcDpgMjgyYCAtIEEgTG9nZ2luZyBTeXN0ZW0KQEAgLTg3Niw2ICs5OTQsMTYgQEAKICAgIDpjb25zdDpgTk9UU0VUYCBpcyBmb3VuZCwgYW5kIHRoYXQgdmFsdWUgaXMgcmV0dXJuZWQuCiAKIAorLi4gbWV0aG9kOjogTG9nZ2VyLmdldENoaWxkKHN1ZmZpeCkKKworICAgUmV0dXJucyBhIGxvZ2dlciB3aGljaCBpcyBhIGRlc2NlbmRhbnQgdG8gdGhpcyBsb2dnZXIsIGFzIGRldGVybWluZWQgYnkgdGhlIHN1ZmZpeC4KKyAgIFRodXMsIGBgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYycpLmdldENoaWxkKCdkZWYuZ2hpJylgYCB3b3VsZCByZXR1cm4gdGhlIHNhbWUKKyAgIGxvZ2dlciBhcyB3b3VsZCBiZSByZXR1cm5lZCBieSBgYGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmLmdoaScpYGAuIFRoaXMgaXMgYQorICAgY29udmVuaWVuY2UgbWV0aG9kLCB1c2VmdWwgd2hlbiB0aGUgcGFyZW50IGxvZ2dlciBpcyBuYW1lZCB1c2luZyBlLmcuIGBgX19uYW1lX19gYAorICAgcmF0aGVyIHRoYW4gYSBsaXRlcmFsIHN0cmluZy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKIC4uIG1ldGhvZDo6IExvZ2dlci5kZWJ1Zyhtc2dbLCAqYXJnc1ssICoqa3dhcmdzXV0pCiAKICAgIExvZ3MgYSBtZXNzYWdlIHdpdGggbGV2ZWwgOmNvbnN0OmBERUJVR2Agb24gdGhpcyBsb2dnZXIuIFRoZSAqbXNnKiBpcyB0aGUKQEAgLTEyNDUsNiArMTM3MywxMCBAQAogYmUgaGFyZCB0byBtYW5hZ2UgaWYgdGhlIG51bWJlciBvZiA6Y2xhc3M6YExvZ2dlcmAgaW5zdGFuY2VzIGJlY29tZXMKIGVmZmVjdGl2ZWx5IHVuYm91bmRlZC4KIAorCitVc2luZyBMb2dnZXJBZGFwdGVycyB0byBpbXBhcnQgY29udGV4dHVhbCBpbmZvcm1hdGlvbgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKwogQW4gZWFzeSB3YXkgaW4gd2hpY2ggeW91IGNhbiBwYXNzIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8gYmUgb3V0cHV0IGFsb25nCiB3aXRoIGxvZ2dpbmcgZXZlbnQgaW5mb3JtYXRpb24gaXMgdG8gdXNlIHRoZSA6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgIGNsYXNzLgogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBsb29rIGxpa2UgYSA6Y2xhc3M6YExvZ2dlcmAsIHNvIHRoYXQgeW91IGNhbiBjYWxsCkBAIC0xMzUyLDYgKzE0ODQsODAgQEAKIAogVGhlIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgY2xhc3Mgd2FzIG5vdCBwcmVzZW50IGluIHByZXZpb3VzIHZlcnNpb25zLgogCisuLiBfZmlsdGVycy1jb250ZXh0dWFsOgorCitVc2luZyBGaWx0ZXJzIHRvIGltcGFydCBjb250ZXh0dWFsIGluZm9ybWF0aW9uCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1lvdSBjYW4gYWxzbyBhZGQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byBsb2cgb3V0cHV0IHVzaW5nIGEgdXNlci1kZWZpbmVkCis6Y2xhc3M6YEZpbHRlcmAuIGBgRmlsdGVyYGAgaW5zdGFuY2VzIGFyZSBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgYGBMb2dSZWNvcmRzYGAKK3Bhc3NlZCB0byB0aGVtLCBpbmNsdWRpbmcgYWRkaW5nIGFkZGl0aW9uYWwgYXR0cmlidXRlcyB3aGljaCBjYW4gdGhlbiBiZSBvdXRwdXQKK3VzaW5nIGEgc3VpdGFibGUgZm9ybWF0IHN0cmluZywgb3IgaWYgbmVlZGVkIGEgY3VzdG9tIDpjbGFzczpgRm9ybWF0dGVyYC4KKworRm9yIGV4YW1wbGUgaW4gYSB3ZWIgYXBwbGljYXRpb24sIHRoZSByZXF1ZXN0IGJlaW5nIHByb2Nlc3NlZCAob3IgYXQgbGVhc3QsCit0aGUgaW50ZXJlc3RpbmcgcGFydHMgb2YgaXQpIGNhbiBiZSBzdG9yZWQgaW4gYSB0aHJlYWRsb2NhbAorKDpjbGFzczpgdGhyZWFkaW5nLmxvY2FsYCkgdmFyaWFibGUsIGFuZCB0aGVuIGFjY2Vzc2VkIGZyb20gYSBgYEZpbHRlcmBgIHRvCithZGQsIHNheSwgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVxdWVzdCAtIHNheSwgdGhlIHJlbW90ZSBJUCBhZGRyZXNzIGFuZCByZW1vdGUKK3VzZXIncyB1c2VybmFtZSAtIHRvIHRoZSBgYExvZ1JlY29yZGBgLCB1c2luZyB0aGUgYXR0cmlidXRlIG5hbWVzICdpcCcgYW5kCisndXNlcicgYXMgaW4gdGhlIGBgTG9nZ2VyQWRhcHRlcmBgIGV4YW1wbGUgYWJvdmUuIEluIHRoYXQgY2FzZSwgdGhlIHNhbWUgZm9ybWF0CitzdHJpbmcgY2FuIGJlIHVzZWQgdG8gZ2V0IHNpbWlsYXIgb3V0cHV0IHRvIHRoYXQgc2hvd24gYWJvdmUuIEhlcmUncyBhbiBleGFtcGxlCitzY3JpcHQ6OgorCisgICAgaW1wb3J0IGxvZ2dpbmcKKyAgICBmcm9tIHJhbmRvbSBpbXBvcnQgY2hvaWNlCisKKyAgICBjbGFzcyBDb250ZXh0RmlsdGVyKGxvZ2dpbmcuRmlsdGVyKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgaXMgYSBmaWx0ZXIgd2hpY2ggaW5qZWN0cyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGludG8gdGhlIGxvZy4KKworICAgICAgICBSYXRoZXIgdGhhbiB1c2UgYWN0dWFsIGNvbnRleHR1YWwgaW5mb3JtYXRpb24sIHdlIGp1c3QgdXNlIHJhbmRvbQorICAgICAgICBkYXRhIGluIHRoaXMgZGVtby4KKyAgICAgICAgIiIiCisKKyAgICAgICAgVVNFUlMgPSBbJ2ppbScsICdmcmVkJywgJ3NoZWlsYSddCisgICAgICAgIElQUyA9IFsnMTIzLjIzMS4yMzEuMTIzJywgJzEyNy4wLjAuMScsICcxOTIuMTY4LjAuMSddCisKKyAgICAgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorCisgICAgICAgICAgICByZWNvcmQuaXAgPSBjaG9pY2UoQ29udGV4dEZpbHRlci5JUFMpCisgICAgICAgICAgICByZWNvcmQudXNlciA9IGNob2ljZShDb250ZXh0RmlsdGVyLlVTRVJTKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgICAgbGV2ZWxzID0gKGxvZ2dpbmcuREVCVUcsIGxvZ2dpbmcuSU5GTywgbG9nZ2luZy5XQVJOSU5HLCBsb2dnaW5nLkVSUk9SLCBsb2dnaW5nLkNSSVRJQ0FMKQorICAgICAgIGExID0gbG9nZ2luZy5Mb2dnZXJBZGFwdGVyKGxvZ2dpbmcuZ2V0TG9nZ2VyKCJhLmIuYyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgImlwIiA6ICIxMjMuMjMxLjIzMS4xMjMiLCAidXNlciIgOiAic2hlaWxhIiB9KQorICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5ERUJVRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0iJShhc2N0aW1lKS0xNXMgJShuYW1lKS01cyAlKGxldmVsbmFtZSktOHMgSVA6ICUoaXApLTE1cyBVc2VyOiAlKHVzZXIpLThzICUobWVzc2FnZSlzIikKKyAgICAgICBhMSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJhLmIuYyIpCisgICAgICAgYTIgPSBsb2dnaW5nLmdldExvZ2dlcigiZC5lLmYiKQorCisgICAgICAgZiA9IENvbnRleHRGaWx0ZXIoKQorICAgICAgIGExLmFkZEZpbHRlcihmKQorICAgICAgIGEyLmFkZEZpbHRlcihmKQorICAgICAgIGExLmRlYnVnKCJBIGRlYnVnIG1lc3NhZ2UiKQorICAgICAgIGExLmluZm8oIkFuIGluZm8gbWVzc2FnZSB3aXRoICVzIiwgInNvbWUgcGFyYW1ldGVycyIpCisgICAgICAgZm9yIHggaW4gcmFuZ2UoMTApOgorICAgICAgICAgICBsdmwgPSBjaG9pY2UobGV2ZWxzKQorICAgICAgICAgICBsdmxuYW1lID0gbG9nZ2luZy5nZXRMZXZlbE5hbWUobHZsKQorICAgICAgICAgICBhMi5sb2cobHZsLCAiQSBtZXNzYWdlIGF0ICVzIGxldmVsIHdpdGggJWQgJXMiLCBsdmxuYW1lLCAyLCAicGFyYW1ldGVycyIpCisKK3doaWNoLCB3aGVuIHJ1biwgcHJvZHVjZXMgc29tZXRoaW5nIGxpa2U6OgorCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwyOTIgYS5iLmMgREVCVUcgICAgSVA6IDEyMy4yMzEuMjMxLjEyMyBVc2VyOiBmcmVkICAgICBBIGRlYnVnIG1lc3NhZ2UKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBhLmIuYyBJTkZPICAgICBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IHNoZWlsYSAgIEFuIGluZm8gbWVzc2FnZSB3aXRoIHNvbWUgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAwIGQuZS5mIENSSVRJQ0FMIElQOiAxMjcuMC4wLjEgICAgICAgVXNlcjogc2hlaWxhICAgQSBtZXNzYWdlIGF0IENSSVRJQ0FMIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDAgZC5lLmYgRVJST1IgICAgSVA6IDEyNy4wLjAuMSAgICAgICBVc2VyOiBqaW0gICAgICBBIG1lc3NhZ2UgYXQgRVJST1IgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBkLmUuZiBERUJVRyAgICBJUDogMTI3LjAuMC4xICAgICAgIFVzZXI6IHNoZWlsYSAgIEEgbWVzc2FnZSBhdCBERUJVRyBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAwIGQuZS5mIEVSUk9SICAgIElQOiAxMjMuMjMxLjIzMS4xMjMgVXNlcjogZnJlZCAgICAgQSBtZXNzYWdlIGF0IEVSUk9SIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDAgZC5lLmYgQ1JJVElDQUwgSVA6IDE5Mi4xNjguMC4xICAgICBVc2VyOiBqaW0gICAgICBBIG1lc3NhZ2UgYXQgQ1JJVElDQUwgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBkLmUuZiBDUklUSUNBTCBJUDogMTI3LjAuMC4xICAgICAgIFVzZXI6IHNoZWlsYSAgIEEgbWVzc2FnZSBhdCBDUklUSUNBTCBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAwIGQuZS5mIERFQlVHICAgIElQOiAxOTIuMTY4LjAuMSAgICAgVXNlcjogamltICAgICAgQSBtZXNzYWdlIGF0IERFQlVHIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDEgZC5lLmYgRVJST1IgICAgSVA6IDEyNy4wLjAuMSAgICAgICBVc2VyOiBzaGVpbGEgICBBIG1lc3NhZ2UgYXQgRVJST1IgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMSBkLmUuZiBERUJVRyAgICBJUDogMTIzLjIzMS4yMzEuMTIzIFVzZXI6IGZyZWQgICAgIEEgbWVzc2FnZSBhdCBERUJVRyBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAxIGQuZS5mIElORk8gICAgIElQOiAxMjMuMjMxLjIzMS4xMjMgVXNlcjogZnJlZCAgICAgQSBtZXNzYWdlIGF0IElORk8gbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKworCiAuLiBfbXVsdGlwbGUtcHJvY2Vzc2VzOgogCiBMb2dnaW5nIHRvIGEgc2luZ2xlIGZpbGUgZnJvbSBtdWx0aXBsZSBwcm9jZXNzZXMKQEAgLTE1MTMsNiArMTcxOSw4IEBACiB0aGUgOm1ldGg6YG1ha2VQaWNrbGVgIG1ldGhvZCBhbmQgaW1wbGVtZW50aW5nIHlvdXIgYWx0ZXJuYXRpdmUgdGhlcmUsIGFzCiB3ZWxsIGFzIGFkYXB0aW5nIHRoZSBhYm92ZSBzY3JpcHQgdG8gdXNlIHlvdXIgYWx0ZXJuYXRpdmUgc2VyaWFsaXphdGlvbi4KIAorLi4gX2FyYml0cmFyeS1vYmplY3QtbWVzc2FnZXM6CisKIFVzaW5nIGFyYml0cmFyeSBvYmplY3RzIGFzIG1lc3NhZ2VzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xNjgxLDkgKzE4ODksOSBAQAogCiAuLiBjdXJyZW50bW9kdWxlOjogbG9nZ2luZwogCi0uLiBjbGFzczo6IFN0cmVhbUhhbmRsZXIoW3N0cm1dKQorLi4gY2xhc3M6OiBTdHJlYW1IYW5kbGVyKFtzdHJlYW1dKQogCi0gICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFN0cmVhbUhhbmRsZXJgIGNsYXNzLiBJZiAqc3RybSogaXMKKyAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgU3RyZWFtSGFuZGxlcmAgY2xhc3MuIElmICpzdHJlYW0qIGlzCiAgICBzcGVjaWZpZWQsIHRoZSBpbnN0YW5jZSB3aWxsIHVzZSBpdCBmb3IgbG9nZ2luZyBvdXRwdXQ7IG90aGVyd2lzZSwgKnN5cy5zdGRlcnIqCiAgICB3aWxsIGJlIHVzZWQuCiAKQEAgLTE3MzMsOCArMTk0MSwzNiBAQAogCiAgICAgICBPdXRwdXRzIHRoZSByZWNvcmQgdG8gdGhlIGZpbGUuCiAKKwogLi4gX251bGwtaGFuZGxlcjoKIAorTnVsbEhhbmRsZXIKK15eXl5eXl5eXl5eCisKKy4uIHZlcnNpb25hZGRlZDo6IDIuNworCitUaGUgOmNsYXNzOmBOdWxsSGFuZGxlcmAgY2xhc3MsIGxvY2F0ZWQgaW4gdGhlIGNvcmUgOm1vZDpgbG9nZ2luZ2AgcGFja2FnZSwKK2RvZXMgbm90IGRvIGFueSBmb3JtYXR0aW5nIG9yIG91dHB1dC4gSXQgaXMgZXNzZW50aWFsbHkgYSAibm8tb3AiIGhhbmRsZXIKK2ZvciB1c2UgYnkgbGlicmFyeSBkZXZlbG9wZXJzLgorCisuLiBjbGFzczo6IE51bGxIYW5kbGVyKCkKKworICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBOdWxsSGFuZGxlcmAgY2xhc3MuCisKKyAgIC4uIG1ldGhvZDo6IGVtaXQocmVjb3JkKQorCisgICAgICBUaGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcuCisKKyAgIC4uIG1ldGhvZDo6IGhhbmRsZShyZWNvcmQpCisKKyAgICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy4KKworICAgLi4gbWV0aG9kOjogY3JlYXRlTG9jaygpCisKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYE5vbmVgIGZvciB0aGUgbG9jaywgc2luY2UgdGhlcmUgaXMgbm8KKyAgICAgIHVuZGVybHlpbmcgSS9PIHRvIHdoaWNoIGFjY2VzcyBuZWVkcyB0byBiZSBzZXJpYWxpemVkLgorCisKIFNlZSA6cmVmOmBsaWJyYXJ5LWNvbmZpZ2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQogOmNsYXNzOmBOdWxsSGFuZGxlcmAuCiAKQEAgLTE3NDUsNiArMTk4MSw4IEBACiAKIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCisuLiBjdXJyZW50bW9kdWxlOjogbG9nZ2luZy5oYW5kbGVycworCiBUaGUgOmNsYXNzOmBXYXRjaGVkRmlsZUhhbmRsZXJgIGNsYXNzLCBsb2NhdGVkIGluIHRoZSA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYAogbW9kdWxlLCBpcyBhIDpjbGFzczpgRmlsZUhhbmRsZXJgIHdoaWNoIHdhdGNoZXMgdGhlIGZpbGUgaXQgaXMgbG9nZ2luZyB0by4gSWYKIHRoZSBmaWxlIGNoYW5nZXMsIGl0IGlzIGNsb3NlZCBhbmQgcmVvcGVuZWQgdXNpbmcgdGhlIGZpbGUgbmFtZS4KQEAgLTE5OTcsMTYgKzIyMzUsMjIgQEAKIHN1cHBvcnRzIHNlbmRpbmcgbG9nZ2luZyBtZXNzYWdlcyB0byBhIHJlbW90ZSBvciBsb2NhbCBVbml4IHN5c2xvZy4KIAogCi0uLiBjbGFzczo6IFN5c0xvZ0hhbmRsZXIoW2FkZHJlc3NbLCBmYWNpbGl0eV1dKQorLi4gY2xhc3M6OiBTeXNMb2dIYW5kbGVyKFthZGRyZXNzWywgZmFjaWxpdHlbLCBzb2NrdHlwZV1dXSkKIAogICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBTeXNMb2dIYW5kbGVyYCBjbGFzcyBpbnRlbmRlZCB0bwogICAgY29tbXVuaWNhdGUgd2l0aCBhIHJlbW90ZSBVbml4IG1hY2hpbmUgd2hvc2UgYWRkcmVzcyBpcyBnaXZlbiBieSAqYWRkcmVzcyogaW4KICAgIHRoZSBmb3JtIG9mIGEgYGAoaG9zdCwgcG9ydClgYCB0dXBsZS4gIElmICphZGRyZXNzKiBpcyBub3Qgc3BlY2lmaWVkLAotICAgYGAoJ2xvY2FsaG9zdCcsIDUxNClgYCBpcyB1c2VkLiAgVGhlIGFkZHJlc3MgaXMgdXNlZCB0byBvcGVuIGEgVURQIHNvY2tldC4gIEFuCisgICBgYCgnbG9jYWxob3N0JywgNTE0KWBgIGlzIHVzZWQuICBUaGUgYWRkcmVzcyBpcyB1c2VkIHRvIG9wZW4gYSBzb2NrZXQuICBBbgogICAgYWx0ZXJuYXRpdmUgdG8gcHJvdmlkaW5nIGEgYGAoaG9zdCwgcG9ydClgYCB0dXBsZSBpcyBwcm92aWRpbmcgYW4gYWRkcmVzcyBhcyBhCiAgICBzdHJpbmcsIGZvciBleGFtcGxlICIvZGV2L2xvZyIuIEluIHRoaXMgY2FzZSwgYSBVbml4IGRvbWFpbiBzb2NrZXQgaXMgdXNlZCB0bwogICAgc2VuZCB0aGUgbWVzc2FnZSB0byB0aGUgc3lzbG9nLiBJZiAqZmFjaWxpdHkqIGlzIG5vdCBzcGVjaWZpZWQsCi0gICA6Y29uc3Q6YExPR19VU0VSYCBpcyB1c2VkLgorICAgOmNvbnN0OmBMT0dfVVNFUmAgaXMgdXNlZC4gVGhlIHR5cGUgb2Ygc29ja2V0IG9wZW5lZCBkZXBlbmRzIG9uIHRoZQorICAgKnNvY2t0eXBlKiBhcmd1bWVudCwgd2hpY2ggZGVmYXVsdHMgdG8gOmNvbnN0OmBzb2NrZXQuU09DS19ER1JBTWAgYW5kIHRodXMKKyAgIG9wZW5zIGEgVURQIHNvY2tldC4gVG8gb3BlbiBhIFRDUCBzb2NrZXQgKGZvciB1c2Ugd2l0aCB0aGUgbmV3ZXIgc3lzbG9nCisgICBkYWVtb25zIHN1Y2ggYXMgcnN5c2xvZyksIHNwZWNpZnkgYSB2YWx1ZSBvZiA6Y29uc3Q6YHNvY2tldC5TT0NLX1NUUkVBTWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICAqc29ja3R5cGUqIHdhcyBhZGRlZC4KIAogCiAgICAuLiBtZXRob2Q6OiBjbG9zZSgpCkBAIC0yMjk2LDcgKzI1NDAsNyBAQAogCiAgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKIAotICAgICAgU2VuZHMgdGhlIHJlY29yZCB0byB0aGUgV2ViIHNlcnZlciBhcyBhbiBVUkwtZW5jb2RlZCBkaWN0aW9uYXJ5LgorICAgICAgU2VuZHMgdGhlIHJlY29yZCB0byB0aGUgV2ViIHNlcnZlciBhcyBhIHBlcmNlbnQtZW5jb2RlZCBkaWN0aW9uYXJ5LgogCiAKIC4uIF9mb3JtYXR0ZXI6CkBAIC0yMzY5LDYgKzI2MTMsOCBAQAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgJShwcm9jZXNzKWRgYCAgICAgICAgIHwgUHJvY2VzcyBJRCAoaWYgYXZhaWxhYmxlKS4gICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYCUocHJvY2Vzc05hbWUpc2BgICAgICB8IFByb2Nlc3MgbmFtZSAoaWYgYXZhaWxhYmxlKS4gICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgYGAlKG1lc3NhZ2Upc2BgICAgICAgICAgfCBUaGUgbG9nZ2VkIG1lc3NhZ2UsIGNvbXB1dGVkIGFzIGBgbXNnICUgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3NgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTIzNzYsMTUgKzI2MjIsMTcgQEAKIC4uIHZlcnNpb25jaGFuZ2VkOjogMi41CiAgICAqZnVuY05hbWUqIHdhcyBhZGRlZC4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKKyAgICpwcm9jZXNzTmFtZSogd2FzIGFkZGVkLgorCiAKIC4uIGNsYXNzOjogRm9ybWF0dGVyKFtmbXRbLCBkYXRlZm10XV0pCiAKICAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgRm9ybWF0dGVyYCBjbGFzcy4gVGhlIGluc3RhbmNlIGlzCi0gICBpbml0aWFsaXplZCB3aXRoIGEgZm9ybWF0IHN0cmluZyBmb3IgdGhlIG1lc3NhZ2UgYXMgYSB3aG9sZSwgYXMgd2VsbCBhcyBhIGZvcm1hdAotICAgc3RyaW5nIGZvciB0aGUgZGF0ZS90aW1lIHBvcnRpb24gb2YgYSBtZXNzYWdlLiBJZiBubyAqZm10KiBpcyBzcGVjaWZpZWQsCi0gICBgYCclKG1lc3NhZ2UpcydgYCBpcyB1c2VkLiBJZiBubyAqZGF0ZWZtdCogaXMgc3BlY2lmaWVkLCB0aGUgSVNPODYwMSBkYXRlIGZvcm1hdAotICAgaXMgdXNlZC4KLQorICAgaW5pdGlhbGl6ZWQgd2l0aCBhIGZvcm1hdCBzdHJpbmcgZm9yIHRoZSBtZXNzYWdlIGFzIGEgd2hvbGUsIGFzIHdlbGwgYXMgYQorICAgZm9ybWF0IHN0cmluZyBmb3IgdGhlIGRhdGUvdGltZSBwb3J0aW9uIG9mIGEgbWVzc2FnZS4gSWYgbm8gKmZtdCogaXMKKyAgIHNwZWNpZmllZCwgYGAnJShtZXNzYWdlKXMnYGAgaXMgdXNlZC4gSWYgbm8gKmRhdGVmbXQqIGlzIHNwZWNpZmllZCwgdGhlCisgICBJU084NjAxIGRhdGUgZm9ybWF0IGlzIHVzZWQuCiAKICAgIC4uIG1ldGhvZDo6IGZvcm1hdChyZWNvcmQpCiAKQEAgLTI0MjgsNyArMjY3Niw3IEBACiBGaWx0ZXIgT2JqZWN0cwogLS0tLS0tLS0tLS0tLS0KIAotRmlsdGVycyBjYW4gYmUgdXNlZCBieSA6Y2xhc3M6YEhhbmRsZXJgXCBzIGFuZCA6Y2xhc3M6YExvZ2dlcmBcIHMgZm9yCis6Y2xhc3M6YEZpbHRlcmBcIHMgY2FuIGJlIHVzZWQgYnkgOmNsYXNzOmBIYW5kbGVyYFwgcyBhbmQgOmNsYXNzOmBMb2dnZXJgXCBzIGZvcgogbW9yZSBzb3BoaXN0aWNhdGVkIGZpbHRlcmluZyB0aGFuIGlzIHByb3ZpZGVkIGJ5IGxldmVscy4gVGhlIGJhc2UgZmlsdGVyIGNsYXNzCiBvbmx5IGFsbG93cyBldmVudHMgd2hpY2ggYXJlIGJlbG93IGEgY2VydGFpbiBwb2ludCBpbiB0aGUgbG9nZ2VyIGhpZXJhcmNoeS4gRm9yCiBleGFtcGxlLCBhIGZpbHRlciBpbml0aWFsaXplZCB3aXRoICJBLkIiIHdpbGwgYWxsb3cgZXZlbnRzIGxvZ2dlZCBieSBsb2dnZXJzCkBAIC0yNDQwLDcgKzI2ODgsNyBAQAogCiAgICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YEZpbHRlcmAgY2xhc3MuIElmICpuYW1lKiBpcyBzcGVjaWZpZWQsIGl0CiAgICBuYW1lcyBhIGxvZ2dlciB3aGljaCwgdG9nZXRoZXIgd2l0aCBpdHMgY2hpbGRyZW4sIHdpbGwgaGF2ZSBpdHMgZXZlbnRzIGFsbG93ZWQKLSAgIHRocm91Z2ggdGhlIGZpbHRlci4gSWYgbm8gbmFtZSBpcyBzcGVjaWZpZWQsIGFsbG93cyBldmVyeSBldmVudC4KKyAgIHRocm91Z2ggdGhlIGZpbHRlci4gSWYgKm5hbWUqIGlzIHRoZSBlbXB0eSBzdHJpbmcsIGFsbG93cyBldmVyeSBldmVudC4KIAogCiAgICAuLiBtZXRob2Q6OiBmaWx0ZXIocmVjb3JkKQpAQCAtMjQ0OSw0MCArMjY5Nyw5OSBAQAogICAgICAgeWVzLiBJZiBkZWVtZWQgYXBwcm9wcmlhdGUsIHRoZSByZWNvcmQgbWF5IGJlIG1vZGlmaWVkIGluLXBsYWNlIGJ5IHRoaXMKICAgICAgIG1ldGhvZC4KIAorTm90ZSB0aGF0IGZpbHRlcnMgYXR0YWNoZWQgdG8gaGFuZGxlcnMgYXJlIGNvbnN1bHRlZCB3aGVuZXZlciBhbiBldmVudCBpcworZW1pdHRlZCBieSB0aGUgaGFuZGxlciwgd2hlcmVhcyBmaWx0ZXJzIGF0dGFjaGVkIHRvIGxvZ2dlcnMgYXJlIGNvbnN1bHRlZAord2hlbmV2ZXIgYW4gZXZlbnQgaXMgbG9nZ2VkIHRvIHRoZSBoYW5kbGVyICh1c2luZyA6bWV0aDpgZGVidWdgLCA6bWV0aDpgaW5mb2AsCitldGMuKSBUaGlzIG1lYW5zIHRoYXQgZXZlbnRzIHdoaWNoIGhhdmUgYmVlbiBnZW5lcmF0ZWQgYnkgZGVzY2VuZGFudCBsb2dnZXJzCit3aWxsIG5vdCBiZSBmaWx0ZXJlZCBieSBhIGxvZ2dlcidzIGZpbHRlciBzZXR0aW5nLCB1bmxlc3MgdGhlIGZpbHRlciBoYXMgYWxzbworYmVlbiBhcHBsaWVkIHRvIHRob3NlIGRlc2NlbmRhbnQgbG9nZ2Vycy4KKworWW91IGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gc3ViY2xhc3MgYGBGaWx0ZXJgYDogeW91IGNhbiBwYXNzIGFueSBpbnN0YW5jZQord2hpY2ggaGFzIGEgYGBmaWx0ZXJgYCBtZXRob2Qgd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MuCisKK090aGVyIHVzZXMgZm9yIGZpbHRlcnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworQWx0aG91Z2ggZmlsdGVycyBhcmUgdXNlZCBwcmltYXJpbHkgdG8gZmlsdGVyIHJlY29yZHMgYmFzZWQgb24gbW9yZQorc29waGlzdGljYXRlZCBjcml0ZXJpYSB0aGFuIGxldmVscywgdGhleSBnZXQgdG8gc2VlIGV2ZXJ5IHJlY29yZCB3aGljaCBpcworcHJvY2Vzc2VkIGJ5IHRoZSBoYW5kbGVyIG9yIGxvZ2dlciB0aGV5J3JlIGF0dGFjaGVkIHRvOiB0aGlzIGNhbiBiZSB1c2VmdWwgaWYKK3lvdSB3YW50IHRvIGRvIHRoaW5ncyBsaWtlIGNvdW50aW5nIGhvdyBtYW55IHJlY29yZHMgd2VyZSBwcm9jZXNzZWQgYnkgYQorcGFydGljdWxhciBsb2dnZXIgb3IgaGFuZGxlciwgb3IgYWRkaW5nLCBjaGFuZ2luZyBvciByZW1vdmluZyBhdHRyaWJ1dGVzIGluCit0aGUgTG9nUmVjb3JkIGJlaW5nIHByb2Nlc3NlZC4gT2J2aW91c2x5IGNoYW5naW5nIHRoZSBMb2dSZWNvcmQgbmVlZHMgdG8gYmUKK2RvbmUgd2l0aCBzb21lIGNhcmUsIGJ1dCBpdCBkb2VzIGFsbG93IHRoZSBpbmplY3Rpb24gb2YgY29udGV4dHVhbCBpbmZvcm1hdGlvbgoraW50byBsb2dzIChzZWUgOnJlZjpgZmlsdGVycy1jb250ZXh0dWFsYCkuCisKIC4uIF9sb2ctcmVjb3JkOgogCiBMb2dSZWNvcmQgT2JqZWN0cwogLS0tLS0tLS0tLS0tLS0tLS0KIAotOmNsYXNzOmBMb2dSZWNvcmRgIGluc3RhbmNlcyBhcmUgY3JlYXRlZCBldmVyeSB0aW1lIHNvbWV0aGluZyBpcyBsb2dnZWQuIFRoZXkKLWNvbnRhaW4gYWxsIHRoZSBpbmZvcm1hdGlvbiBwZXJ0aW5lbnQgdG8gdGhlIGV2ZW50IGJlaW5nIGxvZ2dlZC4gVGhlIG1haW4KLWluZm9ybWF0aW9uIHBhc3NlZCBpbiBpcyBpbiBtc2cgYW5kIGFyZ3MsIHdoaWNoIGFyZSBjb21iaW5lZCB1c2luZyBtc2cgJSBhcmdzIHRvCi1jcmVhdGUgdGhlIG1lc3NhZ2UgZmllbGQgb2YgdGhlIHJlY29yZC4gVGhlIHJlY29yZCBhbHNvIGluY2x1ZGVzIGluZm9ybWF0aW9uCi1zdWNoIGFzIHdoZW4gdGhlIHJlY29yZCB3YXMgY3JlYXRlZCwgdGhlIHNvdXJjZSBsaW5lIHdoZXJlIHRoZSBsb2dnaW5nIGNhbGwgd2FzCi1tYWRlLCBhbmQgYW55IGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiB0byBiZSBsb2dnZWQuCis6Y2xhc3M6YExvZ1JlY29yZGAgaW5zdGFuY2VzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIDpjbGFzczpgTG9nZ2VyYAorZXZlcnkgdGltZSBzb21ldGhpbmcgaXMgbG9nZ2VkLCBhbmQgY2FuIGJlIGNyZWF0ZWQgbWFudWFsbHkgdmlhCis6ZnVuYzpgbWFrZUxvZ1JlY29yZGAgKGZvciBleGFtcGxlLCBmcm9tIGEgcGlja2xlZCBldmVudCByZWNlaXZlZCBvdmVyIHRoZQord2lyZSkuCiAKIAotLi4gY2xhc3M6OiBMb2dSZWNvcmQobmFtZSwgbHZsLCBwYXRobmFtZSwgbGluZW5vLCBtc2csIGFyZ3MsIGV4Y19pbmZvIFssIGZ1bmNdKQorLi4gY2xhc3M6OgorICAgTG9nUmVjb3JkKG5hbWUsIGx2bCwgcGF0aG5hbWUsIGxpbmVubywgbXNnLCBhcmdzLCBleGNfaW5mbyBbLCBmdW5jPU5vbmVdKQogCi0gICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgTG9nUmVjb3JkYCBpbml0aWFsaXplZCB3aXRoIGludGVyZXN0aW5nCi0gICBpbmZvcm1hdGlvbi4gVGhlICpuYW1lKiBpcyB0aGUgbG9nZ2VyIG5hbWU7ICpsdmwqIGlzIHRoZSBudW1lcmljIGxldmVsOwotICAgKnBhdGhuYW1lKiBpcyB0aGUgYWJzb2x1dGUgcGF0aG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIGluIHdoaWNoIHRoZSBsb2dnaW5nCi0gICBjYWxsIHdhcyBtYWRlOyAqbGluZW5vKiBpcyB0aGUgbGluZSBudW1iZXIgaW4gdGhhdCBmaWxlIHdoZXJlIHRoZSBsb2dnaW5nCi0gICBjYWxsIGlzIGZvdW5kOyAqbXNnKiBpcyB0aGUgdXNlci1zdXBwbGllZCBtZXNzYWdlIChhIGZvcm1hdCBzdHJpbmcpOyAqYXJncyoKLSAgIGlzIHRoZSB0dXBsZSB3aGljaCwgdG9nZXRoZXIgd2l0aCAqbXNnKiwgbWFrZXMgdXAgdGhlIHVzZXIgbWVzc2FnZTsgYW5kCi0gICAqZXhjX2luZm8qIGlzIHRoZSBleGNlcHRpb24gdHVwbGUgb2J0YWluZWQgYnkgY2FsbGluZyA6ZnVuYzpgc3lzLmV4Y19pbmZvYAotICAgKG9yIDpjb25zdDpgTm9uZWAsIGlmIG5vIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUpLiBUaGUgKmZ1bmMqIGlzCi0gICB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gZnJvbSB3aGljaCB0aGUgbG9nZ2luZyBjYWxsIHdhcyBtYWRlLiBJZiBub3QKLSAgIHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYGBOb25lYGAuCisgICBDb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHBlcnRpbmVudCB0byB0aGUgZXZlbnQgYmVpbmcgbG9nZ2VkLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNQotICAgICAgKmZ1bmMqIHdhcyBhZGRlZC4KKyAgIFRoZSBwcmltYXJ5IGluZm9ybWF0aW9uIGlzIHBhc3NlZCBpbiA6YXR0cjpgbXNnYCBhbmQgOmF0dHI6YGFyZ3NgLCB3aGljaAorICAgYXJlIGNvbWJpbmVkIHVzaW5nIGBgbXNnICUgYXJnc2BgIHRvIGNyZWF0ZSB0aGUgOmF0dHI6YG1lc3NhZ2VgIGZpZWxkIG9mIHRoZQorICAgcmVjb3JkLgogCisgICAuLiBhdHRyaWJ1dGU6OiBhcmdzCisKKyAgICAgIFR1cGxlIG9mIGFyZ3VtZW50cyB0byBiZSB1c2VkIGluIGZvcm1hdHRpbmcgOmF0dHI6YG1zZ2AuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGV4Y19pbmZvCisKKyAgICAgIEV4Y2VwdGlvbiB0dXBsZSAow6AgbGEgYHN5cy5leGNfaW5mb2ApIG9yIGBOb25lYCBpZiBubyBleGNlcHRpb24KKyAgICAgIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KKworICAgLi4gYXR0cmlidXRlOjogZnVuYworCisgICAgICBOYW1lIG9mIHRoZSBmdW5jdGlvbiBvZiBvcmlnaW4gKGkuZS4gaW4gd2hpY2ggdGhlIGxvZ2dpbmcgY2FsbCB3YXMgbWFkZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxpbmVubworCisgICAgICBMaW5lIG51bWJlciBpbiB0aGUgc291cmNlIGZpbGUgb2Ygb3JpZ2luLgorCisgICAuLiBhdHRyaWJ1dGU6OiBsdmwKKworICAgICAgTnVtZXJpYyBsb2dnaW5nIGxldmVsLgorCisgICAuLiBhdHRyaWJ1dGU6OiBtZXNzYWdlCisKKyAgICAgIEJvdW5kIHRvIHRoZSByZXN1bHQgb2YgOm1ldGg6YGdldE1lc3NhZ2VgIHdoZW4KKyAgICAgIDptZXRoOmBGb3JtYXR0ZXIuZm9ybWF0KHJlY29yZCk8Rm9ybWF0dGVyLmZvcm1hdD5gIGlzIGludm9rZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IG1zZworCisgICAgICBVc2VyLXN1cHBsaWVkIDpyZWY6YGZvcm1hdCBzdHJpbmc8c3RyaW5nLWZvcm1hdHRpbmc+YCBvciBhcmJpdHJhcnkgb2JqZWN0CisgICAgICAoc2VlIDpyZWY6YGFyYml0cmFyeS1vYmplY3QtbWVzc2FnZXNgKSB1c2VkIGluIDptZXRoOmBnZXRNZXNzYWdlYC4KKworICAgLi4gYXR0cmlidXRlOjogbmFtZQorCisgICAgICBOYW1lIG9mIHRoZSBsb2dnZXIgdGhhdCBlbWl0dGVkIHRoZSByZWNvcmQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHBhdGhuYW1lCisKKyAgICAgIEFic29sdXRlIHBhdGhuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSBvZiBvcmlnaW4uCiAKICAgIC4uIG1ldGhvZDo6IGdldE1lc3NhZ2UoKQogCiAgICAgICBSZXR1cm5zIHRoZSBtZXNzYWdlIGZvciB0aGlzIDpjbGFzczpgTG9nUmVjb3JkYCBpbnN0YW5jZSBhZnRlciBtZXJnaW5nIGFueQotICAgICAgdXNlci1zdXBwbGllZCBhcmd1bWVudHMgd2l0aCB0aGUgbWVzc2FnZS4KKyAgICAgIHVzZXItc3VwcGxpZWQgYXJndW1lbnRzIHdpdGggdGhlIG1lc3NhZ2UuIElmIHRoZSB1c2VyLXN1cHBsaWVkIG1lc3NhZ2UKKyAgICAgIGFyZ3VtZW50IHRvIHRoZSBsb2dnaW5nIGNhbGwgaXMgbm90IGEgc3RyaW5nLCA6ZnVuYzpgc3RyYCBpcyBjYWxsZWQgb24gaXQgdG8KKyAgICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuIFRoaXMgYWxsb3dzIHVzZSBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcyBhcworICAgICAgbWVzc2FnZXMsIHdob3NlIGBgX19zdHJfX2BgIG1ldGhvZCBjYW4gcmV0dXJuIHRoZSBhY3R1YWwgZm9ybWF0IHN0cmluZyB0bworICAgICAgYmUgdXNlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjUKKyAgICAgICpmdW5jKiB3YXMgYWRkZWQuCisKIAogLi4gX2xvZ2dlci1hZGFwdGVyOgogCkBAIC0yNDkzLDIyICsyODAwLDIxIEBACiAKIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgaW5zdGFuY2VzIGFyZSB1c2VkIHRvIGNvbnZlbmllbnRseSBwYXNzIGNvbnRleHR1YWwKIGluZm9ybWF0aW9uIGludG8gbG9nZ2luZyBjYWxscy4gRm9yIGEgdXNhZ2UgZXhhbXBsZSAsIHNlZSB0aGUgc2VjdGlvbiBvbgotYGFkZGluZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRvIHlvdXIgbG9nZ2luZyBvdXRwdXRgX18uCis6cmVmOmBhZGRpbmcgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byB5b3VyIGxvZ2dpbmcgb3V0cHV0IDxjb250ZXh0LWluZm8+YC4KIAotX18gY29udGV4dC1pbmZvXwogCiAuLiBjbGFzczo6IExvZ2dlckFkYXB0ZXIobG9nZ2VyLCBleHRyYSkKIAotICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgaW5pdGlhbGl6ZWQgd2l0aCBhbgotICB1bmRlcmx5aW5nIDpjbGFzczpgTG9nZ2VyYCBpbnN0YW5jZSBhbmQgYSBkaWN0LWxpa2Ugb2JqZWN0LgorICAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgIGluaXRpYWxpemVkIHdpdGggYW4KKyAgIHVuZGVybHlpbmcgOmNsYXNzOmBMb2dnZXJgIGluc3RhbmNlIGFuZCBhIGRpY3QtbGlrZSBvYmplY3QuCiAKLSAgLi4gbWV0aG9kOjogcHJvY2Vzcyhtc2csIGt3YXJncykKKyAgIC4uIG1ldGhvZDo6IHByb2Nlc3MobXNnLCBrd2FyZ3MpCiAKLSAgICBNb2RpZmllcyB0aGUgbWVzc2FnZSBhbmQvb3Iga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIGEgbG9nZ2luZyBjYWxsIGluCi0gICAgb3JkZXIgdG8gaW5zZXJ0IGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIFRoaXMgaW1wbGVtZW50YXRpb24gdGFrZXMgdGhlIG9iamVjdAotICAgIHBhc3NlZCBhcyAqZXh0cmEqIHRvIHRoZSBjb25zdHJ1Y3RvciBhbmQgYWRkcyBpdCB0byAqa3dhcmdzKiB1c2luZyBrZXkKLSAgICAnZXh0cmEnLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgKCptc2cqLCAqa3dhcmdzKikgdHVwbGUgd2hpY2ggaGFzIHRoZQotICAgIChwb3NzaWJseSBtb2RpZmllZCkgdmVyc2lvbnMgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW4uCisgICAgICBNb2RpZmllcyB0aGUgbWVzc2FnZSBhbmQvb3Iga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIGEgbG9nZ2luZyBjYWxsIGluCisgICAgICBvcmRlciB0byBpbnNlcnQgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4gVGhpcyBpbXBsZW1lbnRhdGlvbiB0YWtlcyB0aGUgb2JqZWN0CisgICAgICBwYXNzZWQgYXMgKmV4dHJhKiB0byB0aGUgY29uc3RydWN0b3IgYW5kIGFkZHMgaXQgdG8gKmt3YXJncyogdXNpbmcga2V5CisgICAgICAnZXh0cmEnLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgKCptc2cqLCAqa3dhcmdzKikgdHVwbGUgd2hpY2ggaGFzIHRoZQorICAgICAgKHBvc3NpYmx5IG1vZGlmaWVkKSB2ZXJzaW9ucyBvZiB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbi4KIAogSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLCA6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgIHN1cHBvcnRzIGFsbCB0aGUgbG9nZ2luZwogbWV0aG9kcyBvZiA6Y2xhc3M6YExvZ2dlcmAsIGkuZS4gOm1ldGg6YGRlYnVnYCwgOm1ldGg6YGluZm9gLCA6bWV0aDpgd2FybmluZ2AsCkBAIC0yNTE2LDYgKzI4MjIsMTEgQEAKIG1ldGhvZHMgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmVzIGFzIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiA6Y2xhc3M6YExvZ2dlcmAsIHNvCiB5b3UgY2FuIHVzZSB0aGUgdHdvIHR5cGVzIG9mIGluc3RhbmNlcyBpbnRlcmNoYW5nZWFibHkuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisKK1RoZSA6bWV0aDpgaXNFbmFibGVkRm9yYCBtZXRob2Qgd2FzIGFkZGVkIHRvIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAuIFRoaXMgbWV0aG9kCitkZWxlZ2F0ZXMgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLgorCiAKIFRocmVhZCBTYWZldHkKIC0tLS0tLS0tLS0tLS0KQEAgLTI1MzAsNiArMjg0MSwyOCBAQAogYmVjYXVzZSBsb2NrIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgOm1vZDpgdGhyZWFkaW5nYCBtb2R1bGUgYXJlIG5vdCBhbHdheXMKIHJlLWVudHJhbnQsIGFuZCBzbyBjYW5ub3QgYmUgaW52b2tlZCBmcm9tIHN1Y2ggc2lnbmFsIGhhbmRsZXJzLgogCisKK0ludGVncmF0aW9uIHdpdGggdGhlIHdhcm5pbmdzIG1vZHVsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6ZnVuYzpgY2FwdHVyZVdhcm5pbmdzYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBpbnRlZ3JhdGUgOm1vZDpgbG9nZ2luZ2AKK3dpdGggdGhlIDptb2Q6YHdhcm5pbmdzYCBtb2R1bGUuCisKKy4uIGZ1bmN0aW9uOjogY2FwdHVyZVdhcm5pbmdzKGNhcHR1cmUpCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0dXJuIHRoZSBjYXB0dXJlIG9mIHdhcm5pbmdzIGJ5IGxvZ2dpbmcgb24gYW5kCisgICBvZmYuCisKKyAgIElmICpjYXB0dXJlKiBpcyBgYFRydWVgYCwgd2FybmluZ3MgaXNzdWVkIGJ5IHRoZSA6bW9kOmB3YXJuaW5nc2AgbW9kdWxlCisgICB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gdGhlIGxvZ2dpbmcgc3lzdGVtLiBTcGVjaWZpY2FsbHksIGEgd2FybmluZyB3aWxsIGJlCisgICBmb3JtYXR0ZWQgdXNpbmcgOmZ1bmM6YHdhcm5pbmdzLmZvcm1hdHdhcm5pbmdgIGFuZCB0aGUgcmVzdWx0aW5nIHN0cmluZworICAgbG9nZ2VkIHRvIGEgbG9nZ2VyIG5hbWVkICJweS53YXJuaW5ncyIgd2l0aCBhIHNldmVyaXR5IG9mIGBgV0FSTklOR2BgLgorCisgICBJZiAqY2FwdHVyZSogaXMgYGBGYWxzZWBgLCB0aGUgcmVkaXJlY3Rpb24gb2Ygd2FybmluZ3MgdG8gdGhlIGxvZ2dpbmcgc3lzdGVtCisgICB3aWxsIHN0b3AsIGFuZCB3YXJuaW5ncyB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gdGhlaXIgb3JpZ2luYWwgZGVzdGluYXRpb25zCisgICAoaS5lLiB0aG9zZSBpbiBlZmZlY3QgYmVmb3JlIGBgY2FwdHVyZVdhcm5pbmdzKFRydWUpYGAgd2FzIGNhbGxlZCkuCisKKwogQ29uZmlndXJhdGlvbgogLS0tLS0tLS0tLS0tLQogCkBAIC0yNTQ1LDE2ICsyODc4LDU4IEBACiBpbiA6bW9kOmBsb2dnaW5nYCBpdHNlbGYpIGFuZCBkZWZpbmluZyBoYW5kbGVycyB3aGljaCBhcmUgZGVjbGFyZWQgZWl0aGVyIGluCiA6bW9kOmBsb2dnaW5nYCBvciA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYC4KIAorLi4gZnVuY3Rpb246OiBkaWN0Q29uZmlnKGNvbmZpZykKKworICAgIFRha2VzIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIGRpY3Rpb25hcnkuICBUaGUgY29udGVudHMgb2YKKyAgICB0aGlzIGRpY3Rpb25hcnkgYXJlIGRlc2NyaWJlZCBpbiA6cmVmOmBsb2dnaW5nLWNvbmZpZy1kaWN0c2NoZW1hYAorICAgIGJlbG93LgorCisgICAgSWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24sIHRoaXMgZnVuY3Rpb24gd2lsbAorICAgIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAsIDpleGM6YFR5cGVFcnJvcmAsIDpleGM6YEF0dHJpYnV0ZUVycm9yYAorICAgIG9yIDpleGM6YEltcG9ydEVycm9yYCB3aXRoIGEgc3VpdGFibHkgZGVzY3JpcHRpdmUgbWVzc2FnZS4gIFRoZQorICAgIGZvbGxvd2luZyBpcyBhIChwb3NzaWJseSBpbmNvbXBsZXRlKSBsaXN0IG9mIGNvbmRpdGlvbnMgd2hpY2ggd2lsbAorICAgIHJhaXNlIGFuIGVycm9yOgorCisgICAgKiBBIGBgbGV2ZWxgYCB3aGljaCBpcyBub3QgYSBzdHJpbmcgb3Igd2hpY2ggaXMgYSBzdHJpbmcgbm90CisgICAgICBjb3JyZXNwb25kaW5nIHRvIGFuIGFjdHVhbCBsb2dnaW5nIGxldmVsLgorICAgICogQSBgYHByb3BhZ2F0ZWBgIHZhbHVlIHdoaWNoIGlzIG5vdCBhIGJvb2xlYW4uCisgICAgKiBBbiBpZCB3aGljaCBkb2VzIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBkZXN0aW5hdGlvbi4KKyAgICAqIEEgbm9uLWV4aXN0ZW50IGhhbmRsZXIgaWQgZm91bmQgZHVyaW5nIGFuIGluY3JlbWVudGFsIGNhbGwuCisgICAgKiBBbiBpbnZhbGlkIGxvZ2dlciBuYW1lLgorICAgICogSW5hYmlsaXR5IHRvIHJlc29sdmUgdG8gYW4gaW50ZXJuYWwgb3IgZXh0ZXJuYWwgb2JqZWN0LgorCisgICAgUGFyc2luZyBpcyBwZXJmb3JtZWQgYnkgdGhlIDpjbGFzczpgRGljdENvbmZpZ3VyYXRvcmAgY2xhc3MsIHdob3NlCisgICAgY29uc3RydWN0b3IgaXMgcGFzc2VkIHRoZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIGNvbmZpZ3VyYXRpb24sIGFuZAorICAgIGhhcyBhIDptZXRoOmBjb25maWd1cmVgIG1ldGhvZC4gIFRoZSA6bW9kOmBsb2dnaW5nLmNvbmZpZ2AgbW9kdWxlCisgICAgaGFzIGEgY2FsbGFibGUgYXR0cmlidXRlIDphdHRyOmBkaWN0Q29uZmlnQ2xhc3NgCisgICAgd2hpY2ggaXMgaW5pdGlhbGx5IHNldCB0byA6Y2xhc3M6YERpY3RDb25maWd1cmF0b3JgLgorICAgIFlvdSBjYW4gcmVwbGFjZSB0aGUgdmFsdWUgb2YgOmF0dHI6YGRpY3RDb25maWdDbGFzc2Agd2l0aCBhCisgICAgc3VpdGFibGUgaW1wbGVtZW50YXRpb24gb2YgeW91ciBvd24uCisKKyAgICA6ZnVuYzpgZGljdENvbmZpZ2AgY2FsbHMgOmF0dHI6YGRpY3RDb25maWdDbGFzc2AgcGFzc2luZworICAgIHRoZSBzcGVjaWZpZWQgZGljdGlvbmFyeSwgYW5kIHRoZW4gY2FsbHMgdGhlIDptZXRoOmBjb25maWd1cmVgIG1ldGhvZCBvbgorICAgIHRoZSByZXR1cm5lZCBvYmplY3QgdG8gcHV0IHRoZSBjb25maWd1cmF0aW9uIGludG8gZWZmZWN0OjoKKworICAgICAgICAgIGRlZiBkaWN0Q29uZmlnKGNvbmZpZyk6CisgICAgICAgICAgICAgIGRpY3RDb25maWdDbGFzcyhjb25maWcpLmNvbmZpZ3VyZSgpCisKKyAgICBGb3IgZXhhbXBsZSwgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YERpY3RDb25maWd1cmF0b3JgIGNvdWxkIGNhbGwKKyAgICBgYERpY3RDb25maWd1cmF0b3IuX19pbml0X18oKWBgIGluIGl0cyBvd24gOm1ldGg6YF9faW5pdF9fKClgLCB0aGVuCisgICAgc2V0IHVwIGN1c3RvbSBwcmVmaXhlcyB3aGljaCB3b3VsZCBiZSB1c2FibGUgaW4gdGhlIHN1YnNlcXVlbnQKKyAgICA6bWV0aDpgY29uZmlndXJlYCBjYWxsLiA6YXR0cjpgZGljdENvbmZpZ0NsYXNzYCB3b3VsZCBiZSBib3VuZCB0bworICAgIHRoaXMgbmV3IHN1YmNsYXNzLCBhbmQgdGhlbiA6ZnVuYzpgZGljdENvbmZpZ2AgY291bGQgYmUgY2FsbGVkIGV4YWN0bHkgYXMKKyAgICBpbiB0aGUgZGVmYXVsdCwgdW5jdXN0b21pemVkIHN0YXRlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogLi4gZnVuY3Rpb246OiBmaWxlQ29uZmlnKGZuYW1lWywgZGVmYXVsdHNdKQogCi0gICBSZWFkcyB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGZyb20gYSBDb25maWdQYXJzZXItZm9ybWF0IGZpbGUgbmFtZWQgKmZuYW1lKi4KLSAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIGZyb20gYW4gYXBwbGljYXRpb24sIGFsbG93aW5nIGFuIGVuZAotICAgdXNlciB0aGUgYWJpbGl0eSB0byBzZWxlY3QgZnJvbSB2YXJpb3VzIHByZS1jYW5uZWQgY29uZmlndXJhdGlvbnMgKGlmIHRoZQotICAgZGV2ZWxvcGVyIHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIHByZXNlbnQgdGhlIGNob2ljZXMgYW5kIGxvYWQgdGhlIGNob3NlbgotICAgY29uZmlndXJhdGlvbikuIERlZmF1bHRzIHRvIGJlIHBhc3NlZCB0byBDb25maWdQYXJzZXIgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUKLSAgICpkZWZhdWx0cyogYXJndW1lbnQuCi0KKyAgIFJlYWRzIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIDptb2Q6YENvbmZpZ1BhcnNlcmBcLWZvcm1hdCBmaWxlIG5hbWVkCisgICAqZm5hbWUqLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGFuIGFwcGxpY2F0aW9uLAorICAgYWxsb3dpbmcgYW4gZW5kIHVzZXIgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkCisgICBjb25maWd1cmF0aW9ucyAoaWYgdGhlIGRldmVsb3BlciBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzCisgICBhbmQgbG9hZCB0aGUgY2hvc2VuIGNvbmZpZ3VyYXRpb24pLiBEZWZhdWx0cyB0byBiZSBwYXNzZWQgdG8gdGhlIENvbmZpZ1BhcnNlcgorICAgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgKmRlZmF1bHRzKiBhcmd1bWVudC4KIAogLi4gZnVuY3Rpb246OiBsaXN0ZW4oW3BvcnRdKQogCkBAIC0yNTc4LDYgKzI5NTMsNDAyIEBACiAgICA6ZnVuYzpgbGlzdGVuYC4KIAogCisuLiBfbG9nZ2luZy1jb25maWctZGljdHNjaGVtYToKKworQ29uZmlndXJhdGlvbiBkaWN0aW9uYXJ5IHNjaGVtYQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitEZXNjcmliaW5nIGEgbG9nZ2luZyBjb25maWd1cmF0aW9uIHJlcXVpcmVzIGxpc3RpbmcgdGhlIHZhcmlvdXMKK29iamVjdHMgdG8gY3JlYXRlIGFuZCB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiB0aGVtOyBmb3IgZXhhbXBsZSwgeW91CittYXkgY3JlYXRlIGEgaGFuZGxlciBuYW1lZCAiY29uc29sZSIgYW5kIHRoZW4gc2F5IHRoYXQgdGhlIGxvZ2dlcgorbmFtZWQgInN0YXJ0dXAiIHdpbGwgc2VuZCBpdHMgbWVzc2FnZXMgdG8gdGhlICJjb25zb2xlIiBoYW5kbGVyLgorVGhlc2Ugb2JqZWN0cyBhcmVuJ3QgbGltaXRlZCB0byB0aG9zZSBwcm92aWRlZCBieSB0aGUgOm1vZDpgbG9nZ2luZ2AKK21vZHVsZSBiZWNhdXNlIHlvdSBtaWdodCB3cml0ZSB5b3VyIG93biBmb3JtYXR0ZXIgb3IgaGFuZGxlciBjbGFzcy4KK1RoZSBwYXJhbWV0ZXJzIHRvIHRoZXNlIGNsYXNzZXMgbWF5IGFsc28gbmVlZCB0byBpbmNsdWRlIGV4dGVybmFsCitvYmplY3RzIHN1Y2ggYXMgYGBzeXMuc3RkZXJyYGAuICBUaGUgc3ludGF4IGZvciBkZXNjcmliaW5nIHRoZXNlCitvYmplY3RzIGFuZCBjb25uZWN0aW9ucyBpcyBkZWZpbmVkIGluIDpyZWY6YGxvZ2dpbmctY29uZmlnLWRpY3QtY29ubmVjdGlvbnNgCitiZWxvdy4KKworRGljdGlvbmFyeSBTY2hlbWEgRGV0YWlscworIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgorCitUaGUgZGljdGlvbmFyeSBwYXNzZWQgdG8gOmZ1bmM6YGRpY3RDb25maWdgIG11c3QgY29udGFpbiB0aGUgZm9sbG93aW5nCitrZXlzOgorCisqIGB2ZXJzaW9uYCAtIHRvIGJlIHNldCB0byBhbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgc2NoZW1hCisgIHZlcnNpb24uICBUaGUgb25seSB2YWxpZCB2YWx1ZSBhdCBwcmVzZW50IGlzIDEsIGJ1dCBoYXZpbmcgdGhpcyBrZXkKKyAgYWxsb3dzIHRoZSBzY2hlbWEgdG8gZXZvbHZlIHdoaWxlIHN0aWxsIHByZXNlcnZpbmcgYmFja3dhcmRzCisgIGNvbXBhdGliaWxpdHkuCisKK0FsbCBvdGhlciBrZXlzIGFyZSBvcHRpb25hbCwgYnV0IGlmIHByZXNlbnQgdGhleSB3aWxsIGJlIGludGVycHJldGVkCithcyBkZXNjcmliZWQgYmVsb3cuICBJbiBhbGwgY2FzZXMgYmVsb3cgd2hlcmUgYSAnY29uZmlndXJpbmcgZGljdCcgaXMKK21lbnRpb25lZCwgaXQgd2lsbCBiZSBjaGVja2VkIGZvciB0aGUgc3BlY2lhbCBgYCcoKSdgYCBrZXkgdG8gc2VlIGlmIGEKK2N1c3RvbSBpbnN0YW50aWF0aW9uIGlzIHJlcXVpcmVkLiAgSWYgc28sIHRoZSBtZWNoYW5pc20gZGVzY3JpYmVkIGluCis6cmVmOmBsb2dnaW5nLWNvbmZpZy1kaWN0LXVzZXJkZWZgIGJlbG93IGlzIHVzZWQgdG8gY3JlYXRlIGFuIGluc3RhbmNlOworb3RoZXJ3aXNlLCB0aGUgY29udGV4dCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IHRvIGluc3RhbnRpYXRlLgorCisqIGBmb3JtYXR0ZXJzYCAtIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIHdpbGwgYmUgYSBkaWN0IGluIHdoaWNoIGVhY2gKKyAga2V5IGlzIGEgZm9ybWF0dGVyIGlkIGFuZCBlYWNoIHZhbHVlIGlzIGEgZGljdCBkZXNjcmliaW5nIGhvdyB0bworICBjb25maWd1cmUgdGhlIGNvcnJlc3BvbmRpbmcgRm9ybWF0dGVyIGluc3RhbmNlLgorCisgIFRoZSBjb25maWd1cmluZyBkaWN0IGlzIHNlYXJjaGVkIGZvciBrZXlzIGBgZm9ybWF0YGAgYW5kIGBgZGF0ZWZtdGBgCisgICh3aXRoIGRlZmF1bHRzIG9mIGBgTm9uZWBgKSBhbmQgdGhlc2UgYXJlIHVzZWQgdG8gY29uc3RydWN0IGEKKyAgOmNsYXNzOmBsb2dnaW5nLkZvcm1hdHRlcmAgaW5zdGFuY2UuCisKKyogYGZpbHRlcnNgIC0gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgd2lsbCBiZSBhIGRpY3QgaW4gd2hpY2ggZWFjaCBrZXkKKyAgaXMgYSBmaWx0ZXIgaWQgYW5kIGVhY2ggdmFsdWUgaXMgYSBkaWN0IGRlc2NyaWJpbmcgaG93IHRvIGNvbmZpZ3VyZQorICB0aGUgY29ycmVzcG9uZGluZyBGaWx0ZXIgaW5zdGFuY2UuCisKKyAgVGhlIGNvbmZpZ3VyaW5nIGRpY3QgaXMgc2VhcmNoZWQgZm9yIHRoZSBrZXkgYGBuYW1lYGAgKGRlZmF1bHRpbmcgdG8gdGhlCisgIGVtcHR5IHN0cmluZykgYW5kIHRoaXMgaXMgdXNlZCB0byBjb25zdHJ1Y3QgYSA6Y2xhc3M6YGxvZ2dpbmcuRmlsdGVyYAorICBpbnN0YW5jZS4KKworKiBgaGFuZGxlcnNgIC0gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgd2lsbCBiZSBhIGRpY3QgaW4gd2hpY2ggZWFjaAorICBrZXkgaXMgYSBoYW5kbGVyIGlkIGFuZCBlYWNoIHZhbHVlIGlzIGEgZGljdCBkZXNjcmliaW5nIGhvdyB0bworICBjb25maWd1cmUgdGhlIGNvcnJlc3BvbmRpbmcgSGFuZGxlciBpbnN0YW5jZS4KKworICBUaGUgY29uZmlndXJpbmcgZGljdCBpcyBzZWFyY2hlZCBmb3IgdGhlIGZvbGxvd2luZyBrZXlzOgorCisgICogYGBjbGFzc2BgIChtYW5kYXRvcnkpLiAgVGhpcyBpcyB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlCisgICAgaGFuZGxlciBjbGFzcy4KKworICAqIGBgbGV2ZWxgYCAob3B0aW9uYWwpLiAgVGhlIGxldmVsIG9mIHRoZSBoYW5kbGVyLgorCisgICogYGBmb3JtYXR0ZXJgYCAob3B0aW9uYWwpLiAgVGhlIGlkIG9mIHRoZSBmb3JtYXR0ZXIgZm9yIHRoaXMKKyAgICBoYW5kbGVyLgorCisgICogYGBmaWx0ZXJzYGAgKG9wdGlvbmFsKS4gIEEgbGlzdCBvZiBpZHMgb2YgdGhlIGZpbHRlcnMgZm9yIHRoaXMKKyAgICBoYW5kbGVyLgorCisgIEFsbCAqb3RoZXIqIGtleXMgYXJlIHBhc3NlZCB0aHJvdWdoIGFzIGtleXdvcmQgYXJndW1lbnRzIHRvIHRoZQorICBoYW5kbGVyJ3MgY29uc3RydWN0b3IuICBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIHNuaXBwZXQ6OgorCisgICAgICBoYW5kbGVyczoKKyAgICAgICAgY29uc29sZToKKyAgICAgICAgICBjbGFzcyA6IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcgorICAgICAgICAgIGZvcm1hdHRlcjogYnJpZWYKKyAgICAgICAgICBsZXZlbCAgIDogSU5GTworICAgICAgICAgIGZpbHRlcnM6IFthbGxvd19mb29dCisgICAgICAgICAgc3RyZWFtICA6IGV4dDovL3N5cy5zdGRvdXQKKyAgICAgICAgZmlsZToKKyAgICAgICAgICBjbGFzcyA6IGxvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlcgorICAgICAgICAgIGZvcm1hdHRlcjogcHJlY2lzZQorICAgICAgICAgIGZpbGVuYW1lOiBsb2djb25maWcubG9nCisgICAgICAgICAgbWF4Qnl0ZXM6IDEwMjQKKyAgICAgICAgICBiYWNrdXBDb3VudDogMworCisgIHRoZSBoYW5kbGVyIHdpdGggaWQgYGBjb25zb2xlYGAgaXMgaW5zdGFudGlhdGVkIGFzIGEKKyAgOmNsYXNzOmBsb2dnaW5nLlN0cmVhbUhhbmRsZXJgLCB1c2luZyBgYHN5cy5zdGRvdXRgYCBhcyB0aGUgdW5kZXJseWluZworICBzdHJlYW0uICBUaGUgaGFuZGxlciB3aXRoIGlkIGBgZmlsZWBgIGlzIGluc3RhbnRpYXRlZCBhcyBhCisgIDpjbGFzczpgbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyYCB3aXRoIHRoZSBrZXl3b3JkIGFyZ3VtZW50cworICBgYGZpbGVuYW1lPSdsb2djb25maWcubG9nJywgbWF4Qnl0ZXM9MTAyNCwgYmFja3VwQ291bnQ9M2BgLgorCisqIGBsb2dnZXJzYCAtIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIHdpbGwgYmUgYSBkaWN0IGluIHdoaWNoIGVhY2gga2V5CisgIGlzIGEgbG9nZ2VyIG5hbWUgYW5kIGVhY2ggdmFsdWUgaXMgYSBkaWN0IGRlc2NyaWJpbmcgaG93IHRvCisgIGNvbmZpZ3VyZSB0aGUgY29ycmVzcG9uZGluZyBMb2dnZXIgaW5zdGFuY2UuCisKKyAgVGhlIGNvbmZpZ3VyaW5nIGRpY3QgaXMgc2VhcmNoZWQgZm9yIHRoZSBmb2xsb3dpbmcga2V5czoKKworICAqIGBgbGV2ZWxgYCAob3B0aW9uYWwpLiAgVGhlIGxldmVsIG9mIHRoZSBsb2dnZXIuCisKKyAgKiBgYHByb3BhZ2F0ZWBgIChvcHRpb25hbCkuICBUaGUgcHJvcGFnYXRpb24gc2V0dGluZyBvZiB0aGUgbG9nZ2VyLgorCisgICogYGBmaWx0ZXJzYGAgKG9wdGlvbmFsKS4gIEEgbGlzdCBvZiBpZHMgb2YgdGhlIGZpbHRlcnMgZm9yIHRoaXMKKyAgICBsb2dnZXIuCisKKyAgKiBgYGhhbmRsZXJzYGAgKG9wdGlvbmFsKS4gIEEgbGlzdCBvZiBpZHMgb2YgdGhlIGhhbmRsZXJzIGZvciB0aGlzCisgICAgbG9nZ2VyLgorCisgIFRoZSBzcGVjaWZpZWQgbG9nZ2VycyB3aWxsIGJlIGNvbmZpZ3VyZWQgYWNjb3JkaW5nIHRvIHRoZSBsZXZlbCwKKyAgcHJvcGFnYXRpb24sIGZpbHRlcnMgYW5kIGhhbmRsZXJzIHNwZWNpZmllZC4KKworKiBgcm9vdGAgLSB0aGlzIHdpbGwgYmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSByb290IGxvZ2dlci4KKyAgUHJvY2Vzc2luZyBvZiB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGJlIGFzIGZvciBhbnkgbG9nZ2VyLCBleGNlcHQKKyAgdGhhdCB0aGUgYGBwcm9wYWdhdGVgYCBzZXR0aW5nIHdpbGwgbm90IGJlIGFwcGxpY2FibGUuCisKKyogYGluY3JlbWVudGFsYCAtIHdoZXRoZXIgdGhlIGNvbmZpZ3VyYXRpb24gaXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMKKyAgaW5jcmVtZW50YWwgdG8gdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uICBUaGlzIHZhbHVlIGRlZmF1bHRzIHRvCisgIGBgRmFsc2VgYCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gcmVwbGFjZXMgdGhlCisgIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdXNlZCBieSB0aGUKKyAgZXhpc3RpbmcgOmZ1bmM6YGZpbGVDb25maWdgIEFQSS4KKworICBJZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGBgVHJ1ZWBgLCB0aGUgY29uZmlndXJhdGlvbiBpcyBwcm9jZXNzZWQKKyAgYXMgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIG9uIDpyZWY6YGxvZ2dpbmctY29uZmlnLWRpY3QtaW5jcmVtZW50YWxgLgorCisqIGBkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnNgIC0gd2hldGhlciBhbnkgZXhpc3RpbmcgbG9nZ2VycyBhcmUgdG8gYmUKKyAgZGlzYWJsZWQuIFRoaXMgc2V0dGluZyBtaXJyb3JzIHRoZSBwYXJhbWV0ZXIgb2YgdGhlIHNhbWUgbmFtZSBpbgorICA6ZnVuYzpgZmlsZUNvbmZpZ2AuIElmIGFic2VudCwgdGhpcyBwYXJhbWV0ZXIgZGVmYXVsdHMgdG8gYGBUcnVlYGAuCisgIFRoaXMgdmFsdWUgaXMgaWdub3JlZCBpZiBgaW5jcmVtZW50YWxgIGlzIGBgVHJ1ZWBgLgorCisuLiBfbG9nZ2luZy1jb25maWctZGljdC1pbmNyZW1lbnRhbDoKKworSW5jcmVtZW50YWwgQ29uZmlndXJhdGlvbgorIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgorCitJdCBpcyBkaWZmaWN1bHQgdG8gcHJvdmlkZSBjb21wbGV0ZSBmbGV4aWJpbGl0eSBmb3IgaW5jcmVtZW50YWwKK2NvbmZpZ3VyYXRpb24uICBGb3IgZXhhbXBsZSwgYmVjYXVzZSBvYmplY3RzIHN1Y2ggYXMgZmlsdGVycworYW5kIGZvcm1hdHRlcnMgYXJlIGFub255bW91cywgb25jZSBhIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwLCBpdCBpcworbm90IHBvc3NpYmxlIHRvIHJlZmVyIHRvIHN1Y2ggYW5vbnltb3VzIG9iamVjdHMgd2hlbiBhdWdtZW50aW5nIGEKK2NvbmZpZ3VyYXRpb24uCisKK0Z1cnRoZXJtb3JlLCB0aGVyZSBpcyBub3QgYSBjb21wZWxsaW5nIGNhc2UgZm9yIGFyYml0cmFyaWx5IGFsdGVyaW5nCit0aGUgb2JqZWN0IGdyYXBoIG9mIGxvZ2dlcnMsIGhhbmRsZXJzLCBmaWx0ZXJzLCBmb3JtYXR0ZXJzIGF0CitydW4tdGltZSwgb25jZSBhIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwOyB0aGUgdmVyYm9zaXR5IG9mIGxvZ2dlcnMgYW5kCitoYW5kbGVycyBjYW4gYmUgY29udHJvbGxlZCBqdXN0IGJ5IHNldHRpbmcgbGV2ZWxzIChhbmQsIGluIHRoZSBjYXNlIG9mCitsb2dnZXJzLCBwcm9wYWdhdGlvbiBmbGFncykuICBDaGFuZ2luZyB0aGUgb2JqZWN0IGdyYXBoIGFyYml0cmFyaWx5IGluCithIHNhZmUgd2F5IGlzIHByb2JsZW1hdGljIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ7IHdoaWxlIG5vdAoraW1wb3NzaWJsZSwgdGhlIGJlbmVmaXRzIGFyZSBub3Qgd29ydGggdGhlIGNvbXBsZXhpdHkgaXQgYWRkcyB0byB0aGUKK2ltcGxlbWVudGF0aW9uLgorCitUaHVzLCB3aGVuIHRoZSBgYGluY3JlbWVudGFsYGAga2V5IG9mIGEgY29uZmlndXJhdGlvbiBkaWN0IGlzIHByZXNlbnQKK2FuZCBpcyBgYFRydWVgYCwgdGhlIHN5c3RlbSB3aWxsIGNvbXBsZXRlbHkgaWdub3JlIGFueSBgYGZvcm1hdHRlcnNgYCBhbmQKK2BgZmlsdGVyc2BgIGVudHJpZXMsIGFuZCBwcm9jZXNzIG9ubHkgdGhlIGBgbGV2ZWxgYAorc2V0dGluZ3MgaW4gdGhlIGBgaGFuZGxlcnNgYCBlbnRyaWVzLCBhbmQgdGhlIGBgbGV2ZWxgYCBhbmQKK2BgcHJvcGFnYXRlYGAgc2V0dGluZ3MgaW4gdGhlIGBgbG9nZ2Vyc2BgIGFuZCBgYHJvb3RgYCBlbnRyaWVzLgorCitVc2luZyBhIHZhbHVlIGluIHRoZSBjb25maWd1cmF0aW9uIGRpY3QgbGV0cyBjb25maWd1cmF0aW9ucyB0byBiZSBzZW50CitvdmVyIHRoZSB3aXJlIGFzIHBpY2tsZWQgZGljdHMgdG8gYSBzb2NrZXQgbGlzdGVuZXIuIFRodXMsIHRoZSBsb2dnaW5nCit2ZXJib3NpdHkgb2YgYSBsb25nLXJ1bm5pbmcgYXBwbGljYXRpb24gY2FuIGJlIGFsdGVyZWQgb3ZlciB0aW1lIHdpdGgKK25vIG5lZWQgdG8gc3RvcCBhbmQgcmVzdGFydCB0aGUgYXBwbGljYXRpb24uCisKKy4uIF9sb2dnaW5nLWNvbmZpZy1kaWN0LWNvbm5lY3Rpb25zOgorCitPYmplY3QgY29ubmVjdGlvbnMKKyIiIiIiIiIiIiIiIiIiIiIiIgorCitUaGUgc2NoZW1hIGRlc2NyaWJlcyBhIHNldCBvZiBsb2dnaW5nIG9iamVjdHMgLSBsb2dnZXJzLAoraGFuZGxlcnMsIGZvcm1hdHRlcnMsIGZpbHRlcnMgLSB3aGljaCBhcmUgY29ubmVjdGVkIHRvIGVhY2ggb3RoZXIgaW4KK2FuIG9iamVjdCBncmFwaC4gIFRodXMsIHRoZSBzY2hlbWEgbmVlZHMgdG8gcmVwcmVzZW50IGNvbm5lY3Rpb25zCitiZXR3ZWVuIHRoZSBvYmplY3RzLiAgRm9yIGV4YW1wbGUsIHNheSB0aGF0LCBvbmNlIGNvbmZpZ3VyZWQsIGEKK3BhcnRpY3VsYXIgbG9nZ2VyIGhhcyBhdHRhY2hlZCB0byBpdCBhIHBhcnRpY3VsYXIgaGFuZGxlci4gIEZvciB0aGUKK3B1cnBvc2VzIG9mIHRoaXMgZGlzY3Vzc2lvbiwgd2UgY2FuIHNheSB0aGF0IHRoZSBsb2dnZXIgcmVwcmVzZW50cyB0aGUKK3NvdXJjZSwgYW5kIHRoZSBoYW5kbGVyIHRoZSBkZXN0aW5hdGlvbiwgb2YgYSBjb25uZWN0aW9uIGJldHdlZW4gdGhlCit0d28uICBPZiBjb3Vyc2UgaW4gdGhlIGNvbmZpZ3VyZWQgb2JqZWN0cyB0aGlzIGlzIHJlcHJlc2VudGVkIGJ5IHRoZQorbG9nZ2VyIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGhhbmRsZXIuICBJbiB0aGUgY29uZmlndXJhdGlvbiBkaWN0LAordGhpcyBpcyBkb25lIGJ5IGdpdmluZyBlYWNoIGRlc3RpbmF0aW9uIG9iamVjdCBhbiBpZCB3aGljaCBpZGVudGlmaWVzCitpdCB1bmFtYmlndW91c2x5LCBhbmQgdGhlbiB1c2luZyB0aGUgaWQgaW4gdGhlIHNvdXJjZSBvYmplY3QncworY29uZmlndXJhdGlvbiB0byBpbmRpY2F0ZSB0aGF0IGEgY29ubmVjdGlvbiBleGlzdHMgYmV0d2VlbiB0aGUgc291cmNlCithbmQgdGhlIGRlc3RpbmF0aW9uIG9iamVjdCB3aXRoIHRoYXQgaWQuCisKK1NvLCBmb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBZQU1MIHNuaXBwZXQ6OgorCisgICAgZm9ybWF0dGVyczoKKyAgICAgIGJyaWVmOgorICAgICAgICAjIGNvbmZpZ3VyYXRpb24gZm9yIGZvcm1hdHRlciB3aXRoIGlkICdicmllZicgZ29lcyBoZXJlCisgICAgICBwcmVjaXNlOgorICAgICAgICAjIGNvbmZpZ3VyYXRpb24gZm9yIGZvcm1hdHRlciB3aXRoIGlkICdwcmVjaXNlJyBnb2VzIGhlcmUKKyAgICBoYW5kbGVyczoKKyAgICAgIGgxOiAjVGhpcyBpcyBhbiBpZAorICAgICAgICMgY29uZmlndXJhdGlvbiBvZiBoYW5kbGVyIHdpdGggaWQgJ2gxJyBnb2VzIGhlcmUKKyAgICAgICBmb3JtYXR0ZXI6IGJyaWVmCisgICAgICBoMjogI1RoaXMgaXMgYW5vdGhlciBpZAorICAgICAgICMgY29uZmlndXJhdGlvbiBvZiBoYW5kbGVyIHdpdGggaWQgJ2gyJyBnb2VzIGhlcmUKKyAgICAgICBmb3JtYXR0ZXI6IHByZWNpc2UKKyAgICBsb2dnZXJzOgorICAgICAgZm9vLmJhci5iYXo6CisgICAgICAgICMgb3RoZXIgY29uZmlndXJhdGlvbiBmb3IgbG9nZ2VyICdmb28uYmFyLmJheicKKyAgICAgICAgaGFuZGxlcnM6IFtoMSwgaDJdCisKKyhOb3RlOiBZQU1MIHVzZWQgaGVyZSBiZWNhdXNlIGl0J3MgYSBsaXR0bGUgbW9yZSByZWFkYWJsZSB0aGFuIHRoZQorZXF1aXZhbGVudCBQeXRob24gc291cmNlIGZvcm0gZm9yIHRoZSBkaWN0aW9uYXJ5LikKKworVGhlIGlkcyBmb3IgbG9nZ2VycyBhcmUgdGhlIGxvZ2dlciBuYW1lcyB3aGljaCB3b3VsZCBiZSB1c2VkCitwcm9ncmFtbWF0aWNhbGx5IHRvIG9idGFpbiBhIHJlZmVyZW5jZSB0byB0aG9zZSBsb2dnZXJzLCBlLmcuCitgYGZvby5iYXIuYmF6YGAuICBUaGUgaWRzIGZvciBGb3JtYXR0ZXJzIGFuZCBGaWx0ZXJzIGNhbiBiZSBhbnkgc3RyaW5nCit2YWx1ZSAoc3VjaCBhcyBgYGJyaWVmYGAsIGBgcHJlY2lzZWBgIGFib3ZlKSBhbmQgdGhleSBhcmUgdHJhbnNpZW50LAoraW4gdGhhdCB0aGV5IGFyZSBvbmx5IG1lYW5pbmdmdWwgZm9yIHByb2Nlc3NpbmcgdGhlIGNvbmZpZ3VyYXRpb24KK2RpY3Rpb25hcnkgYW5kIHVzZWQgdG8gZGV0ZXJtaW5lIGNvbm5lY3Rpb25zIGJldHdlZW4gb2JqZWN0cywgYW5kIGFyZQorbm90IHBlcnNpc3RlZCBhbnl3aGVyZSB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGNhbGwgaXMgY29tcGxldGUuCisKK1RoZSBhYm92ZSBzbmlwcGV0IGluZGljYXRlcyB0aGF0IGxvZ2dlciBuYW1lZCBgYGZvby5iYXIuYmF6YGAgc2hvdWxkCitoYXZlIHR3byBoYW5kbGVycyBhdHRhY2hlZCB0byBpdCwgd2hpY2ggYXJlIGRlc2NyaWJlZCBieSB0aGUgaGFuZGxlcgoraWRzIGBgaDFgYCBhbmQgYGBoMmBgLiBUaGUgZm9ybWF0dGVyIGZvciBgYGgxYGAgaXMgdGhhdCBkZXNjcmliZWQgYnkgaWQKK2BgYnJpZWZgYCwgYW5kIHRoZSBmb3JtYXR0ZXIgZm9yIGBgaDJgYCBpcyB0aGF0IGRlc2NyaWJlZCBieSBpZAorYGBwcmVjaXNlYGAuCisKKworLi4gX2xvZ2dpbmctY29uZmlnLWRpY3QtdXNlcmRlZjoKKworVXNlci1kZWZpbmVkIG9iamVjdHMKKyIiIiIiIiIiIiIiIiIiIiIiIiIiCisKK1RoZSBzY2hlbWEgc3VwcG9ydHMgdXNlci1kZWZpbmVkIG9iamVjdHMgZm9yIGhhbmRsZXJzLCBmaWx0ZXJzIGFuZAorZm9ybWF0dGVycy4gIChMb2dnZXJzIGRvIG5vdCBuZWVkIHRvIGhhdmUgZGlmZmVyZW50IHR5cGVzIGZvcgorZGlmZmVyZW50IGluc3RhbmNlcywgc28gdGhlcmUgaXMgbm8gc3VwcG9ydCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24KK3NjaGVtYSBmb3IgdXNlci1kZWZpbmVkIGxvZ2dlciBjbGFzc2VzLikKKworT2JqZWN0cyB0byBiZSBjb25maWd1cmVkIGFyZSBkZXNjcmliZWQgYnkgZGljdGlvbmFyaWVzCit3aGljaCBkZXRhaWwgdGhlaXIgY29uZmlndXJhdGlvbi4gIEluIHNvbWUgcGxhY2VzLCB0aGUgbG9nZ2luZyBzeXN0ZW0KK3dpbGwgYmUgYWJsZSB0byBpbmZlciBmcm9tIHRoZSBjb250ZXh0IGhvdyBhbiBvYmplY3QgaXMgdG8gYmUKK2luc3RhbnRpYXRlZCwgYnV0IHdoZW4gYSB1c2VyLWRlZmluZWQgb2JqZWN0IGlzIHRvIGJlIGluc3RhbnRpYXRlZCwKK3RoZSBzeXN0ZW0gd2lsbCBub3Qga25vdyBob3cgdG8gZG8gdGhpcy4gIEluIG9yZGVyIHRvIHByb3ZpZGUgY29tcGxldGUKK2ZsZXhpYmlsaXR5IGZvciB1c2VyLWRlZmluZWQgb2JqZWN0IGluc3RhbnRpYXRpb24sIHRoZSB1c2VyIG5lZWRzCit0byBwcm92aWRlIGEgJ2ZhY3RvcnknIC0gYSBjYWxsYWJsZSB3aGljaCBpcyBjYWxsZWQgd2l0aCBhCitjb25maWd1cmF0aW9uIGRpY3Rpb25hcnkgYW5kIHdoaWNoIHJldHVybnMgdGhlIGluc3RhbnRpYXRlZCBvYmplY3QuCitUaGlzIGlzIHNpZ25hbGxlZCBieSBhbiBhYnNvbHV0ZSBpbXBvcnQgcGF0aCB0byB0aGUgZmFjdG9yeSBiZWluZworbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHNwZWNpYWwga2V5IGBgJygpJ2BgLiAgSGVyZSdzIGEgY29uY3JldGUKK2V4YW1wbGU6OgorCisgICAgZm9ybWF0dGVyczoKKyAgICAgIGJyaWVmOgorICAgICAgICBmb3JtYXQ6ICclKG1lc3NhZ2UpcycKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGZvcm1hdDogJyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKS04cyAlKG5hbWUpLTE1cyAlKG1lc3NhZ2UpcycKKyAgICAgICAgZGF0ZWZtdDogJyVZLSVtLSVkICVIOiVNOiVTJworICAgICAgY3VzdG9tOgorICAgICAgICAgICgpOiBteS5wYWNrYWdlLmN1c3RvbUZvcm1hdHRlckZhY3RvcnkKKyAgICAgICAgICBiYXI6IGJhegorICAgICAgICAgIHNwYW06IDk5LjkKKyAgICAgICAgICBhbnN3ZXI6IDQyCisKK1RoZSBhYm92ZSBZQU1MIHNuaXBwZXQgZGVmaW5lcyB0aHJlZSBmb3JtYXR0ZXJzLiAgVGhlIGZpcnN0LCB3aXRoIGlkCitgYGJyaWVmYGAsIGlzIGEgc3RhbmRhcmQgOmNsYXNzOmBsb2dnaW5nLkZvcm1hdHRlcmAgaW5zdGFuY2Ugd2l0aCB0aGUKK3NwZWNpZmllZCBmb3JtYXQgc3RyaW5nLiAgVGhlIHNlY29uZCwgd2l0aCBpZCBgYGRlZmF1bHRgYCwgaGFzIGEKK2xvbmdlciBmb3JtYXQgYW5kIGFsc28gZGVmaW5lcyB0aGUgdGltZSBmb3JtYXQgZXhwbGljaXRseSwgYW5kIHdpbGwKK3Jlc3VsdCBpbiBhIDpjbGFzczpgbG9nZ2luZy5Gb3JtYXR0ZXJgIGluaXRpYWxpemVkIHdpdGggdGhvc2UgdHdvIGZvcm1hdAorc3RyaW5ncy4gIFNob3duIGluIFB5dGhvbiBzb3VyY2UgZm9ybSwgdGhlIGBgYnJpZWZgYCBhbmQgYGBkZWZhdWx0YGAKK2Zvcm1hdHRlcnMgaGF2ZSBjb25maWd1cmF0aW9uIHN1Yi1kaWN0aW9uYXJpZXM6OgorCisgICAgeworICAgICAgJ2Zvcm1hdCcgOiAnJShtZXNzYWdlKXMnCisgICAgfQorCithbmQ6OgorCisgICAgeworICAgICAgJ2Zvcm1hdCcgOiAnJShhc2N0aW1lKXMgJShsZXZlbG5hbWUpLThzICUobmFtZSktMTVzICUobWVzc2FnZSlzJywKKyAgICAgICdkYXRlZm10JyA6ICclWS0lbS0lZCAlSDolTTolUycKKyAgICB9CisKK3Jlc3BlY3RpdmVseSwgYW5kIGFzIHRoZXNlIGRpY3Rpb25hcmllcyBkbyBub3QgY29udGFpbiB0aGUgc3BlY2lhbCBrZXkKK2BgJygpJ2BgLCB0aGUgaW5zdGFudGlhdGlvbiBpcyBpbmZlcnJlZCBmcm9tIHRoZSBjb250ZXh0OiBhcyBhIHJlc3VsdCwKK3N0YW5kYXJkIDpjbGFzczpgbG9nZ2luZy5Gb3JtYXR0ZXJgIGluc3RhbmNlcyBhcmUgY3JlYXRlZC4gIFRoZQorY29uZmlndXJhdGlvbiBzdWItZGljdGlvbmFyeSBmb3IgdGhlIHRoaXJkIGZvcm1hdHRlciwgd2l0aCBpZAorYGBjdXN0b21gYCwgaXM6OgorCisgIHsKKyAgICAnKCknIDogJ215LnBhY2thZ2UuY3VzdG9tRm9ybWF0dGVyRmFjdG9yeScsCisgICAgJ2JhcicgOiAnYmF6JywKKyAgICAnc3BhbScgOiA5OS45LAorICAgICdhbnN3ZXInIDogNDIKKyAgfQorCithbmQgdGhpcyBjb250YWlucyB0aGUgc3BlY2lhbCBrZXkgYGAnKCknYGAsIHdoaWNoIG1lYW5zIHRoYXQKK3VzZXItZGVmaW5lZCBpbnN0YW50aWF0aW9uIGlzIHdhbnRlZC4gIEluIHRoaXMgY2FzZSwgdGhlIHNwZWNpZmllZAorZmFjdG9yeSBjYWxsYWJsZSB3aWxsIGJlIHVzZWQuIElmIGl0IGlzIGFuIGFjdHVhbCBjYWxsYWJsZSBpdCB3aWxsIGJlCit1c2VkIGRpcmVjdGx5IC0gb3RoZXJ3aXNlLCBpZiB5b3Ugc3BlY2lmeSBhIHN0cmluZyAoYXMgaW4gdGhlIGV4YW1wbGUpCit0aGUgYWN0dWFsIGNhbGxhYmxlIHdpbGwgYmUgbG9jYXRlZCB1c2luZyBub3JtYWwgaW1wb3J0IG1lY2hhbmlzbXMuCitUaGUgY2FsbGFibGUgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgKipyZW1haW5pbmcqKiBpdGVtcyBpbiB0aGUKK2NvbmZpZ3VyYXRpb24gc3ViLWRpY3Rpb25hcnkgYXMga2V5d29yZCBhcmd1bWVudHMuICBJbiB0aGUgYWJvdmUKK2V4YW1wbGUsIHRoZSBmb3JtYXR0ZXIgd2l0aCBpZCBgYGN1c3RvbWBgIHdpbGwgYmUgYXNzdW1lZCB0byBiZQorcmV0dXJuZWQgYnkgdGhlIGNhbGw6OgorCisgICAgbXkucGFja2FnZS5jdXN0b21Gb3JtYXR0ZXJGYWN0b3J5KGJhcj0nYmF6Jywgc3BhbT05OS45LCBhbnN3ZXI9NDIpCisKK1RoZSBrZXkgYGAnKCknYGAgaGFzIGJlZW4gdXNlZCBhcyB0aGUgc3BlY2lhbCBrZXkgYmVjYXVzZSBpdCBpcyBub3QgYQordmFsaWQga2V5d29yZCBwYXJhbWV0ZXIgbmFtZSwgYW5kIHNvIHdpbGwgbm90IGNsYXNoIHdpdGggdGhlIG5hbWVzIG9mCit0aGUga2V5d29yZCBhcmd1bWVudHMgdXNlZCBpbiB0aGUgY2FsbC4gIFRoZSBgYCcoKSdgYCBhbHNvIHNlcnZlcyBhcyBhCittbmVtb25pYyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIGEgY2FsbGFibGUuCisKKworLi4gX2xvZ2dpbmctY29uZmlnLWRpY3QtZXh0ZXJuYWxvYmo6CisKK0FjY2VzcyB0byBleHRlcm5hbCBvYmplY3RzCisiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgorCitUaGVyZSBhcmUgdGltZXMgd2hlcmUgYSBjb25maWd1cmF0aW9uIG5lZWRzIHRvIHJlZmVyIHRvIG9iamVjdHMKK2V4dGVybmFsIHRvIHRoZSBjb25maWd1cmF0aW9uLCBmb3IgZXhhbXBsZSBgYHN5cy5zdGRlcnJgYC4gIElmIHRoZQorY29uZmlndXJhdGlvbiBkaWN0IGlzIGNvbnN0cnVjdGVkIHVzaW5nIFB5dGhvbiBjb2RlLCB0aGlzIGlzCitzdHJhaWdodGZvcndhcmQsIGJ1dCBhIHByb2JsZW0gYXJpc2VzIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMKK3Byb3ZpZGVkIHZpYSBhIHRleHQgZmlsZSAoZS5nLiBKU09OLCBZQU1MKS4gIEluIGEgdGV4dCBmaWxlLCB0aGVyZSBpcworbm8gc3RhbmRhcmQgd2F5IHRvIGRpc3Rpbmd1aXNoIGBgc3lzLnN0ZGVycmBgIGZyb20gdGhlIGxpdGVyYWwgc3RyaW5nCitgYCdzeXMuc3RkZXJyJ2BgLiAgVG8gZmFjaWxpdGF0ZSB0aGlzIGRpc3RpbmN0aW9uLCB0aGUgY29uZmlndXJhdGlvbgorc3lzdGVtIGxvb2tzIGZvciBjZXJ0YWluIHNwZWNpYWwgcHJlZml4ZXMgaW4gc3RyaW5nIHZhbHVlcyBhbmQKK3RyZWF0IHRoZW0gc3BlY2lhbGx5LiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBsaXRlcmFsIHN0cmluZworYGAnZXh0Oi8vc3lzLnN0ZGVycidgYCBpcyBwcm92aWRlZCBhcyBhIHZhbHVlIGluIHRoZSBjb25maWd1cmF0aW9uLAordGhlbiB0aGUgYGBleHQ6Ly9gYCB3aWxsIGJlIHN0cmlwcGVkIG9mZiBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUKK3ZhbHVlIHByb2Nlc3NlZCB1c2luZyBub3JtYWwgaW1wb3J0IG1lY2hhbmlzbXMuCisKK1RoZSBoYW5kbGluZyBvZiBzdWNoIHByZWZpeGVzIGlzIGRvbmUgaW4gYSB3YXkgYW5hbG9nb3VzIHRvIHByb3RvY29sCitoYW5kbGluZzogdGhlcmUgaXMgYSBnZW5lcmljIG1lY2hhbmlzbSB0byBsb29rIGZvciBwcmVmaXhlcyB3aGljaAorbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBgYF4oP1A8cHJlZml4PlthLXpdKyk6Ly8oP1A8c3VmZml4Pi4qKSRgYAord2hlcmVieSwgaWYgdGhlIGBgcHJlZml4YGAgaXMgcmVjb2duaXNlZCwgdGhlIGBgc3VmZml4YGAgaXMgcHJvY2Vzc2VkCitpbiBhIHByZWZpeC1kZXBlbmRlbnQgbWFubmVyIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBwcm9jZXNzaW5nIHJlcGxhY2VzCit0aGUgc3RyaW5nIHZhbHVlLiAgSWYgdGhlIHByZWZpeCBpcyBub3QgcmVjb2duaXNlZCwgdGhlbiB0aGUgc3RyaW5nCit2YWx1ZSB3aWxsIGJlIGxlZnQgYXMtaXMuCisKKworLi4gX2xvZ2dpbmctY29uZmlnLWRpY3QtaW50ZXJuYWxvYmo6CisKK0FjY2VzcyB0byBpbnRlcm5hbCBvYmplY3RzCisiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgorCitBcyB3ZWxsIGFzIGV4dGVybmFsIG9iamVjdHMsIHRoZXJlIGlzIHNvbWV0aW1lcyBhbHNvIGEgbmVlZCB0byByZWZlcgordG8gb2JqZWN0cyBpbiB0aGUgY29uZmlndXJhdGlvbi4gIFRoaXMgd2lsbCBiZSBkb25lIGltcGxpY2l0bHkgYnkgdGhlCitjb25maWd1cmF0aW9uIHN5c3RlbSBmb3IgdGhpbmdzIHRoYXQgaXQga25vd3MgYWJvdXQuICBGb3IgZXhhbXBsZSwgdGhlCitzdHJpbmcgdmFsdWUgYGAnREVCVUcnYGAgZm9yIGEgYGBsZXZlbGBgIGluIGEgbG9nZ2VyIG9yIGhhbmRsZXIgd2lsbAorYXV0b21hdGljYWxseSBiZSBjb252ZXJ0ZWQgdG8gdGhlIHZhbHVlIGBgbG9nZ2luZy5ERUJVR2BgLCBhbmQgdGhlCitgYGhhbmRsZXJzYGAsIGBgZmlsdGVyc2BgIGFuZCBgYGZvcm1hdHRlcmBgIGVudHJpZXMgd2lsbCB0YWtlIGFuCitvYmplY3QgaWQgYW5kIHJlc29sdmUgdG8gdGhlIGFwcHJvcHJpYXRlIGRlc3RpbmF0aW9uIG9iamVjdC4KKworSG93ZXZlciwgYSBtb3JlIGdlbmVyaWMgbWVjaGFuaXNtIGlzIG5lZWRlZCBmb3IgdXNlci1kZWZpbmVkCitvYmplY3RzIHdoaWNoIGFyZSBub3Qga25vd24gdG8gdGhlIDptb2Q6YGxvZ2dpbmdgIG1vZHVsZS4gIEZvcgorZXhhbXBsZSwgY29uc2lkZXIgOmNsYXNzOmBsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXJgLCB3aGljaCB0YWtlcworYSBgYHRhcmdldGBgIGFyZ3VtZW50IHdoaWNoIGlzIGFub3RoZXIgaGFuZGxlciB0byBkZWxlZ2F0ZSB0by4gU2luY2UKK3RoZSBzeXN0ZW0gYWxyZWFkeSBrbm93cyBhYm91dCB0aGlzIGNsYXNzLCB0aGVuIGluIHRoZSBjb25maWd1cmF0aW9uLAordGhlIGdpdmVuIGBgdGFyZ2V0YGAganVzdCBuZWVkcyB0byBiZSB0aGUgb2JqZWN0IGlkIG9mIHRoZSByZWxldmFudAordGFyZ2V0IGhhbmRsZXIsIGFuZCB0aGUgc3lzdGVtIHdpbGwgcmVzb2x2ZSB0byB0aGUgaGFuZGxlciBmcm9tIHRoZQoraWQuICBJZiwgaG93ZXZlciwgYSB1c2VyIGRlZmluZXMgYSBgYG15LnBhY2thZ2UuTXlIYW5kbGVyYGAgd2hpY2ggaGFzCithbiBgYGFsdGVybmF0ZWBgIGhhbmRsZXIsIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSB3b3VsZCBub3Qga25vdyB0aGF0Cit0aGUgYGBhbHRlcm5hdGVgYCByZWZlcnJlZCB0byBhIGhhbmRsZXIuICBUbyBjYXRlciBmb3IgdGhpcywgYSBnZW5lcmljCityZXNvbHV0aW9uIHN5c3RlbSBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeTo6CisKKyAgICBoYW5kbGVyczoKKyAgICAgIGZpbGU6CisgICAgICAgICMgY29uZmlndXJhdGlvbiBvZiBmaWxlIGhhbmRsZXIgZ29lcyBoZXJlCisKKyAgICAgIGN1c3RvbToKKyAgICAgICAgKCk6IG15LnBhY2thZ2UuTXlIYW5kbGVyCisgICAgICAgIGFsdGVybmF0ZTogY2ZnOi8vaGFuZGxlcnMuZmlsZQorCitUaGUgbGl0ZXJhbCBzdHJpbmcgYGAnY2ZnOi8vaGFuZGxlcnMuZmlsZSdgYCB3aWxsIGJlIHJlc29sdmVkIGluIGFuCithbmFsb2dvdXMgd2F5IHRvIHN0cmluZ3Mgd2l0aCB0aGUgYGBleHQ6Ly9gYCBwcmVmaXgsIGJ1dCBsb29raW5nCitpbiB0aGUgY29uZmlndXJhdGlvbiBpdHNlbGYgcmF0aGVyIHRoYW4gdGhlIGltcG9ydCBuYW1lc3BhY2UuICBUaGUKK21lY2hhbmlzbSBhbGxvd3MgYWNjZXNzIGJ5IGRvdCBvciBieSBpbmRleCwgaW4gYSBzaW1pbGFyIHdheSB0bwordGhhdCBwcm92aWRlZCBieSBgYHN0ci5mb3JtYXRgYC4gIFRodXMsIGdpdmVuIHRoZSBmb2xsb3dpbmcgc25pcHBldDo6CisKKyAgICBoYW5kbGVyczoKKyAgICAgIGVtYWlsOgorICAgICAgICBjbGFzczogbG9nZ2luZy5oYW5kbGVycy5TTVRQSGFuZGxlcgorICAgICAgICBtYWlsaG9zdDogbG9jYWxob3N0CisgICAgICAgIGZyb21hZGRyOiBteV9hcHBAZG9tYWluLnRsZAorICAgICAgICB0b2FkZHJzOgorICAgICAgICAgIC0gc3VwcG9ydF90ZWFtQGRvbWFpbi50bGQKKyAgICAgICAgICAtIGRldl90ZWFtQGRvbWFpbi50bGQKKyAgICAgICAgc3ViamVjdDogSG91c3Rvbiwgd2UgaGF2ZSBhIHByb2JsZW0uCisKK2luIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgc3RyaW5nIGBgJ2NmZzovL2hhbmRsZXJzJ2BgIHdvdWxkIHJlc29sdmUgdG8KK3RoZSBkaWN0IHdpdGgga2V5IGBgaGFuZGxlcnNgYCwgdGhlIHN0cmluZyBgYCdjZmc6Ly9oYW5kbGVycy5lbWFpbGBgCit3b3VsZCByZXNvbHZlIHRvIHRoZSBkaWN0IHdpdGgga2V5IGBgZW1haWxgYCBpbiB0aGUgYGBoYW5kbGVyc2BgIGRpY3QsCithbmQgc28gb24uICBUaGUgc3RyaW5nIGBgJ2NmZzovL2hhbmRsZXJzLmVtYWlsLnRvYWRkcnNbMV1gYCB3b3VsZAorcmVzb2x2ZSB0byBgYCdkZXZfdGVhbS5kb21haW4udGxkJ2BgIGFuZCB0aGUgc3RyaW5nCitgYCdjZmc6Ly9oYW5kbGVycy5lbWFpbC50b2FkZHJzWzBdJ2BgIHdvdWxkIHJlc29sdmUgdG8gdGhlIHZhbHVlCitgYCdzdXBwb3J0X3RlYW1AZG9tYWluLnRsZCdgYC4gVGhlIGBgc3ViamVjdGBgIHZhbHVlIGNvdWxkIGJlIGFjY2Vzc2VkCit1c2luZyBlaXRoZXIgYGAnY2ZnOi8vaGFuZGxlcnMuZW1haWwuc3ViamVjdCdgYCBvciwgZXF1aXZhbGVudGx5LAorYGAnY2ZnOi8vaGFuZGxlcnMuZW1haWxbc3ViamVjdF0nYGAuICBUaGUgbGF0dGVyIGZvcm0gb25seSBuZWVkcyB0byBiZQordXNlZCBpZiB0aGUga2V5IGNvbnRhaW5zIHNwYWNlcyBvciBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuICBJZiBhbgoraW5kZXggdmFsdWUgY29uc2lzdHMgb25seSBvZiBkZWNpbWFsIGRpZ2l0cywgYWNjZXNzIHdpbGwgYmUgYXR0ZW1wdGVkCit1c2luZyB0aGUgY29ycmVzcG9uZGluZyBpbnRlZ2VyIHZhbHVlLCBmYWxsaW5nIGJhY2sgdG8gdGhlIHN0cmluZwordmFsdWUgaWYgbmVlZGVkLgorCitHaXZlbiBhIHN0cmluZyBgYGNmZzovL2hhbmRsZXJzLm15aGFuZGxlci5teWtleS4xMjNgYCwgdGhpcyB3aWxsCityZXNvbHZlIHRvIGBgY29uZmlnX2RpY3RbJ2hhbmRsZXJzJ11bJ215aGFuZGxlciddWydteWtleSddWycxMjMnXWBgLgorSWYgdGhlIHN0cmluZyBpcyBzcGVjaWZpZWQgYXMgYGBjZmc6Ly9oYW5kbGVycy5teWhhbmRsZXIubXlrZXlbMTIzXWBgLAordGhlIHN5c3RlbSB3aWxsIGF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIHZhbHVlIGZyb20KK2BgY29uZmlnX2RpY3RbJ2hhbmRsZXJzJ11bJ215aGFuZGxlciddWydteWtleSddWzEyM11gYCwgYW5kIGZhbGwgYmFjawordG8gYGBjb25maWdfZGljdFsnaGFuZGxlcnMnXVsnbXloYW5kbGVyJ11bJ215a2V5J11bJzEyMyddYGAgaWYgdGhhdAorZmFpbHMuCisKIC4uIF9sb2dnaW5nLWNvbmZpZy1maWxlZm9ybWF0OgogCiBDb25maWd1cmF0aW9uIGZpbGUgZm9ybWF0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYWNvc2EucnN0IGIvRG9jL2xpYnJhcnkvbWFjb3NhLnJzdAppbmRleCAyNTBhOTIzLi41NGU2MmYyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYWNvc2EucnN0CisrKyBiL0RvYy9saWJyYXJ5L21hY29zYS5yc3QKQEAgLTksNyArOSw4IEBACiBBcmNoaXRlY3R1cmUgKE9TQSwgYWxzbyBjb21tb25seSByZWZlcnJlZCB0byBhcyBBcHBsZVNjcmlwdCkgZm9yIFB5dGhvbiwKIGFsbG93aW5nIHlvdSB0byBjb250cm9sIHNjcmlwdGFibGUgYXBwbGljYXRpb25zIGZyb20geW91ciBQeXRob24gcHJvZ3JhbSwKIGFuZCB3aXRoIGEgZmFpcmx5IHB5dGhvbmljIGludGVyZmFjZS4gRGV2ZWxvcG1lbnQgb24gdGhpcyBzZXQgb2YgbW9kdWxlcyBoYXMKLXN0b3BwZWQsIGFuZCBhIHJlcGxhY2VtZW50IGlzIGV4cGVjdGVkIGZvciBQeXRob24gMi41Lgorc3RvcHBlZC4gRm9yIG1vcmUgdXAtdG8tZGF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBBcHBsZVNjcmlwdCBzdXBwb3J0IGZvciBQeXRob24sCitzZWUgdGhlIHRoaXJkLXBhcnR5IHB5LWFwcHNjcmlwdCBwcm9qZWN0OiA8aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2FwcHNjcmlwdC8+LgogCiBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91cyBjb21wb25lbnRzIG9mIEFwcGxlU2NyaXB0IGFuZCBPU0EsIGFuZCB0byBnZXQKIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGVybWlub2xvZ3ksIHlvdSBzaG91bGQgcmVhZCBBcHBsZSdzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYWNvc3Rvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L21hY29zdG9vbHMucnN0CmluZGV4IGZjMjZkMmYuLmYyYTI2NDMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21hY29zdG9vbHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L21hY29zdG9vbHMucnN0CkBAIC03NSw3ICs3NSw3IEBACiAKIAogOm1vZDpgZmluZGVydG9vbHNgIC0tLSBUaGUgOnByb2dyYW06YGZpbmRlcmAncyBBcHBsZSBFdmVudHMgaW50ZXJmYWNlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogZmluZGVydG9vbHMKICAgIDpwbGF0Zm9ybTogTWFjCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYXRoLnJzdCBiL0RvYy9saWJyYXJ5L21hdGgucnN0CmluZGV4IDc4OWVjY2MuLmU1ZmZiYTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21hdGgucnN0CisrKyBiL0RvYy9saWJyYXJ5L21hdGgucnN0CkBAIC04Nyw3ICs4Nyw3IEBACiAgICBsb3NzIG9mIHByZWNpc2lvbiBieSB0cmFja2luZyBtdWx0aXBsZSBpbnRlcm1lZGlhdGUgcGFydGlhbCBzdW1zOjoKIAogICAgICAgICA+Pj4gc3VtKFsuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMV0pCi0gICAgICAgIDAuOTk5OTk5OTk5OTk5OTk5ODkKKyAgICAgICAgMC45OTk5OTk5OTk5OTk5OTk5CiAgICAgICAgID4+PiBmc3VtKFsuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMV0pCiAgICAgICAgIDEuMAogCkBAIC0xNTksNiArMTU5LDIyIEBACiAgICBSZXR1cm4gYGBlKip4YGAuCiAKIAorLi4gZnVuY3Rpb246OiBleHBtMSh4KQorCisgICBSZXR1cm4gYGBlKip4IC0gMWBgLiAgRm9yIHNtYWxsIGZsb2F0cyAqeCosIHRoZSBzdWJ0cmFjdGlvbiBpbgorICAgYGBleHAoeCkgLSAxYGAgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IGxvc3Mgb2YgcHJlY2lzaW9uOyB0aGUKKyAgIDpmdW5jOmBleHBtMWAgZnVuY3Rpb24gcHJvdmlkZXMgYSB3YXkgdG8gY29tcHV0ZSB0aGlzIHF1YW50aXR5IHRvCisgICBmdWxsIHByZWNpc2lvbjo6CisKKyAgICAgID4+PiBmcm9tIG1hdGggaW1wb3J0IGV4cCwgZXhwbTEKKyAgICAgID4+PiBleHAoMWUtNSkgLSAxICAjIGdpdmVzIHJlc3VsdCBhY2N1cmF0ZSB0byAxMSBwbGFjZXMKKyAgICAgIDEuMDAwMDA1MDAwMDA2OTY0OWUtMDUKKyAgICAgID4+PiBleHBtMSgxZS01KSAgICAjIHJlc3VsdCBhY2N1cmF0ZSB0byBmdWxsIHByZWNpc2lvbgorICAgICAgMS4wMDAwMDUwMDAwMTY2NjY4ZS0wNQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBmdW5jdGlvbjo6IGxvZyh4WywgYmFzZV0pCiAKICAgIFdpdGggb25lIGFyZ3VtZW50LCByZXR1cm4gdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mICp4KiAodG8gYmFzZSAqZSopLgpAQCAtMzAzLDYgKzMxOSwzOCBAQAogICAgUmV0dXJuIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgKngqLgogCiAKK1NwZWNpYWwgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IGVyZih4KQorCisgICBSZXR1cm4gdGhlIGVycm9yIGZ1bmN0aW9uIGF0ICp4Ki4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gZnVuY3Rpb246OiBlcmZjKHgpCisKKyAgIFJldHVybiB0aGUgY29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbiBhdCAqeCouCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKy4uIGZ1bmN0aW9uOjogZ2FtbWEoeCkKKworICAgUmV0dXJuIHRoZSBHYW1tYSBmdW5jdGlvbiBhdCAqeCouCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKy4uIGZ1bmN0aW9uOjogbGdhbW1hKHgpCisKKyAgIFJldHVybiB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBHYW1tYQorICAgZnVuY3Rpb24gYXQgKngqLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiBDb25zdGFudHMKIC0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9taW1ldHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvbWltZXR5cGVzLnJzdAppbmRleCA4MThmMzlmLi45NTZhMWYxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9taW1ldHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L21pbWV0eXBlcy5yc3QKQEAgLTc3LDkgKzc3LDEzIEBACiAKICAgIEluaXRpYWxpemUgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy4gIElmIGdpdmVuLCAqZmlsZXMqIG11c3QgYmUgYSBzZXF1ZW5jZQogICAgb2YgZmlsZSBuYW1lcyB3aGljaCBzaG91bGQgYmUgdXNlZCB0byBhdWdtZW50IHRoZSBkZWZhdWx0IHR5cGUgbWFwLiAgSWYgb21pdHRlZCwKLSAgIHRoZSBmaWxlIG5hbWVzIHRvIHVzZSBhcmUgdGFrZW4gZnJvbSA6Y29uc3Q6YGtub3duZmlsZXNgLiAgRWFjaCBmaWxlIG5hbWVkIGluCi0gICAqZmlsZXMqIG9yIDpjb25zdDpga25vd25maWxlc2AgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRob3NlIG5hbWVkIGJlZm9yZSBpdC4KLSAgIENhbGxpbmcgOmZ1bmM6YGluaXRgIHJlcGVhdGVkbHkgaXMgYWxsb3dlZC4KKyAgIHRoZSBmaWxlIG5hbWVzIHRvIHVzZSBhcmUgdGFrZW4gZnJvbSA6Y29uc3Q6YGtub3duZmlsZXNgOyBvbiBXaW5kb3dzLCB0aGUKKyAgIGN1cnJlbnQgcmVnaXN0cnkgc2V0dGluZ3MgYXJlIGxvYWRlZC4gIEVhY2ggZmlsZSBuYW1lZCBpbiAqZmlsZXMqIG9yCisgICA6Y29uc3Q6YGtub3duZmlsZXNgIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aG9zZSBuYW1lZCBiZWZvcmUgaXQuICBDYWxsaW5nCisgICA6ZnVuYzpgaW5pdGAgcmVwZWF0ZWRseSBpcyBhbGxvd2VkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgUHJldmlvdXNseSwgV2luZG93cyByZWdpc3RyeSBzZXR0aW5ncyB3ZXJlIGlnbm9yZWQuCiAKIAogLi4gZnVuY3Rpb246OiByZWFkX21pbWVfdHlwZXMoZmlsZW5hbWUpCkBAIC0yMTMsNiArMjE3LDEyIEBACiAgICBvZiB0aGUgb2JqZWN0LgogCiAKKy4uIG1ldGhvZDo6IE1pbWVUeXBlcy5ndWVzc19hbGxfZXh0ZW5zaW9ucyh0eXBlWywgc3RyaWN0XSkKKworICAgU2ltaWxhciB0byB0aGUgOmZ1bmM6YGd1ZXNzX2FsbF9leHRlbnNpb25zYCBmdW5jdGlvbiwgdXNpbmcgdGhlIHRhYmxlcyBzdG9yZWQgYXMgcGFydAorICAgb2YgdGhlIG9iamVjdC4KKworCiAuLiBtZXRob2Q6OiBNaW1lVHlwZXMuZ3Vlc3NfdHlwZSh1cmxbLCBzdHJpY3RdKQogCiAgICBTaW1pbGFyIHRvIHRoZSA6ZnVuYzpgZ3Vlc3NfdHlwZWAgZnVuY3Rpb24sIHVzaW5nIHRoZSB0YWJsZXMgc3RvcmVkIGFzIHBhcnQgb2YKQEAgLTIzMCwzICsyNDAsOSBAQAogICAgTG9hZCBNSU1FIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBhbiBvcGVuIGZpbGUuICBUaGUgZmlsZSBtdXN0IGhhdmUgdGhlIGZvcm1hdCBvZgogICAgdGhlIHN0YW5kYXJkIDpmaWxlOmBtaW1lLnR5cGVzYCBmaWxlcy4KIAorCisuLiBtZXRob2Q6OiBNaW1lVHlwZXMucmVhZF93aW5kb3dzX3JlZ2lzdHJ5KCkKKworICAgTG9hZCBNSU1FIHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgV2luZG93cyByZWdpc3RyeS4gIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tbWFwLnJzdCBiL0RvYy9saWJyYXJ5L21tYXAucnN0CmluZGV4IGE2ZTliZGMuLjEyNWIzNGYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21tYXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L21tYXAucnN0CkBAIC0xNzMsNyArMTczLDcgQEAKIAogICAgICAgQ29weSB0aGUgKmNvdW50KiBieXRlcyBzdGFydGluZyBhdCBvZmZzZXQgKnNyYyogdG8gdGhlIGRlc3RpbmF0aW9uIGluZGV4CiAgICAgICAqZGVzdCouICBJZiB0aGUgbW1hcCB3YXMgY3JlYXRlZCB3aXRoIDpjb25zdDpgQUNDRVNTX1JFQURgLCB0aGVuIGNhbGxzIHRvCi0gICAgICBtb3ZlIHdpbGwgdGhyb3cgYSA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbi4KKyAgICAgIG1vdmUgd2lsbCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uLgogCiAKICAgIC4uIG1ldGhvZDo6IHJlYWQobnVtKQpAQCAtMTk5LDcgKzE5OSw3IEBACiAKICAgICAgIFJlc2l6ZXMgdGhlIG1hcCBhbmQgdGhlIHVuZGVybHlpbmcgZmlsZSwgaWYgYW55LiBJZiB0aGUgbW1hcCB3YXMgY3JlYXRlZAogICAgICAgd2l0aCA6Y29uc3Q6YEFDQ0VTU19SRUFEYCBvciA6Y29uc3Q6YEFDQ0VTU19DT1BZYCwgcmVzaXppbmcgdGhlIG1hcCB3aWxsCi0gICAgICB0aHJvdyBhIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uLgorICAgICAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbi4KIAogCiAgICAuLiBtZXRob2Q6OiByZmluZChzdHJpbmdbLCBzdGFydFssIGVuZF1dKQpAQCAtMjM0LDcgKzIzNCw3IEBACiAgICAgICBXcml0ZSB0aGUgYnl0ZXMgaW4gKnN0cmluZyogaW50byBtZW1vcnkgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlCiAgICAgICBmaWxlIHBvaW50ZXI7IHRoZSBmaWxlIHBvc2l0aW9uIGlzIHVwZGF0ZWQgdG8gcG9pbnQgYWZ0ZXIgdGhlIGJ5dGVzIHRoYXQKICAgICAgIHdlcmUgd3JpdHRlbi4gSWYgdGhlIG1tYXAgd2FzIGNyZWF0ZWQgd2l0aCA6Y29uc3Q6YEFDQ0VTU19SRUFEYCwgdGhlbgotICAgICAgd3JpdGluZyB0byBpdCB3aWxsIHRocm93IGEgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24uCisgICAgICB3cml0aW5nIHRvIGl0IHdpbGwgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbi4KIAogCiAgICAuLiBtZXRob2Q6OiB3cml0ZV9ieXRlKGJ5dGUpCkBAIC0yNDIsNiArMjQyLDQgQEAKICAgICAgIFdyaXRlIHRoZSBzaW5nbGUtY2hhcmFjdGVyIHN0cmluZyAqYnl0ZSogaW50byBtZW1vcnkgYXQgdGhlIGN1cnJlbnQKICAgICAgIHBvc2l0aW9uIG9mIHRoZSBmaWxlIHBvaW50ZXI7IHRoZSBmaWxlIHBvc2l0aW9uIGlzIGFkdmFuY2VkIGJ5IGBgMWBgLiBJZgogICAgICAgdGhlIG1tYXAgd2FzIGNyZWF0ZWQgd2l0aCA6Y29uc3Q6YEFDQ0VTU19SRUFEYCwgdGhlbiB3cml0aW5nIHRvIGl0IHdpbGwKLSAgICAgIHRocm93IGEgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24uCi0KLQorICAgICAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbi4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L21vZHVsZXMucnN0IGIvRG9jL2xpYnJhcnkvbW9kdWxlcy5yc3QKaW5kZXggZWM2ZjdjZC4uYjU1NDNlNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbW9kdWxlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbW9kdWxlcy5yc3QKQEAgLTE0LDYgKzE0LDcgQEAKIC4uIHRvY3RyZWU6OgogCiAgICBpbXAucnN0CisgICBpbXBvcnRsaWIucnN0CiAgICBpbXB1dGlsLnJzdAogICAgemlwaW1wb3J0LnJzdAogICAgcGtndXRpbC5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L21zaWxpYi5yc3QgYi9Eb2MvbGlicmFyeS9tc2lsaWIucnN0CmluZGV4IDdkNjRkZTMuLmE0MTI2MDkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21zaWxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbXNpbGliLnJzdApAQCAtMzUzLDcgKzM1Myw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLQogCiAKLS4uIGNsYXNzOjogRGlyZWN0b3J5KGRhdGFiYXNlLCBjYWIsIGJhc2VkaXIsIHBoeXNpY2FsLCAgbG9naWNhbCwgZGVmYXVsdCwgY29tcG9uZW50LCBbY29tcG9uZW50ZmxhZ3NdKQorLi4gY2xhc3M6OiBEaXJlY3RvcnkoZGF0YWJhc2UsIGNhYiwgYmFzZWRpciwgcGh5c2ljYWwsICBsb2dpY2FsLCBkZWZhdWx0LCBbY29tcG9uZW50ZmxhZ3NdKQogCiAgICBDcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGluIHRoZSBEaXJlY3RvcnkgdGFibGUuIFRoZXJlIGlzIGEgY3VycmVudCBjb21wb25lbnQgYXQKICAgIGVhY2ggcG9pbnQgaW4gdGltZSBmb3IgdGhlIGRpcmVjdG9yeSwgd2hpY2ggaXMgZWl0aGVyIGV4cGxpY2l0bHkgY3JlYXRlZCB0aHJvdWdoCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0IGIvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAppbmRleCA5YmRhZjZmLi5mNGU0YThlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgVGhlIGBgJ2QnYGAgYW5kIGBgJ2knYGAgYXJndW1lbnRzIHVzZWQgd2hlbiBjcmVhdGluZyBgYG51bWBgIGFuZCBgYGFycmBgIGFyZQogICAgdHlwZWNvZGVzIG9mIHRoZSBraW5kIHVzZWQgYnkgdGhlIDptb2Q6YGFycmF5YCBtb2R1bGU6IGBgJ2QnYGAgaW5kaWNhdGVzIGEKICAgIGRvdWJsZSBwcmVjaXNpb24gZmxvYXQgYW5kIGBgJ2knYGAgaW5kaWNhdGVzIGEgc2lnbmVkIGludGVnZXIuICBUaGVzZSBzaGFyZWQKLSAgIG9iamVjdHMgd2lsbCBiZSBwcm9jZXNzIGFuZCB0aHJlYWQgc2FmZS4KKyAgIG9iamVjdHMgd2lsbCBiZSBwcm9jZXNzIGFuZCB0aHJlYWQtc2FmZS4KIAogICAgRm9yIG1vcmUgZmxleGliaWxpdHkgaW4gdXNpbmcgc2hhcmVkIG1lbW9yeSBvbmUgY2FuIHVzZSB0aGUKICAgIDptb2Q6YG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXNgIG1vZHVsZSB3aGljaCBzdXBwb3J0cyB0aGUgY3JlYXRpb24gb2YKQEAgLTM3Niw3ICszNzYsNyBAQAogICAgICAgT3RoZXJ3aXNlIGEgZGFlbW9uaWMgcHJvY2VzcyB3b3VsZCBsZWF2ZSBpdHMgY2hpbGRyZW4gb3JwaGFuZWQgaWYgaXQgZ2V0cwogICAgICAgdGVybWluYXRlZCB3aGVuIGl0cyBwYXJlbnQgcHJvY2VzcyBleGl0cy4gQWRkaXRpb25hbGx5LCB0aGVzZSBhcmUgKipub3QqKgogICAgICAgVW5peCBkYWVtb25zIG9yIHNlcnZpY2VzLCB0aGV5IGFyZSBub3JtYWwgcHJvY2Vzc2VzIHRoYXQgd2lsbCBiZQotICAgICAgdGVybWluYXRlZCAoYW5kIG5vdCBqb2luZWQpIGlmIG5vbi1kYW1lb25pYyBwcm9jZXNzZXMgaGF2ZSBleGl0ZWQuCisgICAgICB0ZXJtaW5hdGVkIChhbmQgbm90IGpvaW5lZCkgaWYgbm9uLWRhZW1vbmljIHByb2Nlc3NlcyBoYXZlIGV4aXRlZC4KIAogICAgSW4gYWRkaXRpb24gdG8gdGhlICA6Y2xhc3M6YFRocmVhZGluZy5UaHJlYWRgIEFQSSwgOmNsYXNzOmBQcm9jZXNzYCBvYmplY3RzCiAgICBhbHNvIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzOgpAQCAtNzIxLDcgKzcyMSw4IEBACiAgICAgICBTZW5kIGFuIG9iamVjdCB0byB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uIHdoaWNoIHNob3VsZCBiZSByZWFkCiAgICAgICB1c2luZyA6bWV0aDpgcmVjdmAuCiAKLSAgICAgIFRoZSBvYmplY3QgbXVzdCBiZSBwaWNrbGFibGUuCisgICAgICBUaGUgb2JqZWN0IG11c3QgYmUgcGlja2xhYmxlLiAgVmVyeSBsYXJnZSBwaWNrbGVzIChhcHByb3hpbWF0ZWx5IDMyIE1CKywKKyAgICAgIHRob3VnaCBpdCBkZXBlbmRzIG9uIHRoZSBPUykgbWF5IHJhaXNlIGEgVmFsdWVFcnJvciBleGNlcHRpb24uCiAKICAgIC4uIG1ldGhvZDo6IHJlY3YoKQogCkBAIC03NTMsNyArNzU0LDkgQEAKICAgICAgIGNvbXBsZXRlIG1lc3NhZ2UuCiAKICAgICAgIElmICpvZmZzZXQqIGlzIGdpdmVuIHRoZW4gZGF0YSBpcyByZWFkIGZyb20gdGhhdCBwb3NpdGlvbiBpbiAqYnVmZmVyKi4gIElmCi0gICAgICAqc2l6ZSogaXMgZ2l2ZW4gdGhlbiB0aGF0IG1hbnkgYnl0ZXMgd2lsbCBiZSByZWFkIGZyb20gYnVmZmVyLgorICAgICAgKnNpemUqIGlzIGdpdmVuIHRoZW4gdGhhdCBtYW55IGJ5dGVzIHdpbGwgYmUgcmVhZCBmcm9tIGJ1ZmZlci4gIFZlcnkgbGFyZ2UKKyAgICAgIGJ1ZmZlcnMgKGFwcHJveGltYXRlbHkgMzIgTUIrLCB0aG91Z2ggaXQgZGVwZW5kcyBvbiB0aGUgT1MpIG1heSByYWlzZSBhCisgICAgICBWYWx1ZUVycm9yIGV4Y2VwdGlvbgogCiAgICAuLiBtZXRob2Q6OiByZWN2X2J5dGVzKFttYXhsZW5ndGhdKQogCkBAIC04NDksNiArODUyLDEyIEBACiAuLiBjbGFzczo6IEV2ZW50KCkKIAogICAgQSBjbG9uZSBvZiA6Y2xhc3M6YHRocmVhZGluZy5FdmVudGAuCisgICBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJuYWwgc2VtYXBob3JlIG9uIGV4aXQsIHNvIGl0CisgICB3aWxsIGFsd2F5cyByZXR1cm4gYGBUcnVlYGAgZXhjZXB0IGlmIGEgdGltZW91dCBpcyBnaXZlbiBhbmQgdGhlIG9wZXJhdGlvbgorICAgdGltZXMgb3V0LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgUHJldmlvdXNseSwgdGhlIG1ldGhvZCBhbHdheXMgcmV0dXJuZWQgYGBOb25lYGAuCiAKIC4uIGNsYXNzOjogTG9jaygpCiAKQEAgLTExMzQsOSArMTE0MywxMCBAQAogICAgYGBjdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5YGAuICBPdGhlcndpc2UgKmF1dGhrZXkqIGlzIHVzZWQgYW5kIGl0CiAgICBtdXN0IGJlIGEgc3RyaW5nLgogCi0gICAuLiBtZXRob2Q6OiBzdGFydCgpCisgICAuLiBtZXRob2Q6OiBzdGFydChbaW5pdGlhbGl6ZXJbLCBpbml0YXJnc11dKQogCi0gICAgICBTdGFydCBhIHN1YnByb2Nlc3MgdG8gc3RhcnQgdGhlIG1hbmFnZXIuCisgICAgICBTdGFydCBhIHN1YnByb2Nlc3MgdG8gc3RhcnQgdGhlIG1hbmFnZXIuICBJZiAqaW5pdGlhbGl6ZXIqIGlzIG5vdCBgYE5vbmVgYAorICAgICAgdGhlbiB0aGUgc3VicHJvY2VzcyB3aWxsIGNhbGwgYGBpbml0aWFsaXplcigqaW5pdGFyZ3MpYGAgd2hlbiBpdCBzdGFydHMuCiAKICAgIC4uIG1ldGhvZDo6IGdldF9zZXJ2ZXIoKQogCkBAIC0xMjc2LDYgKzEyODYsMjQgQEAKIAogICAgICAgQ3JlYXRlIGEgc2hhcmVkIGBgbGlzdGBgIG9iamVjdCBhbmQgcmV0dXJuIGEgcHJveHkgZm9yIGl0LgogCisgICAuLiBub3RlOjoKKworICAgICAgTW9kaWZpY2F0aW9ucyB0byBtdXRhYmxlIHZhbHVlcyBvciBpdGVtcyBpbiBkaWN0IGFuZCBsaXN0IHByb3hpZXMgd2lsbCBub3QKKyAgICAgIGJlIHByb3BhZ2F0ZWQgdGhyb3VnaCB0aGUgbWFuYWdlciwgYmVjYXVzZSB0aGUgcHJveHkgaGFzIG5vIHdheSBvZiBrbm93aW5nCisgICAgICB3aGVuIGl0cyB2YWx1ZXMgb3IgaXRlbXMgYXJlIG1vZGlmaWVkLiAgVG8gbW9kaWZ5IHN1Y2ggYW4gaXRlbSwgeW91IGNhbgorICAgICAgcmUtYXNzaWduIHRoZSBtb2RpZmllZCBvYmplY3QgdG8gdGhlIGNvbnRhaW5lciBwcm94eTo6CisKKyAgICAgICAgICMgY3JlYXRlIGEgbGlzdCBwcm94eSBhbmQgYXBwZW5kIGEgbXV0YWJsZSBvYmplY3QgKGEgZGljdGlvbmFyeSkKKyAgICAgICAgIGxwcm94eSA9IG1hbmFnZXIubGlzdCgpCisgICAgICAgICBscHJveHkuYXBwZW5kKHt9KQorICAgICAgICAgIyBub3cgbXV0YXRlIHRoZSBkaWN0aW9uYXJ5CisgICAgICAgICBkID0gbHByb3h5WzBdCisgICAgICAgICBkWydhJ10gPSAxCisgICAgICAgICBkWydiJ10gPSAyCisgICAgICAgICAjIGF0IHRoaXMgcG9pbnQsIHRoZSBjaGFuZ2VzIHRvIGQgYXJlIG5vdCB5ZXQgc3luY2VkLCBidXQgYnkKKyAgICAgICAgICMgcmVhc3NpZ25pbmcgdGhlIGRpY3Rpb25hcnksIHRoZSBwcm94eSBpcyBub3RpZmllZCBvZiB0aGUgY2hhbmdlCisgICAgICAgICBscHJveHlbMF0gPSBkCisKIAogTmFtZXNwYWNlIG9iamVjdHMKID4+Pj4+Pj4+Pj4+Pj4+Pj4+CkBAIC0xNTIyLDcgKzE1NTAsNyBAQAogT25lIGNhbiBjcmVhdGUgYSBwb29sIG9mIHByb2Nlc3NlcyB3aGljaCB3aWxsIGNhcnJ5IG91dCB0YXNrcyBzdWJtaXR0ZWQgdG8gaXQKIHdpdGggdGhlIDpjbGFzczpgUG9vbGAgY2xhc3MuCiAKLS4uIGNsYXNzOjogbXVsdGlwcm9jZXNzaW5nLlBvb2woW3Byb2Nlc3Nlc1ssIGluaXRpYWxpemVyWywgaW5pdGFyZ3NdXV0pCisuLiBjbGFzczo6IG11bHRpcHJvY2Vzc2luZy5Qb29sKFtwcm9jZXNzZXNbLCBpbml0aWFsaXplclssIGluaXRhcmdzWywgbWF4dGFza3NwZXJjaGlsZF1dXV0pCiAKICAgIEEgcHJvY2VzcyBwb29sIG9iamVjdCB3aGljaCBjb250cm9scyBhIHBvb2wgb2Ygd29ya2VyIHByb2Nlc3NlcyB0byB3aGljaCBqb2JzCiAgICBjYW4gYmUgc3VibWl0dGVkLiAgSXQgc3VwcG9ydHMgYXN5bmNocm9ub3VzIHJlc3VsdHMgd2l0aCB0aW1lb3V0cyBhbmQKQEAgLTE1MzMsNiArMTU2MSwyMiBAQAogICAgKmluaXRpYWxpemVyKiBpcyBub3QgYGBOb25lYGAgdGhlbiBlYWNoIHdvcmtlciBwcm9jZXNzIHdpbGwgY2FsbAogICAgYGBpbml0aWFsaXplcigqaW5pdGFyZ3MpYGAgd2hlbiBpdCBzdGFydHMuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworICAgICAgKm1heHRhc2tzcGVyY2hpbGQqIGlzIHRoZSBudW1iZXIgb2YgdGFza3MgYSB3b3JrZXIgcHJvY2VzcyBjYW4gY29tcGxldGUKKyAgICAgIGJlZm9yZSBpdCB3aWxsIGV4aXQgYW5kIGJlIHJlcGxhY2VkIHdpdGggYSBmcmVzaCB3b3JrZXIgcHJvY2VzcywgdG8gZW5hYmxlCisgICAgICB1bnVzZWQgcmVzb3VyY2VzIHRvIGJlIGZyZWVkLiBUaGUgZGVmYXVsdCAqbWF4dGFza3NwZXJjaGlsZCogaXMgTm9uZSwgd2hpY2gKKyAgICAgIG1lYW5zIHdvcmtlciBwcm9jZXNzZXMgd2lsbCBsaXZlIGFzIGxvbmcgYXMgdGhlIHBvb2wuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBXb3JrZXIgcHJvY2Vzc2VzIHdpdGhpbiBhIDpjbGFzczpgUG9vbGAgdHlwaWNhbGx5IGxpdmUgZm9yIHRoZSBjb21wbGV0ZQorICAgICAgZHVyYXRpb24gb2YgdGhlIFBvb2wncyB3b3JrIHF1ZXVlLiBBIGZyZXF1ZW50IHBhdHRlcm4gZm91bmQgaW4gb3RoZXIKKyAgICAgIHN5c3RlbXMgKHN1Y2ggYXMgQXBhY2hlLCBtb2Rfd3NnaSwgZXRjKSB0byBmcmVlIHJlc291cmNlcyBoZWxkIGJ5CisgICAgICB3b3JrZXJzIGlzIHRvIGFsbG93IGEgd29ya2VyIHdpdGhpbiBhIHBvb2wgdG8gY29tcGxldGUgb25seSBhIHNldAorICAgICAgYW1vdW50IG9mIHdvcmsgYmVmb3JlIGJlaW5nIGV4aXRpbmcsIGJlaW5nIGNsZWFuZWQgdXAgYW5kIGEgbmV3CisgICAgICBwcm9jZXNzIHNwYXduZWQgdG8gcmVwbGFjZSB0aGUgb2xkIG9uZS4gVGhlICptYXh0YXNrc3BlcmNoaWxkKgorICAgICAgYXJndW1lbnQgdG8gdGhlIDpjbGFzczpgUG9vbGAgZXhwb3NlcyB0aGlzIGFiaWxpdHkgdG8gdGhlIGVuZCB1c2VyLgorCiAgICAuLiBtZXRob2Q6OiBhcHBseShmdW5jWywgYXJnc1ssIGt3ZHNdXSkKIAogICAgICAgRXF1aXZhbGVudCBvZiB0aGUgOmZ1bmM6YGFwcGx5YCBidWlsdC1pbiBmdW5jdGlvbi4gIEl0IGJsb2NrcyB0aWxsIHRoZQpAQCAtMjE5OCw4ICsyMjQyLDggQEAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKIAogCi1BbiBzaG93aW5nIGhvdyB0byB1c2UgcXVldWVzIHRvIGZlZWQgdGFza3MgdG8gYSBjb2xsZWN0aW9uIG9mIHdvcmtlciBwcm9jZXNzIGFuZAotY29sbGVjdCB0aGUgcmVzdWx0czoKK0FuIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gdXNlIHF1ZXVlcyB0byBmZWVkIHRhc2tzIHRvIGEgY29sbGVjdGlvbiBvZiB3b3JrZXIKK3Byb2Nlc3MgYW5kIGNvbGxlY3QgdGhlIHJlc3VsdHM6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd29ya2Vycy5weQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CmluZGV4IDZjMTZhNDMuLjdhNDYxYjQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CkBAIC0xOCwzNSArMTgsMzUgQEAKIEhlcmUgYXJlIHR3byBzbWFsbCBleGFtcGxlcyBvZiBob3cgaXQgY2FuIGJlIHVzZWQuICBUbyBsaXN0IHNvbWUgc3RhdGlzdGljcwogYWJvdXQgYSBuZXdzZ3JvdXAgYW5kIHByaW50IHRoZSBzdWJqZWN0cyBvZiB0aGUgbGFzdCAxMCBhcnRpY2xlczo6CiAKLSAgID4+PiBzID0gTk5UUCgnbmV3cy5jd2kubmwnKQotICAgPj4+IHJlc3AsIGNvdW50LCBmaXJzdCwgbGFzdCwgbmFtZSA9IHMuZ3JvdXAoJ2NvbXAubGFuZy5weXRob24nKQorICAgPj4+IHMgPSBOTlRQKCduZXdzLmdtYW5lLm9yZycpCisgICA+Pj4gcmVzcCwgY291bnQsIGZpcnN0LCBsYXN0LCBuYW1lID0gcy5ncm91cCgnZ21hbmUuY29tcC5weXRob24uY29tbWl0dGVycycpCiAgICA+Pj4gcHJpbnQgJ0dyb3VwJywgbmFtZSwgJ2hhcycsIGNvdW50LCAnYXJ0aWNsZXMsIHJhbmdlJywgZmlyc3QsICd0bycsIGxhc3QKLSAgIEdyb3VwIGNvbXAubGFuZy5weXRob24gaGFzIDU5IGFydGljbGVzLCByYW5nZSAzNzQyIHRvIDM4MDMKKyAgIEdyb3VwIGdtYW5lLmNvbXAucHl0aG9uLmNvbW1pdHRlcnMgaGFzIDEwNzEgYXJ0aWNsZXMsIHJhbmdlIDEgdG8gMTA3MQogICAgPj4+IHJlc3AsIHN1YnMgPSBzLnhoZHIoJ3N1YmplY3QnLCBmaXJzdCArICctJyArIGxhc3QpCiAgICA+Pj4gZm9yIGlkLCBzdWIgaW4gc3Vic1stMTA6XTogcHJpbnQgaWQsIHN1YgogICAgLi4uCi0gICAzNzkyIFJlOiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIGEgbGlzdCB3aGlsZSBpdGVyYXRpbmcuLi4KLSAgIDM3OTMgUmU6IFdobyBsaWtlcyBJbmZvIGZpbGVzPwotICAgMzc5NCBFbWFjcyBhbmQgZG9jIHN0cmluZ3MKLSAgIDM3OTUgYSBmZXcgcXVlc3Rpb25zIGFib3V0IHRoZSBNYWMgaW1wbGVtZW50YXRpb24KLSAgIDM3OTYgUmU6IGV4ZWN1dGFibGUgcHl0aG9uIHNjcmlwdHMKLSAgIDM3OTcgUmU6IGV4ZWN1dGFibGUgcHl0aG9uIHNjcmlwdHMKLSAgIDM3OTggUmU6IGEgZmV3IHF1ZXN0aW9ucyBhYm91dCB0aGUgTWFjIGltcGxlbWVudGF0aW9uCi0gICAzNzk5IFJlOiBQUk9QT1NBTDogQSBHZW5lcmljIFB5dGhvbiBPYmplY3QgSW50ZXJmYWNlIGZvciBQeXRob24gQyBNb2R1bGVzCi0gICAzODAyIFJlOiBleGVjdXRhYmxlIHB5dGhvbiBzY3JpcHRzCi0gICAzODAzIFJlOiBcUE9TSVh7fSB3YWl0IGFuZCBTSUdDSExECisgICAxMDYyIFJlOiBNZXJjdXJpYWwgU3RhdHVzPworICAgMTA2MyBSZTogW3B5dGhvbi1jb21taXR0ZXJzXSAgKFdpbmRvd3MpIGJ1aWxkYm90cyBvbiAzLngKKyAgIDEwNjQgUmU6IE1lcmN1cmlhbCBTdGF0dXM/CisgICAxMDY1IFJlOiBNZXJjdXJpYWwgU3RhdHVzPworICAgMTA2NiBQeXRob24gMi42LjYgc3RhdHVzCisgICAxMDY3IENvbW1pdCBQcml2aWxlZ2VzIGZvciBBc2sgU29sZW0KKyAgIDEwNjggUmU6IENvbW1pdCBQcml2aWxlZ2VzIGZvciBBc2sgU29sZW0KKyAgIDEwNjkgUmU6IENvbW1pdCBQcml2aWxlZ2VzIGZvciBBc2sgU29sZW0KKyAgIDEwNzAgUmU6IENvbW1pdCBQcml2aWxlZ2VzIGZvciBBc2sgU29sZW0KKyAgIDEwNzEgMi42LjYgcmMgMgogICAgPj4+IHMucXVpdCgpCi0gICAnMjA1IG5ld3MuY3dpLm5sIGNsb3NpbmcgY29ubmVjdGlvbi4gIEdvb2RieWUuJworICAgJzIwNSBCeWUhJwogCiBUbyBwb3N0IGFuIGFydGljbGUgZnJvbSBhIGZpbGUgKHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBhcnRpY2xlIGhhcyB2YWxpZAotaGVhZGVycyk6OgoraGVhZGVycywgYW5kIHRoYXQgeW91IGhhdmUgcmlnaHQgdG8gcG9zdCBvbiB0aGUgcGFydGljdWxhciBuZXdzZ3JvdXApOjoKIAotICAgPj4+IHMgPSBOTlRQKCduZXdzLmN3aS5ubCcpCisgICA+Pj4gcyA9IE5OVFAoJ25ld3MuZ21hbmUub3JnJykKICAgID4+PiBmID0gb3BlbignL3RtcC9hcnRpY2xlJykKICAgID4+PiBzLnBvc3QoZikKICAgICcyNDAgQXJ0aWNsZSBwb3N0ZWQgc3VjY2Vzc2Z1bGx5LicKICAgID4+PiBzLnF1aXQoKQotICAgJzIwNSBuZXdzLmN3aS5ubCBjbG9zaW5nIGNvbm5lY3Rpb24uICBHb29kYnllLicKKyAgICcyMDUgQnllIScKIAogVGhlIG1vZHVsZSBpdHNlbGYgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGl0ZW1zOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QgYi9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKaW5kZXggZGI4MTNkOC4uODU0ZjE0ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdApAQCAtMjQxLDcgKzI0MSw3IEBACiAgICBEZWxldGUgdGhlIHNsaWNlIG9mICphKiBmcm9tIGluZGV4ICpiKiB0byBpbmRleCAqYy0xKi4KIAogICAgLi4gZGVwcmVjYXRlZDo6IDIuNgotICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZW1vdmVkIGluIFB5dGhvbiAzLjAuICBVc2UgOmZ1bmM6YGRlbGl0ZW1gIHdpdGggYSBzbGljZQorICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZW1vdmVkIGluIFB5dGhvbiAzLnguICBVc2UgOmZ1bmM6YGRlbGl0ZW1gIHdpdGggYSBzbGljZQogICAgICAgaW5kZXguCiAKIApAQCAtMjU3LDcgKzI1Nyw3IEBACiAgICBSZXR1cm4gdGhlIHNsaWNlIG9mICphKiBmcm9tIGluZGV4ICpiKiB0byBpbmRleCAqYy0xKi4KIAogICAgLi4gZGVwcmVjYXRlZDo6IDIuNgotICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZW1vdmVkIGluIFB5dGhvbiAzLjAuICBVc2UgOmZ1bmM6YGdldGl0ZW1gIHdpdGggYSBzbGljZQorICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZW1vdmVkIGluIFB5dGhvbiAzLnguICBVc2UgOmZ1bmM6YGdldGl0ZW1gIHdpdGggYSBzbGljZQogICAgICAgaW5kZXguCiAKIApAQCAtMjY5LDggKzI2OSw4IEBACiAuLiBmdW5jdGlvbjo6IHJlcGVhdChhLCBiKQogICAgICAgICAgICAgICBfX3JlcGVhdF9fKGEsIGIpCiAKLSAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjYKLSAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVtb3ZlZCBpbiBQeXRob24gMy4wLiAgVXNlIDpmdW5jOmBfX211bF9fYCBpbnN0ZWFkLgorICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgVXNlIDpmdW5jOmBfX211bF9fYCBpbnN0ZWFkLgogCiAgICBSZXR1cm4gYGBhICogYmBgIHdoZXJlICphKiBpcyBhIHNlcXVlbmNlIGFuZCAqYiogaXMgYW4gaW50ZWdlci4KIApAQCAtMjk1LDcgKzI5NSw3IEBACiAgICBTZXQgdGhlIHNsaWNlIG9mICphKiBmcm9tIGluZGV4ICpiKiB0byBpbmRleCAqYy0xKiB0byB0aGUgc2VxdWVuY2UgKnYqLgogCiAgICAuLiBkZXByZWNhdGVkOjogMi42Ci0gICAgICBUaGlzIGZ1bmN0aW9uIGlzIHJlbW92ZWQgaW4gUHl0aG9uIDMuMC4gIFVzZSA6ZnVuYzpgc2V0aXRlbWAgd2l0aCBhIHNsaWNlCisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHJlbW92ZWQgaW4gUHl0aG9uIDMueC4gIFVzZSA6ZnVuYzpgc2V0aXRlbWAgd2l0aCBhIHNsaWNlCiAgICAgICBpbmRleC4KIAogRXhhbXBsZSB1c2Ugb2Ygb3BlcmF0b3IgZnVuY3Rpb25zOjoKQEAgLTM5OSw4ICszOTksOCBAQAogLi4gZnVuY3Rpb246OiBpcmVwZWF0KGEsIGIpCiAgICAgICAgICAgICAgIF9faXJlcGVhdF9fKGEsIGIpCiAKLSAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjYKLSAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVtb3ZlZCBpbiBQeXRob24gMy4wLiAgVXNlIDpmdW5jOmBfX2ltdWxfX2AgaW5zdGVhZC4KKyAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgIFVzZSA6ZnVuYzpgX19pbXVsX19gIGluc3RlYWQuCiAKICAgIGBgYSA9IGlyZXBlYXQoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSAqPSBiYGAgd2hlcmUgKmEqIGlzIGEgc2VxdWVuY2UgYW5kCiAgICAqYiogaXMgYW4gaW50ZWdlci4KQEAgLTQ1OCw4ICs0NTgsOCBAQAogCiAuLiBmdW5jdGlvbjo6IGlzTWFwcGluZ1R5cGUob2JqKQogCi0gICAuLiBkZXByZWNhdGVkOjogMi42Ci0gICAgICBUaGlzIGZ1bmN0aW9uIGlzIHJlbW92ZWQgaW4gUHl0aG9uIDMuMC4gIFVzZSBgYGlzaW5zdGFuY2UoeCwgY29sbGVjdGlvbnMuTWFwcGluZylgYCBpbnN0ZWFkLgorICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgVXNlIGBgaXNpbnN0YW5jZSh4LCBjb2xsZWN0aW9ucy5NYXBwaW5nKWBgIGluc3RlYWQuCiAKICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0ICpvYmoqIHN1cHBvcnRzIHRoZSBtYXBwaW5nIGludGVyZmFjZS4gVGhpcyBpcyB0cnVlIGZvcgogICAgZGljdGlvbmFyaWVzIGFuZCBhbGwgaW5zdGFuY2Ugb2JqZWN0cyBkZWZpbmluZyA6bWV0aDpgX19nZXRpdGVtX19gLgpAQCAtNDY3LDggKzQ2Nyw4IEBACiAKIC4uIGZ1bmN0aW9uOjogaXNOdW1iZXJUeXBlKG9iaikKIAotICAgLi4gZGVwcmVjYXRlZDo6IDIuNgotICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZW1vdmVkIGluIFB5dGhvbiAzLjAuICBVc2UgYGBpc2luc3RhbmNlKHgsIG51bWJlcnMuTnVtYmVyKWBgIGluc3RlYWQuCisgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICBVc2UgYGBpc2luc3RhbmNlKHgsIG51bWJlcnMuTnVtYmVyKWBgIGluc3RlYWQuCiAKICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0ICpvYmoqIHJlcHJlc2VudHMgYSBudW1iZXIuICBUaGlzIGlzIHRydWUgZm9yIGFsbAogICAgbnVtZXJpYyB0eXBlcyBpbXBsZW1lbnRlZCBpbiBDLgpAQCAtNDc2LDggKzQ3Niw4IEBACiAKIC4uIGZ1bmN0aW9uOjogaXNTZXF1ZW5jZVR5cGUob2JqKQogCi0gICAuLiBkZXByZWNhdGVkOjogMi42Ci0gICAgICBUaGlzIGZ1bmN0aW9uIGlzIHJlbW92ZWQgaW4gUHl0aG9uIDMuMC4gIFVzZSBgYGlzaW5zdGFuY2UoeCwgY29sbGVjdGlvbnMuU2VxdWVuY2UpYGAgaW5zdGVhZC4KKyAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgIFVzZSBgYGlzaW5zdGFuY2UoeCwgY29sbGVjdGlvbnMuU2VxdWVuY2UpYGAgaW5zdGVhZC4KIAogICAgUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgKm9iaiogc3VwcG9ydHMgdGhlIHNlcXVlbmNlIHByb3RvY29sLiBUaGlzIHJldHVybnMgdHJ1ZQogICAgZm9yIGFsbCBvYmplY3RzIHdoaWNoIGRlZmluZSBzZXF1ZW5jZSBtZXRob2RzIGluIEMsIGFuZCBmb3IgYWxsIGluc3RhbmNlIG9iamVjdHMKQEAgLTQ5Niw3ICs0OTYsMjMgQEAKICAgIGF0dHJpYnV0ZSBpcyByZXF1ZXN0ZWQsIHJldHVybnMgYSB0dXBsZSBvZiBhdHRyaWJ1dGVzLiBBZnRlciwKICAgIGBgZiA9IGF0dHJnZXR0ZXIoJ25hbWUnKWBgLCB0aGUgY2FsbCBgYGYoYilgYCByZXR1cm5zIGBgYi5uYW1lYGAuICBBZnRlciwKICAgIGBgZiA9IGF0dHJnZXR0ZXIoJ25hbWUnLCAnZGF0ZScpYGAsIHRoZSBjYWxsIGBgZihiKWBgIHJldHVybnMgYGAoYi5uYW1lLAotICAgYi5kYXRlKWBgLgorICAgYi5kYXRlKWBgLiAgRXF1aXZhbGVudCB0bzo6CisKKyAgICAgIGRlZiBhdHRyZ2V0dGVyKCppdGVtcyk6CisgICAgICAgICAgaWYgbGVuKGl0ZW1zKSA9PSAxOgorICAgICAgICAgICAgICBhdHRyID0gaXRlbXNbMF0KKyAgICAgICAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlX2F0dHIob2JqLCBhdHRyKQorICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUocmVzb2x2ZV9hdHQob2JqLCBhdHRyKSBmb3IgYXR0ciBpbiBpdGVtcykKKyAgICAgICAgICByZXR1cm4gZworCisgICAgICBkZWYgcmVzb2x2ZV9hdHRyKG9iaiwgYXR0cik6CisgICAgICAgICAgZm9yIG5hbWUgaW4gYXR0ci5zcGxpdCgiLiIpOgorICAgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgbmFtZSkKKyAgICAgICAgICByZXR1cm4gb2JqCisKIAogICAgVGhlIGF0dHJpYnV0ZSBuYW1lcyBjYW4gYWxzbyBjb250YWluIGRvdHM7IGFmdGVyIGBgZiA9IGF0dHJnZXR0ZXIoJ2RhdGUubW9udGgnKWBgLAogICAgdGhlIGNhbGwgYGBmKGIpYGAgcmV0dXJucyBgYGIuZGF0ZS5tb250aGBgLgpAQCAtNTE2LDE1ICs1MzIsMTUgQEAKICAgIG9wZXJhbmQncyA6bWV0aDpgX19nZXRpdGVtX19gIG1ldGhvZC4gIElmIG11bHRpcGxlIGl0ZW1zIGFyZSBzcGVjaWZpZWQsCiAgICByZXR1cm5zIGEgdHVwbGUgb2YgbG9va3VwIHZhbHVlcy4gIEVxdWl2YWxlbnQgdG86OgogCi0gICAgICAgIGRlZiBpdGVtZ2V0dGVyKCppdGVtcyk6Ci0gICAgICAgICAgICBpZiBsZW4oaXRlbXMpID09IDE6Ci0gICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1zWzBdCi0gICAgICAgICAgICAgICAgZGVmIGcob2JqKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtpdGVtXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZWYgZyhvYmopOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUob2JqW2l0ZW1dIGZvciBpdGVtIGluIGl0ZW1zKQotICAgICAgICAgICAgcmV0dXJuIGcKKyAgICAgIGRlZiBpdGVtZ2V0dGVyKCppdGVtcyk6CisgICAgICAgICAgaWYgbGVuKGl0ZW1zKSA9PSAxOgorICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbMF0KKyAgICAgICAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpbaXRlbV0KKyAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgICAgICAgcmV0dXJuIHR1cGxlKG9ialtpdGVtXSBmb3IgaXRlbSBpbiBpdGVtcykKKyAgICAgICAgICByZXR1cm4gZwogCiAgICBUaGUgaXRlbXMgY2FuIGJlIGFueSB0eXBlIGFjY2VwdGVkIGJ5IHRoZSBvcGVyYW5kJ3MgOm1ldGg6YF9fZ2V0aXRlbV9fYAogICAgbWV0aG9kLiAgRGljdGlvbmFyaWVzIGFjY2VwdCBhbnkgaGFzaGFibGUgdmFsdWUuICBMaXN0cywgdHVwbGVzLCBhbmQKQEAgLTU0NSwxMiArNTYxLDEyIEBACiAgICBFeGFtcGxlIG9mIHVzaW5nIDpmdW5jOmBpdGVtZ2V0dGVyYCB0byByZXRyaWV2ZSBzcGVjaWZpYyBmaWVsZHMgZnJvbSBhCiAgICB0dXBsZSByZWNvcmQ6CiAKLSAgICAgICA+Pj4gaW52ZW50b3J5ID0gWygnYXBwbGUnLCAzKSwgKCdiYW5hbmEnLCAyKSwgKCdwZWFyJywgNSksICgnb3JhbmdlJywgMSldCi0gICAgICAgPj4+IGdldGNvdW50ID0gaXRlbWdldHRlcigxKQotICAgICAgID4+PiBtYXAoZ2V0Y291bnQsIGludmVudG9yeSkKLSAgICAgICBbMywgMiwgNSwgMV0KLSAgICAgICA+Pj4gc29ydGVkKGludmVudG9yeSwga2V5PWdldGNvdW50KQotICAgICAgIFsoJ29yYW5nZScsIDEpLCAoJ2JhbmFuYScsIDIpLCAoJ2FwcGxlJywgMyksICgncGVhcicsIDUpXQorICAgICAgPj4+IGludmVudG9yeSA9IFsoJ2FwcGxlJywgMyksICgnYmFuYW5hJywgMiksICgncGVhcicsIDUpLCAoJ29yYW5nZScsIDEpXQorICAgICAgPj4+IGdldGNvdW50ID0gaXRlbWdldHRlcigxKQorICAgICAgPj4+IG1hcChnZXRjb3VudCwgaW52ZW50b3J5KQorICAgICAgWzMsIDIsIDUsIDFdCisgICAgICA+Pj4gc29ydGVkKGludmVudG9yeSwga2V5PWdldGNvdW50KQorICAgICAgWygnb3JhbmdlJywgMSksICgnYmFuYW5hJywgMiksICgnYXBwbGUnLCAzKSwgKCdwZWFyJywgNSldCiAKIAogLi4gZnVuY3Rpb246OiBtZXRob2RjYWxsZXIobmFtZVssIGFyZ3MuLi5dKQpAQCAtNTU5LDcgKzU3NSwxMiBAQAogICAgYWRkaXRpb25hbCBhcmd1bWVudHMgYW5kL29yIGtleXdvcmQgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhleSB3aWxsIGJlIGdpdmVuCiAgICB0byB0aGUgbWV0aG9kIGFzIHdlbGwuICBBZnRlciBgYGYgPSBtZXRob2RjYWxsZXIoJ25hbWUnKWBgLCB0aGUgY2FsbCBgYGYoYilgYAogICAgcmV0dXJucyBgYGIubmFtZSgpYGAuICBBZnRlciBgYGYgPSBtZXRob2RjYWxsZXIoJ25hbWUnLCAnZm9vJywgYmFyPTEpYGAsIHRoZQotICAgY2FsbCBgYGYoYilgYCByZXR1cm5zIGBgYi5uYW1lKCdmb28nLCBiYXI9MSlgYC4KKyAgIGNhbGwgYGBmKGIpYGAgcmV0dXJucyBgYGIubmFtZSgnZm9vJywgYmFyPTEpYGAuICBFcXVpdmFsZW50IHRvOjoKKworICAgICAgZGVmIG1ldGhvZGNhbGxlcihuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgIGRlZiBjYWxsZXIob2JqKToKKyAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIob2JqLCBuYW1lKSgqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgcmV0dXJuIGNhbGxlcgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3B0cGFyc2UucnN0IGIvRG9jL2xpYnJhcnkvb3B0cGFyc2UucnN0CmluZGV4IGM1NDNiZDkuLmQ0YjEyMWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29wdHBhcnNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcHRwYXJzZS5yc3QKQEAgLTEsMTAgKzEsMTUgQEAKLTptb2Q6YG9wdHBhcnNlYCAtLS0gTW9yZSBwb3dlcmZ1bCBjb21tYW5kIGxpbmUgb3B0aW9uIHBhcnNlcgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6bW9kOmBvcHRwYXJzZWAgLS0tIFBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAuLiBtb2R1bGU6OiBvcHRwYXJzZQotICAgOnN5bm9wc2lzOiBNb3JlIGNvbnZlbmllbnQsIGZsZXhpYmxlLCBhbmQgcG93ZXJmdWwgY29tbWFuZC1saW5lIHBhcnNpbmcgbGlicmFyeS4KLS4uIG1vZHVsZWF1dGhvcjo6IEdyZWcgV2FyZCA8Z3dhcmRAcHl0aG9uLm5ldD4KKyAgIDpzeW5vcHNpczogQ29tbWFuZC1saW5lIG9wdGlvbiBwYXJzaW5nIGxpYnJhcnkuCisgICA6ZGVwcmVjYXRlZDoKIAorLi4gZGVwcmVjYXRlZDo6IDIuNworICAgVGhlIDptb2Q6YG9wdHBhcnNlYCBtb2R1bGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBub3QgYmUgZGV2ZWxvcGVkIGZ1cnRoZXI7CisgICBkZXZlbG9wbWVudCB3aWxsIGNvbnRpbnVlIHdpdGggdGhlIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUuCisKKy4uIG1vZHVsZWF1dGhvcjo6IEdyZWcgV2FyZCA8Z3dhcmRAcHl0aG9uLm5ldD4KIAogLi4gdmVyc2lvbmFkZGVkOjogMi4zCiAKQEAgLTU5LDkgKzY0LDkgQEAKIAogLi4gY29kZS1ibG9jazo6IHRleHQKIAotICAgdXNhZ2U6IDx5b3Vyc2NyaXB0PiBbb3B0aW9uc10KKyAgIFVzYWdlOiA8eW91cnNjcmlwdD4gW29wdGlvbnNdCiAKLSAgIG9wdGlvbnM6CisgICBPcHRpb25zOgogICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAogICAgICAtZiBGSUxFLCAtLWZpbGU9RklMRSAgd3JpdGUgcmVwb3J0IHRvIEZJTEUKICAgICAgLXEsIC0tcXVpZXQgICAgICAgICAgIGRvbid0IHByaW50IHN0YXR1cyBtZXNzYWdlcyB0byBzdGRvdXQKQEAgLTEwMiwyNiArMTA3LDI2IEBACiAgICBhbiBhcmd1bWVudCB1c2VkIHRvIHN1cHBseSBleHRyYSBpbmZvcm1hdGlvbiB0byBndWlkZSBvciBjdXN0b21pemUgdGhlCiAgICBleGVjdXRpb24gb2YgYSBwcm9ncmFtLiAgVGhlcmUgYXJlIG1hbnkgZGlmZmVyZW50IHN5bnRheGVzIGZvciBvcHRpb25zOyB0aGUKICAgIHRyYWRpdGlvbmFsIFVuaXggc3ludGF4IGlzIGEgaHlwaGVuICgiLSIpIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIGxldHRlciwKLSAgIGUuZy4gYGAiLXgiYGAgb3IgYGAiLUYiYGAuICBBbHNvLCB0cmFkaXRpb25hbCBVbml4IHN5bnRheCBhbGxvd3MgbXVsdGlwbGUKLSAgIG9wdGlvbnMgdG8gYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgYXJndW1lbnQsIGUuZy4gIGBgIi14IC1GImBgIGlzIGVxdWl2YWxlbnQKLSAgIHRvIGBgIi14RiJgYC4gIFRoZSBHTlUgcHJvamVjdCBpbnRyb2R1Y2VkIGBgIi0tImBgIGZvbGxvd2VkIGJ5IGEgc2VyaWVzIG9mCi0gICBoeXBoZW4tc2VwYXJhdGVkIHdvcmRzLCBlLmcuICBgYCItLWZpbGUiYGAgb3IgYGAiLS1kcnktcnVuImBgLiAgVGhlc2UgYXJlIHRoZQorICAgZS5nLiBgYC14YGAgb3IgYGAtRmBgLiAgQWxzbywgdHJhZGl0aW9uYWwgVW5peCBzeW50YXggYWxsb3dzIG11bHRpcGxlCisgICBvcHRpb25zIHRvIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGFyZ3VtZW50LCBlLmcuIGBgLXggLUZgYCBpcyBlcXVpdmFsZW50CisgICB0byBgYC14RmBgLiAgVGhlIEdOVSBwcm9qZWN0IGludHJvZHVjZWQgYGAtLWBgIGZvbGxvd2VkIGJ5IGEgc2VyaWVzIG9mCisgICBoeXBoZW4tc2VwYXJhdGVkIHdvcmRzLCBlLmcuIGBgLS1maWxlYGAgb3IgYGAtLWRyeS1ydW5gYC4gIFRoZXNlIGFyZSB0aGUKICAgIG9ubHkgdHdvIG9wdGlvbiBzeW50YXhlcyBwcm92aWRlZCBieSA6bW9kOmBvcHRwYXJzZWAuCiAKICAgIFNvbWUgb3RoZXIgb3B0aW9uIHN5bnRheGVzIHRoYXQgdGhlIHdvcmxkIGhhcyBzZWVuIGluY2x1ZGU6CiAKLSAgICogYSBoeXBoZW4gZm9sbG93ZWQgYnkgYSBmZXcgbGV0dGVycywgZS5nLiBgYCItcGYiYGAgKHRoaXMgaXMgKm5vdCogdGhlIHNhbWUKKyAgICogYSBoeXBoZW4gZm9sbG93ZWQgYnkgYSBmZXcgbGV0dGVycywgZS5nLiBgYC1wZmBgICh0aGlzIGlzICpub3QqIHRoZSBzYW1lCiAgICAgIGFzIG11bHRpcGxlIG9wdGlvbnMgbWVyZ2VkIGludG8gYSBzaW5nbGUgYXJndW1lbnQpCiAKLSAgICogYSBoeXBoZW4gZm9sbG93ZWQgYnkgYSB3aG9sZSB3b3JkLCBlLmcuIGBgIi1maWxlImBgICh0aGlzIGlzIHRlY2huaWNhbGx5CisgICAqIGEgaHlwaGVuIGZvbGxvd2VkIGJ5IGEgd2hvbGUgd29yZCwgZS5nLiBgYC1maWxlYGAgKHRoaXMgaXMgdGVjaG5pY2FsbHkKICAgICAgZXF1aXZhbGVudCB0byB0aGUgcHJldmlvdXMgc3ludGF4LCBidXQgdGhleSBhcmVuJ3QgdXN1YWxseSBzZWVuIGluIHRoZSBzYW1lCiAgICAgIHByb2dyYW0pCiAKICAgICogYSBwbHVzIHNpZ24gZm9sbG93ZWQgYnkgYSBzaW5nbGUgbGV0dGVyLCBvciBhIGZldyBsZXR0ZXJzLCBvciBhIHdvcmQsIGUuZy4KLSAgICAgYGAiK2YiYGAsIGBgIityZ2IiYGAKKyAgICAgYGArZmBgLCBgYCtyZ2JgYAogCi0gICAqIGEgc2xhc2ggZm9sbG93ZWQgYnkgYSBsZXR0ZXIsIG9yIGEgZmV3IGxldHRlcnMsIG9yIGEgd29yZCwgZS5nLiBgYCIvZiJgYCwKLSAgICAgYGAiL2ZpbGUiYGAKKyAgICogYSBzbGFzaCBmb2xsb3dlZCBieSBhIGxldHRlciwgb3IgYSBmZXcgbGV0dGVycywgb3IgYSB3b3JkLCBlLmcuIGBgL2ZgYCwKKyAgICAgYGAvZmlsZWBgCiAKICAgIFRoZXNlIG9wdGlvbiBzeW50YXhlcyBhcmUgbm90IHN1cHBvcnRlZCBieSA6bW9kOmBvcHRwYXJzZWAsIGFuZCB0aGV5IG5ldmVyCiAgICB3aWxsIGJlLiAgVGhpcyBpcyBkZWxpYmVyYXRlOiB0aGUgZmlyc3QgdGhyZWUgYXJlIG5vbi1zdGFuZGFyZCBvbiBhbnkKQEAgLTE0OSw5ICsxNTQsOSBAQAogICAgVHlwaWNhbGx5LCBhIGdpdmVuIG9wdGlvbiBlaXRoZXIgdGFrZXMgYW4gYXJndW1lbnQgb3IgaXQgZG9lc24ndC4gTG90cyBvZgogICAgcGVvcGxlIHdhbnQgYW4gIm9wdGlvbmFsIG9wdGlvbiBhcmd1bWVudHMiIGZlYXR1cmUsIG1lYW5pbmcgdGhhdCBzb21lIG9wdGlvbnMKICAgIHdpbGwgdGFrZSBhbiBhcmd1bWVudCBpZiB0aGV5IHNlZSBpdCwgYW5kIHdvbid0IGlmIHRoZXkgZG9uJ3QuICBUaGlzIGlzCi0gICBzb21ld2hhdCBjb250cm92ZXJzaWFsLCBiZWNhdXNlIGl0IG1ha2VzIHBhcnNpbmcgYW1iaWd1b3VzOiBpZiBgYCItYSJgYCB0YWtlcwotICAgYW4gb3B0aW9uYWwgYXJndW1lbnQgYW5kIGBgIi1iImBgIGlzIGFub3RoZXIgb3B0aW9uIGVudGlyZWx5LCBob3cgZG8gd2UKLSAgIGludGVycHJldCBgYCItYWIiYGA/ICBCZWNhdXNlIG9mIHRoaXMgYW1iaWd1aXR5LCA6bW9kOmBvcHRwYXJzZWAgZG9lcyBub3QKKyAgIHNvbWV3aGF0IGNvbnRyb3ZlcnNpYWwsIGJlY2F1c2UgaXQgbWFrZXMgcGFyc2luZyBhbWJpZ3VvdXM6IGlmIGBgLWFgYCB0YWtlcworICAgYW4gb3B0aW9uYWwgYXJndW1lbnQgYW5kIGBgLWJgYCBpcyBhbm90aGVyIG9wdGlvbiBlbnRpcmVseSwgaG93IGRvIHdlCisgICBpbnRlcnByZXQgYGAtYWJgYD8gIEJlY2F1c2Ugb2YgdGhpcyBhbWJpZ3VpdHksIDptb2Q6YG9wdHBhcnNlYCBkb2VzIG5vdAogICAgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiAKIHBvc2l0aW9uYWwgYXJndW1lbnQKQEAgLTE2OSw5ICsxNzQsOSBAQAogCiAgICBwcm9nIC12IC0tcmVwb3J0IC90bXAvcmVwb3J0LnR4dCBmb28gYmFyCiAKLWBgIi12ImBgIGFuZCBgYCItLXJlcG9ydCJgYCBhcmUgYm90aCBvcHRpb25zLiAgQXNzdW1pbmcgdGhhdCA6b3B0aW9uOmAtLXJlcG9ydGAKLXRha2VzIG9uZSBhcmd1bWVudCwgYGAiL3RtcC9yZXBvcnQudHh0ImBgIGlzIGFuIG9wdGlvbiBhcmd1bWVudC4gIGBgImZvbyJgYCBhbmQKLWBgImJhciJgYCBhcmUgcG9zaXRpb25hbCBhcmd1bWVudHMuCitgYC12YGAgYW5kIGBgLS1yZXBvcnRgYCBhcmUgYm90aCBvcHRpb25zLiAgQXNzdW1pbmcgdGhhdCBgYC0tcmVwb3J0YGAKK3Rha2VzIG9uZSBhcmd1bWVudCwgYGAvdG1wL3JlcG9ydC50eHRgYCBpcyBhbiBvcHRpb24gYXJndW1lbnQuICBgYGZvb2BgIGFuZAorYGBiYXJgYCBhcmUgcG9zaXRpb25hbCBhcmd1bWVudHMuCiAKIAogLi4gX29wdHBhcnNlLXdoYXQtb3B0aW9ucy1mb3I6CkBAIC0yNTYsNyArMjYxLDcgQEAKICAgIHBhcnNlci5hZGRfb3B0aW9uKG9wdF9zdHIsIC4uLiwKICAgICAgICAgICAgICAgICAgICAgIGF0dHI9dmFsdWUsIC4uLikKIAotRWFjaCBvcHRpb24gaGFzIG9uZSBvciBtb3JlIG9wdGlvbiBzdHJpbmdzLCBzdWNoIGFzIGBgIi1mImBgIG9yIGBgIi0tZmlsZSJgYCwKK0VhY2ggb3B0aW9uIGhhcyBvbmUgb3IgbW9yZSBvcHRpb24gc3RyaW5ncywgc3VjaCBhcyBgYC1mYGAgb3IgYGAtLWZpbGVgYCwKIGFuZCBzZXZlcmFsIG9wdGlvbiBhdHRyaWJ1dGVzIHRoYXQgdGVsbCA6bW9kOmBvcHRwYXJzZWAgd2hhdCB0byBleHBlY3QgYW5kIHdoYXQKIHRvIGRvIHdoZW4gaXQgZW5jb3VudGVycyB0aGF0IG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLgogCkBAIC0yODUsNyArMjkwLDcgQEAKIDptZXRoOmBwYXJzZV9hcmdzYCByZXR1cm5zIHR3byB2YWx1ZXM6CiAKICogYGBvcHRpb25zYGAsIGFuIG9iamVjdCBjb250YWluaW5nIHZhbHVlcyBmb3IgYWxsIG9mIHlvdXIgb3B0aW9ucy0tLWUuZy4gaWYKLSAgYGAiLS1maWxlImBgIHRha2VzIGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgdGhlbiBgYG9wdGlvbnMuZmlsZWBgIHdpbGwgYmUgdGhlCisgIGBgLS1maWxlYGAgdGFrZXMgYSBzaW5nbGUgc3RyaW5nIGFyZ3VtZW50LCB0aGVuIGBgb3B0aW9ucy5maWxlYGAgd2lsbCBiZSB0aGUKICAgZmlsZW5hbWUgc3VwcGxpZWQgYnkgdGhlIHVzZXIsIG9yIGBgTm9uZWBgIGlmIHRoZSB1c2VyIGRpZCBub3Qgc3VwcGx5IHRoYXQKICAgb3B0aW9uCiAKQEAgLTMzMSw4ICszMzYsOCBAQAogICAgYXJncyA9IFsiLWYiLCAiZm9vLnR4dCJdCiAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQogCi1XaGVuIDptb2Q6YG9wdHBhcnNlYCBzZWVzIHRoZSBvcHRpb24gc3RyaW5nIGBgIi1mImBgLCBpdCBjb25zdW1lcyB0aGUgbmV4dAotYXJndW1lbnQsIGBgImZvby50eHQiYGAsIGFuZCBzdG9yZXMgaXQgaW4gYGBvcHRpb25zLmZpbGVuYW1lYGAuICBTbywgYWZ0ZXIgdGhpcworV2hlbiA6bW9kOmBvcHRwYXJzZWAgc2VlcyB0aGUgb3B0aW9uIHN0cmluZyBgYC1mYGAsIGl0IGNvbnN1bWVzIHRoZSBuZXh0Cithcmd1bWVudCwgYGBmb28udHh0YGAsIGFuZCBzdG9yZXMgaXQgaW4gYGBvcHRpb25zLmZpbGVuYW1lYGAuICBTbywgYWZ0ZXIgdGhpcwogY2FsbCB0byA6bWV0aDpgcGFyc2VfYXJnc2AsIGBgb3B0aW9ucy5maWxlbmFtZWBgIGlzIGBgImZvby50eHQiYGAuCiAKIFNvbWUgb3RoZXIgb3B0aW9uIHR5cGVzIHN1cHBvcnRlZCBieSA6bW9kOmBvcHRwYXJzZWAgYXJlIGBgaW50YGAgYW5kIGBgZmxvYXRgYC4KQEAgLTM0NCwxMyArMzQ5LDEzIEBACiBBbHNvLCB0aGVyZSdzIG5vIGV4cGxpY2l0IGFjdGlvbiwgc2luY2UgdGhlIGRlZmF1bHQgaXMgYGBzdG9yZWBgLgogCiBMZXQncyBwYXJzZSBhbm90aGVyIGZha2UgY29tbWFuZC1saW5lLiAgVGhpcyB0aW1lLCB3ZSdsbCBqYW0gdGhlIG9wdGlvbiBhcmd1bWVudAotcmlnaHQgdXAgYWdhaW5zdCB0aGUgb3B0aW9uOiBzaW5jZSBgYCItbjQyImBgIChvbmUgYXJndW1lbnQpIGlzIGVxdWl2YWxlbnQgdG8KLWBgIi1uIDQyImBgICh0d28gYXJndW1lbnRzKSwgdGhlIGNvZGUgOjoKK3JpZ2h0IHVwIGFnYWluc3QgdGhlIG9wdGlvbjogc2luY2UgYGAtbjQyYGAgKG9uZSBhcmd1bWVudCkgaXMgZXF1aXZhbGVudCB0bworYGAtbiA0MmBgICh0d28gYXJndW1lbnRzKSwgdGhlIGNvZGUgOjoKIAogICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoWyItbjQyIl0pCiAgICBwcmludCBvcHRpb25zLm51bQogCi13aWxsIHByaW50IGBgIjQyImBgLgord2lsbCBwcmludCBgYDQyYGAuCiAKIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgdHlwZSwgOm1vZDpgb3B0cGFyc2VgIGFzc3VtZXMgYGBzdHJpbmdgYC4gIENvbWJpbmVkIHdpdGgKIHRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgYWN0aW9uIGlzIGBgc3RvcmVgYCwgdGhhdCBtZWFucyBvdXIgZmlyc3QgZXhhbXBsZSBjYW4KQEAgLTM2MCw5ICszNjUsOSBAQAogCiBJZiB5b3UgZG9uJ3Qgc3VwcGx5IGEgZGVzdGluYXRpb24sIDptb2Q6YG9wdHBhcnNlYCBmaWd1cmVzIG91dCBhIHNlbnNpYmxlCiBkZWZhdWx0IGZyb20gdGhlIG9wdGlvbiBzdHJpbmdzOiBpZiB0aGUgZmlyc3QgbG9uZyBvcHRpb24gc3RyaW5nIGlzCi1gYCItLWZvby1iYXIiYGAsIHRoZW4gdGhlIGRlZmF1bHQgZGVzdGluYXRpb24gaXMgYGBmb29fYmFyYGAuICBJZiB0aGVyZSBhcmUgbm8KK2BgLS1mb28tYmFyYGAsIHRoZW4gdGhlIGRlZmF1bHQgZGVzdGluYXRpb24gaXMgYGBmb29fYmFyYGAuICBJZiB0aGVyZSBhcmUgbm8KIGxvbmcgb3B0aW9uIHN0cmluZ3MsIDptb2Q6YG9wdHBhcnNlYCBsb29rcyBhdCB0aGUgZmlyc3Qgc2hvcnQgb3B0aW9uIHN0cmluZzogdGhlCi1kZWZhdWx0IGRlc3RpbmF0aW9uIGZvciBgYCItZiJgYCBpcyBgYGZgYC4KK2RlZmF1bHQgZGVzdGluYXRpb24gZm9yIGBgLWZgYCBpcyBgYGZgYC4KIAogOm1vZDpgb3B0cGFyc2VgIGFsc28gaW5jbHVkZXMgYnVpbHQtaW4gYGBsb25nYGAgYW5kIGBgY29tcGxleGBgIHR5cGVzLiAgQWRkaW5nCiB0eXBlcyBpcyBjb3ZlcmVkIGluIHNlY3Rpb24gOnJlZjpgb3B0cGFyc2UtZXh0ZW5kaW5nLW9wdHBhcnNlYC4KQEAgLTM3Niw3ICszODEsNyBAQAogRmxhZyBvcHRpb25zLS0tc2V0IGEgdmFyaWFibGUgdG8gdHJ1ZSBvciBmYWxzZSB3aGVuIGEgcGFydGljdWxhciBvcHRpb24gaXMgc2VlbgogLS0tYXJlIHF1aXRlIGNvbW1vbi4gIDptb2Q6YG9wdHBhcnNlYCBzdXBwb3J0cyB0aGVtIHdpdGggdHdvIHNlcGFyYXRlIGFjdGlvbnMsCiBgYHN0b3JlX3RydWVgYCBhbmQgYGBzdG9yZV9mYWxzZWBgLiAgRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBoYXZlIGEgYGB2ZXJib3NlYGAKLWZsYWcgdGhhdCBpcyB0dXJuZWQgb24gd2l0aCBgYCItdiJgYCBhbmQgb2ZmIHdpdGggYGAiLXEiYGA6OgorZmxhZyB0aGF0IGlzIHR1cm5lZCBvbiB3aXRoIGBgLXZgYCBhbmQgb2ZmIHdpdGggYGAtcWBgOjoKIAogICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0idmVyYm9zZSIpCiAgICBwYXJzZXIuYWRkX29wdGlvbigiLXEiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0idmVyYm9zZSIpCkBAIC0zODUsOCArMzkwLDggQEAKIE9LLiAgKEl0IGp1c3QgbWVhbnMgeW91IGhhdmUgdG8gYmUgYSBiaXQgY2FyZWZ1bCB3aGVuIHNldHRpbmcgZGVmYXVsdCB2YWx1ZXMtLS0KIHNlZSBiZWxvdy4pCiAKLVdoZW4gOm1vZDpgb3B0cGFyc2VgIGVuY291bnRlcnMgYGAiLXYiYGAgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgc2V0cwotYGBvcHRpb25zLnZlcmJvc2VgYCB0byBgYFRydWVgYDsgd2hlbiBpdCBlbmNvdW50ZXJzIGBgIi1xImBgLAorV2hlbiA6bW9kOmBvcHRwYXJzZWAgZW5jb3VudGVycyBgYC12YGAgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgc2V0cworYGBvcHRpb25zLnZlcmJvc2VgYCB0byBgYFRydWVgYDsgd2hlbiBpdCBlbmNvdW50ZXJzIGBgLXFgYCwKIGBgb3B0aW9ucy52ZXJib3NlYGAgaXMgc2V0IHRvIGBgRmFsc2VgYC4KIAogCkBAIC00MjYsNyArNDMxLDcgQEAKIGNvbW1hbmQgbGluZSBpcyBwYXJzZWQuCiAKIEZpcnN0LCBjb25zaWRlciB0aGUgdmVyYm9zZS9xdWlldCBleGFtcGxlLiAgSWYgd2Ugd2FudCA6bW9kOmBvcHRwYXJzZWAgdG8gc2V0Ci1gYHZlcmJvc2VgYCB0byBgYFRydWVgYCB1bmxlc3MgYGAiLXEiYGAgaXMgc2VlbiwgdGhlbiB3ZSBjYW4gZG8gdGhpczo6CitgYHZlcmJvc2VgYCB0byBgYFRydWVgYCB1bmxlc3MgYGAtcWBgIGlzIHNlZW4sIHRoZW4gd2UgY2FuIGRvIHRoaXM6OgogCiAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJ2ZXJib3NlIiwgZGVmYXVsdD1UcnVlKQogICAgcGFyc2VyLmFkZF9vcHRpb24oIi1xIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InZlcmJvc2UiKQpAQCAtNDg0LDE1ICs0ODksMTUgQEAKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImludGVyYWN0aW9uIG1vZGU6IG5vdmljZSwgaW50ZXJtZWRpYXRlLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvciBleHBlcnQgW2RlZmF1bHQ6ICVkZWZhdWx0XSIpCiAKLUlmIDptb2Q6YG9wdHBhcnNlYCBlbmNvdW50ZXJzIGVpdGhlciBgYCItaCJgYCBvciBgYCItLWhlbHAiYGAgb24gdGhlCitJZiA6bW9kOmBvcHRwYXJzZWAgZW5jb3VudGVycyBlaXRoZXIgYGAtaGBgIG9yIGBgLS1oZWxwYGAgb24gdGhlCiBjb21tYW5kLWxpbmUsIG9yIGlmIHlvdSBqdXN0IGNhbGwgOm1ldGg6YHBhcnNlci5wcmludF9oZWxwYCwgaXQgcHJpbnRzIHRoZQogZm9sbG93aW5nIHRvIHN0YW5kYXJkIG91dHB1dDoKIAogLi4gY29kZS1ibG9jazo6IHRleHQKIAotICAgdXNhZ2U6IDx5b3Vyc2NyaXB0PiBbb3B0aW9uc10gYXJnMSBhcmcyCisgICBVc2FnZTogPHlvdXJzY3JpcHQ+IFtvcHRpb25zXSBhcmcxIGFyZzIKIAotICAgb3B0aW9uczoKKyAgIE9wdGlvbnM6CiAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CiAgICAgIC12LCAtLXZlcmJvc2UgICAgICAgICBtYWtlIGxvdHMgb2Ygbm9pc2UgW2RlZmF1bHRdCiAgICAgIC1xLCAtLXF1aWV0ICAgICAgICAgICBiZSB2ZXd3eSBxdWlldCAoSSdtIGh1bnRpbmcgd2FiYml0cykKQEAgLTUxMSwxMiArNTE2LDEyIEBACiAKICAgICAgdXNhZ2UgPSAidXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBhcmcxIGFyZzIiCiAKLSAgOm1vZDpgb3B0cGFyc2VgIGV4cGFuZHMgYGAiJXByb2ciYGAgaW4gdGhlIHVzYWdlIHN0cmluZyB0byB0aGUgbmFtZSBvZiB0aGUKKyAgOm1vZDpgb3B0cGFyc2VgIGV4cGFuZHMgYGAlcHJvZ2BgIGluIHRoZSB1c2FnZSBzdHJpbmcgdG8gdGhlIG5hbWUgb2YgdGhlCiAgIGN1cnJlbnQgcHJvZ3JhbSwgaS5lLiBgYG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pYGAuICBUaGUgZXhwYW5kZWQgc3RyaW5nCiAgIGlzIHRoZW4gcHJpbnRlZCBiZWZvcmUgdGhlIGRldGFpbGVkIG9wdGlvbiBoZWxwLgogCiAgIElmIHlvdSBkb24ndCBzdXBwbHkgYSB1c2FnZSBzdHJpbmcsIDptb2Q6YG9wdHBhcnNlYCB1c2VzIGEgYmxhbmQgYnV0IHNlbnNpYmxlCi0gIGRlZmF1bHQ6IGBgInVzYWdlOiAlcHJvZyBbb3B0aW9uc10iYGAsIHdoaWNoIGlzIGZpbmUgaWYgeW91ciBzY3JpcHQgZG9lc24ndAorICBkZWZhdWx0OiBgYCJVc2FnZTogJXByb2cgW29wdGlvbnNdImBgLCB3aGljaCBpcyBmaW5lIGlmIHlvdXIgc2NyaXB0IGRvZXNuJ3QKICAgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHMuCiAKICogZXZlcnkgb3B0aW9uIGRlZmluZXMgYSBoZWxwIHN0cmluZywgYW5kIGRvZXNuJ3Qgd29ycnkgYWJvdXQgbGluZS13cmFwcGluZy0tLQpAQCAtNTI5LDE3ICs1MzQsMTcgQEAKICAgICAgLW0gTU9ERSwgLS1tb2RlPU1PREUKIAogICBIZXJlLCAiTU9ERSIgaXMgY2FsbGVkIHRoZSBtZXRhLXZhcmlhYmxlOiBpdCBzdGFuZHMgZm9yIHRoZSBhcmd1bWVudCB0aGF0IHRoZQotICB1c2VyIGlzIGV4cGVjdGVkIHRvIHN1cHBseSB0byA6b3B0aW9uOmAtbWAvOm9wdGlvbjpgLS1tb2RlYC4gIEJ5IGRlZmF1bHQsCisgIHVzZXIgaXMgZXhwZWN0ZWQgdG8gc3VwcGx5IHRvIGBgLW1gYC9gYC0tbW9kZWBgLiAgQnkgZGVmYXVsdCwKICAgOm1vZDpgb3B0cGFyc2VgIGNvbnZlcnRzIHRoZSBkZXN0aW5hdGlvbiB2YXJpYWJsZSBuYW1lIHRvIHVwcGVyY2FzZSBhbmQgdXNlcwogICB0aGF0IGZvciB0aGUgbWV0YS12YXJpYWJsZS4gIFNvbWV0aW1lcywgdGhhdCdzIG5vdCB3aGF0IHlvdSB3YW50LS0tZm9yCi0gIGV4YW1wbGUsIHRoZSA6b3B0aW9uOmAtLWZpbGVuYW1lYCBvcHRpb24gZXhwbGljaXRseSBzZXRzIGBgbWV0YXZhcj0iRklMRSJgYCwKKyAgZXhhbXBsZSwgdGhlIGBgLS1maWxlbmFtZWBgIG9wdGlvbiBleHBsaWNpdGx5IHNldHMgYGBtZXRhdmFyPSJGSUxFImBgLAogICByZXN1bHRpbmcgaW4gdGhpcyBhdXRvbWF0aWNhbGx5LWdlbmVyYXRlZCBvcHRpb24gZGVzY3JpcHRpb246OgogCiAgICAgIC1mIEZJTEUsIC0tZmlsZW5hbWU9RklMRQogCiAgIFRoaXMgaXMgaW1wb3J0YW50IGZvciBtb3JlIHRoYW4ganVzdCBzYXZpbmcgc3BhY2UsIHRob3VnaDogdGhlIG1hbnVhbGx5Ci0gIHdyaXR0ZW4gaGVscCB0ZXh0IHVzZXMgdGhlIG1ldGEtdmFyaWFibGUgIkZJTEUiIHRvIGNsdWUgdGhlIHVzZXIgaW4gdGhhdAotICB0aGVyZSdzIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBzZW1pLWZvcm1hbCBzeW50YXggIi1mIEZJTEUiIGFuZCB0aGUgaW5mb3JtYWwKKyAgd3JpdHRlbiBoZWxwIHRleHQgdXNlcyB0aGUgbWV0YS12YXJpYWJsZSBgYEZJTEVgYCB0byBjbHVlIHRoZSB1c2VyIGluIHRoYXQKKyAgdGhlcmUncyBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgc2VtaS1mb3JtYWwgc3ludGF4IGBgLWYgRklMRWBgIGFuZCB0aGUgaW5mb3JtYWwKICAgc2VtYW50aWMgZGVzY3JpcHRpb24gIndyaXRlIG91dHB1dCB0byBGSUxFIi4gVGhpcyBpcyBhIHNpbXBsZSBidXQgZWZmZWN0aXZlCiAgIHdheSB0byBtYWtlIHlvdXIgaGVscCB0ZXh0IGEgbG90IGNsZWFyZXIgYW5kIG1vcmUgdXNlZnVsIGZvciBlbmQgdXNlcnMuCiAKQEAgLTU0OSwxMiArNTU0LDMzIEBACiAgICBkZWZhdWx0IHZhbHVlLiAgSWYgYW4gb3B0aW9uIGhhcyBubyBkZWZhdWx0IHZhbHVlIChvciB0aGUgZGVmYXVsdCB2YWx1ZSBpcwogICAgYGBOb25lYGApLCBgYCVkZWZhdWx0YGAgZXhwYW5kcyB0byBgYG5vbmVgYC4KIAorR3JvdXBpbmcgT3B0aW9ucworKysrKysrKysrKysrKysrKworCiBXaGVuIGRlYWxpbmcgd2l0aCBtYW55IG9wdGlvbnMsIGl0IGlzIGNvbnZlbmllbnQgdG8gZ3JvdXAgdGhlc2Ugb3B0aW9ucyBmb3IKIGJldHRlciBoZWxwIG91dHB1dC4gIEFuIDpjbGFzczpgT3B0aW9uUGFyc2VyYCBjYW4gY29udGFpbiBzZXZlcmFsIG9wdGlvbiBncm91cHMsCiBlYWNoIG9mIHdoaWNoIGNhbiBjb250YWluIHNldmVyYWwgb3B0aW9ucy4KIAotQ29udGludWluZyB3aXRoIHRoZSBwYXJzZXIgZGVmaW5lZCBhYm92ZSwgYWRkaW5nIGFuIDpjbGFzczpgT3B0aW9uR3JvdXBgIHRvIGEKLXBhcnNlciBpcyBlYXN5OjoKK0FuIG9wdGlvbiBncm91cCBpcyBvYnRhaW5lZCB1c2luZyB0aGUgY2xhc3MgOmNsYXNzOmBPcHRpb25Hcm91cGA6CisKKy4uIGNsYXNzOjogT3B0aW9uR3JvdXAocGFyc2VyLCB0aXRsZSwgZGVzY3JpcHRpb249Tm9uZSkKKworICAgd2hlcmUKKworICAgKiBwYXJzZXIgaXMgdGhlIDpjbGFzczpgT3B0aW9uUGFyc2VyYCBpbnN0YW5jZSB0aGUgZ3JvdXAgd2lsbCBiZSBpbnN0ZXJ0ZWQgaW4KKyAgICAgdG8KKyAgICogdGl0bGUgaXMgdGhlIGdyb3VwIHRpdGxlCisgICAqIGRlc2NyaXB0aW9uLCBvcHRpb25hbCwgaXMgYSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBncm91cAorCis6Y2xhc3M6YE9wdGlvbkdyb3VwYCBpbmhlcml0cyBmcm9tIDpjbGFzczpgT3B0aW9uQ29udGFpbmVyYCAobGlrZQorOmNsYXNzOmBPcHRpb25QYXJzZXJgKSBhbmQgc28gdGhlIDptZXRoOmBhZGRfb3B0aW9uYCBtZXRob2QgY2FuIGJlIHVzZWQgdG8gYWRkCithbiBvcHRpb24gdG8gdGhlIGdyb3VwLgorCitPbmNlIGFsbCB0aGUgb3B0aW9ucyBhcmUgZGVjbGFyZWQsIHVzaW5nIHRoZSA6Y2xhc3M6YE9wdGlvblBhcnNlcmAgbWV0aG9kCis6bWV0aDpgYWRkX29wdGlvbl9ncm91cGAgdGhlIGdyb3VwIGlzIGFkZGVkIHRvIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgcGFyc2VyLgorCitDb250aW51aW5nIHdpdGggdGhlIHBhcnNlciBkZWZpbmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBhZGRpbmcgYW4KKzpjbGFzczpgT3B0aW9uR3JvdXBgIHRvIGEgcGFyc2VyIGlzIGVhc3k6OgogCiAgICAgZ3JvdXAgPSBPcHRpb25Hcm91cChwYXJzZXIsICJEYW5nZXJvdXMgT3B0aW9ucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2F1dGlvbjogdXNlIHRoZXNlIG9wdGlvbnMgYXQgeW91ciBvd24gcmlzay4gICIKQEAgLTU2NiwyMCArNTkyLDczIEBACiAKIC4uIGNvZGUtYmxvY2s6OiB0ZXh0CiAKLSAgICB1c2FnZTogIFtvcHRpb25zXSBhcmcxIGFyZzIKKyAgIFVzYWdlOiA8eW91cnNjcmlwdD4gW29wdGlvbnNdIGFyZzEgYXJnMgogCi0gICAgb3B0aW9uczoKLSAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKLSAgICAgIC12LCAtLXZlcmJvc2UgICAgICAgIG1ha2UgbG90cyBvZiBub2lzZSBbZGVmYXVsdF0KLSAgICAgIC1xLCAtLXF1aWV0ICAgICAgICAgIGJlIHZld3d5IHF1aWV0IChJJ20gaHVudGluZyB3YWJiaXRzKQotICAgICAgLWZGSUxFLCAtLWZpbGU9RklMRSAgd3JpdGUgb3V0cHV0IHRvIEZJTEUKLSAgICAgIC1tTU9ERSwgLS1tb2RlPU1PREUgIGludGVyYWN0aW9uIG1vZGU6IG9uZSBvZiAnbm92aWNlJywgJ2ludGVybWVkaWF0ZScKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0XSwgJ2V4cGVydCcKKyAgIE9wdGlvbnM6CisgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgIC12LCAtLXZlcmJvc2UgICAgICAgICBtYWtlIGxvdHMgb2Ygbm9pc2UgW2RlZmF1bHRdCisgICAgIC1xLCAtLXF1aWV0ICAgICAgICAgICBiZSB2ZXd3eSBxdWlldCAoSSdtIGh1bnRpbmcgd2FiYml0cykKKyAgICAgLWYgRklMRSwgLS1maWxlbmFtZT1GSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSBvdXRwdXQgdG8gRklMRQorICAgICAtbSBNT0RFLCAtLW1vZGU9TU9ERSAgaW50ZXJhY3Rpb24gbW9kZTogbm92aWNlLCBpbnRlcm1lZGlhdGUsIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlcnQgW2RlZmF1bHQ6IGludGVybWVkaWF0ZV0KIAotICAgICAgRGFuZ2Vyb3VzIE9wdGlvbnM6Ci0gICAgICBDYXV0aW9uOiB1c2Ugb2YgdGhlc2Ugb3B0aW9ucyBpcyBhdCB5b3VyIG93biByaXNrLiAgSXQgaXMgYmVsaWV2ZWQgdGhhdAotICAgICAgc29tZSBvZiB0aGVtIGJpdGUuCi0gICAgICAtZyAgICAgICAgICAgICAgICAgR3JvdXAgb3B0aW9uLgorICAgICBEYW5nZXJvdXMgT3B0aW9uczoKKyAgICAgICBDYXV0aW9uOiB1c2UgdGhlc2Ugb3B0aW9ucyBhdCB5b3VyIG93biByaXNrLiAgSXQgaXMgYmVsaWV2ZWQgdGhhdCBzb21lCisgICAgICAgb2YgdGhlbSBiaXRlLgorCisgICAgICAgLWcgICAgICAgICAgICAgICAgICBHcm91cCBvcHRpb24uCisKK0EgYml0IG1vcmUgY29tcGxldGUgZXhhbXBsZSBtaWdodCBpbnZvbGUgdXNpbmcgbW9yZSB0aGFuIG9uZSBncm91cDogc3RpbGwKK2V4dGVuZGluZCB0aGUgcHJldmlvdXMgZXhhbXBsZTo6CisKKyAgICBncm91cCA9IE9wdGlvbkdyb3VwKHBhcnNlciwgIkRhbmdlcm91cyBPcHRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYXV0aW9uOiB1c2UgdGhlc2Ugb3B0aW9ucyBhdCB5b3VyIG93biByaXNrLiAgIgorICAgICAgICAgICAgICAgICAgICAgICAgIkl0IGlzIGJlbGlldmVkIHRoYXQgc29tZSBvZiB0aGVtIGJpdGUuIikKKyAgICBncm91cC5hZGRfb3B0aW9uKCItZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9Ikdyb3VwIG9wdGlvbi4iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uX2dyb3VwKGdyb3VwKQorCisgICAgZ3JvdXAgPSBPcHRpb25Hcm91cChwYXJzZXIsICJEZWJ1ZyBPcHRpb25zIikKKyAgICBncm91cC5hZGRfb3B0aW9uKCItZCIsICItLWRlYnVnIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlByaW50IGRlYnVnIGluZm9ybWF0aW9uIikKKyAgICBncm91cC5hZGRfb3B0aW9uKCItcyIsICItLXNxbCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQcmludCBhbGwgU1FMIHN0YXRlbWVudHMgZXhlY3V0ZWQiKQorICAgIGdyb3VwLmFkZF9vcHRpb24oIi1lIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iUHJpbnQgZXZlcnkgYWN0aW9uIGRvbmUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uX2dyb3VwKGdyb3VwKQorCit0aGF0IHJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZyBvdXRwdXQ6CisKKy4uIGNvZGUtYmxvY2s6OiB0ZXh0CisKKyAgIFVzYWdlOiA8eW91cnNjcmlwdD4gW29wdGlvbnNdIGFyZzEgYXJnMgorCisgICBPcHRpb25zOgorICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAtdiwgLS12ZXJib3NlICAgICAgICAgbWFrZSBsb3RzIG9mIG5vaXNlIFtkZWZhdWx0XQorICAgICAtcSwgLS1xdWlldCAgICAgICAgICAgYmUgdmV3d3kgcXVpZXQgKEknbSBodW50aW5nIHdhYmJpdHMpCisgICAgIC1mIEZJTEUsIC0tZmlsZW5hbWU9RklMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgb3V0cHV0IHRvIEZJTEUKKyAgICAgLW0gTU9ERSwgLS1tb2RlPU1PREUgIGludGVyYWN0aW9uIG1vZGU6IG5vdmljZSwgaW50ZXJtZWRpYXRlLCBvciBleHBlcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0OiBpbnRlcm1lZGlhdGVdCisKKyAgICAgRGFuZ2Vyb3VzIE9wdGlvbnM6CisgICAgICAgQ2F1dGlvbjogdXNlIHRoZXNlIG9wdGlvbnMgYXQgeW91ciBvd24gcmlzay4gIEl0IGlzIGJlbGlldmVkIHRoYXQgc29tZQorICAgICAgIG9mIHRoZW0gYml0ZS4KKworICAgICAgIC1nICAgICAgICAgICAgICAgICAgR3JvdXAgb3B0aW9uLgorCisgICAgIERlYnVnIE9wdGlvbnM6CisgICAgICAgLWQsIC0tZGVidWcgICAgICAgICBQcmludCBkZWJ1ZyBpbmZvcm1hdGlvbgorICAgICAgIC1zLCAtLXNxbCAgICAgICAgICAgUHJpbnQgYWxsIFNRTCBzdGF0ZW1lbnRzIGV4ZWN1dGVkCisgICAgICAgLWUgICAgICAgICAgICAgICAgICBQcmludCBldmVyeSBhY3Rpb24gZG9uZQorCitBbm90aGVyIGludGVyZXN0aW5nIG1ldGhvZCwgaW4gcGFydGljdWxhciB3aGVuIHdvcmtpbmcgcHJvZ3JhbW1hdGljYWxseSB3aXRoCitvcHRpb24gZ3JvdXBzIGlzOgorCisuLiBtZXRob2Q6OiBPcHRpb25QYXJzZXIuZ2V0X29wdGlvbl9ncm91cChvcHRfc3RyKQorCisgICBSZXR1cm4sIGlmIGRlZmluZWQsIHRoZSA6Y2xhc3M6YE9wdGlvbkdyb3VwYCB0aGF0IGhhcyB0aGUgdGl0bGUgb3IgdGhlIGxvbmcKKyAgIGRlc2NyaXB0aW9uIGVxdWFscyB0byAqb3B0X3N0cioKIAogLi4gX29wdHBhcnNlLXByaW50aW5nLXZlcnNpb24tc3RyaW5nOgogCkBAIC01OTIsMTEgKzY3MSwxMSBAQAogCiAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9IiVwcm9nIFstZl0gWy1xXSIsIHZlcnNpb249IiVwcm9nIDEuMCIpCiAKLWBgIiVwcm9nImBgIGlzIGV4cGFuZGVkIGp1c3QgbGlrZSBpdCBpcyBpbiBgYHVzYWdlYGAuICBBcGFydCBmcm9tIHRoYXQsCitgYCVwcm9nYGAgaXMgZXhwYW5kZWQganVzdCBsaWtlIGl0IGlzIGluIGBgdXNhZ2VgYC4gIEFwYXJ0IGZyb20gdGhhdCwKIGBgdmVyc2lvbmBgIGNhbiBjb250YWluIGFueXRoaW5nIHlvdSBsaWtlLiAgV2hlbiB5b3Ugc3VwcGx5IGl0LCA6bW9kOmBvcHRwYXJzZWAKLWF1dG9tYXRpY2FsbHkgYWRkcyBhIGBgIi0tdmVyc2lvbiJgYCBvcHRpb24gdG8geW91ciBwYXJzZXIuIElmIGl0IGVuY291bnRlcnMKK2F1dG9tYXRpY2FsbHkgYWRkcyBhIGBgLS12ZXJzaW9uYGAgb3B0aW9uIHRvIHlvdXIgcGFyc2VyLiBJZiBpdCBlbmNvdW50ZXJzCiB0aGlzIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdCBleHBhbmRzIHlvdXIgYGB2ZXJzaW9uYGAgc3RyaW5nIChieQotcmVwbGFjaW5nIGBgIiVwcm9nImBgKSwgcHJpbnRzIGl0IHRvIHN0ZG91dCwgYW5kIGV4aXRzLgorcmVwbGFjaW5nIGBgJXByb2dgYCksIHByaW50cyBpdCB0byBzdGRvdXQsIGFuZCBleGl0cy4KIAogRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2NyaXB0IGlzIGNhbGxlZCBgYC91c3IvYmluL2Zvb2BgOjoKIApAQCAtNjA5LDcgKzY4OCw3IEBACiAKICAgIFByaW50IHRoZSB2ZXJzaW9uIG1lc3NhZ2UgZm9yIHRoZSBjdXJyZW50IHByb2dyYW0gKGBgc2VsZi52ZXJzaW9uYGApIHRvCiAgICAqZmlsZSogKGRlZmF1bHQgc3Rkb3V0KS4gIEFzIHdpdGggOm1ldGg6YHByaW50X3VzYWdlYCwgYW55IG9jY3VycmVuY2UKLSAgIG9mIGBgIiVwcm9nImBgIGluIGBgc2VsZi52ZXJzaW9uYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudAorICAgb2YgYGAlcHJvZ2BgIGluIGBgc2VsZi52ZXJzaW9uYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudAogICAgcHJvZ3JhbS4gIERvZXMgbm90aGluZyBpZiBgYHNlbGYudmVyc2lvbmBgIGlzIGVtcHR5IG9yIHVuZGVmaW5lZC4KIAogLi4gbWV0aG9kOjogT3B0aW9uUGFyc2VyLmdldF92ZXJzaW9uKCkKQEAgLTYzMiw5ICs3MTEsOSBAQAogCiBIYW5kbGluZyB1c2VyIGVycm9ycyBpcyBtdWNoIG1vcmUgaW1wb3J0YW50LCBzaW5jZSB0aGV5IGFyZSBndWFyYW50ZWVkIHRvIGhhcHBlbgogbm8gbWF0dGVyIGhvdyBzdGFibGUgeW91ciBjb2RlIGlzLiAgOm1vZDpgb3B0cGFyc2VgIGNhbiBhdXRvbWF0aWNhbGx5IGRldGVjdAotc29tZSB1c2VyIGVycm9ycywgc3VjaCBhcyBiYWQgb3B0aW9uIGFyZ3VtZW50cyAocGFzc2luZyBgYCItbiA0eCJgYCB3aGVyZQotOm9wdGlvbjpgLW5gIHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQpLCBtaXNzaW5nIGFyZ3VtZW50cyAoYGAiLW4iYGAgYXQgdGhlIGVuZAotb2YgdGhlIGNvbW1hbmQgbGluZSwgd2hlcmUgOm9wdGlvbjpgLW5gIHRha2VzIGFuIGFyZ3VtZW50IG9mIGFueSB0eXBlKS4gIEFsc28sCitzb21lIHVzZXIgZXJyb3JzLCBzdWNoIGFzIGJhZCBvcHRpb24gYXJndW1lbnRzIChwYXNzaW5nIGBgLW4gNHhgYCB3aGVyZQorYGAtbmBgIHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQpLCBtaXNzaW5nIGFyZ3VtZW50cyAoYGAtbmBgIGF0IHRoZSBlbmQKK29mIHRoZSBjb21tYW5kIGxpbmUsIHdoZXJlIGBgLW5gYCB0YWtlcyBhbiBhcmd1bWVudCBvZiBhbnkgdHlwZSkuICBBbHNvLAogeW91IGNhbiBjYWxsIDpmdW5jOmBPcHRpb25QYXJzZXIuZXJyb3JgIHRvIHNpZ25hbCBhbiBhcHBsaWNhdGlvbi1kZWZpbmVkIGVycm9yCiBjb25kaXRpb246OgogCkBAIC02NDcsMTggKzcyNiwxOCBAQAogcHJvZ3JhbSdzIHVzYWdlIG1lc3NhZ2UgYW5kIGFuIGVycm9yIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIGV4aXRzIHdpdGgKIGVycm9yIHN0YXR1cyAyLgogCi1Db25zaWRlciB0aGUgZmlyc3QgZXhhbXBsZSBhYm92ZSwgd2hlcmUgdGhlIHVzZXIgcGFzc2VzIGBgIjR4ImBgIHRvIGFuIG9wdGlvbgorQ29uc2lkZXIgdGhlIGZpcnN0IGV4YW1wbGUgYWJvdmUsIHdoZXJlIHRoZSB1c2VyIHBhc3NlcyBgYDR4YGAgdG8gYW4gb3B0aW9uCiB0aGF0IHRha2VzIGFuIGludGVnZXI6OgogCiAgICAkIC91c3IvYmluL2ZvbyAtbiA0eAotICAgdXNhZ2U6IGZvbyBbb3B0aW9uc10KKyAgIFVzYWdlOiBmb28gW29wdGlvbnNdCiAKICAgIGZvbzogZXJyb3I6IG9wdGlvbiAtbjogaW52YWxpZCBpbnRlZ2VyIHZhbHVlOiAnNHgnCiAKIE9yLCB3aGVyZSB0aGUgdXNlciBmYWlscyB0byBwYXNzIGEgdmFsdWUgYXQgYWxsOjoKIAogICAgJCAvdXNyL2Jpbi9mb28gLW4KLSAgIHVzYWdlOiBmb28gW29wdGlvbnNdCisgICBVc2FnZTogZm9vIFtvcHRpb25zXQogCiAgICBmb286IGVycm9yOiAtbiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQKIApAQCAtNzQwLDggKzgxOSw4IEBACiAgICBgYHZlcnNpb25gYCAoZGVmYXVsdDogYGBOb25lYGApCiAgICAgICBBIHZlcnNpb24gc3RyaW5nIHRvIHByaW50IHdoZW4gdGhlIHVzZXIgc3VwcGxpZXMgYSB2ZXJzaW9uIG9wdGlvbi4gSWYgeW91CiAgICAgICBzdXBwbHkgYSB0cnVlIHZhbHVlIGZvciBgYHZlcnNpb25gYCwgOm1vZDpgb3B0cGFyc2VgIGF1dG9tYXRpY2FsbHkgYWRkcyBhCi0gICAgICB2ZXJzaW9uIG9wdGlvbiB3aXRoIHRoZSBzaW5nbGUgb3B0aW9uIHN0cmluZyBgYCItLXZlcnNpb24iYGAuICBUaGUKLSAgICAgIHN1YnN0cmluZyBgYCIlcHJvZyJgYCBpcyBleHBhbmRlZCB0aGUgc2FtZSBhcyBmb3IgYGB1c2FnZWBgLgorICAgICAgdmVyc2lvbiBvcHRpb24gd2l0aCB0aGUgc2luZ2xlIG9wdGlvbiBzdHJpbmcgYGAtLXZlcnNpb25gYC4gIFRoZQorICAgICAgc3Vic3RyaW5nIGBgJXByb2dgYCBpcyBleHBhbmRlZCB0aGUgc2FtZSBhcyBmb3IgYGB1c2FnZWBgLgogCiAgICBgYGNvbmZsaWN0X2hhbmRsZXJgYCAoZGVmYXVsdDogYGAiZXJyb3IiYGApCiAgICAgICBTcGVjaWZpZXMgd2hhdCB0byBkbyB3aGVuIG9wdGlvbnMgd2l0aCBjb25mbGljdGluZyBvcHRpb24gc3RyaW5ncyBhcmUKQEAgLTc2MCwxMSArODM5LDExIEBACiAgICAgICBJbmRlbnRlZEhlbHBGb3JtYXR0ZXIgYW5kIFRpdGxlZEhlbHBGb3JtYXR0ZXIuCiAKICAgIGBgYWRkX2hlbHBfb3B0aW9uYGAgKGRlZmF1bHQ6IGBgVHJ1ZWBgKQotICAgICAgSWYgdHJ1ZSwgOm1vZDpgb3B0cGFyc2VgIHdpbGwgYWRkIGEgaGVscCBvcHRpb24gKHdpdGggb3B0aW9uIHN0cmluZ3MgYGAiLWgiYGAKLSAgICAgIGFuZCBgYCItLWhlbHAiYGApIHRvIHRoZSBwYXJzZXIuCisgICAgICBJZiB0cnVlLCA6bW9kOmBvcHRwYXJzZWAgd2lsbCBhZGQgYSBoZWxwIG9wdGlvbiAod2l0aCBvcHRpb24gc3RyaW5ncyBgYC1oYGAKKyAgICAgIGFuZCBgYC0taGVscGBgKSB0byB0aGUgcGFyc2VyLgogCiAgICBgYHByb2dgYAotICAgICAgVGhlIHN0cmluZyB0byB1c2Ugd2hlbiBleHBhbmRpbmcgYGAiJXByb2ciYGAgaW4gYGB1c2FnZWBgIGFuZCBgYHZlcnNpb25gYAorICAgICAgVGhlIHN0cmluZyB0byB1c2Ugd2hlbiBleHBhbmRpbmcgYGAlcHJvZ2BgIGluIGBgdXNhZ2VgYCBhbmQgYGB2ZXJzaW9uYGAKICAgICAgIGluc3RlYWQgb2YgYGBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKWBgLgogCiAgICBgYGVwaWxvZ2BgIChkZWZhdWx0OiBgYE5vbmVgYCkKQEAgLTgwOCw3ICs4ODcsNyBAQAogXl5eXl5eXl5eXl5eXl5eXgogCiBFYWNoIE9wdGlvbiBpbnN0YW5jZSByZXByZXNlbnRzIGEgc2V0IG9mIHN5bm9ueW1vdXMgY29tbWFuZC1saW5lIG9wdGlvbiBzdHJpbmdzLAotZS5nLiA6b3B0aW9uOmAtZmAgYW5kIDpvcHRpb246YC0tZmlsZWAuICBZb3UgY2FuIHNwZWNpZnkgYW55IG51bWJlciBvZiBzaG9ydCBvcgorZS5nLiBgYC1mYGAgYW5kIGBgLS1maWxlYGAuICBZb3UgY2FuIHNwZWNpZnkgYW55IG51bWJlciBvZiBzaG9ydCBvcgogbG9uZyBvcHRpb24gc3RyaW5ncywgYnV0IHlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIG92ZXJhbGwgb3B0aW9uIHN0cmluZy4KIAogVGhlIGNhbm9uaWNhbCB3YXkgdG8gY3JlYXRlIGFuIDpjbGFzczpgT3B0aW9uYCBpbnN0YW5jZSBpcyB3aXRoIHRoZQpAQCAtOTcxLDcgKzEwNTAsNyBAQAogLi4gYXR0cmlidXRlOjogT3B0aW9uLmhlbHAKIAogICAgSGVscCB0ZXh0IHRvIHByaW50IGZvciB0aGlzIG9wdGlvbiB3aGVuIGxpc3RpbmcgYWxsIGF2YWlsYWJsZSBvcHRpb25zIGFmdGVyCi0gICB0aGUgdXNlciBzdXBwbGllcyBhIDphdHRyOmB+T3B0aW9uLmhlbHBgIG9wdGlvbiAoc3VjaCBhcyBgYCItLWhlbHAiYGApLiAgSWYKKyAgIHRoZSB1c2VyIHN1cHBsaWVzIGEgOmF0dHI6YH5PcHRpb24uaGVscGAgb3B0aW9uIChzdWNoIGFzIGBgLS1oZWxwYGApLiAgSWYKICAgIG5vIGhlbHAgdGV4dCBpcyBzdXBwbGllZCwgdGhlIG9wdGlvbiB3aWxsIGJlIGxpc3RlZCB3aXRob3V0IGhlbHAgdGV4dC4gIFRvCiAgICBoaWRlIHRoaXMgb3B0aW9uLCB1c2UgdGhlIHNwZWNpYWwgdmFsdWUgOmRhdGE6YG9wdHBhcnNlLlNVUFBSRVNTX0hFTFBgLgogCkBAIC0xMDA5LDkgKzEwODgsOSBAQAogICBJZiA6YXR0cjpgfk9wdGlvbi50eXBlYCBpcyBub3Qgc3VwcGxpZWQsIGl0IGRlZmF1bHRzIHRvIGBgInN0cmluZyJgYC4KIAogICBJZiA6YXR0cjpgfk9wdGlvbi5kZXN0YCBpcyBub3Qgc3VwcGxpZWQsIDptb2Q6YG9wdHBhcnNlYCBkZXJpdmVzIGEgZGVzdGluYXRpb24KLSAgZnJvbSB0aGUgZmlyc3QgbG9uZyBvcHRpb24gc3RyaW5nIChlLmcuLCBgYCItLWZvby1iYXIiYGAgaW1wbGllcworICBmcm9tIHRoZSBmaXJzdCBsb25nIG9wdGlvbiBzdHJpbmcgKGUuZy4sIGBgLS1mb28tYmFyYGAgaW1wbGllcwogICBgYGZvb19iYXJgYCkuIElmIHRoZXJlIGFyZSBubyBsb25nIG9wdGlvbiBzdHJpbmdzLCA6bW9kOmBvcHRwYXJzZWAgZGVyaXZlcyBhCi0gIGRlc3RpbmF0aW9uIGZyb20gdGhlIGZpcnN0IHNob3J0IG9wdGlvbiBzdHJpbmcgKGUuZy4sIGBgIi1mImBgIGltcGxpZXMgYGBmYGApLgorICBkZXN0aW5hdGlvbiBmcm9tIHRoZSBmaXJzdCBzaG9ydCBvcHRpb24gc3RyaW5nIChlLmcuLCBgYC1mYGAgaW1wbGllcyBgYGZgYCkuCiAKICAgRXhhbXBsZTo6CiAKQEAgLTEwNDIsNyArMTEyMSw3IEBACiAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLW5vaXN5IiwKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9jb25zdCIsIGNvbnN0PTIsIGRlc3Q9InZlcmJvc2UiKQogCi0gIElmIGBgIi0tbm9pc3kiYGAgaXMgc2VlbiwgOm1vZDpgb3B0cGFyc2VgIHdpbGwgc2V0ICA6OgorICBJZiBgYC0tbm9pc3lgYCBpcyBzZWVuLCA6bW9kOmBvcHRwYXJzZWAgd2lsbCBzZXQgIDo6CiAKICAgICAgb3B0aW9ucy52ZXJib3NlID0gMgogCkBAIC0xMDc3LDEzICsxMTU2LDEzIEBACiAKICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdHJhY2tzIiwgYWN0aW9uPSJhcHBlbmQiLCB0eXBlPSJpbnQiKQogCi0gIElmIGBgIi10MyJgYCBpcyBzZWVuIG9uIHRoZSBjb21tYW5kLWxpbmUsIDptb2Q6YG9wdHBhcnNlYCBkb2VzIHRoZSBlcXVpdmFsZW50CisgIElmIGBgLXQzYGAgaXMgc2VlbiBvbiB0aGUgY29tbWFuZC1saW5lLCA6bW9kOmBvcHRwYXJzZWAgZG9lcyB0aGUgZXF1aXZhbGVudAogICBvZjo6CiAKICAgICAgb3B0aW9ucy50cmFja3MgPSBbXQogICAgICBvcHRpb25zLnRyYWNrcy5hcHBlbmQoaW50KCIzIikpCiAKLSAgSWYsIGEgbGl0dGxlIGxhdGVyIG9uLCBgYCItLXRyYWNrcz00ImBgIGlzIHNlZW4sIGl0IGRvZXM6OgorICBJZiwgYSBsaXR0bGUgbGF0ZXIgb24sIGBgLS10cmFja3M9NGBgIGlzIHNlZW4sIGl0IGRvZXM6OgogCiAgICAgIG9wdGlvbnMudHJhY2tzLmFwcGVuZChpbnQoIjQiKSkKIApAQCAtMTEwNSwxMyArMTE4NCwxMyBAQAogCiAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdiIsIGFjdGlvbj0iY291bnQiLCBkZXN0PSJ2ZXJib3NpdHkiKQogCi0gIFRoZSBmaXJzdCB0aW1lIGBgIi12ImBgIGlzIHNlZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgOm1vZDpgb3B0cGFyc2VgIGRvZXMgdGhlCisgIFRoZSBmaXJzdCB0aW1lIGBgLXZgYCBpcyBzZWVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIDptb2Q6YG9wdHBhcnNlYCBkb2VzIHRoZQogICBlcXVpdmFsZW50IG9mOjoKIAogICAgICBvcHRpb25zLnZlcmJvc2l0eSA9IDAKICAgICAgb3B0aW9ucy52ZXJib3NpdHkgKz0gMQogCi0gIEV2ZXJ5IHN1YnNlcXVlbnQgb2NjdXJyZW5jZSBvZiBgYCItdiJgYCByZXN1bHRzIGluICA6OgorICBFdmVyeSBzdWJzZXF1ZW50IG9jY3VycmVuY2Ugb2YgYGAtdmBgIHJlc3VsdHMgaW4gIDo6CiAKICAgICAgb3B0aW9ucy52ZXJib3NpdHkgKz0gMQogCkBAIC0xMTU0LDE1ICsxMjMzLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IklucHV0IGZpbGUgdG8gcmVhZCBkYXRhIGZyb20iKQogICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1zZWNyZXQiLCBoZWxwPVNVUFBSRVNTX0hFTFApCiAKLSAgSWYgOm1vZDpgb3B0cGFyc2VgIHNlZXMgZWl0aGVyIGBgIi1oImBgIG9yIGBgIi0taGVscCJgYCBvbiB0aGUgY29tbWFuZCBsaW5lLAorICBJZiA6bW9kOmBvcHRwYXJzZWAgc2VlcyBlaXRoZXIgYGAtaGBgIG9yIGBgLS1oZWxwYGAgb24gdGhlIGNvbW1hbmQgbGluZSwKICAgaXQgd2lsbCBwcmludCBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIGhlbHAgbWVzc2FnZSB0byBzdGRvdXQgKGFzc3VtaW5nCiAgIGBgc3lzLmFyZ3ZbMF1gYCBpcyBgYCJmb28ucHkiYGApOgogCiAgIC4uIGNvZGUtYmxvY2s6OiB0ZXh0CiAKLSAgICAgdXNhZ2U6IGZvby5weSBbb3B0aW9uc10KKyAgICAgVXNhZ2U6IGZvby5weSBbb3B0aW9uc10KIAotICAgICBvcHRpb25zOgorICAgICBPcHRpb25zOgogICAgICAgIC1oLCAtLWhlbHAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKICAgICAgICAtdiAgICAgICAgICAgICAgICBCZSBtb2RlcmF0ZWx5IHZlcmJvc2UKICAgICAgICAtLWZpbGU9RklMRU5BTUUgICBJbnB1dCBmaWxlIHRvIHJlYWQgZGF0YSBmcm9tCkBAIC0xMjExLDcgKzEyOTAsNyBAQAogOmZ1bmM6YGZsb2F0YCBhbmQgOmZ1bmM6YGNvbXBsZXhgLCB3aXRoIHNpbWlsYXIgZXJyb3ItaGFuZGxpbmcuCiAKIGBgImNob2ljZSJgYCBvcHRpb25zIGFyZSBhIHN1YnR5cGUgb2YgYGAic3RyaW5nImBgIG9wdGlvbnMuICBUaGUKLTphdHRyOmB+T3B0aW9uLmNob2ljZXNgYCBvcHRpb24gYXR0cmlidXRlIChhIHNlcXVlbmNlIG9mIHN0cmluZ3MpIGRlZmluZXMgdGhlCis6YXR0cjpgfk9wdGlvbi5jaG9pY2VzYCBvcHRpb24gYXR0cmlidXRlIChhIHNlcXVlbmNlIG9mIHN0cmluZ3MpIGRlZmluZXMgdGhlCiBzZXQgb2YgYWxsb3dlZCBvcHRpb24gYXJndW1lbnRzLiAgOmZ1bmM6YG9wdHBhcnNlLmNoZWNrX2Nob2ljZWAgY29tcGFyZXMKIHVzZXItc3VwcGxpZWQgb3B0aW9uIGFyZ3VtZW50cyBhZ2FpbnN0IHRoaXMgbWFzdGVyIGxpc3QgYW5kIHJhaXNlcwogOmV4YzpgT3B0aW9uVmFsdWVFcnJvcmAgaWYgYW4gaW52YWxpZCBzdHJpbmcgaXMgZ2l2ZW4uCkBAIC0xMjY4LDggKzEzNDcsOCBAQAogCiAuLiBtZXRob2Q6OiBPcHRpb25QYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCiAKLSAgIFNldCBwYXJzaW5nIHRvIHN0b3Agb24gdGhlIGZpcnN0IG5vbi1vcHRpb24uICBGb3IgZXhhbXBsZSwgaWYgYGAiLWEiYGAgYW5kCi0gICBgYCItYiJgYCBhcmUgYm90aCBzaW1wbGUgb3B0aW9ucyB0aGF0IHRha2Ugbm8gYXJndW1lbnRzLCA6bW9kOmBvcHRwYXJzZWAKKyAgIFNldCBwYXJzaW5nIHRvIHN0b3Agb24gdGhlIGZpcnN0IG5vbi1vcHRpb24uICBGb3IgZXhhbXBsZSwgaWYgYGAtYWBgIGFuZAorICAgYGAtYmBgIGFyZSBib3RoIHNpbXBsZSBvcHRpb25zIHRoYXQgdGFrZSBubyBhcmd1bWVudHMsIDptb2Q6YG9wdHBhcnNlYAogICAgbm9ybWFsbHkgYWNjZXB0cyB0aGlzIHN5bnRheDo6CiAKICAgICAgIHByb2cgLWEgYXJnMSAtYiBhcmcyCkBAIC0xMjk5LDcgKzEzNzgsNyBAQAogLi4gbWV0aG9kOjogT3B0aW9uUGFyc2VyLmhhc19vcHRpb24ob3B0X3N0cikKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIE9wdGlvblBhcnNlciBoYXMgYW4gb3B0aW9uIHdpdGggb3B0aW9uIHN0cmluZyAqb3B0X3N0cioKLSAgIChlLmcuLCBgYCItcSJgYCBvciBgYCItLXZlcmJvc2UiYGApLgorICAgKGUuZy4sIGBgLXFgYCBvciBgYC0tdmVyYm9zZWBgKS4KIAogLi4gbWV0aG9kOjogT3B0aW9uUGFyc2VyLnJlbW92ZV9vcHRpb24ob3B0X3N0cikKIApAQCAtMTM1MiwxMiArMTQzMSwxMiBAQAogICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tbm9pc3kiLCAuLi4sIGhlbHA9ImJlIG5vaXN5IikKIAogQXQgdGhpcyBwb2ludCwgOm1vZDpgb3B0cGFyc2VgIGRldGVjdHMgdGhhdCBhIHByZXZpb3VzbHktYWRkZWQgb3B0aW9uIGlzIGFscmVhZHkKLXVzaW5nIHRoZSBgYCItbiJgYCBvcHRpb24gc3RyaW5nLiAgU2luY2UgYGBjb25mbGljdF9oYW5kbGVyYGAgaXMgYGAicmVzb2x2ZSJgYCwKLWl0IHJlc29sdmVzIHRoZSBzaXR1YXRpb24gYnkgcmVtb3ZpbmcgYGAiLW4iYGAgZnJvbSB0aGUgZWFybGllciBvcHRpb24ncyBsaXN0IG9mCi1vcHRpb24gc3RyaW5ncy4gIE5vdyBgYCItLWRyeS1ydW4iYGAgaXMgdGhlIG9ubHkgd2F5IGZvciB0aGUgdXNlciB0byBhY3RpdmF0ZQordXNpbmcgdGhlIGBgLW5gYCBvcHRpb24gc3RyaW5nLiAgU2luY2UgYGBjb25mbGljdF9oYW5kbGVyYGAgaXMgYGAicmVzb2x2ZSJgYCwKK2l0IHJlc29sdmVzIHRoZSBzaXR1YXRpb24gYnkgcmVtb3ZpbmcgYGAtbmBgIGZyb20gdGhlIGVhcmxpZXIgb3B0aW9uJ3MgbGlzdCBvZgorb3B0aW9uIHN0cmluZ3MuICBOb3cgYGAtLWRyeS1ydW5gYCBpcyB0aGUgb25seSB3YXkgZm9yIHRoZSB1c2VyIHRvIGFjdGl2YXRlCiB0aGF0IG9wdGlvbi4gIElmIHRoZSB1c2VyIGFza3MgZm9yIGhlbHAsIHRoZSBoZWxwIG1lc3NhZ2Ugd2lsbCByZWZsZWN0IHRoYXQ6OgogCi0gICBvcHRpb25zOgorICAgT3B0aW9uczoKICAgICAgLS1kcnktcnVuICAgICBkbyBubyBoYXJtCiAgICAgIFsuLi5dCiAgICAgIC1uLCAtLW5vaXN5ICAgYmUgbm9pc3kKQEAgLTEzNzAsMTAgKzE0NDksMTAgQEAKIAogICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tZHJ5LXJ1biIsIC4uLiwgaGVscD0ibmV3IGRyeS1ydW4gb3B0aW9uIikKIAotQXQgdGhpcyBwb2ludCwgdGhlIG9yaWdpbmFsIDpvcHRpb246YC1uLy0tZHJ5LXJ1bmAgb3B0aW9uIGlzIG5vIGxvbmdlcgorQXQgdGhpcyBwb2ludCwgdGhlIG9yaWdpbmFsIGBgLW5gYC9gYC0tZHJ5LXJ1bmBgIG9wdGlvbiBpcyBubyBsb25nZXIKIGFjY2Vzc2libGUsIHNvIDptb2Q6YG9wdHBhcnNlYCByZW1vdmVzIGl0LCBsZWF2aW5nIHRoaXMgaGVscCB0ZXh0OjoKIAotICAgb3B0aW9uczoKKyAgIE9wdGlvbnM6CiAgICAgIFsuLi5dCiAgICAgIC1uLCAtLW5vaXN5ICAgYmUgbm9pc3kKICAgICAgLS1kcnktcnVuICAgICBuZXcgZHJ5LXJ1biBvcHRpb24KQEAgLTE0MDgsNyArMTQ4Nyw3IEBACiAuLiBtZXRob2Q6OiBPcHRpb25QYXJzZXIucHJpbnRfdXNhZ2UoZmlsZT1Ob25lKQogCiAgICBQcmludCB0aGUgdXNhZ2UgbWVzc2FnZSBmb3IgdGhlIGN1cnJlbnQgcHJvZ3JhbSAoYGBzZWxmLnVzYWdlYGApIHRvICpmaWxlKgotICAgKGRlZmF1bHQgc3Rkb3V0KS4gIEFueSBvY2N1cnJlbmNlIG9mIHRoZSBzdHJpbmcgYGAiJXByb2ciYGAgaW4gYGBzZWxmLnVzYWdlYGAKKyAgIChkZWZhdWx0IHN0ZG91dCkuICBBbnkgb2NjdXJyZW5jZSBvZiB0aGUgc3RyaW5nIGBgJXByb2dgYCBpbiBgYHNlbGYudXNhZ2VgYAogICAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBwcm9ncmFtLiAgRG9lcyBub3RoaW5nIGlmCiAgICBgYHNlbGYudXNhZ2VgYCBpcyBlbXB0eSBvciBub3QgZGVmaW5lZC4KIApAQCAtMTQ3Miw5ICsxNTUxLDkgQEAKIAogYGBjYWxsYmFja2BgIGlzIGEgZnVuY3Rpb24gKG9yIG90aGVyIGNhbGxhYmxlIG9iamVjdCksIHNvIHlvdSBtdXN0IGhhdmUgYWxyZWFkeQogZGVmaW5lZCBgYG15X2NhbGxiYWNrKClgYCB3aGVuIHlvdSBjcmVhdGUgdGhpcyBjYWxsYmFjayBvcHRpb24uIEluIHRoaXMgc2ltcGxlCi1jYXNlLCA6bW9kOmBvcHRwYXJzZWAgZG9lc24ndCBldmVuIGtub3cgaWYgOm9wdGlvbjpgLWNgIHRha2VzIGFueSBhcmd1bWVudHMsCitjYXNlLCA6bW9kOmBvcHRwYXJzZWAgZG9lc24ndCBldmVuIGtub3cgaWYgYGAtY2BgIHRha2VzIGFueSBhcmd1bWVudHMsCiB3aGljaCB1c3VhbGx5IG1lYW5zIHRoYXQgdGhlIG9wdGlvbiB0YWtlcyBubyBhcmd1bWVudHMtLS10aGUgbWVyZSBwcmVzZW5jZSBvZgotOm9wdGlvbjpgLWNgIG9uIHRoZSBjb21tYW5kLWxpbmUgaXMgYWxsIGl0IG5lZWRzIHRvIGtub3cuICBJbiBzb21lCitgYC1jYGAgb24gdGhlIGNvbW1hbmQtbGluZSBpcyBhbGwgaXQgbmVlZHMgdG8ga25vdy4gIEluIHNvbWUKIGNpcmN1bXN0YW5jZXMsIHRob3VnaCwgeW91IG1pZ2h0IHdhbnQgeW91ciBjYWxsYmFjayB0byBjb25zdW1lIGFuIGFyYml0cmFyeQogbnVtYmVyIG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuICBUaGlzIGlzIHdoZXJlIHdyaXRpbmcgY2FsbGJhY2tzIGdldHMgdHJpY2t5OwogaXQncyBjb3ZlcmVkIGxhdGVyIGluIHRoaXMgc2VjdGlvbi4KQEAgLTE1MjcsOCArMTYwNiw4IEBACiBgYG9wdF9zdHJgYAogICAgaXMgdGhlIG9wdGlvbiBzdHJpbmcgc2VlbiBvbiB0aGUgY29tbWFuZC1saW5lIHRoYXQncyB0cmlnZ2VyaW5nIHRoZSBjYWxsYmFjay4KICAgIChJZiBhbiBhYmJyZXZpYXRlZCBsb25nIG9wdGlvbiB3YXMgdXNlZCwgYGBvcHRfc3RyYGAgd2lsbCBiZSB0aGUgZnVsbCwKLSAgIGNhbm9uaWNhbCBvcHRpb24gc3RyaW5nLS0tZS5nLiBpZiB0aGUgdXNlciBwdXRzIGBgIi0tZm9vImBgIG9uIHRoZQotICAgY29tbWFuZC1saW5lIGFzIGFuIGFiYnJldmlhdGlvbiBmb3IgYGAiLS1mb29iYXIiYGAsIHRoZW4gYGBvcHRfc3RyYGAgd2lsbCBiZQorICAgY2Fub25pY2FsIG9wdGlvbiBzdHJpbmctLS1lLmcuIGlmIHRoZSB1c2VyIHB1dHMgYGAtLWZvb2BgIG9uIHRoZQorICAgY29tbWFuZC1saW5lIGFzIGFuIGFiYnJldmlhdGlvbiBmb3IgYGAtLWZvb2JhcmBgLCB0aGVuIGBgb3B0X3N0cmBgIHdpbGwgYmUKICAgIGBgIi0tZm9vYmFyImBgLikKIAogYGB2YWx1ZWBgCkBAIC0xNjAzLDggKzE2ODIsOCBAQAogQ2FsbGJhY2sgZXhhbXBsZSAyOiBjaGVjayBvcHRpb24gb3JkZXIKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLUhlcmUncyBhIHNsaWdodGx5IG1vcmUgaW50ZXJlc3RpbmcgZXhhbXBsZTogcmVjb3JkIHRoZSBmYWN0IHRoYXQgYGAiLWEiYGAgaXMKLXNlZW4sIGJ1dCBibG93IHVwIGlmIGl0IGNvbWVzIGFmdGVyIGBgIi1iImBgIGluIHRoZSBjb21tYW5kLWxpbmUuICA6OgorSGVyZSdzIGEgc2xpZ2h0bHkgbW9yZSBpbnRlcmVzdGluZyBleGFtcGxlOiByZWNvcmQgdGhlIGZhY3QgdGhhdCBgYC1hYGAgaXMKK3NlZW4sIGJ1dCBibG93IHVwIGlmIGl0IGNvbWVzIGFmdGVyIGBgLWJgYCBpbiB0aGUgY29tbWFuZC1saW5lLiAgOjoKIAogICAgZGVmIGNoZWNrX29yZGVyKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CiAgICAgICAgaWYgcGFyc2VyLnZhbHVlcy5iOgpAQCAtMTYyMSw3ICsxNzAwLDcgQEAKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogSWYgeW91IHdhbnQgdG8gcmUtdXNlIHRoaXMgY2FsbGJhY2sgZm9yIHNldmVyYWwgc2ltaWxhciBvcHRpb25zIChzZXQgYSBmbGFnLCBidXQKLWJsb3cgdXAgaWYgYGAiLWIiYGAgaGFzIGFscmVhZHkgYmVlbiBzZWVuKSwgaXQgbmVlZHMgYSBiaXQgb2Ygd29yazogdGhlIGVycm9yCitibG93IHVwIGlmIGBgLWJgYCBoYXMgYWxyZWFkeSBiZWVuIHNlZW4pLCBpdCBuZWVkcyBhIGJpdCBvZiB3b3JrOiB0aGUgZXJyb3IKIG1lc3NhZ2UgYW5kIHRoZSBmbGFnIHRoYXQgaXQgc2V0cyBtdXN0IGJlIGdlbmVyYWxpemVkLiAgOjoKIAogICAgZGVmIGNoZWNrX29yZGVyKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CkBAIC0xNjkxLDE1ICsxNzcwLDE1IEBACiBidWlsdC1pbiBjYXBhYmlsaXRpZXMgZm9yIGl0LiAgQW5kIHlvdSBoYXZlIHRvIGRlYWwgd2l0aCBjZXJ0YWluIGludHJpY2FjaWVzIG9mCiBjb252ZW50aW9uYWwgVW5peCBjb21tYW5kLWxpbmUgcGFyc2luZyB0aGF0IDptb2Q6YG9wdHBhcnNlYCBub3JtYWxseSBoYW5kbGVzIGZvcgogeW91LiAgSW4gcGFydGljdWxhciwgY2FsbGJhY2tzIHNob3VsZCBpbXBsZW1lbnQgdGhlIGNvbnZlbnRpb25hbCBydWxlcyBmb3IgYmFyZQotYGAiLS0iYGAgYW5kIGBgIi0iYGAgYXJndW1lbnRzOgorYGAtLWBgIGFuZCBgYC1gYCBhcmd1bWVudHM6CiAKLSogZWl0aGVyIGBgIi0tImBgIG9yIGBgIi0iYGAgY2FuIGJlIG9wdGlvbiBhcmd1bWVudHMKKyogZWl0aGVyIGBgLS1gYCBvciBgYC1gYCBjYW4gYmUgb3B0aW9uIGFyZ3VtZW50cwogCi0qIGJhcmUgYGAiLS0iYGAgKGlmIG5vdCB0aGUgYXJndW1lbnQgdG8gc29tZSBvcHRpb24pOiBoYWx0IGNvbW1hbmQtbGluZQotICBwcm9jZXNzaW5nIGFuZCBkaXNjYXJkIHRoZSBgYCItLSJgYAorKiBiYXJlIGBgLS1gYCAoaWYgbm90IHRoZSBhcmd1bWVudCB0byBzb21lIG9wdGlvbik6IGhhbHQgY29tbWFuZC1saW5lCisgIHByb2Nlc3NpbmcgYW5kIGRpc2NhcmQgdGhlIGBgLS1gYAogCi0qIGJhcmUgYGAiLSJgYCAoaWYgbm90IHRoZSBhcmd1bWVudCB0byBzb21lIG9wdGlvbik6IGhhbHQgY29tbWFuZC1saW5lCi0gIHByb2Nlc3NpbmcgYnV0IGtlZXAgdGhlIGBgIi0iYGAgKGFwcGVuZCBpdCB0byBgYHBhcnNlci5sYXJnc2BgKQorKiBiYXJlIGBgLWBgIChpZiBub3QgdGhlIGFyZ3VtZW50IHRvIHNvbWUgb3B0aW9uKTogaGFsdCBjb21tYW5kLWxpbmUKKyAgcHJvY2Vzc2luZyBidXQga2VlcCB0aGUgYGAtYGAgKGFwcGVuZCBpdCB0byBgYHBhcnNlci5sYXJnc2BgKQogCiBJZiB5b3Ugd2FudCBhbiBvcHRpb24gdGhhdCB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsIHRoZXJlIGFyZQogc2V2ZXJhbCBzdWJ0bGUsIHRyaWNreSBpc3N1ZXMgdG8gd29ycnkgYWJvdXQuICBUaGUgZXhhY3QgaW1wbGVtZW50YXRpb24geW91CkBAIC0xNzcwLDcgKzE4NDksNyBAQAogICAgICAgZGVmIGNoZWNrX215dHlwZShvcHRpb24sIG9wdCwgdmFsdWUpCiAKICAgIHdoZXJlIGBgb3B0aW9uYGAgaXMgYW4gOmNsYXNzOmBPcHRpb25gIGluc3RhbmNlLCBgYG9wdGBgIGlzIGFuIG9wdGlvbiBzdHJpbmcKLSAgIChlLmcuLCBgYCItZiJgYCksIGFuZCBgYHZhbHVlYGAgaXMgdGhlIHN0cmluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgdGhhdCBtdXN0CisgICAoZS5nLiwgYGAtZmBgKSwgYW5kIGBgdmFsdWVgYCBpcyB0aGUgc3RyaW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZSB0aGF0IG11c3QKICAgIGJlIGNoZWNrZWQgYW5kIGNvbnZlcnRlZCB0byB5b3VyIGRlc2lyZWQgdHlwZS4gIGBgY2hlY2tfbXl0eXBlKClgYCBzaG91bGQKICAgIHJldHVybiBhbiBvYmplY3Qgb2YgdGhlIGh5cG90aGV0aWNhbCB0eXBlIGBgbXl0eXBlYGAuICBUaGUgdmFsdWUgcmV0dXJuZWQgYnkKICAgIGEgdHlwZS1jaGVja2luZyBmdW5jdGlvbiB3aWxsIHdpbmQgdXAgaW4gdGhlIE9wdGlvblZhbHVlcyBpbnN0YW5jZSByZXR1cm5lZApAQCAtMTg4Miw3ICsxOTYxLDcgQEAKIGBgImFwcGVuZCJgYCBhY3Rpb24sIGJ1dCBpbnN0ZWFkIG9mIHRha2luZyBhIHNpbmdsZSB2YWx1ZSBmcm9tIHRoZSBjb21tYW5kLWxpbmUKIGFuZCBhcHBlbmRpbmcgaXQgdG8gYW4gZXhpc3RpbmcgbGlzdCwgYGAiZXh0ZW5kImBgIHdpbGwgdGFrZSBtdWx0aXBsZSB2YWx1ZXMgaW4KIGEgc2luZ2xlIGNvbW1hLWRlbGltaXRlZCBzdHJpbmcsIGFuZCBleHRlbmQgYW4gZXhpc3RpbmcgbGlzdCB3aXRoIHRoZW0uICBUaGF0Ci1pcywgaWYgYGAiLS1uYW1lcyJgYCBpcyBhbiBgYCJleHRlbmQiYGAgb3B0aW9uIG9mIHR5cGUgYGAic3RyaW5nImBgLCB0aGUgY29tbWFuZAoraXMsIGlmIGBgLS1uYW1lc2BgIGlzIGFuIGBgImV4dGVuZCJgYCBvcHRpb24gb2YgdHlwZSBgYCJzdHJpbmciYGAsIHRoZSBjb21tYW5kCiBsaW5lIDo6CiAKICAgIC0tbmFtZXM9Zm9vLGJhciAtLW5hbWVzIGJsYWggLS1uYW1lcyBkaW5nLGRvbmcKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0IGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKaW5kZXggYWU1NWRkOC4uNDg2N2U4YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKQEAgLTI2OCwxNCArMjY4LDE0IEBACiAKIC4uIGZ1bmN0aW9uOjogc3BsaXQocGF0aCkKIAotICAgU3BsaXQgdGhlIHBhdGhuYW1lICpwYXRoKiBpbnRvIGEgcGFpciwgYGAoaGVhZCwgdGFpbClgYCB3aGVyZSAqdGFpbCogaXMgdGhlIGxhc3QKLSAgIHBhdGhuYW1lIGNvbXBvbmVudCBhbmQgKmhlYWQqIGlzIGV2ZXJ5dGhpbmcgbGVhZGluZyB1cCB0byB0aGF0LiAgVGhlICp0YWlsKiBwYXJ0Ci0gICB3aWxsIG5ldmVyIGNvbnRhaW4gYSBzbGFzaDsgaWYgKnBhdGgqIGVuZHMgaW4gYSBzbGFzaCwgKnRhaWwqIHdpbGwgYmUgZW1wdHkuICBJZgotICAgdGhlcmUgaXMgbm8gc2xhc2ggaW4gKnBhdGgqLCAqaGVhZCogd2lsbCBiZSBlbXB0eS4gIElmICpwYXRoKiBpcyBlbXB0eSwgYm90aAotICAgKmhlYWQqIGFuZCAqdGFpbCogYXJlIGVtcHR5LiAgVHJhaWxpbmcgc2xhc2hlcyBhcmUgc3RyaXBwZWQgZnJvbSAqaGVhZCogdW5sZXNzCi0gICBpdCBpcyB0aGUgcm9vdCAob25lIG9yIG1vcmUgc2xhc2hlcyBvbmx5KS4gIEluIG5lYXJseSBhbGwgY2FzZXMsIGBgam9pbihoZWFkLAotICAgdGFpbClgYCBlcXVhbHMgKnBhdGgqICh0aGUgb25seSBleGNlcHRpb24gYmVpbmcgd2hlbiB0aGVyZSB3ZXJlIG11bHRpcGxlIHNsYXNoZXMKLSAgIHNlcGFyYXRpbmcgKmhlYWQqIGZyb20gKnRhaWwqKS4KKyAgIFNwbGl0IHRoZSBwYXRobmFtZSAqcGF0aCogaW50byBhIHBhaXIsIGBgKGhlYWQsIHRhaWwpYGAgd2hlcmUgKnRhaWwqIGlzIHRoZQorICAgbGFzdCBwYXRobmFtZSBjb21wb25lbnQgYW5kICpoZWFkKiBpcyBldmVyeXRoaW5nIGxlYWRpbmcgdXAgdG8gdGhhdC4gIFRoZQorICAgKnRhaWwqIHBhcnQgd2lsbCBuZXZlciBjb250YWluIGEgc2xhc2g7IGlmICpwYXRoKiBlbmRzIGluIGEgc2xhc2gsICp0YWlsKgorICAgd2lsbCBiZSBlbXB0eS4gIElmIHRoZXJlIGlzIG5vIHNsYXNoIGluICpwYXRoKiwgKmhlYWQqIHdpbGwgYmUgZW1wdHkuICBJZgorICAgKnBhdGgqIGlzIGVtcHR5LCBib3RoICpoZWFkKiBhbmQgKnRhaWwqIGFyZSBlbXB0eS4gIFRyYWlsaW5nIHNsYXNoZXMgYXJlCisgICBzdHJpcHBlZCBmcm9tICpoZWFkKiB1bmxlc3MgaXQgaXMgdGhlIHJvb3QgKG9uZSBvciBtb3JlIHNsYXNoZXMgb25seSkuICBJbgorICAgYWxsIGNhc2VzLCBgYGpvaW4oaGVhZCwgdGFpbClgYCByZXR1cm5zIGEgcGF0aCB0byB0aGUgc2FtZSBsb2NhdGlvbiBhcyAqcGF0aCoKKyAgIChidXQgdGhlIHN0cmluZ3MgbWF5IGRpZmZlcikuCiAKIAogLi4gZnVuY3Rpb246OiBzcGxpdGRyaXZlKHBhdGgpCkBAIC0zMzcsOCArMzM3LDcgQEAKIC4uIGRhdGE6OiBzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcwogCiAgICBUcnVlIGlmIGFyYml0cmFyeSBVbmljb2RlIHN0cmluZ3MgY2FuIGJlIHVzZWQgYXMgZmlsZSBuYW1lcyAod2l0aGluIGxpbWl0YXRpb25zCi0gICBpbXBvc2VkIGJ5IHRoZSBmaWxlIHN5c3RlbSksIGFuZCBpZiA6ZnVuYzpgb3MubGlzdGRpcmAgcmV0dXJucyBVbmljb2RlIHN0cmluZ3MKLSAgIGZvciBhIFVuaWNvZGUgYXJndW1lbnQuCisgICBpbXBvc2VkIGJ5IHRoZSBmaWxlIHN5c3RlbSkuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMwogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcy5yc3QgYi9Eb2MvbGlicmFyeS9vcy5yc3QKaW5kZXggNWIzYTkyMi4uZTk3Y2Y4MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L29zLnJzdApAQCAtNTAsNyArNTAsNyBAQAogLi4gZGF0YTo6IG5hbWUKIAogICAgVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW50IG1vZHVsZSBpbXBvcnRlZC4gIFRoZSBmb2xsb3dpbmcKLSAgIG5hbWVzIGhhdmUgY3VycmVudGx5IGJlZW4gcmVnaXN0ZXJlZDogYGAncG9zaXgnYGAsIGBgJ250J2BgLCBgYCdtYWMnYGAsCisgICBuYW1lcyBoYXZlIGN1cnJlbnRseSBiZWVuIHJlZ2lzdGVyZWQ6IGBgJ3Bvc2l4J2BgLCBgYCdudCdgYCwKICAgIGBgJ29zMidgYCwgYGAnY2UnYGAsIGBgJ2phdmEnYGAsIGBgJ3Jpc2NvcydgYC4KIAogCkBAIC0xNTEsNiArMTUxLDE3IEBACiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAorLi4gZnVuY3Rpb246OiBpbml0Z3JvdXBzKHVzZXJuYW1lLCBnaWQpCisKKyAgIENhbGwgdGhlIHN5c3RlbSBpbml0Z3JvdXBzKCkgdG8gaW5pdGlhbGl6ZSB0aGUgZ3JvdXAgYWNjZXNzIGxpc3Qgd2l0aCBhbGwgb2YKKyAgIHRoZSBncm91cHMgb2Ygd2hpY2ggdGhlIHNwZWNpZmllZCB1c2VybmFtZSBpcyBhIG1lbWJlciwgcGx1cyB0aGUgc3BlY2lmaWVkCisgICBncm91cCBpZC4KKworICAgQXZhaWxhYmlsaXR5OiBVbml4LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBmdW5jdGlvbjo6IGdldGxvZ2luKCkKIAogICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB1c2VyIGxvZ2dlZCBpbiBvbiB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgb2YgdGhlCkBAIC0xOTksNiArMjEwLDI2IEBACiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAorLi4gZnVuY3Rpb246OiBnZXRyZXN1aWQoKQorCisgICBSZXR1cm4gYSB0dXBsZSAocnVpZCwgZXVpZCwgc3VpZCkgZGVub3RpbmcgdGhlIGN1cnJlbnQgcHJvY2VzcydzCisgICByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCB1c2VyIGlkcy4KKworICAgQXZhaWxhYmlsaXR5OiBVbml4LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisuLiBmdW5jdGlvbjo6IGdldHJlc2dpZCgpCisKKyAgIFJldHVybiBhIHR1cGxlIChyZ2lkLCBlZ2lkLCBzZ2lkKSBkZW5vdGluZyB0aGUgY3VycmVudCBwcm9jZXNzJ3MKKyAgIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIGdyb3VwIGlkcy4KKworICAgQXZhaWxhYmlsaXR5OiBVbml4LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBmdW5jdGlvbjo6IGdldHVpZCgpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiB1c2VyOyBpZApAQCAtMjg2LDE2ICszMTcsMzQgQEAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCi0uLiBmdW5jdGlvbjo6IHNldHJldWlkKHJ1aWQsIGV1aWQpCisuLiBmdW5jdGlvbjo6IHNldHJlZ2lkKHJnaWQsIGVnaWQpCiAKLSAgIFNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCBhbmQgZWZmZWN0aXZlIHVzZXIgaWRzLgorICAgU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsIGFuZCBlZmZlY3RpdmUgZ3JvdXAgaWRzLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAotLi4gZnVuY3Rpb246OiBzZXRyZWdpZChyZ2lkLCBlZ2lkKQorLi4gZnVuY3Rpb246OiBzZXRyZXNnaWQocmdpZCwgZWdpZCwgc2dpZCkKIAotICAgU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsIGFuZCBlZmZlY3RpdmUgZ3JvdXAgaWRzLgorICAgU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCBncm91cCBpZHMuCisKKyAgIEF2YWlsYWJpbGl0eTogVW5peC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gZnVuY3Rpb246OiBzZXRyZXN1aWQocnVpZCwgZXVpZCwgc3VpZCkKKworICAgU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCB1c2VyIGlkcy4KKworICAgQXZhaWxhYmlsaXR5OiBVbml4LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisuLiBmdW5jdGlvbjo6IHNldHJldWlkKHJ1aWQsIGV1aWQpCisKKyAgIFNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCBhbmQgZWZmZWN0aXZlIHVzZXIgaWRzLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKQEAgLTYyNSw3ICs2NzQsNyBAQAogCiAuLiBmdW5jdGlvbjo6IGZzdGF0KGZkKQogCi0gICBSZXR1cm4gc3RhdHVzIGZvciBmaWxlIGRlc2NyaXB0b3IgKmZkKiwgbGlrZSA6ZnVuYzpgc3RhdGAuCisgICBSZXR1cm4gc3RhdHVzIGZvciBmaWxlIGRlc2NyaXB0b3IgKmZkKiwgbGlrZSA6ZnVuYzpgfm9zLnN0YXRgLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKQEAgLTY4Miw3ICs3MzEsOSBAQAogICAgICAgICAgIFNFRUtfRU5ECiAKICAgIFBhcmFtZXRlcnMgdG8gdGhlIDpmdW5jOmBsc2Vla2AgZnVuY3Rpb24uIFRoZWlyIHZhbHVlcyBhcmUgMCwgMSwgYW5kIDIsCi0gICByZXNwZWN0aXZlbHkuIEF2YWlsYWJpbGl0eTogV2luZG93cywgVW5peC4KKyAgIHJlc3BlY3RpdmVseS4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLCBVbml4LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKIApAQCAtMTA2Myw5ICsxMTE0LDEwIEBACiAKIC4uIGZ1bmN0aW9uOjogbHN0YXQocGF0aCkKIAotICAgTGlrZSA6ZnVuYzpgc3RhdGAsIGJ1dCBkbyBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLiAgVGhpcyBpcyBhbiBhbGlhcyBmb3IKLSAgIDpmdW5jOmBzdGF0YCBvbiBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcywgc3VjaCBhcwotICAgV2luZG93cy4KKyAgIFBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YgYW4gOmNmdW5jOmBsc3RhdGAgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguCisgICBTaW1pbGFyIHRvIDpmdW5jOmB+b3Muc3RhdGAsIGJ1dCBkb2VzIG5vdCBmb2xsb3cgc3ltYm9saWMgbGlua3MuICBPbgorICAgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgc3ltYm9saWMgbGlua3MsIHRoaXMgaXMgYW4gYWxpYXMgZm9yCisgICA6ZnVuYzpgfm9zLnN0YXRgLgogCiAKIC4uIGZ1bmN0aW9uOjogbWtmaWZvKHBhdGhbLCBtb2RlXSkKQEAgLTExMjQsNyArMTE3Niw4IEBACiAKICAgIENyZWF0ZSBhIGRpcmVjdG9yeSBuYW1lZCAqcGF0aCogd2l0aCBudW1lcmljIG1vZGUgKm1vZGUqLiBUaGUgZGVmYXVsdCAqbW9kZSogaXMKICAgIGBgMDc3N2BgIChvY3RhbCkuICBPbiBzb21lIHN5c3RlbXMsICptb2RlKiBpcyBpZ25vcmVkLiAgV2hlcmUgaXQgaXMgdXNlZCwgdGhlCi0gICBjdXJyZW50IHVtYXNrIHZhbHVlIGlzIGZpcnN0IG1hc2tlZCBvdXQuCisgICBjdXJyZW50IHVtYXNrIHZhbHVlIGlzIGZpcnN0IG1hc2tlZCBvdXQuICBJZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLAorICAgOmV4YzpgT1NFcnJvcmAgaXMgcmFpc2VkLgogCiAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXM7IHNlZSB0aGUKICAgIDptb2Q6YHRlbXBmaWxlYCBtb2R1bGUncyA6ZnVuYzpgdGVtcGZpbGUubWtkdGVtcGAgZnVuY3Rpb24uCkBAIC0xMTM5LDcgKzExOTIsNyBAQAogICAgICAgc2luZ2xlOiBVTkMgcGF0aHM7IGFuZCBvcy5tYWtlZGlycygpCiAKICAgIFJlY3Vyc2l2ZSBkaXJlY3RvcnkgY3JlYXRpb24gZnVuY3Rpb24uICBMaWtlIDpmdW5jOmBta2RpcmAsIGJ1dCBtYWtlcyBhbGwKLSAgIGludGVybWVkaWF0ZS1sZXZlbCBkaXJlY3RvcmllcyBuZWVkZWQgdG8gY29udGFpbiB0aGUgbGVhZiBkaXJlY3RvcnkuICBUaHJvd3MgYW4KKyAgIGludGVybWVkaWF0ZS1sZXZlbCBkaXJlY3RvcmllcyBuZWVkZWQgdG8gY29udGFpbiB0aGUgbGVhZiBkaXJlY3RvcnkuICBSYWlzZXMgYW4KICAgIDpleGM6YGVycm9yYCBleGNlcHRpb24gaWYgdGhlIGxlYWYgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIG9yIGNhbm5vdCBiZQogICAgY3JlYXRlZC4gIFRoZSBkZWZhdWx0ICptb2RlKiBpcyBgYDA3NzdgYCAob2N0YWwpLiAgT24gc29tZSBzeXN0ZW1zLCAqbW9kZSogaXMKICAgIGlnbm9yZWQuIFdoZXJlIGl0IGlzIHVzZWQsIHRoZSBjdXJyZW50IHVtYXNrIHZhbHVlIGlzIGZpcnN0IG1hc2tlZCBvdXQuCkBAIC0xMjYyLDIzICsxMzE1LDIzIEBACiAKIC4uIGZ1bmN0aW9uOjogc3RhdChwYXRoKQogCi0gICBQZXJmb3JtIGEgOmNmdW5jOmBzdGF0YCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4KLSAgIG9iamVjdCB3aG9zZSBhdHRyaWJ1dGVzIGNvcnJlc3BvbmQgdG8gdGhlIG1lbWJlcnMgb2YgdGhlIDpjdHlwZTpgc3RhdGAKLSAgIHN0cnVjdHVyZSwgbmFtZWx5OiA6YXR0cjpgc3RfbW9kZWAgKHByb3RlY3Rpb24gYml0cyksIDphdHRyOmBzdF9pbm9gIChpbm9kZQotICAgbnVtYmVyKSwgOmF0dHI6YHN0X2RldmAgKGRldmljZSksIDphdHRyOmBzdF9ubGlua2AgKG51bWJlciBvZiBoYXJkIGxpbmtzKSwKLSAgIDphdHRyOmBzdF91aWRgICh1c2VyIGlkIG9mIG93bmVyKSwgOmF0dHI6YHN0X2dpZGAgKGdyb3VwIGlkIG9mIG93bmVyKSwKLSAgIDphdHRyOmBzdF9zaXplYCAoc2l6ZSBvZiBmaWxlLCBpbiBieXRlcyksIDphdHRyOmBzdF9hdGltZWAgKHRpbWUgb2YgbW9zdCByZWNlbnQKLSAgIGFjY2VzcyksIDphdHRyOmBzdF9tdGltZWAgKHRpbWUgb2YgbW9zdCByZWNlbnQgY29udGVudCBtb2RpZmljYXRpb24pLAotICAgOmF0dHI6YHN0X2N0aW1lYCAocGxhdGZvcm0gZGVwZW5kZW50OyB0aW1lIG9mIG1vc3QgcmVjZW50IG1ldGFkYXRhIGNoYW5nZSBvbgotICAgVW5peCwgb3IgdGhlIHRpbWUgb2YgY3JlYXRpb24gb24gV2luZG93cyk6OgorICAgUGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZiBhIDpjZnVuYzpgc3RhdGAgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguCisgICAoVGhpcyBmdW5jdGlvbiBmb2xsb3dzIHN5bWxpbmtzOyB0byBzdGF0IGEgc3ltbGluayB1c2UgOmZ1bmM6YGxzdGF0YC4pCiAKLSAgICAgID4+PiBpbXBvcnQgb3MKLSAgICAgID4+PiBzdGF0aW5mbyA9IG9zLnN0YXQoJ3NvbWVmaWxlLnR4dCcpCi0gICAgICA+Pj4gc3RhdGluZm8KLSAgICAgICgzMzE4OCwgNDIyNTExTCwgNzY5TCwgMSwgMTAzMiwgMTAwLCA5MjZMLCAxMTA1MDIyNjk4LDExMDUwMjI3MzIsIDExMDUwMjI3MzIpCi0gICAgICA+Pj4gc3RhdGluZm8uc3Rfc2l6ZQotICAgICAgOTI2TAotICAgICAgPj4+CisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIG9iamVjdCB3aG9zZSBhdHRyaWJ1dGVzIGNvcnJlc3BvbmQgdG8gdGhlIG1lbWJlcnMKKyAgIG9mIHRoZSA6Y3R5cGU6YHN0YXRgIHN0cnVjdHVyZSwgbmFtZWx5OgorCisgICAqIDphdHRyOmBzdF9tb2RlYCAtIHByb3RlY3Rpb24gYml0cywKKyAgICogOmF0dHI6YHN0X2lub2AgLSBpbm9kZSBudW1iZXIsCisgICAqIDphdHRyOmBzdF9kZXZgIC0gZGV2aWNlLAorICAgKiA6YXR0cjpgc3RfbmxpbmtgIC0gbnVtYmVyIG9mIGhhcmQgbGlua3MsCisgICAqIDphdHRyOmBzdF91aWRgIC0gdXNlciBpZCBvZiBvd25lciwKKyAgICogOmF0dHI6YHN0X2dpZGAgLSBncm91cCBpZCBvZiBvd25lciwKKyAgICogOmF0dHI6YHN0X3NpemVgIC0gc2l6ZSBvZiBmaWxlLCBpbiBieXRlcywKKyAgICogOmF0dHI6YHN0X2F0aW1lYCAtIHRpbWUgb2YgbW9zdCByZWNlbnQgYWNjZXNzLAorICAgKiA6YXR0cjpgc3RfbXRpbWVgIC0gdGltZSBvZiBtb3N0IHJlY2VudCBjb250ZW50IG1vZGlmaWNhdGlvbiwKKyAgICogOmF0dHI6YHN0X2N0aW1lYCAtIHBsYXRmb3JtIGRlcGVuZGVudDsgdGltZSBvZiBtb3N0IHJlY2VudCBtZXRhZGF0YSBjaGFuZ2Ugb24KKyAgICAgVW5peCwgb3IgdGhlIHRpbWUgb2YgY3JlYXRpb24gb24gV2luZG93cykKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjMKICAgICAgIElmIDpmdW5jOmBzdGF0X2Zsb2F0X3RpbWVzYCByZXR1cm5zIGBgVHJ1ZWBgLCB0aGUgdGltZSB2YWx1ZXMgYXJlIGZsb2F0cywgbWVhc3VyaW5nCkBAIC0xMjg3LDMxICsxMzQwLDMwIEBACiAgICAgICBkaXNjdXNzaW9uLgogCiAgICBPbiBzb21lIFVuaXggc3lzdGVtcyAoc3VjaCBhcyBMaW51eCksIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBtYXkgYWxzbyBiZQotICAgYXZhaWxhYmxlOiA6YXR0cjpgc3RfYmxvY2tzYCAobnVtYmVyIG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIGZpbGUpLAotICAgOmF0dHI6YHN0X2Jsa3NpemVgIChmaWxlc3lzdGVtIGJsb2Nrc2l6ZSksIDphdHRyOmBzdF9yZGV2YCAodHlwZSBvZiBkZXZpY2UgaWYgYW4KLSAgIGlub2RlIGRldmljZSkuIDphdHRyOmBzdF9mbGFnc2AgKHVzZXIgZGVmaW5lZCBmbGFncyBmb3IgZmlsZSkuCisgICBhdmFpbGFibGU6CisKKyAgICogOmF0dHI6YHN0X2Jsb2Nrc2AgLSBudW1iZXIgb2YgYmxvY2tzIGFsbG9jYXRlZCBmb3IgZmlsZQorICAgKiA6YXR0cjpgc3RfYmxrc2l6ZWAgLSBmaWxlc3lzdGVtIGJsb2Nrc2l6ZQorICAgKiA6YXR0cjpgc3RfcmRldmAgLSB0eXBlIG9mIGRldmljZSBpZiBhbiBpbm9kZSBkZXZpY2UKKyAgICogOmF0dHI6YHN0X2ZsYWdzYCAtIHVzZXIgZGVmaW5lZCBmbGFncyBmb3IgZmlsZQogCiAgICBPbiBvdGhlciBVbml4IHN5c3RlbXMgKHN1Y2ggYXMgRnJlZUJTRCksIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBtYXkgYmUKLSAgIGF2YWlsYWJsZSAoYnV0IG1heSBiZSBvbmx5IGZpbGxlZCBvdXQgaWYgcm9vdCB0cmllcyB0byB1c2UgdGhlbSk6IDphdHRyOmBzdF9nZW5gCi0gICAoZmlsZSBnZW5lcmF0aW9uIG51bWJlciksIDphdHRyOmBzdF9iaXJ0aHRpbWVgICh0aW1lIG9mIGZpbGUgY3JlYXRpb24pLgorICAgYXZhaWxhYmxlIChidXQgbWF5IGJlIG9ubHkgZmlsbGVkIG91dCBpZiByb290IHRyaWVzIHRvIHVzZSB0aGVtKToKKworICAgKiA6YXR0cjpgc3RfZ2VuYCAtIGZpbGUgZ2VuZXJhdGlvbiBudW1iZXIKKyAgICogOmF0dHI6YHN0X2JpcnRodGltZWAgLSB0aW1lIG9mIGZpbGUgY3JlYXRpb24KIAogICAgT24gTWFjIE9TIHN5c3RlbXMsIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBtYXkgYWxzbyBiZSBhdmFpbGFibGU6Ci0gICA6YXR0cjpgc3RfcnNpemVgLCA6YXR0cjpgc3RfY3JlYXRvcmAsIDphdHRyOmBzdF90eXBlYC4KIAotICAgT24gUklTQ09TIHN5c3RlbXMsIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgYWxzbyBhdmFpbGFibGU6IDphdHRyOmBzdF9mdHlwZWAKLSAgIChmaWxlIHR5cGUpLCA6YXR0cjpgc3RfYXR0cnNgIChhdHRyaWJ1dGVzKSwgOmF0dHI6YHN0X29idHlwZWAgKG9iamVjdCB0eXBlKS4KKyAgICogOmF0dHI6YHN0X3JzaXplYAorICAgKiA6YXR0cjpgc3RfY3JlYXRvcmAKKyAgICogOmF0dHI6YHN0X3R5cGVgCiAKLSAgIC4uIGluZGV4OjogbW9kdWxlOiBzdGF0CisgICBPbiBSSVNDT1Mgc3lzdGVtcywgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBhbHNvIGF2YWlsYWJsZToKIAotICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSByZXR1cm4gdmFsdWUgb2YgOmZ1bmM6YHN0YXRgIGlzIGFsc28gYWNjZXNzaWJsZQotICAgYXMgYSB0dXBsZSBvZiBhdCBsZWFzdCAxMCBpbnRlZ2VycyBnaXZpbmcgdGhlIG1vc3QgaW1wb3J0YW50IChhbmQgcG9ydGFibGUpCi0gICBtZW1iZXJzIG9mIHRoZSA6Y3R5cGU6YHN0YXRgIHN0cnVjdHVyZSwgaW4gdGhlIG9yZGVyIDphdHRyOmBzdF9tb2RlYCwKLSAgIDphdHRyOmBzdF9pbm9gLCA6YXR0cjpgc3RfZGV2YCwgOmF0dHI6YHN0X25saW5rYCwgOmF0dHI6YHN0X3VpZGAsCi0gICA6YXR0cjpgc3RfZ2lkYCwgOmF0dHI6YHN0X3NpemVgLCA6YXR0cjpgc3RfYXRpbWVgLCA6YXR0cjpgc3RfbXRpbWVgLAotICAgOmF0dHI6YHN0X2N0aW1lYC4gTW9yZSBpdGVtcyBtYXkgYmUgYWRkZWQgYXQgdGhlIGVuZCBieSBzb21lIGltcGxlbWVudGF0aW9ucy4KLSAgIFRoZSBzdGFuZGFyZCBtb2R1bGUgOm1vZDpgc3RhdGAgZGVmaW5lcyBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cyB0aGF0IGFyZSB1c2VmdWwKLSAgIGZvciBleHRyYWN0aW5nIGluZm9ybWF0aW9uIGZyb20gYSA6Y3R5cGU6YHN0YXRgIHN0cnVjdHVyZS4gKE9uIFdpbmRvd3MsIHNvbWUKLSAgIGl0ZW1zIGFyZSBmaWxsZWQgd2l0aCBkdW1teSB2YWx1ZXMuKQorICAgKiA6YXR0cjpgc3RfZnR5cGVgIChmaWxlIHR5cGUpCisgICAqIDphdHRyOmBzdF9hdHRyc2AgKGF0dHJpYnV0ZXMpCisgICAqIDphdHRyOmBzdF9vYnR5cGVgIChvYmplY3QgdHlwZSkuCiAKICAgIC4uIG5vdGU6OgogCkBAIC0xMzIxLDYgKzEzNzMsMjggQEAKICAgICAgIDphdHRyOmBzdF9tdGltZWAgaGFzIDItc2Vjb25kIHJlc29sdXRpb24sIGFuZCA6YXR0cjpgc3RfYXRpbWVgIGhhcyBvbmx5IDEtZGF5CiAgICAgICByZXNvbHV0aW9uLiAgU2VlIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgogCisgICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHJldHVybiB2YWx1ZSBvZiA6ZnVuYzpgfm9zLnN0YXRgIGlzIGFsc28gYWNjZXNzaWJsZQorICAgYXMgYSB0dXBsZSBvZiBhdCBsZWFzdCAxMCBpbnRlZ2VycyBnaXZpbmcgdGhlIG1vc3QgaW1wb3J0YW50IChhbmQgcG9ydGFibGUpCisgICBtZW1iZXJzIG9mIHRoZSA6Y3R5cGU6YHN0YXRgIHN0cnVjdHVyZSwgaW4gdGhlIG9yZGVyIDphdHRyOmBzdF9tb2RlYCwKKyAgIDphdHRyOmBzdF9pbm9gLCA6YXR0cjpgc3RfZGV2YCwgOmF0dHI6YHN0X25saW5rYCwgOmF0dHI6YHN0X3VpZGAsCisgICA6YXR0cjpgc3RfZ2lkYCwgOmF0dHI6YHN0X3NpemVgLCA6YXR0cjpgc3RfYXRpbWVgLCA6YXR0cjpgc3RfbXRpbWVgLAorICAgOmF0dHI6YHN0X2N0aW1lYC4gTW9yZSBpdGVtcyBtYXkgYmUgYWRkZWQgYXQgdGhlIGVuZCBieSBzb21lIGltcGxlbWVudGF0aW9ucy4KKworICAgLi4gaW5kZXg6OiBtb2R1bGU6IHN0YXQKKworICAgVGhlIHN0YW5kYXJkIG1vZHVsZSA6bW9kOmBzdGF0YCBkZWZpbmVzIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzIHRoYXQgYXJlIHVzZWZ1bAorICAgZm9yIGV4dHJhY3RpbmcgaW5mb3JtYXRpb24gZnJvbSBhIDpjdHlwZTpgc3RhdGAgc3RydWN0dXJlLiAoT24gV2luZG93cywgc29tZQorICAgaXRlbXMgYXJlIGZpbGxlZCB3aXRoIGR1bW15IHZhbHVlcy4pCisKKyAgIEV4YW1wbGU6OgorCisgICAgICA+Pj4gaW1wb3J0IG9zCisgICAgICA+Pj4gc3RhdGluZm8gPSBvcy5zdGF0KCdzb21lZmlsZS50eHQnKQorICAgICAgPj4+IHN0YXRpbmZvCisgICAgICAoMzMxODgsIDQyMjUxMSwgNzY5LCAxLCAxMDMyLCAxMDAsIDkyNiwgMTEwNTAyMjY5OCwxMTA1MDIyNzMyLCAxMTA1MDIyNzMyKQorICAgICAgPj4+IHN0YXRpbmZvLnN0X3NpemUKKyAgICAgIDkyNgorCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4yCkBAIC0xMzMzLDcgKzE0MDcsNyBAQAogLi4gZnVuY3Rpb246OiBzdGF0X2Zsb2F0X3RpbWVzKFtuZXd2YWx1ZV0pCiAKICAgIERldGVybWluZSB3aGV0aGVyIDpjbGFzczpgc3RhdF9yZXN1bHRgIHJlcHJlc2VudHMgdGltZSBzdGFtcHMgYXMgZmxvYXQgb2JqZWN0cy4KLSAgIElmICpuZXd2YWx1ZSogaXMgYGBUcnVlYGAsIGZ1dHVyZSBjYWxscyB0byA6ZnVuYzpgc3RhdGAgcmV0dXJuIGZsb2F0cywgaWYgaXQgaXMKKyAgIElmICpuZXd2YWx1ZSogaXMgYGBUcnVlYGAsIGZ1dHVyZSBjYWxscyB0byA6ZnVuYzpgfm9zLnN0YXRgIHJldHVybiBmbG9hdHMsIGlmIGl0IGlzCiAgICBgYEZhbHNlYGAsIGZ1dHVyZSBjYWxscyByZXR1cm4gaW50cy4gSWYgKm5ld3ZhbHVlKiBpcyBvbWl0dGVkLCByZXR1cm4gdGhlCiAgICBjdXJyZW50IHNldHRpbmcuCiAKQEAgLTE0NTMsOCArMTUyNyw4IEBACiAgICByZXNwZWN0aXZlbHkuIFdoZXRoZXIgYSBkaXJlY3RvcnkgY2FuIGJlIGdpdmVuIGZvciAqcGF0aCogZGVwZW5kcyBvbiB3aGV0aGVyCiAgICB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbXBsZW1lbnRzIGRpcmVjdG9yaWVzIGFzIGZpbGVzIChmb3IgZXhhbXBsZSwgV2luZG93cwogICAgZG9lcyBub3QpLiAgTm90ZSB0aGF0IHRoZSBleGFjdCB0aW1lcyB5b3Ugc2V0IGhlcmUgbWF5IG5vdCBiZSByZXR1cm5lZCBieSBhCi0gICBzdWJzZXF1ZW50IDpmdW5jOmBzdGF0YCBjYWxsLCBkZXBlbmRpbmcgb24gdGhlIHJlc29sdXRpb24gd2l0aCB3aGljaCB5b3VyCi0gICBvcGVyYXRpbmcgc3lzdGVtIHJlY29yZHMgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXM7IHNlZSA6ZnVuYzpgc3RhdGAuCisgICBzdWJzZXF1ZW50IDpmdW5jOmB+b3Muc3RhdGAgY2FsbCwgZGVwZW5kaW5nIG9uIHRoZSByZXNvbHV0aW9uIHdpdGggd2hpY2ggeW91cgorICAgb3BlcmF0aW5nIHN5c3RlbSByZWNvcmRzIGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9uIHRpbWVzOyBzZWUgOmZ1bmM6YH5vcy5zdGF0YC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjAKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGBgTm9uZWBgIGZvciAqdGltZXMqLgpAQCAtMTYyNywxNSArMTcwMSwxNSBAQAogCiAuLiBmdW5jdGlvbjo6IF9leGl0KG4pCiAKLSAgIEV4aXQgdG8gdGhlIHN5c3RlbSB3aXRoIHN0YXR1cyAqbiosIHdpdGhvdXQgY2FsbGluZyBjbGVhbnVwIGhhbmRsZXJzLCBmbHVzaGluZworICAgRXhpdCB0aGUgcHJvY2VzcyB3aXRoIHN0YXR1cyAqbiosIHdpdGhvdXQgY2FsbGluZyBjbGVhbnVwIGhhbmRsZXJzLCBmbHVzaGluZwogICAgc3RkaW8gYnVmZmVycywgZXRjLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKICAgIC4uIG5vdGU6OgogCi0gICAgICBUaGUgc3RhbmRhcmQgd2F5IHRvIGV4aXQgaXMgYGBzeXMuZXhpdChuKWBgLiA6ZnVuYzpgX2V4aXRgIHNob3VsZCBub3JtYWxseSBvbmx5Ci0gICAgICBiZSB1c2VkIGluIHRoZSBjaGlsZCBwcm9jZXNzIGFmdGVyIGEgOmZ1bmM6YGZvcmtgLgorICAgICAgVGhlIHN0YW5kYXJkIHdheSB0byBleGl0IGlzIGBgc3lzLmV4aXQobilgYC4gIDpmdW5jOmBfZXhpdGAgc2hvdWxkCisgICAgICBub3JtYWxseSBvbmx5IGJlIHVzZWQgaW4gdGhlIGNoaWxkIHByb2Nlc3MgYWZ0ZXIgYSA6ZnVuYzpgZm9ya2AuCiAKIFRoZSBmb2xsb3dpbmcgZXhpdCBjb2RlcyBhcmUgZGVmaW5lZCBhbmQgY2FuIGJlIHVzZWQgd2l0aCA6ZnVuYzpgX2V4aXRgLAogYWx0aG91Z2ggdGhleSBhcmUgbm90IHJlcXVpcmVkLiAgVGhlc2UgYXJlIHR5cGljYWxseSB1c2VkIGZvciBzeXN0ZW0gcHJvZ3JhbXMKQEAgLTE4MzgsNyArMTkxMiwxNiBAQAogCiAgICBTZW5kIHNpZ25hbCAqc2lnKiB0byB0aGUgcHJvY2VzcyAqcGlkKi4gIENvbnN0YW50cyBmb3IgdGhlIHNwZWNpZmljIHNpZ25hbHMKICAgIGF2YWlsYWJsZSBvbiB0aGUgaG9zdCBwbGF0Zm9ybSBhcmUgZGVmaW5lZCBpbiB0aGUgOm1vZDpgc2lnbmFsYCBtb2R1bGUuCi0gICBBdmFpbGFiaWxpdHk6IFVuaXguCisKKyAgIFdpbmRvd3M6IFRoZSA6ZGF0YTpgc2lnbmFsLkNUUkxfQ19FVkVOVGAgYW5kCisgICA6ZGF0YTpgc2lnbmFsLkNUUkxfQlJFQUtfRVZFTlRgIHNpZ25hbHMgYXJlIHNwZWNpYWwgc2lnbmFscyB3aGljaCBjYW4KKyAgIG9ubHkgYmUgc2VudCB0byBjb25zb2xlIHByb2Nlc3NlcyB3aGljaCBzaGFyZSBhIGNvbW1vbiBjb25zb2xlIHdpbmRvdywKKyAgIGUuZy4sIHNvbWUgc3VicHJvY2Vzc2VzLiBBbnkgb3RoZXIgdmFsdWUgZm9yICpzaWcqIHdpbGwgY2F1c2UgdGhlIHByb2Nlc3MKKyAgIHRvIGJlIHVuY29uZGl0aW9uYWxseSBraWxsZWQgYnkgdGhlIFRlcm1pbmF0ZVByb2Nlc3MgQVBJLCBhbmQgdGhlIGV4aXQgY29kZQorICAgd2lsbCBiZSBzZXQgdG8gKnNpZyouIFRoZSBXaW5kb3dzIHZlcnNpb24gb2YgOmZ1bmM6YGtpbGxgIGFkZGl0aW9uYWxseSB0YWtlcworICAgcHJvY2VzcyBoYW5kbGVzIHRvIGJlIGtpbGxlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43IFdpbmRvd3Mgc3VwcG9ydAogCiAKIC4uIGZ1bmN0aW9uOjoga2lsbHBnKHBnaWQsIHNpZykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BhcnNlci5yc3QgYi9Eb2MvbGlicmFyeS9wYXJzZXIucnN0CmluZGV4IGIxY2JkMTIuLmM0NmFlYWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BhcnNlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGFyc2VyLnJzdApAQCAtMTIxLDcgKzEyMSw3IEBACiAgICBUaGUgOmZ1bmM6YGV4cHJgIGZ1bmN0aW9uIHBhcnNlcyB0aGUgcGFyYW1ldGVyICpzb3VyY2UqIGFzIGlmIGl0IHdlcmUgYW4gaW5wdXQKICAgIHRvIGBgY29tcGlsZShzb3VyY2UsICdmaWxlLnB5JywgJ2V2YWwnKWBgLiAgSWYgdGhlIHBhcnNlIHN1Y2NlZWRzLCBhbiBTVCBvYmplY3QKICAgIGlzIGNyZWF0ZWQgdG8gaG9sZCB0aGUgaW50ZXJuYWwgcGFyc2UgdHJlZSByZXByZXNlbnRhdGlvbiwgb3RoZXJ3aXNlIGFuCi0gICBhcHByb3ByaWF0ZSBleGNlcHRpb24gaXMgdGhyb3duLgorICAgYXBwcm9wcmlhdGUgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAogCiAuLiBmdW5jdGlvbjo6IHN1aXRlKHNvdXJjZSkKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgVGhlIDpmdW5jOmBzdWl0ZWAgZnVuY3Rpb24gcGFyc2VzIHRoZSBwYXJhbWV0ZXIgKnNvdXJjZSogYXMgaWYgaXQgd2VyZSBhbiBpbnB1dAogICAgdG8gYGBjb21waWxlKHNvdXJjZSwgJ2ZpbGUucHknLCAnZXhlYycpYGAuICBJZiB0aGUgcGFyc2Ugc3VjY2VlZHMsIGFuIFNUIG9iamVjdAogICAgaXMgY3JlYXRlZCB0byBob2xkIHRoZSBpbnRlcm5hbCBwYXJzZSB0cmVlIHJlcHJlc2VudGF0aW9uLCBvdGhlcndpc2UgYW4KLSAgIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgICBhcHByb3ByaWF0ZSBleGNlcHRpb24gaXMgcmFpc2VkLgogCiAKIC4uIGZ1bmN0aW9uOjogc2VxdWVuY2Uyc3Qoc2VxdWVuY2UpCkBAIC0xMzksOSArMTM5LDkgQEAKICAgIHRvIHRoZSBQeXRob24gZ3JhbW1hciBhbmQgYWxsIG5vZGVzIGFyZSB2YWxpZCBub2RlIHR5cGVzIGluIHRoZSBob3N0IHZlcnNpb24gb2YKICAgIFB5dGhvbiwgYW4gU1Qgb2JqZWN0IGlzIGNyZWF0ZWQgZnJvbSB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gYW5kIHJldHVybmVkCiAgICB0byB0aGUgY2FsbGVkLiAgSWYgdGhlcmUgaXMgYSBwcm9ibGVtIGNyZWF0aW5nIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgb3IKLSAgIGlmIHRoZSB0cmVlIGNhbm5vdCBiZSB2YWxpZGF0ZWQsIGEgOmV4YzpgUGFyc2VyRXJyb3JgIGV4Y2VwdGlvbiBpcyB0aHJvd24uICBBbgorICAgaWYgdGhlIHRyZWUgY2Fubm90IGJlIHZhbGlkYXRlZCwgYSA6ZXhjOmBQYXJzZXJFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIEFuCiAgICBTVCBvYmplY3QgY3JlYXRlZCB0aGlzIHdheSBzaG91bGQgbm90IGJlIGFzc3VtZWQgdG8gY29tcGlsZSBjb3JyZWN0bHk7IG5vcm1hbAotICAgZXhjZXB0aW9ucyB0aHJvd24gYnkgY29tcGlsYXRpb24gbWF5IHN0aWxsIGJlIGluaXRpYXRlZCB3aGVuIHRoZSBTVCBvYmplY3QgaXMKKyAgIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGNvbXBpbGF0aW9uIG1heSBzdGlsbCBiZSBpbml0aWF0ZWQgd2hlbiB0aGUgU1Qgb2JqZWN0IGlzCiAgICBwYXNzZWQgdG8gOmZ1bmM6YGNvbXBpbGVzdGAuICBUaGlzIG1heSBpbmRpY2F0ZSBwcm9ibGVtcyBub3QgcmVsYXRlZCB0byBzeW50YXgKICAgIChzdWNoIGFzIGEgOmV4YzpgTWVtb3J5RXJyb3JgIGV4Y2VwdGlvbiksIGJ1dCBtYXkgYWxzbyBiZSBkdWUgdG8gY29uc3RydWN0cyBzdWNoCiAgICBhcyB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYGBkZWwgZigwKWBgLCB3aGljaCBlc2NhcGVzIHRoZSBQeXRob24gcGFyc2VyIGJ1dCBpcwpAQCAtMjY0LDggKzI2NCw4IEBACiAuLiBleGNlcHRpb246OiBQYXJzZXJFcnJvcgogCiAgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSBmYWlsdXJlIG9jY3VycyB3aXRoaW4gdGhlIHBhcnNlciBtb2R1bGUuICBUaGlzIGlzCi0gICBnZW5lcmFsbHkgcHJvZHVjZWQgZm9yIHZhbGlkYXRpb24gZmFpbHVyZXMgcmF0aGVyIHRoYW4gdGhlIGJ1aWx0IGluCi0gICA6ZXhjOmBTeW50YXhFcnJvcmAgdGhyb3duIGR1cmluZyBub3JtYWwgcGFyc2luZy4gVGhlIGV4Y2VwdGlvbiBhcmd1bWVudCBpcworICAgZ2VuZXJhbGx5IHByb2R1Y2VkIGZvciB2YWxpZGF0aW9uIGZhaWx1cmVzIHJhdGhlciB0aGFuIHRoZSBidWlsdC1pbgorICAgOmV4YzpgU3ludGF4RXJyb3JgIHJhaXNlZCBkdXJpbmcgbm9ybWFsIHBhcnNpbmcuIFRoZSBleGNlcHRpb24gYXJndW1lbnQgaXMKICAgIGVpdGhlciBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSByZWFzb24gb2YgdGhlIGZhaWx1cmUgb3IgYSB0dXBsZSBjb250YWluaW5nIGEKICAgIHNlcXVlbmNlIGNhdXNpbmcgdGhlIGZhaWx1cmUgZnJvbSBhIHBhcnNlIHRyZWUgcGFzc2VkIHRvIDpmdW5jOmBzZXF1ZW5jZTJzdGAKICAgIGFuZCBhbiBleHBsYW5hdG9yeSBzdHJpbmcuICBDYWxscyB0byA6ZnVuYzpgc2VxdWVuY2Uyc3RgIG5lZWQgdG8gYmUgYWJsZSB0bwpAQCAtMjczLDcgKzI3Myw3IEBACiAgICB3aWxsIG9ubHkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgc2ltcGxlIHN0cmluZyB2YWx1ZXMuCiAKIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb25zIDpmdW5jOmBjb21waWxlc3RgLCA6ZnVuYzpgZXhwcmAsIGFuZCA6ZnVuYzpgc3VpdGVgIG1heQotdGhyb3cgZXhjZXB0aW9ucyB3aGljaCBhcmUgbm9ybWFsbHkgdGhyb3duIGJ5IHRoZSBwYXJzaW5nIGFuZCBjb21waWxhdGlvbgorcmFpc2UgZXhjZXB0aW9ucyB3aGljaCBhcmUgbm9ybWFsbHkgcmFpc2VkIGJ5IHRoZSBwYXJzaW5nIGFuZCBjb21waWxhdGlvbgogcHJvY2Vzcy4gIFRoZXNlIGluY2x1ZGUgdGhlIGJ1aWx0IGluIGV4Y2VwdGlvbnMgOmV4YzpgTWVtb3J5RXJyb3JgLAogOmV4YzpgT3ZlcmZsb3dFcnJvcmAsIDpleGM6YFN5bnRheEVycm9yYCwgYW5kIDpleGM6YFN5c3RlbUVycm9yYC4gIEluIHRoZXNlCiBjYXNlcywgdGhlc2UgZXhjZXB0aW9ucyBjYXJyeSBhbGwgdGhlIG1lYW5pbmcgbm9ybWFsbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCkBAIC0zMjIsMjIgKzMyMiw4IEBACiAgICBTYW1lIGFzIGBgc3QydHVwbGUoc3QsIGxpbmVfaW5mbylgYC4KIAogCi0uLiBfc3QtZXhhbXBsZXM6Ci0KLUV4YW1wbGVzCi0tLS0tLS0tLQotCi0uLiBpbmRleDo6IGJ1aWx0aW46IGNvbXBpbGUKLQotVGhlIHBhcnNlciBtb2R1bGVzIGFsbG93cyBvcGVyYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGUgcGFyc2UgdHJlZSBvZiBQeXRob24KLXNvdXJjZSBjb2RlIGJlZm9yZSB0aGUgOnRlcm06YGJ5dGVjb2RlYCBpcyBnZW5lcmF0ZWQsIGFuZCBwcm92aWRlcyBmb3IgaW5zcGVjdGlvbiBvZiB0aGUKLXBhcnNlIHRyZWUgZm9yIGluZm9ybWF0aW9uIGdhdGhlcmluZyBwdXJwb3Nlcy4gVHdvIGV4YW1wbGVzIGFyZSBwcmVzZW50ZWQuICBUaGUKLXNpbXBsZSBleGFtcGxlIGRlbW9uc3RyYXRlcyBlbXVsYXRpb24gb2YgdGhlIDpmdW5jOmBjb21waWxlYCBidWlsdC1pbiBmdW5jdGlvbgotYW5kIHRoZSBjb21wbGV4IGV4YW1wbGUgc2hvd3MgdGhlIHVzZSBvZiBhIHBhcnNlIHRyZWUgZm9yIGluZm9ybWF0aW9uIGRpc2NvdmVyeS4KLQotCi1FbXVsYXRpb24gb2YgOmZ1bmM6YGNvbXBpbGVgCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitFeGFtcGxlOiBFbXVsYXRpb24gb2YgOmZ1bmM6YGNvbXBpbGVgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoaWxlIG1hbnkgdXNlZnVsIG9wZXJhdGlvbnMgbWF5IHRha2UgcGxhY2UgYmV0d2VlbiBwYXJzaW5nIGFuZCBieXRlY29kZQogZ2VuZXJhdGlvbiwgdGhlIHNpbXBsZXN0IG9wZXJhdGlvbiBpcyB0byBkbyBub3RoaW5nLiAgRm9yIHRoaXMgcHVycG9zZSwgdXNpbmcKQEAgLTM3MSwzMjIgKzM1NywzIEBACiAgICBkZWYgbG9hZF9leHByZXNzaW9uKHNvdXJjZV9zdHJpbmcpOgogICAgICAgIHN0ID0gcGFyc2VyLmV4cHIoc291cmNlX3N0cmluZykKICAgICAgICByZXR1cm4gc3QsIHN0LmNvbXBpbGUoKQotCi0KLUluZm9ybWF0aW9uIERpc2NvdmVyeQotXl5eXl5eXl5eXl5eXl5eXl5eXl5eCi0KLS4uIGluZGV4OjoKLSAgIHNpbmdsZTogc3RyaW5nOyBkb2N1bWVudGF0aW9uCi0gICBzaW5nbGU6IGRvY3N0cmluZ3MKLQotU29tZSBhcHBsaWNhdGlvbnMgYmVuZWZpdCBmcm9tIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHBhcnNlIHRyZWUuICBUaGUgcmVtYWluZGVyCi1vZiB0aGlzIHNlY3Rpb24gZGVtb25zdHJhdGVzIGhvdyB0aGUgcGFyc2UgdHJlZSBwcm92aWRlcyBhY2Nlc3MgdG8gbW9kdWxlCi1kb2N1bWVudGF0aW9uIGRlZmluZWQgaW4gZG9jc3RyaW5ncyB3aXRob3V0IHJlcXVpcmluZyB0aGF0IHRoZSBjb2RlIGJlaW5nCi1leGFtaW5lZCBiZSBsb2FkZWQgaW50byBhIHJ1bm5pbmcgaW50ZXJwcmV0ZXIgdmlhIDprZXl3b3JkOmBpbXBvcnRgLiAgVGhpcyBjYW4KLWJlIHZlcnkgdXNlZnVsIGZvciBwZXJmb3JtaW5nIGFuYWx5c2VzIG9mIHVudHJ1c3RlZCBjb2RlLgotCi1HZW5lcmFsbHksIHRoZSBleGFtcGxlIHdpbGwgZGVtb25zdHJhdGUgaG93IHRoZSBwYXJzZSB0cmVlIG1heSBiZSB0cmF2ZXJzZWQgdG8KLWRpc3RpbGwgaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24uICBUd28gZnVuY3Rpb25zIGFuZCBhIHNldCBvZiBjbGFzc2VzIGFyZQotZGV2ZWxvcGVkIHdoaWNoIHByb3ZpZGUgcHJvZ3JhbW1hdGljIGFjY2VzcyB0byBoaWdoIGxldmVsIGZ1bmN0aW9uIGFuZCBjbGFzcwotZGVmaW5pdGlvbnMgcHJvdmlkZWQgYnkgYSBtb2R1bGUuICBUaGUgY2xhc3NlcyBleHRyYWN0IGluZm9ybWF0aW9uIGZyb20gdGhlCi1wYXJzZSB0cmVlIGFuZCBwcm92aWRlIGFjY2VzcyB0byB0aGUgaW5mb3JtYXRpb24gYXQgYSB1c2VmdWwgc2VtYW50aWMgbGV2ZWwsIG9uZQotZnVuY3Rpb24gcHJvdmlkZXMgYSBzaW1wbGUgbG93LWxldmVsIHBhdHRlcm4gbWF0Y2hpbmcgY2FwYWJpbGl0eSwgYW5kIHRoZSBvdGhlcgotZnVuY3Rpb24gZGVmaW5lcyBhIGhpZ2gtbGV2ZWwgaW50ZXJmYWNlIHRvIHRoZSBjbGFzc2VzIGJ5IGhhbmRsaW5nIGZpbGUKLW9wZXJhdGlvbnMgb24gYmVoYWxmIG9mIHRoZSBjYWxsZXIuICBBbGwgc291cmNlIGZpbGVzIG1lbnRpb25lZCBoZXJlIHdoaWNoIGFyZQotbm90IHBhcnQgb2YgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24gYXJlIGxvY2F0ZWQgaW4gdGhlIDpmaWxlOmBEZW1vL3BhcnNlci9gCi1kaXJlY3Rvcnkgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KLQotVGhlIGR5bmFtaWMgbmF0dXJlIG9mIFB5dGhvbiBhbGxvd3MgdGhlIHByb2dyYW1tZXIgYSBncmVhdCBkZWFsIG9mIGZsZXhpYmlsaXR5LAotYnV0IG1vc3QgbW9kdWxlcyBuZWVkIG9ubHkgYSBsaW1pdGVkIG1lYXN1cmUgb2YgdGhpcyB3aGVuIGRlZmluaW5nIGNsYXNzZXMsCi1mdW5jdGlvbnMsIGFuZCBtZXRob2RzLiAgSW4gdGhpcyBleGFtcGxlLCB0aGUgb25seSBkZWZpbml0aW9ucyB0aGF0IHdpbGwgYmUKLWNvbnNpZGVyZWQgYXJlIHRob3NlIHdoaWNoIGFyZSBkZWZpbmVkIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlaXIgY29udGV4dCwgZS5nLiwKLWEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIDprZXl3b3JkOmBkZWZgIHN0YXRlbWVudCBhdCBjb2x1bW4gemVybyBvZiBhIG1vZHVsZSwgYnV0Ci1ub3QgYSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBhIGJyYW5jaCBvZiBhbiA6a2V5d29yZDpgaWZgIC4uLiA6a2V5d29yZDpgZWxzZWAKLWNvbnN0cnVjdCwgdGhvdWdoIHRoZXJlIGFyZSBzb21lIGdvb2QgcmVhc29ucyBmb3IgZG9pbmcgc28gaW4gc29tZSBzaXR1YXRpb25zLgotTmVzdGluZyBvZiBkZWZpbml0aW9ucyB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGNvZGUgZGV2ZWxvcGVkIGluIHRoZSBleGFtcGxlLgotCi1UbyBjb25zdHJ1Y3QgdGhlIHVwcGVyLWxldmVsIGV4dHJhY3Rpb24gbWV0aG9kcywgd2UgbmVlZCB0byBrbm93IHdoYXQgdGhlIHBhcnNlCi10cmVlIHN0cnVjdHVyZSBsb29rcyBsaWtlIGFuZCBob3cgbXVjaCBvZiBpdCB3ZSBhY3R1YWxseSBuZWVkIHRvIGJlIGNvbmNlcm5lZAotYWJvdXQuICBQeXRob24gdXNlcyBhIG1vZGVyYXRlbHkgZGVlcCBwYXJzZSB0cmVlIHNvIHRoZXJlIGFyZSBhIGxhcmdlIG51bWJlciBvZgotaW50ZXJtZWRpYXRlIG5vZGVzLiAgSXQgaXMgaW1wb3J0YW50IHRvIHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIGZvcm1hbCBncmFtbWFyCi11c2VkIGJ5IFB5dGhvbi4gIFRoaXMgaXMgc3BlY2lmaWVkIGluIHRoZSBmaWxlIDpmaWxlOmBHcmFtbWFyL0dyYW1tYXJgIGluIHRoZQotZGlzdHJpYnV0aW9uLiBDb25zaWRlciB0aGUgc2ltcGxlc3QgY2FzZSBvZiBpbnRlcmVzdCB3aGVuIHNlYXJjaGluZyBmb3IKLWRvY3N0cmluZ3M6IGEgbW9kdWxlIGNvbnNpc3Rpbmcgb2YgYSBkb2NzdHJpbmcgYW5kIG5vdGhpbmcgZWxzZS4gIChTZWUgZmlsZQotOmZpbGU6YGRvY3N0cmluZy5weWAuKSA6OgotCi0gICAiIiJTb21lIGRvY3VtZW50YXRpb24uCi0gICAiIiIKLQotVXNpbmcgdGhlIGludGVycHJldGVyIHRvIHRha2UgYSBsb29rIGF0IHRoZSBwYXJzZSB0cmVlLCB3ZSBmaW5kIGEgYmV3aWxkZXJpbmcKLW1hc3Mgb2YgbnVtYmVycyBhbmQgcGFyZW50aGVzZXMsIHdpdGggdGhlIGRvY3VtZW50YXRpb24gYnVyaWVkIGRlZXAgaW4gbmVzdGVkCi10dXBsZXMuIDo6Ci0KLSAgID4+PiBpbXBvcnQgcGFyc2VyCi0gICA+Pj4gaW1wb3J0IHBwcmludAotICAgPj4+IHN0ID0gcGFyc2VyLnN1aXRlKG9wZW4oJ2RvY3N0cmluZy5weScpLnJlYWQoKSkKLSAgID4+PiB0dXAgPSBzdC50b3R1cGxlKCkKLSAgID4+PiBwcHJpbnQucHByaW50KHR1cCkKLSAgICgyNTcsCi0gICAgKDI2NCwKLSAgICAgKDI2NSwKLSAgICAgICgyNjYsCi0gICAgICAgKDI2NywKLSAgICAgICAgKDMwNywKLSAgICAgICAgICgyODcsCi0gICAgICAgICAgKDI4OCwKLSAgICAgICAgICAgKDI4OSwKLSAgICAgICAgICAgICgyOTAsCi0gICAgICAgICAgICAgKDI5MiwKLSAgICAgICAgICAgICAgKDI5MywKLSAgICAgICAgICAgICAgICgyOTQsCi0gICAgICAgICAgICAgICAgKDI5NSwKLSAgICAgICAgICAgICAgICAgKDI5NiwKLSAgICAgICAgICAgICAgICAgICgyOTcsCi0gICAgICAgICAgICAgICAgICAgKDI5OCwKLSAgICAgICAgICAgICAgICAgICAgKDI5OSwKLSAgICAgICAgICAgICAgICAgICAgICgzMDAsICgzLCAnIiIiU29tZSBkb2N1bWVudGF0aW9uLlxuIiIiJykpKSkpKSkpKSkpKSkpKSkpLAotICAgICAgKDQsICcnKSkpLAotICAgICg0LCAnJyksCi0gICAgKDAsICcnKSkKLQotVGhlIG51bWJlcnMgYXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgZWFjaCBub2RlIGluIHRoZSB0cmVlIGFyZSB0aGUgbm9kZSB0eXBlczsKLXRoZXkgbWFwIGRpcmVjdGx5IHRvIHRlcm1pbmFsIGFuZCBub24tdGVybWluYWwgc3ltYm9scyBpbiB0aGUgZ3JhbW1hci4KLVVuZm9ydHVuYXRlbHksIHRoZXkgYXJlIHJlcHJlc2VudGVkIGFzIGludGVnZXJzIGluIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwKLWFuZCB0aGUgUHl0aG9uIHN0cnVjdHVyZXMgZ2VuZXJhdGVkIGRvIG5vdCBjaGFuZ2UgdGhhdC4gIEhvd2V2ZXIsIHRoZQotOm1vZDpgc3ltYm9sYCBhbmQgOm1vZDpgdG9rZW5gIG1vZHVsZXMgcHJvdmlkZSBzeW1ib2xpYyBuYW1lcyBmb3IgdGhlIG5vZGUgdHlwZXMKLWFuZCBkaWN0aW9uYXJpZXMgd2hpY2ggbWFwIGZyb20gdGhlIGludGVnZXJzIHRvIHRoZSBzeW1ib2xpYyBuYW1lcyBmb3IgdGhlIG5vZGUKLXR5cGVzLgotCi1JbiB0aGUgb3V0cHV0IHByZXNlbnRlZCBhYm92ZSwgdGhlIG91dGVybW9zdCB0dXBsZSBjb250YWlucyBmb3VyIGVsZW1lbnRzOiB0aGUKLWludGVnZXIgYGAyNTdgYCBhbmQgdGhyZWUgYWRkaXRpb25hbCB0dXBsZXMuICBOb2RlIHR5cGUgYGAyNTdgYCBoYXMgdGhlIHN5bWJvbGljCi1uYW1lIDpjb25zdDpgZmlsZV9pbnB1dGAuICBFYWNoIG9mIHRoZXNlIGlubmVyIHR1cGxlcyBjb250YWlucyBhbiBpbnRlZ2VyIGFzIHRoZQotZmlyc3QgZWxlbWVudDsgdGhlc2UgaW50ZWdlcnMsIGBgMjY0YGAsIGBgNGBgLCBhbmQgYGAwYGAsIHJlcHJlc2VudCB0aGUgbm9kZQotdHlwZXMgOmNvbnN0OmBzdG10YCwgOmNvbnN0OmBORVdMSU5FYCwgYW5kIDpjb25zdDpgRU5ETUFSS0VSYCwgcmVzcGVjdGl2ZWx5LgotTm90ZSB0aGF0IHRoZXNlIHZhbHVlcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgdmVyc2lvbiBvZiBQeXRob24geW91IGFyZQotdXNpbmc7IGNvbnN1bHQgOmZpbGU6YHN5bWJvbC5weWAgYW5kIDpmaWxlOmB0b2tlbi5weWAgZm9yIGRldGFpbHMgb2YgdGhlCi1tYXBwaW5nLiAgSXQgc2hvdWxkIGJlIGZhaXJseSBjbGVhciB0aGF0IHRoZSBvdXRlcm1vc3Qgbm9kZSBpcyByZWxhdGVkIHByaW1hcmlseQotdG8gdGhlIGlucHV0IHNvdXJjZSByYXRoZXIgdGhhbiB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUsIGFuZCBtYXkgYmUgZGlzcmVnYXJkZWQKLWZvciB0aGUgbW9tZW50LiAgVGhlIDpjb25zdDpgc3RtdGAgbm9kZSBpcyBtdWNoIG1vcmUgaW50ZXJlc3RpbmcuICBJbgotcGFydGljdWxhciwgYWxsIGRvY3N0cmluZ3MgYXJlIGZvdW5kIGluIHN1YnRyZWVzIHdoaWNoIGFyZSBmb3JtZWQgZXhhY3RseSBhcwotdGhpcyBub2RlIGlzIGZvcm1lZCwgd2l0aCB0aGUgb25seSBkaWZmZXJlbmNlIGJlaW5nIHRoZSBzdHJpbmcgaXRzZWxmLiAgVGhlCi1hc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBkb2NzdHJpbmcgaW4gYSBzaW1pbGFyIHRyZWUgYW5kIHRoZSBkZWZpbmVkIGVudGl0eQotKGNsYXNzLCBmdW5jdGlvbiwgb3IgbW9kdWxlKSB3aGljaCBpdCBkZXNjcmliZXMgaXMgZ2l2ZW4gYnkgdGhlIHBvc2l0aW9uIG9mIHRoZQotZG9jc3RyaW5nIHN1YnRyZWUgd2l0aGluIHRoZSB0cmVlIGRlZmluaW5nIHRoZSBkZXNjcmliZWQgc3RydWN0dXJlLgotCi1CeSByZXBsYWNpbmcgdGhlIGFjdHVhbCBkb2NzdHJpbmcgd2l0aCBzb21ldGhpbmcgdG8gc2lnbmlmeSBhIHZhcmlhYmxlIGNvbXBvbmVudAotb2YgdGhlIHRyZWUsIHdlIGFsbG93IGEgc2ltcGxlIHBhdHRlcm4gbWF0Y2hpbmcgYXBwcm9hY2ggdG8gY2hlY2sgYW55IGdpdmVuCi1zdWJ0cmVlIGZvciBlcXVpdmFsZW5jZSB0byB0aGUgZ2VuZXJhbCBwYXR0ZXJuIGZvciBkb2NzdHJpbmdzLiAgU2luY2UgdGhlCi1leGFtcGxlIGRlbW9uc3RyYXRlcyBpbmZvcm1hdGlvbiBleHRyYWN0aW9uLCB3ZSBjYW4gc2FmZWx5IHJlcXVpcmUgdGhhdCB0aGUgdHJlZQotYmUgaW4gdHVwbGUgZm9ybSByYXRoZXIgdGhhbiBsaXN0IGZvcm0sIGFsbG93aW5nIGEgc2ltcGxlIHZhcmlhYmxlCi1yZXByZXNlbnRhdGlvbiB0byBiZSBgYFsndmFyaWFibGVfbmFtZSddYGAuICBBIHNpbXBsZSByZWN1cnNpdmUgZnVuY3Rpb24gY2FuCi1pbXBsZW1lbnQgdGhlIHBhdHRlcm4gbWF0Y2hpbmcsIHJldHVybmluZyBhIEJvb2xlYW4gYW5kIGEgZGljdGlvbmFyeSBvZiB2YXJpYWJsZQotbmFtZSB0byB2YWx1ZSBtYXBwaW5ncy4gIChTZWUgZmlsZSA6ZmlsZTpgZXhhbXBsZS5weWAuKSA6OgotCi0gICBmcm9tIHR5cGVzIGltcG9ydCBMaXN0VHlwZSwgVHVwbGVUeXBlCi0KLSAgIGRlZiBtYXRjaChwYXR0ZXJuLCBkYXRhLCB2YXJzPU5vbmUpOgotICAgICAgIGlmIHZhcnMgaXMgTm9uZToKLSAgICAgICAgICAgdmFycyA9IHt9Ci0gICAgICAgaWYgdHlwZShwYXR0ZXJuKSBpcyBMaXN0VHlwZToKLSAgICAgICAgICAgdmFyc1twYXR0ZXJuWzBdXSA9IGRhdGEKLSAgICAgICAgICAgcmV0dXJuIDEsIHZhcnMKLSAgICAgICBpZiB0eXBlKHBhdHRlcm4pIGlzIG5vdCBUdXBsZVR5cGU6Ci0gICAgICAgICAgIHJldHVybiAocGF0dGVybiA9PSBkYXRhKSwgdmFycwotICAgICAgIGlmIGxlbihkYXRhKSAhPSBsZW4ocGF0dGVybik6Ci0gICAgICAgICAgIHJldHVybiAwLCB2YXJzCi0gICAgICAgZm9yIHBhdHRlcm4sIGRhdGEgaW4gbWFwKE5vbmUsIHBhdHRlcm4sIGRhdGEpOgotICAgICAgICAgICBzYW1lLCB2YXJzID0gbWF0Y2gocGF0dGVybiwgZGF0YSwgdmFycykKLSAgICAgICAgICAgaWYgbm90IHNhbWU6Ci0gICAgICAgICAgICAgICBicmVhawotICAgICAgIHJldHVybiBzYW1lLCB2YXJzCi0KLVVzaW5nIHRoaXMgc2ltcGxlIHJlcHJlc2VudGF0aW9uIGZvciBzeW50YWN0aWMgdmFyaWFibGVzIGFuZCB0aGUgc3ltYm9saWMgbm9kZQotdHlwZXMsIHRoZSBwYXR0ZXJuIGZvciB0aGUgY2FuZGlkYXRlIGRvY3N0cmluZyBzdWJ0cmVlcyBiZWNvbWVzIGZhaXJseSByZWFkYWJsZS4KLShTZWUgZmlsZSA6ZmlsZTpgZXhhbXBsZS5weWAuKSA6OgotCi0gICBpbXBvcnQgc3ltYm9sCi0gICBpbXBvcnQgdG9rZW4KLQotICAgRE9DU1RSSU5HX1NUTVRfUEFUVEVSTiA9ICgKLSAgICAgICBzeW1ib2wuc3RtdCwKLSAgICAgICAoc3ltYm9sLnNpbXBsZV9zdG10LAotICAgICAgICAoc3ltYm9sLnNtYWxsX3N0bXQsCi0gICAgICAgICAoc3ltYm9sLmV4cHJfc3RtdCwKLSAgICAgICAgICAoc3ltYm9sLnRlc3RsaXN0LAotICAgICAgICAgICAoc3ltYm9sLnRlc3QsCi0gICAgICAgICAgICAoc3ltYm9sLmFuZF90ZXN0LAotICAgICAgICAgICAgIChzeW1ib2wubm90X3Rlc3QsCi0gICAgICAgICAgICAgIChzeW1ib2wuY29tcGFyaXNvbiwKLSAgICAgICAgICAgICAgIChzeW1ib2wuZXhwciwKLSAgICAgICAgICAgICAgICAoc3ltYm9sLnhvcl9leHByLAotICAgICAgICAgICAgICAgICAoc3ltYm9sLmFuZF9leHByLAotICAgICAgICAgICAgICAgICAgKHN5bWJvbC5zaGlmdF9leHByLAotICAgICAgICAgICAgICAgICAgIChzeW1ib2wuYXJpdGhfZXhwciwKLSAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC50ZXJtLAotICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC5mYWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC5wb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC5hdG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgKHRva2VuLlNUUklORywgWydkb2NzdHJpbmcnXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICkpKSkpKSkpKSkpKSkpKSksCi0gICAgICAgICh0b2tlbi5ORVdMSU5FLCAnJykKLSAgICAgICAgKSkKLQotVXNpbmcgdGhlIDpmdW5jOmBtYXRjaGAgZnVuY3Rpb24gd2l0aCB0aGlzIHBhdHRlcm4sIGV4dHJhY3RpbmcgdGhlIG1vZHVsZQotZG9jc3RyaW5nIGZyb20gdGhlIHBhcnNlIHRyZWUgY3JlYXRlZCBwcmV2aW91c2x5IGlzIGVhc3k6OgotCi0gICA+Pj4gZm91bmQsIHZhcnMgPSBtYXRjaChET0NTVFJJTkdfU1RNVF9QQVRURVJOLCB0dXBbMV0pCi0gICA+Pj4gZm91bmQKLSAgIDEKLSAgID4+PiB2YXJzCi0gICB7J2RvY3N0cmluZyc6ICciIiJTb21lIGRvY3VtZW50YXRpb24uXG4iIiInfQotCi1PbmNlIHNwZWNpZmljIGRhdGEgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIGEgbG9jYXRpb24gd2hlcmUgaXQgaXMgZXhwZWN0ZWQsIHRoZQotcXVlc3Rpb24gb2Ygd2hlcmUgaW5mb3JtYXRpb24gY2FuIGJlIGV4cGVjdGVkIG5lZWRzIHRvIGJlIGFuc3dlcmVkLiAgV2hlbgotZGVhbGluZyB3aXRoIGRvY3N0cmluZ3MsIHRoZSBhbnN3ZXIgaXMgZmFpcmx5IHNpbXBsZTogdGhlIGRvY3N0cmluZyBpcyB0aGUgZmlyc3QKLTpjb25zdDpgc3RtdGAgbm9kZSBpbiBhIGNvZGUgYmxvY2sgKDpjb25zdDpgZmlsZV9pbnB1dGAgb3IgOmNvbnN0OmBzdWl0ZWAgbm9kZQotdHlwZXMpLiAgQSBtb2R1bGUgY29uc2lzdHMgb2YgYSBzaW5nbGUgOmNvbnN0OmBmaWxlX2lucHV0YCBub2RlLCBhbmQgY2xhc3MgYW5kCi1mdW5jdGlvbiBkZWZpbml0aW9ucyBlYWNoIGNvbnRhaW4gZXhhY3RseSBvbmUgOmNvbnN0OmBzdWl0ZWAgbm9kZS4gIENsYXNzZXMgYW5kCi1mdW5jdGlvbnMgYXJlIHJlYWRpbHkgaWRlbnRpZmllZCBhcyBzdWJ0cmVlcyBvZiBjb2RlIGJsb2NrIG5vZGVzIHdoaWNoIHN0YXJ0Ci13aXRoIGBgKHN0bXQsIChjb21wb3VuZF9zdG10LCAoY2xhc3NkZWYsIC4uLmBgIG9yIGBgKHN0bXQsIChjb21wb3VuZF9zdG10LAotKGZ1bmNkZWYsIC4uLmBgLiAgTm90ZSB0aGF0IHRoZXNlIHN1YnRyZWVzIGNhbm5vdCBiZSBtYXRjaGVkIGJ5IDpmdW5jOmBtYXRjaGAKLXNpbmNlIGl0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgc2libGluZyBub2RlcyB0byBtYXRjaCB3aXRob3V0IHJlZ2FyZCB0bwotbnVtYmVyLiAgQSBtb3JlIGVsYWJvcmF0ZSBtYXRjaGluZyBmdW5jdGlvbiBjb3VsZCBiZSB1c2VkIHRvIG92ZXJjb21lIHRoaXMKLWxpbWl0YXRpb24sIGJ1dCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBleGFtcGxlLgotCi1HaXZlbiB0aGUgYWJpbGl0eSB0byBkZXRlcm1pbmUgd2hldGhlciBhIHN0YXRlbWVudCBtaWdodCBiZSBhIGRvY3N0cmluZyBhbmQKLWV4dHJhY3QgdGhlIGFjdHVhbCBzdHJpbmcgZnJvbSB0aGUgc3RhdGVtZW50LCBzb21lIHdvcmsgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIHRvCi13YWxrIHRoZSBwYXJzZSB0cmVlIGZvciBhbiBlbnRpcmUgbW9kdWxlIGFuZCBleHRyYWN0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBuYW1lcwotZGVmaW5lZCBpbiBlYWNoIGNvbnRleHQgb2YgdGhlIG1vZHVsZSBhbmQgYXNzb2NpYXRlIGFueSBkb2NzdHJpbmdzIHdpdGggdGhlCi1uYW1lcy4gIFRoZSBjb2RlIHRvIHBlcmZvcm0gdGhpcyB3b3JrIGlzIG5vdCBjb21wbGljYXRlZCwgYnV0IGJlYXJzIHNvbWUKLWV4cGxhbmF0aW9uLgotCi1UaGUgcHVibGljIGludGVyZmFjZSB0byB0aGUgY2xhc3NlcyBpcyBzdHJhaWdodGZvcndhcmQgYW5kIHNob3VsZCBwcm9iYWJseSBiZQotc29tZXdoYXQgbW9yZSBmbGV4aWJsZS4gIEVhY2ggIm1ham9yIiBibG9jayBvZiB0aGUgbW9kdWxlIGlzIGRlc2NyaWJlZCBieSBhbgotb2JqZWN0IHByb3ZpZGluZyBzZXZlcmFsIG1ldGhvZHMgZm9yIGlucXVpcnkgYW5kIGEgY29uc3RydWN0b3Igd2hpY2ggYWNjZXB0cyBhdAotbGVhc3QgdGhlIHN1YnRyZWUgb2YgdGhlIGNvbXBsZXRlIHBhcnNlIHRyZWUgd2hpY2ggaXQgcmVwcmVzZW50cy4gIFRoZQotOmNsYXNzOmBNb2R1bGVJbmZvYCBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIG9wdGlvbmFsICpuYW1lKiBwYXJhbWV0ZXIgc2luY2UgaXQKLWNhbm5vdCBvdGhlcndpc2UgZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCi0KLVRoZSBwdWJsaWMgY2xhc3NlcyBpbmNsdWRlIDpjbGFzczpgQ2xhc3NJbmZvYCwgOmNsYXNzOmBGdW5jdGlvbkluZm9gLCBhbmQKLTpjbGFzczpgTW9kdWxlSW5mb2AuICBBbGwgb2JqZWN0cyBwcm92aWRlIHRoZSBtZXRob2RzIDptZXRoOmBnZXRfbmFtZWAsCi06bWV0aDpgZ2V0X2RvY3N0cmluZ2AsIDptZXRoOmBnZXRfY2xhc3NfbmFtZXNgLCBhbmQgOm1ldGg6YGdldF9jbGFzc19pbmZvYC4gIFRoZQotOmNsYXNzOmBDbGFzc0luZm9gIG9iamVjdHMgc3VwcG9ydCA6bWV0aDpgZ2V0X21ldGhvZF9uYW1lc2AgYW5kCi06bWV0aDpgZ2V0X21ldGhvZF9pbmZvYCB3aGlsZSB0aGUgb3RoZXIgY2xhc3NlcyBwcm92aWRlCi06bWV0aDpgZ2V0X2Z1bmN0aW9uX25hbWVzYCBhbmQgOm1ldGg6YGdldF9mdW5jdGlvbl9pbmZvYC4KLQotV2l0aGluIGVhY2ggb2YgdGhlIGZvcm1zIG9mIGNvZGUgYmxvY2sgdGhhdCB0aGUgcHVibGljIGNsYXNzZXMgcmVwcmVzZW50LCBtb3N0Ci1vZiB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHNhbWUgZm9ybSBhbmQgaXMgYWNjZXNzZWQgaW4gdGhlIHNhbWUgd2F5LAotd2l0aCBjbGFzc2VzIGhhdmluZyB0aGUgZGlzdGluY3Rpb24gdGhhdCBmdW5jdGlvbnMgZGVmaW5lZCBhdCB0aGUgdG9wIGxldmVsIGFyZQotcmVmZXJyZWQgdG8gYXMgIm1ldGhvZHMuIiBTaW5jZSB0aGUgZGlmZmVyZW5jZSBpbiBub21lbmNsYXR1cmUgcmVmbGVjdHMgYSByZWFsCi1zZW1hbnRpYyBkaXN0aW5jdGlvbiBmcm9tIGZ1bmN0aW9ucyBkZWZpbmVkIG91dHNpZGUgb2YgYSBjbGFzcywgdGhlCi1pbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBtYWludGFpbiB0aGUgZGlzdGluY3Rpb24uIEhlbmNlLCBtb3N0IG9mIHRoZQotZnVuY3Rpb25hbGl0eSBvZiB0aGUgcHVibGljIGNsYXNzZXMgY2FuIGJlIGltcGxlbWVudGVkIGluIGEgY29tbW9uIGJhc2UgY2xhc3MsCi06Y2xhc3M6YFN1aXRlSW5mb0Jhc2VgLCB3aXRoIHRoZSBhY2Nlc3NvcnMgZm9yIGZ1bmN0aW9uIGFuZCBtZXRob2QgaW5mb3JtYXRpb24KLXByb3ZpZGVkIGVsc2V3aGVyZS4gTm90ZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGNsYXNzIHdoaWNoIHJlcHJlc2VudHMgZnVuY3Rpb24KLWFuZCBtZXRob2QgaW5mb3JtYXRpb247IHRoaXMgcGFyYWxsZWxzIHRoZSB1c2Ugb2YgdGhlIDprZXl3b3JkOmBkZWZgIHN0YXRlbWVudAotdG8gZGVmaW5lIGJvdGggdHlwZXMgb2YgZWxlbWVudHMuCi0KLU1vc3Qgb2YgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgaW4gOmNsYXNzOmBTdWl0ZUluZm9CYXNlYCBhbmQgZG8gbm90Ci1uZWVkIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4gIE1vcmUgaW1wb3J0YW50bHksIHRoZSBleHRyYWN0aW9uIG9mIG1vc3QKLWluZm9ybWF0aW9uIGZyb20gYSBwYXJzZSB0cmVlIGlzIGhhbmRsZWQgdGhyb3VnaCBhIG1ldGhvZCBjYWxsZWQgYnkgdGhlCi06Y2xhc3M6YFN1aXRlSW5mb0Jhc2VgIGNvbnN0cnVjdG9yLiAgVGhlIGV4YW1wbGUgY29kZSBmb3IgbW9zdCBvZiB0aGUgY2xhc3NlcyBpcwotY2xlYXIgd2hlbiByZWFkIGFsb25nc2lkZSB0aGUgZm9ybWFsIGdyYW1tYXIsIGJ1dCB0aGUgbWV0aG9kIHdoaWNoIHJlY3Vyc2l2ZWx5Ci1jcmVhdGVzIG5ldyBpbmZvcm1hdGlvbiBvYmplY3RzIHJlcXVpcmVzIGZ1cnRoZXIgZXhhbWluYXRpb24uICBIZXJlIGlzIHRoZQotcmVsZXZhbnQgcGFydCBvZiB0aGUgOmNsYXNzOmBTdWl0ZUluZm9CYXNlYCBkZWZpbml0aW9uIGZyb20gOmZpbGU6YGV4YW1wbGUucHlgOjoKLQotICAgY2xhc3MgU3VpdGVJbmZvQmFzZToKLSAgICAgICBfZG9jc3RyaW5nID0gJycKLSAgICAgICBfbmFtZSA9ICcnCi0KLSAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdHJlZSA9IE5vbmUpOgotICAgICAgICAgICBzZWxmLl9jbGFzc19pbmZvID0ge30KLSAgICAgICAgICAgc2VsZi5fZnVuY3Rpb25faW5mbyA9IHt9Ci0gICAgICAgICAgIGlmIHRyZWU6Ci0gICAgICAgICAgICAgICBzZWxmLl9leHRyYWN0X2luZm8odHJlZSkKLQotICAgICAgIGRlZiBfZXh0cmFjdF9pbmZvKHNlbGYsIHRyZWUpOgotICAgICAgICAgICAjIGV4dHJhY3QgZG9jc3RyaW5nCi0gICAgICAgICAgIGlmIGxlbih0cmVlKSA9PSAyOgotICAgICAgICAgICAgICAgZm91bmQsIHZhcnMgPSBtYXRjaChET0NTVFJJTkdfU1RNVF9QQVRURVJOWzFdLCB0cmVlWzFdKQotICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgZm91bmQsIHZhcnMgPSBtYXRjaChET0NTVFJJTkdfU1RNVF9QQVRURVJOLCB0cmVlWzNdKQotICAgICAgICAgICBpZiBmb3VuZDoKLSAgICAgICAgICAgICAgIHNlbGYuX2RvY3N0cmluZyA9IGV2YWwodmFyc1snZG9jc3RyaW5nJ10pCi0gICAgICAgICAgICMgZGlzY292ZXIgaW5uZXIgZGVmaW5pdGlvbnMKLSAgICAgICAgICAgZm9yIG5vZGUgaW4gdHJlZVsxOl06Ci0gICAgICAgICAgICAgICBmb3VuZCwgdmFycyA9IG1hdGNoKENPTVBPVU5EX1NUTVRfUEFUVEVSTiwgbm9kZSkKLSAgICAgICAgICAgICAgIGlmIGZvdW5kOgotICAgICAgICAgICAgICAgICAgIGNzdG10ID0gdmFyc1snY29tcG91bmQnXQotICAgICAgICAgICAgICAgICAgIGlmIGNzdG10WzBdID09IHN5bWJvbC5mdW5jZGVmOgotICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gY3N0bXRbMl1bMV0KLSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnVuY3Rpb25faW5mb1tuYW1lXSA9IEZ1bmN0aW9uSW5mbyhjc3RtdCkKLSAgICAgICAgICAgICAgICAgICBlbGlmIGNzdG10WzBdID09IHN5bWJvbC5jbGFzc2RlZjoKLSAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNzdG10WzJdWzFdCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NsYXNzX2luZm9bbmFtZV0gPSBDbGFzc0luZm8oY3N0bXQpCi0KLUFmdGVyIGluaXRpYWxpemluZyBzb21lIGludGVybmFsIHN0YXRlLCB0aGUgY29uc3RydWN0b3IgY2FsbHMgdGhlCi06bWV0aDpgX2V4dHJhY3RfaW5mb2AgbWV0aG9kLiAgVGhpcyBtZXRob2QgcGVyZm9ybXMgdGhlIGJ1bGsgb2YgdGhlIGluZm9ybWF0aW9uCi1leHRyYWN0aW9uIHdoaWNoIHRha2VzIHBsYWNlIGluIHRoZSBlbnRpcmUgZXhhbXBsZS4gIFRoZSBleHRyYWN0aW9uIGhhcyB0d28KLWRpc3RpbmN0IHBoYXNlczogdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2NzdHJpbmcgZm9yIHRoZSBwYXJzZSB0cmVlIHBhc3NlZCBpbiwgYW5kCi10aGUgZGlzY292ZXJ5IG9mIGFkZGl0aW9uYWwgZGVmaW5pdGlvbnMgd2l0aGluIHRoZSBjb2RlIGJsb2NrIHJlcHJlc2VudGVkIGJ5IHRoZQotcGFyc2UgdHJlZS4KLQotVGhlIGluaXRpYWwgOmtleXdvcmQ6YGlmYCB0ZXN0IGRldGVybWluZXMgd2hldGhlciB0aGUgbmVzdGVkIHN1aXRlIGlzIG9mIHRoZQotInNob3J0IGZvcm0iIG9yIHRoZSAibG9uZyBmb3JtLiIgIFRoZSBzaG9ydCBmb3JtIGlzIHVzZWQgd2hlbiB0aGUgY29kZSBibG9jayBpcwotb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29kZSBibG9jaywgYXMgaW4gOjoKLQotICAgZGVmIHNxdWFyZSh4KTogIlNxdWFyZSBhbiBhcmd1bWVudC4iOyByZXR1cm4geCAqKiAyCi0KLXdoaWxlIHRoZSBsb25nIGZvcm0gdXNlcyBhbiBpbmRlbnRlZCBibG9jayBhbmQgYWxsb3dzIG5lc3RlZCBkZWZpbml0aW9uczo6Ci0KLSAgIGRlZiBtYWtlX3Bvd2VyKGV4cCk6Ci0gICAgICAgIk1ha2UgYSBmdW5jdGlvbiB0aGF0IHJhaXNlcyBhbiBhcmd1bWVudCB0byB0aGUgZXhwb25lbnQgYGV4cGAuIgotICAgICAgIGRlZiByYWlzZXIoeCwgeT1leHApOgotICAgICAgICAgICByZXR1cm4geCAqKiB5Ci0gICAgICAgcmV0dXJuIHJhaXNlcgotCi1XaGVuIHRoZSBzaG9ydCBmb3JtIGlzIHVzZWQsIHRoZSBjb2RlIGJsb2NrIG1heSBjb250YWluIGEgZG9jc3RyaW5nIGFzIHRoZQotZmlyc3QsIGFuZCBwb3NzaWJseSBvbmx5LCA6Y29uc3Q6YHNtYWxsX3N0bXRgIGVsZW1lbnQuICBUaGUgZXh0cmFjdGlvbiBvZiBzdWNoIGEKLWRvY3N0cmluZyBpcyBzbGlnaHRseSBkaWZmZXJlbnQgYW5kIHJlcXVpcmVzIG9ubHkgYSBwb3J0aW9uIG9mIHRoZSBjb21wbGV0ZQotcGF0dGVybiB1c2VkIGluIHRoZSBtb3JlIGNvbW1vbiBjYXNlLiAgQXMgaW1wbGVtZW50ZWQsIHRoZSBkb2NzdHJpbmcgd2lsbCBvbmx5Ci1iZSBmb3VuZCBpZiB0aGVyZSBpcyBvbmx5IG9uZSA6Y29uc3Q6YHNtYWxsX3N0bXRgIG5vZGUgaW4gdGhlCi06Y29uc3Q6YHNpbXBsZV9zdG10YCBub2RlLiBTaW5jZSBtb3N0IGZ1bmN0aW9ucyBhbmQgbWV0aG9kcyB3aGljaCB1c2UgdGhlIHNob3J0Ci1mb3JtIGRvIG5vdCBwcm92aWRlIGEgZG9jc3RyaW5nLCB0aGlzIG1heSBiZSBjb25zaWRlcmVkIHN1ZmZpY2llbnQuICBUaGUKLWV4dHJhY3Rpb24gb2YgdGhlIGRvY3N0cmluZyBwcm9jZWVkcyB1c2luZyB0aGUgOmZ1bmM6YG1hdGNoYCBmdW5jdGlvbiBhcwotZGVzY3JpYmVkIGFib3ZlLCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBkb2NzdHJpbmcgaXMgc3RvcmVkIGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGUKLTpjbGFzczpgU3VpdGVJbmZvQmFzZWAgb2JqZWN0LgotCi1BZnRlciBkb2NzdHJpbmcgZXh0cmFjdGlvbiwgYSBzaW1wbGUgZGVmaW5pdGlvbiBkaXNjb3ZlcnkgYWxnb3JpdGhtIG9wZXJhdGVzIG9uCi10aGUgOmNvbnN0OmBzdG10YCBub2RlcyBvZiB0aGUgOmNvbnN0OmBzdWl0ZWAgbm9kZS4gIFRoZSBzcGVjaWFsIGNhc2Ugb2YgdGhlCi1zaG9ydCBmb3JtIGlzIG5vdCB0ZXN0ZWQ7IHNpbmNlIHRoZXJlIGFyZSBubyA6Y29uc3Q6YHN0bXRgIG5vZGVzIGluIHRoZSBzaG9ydAotZm9ybSwgdGhlIGFsZ29yaXRobSB3aWxsIHNpbGVudGx5IHNraXAgdGhlIHNpbmdsZSA6Y29uc3Q6YHNpbXBsZV9zdG10YCBub2RlIGFuZAotY29ycmVjdGx5IG5vdCBkaXNjb3ZlciBhbnkgbmVzdGVkIGRlZmluaXRpb25zLgotCi1FYWNoIHN0YXRlbWVudCBpbiB0aGUgY29kZSBibG9jayBpcyBjYXRlZ29yaXplZCBhcyBhIGNsYXNzIGRlZmluaXRpb24sIGZ1bmN0aW9uCi1vciBtZXRob2QgZGVmaW5pdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UuICBGb3IgdGhlIGRlZmluaXRpb24gc3RhdGVtZW50cywgdGhlCi1uYW1lIG9mIHRoZSBlbGVtZW50IGRlZmluZWQgaXMgZXh0cmFjdGVkIGFuZCBhIHJlcHJlc2VudGF0aW9uIG9iamVjdCBhcHByb3ByaWF0ZQotdG8gdGhlIGRlZmluaXRpb24gaXMgY3JlYXRlZCB3aXRoIHRoZSBkZWZpbmluZyBzdWJ0cmVlIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0bwotdGhlIGNvbnN0cnVjdG9yLiAgVGhlIHJlcHJlc2VudGF0aW9uIG9iamVjdHMgYXJlIHN0b3JlZCBpbiBpbnN0YW5jZSB2YXJpYWJsZXMKLWFuZCBtYXkgYmUgcmV0cmlldmVkIGJ5IG5hbWUgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGFjY2Vzc29yIG1ldGhvZHMuCi0KLVRoZSBwdWJsaWMgY2xhc3NlcyBwcm92aWRlIGFueSBhY2Nlc3NvcnMgcmVxdWlyZWQgd2hpY2ggYXJlIG1vcmUgc3BlY2lmaWMgdGhhbgotdGhvc2UgcHJvdmlkZWQgYnkgdGhlIDpjbGFzczpgU3VpdGVJbmZvQmFzZWAgY2xhc3MsIGJ1dCB0aGUgcmVhbCBleHRyYWN0aW9uCi1hbGdvcml0aG0gcmVtYWlucyBjb21tb24gdG8gYWxsIGZvcm1zIG9mIGNvZGUgYmxvY2tzLiAgQSBoaWdoLWxldmVsIGZ1bmN0aW9uIGNhbgotYmUgdXNlZCB0byBleHRyYWN0IHRoZSBjb21wbGV0ZSBzZXQgb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNvdXJjZSBmaWxlLiAgKFNlZQotZmlsZSA6ZmlsZTpgZXhhbXBsZS5weWAuKSA6OgotCi0gICBkZWYgZ2V0X2RvY3MoZmlsZU5hbWUpOgotICAgICAgIGltcG9ydCBvcwotICAgICAgIGltcG9ydCBwYXJzZXIKLQotICAgICAgIHNvdXJjZSA9IG9wZW4oZmlsZU5hbWUpLnJlYWQoKQotICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLnNwbGl0ZXh0KGZpbGVOYW1lKVswXSkKLSAgICAgICBzdCA9IHBhcnNlci5zdWl0ZShzb3VyY2UpCi0gICAgICAgcmV0dXJuIE1vZHVsZUluZm8oc3QudG90dXBsZSgpLCBiYXNlbmFtZSkKLQotVGhpcyBwcm92aWRlcyBhbiBlYXN5LXRvLXVzZSBpbnRlcmZhY2UgdG8gdGhlIGRvY3VtZW50YXRpb24gb2YgYSBtb2R1bGUuICBJZgotaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQgd2hpY2ggaXMgbm90IGV4dHJhY3RlZCBieSB0aGUgY29kZSBvZiB0aGlzIGV4YW1wbGUsIHRoZQotY29kZSBtYXkgYmUgZXh0ZW5kZWQgYXQgY2xlYXJseSBkZWZpbmVkIHBvaW50cyB0byBwcm92aWRlIGFkZGl0aW9uYWwKLWNhcGFiaWxpdGllcy4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGRiLnJzdCBiL0RvYy9saWJyYXJ5L3BkYi5yc3QKaW5kZXggN2YyMTk3ZS4uYTQ3NTA5OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGRiLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wZGIucnN0CkBAIC0xLDQgKzEsMyBAQAotCiAuLiBfZGVidWdnZXI6CiAKIDptb2Q6YHBkYmAgLS0tIFRoZSBQeXRob24gRGVidWdnZXIKQEAgLTc5LDEwICs3OCwxMCBAQAogICAgLT4gcHJpbnQgc3BhbQogICAgKFBkYikKIAorCiBUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM7IGVhY2ggZW50ZXJzIHRoZSBkZWJ1Z2dlciBpbiBhCiBzbGlnaHRseSBkaWZmZXJlbnQgd2F5OgogCi0KIC4uIGZ1bmN0aW9uOjogcnVuKHN0YXRlbWVudFssIGdsb2JhbHNbLCBsb2NhbHNdXSkKIAogICAgRXhlY3V0ZSB0aGUgKnN0YXRlbWVudCogKGdpdmVuIGFzIGEgc3RyaW5nKSB1bmRlciBkZWJ1Z2dlciBjb250cm9sLiAgVGhlCkBAIC0xMjYsNyArMTI1LDM4IEBACiAKIC4uIGZ1bmN0aW9uOjogcG0oKQogCi0gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIHRyYWNlYmFjayBmb3VuZCBpbiBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLgorICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW4KKyAgIDpkYXRhOmBzeXMubGFzdF90cmFjZWJhY2tgLgorCisKK1RoZSBgYHJ1bipgYCBmdW5jdGlvbnMgYW5kIDpmdW5jOmBzZXRfdHJhY2VgIGFyZSBhbGlhc2VzIGZvciBpbnN0YW50aWF0aW5nIHRoZQorOmNsYXNzOmBQZGJgIGNsYXNzIGFuZCBjYWxsaW5nIHRoZSBtZXRob2Qgb2YgdGhlIHNhbWUgbmFtZS4gIElmIHlvdSB3YW50IHRvCithY2Nlc3MgZnVydGhlciBmZWF0dXJlcywgeW91IGhhdmUgdG8gZG8gdGhpcyB5b3Vyc2VsZjoKKworLi4gY2xhc3M6OiBQZGIoY29tcGxldGVrZXk9J3RhYicsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBza2lwPU5vbmUpCisKKyAgIDpjbGFzczpgUGRiYCBpcyB0aGUgZGVidWdnZXIgY2xhc3MuCisKKyAgIFRoZSAqY29tcGxldGVrZXkqLCAqc3RkaW4qIGFuZCAqc3Rkb3V0KiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUKKyAgIHVuZGVybHlpbmcgOmNsYXNzOmBjbWQuQ21kYCBjbGFzczsgc2VlIHRoZSBkZXNjcmlwdGlvbiB0aGVyZS4KKworICAgVGhlICpza2lwKiBhcmd1bWVudCwgaWYgZ2l2ZW4sIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgZ2xvYi1zdHlsZSBtb2R1bGUgbmFtZQorICAgcGF0dGVybnMuICBUaGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIGZyYW1lcyB0aGF0IG9yaWdpbmF0ZSBpbiBhIG1vZHVsZQorICAgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSBwYXR0ZXJucy4gWzFdXworCisgICBFeGFtcGxlIGNhbGwgdG8gZW5hYmxlIHRyYWNpbmcgd2l0aCAqc2tpcCo6OgorCisgICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9WydkamFuZ28uKiddKS5zZXRfdHJhY2UoKQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKyAgICAgIFRoZSAqc2tpcCogYXJndW1lbnQuCisKKyAgIC4uIG1ldGhvZDo6IHJ1bihzdGF0ZW1lbnRbLCBnbG9iYWxzWywgbG9jYWxzXV0pCisgICAgICAgICAgICAgICBydW5ldmFsKGV4cHJlc3Npb25bLCBnbG9iYWxzWywgbG9jYWxzXV0pCisgICAgICAgICAgICAgICBydW5jYWxsKGZ1bmN0aW9uWywgYXJndW1lbnQsIC4uLl0pCisgICAgICAgICAgICAgICBzZXRfdHJhY2UoKQorCisgICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZXhwbGFpbmVkIGFib3ZlLgogCiAKIC4uIF9kZWJ1Z2dlci1jb21tYW5kczoKQEAgLTIwOSw3ICsyMzksOCBAQAogICAgVGVtcG9yYXJ5IGJyZWFrcG9pbnQsIHdoaWNoIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzIGZpcnN0IGhpdC4gIFRoZQogICAgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBicmVhay4KIAotY2woZWFyKSBbKmJwbnVtYmVyKiBbKmJwbnVtYmVyIC4uLipdXQorY2woZWFyKSBbKmZpbGVuYW1lOmxpbmVubyogfCAqYnBudW1iZXIqIFsqYnBudW1iZXIgLi4uKl1dCisgICBXaXRoIGEgKmZpbGVuYW1lOmxpbmVubyogYXJndW1lbnQsIGNsZWFyIGFsbCB0aGUgYnJlYWtwb2ludHMgYXQgdGhpcyBsaW5lLgogICAgV2l0aCBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGJyZWFrcG9pbnQgbnVtYmVycywgY2xlYXIgdGhvc2UgYnJlYWtwb2ludHMuCiAgICBXaXRob3V0IGFyZ3VtZW50LCBjbGVhciBhbGwgYnJlYWtzIChidXQgZmlyc3QgYXNrIGNvbmZpcm1hdGlvbikuCiAKQEAgLTM2MCwzICszOTEsOSBAQAogCiBxKHVpdCkKICAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuIFRoZSBwcm9ncmFtIGJlaW5nIGV4ZWN1dGVkIGlzIGFib3J0ZWQuCisKKworLi4gcnVicmljOjogRm9vdG5vdGVzCisKKy4uIFsxXSBXaGV0aGVyIGEgZnJhbWUgaXMgY29uc2lkZXJlZCB0byBvcmlnaW5hdGUgaW4gYSBjZXJ0YWluIG1vZHVsZQorICAgICAgIGlzIGRldGVybWluZWQgYnkgdGhlIGBgX19uYW1lX19gYCBpbiB0aGUgZnJhbWUgZ2xvYmFscy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QgYi9Eb2MvbGlicmFyeS9waWNrbGUucnN0CmluZGV4IGEzZTVhZDQuLjIyMTY1ZjkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGlja2xlLnJzdApAQCAtMjUsNiArMjUsMTIgQEAKIFRoaXMgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgYm90aCB0aGUgOm1vZDpgcGlja2xlYCBtb2R1bGUgYW5kIHRoZQogOm1vZDpgY1BpY2tsZWAgbW9kdWxlLgogCisuLiB3YXJuaW5nOjoKKworICAgVGhlIDptb2Q6YHBpY2tsZWAgbW9kdWxlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZWN1cmUgYWdhaW5zdCBlcnJvbmVvdXMgb3IKKyAgIG1hbGljaW91c2x5IGNvbnN0cnVjdGVkIGRhdGEuICBOZXZlciB1bnBpY2tsZSBkYXRhIHJlY2VpdmVkIGZyb20gYW4gdW50cnVzdGVkCisgICBvciB1bmF1dGhlbnRpY2F0ZWQgc291cmNlLgorCiAKIFJlbGF0aW9uc2hpcCB0byBvdGhlciBQeXRob24gbW9kdWxlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00Nyw3ICs1Myw3IEBACiBvYmplY3RzLiAgOm1vZDpgbWFyc2hhbGAgZXhpc3RzIHByaW1hcmlseSB0byBzdXBwb3J0IFB5dGhvbidzIDpmaWxlOmAucHljYAogZmlsZXMuCiAKLVRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBkaWZmZXJzIGZyb20gOm1vZDpgbWFyc2hhbGAgc2V2ZXJhbCBzaWduaWZpY2FudCB3YXlzOgorVGhlIDptb2Q6YHBpY2tsZWAgbW9kdWxlIGRpZmZlcnMgZnJvbSA6bW9kOmBtYXJzaGFsYCBpbiBzZXZlcmFsIHNpZ25pZmljYW50IHdheXM6CiAKICogVGhlIDptb2Q6YHBpY2tsZWAgbW9kdWxlIGtlZXBzIHRyYWNrIG9mIHRoZSBvYmplY3RzIGl0IGhhcyBhbHJlYWR5IHNlcmlhbGl6ZWQsCiAgIHNvIHRoYXQgbGF0ZXIgcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBvYmplY3Qgd29uJ3QgYmUgc2VyaWFsaXplZCBhZ2Fpbi4KQEAgLTc0LDEyICs4MCw2IEBACiAgIFRoZSA6bW9kOmBwaWNrbGVgIHNlcmlhbGl6YXRpb24gZm9ybWF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYmFja3dhcmRzIGNvbXBhdGlibGUKICAgYWNyb3NzIFB5dGhvbiByZWxlYXNlcy4KIAotLi4gd2FybmluZzo6Ci0KLSAgIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VjdXJlIGFnYWluc3QgZXJyb25lb3VzIG9yCi0gICBtYWxpY2lvdXNseSBjb25zdHJ1Y3RlZCBkYXRhLiAgTmV2ZXIgdW5waWNrbGUgZGF0YSByZWNlaXZlZCBmcm9tIGFuIHVudHJ1c3RlZAotICAgb3IgdW5hdXRoZW50aWNhdGVkIHNvdXJjZS4KLQogTm90ZSB0aGF0IHNlcmlhbGl6YXRpb24gaXMgYSBtb3JlIHByaW1pdGl2ZSBub3Rpb24gdGhhbiBwZXJzaXN0ZW5jZTsgYWx0aG91Z2gKIDptb2Q6YHBpY2tsZWAgcmVhZHMgYW5kIHdyaXRlcyBmaWxlIG9iamVjdHMsIGl0IGRvZXMgbm90IGhhbmRsZSB0aGUgaXNzdWUgb2YKIG5hbWluZyBwZXJzaXN0ZW50IG9iamVjdHMsIG5vciB0aGUgKGV2ZW4gbW9yZSBjb21wbGljYXRlZCkgaXNzdWUgb2YgY29uY3VycmVudApAQCAtNDQ0LDcgKzQ0NCw3IEBACiAgICBpbnN0YW5jZSdzIGRpY3Rpb25hcnkuICBJZiB0aGVyZSBpcyBubyA6bWV0aDpgX19nZXRzdGF0ZV9fYCBtZXRob2QsIHRoZQogICAgaW5zdGFuY2UncyA6YXR0cjpgX19kaWN0X19gIGlzIHBpY2tsZWQuCiAKLS4uIG1ldGhvZDo6IG9iamVjdC5fX3NldHN0YXRlX18oKQorLi4gbWV0aG9kOjogb2JqZWN0Ll9fc2V0c3RhdGVfXyhzdGF0ZSkKIAogICAgVXBvbiB1bnBpY2tsaW5nLCBpZiB0aGUgY2xhc3MgYWxzbyBkZWZpbmVzIHRoZSBtZXRob2QgOm1ldGg6YF9fc2V0c3RhdGVfX2AsCiAgICBpdCBpcyBjYWxsZWQgd2l0aCB0aGUgdW5waWNrbGVkIHN0YXRlLiBbI11fIElmIHRoZXJlIGlzIG5vCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdCBiL0RvYy9saWJyYXJ5L3BrZ3V0aWwucnN0CmluZGV4IDUxODkzNzcuLjllNjM0ZDYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BrZ3V0aWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BrZ3V0aWwucnN0CkBAIC0zLDYyICszLDE4NyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogcGtndXRpbAotICAgOnN5bm9wc2lzOiBVdGlsaXRpZXMgdG8gc3VwcG9ydCBleHRlbnNpb24gb2YgcGFja2FnZXMuCisgICA6c3lub3BzaXM6IFV0aWxpdGllcyBmb3IgdGhlIGltcG9ydCBzeXN0ZW0uCiAKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdGllcyBmb3IgdGhlIGltcG9ydCBzeXN0ZW0sIGluIHBhcnRpY3VsYXIgcGFja2FnZQorc3VwcG9ydC4KIAogLi4gdmVyc2lvbmFkZGVkOjogMi4zCiAKLVRoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHBhY2thZ2VzOgotCiAKIC4uIGZ1bmN0aW9uOjogZXh0ZW5kX3BhdGgocGF0aCwgbmFtZSkKIAotICAgRXh0ZW5kIHRoZSBzZWFyY2ggcGF0aCBmb3IgdGhlIG1vZHVsZXMgd2hpY2ggY29tcHJpc2UgYSBwYWNrYWdlLiBJbnRlbmRlZCB1c2UgaXMKLSAgIHRvIHBsYWNlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBhIHBhY2thZ2UncyA6ZmlsZTpgX19pbml0X18ucHlgOjoKKyAgIEV4dGVuZCB0aGUgc2VhcmNoIHBhdGggZm9yIHRoZSBtb2R1bGVzIHdoaWNoIGNvbXByaXNlIGEgcGFja2FnZS4gIEludGVuZGVkCisgICB1c2UgaXMgdG8gcGxhY2UgdGhlIGZvbGxvd2luZyBjb2RlIGluIGEgcGFja2FnZSdzIDpmaWxlOmBfX2luaXRfXy5weWA6OgogCiAgICAgICBmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCiAgICAgICBfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKIAotICAgVGhpcyB3aWxsIGFkZCB0byB0aGUgcGFja2FnZSdzIGBgX19wYXRoX19gYCBhbGwgc3ViZGlyZWN0b3JpZXMgb2YgZGlyZWN0b3JpZXMgb24KLSAgIGBgc3lzLnBhdGhgYCBuYW1lZCBhZnRlciB0aGUgcGFja2FnZS4gIFRoaXMgaXMgdXNlZnVsIGlmIG9uZSB3YW50cyB0byBkaXN0cmlidXRlCi0gICBkaWZmZXJlbnQgcGFydHMgb2YgYSBzaW5nbGUgbG9naWNhbCBwYWNrYWdlIGFzIG11bHRpcGxlIGRpcmVjdG9yaWVzLgorICAgVGhpcyB3aWxsIGFkZCB0byB0aGUgcGFja2FnZSdzIGBgX19wYXRoX19gYCBhbGwgc3ViZGlyZWN0b3JpZXMgb2YgZGlyZWN0b3JpZXMKKyAgIG9uIGBgc3lzLnBhdGhgYCBuYW1lZCBhZnRlciB0aGUgcGFja2FnZS4gIFRoaXMgaXMgdXNlZnVsIGlmIG9uZSB3YW50cyB0bworICAgZGlzdHJpYnV0ZSBkaWZmZXJlbnQgcGFydHMgb2YgYSBzaW5nbGUgbG9naWNhbCBwYWNrYWdlIGFzIG11bHRpcGxlCisgICBkaXJlY3Rvcmllcy4KIAotICAgSXQgYWxzbyBsb29rcyBmb3IgOmZpbGU6YFwqLnBrZ2AgZmlsZXMgYmVnaW5uaW5nIHdoZXJlIGBgKmBgIG1hdGNoZXMgdGhlICpuYW1lKgotICAgYXJndW1lbnQuICBUaGlzIGZlYXR1cmUgaXMgc2ltaWxhciB0byA6ZmlsZTpgXCoucHRoYCBmaWxlcyAoc2VlIHRoZSA6bW9kOmBzaXRlYAotICAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uKSwgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBzcGVjaWFsLWNhc2UgbGluZXMgc3RhcnRpbmcKLSAgIHdpdGggYGBpbXBvcnRgYC4gIEEgOmZpbGU6YFwqLnBrZ2AgZmlsZSBpcyB0cnVzdGVkIGF0IGZhY2UgdmFsdWU6IGFwYXJ0IGZyb20KLSAgIGNoZWNraW5nIGZvciBkdXBsaWNhdGVzLCBhbGwgZW50cmllcyBmb3VuZCBpbiBhIDpmaWxlOmBcKi5wa2dgIGZpbGUgYXJlIGFkZGVkIHRvCi0gICB0aGUgcGF0aCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgZXhpc3Qgb24gdGhlIGZpbGVzeXN0ZW0uICAoVGhpcyBpcyBhCi0gICBmZWF0dXJlLikKKyAgIEl0IGFsc28gbG9va3MgZm9yIDpmaWxlOmBcKi5wa2dgIGZpbGVzIGJlZ2lubmluZyB3aGVyZSBgYCpgYCBtYXRjaGVzIHRoZQorICAgKm5hbWUqIGFyZ3VtZW50LiAgVGhpcyBmZWF0dXJlIGlzIHNpbWlsYXIgdG8gOmZpbGU6YFwqLnB0aGAgZmlsZXMgKHNlZSB0aGUKKyAgIDptb2Q6YHNpdGVgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiksIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3Qgc3BlY2lhbC1jYXNlCisgICBsaW5lcyBzdGFydGluZyB3aXRoIGBgaW1wb3J0YGAuICBBIDpmaWxlOmBcKi5wa2dgIGZpbGUgaXMgdHJ1c3RlZCBhdCBmYWNlCisgICB2YWx1ZTogYXBhcnQgZnJvbSBjaGVja2luZyBmb3IgZHVwbGljYXRlcywgYWxsIGVudHJpZXMgZm91bmQgaW4gYQorICAgOmZpbGU6YFwqLnBrZ2AgZmlsZSBhcmUgYWRkZWQgdG8gdGhlIHBhdGgsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGV4aXN0CisgICBvbiB0aGUgZmlsZXN5c3RlbS4gIChUaGlzIGlzIGEgZmVhdHVyZS4pCiAKICAgIElmIHRoZSBpbnB1dCBwYXRoIGlzIG5vdCBhIGxpc3QgKGFzIGlzIHRoZSBjYXNlIGZvciBmcm96ZW4gcGFja2FnZXMpIGl0IGlzCiAgICByZXR1cm5lZCB1bmNoYW5nZWQuICBUaGUgaW5wdXQgcGF0aCBpcyBub3QgbW9kaWZpZWQ7IGFuIGV4dGVuZGVkIGNvcHkgaXMKICAgIHJldHVybmVkLiAgSXRlbXMgYXJlIG9ubHkgYXBwZW5kZWQgdG8gdGhlIGNvcHkgYXQgdGhlIGVuZC4KIAotICAgSXQgaXMgYXNzdW1lZCB0aGF0IGBgc3lzLnBhdGhgYCBpcyBhIHNlcXVlbmNlLiAgSXRlbXMgb2YgYGBzeXMucGF0aGBgIHRoYXQgYXJlCi0gICBub3QgKFVuaWNvZGUgb3IgOC1iaXQpIHN0cmluZ3MgcmVmZXJyaW5nIHRvIGV4aXN0aW5nIGRpcmVjdG9yaWVzIGFyZSBpZ25vcmVkLgotICAgVW5pY29kZSBpdGVtcyBvbiBgYHN5cy5wYXRoYGAgdGhhdCBjYXVzZSBlcnJvcnMgd2hlbiB1c2VkIGFzIGZpbGVuYW1lcyBtYXkgY2F1c2UKLSAgIHRoaXMgZnVuY3Rpb24gdG8gcmFpc2UgYW4gZXhjZXB0aW9uIChpbiBsaW5lIHdpdGggOmZ1bmM6YG9zLnBhdGguaXNkaXJgCi0gICBiZWhhdmlvcikuCisgICBJdCBpcyBhc3N1bWVkIHRoYXQgOmRhdGE6YHN5cy5wYXRoYCBpcyBhIHNlcXVlbmNlLiAgSXRlbXMgb2YgOmRhdGE6YHN5cy5wYXRoYAorICAgdGhhdCBhcmUgbm90IChVbmljb2RlIG9yIDgtYml0KSBzdHJpbmdzIHJlZmVycmluZyB0byBleGlzdGluZyBkaXJlY3RvcmllcyBhcmUKKyAgIGlnbm9yZWQuICBVbmljb2RlIGl0ZW1zIG9uIDpkYXRhOmBzeXMucGF0aGAgdGhhdCBjYXVzZSBlcnJvcnMgd2hlbiB1c2VkIGFzCisgICBmaWxlbmFtZXMgbWF5IGNhdXNlIHRoaXMgZnVuY3Rpb24gdG8gcmFpc2UgYW4gZXhjZXB0aW9uIChpbiBsaW5lIHdpdGgKKyAgIDpmdW5jOmBvcy5wYXRoLmlzZGlyYCBiZWhhdmlvcikuCisKKworLi4gY2xhc3M6OiBJbXBJbXBvcnRlcihkaXJuYW1lPU5vbmUpCisKKyAgIDpwZXA6YDMwMmAgSW1wb3J0ZXIgdGhhdCB3cmFwcyBQeXRob24ncyAiY2xhc3NpYyIgaW1wb3J0IGFsZ29yaXRobS4KKworICAgSWYgKmRpcm5hbWUqIGlzIGEgc3RyaW5nLCBhIDpwZXA6YDMwMmAgaW1wb3J0ZXIgaXMgY3JlYXRlZCB0aGF0IHNlYXJjaGVzIHRoYXQKKyAgIGRpcmVjdG9yeS4gIElmICpkaXJuYW1lKiBpcyBgYE5vbmVgYCwgYSA6cGVwOmAzMDJgIGltcG9ydGVyIGlzIGNyZWF0ZWQgdGhhdAorICAgc2VhcmNoZXMgdGhlIGN1cnJlbnQgOmRhdGE6YHN5cy5wYXRoYCwgcGx1cyBhbnkgbW9kdWxlcyB0aGF0IGFyZSBmcm96ZW4gb3IKKyAgIGJ1aWx0LWluLgorCisgICBOb3RlIHRoYXQgOmNsYXNzOmBJbXBJbXBvcnRlcmAgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgYmVpbmcgdXNlZCBieQorICAgcGxhY2VtZW50IG9uIDpkYXRhOmBzeXMubWV0YV9wYXRoYC4KKworCisuLiBjbGFzczo6IEltcExvYWRlcihmdWxsbmFtZSwgZmlsZSwgZmlsZW5hbWUsIGV0YykKKworICAgOnBlcDpgMzAyYCBMb2FkZXIgdGhhdCB3cmFwcyBQeXRob24ncyAiY2xhc3NpYyIgaW1wb3J0IGFsZ29yaXRobS4KKworCisuLiBmdW5jdGlvbjo6IGZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorCisgICBGaW5kIGEgOnBlcDpgMzAyYCAibG9hZGVyIiBvYmplY3QgZm9yICpmdWxsbmFtZSouCisKKyAgIElmICpmdWxsbmFtZSogY29udGFpbnMgZG90cywgcGF0aCBtdXN0IGJlIHRoZSBjb250YWluaW5nIHBhY2thZ2UncworICAgYGBfX3BhdGhfX2BgLiAgUmV0dXJucyBgYE5vbmVgYCBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZCBvciBpbXBvcnRlZC4KKyAgIFRoaXMgZnVuY3Rpb24gdXNlcyA6ZnVuYzpgaXRlcl9pbXBvcnRlcnNgLCBhbmQgaXMgdGh1cyBzdWJqZWN0IHRvIHRoZSBzYW1lCisgICBsaW1pdGF0aW9ucyByZWdhcmRpbmcgcGxhdGZvcm0tc3BlY2lmaWMgc3BlY2lhbCBpbXBvcnQgbG9jYXRpb25zIHN1Y2ggYXMgdGhlCisgICBXaW5kb3dzIHJlZ2lzdHJ5LgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2ltcG9ydGVyKHBhdGhfaXRlbSkKKworICAgUmV0cmlldmUgYSA6cGVwOmAzMDJgIGltcG9ydGVyIGZvciB0aGUgZ2l2ZW4gKnBhdGhfaXRlbSouCisKKyAgIFRoZSByZXR1cm5lZCBpbXBvcnRlciBpcyBjYWNoZWQgaW4gOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBpZiBpdCB3YXMKKyAgIG5ld2x5IGNyZWF0ZWQgYnkgYSBwYXRoIGhvb2suCisKKyAgIElmIHRoZXJlIGlzIG5vIGltcG9ydGVyLCBhIHdyYXBwZXIgYXJvdW5kIHRoZSBiYXNpYyBpbXBvcnQgbWFjaGluZXJ5IGlzCisgICByZXR1cm5lZC4gIFRoaXMgd3JhcHBlciBpcyBuZXZlciBpbnNlcnRlZCBpbnRvIHRoZSBpbXBvcnRlciBjYWNoZSAoYGBOb25lYGAKKyAgIGlzIGluc2VydGVkIGluc3RlYWQpLgorCisgICBUaGUgY2FjaGUgKG9yIHBhcnQgb2YgaXQpIGNhbiBiZSBjbGVhcmVkIG1hbnVhbGx5IGlmIGEgcmVzY2FuIG9mCisgICA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGlzIG5lY2Vzc2FyeS4KKworCisuLiBmdW5jdGlvbjo6IGdldF9sb2FkZXIobW9kdWxlX29yX25hbWUpCisKKyAgIEdldCBhIDpwZXA6YDMwMmAgImxvYWRlciIgb2JqZWN0IGZvciAqbW9kdWxlX29yX25hbWUqLgorCisgICBJZiB0aGUgbW9kdWxlIG9yIHBhY2thZ2UgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIG5vcm1hbCBpbXBvcnQgbWVjaGFuaXNtLCBhCisgICB3cmFwcGVyIGFyb3VuZCB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGF0IG1hY2hpbmVyeSBpcyByZXR1cm5lZC4gIFJldHVybnMKKyAgIGBgTm9uZWBgIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kIG9yIGltcG9ydGVkLiAgSWYgdGhlIG5hbWVkIG1vZHVsZSBpcworICAgbm90IGFscmVhZHkgaW1wb3J0ZWQsIGl0cyBjb250YWluaW5nIHBhY2thZ2UgKGlmIGFueSkgaXMgaW1wb3J0ZWQsIGluIG9yZGVyCisgICB0byBlc3RhYmxpc2ggdGhlIHBhY2thZ2UgYGBfX3BhdGhfX2BgLgorCisgICBUaGlzIGZ1bmN0aW9uIHVzZXMgOmZ1bmM6YGl0ZXJfaW1wb3J0ZXJzYCwgYW5kIGlzIHRodXMgc3ViamVjdCB0byB0aGUgc2FtZQorICAgbGltaXRhdGlvbnMgcmVnYXJkaW5nIHBsYXRmb3JtLXNwZWNpZmljIHNwZWNpYWwgaW1wb3J0IGxvY2F0aW9ucyBzdWNoIGFzIHRoZQorICAgV2luZG93cyByZWdpc3RyeS4KKworCisuLiBmdW5jdGlvbjo6IGl0ZXJfaW1wb3J0ZXJzKGZ1bGxuYW1lPScnKQorCisgICBZaWVsZCA6cGVwOmAzMDJgIGltcG9ydGVycyBmb3IgdGhlIGdpdmVuIG1vZHVsZSBuYW1lLgorCisgICBJZiBmdWxsbmFtZSBjb250YWlucyBhICcuJywgdGhlIGltcG9ydGVycyB3aWxsIGJlIGZvciB0aGUgcGFja2FnZSBjb250YWluaW5nCisgICBmdWxsbmFtZSwgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSBpbXBvcnRlcnMgZm9yIDpkYXRhOmBzeXMubWV0YV9wYXRoYCwKKyAgIDpkYXRhOmBzeXMucGF0aGAsIGFuZCBQeXRob24ncyAiY2xhc3NpYyIgaW1wb3J0IG1hY2hpbmVyeSwgaW4gdGhhdCBvcmRlci4gIElmCisgICB0aGUgbmFtZWQgbW9kdWxlIGlzIGluIGEgcGFja2FnZSwgdGhhdCBwYWNrYWdlIGlzIGltcG9ydGVkIGFzIGEgc2lkZSBlZmZlY3QKKyAgIG9mIGludm9raW5nIHRoaXMgZnVuY3Rpb24uCisKKyAgIE5vbi06cGVwOmAzMDJgIG1lY2hhbmlzbXMgKGUuZy4gdGhlIFdpbmRvd3MgcmVnaXN0cnkpIHVzZWQgYnkgdGhlIHN0YW5kYXJkCisgICBpbXBvcnQgbWFjaGluZXJ5IHRvIGZpbmQgZmlsZXMgaW4gYWx0ZXJuYXRpdmUgbG9jYXRpb25zIGFyZSBwYXJ0aWFsbHkKKyAgIHN1cHBvcnRlZCwgYnV0IGFyZSBzZWFyY2hlZCAqYWZ0ZXIqIDpkYXRhOmBzeXMucGF0aGAuICBOb3JtYWxseSwgdGhlc2UKKyAgIGxvY2F0aW9ucyBhcmUgc2VhcmNoZWQgKmJlZm9yZSogOmRhdGE6YHN5cy5wYXRoYCwgcHJldmVudGluZyA6ZGF0YTpgc3lzLnBhdGhgCisgICBlbnRyaWVzIGZyb20gc2hhZG93aW5nIHRoZW0uCisKKyAgIEZvciB0aGlzIHRvIGNhdXNlIGEgdmlzaWJsZSBkaWZmZXJlbmNlIGluIGJlaGF2aW91ciwgdGhlcmUgbXVzdCBiZSBhIG1vZHVsZQorICAgb3IgcGFja2FnZSBuYW1lIHRoYXQgaXMgYWNjZXNzaWJsZSB2aWEgYm90aCA6ZGF0YTpgc3lzLnBhdGhgIGFuZCBvbmUgb2YgdGhlCisgICBub24tOnBlcDpgMzAyYCBmaWxlIHN5c3RlbSBtZWNoYW5pc21zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZW11bGF0aW9uIHdpbGwgZmluZAorICAgdGhlIGZvcm1lciB2ZXJzaW9uLCB3aGlsZSB0aGUgYnVpbHRpbiBpbXBvcnQgbWVjaGFuaXNtIHdpbGwgZmluZCB0aGUgbGF0dGVyLgorCisgICBJdGVtcyBvZiB0aGUgZm9sbG93aW5nIHR5cGVzIGNhbiBiZSBhZmZlY3RlZCBieSB0aGlzIGRpc2NyZXBhbmN5OgorICAgYGBpbXAuQ19FWFRFTlNJT05gYCwgYGBpbXAuUFlfU09VUkNFYGAsIGBgaW1wLlBZX0NPTVBJTEVEYGAsCisgICBgYGltcC5QS0dfRElSRUNUT1JZYGAuCisKKworLi4gZnVuY3Rpb246OiBpdGVyX21vZHVsZXMocGF0aD1Ob25lLCBwcmVmaXg9JycpCisKKyAgIFlpZWxkcyBgYChtb2R1bGVfbG9hZGVyLCBuYW1lLCBpc3BrZylgYCBmb3IgYWxsIHN1Ym1vZHVsZXMgb24gKnBhdGgqLCBvciwgaWYKKyAgIHBhdGggaXMgYGBOb25lYGAsIGFsbCB0b3AtbGV2ZWwgbW9kdWxlcyBvbiBgYHN5cy5wYXRoYGAuCisKKyAgICpwYXRoKiBzaG91bGQgYmUgZWl0aGVyIGBgTm9uZWBgIG9yIGEgbGlzdCBvZiBwYXRocyB0byBsb29rIGZvciBtb2R1bGVzIGluLgorCisgICAqcHJlZml4KiBpcyBhIHN0cmluZyB0byBvdXRwdXQgb24gdGhlIGZyb250IG9mIGV2ZXJ5IG1vZHVsZSBuYW1lIG9uIG91dHB1dC4KKworCisuLiBmdW5jdGlvbjo6IHdhbGtfcGFja2FnZXMocGF0aD1Ob25lLCBwcmVmaXg9JycsIG9uZXJyb3I9Tm9uZSkKKworICAgWWllbGRzIGBgKG1vZHVsZV9sb2FkZXIsIG5hbWUsIGlzcGtnKWBgIGZvciBhbGwgbW9kdWxlcyByZWN1cnNpdmVseSBvbgorICAgKnBhdGgqLCBvciwgaWYgcGF0aCBpcyBgYE5vbmVgYCwgYWxsIGFjY2Vzc2libGUgbW9kdWxlcy4KKworICAgKnBhdGgqIHNob3VsZCBiZSBlaXRoZXIgYGBOb25lYGAgb3IgYSBsaXN0IG9mIHBhdGhzIHRvIGxvb2sgZm9yIG1vZHVsZXMgaW4uCisKKyAgICpwcmVmaXgqIGlzIGEgc3RyaW5nIHRvIG91dHB1dCBvbiB0aGUgZnJvbnQgb2YgZXZlcnkgbW9kdWxlIG5hbWUgb24gb3V0cHV0LgorCisgICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXN0IGltcG9ydCBhbGwgKnBhY2thZ2VzKiAoKm5vdCogYWxsIG1vZHVsZXMhKSBvbgorICAgdGhlIGdpdmVuICpwYXRoKiwgaW4gb3JkZXIgdG8gYWNjZXNzIHRoZSBgYF9fcGF0aF9fYGAgYXR0cmlidXRlIHRvIGZpbmQKKyAgIHN1Ym1vZHVsZXMuCisKKyAgICpvbmVycm9yKiBpcyBhIGZ1bmN0aW9uIHdoaWNoIGdldHMgY2FsbGVkIHdpdGggb25lIGFyZ3VtZW50ICh0aGUgbmFtZSBvZiB0aGUKKyAgIHBhY2thZ2Ugd2hpY2ggd2FzIGJlaW5nIGltcG9ydGVkKSBpZiBhbnkgZXhjZXB0aW9uIG9jY3VycyB3aGlsZSB0cnlpbmcgdG8KKyAgIGltcG9ydCBhIHBhY2thZ2UuICBJZiBubyAqb25lcnJvciogZnVuY3Rpb24gaXMgc3VwcGxpZWQsIDpleGM6YEltcG9ydEVycm9yYFxzCisgICBhcmUgY2F1Z2h0IGFuZCBpZ25vcmVkLCB3aGlsZSBhbGwgb3RoZXIgZXhjZXB0aW9ucyBhcmUgcHJvcGFnYXRlZCwKKyAgIHRlcm1pbmF0aW5nIHRoZSBzZWFyY2guCisKKyAgIEV4YW1wbGVzOjoKKworICAgICAgIyBsaXN0IGFsbCBtb2R1bGVzIHB5dGhvbiBjYW4gYWNjZXNzCisgICAgICB3YWxrX3BhY2thZ2VzKCkKKworICAgICAgIyBsaXN0IGFsbCBzdWJtb2R1bGVzIG9mIGN0eXBlcworICAgICAgd2Fsa19wYWNrYWdlcyhjdHlwZXMuX19wYXRoX18sIGN0eXBlcy5fX25hbWVfXyArICcuJykKKwogCiAuLiBmdW5jdGlvbjo6IGdldF9kYXRhKHBhY2thZ2UsIHJlc291cmNlKQogCiAgICBHZXQgYSByZXNvdXJjZSBmcm9tIGEgcGFja2FnZS4KIAotICAgVGhpcyBpcyBhIHdyYXBwZXIgZm9yIHRoZSA6cGVwOmAzMDJgIGxvYWRlciA6ZnVuYzpgZ2V0X2RhdGFgIEFQSS4gVGhlIHBhY2thZ2UKLSAgIGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiBhIHBhY2thZ2UsIGluIHN0YW5kYXJkIG1vZHVsZSBmb3JtYXQKLSAgIChmb28uYmFyKS4gVGhlIHJlc291cmNlIGFyZ3VtZW50IHNob3VsZCBiZSBpbiB0aGUgZm9ybSBvZiBhIHJlbGF0aXZlCi0gICBmaWxlbmFtZSwgdXNpbmcgYGAvYGAgYXMgdGhlIHBhdGggc2VwYXJhdG9yLiBUaGUgcGFyZW50IGRpcmVjdG9yeSBuYW1lCisgICBUaGlzIGlzIGEgd3JhcHBlciBmb3IgdGhlIDpwZXA6YDMwMmAgbG9hZGVyIDpmdW5jOmBnZXRfZGF0YWAgQVBJLiAgVGhlCisgICAqcGFja2FnZSogYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIGEgcGFja2FnZSwgaW4gc3RhbmRhcmQgbW9kdWxlIGZvcm1hdAorICAgKGBgZm9vLmJhcmBgKS4gIFRoZSAqcmVzb3VyY2UqIGFyZ3VtZW50IHNob3VsZCBiZSBpbiB0aGUgZm9ybSBvZiBhIHJlbGF0aXZlCisgICBmaWxlbmFtZSwgdXNpbmcgYGAvYGAgYXMgdGhlIHBhdGggc2VwYXJhdG9yLiAgVGhlIHBhcmVudCBkaXJlY3RvcnkgbmFtZQogICAgYGAuLmBgIGlzIG5vdCBhbGxvd2VkLCBhbmQgbm9yIGlzIGEgcm9vdGVkIG5hbWUgKHN0YXJ0aW5nIHdpdGggYSBgYC9gYCkuCiAKLSAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgYmluYXJ5IHN0cmluZyB0aGF0IGlzIHRoZSBjb250ZW50cyBvZiB0aGUKLSAgIHNwZWNpZmllZCByZXNvdXJjZS4KKyAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgYmluYXJ5IHN0cmluZyB0aGF0IGlzIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkCisgICByZXNvdXJjZS4KIAogICAgRm9yIHBhY2thZ2VzIGxvY2F0ZWQgaW4gdGhlIGZpbGVzeXN0ZW0sIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGltcG9ydGVkLAogICAgdGhpcyBpcyB0aGUgcm91Z2ggZXF1aXZhbGVudCBvZjo6CiAKLSAgICAgICBkID0gb3MucGF0aC5kaXJuYW1lKHN5cy5tb2R1bGVzW3BhY2thZ2VdLl9fZmlsZV9fKQotICAgICAgIGRhdGEgPSBvcGVuKG9zLnBhdGguam9pbihkLCByZXNvdXJjZSksICdyYicpLnJlYWQoKQorICAgICAgZCA9IG9zLnBhdGguZGlybmFtZShzeXMubW9kdWxlc1twYWNrYWdlXS5fX2ZpbGVfXykKKyAgICAgIGRhdGEgPSBvcGVuKG9zLnBhdGguam9pbihkLCByZXNvdXJjZSksICdyYicpLnJlYWQoKQogCiAgICBJZiB0aGUgcGFja2FnZSBjYW5ub3QgYmUgbG9jYXRlZCBvciBsb2FkZWQsIG9yIGl0IHVzZXMgYSA6cGVwOmAzMDJgIGxvYWRlcgotICAgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCA6ZnVuYzpgZ2V0X2RhdGFgLCB0aGVuIE5vbmUgaXMgcmV0dXJuZWQuCisgICB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IDpmdW5jOmBnZXRfZGF0YWAsIHRoZW4gYGBOb25lYGAgaXMgcmV0dXJuZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wbGF0Zm9ybS5yc3QgYi9Eb2MvbGlicmFyeS9wbGF0Zm9ybS5yc3QKaW5kZXggYjk4ZDk5Mi4uNzgwMjQyMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGxhdGZvcm0ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BsYXRmb3JtLnJzdApAQCAtMzgsNiArMzgsMTYgQEAKICAgIGFuZCB0aGVuIG9ubHkgaWYgdGhlIGV4ZWN1dGFibGUgcG9pbnRzIHRvIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBSZWFzb25hYmxlCiAgICBkZWZhdWx0cyBhcmUgdXNlZCB3aGVuIHRoZSBhYm92ZSBuZWVkcyBhcmUgbm90IG1ldC4KIAorICAgLi4gbm90ZTo6CisKKyAgICAgIE9uIE1hYyBPUyBYIChhbmQgcGVyaGFwcyBvdGhlciBwbGF0Zm9ybXMpLCBleGVjdXRhYmxlIGZpbGVzIG1heSBiZQorICAgICAgdW5pdmVyc2FsIGZpbGVzIGNvbnRhaW5pbmcgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcy4KKworICAgICAgVG8gZ2V0IGF0IHRoZSAiNjQtYml0bmVzcyIgb2YgdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIsIGl0IGlzIG1vcmUKKyAgICAgIHJlbGlhYmxlIHRvIHF1ZXJ5IHRoZSA6YXR0cjpgc3lzLm1heHNpemVgIGF0dHJpYnV0ZTo6CisKKyAgICAgICAgIGlzXzY0Yml0cyA9IHN5cy5tYXhzaXplID4gMioqMzIKKwogCiAuLiBmdW5jdGlvbjo6IG1hY2hpbmUoKQogCkBAIC0xOTQsNyArMjA0LDcgQEAKIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIE5vdGU6IHRoaXMgZnVuY3Rpb24gd29ya3MgYmVzdCB3aXRoIE1hcmsgSGFtbW9uZCdzCisgICAgICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGJlc3Qgd2l0aCBNYXJrIEhhbW1vbmQncwogICAgICAgOm1vZDpgd2luMzJhbGxgIHBhY2thZ2UgaW5zdGFsbGVkLCBidXQgYWxzbyBvbiBQeXRob24gMi4zIGFuZAogICAgICAgbGF0ZXIgKHN1cHBvcnQgZm9yIHRoaXMgd2FzIGFkZGVkIGluIFB5dGhvbiAyLjYpLiBJdCBvYnZpb3VzbHkKICAgICAgIG9ubHkgcnVucyBvbiBXaW4zMiBjb21wYXRpYmxlIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QgYi9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CmluZGV4IDM2YTJiYzQuLjdmMTMwMjkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHByaW50LnJzdApAQCAtMjgsNiArMjgsMTEgQEAKIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CiAgICBBZGRlZCBzdXBwb3J0IGZvciA6Y2xhc3M6YHNldGAgYW5kIDpjbGFzczpgZnJvemVuc2V0YC4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgcHByaW50IG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9wcHJpbnQucHk/dmlldz1tYXJrdXA+YF8KKwogVGhlIDptb2Q6YHBwcmludGAgbW9kdWxlIGRlZmluZXMgb25lIGNsYXNzOgogCiAuLiBGaXJzdCB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3M6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wcm9maWxlLnJzdCBiL0RvYy9saWJyYXJ5L3Byb2ZpbGUucnN0CmluZGV4IGE2OWEwZGEuLjFlMjM1MGYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Byb2ZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Byb2ZpbGUucnN0CkBAIC02MjAsNyArNjIwLDcgQEAKICAgIGludGVnZXJzLCB5b3UgY2FuIGFsc28gaW52b2tlIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciB3aXRoIGEgc2Vjb25kIGFyZ3VtZW50CiAgICBzcGVjaWZ5aW5nIHRoZSByZWFsIGR1cmF0aW9uIG9mIG9uZSB1bml0IG9mIHRpbWUuICBGb3IgZXhhbXBsZSwgaWYKICAgIDpmdW5jOmB5b3VyX2ludGVnZXJfdGltZV9mdW5jYCByZXR1cm5zIHRpbWVzIG1lYXN1cmVkIGluIHRob3VzYW5kcyBvZiBzZWNvbmRzLAotICAgeW91IHdvdWxkIGNvbnN0dWN0IHRoZSA6Y2xhc3M6YFByb2ZpbGVgIGluc3RhbmNlIGFzIGZvbGxvd3M6OgorICAgeW91IHdvdWxkIGNvbnN0cnVjdCB0aGUgOmNsYXNzOmBQcm9maWxlYCBpbnN0YW5jZSBhcyBmb2xsb3dzOjoKIAogICAgICAgcHIgPSBwcm9maWxlLlByb2ZpbGUoeW91cl9pbnRlZ2VyX3RpbWVfZnVuYywgMC4wMDEpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0IGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKaW5kZXggNDBjYTU4OC4uY2E4NjE0MyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKQEAgLTQwLDYgKzQwLDExIEBACiAgICBsaW5lLCBpZiAqYXJncyogaXMgbm90IHNwZWNpZmllZCkgYXJlIGNvbXBpbGVkIGFuZCB0aGUgcmVzdWx0aW5nIGJ5dGVjb2RlIGlzCiAgICBjYWNoZWQgaW4gdGhlIG5vcm1hbCBtYW5uZXIuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNlYXJjaCBhIGRpcmVjdG9yeQogICAgc3RydWN0dXJlIHRvIGxvY2F0ZSBzb3VyY2UgZmlsZXM7IGl0IG9ubHkgY29tcGlsZXMgZmlsZXMgbmFtZWQgZXhwbGljaXRseS4KKyAgIElmIGBgJy0nYGAgaXMgdGhlIG9ubHkgcGFyYW1ldGVyIGluIGFyZ3MsIHRoZSBsaXN0IG9mIGZpbGVzIGlzIHRha2VuIGZyb20KKyAgIHN0YW5kYXJkIGlucHV0LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgYGAnLSdgYC4KIAogV2hlbiB0aGlzIG1vZHVsZSBpcyBydW4gYXMgYSBzY3JpcHQsIHRoZSA6ZnVuYzpgbWFpbmAgaXMgdXNlZCB0byBjb21waWxlIGFsbCB0aGUKIGZpbGVzIG5hbWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGUgZXhpdCBzdGF0dXMgaXMgbm9uemVybyBpZiBvbmUgb2YgdGhlIGZpbGVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weWRvYy5yc3QgYi9Eb2MvbGlicmFyeS9weWRvYy5yc3QKaW5kZXggMzc4NDUxNS4uZTVmOGZlMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlkb2MucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B5ZG9jLnJzdApAQCAtNDMsMjUgKzQzLDI1IEBACiAgICBleGVjdXRlZCBvbiB0aGF0IG9jY2FzaW9uLiAgVXNlIGFuIGBgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzpgYCBndWFyZCB0bwogICAgb25seSBleGVjdXRlIGNvZGUgd2hlbiBhIGZpbGUgaXMgaW52b2tlZCBhcyBhIHNjcmlwdCBhbmQgbm90IGp1c3QgaW1wb3J0ZWQuCiAKLVNwZWNpZnlpbmcgYSA6b3B0aW9uOmAtd2AgZmxhZyBiZWZvcmUgdGhlIGFyZ3VtZW50IHdpbGwgY2F1c2UgSFRNTCBkb2N1bWVudGF0aW9uCitTcGVjaWZ5aW5nIGEgYGAtd2BgIGZsYWcgYmVmb3JlIHRoZSBhcmd1bWVudCB3aWxsIGNhdXNlIEhUTUwgZG9jdW1lbnRhdGlvbgogdG8gYmUgd3JpdHRlbiBvdXQgdG8gYSBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgaW5zdGVhZCBvZiBkaXNwbGF5aW5nIHRleHQKIG9uIHRoZSBjb25zb2xlLgogCi1TcGVjaWZ5aW5nIGEgOm9wdGlvbjpgLWtgIGZsYWcgYmVmb3JlIHRoZSBhcmd1bWVudCB3aWxsIHNlYXJjaCB0aGUgc3lub3BzaXMKK1NwZWNpZnlpbmcgYSBgYC1rYGAgZmxhZyBiZWZvcmUgdGhlIGFyZ3VtZW50IHdpbGwgc2VhcmNoIHRoZSBzeW5vcHNpcwogbGluZXMgb2YgYWxsIGF2YWlsYWJsZSBtb2R1bGVzIGZvciB0aGUga2V5d29yZCBnaXZlbiBhcyB0aGUgYXJndW1lbnQsIGFnYWluIGluIGEKIG1hbm5lciBzaW1pbGFyIHRvIHRoZSBVbml4IDpwcm9ncmFtOmBtYW5gIGNvbW1hbmQuICBUaGUgc3lub3BzaXMgbGluZSBvZiBhCiBtb2R1bGUgaXMgdGhlIGZpcnN0IGxpbmUgb2YgaXRzIGRvY3VtZW50YXRpb24gc3RyaW5nLgogCiBZb3UgY2FuIGFsc28gdXNlIDpwcm9ncmFtOmBweWRvY2AgdG8gc3RhcnQgYW4gSFRUUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG1hY2hpbmUKLXRoYXQgd2lsbCBzZXJ2ZSBkb2N1bWVudGF0aW9uIHRvIHZpc2l0aW5nIFdlYiBicm93c2Vycy4gOnByb2dyYW06YHB5ZG9jYAotOm9wdGlvbjpgLXAgMTIzNGAgd2lsbCBzdGFydCBhIEhUVFAgc2VydmVyIG9uIHBvcnQgMTIzNCwgYWxsb3dpbmcgeW91IHRvIGJyb3dzZQordGhhdCB3aWxsIHNlcnZlIGRvY3VtZW50YXRpb24gdG8gdmlzaXRpbmcgV2ViIGJyb3dzZXJzLiA6cHJvZ3JhbTpgcHlkb2MgLXAgMTIzNGAKK3dpbGwgc3RhcnQgYSBIVFRQIHNlcnZlciBvbiBwb3J0IDEyMzQsIGFsbG93aW5nIHlvdSB0byBicm93c2UKIHRoZSBkb2N1bWVudGF0aW9uIGF0IGBgaHR0cDovL2xvY2FsaG9zdDoxMjM0L2BgIGluIHlvdXIgcHJlZmVycmVkIFdlYiBicm93c2VyLgotOnByb2dyYW06YHB5ZG9jYCA6b3B0aW9uOmAtZ2Agd2lsbCBzdGFydCB0aGUgc2VydmVyIGFuZCBhZGRpdGlvbmFsbHkgYnJpbmcgdXAgYQorOnByb2dyYW06YHB5ZG9jIC1nYCB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgYW5kIGFkZGl0aW9uYWxseSBicmluZyB1cCBhCiBzbWFsbCA6bW9kOmBUa2ludGVyYFwgLWJhc2VkIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gaGVscCB5b3Ugc2VhcmNoIGZvcgogZG9jdW1lbnRhdGlvbiBwYWdlcy4KIAogV2hlbiA6cHJvZ3JhbTpgcHlkb2NgIGdlbmVyYXRlcyBkb2N1bWVudGF0aW9uLCBpdCB1c2VzIHRoZSBjdXJyZW50IGVudmlyb25tZW50Ci1hbmQgcGF0aCB0byBsb2NhdGUgbW9kdWxlcy4gIFRodXMsIGludm9raW5nIDpwcm9ncmFtOmBweWRvY2AgOm9wdGlvbjpgc3BhbWAKK2FuZCBwYXRoIHRvIGxvY2F0ZSBtb2R1bGVzLiAgVGh1cywgaW52b2tpbmcgOnByb2dyYW06YHB5ZG9jIHNwYW1gCiBkb2N1bWVudHMgcHJlY2lzZWx5IHRoZSB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUgeW91IHdvdWxkIGdldCBpZiB5b3Ugc3RhcnRlZCB0aGUKIFB5dGhvbiBpbnRlcnByZXRlciBhbmQgdHlwZWQgYGBpbXBvcnQgc3BhbWBgLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weWV4cGF0LnJzdCBiL0RvYy9saWJyYXJ5L3B5ZXhwYXQucnN0CmluZGV4IDA0MTc5YTQuLjgyOTk3MzkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5ZXhwYXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B5ZXhwYXQucnN0CkBAIC0xNTcsNiArMTU3LDEzIEBACiAgICA6YXR0cjpgb3JkZXJlZF9hdHRyaWJ1dGVzYCwgOmF0dHI6YHJldHVybnNfdW5pY29kZWAgYW5kCiAgICA6YXR0cjpgc3BlY2lmaWVkX2F0dHJpYnV0ZXNgIHNldCB0byB0aGUgdmFsdWVzIG9mIHRoaXMgcGFyc2VyLgogCisuLiBtZXRob2Q6OiB4bWxwYXJzZXIuU2V0UGFyYW1FbnRpdHlQYXJzaW5nKGZsYWcpCisKKyAgIENvbnRyb2wgcGFyc2luZyBvZiBwYXJhbWV0ZXIgZW50aXRpZXMgKGluY2x1ZGluZyB0aGUgZXh0ZXJuYWwgRFREIHN1YnNldCkuCisgICBQb3NzaWJsZSAqZmxhZyogdmFsdWVzIGFyZSA6Y29uc3Q6YFhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19ORVZFUmAsCisgICA6Y29uc3Q6YFhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19VTkxFU1NfU1RBTkRBTE9ORWAgYW5kCisgICA6Y29uc3Q6YFhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19BTFdBWVNgLiAgUmV0dXJuIHRydWUgaWYgc2V0dGluZyB0aGUgZmxhZworICAgd2FzIHN1Y2Nlc3NmdWwuCiAKIC4uIG1ldGhvZDo6IHhtbHBhcnNlci5Vc2VGb3JlaWduRFREKFtmbGFnXSkKIApAQCAtNDY0LDcgKzQ3MSw3IEBACiAgICBDYWxsZWQgaWYgdGhlIFhNTCBkb2N1bWVudCBoYXNuJ3QgYmVlbiBkZWNsYXJlZCBhcyBiZWluZyBhIHN0YW5kYWxvbmUgZG9jdW1lbnQuCiAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGVyZSBpcyBhbiBleHRlcm5hbCBzdWJzZXQgb3IgYSByZWZlcmVuY2UgdG8gYSBwYXJhbWV0ZXIKICAgIGVudGl0eSwgYnV0IHRoZSBYTUwgZGVjbGFyYXRpb24gZG9lcyBub3Qgc2V0IHN0YW5kYWxvbmUgdG8gYGB5ZXNgYCBpbiBhbiBYTUwKLSAgIGRlY2xhcmF0aW9uLiAgSWYgdGhpcyBoYW5kbGVyIHJldHVybnMgYGAwYGAsIHRoZW4gdGhlIHBhcnNlciB3aWxsIHRocm93IGFuCisgICBkZWNsYXJhdGlvbi4gIElmIHRoaXMgaGFuZGxlciByZXR1cm5zIGBgMGBgLCB0aGVuIHRoZSBwYXJzZXIgd2lsbCByYWlzZSBhbgogICAgOmNvbnN0OmBYTUxfRVJST1JfTk9UX1NUQU5EQUxPTkVgIGVycm9yLiAgSWYgdGhpcyBoYW5kbGVyIGlzIG5vdCBzZXQsIG5vCiAgICBleGNlcHRpb24gaXMgcmFpc2VkIGJ5IHRoZSBwYXJzZXIgZm9yIHRoaXMgY29uZGl0aW9uLgogCkBAIC00ODEsNyArNDg4LDcgQEAKICAgIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgc3ViLXBhcnNlciB1c2luZwogICAgYGBFeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZShjb250ZXh0KWBgLCBpbml0aWFsaXppbmcgaXQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKICAgIGNhbGxiYWNrcywgYW5kIHBhcnNpbmcgdGhlIGVudGl0eS4gIFRoaXMgaGFuZGxlciBzaG91bGQgcmV0dXJuIGFuIGludGVnZXI7IGlmIGl0Ci0gICByZXR1cm5zIGBgMGBgLCB0aGUgcGFyc2VyIHdpbGwgdGhyb3cgYW4KKyAgIHJldHVybnMgYGAwYGAsIHRoZSBwYXJzZXIgd2lsbCByYWlzZSBhbgogICAgOmNvbnN0OmBYTUxfRVJST1JfRVhURVJOQUxfRU5USVRZX0hBTkRMSU5HYCBlcnJvciwgb3RoZXJ3aXNlIHBhcnNpbmcgd2lsbAogICAgY29udGludWUuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QgYi9Eb2MvbGlicmFyeS9weXRob24ucnN0CmluZGV4IDZmNGVjYjcuLmFhZjFhYmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdApAQCAtMTMsNiArMTMsNyBAQAogLi4gdG9jdHJlZTo6CiAKICAgIHN5cy5yc3QKKyAgIHN5c2NvbmZpZy5yc3QKICAgIF9fYnVpbHRpbl9fLnJzdAogICAgZnV0dXJlX2J1aWx0aW5zLnJzdAogICAgX19tYWluX18ucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9xdWV1ZS5yc3QgYi9Eb2MvbGlicmFyeS9xdWV1ZS5yc3QKaW5kZXggOTc2NTEwMi4uYTQ3MWJiMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcXVldWUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3F1ZXVlLnJzdApAQCAtMjQsNiArMjQsMTEgQEAKIHRoZSBlbnRyaWVzIGFyZSBrZXB0IHNvcnRlZCAodXNpbmcgdGhlIDptb2Q6YGhlYXBxYCBtb2R1bGUpIGFuZCB0aGUKIGxvd2VzdCB2YWx1ZWQgZW50cnkgaXMgcmV0cmlldmVkIGZpcnN0LgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBxdWV1ZSBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvUXVldWUucHk/dmlldz1tYXJrdXA+YF8uCisKIFRoZSA6bW9kOmBRdWV1ZWAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzIGFuZCBleGNlcHRpb25zOgogCiAuLiBjbGFzczo6IFF1ZXVlKG1heHNpemU9MCkKQEAgLTE4Myw3ICsxODgsNyBAQAogICAgcSA9IFF1ZXVlKCkKICAgIGZvciBpIGluIHJhbmdlKG51bV93b3JrZXJfdGhyZWFkcyk6CiAgICAgICAgIHQgPSBUaHJlYWQodGFyZ2V0PXdvcmtlcikKLSAgICAgICAgdC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCiAgICAgICAgIHQuc3RhcnQoKQogCiAgICBmb3IgaXRlbSBpbiBzb3VyY2UoKToKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QgYi9Eb2MvbGlicmFyeS9xdW9wcmkucnN0CmluZGV4IGY0Njc0ZGMuLjg3ZDcwYzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcXVvcHJpLnJzdApAQCAtMTgsNiArMTgsMTAgQEAKIDptb2Q6YGJhc2U2NGAgbW9kdWxlIGlzIG1vcmUgY29tcGFjdCBpZiB0aGVyZSBhcmUgbWFueSBzdWNoIGNoYXJhY3RlcnMsIGFzIHdoZW4KIHNlbmRpbmcgYSBncmFwaGljcyBmaWxlLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBxdW9wcmkgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3F1b3ByaS5weT92aWV3PW1hcmt1cD5gXwogCiAuLiBmdW5jdGlvbjo6IGRlY29kZShpbnB1dCwgb3V0cHV0WyxoZWFkZXJdKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yYW5kb20ucnN0IGIvRG9jL2xpYnJhcnkvcmFuZG9tLnJzdAppbmRleCA0ODZlNDc1Li40MzA2OTExIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yYW5kb20ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JhbmRvbS5yc3QKQEAgLTksNiArOSwxMSBAQAogVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzIGZvciB2YXJpb3VzCiBkaXN0cmlidXRpb25zLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGByYW5kb20gbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3JhbmRvbS5weT92aWV3PW1hcmt1cD5gXworCiBGb3IgaW50ZWdlcnMsIHVuaWZvcm0gc2VsZWN0aW9uIGZyb20gYSByYW5nZS4gRm9yIHNlcXVlbmNlcywgdW5pZm9ybSBzZWxlY3Rpb24KIG9mIGEgcmFuZG9tIGVsZW1lbnQsIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSByYW5kb20gcGVybXV0YXRpb24gb2YgYSBsaXN0CiBpbi1wbGFjZSwgYW5kIGEgZnVuY3Rpb24gZm9yIHJhbmRvbSBzYW1wbGluZyB3aXRob3V0IHJlcGxhY2VtZW50LgpAQCAtNzMsMTAgKzc4LDYgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi40CiAgICAgICBmb3JtZXJseSwgb3BlcmF0aW5nIHN5c3RlbSByZXNvdXJjZXMgd2VyZSBub3QgdXNlZC4KIAotICAgSWYgKngqIGlzIG5vdCBgYE5vbmVgYCBvciBhbiBpbnQgb3IgbG9uZywgYGBoYXNoKHgpYGAgaXMgdXNlZCBpbnN0ZWFkLiBJZiAqeCogaXMKLSAgIGFuIGludCBvciBsb25nLCAqeCogaXMgdXNlZCBkaXJlY3RseS4KLQotCiAuLiBmdW5jdGlvbjo6IGdldHN0YXRlKCkKIAogICAgUmV0dXJuIGFuIG9iamVjdCBjYXB0dXJpbmcgdGhlIGN1cnJlbnQgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGdlbmVyYXRvci4gIFRoaXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JlLnJzdCBiL0RvYy9saWJyYXJ5L3JlLnJzdAppbmRleCA5ODIxMDQ3Li5mNzg5NjAxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmUucnN0CkBAIC0yMjQsNyArMjI0LDcgQEAKICAgIHVuZGVmaW5lZC4KIAogYGAoPzouLi4pYGAKLSAgIEEgbm9uLWdyb3VwaW5nIHZlcnNpb24gb2YgcmVndWxhciBwYXJlbnRoZXNlcy4gTWF0Y2hlcyB3aGF0ZXZlciByZWd1bGFyCisgICBBIG5vbi1jYXB0dXJpbmcgdmVyc2lvbiBvZiByZWd1bGFyIHBhcmVudGhlc2VzLiAgTWF0Y2hlcyB3aGF0ZXZlciByZWd1bGFyCiAgICBleHByZXNzaW9uIGlzIGluc2lkZSB0aGUgcGFyZW50aGVzZXMsIGJ1dCB0aGUgc3Vic3RyaW5nIG1hdGNoZWQgYnkgdGhlIGdyb3VwCiAgICAqY2Fubm90KiBiZSByZXRyaWV2ZWQgYWZ0ZXIgcGVyZm9ybWluZyBhIG1hdGNoIG9yIHJlZmVyZW5jZWQgbGF0ZXIgaW4gdGhlCiAgICBwYXR0ZXJuLgpAQCAtMzMyLDcgKzMzMiw4IEBACiBgYFxkYGAKICAgIFdoZW4gdGhlIDpjb25zdDpgVU5JQ09ERWAgZmxhZyBpcyBub3Qgc3BlY2lmaWVkLCBtYXRjaGVzIGFueSBkZWNpbWFsIGRpZ2l0OyB0aGlzCiAgICBpcyBlcXVpdmFsZW50IHRvIHRoZSBzZXQgYGBbMC05XWBgLiAgV2l0aCA6Y29uc3Q6YFVOSUNPREVgLCBpdCB3aWxsIG1hdGNoCi0gICB3aGF0ZXZlciBpcyBjbGFzc2lmaWVkIGFzIGEgZGlnaXQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHByb3BlcnRpZXMgZGF0YWJhc2UuCisgICB3aGF0ZXZlciBpcyBjbGFzc2lmaWVkIGFzIGEgZGVjaW1hbCBkaWdpdCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgcHJvcGVydGllcworICAgZGF0YWJhc2UuCiAKIGBgXERgYAogICAgV2hlbiB0aGUgOmNvbnN0OmBVTklDT0RFYCBmbGFnIGlzIG5vdCBzcGVjaWZpZWQsIG1hdGNoZXMgYW55IG5vbi1kaWdpdApAQCAtNTM2LDcgKzUzNyw3IEBACiAgICAgICBpbnN0ZWFkLgogCiAKLS4uIGZ1bmN0aW9uOjogc3BsaXQocGF0dGVybiwgc3RyaW5nWywgbWF4c3BsaXQ9MF0pCisuLiBmdW5jdGlvbjo6IHNwbGl0KHBhdHRlcm4sIHN0cmluZ1ssIG1heHNwbGl0PTAsIGZsYWdzPTBdKQogCiAgICBTcGxpdCAqc3RyaW5nKiBieSB0aGUgb2NjdXJyZW5jZXMgb2YgKnBhdHRlcm4qLiAgSWYgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGFyZQogICAgdXNlZCBpbiAqcGF0dGVybiosIHRoZW4gdGhlIHRleHQgb2YgYWxsIGdyb3VwcyBpbiB0aGUgcGF0dGVybiBhcmUgYWxzbyByZXR1cm5lZApAQCAtNTUxLDYgKzU1Miw4IEBACiAgICAgICBbJ1dvcmRzJywgJywgJywgJ3dvcmRzJywgJywgJywgJ3dvcmRzJywgJy4nLCAnJ10KICAgICAgID4+PiByZS5zcGxpdCgnXFcrJywgJ1dvcmRzLCB3b3Jkcywgd29yZHMuJywgMSkKICAgICAgIFsnV29yZHMnLCAnd29yZHMsIHdvcmRzLiddCisgICAgICA+Pj4gcmUuc3BsaXQoJ1thLWZdKycsICcwYTNCOScsIGZsYWdzPXJlLklHTk9SRUNBU0UpCisgICAgICBbJzAnLCAnMycsICc5J10KIAogICAgSWYgdGhlcmUgYXJlIGNhcHR1cmluZyBncm91cHMgaW4gdGhlIHNlcGFyYXRvciBhbmQgaXQgbWF0Y2hlcyBhdCB0aGUgc3RhcnQgb2YKICAgIHRoZSBzdHJpbmcsIHRoZSByZXN1bHQgd2lsbCBzdGFydCB3aXRoIGFuIGVtcHR5IHN0cmluZy4gIFRoZSBzYW1lIGhvbGRzIGZvcgpAQCAtNTcxLDYgKzU3NCw5IEBACiAgICAgICA+Pj4gcmUuc3BsaXQoIig/bSleJCIsICJmb29cblxuYmFyXG4iKQogICAgICAgWydmb29cblxuYmFyXG4nXQogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgQWRkZWQgdGhlIG9wdGlvbmFsIGZsYWdzIGFyZ3VtZW50LgorCiAKIC4uIGZ1bmN0aW9uOjogZmluZGFsbChwYXR0ZXJuLCBzdHJpbmdbLCBmbGFnc10pCiAKQEAgLTYwMSw3ICs2MDcsNyBAQAogICAgICAgQWRkZWQgdGhlIG9wdGlvbmFsIGZsYWdzIGFyZ3VtZW50LgogCiAKLS4uIGZ1bmN0aW9uOjogc3ViKHBhdHRlcm4sIHJlcGwsIHN0cmluZ1ssIGNvdW50XSkKKy4uIGZ1bmN0aW9uOjogc3ViKHBhdHRlcm4sIHJlcGwsIHN0cmluZ1ssIGNvdW50LCBmbGFnc10pCiAKICAgIFJldHVybiB0aGUgc3RyaW5nIG9idGFpbmVkIGJ5IHJlcGxhY2luZyB0aGUgbGVmdG1vc3Qgbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzCiAgICBvZiAqcGF0dGVybiogaW4gKnN0cmluZyogYnkgdGhlIHJlcGxhY2VtZW50ICpyZXBsKi4gIElmIHRoZSBwYXR0ZXJuIGlzbid0IGZvdW5kLApAQCAtNjI2LDEwICs2MzIsMTAgQEAKICAgICAgIC4uLiAgICAgZWxzZTogcmV0dXJuICctJwogICAgICAgPj4+IHJlLnN1YignLXsxLDJ9JywgZGFzaHJlcGwsICdwcm8tLS0tZ3JhbS1maWxlcycpCiAgICAgICAncHJvLS1ncmFtIGZpbGVzJworICAgICAgPj4+IHJlLnN1YihyJ1xzQU5EXHMnLCAnICYgJywgJ0Jha2VkIEJlYW5zIEFuZCBTcGFtJywgZmxhZ3M9cmUuSUdOT1JFQ0FTRSkKKyAgICAgICdCYWtlZCBCZWFucyAmIFNwYW0nCiAKLSAgIFRoZSBwYXR0ZXJuIG1heSBiZSBhIHN0cmluZyBvciBhbiBSRSBvYmplY3Q7IGlmIHlvdSBuZWVkIHRvIHNwZWNpZnkgcmVndWxhcgotICAgZXhwcmVzc2lvbiBmbGFncywgeW91IG11c3QgdXNlIGEgUkUgb2JqZWN0LCBvciB1c2UgZW1iZWRkZWQgbW9kaWZpZXJzIGluIGEKLSAgIHBhdHRlcm47IGZvciBleGFtcGxlLCBgYHN1YigiKD9pKWIrIiwgIngiLCAiYmJiYiBCQkJCIilgYCByZXR1cm5zIGBgJ3ggeCdgYC4KKyAgIFRoZSBwYXR0ZXJuIG1heSBiZSBhIHN0cmluZyBvciBhbiBSRSBvYmplY3QuCiAKICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqY291bnQqIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXR0ZXJuIG9jY3VycmVuY2VzIHRvIGJlCiAgICByZXBsYWNlZDsgKmNvdW50KiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuICBJZiBvbWl0dGVkIG9yIHplcm8sIGFsbApAQCAtNjQ2LDEyICs2NTIsMTggQEAKICAgIGNoYXJhY3RlciBgYCcwJ2BgLiAgVGhlIGJhY2tyZWZlcmVuY2UgYGBcZzwwPmBgIHN1YnN0aXR1dGVzIGluIHRoZSBlbnRpcmUKICAgIHN1YnN0cmluZyBtYXRjaGVkIGJ5IHRoZSBSRS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEFkZGVkIHRoZSBvcHRpb25hbCBmbGFncyBhcmd1bWVudC4KIAotLi4gZnVuY3Rpb246OiBzdWJuKHBhdHRlcm4sIHJlcGwsIHN0cmluZ1ssIGNvdW50XSkKKworLi4gZnVuY3Rpb246OiBzdWJuKHBhdHRlcm4sIHJlcGwsIHN0cmluZ1ssIGNvdW50LCBmbGFnc10pCiAKICAgIFBlcmZvcm0gdGhlIHNhbWUgb3BlcmF0aW9uIGFzIDpmdW5jOmBzdWJgLCBidXQgcmV0dXJuIGEgdHVwbGUgYGAobmV3X3N0cmluZywKICAgIG51bWJlcl9vZl9zdWJzX21hZGUpYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBBZGRlZCB0aGUgb3B0aW9uYWwgZmxhZ3MgYXJndW1lbnQuCisKIAogLi4gZnVuY3Rpb246OiBlc2NhcGUoc3RyaW5nKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKaW5kZXggYzU4ZmQyNi4uZjZlODU1ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdApAQCAtMjAsNyArMjAsNyBAQAogICB0aGUgYGBsaWJlZGl0YGAgbGlicmFyeSBpbnN0ZWFkIG9mIEdOVSByZWFkbGluZS4KIAogICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBgYGxpYmVkaXRgYCBpcyBkaWZmZXJlbnQgZnJvbSB0aGF0Ci0gIG9mIEdOVSByZWFkbGluZS4gSWYgeW91IHByb2dyYW1tYXRpY2x5IGxvYWQgY29uZmlndXJhdGlvbiBzdHJpbmdzCisgIG9mIEdOVSByZWFkbGluZS4gSWYgeW91IHByb2dyYW1tYXRpY2FsbHkgbG9hZCBjb25maWd1cmF0aW9uIHN0cmluZ3MKICAgeW91IGNhbiBjaGVjayBmb3IgdGhlIHRleHQgImxpYmVkaXQiIGluIDpjb25zdDpgcmVhZGxpbmUuX19kb2NfX2AKICAgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIEdOVSByZWFkbGluZSBhbmQgbGliZWRpdC4KIApAQCAtMjEwLDYgKzIxMCw3IEBACiA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBmaWxlLiA6OgogCiAgICBpbXBvcnQgb3MKKyAgIGltcG9ydCByZWFkbGluZQogICAgaGlzdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsiSE9NRSJdLCAiLnB5aGlzdCIpCiAgICB0cnk6CiAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZXByLnJzdCBiL0RvYy9saWJyYXJ5L3JlcHIucnN0CmluZGV4IDc4Mjg0ZjAuLjViZjViZjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlcHIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlcHIucnN0CkBAIC0xNSw2ICsxNSwxMSBAQAogd2l0aCBsaW1pdHMgb24gdGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBzdHJpbmdzLiBUaGlzIGlzIHVzZWQgaW4gdGhlIFB5dGhvbgogZGVidWdnZXIgYW5kIG1heSBiZSB1c2VmdWwgaW4gb3RoZXIgY29udGV4dHMgYXMgd2VsbC4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgcmVwciBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvcmVwci5weT92aWV3PW1hcmt1cD5gXworCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzLCBhbiBpbnN0YW5jZSwgYW5kIGEgZnVuY3Rpb246CiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcnVucHkucnN0IGIvRG9jL2xpYnJhcnkvcnVucHkucnN0CmluZGV4IGEwZjMwMzUuLjkwNWM2NGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3J1bnB5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9ydW5weS5yc3QKQEAgLTksNjEgKzksMTI5IEBACiAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKIAogVGhlIDptb2Q6YHJ1bnB5YCBtb2R1bGUgaXMgdXNlZCB0byBsb2NhdGUgYW5kIHJ1biBQeXRob24gbW9kdWxlcyB3aXRob3V0Ci1pbXBvcnRpbmcgdGhlbSBmaXJzdC4gSXRzIG1haW4gdXNlIGlzIHRvIGltcGxlbWVudCB0aGUgOm9wdGlvbjpgLW1gIGNvbW1hbmQgbGluZQotc3dpdGNoIHRoYXQgYWxsb3dzIHNjcmlwdHMgdG8gYmUgbG9jYXRlZCB1c2luZyB0aGUgUHl0aG9uIG1vZHVsZSBuYW1lc3BhY2UKLXJhdGhlciB0aGFuIHRoZSBmaWxlc3lzdGVtLgoraW1wb3J0aW5nIHRoZW0gZmlyc3QuIEl0cyBtYWluIHVzZSBpcyB0byBpbXBsZW1lbnQgdGhlIDpvcHRpb246YC1tYCBjb21tYW5kCitsaW5lIHN3aXRjaCB0aGF0IGFsbG93cyBzY3JpcHRzIHRvIGJlIGxvY2F0ZWQgdXNpbmcgdGhlIFB5dGhvbiBtb2R1bGUKK25hbWVzcGFjZSByYXRoZXIgdGhhbiB0aGUgZmlsZXN5c3RlbS4KIAotV2hlbiBleGVjdXRlZCBhcyBhIHNjcmlwdCwgdGhlIG1vZHVsZSBlZmZlY3RpdmVseSBvcGVyYXRlcyBhcyBmb2xsb3dzOjoKLQotICAgZGVsIHN5cy5hcmd2WzBdICAjIFJlbW92ZSB0aGUgcnVucHkgbW9kdWxlIGZyb20gdGhlIGFyZ3VtZW50cwotICAgcnVuX21vZHVsZShzeXMuYXJndlswXSwgcnVuX25hbWU9Il9fbWFpbl9fIiwgYWx0ZXJfc3lzPVRydWUpCi0KLVRoZSA6bW9kOmBydW5weWAgbW9kdWxlIHByb3ZpZGVzIGEgc2luZ2xlIGZ1bmN0aW9uOgorVGhlIDptb2Q6YHJ1bnB5YCBtb2R1bGUgcHJvdmlkZXMgdHdvIGZ1bmN0aW9uczoKIAogCi0uLiBmdW5jdGlvbjo6IHJ1bl9tb2R1bGUobW9kX25hbWVbLCBpbml0X2dsb2JhbHNdIFssIHJ1bl9uYW1lXVssIGFsdGVyX3N5c10pCisuLiBmdW5jdGlvbjo6IHJ1bl9tb2R1bGUobW9kX25hbWUsIGluaXRfZ2xvYmFscz1Ob25lLCBydW5fbmFtZT1Ob25lLCBhbHRlcl9zeXM9RmFsc2UpCiAKLSAgIEV4ZWN1dGUgdGhlIGNvZGUgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIG1vZHVsZSBnbG9iYWxzCi0gICBkaWN0aW9uYXJ5LiBUaGUgbW9kdWxlJ3MgY29kZSBpcyBmaXJzdCBsb2NhdGVkIHVzaW5nIHRoZSBzdGFuZGFyZCBpbXBvcnQKLSAgIG1lY2hhbmlzbSAocmVmZXIgdG8gOnBlcDpgMzAyYCBmb3IgZGV0YWlscykgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYSBmcmVzaCBtb2R1bGUKLSAgIG5hbWVzcGFjZS4KKyAgIEV4ZWN1dGUgdGhlIGNvZGUgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIG1vZHVsZQorICAgZ2xvYmFscyBkaWN0aW9uYXJ5LiBUaGUgbW9kdWxlJ3MgY29kZSBpcyBmaXJzdCBsb2NhdGVkIHVzaW5nIHRoZSBzdGFuZGFyZAorICAgaW1wb3J0IG1lY2hhbmlzbSAocmVmZXIgdG8gOnBlcDpgMzAyYCBmb3IgZGV0YWlscykgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYQorICAgZnJlc2ggbW9kdWxlIG5hbWVzcGFjZS4KIAotICAgVGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgYXJndW1lbnQgKmluaXRfZ2xvYmFscyogbWF5IGJlIHVzZWQgdG8gcHJlLXBvcHVsYXRlIHRoZQotICAgZ2xvYmFscyBkaWN0aW9uYXJ5IGJlZm9yZSB0aGUgY29kZSBpcyBleGVjdXRlZC4gVGhlIHN1cHBsaWVkIGRpY3Rpb25hcnkgd2lsbCBub3QKLSAgIGJlIG1vZGlmaWVkLiBJZiBhbnkgb2YgdGhlIHNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcyBiZWxvdyBhcmUgZGVmaW5lZCBpbiB0aGUKLSAgIHN1cHBsaWVkIGRpY3Rpb25hcnksIHRob3NlIGRlZmluaXRpb25zIGFyZSBvdmVycmlkZGVuIGJ5IHRoZSBgYHJ1bl9tb2R1bGVgYAotICAgZnVuY3Rpb24uCisgICBJZiB0aGUgc3VwcGxpZWQgbW9kdWxlIG5hbWUgcmVmZXJzIHRvIGEgcGFja2FnZSByYXRoZXIgdGhhbiBhIG5vcm1hbAorICAgbW9kdWxlLCB0aGVuIHRoYXQgcGFja2FnZSBpcyBpbXBvcnRlZCBhbmQgdGhlIGBgX19tYWluX19gYCBzdWJtb2R1bGUgd2l0aGluCisgICB0aGF0IHBhY2thZ2UgaXMgdGhlbiBleGVjdXRlZCBhbmQgdGhlIHJlc3VsdGluZyBtb2R1bGUgZ2xvYmFscyBkaWN0aW9uYXJ5CisgICByZXR1cm5lZC4KIAotICAgVGhlIHNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcyBgYF9fbmFtZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2xvYWRlcl9fYGAgYW5kCi0gICBgYF9fYnVpbHRpbnNfX2BgIGFyZSBzZXQgaW4gdGhlIGdsb2JhbHMgZGljdGlvbmFyeSBiZWZvcmUgdGhlIG1vZHVsZSBjb2RlIGlzCi0gICBleGVjdXRlZC4KKyAgIFRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IGFyZ3VtZW50ICppbml0X2dsb2JhbHMqIG1heSBiZSB1c2VkIHRvIHByZS1wb3B1bGF0ZQorICAgdGhlIG1vZHVsZSdzIGdsb2JhbHMgZGljdGlvbmFyeSBiZWZvcmUgdGhlIGNvZGUgaXMgZXhlY3V0ZWQuIFRoZSBzdXBwbGllZAorICAgZGljdGlvbmFyeSB3aWxsIG5vdCBiZSBtb2RpZmllZC4gSWYgYW55IG9mIHRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMKKyAgIGJlbG93IGFyZSBkZWZpbmVkIGluIHRoZSBzdXBwbGllZCBkaWN0aW9uYXJ5LCB0aG9zZSBkZWZpbml0aW9ucyBhcmUKKyAgIG92ZXJyaWRkZW4gYnkgOmZ1bmM6YHJ1bl9tb2R1bGVgLgogCi0gICBgYF9fbmFtZV9fYGAgaXMgc2V0IHRvICpydW5fbmFtZSogaWYgdGhpcyBvcHRpb25hbCBhcmd1bWVudCBpcyBzdXBwbGllZCwgYW5kIHRoZQotICAgKm1vZF9uYW1lKiBhcmd1bWVudCBvdGhlcndpc2UuCisgICBUaGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzIGBgX19uYW1lX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fbG9hZGVyX19gYAorICAgYW5kIGBgX19wYWNrYWdlX19gYCBhcmUgc2V0IGluIHRoZSBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUKKyAgIGNvZGUgaXMgZXhlY3V0ZWQgKE5vdGUgdGhhdCB0aGlzIGlzIGEgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIKKyAgIHZhcmlhYmxlcyBtYXkgYmUgc2V0IGltcGxpY2l0bHkgYXMgYW4gaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KIAotICAgYGBfX2xvYWRlcl9fYGAgaXMgc2V0IHRvIHRoZSA6cGVwOmAzMDJgIG1vZHVsZSBsb2FkZXIgdXNlZCB0byByZXRyaWV2ZSB0aGUgY29kZSBmb3IKLSAgIHRoZSBtb2R1bGUgKFRoaXMgbG9hZGVyIG1heSBiZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFyZCBpbXBvcnQgbWVjaGFuaXNtKS4KKyAgIGBgX19uYW1lX19gYCBpcyBzZXQgdG8gKnJ1bl9uYW1lKiBpZiB0aGlzIG9wdGlvbmFsIGFyZ3VtZW50IGlzIG5vdAorICAgOmNvbnN0OmBOb25lYCwgdG8gYGBtb2RfbmFtZSArICcuX19tYWluX18nYGAgaWYgdGhlIG5hbWVkIG1vZHVsZSBpcyBhCisgICBwYWNrYWdlIGFuZCB0byB0aGUgKm1vZF9uYW1lKiBhcmd1bWVudCBvdGhlcndpc2UuCiAKLSAgIGBgX19maWxlX19gYCBpcyBzZXQgdG8gdGhlIG5hbWUgcHJvdmlkZWQgYnkgdGhlIG1vZHVsZSBsb2FkZXIuIElmIHRoZSBsb2FkZXIKLSAgIGRvZXMgbm90IG1ha2UgZmlsZW5hbWUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byBgYE5vbmVgYC4KKyAgIGBgX19maWxlX19gYCBpcyBzZXQgdG8gdGhlIG5hbWUgcHJvdmlkZWQgYnkgdGhlIG1vZHVsZSBsb2FkZXIuIElmIHRoZQorICAgbG9hZGVyIGRvZXMgbm90IG1ha2UgZmlsZW5hbWUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGlzIHNldAorICAgdG8gOmNvbnN0OmBOb25lYC4KIAotICAgYGBfX2J1aWx0aW5zX19gYCBpcyBhdXRvbWF0aWNhbGx5IGluaXRpYWxpc2VkIHdpdGggYSByZWZlcmVuY2UgdG8gdGhlIHRvcCBsZXZlbAotICAgbmFtZXNwYWNlIG9mIHRoZSA6bW9kOmBfX2J1aWx0aW5fX2AgbW9kdWxlLgorICAgYGBfX2xvYWRlcl9fYGAgaXMgc2V0IHRvIHRoZSA6cGVwOmAzMDJgIG1vZHVsZSBsb2FkZXIgdXNlZCB0byByZXRyaWV2ZSB0aGUKKyAgIGNvZGUgZm9yIHRoZSBtb2R1bGUgKFRoaXMgbG9hZGVyIG1heSBiZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFyZAorICAgaW1wb3J0IG1lY2hhbmlzbSkuCiAKLSAgIElmIHRoZSBhcmd1bWVudCAqYWx0ZXJfc3lzKiBpcyBzdXBwbGllZCBhbmQgZXZhbHVhdGVzIHRvIGBgVHJ1ZWBgLCB0aGVuCi0gICBgYHN5cy5hcmd2WzBdYGAgaXMgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZSBvZiBgYF9fZmlsZV9fYGAgYW5kCisgICBgYF9fcGFja2FnZV9fYGAgaXMgc2V0IHRvICptb2RfbmFtZSogaWYgdGhlIG5hbWVkIG1vZHVsZSBpcyBhIHBhY2thZ2UgYW5kCisgICB0byBgYG1vZF9uYW1lLnJwYXJ0aXRpb24oJy4nKVswXWBgIG90aGVyd2lzZS4KKworICAgSWYgdGhlIGFyZ3VtZW50ICphbHRlcl9zeXMqIGlzIHN1cHBsaWVkIGFuZCBldmFsdWF0ZXMgdG8gOmNvbnN0OmBUcnVlYCwKKyAgIHRoZW4gYGBzeXMuYXJndlswXWBgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWUgb2YgYGBfX2ZpbGVfX2BgIGFuZAogICAgYGBzeXMubW9kdWxlc1tfX25hbWVfX11gYCBpcyB1cGRhdGVkIHdpdGggYSB0ZW1wb3JhcnkgbW9kdWxlIG9iamVjdCBmb3IgdGhlCiAgICBtb2R1bGUgYmVpbmcgZXhlY3V0ZWQuIEJvdGggYGBzeXMuYXJndlswXWBgIGFuZCBgYHN5cy5tb2R1bGVzW19fbmFtZV9fXWBgCiAgICBhcmUgcmVzdG9yZWQgdG8gdGhlaXIgb3JpZ2luYWwgdmFsdWVzIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucy4KIAotICAgTm90ZSB0aGF0IHRoaXMgbWFuaXB1bGF0aW9uIG9mIDptb2Q6YHN5c2AgaXMgbm90IHRocmVhZC1zYWZlLiBPdGhlciB0aHJlYWRzIG1heQotICAgc2VlIHRoZSBwYXJ0aWFsbHkgaW5pdGlhbGlzZWQgbW9kdWxlLCBhcyB3ZWxsIGFzIHRoZSBhbHRlcmVkIGxpc3Qgb2YgYXJndW1lbnRzLgotICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgOm1vZDpgc3lzYCBtb2R1bGUgYmUgbGVmdCBhbG9uZSB3aGVuIGludm9raW5nIHRoaXMKLSAgIGZ1bmN0aW9uIGZyb20gdGhyZWFkZWQgY29kZS4KKyAgIE5vdGUgdGhhdCB0aGlzIG1hbmlwdWxhdGlvbiBvZiA6bW9kOmBzeXNgIGlzIG5vdCB0aHJlYWQtc2FmZS4gT3RoZXIgdGhyZWFkcworICAgbWF5IHNlZSB0aGUgcGFydGlhbGx5IGluaXRpYWxpc2VkIG1vZHVsZSwgYXMgd2VsbCBhcyB0aGUgYWx0ZXJlZCBsaXN0IG9mCisgICBhcmd1bWVudHMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIDptb2Q6YHN5c2AgbW9kdWxlIGJlIGxlZnQgYWxvbmUgd2hlbgorICAgaW52b2tpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRocmVhZGVkIGNvZGUuCiAKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgICAgIEFkZGVkIGFiaWxpdHkgdG8gZXhlY3V0ZSBwYWNrYWdlcyBieSBsb29raW5nIGZvciBhIGBgX19tYWluX19gYAorICAgICAgICAgc3VibW9kdWxlCisKKworLi4gZnVuY3Rpb246OiBydW5fcGF0aChmaWxlX3BhdGgsIGluaXRfZ2xvYmFscz1Ob25lLCBydW5fbmFtZT1Ob25lKQorCisgICBFeGVjdXRlIHRoZSBjb2RlIGF0IHRoZSBuYW1lZCBmaWxlc3lzdGVtIGxvY2F0aW9uIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZworICAgbW9kdWxlIGdsb2JhbHMgZGljdGlvbmFyeS4gQXMgd2l0aCBhIHNjcmlwdCBuYW1lIHN1cHBsaWVkIHRvIHRoZSBDUHl0aG9uCisgICBjb21tYW5kIGxpbmUsIHRoZSBzdXBwbGllZCBwYXRoIG1heSByZWZlciB0byBhIFB5dGhvbiBzb3VyY2UgZmlsZSwgYQorICAgY29tcGlsZWQgYnl0ZWNvZGUgZmlsZSBvciBhIHZhbGlkIHN5cy5wYXRoIGVudHJ5IGNvbnRhaW5pbmcgYSBgYF9fbWFpbl9fYGAKKyAgIG1vZHVsZSAoZS5nLiBhIHppcGZpbGUgY29udGFpbmluZyBhIHRvcC1sZXZlbCBgYF9fbWFpbl9fLnB5YGAgZmlsZSkuCisKKyAgIEZvciBhIHNpbXBsZSBzY3JpcHQsIHRoZSBzcGVjaWZpZWQgY29kZSBpcyBzaW1wbHkgZXhlY3V0ZWQgaW4gYSBmcmVzaAorICAgbW9kdWxlIG5hbWVzcGFjZS4gRm9yIGEgdmFsaWQgc3lzLnBhdGggZW50cnkgKHR5cGljYWxseSBhIHppcGZpbGUgb3IKKyAgIGRpcmVjdG9yeSksIHRoZSBlbnRyeSBpcyBmaXJzdCBhZGRlZCB0byB0aGUgYmVnaW5uaW5nIG9mIGBgc3lzLnBhdGhgYC4gVGhlCisgICBmdW5jdGlvbiB0aGVuIGxvb2tzIGZvciBhbmQgZXhlY3V0ZXMgYSA6bW9kOmBfX21haW5fX2AgbW9kdWxlIHVzaW5nIHRoZQorICAgdXBkYXRlZCBwYXRoLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gc3BlY2lhbCBwcm90ZWN0aW9uIGFnYWluc3QgaW52b2tpbmcKKyAgIGFuIGV4aXN0aW5nIDptb2Q6YF9fbWFpbl9fYCBlbnRyeSBsb2NhdGVkIGVsc2V3aGVyZSBvbiBgYHN5cy5wYXRoYGAgaWYKKyAgIHRoZXJlIGlzIG5vIHN1Y2ggbW9kdWxlIGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uCisKKyAgIFRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IGFyZ3VtZW50ICppbml0X2dsb2JhbHMqIG1heSBiZSB1c2VkIHRvIHByZS1wb3B1bGF0ZQorICAgdGhlIG1vZHVsZSdzIGdsb2JhbHMgZGljdGlvbmFyeSBiZWZvcmUgdGhlIGNvZGUgaXMgZXhlY3V0ZWQuIFRoZSBzdXBwbGllZAorICAgZGljdGlvbmFyeSB3aWxsIG5vdCBiZSBtb2RpZmllZC4gSWYgYW55IG9mIHRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMKKyAgIGJlbG93IGFyZSBkZWZpbmVkIGluIHRoZSBzdXBwbGllZCBkaWN0aW9uYXJ5LCB0aG9zZSBkZWZpbml0aW9ucyBhcmUKKyAgIG92ZXJyaWRkZW4gYnkgOmZ1bmM6YHJ1bl9wYXRoYC4KKworICAgVGhlIHNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcyBgYF9fbmFtZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2xvYWRlcl9fYGAKKyAgIGFuZCBgYF9fcGFja2FnZV9fYGAgYXJlIHNldCBpbiB0aGUgZ2xvYmFscyBkaWN0aW9uYXJ5IGJlZm9yZSB0aGUgbW9kdWxlCisgICBjb2RlIGlzIGV4ZWN1dGVkIChOb3RlIHRoYXQgdGhpcyBpcyBhIG1pbmltYWwgc2V0IG9mIHZhcmlhYmxlcyAtIG90aGVyCisgICB2YXJpYWJsZXMgbWF5IGJlIHNldCBpbXBsaWNpdGx5IGFzIGFuIGludGVycHJldGVyIGltcGxlbWVudGF0aW9uIGRldGFpbCkuCisKKyAgIGBgX19uYW1lX19gYCBpcyBzZXQgdG8gKnJ1bl9uYW1lKiBpZiB0aGlzIG9wdGlvbmFsIGFyZ3VtZW50IGlzIG5vdAorICAgOmNvbnN0OmBOb25lYCBhbmQgdG8gYGAnPHJ1bl9wYXRoPidgYCBvdGhlcndpc2UuCisKKyAgIGBgX19maWxlX19gYCBpcyBzZXQgdG8gdGhlIG5hbWUgcHJvdmlkZWQgYnkgdGhlIG1vZHVsZSBsb2FkZXIuIElmIHRoZQorICAgbG9hZGVyIGRvZXMgbm90IG1ha2UgZmlsZW5hbWUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGlzIHNldAorICAgdG8gOmNvbnN0OmBOb25lYC4gRm9yIGEgc2ltcGxlIHNjcmlwdCwgdGhpcyB3aWxsIGJlIHNldCB0byBgYGZpbGVfcGF0aGBgLgorCisgICBgYF9fbG9hZGVyX19gYCBpcyBzZXQgdG8gdGhlIDpwZXA6YDMwMmAgbW9kdWxlIGxvYWRlciB1c2VkIHRvIHJldHJpZXZlIHRoZQorICAgY29kZSBmb3IgdGhlIG1vZHVsZSAoVGhpcyBsb2FkZXIgbWF5IGJlIGEgd3JhcHBlciBhcm91bmQgdGhlIHN0YW5kYXJkCisgICBpbXBvcnQgbWVjaGFuaXNtKS4gRm9yIGEgc2ltcGxlIHNjcmlwdCwgdGhpcyB3aWxsIGJlIHNldCB0byA6Y29uc3Q6YE5vbmVgLgorCisgICBgYF9fcGFja2FnZV9fYGAgaXMgc2V0IHRvIGBgX19uYW1lX18ucnBhcnRpdGlvbignLicpWzBdYGAuCisKKyAgIEEgbnVtYmVyIG9mIGFsdGVyYXRpb25zIGFyZSBhbHNvIG1hZGUgdG8gdGhlIDptb2Q6YHN5c2AgbW9kdWxlLiBGaXJzdGx5LAorICAgYGBzeXMucGF0aGBgIG1heSBiZSBhbHRlcmVkIGFzIGRlc2NyaWJlZCBhYm92ZS4gYGBzeXMuYXJndlswXWBgIGlzIHVwZGF0ZWQKKyAgIHdpdGggdGhlIHZhbHVlIG9mIGBgZmlsZV9wYXRoYGAgYW5kIGBgc3lzLm1vZHVsZXNbX19uYW1lX19dYGAgaXMgdXBkYXRlZAorICAgd2l0aCBhIHRlbXBvcmFyeSBtb2R1bGUgb2JqZWN0IGZvciB0aGUgbW9kdWxlIGJlaW5nIGV4ZWN1dGVkLiBBbGwKKyAgIG1vZGlmaWNhdGlvbnMgdG8gaXRlbXMgaW4gOm1vZDpgc3lzYCBhcmUgcmV2ZXJ0ZWQgYmVmb3JlIHRoZSBmdW5jdGlvbgorICAgcmV0dXJucy4KKworICAgTm90ZSB0aGF0LCB1bmxpa2UgOmZ1bmM6YHJ1bl9tb2R1bGVgLCB0aGUgYWx0ZXJhdGlvbnMgbWFkZSB0byA6bW9kOmBzeXNgCisgICBhcmUgbm90IG9wdGlvbmFsIGluIHRoaXMgZnVuY3Rpb24gYXMgdGhlc2UgYWRqdXN0bWVudHMgYXJlIGVzc2VudGlhbCB0bworICAgYWxsb3dpbmcgdGhlIGV4ZWN1dGlvbiBvZiBzeXMucGF0aCBlbnRyaWVzLiBBcyB0aGUgdGhyZWFkLXNhZmV0eQorICAgbGltaXRhdGlvbnMgc3RpbGwgYXBwbHksIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGluIHRocmVhZGVkIGNvZGUgc2hvdWxkIGJlCisgICBlaXRoZXIgc2VyaWFsaXNlZCB3aXRoIHRoZSBpbXBvcnQgbG9jayBvciBkZWxlZ2F0ZWQgdG8gYSBzZXBhcmF0ZSBwcm9jZXNzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKwogLi4gc2VlYWxzbzo6CiAKICAgIDpwZXA6YDMzOGAgLSBFeGVjdXRpbmcgbW9kdWxlcyBhcyBzY3JpcHRzCi0gICAgICBQRVAgd3JpdHRlbiBhbmQgIGltcGxlbWVudGVkIGJ5IE5pY2sgQ29naGxhbi4KKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBOaWNrIENvZ2hsYW4uCiAKKyAgIDpwZXA6YDM2NmAgLSBNYWluIG1vZHVsZSBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgTmljayBDb2dobGFuLgorCisgICA6cmVmOmB1c2luZy1vbi1nZW5lcmFsYCAtIENQeXRob24gY29tbWFuZCBsaW5lIGRldGFpbHMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NjaGVkLnJzdCBiL0RvYy9saWJyYXJ5L3NjaGVkLnJzdAppbmRleCA1MWI5ZDNmLi4xZWZlNDdhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zY2hlZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2NoZWQucnN0CkBAIC0xMCw2ICsxMCwxMCBAQAogVGhlIDptb2Q6YHNjaGVkYCBtb2R1bGUgZGVmaW5lcyBhIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgYSBnZW5lcmFsIHB1cnBvc2UgZXZlbnQKIHNjaGVkdWxlcjoKIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgc2NoZWQgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3NjaGVkLnB5P3ZpZXc9bWFya3VwPmBfCiAKIC4uIGNsYXNzOjogc2NoZWR1bGVyKHRpbWVmdW5jLCBkZWxheWZ1bmMpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CmluZGV4IDAzNDc1NmUuLjJlMDhiNzQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdApAQCAtMTAwLDYgKzEwMCwxNSBAQAogICAgICAgbGlicmFyeSwgYW5kIGRvZXMgbm90IGhhbmRsZSBmaWxlIGRlc2NyaXB0b3JzIHRoYXQgZG9uJ3Qgb3JpZ2luYXRlIGZyb20KICAgICAgIFdpblNvY2suCiAKKy4uIGF0dHJpYnV0ZTo6IHNlbGVjdC5QSVBFX0JVRgorCisgICBGaWxlcyByZXBvcnRlZCBhcyByZWFkeSBmb3Igd3JpdGluZyBieSA6ZnVuYzpgc2VsZWN0YCwgOmZ1bmM6YHBvbGxgIG9yCisgICBzaW1pbGFyIGludGVyZmFjZXMgaW4gdGhpcyBtb2R1bGUgYXJlIGd1YXJhbnRlZWQgdG8gbm90IGJsb2NrIG9uIGEgd3JpdGUKKyAgIG9mIHVwIHRvIDpjb25zdDpgUElQRV9CVUZgIGJ5dGVzLgorICAgVGhpcyB2YWx1ZSBpcyBndWFyYW50ZWVkIGJ5IFBPU0lYIHRvIGJlIGF0IGxlYXN0IDUxMi4gIEF2YWlsYWJpbGl0eTogVW5peC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKIAogLi4gX2Vwb2xsLW9iamVjdHM6CiAKQEAgLTEyOSwxNSArMTM4LDE1IEBACiAgICB8IDpjb25zdDpgRVBPTExPTkVTSE9UYCB8IFNldCBvbmUtc2hvdCBiZWhhdmlvci4gQWZ0ZXIgb25lIGV2ZW50IGlzICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8IHB1bGxlZCBvdXQsIHRoZSBmZCBpcyBpbnRlcm5hbGx5IGRpc2FibGVkICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IDpjb25zdDpgRVBPTExSRE5PUk1gICB8ID8/PyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8IDpjb25zdDpgRVBPTExSRE5PUk1gICB8IEVxdWl2YWxlbnQgdG8gOmNvbnN0OmBFUE9MTElOYCAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IDpjb25zdDpgRVBPTExSREJBTkRgICB8ID8/PyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8IDpjb25zdDpgRVBPTExSREJBTkRgICB8IFByaW9yaXR5IGRhdGEgYmFuZCBjYW4gYmUgcmVhZC4gICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IDpjb25zdDpgRVBPTExXUk5PUk1gICB8ID8/PyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8IDpjb25zdDpgRVBPTExXUk5PUk1gICB8IEVxdWl2YWxlbnQgdG8gOmNvbnN0OmBFUE9MTE9VVGAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IDpjb25zdDpgRVBPTExXUkJBTkRgICB8ID8/PyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8IDpjb25zdDpgRVBPTExXUkJBTkRgICB8IFByaW9yaXR5IGRhdGEgbWF5IGJlIHdyaXR0ZW4uICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IDpjb25zdDpgRVBPTExNU0dgICAgICB8ID8/PyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8IDpjb25zdDpgRVBPTExNU0dgICAgICB8IElnbm9yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIApAQCAtMjMxLDcgKzI0MCw3IEBACiAuLiBtZXRob2Q6OiBwb2xsLm1vZGlmeShmZCwgZXZlbnRtYXNrKQogCiAgICBNb2RpZmllcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgZmQuIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcwotICAgOm1ldGg6YHJlZ2lzdGVyKGZkLCBldmVudG1hc2spYC4gIEF0dGVtcHRpbmcgdG8gbW9kaWZ5IGEgZmlsZSBkZXNjcmlwdG9yCisgICBgYHJlZ2lzdGVyKGZkLCBldmVudG1hc2spYGAuICBBdHRlbXB0aW5nIHRvIG1vZGlmeSBhIGZpbGUgZGVzY3JpcHRvcgogICAgdGhhdCB3YXMgbmV2ZXIgcmVnaXN0ZXJlZCBjYXVzZXMgYW4gOmV4YzpgSU9FcnJvcmAgZXhjZXB0aW9uIHdpdGggZXJybm8KICAgIDpjb25zdDpgRU5PRU5UYCB0byBiZSByYWlzZWQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NldHMucnN0IGIvRG9jL2xpYnJhcnkvc2V0cy5yc3QKaW5kZXggNDdiMmQ3Ni4uN2JkMjkzMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2V0cy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2V0cy5yc3QKQEAgLTE0LDcgKzE0LDcgQEAKIC4uIHZlcnNpb25hZGRlZDo6IDIuMwogCiAuLiBkZXByZWNhdGVkOjogMi42Ci0gICBUaGUgYnVpbHQtaW4gYGBzZXRgYC9gYGZyb3plbnNldGBgIHR5cGVzIHJlcGxhY2UgdGhpcyBtb2R1bGUuCisgICBUaGUgYnVpbHQtaW4gOmNsYXNzOmBzZXRgLzpjbGFzczpgZnJvemVuc2V0YCB0eXBlcyByZXBsYWNlIHRoaXMgbW9kdWxlLgogCiBUaGUgOm1vZDpgc2V0c2AgbW9kdWxlIHByb3ZpZGVzIGNsYXNzZXMgZm9yIGNvbnN0cnVjdGluZyBhbmQgbWFuaXB1bGF0aW5nCiB1bm9yZGVyZWQgY29sbGVjdGlvbnMgb2YgdW5pcXVlIGVsZW1lbnRzLiAgQ29tbW9uIHVzZXMgaW5jbHVkZSBtZW1iZXJzaGlwCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaGVsdmUucnN0IGIvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdAppbmRleCBjMGJjYjgwLi40ZjJkOTRiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKQEAgLTEzLDYgKzEzLDEwIEBACiBUaGlzIGluY2x1ZGVzIG1vc3QgY2xhc3MgaW5zdGFuY2VzLCByZWN1cnNpdmUgZGF0YSB0eXBlcywgYW5kIG9iamVjdHMgY29udGFpbmluZwogbG90cyBvZiBzaGFyZWQgIHN1Yi1vYmplY3RzLiAgVGhlIGtleXMgYXJlIG9yZGluYXJ5IHN0cmluZ3MuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYHNoZWx2ZSBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvc2hlbHZlLnB5P3ZpZXc9bWFya3VwPmBfCiAKIC4uIGZ1bmN0aW9uOjogb3BlbihmaWxlbmFtZVssIGZsYWc9J2MnWywgcHJvdG9jb2w9Tm9uZVssIHdyaXRlYmFjaz1GYWxzZV1dXSkKIApAQCAtNDYsNiArNTAsMTEgQEAKICAgICAgIDptZXRoOmBjbG9zZWAgZXhwbGljaXRseSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueSBtb3JlLCBvciB1c2UgYQogICAgICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3aXRoIDpmdW5jOmBjb250ZXh0bGliLmNsb3NpbmdgLgogCisuLiB3YXJuaW5nOjoKKworICAgQmVjYXVzZSB0aGUgOm1vZDpgc2hlbHZlYCBtb2R1bGUgaXMgYmFja2VkIGJ5IDptb2Q6YHBpY2tsZWAsIGl0IGlzIGluc2VjdXJlCisgICB0byBsb2FkIGEgc2hlbGYgZnJvbSBhbiB1bnRydXN0ZWQgc291cmNlLiAgTGlrZSB3aXRoIHBpY2tsZSwgbG9hZGluZyBhIHNoZWxmCisgICBjYW4gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZS4KIAogU2hlbGYgb2JqZWN0cyBzdXBwb3J0IGFsbCBtZXRob2RzIHN1cHBvcnRlZCBieSBkaWN0aW9uYXJpZXMuICBUaGlzIGVhc2VzIHRoZQogdHJhbnNpdGlvbiBmcm9tIGRpY3Rpb25hcnkgYmFzZWQgc2NyaXB0cyB0byB0aG9zZSByZXF1aXJpbmcgcGVyc2lzdGVudCBzdG9yYWdlLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdCBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKaW5kZXggYWQzYWI1Ny4uMWIxNjBkOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CkBAIC0xNiw2ICsxNiwxMSBAQAogY29weWluZyBhbmQgcmVtb3ZhbC4gRm9yIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCBmaWxlcywgc2VlIGFsc28gdGhlCiA6bW9kOmBvc2AgbW9kdWxlLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBzaHV0aWwgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3NodXRpbC5weT92aWV3PW1hcmt1cD5gXworCiAuLiB3YXJuaW5nOjoKIAogICAgRXZlbiB0aGUgaGlnaGVyLWxldmVsIGZpbGUgY29weWluZyBmdW5jdGlvbnMgKDpmdW5jOmBjb3B5YCwgOmZ1bmM6YGNvcHkyYCkKQEAgLTI4LDYgKzMzLDkgQEAKICAgIGFyZSBub3QgY29waWVkLgogCiAKK0RpcmVjdG9yeSBhbmQgZmlsZXMgb3BlcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIC4uIGZ1bmN0aW9uOjogY29weWZpbGVvYmooZnNyYywgZmRzdFssIGxlbmd0aF0pCiAKICAgIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLWxpa2Ugb2JqZWN0ICpmc3JjKiB0byB0aGUgZmlsZS1saWtlIG9iamVjdCAqZmRzdCouCkBAIC0xNjksMTEgKzE3NywxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKIAotCiAuLiBfc2h1dGlsLWV4YW1wbGU6CiAKLUV4YW1wbGUKLS0tLS0tLS0KK2NvcHl0cmVlIGV4YW1wbGUKKzo6Ojo6Ojo6Ojo6Ojo6OjoKIAogVGhpcyBleGFtcGxlIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgOmZ1bmM6YGNvcHl0cmVlYCBmdW5jdGlvbiwgZGVzY3JpYmVkCiBhYm92ZSwgd2l0aCB0aGUgZG9jc3RyaW5nIG9taXR0ZWQuICBJdCBkZW1vbnN0cmF0ZXMgbWFueSBvZiB0aGUgb3RoZXIgZnVuY3Rpb25zCkBAIC0yMzgsMyArMjQ1LDk2IEBACiAKICAgIGNvcHl0cmVlKHNvdXJjZSwgZGVzdGluYXRpb24sIGlnbm9yZT1fbG9ncGF0aCkKIAorCitBcmNoaXZlcyBvcGVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGZ1bmN0aW9uOjogbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCBbcm9vdF9kaXIsIFtiYXNlX2RpciwgW3ZlcmJvc2UsIFtkcnlfcnVuLCBbb3duZXIsIFtncm91cCwgW2xvZ2dlcl1dXV1dXV0pCisKKyAgIENyZWF0ZSBhbiBhcmNoaXZlIGZpbGUgKGVnLiB6aXAgb3IgdGFyKSBhbmQgcmV0dXJucyBpdHMgbmFtZS4KKworICAgKmJhc2VfbmFtZSogaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLCBpbmNsdWRpbmcgdGhlIHBhdGgsIG1pbnVzCisgICBhbnkgZm9ybWF0LXNwZWNpZmljIGV4dGVuc2lvbi4gKmZvcm1hdCogaXMgdGhlIGFyY2hpdmUgZm9ybWF0OiBvbmUgb2YKKyAgICJ6aXAiLCAidGFyIiwgImJ6dGFyIiBvciAiZ3p0YXIiLgorCisgICAqcm9vdF9kaXIqIGlzIGEgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlCisgICBhcmNoaXZlOyBpZS4gd2UgdHlwaWNhbGx5IGNoZGlyIGludG8gKnJvb3RfZGlyKiBiZWZvcmUgY3JlYXRpbmcgdGhlCisgICBhcmNoaXZlLgorCisgICAqYmFzZV9kaXIqIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgd2Ugc3RhcnQgYXJjaGl2aW5nIGZyb207CisgICBpZS4gKmJhc2VfZGlyKiB3aWxsIGJlIHRoZSBjb21tb24gcHJlZml4IG9mIGFsbCBmaWxlcyBhbmQKKyAgIGRpcmVjdG9yaWVzIGluIHRoZSBhcmNoaXZlLgorCisgICAqcm9vdF9kaXIqIGFuZCAqYmFzZV9kaXIqIGJvdGggZGVmYXVsdCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyAgICpvd25lciogYW5kICpncm91cCogYXJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBhcmNoaXZlLiBCeSBkZWZhdWx0LAorICAgdXNlcyB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2FyY2hpdmVfZm9ybWF0cygpCisKKyAgIFJldHVybnMgYSBsaXN0IG9mIHN1cHBvcnRlZCBmb3JtYXRzIGZvciBhcmNoaXZpbmcuCisgICBFYWNoIGVsZW1lbnQgb2YgdGhlIHJldHVybmVkIHNlcXVlbmNlIGlzIGEgdHVwbGUgYGAobmFtZSwgZGVzY3JpcHRpb24pYGAKKworICAgQnkgZGVmYXVsdCA6bW9kOmBzaHV0aWxgIHByb3ZpZGVzIHRoZXNlIGZvcm1hdHM6CisKKyAgIC0gKmd6dGFyKjogZ3ppcCdlZCB0YXItZmlsZQorICAgLSAqYnp0YXIqOiBiemlwMidlZCB0YXItZmlsZQorICAgLSAqdGFyKjogdW5jb21wcmVzc2VkIHRhciBmaWxlCisgICAtICp6aXAqOiBaSVAgZmlsZQorCisgICBZb3UgY2FuIHJlZ2lzdGVyIG5ldyBmb3JtYXRzIG9yIHByb3ZpZGUgeW91ciBvd24gYXJjaGl2ZXIgZm9yIGFueSBleGlzdGluZworICAgZm9ybWF0cywgYnkgdXNpbmcgOmZ1bmM6YHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gZnVuY3Rpb246OiByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChuYW1lLCBmdW5jdGlvbiwgW2V4dHJhX2FyZ3MsIFtkZXNjcmlwdGlvbl1dKQorCisgICBSZWdpc3RlcnMgYW4gYXJjaGl2ZXIgZm9yIHRoZSBmb3JtYXQgKm5hbWUqLiAqZnVuY3Rpb24qIGlzIGEgY2FsbGFibGUgdGhhdAorICAgd2lsbCBiZSB1c2VkIHRvIGludm9rZSB0aGUgYXJjaGl2ZXIuCisKKyAgIElmIGdpdmVuLCAqZXh0cmFfYXJncyogaXMgYSBzZXF1ZW5jZSBvZiBgYChuYW1lLCB2YWx1ZSlgYCB0aGF0IHdpbGwgYmUKKyAgIHVzZWQgYXMgZXh0cmEga2V5d29yZHMgYXJndW1lbnRzIHdoZW4gdGhlIGFyY2hpdmVyIGNhbGxhYmxlIGlzIHVzZWQuCisKKyAgICpkZXNjcmlwdGlvbiogaXMgdXNlZCBieSA6ZnVuYzpgZ2V0X2FyY2hpdmVfZm9ybWF0c2Agd2hpY2ggcmV0dXJucyB0aGUKKyAgIGxpc3Qgb2YgYXJjaGl2ZXJzLiBEZWZhdWx0cyB0byBhbiBlbXB0eSBsaXN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisuLiBmdW5jdGlvbjo6ICB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KG5hbWUpCisKKyAgIFJlbW92ZSB0aGUgYXJjaGl2ZSBmb3JtYXQgKm5hbWUqIGZyb20gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGZvcm1hdHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKK0FyY2hpdmluZyBleGFtcGxlCis6Ojo6Ojo6Ojo6Ojo6Ojo6OgorCitJbiB0aGlzIGV4YW1wbGUsIHdlIGNyZWF0ZSBhIGd6aXAnZWQgdGFyLWZpbGUgYXJjaGl2ZSBjb250YWluaW5nIGFsbCBmaWxlcworZm91bmQgaW4gdGhlIDpmaWxlOmAuc3NoYCBkaXJlY3Rvcnkgb2YgdGhlIHVzZXI6OgorCisgICAgPj4+IGZyb20gc2h1dGlsIGltcG9ydCBtYWtlX2FyY2hpdmUKKyAgICA+Pj4gaW1wb3J0IG9zCisgICAgPj4+IGFyY2hpdmVfbmFtZSA9IG9zLnBhdGguZXhwYW5kdXNlcihvcy5wYXRoLmpvaW4oJ34nLCAnbXlhcmNoaXZlJykpCisgICAgPj4+IHJvb3RfZGlyID0gb3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbignficsICcuc3NoJykpCisgICAgPj4+IG1ha2VfYXJjaGl2ZShhcmNoaXZlX25hbWUsICdnenRhcicsIHJvb3RfZGlyKQorICAgICcvVXNlcnMvdGFyZWsvbXlhcmNoaXZlLnRhci5neicKKworVGhlIHJlc3VsdGluZyBhcmNoaXZlIGNvbnRhaW5zOjoKKworICAgICQgdGFyIC10enZmIC9Vc2Vycy90YXJlay9teWFyY2hpdmUudGFyLmd6CisgICAgZHJ3eC0tLS0tLSB0YXJlay9zdGFmZiAgICAgICAwIDIwMTAtMDItMDEgMTY6MjM6NDAgLi8KKyAgICAtcnctci0tci0tIHRhcmVrL3N0YWZmICAgICA2MDkgMjAwOC0wNi0wOSAxMzoyNjo1NCAuL2F1dGhvcml6ZWRfa2V5cworICAgIC1yd3hyLXhyLXggdGFyZWsvc3RhZmYgICAgICA2NSAyMDA4LTA2LTA5IDEzOjI2OjU0IC4vY29uZmlnCisgICAgLXJ3eC0tLS0tLSB0YXJlay9zdGFmZiAgICAgNjY4IDIwMDgtMDYtMDkgMTM6MjY6NTQgLi9pZF9kc2EKKyAgICAtcnd4ci14ci14IHRhcmVrL3N0YWZmICAgICA2MDkgMjAwOC0wNi0wOSAxMzoyNjo1NCAuL2lkX2RzYS5wdWIKKyAgICAtcnctLS0tLS0tIHRhcmVrL3N0YWZmICAgIDE2NzUgMjAwOC0wNi0wOSAxMzoyNjo1NCAuL2lkX3JzYQorICAgIC1ydy1yLS1yLS0gdGFyZWsvc3RhZmYgICAgIDM5NyAyMDA4LTA2LTA5IDEzOjI2OjU0IC4vaWRfcnNhLnB1YgorICAgIC1ydy1yLS1yLS0gdGFyZWsvc3RhZmYgICAzNzE5MiAyMDEwLTAyLTA2IDE4OjIzOjEwIC4va25vd25faG9zdHMKKworCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaWduYWwucnN0IGIvRG9jL2xpYnJhcnkvc2lnbmFsLnJzdAppbmRleCA4NGYwOGIzLi43NGZmNzhkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaWduYWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NpZ25hbC5yc3QKQEAgLTc1LDYgKzc1LDI2IEBACiAgICB0aGUgc3lzdGVtIGFyZSBkZWZpbmVkIGJ5IHRoaXMgbW9kdWxlLgogCiAKKy4uIGRhdGE6OiBDVFJMX0NfRVZFTlQKKworICAgVGhlIHNpZ25hbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBDVFJMK0Mga2V5c3Ryb2tlIGV2ZW50LiBUaGlzIHNpZ25hbCBjYW4KKyAgIG9ubHkgYmUgdXNlZCB3aXRoIDpmdW5jOmBvcy5raWxsYC4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisuLiBkYXRhOjogQ1RSTF9CUkVBS19FVkVOVAorCisgICBUaGUgc2lnbmFsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIENUUkwrQlJFQUsga2V5c3Ryb2tlIGV2ZW50LiBUaGlzIHNpZ25hbCBjYW4KKyAgIG9ubHkgYmUgdXNlZCB3aXRoIDpmdW5jOmBvcy5raWxsYC4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBkYXRhOjogTlNJRwogCiAgICBPbmUgbW9yZSB0aGFuIHRoZSBudW1iZXIgb2YgdGhlIGhpZ2hlc3Qgc2lnbmFsIG51bWJlci4KQEAgLTIxNiw2ICsyMzYsMTAgQEAKICAgIHNlZSB0aGUgOnJlZjpgZGVzY3JpcHRpb24gaW4gdGhlIHR5cGUgaGllcmFyY2h5IDxmcmFtZS1vYmplY3RzPmAgb3Igc2VlIHRoZQogICAgYXR0cmlidXRlIGRlc2NyaXB0aW9ucyBpbiB0aGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlKS4KIAorICAgT24gV2luZG93cywgOmZ1bmM6YHNpZ25hbGAgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggOmNvbnN0OmBTSUdBQlJUYCwKKyAgIDpjb25zdDpgU0lHRlBFYCwgOmNvbnN0OmBTSUdJTExgLCA6Y29uc3Q6YFNJR0lOVGAsIDpjb25zdDpgU0lHU0VHVmAsIG9yCisgICA6Y29uc3Q6YFNJR1RFUk1gLiBBIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkIGluIGFueSBvdGhlciBjYXNlLgorCiAKIC4uIF9zaWduYWwtZXhhbXBsZToKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2ltcGxlaHR0cHNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS9zaW1wbGVodHRwc2VydmVyLnJzdAppbmRleCBlY2I5MzQwLi5hOTJjN2M5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaW1wbGVodHRwc2VydmVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaW1wbGVodHRwc2VydmVyLnJzdApAQCAtODIsMzQgKzgyLDM1IEBACiAgICAgICBgYHRleHQvYGAgdGhlIGZpbGUgaXMgb3BlbmVkIGluIHRleHQgbW9kZTsgb3RoZXJ3aXNlIGJpbmFyeSBtb2RlIGlzIHVzZWQuCiAKICAgICAgIFRoZSA6ZnVuYzpgdGVzdGAgZnVuY3Rpb24gaW4gdGhlIDptb2Q6YFNpbXBsZUhUVFBTZXJ2ZXJgIG1vZHVsZSBpcyBhbgotICAgICAgZXhhbXBsZSB3aGljaCBjcmVhdGVzIGEgc2VydmVyIHVzaW5nIHRoZQotICAgICAgOmNsYXNzOmBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJgIGFzIHRoZSBIYW5kbGVyLgorICAgICAgZXhhbXBsZSB3aGljaCBjcmVhdGVzIGEgc2VydmVyIHVzaW5nIHRoZSA6Y2xhc3M6YFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcmAKKyAgICAgIGFzIHRoZSBIYW5kbGVyLgogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKICAgICAgICAgIFRoZSBgYCdMYXN0LU1vZGlmaWVkJ2BgIGhlYWRlci4KIAogCi1UaGUgOm1vZDpgU2ltcGxlSFRUUFNlcnZlcmAgbW9kdWxlIGNhbiBiZSB1c2VkIHRoZSBmb2xsb3dpbmcgbWFubmVyIGluIG9yZGVyIHRvCi1zZXQgdXAgYSB2ZXJ5IGJhc2ljIHdlYiBzZXJ2ZXIgc2VydmluZyBmaWxlcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudAotZGlyZWN0b3J5Ljo6CitUaGUgOm1vZDpgU2ltcGxlSFRUUFNlcnZlcmAgbW9kdWxlIGNhbiBiZSB1c2VkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyIGluIG9yZGVyCit0byBzZXQgdXAgYSB2ZXJ5IGJhc2ljIHdlYiBzZXJ2ZXIgc2VydmluZyBmaWxlcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudAorZGlyZWN0b3J5LiA6OgogCi0gICAgICAgIGltcG9ydCBTaW1wbGVIVFRQU2VydmVyCi0gICAgICAgIGltcG9ydCBTb2NrZXRTZXJ2ZXIKKyAgIGltcG9ydCBTaW1wbGVIVFRQU2VydmVyCisgICBpbXBvcnQgU29ja2V0U2VydmVyCiAKLSAgICAgICAgUE9SVCA9IDgwMDAKKyAgIFBPUlQgPSA4MDAwCiAKLSAgICAgICAgSGFuZGxlciA9IFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCisgICBIYW5kbGVyID0gU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIKIAotICAgICAgICBodHRwZCA9IFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIoKCIiLCBQT1JUKSwgSGFuZGxlcikKKyAgIGh0dHBkID0gU29ja2V0U2VydmVyLlRDUFNlcnZlcigoIiIsIFBPUlQpLCBIYW5kbGVyKQogCi0gICAgICAgIHByaW50ICJzZXJ2aW5nIGF0IHBvcnQiLCBQT1JUCi0gICAgICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQorICAgcHJpbnQgInNlcnZpbmcgYXQgcG9ydCIsIFBPUlQKKyAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQogCi06bW9kOmBTaW1wbGVIVFRQU2VydmVyYCBtb2R1bGUgY2FuIGFsc28gYmUgaW52b2tlZCBkaXJlY3RseSB1c2luZyB0aGUgYGAtbWBgCi1zd2l0Y2ggb2YgaW50ZXJwcmV0ZXIgd2l0aCBhIGBgcG9ydCBudW1iZXJgYCBhcmd1bWVudC4gU2ltaWxhciB0byBwcmV2aW91cwotZXhhbXBsZSwgdGhpcyBzZXJ2ZXMgdGhlIGZpbGVzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS46OgorVGhlIDptb2Q6YFNpbXBsZUhUVFBTZXJ2ZXJgIG1vZHVsZSBjYW4gYWxzbyBiZSBpbnZva2VkIGRpcmVjdGx5IHVzaW5nIHRoZQorOm9wdGlvbjpgLW1gIHN3aXRjaCBvZiB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBhIGBgcG9ydCBudW1iZXJgYCBhcmd1bWVudC4KK1NpbWlsYXIgdG8gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoaXMgc2VydmVzIHRoZSBmaWxlcyByZWxhdGl2ZSB0byB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5LiA6OgogCi0gICAgICAgIHB5dGhvbiAtbSBTaW1wbGVIVFRQU2VydmVyIDgwMDAKKyAgIHB5dGhvbiAtbSBTaW1wbGVIVFRQU2VydmVyIDgwMDAKIAogLi4gc2VlYWxzbzo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIucnN0CmluZGV4IDdjYmI1ZjAuLmMwODE5YmYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLnJzdApAQCAtMTMzLDYgKzEzMywxNSBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKIAorLi4gYXR0cmlidXRlOjogU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIuZW5jb2RlX3RocmVzaG9sZAorCisgICBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3QgYGBOb25lYGAsIHJlc3BvbnNlcyBsYXJnZXIgdGhhbiB0aGlzIHZhbHVlCisgICB3aWxsIGJlIGVuY29kZWQgdXNpbmcgdGhlICpnemlwKiB0cmFuc2ZlciBlbmNvZGluZywgaWYgcGVybWl0dGVkIGJ5CisgICB0aGUgY2xpZW50LiAgVGhlIGRlZmF1bHQgaXMgYGAxNDAwYGAgd2hpY2ggY29ycmVzcG9uZHMgcm91Z2hseQorICAgdG8gYSBzaW5nbGUgVENQIHBhY2tldC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKIC4uIF9zaW1wbGV4bWxycGNzZXJ2ZXItZXhhbXBsZToKIAogU2ltcGxlWE1MUlBDU2VydmVyIEV4YW1wbGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NpdGUucnN0IGIvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKaW5kZXggNjkyZDA3Ny4uNmFkMTU2ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKQEAgLTEzMSw2ICsxMzEsMzIgQEAKIAogICAgQWRkcyBhIGRpcmVjdG9yeSB0byBzeXMucGF0aCBhbmQgcHJvY2Vzc2VzIGl0cyBwdGggZmlsZXMuCiAKKy4uIGZ1bmN0aW9uOjogZ2V0c2l0ZXBhY2thZ2VzKCkKKworICAgUmV0dXJucyBhIGxpc3QgY29udGFpbmluZyBhbGwgZ2xvYmFsIHNpdGUtcGFja2FnZXMgZGlyZWN0b3JpZXMKKyAgIChhbmQgcG9zc2libHkgc2l0ZS1weXRob24pLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworLi4gZnVuY3Rpb246OiBnZXR1c2VyYmFzZSgpCisKKyAgIFJldHVybnMgdGhlICJ1c2VyIGJhc2UiIGRpcmVjdG9yeSBwYXRoLgorCisgICBUaGUgInVzZXIgYmFzZSIgZGlyZWN0b3J5IGNhbiBiZSB1c2VkIHRvIHN0b3JlIGRhdGEuIElmIHRoZSBnbG9iYWwKKyAgIHZhcmlhYmxlIGBgVVNFUl9CQVNFYGAgaXMgbm90IGluaXRpYWxpemVkIHlldCwgdGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gc2V0CisgICBpdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKy4uIGZ1bmN0aW9uOjogZ2V0dXNlcnNpdGVwYWNrYWdlcygpCisKKyAgIFJldHVybnMgdGhlIHVzZXItc3BlY2lmaWMgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkgcGF0aC4KKworICAgSWYgdGhlIGdsb2JhbCB2YXJpYWJsZSBgYFVTRVJfU0lURWBgIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQsIHRoaXMKKyAgIGZ1bmN0aW9uIHdpbGwgYWxzbyBzZXQgaXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCiAuLiBYWFggVXBkYXRlIGRvY3VtZW50YXRpb24KIC4uIFhYWCBkb2N1bWVudCBweXRob24gLW0gc2l0ZSAtLXVzZXItYmFzZSAtLXVzZXItc2l0ZQorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CmluZGV4IGM4ZjRlZDEuLmQ1OWViZjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CkBAIC00OCw4ICs0OCw3IEBACiAgICBjb25uZWN0aW9uIGF0dGVtcHQgKGlmIG5vdCBzcGVjaWZpZWQsIHRoZSBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0IHNldHRpbmcKICAgIHdpbGwgYmUgdXNlZCkuCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42Ci0gICAgICAqdGltZW91dCogd2FzIGFkZGVkLgorICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CiAKIAogLi4gY2xhc3M6OiBMTVRQKFtob3N0WywgcG9ydFssIGxvY2FsX2hvc3RuYW1lXV1dKQpAQCAtMjk4LDkgKzI5Nyw5IEBACiAgICBhbmQgRVNNVFAgb3B0aW9ucyBzdXBwcmVzc2VkLgogCiAgICBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBub3JtYWxseSBpZiB0aGUgbWFpbCBpcyBhY2NlcHRlZCBmb3IgYXQgbGVhc3Qgb25lCi0gICByZWNpcGllbnQuIE90aGVyd2lzZSBpdCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4gIFRoYXQgaXMsIGlmIHRoaXMgbWV0aG9kIGRvZXMKLSAgIG5vdCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gc29tZW9uZSBzaG91bGQgZ2V0IHlvdXIgbWFpbC4gSWYgdGhpcyBtZXRob2QgZG9lcwotICAgbm90IHRocm93IGFuIGV4Y2VwdGlvbiwgaXQgcmV0dXJucyBhIGRpY3Rpb25hcnksIHdpdGggb25lIGVudHJ5IGZvciBlYWNoCisgICByZWNpcGllbnQuIE90aGVyd2lzZSBpdCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi4gIFRoYXQgaXMsIGlmIHRoaXMgbWV0aG9kIGRvZXMKKyAgIG5vdCByYWlzZSBhbiBleGNlcHRpb24sIHRoZW4gc29tZW9uZSBzaG91bGQgZ2V0IHlvdXIgbWFpbC4gSWYgdGhpcyBtZXRob2QgZG9lcworICAgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiwgaXQgcmV0dXJucyBhIGRpY3Rpb25hcnksIHdpdGggb25lIGVudHJ5IGZvciBlYWNoCiAgICByZWNpcGllbnQgdGhhdCB3YXMgcmVmdXNlZC4gIEVhY2ggZW50cnkgY29udGFpbnMgYSB0dXBsZSBvZiB0aGUgU01UUCBlcnJvciBjb2RlCiAgICBhbmQgdGhlIGFjY29tcGFueWluZyBlcnJvciBtZXNzYWdlIHNlbnQgYnkgdGhlIHNlcnZlci4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc29ja2V0LnJzdCBiL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKaW5kZXggN2ZlMDdiZS4uOTYxNTJmOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc29ja2V0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CkBAIC0yMDUsNyArMjA1LDcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMwogCiAKLS4uIGZ1bmN0aW9uOjogY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzc1ssIHRpbWVvdXRdKQorLi4gZnVuY3Rpb246OiBjcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzWywgdGltZW91dFssIHNvdXJjZV9hZGRyZXNzXV0pCiAKICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uLiAgQ29ubmVjdCB0byAqYWRkcmVzcyogKGEgMi10dXBsZSBgYChob3N0LCBwb3J0KWBgKSwKICAgIGFuZCByZXR1cm4gdGhlIHNvY2tldCBvYmplY3QuICBQYXNzaW5nIHRoZSBvcHRpb25hbCAqdGltZW91dCogcGFyYW1ldGVyIHdpbGwKQEAgLTIxMyw4ICsyMTMsMTUgQEAKICAgICp0aW1lb3V0KiBpcyBzdXBwbGllZCwgdGhlIGdsb2JhbCBkZWZhdWx0IHRpbWVvdXQgc2V0dGluZyByZXR1cm5lZCBieQogICAgOmZ1bmM6YGdldGRlZmF1bHR0aW1lb3V0YCBpcyB1c2VkLgogCisgICBJZiBzdXBwbGllZCwgKnNvdXJjZV9hZGRyZXNzKiBtdXN0IGJlIGEgMi10dXBsZSBgYChob3N0LCBwb3J0KWBgIGZvciB0aGUKKyAgIHNvY2tldCB0byBiaW5kIHRvIGFzIGl0cyBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdGluZy4gIElmIGhvc3Qgb3IgcG9ydAorICAgYXJlICcnIG9yIDAgcmVzcGVjdGl2ZWx5IHRoZSBPUyBkZWZhdWx0IGJlaGF2aW9yIHdpbGwgYmUgdXNlZC4KKwogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICAqc291cmNlX2FkZHJlc3MqIHdhcyBhZGRlZC4KKwogCiAuLiBmdW5jdGlvbjo6IGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGZhbWlseT0wLCBzb2NrdHlwZT0wLCBwcm90bz0wLCBmbGFncz0wKQogCkBAIC01MDgsNiArNTE1LDkgQEAKICAgIE1vZHVsZSA6bW9kOmBTb2NrZXRTZXJ2ZXJgCiAgICAgICBDbGFzc2VzIHRoYXQgc2ltcGxpZnkgd3JpdGluZyBuZXR3b3JrIHNlcnZlcnMuCiAKKyAgIE1vZHVsZSA6bW9kOmBzc2xgCisgICAgICBBIFRMUy9TU0wgd3JhcHBlciBmb3Igc29ja2V0IG9iamVjdHMuCisKIAogLi4gX3NvY2tldC1vYmplY3RzOgogCkBAIC01NDQsNiArNTU0LDEyIEBACiAgICByZW1vdGUgZW5kIHdpbGwgcmVjZWl2ZSBubyBtb3JlIGRhdGEgKGFmdGVyIHF1ZXVlZCBkYXRhIGlzIGZsdXNoZWQpLiBTb2NrZXRzIGFyZQogICAgYXV0b21hdGljYWxseSBjbG9zZWQgd2hlbiB0aGV5IGFyZSBnYXJiYWdlLWNvbGxlY3RlZC4KIAorICAgLi4gbm90ZTo6CisgICAgICA6bWV0aDpgY2xvc2UoKWAgcmVsZWFzZXMgdGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCBhIGNvbm5lY3Rpb24gYnV0CisgICAgICBkb2VzIG5vdCBuZWNlc3NhcmlseSBjbG9zZSB0aGUgY29ubmVjdGlvbiBpbW1lZGlhdGVseS4gIElmIHlvdSB3YW50CisgICAgICB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBpbiBhIHRpbWVseSBmYXNoaW9uLCBjYWxsIDptZXRoOmBzaHV0ZG93bigpYAorICAgICAgYmVmb3JlIDptZXRoOmBjbG9zZSgpYC4KKwogCiAuLiBtZXRob2Q6OiBzb2NrZXQuY29ubmVjdChhZGRyZXNzKQogCkBAIC02NDQsNiArNjYwLDEyIEBACiAgICAqbW9kZSogYW5kICpidWZzaXplKiBhcmd1bWVudHMgYXJlIGludGVycHJldGVkIHRoZSBzYW1lIHdheSBhcyBieSB0aGUgYnVpbHQtaW4KICAgIDpmdW5jOmBmaWxlYCBmdW5jdGlvbi4KIAorICAgLi4gbm90ZTo6CisKKyAgICAgIE9uIFdpbmRvd3MsIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGNyZWF0ZWQgYnkgOm1ldGg6YG1ha2VmaWxlYCBjYW5ub3QgYmUKKyAgICAgIHVzZWQgd2hlcmUgYSBmaWxlIG9iamVjdCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yIGlzIGV4cGVjdGVkLCBzdWNoIGFzIHRoZQorICAgICAgc3RyZWFtIGFyZ3VtZW50cyBvZiA6bWV0aDpgc3VicHJvY2Vzcy5Qb3BlbmAuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LnJlY3YoYnVmc2l6ZVssIGZsYWdzXSkKIApAQCAtNzMzLDcgKzc1NSw3IEBACiAKICAgIFNldCBhIHRpbWVvdXQgb24gYmxvY2tpbmcgc29ja2V0IG9wZXJhdGlvbnMuICBUaGUgKnZhbHVlKiBhcmd1bWVudCBjYW4gYmUgYQogICAgbm9ubmVnYXRpdmUgZmxvYXQgZXhwcmVzc2luZyBzZWNvbmRzLCBvciBgYE5vbmVgYC4gSWYgYSBmbG9hdCBpcyBnaXZlbiwKLSAgIHN1YnNlcXVlbnQgc29ja2V0IG9wZXJhdGlvbnMgd2lsbCByYWlzZSBhbiA6ZXhjOmB0aW1lb3V0YCBleGNlcHRpb24gaWYgdGhlCisgICBzdWJzZXF1ZW50IHNvY2tldCBvcGVyYXRpb25zIHdpbGwgcmFpc2UgYSA6ZXhjOmB0aW1lb3V0YCBleGNlcHRpb24gaWYgdGhlCiAgICB0aW1lb3V0IHBlcmlvZCAqdmFsdWUqIGhhcyBlbGFwc2VkIGJlZm9yZSB0aGUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuICBTZXR0aW5nCiAgICBhIHRpbWVvdXQgb2YgYGBOb25lYGAgZGlzYWJsZXMgdGltZW91dHMgb24gc29ja2V0IG9wZXJhdGlvbnMuCiAgICBgYHMuc2V0dGltZW91dCgwLjApYGAgaXMgZXF1aXZhbGVudCB0byBgYHMuc2V0YmxvY2tpbmcoMClgYDsKQEAgLTc5MSw3ICs4MTMsOSBAQAogICAgU2h1dCBkb3duIG9uZSBvciBib3RoIGhhbHZlcyBvZiB0aGUgY29ubmVjdGlvbi4gIElmICpob3cqIGlzIDpjb25zdDpgU0hVVF9SRGAsCiAgICBmdXJ0aGVyIHJlY2VpdmVzIGFyZSBkaXNhbGxvd2VkLiAgSWYgKmhvdyogaXMgOmNvbnN0OmBTSFVUX1dSYCwgZnVydGhlciBzZW5kcwogICAgYXJlIGRpc2FsbG93ZWQuICBJZiAqaG93KiBpcyA6Y29uc3Q6YFNIVVRfUkRXUmAsIGZ1cnRoZXIgc2VuZHMgYW5kIHJlY2VpdmVzIGFyZQotICAgZGlzYWxsb3dlZC4KKyAgIGRpc2FsbG93ZWQuICBEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLCBzaHV0dGluZyBkb3duIG9uZSBoYWxmIG9mIHRoZSBjb25uZWN0aW9uCisgICBjYW4gYWxzbyBjbG9zZSB0aGUgb3Bwb3NpdGUgaGFsZiAoZS5nLiBvbiBNYWMgT1MgWCwgYGBzaHV0ZG93bihTSFVUX1dSKWBgIGRvZXMKKyAgIG5vdCBhbGxvdyBmdXJ0aGVyIHJlYWRzIG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24pLgogCiBOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIG1ldGhvZHMgOm1ldGg6YHJlYWRgIG9yIDptZXRoOmB3cml0ZWA7IHVzZQogOm1ldGg6YH5zb2NrZXQucmVjdmAgYW5kIDptZXRoOmB+c29ja2V0LnNlbmRgIHdpdGhvdXQgKmZsYWdzKiBhcmd1bWVudCBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc29ja2V0c2VydmVyLnJzdCBiL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QKaW5kZXggNWY2OGQzMy4uZmNlMjE2ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc29ja2V0c2VydmVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zb2NrZXRzZXJ2ZXIucnN0CkBAIC0yMjMsNyArMjIzLDYgQEAKICAgIGRlc2lyZWQuICBJZiA6bWV0aDpgaGFuZGxlX3JlcXVlc3RgIHJlY2VpdmVzIG5vIGluY29taW5nIHJlcXVlc3RzIHdpdGhpbiB0aGUKICAgIHRpbWVvdXQgcGVyaW9kLCB0aGUgOm1ldGg6YGhhbmRsZV90aW1lb3V0YCBtZXRob2QgaXMgY2FsbGVkLgogCi0KIFRoZXJlIGFyZSB2YXJpb3VzIHNlcnZlciBtZXRob2RzIHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyBvZiBiYXNlCiBzZXJ2ZXIgY2xhc3NlcyBsaWtlIDpjbGFzczpgVENQU2VydmVyYDsgdGhlc2UgbWV0aG9kcyBhcmVuJ3QgdXNlZnVsIHRvIGV4dGVybmFsCiB1c2VycyBvZiB0aGUgc2VydmVyIG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NxbGl0ZTMucnN0IGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKaW5kZXggZGM1ZjIzOS4uNTllZDA5NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKQEAgLTgzLDcgKzgzLDcgQEAKICAgID4+PiBmb3Igcm93IGluIGM6CiAgICAuLi4gICAgcHJpbnQgcm93CiAgICAuLi4KLSAgICh1JzIwMDYtMDEtMDUnLCB1J0JVWScsIHUnUkhBVCcsIDEwMCwgMzUuMTQwMDAwMDAwMDAwMDAxKQorICAgKHUnMjAwNi0wMS0wNScsIHUnQlVZJywgdSdSSEFUJywgMTAwLCAzNS4xNCkKICAgICh1JzIwMDYtMDMtMjgnLCB1J0JVWScsIHUnSUJNJywgMTAwMCwgNDUuMCkKICAgICh1JzIwMDYtMDQtMDYnLCB1J1NFTEwnLCB1J0lCTScsIDUwMCwgNTMuMCkKICAgICh1JzIwMDYtMDQtMDUnLCB1J0JVWScsIHUnTVNPRlQnLCAxMDAwLCA3Mi4wKQpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICBmaXJzdCBibGFuayBmb3IgdGhlIGNvbHVtbiBuYW1lOiB0aGUgY29sdW1uIG5hbWUgd291bGQgc2ltcGx5IGJlICJ4Ii4KIAogCi0uLiBmdW5jdGlvbjo6IGNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBpc29sYXRpb25fbGV2ZWwsIGRldGVjdF90eXBlcywgZmFjdG9yeV0pCisuLiBmdW5jdGlvbjo6IGNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCwgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzXSkKIAogICAgT3BlbnMgYSBjb25uZWN0aW9uIHRvIHRoZSBTUUxpdGUgZGF0YWJhc2UgZmlsZSAqZGF0YWJhc2UqLiBZb3UgY2FuIHVzZQogICAgYGAiOm1lbW9yeToiYGAgdG8gb3BlbiBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSB0aGF0IHJlc2lkZXMgaW4gUkFNCkBAIC0yNTgsMjIgKzI1OCwyMSBAQAogLi4gbWV0aG9kOjogQ29ubmVjdGlvbi5leGVjdXRlKHNxbCwgW3BhcmFtZXRlcnNdKQogCiAgICBUaGlzIGlzIGEgbm9uc3RhbmRhcmQgc2hvcnRjdXQgdGhhdCBjcmVhdGVzIGFuIGludGVybWVkaWF0ZSBjdXJzb3Igb2JqZWN0IGJ5Ci0gICBjYWxsaW5nIHRoZSBjdXJzb3IgbWV0aG9kLCB0aGVuIGNhbGxzIHRoZSBjdXJzb3IncwotICAgOm1ldGg6YGV4ZWN1dGU8Q3Vyc29yLmV4ZWN1dGU+YCBtZXRob2Qgd2l0aCB0aGUgcGFyYW1ldGVycyBnaXZlbi4KKyAgIGNhbGxpbmcgdGhlIGN1cnNvciBtZXRob2QsIHRoZW4gY2FsbHMgdGhlIGN1cnNvcidzIDptZXRoOmBleGVjdXRlCisgICA8Q3Vyc29yLmV4ZWN1dGU+YCBtZXRob2Qgd2l0aCB0aGUgcGFyYW1ldGVycyBnaXZlbi4KIAogCiAuLiBtZXRob2Q6OiBDb25uZWN0aW9uLmV4ZWN1dGVtYW55KHNxbCwgW3BhcmFtZXRlcnNdKQogCiAgICBUaGlzIGlzIGEgbm9uc3RhbmRhcmQgc2hvcnRjdXQgdGhhdCBjcmVhdGVzIGFuIGludGVybWVkaWF0ZSBjdXJzb3Igb2JqZWN0IGJ5Ci0gICBjYWxsaW5nIHRoZSBjdXJzb3IgbWV0aG9kLCB0aGVuIGNhbGxzIHRoZSBjdXJzb3IncwotICAgOm1ldGg6YGV4ZWN1dGVtYW55PEN1cnNvci5leGVjdXRlbWFueT5gIG1ldGhvZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVuLgorICAgY2FsbGluZyB0aGUgY3Vyc29yIG1ldGhvZCwgdGhlbiBjYWxscyB0aGUgY3Vyc29yJ3MgOm1ldGg6YGV4ZWN1dGVtYW55CisgICA8Q3Vyc29yLmV4ZWN1dGVtYW55PmAgbWV0aG9kIHdpdGggdGhlIHBhcmFtZXRlcnMgZ2l2ZW4uCiAKIC4uIG1ldGhvZDo6IENvbm5lY3Rpb24uZXhlY3V0ZXNjcmlwdChzcWxfc2NyaXB0KQogCiAgICBUaGlzIGlzIGEgbm9uc3RhbmRhcmQgc2hvcnRjdXQgdGhhdCBjcmVhdGVzIGFuIGludGVybWVkaWF0ZSBjdXJzb3Igb2JqZWN0IGJ5Ci0gICBjYWxsaW5nIHRoZSBjdXJzb3IgbWV0aG9kLCB0aGVuIGNhbGxzIHRoZSBjdXJzb3IncwotICAgOm1ldGg6YGV4ZWN1dGVzY3JpcHQ8Q3Vyc29yLmV4ZWN1dGVzY3JpcHQ+YCBtZXRob2Qgd2l0aCB0aGUgcGFyYW1ldGVycwotICAgZ2l2ZW4uCisgICBjYWxsaW5nIHRoZSBjdXJzb3IgbWV0aG9kLCB0aGVuIGNhbGxzIHRoZSBjdXJzb3IncyA6bWV0aDpgZXhlY3V0ZXNjcmlwdAorICAgPEN1cnNvci5leGVjdXRlc2NyaXB0PmAgbWV0aG9kIHdpdGggdGhlIHBhcmFtZXRlcnMgZ2l2ZW4uCiAKIAogLi4gbWV0aG9kOjogQ29ubmVjdGlvbi5jcmVhdGVfZnVuY3Rpb24obmFtZSwgbnVtX3BhcmFtcywgZnVuYykKQEAgLTM2OCw2ICszNjcsMjUgQEAKICAgIG1ldGhvZCB3aXRoIDpjb25zdDpgTm9uZWAgZm9yICpoYW5kbGVyKi4KIAogCisuLiBtZXRob2Q6OiBDb25uZWN0aW9uLmVuYWJsZV9sb2FkX2V4dGVuc2lvbihlbmFibGVkKQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworICAgVGhpcyByb3V0aW5lIGFsbG93cy9kaXNhbGxvd3MgdGhlIFNRTGl0ZSBlbmdpbmUgdG8gbG9hZCBTUUxpdGUgZXh0ZW5zaW9ucworICAgZnJvbSBzaGFyZWQgbGlicmFyaWVzLiAgU1FMaXRlIGV4dGVuc2lvbnMgY2FuIGRlZmluZSBuZXcgZnVuY3Rpb25zLAorICAgYWdncmVnYXRlcyBvciB3aG9sZSBuZXcgdmlydHVhbCB0YWJsZSBpbXBsZW1lbnRhdGlvbnMuICBPbmUgd2VsbC1rbm93bgorICAgZXh0ZW5zaW9uIGlzIHRoZSBmdWxsdGV4dC1zZWFyY2ggZXh0ZW5zaW9uIGRpc3RyaWJ1dGVkIHdpdGggU1FMaXRlLgorCisgICAuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL3NxbGl0ZTMvbG9hZF9leHRlbnNpb24ucHkKKworLi4gbWV0aG9kOjogQ29ubmVjdGlvbi5sb2FkX2V4dGVuc2lvbihwYXRoKQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworICAgVGhpcyByb3V0aW5lIGxvYWRzIGEgU1FMaXRlIGV4dGVuc2lvbiBmcm9tIGEgc2hhcmVkIGxpYnJhcnkuICBZb3UgaGF2ZSB0bworICAgZW5hYmxlIGV4dGVuc2lvbiBsb2FkaW5nIHdpdGggOm1ldGg6YGVuYWJsZV9sb2FkX2V4dGVuc2lvbmAgYmVmb3JlIHlvdSBjYW4KKyAgIHVzZSB0aGlzIHJvdXRpbmUuCisKIC4uIGF0dHJpYnV0ZTo6IENvbm5lY3Rpb24ucm93X2ZhY3RvcnkKIAogICAgWW91IGNhbiBjaGFuZ2UgdGhpcyBhdHRyaWJ1dGUgdG8gYSBjYWxsYWJsZSB0aGF0IGFjY2VwdHMgdGhlIGN1cnNvciBhbmQgdGhlCkBAIC00NDEsNyArNDU5LDcgQEAKIAogLi4gY2xhc3M6OiBDdXJzb3IKIAotICAgQSBTUUxpdGUgZGF0YWJhc2UgY3Vyc29yIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHM6CisgICBBIDpjbGFzczpgQ3Vyc29yYCBpbnN0YW5jZSBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzLgogCiAuLiBtZXRob2Q6OiBDdXJzb3IuZXhlY3V0ZShzcWwsIFtwYXJhbWV0ZXJzXSkKIApAQCAtNjAyLDcgKzYyMCw3IEBACiAgICAgPj4+IHR5cGUocikKICAgICA8dHlwZSAnc3FsaXRlMy5Sb3cnPgogICAgID4+PiByCi0gICAgKHUnMjAwNi0wMS0wNScsIHUnQlVZJywgdSdSSEFUJywgMTAwLjAsIDM1LjE0MDAwMDAwMDAwMDAwMSkKKyAgICAodScyMDA2LTAxLTA1JywgdSdCVVknLCB1J1JIQVQnLCAxMDAuMCwgMzUuMTQpCiAgICAgPj4+IGxlbihyKQogICAgIDUKICAgICA+Pj4gclsyXQpAQCAtODYxLDMgKzg3OSwxNyBAQAogY29tbWl0dGVkOgogCiAuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL3NxbGl0ZTMvY3R4X21hbmFnZXIucHkKKworCitDb21tb24gaXNzdWVzCistLS0tLS0tLS0tLS0tCisKK011bHRpdGhyZWFkaW5nCiteXl5eXl5eXl5eXl5eXgorCitPbGRlciBTUUxpdGUgdmVyc2lvbnMgaGFkIGlzc3VlcyB3aXRoIHNoYXJpbmcgY29ubmVjdGlvbnMgYmV0d2VlbiB0aHJlYWRzLgorVGhhdCdzIHdoeSB0aGUgUHl0aG9uIG1vZHVsZSBkaXNhbGxvd3Mgc2hhcmluZyBjb25uZWN0aW9ucyBhbmQgY3Vyc29ycyBiZXR3ZWVuCit0aHJlYWRzLiBJZiB5b3Ugc3RpbGwgdHJ5IHRvIGRvIHNvLCB5b3Ugd2lsbCBnZXQgYW4gZXhjZXB0aW9uIGF0IHJ1bnRpbWUuCisKK1RoZSBvbmx5IGV4Y2VwdGlvbiBpcyBjYWxsaW5nIHRoZSA6bWV0aDpgfkNvbm5lY3Rpb24uaW50ZXJydXB0YCBtZXRob2QsIHdoaWNoCitvbmx5IG1ha2VzIHNlbnNlIHRvIGNhbGwgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zc2wucnN0IGIvRG9jL2xpYnJhcnkvc3NsLnJzdAppbmRleCA1Yzc2ZGY5Li5hN2U3OGJkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zc2wucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NzbC5yc3QKQEAgLTEsOCArMSw4IEBACi06bW9kOmBzc2xgIC0tLSBTU0wgd3JhcHBlciBmb3Igc29ja2V0IG9iamVjdHMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOm1vZDpgc3NsYCAtLS0gVExTL1NTTCB3cmFwcGVyIGZvciBzb2NrZXQgb2JqZWN0cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAuLiBtb2R1bGU6OiBzc2wKLSAgIDpzeW5vcHNpczogU1NMIHdyYXBwZXIgZm9yIHNvY2tldCBvYmplY3RzCisgICA6c3lub3BzaXM6IFRMUy9TU0wgd3JhcHBlciBmb3Igc29ja2V0IG9iamVjdHMKIAogLi4gbW9kdWxlYXV0aG9yOjogQmlsbCBKYW5zc2VuIDxiaWxsLmphbnNzZW5AZ21haWwuY29tPgogCkBAIC01MCw3ICs1MCw3IEBACiAgICBpcyBhIHN1YnR5cGUgb2YgOmV4Yzpgc29ja2V0LmVycm9yYCwgd2hpY2ggaW4gdHVybiBpcyBhIHN1YnR5cGUgb2YKICAgIDpleGM6YElPRXJyb3JgLgogCi0uLiBmdW5jdGlvbjo6IHdyYXBfc29ja2V0IChzb2NrLCBrZXlmaWxlPU5vbmUsIGNlcnRmaWxlPU5vbmUsIHNlcnZlcl9zaWRlPUZhbHNlLCBjZXJ0X3JlcXM9Q0VSVF9OT05FLCBzc2xfdmVyc2lvbj17c2VlIGRvY3N9LCBjYV9jZXJ0cz1Ob25lLCBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1UcnVlLCBzdXBwcmVzc19yYWdnZWRfZW9mcz1UcnVlKQorLi4gZnVuY3Rpb246OiB3cmFwX3NvY2tldCAoc29jaywga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lLCBzZXJ2ZXJfc2lkZT1GYWxzZSwgY2VydF9yZXFzPUNFUlRfTk9ORSwgc3NsX3ZlcnNpb249e3NlZSBkb2NzfSwgY2FfY2VydHM9Tm9uZSwgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9VHJ1ZSwgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9VHJ1ZSwgY2lwaGVycz1Ob25lKQogCiAgICBUYWtlcyBhbiBpbnN0YW5jZSBgYHNvY2tgYCBvZiA6Y2xhc3M6YHNvY2tldC5zb2NrZXRgLCBhbmQgcmV0dXJucyBhbiBpbnN0YW5jZQogICAgb2YgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCwgYSBzdWJ0eXBlIG9mIDpjbGFzczpgc29ja2V0LnNvY2tldGAsIHdoaWNoIHdyYXBzCkBAIC0xMTMsMTQgKzExMywyNiBAQAogICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PQogICAgICAgICAqY2xpZW50KiAvICoqc2VydmVyKiogICAgKipTU0x2MioqICAqKlNTTHYzKiogICoqU1NMdjIzKiogICoqVExTdjEqKgogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLQotICAgICAgICAqU1NMdjIqICAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzKiAgICAgICAgbm8KKyAgICAgICAgKlNTTHYyKiAgICAgICAgICAgICAgICAgICAgeWVzICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vCiAgICAgICAgICpTU0x2MyogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgeWVzICAgICAgICB5ZXMgICAgICAgICBubwogICAgICAgICAqU1NMdjIzKiAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8KICAgICAgICAgKlRMU3YxKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIHllcwogICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PQogCi0gICBJbiBzb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5TU0wgKGZvciBpbnN0YW5jZSwgMC45LjdsIG9uIE9TIFggMTAuNCksIGFuCi0gICBTU0x2MiBjbGllbnQgY291bGQgbm90IGNvbm5lY3QgdG8gYW4gU1NMdjIzIHNlcnZlci4KKyAgIC4uIG5vdGU6OgorCisgICAgICBXaGljaCBjb25uZWN0aW9ucyBzdWNjZWVkIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24gb2YKKyAgICAgIE9wZW5TU0wuICBGb3IgaW5zdGFuY2UsIGluIHNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlblNTTCAoc3VjaAorICAgICAgYXMgMC45LjdsIG9uIE9TIFggMTAuNCksIGFuIFNTTHYyIGNsaWVudCBjb3VsZCBub3QgY29ubmVjdCB0byBhbgorICAgICAgU1NMdjIzIHNlcnZlci4gIEFub3RoZXIgZXhhbXBsZTogYmVnaW5uaW5nIHdpdGggT3BlblNTTCAxLjAuMCwKKyAgICAgIGFuIFNTTHYyMyBjbGllbnQgd2lsbCBub3QgYWN0dWFsbHkgYXR0ZW1wdCBTU0x2MiBjb25uZWN0aW9ucworICAgICAgdW5sZXNzIHlvdSBleHBsaWNpdGx5IGVuYWJsZSBTU0x2MiBjaXBoZXJzOyBmb3IgZXhhbXBsZSwgeW91CisgICAgICBtaWdodCBzcGVjaWZ5IGBgIkFMTCJgYCBvciBgYCJTU0x2MiJgYCBhcyB0aGUgKmNpcGhlcnMqIHBhcmFtZXRlcgorICAgICAgdG8gZW5hYmxlIHRoZW0uCisKKyAgIFRoZSAqY2lwaGVycyogcGFyYW1ldGVyIHNldHMgdGhlIGF2YWlsYWJsZSBjaXBoZXJzIGZvciB0aGlzIFNTTCBvYmplY3QuCisgICBJdCBzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIGBPcGVuU1NMIGNpcGhlciBsaXN0IGZvcm1hdAorICAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVJfTElTVF9GT1JNQVQ+YF8uCiAKICAgIFRoZSBwYXJhbWV0ZXIgYGBkb19oYW5kc2hha2Vfb25fY29ubmVjdGBgIHNwZWNpZmllcyB3aGV0aGVyIHRvIGRvIHRoZSBTU0wKICAgIGhhbmRzaGFrZSBhdXRvbWF0aWNhbGx5IGFmdGVyIGRvaW5nIGEgOm1ldGg6YHNvY2tldC5jb25uZWN0YCwgb3Igd2hldGhlciB0aGUKQEAgLTEzNSw2ICsxNDcsOSBAQAogICAgbm9ybWFsIEVPRiBpbiByZXNwb25zZSB0byB1bmV4cGVjdGVkIEVPRiBlcnJvcnMgcmFpc2VkIGZyb20gdGhlIHVuZGVybHlpbmcKICAgIHNvY2tldDsgaWYgOmNvbnN0OmBGYWxzZWAsIGl0IHdpbGwgcmFpc2UgdGhlIGV4Y2VwdGlvbnMgYmFjayB0byB0aGUgY2FsbGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpjaXBoZXJzKi4KKwogLi4gZnVuY3Rpb246OiBSQU5EX3N0YXR1cygpCiAKICAgIFJldHVybnMgVHJ1ZSBpZiB0aGUgU1NMIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciBoYXMgYmVlbiBzZWVkZWQgd2l0aApAQCAtMjQ0LDYgKzI1OSwzNiBAQAogICAgbW9kZXJuIHZlcnNpb24sIGFuZCBwcm9iYWJseSB0aGUgYmVzdCBjaG9pY2UgZm9yIG1heGltdW0gcHJvdGVjdGlvbiwgaWYgYm90aAogICAgc2lkZXMgY2FuIHNwZWFrIGl0LgogCisuLiBkYXRhOjogT1BFTlNTTF9WRVJTSU9OCisKKyAgIFRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgT3BlblNTTCBsaWJyYXJ5IGxvYWRlZCBieSB0aGUgaW50ZXJwcmV0ZXI6OgorCisgICAgPj4+IHNzbC5PUEVOU1NMX1ZFUlNJT04KKyAgICAnT3BlblNTTCAwLjkuOGsgMjUgTWFyIDIwMDknCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisuLiBkYXRhOjogT1BFTlNTTF9WRVJTSU9OX0lORk8KKworICAgQSB0dXBsZSBvZiBmaXZlIGludGVnZXJzIHJlcHJlc2VudGluZyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgT3BlblNTTCBsaWJyYXJ5OjoKKworICAgID4+PiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8KKyAgICAoMCwgOSwgOCwgMTEsIDE1KQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworLi4gZGF0YTo6IE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIKKworICAgVGhlIHJhdyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgT3BlblNTTCBsaWJyYXJ5LCBhcyBhIHNpbmdsZSBpbnRlZ2VyOjoKKworICAgID4+PiBzc2wuT1BFTlNTTF9WRVJTSU9OX05VTUJFUgorICAgIDk0NzAxNDNMCisgICAgPj4+IGhleChzc2wuT1BFTlNTTF9WRVJTSU9OX05VTUJFUikKKyAgICAnMHg5MDgwYmZMJworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKwogCiBTU0xTb2NrZXQgT2JqZWN0cwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ2MCwxMSArNTA1LDExIEBACiBzaG91bGQgdXNlIHRoZSBmb2xsb3dpbmcgaWRpb206OgogCiAgICB0cnk6Ci0gICAgICBpbXBvcnQgc3NsCisgICAgICAgaW1wb3J0IHNzbAogICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgcGFzcworICAgICAgIHBhc3MKICAgIGVsc2U6Ci0gICAgICBbIGRvIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIFNTTCBzdXBwb3J0IF0KKyAgICAgICAuLi4gIyBkbyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBTU0wgc3VwcG9ydAogCiBDbGllbnQtc2lkZSBvcGVyYXRpb24KIF5eXl5eXl5eXl5eXl5eXl5eXl5eXgpAQCAtNTM3LDI5ICs1ODIsMzEgQEAKIGZvciBpdDo6CiAKICAgIHdoaWxlIFRydWU6Ci0gICAgICBuZXdzb2NrZXQsIGZyb21hZGRyID0gYmluZHNvY2tldC5hY2NlcHQoKQotICAgICAgY29ubnN0cmVhbSA9IHNzbC53cmFwX3NvY2tldChuZXdzb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPSJteWNlcnRmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT0ibXlrZXlmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1RMU3YxKQotICAgICAgZGVhbF93aXRoX2NsaWVudChjb25uc3RyZWFtKQorICAgICAgIG5ld3NvY2tldCwgZnJvbWFkZHIgPSBiaW5kc29ja2V0LmFjY2VwdCgpCisgICAgICAgY29ubnN0cmVhbSA9IHNzbC53cmFwX3NvY2tldChuZXdzb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Im15Y2VydGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT0ibXlrZXlmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICB0cnk6CisgICAgICAgICAgIGRlYWxfd2l0aF9jbGllbnQoY29ubnN0cmVhbSkKKyAgICAgICBmaW5hbGx5OgorICAgICAgICAgICBjb25uc3RyZWFtLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCisgICAgICAgICAgIGNvbm5zdHJlYW0uY2xvc2UoKQogCiBUaGVuIHlvdSdkIHJlYWQgZGF0YSBmcm9tIHRoZSBgYGNvbm5zdHJlYW1gYCBhbmQgZG8gc29tZXRoaW5nIHdpdGggaXQgdGlsbCB5b3UKIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBjbGllbnQgKG9yIHRoZSBjbGllbnQgaXMgZmluaXNoZWQgd2l0aCB5b3UpOjoKIAogICAgZGVmIGRlYWxfd2l0aF9jbGllbnQoY29ubnN0cmVhbSk6Ci0KLSAgICAgIGRhdGEgPSBjb25uc3RyZWFtLnJlYWQoKQotICAgICAgIyBudWxsIGRhdGEgbWVhbnMgdGhlIGNsaWVudCBpcyBmaW5pc2hlZCB3aXRoIHVzCi0gICAgICB3aGlsZSBkYXRhOgotICAgICAgICAgaWYgbm90IGRvX3NvbWV0aGluZyhjb25uc3RyZWFtLCBkYXRhKToKLSAgICAgICAgICAgICMgd2UnbGwgYXNzdW1lIGRvX3NvbWV0aGluZyByZXR1cm5zIEZhbHNlCi0gICAgICAgICAgICAjIHdoZW4gd2UncmUgZmluaXNoZWQgd2l0aCBjbGllbnQKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICBkYXRhID0gY29ubnN0cmVhbS5yZWFkKCkKLSAgICAgICMgZmluaXNoZWQgd2l0aCBjbGllbnQKLSAgICAgIGNvbm5zdHJlYW0uY2xvc2UoKQorICAgICAgIGRhdGEgPSBjb25uc3RyZWFtLnJlYWQoKQorICAgICAgICMgbnVsbCBkYXRhIG1lYW5zIHRoZSBjbGllbnQgaXMgZmluaXNoZWQgd2l0aCB1cworICAgICAgIHdoaWxlIGRhdGE6CisgICAgICAgICAgIGlmIG5vdCBkb19zb21ldGhpbmcoY29ubnN0cmVhbSwgZGF0YSk6CisgICAgICAgICAgICAgICAjIHdlJ2xsIGFzc3VtZSBkb19zb21ldGhpbmcgcmV0dXJucyBGYWxzZQorICAgICAgICAgICAgICAgIyB3aGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggY2xpZW50CisgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICBkYXRhID0gY29ubnN0cmVhbS5yZWFkKCkKKyAgICAgICAjIGZpbmlzaGVkIHdpdGggY2xpZW50CiAKIEFuZCBnbyBiYWNrIHRvIGxpc3RlbmluZyBmb3IgbmV3IGNsaWVudCBjb25uZWN0aW9ucy4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CmluZGV4IDY5OTlhNWIuLmYwYmEwYTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKQEAgLTIyNCwxOCArMjI0LDIwIEBACiAgICBwYWlyOiBDOyBsYW5ndWFnZQogCiBUaGVyZSBhcmUgZm91ciBkaXN0aW5jdCBudW1lcmljIHR5cGVzOiA6ZGZuOmBwbGFpbiBpbnRlZ2Vyc2AsIDpkZm46YGxvbmcKLWludGVnZXJzYCwgIDpkZm46YGZsb2F0aW5nIHBvaW50IG51bWJlcnNgLCBhbmQgOmRmbjpgY29tcGxleCBudW1iZXJzYC4gSW4KK2ludGVnZXJzYCwgOmRmbjpgZmxvYXRpbmcgcG9pbnQgbnVtYmVyc2AsIGFuZCA6ZGZuOmBjb21wbGV4IG51bWJlcnNgLiBJbgogYWRkaXRpb24sIEJvb2xlYW5zIGFyZSBhIHN1YnR5cGUgb2YgcGxhaW4gaW50ZWdlcnMuIFBsYWluIGludGVnZXJzIChhbHNvIGp1c3QKIGNhbGxlZCA6ZGZuOmBpbnRlZ2Vyc2ApIGFyZSBpbXBsZW1lbnRlZCB1c2luZyA6Y3R5cGU6YGxvbmdgIGluIEMsIHdoaWNoIGdpdmVzCiB0aGVtIGF0IGxlYXN0IDMyIGJpdHMgb2YgcHJlY2lzaW9uIChgYHN5cy5tYXhpbnRgYCBpcyBhbHdheXMgc2V0IHRvIHRoZSBtYXhpbXVtCiBwbGFpbiBpbnRlZ2VyIHZhbHVlIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybSwgdGhlIG1pbmltdW0gdmFsdWUgaXMKLWBgLXN5cy5tYXhpbnQgLSAxYGApLiAgTG9uZyBpbnRlZ2VycyBoYXZlIHVubGltaXRlZCBwcmVjaXNpb24uIEZsb2F0aW5nIHBvaW50Ci1udW1iZXJzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyA6Y3R5cGU6YGRvdWJsZWAgaW4gQy4gQWxsIGJldHMgb24gdGhlaXIgcHJlY2lzaW9uCi1hcmUgb2ZmIHVubGVzcyB5b3UgaGFwcGVuIHRvIGtub3cgdGhlIG1hY2hpbmUgeW91IGFyZSB3b3JraW5nIHdpdGguCi0KLUNvbXBsZXggbnVtYmVycyBoYXZlIGEgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQsIHdoaWNoIGFyZSBlYWNoIGltcGxlbWVudGVkIHVzaW5nCi06Y3R5cGU6YGRvdWJsZWAgaW4gQy4gIFRvIGV4dHJhY3QgdGhlc2UgcGFydHMgZnJvbSBhIGNvbXBsZXggbnVtYmVyICp6KiwgdXNlCi1gYHoucmVhbGBgIGFuZCBgYHouaW1hZ2BgLgorYGAtc3lzLm1heGludCAtIDFgYCkuICBMb25nIGludGVnZXJzIGhhdmUgdW5saW1pdGVkIHByZWNpc2lvbi4gIEZsb2F0aW5nIHBvaW50CitudW1iZXJzIGFyZSB1c3VhbGx5IGltcGxlbWVudGVkIHVzaW5nIDpjdHlwZTpgZG91YmxlYCBpbiBDOyBpbmZvcm1hdGlvbiBhYm91dAordGhlIHByZWNpc2lvbiBhbmQgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBmb3IgdGhlCittYWNoaW5lIG9uIHdoaWNoIHlvdXIgcHJvZ3JhbSBpcyBydW5uaW5nIGlzIGF2YWlsYWJsZSBpbgorOmRhdGE6YHN5cy5mbG9hdF9pbmZvYC4gIENvbXBsZXggbnVtYmVycyBoYXZlIGEgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQsIHdoaWNoCithcmUgZWFjaCBhIGZsb2F0aW5nIHBvaW50IG51bWJlci4gIFRvIGV4dHJhY3QgdGhlc2UgcGFydHMgZnJvbSBhIGNvbXBsZXggbnVtYmVyCisqeiosIHVzZSBgYHoucmVhbGBgIGFuZCBgYHouaW1hZ2BgLiAoVGhlIHN0YW5kYXJkIGxpYnJhcnkgaW5jbHVkZXMgYWRkaXRpb25hbAorbnVtZXJpYyB0eXBlcywgOm1vZDpgZnJhY3Rpb25zYCB0aGF0IGhvbGQgcmF0aW9uYWxzLCBhbmQgOm1vZDpgZGVjaW1hbGAgdGhhdAoraG9sZCBmbG9hdGluZy1wb2ludCBudW1iZXJzIHdpdGggdXNlci1kZWZpbmFibGUgcHJlY2lzaW9uLikKIAogLi4gaW5kZXg6OgogICAgcGFpcjogbnVtZXJpYzsgbGl0ZXJhbHMKQEAgLTM1OCwxMCArMzYwLDEwIEBACiAgICBTZWUgOnJlZjpgYnVpbHQtaW4tZnVuY3NgIGZvciBhIGZ1bGwgZGVzY3JpcHRpb24uCiAKICg0KQotICAgQ29tcGxleCBmbG9vciBkaXZpc2lvbiBvcGVyYXRvciwgbW9kdWxvIG9wZXJhdG9yLCBhbmQgOmZ1bmM6YGRpdm1vZGAuCi0KICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjMKLSAgICAgIEluc3RlYWQgY29udmVydCB0byBmbG9hdCB1c2luZyA6ZnVuYzpgYWJzYCBpZiBhcHByb3ByaWF0ZS4KKyAgICAgIFRoZSBmbG9vciBkaXZpc2lvbiBvcGVyYXRvciwgdGhlIG1vZHVsbyBvcGVyYXRvciwgYW5kIHRoZSA6ZnVuYzpgZGl2bW9kYAorICAgICAgZnVuY3Rpb24gYXJlIG5vIGxvbmdlciBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMuICBJbnN0ZWFkLCBjb252ZXJ0IHRvCisgICAgICBhIGZsb2F0aW5nIHBvaW50IG51bWJlciB1c2luZyB0aGUgOmZ1bmM6YGFic2AgZnVuY3Rpb24gaWYgYXBwcm9wcmlhdGUuCiAKICg1KQogICAgQWxzbyByZWZlcnJlZCB0byBhcyBpbnRlZ2VyIGRpdmlzaW9uLiAgVGhlIHJlc3VsdGFudCB2YWx1ZSBpcyBhIHdob2xlIGludGVnZXIsCkBAIC00NTUsNiArNDU3LDM3IEBACiAgICBBIHJpZ2h0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGVxdWl2YWxlbnQgdG8gZGl2aXNpb24gYnkgYGBwb3coMiwgbilgYC4KIAogCitBZGRpdGlvbmFsIE1ldGhvZHMgb24gSW50ZWdlciBUeXBlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogaW50LmJpdF9sZW5ndGgoKQorLi4gbWV0aG9kOjogbG9uZy5iaXRfbGVuZ3RoKCkKKworICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCBhbiBpbnRlZ2VyIGluIGJpbmFyeSwKKyAgICBleGNsdWRpbmcgdGhlIHNpZ24gYW5kIGxlYWRpbmcgemVyb3M6OgorCisgICAgICAgID4+PiBuID0gLTM3CisgICAgICAgID4+PiBiaW4obikKKyAgICAgICAgJy0wYjEwMDEwMScKKyAgICAgICAgPj4+IG4uYml0X2xlbmd0aCgpCisgICAgICAgIDYKKworICAgIE1vcmUgcHJlY2lzZWx5LCBpZiBgYHhgYCBpcyBub256ZXJvLCB0aGVuIGBgeC5iaXRfbGVuZ3RoKClgYCBpcyB0aGUKKyAgICB1bmlxdWUgcG9zaXRpdmUgaW50ZWdlciBgYGtgYCBzdWNoIHRoYXQgYGAyKiooay0xKSA8PSBhYnMoeCkgPCAyKiprYGAuCisgICAgRXF1aXZhbGVudGx5LCB3aGVuIGBgYWJzKHgpYGAgaXMgc21hbGwgZW5vdWdoIHRvIGhhdmUgYSBjb3JyZWN0bHkKKyAgICByb3VuZGVkIGxvZ2FyaXRobSwgdGhlbiBgYGsgPSAxICsgaW50KGxvZyhhYnMoeCksIDIpKWBgLgorICAgIElmIGBgeGBgIGlzIHplcm8sIHRoZW4gYGB4LmJpdF9sZW5ndGgoKWBgIHJldHVybnMgYGAwYGAuCisKKyAgICBFcXVpdmFsZW50IHRvOjoKKworICAgICAgICBkZWYgYml0X2xlbmd0aChzZWxmKToKKyAgICAgICAgICAgIHMgPSBiaW4oc2VsZikgICAgICAgIyBiaW5hcnkgcmVwcmVzZW50YXRpb246ICBiaW4oLTM3KSAtLT4gJy0wYjEwMDEwMScKKyAgICAgICAgICAgIHMgPSBzLmxzdHJpcCgnLTBiJykgIyByZW1vdmUgbGVhZGluZyB6ZXJvcyBhbmQgbWludXMgc2lnbgorICAgICAgICAgICAgcmV0dXJuIGxlbihzKSAgICAgICAjIGxlbignMTAwMTAxJykgLS0+IDYKKworICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIEFkZGl0aW9uYWwgTWV0aG9kcyBvbiBGbG9hdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTQ2MiwxMiArNDk1LDI0IEBACiAKIC4uIG1ldGhvZDo6IGZsb2F0LmFzX2ludGVnZXJfcmF0aW8oKQogCi0gICAgUmV0dXJuIGEgcGFpciBvZiBpbnRlZ2VycyB3aG9zZSByYXRpbyBpcyBleGFjdGx5IGVxdWFsIHRvIHRoZQotICAgIG9yaWdpbmFsIGZsb2F0IGFuZCB3aXRoIGEgcG9zaXRpdmUgZGVub21pbmF0b3IuICBSYWlzZXMKLSAgICA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBvbiBpbmZpbml0aWVzIGFuZCBhIDpleGM6YFZhbHVlRXJyb3JgIG9uCi0gICAgTmFOcy4KKyAgIFJldHVybiBhIHBhaXIgb2YgaW50ZWdlcnMgd2hvc2UgcmF0aW8gaXMgZXhhY3RseSBlcXVhbCB0byB0aGUKKyAgIG9yaWdpbmFsIGZsb2F0IGFuZCB3aXRoIGEgcG9zaXRpdmUgZGVub21pbmF0b3IuICBSYWlzZXMKKyAgIDpleGM6YE92ZXJmbG93RXJyb3JgIG9uIGluZmluaXRpZXMgYW5kIGEgOmV4YzpgVmFsdWVFcnJvcmAgb24KKyAgIE5hTnMuCiAKLSAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgorCisuLiBtZXRob2Q6OiBmbG9hdC5pc19pbnRlZ2VyKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBmbG9hdCBpbnN0YW5jZSBpcyBmaW5pdGUgd2l0aCBpbnRlZ3JhbAorICAgdmFsdWUsIGFuZCBgYEZhbHNlYGAgb3RoZXJ3aXNlOjoKKworICAgICAgPj4+ICgtMi4wKS5pc19pbnRlZ2VyKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiAoMy4yKS5pc19pbnRlZ2VyKCkKKyAgICAgIEZhbHNlCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCiBUd28gbWV0aG9kcyBzdXBwb3J0IGNvbnZlcnNpb24gdG8KIGFuZCBmcm9tIGhleGFkZWNpbWFsIHN0cmluZ3MuICBTaW5jZSBQeXRob24ncyBmbG9hdHMgYXJlIHN0b3JlZApAQCAtNjE0LDExICs2NTksMTEgQEAKIAogLi4gX3R5cGVzc2VxOgogCi1TZXF1ZW5jZSBUeXBlcyAtLS0gOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YHVuaWNvZGVgLCA6Y2xhc3M6YGxpc3RgLCA6Y2xhc3M6YHR1cGxlYCwgOmNsYXNzOmBidWZmZXJgLCA6Y2xhc3M6YHhyYW5nZWAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU2VxdWVuY2UgVHlwZXMgLS0tIDpjbGFzczpgc3RyYCwgOmNsYXNzOmB1bmljb2RlYCwgOmNsYXNzOmBsaXN0YCwgOmNsYXNzOmB0dXBsZWAsIDpjbGFzczpgYnl0ZWFycmF5YCwgOmNsYXNzOmBidWZmZXJgLCA6Y2xhc3M6YHhyYW5nZWAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZXJlIGFyZSBzaXggc2VxdWVuY2UgdHlwZXM6IHN0cmluZ3MsIFVuaWNvZGUgc3RyaW5ncywgbGlzdHMsIHR1cGxlcywgYnVmZmVycywKLWFuZCB4cmFuZ2Ugb2JqZWN0cy4KK1RoZXJlIGFyZSBzZXZlbiBzZXF1ZW5jZSB0eXBlczogc3RyaW5ncywgVW5pY29kZSBzdHJpbmdzLCBsaXN0cywgdHVwbGVzLAorYnl0ZWFycmF5cywgYnVmZmVycywgYW5kIHhyYW5nZSBvYmplY3RzLgogCiBGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0IGluIDpjbGFzczpgZGljdGAgYW5kIDpjbGFzczpgc2V0YCBjbGFzc2VzLAogYW5kIHRoZSA6bW9kOmBjb2xsZWN0aW9uc2AgbW9kdWxlLgpAQCAtNjMwLDYgKzY3NSw3IEBACiAgICBvYmplY3Q6IFVuaWNvZGUKICAgIG9iamVjdDogdHVwbGUKICAgIG9iamVjdDogbGlzdAorICAgb2JqZWN0OiBieXRlYXJyYXkKICAgIG9iamVjdDogYnVmZmVyCiAgICBvYmplY3Q6IHhyYW5nZQogCkBAIC02NDUsNiArNjkxLDggQEAKIG11c3QgaGF2ZSB0aGUgZW5jbG9zaW5nIHBhcmVudGhlc2VzLCBzdWNoIGFzIGBgYSwgYiwgY2BgIG9yIGBgKClgYC4gIEEKIHNpbmdsZSBpdGVtIHR1cGxlIG11c3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hLCBzdWNoIGFzIGBgKGQsKWBgLgogCitCeXRlYXJyYXkgb2JqZWN0cyBhcmUgY3JlYXRlZCB3aXRoIHRoZSBidWlsdC1pbiBmdW5jdGlvbiA6ZnVuYzpgYnl0ZWFycmF5YC4KKwogQnVmZmVyIG9iamVjdHMgYXJlIG5vdCBkaXJlY3RseSBzdXBwb3J0ZWQgYnkgUHl0aG9uIHN5bnRheCwgYnV0IGNhbiBiZSBjcmVhdGVkCiBieSBjYWxsaW5nIHRoZSBidWlsdC1pbiBmdW5jdGlvbiA6ZnVuYzpgYnVmZmVyYC4gIFRoZXkgZG9uJ3Qgc3VwcG9ydAogY29uY2F0ZW5hdGlvbiBvciByZXBldGl0aW9uLgpAQCAtNjkxLDYgKzczOSwxMiBAQAogKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwogfCBgYG1heChzKWBgICAgICAgIHwgbGFyZ2VzdCBpdGVtIG9mICpzKiAgICAgICAgICAgIHwgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCBgYHMuaW5kZXgoaSlgYCAgIHwgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VyZW5jZSAgIHwgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgb2YgKmkqIGluICpzKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCBgYHMuY291bnQoaSlgYCAgIHwgdG90YWwgbnVtYmVyIG9mIG9jY3VyZW5jZXMgb2YgIHwgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgKmkqIGluICpzKiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwogCiBTZXF1ZW5jZSB0eXBlcyBhbHNvIHN1cHBvcnQgY29tcGFyaXNvbnMuIEluIHBhcnRpY3VsYXIsIHR1cGxlcyBhbmQgbGlzdHMKIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSBieSBjb21wYXJpbmcgY29ycmVzcG9uZGluZwpAQCAtNzg4LDggKzg0Miw5IEBACiAKIC4uIGluZGV4OjogcGFpcjogc3RyaW5nOyBtZXRob2RzCiAKLUJlbG93IGFyZSBsaXN0ZWQgdGhlIHN0cmluZyBtZXRob2RzIHdoaWNoIGJvdGggOC1iaXQgc3RyaW5ncyBhbmQgVW5pY29kZSBvYmplY3RzCi1zdXBwb3J0LiBOb3RlIHRoYXQgbm9uZSBvZiB0aGVzZSBtZXRob2RzIHRha2Uga2V5d29yZCBhcmd1bWVudHMuCitCZWxvdyBhcmUgbGlzdGVkIHRoZSBzdHJpbmcgbWV0aG9kcyB3aGljaCBib3RoIDgtYml0IHN0cmluZ3MgYW5kCitVbmljb2RlIG9iamVjdHMgc3VwcG9ydC4gIFNvbWUgb2YgdGhlbSBhcmUgYWxzbyBhdmFpbGFibGUgb24gOmNsYXNzOmBieXRlYXJyYXlgCitvYmplY3RzLgogCiBJbiBhZGRpdGlvbiwgUHl0aG9uJ3Mgc3RyaW5ncyBzdXBwb3J0IHRoZSBzZXF1ZW5jZSB0eXBlIG1ldGhvZHMKIGRlc2NyaWJlZCBpbiB0aGUgOnJlZjpgdHlwZXNzZXFgIHNlY3Rpb24uIFRvIG91dHB1dCBmb3JtYXR0ZWQgc3RyaW5ncwpAQCAtODM1LDYgKzg5MCw4IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuMwogICAgICAgU3VwcG9ydCBmb3Igb3RoZXIgZXJyb3IgaGFuZGxpbmcgc2NoZW1lcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFN1cHBvcnQgZm9yIGtleXdvcmQgYXJndW1lbnRzIGFkZGVkLgogCiAuLiBtZXRob2Q6OiBzdHIuZW5jb2RlKFtlbmNvZGluZ1ssZXJyb3JzXV0pCiAKQEAgLTg1Myw2ICs5MTAsOCBAQAogICAgICAgU3VwcG9ydCBmb3IgYGAneG1sY2hhcnJlZnJlcGxhY2UnYGAgYW5kIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAgYW5kIG90aGVyIGVycm9yCiAgICAgICBoYW5kbGluZyBzY2hlbWVzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuCiAKIC4uIG1ldGhvZDo6IHN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKQogCkBAIC0xMjk3LDggKzEzNTYsOCBAQAogZGljdGlvbmFyeSBpbnNlcnRlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgYGAnJSdgYCBjaGFyYWN0ZXIuIFRoZSBtYXBwaW5nIGtleQogc2VsZWN0cyB0aGUgdmFsdWUgdG8gYmUgZm9ybWF0dGVkIGZyb20gdGhlIG1hcHBpbmcuICBGb3IgZXhhbXBsZToKIAotICAgPj4+IHByaW50ICclKGxhbmd1YWdlKXMgaGFzICUoIykwM2QgcXVvdGUgdHlwZXMuJyAlIFwKLSAgIC4uLiAgICAgICB7J2xhbmd1YWdlJzogIlB5dGhvbiIsICIjIjogMn0KKyAgID4+PiBwcmludCAnJShsYW5ndWFnZSlzIGhhcyAlKG51bWJlcikwM2QgcXVvdGUgdHlwZXMuJyAlIFwKKyAgIC4uLiAgICAgICB7Imxhbmd1YWdlIjogIlB5dGhvbiIsICJudW1iZXIiOiAyfQogICAgUHl0aG9uIGhhcyAwMDIgcXVvdGUgdHlwZXMuCiAKIEluIHRoaXMgY2FzZSBubyBgYCpgYCBzcGVjaWZpZXJzIG1heSBvY2N1ciBpbiBhIGZvcm1hdCAoc2luY2UgdGhleSByZXF1aXJlIGEKQEAgLTE0MTksOSArMTQ3OCw5IEBACiAKIC4uIFhYWCBFeGFtcGxlcz8KIAotRm9yIHNhZmV0eSByZWFzb25zLCBmbG9hdGluZyBwb2ludCBwcmVjaXNpb25zIGFyZSBjbGlwcGVkIHRvIDUwOyBgYCVmYGAKLWNvbnZlcnNpb25zIGZvciBudW1iZXJzIHdob3NlIGFic29sdXRlIHZhbHVlIGlzIG92ZXIgMWU1MCBhcmUgcmVwbGFjZWQgYnkgYGAlZ2BgCi1jb252ZXJzaW9ucy4gWyNdXyAgQWxsIG90aGVyIGVycm9ycyByYWlzZSBleGNlcHRpb25zLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgIGBgJWZgYCBjb252ZXJzaW9ucyBmb3IgbnVtYmVycyB3aG9zZSBhYnNvbHV0ZSB2YWx1ZSBpcyBvdmVyIDFlNTAgYXJlIG5vCisgICBsb25nZXIgcmVwbGFjZWQgYnkgYGAlZ2BgIGNvbnZlcnNpb25zLgogCiAuLiBpbmRleDo6CiAgICBtb2R1bGU6IHN0cmluZwpAQCAtMTQ1NiwxMSArMTUxNSwyOSBAQAogICAgdHJpcGxlOiBtdXRhYmxlOyBzZXF1ZW5jZTsgdHlwZXMKICAgIG9iamVjdDogbGlzdAogCi1MaXN0IG9iamVjdHMgc3VwcG9ydCBhZGRpdGlvbmFsIG9wZXJhdGlvbnMgdGhhdCBhbGxvdyBpbi1wbGFjZSBtb2RpZmljYXRpb24gb2YKLXRoZSBvYmplY3QuIE90aGVyIG11dGFibGUgc2VxdWVuY2UgdHlwZXMgKHdoZW4gYWRkZWQgdG8gdGhlIGxhbmd1YWdlKSBzaG91bGQKLWFsc28gc3VwcG9ydCB0aGVzZSBvcGVyYXRpb25zLiBTdHJpbmdzIGFuZCB0dXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczoKLXN1Y2ggb2JqZWN0cyBjYW5ub3QgYmUgbW9kaWZpZWQgb25jZSBjcmVhdGVkLiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlCi1kZWZpbmVkIG9uIG11dGFibGUgc2VxdWVuY2UgdHlwZXMgKHdoZXJlICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0KToKK0xpc3QgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3RzIHN1cHBvcnQgYWRkaXRpb25hbCBvcGVyYXRpb25zIHRoYXQgYWxsb3cKK2luLXBsYWNlIG1vZGlmaWNhdGlvbiBvZiB0aGUgb2JqZWN0LiBPdGhlciBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzICh3aGVuIGFkZGVkCit0byB0aGUgbGFuZ3VhZ2UpIHNob3VsZCBhbHNvIHN1cHBvcnQgdGhlc2Ugb3BlcmF0aW9ucy4gU3RyaW5ncyBhbmQgdHVwbGVzCithcmUgaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGVzOiBzdWNoIG9iamVjdHMgY2Fubm90IGJlIG1vZGlmaWVkIG9uY2UgY3JlYXRlZC4KK1RoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzICh3aGVyZSAqeCogaXMKK2FuIGFyYml0cmFyeSBvYmplY3QpOgorCisuLiBpbmRleDo6CisgICB0cmlwbGU6IG9wZXJhdGlvbnMgb247IHNlcXVlbmNlOyB0eXBlcworICAgdHJpcGxlOiBvcGVyYXRpb25zIG9uOyBsaXN0OyB0eXBlCisgICBwYWlyOiBzdWJzY3JpcHQ7IGFzc2lnbm1lbnQKKyAgIHBhaXI6IHNsaWNlOyBhc3NpZ25tZW50CisgICBwYWlyOiBleHRlbmRlZCBzbGljZTsgYXNzaWdubWVudAorICAgc3RhdGVtZW50OiBkZWwKKyAgIHNpbmdsZTogYXBwZW5kKCkgKGxpc3QgbWV0aG9kKQorICAgc2luZ2xlOiBleHRlbmQoKSAobGlzdCBtZXRob2QpCisgICBzaW5nbGU6IGNvdW50KCkgKGxpc3QgbWV0aG9kKQorICAgc2luZ2xlOiBpbmRleCgpIChsaXN0IG1ldGhvZCkKKyAgIHNpbmdsZTogaW5zZXJ0KCkgKGxpc3QgbWV0aG9kKQorICAgc2luZ2xlOiBwb3AoKSAobGlzdCBtZXRob2QpCisgICBzaW5nbGU6IHJlbW92ZSgpIChsaXN0IG1ldGhvZCkKKyAgIHNpbmdsZTogcmV2ZXJzZSgpIChsaXN0IG1ldGhvZCkKKyAgIHNpbmdsZTogc29ydCgpIChsaXN0IG1ldGhvZCkKIAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgIHwKQEAgLTE1MDcsMjMgKzE1ODQsNiBAQAogfCByZXZlcnNlXV1dKWBgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotLi4gaW5kZXg6OgotICAgdHJpcGxlOiBvcGVyYXRpb25zIG9uOyBzZXF1ZW5jZTsgdHlwZXMKLSAgIHRyaXBsZTogb3BlcmF0aW9ucyBvbjsgbGlzdDsgdHlwZQotICAgcGFpcjogc3Vic2NyaXB0OyBhc3NpZ25tZW50Ci0gICBwYWlyOiBzbGljZTsgYXNzaWdubWVudAotICAgcGFpcjogZXh0ZW5kZWQgc2xpY2U7IGFzc2lnbm1lbnQKLSAgIHN0YXRlbWVudDogZGVsCi0gICBzaW5nbGU6IGFwcGVuZCgpIChsaXN0IG1ldGhvZCkKLSAgIHNpbmdsZTogZXh0ZW5kKCkgKGxpc3QgbWV0aG9kKQotICAgc2luZ2xlOiBjb3VudCgpIChsaXN0IG1ldGhvZCkKLSAgIHNpbmdsZTogaW5kZXgoKSAobGlzdCBtZXRob2QpCi0gICBzaW5nbGU6IGluc2VydCgpIChsaXN0IG1ldGhvZCkKLSAgIHNpbmdsZTogcG9wKCkgKGxpc3QgbWV0aG9kKQotICAgc2luZ2xlOiByZW1vdmUoKSAobGlzdCBtZXRob2QpCi0gICBzaW5nbGU6IHJldmVyc2UoKSAobGlzdCBtZXRob2QpCi0gICBzaW5nbGU6IHNvcnQoKSAobGlzdCBtZXRob2QpCi0KIE5vdGVzOgogCiAoMSkKQEAgLTE1ODQsNyArMTY0NCw4IEBACiAgICBJbiBnZW5lcmFsLCB0aGUgKmtleSogYW5kICpyZXZlcnNlKiBjb252ZXJzaW9uIHByb2Nlc3NlcyBhcmUgbXVjaCBmYXN0ZXIgdGhhbgogICAgc3BlY2lmeWluZyBhbiBlcXVpdmFsZW50ICpjbXAqIGZ1bmN0aW9uLiAgVGhpcyBpcyBiZWNhdXNlICpjbXAqIGlzIGNhbGxlZAogICAgbXVsdGlwbGUgdGltZXMgZm9yIGVhY2ggbGlzdCBlbGVtZW50IHdoaWxlICprZXkqIGFuZCAqcmV2ZXJzZSogdG91Y2ggZWFjaAotICAgZWxlbWVudCBvbmx5IG9uY2UuCisgICBlbGVtZW50IG9ubHkgb25jZS4gIFVzZSA6ZnVuYzpgZnVuY3Rvb2xzLmNtcF90b19rZXlgIHRvIGNvbnZlcnQgYW4KKyAgIG9sZC1zdHlsZSAqY21wKiBmdW5jdGlvbiB0byBhICprZXkqIGZ1bmN0aW9uLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuMwogICAgICAgU3VwcG9ydCBmb3IgYGBOb25lYGAgYXMgYW4gZXF1aXZhbGVudCB0byBvbWl0dGluZyAqY21wKiB3YXMgYWRkZWQuCkBAIC0xNjM0LDkgKzE2OTUsMTMgQEAKIFRoZSA6Y2xhc3M6YHNldGAgdHlwZSBpcyBtdXRhYmxlIC0tLSB0aGUgY29udGVudHMgY2FuIGJlIGNoYW5nZWQgdXNpbmcgbWV0aG9kcwogbGlrZSA6bWV0aDpgYWRkYCBhbmQgOm1ldGg6YHJlbW92ZWAuICBTaW5jZSBpdCBpcyBtdXRhYmxlLCBpdCBoYXMgbm8gaGFzaCB2YWx1ZQogYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGVpdGhlciBhIGRpY3Rpb25hcnkga2V5IG9yIGFzIGFuIGVsZW1lbnQgb2YgYW5vdGhlciBzZXQuCi1UaGUgOmNsYXNzOmBmcm96ZW5zZXRgIHR5cGUgaXMgaW1tdXRhYmxlIGFuZCA6dGVybTpgaGFzaGFibGVgIC0tLSBpdHMgY29udGVudHMgY2Fubm90IGJlCi1hbHRlcmVkIGFmdGVyIGl0IGlzIGNyZWF0ZWQ7IGl0IGNhbiB0aGVyZWZvcmUgYmUgdXNlZCBhcyBhIGRpY3Rpb25hcnkga2V5IG9yIGFzCi1hbiBlbGVtZW50IG9mIGFub3RoZXIgc2V0LgorVGhlIDpjbGFzczpgZnJvemVuc2V0YCB0eXBlIGlzIGltbXV0YWJsZSBhbmQgOnRlcm06YGhhc2hhYmxlYCAtLS0gaXRzIGNvbnRlbnRzCitjYW5ub3QgYmUgYWx0ZXJlZCBhZnRlciBpdCBpcyBjcmVhdGVkOyBpdCBjYW4gdGhlcmVmb3JlIGJlIHVzZWQgYXMgYSBkaWN0aW9uYXJ5CitrZXkgb3IgYXMgYW4gZWxlbWVudCBvZiBhbm90aGVyIHNldC4KKworQXMgb2YgUHl0aG9uIDIuNywgbm9uLWVtcHR5IHNldHMgKG5vdCBmcm96ZW5zZXRzKSBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEKK2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGVsZW1lbnRzIHdpdGhpbiBicmFjZXMsIGZvciBleGFtcGxlOiBgYHsnamFjaycsCisnc2pvZXJkJ31gYCwgaW4gYWRkaXRpb24gdG8gdGhlIDpjbGFzczpgc2V0YCBjb25zdHJ1Y3Rvci4KIAogVGhlIGNvbnN0cnVjdG9ycyBmb3IgYm90aCBjbGFzc2VzIHdvcmsgdGhlIHNhbWU6CiAKQEAgLTE4NzksMTUgKzE5NDQsMTIgQEAKICAgIHZhbHVlcyBhcmUgYWRkZWQgYXMgaXRlbXMgdG8gdGhlIGRpY3Rpb25hcnkuIElmIGEga2V5IGlzIHNwZWNpZmllZCBib3RoIGluIHRoZQogICAgcG9zaXRpb25hbCBhcmd1bWVudCBhbmQgYXMgYSBrZXl3b3JkIGFyZ3VtZW50LCB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZQogICAga2V5d29yZCBpcyByZXRhaW5lZCBpbiB0aGUgZGljdGlvbmFyeS4gRm9yIGV4YW1wbGUsIHRoZXNlIGFsbCByZXR1cm4gYQotICAgZGljdGlvbmFyeSBlcXVhbCB0byBgYHsib25lIjogMiwgInR3byI6IDN9YGA6CisgICBkaWN0aW9uYXJ5IGVxdWFsIHRvIGBgeyJvbmUiOiAxLCAidHdvIjogMn1gYDoKIAotICAgKiBgYGRpY3Qob25lPTIsIHR3bz0zKWBgCi0KLSAgICogYGBkaWN0KHsnb25lJzogMiwgJ3R3byc6IDN9KWBgCi0KLSAgICogYGBkaWN0KHppcCgoJ29uZScsICd0d28nKSwgKDIsIDMpKSlgYAotCi0gICAqIGBgZGljdChbWyd0d28nLCAzXSwgWydvbmUnLCAyXV0pYGAKKyAgICogYGBkaWN0KG9uZT0xLCB0d289MilgYAorICAgKiBgYGRpY3QoeydvbmUnOiAxLCAndHdvJzogMn0pYGAKKyAgICogYGBkaWN0KHppcCgoJ29uZScsICd0d28nKSwgKDEsIDIpKSlgYAorICAgKiBgYGRpY3QoW1sndHdvJywgMl0sIFsnb25lJywgMV1dKWBgCiAKICAgIFRoZSBmaXJzdCBleGFtcGxlIG9ubHkgd29ya3MgZm9yIGtleXMgdGhhdCBhcmUgdmFsaWQgUHl0aG9uCiAgICBpZGVudGlmaWVyczsgdGhlIG90aGVycyB3b3JrIHdpdGggYW55IHZhbGlkIGtleXMuCkBAIC0yMDU5LDcgKzIxMjEsNyBAQAogICAgICAgZXhpc3Rpbmcga2V5cy4gIFJldHVybiBgYE5vbmVgYC4KIAogICAgICAgOmZ1bmM6YHVwZGF0ZWAgYWNjZXB0cyBlaXRoZXIgYW5vdGhlciBkaWN0aW9uYXJ5IG9iamVjdCBvciBhbiBpdGVyYWJsZSBvZgotICAgICAga2V5L3ZhbHVlIHBhaXJzIChhcyBhIHR1cGxlIG9yIG90aGVyIGl0ZXJhYmxlIG9mIGxlbmd0aCB0d28pLiAgSWYga2V5d29yZAorICAgICAga2V5L3ZhbHVlIHBhaXJzIChhcyB0dXBsZXMgb3Igb3RoZXIgaXRlcmFibGVzIG9mIGxlbmd0aCB0d28pLiAgSWYga2V5d29yZAogICAgICAgYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQsIHRoZSBkaWN0aW9uYXJ5IGlzIHRoZW4gdXBkYXRlZCB3aXRoIHRob3NlCiAgICAgICBrZXkvdmFsdWUgcGFpcnM6IGBgZC51cGRhdGUocmVkPTEsIGJsdWU9MilgYC4KIApAQCAtMjA3Miw2ICsyMTM0LDEyMSBAQAogICAgICAgUmV0dXJuIGEgY29weSBvZiB0aGUgZGljdGlvbmFyeSdzIGxpc3Qgb2YgdmFsdWVzLiAgU2VlIHRoZSBub3RlIGZvcgogICAgICAgOm1ldGg6YGRpY3QuaXRlbXNgLgogCisgICAuLiBtZXRob2Q6OiB2aWV3aXRlbXMoKQorCisgICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeSdzIGl0ZW1zIChgYChrZXksIHZhbHVlKWBgIHBhaXJzKS4gIFNlZQorICAgICAgYmVsb3cgZm9yIGRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworICAgLi4gbWV0aG9kOjogdmlld2tleXMoKQorCisgICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeSdzIGtleXMuICBTZWUgYmVsb3cgZm9yIGRvY3VtZW50YXRpb24gb2YKKyAgICAgIHZpZXcgb2JqZWN0cy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKyAgIC4uIG1ldGhvZDo6IHZpZXd2YWx1ZXMoKQorCisgICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeSdzIHZhbHVlcy4gIFNlZSBiZWxvdyBmb3IgZG9jdW1lbnRhdGlvbiBvZgorICAgICAgdmlldyBvYmplY3RzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisuLiBfZGljdC12aWV3czoKKworRGljdGlvbmFyeSB2aWV3IG9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBvYmplY3RzIHJldHVybmVkIGJ5IDptZXRoOmBkaWN0LnZpZXdrZXlzYCwgOm1ldGg6YGRpY3Qudmlld3ZhbHVlc2AgYW5kCis6bWV0aDpgZGljdC52aWV3aXRlbXNgIGFyZSAqdmlldyBvYmplY3RzKi4gIFRoZXkgcHJvdmlkZSBhIGR5bmFtaWMgdmlldyBvbiB0aGUKK2RpY3Rpb25hcnkncyBlbnRyaWVzLCB3aGljaCBtZWFucyB0aGF0IHdoZW4gdGhlIGRpY3Rpb25hcnkgY2hhbmdlcywgdGhlIHZpZXcKK3JlZmxlY3RzIHRoZXNlIGNoYW5nZXMuCisKK0RpY3Rpb25hcnkgdmlld3MgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgdG8geWllbGQgdGhlaXIgcmVzcGVjdGl2ZSBkYXRhLCBhbmQKK3N1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0czoKKworLi4gZGVzY3JpYmU6OiBsZW4oZGljdHZpZXcpCisKKyAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRpY3Rpb25hcnkuCisKKy4uIGRlc2NyaWJlOjogaXRlcihkaWN0dmlldykKKworICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMsIHZhbHVlcyBvciBpdGVtcyAocmVwcmVzZW50ZWQgYXMgdHVwbGVzIG9mCisgICBgYChrZXksIHZhbHVlKWBgKSBpbiB0aGUgZGljdGlvbmFyeS4KKworICAgS2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIGFuIGFyYml0cmFyeSBvcmRlciB3aGljaCBpcyBub24tcmFuZG9tLAorICAgdmFyaWVzIGFjcm9zcyBQeXRob24gaW1wbGVtZW50YXRpb25zLCBhbmQgZGVwZW5kcyBvbiB0aGUgZGljdGlvbmFyeSdzIGhpc3RvcnkKKyAgIG9mIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gSWYga2V5cywgdmFsdWVzIGFuZCBpdGVtcyB2aWV3cyBhcmUgaXRlcmF0ZWQKKyAgIG92ZXIgd2l0aCBubyBpbnRlcnZlbmluZyBtb2RpZmljYXRpb25zIHRvIHRoZSBkaWN0aW9uYXJ5LCB0aGUgb3JkZXIgb2YgaXRlbXMKKyAgIHdpbGwgZGlyZWN0bHkgY29ycmVzcG9uZC4gIFRoaXMgYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBgYCh2YWx1ZSwga2V5KWBgIHBhaXJzCisgICB1c2luZyA6ZnVuYzpgemlwYDogYGBwYWlycyA9IHppcChkLnZhbHVlcygpLCBkLmtleXMoKSlgYC4gIEFub3RoZXIgd2F5IHRvCisgICBjcmVhdGUgdGhlIHNhbWUgbGlzdCBpcyBgYHBhaXJzID0gWyh2LCBrKSBmb3IgKGssIHYpIGluIGQuaXRlbXMoKV1gYC4KKworICAgSXRlcmF0aW5nIHZpZXdzIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5IG1heSByYWlzZQorICAgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIG9yIGZhaWwgdG8gaXRlcmF0ZSBvdmVyIGFsbCBlbnRyaWVzLgorCisuLiBkZXNjcmliZTo6IHggaW4gZGljdHZpZXcKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICp4KiBpcyBpbiB0aGUgdW5kZXJseWluZyBkaWN0aW9uYXJ5J3Mga2V5cywgdmFsdWVzIG9yCisgICBpdGVtcyAoaW4gdGhlIGxhdHRlciBjYXNlLCAqeCogc2hvdWxkIGJlIGEgYGAoa2V5LCB2YWx1ZSlgYCB0dXBsZSkuCisKKworS2V5cyB2aWV3cyBhcmUgc2V0LWxpa2Ugc2luY2UgdGhlaXIgZW50cmllcyBhcmUgdW5pcXVlIGFuZCBoYXNoYWJsZS4gIElmIGFsbAordmFsdWVzIGFyZSBoYXNoYWJsZSwgc28gdGhhdCAoa2V5LCB2YWx1ZSkgcGFpcnMgYXJlIHVuaXF1ZSBhbmQgaGFzaGFibGUsIHRoZW4KK3RoZSBpdGVtcyB2aWV3IGlzIGFsc28gc2V0LWxpa2UuICAoVmFsdWVzIHZpZXdzIGFyZSBub3QgdHJlYXRlZCBhcyBzZXQtbGlrZQorc2luY2UgdGhlIGVudHJpZXMgYXJlIGdlbmVyYWxseSBub3QgdW5pcXVlLikgIFRoZW4gdGhlc2Ugc2V0IG9wZXJhdGlvbnMgYXJlCithdmFpbGFibGUgKCJvdGhlciIgcmVmZXJzIGVpdGhlciB0byBhbm90aGVyIHZpZXcgb3IgYSBzZXQpOgorCisuLiBkZXNjcmliZTo6IGRpY3R2aWV3ICYgb3RoZXIKKworICAgUmV0dXJuIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGRpY3R2aWV3IGFuZCB0aGUgb3RoZXIgb2JqZWN0IGFzIGEgbmV3IHNldC4KKworLi4gZGVzY3JpYmU6OiBkaWN0dmlldyB8IG90aGVyCisKKyAgIFJldHVybiB0aGUgdW5pb24gb2YgdGhlIGRpY3R2aWV3IGFuZCB0aGUgb3RoZXIgb2JqZWN0IGFzIGEgbmV3IHNldC4KKworLi4gZGVzY3JpYmU6OiBkaWN0dmlldyAtIG90aGVyCisKKyAgIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkaWN0dmlldyBhbmQgdGhlIG90aGVyIG9iamVjdCAoYWxsIGVsZW1lbnRzCisgICBpbiAqZGljdHZpZXcqIHRoYXQgYXJlbid0IGluICpvdGhlciopIGFzIGEgbmV3IHNldC4KKworLi4gZGVzY3JpYmU6OiBkaWN0dmlldyBeIG90aGVyCisKKyAgIFJldHVybiB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2UgKGFsbCBlbGVtZW50cyBlaXRoZXIgaW4gKmRpY3R2aWV3KiBvcgorICAgKm90aGVyKiwgYnV0IG5vdCBpbiBib3RoKSBvZiB0aGUgZGljdHZpZXcgYW5kIHRoZSBvdGhlciBvYmplY3QgYXMgYSBuZXcgc2V0LgorCisKK0FuIGV4YW1wbGUgb2YgZGljdGlvbmFyeSB2aWV3IHVzYWdlOjoKKworICAgPj4+IGRpc2hlcyA9IHsnZWdncyc6IDIsICdzYXVzYWdlJzogMSwgJ2JhY29uJzogMSwgJ3NwYW0nOiA1MDB9CisgICA+Pj4ga2V5cyA9IGRpc2hlcy52aWV3a2V5cygpCisgICA+Pj4gdmFsdWVzID0gZGlzaGVzLnZpZXd2YWx1ZXMoKQorCisgICA+Pj4gIyBpdGVyYXRpb24KKyAgID4+PiBuID0gMAorICAgPj4+IGZvciB2YWwgaW4gdmFsdWVzOgorICAgLi4uICAgICBuICs9IHZhbAorICAgPj4+IHByaW50KG4pCisgICA1MDQKKworICAgPj4+ICMga2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIHRoZSBzYW1lIG9yZGVyCisgICA+Pj4gbGlzdChrZXlzKQorICAgWydlZ2dzJywgJ2JhY29uJywgJ3NhdXNhZ2UnLCAnc3BhbSddCisgICA+Pj4gbGlzdCh2YWx1ZXMpCisgICBbMiwgMSwgMSwgNTAwXQorCisgICA+Pj4gIyB2aWV3IG9iamVjdHMgYXJlIGR5bmFtaWMgYW5kIHJlZmxlY3QgZGljdCBjaGFuZ2VzCisgICA+Pj4gZGVsIGRpc2hlc1snZWdncyddCisgICA+Pj4gZGVsIGRpc2hlc1snc2F1c2FnZSddCisgICA+Pj4gbGlzdChrZXlzKQorICAgWydzcGFtJywgJ2JhY29uJ10KKworICAgPj4+ICMgc2V0IG9wZXJhdGlvbnMKKyAgID4+PiBrZXlzICYgeydlZ2dzJywgJ2JhY29uJywgJ3NhbGFkJ30KKyAgIHsnYmFjb24nfQorCiAKIC4uIF9ibHRpbi1maWxlLW9iamVjdHM6CiAKQEAgLTIzODQsNiArMjU2MSwxMTcgQEAKICAgICAgIHN0YXRlLgogCiAKKy4uIF90eXBlbWVtb3J5dmlldzoKKworbWVtb3J5dmlldyB0eXBlCis9PT09PT09PT09PT09PT0KKworLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKzpjbGFzczpgbWVtb3J5dmlld2Agb2JqZWN0cyBhbGxvdyBQeXRob24gY29kZSB0byBhY2Nlc3MgdGhlIGludGVybmFsIGRhdGEKK29mIGFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIHRoZSBidWZmZXIgcHJvdG9jb2wgd2l0aG91dCBjb3B5aW5nLiAgTWVtb3J5CitpcyBnZW5lcmFsbHkgaW50ZXJwcmV0ZWQgYXMgc2ltcGxlIGJ5dGVzLgorCisuLiBjbGFzczo6IG1lbW9yeXZpZXcob2JqKQorCisgICBDcmVhdGUgYSA6Y2xhc3M6YG1lbW9yeXZpZXdgIHRoYXQgcmVmZXJlbmNlcyAqb2JqKi4gICpvYmoqIG11c3Qgc3VwcG9ydCB0aGUKKyAgIGJ1ZmZlciBwcm90b2NvbC4gIEJ1aWx0aW4gb2JqZWN0cyB0aGF0IHN1cHBvcnQgdGhlIGJ1ZmZlciBwcm90b2NvbCBpbmNsdWRlCisgICA6Y2xhc3M6YHN0cmAgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCAoYnV0IG5vdCA6Y2xhc3M6YHVuaWNvZGVgKS4KKworICAgQSA6Y2xhc3M6YG1lbW9yeXZpZXdgIGhhcyB0aGUgbm90aW9uIG9mIGFuICplbGVtZW50Kiwgd2hpY2ggaXMgdGhlCisgICBhdG9taWMgbWVtb3J5IHVuaXQgaGFuZGxlZCBieSB0aGUgb3JpZ2luYXRpbmcgb2JqZWN0ICpvYmoqLiAgRm9yIG1hbnkKKyAgIHNpbXBsZSB0eXBlcyBzdWNoIGFzIDpjbGFzczpgc3RyYCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgLCBhbiBlbGVtZW50CisgICBpcyBhIHNpbmdsZSBieXRlLCBidXQgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMgbWF5IGV4cG9zZSBsYXJnZXIgZWxlbWVudHMuCisKKyAgIGBgbGVuKHZpZXcpYGAgcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBtZW1vcnl2aWV3LAorICAgKnZpZXcqLiAgVGhlIDpjbGFzczpgfm1lbW9yeXZpZXcuaXRlbXNpemVgIGF0dHJpYnV0ZSB3aWxsIGdpdmUgeW91IHRoZQorICAgbnVtYmVyIG9mIGJ5dGVzIGluIGEgc2luZ2xlIGVsZW1lbnQuCisKKyAgIEEgOmNsYXNzOmBtZW1vcnl2aWV3YCBzdXBwb3J0cyBzbGljaW5nIHRvIGV4cG9zZSBpdHMgZGF0YS4gIFRha2luZyBhIHNpbmdsZQorICAgaW5kZXggd2lsbCByZXR1cm4gYSBzaW5nbGUgZWxlbWVudCBhcyBhIDpjbGFzczpgc3RyYCBvYmplY3QuICBGdWxsCisgICBzbGljaW5nIHdpbGwgcmVzdWx0IGluIGEgc3Vidmlldzo6CisKKyAgICAgID4+PiB2ID0gbWVtb3J5dmlldygnYWJjZWZnJykKKyAgICAgID4+PiB2WzFdCisgICAgICAnYicKKyAgICAgID4+PiB2Wy0xXQorICAgICAgJ2cnCisgICAgICA+Pj4gdlsxOjRdCisgICAgICA8bWVtb3J5IGF0IDB4NzdhYjI4PgorICAgICAgPj4+IHZbMTo0XS50b2J5dGVzKCkKKyAgICAgICdiY2UnCisKKyAgIElmIHRoZSBvYmplY3QgdGhlIG1lbW9yeXZpZXcgaXMgb3ZlciBzdXBwb3J0cyBjaGFuZ2luZyBpdHMgZGF0YSwgdGhlCisgICBtZW1vcnl2aWV3IHN1cHBvcnRzIHNsaWNlIGFzc2lnbm1lbnQ6OgorCisgICAgICA+Pj4gZGF0YSA9IGJ5dGVhcnJheSgnYWJjZWZnJykKKyAgICAgID4+PiB2ID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgPj4+IHYucmVhZG9ubHkKKyAgICAgIEZhbHNlCisgICAgICA+Pj4gdlswXSA9ICd6JworICAgICAgPj4+IGRhdGEKKyAgICAgIGJ5dGVhcnJheShiJ3piY2VmZycpCisgICAgICA+Pj4gdlsxOjRdID0gJzEyMycKKyAgICAgID4+PiBkYXRhCisgICAgICBieXRlYXJyYXkoYid6MTIzZmcnKQorICAgICAgPj4+IHZbMl0gPSAnc3BhbScKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICAgIFZhbHVlRXJyb3I6IGNhbm5vdCBtb2RpZnkgc2l6ZSBvZiBtZW1vcnl2aWV3IG9iamVjdAorCisgICBOb3RpY2UgaG93IHRoZSBzaXplIG9mIHRoZSBtZW1vcnl2aWV3IG9iamVjdCBjYW5ub3QgYmUgY2hhbmdlZC4KKworICAgOmNsYXNzOmBtZW1vcnl2aWV3YCBoYXMgdHdvIG1ldGhvZHM6CisKKyAgIC4uIG1ldGhvZDo6IHRvYnl0ZXMoKQorCisgICAgICBSZXR1cm4gdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlciBhcyBhIGJ5dGVzdHJpbmcgKGFuIG9iamVjdCBvZiBjbGFzcworICAgICAgOmNsYXNzOmBzdHJgKS4gOjoKKworICAgICAgICAgPj4+IG0gPSBtZW1vcnl2aWV3KCJhYmMiKQorICAgICAgICAgPj4+IG0udG9ieXRlcygpCisgICAgICAgICAnYWJjJworCisgICAuLiBtZXRob2Q6OiB0b2xpc3QoKQorCisgICAgICBSZXR1cm4gdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlciBhcyBhIGxpc3Qgb2YgaW50ZWdlcnMuIDo6CisKKyAgICAgICAgID4+PiBtZW1vcnl2aWV3KCJhYmMiKS50b2xpc3QoKQorICAgICAgICAgWzk3LCA5OCwgOTldCisKKyAgIFRoZXJlIGFyZSBhbHNvIHNldmVyYWwgcmVhZG9ubHkgYXR0cmlidXRlcyBhdmFpbGFibGU6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZvcm1hdAorCisgICAgICBBIHN0cmluZyBjb250YWluaW5nIHRoZSBmb3JtYXQgKGluIDptb2Q6YHN0cnVjdGAgbW9kdWxlIHN0eWxlKSBmb3IgZWFjaAorICAgICAgZWxlbWVudCBpbiB0aGUgdmlldy4gIFRoaXMgZGVmYXVsdHMgdG8gYGAnQidgYCwgYSBzaW1wbGUgYnl0ZXN0cmluZy4KKworICAgLi4gYXR0cmlidXRlOjogaXRlbXNpemUKKworICAgICAgVGhlIHNpemUgaW4gYnl0ZXMgb2YgZWFjaCBlbGVtZW50IG9mIHRoZSBtZW1vcnl2aWV3LgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaGFwZQorCisgICAgICBBIHR1cGxlIG9mIGludGVnZXJzIHRoZSBsZW5ndGggb2YgOmF0dHI6YG5kaW1gIGdpdmluZyB0aGUgc2hhcGUgb2YgdGhlCisgICAgICBtZW1vcnkgYXMgYSBOLWRpbWVuc2lvbmFsIGFycmF5LgorCisgICAuLiBhdHRyaWJ1dGU6OiBuZGltCisKKyAgICAgIEFuIGludGVnZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaW1lbnNpb25zIG9mIGEgbXVsdGktZGltZW5zaW9uYWwgYXJyYXkgdGhlCisgICAgICBtZW1vcnkgcmVwcmVzZW50cy4KKworICAgLi4gYXR0cmlidXRlOjogc3RyaWRlcworCisgICAgICBBIHR1cGxlIG9mIGludGVnZXJzIHRoZSBsZW5ndGggb2YgOmF0dHI6YG5kaW1gIGdpdmluZyB0aGUgc2l6ZSBpbiBieXRlcyB0bworICAgICAgYWNjZXNzIGVhY2ggZWxlbWVudCBmb3IgZWFjaCBkaW1lbnNpb24gb2YgdGhlIGFycmF5LgorCisgICAuLiBhdHRyaWJ1dGU6OiByZWFkb25seQorCisgICAgICBBIGJvb2wgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtZW1vcnkgaXMgcmVhZCBvbmx5LgorCisgICAuLiBtZW1vcnl2aWV3LnN1Ym9mZnNldHMgaXNuJ3QgZG9jdW1lbnRlZCBiZWNhdXNlIGl0IG9ubHkgc2VlbXMgdXNlZnVsIGZvciBDCisKKwogLi4gX3R5cGVjb250ZXh0bWFuYWdlcjoKIAogQ29udGV4dCBNYW5hZ2VyIFR5cGVzCkBAIC0yNzQyLDEwICszMDMwLDYgQEAKIC4uIFsjXSBUbyBmb3JtYXQgb25seSBhIHR1cGxlIHlvdSBzaG91bGQgdGhlcmVmb3JlIHByb3ZpZGUgYSBzaW5nbGV0b24gdHVwbGUgd2hvc2Ugb25seQogICAgZWxlbWVudCBpcyB0aGUgdHVwbGUgdG8gYmUgZm9ybWF0dGVkLgogCi0uLiBbI10gVGhlc2UgbnVtYmVycyBhcmUgZmFpcmx5IGFyYml0cmFyeS4gIFRoZXkgYXJlIGludGVuZGVkIHRvIGF2b2lkIHByaW50aW5nIGVuZGxlc3MKLSAgIHN0cmluZ3Mgb2YgbWVhbmluZ2xlc3MgZGlnaXRzIHdpdGhvdXQgaGFtcGVyaW5nIGNvcnJlY3QgdXNlIGFuZCB3aXRob3V0IGhhdmluZwotICAgdG8ga25vdyB0aGUgZXhhY3QgcHJlY2lzaW9uIG9mIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBvbiBhIHBhcnRpY3VsYXIgbWFjaGluZS4KLQogLi4gWyNdIFRoZSBhZHZhbnRhZ2Ugb2YgbGVhdmluZyB0aGUgbmV3bGluZSBvbiBpcyB0aGF0IHJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcgaXMKICAgIHRoZW4gYW4gdW5hbWJpZ3VvdXMgRU9GIGluZGljYXRpb24uICBJdCBpcyBhbHNvIHBvc3NpYmxlIChpbiBjYXNlcyB3aGVyZSBpdAogICAgbWlnaHQgbWF0dGVyLCBmb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gbWFrZSBhbiBleGFjdCBjb3B5IG9mIGEgZmlsZSB3aGlsZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RyaW5nLnJzdCBiL0RvYy9saWJyYXJ5L3N0cmluZy5yc3QKaW5kZXggYmIwYmNjNS4uNTlhYzExNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3RyaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdHJpbmcucnN0CkBAIC0xNyw2ICsxNywxMSBAQAogOnJlZjpgc3RyaW5nLWZvcm1hdHRpbmdgIHNlY3Rpb24uIEFsc28sIHNlZSB0aGUgOm1vZDpgcmVgIG1vZHVsZSBmb3IKIHN0cmluZyBmdW5jdGlvbnMgYmFzZWQgb24gcmVndWxhciBleHByZXNzaW9ucy4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgc3RyaW5nIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9zdHJpbmcucHk/dmlldz1tYXJrdXA+YF8KKwogCiBTdHJpbmcgY29uc3RhbnRzCiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTgsNyArMTIzLDcgQEAKIAogICAgVGhlIDpjbGFzczpgRm9ybWF0dGVyYCBjbGFzcyBoYXMgdGhlIGZvbGxvd2luZyBwdWJsaWMgbWV0aG9kczoKIAotICAgLi4gbWV0aG9kOjogZm9ybWF0KGZvcm1hdF9zdHJpbmcsICphcmdzLCAqa3dhcmdzKQorICAgLi4gbWV0aG9kOjogZm9ybWF0KGZvcm1hdF9zdHJpbmcsICphcmdzLCAqKmt3YXJncykKIAogICAgICAgOm1ldGg6YGZvcm1hdGAgaXMgdGhlIHByaW1hcnkgQVBJIG1ldGhvZC4gIEl0IHRha2VzIGEgZm9ybWF0IHRlbXBsYXRlCiAgICAgICBzdHJpbmcsIGFuZCBhbiBhcmJpdHJhcnkgc2V0IG9mIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnQuCkBAIC0xNDEsNyArMTQ2LDcgQEAKIAogICAgICAgTG9vcCBvdmVyIHRoZSBmb3JtYXRfc3RyaW5nIGFuZCByZXR1cm4gYW4gaXRlcmFibGUgb2YgdHVwbGVzCiAgICAgICAoKmxpdGVyYWxfdGV4dCosICpmaWVsZF9uYW1lKiwgKmZvcm1hdF9zcGVjKiwgKmNvbnZlcnNpb24qKS4gIFRoaXMgaXMgdXNlZAotICAgICAgYnkgOm1ldGg6YHZmb3JtYXRgIHRvIGJyZWFrIHRoZSBzdHJpbmcgaW4gdG8gZWl0aGVyIGxpdGVyYWwgdGV4dCwgb3IKKyAgICAgIGJ5IDptZXRoOmB2Zm9ybWF0YCB0byBicmVhayB0aGUgc3RyaW5nIGludG8gZWl0aGVyIGxpdGVyYWwgdGV4dCwgb3IKICAgICAgIHJlcGxhY2VtZW50IGZpZWxkcy4KIAogICAgICAgVGhlIHZhbHVlcyBpbiB0aGUgdHVwbGUgY29uY2VwdHVhbGx5IHJlcHJlc2VudCBhIHNwYW4gb2YgbGl0ZXJhbCB0ZXh0CkBAIC0xOTAsNyArMTk1LDcgQEAKICAgICAgIHRoZSBmb3JtYXQgc3RyaW5nIChpbnRlZ2VycyBmb3IgcG9zaXRpb25hbCBhcmd1bWVudHMsIGFuZCBzdHJpbmdzIGZvcgogICAgICAgbmFtZWQgYXJndW1lbnRzKSwgYW5kIGEgcmVmZXJlbmNlIHRvIHRoZSAqYXJncyogYW5kICprd2FyZ3MqIHRoYXQgd2FzCiAgICAgICBwYXNzZWQgdG8gdmZvcm1hdC4gIFRoZSBzZXQgb2YgdW51c2VkIGFyZ3MgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGVzZQotICAgICAgcGFyYW1ldGVycy4gIDptZXRoOmBjaGVja191bnVzZWRfYXJnc2AgaXMgYXNzdW1lZCB0byB0aHJvdyBhbiBleGNlcHRpb24gaWYKKyAgICAgIHBhcmFtZXRlcnMuICA6bWV0aDpgY2hlY2tfdW51c2VkX2FyZ3NgIGlzIGFzc3VtZWQgdG8gcmFpc2UgYW4gZXhjZXB0aW9uIGlmCiAgICAgICB0aGUgY2hlY2sgZmFpbHMuCiAKICAgIC4uIG1ldGhvZDo6IGZvcm1hdF9maWVsZCh2YWx1ZSwgZm9ybWF0X3NwZWMpCkBAIC0yMjIsMzIgKzIyNyw0MyBAQAogVGhlIGdyYW1tYXIgZm9yIGEgcmVwbGFjZW1lbnQgZmllbGQgaXMgYXMgZm9sbG93czoKIAogICAgLi4gcHJvZHVjdGlvbmxpc3Q6OiBzZgotICAgICAgcmVwbGFjZW1lbnRfZmllbGQ6ICJ7IiBgZmllbGRfbmFtZWAgWyIhIiBgY29udmVyc2lvbmBdIFsiOiIgYGZvcm1hdF9zcGVjYF0gIn0iCi0gICAgICBmaWVsZF9uYW1lOiAoYGlkZW50aWZpZXJgIHwgYGludGVnZXJgKSAoIi4iIGBhdHRyaWJ1dGVfbmFtZWAgfCAiWyIgYGVsZW1lbnRfaW5kZXhgICJdIikqCisgICAgICByZXBsYWNlbWVudF9maWVsZDogInsiIFtgZmllbGRfbmFtZWBdIFsiISIgYGNvbnZlcnNpb25gXSBbIjoiIGBmb3JtYXRfc3BlY2BdICJ9IgorICAgICAgZmllbGRfbmFtZTogYXJnX25hbWUgKCIuIiBgYXR0cmlidXRlX25hbWVgIHwgIlsiIGBlbGVtZW50X2luZGV4YCAiXSIpKgorICAgICAgYXJnX25hbWU6IFtgaWRlbnRpZmllcmAgfCBgaW50ZWdlcmBdCiAgICAgICBhdHRyaWJ1dGVfbmFtZTogYGlkZW50aWZpZXJgCiAgICAgICBlbGVtZW50X2luZGV4OiBgaW50ZWdlcmAgfCBgaW5kZXhfc3RyaW5nYAogICAgICAgaW5kZXhfc3RyaW5nOiA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJdIj4gKwogICAgICAgY29udmVyc2lvbjogInIiIHwgInMiCiAgICAgICBmb3JtYXRfc3BlYzogPGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uPgogCi1JbiBsZXNzIGZvcm1hbCB0ZXJtcywgdGhlIHJlcGxhY2VtZW50IGZpZWxkIHN0YXJ0cyB3aXRoIGEgKmZpZWxkX25hbWUqLCB3aGljaAotY2FuIGVpdGhlciBiZSBhIG51bWJlciAoZm9yIGEgcG9zaXRpb25hbCBhcmd1bWVudCksIG9yIGFuIGlkZW50aWZpZXIgKGZvcgota2V5d29yZCBhcmd1bWVudHMpLiAgRm9sbG93aW5nIHRoaXMgaXMgYW4gb3B0aW9uYWwgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpcworSW4gbGVzcyBmb3JtYWwgdGVybXMsIHRoZSByZXBsYWNlbWVudCBmaWVsZCBjYW4gc3RhcnQgd2l0aCBhICpmaWVsZF9uYW1lKiB0aGF0IHNwZWNpZmllcwordGhlIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBmb3JtYXR0ZWQgYW5kIGluc2VydGVkCitpbnRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZW1lbnQgZmllbGQuCitUaGUgKmZpZWxkX25hbWUqIGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSAgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpcwogcHJlY2VkZWQgYnkgYW4gZXhjbGFtYXRpb24gcG9pbnQgYGAnISdgYCwgYW5kIGEgKmZvcm1hdF9zcGVjKiwgd2hpY2ggaXMgcHJlY2VkZWQKLWJ5IGEgY29sb24gYGAnOidgYC4KK2J5IGEgY29sb24gYGAnOidgYC4gIFRoZXNlIHNwZWNpZnkgYSBub24tZGVmYXVsdCBmb3JtYXQgZm9yIHRoZSByZXBsYWNlbWVudCB2YWx1ZS4KIAogU2VlIGFsc28gdGhlIDpyZWY6YGZvcm1hdHNwZWNgIHNlY3Rpb24uCiAKLVRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGVpdGhlciBhIG51bWJlciBvciBhIGtleXdvcmQuICBJZiBpdCdzIGEKLW51bWJlciwgaXQgcmVmZXJzIHRvIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgYW5kIGlmIGl0J3MgYSBrZXl3b3JkIGl0IHJlZmVycyB0byBhCi1uYW1lZCBrZXl3b3JkIGFyZ3VtZW50LiAgVGhpcyBjYW4gYmUgZm9sbG93ZWQgYnkgYW55IG51bWJlciBvZiBpbmRleCBvcgorVGhlICpmaWVsZF9uYW1lKiBpdHNlbGYgYmVnaW5zIHdpdGggYW4gKmFyZ19uYW1lKiB0aGF0IGlzIGVpdGhlciBlaXRoZXIgYSBudW1iZXIgb3IgYQora2V5d29yZC4gIElmIGl0J3MgYSBudW1iZXIsIGl0IHJlZmVycyB0byBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIGFuZCBpZiBpdCdzIGEga2V5d29yZCwKK2l0IHJlZmVycyB0byBhIG5hbWVkIGtleXdvcmQgYXJndW1lbnQuICBJZiB0aGUgbnVtZXJpY2FsIGFyZ19uYW1lcyBpbiBhIGZvcm1hdCBzdHJpbmcKK2FyZSAwLCAxLCAyLCAuLi4gaW4gc2VxdWVuY2UsIHRoZXkgY2FuIGFsbCBiZSBvbWl0dGVkIChub3QganVzdCBzb21lKQorYW5kIHRoZSBudW1iZXJzIDAsIDEsIDIsIC4uLiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhhdCBvcmRlci4KK1RoZSAqYXJnX25hbWUqIGNhbiBiZSBmb2xsb3dlZCBieSBhbnkgbnVtYmVyIG9mIGluZGV4IG9yCiBhdHRyaWJ1dGUgZXhwcmVzc2lvbnMuIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYGAnLm5hbWUnYGAgc2VsZWN0cyB0aGUgbmFtZWQKIGF0dHJpYnV0ZSB1c2luZyA6ZnVuYzpgZ2V0YXR0cmAsIHdoaWxlIGFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYGAnW2luZGV4XSdgYAogZG9lcyBhbiBpbmRleCBsb29rdXAgdXNpbmcgOmZ1bmM6YF9fZ2V0aXRlbV9fYC4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgIFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcnMgY2FuIGJlIG9taXR0ZWQsIHNvIGBgJ3t9IHt9J2BgIGlzCisgICBlcXVpdmFsZW50IHRvIGBgJ3swfSB7MX0nYGAuCisKIFNvbWUgc2ltcGxlIGZvcm1hdCBzdHJpbmcgZXhhbXBsZXM6OgogCiAgICAiRmlyc3QsIHRob3Ugc2hhbHQgY291bnQgdG8gezB9IiAjIFJlZmVyZW5jZXMgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudAorICAgIkJyaW5nIG1lIGEge30iICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdGx5IHJlZmVyZW5jZXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQKKyAgICJGcm9tIHt9IHRvIHt9IiAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyAiRnJvbSB7MH0gdG8gezF9IgogICAgIk15IHF1ZXN0IGlzIHtuYW1lfSIgICAgICAgICAgICAgIyBSZWZlcmVuY2VzIGtleXdvcmQgYXJndW1lbnQgJ25hbWUnCiAgICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAjICd3ZWlnaHQnIGF0dHJpYnV0ZSBvZiBmaXJzdCBwb3NpdGlvbmFsIGFyZwogICAgIlVuaXRzIGRlc3Ryb3llZDoge3BsYXllcnNbMF19IiAgIyBGaXJzdCBlbGVtZW50IG9mIGtleXdvcmQgYXJndW1lbnQgJ3BsYXllcnMnLgpAQCAtMzA1LDcgKzMyMSw3IEBACiBUaGUgZ2VuZXJhbCBmb3JtIG9mIGEgKnN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIqIGlzOgogCiAuLiBwcm9kdWN0aW9ubGlzdDo6IHNmCi0gICBmb3JtYXRfc3BlYzogW1tgZmlsbGBdYGFsaWduYF1bYHNpZ25gXVsjXVswXVtgd2lkdGhgXVsuYHByZWNpc2lvbmBdW2B0eXBlYF0KKyAgIGZvcm1hdF9zcGVjOiBbW2BmaWxsYF1gYWxpZ25gXVtgc2lnbmBdWyNdWzBdW2B3aWR0aGBdWyxdWy5gcHJlY2lzaW9uYF1bYHR5cGVgXQogICAgZmlsbDogPGEgY2hhcmFjdGVyIG90aGVyIHRoYW4gJ30nPgogICAgYWxpZ246ICI8IiB8ICI+IiB8ICI9IiB8ICJeIgogICAgc2lnbjogIisiIHwgIi0iIHwgIiAiCkBAIC0zMTMsMTEgKzMyOSwxMSBAQAogICAgcHJlY2lzaW9uOiBgaW50ZWdlcmAKICAgIHR5cGU6ICJiIiB8ICJjIiB8ICJkIiB8ICJlIiB8ICJFIiB8ICJmIiB8ICJGIiB8ICJnIiB8ICJHIiB8ICJuIiB8ICJvIiB8ICJzIiB8ICJ4IiB8ICJYIiB8ICIlIgogCi1UaGUgKmZpbGwqIGNoYXJhY3RlciBjYW4gYmUgYW55IGNoYXJhY3RlciBvdGhlciB0aGFuICd9JyAod2hpY2ggc2lnbmlmaWVzIHRoZQotZW5kIG9mIHRoZSBmaWVsZCkuICBUaGUgcHJlc2VuY2Ugb2YgYSBmaWxsIGNoYXJhY3RlciBpcyBzaWduYWxlZCBieSB0aGUgKm5leHQqCi1jaGFyYWN0ZXIsIHdoaWNoIG11c3QgYmUgb25lIG9mIHRoZSBhbGlnbm1lbnQgb3B0aW9ucy4gSWYgdGhlIHNlY29uZCBjaGFyYWN0ZXIKLW9mICpmb3JtYXRfc3BlYyogaXMgbm90IGEgdmFsaWQgYWxpZ25tZW50IG9wdGlvbiwgdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgYm90aAotdGhlIGZpbGwgY2hhcmFjdGVyIGFuZCB0aGUgYWxpZ25tZW50IG9wdGlvbiBhcmUgYWJzZW50LgorVGhlICpmaWxsKiBjaGFyYWN0ZXIgY2FuIGJlIGFueSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiAneycgb3IgJ30nLiAgVGhlIHByZXNlbmNlCitvZiBhIGZpbGwgY2hhcmFjdGVyIGlzIHNpZ25hbGVkIGJ5IHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIGl0LCB3aGljaCBtdXN0IGJlCitvbmUgb2YgdGhlIGFsaWdubWVudCBvcHRpb25zLiAgSWYgdGhlIHNlY29uZCBjaGFyYWN0ZXIgb2YgKmZvcm1hdF9zcGVjKiBpcyBub3QKK2EgdmFsaWQgYWxpZ25tZW50IG9wdGlvbiwgdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgYm90aCB0aGUgZmlsbCBjaGFyYWN0ZXIgYW5kCit0aGUgYWxpZ25tZW50IG9wdGlvbiBhcmUgYWJzZW50LgogCiBUaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOgogCkBAIC0zMjUsMTAgKzM0MSwxMCBAQAogICAgfCBPcHRpb24gIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKz09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwogICAgfCBgYCc8J2BgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBsZWZ0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgfAotICAgfCAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG1vc3Qgb2JqZWN0cykuICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBgYCc+J2BgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSByaWdodC1hbGlnbmVkIHdpdGhpbiB0aGUgICAgICAgICAgfAotICAgfCAgICAgICAgIHwgYXZhaWxhYmxlIHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgIHwgYXZhaWxhYmxlIHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBudW1iZXJzKS4gICAgICAgfAogICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBgYCc9J2BgIHwgRm9yY2VzIHRoZSBwYWRkaW5nIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgc2lnbiAoaWYgYW55KSAgfAogICAgfCAgICAgICAgIHwgYnV0IGJlZm9yZSB0aGUgZGlnaXRzLiAgVGhpcyBpcyB1c2VkIGZvciBwcmludGluZyBmaWVsZHMgfApAQCAtMzYzLDYgKzM3OSwxMyBAQAogaGV4YWRlY2ltYWwgb3V0cHV0LiAgSWYgcHJlc2VudCwgaXQgc3BlY2lmaWVzIHRoYXQgdGhlIG91dHB1dCB3aWxsIGJlIHByZWZpeGVkCiBieSBgYCcwYidgYCwgYGAnMG8nYGAsIG9yIGBgJzB4J2BgLCByZXNwZWN0aXZlbHkuCiAKK1RoZSBgYCcsJ2BgIG9wdGlvbiBzaWduYWxzIHRoZSB1c2Ugb2YgYSBjb21tYSBmb3IgYSB0aG91c2FuZHMgc2VwYXJhdG9yLgorRm9yIGEgbG9jYWxlIGF3YXJlIHNlcGFyYXRvciwgdXNlIHRoZSBgYCduJ2BgIGludGVnZXIgcHJlc2VudGF0aW9uIHR5cGUKK2luc3RlYWQuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICBBZGRlZCB0aGUgYGAnLCdgYCBvcHRpb24gKHNlZSBhbHNvIDpwZXA6YDM3OGApLgorCiAqd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90CiBzcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC4KIApAQCAtNDU0LDcgKzQ3Nyw3IEBACiAgICB8ICAgICAgICAgfCBmcm9tIHRoZSBzaWduaWZpY2FuZCwgYW5kIHRoZSBkZWNpbWFsIHBvaW50IGlzIGFsc28gICAgICB8CiAgICB8ICAgICAgICAgfCByZW1vdmVkIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgZGlnaXRzIGZvbGxvd2luZyBpdC4gICB8CiAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICB8ICAgICAgICAgfCBQb3N0aXZlIGFuZCBuZWdhdGl2ZSBpbmZpbml0eSwgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlICAgICB8CisgICB8ICAgICAgICAgfCBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSAgICB8CiAgICB8ICAgICAgICAgfCB6ZXJvLCBhbmQgbmFucywgYXJlIGZvcm1hdHRlZCBhcyBgYGluZmBgLCBgYC1pbmZgYCwgICAgICB8CiAgICB8ICAgICAgICAgfCBgYDBgYCwgYGAtMGBgIGFuZCBgYG5hbmBgIHJlc3BlY3RpdmVseSwgcmVnYXJkbGVzcyBvZiAgICB8CiAgICB8ICAgICAgICAgfCB0aGUgcHJlY2lzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC00ODgsNyArNTExLDcgQEAKIAogSW4gbW9zdCBvZiB0aGUgY2FzZXMgdGhlIHN5bnRheCBpcyBzaW1pbGFyIHRvIHRoZSBvbGQgYGAlYGAtZm9ybWF0dGluZywgd2l0aCB0aGUKIGFkZGl0aW9uIG9mIHRoZSBgYHt9YGAgYW5kIHdpdGggYGA6YGAgdXNlZCBpbnN0ZWFkIG9mIGBgJWBgLgotRm9yIGV4YW1wbGUsIGBgJyUwMy4yZidgYCBjYW4gYmUgdHJhbnNsYXRlZCB0byBgYCd7MDowMy4yZn0nYGAuCitGb3IgZXhhbXBsZSwgYGAnJTAzLjJmJ2BgIGNhbiBiZSB0cmFuc2xhdGVkIHRvIGBgJ3s6MDMuMmZ9J2BgLgogCiBUaGUgbmV3IGZvcm1hdCBzeW50YXggYWxzbyBzdXBwb3J0cyBuZXcgYW5kIGRpZmZlcmVudCBvcHRpb25zLCBzaG93biBpbiB0aGUKIGZvbGxvdyBleGFtcGxlcy4KQEAgLTQ5Nyw2ICs1MjAsOCBAQAogCiAgICA+Pj4gJ3swfSwgezF9LCB7Mn0nLmZvcm1hdCgnYScsICdiJywgJ2MnKQogICAgJ2EsIGIsIGMnCisgICA+Pj4gJ3t9LCB7fSwge30nLmZvcm1hdCgnYScsICdiJywgJ2MnKSAgIyAyLjcrIG9ubHkKKyAgICdhLCBiLCBjJwogICAgPj4+ICd7Mn0sIHsxfSwgezB9Jy5mb3JtYXQoJ2EnLCAnYicsICdjJykKICAgICdjLCBiLCBhJwogICAgPj4+ICd7Mn0sIHsxfSwgezB9Jy5mb3JtYXQoKidhYmMnKSAgICAgICMgdW5wYWNraW5nIGFyZ3VtZW50IHNlcXVlbmNlCkBAIC01MzYsMjcgKzU2MSwyNyBAQAogCiBSZXBsYWNpbmcgYGAlc2BgIGFuZCBgYCVyYGA6OgogCi0gICA+Pj4gInJlcHIoKSBzaG93cyBxdW90ZXM6IHswIXJ9OyBzdHIoKSBkb2Vzbid0OiB7MSFzfSIuZm9ybWF0KCd0ZXN0MScsICd0ZXN0MicpCisgICA+Pj4gInJlcHIoKSBzaG93cyBxdW90ZXM6IHshcn07IHN0cigpIGRvZXNuJ3Q6IHshc30iLmZvcm1hdCgndGVzdDEnLCAndGVzdDInKQogICAgInJlcHIoKSBzaG93cyBxdW90ZXM6ICd0ZXN0MSc7IHN0cigpIGRvZXNuJ3Q6IHRlc3QyIgogCiBBbGlnbmluZyB0aGUgdGV4dCBhbmQgc3BlY2lmeWluZyBhIHdpZHRoOjoKIAotICAgPj4+ICd7MDo8MzB9Jy5mb3JtYXQoJ2xlZnQgYWxpZ25lZCcpCisgICA+Pj4gJ3s6PDMwfScuZm9ybWF0KCdsZWZ0IGFsaWduZWQnKQogICAgJ2xlZnQgYWxpZ25lZCAgICAgICAgICAgICAgICAgICcKLSAgID4+PiAnezA6PjMwfScuZm9ybWF0KCdyaWdodCBhbGlnbmVkJykKKyAgID4+PiAnezo+MzB9Jy5mb3JtYXQoJ3JpZ2h0IGFsaWduZWQnKQogICAgJyAgICAgICAgICAgICAgICAgcmlnaHQgYWxpZ25lZCcKLSAgID4+PiAnezA6XjMwfScuZm9ybWF0KCdjZW50ZXJlZCcpCisgICA+Pj4gJ3s6XjMwfScuZm9ybWF0KCdjZW50ZXJlZCcpCiAgICAnICAgICAgICAgICBjZW50ZXJlZCAgICAgICAgICAgJwotICAgPj4+ICd7MDoqXjMwfScuZm9ybWF0KCdjZW50ZXJlZCcpICAjIHVzZSAnKicgYXMgYSBmaWxsIGNoYXIKKyAgID4+PiAnezoqXjMwfScuZm9ybWF0KCdjZW50ZXJlZCcpICAjIHVzZSAnKicgYXMgYSBmaWxsIGNoYXIKICAgICcqKioqKioqKioqKmNlbnRlcmVkKioqKioqKioqKionCiAKIFJlcGxhY2luZyBgYCUrZmBgLCBgYCUtZmBgLCBhbmQgYGAlIGZgYCBhbmQgc3BlY2lmeWluZyBhIHNpZ246OgogCi0gICA+Pj4gJ3swOitmfTsgezA6K2Z9Jy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgaXQgYWx3YXlzCisgICA+Pj4gJ3s6K2Z9OyB7OitmfScuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGl0IGFsd2F5cwogICAgJyszLjE0MDAwMDsgLTMuMTQwMDAwJwotICAgPj4+ICd7MDogZn07IHswOiBmfScuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnMKKyAgID4+PiAnezogZn07IHs6IGZ9Jy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgYSBzcGFjZSBmb3IgcG9zaXRpdmUgbnVtYmVycwogICAgJyAzLjE0MDAwMDsgLTMuMTQwMDAwJwotICAgPj4+ICd7MDotZn07IHswOi1mfScuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgJ3swOmZ9OyB7MDpmfScKKyAgID4+PiAnezotZn07IHs6LWZ9Jy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgb25seSB0aGUgbWludXMgLS0gc2FtZSBhcyAnezpmfTsgezpmfScKICAgICczLjE0MDAwMDsgLTMuMTQwMDAwJwogCiBSZXBsYWNpbmcgYGAleGBgIGFuZCBgYCVvYGAgYW5kIGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGRpZmZlcmVudCBiYXNlczo6CkBAIC01NjgsMzEgKzU5MywzNiBAQAogICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDojeH07ICBvY3Q6IHswOiNvfTsgIGJpbjogezA6I2J9Ii5mb3JtYXQoNDIpCiAgICAnaW50OiA0MjsgIGhleDogMHgyYTsgIG9jdDogMG81MjsgIGJpbjogMGIxMDEwMTAnCiAKK1VzaW5nIHRoZSBjb21tYSBhcyBhIHRob3VzYW5kcyBzZXBhcmF0b3I6OgorCisgICA+Pj4gJ3s6LH0nLmZvcm1hdCgxMjM0NTY3ODkwKQorICAgJzEsMjM0LDU2Nyw4OTAnCisKIEV4cHJlc3NpbmcgYSBwZXJjZW50YWdlOjoKIAogICAgPj4+IHBvaW50cyA9IDE5LjUKICAgID4+PiB0b3RhbCA9IDIyCi0gICA+Pj4gJ0NvcnJlY3QgYW5zd2VyczogezA6LjIlfS4nLmZvcm1hdChwb2ludHMvdG90YWwpCisgICA+Pj4gJ0NvcnJlY3QgYW5zd2VyczogezouMiV9LicuZm9ybWF0KHBvaW50cy90b3RhbCkKICAgICdDb3JyZWN0IGFuc3dlcnM6IDg4LjY0JScKIAogVXNpbmcgdHlwZS1zcGVjaWZpYyBmb3JtYXR0aW5nOjoKIAogICAgPj4+IGltcG9ydCBkYXRldGltZQogICAgPj4+IGQgPSBkYXRldGltZS5kYXRldGltZSgyMDEwLCA3LCA0LCAxMiwgMTUsIDU4KQotICAgPj4+ICd7MDolWS0lbS0lZCAlSDolTTolU30nLmZvcm1hdChkKQorICAgPj4+ICd7OiVZLSVtLSVkICVIOiVNOiVTfScuZm9ybWF0KGQpCiAgICAnMjAxMC0wNy0wNCAxMjoxNTo1OCcKIAogTmVzdGluZyBhcmd1bWVudHMgYW5kIG1vcmUgY29tcGxleCBleGFtcGxlczo6CiAKICAgID4+PiBmb3IgYWxpZ24sIHRleHQgaW4gemlwKCc8Xj4nLCBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J10pOgotICAgLi4uICAgICAnezA6e2FsaWdufXtmaWxsfTE2fScuZm9ybWF0KHRleHQsIGZpbGw9YWxpZ24sIGFsaWduPWFsaWduKQorICAgLi4uICAgICAnezA6e2ZpbGx9e2FsaWdufTE2fScuZm9ybWF0KHRleHQsIGZpbGw9YWxpZ24sIGFsaWduPWFsaWduKQogICAgLi4uCiAgICAnbGVmdDw8PDw8PDw8PDw8PCcKICAgICdeXl5eXmNlbnRlcl5eXl5eJwogICAgJz4+Pj4+Pj4+Pj4+cmlnaHQnCiAgICA+Pj4KICAgID4+PiBvY3RldHMgPSBbMTkyLCAxNjgsIDAsIDFdCi0gICA+Pj4gJ3swOjAyWH17MTowMlh9ezI6MDJYfXszOjAyWH0nLmZvcm1hdCgqb2N0ZXRzKQorICAgPj4+ICd7OjAyWH17OjAyWH17OjAyWH17OjAyWH0nLmZvcm1hdCgqb2N0ZXRzKQogICAgJ0MwQTgwMDAxJwogICAgPj4+IGludChfLCAxNikKICAgIDMyMzIyMzU1MjEKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CmluZGV4IGYxZjAxOWQuLjBiODA1MmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RydWN0LnJzdApAQCAtMTY5LDM4ICsxNjksMzggQEAKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogfCBgYGNgYCAgfCA6Y3R5cGU6YGNoYXJgICAgICAgICAgICB8IHN0cmluZyBvZiBsZW5ndGggMSB8IDEgICAgICAgICAgICAgIHwgICAgICAgICAgICB8CiArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgYGBiYGAgIHwgOmN0eXBlOmBzaWduZWQgY2hhcmAgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCAxICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAorfCBgYGJgYCAgfCA6Y3R5cGU6YHNpZ25lZCBjaGFyYCAgICB8IGludGVnZXIgICAgICAgICAgICB8IDEgICAgICAgICAgICAgIHwgXCgzKSAgICAgICB8CiArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgYGBCYGAgIHwgOmN0eXBlOmB1bnNpZ25lZCBjaGFyYCAgfCBpbnRlZ2VyICAgICAgICAgICAgfCAxICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAorfCBgYEJgYCAgfCA6Y3R5cGU6YHVuc2lnbmVkIGNoYXJgICB8IGludGVnZXIgICAgICAgICAgICB8IDEgICAgICAgICAgICAgIHwgXCgzKSAgICAgICB8CiArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKIHwgYGA/YGAgIHwgOmN0eXBlOmBfQm9vbGAgICAgICAgICAgfCBib29sICAgICAgICAgICAgICAgfCAxICAgICAgICAgICAgICB8IFwoMSkgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgaGBgICB8IDpjdHlwZTpgc2hvcnRgICAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMiAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wgYGBoYGAgIHwgOmN0eXBlOmBzaG9ydGAgICAgICAgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCAyICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgSGBgICB8IDpjdHlwZTpgdW5zaWduZWQgc2hvcnRgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMiAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wgYGBIYGAgIHwgOmN0eXBlOmB1bnNpZ25lZCBzaG9ydGAgfCBpbnRlZ2VyICAgICAgICAgICAgfCAyICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgaWBgICB8IDpjdHlwZTpgaW50YCAgICAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wgYGBpYGAgIHwgOmN0eXBlOmBpbnRgICAgICAgICAgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgSWBgICB8IDpjdHlwZTpgdW5zaWduZWQgaW50YCAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wgYGBJYGAgIHwgOmN0eXBlOmB1bnNpZ25lZCBpbnRgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgbGBgICB8IDpjdHlwZTpgbG9uZ2AgICAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wgYGBsYGAgIHwgOmN0eXBlOmBsb25nYCAgICAgICAgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgTGBgICB8IDpjdHlwZTpgdW5zaWduZWQgbG9uZ2AgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wgYGBMYGAgIHwgOmN0eXBlOmB1bnNpZ25lZCBsb25nYCAgfCBpbnRlZ2VyICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgcWBgICB8IDpjdHlwZTpgbG9uZyBsb25nYCAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgfCBcKDIpICAgICAgIHwKK3wgYGBxYGAgIHwgOmN0eXBlOmBsb25nIGxvbmdgICAgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICB8IFwoMiksIFwoMykgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgUWBgICB8IDpjdHlwZTpgdW5zaWduZWQgbG9uZyAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgfCBcKDIpICAgICAgIHwKK3wgYGBRYGAgIHwgOmN0eXBlOmB1bnNpZ25lZCBsb25nICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICB8IFwoMiksIFwoMykgfAogfCAgICAgICAgfCBsb25nYCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8CiArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgYGBmYGAgIHwgOmN0eXBlOmBmbG9hdGAgICAgICAgICAgfCBmbG9hdCAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAorfCBgYGZgYCAgfCA6Y3R5cGU6YGZsb2F0YCAgICAgICAgICB8IGZsb2F0ICAgICAgICAgICAgICB8IDQgICAgICAgICAgICAgIHwgXCg0KSAgICAgICB8CiArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgYGBkYGAgIHwgOmN0eXBlOmBkb3VibGVgICAgICAgICAgfCBmbG9hdCAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAorfCBgYGRgYCAgfCA6Y3R5cGU6YGRvdWJsZWAgICAgICAgICB8IGZsb2F0ICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgIHwgXCg0KSAgICAgICB8CiArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKIHwgYGBzYGAgIHwgOmN0eXBlOmBjaGFyW11gICAgICAgICAgfCBzdHJpbmcgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiB8IGBgcGBgICB8IDpjdHlwZTpgY2hhcltdYCAgICAgICAgIHwgc3RyaW5nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYFBgYCAgfCA6Y3R5cGU6YHZvaWQgXCpgICAgICAgICB8IGludGVnZXIgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgXCg0KSAgICAgICB8Cit8IGBgUGBgICB8IDpjdHlwZTpgdm9pZCBcKmAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCBcKDUpLCBcKDMpIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogCiBOb3RlczoKQEAgLTIyMCwxMSArMjIwLDI3IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjIKIAogKDMpCisgICBXaGVuIGF0dGVtcHRpbmcgdG8gcGFjayBhIG5vbi1pbnRlZ2VyIHVzaW5nIGFueSBvZiB0aGUgaW50ZWdlciBjb252ZXJzaW9uCisgICBjb2RlcywgaWYgdGhlIG5vbi1pbnRlZ2VyIGhhcyBhIDptZXRoOmBfX2luZGV4X19gIG1ldGhvZCB0aGVuIHRoYXQgbWV0aG9kIGlzCisgICBjYWxsZWQgdG8gY29udmVydCB0aGUgYXJndW1lbnQgdG8gYW4gaW50ZWdlciBiZWZvcmUgcGFja2luZy4gIElmIG5vCisgICA6bWV0aDpgX19pbmRleF9fYCBtZXRob2QgZXhpc3RzLCBvciB0aGUgY2FsbCB0byA6bWV0aDpgX19pbmRleF9fYCByYWlzZXMKKyAgIDpleGM6YFR5cGVFcnJvcmAsIHRoZW4gdGhlIDptZXRoOmBfX2ludF9fYCBtZXRob2QgaXMgdHJpZWQuICBIb3dldmVyLCB0aGUgdXNlCisgICBvZiA6bWV0aDpgX19pbnRfX2AgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgcmFpc2UgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFVzZSBvZiB0aGUgOm1ldGg6YF9faW5kZXhfX2AgbWV0aG9kIGZvciBub24taW50ZWdlcnMgaXMgbmV3IGluIDIuNy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFByaW9yIHRvIHZlcnNpb24gMi43LCBub3QgYWxsIGludGVnZXIgY29udmVyc2lvbiBjb2RlcyB3b3VsZCB1c2UgdGhlCisgICAgICA6bWV0aDpgX19pbnRfX2AgbWV0aG9kIHRvIGNvbnZlcnQsIGFuZCA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIHdhcworICAgICAgcmFpc2VkIG9ubHkgZm9yIGZsb2F0IGFyZ3VtZW50cy4KKworKDQpCiAgICBGb3IgdGhlIGBgJ2YnYGAgYW5kIGBgJ2QnYGAgY29udmVyc2lvbiBjb2RlcywgdGhlIHBhY2tlZCByZXByZXNlbnRhdGlvbiB1c2VzCiAgICB0aGUgSUVFRSA3NTQgYmluYXJ5MzIgKGZvciBgYCdmJ2BgKSBvciBiaW5hcnk2NCAoZm9yIGBgJ2QnYGApIGZvcm1hdCwKICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGZsb2F0aW5nLXBvaW50IGZvcm1hdCB1c2VkIGJ5IHRoZSBwbGF0Zm9ybS4KIAotKDQpCisoNSkKICAgIFRoZSBgYCdQJ2BgIGZvcm1hdCBjaGFyYWN0ZXIgaXMgb25seSBhdmFpbGFibGUgZm9yIHRoZSBuYXRpdmUgYnl0ZSBvcmRlcmluZwogICAgKHNlbGVjdGVkIGFzIHRoZSBkZWZhdWx0IG9yIHdpdGggdGhlIGBgJ0AnYGAgYnl0ZSBvcmRlciBjaGFyYWN0ZXIpLiBUaGUgYnl0ZQogICAgb3JkZXIgY2hhcmFjdGVyIGBgJz0nYGAgY2hvb3NlcyB0byB1c2UgbGl0dGxlLSBvciBiaWctZW5kaWFuIG9yZGVyaW5nIGJhc2VkCkBAIC0yNDcsMTQgKzI2MywxNCBAQAogc3RyaW5nICh3aGlsZSBgYCcwYydgYCBtZWFucyAwIGNoYXJhY3RlcnMpLgogCiBUaGUgYGAncCdgYCBmb3JtYXQgY2hhcmFjdGVyIGVuY29kZXMgYSAiUGFzY2FsIHN0cmluZyIsIG1lYW5pbmcgYSBzaG9ydAotdmFyaWFibGUtbGVuZ3RoIHN0cmluZyBzdG9yZWQgaW4gYSBmaXhlZCBudW1iZXIgb2YgYnl0ZXMuIFRoZSBjb3VudCBpcyB0aGUgdG90YWwKLW51bWJlciBvZiBieXRlcyBzdG9yZWQuICBUaGUgZmlyc3QgYnl0ZSBzdG9yZWQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBvcgotMjU1LCB3aGljaGV2ZXIgaXMgc21hbGxlci4gIFRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIGZvbGxvdy4gIElmIHRoZSBzdHJpbmcKLXBhc3NlZCBpbiB0byA6ZnVuYzpgcGFja2AgaXMgdG9vIGxvbmcgKGxvbmdlciB0aGFuIHRoZSBjb3VudCBtaW51cyAxKSwgb25seSB0aGUKLWxlYWRpbmcgY291bnQtMSBieXRlcyBvZiB0aGUgc3RyaW5nIGFyZSBzdG9yZWQuICBJZiB0aGUgc3RyaW5nIGlzIHNob3J0ZXIgdGhhbgotY291bnQtMSwgaXQgaXMgcGFkZGVkIHdpdGggbnVsbCBieXRlcyBzbyB0aGF0IGV4YWN0bHkgY291bnQgYnl0ZXMgaW4gYWxsIGFyZQotdXNlZC4gIE5vdGUgdGhhdCBmb3IgOmZ1bmM6YHVucGFja2AsIHRoZSBgYCdwJ2BgIGZvcm1hdCBjaGFyYWN0ZXIgY29uc3VtZXMgY291bnQKLWJ5dGVzLCBidXQgdGhhdCB0aGUgc3RyaW5nIHJldHVybmVkIGNhbiBuZXZlciBjb250YWluIG1vcmUgdGhhbiAyNTUgY2hhcmFjdGVycy4KK3ZhcmlhYmxlLWxlbmd0aCBzdHJpbmcgc3RvcmVkIGluIGEgKmZpeGVkIG51bWJlciBvZiBieXRlcyosIGdpdmVuIGJ5IHRoZSBjb3VudC4KK1RoZSBmaXJzdCBieXRlIHN0b3JlZCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcsIG9yIDI1NSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCitUaGUgYnl0ZXMgb2YgdGhlIHN0cmluZyBmb2xsb3cuICBJZiB0aGUgc3RyaW5nIHBhc3NlZCBpbiB0byA6ZnVuYzpgcGFja2AgaXMgdG9vCitsb25nIChsb25nZXIgdGhhbiB0aGUgY291bnQgbWludXMgMSksIG9ubHkgdGhlIGxlYWRpbmcgYGBjb3VudC0xYGAgYnl0ZXMgb2YgdGhlCitzdHJpbmcgYXJlIHN0b3JlZC4gIElmIHRoZSBzdHJpbmcgaXMgc2hvcnRlciB0aGFuIGBgY291bnQtMWBgLCBpdCBpcyBwYWRkZWQgd2l0aAorbnVsbCBieXRlcyBzbyB0aGF0IGV4YWN0bHkgY291bnQgYnl0ZXMgaW4gYWxsIGFyZSB1c2VkLiAgTm90ZSB0aGF0IGZvcgorOmZ1bmM6YHVucGFja2AsIHRoZSBgYCdwJ2BgIGZvcm1hdCBjaGFyYWN0ZXIgY29uc3VtZXMgY291bnQgYnl0ZXMsIGJ1dCB0aGF0IHRoZQorc3RyaW5nIHJldHVybmVkIGNhbiBuZXZlciBjb250YWluIG1vcmUgdGhhbiAyNTUgY2hhcmFjdGVycy4KIAogRm9yIHRoZSBgYCdQJ2BgIGZvcm1hdCBjaGFyYWN0ZXIsIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBQeXRob24gaW50ZWdlciBvciBsb25nCiBpbnRlZ2VyLCBkZXBlbmRpbmcgb24gdGhlIHNpemUgbmVlZGVkIHRvIGhvbGQgYSBwb2ludGVyIHdoZW4gaXQgaGFzIGJlZW4gY2FzdCB0bwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QgYi9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdAppbmRleCA2ZjJkNTViLi40MjVjNTI2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdApAQCAtODEsNiArODEsMjQgQEAKIAogICAgICAgUG9wZW4oWycvYmluL3NoJywgJy1jJywgYXJnc1swXSwgYXJnc1sxXSwgLi4uXSkKIAorICAgLi4gd2FybmluZzo6CisKKyAgICAgIEV4ZWN1dGluZyBzaGVsbCBjb21tYW5kcyB0aGF0IGluY29ycG9yYXRlIHVuc2FuaXRpemVkIGlucHV0IGZyb20gYW4KKyAgICAgIHVudHJ1c3RlZCBzb3VyY2UgbWFrZXMgYSBwcm9ncmFtIHZ1bG5lcmFibGUgdG8gYHNoZWxsIGluamVjdGlvbgorICAgICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hlbGxfaW5qZWN0aW9uI1NoZWxsX2luamVjdGlvbj5gXywKKyAgICAgIGEgc2VyaW91cyBzZWN1cml0eSBmbGF3IHdoaWNoIGNhbiByZXN1bHQgaW4gYXJiaXRyYXJ5IGNvbW1hbmQgZXhlY3V0aW9uLgorICAgICAgRm9yIHRoaXMgcmVhc29uLCB0aGUgdXNlIG9mICpzaGVsbD1UcnVlKiBpcyAqKnN0cm9uZ2x5IGRpc2NvdXJhZ2VkKiogaW4gY2FzZXMKKyAgICAgIHdoZXJlIHRoZSBjb21tYW5kIHN0cmluZyBpcyBjb25zdHJ1Y3RlZCBmcm9tIGV4dGVybmFsIGlucHV0OjoKKworICAgICAgICAgPj4+IGZyb20gc3VicHJvY2VzcyBpbXBvcnQgY2FsbAorICAgICAgICAgPj4+IGZpbGVuYW1lID0gaW5wdXQoIldoYXQgZmlsZSB3b3VsZCB5b3UgbGlrZSB0byBkaXNwbGF5P1xuIikKKyAgICAgICAgIFdoYXQgZmlsZSB3b3VsZCB5b3UgbGlrZSB0byBkaXNwbGF5PworICAgICAgICAgbm9uX2V4aXN0ZW50OyBybSAtcmYgLyAjCisgICAgICAgICA+Pj4gY2FsbCgiY2F0ICIgKyBmaWxlbmFtZSwgc2hlbGw9VHJ1ZSkgIyBVaC1vaC4gVGhpcyB3aWxsIGVuZCBiYWRseS4uLgorCisgICAgICAqc2hlbGw9RmFsc2UqIGRvZXMgbm90IHN1ZmZlciBmcm9tIHRoaXMgdnVsbmVyYWJpbGl0eTsgdGhlIGFib3ZlIE5vdGUgbWF5IGJlCisgICAgICBoZWxwZnVsIGluIGdldHRpbmcgY29kZSB1c2luZyAqc2hlbGw9RmFsc2UqIHRvIHdvcmsuCisKICAgIE9uIFdpbmRvd3M6IHRoZSA6Y2xhc3M6YFBvcGVuYCBjbGFzcyB1c2VzIENyZWF0ZVByb2Nlc3MoKSB0byBleGVjdXRlIHRoZSBjaGlsZAogICAgcHJvZ3JhbSwgd2hpY2ggb3BlcmF0ZXMgb24gc3RyaW5ncy4gIElmICphcmdzKiBpcyBhIHNlcXVlbmNlLCBpdCB3aWxsIGJlCiAgICBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdXNpbmcgdGhlIDptZXRoOmBsaXN0MmNtZGxpbmVgIG1ldGhvZC4gIFBsZWFzZSBub3RlIHRoYXQKQEAgLTE5Niw2ICsyMTQsMTMgQEAKIAogICAgICAgPj4+IHJldGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoWyJscyIsICItbCJdKQogCisgICAuLiB3YXJuaW5nOjoKKworICAgICAgTGlrZSA6bWV0aDpgUG9wZW4ud2FpdGAsIHRoaXMgd2lsbCBkZWFkbG9jayB3aGVuIHVzaW5nCisgICAgICBgYHN0ZG91dD1QSVBFYGAgYW5kL29yIGBgc3RkZXJyPVBJUEVgYCBhbmQgdGhlIGNoaWxkIHByb2Nlc3MKKyAgICAgIGdlbmVyYXRlcyBlbm91Z2ggb3V0cHV0IHRvIGEgcGlwZSBzdWNoIHRoYXQgaXQgYmxvY2tzIHdhaXRpbmcKKyAgICAgIGZvciB0aGUgT1MgcGlwZSBidWZmZXIgdG8gYWNjZXB0IG1vcmUgZGF0YS4KKwogCiAuLiBmdW5jdGlvbjo6IGNoZWNrX2NhbGwoKnBvcGVuYXJncywgKiprd2FyZ3MpCiAKQEAgLTIxMSw2ICsyMzYsMzUgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKKyAgIC4uIHdhcm5pbmc6OgorCisgICAgICBTZWUgdGhlIHdhcm5pbmcgZm9yIDpmdW5jOmBjYWxsYC4KKworCisuLiBmdW5jdGlvbjo6IGNoZWNrX291dHB1dCgqcG9wZW5hcmdzLCAqKmt3YXJncykKKworICAgUnVuIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMgYW5kIHJldHVybiBpdHMgb3V0cHV0IGFzIGEgYnl0ZSBzdHJpbmcuCisKKyAgIElmIHRoZSBleGl0IGNvZGUgd2FzIG5vbi16ZXJvIGl0IHJhaXNlcyBhIDpleGM6YENhbGxlZFByb2Nlc3NFcnJvcmAuICBUaGUKKyAgIDpleGM6YENhbGxlZFByb2Nlc3NFcnJvcmAgb2JqZWN0IHdpbGwgaGF2ZSB0aGUgcmV0dXJuIGNvZGUgaW4gdGhlCisgICA6YXR0cjpgcmV0dXJuY29kZWAKKyAgIGF0dHJpYnV0ZSBhbmQgb3V0cHV0IGluIHRoZSA6YXR0cjpgb3V0cHV0YCBhdHRyaWJ1dGUuCisKKyAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IuICBFeGFtcGxlOjoKKworICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsibHMiLCAiLWwiLCAiL2Rldi9udWxsIl0pCisgICAgICAnY3J3LXJ3LXJ3LSAxIHJvb3Qgcm9vdCAxLCAzIE9jdCAxOCAgMjAwNyAvZGV2L251bGxcbicKKworICAgVGhlIHN0ZG91dCBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCBhcyBpdCBpcyB1c2VkIGludGVybmFsbHkuCisgICBUbyBjYXB0dXJlIHN0YW5kYXJkIGVycm9yIGluIHRoZSByZXN1bHQsIHVzZSBgYHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVGBgOjoKKworICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgLi4uICAgICBbIi9iaW4vc2giLCAiLWMiLCAibHMgbm9uX2V4aXN0ZW50X2ZpbGU7IGV4aXQgMCJdLAorICAgICAgLi4uICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAnbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCiAKIEV4Y2VwdGlvbnMKIF5eXl5eXl5eXl4KQEAgLTIxOCw3ICsyNzIsNyBAQAogRXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNoaWxkIHByb2Nlc3MsIGJlZm9yZSB0aGUgbmV3IHByb2dyYW0gaGFzIHN0YXJ0ZWQgdG8KIGV4ZWN1dGUsIHdpbGwgYmUgcmUtcmFpc2VkIGluIHRoZSBwYXJlbnQuICBBZGRpdGlvbmFsbHksIHRoZSBleGNlcHRpb24gb2JqZWN0CiB3aWxsIGhhdmUgb25lIGV4dHJhIGF0dHJpYnV0ZSBjYWxsZWQgOmF0dHI6YGNoaWxkX3RyYWNlYmFja2AsIHdoaWNoIGlzIGEgc3RyaW5nCi1jb250YWluaW5nIHRyYWNlYmFjayBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjaGlsZHMgcG9pbnQgb2Ygdmlldy4KK2NvbnRhaW5pbmcgdHJhY2ViYWNrIGluZm9ybWF0aW9uIGZyb20gdGhlIGNoaWxkJ3MgcG9pbnQgb2Ygdmlldy4KIAogVGhlIG1vc3QgY29tbW9uIGV4Y2VwdGlvbiByYWlzZWQgaXMgOmV4YzpgT1NFcnJvcmAuICBUaGlzIG9jY3VycywgZm9yIGV4YW1wbGUsCiB3aGVuIHRyeWluZyB0byBleGVjdXRlIGEgbm9uLWV4aXN0ZW50IGZpbGUuICBBcHBsaWNhdGlvbnMgc2hvdWxkIHByZXBhcmUgZm9yCkBAIC0yNTgsOSArMzEyLDEwIEBACiAKICAgIC4uIHdhcm5pbmc6OgogCi0gICAgICBUaGlzIHdpbGwgZGVhZGxvY2sgaWYgdGhlIGNoaWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gYQotICAgICAgc3Rkb3V0IG9yIHN0ZGVyciBwaXBlIHN1Y2ggdGhhdCBpdCBibG9ja3Mgd2FpdGluZyBmb3IgdGhlIE9TIHBpcGUgYnVmZmVyCi0gICAgICB0byBhY2NlcHQgbW9yZSBkYXRhLiAgVXNlIDptZXRoOmBjb21tdW5pY2F0ZWAgdG8gYXZvaWQgdGhhdC4KKyAgICAgIFRoaXMgd2lsbCBkZWFkbG9jayB3aGVuIHVzaW5nIGBgc3Rkb3V0PVBJUEVgYCBhbmQvb3IKKyAgICAgIGBgc3RkZXJyPVBJUEVgYCBhbmQgdGhlIGNoaWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8KKyAgICAgIGEgcGlwZSBzdWNoIHRoYXQgaXQgYmxvY2tzIHdhaXRpbmcgZm9yIHRoZSBPUyBwaXBlIGJ1ZmZlciB0bworICAgICAgYWNjZXB0IG1vcmUgZGF0YS4gIFVzZSA6bWV0aDpgY29tbXVuaWNhdGVgIHRvIGF2b2lkIHRoYXQuCiAKIAogLi4gbWV0aG9kOjogUG9wZW4uY29tbXVuaWNhdGUoaW5wdXQ9Tm9uZSkKQEAgLTI4OSw4ICszNDQsOSBAQAogCiAgICAuLiBub3RlOjoKIAotICAgICAgT24gV2luZG93cyBvbmx5IFNJR1RFUk0gaXMgc3VwcG9ydGVkIHNvIGZhci4gSXQncyBhbiBhbGlhcyBmb3IKLSAgICAgIDptZXRoOmB0ZXJtaW5hdGVgLgorICAgICAgT24gV2luZG93cywgU0lHVEVSTSBpcyBhbiBhbGlhcyBmb3IgOm1ldGg6YHRlcm1pbmF0ZWAuIENUUkxfQ19FVkVOVCBhbmQKKyAgICAgIENUUkxfQlJFQUtfRVZFTlQgY2FuIGJlIHNlbnQgdG8gcHJvY2Vzc2VzIHN0YXJ0ZWQgd2l0aCBhICpjcmVhdGlvbmZsYWdzKgorICAgICAgcGFyYW1ldGVyIHdoaWNoIGluY2x1ZGVzIGBDUkVBVEVfTkVXX1BST0NFU1NfR1JPVVBgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIApAQCAtMzk0LDggKzQ1MCwxMSBAQAogICAgPT0+CiAgICBwMSA9IFBvcGVuKFsiZG1lc2ciXSwgc3Rkb3V0PVBJUEUpCiAgICBwMiA9IFBvcGVuKFsiZ3JlcCIsICJoZGEiXSwgc3RkaW49cDEuc3Rkb3V0LCBzdGRvdXQ9UElQRSkKKyAgIHAxLnN0ZG91dC5jbG9zZSgpICAjIEFsbG93IHAxIHRvIHJlY2VpdmUgYSBTSUdQSVBFIGlmIHAyIGV4aXRzLgogICAgb3V0cHV0ID0gcDIuY29tbXVuaWNhdGUoKVswXQogCitUaGUgcDEuc3Rkb3V0LmNsb3NlKCkgY2FsbCBhZnRlciBzdGFydGluZyB0aGUgcDIgaXMgaW1wb3J0YW50IGluIG9yZGVyIGZvciBwMQordG8gcmVjZWl2ZSBhIFNJR1BJUEUgaWYgcDIgZXhpdHMgYmVmb3JlIHAxLgogCiBSZXBsYWNpbmcgOmZ1bmM6YG9zLnN5c3RlbWAKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3lzLnJzdCBiL0RvYy9saWJyYXJ5L3N5cy5yc3QKaW5kZXggZjdhMGE1ZC4uYmEyYWU1YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3lzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zeXMucnN0CkBAIC01Myw2ICs1MywxMyBAQAogICAgYGBtb2R1bGVzLmtleXMoKWBgIG9ubHkgbGlzdHMgdGhlIGltcG9ydGVkIG1vZHVsZXMuKQogCiAKKy4uIGZ1bmN0aW9uOjogY2FsbF90cmFjaW5nKGZ1bmMsIGFyZ3MpCisKKyAgIENhbGwgYGBmdW5jKCphcmdzKWBgLCB3aGlsZSB0cmFjaW5nIGlzIGVuYWJsZWQuICBUaGUgdHJhY2luZyBzdGF0ZSBpcyBzYXZlZCwKKyAgIGFuZCByZXN0b3JlZCBhZnRlcndhcmRzLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBhIGRlYnVnZ2VyIGZyb20KKyAgIGEgY2hlY2twb2ludCwgdG8gcmVjdXJzaXZlbHkgZGVidWcgc29tZSBvdGhlciBjb2RlLgorCisKIC4uIGRhdGE6OiBjb3B5cmlnaHQKIAogICAgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29weXJpZ2h0IHBlcnRhaW5pbmcgdG8gdGhlIFB5dGhvbiBpbnRlcnByZXRlci4KQEAgLTIwMSw3ICsyMDgsNyBAQAogCiAgICBBIHN0cmluZyBnaXZpbmcgdGhlIHNpdGUtc3BlY2lmaWMgZGlyZWN0b3J5IHByZWZpeCB3aGVyZSB0aGUgcGxhdGZvcm0tZGVwZW5kZW50CiAgICBQeXRob24gZmlsZXMgYXJlIGluc3RhbGxlZDsgYnkgZGVmYXVsdCwgdGhpcyBpcyBhbHNvIGBgJy91c3IvbG9jYWwnYGAuICBUaGlzIGNhbgotICAgYmUgc2V0IGF0IGJ1aWxkIHRpbWUgd2l0aCB0aGUgOm9wdGlvbjpgLS1leGVjLXByZWZpeGAgYXJndW1lbnQgdG8gdGhlCisgICBiZSBzZXQgYXQgYnVpbGQgdGltZSB3aXRoIHRoZSBgYC0tZXhlYy1wcmVmaXhgYCBhcmd1bWVudCB0byB0aGUKICAgIDpwcm9ncmFtOmBjb25maWd1cmVgIHNjcmlwdC4gIFNwZWNpZmljYWxseSwgYWxsIGNvbmZpZ3VyYXRpb24gZmlsZXMgKGUuZy4gdGhlCiAgICA6ZmlsZTpgcHljb25maWcuaGAgaGVhZGVyIGZpbGUpIGFyZSBpbnN0YWxsZWQgaW4gdGhlIGRpcmVjdG9yeSBgYGV4ZWNfcHJlZml4ICsKICAgICcvbGliL3B5dGhvbnZlcnNpb24vY29uZmlnJ2BgLCBhbmQgc2hhcmVkIGxpYnJhcnkgbW9kdWxlcyBhcmUgaW5zdGFsbGVkIGluCkBAIC0yMTksMTkgKzIyNiwyNSBAQAogCiAgICBFeGl0IGZyb20gUHl0aG9uLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSByYWlzaW5nIHRoZSA6ZXhjOmBTeXN0ZW1FeGl0YAogICAgZXhjZXB0aW9uLCBzbyBjbGVhbnVwIGFjdGlvbnMgc3BlY2lmaWVkIGJ5IGZpbmFsbHkgY2xhdXNlcyBvZiA6a2V5d29yZDpgdHJ5YAotICAgc3RhdGVtZW50cyBhcmUgaG9ub3JlZCwgYW5kIGl0IGlzIHBvc3NpYmxlIHRvIGludGVyY2VwdCB0aGUgZXhpdCBhdHRlbXB0IGF0IGFuCi0gICBvdXRlciBsZXZlbC4gIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqYXJnKiBjYW4gYmUgYW4gaW50ZWdlciBnaXZpbmcgdGhlIGV4aXQKLSAgIHN0YXR1cyAoZGVmYXVsdGluZyB0byB6ZXJvKSwgb3IgYW5vdGhlciB0eXBlIG9mIG9iamVjdC4gIElmIGl0IGlzIGFuIGludGVnZXIsCi0gICB6ZXJvIGlzIGNvbnNpZGVyZWQgInN1Y2Nlc3NmdWwgdGVybWluYXRpb24iIGFuZCBhbnkgbm9uemVybyB2YWx1ZSBpcyBjb25zaWRlcmVkCi0gICAiYWJub3JtYWwgdGVybWluYXRpb24iIGJ5IHNoZWxscyBhbmQgdGhlIGxpa2UuICBNb3N0IHN5c3RlbXMgcmVxdWlyZSBpdCB0byBiZSBpbgotICAgdGhlIHJhbmdlIDAtMTI3LCBhbmQgcHJvZHVjZSB1bmRlZmluZWQgcmVzdWx0cyBvdGhlcndpc2UuICBTb21lIHN5c3RlbXMgaGF2ZSBhCi0gICBjb252ZW50aW9uIGZvciBhc3NpZ25pbmcgc3BlY2lmaWMgbWVhbmluZ3MgdG8gc3BlY2lmaWMgZXhpdCBjb2RlcywgYnV0IHRoZXNlIGFyZQotICAgZ2VuZXJhbGx5IHVuZGVyZGV2ZWxvcGVkOyBVbml4IHByb2dyYW1zIGdlbmVyYWxseSB1c2UgMiBmb3IgY29tbWFuZCBsaW5lIHN5bnRheAotICAgZXJyb3JzIGFuZCAxIGZvciBhbGwgb3RoZXIga2luZCBvZiBlcnJvcnMuICBJZiBhbm90aGVyIHR5cGUgb2Ygb2JqZWN0IGlzIHBhc3NlZCwKLSAgIGBgTm9uZWBgIGlzIGVxdWl2YWxlbnQgdG8gcGFzc2luZyB6ZXJvLCBhbmQgYW55IG90aGVyIG9iamVjdCBpcyBwcmludGVkIHRvCi0gICBgYHN5cy5zdGRlcnJgYCBhbmQgcmVzdWx0cyBpbiBhbiBleGl0IGNvZGUgb2YgMS4gIEluIHBhcnRpY3VsYXIsCi0gICBgYHN5cy5leGl0KCJzb21lIGVycm9yIG1lc3NhZ2UiKWBgIGlzIGEgcXVpY2sgd2F5IHRvIGV4aXQgYSBwcm9ncmFtIHdoZW4gYW4KLSAgIGVycm9yIG9jY3Vycy4KKyAgIHN0YXRlbWVudHMgYXJlIGhvbm9yZWQsIGFuZCBpdCBpcyBwb3NzaWJsZSB0byBpbnRlcmNlcHQgdGhlIGV4aXQgYXR0ZW1wdCBhdAorICAgYW4gb3V0ZXIgbGV2ZWwuCisKKyAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqYXJnKiBjYW4gYmUgYW4gaW50ZWdlciBnaXZpbmcgdGhlIGV4aXQgc3RhdHVzCisgICAoZGVmYXVsdGluZyB0byB6ZXJvKSwgb3IgYW5vdGhlciB0eXBlIG9mIG9iamVjdC4gIElmIGl0IGlzIGFuIGludGVnZXIsIHplcm8KKyAgIGlzIGNvbnNpZGVyZWQgInN1Y2Nlc3NmdWwgdGVybWluYXRpb24iIGFuZCBhbnkgbm9uemVybyB2YWx1ZSBpcyBjb25zaWRlcmVkCisgICAiYWJub3JtYWwgdGVybWluYXRpb24iIGJ5IHNoZWxscyBhbmQgdGhlIGxpa2UuICBNb3N0IHN5c3RlbXMgcmVxdWlyZSBpdCB0byBiZQorICAgaW4gdGhlIHJhbmdlIDAtMTI3LCBhbmQgcHJvZHVjZSB1bmRlZmluZWQgcmVzdWx0cyBvdGhlcndpc2UuICBTb21lIHN5c3RlbXMKKyAgIGhhdmUgYSBjb252ZW50aW9uIGZvciBhc3NpZ25pbmcgc3BlY2lmaWMgbWVhbmluZ3MgdG8gc3BlY2lmaWMgZXhpdCBjb2RlcywgYnV0CisgICB0aGVzZSBhcmUgZ2VuZXJhbGx5IHVuZGVyZGV2ZWxvcGVkOyBVbml4IHByb2dyYW1zIGdlbmVyYWxseSB1c2UgMiBmb3IgY29tbWFuZAorICAgbGluZSBzeW50YXggZXJyb3JzIGFuZCAxIGZvciBhbGwgb3RoZXIga2luZCBvZiBlcnJvcnMuICBJZiBhbm90aGVyIHR5cGUgb2YKKyAgIG9iamVjdCBpcyBwYXNzZWQsIGBgTm9uZWBgIGlzIGVxdWl2YWxlbnQgdG8gcGFzc2luZyB6ZXJvLCBhbmQgYW55IG90aGVyCisgICBvYmplY3QgaXMgcHJpbnRlZCB0byA6ZGF0YTpgc3RkZXJyYCBhbmQgcmVzdWx0cyBpbiBhbiBleGl0IGNvZGUgb2YgMS4gIEluCisgICBwYXJ0aWN1bGFyLCBgYHN5cy5leGl0KCJzb21lIGVycm9yIG1lc3NhZ2UiKWBgIGlzIGEgcXVpY2sgd2F5IHRvIGV4aXQgYQorICAgcHJvZ3JhbSB3aGVuIGFuIGVycm9yIG9jY3Vycy4KKworICAgU2luY2UgOmZ1bmM6YGV4aXRgIHVsdGltYXRlbHkgIm9ubHkiIHJhaXNlcyBhbiBleGNlcHRpb24sIGl0IHdpbGwgb25seSBleGl0CisgICB0aGUgcHJvY2VzcyB3aGVuIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZCwgYW5kIHRoZSBleGNlcHRpb24gaXMgbm90CisgICBpbnRlcmNlcHRlZC4KIAogCiAuLiBkYXRhOjogZXhpdGZ1bmMKQEAgLTM1OCw2ICszNzEsMTggQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CiAKKy4uIGRhdGE6OiBmbG9hdF9yZXByX3N0eWxlCisKKyAgIEEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSA6ZnVuYzpgcmVwcmAgZnVuY3Rpb24gYmVoYXZlcyBmb3IKKyAgIGZsb2F0cy4gIElmIHRoZSBzdHJpbmcgaGFzIHZhbHVlIGBgJ3Nob3J0J2BgIHRoZW4gZm9yIGEgZmluaXRlCisgICBmbG9hdCBgYHhgYCwgYGByZXByKHgpYGAgYWltcyB0byBwcm9kdWNlIGEgc2hvcnQgc3RyaW5nIHdpdGggdGhlCisgICBwcm9wZXJ0eSB0aGF0IGBgZmxvYXQocmVwcih4KSkgPT0geGBgLiAgVGhpcyBpcyB0aGUgdXN1YWwgYmVoYXZpb3VyCisgICBpbiBQeXRob24gMi43IGFuZCBsYXRlci4gIE90aGVyd2lzZSwgYGBmbG9hdF9yZXByX3N0eWxlYGAgaGFzIHZhbHVlCisgICBgYCdsZWdhY3knYGAgYW5kIGBgcmVwcih4KWBgIGJlaGF2ZXMgaW4gdGhlIHNhbWUgd2F5IGFzIGl0IGRpZCBpbgorICAgdmVyc2lvbnMgb2YgUHl0aG9uIHByaW9yIHRvIDIuNy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKIAogLi4gZnVuY3Rpb246OiBnZXRjaGVja2ludGVydmFsKCkKIApAQCAtNDgyLDkgKzUwNywxNSBAQAogCiAuLiBmdW5jdGlvbjo6IGdldHdpbmRvd3N2ZXJzaW9uKCkKIAotICAgUmV0dXJuIGEgdHVwbGUgY29udGFpbmluZyBmaXZlIGNvbXBvbmVudHMsIGRlc2NyaWJpbmcgdGhlIFdpbmRvd3MgdmVyc2lvbgotICAgY3VycmVudGx5IHJ1bm5pbmcuICBUaGUgZWxlbWVudHMgYXJlICptYWpvciosICptaW5vciosICpidWlsZCosICpwbGF0Zm9ybSosIGFuZAotICAgKnRleHQqLiAgKnRleHQqIGNvbnRhaW5zIGEgc3RyaW5nIHdoaWxlIGFsbCBvdGhlciB2YWx1ZXMgYXJlIGludGVnZXJzLgorICAgUmV0dXJuIGEgbmFtZWQgdHVwbGUgZGVzY3JpYmluZyB0aGUgV2luZG93cyB2ZXJzaW9uCisgICBjdXJyZW50bHkgcnVubmluZy4gIFRoZSBuYW1lZCBlbGVtZW50cyBhcmUgKm1ham9yKiwgKm1pbm9yKiwKKyAgICpidWlsZCosICpwbGF0Zm9ybSosICpzZXJ2aWNlX3BhY2sqLCAqc2VydmljZV9wYWNrX21pbm9yKiwKKyAgICpzZXJ2aWNlX3BhY2tfbWFqb3IqLCAqc3VpdGVfbWFzayosIGFuZCAqcHJvZHVjdF90eXBlKi4KKyAgICpzZXJ2aWNlX3BhY2sqIGNvbnRhaW5zIGEgc3RyaW5nIHdoaWxlIGFsbCBvdGhlciB2YWx1ZXMgYXJlCisgICBpbnRlZ2Vycy4gVGhlIGNvbXBvbmVudHMgY2FuIGFsc28gYmUgYWNjZXNzZWQgYnkgbmFtZSwgc28KKyAgIGBgc3lzLmdldHdpbmRvd3N2ZXJzaW9uKClbMF1gYCBpcyBlcXVpdmFsZW50IHRvCisgICBgYHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpLm1ham9yYGAuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJpb3IKKyAgIHZlcnNpb25zLCBvbmx5IHRoZSBmaXJzdCA1IGVsZW1lbnRzIGFyZSByZXRyaWV2YWJsZSBieSBpbmRleGluZy4KIAogICAgKnBsYXRmb3JtKiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogCkBAIC01MDAsMTIgKzUzMSwzMSBAQAogICAgfCA6Y29uc3Q6YDMgKFZFUl9QTEFURk9STV9XSU4zMl9DRSlgICAgICAgfCBXaW5kb3dzIENFICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotICAgVGhpcyBmdW5jdGlvbiB3cmFwcyB0aGUgV2luMzIgOmNmdW5jOmBHZXRWZXJzaW9uRXhgIGZ1bmN0aW9uOyBzZWUgdGhlIE1pY3Jvc29mdAotICAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBmaWVsZHMuCisgICAqcHJvZHVjdF90eXBlKiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgQ29uc3RhbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgMSAoVkVSX05UX1dPUktTVEFUSU9OKWAgICAgICAgfCBUaGUgc3lzdGVtIGlzIGEgd29ya3N0YXRpb24uICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YDIgKFZFUl9OVF9ET01BSU5fQ09OVFJPTExFUilgIHwgVGhlIHN5c3RlbSBpcyBhIGRvbWFpbiAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb250cm9sbGVyLiAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YDMgKFZFUl9OVF9TRVJWRVIpYCAgICAgICAgICAgIHwgVGhlIHN5c3RlbSBpcyBhIHNlcnZlciwgYnV0IG5vdCB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhIGRvbWFpbiBjb250cm9sbGVyLiAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKKyAgIFRoaXMgZnVuY3Rpb24gd3JhcHMgdGhlIFdpbjMyIDpjZnVuYzpgR2V0VmVyc2lvbkV4YCBmdW5jdGlvbjsgc2VlIHRoZQorICAgTWljcm9zb2Z0IGRvY3VtZW50YXRpb24gb24gOmNmdW5jOmBPU1ZFUlNJT05JTkZPRVhgIGZvciBtb3JlIGluZm9ybWF0aW9uCisgICBhYm91dCB0aGVzZSBmaWVsZHMuCiAKICAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4zCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgQ2hhbmdlZCB0byBhIG5hbWVkIHR1cGxlIGFuZCBhZGRlZCAqc2VydmljZV9wYWNrX21pbm9yKiwKKyAgICAgICpzZXJ2aWNlX3BhY2tfbWFqb3IqLCAqc3VpdGVfbWFzayosIGFuZCAqcHJvZHVjdF90eXBlKi4KIAogCiAuLiBkYXRhOjogaGV4dmVyc2lvbgpAQCAtNTI5LDYgKzU3OSwyNSBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMS41LjIKIAogCisuLiBkYXRhOjogbG9uZ19pbmZvCisKKyAgIEEgc3RydWN0IHNlcXVlbmNlIHRoYXQgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgUHl0aG9uJ3MKKyAgIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGludGVnZXJzLiAgVGhlIGF0dHJpYnV0ZXMgYXJlIHJlYWQgb25seS4KKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYXR0cmlidXRlICAgICAgICAgICAgICAgfCBleHBsYW5hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCA6Y29uc3Q6YGJpdHNfcGVyX2RpZ2l0YCB8IG51bWJlciBvZiBiaXRzIGhlbGQgaW4gZWFjaCBkaWdpdC4gIFB5dGhvbiAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbnRlZ2VycyBhcmUgc3RvcmVkIGludGVybmFsbHkgaW4gYmFzZSAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGAyKipsb25nX2luZm8uYml0c19wZXJfZGlnaXRgYCAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBzaXplb2ZfZGlnaXRgICAgfCBzaXplIGluIGJ5dGVzIG9mIHRoZSBDIHR5cGUgdXNlZCB0byAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwcmVzZW50IGEgZGlnaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogLi4gZGF0YTo6IGxhc3RfdHlwZQogICAgICAgICAgIGxhc3RfdmFsdWUKICAgICAgICAgICBsYXN0X3RyYWNlYmFjawpAQCAtNjY2LDcgKzczNSw3IEBACiAKICAgIEEgc3RyaW5nIGdpdmluZyB0aGUgc2l0ZS1zcGVjaWZpYyBkaXJlY3RvcnkgcHJlZml4IHdoZXJlIHRoZSBwbGF0Zm9ybQogICAgaW5kZXBlbmRlbnQgUHl0aG9uIGZpbGVzIGFyZSBpbnN0YWxsZWQ7IGJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIHN0cmluZwotICAgYGAnL3Vzci9sb2NhbCdgYC4gIFRoaXMgY2FuIGJlIHNldCBhdCBidWlsZCB0aW1lIHdpdGggdGhlIDpvcHRpb246YC0tcHJlZml4YAorICAgYGAnL3Vzci9sb2NhbCdgYC4gIFRoaXMgY2FuIGJlIHNldCBhdCBidWlsZCB0aW1lIHdpdGggdGhlIGBgLS1wcmVmaXhgYAogICAgYXJndW1lbnQgdG8gdGhlIDpwcm9ncmFtOmBjb25maWd1cmVgIHNjcmlwdC4gIFRoZSBtYWluIGNvbGxlY3Rpb24gb2YgUHl0aG9uCiAgICBsaWJyYXJ5IG1vZHVsZXMgaXMgaW5zdGFsbGVkIGluIHRoZSBkaXJlY3RvcnkgYGBwcmVmaXggKyAnL2xpYi9weXRob252ZXJzaW9uJ2BgCiAgICB3aGlsZSB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaGVhZGVyIGZpbGVzIChhbGwgZXhjZXB0IDpmaWxlOmBweWNvbmZpZy5oYCkgYXJlCkBAIC04MTAsMTQgKzg3OSwxNyBAQAogICAgICAgc3BlY2lmaWVzIHRoZSBsb2NhbCB0cmFjZSBmdW5jdGlvbi4KIAogICAgYGAnbGluZSdgYAotICAgICAgVGhlIGludGVycHJldGVyIGlzIGFib3V0IHRvIGV4ZWN1dGUgYSBuZXcgbGluZSBvZiBjb2RlIChzb21ldGltZXMgbXVsdGlwbGUKLSAgICAgIGxpbmUgZXZlbnRzIG9uIG9uZSBsaW5lIGV4aXN0KS4gIFRoZSBsb2NhbCB0cmFjZSBmdW5jdGlvbiBpcyBjYWxsZWQ7ICphcmcqCi0gICAgICBpcyBgYE5vbmVgYDsgdGhlIHJldHVybiB2YWx1ZSBzcGVjaWZpZXMgdGhlIG5ldyBsb2NhbCB0cmFjZSBmdW5jdGlvbi4KKyAgICAgIFRoZSBpbnRlcnByZXRlciBpcyBhYm91dCB0byBleGVjdXRlIGEgbmV3IGxpbmUgb2YgY29kZSBvciByZS1leGVjdXRlIHRoZQorICAgICAgY29uZGl0aW9uIG9mIGEgbG9vcC4gIFRoZSBsb2NhbCB0cmFjZSBmdW5jdGlvbiBpcyBjYWxsZWQ7ICphcmcqIGlzCisgICAgICBgYE5vbmVgYDsgdGhlIHJldHVybiB2YWx1ZSBzcGVjaWZpZXMgdGhlIG5ldyBsb2NhbCB0cmFjZSBmdW5jdGlvbi4gIFNlZQorICAgICAgOmZpbGU6YE9iamVjdHMvbG5vdGFiX25vdGVzLnR4dGAgZm9yIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgaG93IHRoaXMKKyAgICAgIHdvcmtzLgogCiAgICBgYCdyZXR1cm4nYGAKICAgICAgIEEgZnVuY3Rpb24gKG9yIG90aGVyIGNvZGUgYmxvY2spIGlzIGFib3V0IHRvIHJldHVybi4gIFRoZSBsb2NhbCB0cmFjZQotICAgICAgZnVuY3Rpb24gaXMgY2FsbGVkOyAqYXJnKiBpcyB0aGUgdmFsdWUgdGhhdCB3aWxsIGJlIHJldHVybmVkLiAgVGhlIHRyYWNlCi0gICAgICBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLgorICAgICAgZnVuY3Rpb24gaXMgY2FsbGVkOyAqYXJnKiBpcyB0aGUgdmFsdWUgdGhhdCB3aWxsIGJlIHJldHVybmVkLCBvciBgYE5vbmVgYAorICAgICAgaWYgdGhlIGV2ZW50IGlzIGNhdXNlZCBieSBhbiBleGNlcHRpb24gYmVpbmcgcmFpc2VkLiAgVGhlIHRyYWNlIGZ1bmN0aW9uJ3MKKyAgICAgIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLgogCiAgICBgYCdleGNlcHRpb24nYGAKICAgICAgIEFuIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQuICBUaGUgbG9jYWwgdHJhY2UgZnVuY3Rpb24gaXMgY2FsbGVkOyAqYXJnKiBpcyBhCkBAIC04MjksMTAgKzkwMSwxMCBAQAogICAgICAgYSBidWlsdC1pbi4gICphcmcqIGlzIHRoZSBDIGZ1bmN0aW9uIG9iamVjdC4KIAogICAgYGAnY19yZXR1cm4nYGAKLSAgICAgIEEgQyBmdW5jdGlvbiBoYXMgcmV0dXJuZWQuICphcmcqIGlzIGBgTm9uZWBgLgorICAgICAgQSBDIGZ1bmN0aW9uIGhhcyByZXR1cm5lZC4gKmFyZyogaXMgdGhlIEMgZnVuY3Rpb24gb2JqZWN0LgogCiAgICBgYCdjX2V4Y2VwdGlvbidgYAotICAgICAgQSBDIGZ1bmN0aW9uIGhhcyB0aHJvd24gYW4gZXhjZXB0aW9uLiAgKmFyZyogaXMgYGBOb25lYGAuCisgICAgICBBIEMgZnVuY3Rpb24gaGFzIHJhaXNlZCBhbiBleGNlcHRpb24uICAqYXJnKiBpcyB0aGUgQyBmdW5jdGlvbiBvYmplY3QuCiAKICAgIE5vdGUgdGhhdCBhcyBhbiBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCBkb3duIHRoZSBjaGFpbiBvZiBjYWxsZXJzLCBhbgogICAgYGAnZXhjZXB0aW9uJ2BgIGV2ZW50IGlzIGdlbmVyYXRlZCBhdCBlYWNoIGxldmVsLgpAQCAtODUxLDcgKzkyMyw3IEBACiAKICAgIEFjdGl2YXRlIGR1bXBpbmcgb2YgVk0gbWVhc3VyZW1lbnRzIHVzaW5nIHRoZSBQZW50aXVtIHRpbWVzdGFtcCBjb3VudGVyLCBpZgogICAgKm9uX2ZsYWcqIGlzIHRydWUuIERlYWN0aXZhdGUgdGhlc2UgZHVtcHMgaWYgKm9uX2ZsYWcqIGlzIG9mZi4gVGhlIGZ1bmN0aW9uIGlzCi0gICBhdmFpbGFibGUgb25seSBpZiBQeXRob24gd2FzIGNvbXBpbGVkIHdpdGggOm9wdGlvbjpgLS13aXRoLXRzY2AuIFRvIHVuZGVyc3RhbmQKKyAgIGF2YWlsYWJsZSBvbmx5IGlmIFB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBgYC0td2l0aC10c2NgYC4gVG8gdW5kZXJzdGFuZAogICAgdGhlIG91dHB1dCBvZiB0aGlzIGR1bXAsIHJlYWQgOmZpbGU6YFB5dGhvbi9jZXZhbC5jYCBpbiB0aGUgUHl0aG9uIHNvdXJjZXMuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNApAQCAtOTI5LDkgKzEwMDEsMTMgQEAKICAgICptaWNybyosICpyZWxlYXNlbGV2ZWwqLCBhbmQgKnNlcmlhbCouICBBbGwgdmFsdWVzIGV4Y2VwdCAqcmVsZWFzZWxldmVsKiBhcmUKICAgIGludGVnZXJzOyB0aGUgcmVsZWFzZSBsZXZlbCBpcyBgYCdhbHBoYSdgYCwgYGAnYmV0YSdgYCwgYGAnY2FuZGlkYXRlJ2BgLCBvcgogICAgYGAnZmluYWwnYGAuICBUaGUgYGB2ZXJzaW9uX2luZm9gYCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBQeXRob24gdmVyc2lvbiAyLjAKLSAgIGlzIGBgKDIsIDAsIDAsICdmaW5hbCcsIDApYGAuCisgICBpcyBgYCgyLCAwLCAwLCAnZmluYWwnLCAwKWBgLiAgVGhlIGNvbXBvbmVudHMgY2FuIGFsc28gYmUgYWNjZXNzZWQgYnkgbmFtZSwKKyAgIHNvIGBgc3lzLnZlcnNpb25faW5mb1swXWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBzeXMudmVyc2lvbl9pbmZvLm1ham9yYGAKKyAgIGFuZCBzbyBvbi4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4wCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgQWRkZWQgbmFtZWQgY29tcG9uZW50IGF0dHJpYnV0ZXMKIAogCiAuLiBkYXRhOjogd2Fybm9wdGlvbnMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YWFlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CkBAIC0wLDAgKzEsMjE4IEBACis6bW9kOmBzeXNjb25maWdgIC0tLSBQcm92aWRlIGFjY2VzcyB0byBQeXRob24ncyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHN5c2NvbmZpZworICAgOnN5bm9wc2lzOiBQeXRob24ncyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCisuLiBtb2R1bGVhdXRob3I6OiBUYXJlayBaaWFkZSA8dGFyZWtAemlhZGUub3JnPgorLi4gc2VjdGlvbmF1dGhvcjo6IFRhcmVrIFppYWRlIDx0YXJla0B6aWFkZS5vcmc+CisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKy4uIGluZGV4OjoKKyAgIHNpbmdsZTogY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorCitUaGUgOm1vZDpgc3lzY29uZmlnYCBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIFB5dGhvbidzIGNvbmZpZ3VyYXRpb24KK2luZm9ybWF0aW9uIGxpa2UgdGhlIGxpc3Qgb2YgaW5zdGFsbGF0aW9uIHBhdGhzIGFuZCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKK3JlbGV2YW50IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKworQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgUHl0aG9uIGRpc3RyaWJ1dGlvbiBjb250YWlucyBhIDpmaWxlOmBNYWtlZmlsZWAgYW5kIGEgOmZpbGU6YHB5Y29uZmlnLmhgCitoZWFkZXIgZmlsZSB0aGF0IGFyZSBuZWNlc3NhcnkgdG8gYnVpbGQgYm90aCB0aGUgUHl0aG9uIGJpbmFyeSBpdHNlbGYgYW5kCit0aGlyZC1wYXJ0eSBDIGV4dGVuc2lvbnMgY29tcGlsZWQgdXNpbmcgOm1vZDpgZGlzdHV0aWxzYC4KKworOm1vZDpgc3lzY29uZmlnYCBwdXRzIGFsbCB2YXJpYWJsZXMgZm91bmQgaW4gdGhlc2UgZmlsZXMgaW4gYSBkaWN0aW9uYXJ5IHRoYXQKK2NhbiBiZSBhY2Nlc3NlZCB1c2luZyA6ZnVuYzpgZ2V0X2NvbmZpZ192YXJzYCBvciA6ZnVuYzpgZ2V0X2NvbmZpZ192YXJgLgorCitOb3RpY2UgdGhhdCBvbiBXaW5kb3dzLCBpdCdzIGEgbXVjaCBzbWFsbGVyIHNldC4KKworLi4gZnVuY3Rpb246OiBnZXRfY29uZmlnX3ZhcnMoXCphcmdzKQorCisgICBXaXRoIG5vIGFyZ3VtZW50cywgcmV0dXJuIGEgZGljdGlvbmFyeSBvZiBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAgIHJlbGV2YW50IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKworICAgV2l0aCBhcmd1bWVudHMsIHJldHVybiBhIGxpc3Qgb2YgdmFsdWVzIHRoYXQgcmVzdWx0IGZyb20gbG9va2luZyB1cCBlYWNoCisgICBhcmd1bWVudCBpbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBkaWN0aW9uYXJ5LgorCisgICBGb3IgZWFjaCBhcmd1bWVudCwgaWYgdGhlIHZhbHVlIGlzIG5vdCBmb3VuZCwgcmV0dXJuIGBgTm9uZWBgLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2NvbmZpZ192YXIobmFtZSkKKworICAgUmV0dXJuIHRoZSB2YWx1ZSBvZiBhIHNpbmdsZSB2YXJpYWJsZSAqbmFtZSouIEVxdWl2YWxlbnQgdG8KKyAgIGBgZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpYGAuCisKKyAgIElmICpuYW1lKiBpcyBub3QgZm91bmQsIHJldHVybiBgYE5vbmVgYC4KKworRXhhbXBsZSBvZiB1c2FnZTo6CisKKyAgID4+PiBpbXBvcnQgc3lzY29uZmlnCisgICA+Pj4gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQeV9FTkFCTEVfU0hBUkVEJykKKyAgIDAKKyAgID4+PiBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xJQkRJUicpCisgICAnL3Vzci9sb2NhbC9saWInCisgICA+Pj4gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnQVInLCAnQ1hYJykKKyAgIFsnYXInLCAnZysrJ10KKworCitJbnN0YWxsYXRpb24gcGF0aHMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRob24gdXNlcyBhbiBpbnN0YWxsYXRpb24gc2NoZW1lIHRoYXQgZGlmZmVycyBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIGFuZCBvbgordGhlIGluc3RhbGxhdGlvbiBvcHRpb25zLiAgVGhlc2Ugc2NoZW1lcyBhcmUgc3RvcmVkIGluIDptb2Q6YHN5c2NvbmZpZ2AgdW5kZXIKK3VuaXF1ZSBpZGVudGlmaWVycyBiYXNlZCBvbiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgOmNvbnN0OmBvcy5uYW1lYC4KKworRXZlcnkgbmV3IGNvbXBvbmVudCB0aGF0IGlzIGluc3RhbGxlZCB1c2luZyA6bW9kOmBkaXN0dXRpbHNgIG9yIGEKK0Rpc3R1dGlscy1iYXNlZCBzeXN0ZW0gd2lsbCBmb2xsb3cgdGhlIHNhbWUgc2NoZW1lIHRvIGNvcHkgaXRzIGZpbGUgaW4gdGhlIHJpZ2h0CitwbGFjZXMuCisKK1B5dGhvbiBjdXJyZW50bHkgc3VwcG9ydHMgc2V2ZW4gc2NoZW1lczoKKworLSAqcG9zaXhfcHJlZml4Kjogc2NoZW1lIGZvciBQb3NpeCBwbGF0Zm9ybXMgbGlrZSBMaW51eCBvciBNYWMgT1MgWC4gIFRoaXMgaXMKKyAgdGhlIGRlZmF1bHQgc2NoZW1lIHVzZWQgd2hlbiBQeXRob24gb3IgYSBjb21wb25lbnQgaXMgaW5zdGFsbGVkLgorLSAqcG9zaXhfaG9tZSo6IHNjaGVtZSBmb3IgUG9zaXggcGxhdGZvcm1zIHVzZWQgd2hlbiBhICpob21lKiBvcHRpb24gaXMgdXNlZAorICB1cG9uIGluc3RhbGxhdGlvbi4gIFRoaXMgc2NoZW1lIGlzIHVzZWQgd2hlbiBhIGNvbXBvbmVudCBpcyBpbnN0YWxsZWQgdGhyb3VnaAorICBEaXN0dXRpbHMgd2l0aCBhIHNwZWNpZmljIGhvbWUgcHJlZml4LgorLSAqcG9zaXhfdXNlcio6IHNjaGVtZSBmb3IgUG9zaXggcGxhdGZvcm1zIHVzZWQgd2hlbiBhIGNvbXBvbmVudCBpcyBpbnN0YWxsZWQKKyAgdGhyb3VnaCBEaXN0dXRpbHMgYW5kIHRoZSAqdXNlciogb3B0aW9uIGlzIHVzZWQuICBUaGlzIHNjaGVtZSBkZWZpbmVzIHBhdGhzCisgIGxvY2F0ZWQgdW5kZXIgdGhlIHVzZXIgaG9tZSBkaXJlY3RvcnkuCistICpudCo6IHNjaGVtZSBmb3IgTlQgcGxhdGZvcm1zIGxpa2UgV2luZG93cy4KKy0gKm50X3VzZXIqOiBzY2hlbWUgZm9yIE5UIHBsYXRmb3Jtcywgd2hlbiB0aGUgKnVzZXIqIG9wdGlvbiBpcyB1c2VkLgorLSAqb3MyKjogc2NoZW1lIGZvciBPUy8yIHBsYXRmb3Jtcy4KKy0gKm9zMl9ob21lKjogc2NoZW1lIGZvciBPUy8yIHBhdGZvcm1zLCB3aGVuIHRoZSAqdXNlciogb3B0aW9uIGlzIHVzZWQuCisKK0VhY2ggc2NoZW1lIGlzIGl0c2VsZiBjb21wb3NlZCBvZiBhIHNlcmllcyBvZiBwYXRocyBhbmQgZWFjaCBwYXRoIGhhcyBhIHVuaXF1ZQoraWRlbnRpZmllci4gIFB5dGhvbiBjdXJyZW50bHkgdXNlcyBlaWdodCBwYXRoczoKKworLSAqc3RkbGliKjogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHN0YW5kYXJkIFB5dGhvbiBsaWJyYXJ5IGZpbGVzIHRoYXQgYXJlIG5vdAorICBwbGF0Zm9ybS1zcGVjaWZpYy4KKy0gKnBsYXRzdGRsaWIqOiBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc3RhbmRhcmQgUHl0aG9uIGxpYnJhcnkgZmlsZXMgdGhhdCBhcmUKKyAgcGxhdGZvcm0tc3BlY2lmaWMuCistICpwbGF0bGliKjogZGlyZWN0b3J5IGZvciBzaXRlLXNwZWNpZmljLCBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKy0gKnB1cmVsaWIqOiBkaXJlY3RvcnkgZm9yIHNpdGUtc3BlY2lmaWMsIG5vbi1wbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKy0gKmluY2x1ZGUqOiBkaXJlY3RvcnkgZm9yIG5vbi1wbGF0Zm9ybS1zcGVjaWZpYyBoZWFkZXIgZmlsZXMuCistICpwbGF0aW5jbHVkZSo6IGRpcmVjdG9yeSBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgaGVhZGVyIGZpbGVzLgorLSAqc2NyaXB0cyo6IGRpcmVjdG9yeSBmb3Igc2NyaXB0IGZpbGVzLgorLSAqZGF0YSo6IGRpcmVjdG9yeSBmb3IgZGF0YSBmaWxlcy4KKworOm1vZDpgc3lzY29uZmlnYCBwcm92aWRlcyBzb21lIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgdGhlc2UgcGF0aHMuCisKKy4uIGZ1bmN0aW9uOjogZ2V0X3NjaGVtZV9uYW1lcygpCisKKyAgIFJldHVybiBhIHR1cGxlIGNvbnRhaW5pbmcgYWxsIHNjaGVtZXMgY3VycmVudGx5IHN1cHBvcnRlZCBpbgorICAgOm1vZDpgc3lzY29uZmlnYC4KKworCisuLiBmdW5jdGlvbjo6IGdldF9wYXRoX25hbWVzKCkKKworICAgUmV0dXJuIGEgdHVwbGUgY29udGFpbmluZyBhbGwgcGF0aCBuYW1lcyBjdXJyZW50bHkgc3VwcG9ydGVkIGluCisgICA6bW9kOmBzeXNjb25maWdgLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X3BhdGgobmFtZSwgW3NjaGVtZSwgW3ZhcnMsIFtleHBhbmRdXV0pCisKKyAgIFJldHVybiBhbiBpbnN0YWxsYXRpb24gcGF0aCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXRoICpuYW1lKiwgZnJvbSB0aGUKKyAgIGluc3RhbGwgc2NoZW1lIG5hbWVkICpzY2hlbWUqLgorCisgICAqbmFtZSogaGFzIHRvIGJlIGEgdmFsdWUgZnJvbSB0aGUgbGlzdCByZXR1cm5lZCBieSA6ZnVuYzpgZ2V0X3BhdGhfbmFtZXNgLgorCisgICA6bW9kOmBzeXNjb25maWdgIHN0b3JlcyBpbnN0YWxsYXRpb24gcGF0aHMgY29ycmVzcG9uZGluZyB0byBlYWNoIHBhdGggbmFtZSwKKyAgIGZvciBlYWNoIHBsYXRmb3JtLCB3aXRoIHZhcmlhYmxlcyB0byBiZSBleHBhbmRlZC4gIEZvciBpbnN0YW5jZSB0aGUgKnN0ZGxpYioKKyAgIHBhdGggZm9yIHRoZSAqbnQqIHNjaGVtZSBpczogYGB7YmFzZX0vTGliYGAuCisKKyAgIDpmdW5jOmBnZXRfcGF0aGAgd2lsbCB1c2UgdGhlIHZhcmlhYmxlcyByZXR1cm5lZCBieSA6ZnVuYzpgZ2V0X2NvbmZpZ192YXJzYAorICAgdG8gZXhwYW5kIHRoZSBwYXRoLiAgQWxsIHZhcmlhYmxlcyBoYXZlIGRlZmF1bHQgdmFsdWVzIGZvciBlYWNoIHBsYXRmb3JtIHNvCisgICBvbmUgbWF5IGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQgZ2V0IHRoZSBkZWZhdWx0IHZhbHVlLgorCisgICBJZiAqc2NoZW1lKiBpcyBwcm92aWRlZCwgaXQgbXVzdCBiZSBhIHZhbHVlIGZyb20gdGhlIGxpc3QgcmV0dXJuZWQgYnkKKyAgIDpmdW5jOmBnZXRfcGF0aF9uYW1lc2AuICBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IHNjaGVtZSBmb3IgdGhlIGN1cnJlbnQKKyAgIHBsYXRmb3JtIGlzIHVzZWQuCisKKyAgIElmICp2YXJzKiBpcyBwcm92aWRlZCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgb2YgdmFyaWFibGVzIHRoYXQgd2lsbCB1cGRhdGUKKyAgIHRoZSBkaWN0aW9uYXJ5IHJldHVybiBieSA6ZnVuYzpgZ2V0X2NvbmZpZ192YXJzYC4KKworICAgSWYgKmV4cGFuZCogaXMgc2V0IHRvIGBgRmFsc2VgYCwgdGhlIHBhdGggd2lsbCBub3QgYmUgZXhwYW5kZWQgdXNpbmcgdGhlCisgICB2YXJpYWJsZXMuCisKKyAgIElmICpuYW1lKiBpcyBub3QgZm91bmQsIHJldHVybiBgYE5vbmVgYC4KKworCisuLiBmdW5jdGlvbjo6IGdldF9wYXRocyhbc2NoZW1lLCBbdmFycywgW2V4cGFuZF1dXSkKKworICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGFsbCBpbnN0YWxsYXRpb24gcGF0aHMgY29ycmVzcG9uZGluZyB0byBhbgorICAgaW5zdGFsbGF0aW9uIHNjaGVtZS4gU2VlIDpmdW5jOmBnZXRfcGF0aGAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgIElmICpzY2hlbWUqIGlzIG5vdCBwcm92aWRlZCwgd2lsbCB1c2UgdGhlIGRlZmF1bHQgc2NoZW1lIGZvciB0aGUgY3VycmVudAorICAgcGxhdGZvcm0uCisKKyAgIElmICp2YXJzKiBpcyBwcm92aWRlZCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgb2YgdmFyaWFibGVzIHRoYXQgd2lsbAorICAgdXBkYXRlIHRoZSBkaWN0aW9uYXJ5IHVzZWQgdG8gZXhwYW5kIHRoZSBwYXRocy4KKworICAgSWYgKmV4cGFuZCogaXMgc2V0IHRvIEZhbHNlLCB0aGUgcGF0aHMgd2lsbCBub3QgYmUgZXhwYW5kZWQuCisKKyAgIElmICpzY2hlbWUqIGlzIG5vdCBhbiBleGlzdGluZyBzY2hlbWUsIDpmdW5jOmBnZXRfcGF0aHNgIHdpbGwgcmFpc2UgYQorICAgOmV4YzpgS2V5RXJyb3JgLgorCisKK090aGVyIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tCisKKy4uIGZ1bmN0aW9uOjogZ2V0X3B5dGhvbl92ZXJzaW9uKCkKKworICAgUmV0dXJuIHRoZSBgYE1BSk9SLk1JTk9SYGAgUHl0aG9uIHZlcnNpb24gbnVtYmVyIGFzIGEgc3RyaW5nLiAgU2ltaWxhciB0bworICAgYGBzeXMudmVyc2lvbls6M11gYC4KKworCisuLiBmdW5jdGlvbjo6IGdldF9wbGF0Zm9ybSgpCisKKyAgIFJldHVybiBhIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisKKyAgIFRoaXMgaXMgdXNlZCBtYWlubHkgdG8gZGlzdGluZ3Vpc2ggcGxhdGZvcm0tc3BlY2lmaWMgYnVpbGQgZGlyZWN0b3JpZXMgYW5kCisgICBwbGF0Zm9ybS1zcGVjaWZpYyBidWlsdCBkaXN0cmlidXRpb25zLiAgVHlwaWNhbGx5IGluY2x1ZGVzIHRoZSBPUyBuYW1lIGFuZAorICAgdmVyc2lvbiBhbmQgdGhlIGFyY2hpdGVjdHVyZSAoYXMgc3VwcGxpZWQgYnkgOmZ1bmM6YG9zLnVuYW1lYCksIGFsdGhvdWdoIHRoZQorICAgZXhhY3QgaW5mb3JtYXRpb24gaW5jbHVkZWQgZGVwZW5kcyBvbiB0aGUgT1M7IGUuZy4gZm9yIElSSVggdGhlIGFyY2hpdGVjdHVyZQorICAgaXNuJ3QgcGFydGljdWxhcmx5IGltcG9ydGFudCAoSVJJWCBvbmx5IHJ1bnMgb24gU0dJIGhhcmR3YXJlKSwgYnV0IGZvciBMaW51eAorICAgdGhlIGtlcm5lbCB2ZXJzaW9uIGlzbid0IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQuCisKKyAgIEV4YW1wbGVzIG9mIHJldHVybmVkIHZhbHVlczoKKworICAgLSBsaW51eC1pNTg2CisgICAtIGxpbnV4LWFscGhhICg/KQorICAgLSBzb2xhcmlzLTIuNi1zdW40dQorICAgLSBpcml4LTUuMworICAgLSBpcml4NjQtNi4yCisKKyAgIFdpbmRvd3Mgd2lsbCByZXR1cm4gb25lIG9mOgorCisgICAtIHdpbi1hbWQ2NCAoNjRiaXQgV2luZG93cyBvbiBBTUQ2NCAoYWthIHg4Nl82NCwgSW50ZWw2NCwgRU02NFQsIGV0YykKKyAgIC0gd2luLWlhNjQgKDY0Yml0IFdpbmRvd3Mgb24gSXRhbml1bSkKKyAgIC0gd2luMzIgKGFsbCBvdGhlcnMgLSBzcGVjaWZpY2FsbHksIHN5cy5wbGF0Zm9ybSBpcyByZXR1cm5lZCkKKworICAgTWFjIE9TIFggY2FuIHJldHVybjoKKworICAgLSBtYWNvc3gtMTAuNi1wcGMKKyAgIC0gbWFjb3N4LTEwLjQtcHBjNjQKKyAgIC0gbWFjb3N4LTEwLjMtaTM4NgorICAgLSBtYWNvc3gtMTAuNC1mYXQKKworICAgRm9yIG90aGVyIG5vbi1QT1NJWCBwbGF0Zm9ybXMsIGN1cnJlbnRseSBqdXN0IHJldHVybnMgOmRhdGE6YHN5cy5wbGF0Zm9ybWAuCisKKworLi4gZnVuY3Rpb246OiBpc19weXRob25fYnVpbGQoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGN1cnJlbnQgUHl0aG9uIGluc3RhbGxhdGlvbiB3YXMgYnVpbHQgZnJvbSBzb3VyY2UuCisKKworLi4gZnVuY3Rpb246OiBwYXJzZV9jb25maWdfaChmcFssIHZhcnNdKQorCisgICBQYXJzZSBhIDpmaWxlOmBjb25maWcuaGBcLXN0eWxlIGZpbGUuCisKKyAgICpmcCogaXMgYSBmaWxlLWxpa2Ugb2JqZWN0IHBvaW50aW5nIHRvIHRoZSA6ZmlsZTpgY29uZmlnLmhgXC1saWtlIGZpbGUuCisKKyAgIEEgZGljdGlvbmFyeSBjb250YWluaW5nIG5hbWUvdmFsdWUgcGFpcnMgaXMgcmV0dXJuZWQuICBJZiBhbiBvcHRpb25hbAorICAgZGljdGlvbmFyeSBpcyBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCwgaXQgaXMgdXNlZCBpbnN0ZWFkIG9mIGEgbmV3CisgICBkaWN0aW9uYXJ5LCBhbmQgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZXMgcmVhZCBpbiB0aGUgZmlsZS4KKworCisuLiBmdW5jdGlvbjo6IGdldF9jb25maWdfaF9maWxlbmFtZSgpCisKKyAgIFJldHVybiB0aGUgcGF0aCBvZiA6ZmlsZTpgcHljb25maWcuaGAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeXNsb2cucnN0IGIvRG9jL2xpYnJhcnkvc3lzbG9nLnJzdAppbmRleCA1NDlmMjZiLi43YjFhMzQwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeXNsb2cucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5c2xvZy5yc3QKQEAgLTEsNCArMSwzIEBACi0KIDptb2Q6YHN5c2xvZ2AgLS0tIFVuaXggc3lzbG9nIGxpYnJhcnkgcm91dGluZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTEsNDIgKzEwLDU4IEBACiBSZWZlciB0byB0aGUgVW5peCBtYW51YWwgcGFnZXMgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGBgc3lzbG9nYGAKIGZhY2lsaXR5LgogCitUaGlzIG1vZHVsZSB3cmFwcyB0aGUgc3lzdGVtIGBgc3lzbG9nYGAgZmFtaWx5IG9mIHJvdXRpbmVzLiAgQSBwdXJlIFB5dGhvbgorbGlicmFyeSB0aGF0IGNhbiBzcGVhayB0byBhIHN5c2xvZyBzZXJ2ZXIgaXMgYXZhaWxhYmxlIGluIHRoZQorOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AgbW9kdWxlIGFzIDpjbGFzczpgU3lzTG9nSGFuZGxlcmAuCisKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAogCiAuLiBmdW5jdGlvbjo6IHN5c2xvZyhbcHJpb3JpdHksXSBtZXNzYWdlKQogCi0gICBTZW5kIHRoZSBzdHJpbmcgKm1lc3NhZ2UqIHRvIHRoZSBzeXN0ZW0gbG9nZ2VyLiAgQSB0cmFpbGluZyBuZXdsaW5lIGlzIGFkZGVkIGlmCi0gICBuZWNlc3NhcnkuICBFYWNoIG1lc3NhZ2UgaXMgdGFnZ2VkIHdpdGggYSBwcmlvcml0eSBjb21wb3NlZCBvZiBhICpmYWNpbGl0eSogYW5kCi0gICBhICpsZXZlbCouICBUaGUgb3B0aW9uYWwgKnByaW9yaXR5KiBhcmd1bWVudCwgd2hpY2ggZGVmYXVsdHMgdG8KLSAgIDpjb25zdDpgTE9HX0lORk9gLCBkZXRlcm1pbmVzIHRoZSBtZXNzYWdlIHByaW9yaXR5LiAgSWYgdGhlIGZhY2lsaXR5IGlzIG5vdAotICAgZW5jb2RlZCBpbiAqcHJpb3JpdHkqIHVzaW5nIGxvZ2ljYWwtb3IgKGBgTE9HX0lORk8gfCBMT0dfVVNFUmBgKSwgdGhlIHZhbHVlCi0gICBnaXZlbiBpbiB0aGUgOmZ1bmM6YG9wZW5sb2dgIGNhbGwgaXMgdXNlZC4KKyAgIFNlbmQgdGhlIHN0cmluZyAqbWVzc2FnZSogdG8gdGhlIHN5c3RlbSBsb2dnZXIuICBBIHRyYWlsaW5nIG5ld2xpbmUgaXMgYWRkZWQKKyAgIGlmIG5lY2Vzc2FyeS4gIEVhY2ggbWVzc2FnZSBpcyB0YWdnZWQgd2l0aCBhIHByaW9yaXR5IGNvbXBvc2VkIG9mIGEKKyAgICpmYWNpbGl0eSogYW5kIGEgKmxldmVsKi4gIFRoZSBvcHRpb25hbCAqcHJpb3JpdHkqIGFyZ3VtZW50LCB3aGljaCBkZWZhdWx0cworICAgdG8gOmNvbnN0OmBMT0dfSU5GT2AsIGRldGVybWluZXMgdGhlIG1lc3NhZ2UgcHJpb3JpdHkuICBJZiB0aGUgZmFjaWxpdHkgaXMKKyAgIG5vdCBlbmNvZGVkIGluICpwcmlvcml0eSogdXNpbmcgbG9naWNhbC1vciAoYGBMT0dfSU5GTyB8IExPR19VU0VSYGApLCB0aGUKKyAgIHZhbHVlIGdpdmVuIGluIHRoZSA6ZnVuYzpgb3BlbmxvZ2AgY2FsbCBpcyB1c2VkLgorCisgICBJZiA6ZnVuYzpgb3BlbmxvZ2AgaGFzIG5vdCBiZWVuIGNhbGxlZCBwcmlvciB0byB0aGUgY2FsbCB0byA6ZnVuYzpgc3lzbG9nYCwKKyAgIGBgb3BlbmxvZygpYGAgd2lsbCBiZSBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMuCiAKIAotLi4gZnVuY3Rpb246OiBvcGVubG9nKGlkZW50WywgbG9nb3B0WywgZmFjaWxpdHldXSkKKy4uIGZ1bmN0aW9uOjogb3BlbmxvZyhbaWRlbnRbLCBsb2dvcHRbLCBmYWNpbGl0eV1dXSkKIAotICAgTG9nZ2luZyBvcHRpb25zIG90aGVyIHRoYW4gdGhlIGRlZmF1bHRzIGNhbiBiZSBzZXQgYnkgZXhwbGljaXRseSBvcGVuaW5nIHRoZSBsb2cKLSAgIGZpbGUgd2l0aCA6ZnVuYzpgb3BlbmxvZ2AgcHJpb3IgdG8gY2FsbGluZyA6ZnVuYzpgc3lzbG9nYC4gIFRoZSBkZWZhdWx0cyBhcmUKLSAgICh1c3VhbGx5KSAqaWRlbnQqID0gYGAnc3lzbG9nJ2BgLCAqbG9nb3B0KiA9IGBgMGBgLCAqZmFjaWxpdHkqID0KLSAgIDpjb25zdDpgTE9HX1VTRVJgLiAgVGhlICppZGVudCogYXJndW1lbnQgaXMgYSBzdHJpbmcgd2hpY2ggaXMgcHJlcGVuZGVkIHRvIGV2ZXJ5Ci0gICBtZXNzYWdlLiAgVGhlIG9wdGlvbmFsICpsb2dvcHQqIGFyZ3VtZW50IGlzIGEgYml0IGZpZWxkIC0gc2VlIGJlbG93IGZvciBwb3NzaWJsZQotICAgdmFsdWVzIHRvIGNvbWJpbmUuICBUaGUgb3B0aW9uYWwgKmZhY2lsaXR5KiBhcmd1bWVudCBzZXRzIHRoZSBkZWZhdWx0IGZhY2lsaXR5Ci0gICBmb3IgbWVzc2FnZXMgd2hpY2ggZG8gbm90IGhhdmUgYSBmYWNpbGl0eSBleHBsaWNpdGx5IGVuY29kZWQuCisgICBMb2dnaW5nIG9wdGlvbnMgb2Ygc3Vic2VxdWVudCA6ZnVuYzpgc3lzbG9nYCBjYWxscyBjYW4gYmUgc2V0IGJ5IGNhbGxpbmcKKyAgIDpmdW5jOmBvcGVubG9nYC4gIDpmdW5jOmBzeXNsb2dgIHdpbGwgY2FsbCA6ZnVuYzpgb3BlbmxvZ2Agd2l0aCBubyBhcmd1bWVudHMKKyAgIGlmIHRoZSBsb2cgaXMgbm90IGN1cnJlbnRseSBvcGVuLgorCisgICBUaGUgb3B0aW9uYWwgKmlkZW50KiBrZXl3b3JkIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHdoaWNoIGlzIHByZXBlbmRlZCB0byBldmVyeQorICAgbWVzc2FnZSwgYW5kIGRlZmF1bHRzIHRvIGBgc3lzLmFyZ3ZbMF1gYCB3aXRoIGxlYWRpbmcgcGF0aCBjb21wb25lbnRzCisgICBzdHJpcHBlZC4gIFRoZSBvcHRpb25hbCAqbG9nb3B0KiBrZXl3b3JkIGFyZ3VtZW50IChkZWZhdWx0IGlzIDApIGlzIGEgYml0CisgICBmaWVsZCAtLSBzZWUgYmVsb3cgZm9yIHBvc3NpYmxlIHZhbHVlcyB0byBjb21iaW5lLiAgVGhlIG9wdGlvbmFsICpmYWNpbGl0eSoKKyAgIGtleXdvcmQgYXJndW1lbnQgKGRlZmF1bHQgaXMgOmNvbnN0OmBMT0dfVVNFUmApIHNldHMgdGhlIGRlZmF1bHQgZmFjaWxpdHkgZm9yCisgICBtZXNzYWdlcyB3aGljaCBkbyBub3QgaGF2ZSBhIGZhY2lsaXR5IGV4cGxpY2l0bHkgZW5jb2RlZC4KIAogCiAuLiBmdW5jdGlvbjo6IGNsb3NlbG9nKCkKIAotICAgQ2xvc2UgdGhlIGxvZyBmaWxlLgorICAgUmVzZXQgdGhlIHN5c2xvZyBtb2R1bGUgdmFsdWVzIGFuZCBjYWxsIHRoZSBzeXN0ZW0gbGlicmFyeSBgYGNsb3NlbG9nKClgYC4KKworICAgVGhpcyBjYXVzZXMgdGhlIG1vZHVsZSB0byBiZWhhdmUgYXMgaXQgZG9lcyB3aGVuIGluaXRpYWxseSBpbXBvcnRlZC4gIEZvcgorICAgZXhhbXBsZSwgOmZ1bmM6YG9wZW5sb2dgIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBmaXJzdCA6ZnVuYzpgc3lzbG9nYCBjYWxsIChpZgorICAgOmZ1bmM6YG9wZW5sb2dgIGhhc24ndCBhbHJlYWR5IGJlZW4gY2FsbGVkKSwgYW5kICppZGVudCogYW5kIG90aGVyCisgICA6ZnVuYzpgb3BlbmxvZ2AgcGFyYW1ldGVycyBhcmUgcmVzZXQgdG8gZGVmYXVsdHMuCiAKIAogLi4gZnVuY3Rpb246OiBzZXRsb2dtYXNrKG1hc2twcmkpCiAKLSAgIFNldCB0aGUgcHJpb3JpdHkgbWFzayB0byAqbWFza3ByaSogYW5kIHJldHVybiB0aGUgcHJldmlvdXMgbWFzayB2YWx1ZS4gIENhbGxzIHRvCi0gICA6ZnVuYzpgc3lzbG9nYCB3aXRoIGEgcHJpb3JpdHkgbGV2ZWwgbm90IHNldCBpbiAqbWFza3ByaSogYXJlIGlnbm9yZWQuICBUaGUKLSAgIGRlZmF1bHQgaXMgdG8gbG9nIGFsbCBwcmlvcml0aWVzLiAgVGhlIGZ1bmN0aW9uIGBgTE9HX01BU0socHJpKWBgIGNhbGN1bGF0ZXMgdGhlCi0gICBtYXNrIGZvciB0aGUgaW5kaXZpZHVhbCBwcmlvcml0eSAqcHJpKi4gIFRoZSBmdW5jdGlvbiBgYExPR19VUFRPKHByaSlgYAotICAgY2FsY3VsYXRlcyB0aGUgbWFzayBmb3IgYWxsIHByaW9yaXRpZXMgdXAgdG8gYW5kIGluY2x1ZGluZyAqcHJpKi4KKyAgIFNldCB0aGUgcHJpb3JpdHkgbWFzayB0byAqbWFza3ByaSogYW5kIHJldHVybiB0aGUgcHJldmlvdXMgbWFzayB2YWx1ZS4gIENhbGxzCisgICB0byA6ZnVuYzpgc3lzbG9nYCB3aXRoIGEgcHJpb3JpdHkgbGV2ZWwgbm90IHNldCBpbiAqbWFza3ByaSogYXJlIGlnbm9yZWQuCisgICBUaGUgZGVmYXVsdCBpcyB0byBsb2cgYWxsIHByaW9yaXRpZXMuICBUaGUgZnVuY3Rpb24gYGBMT0dfTUFTSyhwcmkpYGAKKyAgIGNhbGN1bGF0ZXMgdGhlIG1hc2sgZm9yIHRoZSBpbmRpdmlkdWFsIHByaW9yaXR5ICpwcmkqLiAgVGhlIGZ1bmN0aW9uCisgICBgYExPR19VUFRPKHByaSlgYCBjYWxjdWxhdGVzIHRoZSBtYXNrIGZvciBhbGwgcHJpb3JpdGllcyB1cCB0byBhbmQgaW5jbHVkaW5nCisgICAqcHJpKi4KIAogVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogCkBAIC02NCwzICs3OSwyNCBAQAogICAgOmNvbnN0OmBMT0dfUElEYCwgOmNvbnN0OmBMT0dfQ09OU2AsIDpjb25zdDpgTE9HX05ERUxBWWAsIDpjb25zdDpgTE9HX05PV0FJVGAKICAgIGFuZCA6Y29uc3Q6YExPR19QRVJST1JgIGlmIGRlZmluZWQgaW4gYGA8c3lzbG9nLmg+YGAuCiAKKworRXhhbXBsZXMKKy0tLS0tLS0tCisKK1NpbXBsZSBleGFtcGxlCit+fn5+fn5+fn5+fn5+fgorCitBIHNpbXBsZSBzZXQgb2YgZXhhbXBsZXM6OgorCisgICBpbXBvcnQgc3lzbG9nCisKKyAgIHN5c2xvZy5zeXNsb2coJ1Byb2Nlc3Npbmcgc3RhcnRlZCcpCisgICBpZiBlcnJvcjoKKyAgICAgICBzeXNsb2cuc3lzbG9nKHN5c2xvZy5MT0dfRVJSLCAnUHJvY2Vzc2luZyBzdGFydGVkJykKKworQW4gZXhhbXBsZSBvZiBzZXR0aW5nIHNvbWUgbG9nIG9wdGlvbnMsIHRoZXNlIHdvdWxkIGluY2x1ZGUgdGhlIHByb2Nlc3MgSUQgaW4KK2xvZ2dlZCBtZXNzYWdlcywgYW5kIHdyaXRlIHRoZSBtZXNzYWdlcyB0byB0aGUgZGVzdGluYXRpb24gZmFjaWxpdHkgdXNlZCBmb3IKK21haWwgbG9nZ2luZzo6CisKKyAgIHN5c2xvZy5vcGVubG9nKGxvZ29wdD1zeXNsb2cuTE9HX1BJRCwgZmFjaWxpdHk9c3lzbG9nLkxPR19NQUlMKQorICAgc3lzbG9nLnN5c2xvZygnRS1tYWlsIHByb2Nlc3NpbmcgaW5pdGlhdGVkLi4uJykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0IGIvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKaW5kZXggMjk5NjgzOS4uYThlMWQ1NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKQEAgLTIzNCw2ICsyMzQsMTQgQEAKIGFyY2hpdmUgc2V2ZXJhbCB0aW1lcy4gRWFjaCBhcmNoaXZlIG1lbWJlciBpcyByZXByZXNlbnRlZCBieSBhIDpjbGFzczpgVGFySW5mb2AKIG9iamVjdCwgc2VlIDpyZWY6YHRhcmluZm8tb2JqZWN0c2AgZm9yIGRldGFpbHMuCiAKK0EgOmNsYXNzOmBUYXJGaWxlYCBvYmplY3QgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgaW4gYSA6a2V5d29yZDpgd2l0aGAKK3N0YXRlbWVudC4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNsb3NlZCB3aGVuIHRoZSBibG9jayBpcyBjb21wbGV0ZWQuIFBsZWFzZQorbm90ZSB0aGF0IGluIHRoZSBldmVudCBvZiBhbiBleGNlcHRpb24gYW4gYXJjaGl2ZSBvcGVuZWQgZm9yIHdyaXRpbmcgd2lsbCBub3QKK2JlIGZpbmFsaXplZDsgb25seSB0aGUgaW50ZXJuYWxseSB1c2VkIGZpbGUgb2JqZWN0IHdpbGwgYmUgY2xvc2VkLiBTZWUgdGhlCis6cmVmOmB0YXItZXhhbXBsZXNgIHNlY3Rpb24gZm9yIGEgdXNlIGNhc2UuCisKKy4uIHZlcnNpb25hZGRlZDo6IDIuNworICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4KIAogLi4gY2xhc3M6OiBUYXJGaWxlKG5hbWU9Tm9uZSwgbW9kZT0ncicsIGZpbGVvYmo9Tm9uZSwgZm9ybWF0PURFRkFVTFRfRk9STUFULCB0YXJpbmZvPVRhckluZm8sIGRlcmVmZXJlbmNlPUZhbHNlLCBpZ25vcmVfemVyb3M9RmFsc2UsIGVuY29kaW5nPUVOQ09ESU5HLCBlcnJvcnM9Tm9uZSwgcGF4X2hlYWRlcnM9Tm9uZSwgZGVidWc9MCwgZXJyb3JsZXZlbD0wKQogCkBAIC0zODksNyArMzk3LDcgQEAKICAgICAgIGFuZCA6bWV0aDpgY2xvc2VgLCBhbmQgYWxzbyBzdXBwb3J0cyBpdGVyYXRpb24gb3ZlciBpdHMgbGluZXMuCiAKIAotLi4gbWV0aG9kOjogVGFyRmlsZS5hZGQobmFtZSwgYXJjbmFtZT1Ob25lLCByZWN1cnNpdmU9VHJ1ZSwgZXhjbHVkZT1Ob25lKQorLi4gbWV0aG9kOjogVGFyRmlsZS5hZGQobmFtZSwgYXJjbmFtZT1Ob25lLCByZWN1cnNpdmU9VHJ1ZSwgZXhjbHVkZT1Ob25lLCBmaWx0ZXI9Tm9uZSkKIAogICAgQWRkIHRoZSBmaWxlICpuYW1lKiB0byB0aGUgYXJjaGl2ZS4gKm5hbWUqIG1heSBiZSBhbnkgdHlwZSBvZiBmaWxlIChkaXJlY3RvcnksCiAgICBmaWZvLCBzeW1ib2xpYyBsaW5rLCBldGMuKS4gSWYgZ2l2ZW4sICphcmNuYW1lKiBzcGVjaWZpZXMgYW4gYWx0ZXJuYXRpdmUgbmFtZQpAQCAtMzk3LDExICs0MDUsMjQgQEAKICAgIGNhbiBiZSBhdm9pZGVkIGJ5IHNldHRpbmcgKnJlY3Vyc2l2ZSogdG8gOmNvbnN0OmBGYWxzZWAuIElmICpleGNsdWRlKiBpcyBnaXZlbgogICAgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgb25lIGZpbGVuYW1lIGFyZ3VtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbgogICAgdmFsdWUuIERlcGVuZGluZyBvbiB0aGlzIHZhbHVlIHRoZSByZXNwZWN0aXZlIGZpbGUgaXMgZWl0aGVyIGV4Y2x1ZGVkCi0gICAoOmNvbnN0OmBUcnVlYCkgb3IgYWRkZWQgKDpjb25zdDpgRmFsc2VgKS4KKyAgICg6Y29uc3Q6YFRydWVgKSBvciBhZGRlZCAoOmNvbnN0OmBGYWxzZWApLiBJZiAqZmlsdGVyKiBpcyBzcGVjaWZpZWQgaXQgbXVzdAorICAgYmUgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgOmNsYXNzOmBUYXJJbmZvYCBvYmplY3QgYXJndW1lbnQgYW5kIHJldHVybnMgdGhlCisgICBjaGFuZ2VkIDpjbGFzczpgVGFySW5mb2Agb2JqZWN0LiBJZiBpdCBpbnN0ZWFkIHJldHVybnMgOmNvbnN0OmBOb25lYCB0aGUgOmNsYXNzOmBUYXJJbmZvYAorICAgb2JqZWN0IHdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUgYXJjaGl2ZS4gU2VlIDpyZWY6YHRhci1leGFtcGxlc2AgZm9yIGFuCisgICBleGFtcGxlLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgogICAgICAgQWRkZWQgdGhlICpleGNsdWRlKiBwYXJhbWV0ZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBBZGRlZCB0aGUgKmZpbHRlciogcGFyYW1ldGVyLgorCisgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICBUaGUgKmV4Y2x1ZGUqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSAqZmlsdGVyKiBwYXJhbWV0ZXIKKyAgICAgIGluc3RlYWQuICBGb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgKmZpbHRlciogc2hvdWxkIGJlIHVzZWQgYXMgYSBrZXl3b3JkCisgICAgICBhcmd1bWVudCByYXRoZXIgdGhhbiBhcyBhIHBvc2l0aW9uYWwgYXJndW1lbnQgc28gdGhhdCBjb2RlIHdvbid0IGJlCisgICAgICBhZmZlY3RlZCB3aGVuICpleGNsdWRlKiBpcyB1bHRpbWF0ZWx5IHJlbW92ZWQuCisKIAogLi4gbWV0aG9kOjogVGFyRmlsZS5hZGRmaWxlKHRhcmluZm8sIGZpbGVvYmo9Tm9uZSkKIApAQCAtNjM5LDYgKzY2MCwxMyBAQAogICAgICAgIHRhci5hZGQobmFtZSkKICAgIHRhci5jbG9zZSgpCiAKK1RoZSBzYW1lIGV4YW1wbGUgdXNpbmcgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQ6OgorCisgICAgaW1wb3J0IHRhcmZpbGUKKyAgICB3aXRoIHRhcmZpbGUub3Blbigic2FtcGxlLnRhciIsICJ3IikgYXMgdGFyOgorICAgICAgICBmb3IgbmFtZSBpbiBbImZvbyIsICJiYXIiLCAicXV1eCJdOgorICAgICAgICAgICAgdGFyLmFkZChuYW1lKQorCiBIb3cgdG8gcmVhZCBhIGd6aXAgY29tcHJlc3NlZCB0YXIgYXJjaGl2ZSBhbmQgZGlzcGxheSBzb21lIG1lbWJlciBpbmZvcm1hdGlvbjo6CiAKICAgIGltcG9ydCB0YXJmaWxlCkBAIC02NTMsNiArNjgxLDE4IEBACiAgICAgICAgICAgIHByaW50ICJzb21ldGhpbmcgZWxzZS4iCiAgICB0YXIuY2xvc2UoKQogCitIb3cgdG8gY3JlYXRlIGFuIGFyY2hpdmUgYW5kIHJlc2V0IHRoZSB1c2VyIGluZm9ybWF0aW9uIHVzaW5nIHRoZSAqZmlsdGVyKgorcGFyYW1ldGVyIGluIDptZXRoOmBUYXJGaWxlLmFkZGA6OgorCisgICAgaW1wb3J0IHRhcmZpbGUKKyAgICBkZWYgcmVzZXQodGFyaW5mbyk6CisgICAgICAgIHRhcmluZm8udWlkID0gdGFyaW5mby5naWQgPSAwCisgICAgICAgIHRhcmluZm8udW5hbWUgPSB0YXJpbmZvLmduYW1lID0gInJvb3QiCisgICAgICAgIHJldHVybiB0YXJpbmZvCisgICAgdGFyID0gdGFyZmlsZS5vcGVuKCJzYW1wbGUudGFyLmd6IiwgInc6Z3oiKQorICAgIHRhci5hZGQoImZvbyIsIGZpbHRlcj1yZXNldCkKKyAgICB0YXIuY2xvc2UoKQorCiAKIC4uIF90YXItZm9ybWF0czoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGVsbmV0bGliLnJzdCBiL0RvYy9saWJyYXJ5L3RlbG5ldGxpYi5yc3QKaW5kZXggYjE1MjhiZC4uOTI1ZWNjYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVsbmV0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS90ZWxuZXRsaWIucnN0CkBAIC0xOTgsOCArMTk4LDggQEAKICAgIHJlY2VpdmVkIHNvIGZhciAobWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcgaWYgYSB0aW1lb3V0IGhhcHBlbmVkKS4KIAogICAgSWYgYSByZWd1bGFyIGV4cHJlc3Npb24gZW5kcyB3aXRoIGEgZ3JlZWR5IG1hdGNoIChzdWNoIGFzIGBgLipgYCkgb3IgaWYgbW9yZQotICAgdGhhbiBvbmUgZXhwcmVzc2lvbiBjYW4gbWF0Y2ggdGhlIHNhbWUgaW5wdXQsIHRoZSByZXN1bHRzIGFyZSBpbmRldGVybWluaXN0aWMsCi0gICBhbmQgbWF5IGRlcGVuZCBvbiB0aGUgSS9PIHRpbWluZy4KKyAgIHRoYW4gb25lIGV4cHJlc3Npb24gY2FuIG1hdGNoIHRoZSBzYW1lIGlucHV0LCB0aGUgcmVzdWx0cyBhcmUKKyAgIG5vbi1kZXRlcm1pbmlzdGljLCBhbmQgbWF5IGRlcGVuZCBvbiB0aGUgSS9PIHRpbWluZy4KIAogCiAuLiBtZXRob2Q6OiBUZWxuZXQuc2V0X29wdGlvbl9uZWdvdGlhdGlvbl9jYWxsYmFjayhjYWxsYmFjaykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0IGIvRG9jL2xpYnJhcnkvdGVzdC5yc3QKaW5kZXggYzczZTIzZS4uM2EwYjVjYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGVzdC5yc3QKQEAgLTk3LDE3ICs5NywxNyBAQAogZ3VpZGVsaW5lcyB0byBiZSBmb2xsb3dlZDoKIAogKiBUaGUgdGVzdGluZyBzdWl0ZSBzaG91bGQgZXhlcmNpc2UgYWxsIGNsYXNzZXMsIGZ1bmN0aW9ucywgYW5kIGNvbnN0YW50cy4gVGhpcwotICBpbmNsdWRlcyBub3QganVzdCB0aGUgZXh0ZXJuYWwgQVBJIHRoYXQgaXMgdG8gYmUgcHJlc2VudGVkIHRvIHRoZSBvdXRzaWRlIHdvcmxkCi0gIGJ1dCBhbHNvICJwcml2YXRlIiBjb2RlLgorICBpbmNsdWRlcyBub3QganVzdCB0aGUgZXh0ZXJuYWwgQVBJIHRoYXQgaXMgdG8gYmUgcHJlc2VudGVkIHRvIHRoZSBvdXRzaWRlCisgIHdvcmxkIGJ1dCBhbHNvICJwcml2YXRlIiBjb2RlLgogCiAqIFdoaXRlYm94IHRlc3RpbmcgKGV4YW1pbmluZyB0aGUgY29kZSBiZWluZyB0ZXN0ZWQgd2hlbiB0aGUgdGVzdHMgYXJlIGJlaW5nCiAgIHdyaXR0ZW4pIGlzIHByZWZlcnJlZC4gQmxhY2tib3ggdGVzdGluZyAodGVzdGluZyBvbmx5IHRoZSBwdWJsaXNoZWQgdXNlcgotICBpbnRlcmZhY2UpIGlzIG5vdCBjb21wbGV0ZSBlbm91Z2ggdG8gbWFrZSBzdXJlIGFsbCBib3VuZGFyeSBhbmQgZWRnZSBjYXNlcyBhcmUKLSAgdGVzdGVkLgorICBpbnRlcmZhY2UpIGlzIG5vdCBjb21wbGV0ZSBlbm91Z2ggdG8gbWFrZSBzdXJlIGFsbCBib3VuZGFyeSBhbmQgZWRnZSBjYXNlcworICBhcmUgdGVzdGVkLgogCiAqIE1ha2Ugc3VyZSBhbGwgcG9zc2libGUgdmFsdWVzIGFyZSB0ZXN0ZWQgaW5jbHVkaW5nIGludmFsaWQgb25lcy4gVGhpcyBtYWtlcwotICBzdXJlIHRoYXQgbm90IG9ubHkgYWxsIHZhbGlkIHZhbHVlcyBhcmUgYWNjZXB0YWJsZSBidXQgYWxzbyB0aGF0IGltcHJvcGVyIHZhbHVlcwotICBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCisgIHN1cmUgdGhhdCBub3Qgb25seSBhbGwgdmFsaWQgdmFsdWVzIGFyZSBhY2NlcHRhYmxlIGJ1dCBhbHNvIHRoYXQgaW1wcm9wZXIKKyAgdmFsdWVzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4KIAogKiBFeGhhdXN0IGFzIG1hbnkgY29kZSBwYXRocyBhcyBwb3NzaWJsZS4gVGVzdCB3aGVyZSBicmFuY2hpbmcgb2NjdXJzIGFuZCB0aHVzCiAgIHRhaWxvciBpbnB1dCB0byBtYWtlIHN1cmUgYXMgbWFueSBkaWZmZXJlbnQgcGF0aHMgdGhyb3VnaCB0aGUgY29kZSBhcmUgdGFrZW4uCkBAIC0xMjcsOCArMTI3LDggQEAKICAgYmVoYXZpb3IgZnJvbSBzaWRlLWVmZmVjdHMgb2YgaW1wb3J0aW5nIGEgbW9kdWxlLgogCiAqIFRyeSB0byBtYXhpbWl6ZSBjb2RlIHJldXNlLiBPbiBvY2Nhc2lvbiwgdGVzdHMgd2lsbCB2YXJ5IGJ5IHNvbWV0aGluZyBhcyBzbWFsbAotICBhcyB3aGF0IHR5cGUgb2YgaW5wdXQgaXMgdXNlZC4gTWluaW1pemUgY29kZSBkdXBsaWNhdGlvbiBieSBzdWJjbGFzc2luZyBhIGJhc2ljCi0gIHRlc3QgY2xhc3Mgd2l0aCBhIGNsYXNzIHRoYXQgc3BlY2lmaWVzIHRoZSBpbnB1dDo6CisgIGFzIHdoYXQgdHlwZSBvZiBpbnB1dCBpcyB1c2VkLiBNaW5pbWl6ZSBjb2RlIGR1cGxpY2F0aW9uIGJ5IHN1YmNsYXNzaW5nIGEKKyAgYmFzaWMgdGVzdCBjbGFzcyB3aXRoIGEgY2xhc3MgdGhhdCBzcGVjaWZpZXMgdGhlIGlucHV0OjoKIAogICAgICBjbGFzcyBUZXN0RnVuY0FjY2VwdHNTZXF1ZW5jZXModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xMzgsMTMgKzEzOCwxMyBAQAogICAgICAgICAgICAgIHNlbGYuZnVuYyhzZWxmLmFyZykKIAogICAgICBjbGFzcyBBY2NlcHRMaXN0cyhUZXN0RnVuY0FjY2VwdHNTZXF1ZW5jZXMpOgotICAgICAgICAgYXJnID0gWzEsMiwzXQorICAgICAgICAgYXJnID0gWzEsIDIsIDNdCiAKICAgICAgY2xhc3MgQWNjZXB0U3RyaW5ncyhUZXN0RnVuY0FjY2VwdHNTZXF1ZW5jZXMpOgogICAgICAgICAgYXJnID0gJ2FiYycKIAogICAgICBjbGFzcyBBY2NlcHRUdXBsZXMoVGVzdEZ1bmNBY2NlcHRzU2VxdWVuY2VzKToKLSAgICAgICAgIGFyZyA9ICgxLDIsMykKKyAgICAgICAgIGFyZyA9ICgxLCAyLCAzKQogCiAKIC4uIHNlZWFsc286OgpAQCAtMTU1LDMzICsxNTUsMzMgQEAKIAogLi4gX3JlZ3J0ZXN0OgogCi1SdW5uaW5nIHRlc3RzIHVzaW5nIDptb2Q6YHRlc3QucmVncnRlc3RgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSdW5uaW5nIHRlc3RzIHVzaW5nIHRoZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLTptb2Q6YHRlc3QucmVncnRlc3RgIGNhbiBiZSB1c2VkIGFzIGEgc2NyaXB0IHRvIGRyaXZlIFB5dGhvbidzIHJlZ3Jlc3Npb24gdGVzdAotc3VpdGUuIFJ1bm5pbmcgdGhlIHNjcmlwdCBieSBpdHNlbGYgYXV0b21hdGljYWxseSBzdGFydHMgcnVubmluZyBhbGwgcmVncmVzc2lvbgorVGhlIDptb2Q6YHRlc3QucmVncnRlc3RgIG1vZHVsZSBjYW4gYmUgcnVuIGFzIGEgc2NyaXB0IHRvIGRyaXZlIFB5dGhvbidzIHJlZ3Jlc3Npb24KK3Rlc3Qgc3VpdGUsIHRoYW5rcyB0byB0aGUgOm9wdGlvbjpgLW1gIG9wdGlvbjogOnByb2dyYW06YHB5dGhvbiAtbSB0ZXN0LnJlZ3J0ZXN0YC4KK1J1bm5pbmcgdGhlIHNjcmlwdCBieSBpdHNlbGYgYXV0b21hdGljYWxseSBzdGFydHMgcnVubmluZyBhbGwgcmVncmVzc2lvbgogdGVzdHMgaW4gdGhlIDptb2Q6YHRlc3RgIHBhY2thZ2UuIEl0IGRvZXMgdGhpcyBieSBmaW5kaW5nIGFsbCBtb2R1bGVzIGluIHRoZQogcGFja2FnZSB3aG9zZSBuYW1lIHN0YXJ0cyB3aXRoIGBgdGVzdF9gYCwgaW1wb3J0aW5nIHRoZW0sIGFuZCBleGVjdXRpbmcgdGhlCi1mdW5jdGlvbiA6ZnVuYzpgdGVzdF9tYWluYCBpZiBwcmVzZW50LiBUaGUgbmFtZXMgb2YgdGVzdHMgdG8gZXhlY3V0ZSBtYXkgYWxzbyBiZQotcGFzc2VkIHRvIHRoZSBzY3JpcHQuIFNwZWNpZnlpbmcgYSBzaW5nbGUgcmVncmVzc2lvbiB0ZXN0ICg6cHJvZ3JhbTpgcHl0aG9uCi1yZWdydGVzdC5weWAgOm9wdGlvbjpgdGVzdF9zcGFtLnB5YCkgd2lsbCBtaW5pbWl6ZSBvdXRwdXQgYW5kIG9ubHkgcHJpbnQgd2hldGhlcgorZnVuY3Rpb24gOmZ1bmM6YHRlc3RfbWFpbmAgaWYgcHJlc2VudC4gVGhlIG5hbWVzIG9mIHRlc3RzIHRvIGV4ZWN1dGUgbWF5IGFsc28KK2JlIHBhc3NlZCB0byB0aGUgc2NyaXB0LiBTcGVjaWZ5aW5nIGEgc2luZ2xlIHJlZ3Jlc3Npb24gdGVzdCAoOnByb2dyYW06YHB5dGhvbgorLW0gdGVzdC5yZWdydGVzdCB0ZXN0X3NwYW1gKSB3aWxsIG1pbmltaXplIG91dHB1dCBhbmQgb25seSBwcmludCB3aGV0aGVyCiB0aGUgdGVzdCBwYXNzZWQgb3IgZmFpbGVkIGFuZCB0aHVzIG1pbmltaXplIG91dHB1dC4KIAogUnVubmluZyA6bW9kOmB0ZXN0LnJlZ3J0ZXN0YCBkaXJlY3RseSBhbGxvd3Mgd2hhdCByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSBmb3IKIHRlc3RzIHRvIHVzZSB0byBiZSBzZXQuIFlvdSBkbyB0aGlzIGJ5IHVzaW5nIHRoZSA6b3B0aW9uOmAtdWAgY29tbWFuZC1saW5lCi1vcHRpb24uIFJ1biA6cHJvZ3JhbTpgcHl0aG9uIHJlZ3J0ZXN0LnB5YCA6b3B0aW9uOmAtdWFsbGAgdG8gdHVybiBvbiBhbGwKLXJlc291cmNlczsgc3BlY2lmeWluZyA6b3B0aW9uOmBhbGxgIGFzIGFuIG9wdGlvbiBmb3IgOm9wdGlvbjpgLXVgIGVuYWJsZXMgYWxsCitvcHRpb24uIFJ1biA6cHJvZ3JhbTpgcHl0aG9uIC1tIHRlc3QucmVncnRlc3QgLXVhbGxgIHRvIHR1cm4gb24gYWxsCityZXNvdXJjZXM7IHNwZWNpZnlpbmcgYGBhbGxgYCBhcyBhbiBvcHRpb24gZm9yIGBgLXVgYCBlbmFibGVzIGFsbAogcG9zc2libGUgcmVzb3VyY2VzLiBJZiBhbGwgYnV0IG9uZSByZXNvdXJjZSBpcyBkZXNpcmVkIChhIG1vcmUgY29tbW9uIGNhc2UpLCBhCiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgbm90IGRlc2lyZWQgbWF5IGJlIGxpc3RlZCBhZnRlcgotOm9wdGlvbjpgYWxsYC4gVGhlIGNvbW1hbmQgOnByb2dyYW06YHB5dGhvbiByZWdydGVzdC5weWAKLTpvcHRpb246YC11YWxsLC1hdWRpbywtbGFyZ2VmaWxlYCB3aWxsIHJ1biA6bW9kOmB0ZXN0LnJlZ3J0ZXN0YCB3aXRoIGFsbAotcmVzb3VyY2VzIGV4Y2VwdCB0aGUgOm9wdGlvbjpgYXVkaW9gIGFuZCA6b3B0aW9uOmBsYXJnZWZpbGVgIHJlc291cmNlcy4gRm9yIGEKLWxpc3Qgb2YgYWxsIHJlc291cmNlcyBhbmQgbW9yZSBjb21tYW5kLWxpbmUgb3B0aW9ucywgcnVuIDpwcm9ncmFtOmBweXRob24KLXJlZ3J0ZXN0LnB5YCA6b3B0aW9uOmAtaGAuCitgYGFsbGBgLiBUaGUgY29tbWFuZCA6cHJvZ3JhbTpgcHl0aG9uIC1tIHRlc3QucmVncnRlc3QgLXVhbGwsLWF1ZGlvLC1sYXJnZWZpbGVgCit3aWxsIHJ1biA6bW9kOmB0ZXN0LnJlZ3J0ZXN0YCB3aXRoIGFsbCByZXNvdXJjZXMgZXhjZXB0IHRoZSBgYGF1ZGlvYGAgYW5kCitgYGxhcmdlZmlsZWBgIHJlc291cmNlcy4gRm9yIGEgbGlzdCBvZiBhbGwgcmVzb3VyY2VzIGFuZCBtb3JlIGNvbW1hbmQtbGluZQorb3B0aW9ucywgcnVuIDpwcm9ncmFtOmBweXRob24gLW0gdGVzdC5yZWdydGVzdCAtaGAuCiAKIFNvbWUgb3RoZXIgd2F5cyB0byBleGVjdXRlIHRoZSByZWdyZXNzaW9uIHRlc3RzIGRlcGVuZCBvbiB3aGF0IHBsYXRmb3JtIHRoZQotdGVzdHMgYXJlIGJlaW5nIGV4ZWN1dGVkIG9uLiBPbiBVbml4LCB5b3UgY2FuIHJ1biA6cHJvZ3JhbTpgbWFrZWAgOm9wdGlvbjpgdGVzdGAKLWF0IHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHdoZXJlIFB5dGhvbiB3YXMgYnVpbHQuIE9uIFdpbmRvd3MsIGV4ZWN1dGluZwordGVzdHMgYXJlIGJlaW5nIGV4ZWN1dGVkIG9uLiBPbiBVbml4LCB5b3UgY2FuIHJ1biA6cHJvZ3JhbTpgbWFrZSB0ZXN0YCBhdCB0aGUKK3RvcC1sZXZlbCBkaXJlY3Rvcnkgd2hlcmUgUHl0aG9uIHdhcyBidWlsdC4gT24gV2luZG93cywgZXhlY3V0aW5nCiA6cHJvZ3JhbTpgcnQuYmF0YCBmcm9tIHlvdXIgOmZpbGU6YFBDQnVpbGRgIGRpcmVjdG9yeSB3aWxsIHJ1biBhbGwgcmVncmVzc2lvbgogdGVzdHMuCiAKQEAgLTIxMCwxNyArMjEwLDExIEBACiAgICBtZXRob2RzLgogCiAKLS4uIGV4Y2VwdGlvbjo6IFRlc3RTa2lwcGVkCi0KLSAgIFN1YmNsYXNzIG9mIDpleGM6YFRlc3RGYWlsZWRgLiBSYWlzZWQgd2hlbiBhIHRlc3QgaXMgc2tpcHBlZC4gVGhpcyBvY2N1cnMgd2hlbiBhCi0gICBuZWVkZWQgcmVzb3VyY2UgKHN1Y2ggYXMgYSBuZXR3b3JrIGNvbm5lY3Rpb24pIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlIHRpbWUgb2YKLSAgIHRlc3RpbmcuCi0KLQogLi4gZXhjZXB0aW9uOjogUmVzb3VyY2VEZW5pZWQKIAotICAgU3ViY2xhc3Mgb2YgOmV4YzpgVGVzdFNraXBwZWRgLiBSYWlzZWQgd2hlbiBhIHJlc291cmNlIChzdWNoIGFzIGEgbmV0d29yawotICAgY29ubmVjdGlvbikgaXMgbm90IGF2YWlsYWJsZS4gUmFpc2VkIGJ5IHRoZSA6ZnVuYzpgcmVxdWlyZXNgIGZ1bmN0aW9uLgorICAgU3ViY2xhc3Mgb2YgOmV4YzpgdW5pdHRlc3QuU2tpcFRlc3RgLiBSYWlzZWQgd2hlbiBhIHJlc291cmNlIChzdWNoIGFzIGEKKyAgIG5ldHdvcmsgY29ubmVjdGlvbikgaXMgbm90IGF2YWlsYWJsZS4gUmFpc2VkIGJ5IHRoZSA6ZnVuYzpgcmVxdWlyZXNgCisgICBmdW5jdGlvbi4KIAogVGhlIDptb2Q6YHRlc3QudGVzdF9zdXBwb3J0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKIApAQCAtMjQ0LDQ0ICsyMzgsNDUgQEAKIAogLi4gZGF0YTo6IFRFU1RGTgogCi0gICBTZXQgdG8gdGhlIHBhdGggdGhhdCBhIHRlbXBvcmFyeSBmaWxlIG1heSBiZSBjcmVhdGVkIGF0LiBBbnkgdGVtcG9yYXJ5IHRoYXQgaXMKLSAgIGNyZWF0ZWQgc2hvdWxkIGJlIGNsb3NlZCBhbmQgdW5saW5rZWQgKHJlbW92ZWQpLgorICAgU2V0IHRvIGEgbmFtZSB0aGF0IGlzIHNhZmUgdG8gdXNlIGFzIHRoZSBuYW1lIG9mIGEgdGVtcG9yYXJ5IGZpbGUuICBBbnkKKyAgIHRlbXBvcmFyeSBmaWxlIHRoYXQgaXMgY3JlYXRlZCBzaG91bGQgYmUgY2xvc2VkIGFuZCB1bmxpbmtlZCAocmVtb3ZlZCkuCiAKIFRoZSA6bW9kOmB0ZXN0LnRlc3Rfc3VwcG9ydGAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIAogLi4gZnVuY3Rpb246OiBmb3JnZXQobW9kdWxlX25hbWUpCiAKLSAgIFJlbW92ZXMgdGhlIG1vZHVsZSBuYW1lZCAqbW9kdWxlX25hbWUqIGZyb20gYGBzeXMubW9kdWxlc2BgIGFuZCBkZWxldGVzIGFueQorICAgUmVtb3ZlIHRoZSBtb2R1bGUgbmFtZWQgKm1vZHVsZV9uYW1lKiBmcm9tIGBgc3lzLm1vZHVsZXNgYCBhbmQgZGVsZXRlIGFueQogICAgYnl0ZS1jb21waWxlZCBmaWxlcyBvZiB0aGUgbW9kdWxlLgogCiAKIC4uIGZ1bmN0aW9uOjogaXNfcmVzb3VyY2VfZW5hYmxlZChyZXNvdXJjZSkKIAotICAgUmV0dXJucyA6Y29uc3Q6YFRydWVgIGlmICpyZXNvdXJjZSogaXMgZW5hYmxlZCBhbmQgYXZhaWxhYmxlLiBUaGUgbGlzdCBvZgorICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgKnJlc291cmNlKiBpcyBlbmFibGVkIGFuZCBhdmFpbGFibGUuIFRoZSBsaXN0IG9mCiAgICBhdmFpbGFibGUgcmVzb3VyY2VzIGlzIG9ubHkgc2V0IHdoZW4gOm1vZDpgdGVzdC5yZWdydGVzdGAgaXMgZXhlY3V0aW5nIHRoZQogICAgdGVzdHMuCiAKIAogLi4gZnVuY3Rpb246OiByZXF1aXJlcyhyZXNvdXJjZVssIG1zZ10pCiAKLSAgIFJhaXNlcyA6ZXhjOmBSZXNvdXJjZURlbmllZGAgaWYgKnJlc291cmNlKiBpcyBub3QgYXZhaWxhYmxlLiAqbXNnKiBpcyB0aGUKLSAgIGFyZ3VtZW50IHRvIDpleGM6YFJlc291cmNlRGVuaWVkYCBpZiBpdCBpcyByYWlzZWQuIEFsd2F5cyByZXR1cm5zIHRydWUgaWYgY2FsbGVkCi0gICBieSBhIGZ1bmN0aW9uIHdob3NlIGBgX19uYW1lX19gYCBpcyBgYCdfX21haW5fXydgYC4gVXNlZCB3aGVuIHRlc3RzIGFyZSBleGVjdXRlZAotICAgYnkgOm1vZDpgdGVzdC5yZWdydGVzdGAuCisgICBSYWlzZSA6ZXhjOmBSZXNvdXJjZURlbmllZGAgaWYgKnJlc291cmNlKiBpcyBub3QgYXZhaWxhYmxlLiAqbXNnKiBpcyB0aGUKKyAgIGFyZ3VtZW50IHRvIDpleGM6YFJlc291cmNlRGVuaWVkYCBpZiBpdCBpcyByYWlzZWQuIEFsd2F5cyByZXR1cm5zCisgICA6Y29uc3Q6YFRydWVgIGlmIGNhbGxlZCBieSBhIGZ1bmN0aW9uIHdob3NlIGBgX19uYW1lX19gYCBpcyBgYCdfX21haW5fXydgYC4KKyAgIFVzZWQgd2hlbiB0ZXN0cyBhcmUgZXhlY3V0ZWQgYnkgOm1vZDpgdGVzdC5yZWdydGVzdGAuCiAKIAogLi4gZnVuY3Rpb246OiBmaW5kZmlsZShmaWxlbmFtZSkKIAotICAgUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBmaWxlIG5hbWVkICpmaWxlbmFtZSouIElmIG5vIG1hdGNoIGlzIGZvdW5kICpmaWxlbmFtZSogaXMKLSAgIHJldHVybmVkLiBUaGlzIGRvZXMgbm90IGVxdWFsIGEgZmFpbHVyZSBzaW5jZSBpdCBjb3VsZCBiZSB0aGUgcGF0aCB0byB0aGUgZmlsZS4KKyAgIFJldHVybiB0aGUgcGF0aCB0byB0aGUgZmlsZSBuYW1lZCAqZmlsZW5hbWUqLiBJZiBubyBtYXRjaCBpcyBmb3VuZAorICAgKmZpbGVuYW1lKiBpcyByZXR1cm5lZC4gVGhpcyBkb2VzIG5vdCBlcXVhbCBhIGZhaWx1cmUgc2luY2UgaXQgY291bGQgYmUgdGhlCisgICBwYXRoIHRvIHRoZSBmaWxlLgogCiAKIC4uIGZ1bmN0aW9uOjogcnVuX3VuaXR0ZXN0KCpjbGFzc2VzKQogCiAgICBFeGVjdXRlIDpjbGFzczpgdW5pdHRlc3QuVGVzdENhc2VgIHN1YmNsYXNzZXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gVGhlCi0gICBmdW5jdGlvbiBzY2FucyB0aGUgY2xhc3NlcyBmb3IgbWV0aG9kcyBzdGFydGluZyB3aXRoIHRoZSBwcmVmaXggYGB0ZXN0X2BgIGFuZAotICAgZXhlY3V0ZXMgdGhlIHRlc3RzIGluZGl2aWR1YWxseS4KKyAgIGZ1bmN0aW9uIHNjYW5zIHRoZSBjbGFzc2VzIGZvciBtZXRob2RzIHN0YXJ0aW5nIHdpdGggdGhlIHByZWZpeCBgYHRlc3RfYGAKKyAgIGFuZCBleGVjdXRlcyB0aGUgdGVzdHMgaW5kaXZpZHVhbGx5LgogCiAgICBJdCBpcyBhbHNvIGxlZ2FsIHRvIHBhc3Mgc3RyaW5ncyBhcyBwYXJhbWV0ZXJzOyB0aGVzZSBzaG91bGQgYmUga2V5cyBpbgogICAgYGBzeXMubW9kdWxlc2BgLiBFYWNoIGFzc29jaWF0ZWQgbW9kdWxlIHdpbGwgYmUgc2Nhbm5lZCBieQpAQCAtMjk0LDM3ICsyODksODUgQEAKICAgIFRoaXMgd2lsbCBydW4gYWxsIHRlc3RzIGRlZmluZWQgaW4gdGhlIG5hbWVkIG1vZHVsZS4KIAogCi0uLiBmdW5jdGlvbjo6IGNoZWNrX3dhcm5pbmdzKCkKKy4uIGZ1bmN0aW9uOjogY2hlY2tfd2FybmluZ3MoKmZpbHRlcnMsIHF1aWV0PVRydWUpCiAKLSAgIEEgY29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYGB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpYGAgdGhhdCBtYWtlcwotICAgaXQgZWFzaWVyIHRvIHRlc3QgdGhhdCBhIHdhcm5pbmcgd2FzIGNvcnJlY3RseSByYWlzZWQgd2l0aCBhIHNpbmdsZQotICAgYXNzZXJ0aW9uLiBJdCBpcyBhcHByb3hpbWF0ZWx5IGVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAgYGB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSlgYC4KKyAgIEEgY29udmVuaWVuY2Ugd3JhcHBlciBmb3IgOmZ1bmM6YHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKClgIHRoYXQgbWFrZXMgaXQKKyAgIGVhc2llciB0byB0ZXN0IHRoYXQgYSB3YXJuaW5nIHdhcyBjb3JyZWN0bHkgcmFpc2VkLiAgSXQgaXMgYXBwcm94aW1hdGVseQorICAgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpYGAgd2l0aAorICAgOm1ldGg6YHdhcm5pbmdzLnNpbXBsZWZpbHRlcmAgc2V0IHRvIGBgYWx3YXlzYGAgYW5kIHdpdGggdGhlIG9wdGlvbiB0bworICAgYXV0b21hdGljYWxseSB2YWxpZGF0ZSB0aGUgcmVzdWx0cyB0aGF0IGFyZSByZWNvcmRlZC4KIAotICAgVGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IG9uIGVudHJ5IHRvIHRoZSBjb250ZXh0IG1hbmFnZXIsIGEKLSAgIDpjbGFzczpgV2FybmluZ1JlY29yZGVyYCBpbnN0YW5jZSBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGEgc2ltcGxlIGxpc3QuCi0gICBUaGUgdW5kZXJseWluZyB3YXJuaW5ncyBsaXN0IGlzIGF2YWlsYWJsZSB2aWEgdGhlIHJlY29yZGVyIG9iamVjdCdzCi0gICA6YXR0cjpgd2FybmluZ3NgIGF0dHJpYnV0ZSwgd2hpbGUgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGxhc3QgcmFpc2VkCi0gICB3YXJuaW5nIGFyZSBhbHNvIGFjY2Vzc2libGUgZGlyZWN0bHkgb24gdGhlIG9iamVjdC4gSWYgbm8gd2FybmluZyBoYXMKLSAgIGJlZW4gcmFpc2VkLCB0aGVuIHRoZSBsYXR0ZXIgYXR0cmlidXRlcyB3aWxsIGFsbCBiZSA6Y29uc3Q6YE5vbmVgLgorICAgYGBjaGVja193YXJuaW5nc2BgIGFjY2VwdHMgMi10dXBsZXMgb2YgdGhlIGZvcm0gYGAoIm1lc3NhZ2UgcmVnZXhwIiwKKyAgIFdhcm5pbmdDYXRlZ29yeSlgYCBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50cy4gSWYgb25lIG9yIG1vcmUgKmZpbHRlcnMqIGFyZQorICAgcHJvdmlkZWQsIG9yIGlmIHRoZSBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50ICpxdWlldCogaXMgOmNvbnN0OmBGYWxzZWAsCisgICBpdCBjaGVja3MgdG8gbWFrZSBzdXJlIHRoZSB3YXJuaW5ncyBhcmUgYXMgZXhwZWN0ZWQ6ICBlYWNoIHNwZWNpZmllZCBmaWx0ZXIKKyAgIG11c3QgbWF0Y2ggYXQgbGVhc3Qgb25lIG9mIHRoZSB3YXJuaW5ncyByYWlzZWQgYnkgdGhlIGVuY2xvc2VkIGNvZGUgb3IgdGhlCisgICB0ZXN0IGZhaWxzLCBhbmQgaWYgYW55IHdhcm5pbmdzIGFyZSByYWlzZWQgdGhhdCBkbyBub3QgbWF0Y2ggYW55IG9mIHRoZQorICAgc3BlY2lmaWVkIGZpbHRlcnMgdGhlIHRlc3QgZmFpbHMuICBUbyBkaXNhYmxlIHRoZSBmaXJzdCBvZiB0aGVzZSBjaGVja3MsCisgICBzZXQgKnF1aWV0KiB0byA6Y29uc3Q6YFRydWVgLgogCi0gICBBIDptZXRoOmByZXNldGAgbWV0aG9kIGlzIGFsc28gcHJvdmlkZWQgb24gdGhlIHJlY29yZGVyIG9iamVjdC4gVGhpcwotICAgbWV0aG9kIHNpbXBseSBjbGVhcnMgdGhlIHdhcm5pbmcgbGlzdC4KKyAgIElmIG5vIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0bzo6CiAKLSAgIFRoZSBjb250ZXh0IG1hbmFnZXIgaXMgdXNlZCBsaWtlIHRoaXM6OgorICAgICAgY2hlY2tfd2FybmluZ3MoKCIiLCBXYXJuaW5nKSwgcXVpZXQ9VHJ1ZSkKIAotICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6Ci0gICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQorICAgSW4gdGhpcyBjYXNlIGFsbCB3YXJuaW5ncyBhcmUgY2F1Z2h0IGFuZCBubyBlcnJvcnMgYXJlIHJhaXNlZC4KKworICAgT24gZW50cnkgdG8gdGhlIGNvbnRleHQgbWFuYWdlciwgYSA6Y2xhc3M6YFdhcm5pbmdSZWNvcmRlcmAgaW5zdGFuY2UgaXMKKyAgIHJldHVybmVkLiBUaGUgdW5kZXJseWluZyB3YXJuaW5ncyBsaXN0IGZyb20KKyAgIDpmdW5jOmB+d2FybmluZ3MuY2F0Y2hfd2FybmluZ3NgIGlzIGF2YWlsYWJsZSB2aWEgdGhlIHJlY29yZGVyIG9iamVjdCdzCisgICA6YXR0cjpgd2FybmluZ3NgIGF0dHJpYnV0ZS4gIEFzIGEgY29udmVuaWVuY2UsIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBvYmplY3QKKyAgIHJlcHJlc2VudGluZyB0aGUgbW9zdCByZWNlbnQgd2FybmluZyBjYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSB0aHJvdWdoCisgICB0aGUgcmVjb3JkZXIgb2JqZWN0IChzZWUgZXhhbXBsZSBiZWxvdykuICBJZiBubyB3YXJuaW5nIGhhcyBiZWVuIHJhaXNlZCwKKyAgIHRoZW4gYW55IG9mIHRoZSBhdHRyaWJ1dGVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGV4cGVjdGVkIG9uIGFuIG9iamVjdAorICAgcmVwcmVzZW50aW5nIGEgd2FybmluZyB3aWxsIHJldHVybiA6Y29uc3Q6YE5vbmVgLgorCisgICBUaGUgcmVjb3JkZXIgb2JqZWN0IGFsc28gaGFzIGEgOm1ldGg6YHJlc2V0YCBtZXRob2QsIHdoaWNoIGNsZWFycyB0aGUKKyAgIHdhcm5pbmdzIGxpc3QuCisKKyAgIFRoZSBjb250ZXh0IG1hbmFnZXIgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBsaWtlIHRoaXM6OgorCisgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiYXNzZXJ0aW9uIGlzIGFsd2F5cyB0cnVlIiwgU3ludGF4V2FybmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgiIiwgVXNlcldhcm5pbmcpKToKKyAgICAgICAgICBleGVjKCdhc3NlcnQoRmFsc2UsICJIZXkhIiknKQorICAgICAgICAgIHdhcm5pbmdzLndhcm4oVXNlcldhcm5pbmcoIkhpZGUgbWUhIikpCisKKyAgIEluIHRoaXMgY2FzZSBpZiBlaXRoZXIgd2FybmluZyB3YXMgbm90IHJhaXNlZCwgb3Igc29tZSBvdGhlciB3YXJuaW5nIHdhcworICAgcmFpc2VkLCA6ZnVuYzpgY2hlY2tfd2FybmluZ3NgIHdvdWxkIHJhaXNlIGFuIGVycm9yLgorCisgICBXaGVuIGEgdGVzdCBuZWVkcyB0byBsb29rIG1vcmUgZGVlcGx5IGludG8gdGhlIHdhcm5pbmdzLCByYXRoZXIgdGhhbgorICAganVzdCBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0aGV5IG9jY3VycmVkLCBjb2RlIGxpa2UgdGhpcyBjYW4gYmUgdXNlZDo6CisKKyAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSkgYXMgdzoKICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJmb28iKQotICAgICAgICAgIGFzc2VydCBzdHIody5tZXNzYWdlKSA9PSAiZm9vIgorICAgICAgICAgIGFzc2VydCBzdHIody5hcmdzWzBdKSA9PSAiZm9vIgogICAgICAgICAgIHdhcm5pbmdzLndhcm4oImJhciIpCi0gICAgICAgICAgYXNzZXJ0IHN0cih3Lm1lc3NhZ2UpID09ICJiYXIiCi0gICAgICAgICAgYXNzZXJ0IHN0cih3Lndhcm5pbmdzWzBdLm1lc3NhZ2UpID09ICJmb28iCi0gICAgICAgICAgYXNzZXJ0IHN0cih3Lndhcm5pbmdzWzFdLm1lc3NhZ2UpID09ICJiYXIiCisgICAgICAgICAgYXNzZXJ0IHN0cih3LmFyZ3NbMF0pID09ICJiYXIiCisgICAgICAgICAgYXNzZXJ0IHN0cih3Lndhcm5pbmdzWzBdLmFyZ3NbMF0pID09ICJmb28iCisgICAgICAgICAgYXNzZXJ0IHN0cih3Lndhcm5pbmdzWzFdLmFyZ3NbMF0pID09ICJiYXIiCiAgICAgICAgICAgdy5yZXNldCgpCiAgICAgICAgICAgYXNzZXJ0IGxlbih3Lndhcm5pbmdzKSA9PSAwCiAKKyAgIEhlcmUgYWxsIHdhcm5pbmdzIHdpbGwgYmUgY2F1Z2h0LCBhbmQgdGhlIHRlc3QgY29kZSB0ZXN0cyB0aGUgY2FwdHVyZWQKKyAgIHdhcm5pbmdzIGRpcmVjdGx5LgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBOZXcgb3B0aW9uYWwgYXJndW1lbnRzICpmaWx0ZXJzKiBhbmQgKnF1aWV0Ki4KKworCisuLiBmdW5jdGlvbjo6IGNoZWNrX3B5M2tfd2FybmluZ3MoKmZpbHRlcnMsIHF1aWV0PUZhbHNlKQorCisgICBTaW1pbGFyIHRvIDpmdW5jOmBjaGVja193YXJuaW5nc2AsIGJ1dCBmb3IgUHl0aG9uIDMgY29tcGF0aWJpbGl0eSB3YXJuaW5ncy4KKyAgIElmIGBgc3lzLnB5M2t3YXJuaW5nID09IDFgYCwgaXQgY2hlY2tzIGlmIHRoZSB3YXJuaW5nIGlzIGVmZmVjdGl2ZWx5IHJhaXNlZC4KKyAgIElmIGBgc3lzLnB5M2t3YXJuaW5nID09IDBgYCwgaXQgY2hlY2tzIHRoYXQgbm8gd2FybmluZyBpcyByYWlzZWQuICBJdAorICAgYWNjZXB0cyAyLXR1cGxlcyBvZiB0aGUgZm9ybSBgYCgibWVzc2FnZSByZWdleHAiLCBXYXJuaW5nQ2F0ZWdvcnkpYGAgYXMKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnRzLiAgV2hlbiB0aGUgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudCAqcXVpZXQqIGlzCisgICA6Y29uc3Q6YFRydWVgLCBpdCBkb2VzIG5vdCBmYWlsIGlmIGEgZmlsdGVyIGNhdGNoZXMgbm90aGluZy4gIFdpdGhvdXQKKyAgIGFyZ3VtZW50cywgaXQgZGVmYXVsdHMgdG86OgorCisgICAgICBjaGVja19weTNrX3dhcm5pbmdzKCgiIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwgcXVpZXQ9RmFsc2UpCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCiAKIC4uIGZ1bmN0aW9uOjogY2FwdHVyZWRfc3Rkb3V0KCkKQEAgLTM0Miw2ICszODUsNTQgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCiAKKy4uIGZ1bmN0aW9uOjogaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlKQorCisgICBUaGlzIGZ1bmN0aW9uIGltcG9ydHMgYW5kIHJldHVybnMgdGhlIG5hbWVkIG1vZHVsZS4gVW5saWtlIGEgbm9ybWFsCisgICBpbXBvcnQsIHRoaXMgZnVuY3Rpb24gcmFpc2VzIDpleGM6YHVuaXR0ZXN0LlNraXBUZXN0YCBpZiB0aGUgbW9kdWxlCisgICBjYW5ub3QgYmUgaW1wb3J0ZWQuCisKKyAgIE1vZHVsZSBhbmQgcGFja2FnZSBkZXByZWNhdGlvbiBtZXNzYWdlcyBhcmUgc3VwcHJlc3NlZCBkdXJpbmcgdGhpcyBpbXBvcnQKKyAgIGlmICpkZXByZWNhdGVkKiBpcyA6Y29uc3Q6YFRydWVgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisuLiBmdW5jdGlvbjo6IGltcG9ydF9mcmVzaF9tb2R1bGUobmFtZSwgZnJlc2g9KCksIGJsb2NrZWQ9KCksIGRlcHJlY2F0ZWQ9RmFsc2UpCisKKyAgIFRoaXMgZnVuY3Rpb24gaW1wb3J0cyBhbmQgcmV0dXJucyBhIGZyZXNoIGNvcHkgb2YgdGhlIG5hbWVkIFB5dGhvbiBtb2R1bGUKKyAgIGJ5IHJlbW92aW5nIHRoZSBuYW1lZCBtb2R1bGUgZnJvbSBgYHN5cy5tb2R1bGVzYGAgYmVmb3JlIGRvaW5nIHRoZSBpbXBvcnQuCisgICBOb3RlIHRoYXQgdW5saWtlIDpmdW5jOmByZWxvYWRgLCB0aGUgb3JpZ2luYWwgbW9kdWxlIGlzIG5vdCBhZmZlY3RlZCBieQorICAgdGhpcyBvcGVyYXRpb24uCisKKyAgICpmcmVzaCogaXMgYW4gaXRlcmFibGUgb2YgYWRkaXRpb25hbCBtb2R1bGUgbmFtZXMgdGhhdCBhcmUgYWxzbyByZW1vdmVkCisgICBmcm9tIHRoZSBgYHN5cy5tb2R1bGVzYGAgY2FjaGUgYmVmb3JlIGRvaW5nIHRoZSBpbXBvcnQuCisKKyAgICpibG9ja2VkKiBpcyBhbiBpdGVyYWJsZSBvZiBtb2R1bGUgbmFtZXMgdGhhdCBhcmUgcmVwbGFjZWQgd2l0aCA6Y29uc3Q6YDBgCisgICBpbiB0aGUgbW9kdWxlIGNhY2hlIGR1cmluZyB0aGUgaW1wb3J0IHRvIGVuc3VyZSB0aGF0IGF0dGVtcHRzIHRvIGltcG9ydAorICAgdGhlbSByYWlzZSA6ZXhjOmBJbXBvcnRFcnJvcmAuCisKKyAgIFRoZSBuYW1lZCBtb2R1bGUgYW5kIGFueSBtb2R1bGVzIG5hbWVkIGluIHRoZSAqZnJlc2gqIGFuZCAqYmxvY2tlZCoKKyAgIHBhcmFtZXRlcnMgYXJlIHNhdmVkIGJlZm9yZSBzdGFydGluZyB0aGUgaW1wb3J0IGFuZCB0aGVuIHJlaW5zZXJ0ZWQgaW50bworICAgYGBzeXMubW9kdWxlc2BgIHdoZW4gdGhlIGZyZXNoIGltcG9ydCBpcyBjb21wbGV0ZS4KKworICAgTW9kdWxlIGFuZCBwYWNrYWdlIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIGFyZSBzdXBwcmVzc2VkIGR1cmluZyB0aGlzIGltcG9ydAorICAgaWYgKmRlcHJlY2F0ZWQqIGlzIDpjb25zdDpgVHJ1ZWAuCisKKyAgIFRoaXMgZnVuY3Rpb24gd2lsbCByYWlzZSA6ZXhjOmB1bml0dGVzdC5Ta2lwVGVzdGAgaXMgdGhlIG5hbWVkIG1vZHVsZQorICAgY2Fubm90IGJlIGltcG9ydGVkLgorCisgICBFeGFtcGxlIHVzZTo6CisKKyAgICAgICMgR2V0IGNvcGllcyBvZiB0aGUgd2FybmluZ3MgbW9kdWxlIGZvciB0ZXN0aW5nIHdpdGhvdXQKKyAgICAgICMgYWZmZWN0aW5nIHRoZSB2ZXJzaW9uIGJlaW5nIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHRlc3Qgc3VpdGUKKyAgICAgICMgT25lIGNvcHkgdXNlcyB0aGUgQyBpbXBsZW1lbnRhdGlvbiwgdGhlIG90aGVyIGlzIGZvcmNlZCB0byB1c2UKKyAgICAgICMgdGhlIHB1cmUgUHl0aG9uIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgICAgICBweV93YXJuaW5ncyA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ3dhcm5pbmdzJywgYmxvY2tlZD1bJ193YXJuaW5ncyddKQorICAgICAgY193YXJuaW5ncyA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ3dhcm5pbmdzJywgZnJlc2g9Wydfd2FybmluZ3MnXSkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogVGhlIDptb2Q6YHRlc3QudGVzdF9zdXBwb3J0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CiAKIC4uIGNsYXNzOjogVHJhbnNpZW50UmVzb3VyY2UoZXhjWywgKiprd2FyZ3NdKQpAQCAtMzU1LDI1ICs0NDYsMzEgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogLi4gY2xhc3M6OiBFbnZpcm9ubWVudFZhckd1YXJkKCkKIAotICAgQ2xhc3MgdXNlZCB0byB0ZW1wb3JhcmlseSBzZXQgb3IgdW5zZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgSW5zdGFuY2VzIGNhbiBiZQotICAgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlci4KKyAgIENsYXNzIHVzZWQgdG8gdGVtcG9yYXJpbHkgc2V0IG9yIHVuc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEluc3RhbmNlcyBjYW4KKyAgIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgYW5kIGhhdmUgYSBjb21wbGV0ZSBkaWN0aW9uYXJ5IGludGVyZmFjZSBmb3IKKyAgIHF1ZXJ5aW5nL21vZGlmeWluZyB0aGUgdW5kZXJseWluZyBgYG9zLmVudmlyb25gYC4gQWZ0ZXIgZXhpdCBmcm9tIHRoZQorICAgY29udGV4dCBtYW5hZ2VyIGFsbCBjaGFuZ2VzIHRvIGVudmlyb25tZW50IHZhcmlhYmxlcyBkb25lIHRocm91Z2ggdGhpcworICAgaW5zdGFuY2Ugd2lsbCBiZSByb2xsZWQgYmFjay4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgQWRkZWQgZGljdGlvbmFyeSBpbnRlcmZhY2UuCiAKIAogLi4gbWV0aG9kOjogRW52aXJvbm1lbnRWYXJHdWFyZC5zZXQoZW52dmFyLCB2YWx1ZSkKIAotICAgVGVtcG9yYXJpbHkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYGVudnZhcmBgIHRvIHRoZSB2YWx1ZSBvZiBgYHZhbHVlYGAuCisgICBUZW1wb3JhcmlseSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBgZW52dmFyYGAgdG8gdGhlIHZhbHVlIG9mCisgICBgYHZhbHVlYGAuCiAKIAogLi4gbWV0aG9kOjogRW52aXJvbm1lbnRWYXJHdWFyZC51bnNldChlbnZ2YXIpCiAKICAgIFRlbXBvcmFyaWx5IHVuc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYGVudnZhcmBgLgogCisKIC4uIGNsYXNzOjogV2FybmluZ3NSZWNvcmRlcigpCiAKICAgIENsYXNzIHVzZWQgdG8gcmVjb3JkIHdhcm5pbmdzIGZvciB1bml0IHRlc3RzLiBTZWUgZG9jdW1lbnRhdGlvbiBvZgogICAgOmZ1bmM6YGNoZWNrX3dhcm5pbmdzYCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0IGIvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CmluZGV4IGEyZGI1NjcuLjhmYmZlOWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdAorKysgYi9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKQEAgLTE2LDYgKzE2LDEwIEBACiBvciB0d28gIHRleHQgc3RyaW5ncywgdGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgZ29vZCBlbm91Z2g7CiBvdGhlcndpc2UsICB5b3Ugc2hvdWxkIHVzZSBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YFRleHRXcmFwcGVyYCBmb3IgZWZmaWNpZW5jeS4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgdGV4dHdyYXAgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3RleHR3cmFwLnB5P3ZpZXc9bWFya3VwPmBfCiAKIC4uIGZ1bmN0aW9uOjogd3JhcCh0ZXh0Wywgd2lkdGhbLCAuLi5dXSkKIApAQCAtMTIxLDYgKzEyNSwxMyBAQAogICAgICAgICAgZWFjaCB0YWIgY2hhcmFjdGVyIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UsIHdoaWNoIGlzICpub3QqCiAgICAgICAgICB0aGUgc2FtZSBhcyB0YWIgZXhwYW5zaW9uLgogCisgICAgICAuLiBub3RlOjoKKworICAgICAgICAgSWYgOmF0dHI6YHJlcGxhY2Vfd2hpdGVzcGFjZWAgaXMgZmFsc2UsIG5ld2xpbmVzIG1heSBhcHBlYXIgaW4gdGhlCisgICAgICAgICBtaWRkbGUgb2YgYSBsaW5lIGFuZCBjYXVzZSBzdHJhbmdlIG91dHB1dC4gRm9yIHRoaXMgcmVhc29uLCB0ZXh0IHNob3VsZAorICAgICAgICAgYmUgc3BsaXQgaW50byBwYXJhZ3JhcGhzICh1c2luZyA6bWV0aDpgc3RyLnNwbGl0bGluZXNgIG9yIHNpbWlsYXIpCisgICAgICAgICB3aGljaCBhcmUgd3JhcHBlZCBzZXBhcmF0ZWx5LgorCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGRyb3Bfd2hpdGVzcGFjZQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90aHJlYWQucnN0IGIvRG9jL2xpYnJhcnkvdGhyZWFkLnJzdAppbmRleCBmOGI1ODUwLi43ZThkNWM4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90aHJlYWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RocmVhZC5yc3QKQEAgLTExMiw2ICsxMTIsNyBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKIAorCiBMb2NrIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdCBiL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKaW5kZXggNmE4ZWQwZC4uMGI0NjM0OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CkBAIC0yNiw2ICsyNiwyMSBAQAogICAgU3RhcnRpbmcgd2l0aCBQeXRob24gMi41LCBzZXZlcmFsIFRocmVhZCBtZXRob2RzIHJhaXNlIDpleGM6YFJ1bnRpbWVFcnJvcmAKICAgIGluc3RlYWQgb2YgOmV4YzpgQXNzZXJ0aW9uRXJyb3JgIGlmIGNhbGxlZCBlcnJvbmVvdXNseS4KIAorLi4gaW1wbC1kZXRhaWw6OgorCisgICBEdWUgdG8gdGhlIDp0ZXJtOmBHbG9iYWwgSW50ZXJwcmV0ZXIgTG9ja2AsIGluIENQeXRob24gb25seSBvbmUgdGhyZWFkCisgICBjYW4gZXhlY3V0ZSBQeXRob24gY29kZSBhdCBvbmNlIChldmVuIHRob3VnaCBjZXJ0YWluIHBlcmZvcm1hbmNlLW9yaWVudGVkCisgICBsaWJyYXJpZXMgbWlnaHQgb3ZlcmNvbWUgdGhpcyBsaW1pdGF0aW9uKS4KKyAgIElmIHlvdSB3YW50IHlvdXIgYXBwbGljYXRpb24gdG8gbWFrZSBiZXR0ZXIgb2YgdXNlIG9mIHRoZSBjb21wdXRhdGlvbmFsCisgICByZXNvdXJjZXMgb2YgbXVsdGktY29yZSBtYWNoaW5lcywgeW91IGFyZSBhZHZpc2VkIHRvIHVzZQorICAgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYC4gSG93ZXZlciwgdGhyZWFkaW5nIGlzIHN0aWxsIGFuIGFwcHJvcHJpYXRlIG1vZGVsCisgICBpZiB5b3Ugd2FudCB0byBydW4gbXVsdGlwbGUgSS9PLWJvdW5kIHRhc2tzIHNpbXVsdGFuZW91c2x5LgorCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGB0aHJlYWRpbmcgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3RocmVhZGluZy5weT92aWV3PW1hcmt1cD5gXworCiAKIFRoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIG9iamVjdHM6CiAKQEAgLTQzLDYgKzU4LDggQEAKICAgIHZhcmlhYmxlIGFsbG93cyBvbmUgb3IgbW9yZSB0aHJlYWRzIHRvIHdhaXQgdW50aWwgdGhleSBhcmUgbm90aWZpZWQgYnkgYW5vdGhlcgogICAgdGhyZWFkLgogCisgICBTZWUgOnJlZjpgY29uZGl0aW9uLW9iamVjdHNgLgorCiAKIC4uIGZ1bmN0aW9uOjogY3VycmVudF90aHJlYWQoKQogICAgICAgICAgICAgICBjdXJyZW50VGhyZWFkKCkKQEAgLTY5LDYgKzg2LDggQEAKICAgIHdpdGggdGhlIDptZXRoOmBjbGVhcmAgbWV0aG9kLiAgVGhlIDptZXRoOmB3YWl0YCBtZXRob2QgYmxvY2tzIHVudGlsIHRoZSBmbGFnCiAgICBpcyB0cnVlLgogCisgICBTZWUgOnJlZjpgZXZlbnQtb2JqZWN0c2AuCisKIAogLi4gY2xhc3M6OiBsb2NhbAogCkBAIC05Myw2ICsxMTIsOCBAQAogICAgYWNxdWlyZWQgaXQsIHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8gYWNxdWlyZSBpdCBibG9jaywgdW50aWwgaXQgaXMgcmVsZWFzZWQ7IGFueQogICAgdGhyZWFkIG1heSByZWxlYXNlIGl0LgogCisgICBTZWUgOnJlZjpgbG9jay1vYmplY3RzYC4KKwogCiAuLiBmdW5jdGlvbjo6IFJMb2NrKCkKIApAQCAtMTAxLDYgKzEyMiw4IEBACiAgICByZWVudHJhbnQgbG9jaywgdGhlIHNhbWUgdGhyZWFkIG1heSBhY3F1aXJlIGl0IGFnYWluIHdpdGhvdXQgYmxvY2tpbmc7IHRoZQogICAgdGhyZWFkIG11c3QgcmVsZWFzZSBpdCBvbmNlIGZvciBlYWNoIHRpbWUgaXQgaGFzIGFjcXVpcmVkIGl0LgogCisgICBTZWUgOnJlZjpgcmxvY2stb2JqZWN0c2AuCisKIAogLi4gZnVuY3Rpb246OiBTZW1hcGhvcmUoW3ZhbHVlXSkKICAgIDpub2luZGV4OgpAQCAtMTExLDYgKzEzNCw4IEBACiAgICBpZiBuZWNlc3NhcnkgdW50aWwgaXQgY2FuIHJldHVybiB3aXRob3V0IG1ha2luZyB0aGUgY291bnRlciBuZWdhdGl2ZS4gIElmIG5vdAogICAgZ2l2ZW4sICp2YWx1ZSogZGVmYXVsdHMgdG8gMS4KIAorICAgU2VlIDpyZWY6YHNlbWFwaG9yZS1vYmplY3RzYC4KKwogCiAuLiBmdW5jdGlvbjo6IEJvdW5kZWRTZW1hcGhvcmUoW3ZhbHVlXSkKIApAQCAtMTIyLDE1ICsxNDcsMjEgQEAKIAogCiAuLiBjbGFzczo6IFRocmVhZAorICAgOm5vaW5kZXg6CiAKICAgIEEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgdGhyZWFkIG9mIGNvbnRyb2wuICBUaGlzIGNsYXNzIGNhbiBiZSBzYWZlbHkKICAgIHN1YmNsYXNzZWQgaW4gYSBsaW1pdGVkIGZhc2hpb24uCiAKKyAgIFNlZSA6cmVmOmB0aHJlYWQtb2JqZWN0c2AuCisKIAogLi4gY2xhc3M6OiBUaW1lcgorICAgOm5vaW5kZXg6CiAKICAgIEEgdGhyZWFkIHRoYXQgZXhlY3V0ZXMgYSBmdW5jdGlvbiBhZnRlciBhIHNwZWNpZmllZCBpbnRlcnZhbCBoYXMgcGFzc2VkLgogCisgICBTZWUgOnJlZjpgdGltZXItb2JqZWN0c2AuCisKIAogLi4gZnVuY3Rpb246OiBzZXR0cmFjZShmdW5jKQogCkBAIC0yNTksNyArMjkwLDcgQEAKICAgICAgIEl0IG11c3QgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSBwZXIgdGhyZWFkIG9iamVjdC4gIEl0IGFycmFuZ2VzIGZvciB0aGUKICAgICAgIG9iamVjdCdzIDptZXRoOmBydW5gIG1ldGhvZCB0byBiZSBpbnZva2VkIGluIGEgc2VwYXJhdGUgdGhyZWFkIG9mIGNvbnRyb2wuCiAKLSAgICAgIFRoaXMgbWV0aG9kIHdpbGwgcmFpc2UgYSA6ZXhjOmBSdW50aW1lRXhjZXB0aW9uYCBpZiBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgIFRoaXMgbWV0aG9kIHdpbGwgcmFpc2UgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlmIGNhbGxlZCBtb3JlIHRoYW4gb25jZQogICAgICAgb24gdGhlIHNhbWUgdGhyZWFkIG9iamVjdC4KIAogICAgLi4gbWV0aG9kOjogcnVuKCkKQEAgLTM2OCw3ICszOTksNyBAQAogQWxsIG1ldGhvZHMgYXJlIGV4ZWN1dGVkIGF0b21pY2FsbHkuCiAKIAotLi4gbWV0aG9kOjogTG9jay5hY3F1aXJlKFtibG9ja2luZz0xXSkKKy4uIG1ldGhvZDo6IExvY2suYWNxdWlyZShbYmxvY2tpbmddKQogCiAgICBBY3F1aXJlIGEgbG9jaywgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nLgogCkBAIC02MjQsOSArNjU1LDkgQEAKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIFNlbWFwaG9yZXMgYXJlIG9mdGVuIHVzZWQgdG8gZ3VhcmQgcmVzb3VyY2VzIHdpdGggbGltaXRlZCBjYXBhY2l0eSwgZm9yIGV4YW1wbGUsCi1hIGRhdGFiYXNlIHNlcnZlci4gIEluIGFueSBzaXR1YXRpb24gd2hlcmUgdGhlIHNpemUgb2YgdGhlIHJlc291cmNlIHNpemUgaXMKLWZpeGVkLCB5b3Ugc2hvdWxkIHVzZSBhIGJvdW5kZWQgc2VtYXBob3JlLiAgQmVmb3JlIHNwYXduaW5nIGFueSB3b3JrZXIgdGhyZWFkcywKLXlvdXIgbWFpbiB0aHJlYWQgd291bGQgaW5pdGlhbGl6ZSB0aGUgc2VtYXBob3JlOjoKK2EgZGF0YWJhc2Ugc2VydmVyLiAgSW4gYW55IHNpdHVhdGlvbiB3aGVyZSB0aGUgc2l6ZSBvZiB0aGUgcmVzb3VyY2UgaXMgZml4ZWQsCit5b3Ugc2hvdWxkIHVzZSBhIGJvdW5kZWQgc2VtYXBob3JlLiAgQmVmb3JlIHNwYXduaW5nIGFueSB3b3JrZXIgdGhyZWFkcywgeW91cgorbWFpbiB0aHJlYWQgd291bGQgaW5pdGlhbGl6ZSB0aGUgc2VtYXBob3JlOjoKIAogICAgbWF4Y29ubmVjdGlvbnMgPSA1CiAgICAuLi4KQEAgLTY5Myw3ICs3MjQsMTEgQEAKICAgICAgIGZsb2F0aW5nIHBvaW50IG51bWJlciBzcGVjaWZ5aW5nIGEgdGltZW91dCBmb3IgdGhlIG9wZXJhdGlvbiBpbiBzZWNvbmRzCiAgICAgICAob3IgZnJhY3Rpb25zIHRoZXJlb2YpLgogCi0gICAgICBUaGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyBgYE5vbmVgYC4KKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGludGVybmFsIGZsYWcgb24gZXhpdCwgc28gaXQgd2lsbCBhbHdheXMgcmV0dXJuCisgICAgICBgYFRydWVgYCBleGNlcHQgaWYgYSB0aW1lb3V0IGlzIGdpdmVuIGFuZCB0aGUgb3BlcmF0aW9uIHRpbWVzIG91dC4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgICAgIFByZXZpb3VzbHksIHRoZSBtZXRob2QgYWx3YXlzIHJldHVybmVkIGBgTm9uZWBgLgogCiAKIC4uIF90aW1lci1vYmplY3RzOgpAQCAtNzU3LDkgKzc5Miw5IEBACiBJbXBvcnRpbmcgaW4gdGhyZWFkZWQgY29kZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hpbGUgdGhlIGltcG9ydCBtYWNoaW5lcnkgaXMgdGhyZWFkIHNhZmUsIHRoZXJlIGFyZSB0d28ga2V5Ci1yZXN0cmljdGlvbnMgb24gdGhyZWFkZWQgaW1wb3J0cyBkdWUgdG8gaW5oZXJlbnQgbGltaXRhdGlvbnMgaW4gdGhlIHdheQotdGhhdCB0aHJlYWQgc2FmZXR5IGlzIHByb3ZpZGVkOgorV2hpbGUgdGhlIGltcG9ydCBtYWNoaW5lcnkgaXMgdGhyZWFkLXNhZmUsIHRoZXJlIGFyZSB0d28ga2V5IHJlc3RyaWN0aW9ucyBvbgordGhyZWFkZWQgaW1wb3J0cyBkdWUgdG8gaW5oZXJlbnQgbGltaXRhdGlvbnMgaW4gdGhlIHdheSB0aGF0IHRocmVhZC1zYWZldHkgaXMKK3Byb3ZpZGVkOgogCiAqIEZpcnN0bHksIG90aGVyIHRoYW4gaW4gdGhlIG1haW4gbW9kdWxlLCBhbiBpbXBvcnQgc2hvdWxkIG5vdCBoYXZlIHRoZQogICBzaWRlIGVmZmVjdCBvZiBzcGF3bmluZyBhIG5ldyB0aHJlYWQgYW5kIHRoZW4gd2FpdGluZyBmb3IgdGhhdCB0aHJlYWQgaW4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RpbWUucnN0IGIvRG9jL2xpYnJhcnkvdGltZS5yc3QKaW5kZXggMWZmZWYyYi4uZDZlZmNlZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGltZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGltZS5yc3QKQEAgLTE3LDIxICsxNywyMyBAQAogCiBBbiBleHBsYW5hdGlvbiBvZiBzb21lIHRlcm1pbm9sb2d5IGFuZCBjb252ZW50aW9ucyBpcyBpbiBvcmRlci4KIAotICAuLiBpbmRleDo6IHNpbmdsZTogZXBvY2gKKy4uIGluZGV4Ojogc2luZ2xlOiBlcG9jaAogCiAqIFRoZSA6ZGZuOmBlcG9jaGAgaXMgdGhlIHBvaW50IHdoZXJlIHRoZSB0aW1lIHN0YXJ0cy4gIE9uIEphbnVhcnkgMXN0IG9mIHRoYXQKICAgeWVhciwgYXQgMCBob3VycywgdGhlICJ0aW1lIHNpbmNlIHRoZSBlcG9jaCIgaXMgemVyby4gIEZvciBVbml4LCB0aGUgZXBvY2ggaXMKICAgMTk3MC4gIFRvIGZpbmQgb3V0IHdoYXQgdGhlIGVwb2NoIGlzLCBsb29rIGF0IGBgZ210aW1lKDApYGAuCiAKLSAgLi4gaW5kZXg6OiBzaW5nbGU6IFllYXIgMjAzOAorLi4gaW5kZXg6OiBzaW5nbGU6IFllYXIgMjAzOAogCiAqIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgZG8gbm90IGhhbmRsZSBkYXRlcyBhbmQgdGltZXMgYmVmb3JlIHRoZSBlcG9jaCBvcgogICBmYXIgaW4gdGhlIGZ1dHVyZS4gIFRoZSBjdXQtb2ZmIHBvaW50IGluIHRoZSBmdXR1cmUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgQwogICBsaWJyYXJ5OyBmb3IgVW5peCwgaXQgaXMgdHlwaWNhbGx5IGluIDIwMzguCiAKLSAgLi4gaW5kZXg6OgotICAgICBzaW5nbGU6IFllYXIgMjAwMAotICAgICBzaW5nbGU6IFkySworLi4gaW5kZXg6OgorICAgc2luZ2xlOiBZZWFyIDIwMDAKKyAgIHNpbmdsZTogWTJLCisKKy4uIF90aW1lLXkya2lzc3VlczoKIAogKiAqKlllYXIgMjAwMCAoWTJLKSBpc3N1ZXMqKjogIFB5dGhvbiBkZXBlbmRzIG9uIHRoZSBwbGF0Zm9ybSdzIEMgbGlicmFyeSwgd2hpY2gKICAgZ2VuZXJhbGx5IGRvZXNuJ3QgaGF2ZSB5ZWFyIDIwMDAgaXNzdWVzLCBzaW5jZSBhbGwgZGF0ZXMgYW5kIHRpbWVzIGFyZQpAQCAtNDgsMTYgKzUwLDE2IEBACiAgIE5vdGUgdGhhdCB0aGlzIGlzIG5ldyBhcyBvZiBQeXRob24gMS41LjIoYTIpOyBlYXJsaWVyIHZlcnNpb25zLCB1cCB0byBQeXRob24KICAgMS41LjEgYW5kIDEuNS4yYTEsIHdvdWxkIGFkZCAxOTAwIHRvIHllYXIgdmFsdWVzIGJlbG93IDE5MDAuCiAKLSAgLi4gaW5kZXg6OgotICAgICBzaW5nbGU6IFVUQwotICAgICBzaW5nbGU6IENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lCi0gICAgIHNpbmdsZTogR3JlZW53aWNoIE1lYW4gVGltZQorLi4gaW5kZXg6OgorICAgc2luZ2xlOiBVVEMKKyAgIHNpbmdsZTogQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUKKyAgIHNpbmdsZTogR3JlZW53aWNoIE1lYW4gVGltZQogCiAqIFVUQyBpcyBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSAoZm9ybWVybHkga25vd24gYXMgR3JlZW53aWNoIE1lYW4gVGltZSwgb3IKICAgR01UKS4gIFRoZSBhY3JvbnltIFVUQyBpcyBub3QgYSBtaXN0YWtlIGJ1dCBhIGNvbXByb21pc2UgYmV0d2VlbiBFbmdsaXNoIGFuZAogICBGcmVuY2guCiAKLSAgLi4gaW5kZXg6OiBzaW5nbGU6IERheWxpZ2h0IFNhdmluZyBUaW1lCisuLiBpbmRleDo6IHNpbmdsZTogRGF5bGlnaHQgU2F2aW5nIFRpbWUKIAogKiBEU1QgaXMgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIGFuIGFkanVzdG1lbnQgb2YgdGhlIHRpbWV6b25lIGJ5ICh1c3VhbGx5KSBvbmUKICAgaG91ciBkdXJpbmcgcGFydCBvZiB0aGUgeWVhci4gIERTVCBydWxlcyBhcmUgbWFnaWMgKGRldGVybWluZWQgYnkgbG9jYWwgbGF3KSBhbmQKQEAgLTgyLDM3ICs4NCw3IEBACiAgIHZhbHVlcyBvZiA6ZnVuYzpgZ210aW1lYCwgOmZ1bmM6YGxvY2FsdGltZWAsIGFuZCA6ZnVuYzpgc3RycHRpbWVgIGFsc28gb2ZmZXIKICAgYXR0cmlidXRlIG5hbWVzIGZvciBpbmRpdmlkdWFsIGZpZWxkcy4KIAotICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgfCBJbmRleCB8IEF0dHJpYnV0ZSAgICAgICAgIHwgVmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICs9PT09PT09Kz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotICB8IDAgICAgIHwgOmF0dHI6YHRtX3llYXJgICAgfCAoZm9yIGV4YW1wbGUsIDE5OTMpICAgICAgICAgICAgIHwKLSAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgMSAgICAgfCA6YXR0cjpgdG1fbW9uYCAgICB8IHJhbmdlIFsxLDEyXSAgICAgICAgICAgICAgICAgICAgfAotICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgfCAyICAgICB8IDphdHRyOmB0bV9tZGF5YCAgIHwgcmFuZ2UgWzEsMzFdICAgICAgICAgICAgICAgICAgICB8Ci0gICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICB8IDMgICAgIHwgOmF0dHI6YHRtX2hvdXJgICAgfCByYW5nZSBbMCwyM10gICAgICAgICAgICAgICAgICAgIHwKLSAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgNCAgICAgfCA6YXR0cjpgdG1fbWluYCAgICB8IHJhbmdlIFswLDU5XSAgICAgICAgICAgICAgICAgICAgfAotICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgfCA1ICAgICB8IDphdHRyOmB0bV9zZWNgICAgIHwgcmFuZ2UgWzAsNjFdOyBzZWUgKiooMSkqKiBpbiAgICB8Ci0gIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IDpmdW5jOmBzdHJmdGltZWAgZGVzY3JpcHRpb24gICAgfAotICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgfCA2ICAgICB8IDphdHRyOmB0bV93ZGF5YCAgIHwgcmFuZ2UgWzAsNl0sIE1vbmRheSBpcyAwICAgICAgICB8Ci0gICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICB8IDcgICAgIHwgOmF0dHI6YHRtX3lkYXlgICAgfCByYW5nZSBbMSwzNjZdICAgICAgICAgICAgICAgICAgIHwKLSAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgOCAgICAgfCA6YXR0cjpgdG1faXNkc3RgICB8IDAsIDEgb3IgLTE7IHNlZSBiZWxvdyAgICAgICAgICAgfAotICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICBOb3RlIHRoYXQgdW5saWtlIHRoZSBDIHN0cnVjdHVyZSwgdGhlIG1vbnRoIHZhbHVlIGlzIGEgcmFuZ2Ugb2YgMS0xMiwgbm90IDAtMTEuCi0gIEEgeWVhciB2YWx1ZSB3aWxsIGJlIGhhbmRsZWQgYXMgZGVzY3JpYmVkIHVuZGVyICJZZWFyIDIwMDAgKFkySykgaXNzdWVzIiBhYm92ZS4KLSAgQSBgYC0xYGAgYXJndW1lbnQgYXMgdGhlIGRheWxpZ2h0IHNhdmluZ3MgZmxhZywgcGFzc2VkIHRvIDpmdW5jOmBta3RpbWVgIHdpbGwKLSAgdXN1YWxseSByZXN1bHQgaW4gdGhlIGNvcnJlY3QgZGF5bGlnaHQgc2F2aW5ncyBzdGF0ZSB0byBiZSBmaWxsZWQgaW4uCi0KLSAgV2hlbiBhIHR1cGxlIHdpdGggYW4gaW5jb3JyZWN0IGxlbmd0aCBpcyBwYXNzZWQgdG8gYSBmdW5jdGlvbiBleHBlY3RpbmcgYQotICA6Y2xhc3M6YHN0cnVjdF90aW1lYCwgb3IgaGF2aW5nIGVsZW1lbnRzIG9mIHRoZSB3cm9uZyB0eXBlLCBhIDpleGM6YFR5cGVFcnJvcmAKLSAgaXMgcmFpc2VkLgorICBTZWUgOmNsYXNzOmBzdHJ1Y3RfdGltZWAgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlc2Ugb2JqZWN0cy4KIAogICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuMgogICAgICBUaGUgdGltZSB2YWx1ZSBzZXF1ZW5jZSB3YXMgY2hhbmdlZCBmcm9tIGEgdHVwbGUgdG8gYSA6Y2xhc3M6YHN0cnVjdF90aW1lYCwgd2l0aApAQCAtNDE4LDEzICszOTAsNDggQEAKICAgIGRvY3VtZW50ZWQgYXMgc3VwcG9ydGVkLgogCiAKLS4uIGRhdGE6OiBzdHJ1Y3RfdGltZQorLi4gY2xhc3M6OiBzdHJ1Y3RfdGltZQogCiAgICBUaGUgdHlwZSBvZiB0aGUgdGltZSB2YWx1ZSBzZXF1ZW5jZSByZXR1cm5lZCBieSA6ZnVuYzpgZ210aW1lYCwKLSAgIDpmdW5jOmBsb2NhbHRpbWVgLCBhbmQgOmZ1bmM6YHN0cnB0aW1lYC4KKyAgIDpmdW5jOmBsb2NhbHRpbWVgLCBhbmQgOmZ1bmM6YHN0cnB0aW1lYC4gIEl0IGlzIGFuIG9iamVjdCB3aXRoIGEgOnRlcm06YG5hbWVkCisgICB0dXBsZWAgaW50ZXJmYWNlOiB2YWx1ZXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluZGV4IGFuZCBieSBhdHRyaWJ1dGUgbmFtZS4gIFRoZQorICAgZm9sbG93aW5nIHZhbHVlcyBhcmUgcHJlc2VudDoKKworICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEluZGV4IHwgQXR0cmlidXRlICAgICAgICAgfCBWYWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09Kz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCAwICAgICB8IDphdHRyOmB0bV95ZWFyYCAgIHwgKGZvciBleGFtcGxlLCAxOTkzKSAgICAgICAgICAgICB8CisgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgMSAgICAgfCA6YXR0cjpgdG1fbW9uYCAgICB8IHJhbmdlIFsxLCAxMl0gICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDIgICAgIHwgOmF0dHI6YHRtX21kYXlgICAgfCByYW5nZSBbMSwgMzFdICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCAzICAgICB8IDphdHRyOmB0bV9ob3VyYCAgIHwgcmFuZ2UgWzAsIDIzXSAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgNCAgICAgfCA6YXR0cjpgdG1fbWluYCAgICB8IHJhbmdlIFswLCA1OV0gICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDUgICAgIHwgOmF0dHI6YHRtX3NlY2AgICAgfCByYW5nZSBbMCwgNjFdOyBzZWUgKiooMSkqKiBpbiAgIHwKKyAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IDpmdW5jOmBzdHJmdGltZWAgZGVzY3JpcHRpb24gICAgfAorICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDYgICAgIHwgOmF0dHI6YHRtX3dkYXlgICAgfCByYW5nZSBbMCwgNl0sIE1vbmRheSBpcyAwICAgICAgIHwKKyAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA3ICAgICB8IDphdHRyOmB0bV95ZGF5YCAgIHwgcmFuZ2UgWzEsIDM2Nl0gICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOCAgICAgfCA6YXR0cjpgdG1faXNkc3RgICB8IDAsIDEgb3IgLTE7IHNlZSBiZWxvdyAgICAgICAgICAgfAorICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMgogCisgICBOb3RlIHRoYXQgdW5saWtlIHRoZSBDIHN0cnVjdHVyZSwgdGhlIG1vbnRoIHZhbHVlIGlzIGEgcmFuZ2Ugb2YgWzEsIDEyXSwgbm90CisgICBbMCwgMTFdLiAgQSB5ZWFyIHZhbHVlIHdpbGwgYmUgaGFuZGxlZCBhcyBkZXNjcmliZWQgdW5kZXIgOnJlZjpgWWVhciAyMDAwCisgICAoWTJLKSBpc3N1ZXMgPHRpbWUteTJraXNzdWVzPmAgYWJvdmUuICBBIGBgLTFgYCBhcmd1bWVudCBhcyB0aGUgZGF5bGlnaHQKKyAgIHNhdmluZ3MgZmxhZywgcGFzc2VkIHRvIDpmdW5jOmBta3RpbWVgIHdpbGwgdXN1YWxseSByZXN1bHQgaW4gdGhlIGNvcnJlY3QKKyAgIGRheWxpZ2h0IHNhdmluZ3Mgc3RhdGUgdG8gYmUgZmlsbGVkIGluLgorCisgICBXaGVuIGEgdHVwbGUgd2l0aCBhbiBpbmNvcnJlY3QgbGVuZ3RoIGlzIHBhc3NlZCB0byBhIGZ1bmN0aW9uIGV4cGVjdGluZyBhCisgICA6Y2xhc3M6YHN0cnVjdF90aW1lYCwgb3IgaGF2aW5nIGVsZW1lbnRzIG9mIHRoZSB3cm9uZyB0eXBlLCBhCisgICA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZC4KKwogCiAuLiBmdW5jdGlvbjo6IHRpbWUoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90aW1laXQucnN0IGIvRG9jL2xpYnJhcnkvdGltZWl0LnJzdAppbmRleCA0ZjkzMGIzLi4yOWE5NDFjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90aW1laXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKQEAgLTEyNSwyNyArMTI1LDM2IEBACiAKICAgIHB5dGhvbiAtbSB0aW1laXQgWy1uIE5dIFstciBOXSBbLXMgU10gWy10XSBbLWNdIFstaF0gW3N0YXRlbWVudCAuLi5dCiAKLXdoZXJlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgdW5kZXJzdG9vZDoKK1doZXJlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgdW5kZXJzdG9vZDoKIAotLW4gTi86b3B0aW9uOmAtLW51bWJlcj1OYAorLi4gcHJvZ3JhbTo6IHRpbWVpdAorCisuLiBjbWRvcHRpb246OiAtbiBOLCAtLW51bWJlcj1OCisKICAgIGhvdyBtYW55IHRpbWVzIHRvIGV4ZWN1dGUgJ3N0YXRlbWVudCcKIAotLXIgTi86b3B0aW9uOmAtLXJlcGVhdD1OYAorLi4gY21kb3B0aW9uOjogLXIgTiwgLS1yZXBlYXQ9TgorCiAgICBob3cgbWFueSB0aW1lcyB0byByZXBlYXQgdGhlIHRpbWVyIChkZWZhdWx0IDMpCiAKLS1zIFMvOm9wdGlvbjpgLS1zZXR1cD1TYAotICAgc3RhdGVtZW50IHRvIGJlIGV4ZWN1dGVkIG9uY2UgaW5pdGlhbGx5IChkZWZhdWx0IGBgJ3Bhc3MnYGApCisuLiBjbWRvcHRpb246OiAtcyBTLCAtLXNldHVwPVMKIAotLXQvOm9wdGlvbjpgLS10aW1lYAorICAgc3RhdGVtZW50IHRvIGJlIGV4ZWN1dGVkIG9uY2UgaW5pdGlhbGx5IChkZWZhdWx0IGBgcGFzc2BgKQorCisuLiBjbWRvcHRpb246OiAtdCwgLS10aW1lCisKICAgIHVzZSA6ZnVuYzpgdGltZS50aW1lYCAoZGVmYXVsdCBvbiBhbGwgcGxhdGZvcm1zIGJ1dCBXaW5kb3dzKQogCi0tYy86b3B0aW9uOmAtLWNsb2NrYAorLi4gY21kb3B0aW9uOjogLWMsIC0tY2xvY2sKKwogICAgdXNlIDpmdW5jOmB0aW1lLmNsb2NrYCAoZGVmYXVsdCBvbiBXaW5kb3dzKQogCi0tdi86b3B0aW9uOmAtLXZlcmJvc2VgCisuLiBjbWRvcHRpb246OiAtdiwgLS12ZXJib3NlCisKICAgIHByaW50IHJhdyB0aW1pbmcgcmVzdWx0czsgcmVwZWF0IGZvciBtb3JlIGRpZ2l0cyBwcmVjaXNpb24KIAotLWgvOm9wdGlvbjpgLS1oZWxwYAorLi4gY21kb3B0aW9uOjogLWgsIC0taGVscAorCiAgICBwcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQKIAogQSBtdWx0aS1saW5lIHN0YXRlbWVudCBtYXkgYmUgZ2l2ZW4gYnkgc3BlY2lmeWluZyBlYWNoIGxpbmUgYXMgYSBzZXBhcmF0ZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGsucnN0IGIvRG9jL2xpYnJhcnkvdGsucnN0CmluZGV4IGUxYzI1YjYuLmYwNGMzZWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RrLnJzdAorKysgYi9Eb2MvbGlicmFyeS90ay5yc3QKQEAgLTEyLDcgKzEyLDggQEAKIAogVGsvVGNsIGhhcyBsb25nIGJlZW4gYW4gaW50ZWdyYWwgcGFydCBvZiBQeXRob24uICBJdCBwcm92aWRlcyBhIHJvYnVzdCBhbmQKIHBsYXRmb3JtIGluZGVwZW5kZW50IHdpbmRvd2luZyB0b29sa2l0LCB0aGF0IGlzIGF2YWlsYWJsZSB0byBQeXRob24gcHJvZ3JhbW1lcnMKLXVzaW5nIHRoZSA6bW9kOmBUa2ludGVyYCBtb2R1bGUsIGFuZCBpdHMgZXh0ZW5zaW9uLCB0aGUgOm1vZDpgVGl4YCBtb2R1bGUuCit1c2luZyB0aGUgOm1vZDpgVGtpbnRlcmAgbW9kdWxlLCBhbmQgaXRzIGV4dGVuc2lvbnMsIHRoZSA6bW9kOmBUaXhgIGFuZAordGhlIDptb2Q6YHR0a2AgbW9kdWxlcy4KIAogVGhlIDptb2Q6YFRraW50ZXJgIG1vZHVsZSBpcyBhIHRoaW4gb2JqZWN0LW9yaWVudGVkIGxheWVyIG9uIHRvcCBvZiBUY2wvVGsuIFRvCiB1c2UgOm1vZDpgVGtpbnRlcmAsIHlvdSBkb24ndCBuZWVkIHRvIHdyaXRlIFRjbCBjb2RlLCBidXQgeW91IHdpbGwgbmVlZCB0bwpAQCAtMzIsNiArMzMsNyBAQAogLi4gdG9jdHJlZTo6CiAKICAgIHRraW50ZXIucnN0CisgICB0dGsucnN0CiAgICB0aXgucnN0CiAgICBzY3JvbGxlZHRleHQucnN0CiAgICB0dXJ0bGUucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90b2tlbi5yc3QgYi9Eb2MvbGlicmFyeS90b2tlbi5yc3QKaW5kZXggNWJmMGVhOC4uMDA5NzJiMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdG9rZW4ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Rva2VuLnJzdApAQCAtMTMsOCArMTMsOCBAQAogdGhlIGxhbmd1YWdlIGdyYW1tYXIuICBUaGUgc3BlY2lmaWMgbnVtZXJpYyB2YWx1ZXMgd2hpY2ggdGhlIG5hbWVzIG1hcCB0byBtYXkKIGNoYW5nZSBiZXR3ZWVuIFB5dGhvbiB2ZXJzaW9ucy4KIAotVGhpcyBtb2R1bGUgYWxzbyBwcm92aWRlcyBvbmUgZGF0YSBvYmplY3QgYW5kIHNvbWUgZnVuY3Rpb25zLiAgVGhlIGZ1bmN0aW9ucwotbWlycm9yIGRlZmluaXRpb25zIGluIHRoZSBQeXRob24gQyBoZWFkZXIgZmlsZXMuCitUaGUgbW9kdWxlIGFsc28gcHJvdmlkZXMgYSBtYXBwaW5nIGZyb20gbnVtZXJpYyBjb2RlcyB0byBuYW1lcyBhbmQgc29tZQorZnVuY3Rpb25zLiAgVGhlIGZ1bmN0aW9ucyBtaXJyb3IgZGVmaW5pdGlvbnMgaW4gdGhlIFB5dGhvbiBDIGhlYWRlciBmaWxlcy4KIAogCiAuLiBkYXRhOjogdG9rX25hbWUKQEAgLTM5LDYgKzM5LDY1IEBACiAgICBSZXR1cm4gdHJ1ZSBpZiAqeCogaXMgdGhlIG1hcmtlciBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgaW5wdXQuCiAKIAorVGhlIHRva2VuIGNvbnN0YW50cyBhcmU6CisKKy4uIGRhdGE6OiBFTkRNQVJLRVIKKyAgICAgICAgICBOQU1FCisgICAgICAgICAgTlVNQkVSCisgICAgICAgICAgU1RSSU5HCisgICAgICAgICAgTkVXTElORQorICAgICAgICAgIElOREVOVAorICAgICAgICAgIERFREVOVAorICAgICAgICAgIExQQVIKKyAgICAgICAgICBSUEFSCisgICAgICAgICAgTFNRQgorICAgICAgICAgIFJTUUIKKyAgICAgICAgICBDT0xPTgorICAgICAgICAgIENPTU1BCisgICAgICAgICAgU0VNSQorICAgICAgICAgIFBMVVMKKyAgICAgICAgICBNSU5VUworICAgICAgICAgIFNUQVIKKyAgICAgICAgICBTTEFTSAorICAgICAgICAgIFZCQVIKKyAgICAgICAgICBBTVBFUgorICAgICAgICAgIExFU1MKKyAgICAgICAgICBHUkVBVEVSCisgICAgICAgICAgRVFVQUwKKyAgICAgICAgICBET1QKKyAgICAgICAgICBQRVJDRU5UCisgICAgICAgICAgQkFDS1FVT1RFCisgICAgICAgICAgTEJSQUNFCisgICAgICAgICAgUkJSQUNFCisgICAgICAgICAgRVFFUVVBTAorICAgICAgICAgIE5PVEVRVUFMCisgICAgICAgICAgTEVTU0VRVUFMCisgICAgICAgICAgR1JFQVRFUkVRVUFMCisgICAgICAgICAgVElMREUKKyAgICAgICAgICBDSVJDVU1GTEVYCisgICAgICAgICAgTEVGVFNISUZUCisgICAgICAgICAgUklHSFRTSElGVAorICAgICAgICAgIERPVUJMRVNUQVIKKyAgICAgICAgICBQTFVTRVFVQUwKKyAgICAgICAgICBNSU5FUVVBTAorICAgICAgICAgIFNUQVJFUVVBTAorICAgICAgICAgIFNMQVNIRVFVQUwKKyAgICAgICAgICBQRVJDRU5URVFVQUwKKyAgICAgICAgICBBTVBFUkVRVUFMCisgICAgICAgICAgVkJBUkVRVUFMCisgICAgICAgICAgQ0lSQ1VNRkxFWEVRVUFMCisgICAgICAgICAgTEVGVFNISUZURVFVQUwKKyAgICAgICAgICBSSUdIVFNISUZURVFVQUwKKyAgICAgICAgICBET1VCTEVTVEFSRVFVQUwKKyAgICAgICAgICBET1VCTEVTTEFTSAorICAgICAgICAgIERPVUJMRVNMQVNIRVFVQUwKKyAgICAgICAgICBBVAorICAgICAgICAgIE9QCisgICAgICAgICAgRVJST1JUT0tFTgorICAgICAgICAgIE5fVE9LRU5TCisgICAgICAgICAgTlRfT0ZGU0VUCisKKwogLi4gc2VlYWxzbzo6CiAKICAgIE1vZHVsZSA6bW9kOmBwYXJzZXJgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90b2tlbml6ZS5yc3QgYi9Eb2MvbGlicmFyeS90b2tlbml6ZS5yc3QKaW5kZXggMzZmNTgzOC4uMmE3ZGVhMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdG9rZW5pemUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Rva2VuaXplLnJzdApAQCAtMTMsNiArMTMsMTEgQEAKIHdlbGwsIG1ha2luZyBpdCB1c2VmdWwgZm9yIGltcGxlbWVudGluZyAicHJldHR5LXByaW50ZXJzLCIgaW5jbHVkaW5nIGNvbG9yaXplcnMKIGZvciBvbi1zY3JlZW4gZGlzcGxheXMuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYHRva2VuaXplIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi90b2tlbml6ZS5weT92aWV3PW1hcmt1cD5gXworCiBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBpcyBhIDp0ZXJtOmBnZW5lcmF0b3JgOgogCiAuLiBmdW5jdGlvbjo6IGdlbmVyYXRlX3Rva2VucyhyZWFkbGluZSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RyYWNlLnJzdCBiL0RvYy9saWJyYXJ5L3RyYWNlLnJzdAppbmRleCAzMDNjYjFlLi4yZTlkMmI0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90cmFjZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHJhY2UucnN0CkBAIC0xLDMgKzEsNCBAQAorCiA6bW9kOmB0cmFjZWAgLS0tIFRyYWNlIG9yIHRyYWNrIFB5dGhvbiBzdGF0ZW1lbnQgZXhlY3V0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTEwLDEwICsxMSwxNCBAQAogbGlzdCBmdW5jdGlvbnMgZXhlY3V0ZWQgZHVyaW5nIGEgcHJvZ3JhbSBydW4uICBJdCBjYW4gYmUgdXNlZCBpbiBhbm90aGVyIHByb2dyYW0KIG9yIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgdHJhY2UgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3RyYWNlLnB5P3ZpZXc9bWFya3VwPmBfCiAKIC4uIF90cmFjZS1jbGk6CiAKLUNvbW1hbmQgTGluZSBVc2FnZQorQ29tbWFuZC1MaW5lIFVzYWdlCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHRyYWNlYCBtb2R1bGUgY2FuIGJlIGludm9rZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgSXQgY2FuIGJlIGFzCkBAIC0yMSw4MiArMjYsODkgQEAKIAogICAgcHl0aG9uIC1tIHRyYWNlIC0tY291bnQgLUMgLiBzb21lZmlsZS5weSAuLi4KIAotVGhlIGFib3ZlIHdpbGwgZXhlY3V0ZSA6ZmlsZTpgc29tZWZpbGUucHlgIGFuZCBnZW5lcmF0ZSBhbm5vdGF0ZWQgbGlzdGluZ3Mgb2YgYWxsCi1QeXRob24gbW9kdWxlcyBpbXBvcnRlZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KK1RoZSBhYm92ZSB3aWxsIGV4ZWN1dGUgOmZpbGU6YHNvbWVmaWxlLnB5YCBhbmQgZ2VuZXJhdGUgYW5ub3RhdGVkIGxpc3RpbmdzIG9mCithbGwgUHl0aG9uIG1vZHVsZXMgaW1wb3J0ZWQgZHVyaW5nIHRoZSBleGVjdXRpb24gaW50byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAKLU1ldGEtb3B0aW9ucwotXl5eXl5eXl5eXl5eCisuLiBwcm9ncmFtOjogdHJhY2UKIAotYGAtLWhlbHBgYAorLi4gY21kb3B0aW9uOjogLS1oZWxwCiAKICAgIERpc3BsYXkgdXNhZ2UgYW5kIGV4aXQuCiAKLWBgLS12ZXJzaW9uYGAKKy4uIGNtZG9wdGlvbjo6IC0tdmVyc2lvbgogCiAgICBEaXNwbGF5IHRoZSB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUgYW5kIGV4aXQuCiAKIE1haW4gb3B0aW9ucwogXl5eXl5eXl5eXl5eCiAKLVRoZSBgYC0tbGlzdGZ1bmNzYGAgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIHRoZSBgYC0tdHJhY2VgYCBhbmQKLWBgLS1jb3VudGBgIG9wdGlvbnMgLiBXaGVuIGBgLS1saXN0ZnVuY3NgYCBpcyBwcm92aWRlZCwgbmVpdGhlciBgYC0tY291bnRzYGAKLW5vciBgYC0tdHJhY2VgYCBhcmUgYWNjZXB0ZWQsIGFuZCB2aWNlIHZlcnNhLgorQXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGludm9raW5nCis6bW9kOmB0cmFjZWAuICBUaGUgOm9wdGlvbjpgLS1saXN0ZnVuY3MgPC1sPmAgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoCit0aGUgOm9wdGlvbjpgLS10cmFjZSA8LXQ+YCBhbmQgOm9wdGlvbjpgLS1jb3VudHMgPC1jPmAgb3B0aW9ucyAuIFdoZW4KKzpvcHRpb246YC0tbGlzdGZ1bmNzIDwtbD5gIGlzIHByb3ZpZGVkLCBuZWl0aGVyIDpvcHRpb246YC0tY291bnRzIDwtYz5gIG5vcgorOm9wdGlvbjpgLS10cmFjZSA8LXQ+YCBhcmUgYWNjZXB0ZWQsIGFuZCB2aWNlIHZlcnNhLgogCi1gYC0tY291bnQsIC1jYGAKKy4uIHByb2dyYW06OiB0cmFjZQorCisuLiBjbWRvcHRpb246OiAtYywgLS1jb3VudAogCiAgICBQcm9kdWNlIGEgc2V0IG9mIGFubm90YXRlZCBsaXN0aW5nIGZpbGVzIHVwb24gcHJvZ3JhbSBjb21wbGV0aW9uIHRoYXQgc2hvd3MKLSAgIGhvdyBtYW55IHRpbWVzIGVhY2ggc3RhdGVtZW50IHdhcyBleGVjdXRlZC4KLSAgIFNlZSBhbHNvIGBgLS1jb3ZlcmRpcmBgLCBgYC0tZmlsZWBgLCBgYC0tbm8tcmVwb3J0YGAgYmVsb3cuCisgICBob3cgbWFueSB0aW1lcyBlYWNoIHN0YXRlbWVudCB3YXMgZXhlY3V0ZWQuICBTZWUgYWxzbworICAgOm9wdGlvbjpgLS1jb3ZlcmRpciA8LUM+YCwgOm9wdGlvbjpgLS1maWxlIDwtZj5gIGFuZAorICAgOm9wdGlvbjpgLS1uby1yZXBvcnQgPC1SPmAgYmVsb3cuCiAKLWBgLS10cmFjZSwgLXRgYAorLi4gY21kb3B0aW9uOjogLXQsIC0tdHJhY2UKIAogICAgRGlzcGxheSBsaW5lcyBhcyB0aGV5IGFyZSBleGVjdXRlZC4KIAotYGAtLWxpc3RmdW5jcywgLWxgYAorLi4gY21kb3B0aW9uOjogLWwsIC0tbGlzdGZ1bmNzCiAKICAgIERpc3BsYXkgdGhlIGZ1bmN0aW9ucyBleGVjdXRlZCBieSBydW5uaW5nIHRoZSBwcm9ncmFtLgogCi1gYC0tcmVwb3J0LCAtcmBgCisuLiBjbWRvcHRpb246OiAtciwgLS1yZXBvcnQKIAotICAgUHJvZHVjZSBhbiBhbm5vdGF0ZWQgbGlzdCBmcm9tIGFuIGVhcmxpZXIgcHJvZ3JhbSBydW4gdGhhdCB1c2VkIHRoZSBgYC0tY291bnRgYAotICAgYW5kIGBgLS1maWxlYGAgb3B0aW9uLiBEbyBub3QgZXhlY3V0ZSBhbnkgY29kZS4KKyAgIFByb2R1Y2UgYW4gYW5ub3RhdGVkIGxpc3QgZnJvbSBhbiBlYXJsaWVyIHByb2dyYW0gcnVuIHRoYXQgdXNlZCB0aGUKKyAgIDpvcHRpb246YC0tY291bnQgPC1jPmAgYW5kIDpvcHRpb246YC0tZmlsZSA8LWY+YCBvcHRpb24uICBUaGlzIGRvZXMgbm90CisgICBleGVjdXRlIGFueSBjb2RlLgogCi1gYC0tdHJhY2tjYWxscywgLVRgYAorLi4gY21kb3B0aW9uOjogLVQsIC0tdHJhY2tjYWxscwogCiAgICBEaXNwbGF5IHRoZSBjYWxsaW5nIHJlbGF0aW9uc2hpcHMgZXhwb3NlZCBieSBydW5uaW5nIHRoZSBwcm9ncmFtLgogCiBNb2RpZmllcnMKIF5eXl5eXl5eXgogCi1gYC0tZmlsZT08ZmlsZT4sIC1mYGAKKy4uIHByb2dyYW06OiB0cmFjZQogCi0gICBOYW1lIG9mIGEgZmlsZSB0byBhY2N1bXVsYXRlIGNvdW50cyBvdmVyIHNldmVyYWwgdHJhY2luZyBydW5zLiBTaG91bGQgYmUgdXNlZAotICAgd2l0aCB0aGUgYGAtLWNvdW50YGAgb3B0aW9uLgorLi4gY21kb3B0aW9uOjogLWYsIC0tZmlsZT08ZmlsZT4KIAotYGAtLWNvdmVyZGlyPTxkaXI+LCAtQ2BgCisgICBOYW1lIG9mIGEgZmlsZSB0byBhY2N1bXVsYXRlIGNvdW50cyBvdmVyIHNldmVyYWwgdHJhY2luZyBydW5zLiAgU2hvdWxkIGJlCisgICB1c2VkIHdpdGggdGhlIDpvcHRpb246YC0tY291bnQgPC1jPmAgb3B0aW9uLgogCi0gICBEaXJlY3Rvcnkgd2hlcmUgdGhlIHJlcG9ydCBmaWxlcyBnby4gVGhlIGNvdmVyYWdlIHJlcG9ydCBmb3IKLSAgIGBgcGFja2FnZS5tb2R1bGVgYCBpcyB3cml0dGVuIHRvIGZpbGUgYGBkaXIvcGFja2FnZS9tb2R1bGUuY292ZXJgYC4KKy4uIGNtZG9wdGlvbjo6IC1DLCAtLWNvdmVyZGlyPTxkaXI+CiAKLWBgLS1taXNzaW5nLCAtbWBgCisgICBEaXJlY3Rvcnkgd2hlcmUgdGhlIHJlcG9ydCBmaWxlcyBnby4gIFRoZSBjb3ZlcmFnZSByZXBvcnQgZm9yCisgICBgYHBhY2thZ2UubW9kdWxlYGAgaXMgd3JpdHRlbiB0byBmaWxlIDpmaWxlOmB7ZGlyfS97cGFja2FnZX0ve21vZHVsZX0uY292ZXJgLgorCisuLiBjbWRvcHRpb246OiAtbSwgLS1taXNzaW5nCiAKICAgIFdoZW4gZ2VuZXJhdGluZyBhbm5vdGF0ZWQgbGlzdGluZ3MsIG1hcmsgbGluZXMgd2hpY2ggd2VyZSBub3QgZXhlY3V0ZWQgd2l0aAotICAgJ2BgPj4+Pj4+YGAnLgorICAgYGA+Pj4+Pj5gYC4KIAotYGAtLXN1bW1hcnksIC1zYGAKKy4uIGNtZG9wdGlvbjo6IC1zLCAtLXN1bW1hcnkKIAotICAgV2hlbiB1c2luZyBgYC0tY291bnRgYCBvciBgYC0tcmVwb3J0YGAsIHdyaXRlIGEgYnJpZWYgc3VtbWFyeSB0bwotICAgc3Rkb3V0IGZvciBlYWNoIGZpbGUgcHJvY2Vzc2VkLgorICAgV2hlbiB1c2luZyA6b3B0aW9uOmAtLWNvdW50IDwtYz5gIG9yIDpvcHRpb246YC0tcmVwb3J0IDwtcj5gLCB3cml0ZSBhIGJyaWVmCisgICBzdW1tYXJ5IHRvIHN0ZG91dCBmb3IgZWFjaCBmaWxlIHByb2Nlc3NlZC4KIAotYGAtLW5vLXJlcG9ydCwgLVJgYAorLi4gY21kb3B0aW9uOjogLVIsIC0tbm8tcmVwb3J0CiAKICAgIERvIG5vdCBnZW5lcmF0ZSBhbm5vdGF0ZWQgbGlzdGluZ3MuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgaW50ZW5kIHRvIG1ha2UKLSAgIHNldmVyYWwgcnVucyB3aXRoIGBgLS1jb3VudGBgIHRoZW4gcHJvZHVjZSBhIHNpbmdsZSBzZXQgb2YgYW5ub3RhdGVkCi0gICBsaXN0aW5ncyBhdCB0aGUgZW5kLgorICAgc2V2ZXJhbCBydW5zIHdpdGggOm9wdGlvbjpgLS1jb3VudCA8LWM+YCwgYW5kIHRoZW4gcHJvZHVjZSBhIHNpbmdsZSBzZXQgb2YKKyAgIGFubm90YXRlZCBsaXN0aW5ncyBhdCB0aGUgZW5kLgogCi1gYC0tdGltaW5nLCAtZ2BgCisuLiBjbWRvcHRpb246OiAtZywgLS10aW1pbmcKIAotICAgUHJlZml4IGVhY2ggbGluZSB3aXRoIHRoZSB0aW1lIHNpbmNlIHRoZSBwcm9ncmFtIHN0YXJ0ZWQuIE9ubHkgdXNlZCB3aGlsZQorICAgUHJlZml4IGVhY2ggbGluZSB3aXRoIHRoZSB0aW1lIHNpbmNlIHRoZSBwcm9ncmFtIHN0YXJ0ZWQuICBPbmx5IHVzZWQgd2hpbGUKICAgIHRyYWNpbmcuCiAKIEZpbHRlcnMKQEAgLTEwNCw3OCArMTE2LDc5IEBACiAKIFRoZXNlIG9wdGlvbnMgbWF5IGJlIHJlcGVhdGVkIG11bHRpcGxlIHRpbWVzLgogCi1gYC0taWdub3JlLW1vZHVsZT08bW9kPmBgCisuLiBwcm9ncmFtOjogdHJhY2UKIAotICAgQWNjZXB0cyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGUgbmFtZXMuIElnbm9yZSBlYWNoIG9mIHRoZSBuYW1lZAotICAgbW9kdWxlcyBhbmQgaXRzIHN1Ym1vZHVsZXMgKGlmIGl0IGlzIGEgcGFja2FnZSkuCisuLiBjbWRvcHRpb246OiAtLWlnbm9yZS1tb2R1bGU9PG1vZD4KIAotYGAtLWlnbm9yZS1kaXI9PGRpcj5gYAorICAgSWdub3JlIGVhY2ggb2YgdGhlIGdpdmVuIG1vZHVsZSBuYW1lcyBhbmQgaXRzIHN1Ym1vZHVsZXMgKGlmIGl0IGlzIGEKKyAgIHBhY2thZ2UpLiAgVGhlIGFyZ3VtZW50IGNhbiBiZSBhIGxpc3Qgb2YgbmFtZXMgc2VwYXJhdGVkIGJ5IGEgY29tbWEuCiAKLSAgIElnbm9yZSBhbGwgbW9kdWxlcyBhbmQgcGFja2FnZXMgaW4gdGhlIG5hbWVkIGRpcmVjdG9yeSBhbmQgc3ViZGlyZWN0b3JpZXMKLSAgIChtdWx0aXBsZSBkaXJlY3RvcmllcyBjYW4gYmUgam9pbmVkIGJ5IGBgb3MucGF0aHNlcGBgKS4KKy4uIGNtZG9wdGlvbjo6IC0taWdub3JlLWRpcj08ZGlyPgorCisgICBJZ25vcmUgYWxsIG1vZHVsZXMgYW5kIHBhY2thZ2VzIGluIHRoZSBuYW1lZCBkaXJlY3RvcnkgYW5kIHN1YmRpcmVjdG9yaWVzLgorICAgVGhlIGFyZ3VtZW50IGNhbiBiZSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgc2VwYXJhdGVkIGJ5IDpkYXRhOmBvcy5wYXRoc2VwYC4KIAogLi4gX3RyYWNlLWFwaToKIAotUHJvZ3JhbW1pbmcgSW50ZXJmYWNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb2dyYW1tYXRpYyBJbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gY2xhc3M6OiBUcmFjZShbY291bnQ9MVssIHRyYWNlPTFbLCBjb3VudGZ1bmNzPTBbLCBjb3VudGNhbGxlcnM9MFssIGlnbm9yZW1vZHM9KClbLCBpZ25vcmVkaXJzPSgpWywgaW5maWxlPU5vbmVbLCBvdXRmaWxlPU5vbmVbLCB0aW1pbmc9RmFsc2VdXV1dXV1dXV0pCiAKLS4uIGNsYXNzOjogVHJhY2UoY291bnQ9MSwgdHJhY2U9MSwgY291bnRmdW5jcz0wLCBjb3VudGNhbGxlcnM9MCwgaWdub3JlbW9kcz0oKSwgaWdub3JlZGlycz0oKSwgaW5maWxlPU5vbmUsIG91dGZpbGU9Tm9uZSwgdGltaW5nPUZhbHNlKQorICAgQ3JlYXRlIGFuIG9iamVjdCB0byB0cmFjZSBleGVjdXRpb24gb2YgYSBzaW5nbGUgc3RhdGVtZW50IG9yIGV4cHJlc3Npb24uICBBbGwKKyAgIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsLiAgKmNvdW50KiBlbmFibGVzIGNvdW50aW5nIG9mIGxpbmUgbnVtYmVycy4gICp0cmFjZSoKKyAgIGVuYWJsZXMgbGluZSBleGVjdXRpb24gdHJhY2luZy4gICpjb3VudGZ1bmNzKiBlbmFibGVzIGxpc3Rpbmcgb2YgdGhlCisgICBmdW5jdGlvbnMgY2FsbGVkIGR1cmluZyB0aGUgcnVuLiAgKmNvdW50Y2FsbGVycyogZW5hYmxlcyBjYWxsIHJlbGF0aW9uc2hpcAorICAgdHJhY2tpbmcuICAqaWdub3JlbW9kcyogaXMgYSBsaXN0IG9mIG1vZHVsZXMgb3IgcGFja2FnZXMgdG8gaWdub3JlLgorICAgKmlnbm9yZWRpcnMqIGlzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB3aG9zZSBtb2R1bGVzIG9yIHBhY2thZ2VzIHNob3VsZCBiZQorICAgaWdub3JlZC4gICppbmZpbGUqIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGZyb20gd2hpY2ggdG8gcmVhZCBzdG9yZWQgY291bnQKKyAgIGluZm9ybWF0aW9uLiAgKm91dGZpbGUqIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIHdoaWNoIHRvIHdyaXRlIHVwZGF0ZWQKKyAgIGNvdW50IGluZm9ybWF0aW9uLiAgKnRpbWluZyogZW5hYmxlcyBhIHRpbWVzdGFtcCByZWxhdGl2ZSB0byB3aGVuIHRyYWNpbmcgd2FzCisgICBzdGFydGVkIHRvIGJlIGRpc3BsYXllZC4KIAotICAgQ3JlYXRlIGFuIG9iamVjdCB0byB0cmFjZSBleGVjdXRpb24gb2YgYSBzaW5nbGUgc3RhdGVtZW50IG9yIGV4cHJlc3Npb24uIEFsbAotICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwuICAqY291bnQqIGVuYWJsZXMgY291bnRpbmcgb2YgbGluZSBudW1iZXJzLiAqdHJhY2UqCi0gICBlbmFibGVzIGxpbmUgZXhlY3V0aW9uIHRyYWNpbmcuICAqY291bnRmdW5jcyogZW5hYmxlcyBsaXN0aW5nIG9mIHRoZSBmdW5jdGlvbnMKLSAgIGNhbGxlZCBkdXJpbmcgdGhlIHJ1bi4gICpjb3VudGNhbGxlcnMqIGVuYWJsZXMgY2FsbCByZWxhdGlvbnNoaXAgdHJhY2tpbmcuCi0gICAqaWdub3JlbW9kcyogaXMgYSBsaXN0IG9mIG1vZHVsZXMgb3IgcGFja2FnZXMgdG8gaWdub3JlLiAgKmlnbm9yZWRpcnMqIGlzIGEgbGlzdAotICAgb2YgZGlyZWN0b3JpZXMgd2hvc2UgbW9kdWxlcyBvciBwYWNrYWdlcyBzaG91bGQgYmUgaWdub3JlZC4gICppbmZpbGUqIGlzIHRoZQotICAgbmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoIHRvIHJlYWQgc3RvcmVkIGNvdW50IGluZm9ybWF0aW9uLiAgKm91dGZpbGUqIGlzCi0gICB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpbiB3aGljaCB0byB3cml0ZSB1cGRhdGVkIGNvdW50IGluZm9ybWF0aW9uLiAqdGltaW5nKgotICAgZW5hYmxlcyBhIHRpbWVzdGFtcCByZWxhdGl2ZSB0byB3aGVuIHRyYWNpbmcgd2FzIHN0YXJ0ZWQgdG8gYmUgZGlzcGxheWVkLgorICAgIC4uIG1ldGhvZDo6IHJ1bihjbWQpCiAKKyAgICAgICBFeGVjdXRlIHRoZSBjb21tYW5kIGFuZCBnYXRoZXIgc3RhdGlzdGljcyBmcm9tIHRoZSBleGVjdXRpb24gd2l0aAorICAgICAgIHRoZSBjdXJyZW50IHRyYWNpbmcgcGFyYW1ldGVycy4gICpjbWQqIG11c3QgYmUgYSBzdHJpbmcgb3IgY29kZSBvYmplY3QsCisgICAgICAgc3VpdGFibGUgZm9yIHBhc3NpbmcgaW50byA6ZnVuYzpgZXhlY2AuCiAKLS4uIG1ldGhvZDo6IFRyYWNlLnJ1bihjbWQpCisgICAgLi4gbWV0aG9kOjogcnVuY3R4KGNtZFssIGdsb2JhbHM9Tm9uZVssIGxvY2Fscz1Ob25lXV0pCiAKLSAgIFJ1biAqY21kKiB1bmRlciBjb250cm9sIG9mIHRoZSA6Y2xhc3M6YFRyYWNlYCBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCB0cmFjaW5nIHBhcmFtZXRlcnMuCi0gICAqY21kKiBtdXN0IGJlIGEgc3RyaW5nIG9yIGNvZGUgb2JqZWN0LCBzdWl0YWJsZSBmb3IgcGFzc2luZyBpbnRvIDpmdW5jOmBleGVjYC4KKyAgICAgICBFeGVjdXRlIHRoZSBjb21tYW5kIGFuZCBnYXRoZXIgc3RhdGlzdGljcyBmcm9tIHRoZSBleGVjdXRpb24gd2l0aCB0aGUKKyAgICAgICBjdXJyZW50IHRyYWNpbmcgcGFyYW1ldGVycywgaW4gdGhlIGRlZmluZWQgZ2xvYmFsIGFuZCBsb2NhbAorICAgICAgIGVudmlyb25tZW50cy4gIElmIG5vdCBkZWZpbmVkLCAqZ2xvYmFscyogYW5kICpsb2NhbHMqIGRlZmF1bHQgdG8gZW1wdHkKKyAgICAgICBkaWN0aW9uYXJpZXMuCiAKKyAgICAuLiBtZXRob2Q6OiBydW5mdW5jKGZ1bmMsICphcmdzLCAqKmt3ZHMpCiAKLS4uIG1ldGhvZDo6IFRyYWNlLnJ1bmN0eChjbWQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpCisgICAgICAgQ2FsbCAqZnVuYyogd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzIHVuZGVyIGNvbnRyb2wgb2YgdGhlIDpjbGFzczpgVHJhY2VgCisgICAgICAgb2JqZWN0IHdpdGggdGhlIGN1cnJlbnQgdHJhY2luZyBwYXJhbWV0ZXJzLgogCi0gICBSdW4gKmNtZCogdW5kZXIgY29udHJvbCBvZiB0aGUgOmNsYXNzOmBUcmFjZWAgb2JqZWN0IHdpdGggdGhlIGN1cnJlbnQgdHJhY2luZyBwYXJhbWV0ZXJzCi0gICBpbiB0aGUgZGVmaW5lZCBnbG9iYWwgYW5kIGxvY2FsIGVudmlyb25tZW50cy4gIElmIG5vdCBkZWZpbmVkLCAqZ2xvYmFscyogYW5kCi0gICAqbG9jYWxzKiBkZWZhdWx0IHRvIGVtcHR5IGRpY3Rpb25hcmllcy4KKyAgICAuLiBtZXRob2Q6OiByZXN1bHRzKCkKIAotCi0uLiBtZXRob2Q6OiBUcmFjZS5ydW5mdW5jKGZ1bmMsICphcmdzLCAqKmt3ZHMpCi0KLSAgIENhbGwgKmZ1bmMqIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cyB1bmRlciBjb250cm9sIG9mIHRoZSA6Y2xhc3M6YFRyYWNlYCBvYmplY3QKLSAgIHdpdGggdGhlIGN1cnJlbnQgdHJhY2luZyBwYXJhbWV0ZXJzLgotCi0uLiBtZXRob2Q6OiBUcmFjZS5yZXN1bHRzKCkKLQotICAgUmV0dXJuIGEgOmNsYXNzOmBDb3ZlcmFnZVJlc3VsdHNgIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBjdW11bGF0aXZlIHJlc3VsdHMKLSAgIG9mIGFsbCBwcmV2aW91cyBjYWxscyB0byBgYHJ1bmBgLCBgYHJ1bmN0eGBgIGFuZCBgYHJ1bmZ1bmNgYCBmb3IgdGhlIGdpdmVuCi0gICA6Y2xhc3M6YFRyYWNlYCBpbnN0YW5jZS4gRG9lcyBub3QgcmVzZXQgdGhlIGFjY3VtdWxhdGVkIHRyYWNlIHJlc3VsdHMuCisgICAgICAgUmV0dXJuIGEgOmNsYXNzOmBDb3ZlcmFnZVJlc3VsdHNgIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBjdW11bGF0aXZlCisgICAgICAgcmVzdWx0cyBvZiBhbGwgcHJldmlvdXMgY2FsbHMgdG8gYGBydW5gYCwgYGBydW5jdHhgYCBhbmQgYGBydW5mdW5jYGAKKyAgICAgICBmb3IgdGhlIGdpdmVuIDpjbGFzczpgVHJhY2VgIGluc3RhbmNlLiAgRG9lcyBub3QgcmVzZXQgdGhlIGFjY3VtdWxhdGVkCisgICAgICAgdHJhY2UgcmVzdWx0cy4KIAogLi4gY2xhc3M6OiBDb3ZlcmFnZVJlc3VsdHMKIAotICAgQSBjb250YWluZXIgZm9yIGNvdmVyYWdlIHJlc3VsdHMsIGNyZWF0ZWQgYnkgOm1ldGg6YFRyYWNlLnJlc3VsdHNgLiBTaG91bGQgbm90Ci0gICBiZSBjcmVhdGVkIGRpcmVjdGx5IGJ5IHRoZSB1c2VyLgorICAgQSBjb250YWluZXIgZm9yIGNvdmVyYWdlIHJlc3VsdHMsIGNyZWF0ZWQgYnkgOm1ldGg6YFRyYWNlLnJlc3VsdHNgLiAgU2hvdWxkCisgICBub3QgYmUgY3JlYXRlZCBkaXJlY3RseSBieSB0aGUgdXNlci4KIAotLi4gbWV0aG9kOjogQ292ZXJhZ2VSZXN1bHRzLnVwZGF0ZShvdGhlcikKKyAgICAuLiBtZXRob2Q6OiB1cGRhdGUob3RoZXIpCiAKLSAgIE1lcmdlIGluIGRhdGEgZnJvbSBhbm90aGVyIDpjbGFzczpgQ292ZXJhZ2VSZXN1bHRzYCBvYmplY3QuCisgICAgICAgTWVyZ2UgaW4gZGF0YSBmcm9tIGFub3RoZXIgOmNsYXNzOmBDb3ZlcmFnZVJlc3VsdHNgIG9iamVjdC4KIAotLi4gbWV0aG9kOjogQ292ZXJhZ2VSZXN1bHRzLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9RmFsc2UsIGNvdmVyZGlyPU5vbmUpCisgICAgLi4gbWV0aG9kOjogd3JpdGVfcmVzdWx0cyhbc2hvd19taXNzaW5nPVRydWVbLCBzdW1tYXJ5PUZhbHNlWywgY292ZXJkaXI9Tm9uZV1dXSkKIAotICAgV3JpdGUgY292ZXJhZ2UgcmVzdWx0cy4gU2V0ICpzaG93X21pc3NpbmcqIHRvIHNob3cgbGluZXMgdGhhdCBoYWQgbm8gaGl0cy4KLSAgIFNldCAqc3VtbWFyeSogdG8gaW5jbHVkZSBpbiB0aGUgb3V0cHV0IHRoZSBjb3ZlcmFnZSBzdW1tYXJ5IHBlciBtb2R1bGUuICpjb3ZlcmRpcioKLSAgIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIGNvdmVyYWdlIHJlc3VsdCBmaWxlcyB3aWxsIGJlIG91dHB1dC4KLSAgIElmIGBgTm9uZWBgLCB0aGUgcmVzdWx0cyBmb3IgZWFjaCBzb3VyY2UgZmlsZSBhcmUgcGxhY2VkIGluIGl0cyBkaXJlY3RvcnkuCisgICAgICAgV3JpdGUgY292ZXJhZ2UgcmVzdWx0cy4gIFNldCAqc2hvd19taXNzaW5nKiB0byBzaG93IGxpbmVzIHRoYXQgaGFkIG5vCisgICAgICAgaGl0cy4gIFNldCAqc3VtbWFyeSogdG8gaW5jbHVkZSBpbiB0aGUgb3V0cHV0IHRoZSBjb3ZlcmFnZSBzdW1tYXJ5IHBlcgorICAgICAgIG1vZHVsZS4gICpjb3ZlcmRpciogc3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgY292ZXJhZ2UKKyAgICAgICByZXN1bHQgZmlsZXMgd2lsbCBiZSBvdXRwdXQuICBJZiBgYE5vbmVgYCwgdGhlIHJlc3VsdHMgZm9yIGVhY2ggc291cmNlCisgICAgICAgZmlsZSBhcmUgcGxhY2VkIGluIGl0cyBkaXJlY3RvcnkuCiAKLS4uCi0KLUEgc2ltcGxlIGV4YW1wbGUgZGVtb25zdHJhdGluZyB0aGUgdXNlIG9mIHRoZSBwcm9ncmFtbWluZyBpbnRlcmZhY2U6OgorQSBzaW1wbGUgZXhhbXBsZSBkZW1vbnN0cmF0aW5nIHRoZSB1c2Ugb2YgdGhlIHByb2dyYW1tYXRpYyBpbnRlcmZhY2U6OgogCiAgICBpbXBvcnQgc3lzCiAgICBpbXBvcnQgdHJhY2UKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3R0ay5yc3QgYi9Eb2MvbGlicmFyeS90dGsucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZmRlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS90dGsucnN0CkBAIC0wLDAgKzEsMTQwNyBAQAorOm1vZDpgdHRrYCAtLS0gVGsgdGhlbWVkIHdpZGdldHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHR0aworICAgOnN5bm9wc2lzOiBUayB0aGVtZWQgd2lkZ2V0IHNldAorLi4gc2VjdGlvbmF1dGhvcjo6IEd1aWxoZXJtZSBQb2xvIDxnZ3BvbG9AZ21haWwuY29tPgorCisKKy4uIGluZGV4Ojogc2luZ2xlOiB0dGsKKworVGhlIDptb2Q6YHR0a2AgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgVGsgdGhlbWVkIHdpZGdldCBzZXQsIHdoaWNoIGhhcworYmVlbiBpbnRyb2R1Y2VkIGluIFRrIDguNS4gSWYgUHl0aG9uIGlzIG5vdCBjb21waWxlZCBhZ2FpbnN0IFRrIDguNSBjb2RlIG1heQorc3RpbGwgdXNlIHRoaXMgbW9kdWxlIGFzIGxvbmcgYXMgVGlsZSBpcyBpbnN0YWxsZWQuIEhvd2V2ZXIsIHNvbWUgZmVhdHVyZXMKK3Byb3ZpZGVkIGJ5IHRoZSBuZXcgVGssIGxpa2UgYW50aS1hbGlhc2VkIGZvbnQgcmVuZGVyaW5nIHVuZGVyIFgxMSwgd2luZG93Cit0cmFuc3BhcmVuY3kgKG9uIFgxMSB5b3Ugd2lsbCBuZWVkIGEgY29tcG9zaXRpb24gd2luZG93IG1hbmFnZXIpIHdpbGwgYmUKK21pc3NpbmcuCisKK1RoZSBiYXNpYyBpZGVhIG9mIDptb2Q6YHR0a2AgaXMgdG8gc2VwYXJhdGUsIHRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZSBjb2RlCitpbXBsZW1lbnRpbmcgYSB3aWRnZXQncyBiZWhhdmlvciBmcm9tIHRoZSBjb2RlIGltcGxlbWVudGluZyBpdHMgYXBwZWFyYW5jZS4KKworCisuLiBzZWVhbHNvOjoKKworICAgYFRrIFdpZGdldCBTdHlsaW5nIFN1cHBvcnQgPGh0dHA6Ly93d3cudGNsLnRrL2NnaS1iaW4vdGN0L3RpcC80OD5gXworICAgICAgVGhlIGRvY3VtZW50IHdoaWNoIGJyb3VnaHQgdXAgdGhlbWluZyBzdXBwb3J0IGZvciBUaworCisKK1VzaW5nIFR0aworLS0tLS0tLS0tCisKK1RvIHN0YXJ0IHVzaW5nIFR0aywgaW1wb3J0IGl0cyBtb2R1bGU6OgorCisgICBpbXBvcnQgdHRrCisKK0J1dCBjb2RlIGxpa2UgdGhpczo6CisKKyAgIGZyb20gVGtpbnRlciBpbXBvcnQgKgorCittYXkgb3B0aW9uYWxseSB3YW50IHRvIHVzZSB0aGlzOjoKKworICAgZnJvbSBUa2ludGVyIGltcG9ydCAqCisgICBmcm9tIHR0ayBpbXBvcnQgKgorCitBbmQgdGhlbiBzZXZlcmFsIDptb2Q6YHR0a2Agd2lkZ2V0cyAoOmNsYXNzOmBCdXR0b25gLCA6Y2xhc3M6YENoZWNrYnV0dG9uYCwKKzpjbGFzczpgRW50cnlgLCA6Y2xhc3M6YEZyYW1lYCwgOmNsYXNzOmBMYWJlbGAsIDpjbGFzczpgTGFiZWxGcmFtZWAsCis6Y2xhc3M6YE1lbnVidXR0b25gLCA6Y2xhc3M6YFBhbmVkV2luZG93YCwgOmNsYXNzOmBSYWRpb2J1dHRvbmAsIDpjbGFzczpgU2NhbGVgCithbmQgOmNsYXNzOmBTY3JvbGxiYXJgKSB3aWxsIGF1dG9tYXRpY2FsbHkgc3Vic3RpdHV0ZSBmb3IgdGhlIFRrIHdpZGdldHMuCisKK1RoaXMgaGFzIHRoZSBkaXJlY3QgYmVuZWZpdCBvZiB1c2luZyB0aGUgbmV3IHdpZGdldHMsIGdpdmluZyBiZXR0ZXIgbG9vayAmIGZlZWwKK2Fjcm9zcyBwbGF0Zm9ybXMsIGJ1dCBiZSBhd2FyZSB0aGF0IHRoZXkgYXJlIG5vdCB0b3RhbGx5IGNvbXBhdGlibGUuIFRoZSBtYWluCitkaWZmZXJlbmNlIGlzIHRoYXQgd2lkZ2V0IG9wdGlvbnMgc3VjaCBhcyAiZmciLCAiYmciIGFuZCBvdGhlcnMgcmVsYXRlZCB0bword2lkZ2V0IHN0eWxpbmcgYXJlIG5vIGxvbmdlciBwcmVzZW50IGluIFR0ayB3aWRnZXRzLiBVc2UgOmNsYXNzOmB0dGsuU3R5bGVgIHRvCithY2hpZXZlIHRoZSBzYW1lIChvciBiZXR0ZXIpIHN0eWxpbmcuCisKKy4uIHNlZWFsc286OgorCisgICBgQ29udmVydGluZyBleGlzdGluZyBhcHBsaWNhdGlvbnMgdG8gdXNlIHRoZSBUaWxlIHdpZGdldHMgPGh0dHA6Ly90a3RhYmxlLnNvdXJjZWZvcmdlLm5ldC90aWxlL2RvYy9jb252ZXJ0aW5nLnR4dD5gXworICAgICBBIHRleHQgd2hpY2ggdGFsa3MgaW4gVGNsIHRlcm1zIGFib3V0IGRpZmZlcmVuY2VzIHR5cGljYWxseSBmb3VuZCB3aGVuCisgICAgIGNvbnZlcnRpbmcgYXBwbGljYXRpb25zIHRvIHVzZSB0aGUgbmV3IHdpZGdldHMuCisKKworVHRrIFdpZGdldHMKKy0tLS0tLS0tLS0tCisKK1R0ayBjb21lcyB3aXRoIDE3IHdpZGdldHMsIDExIG9mIHdoaWNoIGFscmVhZHkgZXhpc3QgaW4gVGtpbnRlcjoKKzpjbGFzczpgQnV0dG9uYCwgOmNsYXNzOmBDaGVja2J1dHRvbmAsIDpjbGFzczpgRW50cnlgLCA6Y2xhc3M6YEZyYW1lYCwKKzpjbGFzczpgTGFiZWxgLCA6Y2xhc3M6YExhYmVsRnJhbWVgLCA6Y2xhc3M6YE1lbnVidXR0b25gLAorOmNsYXNzOmBQYW5lZFdpbmRvd2AsIDpjbGFzczpgUmFkaW9idXR0b25gLCA6Y2xhc3M6YFNjYWxlYCBhbmQKKzpjbGFzczpgU2Nyb2xsYmFyYC4gVGhlIDYgbmV3IHdpZGdldCBjbGFzc2VzIGFyZTogOmNsYXNzOmBDb21ib2JveGAsCis6Y2xhc3M6YE5vdGVib29rYCwgOmNsYXNzOmBQcm9ncmVzc2JhcmAsIDpjbGFzczpgU2VwYXJhdG9yYCwKKzpjbGFzczpgU2l6ZWdyaXBgIGFuZCA6Y2xhc3M6YFRyZWV2aWV3YC4gIEFsbCBvZiB0aGVzZSBjbGFzc2VzIGFyZQorc3ViY2xhc3NlcyBvZiA6Y2xhc3M6YFdpZGdldGAuCisKK0FzIHNhaWQgcHJldmlvdXNseSwgeW91IHdpbGwgbm90aWNlIGNoYW5nZXMgaW4gbG9vay1hbmQtZmVlbCBhcyB3ZWxsIGluIHRoZQorc3R5bGluZyBjb2RlLiBUbyBkZW1vbnN0cmF0ZSB0aGUgbGF0dGVyLCBhIHZlcnkgc2ltcGxlIGV4YW1wbGUgaXMgc2hvd24gYmVsb3cuCisKK1RrIGNvZGU6OgorCisgICBsMSA9IFRraW50ZXIuTGFiZWwodGV4dD0iVGVzdCIsIGZnPSJibGFjayIsIGJnPSJ3aGl0ZSIpCisgICBsMiA9IFRraW50ZXIuTGFiZWwodGV4dD0iVGVzdCIsIGZnPSJibGFjayIsIGJnPSJ3aGl0ZSIpCisKKworQ29ycmVzcG9uZGluZyBUdGsgY29kZTo6CisKKyAgIHN0eWxlID0gdHRrLlN0eWxlKCkKKyAgIHN0eWxlLmNvbmZpZ3VyZSgiQlcuVExhYmVsIiwgZm9yZWdyb3VuZD0iYmxhY2siLCBiYWNrZ3JvdW5kPSJ3aGl0ZSIpCisKKyAgIGwxID0gdHRrLkxhYmVsKHRleHQ9IlRlc3QiLCBzdHlsZT0iQlcuVExhYmVsIikKKyAgIGwyID0gdHRrLkxhYmVsKHRleHQ9IlRlc3QiLCBzdHlsZT0iQlcuVExhYmVsIikKKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVHRrU3R5bGluZ18gcmVhZCB0aGUgOmNsYXNzOmBTdHlsZWAgY2xhc3MKK2RvY3VtZW50YXRpb24uCisKK1dpZGdldAorLS0tLS0tCisKKzpjbGFzczpgdHRrLldpZGdldGAgZGVmaW5lcyBzdGFuZGFyZCBvcHRpb25zIGFuZCBtZXRob2RzIHN1cHBvcnRlZCBieSBUawordGhlbWVkIHdpZGdldHMgYW5kIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQuCisKKworU3RhbmRhcmQgT3B0aW9ucworXl5eXl5eXl5eXl5eXl5eXgorCitBbGwgdGhlIDptb2Q6YHR0a2Agd2lkZ2V0cyBhY2NlcHQgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IE9wdGlvbiAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IGNsYXNzICAgICB8IFNwZWNpZmllcyB0aGUgd2luZG93IGNsYXNzLiBUaGUgY2xhc3MgaXMgdXNlZCB3aGVuIHF1ZXJ5aW5nICB8CisgICB8ICAgICAgICAgICB8IHRoZSBvcHRpb24gZGF0YWJhc2UgZm9yIHRoZSB3aW5kb3cncyBvdGhlciBvcHRpb25zLCB0byAgICAgICB8CisgICB8ICAgICAgICAgICB8IGRldGVybWluZSB0aGUgZGVmYXVsdCBiaW5kdGFncyBmb3IgdGhlIHdpbmRvdywgYW5kIHRvIHNlbGVjdCB8CisgICB8ICAgICAgICAgICB8IHRoZSB3aWRnZXQncyBkZWZhdWx0IGxheW91dCBhbmQgc3R5bGUuIFRoaXMgaXMgYSByZWFkLW9ubHkgICB8CisgICB8ICAgICAgICAgICB8IG9wdGlvbiB3aGljaCBtYXkgb25seSBiZSBzcGVjaWZpZWQgd2hlbiB0aGUgd2luZG93IGlzICAgICAgICB8CisgICB8ICAgICAgICAgICB8IGNyZWF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGN1cnNvciAgICB8IFNwZWNpZmllcyB0aGUgbW91c2UgY3Vyc29yIHRvIGJlIHVzZWQgZm9yIHRoZSB3aWRnZXQuIElmIHNldCB8CisgICB8ICAgICAgICAgICB8IHRvIHRoZSBlbXB0eSBzdHJpbmcgKHRoZSBkZWZhdWx0KSwgdGhlIGN1cnNvciBpcyBpbmhlcml0ZWQgICB8CisgICB8ICAgICAgICAgICB8IGZyb20gdGhlIHBhcmVudCB3aWRnZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHRha2Vmb2N1cyB8IERldGVybWluZXMgd2hldGhlciB0aGUgd2luZG93IGFjY2VwdHMgdGhlIGZvY3VzIGR1cmluZyAgICAgICB8CisgICB8ICAgICAgICAgICB8IGtleWJvYXJkIHRyYXZlcnNhbC4gMCwgMSBvciBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuICAgICB8CisgICB8ICAgICAgICAgICB8IElmIDAsIHRoZSB3aW5kb3cgc2hvdWxkIGJlIHNraXBwZWQgZW50aXJlbHkgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICB8IGR1cmluZyBrZXlib2FyZCB0cmF2ZXJzYWwuIElmIDEsIHRoZSB3aW5kb3cgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICB8IHNob3VsZCByZWNlaXZlIHRoZSBpbnB1dCBmb2N1cyBhcyBsb25nIGFzIGl0IGlzIHZpZXdhYmxlLiAgICB8CisgICB8ICAgICAgICAgICB8IEFuIGVtcHR5IHN0cmluZyBtZWFucyB0aGF0IHRoZSB0cmF2ZXJzYWwgc2NyaXB0cyBtYWtlIHRoZSAgICB8CisgICB8ICAgICAgICAgICB8IGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRvIGZvY3VzIG9uIHRoZSB3aW5kb3cuICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHN0eWxlICAgICB8IE1heSBiZSB1c2VkIHRvIHNwZWNpZnkgYSBjdXN0b20gd2lkZ2V0IHN0eWxlLiAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworU2Nyb2xsYWJsZSBXaWRnZXQgT3B0aW9ucworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBieSB3aWRnZXRzIHRoYXQgYXJlIGNvbnRyb2xsZWQgYnkgYQorc2Nyb2xsYmFyLgorCisgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IG9wdGlvbiAgICAgICAgIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IHhzY3JvbGxjb21tYW5kIHwgVXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIGhvcml6b250YWwgc2Nyb2xsYmFycy4gICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgV2hlbiB0aGUgdmlldyBpbiB0aGUgd2lkZ2V0J3Mgd2luZG93IGNoYW5nZXMsIHRoZSB3aWRnZXR8CisgICB8ICAgICAgICAgICAgICAgIHwgd2lsbCBnZW5lcmF0ZSBhIFRjbCBjb21tYW5kIGJhc2VkIG9uIHRoZSBzY3JvbGxjb21tYW5kLiB8CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgVXN1YWxseSB0aGlzIG9wdGlvbiBjb25zaXN0cyBvZiB0aGUgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgOm1ldGg6YFNjcm9sbGJhci5zZXRgIG1ldGhvZCBvZiBzb21lIHNjcm9sbGJhci4gVGhpcyAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgd2lsbCBjYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgdGhlIHNjcm9sbGJhciB0byBiZSB1cGRhdGVkIHdoZW5ldmVyIHRoZSB2aWV3IGluIHRoZSAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgd2luZG93IGNoYW5nZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHlzY3JvbGxjb21tYW5kIHwgVXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHZlcnRpY2FsIHNjcm9sbGJhcnMuICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhYm92ZS4gICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworTGFiZWwgT3B0aW9ucworXl5eXl5eXl5eXl5eXgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBieSBsYWJlbHMsIGJ1dHRvbnMgYW5kIG90aGVyIGJ1dHRvbi1saWtlCit3aWRnZXRzLgorCisuLiB0YWJ1bGFyY29sdW1uczo6IHxwezAuMlx0ZXh0d2lkdGh9fHB7MC43XHRleHR3aWR0aH18CisuLgorCisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IG9wdGlvbiAgICAgICB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IHRleHQgICAgICAgICB8IFNwZWNpZmllcyBhIHRleHQgc3RyaW5nIHRvIGJlIGRpc3BsYXllZCBpbnNpZGUgdGhlIHdpZGdldC58CisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHRleHR2YXJpYWJsZSB8IFNwZWNpZmllcyBhIG5hbWUgd2hvc2UgdmFsdWUgd2lsbCBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZSB8CisgICB8ICAgICAgICAgICAgICB8IHRleHQgb3B0aW9uIHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHVuZGVybGluZSAgICB8IElmIHNldCwgc3BlY2lmaWVzIHRoZSBpbmRleCAoMC1iYXNlZCkgb2YgYSBjaGFyYWN0ZXIgdG8gICB8CisgICB8ICAgICAgICAgICAgICB8IHVuZGVybGluZSBpbiB0aGUgdGV4dCBzdHJpbmcuIFRoZSB1bmRlcmxpbmUgY2hhcmFjdGVyIGlzICB8CisgICB8ICAgICAgICAgICAgICB8IHVzZWQgZm9yIG1uZW1vbmljIGFjdGl2YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGltYWdlICAgICAgICB8IFNwZWNpZmllcyBhbiBpbWFnZSB0byBkaXNwbGF5LiBUaGlzIGlzIGEgbGlzdCBvZiAxIG9yIG1vcmV8CisgICB8ICAgICAgICAgICAgICB8IGVsZW1lbnRzLiBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUgZGVmYXVsdCBpbWFnZSBuYW1lLiBUaGV8CisgICB8ICAgICAgICAgICAgICB8IHJlc3Qgb2YgdGhlIGxpc3QgaXMgYSBzZXF1ZW5jZSBvZiBzdGF0ZXNwZWMvdmFsdWUgcGFpcnMgYXN8CisgICB8ICAgICAgICAgICAgICB8IGRlZmluZWQgYnkgOm1ldGg6YFN0eWxlLm1hcGAsIHNwZWNpZnlpbmcgZGlmZmVyZW50IGltYWdlcyB8CisgICB8ICAgICAgICAgICAgICB8IHRvIHVzZSB3aGVuIHRoZSB3aWRnZXQgaXMgaW4gYSBwYXJ0aWN1bGFyIHN0YXRlIG9yIGEgICAgICB8CisgICB8ICAgICAgICAgICAgICB8IGNvbWJpbmF0aW9uIG9mIHN0YXRlcy4gQWxsIGltYWdlcyBpbiB0aGUgbGlzdCBzaG91bGQgaGF2ZSB8CisgICB8ICAgICAgICAgICAgICB8IHRoZSBzYW1lIHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGNvbXBvdW5kICAgICB8IFNwZWNpZmllcyBob3cgdG8gZGlzcGxheSB0aGUgaW1hZ2UgcmVsYXRpdmUgdG8gdGhlIHRleHQsICB8CisgICB8ICAgICAgICAgICAgICB8IGluIHRoZSBjYXNlIGJvdGggdGV4dCBhbmQgaW1hZ2Ugb3B0aW9ucyBhcmUgcHJlc2VudC4gICAgICB8CisgICB8ICAgICAgICAgICAgICB8IFZhbGlkIHZhbHVlcyBhcmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICB8ICogdGV4dDogZGlzcGxheSB0ZXh0IG9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICB8ICogaW1hZ2U6IGRpc3BsYXkgaW1hZ2Ugb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICB8ICogdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0OiBkaXNwbGF5IGltYWdlIGFib3ZlLCBiZWxvdywgICB8CisgICB8ICAgICAgICAgICAgICB8ICAgbGVmdCBvZiwgb3IgcmlnaHQgb2YgdGhlIHRleHQsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICB8ICogbm9uZTogdGhlIGRlZmF1bHQuIGRpc3BsYXkgdGhlIGltYWdlIGlmIHByZXNlbnQsICAgICAgICB8CisgICB8ICAgICAgICAgICAgICB8ICAgb3RoZXJ3aXNlIHRoZSB0ZXh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHdpZHRoICAgICAgICB8IElmIGdyZWF0ZXIgdGhhbiB6ZXJvLCBzcGVjaWZpZXMgaG93IG11Y2ggc3BhY2UsIGluICAgICAgICB8CisgICB8ICAgICAgICAgICAgICB8IGNoYXJhY3RlciB3aWR0aHMsIHRvIGFsbG9jYXRlIGZvciB0aGUgdGV4dCBsYWJlbDsgaWYgbGVzcyB8CisgICB8ICAgICAgICAgICAgICB8IHRoYW4gemVybywgc3BlY2lmaWVzIGEgbWluaW11bSB3aWR0aC4gSWYgemVybyBvciAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICB8IHVuc3BlY2lmaWVkLCB0aGUgbmF0dXJhbCB3aWR0aCBvZiB0aGUgdGV4dCBsYWJlbCBpcyB1c2VkLiB8CisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworQ29tcGF0aWJpbGl0eSBPcHRpb25zCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IG9wdGlvbiB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBzdGF0ZSAgfCBNYXkgYmUgc2V0IHRvICJub3JtYWwiIG9yICJkaXNhYmxlZCIgdG8gY29udHJvbCB0aGUgImRpc2FibGVkIiB8CisgICB8ICAgICAgICB8IHN0YXRlIGJpdC4gVGhpcyBpcyBhIHdyaXRlLW9ubHkgb3B0aW9uOiBzZXR0aW5nIGl0IGNoYW5nZXMgdGhlIHwKKyAgIHwgICAgICAgIHwgd2lkZ2V0IHN0YXRlLCBidXQgdGhlIDptZXRoOmBXaWRnZXQuc3RhdGVgIG1ldGhvZCBkb2VzIG5vdCAgICAgfAorICAgfCAgICAgICAgfCBhZmZlY3QgdGhpcyBvcHRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworV2lkZ2V0IFN0YXRlcworXl5eXl5eXl5eXl5eXgorCitUaGUgd2lkZ2V0IHN0YXRlIGlzIGEgYml0bWFwIG9mIGluZGVwZW5kZW50IHN0YXRlIGZsYWdzLgorCisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGZsYWcgICAgICAgfCBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IGFjdGl2ZSAgICAgfCBUaGUgbW91c2UgY3Vyc29yIGlzIG92ZXIgdGhlIHdpZGdldCBhbmQgcHJlc3NpbmcgYSBtb3VzZSAgICB8CisgICB8ICAgICAgICAgICAgfCBidXR0b24gd2lsbCBjYXVzZSBzb21lIGFjdGlvbiB0byBvY2N1ci4gICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGRpc2FibGVkICAgfCBXaWRnZXQgaXMgZGlzYWJsZWQgdW5kZXIgcHJvZ3JhbSBjb250cm9sLiAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGZvY3VzICAgICAgfCBXaWRnZXQgaGFzIGtleWJvYXJkIGZvY3VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHByZXNzZWQgICAgfCBXaWRnZXQgaXMgYmVpbmcgcHJlc3NlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHNlbGVjdGVkICAgfCAiT24iLCAidHJ1ZSIsIG9yICJjdXJyZW50IiBmb3IgdGhpbmdzIGxpa2UgQ2hlY2tidXR0b25zIGFuZCB8CisgICB8ICAgICAgICAgICAgfCByYWRpb2J1dHRvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGJhY2tncm91bmQgfCBXaW5kb3dzIGFuZCBNYWMgaGF2ZSBhIG5vdGlvbiBvZiBhbiAiYWN0aXZlIiBvciBmb3JlZ3JvdW5kICB8CisgICB8ICAgICAgICAgICAgfCB3aW5kb3cuIFRoZSAqYmFja2dyb3VuZCogc3RhdGUgaXMgc2V0IGZvciB3aWRnZXRzIGluIGEgICAgICB8CisgICB8ICAgICAgICAgICAgfCBiYWNrZ3JvdW5kIHdpbmRvdywgYW5kIGNsZWFyZWQgZm9yIHRob3NlIGluIHRoZSBmb3JlZ3JvdW5kICB8CisgICB8ICAgICAgICAgICAgfCB3aW5kb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHJlYWRvbmx5ICAgfCBXaWRnZXQgc2hvdWxkIG5vdCBhbGxvdyB1c2VyIG1vZGlmaWNhdGlvbi4gICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGFsdGVybmF0ZSAgfCBBIHdpZGdldC1zcGVjaWZpYyBhbHRlcm5hdGUgZGlzcGxheSBmb3JtYXQuICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGludmFsaWQgICAgfCBUaGUgd2lkZ2V0J3MgdmFsdWUgaXMgaW52YWxpZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0Egc3RhdGUgc3BlY2lmaWNhdGlvbiBpcyBhIHNlcXVlbmNlIG9mIHN0YXRlIG5hbWVzLCBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGgKK2FuIGV4Y2xhbWF0aW9uIHBvaW50IGluZGljYXRpbmcgdGhhdCB0aGUgYml0IGlzIG9mZi4KKworCit0dGsuV2lkZ2V0CiteXl5eXl5eXl5eCisKK0Jlc2lkZXMgdGhlIG1ldGhvZHMgZGVzY3JpYmVkIGJlbG93LCB0aGUgOmNsYXNzOmB0dGsuV2lkZ2V0YCBjbGFzcyBzdXBwb3J0cyB0aGUKKzptZXRoOmBUa2ludGVyLldpZGdldC5jZ2V0YCBhbmQgOm1ldGg6YFRraW50ZXIuV2lkZ2V0LmNvbmZpZ3VyZWAgbWV0aG9kcy4KKworLi4gY2xhc3M6OiBXaWRnZXQKKworICAgLi4gbWV0aG9kOjogaWRlbnRpZnkoeCwgeSkKKworICAgICAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCBhdCBwb3NpdGlvbiAqeCogKnkqLCBvciB0aGUgZW1wdHkgc3RyaW5nCisgICAgICBpZiB0aGUgcG9pbnQgZG9lcyBub3QgbGllIHdpdGhpbiBhbnkgZWxlbWVudC4KKworICAgICAgKngqIGFuZCAqeSogYXJlIHBpeGVsIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB3aWRnZXQuCisKKworICAgLi4gbWV0aG9kOjogaW5zdGF0ZShzdGF0ZXNwZWNbLCBjYWxsYmFjaz1Ob25lWywgKmFyZ3NbLCAqKmt3XV1dKQorCisgICAgICBUZXN0IHRoZSB3aWRnZXQncyBzdGF0ZS4gSWYgYSBjYWxsYmFjayBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIFRydWUKKyAgICAgIGlmIHRoZSB3aWRnZXQgc3RhdGUgbWF0Y2hlcyAqc3RhdGVzcGVjKiBhbmQgRmFsc2Ugb3RoZXJ3aXNlLiBJZiBjYWxsYmFjaworICAgICAgaXMgc3BlY2lmaWVkIHRoZW4gaXQgaXMgY2FsbGVkIHdpdGggKmFyZ3MqIGlmIHdpZGdldCBzdGF0ZSBtYXRjaGVzCisgICAgICAqc3RhdGVzcGVjKi4KKworCisgICAuLiBtZXRob2Q6OiBzdGF0ZShbc3RhdGVzcGVjPU5vbmVdKQorCisgICAgICBNb2RpZnkgb3IgcmVhZCB3aWRnZXQgc3RhdGUuIElmICpzdGF0ZXNwZWMqIGlzIHNwZWNpZmllZCwgc2V0cyB0aGUKKyAgICAgIHdpZGdldCBzdGF0ZSBhY2NvcmRpbmdseSBhbmQgcmV0dXJucyBhIG5ldyAqc3RhdGVzcGVjKiBpbmRpY2F0aW5nCisgICAgICB3aGljaCBmbGFncyB3ZXJlIGNoYW5nZWQuIElmICpzdGF0ZXNwZWMqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMKKyAgICAgIHRoZSBjdXJyZW50bHktZW5hYmxlZCBzdGF0ZSBmbGFncy4KKworICAgKnN0YXRlc3BlYyogd2lsbCB1c3VhbGx5IGJlIGEgbGlzdCBvciBhIHR1cGxlLgorCisKK0NvbWJvYm94CistLS0tLS0tLQorCitUaGUgOmNsYXNzOmB0dGsuQ29tYm9ib3hgIHdpZGdldCBjb21iaW5lcyBhIHRleHQgZmllbGQgd2l0aCBhIHBvcC1kb3duIGxpc3Qgb2YKK3ZhbHVlcy4gVGhpcyB3aWRnZXQgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YEVudHJ5YC4KKworQmVzaWRlcyB0aGUgbWV0aG9kcyBpbmhlcml0ZWQgZnJvbSA6Y2xhc3M6YFdpZGdldGAgKDptZXRoOmBXaWRnZXQuY2dldGAsCis6bWV0aDpgV2lkZ2V0LmNvbmZpZ3VyZWAsIDptZXRoOmBXaWRnZXQuaWRlbnRpZnlgLCA6bWV0aDpgV2lkZ2V0Lmluc3RhdGVgCithbmQgOm1ldGg6YFdpZGdldC5zdGF0ZWApIGFuZCB0aG9zZSBpbmhlcml0ZWQgZnJvbSA6Y2xhc3M6YEVudHJ5YAorKDptZXRoOmBFbnRyeS5iYm94YCwgOm1ldGg6YEVudHJ5LmRlbGV0ZWAsIDptZXRoOmBFbnRyeS5pY3Vyc29yYCwKKzptZXRoOmBFbnRyeS5pbmRleGAsIDptZXRoOmBFbnRyeS5pbnNldGAsIDptZXRoOmBFbnRyeS5zZWxlY3Rpb25gLAorOm1ldGg6YEVudHJ5Lnh2aWV3YCksIHRoaXMgY2xhc3MgaGFzIHNvbWUgb3RoZXIgbWV0aG9kcywgZGVzY3JpYmVkIGF0Cis6Y2xhc3M6YHR0ay5Db21ib2JveGAuCisKKworT3B0aW9ucworXl5eXl5eXgorCitUaGlzIHdpZGdldCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBvcHRpb24gICAgICAgICAgfCBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBleHBvcnRzZWxlY3Rpb24gfCBCb29sZWFuIHZhbHVlLiBJZiBzZXQsIHRoZSB3aWRnZXQgc2VsZWN0aW9uIGlzIGxpbmtlZCAgfAorICAgfCAgICAgICAgICAgICAgICAgfCB0byB0aGUgV2luZG93IE1hbmFnZXIgc2VsZWN0aW9uICh3aGljaCBjYW4gYmUgcmV0dXJuZWQgfAorICAgfCAgICAgICAgICAgICAgICAgfCBieSBpbnZva2luZyA6bWV0aDpgTWlzYy5zZWxlY3Rpb25fZ2V0YCwgZm9yIGV4YW1wbGUpLiAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBqdXN0aWZ5ICAgICAgICAgfCBTcGVjaWZpZXMgaG93IHRoZSB0ZXh0IGlzIGFsaWduZWQgd2l0aGluIHRoZSB3aWRnZXQuICAgfAorICAgfCAgICAgICAgICAgICAgICAgfCBPbmUgb2YgImxlZnQiLCAiY2VudGVyIiwgb3IgInJpZ2h0Ii4gICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBoZWlnaHQgICAgICAgICAgfCBTcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgcG9wLWRvd24gbGlzdGJveCwgaW4gcm93cy4gfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBwb3N0Y29tbWFuZCAgICAgfCBBIHNjcmlwdCAocG9zc2libHkgcmVnaXN0ZXJlZCB3aXRoICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgfCA6bWV0aDpgTWlzYy5yZWdpc3RlcmApIHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgfCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIGRpc3BsYXlpbmcgdGhlIHZhbHVlcy4gSXQgfAorICAgfCAgICAgICAgICAgICAgICAgfCBtYXkgc3BlY2lmeSB3aGljaCB2YWx1ZXMgdG8gZGlzcGxheS4gICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBzdGF0ZSAgICAgICAgICAgfCBPbmUgb2YgIm5vcm1hbCIsICJyZWFkb25seSIsIG9yICJkaXNhYmxlZCIuIEluIHRoZSAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgfCAicmVhZG9ubHkiIHN0YXRlLCB0aGUgdmFsdWUgbWF5IG5vdCBiZSBlZGl0ZWQgZGlyZWN0bHksfAorICAgfCAgICAgICAgICAgICAgICAgfCBhbmQgdGhlIHVzZXIgY2FuIG9ubHkgc2VsZWN0IG9uZSBvZiB0aGUgdmFsdWVzIGZyb20gdGhlfAorICAgfCAgICAgICAgICAgICAgICAgfCBkcm9wZG93biBsaXN0LiBJbiB0aGUgIm5vcm1hbCIgc3RhdGUsIHRoZSB0ZXh0IGZpZWxkIGlzfAorICAgfCAgICAgICAgICAgICAgICAgfCBkaXJlY3RseSBlZGl0YWJsZS4gSW4gdGhlICJkaXNhYmxlZCIgc3RhdGUsIG5vICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgfCBpbnRlcmFjdGlvbiBpcyBwb3NzaWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB0ZXh0dmFyaWFibGUgICAgfCBTcGVjaWZpZXMgYSBuYW1lIHdob3NlIHZhbHVlIGlzIGxpbmtlZCB0byB0aGUgd2lkZ2V0ICAgfAorICAgfCAgICAgICAgICAgICAgICAgfCB2YWx1ZS4gV2hlbmV2ZXIgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IG5hbWUgICAgfAorICAgfCAgICAgICAgICAgICAgICAgfCBjaGFuZ2VzLCB0aGUgd2lkZ2V0IHZhbHVlIGlzIHVwZGF0ZWQsIGFuZCB2aWNlIHZlcnNhLiAgfAorICAgfCAgICAgICAgICAgICAgICAgfCBTZWUgOmNsYXNzOmBUa2ludGVyLlN0cmluZ1ZhcmAuICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB2YWx1ZXMgICAgICAgICAgfCBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgdmFsdWVzIHRvIGRpc3BsYXkgaW4gdGhlICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgfCBkcm9wLWRvd24gbGlzdGJveC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB3aWR0aCAgICAgICAgICAgfCBTcGVjaWZpZXMgYW4gaW50ZWdlciB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBkZXNpcmVkIHdpZHRofAorICAgfCAgICAgICAgICAgICAgICAgfCBvZiB0aGUgZW50cnkgd2luZG93LCBpbiBhdmVyYWdlLXNpemUgY2hhcmFjdGVycyBvZiB0aGUgfAorICAgfCAgICAgICAgICAgICAgICAgfCB3aWRnZXQncyBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK1ZpcnR1YWwgZXZlbnRzCiteXl5eXl5eXl5eXl5eXgorCitUaGUgY29tYm9ib3ggd2lkZ2V0IGdlbmVyYXRlcyBhICoqPDxDb21ib2JveFNlbGVjdGVkPj4qKiB2aXJ0dWFsIGV2ZW50Cit3aGVuIHRoZSB1c2VyIHNlbGVjdHMgYW4gZWxlbWVudCBmcm9tIHRoZSBsaXN0IG9mIHZhbHVlcy4KKworCit0dGsuQ29tYm9ib3gKK15eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IENvbWJvYm94CisKKyAgIC4uIG1ldGhvZDo6IGN1cnJlbnQoW25ld2luZGV4PU5vbmVdKQorCisgICAgICBJZiAqbmV3aW5kZXgqIGlzIHNwZWNpZmllZCwgc2V0cyB0aGUgY29tYm9ib3ggdmFsdWUgdG8gdGhlIGVsZW1lbnQKKyAgICAgIHBvc2l0aW9uICpuZXdpbmRleCouIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgdmFsdWUgb3IKKyAgICAgIC0xIGlmIHRoZSBjdXJyZW50IHZhbHVlIGlzIG5vdCBpbiB0aGUgdmFsdWVzIGxpc3QuCisKKworICAgLi4gbWV0aG9kOjogZ2V0KCkKKworICAgICAgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgY29tYm9ib3guCisKKworICAgLi4gbWV0aG9kOjogc2V0KHZhbHVlKQorCisgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgY29tYm9ib3ggdG8gKnZhbHVlKi4KKworCitOb3RlYm9vaworLS0tLS0tLS0KKworVGhlIFR0ayBOb3RlYm9vayB3aWRnZXQgbWFuYWdlcyBhIGNvbGxlY3Rpb24gb2Ygd2luZG93cyBhbmQgZGlzcGxheXMgYSBzaW5nbGUKK29uZSBhdCBhIHRpbWUuIEVhY2ggY2hpbGQgd2luZG93IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHRhYiwgd2hpY2ggdGhlIHVzZXIKK21heSBzZWxlY3QgdG8gY2hhbmdlIHRoZSBjdXJyZW50bHktZGlzcGxheWVkIHdpbmRvdy4KKworCitPcHRpb25zCiteXl5eXl5eCisKK1RoaXMgd2lkZ2V0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBvcHRpb25zOgorCisgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IG9wdGlvbiAgfCBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IGhlaWdodCAgfCBJZiBwcmVzZW50IGFuZCBncmVhdGVyIHRoYW4gemVybywgc3BlY2lmaWVzIHRoZSBkZXNpcmVkIGhlaWdodCB8CisgICB8ICAgICAgICAgfCBvZiB0aGUgcGFuZSBhcmVhIChub3QgaW5jbHVkaW5nIGludGVybmFsIHBhZGRpbmcgb3IgdGFicykuICAgICB8CisgICB8ICAgICAgICAgfCBPdGhlcndpc2UsIHRoZSBtYXhpbXVtIGhlaWdodCBvZiBhbGwgcGFuZXMgaXMgdXNlZC4gICAgICAgICAgICB8CisgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHBhZGRpbmcgfCBTcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBleHRyYSBzcGFjZSB0byBhZGQgYXJvdW5kIHRoZSBvdXRzaWRlICB8CisgICB8ICAgICAgICAgfCBvZiB0aGUgbm90ZWJvb2suIFRoZSBwYWRkaW5nIGlzIGEgbGlzdCBvZiB1cCB0byBmb3VyIGxlbmd0aCAgICB8CisgICB8ICAgICAgICAgfCBzcGVjaWZpY2F0aW9uczogbGVmdCB0b3AgcmlnaHQgYm90dG9tLiBJZiBmZXdlciB0aGFuIGZvdXIgICAgICB8CisgICB8ICAgICAgICAgfCBlbGVtZW50cyBhcmUgc3BlY2lmaWVkLCBib3R0b20gZGVmYXVsdHMgdG8gdG9wLCByaWdodCBkZWZhdWx0cyB8CisgICB8ICAgICAgICAgfCB0byBsZWZ0LCBhbmQgdG9wIGRlZmF1bHRzIHRvIGxlZnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHdpZHRoICAgfCBJZiBwcmVzZW50IGFuZCBncmVhdGVyIHRoYW4gemVybywgc3BlY2lmaWVzIHRoZSBkZXNpcmVkIHdpZHRoICB8CisgICB8ICAgICAgICAgfCBvZiB0aGUgcGFuZSBhcmVhIChub3QgaW5jbHVkaW5nIGludGVybmFsIHBhZGRpbmcpLiBPdGhlcndpc2UsICB8CisgICB8ICAgICAgICAgfCB0aGUgbWF4aW11bSB3aWR0aCBvZiBhbGwgcGFuZXMgaXMgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworVGFiIE9wdGlvbnMKK15eXl5eXl5eXl5eCisKK1RoZXJlIGFyZSBhbHNvIHNwZWNpZmljIG9wdGlvbnMgZm9yIHRhYnM6CisKKyAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgb3B0aW9uICAgIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgc3RhdGUgICAgIHwgRWl0aGVyICJub3JtYWwiLCAiZGlzYWJsZWQiIG9yICJoaWRkZW4iLiBJZiAiZGlzYWJsZWQiLCB0aGVuIHwKKyAgIHwgICAgICAgICAgIHwgdGhlIHRhYiBpcyBub3Qgc2VsZWN0YWJsZS4gSWYgImhpZGRlbiIsIHRoZW4gdGhlIHRhYiBpcyBub3QgIHwKKyAgIHwgICAgICAgICAgIHwgc2hvd24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgc3RpY2t5ICAgIHwgU3BlY2lmaWVzIGhvdyB0aGUgY2hpbGQgd2luZG93IGlzIHBvc2l0aW9uZWQgd2l0aGluIHRoZSBwYW5lIHwKKyAgIHwgICAgICAgICAgIHwgYXJlYS4gVmFsdWUgaXMgYSBzdHJpbmcgY29udGFpbmluZyB6ZXJvIG9yIG1vcmUgb2YgdGhlICAgICAgIHwKKyAgIHwgICAgICAgICAgIHwgY2hhcmFjdGVycyAibiIsICJzIiwgImUiIG9yICJ3Ii4gRWFjaCBsZXR0ZXIgcmVmZXJzIHRvIGEgICAgIHwKKyAgIHwgICAgICAgICAgIHwgc2lkZSAobm9ydGgsIHNvdXRoLCBlYXN0IG9yIHdlc3QpIHRoYXQgdGhlIGNoaWxkIHdpbmRvdyB3aWxsIHwKKyAgIHwgICAgICAgICAgIHwgc3RpY2sgdG8sIGFzIHBlciB0aGUgOm1ldGg6YGdyaWRgIGdlb21ldHJ5IG1hbmFnZXIuICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgcGFkZGluZyAgIHwgU3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgZXh0cmEgc3BhY2UgdG8gYWRkIGJldHdlZW4gdGhlICAgICAgIHwKKyAgIHwgICAgICAgICAgIHwgbm90ZWJvb2sgYW5kIHRoaXMgcGFuZS4gU3ludGF4IGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgb3B0aW9uIHwKKyAgIHwgICAgICAgICAgIHwgcGFkZGluZyB1c2VkIGJ5IHRoaXMgd2lkZ2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgdGV4dCAgICAgIHwgU3BlY2lmaWVzIGEgdGV4dCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYi4gICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgaW1hZ2UgICAgIHwgU3BlY2lmaWVzIGFuIGltYWdlIHRvIGRpc3BsYXkgaW4gdGhlIHRhYi4gU2VlIHRoZSBvcHRpb24gICAgIHwKKyAgIHwgICAgICAgICAgIHwgaW1hZ2UgZGVzY3JpYmVkIGluIDpjbGFzczpgV2lkZ2V0YC4gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgY29tcG91bmQgIHwgU3BlY2lmaWVzIGhvdyB0byBkaXNwbGF5IHRoZSBpbWFnZSByZWxhdGl2ZSB0byB0aGUgdGV4dCwgaW4gIHwKKyAgIHwgICAgICAgICAgIHwgdGhlIGNhc2UgYm90aCB0ZXh0IGFuZCBpbWFnZSBvcHRpb25zIGFyZSBwcmVzZW50LiBTZWUgICAgICAgIHwKKyAgIHwgICAgICAgICAgIHwgYExhYmVsIE9wdGlvbnNgXyBmb3IgbGVnYWwgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgdW5kZXJsaW5lIHwgU3BlY2lmaWVzIHRoZSBpbmRleCAoMC1iYXNlZCkgb2YgYSBjaGFyYWN0ZXIgdG8gdW5kZXJsaW5lIGluIHwKKyAgIHwgICAgICAgICAgIHwgdGhlIHRleHQgc3RyaW5nLiBUaGUgdW5kZXJsaW5lZCBjaGFyYWN0ZXIgaXMgdXNlZCBmb3IgICAgICAgIHwKKyAgIHwgICAgICAgICAgIHwgbW5lbW9uaWMgYWN0aXZhdGlvbiBpZiA6bWV0aDpgTm90ZWJvb2suZW5hYmxlX3RyYXZlcnNhbGAgaXMgIHwKKyAgIHwgICAgICAgICAgIHwgY2FsbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCitUYWIgSWRlbnRpZmllcnMKK15eXl5eXl5eXl5eXl5eXgorCitUaGUgKnRhYl9pZCogcHJlc2VudCBpbiBzZXZlcmFsIG1ldGhvZHMgb2YgOmNsYXNzOmB0dGsuTm90ZWJvb2tgIG1heSB0YWtlIGFueQorb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKworKiBBbiBpbnRlZ2VyIGJldHdlZW4gemVybyBhbmQgdGhlIG51bWJlciBvZiB0YWJzLgorKiBUaGUgbmFtZSBvZiBhIGNoaWxkIHdpbmRvdy4KKyogQSBwb3NpdGlvbmFsIHNwZWNpZmljYXRpb24gb2YgdGhlIGZvcm0gIkB4LHkiLCB3aGljaCBpZGVudGlmaWVzIHRoZSB0YWIuCisqIFRoZSBsaXRlcmFsIHN0cmluZyAiY3VycmVudCIsIHdoaWNoIGlkZW50aWZpZXMgdGhlIGN1cnJlbnRseS1zZWxlY3RlZCB0YWIuCisqIFRoZSBsaXRlcmFsIHN0cmluZyAiZW5kIiwgd2hpY2ggcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRhYnMgKG9ubHkgdmFsaWQgZm9yCisgIDptZXRoOmBOb3RlYm9vay5pbmRleGApLgorCisKK1ZpcnR1YWwgRXZlbnRzCiteXl5eXl5eXl5eXl5eXgorCitUaGlzIHdpZGdldCBnZW5lcmF0ZXMgYSAqKjw8Tm90ZWJvb2tUYWJDaGFuZ2VkPj4qKiB2aXJ0dWFsIGV2ZW50IGFmdGVyIGEgbmV3Cit0YWIgaXMgc2VsZWN0ZWQuCisKKwordHRrLk5vdGVib29rCiteXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBOb3RlYm9vaworCisgICAuLiBtZXRob2Q6OiBhZGQoY2hpbGQsICoqa3cpCisKKyAgICAgIEFkZHMgYSBuZXcgdGFiIHRvIHRoZSBub3RlYm9vay4KKworICAgICAgSWYgd2luZG93IGlzIGN1cnJlbnRseSBtYW5hZ2VkIGJ5IHRoZSBub3RlYm9vayBidXQgaGlkZGVuLCBpdCBpcworICAgICAgcmVzdG9yZWQgdG8gaXRzIHByZXZpb3VzIHBvc2l0aW9uLgorCisgICAgICBTZWUgYFRhYiBPcHRpb25zYF8gZm9yIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zLgorCisKKyAgIC4uIG1ldGhvZDo6IGZvcmdldCh0YWJfaWQpCisKKyAgICAgIFJlbW92ZXMgdGhlIHRhYiBzcGVjaWZpZWQgYnkgKnRhYl9pZCosIHVubWFwcyBhbmQgdW5tYW5hZ2VzIHRoZQorICAgICAgYXNzb2NpYXRlZCB3aW5kb3cuCisKKworICAgLi4gbWV0aG9kOjogaGlkZSh0YWJfaWQpCisKKyAgICAgIEhpZGVzIHRoZSB0YWIgc3BlY2lmaWVkIGJ5ICp0YWJfaWQqLgorCisgICAgICBUaGUgdGFiIHdpbGwgbm90IGJlIGRpc3BsYXllZCwgYnV0IHRoZSBhc3NvY2lhdGVkIHdpbmRvdyByZW1haW5zCisgICAgICBtYW5hZ2VkIGJ5IHRoZSBub3RlYm9vayBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gcmVtZW1iZXJlZC4gSGlkZGVuIHRhYnMKKyAgICAgIG1heSBiZSByZXN0b3JlZCB3aXRoIHRoZSA6bWV0aDpgYWRkYCBjb21tYW5kLgorCisKKyAgIC4uIG1ldGhvZDo6IGlkZW50aWZ5KHgsIHkpCisKKyAgICAgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRhYiBlbGVtZW50IGF0IHBvc2l0aW9uICp4KiwgKnkqLCBvciB0aGUgZW1wdHkKKyAgICAgIHN0cmluZyBpZiBub25lLgorCisKKyAgIC4uIG1ldGhvZDo6IGluZGV4KHRhYl9pZCkKKworICAgICAgUmV0dXJucyB0aGUgbnVtZXJpYyBpbmRleCBvZiB0aGUgdGFiIHNwZWNpZmllZCBieSAqdGFiX2lkKiwgb3IgdGhlIHRvdGFsCisgICAgICBudW1iZXIgb2YgdGFicyBpZiAqdGFiX2lkKiBpcyB0aGUgc3RyaW5nICJlbmQiLgorCisKKyAgIC4uIG1ldGhvZDo6IGluc2VydChwb3MsIGNoaWxkLCAqKmt3KQorCisgICAgICBJbnNlcnRzIGEgcGFuZSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgorCisgICAgICAqcG9zKiBpcyBlaXRoZXIgdGhlIHN0cmluZyAiZW5kIiwgYW4gaW50ZWdlciBpbmRleCwgb3IgdGhlIG5hbWUgb2YgYQorICAgICAgbWFuYWdlZCBjaGlsZC4gSWYgKmNoaWxkKiBpcyBhbHJlYWR5IG1hbmFnZWQgYnkgdGhlIG5vdGVib29rLCBtb3ZlcyBpdCB0bworICAgICAgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KKworICAgICAgU2VlIGBUYWIgT3B0aW9uc2BfIGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucy4KKworCisgICAuLiBtZXRob2Q6OiBzZWxlY3QoW3RhYl9pZF0pCisKKyAgICAgIFNlbGVjdHMgdGhlIHNwZWNpZmllZCAqdGFiX2lkKi4KKworICAgICAgVGhlIGFzc29jaWF0ZWQgY2hpbGQgd2luZG93IHdpbGwgYmUgZGlzcGxheWVkLCBhbmQgdGhlCisgICAgICBwcmV2aW91c2x5LXNlbGVjdGVkIHdpbmRvdyAoaWYgZGlmZmVyZW50KSBpcyB1bm1hcHBlZC4gSWYgKnRhYl9pZCogaXMKKyAgICAgIG9taXR0ZWQsIHJldHVybnMgdGhlIHdpZGdldCBuYW1lIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGFuZS4KKworCisgICAuLiBtZXRob2Q6OiB0YWIodGFiX2lkWywgb3B0aW9uPU5vbmVbLCAqKmt3XV0pCisKKyAgICAgIFF1ZXJ5IG9yIG1vZGlmeSB0aGUgb3B0aW9ucyBvZiB0aGUgc3BlY2lmaWMgKnRhYl9pZCouCisKKyAgICAgIElmICprdyogaXMgbm90IGdpdmVuLCByZXR1cm5zIGEgZGljdGlvbmFyeSBvZiB0aGUgdGFiIG9wdGlvbiB2YWx1ZXMuIElmCisgICAgICAqb3B0aW9uKiBpcyBzcGVjaWZpZWQsIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoYXQgKm9wdGlvbiouIE90aGVyd2lzZSwKKyAgICAgIHNldHMgdGhlIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLgorCisKKyAgIC4uIG1ldGhvZDo6IHRhYnMoKQorCisgICAgICBSZXR1cm5zIGEgbGlzdCBvZiB3aW5kb3dzIG1hbmFnZWQgYnkgdGhlIG5vdGVib29rLgorCisKKyAgIC4uIG1ldGhvZDo6IGVuYWJsZV90cmF2ZXJzYWwoKQorCisgICAgICBFbmFibGUga2V5Ym9hcmQgdHJhdmVyc2FsIGZvciBhIHRvcGxldmVsIHdpbmRvdyBjb250YWluaW5nIHRoaXMgbm90ZWJvb2suCisKKyAgICAgIFRoaXMgd2lsbCBleHRlbmQgdGhlIGJpbmRpbmdzIGZvciB0aGUgdG9wbGV2ZWwgd2luZG93IGNvbnRhaW5pbmcgdGhlCisgICAgICBub3RlYm9vayBhcyBmb2xsb3dzOgorCisgICAgICAqIENvbnRyb2wtVGFiOiBzZWxlY3RzIHRoZSB0YWIgZm9sbG93aW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb25lLgorICAgICAgKiBTaGlmdC1Db250cm9sLVRhYjogc2VsZWN0cyB0aGUgdGFiIHByZWNlZGluZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9uZS4KKyAgICAgICogQWx0LUs6IHdoZXJlIEsgaXMgdGhlIG1uZW1vbmljICh1bmRlcmxpbmVkKSBjaGFyYWN0ZXIgb2YgYW55IHRhYiwgd2lsbAorICAgICAgICBzZWxlY3QgdGhhdCB0YWIuCisKKyAgICAgIE11bHRpcGxlIG5vdGVib29rcyBpbiBhIHNpbmdsZSB0b3BsZXZlbCBtYXkgYmUgZW5hYmxlZCBmb3IgdHJhdmVyc2FsLAorICAgICAgaW5jbHVkaW5nIG5lc3RlZCBub3RlYm9va3MuIEhvd2V2ZXIsIG5vdGVib29rIHRyYXZlcnNhbCBvbmx5IHdvcmtzCisgICAgICBwcm9wZXJseSBpZiBhbGwgcGFuZXMgaGF2ZSB0aGUgbm90ZWJvb2sgdGhleSBhcmUgaW4gYXMgbWFzdGVyLgorCisKK1Byb2dyZXNzYmFyCistLS0tLS0tLS0tLQorCitUaGUgOmNsYXNzOmB0dGsuUHJvZ3Jlc3NiYXJgIHdpZGdldCBzaG93cyB0aGUgc3RhdHVzIG9mIGEgbG9uZy1ydW5uaW5nCitvcGVyYXRpb24uIEl0IGNhbiBvcGVyYXRlIGluIHR3byBtb2RlczogZGV0ZXJtaW5hdGUgbW9kZSBzaG93cyB0aGUgYW1vdW50Citjb21wbGV0ZWQgcmVsYXRpdmUgdG8gdGhlIHRvdGFsIGFtb3VudCBvZiB3b3JrIHRvIGJlIGRvbmUsIGFuZCBpbmRldGVybWluYXRlCittb2RlIHByb3ZpZGVzIGFuIGFuaW1hdGVkIGRpc3BsYXkgdG8gbGV0IHRoZSB1c2VyIGtub3cgdGhhdCBzb21ldGhpbmcgaXMKK2hhcHBlbmluZy4KKworCitPcHRpb25zCiteXl5eXl5eCisKK1RoaXMgd2lkZ2V0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBvcHRpb25zOgorCisgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IG9wdGlvbiAgIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IG9yaWVudCAgIHwgT25lIG9mICJob3Jpem9udGFsIiBvciAidmVydGljYWwiLiBTcGVjaWZpZXMgdGhlIG9yaWVudGF0aW9uICB8CisgICB8ICAgICAgICAgIHwgb2YgdGhlIHByb2dyZXNzIGJhci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGxlbmd0aCAgIHwgU3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIGxvbmcgYXhpcyBvZiB0aGUgcHJvZ3Jlc3MgYmFyICAgICB8CisgICB8ICAgICAgICAgIHwgKHdpZHRoIGlmIGhvcml6b250YWwsIGhlaWdodCBpZiB2ZXJ0aWNhbCkuICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IG1vZGUgICAgIHwgT25lIG9mICJkZXRlcm1pbmF0ZSIgb3IgImluZGV0ZXJtaW5hdGUiLiAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IG1heGltdW0gIHwgQSBudW1iZXIgc3BlY2lmeWluZyB0aGUgbWF4aW11bSB2YWx1ZS4gRGVmYXVsdHMgdG8gMTAwLiAgICAgICB8CisgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHZhbHVlICAgIHwgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb2dyZXNzIGJhci4gSW4gImRldGVybWluYXRlIiBtb2RlLCB8CisgICB8ICAgICAgICAgIHwgdGhpcyByZXByZXNlbnRzIHRoZSBhbW91bnQgb2Ygd29yayBjb21wbGV0ZWQuIEluICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgIHwgImluZGV0ZXJtaW5hdGUiIG1vZGUsIGl0IGlzIGludGVycHJldGVkIGFzIG1vZHVsbyAqbWF4aW11bSo7ICB8CisgICB8ICAgICAgICAgIHwgdGhhdCBpcywgdGhlIHByb2dyZXNzIGJhciBjb21wbGV0ZXMgb25lICJjeWNsZSIgd2hlbiBpdHMgdmFsdWV8CisgICB8ICAgICAgICAgIHwgaW5jcmVhc2VzIGJ5ICptYXhpbXVtKi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHZhcmlhYmxlIHwgQSBuYW1lIHdoaWNoIGlzIGxpbmtlZCB0byB0aGUgb3B0aW9uIHZhbHVlLiBJZiBzcGVjaWZpZWQsIHRoZSB8CisgICB8ICAgICAgICAgIHwgdmFsdWUgb2YgdGhlIHByb2dyZXNzIGJhciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byB0aGUgdmFsdWUgb2Z8CisgICB8ICAgICAgICAgIHwgdGhpcyBuYW1lIHdoZW5ldmVyIHRoZSBsYXR0ZXIgaXMgbW9kaWZpZWQuICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHBoYXNlICAgIHwgUmVhZC1vbmx5IG9wdGlvbi4gVGhlIHdpZGdldCBwZXJpb2RpY2FsbHkgaW5jcmVtZW50cyB0aGUgdmFsdWV8CisgICB8ICAgICAgICAgIHwgb2YgdGhpcyBvcHRpb24gd2hlbmV2ZXIgaXRzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAwIGFuZCwgaW4gICB8CisgICB8ICAgICAgICAgIHwgZGV0ZXJtaW5hdGUgbW9kZSwgbGVzcyB0aGFuIG1heGltdW0uIFRoaXMgb3B0aW9uIG1heSBiZSB1c2VkICB8CisgICB8ICAgICAgICAgIHwgYnkgdGhlIGN1cnJlbnQgdGhlbWUgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGFuaW1hdGlvbiBlZmZlY3RzLiB8CisgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKwordHRrLlByb2dyZXNzYmFyCiteXl5eXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBQcm9ncmVzc2JhcgorCisgICAuLiBtZXRob2Q6OiBzdGFydChbaW50ZXJ2YWxdKQorCisgICAgICBCZWdpbiBhdXRvaW5jcmVtZW50IG1vZGU6IHNjaGVkdWxlcyBhIHJlY3VycmluZyB0aW1lciBldmVudCB0aGF0IGNhbGxzCisgICAgICA6bWV0aDpgUHJvZ3Jlc3NiYXIuc3RlcGAgZXZlcnkgKmludGVydmFsKiBtaWxsaXNlY29uZHMuIElmIG9taXR0ZWQsCisgICAgICAqaW50ZXJ2YWwqIGRlZmF1bHRzIHRvIDUwIG1pbGxpc2Vjb25kcy4KKworCisgICAuLiBtZXRob2Q6OiBzdGVwKFthbW91bnRdKQorCisgICAgICBJbmNyZW1lbnRzIHRoZSBwcm9ncmVzcyBiYXIncyB2YWx1ZSBieSAqYW1vdW50Ki4KKworICAgICAgKmFtb3VudCogZGVmYXVsdHMgdG8gMS4wIGlmIG9taXR0ZWQuCisKKworICAgLi4gbWV0aG9kOjogc3RvcCgpCisKKyAgICAgIFN0b3AgYXV0b2luY3JlbWVudCBtb2RlOiBjYW5jZWxzIGFueSByZWN1cnJpbmcgdGltZXIgZXZlbnQgaW5pdGlhdGVkIGJ5CisgICAgICA6bWV0aDpgUHJvZ3Jlc3NiYXIuc3RhcnRgIGZvciB0aGlzIHByb2dyZXNzIGJhci4KKworCitTZXBhcmF0b3IKKy0tLS0tLS0tLQorCitUaGUgOmNsYXNzOmB0dGsuU2VwYXJhdG9yYCB3aWRnZXQgZGlzcGxheXMgYSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHNlcGFyYXRvcgorYmFyLgorCitJdCBoYXMgbm8gb3RoZXIgbWV0aG9kcyBiZXNpZGVzIHRoZSBvbmVzIGluaGVyaXRlZCBmcm9tIDpjbGFzczpgdHRrLldpZGdldGAuCisKKworT3B0aW9ucworXl5eXl5eXgorCitUaGlzIHdpZGdldCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWMgb3B0aW9uOgorCisgICArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgb3B0aW9uIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IG9yaWVudCB8IE9uZSBvZiAiaG9yaXpvbnRhbCIgb3IgInZlcnRpY2FsIi4gU3BlY2lmaWVzIHRoZSBvcmllbnRhdGlvbiBvZnwKKyAgIHwgICAgICAgIHwgdGhlIHNlcGFyYXRvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworU2l6ZWdyaXAKKy0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YHR0ay5TaXplZ3JpcGAgd2lkZ2V0IChhbHNvIGtub3duIGFzIGEgZ3JvdyBib3gpIGFsbG93cyB0aGUgdXNlciB0bworcmVzaXplIHRoZSBjb250YWluaW5nIHRvcGxldmVsIHdpbmRvdyBieSBwcmVzc2luZyBhbmQgZHJhZ2dpbmcgdGhlIGdyaXAuCisKK1RoaXMgd2lkZ2V0IGhhcyBuZWl0aGVyIHNwZWNpZmljIG9wdGlvbnMgbm9yIHNwZWNpZmljIG1ldGhvZHMsIGJlc2lkZXMgdGhlCitvbmVzIGluaGVyaXRlZCBmcm9tIDpjbGFzczpgdHRrLldpZGdldGAuCisKKworUGxhdGZvcm0tc3BlY2lmaWMgbm90ZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKyogT24gTWFjIE9TIFgsIHRvcGxldmVsIHdpbmRvd3MgYXV0b21hdGljYWxseSBpbmNsdWRlIGEgYnVpbHQtaW4gc2l6ZSBncmlwCisgIGJ5IGRlZmF1bHQuIEFkZGluZyBhIDpjbGFzczpgU2l6ZWdyaXBgIGlzIGhhcm1sZXNzLCBzaW5jZSB0aGUgYnVpbHQtaW4KKyAgZ3JpcCB3aWxsIGp1c3QgbWFzayB0aGUgd2lkZ2V0LgorCisKK0J1Z3MKK15eXl4KKworKiBJZiB0aGUgY29udGFpbmluZyB0b3BsZXZlbCdzIHBvc2l0aW9uIHdhcyBzcGVjaWZpZWQgcmVsYXRpdmUgdG8gdGhlIHJpZ2h0CisgIG9yIGJvdHRvbSBvZiB0aGUgc2NyZWVuIChlLmcuIC4uLi4pLCB0aGUgOmNsYXNzOmBTaXplZ3JpcGAgd2lkZ2V0IHdpbGwKKyAgbm90IHJlc2l6ZSB0aGUgd2luZG93LgorKiBUaGlzIHdpZGdldCBzdXBwb3J0cyBvbmx5ICJzb3V0aGVhc3QiIHJlc2l6aW5nLgorCisKK1RyZWV2aWV3CistLS0tLS0tLQorCitUaGUgOmNsYXNzOmB0dGsuVHJlZXZpZXdgIHdpZGdldCBkaXNwbGF5cyBhIGhpZXJhcmNoaWNhbCBjb2xsZWN0aW9uIG9mIGl0ZW1zLgorRWFjaCBpdGVtIGhhcyBhIHRleHR1YWwgbGFiZWwsIGFuIG9wdGlvbmFsIGltYWdlLCBhbmQgYW4gb3B0aW9uYWwgbGlzdCBvZiBkYXRhCit2YWx1ZXMuIFRoZSBkYXRhIHZhbHVlcyBhcmUgZGlzcGxheWVkIGluIHN1Y2Nlc3NpdmUgY29sdW1ucyBhZnRlciB0aGUgdHJlZQorbGFiZWwuCisKK1RoZSBvcmRlciBpbiB3aGljaCBkYXRhIHZhbHVlcyBhcmUgZGlzcGxheWVkIG1heSBiZSBjb250cm9sbGVkIGJ5IHNldHRpbmcKK3RoZSB3aWRnZXQgb3B0aW9uIGBgZGlzcGxheWNvbHVtbnNgYC4gVGhlIHRyZWUgd2lkZ2V0IGNhbiBhbHNvIGRpc3BsYXkgY29sdW1uCitoZWFkaW5ncy4gQ29sdW1ucyBtYXkgYmUgYWNjZXNzZWQgYnkgbnVtYmVyIG9yIHN5bWJvbGljIG5hbWVzIGxpc3RlZCBpbiB0aGUKK3dpZGdldCBvcHRpb24gY29sdW1ucy4gU2VlIGBDb2x1bW4gSWRlbnRpZmllcnNgXy4KKworRWFjaCBpdGVtIGlzIGlkZW50aWZpZWQgYnkgYW4gdW5pcXVlIG5hbWUuIFRoZSB3aWRnZXQgd2lsbCBnZW5lcmF0ZSBpdGVtIElEcworaWYgdGhleSBhcmUgbm90IHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuIFRoZXJlIGlzIGEgZGlzdGluZ3Vpc2hlZCByb290IGl0ZW0sCituYW1lZCBgYHt9YGAuIFRoZSByb290IGl0ZW0gaXRzZWxmIGlzIG5vdCBkaXNwbGF5ZWQ7IGl0cyBjaGlsZHJlbiBhcHBlYXIgYXQgdGhlCit0b3AgbGV2ZWwgb2YgdGhlIGhpZXJhcmNoeS4KKworRWFjaCBpdGVtIGFsc28gaGFzIGEgbGlzdCBvZiB0YWdzLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhc3NvY2lhdGUgZXZlbnQgYmluZGluZ3MKK3dpdGggaW5kaXZpZHVhbCBpdGVtcyBhbmQgY29udHJvbCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgaXRlbS4KKworVGhlIFRyZWV2aWV3IHdpZGdldCBzdXBwb3J0cyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY3JvbGxpbmcsIGFjY29yZGluZyB0bwordGhlIG9wdGlvbnMgZGVzY3JpYmVkIGluIGBTY3JvbGxhYmxlIFdpZGdldCBPcHRpb25zYF8gYW5kIHRoZSBtZXRob2RzCis6bWV0aDpgVHJlZXZpZXcueHZpZXdgIGFuZCA6bWV0aDpgVHJlZXZpZXcueXZpZXdgLgorCisKK09wdGlvbnMKK15eXl5eXl4KKworVGhpcyB3aWRnZXQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIHNwZWNpZmljIG9wdGlvbnM6CisKKy4uIHRhYnVsYXJjb2x1bW5zOjogfHB7MC4yXHRleHR3aWR0aH18cHswLjdcdGV4dHdpZHRofXwKKy4uCisKKyAgICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBvcHRpb24gICAgICAgICB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgY29sdW1ucyAgICAgICAgfCBBIGxpc3Qgb2YgY29sdW1uIGlkZW50aWZpZXJzLCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgfAorICAgfCAgICAgICAgICAgICAgICB8IGNvbHVtbnMgYW5kIHRoZWlyIG5hbWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgZGlzcGxheWNvbHVtbnMgfCBBIGxpc3Qgb2YgY29sdW1uIGlkZW50aWZpZXJzIChlaXRoZXIgc3ltYm9saWMgb3IgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IGludGVnZXIgaW5kaWNlcykgc3BlY2lmeWluZyB3aGljaCBkYXRhIGNvbHVtbnMgYXJlICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgZGlzcGxheWVkIGFuZCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcHBlYXIsIG9yIHRoZSAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBzdHJpbmcgIiNhbGwiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGhlaWdodCAgICAgICAgIHwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygcm93cyB3aGljaCBzaG91bGQgYmUgdmlzaWJsZS4gIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBOb3RlOiB0aGUgcmVxdWVzdGVkIHdpZHRoIGlzIGRldGVybWluZWQgZnJvbSB0aGUgc3VtICAgfAorICAgfCAgICAgICAgICAgICAgICB8IG9mIHRoZSBjb2x1bW4gd2lkdGhzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgcGFkZGluZyAgICAgICAgfCBTcGVjaWZpZXMgdGhlIGludGVybmFsIHBhZGRpbmcgZm9yIHRoZSB3aWRnZXQuIFRoZSAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IHBhZGRpbmcgaXMgYSBsaXN0IG9mIHVwIHRvIGZvdXIgbGVuZ3RoIHNwZWNpZmljYXRpb25zLiB8CisgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgc2VsZWN0bW9kZSAgICAgfCBDb250cm9scyBob3cgdGhlIGJ1aWx0LWluIGNsYXNzIGJpbmRpbmdzIG1hbmFnZSB0aGUgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IHNlbGVjdGlvbi4gT25lIG9mICJleHRlbmRlZCIsICJicm93c2UiIG9yICJub25lIi4gICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgSWYgc2V0IHRvICJleHRlbmRlZCIgKHRoZSBkZWZhdWx0KSwgbXVsdGlwbGUgaXRlbXMgbWF5IHwKKyAgIHwgICAgICAgICAgICAgICAgfCBiZSBzZWxlY3RlZC4gSWYgImJyb3dzZSIsIG9ubHkgYSBzaW5nbGUgaXRlbSB3aWxsIGJlICAgfAorICAgfCAgICAgICAgICAgICAgICB8IHNlbGVjdGVkIGF0IGEgdGltZS4gSWYgIm5vbmUiLCB0aGUgc2VsZWN0aW9uIHdpbGwgbm90ICB8CisgICB8ICAgICAgICAgICAgICAgIHwgYmUgY2hhbmdlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IE5vdGUgdGhhdCB0aGUgYXBwbGljYXRpb24gY29kZSBhbmQgdGFnIGJpbmRpbmdzIGNhbiBzZXR8CisgICB8ICAgICAgICAgICAgICAgIHwgdGhlIHNlbGVjdGlvbiBob3dldmVyIHRoZXkgd2lzaCwgcmVnYXJkbGVzcyBvZiB0aGUgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCB2YWx1ZSAgb2YgdGhpcyBvcHRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHNob3cgICAgICAgICAgIHwgQSBsaXN0IGNvbnRhaW5pbmcgemVybyBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLHwKKyAgIHwgICAgICAgICAgICAgICAgfCBzcGVjaWZ5aW5nIHdoaWNoIGVsZW1lbnRzIG9mIHRoZSB0cmVlIHRvIGRpc3BsYXkuICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgKiB0cmVlOiBkaXNwbGF5IHRyZWUgbGFiZWxzIGluIGNvbHVtbiAjMC4gICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCAqIGhlYWRpbmdzOiBkaXNwbGF5IHRoZSBoZWFkaW5nIHJvdy4gICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgaXMgInRyZWUgaGVhZGluZ3MiLCBpLmUuLCBzaG93IGFsbCAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBlbGVtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgKipOb3RlKio6IENvbHVtbiAjMCBhbHdheXMgcmVmZXJzIHRvIHRoZSB0cmVlIGNvbHVtbiwgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBldmVuIGlmIHNob3c9InRyZWUiIGlzIG5vdCBzcGVjaWZpZWQuICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworSXRlbSBPcHRpb25zCiteXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBpdGVtIG9wdGlvbnMgbWF5IGJlIHNwZWNpZmllZCBmb3IgaXRlbXMgaW4gdGhlIGluc2VydCBhbmQgaXRlbQord2lkZ2V0IGNvbW1hbmRzLgorCisgICArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBvcHRpb24gfCBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IHRleHQgICB8IFRoZSB0ZXh0dWFsIGxhYmVsIHRvIGRpc3BsYXkgZm9yIHRoZSBpdGVtLiAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgaW1hZ2UgIHwgQSBUayBJbWFnZSwgZGlzcGxheWVkIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYWJlbC4gICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB2YWx1ZXMgfCBUaGUgbGlzdCBvZiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpdGVtLiAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICB8IEVhY2ggaXRlbSBzaG91bGQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgdmFsdWVzIGFzIHRoZSB3aWRnZXQgfAorICAgfCAgICAgICAgfCBvcHRpb24gY29sdW1ucy4gSWYgdGhlcmUgYXJlIGZld2VyIHZhbHVlcyB0aGFuIGNvbHVtbnMsIHRoZSAgIHwKKyAgIHwgICAgICAgIHwgcmVtYWluaW5nIHZhbHVlcyBhcmUgYXNzdW1lZCBlbXB0eS4gSWYgdGhlcmUgYXJlIG1vcmUgdmFsdWVzICB8CisgICB8ICAgICAgICB8IHRoYW4gY29sdW1ucywgdGhlIGV4dHJhIHZhbHVlcyBhcmUgaWdub3JlZC4gICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgb3BlbiAgIHwgVHJ1ZS9GYWxzZSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGl0ZW0ncyBjaGlsZHJlbiBzaG91bGR8CisgICB8ICAgICAgICB8IGJlIGRpc3BsYXllZCBvciBoaWRkZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgdGFncyAgIHwgQSBsaXN0IG9mIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXRlbS4gICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK1RhZyBPcHRpb25zCiteXl5eXl5eXl5eXgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgbWF5IGJlIHNwZWNpZmllZCBvbiB0YWdzOgorCisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBvcHRpb24gICAgIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IGZvcmVncm91bmQgfCBTcGVjaWZpZXMgdGhlIHRleHQgZm9yZWdyb3VuZCBjb2xvci4gICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYmFja2dyb3VuZCB8IFNwZWNpZmllcyB0aGUgY2VsbCBvciBpdGVtIGJhY2tncm91bmQgY29sb3IuICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBmb250ICAgICAgIHwgU3BlY2lmaWVzIHRoZSBmb250IHRvIHVzZSB3aGVuIGRyYXdpbmcgdGV4dC4gICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGltYWdlICAgICAgfCBTcGVjaWZpZXMgdGhlIGl0ZW0gaW1hZ2UsIGluIGNhc2UgdGhlIGl0ZW0ncyBpbWFnZSBvcHRpb24gfAorICAgfCAgICAgICAgICAgIHwgaXMgZW1wdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworQ29sdW1uIElkZW50aWZpZXJzCiteXl5eXl5eXl5eXl5eXl5eXl4KKworQ29sdW1uIGlkZW50aWZpZXJzIHRha2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CisKKyogQSBzeW1ib2xpYyBuYW1lIGZyb20gdGhlIGxpc3Qgb2YgY29sdW1ucyBvcHRpb24uCisqIEFuIGludGVnZXIgbiwgc3BlY2lmeWluZyB0aGUgbnRoIGRhdGEgY29sdW1uLgorKiBBIHN0cmluZyBvZiB0aGUgZm9ybSAjbiwgd2hlcmUgbiBpcyBhbiBpbnRlZ2VyLCBzcGVjaWZ5aW5nIHRoZSBudGggZGlzcGxheQorICBjb2x1bW4uCisKK05vdGVzOgorCisqIEl0ZW0ncyBvcHRpb24gdmFsdWVzIG1heSBiZSBkaXNwbGF5ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGUgb3JkZXIKKyAgaW4gd2hpY2ggdGhleSBhcmUgc3RvcmVkLgorKiBDb2x1bW4gIzAgYWx3YXlzIHJlZmVycyB0byB0aGUgdHJlZSBjb2x1bW4sIGV2ZW4gaWYgc2hvdz0idHJlZSIgaXMgbm90CisgIHNwZWNpZmllZC4KKworQSBkYXRhIGNvbHVtbiBudW1iZXIgaXMgYW4gaW5kZXggaW50byBhbiBpdGVtJ3Mgb3B0aW9uIHZhbHVlcyBsaXN0OyBhIGRpc3BsYXkKK2NvbHVtbiBudW1iZXIgaXMgdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIHRyZWUgd2hlcmUgdGhlIHZhbHVlcyBhcmUgZGlzcGxheWVkLgorVHJlZSBsYWJlbHMgYXJlIGRpc3BsYXllZCBpbiBjb2x1bW4gIzAuIElmIG9wdGlvbiBkaXNwbGF5Y29sdW1ucyBpcyBub3Qgc2V0LAordGhlbiBkYXRhIGNvbHVtbiBuIGlzIGRpc3BsYXllZCBpbiBjb2x1bW4gI24rMS4gQWdhaW4sICoqY29sdW1uICMwIGFsd2F5cworcmVmZXJzIHRvIHRoZSB0cmVlIGNvbHVtbioqLgorCisKK1ZpcnR1YWwgRXZlbnRzCiteXl5eXl5eXl5eXl5eXgorCitUaGUgVHJlZXZpZXcgd2lkZ2V0IGdlbmVyYXRlcyB0aGUgZm9sbG93aW5nIHZpcnR1YWwgZXZlbnRzLgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGV2ZW50ICAgICAgICAgICAgICB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDw8VHJlZXZpZXdTZWxlY3Q+PiB8IEdlbmVyYXRlZCB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDw8VHJlZXZpZXdPcGVuPj4gICB8IEdlbmVyYXRlZCBqdXN0IGJlZm9yZSBzZXR0aW5ncyB0aGUgZm9jdXMgaXRlbSB0byB8CisgICB8ICAgICAgICAgICAgICAgICAgICB8IG9wZW49VHJ1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDw8VHJlZXZpZXdDbG9zZT4+ICB8IEdlbmVyYXRlZCBqdXN0IGFmdGVyIHNldHRpbmcgdGhlIGZvY3VzIGl0ZW0gdG8gICB8CisgICB8ICAgICAgICAgICAgICAgICAgICB8IG9wZW49RmFsc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSA6bWV0aDpgVHJlZXZpZXcuZm9jdXNgIGFuZCA6bWV0aDpgVHJlZXZpZXcuc2VsZWN0aW9uYCBtZXRob2RzIGNhbiBiZSB1c2VkCit0byBkZXRlcm1pbmUgdGhlIGFmZmVjdGVkIGl0ZW0gb3IgaXRlbXMuCisKKwordHRrLlRyZWV2aWV3CiteXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBUcmVldmlldworCisgICAuLiBtZXRob2Q6OiBiYm94KGl0ZW1bLCBjb2x1bW49Tm9uZV0pCisKKyAgICAgIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCAocmVsYXRpdmUgdG8gdGhlIHRyZWV2aWV3IHdpZGdldCdzIHdpbmRvdykgb2YKKyAgICAgIHRoZSBzcGVjaWZpZWQgKml0ZW0qIGluIHRoZSBmb3JtICh4LCB5LCB3aWR0aCwgaGVpZ2h0KS4KKworICAgICAgSWYgKmNvbHVtbiogaXMgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSBib3VuZGluZyBib3ggb2YgdGhhdCBjZWxsLiBJZiB0aGUKKyAgICAgICppdGVtKiBpcyBub3QgdmlzaWJsZSAoaS5lLiwgaWYgaXQgaXMgYSBkZXNjZW5kYW50IG9mIGEgY2xvc2VkIGl0ZW0gb3IgaXMKKyAgICAgIHNjcm9sbGVkIG9mZnNjcmVlbiksIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldF9jaGlsZHJlbihbaXRlbV0pCisKKyAgICAgIFJldHVybnMgdGhlIGxpc3Qgb2YgY2hpbGRyZW4gYmVsb25naW5nIHRvICppdGVtKi4KKworICAgICAgSWYgKml0ZW0qIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgcm9vdCBjaGlsZHJlbi4KKworCisgICAuLiBtZXRob2Q6OiBzZXRfY2hpbGRyZW4oaXRlbSwgKm5ld2NoaWxkcmVuKQorCisgICAgICBSZXBsYWNlcyAqaXRlbSoncyBjaGlsZCB3aXRoICpuZXdjaGlsZHJlbiouCisKKyAgICAgIENoaWxkcmVuIHByZXNlbnQgaW4gKml0ZW0qIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluICpuZXdjaGlsZHJlbiogYXJlCisgICAgICBkZXRhY2hlZCBmcm9tIHRoZSB0cmVlLiBObyBpdGVtcyBpbiAqbmV3Y2hpbGRyZW4qIG1heSBiZSBhbiBhbmNlc3RvciBvZgorICAgICAgKml0ZW0qLiBOb3RlIHRoYXQgbm90IHNwZWNpZnlpbmcgKm5ld2NoaWxkcmVuKiByZXN1bHRzIGluIGRldGFjaGluZworICAgICAgKml0ZW0qJ3MgY2hpbGRyZW4uCisKKworICAgLi4gbWV0aG9kOjogY29sdW1uKGNvbHVtblssIG9wdGlvbj1Ob25lWywgKiprd11dKQorCisgICAgICBRdWVyeSBvciBtb2RpZnkgdGhlIG9wdGlvbnMgZm9yIHRoZSBzcGVjaWZpZWQgKmNvbHVtbiouCisKKyAgICAgIElmICprdyogaXMgbm90IGdpdmVuLCByZXR1cm5zIGEgZGljdCBvZiB0aGUgY29sdW1uIG9wdGlvbiB2YWx1ZXMuIElmCisgICAgICAqb3B0aW9uKiBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgdmFsdWUgZm9yIHRoYXQgKm9wdGlvbiogaXMgcmV0dXJuZWQuCisgICAgICBPdGhlcndpc2UsIHNldHMgdGhlIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLgorCisgICAgICBUaGUgdmFsaWQgb3B0aW9ucy92YWx1ZXMgYXJlOgorCisgICAgICAqIGlkCisgICAgICAgICBSZXR1cm5zIHRoZSBjb2x1bW4gbmFtZS4gVGhpcyBpcyBhIHJlYWQtb25seSBvcHRpb24uCisgICAgICAqIGFuY2hvcjogT25lIG9mIHRoZSBzdGFuZGFyZCBUayBhbmNob3IgdmFsdWVzLgorICAgICAgICAgU3BlY2lmaWVzIGhvdyB0aGUgdGV4dCBpbiB0aGlzIGNvbHVtbiBzaG91bGQgYmUgYWxpZ25lZCB3aXRoIHJlc3BlY3QKKyAgICAgICAgIHRvIHRoZSBjZWxsLgorICAgICAgKiBtaW53aWR0aDogd2lkdGgKKyAgICAgICAgIFRoZSBtaW5pbXVtIHdpZHRoIG9mIHRoZSBjb2x1bW4gaW4gcGl4ZWxzLiBUaGUgdHJlZXZpZXcgd2lkZ2V0IHdpbGwKKyAgICAgICAgIG5vdCBtYWtlIHRoZSBjb2x1bW4gYW55IHNtYWxsZXIgdGhhbiBzcGVjaWZpZWQgYnkgdGhpcyBvcHRpb24gd2hlbgorICAgICAgICAgdGhlIHdpZGdldCBpcyByZXNpemVkIG9yIHRoZSB1c2VyIGRyYWdzIGEgY29sdW1uLgorICAgICAgKiBzdHJldGNoOiBUcnVlL0ZhbHNlCisgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0aGUgY29sdW1uJ3Mgd2lkdGggc2hvdWxkIGJlIGFkanVzdGVkIHdoZW4KKyAgICAgICAgIHRoZSB3aWRnZXQgaXMgcmVzaXplZC4KKyAgICAgICogd2lkdGg6IHdpZHRoCisgICAgICAgICBUaGUgd2lkdGggb2YgdGhlIGNvbHVtbiBpbiBwaXhlbHMuCisKKyAgICAgIFRvIGNvbmZpZ3VyZSB0aGUgdHJlZSBjb2x1bW4sIGNhbGwgdGhpcyB3aXRoIGNvbHVtbiA9ICIjMCIKKworICAgLi4gbWV0aG9kOjogZGVsZXRlKCppdGVtcykKKworICAgICAgRGVsZXRlIGFsbCBzcGVjaWZpZWQgKml0ZW1zKiBhbmQgYWxsIHRoZWlyIGRlc2NlbmRhbnRzLgorCisgICAgICBUaGUgcm9vdCBpdGVtIG1heSBub3QgYmUgZGVsZXRlZC4KKworCisgICAuLiBtZXRob2Q6OiBkZXRhY2goKml0ZW1zKQorCisgICAgICBVbmxpbmtzIGFsbCBvZiB0aGUgc3BlY2lmaWVkICppdGVtcyogZnJvbSB0aGUgdHJlZS4KKworICAgICAgVGhlIGl0ZW1zIGFuZCBhbGwgb2YgdGhlaXIgZGVzY2VuZGFudHMgYXJlIHN0aWxsIHByZXNlbnQsIGFuZCBtYXkgYmUKKyAgICAgIHJlaW5zZXJ0ZWQgYXQgYW5vdGhlciBwb2ludCBpbiB0aGUgdHJlZSwgYnV0IHdpbGwgbm90IGJlIGRpc3BsYXllZC4KKworICAgICAgVGhlIHJvb3QgaXRlbSBtYXkgbm90IGJlIGRldGFjaGVkLgorCisKKyAgIC4uIG1ldGhvZDo6IGV4aXN0cyhpdGVtKQorCisgICAgICBSZXR1cm5zIFRydWUgaWYgdGhlIHNwZWNpZmllZCAqaXRlbSogaXMgcHJlc2VudCBpbiB0aGUgdHJlZS4KKworCisgICAuLiBtZXRob2Q6OiBmb2N1cyhbaXRlbT1Ob25lXSkKKworICAgICAgSWYgKml0ZW0qIGlzIHNwZWNpZmllZCwgc2V0cyB0aGUgZm9jdXMgaXRlbSB0byAqaXRlbSouIE90aGVyd2lzZSwgcmV0dXJucworICAgICAgdGhlIGN1cnJlbnQgZm9jdXMgaXRlbSwgb3IgJycgaWYgdGhlcmUgaXMgbm9uZS4KKworCisgICAuLiBtZXRob2Q6OiBoZWFkaW5nKGNvbHVtblssIG9wdGlvbj1Ob25lWywgKiprd11dKQorCisgICAgICBRdWVyeSBvciBtb2RpZnkgdGhlIGhlYWRpbmcgb3B0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCAqY29sdW1uKi4KKworICAgICAgSWYgKmt3KiBpcyBub3QgZ2l2ZW4sIHJldHVybnMgYSBkaWN0IG9mIHRoZSBoZWFkaW5nIG9wdGlvbiB2YWx1ZXMuIElmCisgICAgICAqb3B0aW9uKiBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgdmFsdWUgZm9yIHRoYXQgKm9wdGlvbiogaXMgcmV0dXJuZWQuCisgICAgICBPdGhlcndpc2UsIHNldHMgdGhlIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLgorCisgICAgICBUaGUgdmFsaWQgb3B0aW9ucy92YWx1ZXMgYXJlOgorCisgICAgICAqIHRleHQ6IHRleHQKKyAgICAgICAgIFRoZSB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIGNvbHVtbiBoZWFkaW5nLgorICAgICAgKiBpbWFnZTogaW1hZ2VOYW1lCisgICAgICAgICBTcGVjaWZpZXMgYW4gaW1hZ2UgdG8gZGlzcGxheSB0byB0aGUgcmlnaHQgb2YgdGhlIGNvbHVtbiBoZWFkaW5nLgorICAgICAgKiBhbmNob3I6IGFuY2hvcgorICAgICAgICAgU3BlY2lmaWVzIGhvdyB0aGUgaGVhZGluZyB0ZXh0IHNob3VsZCBiZSBhbGlnbmVkLiBPbmUgb2YgdGhlIHN0YW5kYXJkCisgICAgICAgICBUayBhbmNob3IgdmFsdWVzLgorICAgICAgKiBjb21tYW5kOiBjYWxsYmFjaworICAgICAgICAgQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIGhlYWRpbmcgbGFiZWwgaXMgcHJlc3NlZC4KKworICAgICAgVG8gY29uZmlndXJlIHRoZSB0cmVlIGNvbHVtbiBoZWFkaW5nLCBjYWxsIHRoaXMgd2l0aCBjb2x1bW4gPSAiIzAiLgorCisKKyAgIC4uIG1ldGhvZDo6IGlkZW50aWZ5KGNvbXBvbmVudCwgeCwgeSkKKworICAgICAgUmV0dXJucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBzcGVjaWZpZWQgKmNvbXBvbmVudCogdW5kZXIgdGhlIHBvaW50IGdpdmVuCisgICAgICBieSAqeCogYW5kICp5Kiwgb3IgdGhlIGVtcHR5IHN0cmluZyBpZiBubyBzdWNoICpjb21wb25lbnQqIGlzIHByZXNlbnQgYXQKKyAgICAgIHRoYXQgcG9zaXRpb24uCisKKworICAgLi4gbWV0aG9kOjogaWRlbnRpZnlfcm93KHkpCisKKyAgICAgIFJldHVybnMgdGhlIGl0ZW0gSUQgb2YgdGhlIGl0ZW0gYXQgcG9zaXRpb24gKnkqLgorCisKKyAgIC4uIG1ldGhvZDo6IGlkZW50aWZ5X2NvbHVtbih4KQorCisgICAgICBSZXR1cm5zIHRoZSBkYXRhIGNvbHVtbiBpZGVudGlmaWVyIG9mIHRoZSBjZWxsIGF0IHBvc2l0aW9uICp4Ki4KKworICAgICAgVGhlIHRyZWUgY29sdW1uIGhhcyBJRCAjMC4KKworCisgICAuLiBtZXRob2Q6OiBpZGVudGlmeV9yZWdpb24oeCwgeSkKKworICAgICAgUmV0dXJucyBvbmUgb2Y6CisKKyAgICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgcmVnaW9uICAgIHwgbWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgICAgIHwgaGVhZGluZyAgIHwgVHJlZSBoZWFkaW5nIGFyZWEuICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgc2VwYXJhdG9yIHwgU3BhY2UgYmV0d2VlbiB0d28gY29sdW1ucyBoZWFkaW5ncy4gIHwKKyAgICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgdHJlZSAgICAgIHwgVGhlIHRyZWUgYXJlYS4gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgY2VsbCAgICAgIHwgQSBkYXRhIGNlbGwuICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgICAgQXZhaWxhYmlsaXR5OiBUayA4LjYuCisKKworICAgLi4gbWV0aG9kOjogaWRlbnRpZnlfZWxlbWVudCh4LCB5KQorCisgICAgICBSZXR1cm5zIHRoZSBlbGVtZW50IGF0IHBvc2l0aW9uICp4KiwgKnkqLgorCisgICAgICBBdmFpbGFiaWxpdHk6IFRrIDguNi4KKworCisgICAuLiBtZXRob2Q6OiBpbmRleChpdGVtKQorCisgICAgICBSZXR1cm5zIHRoZSBpbnRlZ2VyIGluZGV4IG9mICppdGVtKiB3aXRoaW4gaXRzIHBhcmVudCdzIGxpc3Qgb2YgY2hpbGRyZW4uCisKKworICAgLi4gbWV0aG9kOjogaW5zZXJ0KHBhcmVudCwgaW5kZXhbLCBpaWQ9Tm9uZVssICoqa3ddXSkKKworICAgICAgQ3JlYXRlcyBhIG5ldyBpdGVtIGFuZCByZXR1cm5zIHRoZSBpdGVtIGlkZW50aWZpZXIgb2YgdGhlIG5ld2x5IGNyZWF0ZWQKKyAgICAgIGl0ZW0uCisKKyAgICAgICpwYXJlbnQqIGlzIHRoZSBpdGVtIElEIG9mIHRoZSBwYXJlbnQgaXRlbSwgb3IgdGhlIGVtcHR5IHN0cmluZyB0byBjcmVhdGUKKyAgICAgIGEgbmV3IHRvcC1sZXZlbCBpdGVtLiAqaW5kZXgqIGlzIGFuIGludGVnZXIsIG9yIHRoZSB2YWx1ZSAiZW5kIiwKKyAgICAgIHNwZWNpZnlpbmcgd2hlcmUgaW4gdGhlIGxpc3Qgb2YgcGFyZW50J3MgY2hpbGRyZW4gdG8gaW5zZXJ0IHRoZSBuZXcgaXRlbS4KKyAgICAgIElmICppbmRleCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIHRoZSBuZXcgbm9kZSBpcyBpbnNlcnRlZCBhdAorICAgICAgdGhlIGJlZ2lubmluZzsgaWYgKmluZGV4KiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgbnVtYmVyCisgICAgICBvZiBjaGlsZHJlbiwgaXQgaXMgaW5zZXJ0ZWQgYXQgdGhlIGVuZC4gSWYgKmlpZCogaXMgc3BlY2lmaWVkLCBpdCBpcyB1c2VkCisgICAgICBhcyB0aGUgaXRlbSBpZGVudGlmaWVyOyAqaWlkKiBtdXN0IG5vdCBhbHJlYWR5IGV4aXN0IGluIHRoZSB0cmVlLgorICAgICAgT3RoZXJ3aXNlLCBhIG5ldyB1bmlxdWUgaWRlbnRpZmllciBpcyBnZW5lcmF0ZWQuCisKKyAgICAgIFNlZSBgSXRlbSBPcHRpb25zYF8gZm9yIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBwb2ludHMuCisKKworICAgLi4gbWV0aG9kOjogaXRlbShpdGVtWywgb3B0aW9uWywgKiprd11dKQorCisgICAgICBRdWVyeSBvciBtb2RpZnkgdGhlIG9wdGlvbnMgZm9yIHRoZSBzcGVjaWZpZWQgKml0ZW0qLgorCisgICAgICBJZiBubyBvcHRpb25zIGFyZSBnaXZlbiwgYSBkaWN0IHdpdGggb3B0aW9ucy92YWx1ZXMgZm9yIHRoZSBpdGVtIGlzCisgICAgICByZXR1cm5lZC4KKyAgICAgIElmICpvcHRpb24qIGlzIHNwZWNpZmllZCB0aGVuIHRoZSB2YWx1ZSBmb3IgdGhhdCBvcHRpb24gaXMgcmV0dXJuZWQuCisgICAgICBPdGhlcndpc2UsIHNldHMgdGhlIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGFzIGdpdmVuIGJ5ICprdyouCisKKworICAgLi4gbWV0aG9kOjogbW92ZShpdGVtLCBwYXJlbnQsIGluZGV4KQorCisgICAgICBNb3ZlcyAqaXRlbSogdG8gcG9zaXRpb24gKmluZGV4KiBpbiAqcGFyZW50KidzIGxpc3Qgb2YgY2hpbGRyZW4uCisKKyAgICAgIEl0IGlzIGlsbGVnYWwgdG8gbW92ZSBhbiBpdGVtIHVuZGVyIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMuIElmICppbmRleCogaXMKKyAgICAgIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCAqaXRlbSogaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZzsgaWYgZ3JlYXRlcgorICAgICAgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLCBpdCBpcyBtb3ZlZCB0byB0aGUgZW5kLiBJZiAqaXRlbSoKKyAgICAgIHdhcyBkZXRhY2hlZCBpdCBpcyByZWF0dGFjaGVkLgorCisKKyAgIC4uIG1ldGhvZDo6IG5leHQoaXRlbSkKKworICAgICAgUmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiAqaXRlbSoncyBuZXh0IHNpYmxpbmcsIG9yICcnIGlmICppdGVtKiBpcyB0aGUKKyAgICAgIGxhc3QgY2hpbGQgb2YgaXRzIHBhcmVudC4KKworCisgICAuLiBtZXRob2Q6OiBwYXJlbnQoaXRlbSkKKworICAgICAgUmV0dXJucyB0aGUgSUQgb2YgdGhlIHBhcmVudCBvZiAqaXRlbSosIG9yICcnIGlmICppdGVtKiBpcyBhdCB0aGUgdG9wCisgICAgICBsZXZlbCBvZiB0aGUgaGllcmFyY2h5LgorCisKKyAgIC4uIG1ldGhvZDo6IHByZXYoaXRlbSkKKworICAgICAgUmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiAqaXRlbSoncyBwcmV2aW91cyBzaWJsaW5nLCBvciAnJyBpZiAqaXRlbSogaXMKKyAgICAgIHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFyZW50LgorCisKKyAgIC4uIG1ldGhvZDo6IHJlYXR0YWNoKGl0ZW0sIHBhcmVudCwgaW5kZXgpCisKKyAgICAgIEFuIGFsaWFzIGZvciA6bWV0aDpgVHJlZXZpZXcubW92ZWAuCisKKworICAgLi4gbWV0aG9kOjogc2VlKGl0ZW0pCisKKyAgICAgIEVuc3VyZSB0aGF0ICppdGVtKiBpcyB2aXNpYmxlLgorCisgICAgICBTZXRzIGFsbCBvZiAqaXRlbSoncyBhbmNlc3RvcnMgb3BlbiBvcHRpb24gdG8gVHJ1ZSwgYW5kIHNjcm9sbHMgdGhlCisgICAgICB3aWRnZXQgaWYgbmVjZXNzYXJ5IHNvIHRoYXQgKml0ZW0qIGlzIHdpdGhpbiB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mCisgICAgICB0aGUgdHJlZS4KKworCisgICAuLiBtZXRob2Q6OiBzZWxlY3Rpb24oW3NlbG9wPU5vbmVbLCBpdGVtcz1Ob25lXV0pCisKKyAgICAgIElmICpzZWxvcCogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBzZWxlY3RlZCBpdGVtcy4gT3RoZXJ3aXNlLCBpdCB3aWxsCisgICAgICBhY3QgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgc2VsZWN0aW9uIG1ldGhvZHMuCisKKworICAgLi4gbWV0aG9kOjogc2VsZWN0aW9uX3NldChpdGVtcykKKworICAgICAgKml0ZW1zKiBiZWNvbWVzIHRoZSBuZXcgc2VsZWN0aW9uLgorCisKKyAgIC4uIG1ldGhvZDo6IHNlbGVjdGlvbl9hZGQoaXRlbXMpCisKKyAgICAgIEFkZCAqaXRlbXMqIHRvIHRoZSBzZWxlY3Rpb24uCisKKworICAgLi4gbWV0aG9kOjogc2VsZWN0aW9uX3JlbW92ZShpdGVtcykKKworICAgICAgUmVtb3ZlICppdGVtcyogZnJvbSB0aGUgc2VsZWN0aW9uLgorCisKKyAgIC4uIG1ldGhvZDo6IHNlbGVjdGlvbl90b2dnbGUoaXRlbXMpCisKKyAgICAgIFRvZ2dsZSB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIGVhY2ggaXRlbSBpbiAqaXRlbXMqLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldChpdGVtWywgY29sdW1uPU5vbmVbLCB2YWx1ZT1Ob25lXV0pCisKKyAgICAgIFdpdGggb25lIGFyZ3VtZW50LCByZXR1cm5zIGEgZGljdGlvbmFyeSBvZiBjb2x1bW4vdmFsdWUgcGFpcnMgZm9yIHRoZQorICAgICAgc3BlY2lmaWVkICppdGVtKi4gV2l0aCB0d28gYXJndW1lbnRzLCByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQorICAgICAgc3BlY2lmaWVkICpjb2x1bW4qLiBXaXRoIHRocmVlIGFyZ3VtZW50cywgc2V0cyB0aGUgdmFsdWUgb2YgZ2l2ZW4KKyAgICAgICpjb2x1bW4qIGluIGdpdmVuICppdGVtKiB0byB0aGUgc3BlY2lmaWVkICp2YWx1ZSouCisKKworICAgLi4gbWV0aG9kOjogdGFnX2JpbmQodGFnbmFtZVssIHNlcXVlbmNlPU5vbmVbLCBjYWxsYmFjaz1Ob25lXV0pCisKKyAgICAgIEJpbmQgYSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIGV2ZW50ICpzZXF1ZW5jZSogdG8gdGhlIHRhZyAqdGFnbmFtZSouCisgICAgICBXaGVuIGFuIGV2ZW50IGlzIGRlbGl2ZXJlZCB0byBhbiBpdGVtLCB0aGUgY2FsbGJhY2tzIGZvciBlYWNoIG9mIHRoZQorICAgICAgaXRlbSdzIHRhZ3Mgb3B0aW9uIGFyZSBjYWxsZWQuCisKKworICAgLi4gbWV0aG9kOjogdGFnX2NvbmZpZ3VyZSh0YWduYW1lWywgb3B0aW9uPU5vbmVbLCAqKmt3XV0pCisKKyAgICAgIFF1ZXJ5IG9yIG1vZGlmeSB0aGUgb3B0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCAqdGFnbmFtZSouCisKKyAgICAgIElmICprdyogaXMgbm90IGdpdmVuLCByZXR1cm5zIGEgZGljdCBvZiB0aGUgb3B0aW9uIHNldHRpbmdzIGZvcgorICAgICAgKnRhZ25hbWUqLiBJZiAqb3B0aW9uKiBpcyBzcGVjaWZpZWQsIHJldHVybnMgdGhlIHZhbHVlIGZvciB0aGF0ICpvcHRpb24qCisgICAgICBmb3IgdGhlIHNwZWNpZmllZCAqdGFnbmFtZSouIE90aGVyd2lzZSwgc2V0cyB0aGUgb3B0aW9ucyB0byB0aGUKKyAgICAgIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gKnRhZ25hbWUqLgorCisKKyAgIC4uIG1ldGhvZDo6IHRhZ19oYXModGFnbmFtZVssIGl0ZW1dKQorCisgICAgICBJZiAqaXRlbSogaXMgc3BlY2lmaWVkLCByZXR1cm5zIDEgb3IgMCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc3BlY2lmaWVkCisgICAgICAqaXRlbSogaGFzIHRoZSBnaXZlbiAqdGFnbmFtZSouIE90aGVyd2lzZSwgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zCisgICAgICB0aGF0IGhhdmUgdGhlIHNwZWNpZmllZCB0YWcuCisKKyAgICAgIEF2YWlsYWJpbGl0eTogVGsgOC42CisKKworICAgLi4gbWV0aG9kOjogeHZpZXcoKmFyZ3MpCisKKyAgICAgIFF1ZXJ5IG9yIG1vZGlmeSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSB0cmVldmlldy4KKworCisgICAuLiBtZXRob2Q6OiB5dmlldygqYXJncykKKworICAgICAgUXVlcnkgb3IgbW9kaWZ5IHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSB0cmVldmlldy4KKworCisuLiBfVHRrU3R5bGluZzoKKworVHRrIFN0eWxpbmcKKy0tLS0tLS0tLS0tCisKK0VhY2ggd2lkZ2V0IGluIDptb2Q6YHR0a2AgaXMgYXNzaWduZWQgYSBzdHlsZSwgd2hpY2ggc3BlY2lmaWVzIHRoZSBzZXQgb2YKK2VsZW1lbnRzIG1ha2luZyB1cCB0aGUgd2lkZ2V0IGFuZCBob3cgdGhleSBhcmUgYXJyYW5nZWQsIGFsb25nIHdpdGggZHluYW1pYyBhbmQKK2RlZmF1bHQgc2V0dGluZ3MgZm9yIGVsZW1lbnQgb3B0aW9ucy4gQnkgZGVmYXVsdCB0aGUgc3R5bGUgbmFtZSBpcyB0aGUgc2FtZSBhcwordGhlIHdpZGdldCdzIGNsYXNzIG5hbWUsIGJ1dCBpdCBtYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgd2lkZ2V0J3Mgc3R5bGUKK29wdGlvbi4gSWYgdGhlIGNsYXNzIG5hbWUgb2YgYSB3aWRnZXQgaXMgdW5rbm93biwgdXNlIHRoZSBtZXRob2QKKzptZXRoOmBNaXNjLndpbmZvX2NsYXNzYCAoc29tZXdpZGdldC53aW5mb19jbGFzcygpKS4KKworLi4gc2VlYWxzbzo6CisKKyAgIGBUY2wnMjAwNCBjb25mZXJlbmNlIHByZXNlbnRhdGlvbiA8aHR0cDovL3RrdGFibGUuc291cmNlZm9yZ2UubmV0L3RpbGUvdGlsZS10Y2wyMDA0LnBkZj5gXworICAgICAgVGhpcyBkb2N1bWVudCBleHBsYWlucyBob3cgdGhlIHRoZW1lIGVuZ2luZSB3b3JrcworCisKKy4uIGNsYXNzOjogU3R5bGUKKworICAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIHN0eWxlIGRhdGFiYXNlLgorCisKKyAgIC4uIG1ldGhvZDo6IGNvbmZpZ3VyZShzdHlsZSwgcXVlcnlfb3B0PU5vbmUsICoqa3cpCisKKyAgICAgIFF1ZXJ5IG9yIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbihzKSBpbiAqc3R5bGUqLgorCisgICAgICBFYWNoIGtleSBpbiAqa3cqIGlzIGFuIG9wdGlvbiBhbmQgZWFjaCB2YWx1ZSBpcyBhIHN0cmluZyBpZGVudGlmeWluZworICAgICAgdGhlIHZhbHVlIGZvciB0aGF0IG9wdGlvbi4KKworICAgICAgRm9yIGV4YW1wbGUsIHRvIGNoYW5nZSBldmVyeSBkZWZhdWx0IGJ1dHRvbiB0byBiZSBhIGZsYXQgYnV0dG9uIHdpdGggc29tZQorICAgICAgcGFkZGluZyBhbmQgYSBkaWZmZXJlbnQgYmFja2dyb3VuZCBjb2xvciBkbzo6CisKKyAgICAgICAgIGltcG9ydCB0dGsKKyAgICAgICAgIGltcG9ydCBUa2ludGVyCisKKyAgICAgICAgIHJvb3QgPSBUa2ludGVyLlRrKCkKKworICAgICAgICAgdHRrLlN0eWxlKCkuY29uZmlndXJlKCJUQnV0dG9uIiwgcGFkZGluZz02LCByZWxpZWY9ImZsYXQiLAorICAgICAgICAgICAgYmFja2dyb3VuZD0iI2NjYyIpCisKKyAgICAgICAgIGJ0biA9IHR0ay5CdXR0b24odGV4dD0iU2FtcGxlIikKKyAgICAgICAgIGJ0bi5wYWNrKCkKKworICAgICAgICAgcm9vdC5tYWlubG9vcCgpCisKKworICAgLi4gbWV0aG9kOjogbWFwKHN0eWxlLCBxdWVyeV9vcHQ9Tm9uZSwgKiprdykKKworICAgICAgUXVlcnkgb3Igc2V0cyBkeW5hbWljIHZhbHVlcyBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbihzKSBpbiAqc3R5bGUqLgorCisgICAgICBFYWNoIGtleSBpbiAqa3cqIGlzIGFuIG9wdGlvbiBhbmQgZWFjaCB2YWx1ZSBzaG91bGQgYmUgYSBsaXN0IG9yIGEKKyAgICAgIHR1cGxlICh1c3VhbGx5KSBjb250YWluaW5nIHN0YXRlc3BlY3MgZ3JvdXBlZCBpbiB0dXBsZXMsIGxpc3RzLCBvcgorICAgICAgc29tZXRoaW5nIGVsc2Ugb2YgeW91ciBwcmVmZXJlbmNlLiBBIHN0YXRlc3BlYyBpcyBhIGNvbXBvdW5kIG9mIG9uZQorICAgICAgb3IgbW9yZSBzdGF0ZXMgYW5kIHRoZW4gYSB2YWx1ZS4KKworICAgICAgQW4gZXhhbXBsZTo6CisKKyAgICAgICAgIGltcG9ydCBUa2ludGVyCisgICAgICAgICBpbXBvcnQgdHRrCisKKyAgICAgICAgIHJvb3QgPSBUa2ludGVyLlRrKCkKKworICAgICAgICAgc3R5bGUgPSB0dGsuU3R5bGUoKQorICAgICAgICAgc3R5bGUubWFwKCJDLlRCdXR0b24iLAorICAgICAgICAgICAgIGZvcmVncm91bmQ9WygncHJlc3NlZCcsICdyZWQnKSwgKCdhY3RpdmUnLCAnYmx1ZScpXSwKKyAgICAgICAgICAgICBiYWNrZ3JvdW5kPVsoJ3ByZXNzZWQnLCAnIWRpc2FibGVkJywgJ2JsYWNrJyksICgnYWN0aXZlJywgJ3doaXRlJyldCisgICAgICAgICAgICAgKQorCisgICAgICAgICBjb2xvcmVkX2J0biA9IHR0ay5CdXR0b24odGV4dD0iVGVzdCIsIHN0eWxlPSJDLlRCdXR0b24iKS5wYWNrKCkKKworICAgICAgICAgcm9vdC5tYWlubG9vcCgpCisKKworICAgICAgTm90ZSB0aGF0IHRoZSBvcmRlciBvZiB0aGUgKHN0YXRlcywgdmFsdWUpIHNlcXVlbmNlcyBmb3IgYW4KKyAgICAgIG9wdGlvbiBtYXR0ZXJzLiAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIGlmIHlvdSBjaGFuZ2UgdGhlCisgICAgICBvcmRlciB0byBgYFsoJ2FjdGl2ZScsICdibHVlJyksICgncHJlc3NlZCcsICdyZWQnKV1gYCBpbiB0aGUKKyAgICAgIGZvcmVncm91bmQgb3B0aW9uLCBmb3IgZXhhbXBsZSwgeW91IHdvdWxkIGdldCBhIGJsdWUgZm9yZWdyb3VuZAorICAgICAgd2hlbiB0aGUgd2lkZ2V0IGlzIGluIHRoZSBhY3RpdmUgb3IgcHJlc3NlZCBzdGF0ZXMuCisKKyAgIC4uIG1ldGhvZDo6IGxvb2t1cChzdHlsZSwgb3B0aW9uWywgc3RhdGU9Tm9uZVssIGRlZmF1bHQ9Tm9uZV1dKQorCisgICAgICBSZXR1cm5zIHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yICpvcHRpb24qIGluICpzdHlsZSouCisKKyAgICAgIElmICpzdGF0ZSogaXMgc3BlY2lmaWVkLCBpdCBpcyBleHBlY3RlZCB0byBiZSBhIHNlcXVlbmNlIG9mIG9uZSBvciBtb3JlCisgICAgICBzdGF0ZXMuIElmIHRoZSAqZGVmYXVsdCogYXJndW1lbnQgaXMgc2V0LCBpdCBpcyB1c2VkIGFzIGEgZmFsbGJhY2sgdmFsdWUKKyAgICAgIGluIGNhc2Ugbm8gc3BlY2lmaWNhdGlvbiBmb3Igb3B0aW9uIGlzIGZvdW5kLgorCisgICAgICBUbyBjaGVjayB3aGF0IGZvbnQgYSBCdXR0b24gdXNlcyBieSBkZWZhdWx0LCBkbzo6CisKKyAgICAgICAgIGltcG9ydCB0dGsKKworICAgICAgICAgcHJpbnQgdHRrLlN0eWxlKCkubG9va3VwKCJUQnV0dG9uIiwgImZvbnQiKQorCisKKyAgIC4uIG1ldGhvZDo6IGxheW91dChzdHlsZVssIGxheW91dHNwZWM9Tm9uZV0pCisKKyAgICAgIERlZmluZSB0aGUgd2lkZ2V0IGxheW91dCBmb3IgZ2l2ZW4gKnN0eWxlKi4gSWYgKmxheW91dHNwZWMqIGlzIG9taXR0ZWQsCisgICAgICByZXR1cm4gdGhlIGxheW91dCBzcGVjaWZpY2F0aW9uIGZvciBnaXZlbiBzdHlsZS4KKworICAgICAgKmxheW91dHNwZWMqLCBpZiBzcGVjaWZpZWQsIGlzIGV4cGVjdGVkIHRvIGJlIGEgbGlzdCBvciBzb21lIG90aGVyCisgICAgICBzZXF1ZW5jZSB0eXBlIChleGNsdWRpbmcgc3RyaW5ncyksIHdoZXJlIGVhY2ggaXRlbSBzaG91bGQgYmUgYSB0dXBsZSBhbmQKKyAgICAgIHRoZSBmaXJzdCBpdGVtIGlzIHRoZSBsYXlvdXQgbmFtZSBhbmQgdGhlIHNlY29uZCBpdGVtIHNob3VsZCBoYXZlIHRoZQorICAgICAgZm9ybWF0IGRlc2NyaWJlZCBkZXNjcmliZWQgaW4gYExheW91dHNgXy4KKworICAgICAgVG8gdW5kZXJzdGFuZCB0aGUgZm9ybWF0LCBzZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlIChpdCBpcyBub3QKKyAgICAgIGludGVuZGVkIHRvIGRvIGFueXRoaW5nIHVzZWZ1bCk6OgorCisgICAgICAgICBpbXBvcnQgdHRrCisgICAgICAgICBpbXBvcnQgVGtpbnRlcgorCisgICAgICAgICByb290ID0gVGtpbnRlci5UaygpCisKKyAgICAgICAgIHN0eWxlID0gdHRrLlN0eWxlKCkKKyAgICAgICAgIHN0eWxlLmxheW91dCgiVE1lbnVidXR0b24iLCBbCisgICAgICAgICAgICAoIk1lbnVidXR0b24uYmFja2dyb3VuZCIsIE5vbmUpLAorICAgICAgICAgICAgKCJNZW51YnV0dG9uLmJ1dHRvbiIsIHsiY2hpbGRyZW4iOgorICAgICAgICAgICAgICAgIFsoIk1lbnVidXR0b24uZm9jdXMiLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICAgICAgWygiTWVudWJ1dHRvbi5wYWRkaW5nIiwgeyJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgICAgICAgICBbKCJNZW51YnV0dG9uLmxhYmVsIiwgeyJzaWRlIjogImxlZnQiLCAiZXhwYW5kIjogMX0pXQorICAgICAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgIH0pLAorICAgICAgICAgXSkKKworICAgICAgICAgbWJ0biA9IHR0ay5NZW51YnV0dG9uKHRleHQ9J1RleHQnKQorICAgICAgICAgbWJ0bi5wYWNrKCkKKyAgICAgICAgIHJvb3QubWFpbmxvb3AoKQorCisKKyAgIC4uIG1ldGhvZDo6IGVsZW1lbnRfY3JlYXRlKGVsZW1lbnRuYW1lLCBldHlwZSwgKmFyZ3MsICoqa3cpCisKKyAgICAgIENyZWF0ZSBhIG5ldyBlbGVtZW50IGluIHRoZSBjdXJyZW50IHRoZW1lLCBvZiB0aGUgZ2l2ZW4gKmV0eXBlKiB3aGljaCBpcworICAgICAgZXhwZWN0ZWQgdG8gYmUgZWl0aGVyICJpbWFnZSIsICJmcm9tIiBvciAidnNhcGkiLiBUaGUgbGF0dGVyIGlzIG9ubHkKKyAgICAgIGF2YWlsYWJsZSBpbiBUayA4LjZhIGZvciBXaW5kb3dzIFhQIGFuZCBWaXN0YSBhbmQgaXMgbm90IGRlc2NyaWJlZCBoZXJlLgorCisgICAgICBJZiAiaW1hZ2UiIGlzIHVzZWQsICphcmdzKiBzaG91bGQgY29udGFpbiB0aGUgZGVmYXVsdCBpbWFnZSBuYW1lIGZvbGxvd2VkCisgICAgICBieSBzdGF0ZXNwZWMvdmFsdWUgcGFpcnMgKHRoaXMgaXMgdGhlIGltYWdlc3BlYyksIGFuZCAqa3cqIG1heSBoYXZlIHRoZQorICAgICAgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAgICAgICAqIGJvcmRlcj1wYWRkaW5nCisgICAgICAgICAgcGFkZGluZyBpcyBhIGxpc3Qgb2YgdXAgdG8gZm91ciBpbnRlZ2Vycywgc3BlY2lmeWluZyB0aGUgbGVmdCwgdG9wLAorICAgICAgICAgIHJpZ2h0LCBhbmQgYm90dG9tIGJvcmRlcnMsIHJlc3BlY3RpdmVseS4KKworICAgICAgICogaGVpZ2h0PWhlaWdodAorICAgICAgICAgIFNwZWNpZmllcyBhIG1pbmltdW0gaGVpZ2h0IGZvciB0aGUgZWxlbWVudC4gSWYgbGVzcyB0aGFuIHplcm8sIHRoZQorICAgICAgICAgIGJhc2UgaW1hZ2UncyBoZWlnaHQgaXMgdXNlZCBhcyBhIGRlZmF1bHQuCisKKyAgICAgICAqIHBhZGRpbmc9cGFkZGluZworICAgICAgICAgIFNwZWNpZmllcyB0aGUgZWxlbWVudCdzIGludGVyaW9yIHBhZGRpbmcuIERlZmF1bHRzIHRvIGJvcmRlcidzIHZhbHVlCisgICAgICAgICAgaWYgbm90IHNwZWNpZmllZC4KKworICAgICAgICogc3RpY2t5PXNwZWMKKyAgICAgICAgICBTcGVjaWZpZXMgaG93IHRoZSBpbWFnZSBpcyBwbGFjZWQgd2l0aGluIHRoZSBmaW5hbCBwYXJjZWwuIHNwZWMKKyAgICAgICAgICBjb250YWlucyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycyDigJxu4oCdLCDigJxz4oCdLCDigJx34oCdLCBvciDigJxl4oCdLgorCisgICAgICAgKiB3aWR0aD13aWR0aAorICAgICAgICAgIFNwZWNpZmllcyBhIG1pbmltdW0gd2lkdGggZm9yIHRoZSBlbGVtZW50LiBJZiBsZXNzIHRoYW4gemVybywgdGhlCisgICAgICAgICAgYmFzZSBpbWFnZSdzIHdpZHRoIGlzIHVzZWQgYXMgYSBkZWZhdWx0LgorCisgICAgICBJZiAiZnJvbSIgaXMgdXNlZCBhcyB0aGUgdmFsdWUgb2YgKmV0eXBlKiwKKyAgICAgIDptZXRoOmBlbGVtZW50X2NyZWF0ZWAgd2lsbCBjbG9uZSBhbiBleGlzdGluZworICAgICAgZWxlbWVudC4gKmFyZ3MqIGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYSB0aGVtZW5hbWUsIGZyb20gd2hpY2gKKyAgICAgIHRoZSBlbGVtZW50IHdpbGwgYmUgY2xvbmVkLCBhbmQgb3B0aW9uYWxseSBhbiBlbGVtZW50IHRvIGNsb25lIGZyb20uCisgICAgICBJZiB0aGlzIGVsZW1lbnQgdG8gY2xvbmUgZnJvbSBpcyBub3Qgc3BlY2lmaWVkLCBhbiBlbXB0eSBlbGVtZW50IHdpbGwKKyAgICAgIGJlIHVzZWQuICprdyogaXMgZGlzY2FyZGVkLgorCisKKyAgIC4uIG1ldGhvZDo6IGVsZW1lbnRfbmFtZXMoKQorCisgICAgICBSZXR1cm5zIHRoZSBsaXN0IG9mIGVsZW1lbnRzIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgdGhlbWUuCisKKworICAgLi4gbWV0aG9kOjogZWxlbWVudF9vcHRpb25zKGVsZW1lbnRuYW1lKQorCisgICAgICBSZXR1cm5zIHRoZSBsaXN0IG9mICplbGVtZW50bmFtZSoncyBvcHRpb25zLgorCisKKyAgIC4uIG1ldGhvZDo6IHRoZW1lX2NyZWF0ZSh0aGVtZW5hbWVbLCBwYXJlbnQ9Tm9uZVssIHNldHRpbmdzPU5vbmVdXSkKKworICAgICAgQ3JlYXRlIGEgbmV3IHRoZW1lLgorCisgICAgICBJdCBpcyBhbiBlcnJvciBpZiAqdGhlbWVuYW1lKiBhbHJlYWR5IGV4aXN0cy4gSWYgKnBhcmVudCogaXMgc3BlY2lmaWVkLAorICAgICAgdGhlIG5ldyB0aGVtZSB3aWxsIGluaGVyaXQgc3R5bGVzLCBlbGVtZW50cyBhbmQgbGF5b3V0cyBmcm9tIHRoZSBwYXJlbnQKKyAgICAgIHRoZW1lLiBJZiAqc2V0dGluZ3MqIGFyZSBwcmVzZW50IHRoZXkgYXJlIGV4cGVjdGVkIHRvIGhhdmUgdGhlIHNhbWUKKyAgICAgIHN5bnRheCB1c2VkIGZvciA6bWV0aDpgdGhlbWVfc2V0dGluZ3NgLgorCisKKyAgIC4uIG1ldGhvZDo6IHRoZW1lX3NldHRpbmdzKHRoZW1lbmFtZSwgc2V0dGluZ3MpCisKKyAgICAgIFRlbXBvcmFyaWx5IHNldHMgdGhlIGN1cnJlbnQgdGhlbWUgdG8gKnRoZW1lbmFtZSosIGFwcGx5IHNwZWNpZmllZAorICAgICAgKnNldHRpbmdzKiBhbmQgdGhlbiByZXN0b3JlIHRoZSBwcmV2aW91cyB0aGVtZS4KKworICAgICAgRWFjaCBrZXkgaW4gKnNldHRpbmdzKiBpcyBhIHN0eWxlIGFuZCBlYWNoIHZhbHVlIG1heSBjb250YWluIHRoZSBrZXlzCisgICAgICAnY29uZmlndXJlJywgJ21hcCcsICdsYXlvdXQnIGFuZCAnZWxlbWVudCBjcmVhdGUnIGFuZCB0aGV5IGFyZSBleHBlY3RlZAorICAgICAgdG8gaGF2ZSB0aGUgc2FtZSBmb3JtYXQgYXMgc3BlY2lmaWVkIGJ5IHRoZSBtZXRob2RzCisgICAgICA6bWV0aDpgU3R5bGUuY29uZmlndXJlYCwgOm1ldGg6YFN0eWxlLm1hcGAsIDptZXRoOmBTdHlsZS5sYXlvdXRgIGFuZAorICAgICAgOm1ldGg6YFN0eWxlLmVsZW1lbnRfY3JlYXRlYCByZXNwZWN0aXZlbHkuCisKKyAgICAgIEFzIGFuIGV4YW1wbGUsIGxldCdzIGNoYW5nZSB0aGUgQ29tYm9ib3ggZm9yIHRoZSBkZWZhdWx0IHRoZW1lIGEgYml0OjoKKworICAgICAgICAgaW1wb3J0IHR0aworICAgICAgICAgaW1wb3J0IFRraW50ZXIKKworICAgICAgICAgcm9vdCA9IFRraW50ZXIuVGsoKQorCisgICAgICAgICBzdHlsZSA9IHR0ay5TdHlsZSgpCisgICAgICAgICBzdHlsZS50aGVtZV9zZXR0aW5ncygiZGVmYXVsdCIsIHsKKyAgICAgICAgICAgICJUQ29tYm9ib3giOiB7CisgICAgICAgICAgICAgICAgImNvbmZpZ3VyZSI6IHsicGFkZGluZyI6IDV9LAorICAgICAgICAgICAgICAgICJtYXAiOiB7CisgICAgICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kIjogWygiYWN0aXZlIiwgImdyZWVuMiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIiFkaXNhYmxlZCIsICJncmVlbjQiKV0sCisgICAgICAgICAgICAgICAgICAgICJmaWVsZGJhY2tncm91bmQiOiBbKCIhZGlzYWJsZWQiLCAiZ3JlZW4zIildLAorICAgICAgICAgICAgICAgICAgICAiZm9yZWdyb3VuZCI6IFsoImZvY3VzIiwgIk9saXZlRHJhYjEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCIhZGlzYWJsZWQiLCAiT2xpdmVEcmFiMiIpXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0pCisKKyAgICAgICAgIGNvbWJvID0gdHRrLkNvbWJvYm94KCkucGFjaygpCisKKyAgICAgICAgIHJvb3QubWFpbmxvb3AoKQorCisKKyAgIC4uIG1ldGhvZDo6IHRoZW1lX25hbWVzKCkKKworICAgICAgUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGtub3duIHRoZW1lcy4KKworCisgICAuLiBtZXRob2Q6OiB0aGVtZV91c2UoW3RoZW1lbmFtZV0pCisKKyAgICAgIElmICp0aGVtZW5hbWUqIGlzIG5vdCBnaXZlbiwgcmV0dXJucyB0aGUgdGhlbWUgaW4gdXNlLiAgT3RoZXJ3aXNlLCBzZXRzCisgICAgICB0aGUgY3VycmVudCB0aGVtZSB0byAqdGhlbWVuYW1lKiwgcmVmcmVzaGVzIGFsbCB3aWRnZXRzIGFuZCBlbWl0cyBhCisgICAgICA8PFRoZW1lQ2hhbmdlZD4+IGV2ZW50LgorCisKK0xheW91dHMKK15eXl5eXl4KKworQSBsYXlvdXQgY2FuIGJlIGp1c3QgTm9uZSwgaWYgaXQgdGFrZXMgbm8gb3B0aW9ucywgb3IgYSBkaWN0IG9mCitvcHRpb25zIHNwZWNpZnlpbmcgaG93IHRvIGFycmFuZ2UgdGhlIGVsZW1lbnQuIFRoZSBsYXlvdXQgbWVjaGFuaXNtCit1c2VzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBwYWNrIGdlb21ldHJ5IG1hbmFnZXI6IGdpdmVuIGFuCitpbml0aWFsIGNhdml0eSwgZWFjaCBlbGVtZW50IGlzIGFsbG9jYXRlZCBhIHBhcmNlbC4gVmFsaWQKK29wdGlvbnMvdmFsdWVzIGFyZToKKworICogc2lkZTogd2hpY2hzaWRlCisgICAgU3BlY2lmaWVzIHdoaWNoIHNpZGUgb2YgdGhlIGNhdml0eSB0byBwbGFjZSB0aGUgZWxlbWVudDsgb25lIG9mCisgICAgdG9wLCByaWdodCwgYm90dG9tIG9yIGxlZnQuIElmIG9taXR0ZWQsIHRoZSBlbGVtZW50IG9jY3VwaWVzIHRoZQorICAgIGVudGlyZSBjYXZpdHkuCisKKyAqIHN0aWNreTogbnN3ZQorICAgIFNwZWNpZmllcyB3aGVyZSB0aGUgZWxlbWVudCBpcyBwbGFjZWQgaW5zaWRlIGl0cyBhbGxvY2F0ZWQgcGFyY2VsLgorCisgKiB1bml0OiAwIG9yIDEKKyAgICBJZiBzZXQgdG8gMSwgY2F1c2VzIHRoZSBlbGVtZW50IGFuZCBhbGwgb2YgaXRzIGRlc2NlbmRhbnRzIHRvIGJlIHRyZWF0ZWQgYXMKKyAgICBhIHNpbmdsZSBlbGVtZW50IGZvciB0aGUgcHVycG9zZXMgb2YgOm1ldGg6YFdpZGdldC5pZGVudGlmeWAgZXQgYWwuIEl0J3MKKyAgICB1c2VkIGZvciB0aGluZ3MgbGlrZSBzY3JvbGxiYXIgdGh1bWJzIHdpdGggZ3JpcHMuCisKKyAqIGNoaWxkcmVuOiBbc3VibGF5b3V0Li4uIF0KKyAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGVsZW1lbnRzIHRvIHBsYWNlIGluc2lkZSB0aGUgZWxlbWVudC4gRWFjaAorICAgIGVsZW1lbnQgaXMgYSB0dXBsZSAob3Igb3RoZXIgc2VxdWVuY2UgdHlwZSkgd2hlcmUgdGhlIGZpcnN0IGl0ZW0gaXMKKyAgICB0aGUgbGF5b3V0IG5hbWUsIGFuZCB0aGUgb3RoZXIgaXMgYSBgTGF5b3V0YF8uCisKKy4uIF9MYXlvdXQ6IGBMYXlvdXRzYF8KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3R1cnRsZS5yc3QgYi9Eb2MvbGlicmFyeS90dXJ0bGUucnN0CmluZGV4IDI0OWViMjMuLjBmMzY4YWQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3R1cnRsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHVydGxlLnJzdApAQCAtNzA4LDcgKzcwOCwxMCBAQAogICAgICAgPj4+IHR1cnRsZS5sZWZ0KDkwKQogICAgICAgPj4+IHR1cnRsZS5oZWFkaW5nKCkKICAgICAgIDkwLjAKLSAgICAgID4+PiB0dXJ0bGUuZGVncmVlcyg0MDAuMCkgICMgYW5nbGUgbWVhc3VyZW1lbnQgaW4gZ29uCisKKyAgICAgIENoYW5nZSBhbmdsZSBtZWFzdXJlbWVudCB1bml0IHRvIGdyYWQgKGFsc28ga25vd24gYXMgZ29uLAorICAgICAgZ3JhZGUsIG9yIGdyYWRpYW4gYW5kIGVxdWFscyAxLzEwMC10aCBvZiB0aGUgcmlnaHQgYW5nbGUuKQorICAgICAgPj4+IHR1cnRsZS5kZWdyZWVzKDQwMC4wKQogICAgICAgPj4+IHR1cnRsZS5oZWFkaW5nKCkKICAgICAgIDEwMC4wCiAgICAgICA+Pj4gdHVydGxlLmRlZ3JlZXMoMzYwKQpAQCAtODc1LDcgKzg3OCw3IEBACiAgICAgICAgPj4+IHR1cCA9ICgwLjIsIDAuOCwgMC41NSkKICAgICAgICA+Pj4gdHVydGxlLnBlbmNvbG9yKHR1cCkKICAgICAgICA+Pj4gdHVydGxlLnBlbmNvbG9yKCkKLSAgICAgICAoMC4yMDAwMDAwMDAwMDAwMDAwMSwgMC44MDAwMDAwMDAwMDAwMDAwNCwgMC41NDkwMTk2MDc4NDMxMzczKQorICAgICAgICgwLjIsIDAuOCwgMC41NDkwMTk2MDc4NDMxMzczKQogICAgICAgID4+PiBjb2xvcm1vZGUoMjU1KQogICAgICAgID4+PiB0dXJ0bGUucGVuY29sb3IoKQogICAgICAgICg1MSwgMjA0LCAxNDApCkBAIC0xNDU1LDYgKzE0NTgsNyBAQAogICAgOnBhcmFtIGFyZ3M6IGEgY29sb3Igc3RyaW5nIG9yIHRocmVlIG51bWJlcnMgaW4gdGhlIHJhbmdlIDAuLmNvbG9ybW9kZSBvciBhCiAgICAgICAgICAgICAgICAgMy10dXBsZSBvZiBzdWNoIG51bWJlcnMKIAorCiAgICBTZXQgb3IgcmV0dXJuIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIFR1cnRsZVNjcmVlbi4KIAogICAgLi4gZG9jdGVzdDo6CkBAIC0xODM1LDcgKzE4MzksNyBAQAogLi4gZnVuY3Rpb246OiBzZXR1cCh3aWR0aD1fQ0ZHWyJ3aWR0aCJdLCBoZWlnaHQ9X0NGR1siaGVpZ2h0Il0sIHN0YXJ0eD1fQ0ZHWyJsZWZ0cmlnaHQiXSwgc3RhcnR5PV9DRkdbInRvcGJvdHRvbSJdKQogCiAgICBTZXQgdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIHRoZSBtYWluIHdpbmRvdy4gIERlZmF1bHQgdmFsdWVzIG9mIGFyZ3VtZW50cwotICAgYXJlIHN0b3JlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBkaWNpb25hcnkgYW5kIGNhbiBiZSBjaGFuZ2VkIHZpYSBhCisgICBhcmUgc3RvcmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGRpY3Rpb25hcnkgYW5kIGNhbiBiZSBjaGFuZ2VkIHZpYSBhCiAgICA6ZmlsZTpgdHVydGxlLmNmZ2AgZmlsZS4KIAogICAgOnBhcmFtIHdpZHRoOiBpZiBhbiBpbnRlZ2VyLCBhIHNpemUgaW4gcGl4ZWxzLCBpZiBhIGZsb2F0LCBhIGZyYWN0aW9uIG9mIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0IGIvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CmluZGV4IDQ0MGExMzUuLmM3NjVkNzQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKQEAgLTE2LDEyICsxNiwxMiBAQAogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIHdoaWNoIGRlZmluZXMKIGNoYXJhY3RlciBwcm9wZXJ0aWVzIGZvciBhbGwgVW5pY29kZSBjaGFyYWN0ZXJzLiBUaGUgZGF0YSBpbiB0aGlzIGRhdGFiYXNlIGlzCi1iYXNlZCBvbiB0aGUgOmZpbGU6YFVuaWNvZGVEYXRhLnR4dGAgZmlsZSB2ZXJzaW9uIDUuMS4wIHdoaWNoIGlzIHB1YmxpY2x5CitiYXNlZCBvbiB0aGUgOmZpbGU6YFVuaWNvZGVEYXRhLnR4dGAgZmlsZSB2ZXJzaW9uIDUuMi4wIHdoaWNoIGlzIHB1YmxpY2x5CiBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAudW5pY29kZS5vcmcvLgogCiBUaGUgbW9kdWxlIHVzZXMgdGhlIHNhbWUgbmFtZXMgYW5kIHN5bWJvbHMgYXMgZGVmaW5lZCBieSB0aGUgVW5pY29kZURhdGEgRmlsZQotRm9ybWF0IDUuMS4wIChzZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNS4xLjAvdWNkL1VDRC5odG1sKS4gIEl0IGRlZmluZXMKLXRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorRm9ybWF0IDUuMi4wIChzZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyNDQvdHI0NC00Lmh0bWwpLgorSXQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAogCiAuLiBmdW5jdGlvbjo6IGxvb2t1cChuYW1lKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0IGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CmluZGV4IDY4OWYxZjIuLjMzM2IzOTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKQEAgLTEsNCArMSwzIEBACi0KIDptb2Q6YHVuaXR0ZXN0YCAtLS0gVW5pdCB0ZXN0aW5nIGZyYW1ld29yawogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTQ5LDI2ICs0OCwyNyBAQAogOmNsYXNzOmBUZXN0Q2FzZWAgYW5kIDpjbGFzczpgRnVuY3Rpb25UZXN0Q2FzZWAgY2xhc3NlczsgdGhlIGZvcm1lciBzaG91bGQgYmUKIHVzZWQgd2hlbiBjcmVhdGluZyBuZXcgdGVzdHMsIGFuZCB0aGUgbGF0dGVyIGNhbiBiZSB1c2VkIHdoZW4gaW50ZWdyYXRpbmcKIGV4aXN0aW5nIHRlc3QgY29kZSB3aXRoIGEgOm1vZDpgdW5pdHRlc3RgXCAtZHJpdmVuIGZyYW1ld29yay4gV2hlbiBidWlsZGluZyB0ZXN0Ci1maXh0dXJlcyB1c2luZyA6Y2xhc3M6YFRlc3RDYXNlYCwgdGhlIDptZXRoOmBzZXRVcGAgYW5kIDptZXRoOmB0ZWFyRG93bmAgbWV0aG9kcwotY2FuIGJlIG92ZXJyaWRkZW4gdG8gcHJvdmlkZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBmb3IgdGhlIGZpeHR1cmUuICBXaXRoCi06Y2xhc3M6YEZ1bmN0aW9uVGVzdENhc2VgLCBleGlzdGluZyBmdW5jdGlvbnMgY2FuIGJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IKLWZvciB0aGVzZSBwdXJwb3Nlcy4gIFdoZW4gdGhlIHRlc3QgaXMgcnVuLCB0aGUgZml4dHVyZSBpbml0aWFsaXphdGlvbiBpcyBydW4KLWZpcnN0OyBpZiBpdCBzdWNjZWVkcywgdGhlIGNsZWFudXAgbWV0aG9kIGlzIHJ1biBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbgotZXhlY3V0ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIG91dGNvbWUgb2YgdGhlIHRlc3QuICBFYWNoIGluc3RhbmNlIG9mIHRoZQotOmNsYXNzOmBUZXN0Q2FzZWAgd2lsbCBvbmx5IGJlIHVzZWQgdG8gcnVuIGEgc2luZ2xlIHRlc3QgbWV0aG9kLCBzbyBhIG5ldwotZml4dHVyZSBpcyBjcmVhdGVkIGZvciBlYWNoIHRlc3QuCitmaXh0dXJlcyB1c2luZyA6Y2xhc3M6YFRlc3RDYXNlYCwgdGhlIDptZXRoOmB+VGVzdENhc2Uuc2V0VXBgIGFuZAorOm1ldGg6YH5UZXN0Q2FzZS50ZWFyRG93bmAgbWV0aG9kcyBjYW4gYmUgb3ZlcnJpZGRlbiB0byBwcm92aWRlIGluaXRpYWxpemF0aW9uCithbmQgY2xlYW51cCBmb3IgdGhlIGZpeHR1cmUuICBXaXRoIDpjbGFzczpgRnVuY3Rpb25UZXN0Q2FzZWAsIGV4aXN0aW5nIGZ1bmN0aW9ucworY2FuIGJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IgZm9yIHRoZXNlIHB1cnBvc2VzLiAgV2hlbiB0aGUgdGVzdCBpcyBydW4sIHRoZQorZml4dHVyZSBpbml0aWFsaXphdGlvbiBpcyBydW4gZmlyc3Q7IGlmIGl0IHN1Y2NlZWRzLCB0aGUgY2xlYW51cCBtZXRob2QgaXMgcnVuCithZnRlciB0aGUgdGVzdCBoYXMgYmVlbiBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZSBvZiB0aGUgdGVzdC4gIEVhY2gKK2luc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFRlc3RDYXNlYCB3aWxsIG9ubHkgYmUgdXNlZCB0byBydW4gYSBzaW5nbGUgdGVzdCBtZXRob2QsCitzbyBhIG5ldyBmaXh0dXJlIGlzIGNyZWF0ZWQgZm9yIGVhY2ggdGVzdC4KIAogVGVzdCBzdWl0ZXMgYXJlIGltcGxlbWVudGVkIGJ5IHRoZSA6Y2xhc3M6YFRlc3RTdWl0ZWAgY2xhc3MuICBUaGlzIGNsYXNzIGFsbG93cwogaW5kaXZpZHVhbCB0ZXN0cyBhbmQgdGVzdCBzdWl0ZXMgdG8gYmUgYWdncmVnYXRlZDsgd2hlbiB0aGUgc3VpdGUgaXMgZXhlY3V0ZWQsCiBhbGwgdGVzdHMgYWRkZWQgZGlyZWN0bHkgdG8gdGhlIHN1aXRlIGFuZCBpbiAiY2hpbGQiIHRlc3Qgc3VpdGVzIGFyZSBydW4uCiAKLUEgdGVzdCBydW5uZXIgaXMgYW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBzaW5nbGUgbWV0aG9kLCA6bWV0aDpgcnVuYCwgd2hpY2gKLWFjY2VwdHMgYSA6Y2xhc3M6YFRlc3RDYXNlYCBvciA6Y2xhc3M6YFRlc3RTdWl0ZWAgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLCBhbmQKLXJldHVybnMgYSByZXN1bHQgb2JqZWN0LiAgVGhlIGNsYXNzIDpjbGFzczpgVGVzdFJlc3VsdGAgaXMgcHJvdmlkZWQgZm9yIHVzZSBhcwotdGhlIHJlc3VsdCBvYmplY3QuIDptb2Q6YHVuaXR0ZXN0YCBwcm92aWRlcyB0aGUgOmNsYXNzOmBUZXh0VGVzdFJ1bm5lcmAgYXMgYW4KLWV4YW1wbGUgdGVzdCBydW5uZXIgd2hpY2ggcmVwb3J0cyB0ZXN0IHJlc3VsdHMgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBieQotZGVmYXVsdC4gIEFsdGVybmF0ZSBydW5uZXJzIGNhbiBiZSBpbXBsZW1lbnRlZCBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIChzdWNoIGFzCi1ncmFwaGljYWwgZW52aXJvbm1lbnRzKSB3aXRob3V0IGFueSBuZWVkIHRvIGRlcml2ZSBmcm9tIGEgc3BlY2lmaWMgY2xhc3MuCitBIHRlc3QgcnVubmVyIGlzIGFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgc2luZ2xlIG1ldGhvZCwKKzptZXRoOmB+VGVzdFJ1bm5lci5ydW5gLCB3aGljaCBhY2NlcHRzIGEgOmNsYXNzOmBUZXN0Q2FzZWAgb3IgOmNsYXNzOmBUZXN0U3VpdGVgCitvYmplY3QgYXMgYSBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgcmVzdWx0IG9iamVjdC4gIFRoZSBjbGFzcworOmNsYXNzOmBUZXN0UmVzdWx0YCBpcyBwcm92aWRlZCBmb3IgdXNlIGFzIHRoZSByZXN1bHQgb2JqZWN0LiA6bW9kOmB1bml0dGVzdGAKK3Byb3ZpZGVzIHRoZSA6Y2xhc3M6YFRleHRUZXN0UnVubmVyYCBhcyBhbiBleGFtcGxlIHRlc3QgcnVubmVyIHdoaWNoIHJlcG9ydHMKK3Rlc3QgcmVzdWx0cyBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGJ5IGRlZmF1bHQuICBBbHRlcm5hdGUgcnVubmVycyBjYW4gYmUKK2ltcGxlbWVudGVkIGZvciBvdGhlciBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgZ3JhcGhpY2FsIGVudmlyb25tZW50cykgd2l0aG91dCBhbnkKK25lZWQgdG8gZGVyaXZlIGZyb20gYSBzcGVjaWZpYyBjbGFzcy4KIAogCiAuLiBzZWVhbHNvOjoKQEAgLTc2LDE2ICs3NiwyNyBAQAogICAgTW9kdWxlIDptb2Q6YGRvY3Rlc3RgCiAgICAgICBBbm90aGVyIHRlc3Qtc3VwcG9ydCBtb2R1bGUgd2l0aCBhIHZlcnkgZGlmZmVyZW50IGZsYXZvci4KIAorICAgYHVuaXR0ZXN0MjogQSBiYWNrcG9ydCBvZiBuZXcgdW5pdHRlc3QgZmVhdHVyZXMgZm9yIFB5dGhvbiAyLjQtMi42IDxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvdW5pdHRlc3QyPmBfCisgICAgICBNYW55IG5ldyBmZWF0dXJlcyB3ZXJlIGFkZGVkIHRvIHVuaXR0ZXN0IGluIFB5dGhvbiAyLjcsIGluY2x1ZGluZyB0ZXN0CisgICAgICBkaXNjb3ZlcnkuIHVuaXR0ZXN0MiBhbGxvd3MgeW91IHRvIHVzZSB0aGVzZSBmZWF0dXJlcyB3aXRoIGVhcmxpZXIKKyAgICAgIHZlcnNpb25zIG9mIFB5dGhvbi4KKwogICAgYFNpbXBsZSBTbWFsbHRhbGsgVGVzdGluZzogV2l0aCBQYXR0ZXJucyA8aHR0cDovL3d3dy5YUHJvZ3JhbW1pbmcuY29tL3Rlc3RmcmFtLmh0bT5gXwotICAgICAgS2VudCBCZWNrJ3Mgb3JpZ2luYWwgcGFwZXIgb24gdGVzdGluZyBmcmFtZXdvcmtzIHVzaW5nIHRoZSBwYXR0ZXJuIHNoYXJlZCBieQotICAgICAgOm1vZDpgdW5pdHRlc3RgLgorICAgICAgS2VudCBCZWNrJ3Mgb3JpZ2luYWwgcGFwZXIgb24gdGVzdGluZyBmcmFtZXdvcmtzIHVzaW5nIHRoZSBwYXR0ZXJuIHNoYXJlZAorICAgICAgYnkgOm1vZDpgdW5pdHRlc3RgLgogCiAgICBgTm9zZSA8aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5dGhvbi1ub3NlLz5gXyBhbmQgYHB5LnRlc3QgPGh0dHA6Ly9weXRlc3Qub3JnPmBfCi0gICAgICBUaGlyZC1wYXJ0eSB1bml0dGVzdCBmcmFtZXdvcmtzIHdpdGggYSBsaWdodGVyLXdlaWdodCBzeW50YXgKLSAgICAgIGZvciB3cml0aW5nIHRlc3RzLiAgRm9yIGV4YW1wbGUsIGBgYXNzZXJ0IGZ1bmMoMTApID09IDQyYGAuCisgICAgICBUaGlyZC1wYXJ0eSB1bml0dGVzdCBmcmFtZXdvcmtzIHdpdGggYSBsaWdodGVyLXdlaWdodCBzeW50YXggZm9yIHdyaXRpbmcKKyAgICAgIHRlc3RzLiAgRm9yIGV4YW1wbGUsIGBgYXNzZXJ0IGZ1bmMoMTApID09IDQyYGAuCiAKLSAgIGBweXRob24tbW9jayA8aHR0cDovL3B5dGhvbi1tb2NrLnNvdXJjZWZvcmdlLm5ldC8+YF8gYW5kIGBtaW5pbW9jayA8aHR0cDovL2Jsb2cuaWFuYmlja2luZy5vcmcvbWluaW1vY2suaHRtbD5gXwotICAgICAgVG9vbHMgZm9yIGNyZWF0aW5nIG1vY2sgdGVzdCBvYmplY3RzIChvYmplY3RzIHNpbXVsYXRpbmcgZXh0ZXJuYWwgcmVzb3VyY2VzKS4KKyAgIGBUaGUgUHl0aG9uIFRlc3RpbmcgVG9vbHMgVGF4b25vbXkgPGh0dHA6Ly9weWNoZWVzZWNha2Uub3JnL3dpa2kvUHl0aG9uVGVzdGluZ1Rvb2xzVGF4b25vbXk+YF8KKyAgICAgIEFuIGV4dGVuc2l2ZSBsaXN0IG9mIFB5dGhvbiB0ZXN0aW5nIHRvb2xzIGluY2x1ZGluZyBmdW5jdGlvbmFsIHRlc3RpbmcKKyAgICAgIGZyYW1ld29ya3MgYW5kIG1vY2sgb2JqZWN0IGxpYnJhcmllcy4KKworICAgYFRlc3RpbmcgaW4gUHl0aG9uIE1haWxpbmcgTGlzdCA8aHR0cDovL2xpc3RzLmlkeWxsLm9yZy9saXN0aW5mby90ZXN0aW5nLWluLXB5dGhvbj5gXworICAgICAgQSBzcGVjaWFsLWludGVyZXN0LWdyb3VwIGZvciBkaXNjdXNzaW9uIG9mIHRlc3RpbmcsIGFuZCB0ZXN0aW5nIHRvb2xzLAorICAgICAgaW4gUHl0aG9uLgorCiAKIC4uIF91bml0dGVzdC1taW5pbWFsLWV4YW1wbGU6CiAKQEAgLTExMiwzNiArMTIzLDQxIEBACiAgICAgICAgICAgIHNlbGYuc2VxLnNvcnQoKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxLCByYW5nZSgxMCkpCiAKKyAgICAgICAgICAgIyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGZvciBhbiBpbW11dGFibGUgc2VxdWVuY2UKKyAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5kb20uc2h1ZmZsZSwgKDEsMiwzKSkKKwogICAgICAgIGRlZiB0ZXN0X2Nob2ljZShzZWxmKToKICAgICAgICAgICAgZWxlbWVudCA9IHJhbmRvbS5jaG9pY2Uoc2VsZi5zZXEpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtZW50IGluIHNlbGYuc2VxKQogCiAgICAgICAgZGVmIHRlc3Rfc2FtcGxlKHNlbGYpOgotICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByYW5kb20uc2FtcGxlLCBzZWxmLnNlcSwgMjApCisgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICByYW5kb20uc2FtcGxlKHNlbGYuc2VxLCAyMCkKICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gcmFuZG9tLnNhbXBsZShzZWxmLnNlcSwgNSk6CiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbWVudCBpbiBzZWxmLnNlcSkKIAogICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICB1bml0dGVzdC5tYWluKCkKIAotQSB0ZXN0Y2FzZSBpcyBjcmVhdGVkIGJ5IHN1YmNsYXNzaW5nIDpjbGFzczpgdW5pdHRlc3QuVGVzdENhc2VgLiBUaGUgdGhyZWUKK0EgdGVzdGNhc2UgaXMgY3JlYXRlZCBieSBzdWJjbGFzc2luZyA6Y2xhc3M6YHVuaXR0ZXN0LlRlc3RDYXNlYC4gIFRoZSB0aHJlZQogaW5kaXZpZHVhbCB0ZXN0cyBhcmUgZGVmaW5lZCB3aXRoIG1ldGhvZHMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCB0aGUgbGV0dGVycwogYGB0ZXN0YGAuICBUaGlzIG5hbWluZyBjb252ZW50aW9uIGluZm9ybXMgdGhlIHRlc3QgcnVubmVyIGFib3V0IHdoaWNoIG1ldGhvZHMKIHJlcHJlc2VudCB0ZXN0cy4KIAotVGhlIGNydXggb2YgZWFjaCB0ZXN0IGlzIGEgY2FsbCB0byA6bWV0aDpgYXNzZXJ0RXF1YWxgIHRvIGNoZWNrIGZvciBhbiBleHBlY3RlZAotcmVzdWx0OyA6bWV0aDpgYXNzZXJ0X2AgdG8gdmVyaWZ5IGEgY29uZGl0aW9uOyBvciA6bWV0aDpgYXNzZXJ0UmFpc2VzYCB0byB2ZXJpZnkKLXRoYXQgYW4gZXhwZWN0ZWQgZXhjZXB0aW9uIGdldHMgcmFpc2VkLiAgVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQotOmtleXdvcmQ6YGFzc2VydGAgc3RhdGVtZW50IHNvIHRoZSB0ZXN0IHJ1bm5lciBjYW4gYWNjdW11bGF0ZSBhbGwgdGVzdCByZXN1bHRzCi1hbmQgcHJvZHVjZSBhIHJlcG9ydC4KK1RoZSBjcnV4IG9mIGVhY2ggdGVzdCBpcyBhIGNhbGwgdG8gOm1ldGg6YH5UZXN0Q2FzZS5hc3NlcnRFcXVhbGAgdG8gY2hlY2sgZm9yIGFuCitleHBlY3RlZCByZXN1bHQ7IDptZXRoOmB+VGVzdENhc2UuYXNzZXJ0VHJ1ZWAgdG8gdmVyaWZ5IGEgY29uZGl0aW9uOyBvcgorOm1ldGg6YH5UZXN0Q2FzZS5hc3NlcnRSYWlzZXNgIHRvIHZlcmlmeSB0aGF0IGFuIGV4cGVjdGVkIGV4Y2VwdGlvbiBnZXRzIHJhaXNlZC4KK1RoZXNlIG1ldGhvZHMgYXJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgOmtleXdvcmQ6YGFzc2VydGAgc3RhdGVtZW50IHNvIHRoZSB0ZXN0CitydW5uZXIgY2FuIGFjY3VtdWxhdGUgYWxsIHRlc3QgcmVzdWx0cyBhbmQgcHJvZHVjZSBhIHJlcG9ydC4KIAotV2hlbiBhIDptZXRoOmBzZXRVcGAgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotcHJpb3IgdG8gZWFjaCB0ZXN0LiAgTGlrZXdpc2UsIGlmIGEgOm1ldGg6YHRlYXJEb3duYCBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QKLXJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuICBJbiB0aGUgZXhhbXBsZSwgOm1ldGg6YHNldFVwYAotd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4KK1doZW4gYSA6bWV0aDpgflRlc3RDYXNlLnNldFVwYCBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQKK21ldGhvZCBwcmlvciB0byBlYWNoIHRlc3QuICBMaWtld2lzZSwgaWYgYSA6bWV0aDpgflRlc3RDYXNlLnRlYXJEb3duYCBtZXRob2QgaXMKK2RlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuICBJbiB0aGUKK2V4YW1wbGUsIDptZXRoOmB+VGVzdENhc2Uuc2V0VXBgIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoCit0ZXN0LgogCiBUaGUgZmluYWwgYmxvY2sgc2hvd3MgYSBzaW1wbGUgd2F5IHRvIHJ1biB0aGUgdGVzdHMuIDpmdW5jOmB1bml0dGVzdC5tYWluYAotcHJvdmlkZXMgYSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIHRoZSB0ZXN0IHNjcmlwdC4gIFdoZW4gcnVuIGZyb20gdGhlIGNvbW1hbmQKK3Byb3ZpZGVzIGEgY29tbWFuZC1saW5lIGludGVyZmFjZSB0byB0aGUgdGVzdCBzY3JpcHQuICBXaGVuIHJ1biBmcm9tIHRoZSBjb21tYW5kCiBsaW5lLCB0aGUgYWJvdmUgc2NyaXB0IHByb2R1Y2VzIGFuIG91dHB1dCB0aGF0IGxvb2tzIGxpa2UgdGhpczo6CiAKICAgIC4uLgpAQCAtMTc0LDYgKzE5MCwxMzUgQEAKIGRvY3VtZW50YXRpb24gZXhwbG9yZXMgdGhlIGZ1bGwgZmVhdHVyZSBzZXQgZnJvbSBmaXJzdCBwcmluY2lwbGVzLgogCiAKKy4uIF91bml0dGVzdC1jb21tYW5kLWxpbmUtaW50ZXJmYWNlOgorCitDb21tYW5kLUxpbmUgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB1bml0dGVzdCBtb2R1bGUgY2FuIGJlIHVzZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRvIHJ1biB0ZXN0cyBmcm9tCittb2R1bGVzLCBjbGFzc2VzIG9yIGV2ZW4gaW5kaXZpZHVhbCB0ZXN0IG1ldGhvZHM6OgorCisgICBweXRob24gLW0gdW5pdHRlc3QgdGVzdF9tb2R1bGUxIHRlc3RfbW9kdWxlMgorICAgcHl0aG9uIC1tIHVuaXR0ZXN0IHRlc3RfbW9kdWxlLlRlc3RDbGFzcworICAgcHl0aG9uIC1tIHVuaXR0ZXN0IHRlc3RfbW9kdWxlLlRlc3RDbGFzcy50ZXN0X21ldGhvZAorCitZb3UgY2FuIHBhc3MgaW4gYSBsaXN0IHdpdGggYW55IGNvbWJpbmF0aW9uIG9mIG1vZHVsZSBuYW1lcywgYW5kIGZ1bGx5CitxdWFsaWZpZWQgY2xhc3Mgb3IgbWV0aG9kIG5hbWVzLgorCitZb3UgY2FuIHJ1biB0ZXN0cyB3aXRoIG1vcmUgZGV0YWlsIChoaWdoZXIgdmVyYm9zaXR5KSBieSBwYXNzaW5nIGluIHRoZSAtdiBmbGFnOjoKKworICAgcHl0aG9uIC1tIHVuaXR0ZXN0IC12IHRlc3RfbW9kdWxlCisKK0ZvciBhIGxpc3Qgb2YgYWxsIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uczo6CisKKyAgIHB5dGhvbiAtbSB1bml0dGVzdCAtaAorCisuLiAgdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgIEluIGVhcmxpZXIgdmVyc2lvbnMgaXQgd2FzIG9ubHkgcG9zc2libGUgdG8gcnVuIGluZGl2aWR1YWwgdGVzdCBtZXRob2RzIGFuZAorICAgbm90IG1vZHVsZXMgb3IgY2xhc3Nlcy4KKworCitDb21tYW5kLWxpbmUgb3B0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworOnByb2dyYW06YHVuaXR0ZXN0YCBzdXBwb3J0cyB0aGVzZSBjb21tYW5kLWxpbmUgb3B0aW9uczoKKworLi4gcHJvZ3JhbTo6IHVuaXR0ZXN0CisKKy4uIGNtZG9wdGlvbjo6IC1iLCAtLWJ1ZmZlcgorCisgICBUaGUgc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvciBzdHJlYW1zIGFyZSBidWZmZXJlZCBkdXJpbmcgdGhlIHRlc3QKKyAgIHJ1bi4gT3V0cHV0IGR1cmluZyBhIHBhc3NpbmcgdGVzdCBpcyBkaXNjYXJkZWQuIE91dHB1dCBpcyBlY2hvZWQgbm9ybWFsbHkKKyAgIG9uIHRlc3QgZmFpbCBvciBlcnJvciBhbmQgaXMgYWRkZWQgdG8gdGhlIGZhaWx1cmUgbWVzc2FnZXMuCisKKy4uIGNtZG9wdGlvbjo6IC1jLCAtLWNhdGNoCisKKyAgIENvbnRyb2wtQyBkdXJpbmcgdGhlIHRlc3QgcnVuIHdhaXRzIGZvciB0aGUgY3VycmVudCB0ZXN0IHRvIGVuZCBhbmQgdGhlbgorICAgcmVwb3J0cyBhbGwgdGhlIHJlc3VsdHMgc28gZmFyLiBBIHNlY29uZCBjb250cm9sLUMgcmFpc2VzIHRoZSBub3JtYWwKKyAgIDpleGM6YEtleWJvYXJkSW50ZXJydXB0YCBleGNlcHRpb24uCisKKyAgIFNlZSBgU2lnbmFsIEhhbmRsaW5nYF8gZm9yIHRoZSBmdW5jdGlvbnMgdGhhdCBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKworLi4gY21kb3B0aW9uOjogLWYsIC0tZmFpbGZhc3QKKworICAgU3RvcCB0aGUgdGVzdCBydW4gb24gdGhlIGZpcnN0IGVycm9yIG9yIGZhaWx1cmUuCisKKy4uIHZlcnNpb25hZGRlZDo6IDIuNworICAgVGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGBgLWJgYCwgYGAtY2BgIGFuZCBgYC1mYGAgd2VyZSBhZGRlZC4KKworVGhlIGNvbW1hbmQgbGluZSBjYW4gYWxzbyBiZSB1c2VkIGZvciB0ZXN0IGRpc2NvdmVyeSwgZm9yIHJ1bm5pbmcgYWxsIG9mIHRoZQordGVzdHMgaW4gYSBwcm9qZWN0IG9yIGp1c3QgYSBzdWJzZXQuCisKKworLi4gX3VuaXR0ZXN0LXRlc3QtZGlzY292ZXJ5OgorCitUZXN0IERpc2NvdmVyeQorLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMi43CisKK1VuaXR0ZXN0IHN1cHBvcnRzIHNpbXBsZSB0ZXN0IGRpc2NvdmVyeS4gRm9yIGEgcHJvamVjdCdzIHRlc3RzIHRvIGJlCitjb21wYXRpYmxlIHdpdGggdGVzdCBkaXNjb3ZlcnkgdGhleSBtdXN0IGFsbCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcCBsZXZlbAorZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0IChpbiBvdGhlciB3b3JkcywgdGhleSBtdXN0IGFsbCBiZSBpbiBQeXRob24gcGFja2FnZXMpLgorCitUZXN0IGRpc2NvdmVyeSBpcyBpbXBsZW1lbnRlZCBpbiA6bWV0aDpgVGVzdExvYWRlci5kaXNjb3ZlcmAsIGJ1dCBjYW4gYWxzbyBiZQordXNlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIFRoZSBiYXNpYyBjb21tYW5kLWxpbmUgdXNhZ2UgaXM6OgorCisgICBjZCBwcm9qZWN0X2RpcmVjdG9yeQorICAgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyCisKK1RoZSBgYGRpc2NvdmVyYGAgc3ViLWNvbW1hbmQgaGFzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworLi4gcHJvZ3JhbTo6IHVuaXR0ZXN0IGRpc2NvdmVyCisKKy4uIGNtZG9wdGlvbjo6IC12LCAtLXZlcmJvc2UKKworICAgVmVyYm9zZSBvdXRwdXQKKworLi4gY21kb3B0aW9uOjogLXMgZGlyZWN0b3J5CisKKyAgIERpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KQorCisuLiBjbWRvcHRpb246OiAtcCBwYXR0ZXJuCisKKyAgIFBhdHRlcm4gdG8gbWF0Y2ggdGVzdCBmaWxlcyAoJ3Rlc3QqLnB5JyBkZWZhdWx0KQorCisuLiBjbWRvcHRpb246OiAtdCBkaXJlY3RvcnkKKworICAgVG9wIGxldmVsIGRpcmVjdG9yeSBvZiBwcm9qZWN0IChkZWZhdWx0cyB0byBzdGFydCBkaXJlY3RvcnkpCisKK1RoZSA6b3B0aW9uOmAtc2AsIDpvcHRpb246YC1wYCwgYW5kIDpvcHRpb246YC10YCBvcHRpb25zIGNhbiBiZSBwYXNzZWQgaW4KK2FzIHBvc2l0aW9uYWwgYXJndW1lbnRzIGluIHRoYXQgb3JkZXIuIFRoZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmQgbGluZXMKK2FyZSBlcXVpdmFsZW50OjoKKworICAgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIC1zIHByb2plY3RfZGlyZWN0b3J5IC1wICcqX3Rlc3QucHknCisgICBweXRob24gLW0gdW5pdHRlc3QgZGlzY292ZXIgcHJvamVjdF9kaXJlY3RvcnkgJypfdGVzdC5weScKKworQXMgd2VsbCBhcyBiZWluZyBhIHBhdGggaXQgaXMgcG9zc2libGUgdG8gcGFzcyBhIHBhY2thZ2UgbmFtZSwgZm9yIGV4YW1wbGUKK2BgbXlwcm9qZWN0LnN1YnBhY2thZ2UudGVzdGBgLCBhcyB0aGUgc3RhcnQgZGlyZWN0b3J5LiBUaGUgcGFja2FnZSBuYW1lIHlvdQorc3VwcGx5IHdpbGwgdGhlbiBiZSBpbXBvcnRlZCBhbmQgaXRzIGxvY2F0aW9uIG9uIHRoZSBmaWxlc3lzdGVtIHdpbGwgYmUgdXNlZAorYXMgdGhlIHN0YXJ0IGRpcmVjdG9yeS4KKworLi4gY2F1dGlvbjo6CisKKyAgICBUZXN0IGRpc2NvdmVyeSBsb2FkcyB0ZXN0cyBieSBpbXBvcnRpbmcgdGhlbS4gT25jZSB0ZXN0IGRpc2NvdmVyeSBoYXMKKyAgICBmb3VuZCBhbGwgdGhlIHRlc3QgZmlsZXMgZnJvbSB0aGUgc3RhcnQgZGlyZWN0b3J5IHlvdSBzcGVjaWZ5IGl0IHR1cm5zIHRoZQorICAgIHBhdGhzIGludG8gcGFja2FnZSBuYW1lcyB0byBpbXBvcnQuIEZvciBleGFtcGxlIGBmb28vYmFyL2Jhei5weWAgd2lsbCBiZQorICAgIGltcG9ydGVkIGFzIGBgZm9vLmJhci5iYXpgYC4KKworICAgIElmIHlvdSBoYXZlIGEgcGFja2FnZSBpbnN0YWxsZWQgZ2xvYmFsbHkgYW5kIGF0dGVtcHQgdGVzdCBkaXNjb3Zlcnkgb24KKyAgICBhIGRpZmZlcmVudCBjb3B5IG9mIHRoZSBwYWNrYWdlIHRoZW4gdGhlIGltcG9ydCAqY291bGQqIGhhcHBlbiBmcm9tIHRoZQorICAgIHdyb25nIHBsYWNlLiBJZiB0aGlzIGhhcHBlbnMgdGVzdCBkaXNjb3Zlcnkgd2lsbCB3YXJuIHlvdSBhbmQgZXhpdC4KKworICAgIElmIHlvdSBzdXBwbHkgdGhlIHN0YXJ0IGRpcmVjdG9yeSBhcyBhIHBhY2thZ2UgbmFtZSByYXRoZXIgdGhhbiBhCisgICAgcGF0aCB0byBhIGRpcmVjdG9yeSB0aGVuIGRpc2NvdmVyIGFzc3VtZXMgdGhhdCB3aGljaGV2ZXIgbG9jYXRpb24gaXQKKyAgICBpbXBvcnRzIGZyb20gaXMgdGhlIGxvY2F0aW9uIHlvdSBpbnRlbmRlZCwgc28geW91IHdpbGwgbm90IGdldCB0aGUKKyAgICB3YXJuaW5nLgorCitUZXN0IG1vZHVsZXMgYW5kIHBhY2thZ2VzIGNhbiBjdXN0b21pemUgdGVzdCBsb2FkaW5nIGFuZCBkaXNjb3ZlcnkgYnkgdGhyb3VnaAordGhlIGBsb2FkX3Rlc3RzIHByb3RvY29sYF8uCisKKwogLi4gX29yZ2FuaXppbmctdGVzdHM6CiAKIE9yZ2FuaXppbmcgdGVzdCBjb2RlCkBAIC0xOTMsOCArMzM4LDggQEAKIGNvbnRhaW5lZCwgc3VjaCB0aGF0IGl0IGNhbiBiZSBydW4gZWl0aGVyIGluIGlzb2xhdGlvbiBvciBpbiBhcmJpdHJhcnkKIGNvbWJpbmF0aW9uIHdpdGggYW55IG51bWJlciBvZiBvdGhlciB0ZXN0IGNhc2VzLgogCi1UaGUgc2ltcGxlc3QgOmNsYXNzOmBUZXN0Q2FzZWAgc3ViY2xhc3Mgd2lsbCBzaW1wbHkgb3ZlcnJpZGUgdGhlIDptZXRoOmBydW5UZXN0YAotbWV0aG9kIGluIG9yZGVyIHRvIHBlcmZvcm0gc3BlY2lmaWMgdGVzdGluZyBjb2RlOjoKK1RoZSBzaW1wbGVzdCA6Y2xhc3M6YFRlc3RDYXNlYCBzdWJjbGFzcyB3aWxsIHNpbXBseSBvdmVycmlkZSB0aGUKKzptZXRoOmB+VGVzdENhc2UucnVuVGVzdGAgbWV0aG9kIGluIG9yZGVyIHRvIHBlcmZvcm0gc3BlY2lmaWMgdGVzdGluZyBjb2RlOjoKIAogICAgaW1wb3J0IHVuaXR0ZXN0CiAKQEAgLTIwMywxNCArMzQ4LDEzIEBACiAgICAgICAgICAgIHdpZGdldCA9IFdpZGdldCgnVGhlIHdpZGdldCcpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lkZ2V0LnNpemUoKSwgKDUwLCA1MCksICdpbmNvcnJlY3QgZGVmYXVsdCBzaXplJykKIAotTm90ZSB0aGF0IGluIG9yZGVyIHRvIHRlc3Qgc29tZXRoaW5nLCB3ZSB1c2UgdGhlIG9uZSBvZiB0aGUgOm1ldGg6YGFzc2VydFwqYCBvcgotOm1ldGg6YGZhaWxcKmAgbWV0aG9kcyBwcm92aWRlZCBieSB0aGUgOmNsYXNzOmBUZXN0Q2FzZWAgYmFzZSBjbGFzcy4gIElmIHRoZQotdGVzdCBmYWlscywgYW4gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLCBhbmQgOm1vZDpgdW5pdHRlc3RgIHdpbGwgaWRlbnRpZnkgdGhlCi10ZXN0IGNhc2UgYXMgYSA6ZGZuOmBmYWlsdXJlYC4gIEFueSBvdGhlciBleGNlcHRpb25zIHdpbGwgYmUgdHJlYXRlZCBhcwotOmRmbjpgZXJyb3JzYC4gVGhpcyBoZWxwcyB5b3UgaWRlbnRpZnkgd2hlcmUgdGhlIHByb2JsZW0gaXM6IDpkZm46YGZhaWx1cmVzYCBhcmUKLWNhdXNlZCBieSBpbmNvcnJlY3QgcmVzdWx0cyAtIGEgNSB3aGVyZSB5b3UgZXhwZWN0ZWQgYSA2LiA6ZGZuOmBFcnJvcnNgIGFyZQotY2F1c2VkIGJ5IGluY29ycmVjdCBjb2RlIC0gZS5nLiwgYSA6ZXhjOmBUeXBlRXJyb3JgIGNhdXNlZCBieSBhbiBpbmNvcnJlY3QKLWZ1bmN0aW9uIGNhbGwuCitOb3RlIHRoYXQgaW4gb3JkZXIgdG8gdGVzdCBzb21ldGhpbmcsIHdlIHVzZSB0aGUgb25lIG9mIHRoZSA6bWV0aDpgYXNzZXJ0XCpgCittZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSA6Y2xhc3M6YFRlc3RDYXNlYCBiYXNlIGNsYXNzLiAgSWYgdGhlIHRlc3QgZmFpbHMsIGFuCitleGNlcHRpb24gd2lsbCBiZSByYWlzZWQsIGFuZCA6bW9kOmB1bml0dGVzdGAgd2lsbCBpZGVudGlmeSB0aGUgdGVzdCBjYXNlIGFzIGEKKzpkZm46YGZhaWx1cmVgLiAgQW55IG90aGVyIGV4Y2VwdGlvbnMgd2lsbCBiZSB0cmVhdGVkIGFzIDpkZm46YGVycm9yc2AuIFRoaXMKK2hlbHBzIHlvdSBpZGVudGlmeSB3aGVyZSB0aGUgcHJvYmxlbSBpczogOmRmbjpgZmFpbHVyZXNgIGFyZSBjYXVzZWQgYnkgaW5jb3JyZWN0CityZXN1bHRzIC0gYSA1IHdoZXJlIHlvdSBleHBlY3RlZCBhIDYuIDpkZm46YEVycm9yc2AgYXJlIGNhdXNlZCBieSBpbmNvcnJlY3QKK2NvZGUgLSBlLmcuLCBhIDpleGM6YFR5cGVFcnJvcmAgY2F1c2VkIGJ5IGFuIGluY29ycmVjdCBmdW5jdGlvbiBjYWxsLgogCiBUaGUgd2F5IHRvIHJ1biBhIHRlc3QgY2FzZSB3aWxsIGJlIGRlc2NyaWJlZCBsYXRlci4gIEZvciBub3csIG5vdGUgdGhhdCB0bwogY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHN1Y2ggYSB0ZXN0IGNhc2UsIHdlIGNhbGwgaXRzIGNvbnN0cnVjdG9yIHdpdGhvdXQKQEAgLTIyMyw4ICszNjcsOCBAQAogc3ViY2xhc3NlcyB3b3VsZCBtZWFuIHVuc2lnaHRseSBkdXBsaWNhdGlvbi4KIAogTHVja2lseSwgd2UgY2FuIGZhY3RvciBvdXQgc3VjaCBzZXQtdXAgY29kZSBieSBpbXBsZW1lbnRpbmcgYSBtZXRob2QgY2FsbGVkCi06bWV0aDpgc2V0VXBgLCB3aGljaCB0aGUgdGVzdGluZyBmcmFtZXdvcmsgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgZm9yIHVzIHdoZW4KLXdlIHJ1biB0aGUgdGVzdDo6Cis6bWV0aDpgflRlc3RDYXNlLnNldFVwYCwgd2hpY2ggdGhlIHRlc3RpbmcgZnJhbWV3b3JrIHdpbGwgYXV0b21hdGljYWxseSBjYWxsIGZvcgordXMgd2hlbiB3ZSBydW4gdGhlIHRlc3Q6OgogCiAgICBpbXBvcnQgdW5pdHRlc3QKIApAQCAtMjQzLDEyICszODcsMTIgQEAKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5zaXplKCksICgxMDAsMTUwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3Jvbmcgc2l6ZSBhZnRlciByZXNpemUnKQogCi1JZiB0aGUgOm1ldGg6YHNldFVwYCBtZXRob2QgcmFpc2VzIGFuIGV4Y2VwdGlvbiB3aGlsZSB0aGUgdGVzdCBpcyBydW5uaW5nLCB0aGUKLWZyYW1ld29yayB3aWxsIGNvbnNpZGVyIHRoZSB0ZXN0IHRvIGhhdmUgc3VmZmVyZWQgYW4gZXJyb3IsIGFuZCB0aGUKLTptZXRoOmBydW5UZXN0YCBtZXRob2Qgd2lsbCBub3QgYmUgZXhlY3V0ZWQuCitJZiB0aGUgOm1ldGg6YH5UZXN0Q2FzZS5zZXRVcGAgbWV0aG9kIHJhaXNlcyBhbiBleGNlcHRpb24gd2hpbGUgdGhlIHRlc3QgaXMKK3J1bm5pbmcsIHRoZSBmcmFtZXdvcmsgd2lsbCBjb25zaWRlciB0aGUgdGVzdCB0byBoYXZlIHN1ZmZlcmVkIGFuIGVycm9yLCBhbmQgdGhlCis6bWV0aDpgflRlc3RDYXNlLnJ1blRlc3RgIG1ldGhvZCB3aWxsIG5vdCBiZSBleGVjdXRlZC4KIAotU2ltaWxhcmx5LCB3ZSBjYW4gcHJvdmlkZSBhIDptZXRoOmB0ZWFyRG93bmAgbWV0aG9kIHRoYXQgdGlkaWVzIHVwIGFmdGVyIHRoZQotOm1ldGg6YHJ1blRlc3RgIG1ldGhvZCBoYXMgYmVlbiBydW46OgorU2ltaWxhcmx5LCB3ZSBjYW4gcHJvdmlkZSBhIDptZXRoOmB+VGVzdENhc2UudGVhckRvd25gIG1ldGhvZCB0aGF0IHRpZGllcyB1cAorYWZ0ZXIgdGhlIDptZXRoOmB+VGVzdENhc2UucnVuVGVzdGAgbWV0aG9kIGhhcyBiZWVuIHJ1bjo6CiAKICAgIGltcG9ydCB1bml0dGVzdAogCkBAIC0yNjAsOCArNDA0LDggQEAKICAgICAgICAgICAgc2VsZi53aWRnZXQuZGlzcG9zZSgpCiAgICAgICAgICAgIHNlbGYud2lkZ2V0ID0gTm9uZQogCi1JZiA6bWV0aDpgc2V0VXBgIHN1Y2NlZWRlZCwgdGhlIDptZXRoOmB0ZWFyRG93bmAgbWV0aG9kIHdpbGwgYmUgcnVuIHdoZXRoZXIKLTptZXRoOmBydW5UZXN0YCBzdWNjZWVkZWQgb3Igbm90LgorSWYgOm1ldGg6YH5UZXN0Q2FzZS5zZXRVcGAgc3VjY2VlZGVkLCB0aGUgOm1ldGg6YH5UZXN0Q2FzZS50ZWFyRG93bmAgbWV0aG9kIHdpbGwKK2JlIHJ1biB3aGV0aGVyIDptZXRoOmB+VGVzdENhc2UucnVuVGVzdGAgc3VjY2VlZGVkIG9yIG5vdC4KIAogU3VjaCBhIHdvcmtpbmcgZW52aXJvbm1lbnQgZm9yIHRoZSB0ZXN0aW5nIGNvZGUgaXMgY2FsbGVkIGEgOmRmbjpgZml4dHVyZWAuCiAKQEAgLTQwOSwxMCArNTUzLDExMCBAQAogCiAuLiBub3RlOjoKIAotICAgRXZlbiB0aG91Z2ggOmNsYXNzOmBGdW5jdGlvblRlc3RDYXNlYCBjYW4gYmUgdXNlZCB0byBxdWlja2x5IGNvbnZlcnQgYW4gZXhpc3RpbmcKLSAgIHRlc3QgYmFzZSBvdmVyIHRvIGEgOm1vZDpgdW5pdHRlc3RgXCAtYmFzZWQgc3lzdGVtLCB0aGlzIGFwcHJvYWNoIGlzIG5vdAotICAgcmVjb21tZW5kZWQuICBUYWtpbmcgdGhlIHRpbWUgdG8gc2V0IHVwIHByb3BlciA6Y2xhc3M6YFRlc3RDYXNlYCBzdWJjbGFzc2VzIHdpbGwKLSAgIG1ha2UgZnV0dXJlIHRlc3QgcmVmYWN0b3JpbmdzIGluZmluaXRlbHkgZWFzaWVyLgorICAgRXZlbiB0aG91Z2ggOmNsYXNzOmBGdW5jdGlvblRlc3RDYXNlYCBjYW4gYmUgdXNlZCB0byBxdWlja2x5IGNvbnZlcnQgYW4KKyAgIGV4aXN0aW5nIHRlc3QgYmFzZSBvdmVyIHRvIGEgOm1vZDpgdW5pdHRlc3RgXCAtYmFzZWQgc3lzdGVtLCB0aGlzIGFwcHJvYWNoIGlzCisgICBub3QgcmVjb21tZW5kZWQuICBUYWtpbmcgdGhlIHRpbWUgdG8gc2V0IHVwIHByb3BlciA6Y2xhc3M6YFRlc3RDYXNlYAorICAgc3ViY2xhc3NlcyB3aWxsIG1ha2UgZnV0dXJlIHRlc3QgcmVmYWN0b3JpbmdzIGluZmluaXRlbHkgZWFzaWVyLgorCitJbiBzb21lIGNhc2VzLCB0aGUgZXhpc3RpbmcgdGVzdHMgbWF5IGhhdmUgYmVlbiB3cml0dGVuIHVzaW5nIHRoZSA6bW9kOmBkb2N0ZXN0YAorbW9kdWxlLiAgSWYgc28sIDptb2Q6YGRvY3Rlc3RgIHByb3ZpZGVzIGEgOmNsYXNzOmBEb2NUZXN0U3VpdGVgIGNsYXNzIHRoYXQgY2FuCithdXRvbWF0aWNhbGx5IGJ1aWxkIDpjbGFzczpgdW5pdHRlc3QuVGVzdFN1aXRlYCBpbnN0YW5jZXMgZnJvbSB0aGUgZXhpc3RpbmcKKzptb2Q6YGRvY3Rlc3RgXCAtYmFzZWQgdGVzdHMuCisKKworLi4gX3VuaXR0ZXN0LXNraXBwaW5nOgorCitTa2lwcGluZyB0ZXN0cyBhbmQgZXhwZWN0ZWQgZmFpbHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworVW5pdHRlc3Qgc3VwcG9ydHMgc2tpcHBpbmcgaW5kaXZpZHVhbCB0ZXN0IG1ldGhvZHMgYW5kIGV2ZW4gd2hvbGUgY2xhc3NlcyBvZgordGVzdHMuICBJbiBhZGRpdGlvbiwgaXQgc3VwcG9ydHMgbWFya2luZyBhIHRlc3QgYXMgYSAiZXhwZWN0ZWQgZmFpbHVyZSwiIGEgdGVzdAordGhhdCBpcyBicm9rZW4gYW5kIHdpbGwgZmFpbCwgYnV0IHNob3VsZG4ndCBiZSBjb3VudGVkIGFzIGEgZmFpbHVyZSBvbiBhCis6Y2xhc3M6YFRlc3RSZXN1bHRgLgorCitTa2lwcGluZyBhIHRlc3QgaXMgc2ltcGx5IGEgbWF0dGVyIG9mIHVzaW5nIHRoZSA6ZnVuYzpgc2tpcGAgOnRlcm06YGRlY29yYXRvcmAKK29yIG9uZSBvZiBpdHMgY29uZGl0aW9uYWwgdmFyaWFudHMuCisKK0Jhc2ljIHNraXBwaW5nIGxvb2tzIGxpa2UgdGhpczogOjoKKworICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICBAdW5pdHRlc3Quc2tpcCgiZGVtb25zdHJhdGluZyBza2lwcGluZyIpCisgICAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKKyAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgaGFwcGVuIikKKworICAgICAgIEB1bml0dGVzdC5za2lwSWYobXlsaWIuX192ZXJzaW9uX18gPCAoMSwgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBpbiB0aGlzIGxpYnJhcnkgdmVyc2lvbiIpCisgICAgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICAgICAjIFRlc3RzIHRoYXQgd29yayBmb3Igb25seSBhIGNlcnRhaW4gdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgcGFzcworCisgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpLCAicmVxdWlyZXMgV2luZG93cyIpCisgICAgICAgZGVmIHRlc3Rfd2luZG93c19zdXBwb3J0KHNlbGYpOgorICAgICAgICAgICAjIHdpbmRvd3Mgc3BlY2lmaWMgdGVzdGluZyBjb2RlCisgICAgICAgICAgIHBhc3MKKworVGhpcyBpcyB0aGUgb3V0cHV0IG9mIHJ1bm5pbmcgdGhlIGV4YW1wbGUgYWJvdmUgaW4gdmVyYm9zZSBtb2RlOiA6OgorCisgICB0ZXN0X2Zvcm1hdCAoX19tYWluX18uTXlUZXN0Q2FzZSkgLi4uIHNraXBwZWQgJ25vdCBzdXBwb3J0ZWQgaW4gdGhpcyBsaWJyYXJ5IHZlcnNpb24nCisgICB0ZXN0X25vdGhpbmcgKF9fbWFpbl9fLk15VGVzdENhc2UpIC4uLiBza2lwcGVkICdkZW1vbnN0cmF0aW5nIHNraXBwaW5nJworICAgdGVzdF93aW5kb3dzX3N1cHBvcnQgKF9fbWFpbl9fLk15VGVzdENhc2UpIC4uLiBza2lwcGVkICdyZXF1aXJlcyBXaW5kb3dzJworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBSYW4gMyB0ZXN0cyBpbiAwLjAwNXMKKworICAgT0sgKHNraXBwZWQ9MykKKworQ2xhc3NlcyBjYW4gYmUgc2tpcHBlZCBqdXN0IGxpa2UgbWV0aG9kczogOjoKKworICAgQHNraXAoInNob3dpbmcgY2xhc3Mgc2tpcHBpbmciKQorICAgY2xhc3MgTXlTa2lwcGVkVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgIGRlZiB0ZXN0X25vdF9ydW4oc2VsZik6CisgICAgICAgICAgIHBhc3MKKworOm1ldGg6YFRlc3RDYXNlLnNldFVwYCBjYW4gYWxzbyBza2lwIHRoZSB0ZXN0LiAgVGhpcyBpcyB1c2VmdWwgd2hlbiBhIHJlc291cmNlCit0aGF0IG5lZWRzIHRvIGJlIHNldCB1cCBpcyBub3QgYXZhaWxhYmxlLgorCitFeHBlY3RlZCBmYWlsdXJlcyB1c2UgdGhlIDpmdW5jOmBleHBlY3RlZEZhaWx1cmVgIGRlY29yYXRvci4gOjoKKworICAgY2xhc3MgRXhwZWN0ZWRGYWlsdXJlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICBkZWYgdGVzdF9mYWlsKHNlbGYpOgorICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIDAsICJicm9rZW4iKQorCitJdCdzIGVhc3kgdG8gcm9sbCB5b3VyIG93biBza2lwcGluZyBkZWNvcmF0b3JzIGJ5IG1ha2luZyBhIGRlY29yYXRvciB0aGF0IGNhbGxzCis6ZnVuYzpgc2tpcGAgb24gdGhlIHRlc3Qgd2hlbiBpdCB3YW50cyBpdCB0byBiZSBza2lwcGVkLiAgVGhpcyBkZWNvcmF0b3Igc2tpcHMKK3RoZSB0ZXN0IHVubGVzcyB0aGUgcGFzc2VkIG9iamVjdCBoYXMgYSBjZXJ0YWluIGF0dHJpYnV0ZTogOjoKKworICAgZGVmIHNraXBVbmxlc3NIYXNhdHRyKG9iaiwgYXR0cik6CisgICAgICAgaWYgaGFzYXR0cihvYmosIGF0dHIpOgorICAgICAgICAgICByZXR1cm4gbGFtYmRhIGZ1bmM6IGZ1bmMKKyAgICAgICByZXR1cm4gdW5pdHRlc3Quc2tpcCgiezAhcn0gZG9lc24ndCBoYXZlIHsxIXJ9Ii5mb3JtYXQob2JqLCBhdHRyKSkKKworVGhlIGZvbGxvd2luZyBkZWNvcmF0b3JzIGltcGxlbWVudCB0ZXN0IHNraXBwaW5nIGFuZCBleHBlY3RlZCBmYWlsdXJlczoKKworLi4gZnVuY3Rpb246OiBza2lwKHJlYXNvbikKKworICAgVW5jb25kaXRpb25hbGx5IHNraXAgdGhlIGRlY29yYXRlZCB0ZXN0LiAgKnJlYXNvbiogc2hvdWxkIGRlc2NyaWJlIHdoeSB0aGUKKyAgIHRlc3QgaXMgYmVpbmcgc2tpcHBlZC4KKworLi4gZnVuY3Rpb246OiBza2lwSWYoY29uZGl0aW9uLCByZWFzb24pCisKKyAgIFNraXAgdGhlIGRlY29yYXRlZCB0ZXN0IGlmICpjb25kaXRpb24qIGlzIHRydWUuCisKKy4uIGZ1bmN0aW9uOjogc2tpcFVubGVzcyhjb25kaXRpb24sIHJlYXNvbikKKworICAgU2tpcCB0aGUgZGVjb3JhdGVkIHRlc3QgdW5sZXNzICpjb25kaXRpb24qIGlzIHRydWUuCisKKy4uIGZ1bmN0aW9uOjogZXhwZWN0ZWRGYWlsdXJlCisKKyAgIE1hcmsgdGhlIHRlc3QgYXMgYW4gZXhwZWN0ZWQgZmFpbHVyZS4gIElmIHRoZSB0ZXN0IGZhaWxzIHdoZW4gcnVuLCB0aGUgdGVzdAorICAgaXMgbm90IGNvdW50ZWQgYXMgYSBmYWlsdXJlLgorCitTa2lwcGVkIHRlc3RzIHdpbGwgbm90IGhhdmUgOm1ldGg6YHNldFVwYCBvciA6bWV0aDpgdGVhckRvd25gIHJ1biBhcm91bmQgdGhlbS4KK1NraXBwZWQgY2xhc3NlcyB3aWxsIG5vdCBoYXZlIDptZXRoOmBzZXRVcENsYXNzYCBvciA6bWV0aDpgdGVhckRvd25DbGFzc2AgcnVuLgogCiAKIC4uIF91bml0dGVzdC1jb250ZW50czoKQEAgLTQyMCw2ICs2NjQsMTMgQEAKIENsYXNzZXMgYW5kIGZ1bmN0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgaW4gZGVwdGggdGhlIEFQSSBvZiA6bW9kOmB1bml0dGVzdGAuCisKKworLi4gX3Rlc3RjYXNlLW9iamVjdHM6CisKK1Rlc3QgY2FzZXMKK35+fn5+fn5+fn4KIAogLi4gY2xhc3M6OiBUZXN0Q2FzZShbbWV0aG9kTmFtZV0pCiAKQEAgLTQ0MywxOCArNjk0LDU4NyBAQAogICAgSGVyZSwgd2UgY3JlYXRlIHR3byBpbnN0YW5jZXMgb2YgOmNsYXNzOmBXaWRnZXRUZXN0Q2FzZWAsIGVhY2ggb2Ygd2hpY2ggcnVucyBhCiAgICBzaW5nbGUgdGVzdC4KIAotICAgKm1ldGhvZE5hbWUqIGRlZmF1bHRzIHRvIGBgJ3J1blRlc3QnYGAuCisgICAqbWV0aG9kTmFtZSogZGVmYXVsdHMgdG8gOm1ldGg6YHJ1blRlc3RgLgorCisgICA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZXMgcHJvdmlkZSB0aHJlZSBncm91cHMgb2YgbWV0aG9kczogb25lIGdyb3VwIHVzZWQKKyAgIHRvIHJ1biB0aGUgdGVzdCwgYW5vdGhlciB1c2VkIGJ5IHRoZSB0ZXN0IGltcGxlbWVudGF0aW9uIHRvIGNoZWNrIGNvbmRpdGlvbnMKKyAgIGFuZCByZXBvcnQgZmFpbHVyZXMsIGFuZCBzb21lIGlucXVpcnkgbWV0aG9kcyBhbGxvd2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgIHRlc3QgaXRzZWxmIHRvIGJlIGdhdGhlcmVkLgorCisgICBNZXRob2RzIGluIHRoZSBmaXJzdCBncm91cCAocnVubmluZyB0aGUgdGVzdCkgYXJlOgorCisKKyAgIC4uIG1ldGhvZDo6IHNldFVwKCkKKworICAgICAgTWV0aG9kIGNhbGxlZCB0byBwcmVwYXJlIHRoZSB0ZXN0IGZpeHR1cmUuICBUaGlzIGlzIGNhbGxlZCBpbW1lZGlhdGVseQorICAgICAgYmVmb3JlIGNhbGxpbmcgdGhlIHRlc3QgbWV0aG9kOyBhbnkgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGlzIG1ldGhvZCB3aWxsCisgICAgICBiZSBjb25zaWRlcmVkIGFuIGVycm9yIHJhdGhlciB0aGFuIGEgdGVzdCBmYWlsdXJlLiBUaGUgZGVmYXVsdAorICAgICAgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgorCisKKyAgIC4uIG1ldGhvZDo6IHRlYXJEb3duKCkKKworICAgICAgTWV0aG9kIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgdGVzdCBtZXRob2QgaGFzIGJlZW4gY2FsbGVkIGFuZCB0aGUKKyAgICAgIHJlc3VsdCByZWNvcmRlZC4gIFRoaXMgaXMgY2FsbGVkIGV2ZW4gaWYgdGhlIHRlc3QgbWV0aG9kIHJhaXNlZCBhbgorICAgICAgZXhjZXB0aW9uLCBzbyB0aGUgaW1wbGVtZW50YXRpb24gaW4gc3ViY2xhc3NlcyBtYXkgbmVlZCB0byBiZSBwYXJ0aWN1bGFybHkKKyAgICAgIGNhcmVmdWwgYWJvdXQgY2hlY2tpbmcgaW50ZXJuYWwgc3RhdGUuICBBbnkgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGlzCisgICAgICBtZXRob2Qgd2lsbCBiZSBjb25zaWRlcmVkIGFuIGVycm9yIHJhdGhlciB0aGFuIGEgdGVzdCBmYWlsdXJlLiAgVGhpcworICAgICAgbWV0aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhlIDptZXRoOmBzZXRVcGAgc3VjY2VlZHMsIHJlZ2FyZGxlc3Mgb2YKKyAgICAgIHRoZSBvdXRjb21lIG9mIHRoZSB0ZXN0IG1ldGhvZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldFVwQ2xhc3MoKQorCisgICAgICBBIGNsYXNzIG1ldGhvZCBjYWxsZWQgYmVmb3JlIHRlc3RzIGluIGFuIGluZGl2aWR1YWwgY2xhc3MgcnVuLgorICAgICAgYGBzZXRVcENsYXNzYGAgaXMgY2FsbGVkIHdpdGggdGhlIGNsYXNzIGFzIHRoZSBvbmx5IGFyZ3VtZW50CisgICAgICBhbmQgbXVzdCBiZSBkZWNvcmF0ZWQgYXMgYSA6ZnVuYzpgY2xhc3NtZXRob2RgOjoKKworICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgIC4uLgorCisgICAgICBTZWUgYENsYXNzIGFuZCBNb2R1bGUgRml4dHVyZXNgXyBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiB0ZWFyRG93bkNsYXNzKCkKKworICAgICAgQSBjbGFzcyBtZXRob2QgY2FsbGVkIGFmdGVyIHRlc3RzIGluIGFuIGluZGl2aWR1YWwgY2xhc3MgaGF2ZSBydW4uCisgICAgICBgYHRlYXJEb3duQ2xhc3NgYCBpcyBjYWxsZWQgd2l0aCB0aGUgY2xhc3MgYXMgdGhlIG9ubHkgYXJndW1lbnQKKyAgICAgIGFuZCBtdXN0IGJlIGRlY29yYXRlZCBhcyBhIDptZXRoOmBjbGFzc21ldGhvZGA6OgorCisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgLi4uCisKKyAgICAgIFNlZSBgQ2xhc3MgYW5kIE1vZHVsZSBGaXh0dXJlc2BfIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IHJ1bihbcmVzdWx0XSkKKworICAgICAgUnVuIHRoZSB0ZXN0LCBjb2xsZWN0aW5nIHRoZSByZXN1bHQgaW50byB0aGUgdGVzdCByZXN1bHQgb2JqZWN0IHBhc3NlZCBhcworICAgICAgKnJlc3VsdCouICBJZiAqcmVzdWx0KiBpcyBvbWl0dGVkIG9yIDpjb25zdDpgTm9uZWAsIGEgdGVtcG9yYXJ5IHJlc3VsdAorICAgICAgb2JqZWN0IGlzIGNyZWF0ZWQgKGJ5IGNhbGxpbmcgdGhlIDptZXRoOmBkZWZhdWx0VGVzdFJlc3VsdGAgbWV0aG9kKSBhbmQKKyAgICAgIHVzZWQuIFRoZSByZXN1bHQgb2JqZWN0IGlzIG5vdCByZXR1cm5lZCB0byA6bWV0aDpgcnVuYCdzIGNhbGxlci4KKworICAgICAgVGhlIHNhbWUgZWZmZWN0IG1heSBiZSBoYWQgYnkgc2ltcGx5IGNhbGxpbmcgdGhlIDpjbGFzczpgVGVzdENhc2VgCisgICAgICBpbnN0YW5jZS4KKworCisgICAuLiBtZXRob2Q6OiBza2lwVGVzdChyZWFzb24pCisKKyAgICAgIENhbGxpbmcgdGhpcyBkdXJpbmcgYSB0ZXN0IG1ldGhvZCBvciA6bWV0aDpgc2V0VXBgIHNraXBzIHRoZSBjdXJyZW50CisgICAgICB0ZXN0LiAgU2VlIDpyZWY6YHVuaXR0ZXN0LXNraXBwaW5nYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogZGVidWcoKQorCisgICAgICBSdW4gdGhlIHRlc3Qgd2l0aG91dCBjb2xsZWN0aW5nIHRoZSByZXN1bHQuICBUaGlzIGFsbG93cyBleGNlcHRpb25zIHJhaXNlZAorICAgICAgYnkgdGhlIHRlc3QgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY2FsbGVyLCBhbmQgY2FuIGJlIHVzZWQgdG8gc3VwcG9ydAorICAgICAgcnVubmluZyB0ZXN0cyB1bmRlciBhIGRlYnVnZ2VyLgorCisgICBUaGUgdGVzdCBjb2RlIGNhbiB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byBjaGVjayBmb3IgYW5kIHJlcG9ydAorICAgZmFpbHVyZXMuCisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0VHJ1ZShleHByWywgbXNnXSkKKyAgICAgICAgICAgICAgIGFzc2VydF8oZXhwclssIG1zZ10pCisgICAgICAgICAgICAgICBmYWlsVW5sZXNzKGV4cHJbLCBtc2ddKQorCisgICAgICBTaWduYWwgYSB0ZXN0IGZhaWx1cmUgaWYgKmV4cHIqIGlzIGZhbHNlOyB0aGUgZXhwbGFuYXRpb24gZm9yIHRoZSBmYWlsdXJlCisgICAgICB3aWxsIGJlICptc2cqIGlmIGdpdmVuLCBvdGhlcndpc2UgaXQgd2lsbCBiZSA6Y29uc3Q6YE5vbmVgLgorCisgICAgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICAgICA6bWV0aDpgZmFpbFVubGVzc2AgYW5kIDptZXRoOmBhc3NlcnRfYDsgdXNlIDptZXRoOmBhc3NlcnRUcnVlYC4KKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRFcXVhbChmaXJzdCwgc2Vjb25kWywgbXNnXSkKKyAgICAgICAgICAgICAgIGZhaWxVbmxlc3NFcXVhbChmaXJzdCwgc2Vjb25kWywgbXNnXSkKKworICAgICAgVGVzdCB0aGF0ICpmaXJzdCogYW5kICpzZWNvbmQqIGFyZSBlcXVhbC4gIElmIHRoZSB2YWx1ZXMgZG8gbm90IGNvbXBhcmUKKyAgICAgIGVxdWFsLCB0aGUgdGVzdCB3aWxsIGZhaWwgd2l0aCB0aGUgZXhwbGFuYXRpb24gZ2l2ZW4gYnkgKm1zZyosIG9yCisgICAgICA6Y29uc3Q6YE5vbmVgLiAgTm90ZSB0aGF0IHVzaW5nIDptZXRoOmBhc3NlcnRFcXVhbGAgaW1wcm92ZXMgdXBvbgorICAgICAgZG9pbmcgdGhlIGNvbXBhcmlzb24gYXMgdGhlIGZpcnN0IHBhcmFtZXRlciB0byA6bWV0aDpgYXNzZXJ0VHJ1ZWA6IHRoZQorICAgICAgZGVmYXVsdCB2YWx1ZSBmb3IgKm1zZyogaW5jbHVkZSByZXByZXNlbnRhdGlvbnMgb2YgYm90aCAqZmlyc3QqIGFuZAorICAgICAgKnNlY29uZCouCisKKyAgICAgIEluIGFkZGl0aW9uLCBpZiAqZmlyc3QqIGFuZCAqc2Vjb25kKiBhcmUgdGhlIGV4YWN0IHNhbWUgdHlwZSBhbmQgb25lIG9mCisgICAgICBsaXN0LCB0dXBsZSwgZGljdCwgc2V0LCBmcm96ZW5zZXQgb3IgdW5pY29kZSBvciBhbnkgdHlwZSB0aGF0IGEgc3ViY2xhc3MKKyAgICAgIHJlZ2lzdGVycyB3aXRoIDptZXRoOmBhZGRUeXBlRXF1YWxpdHlGdW5jYCB0aGUgdHlwZSBzcGVjaWZpYyBlcXVhbGl0eQorICAgICAgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSBtb3JlIHVzZWZ1bCBkZWZhdWx0IGVycm9yCisgICAgICBtZXNzYWdlLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgICAgQWRkZWQgdGhlIGF1dG9tYXRpYyBjYWxsaW5nIG9mIHR5cGUgc3BlY2lmaWMgZXF1YWxpdHkgZnVuY3Rpb24uCisKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgICAgIDptZXRoOmBmYWlsVW5sZXNzRXF1YWxgOyB1c2UgOm1ldGg6YGFzc2VydEVxdWFsYC4KKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnROb3RFcXVhbChmaXJzdCwgc2Vjb25kWywgbXNnXSkKKyAgICAgICAgICAgICAgIGZhaWxJZkVxdWFsKGZpcnN0LCBzZWNvbmRbLCBtc2ddKQorCisgICAgICBUZXN0IHRoYXQgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIG5vdCBlcXVhbC4gIElmIHRoZSB2YWx1ZXMgZG8gY29tcGFyZQorICAgICAgZXF1YWwsIHRoZSB0ZXN0IHdpbGwgZmFpbCB3aXRoIHRoZSBleHBsYW5hdGlvbiBnaXZlbiBieSAqbXNnKiwgb3IKKyAgICAgIDpjb25zdDpgTm9uZWAuICBOb3RlIHRoYXQgdXNpbmcgOm1ldGg6YGFzc2VydE5vdEVxdWFsYCBpbXByb3ZlcyB1cG9uIGRvaW5nCisgICAgICB0aGUgY29tcGFyaXNvbiBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIDptZXRoOmBhc3NlcnRUcnVlYCBpcyB0aGF0IHRoZQorICAgICAgZGVmYXVsdCB2YWx1ZSBmb3IgKm1zZyogY2FuIGJlIGNvbXB1dGVkIHRvIGluY2x1ZGUgcmVwcmVzZW50YXRpb25zIG9mIGJvdGgKKyAgICAgICpmaXJzdCogYW5kICpzZWNvbmQqLgorCisgICAgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICAgICA6bWV0aDpgZmFpbElmRXF1YWxgOyB1c2UgOm1ldGg6YGFzc2VydE5vdEVxdWFsYC4KKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRBbG1vc3RFcXVhbChmaXJzdCwgc2Vjb25kWywgcGxhY2VzWywgbXNnWywgZGVsdGFdXV0pCisgICAgICAgICAgICAgICBmYWlsVW5sZXNzQWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZFssIHBsYWNlc1ssIG1zZ1ssIGRlbHRhXV1dKQorCisgICAgICBUZXN0IHRoYXQgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIGFwcHJveGltYXRlbHkgZXF1YWwgYnkgY29tcHV0aW5nIHRoZQorICAgICAgZGlmZmVyZW5jZSwgcm91bmRpbmcgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBkZWNpbWFsICpwbGFjZXMqIChkZWZhdWx0IDcpLAorICAgICAgYW5kIGNvbXBhcmluZyB0byB6ZXJvLgorCisgICAgICBOb3RlIHRoYXQgY29tcGFyaW5nIGEgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGlzIG5vdCB0aGUgc2FtZSBhcworICAgICAgY29tcGFyaW5nIGEgZ2l2ZW4gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cy4gSWYgdGhlIHZhbHVlcyBkbyBub3QKKyAgICAgIGNvbXBhcmUgZXF1YWwsIHRoZSB0ZXN0IHdpbGwgZmFpbCB3aXRoIHRoZSBleHBsYW5hdGlvbiBnaXZlbiBieSAqbXNnKiwgb3IKKyAgICAgIDpjb25zdDpgTm9uZWAuCisKKyAgICAgIElmICpkZWx0YSogaXMgc3VwcGxpZWQgaW5zdGVhZCBvZiAqcGxhY2VzKiB0aGVuIHRoZSBkaWZmZXJlbmNlCisgICAgICBiZXR3ZWVuICpmaXJzdCogYW5kICpzZWNvbmQqIG11c3QgYmUgbGVzcyB0aGFuICpkZWx0YSouCisKKyAgICAgIFN1cHBseWluZyBib3RoICpkZWx0YSogYW5kICpwbGFjZXMqIHJhaXNlcyBhIGBgVHlwZUVycm9yYGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICAgICBPYmplY3RzIHRoYXQgY29tcGFyZSBlcXVhbCBhcmUgYXV0b21hdGljYWxseSBhbG1vc3QgZXF1YWwuCisgICAgICAgICBBZGRlZCB0aGUgYGBkZWx0YWBgIGtleXdvcmQgYXJndW1lbnQuCisKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgICAgIDptZXRoOmBmYWlsVW5sZXNzQWxtb3N0RXF1YWxgOyB1c2UgOm1ldGg6YGFzc2VydEFsbW9zdEVxdWFsYC4KKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnROb3RBbG1vc3RFcXVhbChmaXJzdCwgc2Vjb25kWywgcGxhY2VzWywgbXNnWywgZGVsdGFdXV0pCisgICAgICAgICAgICAgICBmYWlsSWZBbG1vc3RFcXVhbChmaXJzdCwgc2Vjb25kWywgcGxhY2VzWywgbXNnWywgZGVsdGFdXV0pCisKKyAgICAgIFRlc3QgdGhhdCAqZmlyc3QqIGFuZCAqc2Vjb25kKiBhcmUgbm90IGFwcHJveGltYXRlbHkgZXF1YWwgYnkgY29tcHV0aW5nCisgICAgICB0aGUgZGlmZmVyZW5jZSwgcm91bmRpbmcgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBkZWNpbWFsICpwbGFjZXMqIChkZWZhdWx0CisgICAgICA3KSwgYW5kIGNvbXBhcmluZyB0byB6ZXJvLgorCisgICAgICBOb3RlIHRoYXQgY29tcGFyaW5nIGEgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGlzIG5vdCB0aGUgc2FtZSBhcworICAgICAgY29tcGFyaW5nIGEgZ2l2ZW4gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cy4gSWYgdGhlIHZhbHVlcyBkbyBub3QKKyAgICAgIGNvbXBhcmUgZXF1YWwsIHRoZSB0ZXN0IHdpbGwgZmFpbCB3aXRoIHRoZSBleHBsYW5hdGlvbiBnaXZlbiBieSAqbXNnKiwgb3IKKyAgICAgIDpjb25zdDpgTm9uZWAuCisKKyAgICAgIElmICpkZWx0YSogaXMgc3VwcGxpZWQgaW5zdGVhZCBvZiAqcGxhY2VzKiB0aGVuIHRoZSBkaWZmZXJlbmNlCisgICAgICBiZXR3ZWVuICpmaXJzdCogYW5kICpzZWNvbmQqIG11c3QgYmUgbW9yZSB0aGFuICpkZWx0YSouCisKKyAgICAgIFN1cHBseWluZyBib3RoICpkZWx0YSogYW5kICpwbGFjZXMqIHJhaXNlcyBhIGBgVHlwZUVycm9yYGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICAgICBPYmplY3RzIHRoYXQgY29tcGFyZSBlcXVhbCBhdXRvbWF0aWNhbGx5IGZhaWwuCisgICAgICAgICBBZGRlZCB0aGUgYGBkZWx0YWBgIGtleXdvcmQgYXJndW1lbnQuCisKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgICAgIDptZXRoOmBmYWlsSWZBbG1vc3RFcXVhbGA7IHVzZSA6bWV0aDpgYXNzZXJ0Tm90QWxtb3N0RXF1YWxgLgorCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydEdyZWF0ZXIoZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpCisgICAgICAgICAgICAgICBhc3NlcnRHcmVhdGVyRXF1YWwoZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpCisgICAgICAgICAgICAgICBhc3NlcnRMZXNzKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQorICAgICAgICAgICAgICAgYXNzZXJ0TGVzc0VxdWFsKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQorCisgICAgICBUZXN0IHRoYXQgKmZpcnN0KiBpcyByZXNwZWN0aXZlbHkgPiwgPj0sIDwgb3IgPD0gdGhhbiAqc2Vjb25kKiBkZXBlbmRpbmcKKyAgICAgIG9uIHRoZSBtZXRob2QgbmFtZS4gIElmIG5vdCwgdGhlIHRlc3Qgd2lsbCBmYWlsIHdpdGggYW4gZXhwbGFuYXRpb24KKyAgICAgIG9yIHdpdGggdGhlIGV4cGxhbmF0aW9uIGdpdmVuIGJ5ICptc2cqOjoKKworICAgICAgICAgPj4+IHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDMsIDQpCisgICAgICAgICBBc3NlcnRpb25FcnJvcjogIjMiIHVuZXhwZWN0ZWRseSBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICI0IgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRNdWx0aUxpbmVFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkKKworICAgICAgVGVzdCB0aGF0IHRoZSBtdWx0aWxpbmUgc3RyaW5nICpmaXJzdCogaXMgZXF1YWwgdG8gdGhlIHN0cmluZyAqc2Vjb25kKi4KKyAgICAgIFdoZW4gbm90IGVxdWFsIGEgZGlmZiBvZiB0aGUgdHdvIHN0cmluZ3MgaGlnaGxpZ2h0aW5nIHRoZSBkaWZmZXJlbmNlcworICAgICAgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZS4gVGhpcyBtZXRob2QgaXMgdXNlZCBieSBkZWZhdWx0CisgICAgICB3aGVuIGNvbXBhcmluZyBVbmljb2RlIHN0cmluZ3Mgd2l0aCA6bWV0aDpgYXNzZXJ0RXF1YWxgLgorCisgICAgICBJZiBzcGVjaWZpZWQsICptc2cqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXJyb3IgbWVzc2FnZSBvbiBmYWlsdXJlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRSZWdleHBNYXRjaGVzKHRleHQsIHJlZ2V4cCwgbXNnPU5vbmUpCisKKyAgICAgIFZlcmlmaWVzIHRoYXQgYSAqcmVnZXhwKiBzZWFyY2ggbWF0Y2hlcyAqdGV4dCouICBGYWlscyB3aXRoIGFuIGVycm9yCisgICAgICBtZXNzYWdlIGluY2x1ZGluZyB0aGUgcGF0dGVybiBhbmQgdGhlICp0ZXh0Ki4gICpyZWdleHAqIG1heSBiZQorICAgICAgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgIHN1aXRhYmxlIGZvciB1c2UgYnkgOmZ1bmM6YHJlLnNlYXJjaGAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydE5vdFJlZ2V4cE1hdGNoZXModGV4dCwgcmVnZXhwLCBtc2c9Tm9uZSkKKworICAgICAgVmVyaWZpZXMgdGhhdCBhICpyZWdleHAqIHNlYXJjaCBkb2VzIG5vdCBtYXRjaCAqdGV4dCouICBGYWlscyB3aXRoIGFuIGVycm9yCisgICAgICBtZXNzYWdlIGluY2x1ZGluZyB0aGUgcGF0dGVybiBhbmQgdGhlIHBhcnQgb2YgKnRleHQqIHRoYXQgbWF0Y2hlcy4gICpyZWdleHAqCisgICAgICBtYXkgYmUgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyCisgICAgICBleHByZXNzaW9uIHN1aXRhYmxlIGZvciB1c2UgYnkgOmZ1bmM6YHJlLnNlYXJjaGAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydEluKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQorICAgICAgICAgICAgICAgYXNzZXJ0Tm90SW4oZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpCisKKyAgICAgIFRlc3RzIHRoYXQgKmZpcnN0KiBpcyBvciBpcyBub3QgaW4gKnNlY29uZCogd2l0aCBhbiBleHBsYW5hdG9yeSBlcnJvcgorICAgICAgbWVzc2FnZSBhcyBhcHByb3ByaWF0ZS4KKworICAgICAgSWYgc3BlY2lmaWVkLCAqbXNnKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0SXRlbXNFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtc2c9Tm9uZSkKKworICAgICAgVGVzdCB0aGF0IHNlcXVlbmNlICpleHBlY3RlZCogY29udGFpbnMgdGhlIHNhbWUgZWxlbWVudHMgYXMgKmFjdHVhbCosCisgICAgICByZWdhcmRsZXNzIG9mIHRoZWlyIG9yZGVyLiBXaGVuIHRoZXkgZG9uJ3QsIGFuIGVycm9yIG1lc3NhZ2UgbGlzdGluZyB0aGUKKyAgICAgIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHNlcXVlbmNlcyB3aWxsIGJlIGdlbmVyYXRlZC4KKworICAgICAgRHVwbGljYXRlIGVsZW1lbnRzIGFyZSAqbm90KiBpZ25vcmVkIHdoZW4gY29tcGFyaW5nICphY3R1YWwqIGFuZAorICAgICAgKmV4cGVjdGVkKi4gSXQgdmVyaWZpZXMgaWYgZWFjaCBlbGVtZW50IGhhcyB0aGUgc2FtZSBjb3VudCBpbiBib3RoCisgICAgICBzZXF1ZW5jZXMuIEl0IGlzIHRoZSBlcXVpdmFsZW50IG9mIGBgYXNzZXJ0RXF1YWwoc29ydGVkKGV4cGVjdGVkKSwKKyAgICAgIHNvcnRlZChhY3R1YWwpKWBgIGJ1dCBpdCB3b3JrcyB3aXRoIHNlcXVlbmNlcyBvZiB1bmhhc2hhYmxlIG9iamVjdHMgYXMKKyAgICAgIHdlbGwuCisKKyAgICAgIElmIHNwZWNpZmllZCwgKm1zZyogd2lsbCBiZSB1c2VkIGFzIHRoZSBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydFNldEVxdWFsKHNldDEsIHNldDIsIG1zZz1Ob25lKQorCisgICAgICBUZXN0cyB0aGF0IHR3byBzZXRzIGFyZSBlcXVhbC4gIElmIG5vdCwgYW4gZXJyb3IgbWVzc2FnZSBpcyBjb25zdHJ1Y3RlZAorICAgICAgdGhhdCBsaXN0cyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc2V0cy4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkKKyAgICAgIGRlZmF1bHQgd2hlbiBjb21wYXJpbmcgc2V0cyBvciBmcm96ZW5zZXRzIHdpdGggOm1ldGg6YGFzc2VydEVxdWFsYC4KKworICAgICAgRmFpbHMgaWYgZWl0aGVyIG9mICpzZXQxKiBvciAqc2V0MiogZG9lcyBub3QgaGF2ZSBhIDptZXRoOmBzZXQuZGlmZmVyZW5jZWAKKyAgICAgIG1ldGhvZC4KKworICAgICAgSWYgc3BlY2lmaWVkLCAqbXNnKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0RGljdEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwsIG1zZz1Ob25lKQorCisgICAgICBUZXN0IHRoYXQgdHdvIGRpY3Rpb25hcmllcyBhcmUgZXF1YWwuICBJZiBub3QsIGFuIGVycm9yIG1lc3NhZ2UgaXMKKyAgICAgIGNvbnN0cnVjdGVkIHRoYXQgc2hvd3MgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBkaWN0aW9uYXJpZXMuIFRoaXMKKyAgICAgIG1ldGhvZCB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdCB0byBjb21wYXJlIGRpY3Rpb25hcmllcyBpbgorICAgICAgY2FsbHMgdG8gOm1ldGg6YGFzc2VydEVxdWFsYC4KKworICAgICAgSWYgc3BlY2lmaWVkLCAqbXNnKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KGV4cGVjdGVkLCBhY3R1YWwsIG1zZz1Ob25lKQorCisgICAgICBUZXN0cyB3aGV0aGVyIHRoZSBrZXkvdmFsdWUgcGFpcnMgaW4gZGljdGlvbmFyeSAqYWN0dWFsKiBhcmUgYQorICAgICAgc3VwZXJzZXQgb2YgdGhvc2UgaW4gKmV4cGVjdGVkKi4gIElmIG5vdCwgYW4gZXJyb3IgbWVzc2FnZSBsaXN0aW5nCisgICAgICB0aGUgbWlzc2luZyBrZXlzIGFuZCBtaXNtYXRjaGVkIHZhbHVlcyBpcyBnZW5lcmF0ZWQuCisKKyAgICAgIElmIHNwZWNpZmllZCwgKm1zZyogd2lsbCBiZSB1c2VkIGFzIHRoZSBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydExpc3RFcXVhbChsaXN0MSwgbGlzdDIsIG1zZz1Ob25lKQorICAgICAgICAgICAgICAgYXNzZXJ0VHVwbGVFcXVhbCh0dXBsZTEsIHR1cGxlMiwgbXNnPU5vbmUpCisKKyAgICAgIFRlc3RzIHRoYXQgdHdvIGxpc3RzIG9yIHR1cGxlcyBhcmUgZXF1YWwuICBJZiBub3QgYW4gZXJyb3IgbWVzc2FnZSBpcworICAgICAgY29uc3RydWN0ZWQgdGhhdCBzaG93cyBvbmx5IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28uICBBbiBlcnJvcgorICAgICAgaXMgYWxzbyByYWlzZWQgaWYgZWl0aGVyIG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBvZiB0aGUgd3JvbmcgdHlwZS4KKyAgICAgIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgYnkgZGVmYXVsdCB3aGVuIGNvbXBhcmluZyBsaXN0cyBvciB0dXBsZXMgd2l0aAorICAgICAgOm1ldGg6YGFzc2VydEVxdWFsYC4KKworICAgICAgSWYgc3BlY2lmaWVkLCAqbXNnKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0U2VxdWVuY2VFcXVhbChzZXExLCBzZXEyLCBtc2c9Tm9uZSwgc2VxX3R5cGU9Tm9uZSkKKworICAgICAgVGVzdHMgdGhhdCB0d28gc2VxdWVuY2VzIGFyZSBlcXVhbC4gIElmIGEgKnNlcV90eXBlKiBpcyBzdXBwbGllZCwgYm90aAorICAgICAgKnNlcTEqIGFuZCAqc2VxMiogbXVzdCBiZSBpbnN0YW5jZXMgb2YgKnNlcV90eXBlKiBvciBhIGZhaWx1cmUgd2lsbAorICAgICAgYmUgcmFpc2VkLiAgSWYgdGhlIHNlcXVlbmNlcyBhcmUgZGlmZmVyZW50IGFuIGVycm9yIG1lc3NhZ2UgaXMKKyAgICAgIGNvbnN0cnVjdGVkIHRoYXQgc2hvd3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvLgorCisgICAgICBJZiBzcGVjaWZpZWQsICptc2cqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXJyb3IgbWVzc2FnZSBvbiBmYWlsdXJlLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGltcGxlbWVudCA6bWV0aDpgYXNzZXJ0TGlzdEVxdWFsYCBhbmQKKyAgICAgIDptZXRoOmBhc3NlcnRUdXBsZUVxdWFsYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvblssIGNhbGxhYmxlLCAuLi5dKQorICAgICAgICAgICAgICAgZmFpbFVubGVzc1JhaXNlcyhleGNlcHRpb25bLCBjYWxsYWJsZSwgLi4uXSkKKworICAgICAgVGVzdCB0aGF0IGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiAqY2FsbGFibGUqIGlzIGNhbGxlZCB3aXRoIGFueQorICAgICAgcG9zaXRpb25hbCBvciBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGFyZSBhbHNvIHBhc3NlZCB0bworICAgICAgOm1ldGg6YGFzc2VydFJhaXNlc2AuICBUaGUgdGVzdCBwYXNzZXMgaWYgKmV4Y2VwdGlvbiogaXMgcmFpc2VkLCBpcyBhbgorICAgICAgZXJyb3IgaWYgYW5vdGhlciBleGNlcHRpb24gaXMgcmFpc2VkLCBvciBmYWlscyBpZiBubyBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgICAgVG8gY2F0Y2ggYW55IG9mIGEgZ3JvdXAgb2YgZXhjZXB0aW9ucywgYSB0dXBsZSBjb250YWluaW5nIHRoZSBleGNlcHRpb24KKyAgICAgIGNsYXNzZXMgbWF5IGJlIHBhc3NlZCBhcyAqZXhjZXB0aW9uKi4KKworICAgICAgSWYgKmNhbGxhYmxlKiBpcyBvbWl0dGVkIG9yIE5vbmUsIHJldHVybnMgYSBjb250ZXh0IG1hbmFnZXIgc28gdGhhdCB0aGUKKyAgICAgIGNvZGUgdW5kZXIgdGVzdCBjYW4gYmUgd3JpdHRlbiBpbmxpbmUgcmF0aGVyIHRoYW4gYXMgYSBmdW5jdGlvbjo6CisKKyAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU29tZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgZG9fc29tZXRoaW5nKCkKKworICAgICAgVGhlIGNvbnRleHQgbWFuYWdlciB3aWxsIHN0b3JlIHRoZSBjYXVnaHQgZXhjZXB0aW9uIG9iamVjdCBpbiBpdHMKKyAgICAgIDphdHRyOmBleGNlcHRpb25gIGF0dHJpYnV0ZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgaW50ZW50aW9uCisgICAgICBpcyB0byBwZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2tzIG9uIHRoZSBleGNlcHRpb24gcmFpc2VkOjoKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNvbWVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgZG9fc29tZXRoaW5nKCkKKworICAgICAgICB0aGVfZXhjZXB0aW9uID0gY20uZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlX2V4Y2VwdGlvbi5lcnJvcl9jb2RlLCAzKQorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gdXNlIDptZXRoOmBhc3NlcnRSYWlzZXNgIGFzIGEgY29udGV4dCBtYW5hZ2VyLgorCisgICAgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICAgICA6bWV0aDpgZmFpbFVubGVzc1JhaXNlc2A7IHVzZSA6bWV0aDpgYXNzZXJ0UmFpc2VzYC4KKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRSYWlzZXNSZWdleHAoZXhjZXB0aW9uLCByZWdleHBbLCBjYWxsYWJsZSwgLi4uXSkKKworICAgICAgTGlrZSA6bWV0aDpgYXNzZXJ0UmFpc2VzYCBidXQgYWxzbyB0ZXN0cyB0aGF0ICpyZWdleHAqIG1hdGNoZXMKKyAgICAgIG9uIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhaXNlZCBleGNlcHRpb24uICAqcmVnZXhwKiBtYXkgYmUKKyAgICAgIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBvciBhIHN0cmluZyBjb250YWluaW5nIGEgcmVndWxhciBleHByZXNzaW9uCisgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5IDpmdW5jOmByZS5zZWFyY2hgLiAgRXhhbXBsZXM6OgorCisgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChWYWx1ZUVycm9yLCAnaW52YWxpZCBsaXRlcmFsIGZvci4qWFlaJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsICdYWVonKQorCisgICAgICBvcjo6CisKKyAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVmFsdWVFcnJvciwgJ2xpdGVyYWwnKToKKyAgICAgICAgICAgIGludCgnWFlaJykKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0SXNOb25lKGV4cHJbLCBtc2ddKQorCisgICAgICBUaGlzIHNpZ25hbHMgYSB0ZXN0IGZhaWx1cmUgaWYgKmV4cHIqIGlzIG5vdCBOb25lLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRJc05vdE5vbmUoZXhwclssIG1zZ10pCisKKyAgICAgIFRoZSBpbnZlcnNlIG9mIHRoZSA6bWV0aDpgYXNzZXJ0SXNOb25lYCBtZXRob2QuCisgICAgICBUaGlzIHNpZ25hbHMgYSB0ZXN0IGZhaWx1cmUgaWYgKmV4cHIqIGlzIE5vbmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydElzKGV4cHIxLCBleHByMlssIG1zZ10pCisKKyAgICAgIFRoaXMgc2lnbmFscyBhIHRlc3QgZmFpbHVyZSBpZiAqZXhwcjEqIGFuZCAqZXhwcjIqIGRvbid0IGV2YWx1YXRlIHRvIHRoZSBzYW1lCisgICAgICBvYmplY3QuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydElzTm90KGV4cHIxLCBleHByMlssIG1zZ10pCisKKyAgICAgIFRoZSBpbnZlcnNlIG9mIHRoZSA6bWV0aDpgYXNzZXJ0SXNgIG1ldGhvZC4KKyAgICAgIFRoaXMgc2lnbmFscyBhIHRlc3QgZmFpbHVyZSBpZiAqZXhwcjEqIGFuZCAqZXhwcjIqIGV2YWx1YXRlIHRvIHRoZSBzYW1lCisgICAgICBvYmplY3QuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydElzSW5zdGFuY2Uob2JqLCBjbHNbLCBtc2ddKQorCisgICAgICBUaGlzIHNpZ25hbHMgYSB0ZXN0IGZhaWx1cmUgaWYgKm9iaiogaXMgbm90IGFuIGluc3RhbmNlIG9mICpjbHMqICh3aGljaAorICAgICAgY2FuIGJlIGEgY2xhc3Mgb3IgYSB0dXBsZSBvZiBjbGFzc2VzLCBhcyBzdXBwb3J0ZWQgYnkgOmZ1bmM6YGlzaW5zdGFuY2VgKS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0Tm90SXNJbnN0YW5jZShvYmosIGNsc1ssIG1zZ10pCisKKyAgICAgIFRoZSBpbnZlcnNlIG9mIHRoZSA6bWV0aDpgYXNzZXJ0SXNJbnN0YW5jZWAgbWV0aG9kLiAgVGhpcyBzaWduYWxzIGEgdGVzdAorICAgICAgZmFpbHVyZSBpZiAqb2JqKiBpcyBhbiBpbnN0YW5jZSBvZiAqY2xzKi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0RmFsc2UoZXhwclssIG1zZ10pCisgICAgICAgICAgICAgICBmYWlsSWYoZXhwclssIG1zZ10pCisKKyAgICAgIFRoZSBpbnZlcnNlIG9mIHRoZSA6bWV0aDpgYXNzZXJ0VHJ1ZWAgbWV0aG9kIGlzIHRoZSA6bWV0aDpgYXNzZXJ0RmFsc2VgIG1ldGhvZC4KKyAgICAgIFRoaXMgc2lnbmFscyBhIHRlc3QgZmFpbHVyZSBpZiAqZXhwciogaXMgdHJ1ZSwgd2l0aCAqbXNnKiBvciA6Y29uc3Q6YE5vbmVgCisgICAgICBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuCisKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgICAgIDptZXRoOmBmYWlsSWZgOyB1c2UgOm1ldGg6YGFzc2VydEZhbHNlYC4KKworCisgICAuLiBtZXRob2Q6OiBmYWlsKFttc2ddKQorCisgICAgICBTaWduYWxzIGEgdGVzdCBmYWlsdXJlIHVuY29uZGl0aW9uYWxseSwgd2l0aCAqbXNnKiBvciA6Y29uc3Q6YE5vbmVgIGZvcgorICAgICAgdGhlIGVycm9yIG1lc3NhZ2UuCisKKworICAgLi4gYXR0cmlidXRlOjogZmFpbHVyZUV4Y2VwdGlvbgorCisgICAgICBUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCBtZXRob2QuICBJZiBhCisgICAgICB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvIGNhcnJ5CisgICAgICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluIG9yZGVyIHRvICJwbGF5CisgICAgICBmYWlyIiB3aXRoIHRoZSBmcmFtZXdvcmsuICBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcworICAgICAgOmV4YzpgQXNzZXJ0aW9uRXJyb3JgLgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxvbmdNZXNzYWdlCisKKyAgICAgIElmIHNldCB0byBUcnVlIHRoZW4gYW55IGV4cGxpY2l0IGZhaWx1cmUgbWVzc2FnZSB5b3UgcGFzcyBpbiB0byB0aGUKKyAgICAgIGFzc2VydCBtZXRob2RzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgbm9ybWFsIGZhaWx1cmUgbWVzc2FnZS4KKyAgICAgIFRoZSBub3JtYWwgbWVzc2FnZXMgY29udGFpbiB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdHMgaW52b2x2ZWQsCisgICAgICBmb3IgZXhhbXBsZSB0aGUgbWVzc2FnZSBmcm9tIGFzc2VydEVxdWFsIHNob3dzIHlvdSB0aGUgcmVwciBvZiB0aGUgdHdvCisgICAgICB1bmVxdWFsIG9iamVjdHMuIFNldHRpbmcgdGhpcyBhdHRyaWJ1dGUgdG8gVHJ1ZSBhbGxvd3MgeW91IHRvIGhhdmUgYQorICAgICAgY3VzdG9tIGVycm9yIG1lc3NhZ2UgaW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBvbmUuCisKKyAgICAgIFRoaXMgYXR0cmlidXRlIGRlZmF1bHRzIHRvIEZhbHNlLCBtZWFuaW5nIHRoYXQgYSBjdXN0b20gbWVzc2FnZSBwYXNzZWQKKyAgICAgIHRvIGFuIGFzc2VydCBtZXRob2Qgd2lsbCBzaWxlbmNlIHRoZSBub3JtYWwgbWVzc2FnZS4KKworICAgICAgVGhlIGNsYXNzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gaW4gaW5kaXZpZHVhbCB0ZXN0cyBieSBhc3NpZ25pbmcgYW4KKyAgICAgIGluc3RhbmNlIGF0dHJpYnV0ZSB0byBUcnVlIG9yIEZhbHNlIGJlZm9yZSBjYWxsaW5nIHRoZSBhc3NlcnQgbWV0aG9kcy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gYXR0cmlidXRlOjogbWF4RGlmZgorCisgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250cm9scyB0aGUgbWF4aW11bSBsZW5ndGggb2YgZGlmZnMgb3V0cHV0IGJ5IGFzc2VydAorICAgICAgbWV0aG9kcyB0aGF0IHJlcG9ydCBkaWZmcyBvbiBmYWlsdXJlLiBJdCBkZWZhdWx0cyB0byA4MCo4IGNoYXJhY3RlcnMuCisgICAgICBBc3NlcnQgbWV0aG9kcyBhZmZlY3RlZCBieSB0aGlzIGF0dHJpYnV0ZSBhcmUKKyAgICAgIDptZXRoOmBhc3NlcnRTZXF1ZW5jZUVxdWFsYCAoaW5jbHVkaW5nIGFsbCB0aGUgc2VxdWVuY2UgY29tcGFyaXNvbgorICAgICAgbWV0aG9kcyB0aGF0IGRlbGVnYXRlIHRvIGl0KSwgOm1ldGg6YGFzc2VydERpY3RFcXVhbGAgYW5kCisgICAgICA6bWV0aDpgYXNzZXJ0TXVsdGlMaW5lRXF1YWxgLgorCisgICAgICBTZXR0aW5nIGBgbWF4RGlmZmBgIHRvIE5vbmUgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyBtYXhpbXVtIGxlbmd0aCBvZgorICAgICAgZGlmZnMuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIFRlc3RpbmcgZnJhbWV3b3JrcyBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byBjb2xsZWN0IGluZm9ybWF0aW9uIG9uCisgICB0aGUgdGVzdDoKKworCisgICAuLiBtZXRob2Q6OiBjb3VudFRlc3RDYXNlcygpCisKKyAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoaXMgdGVzdCBvYmplY3QuICBGb3IKKyAgICAgIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlcywgdGhpcyB3aWxsIGFsd2F5cyBiZSBgYDFgYC4KKworCisgICAuLiBtZXRob2Q6OiBkZWZhdWx0VGVzdFJlc3VsdCgpCisKKyAgICAgIFJldHVybiBhbiBpbnN0YW5jZSBvZiB0aGUgdGVzdCByZXN1bHQgY2xhc3MgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcworICAgICAgdGVzdCBjYXNlIGNsYXNzIChpZiBubyBvdGhlciByZXN1bHQgaW5zdGFuY2UgaXMgcHJvdmlkZWQgdG8gdGhlCisgICAgICA6bWV0aDpgcnVuYCBtZXRob2QpLgorCisgICAgICBGb3IgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYWx3YXlzIGJlIGFuIGluc3RhbmNlIG9mCisgICAgICA6Y2xhc3M6YFRlc3RSZXN1bHRgOyBzdWJjbGFzc2VzIG9mIDpjbGFzczpgVGVzdENhc2VgIHNob3VsZCBvdmVycmlkZSB0aGlzCisgICAgICBhcyBuZWNlc3NhcnkuCisKKworICAgLi4gbWV0aG9kOjogaWQoKQorCisgICAgICBSZXR1cm4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIHRlc3QgY2FzZS4gIFRoaXMgaXMgdXN1YWxseSB0aGUKKyAgICAgIGZ1bGwgbmFtZSBvZiB0aGUgdGVzdCBtZXRob2QsIGluY2x1ZGluZyB0aGUgbW9kdWxlIGFuZCBjbGFzcyBuYW1lLgorCisKKyAgIC4uIG1ldGhvZDo6IHNob3J0RGVzY3JpcHRpb24oKQorCisgICAgICBSZXR1cm5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIDpjb25zdDpgTm9uZWAgaWYgbm8gZGVzY3JpcHRpb24KKyAgICAgIGhhcyBiZWVuIHByb3ZpZGVkLiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QKKyAgICAgIHJldHVybnMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLCBpZiBhdmFpbGFibGUsCisgICAgICBvciA6Y29uc3Q6YE5vbmVgLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZFR5cGVFcXVhbGl0eUZ1bmModHlwZW9iaiwgZnVuY3Rpb24pCisKKyAgICAgIFJlZ2lzdGVycyBhIHR5cGUgc3BlY2lmaWMgOm1ldGg6YGFzc2VydEVxdWFsYCBlcXVhbGl0eSBjaGVja2luZworICAgICAgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IDptZXRoOmBhc3NlcnRFcXVhbGAgd2hlbiBib3RoIG9iamVjdHMgaXQgaGFzCisgICAgICBiZWVuIGFza2VkIHRvIGNvbXBhcmUgYXJlIGV4YWN0bHkgKnR5cGVvYmoqIChub3Qgc3ViY2xhc3NlcykuCisgICAgICAqZnVuY3Rpb24qIG11c3QgdGFrZSB0d28gcG9zaXRpb25hbCBhcmd1bWVudHMgYW5kIGEgdGhpcmQgbXNnPU5vbmUKKyAgICAgIGtleXdvcmQgYXJndW1lbnQganVzdCBhcyA6bWV0aDpgYXNzZXJ0RXF1YWxgIGRvZXMuICBJdCBtdXN0IHJhaXNlCisgICAgICBgYHNlbGYuZmFpbHVyZUV4Y2VwdGlvbmBgIHdoZW4gaW5lcXVhbGl0eSBiZXR3ZWVuIHRoZSBmaXJzdCB0d28KKyAgICAgIHBhcmFtZXRlcnMgaXMgZGV0ZWN0ZWQuCisKKyAgICAgIE9uZSBnb29kIHVzZSBvZiBjdXN0b20gZXF1YWxpdHkgY2hlY2tpbmcgZnVuY3Rpb25zIGZvciBhIHR5cGUKKyAgICAgIGlzIHRvIHJhaXNlIGBgc2VsZi5mYWlsdXJlRXhjZXB0aW9uYGAgd2l0aCBhbiBlcnJvciBtZXNzYWdlIHVzZWZ1bAorICAgICAgZm9yIGRlYnVnZ2luZyB0aGUgcHJvYmxlbSBieSBleHBsYWluaW5nIHRoZSBpbmVxdWFsaXRpZXMgaW4gZGV0YWlsLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhZGRDbGVhbnVwKGZ1bmN0aW9uWywgKmFyZ3NbLCAqKmt3YXJnc11dKQorCisgICAgICBBZGQgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgOm1ldGg6YHRlYXJEb3duYCB0byBjbGVhbnVwIHJlc291cmNlcworICAgICAgdXNlZCBkdXJpbmcgdGhlIHRlc3QuIEZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBpbiByZXZlcnNlIG9yZGVyIHRvIHRoZQorICAgICAgb3JkZXIgdGhleSBhcmUgYWRkZWQgKExJRk8pLiBUaGV5IGFyZSBjYWxsZWQgd2l0aCBhbnkgYXJndW1lbnRzIGFuZAorICAgICAga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIGludG8gOm1ldGg6YGFkZENsZWFudXBgIHdoZW4gdGhleSBhcmUKKyAgICAgIGFkZGVkLgorCisgICAgICBJZiA6bWV0aDpgc2V0VXBgIGZhaWxzLCBtZWFuaW5nIHRoYXQgOm1ldGg6YHRlYXJEb3duYCBpcyBub3QgY2FsbGVkLAorICAgICAgdGhlbiBhbnkgY2xlYW51cCBmdW5jdGlvbnMgYWRkZWQgd2lsbCBzdGlsbCBiZSBjYWxsZWQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGRvQ2xlYW51cHMoKQorCisgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGFmdGVyIDptZXRoOmB0ZWFyRG93bmAsIG9yCisgICAgICBhZnRlciA6bWV0aDpgc2V0VXBgIGlmIDptZXRoOmBzZXRVcGAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworICAgICAgSXQgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYWxsIHRoZSBjbGVhbnVwIGZ1bmN0aW9ucyBhZGRlZCBieQorICAgICAgOm1ldGg6YGFkZENsZWFudXBgLiBJZiB5b3UgbmVlZCBjbGVhbnVwIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQKKyAgICAgICpwcmlvciogdG8gOm1ldGg6YHRlYXJEb3duYCB0aGVuIHlvdSBjYW4gY2FsbCA6bWV0aDpgZG9DbGVhbnVwc2AKKyAgICAgIHlvdXJzZWxmLgorCisgICAgICA6bWV0aDpgZG9DbGVhbnVwc2AgcG9wcyBtZXRob2RzIG9mZiB0aGUgc3RhY2sgb2YgY2xlYW51cAorICAgICAgZnVuY3Rpb25zIG9uZSBhdCBhIHRpbWUsIHNvIGl0IGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCiAKIC4uIGNsYXNzOjogRnVuY3Rpb25UZXN0Q2FzZSh0ZXN0RnVuY1ssIHNldFVwWywgdGVhckRvd25bLCBkZXNjcmlwdGlvbl1dXSkKIAogICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBwb3J0aW9uIG9mIHRoZSA6Y2xhc3M6YFRlc3RDYXNlYCBpbnRlcmZhY2Ugd2hpY2gKLSAgIGFsbG93cyB0aGUgdGVzdCBydW5uZXIgdG8gZHJpdmUgdGhlIHRlc3QsIGJ1dCBkb2VzIG5vdCBwcm92aWRlIHRoZSBtZXRob2RzIHdoaWNoCi0gICB0ZXN0IGNvZGUgY2FuIHVzZSB0byBjaGVjayBhbmQgcmVwb3J0IGVycm9ycy4gVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSB0ZXN0IGNhc2VzCi0gICB1c2luZyBsZWdhY3kgdGVzdCBjb2RlLCBhbGxvd2luZyBpdCB0byBiZSBpbnRlZ3JhdGVkIGludG8gYSA6bW9kOmB1bml0dGVzdGBcCi0gICAtYmFzZWQgdGVzdCBmcmFtZXdvcmsuCisgICBhbGxvd3MgdGhlIHRlc3QgcnVubmVyIHRvIGRyaXZlIHRoZSB0ZXN0LCBidXQgZG9lcyBub3QgcHJvdmlkZSB0aGUgbWV0aG9kcworICAgd2hpY2ggdGVzdCBjb2RlIGNhbiB1c2UgdG8gY2hlY2sgYW5kIHJlcG9ydCBlcnJvcnMuICBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlCisgICB0ZXN0IGNhc2VzIHVzaW5nIGxlZ2FjeSB0ZXN0IGNvZGUsIGFsbG93aW5nIGl0IHRvIGJlIGludGVncmF0ZWQgaW50byBhCisgICA6bW9kOmB1bml0dGVzdGAtYmFzZWQgdGVzdCBmcmFtZXdvcmsuCiAKIAorLi4gX3Rlc3RzdWl0ZS1vYmplY3RzOgorCitHcm91cGluZyB0ZXN0cworfn5+fn5+fn5+fn5+fn4KKwogLi4gY2xhc3M6OiBUZXN0U3VpdGUoW3Rlc3RzXSkKIAogICAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGFnZ3JlZ2F0aW9uIG9mIGluZGl2aWR1YWwgdGVzdHMgY2FzZXMgYW5kIHRlc3Qgc3VpdGVzLgpAQCAtNDY2LDIwICsxMjg2LDQwNSBAQAogICAgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseS4gQWRkaXRpb25hbCBtZXRob2RzCiAgICBhcmUgcHJvdmlkZWQgdG8gYWRkIHRlc3QgY2FzZXMgYW5kIHN1aXRlcyB0byB0aGUgY29sbGVjdGlvbiBsYXRlciBvbi4KIAorICAgOmNsYXNzOmBUZXN0U3VpdGVgIG9iamVjdHMgYmVoYXZlIG11Y2ggbGlrZSA6Y2xhc3M6YFRlc3RDYXNlYCBvYmplY3RzLCBleGNlcHQKKyAgIHRoZXkgZG8gbm90IGFjdHVhbGx5IGltcGxlbWVudCBhIHRlc3QuICBJbnN0ZWFkLCB0aGV5IGFyZSB1c2VkIHRvIGFnZ3JlZ2F0ZQorICAgdGVzdHMgaW50byBncm91cHMgb2YgdGVzdHMgdGhhdCBzaG91bGQgYmUgcnVuIHRvZ2V0aGVyLiBTb21lIGFkZGl0aW9uYWwKKyAgIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSB0byBhZGQgdGVzdHMgdG8gOmNsYXNzOmBUZXN0U3VpdGVgIGluc3RhbmNlczoKKworCisgICAuLiBtZXRob2Q6OiBUZXN0U3VpdGUuYWRkVGVzdCh0ZXN0KQorCisgICAgICBBZGQgYSA6Y2xhc3M6YFRlc3RDYXNlYCBvciA6Y2xhc3M6YFRlc3RTdWl0ZWAgdG8gdGhlIHN1aXRlLgorCisKKyAgIC4uIG1ldGhvZDo6IFRlc3RTdWl0ZS5hZGRUZXN0cyh0ZXN0cykKKworICAgICAgQWRkIGFsbCB0aGUgdGVzdHMgZnJvbSBhbiBpdGVyYWJsZSBvZiA6Y2xhc3M6YFRlc3RDYXNlYCBhbmQgOmNsYXNzOmBUZXN0U3VpdGVgCisgICAgICBpbnN0YW5jZXMgdG8gdGhpcyB0ZXN0IHN1aXRlLgorCisgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gaXRlcmF0aW5nIG92ZXIgKnRlc3RzKiwgY2FsbGluZyA6bWV0aDpgYWRkVGVzdGAgZm9yCisgICAgICBlYWNoIGVsZW1lbnQuCisKKyAgIDpjbGFzczpgVGVzdFN1aXRlYCBzaGFyZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzIHdpdGggOmNsYXNzOmBUZXN0Q2FzZWA6CisKKworICAgLi4gbWV0aG9kOjogcnVuKHJlc3VsdCkKKworICAgICAgUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8gdGhlCisgICAgICB0ZXN0IHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzICpyZXN1bHQqLiAgTm90ZSB0aGF0IHVubGlrZQorICAgICAgOm1ldGg6YFRlc3RDYXNlLnJ1bmAsIDptZXRoOmBUZXN0U3VpdGUucnVuYCByZXF1aXJlcyB0aGUgcmVzdWx0IG9iamVjdCB0bworICAgICAgYmUgcGFzc2VkIGluLgorCisKKyAgIC4uIG1ldGhvZDo6IGRlYnVnKCkKKworICAgICAgUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSB3aXRob3V0IGNvbGxlY3RpbmcgdGhlCisgICAgICByZXN1bHQuIFRoaXMgYWxsb3dzIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoZSB0ZXN0IHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlCisgICAgICBjYWxsZXIgYW5kIGNhbiBiZSB1c2VkIHRvIHN1cHBvcnQgcnVubmluZyB0ZXN0cyB1bmRlciBhIGRlYnVnZ2VyLgorCisKKyAgIC4uIG1ldGhvZDo6IGNvdW50VGVzdENhc2VzKCkKKworICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhpcyB0ZXN0IG9iamVjdCwgaW5jbHVkaW5nIGFsbAorICAgICAgaW5kaXZpZHVhbCB0ZXN0cyBhbmQgc3ViLXN1aXRlcy4KKworCisgICAuLiBtZXRob2Q6OiBfX2l0ZXJfXygpCisKKyAgICAgIFRlc3RzIGdyb3VwZWQgYnkgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgYXJlIGFsd2F5cyBhY2Nlc3NlZCBieSBpdGVyYXRpb24uCisgICAgICBTdWJjbGFzc2VzIGNhbiBsYXppbHkgcHJvdmlkZSB0ZXN0cyBieSBvdmVycmlkaW5nIDptZXRoOmBfX2l0ZXJfX2AuIE5vdGUKKyAgICAgIHRoYXQgdGhpcyBtZXRob2QgbWF5YmUgY2FsbGVkIHNldmVyYWwgdGltZXMgb24gYSBzaW5nbGUgc3VpdGUKKyAgICAgIChmb3IgZXhhbXBsZSB3aGVuIGNvdW50aW5nIHRlc3RzIG9yIGNvbXBhcmluZyBmb3IgZXF1YWxpdHkpCisgICAgICBzbyB0aGUgdGVzdHMgcmV0dXJuZWQgbXVzdCBiZSB0aGUgc2FtZSBmb3IgcmVwZWF0ZWQgaXRlcmF0aW9ucy4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgICAgIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIDpjbGFzczpgVGVzdFN1aXRlYCBhY2Nlc3NlZCB0ZXN0cyBkaXJlY3RseSByYXRoZXIKKyAgICAgICAgIHRoYW4gdGhyb3VnaCBpdGVyYXRpb24sIHNvIG92ZXJyaWRpbmcgOm1ldGg6YF9faXRlcl9fYCB3YXNuJ3Qgc3VmZmljaWVudAorICAgICAgICAgZm9yIHByb3ZpZGluZyB0ZXN0cy4KKworICAgSW4gdGhlIHR5cGljYWwgdXNhZ2Ugb2YgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgb2JqZWN0LCB0aGUgOm1ldGg6YHJ1bmAgbWV0aG9kCisgICBpcyBpbnZva2VkIGJ5IGEgOmNsYXNzOmBUZXN0UnVubmVyYCByYXRoZXIgdGhhbiBieSB0aGUgZW5kLXVzZXIgdGVzdCBoYXJuZXNzLgorCisKK0xvYWRpbmcgYW5kIHJ1bm5pbmcgdGVzdHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAogLi4gY2xhc3M6OiBUZXN0TG9hZGVyKCkKIAotICAgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0ZXN0cyBhY2NvcmRpbmcgdG8gdmFyaW91cyBjcml0ZXJpYSBhbmQKLSAgIHJldHVybmluZyB0aGVtIHdyYXBwZWQgaW4gYSA6Y2xhc3M6YFRlc3RTdWl0ZWAuIEl0IGNhbiBsb2FkIGFsbCB0ZXN0cyB3aXRoaW4gYQotICAgZ2l2ZW4gbW9kdWxlIG9yIDpjbGFzczpgVGVzdENhc2VgIHN1YmNsYXNzLgorICAgVGhlIDpjbGFzczpgVGVzdExvYWRlcmAgY2xhc3MgaXMgdXNlZCB0byBjcmVhdGUgdGVzdCBzdWl0ZXMgZnJvbSBjbGFzc2VzIGFuZAorICAgbW9kdWxlcy4gIE5vcm1hbGx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzOyB0aGUKKyAgIDptb2Q6YHVuaXR0ZXN0YCBtb2R1bGUgcHJvdmlkZXMgYW4gaW5zdGFuY2UgdGhhdCBjYW4gYmUgc2hhcmVkIGFzCisgICBgYHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyYGAuIFVzaW5nIGEgc3ViY2xhc3Mgb3IgaW5zdGFuY2UsIGhvd2V2ZXIsIGFsbG93cworICAgY3VzdG9taXphdGlvbiBvZiBzb21lIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0aWVzLgorCisgICA6Y2xhc3M6YFRlc3RMb2FkZXJgIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKIAotLi4gY2xhc3M6OiBUZXN0UmVzdWx0KCkKKyAgIC4uIG1ldGhvZDo6IGxvYWRUZXN0c0Zyb21UZXN0Q2FzZSh0ZXN0Q2FzZUNsYXNzKQogCi0gICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY29tcGlsZSBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCB0ZXN0cyBoYXZlIHN1Y2NlZWRlZCBhbmQKLSAgIHdoaWNoIGhhdmUgZmFpbGVkLgorICAgICAgUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgOmNsYXNzOmBUZXN0Q2FzZWBcIC1kZXJpdmVkCisgICAgICA6Y2xhc3M6YHRlc3RDYXNlQ2xhc3NgLgogCiAKKyAgIC4uIG1ldGhvZDo6IGxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKQorCisgICAgICBSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBnaXZlbiBtb2R1bGUuIFRoaXMKKyAgICAgIG1ldGhvZCBzZWFyY2hlcyAqbW9kdWxlKiBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gOmNsYXNzOmBUZXN0Q2FzZWAgYW5kCisgICAgICBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmb3IgZWFjaCB0ZXN0IG1ldGhvZCBkZWZpbmVkIGZvciB0aGUKKyAgICAgIGNsYXNzLgorCisgICAgICAuLiBub3RlOjoKKworICAgICAgICAgV2hpbGUgdXNpbmcgYSBoaWVyYXJjaHkgb2YgOmNsYXNzOmBUZXN0Q2FzZWBcIC1kZXJpdmVkIGNsYXNzZXMgY2FuIGJlCisgICAgICAgICBjb252ZW5pZW50IGluIHNoYXJpbmcgZml4dHVyZXMgYW5kIGhlbHBlciBmdW5jdGlvbnMsIGRlZmluaW5nIHRlc3QKKyAgICAgICAgIG1ldGhvZHMgb24gYmFzZSBjbGFzc2VzIHRoYXQgYXJlIG5vdCBpbnRlbmRlZCB0byBiZSBpbnN0YW50aWF0ZWQKKyAgICAgICAgIGRpcmVjdGx5IGRvZXMgbm90IHBsYXkgd2VsbCB3aXRoIHRoaXMgbWV0aG9kLiAgRG9pbmcgc28sIGhvd2V2ZXIsIGNhbgorICAgICAgICAgYmUgdXNlZnVsIHdoZW4gdGhlIGZpeHR1cmVzIGFyZSBkaWZmZXJlbnQgYW5kIGRlZmluZWQgaW4gc3ViY2xhc3Nlcy4KKworICAgICAgSWYgYSBtb2R1bGUgcHJvdmlkZXMgYSBgYGxvYWRfdGVzdHNgYCBmdW5jdGlvbiBpdCB3aWxsIGJlIGNhbGxlZCB0bworICAgICAgbG9hZCB0aGUgdGVzdHMuIFRoaXMgYWxsb3dzIG1vZHVsZXMgdG8gY3VzdG9taXplIHRlc3QgbG9hZGluZy4KKyAgICAgIFRoaXMgaXMgdGhlIGBsb2FkX3Rlc3RzIHByb3RvY29sYF8uCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICAgICBTdXBwb3J0IGZvciBgYGxvYWRfdGVzdHNgYCBhZGRlZC4KKworCisgICAuLiBtZXRob2Q6OiBsb2FkVGVzdHNGcm9tTmFtZShuYW1lWywgbW9kdWxlXSkKKworICAgICAgUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGdpdmVuIGEgc3RyaW5nIHNwZWNpZmllci4KKworICAgICAgVGhlIHNwZWNpZmllciAqbmFtZSogaXMgYSAiZG90dGVkIG5hbWUiIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvIGEKKyAgICAgIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBhCisgICAgICA6Y2xhc3M6YFRlc3RTdWl0ZWAgaW5zdGFuY2UsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICAgOmNsYXNzOmBUZXN0Q2FzZWAgb3IgOmNsYXNzOmBUZXN0U3VpdGVgIGluc3RhbmNlLiAgVGhlc2UgY2hlY2tzIGFyZQorICAgICAgYXBwbGllZCBpbiB0aGUgb3JkZXIgbGlzdGVkIGhlcmU7IHRoYXQgaXMsIGEgbWV0aG9kIG9uIGEgcG9zc2libGUgdGVzdAorICAgICAgY2FzZSBjbGFzcyB3aWxsIGJlIHBpY2tlZCB1cCBhcyAiYSB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiLAorICAgICAgcmF0aGVyIHRoYW4gImEgY2FsbGFibGUgb2JqZWN0Ii4KKworICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgbW9kdWxlIDptb2Q6YFNhbXBsZVRlc3RzYCBjb250YWluaW5nIGEKKyAgICAgIDpjbGFzczpgVGVzdENhc2VgXCAtZGVyaXZlZCBjbGFzcyA6Y2xhc3M6YFNhbXBsZVRlc3RDYXNlYCB3aXRoIHRocmVlIHRlc3QKKyAgICAgIG1ldGhvZHMgKDptZXRoOmB0ZXN0X29uZWAsIDptZXRoOmB0ZXN0X3R3b2AsIGFuZCA6bWV0aDpgdGVzdF90aHJlZWApLCB0aGUKKyAgICAgIHNwZWNpZmllciBgYCdTYW1wbGVUZXN0cy5TYW1wbGVUZXN0Q2FzZSdgYCB3b3VsZCBjYXVzZSB0aGlzIG1ldGhvZCB0bworICAgICAgcmV0dXJuIGEgc3VpdGUgd2hpY2ggd2lsbCBydW4gYWxsIHRocmVlIHRlc3QgbWV0aG9kcy4gVXNpbmcgdGhlIHNwZWNpZmllcgorICAgICAgYGAnU2FtcGxlVGVzdHMuU2FtcGxlVGVzdENhc2UudGVzdF90d28nYGAgd291bGQgY2F1c2UgaXQgdG8gcmV0dXJuIGEgdGVzdAorICAgICAgc3VpdGUgd2hpY2ggd2lsbCBydW4gb25seSB0aGUgOm1ldGg6YHRlc3RfdHdvYCB0ZXN0IG1ldGhvZC4gVGhlIHNwZWNpZmllcgorICAgICAgY2FuIHJlZmVyIHRvIG1vZHVsZXMgYW5kIHBhY2thZ2VzIHdoaWNoIGhhdmUgbm90IGJlZW4gaW1wb3J0ZWQ7IHRoZXkgd2lsbAorICAgICAgYmUgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdC4KKworICAgICAgVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzICpuYW1lKiByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gKm1vZHVsZSouCisKKworICAgLi4gbWV0aG9kOjogbG9hZFRlc3RzRnJvbU5hbWVzKG5hbWVzWywgbW9kdWxlXSkKKworICAgICAgU2ltaWxhciB0byA6bWV0aDpgbG9hZFRlc3RzRnJvbU5hbWVgLCBidXQgdGFrZXMgYSBzZXF1ZW5jZSBvZiBuYW1lcyByYXRoZXIKKyAgICAgIHRoYW4gYSBzaW5nbGUgbmFtZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSB0ZXN0IHN1aXRlIHdoaWNoIHN1cHBvcnRzIGFsbAorICAgICAgdGhlIHRlc3RzIGRlZmluZWQgZm9yIGVhY2ggbmFtZS4KKworCisgICAuLiBtZXRob2Q6OiBnZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MpCisKKyAgICAgIFJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluICp0ZXN0Q2FzZUNsYXNzKjsKKyAgICAgIHRoaXMgc2hvdWxkIGJlIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBUZXN0Q2FzZWAuCisKKworICAgLi4gbWV0aG9kOjogZGlzY292ZXIoc3RhcnRfZGlyLCBwYXR0ZXJuPSd0ZXN0Ki5weScsIHRvcF9sZXZlbF9kaXI9Tm9uZSkKKworICAgICAgRmluZCBhbmQgcmV0dXJuIGFsbCB0ZXN0IG1vZHVsZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHN0YXJ0IGRpcmVjdG9yeSwKKyAgICAgIHJlY3Vyc2luZyBpbnRvIHN1YmRpcmVjdG9yaWVzIHRvIGZpbmQgdGhlbS4gT25seSB0ZXN0IGZpbGVzIHRoYXQgbWF0Y2gKKyAgICAgICpwYXR0ZXJuKiB3aWxsIGJlIGxvYWRlZC4gKFVzaW5nIHNoZWxsIHN0eWxlIHBhdHRlcm4gbWF0Y2hpbmcuKSBPbmx5CisgICAgICBtb2R1bGUgbmFtZXMgdGhhdCBhcmUgaW1wb3J0YWJsZSAoaS5lLiBhcmUgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXJzKSB3aWxsCisgICAgICBiZSBsb2FkZWQuCisKKyAgICAgIEFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcCBsZXZlbCBvZiB0aGUgcHJvamVjdC4gSWYKKyAgICAgIHRoZSBzdGFydCBkaXJlY3RvcnkgaXMgbm90IHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IHRoZW4gdGhlIHRvcCBsZXZlbAorICAgICAgZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkuCisKKyAgICAgIElmIGltcG9ydGluZyBhIG1vZHVsZSBmYWlscywgZm9yIGV4YW1wbGUgZHVlIHRvIGEgc3ludGF4IGVycm9yLCB0aGVuIHRoaXMKKyAgICAgIHdpbGwgYmUgcmVjb3JkZWQgYXMgYSBzaW5nbGUgZXJyb3IgYW5kIGRpc2NvdmVyeSB3aWxsIGNvbnRpbnVlLgorCisgICAgICBJZiBhIHRlc3QgcGFja2FnZSBuYW1lIChkaXJlY3Rvcnkgd2l0aCA6ZmlsZTpgX19pbml0X18ucHlgKSBtYXRjaGVzIHRoZQorICAgICAgcGF0dGVybiB0aGVuIHRoZSBwYWNrYWdlIHdpbGwgYmUgY2hlY2tlZCBmb3IgYSBgYGxvYWRfdGVzdHNgYAorICAgICAgZnVuY3Rpb24uIElmIHRoaXMgZXhpc3RzIHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCAqbG9hZGVyKiwgKnRlc3RzKiwKKyAgICAgICpwYXR0ZXJuKi4KKworICAgICAgSWYgbG9hZF90ZXN0cyBleGlzdHMgdGhlbiBkaXNjb3ZlcnkgZG9lcyAqbm90KiByZWN1cnNlIGludG8gdGhlIHBhY2thZ2UsCisgICAgICBgYGxvYWRfdGVzdHNgYCBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyBhbGwgdGVzdHMgaW4gdGhlIHBhY2thZ2UuCisKKyAgICAgIFRoZSBwYXR0ZXJuIGlzIGRlbGliZXJhdGVseSBub3Qgc3RvcmVkIGFzIGEgbG9hZGVyIGF0dHJpYnV0ZSBzbyB0aGF0CisgICAgICBwYWNrYWdlcyBjYW4gY29udGludWUgZGlzY292ZXJ5IHRoZW1zZWx2ZXMuICp0b3BfbGV2ZWxfZGlyKiBpcyBzdG9yZWQgc28KKyAgICAgIGBgbG9hZF90ZXN0c2BgIGRvZXMgbm90IG5lZWQgdG8gcGFzcyB0aGlzIGFyZ3VtZW50IGluIHRvCisgICAgICBgYGxvYWRlci5kaXNjb3ZlcigpYGAuCisKKyAgICAgICpzdGFydF9kaXIqIGNhbiBiZSBhIGRvdHRlZCBtb2R1bGUgbmFtZSBhcyB3ZWxsIGFzIGEgZGlyZWN0b3J5LgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworICAgVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG9mIGEgOmNsYXNzOmBUZXN0TG9hZGVyYCBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgYnkKKyAgIHN1YmNsYXNzaW5nIG9yIGFzc2lnbm1lbnQgb24gYW4gaW5zdGFuY2U6CisKKworICAgLi4gYXR0cmlidXRlOjogdGVzdE1ldGhvZFByZWZpeAorCisgICAgICBTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgdGVzdAorICAgICAgbWV0aG9kcy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgJ3Rlc3QnYGAuCisKKyAgICAgIFRoaXMgYWZmZWN0cyA6bWV0aDpgZ2V0VGVzdENhc2VOYW1lc2AgYW5kIGFsbCB0aGUgOm1ldGg6YGxvYWRUZXN0c0Zyb21cKmAKKyAgICAgIG1ldGhvZHMuCisKKworICAgLi4gYXR0cmlidXRlOjogc29ydFRlc3RNZXRob2RzVXNpbmcKKworICAgICAgRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICAgOm1ldGg6YGdldFRlc3RDYXNlTmFtZXNgIGFuZCBhbGwgdGhlIDptZXRoOmBsb2FkVGVzdHNGcm9tXCpgIG1ldGhvZHMuIFRoZQorICAgICAgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgYnVpbHQtaW4gOmZ1bmM6YGNtcGAgZnVuY3Rpb247IHRoZSBhdHRyaWJ1dGUgY2FuIGFsc28KKyAgICAgIGJlIHNldCB0byA6Y29uc3Q6YE5vbmVgIHRvIGRpc2FibGUgdGhlIHNvcnQuCisKKworICAgLi4gYXR0cmlidXRlOjogc3VpdGVDbGFzcworCisgICAgICBDYWxsYWJsZSBvYmplY3QgdGhhdCBjb25zdHJ1Y3RzIGEgdGVzdCBzdWl0ZSBmcm9tIGEgbGlzdCBvZiB0ZXN0cy4gTm8KKyAgICAgIG1ldGhvZHMgb24gdGhlIHJlc3VsdGluZyBvYmplY3QgYXJlIG5lZWRlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZQorICAgICAgOmNsYXNzOmBUZXN0U3VpdGVgIGNsYXNzLgorCisgICAgICBUaGlzIGFmZmVjdHMgYWxsIHRoZSA6bWV0aDpgbG9hZFRlc3RzRnJvbVwqYCBtZXRob2RzLgorCisKKy4uIGNsYXNzOjogVGVzdFJlc3VsdAorCisgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY29tcGlsZSBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCB0ZXN0cyBoYXZlIHN1Y2NlZWRlZAorICAgYW5kIHdoaWNoIGhhdmUgZmFpbGVkLgorCisgICBBIDpjbGFzczpgVGVzdFJlc3VsdGAgb2JqZWN0IHN0b3JlcyB0aGUgcmVzdWx0cyBvZiBhIHNldCBvZiB0ZXN0cy4gIFRoZQorICAgOmNsYXNzOmBUZXN0Q2FzZWAgYW5kIDpjbGFzczpgVGVzdFN1aXRlYCBjbGFzc2VzIGVuc3VyZSB0aGF0IHJlc3VsdHMgYXJlCisgICBwcm9wZXJseSByZWNvcmRlZDsgdGVzdCBhdXRob3JzIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IHJlY29yZGluZyB0aGUKKyAgIG91dGNvbWUgb2YgdGVzdHMuCisKKyAgIFRlc3RpbmcgZnJhbWV3b3JrcyBidWlsdCBvbiB0b3Agb2YgOm1vZDpgdW5pdHRlc3RgIG1heSB3YW50IGFjY2VzcyB0byB0aGUKKyAgIDpjbGFzczpgVGVzdFJlc3VsdGAgb2JqZWN0IGdlbmVyYXRlZCBieSBydW5uaW5nIGEgc2V0IG9mIHRlc3RzIGZvciByZXBvcnRpbmcKKyAgIHB1cnBvc2VzOyBhIDpjbGFzczpgVGVzdFJlc3VsdGAgaW5zdGFuY2UgaXMgcmV0dXJuZWQgYnkgdGhlCisgICA6bWV0aDpgVGVzdFJ1bm5lci5ydW5gIG1ldGhvZCBmb3IgdGhpcyBwdXJwb3NlLgorCisgICA6Y2xhc3M6YFRlc3RSZXN1bHRgIGluc3RhbmNlcyBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyB0aGF0IHdpbGwgYmUgb2YKKyAgIGludGVyZXN0IHdoZW4gaW5zcGVjdGluZyB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGEgc2V0IG9mIHRlc3RzOgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGVycm9ycworCisgICAgICBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZXMgYW5kIHN0cmluZ3MKKyAgICAgIGhvbGRpbmcgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2ggcmFpc2VkIGFuCisgICAgICB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjIKKyAgICAgICAgIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQgb2YgOmZ1bmM6YHN5cy5leGNfaW5mb2AgcmVzdWx0cy4KKworCisgICAuLiBhdHRyaWJ1dGU6OiBmYWlsdXJlcworCisgICAgICBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZXMgYW5kIHN0cmluZ3MKKyAgICAgIGhvbGRpbmcgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hlcmUgYSBmYWlsdXJlCisgICAgICB3YXMgZXhwbGljaXRseSBzaWduYWxsZWQgdXNpbmcgdGhlIDptZXRoOmBUZXN0Q2FzZS5mYWlsXCpgIG9yCisgICAgICA6bWV0aDpgVGVzdENhc2UuYXNzZXJ0XCpgIG1ldGhvZHMuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4yCisgICAgICAgICBDb250YWlucyBmb3JtYXR0ZWQgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIDpmdW5jOmBzeXMuZXhjX2luZm9gIHJlc3VsdHMuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNraXBwZWQKKworICAgICAgQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzIGFuZCBzdHJpbmdzCisgICAgICBob2xkaW5nIHRoZSByZWFzb24gZm9yIHNraXBwaW5nIHRoZSB0ZXN0LgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworICAgLi4gYXR0cmlidXRlOjogZXhwZWN0ZWRGYWlsdXJlcworCisgICAgICBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZXMgYW5kIHN0cmluZ3MKKyAgICAgIGhvbGRpbmcgZm9ybWF0dGVkIHRyYWNlYmFja3MuICBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYW4gZXhwZWN0ZWQgZmFpbHVyZQorICAgICAgb2YgdGhlIHRlc3QgY2FzZS4KKworICAgLi4gYXR0cmlidXRlOjogdW5leHBlY3RlZFN1Y2Nlc3NlcworCisgICAgICBBIGxpc3QgY29udGFpbmluZyA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZXMgdGhhdCB3ZXJlIG1hcmtlZCBhcyBleHBlY3RlZAorICAgICAgZmFpbHVyZXMsIGJ1dCBzdWNjZWVkZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNob3VsZFN0b3AKKworICAgICAgU2V0IHRvIGBgVHJ1ZWBgIHdoZW4gdGhlIGV4ZWN1dGlvbiBvZiB0ZXN0cyBzaG91bGQgc3RvcCBieSA6bWV0aDpgc3RvcGAuCisKKworICAgLi4gYXR0cmlidXRlOjogdGVzdHNSdW4KKworICAgICAgVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGJ1ZmZlcgorCisgICAgICBJZiBzZXQgdG8gdHJ1ZSwgYGBzeXMuc3Rkb3V0YGAgYW5kIGBgc3lzLnN0ZGVycmBgIHdpbGwgYmUgYnVmZmVyZWQgaW4gYmV0d2VlbgorICAgICAgOm1ldGg6YHN0YXJ0VGVzdGAgYW5kIDptZXRoOmBzdG9wVGVzdGAgYmVpbmcgY2FsbGVkLiBDb2xsZWN0ZWQgb3V0cHV0IHdpbGwKKyAgICAgIG9ubHkgYmUgZWNob2VkIG9udG8gdGhlIHJlYWwgYGBzeXMuc3Rkb3V0YGAgYW5kIGBgc3lzLnN0ZGVycmBgIGlmIHRoZSB0ZXN0CisgICAgICBmYWlscyBvciBlcnJvcnMuIEFueSBvdXRwdXQgaXMgYWxzbyBhdHRhY2hlZCB0byB0aGUgZmFpbHVyZSAvIGVycm9yIG1lc3NhZ2UuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZhaWxmYXN0CisKKyAgICAgIElmIHNldCB0byB0cnVlIDptZXRoOmBzdG9wYCB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgZmlyc3QgZmFpbHVyZSBvciBlcnJvciwKKyAgICAgIGhhbHRpbmcgdGhlIHRlc3QgcnVuLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiB3YXNTdWNjZXNzZnVsKCkKKworICAgICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsIG90aGVyd2lzZSByZXR1cm5zCisgICAgICA6Y29uc3Q6YEZhbHNlYC4KKworCisgICAuLiBtZXRob2Q6OiBzdG9wKCkKKworICAgICAgVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB0byBzaWduYWwgdGhhdCB0aGUgc2V0IG9mIHRlc3RzIGJlaW5nIHJ1biBzaG91bGQKKyAgICAgIGJlIGFib3J0ZWQgYnkgc2V0dGluZyB0aGUgOmF0dHI6YHNob3VsZFN0b3BgIGF0dHJpYnV0ZSB0byA6Y29uc3Q6YFRydWVgLgorICAgICAgOmNsYXNzOmBUZXN0UnVubmVyYCBvYmplY3RzIHNob3VsZCByZXNwZWN0IHRoaXMgZmxhZyBhbmQgcmV0dXJuIHdpdGhvdXQKKyAgICAgIHJ1bm5pbmcgYW55IGFkZGl0aW9uYWwgdGVzdHMuCisKKyAgICAgIEZvciBleGFtcGxlLCB0aGlzIGZlYXR1cmUgaXMgdXNlZCBieSB0aGUgOmNsYXNzOmBUZXh0VGVzdFJ1bm5lcmAgY2xhc3MgdG8KKyAgICAgIHN0b3AgdGhlIHRlc3QgZnJhbWV3b3JrIHdoZW4gdGhlIHVzZXIgc2lnbmFscyBhbiBpbnRlcnJ1cHQgZnJvbSB0aGUKKyAgICAgIGtleWJvYXJkLiAgSW50ZXJhY3RpdmUgdG9vbHMgd2hpY2ggcHJvdmlkZSA6Y2xhc3M6YFRlc3RSdW5uZXJgCisgICAgICBpbXBsZW1lbnRhdGlvbnMgY2FuIHVzZSB0aGlzIGluIGEgc2ltaWxhciBtYW5uZXIuCisKKyAgIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvZiB0aGUgOmNsYXNzOmBUZXN0UmVzdWx0YCBjbGFzcyBhcmUgdXNlZCB0byBtYWludGFpbgorICAgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW5kIG1heSBiZSBleHRlbmRlZCBpbiBzdWJjbGFzc2VzIHRvIHN1cHBvcnQKKyAgIGFkZGl0aW9uYWwgcmVwb3J0aW5nIHJlcXVpcmVtZW50cy4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBidWlsZGluZworICAgdG9vbHMgd2hpY2ggc3VwcG9ydCBpbnRlcmFjdGl2ZSByZXBvcnRpbmcgd2hpbGUgdGVzdHMgYXJlIGJlaW5nIHJ1bi4KKworCisgICAuLiBtZXRob2Q6OiBzdGFydFRlc3QodGVzdCkKKworICAgICAgQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSAqdGVzdCogaXMgYWJvdXQgdG8gYmUgcnVuLgorCisgICAuLiBtZXRob2Q6OiBzdG9wVGVzdCh0ZXN0KQorCisgICAgICBDYWxsZWQgYWZ0ZXIgdGhlIHRlc3QgY2FzZSAqdGVzdCogaGFzIGJlZW4gZXhlY3V0ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlCisgICAgICBvdXRjb21lLgorCisgICAuLiBtZXRob2Q6OiBzdGFydFRlc3RSdW4odGVzdCkKKworICAgICAgQ2FsbGVkIG9uY2UgYmVmb3JlIGFueSB0ZXN0cyBhcmUgZXhlY3V0ZWQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IHN0b3BUZXN0UnVuKHRlc3QpCisKKyAgICAgIENhbGxlZCBvbmNlIGFmdGVyIGFsbCB0ZXN0cyBhcmUgZXhlY3V0ZWQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFkZEVycm9yKHRlc3QsIGVycikKKworICAgICAgQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSAqdGVzdCogcmFpc2VzIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uICplcnIqIGlzIGEKKyAgICAgIHR1cGxlIG9mIHRoZSBmb3JtIHJldHVybmVkIGJ5IDpmdW5jOmBzeXMuZXhjX2luZm9gOiBgYCh0eXBlLCB2YWx1ZSwKKyAgICAgIHRyYWNlYmFjaylgYC4KKworICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYXBwZW5kcyBhIHR1cGxlIGBgKHRlc3QsIGZvcm1hdHRlZF9lcnIpYGAgdG8KKyAgICAgIHRoZSBpbnN0YW5jZSdzIDphdHRyOmBlcnJvcnNgIGF0dHJpYnV0ZSwgd2hlcmUgKmZvcm1hdHRlZF9lcnIqIGlzIGEKKyAgICAgIGZvcm1hdHRlZCB0cmFjZWJhY2sgZGVyaXZlZCBmcm9tICplcnIqLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZEZhaWx1cmUodGVzdCwgZXJyKQorCisgICAgICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlICp0ZXN0KiBzaWduYWxzIGEgZmFpbHVyZS4gKmVyciogaXMgYSB0dXBsZSBvZgorICAgICAgdGhlIGZvcm0gcmV0dXJuZWQgYnkgOmZ1bmM6YHN5cy5leGNfaW5mb2A6IGBgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spYGAuCisKKyAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFwcGVuZHMgYSB0dXBsZSBgYCh0ZXN0LCBmb3JtYXR0ZWRfZXJyKWBgIHRvCisgICAgICB0aGUgaW5zdGFuY2UncyA6YXR0cjpgZmFpbHVyZXNgIGF0dHJpYnV0ZSwgd2hlcmUgKmZvcm1hdHRlZF9lcnIqIGlzIGEKKyAgICAgIGZvcm1hdHRlZCB0cmFjZWJhY2sgZGVyaXZlZCBmcm9tICplcnIqLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZFN1Y2Nlc3ModGVzdCkKKworICAgICAgQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSAqdGVzdCogc3VjY2VlZHMuCisKKyAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KKworCisgICAuLiBtZXRob2Q6OiBhZGRTa2lwKHRlc3QsIHJlYXNvbikKKworICAgICAgQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSAqdGVzdCogaXMgc2tpcHBlZC4gICpyZWFzb24qIGlzIHRoZSByZWFzb24gdGhlCisgICAgICB0ZXN0IGdhdmUgZm9yIHNraXBwaW5nLgorCisgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhcHBlbmRzIGEgdHVwbGUgYGAodGVzdCwgcmVhc29uKWBgIHRvIHRoZQorICAgICAgaW5zdGFuY2UncyA6YXR0cjpgc2tpcHBlZGAgYXR0cmlidXRlLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZEV4cGVjdGVkRmFpbHVyZSh0ZXN0LCBlcnIpCisKKyAgICAgIENhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgKnRlc3QqIGZhaWxzLCBidXQgd2FzIG1hcmtlZCB3aXRoIHRoZQorICAgICAgOmZ1bmM6YGV4cGVjdGVkRmFpbHVyZWAgZGVjb3JhdG9yLgorCisgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhcHBlbmRzIGEgdHVwbGUgYGAodGVzdCwgZm9ybWF0dGVkX2VycilgYCB0bworICAgICAgdGhlIGluc3RhbmNlJ3MgOmF0dHI6YGV4cGVjdGVkRmFpbHVyZXNgIGF0dHJpYnV0ZSwgd2hlcmUgKmZvcm1hdHRlZF9lcnIqCisgICAgICBpcyBhIGZvcm1hdHRlZCB0cmFjZWJhY2sgZGVyaXZlZCBmcm9tICplcnIqLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHRlc3QpCisKKyAgICAgIENhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgKnRlc3QqIHdhcyBtYXJrZWQgd2l0aCB0aGUKKyAgICAgIDpmdW5jOmBleHBlY3RlZEZhaWx1cmVgIGRlY29yYXRvciwgYnV0IHN1Y2NlZWRlZC4KKworICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYXBwZW5kcyB0aGUgdGVzdCB0byB0aGUgaW5zdGFuY2UncworICAgICAgOmF0dHI6YHVuZXhwZWN0ZWRTdWNjZXNzZXNgIGF0dHJpYnV0ZS4KKworLi4gY2xhc3M6OiBUZXh0VGVzdFJlc3VsdChzdHJlYW0sIGRlc2NyaXB0aW9ucywgdmVyYm9zaXR5KQorCisgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6Y2xhc3M6YFRlc3RSZXN1bHRgIHVzZWQgYnkgdGhlCisgICAgOmNsYXNzOmBUZXh0VGVzdFJ1bm5lcmAuCisKKyAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKyAgICAgICAgVGhpcyBjbGFzcyB3YXMgcHJldmlvdXNseSBuYW1lZCBgYF9UZXh0VGVzdFJlc3VsdGBgLiBUaGUgb2xkIG5hbWUgc3RpbGwKKyAgICAgICAgZXhpc3RzIGFzIGFuIGFsaWFzIGJ1dCBpcyBkZXByZWNhdGVkLgorCiAuLiBkYXRhOjogZGVmYXVsdFRlc3RMb2FkZXIKIAogICAgSW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgVGVzdExvYWRlcmAgY2xhc3MgaW50ZW5kZWQgdG8gYmUgc2hhcmVkLiAgSWYgbm8KQEAgLTQ4NywxNCArMTY5MiwyNyBAQAogICAgaW5zdGVhZCBvZiByZXBlYXRlZGx5IGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMuCiAKIAotLi4gY2xhc3M6OiBUZXh0VGVzdFJ1bm5lcihbc3RyZWFtWywgZGVzY3JpcHRpb25zWywgdmVyYm9zaXR5XV1dKQorLi4gY2xhc3M6OiBUZXh0VGVzdFJ1bm5lcihbc3RyZWFtWywgZGVzY3JpcHRpb25zWywgdmVyYm9zaXR5XSwgW3Jlc3VsdGNsYXNzXV1dKQogCiAgICBBIGJhc2ljIHRlc3QgcnVubmVyIGltcGxlbWVudGF0aW9uIHdoaWNoIHByaW50cyByZXN1bHRzIG9uIHN0YW5kYXJkIGVycm9yLiAgSXQKICAgIGhhcyBhIGZldyBjb25maWd1cmFibGUgcGFyYW1ldGVycywgYnV0IGlzIGVzc2VudGlhbGx5IHZlcnkgc2ltcGxlLiAgR3JhcGhpY2FsCiAgICBhcHBsaWNhdGlvbnMgd2hpY2ggcnVuIHRlc3Qgc3VpdGVzIHNob3VsZCBwcm92aWRlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbnMuCiAKKyAgIC4uIG1ldGhvZDo6IF9tYWtlUmVzdWx0KCkKIAotLi4gZnVuY3Rpb246OiBtYWluKFttb2R1bGVbLCBkZWZhdWx0VGVzdFssIGFyZ3ZbLCB0ZXN0UnVubmVyWywgdGVzdExvYWRlcl1dXV1dKQorICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgYGBUZXN0UmVzdWx0YGAgdXNlZCBieSA6bWV0aDpgcnVuYC4KKyAgICAgIEl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZGlyZWN0bHksIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBpbgorICAgICAgc3ViY2xhc3NlcyB0byBwcm92aWRlIGEgY3VzdG9tIGBgVGVzdFJlc3VsdGBgLgorCisgICAgICBgYF9tYWtlUmVzdWx0KClgYCBpbnN0YW50aWF0ZXMgdGhlIGNsYXNzIG9yIGNhbGxhYmxlIHBhc3NlZCBpbiB0aGUKKyAgICAgIGBgVGV4dFRlc3RSdW5uZXJgYCBjb25zdHJ1Y3RvciBhcyB0aGUgYGByZXN1bHRjbGFzc2BgIGFyZ3VtZW50LiBJdAorICAgICAgZGVmYXVsdHMgdG8gOmNsYXNzOmBUZXh0VGVzdFJlc3VsdGAgaWYgbm8gYGByZXN1bHRjbGFzc2BgIGlzIHByb3ZpZGVkLgorICAgICAgVGhlIHJlc3VsdCBjbGFzcyBpcyBpbnN0YW50aWF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czo6CisKKyAgICAgICAgICAgIHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkKKworCisuLiBmdW5jdGlvbjo6IG1haW4oW21vZHVsZVssIGRlZmF1bHRUZXN0WywgYXJndlssIHRlc3RSdW5uZXJbLCB0ZXN0TG9hZGVyWywgZXhpdFssIHZlcmJvc2l0eVssIGZhaWxmYXN0WywgY2F0Y2hicmVha1ssYnVmZmVyXV1dXV1dXV1dXSkKIAogICAgQSBjb21tYW5kLWxpbmUgcHJvZ3JhbSB0aGF0IHJ1bnMgYSBzZXQgb2YgdGVzdHM7IHRoaXMgaXMgcHJpbWFyaWx5IGZvciBtYWtpbmcKICAgIHRlc3QgbW9kdWxlcyBjb252ZW5pZW50bHkgZXhlY3V0YWJsZS4gIFRoZSBzaW1wbGVzdCB1c2UgZm9yIHRoaXMgZnVuY3Rpb24gaXMgdG8KQEAgLTUwMyw0NDYgKzE3MjEsMjQxIEBACiAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICAgICAgIHVuaXR0ZXN0Lm1haW4oKQogCisgICBZb3UgY2FuIHJ1biB0ZXN0cyB3aXRoIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYnkgcGFzc2luZyBpbiB0aGUgdmVyYm9zaXR5CisgICBhcmd1bWVudDo6CisKKyAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKKwogICAgVGhlICp0ZXN0UnVubmVyKiBhcmd1bWVudCBjYW4gZWl0aGVyIGJlIGEgdGVzdCBydW5uZXIgY2xhc3Mgb3IgYW4gYWxyZWFkeQotICAgY3JlYXRlZCBpbnN0YW5jZSBvZiBpdC4KKyAgIGNyZWF0ZWQgaW5zdGFuY2Ugb2YgaXQuIEJ5IGRlZmF1bHQgYGBtYWluYGAgY2FsbHMgOmZ1bmM6YHN5cy5leGl0YCB3aXRoCisgICBhbiBleGl0IGNvZGUgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHRlc3RzIHJ1bi4KIAotSW4gc29tZSBjYXNlcywgdGhlIGV4aXN0aW5nIHRlc3RzIG1heSBoYXZlIGJlZW4gd3JpdHRlbiB1c2luZyB0aGUgOm1vZDpgZG9jdGVzdGAKLW1vZHVsZS4gIElmIHNvLCB0aGF0IG1vZHVsZSBwcm92aWRlcyBhICA6Y2xhc3M6YERvY1Rlc3RTdWl0ZWAgY2xhc3MgdGhhdCBjYW4KLWF1dG9tYXRpY2FsbHkgYnVpbGQgOmNsYXNzOmB1bml0dGVzdC5UZXN0U3VpdGVgIGluc3RhbmNlcyBmcm9tIHRoZSBleGlzdGluZwotOm1vZDpgZG9jdGVzdGBcIC1iYXNlZCB0ZXN0cy4KKyAgIGBgbWFpbmBgIHN1cHBvcnRzIGJlaW5nIHVzZWQgZnJvbSB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgYnkgcGFzc2luZyBpbiB0aGUKKyAgIGFyZ3VtZW50IGBgZXhpdD1GYWxzZWBgLiBUaGlzIGRpc3BsYXlzIHRoZSByZXN1bHQgb24gc3RhbmRhcmQgb3V0cHV0IHdpdGhvdXQKKyAgIGNhbGxpbmcgOmZ1bmM6YHN5cy5leGl0YDo6CiAKLS4uIHZlcnNpb25hZGRlZDo6IDIuMworICAgICAgPj4+IGZyb20gdW5pdHRlc3QgaW1wb3J0IG1haW4KKyAgICAgID4+PiBtYWluKG1vZHVsZT0ndGVzdF9tb2R1bGUnLCBleGl0PUZhbHNlKQogCisgICBUaGUgYGBmYWlsZmFzdGBgLCBgYGNhdGNoYnJlYWtgYCBhbmQgYGBidWZmZXJgYCBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUKKyAgIGVmZmVjdCBhcyB0aGUgc2FtZS1uYW1lIGBjb21tYW5kLWxpbmUgb3B0aW9uc2BfLgogCi0uLiBfdGVzdGNhc2Utb2JqZWN0czoKKyAgIENhbGxpbmcgYGBtYWluYGAgYWN0dWFsbHkgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYGBUZXN0UHJvZ3JhbWBgIGNsYXNzLgorICAgVGhpcyBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdHMgcnVuIGFzIHRoZSBgYHJlc3VsdGBgIGF0dHJpYnV0ZS4KIAotVGVzdENhc2UgT2JqZWN0cwotLS0tLS0tLS0tLS0tLS0tLQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFRoZSBgYGV4aXRgYCwgYGB2ZXJib3NpdHlgYCwgYGBmYWlsZmFzdGBgLCBgYGNhdGNoYnJlYWtgYCBhbmQgYGBidWZmZXJgYAorICAgICAgcGFyYW1ldGVycyB3ZXJlIGFkZGVkLgogCi1FYWNoIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlIHJlcHJlc2VudHMgYSBzaW5nbGUgdGVzdCwgYnV0IGVhY2ggY29uY3JldGUKLXN1YmNsYXNzIG1heSBiZSB1c2VkIHRvIGRlZmluZSBtdWx0aXBsZSB0ZXN0cyAtLS0gdGhlIGNvbmNyZXRlIGNsYXNzIHJlcHJlc2VudHMKLWEgc2luZ2xlIHRlc3QgZml4dHVyZS4gIFRoZSBmaXh0dXJlIGlzIGNyZWF0ZWQgYW5kIGNsZWFuZWQgdXAgZm9yIGVhY2ggdGVzdAotY2FzZS4KIAotOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzIHByb3ZpZGUgdGhyZWUgZ3JvdXBzIG9mIG1ldGhvZHM6IG9uZSBncm91cCB1c2VkIHRvCi1ydW4gdGhlIHRlc3QsIGFub3RoZXIgdXNlZCBieSB0aGUgdGVzdCBpbXBsZW1lbnRhdGlvbiB0byBjaGVjayBjb25kaXRpb25zIGFuZAotcmVwb3J0IGZhaWx1cmVzLCBhbmQgc29tZSBpbnF1aXJ5IG1ldGhvZHMgYWxsb3dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRlc3QKLWl0c2VsZiB0byBiZSBnYXRoZXJlZC4KK2xvYWRfdGVzdHMgUHJvdG9jb2wKKyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotTWV0aG9kcyBpbiB0aGUgZmlyc3QgZ3JvdXAgKHJ1bm5pbmcgdGhlIHRlc3QpIGFyZToKKy4uIHZlcnNpb25hZGRlZDo6IDIuNwogCitNb2R1bGVzIG9yIHBhY2thZ2VzIGNhbiBjdXN0b21pemUgaG93IHRlc3RzIGFyZSBsb2FkZWQgZnJvbSB0aGVtIGR1cmluZyBub3JtYWwKK3Rlc3QgcnVucyBvciB0ZXN0IGRpc2NvdmVyeSBieSBpbXBsZW1lbnRpbmcgYSBmdW5jdGlvbiBjYWxsZWQgYGBsb2FkX3Rlc3RzYGAuCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLnNldFVwKCkKK0lmIGEgdGVzdCBtb2R1bGUgZGVmaW5lcyBgYGxvYWRfdGVzdHNgYCBpdCB3aWxsIGJlIGNhbGxlZCBieQorOm1ldGg6YFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZWAgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czo6CiAKLSAgIE1ldGhvZCBjYWxsZWQgdG8gcHJlcGFyZSB0aGUgdGVzdCBmaXh0dXJlLiAgVGhpcyBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlCi0gICBjYWxsaW5nIHRoZSB0ZXN0IG1ldGhvZDsgYW55IGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhpcyBtZXRob2Qgd2lsbCBiZSBjb25zaWRlcmVkCi0gICBhbiBlcnJvciByYXRoZXIgdGhhbiBhIHRlc3QgZmFpbHVyZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgorICAgIGxvYWRfdGVzdHMobG9hZGVyLCBzdGFuZGFyZF90ZXN0cywgTm9uZSkKIAorSXQgc2hvdWxkIHJldHVybiBhIDpjbGFzczpgVGVzdFN1aXRlYC4KIAotLi4gbWV0aG9kOjogVGVzdENhc2UudGVhckRvd24oKQorKmxvYWRlciogaXMgdGhlIGluc3RhbmNlIG9mIDpjbGFzczpgVGVzdExvYWRlcmAgZG9pbmcgdGhlIGxvYWRpbmcuCisqc3RhbmRhcmRfdGVzdHMqIGFyZSB0aGUgdGVzdHMgdGhhdCB3b3VsZCBiZSBsb2FkZWQgYnkgZGVmYXVsdCBmcm9tIHRoZQorbW9kdWxlLiBJdCBpcyBjb21tb24gZm9yIHRlc3QgbW9kdWxlcyB0byBvbmx5IHdhbnQgdG8gYWRkIG9yIHJlbW92ZSB0ZXN0cworZnJvbSB0aGUgc3RhbmRhcmQgc2V0IG9mIHRlc3RzLgorVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHVzZWQgd2hlbiBsb2FkaW5nIHBhY2thZ2VzIGFzIHBhcnQgb2YgdGVzdCBkaXNjb3ZlcnkuCiAKLSAgIE1ldGhvZCBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRlc3QgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCBhbmQgdGhlIHJlc3VsdAotICAgcmVjb3JkZWQuICBUaGlzIGlzIGNhbGxlZCBldmVuIGlmIHRoZSB0ZXN0IG1ldGhvZCByYWlzZWQgYW4gZXhjZXB0aW9uLCBzbyB0aGUKLSAgIGltcGxlbWVudGF0aW9uIGluIHN1YmNsYXNzZXMgbWF5IG5lZWQgdG8gYmUgcGFydGljdWxhcmx5IGNhcmVmdWwgYWJvdXQgY2hlY2tpbmcKLSAgIGludGVybmFsIHN0YXRlLiAgQW55IGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhpcyBtZXRob2Qgd2lsbCBiZSBjb25zaWRlcmVkIGFuIGVycm9yCi0gICByYXRoZXIgdGhhbiBhIHRlc3QgZmFpbHVyZS4gIFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhlCi0gICA6bWV0aDpgc2V0VXBgIHN1Y2NlZWRzLCByZWdhcmRsZXNzIG9mIHRoZSBvdXRjb21lIG9mIHRoZSB0ZXN0IG1ldGhvZC4gVGhlCi0gICBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KK0EgdHlwaWNhbCBgYGxvYWRfdGVzdHNgYCBmdW5jdGlvbiB0aGF0IGxvYWRzIHRlc3RzIGZyb20gYSBzcGVjaWZpYyBzZXQgb2YKKzpjbGFzczpgVGVzdENhc2VgIGNsYXNzZXMgbWF5IGxvb2sgbGlrZTo6CiAKKyAgICB0ZXN0X2Nhc2VzID0gKFRlc3RDYXNlMSwgVGVzdENhc2UyLCBUZXN0Q2FzZTMpCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLnJ1bihbcmVzdWx0XSkKKyAgICBkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICAgICAgc3VpdGUgPSBUZXN0U3VpdGUoKQorICAgICAgICBmb3IgdGVzdF9jbGFzcyBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgdGVzdHMgPSBsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKHRlc3RfY2xhc3MpCisgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0cyh0ZXN0cykKKyAgICAgICAgcmV0dXJuIHN1aXRlCiAKLSAgIFJ1biB0aGUgdGVzdCwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8gdGhlIHRlc3QgcmVzdWx0IG9iamVjdCBwYXNzZWQgYXMKLSAgICpyZXN1bHQqLiAgSWYgKnJlc3VsdCogaXMgb21pdHRlZCBvciA6Y29uc3Q6YE5vbmVgLCBhIHRlbXBvcmFyeSByZXN1bHQgb2JqZWN0IGlzCi0gICBjcmVhdGVkIChieSBjYWxsaW5nIHRoZSA6bWV0aDpgZGVmYXVsdFRlc3RDYXNlYCBtZXRob2QpIGFuZCB1c2VkOyB0aGlzIHJlc3VsdAotICAgb2JqZWN0IGlzIG5vdCByZXR1cm5lZCB0byA6bWV0aDpgcnVuYCdzIGNhbGxlci4KK0lmIGRpc2NvdmVyeSBpcyBzdGFydGVkLCBlaXRoZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lIG9yIGJ5IGNhbGxpbmcKKzptZXRoOmBUZXN0TG9hZGVyLmRpc2NvdmVyYCwgd2l0aCBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGEgcGFja2FnZQorbmFtZSB0aGVuIHRoZSBwYWNrYWdlIDpmaWxlOmBfX2luaXRfXy5weWAgd2lsbCBiZSBjaGVja2VkIGZvciBgYGxvYWRfdGVzdHNgYC4KIAotICAgVGhlIHNhbWUgZWZmZWN0IG1heSBiZSBoYWQgYnkgc2ltcGx5IGNhbGxpbmcgdGhlIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlLgorLi4gbm90ZTo6CiAKKyAgIFRoZSBkZWZhdWx0IHBhdHRlcm4gaXMgJ3Rlc3QqLnB5Jy4gVGhpcyBtYXRjaGVzIGFsbCBQeXRob24gZmlsZXMKKyAgIHRoYXQgc3RhcnQgd2l0aCAndGVzdCcgYnV0ICp3b24ndCogbWF0Y2ggYW55IHRlc3QgZGlyZWN0b3JpZXMuCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLmRlYnVnKCkKKyAgIEEgcGF0dGVybiBsaWtlICd0ZXN0Kicgd2lsbCBtYXRjaCB0ZXN0IHBhY2thZ2VzIGFzIHdlbGwgYXMKKyAgIG1vZHVsZXMuCiAKLSAgIFJ1biB0aGUgdGVzdCB3aXRob3V0IGNvbGxlY3RpbmcgdGhlIHJlc3VsdC4gIFRoaXMgYWxsb3dzIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5Ci0gICB0aGUgdGVzdCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIsIGFuZCBjYW4gYmUgdXNlZCB0byBzdXBwb3J0IHJ1bm5pbmcKLSAgIHRlc3RzIHVuZGVyIGEgZGVidWdnZXIuCitJZiB0aGUgcGFja2FnZSA6ZmlsZTpgX19pbml0X18ucHlgIGRlZmluZXMgYGBsb2FkX3Rlc3RzYGAgdGhlbiBpdCB3aWxsIGJlCitjYWxsZWQgYW5kIGRpc2NvdmVyeSBub3QgY29udGludWVkIGludG8gdGhlIHBhY2thZ2UuIGBgbG9hZF90ZXN0c2BgCitpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czo6CiAKLVRoZSB0ZXN0IGNvZGUgY2FuIHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzIHRvIGNoZWNrIGZvciBhbmQgcmVwb3J0Ci1mYWlsdXJlcy4KKyAgICBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pCiAKK1RoaXMgc2hvdWxkIHJldHVybiBhIDpjbGFzczpgVGVzdFN1aXRlYCByZXByZXNlbnRpbmcgYWxsIHRoZSB0ZXN0cworZnJvbSB0aGUgcGFja2FnZS4gKGBgc3RhbmRhcmRfdGVzdHNgYCB3aWxsIG9ubHkgY29udGFpbiB0ZXN0cworY29sbGVjdGVkIGZyb20gOmZpbGU6YF9faW5pdF9fLnB5YC4pCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLmFzc2VydF8oZXhwclssIG1zZ10pCi0gICAgICAgICAgICBUZXN0Q2FzZS5mYWlsVW5sZXNzKGV4cHJbLCBtc2ddKQotICAgICAgICAgICAgVGVzdENhc2UuYXNzZXJ0VHJ1ZShleHByWywgbXNnXSkKK0JlY2F1c2UgdGhlIHBhdHRlcm4gaXMgcGFzc2VkIGludG8gYGBsb2FkX3Rlc3RzYGAgdGhlIHBhY2thZ2UgaXMgZnJlZSB0bworY29udGludWUgKGFuZCBwb3RlbnRpYWxseSBtb2RpZnkpIHRlc3QgZGlzY292ZXJ5LiBBICdkbyBub3RoaW5nJworYGBsb2FkX3Rlc3RzYGAgZnVuY3Rpb24gZm9yIGEgdGVzdCBwYWNrYWdlIHdvdWxkIGxvb2sgbGlrZTo6CiAKLSAgIFNpZ25hbCBhIHRlc3QgZmFpbHVyZSBpZiAqZXhwciogaXMgZmFsc2U7IHRoZSBleHBsYW5hdGlvbiBmb3IgdGhlIGVycm9yIHdpbGwgYmUKLSAgICptc2cqIGlmIGdpdmVuLCBvdGhlcndpc2UgaXQgd2lsbCBiZSA6Y29uc3Q6YE5vbmVgLgorICAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAjIHRvcCBsZXZlbCBkaXJlY3RvcnkgY2FjaGVkIG9uIGxvYWRlciBpbnN0YW5jZQorICAgICAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICAgICAgcGFja2FnZV90ZXN0cyA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXI9dGhpc19kaXIsIHBhdHRlcm49cGF0dGVybikKKyAgICAgICAgc3RhbmRhcmRfdGVzdHMuYWRkVGVzdHMocGFja2FnZV90ZXN0cykKKyAgICAgICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCiAKIAotLi4gbWV0aG9kOjogVGVzdENhc2UuYXNzZXJ0RXF1YWwoZmlyc3QsIHNlY29uZFssIG1zZ10pCi0gICAgICAgICAgICBUZXN0Q2FzZS5mYWlsVW5sZXNzRXF1YWwoZmlyc3QsIHNlY29uZFssIG1zZ10pCitDbGFzcyBhbmQgTW9kdWxlIEZpeHR1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgIFRlc3QgdGhhdCAqZmlyc3QqIGFuZCAqc2Vjb25kKiBhcmUgZXF1YWwuICBJZiB0aGUgdmFsdWVzIGRvIG5vdCBjb21wYXJlIGVxdWFsLAotICAgdGhlIHRlc3Qgd2lsbCBmYWlsIHdpdGggdGhlIGV4cGxhbmF0aW9uIGdpdmVuIGJ5ICptc2cqLCBvciA6Y29uc3Q6YE5vbmVgLiAgTm90ZQotICAgdGhhdCB1c2luZyA6bWV0aDpgZmFpbFVubGVzc0VxdWFsYCBpbXByb3ZlcyB1cG9uIGRvaW5nIHRoZSBjb21wYXJpc29uIGFzIHRoZQotICAgZmlyc3QgcGFyYW1ldGVyIHRvIDptZXRoOmBmYWlsVW5sZXNzYDogIHRoZSBkZWZhdWx0IHZhbHVlIGZvciAqbXNnKiBjYW4gYmUKLSAgIGNvbXB1dGVkIHRvIGluY2x1ZGUgcmVwcmVzZW50YXRpb25zIG9mIGJvdGggKmZpcnN0KiBhbmQgKnNlY29uZCouCitDbGFzcyBhbmQgbW9kdWxlIGxldmVsIGZpeHR1cmVzIGFyZSBpbXBsZW1lbnRlZCBpbiA6Y2xhc3M6YFRlc3RTdWl0ZWAuIFdoZW4KK3RoZSB0ZXN0IHN1aXRlIGVuY291bnRlcnMgYSB0ZXN0IGZyb20gYSBuZXcgY2xhc3MgdGhlbiA6bWV0aDpgdGVhckRvd25DbGFzc2AKK2Zyb20gdGhlIHByZXZpb3VzIGNsYXNzIChpZiB0aGVyZSBpcyBvbmUpIGlzIGNhbGxlZCwgZm9sbG93ZWQgYnkKKzptZXRoOmBzZXRVcENsYXNzYCBmcm9tIHRoZSBuZXcgY2xhc3MuCiAKK1NpbWlsYXJseSBpZiBhIHRlc3QgaXMgZnJvbSBhIGRpZmZlcmVudCBtb2R1bGUgZnJvbSB0aGUgcHJldmlvdXMgdGVzdCB0aGVuCitgYHRlYXJEb3duTW9kdWxlYGAgZnJvbSB0aGUgcHJldmlvdXMgbW9kdWxlIGlzIHJ1biwgZm9sbG93ZWQgYnkKK2Bgc2V0VXBNb2R1bGVgYCBmcm9tIHRoZSBuZXcgbW9kdWxlLgogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5hc3NlcnROb3RFcXVhbChmaXJzdCwgc2Vjb25kWywgbXNnXSkKLSAgICAgICAgICAgIFRlc3RDYXNlLmZhaWxJZkVxdWFsKGZpcnN0LCBzZWNvbmRbLCBtc2ddKQorQWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIHJ1biB0aGUgZmluYWwgYGB0ZWFyRG93bkNsYXNzYGAgYW5kCitgYHRlYXJEb3duTW9kdWxlYGAgYXJlIHJ1bi4KIAotICAgVGVzdCB0aGF0ICpmaXJzdCogYW5kICpzZWNvbmQqIGFyZSBub3QgZXF1YWwuICBJZiB0aGUgdmFsdWVzIGRvIGNvbXBhcmUgZXF1YWwsCi0gICB0aGUgdGVzdCB3aWxsIGZhaWwgd2l0aCB0aGUgZXhwbGFuYXRpb24gZ2l2ZW4gYnkgKm1zZyosIG9yIDpjb25zdDpgTm9uZWAuICBOb3RlCi0gICB0aGF0IHVzaW5nIDptZXRoOmBmYWlsSWZFcXVhbGAgaW1wcm92ZXMgdXBvbiBkb2luZyB0aGUgY29tcGFyaXNvbiBhcyB0aGUgZmlyc3QKLSAgIHBhcmFtZXRlciB0byA6bWV0aDpgZmFpbFVubGVzc2AgaXMgdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgKm1zZyogY2FuIGJlCi0gICBjb21wdXRlZCB0byBpbmNsdWRlIHJlcHJlc2VudGF0aW9ucyBvZiBib3RoICpmaXJzdCogYW5kICpzZWNvbmQqLgorTm90ZSB0aGF0IHNoYXJlZCBmaXh0dXJlcyBkbyBub3QgcGxheSB3ZWxsIHdpdGggW3BvdGVudGlhbF0gZmVhdHVyZXMgbGlrZSB0ZXN0CitwYXJhbGxlbGl6YXRpb24gYW5kIHRoZXkgYnJlYWsgdGVzdCBpc29sYXRpb24uIFRoZXkgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlLgogCitUaGUgZGVmYXVsdCBvcmRlcmluZyBvZiB0ZXN0cyBjcmVhdGVkIGJ5IHRoZSB1bml0dGVzdCB0ZXN0IGxvYWRlcnMgaXMgdG8gZ3JvdXAKK2FsbCB0ZXN0cyBmcm9tIHRoZSBzYW1lIG1vZHVsZXMgYW5kIGNsYXNzZXMgdG9nZXRoZXIuIFRoaXMgd2lsbCBsZWFkIHRvCitgYHNldFVwQ2xhc3NgYCAvIGBgc2V0VXBNb2R1bGVgYCAoZXRjKSBiZWluZyBjYWxsZWQgZXhhY3RseSBvbmNlIHBlciBjbGFzcyBhbmQKK21vZHVsZS4gSWYgeW91IHJhbmRvbWl6ZSB0aGUgb3JkZXIsIHNvIHRoYXQgdGVzdHMgZnJvbSBkaWZmZXJlbnQgbW9kdWxlcyBhbmQKK2NsYXNzZXMgYXJlIGFkamFjZW50IHRvIGVhY2ggb3RoZXIsIHRoZW4gdGhlc2Ugc2hhcmVkIGZpeHR1cmUgZnVuY3Rpb25zIG1heSBiZQorY2FsbGVkIG11bHRpcGxlIHRpbWVzIGluIGEgc2luZ2xlIHRlc3QgcnVuLgogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbChmaXJzdCwgc2Vjb25kWywgcGxhY2VzWywgbXNnXV0pCi0gICAgICAgICAgICBUZXN0Q2FzZS5mYWlsVW5sZXNzQWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZFssIHBsYWNlc1ssIG1zZ11dKQorU2hhcmVkIGZpeHR1cmVzIGFyZSBub3QgaW50ZW5kZWQgdG8gd29yayB3aXRoIHN1aXRlcyB3aXRoIG5vbi1zdGFuZGFyZAorb3JkZXJpbmcuIEEgYGBCYXNlVGVzdFN1aXRlYGAgc3RpbGwgZXhpc3RzIGZvciBmcmFtZXdvcmtzIHRoYXQgZG9uJ3Qgd2FudCB0bworc3VwcG9ydCBzaGFyZWQgZml4dHVyZXMuCiAKLSAgIFRlc3QgdGhhdCAqZmlyc3QqIGFuZCAqc2Vjb25kKiBhcmUgYXBwcm94aW1hdGVseSBlcXVhbCBieSBjb21wdXRpbmcgdGhlCi0gICBkaWZmZXJlbmNlLCByb3VuZGluZyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgKnBsYWNlcyogKGRlZmF1bHQgNyksCi0gICBhbmQgY29tcGFyaW5nIHRvIHplcm8uCi0gICBOb3RlIHRoYXQgY29tcGFyaW5nIGEgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGlzIG5vdCB0aGUgc2FtZSBhcwotICAgY29tcGFyaW5nIGEgZ2l2ZW4gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cy4gSWYgdGhlIHZhbHVlcyBkbyBub3QgY29tcGFyZQotICAgZXF1YWwsIHRoZSB0ZXN0IHdpbGwgZmFpbCB3aXRoIHRoZSBleHBsYW5hdGlvbiBnaXZlbiBieSAqbXNnKiwgb3IgOmNvbnN0OmBOb25lYC4KK0lmIHRoZXJlIGFyZSBhbnkgZXhjZXB0aW9ucyByYWlzZWQgZHVyaW5nIG9uZSBvZiB0aGUgc2hhcmVkIGZpeHR1cmUgZnVuY3Rpb25zCit0aGUgdGVzdCBpcyByZXBvcnRlZCBhcyBhbiBlcnJvci4gQmVjYXVzZSB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIHRlc3QKK2luc3RhbmNlIGFuIGBgX0Vycm9ySG9sZGVyYGAgb2JqZWN0ICh0aGF0IGhhcyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgYQorOmNsYXNzOmBUZXN0Q2FzZWApIGlzIGNyZWF0ZWQgdG8gcmVwcmVzZW50IHRoZSBlcnJvci4gSWYgeW91IGFyZSBqdXN0IHVzaW5nCit0aGUgc3RhbmRhcmQgdW5pdHRlc3QgdGVzdCBydW5uZXIgdGhlbiB0aGlzIGRldGFpbCBkb2Vzbid0IG1hdHRlciwgYnV0IGlmIHlvdQorYXJlIGEgZnJhbWV3b3JrIGF1dGhvciBpdCBtYXkgYmUgcmVsZXZhbnQuCiAKIAotLi4gbWV0aG9kOjogVGVzdENhc2UuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZFssIHBsYWNlc1ssIG1zZ11dKQotICAgICAgICAgICAgVGVzdENhc2UuZmFpbElmQWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZFssIHBsYWNlc1ssIG1zZ11dKQorc2V0VXBDbGFzcyBhbmQgdGVhckRvd25DbGFzcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi0gICBUZXN0IHRoYXQgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIG5vdCBhcHByb3hpbWF0ZWx5IGVxdWFsIGJ5IGNvbXB1dGluZyB0aGUKLSAgIGRpZmZlcmVuY2UsIHJvdW5kaW5nIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbCAqcGxhY2VzKiAoZGVmYXVsdCA3KSwKLSAgIGFuZCBjb21wYXJpbmcgdG8gemVyby4KLSAgIE5vdGUgdGhhdCBjb21wYXJpbmcgYSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgaXMgbm90IHRoZSBzYW1lIGFzCi0gICBjb21wYXJpbmcgYSBnaXZlbiBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzLiBJZiB0aGUgdmFsdWVzIGRvIG5vdCBjb21wYXJlCi0gICBlcXVhbCwgdGhlIHRlc3Qgd2lsbCBmYWlsIHdpdGggdGhlIGV4cGxhbmF0aW9uIGdpdmVuIGJ5ICptc2cqLCBvciA6Y29uc3Q6YE5vbmVgLgorVGhlc2UgbXVzdCBiZSBpbXBsZW1lbnRlZCBhcyBjbGFzcyBtZXRob2RzOjoKIAorICAgIGltcG9ydCB1bml0dGVzdAogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5hc3NlcnRSYWlzZXMoZXhjZXB0aW9uLCBjYWxsYWJsZSwgLi4uKQotICAgICAgICAgICAgVGVzdENhc2UuZmFpbFVubGVzc1JhaXNlcyhleGNlcHRpb24sIGNhbGxhYmxlLCAuLi4pCisgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgY2xzLl9jb25uZWN0aW9uID0gY3JlYXRlRXhwZW5zaXZlQ29ubmVjdGlvbk9iamVjdCgpCiAKLSAgIFRlc3QgdGhhdCBhbiBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gKmNhbGxhYmxlKiBpcyBjYWxsZWQgd2l0aCBhbnkgcG9zaXRpb25hbAotICAgb3Iga2V5d29yZCBhcmd1bWVudHMgdGhhdCBhcmUgYWxzbyBwYXNzZWQgdG8gOm1ldGg6YGFzc2VydFJhaXNlc2AuICBUaGUgdGVzdAotICAgcGFzc2VzIGlmICpleGNlcHRpb24qIGlzIHJhaXNlZCwgaXMgYW4gZXJyb3IgaWYgYW5vdGhlciBleGNlcHRpb24gaXMgcmFpc2VkLCBvcgotICAgZmFpbHMgaWYgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4gIFRvIGNhdGNoIGFueSBvZiBhIGdyb3VwIG9mIGV4Y2VwdGlvbnMsIGEgdHVwbGUKLSAgIGNvbnRhaW5pbmcgdGhlIGV4Y2VwdGlvbiBjbGFzc2VzIG1heSBiZSBwYXNzZWQgYXMgKmV4Y2VwdGlvbiouCisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgY2xzLl9jb25uZWN0aW9uLmRlc3Ryb3koKQogCitJZiB5b3Ugd2FudCB0aGUgYGBzZXRVcENsYXNzYGAgYW5kIGBgdGVhckRvd25DbGFzc2BgIG9uIGJhc2UgY2xhc3NlcyBjYWxsZWQKK3RoZW4geW91IG11c3QgY2FsbCB1cCB0byB0aGVtIHlvdXJzZWxmLiBUaGUgaW1wbGVtZW50YXRpb25zIGluCis6Y2xhc3M6YFRlc3RDYXNlYCBhcmUgZW1wdHkuCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLmZhaWxJZihleHByWywgbXNnXSkKLSAgICAgICAgICAgIFRlc3RDYXNlLmFzc2VydEZhbHNlKGV4cHJbLCBtc2ddKQorSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBkdXJpbmcgYSBgYHNldFVwQ2xhc3NgYCB0aGVuIHRoZSB0ZXN0cyBpbiB0aGUgY2xhc3MKK2FyZSBub3QgcnVuIGFuZCB0aGUgYGB0ZWFyRG93bkNsYXNzYGAgaXMgbm90IHJ1bi4gU2tpcHBlZCBjbGFzc2VzIHdpbGwgbm90CitoYXZlIGBgc2V0VXBDbGFzc2BgIG9yIGBgdGVhckRvd25DbGFzc2BgIHJ1bi4gSWYgdGhlIGV4Y2VwdGlvbiBpcyBhCitgYFNraXBUZXN0YGAgZXhjZXB0aW9uIHRoZW4gdGhlIGNsYXNzIHdpbGwgYmUgcmVwb3J0ZWQgYXMgaGF2aW5nIGJlZW4gc2tpcHBlZAoraW5zdGVhZCBvZiBhcyBhbiBlcnJvci4KIAotICAgVGhlIGludmVyc2Ugb2YgdGhlIDptZXRoOmBmYWlsVW5sZXNzYCBtZXRob2QgaXMgdGhlIDptZXRoOmBmYWlsSWZgIG1ldGhvZC4gIFRoaXMKLSAgIHNpZ25hbHMgYSB0ZXN0IGZhaWx1cmUgaWYgKmV4cHIqIGlzIHRydWUsIHdpdGggKm1zZyogb3IgOmNvbnN0OmBOb25lYCBmb3IgdGhlCi0gICBlcnJvciBtZXNzYWdlLgogCitzZXRVcE1vZHVsZSBhbmQgdGVhckRvd25Nb2R1bGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5mYWlsKFttc2ddKQorVGhlc2Ugc2hvdWxkIGJlIGltcGxlbWVudGVkIGFzIGZ1bmN0aW9uczo6CiAKLSAgIFNpZ25hbHMgYSB0ZXN0IGZhaWx1cmUgdW5jb25kaXRpb25hbGx5LCB3aXRoICptc2cqIG9yIDpjb25zdDpgTm9uZWAgZm9yIHRoZQotICAgZXJyb3IgbWVzc2FnZS4KKyAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgY3JlYXRlQ29ubmVjdGlvbigpCiAKKyAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgY2xvc2VDb25uZWN0aW9uKCkKIAotLi4gYXR0cmlidXRlOjogVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbgorSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpbiBhIGBgc2V0VXBNb2R1bGVgYCB0aGVuIG5vbmUgb2YgdGhlIHRlc3RzIGluIHRoZQorbW9kdWxlIHdpbGwgYmUgcnVuIGFuZCB0aGUgYGB0ZWFyRG93bk1vZHVsZWBgIHdpbGwgbm90IGJlIHJ1bi4gSWYgdGhlIGV4Y2VwdGlvbiBpcyBhCitgYFNraXBUZXN0YGAgZXhjZXB0aW9uIHRoZW4gdGhlIG1vZHVsZSB3aWxsIGJlIHJlcG9ydGVkIGFzIGhhdmluZyBiZWVuIHNraXBwZWQKK2luc3RlYWQgb2YgYXMgYW4gZXJyb3IuCiAKLSAgIFRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSA6bWV0aDpgdGVzdGAgbWV0aG9kLiAgSWYKLSAgIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0byBjYXJyeQotICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbiBvcmRlciB0byAicGxheSBmYWlyIgotICAgd2l0aCB0aGUgZnJhbWV3b3JrLiAgVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMKLSAgIDpleGM6YEFzc2VydGlvbkVycm9yYC4KIAotVGVzdGluZyBmcmFtZXdvcmtzIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBtZXRob2RzIHRvIGNvbGxlY3QgaW5mb3JtYXRpb24gb24gdGhlCi10ZXN0OgorU2lnbmFsIEhhbmRsaW5nCistLS0tLS0tLS0tLS0tLS0KIAorVGhlIDpvcHRpb246YC1jLy0tY2F0Y2ggPHVuaXR0ZXN0IC1jPmAgY29tbWFuZC1saW5lIG9wdGlvbiB0byB1bml0dGVzdCwKK2Fsb25nIHdpdGggdGhlIGBgY2F0Y2hicmVha2BgIHBhcmFtZXRlciB0byA6ZnVuYzpgdW5pdHRlc3QubWFpbigpYCwgcHJvdmlkZQorbW9yZSBmcmllbmRseSBoYW5kbGluZyBvZiBjb250cm9sLUMgZHVyaW5nIGEgdGVzdCBydW4uIFdpdGggY2F0Y2ggYnJlYWsKK2JlaGF2aW9yIGVuYWJsZWQgY29udHJvbC1DIHdpbGwgYWxsb3cgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRlc3QgdG8gY29tcGxldGUsCithbmQgdGhlIHRlc3QgcnVuIHdpbGwgdGhlbiBlbmQgYW5kIHJlcG9ydCBhbGwgdGhlIHJlc3VsdHMgc28gZmFyLiBBIHNlY29uZAorY29udHJvbC1jIHdpbGwgcmFpc2UgYSA6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgaW4gdGhlIHVzdWFsIHdheS4KIAotLi4gbWV0aG9kOjogVGVzdENhc2UuY291bnRUZXN0Q2FzZXMoKQorVGhlIGNvbnRyb2wtYyBoYW5kbGluZyBzaWduYWwgaGFuZGxlciBhdHRlbXB0cyB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIGNvZGUgb3IKK3Rlc3RzIHRoYXQgaW5zdGFsbCB0aGVpciBvd24gOmNvbnN0OmBzaWduYWwuU0lHSU5UYCBoYW5kbGVyLiBJZiB0aGUgYGB1bml0dGVzdGBgCitoYW5kbGVyIGlzIGNhbGxlZCBidXQgKmlzbid0KiB0aGUgaW5zdGFsbGVkIDpjb25zdDpgc2lnbmFsLlNJR0lOVGAgaGFuZGxlciwKK2kuZS4gaXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIHN5c3RlbSB1bmRlciB0ZXN0IGFuZCBkZWxlZ2F0ZWQgdG8sIHRoZW4gaXQKK2NhbGxzIHRoZSBkZWZhdWx0IGhhbmRsZXIuIFRoaXMgd2lsbCBub3JtYWxseSBiZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYnkgY29kZQordGhhdCByZXBsYWNlcyBhbiBpbnN0YWxsZWQgaGFuZGxlciBhbmQgZGVsZWdhdGVzIHRvIGl0LiBGb3IgaW5kaXZpZHVhbCB0ZXN0cwordGhhdCBuZWVkIGBgdW5pdHRlc3RgYCBjb250cm9sLWMgaGFuZGxpbmcgZGlzYWJsZWQgdGhlIDpmdW5jOmByZW1vdmVIYW5kbGVyYAorZGVjb3JhdG9yIGNhbiBiZSB1c2VkLgogCi0gICBSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGlzIHRlc3Qgb2JqZWN0LiAgRm9yCi0gICA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUgYGAxYGAuCitUaGVyZSBhcmUgYSBmZXcgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGZyYW1ld29yayBhdXRob3JzIHRvIGVuYWJsZSBjb250cm9sLWMKK2hhbmRsaW5nIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRlc3QgZnJhbWV3b3Jrcy4KIAorLi4gZnVuY3Rpb246OiBpbnN0YWxsSGFuZGxlcigpCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLmRlZmF1bHRUZXN0UmVzdWx0KCkKKyAgIEluc3RhbGwgdGhlIGNvbnRyb2wtYyBoYW5kbGVyLiBXaGVuIGEgOmNvbnN0OmBzaWduYWwuU0lHSU5UYCBpcyByZWNlaXZlZAorICAgKHVzdWFsbHkgaW4gcmVzcG9uc2UgdG8gdGhlIHVzZXIgcHJlc3NpbmcgY29udHJvbC1jKSBhbGwgcmVnaXN0ZXJlZCByZXN1bHRzCisgICBoYXZlIDptZXRoOmB+VGVzdFJlc3VsdC5zdG9wYCBjYWxsZWQuCiAKLSAgIFJldHVybiBhbiBpbnN0YW5jZSBvZiB0aGUgdGVzdCByZXN1bHQgY2xhc3MgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcyB0ZXN0Ci0gICBjYXNlIGNsYXNzIChpZiBubyBvdGhlciByZXN1bHQgaW5zdGFuY2UgaXMgcHJvdmlkZWQgdG8gdGhlIDptZXRoOmBydW5gIG1ldGhvZCkuCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAotICAgRm9yIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlcywgdGhpcyB3aWxsIGFsd2F5cyBiZSBhbiBpbnN0YW5jZSBvZgotICAgOmNsYXNzOmBUZXN0UmVzdWx0YDsgIHN1YmNsYXNzZXMgb2YgOmNsYXNzOmBUZXN0Q2FzZWAgc2hvdWxkIG92ZXJyaWRlIHRoaXMgYXMKLSAgIG5lY2Vzc2FyeS4KKy4uIGZ1bmN0aW9uOjogcmVnaXN0ZXJSZXN1bHQocmVzdWx0KQogCisgICBSZWdpc3RlciBhIDpjbGFzczpgVGVzdFJlc3VsdGAgb2JqZWN0IGZvciBjb250cm9sLWMgaGFuZGxpbmcuIFJlZ2lzdGVyaW5nIGEKKyAgIHJlc3VsdCBzdG9yZXMgYSB3ZWFrIHJlZmVyZW5jZSB0byBpdCwgc28gaXQgZG9lc24ndCBwcmV2ZW50IHRoZSByZXN1bHQgZnJvbQorICAgYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLmlkKCkKKyAgIFJlZ2lzdGVyaW5nIGEgOmNsYXNzOmBUZXN0UmVzdWx0YCBvYmplY3QgaGFzIG5vIHNpZGUtZWZmZWN0cyBpZiBjb250cm9sLWMKKyAgIGhhbmRsaW5nIGlzIG5vdCBlbmFibGVkLCBzbyB0ZXN0IGZyYW1ld29ya3MgY2FuIHVuY29uZGl0aW9uYWxseSByZWdpc3RlcgorICAgYWxsIHJlc3VsdHMgdGhleSBjcmVhdGUgaW5kZXBlbmRlbnRseSBvZiB3aGV0aGVyIG9yIG5vdCBoYW5kbGluZyBpcyBlbmFibGVkLgogCi0gICBSZXR1cm4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIHRlc3QgY2FzZS4gIFRoaXMgaXMgdXN1YWxseSB0aGUgZnVsbAotICAgbmFtZSBvZiB0aGUgdGVzdCBtZXRob2QsIGluY2x1ZGluZyB0aGUgbW9kdWxlIGFuZCBjbGFzcyBuYW1lLgorICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CiAKKy4uIGZ1bmN0aW9uOjogcmVtb3ZlUmVzdWx0KHJlc3VsdCkKIAotLi4gbWV0aG9kOjogVGVzdENhc2Uuc2hvcnREZXNjcmlwdGlvbigpCisgICBSZW1vdmUgYSByZWdpc3RlcmVkIHJlc3VsdC4gT25jZSBhIHJlc3VsdCBoYXMgYmVlbiByZW1vdmVkIHRoZW4KKyAgIDptZXRoOmB+VGVzdFJlc3VsdC5zdG9wYCB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQgb24gdGhhdCByZXN1bHQgb2JqZWN0IGluCisgICByZXNwb25zZSB0byBhIGNvbnRyb2wtYy4KIAotICAgUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciA6Y29uc3Q6YE5vbmVgIGlmIG5vIGRlc2NyaXB0aW9uCi0gICBoYXMgYmVlbiBwcm92aWRlZC4gIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0Ci0gICBsaW5lIG9mIHRoZSB0ZXN0IG1ldGhvZCdzIGRvY3N0cmluZywgaWYgYXZhaWxhYmxlLCBvciA6Y29uc3Q6YE5vbmVgLgotCi0KLS4uIF90ZXN0c3VpdGUtb2JqZWN0czoKLQotVGVzdFN1aXRlIE9iamVjdHMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTpjbGFzczpgVGVzdFN1aXRlYCBvYmplY3RzIGJlaGF2ZSBtdWNoIGxpa2UgOmNsYXNzOmBUZXN0Q2FzZWAgb2JqZWN0cywgZXhjZXB0Ci10aGV5IGRvIG5vdCBhY3R1YWxseSBpbXBsZW1lbnQgYSB0ZXN0LiAgSW5zdGVhZCwgdGhleSBhcmUgdXNlZCB0byBhZ2dyZWdhdGUKLXRlc3RzIGludG8gZ3JvdXBzIG9mIHRlc3RzIHRoYXQgc2hvdWxkIGJlIHJ1biB0b2dldGhlci4gU29tZSBhZGRpdGlvbmFsIG1ldGhvZHMKLWFyZSBhdmFpbGFibGUgdG8gYWRkIHRlc3RzIHRvIDpjbGFzczpgVGVzdFN1aXRlYCBpbnN0YW5jZXM6Ci0KLQotLi4gbWV0aG9kOjogVGVzdFN1aXRlLmFkZFRlc3QodGVzdCkKLQotICAgQWRkIGEgOmNsYXNzOmBUZXN0Q2FzZWAgb3IgOmNsYXNzOmBUZXN0U3VpdGVgIHRvIHRoZSBzdWl0ZS4KLQotCi0uLiBtZXRob2Q6OiBUZXN0U3VpdGUuYWRkVGVzdHModGVzdHMpCi0KLSAgIEFkZCBhbGwgdGhlIHRlc3RzIGZyb20gYW4gaXRlcmFibGUgb2YgOmNsYXNzOmBUZXN0Q2FzZWAgYW5kIDpjbGFzczpgVGVzdFN1aXRlYAotICAgaW5zdGFuY2VzIHRvIHRoaXMgdGVzdCBzdWl0ZS4KLQotICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGl0ZXJhdGluZyBvdmVyICp0ZXN0cyosIGNhbGxpbmcgOm1ldGg6YGFkZFRlc3RgIGZvciBlYWNoCi0gICBlbGVtZW50LgotCi06Y2xhc3M6YFRlc3RTdWl0ZWAgc2hhcmVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB3aXRoIDpjbGFzczpgVGVzdENhc2VgOgotCi0KLS4uIG1ldGhvZDo6IFRlc3RTdWl0ZS5ydW4ocmVzdWx0KQotCi0gICBSdW4gdGhlIHRlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN1aXRlLCBjb2xsZWN0aW5nIHRoZSByZXN1bHQgaW50byB0aGUgdGVzdAotICAgcmVzdWx0IG9iamVjdCBwYXNzZWQgYXMgKnJlc3VsdCouICBOb3RlIHRoYXQgdW5saWtlIDptZXRoOmBUZXN0Q2FzZS5ydW5gLAotICAgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gIHJlcXVpcmVzIHRoZSByZXN1bHQgb2JqZWN0IHRvIGJlIHBhc3NlZCBpbi4KLQotCi0uLiBtZXRob2Q6OiBUZXN0U3VpdGUuZGVidWcoKQotCi0gICBSdW4gdGhlIHRlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN1aXRlIHdpdGhvdXQgY29sbGVjdGluZyB0aGUgcmVzdWx0LiBUaGlzCi0gICBhbGxvd3MgZXhjZXB0aW9ucyByYWlzZWQgYnkgdGhlIHRlc3QgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY2FsbGVyIGFuZCBjYW4gYmUKLSAgIHVzZWQgdG8gc3VwcG9ydCBydW5uaW5nIHRlc3RzIHVuZGVyIGEgZGVidWdnZXIuCi0KLQotLi4gbWV0aG9kOjogVGVzdFN1aXRlLmNvdW50VGVzdENhc2VzKCkKLQotICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhpcyB0ZXN0IG9iamVjdCwgaW5jbHVkaW5nIGFsbAotICAgaW5kaXZpZHVhbCB0ZXN0cyBhbmQgc3ViLXN1aXRlcy4KLQotSW4gdGhlIHR5cGljYWwgdXNhZ2Ugb2YgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgb2JqZWN0LCB0aGUgOm1ldGg6YHJ1bmAgbWV0aG9kIGlzCi1pbnZva2VkIGJ5IGEgOmNsYXNzOmBUZXN0UnVubmVyYCByYXRoZXIgdGhhbiBieSB0aGUgZW5kLXVzZXIgdGVzdCBoYXJuZXNzLgotCi0KLS4uIF90ZXN0cmVzdWx0LW9iamVjdHM6Ci0KLVRlc3RSZXN1bHQgT2JqZWN0cwotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUEgOmNsYXNzOmBUZXN0UmVzdWx0YCBvYmplY3Qgc3RvcmVzIHRoZSByZXN1bHRzIG9mIGEgc2V0IG9mIHRlc3RzLiAgVGhlCi06Y2xhc3M6YFRlc3RDYXNlYCBhbmQgOmNsYXNzOmBUZXN0U3VpdGVgIGNsYXNzZXMgZW5zdXJlIHRoYXQgcmVzdWx0cyBhcmUKLXByb3Blcmx5IHJlY29yZGVkOyB0ZXN0IGF1dGhvcnMgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgcmVjb3JkaW5nIHRoZSBvdXRjb21lCi1vZiB0ZXN0cy4KLQotVGVzdGluZyBmcmFtZXdvcmtzIGJ1aWx0IG9uIHRvcCBvZiA6bW9kOmB1bml0dGVzdGAgbWF5IHdhbnQgYWNjZXNzIHRvIHRoZQotOmNsYXNzOmBUZXN0UmVzdWx0YCBvYmplY3QgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgYSBzZXQgb2YgdGVzdHMgZm9yIHJlcG9ydGluZwotcHVycG9zZXM7IGEgOmNsYXNzOmBUZXN0UmVzdWx0YCBpbnN0YW5jZSBpcyByZXR1cm5lZCBieSB0aGUKLTptZXRoOmBUZXN0UnVubmVyLnJ1bmAgbWV0aG9kIGZvciB0aGlzIHB1cnBvc2UuCi0KLTpjbGFzczpgVGVzdFJlc3VsdGAgaW5zdGFuY2VzIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRoYXQgd2lsbCBiZSBvZgotaW50ZXJlc3Qgd2hlbiBpbnNwZWN0aW5nIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgYSBzZXQgb2YgdGVzdHM6Ci0KLQotLi4gYXR0cmlidXRlOjogVGVzdFJlc3VsdC5lcnJvcnMKLQotICAgQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzIGFuZCBzdHJpbmdzIGhvbGRpbmcKLSAgIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbiB1bmV4cGVjdGVkCi0gICBleGNlcHRpb24uCi0KLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4yCi0gICAgICBDb250YWlucyBmb3JtYXR0ZWQgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIDpmdW5jOmBzeXMuZXhjX2luZm9gIHJlc3VsdHMuCi0KLQotLi4gYXR0cmlidXRlOjogVGVzdFJlc3VsdC5mYWlsdXJlcwotCi0gICBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZXMgYW5kIHN0cmluZ3MgaG9sZGluZwotICAgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hlcmUgYSBmYWlsdXJlIHdhcwotICAgZXhwbGljaXRseSBzaWduYWxsZWQgdXNpbmcgdGhlIDptZXRoOmBUZXN0Q2FzZS5mYWlsXCpgIG9yCi0gICA6bWV0aDpgVGVzdENhc2UuYXNzZXJ0XCpgIG1ldGhvZHMuCi0KLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4yCi0gICAgICBDb250YWlucyBmb3JtYXR0ZWQgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIDpmdW5jOmBzeXMuZXhjX2luZm9gIHJlc3VsdHMuCi0KLQotLi4gYXR0cmlidXRlOjogVGVzdFJlc3VsdC50ZXN0c1J1bgotCi0gICBUaGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biBzbyBmYXIuCi0KLQotLi4gbWV0aG9kOjogVGVzdFJlc3VsdC53YXNTdWNjZXNzZnVsKCkKLQotICAgUmV0dXJucyA6Y29uc3Q6YFRydWVgIGlmIGFsbCB0ZXN0cyBydW4gc28gZmFyIGhhdmUgcGFzc2VkLCBvdGhlcndpc2UgcmV0dXJucwotICAgOmNvbnN0OmBGYWxzZWAuCi0KLQotLi4gbWV0aG9kOjogVGVzdFJlc3VsdC5zdG9wKCkKLQotICAgVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB0byBzaWduYWwgdGhhdCB0aGUgc2V0IG9mIHRlc3RzIGJlaW5nIHJ1biBzaG91bGQgYmUKLSAgIGFib3J0ZWQgYnkgc2V0dGluZyB0aGUgOmNsYXNzOmBUZXN0UmVzdWx0YCdzIGBgc2hvdWxkU3RvcGBgIGF0dHJpYnV0ZSB0bwotICAgOmNvbnN0OmBUcnVlYC4gIDpjbGFzczpgVGVzdFJ1bm5lcmAgb2JqZWN0cyBzaG91bGQgcmVzcGVjdCB0aGlzIGZsYWcgYW5kIHJldHVybgotICAgd2l0aG91dCBydW5uaW5nIGFueSBhZGRpdGlvbmFsIHRlc3RzLgotCi0gICBGb3IgZXhhbXBsZSwgdGhpcyBmZWF0dXJlIGlzIHVzZWQgYnkgdGhlIDpjbGFzczpgVGV4dFRlc3RSdW5uZXJgIGNsYXNzIHRvIHN0b3AKLSAgIHRoZSB0ZXN0IGZyYW1ld29yayB3aGVuIHRoZSB1c2VyIHNpZ25hbHMgYW4gaW50ZXJydXB0IGZyb20gdGhlIGtleWJvYXJkLgotICAgSW50ZXJhY3RpdmUgdG9vbHMgd2hpY2ggcHJvdmlkZSA6Y2xhc3M6YFRlc3RSdW5uZXJgIGltcGxlbWVudGF0aW9ucyBjYW4gdXNlIHRoaXMKLSAgIGluIGEgc2ltaWxhciBtYW5uZXIuCi0KLVRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvZiB0aGUgOmNsYXNzOmBUZXN0UmVzdWx0YCBjbGFzcyBhcmUgdXNlZCB0byBtYWludGFpbiB0aGUKLWludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW5kIG1heSBiZSBleHRlbmRlZCBpbiBzdWJjbGFzc2VzIHRvIHN1cHBvcnQKLWFkZGl0aW9uYWwgcmVwb3J0aW5nIHJlcXVpcmVtZW50cy4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBidWlsZGluZwotdG9vbHMgd2hpY2ggc3VwcG9ydCBpbnRlcmFjdGl2ZSByZXBvcnRpbmcgd2hpbGUgdGVzdHMgYXJlIGJlaW5nIHJ1bi4KLQotCi0uLiBtZXRob2Q6OiBUZXN0UmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQotCi0gICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlICp0ZXN0KiBpcyBhYm91dCB0byBiZSBydW4uCi0KLSAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseSBpbmNyZW1lbnRzIHRoZSBpbnN0YW5jZSdzIGBgdGVzdHNSdW5gYAotICAgY291bnRlci4KLQotCi0uLiBtZXRob2Q6OiBUZXN0UmVzdWx0LnN0b3BUZXN0KHRlc3QpCi0KLSAgIENhbGxlZCBhZnRlciB0aGUgdGVzdCBjYXNlICp0ZXN0KiBoYXMgYmVlbiBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZS4KLQotICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgotCi0KLS4uIG1ldGhvZDo6IFRlc3RSZXN1bHQuYWRkRXJyb3IodGVzdCwgZXJyKQotCi0gICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlICp0ZXN0KiByYWlzZXMgYW4gdW5leHBlY3RlZCBleGNlcHRpb24gKmVyciogaXMgYSB0dXBsZQotICAgb2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkgOmZ1bmM6YHN5cy5leGNfaW5mb2A6IGBgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spYGAuCi0KLSAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFwcGVuZHMgYSB0dXBsZSBgYCh0ZXN0LCBmb3JtYXR0ZWRfZXJyKWBgIHRvIHRoZQotICAgaW5zdGFuY2UncyBgYGVycm9yc2BgIGF0dHJpYnV0ZSwgd2hlcmUgKmZvcm1hdHRlZF9lcnIqIGlzIGEgZm9ybWF0dGVkCi0gICB0cmFjZWJhY2sgZGVyaXZlZCBmcm9tICplcnIqLgotCi0KLS4uIG1ldGhvZDo6IFRlc3RSZXN1bHQuYWRkRmFpbHVyZSh0ZXN0LCBlcnIpCi0KLSAgIENhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgKnRlc3QqIHNpZ25hbHMgYSBmYWlsdXJlLiAqZXJyKiBpcyBhIHR1cGxlIG9mIHRoZSBmb3JtCi0gICByZXR1cm5lZCBieSA6ZnVuYzpgc3lzLmV4Y19pbmZvYDogIGBgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spYGAuCi0KLSAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFwcGVuZHMgYSB0dXBsZSBgYCh0ZXN0LCBmb3JtYXR0ZWRfZXJyKWBgIHRvIHRoZQotICAgaW5zdGFuY2UncyBgYGZhaWx1cmVzYGAgYXR0cmlidXRlLCB3aGVyZSAqZm9ybWF0dGVkX2VyciogaXMgYSBmb3JtYXR0ZWQKLSAgIHRyYWNlYmFjayBkZXJpdmVkIGZyb20gKmVyciouCi0KLQotLi4gbWV0aG9kOjogVGVzdFJlc3VsdC5hZGRTdWNjZXNzKHRlc3QpCi0KLSAgIENhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgKnRlc3QqIHN1Y2NlZWRzLgotCi0gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCi0KLQotLi4gX3Rlc3Rsb2FkZXItb2JqZWN0czoKLQotVGVzdExvYWRlciBPYmplY3RzCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIDpjbGFzczpgVGVzdExvYWRlcmAgY2xhc3MgaXMgdXNlZCB0byBjcmVhdGUgdGVzdCBzdWl0ZXMgZnJvbSBjbGFzc2VzIGFuZAotbW9kdWxlcy4gIE5vcm1hbGx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzOyB0aGUKLTptb2Q6YHVuaXR0ZXN0YCBtb2R1bGUgcHJvdmlkZXMgYW4gaW5zdGFuY2UgdGhhdCBjYW4gYmUgc2hhcmVkIGFzCi1gYHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyYGAuIFVzaW5nIGEgc3ViY2xhc3Mgb3IgaW5zdGFuY2UsIGhvd2V2ZXIsIGFsbG93cwotY3VzdG9taXphdGlvbiBvZiBzb21lIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0aWVzLgotCi06Y2xhc3M6YFRlc3RMb2FkZXJgIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6Ci0KLQotLi4gbWV0aG9kOjogVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UodGVzdENhc2VDbGFzcykKLQotICAgUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgOmNsYXNzOmBUZXN0Q2FzZWBcIC1kZXJpdmVkCi0gICA6Y2xhc3M6YHRlc3RDYXNlQ2xhc3NgLgotCi0KLS4uIG1ldGhvZDo6IFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUpCi0KLSAgIFJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIGdpdmVuIG1vZHVsZS4gVGhpcyBtZXRob2QKLSAgIHNlYXJjaGVzICptb2R1bGUqIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbSA6Y2xhc3M6YFRlc3RDYXNlYCBhbmQgY3JlYXRlcyBhbgotICAgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGZvciBlYWNoIHRlc3QgbWV0aG9kIGRlZmluZWQgZm9yIHRoZSBjbGFzcy4KLQotICAgLi4gd2FybmluZzo6Ci0KLSAgICAgIFdoaWxlIHVzaW5nIGEgaGllcmFyY2h5IG9mIDpjbGFzczpgVGVzdENhc2VgXCAtZGVyaXZlZCBjbGFzc2VzIGNhbiBiZSBjb252ZW5pZW50Ci0gICAgICBpbiBzaGFyaW5nIGZpeHR1cmVzIGFuZCBoZWxwZXIgZnVuY3Rpb25zLCBkZWZpbmluZyB0ZXN0IG1ldGhvZHMgb24gYmFzZSBjbGFzc2VzCi0gICAgICB0aGF0IGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5IGRvZXMgbm90IHBsYXkgd2VsbCB3aXRoIHRoaXMKLSAgICAgIG1ldGhvZC4gIERvaW5nIHNvLCBob3dldmVyLCBjYW4gYmUgdXNlZnVsIHdoZW4gdGhlIGZpeHR1cmVzIGFyZSBkaWZmZXJlbnQgYW5kCi0gICAgICBkZWZpbmVkIGluIHN1YmNsYXNzZXMuCi0KLQotLi4gbWV0aG9kOjogVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZShuYW1lWywgbW9kdWxlXSkKLQotICAgUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGdpdmVuIGEgc3RyaW5nIHNwZWNpZmllci4KLQotICAgVGhlIHNwZWNpZmllciAqbmFtZSogaXMgYSAiZG90dGVkIG5hbWUiIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvIGEgbW9kdWxlLCBhCi0gICB0ZXN0IGNhc2UgY2xhc3MsIGEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBhIDpjbGFzczpgVGVzdFN1aXRlYAotICAgaW5zdGFuY2UsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSA6Y2xhc3M6YFRlc3RDYXNlYCBvcgotICAgOmNsYXNzOmBUZXN0U3VpdGVgIGluc3RhbmNlLiAgVGhlc2UgY2hlY2tzIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlciBsaXN0ZWQgaGVyZTsKLSAgIHRoYXQgaXMsIGEgbWV0aG9kIG9uIGEgcG9zc2libGUgdGVzdCBjYXNlIGNsYXNzIHdpbGwgYmUgcGlja2VkIHVwIGFzICJhIHRlc3QKLSAgIG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiLCByYXRoZXIgdGhhbiAiYSBjYWxsYWJsZSBvYmplY3QiLgotCi0gICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBtb2R1bGUgOm1vZDpgU2FtcGxlVGVzdHNgIGNvbnRhaW5pbmcgYQotICAgOmNsYXNzOmBUZXN0Q2FzZWBcIC1kZXJpdmVkIGNsYXNzIDpjbGFzczpgU2FtcGxlVGVzdENhc2VgIHdpdGggdGhyZWUgdGVzdAotICAgbWV0aG9kcyAoOm1ldGg6YHRlc3Rfb25lYCwgOm1ldGg6YHRlc3RfdHdvYCwgYW5kIDptZXRoOmB0ZXN0X3RocmVlYCksIHRoZQotICAgc3BlY2lmaWVyIGBgJ1NhbXBsZVRlc3RzLlNhbXBsZVRlc3RDYXNlJ2BgIHdvdWxkIGNhdXNlIHRoaXMgbWV0aG9kIHRvIHJldHVybiBhCi0gICBzdWl0ZSB3aGljaCB3aWxsIHJ1biBhbGwgdGhyZWUgdGVzdCBtZXRob2RzLiAgVXNpbmcgdGhlIHNwZWNpZmllcgotICAgYGAnU2FtcGxlVGVzdHMuU2FtcGxlVGVzdENhc2UudGVzdF90d28nYGAgd291bGQgY2F1c2UgaXQgdG8gcmV0dXJuIGEgdGVzdCBzdWl0ZQotICAgd2hpY2ggd2lsbCBydW4gb25seSB0aGUgOm1ldGg6YHRlc3RfdHdvYCB0ZXN0IG1ldGhvZC4gIFRoZSBzcGVjaWZpZXIgY2FuIHJlZmVyCi0gICB0byBtb2R1bGVzIGFuZCBwYWNrYWdlcyB3aGljaCBoYXZlIG5vdCBiZWVuIGltcG9ydGVkOyB0aGV5IHdpbGwgYmUgaW1wb3J0ZWQgYXMgYQotICAgc2lkZS1lZmZlY3QuCi0KLSAgIFRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyAqbmFtZSogcmVsYXRpdmUgdG8gdGhlIGdpdmVuICptb2R1bGUqLgotCi0KLS4uIG1ldGhvZDo6IFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKG5hbWVzWywgbW9kdWxlXSkKLQotICAgU2ltaWxhciB0byA6bWV0aDpgbG9hZFRlc3RzRnJvbU5hbWVgLCBidXQgdGFrZXMgYSBzZXF1ZW5jZSBvZiBuYW1lcyByYXRoZXIgdGhhbgotICAgYSBzaW5nbGUgbmFtZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSB0ZXN0IHN1aXRlIHdoaWNoIHN1cHBvcnRzIGFsbCB0aGUgdGVzdHMKLSAgIGRlZmluZWQgZm9yIGVhY2ggbmFtZS4KLQotCi0uLiBtZXRob2Q6OiBUZXN0TG9hZGVyLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKLQotICAgUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gKnRlc3RDYXNlQ2xhc3MqOyB0aGlzCi0gICBzaG91bGQgYmUgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFRlc3RDYXNlYC4KLQotVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG9mIGEgOmNsYXNzOmBUZXN0TG9hZGVyYCBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgYnkKLXN1YmNsYXNzaW5nIG9yIGFzc2lnbm1lbnQgb24gYW4gaW5zdGFuY2U6Ci0KLQotLi4gYXR0cmlidXRlOjogVGVzdExvYWRlci50ZXN0TWV0aG9kUHJlZml4Ci0KLSAgIFN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyB0ZXN0Ci0gICBtZXRob2RzLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGAndGVzdCdgYC4KLQotICAgVGhpcyBhZmZlY3RzIDptZXRoOmBnZXRUZXN0Q2FzZU5hbWVzYCBhbmQgYWxsIHRoZSA6bWV0aDpgbG9hZFRlc3RzRnJvbVwqYAotICAgbWV0aG9kcy4KLQotCi0uLiBhdHRyaWJ1dGU6OiBUZXN0TG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nCi0KLSAgIEZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KLSAgIDptZXRoOmBnZXRUZXN0Q2FzZU5hbWVzYCBhbmQgYWxsIHRoZSA6bWV0aDpgbG9hZFRlc3RzRnJvbVwqYCBtZXRob2RzLiBUaGUKLSAgIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGJ1aWx0LWluIDpmdW5jOmBjbXBgIGZ1bmN0aW9uOyB0aGUgYXR0cmlidXRlIGNhbiBhbHNvIGJlCi0gICBzZXQgdG8gOmNvbnN0OmBOb25lYCB0byBkaXNhYmxlIHRoZSBzb3J0LgorICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CiAKKy4uIGZ1bmN0aW9uOjogcmVtb3ZlSGFuZGxlcihmdW5jdGlvbj1Ob25lKQogCi0uLiBhdHRyaWJ1dGU6OiBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MKKyAgIFdoZW4gY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzIHRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY29udHJvbC1jIGhhbmRsZXIKKyAgIGlmIGl0IGhhcyBiZWVuIGluc3RhbGxlZC4gVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgdGVzdCBkZWNvcmF0b3IKKyAgIHRvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgaGFuZGxlciB3aGlsc3QgdGhlIHRlc3QgaXMgYmVpbmcgZXhlY3V0ZWQ6OgogCi0gICBDYWxsYWJsZSBvYmplY3QgdGhhdCBjb25zdHJ1Y3RzIGEgdGVzdCBzdWl0ZSBmcm9tIGEgbGlzdCBvZiB0ZXN0cy4gTm8gbWV0aG9kcyBvbgotICAgdGhlIHJlc3VsdGluZyBvYmplY3QgYXJlIG5lZWRlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSA6Y2xhc3M6YFRlc3RTdWl0ZWAKLSAgIGNsYXNzLgorICAgICAgQHVuaXR0ZXN0LnJlbW92ZUhhbmRsZXIKKyAgICAgIGRlZiB0ZXN0X3NpZ25hbF9oYW5kbGluZyhzZWxmKToKKyAgICAgICAgICAuLi4KIAotICAgVGhpcyBhZmZlY3RzIGFsbCB0aGUgOm1ldGg6YGxvYWRUZXN0c0Zyb21cKmAgbWV0aG9kcy4KKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLnJzdAppbmRleCA5OGM1NWQ1Li4wODBkOTVkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5yc3QKQEAgLTIzLDYgKzIzLDEwIEBACiBpbnN0ZWFkIG9mIGZpbGVuYW1lcy4gIFNvbWUgcmVzdHJpY3Rpb25zIGFwcGx5IC0tLSBpdCBjYW4gb25seSBvcGVuIFVSTHMgZm9yCiByZWFkaW5nLCBhbmQgbm8gc2VlayBvcGVyYXRpb25zIGFyZSBhdmFpbGFibGUuCiAKKy4uIHdhcm5pbmc6OiBXaGVuIG9wZW5pbmcgSFRUUFMgVVJMcywgaXQgaXMgbm90IGF0dGVtcHRlZCB0byB2YWxpZGF0ZSB0aGUKKyAgIHNlcnZlciBjZXJ0aWZpY2F0ZS4gIFVzZSBhdCB5b3VyIG93biByaXNrIQorCisKIEhpZ2gtbGV2ZWwgaW50ZXJmYWNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yMzYsOCArMjQwLDggQEAKIAogLi4gZnVuY3Rpb246OiB1cmxlbmNvZGUocXVlcnlbLCBkb3NlcV0pCiAKLSAgIENvbnZlcnQgYSBtYXBwaW5nIG9iamVjdCBvciBhIHNlcXVlbmNlIG9mIHR3by1lbGVtZW50IHR1cGxlcyAgdG8gYQotICAgInVybC1lbmNvZGVkIiBzdHJpbmcsIHN1aXRhYmxlIHRvIHBhc3MgdG8gOmZ1bmM6YHVybG9wZW5gIGFib3ZlIGFzIHRoZQorICAgQ29udmVydCBhIG1hcHBpbmcgb2JqZWN0IG9yIGEgc2VxdWVuY2Ugb2YgdHdvLWVsZW1lbnQgdHVwbGVzIHRvIGEKKyAgICJwZXJjZW50LWVuY29kZWQiIHN0cmluZywgc3VpdGFibGUgdG8gcGFzcyB0byA6ZnVuYzpgdXJsb3BlbmAgYWJvdmUgYXMgdGhlCiAgICBvcHRpb25hbCAqZGF0YSogYXJndW1lbnQuICBUaGlzIGlzIHVzZWZ1bCB0byBwYXNzIGEgZGljdGlvbmFyeSBvZiBmb3JtCiAgICBmaWVsZHMgdG8gYSBgYFBPU1RgYCByZXF1ZXN0LiAgVGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgYSBzZXJpZXMgb2YKICAgIGBga2V5PXZhbHVlYGAgcGFpcnMgc2VwYXJhdGVkIGJ5IGBgJyYnYGAgY2hhcmFjdGVycywgd2hlcmUgYm90aCAqa2V5KiBhbmQKQEAgLTI2Miw3ICsyNjYsNyBAQAogCiAuLiBmdW5jdGlvbjo6IHVybDJwYXRobmFtZShwYXRoKQogCi0gICBDb252ZXJ0IHRoZSBwYXRoIGNvbXBvbmVudCAqcGF0aCogZnJvbSBhbiBlbmNvZGVkIFVSTCB0byB0aGUgbG9jYWwgc3ludGF4IGZvciBhCisgICBDb252ZXJ0IHRoZSBwYXRoIGNvbXBvbmVudCAqcGF0aCogZnJvbSBhbiBwZXJjZW50LWVuY29kZWQgVVJMIHRvIHRoZSBsb2NhbCBzeW50YXggZm9yIGEKICAgIHBhdGguICBUaGlzIGRvZXMgbm90IGFjY2VwdCBhIGNvbXBsZXRlIFVSTC4gIFRoaXMgZnVuY3Rpb24gdXNlcyA6ZnVuYzpgdW5xdW90ZWAKICAgIHRvIGRlY29kZSAqcGF0aCouCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VybGxpYjIucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliMi5yc3QKaW5kZXggYjhmMjI3Ny4uY2VmOTZhNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliMi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdXJsbGliMi5yc3QKQEAgLTE4LDYgKzE4LDcgQEAKIFVSTHMgKG1vc3RseSBIVFRQKSBpbiBhIGNvbXBsZXggd29ybGQgLS0tIGJhc2ljIGFuZCBkaWdlc3QgYXV0aGVudGljYXRpb24sCiByZWRpcmVjdGlvbnMsIGNvb2tpZXMgYW5kIG1vcmUuCiAKKwogVGhlIDptb2Q6YHVybGxpYjJgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCiAKQEAgLTI1LDE4ICsyNiwyMiBAQAogCiAgICBPcGVuIHRoZSBVUkwgKnVybCosIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYSA6Y2xhc3M6YFJlcXVlc3RgIG9iamVjdC4KIAorICAgLi4gd2FybmluZzo6CisgICAgICBIVFRQUyByZXF1ZXN0cyBkbyBub3QgZG8gYW55IHZlcmlmaWNhdGlvbiBvZiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuCisKICAgICpkYXRhKiBtYXkgYmUgYSBzdHJpbmcgc3BlY2lmeWluZyBhZGRpdGlvbmFsIGRhdGEgdG8gc2VuZCB0byB0aGUgc2VydmVyLCBvcgogICAgYGBOb25lYGAgaWYgbm8gc3VjaCBkYXRhIGlzIG5lZWRlZC4gIEN1cnJlbnRseSBIVFRQIHJlcXVlc3RzIGFyZSB0aGUgb25seSBvbmVzCiAgICB0aGF0IHVzZSAqZGF0YSo7IHRoZSBIVFRQIHJlcXVlc3Qgd2lsbCBiZSBhIFBPU1QgaW5zdGVhZCBvZiBhIEdFVCB3aGVuIHRoZQogICAgKmRhdGEqIHBhcmFtZXRlciBpcyBwcm92aWRlZC4gICpkYXRhKiBzaG91bGQgYmUgYSBidWZmZXIgaW4gdGhlIHN0YW5kYXJkCiAgICA6bWltZXR5cGU6YGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGAgZm9ybWF0LiAgVGhlCiAgICA6ZnVuYzpgdXJsbGliLnVybGVuY29kZWAgZnVuY3Rpb24gdGFrZXMgYSBtYXBwaW5nIG9yIHNlcXVlbmNlIG9mIDItdHVwbGVzIGFuZAotICAgcmV0dXJucyBhIHN0cmluZyBpbiB0aGlzIGZvcm1hdC4KKyAgIHJldHVybnMgYSBzdHJpbmcgaW4gdGhpcyBmb3JtYXQuIHVybGxpYjIgbW9kdWxlIHNlbmRzIEhUVFAvMS4xIHJlcXVlc3RzIHdpdGgKKyAgIGBDb25uZWN0aW9uOmNsb3NlYCBoZWFkZXIgaW5jbHVkZWQuCiAKICAgIFRoZSBvcHRpb25hbCAqdGltZW91dCogcGFyYW1ldGVyIHNwZWNpZmllcyBhIHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgYmxvY2tpbmcKICAgIG9wZXJhdGlvbnMgbGlrZSB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IChpZiBub3Qgc3BlY2lmaWVkLCB0aGUgZ2xvYmFsIGRlZmF1bHQKLSAgIHRpbWVvdXQgc2V0dGluZyB3aWxsIGJlIHVzZWQpLiAgVGhpcyBhY3R1YWxseSBvbmx5IHdvcmtzIGZvciBIVFRQLCBIVFRQUywKLSAgIEZUUCBhbmQgRlRQUyBjb25uZWN0aW9ucy4KKyAgIHRpbWVvdXQgc2V0dGluZyB3aWxsIGJlIHVzZWQpLiAgVGhpcyBhY3R1YWxseSBvbmx5IHdvcmtzIGZvciBIVFRQLCBIVFRQUyBhbmQKKyAgIEZUUCBjb25uZWN0aW9ucy4KIAogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZmlsZS1saWtlIG9iamVjdCB3aXRoIHR3byBhZGRpdGlvbmFsIG1ldGhvZHM6CiAKQEAgLTQyOCw3ICs0MzMsNyBAQAogICAgb3B0aW9uYWwgKnRpbWVvdXQqIHBhcmFtZXRlciBzcGVjaWZpZXMgYSB0aW1lb3V0IGluIHNlY29uZHMgZm9yIGJsb2NraW5nCiAgICBvcGVyYXRpb25zIGxpa2UgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCAoaWYgbm90IHNwZWNpZmllZCwgdGhlIGdsb2JhbCBkZWZhdWx0CiAgICB0aW1lb3V0IHNldHRpbmcgd2lsbCBiZSB1c2VkKS4gVGhlIHRpbWVvdXQgZmVhdHVyZSBhY3R1YWxseSB3b3JrcyBvbmx5IGZvcgotICAgSFRUUCwgSFRUUFMsIEZUUCBhbmQgRlRQUyBjb25uZWN0aW9ucykuCisgICBIVFRQLCBIVFRQUyBhbmQgRlRQIGNvbm5lY3Rpb25zKS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKICAgICAgICp0aW1lb3V0KiB3YXMgYWRkZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxwYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS91cmxwYXJzZS5yc3QKaW5kZXggNDdhN2U1Ny4uODhkYWZhOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJscGFyc2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybHBhcnNlLnJzdApAQCAtMzMsNiArMzMsMTEgQEAKIC4uIHZlcnNpb25hZGRlZDo6IDIuNQogICAgU3VwcG9ydCBmb3IgdGhlIGBgc2Z0cGBgIGFuZCBgYHNpcHNgYCBzY2hlbWVzLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGB1cmxwYXJzZSBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvdXJscGFyc2UucHk/dmlldz1tYXJrdXA+YF8KKwogVGhlIDptb2Q6YHVybHBhcnNlYCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAogCkBAIC01OCw2ICs2MywyMyBAQAogICAgICAgPj4+IG8uZ2V0dXJsKCkKICAgICAgICdodHRwOi8vd3d3LmN3aS5ubDo4MC8lN0VndWlkby9QeXRob24uaHRtbCcKIAorCisgICBGb2xsb3dpbmcgdGhlIHN5bnRheCBzcGVjaWZpY2F0aW9ucyBpbiA6cmZjOmAxODA4YCwgdXJscGFyc2UgcmVjb2duaXplcworICAgYSBuZXRsb2Mgb25seSBpZiBpdCBpcyBwcm9wZXJseSBpbnRyb2R1Y2VkIGJ5ICcvLycuICBPdGhlcndpc2UgdGhlCisgICBpbnB1dCBpcyBwcmVzdW1lZCB0byBiZSBhIHJlbGF0aXZlIFVSTCBhbmQgdGh1cyB0byBzdGFydCB3aXRoCisgICBhIHBhdGggY29tcG9uZW50LgorCisgICAgICAgPj4+IGZyb20gdXJscGFyc2UgaW1wb3J0IHVybHBhcnNlCisgICAgICAgPj4+IHVybHBhcnNlKCcvL3d3dy5jd2kubmw6ODAvJTdFZ3VpZG8vUHl0aG9uLmh0bWwnKQorICAgICAgIFBhcnNlUmVzdWx0KHNjaGVtZT0nJywgbmV0bG9jPSd3d3cuY3dpLm5sOjgwJywgcGF0aD0nLyU3RWd1aWRvL1B5dGhvbi5odG1sJywKKyAgICAgICAgICAgICAgICAgIHBhcmFtcz0nJywgcXVlcnk9JycsIGZyYWdtZW50PScnKQorICAgICAgID4+PiB1cmxwYXJzZSgnd3d3LmN3aS5ubDo4MC8lN0VndWlkby9QeXRob24uaHRtbCcpCisgICAgICAgUGFyc2VSZXN1bHQoc2NoZW1lPScnLCBuZXRsb2M9JycsIHBhdGg9J3d3dy5jd2kubmw6ODAvJTdFZ3VpZG8vUHl0aG9uLmh0bWwnLAorICAgICAgICAgICAgICAgICAgcGFyYW1zPScnLCBxdWVyeT0nJywgZnJhZ21lbnQ9JycpCisgICAgICAgPj4+IHVybHBhcnNlKCdoZWxwL1B5dGhvbi5odG1sJykKKyAgICAgICBQYXJzZVJlc3VsdChzY2hlbWU9JycsIG5ldGxvYz0nJywgcGF0aD0naGVscC9QeXRob24uaHRtbCcsIHBhcmFtcz0nJywKKyAgICAgICAgICAgICAgICAgIHF1ZXJ5PScnLCBmcmFnbWVudD0nJykKKwogICAgSWYgdGhlICpzY2hlbWUqIGFyZ3VtZW50IGlzIHNwZWNpZmllZCwgaXQgZ2l2ZXMgdGhlIGRlZmF1bHQgYWRkcmVzc2luZwogICAgc2NoZW1lLCB0byBiZSB1c2VkIG9ubHkgaWYgdGhlIFVSTCBkb2VzIG5vdCBzcGVjaWZ5IG9uZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgogICAgdGhpcyBhcmd1bWVudCBpcyB0aGUgZW1wdHkgc3RyaW5nLgpAQCAtMTAxLDYgKzEyMywxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjUKICAgICAgIEFkZGVkIGF0dHJpYnV0ZXMgdG8gcmV0dXJuIHZhbHVlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgQWRkZWQgSVB2NiBVUkwgcGFyc2luZyBjYXBhYmlsaXRpZXMuCisKKwogLi4gZnVuY3Rpb246OiBwYXJzZV9xcyhxc1ssIGtlZXBfYmxhbmtfdmFsdWVzWywgc3RyaWN0X3BhcnNpbmddXSkKIAogICAgUGFyc2UgYSBxdWVyeSBzdHJpbmcgZ2l2ZW4gYXMgYSBzdHJpbmcgYXJndW1lbnQgKGRhdGEgb2YgdHlwZQpAQCAtMTA5LDcgKzEzNSw3IEBACiAgICB2YWx1ZXMgYXJlIGxpc3RzIG9mIHZhbHVlcyBmb3IgZWFjaCBuYW1lLgogCiAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmtlZXBfYmxhbmtfdmFsdWVzKiBpcyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGJsYW5rCi0gICB2YWx1ZXMgaW4gVVJMIGVuY29kZWQgcXVlcmllcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFuayBzdHJpbmdzLiAgIEEgdHJ1ZSB2YWx1ZQorICAgdmFsdWVzIGluIHBlcmNlbnQtZW5jb2RlZCBxdWVyaWVzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuICAgQSB0cnVlIHZhbHVlCiAgICBpbmRpY2F0ZXMgdGhhdCBibGFua3Mgc2hvdWxkIGJlIHJldGFpbmVkIGFzICBibGFuayBzdHJpbmdzLiAgVGhlIGRlZmF1bHQgZmFsc2UKICAgIHZhbHVlIGluZGljYXRlcyB0aGF0IGJsYW5rIHZhbHVlcyBhcmUgdG8gYmUgaWdub3JlZCBhbmQgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUKICAgIG5vdCBpbmNsdWRlZC4KQEAgLTEzMiw3ICsxNTgsNyBAQAogICAgbmFtZSwgdmFsdWUgcGFpcnMuCiAKICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqa2VlcF9ibGFua192YWx1ZXMqIGlzIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgYmxhbmsKLSAgIHZhbHVlcyBpbiBVUkwgZW5jb2RlZCBxdWVyaWVzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuICAgQSB0cnVlIHZhbHVlCisgICB2YWx1ZXMgaW4gcGVyY2VudC1lbmNvZGVkIHF1ZXJpZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmxhbmsgc3RyaW5ncy4gICBBIHRydWUgdmFsdWUKICAgIGluZGljYXRlcyB0aGF0IGJsYW5rcyBzaG91bGQgYmUgcmV0YWluZWQgYXMgIGJsYW5rIHN0cmluZ3MuICBUaGUgZGVmYXVsdCBmYWxzZQogICAgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYmxhbmsgdmFsdWVzIGFyZSB0byBiZSBpZ25vcmVkIGFuZCB0cmVhdGVkIGFzIGlmIHRoZXkgd2VyZQogICAgbm90IGluY2x1ZGVkLgpAQCAtMjU0LDkgKzI4MCwxMiBAQAogICAgOnJmYzpgMzk4NmAgLSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzCiAgICAgICBUaGlzIGlzIHRoZSBjdXJyZW50IHN0YW5kYXJkIChTVEQ2NikuIEFueSBjaGFuZ2VzIHRvIHVybHBhcnNlIG1vZHVsZQogICAgICAgc2hvdWxkIGNvbmZvcm0gdG8gdGhpcy4gQ2VydGFpbiBkZXZpYXRpb25zIGNvdWxkIGJlIG9ic2VydmVkLCB3aGljaCBhcmUKLSAgICAgIG1vc3RseSBkdWUgYmFja3dhcmQgY29tcGF0aWJsaXR5IHB1cnBvc2VzIGFuZCBmb3IgY2VydGFpbiB0byBkZS1mYWN0bworICAgICAgbW9zdGx5IGR1ZSBiYWNrd2FyZCBjb21wYXRpYmxpdHkgcHVycG9zZXMgYW5kIGZvciBjZXJ0YWluIGRlLWZhY3RvCiAgICAgICBwYXJzaW5nIHJlcXVpcmVtZW50cyBhcyBjb21tb25seSBvYnNlcnZlZCBpbiBtYWpvciBicm93c2Vycy4KIAorICAgOnJmYzpgMjczMmAgLSBGb3JtYXQgZm9yIExpdGVyYWwgSVB2NiBBZGRyZXNzZXMgaW4gVVJMJ3MuCisgICAgICBUaGlzIHNwZWNpZmllcyB0aGUgcGFyc2luZyByZXF1aXJlbWVudHMgb2YgSVB2NiBVUkxzLgorCiAgICA6cmZjOmAyMzk2YCAtIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMgKFVSSSk6IEdlbmVyaWMgU3ludGF4CiAgICAgICBEb2N1bWVudCBkZXNjcmliaW5nIHRoZSBnZW5lcmljIHN5bnRhY3RpYyByZXF1aXJlbWVudHMgZm9yIGJvdGggVW5pZm9ybSBSZXNvdXJjZQogICAgICAgTmFtZXMgKFVSTnMpIGFuZCBVbmlmb3JtIFJlc291cmNlIExvY2F0b3JzIChVUkxzKS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VzZXJkaWN0LnJzdCBiL0RvYy9saWJyYXJ5L3VzZXJkaWN0LnJzdAppbmRleCA5ZGRmZGU1Li5hYjlhYjA0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91c2VyZGljdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdXNlcmRpY3QucnN0CkBAIC0xOSw2ICsxOSwxMSBAQAogc3ViLWNsYXNzZXMgdGhhdCBvYnRhaW5lZCBuZXcgYmVoYXZpb3JzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWV0aG9kcyBvciBhZGRpbmcKIG5ldyBvbmVzLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBVc2VyRGljdCBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9Vc2VyRGljdC5weT92aWV3PW1hcmt1cD5gXworCiBUaGUgOm1vZDpgVXNlckRpY3RgIG1vZHVsZSBkZWZpbmVzIHRoZSA6Y2xhc3M6YFVzZXJEaWN0YCBjbGFzcyBhbmQKIDpjbGFzczpgRGljdE1peGluYDoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXUucnN0IGIvRG9jL2xpYnJhcnkvdXUucnN0CmluZGV4IGUyMzAzYzMuLmZhMTQ3N2IgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3V1LnJzdAorKysgYi9Eb2MvbGlicmFyeS91dS5yc3QKQEAgLTIyLDYgKzIyLDExIEBACiAKIFRoaXMgY29kZSB3YXMgY29udHJpYnV0ZWQgYnkgTGFuY2UgRWxsaW5naG91c2UsIGFuZCBtb2RpZmllZCBieSBKYWNrIEphbnNlbi4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgdXUgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3V1LnB5P3ZpZXc9bWFya3VwPmBfCisKIFRoZSA6bW9kOmB1dWAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2FybmluZ3MucnN0IGIvRG9jL2xpYnJhcnkvd2FybmluZ3MucnN0CmluZGV4IDg2Y2E1MTMuLjU0NGQ5ZjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dhcm5pbmdzLnJzdAorKysgYi9Eb2MvbGlicmFyeS93YXJuaW5ncy5yc3QKQEAgLTU5LDcgKzU5LDcgQEAKIHwgOmV4YzpgVXNlcldhcm5pbmdgICAgICAgICAgICAgICAgfCBUaGUgZGVmYXVsdCBjYXRlZ29yeSBmb3IgOmZ1bmM6YHdhcm5gLiAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgICAgICAgIHwgQmFzZSBjYXRlZ29yeSBmb3Igd2FybmluZ3MgYWJvdXQgZGVwcmVjYXRlZCAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZWF0dXJlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZlYXR1cmVzIChpZ25vcmVkIGJ5IGRlZmF1bHQpLiAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgOmV4YzpgU3ludGF4V2FybmluZ2AgICAgICAgICAgICAgfCBCYXNlIGNhdGVnb3J5IGZvciB3YXJuaW5ncyBhYm91dCBkdWJpb3VzICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN5bnRhY3RpYyBmZWF0dXJlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC04OSw2ICs4OSw5IEBACiBzdGFuZGFyZCB3YXJuaW5nIGNhdGVnb3JpZXMuICBBIHdhcm5pbmcgY2F0ZWdvcnkgbXVzdCBhbHdheXMgYmUgYSBzdWJjbGFzcyBvZgogdGhlIDpleGM6YFdhcm5pbmdgIGNsYXNzLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBpcyBpZ25vcmVkIGJ5IGRlZmF1bHQuCisKIAogLi4gX3dhcm5pbmctZmlsdGVyOgogCkBAIC0xNDgsMTMgKzE1MSwxOSBAQAogOm1vZDpgd2FybmluZ3NgIG1vZHVsZSBwYXJzZXMgdGhlc2Ugd2hlbiBpdCBpcyBmaXJzdCBpbXBvcnRlZCAoaW52YWxpZCBvcHRpb25zCiBhcmUgaWdub3JlZCwgYWZ0ZXIgcHJpbnRpbmcgYSBtZXNzYWdlIHRvIGBgc3lzLnN0ZGVycmBgKS4KIAotVGhlIHdhcm5pbmdzIHRoYXQgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdCBtYXkgYmUgZW5hYmxlZCBieSBwYXNzaW5nIDpvcHRpb246YC1XZGAKLXRvIHRoZSBpbnRlcnByZXRlci4gVGhpcyBlbmFibGVzIGRlZmF1bHQgaGFuZGxpbmcgZm9yIGFsbCB3YXJuaW5ncywgaW5jbHVkaW5nCi10aG9zZSB0aGF0IGFyZSBub3JtYWxseSBpZ25vcmVkIGJ5IGRlZmF1bHQuIFRoaXMgaXMgcGFydGljdWxhciB1c2VmdWwgZm9yCi1lbmFibGluZyBJbXBvcnRXYXJuaW5nIHdoZW4gZGVidWdnaW5nIHByb2JsZW1zIGltcG9ydGluZyBhIGRldmVsb3BlZCBwYWNrYWdlLgotSW1wb3J0V2FybmluZyBjYW4gYWxzbyBiZSBlbmFibGVkIGV4cGxpY2l0bHkgaW4gUHl0aG9uIGNvZGUgdXNpbmc6OgogCi0gICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2RlZmF1bHQnLCBJbXBvcnRXYXJuaW5nKQorRGVmYXVsdCBXYXJuaW5nIEZpbHRlcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0J5IGRlZmF1bHQsIFB5dGhvbiBpbnN0YWxscyBzZXZlcmFsIHdhcm5pbmcgZmlsdGVycywgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gYnkKK3RoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBwYXNzZWQgdG8gOm9wdGlvbjpgLVdgIGFuZCBjYWxscyB0bworOmZ1bmM6YGZpbHRlcndhcm5pbmdzYC4KKworKiA6ZXhjOmBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nYCwgYW5kIDpleGM6YEltcG9ydFdhcm5pbmdgIGFyZSBpZ25vcmVkLgorCisqIDpleGM6YEJ5dGVzV2FybmluZ2AgaXMgaWdub3JlZCB1bmxlc3MgdGhlIDpvcHRpb246YC1iYCBvcHRpb24gaXMgZ2l2ZW4gb25jZSBvcgorICB0d2ljZTsgaW4gdGhpcyBjYXNlIHRoaXMgd2FybmluZyBpcyBlaXRoZXIgcHJpbnRlZCAoYGAtYmBgKSBvciB0dXJuZWQgaW50byBhbgorICBleGNlcHRpb24gKGBgLWJiYGApLgogCiAKIC4uIF93YXJuaW5nLXN1cHByZXNzOgpAQCAtMjMxLDYgKzI0MCwzNyBAQAogZW50cmllcyBmcm9tIHRoZSB3YXJuaW5ncyBsaXN0IGJlZm9yZSBlYWNoIG5ldyBvcGVyYXRpb24pLgogCiAKK1VwZGF0aW5nIENvZGUgRm9yIE5ldyBWZXJzaW9ucyBvZiBQeXRob24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2FybmluZ3MgdGhhdCBhcmUgb25seSBvZiBpbnRlcmVzdCB0byB0aGUgZGV2ZWxvcGVyIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuIEFzCitzdWNoIHlvdSBzaG91bGQgbWFrZSBzdXJlIHRvIHRlc3QgeW91ciBjb2RlIHdpdGggdHlwaWNhbGx5IGlnbm9yZWQgd2FybmluZ3MKK21hZGUgdmlzaWJsZS4gWW91IGNhbiBkbyB0aGlzIGZyb20gdGhlIGNvbW1hbmQtbGluZSBieSBwYXNzaW5nIDpvcHRpb246YC1XZGAKK3RvIHRoZSBpbnRlcnByZXRlciAodGhpcyBpcyBzaG9ydGhhbmQgZm9yIDpvcHRpb246YC1XIGRlZmF1bHRgKS4gIFRoaXMgZW5hYmxlcworZGVmYXVsdCBoYW5kbGluZyBmb3IgYWxsIHdhcm5pbmdzLCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgaWdub3JlZCBieSBkZWZhdWx0LgorVG8gY2hhbmdlIHdoYXQgYWN0aW9uIGlzIHRha2VuIGZvciBlbmNvdW50ZXJlZCB3YXJuaW5ncyB5b3Ugc2ltcGx5IGNoYW5nZSB3aGF0Cithcmd1bWVudCBpcyBwYXNzZWQgdG8gOm9wdGlvbjpgLVdgLCBlLmcuIDpvcHRpb246YC1XIGVycm9yYC4gU2VlIHRoZQorOm9wdGlvbjpgLVdgIGZsYWcgZm9yIG1vcmUgZGV0YWlscyBvbiB3aGF0IGlzIHBvc3NpYmxlLgorCitUbyBwcm9ncmFtbWF0aWNhbGx5IGRvIHRoZSBzYW1lIGFzIDpvcHRpb246YC1XZGAsIHVzZTo6CisKKyAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdkZWZhdWx0JykKKworTWFrZSBzdXJlIHRvIGV4ZWN1dGUgdGhpcyBjb2RlIGFzIHNvb24gYXMgcG9zc2libGUuIFRoaXMgcHJldmVudHMgdGhlCityZWdpc3RlcmluZyBvZiB3aGF0IHdhcm5pbmdzIGhhdmUgYmVlbiByYWlzZWQgZnJvbSB1bmV4cGVjdGVkbHkgaW5mbHVlbmNpbmcgaG93CitmdXR1cmUgd2FybmluZ3MgYXJlIHRyZWF0ZWQuCisKK0hhdmluZyBjZXJ0YWluIHdhcm5pbmdzIGlnbm9yZWQgYnkgZGVmYXVsdCBpcyBkb25lIHRvIHByZXZlbnQgYSB1c2VyIGZyb20KK3NlZWluZyB3YXJuaW5ncyB0aGF0IGFyZSBvbmx5IG9mIGludGVyZXN0IHRvIHRoZSBkZXZlbG9wZXIuIEFzIHlvdSBkbyBub3QKK25lY2Vzc2FyaWx5IGhhdmUgY29udHJvbCBvdmVyIHdoYXQgaW50ZXJwcmV0ZXIgYSB1c2VyIHVzZXMgdG8gcnVuIHRoZWlyIGNvZGUsCitpdCBpcyBwb3NzaWJsZSB0aGF0IGEgbmV3IHZlcnNpb24gb2YgUHl0aG9uIHdpbGwgYmUgcmVsZWFzZWQgYmV0d2VlbiB5b3VyCityZWxlYXNlIGN5Y2xlcy4gIFRoZSBuZXcgaW50ZXJwcmV0ZXIgcmVsZWFzZSBjb3VsZCB0cmlnZ2VyIG5ldyB3YXJuaW5ncyBpbiB5b3VyCitjb2RlIHRoYXQgd2VyZSBub3QgdGhlcmUgaW4gYW4gb2xkZXIgaW50ZXJwcmV0ZXIsIGUuZy4KKzpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgZm9yIGEgbW9kdWxlIHRoYXQgeW91IGFyZSB1c2luZy4gV2hpbGUgeW91IGFzIGEKK2RldmVsb3BlciB3YW50IHRvIGJlIG5vdGlmaWVkIHRoYXQgeW91ciBjb2RlIGlzIHVzaW5nIGEgZGVwcmVjYXRlZCBtb2R1bGUsIHRvIGEKK3VzZXIgdGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWxseSBub2lzZSBhbmQgcHJvdmlkZXMgbm8gYmVuZWZpdCB0byB0aGVtLgorCisKIC4uIF93YXJuaW5nLWZ1bmN0aW9uczoKIAogQXZhaWxhYmxlIEZ1bmN0aW9ucwpAQCAtMjk3LDkgKzMzNyw4IEBACiAgICBtZXNzYWdlOyBpZiAqbGluZSogaXMgbm90IHN1cHBsaWVkLCA6ZnVuYzpgc2hvd3dhcm5pbmdgIHdpbGwKICAgIHRyeSB0byByZWFkIHRoZSBsaW5lIHNwZWNpZmllZCBieSAqZmlsZW5hbWUqIGFuZCAqbGluZW5vKi4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKLSAgICAgIEFkZGVkIHRoZSAqbGluZSogYXJndW1lbnQuIEltcGxlbWVudGF0aW9ucyB0aGF0IGxhY2sgdGhlIG5ldyBhcmd1bWVudAotICAgICAgd2lsbCB0cmlnZ2VyIGEgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYC4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBUaGUgKmxpbmUqIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHRvIGJlIHN1cHBvcnRlZC4KIAogCiAuLiBmdW5jdGlvbjo6IGZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm9bLCBsaW5lXSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dhdmUucnN0IGIvRG9jL2xpYnJhcnkvd2F2ZS5yc3QKaW5kZXggM2JlMDM0My4uYzFkYjUyMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2F2ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2F2ZS5yc3QKQEAgLTE0LDggKzE0LDggQEAKIAogLi4gZnVuY3Rpb246OiBvcGVuKGZpbGVbLCBtb2RlXSkKIAotICAgSWYgKmZpbGUqIGlzIGEgc3RyaW5nLCBvcGVuIHRoZSBmaWxlIGJ5IHRoYXQgbmFtZSwgb3RoZXIgdHJlYXQgaXQgYXMgYSBzZWVrYWJsZQotICAgZmlsZS1saWtlIG9iamVjdC4gKm1vZGUqIGNhbiBiZSBhbnkgb2YKKyAgIElmICpmaWxlKiBpcyBhIHN0cmluZywgb3BlbiB0aGUgZmlsZSBieSB0aGF0IG5hbWUsIG90aGVyd2lzZSB0cmVhdCBpdCBhcyBhCisgICBzZWVrYWJsZSBmaWxlLWxpa2Ugb2JqZWN0LiAgKm1vZGUqIGNhbiBiZSBhbnkgb2YKIAogICAgYGAncidgYCwgYGAncmInYGAKICAgICAgIFJlYWQgb25seSBtb2RlLgpAQCAtMjYsOSArMjYsMTQgQEAKICAgIE5vdGUgdGhhdCBpdCBkb2VzIG5vdCBhbGxvdyByZWFkL3dyaXRlIFdBViBmaWxlcy4KIAogICAgQSAqbW9kZSogb2YgYGAncidgYCBvciBgYCdyYidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3JlYWRgIG9iamVjdCwgd2hpbGUgYQotICAgKm1vZGUqIG9mIGBgJ3cnYGAgb3IgYGAnd2InYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV93cml0ZWAgb2JqZWN0LiAgSWYgKm1vZGUqCi0gICBpcyBvbWl0dGVkIGFuZCBhIGZpbGUtbGlrZSAgb2JqZWN0IGlzIHBhc3NlZCBhcyAqZmlsZSosIGBgZmlsZS5tb2RlYGAgaXMgdXNlZCBhcwotICAgdGhlIGRlZmF1bHQgdmFsdWUgZm9yICptb2RlKiAodGhlIGBgJ2InYGAgZmxhZyBpcyBzdGlsbCBhZGRlZCBpZiAgbmVjZXNzYXJ5KS4KKyAgICptb2RlKiBvZiBgYCd3J2BgIG9yIGBgJ3diJ2BgIHJldHVybnMgYSA6Y2xhc3M6YFdhdmVfd3JpdGVgIG9iamVjdC4gIElmCisgICAqbW9kZSogaXMgb21pdHRlZCBhbmQgYSBmaWxlLWxpa2Ugb2JqZWN0IGlzIHBhc3NlZCBhcyAqZmlsZSosIGBgZmlsZS5tb2RlYGAKKyAgIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yICptb2RlKiAodGhlIGBgJ2InYGAgZmxhZyBpcyBzdGlsbCBhZGRlZCBpZgorICAgbmVjZXNzYXJ5KS4KKworICAgSWYgeW91IHBhc3MgaW4gYSBmaWxlLWxpa2Ugb2JqZWN0LCB0aGUgd2F2ZSBvYmplY3Qgd2lsbCBub3QgY2xvc2UgaXQgd2hlbiBpdHMKKyAgIDptZXRoOmBjbG9zZWAgbWV0aG9kIGlzIGNhbGxlZDsgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNsb3NlCisgICB0aGUgZmlsZSBvYmplY3QuCiAKIAogLi4gZnVuY3Rpb246OiBvcGVuZnAoZmlsZSwgbW9kZSkKQEAgLTUyLDggKzU3LDggQEAKIAogLi4gbWV0aG9kOjogV2F2ZV9yZWFkLmNsb3NlKCkKIAotICAgQ2xvc2UgdGhlIHN0cmVhbSwgYW5kIG1ha2UgdGhlIGluc3RhbmNlIHVudXNhYmxlLiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5Ci0gICBvbiBvYmplY3QgY29sbGVjdGlvbi4KKyAgIENsb3NlIHRoZSBzdHJlYW0gaWYgaXQgd2FzIG9wZW5lZCBieSA6bW9kOmB3YXZlYCwgYW5kIG1ha2UgdGhlIGluc3RhbmNlCisgICB1bnVzYWJsZS4gIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgb24gb2JqZWN0IGNvbGxlY3Rpb24uCiAKIAogLi4gbWV0aG9kOjogV2F2ZV9yZWFkLmdldG5jaGFubmVscygpCkBAIC0xMzksOCArMTQ0LDggQEAKIAogLi4gbWV0aG9kOjogV2F2ZV93cml0ZS5jbG9zZSgpCiAKLSAgIE1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdCwgYW5kIGNsb3NlIHRoZSBmaWxlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbgotICAgZGVsZXRpb24uCisgICBNYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QsIGFuZCBjbG9zZSB0aGUgZmlsZSBpZiBpdCB3YXMgb3BlbmVkIGJ5CisgICA6bW9kOmB3YXZlYC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIG9iamVjdCBjb2xsZWN0aW9uLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuc2V0bmNoYW5uZWxzKG4pCkBAIC0xOTIsNiArMTk3LDcgQEAKIAogICAgV3JpdGUgYXVkaW8gZnJhbWVzIGFuZCBtYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QuCiAKKwogTm90ZSB0aGF0IGl0IGlzIGludmFsaWQgdG8gc2V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyIGNhbGxpbmcgOm1ldGg6YHdyaXRlZnJhbWVzYAogb3IgOm1ldGg6YHdyaXRlZnJhbWVzcmF3YCwgYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIHdpbGwgcmFpc2UKIDpleGM6YHdhdmUuRXJyb3JgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAppbmRleCBkNDAzYzNjLi45YzY1NTg3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAorKysgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdApAQCAtNTksMTEgKzU5LDE0IEBACiBpbnN0YW5jZXMsIGZ1bmN0aW9ucyB3cml0dGVuIGluIFB5dGhvbiAoYnV0IG5vdCBpbiBDKSwgbWV0aG9kcyAoYm90aCBib3VuZCBhbmQKIHVuYm91bmQpLCBzZXRzLCBmcm96ZW5zZXRzLCBmaWxlIG9iamVjdHMsIDp0ZXJtOmBnZW5lcmF0b3JgXHMsIHR5cGUgb2JqZWN0cywKIDpjbGFzczpgREJjdXJzb3JgIG9iamVjdHMgZnJvbSB0aGUgOm1vZDpgYnNkZGJgIG1vZHVsZSwgc29ja2V0cywgYXJyYXlzLCBkZXF1ZXMsCi1hbmQgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gb2JqZWN0cy4KK3JlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIG9iamVjdHMsIGFuZCBjb2RlIG9iamVjdHMuCiAKIC4uIHZlcnNpb25jaGFuZ2VkOjogMi40CiAgICBBZGRlZCBzdXBwb3J0IGZvciBmaWxlcywgc29ja2V0cywgYXJyYXlzLCBhbmQgcGF0dGVybnMuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICBBZGRlZCBzdXBwb3J0IGZvciB0aHJlYWQubG9jaywgdGhyZWFkaW5nLkxvY2ssIGFuZCBjb2RlIG9iamVjdHMuCisKIFNldmVyYWwgYnVpbHQtaW4gdHlwZXMgc3VjaCBhcyA6Y2xhc3M6YGxpc3RgIGFuZCA6Y2xhc3M6YGRpY3RgIGRvIG5vdCBkaXJlY3RseQogc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgYnV0IGNhbiBhZGQgc3VwcG9ydCB0aHJvdWdoIHN1YmNsYXNzaW5nOjoKIApAQCAtMjA2LDYgKzIwOSwxNCBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKIAorLi4gY2xhc3M6OiBXZWFrU2V0KFtlbGVtZW50c10pCisKKyAgIFNldCBjbGFzcyB0aGF0IGtlZXBzIHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgZWxlbWVudHMuICBBbiBlbGVtZW50IHdpbGwgYmUKKyAgIGRpc2NhcmRlZCB3aGVuIG5vIHN0cm9uZyByZWZlcmVuY2UgdG8gaXQgZXhpc3RzIGFueSBtb3JlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBkYXRhOjogUmVmZXJlbmNlVHlwZQogCiAgICBUaGUgdHlwZSBvYmplY3QgZm9yIHdlYWsgcmVmZXJlbmNlcyBvYmplY3RzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QgYi9Eb2MvbGlicmFyeS93ZWJicm93c2VyLnJzdAppbmRleCAyMGY2MjMxLi43NGUxMmEyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93ZWJicm93c2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS93ZWJicm93c2VyLnJzdApAQCAtMzIsOCArMzIsOCBAQAogCiBUaGUgc2NyaXB0IDpwcm9ncmFtOmB3ZWJicm93c2VyYCBjYW4gYmUgdXNlZCBhcyBhIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIHRoZQogbW9kdWxlLiBJdCBhY2NlcHRzIGFuIFVSTCBhcyB0aGUgYXJndW1lbnQuIEl0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25hbAotcGFyYW1ldGVyczogOm9wdGlvbjpgLW5gIG9wZW5zIHRoZSBVUkwgaW4gYSBuZXcgYnJvd3NlciB3aW5kb3csIGlmIHBvc3NpYmxlOwotOm9wdGlvbjpgLXRgIG9wZW5zIHRoZSBVUkwgaW4gYSBuZXcgYnJvd3NlciBwYWdlICgidGFiIikuIFRoZSBvcHRpb25zIGFyZSwKK3BhcmFtZXRlcnM6IGBgLW5gYCBvcGVucyB0aGUgVVJMIGluIGEgbmV3IGJyb3dzZXIgd2luZG93LCBpZiBwb3NzaWJsZTsKK2BgLXRgYCBvcGVucyB0aGUgVVJMIGluIGEgbmV3IGJyb3dzZXIgcGFnZSAoInRhYiIpLiBUaGUgb3B0aW9ucyBhcmUsCiBuYXR1cmFsbHksIG11dHVhbGx5IGV4Y2x1c2l2ZS4KIAogVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaXMgZGVmaW5lZDoKQEAgLTY4LDcgKzY4LDYgQEAKICAgIE9wZW4gKnVybCogaW4gYSBuZXcgd2luZG93IG9mIHRoZSBkZWZhdWx0IGJyb3dzZXIsIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UsIG9wZW4KICAgICp1cmwqIGluIHRoZSBvbmx5IGJyb3dzZXIgd2luZG93LgogCi0KIC4uIGZ1bmN0aW9uOjogb3Blbl9uZXdfdGFiKHVybCkKIAogICAgT3BlbiAqdXJsKiBpbiBhIG5ldyBwYWdlICgidGFiIikgb2YgdGhlIGRlZmF1bHQgYnJvd3NlciwgaWYgcG9zc2libGUsIG90aGVyd2lzZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QgYi9Eb2MvbGlicmFyeS93c2dpcmVmLnJzdAppbmRleCA1MTdmYzM4Li4zMTYzNDk3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93c2dpcmVmLnJzdAorKysgYi9Eb2MvbGlicmFyeS93c2dpcmVmLnJzdApAQCAtNzEyLDcgKzcxMiw3IEBACiAgICAjIHVzZSBhIGZ1bmN0aW9uIChub3RlIHRoYXQgeW91J3JlIG5vdCBsaW1pdGVkIHRvIGEgZnVuY3Rpb24sIHlvdSBjYW4KICAgICMgdXNlIGEgY2xhc3MgZm9yIGV4YW1wbGUpLiBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbgogICAgIyBpcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBDR0ktc3R5bGUgZW52cmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdGhlCi0gICAjIHNlY29uZCB2YXJpYWJsZSBpcyB0aGUgY2FsbGFibGUgb2JqZWN0IChzZWUgOnBlcDpgMzMzYCkKKyAgICMgc2Vjb25kIHZhcmlhYmxlIGlzIHRoZSBjYWxsYWJsZSBvYmplY3QgKHNlZSBQRVAgMzMzKS4KICAgIGRlZiBoZWxsb193b3JsZF9hcHAoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgogICAgICAgIHN0YXR1cyA9ICcyMDAgT0snICMgSFRUUCBTdGF0dXMKICAgICAgICBoZWFkZXJzID0gWygnQ29udGVudC10eXBlJywgJ3RleHQvcGxhaW4nKV0gIyBIVFRQIEhlYWRlcnMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZG9tLm1pbmlkb20ucnN0CmluZGV4IGNmZGU1YjkuLjA2NGRkZDQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLnJzdApAQCAtMTE4LDcgKzExOCw3IEBACiAgICB0byBkaXNjYXJkIGNoaWxkcmVuIG9mIHRoYXQgbm9kZS4KIAogCi0uLiBtZXRob2Q6OiBOb2RlLndyaXRleG1sKHdyaXRlclssIGluZGVudD0iIlssIGFkZGluZGVudD0iIlssIG5ld2w9IiJbLCBlbmNvZGluZz0iIl1dXV0pCisuLiBtZXRob2Q6OiBOb2RlLndyaXRleG1sKHdyaXRlclssIGluZGVudD0iIlssIGFkZGluZGVudD0iIlssIG5ld2w9IiJdXV0pCiAKICAgIFdyaXRlIFhNTCB0byB0aGUgd3JpdGVyIG9iamVjdC4gIFRoZSB3cml0ZXIgc2hvdWxkIGhhdmUgYSA6bWV0aDpgd3JpdGVgIG1ldGhvZAogICAgd2hpY2ggbWF0Y2hlcyB0aGF0IG9mIHRoZSBmaWxlIG9iamVjdCBpbnRlcmZhY2UuICBUaGUgKmluZGVudCogcGFyYW1ldGVyIGlzIHRoZQpAQCAtMTI2LDYgKzEyNiw5IEBACiAgICBpbmRlbnRhdGlvbiB0byB1c2UgZm9yIHN1Ym5vZGVzIG9mIHRoZSBjdXJyZW50IG9uZS4gIFRoZSAqbmV3bCogcGFyYW1ldGVyCiAgICBzcGVjaWZpZXMgdGhlIHN0cmluZyB0byB1c2UgdG8gdGVybWluYXRlIG5ld2xpbmVzLgogCisgICBGb3IgdGhlIDpjbGFzczpgRG9jdW1lbnRgIG5vZGUsIGFuIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudCAqZW5jb2RpbmcqIGNhbgorICAgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBlbmNvZGluZyBmaWVsZCBvZiB0aGUgWE1MIGhlYWRlci4KKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjEKICAgICAgIFRoZSBvcHRpb25hbCBrZXl3b3JkIHBhcmFtZXRlcnMgKmluZGVudCosICphZGRpbmRlbnQqLCBhbmQgKm5ld2wqIHdlcmUgYWRkZWQgdG8KICAgICAgIHN1cHBvcnQgcHJldHR5IG91dHB1dC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5kb20ucnN0IGIvRG9jL2xpYnJhcnkveG1sLmRvbS5yc3QKaW5kZXggMGY5MTcyMy4uMTA2OTYxNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmRvbS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmRvbS5yc3QKQEAgLTcwNSwxOCArNzA1LDI3IEBACiAKIC4uIGF0dHJpYnV0ZTo6IEF0dHIubmFtZQogCi0gICBUaGUgYXR0cmlidXRlIG5hbWUuICBJbiBhIG5hbWVzcGFjZS11c2luZyBkb2N1bWVudCBpdCBtYXkgaGF2ZSBjb2xvbnMgaW4gaXQuCisgICBUaGUgYXR0cmlidXRlIG5hbWUuCisgICBJbiBhIG5hbWVzcGFjZS11c2luZyBkb2N1bWVudCBpdCBtYXkgaW5jbHVkZSBhIGNvbG9uLgogCiAKIC4uIGF0dHJpYnV0ZTo6IEF0dHIubG9jYWxOYW1lCiAKLSAgIFRoZSBwYXJ0IG9mIHRoZSBuYW1lIGZvbGxvd2luZyB0aGUgY29sb24gaWYgdGhlcmUgaXMgb25lLCBlbHNlIHRoZSBlbnRpcmUgbmFtZS4KKyAgIFRoZSBwYXJ0IG9mIHRoZSBuYW1lIGZvbGxvd2luZyB0aGUgY29sb24gaWYgdGhlcmUgaXMgb25lLCBlbHNlIHRoZQorICAgZW50aXJlIG5hbWUuCiAgICBUaGlzIGlzIGEgcmVhZC1vbmx5IGF0dHJpYnV0ZS4KIAogCiAuLiBhdHRyaWJ1dGU6OiBBdHRyLnByZWZpeAogCi0gICBUaGUgcGFydCBvZiB0aGUgbmFtZSBwcmVjZWRpbmcgdGhlIGNvbG9uIGlmIHRoZXJlIGlzIG9uZSwgZWxzZSB0aGUgZW1wdHkgc3RyaW5nLgorICAgVGhlIHBhcnQgb2YgdGhlIG5hbWUgcHJlY2VkaW5nIHRoZSBjb2xvbiBpZiB0aGVyZSBpcyBvbmUsIGVsc2UgdGhlCisgICBlbXB0eSBzdHJpbmcuCisKKworLi4gYXR0cmlidXRlOjogQXR0ci52YWx1ZQorCisgICBUaGUgdGV4dCB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLiAgVGhpcyBpcyBhIHN5bm9ueW0gZm9yIHRoZQorICAgOmF0dHI6YG5vZGVWYWx1ZWAgYXR0cmlidXRlLgogCiAKIC4uIF9kb20tYXR0cmlidXRlbGlzdC1vYmplY3RzOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKaW5kZXggZTA3NGQ1NS4uZGVmNDY2OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CkBAIC05LDkgKzksOSBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKIAotVGhlIEVsZW1lbnQgdHlwZSBpcyBhIGZsZXhpYmxlIGNvbnRhaW5lciBvYmplY3QsIGRlc2lnbmVkIHRvIHN0b3JlIGhpZXJhcmNoaWNhbAotZGF0YSBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gVGhlIHR5cGUgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGNyb3NzIGJldHdlZW4gYSBsaXN0Ci1hbmQgYSBkaWN0aW9uYXJ5LgorVGhlIDpjbGFzczpgRWxlbWVudGAgdHlwZSBpcyBhIGZsZXhpYmxlIGNvbnRhaW5lciBvYmplY3QsIGRlc2lnbmVkIHRvIHN0b3JlCitoaWVyYXJjaGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gIFRoZSB0eXBlIGNhbiBiZSBkZXNjcmliZWQgYXMgYSBjcm9zcworYmV0d2VlbiBhIGxpc3QgYW5kIGEgZGljdGlvbmFyeS4KIAogRWFjaCBlbGVtZW50IGhhcyBhIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdDoKIApAQCAtMjYsNyArMjYsOCBAQAogCiAqIGEgbnVtYmVyIG9mIGNoaWxkIGVsZW1lbnRzLCBzdG9yZWQgaW4gYSBQeXRob24gc2VxdWVuY2UKIAotVG8gY3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHVzZSB0aGUgRWxlbWVudCBvciBTdWJFbGVtZW50IGZhY3RvcnkgZnVuY3Rpb25zLgorVG8gY3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHVzZSB0aGUgOmNsYXNzOmBFbGVtZW50YCBjb25zdHJ1Y3RvciBvciB0aGUKKzpmdW5jOmBTdWJFbGVtZW50YCBmYWN0b3J5IGZ1bmN0aW9uLgogCiBUaGUgOmNsYXNzOmBFbGVtZW50VHJlZWAgY2xhc3MgY2FuIGJlIHVzZWQgdG8gd3JhcCBhbiBlbGVtZW50IHN0cnVjdHVyZSwgYW5kCiBjb252ZXJ0IGl0IGZyb20gYW5kIHRvIFhNTC4KQEAgLTM0LDggKzM1LDE0IEBACiBBIEMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBBUEkgaXMgYXZhaWxhYmxlIGFzIDptb2Q6YHhtbC5ldHJlZS5jRWxlbWVudFRyZWVgLgogCiBTZWUgaHR0cDovL2VmZmJvdC5vcmcvem9uZS9lbGVtZW50LWluZGV4Lmh0bSBmb3IgdHV0b3JpYWxzIGFuZCBsaW5rcyB0byBvdGhlcgotZG9jcy4gRnJlZHJpayBMdW5kaCdzIHBhZ2UgaXMgYWxzbyB0aGUgbG9jYXRpb24gb2YgdGhlIGRldmVsb3BtZW50IHZlcnNpb24gb2YgdGhlCi14bWwuZXRyZWUuRWxlbWVudFRyZWUuCitkb2NzLiAgRnJlZHJpayBMdW5kaCdzIHBhZ2UgaXMgYWxzbyB0aGUgbG9jYXRpb24gb2YgdGhlIGRldmVsb3BtZW50IHZlcnNpb24gb2YKK3RoZSB4bWwuZXRyZWUuRWxlbWVudFRyZWUuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICBUaGUgRWxlbWVudFRyZWUgQVBJIGlzIHVwZGF0ZWQgdG8gMS4zLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQorICAgYEludHJvZHVjaW5nIEVsZW1lbnRUcmVlIDEuMworICAgPGh0dHA6Ly9lZmZib3Qub3JnL3pvbmUvZWxlbWVudHRyZWUtMTMtaW50cm8uaHRtPmBfLgorCiAKIC4uIF9lbGVtZW50dHJlZS1mdW5jdGlvbnM6CiAKQEAgLTQzLDE4ICs1MCwxOSBAQAogLS0tLS0tLS0tCiAKIAotLi4gZnVuY3Rpb246OiBDb21tZW50KFt0ZXh0XSkKKy4uIGZ1bmN0aW9uOjogQ29tbWVudCh0ZXh0PU5vbmUpCiAKLSAgIENvbW1lbnQgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQgdGhhdAotICAgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBjb21tZW50LiBUaGUgY29tbWVudCBzdHJpbmcgY2FuIGJlIGVpdGhlciBhbiA4LWJpdAotICAgQVNDSUkgc3RyaW5nIG9yIGEgVW5pY29kZSBzdHJpbmcuICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tZW50Ci0gICBzdHJpbmcuIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZSByZXByZXNlbnRpbmcgYSBjb21tZW50LgorICAgQ29tbWVudCBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudAorICAgdGhhdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgYW4gWE1MIGNvbW1lbnQgYnkgdGhlIHN0YW5kYXJkIHNlcmlhbGl6ZXIuICBUaGUKKyAgIGNvbW1lbnQgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYSBieXRlc3RyaW5nIG9yIGEgVW5pY29kZSBzdHJpbmcuICAqdGV4dCogaXMgYQorICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbW1lbnQgc3RyaW5nLiAgUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlCisgICByZXByZXNlbnRpbmcgYSBjb21tZW50LgogCiAKIC4uIGZ1bmN0aW9uOjogZHVtcChlbGVtKQogCi0gICBXcml0ZXMgYW4gZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuICBUaGlzIGZ1bmN0aW9uIHNob3VsZAotICAgYmUgdXNlZCBmb3IgZGVidWdnaW5nIG9ubHkuCisgICBXcml0ZXMgYW4gZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuICBUaGlzIGZ1bmN0aW9uCisgICBzaG91bGQgYmUgdXNlZCBmb3IgZGVidWdnaW5nIG9ubHkuCiAKICAgIFRoZSBleGFjdCBvdXRwdXQgZm9ybWF0IGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIEluIHRoaXMgdmVyc2lvbiwgaXQncwogICAgd3JpdHRlbiBhcyBhbiBvcmRpbmFyeSBYTUwgZmlsZS4KQEAgLTYyLDM3ICs3MCwzNiBAQAogICAgKmVsZW0qIGlzIGFuIGVsZW1lbnQgdHJlZSBvciBhbiBpbmRpdmlkdWFsIGVsZW1lbnQuCiAKIAotLi4gZnVuY3Rpb246OiBFbGVtZW50KHRhZ1ssIGF0dHJpYl1bLCAqKmV4dHJhXSkKLQotICAgRWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIHN0YW5kYXJkCi0gICBFbGVtZW50IGludGVyZmFjZS4gIFRoZSBleGFjdCBjbGFzcyBvciB0eXBlIG9mIHRoYXQgb2JqZWN0IGlzIGltcGxlbWVudGF0aW9uCi0gICBkZXBlbmRlbnQsIGJ1dCBpdCB3aWxsIGFsd2F5cyBiZSBjb21wYXRpYmxlIHdpdGggdGhlIF9FbGVtZW50SW50ZXJmYWNlIGNsYXNzIGluCi0gICB0aGlzIG1vZHVsZS4KLQotICAgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgZWl0aGVyIDgtYml0Ci0gICBBU0NJSSBzdHJpbmdzIG9yIFVuaWNvZGUgc3RyaW5ncy4gKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4gKmF0dHJpYiogaXMgYW4KLSAgIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLiAqZXh0cmEqIGNvbnRhaW5zIGFkZGl0aW9uYWwKLSAgIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLiBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UuCi0KLQogLi4gZnVuY3Rpb246OiBmcm9tc3RyaW5nKHRleHQpCiAKLSAgIFBhcnNlcyBhbiBYTUwgc2VjdGlvbiBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgU2FtZSBhcyBYTUwuICp0ZXh0KiBpcyBhIHN0cmluZwotICAgY29udGFpbmluZyBYTUwgZGF0YS4gUmV0dXJucyBhbiBFbGVtZW50IGluc3RhbmNlLgorICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGZyb20gYSBzdHJpbmcgY29uc3RhbnQuICBTYW1lIGFzIDpmdW5jOmBYTUxgLiAgKnRleHQqCisgICBpcyBhIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLiAgUmV0dXJucyBhbiA6Y2xhc3M6YEVsZW1lbnRgIGluc3RhbmNlLgorCisKKy4uIGZ1bmN0aW9uOjogZnJvbXN0cmluZ2xpc3Qoc2VxdWVuY2UsIHBhcnNlcj1Ob25lKQorCisgICBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzZXF1ZW5jZSBvZiBzdHJpbmcgZnJhZ21lbnRzLiAgKnNlcXVlbmNlKiBpcyBhCisgICBsaXN0IG9yIG90aGVyIHNlcXVlbmNlIGNvbnRhaW5pbmcgWE1MIGRhdGEgZnJhZ21lbnRzLiAgKnBhcnNlciogaXMgYW4KKyAgIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlIHN0YW5kYXJkIDpjbGFzczpgWE1MUGFyc2VyYAorICAgcGFyc2VyIGlzIHVzZWQuICBSZXR1cm5zIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCiAKIC4uIGZ1bmN0aW9uOjogaXNlbGVtZW50KGVsZW1lbnQpCiAKLSAgIENoZWNrcyBpZiBhbiBvYmplY3QgYXBwZWFycyB0byBiZSBhIHZhbGlkIGVsZW1lbnQgb2JqZWN0LiAqZWxlbWVudCogaXMgYW4KLSAgIGVsZW1lbnQgaW5zdGFuY2UuIFJldHVybnMgYSB0cnVlIHZhbHVlIGlmIHRoaXMgaXMgYW4gZWxlbWVudCBvYmplY3QuCisgICBDaGVja3MgaWYgYW4gb2JqZWN0IGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBlbGVtZW50IG9iamVjdC4gICplbGVtZW50KiBpcyBhbgorICAgZWxlbWVudCBpbnN0YW5jZS4gIFJldHVybnMgYSB0cnVlIHZhbHVlIGlmIHRoaXMgaXMgYW4gZWxlbWVudCBvYmplY3QuCiAKIAotLi4gZnVuY3Rpb246OiBpdGVycGFyc2Uoc291cmNlWywgZXZlbnRzXSkKKy4uIGZ1bmN0aW9uOjogaXRlcnBhcnNlKHNvdXJjZSwgZXZlbnRzPU5vbmUsIHBhcnNlcj1Ob25lKQogCiAgICBQYXJzZXMgYW4gWE1MIHNlY3Rpb24gaW50byBhbiBlbGVtZW50IHRyZWUgaW5jcmVtZW50YWxseSwgYW5kIHJlcG9ydHMgd2hhdCdzCi0gICBnb2luZyBvbiB0byB0aGUgdXNlci4gKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgotICAgKmV2ZW50cyogaXMgYSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIElmIG9taXR0ZWQsIG9ubHkgImVuZCIgZXZlbnRzIGFyZQotICAgcmVwb3J0ZWQuIFJldHVybnMgYW4gOnRlcm06YGl0ZXJhdG9yYCBwcm92aWRpbmcgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCisgICBnb2luZyBvbiB0byB0aGUgdXNlci4gICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwKKyAgIGRhdGEuICAqZXZlbnRzKiBpcyBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLiAgSWYgb21pdHRlZCwgb25seSAiZW5kIgorICAgZXZlbnRzIGFyZSByZXBvcnRlZC4gICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdAorICAgZ2l2ZW4sIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICBSZXR1cm5zIGFuCisgICA6dGVybTpgaXRlcmF0b3JgIHByb3ZpZGluZyBgYChldmVudCwgZWxlbSlgYCBwYWlycy4KIAogICAgLi4gbm90ZTo6CiAKQEAgLTEwNSwxOTggKzExMiwyNzEgQEAKICAgICAgIElmIHlvdSBuZWVkIGEgZnVsbHkgcG9wdWxhdGVkIGVsZW1lbnQsIGxvb2sgZm9yICJlbmQiIGV2ZW50cyBpbnN0ZWFkLgogCiAKLS4uIGZ1bmN0aW9uOjogcGFyc2Uoc291cmNlWywgcGFyc2VyXSkKKy4uIGZ1bmN0aW9uOjogcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSkKIAotICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlLiAqc291cmNlKiBpcyBhIGZpbGVuYW1lIG9yIGZpbGUKLSAgIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLiAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QKLSAgIGdpdmVuLCB0aGUgc3RhbmRhcmQgWE1MVHJlZUJ1aWxkZXIgcGFyc2VyIGlzIHVzZWQuIFJldHVybnMgYW4gRWxlbWVudFRyZWUKLSAgIGluc3RhbmNlLgorICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlLiAgKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciBmaWxlCisgICBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4gICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmCisgICBub3QgZ2l2ZW4sIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICBSZXR1cm5zIGFuCisgICA6Y2xhc3M6YEVsZW1lbnRUcmVlYCBpbnN0YW5jZS4KIAogCi0uLiBmdW5jdGlvbjo6IFByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXRbLCB0ZXh0XSkKKy4uIGZ1bmN0aW9uOjogUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRhcmdldCwgdGV4dD1Ob25lKQogCi0gICBQSSBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudCB0aGF0IHdpbGwKLSAgIGJlIHNlcmlhbGl6ZWQgYXMgYW4gWE1MIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uICp0YXJnZXQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcKLSAgIHRoZSBQSSB0YXJnZXQuICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSBjb250ZW50cywgaWYgZ2l2ZW4uIFJldHVybnMKLSAgIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHJlcHJlc2VudGluZyBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uCisgICBQSSBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudCB0aGF0CisgICB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgYW4gWE1MIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uICAqdGFyZ2V0KiBpcyBhIHN0cmluZworICAgY29udGFpbmluZyB0aGUgUEkgdGFyZ2V0LiAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIGNvbnRlbnRzLCBpZgorICAgZ2l2ZW4uICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHJlcHJlc2VudGluZyBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uCiAKIAotLi4gZnVuY3Rpb246OiBTdWJFbGVtZW50KHBhcmVudCwgdGFnWywgYXR0cmliWywgICoqZXh0cmFdXSkKKy4uIGZ1bmN0aW9uOjogcmVnaXN0ZXJfbmFtZXNwYWNlKHByZWZpeCwgdXJpKQogCi0gICBTdWJlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gZWxlbWVudCBpbnN0YW5jZSwgYW5kIGFwcGVuZHMgaXQKLSAgIHRvIGFuIGV4aXN0aW5nIGVsZW1lbnQuCisgICBSZWdpc3RlcnMgYSBuYW1lc3BhY2UgcHJlZml4LiAgVGhlIHJlZ2lzdHJ5IGlzIGdsb2JhbCwgYW5kIGFueSBleGlzdGluZworICAgbWFwcGluZyBmb3IgZWl0aGVyIHRoZSBnaXZlbiBwcmVmaXggb3IgdGhlIG5hbWVzcGFjZSBVUkkgd2lsbCBiZSByZW1vdmVkLgorICAgKnByZWZpeCogaXMgYSBuYW1lc3BhY2UgcHJlZml4LiAgKnVyaSogaXMgYSBuYW1lc3BhY2UgdXJpLiAgVGFncyBhbmQKKyAgIGF0dHJpYnV0ZXMgaW4gdGhpcyBuYW1lc3BhY2Ugd2lsbCBiZSBzZXJpYWxpemVkIHdpdGggdGhlIGdpdmVuIHByZWZpeCwgaWYgYXQKKyAgIGFsbCBwb3NzaWJsZS4KIAotICAgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgZWl0aGVyIDgtYml0Ci0gICBBU0NJSSBzdHJpbmdzIG9yIFVuaWNvZGUgc3RyaW5ncy4gKnBhcmVudCogaXMgdGhlIHBhcmVudCBlbGVtZW50LiAqdGFnKiBpcyB0aGUKLSAgIHN1YmVsZW1lbnQgbmFtZS4gKmF0dHJpYiogaXMgYW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50Ci0gICBhdHRyaWJ1dGVzLiAqZXh0cmEqIGNvbnRhaW5zIGFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCi0gICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UuCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogCi0uLiBmdW5jdGlvbjo6IHRvc3RyaW5nKGVsZW1lbnRbLCBlbmNvZGluZ10pCisuLiBmdW5jdGlvbjo6IFN1YkVsZW1lbnQocGFyZW50LCB0YWcsIGF0dHJpYj17fSwgKipleHRyYSkKIAotICAgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsIHN1YmVsZW1lbnRzLgotICAgKmVsZW1lbnQqIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UuICplbmNvZGluZyogaXMgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcwotICAgVVMtQVNDSUkpLiBSZXR1cm5zIGFuIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgorICAgU3ViZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVsZW1lbnQgaW5zdGFuY2UsIGFuZCBhcHBlbmRzCisgICBpdCB0byBhbiBleGlzdGluZyBlbGVtZW50LgorCisgICBUaGUgZWxlbWVudCBuYW1lLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZSBlaXRoZXIKKyAgIGJ5dGVzdHJpbmdzIG9yIFVuaWNvZGUgc3RyaW5ncy4gICpwYXJlbnQqIGlzIHRoZSBwYXJlbnQgZWxlbWVudC4gICp0YWcqIGlzCisgICB0aGUgc3ViZWxlbWVudCBuYW1lLiAgKmF0dHJpYiogaXMgYW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50CisgICBhdHRyaWJ1dGVzLiAgKmV4dHJhKiBjb250YWlucyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQKKyAgIGFyZ3VtZW50cy4gIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZS4KIAogCi0uLiBmdW5jdGlvbjo6IFhNTCh0ZXh0KQorLi4gZnVuY3Rpb246OiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIpCisKKyAgIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAorICAgc3ViZWxlbWVudHMuICAqZWxlbWVudCogaXMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4gICplbmNvZGluZyogWzFdXyBpcworICAgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICAqbWV0aG9kKiBpcyBlaXRoZXIgYGAieG1sImBgLAorICAgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzIGBgInhtbCJgYCkuICBSZXR1cm5zIGFuIGVuY29kZWQgc3RyaW5nCisgICBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KKworCisuLiBmdW5jdGlvbjo6IHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIpCisKKyAgIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAorICAgc3ViZWxlbWVudHMuICAqZWxlbWVudCogaXMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4gICplbmNvZGluZyogWzFdXyBpcworICAgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICAgKm1ldGhvZCogaXMgZWl0aGVyIGBgInhtbCJgYCwKKyAgIGBgImh0bWwiYGAgb3IgYGAidGV4dCJgYCAoZGVmYXVsdCBpcyBgYCJ4bWwiYGApLiAgUmV0dXJucyBhIGxpc3Qgb2YgZW5jb2RlZAorICAgc3RyaW5ncyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4gIEl0IGRvZXMgbm90IGd1YXJhbnRlZSBhbnkgc3BlY2lmaWMKKyAgIHNlcXVlbmNlLCBleGNlcHQgdGhhdCBgYCIiLmpvaW4odG9zdHJpbmdsaXN0KGVsZW1lbnQpKSA9PQorICAgdG9zdHJpbmcoZWxlbWVudClgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gZnVuY3Rpb246OiBYTUwodGV4dCwgcGFyc2VyPU5vbmUpCiAKICAgIFBhcnNlcyBhbiBYTUwgc2VjdGlvbiBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0bwotICAgZW1iZWQgIlhNTCBsaXRlcmFscyIgaW4gUHl0aG9uIGNvZGUuICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgotICAgUmV0dXJucyBhbiBFbGVtZW50IGluc3RhbmNlLgorICAgZW1iZWQgIlhNTCBsaXRlcmFscyIgaW4gUHl0aG9uIGNvZGUuICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwKKyAgIGRhdGEuICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZSBzdGFuZGFyZAorICAgOmNsYXNzOmBYTUxQYXJzZXJgIHBhcnNlciBpcyB1c2VkLiAgUmV0dXJucyBhbiA6Y2xhc3M6YEVsZW1lbnRgIGluc3RhbmNlLgogCiAKLS4uIGZ1bmN0aW9uOjogWE1MSUQodGV4dCkKKy4uIGZ1bmN0aW9uOjogWE1MSUQodGV4dCwgcGFyc2VyPU5vbmUpCiAKICAgIFBhcnNlcyBhbiBYTUwgc2VjdGlvbiBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LCBhbmQgYWxzbyByZXR1cm5zIGEgZGljdGlvbmFyeQotICAgd2hpY2ggbWFwcyBmcm9tIGVsZW1lbnQgaWQ6cyB0byBlbGVtZW50cy4gKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MCi0gICBkYXRhLiBSZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyBhbiBFbGVtZW50IGluc3RhbmNlIGFuZCBhIGRpY3Rpb25hcnkuCisgICB3aGljaCBtYXBzIGZyb20gZWxlbWVudCBpZDpzIHRvIGVsZW1lbnRzLiAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MCisgICBkYXRhLiAgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQKKyAgIDpjbGFzczpgWE1MUGFyc2VyYCBwYXJzZXIgaXMgdXNlZC4gIFJldHVybnMgYSB0dXBsZSBjb250YWluaW5nIGFuCisgICA6Y2xhc3M6YEVsZW1lbnRgIGluc3RhbmNlIGFuZCBhIGRpY3Rpb25hcnkuCiAKIAotLi4gX2VsZW1lbnR0cmVlLWVsZW1lbnQtaW50ZXJmYWNlOgorLi4gX2VsZW1lbnR0cmVlLWVsZW1lbnQtb2JqZWN0czoKIAotVGhlIEVsZW1lbnQgSW50ZXJmYWNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0VsZW1lbnQgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tCiAKLUVsZW1lbnQgb2JqZWN0cyByZXR1cm5lZCBieSBFbGVtZW50IG9yIFN1YkVsZW1lbnQgaGF2ZSB0aGUgIGZvbGxvd2luZyBtZXRob2RzCi1hbmQgYXR0cmlidXRlcy4KIAorLi4gY2xhc3M6OiBFbGVtZW50KHRhZywgYXR0cmliPXt9LCAqKmV4dHJhKQogCi0uLiBhdHRyaWJ1dGU6OiBFbGVtZW50LnRhZworICAgRWxlbWVudCBjbGFzcy4gIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgRWxlbWVudCBpbnRlcmZhY2UsIGFuZCBwcm92aWRlcyBhCisgICByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpbnRlcmZhY2UuCiAKLSAgIEEgc3RyaW5nIGlkZW50aWZ5aW5nIHdoYXQga2luZCBvZiBkYXRhIHRoaXMgZWxlbWVudCByZXByZXNlbnRzICh0aGUgZWxlbWVudAotICAgdHlwZSwgaW4gb3RoZXIgd29yZHMpLgorICAgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgZWl0aGVyCisgICBieXRlc3RyaW5ncyBvciBVbmljb2RlIHN0cmluZ3MuICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLiAgKmF0dHJpYiogaXMKKyAgIGFuIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLiAgKmV4dHJhKiBjb250YWlucworICAgYWRkaXRpb25hbCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KIAogCi0uLiBhdHRyaWJ1dGU6OiBFbGVtZW50LnRleHQKKyAgIC4uIGF0dHJpYnV0ZTo6IHRhZwogCi0gICBUaGUgKnRleHQqIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBob2xkIGFkZGl0aW9uYWwgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlCi0gICBlbGVtZW50LiBBcyB0aGUgbmFtZSBpbXBsaWVzIHRoaXMgYXR0cmlidXRlIGlzIHVzdWFsbHkgYSBzdHJpbmcgYnV0IG1heSBiZSBhbnkKLSAgIGFwcGxpY2F0aW9uLXNwZWNpZmljIG9iamVjdC4gSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBmcm9tIGFuIFhNTCBmaWxlIHRoZQotICAgYXR0cmlidXRlIHdpbGwgY29udGFpbiBhbnkgdGV4dCBmb3VuZCBiZXR3ZWVuIHRoZSBlbGVtZW50IHRhZ3MuCisgICAgICBBIHN0cmluZyBpZGVudGlmeWluZyB3aGF0IGtpbmQgb2YgZGF0YSB0aGlzIGVsZW1lbnQgcmVwcmVzZW50cyAodGhlCisgICAgICBlbGVtZW50IHR5cGUsIGluIG90aGVyIHdvcmRzKS4KIAogCi0uLiBhdHRyaWJ1dGU6OiBFbGVtZW50LnRhaWwKKyAgIC4uIGF0dHJpYnV0ZTo6IHRleHQKIAotICAgVGhlICp0YWlsKiBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gaG9sZCBhZGRpdGlvbmFsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQotICAgZWxlbWVudC4gVGhpcyBhdHRyaWJ1dGUgaXMgdXN1YWxseSBhIHN0cmluZyBidXQgbWF5IGJlIGFueSBhcHBsaWNhdGlvbi1zcGVjaWZpYwotICAgb2JqZWN0LiBJZiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGZyb20gYW4gWE1MIGZpbGUgdGhlIGF0dHJpYnV0ZSB3aWxsIGNvbnRhaW4KLSAgIGFueSB0ZXh0IGZvdW5kIGFmdGVyIHRoZSBlbGVtZW50J3MgZW5kIHRhZyBhbmQgYmVmb3JlIHRoZSBuZXh0IHRhZy4KKyAgICAgIFRoZSAqdGV4dCogYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGhvbGQgYWRkaXRpb25hbCBkYXRhIGFzc29jaWF0ZWQgd2l0aAorICAgICAgdGhlIGVsZW1lbnQuICBBcyB0aGUgbmFtZSBpbXBsaWVzIHRoaXMgYXR0cmlidXRlIGlzIHVzdWFsbHkgYSBzdHJpbmcgYnV0CisgICAgICBtYXkgYmUgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIG9iamVjdC4gIElmIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgZnJvbQorICAgICAgYW4gWE1MIGZpbGUgdGhlIGF0dHJpYnV0ZSB3aWxsIGNvbnRhaW4gYW55IHRleHQgZm91bmQgYmV0d2VlbiB0aGUgZWxlbWVudAorICAgICAgdGFncy4KIAogCi0uLiBhdHRyaWJ1dGU6OiBFbGVtZW50LmF0dHJpYgorICAgLi4gYXR0cmlidXRlOjogdGFpbAogCi0gICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMuIE5vdGUgdGhhdCB3aGlsZSB0aGUgKmF0dHJpYioKLSAgIHZhbHVlIGlzIGFsd2F5cyBhIHJlYWwgbXV0YWJsZSBQeXRob24gZGljdGlvbmFyeSwgYW4gRWxlbWVudFRyZWUgaW1wbGVtZW50YXRpb24KLSAgIG1heSBjaG9vc2UgdG8gdXNlIGFub3RoZXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIGFuZCBjcmVhdGUgdGhlIGRpY3Rpb25hcnkKLSAgIG9ubHkgaWYgc29tZW9uZSBhc2tzIGZvciBpdC4gVG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygc3VjaCBpbXBsZW1lbnRhdGlvbnMsIHVzZSB0aGUKLSAgIGRpY3Rpb25hcnkgbWV0aG9kcyBiZWxvdyB3aGVuZXZlciBwb3NzaWJsZS4KKyAgICAgIFRoZSAqdGFpbCogYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGhvbGQgYWRkaXRpb25hbCBkYXRhIGFzc29jaWF0ZWQgd2l0aAorICAgICAgdGhlIGVsZW1lbnQuICBUaGlzIGF0dHJpYnV0ZSBpcyB1c3VhbGx5IGEgc3RyaW5nIGJ1dCBtYXkgYmUgYW55CisgICAgICBhcHBsaWNhdGlvbi1zcGVjaWZpYyBvYmplY3QuICBJZiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGZyb20gYW4gWE1MIGZpbGUKKyAgICAgIHRoZSBhdHRyaWJ1dGUgd2lsbCBjb250YWluIGFueSB0ZXh0IGZvdW5kIGFmdGVyIHRoZSBlbGVtZW50J3MgZW5kIHRhZyBhbmQKKyAgICAgIGJlZm9yZSB0aGUgbmV4dCB0YWcuCiAKLVRoZSBmb2xsb3dpbmcgZGljdGlvbmFyeS1saWtlIG1ldGhvZHMgd29yayBvbiB0aGUgZWxlbWVudCBhdHRyaWJ1dGVzLgogCisgICAuLiBhdHRyaWJ1dGU6OiBhdHRyaWIKIAotLi4gbWV0aG9kOjogRWxlbWVudC5jbGVhcigpCisgICAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMuICBOb3RlIHRoYXQgd2hpbGUgdGhlCisgICAgICAqYXR0cmliKiB2YWx1ZSBpcyBhbHdheXMgYSByZWFsIG11dGFibGUgUHl0aG9uIGRpY3Rpb25hcnksIGFuIEVsZW1lbnRUcmVlCisgICAgICBpbXBsZW1lbnRhdGlvbiBtYXkgY2hvb3NlIHRvIHVzZSBhbm90aGVyIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBhbmQKKyAgICAgIGNyZWF0ZSB0aGUgZGljdGlvbmFyeSBvbmx5IGlmIHNvbWVvbmUgYXNrcyBmb3IgaXQuICBUbyB0YWtlIGFkdmFudGFnZSBvZgorICAgICAgc3VjaCBpbXBsZW1lbnRhdGlvbnMsIHVzZSB0aGUgZGljdGlvbmFyeSBtZXRob2RzIGJlbG93IHdoZW5ldmVyIHBvc3NpYmxlLgogCi0gICBSZXNldHMgYW4gZWxlbWVudC4gIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwgc3ViZWxlbWVudHMsIGNsZWFycyBhbGwKLSAgIGF0dHJpYnV0ZXMsIGFuZCBzZXRzIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMgdG8gTm9uZS4KKyAgIFRoZSBmb2xsb3dpbmcgZGljdGlvbmFyeS1saWtlIG1ldGhvZHMgd29yayBvbiB0aGUgZWxlbWVudCBhdHRyaWJ1dGVzLgogCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuZ2V0KGtleVssIGRlZmF1bHQ9Tm9uZV0pCisgICAuLiBtZXRob2Q6OiBjbGVhcigpCiAKLSAgIEdldHMgdGhlIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVkICprZXkqLgorICAgICAgUmVzZXRzIGFuIGVsZW1lbnQuICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHN1YmVsZW1lbnRzLCBjbGVhcnMgYWxsCisgICAgICBhdHRyaWJ1dGVzLCBhbmQgc2V0cyB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzIHRvIE5vbmUuCiAKLSAgIFJldHVybnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3IgKmRlZmF1bHQqIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KKworICAgLi4gbWV0aG9kOjogZ2V0KGtleSwgZGVmYXVsdD1Ob25lKQorCisgICAgICBHZXRzIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lZCAqa2V5Ki4KKworICAgICAgUmV0dXJucyB0aGUgYXR0cmlidXRlIHZhbHVlLCBvciAqZGVmYXVsdCogaWYgdGhlIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgorCisKKyAgIC4uIG1ldGhvZDo6IGl0ZW1zKCkKKworICAgICAgUmV0dXJucyB0aGUgZWxlbWVudCBhdHRyaWJ1dGVzIGFzIGEgc2VxdWVuY2Ugb2YgKG5hbWUsIHZhbHVlKSBwYWlycy4gIFRoZQorICAgICAgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLgorCisKKyAgIC4uIG1ldGhvZDo6IGtleXMoKQorCisgICAgICBSZXR1cm5zIHRoZSBlbGVtZW50cyBhdHRyaWJ1dGUgbmFtZXMgYXMgYSBsaXN0LiAgVGhlIG5hbWVzIGFyZSByZXR1cm5lZAorICAgICAgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldChrZXksIHZhbHVlKQorCisgICAgICBTZXQgdGhlIGF0dHJpYnV0ZSAqa2V5KiBvbiB0aGUgZWxlbWVudCB0byAqdmFsdWUqLgorCisgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMgd29yayBvbiB0aGUgZWxlbWVudCdzIGNoaWxkcmVuIChzdWJlbGVtZW50cykuCisKKworICAgLi4gbWV0aG9kOjogYXBwZW5kKHN1YmVsZW1lbnQpCisKKyAgICAgIEFkZHMgdGhlIGVsZW1lbnQgKnN1YmVsZW1lbnQqIHRvIHRoZSBlbmQgb2YgdGhpcyBlbGVtZW50cyBpbnRlcm5hbCBsaXN0CisgICAgICBvZiBzdWJlbGVtZW50cy4KKworCisgICAuLiBtZXRob2Q6OiBleHRlbmQoc3ViZWxlbWVudHMpCiAKKyAgICAgIEFwcGVuZHMgKnN1YmVsZW1lbnRzKiBmcm9tIGEgc2VxdWVuY2Ugb2JqZWN0IHdpdGggemVybyBvciBtb3JlIGVsZW1lbnRzLgorICAgICAgUmFpc2VzIDpleGM6YEFzc2VydGlvbkVycm9yYCBpZiBhIHN1YmVsZW1lbnQgaXMgbm90IGEgdmFsaWQgb2JqZWN0LgogCi0uLiBtZXRob2Q6OiBFbGVtZW50Lml0ZW1zKCkKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCi0gICBSZXR1cm5zIHRoZSBlbGVtZW50IGF0dHJpYnV0ZXMgYXMgYSBzZXF1ZW5jZSBvZiAobmFtZSwgdmFsdWUpIHBhaXJzLiBUaGUKLSAgIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkIGluIGFuIGFyYml0cmFyeSBvcmRlci4KIAorICAgLi4gbWV0aG9kOjogZmluZChtYXRjaCkKIAotLi4gbWV0aG9kOjogRWxlbWVudC5rZXlzKCkKKyAgICAgIEZpbmRzIHRoZSBmaXJzdCBzdWJlbGVtZW50IG1hdGNoaW5nICptYXRjaCouICAqbWF0Y2gqIG1heSBiZSBhIHRhZyBuYW1lCisgICAgICBvciBwYXRoLiAgUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlIG9yIGBgTm9uZWBgLgogCi0gICBSZXR1cm5zIHRoZSBlbGVtZW50cyBhdHRyaWJ1dGUgbmFtZXMgYXMgYSBsaXN0LiBUaGUgbmFtZXMgYXJlIHJldHVybmVkIGluIGFuCi0gICBhcmJpdHJhcnkgb3JkZXIuCiAKKyAgIC4uIG1ldGhvZDo6IGZpbmRhbGwobWF0Y2gpCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuc2V0KGtleSwgdmFsdWUpCisgICAgICBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguICBSZXR1cm5zIGEgbGlzdAorICAgICAgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCiAKLSAgIFNldCB0aGUgYXR0cmlidXRlICprZXkqIG9uIHRoZSBlbGVtZW50IHRvICp2YWx1ZSouCiAKLVRoZSBmb2xsb3dpbmcgbWV0aG9kcyB3b3JrIG9uIHRoZSBlbGVtZW50J3MgY2hpbGRyZW4gKHN1YmVsZW1lbnRzKS4KKyAgIC4uIG1ldGhvZDo6IGZpbmR0ZXh0KG1hdGNoLCBkZWZhdWx0PU5vbmUpCiAKKyAgICAgIEZpbmRzIHRleHQgZm9yIHRoZSBmaXJzdCBzdWJlbGVtZW50IG1hdGNoaW5nICptYXRjaCouICAqbWF0Y2gqIG1heSBiZQorICAgICAgYSB0YWcgbmFtZSBvciBwYXRoLiAgUmV0dXJucyB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZworICAgICAgZWxlbWVudCwgb3IgKmRlZmF1bHQqIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSBtYXRjaGluZworICAgICAgZWxlbWVudCBoYXMgbm8gdGV4dCBjb250ZW50IGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KIAotLi4gbWV0aG9kOjogRWxlbWVudC5hcHBlbmQoc3ViZWxlbWVudCkKIAotICAgQWRkcyB0aGUgZWxlbWVudCAqc3ViZWxlbWVudCogdG8gdGhlIGVuZCBvZiB0aGlzIGVsZW1lbnRzIGludGVybmFsIGxpc3Qgb2YKLSAgIHN1YmVsZW1lbnRzLgorICAgLi4gbWV0aG9kOjogZ2V0Y2hpbGRyZW4oKQogCisgICAgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICAgICBVc2UgYGBsaXN0KGVsZW0pYGAgb3IgaXRlcmF0aW9uLgogCi0uLiBtZXRob2Q6OiBFbGVtZW50LmZpbmQobWF0Y2gpCiAKLSAgIEZpbmRzIHRoZSBmaXJzdCBzdWJlbGVtZW50IG1hdGNoaW5nICptYXRjaCouICAqbWF0Y2gqIG1heSBiZSBhIHRhZyBuYW1lIG9yIHBhdGguCi0gICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2Ugb3IgYGBOb25lYGAuCisgICAuLiBtZXRob2Q6OiBnZXRpdGVyYXRvcih0YWc9Tm9uZSkKIAorICAgICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgICAgVXNlIG1ldGhvZCA6bWV0aDpgRWxlbWVudC5pdGVyYCBpbnN0ZWFkLgogCi0uLiBtZXRob2Q6OiBFbGVtZW50LmZpbmRhbGwobWF0Y2gpCiAKLSAgIEZpbmRzIGFsbCBzdWJlbGVtZW50cyBtYXRjaGluZyAqbWF0Y2gqLiAgKm1hdGNoKiBtYXkgYmUgYSB0YWcgbmFtZSBvciBwYXRoLgotICAgUmV0dXJucyBhbiBpdGVyYWJsZSB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisgICAuLiBtZXRob2Q6OiBpbnNlcnQoaW5kZXgsIGVsZW1lbnQpCiAKKyAgICAgIEluc2VydHMgYSBzdWJlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGlzIGVsZW1lbnQuCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuZmluZHRleHQoY29uZGl0aW9uWywgZGVmYXVsdD1Ob25lXSkKIAotICAgRmluZHMgdGV4dCBmb3IgdGhlIGZpcnN0IHN1YmVsZW1lbnQgbWF0Y2hpbmcgKmNvbmRpdGlvbiouICAqY29uZGl0aW9uKiBtYXkgYmUgYQotICAgdGFnIG5hbWUgb3IgcGF0aC4gUmV0dXJucyB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvcgotICAgKmRlZmF1bHQqIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSBtYXRjaGluZyBlbGVtZW50IGhhcyBubwotICAgdGV4dCBjb250ZW50IGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKyAgIC4uIG1ldGhvZDo6IGl0ZXIodGFnPU5vbmUpCiAKKyAgICAgIENyZWF0ZXMgYSB0cmVlIDp0ZXJtOmBpdGVyYXRvcmAgd2l0aCB0aGUgY3VycmVudCBlbGVtZW50IGFzIHRoZSByb290LgorICAgICAgVGhlIGl0ZXJhdG9yIGl0ZXJhdGVzIG92ZXIgdGhpcyBlbGVtZW50IGFuZCBhbGwgZWxlbWVudHMgYmVsb3cgaXQsIGluCisgICAgICBkb2N1bWVudCAoZGVwdGggZmlyc3QpIG9yZGVyLiAgSWYgKnRhZyogaXMgbm90IGBgTm9uZWBgIG9yIGBgJyonYGAsIG9ubHkKKyAgICAgIGVsZW1lbnRzIHdob3NlIHRhZyBlcXVhbHMgKnRhZyogYXJlIHJldHVybmVkIGZyb20gdGhlIGl0ZXJhdG9yLiAgSWYgdGhlCisgICAgICB0cmVlIHN0cnVjdHVyZSBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KIAotLi4gbWV0aG9kOjogRWxlbWVudC5nZXRjaGlsZHJlbigpCiAKLSAgIFJldHVybnMgYWxsIHN1YmVsZW1lbnRzLiAgVGhlIGVsZW1lbnRzIGFyZSByZXR1cm5lZCBpbiBkb2N1bWVudCBvcmRlci4KKyAgIC4uIG1ldGhvZDo6IGl0ZXJmaW5kKG1hdGNoKQogCisgICAgICBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguICBSZXR1cm5zIGFuIGl0ZXJhYmxlCisgICAgICB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuZ2V0aXRlcmF0b3IoW3RhZz1Ob25lXSkKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCi0gICBDcmVhdGVzIGEgdHJlZSBpdGVyYXRvciB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQgYXMgdGhlIHJvb3QuICAgVGhlIGl0ZXJhdG9yCi0gICBpdGVyYXRlcyBvdmVyIHRoaXMgZWxlbWVudCBhbmQgYWxsIGVsZW1lbnRzIGJlbG93IGl0LCBpbiBkb2N1bWVudCAoZGVwdGggZmlyc3QpCi0gICBvcmRlci4gIElmICp0YWcqIGlzIG5vdCBgYE5vbmVgYCBvciBgYCcqJ2BgLCBvbmx5IGVsZW1lbnRzIHdob3NlIHRhZyBlcXVhbHMKLSAgICp0YWcqIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBpdGVyYXRvci4KIAorICAgLi4gbWV0aG9kOjogaXRlcnRleHQoKQogCi0uLiBtZXRob2Q6OiBFbGVtZW50Lmluc2VydChpbmRleCwgZWxlbWVudCkKKyAgICAgIENyZWF0ZXMgYSB0ZXh0IGl0ZXJhdG9yLiAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhpcyBlbGVtZW50IGFuZCBhbGwKKyAgICAgIHN1YmVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlciwgYW5kIHJldHVybnMgYWxsIGlubmVyIHRleHQuCiAKLSAgIEluc2VydHMgYSBzdWJlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGlzIGVsZW1lbnQuCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogCi0uLiBtZXRob2Q6OiBFbGVtZW50Lm1ha2VlbGVtZW50KHRhZywgYXR0cmliKQorICAgLi4gbWV0aG9kOjogbWFrZWVsZW1lbnQodGFnLCBhdHRyaWIpCiAKLSAgIENyZWF0ZXMgYSBuZXcgZWxlbWVudCBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGlzIGVsZW1lbnQuIERvIG5vdCBjYWxsIHRoaXMKLSAgIG1ldGhvZCwgdXNlIHRoZSBTdWJFbGVtZW50IGZhY3RvcnkgZnVuY3Rpb24gaW5zdGVhZC4KKyAgICAgIENyZWF0ZXMgYSBuZXcgZWxlbWVudCBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGlzIGVsZW1lbnQuICBEbyBub3QKKyAgICAgIGNhbGwgdGhpcyBtZXRob2QsIHVzZSB0aGUgOmZ1bmM6YFN1YkVsZW1lbnRgIGZhY3RvcnkgZnVuY3Rpb24gaW5zdGVhZC4KIAogCi0uLiBtZXRob2Q6OiBFbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQorICAgLi4gbWV0aG9kOjogcmVtb3ZlKHN1YmVsZW1lbnQpCiAKLSAgIFJlbW92ZXMgKnN1YmVsZW1lbnQqIGZyb20gdGhlIGVsZW1lbnQuICAgVW5saWtlIHRoZSBmaW5kWFlaIG1ldGhvZHMgdGhpcyBtZXRob2QKLSAgIGNvbXBhcmVzIGVsZW1lbnRzIGJhc2VkIG9uICB0aGUgaW5zdGFuY2UgaWRlbnRpdHksIG5vdCBvbiB0YWcgdmFsdWUgb3IgY29udGVudHMuCisgICAgICBSZW1vdmVzICpzdWJlbGVtZW50KiBmcm9tIHRoZSBlbGVtZW50LiAgVW5saWtlIHRoZSBmaW5kXCogbWV0aG9kcyB0aGlzCisgICAgICBtZXRob2QgY29tcGFyZXMgZWxlbWVudHMgYmFzZWQgb24gdGhlIGluc3RhbmNlIGlkZW50aXR5LCBub3Qgb24gdGFnIHZhbHVlCisgICAgICBvciBjb250ZW50cy4KIAotRWxlbWVudCBvYmplY3RzIGFsc28gc3VwcG9ydCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIHR5cGUgbWV0aG9kcyBmb3Igd29ya2luZwotd2l0aCBzdWJlbGVtZW50czogOm1ldGg6YF9fZGVsaXRlbV9fYCwgOm1ldGg6YF9fZ2V0aXRlbV9fYCwgOm1ldGg6YF9fc2V0aXRlbV9fYCwKLTptZXRoOmBfX2xlbl9fYC4KKyAgIDpjbGFzczpgRWxlbWVudGAgb2JqZWN0cyBhbHNvIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSB0eXBlIG1ldGhvZHMKKyAgIGZvciB3b3JraW5nIHdpdGggc3ViZWxlbWVudHM6IDptZXRoOmBfX2RlbGl0ZW1fX2AsIDptZXRoOmBfX2dldGl0ZW1fX2AsCisgICA6bWV0aDpgX19zZXRpdGVtX19gLCA6bWV0aDpgX19sZW5fX2AuCiAKLUNhdXRpb246IEJlY2F1c2UgRWxlbWVudCBvYmplY3RzIGRvIG5vdCBkZWZpbmUgYSA6bWV0aDpgX19ub256ZXJvX19gIG1ldGhvZCwKLWVsZW1lbnRzIHdpdGggbm8gc3ViZWxlbWVudHMgd2lsbCB0ZXN0IGFzIGBgRmFsc2VgYC4gOjoKKyAgIENhdXRpb246IEVsZW1lbnRzIHdpdGggbm8gc3ViZWxlbWVudHMgd2lsbCB0ZXN0IGFzIGBgRmFsc2VgYC4gIFRoaXMgYmVoYXZpb3IKKyAgIHdpbGwgY2hhbmdlIGluIGZ1dHVyZSB2ZXJzaW9ucy4gIFVzZSBzcGVjaWZpYyBgYGxlbihlbGVtKWBgIG9yIGBgZWxlbSBpcworICAgTm9uZWBgIHRlc3QgaW5zdGVhZC4gOjoKIAotICAgZWxlbWVudCA9IHJvb3QuZmluZCgnZm9vJykKKyAgICAgZWxlbWVudCA9IHJvb3QuZmluZCgnZm9vJykKIAotICAgaWYgbm90IGVsZW1lbnQ6ICMgY2FyZWZ1bCEKLSAgICAgICBwcmludCAiZWxlbWVudCBub3QgZm91bmQsIG9yIGVsZW1lbnQgaGFzIG5vIHN1YmVsZW1lbnRzIgorICAgICBpZiBub3QgZWxlbWVudDogICMgY2FyZWZ1bCEKKyAgICAgICAgIHByaW50ICJlbGVtZW50IG5vdCBmb3VuZCwgb3IgZWxlbWVudCBoYXMgbm8gc3ViZWxlbWVudHMiCiAKLSAgIGlmIGVsZW1lbnQgaXMgTm9uZToKLSAgICAgICBwcmludCAiZWxlbWVudCBub3QgZm91bmQiCisgICAgIGlmIGVsZW1lbnQgaXMgTm9uZToKKyAgICAgICAgIHByaW50ICJlbGVtZW50IG5vdCBmb3VuZCIKIAogCiAuLiBfZWxlbWVudHRyZWUtZWxlbWVudHRyZWUtb2JqZWN0czoKQEAgLTMwNSw1MiArMzg1LDUxIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAotLi4gY2xhc3M6OiBFbGVtZW50VHJlZShbZWxlbWVudCxdIFtmaWxlXSkKKy4uIGNsYXNzOjogRWxlbWVudFRyZWUoZWxlbWVudD1Ob25lLCBmaWxlPU5vbmUpCiAKLSAgIEVsZW1lbnRUcmVlIHdyYXBwZXIgY2xhc3MuICBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gZW50aXJlIGVsZW1lbnQgaGllcmFyY2h5LAotICAgYW5kIGFkZHMgc29tZSBleHRyYSBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tIHN0YW5kYXJkIFhNTC4KKyAgIEVsZW1lbnRUcmVlIHdyYXBwZXIgY2xhc3MuICBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gZW50aXJlIGVsZW1lbnQKKyAgIGhpZXJhcmNoeSwgYW5kIGFkZHMgc29tZSBleHRyYSBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tCisgICBzdGFuZGFyZCBYTUwuCiAKLSAgICplbGVtZW50KiBpcyB0aGUgcm9vdCBlbGVtZW50LiBUaGUgdHJlZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUKLSAgIFhNTCAqZmlsZSogaWYgZ2l2ZW4uCisgICAqZWxlbWVudCogaXMgdGhlIHJvb3QgZWxlbWVudC4gIFRoZSB0cmVlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGNvbnRlbnRzCisgICBvZiB0aGUgWE1MICpmaWxlKiBpZiBnaXZlbi4KIAogCiAgICAuLiBtZXRob2Q6OiBfc2V0cm9vdChlbGVtZW50KQogCiAgICAgICBSZXBsYWNlcyB0aGUgcm9vdCBlbGVtZW50IGZvciB0aGlzIHRyZWUuICBUaGlzIGRpc2NhcmRzIHRoZSBjdXJyZW50CiAgICAgICBjb250ZW50cyBvZiB0aGUgdHJlZSwgYW5kIHJlcGxhY2VzIGl0IHdpdGggdGhlIGdpdmVuIGVsZW1lbnQuICBVc2Ugd2l0aAotICAgICAgY2FyZS4gKmVsZW1lbnQqIGlzIGFuIGVsZW1lbnQgaW5zdGFuY2UuCisgICAgICBjYXJlLiAgKmVsZW1lbnQqIGlzIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAKIAotICAgLi4gbWV0aG9kOjogZmluZChwYXRoKQorICAgLi4gbWV0aG9kOjogZmluZChtYXRjaCkKIAotICAgICAgRmluZHMgdGhlIGZpcnN0IHRvcGxldmVsIGVsZW1lbnQgd2l0aCBnaXZlbiB0YWcuIFNhbWUgYXMKLSAgICAgIGdldHJvb3QoKS5maW5kKHBhdGgpLiAgKnBhdGgqIGlzIHRoZSBlbGVtZW50IHRvIGxvb2sgZm9yLiBSZXR1cm5zIHRoZQotICAgICAgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgYGBOb25lYGAgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCisgICAgICBGaW5kcyB0aGUgZmlyc3QgdG9wbGV2ZWwgZWxlbWVudCBtYXRjaGluZyAqbWF0Y2gqLiAgKm1hdGNoKiBtYXkgYmUgYSB0YWcKKyAgICAgIG5hbWUgb3IgcGF0aC4gIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmQobWF0Y2gpLiAgUmV0dXJucyB0aGUgZmlyc3QgbWF0Y2hpbmcKKyAgICAgIGVsZW1lbnQsIG9yIGBgTm9uZWBgIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgogCiAKLSAgIC4uIG1ldGhvZDo6IGZpbmRhbGwocGF0aCkKKyAgIC4uIG1ldGhvZDo6IGZpbmRhbGwobWF0Y2gpCiAKLSAgICAgIEZpbmRzIGFsbCB0b3BsZXZlbCBlbGVtZW50cyB3aXRoIHRoZSBnaXZlbiB0YWcuIFNhbWUgYXMKLSAgICAgIGdldHJvb3QoKS5maW5kYWxsKHBhdGgpLiAgKnBhdGgqIGlzIHRoZSBlbGVtZW50IHRvIGxvb2sgZm9yLiBSZXR1cm5zIGEKLSAgICAgIGxpc3Qgb3IgOnRlcm06YGl0ZXJhdG9yYCBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywgaW4gZG9jdW1lbnQKLSAgICAgIG9yZGVyLgorICAgICAgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLiAgU2FtZSBhcworICAgICAgZ2V0cm9vdCgpLmZpbmRhbGwobWF0Y2gpLiAgKm1hdGNoKiBtYXkgYmUgYSB0YWcgbmFtZSBvciBwYXRoLiAgUmV0dXJucyBhCisgICAgICBsaXN0IGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlci4KIAogCi0gICAuLiBtZXRob2Q6OiBmaW5kdGV4dChwYXRoWywgZGVmYXVsdF0pCisgICAuLiBtZXRob2Q6OiBmaW5kdGV4dChtYXRjaCwgZGVmYXVsdD1Ob25lKQogCiAgICAgICBGaW5kcyB0aGUgZWxlbWVudCB0ZXh0IGZvciB0aGUgZmlyc3QgdG9wbGV2ZWwgZWxlbWVudCB3aXRoIGdpdmVuIHRhZy4KLSAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmR0ZXh0KHBhdGgpLiAqcGF0aCogaXMgdGhlIHRvcGxldmVsIGVsZW1lbnQgdG8gbG9vawotICAgICAgZm9yLiAqZGVmYXVsdCogaXMgdGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90Ci0gICAgICBmb3VuZC4gUmV0dXJucyB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciB0aGUKLSAgICAgIGRlZmF1bHQgdmFsdWUgbm8gZWxlbWVudCB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgdGhlIGVsZW1lbnQgaGFzIGlzCi0gICAgICBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0IGNvbnRlbnQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgU2FtZSBhcyBnZXRyb290KCkuZmluZHRleHQobWF0Y2gpLiAgKm1hdGNoKiBtYXkgYmUgYSB0YWcgbmFtZSBvciBwYXRoLgorICAgICAgKmRlZmF1bHQqIGlzIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZC4gIFJldHVybnMKKyAgICAgIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIHRoZSBkZWZhdWx0IHZhbHVlIG5vCisgICAgICBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudCBpcyBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0CisgICAgICBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KIAogCi0gICAuLiBtZXRob2Q6OiBnZXRpdGVyYXRvcihbdGFnXSkKKyAgIC4uIG1ldGhvZDo6IGdldGl0ZXJhdG9yKHRhZz1Ob25lKQogCi0gICAgICBDcmVhdGVzIGFuZCByZXR1cm5zIGEgdHJlZSBpdGVyYXRvciBmb3IgdGhlIHJvb3QgZWxlbWVudC4gIFRoZSBpdGVyYXRvcgotICAgICAgbG9vcHMgb3ZlciBhbGwgZWxlbWVudHMgaW4gdGhpcyB0cmVlLCBpbiBzZWN0aW9uIG9yZGVyLiAqdGFnKiBpcyB0aGUgdGFnCi0gICAgICB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKQorICAgICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgICAgVXNlIG1ldGhvZCA6bWV0aDpgRWxlbWVudFRyZWUuaXRlcmAgaW5zdGVhZC4KIAogCiAgICAuLiBtZXRob2Q6OiBnZXRyb290KCkKQEAgLTM1OCwxOSArNDM3LDM5IEBACiAgICAgICBSZXR1cm5zIHRoZSByb290IGVsZW1lbnQgZm9yIHRoaXMgdHJlZS4KIAogCi0gICAuLiBtZXRob2Q6OiBwYXJzZShzb3VyY2VbLCBwYXJzZXJdKQorICAgLi4gbWV0aG9kOjogaXRlcih0YWc9Tm9uZSkKIAotICAgICAgTG9hZHMgYW4gZXh0ZXJuYWwgWE1MIHNlY3Rpb24gaW50byB0aGlzIGVsZW1lbnQgdHJlZS4gKnNvdXJjZSogaXMgYSBmaWxlCi0gICAgICBuYW1lIG9yIGZpbGUgb2JqZWN0LiAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QKLSAgICAgIGdpdmVuLCB0aGUgc3RhbmRhcmQgWE1MVHJlZUJ1aWxkZXIgcGFyc2VyIGlzIHVzZWQuIFJldHVybnMgdGhlIHNlY3Rpb24KKyAgICAgIENyZWF0ZXMgYW5kIHJldHVybnMgYSB0cmVlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBlbGVtZW50LiAgVGhlIGl0ZXJhdG9yCisgICAgICBsb29wcyBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGlzIHRyZWUsIGluIHNlY3Rpb24gb3JkZXIuICAqdGFnKiBpcyB0aGUgdGFnCisgICAgICB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKQorCisKKyAgIC4uIG1ldGhvZDo6IGl0ZXJmaW5kKG1hdGNoKQorCisgICAgICBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguICBTYW1lIGFzCisgICAgICBnZXRyb290KCkuaXRlcmZpbmQobWF0Y2gpLiBSZXR1cm5zIGFuIGl0ZXJhYmxlIHlpZWxkaW5nIGFsbCBtYXRjaGluZworICAgICAgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpCisKKyAgICAgIExvYWRzIGFuIGV4dGVybmFsIFhNTCBzZWN0aW9uIGludG8gdGhpcyBlbGVtZW50IHRyZWUuICAqc291cmNlKiBpcyBhIGZpbGUKKyAgICAgIG5hbWUgb3IgZmlsZSBvYmplY3QuICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QKKyAgICAgIGdpdmVuLCB0aGUgc3RhbmRhcmQgWE1MUGFyc2VyIHBhcnNlciBpcyB1c2VkLiAgUmV0dXJucyB0aGUgc2VjdGlvbgogICAgICAgcm9vdCBlbGVtZW50LgogCiAKLSAgIC4uIG1ldGhvZDo6IHdyaXRlKGZpbGVbLCBlbmNvZGluZ10pCisgICAuLiBtZXRob2Q6OiB3cml0ZShmaWxlLCBlbmNvZGluZz0idXMtYXNjaWkiLCB4bWxfZGVjbGFyYXRpb249Tm9uZSwgbWV0aG9kPSJ4bWwiKQogCi0gICAgICBXcml0ZXMgdGhlIGVsZW1lbnQgdHJlZSB0byBhIGZpbGUsIGFzIFhNTC4gKmZpbGUqIGlzIGEgZmlsZSBuYW1lLCBvciBhCi0gICAgICBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHdyaXRpbmcuICplbmNvZGluZyogWzFdXyBpcyB0aGUgb3V0cHV0IGVuY29kaW5nCi0gICAgICAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCisgICAgICBXcml0ZXMgdGhlIGVsZW1lbnQgdHJlZSB0byBhIGZpbGUsIGFzIFhNTC4gICpmaWxlKiBpcyBhIGZpbGUgbmFtZSwgb3IgYQorICAgICAgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciB3cml0aW5nLiAgKmVuY29kaW5nKiBbMV1fIGlzIHRoZSBvdXRwdXQgZW5jb2RpbmcKKyAgICAgIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4gICp4bWxfZGVjbGFyYXRpb24qIGNvbnRyb2xzIGlmIGFuIFhNTCBkZWNsYXJhdGlvbgorICAgICAgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBmaWxlLiAgVXNlIEZhbHNlIGZvciBuZXZlciwgVHJ1ZSBmb3IgYWx3YXlzLCBOb25lCisgICAgICBmb3Igb25seSBpZiBub3QgVVMtQVNDSUkgb3IgVVRGLTggKGRlZmF1bHQgaXMgTm9uZSkuICAqbWV0aG9kKiBpcyBlaXRoZXIKKyAgICAgIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzIGBgInhtbCJgYCkuICBSZXR1cm5zIGFuCisgICAgICBlbmNvZGVkIHN0cmluZy4KIAogVGhpcyBpcyB0aGUgWE1MIGZpbGUgdGhhdCBpcyBnb2luZyB0byBiZSBtYW5pcHVsYXRlZDo6CiAKQEAgLTM4OSwxMyArNDg4LDEzIEBACiAgICAgPj4+IGZyb20geG1sLmV0cmVlLkVsZW1lbnRUcmVlIGltcG9ydCBFbGVtZW50VHJlZQogICAgID4+PiB0cmVlID0gRWxlbWVudFRyZWUoKQogICAgID4+PiB0cmVlLnBhcnNlKCJpbmRleC54aHRtbCIpCi0gICAgPEVsZW1lbnQgaHRtbCBhdCBiN2QzZjFlYz4KKyAgICA8RWxlbWVudCAnaHRtbCcgYXQgMHhiNzdlNmZhYz4KICAgICA+Pj4gcCA9IHRyZWUuZmluZCgiYm9keS9wIikgICAgICMgRmluZHMgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0YWcgcCBpbiBib2R5CiAgICAgPj4+IHAKLSAgICA8RWxlbWVudCBwIGF0IDg0MTZlMGM+Ci0gICAgPj4+IGxpbmtzID0gcC5nZXRpdGVyYXRvcigiYSIpICAjIFJldHVybnMgbGlzdCBvZiBhbGwgbGlua3MKKyAgICA8RWxlbWVudCAncCcgYXQgMHhiNzdlYzI2Yz4KKyAgICA+Pj4gbGlua3MgPSBsaXN0KHAuaXRlcigiYSIpKSAgICMgUmV0dXJucyBsaXN0IG9mIGFsbCBsaW5rcwogICAgID4+PiBsaW5rcwotICAgIFs8RWxlbWVudCBhIGF0IGI3ZDRmOWVjPiwgPEVsZW1lbnQgYSBhdCBiN2Q0ZmIwYz5dCisgICAgWzxFbGVtZW50ICdhJyBhdCAweGI3N2VjMmFjPiwgPEVsZW1lbnQgJ2EnIGF0IDB4Yjc3ZWMxY2M+XQogICAgID4+PiBmb3IgaSBpbiBsaW5rczogICAgICAgICAgICAgIyBJdGVyYXRlcyB0aHJvdWdoIGFsbCBmb3VuZCBsaW5rcwogICAgIC4uLiAgICAgaS5hdHRyaWJbInRhcmdldCJdID0gImJsYW5rIgogICAgID4+PiB0cmVlLndyaXRlKCJvdXRwdXQueGh0bWwiKQpAQCAtNDA2LDE0ICs1MDUsMTQgQEAKIC0tLS0tLS0tLS0tLS0KIAogCi0uLiBjbGFzczo6IFFOYW1lKHRleHRfb3JfdXJpWywgdGFnXSkKKy4uIGNsYXNzOjogUU5hbWUodGV4dF9vcl91cmksIHRhZz1Ob25lKQogCi0gICBRTmFtZSB3cmFwcGVyLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB3cmFwIGEgUU5hbWUgYXR0cmlidXRlIHZhbHVlLCBpbiBvcmRlciB0bwotICAgZ2V0IHByb3BlciBuYW1lc3BhY2UgaGFuZGxpbmcgb24gb3V0cHV0LiAqdGV4dF9vcl91cmkqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcKLSAgIHRoZSBRTmFtZSB2YWx1ZSwgaW4gdGhlIGZvcm0ge3VyaX1sb2NhbCwgb3IsIGlmIHRoZSB0YWcgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZQotICAgVVJJIHBhcnQgb2YgYSBRTmFtZS4gSWYgKnRhZyogaXMgZ2l2ZW4sIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBhbgotICAgVVJJLCBhbmQgdGhpcyBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBhIGxvY2FsIG5hbWUuIDpjbGFzczpgUU5hbWVgIGluc3RhbmNlcwotICAgYXJlIG9wYXF1ZS4KKyAgIFFOYW1lIHdyYXBwZXIuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYSBRTmFtZSBhdHRyaWJ1dGUgdmFsdWUsIGluIG9yZGVyCisgICB0byBnZXQgcHJvcGVyIG5hbWVzcGFjZSBoYW5kbGluZyBvbiBvdXRwdXQuICAqdGV4dF9vcl91cmkqIGlzIGEgc3RyaW5nCisgICBjb250YWluaW5nIHRoZSBRTmFtZSB2YWx1ZSwgaW4gdGhlIGZvcm0ge3VyaX1sb2NhbCwgb3IsIGlmIHRoZSB0YWcgYXJndW1lbnQKKyAgIGlzIGdpdmVuLCB0aGUgVVJJIHBhcnQgb2YgYSBRTmFtZS4gIElmICp0YWcqIGlzIGdpdmVuLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMKKyAgIGludGVycHJldGVkIGFzIGFuIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhbCBuYW1lLgorICAgOmNsYXNzOmBRTmFtZWAgaW5zdGFuY2VzIGFyZSBvcGFxdWUuCiAKIAogLi4gX2VsZW1lbnR0cmVlLXRyZWVidWlsZGVyLW9iamVjdHM6CkBAIC00MjIsNzYgKzUyMSw5MSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKLS4uIGNsYXNzOjogVHJlZUJ1aWxkZXIoW2VsZW1lbnRfZmFjdG9yeV0pCisuLiBjbGFzczo6IFRyZWVCdWlsZGVyKGVsZW1lbnRfZmFjdG9yeT1Ob25lKQogCi0gICBHZW5lcmljIGVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIuICBUaGlzIGJ1aWxkZXIgY29udmVydHMgYSBzZXF1ZW5jZSBvZiBzdGFydCwKLSAgIGRhdGEsIGFuZCBlbmQgbWV0aG9kIGNhbGxzIHRvIGEgd2VsbC1mb3JtZWQgZWxlbWVudCBzdHJ1Y3R1cmUuIFlvdSBjYW4gdXNlIHRoaXMKLSAgIGNsYXNzIHRvIGJ1aWxkIGFuIGVsZW1lbnQgc3RydWN0dXJlIHVzaW5nIGEgY3VzdG9tIFhNTCBwYXJzZXIsIG9yIGEgcGFyc2VyIGZvcgotICAgc29tZSBvdGhlciBYTUwtbGlrZSBmb3JtYXQuIFRoZSAqZWxlbWVudF9mYWN0b3J5KiBpcyBjYWxsZWQgdG8gY3JlYXRlIG5ldwotICAgRWxlbWVudCBpbnN0YW5jZXMgd2hlbiBnaXZlbi4KKyAgIEdlbmVyaWMgZWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlci4gIFRoaXMgYnVpbGRlciBjb252ZXJ0cyBhIHNlcXVlbmNlIG9mCisgICBzdGFydCwgZGF0YSwgYW5kIGVuZCBtZXRob2QgY2FsbHMgdG8gYSB3ZWxsLWZvcm1lZCBlbGVtZW50IHN0cnVjdHVyZS4gIFlvdQorICAgY2FuIHVzZSB0aGlzIGNsYXNzIHRvIGJ1aWxkIGFuIGVsZW1lbnQgc3RydWN0dXJlIHVzaW5nIGEgY3VzdG9tIFhNTCBwYXJzZXIsCisgICBvciBhIHBhcnNlciBmb3Igc29tZSBvdGhlciBYTUwtbGlrZSBmb3JtYXQuICBUaGUgKmVsZW1lbnRfZmFjdG9yeSogaXMgY2FsbGVkCisgICB0byBjcmVhdGUgbmV3IDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2VzIHdoZW4gZ2l2ZW4uCiAKIAogICAgLi4gbWV0aG9kOjogY2xvc2UoKQogCi0gICAgICBGbHVzaGVzIHRoZSBwYXJzZXIgYnVmZmVycywgYW5kIHJldHVybnMgdGhlIHRvcGxldmVsIGRvY3VtZW50Ci0gICAgICBlbGVtZW50LiBSZXR1cm5zIGFuIEVsZW1lbnQgaW5zdGFuY2UuCisgICAgICBGbHVzaGVzIHRoZSBidWlsZGVyIGJ1ZmZlcnMsIGFuZCByZXR1cm5zIHRoZSB0b3BsZXZlbCBkb2N1bWVudAorICAgICAgZWxlbWVudC4gIFJldHVybnMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4KIAogCiAgICAuLiBtZXRob2Q6OiBkYXRhKGRhdGEpCiAKLSAgICAgIEFkZHMgdGV4dCB0byB0aGUgY3VycmVudCBlbGVtZW50LiAqZGF0YSogaXMgYSBzdHJpbmcuICBUaGlzIHNob3VsZCBiZQotICAgICAgZWl0aGVyIGFuIDgtYml0IHN0cmluZyBjb250YWluaW5nIEFTQ0lJIHRleHQsIG9yIGEgVW5pY29kZSBzdHJpbmcuCisgICAgICBBZGRzIHRleHQgdG8gdGhlIGN1cnJlbnQgZWxlbWVudC4gICpkYXRhKiBpcyBhIHN0cmluZy4gIFRoaXMgc2hvdWxkIGJlCisgICAgICBlaXRoZXIgYSBieXRlc3RyaW5nLCBvciBhIFVuaWNvZGUgc3RyaW5nLgogCiAKICAgIC4uIG1ldGhvZDo6IGVuZCh0YWcpCiAKLSAgICAgIENsb3NlcyB0aGUgY3VycmVudCBlbGVtZW50LiAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLiBSZXR1cm5zIHRoZSBjbG9zZWQKLSAgICAgIGVsZW1lbnQuCisgICAgICBDbG9zZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuICBSZXR1cm5zIHRoZQorICAgICAgY2xvc2VkIGVsZW1lbnQuCiAKIAogICAgLi4gbWV0aG9kOjogc3RhcnQodGFnLCBhdHRycykKIAotICAgICAgT3BlbnMgYSBuZXcgZWxlbWVudC4gKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4gKmF0dHJzKiBpcyBhIGRpY3Rpb25hcnkKLSAgICAgIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLiBSZXR1cm5zIHRoZSBvcGVuZWQgZWxlbWVudC4KKyAgICAgIE9wZW5zIGEgbmV3IGVsZW1lbnQuICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLiAgKmF0dHJzKiBpcyBhIGRpY3Rpb25hcnkKKyAgICAgIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLiAgUmV0dXJucyB0aGUgb3BlbmVkIGVsZW1lbnQuCiAKIAotLi4gX2VsZW1lbnR0cmVlLXhtbHRyZWVidWlsZGVyLW9iamVjdHM6CisgICBJbiBhZGRpdGlvbiwgYSBjdXN0b20gOmNsYXNzOmBUcmVlQnVpbGRlcmAgb2JqZWN0IGNhbiBwcm92aWRlIHRoZQorICAgZm9sbG93aW5nIG1ldGhvZDoKIAotWE1MVHJlZUJ1aWxkZXIgT2JqZWN0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLi4gbWV0aG9kOjogZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtKQorCisgICAgICBIYW5kbGVzIGEgZG9jdHlwZSBkZWNsYXJhdGlvbi4gICpuYW1lKiBpcyB0aGUgZG9jdHlwZSBuYW1lLiAgKnB1YmlkKiBpcworICAgICAgdGhlIHB1YmxpYyBpZGVudGlmaWVyLiAgKnN5c3RlbSogaXMgdGhlIHN5c3RlbSBpZGVudGlmaWVyLiAgVGhpcyBtZXRob2QKKyAgICAgIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBkZWZhdWx0IDpjbGFzczpgVHJlZUJ1aWxkZXJgIGNsYXNzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogCi0uLiBjbGFzczo6IFhNTFRyZWVCdWlsZGVyKFtodG1sLF0gW3RhcmdldF0pCisuLiBfZWxlbWVudHRyZWUteG1scGFyc2VyLW9iamVjdHM6CiAKLSAgIEVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIgZm9yIFhNTCBzb3VyY2UgZGF0YSwgYmFzZWQgb24gdGhlIGV4cGF0IHBhcnNlci4gKmh0bWwqCi0gICBhcmUgcHJlZGVmaW5lZCBIVE1MIGVudGl0aWVzLiAgVGhpcyBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQKLSAgIGltcGxlbWVudGF0aW9uLiAqdGFyZ2V0KiBpcyB0aGUgdGFyZ2V0IG9iamVjdC4gIElmIG9taXR0ZWQsIHRoZSBidWlsZGVyIHVzZXMgYW4KLSAgIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCBUcmVlQnVpbGRlciBjbGFzcy4KK1hNTFBhcnNlciBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLQorCisKKy4uIGNsYXNzOjogWE1MUGFyc2VyKGh0bWw9MCwgdGFyZ2V0PU5vbmUsIGVuY29kaW5nPU5vbmUpCisKKyAgIDpjbGFzczpgRWxlbWVudGAgc3RydWN0dXJlIGJ1aWxkZXIgZm9yIFhNTCBzb3VyY2UgZGF0YSwgYmFzZWQgb24gdGhlIGV4cGF0CisgICBwYXJzZXIuICAqaHRtbCogYXJlIHByZWRlZmluZWQgSFRNTCBlbnRpdGllcy4gIFRoaXMgZmxhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5CisgICB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gICp0YXJnZXQqIGlzIHRoZSB0YXJnZXQgb2JqZWN0LiAgSWYgb21pdHRlZCwgdGhlCisgICBidWlsZGVyIHVzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIFRyZWVCdWlsZGVyIGNsYXNzLiAgKmVuY29kaW5nKiBbMV1fCisgICBpcyBvcHRpb25hbC4gIElmIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlCisgICBYTUwgZmlsZS4KIAogCiAgICAuLiBtZXRob2Q6OiBjbG9zZSgpCiAKLSAgICAgIEZpbmlzaGVzIGZlZWRpbmcgZGF0YSB0byB0aGUgcGFyc2VyLiBSZXR1cm5zIGFuIGVsZW1lbnQgc3RydWN0dXJlLgorICAgICAgRmluaXNoZXMgZmVlZGluZyBkYXRhIHRvIHRoZSBwYXJzZXIuICBSZXR1cm5zIGFuIGVsZW1lbnQgc3RydWN0dXJlLgogCiAKICAgIC4uIG1ldGhvZDo6IGRvY3R5cGUobmFtZSwgcHViaWQsIHN5c3RlbSkKIAotICAgICAgSGFuZGxlcyBhIGRvY3R5cGUgZGVjbGFyYXRpb24uICpuYW1lKiBpcyB0aGUgZG9jdHlwZSBuYW1lLiAqcHViaWQqIGlzIHRoZQotICAgICAgcHVibGljIGlkZW50aWZpZXIuICpzeXN0ZW0qIGlzIHRoZSBzeXN0ZW0gaWRlbnRpZmllci4KKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgICAgIERlZmluZSB0aGUgOm1ldGg6YFRyZWVCdWlsZGVyLmRvY3R5cGVgIG1ldGhvZCBvbiBhIGN1c3RvbSBUcmVlQnVpbGRlcgorICAgICAgICAgdGFyZ2V0LgogCiAKICAgIC4uIG1ldGhvZDo6IGZlZWQoZGF0YSkKIAotICAgICAgRmVlZHMgZGF0YSB0byB0aGUgcGFyc2VyLiAqZGF0YSogaXMgZW5jb2RlZCBkYXRhLgorICAgICAgRmVlZHMgZGF0YSB0byB0aGUgcGFyc2VyLiAgKmRhdGEqIGlzIGVuY29kZWQgZGF0YS4KIAotOm1ldGg6YFhNTFRyZWVCdWlsZGVyLmZlZWRgIGNhbGxzICp0YXJnZXQqXCdzIDptZXRoOmBzdGFydGAgbWV0aG9kCis6bWV0aDpgWE1MUGFyc2VyLmZlZWRgIGNhbGxzICp0YXJnZXQqXCdzIDptZXRoOmBzdGFydGAgbWV0aG9kCiBmb3IgZWFjaCBvcGVuaW5nIHRhZywgaXRzIDptZXRoOmBlbmRgIG1ldGhvZCBmb3IgZWFjaCBjbG9zaW5nIHRhZywKLWFuZCBkYXRhIGlzIHByb2Nlc3NlZCBieSBtZXRob2QgOm1ldGg6YGRhdGFgLiA6bWV0aDpgWE1MVHJlZUJ1aWxkZXIuY2xvc2VgCithbmQgZGF0YSBpcyBwcm9jZXNzZWQgYnkgbWV0aG9kIDptZXRoOmBkYXRhYC4gIDptZXRoOmBYTUxQYXJzZXIuY2xvc2VgCiBjYWxscyAqdGFyZ2V0KlwncyBtZXRob2QgOm1ldGg6YGNsb3NlYC4KLTpjbGFzczpgWE1MVHJlZUJ1aWxkZXJgIGNhbiBiZSB1c2VkIG5vdCBvbmx5IGZvciBidWlsZGluZyBhIHRyZWUgc3RydWN0dXJlLgorOmNsYXNzOmBYTUxQYXJzZXJgIGNhbiBiZSB1c2VkIG5vdCBvbmx5IGZvciBidWlsZGluZyBhIHRyZWUgc3RydWN0dXJlLgogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGNvdW50aW5nIHRoZSBtYXhpbXVtIGRlcHRoIG9mIGFuIFhNTCBmaWxlOjoKIAotICAgID4+PiBmcm9tIHhtbC5ldHJlZS5FbGVtZW50VHJlZSBpbXBvcnQgWE1MVHJlZUJ1aWxkZXIKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUuRWxlbWVudFRyZWUgaW1wb3J0IFhNTFBhcnNlcgogICAgID4+PiBjbGFzcyBNYXhEZXB0aDogICAgICAgICAgICAgICAgICAgICAjIFRoZSB0YXJnZXQgb2JqZWN0IG9mIHRoZSBwYXJzZXIKICAgICAuLi4gICAgIG1heERlcHRoID0gMAogICAgIC4uLiAgICAgZGVwdGggPSAwCkBAIC01MDcsNyArNjIxLDcgQEAKICAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5tYXhEZXB0aAogICAgIC4uLgogICAgID4+PiB0YXJnZXQgPSBNYXhEZXB0aCgpCi0gICAgPj4+IHBhcnNlciA9IFhNTFRyZWVCdWlsZGVyKHRhcmdldD10YXJnZXQpCisgICAgPj4+IHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9dGFyZ2V0KQogICAgID4+PiBleGFtcGxlWG1sID0gIiIiCiAgICAgLi4uIDxhPgogICAgIC4uLiAgIDxiPgpAQCAtNTI3LDcgKzY0MSw2IEBACiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIFRoZSBlbmNvZGluZyBzdHJpbmcgaW5jbHVkZWQgaW4gWE1MIG91dHB1dCBzaG91bGQgY29uZm9ybSB0byB0aGUKLSAgIGFwcHJvcHJpYXRlIHN0YW5kYXJkcy4gRm9yIGV4YW1wbGUsICJVVEYtOCIgaXMgdmFsaWQsIGJ1dCAiVVRGOCIgaXMKLSAgIG5vdC4gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKKyAgIGFwcHJvcHJpYXRlIHN0YW5kYXJkcy4gIEZvciBleGFtcGxlLCAiVVRGLTgiIGlzIHZhbGlkLCBidXQgIlVURjgiIGlzCisgICBub3QuICBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwNi9SRUMteG1sMTEtMjAwNjA4MTYvI05ULUVuY29kaW5nRGVjbAogICAgYW5kIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZXRyZWUucnN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjg1YjNiLi4wMDAwMDAwCi0tLSBhL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5yc3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi06bW9kOmB4bWwuZXRyZWVgIC0tLSBUaGUgRWxlbWVudFRyZWUgQVBJIGZvciBYTUwKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0uLiBtb2R1bGU6OiB4bWwuZXRyZWUKLSAgIDpzeW5vcHNpczogUGFja2FnZSBjb250YWluaW5nIGNvbW1vbiBFbGVtZW50VHJlZSBtb2R1bGVzLgotLi4gbW9kdWxlYXV0aG9yOjogRnJlZHJpayBMdW5kaCA8ZnJlZHJpa0BweXRob253YXJlLmNvbT4KLQotCi0uLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKLQotVGhlIEVsZW1lbnRUcmVlIHBhY2thZ2UgaXMgYSBzaW1wbGUsIGVmZmljaWVudCwgYW5kIHF1aXRlIHBvcHVsYXIgIGxpYnJhcnkgZm9yCi1YTUwgbWFuaXB1bGF0aW9uIGluIFB5dGhvbi4gICAgVGhlIDptb2Q6YHhtbC5ldHJlZWAgcGFja2FnZSBjb250YWlucyB0aGUgbW9zdAotY29tbW9uIGNvbXBvbmVudHMgIGZyb20gdGhlIEVsZW1lbnRUcmVlIEFQSSBsaWJyYXJ5LiAgSW4gdGhlIGN1cnJlbnQgcmVsZWFzZSwKLXRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgOm1vZDpgRWxlbWVudFRyZWVgLCAgOm1vZDpgRWxlbWVudFBhdGhgLCBhbmQKLTptb2Q6YEVsZW1lbnRJbmNsdWRlYCBtb2R1bGVzIGZyb20gdGhlIGZ1bGwgIEVsZW1lbnRUcmVlIGRpc3RyaWJ1dGlvbi4KLQotLi4gWFhYIFRvIGJlIGNvbnRpbnVlZCEKLQotCi0uLiBzZWVhbHNvOjoKLQotICAgYEVsZW1lbnRUcmVlIE92ZXJ2aWV3IDxodHRwOi8vZWZmYm90Lm9yZy90YWcvZWxlbWVudHRyZWU+YF8KLSAgICAgIFRoZSBob21lIHBhZ2UgZm9yIDptb2Q6YEVsZW1lbnRUcmVlYC4gIFRoaXMgaW5jbHVkZXMgbGlua3MgIHRvIGFkZGl0aW9uYWwKLSAgICAgIGRvY3VtZW50YXRpb24sIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucywgYW5kICBvdGhlciBhZGQtb25zLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5yc3QKaW5kZXggODMyZjFkYy4uMjNmNDI5ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIucnN0CkBAIC01Miw1MiArNTIsNTcgQEAKIAogLi4gZGF0YTo6IGZlYXR1cmVfbmFtZXNwYWNlcwogCi0gICBWYWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZXMiYGAgLS0tICB0cnVlOiBQZXJmb3JtIE5hbWVzcGFjZQotICAgcHJvY2Vzc2luZy4gLS0tICBmYWxzZTogT3B0aW9uYWxseSBkbyBub3QgcGVyZm9ybSBOYW1lc3BhY2UgcHJvY2Vzc2luZyAoaW1wbGllcwotICAgbmFtZXNwYWNlLXByZWZpeGVzOyBkZWZhdWx0KS4gLS0tICBhY2Nlc3M6IChwYXJzaW5nKSByZWFkLW9ubHk7IChub3QgcGFyc2luZykKLSAgIHJlYWQvd3JpdGUKKyAgIHwgdmFsdWU6IGBgImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzImBgCisgICB8IHRydWU6IFBlcmZvcm0gTmFtZXNwYWNlIHByb2Nlc3NpbmcuCisgICB8IGZhbHNlOiBPcHRpb25hbGx5IGRvIG5vdCBwZXJmb3JtIE5hbWVzcGFjZSBwcm9jZXNzaW5nIChpbXBsaWVzCisgICAgIG5hbWVzcGFjZS1wcmVmaXhlczsgZGVmYXVsdCkuCisgICB8IGFjY2VzczogKHBhcnNpbmcpIHJlYWQtb25seTsgKG5vdCBwYXJzaW5nKSByZWFkL3dyaXRlCiAKIAogLi4gZGF0YTo6IGZlYXR1cmVfbmFtZXNwYWNlX3ByZWZpeGVzCiAKLSAgIFZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlLXByZWZpeGVzImBgIC0tLSB0cnVlOiBSZXBvcnQKLSAgIHRoZSBvcmlnaW5hbCBwcmVmaXhlZCBuYW1lcyBhbmQgYXR0cmlidXRlcyB1c2VkIGZvciBOYW1lc3BhY2UKLSAgIGRlY2xhcmF0aW9ucy4gLS0tIGZhbHNlOiBEbyBub3QgcmVwb3J0IGF0dHJpYnV0ZXMgdXNlZCBmb3IgTmFtZXNwYWNlCi0gICBkZWNsYXJhdGlvbnMsIGFuZCBvcHRpb25hbGx5IGRvIG5vdCByZXBvcnQgb3JpZ2luYWwgcHJlZml4ZWQgbmFtZXMKLSAgIChkZWZhdWx0KS4gLS0tIGFjY2VzczogKHBhcnNpbmcpIHJlYWQtb25seTsgKG5vdCBwYXJzaW5nKSByZWFkL3dyaXRlCisgICB8IHZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlLXByZWZpeGVzImBgCisgICB8IHRydWU6IFJlcG9ydCB0aGUgb3JpZ2luYWwgcHJlZml4ZWQgbmFtZXMgYW5kIGF0dHJpYnV0ZXMgdXNlZCBmb3IgTmFtZXNwYWNlCisgICAgIGRlY2xhcmF0aW9ucy4KKyAgIHwgZmFsc2U6IERvIG5vdCByZXBvcnQgYXR0cmlidXRlcyB1c2VkIGZvciBOYW1lc3BhY2UgZGVjbGFyYXRpb25zLCBhbmQKKyAgICAgb3B0aW9uYWxseSBkbyBub3QgcmVwb3J0IG9yaWdpbmFsIHByZWZpeGVkIG5hbWVzIChkZWZhdWx0KS4KKyAgIHwgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90IHBhcnNpbmcpIHJlYWQvd3JpdGUKIAogCiAuLiBkYXRhOjogZmVhdHVyZV9zdHJpbmdfaW50ZXJuaW5nCiAKLSAgIFZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvc3RyaW5nLWludGVybmluZyJgYCAtLS0gIHRydWU6IEFsbCBlbGVtZW50Ci0gICBuYW1lcywgcHJlZml4ZXMsIGF0dHJpYnV0ZSBuYW1lcywgTmFtZXNwYWNlIFVSSXMsIGFuZCBsb2NhbCBuYW1lcyBhcmUgaW50ZXJuZWQKLSAgIHVzaW5nIHRoZSBidWlsdC1pbiBpbnRlcm4gZnVuY3Rpb24uIC0tLSAgZmFsc2U6IE5hbWVzIGFyZSBub3QgbmVjZXNzYXJpbHkKLSAgIGludGVybmVkLCBhbHRob3VnaCB0aGV5IG1heSBiZSAoZGVmYXVsdCkuIC0tLSAgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90Ci0gICBwYXJzaW5nKSByZWFkL3dyaXRlCisgICB8IHZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvc3RyaW5nLWludGVybmluZyJgYAorICAgfCB0cnVlOiBBbGwgZWxlbWVudCBuYW1lcywgcHJlZml4ZXMsIGF0dHJpYnV0ZSBuYW1lcywgTmFtZXNwYWNlIFVSSXMsIGFuZAorICAgICBsb2NhbCBuYW1lcyBhcmUgaW50ZXJuZWQgdXNpbmcgdGhlIGJ1aWx0LWluIGludGVybiBmdW5jdGlvbi4KKyAgIHwgZmFsc2U6IE5hbWVzIGFyZSBub3QgbmVjZXNzYXJpbHkgaW50ZXJuZWQsIGFsdGhvdWdoIHRoZXkgbWF5IGJlIChkZWZhdWx0KS4KKyAgIHwgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90IHBhcnNpbmcpIHJlYWQvd3JpdGUKIAogCiAuLiBkYXRhOjogZmVhdHVyZV92YWxpZGF0aW9uCiAKLSAgIFZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdmFsaWRhdGlvbiJgYCAtLS0gdHJ1ZTogUmVwb3J0IGFsbAotICAgdmFsaWRhdGlvbiBlcnJvcnMgKGltcGxpZXMgZXh0ZXJuYWwtZ2VuZXJhbC1lbnRpdGllcyBhbmQKLSAgIGV4dGVybmFsLXBhcmFtZXRlci1lbnRpdGllcykuIC0tLSBmYWxzZTogRG8gbm90IHJlcG9ydCB2YWxpZGF0aW9uIGVycm9ycy4gLS0tCi0gICBhY2Nlc3M6IChwYXJzaW5nKSByZWFkLW9ubHk7IChub3QgcGFyc2luZykgcmVhZC93cml0ZQorICAgfCB2YWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iYGAKKyAgIHwgdHJ1ZTogUmVwb3J0IGFsbCB2YWxpZGF0aW9uIGVycm9ycyAoaW1wbGllcyBleHRlcm5hbC1nZW5lcmFsLWVudGl0aWVzIGFuZAorICAgICBleHRlcm5hbC1wYXJhbWV0ZXItZW50aXRpZXMpLgorICAgfCBmYWxzZTogRG8gbm90IHJlcG9ydCB2YWxpZGF0aW9uIGVycm9ycy4KKyAgIHwgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90IHBhcnNpbmcpIHJlYWQvd3JpdGUKIAogCiAuLiBkYXRhOjogZmVhdHVyZV9leHRlcm5hbF9nZXMKIAotICAgVmFsdWU6IGBgImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9leHRlcm5hbC1nZW5lcmFsLWVudGl0aWVzImBgIC0tLSAgdHJ1ZToKLSAgIEluY2x1ZGUgYWxsIGV4dGVybmFsIGdlbmVyYWwgKHRleHQpIGVudGl0aWVzLiAtLS0gIGZhbHNlOiBEbyBub3QgaW5jbHVkZQotICAgZXh0ZXJuYWwgZ2VuZXJhbCBlbnRpdGllcy4gLS0tICBhY2Nlc3M6IChwYXJzaW5nKSByZWFkLW9ubHk7IChub3QgcGFyc2luZykKLSAgIHJlYWQvd3JpdGUKKyAgIHwgdmFsdWU6IGBgImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9leHRlcm5hbC1nZW5lcmFsLWVudGl0aWVzImBgCisgICB8IHRydWU6IEluY2x1ZGUgYWxsIGV4dGVybmFsIGdlbmVyYWwgKHRleHQpIGVudGl0aWVzLgorICAgfCBmYWxzZTogRG8gbm90IGluY2x1ZGUgZXh0ZXJuYWwgZ2VuZXJhbCBlbnRpdGllcy4KKyAgIHwgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90IHBhcnNpbmcpIHJlYWQvd3JpdGUKIAogCiAuLiBkYXRhOjogZmVhdHVyZV9leHRlcm5hbF9wZXMKIAotICAgVmFsdWU6IGBgImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9leHRlcm5hbC1wYXJhbWV0ZXItZW50aXRpZXMiYGAgLS0tICB0cnVlOgotICAgSW5jbHVkZSBhbGwgZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0aWVzLCBpbmNsdWRpbmcgdGhlIGV4dGVybmFsIERURCBzdWJzZXQuIC0tLQotICAgZmFsc2U6IERvIG5vdCBpbmNsdWRlIGFueSBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMsIGV2ZW4gdGhlIGV4dGVybmFsIERURAotICAgc3Vic2V0LiAtLS0gIGFjY2VzczogKHBhcnNpbmcpIHJlYWQtb25seTsgKG5vdCBwYXJzaW5nKSByZWFkL3dyaXRlCisgICB8IHZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvZXh0ZXJuYWwtcGFyYW1ldGVyLWVudGl0aWVzImBgCisgICB8IHRydWU6IEluY2x1ZGUgYWxsIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcywgaW5jbHVkaW5nIHRoZSBleHRlcm5hbCBEVEQKKyAgICAgc3Vic2V0LgorICAgfCBmYWxzZTogRG8gbm90IGluY2x1ZGUgYW55IGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcywgZXZlbiB0aGUgZXh0ZXJuYWwKKyAgICAgRFREIHN1YnNldC4KKyAgIHwgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90IHBhcnNpbmcpIHJlYWQvd3JpdGUKIAogCiAuLiBkYXRhOjogYWxsX2ZlYXR1cmVzCkBAIC0xMDcsMzQgKzExMiwzOCBAQAogCiAuLiBkYXRhOjogcHJvcGVydHlfbGV4aWNhbF9oYW5kbGVyCiAKLSAgIFZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy9sZXhpY2FsLWhhbmRsZXIiYGAgLS0tICBkYXRhIHR5cGU6Ci0gICB4bWwuc2F4LnNheDJsaWIuTGV4aWNhbEhhbmRsZXIgKG5vdCBzdXBwb3J0ZWQgaW4gUHl0aG9uIDIpIC0tLSAgZGVzY3JpcHRpb246IEFuCi0gICBvcHRpb25hbCBleHRlbnNpb24gaGFuZGxlciBmb3IgbGV4aWNhbCBldmVudHMgbGlrZSBjb21tZW50cy4gLS0tICBhY2Nlc3M6Ci0gICByZWFkL3dyaXRlCisgICB8IHZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy9sZXhpY2FsLWhhbmRsZXIiYGAKKyAgIHwgZGF0YSB0eXBlOiB4bWwuc2F4LnNheDJsaWIuTGV4aWNhbEhhbmRsZXIgKG5vdCBzdXBwb3J0ZWQgaW4gUHl0aG9uIDIpCisgICB8IGRlc2NyaXB0aW9uOiBBbiBvcHRpb25hbCBleHRlbnNpb24gaGFuZGxlciBmb3IgbGV4aWNhbCBldmVudHMgbGlrZQorICAgICBjb21tZW50cy4KKyAgIHwgYWNjZXNzOiByZWFkL3dyaXRlCiAKIAogLi4gZGF0YTo6IHByb3BlcnR5X2RlY2xhcmF0aW9uX2hhbmRsZXIKIAotICAgVmFsdWU6IGBgImh0dHA6Ly94bWwub3JnL3NheC9wcm9wZXJ0aWVzL2RlY2xhcmF0aW9uLWhhbmRsZXIiYGAgLS0tICBkYXRhIHR5cGU6Ci0gICB4bWwuc2F4LnNheDJsaWIuRGVjbEhhbmRsZXIgKG5vdCBzdXBwb3J0ZWQgaW4gUHl0aG9uIDIpIC0tLSAgZGVzY3JpcHRpb246IEFuCi0gICBvcHRpb25hbCBleHRlbnNpb24gaGFuZGxlciBmb3IgRFRELXJlbGF0ZWQgZXZlbnRzIG90aGVyIHRoYW4gbm90YXRpb25zIGFuZAotICAgdW5wYXJzZWQgZW50aXRpZXMuIC0tLSAgYWNjZXNzOiByZWFkL3dyaXRlCisgICB8IHZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy9kZWNsYXJhdGlvbi1oYW5kbGVyImBgCisgICB8IGRhdGEgdHlwZTogeG1sLnNheC5zYXgybGliLkRlY2xIYW5kbGVyIChub3Qgc3VwcG9ydGVkIGluIFB5dGhvbiAyKQorICAgfCBkZXNjcmlwdGlvbjogQW4gb3B0aW9uYWwgZXh0ZW5zaW9uIGhhbmRsZXIgZm9yIERURC1yZWxhdGVkIGV2ZW50cyBvdGhlcgorICAgICB0aGFuIG5vdGF0aW9ucyBhbmQgdW5wYXJzZWQgZW50aXRpZXMuCisgICB8IGFjY2VzczogcmVhZC93cml0ZQogCiAKIC4uIGRhdGE6OiBwcm9wZXJ0eV9kb21fbm9kZQogCi0gICBWYWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L3Byb3BlcnRpZXMvZG9tLW5vZGUiYGAgLS0tICBkYXRhIHR5cGU6Ci0gICBvcmcudzNjLmRvbS5Ob2RlIChub3Qgc3VwcG9ydGVkIGluIFB5dGhvbiAyKSAgLS0tICBkZXNjcmlwdGlvbjogV2hlbiBwYXJzaW5nLAotICAgdGhlIGN1cnJlbnQgRE9NIG5vZGUgYmVpbmcgdmlzaXRlZCBpZiB0aGlzIGlzIGEgRE9NIGl0ZXJhdG9yOyB3aGVuIG5vdCBwYXJzaW5nLAotICAgdGhlIHJvb3QgRE9NIG5vZGUgZm9yIGl0ZXJhdGlvbi4gLS0tICBhY2Nlc3M6IChwYXJzaW5nKSByZWFkLW9ubHk7IChub3QgcGFyc2luZykKLSAgIHJlYWQvd3JpdGUKKyAgIHwgdmFsdWU6IGBgImh0dHA6Ly94bWwub3JnL3NheC9wcm9wZXJ0aWVzL2RvbS1ub2RlImBgCisgICB8IGRhdGEgdHlwZTogb3JnLnczYy5kb20uTm9kZSAobm90IHN1cHBvcnRlZCBpbiBQeXRob24gMikKKyAgIHwgZGVzY3JpcHRpb246IFdoZW4gcGFyc2luZywgdGhlIGN1cnJlbnQgRE9NIG5vZGUgYmVpbmcgdmlzaXRlZCBpZiB0aGlzIGlzCisgICAgIGEgRE9NIGl0ZXJhdG9yOyB3aGVuIG5vdCBwYXJzaW5nLCB0aGUgcm9vdCBET00gbm9kZSBmb3IgaXRlcmF0aW9uLgorICAgfCBhY2Nlc3M6IChwYXJzaW5nKSByZWFkLW9ubHk7IChub3QgcGFyc2luZykgcmVhZC93cml0ZQogCiAKIC4uIGRhdGE6OiBwcm9wZXJ0eV94bWxfc3RyaW5nCiAKLSAgIFZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy94bWwtc3RyaW5nImBgIC0tLSAgZGF0YSB0eXBlOiBTdHJpbmcgLS0tCi0gICBkZXNjcmlwdGlvbjogVGhlIGxpdGVyYWwgc3RyaW5nIG9mIGNoYXJhY3RlcnMgdGhhdCB3YXMgdGhlIHNvdXJjZSBmb3IgdGhlCi0gICBjdXJyZW50IGV2ZW50LiAtLS0gIGFjY2VzczogcmVhZC1vbmx5CisgICB8IHZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy94bWwtc3RyaW5nImBgCisgICB8IGRhdGEgdHlwZTogU3RyaW5nCisgICB8IGRlc2NyaXB0aW9uOiBUaGUgbGl0ZXJhbCBzdHJpbmcgb2YgY2hhcmFjdGVycyB0aGF0IHdhcyB0aGUgc291cmNlIGZvciB0aGUKKyAgICAgY3VycmVudCBldmVudC4KKyAgIHwgYWNjZXNzOiByZWFkLW9ubHkKIAogCiAuLiBkYXRhOjogYWxsX3Byb3BlcnRpZXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLnJzdAppbmRleCA3NWM3ZDViLi40YjNjMThhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWwuc2F4LnJlYWRlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLnNheC5yZWFkZXIucnN0CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgIEFsbG93IGFuIGFwcGxpY2F0aW9uIHRvIHNldCB0aGUgbG9jYWxlIGZvciBlcnJvcnMgYW5kIHdhcm5pbmdzLgogCiAgICBTQVggcGFyc2VycyBhcmUgbm90IHJlcXVpcmVkIHRvIHByb3ZpZGUgbG9jYWxpemF0aW9uIGZvciBlcnJvcnMgYW5kIHdhcm5pbmdzOyBpZgotICAgdGhleSBjYW5ub3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkIGxvY2FsZSwgaG93ZXZlciwgdGhleSBtdXN0IHRocm93IGEgU0FYCisgICB0aGV5IGNhbm5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgbG9jYWxlLCBob3dldmVyLCB0aGV5IG11c3QgcmFpc2UgYSBTQVgKICAgIGV4Y2VwdGlvbi4gIEFwcGxpY2F0aW9ucyBtYXkgcmVxdWVzdCBhIGxvY2FsZSBjaGFuZ2UgaW4gdGhlIG1pZGRsZSBvZiBhIHBhcnNlLgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0IGIvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKaW5kZXggYjJiZjczMC4uNTEyNDBiYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKQEAgLTM5LDYgKzM5LDcgQEAKIAogCiAuLiBjbGFzczo6IFppcEZpbGUKKyAgIDpub2luZGV4OgogCiAgICBUaGUgY2xhc3MgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgWklQIGZpbGVzLiAgU2VlIHNlY3Rpb24KICAgIDpyZWY6YHppcGZpbGUtb2JqZWN0c2AgZm9yIGNvbnN0cnVjdG9yIGRldGFpbHMuCkBAIC02NCw4ICs2NSwxMCBAQAogLi4gZnVuY3Rpb246OiBpc196aXBmaWxlKGZpbGVuYW1lKQogCiAgICBSZXR1cm5zIGBgVHJ1ZWBgIGlmICpmaWxlbmFtZSogaXMgYSB2YWxpZCBaSVAgZmlsZSBiYXNlZCBvbiBpdHMgbWFnaWMgbnVtYmVyLAotICAgb3RoZXJ3aXNlIHJldHVybnMgYGBGYWxzZWBgLgorICAgb3RoZXJ3aXNlIHJldHVybnMgYGBGYWxzZWBgLiAgKmZpbGVuYW1lKiBtYXkgYmUgYSBmaWxlIG9yIGZpbGUtbGlrZSBvYmplY3QgdG9vLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgU3VwcG9ydCBmb3IgZmlsZSBhbmQgZmlsZS1saWtlIG9iamVjdHMuCiAKIC4uIGRhdGE6OiBaSVBfU1RPUkVECiAKQEAgLTEwMCwyOCArMTAzLDQwIEBACiAgICBPcGVuIGEgWklQIGZpbGUsIHdoZXJlICpmaWxlKiBjYW4gYmUgZWl0aGVyIGEgcGF0aCB0byBhIGZpbGUgKGEgc3RyaW5nKSBvciBhCiAgICBmaWxlLWxpa2Ugb2JqZWN0LiAgVGhlICptb2RlKiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGBgJ3InYGAgdG8gcmVhZCBhbiBleGlzdGluZwogICAgZmlsZSwgYGAndydgYCB0byB0cnVuY2F0ZSBhbmQgd3JpdGUgYSBuZXcgZmlsZSwgb3IgYGAnYSdgYCB0byBhcHBlbmQgdG8gYW4KLSAgIGV4aXN0aW5nIGZpbGUuICBJZiAqbW9kZSogaXMgYGAnYSdgYCBhbmQgKmZpbGUqIHJlZmVycyB0byBhbiBleGlzdGluZyBaSVAgZmlsZSwKLSAgIHRoZW4gYWRkaXRpb25hbCBmaWxlcyBhcmUgYWRkZWQgdG8gaXQuICBJZiAqZmlsZSogZG9lcyBub3QgcmVmZXIgdG8gYSBaSVAgZmlsZSwKLSAgIHRoZW4gYSBuZXcgWklQIGFyY2hpdmUgaXMgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICBUaGlzIGlzIG1lYW50IGZvciBhZGRpbmcgYSBaSVAKLSAgIGFyY2hpdmUgdG8gYW5vdGhlciBmaWxlLCBzdWNoIGFzIDpmaWxlOmBweXRob24uZXhlYC4gIFVzaW5nIDo6Ci0KLSAgICAgIGNhdCBteXppcC56aXAgPj4gcHl0aG9uLmV4ZQotCi0gICBhbHNvIHdvcmtzLCBhbmQgYXQgbGVhc3QgOnByb2dyYW06YFdpblppcGAgY2FuIHJlYWQgc3VjaCBmaWxlcy4gSWYgKm1vZGUqIGlzCi0gICBgYGFgYCBhbmQgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBpdCBpcyBjcmVhdGVkLiAqY29tcHJlc3Npb24qIGlzIHRoZQotICAgWklQIGNvbXByZXNzaW9uIG1ldGhvZCB0byB1c2Ugd2hlbiB3cml0aW5nIHRoZSBhcmNoaXZlLCBhbmQgc2hvdWxkIGJlCi0gICA6Y29uc3Q6YFpJUF9TVE9SRURgIG9yIDpjb25zdDpgWklQX0RFRkxBVEVEYDsgdW5yZWNvZ25pemVkIHZhbHVlcyB3aWxsIGNhdXNlCi0gICA6ZXhjOmBSdW50aW1lRXJyb3JgIHRvIGJlIHJhaXNlZC4gIElmIDpjb25zdDpgWklQX0RFRkxBVEVEYCBpcyBzcGVjaWZpZWQgYnV0IHRoZQotICAgOm1vZDpgemxpYmAgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUsIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgYWxzbyByYWlzZWQuICBUaGUKLSAgIGRlZmF1bHQgaXMgOmNvbnN0OmBaSVBfU1RPUkVEYC4gIElmICphbGxvd1ppcDY0KiBpcyBgYFRydWVgYCB6aXBmaWxlIHdpbGwgY3JlYXRlCi0gICBaSVAgZmlsZXMgdGhhdCB1c2UgdGhlIFpJUDY0IGV4dGVuc2lvbnMgd2hlbiB0aGUgemlwZmlsZSBpcyBsYXJnZXIgdGhhbiAyIEdCLiBJZgotICAgaXQgaXMgIGZhbHNlICh0aGUgZGVmYXVsdCkgOm1vZDpgemlwZmlsZWAgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgWklQCi0gICBmaWxlIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucy4gWklQNjQgZXh0ZW5zaW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdAotICAgYmVjYXVzZSB0aGUgZGVmYXVsdCA6cHJvZ3JhbTpgemlwYCBhbmQgOnByb2dyYW06YHVuemlwYCBjb21tYW5kcyBvbiBVbml4ICh0aGUKLSAgIEluZm9aSVAgdXRpbGl0aWVzKSBkb24ndCBzdXBwb3J0IHRoZXNlIGV4dGVuc2lvbnMuCisgICBleGlzdGluZyBmaWxlLiAgSWYgKm1vZGUqIGlzIGBgJ2EnYGAgYW5kICpmaWxlKiByZWZlcnMgdG8gYW4gZXhpc3RpbmcgWklQCisgICBmaWxlLCB0aGVuIGFkZGl0aW9uYWwgZmlsZXMgYXJlIGFkZGVkIHRvIGl0LiAgSWYgKmZpbGUqIGRvZXMgbm90IHJlZmVyIHRvIGEKKyAgIFpJUCBmaWxlLCB0aGVuIGEgbmV3IFpJUCBhcmNoaXZlIGlzIGFwcGVuZGVkIHRvIHRoZSBmaWxlLiAgVGhpcyBpcyBtZWFudCBmb3IKKyAgIGFkZGluZyBhIFpJUCBhcmNoaXZlIHRvIGFub3RoZXIgZmlsZSAoc3VjaCBhcyA6ZmlsZTpgcHl0aG9uLmV4ZWApLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgotICAgICAgSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQgaWYgdGhlIG1vZGUgaXMgJ2EnLgorICAgICAgSWYgKm1vZGUqIGlzIGBgYWBgIGFuZCB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBhdCBhbGwsIGl0IGlzIGNyZWF0ZWQuCisKKyAgICpjb21wcmVzc2lvbiogaXMgdGhlIFpJUCBjb21wcmVzc2lvbiBtZXRob2QgdG8gdXNlIHdoZW4gd3JpdGluZyB0aGUgYXJjaGl2ZSwKKyAgIGFuZCBzaG91bGQgYmUgOmNvbnN0OmBaSVBfU1RPUkVEYCBvciA6Y29uc3Q6YFpJUF9ERUZMQVRFRGA7IHVucmVjb2duaXplZAorICAgdmFsdWVzIHdpbGwgY2F1c2UgOmV4YzpgUnVudGltZUVycm9yYCB0byBiZSByYWlzZWQuICBJZiA6Y29uc3Q6YFpJUF9ERUZMQVRFRGAKKyAgIGlzIHNwZWNpZmllZCBidXQgdGhlIDptb2Q6YHpsaWJgIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlLCA6ZXhjOmBSdW50aW1lRXJyb3JgCisgICBpcyBhbHNvIHJhaXNlZC4gVGhlIGRlZmF1bHQgaXMgOmNvbnN0OmBaSVBfU1RPUkVEYC4gIElmICphbGxvd1ppcDY0KiBpcworICAgYGBUcnVlYGAgemlwZmlsZSB3aWxsIGNyZWF0ZSBaSVAgZmlsZXMgdGhhdCB1c2UgdGhlIFpJUDY0IGV4dGVuc2lvbnMgd2hlbgorICAgdGhlIHppcGZpbGUgaXMgbGFyZ2VyIHRoYW4gMiBHQi4gSWYgaXQgaXMgIGZhbHNlICh0aGUgZGVmYXVsdCkgOm1vZDpgemlwZmlsZWAKKyAgIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIFpJUCBmaWxlIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucy4KKyAgIFpJUDY0IGV4dGVuc2lvbnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSB0aGUgZGVmYXVsdCA6cHJvZ3JhbTpgemlwYAorICAgYW5kIDpwcm9ncmFtOmB1bnppcGAgY29tbWFuZHMgb24gVW5peCAodGhlIEluZm9aSVAgdXRpbGl0aWVzKSBkb24ndCBzdXBwb3J0CisgICB0aGVzZSBleHRlbnNpb25zLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNy4xCisgICAgICBJZiB0aGUgZmlsZSBpcyBjcmVhdGVkIHdpdGggbW9kZSBgYCdhJ2BgIG9yIGBgJ3cnYGAgYW5kIHRoZW4KKyAgICAgIDptZXRoOmBjbG9zZWBcIGQgd2l0aG91dCBhZGRpbmcgYW55IGZpbGVzIHRvIHRoZSBhcmNoaXZlLCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgIFpJUCBzdHJ1Y3R1cmVzIGZvciBhbiBlbXB0eSBhcmNoaXZlIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgZmlsZS4KKworICAgWmlwRmlsZSBpcyBhbHNvIGEgY29udGV4dCBtYW5hZ2VyIGFuZCB0aGVyZWZvcmUgc3VwcG9ydHMgdGhlCisgICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiAgSW4gdGhlIGV4YW1wbGUsICpteXppcCogaXMgY2xvc2VkIGFmdGVyIHRoZQorICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCdzIHN1aXRlIGlzIGZpbmlzaGVkLS0tZXZlbiBpZiBhbiBleGNlcHRpb24gb2NjdXJzOjoKKworICAgICAgd2l0aCBaaXBGaWxlKCdzcGFtLnppcCcsICd3JykgYXMgbXl6aXA6CisgICAgICAgICAgbXl6aXAud3JpdGUoJ2VnZ3MudHh0JykKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisgICAgICBBZGRlZCB0aGUgYWJpbGl0eSB0byB1c2UgOmNsYXNzOmBaaXBGaWxlYCBhcyBhIGNvbnRleHQgbWFuYWdlci4KIAogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLmNsb3NlKCkKQEAgLTE2MSw4ICsxNzYsOCBAQAogICAgLi4gbm90ZTo6CiAKICAgICAgIFRoZSBmaWxlLWxpa2Ugb2JqZWN0IGlzIHJlYWQtb25seSBhbmQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgotICAgICAgOm1ldGg6YHJlYWRgLCA6bWV0aDpgcmVhZGxpbmVgLCA6bWV0aDpgcmVhZGxpbmVzYCwgOm1ldGg6YF9faXRlcl9fYCwKLSAgICAgIDptZXRoOmBuZXh0YC4KKyAgICAgIDptZXRoOmAhcmVhZGAsIDptZXRoOmAhcmVhZGxpbmVgLCA6bWV0aDpgIXJlYWRsaW5lc2AsIDptZXRoOmAhX19pdGVyX19gLAorICAgICAgOm1ldGg6YCFuZXh0YC4KIAogICAgLi4gbm90ZTo6CiAKQEAgLTI3Miw3ICsyODcsNyBAQAogICAgICAgYnl0ZSwgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIGFyY2hpdmUgd2lsbCBiZSB0cnVuY2F0ZWQgYXQgdGhlIG51bGwgYnl0ZS4KIAogCi0uLiBtZXRob2Q6OiBaaXBGaWxlLndyaXRlc3RyKHppbmZvX29yX2FyY25hbWUsIGJ5dGVzKQorLi4gbWV0aG9kOjogWmlwRmlsZS53cml0ZXN0cih6aW5mb19vcl9hcmNuYW1lLCBieXRlc1ssIGNvbXByZXNzX3R5cGVdKQogCiAgICBXcml0ZSB0aGUgc3RyaW5nICpieXRlcyogdG8gdGhlIGFyY2hpdmU7ICp6aW5mb19vcl9hcmNuYW1lKiBpcyBlaXRoZXIgdGhlIGZpbGUKICAgIG5hbWUgaXQgd2lsbCBiZSBnaXZlbiBpbiB0aGUgYXJjaGl2ZSwgb3IgYSA6Y2xhc3M6YFppcEluZm9gIGluc3RhbmNlLiAgSWYgaXQncwpAQCAtMjgyLDEzICsyOTcsMjAgQEAKICAgIGNyZWF0ZWQgd2l0aCBtb2RlIGBgJ3InYGAgIHdpbGwgcmFpc2UgYSA6ZXhjOmBSdW50aW1lRXJyb3JgLiAgQ2FsbGluZwogICAgOm1ldGg6YHdyaXRlc3RyYCBvbiBhIGNsb3NlZCBaaXBGaWxlIHdpbGwgcmFpc2UgYSA6ZXhjOmBSdW50aW1lRXJyb3JgLgogCisgICBJZiBnaXZlbiwgKmNvbXByZXNzX3R5cGUqIG92ZXJyaWRlcyB0aGUgdmFsdWUgZ2l2ZW4gZm9yIHRoZSAqY29tcHJlc3Npb24qCisgICBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgbmV3IGVudHJ5LCBvciBpbiB0aGUgKnppbmZvX29yX2FyY25hbWUqCisgICAoaWYgdGhhdCBpcyBhIDpjbGFzczpgWmlwSW5mb2AgaW5zdGFuY2UpLgorCiAgICAuLiBub3RlOjoKIAotICAgICAgV2hlbiBwYXNzaW5nIGEgOmNsYXNzOmBaaXBJbmZvYCBpbnN0YW5jZSBhcyB0aGUgKnppbmZvX29yX2Fjcm5hbWUqIHBhcmFtZXRlciwKKyAgICAgIFdoZW4gcGFzc2luZyBhIDpjbGFzczpgWmlwSW5mb2AgaW5zdGFuY2UgYXMgdGhlICp6aW5mb19vcl9hcmNuYW1lKiBwYXJhbWV0ZXIsCiAgICAgICB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHVzZWQgd2lsbCBiZSB0aGF0IHNwZWNpZmllZCBpbiB0aGUgKmNvbXByZXNzX3R5cGUqCiAgICAgICBtZW1iZXIgb2YgdGhlIGdpdmVuIDpjbGFzczpgWmlwSW5mb2AgaW5zdGFuY2UuICBCeSBkZWZhdWx0LCB0aGUKICAgICAgIDpjbGFzczpgWmlwSW5mb2AgY29uc3RydWN0b3Igc2V0cyB0aGlzIG1lbWJlciB0byA6Y29uc3Q6YFpJUF9TVE9SRURgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgVGhlICpjb21wcmVzc2lvbl90eXBlKiBhcmd1bWVudC4KKwogVGhlIGZvbGxvd2luZyBkYXRhIGF0dHJpYnV0ZXMgYXJlIGFsc28gYXZhaWxhYmxlOgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3ppcGltcG9ydC5yc3QgYi9Eb2MvbGlicmFyeS96aXBpbXBvcnQucnN0CmluZGV4IDRjZTlhMzUuLjQzZTEyYjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ppcGltcG9ydC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvemlwaW1wb3J0LnJzdApAQCAtOTYsNiArOTYsMTUgQEAKICAgICAgIGZpbGUgd2Fzbid0IGZvdW5kLgogCiAKKyAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKKworICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBgYF9fZmlsZV9fYGAgd291bGQgYmUgc2V0IHRvIGlmIHRoZSBzcGVjaWZpZWQgbW9kdWxlCisgICAgICB3YXMgaW1wb3J0ZWQuIFJhaXNlIDpleGM6YFppcEltcG9ydEVycm9yYCBpZiB0aGUgbW9kdWxlIGNvdWxkbid0IGJlCisgICAgICBmb3VuZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogICAgLi4gbWV0aG9kOjogZ2V0X3NvdXJjZShmdWxsbmFtZSkKIAogICAgICAgUmV0dXJuIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUuIFJhaXNlCmRpZmYgLS1naXQgYS9Eb2MvbGljZW5zZS5yc3QgYi9Eb2MvbGljZW5zZS5yc3QKaW5kZXggNmFiNjczYy4uNGM2NTRhZSAxMDA2NDQKLS0tIGEvRG9jL2xpY2Vuc2UucnN0CisrKyBiL0RvYy9saWNlbnNlLnJzdApAQCAtMTAwLDkgKzEwMCw5IEBACiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDIuNi4zICAgICAgICAgIHwgMi42LjIgICAgICAgIHwgMjAwOSAgICAgIHwgUFNGICAgICAgICB8IHllcyAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi18IDIuNi40ICAgICAgICAgIHwgMi42LjMgICAgICAgIHwgMjAwOSAgICAgIHwgUFNGICAgICAgICB8IHllcyAgICAgICAgICAgICB8Cit8IDIuNi40ICAgICAgICAgIHwgMi42LjMgICAgICAgIHwgMjAxMCAgICAgIHwgUFNGICAgICAgICB8IHllcyAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi18IDIuNi41ICAgICAgICAgIHwgMi42LjQgICAgICAgIHwgMjAxMCAgICAgIHwgUFNGICAgICAgICB8IHllcyAgICAgICAgICAgICB8Cit8IDIuNyAgICAgICAgICAgIHwgMi42ICAgICAgICAgIHwgMjAxMCAgICAgIHwgUFNGICAgICAgICB8IHllcyAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCiAKIC4uIG5vdGU6OgpAQCAtNzE2LDMgKzcxNiwyNjAgQEAKICAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogICBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgIFNVQ0ggREFNQUdFLgorCisKK3N0cnRvZCBhbmQgZHRvYQorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaWxlIDpmaWxlOmBQeXRob24vZHRvYS5jYCwgd2hpY2ggc3VwcGxpZXMgQyBmdW5jdGlvbnMgZHRvYSBhbmQKK3N0cnRvZCBmb3IgY29udmVyc2lvbiBvZiBDIGRvdWJsZXMgdG8gYW5kIGZyb20gc3RyaW5ncywgaXMgZGVyaXZlZAorZnJvbSB0aGUgZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGJ5IERhdmlkIE0uIEdheSwgY3VycmVudGx5IGF2YWlsYWJsZQorZnJvbSBodHRwOi8vd3d3Lm5ldGxpYi5vcmcvZnAvLiAgVGhlIG9yaWdpbmFsIGZpbGUsIGFzIHJldHJpZXZlZCBvbgorTWFyY2ggMTYsIDIwMDksIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcKK25vdGljZTo6CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKgorICAgICogVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKyAgICAqCisgICAgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDIwMDAsIDIwMDEgYnkgTHVjZW50IFRlY2hub2xvZ2llcy4KKyAgICAqCisgICAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAgICAqIHB1cnBvc2Ugd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBlbnRpcmUgbm90aWNlCisgICAgKiBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIGFueSBzb2Z0d2FyZSB3aGljaCBpcyBvciBpbmNsdWRlcyBhIGNvcHkKKyAgICAqIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBpbiBhbGwgY29waWVzIG9mIHRoZSBzdXBwb3J0aW5nCisgICAgKiBkb2N1bWVudGF0aW9uIGZvciBzdWNoIHNvZnR3YXJlLgorICAgICoKKyAgICAqIFRISVMgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgICAgKiBXQVJSQU5UWS4gIElOIFBBUlRJQ1VMQVIsIE5FSVRIRVIgVEhFIEFVVEhPUiBOT1IgTFVDRU5UIE1BS0VTIEFOWQorICAgICogUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUVSQ0hBTlRBQklMSVRZCisgICAgKiBPRiBUSElTIFNPRlRXQVJFIE9SIElUUyBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICoKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworT3BlblNTTAorLS0tLS0tLQorCitUaGUgbW9kdWxlcyA6bW9kOmBoYXNobGliYCwgOm1vZDpgcG9zaXhgLCA6bW9kOmBzc2xgLCA6bW9kOmBjcnlwdGAgdXNlCit0aGUgT3BlblNTTCBsaWJyYXJ5IGZvciBhZGRlZCBwZXJmb3JtYW5jZSBpZiBtYWRlIGF2YWlsYWJsZSBieSB0aGUKK29wZXJhdGluZyBzeXN0ZW0uIEFkZGl0aW9uYWxseSwgdGhlIFdpbmRvd3MgaW5zdGFsbGVycyBmb3IgUHl0aG9uCitpbmNsdWRlIGEgY29weSBvZiB0aGUgT3BlblNTTCBsaWJyYXJpZXMsIHNvIHdlIGluY2x1ZGUgYSBjb3B5IG9mIHRoZQorT3BlblNTTCBsaWNlbnNlIGhlcmU6OgorCisKKyAgTElDRU5TRSBJU1NVRVMKKyAgPT09PT09PT09PT09PT0KKworICBUaGUgT3BlblNTTCB0b29sa2l0IHN0YXlzIHVuZGVyIGEgZHVhbCBsaWNlbnNlLCBpLmUuIGJvdGggdGhlIGNvbmRpdGlvbnMgb2YKKyAgdGhlIE9wZW5TU0wgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIFNTTGVheSBsaWNlbnNlIGFwcGx5IHRvIHRoZSB0b29sa2l0LgorICBTZWUgYmVsb3cgZm9yIHRoZSBhY3R1YWwgbGljZW5zZSB0ZXh0cy4gQWN0dWFsbHkgYm90aCBsaWNlbnNlcyBhcmUgQlNELXN0eWxlCisgIE9wZW4gU291cmNlIGxpY2Vuc2VzLiBJbiBjYXNlIG9mIGFueSBsaWNlbnNlIGlzc3VlcyByZWxhdGVkIHRvIE9wZW5TU0wKKyAgcGxlYXNlIGNvbnRhY3Qgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorCisgIE9wZW5TU0wgTGljZW5zZQorICAtLS0tLS0tLS0tLS0tLS0KKworICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgICoKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgICAgKiBhcmUgbWV0OgorICAgICAqCisgICAgICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICoKKyAgICAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgKiAgICBkaXN0cmlidXRpb24uCisgICAgICoKKyAgICAgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAgICAgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAgICAgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgICAgICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICAgICAqCisgICAgICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgICAgICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgICAgICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICAgICAqCisgICAgICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgICAgICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICAgICAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAgICAgKgorICAgICAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAgICAgKiAgICBhY2tub3dsZWRnbWVudDoKKyAgICAgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgICAgICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgICAgICoKKyAgICAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAgICAgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICAgICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICAgICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAgICAgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICAgICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgICAgICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgICAgICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgICAgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICAgICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAgICAgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgKgorICAgICAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICAgICAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAgICAgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAgICAgKgorICAgICAqLworCisgT3JpZ2luYWwgU1NMZWF5IExpY2Vuc2UKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgICAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICAgKgorICAgICAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICAgICAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAgICAgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgICAgICoKKyAgICAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAgICAgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgICAgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICAgICAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICAgICAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAgICAgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAgICAgKgorICAgICAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgICAgICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICAgICAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAgICAgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICAgICAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICAgICAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICAgICAqCisgICAgICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICAgICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICAgICogYXJlIG1ldDoKKyAgICAgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICAgICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgICAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICAgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICAgICAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgICAgICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgICAgICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgICAgICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20KKyAgICAgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICAgICAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgICAgICoKKyAgICAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICAgICAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICAgICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAgICAgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICAgICAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgICAgICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICAgICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAgICAgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgICAgICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICAgICAqIFNVQ0ggREFNQUdFLgorICAgICAqCisgICAgICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAgICAgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAgICAgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgICAgICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAgICAgKi8KKworCitleHBhdAorLS0tLS0KKworVGhlIDptb2Q6YHB5ZXhwYXRgIGV4dGVuc2lvbiBpcyBidWlsdCB1c2luZyBhbiBpbmNsdWRlZCBjb3B5IG9mIHRoZSBleHBhdAorc291cmNlcyB1bmxlc3MgdGhlIGJ1aWxkIGlzIGNvbmZpZ3VyZWQgOm9wdGlvbjpgLS13aXRoLXN5c3RlbS1leHBhdGA6OgorCisgIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSwgMjAwMCBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBDbGFyayBDb29wZXIKKworICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKworbGliZmZpCistLS0tLS0KKworVGhlIDptb2Q6YF9jdHlwZXNgIGV4dGVuc2lvbiBpcyBidWlsdCB1c2luZyBhbiBpbmNsdWRlZCBjb3B5IG9mIHRoZSBsaWJmZmkKK3NvdXJjZXMgdW5sZXNzIHRoZSBidWlsZCBpcyBjb25maWd1cmVkIDpvcHRpb246YC0td2l0aC1zeXN0ZW0tbGliZmZpYDo6CisKKyAgIENvcHlyaWdodCAoYykgMTk5Ni0yMDA4ICBSZWQgSGF0LCBJbmMgYW5kIG90aGVycy4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCisKK3psaWIKKy0tLS0KKworVGhlIDptb2Q6YHpsaWJgIGV4dGVuc2lvbiBpcyBidWlsdCB1c2luZyBhbiBpbmNsdWRlZCBjb3B5IG9mIHRoZSB6bGliCitzb3VyY2VzIHVubGVzcyB0aGUgemxpYiB2ZXJzaW9uIGZvdW5kIG9uIHRoZSBzeXN0ZW0gaXMgdG9vIG9sZCB0byBiZQordXNlZCBmb3IgdGhlIGJ1aWxkOjoKKworICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisKKyAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKworICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisKKyAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworICBKZWFuLWxvdXAgR2FpbGx5ICAgICAgICBNYXJrIEFkbGVyCisgIGpsb3VwQGd6aXAub3JnICAgICAgICAgIG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUKKwpkaWZmIC0tZ2l0IGEvRG9jL21ha2UuYmF0IGIvRG9jL21ha2UuYmF0CmluZGV4IDgwYWM4MDYuLmQyMzRlNzcgMTAwNjQ0Ci0tLSBhL0RvYy9tYWtlLmJhdAorKysgYi9Eb2MvbWFrZS5iYXQKQEAgLTM0LDcgKzM0LDcgQEAKIGdvdG8gZW5kCiAKIDpjaGVja291dAotc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9TcGhpbngtMC42LjUvc3BoaW54IHRvb2xzL3NwaGlueAorc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9TcGhpbngtMC42Ljcvc3BoaW54IHRvb2xzL3NwaGlueAogc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9kb2N1dGlscy0wLjYvZG9jdXRpbHMgdG9vbHMvZG9jdXRpbHMKIHN2biBjbyAlU1ZOUk9PVCUvZXh0ZXJuYWwvSmluamEtMi4zLjEvamluamEyIHRvb2xzL2ppbmphMgogc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9QeWdtZW50cy0xLjMuMS9weWdtZW50cyB0b29scy9weWdtZW50cwpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QgYi9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdAppbmRleCAzYzcxNmIyLi45ZGZhMzFmIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdApAQCAtMzMzLDExICszMzMsMTUgQEAKIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS4KIAogLi4gcHJvZHVjdGlvbmxpc3Q6OgotICAgd2l0aF9zdG10OiAid2l0aCIgYGV4cHJlc3Npb25gIFsiYXMiIGB0YXJnZXRgXSAiOiIgYHN1aXRlYAorICAgd2l0aF9zdG10OiAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIGBzdWl0ZWAKKyAgIHdpdGhfaXRlbTogYGV4cHJlc3Npb25gIFsiYXMiIGB0YXJnZXRgXQogCi1UaGUgZXhlY3V0aW9uIG9mIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHByb2NlZWRzIGFzIGZvbGxvd3M6CitUaGUgZXhlY3V0aW9uIG9mIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhcyBmb2xsb3dzOgogCi0jLiBUaGUgY29udGV4dCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuCisjLiBUaGUgY29udGV4dCBleHByZXNzaW9uICh0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgOnRva2VuOmB3aXRoX2l0ZW1gKSBpcworICAgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci4KKworIy4gVGhlIGNvbnRleHQgbWFuYWdlcidzIDptZXRoOmBfX2V4aXRfX2AgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuCiAKICMuIFRoZSBjb250ZXh0IG1hbmFnZXIncyA6bWV0aDpgX19lbnRlcl9fYCBtZXRob2QgaXMgaW52b2tlZC4KIApAQCAtMzQ5LDcgKzM1Myw3IEBACiAgICAgICBUaGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlIDptZXRoOmBfX2VudGVyX19gIG1ldGhvZAogICAgICAgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuIDptZXRoOmBfX2V4aXRfX2Agd2lsbCBhbHdheXMgYmUgY2FsbGVkLiBUaHVzLCBpZgogICAgICAgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXNzaWdubWVudCB0byB0aGUgdGFyZ2V0IGxpc3QsIGl0IHdpbGwgYmUgdHJlYXRlZCB0aGUKLSAgICAgIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDUgYmVsb3cuCisgICAgICBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZyB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LgogCiAjLiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuCiAKQEAgLTM2NywxMiArMzcxLDI3IEBACiAgICBmcm9tIDptZXRoOmBfX2V4aXRfX2AgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkcyBhdCB0aGUgbm9ybWFsIGxvY2F0aW9uCiAgICBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi4KIAorV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWYgbXVsdGlwbGUKKzprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOjoKKworICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6CisgICAgICAgc3VpdGUKKworaXMgZXF1aXZhbGVudCB0byA6OgorCisgICB3aXRoIEEoKSBhcyBhOgorICAgICAgIHdpdGggQigpIGFzIGI6CisgICAgICAgICAgIHN1aXRlCisKIC4uIG5vdGU6OgogCiAgICBJbiBQeXRob24gMi41LCB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBpcyBvbmx5IGFsbG93ZWQgd2hlbiB0aGUKICAgIGBgd2l0aF9zdGF0ZW1lbnRgYCBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQuICBJdCBpcyBhbHdheXMgZW5hYmxlZCBpbgogICAgUHl0aG9uIDIuNi4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgIFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuCisKIC4uIHNlZWFsc286OgogCiAgICA6cGVwOmAwMzQzYCAtIFRoZSAid2l0aCIgc3RhdGVtZW50CmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QgYi9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKaW5kZXggZjE3NDNkOS4uZGRmZmJiMyAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdApAQCAtNjg5LDcgKzY4OSw3IEBACiAgICAgICBhbiBvYmplY3QgcGFzc2VkIHRvIHRoZSBDIGZ1bmN0aW9uIGFzIGFuIGltcGxpY2l0IGV4dHJhIGFyZ3VtZW50LiAgQW4gZXhhbXBsZSBvZgogICAgICAgYSBidWlsdC1pbiBtZXRob2QgaXMgYGBhbGlzdC5hcHBlbmQoKWBgLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluCiAgICAgICB0aGlzIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgOmF0dHI6YF9fc2VsZl9fYCBpcyBzZXQgdG8gdGhlIG9iamVjdAotICAgICAgZGVub3RlZCBieSAqbGlzdCouCisgICAgICBkZW5vdGVkIGJ5ICphbGlzdCouCiAKICAgIENsYXNzIFR5cGVzCiAgICAgICBDbGFzcyB0eXBlcywgb3IgIm5ldy1zdHlsZSBjbGFzc2VzLCIgYXJlIGNhbGxhYmxlLiAgVGhlc2Ugb2JqZWN0cyBub3JtYWxseSBhY3QKQEAgLTczOSw2ICs3MzksMTMgQEAKICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogOmF0dHI6YF9fZGljdF9fYCBpcyB0aGUgbW9kdWxlJ3MgbmFtZXNwYWNlIGFzIGEKICAgIGRpY3Rpb25hcnkgb2JqZWN0LgogCisgICAuLiBpbXBsLWRldGFpbDo6CisKKyAgICAgIEJlY2F1c2Ugb2YgdGhlIHdheSBDUHl0aG9uIGNsZWFycyBtb2R1bGUgZGljdGlvbmFyaWVzLCB0aGUgbW9kdWxlCisgICAgICBkaWN0aW9uYXJ5IHdpbGwgYmUgY2xlYXJlZCB3aGVuIHRoZSBtb2R1bGUgZmFsbHMgb3V0IG9mIHNjb3BlIGV2ZW4gaWYgdGhlCisgICAgICBkaWN0aW9uYXJ5IHN0aWxsIGhhcyBsaXZlIHJlZmVyZW5jZXMuICBUbyBhdm9pZCB0aGlzLCBjb3B5IHRoZSBkaWN0aW9uYXJ5CisgICAgICBvciBrZWVwIHRoZSBtb2R1bGUgYXJvdW5kIHdoaWxlIHVzaW5nIGl0cyBkaWN0aW9uYXJ5IGRpcmVjdGx5LgorCiAgICAuLiBpbmRleDo6CiAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2RvY19fIChtb2R1bGUgYXR0cmlidXRlKQpAQCAtOTA4LDYgKzkxNSwyMiBAQAogICAgICAgb2JqZWN0cywgY29kZSBvYmplY3RzIGFyZSBpbW11dGFibGUgYW5kIGNvbnRhaW4gbm8gcmVmZXJlbmNlcyAoZGlyZWN0bHkgb3IKICAgICAgIGluZGlyZWN0bHkpIHRvIG11dGFibGUgb2JqZWN0cy4KIAorICAgICAgLi4gaW5kZXg6OgorICAgICAgICAgc2luZ2xlOiBjb19hcmdjb3VudCAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19jb2RlIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCisgICAgICAgICBzaW5nbGU6IGNvX2NvbnN0cyAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19maWxlbmFtZSAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19maXJzdGxpbmVubyAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19mbGFncyAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19sbm90YWIgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fbmFtZSAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19uYW1lcyAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19ubG9jYWxzIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCisgICAgICAgICBzaW5nbGU6IGNvX3N0YWNrc2l6ZSAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb192YXJuYW1lcyAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19jZWxsdmFycyAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19mcmVldmFycyAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorCiAgICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiA6YXR0cjpgY29fbmFtZWAgZ2l2ZXMgdGhlIGZ1bmN0aW9uIG5hbWU7CiAgICAgICA6YXR0cjpgY29fYXJnY291bnRgIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMgKGluY2x1ZGluZyBhcmd1bWVudHMKICAgICAgIHdpdGggZGVmYXVsdCB2YWx1ZXMpOyA6YXR0cjpgY29fbmxvY2Fsc2AgaXMgdGhlIG51bWJlciBvZiBsb2NhbCB2YXJpYWJsZXMgdXNlZApAQCAtOTI1LDIyICs5NDgsNiBAQAogICAgICAgOmF0dHI6YGNvX3N0YWNrc2l6ZWAgaXMgdGhlIHJlcXVpcmVkIHN0YWNrIHNpemUgKGluY2x1ZGluZyBsb2NhbCB2YXJpYWJsZXMpOwogICAgICAgOmF0dHI6YGNvX2ZsYWdzYCBpcyBhbiBpbnRlZ2VyIGVuY29kaW5nIGEgbnVtYmVyIG9mIGZsYWdzIGZvciB0aGUgaW50ZXJwcmV0ZXIuCiAKLSAgICAgIC4uIGluZGV4OjoKLSAgICAgICAgIHNpbmdsZTogY29fYXJnY291bnQgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fY29kZSAoY29kZSBvYmplY3QgYXR0cmlidXRlKQotICAgICAgICAgc2luZ2xlOiBjb19jb25zdHMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fZmlsZW5hbWUgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fZmlyc3RsaW5lbm8gKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fZmxhZ3MgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fbG5vdGFiIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX25hbWUgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fbmFtZXMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fbmxvY2FscyAoY29kZSBvYmplY3QgYXR0cmlidXRlKQotICAgICAgICAgc2luZ2xlOiBjb19zdGFja3NpemUgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fdmFybmFtZXMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fY2VsbHZhcnMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fZnJlZXZhcnMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLQogICAgICAgLi4gaW5kZXg6OiBvYmplY3Q6IGdlbmVyYXRvcgogCiAgICAgICBUaGUgZm9sbG93aW5nIGZsYWcgYml0cyBhcmUgZGVmaW5lZCBmb3IgOmF0dHI6YGNvX2ZsYWdzYDogYml0IGBgMHgwNGBgIGlzIHNldCBpZgpAQCAtMTM1Myw4ICsxMzYwLDcgQEAKICAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC4KIAogICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdCBvcGVyYXRpb24sCi0gICBzZWUgdGhlIGBUb3RhbCBPcmRlcmluZyByZWNpcGUgaW4gdGhlIEFTUE4gY29va2Jvb2sKLSAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY1MjkvPmBfXC4KKyAgIHNlZSA6ZnVuYzpgZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nYC4KIAogLi4gbWV0aG9kOjogb2JqZWN0Ll9fY21wX18oc2VsZiwgb3RoZXIpCiAKQEAgLTE3NzMsNyArMTc3OSw3IEBACiAKIEluIHBhcnRpY3VsYXIsIHRoZSBtZXRhY2xhc3MgOmNsYXNzOmBhYmMuQUJDTWV0YWAgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzIGluCiBvcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhcyAidmlydHVhbCBiYXNlCi1jbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluIHR5cGVzKSwgYW5kIGluY2x1ZGluZyB0byBvdGhlcgorY2xhc3NlcyIgdG8gYW55IGNsYXNzIG9yIHR5cGUgKGluY2x1ZGluZyBidWlsdC1pbiB0eXBlcyksIGluY2x1ZGluZyBvdGhlcgogQUJDcy4KIAogLi4gbWV0aG9kOjogY2xhc3MuX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpCkBAIC0xNzkyLDcgKzE3OTgsNyBAQAogCiBOb3RlIHRoYXQgdGhlc2UgbWV0aG9kcyBhcmUgbG9va2VkIHVwIG9uIHRoZSB0eXBlIChtZXRhY2xhc3MpIG9mIGEgY2xhc3MuICBUaGV5CiBjYW5ub3QgYmUgZGVmaW5lZCBhcyBjbGFzcyBtZXRob2RzIGluIHRoZSBhY3R1YWwgY2xhc3MuICBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aAotdGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkIG9uIGluc3RhbmNlcywgb25seSB0aGF0IGluIHRoaXMKK3RoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZCBvbiBpbnN0YW5jZXMsIG9ubHkgaW4gdGhpcwogY2FzZSB0aGUgaW5zdGFuY2UgaXMgaXRzZWxmIGEgY2xhc3MuCiAKIC4uIHNlZWFsc286OgpAQCAtMjMxMywxMyArMjMxOSwxNSBAQAogKgogCiAgIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgYnVpbHQtaW4gbnVtZXJpYyB0eXBlcyA6Y2xhc3M6YGludGAsCi0gIDpjbGFzczpgbG9uZ2AgYW5kIDpjbGFzczpgZmxvYXRgIGRvIG5vdCB1c2UgY29lcmNpb247IHRoZSB0eXBlIDpjbGFzczpgY29tcGxleGAKLSAgaG93ZXZlciBkb2VzIHVzZSBjb2VyY2lvbiBmb3IgYmluYXJ5IG9wZXJhdG9ycyBhbmQgcmljaCBjb21wYXJpc29ucywgZGVzcGl0ZQotICB0aGUgYWJvdmUgcnVsZXMuICBUaGUgZGlmZmVyZW5jZSBjYW4gYmVjb21lIGFwcGFyZW50IHdoZW4gc3ViY2xhc3NpbmcgdGhlc2UKLSAgdHlwZXMuICBPdmVyIHRpbWUsIHRoZSB0eXBlIDpjbGFzczpgY29tcGxleGAgbWF5IGJlIGZpeGVkIHRvIGF2b2lkIGNvZXJjaW9uLgorICA6Y2xhc3M6YGxvbmdgLCA6Y2xhc3M6YGZsb2F0YCwgYW5kIDpjbGFzczpgY29tcGxleGAgZG8gbm90IHVzZSBjb2VyY2lvbi4KICAgQWxsIHRoZXNlIHR5cGVzIGltcGxlbWVudCBhIDptZXRoOmBfX2NvZXJjZV9fYCBtZXRob2QsIGZvciB1c2UgYnkgdGhlIGJ1aWx0LWluCiAgIDpmdW5jOmBjb2VyY2VgIGZ1bmN0aW9uLgogCisgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisKKyAgICAgVGhlIGNvbXBsZXggdHlwZSBubyBsb25nZXIgbWFrZXMgaW1wbGljaXQgY2FsbHMgdG8gdGhlIDptZXRoOmBfX2NvZXJjZV9fYAorICAgICBtZXRob2QgZm9yIG1peGVkLXR5cGUgYmluYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KKwogCiAuLiBfY29udGV4dC1tYW5hZ2VyczoKIApkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5yc3QgYi9Eb2MvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLnJzdAppbmRleCA0ZTM4NTM2Li45MWFjNzJmIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLnJzdApAQCAtMTQwLDkgKzE0MCw5IEBACiBUaGUgbmFtZXNwYWNlIGZvciBhIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgYSBtb2R1bGUgaXMKIGltcG9ydGVkLiAgVGhlIG1haW4gbW9kdWxlIGZvciBhIHNjcmlwdCBpcyBhbHdheXMgY2FsbGVkIDptb2Q6YF9fbWFpbl9fYC4KIAotVGhlIGdsb2JhbCBzdGF0ZW1lbnQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbiBpbiB0aGUgc2FtZQotYmxvY2suICBJZiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZm9yIGEgZnJlZSB2YXJpYWJsZSBjb250YWlucyBhIGdsb2JhbAotc3RhdGVtZW50LCB0aGUgZnJlZSB2YXJpYWJsZSBpcyB0cmVhdGVkIGFzIGEgZ2xvYmFsLgorVGhlIDprZXl3b3JkOmBnbG9iYWxgIHN0YXRlbWVudCBoYXMgdGhlIHNhbWUgc2NvcGUgYXMgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uCitpbiB0aGUgc2FtZSBibG9jay4gIElmIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZSBmb3IgYSBmcmVlIHZhcmlhYmxlIGNvbnRhaW5zCithIGdsb2JhbCBzdGF0ZW1lbnQsIHRoZSBmcmVlIHZhcmlhYmxlIGlzIHRyZWF0ZWQgYXMgYSBnbG9iYWwuCiAKIEEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudCB0aGF0IG1heSB1c2UgYW5kIGRlZmluZSBuYW1lcy4KIFRoZXNlIHJlZmVyZW5jZXMgZm9sbG93IHRoZSBub3JtYWwgcnVsZXMgZm9yIG5hbWUgcmVzb2x1dGlvbi4gVGhlIG5hbWVzcGFjZSBvZgpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QgYi9Eb2MvcmVmZXJlbmNlL2V4cHJlc3Npb25zLnJzdAppbmRleCA4YmZjOGQ5Li4wNjdhM2Q2IDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2V4cHJlc3Npb25zLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2V4cHJlc3Npb25zLnJzdApAQCAtNjUsNyArNjUsNyBAQAogLi4gcHJvZHVjdGlvbmxpc3Q6OgogICAgYXRvbTogYGlkZW50aWZpZXJgIHwgYGxpdGVyYWxgIHwgYGVuY2xvc3VyZWAKICAgIGVuY2xvc3VyZTogYHBhcmVudGhfZm9ybWAgfCBgbGlzdF9kaXNwbGF5YAotICAgICAgICAgICAgOiB8IGBnZW5lcmF0b3JfZXhwcmVzc2lvbmAgfCBgZGljdF9kaXNwbGF5YAorICAgICAgICAgICAgOiB8IGBnZW5lcmF0b3JfZXhwcmVzc2lvbmAgfCBgZGljdF9kaXNwbGF5YCB8IGBzZXRfZGlzcGxheWAKICAgICAgICAgICAgIDogfCBgc3RyaW5nX2NvbnZlcnNpb25gIHwgYHlpZWxkX2F0b21gCiAKIApAQCAtMjA2LDc0ICsyMDYsMTAwIEBACiBsaXN0IGVsZW1lbnQgZWFjaCB0aW1lIHRoZSBpbm5lcm1vc3QgYmxvY2sgaXMgcmVhY2hlZCBbI11fLgogCiAKKy4uIF9jb21wcmVoZW5zaW9uczoKKworRGlzcGxheXMgZm9yIHNldHMgYW5kIGRpY3Rpb25hcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgY29uc3RydWN0aW5nIGEgc2V0IG9yIGEgZGljdGlvbmFyeSBQeXRob24gcHJvdmlkZXMgc3BlY2lhbCBzeW50YXgKK2NhbGxlZCAiZGlzcGxheXMiLCBlYWNoIG9mIHRoZW0gaW4gdHdvIGZsYXZvcnM6CisKKyogZWl0aGVyIHRoZSBjb250YWluZXIgY29udGVudHMgYXJlIGxpc3RlZCBleHBsaWNpdGx5LCBvcgorCisqIHRoZXkgYXJlIGNvbXB1dGVkIHZpYSBhIHNldCBvZiBsb29waW5nIGFuZCBmaWx0ZXJpbmcgaW5zdHJ1Y3Rpb25zLCBjYWxsZWQgYQorICA6ZGZuOmBjb21wcmVoZW5zaW9uYC4KKworQ29tbW9uIHN5bnRheCBlbGVtZW50cyBmb3IgY29tcHJlaGVuc2lvbnMgYXJlOgorCisuLiBwcm9kdWN0aW9ubGlzdDo6CisgICBjb21wcmVoZW5zaW9uOiBgZXhwcmVzc2lvbmAgYGNvbXBfZm9yYAorICAgY29tcF9mb3I6ICJmb3IiIGB0YXJnZXRfbGlzdGAgImluIiBgb3JfdGVzdGAgW2Bjb21wX2l0ZXJgXQorICAgY29tcF9pdGVyOiBgY29tcF9mb3JgIHwgYGNvbXBfaWZgCisgICBjb21wX2lmOiAiaWYiIGBleHByZXNzaW9uX25vY29uZGAgW2Bjb21wX2l0ZXJgXQorCitUaGUgY29tcHJlaGVuc2lvbiBjb25zaXN0cyBvZiBhIHNpbmdsZSBleHByZXNzaW9uIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZQorOmtleXdvcmQ6YGZvcmAgY2xhdXNlIGFuZCB6ZXJvIG9yIG1vcmUgOmtleXdvcmQ6YGZvcmAgb3IgOmtleXdvcmQ6YGlmYCBjbGF1c2VzLgorSW4gdGhpcyBjYXNlLCB0aGUgZWxlbWVudHMgb2YgdGhlIG5ldyBjb250YWluZXIgYXJlIHRob3NlIHRoYXQgd291bGQgYmUgcHJvZHVjZWQKK2J5IGNvbnNpZGVyaW5nIGVhY2ggb2YgdGhlIDprZXl3b3JkOmBmb3JgIG9yIDprZXl3b3JkOmBpZmAgY2xhdXNlcyBhIGJsb2NrLAorbmVzdGluZyBmcm9tIGxlZnQgdG8gcmlnaHQsIGFuZCBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uIHRvIHByb2R1Y2UgYW4gZWxlbWVudAorZWFjaCB0aW1lIHRoZSBpbm5lcm1vc3QgYmxvY2sgaXMgcmVhY2hlZC4KKworTm90ZSB0aGF0IHRoZSBjb21wcmVoZW5zaW9uIGlzIGV4ZWN1dGVkIGluIGEgc2VwYXJhdGUgc2NvcGUsIHNvIG5hbWVzIGFzc2lnbmVkCit0byBpbiB0aGUgdGFyZ2V0IGxpc3QgZG9uJ3QgImxlYWsiIGluIHRoZSBlbmNsb3Npbmcgc2NvcGUuCisKKwogLi4gX2dlbmV4cHI6CiAKIEdlbmVyYXRvciBleHByZXNzaW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC4uIGluZGV4OjogcGFpcjogZ2VuZXJhdG9yOyBleHByZXNzaW9uCisgICAgICAgICAgIG9iamVjdDogZ2VuZXJhdG9yCiAKIEEgZ2VuZXJhdG9yIGV4cHJlc3Npb24gaXMgYSBjb21wYWN0IGdlbmVyYXRvciBub3RhdGlvbiBpbiBwYXJlbnRoZXNlczoKIAogLi4gcHJvZHVjdGlvbmxpc3Q6OgotICAgZ2VuZXJhdG9yX2V4cHJlc3Npb246ICIoIiBgZXhwcmVzc2lvbmAgYGdlbmV4cHJfZm9yYCAiKSIKLSAgIGdlbmV4cHJfZm9yOiAiZm9yIiBgdGFyZ2V0X2xpc3RgICJpbiIgYG9yX3Rlc3RgIFtgZ2VuZXhwcl9pdGVyYF0KLSAgIGdlbmV4cHJfaXRlcjogYGdlbmV4cHJfZm9yYCB8IGBnZW5leHByX2lmYAotICAgZ2VuZXhwcl9pZjogImlmIiBgb2xkX2V4cHJlc3Npb25gIFtgZ2VuZXhwcl9pdGVyYF0KKyAgIGdlbmVyYXRvcl9leHByZXNzaW9uOiAiKCIgYGV4cHJlc3Npb25gIGBjb21wX2ZvcmAgIikiCiAKLS4uIGluZGV4Ojogb2JqZWN0OiBnZW5lcmF0b3IKK0EgZ2VuZXJhdG9yIGV4cHJlc3Npb24geWllbGRzIGEgbmV3IGdlbmVyYXRvciBvYmplY3QuICBJdHMgc3ludGF4IGlzIHRoZSBzYW1lIGFzCitmb3IgY29tcHJlaGVuc2lvbnMsIGV4Y2VwdCB0aGF0IGl0IGlzIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIGluc3RlYWQgb2YKK2JyYWNrZXRzIG9yIGN1cmx5IGJyYWNlcy4KIAotQSBnZW5lcmF0b3IgZXhwcmVzc2lvbiB5aWVsZHMgYSBuZXcgZ2VuZXJhdG9yIG9iamVjdC4gIEl0IGNvbnNpc3RzIG9mIGEgc2luZ2xlCi1leHByZXNzaW9uIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSA6a2V5d29yZDpgZm9yYCBjbGF1c2UgYW5kIHplcm8gb3IgbW9yZQotOmtleXdvcmQ6YGZvcmAgb3IgOmtleXdvcmQ6YGlmYCBjbGF1c2VzLiAgVGhlIGl0ZXJhdGluZyB2YWx1ZXMgb2YgdGhlIG5ldwotZ2VuZXJhdG9yIGFyZSB0aG9zZSB0aGF0IHdvdWxkIGJlIHByb2R1Y2VkIGJ5IGNvbnNpZGVyaW5nIGVhY2ggb2YgdGhlCi06a2V5d29yZDpgZm9yYCBvciA6a2V5d29yZDpgaWZgIGNsYXVzZXMgYSBibG9jaywgbmVzdGluZyBmcm9tIGxlZnQgdG8gcmlnaHQsIGFuZAotZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbiB0byB5aWVsZCBhIHZhbHVlIHRoYXQgaXMgcmVhY2hlZCB0aGUgaW5uZXJtb3N0IGJsb2NrCi1mb3IgZWFjaCBpdGVyYXRpb24uCi0KLVZhcmlhYmxlcyB1c2VkIGluIHRoZSBnZW5lcmF0b3IgZXhwcmVzc2lvbiBhcmUgZXZhbHVhdGVkIGxhemlseSBpbiBhIHNlcGFyYXRlCi1zY29wZSB3aGVuIHRoZSA6bWV0aDpgbmV4dGAgbWV0aG9kIGlzIGNhbGxlZCBmb3IgdGhlIGdlbmVyYXRvciBvYmplY3QgKGluIHRoZQotc2FtZSBmYXNoaW9uIGFzIGZvciBub3JtYWwgZ2VuZXJhdG9ycykuICBIb3dldmVyLCB0aGUgOmtleXdvcmQ6YGluYCBleHByZXNzaW9uCi1vZiB0aGUgbGVmdG1vc3QgOmtleXdvcmQ6YGZvcmAgY2xhdXNlIGlzIGltbWVkaWF0ZWx5IGV2YWx1YXRlZCBpbiB0aGUgY3VycmVudAotc2NvcGUgc28gdGhhdCBhbiBlcnJvciBwcm9kdWNlZCBieSBpdCBjYW4gYmUgc2VlbiBiZWZvcmUgYW55IG90aGVyIHBvc3NpYmxlCitWYXJpYWJsZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdG9yIGV4cHJlc3Npb24gYXJlIGV2YWx1YXRlZCBsYXppbHkgd2hlbiB0aGUKKzptZXRoOmBfX25leHRfX2AgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZ2VuZXJhdG9yIG9iamVjdCAoaW4gdGhlIHNhbWUgZmFzaGlvbiBhcworbm9ybWFsIGdlbmVyYXRvcnMpLiAgSG93ZXZlciwgdGhlIGxlZnRtb3N0IDprZXl3b3JkOmBmb3JgIGNsYXVzZSBpcyBpbW1lZGlhdGVseQorZXZhbHVhdGVkLCBzbyB0aGF0IGFuIGVycm9yIHByb2R1Y2VkIGJ5IGl0IGNhbiBiZSBzZWVuIGJlZm9yZSBhbnkgb3RoZXIgcG9zc2libGUKIGVycm9yIGluIHRoZSBjb2RlIHRoYXQgaGFuZGxlcyB0aGUgZ2VuZXJhdG9yIGV4cHJlc3Npb24uICBTdWJzZXF1ZW50Ci06a2V5d29yZDpgZm9yYCBhbmQgOmtleXdvcmQ6YGlmYCBjbGF1c2VzIGNhbm5vdCBiZSBldmFsdWF0ZWQgaW1tZWRpYXRlbHkgc2luY2UKLXRoZXkgbWF5IGRlcGVuZCBvbiB0aGUgcHJldmlvdXMgOmtleXdvcmQ6YGZvcmAgbG9vcC4gIEZvciBleGFtcGxlOgotYGAoeCp5IGZvciB4IGluIHJhbmdlKDEwKSBmb3IgeSBpbiBiYXIoeCkpYGAuCis6a2V5d29yZDpgZm9yYCBjbGF1c2VzIGNhbm5vdCBiZSBldmFsdWF0ZWQgaW1tZWRpYXRlbHkgc2luY2UgdGhleSBtYXkgZGVwZW5kIG9uCit0aGUgcHJldmlvdXMgOmtleXdvcmQ6YGZvcmAgbG9vcC4gRm9yIGV4YW1wbGU6IGBgKHgqeSBmb3IgeCBpbiByYW5nZSgxMCkgZm9yIHkKK2luIGJhcih4KSlgYC4KIAotVGhlIHBhcmVudGhlc2VzIGNhbiBiZSBvbWl0dGVkIG9uIGNhbGxzIHdpdGggb25seSBvbmUgYXJndW1lbnQuIFNlZSBzZWN0aW9uCitUaGUgcGFyZW50aGVzZXMgY2FuIGJlIG9taXR0ZWQgb24gY2FsbHMgd2l0aCBvbmx5IG9uZSBhcmd1bWVudC4gIFNlZSBzZWN0aW9uCiA6cmVmOmBjYWxsc2AgZm9yIHRoZSBkZXRhaWwuCiAKLQogLi4gX2RpY3Q6CiAKIERpY3Rpb25hcnkgZGlzcGxheXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLi4gaW5kZXg6OiBwYWlyOiBkaWN0aW9uYXJ5OyBkaXNwbGF5Ci0KLS4uIGluZGV4OjoKLSAgIHNpbmdsZToga2V5Ci0gICBzaW5nbGU6IGRhdHVtCi0gICBzaW5nbGU6IGtleS9kYXR1bSBwYWlyCisgICAgICAgICAgIGtleSwgZGF0dW0sIGtleS9kYXR1bSBwYWlyCisgICAgICAgICAgIG9iamVjdDogZGljdGlvbmFyeQogCiBBIGRpY3Rpb25hcnkgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBrZXkvZGF0dW0gcGFpcnMgZW5jbG9zZWQgaW4KIGN1cmx5IGJyYWNlczoKIAogLi4gcHJvZHVjdGlvbmxpc3Q6OgotICAgZGljdF9kaXNwbGF5OiAieyIgW2BrZXlfZGF0dW1fbGlzdGBdICJ9IgorICAgZGljdF9kaXNwbGF5OiAieyIgW2BrZXlfZGF0dW1fbGlzdGAgfCBgZGljdF9jb21wcmVoZW5zaW9uYF0gIn0iCiAgICBrZXlfZGF0dW1fbGlzdDogYGtleV9kYXR1bWAgKCIsIiBga2V5X2RhdHVtYCkqIFsiLCJdCiAgICBrZXlfZGF0dW06IGBleHByZXNzaW9uYCAiOiIgYGV4cHJlc3Npb25gCi0KLS4uIGluZGV4Ojogb2JqZWN0OiBkaWN0aW9uYXJ5CisgICBkaWN0X2NvbXByZWhlbnNpb246IGBleHByZXNzaW9uYCAiOiIgYGV4cHJlc3Npb25gIGBjb21wX2ZvcmAKIAogQSBkaWN0aW9uYXJ5IGRpc3BsYXkgeWllbGRzIGEgbmV3IGRpY3Rpb25hcnkgb2JqZWN0LgogCi1UaGUga2V5L2RhdHVtIHBhaXJzIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHRvIGRlZmluZSB0aGUgZW50cmllcyBvZgotdGhlIGRpY3Rpb25hcnk6IGVhY2gga2V5IG9iamVjdCBpcyB1c2VkIGFzIGEga2V5IGludG8gdGhlIGRpY3Rpb25hcnkgdG8gc3RvcmUKLXRoZSBjb3JyZXNwb25kaW5nIGRhdHVtLgorSWYgYSBjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2Ugb2Yga2V5L2RhdHVtIHBhaXJzIGlzIGdpdmVuLCB0aGV5IGFyZSBldmFsdWF0ZWQKK2Zyb20gbGVmdCB0byByaWdodCB0byBkZWZpbmUgdGhlIGVudHJpZXMgb2YgdGhlIGRpY3Rpb25hcnk6IGVhY2gga2V5IG9iamVjdCBpcwordXNlZCBhcyBhIGtleSBpbnRvIHRoZSBkaWN0aW9uYXJ5IHRvIHN0b3JlIHRoZSBjb3JyZXNwb25kaW5nIGRhdHVtLiAgVGhpcyBtZWFucwordGhhdCB5b3UgY2FuIHNwZWNpZnkgdGhlIHNhbWUga2V5IG11bHRpcGxlIHRpbWVzIGluIHRoZSBrZXkvZGF0dW0gbGlzdCwgYW5kIHRoZQorZmluYWwgZGljdGlvbmFyeSdzIHZhbHVlIGZvciB0aGF0IGtleSB3aWxsIGJlIHRoZSBsYXN0IG9uZSBnaXZlbi4KKworQSBkaWN0IGNvbXByZWhlbnNpb24sIGluIGNvbnRyYXN0IHRvIGxpc3QgYW5kIHNldCBjb21wcmVoZW5zaW9ucywgbmVlZHMgdHdvCitleHByZXNzaW9ucyBzZXBhcmF0ZWQgd2l0aCBhIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSB1c3VhbCAiZm9yIiBhbmQgImlmIiBjbGF1c2VzLgorV2hlbiB0aGUgY29tcHJlaGVuc2lvbiBpcyBydW4sIHRoZSByZXN1bHRpbmcga2V5IGFuZCB2YWx1ZSBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQKK2luIHRoZSBuZXcgZGljdGlvbmFyeSBpbiB0aGUgb3JkZXIgdGhleSBhcmUgcHJvZHVjZWQuCiAKIC4uIGluZGV4OjogcGFpcjogaW1tdXRhYmxlOyBvYmplY3QKKyAgICAgICAgICAgaGFzaGFibGUKIAogUmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlcyBvZiB0aGUga2V5IHZhbHVlcyBhcmUgbGlzdGVkIGVhcmxpZXIgaW4gc2VjdGlvbgogOnJlZjpgdHlwZXNgLiAgKFRvIHN1bW1hcml6ZSwgdGhlIGtleSB0eXBlIHNob3VsZCBiZSA6dGVybTpgaGFzaGFibGVgLCB3aGljaCBleGNsdWRlcwpAQCAtMjgyLDYgKzMwOCwzMCBAQAogcHJldmFpbHMuCiAKIAorLi4gX3NldDoKKworU2V0IGRpc3BsYXlzCistLS0tLS0tLS0tLS0KKworLi4gaW5kZXg6OiBwYWlyOiBzZXQ7IGRpc3BsYXkKKyAgICAgICAgICAgb2JqZWN0OiBzZXQKKworQSBzZXQgZGlzcGxheSBpcyBkZW5vdGVkIGJ5IGN1cmx5IGJyYWNlcyBhbmQgZGlzdGluZ3Vpc2hhYmxlIGZyb20gZGljdGlvbmFyeQorZGlzcGxheXMgYnkgdGhlIGxhY2sgb2YgY29sb25zIHNlcGFyYXRpbmcga2V5cyBhbmQgdmFsdWVzOgorCisuLiBwcm9kdWN0aW9ubGlzdDo6CisgICBzZXRfZGlzcGxheTogInsiIChgZXhwcmVzc2lvbl9saXN0YCB8IGBjb21wcmVoZW5zaW9uYCkgIn0iCisKK0Egc2V0IGRpc3BsYXkgeWllbGRzIGEgbmV3IG11dGFibGUgc2V0IG9iamVjdCwgdGhlIGNvbnRlbnRzIGJlaW5nIHNwZWNpZmllZCBieQorZWl0aGVyIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnMgb3IgYSBjb21wcmVoZW5zaW9uLiAgV2hlbiBhIGNvbW1hLXNlcGFyYXRlZAorbGlzdCBvZiBleHByZXNzaW9ucyBpcyBzdXBwbGllZCwgaXRzIGVsZW1lbnRzIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0CithbmQgYWRkZWQgdG8gdGhlIHNldCBvYmplY3QuICBXaGVuIGEgY29tcHJlaGVuc2lvbiBpcyBzdXBwbGllZCwgdGhlIHNldCBpcworY29uc3RydWN0ZWQgZnJvbSB0aGUgZWxlbWVudHMgcmVzdWx0aW5nIGZyb20gdGhlIGNvbXByZWhlbnNpb24uCisKK0FuIGVtcHR5IHNldCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgd2l0aCBgYHt9YGA7IHRoaXMgbGl0ZXJhbCBjb25zdHJ1Y3RzIGFuIGVtcHR5CitkaWN0aW9uYXJ5LgorCisKIC4uIF9zdHJpbmctY29udmVyc2lvbnM6CiAKIFN0cmluZyBjb252ZXJzaW9ucwpAQCAtMzY3LDcgKzQxNyw3IEBACiBtdWx0aXBsZSB0aW1lcywgdGhleSBoYXZlIG1vcmUgdGhhbiBvbmUgZW50cnkgcG9pbnQgYW5kIHRoZWlyIGV4ZWN1dGlvbiBjYW4gYmUKIHN1c3BlbmRlZC4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBhIGdlbmVyYXRvciBmdW5jdGlvbiBjYW5ub3QgY29udHJvbAogd2hlcmUgc2hvdWxkIHRoZSBleGVjdXRpb24gY29udGludWUgYWZ0ZXIgaXQgeWllbGRzOyB0aGUgY29udHJvbCBpcyBhbHdheXMKLXRyYW5zZmVyZWQgdG8gdGhlIGdlbmVyYXRvcidzIGNhbGxlci4KK3RyYW5zZmVycmVkIHRvIHRoZSBnZW5lcmF0b3IncyBjYWxsZXIuCiAKIC4uIGluZGV4Ojogb2JqZWN0OiBnZW5lcmF0b3IKIApAQCAtOTUwLDYgKzEwMDAsMTEgQEAKIGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgbXVsdGlwbGljYXRpb24gd2l0aCBgYHBvdygyLCBuKWBgLiAgTmVnYXRpdmUgc2hpZnQKIGNvdW50cyByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgIGV4Y2VwdGlvbi4KIAorLi4gbm90ZTo6CisKKyAgIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzIHJlcXVpcmVkCisgICB0byBiZSBhdCBtb3N0IDphdHRyOmBzeXMubWF4c2l6ZWAuICBJZiB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzIGxhcmdlciB0aGFuCisgICA6YXR0cjpgc3lzLm1heHNpemVgIGFuIDpleGM6YE92ZXJmbG93RXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIC4uIF9iaXR3aXNlOgogCkBAIC0xMzEyLDYgKzEzNjcsNyBAQAogfCBgYCtgYCwgYGAtYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgYGAqYGAsIGBgL2BgLCBgYC8vYGAsIGBgJWBgICAgICAgICAgICAgICAgICAgIHwgTXVsdGlwbGljYXRpb24sIGRpdmlzaW9uLCByZW1haW5kZXIgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbI11fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgYGAreGBgLCBgYC14YGAsIGBgfnhgYCAgICAgICAgICAgICAgICAgICAgICAgIHwgUG9zaXRpdmUsIG5lZ2F0aXZlLCBiaXR3aXNlIE5PVCAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0xMzM2LDggKzEzOTIsOCBAQAogICAgdHJ1ZSBudW1lcmljYWxseSBkdWUgdG8gcm91bmRvZmYuICBGb3IgZXhhbXBsZSwgYW5kIGFzc3VtaW5nIGEgcGxhdGZvcm0gb24gd2hpY2gKICAgIGEgUHl0aG9uIGZsb2F0IGlzIGFuIElFRUUgNzU0IGRvdWJsZS1wcmVjaXNpb24gbnVtYmVyLCBpbiBvcmRlciB0aGF0IGBgLTFlLTEwMCAlCiAgICAxZTEwMGBgIGhhdmUgdGhlIHNhbWUgc2lnbiBhcyBgYDFlMTAwYGAsIHRoZSBjb21wdXRlZCByZXN1bHQgaXMgYGAtMWUtMTAwICsKLSAgIDFlMTAwYGAsIHdoaWNoIGlzIG51bWVyaWNhbGx5IGV4YWN0bHkgZXF1YWwgdG8gYGAxZTEwMGBgLiAgRnVuY3Rpb24gOmZ1bmM6YGZtb2RgCi0gICBpbiB0aGUgOm1vZDpgbWF0aGAgbW9kdWxlIHJldHVybnMgYSByZXN1bHQgd2hvc2Ugc2lnbiBtYXRjaGVzIHRoZSBzaWduIG9mIHRoZQorICAgMWUxMDBgYCwgd2hpY2ggaXMgbnVtZXJpY2FsbHkgZXhhY3RseSBlcXVhbCB0byBgYDFlMTAwYGAuICBUaGUgZnVuY3Rpb24KKyAgIDpmdW5jOmBtYXRoLmZtb2RgIHJldHVybnMgYSByZXN1bHQgd2hvc2Ugc2lnbiBtYXRjaGVzIHRoZSBzaWduIG9mIHRoZQogICAgZmlyc3QgYXJndW1lbnQgaW5zdGVhZCwgYW5kIHNvIHJldHVybnMgYGAtMWUtMTAwYGAgaW4gdGhpcyBjYXNlLiBXaGljaCBhcHByb2FjaAogICAgaXMgbW9yZSBhcHByb3ByaWF0ZSBkZXBlbmRzIG9uIHRoZSBhcHBsaWNhdGlvbi4KIApAQCAtMTM2Nyw1ICsxNDIzLDggQEAKICAgIHRoZSA6a2V5d29yZDpgaXNgIG9wZXJhdG9yLCBsaWtlIHRob3NlIGludm9sdmluZyBjb21wYXJpc29ucyBiZXR3ZWVuIGluc3RhbmNlCiAgICBtZXRob2RzLCBvciBjb25zdGFudHMuICBDaGVjayB0aGVpciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm8uCiAKKy4uIFsjXSBUaGUgYGAlYGAgb3BlcmF0b3IgaXMgYWxzbyB1c2VkIGZvciBzdHJpbmcgZm9ybWF0dGluZzsgdGhlIHNhbWUKKyAgIHByZWNlZGVuY2UgYXBwbGllcy4KKwogLi4gWyNdIFRoZSBwb3dlciBvcGVyYXRvciBgYCoqYGAgYmluZHMgbGVzcyB0aWdodGx5IHRoYW4gYW4gYXJpdGhtZXRpYyBvcgogICAgYml0d2lzZSB1bmFyeSBvcGVyYXRvciBvbiBpdHMgcmlnaHQsIHRoYXQgaXMsIGBgMioqLTFgYCBpcyBgYDAuNWBgLgpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24ucnN0IGIvRG9jL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24ucnN0CmluZGV4IDY5YmQ0MWQuLjM2ZjgyNGYgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2ludHJvZHVjdGlvbi5yc3QKQEAgLTY4LDEyICs2OCwxMiBAQAogICAgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGB0aGUgSXJvblB5dGhvbiB3ZWJzaXRlIDxodHRwOi8vd3d3Lmlyb25weXRob24uY29tLz5gXy4KIAogUHlQeQotICAgQW4gaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIHdyaXR0ZW4gaW4gUHl0aG9uOyBldmVuIHRoZSBieXRlY29kZSBpbnRlcnByZXRlciBpcwotICAgd3JpdHRlbiBpbiBQeXRob24uICBUaGlzIGlzIGV4ZWN1dGVkIHVzaW5nIENQeXRob24gYXMgdGhlIHVuZGVybHlpbmcKLSAgIGludGVycHJldGVyLiAgT25lIG9mIHRoZSBnb2FscyBvZiB0aGUgcHJvamVjdCBpcyB0byBlbmNvdXJhZ2UgZXhwZXJpbWVudGF0aW9uCi0gICB3aXRoIHRoZSBsYW5ndWFnZSBpdHNlbGYgYnkgbWFraW5nIGl0IGVhc2llciB0byBtb2RpZnkgdGhlIGludGVycHJldGVyIChzaW5jZSBpdAotICAgaXMgd3JpdHRlbiBpbiBQeXRob24pLiAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgb24gYHRoZSBQeVB5Ci0gICBwcm9qZWN0J3MgaG9tZSBwYWdlIDxodHRwOi8vY29kZXNwZWFrLm5ldC9weXB5Lz5gXy4KKyAgIEFuIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiB3cml0dGVuIGNvbXBsZXRlbHkgaW4gUHl0aG9uLiBJdCBzdXBwb3J0cyBzZXZlcmFsCisgICBhZHZhbmNlZCBmZWF0dXJlcyBub3QgZm91bmQgaW4gb3RoZXIgaW1wbGVtZW50YXRpb25zIGxpa2Ugc3RhY2tsZXNzIHN1cHBvcnQKKyAgIGFuZCBhIEp1c3QgaW4gVGltZSBjb21waWxlci4gT25lIG9mIHRoZSBnb2FscyBvZiB0aGUgcHJvamVjdCBpcyB0byBlbmNvdXJhZ2UKKyAgIGV4cGVyaW1lbnRhdGlvbiB3aXRoIHRoZSBsYW5ndWFnZSBpdHNlbGYgYnkgbWFraW5nIGl0IGVhc2llciB0byBtb2RpZnkgdGhlCisgICBpbnRlcnByZXRlciAoc2luY2UgaXQgaXMgd3JpdHRlbiBpbiBQeXRob24pLiAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcworICAgYXZhaWxhYmxlIG9uIGB0aGUgUHlQeSBwcm9qZWN0J3MgaG9tZSBwYWdlIDxodHRwOi8vcHlweS5vcmcvPmBfLgogCiBFYWNoIG9mIHRoZXNlIGltcGxlbWVudGF0aW9ucyB2YXJpZXMgaW4gc29tZSB3YXkgZnJvbSB0aGUgbGFuZ3VhZ2UgYXMgZG9jdW1lbnRlZAogaW4gdGhpcyBtYW51YWwsIG9yIGludHJvZHVjZXMgc3BlY2lmaWMgaW5mb3JtYXRpb24gYmV5b25kIHdoYXQncyBjb3ZlcmVkIGluIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLnJzdCBiL0RvYy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5yc3QKaW5kZXggZDRjNzk5MC4uZDcxNjEzOSAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMucnN0CkBAIC00MjYsNiArNDI2LDcgQEAKIC4uIHByb2R1Y3Rpb25saXN0OjoKICAgIHN0cmluZ2xpdGVyYWw6IFtgc3RyaW5ncHJlZml4YF0oYHNob3J0c3RyaW5nYCB8IGBsb25nc3RyaW5nYCkKICAgIHN0cmluZ3ByZWZpeDogInIiIHwgInUiIHwgInVyIiB8ICJSIiB8ICJVIiB8ICJVUiIgfCAiVXIiIHwgInVSIgorICAgICAgICAgICAgICAgOiB8ICJiIiB8ICJCIiB8ICJiciIgfCAiQnIiIHwgImJSIiB8ICJCUiIKICAgIHNob3J0c3RyaW5nOiAiJyIgYHNob3J0c3RyaW5naXRlbWAqICInIiB8ICciJyBgc2hvcnRzdHJpbmdpdGVtYCogJyInCiAgICBsb25nc3RyaW5nOiAiJycnIiBgbG9uZ3N0cmluZ2l0ZW1gKiAiJycnIgogICAgICAgICAgICAgIDogfCAnIiIiJyBgbG9uZ3N0cmluZ2l0ZW1gKiAnIiIiJwpAQCAtNDU4LDggKzQ1OSwxMCBAQAogYGAndSdgYCBvciBgYCdVJ2BgIG1ha2VzIHRoZSBzdHJpbmcgYSBVbmljb2RlIHN0cmluZy4gIFVuaWNvZGUgc3RyaW5ncyB1c2UgdGhlCiBVbmljb2RlIGNoYXJhY3RlciBzZXQgYXMgZGVmaW5lZCBieSB0aGUgVW5pY29kZSBDb25zb3J0aXVtIGFuZCBJU08gMTA2NDYuICBTb21lCiBhZGRpdGlvbmFsIGVzY2FwZSBzZXF1ZW5jZXMsIGRlc2NyaWJlZCBiZWxvdywgYXJlIGF2YWlsYWJsZSBpbiBVbmljb2RlIHN0cmluZ3MuCi1UaGUgdHdvIHByZWZpeCBjaGFyYWN0ZXJzIG1heSBiZSBjb21iaW5lZDsgaW4gdGhpcyBjYXNlLCBgYCd1J2BgIG11c3QgYXBwZWFyCi1iZWZvcmUgYGAncidgYC4KK0EgcHJlZml4IG9mIGBgJ2InYGAgb3IgYGAnQidgYCBpcyBpZ25vcmVkIGluIFB5dGhvbiAyOyBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUKK2xpdGVyYWwgc2hvdWxkIGJlY29tZSBhIGJ5dGVzIGxpdGVyYWwgaW4gUHl0aG9uIDMgKGUuZy4gd2hlbiBjb2RlIGlzCithdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB3aXRoIDJ0bzMpLiAgQSBgYCd1J2BgIG9yIGBgJ2InYGAgcHJlZml4IG1heSBiZSBmb2xsb3dlZAorYnkgYW4gYGAncidgYCBwcmVmaXguCiAKIEluIHRyaXBsZS1xdW90ZWQgc3RyaW5ncywgdW5lc2NhcGVkIG5ld2xpbmVzIGFuZCBxdW90ZXMgYXJlIGFsbG93ZWQgKGFuZCBhcmUKIHJldGFpbmVkKSwgZXhjZXB0IHRoYXQgdGhyZWUgdW5lc2NhcGVkIHF1b3RlcyBpbiBhIHJvdyB0ZXJtaW5hdGUgdGhlIHN0cmluZy4gIChBCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QgYi9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QKaW5kZXggNzNkOThjYS4uYzBkODE4MiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLnJzdApAQCAtODM2LDE1ICs4MzYsMTEgQEAKIGV4aXN0cy4gVHdvIGRvdHMgbWVhbnMgdXAgb25lIHBhY2thZ2UgbGV2ZWwuIFRocmVlIGRvdHMgaXMgdXAgdHdvIGxldmVscywgZXRjLgogU28gaWYgeW91IGV4ZWN1dGUgYGBmcm9tIC4gaW1wb3J0IG1vZGBgIGZyb20gYSBtb2R1bGUgaW4gdGhlIGBgcGtnYGAgcGFja2FnZQogdGhlbiB5b3Ugd2lsbCBlbmQgdXAgaW1wb3J0aW5nIGBgcGtnLm1vZGBgLiBJZiB5b3UgZXhlY3V0ZSBgYGZyb20gLi5zdWJwa2cyCi1pbXBydCBtb2RgYCBmcm9tIHdpdGhpbiBgYHBrZy5zdWJwa2cxYGAgeW91IHdpbGwgaW1wb3J0IGBgcGtnLnN1YnBrZzIubW9kYGAuCitpbXBvcnQgbW9kYGAgZnJvbSB3aXRoaW4gYGBwa2cuc3VicGtnMWBgIHlvdSB3aWxsIGltcG9ydCBgYHBrZy5zdWJwa2cyLm1vZGBgLgogVGhlIHNwZWNpZmljYXRpb24gZm9yIHJlbGF0aXZlIGltcG9ydHMgaXMgY29udGFpbmVkIHdpdGhpbiA6cGVwOmAzMjhgLgogCi0KLS4uIGluZGV4OjogYnVpbHRpbjogX19pbXBvcnRfXwotCi1UaGUgYnVpbHQtaW4gZnVuY3Rpb24gOmZ1bmM6YF9faW1wb3J0X19gIGlzIHByb3ZpZGVkIHRvIHN1cHBvcnQgYXBwbGljYXRpb25zCi10aGF0IGRldGVybWluZSB3aGljaCBtb2R1bGVzIG5lZWQgdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5OyByZWZlciB0bwotOnJlZjpgYnVpbHQtaW4tZnVuY3NgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorOmZ1bmM6YGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlYCBpcyBwcm92aWRlZCB0byBzdXBwb3J0IGFwcGxpY2F0aW9ucyB0aGF0CitkZXRlcm1pbmUgd2hpY2ggbW9kdWxlcyBuZWVkIHRvIGJlIGxvYWRlZCBkeW5hbWljYWxseS4KIAogCiAuLiBfZnV0dXJlOgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL2RhaWx5YnVpbGQucHkgYi9Eb2MvdG9vbHMvZGFpbHlidWlsZC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYTQ3MWU2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL3Rvb2xzL2RhaWx5YnVpbGQucHkKQEAgLTAsMCArMSw4MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCisjIFJ1bnMgdGhlIGRhaWx5IGJ1aWxkIG9mIHRoZSBQeXRob24gZG9jcyBvbiBkaW5zZGFsZS5weXRob24ub3JnLgorIworIyBVc2FnZXM6CisjCisjICAgZGFpbHlidWlsZC5weQorIworIyB3aXRob3V0IGFueSBhcmd1bWVudHMgYnVpbGRzIGRvY3MgZm9yIGFsbCBicmFuY2hlcyBjb25maWd1cmVkIGluIHRoZSBnbG9iYWwKKyMgQlJBTkNIRVMgdmFsdWUuCisjCisjICAgZGFpbHlidWlsZC5weSBbLWRdIDxjaGVja291dD4gPHRhcmdldD4KKyMKKyMgYnVpbGRzIG9uZSB2ZXJzaW9uLCB3aGVyZSA8Y2hlY2tvdXQ+IGlzIGFuIFNWTiBjaGVja291dCBkaXJlY3Rvcnkgb2YgdGhlCisjIFB5dGhvbiBicmFuY2ggdG8gYnVpbGQgZG9jcyBmb3IsIGFuZCA8dGFyZ2V0PiBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZQorIyByZXN1bHQgc2hvdWxkIGJlIHBsYWNlZC4gIElmIC1kIGlzIGdpdmVuLCB0aGUgZG9jcyBhcmUgYnVpbHQgZXZlbiBpZiB0aGUKKyMgYnJhbmNoIGlzIGluIGRldmVsb3BtZW50IG1vZGUgKGkuZS4gdmVyc2lvbiBjb250YWlucyBhLCBiIG9yIGMpLgorIworIyBUaGlzIHNjcmlwdCBpcyBub3QgcnVuIGZyb20gdGhlIGNoZWNrb3V0LCBzbyBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaG93IHRoZQorIyBkYWlseSBidWlsZCBpcyBydW4sIHlvdSBtdXN0IHJlcGxhY2UgaXQgb24gZGluc2RhbGUuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yCisjIGV4YW1wbGUsIGFmdGVyIHRoZSByZWxlYXNlIG9mIGEgbmV3IG1pbm9yIHZlcnNpb24uCisjCisjIDAzLzIwMTAsIEdlb3JnIEJyYW5kbAorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBnZXRvcHQKKworCitCVUlMRFJPT1QgPSAnL2hvbWUvZ2JyYW5kbC9kb2NidWlsZCcKK1dXV1JPT1QgPSAnL2RhdGEvZnRwLnB5dGhvbi5vcmcvcHViL2RvY3MucHl0aG9uLm9yZycKKworQlJBTkNIRVMgPSBbCisgICAgIyBjaGVja291dCwgdGFyZ2V0LCBpc2RldgorICAgIChCVUlMRFJPT1QgKyAnL3B5dGhvbjMzJywgV1dXUk9PVCArICcvZGV2JywgVHJ1ZSksCisgICAgKEJVSUxEUk9PVCArICcvcHl0aG9uMjcnLCBXV1dST09ULCBGYWxzZSksCisgICAgKEJVSUxEUk9PVCArICcvcHl0aG9uMzInLCBXV1dST09UICsgJy9weTNrJywgRmFsc2UpLAorXQorCisKK2RlZiBidWlsZF9vbmUoY2hlY2tvdXQsIHRhcmdldCwgaXNkZXYpOgorICAgIHByaW50ICdEb2MgYXV0b2J1aWxkIHN0YXJ0ZWQgaW4gJXMnICUgY2hlY2tvdXQKKyAgICBvcy5jaGRpcihjaGVja291dCkKKyAgICBwcmludCAnUnVubmluZyBzdm4gdXBkYXRlJworICAgIG9zLnN5c3RlbSgnc3ZuIHVwZGF0ZScpCisgICAgcHJpbnQgJ1J1bm5pbmcgbWFrZSBhdXRvYnVpbGQnCisgICAgaWYgb3MuV0VYSVRTVEFUVVMob3Muc3lzdGVtKAorICAgICAgICAnY2QgRG9jOyBtYWtlIGF1dG9idWlsZC0lcycgJSAoaXNkZXYgYW5kICdkZXYnIG9yICdzdGFibGUnKSkpID09IDI6CisgICAgICAgIHByaW50ICcqJyAqIDgwCisgICAgICAgIHJldHVybgorICAgIHByaW50ICdDb3B5aW5nIEhUTUwgZmlsZXMnCisgICAgb3Muc3lzdGVtKCdjcCAtYSBEb2MvYnVpbGQvaHRtbC8qICVzJyAlIHRhcmdldCkKKyAgICBwcmludCAnQ29weWluZyBkaXN0IGZpbGVzJworICAgIG9zLnN5c3RlbSgnbWtkaXIgLXAgJXMvYXJjaGl2ZXMnICUgdGFyZ2V0KQorICAgIG9zLnN5c3RlbSgnY3AgLWEgRG9jL2Rpc3QvKiAlcy9hcmNoaXZlcycgJSB0YXJnZXQpCisgICAgcHJpbnQgJ0ZpbmlzaGVkJworICAgIHByaW50ICc9JyAqIDgwCisKK2RlZiB1c2FnZSgpOgorICAgIHByaW50ICdVc2FnZTonCisgICAgcHJpbnQgJyAgJXMnICUgc3lzLmFyZ3ZbMF0KKyAgICBwcmludCAnb3InCisgICAgcHJpbnQgJyAgJXMgWy1kXSA8Y2hlY2tvdXQ+IDx0YXJnZXQ+JyAlIHN5cy5hcmd2WzBdCisgICAgc3lzLmV4aXQoMSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRyeToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnZCcpCisgICAgZXhjZXB0IGdldG9wdC5lcnJvcjoKKyAgICAgICAgdXNhZ2UoKQorICAgIGlmIG9wdHMgYW5kIG5vdCBhcmdzOgorICAgICAgICB1c2FnZSgpCisgICAgaWYgYXJnczoKKyAgICAgICAgaWYgbGVuKGFyZ3MpICE9IDI6CisgICAgICAgICAgICB1c2FnZSgpCisgICAgICAgIGJ1aWxkX29uZShhcmdzWzBdLCBhcmdzWzFdLCBib29sKG9wdHMpKQorICAgIGVsc2U6CisgICAgICAgIGZvciBicmFuY2ggaW4gQlJBTkNIRVM6CisgICAgICAgICAgICBidWlsZF9vbmUoKmJyYW5jaCkKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbngtYnVpbGQucHkgYi9Eb2MvdG9vbHMvc3BoaW54LWJ1aWxkLnB5CmluZGV4IDk0YThkZjguLmEwYmQ3ZmEgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbngtYnVpbGQucHkKKysrIGIvRG9jL3Rvb2xzL3NwaGlueC1idWlsZC5weQpAQCAtMywxMSArMywxNSBAQAogICAgIFNwaGlueCAtIFB5dGhvbiBkb2N1bWVudGF0aW9uIHRvb2xjaGFpbgogICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi0gICAgOmNvcHlyaWdodDogMjAwNyBieSBHZW9yZyBCcmFuZGwuCisgICAgOmNvcHlyaWdodDogMjAwNy0yMDEwIGJ5IEdlb3JnIEJyYW5kbC4KICAgICA6bGljZW5zZTogUHl0aG9uIGxpY2Vuc2UuCiAiIiIKIAogaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCisKKyMgR2V0IHJpZCBvZiBVc2VyV2FybmluZ3MgcmVwb3J0ZWQgYnkgcGtnX3Jlc291cmNlcy4KK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCBjYXRlZ29yeT1Vc2VyV2FybmluZywgbW9kdWxlPSdqaW5qYTInKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleGNvbnRlbnQuaHRtbAppbmRleCBiY2M0N2U1Li4zMDk2M2MzIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sCisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhjb250ZW50Lmh0bWwKQEAgLTcsMTIgKzcsMTIgQEAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPm9yIDxhIGhyZWY9Int7IHBhdGh0bygid2hhdHNuZXcvaW5kZXgiKSB9fSI+YWxsICJXaGF0J3MgbmV3IiBkb2N1bWVudHM8L2E+IHNpbmNlIDIuMDwvc3Bhbj48L3A+CiAgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygidHV0b3JpYWwvaW5kZXgiKSB9fSI+VHV0b3JpYWw8L2E+PGJyLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPnN0YXJ0IGhlcmU8L3NwYW4+PC9wPgotICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oInVzaW5nL2luZGV4IikgfX0iPlVzaW5nIFB5dGhvbjwvYT48YnIvPgotICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+aG93IHRvIHVzZSBQeXRob24gb24gZGlmZmVyZW50IHBsYXRmb3Jtczwvc3Bhbj48L3A+CiAgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygibGlicmFyeS9pbmRleCIpIH19Ij5MaWJyYXJ5IFJlZmVyZW5jZTwvYT48YnIvPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+a2VlcCB0aGlzIHVuZGVyIHlvdXIgcGlsbG93PC9zcGFuPjwvcD4KICAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJyZWZlcmVuY2UvaW5kZXgiKSB9fSI+TGFuZ3VhZ2UgUmVmZXJlbmNlPC9hPjxici8+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5kZXNjcmliZXMgc3ludGF4IGFuZCBsYW5ndWFnZSBlbGVtZW50czwvc3Bhbj48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygidXNpbmcvaW5kZXgiKSB9fSI+UHl0aG9uIFNldHVwIGFuZCBVc2FnZTwvYT48YnIvPgorICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+aG93IHRvIHVzZSBQeXRob24gb24gZGlmZmVyZW50IHBsYXRmb3Jtczwvc3Bhbj48L3A+CiAgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiaG93dG8vaW5kZXgiKSB9fSI+UHl0aG9uIEhPV1RPczwvYT48YnIvPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+aW4tZGVwdGggZG9jdW1lbnRzIG9uIHNwZWNpZmljIHRvcGljczwvc3Bhbj48L3A+CiAgICAgPC90ZD48dGQgd2lkdGg9IjUwJSI+CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbAppbmRleCA3ZGFhMGM2Li44ZDNmZWVmIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sCisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKQEAgLTIsOSArMiw5IEBACiAgICAgICAgICAgICA8cD48YSBocmVmPSJ7eyBwYXRodG8oJ2Rvd25sb2FkJykgfX0iPkRvd25sb2FkIHRoZXNlIGRvY3VtZW50czwvYT48L3A+CiAJICAgIDxoMz5Eb2NzIGZvciBvdGhlciB2ZXJzaW9uczwvaDM+CiAJICAgIDx1bD4KLQkgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy8yLjcvIj5QeXRob24gMi43IChzdGFibGUpPC9hPjwvbGk+Ci0JICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4xLyI+UHl0aG9uIDMuMSAoc3RhYmxlKTwvYT48L2xpPgotCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldi9weTNrLyI+UHl0aG9uIDMuMiAoaW4gZGV2ZWxvcG1lbnQpPC9hPjwvbGk+CisJICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi42LyI+UHl0aG9uIDIuNiAoc3RhYmxlKTwvYT48L2xpPgorCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMi8iPlB5dGhvbiAzLjIgKHN0YWJsZSk8L2E+PC9saT4KKwkgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXYvIj5QeXRob24gMy4zIChpbiBkZXZlbG9wbWVudCk8L2E+PC9saT4KICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvdmVyc2lvbnMvIj5PbGQgdmVyc2lvbnM8L2E+PC9saT4KICAgICAgICAgICAgIDwvdWw+CiAKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvcGF0Y2hsZXZlbC5weSBiL0RvYy90b29scy9zcGhpbnhleHQvcGF0Y2hsZXZlbC5weQppbmRleCBjYjllMzVjLi4wODI4NThlIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3BhdGNobGV2ZWwucHkKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9wYXRjaGxldmVsLnB5CkBAIC00MSw3ICs0MSw3IEBACiAgICAgc3VmZml4ZXMgPSB7CiAgICAgICAgICdQWV9SRUxFQVNFX0xFVkVMX0FMUEhBJzogJ2EnLAogICAgICAgICAnUFlfUkVMRUFTRV9MRVZFTF9CRVRBJzogICdiJywKLSAgICAgICAgJ1BZX1JFTEVBU0VfTEVWRUxfR0FNTUEnOiAnYycsCisgICAgICAgICdQWV9SRUxFQVNFX0xFVkVMX0dBTU1BJzogJ3JjJywKICAgICAgICAgfQogICAgIGlmIGxldmVsICE9ICdQWV9SRUxFQVNFX0xFVkVMX0ZJTkFMJzoKICAgICAgICAgcmVsZWFzZSArPSBzdWZmaXhlc1tsZXZlbF0gKyBzdHIoaW50KGRbJ1BZX1JFTEVBU0VfU0VSSUFMJ10pKQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5IGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5CmluZGV4IGZmMDdhZGIuLjQxNTMxMGQgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weQorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKQEAgLTM0LDYgKzM0LDcgQEAKIGZyb20gc3BoaW54LmxvY2FsZSBpbXBvcnQgdmVyc2lvbmxhYmVscwogSFRNTFRyYW5zbGF0b3IudmlzaXRfdmVyc2lvbm1vZGlmaWVkID0gbmV3X3Zpc2l0X3ZlcnNpb25tb2RpZmllZAogCisKICMgU3VwcG9ydCBmb3IgbWFya2luZyB1cCBhbmQgbGlua2luZyB0byBidWdzLnB5dGhvbi5vcmcgaXNzdWVzCiAKIGRlZiBpc3N1ZV9yb2xlKHR5cCwgcmF3dGV4dCwgdGV4dCwgbGluZW5vLCBpbmxpbmVyLCBvcHRpb25zPXt9LCBjb250ZW50PVtdKToKQEAgLTk5LDE5ICsxMDAsOCBAQAogZnJvbSBkb2N1dGlscy5pbyBpbXBvcnQgU3RyaW5nT3V0cHV0CiBmcm9tIGRvY3V0aWxzLnV0aWxzIGltcG9ydCBuZXdfZG9jdW1lbnQKIAotdHJ5OgotICAgIGZyb20gc3BoaW54LmJ1aWxkZXJzIGltcG9ydCBCdWlsZGVyCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyB1c2luZyBTcGhpbnggPCAwLjYsIHdoaWNoIGhhcyBhIGRpZmZlcmVudCBwYWNrYWdlIGxheW91dAotICAgIGZyb20gc3BoaW54LmJ1aWxkZXIgaW1wb3J0IEJ1aWxkZXIKLSAgICAjIG1vbmtleS1wYXRjaCB0b2N0cmVlIGRpcmVjdGl2ZSB0byBhY2NlcHQgKGFuZCBpZ25vcmUpIHRoZSA6bnVtYmVyZWQ6IGZsYWcKLSAgICBmcm9tIHNwaGlueC5kaXJlY3RpdmVzLm90aGVyIGltcG9ydCB0b2N0cmVlX2RpcmVjdGl2ZQotICAgIHRvY3RyZWVfZGlyZWN0aXZlLm9wdGlvbnNbJ251bWJlcmVkJ10gPSB0b2N0cmVlX2RpcmVjdGl2ZS5vcHRpb25zWydnbG9iJ10KLQotdHJ5OgotICAgIGZyb20gc3BoaW54LndyaXRlcnMudGV4dCBpbXBvcnQgVGV4dFdyaXRlcgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZyb20gc3BoaW54LnRleHR3cml0ZXIgaW1wb3J0IFRleHRXcml0ZXIKK2Zyb20gc3BoaW54LmJ1aWxkZXJzIGltcG9ydCBCdWlsZGVyCitmcm9tIHNwaGlueC53cml0ZXJzLnRleHQgaW1wb3J0IFRleHRXcml0ZXIKIAogCiBjbGFzcyBQeWRvY1RvcGljc0J1aWxkZXIoQnVpbGRlcik6CkBAIC0xMjgsNyArMTE4LDkgQEAKIAogICAgIGRlZiB3cml0ZShzZWxmLCAqaWdub3JlZCk6CiAgICAgICAgIHdyaXRlciA9IFRleHRXcml0ZXIoc2VsZikKLSAgICAgICAgZm9yIGxhYmVsIGluIHNlbGYuc3RhdHVzX2l0ZXJhdG9yKHB5ZG9jX3RvcGljX2xhYmVscywgJ2J1aWxkaW5nIHRvcGljcy4uLiAnKToKKyAgICAgICAgZm9yIGxhYmVsIGluIHNlbGYuc3RhdHVzX2l0ZXJhdG9yKHB5ZG9jX3RvcGljX2xhYmVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidWlsZGluZyB0b3BpY3MuLi4gJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aD1sZW4ocHlkb2NfdG9waWNfbGFiZWxzKSk6CiAgICAgICAgICAgICBpZiBsYWJlbCBub3QgaW4gc2VsZi5lbnYubGFiZWxzOgogICAgICAgICAgICAgICAgIHNlbGYud2FybignbGFiZWwgJXIgbm90IGluIGRvY3VtZW50YXRpb24nICUgbGFiZWwpCiAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTE0MSw3ICsxMzMsNyBAQAogICAgICAgICAgICAgc2VsZi50b3BpY3NbbGFiZWxdID0gd3JpdGVyLm91dHB1dAogCiAgICAgZGVmIGZpbmlzaChzZWxmKToKLSAgICAgICAgZiA9IG9wZW4ocGF0aC5qb2luKHNlbGYub3V0ZGlyLCAncHlkb2NfdG9waWNzLnB5JyksICd3JykKKyAgICAgICAgZiA9IG9wZW4ocGF0aC5qb2luKHNlbGYub3V0ZGlyLCAndG9waWNzLnB5JyksICd3JykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZSgnIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiAlc1xuJyAlIGFzY3RpbWUoKSkKICAgICAgICAgICAgIGYud3JpdGUoJ3RvcGljcyA9ICcgKyBwZm9ybWF0KHNlbGYudG9waWNzKSArICdcbicpCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9iYXNpYy5jc3MgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9iYXNpYy5jc3MKaW5kZXggYWViMTM4MS4uMmI0NzYyMiAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvYmFzaWMuY3NzCisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvc3RhdGljL2Jhc2ljLmNzcwpAQCAtMjU3LDYgKzI1NywxMCBAQAogICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWY7ICAgIAogfQogCit0YWJsZS5kb2N1dGlscyB0ZCBwLmxhc3QsIHRhYmxlLmRvY3V0aWxzIHRoIHAubGFzdCB7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKK30KKwogdGFibGUuZmllbGQtbGlzdCB0ZCwgdGFibGUuZmllbGQtbGlzdCB0aCB7CiAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7CiB9CkBAIC0zNDIsNyArMzQ2LDcgQEAKIH0KIAogLmZvb3Rub3RlOnRhcmdldCAgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmEKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhOwogfQogCiAuaW1wbC1kZXRhaWwgewpAQCAtMzY0LDYgKzM2OCw3IEBACiAKIHByZSB7CiAgICAgb3ZlcmZsb3c6IGF1dG87CisgICAgb3ZlcmZsb3cteTogaGlkZGVuOwogfQogCiB0ZC5saW5lbm9zIHByZSB7CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKaW5kZXggM2Y5ODdjNy4uYTk3Yjc2NCAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2CisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgpAQCAtMTY0LDMgKzE2NCwxMzkgQEAKIHdoYXRzbmV3LzIuNSwsOm1lbW9yeSw6bWVtb3J5Ogogd2hhdHNuZXcvMi41LCw6c3RlcCxbc3RhcnQ6c3RvcDpzdGVwXQogd2hhdHNuZXcvMi41LCw6c3RvcCxbc3RhcnQ6c3RvcDpzdGVwXQorZGlzdHV0aWxzL2V4YW1wbGVzLDI2NyxgLFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGZvb2JhcmBgIHBhY2thZ2UuCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsMzksOmZ1bmMsOmZ1bmM6YHN0cihvYmplY3QpYAorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDM5LGAsOmZ1bmM6YHN0cihvYmplY3QpYAorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDM5LGAsYGBzdHIob2JqZWN0KWBgCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsNTUsLi4gZGVwcmVjYXRlZDosLi4gZGVwcmVjYXRlZDo6IDIuNQorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDY2LC4uIG5vdGU6LC4uIG5vdGU6OgorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDc2LDpzYW1wLCI6c2FtcDpgb3Blbih7ZmlsZW5hbWV9LCB7bW9kZX0pYCIKK2RvY3VtZW50aW5nL2Zyb21sYXRleCw3NixgLCI6c2FtcDpgb3Blbih7ZmlsZW5hbWV9LCB7bW9kZX0pYCIKK2RvY3VtZW50aW5nL2Zyb21sYXRleCw4MCxgLGBgJ2MnYGAKK2RvY3VtZW50aW5nL2Zyb21sYXRleCw4MCxgLGBUaXRsZSA8VVJMPmBfCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsODAsYCxgYGNvZGVgYAorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDgwLGAsYFRpdGxlIDxVUkw+YF8KK2RvY3VtZW50aW5nL2Zyb21sYXRleCw5OSw6ZmlsZSw6ZmlsZTpgQzpcXFRlbXBcXG15LnRtcGAKK2RvY3VtZW50aW5nL2Zyb21sYXRleCw5OSxgLDpmaWxlOmBDOlxcVGVtcFxcbXkudG1wYAorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDk5LGAsImBgb3BlbigiIkM6XFRlbXBcbXkudG1wIiIpYGAiCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsMTI5LC4uIGZ1bmN0aW9uOiwuLiBmdW5jdGlvbjo6IGRvX2ZvbyhiYXIpCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsMTQxLC4uIGZ1bmN0aW9uOiwiLi4gZnVuY3Rpb246OiBvcGVuKGZpbGVuYW1lWywgbW9kZVssIGJ1ZmZlcmluZ11dKSIKK2RvY3VtZW50aW5nL2Zyb21sYXRleCwxNTIsLi4gZnVuY3Rpb246LC4uIGZ1bmN0aW9uOjogZm9vXyoKK2RvY3VtZW50aW5nL2Zyb21sYXRleCwxNTIsOm5vaW5kZXgsOm5vaW5kZXg6Citkb2N1bWVudGluZy9mcm9tbGF0ZXgsMTYyLC4uIGRlc2NyaWJlOiwuLiBkZXNjcmliZTo6IGEgPT0gYgorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDE2OCwuLiBjbWRvcHRpb246LC4uIGNtZG9wdGlvbjo6IC1PCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsMTY4LC4uIGVudnZhcjosLi4gZW52dmFyOjogUFlUSE9OSU5TUEVDVAorZG9jdW1lbnRpbmcvcmVzdCwzMyxgLGBgdGV4dGBgCitkb2N1bWVudGluZy9yZXN0LDQ3LDpyb2xlbmFtZSw6cm9sZW5hbWU6YGNvbnRlbnRgCitkb2N1bWVudGluZy9yZXN0LDQ3LGAsOnJvbGVuYW1lOmBjb250ZW50YAorZG9jdW1lbnRpbmcvcmVzdCwxMDMsOjosVGhpcyBpcyBhIG5vcm1hbCB0ZXh0IHBhcmFncmFwaC4gVGhlIG5leHQgcGFyYWdyYXBoIGlzIGEgY29kZSBzYW1wbGU6OgorZG9jdW1lbnRpbmcvcmVzdCwxMzAsYCxgTGluayB0ZXh0IDxodHRwOi8vdGFyZ2V0PmBfCitkb2N1bWVudGluZy9yZXN0LDE4NywuLiBmdW5jdGlvbjosLi4gZnVuY3Rpb246OiBmb28oeCkKK2RvY3VtZW50aW5nL3Jlc3QsMTg3LDpiYXIsOmJhcjogbm8KK2RvY3VtZW50aW5nL3Jlc3QsMjA4LC4uIHJ1YnJpYzosLi4gcnVicmljOjogRm9vdG5vdGVzCitmYXEvcHJvZ3JhbW1pbmcsLDpyZWR1Y2UsInByaW50IChsYW1iZGEgUnUsUm8sSXUsSW8sSU0sU3gsU3k6cmVkdWNlKGxhbWJkYSB4LHk6eCt5LG1hcChsYW1iZGEgeSwiCitmYXEvcHJvZ3JhbW1pbmcsLDpyZWR1Y2UsIlN4PVN4LFN5PVN5OnJlZHVjZShsYW1iZGEgeCx5OngreSxtYXAobGFtYmRhIHgseGM9UnUseWM9eWMsUnU9UnUsUm89Um8sIgorZmFxL3Byb2dyYW1taW5nLCw6Y2hyLCI+PTQuMCkgb3IgMStmKHhjLHljLHgqeC15KnkreGMsMi4wKngqeSt5YyxrLTEsZik6Zih4Yyx5Yyx4LHksayxmKTpjaHIoIgorZmFxL3Byb2dyYW1taW5nLCw6Oixmb3IgeCBpbiBzZXF1ZW5jZVs6Oi0xXToKK2ZhcS93aW5kb3dzLDIyOSw6RU9GLEBzZXRsb2NhbCBlbmFibGVleHRlbnNpb25zICYgcHl0aG9uIC14ICV+ZjAgJSogJiBnb3RvIDpFT0YKK2ZhcS93aW5kb3dzLDM5Myw6UkVHLC5weSA6UkVHX1NaOiBjOlw8cGF0aCB0byBweXRob24+XHB5dGhvbi5leGUgLXUgJXMgJXMKK2xpYnJhcnkvYmlzZWN0LCw6aGksYWxsKHZhbCA+PSB4IGZvciB2YWwgaW4gYVtpOmhpXSkKK2xpYnJhcnkvYmlzZWN0LCw6aGksYWxsKHZhbCA+IHggZm9yIHZhbCBpbiBhW2k6aGldKQorbGlicmFyeS9odHRwLmNsaWVudCw1Miw6cG9ydCxob3N0OnBvcnQKK2xpYnJhcnkvbm50cGxpYiwsOmJ5dGVzLDpieXRlcworbGlicmFyeS9ubnRwbGliLCw6bGluZXMsOmxpbmVzCitsaWJyYXJ5L25udHBsaWIsLDpsaW5lcywiWyd4cmVmJywgJ2Zyb20nLCAnOmxpbmVzJywgJzpieXRlcycsICdyZWZlcmVuY2VzJywgJ2RhdGUnLCAnbWVzc2FnZS1pZCcsICdzdWJqZWN0J10iCitsaWJyYXJ5L25udHBsaWIsLDpieXRlcywiWyd4cmVmJywgJ2Zyb20nLCAnOmxpbmVzJywgJzpieXRlcycsICdyZWZlcmVuY2VzJywgJ2RhdGUnLCAnbWVzc2FnZS1pZCcsICdzdWJqZWN0J10iCitsaWJyYXJ5L3BpY2tsZSw1NjcsOm1lbW9yeSwiY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgiIjptZW1vcnk6IiIpIgorbGlicmFyeS9wcm9maWxlLDI5Myw6bGluZW5vLCIoc29ydCBieSBmaWxlbmFtZTpsaW5lbm8pLCIKK2xpYnJhcnkvc29ja2V0LCw6OiwiKDEwLCAxLCA2LCAnJywgKCcyMDAxOjg4ODoyMDAwOmQ6OmEyJywgODAsIDAsIDApKV0iCitsaWJyYXJ5L3N0ZHR5cGVzLCw6ZW5kLHNbc3RhcnQ6ZW5kXQorbGlicmFyeS9zdGR0eXBlcywsOmVuZCxzW3N0YXJ0OmVuZF0KK2xpY2Vuc2UsLGAsKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKK2xpY2Vuc2UsLGAsKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorbGljZW5zZSwsYCwiYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIgorbGljZW5zZSwsYCwiVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwiCityZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcyw3MDQsYCwkICAgICAgID8gICAgICAgYAord2hhdHNuZXcvMi43LDczNSw6U3VuZGF5LCcyMDA5OjQ6U3VuZGF5Jword2hhdHNuZXcvMi43LDg2Miw6OiwiZXhwb3J0IFBZVEhPTldBUk5JTkdTPWFsbCxlcnJvcjo6OkNvb2tpZTowIgord2hhdHNuZXcvMi43LDg2Miw6Q29va2llLCJleHBvcnQgUFlUSE9OV0FSTklOR1M9YWxsLGVycm9yOjo6Q29va2llOjAiCit3aGF0c25ldy8yLjcsLDo6LD4+PiB1cmxwYXJzZS51cmxwYXJzZSgnaHR0cDovL1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdL2ZvbycpCit3aGF0c25ldy8yLjcsLDo6LCJQYXJzZVJlc3VsdChzY2hlbWU9J2h0dHAnLCBuZXRsb2M9J1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdJywiCitkb2N1bWVudGluZy9tYXJrdXAsMzMsLi4gc2VjdGlvbmF1dGhvcjosLi4gc2VjdGlvbmF1dGhvcjo6IEd1aWRvIHZhbiBSb3NzdW0gPGd1aWRvQHB5dGhvbi5vcmc+Citkb2N1bWVudGluZy9tYXJrdXAsNDIsOm1vZCw6bW9kOmBwYXJyb3RgIC0tIERlYWQgcGFycm90IGFjY2VzcworZG9jdW1lbnRpbmcvbWFya3VwLDQyLGAsOm1vZDpgcGFycm90YCAtLSBEZWFkIHBhcnJvdCBhY2Nlc3MKK2RvY3VtZW50aW5nL21hcmt1cCw0MiwuLiBtb2R1bGU6LC4uIG1vZHVsZTo6IHBhcnJvdAorZG9jdW1lbnRpbmcvbWFya3VwLDQyLDpwbGF0Zm9ybSwiOnBsYXRmb3JtOiBVbml4LCBXaW5kb3dzIgorZG9jdW1lbnRpbmcvbWFya3VwLDQyLDpzeW5vcHNpcyw6c3lub3BzaXM6IEFuYWx5emUgYW5kIHJlYW5pbWF0ZSBkZWFkIHBhcnJvdHMuCitkb2N1bWVudGluZy9tYXJrdXAsNDIsLi4gbW9kdWxlYXV0aG9yOiwuLiBtb2R1bGVhdXRob3I6OiBFcmljIENsZWVzZSA8ZXJpY0BweXRob24uaW52YWxpZD4KK2RvY3VtZW50aW5nL21hcmt1cCw0MiwuLiBtb2R1bGVhdXRob3I6LC4uIG1vZHVsZWF1dGhvcjo6IEpvaG4gSWRsZSA8am9obkBweXRob24uaW52YWxpZD4KK2RvY3VtZW50aW5nL21hcmt1cCw4OCw6bm9pbmRleCw6bm9pbmRleDoKK2RvY3VtZW50aW5nL21hcmt1cCw5NSwuLiBmdW5jdGlvbjosLi4gZnVuY3Rpb246OiBzcGFtKGVnZ3MpCitkb2N1bWVudGluZy9tYXJrdXAsOTUsOm5vaW5kZXgsOm5vaW5kZXg6Citkb2N1bWVudGluZy9tYXJrdXAsMTAxLC4uIG1ldGhvZDosLi4gbWV0aG9kOjogRmlsZUlucHV0LmlucHV0KC4uLikKK2RvY3VtZW50aW5nL21hcmt1cCwxMjEsLi4gY2Z1bmN0aW9uOiwiLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VHlwZV9HZW5lcmljQWxsb2MoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeV9zc2l6ZV90IG5pdGVtcykiCitkb2N1bWVudGluZy9tYXJrdXAsMTMxLC4uIGNtZW1iZXI6LC4uIGNtZW1iZXI6OiBQeU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX2Jhc2VzCitkb2N1bWVudGluZy9tYXJrdXAsMTUwLC4uIGN2YXI6LC4uIGN2YXI6OiBQeU9iamVjdCogUHlDbGFzc19UeXBlCitkb2N1bWVudGluZy9tYXJrdXAsMTc5LC4uIGZ1bmN0aW9uOiwiLi4gZnVuY3Rpb246OiBUaW1lci5yZXBlYXQoW3JlcGVhdD0zWywgbnVtYmVyPTEwMDAwMDBdXSkiCitkb2N1bWVudGluZy9tYXJrdXAsMjA5LC4uIGNtZG9wdGlvbjosLi4gY21kb3B0aW9uOjogLW0gPG1vZHVsZT4KK2RvY3VtZW50aW5nL21hcmt1cCwyMjcsLi4gZGVzY3JpYmU6LC4uIGRlc2NyaWJlOjogb3Bjb2RlCitkb2N1bWVudGluZy9tYXJrdXAsMjU2LC4uIGhpZ2hsaWdodGxhbmc6LC4uIGhpZ2hsaWdodGxhbmc6OiBjCitkb2N1bWVudGluZy9tYXJrdXAsMjc2LC4uIGxpdGVyYWxpbmNsdWRlOiwuLiBsaXRlcmFsaW5jbHVkZTo6IGV4YW1wbGUucHkKK2RvY3VtZW50aW5nL21hcmt1cCwyOTEsOnJvbGVuYW1lLDpyb2xlbmFtZTpgY29udGVudGAKK2RvY3VtZW50aW5nL21hcmt1cCwyOTEsYCw6cm9sZW5hbWU6YGNvbnRlbnRgCitkb2N1bWVudGluZy9tYXJrdXAsMjk2LDpyb2xlLDpyb2xlOmB0aXRsZSA8dGFyZ2V0PmAKK2RvY3VtZW50aW5nL21hcmt1cCwyOTYsYCw6cm9sZTpgdGl0bGUgPHRhcmdldD5gCitkb2N1bWVudGluZy9tYXJrdXAsMzAyLDptZXRoLDptZXRoOmB+UXVldWUuUXVldWUuZ2V0YAorZG9jdW1lbnRpbmcvbWFya3VwLDMwMixgLDptZXRoOmB+UXVldWUuUXVldWUuZ2V0YAorZG9jdW1lbnRpbmcvbWFya3VwLDM1MCw6ZnVuYyw6ZnVuYzpgZmlsdGVyYAorZG9jdW1lbnRpbmcvbWFya3VwLDM1MCxgLDpmdW5jOmBmaWx0ZXJgCitkb2N1bWVudGluZy9tYXJrdXAsMzUwLDpmdW5jLDpmdW5jOmBmb28uZmlsdGVyYAorZG9jdW1lbnRpbmcvbWFya3VwLDM1MCxgLDpmdW5jOmBmb28uZmlsdGVyYAorZG9jdW1lbnRpbmcvbWFya3VwLDM1Niw6ZnVuYyw6ZnVuYzpgb3BlbmAKK2RvY3VtZW50aW5nL21hcmt1cCwzNTYsYCw6ZnVuYzpgb3BlbmAKK2RvY3VtZW50aW5nL21hcmt1cCwzNTYsOmZ1bmMsOmZ1bmM6YC5vcGVuYAorZG9jdW1lbnRpbmcvbWFya3VwLDM1NixgLDpmdW5jOmAub3BlbmAKK2RvY3VtZW50aW5nL21hcmt1cCw0MzUsOmZpbGUsLi4uIGlzIGluc3RhbGxlZCBpbiA6ZmlsZTpgL3Vzci9saWIvcHl0aG9uMi57eH0vc2l0ZS1wYWNrYWdlc2AgLi4uCitkb2N1bWVudGluZy9tYXJrdXAsNDM1LGAsLi4uIGlzIGluc3RhbGxlZCBpbiA6ZmlsZTpgL3Vzci9saWIvcHl0aG9uMi57eH0vc2l0ZS1wYWNrYWdlc2AgLi4uCitkb2N1bWVudGluZy9tYXJrdXAsNDU0LDprYmQsOmtiZDpgQy14IEMtZmAKK2RvY3VtZW50aW5nL21hcmt1cCw0NTQsYCw6a2JkOmBDLXggQy1mYAorZG9jdW1lbnRpbmcvbWFya3VwLDQ1NCw6a2JkLDprYmQ6YENvbnRyb2wteCBDb250cm9sLWZgCitkb2N1bWVudGluZy9tYXJrdXAsNDU0LGAsOmtiZDpgQ29udHJvbC14IENvbnRyb2wtZmAKK2RvY3VtZW50aW5nL21hcmt1cCw0NjgsOm1haWxoZWFkZXIsOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAKK2RvY3VtZW50aW5nL21hcmt1cCw0NjgsYCw6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYAorZG9jdW1lbnRpbmcvbWFya3VwLDQ3Nyw6bWFucGFnZSw6bWFucGFnZTpgbHMoMSlgCitkb2N1bWVudGluZy9tYXJrdXAsNDc3LGAsOm1hbnBhZ2U6YGxzKDEpYAorZG9jdW1lbnRpbmcvbWFya3VwLDQ5Myw6bWVudXNlbGVjdGlvbiw6bWVudXNlbGVjdGlvbjpgU3RhcnQgLS0+IFByb2dyYW1zYAorZG9jdW1lbnRpbmcvbWFya3VwLDQ5MyxgLDptZW51c2VsZWN0aW9uOmBTdGFydCAtLT4gUHJvZ3JhbXNgCitkb2N1bWVudGluZy9tYXJrdXAsNTA4LGAsYGBjb2RlYGAKK2RvY3VtZW50aW5nL21hcmt1cCw1MjYsOmZpbGUsOmZpbGU6Citkb2N1bWVudGluZy9tYXJrdXAsNTI2LGAsYGBjb2RlYGAKK2RvY3VtZW50aW5nL21hcmt1cCw1NjEsOnJlZiw6cmVmOmBsYWJlbC1uYW1lYAorZG9jdW1lbnRpbmcvbWFya3VwLDU2MSxgLDpyZWY6YGxhYmVsLW5hbWVgCitkb2N1bWVudGluZy9tYXJrdXAsNTY1LDpyZWYsIkl0IHJlZmVycyB0byB0aGUgc2VjdGlvbiBpdHNlbGYsIHNlZSA6cmVmOmBteS1yZWZlcmVuY2UtbGFiZWxgLiIKK2RvY3VtZW50aW5nL21hcmt1cCw1NjUsYCwiSXQgcmVmZXJzIHRvIHRoZSBzZWN0aW9uIGl0c2VsZiwgc2VlIDpyZWY6YG15LXJlZmVyZW5jZS1sYWJlbGAuIgorZG9jdW1lbnRpbmcvbWFya3VwLDU3NCw6cmVmLDpyZWY6Citkb2N1bWVudGluZy9tYXJrdXAsNTk1LC4uIG5vdGU6LC4uIG5vdGU6OgorZG9jdW1lbnRpbmcvbWFya3VwLDYyMiwuLiB2ZXJzaW9uYWRkZWQ6LC4uIHZlcnNpb25hZGRlZDo6IDIuNQorZG9jdW1lbnRpbmcvbWFya3VwLDY0Nyw6OiwuLiBpbXBsLWRldGFpbDo6Citkb2N1bWVudGluZy9tYXJrdXAsNjQ3LDo6LC4uIGltcGwtZGV0YWlsOjogVGhpcyBzaG9ydGx5IG1lbnRpb25zIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KK2RvY3VtZW50aW5nL21hcmt1cCw2NjcsLi4gc2VlYWxzbzosLi4gc2VlYWxzbzo6Citkb2N1bWVudGluZy9tYXJrdXAsNjY3LDptb2QsTW9kdWxlIDptb2Q6YHppcGZpbGVgCitkb2N1bWVudGluZy9tYXJrdXAsNjY3LGAsTW9kdWxlIDptb2Q6YHppcGZpbGVgCitkb2N1bWVudGluZy9tYXJrdXAsNjY3LDptb2QsRG9jdW1lbnRhdGlvbiBvZiB0aGUgOm1vZDpgemlwZmlsZWAgc3RhbmRhcmQgbW9kdWxlLgorZG9jdW1lbnRpbmcvbWFya3VwLDY2NyxgLERvY3VtZW50YXRpb24gb2YgdGhlIDptb2Q6YHppcGZpbGVgIHN0YW5kYXJkIG1vZHVsZS4KK2RvY3VtZW50aW5nL21hcmt1cCw2NjcsYCwiYEdOVSB0YXIgbWFudWFsLCBCYXNpYyBUYXIgRm9ybWF0IDxodHRwOi8vbGluaz5gXyIKK2RvY3VtZW50aW5nL21hcmt1cCw2ODEsLi4gY2VudGVyZWQ6LC4uIGNlbnRlcmVkOjoKK2RvY3VtZW50aW5nL21hcmt1cCw3MjYsLi4gdG9jdHJlZTosLi4gdG9jdHJlZTo6Citkb2N1bWVudGluZy9tYXJrdXAsNzI2LDptYXhkZXB0aCw6bWF4ZGVwdGg6IDIKK2RvY3VtZW50aW5nL21hcmt1cCw3NDIsLi4gaW5kZXg6LC4uIGluZGV4OjoKK2RvY3VtZW50aW5nL21hcmt1cCw3NzIsLi4gaW5kZXg6LCIuLiBpbmRleDo6IEJORiwgZ3JhbW1hciwgc3ludGF4LCBub3RhdGlvbiIKK2RvY3VtZW50aW5nL21hcmt1cCw4MDMsYCwidW5hcnluZWcgOjo9ICIiLSIiIGBpbnRlZ2VyYCIKK2RvY3VtZW50aW5nL21hcmt1cCw4MDgsLi4gcHJvZHVjdGlvbmxpc3Q6LC4uIHByb2R1Y3Rpb25saXN0OjoKK2RvY3VtZW50aW5nL21hcmt1cCw4MDgsYCwidHJ5MV9zdG10OiAiInRyeSIiICIiOiIiIGBzdWl0ZWAiCitkb2N1bWVudGluZy9tYXJrdXAsODA4LGAsIjogKCIiZXhjZXB0IiIgW2BleHByZXNzaW9uYCBbIiIsIiIgYHRhcmdldGBdXSAiIjoiIiBgc3VpdGVgKSsiCitkb2N1bWVudGluZy9tYXJrdXAsODA4LGAsIjogWyIiZWxzZSIiICIiOiIiIGBzdWl0ZWBdIgorZG9jdW1lbnRpbmcvbWFya3VwLDgwOCxgLCI6IFsiImZpbmFsbHkiIiAiIjoiIiBgc3VpdGVgXSIKK2RvY3VtZW50aW5nL21hcmt1cCw4MDgsYCwidHJ5Ml9zdG10OiAiInRyeSIiICIiOiIiIGBzdWl0ZWAiCitkb2N1bWVudGluZy9tYXJrdXAsODA4LGAsIjogIiJmaW5hbGx5IiIgIiI6IiIgYHN1aXRlYCIKK2xpYnJhcnkvdXJsbGliMiw2Nyw6Y2xvc2UsQ29ubmVjdGlvbjpjbG9zZQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwaWNpb3VzLnB5IGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwaWNpb3VzLnB5CmluZGV4IDc2ODRmNjUuLmYxNWU5MzFiIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3BpY2lvdXMucHkKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwaWNpb3VzLnB5CkBAIC00MSwxNiArNDEsMTMgQEAKIAogIiIiCiAKLWltcG9ydCBvcywgc3lzCi1pbXBvcnQgY3N2CitpbXBvcnQgb3MKIGltcG9ydCByZQoraW1wb3J0IGNzdgoraW1wb3J0IHN5cworCiBmcm9tIGRvY3V0aWxzIGltcG9ydCBub2RlcwotCi10cnk6Ci0gICAgZnJvbSBzcGhpbnguYnVpbGRlcnMgaW1wb3J0IEJ1aWxkZXIKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBmcm9tIHNwaGlueC5idWlsZGVyIGltcG9ydCBCdWlsZGVyCi0KK2Zyb20gc3BoaW54LmJ1aWxkZXJzIGltcG9ydCBCdWlsZGVyCiAKIGRldGVjdF9hbGwgPSByZS5jb21waWxlKHVyJycnCiAgICAgOjooPz1bXj1dKXwgICAgICAgICAgICAjIHR3byA6OiAoYnV0IE5PVCA6Oj0pCkBAIC01OSw5ICs1NiwxMCBAQAogICAgICg/PCFcLilcLlwuWyBcdF0qXHcrOiAgIyAuLiBmb286IChidXQgTk9UIC4uLiBlbHNlOikKICAgICAnJycsIHJlLlVOSUNPREUgfCByZS5WRVJCT1NFKS5maW5kaXRlcgogCisKIGNsYXNzIFJ1bGU6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvY25hbWUsIGxpbmVubywgaXNzdWUsIGxpbmUpOgotICAgICAgICAiQSBydWxlIGZvciBpZ25vcmluZyBpc3N1ZXMiCisgICAgICAgICIiIkEgcnVsZSBmb3IgaWdub3JpbmcgaXNzdWVzIiIiCiAgICAgICAgIHNlbGYuZG9jbmFtZSA9IGRvY25hbWUgIyBkb2N1bWVudCB0byB3aGljaCB0aGlzIHJ1bGUgYXBwbGllcwogICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubyAgICMgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgcnVsZSBtYXRjaGVzIG9ubHkgbmVhciB0aGF0LgpAQCAtNzAsOSArNjgsMTUgQEAKICAgICAgICAgc2VsZi5saW5lID0gbGluZSAgICAgICAjIHRleHQgb2YgdGhlIGNvbnRhaW5lciBlbGVtZW50IChzaW5nbGUgbGluZSBvbmx5KQogCiAKKworY2xhc3MgZGlhbGVjdChjc3YuZXhjZWwpOgorICAgICIiIk91ciBkaWFsZWN0OiB1c2VzIG9ubHkgbGluZWZlZWQgYXMgbmV3bGluZS4iIiIKKyAgICBsaW5ldGVybWluYXRvciA9ICdcbicKKworCiBjbGFzcyBDaGVja1N1c3BpY2lvdXNNYXJrdXBCdWlsZGVyKEJ1aWxkZXIpOgogICAgICIiIgotICAgIENoZWNrcyBmb3IgcG9zc2libHkgaW52YWxpZCBtYXJrdXAgdGhhdCBtYXkgbGVhayBpbnRvIHRoZSBvdXRwdXQKKyAgICBDaGVja3MgZm9yIHBvc3NpYmx5IGludmFsaWQgbWFya3VwIHRoYXQgbWF5IGxlYWsgaW50byB0aGUgb3V0cHV0LgogICAgICIiIgogICAgIG5hbWUgPSAnc3VzcGljaW91cycKIApAQCAtODEsNyArODUsOCBAQAogICAgICAgICBzZWxmLmxvZ19maWxlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5vdXRkaXIsICdzdXNwaWNpb3VzLmNzdicpCiAgICAgICAgIG9wZW4oc2VsZi5sb2dfZmlsZV9uYW1lLCAndycpLmNsb3NlKCkKICAgICAgICAgIyBsb2FkIGRhdGFiYXNlIG9mIHByZXZpb3VzbHkgaWdub3JlZCBpc3N1ZXMKLSAgICAgICAgc2VsZi5sb2FkX3J1bGVzKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnc3VzcC1pZ25vcmVkLmNzdicpKQorICAgICAgICBzZWxmLmxvYWRfcnVsZXMob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1c3AtaWdub3JlZC5jc3YnKSkKIAogICAgIGRlZiBnZXRfb3V0ZGF0ZWRfZG9jcyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZW52LmZvdW5kX2RvY3MKQEAgLTkwLDE0ICs5NSwxMSBAQAogICAgICAgICByZXR1cm4gJycKIAogICAgIGRlZiBwcmVwYXJlX3dyaXRpbmcoc2VsZiwgZG9jbmFtZXMpOgotICAgICAgICAjIyMgUFlUSE9OIFBST0pFQ1QgU1BFQ0lGSUMgIyMjCi0gICAgICAgIGZvciBuYW1lIGluIHNldChkb2NuYW1lcyk6Ci0gICAgICAgICAgICBpZiBuYW1lLnNwbGl0KCcvJywgMSlbMF0gPT0gJ2RvY3VtZW50aW5nJzoKLSAgICAgICAgICAgICAgICBkb2NuYW1lcy5yZW1vdmUobmFtZSkKLSAgICAgICAgIyMjIFBZVEhPTiBQUk9KRUNUIFNQRUNJRklDICMjIworICAgICAgICBwYXNzCiAKICAgICBkZWYgd3JpdGVfZG9jKHNlbGYsIGRvY25hbWUsIGRvY3RyZWUpOgotICAgICAgICBzZWxmLmFueV9pc3N1ZSA9IEZhbHNlICMgc2V0IHdoZW4gYW55IGlzc3VlIGlzIGVuY291bnRlcmVkIGluIHRoaXMgZG9jdW1lbnQKKyAgICAgICAgIyBzZXQgd2hlbiBhbnkgaXNzdWUgaXMgZW5jb3VudGVyZWQgaW4gdGhpcyBkb2N1bWVudAorICAgICAgICBzZWxmLmFueV9pc3N1ZSA9IEZhbHNlCiAgICAgICAgIHNlbGYuZG9jbmFtZSA9IGRvY25hbWUKICAgICAgICAgdmlzaXRvciA9IFN1c3BpY2lvdXNWaXNpdG9yKGRvY3RyZWUsIHNlbGYpCiAgICAgICAgIGRvY3RyZWUud2Fsayh2aXNpdG9yKQpAQCAtMTEwLDggKzExMiw3IEBACiAgICAgICAgICAgICBzZWxmLnJlcG9ydF9pc3N1ZShsaW5lLCBsaW5lbm8sIGlzc3VlKQogCiAgICAgZGVmIGlzX2lnbm9yZWQoc2VsZiwgbGluZSwgbGluZW5vLCBpc3N1ZSk6Ci0gICAgICAgICIiIkRldGVybWluZSB3aGV0aGVyIHRoaXMgaXNzdWUgc2hvdWxkIGJlIGlnbm9yZWQuCi0gICAgICAgICIiIgorICAgICAgICAiIiJEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzc3VlIHNob3VsZCBiZSBpZ25vcmVkLiIiIgogICAgICAgICBkb2NuYW1lID0gc2VsZi5kb2NuYW1lCiAgICAgICAgIGZvciBydWxlIGluIHNlbGYucnVsZXM6CiAgICAgICAgICAgICBpZiBydWxlLmRvY25hbWUgIT0gZG9jbmFtZTogY29udGludWUKQEAgLTE0NCwxMiArMTQ1LDExIEBACiAKICAgICBkZWYgd3JpdGVfbG9nX2VudHJ5KHNlbGYsIGxpbmVubywgaXNzdWUsIHRleHQpOgogICAgICAgICBmID0gb3BlbihzZWxmLmxvZ19maWxlX25hbWUsICdhYicpCi0gICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZikKKyAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmLCBkaWFsZWN0KQogICAgICAgICB3cml0ZXIud3JpdGVyb3coW3NlbGYuZG9jbmFtZS5lbmNvZGUoJ3V0Zi04JyksCi0gICAgICAgICAgICAgICAgbGluZW5vLAotICAgICAgICAgICAgICAgIGlzc3VlLmVuY29kZSgndXRmLTgnKSwKLSAgICAgICAgICAgICAgICB0ZXh0LnN0cmlwKCkuZW5jb2RlKCd1dGYtOCcpXSkKLSAgICAgICAgZGVsIHdyaXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZS5lbmNvZGUoJ3V0Zi04JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5zdHJpcCgpLmVuY29kZSgndXRmLTgnKV0pCiAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIGxvYWRfcnVsZXMoc2VsZiwgZmlsZW5hbWUpOgpAQCAtMTY0LDcgKzE2NCw4IEBACiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOiByZXR1cm4KICAgICAgICAgZm9yIGksIHJvdyBpbiBlbnVtZXJhdGUoY3N2LnJlYWRlcihmKSk6CiAgICAgICAgICAgICBpZiBsZW4ocm93KSAhPSA0OgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyb25nIGZvcm1hdCBpbiAlcywgbGluZSAlZDogJXMiICUgKGZpbGVuYW1lLCBpKzEsIHJvdykpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIndyb25nIGZvcm1hdCBpbiAlcywgbGluZSAlZDogJXMiICUgKGZpbGVuYW1lLCBpKzEsIHJvdykpCiAgICAgICAgICAgICBkb2NuYW1lLCBsaW5lbm8sIGlzc3VlLCB0ZXh0ID0gcm93CiAgICAgICAgICAgICBkb2NuYW1lID0gZG9jbmFtZS5kZWNvZGUoJ3V0Zi04JykKICAgICAgICAgICAgIGlmIGxpbmVubzogbGluZW5vID0gaW50KGxpbmVubykKQEAgLTE3OCw3ICsxNzksNyBAQAogCiAKIGRlZiBnZXRfbGluZW5vKG5vZGUpOgotICAgICJPYnRhaW4gbGluZSBudW1iZXIgaW5mb3JtYXRpb24gZm9yIGEgbm9kZSIKKyAgICAiIiJPYnRhaW4gbGluZSBudW1iZXIgaW5mb3JtYXRpb24gZm9yIGEgbm9kZS4iIiIKICAgICBsaW5lbm8gPSBOb25lCiAgICAgd2hpbGUgbGluZW5vIGlzIE5vbmUgYW5kIG5vZGU6CiAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudApAQCAtMjAzLDcgKzIwNCw4IEBACiAgICAgIiIiCiAgICAgcCA9IHRleHQucmZpbmQoJ1xuJywgMCwgaW5kZXgpICsgMQogICAgIHEgPSB0ZXh0LmZpbmQoJ1xuJywgaW5kZXgpCi0gICAgaWYgcTwwOiBxID0gbGVuKHRleHQpCisgICAgaWYgcSA8IDA6CisgICAgICAgIHEgPSBsZW4odGV4dCkKICAgICByZXR1cm4gdGV4dFtwOnFdCiAKIApAQCAtMjIyLDcgKzIyNCw2IEBACiAgICAgICAgICAgICBzZWxmLmxhc3RsaW5lbm8gPSBsaW5lbm8gPSBtYXgoZ2V0X2xpbmVubyhub2RlKSBvciAwLCBzZWxmLmxhc3RsaW5lbm8pCiAgICAgICAgICAgICBzZWVuID0gc2V0KCkgIyBkb24ndCByZXBvcnQgdGhlIHNhbWUgaXNzdWUgbW9yZSB0aGFuIG9ubHkgb25jZSBwZXIgbGluZQogICAgICAgICAgICAgZm9yIG1hdGNoIGluIGRldGVjdF9hbGwodGV4dCk6Ci0gICAgICAgICAgICAgICAgI2ltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKQogICAgICAgICAgICAgICAgIGlzc3VlID0gbWF0Y2guZ3JvdXAoKQogICAgICAgICAgICAgICAgIGxpbmUgPSBleHRyYWN0X2xpbmUodGV4dCwgbWF0Y2guc3RhcnQoKSkKICAgICAgICAgICAgICAgICBpZiAoaXNzdWUsIGxpbmUpIG5vdCBpbiBzZWVuOgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0IGIvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0CmluZGV4IGQ3Mjk5NTUuLmJkYWE1ZDIgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvY2xhc3Nlcy5yc3QKQEAgLTQsMjUgKzQsMjYgQEAKIENsYXNzZXMKICoqKioqKioKIAotUHl0aG9uJ3MgY2xhc3MgbWVjaGFuaXNtIGFkZHMgY2xhc3NlcyB0byB0aGUgbGFuZ3VhZ2Ugd2l0aCBhIG1pbmltdW0gb2YgbmV3Ci1zeW50YXggYW5kIHNlbWFudGljcy4gIEl0IGlzIGEgbWl4dHVyZSBvZiB0aGUgY2xhc3MgbWVjaGFuaXNtcyBmb3VuZCBpbiBDKysgYW5kCi1Nb2R1bGEtMy4gIEFzIGlzIHRydWUgZm9yIG1vZHVsZXMsIGNsYXNzZXMgaW4gUHl0aG9uIGRvIG5vdCBwdXQgYW4gYWJzb2x1dGUKLWJhcnJpZXIgYmV0d2VlbiBkZWZpbml0aW9uIGFuZCB1c2VyLCBidXQgcmF0aGVyIHJlbHkgb24gdGhlIHBvbGl0ZW5lc3Mgb2YgdGhlCi11c2VyIG5vdCB0byAiYnJlYWsgaW50byB0aGUgZGVmaW5pdGlvbi4iICBUaGUgbW9zdCBpbXBvcnRhbnQgZmVhdHVyZXMgb2YgY2xhc3NlcwotYXJlIHJldGFpbmVkIHdpdGggZnVsbCBwb3dlciwgaG93ZXZlcjogdGhlIGNsYXNzIGluaGVyaXRhbmNlIG1lY2hhbmlzbSBhbGxvd3MKK0NvbXBhcmVkIHdpdGggb3RoZXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLCBQeXRob24ncyBjbGFzcyBtZWNoYW5pc20gYWRkcyBjbGFzc2VzCit3aXRoIGEgbWluaW11bSBvZiBuZXcgc3ludGF4IGFuZCBzZW1hbnRpY3MuICBJdCBpcyBhIG1peHR1cmUgb2YgdGhlIGNsYXNzCittZWNoYW5pc21zIGZvdW5kIGluIEMrKyBhbmQgTW9kdWxhLTMuICBQeXRob24gY2xhc3NlcyBwcm92aWRlIGFsbCB0aGUgc3RhbmRhcmQKK2ZlYXR1cmVzIG9mIE9iamVjdCBPcmllbnRlZCBQcm9ncmFtbWluZzogdGhlIGNsYXNzIGluaGVyaXRhbmNlIG1lY2hhbmlzbSBhbGxvd3MKIG11bHRpcGxlIGJhc2UgY2xhc3NlcywgYSBkZXJpdmVkIGNsYXNzIGNhbiBvdmVycmlkZSBhbnkgbWV0aG9kcyBvZiBpdHMgYmFzZQogY2xhc3Mgb3IgY2xhc3NlcywgYW5kIGEgbWV0aG9kIGNhbiBjYWxsIHRoZSBtZXRob2Qgb2YgYSBiYXNlIGNsYXNzIHdpdGggdGhlIHNhbWUKLW5hbWUuICBPYmplY3RzIGNhbiBjb250YWluIGFuIGFyYml0cmFyeSBhbW91bnQgb2YgZGF0YS4KK25hbWUuICBPYmplY3RzIGNhbiBjb250YWluIGFyYml0cmFyeSBhbW91bnRzIGFuZCBraW5kcyBvZiBkYXRhLiAgQXMgaXMgdHJ1ZSBmb3IKK21vZHVsZXMsIGNsYXNzZXMgcGFydGFrZSBvZiB0aGUgZHluYW1pYyBuYXR1cmUgb2YgUHl0aG9uOiB0aGV5IGFyZSBjcmVhdGVkIGF0CitydW50aW1lLCBhbmQgY2FuIGJlIG1vZGlmaWVkIGZ1cnRoZXIgYWZ0ZXIgY3JlYXRpb24uCiAKLUluIEMrKyB0ZXJtaW5vbG9neSwgYWxsIGNsYXNzIG1lbWJlcnMgKGluY2x1ZGluZyB0aGUgZGF0YSBtZW1iZXJzKSBhcmUgKnB1YmxpYyosCi1hbmQgYWxsIG1lbWJlciBmdW5jdGlvbnMgYXJlICp2aXJ0dWFsKi4gIEFzIGluIE1vZHVsYS0zLCB0aGVyZSBhcmUgbm8gc2hvcnRoYW5kcwotZm9yIHJlZmVyZW5jaW5nIHRoZSBvYmplY3QncyBtZW1iZXJzIGZyb20gaXRzIG1ldGhvZHM6IHRoZSBtZXRob2QgZnVuY3Rpb24gaXMKLWRlY2xhcmVkIHdpdGggYW4gZXhwbGljaXQgZmlyc3QgYXJndW1lbnQgcmVwcmVzZW50aW5nIHRoZSBvYmplY3QsIHdoaWNoIGlzCi1wcm92aWRlZCBpbXBsaWNpdGx5IGJ5IHRoZSBjYWxsLiAgQXMgaW4gU21hbGx0YWxrLCBjbGFzc2VzIHRoZW1zZWx2ZXMgYXJlCi1vYmplY3RzLiAgVGhpcyBwcm92aWRlcyBzZW1hbnRpY3MgZm9yIGltcG9ydGluZyBhbmQgcmVuYW1pbmcuICBVbmxpa2UgQysrIGFuZAotTW9kdWxhLTMsIGJ1aWx0LWluIHR5cGVzIGNhbiBiZSB1c2VkIGFzIGJhc2UgY2xhc3NlcyBmb3IgZXh0ZW5zaW9uIGJ5IHRoZSB1c2VyLgotQWxzbywgbGlrZSBpbiBDKyssIG1vc3QgYnVpbHQtaW4gb3BlcmF0b3JzIHdpdGggc3BlY2lhbCBzeW50YXggKGFyaXRobWV0aWMKLW9wZXJhdG9ycywgc3Vic2NyaXB0aW5nIGV0Yy4pIGNhbiBiZSByZWRlZmluZWQgZm9yIGNsYXNzIGluc3RhbmNlcy4KK0luIEMrKyB0ZXJtaW5vbG9neSwgbm9ybWFsbHkgY2xhc3MgbWVtYmVycyAoaW5jbHVkaW5nIHRoZSBkYXRhIG1lbWJlcnMpIGFyZQorKnB1YmxpYyogKGV4Y2VwdCBzZWUgYmVsb3cgOnJlZjpgdHV0LXByaXZhdGVgKSwgYW5kIGFsbCBtZW1iZXIgZnVuY3Rpb25zIGFyZQorKnZpcnR1YWwqLiAgQXMgaW4gTW9kdWxhLTMsIHRoZXJlIGFyZSBubyBzaG9ydGhhbmRzIGZvciByZWZlcmVuY2luZyB0aGUgb2JqZWN0J3MKK21lbWJlcnMgZnJvbSBpdHMgbWV0aG9kczogdGhlIG1ldGhvZCBmdW5jdGlvbiBpcyBkZWNsYXJlZCB3aXRoIGFuIGV4cGxpY2l0IGZpcnN0Cithcmd1bWVudCByZXByZXNlbnRpbmcgdGhlIG9iamVjdCwgd2hpY2ggaXMgcHJvdmlkZWQgaW1wbGljaXRseSBieSB0aGUgY2FsbC4gIEFzCitpbiBTbWFsbHRhbGssIGNsYXNzZXMgdGhlbXNlbHZlcyBhcmUgb2JqZWN0cy4gIFRoaXMgcHJvdmlkZXMgc2VtYW50aWNzIGZvcgoraW1wb3J0aW5nIGFuZCByZW5hbWluZy4gIFVubGlrZSBDKysgYW5kIE1vZHVsYS0zLCBidWlsdC1pbiB0eXBlcyBjYW4gYmUgdXNlZCBhcworYmFzZSBjbGFzc2VzIGZvciBleHRlbnNpb24gYnkgdGhlIHVzZXIuICBBbHNvLCBsaWtlIGluIEMrKywgbW9zdCBidWlsdC1pbgorb3BlcmF0b3JzIHdpdGggc3BlY2lhbCBzeW50YXggKGFyaXRobWV0aWMgb3BlcmF0b3JzLCBzdWJzY3JpcHRpbmcgZXRjLikgY2FuIGJlCityZWRlZmluZWQgZm9yIGNsYXNzIGluc3RhbmNlcy4KIAogKExhY2tpbmcgdW5pdmVyc2FsbHkgYWNjZXB0ZWQgdGVybWlub2xvZ3kgdG8gdGFsayBhYm91dCBjbGFzc2VzLCBJIHdpbGwgbWFrZQogb2NjYXNpb25hbCB1c2Ugb2YgU21hbGx0YWxrIGFuZCBDKysgdGVybXMuICBJIHdvdWxkIHVzZSBNb2R1bGEtMyB0ZXJtcywgc2luY2UKQEAgLTUzNyw3ICs1MzgsNyBAQAogPT09PT09PT09PT09PT09PT0KIAogIlByaXZhdGUiIGluc3RhbmNlIHZhcmlhYmxlcyB0aGF0IGNhbm5vdCBiZSBhY2Nlc3NlZCBleGNlcHQgZnJvbSBpbnNpZGUgYW4KLW9iamVjdCwgZG9uJ3QgZXhpc3QgaW4gUHl0aG9uLiAgSG93ZXZlciwgdGhlcmUgaXMgYSBjb252ZW50aW9uIHRoYXQgaXMgZm9sbG93ZWQKK29iamVjdCBkb24ndCBleGlzdCBpbiBQeXRob24uICBIb3dldmVyLCB0aGVyZSBpcyBhIGNvbnZlbnRpb24gdGhhdCBpcyBmb2xsb3dlZAogYnkgbW9zdCBQeXRob24gY29kZTogYSBuYW1lIHByZWZpeGVkIHdpdGggYW4gdW5kZXJzY29yZSAoZS5nLiBgYF9zcGFtYGApIHNob3VsZAogYmUgdHJlYXRlZCBhcyBhIG5vbi1wdWJsaWMgcGFydCBvZiB0aGUgQVBJICh3aGV0aGVyIGl0IGlzIGEgZnVuY3Rpb24sIGEgbWV0aG9kCiBvciBhIGRhdGEgbWVtYmVyKS4gIEl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBhbmQgc3ViamVjdApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2NvbnRyb2xmbG93LnJzdCBiL0RvYy90dXRvcmlhbC9jb250cm9sZmxvdy5yc3QKaW5kZXggYTkyNDdjZC4uZGU5M2JlYiAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2NvbnRyb2xmbG93LnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvY29udHJvbGZsb3cucnN0CkBAIC00MjksMTEgKzQyOSwxMiBAQAogICAgZGVmIGNoZWVzZXNob3Aoa2luZCwgKmFyZ3VtZW50cywgKiprZXl3b3Jkcyk6CiAgICAgICAgcHJpbnQgIi0tIERvIHlvdSBoYXZlIGFueSIsIGtpbmQsICI/IgogICAgICAgIHByaW50ICItLSBJJ20gc29ycnksIHdlJ3JlIGFsbCBvdXQgb2YiLCBraW5kCi0gICAgICAgZm9yIGFyZyBpbiBhcmd1bWVudHM6IHByaW50IGFyZworICAgICAgIGZvciBhcmcgaW4gYXJndW1lbnRzOgorICAgICAgICAgICBwcmludCBhcmcKICAgICAgICBwcmludCAiLSIgKiA0MAotICAgICAgIGtleXMgPSBrZXl3b3Jkcy5rZXlzKCkKLSAgICAgICBrZXlzLnNvcnQoKQotICAgICAgIGZvciBrdyBpbiBrZXlzOiBwcmludCBrdywgIjoiLCBrZXl3b3Jkc1trd10KKyAgICAgICBrZXlzID0gc29ydGVkKGtleXdvcmRzLmtleXMoKSkKKyAgICAgICBmb3Iga3cgaW4ga2V5czoKKyAgICAgICAgICAgcHJpbnQga3csICI6Iiwga2V5d29yZHNba3ddCiAKIEl0IGNvdWxkIGJlIGNhbGxlZCBsaWtlIHRoaXM6OgogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMucnN0IGIvRG9jL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLnJzdAppbmRleCBkZmMyYjMzLi4yMjZlYWRkIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMucnN0CisrKyBiL0RvYy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5yc3QKQEAgLTE3MCw3ICsxNzAsOCBAQAogYGBmaWx0ZXIoZnVuY3Rpb24sIHNlcXVlbmNlKWBgIHJldHVybnMgYSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRob3NlIGl0ZW1zIGZyb20KIHRoZSBzZXF1ZW5jZSBmb3Igd2hpY2ggYGBmdW5jdGlvbihpdGVtKWBgIGlzIHRydWUuIElmICpzZXF1ZW5jZSogaXMgYQogOmNsYXNzOmBzdHJpbmdgIG9yIDpjbGFzczpgdHVwbGVgLCB0aGUgcmVzdWx0IHdpbGwgYmUgb2YgdGhlIHNhbWUgdHlwZTsKLW90aGVyd2lzZSwgaXQgaXMgYWx3YXlzIGEgOmNsYXNzOmBsaXN0YC4gRm9yIGV4YW1wbGUsIHRvIGNvbXB1dGUgc29tZSBwcmltZXM6Ogorb3RoZXJ3aXNlLCBpdCBpcyBhbHdheXMgYSA6Y2xhc3M6YGxpc3RgLiBGb3IgZXhhbXBsZSwgdG8gY29tcHV0ZSBwcmltZXMgdXAKK3RvIDI1OjoKIAogICAgPj4+IGRlZiBmKHgpOiByZXR1cm4geCAlIDIgIT0gMCBhbmQgeCAlIDMgIT0gMAogICAgLi4uCkBAIC00ODEsOCArNDgyLDggQEAKIAogVGhlIDptZXRoOmBrZXlzYCBtZXRob2Qgb2YgYSBkaWN0aW9uYXJ5IG9iamVjdCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhlIGtleXMKIHVzZWQgaW4gdGhlIGRpY3Rpb25hcnksIGluIGFyYml0cmFyeSBvcmRlciAoaWYgeW91IHdhbnQgaXQgc29ydGVkLCBqdXN0IGFwcGx5Ci10aGUgOm1ldGg6YHNvcnRgIG1ldGhvZCB0byB0aGUgbGlzdCBvZiBrZXlzKS4gIFRvIGNoZWNrIHdoZXRoZXIgYSBzaW5nbGUga2V5IGlzCi1pbiB0aGUgZGljdGlvbmFyeSwgdXNlIHRoZSA6a2V5d29yZDpgaW5gIGtleXdvcmQuCit0aGUgOmZ1bmM6YHNvcnRlZGAgZnVuY3Rpb24gdG8gaXQpLiAgVG8gY2hlY2sgd2hldGhlciBhIHNpbmdsZSBrZXkgaXMgaW4gdGhlCitkaWN0aW9uYXJ5LCB1c2UgdGhlIDprZXl3b3JkOmBpbmAga2V5d29yZC4KIAogSGVyZSBpcyBhIHNtYWxsIGV4YW1wbGUgdXNpbmcgYSBkaWN0aW9uYXJ5OjoKIApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2Vycm9ycy5yc3QgYi9Eb2MvdHV0b3JpYWwvZXJyb3JzLnJzdAppbmRleCBhMDA2OWY1Li4xMzUxOTU3IDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvZXJyb3JzLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvZXJyb3JzLnJzdApAQCAtMjE4LDExICsyMTgsOSBAQAogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICBOYW1lRXJyb3I6IEhpVGhlcmUKIAotVGhlIGFyZ3VtZW50IHRvIDprZXl3b3JkOmByYWlzZWAgaXMgYW4gZXhjZXB0aW9uIGNsYXNzIG9yIGluc3RhbmNlIHRvIGJlCi1yYWlzZWQuICBUaGVyZSBpcyBhIGRlcHJlY2F0ZWQgYWx0ZXJuYXRlIHN5bnRheCB0aGF0IHNlcGFyYXRlcyBjbGFzcyBhbmQKLWNvbnN0cnVjdG9yIGFyZ3VtZW50czsgdGhlIGFib3ZlIGNvdWxkIGJlIHdyaXR0ZW4gYXMgYGByYWlzZSBOYW1lRXJyb3IsCi0nSGlUaGVyZSdgYC4gIFNpbmNlIGl0IG9uY2Ugd2FzIHRoZSBvbmx5IG9uZSBhdmFpbGFibGUsIHRoZSBsYXR0ZXIgZm9ybSBpcwotcHJldmFsZW50IGluIG9sZGVyIGNvZGUuCitUaGUgc29sZSBhcmd1bWVudCB0byA6a2V5d29yZDpgcmFpc2VgIGluZGljYXRlcyB0aGUgZXhjZXB0aW9uIHRvIGJlIHJhaXNlZC4KK1RoaXMgbXVzdCBiZSBlaXRoZXIgYW4gZXhjZXB0aW9uIGluc3RhbmNlIG9yIGFuIGV4Y2VwdGlvbiBjbGFzcyAoYSBjbGFzcyB0aGF0CitkZXJpdmVzIGZyb20gOmNsYXNzOmBFeGNlcHRpb25gKS4KIAogSWYgeW91IG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnV0IGRvbid0IGludGVuZCB0bwogaGFuZGxlIGl0LCBhIHNpbXBsZXIgZm9ybSBvZiB0aGUgOmtleXdvcmQ6YHJhaXNlYCBzdGF0ZW1lbnQgYWxsb3dzIHlvdSB0bwpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2Zsb2F0aW5ncG9pbnQucnN0IGIvRG9jL3R1dG9yaWFsL2Zsb2F0aW5ncG9pbnQucnN0CmluZGV4IDI5YzdhNjYuLjRiOTU1NzAgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9mbG9hdGluZ3BvaW50LnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvZmxvYXRpbmdwb2ludC5yc3QKQEAgLTQ4LDc0ICs0OCw4MiBAQAogCiAgICAwLjAwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEuLi4KIAotU3RvcCBhdCBhbnkgZmluaXRlIG51bWJlciBvZiBiaXRzLCBhbmQgeW91IGdldCBhbiBhcHByb3hpbWF0aW9uLiAgVGhpcyBpcyB3aHkKLXlvdSBzZWUgdGhpbmdzIGxpa2U6OgorU3RvcCBhdCBhbnkgZmluaXRlIG51bWJlciBvZiBiaXRzLCBhbmQgeW91IGdldCBhbiBhcHByb3hpbWF0aW9uLgogCi0gICA+Pj4gMC4xCi0gICAwLjEwMDAwMDAwMDAwMDAwMDAxCitPbiBhIHR5cGljYWwgbWFjaGluZSBydW5uaW5nIFB5dGhvbiwgdGhlcmUgYXJlIDUzIGJpdHMgb2YgcHJlY2lzaW9uIGF2YWlsYWJsZQorZm9yIGEgUHl0aG9uIGZsb2F0LCBzbyB0aGUgdmFsdWUgc3RvcmVkIGludGVybmFsbHkgd2hlbiB5b3UgZW50ZXIgdGhlIGRlY2ltYWwKK251bWJlciBgYDAuMWBgIGlzIHRoZSBiaW5hcnkgZnJhY3Rpb24gOjoKIAotT24gbW9zdCBtYWNoaW5lcyB0b2RheSwgdGhhdCBpcyB3aGF0IHlvdSdsbCBzZWUgaWYgeW91IGVudGVyIDAuMSBhdCBhIFB5dGhvbgotcHJvbXB0LiAgWW91IG1heSBub3QsIHRob3VnaCwgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBieSB0aGUgaGFyZHdhcmUgdG8KLXN0b3JlIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBjYW4gdmFyeSBhY3Jvc3MgbWFjaGluZXMsIGFuZCBQeXRob24gb25seSBwcmludHMgYQotZGVjaW1hbCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cnVlIGRlY2ltYWwgdmFsdWUgb2YgdGhlIGJpbmFyeSBhcHByb3hpbWF0aW9uCi1zdG9yZWQgYnkgdGhlIG1hY2hpbmUuICBPbiBtb3N0IG1hY2hpbmVzLCBpZiBQeXRob24gd2VyZSB0byBwcmludCB0aGUgdHJ1ZQotZGVjaW1hbCB2YWx1ZSBvZiB0aGUgYmluYXJ5IGFwcHJveGltYXRpb24gc3RvcmVkIGZvciAwLjEsIGl0IHdvdWxkIGhhdmUgdG8KLWRpc3BsYXkgOjoKKyAgIDAuMDAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMTAKKword2hpY2ggaXMgY2xvc2UgdG8sIGJ1dCBub3QgZXhhY3RseSBlcXVhbCB0bywgMS8xMC4KKworSXQncyBlYXN5IHRvIGZvcmdldCB0aGF0IHRoZSBzdG9yZWQgdmFsdWUgaXMgYW4gYXBwcm94aW1hdGlvbiB0byB0aGUgb3JpZ2luYWwKK2RlY2ltYWwgZnJhY3Rpb24sIGJlY2F1c2Ugb2YgdGhlIHdheSB0aGF0IGZsb2F0cyBhcmUgZGlzcGxheWVkIGF0IHRoZQoraW50ZXJwcmV0ZXIgcHJvbXB0LiAgUHl0aG9uIG9ubHkgcHJpbnRzIGEgZGVjaW1hbCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cnVlCitkZWNpbWFsIHZhbHVlIG9mIHRoZSBiaW5hcnkgYXBwcm94aW1hdGlvbiBzdG9yZWQgYnkgdGhlIG1hY2hpbmUuICBJZiBQeXRob24KK3dlcmUgdG8gcHJpbnQgdGhlIHRydWUgZGVjaW1hbCB2YWx1ZSBvZiB0aGUgYmluYXJ5IGFwcHJveGltYXRpb24gc3RvcmVkIGZvcgorMC4xLCBpdCB3b3VsZCBoYXZlIHRvIGRpc3BsYXkgOjoKIAogICAgPj4+IDAuMQogICAgMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1CiAKLWluc3RlYWQhICBUaGUgUHl0aG9uIHByb21wdCB1c2VzIHRoZSBidWlsdC1pbiA6ZnVuYzpgcmVwcmAgZnVuY3Rpb24gdG8gb2J0YWluIGEKLXN0cmluZyB2ZXJzaW9uIG9mIGV2ZXJ5dGhpbmcgaXQgZGlzcGxheXMuICBGb3IgZmxvYXRzLCBgYHJlcHIoZmxvYXQpYGAgcm91bmRzCi10aGUgdHJ1ZSBkZWNpbWFsIHZhbHVlIHRvIDE3IHNpZ25pZmljYW50IGRpZ2l0cywgZ2l2aW5nIDo6CitUaGF0IGlzIG1vcmUgZGlnaXRzIHRoYW4gbW9zdCBwZW9wbGUgZmluZCB1c2VmdWwsIHNvIFB5dGhvbiBrZWVwcyB0aGUgbnVtYmVyCitvZiBkaWdpdHMgbWFuYWdlYWJsZSBieSBkaXNwbGF5aW5nIGEgcm91bmRlZCB2YWx1ZSBpbnN0ZWFkIDo6CiAKLSAgIDAuMTAwMDAwMDAwMDAwMDAwMDEKLQotYGByZXByKGZsb2F0KWBgIHByb2R1Y2VzIDE3IHNpZ25pZmljYW50IGRpZ2l0cyBiZWNhdXNlIGl0IHR1cm5zIG91dCB0aGF0J3MKLWVub3VnaCAob24gbW9zdCBtYWNoaW5lcykgc28gdGhhdCBgYGV2YWwocmVwcih4KSkgPT0geGBgIGV4YWN0bHkgZm9yIGFsbCBmaW5pdGUKLWZsb2F0cyAqeCosIGJ1dCByb3VuZGluZyB0byAxNiBkaWdpdHMgaXMgbm90IGVub3VnaCB0byBtYWtlIHRoYXQgdHJ1ZS4KLQotTm90ZSB0aGF0IHRoaXMgaXMgaW4gdGhlIHZlcnkgbmF0dXJlIG9mIGJpbmFyeSBmbG9hdGluZy1wb2ludDogdGhpcyBpcyBub3QgYSBidWcKLWluIFB5dGhvbiwgYW5kIGl0IGlzIG5vdCBhIGJ1ZyBpbiB5b3VyIGNvZGUgZWl0aGVyLiAgWW91J2xsIHNlZSB0aGUgc2FtZSBraW5kIG9mCi10aGluZyBpbiBhbGwgbGFuZ3VhZ2VzIHRoYXQgc3VwcG9ydCB5b3VyIGhhcmR3YXJlJ3MgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYwotKGFsdGhvdWdoIHNvbWUgbGFuZ3VhZ2VzIG1heSBub3QgKmRpc3BsYXkqIHRoZSBkaWZmZXJlbmNlIGJ5IGRlZmF1bHQsIG9yIGluIGFsbAotb3V0cHV0IG1vZGVzKS4KLQotUHl0aG9uJ3MgYnVpbHQtaW4gOmZ1bmM6YHN0cmAgZnVuY3Rpb24gcHJvZHVjZXMgb25seSAxMiBzaWduaWZpY2FudCBkaWdpdHMsIGFuZAoteW91IG1heSB3aXNoIHRvIHVzZSB0aGF0IGluc3RlYWQuICBJdCdzIHVudXN1YWwgZm9yIGBgZXZhbChzdHIoeCkpYGAgdG8KLXJlcHJvZHVjZSAqeCosIGJ1dCB0aGUgb3V0cHV0IG1heSBiZSBtb3JlIHBsZWFzYW50IHRvIGxvb2sgYXQ6OgotCi0gICA+Pj4gcHJpbnQgc3RyKDAuMSkKKyAgID4+PiAwLjEKICAgIDAuMQogCiBJdCdzIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgdGhpcyBpcywgaW4gYSByZWFsIHNlbnNlLCBhbiBpbGx1c2lvbjogdGhlIHZhbHVlCiBpbiB0aGUgbWFjaGluZSBpcyBub3QgZXhhY3RseSAxLzEwLCB5b3UncmUgc2ltcGx5IHJvdW5kaW5nIHRoZSAqZGlzcGxheSogb2YgdGhlCi10cnVlIG1hY2hpbmUgdmFsdWUuCit0cnVlIG1hY2hpbmUgdmFsdWUuICBUaGlzIGZhY3QgYmVjb21lcyBhcHBhcmVudCBhcyBzb29uIGFzIHlvdSB0cnkgdG8gZG8KK2FyaXRobWV0aWMgd2l0aCB0aGVzZSB2YWx1ZXMgOjoKIAotT3RoZXIgc3VycHJpc2VzIGZvbGxvdyBmcm9tIHRoaXMgb25lLiAgRm9yIGV4YW1wbGUsIGFmdGVyIHNlZWluZyA6OgorICAgPj4+IDAuMSArIDAuMgorICAgMC4zMDAwMDAwMDAwMDAwMDAwNAogCi0gICA+Pj4gMC4xCi0gICAwLjEwMDAwMDAwMDAwMDAwMDAxCitOb3RlIHRoYXQgdGhpcyBpcyBpbiB0aGUgdmVyeSBuYXR1cmUgb2YgYmluYXJ5IGZsb2F0aW5nLXBvaW50OiB0aGlzIGlzIG5vdCBhCitidWcgaW4gUHl0aG9uLCBhbmQgaXQgaXMgbm90IGEgYnVnIGluIHlvdXIgY29kZSBlaXRoZXIuICBZb3UnbGwgc2VlIHRoZSBzYW1lCitraW5kIG9mIHRoaW5nIGluIGFsbCBsYW5ndWFnZXMgdGhhdCBzdXBwb3J0IHlvdXIgaGFyZHdhcmUncyBmbG9hdGluZy1wb2ludAorYXJpdGhtZXRpYyAoYWx0aG91Z2ggc29tZSBsYW5ndWFnZXMgbWF5IG5vdCAqZGlzcGxheSogdGhlIGRpZmZlcmVuY2UgYnkKK2RlZmF1bHQsIG9yIGluIGFsbCBvdXRwdXQgbW9kZXMpLgogCi15b3UgbWF5IGJlIHRlbXB0ZWQgdG8gdXNlIHRoZSA6ZnVuYzpgcm91bmRgIGZ1bmN0aW9uIHRvIGNob3AgaXQgYmFjayB0byB0aGUKLXNpbmdsZSBkaWdpdCB5b3UgZXhwZWN0LiAgQnV0IHRoYXQgbWFrZXMgbm8gZGlmZmVyZW5jZTo6CitPdGhlciBzdXJwcmlzZXMgZm9sbG93IGZyb20gdGhpcyBvbmUuICBGb3IgZXhhbXBsZSwgaWYgeW91IHRyeSB0byByb3VuZCB0aGUKK3ZhbHVlIDIuNjc1IHRvIHR3byBkZWNpbWFsIHBsYWNlcywgeW91IGdldCB0aGlzIDo6CiAKLSAgID4+PiByb3VuZCgwLjEsIDEpCi0gICAwLjEwMDAwMDAwMDAwMDAwMDAxCisgICA+Pj4gcm91bmQoMi42NzUsIDIpCisgICAyLjY3CiAKLVRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGJpbmFyeSBmbG9hdGluZy1wb2ludCB2YWx1ZSBzdG9yZWQgZm9yICIwLjEiIHdhcyBhbHJlYWR5Ci10aGUgYmVzdCBwb3NzaWJsZSBiaW5hcnkgYXBwcm94aW1hdGlvbiB0byAxLzEwLCBzbyB0cnlpbmcgdG8gcm91bmQgaXQgYWdhaW4KLWNhbid0IG1ha2UgaXQgYmV0dGVyOiAgaXQgd2FzIGFscmVhZHkgYXMgZ29vZCBhcyBpdCBnZXRzLgorVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBidWlsdC1pbiA6ZnVuYzpgcm91bmRgIGZ1bmN0aW9uIHNheXMgdGhhdCBpdCByb3VuZHMKK3RvIHRoZSBuZWFyZXN0IHZhbHVlLCByb3VuZGluZyB0aWVzIGF3YXkgZnJvbSB6ZXJvLiAgU2luY2UgdGhlIGRlY2ltYWwgZnJhY3Rpb24KKzIuNjc1IGlzIGV4YWN0bHkgaGFsZndheSBiZXR3ZWVuIDIuNjcgYW5kIDIuNjgsIHlvdSBtaWdodCBleHBlY3QgdGhlIHJlc3VsdAoraGVyZSB0byBiZSAoYSBiaW5hcnkgYXBwcm94aW1hdGlvbiB0bykgMi42OC4gIEl0J3Mgbm90LCBiZWNhdXNlIHdoZW4gdGhlCitkZWNpbWFsIHN0cmluZyBgYDIuNjc1YGAgaXMgY29udmVydGVkIHRvIGEgYmluYXJ5IGZsb2F0aW5nLXBvaW50IG51bWJlciwgaXQncworYWdhaW4gcmVwbGFjZWQgd2l0aCBhIGJpbmFyeSBhcHByb3hpbWF0aW9uLCB3aG9zZSBleGFjdCB2YWx1ZSBpcyA6OgogCi1Bbm90aGVyIGNvbnNlcXVlbmNlIGlzIHRoYXQgc2luY2UgMC4xIGlzIG5vdCBleGFjdGx5IDEvMTAsIHN1bW1pbmcgdGVuIHZhbHVlcyBvZgotMC4xIG1heSBub3QgeWllbGQgZXhhY3RseSAxLjAsIGVpdGhlcjo6CisgICAyLjY3NDk5OTk5OTk5OTk5OTgyMjM2NDMxNjA1OTk3NDk1MzUzMjIxODkzMzEwNTQ2ODc1CisKK1NpbmNlIHRoaXMgYXBwcm94aW1hdGlvbiBpcyBzbGlnaHRseSBjbG9zZXIgdG8gMi42NyB0aGFuIHRvIDIuNjgsIGl0J3Mgcm91bmRlZAorZG93bi4KKworSWYgeW91J3JlIGluIGEgc2l0dWF0aW9uIHdoZXJlIHlvdSBjYXJlIHdoaWNoIHdheSB5b3VyIGRlY2ltYWwgaGFsZndheS1jYXNlcworYXJlIHJvdW5kZWQsIHlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdGhlIDptb2Q6YGRlY2ltYWxgIG1vZHVsZS4KK0luY2lkZW50YWxseSwgdGhlIDptb2Q6YGRlY2ltYWxgIG1vZHVsZSBhbHNvIHByb3ZpZGVzIGEgbmljZSB3YXkgdG8gInNlZSIgdGhlCitleGFjdCB2YWx1ZSB0aGF0J3Mgc3RvcmVkIGluIGFueSBwYXJ0aWN1bGFyIFB5dGhvbiBmbG9hdCA6OgorCisgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisgICA+Pj4gRGVjaW1hbCgyLjY3NSkKKyAgIERlY2ltYWwoJzIuNjc0OTk5OTk5OTk5OTk5ODIyMzY0MzE2MDU5OTc0OTUzNTMyMjE4OTMzMTA1NDY4NzUnKQorCitBbm90aGVyIGNvbnNlcXVlbmNlIGlzIHRoYXQgc2luY2UgMC4xIGlzIG5vdCBleGFjdGx5IDEvMTAsIHN1bW1pbmcgdGVuIHZhbHVlcworb2YgMC4xIG1heSBub3QgeWllbGQgZXhhY3RseSAxLjAsIGVpdGhlcjo6CiAKICAgID4+PiBzdW0gPSAwLjAKICAgID4+PiBmb3IgaSBpbiByYW5nZSgxMCk6CiAgICAuLi4gICAgIHN1bSArPSAwLjEKICAgIC4uLgogICAgPj4+IHN1bQotICAgMC45OTk5OTk5OTk5OTk5OTk4OQorICAgMC45OTk5OTk5OTk5OTk5OTk5CiAKIEJpbmFyeSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIGhvbGRzIG1hbnkgc3VycHJpc2VzIGxpa2UgdGhpcy4gIFRoZSBwcm9ibGVtCiB3aXRoICIwLjEiIGlzIGV4cGxhaW5lZCBpbiBwcmVjaXNlIGRldGFpbCBiZWxvdywgaW4gdGhlICJSZXByZXNlbnRhdGlvbiBFcnJvciIKQEAgLTEzMSw5ICsxMzksOSBAQAogCiBXaGlsZSBwYXRob2xvZ2ljYWwgY2FzZXMgZG8gZXhpc3QsIGZvciBtb3N0IGNhc3VhbCB1c2Ugb2YgZmxvYXRpbmctcG9pbnQKIGFyaXRobWV0aWMgeW91J2xsIHNlZSB0aGUgcmVzdWx0IHlvdSBleHBlY3QgaW4gdGhlIGVuZCBpZiB5b3Ugc2ltcGx5IHJvdW5kIHRoZQotZGlzcGxheSBvZiB5b3VyIGZpbmFsIHJlc3VsdHMgdG8gdGhlIG51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cyB5b3UgZXhwZWN0LgotOmZ1bmM6YHN0cmAgdXN1YWxseSBzdWZmaWNlcywgYW5kIGZvciBmaW5lciBjb250cm9sIHNlZSB0aGUgOm1ldGg6YHN0ci5mb3JtYXRgCi1tZXRob2QncyBmb3JtYXQgc3BlY2lmaWVycyBpbiA6cmVmOmBmb3JtYXRzdHJpbmdzYC4KK2Rpc3BsYXkgb2YgeW91ciBmaW5hbCByZXN1bHRzIHRvIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBkaWdpdHMgeW91IGV4cGVjdC4gIEZvcgorZmluZSBjb250cm9sIG92ZXIgaG93IGEgZmxvYXQgaXMgZGlzcGxheWVkIHNlZSB0aGUgOm1ldGg6YHN0ci5mb3JtYXRgIG1ldGhvZCdzCitmb3JtYXQgc3BlY2lmaWVycyBpbiA6cmVmOmBmb3JtYXRzdHJpbmdzYC4KIAogCiAuLiBfdHV0LWZwLWVycm9yOgpAQCAtMTQxLDI0ICsxNDksMjQgQEAKIFJlcHJlc2VudGF0aW9uIEVycm9yCiA9PT09PT09PT09PT09PT09PT09PQogCi1UaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlICIwLjEiIGV4YW1wbGUgaW4gZGV0YWlsLCBhbmQgc2hvd3MgaG93IHlvdSBjYW4gcGVyZm9ybQotYW4gZXhhY3QgYW5hbHlzaXMgb2YgY2FzZXMgbGlrZSB0aGlzIHlvdXJzZWxmLiAgQmFzaWMgZmFtaWxpYXJpdHkgd2l0aCBiaW5hcnkKLWZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIGlzIGFzc3VtZWQuCitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlICIwLjEiIGV4YW1wbGUgaW4gZGV0YWlsLCBhbmQgc2hvd3MgaG93IHlvdSBjYW4KK3BlcmZvcm0gYW4gZXhhY3QgYW5hbHlzaXMgb2YgY2FzZXMgbGlrZSB0aGlzIHlvdXJzZWxmLiAgQmFzaWMgZmFtaWxpYXJpdHkgd2l0aAorYmluYXJ5IGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIGlzIGFzc3VtZWQuCiAKIDpkZm46YFJlcHJlc2VudGF0aW9uIGVycm9yYCByZWZlcnMgdG8gdGhlIGZhY3QgdGhhdCBzb21lIChtb3N0LCBhY3R1YWxseSkKIGRlY2ltYWwgZnJhY3Rpb25zIGNhbm5vdCBiZSByZXByZXNlbnRlZCBleGFjdGx5IGFzIGJpbmFyeSAoYmFzZSAyKSBmcmFjdGlvbnMuCiBUaGlzIGlzIHRoZSBjaGllZiByZWFzb24gd2h5IFB5dGhvbiAob3IgUGVybCwgQywgQysrLCBKYXZhLCBGb3J0cmFuLCBhbmQgbWFueQogb3RoZXJzKSBvZnRlbiB3b24ndCBkaXNwbGF5IHRoZSBleGFjdCBkZWNpbWFsIG51bWJlciB5b3UgZXhwZWN0OjoKIAotICAgPj4+IDAuMQotICAgMC4xMDAwMDAwMDAwMDAwMDAwMQorICAgPj4+IDAuMSArIDAuMgorICAgMC4zMDAwMDAwMDAwMDAwMDAwNAogCi1XaHkgaXMgdGhhdD8gIDEvMTAgaXMgbm90IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBhIGJpbmFyeSBmcmFjdGlvbi4gQWxtb3N0IGFsbAotbWFjaGluZXMgdG9kYXkgKE5vdmVtYmVyIDIwMDApIHVzZSBJRUVFLTc1NCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljLCBhbmQKLWFsbW9zdCBhbGwgcGxhdGZvcm1zIG1hcCBQeXRob24gZmxvYXRzIHRvIElFRUUtNzU0ICJkb3VibGUgcHJlY2lzaW9uIi4gIDc1NAotZG91YmxlcyBjb250YWluIDUzIGJpdHMgb2YgcHJlY2lzaW9uLCBzbyBvbiBpbnB1dCB0aGUgY29tcHV0ZXIgc3RyaXZlcyB0bwotY29udmVydCAwLjEgdG8gdGhlIGNsb3Nlc3QgZnJhY3Rpb24gaXQgY2FuIG9mIHRoZSBmb3JtICpKKi8yKipcICpOKiB3aGVyZSAqSiogaXMKLWFuIGludGVnZXIgY29udGFpbmluZyBleGFjdGx5IDUzIGJpdHMuICBSZXdyaXRpbmcgOjoKK1doeSBpcyB0aGF0PyAgMS8xMCBhbmQgMi8xMCBhcmUgbm90IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBhIGJpbmFyeQorZnJhY3Rpb24uIEFsbW9zdCBhbGwgbWFjaGluZXMgdG9kYXkgKEp1bHkgMjAxMCkgdXNlIElFRUUtNzU0IGZsb2F0aW5nIHBvaW50Cithcml0aG1ldGljLCBhbmQgYWxtb3N0IGFsbCBwbGF0Zm9ybXMgbWFwIFB5dGhvbiBmbG9hdHMgdG8gSUVFRS03NTQgImRvdWJsZQorcHJlY2lzaW9uIi4gIDc1NCBkb3VibGVzIGNvbnRhaW4gNTMgYml0cyBvZiBwcmVjaXNpb24sIHNvIG9uIGlucHV0IHRoZSBjb21wdXRlcgorc3RyaXZlcyB0byBjb252ZXJ0IDAuMSB0byB0aGUgY2xvc2VzdCBmcmFjdGlvbiBpdCBjYW4gb2YgdGhlIGZvcm0gKkoqLzIqKlwgKk4qCit3aGVyZSAqSiogaXMgYW4gaW50ZWdlciBjb250YWluaW5nIGV4YWN0bHkgNTMgYml0cy4gIFJld3JpdGluZyA6OgogCiAgICAxIC8gMTAgfj0gSiAvICgyKipOKQogCkBAIC0xNzAsMjQgKzE3OCwyNCBAQAogdGhlIGJlc3QgdmFsdWUgZm9yICpOKiBpcyA1Njo6CiAKICAgID4+PiAyKio1MgotICAgNDUwMzU5OTYyNzM3MDQ5NkwKKyAgIDQ1MDM1OTk2MjczNzA0OTYKICAgID4+PiAyKio1MwotICAgOTAwNzE5OTI1NDc0MDk5MkwKKyAgIDkwMDcxOTkyNTQ3NDA5OTIKICAgID4+PiAyKio1Ni8xMAotICAgNzIwNTc1OTQwMzc5Mjc5M0wKKyAgIDcyMDU3NTk0MDM3OTI3OTMKIAotVGhhdCBpcywgNTYgaXMgdGhlIG9ubHkgdmFsdWUgZm9yICpOKiB0aGF0IGxlYXZlcyAqSiogd2l0aCBleGFjdGx5IDUzIGJpdHMuICBUaGUKLWJlc3QgcG9zc2libGUgdmFsdWUgZm9yICpKKiBpcyB0aGVuIHRoYXQgcXVvdGllbnQgcm91bmRlZDo6CitUaGF0IGlzLCA1NiBpcyB0aGUgb25seSB2YWx1ZSBmb3IgKk4qIHRoYXQgbGVhdmVzICpKKiB3aXRoIGV4YWN0bHkgNTMgYml0cy4KK1RoZSBiZXN0IHBvc3NpYmxlIHZhbHVlIGZvciAqSiogaXMgdGhlbiB0aGF0IHF1b3RpZW50IHJvdW5kZWQ6OgogCiAgICA+Pj4gcSwgciA9IGRpdm1vZCgyKio1NiwgMTApCiAgICA+Pj4gcgotICAgNkwKKyAgIDYKIAogU2luY2UgdGhlIHJlbWFpbmRlciBpcyBtb3JlIHRoYW4gaGFsZiBvZiAxMCwgdGhlIGJlc3QgYXBwcm94aW1hdGlvbiBpcyBvYnRhaW5lZAogYnkgcm91bmRpbmcgdXA6OgogCiAgICA+Pj4gcSsxCi0gICA3MjA1NzU5NDAzNzkyNzk0TAorICAgNzIwNTc1OTQwMzc5Mjc5NAogCiBUaGVyZWZvcmUgdGhlIGJlc3QgcG9zc2libGUgYXBwcm94aW1hdGlvbiB0byAxLzEwIGluIDc1NCBkb3VibGUgcHJlY2lzaW9uIGlzCiB0aGF0IG92ZXIgMlwqXCo1Niwgb3IgOjoKQEAgLTE5NSw4ICsyMDMsOCBAQAogICAgNzIwNTc1OTQwMzc5Mjc5NCAvIDcyMDU3NTk0MDM3OTI3OTM2CiAKIE5vdGUgdGhhdCBzaW5jZSB3ZSByb3VuZGVkIHVwLCB0aGlzIGlzIGFjdHVhbGx5IGEgbGl0dGxlIGJpdCBsYXJnZXIgdGhhbiAxLzEwOwotaWYgd2UgaGFkIG5vdCByb3VuZGVkIHVwLCB0aGUgcXVvdGllbnQgd291bGQgaGF2ZSBiZWVuIGEgbGl0dGxlIGJpdCBzbWFsbGVyIHRoYW4KLTEvMTAuICBCdXQgaW4gbm8gY2FzZSBjYW4gaXQgYmUgKmV4YWN0bHkqIDEvMTAhCitpZiB3ZSBoYWQgbm90IHJvdW5kZWQgdXAsIHRoZSBxdW90aWVudCB3b3VsZCBoYXZlIGJlZW4gYSBsaXR0bGUgYml0IHNtYWxsZXIKK3RoYW4gMS8xMC4gIEJ1dCBpbiBubyBjYXNlIGNhbiBpdCBiZSAqZXhhY3RseSogMS8xMCEKIAogU28gdGhlIGNvbXB1dGVyIG5ldmVyICJzZWVzIiAxLzEwOiAgd2hhdCBpdCBzZWVzIGlzIHRoZSBleGFjdCBmcmFjdGlvbiBnaXZlbgogYWJvdmUsIHRoZSBiZXN0IDc1NCBkb3VibGUgYXBwcm94aW1hdGlvbiBpdCBjYW4gZ2V0OjoKQEAgLTIwNywxMyArMjE1LDEyIEBACiBJZiB3ZSBtdWx0aXBseSB0aGF0IGZyYWN0aW9uIGJ5IDEwXCpcKjMwLCB3ZSBjYW4gc2VlIHRoZSAodHJ1bmNhdGVkKSB2YWx1ZSBvZgogaXRzIDMwIG1vc3Qgc2lnbmlmaWNhbnQgZGVjaW1hbCBkaWdpdHM6OgogCi0gICA+Pj4gNzIwNTc1OTQwMzc5Mjc5NCAqIDEwKiozMCAvIDIqKjU2CisgICA+Pj4gNzIwNTc1OTQwMzc5Mjc5NCAqIDEwKiozMCAvLyAyKio1NgogICAgMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1TAogCiBtZWFuaW5nIHRoYXQgdGhlIGV4YWN0IG51bWJlciBzdG9yZWQgaW4gdGhlIGNvbXB1dGVyIGlzIGFwcHJveGltYXRlbHkgZXF1YWwgdG8KLXRoZSBkZWNpbWFsIHZhbHVlIDAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1LiAgUm91bmRpbmcgdGhhdCB0byAxNwotc2lnbmlmaWNhbnQgZGlnaXRzIGdpdmVzIHRoZSAwLjEwMDAwMDAwMDAwMDAwMDAxIHRoYXQgUHl0aG9uIGRpc3BsYXlzICh3ZWxsLAotd2lsbCBkaXNwbGF5IG9uIGFueSA3NTQtY29uZm9ybWluZyBwbGF0Zm9ybSB0aGF0IGRvZXMgYmVzdC1wb3NzaWJsZSBpbnB1dCBhbmQKLW91dHB1dCBjb252ZXJzaW9ucyBpbiBpdHMgQyBsaWJyYXJ5IC0tLSB5b3VycyBtYXkgbm90ISkuCi0KLQordGhlIGRlY2ltYWwgdmFsdWUgMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjUuICBJbiB2ZXJzaW9ucyBwcmlvciB0bworUHl0aG9uIDIuNyBhbmQgUHl0aG9uIDMuMSwgUHl0aG9uIHJvdW5kZWQgdGhpcyB2YWx1ZSB0byAxNyBzaWduaWZpY2FudCBkaWdpdHMsCitnaXZpbmcgJzAuMTAwMDAwMDAwMDAwMDAwMDEnLiAgSW4gY3VycmVudCB2ZXJzaW9ucywgUHl0aG9uIGRpc3BsYXlzIGEgdmFsdWUKK2Jhc2VkIG9uIHRoZSBzaG9ydGVzdCBkZWNpbWFsIGZyYWN0aW9uIHRoYXQgcm91bmRzIGNvcnJlY3RseSBiYWNrIHRvIHRoZSB0cnVlCitiaW5hcnkgdmFsdWUsIHJlc3VsdGluZyBzaW1wbHkgaW4gJzAuMScuCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW5wdXRvdXRwdXQucnN0IGIvRG9jL3R1dG9yaWFsL2lucHV0b3V0cHV0LnJzdAppbmRleCBhMmRkYTNiLi4wZTA0OTYyIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW5wdXRvdXRwdXQucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnB1dG91dHB1dC5yc3QKQEAgLTQ5LDEwICs0OSwxMCBAQAogICAgJ0hlbGxvLCB3b3JsZC4nCiAgICA+Pj4gcmVwcihzKQogICAgIidIZWxsbywgd29ybGQuJyIKLSAgID4+PiBzdHIoMC4xKQotICAgJzAuMScKLSAgID4+PiByZXByKDAuMSkKLSAgICcwLjEwMDAwMDAwMDAwMDAwMDAxJworICAgPj4+IHN0cigxLjAvNy4wKQorICAgJzAuMTQyODU3MTQyODU3JworICAgPj4+IHJlcHIoMS4wLzcuMCkKKyAgICcwLjE0Mjg1NzE0Mjg1NzE0Mjg1JwogICAgPj4+IHggPSAxMCAqIDMuMjUKICAgID4+PiB5ID0gMjAwICogMjAwCiAgICA+Pj4gcyA9ICdUaGUgdmFsdWUgb2YgeCBpcyAnICsgcmVwcih4KSArICcsIGFuZCB5IGlzICcgKyByZXByKHkpICsgJy4uLicKQEAgLTEyMyw3ICsxMjMsNyBAQAogCiBCYXNpYyB1c2FnZSBvZiB0aGUgOm1ldGg6YHN0ci5mb3JtYXRgIG1ldGhvZCBsb29rcyBsaWtlIHRoaXM6OgogCi0gICA+Pj4gcHJpbnQgJ1dlIGFyZSB0aGUgezB9IHdobyBzYXkgInsxfSEiJy5mb3JtYXQoJ2tuaWdodHMnLCAnTmknKQorICAgPj4+IHByaW50ICdXZSBhcmUgdGhlIHt9IHdobyBzYXkgInt9ISInLmZvcm1hdCgna25pZ2h0cycsICdOaScpCiAgICBXZSBhcmUgdGhlIGtuaWdodHMgd2hvIHNheSAiTmkhIgogCiBUaGUgYnJhY2tldHMgYW5kIGNoYXJhY3RlcnMgd2l0aGluIHRoZW0gKGNhbGxlZCBmb3JtYXQgZmllbGRzKSBhcmUgcmVwbGFjZWQgd2l0aApAQCAtMTUzLDE0ICsxNTMsMTQgQEAKIGNvbnZlcnQgdGhlIHZhbHVlIGJlZm9yZSBpdCBpcyBmb3JtYXR0ZWQuIDo6CiAKICAgID4+PiBpbXBvcnQgbWF0aAotICAgPj4+IHByaW50ICdUaGUgdmFsdWUgb2YgUEkgaXMgYXBwcm94aW1hdGVseSB7MH0uJy5mb3JtYXQobWF0aC5waSkKKyAgID4+PiBwcmludCAnVGhlIHZhbHVlIG9mIFBJIGlzIGFwcHJveGltYXRlbHkge30uJy5mb3JtYXQobWF0aC5waSkKICAgIFRoZSB2YWx1ZSBvZiBQSSBpcyBhcHByb3hpbWF0ZWx5IDMuMTQxNTkyNjUzNTkuCi0gICA+Pj4gcHJpbnQgJ1RoZSB2YWx1ZSBvZiBQSSBpcyBhcHByb3hpbWF0ZWx5IHswIXJ9LicuZm9ybWF0KG1hdGgucGkpCisgICA+Pj4gcHJpbnQgJ1RoZSB2YWx1ZSBvZiBQSSBpcyBhcHByb3hpbWF0ZWx5IHshcn0uJy5mb3JtYXQobWF0aC5waSkKICAgIFRoZSB2YWx1ZSBvZiBQSSBpcyBhcHByb3hpbWF0ZWx5IDMuMTQxNTkyNjUzNTg5NzkzLgogCiBBbiBvcHRpb25hbCBgYCc6J2BgIGFuZCBmb3JtYXQgc3BlY2lmaWVyIGNhbiBmb2xsb3cgdGhlIGZpZWxkIG5hbWUuIFRoaXMgYWxsb3dzCiBncmVhdGVyIGNvbnRyb2wgb3ZlciBob3cgdGhlIHZhbHVlIGlzIGZvcm1hdHRlZC4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQotdHJ1bmNhdGVzIFBpIHRvIHRocmVlIHBsYWNlcyBhZnRlciB0aGUgZGVjaW1hbC4KK3JvdW5kcyBQaSB0byB0aHJlZSBwbGFjZXMgYWZ0ZXIgdGhlIGRlY2ltYWwuCiAKICAgID4+PiBpbXBvcnQgbWF0aAogICAgPj4+IHByaW50ICdUaGUgdmFsdWUgb2YgUEkgaXMgYXBwcm94aW1hdGVseSB7MDouM2Z9LicuZm9ybWF0KG1hdGgucGkpCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0IGIvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdAppbmRleCAzMTFiNDA5Li5kZjkzYWYyIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKQEAgLTIyLDExICsyMiwxMSBAQAogYWx0ZXJuYXRpdmUgbG9jYXRpb24uKQogCiBPbiBXaW5kb3dzIG1hY2hpbmVzLCB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiBpcyB1c3VhbGx5IHBsYWNlZCBpbgotOmZpbGU6YEM6XFxQeXRob24yNmAsIHRob3VnaCB5b3UgY2FuIGNoYW5nZSB0aGlzIHdoZW4geW91J3JlIHJ1bm5pbmcgdGhlCis6ZmlsZTpgQzpcXFB5dGhvbjI3YCwgdGhvdWdoIHlvdSBjYW4gY2hhbmdlIHRoaXMgd2hlbiB5b3UncmUgcnVubmluZyB0aGUKIGluc3RhbGxlci4gIFRvIGFkZCB0aGlzIGRpcmVjdG9yeSB0byB5b3VyIHBhdGgsICB5b3UgY2FuIHR5cGUgdGhlIGZvbGxvd2luZwogY29tbWFuZCBpbnRvIHRoZSBjb21tYW5kIHByb21wdCBpbiBhIERPUyBib3g6OgogCi0gICBzZXQgcGF0aD0lcGF0aCU7QzpccHl0aG9uMjYKKyAgIHNldCBwYXRoPSVwYXRoJTtDOlxweXRob24yNwogCiBUeXBpbmcgYW4gZW5kLW9mLWZpbGUgY2hhcmFjdGVyICg6a2JkOmBDb250cm9sLURgIG9uIFVuaXgsIDprYmQ6YENvbnRyb2wtWmAgb24KIFdpbmRvd3MpIGF0IHRoZSBwcmltYXJ5IHByb21wdCBjYXVzZXMgdGhlIGludGVycHJldGVyIHRvIGV4aXQgd2l0aCBhIHplcm8gZXhpdApAQCAtNTgsMTQgKzU4LDYgQEAKIGBgcHl0aG9uIC1tIG1vZHVsZSBbYXJnXSAuLi5gYCwgd2hpY2ggZXhlY3V0ZXMgdGhlIHNvdXJjZSBmaWxlIGZvciAqbW9kdWxlKiBhcwogaWYgeW91IGhhZCBzcGVsbGVkIG91dCBpdHMgZnVsbCBuYW1lIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAKLU5vdGUgdGhhdCB0aGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBgYHB5dGhvbiBmaWxlYGAgYW5kIGBgcHl0aG9uIDxmaWxlYGAuCi1JbiB0aGUgbGF0dGVyIGNhc2UsIGlucHV0IHJlcXVlc3RzIGZyb20gdGhlIHByb2dyYW0sIHN1Y2ggYXMgY2FsbHMgdG8KLTpmdW5jOmBpbnB1dGAgYW5kIDpmdW5jOmByYXdfaW5wdXRgLCBhcmUgc2F0aXNmaWVkIGZyb20gKmZpbGUqLiAgU2luY2UgdGhpcyBmaWxlCi1oYXMgYWxyZWFkeSBiZWVuIHJlYWQgdW50aWwgdGhlIGVuZCBieSB0aGUgcGFyc2VyIGJlZm9yZSB0aGUgcHJvZ3JhbSBzdGFydHMKLWV4ZWN1dGluZywgdGhlIHByb2dyYW0gd2lsbCBlbmNvdW50ZXIgZW5kLW9mLWZpbGUgaW1tZWRpYXRlbHkuICBJbiB0aGUgZm9ybWVyCi1jYXNlICh3aGljaCBpcyB1c3VhbGx5IHdoYXQgeW91IHdhbnQpIHRoZXkgYXJlIHNhdGlzZmllZCBmcm9tIHdoYXRldmVyIGZpbGUgb3IKLWRldmljZSBpcyBjb25uZWN0ZWQgdG8gc3RhbmRhcmQgaW5wdXQgb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4KLQogV2hlbiBhIHNjcmlwdCBmaWxlIGlzIHVzZWQsIGl0IGlzIHNvbWV0aW1lcyB1c2VmdWwgdG8gYmUgYWJsZSB0byBydW4gdGhlIHNjcmlwdAogYW5kIGVudGVyIGludGVyYWN0aXZlIG1vZGUgYWZ0ZXJ3YXJkcy4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgcGFzc2luZyA6b3B0aW9uOmAtaWAKIGJlZm9yZSB0aGUgc2NyaXB0LiAgKFRoaXMgZG9lcyBub3Qgd29yayBpZiB0aGUgc2NyaXB0IGlzIHJlYWQgZnJvbSBzdGFuZGFyZApAQCAtNzgsOCArNzAsOSBAQAogLS0tLS0tLS0tLS0tLS0tLQogCiBXaGVuIGtub3duIHRvIHRoZSBpbnRlcnByZXRlciwgdGhlIHNjcmlwdCBuYW1lIGFuZCBhZGRpdGlvbmFsIGFyZ3VtZW50cwotdGhlcmVhZnRlciBhcmUgcGFzc2VkIHRvIHRoZSBzY3JpcHQgaW4gdGhlIHZhcmlhYmxlIGBgc3lzLmFyZ3ZgYCwgd2hpY2ggaXMgYQotbGlzdCBvZiBzdHJpbmdzLiAgSXRzIGxlbmd0aCBpcyBhdCBsZWFzdCBvbmU7IHdoZW4gbm8gc2NyaXB0IGFuZCBubyBhcmd1bWVudHMKK3RoZXJlYWZ0ZXIgYXJlIHR1cm5lZCBpbnRvIGEgbGlzdCBvZiBzdHJpbmdzIGFuZCBhc3NpZ25lZCB0byB0aGUgYGBhcmd2YGAKK3ZhcmlhYmxlIGluIHRoZSBgYHN5c2BgIG1vZHVsZS4gIFlvdSBjYW4gYWNjZXNzIHRoaXMgbGlzdCBieSBleGVjdXRpbmcgYGBpbXBvcnQKK3N5c2BgLiAgVGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBpcyBhdCBsZWFzdCBvbmU7IHdoZW4gbm8gc2NyaXB0IGFuZCBubyBhcmd1bWVudHMKIGFyZSBnaXZlbiwgYGBzeXMuYXJndlswXWBgIGlzIGFuIGVtcHR5IHN0cmluZy4gIFdoZW4gdGhlIHNjcmlwdCBuYW1lIGlzIGdpdmVuIGFzCiBgYCctJ2BgIChtZWFuaW5nICBzdGFuZGFyZCBpbnB1dCksIGBgc3lzLmFyZ3ZbMF1gYCBpcyBzZXQgdG8gYGAnLSdgYC4gIFdoZW4KIDpvcHRpb246YC1jYCAqY29tbWFuZCogaXMgdXNlZCwgYGBzeXMuYXJndlswXWBgIGlzIHNldCB0byBgYCctYydgYC4gIFdoZW4KQEAgLTEwMiw3ICs5NSw3IEBACiBiZWZvcmUgcHJpbnRpbmcgdGhlIGZpcnN0IHByb21wdDo6CiAKICAgIHB5dGhvbgotICAgUHl0aG9uIDIuNiAoIzEsIEZlYiAyOCAyMDA3LCAwMDowMjowNikKKyAgIFB5dGhvbiAyLjcgKCMxLCBGZWIgMjggMjAxMCwgMDA6MDI6MDYpCiAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICA+Pj4KIApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5yc3QgYi9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdAppbmRleCBjOTUzMzk0Li42ZDhmODkwIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdApAQCAtMTc4LDYgKzE3OCwxMyBAQAogICAgPj4+ICciSXNuXCd0LCIgc2hlIHNhaWQuJwogICAgJyJJc25cJ3QsIiBzaGUgc2FpZC4nCiAKK1RoZSBpbnRlcnByZXRlciBwcmludHMgdGhlIHJlc3VsdCBvZiBzdHJpbmcgb3BlcmF0aW9ucyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhleQorYXJlIHR5cGVkIGZvciBpbnB1dDogaW5zaWRlIHF1b3RlcywgYW5kIHdpdGggcXVvdGVzIGFuZCBvdGhlciBmdW5ueSBjaGFyYWN0ZXJzCitlc2NhcGVkIGJ5IGJhY2tzbGFzaGVzLCB0byBzaG93IHRoZSBwcmVjaXNlIHZhbHVlLiAgVGhlIHN0cmluZyBpcyBlbmNsb3NlZCBpbgorZG91YmxlIHF1b3RlcyBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgc2luZ2xlIHF1b3RlIGFuZCBubyBkb3VibGUgcXVvdGVzLCBlbHNlCitpdCdzIGVuY2xvc2VkIGluIHNpbmdsZSBxdW90ZXMuICBUaGUgOmtleXdvcmQ6YHByaW50YCBzdGF0ZW1lbnQgcHJvZHVjZXMgYSBtb3JlCityZWFkYWJsZSBvdXRwdXQgZm9yIHN1Y2ggaW5wdXQgc3RyaW5ncy4KKwogU3RyaW5nIGxpdGVyYWxzIGNhbiBzcGFuIG11bHRpcGxlIGxpbmVzIGluIHNldmVyYWwgd2F5cy4gIENvbnRpbnVhdGlvbiBsaW5lcyBjYW4KIGJlIHVzZWQsIHdpdGggYSBiYWNrc2xhc2ggYXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9uIHRoZSBsaW5lIGluZGljYXRpbmcgdGhhdCB0aGUKIG5leHQgbGluZSBpcyBhIGxvZ2ljYWwgY29udGludWF0aW9uIG9mIHRoZSBsaW5lOjoKQEAgLTE4OSw3ICsxOTYsNyBAQAogCiAgICBwcmludCBoZWxsbwogCi1Ob3RlIHRoYXQgbmV3bGluZXMgc3RpbGwgbmVlZCB0byBiZSBlbWJlZGRlZCBpbiB0aGUgc3RyaW5nIHVzaW5nIGBgXG5gYDsgdGhlCitOb3RlIHRoYXQgbmV3bGluZXMgc3RpbGwgbmVlZCB0byBiZSBlbWJlZGRlZCBpbiB0aGUgc3RyaW5nIHVzaW5nIGBgXG5gYCAtLSB0aGUKIG5ld2xpbmUgZm9sbG93aW5nIHRoZSB0cmFpbGluZyBiYWNrc2xhc2ggaXMgZGlzY2FyZGVkLiAgVGhpcyBleGFtcGxlIHdvdWxkIHByaW50CiB0aGUgZm9sbG93aW5nOgogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QgYi9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKaW5kZXggNDg4NThmMy4uNmY1MTM1NyAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CisrKyBiL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdApAQCAtMzMyLDggKzMzMiw4IEBACiAgICAgJ2VudW1lcmF0ZScsICdldmFsJywgJ2V4ZWNmaWxlJywgJ2V4aXQnLCAnZmlsZScsICdmaWx0ZXInLCAnZmxvYXQnLAogICAgICdmcm96ZW5zZXQnLCAnZ2V0YXR0cicsICdnbG9iYWxzJywgJ2hhc2F0dHInLCAnaGFzaCcsICdoZWxwJywgJ2hleCcsCiAgICAgJ2lkJywgJ2lucHV0JywgJ2ludCcsICdpbnRlcm4nLCAnaXNpbnN0YW5jZScsICdpc3N1YmNsYXNzJywgJ2l0ZXInLAotICAgICdsZW4nLCAnbGljZW5zZScsICdsaXN0JywgJ2xvY2FscycsICdsb25nJywgJ21hcCcsICdtYXgnLCAnbWluJywKLSAgICAnb2JqZWN0JywgJ29jdCcsICdvcGVuJywgJ29yZCcsICdwb3cnLCAncHJvcGVydHknLCAncXVpdCcsICdyYW5nZScsCisgICAgJ2xlbicsICdsaWNlbnNlJywgJ2xpc3QnLCAnbG9jYWxzJywgJ2xvbmcnLCAnbWFwJywgJ21heCcsICdtZW1vcnl2aWV3JywKKyAgICAnbWluJywgJ29iamVjdCcsICdvY3QnLCAnb3BlbicsICdvcmQnLCAncG93JywgJ3Byb3BlcnR5JywgJ3F1aXQnLCAncmFuZ2UnLAogICAgICdyYXdfaW5wdXQnLCAncmVkdWNlJywgJ3JlbG9hZCcsICdyZXByJywgJ3JldmVyc2VkJywgJ3JvdW5kJywgJ3NldCcsCiAgICAgJ3NldGF0dHInLCAnc2xpY2UnLCAnc29ydGVkJywgJ3N0YXRpY21ldGhvZCcsICdzdHInLCAnc3VtJywgJ3N1cGVyJywKICAgICAndHVwbGUnLCAndHlwZScsICd1bmljaHInLCAndW5pY29kZScsICd2YXJzJywgJ3hyYW5nZScsICd6aXAnXQpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QgYi9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdAppbmRleCA5ZGVkZDk2Li44NDRmOGJjIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdApAQCAtMTQsMTEgKzE0LDExIEBACiBvcGVyYXRpbmcgc3lzdGVtOjoKIAogICAgPj4+IGltcG9ydCBvcwotICAgPj4+IG9zLnN5c3RlbSgndGltZSAwOjAyJykKLSAgIDAKICAgID4+PiBvcy5nZXRjd2QoKSAgICAgICMgUmV0dXJuIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgICAnQzpcXFB5dGhvbjI2JwotICAgPj4+IG9zLmNoZGlyKCcvc2VydmVyL2FjY2Vzc2xvZ3MnKQorICAgPj4+IG9zLmNoZGlyKCcvc2VydmVyL2FjY2Vzc2xvZ3MnKSAgICMgQ2hhbmdlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAgID4+PiBvcy5zeXN0ZW0oJ21rZGlyIHRvZGF5JykgICAjIFJ1biB0aGUgY29tbWFuZCBta2RpciBpbiB0aGUgc3lzdGVtIHNoZWxsCisgICAwCiAKIEJlIHN1cmUgdG8gdXNlIHRoZSBgYGltcG9ydCBvc2BgIHN0eWxlIGluc3RlYWQgb2YgYGBmcm9tIG9zIGltcG9ydCAqYGAuICBUaGlzCiB3aWxsIGtlZXAgOmZ1bmM6YG9zLm9wZW5gIGZyb20gc2hhZG93aW5nIHRoZSBidWlsdC1pbiA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24gd2hpY2gKQEAgLTcyLDcgKzcyLDcgQEAKIAogVGhlIDptb2Q6YGdldG9wdGAgbW9kdWxlIHByb2Nlc3NlcyAqc3lzLmFyZ3YqIHVzaW5nIHRoZSBjb252ZW50aW9ucyBvZiB0aGUgVW5peAogOmZ1bmM6YGdldG9wdGAgZnVuY3Rpb24uICBNb3JlIHBvd2VyZnVsIGFuZCBmbGV4aWJsZSBjb21tYW5kIGxpbmUgcHJvY2Vzc2luZyBpcwotcHJvdmlkZWQgYnkgdGhlIDptb2Q6YG9wdHBhcnNlYCBtb2R1bGUuCitwcm92aWRlZCBieSB0aGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZS4KIAogCiAuLiBfdHV0LXN0ZGVycjoKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdCBiL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdAppbmRleCBlZDU2MzY0Li41MTRkNTgzIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CkBAIC0zNjIsMTAgKzM2MiwxMyBAQAogYmVjb21lcyBzaWduaWZpY2FudCBpZiB0aGUgcmVzdWx0cyBhcmUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBjZW50OjoKIAogICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgKgotICAgPj4+IERlY2ltYWwoJzAuNzAnKSAqIERlY2ltYWwoJzEuMDUnKQorICAgPj4+IHggPSBEZWNpbWFsKCcwLjcwJykgKiBEZWNpbWFsKCcxLjA1JykKKyAgID4+PiB4CiAgICBEZWNpbWFsKCcwLjczNTAnKQotICAgPj4+IC43MCAqIDEuMDUKLSAgIDAuNzM0OTk5OTk5OTk5OTk5OTkKKyAgID4+PiB4LnF1YW50aXplKERlY2ltYWwoJzAuMDEnKSkgICMgcm91bmQgdG8gbmVhcmVzdCBjZW50CisgICBEZWNpbWFsKCcwLjc0JykKKyAgID4+PiByb3VuZCguNzAgKiAxLjA1LCAyKSAgICAgICAgICMgc2FtZSBjYWxjdWxhdGlvbiB3aXRoIGZsb2F0cworICAgMC43MwogCiBUaGUgOmNsYXNzOmBEZWNpbWFsYCByZXN1bHQga2VlcHMgYSB0cmFpbGluZyB6ZXJvLCBhdXRvbWF0aWNhbGx5IGluZmVycmluZyBmb3VyCiBwbGFjZSBzaWduaWZpY2FuY2UgZnJvbSBtdWx0aXBsaWNhbmRzIHdpdGggdHdvIHBsYWNlIHNpZ25pZmljYW5jZS4gIERlY2ltYWwKZGlmZiAtLWdpdCBhL0RvYy91c2luZy9jbWRsaW5lLnJzdCBiL0RvYy91c2luZy9jbWRsaW5lLnJzdAppbmRleCBiNDFkMjQ0Li5hMTBhYjFjIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvY21kbGluZS5yc3QKKysrIGIvRG9jL3VzaW5nL2NtZGxpbmUucnN0CkBAIC0xLDUgKzEsOCBAQAogLi4gaGlnaGxpZ2h0bGFuZzo6IG5vbmUKIAorLi4gQVRURU5USU9OOiBZb3UgcHJvYmFibHkgc2hvdWxkIHVwZGF0ZSBNaXNjL3B5dGhvbi5tYW4sIHRvbywgaWYgeW91IG1vZGlmeQorLi4gdGhpcyBmaWxlLgorCiAuLiBfdXNpbmctb24tZ2VuZXJhbDoKIAogQ29tbWFuZCBsaW5lIGFuZCBlbnZpcm9ubWVudApAQCAtNzgsNiArODEsMTIgQEAKICAgIHRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgbm90IGFsd2F5cyBlbmZvcmNlIHRoaXMgKGUuZy4gaXQgbWF5IGFsbG93IHlvdSB0bwogICAgdXNlIGEgbmFtZSB0aGF0IGluY2x1ZGVzIGEgaHlwaGVuKS4KIAorICAgUGFja2FnZSBuYW1lcyBhcmUgYWxzbyBwZXJtaXR0ZWQuIFdoZW4gYSBwYWNrYWdlIG5hbWUgaXMgc3VwcGxpZWQgaW5zdGVhZAorICAgb2YgYSBub3JtYWwgbW9kdWxlLCB0aGUgaW50ZXJwcmV0ZXIgd2lsbCBleGVjdXRlIGBgPHBrZz4uX19tYWluX19gYCBhcworICAgdGhlIG1haW4gbW9kdWxlLiBUaGlzIGJlaGF2aW91ciBpcyBkZWxpYmVyYXRlbHkgc2ltaWxhciB0byB0aGUgaGFuZGxpbmcKKyAgIG9mIGRpcmVjdG9yaWVzIGFuZCB6aXBmaWxlcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIGludGVycHJldGVyIGFzIHRoZQorICAgc2NyaXB0IGFyZ3VtZW50LgorCiAgICAuLiBub3RlOjoKIAogICAgICAgVGhpcyBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCBidWlsdC1pbiBtb2R1bGVzIGFuZCBleHRlbnNpb24gbW9kdWxlcwpAQCAtOTcsNyArMTA2LDcgQEAKIAogICAgLi4gc2VlYWxzbzo6CiAgICAgICA6ZnVuYzpgcnVucHkucnVuX21vZHVsZWAKLSAgICAgICAgIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmZWF0dXJlLgorICAgICAgICAgRXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5IGF2YWlsYWJsZSB0byBQeXRob24gY29kZQogCiAgICAgICA6cGVwOmAzMzhgIC0tIEV4ZWN1dGluZyBtb2R1bGVzIGFzIHNjcmlwdHMKIApAQCAtMTA2LDYgKzExNSwxMSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjUKICAgICAgIFRoZSBuYW1lZCBtb2R1bGUgY2FuIG5vdyBiZSBsb2NhdGVkIGluc2lkZSBhIHBhY2thZ2UuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBTdXBwbHkgdGhlIHBhY2thZ2UgbmFtZSB0byBydW4gYSBgYF9fbWFpbl9fYGAgc3VibW9kdWxlLgorICAgICAgc3lzLmFyZ3ZbMF0gaXMgbm93IHNldCB0byBgYCItbSJgYCB3aGlsZSBzZWFyY2hpbmcgZm9yIHRoZSBtb2R1bGUKKyAgICAgIChpdCB3YXMgcHJldmlvdXNseSBpbmNvcnJlY3RseSBzZXQgdG8gYGAiLWMiYGApCisKIAogLi4gZGVzY3JpYmU6OiAtCiAKQEAgLTMwMSw2ICszMTUsMTAgQEAKICAgIDpvcHRpb246YC1XYCBvcHRpb25zIGFyZSBpZ25vcmVkICh0aG91Z2gsIGEgd2FybmluZyBtZXNzYWdlIGlzIHByaW50ZWQgYWJvdXQKICAgIGludmFsaWQgb3B0aW9ucyB3aGVuIHRoZSBmaXJzdCB3YXJuaW5nIGlzIGlzc3VlZCkuCiAKKyAgIFN0YXJ0aW5nIGZyb20gUHl0aG9uIDIuNywgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBhbmQgaXRzIGRlc2NlbmRhbnRzCisgICBhcmUgaWdub3JlZCBieSBkZWZhdWx0LiAgVGhlIDpvcHRpb246YC1XZGAgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlLWVuYWJsZQorICAgdGhlbS4KKwogICAgV2FybmluZ3MgY2FuIGFsc28gYmUgY29udHJvbGxlZCBmcm9tIHdpdGhpbiBhIFB5dGhvbiBwcm9ncmFtIHVzaW5nIHRoZQogICAgOm1vZDpgd2FybmluZ3NgIG1vZHVsZS4KIApAQCAtMzMxLDcgKzM0OSw3IEBACiAgICB0aGUgcmVtYWluaW5nIGZpZWxkcy4gIEVtcHR5IGZpZWxkcyBtYXRjaCBhbGwgdmFsdWVzOyB0cmFpbGluZyBlbXB0eSBmaWVsZHMKICAgIG1heSBiZSBvbWl0dGVkLiAgVGhlICptZXNzYWdlKiBmaWVsZCBtYXRjaGVzIHRoZSBzdGFydCBvZiB0aGUgd2FybmluZyBtZXNzYWdlCiAgICBwcmludGVkOyB0aGlzIG1hdGNoIGlzIGNhc2UtaW5zZW5zaXRpdmUuICBUaGUgKmNhdGVnb3J5KiBmaWVsZCBtYXRjaGVzIHRoZQotICAgd2FybmluZyBjYXRlZ29yeS4gIFRoaXMgbXVzdCBiZSBhIGNsYXNzIG5hbWU7IHRoZSBtYXRjaCB0ZXN0IHdoZXRoZXIgdGhlCisgICB3YXJuaW5nIGNhdGVnb3J5LiAgVGhpcyBtdXN0IGJlIGEgY2xhc3MgbmFtZTsgdGhlIG1hdGNoIHRlc3RzIHdoZXRoZXIgdGhlCiAgICBhY3R1YWwgd2FybmluZyBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBzcGVjaWZpZWQgd2FybmluZwogICAgY2F0ZWdvcnkuICBUaGUgZnVsbCBjbGFzcyBuYW1lIG11c3QgYmUgZ2l2ZW4uICBUaGUgKm1vZHVsZSogZmllbGQgbWF0Y2hlcyB0aGUKICAgIChmdWxseS1xdWFsaWZpZWQpIG1vZHVsZSBuYW1lOyB0aGlzIG1hdGNoIGlzIGNhc2Utc2Vuc2l0aXZlLiAgVGhlICpsaW5lKgpAQCAtMzQzLDYgKzM2MSw4IEBACiAKICAgICAgIDpwZXA6YDIzMGAgLS0gV2FybmluZyBmcmFtZXdvcmsKIAorICAgICAgOmVudnZhcjpgUFlUSE9OV0FSTklOR1NgCisKIAogLi4gY21kb3B0aW9uOjogLXgKIApAQCAtNTM4LDYgKzU1OCwxMiBAQAogICAgdmFsdWUgaW5zdGVhZCBvZiB0aGUgdmFsdWUgZ290IHRocm91Z2ggdGhlIEMgcnVudGltZS4gIE9ubHkgd29ya3Mgb24KICAgIE1hYyBPUyBYLgogCisuLiBlbnZ2YXI6OiBQWVRIT05XQVJOSU5HUworCisgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIDpvcHRpb246YC1XYCBvcHRpb24uIElmIHNldCB0byBhIGNvbW1hCisgICBzZXBhcmF0ZWQgc3RyaW5nLCBpdCBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgOm9wdGlvbjpgLVdgIG11bHRpcGxlCisgICB0aW1lcy4KKwogCiBEZWJ1Zy1tb2RlIHZhcmlhYmxlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn4KZGlmZiAtLWdpdCBhL0RvYy91c2luZy9pbmRleC5yc3QgYi9Eb2MvdXNpbmcvaW5kZXgucnN0CmluZGV4IDZjZTVhMDAuLjEyMDExNTMgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy9pbmRleC5yc3QKKysrIGIvRG9jL3VzaW5nL2luZGV4LnJzdApAQCAtMSw4ICsxLDggQEAKIC4uIF91c2luZy1pbmRleDoKIAotIyMjIyMjIyMjIyMjIyMjIwotICBVc2luZyBQeXRob24KLSMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIFB5dGhvbiBTZXR1cCBhbmQgVXNhZ2UKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIAogVGhpcyBwYXJ0IG9mIHRoZSBkb2N1bWVudGF0aW9uIGlzIGRldm90ZWQgdG8gZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiB0aGUgc2V0dXAKZGlmZiAtLWdpdCBhL0RvYy91c2luZy9tYWMucnN0IGIvRG9jL3VzaW5nL21hYy5yc3QKaW5kZXggMThiZmI4Mi4uYzVmN2YyZCAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL21hYy5yc3QKKysrIGIvRG9jL3VzaW5nL21hYy5yc3QKQEAgLTEyMiw4ICsxMjIsOCBAQAogPT09PT09PQogCiBNYWNQeXRob24gc2hpcHMgd2l0aCB0aGUgc3RhbmRhcmQgSURMRSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4gQSBnb29kCi1pbnRyb2R1Y3Rpb24gdG8gdXNpbmcgSURMRSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL2hrbi5lZWNzLmJlcmtlbGV5LmVkdS8KLWR5b28vcHl0aG9uL2lkbGVfaW50cm8vaW5kZXguaHRtbC4KK2ludHJvZHVjdGlvbiB0byB1c2luZyBJRExFIGNhbiBiZSBmb3VuZCBhdAoraHR0cDovL2hrbi5lZWNzLmJlcmtlbGV5LmVkdS9+ZHlvby9weXRob24vaWRsZV9pbnRyby9pbmRleC5odG1sLgogCiAKIC4uIF9tYWMtcGFja2FnZS1tYW5hZ2VyOgpkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL3dpbmRvd3MucnN0IGIvRG9jL3VzaW5nL3dpbmRvd3MucnN0CmluZGV4IDUyMzQ5ZDcuLjhhOTFlZjcgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy93aW5kb3dzLnJzdAorKysgYi9Eb2MvdXNpbmcvd2luZG93cy5yc3QKQEAgLTE1OCwyMyArMTU4LDQ4IEBACiA6ZmlsZTpgQzpcXFB5dGhvblxcTGliXFxgIGFuZCB0aGlyZC1wYXJ0eSBtb2R1bGVzIHNob3VsZCBiZSBzdG9yZWQgaW4KIDpmaWxlOmBDOlxcUHl0aG9uXFxMaWJcXHNpdGUtcGFja2FnZXNcXGAuCiAKLS4uIGBgIHRoaXMgZml4ZXMgc3ludGF4IGhpZ2hsaWdodGluZyBlcnJvcnMgaW4gc29tZSBlZGl0b3JzIGR1ZSB0byB0aGUgXFwgaGFja2VyeQorVGhpcyBpcyBob3cgOmRhdGE6YHN5cy5wYXRoYCBpcyBwb3B1bGF0ZWQgb24gV2luZG93czoKIAotWW91IGNhbiBhZGQgZm9sZGVycyB0byB5b3VyIHNlYXJjaCBwYXRoIHRvIG1ha2UgUHl0aG9uJ3MgaW1wb3J0IG1lY2hhbmlzbSBzZWFyY2gKLWluIHRoZXNlIGRpcmVjdG9yaWVzIGFzIHdlbGwuICBVc2UgOmVudnZhcjpgUFlUSE9OUEFUSGAsIGFzIGRlc2NyaWJlZCBpbgotOnJlZjpgdXNpbmctb24tZW52dmFyc2AsIHRvIG1vZGlmeSA6ZGF0YTpgc3lzLnBhdGhgLiAgT24gV2luZG93cywgcGF0aHMgYXJlCi1zZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucywgdGhvdWdoLCB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gZHJpdmUgaWRlbnRpZmllcnMKLSg6ZmlsZTpgQzpcXGAgZXRjLikuCisqIEFuIGVtcHR5IGVudHJ5IGlzIGFkZGVkIGF0IHRoZSBzdGFydCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQKKyAgZGlyZWN0b3J5LgogCi0uLiBgYAorKiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgOmVudnZhcjpgUFlUSE9OUEFUSGAgZXhpc3RzLCBhcyBkZXNjcmliZWQgaW4KKyAgOnJlZjpgdXNpbmctb24tZW52dmFyc2AsIGl0cyBlbnRyaWVzIGFyZSBhZGRlZCBuZXh0LiAgTm90ZSB0aGF0IG9uIFdpbmRvd3MsCisgIHBhdGhzIGluIHRoaXMgdmFyaWFibGUgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucywgdG8gZGlzdGluZ3Vpc2ggdGhlbQorICBmcm9tIHRoZSBjb2xvbiB1c2VkIGluIGRyaXZlIGlkZW50aWZpZXJzIChgYEM6XGBgIGV0Yy4pLgogCi1Nb2RpZnlpbmcgdGhlIG1vZHVsZSBzZWFyY2ggcGF0aCBjYW4gYWxzbyBiZSBkb25lIHRocm91Z2ggdGhlIFdpbmRvd3MgcmVnaXN0cnkKLXVuZGVyIHRoZSBrZXkgOmZpbGU6YEhLTE1cXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXHt2ZXJzaW9ufVxcUHl0aG9uUGF0aGAuCi1TdWJrZXlzIHdoaWNoIGhhdmUgc2VtaWNvbG9uLWRlbGltaXRlZCBwYXRoIHN0cmluZ3MgYXMgdGhlaXIgZGVmYXVsdCB2YWx1ZSB3aWxsCi1jYXVzZSBlYWNoIHBhdGggdG8gYmUgc2VhcmNoZWQuICBNdWx0aXBsZSBzdWJrZXlzIGNhbiBiZSBjcmVhdGVkIGFuZCBhcmUKLWFwcGVuZGVkIHRvIHRoZSBwYXRoIGluIGFscGhhYmV0aWNhbCBvcmRlci4gIEEgY29udmVuaWVudCByZWdpc3RyeSBlZGl0b3IgaXMKLTpwcm9ncmFtOmByZWdlZGl0YCAoc3RhcnQgaXQgYnkgdHlwaW5nICJyZWdlZGl0IiBpbnRvIDptZW51c2VsZWN0aW9uOmBTdGFydCAtLT4KLVJ1bmApLgorKiBBZGRpdGlvbmFsICJhcHBsaWNhdGlvbiBwYXRocyIgY2FuIGJlIGFkZGVkIGluIHRoZSByZWdpc3RyeSBhcyBzdWJrZXlzIG9mCisgIDpzYW1wOmBcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXHt2ZXJzaW9ufVxcUHl0aG9uUGF0aGAgdW5kZXIgYm90aCB0aGUKKyAgYGBIS0VZX0NVUlJFTlRfVVNFUmBgIGFuZCBgYEhLRVlfTE9DQUxfTUFDSElORWBgIGhpdmVzLiAgU3Via2V5cyB3aGljaCBoYXZlCisgIHNlbWljb2xvbi1kZWxpbWl0ZWQgcGF0aCBzdHJpbmdzIGFzIHRoZWlyIGRlZmF1bHQgdmFsdWUgd2lsbCBjYXVzZSBlYWNoIHBhdGgKKyAgdG8gYmUgYWRkZWQgdG8gOmRhdGE6YHN5cy5wYXRoYC4gIChOb3RlIHRoYXQgYWxsIGtub3duIGluc3RhbGxlcnMgb25seSB1c2UKKyAgSEtMTSwgc28gSEtDVSBpcyB0eXBpY2FsbHkgZW1wdHkuKQorCisqIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA6ZW52dmFyOmBQWVRIT05IT01FYCBpcyBzZXQsIGl0IGlzIGFzc3VtZWQgYXMKKyAgIlB5dGhvbiBIb21lIi4gIE90aGVyd2lzZSwgdGhlIHBhdGggb2YgdGhlIG1haW4gUHl0aG9uIGV4ZWN1dGFibGUgaXMgdXNlZCB0bworICBsb2NhdGUgYSAibGFuZG1hcmsgZmlsZSIgKGBgTGliXG9zLnB5YGApIHRvIGRlZHVjZSB0aGUgIlB5dGhvbiBIb21lIi4gIElmIGEKKyAgUHl0aG9uIGhvbWUgaXMgZm91bmQsIHRoZSByZWxldmFudCBzdWItZGlyZWN0b3JpZXMgYWRkZWQgdG8gOmRhdGE6YHN5cy5wYXRoYAorICAoYGBMaWJgYCwgYGBwbGF0LXdpbmBgLCBldGMpIGFyZSBiYXNlZCBvbiB0aGF0IGZvbGRlci4gIE90aGVyd2lzZSwgdGhlIGNvcmUKKyAgUHl0aG9uIHBhdGggaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgUHl0aG9uUGF0aCBzdG9yZWQgaW4gdGhlIHJlZ2lzdHJ5LgorCisqIElmIHRoZSBQeXRob24gSG9tZSBjYW5ub3QgYmUgbG9jYXRlZCwgbm8gOmVudnZhcjpgUFlUSE9OUEFUSGAgaXMgc3BlY2lmaWVkIGluCisgIHRoZSBlbnZpcm9ubWVudCwgYW5kIG5vIHJlZ2lzdHJ5IGVudHJpZXMgY2FuIGJlIGZvdW5kLCBhIGRlZmF1bHQgcGF0aCB3aXRoCisgIHJlbGF0aXZlIGVudHJpZXMgaXMgdXNlZCAoZS5nLiBgYC5cTGliOy5ccGxhdC13aW5gYCwgZXRjKS4KKworVGhlIGVuZCByZXN1bHQgb2YgYWxsIHRoaXMgaXM6CisKKyogV2hlbiBydW5uaW5nIDpmaWxlOmBweXRob24uZXhlYCwgb3IgYW55IG90aGVyIC5leGUgaW4gdGhlIG1haW4gUHl0aG9uCisgIGRpcmVjdG9yeSAoZWl0aGVyIGFuIGluc3RhbGxlZCB2ZXJzaW9uLCBvciBkaXJlY3RseSBmcm9tIHRoZSBQQ2J1aWxkCisgIGRpcmVjdG9yeSksIHRoZSBjb3JlIHBhdGggaXMgZGVkdWNlZCwgYW5kIHRoZSBjb3JlIHBhdGhzIGluIHRoZSByZWdpc3RyeSBhcmUKKyAgaWdub3JlZC4gIE90aGVyICJhcHBsaWNhdGlvbiBwYXRocyIgaW4gdGhlIHJlZ2lzdHJ5IGFyZSBhbHdheXMgcmVhZC4KKworKiBXaGVuIFB5dGhvbiBpcyBob3N0ZWQgaW4gYW5vdGhlciAuZXhlIChkaWZmZXJlbnQgZGlyZWN0b3J5LCBlbWJlZGRlZCB2aWEgQ09NLAorICBldGMpLCB0aGUgIlB5dGhvbiBIb21lIiB3aWxsIG5vdCBiZSBkZWR1Y2VkLCBzbyB0aGUgY29yZSBwYXRoIGZyb20gdGhlCisgIHJlZ2lzdHJ5IGlzIHVzZWQuICBPdGhlciAiYXBwbGljYXRpb24gcGF0aHMiIGluIHRoZSByZWdpc3RyeSBhcmUgYWx3YXlzIHJlYWQuCisKKyogSWYgUHl0aG9uIGNhbid0IGZpbmQgaXRzIGhvbWUgYW5kIHRoZXJlIGlzIG5vIHJlZ2lzdHJ5IChlZywgZnJvemVuIC5leGUsIHNvbWUKKyAgdmVyeSBzdHJhbmdlIGluc3RhbGxhdGlvbiBzZXR1cCkgeW91IGdldCBhIHBhdGggd2l0aCBzb21lIGRlZmF1bHQsIGJ1dAorICByZWxhdGl2ZSwgcGF0aHMuCiAKIAogRXhlY3V0aW5nIHNjcmlwdHMKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjQucnN0IGIvRG9jL3doYXRzbmV3LzIuNC5yc3QKaW5kZXggMjdlNDEyZS4uZmFkZGU1MCAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuNC5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuNC5yc3QKQEAgLTEwNjYsNyArMTA2Niw3IEBACiAgIGRlcHJlY2F0ZWQgQVBJcyBhbmQgcmVtb3ZlcyBzdXBwb3J0IGZvciBQeXRob24gdmVyc2lvbnMgZWFybGllciB0aGFuIDIuMy4gIFRoZQogICAzLjAgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSB1c2VzIGEgbmV3IGluY3JlbWVudGFsIHBhcnNlciBmb3IgTUlNRSBtZXNzYWdlcywKICAgYXZhaWxhYmxlIGluIHRoZSA6bW9kOmBlbWFpbC5GZWVkUGFyc2VyYCBtb2R1bGUuICBUaGUgbmV3IHBhcnNlciBkb2Vzbid0IHJlcXVpcmUKLSAgcmVhZGluZyB0aGUgZW50aXJlIG1lc3NhZ2UgaW50byBtZW1vcnksIGFuZCBkb2Vzbid0IHRocm93IGV4Y2VwdGlvbnMgaWYgYQorICByZWFkaW5nIHRoZSBlbnRpcmUgbWVzc2FnZSBpbnRvIG1lbW9yeSwgYW5kIGRvZXNuJ3QgcmFpc2UgZXhjZXB0aW9ucyBpZiBhCiAgIG1lc3NhZ2UgaXMgbWFsZm9ybWVkOyBpbnN0ZWFkIGl0IHJlY29yZHMgYW55IHByb2JsZW1zIGluIHRoZSAgOmF0dHI6YGRlZmVjdGAKICAgYXR0cmlidXRlIG9mIHRoZSBtZXNzYWdlLiAgKERldmVsb3BlZCBieSBBbnRob255IEJheHRlciwgQmFycnkgV2Fyc2F3LCBUaG9tYXMKICAgV291dGVycywgYW5kIG90aGVycy4pCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi42LnJzdCBiL0RvYy93aGF0c25ldy8yLjYucnN0CmluZGV4IGRhMTI1NmMuLmNjYzk3YjggMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjYucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjYucnN0CkBAIC0yOTkyLDMzICsyOTkyLDYgQEAKICAgYXJjaGl0ZWN0dXJlcyAoeDg2LCBQb3dlclBDKSwgNjQtYml0ICh4ODYtNjQgYW5kIFBQQy02NCksIG9yIGJvdGguCiAgIChDb250cmlidXRlZCBieSBSb25hbGQgT3Vzc29yZW4uKQogCi0qIEEgbmV3IGZ1bmN0aW9uIGFkZGVkIGluIFB5dGhvbiAyLjYuNiwgOmNmdW5jOmBQeVN5c19TZXRBcmd2RXhgLCBzZXRzCi0gIHRoZSB2YWx1ZSBvZiBgYHN5cy5hcmd2YGAgYW5kIGNhbiBvcHRpb25hbGx5IHVwZGF0ZSBgYHN5cy5wYXRoYGAgdG8KLSAgaW5jbHVkZSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNjcmlwdCBuYW1lZCBieSBgYHN5cy5hcmd2WzBdYGAKLSAgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBhbiAqdXBkYXRlcGF0aCogcGFyYW1ldGVyLgotCi0gIFRoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGNsb3NlIGEgc2VjdXJpdHkgaG9sZSBmb3IgYXBwbGljYXRpb25zCi0gIHRoYXQgZW1iZWQgUHl0aG9uLiAgVGhlIG9sZCBmdW5jdGlvbiwgOmNmdW5jOmBQeVN5c19TZXRBcmd2YCwgd291bGQKLSAgYWx3YXlzIHVwZGF0ZSBgYHN5cy5wYXRoYGAsIGFuZCBzb21ldGltZXMgaXQgd291bGQgYWRkIHRoZSBjdXJyZW50Ci0gIGRpcmVjdG9yeS4gIFRoaXMgbWVhbnQgdGhhdCwgaWYgeW91IHJhbiBhbiBhcHBsaWNhdGlvbiBlbWJlZGRpbmcKLSAgUHl0aG9uIGluIGEgZGlyZWN0b3J5IGNvbnRyb2xsZWQgYnkgc29tZW9uZSBlbHNlLCBhdHRhY2tlcnMgY291bGQKLSAgcHV0IGEgVHJvamFuLWhvcnNlIG1vZHVsZSBpbiB0aGUgZGlyZWN0b3J5IChzYXksIGEgZmlsZSBuYW1lZAotICA6ZmlsZTpgb3MucHlgKSB0aGF0IHlvdXIgYXBwbGljYXRpb24gd291bGQgdGhlbiBpbXBvcnQgYW5kIHJ1bi4KLQotICBJZiB5b3UgbWFpbnRhaW4gYSBDL0MrKyBhcHBsaWNhdGlvbiB0aGF0IGVtYmVkcyBQeXRob24sIGNoZWNrCi0gIHdoZXRoZXIgeW91J3JlIGNhbGxpbmcgOmNmdW5jOmBQeVN5c19TZXRBcmd2YCBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyCi0gIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBiZSB1c2luZyA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZFeGAKLSAgd2l0aCAqdXBkYXRlcGF0aCogc2V0IHRvIGZhbHNlLiAgTm90ZSB0aGF0IHVzaW5nIHRoaXMgZnVuY3Rpb24gd2lsbAotICBicmVhayBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIHZlcnNpb25zIDIuNi41IGFuZCBlYXJsaWVyOyBpZiB5b3UKLSAgaGF2ZSB0byBjb250aW51ZSB3b3JraW5nIHdpdGggZWFybGllciB2ZXJzaW9ucywgeW91IGNhbiBsZWF2ZQotICB0aGUgY2FsbCB0byA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZgIGFsb25lIGFuZCBjYWxsCi0gIGBgUHlSdW5fU2ltcGxlU3RyaW5nKCJzeXMucGF0aC5wb3AoMClcbiIpYGAgYWZ0ZXJ3YXJkcyB0byBkaXNjYXJkCi0gIHRoZSBmaXJzdCBgYHN5cy5wYXRoYGAgY29tcG9uZW50LgotCi0gIFNlY3VyaXR5IGlzc3VlIHJlcG9ydGVkIGFzIGBDVkUtMjAwOC01OTgzCi0gIDxodHRwOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDgtNTk4Mz5gXzsKLSAgZGlzY3Vzc2VkIGluIDppc3N1ZTpgNTc1M2AsIGFuZCBmaXhlZCBieSBBbnRvaW5lIFBpdHJvdS4KLQogKiBUaGUgQmVya2VsZXlEQiBtb2R1bGUgbm93IGhhcyBhIEMgQVBJIG9iamVjdCwgYXZhaWxhYmxlIGFzCiAgIGBgYnNkZGIuZGIuYXBpYGAuICAgVGhpcyBvYmplY3QgY2FuIGJlIHVzZWQgYnkgb3RoZXIgQyBleHRlbnNpb25zCiAgIHRoYXQgd2lzaCB0byB1c2UgdGhlIDptb2Q6YGJzZGRiYCBtb2R1bGUgZm9yIHRoZWlyIG93biBwdXJwb3Nlcy4KQEAgLTMzMjEsMTUgKzMyOTQsNiBAQAogICBzY29waW5nIHJ1bGVzLCBhbHNvIGNhdXNlIHdhcm5pbmdzIGJlY2F1c2Ugc3VjaCBjb21wYXJpc29ucyBhcmUgZm9yYmlkZGVuCiAgIGVudGlyZWx5IGluIDMuMC4KIAotRm9yIGFwcGxpY2F0aW9ucyB0aGF0IGVtYmVkIFB5dGhvbjoKLQotKiBUaGUgOmNmdW5jOmBQeVN5c19TZXRBcmd2RXhgIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBQeXRob24gMi42LjYsCi0gIGxldHRpbmcgYXBwbGljYXRpb25zIGNsb3NlIGEgc2VjdXJpdHkgaG9sZSB3aGVuIHRoZSBleGlzdGluZwotICA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZgIGZ1bmN0aW9uIHdhcyB1c2VkLiAgQ2hlY2sgd2hldGhlciB5b3UncmUKLSAgY2FsbGluZyA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZgIGFuZCBjYXJlZnVsbHkgY29uc2lkZXIgd2hldGhlciB0aGUKLSAgYXBwbGljYXRpb24gc2hvdWxkIGJlIHVzaW5nIDpjZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoCi0gICp1cGRhdGVwYXRoKiBzZXQgdG8gZmFsc2UuCi0KIC4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi43LnJzdCBiL0RvYy93aGF0c25ldy8yLjcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDNhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2Mvd2hhdHNuZXcvMi43LnJzdApAQCAtMCwwICsxLDI0NzUgQEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgV2hhdCdzIE5ldyBpbiBQeXRob24gMi43CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKzpBdXRob3I6IEEuTS4gS3VjaGxpbmcgKGFtayBhdCBhbWsuY2EpCis6UmVsZWFzZTogfHJlbGVhc2V8Cis6RGF0ZTogfHRvZGF5fAorCisuLiAgaHlwZXJsaW5rIGFsbCB0aGUgbWV0aG9kcyAmIGZ1bmN0aW9ucy4KKworLi4gVF9TVFJJTkdfSU5QTEFDRSBub3QgZGVzY3JpYmVkIGluIG1haW4gZG9jcworCisuLiAkSWQkCisgICBSdWxlcyBmb3IgbWFpbnRlbmFuY2U6CisKKyAgICogQW55b25lIGNhbiBhZGQgdGV4dCB0byB0aGlzIGRvY3VtZW50LiAgRG8gbm90IHNwZW5kIHZlcnkgbXVjaCB0aW1lCisgICBvbiB0aGUgd29yZGluZyBvZiB5b3VyIGNoYW5nZXMsIGJlY2F1c2UgeW91ciB0ZXh0IHdpbGwgcHJvYmFibHkKKyAgIGdldCByZXdyaXR0ZW4gdG8gc29tZSBkZWdyZWUuCisKKyAgICogVGhlIG1haW50YWluZXIgd2lsbCBnbyB0aHJvdWdoIE1pc2MvTkVXUyBwZXJpb2RpY2FsbHkgYW5kIGFkZAorICAgY2hhbmdlczsgaXQncyB0aGVyZWZvcmUgbW9yZSBpbXBvcnRhbnQgdG8gYWRkIHlvdXIgY2hhbmdlcyB0bworICAgTWlzYy9ORVdTIHRoYW4gdG8gdGhpcyBmaWxlLgorCisgICAqIFRoaXMgaXMgbm90IGEgY29tcGxldGUgbGlzdCBvZiBldmVyeSBzaW5nbGUgY2hhbmdlOyBjb21wbGV0ZW5lc3MKKyAgIGlzIHRoZSBwdXJwb3NlIG9mIE1pc2MvTkVXUy4gIFNvbWUgY2hhbmdlcyBJIGNvbnNpZGVyIHRvbyBzbWFsbAorICAgb3IgZXNvdGVyaWMgdG8gaW5jbHVkZS4gIElmIHN1Y2ggYSBjaGFuZ2UgaXMgYWRkZWQgdG8gdGhlIHRleHQsCisgICBJJ2xsIGp1c3QgcmVtb3ZlIGl0LiAgKFRoaXMgaXMgYW5vdGhlciByZWFzb24geW91IHNob3VsZG4ndCBzcGVuZAorICAgdG9vIG11Y2ggdGltZSBvbiB3cml0aW5nIHlvdXIgYWRkaXRpb24uKQorCisgICAqIElmIHlvdSB3YW50IHRvIGRyYXcgeW91ciBuZXcgdGV4dCB0byB0aGUgYXR0ZW50aW9uIG9mIHRoZQorICAgbWFpbnRhaW5lciwgYWRkICdYWFgnIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcmFncmFwaCBvcgorICAgc2VjdGlvbi4KKworICAgKiBJdCdzIE9LIHRvIGp1c3QgYWRkIGEgZnJhZ21lbnRhcnkgbm90ZSBhYm91dCBhIGNoYW5nZS4gIEZvcgorICAgZXhhbXBsZTogIlhYWCBEZXNjcmliZSB0aGUgdHJhbnNtb2dyaWZ5KCkgZnVuY3Rpb24gYWRkZWQgdG8gdGhlCisgICBzb2NrZXQgbW9kdWxlLiIgIFRoZSBtYWludGFpbmVyIHdpbGwgcmVzZWFyY2ggdGhlIGNoYW5nZSBhbmQKKyAgIHdyaXRlIHRoZSBuZWNlc3NhcnkgdGV4dC4KKworICAgKiBZb3UgY2FuIGNvbW1lbnQgb3V0IHlvdXIgYWRkaXRpb25zIGlmIHlvdSBsaWtlLCBidXQgaXQncyBub3QKKyAgIG5lY2Vzc2FyeSAoZXNwZWNpYWxseSB3aGVuIGEgZmluYWwgcmVsZWFzZSBpcyBzb21lIG1vbnRocyBhd2F5KS4KKworICAgKiBDcmVkaXQgdGhlIGF1dGhvciBvZiBhIHBhdGNoIG9yIGJ1Z2ZpeC4gIEp1c3QgdGhlIG5hbWUgaXMKKyAgIHN1ZmZpY2llbnQ7IHRoZSBlLW1haWwgYWRkcmVzcyBpc24ndCBuZWNlc3NhcnkuCisKKyAgICogSXQncyBoZWxwZnVsIHRvIGFkZCB0aGUgYnVnL3BhdGNoIG51bWJlciBpbiBhIHBhcmVudGhldGljYWwgY29tbWVudC4KKworICAgWFhYIERlc2NyaWJlIHRoZSB0cmFuc21vZ3JpZnkoKSBmdW5jdGlvbiBhZGRlZCB0byB0aGUgc29ja2V0CisgICBtb2R1bGUuCisgICAoQ29udHJpYnV0ZWQgYnkgUC5ZLiBEZXZlbG9wZXI7IDppc3N1ZTpgMTIzNDVgLikKKworICAgVGhpcyBzYXZlcyB0aGUgbWFpbnRhaW5lciBzb21lIGVmZm9ydCBnb2luZyB0aHJvdWdoIHRoZSBTVk4gbG9ncworICAgd2hlbiByZXNlYXJjaGluZyBhIGNoYW5nZS4KKworVGhpcyBhcnRpY2xlIGV4cGxhaW5zIHRoZSBuZXcgZmVhdHVyZXMgaW4gUHl0aG9uIDIuNy4gIFB5dGhvbiAyLjcgd2FzIHJlbGVhc2VkCitvbiBKdWx5IDMsIDIwMTAuCisKK051bWVyaWMgaGFuZGxpbmcgaGFzIGJlZW4gaW1wcm92ZWQgaW4gbWFueSB3YXlzLCBmb3IgYm90aAorZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhbmQgZm9yIHRoZSA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIGNsYXNzLgorVGhlcmUgYXJlIHNvbWUgdXNlZnVsIGFkZGl0aW9ucyB0byB0aGUgc3RhbmRhcmQgbGlicmFyeSwgc3VjaCBhcyBhCitncmVhdGx5IGVuaGFuY2VkIDptb2Q6YHVuaXR0ZXN0YCBtb2R1bGUsIHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlCitmb3IgcGFyc2luZyBjb21tYW5kLWxpbmUgb3B0aW9ucywgY29udmVuaWVudCA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAKK2FuZCA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5Db3VudGVyYCBjbGFzc2VzIGluIHRoZSA6bW9kOmBjb2xsZWN0aW9uc2AgbW9kdWxlLAorYW5kIG1hbnkgb3RoZXIgaW1wcm92ZW1lbnRzLgorCitQeXRob24gMi43IGlzIHBsYW5uZWQgdG8gYmUgdGhlIGxhc3Qgb2YgdGhlIDIueCByZWxlYXNlcywgc28gd2Ugd29ya2VkCitvbiBtYWtpbmcgaXQgYSBnb29kIHJlbGVhc2UgZm9yIHRoZSBsb25nIHRlcm0uICBUbyBoZWxwIHdpdGggcG9ydGluZwordG8gUHl0aG9uIDMsIHNldmVyYWwgbmV3IGZlYXR1cmVzIGZyb20gdGhlIFB5dGhvbiAzLnggc2VyaWVzIGhhdmUgYmVlbgoraW5jbHVkZWQgaW4gMi43LgorCitUaGlzIGFydGljbGUgZG9lc24ndCBhdHRlbXB0IHRvIHByb3ZpZGUgYSBjb21wbGV0ZSBzcGVjaWZpY2F0aW9uIG9mCit0aGUgbmV3IGZlYXR1cmVzLCBidXQgaW5zdGVhZCBwcm92aWRlcyBhIGNvbnZlbmllbnQgb3ZlcnZpZXcuICBGb3IKK2Z1bGwgZGV0YWlscywgeW91IHNob3VsZCByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDIuNyBhdAoraHR0cDovL2RvY3MucHl0aG9uLm9yZy4gSWYgeW91IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGZvcgordGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24sIHJlZmVyIHRvIHRoZSBQRVAgZm9yIGEgcGFydGljdWxhciBuZXcKK2ZlYXR1cmUgb3IgdGhlIGlzc3VlIG9uIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcgaW4gd2hpY2ggYSBjaGFuZ2Ugd2FzCitkaXNjdXNzZWQuICBXaGVuZXZlciBwb3NzaWJsZSwgIldoYXQncyBOZXcgaW4gUHl0aG9uIiBsaW5rcyB0byB0aGUKK2J1Zy9wYXRjaCBpdGVtIGZvciBlYWNoIGNoYW5nZS4KKworLi4gX3doYXRzbmV3MjctcHl0aG9uMzE6CisKK1RoZSBGdXR1cmUgZm9yIFB5dGhvbiAyLngKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworUHl0aG9uIDIuNyBpcyBpbnRlbmRlZCB0byBiZSB0aGUgbGFzdCBtYWpvciByZWxlYXNlIGluIHRoZSAyLnggc2VyaWVzLgorVGhlIFB5dGhvbiBtYWludGFpbmVycyBhcmUgcGxhbm5pbmcgdG8gZm9jdXMgdGhlaXIgZnV0dXJlIGVmZm9ydHMgb24KK3RoZSBQeXRob24gMy54IHNlcmllcy4KKworVGhpcyBtZWFucyB0aGF0IDIuNyB3aWxsIHJlbWFpbiBpbiBwbGFjZSBmb3IgYSBsb25nIHRpbWUsIHJ1bm5pbmcKK3Byb2R1Y3Rpb24gc3lzdGVtcyB0aGF0IGhhdmUgbm90IGJlZW4gcG9ydGVkIHRvIFB5dGhvbiAzLnguCitUd28gY29uc2VxdWVuY2VzIG9mIHRoZSBsb25nLXRlcm0gc2lnbmlmaWNhbmNlIG9mIDIuNyBhcmU6CisKKyogSXQncyB2ZXJ5IGxpa2VseSB0aGUgMi43IHJlbGVhc2Ugd2lsbCBoYXZlIGEgbG9uZ2VyIHBlcmlvZCBvZgorICBtYWludGVuYW5jZSBjb21wYXJlZCB0byBlYXJsaWVyIDIueCB2ZXJzaW9ucy4gIFB5dGhvbiAyLjcgd2lsbAorICBjb250aW51ZSB0byBiZSBtYWludGFpbmVkIHdoaWxlIHRoZSB0cmFuc2l0aW9uIHRvIDMueCBjb250aW51ZXMsIGFuZAorICB0aGUgZGV2ZWxvcGVycyBhcmUgcGxhbm5pbmcgdG8gc3VwcG9ydCBQeXRob24gMi43IHdpdGggYnVnLWZpeAorICByZWxlYXNlcyBiZXlvbmQgdGhlIHR5cGljYWwgdHdvIHllYXJzLgorCisqIEEgcG9saWN5IGRlY2lzaW9uIHdhcyBtYWRlIHRvIHNpbGVuY2Ugd2FybmluZ3Mgb25seSBvZiBpbnRlcmVzdCB0bworICBkZXZlbG9wZXJzLiAgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBhbmQgaXRzCisgIGRlc2NlbmRhbnRzIGFyZSBub3cgaWdub3JlZCB1bmxlc3Mgb3RoZXJ3aXNlIHJlcXVlc3RlZCwgcHJldmVudGluZworICB1c2VycyBmcm9tIHNlZWluZyB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgYW4gYXBwbGljYXRpb24uICBUaGlzIGNoYW5nZQorICB3YXMgYWxzbyBtYWRlIGluIHRoZSBicmFuY2ggdGhhdCB3aWxsIGJlY29tZSBQeXRob24gMy4yLiAoRGlzY3Vzc2VkCisgIG9uIHN0ZGxpYi1zaWcgYW5kIGNhcnJpZWQgb3V0IGluIDppc3N1ZTpgNzMxOWAuKQorCisgIEluIHByZXZpb3VzIHJlbGVhc2VzLCA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIG1lc3NhZ2VzIHdlcmUKKyAgZW5hYmxlZCBieSBkZWZhdWx0LCBwcm92aWRpbmcgUHl0aG9uIGRldmVsb3BlcnMgd2l0aCBhIGNsZWFyCisgIGluZGljYXRpb24gb2Ygd2hlcmUgdGhlaXIgY29kZSBtYXkgYnJlYWsgaW4gYSBmdXR1cmUgbWFqb3IgdmVyc2lvbgorICBvZiBQeXRob24uCisKKyAgSG93ZXZlciwgdGhlcmUgYXJlIGluY3JlYXNpbmdseSBtYW55IHVzZXJzIG9mIFB5dGhvbi1iYXNlZAorICBhcHBsaWNhdGlvbnMgd2hvIGFyZSBub3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRldmVsb3BtZW50IG9mCisgIHRob3NlIGFwcGxpY2F0aW9ucy4gIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgYXJlCisgIGlycmVsZXZhbnQgdG8gc3VjaCB1c2VycywgbWFraW5nIHRoZW0gd29ycnkgYWJvdXQgYW4gYXBwbGljYXRpb24KKyAgdGhhdCdzIGFjdHVhbGx5IHdvcmtpbmcgY29ycmVjdGx5IGFuZCBidXJkZW5pbmcgYXBwbGljYXRpb24gZGV2ZWxvcGVycworICB3aXRoIHJlc3BvbmRpbmcgdG8gdGhlc2UgY29uY2VybnMuCisKKyAgWW91IGNhbiByZS1lbmFibGUgZGlzcGxheSBvZiA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIG1lc3NhZ2VzIGJ5CisgIHJ1bm5pbmcgUHl0aG9uIHdpdGggdGhlIDpvcHRpb246YC1XZGVmYXVsdCA8LVc+YCAoc2hvcnQgZm9ybToKKyAgOm9wdGlvbjpgLVdkIDwtVz5gKSBzd2l0Y2gsIG9yIGJ5IHNldHRpbmcgdGhlIDplbnZ2YXI6YFBZVEhPTldBUk5JTkdTYAorICBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgYCJkZWZhdWx0ImBgIChvciBgYCJkImBgKSBiZWZvcmUgcnVubmluZworICBQeXRob24uICBQeXRob24gY29kZSBjYW4gYWxzbyByZS1lbmFibGUgdGhlbQorICBieSBjYWxsaW5nIGBgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdkZWZhdWx0JylgYC4KKworCitQeXRob24gMy4xIEZlYXR1cmVzCis9PT09PT09PT09PT09PT09PT09PT09PQorCitNdWNoIGFzIFB5dGhvbiAyLjYgaW5jb3Jwb3JhdGVkIGZlYXR1cmVzIGZyb20gUHl0aG9uIDMuMCwKK3ZlcnNpb24gMi43IGluY29ycG9yYXRlcyBzb21lIG9mIHRoZSBuZXcgZmVhdHVyZXMKK2luIFB5dGhvbiAzLjEuICBUaGUgMi54IHNlcmllcyBjb250aW51ZXMgdG8gcHJvdmlkZSB0b29scworZm9yIG1pZ3JhdGluZyB0byB0aGUgMy54IHNlcmllcy4KKworQSBwYXJ0aWFsIGxpc3Qgb2YgMy4xIGZlYXR1cmVzIHRoYXQgd2VyZSBiYWNrcG9ydGVkIHRvIDIuNzoKKworKiBUaGUgc3ludGF4IGZvciBzZXQgbGl0ZXJhbHMgKGBgezEsMiwzfWBgIGlzIGEgbXV0YWJsZSBzZXQpLgorKiBEaWN0aW9uYXJ5IGFuZCBzZXQgY29tcHJlaGVuc2lvbnMgKGBge2k6IGkqMiBmb3IgaSBpbiByYW5nZSgzKX1gYCkuCisqIE11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMgaW4gYSBzaW5nbGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4KKyogQSBuZXcgdmVyc2lvbiBvZiB0aGUgOm1vZDpgaW9gIGxpYnJhcnksIHJld3JpdHRlbiBpbiBDIGZvciBwZXJmb3JtYW5jZS4KKyogVGhlIG9yZGVyZWQtZGljdGlvbmFyeSB0eXBlIGRlc2NyaWJlZCBpbiA6cmVmOmBwZXAtMDM3MmAuCisqIFRoZSBuZXcgYGAiLCJgYCBmb3JtYXQgc3BlY2lmaWVyIGRlc2NyaWJlZCBpbiA6cmVmOmBwZXAtMDM3OGAuCisqIFRoZSA6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdC4KKyogQSBzbWFsbCBzdWJzZXQgb2YgdGhlIDptb2Q6YGltcG9ydGxpYmAgbW9kdWxlLAorICBgZGVzY3JpYmVkIGJlbG93IDwjaW1wb3J0bGliLXNlY3Rpb24+YF9fLgorKiBUaGUgOmZ1bmM6YHJlcHJgIG9mIGEgZmxvYXQgYGB4YGAgaXMgc2hvcnRlciBpbiBtYW55IGNhc2VzOiBpdCdzIG5vdworICBiYXNlZCBvbiB0aGUgc2hvcnRlc3QgZGVjaW1hbCBzdHJpbmcgdGhhdCdzIGd1YXJhbnRlZWQgdG8gcm91bmQgYmFjaworICB0byBgYHhgYC4gIEFzIGluIHByZXZpb3VzIHZlcnNpb25zIG9mIFB5dGhvbiwgaXQncyBndWFyYW50ZWVkIHRoYXQKKyAgYGBmbG9hdChyZXByKHgpKWBgIHJlY292ZXJzIGBgeGBgLgorKiBGbG9hdC10by1zdHJpbmcgYW5kIHN0cmluZy10by1mbG9hdCBjb252ZXJzaW9ucyBhcmUgY29ycmVjdGx5IHJvdW5kZWQuCisgIFRoZSA6ZnVuYzpgcm91bmRgIGZ1bmN0aW9uIGlzIGFsc28gbm93IGNvcnJlY3RseSByb3VuZGVkLgorKiBUaGUgOmN0eXBlOmBQeUNhcHN1bGVgIHR5cGUsIHVzZWQgdG8gcHJvdmlkZSBhIEMgQVBJIGZvciBleHRlbnNpb24gbW9kdWxlcy4KKyogVGhlIDpjZnVuYzpgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93YCBDIEFQSSBmdW5jdGlvbi4KKworT3RoZXIgbmV3IFB5dGhvbjMtbW9kZSB3YXJuaW5ncyBpbmNsdWRlOgorCisqIDpmdW5jOmBvcGVyYXRvci5pc0NhbGxhYmxlYCBhbmQgOmZ1bmM6YG9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXNgLAorICB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBpbiAzLngsIG5vdyB0cmlnZ2VyIHdhcm5pbmdzLgorKiBUaGUgOm9wdGlvbjpgLTNgIHN3aXRjaCBub3cgYXV0b21hdGljYWxseQorICBlbmFibGVzIHRoZSA6b3B0aW9uOmAtUXdhcm4gPC1RPmAgc3dpdGNoIHRoYXQgY2F1c2VzIHdhcm5pbmdzCisgIGFib3V0IHVzaW5nIGNsYXNzaWMgZGl2aXNpb24gd2l0aCBpbnRlZ2VycyBhbmQgbG9uZyBpbnRlZ2Vycy4KKworCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLi4gTGFyZ2UsIFBFUC1sZXZlbCBmZWF0dXJlcyBhbmQgY2hhbmdlcyBzaG91bGQgYmUgZGVzY3JpYmVkIGhlcmUuCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gX3BlcC0wMzcyOgorCitQRVAgMzcyOiBBZGRpbmcgYW4gT3JkZXJlZCBEaWN0aW9uYXJ5IHRvIGNvbGxlY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlZ3VsYXIgUHl0aG9uIGRpY3Rpb25hcmllcyBpdGVyYXRlIG92ZXIga2V5L3ZhbHVlIHBhaXJzIGluIGFyYml0cmFyeSBvcmRlci4KK092ZXIgdGhlIHllYXJzLCBhIG51bWJlciBvZiBhdXRob3JzIGhhdmUgd3JpdHRlbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMKK3RoYXQgcmVtZW1iZXIgdGhlIG9yZGVyIHRoYXQgdGhlIGtleXMgd2VyZSBvcmlnaW5hbGx5IGluc2VydGVkLiAgQmFzZWQgb24KK3RoZSBleHBlcmllbmNlcyBmcm9tIHRob3NlIGltcGxlbWVudGF0aW9ucywgMi43IGludHJvZHVjZXMgYSBuZXcKKzpjbGFzczpgfmNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCBjbGFzcyBpbiB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZS4KKworVGhlIDpjbGFzczpgfmNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCBBUEkgcHJvdmlkZXMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIHJlZ3VsYXIKK2RpY3Rpb25hcmllcyBidXQgaXRlcmF0ZXMgb3ZlciBrZXlzIGFuZCB2YWx1ZXMgaW4gYSBndWFyYW50ZWVkIG9yZGVyCitkZXBlbmRpbmcgb24gd2hlbiBhIGtleSB3YXMgZmlyc3QgaW5zZXJ0ZWQ6OgorCisgICAgPj4+IGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CisgICAgPj4+IGQgPSBPcmRlcmVkRGljdChbKCdmaXJzdCcsIDEpLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICgnc2Vjb25kJywgMiksCisgICAgLi4uICAgICAgICAgICAgICAgICAgKCd0aGlyZCcsIDMpXSkKKyAgICA+Pj4gZC5pdGVtcygpCisgICAgWygnZmlyc3QnLCAxKSwgKCdzZWNvbmQnLCAyKSwgKCd0aGlyZCcsIDMpXQorCitJZiBhIG5ldyBlbnRyeSBvdmVyd3JpdGVzIGFuIGV4aXN0aW5nIGVudHJ5LCB0aGUgb3JpZ2luYWwgaW5zZXJ0aW9uCitwb3NpdGlvbiBpcyBsZWZ0IHVuY2hhbmdlZDo6CisKKyAgICA+Pj4gZFsnc2Vjb25kJ10gPSA0CisgICAgPj4+IGQuaXRlbXMoKQorICAgIFsoJ2ZpcnN0JywgMSksICgnc2Vjb25kJywgNCksICgndGhpcmQnLCAzKV0KKworRGVsZXRpbmcgYW4gZW50cnkgYW5kIHJlaW5zZXJ0aW5nIGl0IHdpbGwgbW92ZSBpdCB0byB0aGUgZW5kOjoKKworICAgID4+PiBkZWwgZFsnc2Vjb25kJ10KKyAgICA+Pj4gZFsnc2Vjb25kJ10gPSA1CisgICAgPj4+IGQuaXRlbXMoKQorICAgIFsoJ2ZpcnN0JywgMSksICgndGhpcmQnLCAzKSwgKCdzZWNvbmQnLCA1KV0KKworVGhlIDptZXRoOmB+Y29sbGVjdGlvbnMuT3JkZXJlZERpY3QucG9waXRlbWAgbWV0aG9kIGhhcyBhbiBvcHRpb25hbCAqbGFzdCoKK2FyZ3VtZW50IHRoYXQgZGVmYXVsdHMgdG8gVHJ1ZS4gIElmICpsYXN0KiBpcyBUcnVlLCB0aGUgbW9zdCByZWNlbnRseQorYWRkZWQga2V5IGlzIHJldHVybmVkIGFuZCByZW1vdmVkOyBpZiBpdCdzIEZhbHNlLCB0aGUKK29sZGVzdCBrZXkgaXMgc2VsZWN0ZWQ6OgorCisgICAgPj4+IG9kID0gT3JkZXJlZERpY3QoWyh4LDApIGZvciB4IGluIHJhbmdlKDIwKV0pCisgICAgPj4+IG9kLnBvcGl0ZW0oKQorICAgICgxOSwgMCkKKyAgICA+Pj4gb2QucG9waXRlbSgpCisgICAgKDE4LCAwKQorICAgID4+PiBvZC5wb3BpdGVtKGxhc3Q9RmFsc2UpCisgICAgKDAsIDApCisgICAgPj4+IG9kLnBvcGl0ZW0obGFzdD1GYWxzZSkKKyAgICAoMSwgMCkKKworQ29tcGFyaW5nIHR3byBvcmRlcmVkIGRpY3Rpb25hcmllcyBjaGVja3MgYm90aCB0aGUga2V5cyBhbmQgdmFsdWVzLAorYW5kIHJlcXVpcmVzIHRoYXQgdGhlIGluc2VydGlvbiBvcmRlciB3YXMgdGhlIHNhbWU6OgorCisgICAgPj4+IG9kMSA9IE9yZGVyZWREaWN0KFsoJ2ZpcnN0JywgMSksCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAoJ3NlY29uZCcsIDIpLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgKCd0aGlyZCcsIDMpXSkKKyAgICA+Pj4gb2QyID0gT3JkZXJlZERpY3QoWygndGhpcmQnLCAzKSwKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICgnZmlyc3QnLCAxKSwKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICgnc2Vjb25kJywgMildKQorICAgID4+PiBvZDEgPT0gb2QyCisgICAgRmFsc2UKKyAgICA+Pj4gIyBNb3ZlICd0aGlyZCcga2V5IHRvIHRoZSBlbmQKKyAgICA+Pj4gZGVsIG9kMlsndGhpcmQnXTsgb2QyWyd0aGlyZCddID0gMworICAgID4+PiBvZDEgPT0gb2QyCisgICAgVHJ1ZQorCitDb21wYXJpbmcgYW4gOmNsYXNzOmB+Y29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIHdpdGggYSByZWd1bGFyIGRpY3Rpb25hcnkKK2lnbm9yZXMgdGhlIGluc2VydGlvbiBvcmRlciBhbmQganVzdCBjb21wYXJlcyB0aGUga2V5cyBhbmQgdmFsdWVzLgorCitIb3cgZG9lcyB0aGUgOmNsYXNzOmB+Y29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIHdvcms/ICBJdCBtYWludGFpbnMgYQorZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGtleXMsIGFwcGVuZGluZyBuZXcga2V5cyB0byB0aGUgbGlzdCBhcyB0aGV5J3JlIGluc2VydGVkLgorQSBzZWNvbmRhcnkgZGljdGlvbmFyeSBtYXBzIGtleXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBsaXN0IG5vZGUsIHNvCitkZWxldGlvbiBkb2Vzbid0IGhhdmUgdG8gdHJhdmVyc2UgdGhlIGVudGlyZSBsaW5rZWQgbGlzdCBhbmQgdGhlcmVmb3JlCityZW1haW5zIE8oMSkuCisKK1RoZSBzdGFuZGFyZCBsaWJyYXJ5IG5vdyBzdXBwb3J0cyB1c2Ugb2Ygb3JkZXJlZCBkaWN0aW9uYXJpZXMgaW4gc2V2ZXJhbAorbW9kdWxlcy4KKworKiBUaGUgOm1vZDpgQ29uZmlnUGFyc2VyYCBtb2R1bGUgdXNlcyB0aGVtIGJ5IGRlZmF1bHQsIG1lYW5pbmcgdGhhdAorICBjb25maWd1cmF0aW9uIGZpbGVzIGNhbiBub3cgYmUgcmVhZCwgbW9kaWZpZWQsIGFuZCB0aGVuIHdyaXR0ZW4gYmFjaworICBpbiB0aGVpciBvcmlnaW5hbCBvcmRlci4KKworKiBUaGUgOm1ldGg6YH5jb2xsZWN0aW9ucy5zb21lbmFtZWR0dXBsZS5fYXNkaWN0KClgIG1ldGhvZCBmb3IKKyAgOmZ1bmM6YGNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIG5vdyByZXR1cm5zIGFuIG9yZGVyZWQgZGljdGlvbmFyeSB3aXRoIHRoZQorICB2YWx1ZXMgYXBwZWFyaW5nIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1bmRlcmx5aW5nIHR1cGxlIGluZGljZXMuCisKKyogVGhlIDptb2Q6YGpzb25gIG1vZHVsZSdzIDpjbGFzczpgfmpzb24uSlNPTkRlY29kZXJgIGNsYXNzCisgIGNvbnN0cnVjdG9yIHdhcyBleHRlbmRlZCB3aXRoIGFuICpvYmplY3RfcGFpcnNfaG9vayogcGFyYW1ldGVyIHRvCisgIGFsbG93IDpjbGFzczpgT3JkZXJlZERpY3RgIGluc3RhbmNlcyB0byBiZSBidWlsdCBieSB0aGUgZGVjb2Rlci4KKyAgU3VwcG9ydCB3YXMgYWxzbyBhZGRlZCBmb3IgdGhpcmQtcGFydHkgdG9vbHMgbGlrZQorICBgUHlZQU1MIDxodHRwOi8vcHl5YW1sLm9yZy8+YF8uCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzNzJgIC0gQWRkaW5nIGFuIG9yZGVyZWQgZGljdGlvbmFyeSB0byBjb2xsZWN0aW9ucworICAgICBQRVAgd3JpdHRlbiBieSBBcm1pbiBSb25hY2hlciBhbmQgUmF5bW9uZCBIZXR0aW5nZXI7CisgICAgIGltcGxlbWVudGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyLgorCisuLiBfcGVwLTAzNzg6CisKK1BFUCAzNzg6IEZvcm1hdCBTcGVjaWZpZXIgZm9yIFRob3VzYW5kcyBTZXBhcmF0b3IKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gbWFrZSBwcm9ncmFtIG91dHB1dCBtb3JlIHJlYWRhYmxlLCBpdCBjYW4gYmUgdXNlZnVsIHRvIGFkZAorc2VwYXJhdG9ycyB0byBsYXJnZSBudW1iZXJzLCByZW5kZXJpbmcgdGhlbSBhcworMTgsNDQ2LDc0NCwwNzMsNzA5LDU1MSw2MTYgaW5zdGVhZCBvZiAxODQ0Njc0NDA3MzcwOTU1MTYxNi4KKworVGhlIGZ1bGx5IGdlbmVyYWwgc29sdXRpb24gZm9yIGRvaW5nIHRoaXMgaXMgdGhlIDptb2Q6YGxvY2FsZWAgbW9kdWxlLAord2hpY2ggY2FuIHVzZSBkaWZmZXJlbnQgc2VwYXJhdG9ycyAoIiwiIGluIE5vcnRoIEFtZXJpY2EsICIuIiBpbgorRXVyb3BlKSBhbmQgZGlmZmVyZW50IGdyb3VwaW5nIHNpemVzLCBidXQgOm1vZDpgbG9jYWxlYCBpcyBjb21wbGljYXRlZAordG8gdXNlIGFuZCB1bnN1aXRhYmxlIGZvciBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMgd2hlcmUgZGlmZmVyZW50Cit0aHJlYWRzIGFyZSBwcm9kdWNpbmcgb3V0cHV0IGZvciBkaWZmZXJlbnQgbG9jYWxlcy4KKworVGhlcmVmb3JlLCBhIHNpbXBsZSBjb21tYS1ncm91cGluZyBtZWNoYW5pc20gaGFzIGJlZW4gYWRkZWQgdG8gdGhlCittaW5pLWxhbmd1YWdlIHVzZWQgYnkgdGhlIDptZXRoOmBzdHIuZm9ybWF0YCBtZXRob2QuICBXaGVuCitmb3JtYXR0aW5nIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBzaW1wbHkgaW5jbHVkZSBhIGNvbW1hIGJldHdlZW4gdGhlCit3aWR0aCBhbmQgdGhlIHByZWNpc2lvbjo6CisKKyAgID4+PiAnezoyMCwuMmZ9Jy5mb3JtYXQoMTg0NDY3NDQwNzM3MDk1NTE2MTYuMCkKKyAgICcxOCw0NDYsNzQ0LDA3Myw3MDksNTUxLDYxNi4wMCcKKworV2hlbiBmb3JtYXR0aW5nIGFuIGludGVnZXIsIGluY2x1ZGUgdGhlIGNvbW1hIGFmdGVyIHRoZSB3aWR0aDoKKworICAgPj4+ICd7OjIwLGR9Jy5mb3JtYXQoMTg0NDY3NDQwNzM3MDk1NTE2MTYpCisgICAnMTgsNDQ2LDc0NCwwNzMsNzA5LDU1MSw2MTYnCisKK1RoaXMgbWVjaGFuaXNtIGlzIG5vdCBhZGFwdGFibGUgYXQgYWxsOyBjb21tYXMgYXJlIGFsd2F5cyB1c2VkIGFzIHRoZQorc2VwYXJhdG9yIGFuZCB0aGUgZ3JvdXBpbmcgaXMgYWx3YXlzIGludG8gdGhyZWUtZGlnaXQgZ3JvdXBzLiAgVGhlCitjb21tYS1mb3JtYXR0aW5nIG1lY2hhbmlzbSBpc24ndCBhcyBnZW5lcmFsIGFzIHRoZSA6bW9kOmBsb2NhbGVgCittb2R1bGUsIGJ1dCBpdCdzIGVhc2llciB0byB1c2UuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzNzhgIC0gRm9ybWF0IFNwZWNpZmllciBmb3IgVGhvdXNhbmRzIFNlcGFyYXRvcgorICAgICBQRVAgd3JpdHRlbiBieSBSYXltb25kIEhldHRpbmdlcjsgaW1wbGVtZW50ZWQgYnkgRXJpYyBTbWl0aC4KKworUEVQIDM4OTogVGhlIGFyZ3BhcnNlIE1vZHVsZSBmb3IgUGFyc2luZyBDb21tYW5kIExpbmVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUgZm9yIHBhcnNpbmcgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB3YXMKK2FkZGVkIGFzIGEgbW9yZSBwb3dlcmZ1bCByZXBsYWNlbWVudCBmb3IgdGhlCis6bW9kOmBvcHRwYXJzZWAgbW9kdWxlLgorCitUaGlzIG1lYW5zIFB5dGhvbiBub3cgc3VwcG9ydHMgdGhyZWUgZGlmZmVyZW50IG1vZHVsZXMgZm9yIHBhcnNpbmcKK2NvbW1hbmQtbGluZSBhcmd1bWVudHM6IDptb2Q6YGdldG9wdGAsIDptb2Q6YG9wdHBhcnNlYCwgYW5kCis6bW9kOmBhcmdwYXJzZWAuICBUaGUgOm1vZDpgZ2V0b3B0YCBtb2R1bGUgY2xvc2VseSByZXNlbWJsZXMgdGhlIEMKK2xpYnJhcnkncyA6Y2Z1bmM6YGdldG9wdGAgZnVuY3Rpb24sIHNvIGl0IHJlbWFpbnMgdXNlZnVsIGlmIHlvdSdyZSB3cml0aW5nIGEKK1B5dGhvbiBwcm90b3R5cGUgdGhhdCB3aWxsIGV2ZW50dWFsbHkgYmUgcmV3cml0dGVuIGluIEMuCis6bW9kOmBvcHRwYXJzZWAgYmVjb21lcyByZWR1bmRhbnQsIGJ1dCB0aGVyZSBhcmUgbm8gcGxhbnMgdG8gcmVtb3ZlIGl0CitiZWNhdXNlIHRoZXJlIGFyZSBtYW55IHNjcmlwdHMgc3RpbGwgdXNpbmcgaXQsIGFuZCB0aGVyZSdzIG5vCithdXRvbWF0ZWQgd2F5IHRvIHVwZGF0ZSB0aGVzZSBzY3JpcHRzLiAgKE1ha2luZyB0aGUgOm1vZDpgYXJncGFyc2VgCitBUEkgY29uc2lzdGVudCB3aXRoIDptb2Q6YG9wdHBhcnNlYCdzIGludGVyZmFjZSB3YXMgZGlzY3Vzc2VkIGJ1dAorcmVqZWN0ZWQgYXMgdG9vIG1lc3N5IGFuZCBkaWZmaWN1bHQuKQorCitJbiBzaG9ydCwgaWYgeW91J3JlIHdyaXRpbmcgYSBuZXcgc2NyaXB0IGFuZCBkb24ndCBuZWVkIHRvIHdvcnJ5CithYm91dCBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24sIHVzZQorOm1vZDpgYXJncGFyc2VgIGluc3RlYWQgb2YgOm1vZDpgb3B0cGFyc2VgLgorCitIZXJlJ3MgYW4gZXhhbXBsZTo6CisKKyAgICBpbXBvcnQgYXJncGFyc2UKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdDb21tYW5kLWxpbmUgZXhhbXBsZS4nKQorCisgICAgIyBBZGQgb3B0aW9uYWwgc3dpdGNoZXMKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2lzX3ZlcmJvc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJvZHVjZSB2ZXJib3NlIG91dHB1dCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCBhY3Rpb249J3N0b3JlJywgZGVzdD0nb3V0cHV0JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J0ZJTEUnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlyZWN0IG91dHB1dCB0byBGSUxFIGluc3RlYWQgb2Ygc3Rkb3V0JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctQycsIGFjdGlvbj0nc3RvcmUnLCB0eXBlPWludCwgZGVzdD0nY29udGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdOVU0nLCBkZWZhdWx0PTAsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNwbGF5IE5VTSBsaW5lcyBvZiBhZGRlZCBjb250ZXh0JykKKworICAgICMgQWxsb3cgYW55IG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KG5hcmdzPScqJywgYWN0aW9uPSdzdG9yZScsIGRlc3Q9J2lucHV0cycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdpbnB1dCBmaWxlbmFtZXMgKGRlZmF1bHQgaXMgc3RkaW4pJykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgcHJpbnQgYXJncy5fX2RpY3RfXworCitVbmxlc3MgeW91IG92ZXJyaWRlIGl0LCA6b3B0aW9uOmAtaGAgYW5kIDpvcHRpb246YC0taGVscGAgc3dpdGNoZXMKK2FyZSBhdXRvbWF0aWNhbGx5IGFkZGVkLCBhbmQgcHJvZHVjZSBuZWF0bHkgZm9ybWF0dGVkIG91dHB1dDo6CisKKyAgICAtPiAuL3B5dGhvbi5leGUgYXJncGFyc2UtZXhhbXBsZS5weSAtLWhlbHAKKyAgICB1c2FnZTogYXJncGFyc2UtZXhhbXBsZS5weSBbLWhdIFstdl0gWy1vIEZJTEVdIFstQyBOVU1dIFtpbnB1dHMgW2lucHV0cyAuLi5dXQorCisgICAgQ29tbWFuZC1saW5lIGV4YW1wbGUuCisKKyAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgIGlucHV0cyAgICAgIGlucHV0IGZpbGVuYW1lcyAoZGVmYXVsdCBpcyBzdGRpbikKKworICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgIC12ICAgICAgICAgIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQKKyAgICAgIC1vIEZJTEUgICAgIGRpcmVjdCBvdXRwdXQgdG8gRklMRSBpbnN0ZWFkIG9mIHN0ZG91dAorICAgICAgLUMgTlVNICAgICAgZGlzcGxheSBOVU0gbGluZXMgb2YgYWRkZWQgY29udGV4dAorCitBcyB3aXRoIDptb2Q6YG9wdHBhcnNlYCwgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBhbmQgYXJndW1lbnRzCithcmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IHdpdGggYXR0cmlidXRlcyBuYW1lZCBieSB0aGUgKmRlc3QqIHBhcmFtZXRlcnM6OgorCisgICAgLT4gLi9weXRob24uZXhlIGFyZ3BhcnNlLWV4YW1wbGUucHkgLXYKKyAgICB7J291dHB1dCc6IE5vbmUsCisgICAgICdpc192ZXJib3NlJzogVHJ1ZSwKKyAgICAgJ2NvbnRleHQnOiAwLAorICAgICAnaW5wdXRzJzogW119CisKKyAgICAtPiAuL3B5dGhvbi5leGUgYXJncGFyc2UtZXhhbXBsZS5weSAtdiAtbyAvdG1wL291dHB1dCAtQyA0IGZpbGUxIGZpbGUyCisgICAgeydvdXRwdXQnOiAnL3RtcC9vdXRwdXQnLAorICAgICAnaXNfdmVyYm9zZSc6IFRydWUsCisgICAgICdjb250ZXh0JzogNCwKKyAgICAgJ2lucHV0cyc6IFsnZmlsZTEnLCAnZmlsZTInXX0KKworOm1vZDpgYXJncGFyc2VgIGhhcyBtdWNoIGZhbmNpZXIgdmFsaWRhdGlvbiB0aGFuIDptb2Q6YG9wdHBhcnNlYDsgeW91CitjYW4gc3BlY2lmeSBhbiBleGFjdCBudW1iZXIgb2YgYXJndW1lbnRzIGFzIGFuIGludGVnZXIsIDAgb3IgbW9yZQorYXJndW1lbnRzIGJ5IHBhc3NpbmcgYGAnKidgYCwgMSBvciBtb3JlIGJ5IHBhc3NpbmcgYGAnKydgYCwgb3IgYW4KK29wdGlvbmFsIGFyZ3VtZW50IHdpdGggYGAnPydgYC4gIEEgdG9wLWxldmVsIHBhcnNlciBjYW4gY29udGFpbgorc3ViLXBhcnNlcnMgdG8gZGVmaW5lIHN1YmNvbW1hbmRzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgc2V0cyBvZgorc3dpdGNoZXMsIGFzIGluIGBgc3ZuIGNvbW1pdGBgLCBgYHN2biBjaGVja291dGBgLCBldGMuICBZb3UgY2FuCitzcGVjaWZ5IGFuIGFyZ3VtZW50J3MgdHlwZSBhcyA6Y2xhc3M6YH5hcmdwYXJzZS5GaWxlVHlwZWAsIHdoaWNoIHdpbGwKK2F1dG9tYXRpY2FsbHkgb3BlbiBmaWxlcyBmb3IgeW91IGFuZCB1bmRlcnN0YW5kcyB0aGF0IGBgJy0nYGAgbWVhbnMKK3N0YW5kYXJkIGlucHV0IG9yIG91dHB1dC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDptb2Q6YGFyZ3BhcnNlYCBkb2N1bWVudGF0aW9uCisgICAgIFRoZSBkb2N1bWVudGF0aW9uIHBhZ2Ugb2YgdGhlIGFyZ3BhcnNlIG1vZHVsZS4KKworICAgOnJlZjpgYXJncGFyc2UtZnJvbS1vcHRwYXJzZWAKKyAgICAgUGFydCBvZiB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24sIGRlc2NyaWJpbmcgaG93IHRvIGNvbnZlcnQKKyAgICAgY29kZSB0aGF0IHVzZXMgOm1vZDpgb3B0cGFyc2VgLgorCisgICA6cGVwOmAzODlgIC0gYXJncGFyc2UgLSBOZXcgQ29tbWFuZCBMaW5lIFBhcnNpbmcgTW9kdWxlCisgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBTdGV2ZW4gQmV0aGFyZC4KKworUEVQIDM5MTogRGljdGlvbmFyeS1CYXNlZCBDb25maWd1cmF0aW9uIEZvciBMb2dnaW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUgaXMgdmVyeSBmbGV4aWJsZTsgYXBwbGljYXRpb25zIGNhbiBkZWZpbmUKK2EgdHJlZSBvZiBsb2dnaW5nIHN1YnN5c3RlbXMsIGFuZCBlYWNoIGxvZ2dlciBpbiB0aGlzIHRyZWUgY2FuIGZpbHRlcgorb3V0IGNlcnRhaW4gbWVzc2FnZXMsIGZvcm1hdCB0aGVtIGRpZmZlcmVudGx5LCBhbmQgZGlyZWN0IG1lc3NhZ2VzIHRvCithIHZhcnlpbmcgbnVtYmVyIG9mIGhhbmRsZXJzLgorCitBbGwgdGhpcyBmbGV4aWJpbGl0eSBjYW4gcmVxdWlyZSBhIGxvdCBvZiBjb25maWd1cmF0aW9uLiAgWW91IGNhbgord3JpdGUgUHl0aG9uIHN0YXRlbWVudHMgdG8gY3JlYXRlIG9iamVjdHMgYW5kIHNldCB0aGVpciBwcm9wZXJ0aWVzLAorYnV0IGEgY29tcGxleCBzZXQtdXAgcmVxdWlyZXMgdmVyYm9zZSBidXQgYm9yaW5nIGNvZGUuCis6bW9kOmBsb2dnaW5nYCBhbHNvIHN1cHBvcnRzIGEgOmZ1bmM6YH5sb2dnaW5nLmZpbGVDb25maWdgCitmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIGZpbGUsIGJ1dCB0aGUgZmlsZSBmb3JtYXQgZG9lc24ndCBzdXBwb3J0Citjb25maWd1cmluZyBmaWx0ZXJzLCBhbmQgaXQncyBtZXNzaWVyIHRvIGdlbmVyYXRlIHByb2dyYW1tYXRpY2FsbHkuCisKK1B5dGhvbiAyLjcgYWRkcyBhIDpmdW5jOmB+bG9nZ2luZy5kaWN0Q29uZmlnYCBmdW5jdGlvbiB0aGF0Cit1c2VzIGEgZGljdGlvbmFyeSB0byBjb25maWd1cmUgbG9nZ2luZy4gIFRoZXJlIGFyZSBtYW55IHdheXMgdG8KK3Byb2R1Y2UgYSBkaWN0aW9uYXJ5IGZyb20gZGlmZmVyZW50IHNvdXJjZXM6IGNvbnN0cnVjdCBvbmUgd2l0aCBjb2RlOworcGFyc2UgYSBmaWxlIGNvbnRhaW5pbmcgSlNPTjsgb3IgdXNlIGEgWUFNTCBwYXJzaW5nIGxpYnJhcnkgaWYgb25lIGlzCitpbnN0YWxsZWQuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgOnJlZjpgbG9nZ2luZy1jb25maWctYXBpYC4KKworVGhlIGZvbGxvd2luZyBleGFtcGxlIGNvbmZpZ3VyZXMgdHdvIGxvZ2dlcnMsIHRoZSByb290IGxvZ2dlciBhbmQgYQorbG9nZ2VyIG5hbWVkICJuZXR3b3JrIi4gIE1lc3NhZ2VzIHNlbnQgdG8gdGhlIHJvb3QgbG9nZ2VyIHdpbGwgYmUKK3NlbnQgdG8gdGhlIHN5c3RlbSBsb2cgdXNpbmcgdGhlIHN5c2xvZyBwcm90b2NvbCwgYW5kIG1lc3NhZ2VzCit0byB0aGUgIm5ldHdvcmsiIGxvZ2dlciB3aWxsIGJlIHdyaXR0ZW4gdG8gYSA6ZmlsZTpgbmV0d29yay5sb2dgIGZpbGUKK3RoYXQgd2lsbCBiZSByb3RhdGVkIG9uY2UgdGhlIGxvZyByZWFjaGVzIDFNQi4KKworOjoKKworICAgIGltcG9ydCBsb2dnaW5nCisgICAgaW1wb3J0IGxvZ2dpbmcuY29uZmlnCisKKyAgICBjb25maWdkaWN0ID0geworICAgICAndmVyc2lvbic6IDEsICAgICMgQ29uZmlndXJhdGlvbiBzY2hlbWEgaW4gdXNlOyBtdXN0IGJlIDEgZm9yIG5vdworICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICdzdGFuZGFyZCc6IHsKKyAgICAgICAgICAgICAnZm9ybWF0JzogKCclKGFzY3RpbWUpcyAlKG5hbWUpLTE1cyAnCisgICAgICAgICAgICAgICAgICAgICAgICAnJShsZXZlbG5hbWUpLThzICUobWVzc2FnZSlzJyl9fSwKKworICAgICAnaGFuZGxlcnMnOiB7J25ldGxvZyc6IHsnYmFja3VwQ291bnQnOiAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3MnOiAnbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnL2xvZ3MvbmV0d29yay5sb2cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInOiAnc3RhbmRhcmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdsZXZlbCc6ICdJTkZPJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4Qnl0ZXMnOiAxMDAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICdzeXNsb2cnOiB7J2NsYXNzJzogJ2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInOiAnc3RhbmRhcmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGV2ZWwnOiAnRVJST1InfX0sCisKKyAgICAgIyBTcGVjaWZ5IGFsbCB0aGUgc3Vib3JkaW5hdGUgbG9nZ2VycworICAgICAnbG9nZ2Vycyc6IHsKKyAgICAgICAgICAgICAgICAgJ25ldHdvcmsnOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYW5kbGVycyc6IFsnbmV0bG9nJ10KKyAgICAgICAgICAgICAgICAgfQorICAgICB9LAorICAgICAjIFNwZWNpZnkgcHJvcGVydGllcyBvZiB0aGUgcm9vdCBsb2dnZXIKKyAgICAgJ3Jvb3QnOiB7CisgICAgICAgICAgICAgICdoYW5kbGVycyc6IFsnc3lzbG9nJ10KKyAgICAgfSwKKyAgICB9CisKKyAgICAjIFNldCB1cCBjb25maWd1cmF0aW9uCisgICAgbG9nZ2luZy5jb25maWcuZGljdENvbmZpZyhjb25maWdkaWN0KQorCisgICAgIyBBcyBhbiBleGFtcGxlLCBsb2cgdHdvIGVycm9yIG1lc3NhZ2VzCisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJy8nKQorICAgIGxvZ2dlci5lcnJvcignRGF0YWJhc2Ugbm90IGZvdW5kJykKKworICAgIG5ldGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCduZXR3b3JrJykKKyAgICBuZXRsb2dnZXIuZXJyb3IoJ0Nvbm5lY3Rpb24gZmFpbGVkJykKKworVGhyZWUgc21hbGxlciBlbmhhbmNlbWVudHMgdG8gdGhlIDptb2Q6YGxvZ2dpbmdgIG1vZHVsZSwgYWxsCitpbXBsZW1lbnRlZCBieSBWaW5heSBTYWppcCwgYXJlOgorCisuLiByZXY3OTI5MworCisqIFRoZSA6Y2xhc3M6YH5sb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXJgIGNsYXNzIG5vdyBzdXBwb3J0cworICBzeXNsb2dnaW5nIG92ZXIgVENQLiAgVGhlIGNvbnN0cnVjdG9yIGhhcyBhICpzb2NrdHlwZSogcGFyYW1ldGVyCisgIGdpdmluZyB0aGUgdHlwZSBvZiBzb2NrZXQgdG8gdXNlLCBlaXRoZXIgOmNvbnN0OmBzb2NrZXQuU09DS19ER1JBTWAKKyAgZm9yIFVEUCBvciA6Y29uc3Q6YHNvY2tldC5TT0NLX1NUUkVBTWAgZm9yIFRDUC4gIFRoZSBkZWZhdWx0CisgIHByb3RvY29sIHJlbWFpbnMgVURQLgorCisqIDpjbGFzczpgfmxvZ2dpbmcuTG9nZ2VyYCBpbnN0YW5jZXMgZ2FpbmVkIGEgOm1ldGg6YH5sb2dnaW5nLkxvZ2dlci5nZXRDaGlsZGAKKyAgbWV0aG9kIHRoYXQgcmV0cmlldmVzIGEgZGVzY2VuZGFudCBsb2dnZXIgdXNpbmcgYSByZWxhdGl2ZSBwYXRoLgorICBGb3IgZXhhbXBsZSwgb25jZSB5b3UgcmV0cmlldmUgYSBsb2dnZXIgYnkgZG9pbmcgYGBsb2cgPSBnZXRMb2dnZXIoJ2FwcCcpYGAsCisgIGNhbGxpbmcgYGBsb2cuZ2V0Q2hpbGQoJ25ldHdvcmsubGlzdGVuJylgYCBpcyBlcXVpdmFsZW50IHRvCisgIGBgZ2V0TG9nZ2VyKCdhcHAubmV0d29yay5saXN0ZW4nKWBgLgorCisqIFRoZSA6Y2xhc3M6YH5sb2dnaW5nLkxvZ2dlckFkYXB0ZXJgIGNsYXNzIGdhaW5lZCBhCisgIDptZXRoOmB+bG9nZ2luZy5Mb2dnZXJBZGFwdGVyLmlzRW5hYmxlZEZvcmAgbWV0aG9kIHRoYXQgdGFrZXMgYQorICAqbGV2ZWwqIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgbG9nZ2VyIHdvdWxkCisgIHByb2Nlc3MgYSBtZXNzYWdlIG9mIHRoYXQgbGV2ZWwgb2YgaW1wb3J0YW5jZS4KKworLi4gWFhYOiBMb2dnZXIgb2JqZWN0cyBkb24ndCBoYXZlIGEgY2xhc3MgZGVjbGFyYXRpb24gc28gdGhlIGxpbmsgZG9uJ3Qgd29yaworCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzkxYCAtIERpY3Rpb25hcnktQmFzZWQgQ29uZmlndXJhdGlvbiBGb3IgTG9nZ2luZworICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgVmluYXkgU2FqaXAuCisKK1BFUCAzMTA2OiBEaWN0aW9uYXJ5IFZpZXdzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBkaWN0aW9uYXJ5IG1ldGhvZHMgOm1ldGg6YH5kaWN0LmtleXNgLCA6bWV0aDpgfmRpY3QudmFsdWVzYCwgYW5kCis6bWV0aDpgfmRpY3QuaXRlbXNgIGFyZSBkaWZmZXJlbnQgaW4gUHl0aG9uIDMueC4gIFRoZXkgcmV0dXJuIGFuIG9iamVjdAorY2FsbGVkIGEgOmRmbjpgdmlld2AgaW5zdGVhZCBvZiBhIGZ1bGx5IG1hdGVyaWFsaXplZCBsaXN0LgorCitJdCdzIG5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIHJldHVybiB2YWx1ZXMgb2YgOm1ldGg6YH5kaWN0LmtleXNgLAorOm1ldGg6YH5kaWN0LnZhbHVlc2AsIGFuZCA6bWV0aDpgfmRpY3QuaXRlbXNgIGluIFB5dGhvbiAyLjcgYmVjYXVzZQordG9vIG11Y2ggY29kZSB3b3VsZCBicmVhay4gIEluc3RlYWQgdGhlIDMueCB2ZXJzaW9ucyB3ZXJlIGFkZGVkCit1bmRlciB0aGUgbmV3IG5hbWVzIDptZXRoOmB+ZGljdC52aWV3a2V5c2AsIDptZXRoOmB+ZGljdC52aWV3dmFsdWVzYCwKK2FuZCA6bWV0aDpgfmRpY3Qudmlld2l0ZW1zYC4KKworOjoKKworICAgID4+PiBkID0gZGljdCgoaSoxMCwgY2hyKDY1K2kpKSBmb3IgaSBpbiByYW5nZSgyNikpCisgICAgPj4+IGQKKyAgICB7MDogJ0EnLCAxMzA6ICdOJywgMTA6ICdCJywgMTQwOiAnTycsIDIwOiAuLi4sIDI1MDogJ1onfQorICAgID4+PiBkLnZpZXdrZXlzKCkKKyAgICBkaWN0X2tleXMoWzAsIDEzMCwgMTAsIDE0MCwgMjAsIDE1MCwgMzAsIC4uLiwgMjUwXSkKKworVmlld3MgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGJ1dCB0aGUga2V5IGFuZCBpdGVtIHZpZXdzIGFsc28gYmVoYXZlCitsaWtlIHNldHMuICBUaGUgYGAmYGAgb3BlcmF0b3IgcGVyZm9ybXMgaW50ZXJzZWN0aW9uLCBhbmQgYGB8YGAKK3BlcmZvcm1zIGEgdW5pb246OgorCisgICAgPj4+IGQxID0gZGljdCgoaSoxMCwgY2hyKDY1K2kpKSBmb3IgaSBpbiByYW5nZSgyNikpCisgICAgPj4+IGQyID0gZGljdCgoaSoqLjUsIGkpIGZvciBpIGluIHJhbmdlKDEwMDApKQorICAgID4+PiBkMS52aWV3a2V5cygpICYgZDIudmlld2tleXMoKQorICAgIHNldChbMC4wLCAxMC4wLCAyMC4wLCAzMC4wXSkKKyAgICA+Pj4gZDEudmlld2tleXMoKSB8IHJhbmdlKDAsIDMwKQorICAgIHNldChbMCwgMSwgMTMwLCAzLCA0LCA1LCA2LCAuLi4sIDEyMCwgMjUwXSkKKworVGhlIHZpZXcga2VlcHMgdHJhY2sgb2YgdGhlIGRpY3Rpb25hcnkgYW5kIGl0cyBjb250ZW50cyBjaGFuZ2UgYXMgdGhlCitkaWN0aW9uYXJ5IGlzIG1vZGlmaWVkOjoKKworICAgID4+PiB2ayA9IGQudmlld2tleXMoKQorICAgID4+PiB2aworICAgIGRpY3Rfa2V5cyhbMCwgMTMwLCAxMCwgLi4uLCAyNTBdKQorICAgID4+PiBkWzI2MF0gPSAnJicKKyAgICA+Pj4gdmsKKyAgICBkaWN0X2tleXMoWzAsIDEzMCwgMjYwLCAxMCwgLi4uLCAyNTBdKQorCitIb3dldmVyLCBub3RlIHRoYXQgeW91IGNhbid0IGFkZCBvciByZW1vdmUga2V5cyB3aGlsZSB5b3UncmUgaXRlcmF0aW5nCitvdmVyIHRoZSB2aWV3OjoKKworICAgID4+PiBmb3IgayBpbiB2azoKKyAgICAuLi4gICAgIGRbayoyXSA9IGsKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIFJ1bnRpbWVFcnJvcjogZGljdGlvbmFyeSBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbgorCitZb3UgY2FuIHVzZSB0aGUgdmlldyBtZXRob2RzIGluIFB5dGhvbiAyLnggY29kZSwgYW5kIHRoZSAydG8zCitjb252ZXJ0ZXIgd2lsbCBjaGFuZ2UgdGhlbSB0byB0aGUgc3RhbmRhcmQgOm1ldGg6YH5kaWN0LmtleXNgLAorOm1ldGg6YH5kaWN0LnZhbHVlc2AsIGFuZCA6bWV0aDpgfmRpY3QuaXRlbXNgIG1ldGhvZHMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTA2YCAtIFJldmFtcGluZyBkaWN0LmtleXMoKSwgLnZhbHVlcygpIGFuZCAuaXRlbXMoKQorICAgICBQRVAgd3JpdHRlbiBieSBHdWlkbyB2YW4gUm9zc3VtLgorICAgICBCYWNrcG9ydGVkIHRvIDIuNyBieSBBbGV4YW5kcmUgVmFzc2Fsb3R0aTsgOmlzc3VlOmAxOTY3YC4KKworCitQRVAgMzEzNzogVGhlIG1lbW9yeXZpZXcgT2JqZWN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSA6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdCBwcm92aWRlcyBhIHZpZXcgb2YgYW5vdGhlciBvYmplY3QncworbWVtb3J5IGNvbnRlbnQgdGhhdCBtYXRjaGVzIHRoZSA6Y2xhc3M6YGJ5dGVzYCB0eXBlJ3MgaW50ZXJmYWNlLgorCisgICAgPj4+IGltcG9ydCBzdHJpbmcKKyAgICA+Pj4gbSA9IG1lbW9yeXZpZXcoc3RyaW5nLmxldHRlcnMpCisgICAgPj4+IG0KKyAgICA8bWVtb3J5IGF0IDB4MzdmODUwPgorICAgID4+PiBsZW4obSkgICAgICAgICAgICMgUmV0dXJucyBsZW5ndGggb2YgdW5kZXJseWluZyBvYmplY3QKKyAgICA1MgorICAgID4+PiBtWzBdLCBtWzI1XSwgbVsyNl0gICAjIEluZGV4aW5nIHJldHVybnMgb25lIGJ5dGUKKyAgICAoJ2EnLCAneicsICdBJykKKyAgICA+Pj4gbTIgPSBtWzA6MjZdICAgICAgICAgIyBTbGljaW5nIHJldHVybnMgYW5vdGhlciBtZW1vcnl2aWV3CisgICAgPj4+IG0yCisgICAgPG1lbW9yeSBhdCAweDM3ZjA4MD4KKworVGhlIGNvbnRlbnQgb2YgdGhlIHZpZXcgY2FuIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyBvZiBieXRlcyBvcgorYSBsaXN0IG9mIGludGVnZXJzOgorCisgICAgPj4+IG0yLnRvYnl0ZXMoKQorICAgICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKyAgICA+Pj4gbTIudG9saXN0KCkKKyAgICBbOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAuLi4gMTIxLCAxMjJdCisgICAgPj4+CisKKzpjbGFzczpgbWVtb3J5dmlld2Agb2JqZWN0cyBhbGxvdyBtb2RpZnlpbmcgdGhlIHVuZGVybHlpbmcgb2JqZWN0IGlmCitpdCdzIGEgbXV0YWJsZSBvYmplY3QuCisKKyAgICA+Pj4gbTJbMF0gPSA3NQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgVHlwZUVycm9yOiBjYW5ub3QgbW9kaWZ5IHJlYWQtb25seSBtZW1vcnkKKyAgICA+Pj4gYiA9IGJ5dGVhcnJheShzdHJpbmcubGV0dGVycykgICMgQ3JlYXRpbmcgYSBtdXRhYmxlIG9iamVjdAorICAgID4+PiBiCisgICAgYnl0ZWFycmF5KGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicpCisgICAgPj4+IG1iID0gbWVtb3J5dmlldyhiKQorICAgID4+PiBtYlswXSA9ICcqJyAgICAgICAgICMgQXNzaWduIHRvIHZpZXcsIGNoYW5naW5nIHRoZSBieXRlYXJyYXkuCisgICAgPj4+IGJbMDo1XSAgICAgICAgICAgICAgIyBUaGUgYnl0ZWFycmF5IGhhcyBiZWVuIGNoYW5nZWQuCisgICAgYnl0ZWFycmF5KGInKmJjZGUnKQorICAgID4+PgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzEzN2AgLSBJbW11dGFibGUgQnl0ZXMgYW5kIE11dGFibGUgQnVmZmVyCisgICAgIFBFUCB3cml0dGVuIGJ5IEd1aWRvIHZhbiBSb3NzdW0uCisgICAgIEltcGxlbWVudGVkIGJ5IFRyYXZpcyBPbGlwaGFudCwgQW50b2luZSBQaXRyb3UgYW5kIG90aGVycy4KKyAgICAgQmFja3BvcnRlZCB0byAyLjcgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgMjM5NmAuCisKKworCitPdGhlciBMYW5ndWFnZSBDaGFuZ2VzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1NvbWUgc21hbGxlciBjaGFuZ2VzIG1hZGUgdG8gdGhlIGNvcmUgUHl0aG9uIGxhbmd1YWdlIGFyZToKKworKiBUaGUgc3ludGF4IGZvciBzZXQgbGl0ZXJhbHMgaGFzIGJlZW4gYmFja3BvcnRlZCBmcm9tIFB5dGhvbiAzLnguCisgIEN1cmx5IGJyYWNrZXRzIGFyZSB1c2VkIHRvIHN1cnJvdW5kIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzdWx0aW5nCisgIG11dGFibGUgc2V0OyBzZXQgbGl0ZXJhbHMgYXJlCisgIGRpc3Rpbmd1aXNoZWQgZnJvbSBkaWN0aW9uYXJpZXMgYnkgbm90IGNvbnRhaW5pbmcgY29sb25zIGFuZCB2YWx1ZXMuCisgIGBge31gYCBjb250aW51ZXMgdG8gcmVwcmVzZW50IGFuIGVtcHR5IGRpY3Rpb25hcnk7IHVzZQorICBgYHNldCgpYGAgZm9yIGFuIGVtcHR5IHNldC4KKworICAgID4+PiB7MSwgMiwgMywgNCwgNX0KKyAgICBzZXQoWzEsIDIsIDMsIDQsIDVdKQorICAgID4+PiBzZXQoKSAjIGVtcHR5IHNldAorICAgIHNldChbXSkKKyAgICA+Pj4ge30gICAgIyBlbXB0eSBkaWN0CisgICAge30KKworICBCYWNrcG9ydGVkIGJ5IEFsZXhhbmRyZSBWYXNzYWxvdHRpOyA6aXNzdWU6YDIzMzVgLgorCisqIERpY3Rpb25hcnkgYW5kIHNldCBjb21wcmVoZW5zaW9ucyBhcmUgYW5vdGhlciBmZWF0dXJlIGJhY2twb3J0ZWQgZnJvbQorICAzLngsIGdlbmVyYWxpemluZyBsaXN0L2dlbmVyYXRvciBjb21wcmVoZW5zaW9ucyB0byB1c2UKKyAgdGhlIGxpdGVyYWwgc3ludGF4IGZvciBzZXRzIGFuZCBkaWN0aW9uYXJpZXMuCisKKyAgICA+Pj4ge3g6IHgqeCBmb3IgeCBpbiByYW5nZSg2KX0KKyAgICB7MDogMCwgMTogMSwgMjogNCwgMzogOSwgNDogMTYsIDU6IDI1fQorICAgID4+PiB7KCdhJyp4KSBmb3IgeCBpbiByYW5nZSg2KX0KKyAgICBzZXQoWycnLCAnYScsICdhYScsICdhYWEnLCAnYWFhYScsICdhYWFhYSddKQorCisgIEJhY2twb3J0ZWQgYnkgQWxleGFuZHJlIFZhc3NhbG90dGk7IDppc3N1ZTpgMjMzM2AuCisKKyogVGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgY2FuIG5vdyB1c2UgbXVsdGlwbGUgY29udGV4dCBtYW5hZ2VycworICBpbiBvbmUgc3RhdGVtZW50LiAgQ29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGZyb20gbGVmdCB0byByaWdodAorICBhbmQgZWFjaCBvbmUgaXMgdHJlYXRlZCBhcyBiZWdpbm5pbmcgYSBuZXcgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4KKyAgVGhpcyBtZWFucyB0aGF0OjoKKworICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6CisgICAgICAgLi4uIHN1aXRlIG9mIHN0YXRlbWVudHMgLi4uCisKKyAgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgIHdpdGggQSgpIGFzIGE6CisgICAgICAgd2l0aCBCKCkgYXMgYjoKKyAgICAgICAgICAgLi4uIHN1aXRlIG9mIHN0YXRlbWVudHMgLi4uCisKKyAgVGhlIDpmdW5jOmBjb250ZXh0bGliLm5lc3RlZGAgZnVuY3Rpb24gcHJvdmlkZXMgYSB2ZXJ5IHNpbWlsYXIKKyAgZnVuY3Rpb24sIHNvIGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBhbmQgaGFzIGJlZW4gZGVwcmVjYXRlZC4KKworICAoUHJvcG9zZWQgaW4gaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNTMwOTQ7IGltcGxlbWVudGVkIGJ5CisgIEdlb3JnIEJyYW5kbC4pCisKKyogQ29udmVyc2lvbnMgYmV0d2VlbiBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFuZCBzdHJpbmdzIGFyZQorICBub3cgY29ycmVjdGx5IHJvdW5kZWQgb24gbW9zdCBwbGF0Zm9ybXMuICBUaGVzZSBjb252ZXJzaW9ucyBvY2N1cgorICBpbiBtYW55IGRpZmZlcmVudCBwbGFjZXM6IDpmdW5jOmBzdHJgIG9uCisgIGZsb2F0cyBhbmQgY29tcGxleCBudW1iZXJzOyB0aGUgOmNsYXNzOmBmbG9hdGAgYW5kIDpjbGFzczpgY29tcGxleGAKKyAgY29uc3RydWN0b3JzOworICBudW1lcmljIGZvcm1hdHRpbmc7IHNlcmlhbGl6aW5nIGFuZAorICBkZXNlcmlhbGl6aW5nIGZsb2F0cyBhbmQgY29tcGxleCBudW1iZXJzIHVzaW5nIHRoZQorICA6bW9kOmBtYXJzaGFsYCwgOm1vZDpgcGlja2xlYAorICBhbmQgOm1vZDpganNvbmAgbW9kdWxlczsKKyAgcGFyc2luZyBvZiBmbG9hdCBhbmQgaW1hZ2luYXJ5IGxpdGVyYWxzIGluIFB5dGhvbiBjb2RlOworICBhbmQgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYC10by1mbG9hdCBjb252ZXJzaW9uLgorCisgIFJlbGF0ZWQgdG8gdGhpcywgdGhlIDpmdW5jOmByZXByYCBvZiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciAqeCoKKyAgbm93IHJldHVybnMgYSByZXN1bHQgYmFzZWQgb24gdGhlIHNob3J0ZXN0IGRlY2ltYWwgc3RyaW5nIHRoYXQncworICBndWFyYW50ZWVkIHRvIHJvdW5kIGJhY2sgdG8gKngqIHVuZGVyIGNvcnJlY3Qgcm91bmRpbmcgKHdpdGgKKyAgcm91bmQtaGFsZi10by1ldmVuIHJvdW5kaW5nIG1vZGUpLiAgUHJldmlvdXNseSBpdCBnYXZlIGEgc3RyaW5nCisgIGJhc2VkIG9uIHJvdW5kaW5nIHggdG8gMTcgZGVjaW1hbCBkaWdpdHMuCisKKyAgLi4gbWF5YmUgYWRkIGFuIGV4YW1wbGU/CisKKyAgVGhlIHJvdW5kaW5nIGxpYnJhcnkgcmVzcG9uc2libGUgZm9yIHRoaXMgaW1wcm92ZW1lbnQgd29ya3Mgb24KKyAgV2luZG93cyBhbmQgb24gVW5peCBwbGF0Zm9ybXMgdXNpbmcgdGhlIGdjYywgaWNjLCBvciBzdW5jYworICBjb21waWxlcnMuICBUaGVyZSBtYXkgYmUgYSBzbWFsbCBudW1iZXIgb2YgcGxhdGZvcm1zIHdoZXJlIGNvcnJlY3QKKyAgb3BlcmF0aW9uIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgZ3VhcmFudGVlZCwgc28gdGhlIGNvZGUgaXMgbm90CisgIHVzZWQgb24gc3VjaCBzeXN0ZW1zLiAgWW91IGNhbiBmaW5kIG91dCB3aGljaCBjb2RlIGlzIGJlaW5nIHVzZWQKKyAgYnkgY2hlY2tpbmcgOmRhdGE6YHN5cy5mbG9hdF9yZXByX3N0eWxlYCwgIHdoaWNoIHdpbGwgYmUgYGBzaG9ydGBgCisgIGlmIHRoZSBuZXcgY29kZSBpcyBpbiB1c2UgYW5kIGBgbGVnYWN5YGAgaWYgaXQgaXNuJ3QuCisKKyAgSW1wbGVtZW50ZWQgYnkgRXJpYyBTbWl0aCBhbmQgTWFyayBEaWNraW5zb24sIHVzaW5nIERhdmlkIEdheSdzCisgIDpmaWxlOmBkdG9hLmNgIGxpYnJhcnk7IDppc3N1ZTpgNzExN2AuCisKKyogQ29udmVyc2lvbnMgZnJvbSBsb25nIGludGVnZXJzIGFuZCByZWd1bGFyIGludGVnZXJzIHRvIGZsb2F0aW5nCisgIHBvaW50IG5vdyByb3VuZCBkaWZmZXJlbnRseSwgcmV0dXJuaW5nIHRoZSBmbG9hdGluZy1wb2ludCBudW1iZXIKKyAgY2xvc2VzdCB0byB0aGUgbnVtYmVyLiAgVGhpcyBkb2Vzbid0IG1hdHRlciBmb3Igc21hbGwgaW50ZWdlcnMgdGhhdAorICBjYW4gYmUgY29udmVydGVkIGV4YWN0bHksIGJ1dCBmb3IgbGFyZ2UgbnVtYmVycyB0aGF0IHdpbGwKKyAgdW5hdm9pZGFibHkgbG9zZSBwcmVjaXNpb24sIFB5dGhvbiAyLjcgbm93IGFwcHJveGltYXRlcyBtb3JlCisgIGNsb3NlbHkuICBGb3IgZXhhbXBsZSwgUHl0aG9uIDIuNiBjb21wdXRlZCB0aGUgZm9sbG93aW5nOjoKKworICAgID4+PiBuID0gMjk1MTQ3OTA1MTc5MzUyODkxMzkxCisgICAgPj4+IGZsb2F0KG4pCisgICAgMi45NTE0NzkwNTE3OTM1MjgzZSsyMAorICAgID4+PiBuIC0gbG9uZyhmbG9hdChuKSkKKyAgICA2NTUzNUwKKworICBQeXRob24gMi43J3MgZmxvYXRpbmctcG9pbnQgcmVzdWx0IGlzIGxhcmdlciwgYnV0IG11Y2ggY2xvc2VyIHRvIHRoZQorICB0cnVlIHZhbHVlOjoKKworICAgID4+PiBuID0gMjk1MTQ3OTA1MTc5MzUyODkxMzkxCisgICAgPj4+IGZsb2F0KG4pCisgICAgMi45NTE0NzkwNTE3OTM1Mjg5ZSsyMAorICAgID4+PiBuIC0gbG9uZyhmbG9hdChuKSkKKyAgICAtMUwKKworICAoSW1wbGVtZW50ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgMzE2NmAuKQorCisgIEludGVnZXIgZGl2aXNpb24gaXMgYWxzbyBtb3JlIGFjY3VyYXRlIGluIGl0cyByb3VuZGluZyBiZWhhdmlvdXJzLiAgKEFsc28KKyAgaW1wbGVtZW50ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgMTgxMWAuKQorCisqIEltcGxpY2l0IGNvZXJjaW9uIGZvciBjb21wbGV4IG51bWJlcnMgaGFzIGJlZW4gcmVtb3ZlZDsgdGhlIGludGVycHJldGVyCisgIHdpbGwgbm8gbG9uZ2VyIGV2ZXIgYXR0ZW1wdCB0byBjYWxsIGEgOm1ldGg6YF9fY29lcmNlX19gIG1ldGhvZCBvbiBjb21wbGV4CisgIG9iamVjdHMuICAoUmVtb3ZlZCBieSBNZWFkb3IgSW5nZSBhbmQgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNTIxMWAuKQorCisqIFRoZSA6bWV0aDpgc3RyLmZvcm1hdGAgbWV0aG9kIG5vdyBzdXBwb3J0cyBhdXRvbWF0aWMgbnVtYmVyaW5nIG9mIHRoZSByZXBsYWNlbWVudAorICBmaWVsZHMuICBUaGlzIG1ha2VzIHVzaW5nIDptZXRoOmBzdHIuZm9ybWF0YCBtb3JlIGNsb3NlbHkgcmVzZW1ibGUgdXNpbmcKKyAgYGAlc2BgIGZvcm1hdHRpbmc6OgorCisgICAgPj4+ICd7fTp7fTp7fScuZm9ybWF0KDIwMDksIDA0LCAnU3VuZGF5JykKKyAgICAnMjAwOTo0OlN1bmRheScKKyAgICA+Pj4gJ3t9Ont9OntkYXl9Jy5mb3JtYXQoMjAwOSwgNCwgZGF5PSdTdW5kYXknKQorICAgICcyMDA5OjQ6U3VuZGF5JworCisgIFRoZSBhdXRvLW51bWJlcmluZyB0YWtlcyB0aGUgZmllbGRzIGZyb20gbGVmdCB0byByaWdodCwgc28gdGhlIGZpcnN0IGBgey4uLn1gYAorICBzcGVjaWZpZXIgd2lsbCB1c2UgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIDptZXRoOmBzdHIuZm9ybWF0YCwgdGhlIG5leHQKKyAgc3BlY2lmaWVyIHdpbGwgdXNlIHRoZSBuZXh0IGFyZ3VtZW50LCBhbmQgc28gb24uICBZb3UgY2FuJ3QgbWl4IGF1dG8tbnVtYmVyaW5nCisgIGFuZCBleHBsaWNpdCBudW1iZXJpbmcgLS0gZWl0aGVyIG51bWJlciBhbGwgb2YgeW91ciBzcGVjaWZpZXIgZmllbGRzIG9yIG5vbmUKKyAgb2YgdGhlbSAtLSBidXQgeW91IGNhbiBtaXggYXV0by1udW1iZXJpbmcgYW5kIG5hbWVkIGZpZWxkcywgYXMgaW4gdGhlIHNlY29uZAorICBleGFtcGxlIGFib3ZlLiAgKENvbnRyaWJ1dGVkIGJ5IEVyaWMgU21pdGg7IDppc3N1ZTpgNTIzN2AuKQorCisgIENvbXBsZXggbnVtYmVycyBub3cgY29ycmVjdGx5IHN1cHBvcnQgdXNhZ2Ugd2l0aCA6ZnVuYzpgZm9ybWF0YCwKKyAgYW5kIGRlZmF1bHQgdG8gYmVpbmcgcmlnaHQtYWxpZ25lZC4KKyAgU3BlY2lmeWluZyBhIHByZWNpc2lvbiBvciBjb21tYS1zZXBhcmF0aW9uIGFwcGxpZXMgdG8gYm90aCB0aGUgcmVhbAorICBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIHRoZSBudW1iZXIsIGJ1dCBhIHNwZWNpZmllZCBmaWVsZCB3aWR0aCBhbmQKKyAgYWxpZ25tZW50IGlzIGFwcGxpZWQgdG8gdGhlIHdob2xlIG9mIHRoZSByZXN1bHRpbmcgYGAxLjUrM2pgYAorICBvdXRwdXQuICAoQ29udHJpYnV0ZWQgYnkgRXJpYyBTbWl0aDsgOmlzc3VlOmAxNTg4YCBhbmQgOmlzc3VlOmA3OTg4YC4pCisKKyAgVGhlICdGJyBmb3JtYXQgY29kZSBub3cgYWx3YXlzIGZvcm1hdHMgaXRzIG91dHB1dCB1c2luZyB1cHBlcmNhc2UgY2hhcmFjdGVycywKKyAgc28gaXQgd2lsbCBub3cgcHJvZHVjZSAnSU5GJyBhbmQgJ05BTicuCisgIChDb250cmlidXRlZCBieSBFcmljIFNtaXRoOyA6aXNzdWU6YDMzODJgLikKKworICBBIGxvdy1sZXZlbCBjaGFuZ2U6IHRoZSA6bWV0aDpgb2JqZWN0Ll9fZm9ybWF0X19gIG1ldGhvZCBub3cgdHJpZ2dlcnMKKyAgYSA6ZXhjOmBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nYCBpZiBpdCdzIHBhc3NlZCBhIGZvcm1hdCBzdHJpbmcsCisgIGJlY2F1c2UgdGhlIDptZXRoOmBfX2Zvcm1hdF9fYCBtZXRob2QgZm9yIDpjbGFzczpgb2JqZWN0YCBjb252ZXJ0cworICB0aGUgb2JqZWN0IHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFuZCBmb3JtYXRzIHRoYXQuICBQcmV2aW91c2x5CisgIHRoZSBtZXRob2Qgc2lsZW50bHkgYXBwbGllZCB0aGUgZm9ybWF0IHN0cmluZyB0byB0aGUgc3RyaW5nCisgIHJlcHJlc2VudGF0aW9uLCBidXQgdGhhdCBjb3VsZCBoaWRlIG1pc3Rha2VzIGluIFB5dGhvbiBjb2RlLiAgSWYKKyAgeW91J3JlIHN1cHBseWluZyBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIHN1Y2ggYXMgYW4gYWxpZ25tZW50IG9yCisgIHByZWNpc2lvbiwgcHJlc3VtYWJseSB5b3UncmUgZXhwZWN0aW5nIHRoZSBmb3JtYXR0aW5nIHRvIGJlIGFwcGxpZWQKKyAgaW4gc29tZSBvYmplY3Qtc3BlY2lmaWMgd2F5LiAgKEZpeGVkIGJ5IEVyaWMgU21pdGg7IDppc3N1ZTpgNzk5NGAuKQorCisqIFRoZSA6ZnVuYzpgaW50YCBhbmQgOmZ1bmM6YGxvbmdgIHR5cGVzIGdhaW5lZCBhIGBgYml0X2xlbmd0aGBgCisgIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQKKyAgaXRzIGFyZ3VtZW50IGluIGJpbmFyeTo6CisKKyAgICAgID4+PiBuID0gMzcKKyAgICAgID4+PiBiaW4obikKKyAgICAgICcwYjEwMDEwMScKKyAgICAgID4+PiBuLmJpdF9sZW5ndGgoKQorICAgICAgNgorICAgICAgPj4+IG4gPSAyKioxMjMtMQorICAgICAgPj4+IG4uYml0X2xlbmd0aCgpCisgICAgICAxMjMKKyAgICAgID4+PiAobisxKS5iaXRfbGVuZ3RoKCkKKyAgICAgIDEyNAorCisgIChDb250cmlidXRlZCBieSBGcmVkcmlrIEpvaGFuc3NvbiBhbmQgVmljdG9yIFN0aW5uZXI7IDppc3N1ZTpgMzQzOWAuKQorCisqIFRoZSA6a2V5d29yZDpgaW1wb3J0YCBzdGF0ZW1lbnQgd2lsbCBubyBsb25nZXIgdHJ5IGEgcmVsYXRpdmUgaW1wb3J0CisgIGlmIGFuIGFic29sdXRlIGltcG9ydCAoZS5nLiBgYGZyb20gLm9zIGltcG9ydCBzZXBgYCkgZmFpbHMuICBUaGlzCisgIGZpeGVzIGEgYnVnLCBidXQgY291bGQgcG9zc2libHkgYnJlYWsgY2VydGFpbiA6a2V5d29yZDpgaW1wb3J0YAorICBzdGF0ZW1lbnRzIHRoYXQgd2VyZSBvbmx5IHdvcmtpbmcgYnkgYWNjaWRlbnQuICAoRml4ZWQgYnkgTWVhZG9yIEluZ2U7CisgIDppc3N1ZTpgNzkwMmAuKQorCisqIEl0J3Mgbm93IHBvc3NpYmxlIGZvciBhIHN1YmNsYXNzIG9mIHRoZSBidWlsdC1pbiA6Y2xhc3M6YHVuaWNvZGVgIHR5cGUKKyAgdG8gb3ZlcnJpZGUgdGhlIDptZXRoOmBfX3VuaWNvZGVfX2AgbWV0aG9kLiAgKEltcGxlbWVudGVkIGJ5CisgIFZpY3RvciBTdGlubmVyOyA6aXNzdWU6YDE1ODM4NjNgLikKKworKiBUaGUgOmNsYXNzOmBieXRlYXJyYXlgIHR5cGUncyA6bWV0aDpgfmJ5dGVhcnJheS50cmFuc2xhdGVgIG1ldGhvZCBub3cgYWNjZXB0cworICBgYE5vbmVgYCBhcyBpdHMgZmlyc3QgYXJndW1lbnQuICAoRml4ZWQgYnkgR2VvcmcgQnJhbmRsOworICA6aXNzdWU6YDQ3NTlgLikKKworICAuLiBYWFggYnl0ZWFycmF5IGRvZXNuJ3Qgc2VlbSB0byBiZSBkb2N1bWVudGVkCisKKyogV2hlbiB1c2luZyBgYEBjbGFzc21ldGhvZGBgIGFuZCBgYEBzdGF0aWNtZXRob2RgYCB0byB3cmFwCisgIG1ldGhvZHMgYXMgY2xhc3Mgb3Igc3RhdGljIG1ldGhvZHMsIHRoZSB3cmFwcGVyIG9iamVjdCBub3cKKyAgZXhwb3NlcyB0aGUgd3JhcHBlZCBmdW5jdGlvbiBhcyB0aGVpciA6YXR0cjpgX19mdW5jX19gIGF0dHJpYnV0ZS4KKyAgKENvbnRyaWJ1dGVkIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjLCBhZnRlciBhIHN1Z2dlc3Rpb24gYnkKKyAgR2VvcmdlIFNha2tpczsgOmlzc3VlOmA1OTgyYC4pCisKKyogV2hlbiBhIHJlc3RyaWN0ZWQgc2V0IG9mIGF0dHJpYnV0ZXMgd2VyZSBzZXQgdXNpbmcgYGBfX3Nsb3RzX19gYCwKKyAgZGVsZXRpbmcgYW4gdW5zZXQgYXR0cmlidXRlIHdvdWxkIG5vdCByYWlzZSA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAKKyAgYXMgeW91IHdvdWxkIGV4cGVjdC4gIEZpeGVkIGJ5IEJlbmphbWluIFBldGVyc29uOyA6aXNzdWU6YDc2MDRgLikKKworKiBUd28gbmV3IGVuY29kaW5ncyBhcmUgbm93IHN1cHBvcnRlZDogImNwNzIwIiwgdXNlZCBwcmltYXJpbHkgZm9yCisgIEFyYWJpYyB0ZXh0OyBhbmQgImNwODU4IiwgYSB2YXJpYW50IG9mIENQIDg1MCB0aGF0IGFkZHMgdGhlIGV1cm8KKyAgc3ltYm9sLiAgKENQNzIwIGNvbnRyaWJ1dGVkIGJ5IEFsZXhhbmRlciBCZWxjaGVua28gYW5kIEFtYXVyeQorICBGb3JnZW90IGQnQXJjIGluIDppc3N1ZTpgMTYxNjk3OWA7IENQODU4IGNvbnRyaWJ1dGVkIGJ5IFRpbSBIYXRjaCBpbgorICA6aXNzdWU6YDgwMTZgLikKKworKiBUaGUgOmNsYXNzOmBmaWxlYCBvYmplY3Qgd2lsbCBub3cgc2V0IHRoZSA6YXR0cjpgZmlsZW5hbWVgIGF0dHJpYnV0ZQorICBvbiB0aGUgOmV4YzpgSU9FcnJvcmAgZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIG9wZW4gYSBkaXJlY3RvcnkKKyAgb24gUE9TSVggcGxhdGZvcm1zIChub3RlZCBieSBKYW4gS2FsaXN6ZXdza2k7IDppc3N1ZTpgNDc2NGApLCBhbmQKKyAgbm93IGV4cGxpY2l0bHkgY2hlY2tzIGZvciBhbmQgZm9yYmlkcyB3cml0aW5nIHRvIHJlYWQtb25seSBmaWxlIG9iamVjdHMKKyAgaW5zdGVhZCBvZiB0cnVzdGluZyB0aGUgQyBsaWJyYXJ5IHRvIGNhdGNoIGFuZCByZXBvcnQgdGhlIGVycm9yCisgIChmaXhlZCBieSBTdGVmYW4gS3JhaDsgOmlzc3VlOmA1Njc3YCkuCisKKyogVGhlIFB5dGhvbiB0b2tlbml6ZXIgbm93IHRyYW5zbGF0ZXMgbGluZSBlbmRpbmdzIGl0c2VsZiwgc28gdGhlCisgIDpmdW5jOmBjb21waWxlYCBidWlsdC1pbiBmdW5jdGlvbiBub3cgYWNjZXB0cyBjb2RlIHVzaW5nIGFueQorICBsaW5lLWVuZGluZyBjb252ZW50aW9uLiAgQWRkaXRpb25hbGx5LCBpdCBubyBsb25nZXIgcmVxdWlyZXMgdGhhdCB0aGUKKyAgY29kZSBlbmQgaW4gYSBuZXdsaW5lLgorCisqIEV4dHJhIHBhcmVudGhlc2VzIGluIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFyZSBpbGxlZ2FsIGluIFB5dGhvbiAzLngsCisgIG1lYW5pbmcgdGhhdCB5b3UgZ2V0IGEgc3ludGF4IGVycm9yIGZyb20gYGBkZWYgZigoeCkpOiBwYXNzYGAuICBJbgorICBQeXRob24zLXdhcm5pbmcgbW9kZSwgUHl0aG9uIDIuNyB3aWxsIG5vdyB3YXJuIGFib3V0IHRoaXMgb2RkIHVzYWdlLgorICAoTm90ZWQgYnkgSmFtZXMgTGluZ2FyZDsgOmlzc3VlOmA3MzYyYC4pCisKKyogSXQncyBub3cgcG9zc2libGUgdG8gY3JlYXRlIHdlYWsgcmVmZXJlbmNlcyB0byBvbGQtc3R5bGUgY2xhc3MKKyAgb2JqZWN0cy4gIE5ldy1zdHlsZSBjbGFzc2VzIHdlcmUgYWx3YXlzIHdlYWstcmVmZXJlbmNlYWJsZS4gIChGaXhlZAorICBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA4MjY4YC4pCisKKyogV2hlbiBhIG1vZHVsZSBvYmplY3QgaXMgZ2FyYmFnZS1jb2xsZWN0ZWQsIHRoZSBtb2R1bGUncyBkaWN0aW9uYXJ5IGlzCisgIG5vdyBvbmx5IGNsZWFyZWQgaWYgbm8gb25lIGVsc2UgaXMgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUKKyAgZGljdGlvbmFyeSAoOmlzc3VlOmA3MTQwYCkuCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gX25ldy0yNy1pbnRlcnByZXRlcjoKKworSW50ZXJwcmV0ZXIgQ2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIG5ldyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgOmVudnZhcjpgUFlUSE9OV0FSTklOR1NgLAorYWxsb3dzIGNvbnRyb2xsaW5nIHdhcm5pbmdzLiAgSXQgc2hvdWxkIGJlIHNldCB0byBhIHN0cmluZworY29udGFpbmluZyB3YXJuaW5nIHNldHRpbmdzLCBlcXVpdmFsZW50IHRvIHRob3NlCit1c2VkIHdpdGggdGhlIDpvcHRpb246YC1XYCBzd2l0Y2gsIHNlcGFyYXRlZCBieSBjb21tYXMuCisoQ29udHJpYnV0ZWQgYnkgQnJpYW4gQ3VydGluOyA6aXNzdWU6YDczMDFgLikKKworRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0dGluZyB3aWxsIHByaW50IHdhcm5pbmdzIGV2ZXJ5IHRpbWUKK3RoZXkgb2NjdXIsIGJ1dCB0dXJuIHdhcm5pbmdzIGZyb20gdGhlIDptb2Q6YENvb2tpZWAgbW9kdWxlIGludG8gYW4KK2Vycm9yLiAgKFRoZSBleGFjdCBzeW50YXggZm9yIHNldHRpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdmFyaWVzCithY3Jvc3Mgb3BlcmF0aW5nIHN5c3RlbXMgYW5kIHNoZWxscy4pCisKKzo6CisKKyAgZXhwb3J0IFBZVEhPTldBUk5JTkdTPWFsbCxlcnJvcjo6OkNvb2tpZTowCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitPcHRpbWl6YXRpb25zCistLS0tLS0tLS0tLS0tCisKK1NldmVyYWwgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzIGhhdmUgYmVlbiBhZGRlZDoKKworKiBBIG5ldyBvcGNvZGUgd2FzIGFkZGVkIHRvIHBlcmZvcm0gdGhlIGluaXRpYWwgc2V0dXAgZm9yCisgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnRzLCBsb29raW5nIHVwIHRoZSA6bWV0aDpgX19lbnRlcl9fYCBhbmQKKyAgOm1ldGg6YF9fZXhpdF9fYCBtZXRob2RzLiAgKENvbnRyaWJ1dGVkIGJ5IEJlbmphbWluIFBldGVyc29uLikKKworKiBUaGUgZ2FyYmFnZSBjb2xsZWN0b3Igbm93IHBlcmZvcm1zIGJldHRlciBmb3Igb25lIGNvbW1vbiB1c2FnZQorICBwYXR0ZXJuOiB3aGVuIG1hbnkgb2JqZWN0cyBhcmUgYmVpbmcgYWxsb2NhdGVkIHdpdGhvdXQgZGVhbGxvY2F0aW5nCisgIGFueSBvZiB0aGVtLiAgVGhpcyB3b3VsZCBwcmV2aW91c2x5IHRha2UgcXVhZHJhdGljCisgIHRpbWUgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbiwgYnV0IG5vdyB0aGUgbnVtYmVyIG9mIGZ1bGwgZ2FyYmFnZSBjb2xsZWN0aW9ucworICBpcyByZWR1Y2VkIGFzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBvbiB0aGUgaGVhcCBncm93cy4KKyAgVGhlIG5ldyBsb2dpYyBvbmx5IHBlcmZvcm1zIGEgZnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzcyB3aGVuCisgIHRoZSBtaWRkbGUgZ2VuZXJhdGlvbiBoYXMgYmVlbiBjb2xsZWN0ZWQgMTAgdGltZXMgYW5kIHdoZW4gdGhlCisgIG51bWJlciBvZiBzdXJ2aXZvciBvYmplY3RzIGZyb20gdGhlIG1pZGRsZSBnZW5lcmF0aW9uIGV4Y2VlZHMgMTAlIG9mCisgIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgb2xkZXN0IGdlbmVyYXRpb24uICAoU3VnZ2VzdGVkIGJ5IE1hcnRpbgorICB2b24gTMO2d2lzIGFuZCBpbXBsZW1lbnRlZCBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA0MDc0YC4pCisKKyogVGhlIGdhcmJhZ2UgY29sbGVjdG9yIHRyaWVzIHRvIGF2b2lkIHRyYWNraW5nIHNpbXBsZSBjb250YWluZXJzCisgIHdoaWNoIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZS4gSW4gUHl0aG9uIDIuNywgdGhpcyBpcyBub3cgdHJ1ZSBmb3IKKyAgdHVwbGVzIGFuZCBkaWN0cyBjb250YWluaW5nIGF0b21pYyB0eXBlcyAoc3VjaCBhcyBpbnRzLCBzdHJpbmdzLAorICBldGMuKS4gVHJhbnNpdGl2ZWx5LCBhIGRpY3QgY29udGFpbmluZyB0dXBsZXMgb2YgYXRvbWljIHR5cGVzIHdvbid0CisgIGJlIHRyYWNrZWQgZWl0aGVyLiBUaGlzIGhlbHBzIHJlZHVjZSB0aGUgY29zdCBvZiBlYWNoCisgIGdhcmJhZ2UgY29sbGVjdGlvbiBieSBkZWNyZWFzaW5nIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBiZQorICBjb25zaWRlcmVkIGFuZCB0cmF2ZXJzZWQgYnkgdGhlIGNvbGxlY3Rvci4KKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDQ2ODhgLikKKworKiBMb25nIGludGVnZXJzIGFyZSBub3cgc3RvcmVkIGludGVybmFsbHkgZWl0aGVyIGluIGJhc2UgMioqMTUgb3IgaW4gYmFzZQorICAyKiozMCwgdGhlIGJhc2UgYmVpbmcgZGV0ZXJtaW5lZCBhdCBidWlsZCB0aW1lLiAgUHJldmlvdXNseSwgdGhleQorICB3ZXJlIGFsd2F5cyBzdG9yZWQgaW4gYmFzZSAyKioxNS4gIFVzaW5nIGJhc2UgMioqMzAgZ2l2ZXMKKyAgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIG9uIDY0LWJpdCBtYWNoaW5lcywgYnV0CisgIGJlbmNobWFyayByZXN1bHRzIG9uIDMyLWJpdCBtYWNoaW5lcyBoYXZlIGJlZW4gbWl4ZWQuICBUaGVyZWZvcmUsCisgIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSBiYXNlIDIqKjMwIG9uIDY0LWJpdCBtYWNoaW5lcyBhbmQgYmFzZSAyKioxNQorICBvbiAzMi1iaXQgbWFjaGluZXM7IG9uIFVuaXgsIHRoZXJlJ3MgYSBuZXcgY29uZmlndXJlIG9wdGlvbgorICA6b3B0aW9uOmAtLWVuYWJsZS1iaWctZGlnaXRzYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdC4KKworICBBcGFydCBmcm9tIHRoZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgdGhpcyBjaGFuZ2Ugc2hvdWxkIGJlCisgIGludmlzaWJsZSB0byBlbmQgdXNlcnMsIHdpdGggb25lIGV4Y2VwdGlvbjogZm9yIHRlc3RpbmcgYW5kCisgIGRlYnVnZ2luZyBwdXJwb3NlcyB0aGVyZSdzIGEgbmV3IHN0cnVjdHNlcSA6ZGF0YTpgc3lzLmxvbmdfaW5mb2AgdGhhdAorICBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZXJuYWwgZm9ybWF0LCBnaXZpbmcgdGhlIG51bWJlciBvZgorICBiaXRzIHBlciBkaWdpdCBhbmQgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIEMgdHlwZSB1c2VkIHRvIHN0b3JlCisgIGVhY2ggZGlnaXQ6OgorCisgICAgID4+PiBpbXBvcnQgc3lzCisgICAgID4+PiBzeXMubG9uZ19pbmZvCisgICAgIHN5cy5sb25nX2luZm8oYml0c19wZXJfZGlnaXQ9MzAsIHNpemVvZl9kaWdpdD00KQorCisgIChDb250cmlidXRlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA0MjU4YC4pCisKKyAgQW5vdGhlciBzZXQgb2YgY2hhbmdlcyBtYWRlIGxvbmcgb2JqZWN0cyBhIGZldyBieXRlcyBzbWFsbGVyOiAyIGJ5dGVzCisgIHNtYWxsZXIgb24gMzItYml0IHN5c3RlbXMgYW5kIDYgYnl0ZXMgb24gNjQtYml0LgorICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNTI2MGAuKQorCisqIFRoZSBkaXZpc2lvbiBhbGdvcml0aG0gZm9yIGxvbmcgaW50ZWdlcnMgaGFzIGJlZW4gbWFkZSBmYXN0ZXIKKyAgYnkgdGlnaHRlbmluZyB0aGUgaW5uZXIgbG9vcCwgZG9pbmcgc2hpZnRzIGluc3RlYWQgb2YgbXVsdGlwbGljYXRpb25zLAorICBhbmQgZml4aW5nIGFuIHVubmVjZXNzYXJ5IGV4dHJhIGl0ZXJhdGlvbi4KKyAgVmFyaW91cyBiZW5jaG1hcmtzIHNob3cgc3BlZWR1cHMgb2YgYmV0d2VlbiA1MCUgYW5kIDE1MCUgZm9yIGxvbmcKKyAgaW50ZWdlciBkaXZpc2lvbnMgYW5kIG1vZHVsbyBvcGVyYXRpb25zLgorICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNTUxMmAuKQorICBCaXR3aXNlIG9wZXJhdGlvbnMgYXJlIGFsc28gc2lnbmlmaWNhbnRseSBmYXN0ZXIgKGluaXRpYWwgcGF0Y2ggYnkKKyAgR3JlZ29yeSBTbWl0aDsgOmlzc3VlOmAxMDg3NDE4YCkuCisKKyogVGhlIGltcGxlbWVudGF0aW9uIG9mIGBgJWBgIGNoZWNrcyBmb3IgdGhlIGxlZnQtc2lkZSBvcGVyYW5kIGJlaW5nCisgIGEgUHl0aG9uIHN0cmluZyBhbmQgc3BlY2lhbC1jYXNlcyBpdDsgdGhpcyByZXN1bHRzIGluIGEgMS0zJQorICBwZXJmb3JtYW5jZSBpbmNyZWFzZSBmb3IgYXBwbGljYXRpb25zIHRoYXQgZnJlcXVlbnRseSB1c2UgYGAlYGAKKyAgd2l0aCBzdHJpbmdzLCBzdWNoIGFzIHRlbXBsYXRpbmcgbGlicmFyaWVzLgorICAoSW1wbGVtZW50ZWQgYnkgQ29sbGluIFdpbnRlcjsgOmlzc3VlOmA1MTc2YC4pCisKKyogTGlzdCBjb21wcmVoZW5zaW9ucyB3aXRoIGFuIGBgaWZgYCBjb25kaXRpb24gYXJlIGNvbXBpbGVkIGludG8KKyAgZmFzdGVyIGJ5dGVjb2RlLiAgKFBhdGNoIGJ5IEFudG9pbmUgUGl0cm91LCBiYWNrLXBvcnRlZCB0byAyLjcKKyAgYnkgSmVmZnJleSBZYXNza2luOyA6aXNzdWU6YDQ3MTVgLikKKworKiBDb252ZXJ0aW5nIGFuIGludGVnZXIgb3IgbG9uZyBpbnRlZ2VyIHRvIGEgZGVjaW1hbCBzdHJpbmcgd2FzIG1hZGUKKyAgZmFzdGVyIGJ5IHNwZWNpYWwtY2FzaW5nIGJhc2UgMTAgaW5zdGVhZCBvZiB1c2luZyBhIGdlbmVyYWxpemVkCisgIGNvbnZlcnNpb24gZnVuY3Rpb24gdGhhdCBzdXBwb3J0cyBhcmJpdHJhcnkgYmFzZXMuCisgIChQYXRjaCBieSBHYXdhaW4gQm9sdG9uOyA6aXNzdWU6YDY3MTNgLikKKworKiBUaGUgOm1ldGg6YHNwbGl0YCwgOm1ldGg6YHJlcGxhY2VgLCA6bWV0aDpgcmluZGV4YCwKKyAgOm1ldGg6YHJwYXJ0aXRpb25gLCBhbmQgOm1ldGg6YHJzcGxpdGAgbWV0aG9kcyBvZiBzdHJpbmctbGlrZSB0eXBlcworICAoc3RyaW5ncywgVW5pY29kZSBzdHJpbmdzLCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIG9iamVjdHMpIG5vdyB1c2UgYQorICBmYXN0IHJldmVyc2Utc2VhcmNoIGFsZ29yaXRobSBpbnN0ZWFkIG9mIGEgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlcgorICBzY2FuLiAgVGhpcyBpcyBzb21ldGltZXMgZmFzdGVyIGJ5IGEgZmFjdG9yIG9mIDEwLiAgKEFkZGVkIGJ5CisgIEZsb3JlbnQgWGljbHVuYTsgOmlzc3VlOmA3NDYyYCBhbmQgOmlzc3VlOmA3NjIyYC4pCisKKyogVGhlIDptb2Q6YHBpY2tsZWAgYW5kIDptb2Q6YGNQaWNrbGVgIG1vZHVsZXMgbm93IGF1dG9tYXRpY2FsbHkKKyAgaW50ZXJuIHRoZSBzdHJpbmdzIHVzZWQgZm9yIGF0dHJpYnV0ZSBuYW1lcywgcmVkdWNpbmcgbWVtb3J5IHVzYWdlCisgIG9mIHRoZSBvYmplY3RzIHJlc3VsdGluZyBmcm9tIHVucGlja2xpbmcuICAoQ29udHJpYnV0ZWQgYnkgSmFrZQorICBNY0d1aXJlOyA6aXNzdWU6YDUwODRgLikKKworKiBUaGUgOm1vZDpgY1BpY2tsZWAgbW9kdWxlIG5vdyBzcGVjaWFsLWNhc2VzIGRpY3Rpb25hcmllcywKKyAgbmVhcmx5IGhhbHZpbmcgdGhlIHRpbWUgcmVxdWlyZWQgdG8gcGlja2xlIHRoZW0uCisgIChDb250cmlidXRlZCBieSBDb2xsaW4gV2ludGVyOyA6aXNzdWU6YDU2NzBgLikKKworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXcgYW5kIEltcHJvdmVkIE1vZHVsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitBcyBpbiBldmVyeSByZWxlYXNlLCBQeXRob24ncyBzdGFuZGFyZCBsaWJyYXJ5IHJlY2VpdmVkIGEgbnVtYmVyIG9mCitlbmhhbmNlbWVudHMgYW5kIGJ1ZyBmaXhlcy4gIEhlcmUncyBhIHBhcnRpYWwgbGlzdCBvZiB0aGUgbW9zdCBub3RhYmxlCitjaGFuZ2VzLCBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgbW9kdWxlIG5hbWUuIENvbnN1bHQgdGhlCis6ZmlsZTpgTWlzYy9ORVdTYCBmaWxlIGluIHRoZSBzb3VyY2UgdHJlZSBmb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2YKK2NoYW5nZXMsIG9yIGxvb2sgdGhyb3VnaCB0aGUgU3VidmVyc2lvbiBsb2dzIGZvciBhbGwgdGhlIGRldGFpbHMuCisKKyogVGhlIDptb2Q6YGJkYmAgbW9kdWxlJ3MgYmFzZSBkZWJ1Z2dpbmcgY2xhc3MgOmNsYXNzOmB+YmRiLkJkYmAKKyAgZ2FpbmVkIGEgZmVhdHVyZSBmb3Igc2tpcHBpbmcgbW9kdWxlcy4gIFRoZSBjb25zdHJ1Y3RvcgorICBub3cgdGFrZXMgYW4gaXRlcmFibGUgY29udGFpbmluZyBnbG9iLXN0eWxlIHBhdHRlcm5zIHN1Y2ggYXMKKyAgYGBkamFuZ28uKmBgOyB0aGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIHN0YWNrIGZyYW1lcworICBmcm9tIGEgbW9kdWxlIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgcGF0dGVybnMuCisgIChDb250cmlidXRlZCBieSBNYXJ1IE5ld2J5IGFmdGVyIGEgc3VnZ2VzdGlvbiBieQorICBTZW50aGlsIEt1bWFyYW47IDppc3N1ZTpgNTE0MmAuKQorCisqIFRoZSA6bW9kOmBiaW5hc2NpaWAgbW9kdWxlIG5vdyBzdXBwb3J0cyB0aGUgYnVmZmVyIEFQSSwgc28gaXQgY2FuIGJlCisgIHVzZWQgd2l0aCA6Y2xhc3M6YG1lbW9yeXZpZXdgIGluc3RhbmNlcyBhbmQgb3RoZXIgc2ltaWxhciBidWZmZXIgb2JqZWN0cy4KKyAgKEJhY2twb3J0ZWQgZnJvbSAzLnggYnkgRmxvcmVudCBYaWNsdW5hOyA6aXNzdWU6YDc3MDNgLikKKworKiBVcGRhdGVkIG1vZHVsZTogdGhlIDptb2Q6YGJzZGRiYCBtb2R1bGUgaGFzIGJlZW4gdXBkYXRlZCBmcm9tIDQuNy4yZGV2ZWw5CisgIHRvIHZlcnNpb24gNC44LjQgb2YKKyAgYHRoZSBweWJzZGRiIHBhY2thZ2UgPGh0dHA6Ly93d3cuamNlYS5lcy9wcm9ncmFtYWNpb24vcHlic2RkYi5odG0+YF9fLgorICBUaGUgbmV3IHZlcnNpb24gZmVhdHVyZXMgYmV0dGVyIFB5dGhvbiAzLnggY29tcGF0aWJpbGl0eSwgdmFyaW91cyBidWcgZml4ZXMsCisgIGFuZCBhZGRzIHNldmVyYWwgbmV3IEJlcmtlbGV5REIgZmxhZ3MgYW5kIG1ldGhvZHMuCisgIChVcGRhdGVkIGJ5IEplc8O6cyBDZWEgQXZpw7NuOyA6aXNzdWU6YDgxNTZgLiAgVGhlIHB5YnNkZGIKKyAgY2hhbmdlbG9nIGNhbiBiZSByZWFkIGF0IGh0dHA6Ly9oZy5qY2VhLmVzL3B5YnNkZGIvZmlsZS90aXAvQ2hhbmdlTG9nLikKKworKiBUaGUgOm1vZDpgYnoyYCBtb2R1bGUncyA6Y2xhc3M6YH5iejIuQloyRmlsZWAgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0CisgIG1hbmFnZW1lbnQgcHJvdG9jb2wsIHNvIHlvdSBjYW4gd3JpdGUgYGB3aXRoIGJ6Mi5CWjJGaWxlKC4uLikgYXMgZjpgYC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEhhZ2VuIEbDvHJzdGVuYXU7IDppc3N1ZTpgMzg2MGAuKQorCisqIE5ldyBjbGFzczogdGhlIDpjbGFzczpgfmNvbGxlY3Rpb25zLkNvdW50ZXJgIGNsYXNzIGluIHRoZSA6bW9kOmBjb2xsZWN0aW9uc2AKKyAgbW9kdWxlIGlzIHVzZWZ1bCBmb3IgdGFsbHlpbmcgZGF0YS4gIDpjbGFzczpgfmNvbGxlY3Rpb25zLkNvdW50ZXJgIGluc3RhbmNlcworICBiZWhhdmUgbW9zdGx5IGxpa2UgZGljdGlvbmFyaWVzIGJ1dCByZXR1cm4gemVybyBmb3IgbWlzc2luZyBrZXlzIGluc3RlYWQgb2YKKyAgcmFpc2luZyBhIDpleGM6YEtleUVycm9yYDoKKworICAuLiBkb2N0ZXN0OjoKKyAgICAgOm9wdGlvbnM6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorCisgICAgID4+PiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCisgICAgID4+PiBjID0gQ291bnRlcigpCisgICAgID4+PiBmb3IgbGV0dGVyIGluICdoZXJlIGlzIGEgc2FtcGxlIG9mIGVuZ2xpc2ggdGV4dCc6CisgICAgIC4uLiAgIGNbbGV0dGVyXSArPSAxCisgICAgIC4uLgorICAgICA+Pj4gYworICAgICBDb3VudGVyKHsnICc6IDYsICdlJzogNSwgJ3MnOiAzLCAnYSc6IDIsICdpJzogMiwgJ2gnOiAyLAorICAgICAnbCc6IDIsICd0JzogMiwgJ2cnOiAxLCAnZic6IDEsICdtJzogMSwgJ28nOiAxLCAnbic6IDEsCisgICAgICdwJzogMSwgJ3InOiAxLCAneCc6IDF9KQorICAgICA+Pj4gY1snZSddCisgICAgIDUKKyAgICAgPj4+IGNbJ3onXQorICAgICAwCisKKyAgVGhlcmUgYXJlIHRocmVlIGFkZGl0aW9uYWwgOmNsYXNzOmB+Y29sbGVjdGlvbnMuQ291bnRlcmAgbWV0aG9kcy4KKyAgOm1ldGg6YH5jb2xsZWN0aW9ucy5Db3VudGVyLm1vc3RfY29tbW9uYCByZXR1cm5zIHRoZSBOIG1vc3QgY29tbW9uCisgIGVsZW1lbnRzIGFuZCB0aGVpciBjb3VudHMuICA6bWV0aDpgfmNvbGxlY3Rpb25zLkNvdW50ZXIuZWxlbWVudHNgCisgIHJldHVybnMgYW4gaXRlcmF0b3Igb3ZlciB0aGUgY29udGFpbmVkIGVsZW1lbnRzLCByZXBlYXRpbmcgZWFjaAorICBlbGVtZW50IGFzIG1hbnkgdGltZXMgYXMgaXRzIGNvdW50LgorICA6bWV0aDpgfmNvbGxlY3Rpb25zLkNvdW50ZXIuc3VidHJhY3RgIHRha2VzIGFuIGl0ZXJhYmxlIGFuZAorICBzdWJ0cmFjdHMgb25lIGZvciBlYWNoIGVsZW1lbnQgaW5zdGVhZCBvZiBhZGRpbmc7IGlmIHRoZSBhcmd1bWVudCBpcworICBhIGRpY3Rpb25hcnkgb3IgYW5vdGhlciA6Y2xhc3M6YENvdW50ZXJgLCB0aGUgY291bnRzIGFyZQorICBzdWJ0cmFjdGVkLiA6OgorCisgICAgPj4+IGMubW9zdF9jb21tb24oNSkKKyAgICBbKCcgJywgNiksICgnZScsIDUpLCAoJ3MnLCAzKSwgKCdhJywgMiksICgnaScsIDIpXQorICAgID4+PiBjLmVsZW1lbnRzKCkgLT4KKyAgICAgICAnYScsICdhJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywKKyAgICAgICAnZScsICdlJywgJ2UnLCAnZScsICdlJywgJ2cnLCAnZicsICdpJywgJ2knLAorICAgICAgICdoJywgJ2gnLCAnbScsICdsJywgJ2wnLCAnbycsICduJywgJ3AnLCAncycsCisgICAgICAgJ3MnLCAncycsICdyJywgJ3QnLCAndCcsICd4JworICAgID4+PiBjWydlJ10KKyAgICA1CisgICAgPj4+IGMuc3VidHJhY3QoJ3ZlcnkgaGVhdnkgb24gdGhlIGxldHRlciBlJykKKyAgICA+Pj4gY1snZSddICAgICMgQ291bnQgaXMgbm93IGxvd2VyCisgICAgLTEKKworICBDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmAxNjk2MTk5YC4KKworICAuLiByZXZpc2lvbiA3OTY2MAorCisgIE5ldyBjbGFzczogOmNsYXNzOmB+Y29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIGlzIGRlc2NyaWJlZCBpbiB0aGUgZWFybGllcgorICBzZWN0aW9uIDpyZWY6YHBlcC0wMzcyYC4KKworICBOZXcgbWV0aG9kOiBUaGUgOmNsYXNzOmB+Y29sbGVjdGlvbnMuZGVxdWVgIGRhdGEgdHlwZSBub3cgaGFzIGEKKyAgOm1ldGg6YH5jb2xsZWN0aW9ucy5kZXF1ZS5jb3VudGAgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCisgIGNvbnRhaW5lZCBlbGVtZW50cyBlcXVhbCB0byB0aGUgc3VwcGxpZWQgYXJndW1lbnQgKngqLCBhbmQgYQorICA6bWV0aDpgfmNvbGxlY3Rpb25zLmRlcXVlLnJldmVyc2VgIG1ldGhvZCB0aGF0IHJldmVyc2VzIHRoZSBlbGVtZW50cworICBvZiB0aGUgZGVxdWUgaW4tcGxhY2UuICA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5kZXF1ZWAgYWxzbyBleHBvc2VzIGl0cyBtYXhpbXVtCisgIGxlbmd0aCBhcyB0aGUgcmVhZC1vbmx5IDphdHRyOmB+Y29sbGVjdGlvbnMuZGVxdWUubWF4bGVuYCBhdHRyaWJ1dGUuCisgIChCb3RoIGZlYXR1cmVzIGFkZGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyLikKKworICBUaGUgOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgY2xhc3Mgbm93IGhhcyBhbiBvcHRpb25hbCAqcmVuYW1lKiBwYXJhbWV0ZXIuCisgIElmICpyZW5hbWUqIGlzIHRydWUsIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGludmFsaWQgYmVjYXVzZSB0aGV5J3ZlCisgIGJlZW4gcmVwZWF0ZWQgb3IgYXJlbid0IGxlZ2FsIFB5dGhvbiBpZGVudGlmaWVycyB3aWxsIGJlCisgIHJlbmFtZWQgdG8gbGVnYWwgbmFtZXMgdGhhdCBhcmUgZGVyaXZlZCBmcm9tIHRoZSBmaWVsZCdzCisgIHBvc2l0aW9uIHdpdGhpbiB0aGUgbGlzdCBvZiBmaWVsZHM6CisKKyAgICAgPj4+IGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKKyAgICAgPj4+IFQgPSBuYW1lZHR1cGxlKCdUJywgWydmaWVsZDEnLCAnJGlsbGVnYWwnLCAnZm9yJywgJ2ZpZWxkMiddLCByZW5hbWU9VHJ1ZSkKKyAgICAgPj4+IFQuX2ZpZWxkcworICAgICAoJ2ZpZWxkMScsICdfMScsICdfMicsICdmaWVsZDInKQorCisgIChBZGRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmAxODE4YC4pCisKKyAgRmluYWxseSwgdGhlIDpjbGFzczpgfmNvbGxlY3Rpb25zLk1hcHBpbmdgIGFic3RyYWN0IGJhc2UgY2xhc3Mgbm93CisgIHJldHVybnMgOmNvbnN0OmBOb3RJbXBsZW1lbnRlZGAgaWYgYSBtYXBwaW5nIGlzIGNvbXBhcmVkIHRvCisgIGFub3RoZXIgdHlwZSB0aGF0IGlzbid0IGEgOmNsYXNzOmBNYXBwaW5nYC4KKyAgKEZpeGVkIGJ5IERhbmllbCBTdHV0emJhY2g7IDppc3N1ZTpgODcyOWAuKQorCisqIENvbnN0cnVjdG9ycyBmb3IgdGhlIHBhcnNpbmcgY2xhc3NlcyBpbiB0aGUgOm1vZDpgQ29uZmlnUGFyc2VyYCBtb2R1bGUgbm93CisgIHRha2UgYSAqYWxsb3dfbm9fdmFsdWUqIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBmYWxzZTsgaWYgdHJ1ZSwKKyAgb3B0aW9ucyB3aXRob3V0IHZhbHVlcyB3aWxsIGJlIGFsbG93ZWQuICBGb3IgZXhhbXBsZTo6CisKKyAgICA+Pj4gaW1wb3J0IENvbmZpZ1BhcnNlciwgU3RyaW5nSU8KKyAgICA+Pj4gc2FtcGxlX2NvbmZpZyA9ICIiIgorICAgIC4uLiBbbXlzcWxkXQorICAgIC4uLiB1c2VyID0gbXlzcWwKKyAgICAuLi4gcGlkLWZpbGUgPSAvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnBpZAorICAgIC4uLiBza2lwLWJkYgorICAgIC4uLiAiIiIKKyAgICA+Pj4gY29uZmlnID0gQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlcihhbGxvd19ub192YWx1ZT1UcnVlKQorICAgID4+PiBjb25maWcucmVhZGZwKFN0cmluZ0lPLlN0cmluZ0lPKHNhbXBsZV9jb25maWcpKQorICAgID4+PiBjb25maWcuZ2V0KCdteXNxbGQnLCAndXNlcicpCisgICAgJ215c3FsJworICAgID4+PiBwcmludCBjb25maWcuZ2V0KCdteXNxbGQnLCAnc2tpcC1iZGInKQorICAgIE5vbmUKKyAgICA+Pj4gcHJpbnQgY29uZmlnLmdldCgnbXlzcWxkJywgJ3Vua25vd24nKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIE5vT3B0aW9uRXJyb3I6IE5vIG9wdGlvbiAndW5rbm93bicgaW4gc2VjdGlvbjogJ215c3FsZCcKKworICAoQ29udHJpYnV0ZWQgYnkgTWF0cyBLaW5kYWhsOyA6aXNzdWU6YDcwMDVgLikKKworKiBEZXByZWNhdGVkIGZ1bmN0aW9uOiA6ZnVuYzpgY29udGV4dGxpYi5uZXN0ZWRgLCB3aGljaCBhbGxvd3MKKyAgaGFuZGxpbmcgbW9yZSB0aGFuIG9uZSBjb250ZXh0IG1hbmFnZXIgd2l0aCBhIHNpbmdsZSA6a2V5d29yZDpgd2l0aGAKKyAgc3RhdGVtZW50LCBoYXMgYmVlbiBkZXByZWNhdGVkLCBiZWNhdXNlIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50CisgIG5vdyBzdXBwb3J0cyBtdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzLgorCisqIFRoZSA6bW9kOmBjb29raWVsaWJgIG1vZHVsZSBub3cgaWdub3JlcyBjb29raWVzIHRoYXQgaGF2ZSBhbiBpbnZhbGlkCisgIHZlcnNpb24gZmllbGQsIG9uZSB0aGF0IGRvZXNuJ3QgY29udGFpbiBhbiBpbnRlZ2VyIHZhbHVlLiAgKEZpeGVkIGJ5CisgIEpvaG4gSi4gTGVlOyA6aXNzdWU6YDM5MjRgLikKKworKiBUaGUgOm1vZDpgY29weWAgbW9kdWxlJ3MgOmZ1bmM6YH5jb3B5LmRlZXBjb3B5YCBmdW5jdGlvbiB3aWxsIG5vdworICBjb3JyZWN0bHkgY29weSBib3VuZCBpbnN0YW5jZSBtZXRob2RzLiAgKEltcGxlbWVudGVkIGJ5CisgIFJvYmVydCBDb2xsaW5zOyA6aXNzdWU6YDE1MTVgLikKKworKiBUaGUgOm1vZDpgY3R5cGVzYCBtb2R1bGUgbm93IGFsd2F5cyBjb252ZXJ0cyBgYE5vbmVgYCB0byBhIEMgTlVMTAorICBwb2ludGVyIGZvciBhcmd1bWVudHMgZGVjbGFyZWQgYXMgcG9pbnRlcnMuICAoQ2hhbmdlZCBieSBUaG9tYXMKKyAgSGVsbGVyOyA6aXNzdWU6YDQ2MDZgLikgIFRoZSB1bmRlcmx5aW5nIGBsaWJmZmkgbGlicmFyeQorICA8aHR0cDovL3NvdXJjZXdhcmUub3JnL2xpYmZmaS8+YF9fIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdmVyc2lvbgorICAzLjAuOSwgY29udGFpbmluZyB2YXJpb3VzIGZpeGVzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zLiAgKFVwZGF0ZWQKKyAgYnkgTWF0dGhpYXMgS2xvc2U7IDppc3N1ZTpgODE0MmAuKQorCisqIE5ldyBtZXRob2Q6IHRoZSA6bW9kOmBkYXRldGltZWAgbW9kdWxlJ3MgOmNsYXNzOmB+ZGF0ZXRpbWUudGltZWRlbHRhYCBjbGFzcworICBnYWluZWQgYSA6bWV0aDpgfmRhdGV0aW1lLnRpbWVkZWx0YS50b3RhbF9zZWNvbmRzYCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZQorICBudW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24uICAoQ29udHJpYnV0ZWQgYnkgQnJpYW4gUXVpbmxhbjsgOmlzc3VlOmA1Nzg4YC4pCisKKyogTmV3IG1ldGhvZDogdGhlIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAgY2xhc3MgZ2FpbmVkIGEKKyAgOm1ldGg6YH5kZWNpbWFsLkRlY2ltYWwuZnJvbV9mbG9hdGAgY2xhc3MgbWV0aG9kIHRoYXQgcGVyZm9ybXMgYW4gZXhhY3QKKyAgY29udmVyc2lvbiBvZiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBhIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAuCisgIFRoaXMgZXhhY3QgY29udmVyc2lvbiBzdHJpdmVzIGZvciB0aGUKKyAgY2xvc2VzdCBkZWNpbWFsIGFwcHJveGltYXRpb24gdG8gdGhlIGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uJ3MgdmFsdWU7CisgIHRoZSByZXN1bHRpbmcgZGVjaW1hbCB2YWx1ZSB3aWxsIHRoZXJlZm9yZSBzdGlsbCBpbmNsdWRlIHRoZSBpbmFjY3VyYWN5LAorICBpZiBhbnkuCisgIEZvciBleGFtcGxlLCBgYERlY2ltYWwuZnJvbV9mbG9hdCgwLjEpYGAgcmV0dXJucworICBgYERlY2ltYWwoJzAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1NzgyNzAyMTE4MTU4MzQwNDU0MTAxNTYyNScpYGAuCisgIChJbXBsZW1lbnRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA0Nzk2YC4pCisKKyAgQ29tcGFyaW5nIGluc3RhbmNlcyBvZiA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIHdpdGggZmxvYXRpbmctcG9pbnQKKyAgbnVtYmVycyBub3cgcHJvZHVjZXMgc2Vuc2libGUgcmVzdWx0cyBiYXNlZCBvbiB0aGUgbnVtZXJpYyB2YWx1ZXMKKyAgb2YgdGhlIG9wZXJhbmRzLiAgUHJldmlvdXNseSBzdWNoIGNvbXBhcmlzb25zIHdvdWxkIGZhbGwgYmFjayB0bworICBQeXRob24ncyBkZWZhdWx0IHJ1bGVzIGZvciBjb21wYXJpbmcgb2JqZWN0cywgd2hpY2ggcHJvZHVjZWQgYXJiaXRyYXJ5CisgIHJlc3VsdHMgYmFzZWQgb24gdGhlaXIgdHlwZS4gIE5vdGUgdGhhdCB5b3Ugc3RpbGwgY2Fubm90IGNvbWJpbmUKKyAgOmNsYXNzOmBEZWNpbWFsYCBhbmQgZmxvYXRpbmctcG9pbnQgaW4gb3RoZXIgb3BlcmF0aW9ucyBzdWNoIGFzIGFkZGl0aW9uLAorICBzaW5jZSB5b3Ugc2hvdWxkIGJlIGV4cGxpY2l0bHkgY2hvb3NpbmcgaG93IHRvIGNvbnZlcnQgYmV0d2VlbiBmbG9hdCBhbmQKKyAgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYC4gIChGaXhlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmAyNTMxYC4pCisKKyAgVGhlIGNvbnN0cnVjdG9yIGZvciA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIG5vdyBhY2NlcHRzCisgIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgKGFkZGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyA6aXNzdWU6YDgyNTdgKQorICBhbmQgbm9uLUV1cm9wZWFuIFVuaWNvZGUgY2hhcmFjdGVycyBzdWNoIGFzIEFyYWJpYy1JbmRpYyBkaWdpdHMKKyAgKGNvbnRyaWJ1dGVkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDY1OTVgKS4KKworICBNb3N0IG9mIHRoZSBtZXRob2RzIG9mIHRoZSA6Y2xhc3M6YH5kZWNpbWFsLkNvbnRleHRgIGNsYXNzIG5vdyBhY2NlcHQgaW50ZWdlcnMKKyAgYXMgd2VsbCBhcyA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIGluc3RhbmNlczsgdGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgdGhlCisgIDptZXRoOmB+ZGVjaW1hbC5Db250ZXh0LmNhbm9uaWNhbGAgYW5kIDptZXRoOmB+ZGVjaW1hbC5Db250ZXh0LmlzX2Nhbm9uaWNhbGAKKyAgbWV0aG9kcy4gIChQYXRjaCBieSBKdWFuIEpvc8OpIENvbnRpOyA6aXNzdWU6YDc2MzNgLikKKworICBXaGVuIHVzaW5nIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAgaW5zdGFuY2VzIHdpdGggYSBzdHJpbmcncworICA6bWV0aDpgfnN0ci5mb3JtYXRgIG1ldGhvZCwgdGhlIGRlZmF1bHQgYWxpZ25tZW50IHdhcyBwcmV2aW91c2x5CisgIGxlZnQtYWxpZ25tZW50LiAgVGhpcyBoYXMgYmVlbiBjaGFuZ2VkIHRvIHJpZ2h0LWFsaWdubWVudCwgd2hpY2ggaXMKKyAgbW9yZSBzZW5zaWJsZSBmb3IgbnVtZXJpYyB0eXBlcy4gIChDaGFuZ2VkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDY4NTdgLikKKworICBDb21wYXJpc29ucyBpbnZvbHZpbmcgYSBzaWduYWxpbmcgTmFOIHZhbHVlIChvciBgYHNOQU5gYCkgbm93IHNpZ25hbAorICA6Y29uc3Q6YEludmFsaWRPcGVyYXRpb25gIGluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIGEgdHJ1ZSBvcgorICBmYWxzZSB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IuICBRdWlldCBOYU4gdmFsdWVzCisgIChvciBgYE5hTmBgKSBhcmUgbm93IGhhc2hhYmxlLiAgKEZpeGVkIGJ5IE1hcmsgRGlja2luc29uOworICA6aXNzdWU6YDcyNzlgLikKKworKiBUaGUgOm1vZDpgZGlmZmxpYmAgbW9kdWxlIG5vdyBwcm9kdWNlcyBvdXRwdXQgdGhhdCBpcyBtb3JlCisgIGNvbXBhdGlibGUgd2l0aCBtb2Rlcm4gOmNvbW1hbmQ6YGRpZmZgLzpjb21tYW5kOmBwYXRjaGAgdG9vbHMKKyAgdGhyb3VnaCBvbmUgc21hbGwgY2hhbmdlLCB1c2luZyBhIHRhYiBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBzcGFjZXMgYXMKKyAgYSBzZXBhcmF0b3IgaW4gdGhlIGhlYWRlciBnaXZpbmcgdGhlIGZpbGVuYW1lLiAgKEZpeGVkIGJ5IEFuYXRvbHkKKyAgVGVjaHRvbmlrOyA6aXNzdWU6YDc1ODVgLikKKworKiBUaGUgRGlzdHV0aWxzIGBgc2Rpc3RgYCBjb21tYW5kIG5vdyBhbHdheXMgcmVnZW5lcmF0ZXMgdGhlCisgIDpmaWxlOmBNQU5JRkVTVGAgZmlsZSwgc2luY2UgZXZlbiBpZiB0aGUgOmZpbGU6YE1BTklGRVNULmluYCBvcgorICA6ZmlsZTpgc2V0dXAucHlgIGZpbGVzIGhhdmVuJ3QgYmVlbiBtb2RpZmllZCwgdGhlIHVzZXIgbWlnaHQgaGF2ZQorICBjcmVhdGVkIHNvbWUgbmV3IGZpbGVzIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkLgorICAoRml4ZWQgYnkgVGFyZWsgWmlhZMOpOyA6aXNzdWU6YDg2ODhgLikKKworKiBUaGUgOm1vZDpgZG9jdGVzdGAgbW9kdWxlJ3MgOmNvbnN0OmBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTGAgZmxhZworICB3aWxsIG5vdyBpZ25vcmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBleGNlcHRpb24KKyAgYmVpbmcgdGVzdGVkLiAgKFBhdGNoIGJ5IExlbm5hcnQgUmVnZWJybzsgOmlzc3VlOmA3NDkwYC4pCisKKyogVGhlIDptb2Q6YGVtYWlsYCBtb2R1bGUncyA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGNsYXNzIHdpbGwKKyAgbm93IGFjY2VwdCBhIFVuaWNvZGUtdmFsdWVkIHBheWxvYWQsIGF1dG9tYXRpY2FsbHkgY29udmVydGluZyB0aGUKKyAgcGF5bG9hZCB0byB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGJ5IDphdHRyOmBvdXRwdXRfY2hhcnNldGAuCisgIChBZGRlZCBieSBSLiBEYXZpZCBNdXJyYXk7IDppc3N1ZTpgMTM2ODI0N2AuKQorCisqIFRoZSA6Y2xhc3M6YH5mcmFjdGlvbnMuRnJhY3Rpb25gIGNsYXNzIG5vdyBhY2NlcHRzIGEgc2luZ2xlIGZsb2F0IG9yCisgIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAgaW5zdGFuY2UsIG9yIHR3byByYXRpb25hbCBudW1iZXJzLCBhcworICBhcmd1bWVudHMgdG8gaXRzIGNvbnN0cnVjdG9yLiAgKEltcGxlbWVudGVkIGJ5IE1hcmsgRGlja2luc29uOworICByYXRpb25hbHMgYWRkZWQgaW4gOmlzc3VlOmA1ODEyYCwgYW5kIGZsb2F0L2RlY2ltYWwgaW4KKyAgOmlzc3VlOmA4Mjk0YC4pCisKKyAgT3JkZXJpbmcgY29tcGFyaXNvbnMgKGBgPGBgLCBgYDw9YGAsIGBgPmBgLCBgYD49YGApIGJldHdlZW4KKyAgZnJhY3Rpb25zIGFuZCBjb21wbGV4IG51bWJlcnMgbm93IHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYC4KKyAgVGhpcyBmaXhlcyBhbiBvdmVyc2lnaHQsIG1ha2luZyB0aGUgOmNsYXNzOmB+ZnJhY3Rpb25zLkZyYWN0aW9uYAorICBtYXRjaCB0aGUgb3RoZXIgbnVtZXJpYyB0eXBlcy4KKworICAuLiByZXZpc2lvbiA3OTQ1NQorCisqIE5ldyBjbGFzczogOmNsYXNzOmB+ZnRwbGliLkZUUF9UTFNgIGluCisgIHRoZSA6bW9kOmBmdHBsaWJgIG1vZHVsZSBwcm92aWRlcyBzZWN1cmUgRlRQCisgIGNvbm5lY3Rpb25zIHVzaW5nIFRMUyBlbmNhcHN1bGF0aW9uIG9mIGF1dGhlbnRpY2F0aW9uIGFzIHdlbGwgYXMKKyAgc3Vic2VxdWVudCBjb250cm9sIGFuZCBkYXRhIHRyYW5zZmVycy4KKyAgKENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbGE7IDppc3N1ZTpgMjA1NGAuKQorCisgIFRoZSA6bWV0aDpgfmZ0cGxpYi5GVFAuc3RvcmJpbmFyeWAgbWV0aG9kIGZvciBiaW5hcnkgdXBsb2FkcyBjYW4gbm93IHJlc3RhcnQKKyAgdXBsb2FkcyB0aGFua3MgdG8gYW4gYWRkZWQgKnJlc3QqIHBhcmFtZXRlciAocGF0Y2ggYnkgUGFibG8gTW91em87CisgIDppc3N1ZTpgNjg0NWAuKQorCisqIE5ldyBjbGFzcyBkZWNvcmF0b3I6IDpmdW5jOmB+ZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nYCBpbiB0aGUgOm1vZDpgZnVuY3Rvb2xzYAorICBtb2R1bGUgdGFrZXMgYSBjbGFzcyB0aGF0IGRlZmluZXMgYW4gOm1ldGg6YF9fZXFfX2AgbWV0aG9kIGFuZCBvbmUgb2YKKyAgOm1ldGg6YF9fbHRfX2AsIDptZXRoOmBfX2xlX19gLCA6bWV0aDpgX19ndF9fYCwgb3IgOm1ldGg6YF9fZ2VfX2AsCisgIGFuZCBnZW5lcmF0ZXMgdGhlIG1pc3NpbmcgY29tcGFyaXNvbiBtZXRob2RzLiAgU2luY2UgdGhlCisgIDptZXRoOmBfX2NtcF9fYCBtZXRob2QgaXMgYmVpbmcgZGVwcmVjYXRlZCBpbiBQeXRob24gMy54LAorICB0aGlzIGRlY29yYXRvciBtYWtlcyBpdCBlYXNpZXIgdG8gZGVmaW5lIG9yZGVyZWQgY2xhc3Nlcy4KKyAgKEFkZGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyA6aXNzdWU6YDU0NzlgLikKKworICBOZXcgZnVuY3Rpb246IDpmdW5jOmB+ZnVuY3Rvb2xzLmNtcF90b19rZXlgIHdpbGwgdGFrZSBhbiBvbGQtc3R5bGUgY29tcGFyaXNvbgorICBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgdHdvIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGEgbmV3IGNhbGxhYmxlIHRoYXQKKyAgY2FuIGJlIHVzZWQgYXMgdGhlICprZXkqIHBhcmFtZXRlciB0byBmdW5jdGlvbnMgc3VjaCBhcworICA6ZnVuYzpgc29ydGVkYCwgOmZ1bmM6YG1pbmAgYW5kIDpmdW5jOmBtYXhgLCBldGMuICBUaGUgcHJpbWFyeQorICBpbnRlbmRlZCB1c2UgaXMgdG8gaGVscCB3aXRoIG1ha2luZyBjb2RlIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMy54LgorICAoQWRkZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIuKQorCisqIE5ldyBmdW5jdGlvbjogdGhlIDptb2Q6YGdjYCBtb2R1bGUncyA6ZnVuYzpgfmdjLmlzX3RyYWNrZWRgIHJldHVybnMKKyAgdHJ1ZSBpZiBhIGdpdmVuIGluc3RhbmNlIGlzIHRyYWNrZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLCBmYWxzZQorICBvdGhlcndpc2UuIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA0Njg4YC4pCisKKyogVGhlIDptb2Q6YGd6aXBgIG1vZHVsZSdzIDpjbGFzczpgfmd6aXAuR3ppcEZpbGVgIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dAorICBtYW5hZ2VtZW50IHByb3RvY29sLCBzbyB5b3UgY2FuIHdyaXRlIGBgd2l0aCBnemlwLkd6aXBGaWxlKC4uLikgYXMgZjpgYAorICAoY29udHJpYnV0ZWQgYnkgSGFnZW4gRsO8cnN0ZW5hdTsgOmlzc3VlOmAzODYwYCksIGFuZCBpdCBub3cgaW1wbGVtZW50cworICB0aGUgOmNsYXNzOmBpby5CdWZmZXJlZElPQmFzZWAgQUJDLCBzbyB5b3UgY2FuIHdyYXAgaXQgd2l0aAorICA6Y2xhc3M6YGlvLkJ1ZmZlcmVkUmVhZGVyYCBmb3IgZmFzdGVyIHByb2Nlc3NpbmcKKyAgKGNvbnRyaWJ1dGVkIGJ5IE5pciBBaWRlczsgOmlzc3VlOmA3NDcxYCkuCisgIEl0J3MgYWxzbyBub3cgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIG1vZGlmaWNhdGlvbiB0aW1lCisgIHJlY29yZGVkIGluIGEgZ3ppcHBlZCBmaWxlIGJ5IHByb3ZpZGluZyBhbiBvcHRpb25hbCB0aW1lc3RhbXAgdG8KKyAgdGhlIGNvbnN0cnVjdG9yLiAgKENvbnRyaWJ1dGVkIGJ5IEphY3F1ZXMgRnJlY2hldDsgOmlzc3VlOmA0MjcyYC4pCisKKyAgRmlsZXMgaW4gZ3ppcCBmb3JtYXQgY2FuIGJlIHBhZGRlZCB3aXRoIHRyYWlsaW5nIHplcm8gYnl0ZXM7IHRoZQorICA6bW9kOmBnemlwYCBtb2R1bGUgd2lsbCBub3cgY29uc3VtZSB0aGVzZSB0cmFpbGluZyBieXRlcy4gIChGaXhlZCBieQorICBUYWRlayBQaWV0cmFzemVrIGFuZCBCcmlhbiBDdXJ0aW47IDppc3N1ZTpgMjg0NmAuKQorCisqIE5ldyBhdHRyaWJ1dGU6IHRoZSA6bW9kOmBoYXNobGliYCBtb2R1bGUgbm93IGhhcyBhbiA6YXR0cjpgfmhhc2hsaWIuaGFzaGxpYi5hbGdvcml0aG1zYAorICBhdHRyaWJ1dGUgY29udGFpbmluZyBhIHR1cGxlIG5hbWluZyB0aGUgc3VwcG9ydGVkIGFsZ29yaXRobXMuCisgIEluIFB5dGhvbiAyLjcsIGBgaGFzaGxpYi5hbGdvcml0aG1zYGAgY29udGFpbnMKKyAgYGAoJ21kNScsICdzaGExJywgJ3NoYTIyNCcsICdzaGEyNTYnLCAnc2hhMzg0JywgJ3NoYTUxMicpYGAuCisgIChDb250cmlidXRlZCBieSBDYXJsIENoZW5ldDsgOmlzc3VlOmA3NDE4YC4pCisKKyogVGhlIGRlZmF1bHQgOmNsYXNzOmB+aHR0cGxpYi5IVFRQUmVzcG9uc2VgIGNsYXNzIHVzZWQgYnkgdGhlIDptb2Q6YGh0dHBsaWJgIG1vZHVsZSBub3cKKyAgc3VwcG9ydHMgYnVmZmVyaW5nLCByZXN1bHRpbmcgaW4gbXVjaCBmYXN0ZXIgcmVhZGluZyBvZiBIVFRQIHJlc3BvbnNlcy4KKyAgKENvbnRyaWJ1dGVkIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3NvbjsgOmlzc3VlOmA0ODc5YC4pCisKKyAgVGhlIDpjbGFzczpgfmh0dHBsaWIuSFRUUENvbm5lY3Rpb25gIGFuZCA6Y2xhc3M6YH5odHRwbGliLkhUVFBTQ29ubmVjdGlvbmAgY2xhc3NlcworICBub3cgc3VwcG9ydCBhICpzb3VyY2VfYWRkcmVzcyogcGFyYW1ldGVyLCBhIGBgKGhvc3QsIHBvcnQpYGAgMi10dXBsZQorICBnaXZpbmcgdGhlIHNvdXJjZSBhZGRyZXNzIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgY29ubmVjdGlvbi4KKyAgKENvbnRyaWJ1dGVkIGJ5IEVsZG9uIFppZWdsZXI7IDppc3N1ZTpgMzk3MmAuKQorCisqIFRoZSA6bW9kOmBpaG9va3NgIG1vZHVsZSBub3cgc3VwcG9ydHMgcmVsYXRpdmUgaW1wb3J0cy4gIE5vdGUgdGhhdAorICA6bW9kOmBpaG9va3NgIGlzIGFuIG9sZGVyIG1vZHVsZSBmb3IgY3VzdG9taXppbmcgaW1wb3J0cywKKyAgc3VwZXJzZWRlZCBieSB0aGUgOm1vZDpgaW1wdXRpbGAgbW9kdWxlIGFkZGVkIGluIFB5dGhvbiAyLjAuCisgIChSZWxhdGl2ZSBpbXBvcnQgc3VwcG9ydCBhZGRlZCBieSBOZWlsIFNjaGVtZW5hdWVyLikKKworICAuLiByZXZpc2lvbiA3NTQyMworCisqIFRoZSA6bW9kOmBpbWFwbGliYCBtb2R1bGUgbm93IHN1cHBvcnRzIElQdjYgYWRkcmVzc2VzLgorICAoQ29udHJpYnV0ZWQgYnkgRGVyZWsgTW9ycjsgOmlzc3VlOmAxNjU1YC4pCisKKyogTmV3IGZ1bmN0aW9uOiB0aGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlJ3MgOmZ1bmM6YH5pbnNwZWN0LmdldGNhbGxhcmdzYAorICB0YWtlcyBhIGNhbGxhYmxlIGFuZCBpdHMgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMsCisgIGFuZCBmaWd1cmVzIG91dCB3aGljaCBvZiB0aGUgY2FsbGFibGUncyBwYXJhbWV0ZXJzIHdpbGwgcmVjZWl2ZSBlYWNoIGFyZ3VtZW50LAorICByZXR1cm5pbmcgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgYXJndW1lbnQgbmFtZXMgdG8gdGhlaXIgdmFsdWVzLiAgRm9yIGV4YW1wbGU6OgorCisgICAgPj4+IGZyb20gaW5zcGVjdCBpbXBvcnQgZ2V0Y2FsbGFyZ3MKKyAgICA+Pj4gZGVmIGYoYSwgYj0xLCAqcG9zLCAqKm5hbWVkKToKKyAgICAuLi4gICAgIHBhc3MKKyAgICA+Pj4gZ2V0Y2FsbGFyZ3MoZiwgMSwgMiwgMykKKyAgICB7J2EnOiAxLCAnYic6IDIsICdwb3MnOiAoMywpLCAnbmFtZWQnOiB7fX0KKyAgICA+Pj4gZ2V0Y2FsbGFyZ3MoZiwgYT0yLCB4PTQpCisgICAgeydhJzogMiwgJ2InOiAxLCAncG9zJzogKCksICduYW1lZCc6IHsneCc6IDR9fQorICAgID4+PiBnZXRjYWxsYXJncyhmKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGYoKSB0YWtlcyBhdCBsZWFzdCAxIGFyZ3VtZW50ICgwIGdpdmVuKQorCisgIENvbnRyaWJ1dGVkIGJ5IEdlb3JnZSBTYWtraXM7IDppc3N1ZTpgMzEzNWAuCisKKyogVXBkYXRlZCBtb2R1bGU6IFRoZSA6bW9kOmBpb2AgbGlicmFyeSBoYXMgYmVlbiB1cGdyYWRlZCB0byB0aGUgdmVyc2lvbiBzaGlwcGVkIHdpdGgKKyAgUHl0aG9uIDMuMS4gIEZvciAzLjEsIHRoZSBJL08gbGlicmFyeSB3YXMgZW50aXJlbHkgcmV3cml0dGVuIGluIEMKKyAgYW5kIGlzIDIgdG8gMjAgdGltZXMgZmFzdGVyIGRlcGVuZGluZyBvbiB0aGUgdGFzayBiZWluZyBwZXJmb3JtZWQuICBUaGUKKyAgb3JpZ2luYWwgUHl0aG9uIHZlcnNpb24gd2FzIHJlbmFtZWQgdG8gdGhlIDptb2Q6YF9weWlvYCBtb2R1bGUuCisKKyAgT25lIG1pbm9yIHJlc3VsdGluZyBjaGFuZ2U6IHRoZSA6Y2xhc3M6YGlvLlRleHRJT0Jhc2VgIGNsYXNzIG5vdworICBoYXMgYW4gOmF0dHI6YGVycm9yc2AgYXR0cmlidXRlIGdpdmluZyB0aGUgZXJyb3Igc2V0dGluZworICB1c2VkIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZXJyb3JzIChvbmUgb2YgYGAnc3RyaWN0J2BgLCBgYCdyZXBsYWNlJ2BgLAorICBgYCdpZ25vcmUnYGApLgorCisgIFRoZSA6Y2xhc3M6YGlvLkZpbGVJT2AgY2xhc3Mgbm93IHJhaXNlcyBhbiA6ZXhjOmBPU0Vycm9yYCB3aGVuIHBhc3NlZAorICBhbiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvci4gIChJbXBsZW1lbnRlZCBieSBCZW5qYW1pbiBQZXRlcnNvbjsKKyAgOmlzc3VlOmA0OTkxYC4pICBUaGUgOm1ldGg6YH5pby5JT0Jhc2UudHJ1bmNhdGVgIG1ldGhvZCBub3cgcHJlc2VydmVzIHRoZQorICBmaWxlIHBvc2l0aW9uOyBwcmV2aW91c2x5IGl0IHdvdWxkIGNoYW5nZSB0aGUgZmlsZSBwb3NpdGlvbiB0byB0aGUKKyAgZW5kIG9mIHRoZSBuZXcgZmlsZS4gIChGaXhlZCBieSBQYXNjYWwgQ2hhbWJvbjsgOmlzc3VlOmA2OTM5YC4pCisKKyogTmV3IGZ1bmN0aW9uOiBgYGl0ZXJ0b29scy5jb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpYGAgdGFrZXMgdHdvCisgIGl0ZXJhdG9ycy4gIEVsZW1lbnRzIG9mICpkYXRhKiBhcmUgcmV0dXJuZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKyAgdmFsdWUgaW4gKnNlbGVjdG9ycyogaXMgdHJ1ZTo6CisKKyAgICBpdGVydG9vbHMuY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0pID0+CisgICAgICBBLCBDLCBFLCBGCisKKyAgLi4gbWF5YmUgaGVyZSBpcyBiZXR0ZXIgdG8gdXNlID4+PiBsaXN0KGl0ZXJ0b29scy5jb21wcmVzcyguLi4pKSBpbnN0ZWFkCisKKyAgTmV3IGZ1bmN0aW9uOiBgYGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyLCByKWBgCisgIHJldHVybnMgYWxsIHRoZSBwb3NzaWJsZSAqciotbGVuZ3RoIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBmcm9tIHRoZQorICBpdGVyYWJsZSAqaXRlciouICBVbmxpa2UgOmZ1bmM6YH5pdGVydG9vbHMuY29tYmluYXRpb25zYCwgaW5kaXZpZHVhbCBlbGVtZW50cworICBjYW4gYmUgcmVwZWF0ZWQgaW4gdGhlIGdlbmVyYXRlZCBjb21iaW5hdGlvbnM6OgorCisgICAgaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCdhYmMnLCAyKSA9PgorICAgICAgKCdhJywgJ2EnKSwgKCdhJywgJ2InKSwgKCdhJywgJ2MnKSwKKyAgICAgICgnYicsICdiJyksICgnYicsICdjJyksICgnYycsICdjJykKKworICBOb3RlIHRoYXQgZWxlbWVudHMgYXJlIHRyZWF0ZWQgYXMgdW5pcXVlIGRlcGVuZGluZyBvbiB0aGVpciBwb3NpdGlvbgorICBpbiB0aGUgaW5wdXQsIG5vdCB0aGVpciBhY3R1YWwgdmFsdWVzLgorCisgIFRoZSA6ZnVuYzpgaXRlcnRvb2xzLmNvdW50YCBmdW5jdGlvbiBub3cgaGFzIGEgKnN0ZXAqIGFyZ3VtZW50IHRoYXQKKyAgYWxsb3dzIGluY3JlbWVudGluZyBieSB2YWx1ZXMgb3RoZXIgdGhhbiAxLiAgOmZ1bmM6YH5pdGVydG9vbHMuY291bnRgIGFsc28KKyAgbm93IGFsbG93cyBrZXl3b3JkIGFyZ3VtZW50cywgYW5kIHVzaW5nIG5vbi1pbnRlZ2VyIHZhbHVlcyBzdWNoIGFzCisgIGZsb2F0cyBvciA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIGluc3RhbmNlcy4gIChJbXBsZW1lbnRlZCBieSBSYXltb25kCisgIEhldHRpbmdlcjsgOmlzc3VlOmA1MDMyYC4pCisKKyAgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnNgIGFuZCA6ZnVuYzpgaXRlcnRvb2xzLnByb2R1Y3RgCisgIHByZXZpb3VzbHkgcmFpc2VkIDpleGM6YFZhbHVlRXJyb3JgIGZvciB2YWx1ZXMgb2YgKnIqIGxhcmdlciB0aGFuCisgIHRoZSBpbnB1dCBpdGVyYWJsZS4gIFRoaXMgd2FzIGRlZW1lZCBhIHNwZWNpZmljYXRpb24gZXJyb3IsIHNvIHRoZXkKKyAgbm93IHJldHVybiBhbiBlbXB0eSBpdGVyYXRvci4gIChGaXhlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA0ODE2YC4pCisKKyogVXBkYXRlZCBtb2R1bGU6IFRoZSA6bW9kOmBqc29uYCBtb2R1bGUgd2FzIHVwZ3JhZGVkIHRvIHZlcnNpb24gMi4wLjkgb2YgdGhlCisgIHNpbXBsZWpzb24gcGFja2FnZSwgd2hpY2ggaW5jbHVkZXMgYSBDIGV4dGVuc2lvbiB0aGF0IG1ha2VzCisgIGVuY29kaW5nIGFuZCBkZWNvZGluZyBmYXN0ZXIuCisgIChDb250cmlidXRlZCBieSBCb2IgSXBwb2xpdG87IDppc3N1ZTpgNDEzNmAuKQorCisgIFRvIHN1cHBvcnQgdGhlIG5ldyA6Y2xhc3M6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCB0eXBlLCA6ZnVuYzpganNvbi5sb2FkYAorICBub3cgaGFzIGFuIG9wdGlvbmFsICpvYmplY3RfcGFpcnNfaG9vayogcGFyYW1ldGVyIHRoYXQgd2lsbCBiZSBjYWxsZWQKKyAgd2l0aCBhbnkgb2JqZWN0IGxpdGVyYWwgdGhhdCBkZWNvZGVzIHRvIGEgbGlzdCBvZiBwYWlycy4KKyAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyA6aXNzdWU6YDUzODFgLikKKworKiBUaGUgOm1vZDpgbWFpbGJveGAgbW9kdWxlJ3MgOmNsYXNzOmB+bWFpbGJveC5NYWlsZGlyYCBjbGFzcyBub3cgcmVjb3JkcyB0aGUKKyAgdGltZXN0YW1wIG9uIHRoZSBkaXJlY3RvcmllcyBpdCByZWFkcywgYW5kIG9ubHkgcmUtcmVhZHMgdGhlbSBpZiB0aGUKKyAgbW9kaWZpY2F0aW9uIHRpbWUgaGFzIHN1YnNlcXVlbnRseSBjaGFuZ2VkLiAgVGhpcyBpbXByb3ZlcworICBwZXJmb3JtYW5jZSBieSBhdm9pZGluZyB1bm5lZWRlZCBkaXJlY3Rvcnkgc2NhbnMuICAoRml4ZWQgYnkKKyAgQS5NLiBLdWNobGluZyBhbmQgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgMTYwNzk1MWAsIDppc3N1ZTpgNjg5NmAuKQorCisqIE5ldyBmdW5jdGlvbnM6IHRoZSA6bW9kOmBtYXRoYCBtb2R1bGUgZ2FpbmVkCisgIDpmdW5jOmB+bWF0aC5lcmZgIGFuZCA6ZnVuYzpgfm1hdGguZXJmY2AgZm9yIHRoZSBlcnJvciBmdW5jdGlvbiBhbmQgdGhlIGNvbXBsZW1lbnRhcnkgZXJyb3IgZnVuY3Rpb24sCisgIDpmdW5jOmB+bWF0aC5leHBtMWAgd2hpY2ggY29tcHV0ZXMgYGBlKip4IC0gMWBgIHdpdGggbW9yZSBwcmVjaXNpb24gdGhhbgorICB1c2luZyA6ZnVuYzpgfm1hdGguZXhwYCBhbmQgc3VidHJhY3RpbmcgMSwKKyAgOmZ1bmM6YH5tYXRoLmdhbW1hYCBmb3IgdGhlIEdhbW1hIGZ1bmN0aW9uLCBhbmQKKyAgOmZ1bmM6YH5tYXRoLmxnYW1tYWAgZm9yIHRoZSBuYXR1cmFsIGxvZyBvZiB0aGUgR2FtbWEgZnVuY3Rpb24uCisgIChDb250cmlidXRlZCBieSBNYXJrIERpY2tpbnNvbiBhbmQgbmlyaW5BIHJhc2VsaWFyaXNvbjsgOmlzc3VlOmAzMzY2YC4pCisKKyogVGhlIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlJ3MgOmNsYXNzOmBNYW5hZ2VyKmAgY2xhc3NlcworICBjYW4gbm93IGJlIHBhc3NlZCBhIGNhbGxhYmxlIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIKKyAgYSBzdWJwcm9jZXNzIGlzIHN0YXJ0ZWQsIGFsb25nIHdpdGggYSBzZXQgb2YgYXJndW1lbnRzIHRoYXQgd2lsbCBiZQorICBwYXNzZWQgdG8gdGhlIGNhbGxhYmxlLgorICAoQ29udHJpYnV0ZWQgYnkgbGVrbWE7IDppc3N1ZTpgNTU4NWAuKQorCisgIFRoZSA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcuUG9vbGAgY2xhc3MsIHdoaWNoIGNvbnRyb2xzIGEgcG9vbCBvZiB3b3JrZXIgcHJvY2Vzc2VzLAorICBub3cgaGFzIGFuIG9wdGlvbmFsICptYXh0YXNrc3BlcmNoaWxkKiBwYXJhbWV0ZXIuICBXb3JrZXIgcHJvY2Vzc2VzCisgIHdpbGwgcGVyZm9ybSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBhbmQgdGhlbiBleGl0LCBjYXVzaW5nIHRoZQorICA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcuUG9vbGAgdG8gc3RhcnQgYSBuZXcgd29ya2VyLiAgVGhpcyBpcyB1c2VmdWwgaWYgdGFza3MgbWF5IGxlYWsKKyAgbWVtb3J5IG9yIG90aGVyIHJlc291cmNlcywgb3IgaWYgc29tZSB0YXNrcyB3aWxsIGNhdXNlIHRoZSB3b3JrZXIgdG8KKyAgYmVjb21lIHZlcnkgbGFyZ2UuCisgIChDb250cmlidXRlZCBieSBDaGFybGVzIENhemFib247IDppc3N1ZTpgNjk2M2AuKQorCisqIFRoZSA6bW9kOmBubnRwbGliYCBtb2R1bGUgbm93IHN1cHBvcnRzIElQdjYgYWRkcmVzc2VzLgorICAoQ29udHJpYnV0ZWQgYnkgRGVyZWsgTW9ycjsgOmlzc3VlOmAxNjY0YC4pCisKKyogTmV3IGZ1bmN0aW9uczogdGhlIDptb2Q6YG9zYCBtb2R1bGUgd3JhcHMgdGhlIGZvbGxvd2luZyBQT1NJWCBzeXN0ZW0KKyAgY2FsbHM6IDpmdW5jOmB+b3MuZ2V0cmVzZ2lkYCBhbmQgOmZ1bmM6YH5vcy5nZXRyZXN1aWRgLCB3aGljaCByZXR1cm4gdGhlCisgIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIEdJRHMgYW5kIFVJRHM7CisgIDpmdW5jOmB+b3Muc2V0cmVzZ2lkYCBhbmQgOmZ1bmM6YH5vcy5zZXRyZXN1aWRgLCB3aGljaCBzZXQKKyAgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgR0lEcyBhbmQgVUlEcyB0byBuZXcgdmFsdWVzOworICA6ZnVuYzpgfm9zLmluaXRncm91cHNgLCB3aGljaCBpbml0aWFsaXplIHRoZSBncm91cCBhY2Nlc3MgbGlzdAorICBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcy4gIChHSUQvVUlEIGZ1bmN0aW9ucworICBjb250cmlidXRlZCBieSBUcmF2aXMgSC47IDppc3N1ZTpgNjUwOGAuICBTdXBwb3J0IGZvciBpbml0Z3JvdXBzIGFkZGVkCisgIGJ5IEplYW4tUGF1bCBDYWxkZXJvbmU7IDppc3N1ZTpgNzMzM2AuKQorCisgIFRoZSA6ZnVuYzpgb3MuZm9ya2AgZnVuY3Rpb24gbm93IHJlLWluaXRpYWxpemVzIHRoZSBpbXBvcnQgbG9jayBpbgorICB0aGUgY2hpbGQgcHJvY2VzczsgdGhpcyBmaXhlcyBwcm9ibGVtcyBvbiBTb2xhcmlzIHdoZW4gOmZ1bmM6YH5vcy5mb3JrYAorICBpcyBjYWxsZWQgZnJvbSBhIHRocmVhZC4gIChGaXhlZCBieSBac29sdCBDc2VybmE7IDppc3N1ZTpgNzI0MmAuKQorCisqIEluIHRoZSA6bW9kOmBvcy5wYXRoYCBtb2R1bGUsIHRoZSA6ZnVuYzpgfm9zLnBhdGgubm9ybXBhdGhgIGFuZAorICA6ZnVuYzpgfm9zLnBhdGguYWJzcGF0aGAgZnVuY3Rpb25zIG5vdyBwcmVzZXJ2ZSBVbmljb2RlOyBpZiB0aGVpciBpbnB1dCBwYXRoCisgIGlzIGEgVW5pY29kZSBzdHJpbmcsIHRoZSByZXR1cm4gdmFsdWUgaXMgYWxzbyBhIFVuaWNvZGUgc3RyaW5nLgorICAoOm1ldGg6YH5vcy5wYXRoLm5vcm1wYXRoYCBmaXhlZCBieSBNYXR0IEdpdWNhIGluIDppc3N1ZTpgNTgyN2A7CisgIDptZXRoOmB+b3MucGF0aC5hYnNwYXRoYCBmaXhlZCBieSBFemlvIE1lbG90dGkgaW4gOmlzc3VlOmAzNDI2YC4pCisKKyogVGhlIDptb2Q6YHB5ZG9jYCBtb2R1bGUgbm93IGhhcyBoZWxwIGZvciB0aGUgdmFyaW91cyBzeW1ib2xzIHRoYXQgUHl0aG9uCisgIHVzZXMuICBZb3UgY2FuIG5vdyBkbyBgYGhlbHAoJzw8JylgYCBvciBgYGhlbHAoJ0AnKWBgLCBmb3IgZXhhbXBsZS4KKyAgKENvbnRyaWJ1dGVkIGJ5IERhdmlkIExhYmFuOyA6aXNzdWU6YDQ3MzlgLikKKworKiBUaGUgOm1vZDpgcmVgIG1vZHVsZSdzIDpmdW5jOmB+cmUuc3BsaXRgLCA6ZnVuYzpgfnJlLnN1YmAsIGFuZCA6ZnVuYzpgfnJlLnN1Ym5gCisgIG5vdyBhY2NlcHQgYW4gb3B0aW9uYWwgKmZsYWdzKiBhcmd1bWVudCwgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlCisgIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgbW9kdWxlLiAgKEFkZGVkIGJ5IEdyZWdvcnkgUC4gU21pdGguKQorCisqIE5ldyBmdW5jdGlvbjogOmZ1bmM6YH5ydW5weS5ydW5fcGF0aGAgaW4gdGhlIDptb2Q6YHJ1bnB5YCBtb2R1bGUKKyAgd2lsbCBleGVjdXRlIHRoZSBjb2RlIGF0IGEgcHJvdmlkZWQgKnBhdGgqIGFyZ3VtZW50LiAgKnBhdGgqIGNhbiBiZQorICB0aGUgcGF0aCBvZiBhIFB5dGhvbiBzb3VyY2UgZmlsZSAoOmZpbGU6YGV4YW1wbGUucHlgKSwgYSBjb21waWxlZAorICBieXRlY29kZSBmaWxlICg6ZmlsZTpgZXhhbXBsZS5weWNgKSwgYSBkaXJlY3RvcnkKKyAgKDpmaWxlOmAuL3BhY2thZ2UvYCksIG9yIGEgemlwIGFyY2hpdmUgKDpmaWxlOmBleGFtcGxlLnppcGApLiAgSWYgYQorICBkaXJlY3Rvcnkgb3IgemlwIHBhdGggaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGZyb250IG9mCisgIGBgc3lzLnBhdGhgYCBhbmQgdGhlIG1vZHVsZSA6bW9kOmBfX21haW5fX2Agd2lsbCBiZSBpbXBvcnRlZC4gIEl0J3MKKyAgZXhwZWN0ZWQgdGhhdCB0aGUgZGlyZWN0b3J5IG9yIHppcCBjb250YWlucyBhIDpmaWxlOmBfX21haW5fXy5weWA7CisgIGlmIGl0IGRvZXNuJ3QsIHNvbWUgb3RoZXIgOmZpbGU6YF9fbWFpbl9fLnB5YCBtaWdodCBiZSBpbXBvcnRlZCBmcm9tCisgIGEgbG9jYXRpb24gbGF0ZXIgaW4gYGBzeXMucGF0aGBgLiAgVGhpcyBtYWtlcyBtb3JlIG9mIHRoZSBtYWNoaW5lcnkKKyAgb2YgOm1vZDpgcnVucHlgIGF2YWlsYWJsZSB0byBzY3JpcHRzIHRoYXQgd2FudCB0byBtaW1pYyB0aGUgd2F5CisgIFB5dGhvbidzIGNvbW1hbmQgbGluZSBwcm9jZXNzZXMgYW4gZXhwbGljaXQgcGF0aCBuYW1lLgorICAoQWRkZWQgYnkgTmljayBDb2dobGFuOyA6aXNzdWU6YDY4MTZgLikKKworKiBOZXcgZnVuY3Rpb246IGluIHRoZSA6bW9kOmBzaHV0aWxgIG1vZHVsZSwgOmZ1bmM6YH5zaHV0aWwubWFrZV9hcmNoaXZlYAorICB0YWtlcyBhIGZpbGVuYW1lLCBhcmNoaXZlIHR5cGUgKHppcCBvciB0YXItZm9ybWF0KSwgYW5kIGEgZGlyZWN0b3J5CisgIHBhdGgsIGFuZCBjcmVhdGVzIGFuIGFyY2hpdmUgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5J3MgY29udGVudHMuCisgIChBZGRlZCBieSBUYXJlayBaaWFkw6kuKQorCisgIDptb2Q6YHNodXRpbGAncyA6ZnVuYzpgfnNodXRpbC5jb3B5ZmlsZWAgYW5kIDpmdW5jOmB+c2h1dGlsLmNvcHl0cmVlYAorICBmdW5jdGlvbnMgbm93IHJhaXNlIGEgOmV4YzpgfnNodXRpbC5TcGVjaWFsRmlsZUVycm9yYCBleGNlcHRpb24gd2hlbgorICBhc2tlZCB0byBjb3B5IGEgbmFtZWQgcGlwZS4gIFByZXZpb3VzbHkgdGhlIGNvZGUgd291bGQgdHJlYXQKKyAgbmFtZWQgcGlwZXMgbGlrZSBhIHJlZ3VsYXIgZmlsZSBieSBvcGVuaW5nIHRoZW0gZm9yIHJlYWRpbmcsIGFuZAorICB0aGlzIHdvdWxkIGJsb2NrIGluZGVmaW5pdGVseS4gIChGaXhlZCBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmAzMDAyYC4pCisKKyogVGhlIDptb2Q6YHNpZ25hbGAgbW9kdWxlIG5vIGxvbmdlciByZS1pbnN0YWxscyB0aGUgc2lnbmFsIGhhbmRsZXIKKyAgdW5sZXNzIHRoaXMgaXMgdHJ1bHkgbmVjZXNzYXJ5LCB3aGljaCBmaXhlcyBhIGJ1ZyB0aGF0IGNvdWxkIG1ha2UgaXQKKyAgaW1wb3NzaWJsZSB0byBjYXRjaCB0aGUgRUlOVFIgc2lnbmFsIHJvYnVzdGx5LiAgKEZpeGVkIGJ5CisgIENoYXJsZXMtRnJhbmNvaXMgTmF0YWxpOyA6aXNzdWU6YDgzNTRgLikKKworKiBOZXcgZnVuY3Rpb25zOiBpbiB0aGUgOm1vZDpgc2l0ZWAgbW9kdWxlLCB0aHJlZSBuZXcgZnVuY3Rpb25zCisgIHJldHVybiB2YXJpb3VzIHNpdGUtIGFuZCB1c2VyLXNwZWNpZmljIHBhdGhzLgorICA6ZnVuYzpgfnNpdGUuZ2V0c2l0ZXBhY2thZ2VzYCByZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIGFsbAorICBnbG9iYWwgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcmllcywKKyAgOmZ1bmM6YH5zaXRlLmdldHVzZXJzaXRlcGFja2FnZXNgIHJldHVybnMgdGhlIHBhdGggb2YgdGhlIHVzZXIncworICBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSwgYW5kCisgIDpmdW5jOmB+c2l0ZS5nZXR1c2VyYmFzZWAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIDplbnZ2YXI6YFVTRVJfQkFTRWAKKyAgZW52aXJvbm1lbnQgdmFyaWFibGUsIGdpdmluZyB0aGUgcGF0aCB0byBhIGRpcmVjdG9yeSB0aGF0IGNhbiBiZSB1c2VkCisgIHRvIHN0b3JlIGRhdGEuCisgIChDb250cmlidXRlZCBieSBUYXJlayBaaWFkw6k7IDppc3N1ZTpgNjY5M2AuKQorCisgIFRoZSA6bW9kOmBzaXRlYCBtb2R1bGUgbm93IHJlcG9ydHMgZXhjZXB0aW9ucyBvY2N1cnJpbmcKKyAgd2hlbiB0aGUgOm1vZDpgc2l0ZWN1c3RvbWl6ZWAgbW9kdWxlIGlzIGltcG9ydGVkLCBhbmQgd2lsbCBubyBsb25nZXIKKyAgY2F0Y2ggYW5kIHN3YWxsb3cgdGhlIDpleGM6YEtleWJvYXJkSW50ZXJydXB0YCBleGNlcHRpb24uICAoRml4ZWQgYnkKKyAgVmljdG9yIFN0aW5uZXI7IDppc3N1ZTpgMzEzN2AuKQorCisqIFRoZSA6ZnVuYzpgfnNvY2tldC5jcmVhdGVfY29ubmVjdGlvbmAgZnVuY3Rpb24KKyAgZ2FpbmVkIGEgKnNvdXJjZV9hZGRyZXNzKiBwYXJhbWV0ZXIsIGEgYGAoaG9zdCwgcG9ydClgYCAyLXR1cGxlCisgIGdpdmluZyB0aGUgc291cmNlIGFkZHJlc3MgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBjb25uZWN0aW9uLgorICAoQ29udHJpYnV0ZWQgYnkgRWxkb24gWmllZ2xlcjsgOmlzc3VlOmAzOTcyYC4pCisKKyAgVGhlIDptZXRoOmB+c29ja2V0LnNvY2tldC5yZWN2X2ludG9gIGFuZCA6bWV0aDpgfnNvY2tldC5zb2NrZXQucmVjdmZyb21faW50b2AKKyAgbWV0aG9kcyB3aWxsIG5vdyB3cml0ZSBpbnRvIG9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBidWZmZXIgQVBJLCBtb3N0IHVzZWZ1bGx5CisgIHRoZSA6Y2xhc3M6YGJ5dGVhcnJheWAgYW5kIDpjbGFzczpgbWVtb3J5dmlld2Agb2JqZWN0cy4gIChJbXBsZW1lbnRlZCBieQorICBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA4MTA0YC4pCisKKyogVGhlIDptb2Q6YFNvY2tldFNlcnZlcmAgbW9kdWxlJ3MgOmNsYXNzOmB+U29ja2V0U2VydmVyLlRDUFNlcnZlcmAgY2xhc3Mgbm93CisgIHN1cHBvcnRzIHNvY2tldCB0aW1lb3V0cyBhbmQgZGlzYWJsaW5nIHRoZSBOYWdsZSBhbGdvcml0aG0uCisgIFRoZSA6YXR0cjpgflNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIuZGlzYWJsZV9uYWdsZV9hbGdvcml0aG1gIGNsYXNzIGF0dHJpYnV0ZQorICBkZWZhdWx0cyB0byBGYWxzZTsgaWYgb3ZlcnJpZGRlbiB0byBiZSBUcnVlLAorICBuZXcgcmVxdWVzdCBjb25uZWN0aW9ucyB3aWxsIGhhdmUgdGhlIFRDUF9OT0RFTEFZIG9wdGlvbiBzZXQgdG8KKyAgcHJldmVudCBidWZmZXJpbmcgbWFueSBzbWFsbCBzZW5kcyBpbnRvIGEgc2luZ2xlIFRDUCBwYWNrZXQuCisgIFRoZSA6YXR0cjpgflNvY2tldFNlcnZlci5CYXNlU2VydmVyLnRpbWVvdXRgIGNsYXNzIGF0dHJpYnV0ZSBjYW4gaG9sZAorICBhIHRpbWVvdXQgaW4gc2Vjb25kcyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmVxdWVzdCBzb2NrZXQ7IGlmCisgIG5vIHJlcXVlc3QgaXMgcmVjZWl2ZWQgd2l0aGluIHRoYXQgdGltZSwgOm1ldGg6YH5Tb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5oYW5kbGVfdGltZW91dGAKKyAgd2lsbCBiZSBjYWxsZWQgYW5kIDptZXRoOmB+U29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuaGFuZGxlX3JlcXVlc3RgIHdpbGwgcmV0dXJuLgorICAoQ29udHJpYnV0ZWQgYnkgS3Jpc3Rqw6FuIFZhbHVyIErDs25zc29uOyA6aXNzdWU6YDYxOTJgIGFuZCA6aXNzdWU6YDYyNjdgLikKKworKiBVcGRhdGVkIG1vZHVsZTogdGhlIDptb2Q6YHNxbGl0ZTNgIG1vZHVsZSBoYXMgYmVlbiB1cGRhdGVkIHRvCisgIHZlcnNpb24gMi42LjAgb2YgdGhlIGBweXNxbGl0ZSBwYWNrYWdlIDxodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHlzcWxpdGUvPmBfXy4gVmVyc2lvbiAyLjYuMCBpbmNsdWRlcyBhIG51bWJlciBvZiBidWdmaXhlcywgYW5kIGFkZHMKKyAgdGhlIGFiaWxpdHkgdG8gbG9hZCBTUUxpdGUgZXh0ZW5zaW9ucyBmcm9tIHNoYXJlZCBsaWJyYXJpZXMuCisgIENhbGwgdGhlIGBgZW5hYmxlX2xvYWRfZXh0ZW5zaW9uKFRydWUpYGAgbWV0aG9kIHRvIGVuYWJsZSBleHRlbnNpb25zLAorICBhbmQgdGhlbiBjYWxsIDptZXRoOmB+c3FsaXRlMy5Db25uZWN0aW9uLmxvYWRfZXh0ZW5zaW9uYCB0byBsb2FkIGEgcGFydGljdWxhciBzaGFyZWQgbGlicmFyeS4KKyAgKFVwZGF0ZWQgYnkgR2VyaGFyZCBIw6RyaW5nLikKKworKiBUaGUgOm1vZDpgc3NsYCBtb2R1bGUncyA6Y2xhc3M6YH5zc2wuU1NMU29ja2V0YCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZQorICBidWZmZXIgQVBJLCB3aGljaCBmaXhlZCBhIHRlc3Qgc3VpdGUgZmFpbHVyZSAoZml4IGJ5IEFudG9pbmUgUGl0cm91OworICA6aXNzdWU6YDcxMzNgKSBhbmQgYXV0b21hdGljYWxseSBzZXQKKyAgT3BlblNTTCdzIDpjbWFjcm86YFNTTF9NT0RFX0FVVE9fUkVUUllgLCB3aGljaCB3aWxsIHByZXZlbnQgYW4gZXJyb3IKKyAgY29kZSBiZWluZyByZXR1cm5lZCBmcm9tIDptZXRoOmByZWN2YCBvcGVyYXRpb25zIHRoYXQgdHJpZ2dlciBhbiBTU0wKKyAgcmVuZWdvdGlhdGlvbiAoZml4IGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDgyMjJgKS4KKworICBUaGUgOmZ1bmM6YHNzbC53cmFwX3NvY2tldGAgY29uc3RydWN0b3IgZnVuY3Rpb24gbm93IHRha2VzIGEKKyAgKmNpcGhlcnMqIGFyZ3VtZW50IHRoYXQncyBhIHN0cmluZyBsaXN0aW5nIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMKKyAgdG8gYmUgYWxsb3dlZDsgdGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGRlc2NyaWJlZAorICBgaW4gdGhlIE9wZW5TU0wgZG9jdW1lbnRhdGlvbgorICA8aHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2FwcHMvY2lwaGVycy5odG1sI0NJUEhFUl9MSVNUX0ZPUk1BVD5gX18uCisgIChBZGRlZCBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA4MzIyYC4pCisKKyAgQW5vdGhlciBjaGFuZ2UgbWFrZXMgdGhlIGV4dGVuc2lvbiBsb2FkIGFsbCBvZiBPcGVuU1NMJ3MgY2lwaGVycyBhbmQKKyAgZGlnZXN0IGFsZ29yaXRobXMgc28gdGhhdCB0aGV5J3JlIGFsbCBhdmFpbGFibGUuICBTb21lIFNTTAorICBjZXJ0aWZpY2F0ZXMgY291bGRuJ3QgYmUgdmVyaWZpZWQsIHJlcG9ydGluZyBhbiAidW5rbm93biBhbGdvcml0aG0iCisgIGVycm9yLiAgKFJlcG9ydGVkIGJ5IEJlZGEgS29zYXRhLCBhbmQgZml4ZWQgYnkgQW50b2luZSBQaXRyb3U7CisgIDppc3N1ZTpgODQ4NGAuKQorCisgIFRoZSB2ZXJzaW9uIG9mIE9wZW5TU0wgYmVpbmcgdXNlZCBpcyBub3cgYXZhaWxhYmxlIGFzIHRoZSBtb2R1bGUKKyAgYXR0cmlidXRlcyA6ZGF0YTpgc3NsLk9QRU5TU0xfVkVSU0lPTmAgKGEgc3RyaW5nKSwKKyAgOmRhdGE6YHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GT2AgKGEgNS10dXBsZSksIGFuZAorICA6ZGF0YTpgc3NsLk9QRU5TU0xfVkVSU0lPTl9OVU1CRVJgIChhbiBpbnRlZ2VyKS4gIChBZGRlZCBieSBBbnRvaW5lCisgIFBpdHJvdTsgOmlzc3VlOmA4MzIxYC4pCisKKyogVGhlIDptb2Q6YHN0cnVjdGAgbW9kdWxlIHdpbGwgbm8gbG9uZ2VyIHNpbGVudGx5IGlnbm9yZSBvdmVyZmxvdworICBlcnJvcnMgd2hlbiBhIHZhbHVlIGlzIHRvbyBsYXJnZSBmb3IgYSBwYXJ0aWN1bGFyIGludGVnZXIgZm9ybWF0CisgIGNvZGUgKG9uZSBvZiBgYGJCaEhpSWxMcVFgYCk7IGl0IG5vdyBhbHdheXMgcmFpc2VzIGEKKyAgOmV4Yzpgc3RydWN0LmVycm9yYCBleGNlcHRpb24uICAoQ2hhbmdlZCBieSBNYXJrIERpY2tpbnNvbjsKKyAgOmlzc3VlOmAxNTIzYC4pICBUaGUgOmZ1bmM6YH5zdHJ1Y3QucGFja2AgZnVuY3Rpb24gd2lsbCBhbHNvCisgIGF0dGVtcHQgdG8gdXNlIDptZXRoOmBfX2luZGV4X19gIHRvIGNvbnZlcnQgYW5kIHBhY2sgbm9uLWludGVnZXJzCisgIGJlZm9yZSB0cnlpbmcgdGhlIDptZXRoOmBfX2ludF9fYCBtZXRob2Qgb3IgcmVwb3J0aW5nIGFuIGVycm9yLgorICAoQ2hhbmdlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA4MzAwYC4pCisKKyogTmV3IGZ1bmN0aW9uOiB0aGUgOm1vZDpgc3VicHJvY2Vzc2AgbW9kdWxlJ3MKKyAgOmZ1bmM6YH5zdWJwcm9jZXNzLmNoZWNrX291dHB1dGAgcnVucyBhIGNvbW1hbmQgd2l0aCBhIHNwZWNpZmllZCBzZXQgb2YgYXJndW1lbnRzCisgIGFuZCByZXR1cm5zIHRoZSBjb21tYW5kJ3Mgb3V0cHV0IGFzIGEgc3RyaW5nIHdoZW4gdGhlIGNvbW1hbmQgcnVucyB3aXRob3V0CisgIGVycm9yLCBvciByYWlzZXMgYSA6ZXhjOmB+c3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3JgIGV4Y2VwdGlvbiBvdGhlcndpc2UuCisKKyAgOjoKKworICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2RmJywgJy1oJywgJy4nXSkKKyAgICAnRmlsZXN5c3RlbSAgICAgU2l6ZSAgIFVzZWQgIEF2YWlsIENhcGFjaXR5ICBNb3VudGVkIG9uXG4KKyAgICAvZGV2L2Rpc2swczIgICAgNTJHICAgIDQ5RyAgIDMuMEcgICAgOTQlICAgIC9cbicKKworICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2RmJywgJy1oJywgJy9ib2d1cyddKQorICAgICAgLi4uCisgICAgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6IENvbW1hbmQgJ1snZGYnLCAnLWgnLCAnL2JvZ3VzJ10nIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzIDEKKworICAoQ29udHJpYnV0ZWQgYnkgR3JlZ29yeSBQLiBTbWl0aC4pCisKKyAgVGhlIDptb2Q6YHN1YnByb2Nlc3NgIG1vZHVsZSB3aWxsIG5vdyByZXRyeSBpdHMgaW50ZXJuYWwgc3lzdGVtIGNhbGxzCisgIG9uIHJlY2VpdmluZyBhbiA6Y29uc3Q6YEVJTlRSYCBzaWduYWwuICAoUmVwb3J0ZWQgYnkgc2V2ZXJhbCBwZW9wbGU7IGZpbmFsCisgIHBhdGNoIGJ5IEdyZWdvcnkgUC4gU21pdGggaW4gOmlzc3VlOmAxMDY4MjY4YC4pCisKKyogTmV3IGZ1bmN0aW9uOiA6ZnVuYzpgfnN5bXRhYmxlLlN5bWJvbC5pc19kZWNsYXJlZF9nbG9iYWxgIGluIHRoZSA6bW9kOmBzeW10YWJsZWAgbW9kdWxlCisgIHJldHVybnMgdHJ1ZSBmb3IgdmFyaWFibGVzIHRoYXQgYXJlIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgZ2xvYmFsLAorICBmYWxzZSBmb3Igb25lcyB0aGF0IGFyZSBpbXBsaWNpdGx5IGdsb2JhbC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEplcmVteSBIeWx0b24uKQorCisqIFRoZSA6bW9kOmBzeXNsb2dgIG1vZHVsZSB3aWxsIG5vdyB1c2UgdGhlIHZhbHVlIG9mIGBgc3lzLmFyZ3ZbMF1gYCBhcyB0aGUKKyAgaWRlbnRpZmllciBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBkZWZhdWx0IHZhbHVlIG9mIGBgJ3B5dGhvbidgYC4KKyAgKENoYW5nZWQgYnkgU2VhbiBSZWlmc2NobmVpZGVyOyA6aXNzdWU6YDg0NTFgLikKKworKiBUaGUgYGBzeXMudmVyc2lvbl9pbmZvYGAgdmFsdWUgaXMgbm93IGEgbmFtZWQgdHVwbGUsIHdpdGggYXR0cmlidXRlcworICBuYW1lZCA6YXR0cjpgbWFqb3JgLCA6YXR0cjpgbWlub3JgLCA6YXR0cjpgbWljcm9gLAorICA6YXR0cjpgcmVsZWFzZWxldmVsYCwgYW5kIDphdHRyOmBzZXJpYWxgLiAgKENvbnRyaWJ1dGVkIGJ5IFJvc3MKKyAgTGlnaHQ7IDppc3N1ZTpgNDI4NWAuKQorCisgIDpmdW5jOmBzeXMuZ2V0d2luZG93c3ZlcnNpb25gIGFsc28gcmV0dXJucyBhIG5hbWVkIHR1cGxlLAorICB3aXRoIGF0dHJpYnV0ZXMgbmFtZWQgOmF0dHI6YG1ham9yYCwgOmF0dHI6YG1pbm9yYCwgOmF0dHI6YGJ1aWxkYCwKKyAgOmF0dHI6YHBsYXRmb3JtYCwgOmF0dHI6YHNlcnZpY2VfcGFja2AsIDphdHRyOmBzZXJ2aWNlX3BhY2tfbWFqb3JgLAorICA6YXR0cjpgc2VydmljZV9wYWNrX21pbm9yYCwgOmF0dHI6YHN1aXRlX21hc2tgLCBhbmQKKyAgOmF0dHI6YHByb2R1Y3RfdHlwZWAuICAoQ29udHJpYnV0ZWQgYnkgQnJpYW4gQ3VydGluOyA6aXNzdWU6YDc3NjZgLikKKworKiBUaGUgOm1vZDpgdGFyZmlsZWAgbW9kdWxlJ3MgZGVmYXVsdCBlcnJvciBoYW5kbGluZyBoYXMgY2hhbmdlZCwgdG8KKyAgbm8gbG9uZ2VyIHN1cHByZXNzIGZhdGFsIGVycm9ycy4gIFRoZSBkZWZhdWx0IGVycm9yIGxldmVsIHdhcyBwcmV2aW91c2x5IDAsCisgIHdoaWNoIG1lYW50IHRoYXQgZXJyb3JzIHdvdWxkIG9ubHkgcmVzdWx0IGluIGEgbWVzc2FnZSBiZWluZyB3cml0dGVuIHRvIHRoZQorICBkZWJ1ZyBsb2csIGJ1dCBiZWNhdXNlIHRoZSBkZWJ1ZyBsb2cgaXMgbm90IGFjdGl2YXRlZCBieSBkZWZhdWx0LAorICB0aGVzZSBlcnJvcnMgZ28gdW5ub3RpY2VkLiAgVGhlIGRlZmF1bHQgZXJyb3IgbGV2ZWwgaXMgbm93IDEsCisgIHdoaWNoIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgdGhlcmUncyBhbiBlcnJvci4KKyAgKENoYW5nZWQgYnkgTGFycyBHdXN0w6RiZWw7IDppc3N1ZTpgNzM1N2AuKQorCisgIDptb2Q6YHRhcmZpbGVgIG5vdyBzdXBwb3J0cyBmaWx0ZXJpbmcgdGhlIDpjbGFzczpgfnRhcmZpbGUuVGFySW5mb2AKKyAgb2JqZWN0cyBiZWluZyBhZGRlZCB0byBhIHRhciBmaWxlLiAgV2hlbiB5b3UgY2FsbCA6bWV0aDpgfnRhcmZpbGUuVGFyRmlsZS5hZGRgLAorICB5b3UgbWF5IHN1cHBseSBhbiBvcHRpb25hbCAqZmlsdGVyKiBhcmd1bWVudAorICB0aGF0J3MgYSBjYWxsYWJsZS4gIFRoZSAqZmlsdGVyKiBjYWxsYWJsZSB3aWxsIGJlIHBhc3NlZCB0aGUKKyAgOmNsYXNzOmB+dGFyZmlsZS5UYXJJbmZvYCBmb3IgZXZlcnkgZmlsZSBiZWluZyBhZGRlZCwgYW5kIGNhbiBtb2RpZnkgYW5kIHJldHVybiBpdC4KKyAgSWYgdGhlIGNhbGxhYmxlIHJldHVybnMgYGBOb25lYGAsIHRoZSBmaWxlIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUKKyAgcmVzdWx0aW5nIGFyY2hpdmUuICBUaGlzIGlzIG1vcmUgcG93ZXJmdWwgdGhhbiB0aGUgZXhpc3RpbmcKKyAgKmV4Y2x1ZGUqIGFyZ3VtZW50LCB3aGljaCBoYXMgdGhlcmVmb3JlIGJlZW4gZGVwcmVjYXRlZC4KKyAgKEFkZGVkIGJ5IExhcnMgR3VzdMOkYmVsOyA6aXNzdWU6YDY4NTZgLikKKyAgVGhlIDpjbGFzczpgfnRhcmZpbGUuVGFyRmlsZWAgY2xhc3MgYWxzbyBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4KKyAgKEFkZGVkIGJ5IExhcnMgR3VzdMOkYmVsOyA6aXNzdWU6YDcyMzJgLikKKworKiBUaGUgOm1ldGg6YH50aHJlYWRpbmcuRXZlbnQud2FpdGAgbWV0aG9kIG9mIHRoZSA6Y2xhc3M6YHRocmVhZGluZy5FdmVudGAgY2xhc3MKKyAgbm93IHJldHVybnMgdGhlIGludGVybmFsIGZsYWcgb24gZXhpdC4gIFRoaXMgbWVhbnMgdGhlIG1ldGhvZCB3aWxsIHVzdWFsbHkKKyAgcmV0dXJuIHRydWUgYmVjYXVzZSA6bWV0aDpgfnRocmVhZGluZy5FdmVudC53YWl0YCBpcyBzdXBwb3NlZCB0byBibG9jayB1bnRpbCB0aGUKKyAgaW50ZXJuYWwgZmxhZyBiZWNvbWVzIHRydWUuICBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgb25seSBiZSBmYWxzZSBpZgorICBhIHRpbWVvdXQgd2FzIHByb3ZpZGVkIGFuZCB0aGUgb3BlcmF0aW9uIHRpbWVkIG91dC4KKyAgKENvbnRyaWJ1dGVkIGJ5IFRpbSBMZXNoZXI7IDppc3N1ZTpgMTY3NDAzMmAuKQorCisqIFRoZSBVbmljb2RlIGRhdGFiYXNlIHByb3ZpZGVkIGJ5IHRoZSA6bW9kOmB1bmljb2RlZGF0YWAgbW9kdWxlIGlzCisgIG5vdyB1c2VkIGludGVybmFsbHkgdG8gZGV0ZXJtaW5lIHdoaWNoIGNoYXJhY3RlcnMgYXJlIG51bWVyaWMsCisgIHdoaXRlc3BhY2UsIG9yIHJlcHJlc2VudCBsaW5lIGJyZWFrcy4gIFRoZSBkYXRhYmFzZSBhbHNvCisgIGluY2x1ZGVzIGluZm9ybWF0aW9uIGZyb20gdGhlIDpmaWxlOmBVbmloYW4udHh0YCBkYXRhIGZpbGUgKHBhdGNoCisgIGJ5IEFuZGVycyBDaHJpZ3N0csO2bSBhbmQgQW1hdXJ5IEZvcmdlb3QgZCdBcmM7IDppc3N1ZTpgMTU3MTE4NGApCisgIGFuZCBoYXMgYmVlbiB1cGRhdGVkIHRvIHZlcnNpb24gNS4yLjAgKHVwZGF0ZWQgYnkKKyAgRmxvcmVudCBYaWNsdW5hOyA6aXNzdWU6YDgwMjRgKS4KKworKiBUaGUgOm1vZDpgdXJscGFyc2VgIG1vZHVsZSdzIDpmdW5jOmB+dXJscGFyc2UudXJsc3BsaXRgIG5vdyBoYW5kbGVzCisgIHVua25vd24gVVJMIHNjaGVtZXMgaW4gYSBmYXNoaW9uIGNvbXBsaWFudCB3aXRoIDpyZmM6YDM5ODZgOiBpZiB0aGUKKyAgVVJMIGlzIG9mIHRoZSBmb3JtIGBgIjxzb21ldGhpbmc+Oi8vLi4uImBgLCB0aGUgdGV4dCBiZWZvcmUgdGhlCisgIGBgOi8vYGAgaXMgdHJlYXRlZCBhcyB0aGUgc2NoZW1lLCBldmVuIGlmIGl0J3MgYSBtYWRlLXVwIHNjaGVtZSB0aGF0CisgIHRoZSBtb2R1bGUgZG9lc24ndCBrbm93IGFib3V0LiAgVGhpcyBjaGFuZ2UgbWF5IGJyZWFrIGNvZGUgdGhhdAorICB3b3JrZWQgYXJvdW5kIHRoZSBvbGQgYmVoYXZpb3VyLiAgRm9yIGV4YW1wbGUsIFB5dGhvbiAyLjYuNCBvciAyLjUKKyAgd2lsbCByZXR1cm4gdGhlIGZvbGxvd2luZzoKKworICAgID4+PiBpbXBvcnQgdXJscGFyc2UKKyAgICA+Pj4gdXJscGFyc2UudXJsc3BsaXQoJ2ludmVudGVkOi8vaG9zdC9maWxlbmFtZT9xdWVyeScpCisgICAgKCdpbnZlbnRlZCcsICcnLCAnLy9ob3N0L2ZpbGVuYW1lP3F1ZXJ5JywgJycsICcnKQorCisgIFB5dGhvbiAyLjcgKGFuZCBQeXRob24gMi42LjUpIHdpbGwgcmV0dXJuOgorCisgICAgPj4+IGltcG9ydCB1cmxwYXJzZQorICAgID4+PiB1cmxwYXJzZS51cmxzcGxpdCgnaW52ZW50ZWQ6Ly9ob3N0L2ZpbGVuYW1lP3F1ZXJ5JykKKyAgICAoJ2ludmVudGVkJywgJ2hvc3QnLCAnL2ZpbGVuYW1lP3F1ZXJ5JywgJycsICcnKQorCisgIChQeXRob24gMi43IGFjdHVhbGx5IHByb2R1Y2VzIHNsaWdodGx5IGRpZmZlcmVudCBvdXRwdXQsIHNpbmNlIGl0CisgIHJldHVybnMgYSBuYW1lZCB0dXBsZSBpbnN0ZWFkIG9mIGEgc3RhbmRhcmQgdHVwbGUuKQorCisgIFRoZSA6bW9kOmB1cmxwYXJzZWAgbW9kdWxlIGFsc28gc3VwcG9ydHMgSVB2NiBsaXRlcmFsIGFkZHJlc3NlcyBhcyBkZWZpbmVkIGJ5CisgIDpyZmM6YDI3MzJgIChjb250cmlidXRlZCBieSBTZW50aGlsIEt1bWFyYW47IDppc3N1ZTpgMjk4N2ApLiA6OgorCisgICAgPj4+IHVybHBhcnNlLnVybHBhcnNlKCdodHRwOi8vWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0vZm9vJykKKyAgICBQYXJzZVJlc3VsdChzY2hlbWU9J2h0dHAnLCBuZXRsb2M9J1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdJywKKyAgICAgICAgICAgICAgICBwYXRoPScvZm9vJywgcGFyYW1zPScnLCBxdWVyeT0nJywgZnJhZ21lbnQ9JycpCisKKyogTmV3IGNsYXNzOiB0aGUgOmNsYXNzOmB+d2Vha3JlZi5XZWFrU2V0YCBjbGFzcyBpbiB0aGUgOm1vZDpgd2Vha3JlZmAKKyAgbW9kdWxlIGlzIGEgc2V0IHRoYXQgb25seSBob2xkcyB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGVsZW1lbnRzOyBlbGVtZW50cworICB3aWxsIGJlIHJlbW92ZWQgb25jZSB0aGVyZSBhcmUgbm8gcmVmZXJlbmNlcyBwb2ludGluZyB0byB0aGVtLgorICAoT3JpZ2luYWxseSBpbXBsZW1lbnRlZCBpbiBQeXRob24gMy54IGJ5IFJheW1vbmQgSGV0dGluZ2VyLCBhbmQgYmFja3BvcnRlZAorICB0byAyLjcgYnkgTWljaGFlbCBGb29yZC4pCisKKyogVGhlIEVsZW1lbnRUcmVlIGxpYnJhcnksIDptb2Q6YHhtbC5ldHJlZWAsIG5vIGxvbmdlciBlc2NhcGVzCisgIGFtcGVyc2FuZHMgYW5kIGFuZ2xlIGJyYWNrZXRzIHdoZW4gb3V0cHV0dGluZyBhbiBYTUwgcHJvY2Vzc2luZworICBpbnN0cnVjdGlvbiAod2hpY2ggbG9va3MgbGlrZSBgYDw/eG1sLXN0eWxlc2hlZXQgaHJlZj0iI3N0eWxlMSI/PmBgKQorICBvciBjb21tZW50ICh3aGljaCBsb29rcyBsaWtlIGBgPCEtLSBjb21tZW50IC0tPmBgKS4KKyAgKFBhdGNoIGJ5IE5laWwgTXVsbGVyOyA6aXNzdWU6YDI3NDZgLikKKworKiBUaGUgWE1MLVJQQyBjbGllbnQgYW5kIHNlcnZlciwgcHJvdmlkZWQgYnkgdGhlIDptb2Q6YHhtbHJwY2xpYmAgYW5kCisgIDptb2Q6YFNpbXBsZVhNTFJQQ1NlcnZlcmAgbW9kdWxlcywgaGF2ZSBpbXByb3ZlZCBwZXJmb3JtYW5jZSBieQorICBzdXBwb3J0aW5nIEhUVFAvMS4xIGtlZXAtYWxpdmUgYW5kIGJ5IG9wdGlvbmFsbHkgdXNpbmcgZ3ppcCBlbmNvZGluZworICB0byBjb21wcmVzcyB0aGUgWE1MIGJlaW5nIGV4Y2hhbmdlZC4gIFRoZSBnemlwIGNvbXByZXNzaW9uIGlzCisgIGNvbnRyb2xsZWQgYnkgdGhlIDphdHRyOmBlbmNvZGVfdGhyZXNob2xkYCBhdHRyaWJ1dGUgb2YKKyAgOmNsYXNzOmBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcmAsIHdoaWNoIGNvbnRhaW5zIGEgc2l6ZSBpbiBieXRlczsKKyAgcmVzcG9uc2VzIGxhcmdlciB0aGFuIHRoaXMgd2lsbCBiZSBjb21wcmVzc2VkLgorICAoQ29udHJpYnV0ZWQgYnkgS3Jpc3Rqw6FuIFZhbHVyIErDs25zc29uOyA6aXNzdWU6YDYyNjdgLikKKworKiBUaGUgOm1vZDpgemlwZmlsZWAgbW9kdWxlJ3MgOmNsYXNzOmB+emlwZmlsZS5aaXBGaWxlYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQKKyAgbWFuYWdlbWVudCBwcm90b2NvbCwgc28geW91IGNhbiB3cml0ZSBgYHdpdGggemlwZmlsZS5aaXBGaWxlKC4uLikgYXMgZjpgYC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIEN1cnRpbjsgOmlzc3VlOmA1NTExYC4pCisKKyAgOm1vZDpgemlwZmlsZWAgbm93IGFsc28gc3VwcG9ydHMgYXJjaGl2aW5nIGVtcHR5IGRpcmVjdG9yaWVzIGFuZAorICBleHRyYWN0cyB0aGVtIGNvcnJlY3RseS4gIChGaXhlZCBieSBLdWJhIFdpZWN6b3JlazsgOmlzc3VlOmA0NzEwYC4pCisgIFJlYWRpbmcgZmlsZXMgb3V0IG9mIGFuIGFyY2hpdmUgaXMgZmFzdGVyLCBhbmQgaW50ZXJsZWF2aW5nCisgIDptZXRoOmB+emlwZmlsZS5aaXBGaWxlLnJlYWRgIGFuZCA6bWV0aDpgfnppcGZpbGUuWmlwRmlsZS5yZWFkbGluZWAgbm93IHdvcmtzIGNvcnJlY3RseS4KKyAgKENvbnRyaWJ1dGVkIGJ5IE5pciBBaWRlczsgOmlzc3VlOmA3NjEwYC4pCisKKyAgVGhlIDpmdW5jOmB+emlwZmlsZS5pc196aXBmaWxlYCBmdW5jdGlvbiBub3cKKyAgYWNjZXB0cyBhIGZpbGUgb2JqZWN0LCBpbiBhZGRpdGlvbiB0byB0aGUgcGF0aCBuYW1lcyBhY2NlcHRlZCBpbiBlYXJsaWVyCisgIHZlcnNpb25zLiAgKENvbnRyaWJ1dGVkIGJ5IEdhYnJpZWwgR2VuZWxsaW5hOyA6aXNzdWU6YDQ3NTZgLikKKworICBUaGUgOm1ldGg6YH56aXBmaWxlLlppcEZpbGUud3JpdGVzdHJgIG1ldGhvZCBub3cgaGFzIGFuIG9wdGlvbmFsICpjb21wcmVzc190eXBlKiBwYXJhbWV0ZXIKKyAgdGhhdCBsZXRzIHlvdSBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBtZXRob2Qgc3BlY2lmaWVkIGluIHRoZQorICA6Y2xhc3M6YH56aXBmaWxlLlppcEZpbGVgIGNvbnN0cnVjdG9yLiAgKENvbnRyaWJ1dGVkIGJ5IFJvbmFsZCBPdXNzb3JlbjsKKyAgOmlzc3VlOmA2MDAzYC4pCisKKworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLi4gd2hvbGUgbmV3IG1vZHVsZXMgZ2V0IGRlc2NyaWJlZCBpbiBzdWJzZWN0aW9ucyBoZXJlCisKKworLi4gX2ltcG9ydGxpYi1zZWN0aW9uOgorCitOZXcgbW9kdWxlOiBpbXBvcnRsaWIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRob24gMy4xIGluY2x1ZGVzIHRoZSA6bW9kOmBpbXBvcnRsaWJgIHBhY2thZ2UsIGEgcmUtaW1wbGVtZW50YXRpb24KK29mIHRoZSBsb2dpYyB1bmRlcmx5aW5nIFB5dGhvbidzIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4KKzptb2Q6YGltcG9ydGxpYmAgaXMgdXNlZnVsIGZvciBpbXBsZW1lbnRvcnMgb2YgUHl0aG9uIGludGVycHJldGVycyBhbmQKK3RvIHVzZXJzIHdobyB3aXNoIHRvIHdyaXRlIG5ldyBpbXBvcnRlcnMgdGhhdCBjYW4gcGFydGljaXBhdGUgaW4gdGhlCitpbXBvcnQgcHJvY2Vzcy4gIFB5dGhvbiAyLjcgZG9lc24ndCBjb250YWluIHRoZSBjb21wbGV0ZQorOm1vZDpgaW1wb3J0bGliYCBwYWNrYWdlLCBidXQgaW5zdGVhZCBoYXMgYSB0aW55IHN1YnNldCB0aGF0IGNvbnRhaW5zCithIHNpbmdsZSBmdW5jdGlvbiwgOmZ1bmM6YH5pbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAuCisKK2BgaW1wb3J0X21vZHVsZShuYW1lLCBwYWNrYWdlPU5vbmUpYGAgaW1wb3J0cyBhIG1vZHVsZS4gICpuYW1lKiBpcworYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbW9kdWxlIG9yIHBhY2thZ2UncyBuYW1lLiAgSXQncyBwb3NzaWJsZSB0byBkbworcmVsYXRpdmUgaW1wb3J0cyBieSBwcm92aWRpbmcgYSBzdHJpbmcgdGhhdCBiZWdpbnMgd2l0aCBhIGBgLmBgCitjaGFyYWN0ZXIsIHN1Y2ggYXMgYGAuLnV0aWxzLmVycm9yc2BgLiAgRm9yIHJlbGF0aXZlIGltcG9ydHMsIHRoZQorKnBhY2thZ2UqIGFyZ3VtZW50IG11c3QgYmUgcHJvdmlkZWQgYW5kIGlzIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRoYXQKK3dpbGwgYmUgdXNlZCBhcyB0aGUgYW5jaG9yIGZvcgordGhlIHJlbGF0aXZlIGltcG9ydC4gIDpmdW5jOmB+aW1wb3J0bGliLmltcG9ydF9tb2R1bGVgIGJvdGggaW5zZXJ0cyB0aGUgaW1wb3J0ZWQKK21vZHVsZSBpbnRvIGBgc3lzLm1vZHVsZXNgYCBhbmQgcmV0dXJucyB0aGUgbW9kdWxlIG9iamVjdC4KKworSGVyZSBhcmUgc29tZSBleGFtcGxlczo6CisKKyAgICA+Pj4gZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGltcG9ydF9tb2R1bGUKKyAgICA+Pj4gYW55ZGJtID0gaW1wb3J0X21vZHVsZSgnYW55ZGJtJykgICMgU3RhbmRhcmQgYWJzb2x1dGUgaW1wb3J0CisgICAgPj4+IGFueWRibQorICAgIDxtb2R1bGUgJ2FueWRibScgZnJvbSAnL3AvcHl0aG9uL0xpYi9hbnlkYm0ucHknPgorICAgID4+PiAjIFJlbGF0aXZlIGltcG9ydAorICAgID4+PiBmaWxlX3V0aWwgPSBpbXBvcnRfbW9kdWxlKCcuLmZpbGVfdXRpbCcsICdkaXN0dXRpbHMuY29tbWFuZCcpCisgICAgPj4+IGZpbGVfdXRpbAorICAgIDxtb2R1bGUgJ2Rpc3R1dGlscy5maWxlX3V0aWwnIGZyb20gJy9weXRob24vTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHljJz4KKworOm1vZDpgaW1wb3J0bGliYCB3YXMgaW1wbGVtZW50ZWQgYnkgQnJldHQgQ2Fubm9uIGFuZCBpbnRyb2R1Y2VkIGluCitQeXRob24gMy4xLgorCisKK05ldyBtb2R1bGU6IHN5c2NvbmZpZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmBzeXNjb25maWdgIG1vZHVsZSBoYXMgYmVlbiBwdWxsZWQgb3V0IG9mIHRoZSBEaXN0dXRpbHMKK3BhY2thZ2UsIGJlY29taW5nIGEgbmV3IHRvcC1sZXZlbCBtb2R1bGUgaW4gaXRzIG93biByaWdodC4KKzptb2Q6YHN5c2NvbmZpZ2AgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBnZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0CitQeXRob24ncyBidWlsZCBwcm9jZXNzOiBjb21waWxlciBzd2l0Y2hlcywgaW5zdGFsbGF0aW9uIHBhdGhzLCB0aGUKK3BsYXRmb3JtIG5hbWUsIGFuZCB3aGV0aGVyIFB5dGhvbiBpcyBydW5uaW5nIGZyb20gaXRzIHNvdXJjZQorZGlyZWN0b3J5LgorCitTb21lIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZSBhcmU6CisKKyogOmZ1bmM6YH5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXJgIHJldHVybnMgdmFyaWFibGVzIGZyb20gUHl0aG9uJ3MKKyAgTWFrZWZpbGUgYW5kIHRoZSA6ZmlsZTpgcHljb25maWcuaGAgZmlsZS4KKyogOmZ1bmM6YH5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzYCByZXR1cm5zIGEgZGljdGlvbmFyeSBjb250YWluaW5nCisgIGFsbCBvZiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisqIDpmdW5jOmB+c3lzY29uZmlnLmdldF9wYXRoYCByZXR1cm5zIHRoZSBjb25maWd1cmVkIHBhdGggZm9yCisgIGEgcGFydGljdWxhciB0eXBlIG9mIG1vZHVsZTogdGhlIHN0YW5kYXJkIGxpYnJhcnksCisgIHNpdGUtc3BlY2lmaWMgbW9kdWxlcywgcGxhdGZvcm0tc3BlY2lmaWMgbW9kdWxlcywgZXRjLgorKiA6ZnVuYzpgfnN5c2NvbmZpZy5pc19weXRob25fYnVpbGRgIHJldHVybnMgdHJ1ZSBpZiB5b3UncmUgcnVubmluZyBhCisgIGJpbmFyeSBmcm9tIGEgUHl0aG9uIHNvdXJjZSB0cmVlLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorCitDb25zdWx0IHRoZSA6bW9kOmBzeXNjb25maWdgIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscyBhbmQgZm9yCithIGNvbXBsZXRlIGxpc3Qgb2YgZnVuY3Rpb25zLgorCitUaGUgRGlzdHV0aWxzIHBhY2thZ2UgYW5kIDptb2Q6YHN5c2NvbmZpZ2AgYXJlIG5vdyBtYWludGFpbmVkIGJ5IFRhcmVrCitaaWFkw6ksIHdobyBoYXMgYWxzbyBzdGFydGVkIGEgRGlzdHV0aWxzMiBwYWNrYWdlIChzb3VyY2UgcmVwb3NpdG9yeSBhdAoraHR0cDovL2hnLnB5dGhvbi5vcmcvZGlzdHV0aWxzMi8pIGZvciBkZXZlbG9waW5nIGEgbmV4dC1nZW5lcmF0aW9uCit2ZXJzaW9uIG9mIERpc3R1dGlscy4KKworCit0dGs6IFRoZW1lZCBXaWRnZXRzIGZvciBUaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGNsL1RrIDguNSBpbmNsdWRlcyBhIHNldCBvZiB0aGVtZWQgd2lkZ2V0cyB0aGF0IHJlLWltcGxlbWVudCBiYXNpYyBUaword2lkZ2V0cyBidXQgaGF2ZSBhIG1vcmUgY3VzdG9taXphYmxlIGFwcGVhcmFuY2UgYW5kIGNhbiB0aGVyZWZvcmUgbW9yZQorY2xvc2VseSByZXNlbWJsZSB0aGUgbmF0aXZlIHBsYXRmb3JtJ3Mgd2lkZ2V0cy4gIFRoaXMgd2lkZ2V0CitzZXQgd2FzIG9yaWdpbmFsbHkgY2FsbGVkIFRpbGUsIGJ1dCB3YXMgcmVuYW1lZCB0byBUdGsgKGZvciAidGhlbWVkIFRrIikKK29uIGJlaW5nIGFkZGVkIHRvIFRjbC9UY2sgcmVsZWFzZSA4LjUuCisKK1RvIGxlYXJuIG1vcmUsIHJlYWQgdGhlIDptb2Q6YHR0a2AgbW9kdWxlIGRvY3VtZW50YXRpb24uICBZb3UgbWF5IGFsc28KK3dpc2ggdG8gcmVhZCB0aGUgVGNsL1RrIG1hbnVhbCBwYWdlIGRlc2NyaWJpbmcgdGhlCitUdGsgdGhlbWUgZW5naW5lLCBhdmFpbGFibGUgYXQKK2h0dHA6Ly93d3cudGNsLnRrL21hbi90Y2w4LjUvVGtDbWQvdHRrX2ludHJvLmh0bS4gU29tZQorc2NyZWVuc2hvdHMgb2YgdGhlIFB5dGhvbi9UdGsgY29kZSBpbiB1c2UgYXJlIGF0CitodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHl0aG9uLXR0ay93aWtpL1NjcmVlbnNob3RzLgorCitUaGUgOm1vZDpgdHRrYCBtb2R1bGUgd2FzIHdyaXR0ZW4gYnkgR3VpbGhlcm1lIFBvbG8gYW5kIGFkZGVkIGluCis6aXNzdWU6YDI5ODNgLiAgQW4gYWx0ZXJuYXRlIHZlcnNpb24gY2FsbGVkIGBgVGlsZS5weWBgLCB3cml0dGVuIGJ5CitNYXJ0aW4gRnJhbmtsaW4gYW5kIG1haW50YWluZWQgYnkgS2V2aW4gV2FsemVyLCB3YXMgcHJvcG9zZWQgZm9yCitpbmNsdXNpb24gaW4gOmlzc3VlOmAyNjE4YCwgYnV0IHRoZSBhdXRob3JzIGFyZ3VlZCB0aGF0IEd1aWxoZXJtZQorUG9sbydzIHdvcmsgd2FzIG1vcmUgY29tcHJlaGVuc2l2ZS4KKworCisuLiBfdW5pdHRlc3Qtc2VjdGlvbjoKKworVXBkYXRlZCBtb2R1bGU6IHVuaXR0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIDptb2Q6YHVuaXR0ZXN0YCBtb2R1bGUgd2FzIGdyZWF0bHkgZW5oYW5jZWQ7IG1hbnkKK25ldyBmZWF0dXJlcyB3ZXJlIGFkZGVkLiAgTW9zdCBvZiB0aGVzZSBmZWF0dXJlcyB3ZXJlIGltcGxlbWVudGVkCitieSBNaWNoYWVsIEZvb3JkLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLiAgVGhlIGVuaGFuY2VkIHZlcnNpb24gb2YKK3RoZSBtb2R1bGUgaXMgZG93bmxvYWRhYmxlIHNlcGFyYXRlbHkgZm9yIHVzZSB3aXRoIFB5dGhvbiB2ZXJzaW9ucyAyLjQgdG8gMi42LAorcGFja2FnZWQgYXMgdGhlIDptb2Q6YHVuaXR0ZXN0MmAgcGFja2FnZSwgZnJvbQoraHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL3VuaXR0ZXN0Mi4KKworV2hlbiB1c2VkIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdGhlIG1vZHVsZSBjYW4gYXV0b21hdGljYWxseSBkaXNjb3ZlcgordGVzdHMuICBJdCdzIG5vdCBhcyBmYW5jeSBhcyBgcHkudGVzdCA8aHR0cDovL3B5dGVzdC5vcmc+YF9fIG9yCitgbm9zZSA8aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5dGhvbi1ub3NlLz5gX18sIGJ1dCBwcm92aWRlcyBhIHNpbXBsZSB3YXkKK3RvIHJ1biB0ZXN0cyBrZXB0IHdpdGhpbiBhIHNldCBvZiBwYWNrYWdlIGRpcmVjdG9yaWVzLiAgRm9yIGV4YW1wbGUsCit0aGUgZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBzZWFyY2ggdGhlIDpmaWxlOmB0ZXN0L2Agc3ViZGlyZWN0b3J5IGZvcgorYW55IGltcG9ydGFibGUgdGVzdCBmaWxlcyBuYW1lZCBgYHRlc3QqLnB5YGA6OgorCisgICBweXRob24gLW0gdW5pdHRlc3QgZGlzY292ZXIgLXMgdGVzdAorCitDb25zdWx0IHRoZSA6bW9kOmB1bml0dGVzdGAgbW9kdWxlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4KKyhEZXZlbG9wZWQgaW4gOmlzc3VlOmA2MDAxYC4pCisKK1RoZSA6ZnVuYzpgfnVuaXR0ZXN0Lm1haW5gIGZ1bmN0aW9uIHN1cHBvcnRzIHNvbWUgb3RoZXIgbmV3IG9wdGlvbnM6CisKKyogOm9wdGlvbjpgLWJgIG9yIDpvcHRpb246YC0tYnVmZmVyYCB3aWxsIGJ1ZmZlciB0aGUgc3RhbmRhcmQgb3V0cHV0CisgIGFuZCBzdGFuZGFyZCBlcnJvciBzdHJlYW1zIGR1cmluZyBlYWNoIHRlc3QuICBJZiB0aGUgdGVzdCBwYXNzZXMsCisgIGFueSByZXN1bHRpbmcgb3V0cHV0IHdpbGwgYmUgZGlzY2FyZGVkOyBvbiBmYWlsdXJlLCB0aGUgYnVmZmVyZWQKKyAgb3V0cHV0IHdpbGwgYmUgZGlzcGxheWVkLgorCisqIDpvcHRpb246YC1jYCBvciA6b3B0aW9uOmAtLWNhdGNoYCB3aWxsIGNhdXNlIHRoZSBjb250cm9sLUMgaW50ZXJydXB0CisgIHRvIGJlIGhhbmRsZWQgbW9yZSBncmFjZWZ1bGx5LiAgSW5zdGVhZCBvZiBpbnRlcnJ1cHRpbmcgdGhlIHRlc3QKKyAgcHJvY2VzcyBpbW1lZGlhdGVseSwgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRlc3Qgd2lsbCBiZSBjb21wbGV0ZWQKKyAgYW5kIHRoZW4gdGhlIHBhcnRpYWwgcmVzdWx0cyB1cCB0byB0aGUgaW50ZXJydXB0aW9uIHdpbGwgYmUgcmVwb3J0ZWQuCisgIElmIHlvdSdyZSBpbXBhdGllbnQsIGEgc2Vjb25kIHByZXNzIG9mIGNvbnRyb2wtQyB3aWxsIGNhdXNlIGFuIGltbWVkaWF0ZQorICBpbnRlcnJ1cHRpb24uCisKKyAgVGhpcyBjb250cm9sLUMgaGFuZGxlciB0cmllcyB0byBhdm9pZCBjYXVzaW5nIHByb2JsZW1zIHdoZW4gdGhlIGNvZGUKKyAgYmVpbmcgdGVzdGVkIG9yIHRoZSB0ZXN0cyBiZWluZyBydW4gaGF2ZSBkZWZpbmVkIGEgc2lnbmFsIGhhbmRsZXIgb2YKKyAgdGhlaXIgb3duLCBieSBub3RpY2luZyB0aGF0IGEgc2lnbmFsIGhhbmRsZXIgd2FzIGFscmVhZHkgc2V0IGFuZAorICBjYWxsaW5nIGl0LiAgSWYgdGhpcyBkb2Vzbid0IHdvcmsgZm9yIHlvdSwgdGhlcmUncyBhCisgIDpmdW5jOmB+dW5pdHRlc3QucmVtb3ZlSGFuZGxlcmAgZGVjb3JhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFyayB0ZXN0cyB0aGF0CisgIHNob3VsZCBoYXZlIHRoZSBjb250cm9sLUMgaGFuZGxpbmcgZGlzYWJsZWQuCisKKyogOm9wdGlvbjpgLWZgIG9yIDpvcHRpb246YC0tZmFpbGZhc3RgIG1ha2VzCisgIHRlc3QgZXhlY3V0aW9uIHN0b3AgaW1tZWRpYXRlbHkgd2hlbiBhIHRlc3QgZmFpbHMgaW5zdGVhZCBvZgorICBjb250aW51aW5nIHRvIGV4ZWN1dGUgZnVydGhlciB0ZXN0cy4gIChTdWdnZXN0ZWQgYnkgQ2xpZmYgRHllciBhbmQKKyAgaW1wbGVtZW50ZWQgYnkgTWljaGFlbCBGb29yZDsgOmlzc3VlOmA4MDc0YC4pCisKK1RoZSBwcm9ncmVzcyBtZXNzYWdlcyBub3cgc2hvdyAneCcgZm9yIGV4cGVjdGVkIGZhaWx1cmVzCithbmQgJ3UnIGZvciB1bmV4cGVjdGVkIHN1Y2Nlc3NlcyB3aGVuIHJ1biBpbiB2ZXJib3NlIG1vZGUuCisoQ29udHJpYnV0ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb24uKQorCitUZXN0IGNhc2VzIGNhbiByYWlzZSB0aGUgOmV4YzpgfnVuaXR0ZXN0LlNraXBUZXN0YCBleGNlcHRpb24gdG8gc2tpcCBhCit0ZXN0ICg6aXNzdWU6YDEwMzQwNTNgKS4KKworVGhlIGVycm9yIG1lc3NhZ2VzIGZvciA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsYCwKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0VHJ1ZWAsIGFuZCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEZhbHNlYAorZmFpbHVyZXMgbm93IHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbi4gIElmIHlvdSBzZXQgdGhlCis6YXR0cjpgfnVuaXR0ZXN0LlRlc3RDYXNlLmxvbmdNZXNzYWdlYCBhdHRyaWJ1dGUgb2YgeW91ciA6Y2xhc3M6YH51bml0dGVzdC5UZXN0Q2FzZWAgY2xhc3NlcyB0bworVHJ1ZSwgYm90aCB0aGUgc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBhbmQgYW55IGFkZGl0aW9uYWwgbWVzc2FnZSB5b3UKK3Byb3ZpZGUgd2lsbCBiZSBwcmludGVkIGZvciBmYWlsdXJlcy4gIChBZGRlZCBieSBNaWNoYWVsIEZvb3JkOyA6aXNzdWU6YDU2NjNgLikKKworVGhlIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmFpc2VzYCBtZXRob2Qgbm93CityZXR1cm5zIGEgY29udGV4dCBoYW5kbGVyIHdoZW4gY2FsbGVkIHdpdGhvdXQgcHJvdmlkaW5nIGEgY2FsbGFibGUKK29iamVjdCB0byBydW4uICBGb3IgZXhhbXBsZSwgeW91IGNhbiB3cml0ZSB0aGlzOjoKKworICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgIHt9Wydmb28nXQorCisoSW1wbGVtZW50ZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgNDQ0NGAuKQorCisuLiByZXYgNzg3NzQKKworTW9kdWxlLSBhbmQgY2xhc3MtbGV2ZWwgc2V0dXAgYW5kIHRlYXJkb3duIGZpeHR1cmVzIGFyZSBub3cgc3VwcG9ydGVkLgorTW9kdWxlcyBjYW4gY29udGFpbiA6ZnVuYzpgfnVuaXR0ZXN0LnNldFVwTW9kdWxlYCBhbmQgOmZ1bmM6YH51bml0dGVzdC50ZWFyRG93bk1vZHVsZWAKK2Z1bmN0aW9ucy4gIENsYXNzZXMgY2FuIGhhdmUgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5zZXRVcENsYXNzYCBhbmQKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UudGVhckRvd25DbGFzc2AgbWV0aG9kcyB0aGF0IG11c3QgYmUgZGVmaW5lZCBhcyBjbGFzcyBtZXRob2RzCisodXNpbmcgYGBAY2xhc3NtZXRob2RgYCBvciBlcXVpdmFsZW50KS4gIFRoZXNlIGZ1bmN0aW9ucyBhbmQKK21ldGhvZHMgYXJlIGludm9rZWQgd2hlbiB0aGUgdGVzdCBydW5uZXIgc3dpdGNoZXMgdG8gYSB0ZXN0IGNhc2UgaW4gYQorZGlmZmVyZW50IG1vZHVsZSBvciBjbGFzcy4KKworVGhlIG1ldGhvZHMgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hZGRDbGVhbnVwYCBhbmQKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuZG9DbGVhbnVwc2Agd2VyZSBhZGRlZC4KKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYWRkQ2xlYW51cGAgbGV0cyB5b3UgYWRkIGNsZWFudXAgZnVuY3Rpb25zIHRoYXQKK3dpbGwgYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseSAoYWZ0ZXIgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5zZXRVcGAgaWYKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2Uuc2V0VXBgIGZhaWxzLCBvdGhlcndpc2UgYWZ0ZXIgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS50ZWFyRG93bmApLiBUaGlzIGFsbG93cworZm9yIG11Y2ggc2ltcGxlciByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZHVyaW5nIHRlc3RzCisoOmlzc3VlOmA1Njc5YCkuCisKK0EgbnVtYmVyIG9mIG5ldyBtZXRob2RzIHdlcmUgYWRkZWQgdGhhdCBwcm92aWRlIG1vcmUgc3BlY2lhbGl6ZWQKK3Rlc3RzLiAgTWFueSBvZiB0aGVzZSBtZXRob2RzIHdlcmUgd3JpdHRlbiBieSBHb29nbGUgZW5naW5lZXJzCitmb3IgdXNlIGluIHRoZWlyIHRlc3Qgc3VpdGVzOyBHcmVnb3J5IFAuIFNtaXRoLCBNaWNoYWVsIEZvb3JkLCBhbmQKK0d2UiB3b3JrZWQgb24gbWVyZ2luZyB0aGVtIGludG8gUHl0aG9uJ3MgdmVyc2lvbiBvZiA6bW9kOmB1bml0dGVzdGAuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc05vbmVgIGFuZCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElzTm90Tm9uZWAgdGFrZSBvbmUKKyAgZXhwcmVzc2lvbiBhbmQgdmVyaWZ5IHRoYXQgdGhlIHJlc3VsdCBpcyBvciBpcyBub3QgYGBOb25lYGAuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc2AgYW5kIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNOb3RgCisgIHRha2UgdHdvIHZhbHVlcyBhbmQgY2hlY2sgd2hldGhlciB0aGUgdHdvIHZhbHVlcyBldmFsdWF0ZSB0byB0aGUgc2FtZSBvYmplY3Qgb3Igbm90LgorICAoQWRkZWQgYnkgTWljaGFlbCBGb29yZDsgOmlzc3VlOmAyNTc4YC4pCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc0luc3RhbmNlYCBhbmQKKyAgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RJc0luc3RhbmNlYCBjaGVjayB3aGV0aGVyCisgIHRoZSByZXN1bHRpbmcgb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGEgcGFydGljdWxhciBjbGFzcywgb3Igb2YKKyAgb25lIG9mIGEgdHVwbGUgb2YgY2xhc3Nlcy4gIChBZGRlZCBieSBHZW9yZyBCcmFuZGw7IDppc3N1ZTpgNzAzMWAuKQorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0R3JlYXRlcmAsIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0R3JlYXRlckVxdWFsYCwKKyAgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMZXNzYCwgYW5kIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc0VxdWFsYCBjb21wYXJlCisgIHR3byBxdWFudGl0aWVzLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TXVsdGlMaW5lRXF1YWxgIGNvbXBhcmVzIHR3byBzdHJpbmdzLCBhbmQgaWYgdGhleSdyZQorICBub3QgZXF1YWwsIGRpc3BsYXlzIGEgaGVscGZ1bCBjb21wYXJpc29uIHRoYXQgaGlnaGxpZ2h0cyB0aGUKKyAgZGlmZmVyZW5jZXMgaW4gdGhlIHR3byBzdHJpbmdzLiAgVGhpcyBjb21wYXJpc29uIGlzIG5vdyB1c2VkIGJ5CisgIGRlZmF1bHQgd2hlbiBVbmljb2RlIHN0cmluZ3MgYXJlIGNvbXBhcmVkIHdpdGggOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRFcXVhbGAuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSZWdleHBNYXRjaGVzYCBhbmQKKyAgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RSZWdleHBNYXRjaGVzYCBjaGVja3Mgd2hldGhlciB0aGUKKyAgZmlyc3QgYXJndW1lbnQgaXMgYSBzdHJpbmcgbWF0Y2hpbmcgb3Igbm90IG1hdGNoaW5nIHRoZSByZWd1bGFyCisgIGV4cHJlc3Npb24gcHJvdmlkZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCAoOmlzc3VlOmA4MDM4YCkuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSYWlzZXNSZWdleHBgIGNoZWNrcyB3aGV0aGVyIGEgcGFydGljdWxhciBleGNlcHRpb24KKyAgaXMgcmFpc2VkLCBhbmQgdGhlbiBhbHNvIGNoZWNrcyB0aGF0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YKKyAgdGhlIGV4Y2VwdGlvbiBtYXRjaGVzIHRoZSBwcm92aWRlZCByZWd1bGFyIGV4cHJlc3Npb24uCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJbmAgYW5kIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90SW5gCisgIHRlc3RzIHdoZXRoZXIgKmZpcnN0KiBpcyBvciBpcyBub3QgaW4gICpzZWNvbmQqLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXRlbXNFcXVhbGAgdGVzdHMgd2hldGhlciB0d28gcHJvdmlkZWQgc2VxdWVuY2VzCisgIGNvbnRhaW4gdGhlIHNhbWUgZWxlbWVudHMuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRTZXRFcXVhbGAgY29tcGFyZXMgd2hldGhlciB0d28gc2V0cyBhcmUgZXF1YWwsIGFuZAorICBvbmx5IHJlcG9ydHMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHNldHMgaW4gY2FzZSBvZiBlcnJvci4KKworKiBTaW1pbGFybHksIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGlzdEVxdWFsYCBhbmQgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUdXBsZUVxdWFsYAorICBjb21wYXJlIHRoZSBzcGVjaWZpZWQgdHlwZXMgYW5kIGV4cGxhaW4gYW55IGRpZmZlcmVuY2VzIHdpdGhvdXQgbmVjZXNzYXJpbHkKKyAgcHJpbnRpbmcgdGhlaXIgZnVsbCB2YWx1ZXM7IHRoZXNlIG1ldGhvZHMgYXJlIG5vdyB1c2VkIGJ5IGRlZmF1bHQKKyAgd2hlbiBjb21wYXJpbmcgbGlzdHMgYW5kIHR1cGxlcyB1c2luZyA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsYC4KKyAgTW9yZSBnZW5lcmFsbHksIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0U2VxdWVuY2VFcXVhbGAgY29tcGFyZXMgdHdvIHNlcXVlbmNlcworICBhbmQgY2FuIG9wdGlvbmFsbHkgY2hlY2sgd2hldGhlciBib3RoIHNlcXVlbmNlcyBhcmUgb2YgYQorICBwYXJ0aWN1bGFyIHR5cGUuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnREaWN0RXF1YWxgIGNvbXBhcmVzIHR3byBkaWN0aW9uYXJpZXMgYW5kIHJlcG9ydHMgdGhlCisgIGRpZmZlcmVuY2VzOyBpdCdzIG5vdyB1c2VkIGJ5IGRlZmF1bHQgd2hlbiB5b3UgY29tcGFyZSB0d28gZGljdGlvbmFyaWVzCisgIHVzaW5nIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWxgLiAgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXRgIGNoZWNrcyB3aGV0aGVyCisgIGFsbCBvZiB0aGUga2V5L3ZhbHVlIHBhaXJzIGluICpmaXJzdCogYXJlIGZvdW5kIGluICpzZWNvbmQqLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWxgIGFuZCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFsYCB0ZXN0CisgIHdoZXRoZXIgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuICBUaGlzIG1ldGhvZAorICBjYW4gZWl0aGVyIHJvdW5kIHRoZWlyIGRpZmZlcmVuY2UgdG8gYW4gb3B0aW9uYWxseS1zcGVjaWZpZWQgbnVtYmVyCisgIG9mICpwbGFjZXMqICh0aGUgZGVmYXVsdCBpcyA3KSBhbmQgY29tcGFyZSBpdCB0byB6ZXJvLCBvciByZXF1aXJlCisgIHRoZSBkaWZmZXJlbmNlIHRvIGJlIHNtYWxsZXIgdGhhbiBhIHN1cHBsaWVkICpkZWx0YSogdmFsdWUuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lYCBwcm9wZXJseSBob25vcnMgdGhlCisgIDphdHRyOmB+dW5pdHRlc3QuVGVzdExvYWRlci5zdWl0ZUNsYXNzYCBhdHRyaWJ1dGUgb2YKKyAgdGhlIDpjbGFzczpgfnVuaXR0ZXN0LlRlc3RMb2FkZXJgLiAoRml4ZWQgYnkgTWFyayBSb2RkeTsgOmlzc3VlOmA2ODY2YC4pCisKKyogQSBuZXcgaG9vayBsZXRzIHlvdSBleHRlbmQgdGhlIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWxgIG1ldGhvZCB0byBoYW5kbGUKKyAgbmV3IGRhdGEgdHlwZXMuICBUaGUgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hZGRUeXBlRXF1YWxpdHlGdW5jYCBtZXRob2QgdGFrZXMgYSB0eXBlCisgIG9iamVjdCBhbmQgYSBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB3aGVuIGJvdGggb2YgdGhlCisgIG9iamVjdHMgYmVpbmcgY29tcGFyZWQgYXJlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4gIFRoaXMgZnVuY3Rpb24KKyAgc2hvdWxkIGNvbXBhcmUgdGhlIHR3byBvYmplY3RzIGFuZCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhleSBkb24ndAorICBtYXRjaDsgaXQncyBhIGdvb2QgaWRlYSBmb3IgdGhlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYWRkaXRpb25hbAorICBpbmZvcm1hdGlvbiBhYm91dCB3aHkgdGhlIHR3byBvYmplY3RzIGFyZW4ndCBtYXRjaGluZywgbXVjaCBhcyB0aGUgbmV3CisgIHNlcXVlbmNlIGNvbXBhcmlzb24gbWV0aG9kcyBkby4KKworOmZ1bmM6YHVuaXR0ZXN0Lm1haW5gIG5vdyB0YWtlcyBhbiBvcHRpb25hbCBgYGV4aXRgYCBhcmd1bWVudC4gIElmCitGYWxzZSwgOmZ1bmM6YH51bml0dGVzdC5tYWluYCBkb2Vzbid0IGNhbGwgOmZ1bmM6YHN5cy5leGl0YCwgYWxsb3dpbmcKKzpmdW5jOmB+dW5pdHRlc3QubWFpbmAgdG8gYmUgdXNlZCBmcm9tIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlci4KKyhDb250cmlidXRlZCBieSBKLiBQYWJsbyBGZXJuw6FuZGV6OyA6aXNzdWU6YDMzNzlgLikKKworOmNsYXNzOmB+dW5pdHRlc3QuVGVzdFJlc3VsdGAgaGFzIG5ldyA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RhcnRUZXN0UnVuYCBhbmQKKzptZXRoOmB+dW5pdHRlc3QuVGVzdFJlc3VsdC5zdG9wVGVzdFJ1bmAgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlCithbmQgYWZ0ZXIgYSB0ZXN0IHJ1bi4gIChDb250cmlidXRlZCBieSBSb2JlcnQgQ29sbGluczsgOmlzc3VlOmA1NzI4YC4pCisKK1dpdGggYWxsIHRoZXNlIGNoYW5nZXMsIHRoZSA6ZmlsZTpgdW5pdHRlc3QucHlgIHdhcyBiZWNvbWluZyBhd2t3YXJkbHkKK2xhcmdlLCBzbyB0aGUgbW9kdWxlIHdhcyB0dXJuZWQgaW50byBhIHBhY2thZ2UgYW5kIHRoZSBjb2RlIHNwbGl0IGludG8KK3NldmVyYWwgZmlsZXMgKGJ5IEJlbmphbWluIFBldGVyc29uKS4gIFRoaXMgZG9lc24ndCBhZmZlY3QgaG93IHRoZQorbW9kdWxlIGlzIGltcG9ydGVkIG9yIHVzZWQuCisKKy4uIHNlZWFsc286OgorCisgIGh0dHA6Ly93d3cudm9pZHNwYWNlLm9yZy51ay9weXRob24vYXJ0aWNsZXMvdW5pdHRlc3QyLnNodG1sCisgICAgRGVzY3JpYmVzIHRoZSBuZXcgZmVhdHVyZXMsIGhvdyB0byB1c2UgdGhlbSwgYW5kIHRoZQorICAgIHJhdGlvbmFsZSBmb3IgdmFyaW91cyBkZXNpZ24gZGVjaXNpb25zLiAgKEJ5IE1pY2hhZWwgRm9vcmQuKQorCisuLiBfZWxlbWVudHRyZWUtc2VjdGlvbjoKKworVXBkYXRlZCBtb2R1bGU6IEVsZW1lbnRUcmVlIDEuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB2ZXJzaW9uIG9mIHRoZSBFbGVtZW50VHJlZSBsaWJyYXJ5IGluY2x1ZGVkIHdpdGggUHl0aG9uIHdhcyB1cGRhdGVkIHRvCit2ZXJzaW9uIDEuMy4gIFNvbWUgb2YgdGhlIG5ldyBmZWF0dXJlcyBhcmU6CisKKyogVGhlIHZhcmlvdXMgcGFyc2luZyBmdW5jdGlvbnMgbm93IHRha2UgYSAqcGFyc2VyKiBrZXl3b3JkIGFyZ3VtZW50CisgIGdpdmluZyBhbiA6Y2xhc3M6YFhNTFBhcnNlcmAgaW5zdGFuY2UgdGhhdCB3aWxsCisgIGJlIHVzZWQuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSBmaWxlJ3MgaW50ZXJuYWwgZW5jb2Rpbmc6OgorCisgICAgcCA9IEVULlhNTFBhcnNlcihlbmNvZGluZz0ndXRmLTgnKQorICAgIHQgPSBFVC5YTUwoIiIiPHJvb3QvPiIiIiwgcGFyc2VyPXApCisKKyAgRXJyb3JzIGluIHBhcnNpbmcgWE1MIG5vdyByYWlzZSBhIDpleGM6YFBhcnNlRXJyb3JgIGV4Y2VwdGlvbiwgd2hvc2UKKyAgaW5zdGFuY2VzIGhhdmUgYSA6YXR0cjpgcG9zaXRpb25gIGF0dHJpYnV0ZQorICBjb250YWluaW5nIGEgKCpsaW5lKiwgKmNvbHVtbiopIHR1cGxlIGdpdmluZyB0aGUgbG9jYXRpb24gb2YgdGhlIHByb2JsZW0uCisKKyogRWxlbWVudFRyZWUncyBjb2RlIGZvciBjb252ZXJ0aW5nIHRyZWVzIHRvIGEgc3RyaW5nIGhhcyBiZWVuCisgIHNpZ25pZmljYW50bHkgcmV3b3JrZWQsIG1ha2luZyBpdCByb3VnaGx5IHR3aWNlIGFzIGZhc3QgaW4gbWFueQorICBjYXNlcy4gIFRoZSA6Y2xhc3M6YEVsZW1lbnRUcmVlYCA6bWV0aDpgd3JpdGVgIGFuZCA6Y2xhc3M6YEVsZW1lbnRgCisgIDptZXRoOmB3cml0ZWAgbWV0aG9kcyBub3cgaGF2ZSBhICptZXRob2QqIHBhcmFtZXRlciB0aGF0IGNhbiBiZQorICAieG1sIiAodGhlIGRlZmF1bHQpLCAiaHRtbCIsIG9yICJ0ZXh0Ii4gIEhUTUwgbW9kZSB3aWxsIG91dHB1dCBlbXB0eQorICBlbGVtZW50cyBhcyBgYDxlbXB0eT48L2VtcHR5PmBgIGluc3RlYWQgb2YgYGA8ZW1wdHkvPmBgLCBhbmQgdGV4dAorICBtb2RlIHdpbGwgc2tpcCBvdmVyIGVsZW1lbnRzIGFuZCBvbmx5IG91dHB1dCB0aGUgdGV4dCBjaHVua3MuICBJZgorICB5b3Ugc2V0IHRoZSA6YXR0cjpgdGFnYCBhdHRyaWJ1dGUgb2YgYW4gZWxlbWVudCB0byBgYE5vbmVgYCBidXQKKyAgbGVhdmUgaXRzIGNoaWxkcmVuIGluIHBsYWNlLCB0aGUgZWxlbWVudCB3aWxsIGJlIG9taXR0ZWQgd2hlbiB0aGUKKyAgdHJlZSBpcyB3cml0dGVuIG91dCwgc28geW91IGRvbid0IG5lZWQgdG8gZG8gbW9yZSBleHRlbnNpdmUgcmVhcnJhbmdlbWVudAorICB0byByZW1vdmUgYSBzaW5nbGUgZWxlbWVudC4KKworICBOYW1lc3BhY2UgaGFuZGxpbmcgaGFzIGFsc28gYmVlbiBpbXByb3ZlZC4gIEFsbCBgYHhtbG5zOjx3aGF0ZXZlcj5gYAorICBkZWNsYXJhdGlvbnMgYXJlIG5vdyBvdXRwdXQgb24gdGhlIHJvb3QgZWxlbWVudCwgbm90IHNjYXR0ZXJlZCB0aHJvdWdob3V0CisgIHRoZSByZXN1bHRpbmcgWE1MLiAgWW91IGNhbiBzZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIGZvciBhIHRyZWUKKyAgYnkgc2V0dGluZyB0aGUgOmF0dHI6YGRlZmF1bHRfbmFtZXNwYWNlYCBhdHRyaWJ1dGUgYW5kIGNhbgorICByZWdpc3RlciBuZXcgcHJlZml4ZXMgd2l0aCA6bWV0aDpgcmVnaXN0ZXJfbmFtZXNwYWNlYC4gIEluIFhNTCBtb2RlLAorICB5b3UgY2FuIHVzZSB0aGUgdHJ1ZS9mYWxzZSAqeG1sX2RlY2xhcmF0aW9uKiBwYXJhbWV0ZXIgdG8gc3VwcHJlc3MgdGhlCisgIFhNTCBkZWNsYXJhdGlvbi4KKworKiBOZXcgOmNsYXNzOmBFbGVtZW50YCBtZXRob2Q6IDptZXRoOmBleHRlbmRgIGFwcGVuZHMgdGhlIGl0ZW1zIGZyb20gYQorICBzZXF1ZW5jZSB0byB0aGUgZWxlbWVudCdzIGNoaWxkcmVuLiAgRWxlbWVudHMgdGhlbXNlbHZlcyBiZWhhdmUgbGlrZQorICBzZXF1ZW5jZXMsIHNvIGl0J3MgZWFzeSB0byBtb3ZlIGNoaWxkcmVuIGZyb20gb25lIGVsZW1lbnQgdG8KKyAgYW5vdGhlcjo6CisKKyAgICBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUgYXMgRVQKKworICAgIHQgPSBFVC5YTUwoIiIiPGxpc3Q+CisgICAgICA8aXRlbT4xPC9pdGVtPiA8aXRlbT4yPC9pdGVtPiAgPGl0ZW0+MzwvaXRlbT4KKyAgICA8L2xpc3Q+IiIiKQorICAgIG5ldyA9IEVULlhNTCgnPHJvb3QvPicpCisgICAgbmV3LmV4dGVuZCh0KQorCisgICAgIyBPdXRwdXRzIDxyb290PjxpdGVtPjE8L2l0ZW0+Li4uPC9yb290PgorICAgIHByaW50IEVULnRvc3RyaW5nKG5ldykKKworKiBOZXcgOmNsYXNzOmBFbGVtZW50YCBtZXRob2Q6IDptZXRoOmBpdGVyYCB5aWVsZHMgdGhlIGNoaWxkcmVuIG9mIHRoZQorICBlbGVtZW50IGFzIGEgZ2VuZXJhdG9yLiAgSXQncyBhbHNvIHBvc3NpYmxlIHRvIHdyaXRlIGBgZm9yIGNoaWxkIGluCisgIGVsZW06YGAgdG8gbG9vcCBvdmVyIGFuIGVsZW1lbnQncyBjaGlsZHJlbi4gIFRoZSBleGlzdGluZyBtZXRob2QKKyAgOm1ldGg6YGdldGl0ZXJhdG9yYCBpcyBub3cgZGVwcmVjYXRlZCwgYXMgaXMgOm1ldGg6YGdldGNoaWxkcmVuYAorICB3aGljaCBjb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBjaGlsZHJlbi4KKworKiBOZXcgOmNsYXNzOmBFbGVtZW50YCBtZXRob2Q6IDptZXRoOmBpdGVydGV4dGAgeWllbGRzIGFsbCBjaHVua3Mgb2YKKyAgdGV4dCB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiB0aGUgZWxlbWVudC4gIEZvciBleGFtcGxlOjoKKworICAgIHQgPSBFVC5YTUwoIiIiPGxpc3Q+CisgICAgICA8aXRlbT4xPC9pdGVtPiA8aXRlbT4yPC9pdGVtPiAgPGl0ZW0+MzwvaXRlbT4KKyAgICA8L2xpc3Q+IiIiKQorCisgICAgIyBPdXRwdXRzIFsnXG4gICcsICcxJywgJyAnLCAnMicsICcgICcsICczJywgJ1xuJ10KKyAgICBwcmludCBsaXN0KHQuaXRlcnRleHQoKSkKKworKiBEZXByZWNhdGVkOiB1c2luZyBhbiBlbGVtZW50IGFzIGEgQm9vbGVhbiAoaS5lLiwgYGBpZiBlbGVtOmBgKSB3b3VsZAorICByZXR1cm4gdHJ1ZSBpZiB0aGUgZWxlbWVudCBoYWQgYW55IGNoaWxkcmVuLCBvciBmYWxzZSBpZiB0aGVyZSB3ZXJlCisgIG5vIGNoaWxkcmVuLiAgVGhpcyBiZWhhdmlvdXIgaXMgY29uZnVzaW5nIC0tIGBgTm9uZWBgIGlzIGZhbHNlLCBidXQKKyAgc28gaXMgYSBjaGlsZGxlc3MgZWxlbWVudD8gLS0gc28gaXQgd2lsbCBub3cgdHJpZ2dlciBhCisgIDpleGM6YEZ1dHVyZVdhcm5pbmdgLiAgSW4geW91ciBjb2RlLCB5b3Ugc2hvdWxkIGJlIGV4cGxpY2l0OiB3cml0ZQorICBgYGxlbihlbGVtKSAhPSAwYGAgaWYgeW91J3JlIGludGVyZXN0ZWQgaW4gdGhlIG51bWJlciBvZiBjaGlsZHJlbiwKKyAgb3IgYGBlbGVtIGlzIG5vdCBOb25lYGAuCisKK0ZyZWRyaWsgTHVuZGggZGV2ZWxvcHMgRWxlbWVudFRyZWUgYW5kIHByb2R1Y2VkIHRoZSAxLjMgdmVyc2lvbjsKK3lvdSBjYW4gcmVhZCBoaXMgYXJ0aWNsZSBkZXNjcmliaW5nIDEuMyBhdAoraHR0cDovL2VmZmJvdC5vcmcvem9uZS9lbGVtZW50dHJlZS0xMy1pbnRyby5odG0uCitGbG9yZW50IFhpY2x1bmEgdXBkYXRlZCB0aGUgdmVyc2lvbiBpbmNsdWRlZCB3aXRoCitQeXRob24sIGFmdGVyIGRpc2N1c3Npb25zIG9uIHB5dGhvbi1kZXYgYW5kIGluIDppc3N1ZTpgNjQ3MmAuKQorCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworQnVpbGQgYW5kIEMgQVBJIENoYW5nZXMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK0NoYW5nZXMgdG8gUHl0aG9uJ3MgYnVpbGQgcHJvY2VzcyBhbmQgdG8gdGhlIEMgQVBJIGluY2x1ZGU6CisKKyogVGhlIGxhdGVzdCByZWxlYXNlIG9mIHRoZSBHTlUgRGVidWdnZXIsIEdEQiA3LCBjYW4gYmUgYHNjcmlwdGVkCisgIHVzaW5nIFB5dGhvbgorICA8aHR0cDovL3NvdXJjZXdhcmUub3JnL2dkYi9jdXJyZW50L29ubGluZWRvY3MvZ2RiL1B5dGhvbi5odG1sPmBfXy4KKyAgV2hlbiB5b3UgYmVnaW4gZGVidWdnaW5nIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBQLCBHREIgd2lsbCBsb29rIGZvcgorICBhIGZpbGUgbmFtZWQgYGBQLWdkYi5weWBgIGFuZCBhdXRvbWF0aWNhbGx5IHJlYWQgaXQuICBEYXZlIE1hbGNvbG0KKyAgY29udHJpYnV0ZWQgYSA6ZmlsZTpgcHl0aG9uLWdkYi5weWAgdGhhdCBhZGRzIGEgbnVtYmVyIG9mCisgIGNvbW1hbmRzIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZyBQeXRob24gaXRzZWxmLiAgRm9yIGV4YW1wbGUsCisgIGBgcHktdXBgYCBhbmQgYGBweS1kb3duYGAgZ28gdXAgb3IgZG93biBvbmUgUHl0aG9uIHN0YWNrIGZyYW1lLAorICB3aGljaCB1c3VhbGx5IGNvcnJlc3BvbmRzIHRvIHNldmVyYWwgQyBzdGFjayBmcmFtZXMuICBgYHB5LXByaW50YGAKKyAgcHJpbnRzIHRoZSB2YWx1ZSBvZiBhIFB5dGhvbiB2YXJpYWJsZSwgYW5kIGBgcHktYnRgYCBwcmludHMgdGhlCisgIFB5dGhvbiBzdGFjayB0cmFjZS4gIChBZGRlZCBhcyBhIHJlc3VsdCBvZiA6aXNzdWU6YDgwMzJgLikKKworKiBJZiB5b3UgdXNlIHRoZSA6ZmlsZTpgLmdkYmluaXRgIGZpbGUgcHJvdmlkZWQgd2l0aCBQeXRob24sCisgIHRoZSAicHlvIiBtYWNybyBpbiB0aGUgMi43IHZlcnNpb24gbm93IHdvcmtzIGNvcnJlY3RseSB3aGVuIHRoZSB0aHJlYWQgYmVpbmcKKyAgZGVidWdnZWQgZG9lc24ndCBob2xkIHRoZSBHSUw7IHRoZSBtYWNybyBub3cgYWNxdWlyZXMgaXQgYmVmb3JlIHByaW50aW5nLgorICAoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXI7IDppc3N1ZTpgMzYzMmAuKQorCisqIDpjZnVuYzpgUHlfQWRkUGVuZGluZ0NhbGxgIGlzIG5vdyB0aHJlYWQtc2FmZSwgbGV0dGluZyBhbnkKKyAgd29ya2VyIHRocmVhZCBzdWJtaXQgbm90aWZpY2F0aW9ucyB0byB0aGUgbWFpbiBQeXRob24gdGhyZWFkLiAgVGhpcworICBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBhc3luY2hyb25vdXMgSU8gb3BlcmF0aW9ucy4KKyAgKENvbnRyaWJ1dGVkIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3NvbjsgOmlzc3VlOmA0MjkzYC4pCisKKyogTmV3IGZ1bmN0aW9uOiA6Y2Z1bmM6YFB5Q29kZV9OZXdFbXB0eWAgY3JlYXRlcyBhbiBlbXB0eSBjb2RlIG9iamVjdDsKKyAgb25seSB0aGUgZmlsZW5hbWUsIGZ1bmN0aW9uIG5hbWUsIGFuZCBmaXJzdCBsaW5lIG51bWJlciBhcmUgcmVxdWlyZWQuCisgIFRoaXMgaXMgdXNlZnVsIGZvciBleHRlbnNpb24gbW9kdWxlcyB0aGF0IGFyZSBhdHRlbXB0aW5nIHRvCisgIGNvbnN0cnVjdCBhIG1vcmUgdXNlZnVsIHRyYWNlYmFjayBzdGFjay4gIFByZXZpb3VzbHkgc3VjaAorICBleHRlbnNpb25zIG5lZWRlZCB0byBjYWxsIDpjZnVuYzpgUHlDb2RlX05ld2AsIHdoaWNoIGhhZCBtYW55CisgIG1vcmUgYXJndW1lbnRzLiAgKEFkZGVkIGJ5IEplZmZyZXkgWWFzc2tpbi4pCisKKyogTmV3IGZ1bmN0aW9uOiA6Y2Z1bmM6YFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2NgIGNyZWF0ZXMgYSBuZXcKKyAgZXhjZXB0aW9uIGNsYXNzLCBqdXN0IGFzIHRoZSBleGlzdGluZyA6Y2Z1bmM6YFB5RXJyX05ld0V4Y2VwdGlvbmAgZG9lcywKKyAgYnV0IHRha2VzIGFuIGV4dHJhIGBgY2hhciAqYGAgYXJndW1lbnQgY29udGFpbmluZyB0aGUgZG9jc3RyaW5nIGZvciB0aGUKKyAgbmV3IGV4Y2VwdGlvbiBjbGFzcy4gIChBZGRlZCBieSAnbGVrbWEnIG9uIHRoZSBQeXRob24gYnVnIHRyYWNrZXI7CisgIDppc3N1ZTpgNzAzM2AuKQorCisqIE5ldyBmdW5jdGlvbjogOmNmdW5jOmBQeUZyYW1lX0dldExpbmVOdW1iZXJgIHRha2VzIGEgZnJhbWUgb2JqZWN0CisgIGFuZCByZXR1cm5zIHRoZSBsaW5lIG51bWJlciB0aGF0IHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLgorICBQcmV2aW91c2x5IGNvZGUgd291bGQgbmVlZCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBieXRlY29kZQorICBpbnN0cnVjdGlvbiBjdXJyZW50bHkgZXhlY3V0aW5nLCBhbmQgdGhlbiBsb29rIHVwIHRoZSBsaW5lIG51bWJlcgorICBjb3JyZXNwb25kaW5nIHRvIHRoYXQgYWRkcmVzcy4gIChBZGRlZCBieSBKZWZmcmV5IFlhc3NraW4uKQorCisqIE5ldyBmdW5jdGlvbnM6IDpjZnVuYzpgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93YCBhbmQKKyAgOmNmdW5jOmBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93YCAgYXBwcm94aW1hdGVzIGEgUHl0aG9uIGxvbmcKKyAgaW50ZWdlciBhcyBhIEMgOmN0eXBlOmBsb25nYCBvciA6Y3R5cGU6YGxvbmcgbG9uZ2AuCisgIElmIHRoZSBudW1iZXIgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbnRvCisgIHRoZSBvdXRwdXQgdHlwZSwgYW4gKm92ZXJmbG93KiBmbGFnIGlzIHNldCBhbmQgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KKyAgKENvbnRyaWJ1dGVkIGJ5IENhc2UgVmFuIEhvcnNlbjsgOmlzc3VlOmA3NTI4YCBhbmQgOmlzc3VlOmA3NzY3YC4pCisKKyogTmV3IGZ1bmN0aW9uOiBzdGVtbWluZyBmcm9tIHRoZSByZXdyaXRlIG9mIHN0cmluZy10by1mbG9hdCBjb252ZXJzaW9uLAorICBhIG5ldyA6Y2Z1bmM6YFB5T1Nfc3RyaW5nX3RvX2RvdWJsZWAgZnVuY3Rpb24gd2FzIGFkZGVkLiAgVGhlIG9sZAorICA6Y2Z1bmM6YFB5T1NfYXNjaWlfc3RydG9kYCBhbmQgOmNmdW5jOmBQeU9TX2FzY2lpX2F0b2ZgIGZ1bmN0aW9ucworICBhcmUgbm93IGRlcHJlY2F0ZWQuCisKKyogTmV3IGZ1bmN0aW9uOiA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZFeGAgc2V0cyB0aGUgdmFsdWUgb2YKKyAgYGBzeXMuYXJndmBgIGFuZCBjYW4gb3B0aW9uYWxseSB1cGRhdGUgYGBzeXMucGF0aGBgIHRvIGluY2x1ZGUgdGhlCisgIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzY3JpcHQgbmFtZWQgYnkgYGBzeXMuYXJndlswXWBgIGRlcGVuZGluZworICBvbiB0aGUgdmFsdWUgb2YgYW4gKnVwZGF0ZXBhdGgqIHBhcmFtZXRlci4KKworICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byBjbG9zZSBhIHNlY3VyaXR5IGhvbGUgZm9yIGFwcGxpY2F0aW9ucworICB0aGF0IGVtYmVkIFB5dGhvbi4gIFRoZSBvbGQgZnVuY3Rpb24sIDpjZnVuYzpgUHlTeXNfU2V0QXJndmAsIHdvdWxkCisgIGFsd2F5cyB1cGRhdGUgYGBzeXMucGF0aGBgLCBhbmQgc29tZXRpbWVzIGl0IHdvdWxkIGFkZCB0aGUgY3VycmVudAorICBkaXJlY3RvcnkuICBUaGlzIG1lYW50IHRoYXQsIGlmIHlvdSByYW4gYW4gYXBwbGljYXRpb24gZW1iZWRkaW5nCisgIFB5dGhvbiBpbiBhIGRpcmVjdG9yeSBjb250cm9sbGVkIGJ5IHNvbWVvbmUgZWxzZSwgYXR0YWNrZXJzIGNvdWxkCisgIHB1dCBhIFRyb2phbi1ob3JzZSBtb2R1bGUgaW4gdGhlIGRpcmVjdG9yeSAoc2F5LCBhIGZpbGUgbmFtZWQKKyAgOmZpbGU6YG9zLnB5YCkgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIHdvdWxkIHRoZW4gaW1wb3J0IGFuZCBydW4uCisKKyAgSWYgeW91IG1haW50YWluIGEgQy9DKysgYXBwbGljYXRpb24gdGhhdCBlbWJlZHMgUHl0aG9uLCBjaGVjaworICB3aGV0aGVyIHlvdSdyZSBjYWxsaW5nIDpjZnVuYzpgUHlTeXNfU2V0QXJndmAgYW5kIGNhcmVmdWxseSBjb25zaWRlcgorICB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgdXNpbmcgOmNmdW5jOmBQeVN5c19TZXRBcmd2RXhgCisgIHdpdGggKnVwZGF0ZXBhdGgqIHNldCB0byBmYWxzZS4KKworICBTZWN1cml0eSBpc3N1ZSByZXBvcnRlZCBhcyBgQ1ZFLTIwMDgtNTk4MworICA8aHR0cDovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVuYW1lLmNnaT9uYW1lPUNWRS0yMDA4LTU5ODM+YF87CisgIGRpc2N1c3NlZCBpbiA6aXNzdWU6YDU3NTNgLCBhbmQgZml4ZWQgYnkgQW50b2luZSBQaXRyb3UuCisKKyogTmV3IG1hY3JvczogdGhlIFB5dGhvbiBoZWFkZXIgZmlsZXMgbm93IGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvczoKKyAgOmNtYWNybzpgUHlfSVNBTE5VTWAsCisgIDpjbWFjcm86YFB5X0lTQUxQSEFgLAorICA6Y21hY3JvOmBQeV9JU0RJR0lUYCwKKyAgOmNtYWNybzpgUHlfSVNMT1dFUmAsCisgIDpjbWFjcm86YFB5X0lTU1BBQ0VgLAorICA6Y21hY3JvOmBQeV9JU1VQUEVSYCwKKyAgOmNtYWNybzpgUHlfSVNYRElHSVRgLAorICA6Y21hY3JvOmBQeV9UT0xPV0VSYCwgYW5kIDpjbWFjcm86YFB5X1RPVVBQRVJgLgorICBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbmFsb2dvdXMgdG8gdGhlIEMKKyAgc3RhbmRhcmQgbWFjcm9zIGZvciBjbGFzc2lmeWluZyBjaGFyYWN0ZXJzLCBidXQgaWdub3JlIHRoZSBjdXJyZW50CisgIGxvY2FsZSBzZXR0aW5nLCBiZWNhdXNlIGluCisgIHNldmVyYWwgcGxhY2VzIFB5dGhvbiBuZWVkcyB0byBhbmFseXplIGNoYXJhY3RlcnMgaW4gYQorICBsb2NhbGUtaW5kZXBlbmRlbnQgd2F5LiAgKEFkZGVkIGJ5IEVyaWMgU21pdGg7CisgIDppc3N1ZTpgNTc5M2AuKQorCisgIC4uIFhYWCB0aGVzZSBtYWNyb3MgZG9uJ3Qgc2VlbSB0byBiZSBkZXNjcmliZWQgaW4gdGhlIGMtYXBpIGRvY3MuCisKKyogUmVtb3ZlZCBmdW5jdGlvbjogOmNtYWNybzpgUHlFdmFsX0NhbGxPYmplY3RgIGlzIG5vdyBvbmx5IGF2YWlsYWJsZQorICBhcyBhIG1hY3JvLiAgQSBmdW5jdGlvbiB2ZXJzaW9uIHdhcyBiZWluZyBrZXB0IGFyb3VuZCB0byBwcmVzZXJ2ZQorICBBQkkgbGlua2luZyBjb21wYXRpYmlsaXR5LCBidXQgdGhhdCB3YXMgaW4gMTk5NzsgaXQgY2FuIGNlcnRhaW5seSBiZQorICBkZWxldGVkIGJ5IG5vdy4gIChSZW1vdmVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDgyNzZgLikKKworKiBOZXcgZm9ybWF0IGNvZGVzOiB0aGUgOmNmdW5jOmBQeUZvcm1hdF9Gcm9tU3RyaW5nYCwKKyAgOmNmdW5jOmBQeUZvcm1hdF9Gcm9tU3RyaW5nVmAsIGFuZCA6Y2Z1bmM6YFB5RXJyX0Zvcm1hdGAgZnVuY3Rpb25zIG5vdworICBhY2NlcHQgYGAlbGxkYGAgYW5kIGBgJWxsdWBgIGZvcm1hdCBjb2RlcyBmb3IgZGlzcGxheWluZworICBDJ3MgOmN0eXBlOmBsb25nIGxvbmdgIHR5cGVzLgorICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNzIyOGAuKQorCisqIFRoZSBjb21wbGljYXRlZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRocmVhZHMgYW5kIHByb2Nlc3MgZm9ya2luZyBoYXMKKyAgYmVlbiBjaGFuZ2VkLiAgUHJldmlvdXNseSwgdGhlIGNoaWxkIHByb2Nlc3MgY3JlYXRlZCBieQorICA6ZnVuYzpgb3MuZm9ya2AgbWlnaHQgZmFpbCBiZWNhdXNlIHRoZSBjaGlsZCBpcyBjcmVhdGVkIHdpdGggb25seSBhCisgIHNpbmdsZSB0aHJlYWQgcnVubmluZywgdGhlIHRocmVhZCBwZXJmb3JtaW5nIHRoZSA6ZnVuYzpgb3MuZm9ya2AuCisgIElmIG90aGVyIHRocmVhZHMgd2VyZSBob2xkaW5nIGEgbG9jaywgc3VjaCBhcyBQeXRob24ncyBpbXBvcnQgbG9jaywKKyAgd2hlbiB0aGUgZm9yayB3YXMgcGVyZm9ybWVkLCB0aGUgbG9jayB3b3VsZCBzdGlsbCBiZSBtYXJrZWQgYXMKKyAgImhlbGQiIGluIHRoZSBuZXcgcHJvY2Vzcy4gIEJ1dCBpbiB0aGUgY2hpbGQgcHJvY2VzcyBub3RoaW5nIHdvdWxkCisgIGV2ZXIgcmVsZWFzZSB0aGUgbG9jaywgc2luY2UgdGhlIG90aGVyIHRocmVhZHMgd2VyZW4ndCByZXBsaWNhdGVkLAorICBhbmQgdGhlIGNoaWxkIHByb2Nlc3Mgd291bGQgbm8gbG9uZ2VyIGJlIGFibGUgdG8gcGVyZm9ybSBpbXBvcnRzLgorCisgIFB5dGhvbiAyLjcgYWNxdWlyZXMgdGhlIGltcG9ydCBsb2NrIGJlZm9yZSBwZXJmb3JtaW5nIGFuCisgIDpmdW5jOmBvcy5mb3JrYCwgYW5kIHdpbGwgYWxzbyBjbGVhbiB1cCBhbnkgbG9ja3MgY3JlYXRlZCB1c2luZyB0aGUKKyAgOm1vZDpgdGhyZWFkaW5nYCBtb2R1bGUuICBDIGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQgaGF2ZSBpbnRlcm5hbAorICBsb2Nrcywgb3IgdGhhdCBjYWxsIDpjZnVuYzpgZm9yaygpYCB0aGVtc2VsdmVzLCB3aWxsIG5vdCBiZW5lZml0CisgIGZyb20gdGhpcyBjbGVhbi11cC4KKworICAoRml4ZWQgYnkgVGhvbWFzIFdvdXRlcnM7IDppc3N1ZTpgMTU5MDg2NGAuKQorCisqIFRoZSA6Y2Z1bmM6YFB5X0ZpbmFsaXplYCBmdW5jdGlvbiBub3cgY2FsbHMgdGhlIGludGVybmFsCisgIDpmdW5jOmB0aHJlYWRpbmcuX3NodXRkb3duYCBmdW5jdGlvbjsgdGhpcyBwcmV2ZW50cyBzb21lIGV4Y2VwdGlvbnMgZnJvbQorICBiZWluZyByYWlzZWQgd2hlbiBhbiBpbnRlcnByZXRlciBzaHV0cyBkb3duLgorICAoUGF0Y2ggYnkgQWRhbSBPbHNlbjsgOmlzc3VlOmAxNzIyMzQ0YC4pCisKKyogV2hlbiB1c2luZyB0aGUgOmN0eXBlOmBQeU1lbWJlckRlZmAgc3RydWN0dXJlIHRvIGRlZmluZSBhdHRyaWJ1dGVzCisgIG9mIGEgdHlwZSwgUHl0aG9uIHdpbGwgbm8gbG9uZ2VyIGxldCB5b3UgdHJ5IHRvIGRlbGV0ZSBvciBzZXQgYQorICA6Y29uc3Q6YFRfU1RSSU5HX0lOUExBQ0VgIGF0dHJpYnV0ZS4KKworICAuLiByZXYgNzk2NDQKKworKiBHbG9iYWwgc3ltYm9scyBkZWZpbmVkIGJ5IHRoZSA6bW9kOmBjdHlwZXNgIG1vZHVsZSBhcmUgbm93IHByZWZpeGVkCisgIHdpdGggYGBQeWBgLCBvciB3aXRoIGBgX2N0eXBlc2BgLiAgKEltcGxlbWVudGVkIGJ5IFRob21hcworICBIZWxsZXI7IDppc3N1ZTpgMzEwMmAuKQorCisqIE5ldyBjb25maWd1cmUgb3B0aW9uOiB0aGUgOm9wdGlvbjpgLS13aXRoLXN5c3RlbS1leHBhdGAgc3dpdGNoIGFsbG93cworICBidWlsZGluZyB0aGUgOm1vZDpgcHlleHBhdGAgbW9kdWxlIHRvIHVzZSB0aGUgc3lzdGVtIEV4cGF0IGxpYnJhcnkuCisgIChDb250cmlidXRlZCBieSBBcmZyZXZlciBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpczsgOmlzc3VlOmA3NjA5YC4pCisKKyogTmV3IGNvbmZpZ3VyZSBvcHRpb246IHRoZQorICA6b3B0aW9uOmAtLXdpdGgtdmFsZ3JpbmRgIG9wdGlvbiB3aWxsIG5vdyBkaXNhYmxlIHRoZSBweW1hbGxvYworICBhbGxvY2F0b3IsIHdoaWNoIGlzIGRpZmZpY3VsdCBmb3IgdGhlIFZhbGdyaW5kIG1lbW9yeS1lcnJvciBkZXRlY3RvcgorICB0byBhbmFseXplIGNvcnJlY3RseS4KKyAgVmFsZ3JpbmQgd2lsbCB0aGVyZWZvcmUgYmUgYmV0dGVyIGF0IGRldGVjdGluZyBtZW1vcnkgbGVha3MgYW5kCisgIG92ZXJydW5zLiAoQ29udHJpYnV0ZWQgYnkgSmFtZXMgSGVuc3RyaWRnZTsgOmlzc3VlOmAyNDIyYC4pCisKKyogTmV3IGNvbmZpZ3VyZSBvcHRpb246IHlvdSBjYW4gbm93IHN1cHBseSBhbiBlbXB0eSBzdHJpbmcgdG8KKyAgOm9wdGlvbjpgLS13aXRoLWRibWxpYm9yZGVyPWAgaW4gb3JkZXIgdG8gZGlzYWJsZSBhbGwgb2YgdGhlIHZhcmlvdXMKKyAgREJNIG1vZHVsZXMuICAoQWRkZWQgYnkgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXM7CisgIDppc3N1ZTpgNjQ5MWAuKQorCisqIFRoZSA6cHJvZ3JhbTpgY29uZmlndXJlYCBzY3JpcHQgbm93IGNoZWNrcyBmb3IgZmxvYXRpbmctcG9pbnQgcm91bmRpbmcgYnVncworICBvbiBjZXJ0YWluIDMyLWJpdCBJbnRlbCBjaGlwcyBhbmQgZGVmaW5lcyBhIDpjbWFjcm86YFg4N19ET1VCTEVfUk9VTkRJTkdgCisgIHByZXByb2Nlc3NvciBkZWZpbml0aW9uLiAgTm8gY29kZSBjdXJyZW50bHkgdXNlcyB0aGlzIGRlZmluaXRpb24sCisgIGJ1dCBpdCdzIGF2YWlsYWJsZSBpZiBhbnlvbmUgd2lzaGVzIHRvIHVzZSBpdC4KKyAgKEFkZGVkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDI5MzdgLikKKworICA6cHJvZ3JhbTpgY29uZmlndXJlYCBhbHNvIG5vdyBzZXRzIGEgOmVudnZhcjpgTERDWFhTSEFSRURgIE1ha2VmaWxlCisgIHZhcmlhYmxlIGZvciBzdXBwb3J0aW5nIEMrKyBsaW5raW5nLiAgKENvbnRyaWJ1dGVkIGJ5IEFyZnJldmVyCisgIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzOyA6aXNzdWU6YDEyMjI1ODVgLikKKworKiBUaGUgYnVpbGQgcHJvY2VzcyBub3cgY3JlYXRlcyB0aGUgbmVjZXNzYXJ5IGZpbGVzIGZvciBwa2ctY29uZmlnCisgIHN1cHBvcnQuICAoQ29udHJpYnV0ZWQgYnkgQ2xpbnRvbiBSb3k7IDppc3N1ZTpgMzU4NWAuKQorCisqIFRoZSBidWlsZCBwcm9jZXNzIG5vdyBzdXBwb3J0cyBTdWJ2ZXJzaW9uIDEuNy4gIChDb250cmlidXRlZCBieQorICBBcmZyZXZlciBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpczsgOmlzc3VlOmA2MDk0YC4pCisKKworLi4gX3doYXRzbmV3MjctY2Fwc3VsZXM6CisKK0NhcHN1bGVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1B5dGhvbiAzLjEgYWRkcyBhIG5ldyBDIGRhdGF0eXBlLCA6Y3R5cGU6YFB5Q2Fwc3VsZWAsIGZvciBwcm92aWRpbmcgYQorQyBBUEkgdG8gYW4gZXh0ZW5zaW9uIG1vZHVsZS4gIEEgY2Fwc3VsZSBpcyBlc3NlbnRpYWxseSB0aGUgaG9sZGVyIG9mCithIEMgYGB2b2lkICpgYCBwb2ludGVyLCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgYXMgYSBtb2R1bGUgYXR0cmlidXRlOyBmb3IKK2V4YW1wbGUsIHRoZSA6bW9kOmBzb2NrZXRgIG1vZHVsZSdzIEFQSSBpcyBleHBvc2VkIGFzIGBgc29ja2V0LkNBUElgYCwKK2FuZCA6bW9kOmB1bmljb2RlZGF0YWAgZXhwb3NlcyBgYHVjbmhhc2hfQ0FQSWBgLiAgT3RoZXIgZXh0ZW5zaW9ucworY2FuIGltcG9ydCB0aGUgbW9kdWxlLCBhY2Nlc3MgaXRzIGRpY3Rpb25hcnkgdG8gZ2V0IHRoZSBjYXBzdWxlCitvYmplY3QsIGFuZCB0aGVuIGdldCB0aGUgYGB2b2lkICpgYCBwb2ludGVyLCB3aGljaCB3aWxsIHVzdWFsbHkgcG9pbnQKK3RvIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZSBtb2R1bGUncyB2YXJpb3VzIEFQSSBmdW5jdGlvbnMuCisKK1RoZXJlIGlzIGFuIGV4aXN0aW5nIGRhdGEgdHlwZSBhbHJlYWR5IHVzZWQgZm9yIHRoaXMsCis6Y3R5cGU6YFB5Q09iamVjdGAsIGJ1dCBpdCBkb2Vzbid0IHByb3ZpZGUgdHlwZSBzYWZldHkuICBFdmlsIGNvZGUKK3dyaXR0ZW4gaW4gcHVyZSBQeXRob24gY291bGQgY2F1c2UgYSBzZWdtZW50YXRpb24gZmF1bHQgYnkgdGFraW5nIGEKKzpjdHlwZTpgUHlDT2JqZWN0YCBmcm9tIG1vZHVsZSBBIGFuZCBzb21laG93IHN1YnN0aXR1dGluZyBpdCBmb3IgdGhlCis6Y3R5cGU6YFB5Q09iamVjdGAgaW4gbW9kdWxlIEIuICAgQ2Fwc3VsZXMga25vdyB0aGVpciBvd24gbmFtZSwKK2FuZCBnZXR0aW5nIHRoZSBwb2ludGVyIHJlcXVpcmVzIHByb3ZpZGluZyB0aGUgbmFtZTo6CisKKyAgIHZvaWQgKnZ0YWJsZTsKKworICAgaWYgKCFQeUNhcHN1bGVfSXNWYWxpZChjYXBzdWxlLCAibXltb2R1bGUuQ0FQSSIpIHsKKyAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJhcmd1bWVudCB0eXBlIGludmFsaWQiKTsKKyAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisKKyAgIHZ0YWJsZSA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKGNhcHN1bGUsICJteW1vZHVsZS5DQVBJIik7CisKK1lvdSBhcmUgYXNzdXJlZCB0aGF0IGBgdnRhYmxlYGAgcG9pbnRzIHRvIHdoYXRldmVyIHlvdSdyZSBleHBlY3RpbmcuCitJZiBhIGRpZmZlcmVudCBjYXBzdWxlIHdhcyBwYXNzZWQgaW4sIDpjZnVuYzpgUHlDYXBzdWxlX0lzVmFsaWRgIHdvdWxkCitkZXRlY3QgdGhlIG1pc21hdGNoZWQgbmFtZSBhbmQgcmV0dXJuIGZhbHNlLiAgUmVmZXIgdG8KKzpyZWY6YHVzaW5nLWNhcHN1bGVzYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGVzZSBvYmplY3RzLgorCitQeXRob24gMi43IG5vdyB1c2VzIGNhcHN1bGVzIGludGVybmFsbHkgdG8gcHJvdmlkZSB2YXJpb3VzCitleHRlbnNpb24tbW9kdWxlIEFQSXMsIGJ1dCB0aGUgOmNmdW5jOmBQeUNPYmplY3RfQXNWb2lkUHRyYCB3YXMKK21vZGlmaWVkIHRvIGhhbmRsZSBjYXBzdWxlcywgcHJlc2VydmluZyBjb21waWxlLXRpbWUgY29tcGF0aWJpbGl0eQord2l0aCB0aGUgOmN0eXBlOmBDT2JqZWN0YCBpbnRlcmZhY2UuICBVc2Ugb2YKKzpjZnVuYzpgUHlDT2JqZWN0X0FzVm9pZFB0cmAgd2lsbCBzaWduYWwgYQorOmV4YzpgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ2AsIHdoaWNoIGlzIHNpbGVudCBieSBkZWZhdWx0LgorCitJbXBsZW1lbnRlZCBpbiBQeXRob24gMy4xIGFuZCBiYWNrcG9ydGVkIHRvIDIuNyBieSBMYXJyeSBIYXN0aW5nczsKK2Rpc2N1c3NlZCBpbiA6aXNzdWU6YDU2MzBgLgorCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUG9ydC1TcGVjaWZpYyBDaGFuZ2VzOiBXaW5kb3dzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6bW9kOmBtc3ZjcnRgIG1vZHVsZSBub3cgY29udGFpbnMgc29tZSBjb25zdGFudHMgZnJvbQorICB0aGUgOmZpbGU6YGNydGFzc2VtLmhgIGhlYWRlciBmaWxlOgorICA6ZGF0YTpgQ1JUX0FTU0VNQkxZX1ZFUlNJT05gLAorICA6ZGF0YTpgVkNfQVNTRU1CTFlfUFVCTElDS0VZVE9LRU5gLAorICBhbmQgOmRhdGE6YExJQlJBUklFU19BU1NFTUJMWV9OQU1FX1BSRUZJWGAuCisgIChDb250cmlidXRlZCBieSBEYXZpZCBDb3VybmFwZWF1OyA6aXNzdWU6YDQzNjVgLikKKworKiBUaGUgOm1vZDpgX3dpbnJlZ2AgbW9kdWxlIGZvciBhY2Nlc3NpbmcgdGhlIHJlZ2lzdHJ5IG5vdyBpbXBsZW1lbnRzCisgIHRoZSA6ZnVuYzpgfl93aW5yZWcuQ3JlYXRlS2V5RXhgIGFuZCA6ZnVuYzpgfl93aW5yZWcuRGVsZXRlS2V5RXhgCisgIGZ1bmN0aW9ucywgZXh0ZW5kZWQgdmVyc2lvbnMgb2YgcHJldmlvdXNseS1zdXBwb3J0ZWQgZnVuY3Rpb25zIHRoYXQKKyAgdGFrZSBzZXZlcmFsIGV4dHJhIGFyZ3VtZW50cy4gIFRoZSA6ZnVuYzpgfl93aW5yZWcuRGlzYWJsZVJlZmxlY3Rpb25LZXlgLAorICA6ZnVuYzpgfl93aW5yZWcuRW5hYmxlUmVmbGVjdGlvbktleWAsIGFuZCA6ZnVuYzpgfl93aW5yZWcuUXVlcnlSZWZsZWN0aW9uS2V5YAorICB3ZXJlIGFsc28gdGVzdGVkIGFuZCBkb2N1bWVudGVkLgorICAoSW1wbGVtZW50ZWQgYnkgQnJpYW4gQ3VydGluOiA6aXNzdWU6YDczNDdgLikKKworKiBUaGUgbmV3IDpjZnVuYzpgX2JlZ2ludGhyZWFkZXhgIEFQSSBpcyB1c2VkIHRvIHN0YXJ0IHRocmVhZHMsIGFuZAorICB0aGUgbmF0aXZlIHRocmVhZC1sb2NhbCBzdG9yYWdlIGZ1bmN0aW9ucyBhcmUgbm93IHVzZWQuCisgIChDb250cmlidXRlZCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb247IDppc3N1ZTpgMzU4MmAuKQorCisqIFRoZSA6ZnVuYzpgb3Mua2lsbGAgZnVuY3Rpb24gbm93IHdvcmtzIG9uIFdpbmRvd3MuICBUaGUgc2lnbmFsIHZhbHVlCisgIGNhbiBiZSB0aGUgY29uc3RhbnRzIDpjb25zdDpgQ1RSTF9DX0VWRU5UYCwKKyAgOmNvbnN0OmBDVFJMX0JSRUFLX0VWRU5UYCwgb3IgYW55IGludGVnZXIuICBUaGUgZmlyc3QgdHdvIGNvbnN0YW50cworICB3aWxsIHNlbmQgQ29udHJvbC1DIGFuZCBDb250cm9sLUJyZWFrIGtleXN0cm9rZSBldmVudHMgdG8KKyAgc3VicHJvY2Vzc2VzOyBhbnkgb3RoZXIgdmFsdWUgd2lsbCB1c2UgdGhlIDpjZnVuYzpgVGVybWluYXRlUHJvY2Vzc2AKKyAgQVBJLiAgKENvbnRyaWJ1dGVkIGJ5IE1pa2kgVGViZWthOyA6aXNzdWU6YDEyMjAyMTJgLikKKworKiBUaGUgOmZ1bmM6YG9zLmxpc3RkaXJgIGZ1bmN0aW9uIG5vdyBjb3JyZWN0bHkgZmFpbHMKKyAgZm9yIGFuIGVtcHR5IHBhdGguICAoRml4ZWQgYnkgSGlyb2thenUgWWFtYW1vdG87IDppc3N1ZTpgNTkxM2AuKQorCisqIFRoZSA6bW9kOmBtaW1lbGliYCBtb2R1bGUgd2lsbCBub3cgcmVhZCB0aGUgTUlNRSBkYXRhYmFzZSBmcm9tCisgIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IHdoZW4gaW5pdGlhbGl6aW5nLgorICAoUGF0Y2ggYnkgR2FicmllbCBHZW5lbGxpbmE7IDppc3N1ZTpgNDk2OWAuKQorCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BvcnQtU3BlY2lmaWMgQ2hhbmdlczogTWFjIE9TIFgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIHBhdGggYGAvTGlicmFyeS9QeXRob24vMi43L3NpdGUtcGFja2FnZXNgYCBpcyBub3cgYXBwZW5kZWQgdG8KKyAgYGBzeXMucGF0aGBgLCBpbiBvcmRlciB0byBzaGFyZSBhZGRlZCBwYWNrYWdlcyBiZXR3ZWVuIHRoZSBzeXN0ZW0KKyAgaW5zdGFsbGF0aW9uIGFuZCBhIHVzZXItaW5zdGFsbGVkIGNvcHkgb2YgdGhlIHNhbWUgdmVyc2lvbi4KKyAgKENoYW5nZWQgYnkgUm9uYWxkIE91c3NvcmVuOyA6aXNzdWU6YDQ4NjVgLikKKworUG9ydC1TcGVjaWZpYyBDaGFuZ2VzOiBGcmVlQlNECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEZyZWVCU0QgNy4xJ3MgOmNvbnN0OmBTT19TRVRGSUJgIGNvbnN0YW50LCB1c2VkIHdpdGgKKyAgOmZ1bmM6YH5zb2NrZXQuZ2V0c29ja29wdGAvOmZ1bmM6YH5zb2NrZXQuc2V0c29ja29wdGAgdG8gc2VsZWN0IGFuCisgIGFsdGVybmF0ZSByb3V0aW5nIHRhYmxlLCBpcyBub3cgYXZhaWxhYmxlIGluIHRoZSA6bW9kOmBzb2NrZXRgCisgIG1vZHVsZS4gIChBZGRlZCBieSBLeWxlIFZhbmRlckJlZWs7IDppc3N1ZTpgODIzNWAuKQorCitPdGhlciBDaGFuZ2VzIGFuZCBGaXhlcworPT09PT09PT09PT09PT09PT09PT09PT0KKworKiBUd28gYmVuY2htYXJrIHNjcmlwdHMsIDpmaWxlOmBpb2JlbmNoYCBhbmQgOmZpbGU6YGNjYmVuY2hgLCB3ZXJlCisgIGFkZGVkIHRvIHRoZSA6ZmlsZTpgVG9vbHNgIGRpcmVjdG9yeS4gIDpmaWxlOmBpb2JlbmNoYCBtZWFzdXJlcyB0aGUKKyAgc3BlZWQgb2YgdGhlIGJ1aWx0LWluIGZpbGUgSS9PIG9iamVjdHMgcmV0dXJuZWQgYnkgOmZ1bmM6YG9wZW5gCisgIHdoaWxlIHBlcmZvcm1pbmcgdmFyaW91cyBvcGVyYXRpb25zLCBhbmQgOmZpbGU6YGNjYmVuY2hgIGlzIGEKKyAgY29uY3VycmVuY3kgYmVuY2htYXJrIHRoYXQgdHJpZXMgdG8gbWVhc3VyZSBjb21wdXRpbmcgdGhyb3VnaHB1dCwKKyAgdGhyZWFkIHN3aXRjaGluZyBsYXRlbmN5LCBhbmQgSU8gcHJvY2Vzc2luZyBiYW5kd2lkdGggd2hlbgorICBwZXJmb3JtaW5nIHNldmVyYWwgdGFza3MgdXNpbmcgYSB2YXJ5aW5nIG51bWJlciBvZiB0aHJlYWRzLgorCisqIFRoZSA6ZmlsZTpgVG9vbHMvaTE4bi9tc2dmbXQucHlgIHNjcmlwdCBub3cgdW5kZXJzdGFuZHMgcGx1cmFsCisgIGZvcm1zIGluIDpmaWxlOmAucG9gIGZpbGVzLiAgKEZpeGVkIGJ5IE1hcnRpbiB2b24gTMO2d2lzOworICA6aXNzdWU6YDU0NjRgLikKKworKiBXaGVuIGltcG9ydGluZyBhIG1vZHVsZSBmcm9tIGEgOmZpbGU6YC5weWNgIG9yIDpmaWxlOmAucHlvYCBmaWxlCisgIHdpdGggYW4gZXhpc3RpbmcgOmZpbGU6YC5weWAgY291bnRlcnBhcnQsIHRoZSA6YXR0cjpgY29fZmlsZW5hbWVgCisgIGF0dHJpYnV0ZXMgb2YgdGhlIHJlc3VsdGluZyBjb2RlIG9iamVjdHMgYXJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlCisgIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG9ic29sZXRlLiAgVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBmaWxlIGhhcyBiZWVuCisgIHJlbmFtZWQsIG1vdmVkLCBvciBpcyBhY2Nlc3NlZCB0aHJvdWdoIGRpZmZlcmVudCBwYXRocy4gIChQYXRjaCBieQorICBaaWdhIFNlaWxuYWNodCBhbmQgSmVhbi1QYXVsIENhbGRlcm9uZTsgOmlzc3VlOmAxMTgwMTkzYC4pCisKKyogVGhlIDpmaWxlOmByZWdydGVzdC5weWAgc2NyaXB0IG5vdyB0YWtlcyBhIDpvcHRpb246YC0tcmFuZHNlZWQ9YAorICBzd2l0Y2ggdGhhdCB0YWtlcyBhbiBpbnRlZ2VyIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSByYW5kb20gc2VlZAorICBmb3IgdGhlIDpvcHRpb246YC1yYCBvcHRpb24gdGhhdCBleGVjdXRlcyB0ZXN0cyBpbiByYW5kb20gb3JkZXIuCisgIFRoZSA6b3B0aW9uOmAtcmAgb3B0aW9uIGFsc28gcmVwb3J0cyB0aGUgc2VlZCB0aGF0IHdhcyB1c2VkCisgIChBZGRlZCBieSBDb2xsaW4gV2ludGVyLikKKworKiBBbm90aGVyIDpmaWxlOmByZWdydGVzdC5weWAgc3dpdGNoIGlzIDpvcHRpb246YC1qYCwgd2hpY2gKKyAgdGFrZXMgYW4gaW50ZWdlciBzcGVjaWZ5aW5nIGhvdyBtYW55IHRlc3RzIHJ1biBpbiBwYXJhbGxlbC4gVGhpcworICBhbGxvd3MgcmVkdWNpbmcgdGhlIHRvdGFsIHJ1bnRpbWUgb24gbXVsdGktY29yZSBtYWNoaW5lcy4KKyAgVGhpcyBvcHRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHNldmVyYWwgb3RoZXIgb3B0aW9ucywgaW5jbHVkaW5nIHRoZQorICA6b3B0aW9uOmAtUmAgc3dpdGNoIHdoaWNoIGlzIGtub3duIHRvIHByb2R1Y2UgbG9uZyBydW50aW1lcy4KKyAgKEFkZGVkIGJ5IEFudG9pbmUgUGl0cm91LCA6aXNzdWU6YDYxNTJgLikgIFRoaXMgY2FuIGFsc28gYmUgdXNlZAorICB3aXRoIGEgbmV3IDpvcHRpb246YC1GYCBzd2l0Y2ggdGhhdCBydW5zIHNlbGVjdGVkIHRlc3RzIGluIGEgbG9vcAorICB1bnRpbCB0aGV5IGZhaWwuICAoQWRkZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgNzMxMmAuKQorCisqIFdoZW4gZXhlY3V0ZWQgYXMgYSBzY3JpcHQsIHRoZSA6ZmlsZTpgcHlfY29tcGlsZS5weWAgbW9kdWxlIG5vdworICBhY2NlcHRzIGBgJy0nYGAgYXMgYW4gYXJndW1lbnQsIHdoaWNoIHdpbGwgcmVhZCBzdGFuZGFyZCBpbnB1dCBmb3IKKyAgdGhlIGxpc3Qgb2YgZmlsZW5hbWVzIHRvIGJlIGNvbXBpbGVkLiAgKENvbnRyaWJ1dGVkIGJ5IFBpb3RyCisgIE/FvGFyb3dza2k7IDppc3N1ZTpgODIzM2AuKQorCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BvcnRpbmcgdG8gUHl0aG9uIDIuNworPT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBsaXN0cyBwcmV2aW91c2x5IGRlc2NyaWJlZCBjaGFuZ2VzIGFuZCBvdGhlciBidWdmaXhlcwordGhhdCBtYXkgcmVxdWlyZSBjaGFuZ2VzIHRvIHlvdXIgY29kZToKKworKiBUaGUgOmZ1bmM6YHJhbmdlYCBmdW5jdGlvbiBwcm9jZXNzZXMgaXRzIGFyZ3VtZW50cyBtb3JlCisgIGNvbnNpc3RlbnRseTsgaXQgd2lsbCBub3cgY2FsbCA6bWV0aDpgX19pbnRfX2Agb24gbm9uLWZsb2F0LAorICBub24taW50ZWdlciBhcmd1bWVudHMgdGhhdCBhcmUgc3VwcGxpZWQgdG8gaXQuICAoRml4ZWQgYnkgQWxleGFuZGVyCisgIEJlbG9wb2xza3k7IDppc3N1ZTpgMTUzM2AuKQorCisqIFRoZSBzdHJpbmcgOm1ldGg6YGZvcm1hdGAgbWV0aG9kIGNoYW5nZWQgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIHVzZWQKKyAgZm9yIGZsb2F0aW5nLXBvaW50IGFuZCBjb21wbGV4IG51bWJlcnMgZnJvbSA2IGRlY2ltYWwKKyAgcGxhY2VzIHRvIDEyLCB3aGljaCBtYXRjaGVzIHRoZSBwcmVjaXNpb24gdXNlZCBieSA6ZnVuYzpgc3RyYC4KKyAgKENoYW5nZWQgYnkgRXJpYyBTbWl0aDsgOmlzc3VlOmA1OTIwYC4pCisKKyogQmVjYXVzZSBvZiBhbiBvcHRpbWl6YXRpb24gZm9yIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LCB0aGUgc3BlY2lhbAorICBtZXRob2RzIDptZXRoOmBfX2VudGVyX19gIGFuZCA6bWV0aDpgX19leGl0X19gIG11c3QgYmVsb25nIHRvIHRoZSBvYmplY3QncworICB0eXBlLCBhbmQgY2Fubm90IGJlIGRpcmVjdGx5IGF0dGFjaGVkIHRvIHRoZSBvYmplY3QncyBpbnN0YW5jZS4gIFRoaXMKKyAgYWZmZWN0cyBuZXctc3R5bGUgY2xhc3NlcyAoZGVyaXZlZCBmcm9tIDpjbGFzczpgb2JqZWN0YCkgYW5kIEMgZXh0ZW5zaW9uCisgIHR5cGVzLiAgKDppc3N1ZTpgNjEwMWAuKQorCisqIER1ZSB0byBhIGJ1ZyBpbiBQeXRob24gMi42LCB0aGUgKmV4Y192YWx1ZSogcGFyYW1ldGVyIHRvCisgIDptZXRoOmBfX2V4aXRfX2AgbWV0aG9kcyB3YXMgb2Z0ZW4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgZXhjZXB0aW9uLCBub3QgYW4gaW5zdGFuY2UuICBUaGlzIHdhcyBmaXhlZCBpbiAyLjcsIHNvICpleGNfdmFsdWUqCisgIHdpbGwgYmUgYW4gaW5zdGFuY2UgYXMgZXhwZWN0ZWQuICAoRml4ZWQgYnkgRmxvcmVudCBYaWNsdW5hOworICA6aXNzdWU6YDc4NTNgLikKKworKiBXaGVuIGEgcmVzdHJpY3RlZCBzZXQgb2YgYXR0cmlidXRlcyB3ZXJlIHNldCB1c2luZyBgYF9fc2xvdHNfX2BgLAorICBkZWxldGluZyBhbiB1bnNldCBhdHRyaWJ1dGUgd291bGQgbm90IHJhaXNlIDpleGM6YEF0dHJpYnV0ZUVycm9yYAorICBhcyB5b3Ugd291bGQgZXhwZWN0LiAgRml4ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb247IDppc3N1ZTpgNzYwNGAuKQorCitJbiB0aGUgc3RhbmRhcmQgbGlicmFyeToKKworKiBPcGVyYXRpb25zIHdpdGggOmNsYXNzOmB+ZGF0ZXRpbWUuZGF0ZXRpbWVgIGluc3RhbmNlcyB0aGF0IHJlc3VsdGVkIGluIGEgeWVhcgorICBmYWxsaW5nIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSBkaWRuJ3QgYWx3YXlzIHJhaXNlCisgIDpleGM6YE92ZXJmbG93RXJyb3JgLiAgU3VjaCBlcnJvcnMgYXJlIG5vdyBjaGVja2VkIG1vcmUgY2FyZWZ1bGx5CisgIGFuZCB3aWxsIG5vdyByYWlzZSB0aGUgZXhjZXB0aW9uLiAoUmVwb3J0ZWQgYnkgTWFyayBMZWFuZGVyLCBwYXRjaAorICBieSBBbmFuZCBCLiBQaWxsYWkgYW5kIEFsZXhhbmRlciBCZWxvcG9sc2t5OyA6aXNzdWU6YDcxNTBgLikKKworKiBXaGVuIHVzaW5nIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAgaW5zdGFuY2VzIHdpdGggYSBzdHJpbmcncworICA6bWV0aDpgZm9ybWF0YCBtZXRob2QsIHRoZSBkZWZhdWx0IGFsaWdubWVudCB3YXMgcHJldmlvdXNseQorICBsZWZ0LWFsaWdubWVudC4gIFRoaXMgaGFzIGJlZW4gY2hhbmdlZCB0byByaWdodC1hbGlnbm1lbnQsIHdoaWNoIG1pZ2h0CisgIGNoYW5nZSB0aGUgb3V0cHV0IG9mIHlvdXIgcHJvZ3JhbXMuCisgIChDaGFuZ2VkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDY4NTdgLikKKworICBDb21wYXJpc29ucyBpbnZvbHZpbmcgYSBzaWduYWxpbmcgTmFOIHZhbHVlIChvciBgYHNOQU5gYCkgbm93IHNpZ25hbAorICA6Y29uc3Q6YH5kZWNpbWFsLkludmFsaWRPcGVyYXRpb25gIGluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIGEgdHJ1ZSBvcgorICBmYWxzZSB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IuICBRdWlldCBOYU4gdmFsdWVzCisgIChvciBgYE5hTmBgKSBhcmUgbm93IGhhc2hhYmxlLiAgKEZpeGVkIGJ5IE1hcmsgRGlja2luc29uOworICA6aXNzdWU6YDcyNzlgLikKKworKiBUaGUgRWxlbWVudFRyZWUgbGlicmFyeSwgOm1vZDpgeG1sLmV0cmVlYCwgbm8gbG9uZ2VyIGVzY2FwZXMKKyAgYW1wZXJzYW5kcyBhbmQgYW5nbGUgYnJhY2tldHMgd2hlbiBvdXRwdXR0aW5nIGFuIFhNTCBwcm9jZXNzaW5nCisgIGluc3RydWN0aW9uICh3aGljaCBsb29rcyBsaWtlIGA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IiNzdHlsZTEiPz5gKQorICBvciBjb21tZW50ICh3aGljaCBsb29rcyBsaWtlIGA8IS0tIGNvbW1lbnQgLS0+YCkuCisgIChQYXRjaCBieSBOZWlsIE11bGxlcjsgOmlzc3VlOmAyNzQ2YC4pCisKKyogVGhlIDptZXRoOmB+U3RyaW5nSU8uU3RyaW5nSU8ucmVhZGxpbmVgIG1ldGhvZCBvZiA6Y2xhc3M6YH5TdHJpbmdJTy5TdHJpbmdJT2Agb2JqZWN0cyBub3cgZG9lcworICBub3RoaW5nIHdoZW4gYSBuZWdhdGl2ZSBsZW5ndGggaXMgcmVxdWVzdGVkLCBhcyBvdGhlciBmaWxlLWxpa2UKKyAgb2JqZWN0cyBkby4gICg6aXNzdWU6YDczNDhgKS4KKworKiBUaGUgOm1vZDpgc3lzbG9nYCBtb2R1bGUgd2lsbCBub3cgdXNlIHRoZSB2YWx1ZSBvZiBgYHN5cy5hcmd2WzBdYGAgYXMgdGhlCisgIGlkZW50aWZpZXIgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSBvZiBgYCdweXRob24nYGAuCisgIChDaGFuZ2VkIGJ5IFNlYW4gUmVpZnNjaG5laWRlcjsgOmlzc3VlOmA4NDUxYC4pCisKKyogVGhlIDptb2Q6YHRhcmZpbGVgIG1vZHVsZSdzIGRlZmF1bHQgZXJyb3IgaGFuZGxpbmcgaGFzIGNoYW5nZWQsIHRvCisgIG5vIGxvbmdlciBzdXBwcmVzcyBmYXRhbCBlcnJvcnMuICBUaGUgZGVmYXVsdCBlcnJvciBsZXZlbCB3YXMgcHJldmlvdXNseSAwLAorICB3aGljaCBtZWFudCB0aGF0IGVycm9ycyB3b3VsZCBvbmx5IHJlc3VsdCBpbiBhIG1lc3NhZ2UgYmVpbmcgd3JpdHRlbiB0byB0aGUKKyAgZGVidWcgbG9nLCBidXQgYmVjYXVzZSB0aGUgZGVidWcgbG9nIGlzIG5vdCBhY3RpdmF0ZWQgYnkgZGVmYXVsdCwKKyAgdGhlc2UgZXJyb3JzIGdvIHVubm90aWNlZC4gIFRoZSBkZWZhdWx0IGVycm9yIGxldmVsIGlzIG5vdyAxLAorICB3aGljaCByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZXJlJ3MgYW4gZXJyb3IuCisgIChDaGFuZ2VkIGJ5IExhcnMgR3VzdMOkYmVsOyA6aXNzdWU6YDczNTdgLikKKworKiBUaGUgOm1vZDpgdXJscGFyc2VgIG1vZHVsZSdzIDpmdW5jOmB+dXJscGFyc2UudXJsc3BsaXRgIG5vdyBoYW5kbGVzCisgIHVua25vd24gVVJMIHNjaGVtZXMgaW4gYSBmYXNoaW9uIGNvbXBsaWFudCB3aXRoIDpyZmM6YDM5ODZgOiBpZiB0aGUKKyAgVVJMIGlzIG9mIHRoZSBmb3JtIGBgIjxzb21ldGhpbmc+Oi8vLi4uImBgLCB0aGUgdGV4dCBiZWZvcmUgdGhlCisgIGBgOi8vYGAgaXMgdHJlYXRlZCBhcyB0aGUgc2NoZW1lLCBldmVuIGlmIGl0J3MgYSBtYWRlLXVwIHNjaGVtZSB0aGF0CisgIHRoZSBtb2R1bGUgZG9lc24ndCBrbm93IGFib3V0LiAgVGhpcyBjaGFuZ2UgbWF5IGJyZWFrIGNvZGUgdGhhdAorICB3b3JrZWQgYXJvdW5kIHRoZSBvbGQgYmVoYXZpb3VyLiAgRm9yIGV4YW1wbGUsIFB5dGhvbiAyLjYuNCBvciAyLjUKKyAgd2lsbCByZXR1cm4gdGhlIGZvbGxvd2luZzoKKworICAgID4+PiBpbXBvcnQgdXJscGFyc2UKKyAgICA+Pj4gdXJscGFyc2UudXJsc3BsaXQoJ2ludmVudGVkOi8vaG9zdC9maWxlbmFtZT9xdWVyeScpCisgICAgKCdpbnZlbnRlZCcsICcnLCAnLy9ob3N0L2ZpbGVuYW1lP3F1ZXJ5JywgJycsICcnKQorCisgIFB5dGhvbiAyLjcgKGFuZCBQeXRob24gMi42LjUpIHdpbGwgcmV0dXJuOgorCisgICAgPj4+IGltcG9ydCB1cmxwYXJzZQorICAgID4+PiB1cmxwYXJzZS51cmxzcGxpdCgnaW52ZW50ZWQ6Ly9ob3N0L2ZpbGVuYW1lP3F1ZXJ5JykKKyAgICAoJ2ludmVudGVkJywgJ2hvc3QnLCAnL2ZpbGVuYW1lP3F1ZXJ5JywgJycsICcnKQorCisgIChQeXRob24gMi43IGFjdHVhbGx5IHByb2R1Y2VzIHNsaWdodGx5IGRpZmZlcmVudCBvdXRwdXQsIHNpbmNlIGl0CisgIHJldHVybnMgYSBuYW1lZCB0dXBsZSBpbnN0ZWFkIG9mIGEgc3RhbmRhcmQgdHVwbGUuKQorCitGb3IgQyBleHRlbnNpb25zOgorCisqIEMgZXh0ZW5zaW9ucyB0aGF0IHVzZSBpbnRlZ2VyIGZvcm1hdCBjb2RlcyB3aXRoIHRoZSBgYFB5QXJnX1BhcnNlKmBgCisgIGZhbWlseSBvZiBmdW5jdGlvbnMgd2lsbCBub3cgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbgorICBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgICg6aXNzdWU6YDUwODBgKS4KKworKiBVc2UgdGhlIG5ldyA6Y2Z1bmM6YFB5T1Nfc3RyaW5nX3RvX2RvdWJsZWAgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgb2xkCisgIDpjZnVuYzpgUHlPU19hc2NpaV9zdHJ0b2RgIGFuZCA6Y2Z1bmM6YFB5T1NfYXNjaWlfYXRvZmAgZnVuY3Rpb25zLAorICB3aGljaCBhcmUgbm93IGRlcHJlY2F0ZWQuCisKK0ZvciBhcHBsaWNhdGlvbnMgdGhhdCBlbWJlZCBQeXRob246CisKKyogVGhlIDpjZnVuYzpgUHlTeXNfU2V0QXJndkV4YCBmdW5jdGlvbiB3YXMgYWRkZWQsIGxldHRpbmcKKyAgYXBwbGljYXRpb25zIGNsb3NlIGEgc2VjdXJpdHkgaG9sZSB3aGVuIHRoZSBleGlzdGluZworICA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZgIGZ1bmN0aW9uIHdhcyB1c2VkLiAgQ2hlY2sgd2hldGhlciB5b3UncmUKKyAgY2FsbGluZyA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZgIGFuZCBjYXJlZnVsbHkgY29uc2lkZXIgd2hldGhlciB0aGUKKyAgYXBwbGljYXRpb24gc2hvdWxkIGJlIHVzaW5nIDpjZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoCisgICp1cGRhdGVwYXRoKiBzZXQgdG8gZmFsc2UuCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisuLiBfYWNrczI3OgorCitBY2tub3dsZWRnZW1lbnRzCis9PT09PT09PT09PT09PT09CisKK1RoZSBhdXRob3Igd291bGQgbGlrZSB0byB0aGFuayB0aGUgZm9sbG93aW5nIHBlb3BsZSBmb3Igb2ZmZXJpbmcKK3N1Z2dlc3Rpb25zLCBjb3JyZWN0aW9ucyBhbmQgYXNzaXN0YW5jZSB3aXRoIHZhcmlvdXMgZHJhZnRzIG9mIHRoaXMKK2FydGljbGU6IE5pY2sgQ29naGxhbiwgUGhpbGlwIEplbnZleSwgUnlhbiBMb3ZldHQsIFIuIERhdmlkIE11cnJheSwKK0h1Z2ggU2Vja2VyLVdhbGtlci4KKwpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3L2luZGV4LnJzdCBiL0RvYy93aGF0c25ldy9pbmRleC5yc3QKaW5kZXggZjgyYjU4Yy4uZWM0NTc1NiAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3L2luZGV4LnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CkBAIC0xMSw2ICsxMSw3IEBACiAuLiB0b2N0cmVlOjoKICAgIDptYXhkZXB0aDogMgogCisgICAyLjcucnN0CiAgICAyLjYucnN0CiAgICAyLjUucnN0CiAgICAyLjQucnN0CmRpZmYgLS1naXQgYS9HcmFtbWFyL0dyYW1tYXIgYi9HcmFtbWFyL0dyYW1tYXIKaW5kZXggODY1ZDQ0Yy4uNGMzZjMzZCAxMDA2NDQKLS0tIGEvR3JhbW1hci9HcmFtbWFyCisrKyBiL0dyYW1tYXIvR3JhbW1hcgpAQCAtMTAsMjIgKzEwLDEwIEBACiAjIE5PVEUgV0VMTDogWW91IHNob3VsZCBhbHNvIGZvbGxvdyBhbGwgdGhlIHN0ZXBzIGxpc3RlZCBpbiBQRVAgMzA2LAogIyAiSG93IHRvIENoYW5nZSBQeXRob24ncyBHcmFtbWFyIgogCi0jIENvbW1hbmRzIGZvciBLZWVzIEJsb20ncyByYWlscm9hZCBwcm9ncmFtCi0jZGlhZ3JhbTp0b2tlbiBOQU1FCi0jZGlhZ3JhbTp0b2tlbiBOVU1CRVIKLSNkaWFncmFtOnRva2VuIFNUUklORwotI2RpYWdyYW06dG9rZW4gTkVXTElORQotI2RpYWdyYW06dG9rZW4gRU5ETUFSS0VSCi0jZGlhZ3JhbTp0b2tlbiBJTkRFTlQKLSNkaWFncmFtOm91dHB1dFxpbnB1dCBweXRob24uYmxhCi0jZGlhZ3JhbTp0b2tlbiBERURFTlQKLSNkaWFncmFtOm91dHB1dFx0ZXh0d2lkdGggMjAuMDRjbVxvZGRzaWRlbWFyZ2luICAwLjBjbVxldmVuc2lkZW1hcmdpbiAwLjBjbQotI2RpYWdyYW06cnVsZXMKLQogIyBTdGFydCBzeW1ib2xzIGZvciB0aGUgZ3JhbW1hcjoKLSMJc2luZ2xlX2lucHV0IGlzIGEgc2luZ2xlIGludGVyYWN0aXZlIHN0YXRlbWVudDsKLSMJZmlsZV9pbnB1dCBpcyBhIG1vZHVsZSBvciBzZXF1ZW5jZSBvZiBjb21tYW5kcyByZWFkIGZyb20gYW4gaW5wdXQgZmlsZTsKLSMJZXZhbF9pbnB1dCBpcyB0aGUgaW5wdXQgZm9yIHRoZSBldmFsKCkgYW5kIGlucHV0KCkgZnVuY3Rpb25zLgorIyAgICAgICBzaW5nbGVfaW5wdXQgaXMgYSBzaW5nbGUgaW50ZXJhY3RpdmUgc3RhdGVtZW50OworIyAgICAgICBmaWxlX2lucHV0IGlzIGEgbW9kdWxlIG9yIHNlcXVlbmNlIG9mIGNvbW1hbmRzIHJlYWQgZnJvbSBhbiBpbnB1dCBmaWxlOworIyAgICAgICBldmFsX2lucHV0IGlzIHRoZSBpbnB1dCBmb3IgdGhlIGV2YWwoKSBhbmQgaW5wdXQoKSBmdW5jdGlvbnMuCiAjIE5COiBjb21wb3VuZF9zdG10IGluIHNpbmdsZV9pbnB1dCBpcyBmb2xsb3dlZCBieSBleHRyYSBORVdMSU5FIQogc2luZ2xlX2lucHV0OiBORVdMSU5FIHwgc2ltcGxlX3N0bXQgfCBjb21wb3VuZF9zdG10IE5FV0xJTkUKIGZpbGVfaW5wdXQ6IChORVdMSU5FIHwgc3RtdCkqIEVORE1BUktFUgpAQCAtODAsMTEgKzY4LDExIEBACiBmb3Jfc3RtdDogJ2ZvcicgZXhwcmxpc3QgJ2luJyB0ZXN0bGlzdCAnOicgc3VpdGUgWydlbHNlJyAnOicgc3VpdGVdCiB0cnlfc3RtdDogKCd0cnknICc6JyBzdWl0ZQogICAgICAgICAgICAoKGV4Y2VwdF9jbGF1c2UgJzonIHN1aXRlKSsKLQkgICAgWydlbHNlJyAnOicgc3VpdGVdCi0JICAgIFsnZmluYWxseScgJzonIHN1aXRlXSB8Ci0JICAgJ2ZpbmFsbHknICc6JyBzdWl0ZSkpCi13aXRoX3N0bXQ6ICd3aXRoJyB0ZXN0IFsgd2l0aF92YXIgXSAnOicgc3VpdGUKLXdpdGhfdmFyOiAnYXMnIGV4cHIKKyAgICAgICAgICAgIFsnZWxzZScgJzonIHN1aXRlXQorICAgICAgICAgICAgWydmaW5hbGx5JyAnOicgc3VpdGVdIHwKKyAgICAgICAgICAgJ2ZpbmFsbHknICc6JyBzdWl0ZSkpCit3aXRoX3N0bXQ6ICd3aXRoJyB3aXRoX2l0ZW0gKCcsJyB3aXRoX2l0ZW0pKiAgJzonIHN1aXRlCit3aXRoX2l0ZW06IHRlc3QgWydhcycgZXhwcl0KICMgTkIgY29tcGlsZS5jIG1ha2VzIHN1cmUgdGhhdCB0aGUgZGVmYXVsdCBleGNlcHQgY2xhdXNlIGlzIGxhc3QKIGV4Y2VwdF9jbGF1c2U6ICdleGNlcHQnIFt0ZXN0IFsoJ2FzJyB8ICcsJykgdGVzdF1dCiBzdWl0ZTogc2ltcGxlX3N0bXQgfCBORVdMSU5FIElOREVOVCBzdG10KyBERURFTlQKQEAgLTExMiwxMyArMTAwLDEzIEBACiB0ZXJtOiBmYWN0b3IgKCgnKid8Jy8nfCclJ3wnLy8nKSBmYWN0b3IpKgogZmFjdG9yOiAoJysnfCctJ3wnficpIGZhY3RvciB8IHBvd2VyCiBwb3dlcjogYXRvbSB0cmFpbGVyKiBbJyoqJyBmYWN0b3JdCi1hdG9tOiAoJygnIFt5aWVsZF9leHByfHRlc3RsaXN0X2dleHBdICcpJyB8CithdG9tOiAoJygnIFt5aWVsZF9leHByfHRlc3RsaXN0X2NvbXBdICcpJyB8CiAgICAgICAgJ1snIFtsaXN0bWFrZXJdICddJyB8Ci0gICAgICAgJ3snIFtkaWN0bWFrZXJdICd9JyB8CisgICAgICAgJ3snIFtkaWN0b3JzZXRtYWtlcl0gJ30nIHwKICAgICAgICAnYCcgdGVzdGxpc3QxICdgJyB8CiAgICAgICAgTkFNRSB8IE5VTUJFUiB8IFNUUklORyspCiBsaXN0bWFrZXI6IHRlc3QgKCBsaXN0X2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddICkKLXRlc3RsaXN0X2dleHA6IHRlc3QgKCBnZW5fZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10gKQordGVzdGxpc3RfY29tcDogdGVzdCAoIGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10gKQogbGFtYmRlZjogJ2xhbWJkYScgW3ZhcmFyZ3NsaXN0XSAnOicgdGVzdAogdHJhaWxlcjogJygnIFthcmdsaXN0XSAnKScgfCAnWycgc3Vic2NyaXB0bGlzdCAnXScgfCAnLicgTkFNRQogc3Vic2NyaXB0bGlzdDogc3Vic2NyaXB0ICgnLCcgc3Vic2NyaXB0KSogWycsJ10KQEAgLTEyNiwyMiArMTE0LDI1IEBACiBzbGljZW9wOiAnOicgW3Rlc3RdCiBleHBybGlzdDogZXhwciAoJywnIGV4cHIpKiBbJywnXQogdGVzdGxpc3Q6IHRlc3QgKCcsJyB0ZXN0KSogWycsJ10KLWRpY3RtYWtlcjogdGVzdCAnOicgdGVzdCAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXQorZGljdG9yc2V0bWFrZXI6ICggKHRlc3QgJzonIHRlc3QgKGNvbXBfZm9yIHwgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10pKSB8CisgICAgICAgICAgICAgICAgICAodGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSkpICkKIAogY2xhc3NkZWY6ICdjbGFzcycgTkFNRSBbJygnIFt0ZXN0bGlzdF0gJyknXSAnOicgc3VpdGUKIAogYXJnbGlzdDogKGFyZ3VtZW50ICcsJykqIChhcmd1bWVudCBbJywnXQogICAgICAgICAgICAgICAgICAgICAgICAgIHwnKicgdGVzdCAoJywnIGFyZ3VtZW50KSogWycsJyAnKionIHRlc3RdIAogICAgICAgICAgICAgICAgICAgICAgICAgIHwnKionIHRlc3QpCi1hcmd1bWVudDogdGVzdCBbZ2VuX2Zvcl0gfCB0ZXN0ICc9JyB0ZXN0ICAjIFJlYWxseSBba2V5d29yZCAnPSddIHRlc3QKKyMgVGhlIHJlYXNvbiB0aGF0IGtleXdvcmRzIGFyZSB0ZXN0IG5vZGVzIGluc3RlYWQgb2YgTkFNRSBpcyB0aGF0IHVzaW5nIE5BTUUKKyMgcmVzdWx0cyBpbiBhbiBhbWJpZ3VpdHkuIGFzdC5jIG1ha2VzIHN1cmUgaXQncyBhIE5BTUUuCithcmd1bWVudDogdGVzdCBbY29tcF9mb3JdIHwgdGVzdCAnPScgdGVzdAogCiBsaXN0X2l0ZXI6IGxpc3RfZm9yIHwgbGlzdF9pZgogbGlzdF9mb3I6ICdmb3InIGV4cHJsaXN0ICdpbicgdGVzdGxpc3Rfc2FmZSBbbGlzdF9pdGVyXQogbGlzdF9pZjogJ2lmJyBvbGRfdGVzdCBbbGlzdF9pdGVyXQogCi1nZW5faXRlcjogZ2VuX2ZvciB8IGdlbl9pZgotZ2VuX2ZvcjogJ2ZvcicgZXhwcmxpc3QgJ2luJyBvcl90ZXN0IFtnZW5faXRlcl0KLWdlbl9pZjogJ2lmJyBvbGRfdGVzdCBbZ2VuX2l0ZXJdCitjb21wX2l0ZXI6IGNvbXBfZm9yIHwgY29tcF9pZgorY29tcF9mb3I6ICdmb3InIGV4cHJsaXN0ICdpbicgb3JfdGVzdCBbY29tcF9pdGVyXQorY29tcF9pZjogJ2lmJyBvbGRfdGVzdCBbY29tcF9pdGVyXQogCiB0ZXN0bGlzdDE6IHRlc3QgKCcsJyB0ZXN0KSoKIApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24tYXN0LmggYi9JbmNsdWRlL1B5dGhvbi1hc3QuaAppbmRleCAzMjEwZmM3Li4zZjM1YmJiIDEwMDY0NAotLS0gYS9JbmNsdWRlL1B5dGhvbi1hc3QuaAorKysgYi9JbmNsdWRlL1B5dGhvbi1hc3QuaApAQCAtMTg1LDExICsxODUsMTEgQEAKIH07CiAKIGVudW0gX2V4cHJfa2luZCB7Qm9vbE9wX2tpbmQ9MSwgQmluT3Bfa2luZD0yLCBVbmFyeU9wX2tpbmQ9MywgTGFtYmRhX2tpbmQ9NCwKLSAgICAgICAgICAgICAgICAgIElmRXhwX2tpbmQ9NSwgRGljdF9raW5kPTYsIExpc3RDb21wX2tpbmQ9NywKLSAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckV4cF9raW5kPTgsIFlpZWxkX2tpbmQ9OSwgQ29tcGFyZV9raW5kPTEwLAotICAgICAgICAgICAgICAgICAgQ2FsbF9raW5kPTExLCBSZXByX2tpbmQ9MTIsIE51bV9raW5kPTEzLCBTdHJfa2luZD0xNCwKLSAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZV9raW5kPTE1LCBTdWJzY3JpcHRfa2luZD0xNiwgTmFtZV9raW5kPTE3LAotICAgICAgICAgICAgICAgICAgTGlzdF9raW5kPTE4LCBUdXBsZV9raW5kPTE5fTsKKyAgICAgICAgICAgICAgICAgIElmRXhwX2tpbmQ9NSwgRGljdF9raW5kPTYsIFNldF9raW5kPTcsIExpc3RDb21wX2tpbmQ9OCwKKyAgICAgICAgICAgICAgICAgIFNldENvbXBfa2luZD05LCBEaWN0Q29tcF9raW5kPTEwLCBHZW5lcmF0b3JFeHBfa2luZD0xMSwKKyAgICAgICAgICAgICAgICAgIFlpZWxkX2tpbmQ9MTIsIENvbXBhcmVfa2luZD0xMywgQ2FsbF9raW5kPTE0LCBSZXByX2tpbmQ9MTUsCisgICAgICAgICAgICAgICAgICBOdW1fa2luZD0xNiwgU3RyX2tpbmQ9MTcsIEF0dHJpYnV0ZV9raW5kPTE4LAorICAgICAgICAgICAgICAgICAgU3Vic2NyaXB0X2tpbmQ9MTksIE5hbWVfa2luZD0yMCwgTGlzdF9raW5kPTIxLCBUdXBsZV9raW5kPTIyfTsKIHN0cnVjdCBfZXhwciB7CiAgICAgICAgIGVudW0gX2V4cHJfa2luZCBraW5kOwogICAgICAgICB1bmlvbiB7CkBAIC0yMjYsNiArMjI2LDEwIEBACiAgICAgICAgICAgICAgICAgfSBEaWN0OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqZWx0czsKKyAgICAgICAgICAgICAgICB9IFNldDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBlbHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqZ2VuZXJhdG9yczsKICAgICAgICAgICAgICAgICB9IExpc3RDb21wOwpAQCAtMjMzLDYgKzIzNywxNyBAQAogICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGVsdDsKICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICpnZW5lcmF0b3JzOworICAgICAgICAgICAgICAgIH0gU2V0Q29tcDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBrZXk7CisgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmdlbmVyYXRvcnM7CisgICAgICAgICAgICAgICAgfSBEaWN0Q29tcDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBlbHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqZ2VuZXJhdG9yczsKICAgICAgICAgICAgICAgICB9IEdlbmVyYXRvckV4cDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzdHJ1Y3QgewpAQCAtNDQ5LDkgKzQ2NCwxNyBAQAogI2RlZmluZSBEaWN0KGEwLCBhMSwgYTIsIGEzLCBhNCkgX1B5X0RpY3QoYTAsIGExLCBhMiwgYTMsIGE0KQogZXhwcl90eSBfUHlfRGljdChhc2RsX3NlcSAqIGtleXMsIGFzZGxfc2VxICogdmFsdWVzLCBpbnQgbGluZW5vLCBpbnQKICAgICAgICAgICAgICAgICAgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOworI2RlZmluZSBTZXQoYTAsIGExLCBhMiwgYTMpIF9QeV9TZXQoYTAsIGExLCBhMiwgYTMpCitleHByX3R5IF9QeV9TZXQoYXNkbF9zZXEgKiBlbHRzLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBMaXN0Q29tcChhMCwgYTEsIGEyLCBhMywgYTQpIF9QeV9MaXN0Q29tcChhMCwgYTEsIGEyLCBhMywgYTQpCiBleHByX3R5IF9QeV9MaXN0Q29tcChleHByX3R5IGVsdCwgYXNkbF9zZXEgKiBnZW5lcmF0b3JzLCBpbnQgbGluZW5vLCBpbnQKICAgICAgICAgICAgICAgICAgICAgIGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKKyNkZWZpbmUgU2V0Q29tcChhMCwgYTEsIGEyLCBhMywgYTQpIF9QeV9TZXRDb21wKGEwLCBhMSwgYTIsIGEzLCBhNCkKK2V4cHJfdHkgX1B5X1NldENvbXAoZXhwcl90eSBlbHQsIGFzZGxfc2VxICogZ2VuZXJhdG9ycywgaW50IGxpbmVubywgaW50CisgICAgICAgICAgICAgICAgICAgIGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKKyNkZWZpbmUgRGljdENvbXAoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkgX1B5X0RpY3RDb21wKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpCitleHByX3R5IF9QeV9EaWN0Q29tcChleHByX3R5IGtleSwgZXhwcl90eSB2YWx1ZSwgYXNkbF9zZXEgKiBnZW5lcmF0b3JzLCBpbnQKKyAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUgR2VuZXJhdG9yRXhwKGEwLCBhMSwgYTIsIGEzLCBhNCkgX1B5X0dlbmVyYXRvckV4cChhMCwgYTEsIGEyLCBhMywgYTQpCiBleHByX3R5IF9QeV9HZW5lcmF0b3JFeHAoZXhwcl90eSBlbHQsIGFzZGxfc2VxICogZ2VuZXJhdG9ycywgaW50IGxpbmVubywgaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24uaCBiL0luY2x1ZGUvUHl0aG9uLmgKaW5kZXggYjA5YjRiYi4uNzc1NDEyYiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24uaAorKysgYi9JbmNsdWRlL1B5dGhvbi5oCkBAIC05Miw3ICs5Miw3IEBACiAjZW5kaWYKICNpbmNsdWRlICJyYW5nZW9iamVjdC5oIgogI2luY2x1ZGUgInN0cmluZ29iamVjdC5oIgotLyogI2luY2x1ZGUgIm1lbW9yeW9iamVjdC5oIiAqLworI2luY2x1ZGUgIm1lbW9yeW9iamVjdC5oIgogI2luY2x1ZGUgImJ1ZmZlcm9iamVjdC5oIgogI2luY2x1ZGUgImJ5dGVzb2JqZWN0LmgiCiAjaW5jbHVkZSAiYnl0ZWFycmF5b2JqZWN0LmgiCkBAIC0xMDcsNiArMTA3LDcgQEAKICNpbmNsdWRlICJjbGFzc29iamVjdC5oIgogI2luY2x1ZGUgImZpbGVvYmplY3QuaCIKICNpbmNsdWRlICJjb2JqZWN0LmgiCisjaW5jbHVkZSAicHljYXBzdWxlLmgiCiAjaW5jbHVkZSAidHJhY2ViYWNrLmgiCiAjaW5jbHVkZSAic2xpY2VvYmplY3QuaCIKICNpbmNsdWRlICJjZWxsb2JqZWN0LmgiCkBAIC0xMzQsOCArMTM1LDEwIEBACiAjaW5jbHVkZSAiY29tcGlsZS5oIgogI2luY2x1ZGUgImV2YWwuaCIKIAorI2luY2x1ZGUgInB5Y3R5cGUuaCIKICNpbmNsdWRlICJweXN0cnRvZC5oIgogI2luY2x1ZGUgInB5c3RyY21wLmgiCisjaW5jbHVkZSAiZHRvYS5oIgogCiAvKiBfUHlfTWFuZ2xlIGlzIGRlZmluZWQgaW4gY29tcGlsZS5jICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgX1B5X01hbmdsZShQeU9iamVjdCAqcCwgUHlPYmplY3QgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9hYnN0cmFjdC5oIGIvSW5jbHVkZS9hYnN0cmFjdC5oCmluZGV4IGM3OGFiMDAuLmU0Y2U1YWQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYWJzdHJhY3QuaAorKysgYi9JbmNsdWRlL2Fic3RyYWN0LmgKQEAgLTYzNiw3ICs2MzYsOCBAQAogCiAjZGVmaW5lIFB5SXRlcl9DaGVjayhvYmopIFwKICAgICAoUHlUeXBlX0hhc0ZlYXR1cmUoKG9iaiktPm9iX3R5cGUsIFB5X1RQRkxBR1NfSEFWRV9JVEVSKSAmJiBcCi0gICAgIChvYmopLT5vYl90eXBlLT50cF9pdGVybmV4dCAhPSBOVUxMKQorICAgICAob2JqKS0+b2JfdHlwZS0+dHBfaXRlcm5leHQgIT0gTlVMTCAmJiBcCisgICAgIChvYmopLT5vYl90eXBlLT50cF9pdGVybmV4dCAhPSAmX1B5T2JqZWN0X05leHROb3RJbXBsZW1lbnRlZCkKIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SXRlcl9OZXh0KFB5T2JqZWN0ICopOwogICAgICAvKiBUYWtlcyBhbiBpdGVyYXRvciBvYmplY3QgYW5kIGNhbGxzIGl0cyB0cF9pdGVybmV4dCBzbG90LApAQCAtMTM4Miw2ICsxMzgzLDEzIEBACiBQeUFQSV9GVU5DKGludCkgX1B5T2JqZWN0X1JlYWxJc1N1YmNsYXNzKFB5T2JqZWN0ICpkZXJpdmVkLCBQeU9iamVjdCAqY2xzKTsKIAogCisvKiBGb3IgaW50ZXJuYWwgdXNlIGJ5IGJ1ZmZlciBBUEkgZnVuY3Rpb25zICovCitQeUFQSV9GVU5DKHZvaWQpIF9QeV9hZGRfb25lX3RvX2luZGV4X0YoaW50IG5kLCBQeV9zc2l6ZV90ICppbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9zc2l6ZV90ICpzaGFwZSk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9hZGRfb25lX3RvX2luZGV4X0MoaW50IG5kLCBQeV9zc2l6ZV90ICppbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9zc2l6ZV90ICpzaGFwZSk7CisKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYnl0ZXNfbWV0aG9kcy5oIGIvSW5jbHVkZS9ieXRlc19tZXRob2RzLmgKaW5kZXggNTk4NzNmMi4uNDEyNTY2NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ieXRlc19tZXRob2RzLmgKKysrIGIvSW5jbHVkZS9ieXRlc19tZXRob2RzLmgKQEAgLTM0LDIzICszNCwxNSBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgX1B5X2NhcGl0YWxpemVfX2RvY19fW107CiBleHRlcm4gY29uc3QgY2hhciBfUHlfc3dhcGNhc2VfX2RvY19fW107CiAKLSNkZWZpbmUgRkxBR19MT1dFUiAgMHgwMQotI2RlZmluZSBGTEFHX1VQUEVSICAweDAyCi0jZGVmaW5lIEZMQUdfQUxQSEEgIChGTEFHX0xPV0VSfEZMQUdfVVBQRVIpCi0jZGVmaW5lIEZMQUdfRElHSVQgIDB4MDQKLSNkZWZpbmUgRkxBR19BTE5VTSAgKEZMQUdfQUxQSEF8RkxBR19ESUdJVCkKLSNkZWZpbmUgRkxBR19TUEFDRSAgMHgwOAotI2RlZmluZSBGTEFHX1hESUdJVCAweDEwCi0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgX1B5X2N0eXBlX3RhYmxlWzI1Nl07Ci0KLSNkZWZpbmUgSVNMT1dFUihjKSAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIEZMQUdfTE9XRVIpCi0jZGVmaW5lIElTVVBQRVIoYykgKF9QeV9jdHlwZV90YWJsZVtQeV9DSEFSTUFTSyhjKV0gJiBGTEFHX1VQUEVSKQotI2RlZmluZSBJU0FMUEhBKGMpIChfUHlfY3R5cGVfdGFibGVbUHlfQ0hBUk1BU0soYyldICYgRkxBR19BTFBIQSkKLSNkZWZpbmUgSVNESUdJVChjKSAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIEZMQUdfRElHSVQpCi0jZGVmaW5lIElTWERJR0lUKGMpIChfUHlfY3R5cGVfdGFibGVbUHlfQ0hBUk1BU0soYyldICYgRkxBR19YRElHSVQpCi0jZGVmaW5lIElTQUxOVU0oYykgKF9QeV9jdHlwZV90YWJsZVtQeV9DSEFSTUFTSyhjKV0gJiBGTEFHX0FMTlVNKQotI2RlZmluZSBJU1NQQUNFKGMpIChfUHlfY3R5cGVfdGFibGVbUHlfQ0hBUk1BU0soYyldICYgRkxBR19TUEFDRSkKKy8qIFRoZXNlIGFyZSBsZWZ0IGluIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB3aWxsIGJlIHJlbW92ZWQKKyAgIGluIDIuOC8zLjIgKi8KKyNkZWZpbmUgSVNMT1dFUihjKSAgUHlfSVNMT1dFUihjKQorI2RlZmluZSBJU1VQUEVSKGMpICBQeV9JU1VQUEVSKGMpCisjZGVmaW5lIElTQUxQSEEoYykgIFB5X0lTQUxQSEEoYykKKyNkZWZpbmUgSVNESUdJVChjKSAgUHlfSVNESUdJVChjKQorI2RlZmluZSBJU1hESUdJVChjKSBQeV9JU1hESUdJVChjKQorI2RlZmluZSBJU0FMTlVNKGMpICBQeV9JU0FMTlVNKGMpCisjZGVmaW5lIElTU1BBQ0UoYykgIFB5X0lTU1BBQ0UoYykKIAogI3VuZGVmIGlzbG93ZXIKICNkZWZpbmUgaXNsb3dlcihjKSB1bmRlZmluZWRfaXNsb3dlcihjKQpAQCAtNjcsMTEgKzU5LDEwIEBACiAjdW5kZWYgaXNzcGFjZQogI2RlZmluZSBpc3NwYWNlKGMpIHVuZGVmaW5lZF9pc3NwYWNlKGMpCiAKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9jdHlwZV90b2xvd2VyWzI1Nl07Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBfUHlfY3R5cGVfdG91cHBlclsyNTZdOwotCi0jZGVmaW5lIFRPTE9XRVIoYykgKF9QeV9jdHlwZV90b2xvd2VyW1B5X0NIQVJNQVNLKGMpXSkKLSNkZWZpbmUgVE9VUFBFUihjKSAoX1B5X2N0eXBlX3RvdXBwZXJbUHlfQ0hBUk1BU0soYyldKQorLyogVGhlc2UgYXJlIGxlZnQgaW4gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgcmVtb3ZlZAorICAgaW4gMi44LzMuMiAqLworI2RlZmluZSBUT0xPV0VSKGMpIFB5X1RPTE9XRVIoYykKKyNkZWZpbmUgVE9VUFBFUihjKSBQeV9UT1VQUEVSKGMpCiAKICN1bmRlZiB0b2xvd2VyCiAjZGVmaW5lIHRvbG93ZXIoYykgdW5kZWZpbmVkX3RvbG93ZXIoYykKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYnl0ZXNvYmplY3QuaCBiL0luY2x1ZGUvYnl0ZXNvYmplY3QuaAppbmRleCBhNTA3OTJjLi4xMDgzZGE5IDEwMDY0NAotLS0gYS9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9ieXRlc29iamVjdC5oCkBAIC0yMywxMSArMjMsNSBAQAogI2RlZmluZSBfUHlCeXRlc19Gb3JtYXRMb25nIF9QeVN0cmluZ19Gb3JtYXRMb25nCiAjZGVmaW5lIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlIFB5U3RyaW5nX0RlY29kZUVzY2FwZQogI2RlZmluZSBfUHlCeXRlc19Kb2luIF9QeVN0cmluZ19Kb2luCi0jZGVmaW5lIFB5Qnl0ZXNfRGVjb2RlIFB5U3RyaW5nX0RlY29kZQotI2RlZmluZSBQeUJ5dGVzX0VuY29kZSBQeVN0cmluZ19FbmNvZGUKLSNkZWZpbmUgUHlCeXRlc19Bc0VuY29kZWRPYmplY3QgUHlTdHJpbmdfQXNFbmNvZGVkT2JqZWN0Ci0jZGVmaW5lIFB5Qnl0ZXNfQXNFbmNvZGVkU3RyaW5nIFB5U3RyaW5nX0FzRW5jb2RlZFN0cmluZwotI2RlZmluZSBQeUJ5dGVzX0FzRGVjb2RlZE9iamVjdCBQeVN0cmluZ19Bc0RlY29kZWRPYmplY3QKLSNkZWZpbmUgUHlCeXRlc19Bc0RlY29kZWRTdHJpbmcgUHlTdHJpbmdfQXNEZWNvZGVkU3RyaW5nCiAjZGVmaW5lIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplIFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZQogI2RlZmluZSBfUHlCeXRlc19JbnNlcnRUaG91c2FuZHNHcm91cGluZyBfUHlTdHJpbmdfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY1N0cmluZ0lPLmggYi9JbmNsdWRlL2NTdHJpbmdJTy5oCmluZGV4IGQyMmI5ZWIuLjZjYTQ0YTggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY1N0cmluZ0lPLmgKKysrIGIvSW5jbHVkZS9jU3RyaW5nSU8uaApAQCAtMTgsOSArMTgsMTIgQEAKICAgVGhpcyB3b3VsZCB0eXBpY2FsbHkgYmUgZG9uZSBpbiB5b3VyIGluaXQgZnVuY3Rpb24uCiAKICovCisKKyNkZWZpbmUgUHljU3RyaW5nSU9fQ0FQU1VMRV9OQU1FICJjU3RyaW5nSU8uY1N0cmluZ0lPX0NBUEkiCisKICNkZWZpbmUgUHljU3RyaW5nX0lNUE9SVCBcCi0gIFB5Y1N0cmluZ0lPID0gKHN0cnVjdCBQeWNTdHJpbmdJT19DQVBJKilQeUNPYmplY3RfSW1wb3J0KCJjU3RyaW5nSU8iLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjU3RyaW5nSU9fQ0FQSSIpCisgIFB5Y1N0cmluZ0lPID0gKChzdHJ1Y3QgUHljU3RyaW5nSU9fQ0FQSSopUHlDYXBzdWxlX0ltcG9ydChcCisgICAgUHljU3RyaW5nSU9fQ0FQU1VMRV9OQU1FLCAwKSkKIAogLyogQmFzaWMgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgY1N0cmluZ0lPIG9iamVjdHMgZnJvbSBDICovCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY2V2YWwuaCBiL0luY2x1ZGUvY2V2YWwuaAppbmRleCA0MGY3Yjk0Li4wZThiZDJhIDEwMDY0NAotLS0gYS9JbmNsdWRlL2NldmFsLmgKKysrIGIvSW5jbHVkZS9jZXZhbC5oCkBAIC0xMCwxMCArMTAsNiBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcygKICAgICBQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIAotLyogRExMLWxldmVsIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OiAqLwotI3VuZGVmIFB5RXZhbF9DYWxsT2JqZWN0Ci1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXZhbF9DYWxsT2JqZWN0KFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwotCiAvKiBJbmxpbmUgdGhpcyAqLwogI2RlZmluZSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLGFyZykgXAogICAgIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzKGZ1bmMsIGFyZywgKFB5T2JqZWN0ICopTlVMTCkKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY2xhc3NvYmplY3QuaCBiL0luY2x1ZGUvY2xhc3NvYmplY3QuaAppbmRleCAxMThkZDA5Li5iYzAzZTBkIDEwMDY0NAotLS0gYS9JbmNsdWRlL2NsYXNzb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9jbGFzc29iamVjdC5oCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgUHlPYmplY3QJKmNsX2dldGF0dHI7CiAgICAgUHlPYmplY3QJKmNsX3NldGF0dHI7CiAgICAgUHlPYmplY3QJKmNsX2RlbGF0dHI7CisgICAgUHlPYmplY3QgICAgKmNsX3dlYWtyZWZsaXN0OyAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwogfSBQeUNsYXNzT2JqZWN0OwogCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2NvYmplY3QuaCBiL0luY2x1ZGUvY29iamVjdC5oCmluZGV4IDRlMjRkN2QuLmFkM2NkOWMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29iamVjdC5oCisrKyBiL0luY2x1ZGUvY29iamVjdC5oCkBAIC0xLDMgKzEsMjkgQEAKKy8qCisgICBDT2JqZWN0cyBhcmUgbWFya2VkIFBlbmRpbmcgRGVwcmVjYXRpb24gYXMgb2YgUHl0aG9uIDIuNy4KKyAgIFRoZSBmdWxsIHNjaGVkdWxlIGZvciAyLnggaXMgYXMgZm9sbG93czoKKyAgICAgLSBDT2JqZWN0cyBhcmUgbWFya2VkIFBlbmRpbmcgRGVwcmVjYXRpb24gaW4gUHl0aG9uIDIuNy4KKyAgICAgLSBDT2JqZWN0cyB3aWxsIGJlIG1hcmtlZCBEZXByZWNhdGVkIGluIFB5dGhvbiAyLjgKKyAgICAgICAoaWYgdGhlcmUgaXMgb25lKS4KKyAgICAgLSBDT2JqZWN0cyB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDIuOSAoaWYgdGhlcmUgaXMgb25lKS4KKworICAgQWRkaXRpb25hbGx5LCBmb3IgdGhlIFB5dGhvbiAzLnggc2VyaWVzOgorICAgICAtIENPYmplY3RzIHdlcmUgbWFya2VkIERlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMS4KKyAgICAgLSBDT2JqZWN0cyB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuMi4KKworICAgWW91IHNob3VsZCBzd2l0Y2ggYWxsIHVzZSBvZiBDT2JqZWN0cyB0byBjYXBzdWxlcy4gIENhcHN1bGVzCisgICBoYXZlIGEgc2FmZXIgYW5kIG1vcmUgY29uc2lzdGVudCBBUEkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKKyAgIHNlZSBJbmNsdWRlL3B5Y2Fwc3VsZS5oLCBvciByZWFkIHRoZSAiQ2Fwc3VsZXMiIHRvcGljIGluCisgICB0aGUgIlB5dGhvbi9DIEFQSSBSZWZlcmVuY2UgTWFudWFsIi4KKworICAgUHl0aG9uIDIuNyBubyBsb25nZXIgdXNlcyBDT2JqZWN0cyBpdHNlbGY7IGFsbCBvYmplY3RzIHdoaWNoCisgICB3ZXJlIGZvcm1lcmx5IENPYmplY3RzIGFyZSBub3cgY2Fwc3VsZXMuICBOb3RlIHRoYXQgdGhpcyBjaGFuZ2UKKyAgIGRvZXMgbm90IGJ5IGl0c2VsZiBicmVhayBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIGV4dGVuc2lvbnMKKyAgIGJ1aWx0IGZvciBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24tLVB5Q09iamVjdF9Bc1ZvaWRQdHIoKQorICAgaGFzIGJlZW4gY2hhbmdlZCB0byBhbHNvIHVuZGVyc3RhbmQgY2Fwc3VsZXMuCisKKyovCisKKy8qIG9yaWdpbmFsIGZpbGUgaGVhZGVyIGNvbW1lbnQgZm9sbG93czogKi8KIAogLyogQyBvYmplY3RzIHRvIGJlIGV4cG9ydGVkIGZyb20gb25lIGV4dGVuc2lvbiBtb2R1bGUgdG8gYW5vdGhlci4KICAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29kZS5oIGIvSW5jbHVkZS9jb2RlLmgKaW5kZXggOGMwMDcwMC4uMzhiMjk1OCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb2RlLmgKKysrIGIvSW5jbHVkZS9jb2RlLmgKQEAgLTIzLDggKzIzLDEwIEBACiAgICAgUHlPYmplY3QgKmNvX2ZpbGVuYW1lOwkvKiBzdHJpbmcgKHdoZXJlIGl0IHdhcyBsb2FkZWQgZnJvbSkgKi8KICAgICBQeU9iamVjdCAqY29fbmFtZTsJCS8qIHN0cmluZyAobmFtZSwgZm9yIHJlZmVyZW5jZSkgKi8KICAgICBpbnQgY29fZmlyc3RsaW5lbm87CQkvKiBmaXJzdCBzb3VyY2UgbGluZSBudW1iZXIgKi8KLSAgICBQeU9iamVjdCAqY29fbG5vdGFiOwkvKiBzdHJpbmcgKGVuY29kaW5nIGFkZHI8LT5saW5lbm8gbWFwcGluZykgKi8KKyAgICBQeU9iamVjdCAqY29fbG5vdGFiOwkvKiBzdHJpbmcgKGVuY29kaW5nIGFkZHI8LT5saW5lbm8gbWFwcGluZykgU2VlCisJCQkJICAgT2JqZWN0cy9sbm90YWJfbm90ZXMudHh0IGZvciBkZXRhaWxzLiAqLwogICAgIHZvaWQgKmNvX3pvbWJpZWZyYW1lOyAgICAgLyogZm9yIG9wdGltaXphdGlvbiBvbmx5IChzZWUgZnJhbWVvYmplY3QuYykgKi8KKyAgICBQeU9iamVjdCAqY29fd2Vha3JlZmxpc3Q7ICAgLyogdG8gc3VwcG9ydCB3ZWFrcmVmcyB0byBjb2RlIG9iamVjdHMgKi8KIH0gUHlDb2RlT2JqZWN0OwogCiAvKiBNYXNrcyBmb3IgY29fZmxhZ3MgYWJvdmUgKi8KQEAgLTcwLDYgKzcyLDE0IEBACiAJaW50LCBpbnQsIGludCwgaW50LCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogCVB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIGludCwgUHlPYmplY3QgKik7IAogICAgICAgICAvKiBzYW1lIGFzIHN0cnVjdCBhYm92ZSAqLworCisvKiBDcmVhdGVzIGEgbmV3IGVtcHR5IGNvZGUgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBzb3VyY2UgbG9jYXRpb24uICovCitQeUFQSV9GVU5DKFB5Q29kZU9iamVjdCAqKQorUHlDb2RlX05ld0VtcHR5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmdW5jbmFtZSwgaW50IGZpcnN0bGluZW5vKTsKKworLyogUmV0dXJuIHRoZSBsaW5lIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBieXRlY29kZSBpbmRleAorICAgaW4gdGhpcyBjb2RlIG9iamVjdC4gIElmIHlvdSBqdXN0IG5lZWQgdGhlIGxpbmUgbnVtYmVyIG9mIGEgZnJhbWUsCisgICB1c2UgUHlGcmFtZV9HZXRMaW5lTnVtYmVyKCkgaW5zdGVhZC4gKi8KIFB5QVBJX0ZVTkMoaW50KSBQeUNvZGVfQWRkcjJMaW5lKFB5Q29kZU9iamVjdCAqLCBpbnQpOwogCiAvKiBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgKi8KQEAgLTgyLDE1ICs5MiwxMSBAQAogICAgICAgICBpbnQgYXBfdXBwZXI7CiB9IFB5QWRkclBhaXI7CiAKLS8qIENoZWNrIHdoZXRoZXIgbGFzdGkgKGFuIGluc3RydWN0aW9uIG9mZnNldCkgZmFsbHMgb3V0c2lkZSBib3VuZHMKLSAgIGFuZCB3aGV0aGVyIGl0IGlzIGEgbGluZSBudW1iZXIgdGhhdCBzaG91bGQgYmUgdHJhY2VkLiAgUmV0dXJucwotICAgYSBsaW5lIG51bWJlciBpZiBpdCBzaG91bGQgYmUgdHJhY2VkIG9yIC0xIGlmIHRoZSBsaW5lIHNob3VsZCBub3QuCi0KLSAgIElmIGxhc3RpIGlzIG5vdCB3aXRoaW4gYm91bmRzLCB1cGRhdGVzIGJvdW5kcy4KKy8qIFVwZGF0ZSAqYm91bmRzIHRvIGRlc2NyaWJlIHRoZSBmaXJzdCBhbmQgb25lLXBhc3QtdGhlLWxhc3QgaW5zdHJ1Y3Rpb25zIGluIHRoZQorICAgc2FtZSBsaW5lIGFzIGxhc3RpLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhhdCBsaW5lLgogKi8KLQotUHlBUElfRlVOQyhpbnQpIFB5Q29kZV9DaGVja0xpbmVOdW1iZXIoUHlDb2RlT2JqZWN0KiBjbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYXN0aSwgUHlBZGRyUGFpciAqYm91bmRzKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlDb2RlX0NoZWNrTGluZU51bWJlcihQeUNvZGVPYmplY3QqIGNvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYXN0aSwgUHlBZGRyUGFpciAqYm91bmRzKTsKIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5Q29kZV9PcHRpbWl6ZShQeU9iamVjdCAqY29kZSwgUHlPYmplY3QqIGNvbnN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWVzLCBQeU9iamVjdCAqbGluZW5vX29iaik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2NvZGVjcy5oIGIvSW5jbHVkZS9jb2RlY3MuaAppbmRleCAwZDc2MjQxLi5jMDM4YzZhIDEwMDY0NAotLS0gYS9JbmNsdWRlL2NvZGVjcy5oCisrKyBiL0luY2x1ZGUvY29kZWNzLmgKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiAvKiBVbmljb2RlIGVuY29kaW5nIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIHJlZ2lzdHJ5IEFQSSAqLwogCi0vKiBSZWdpc3RlciB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gZXJyb3IgdW5kZXIgdGhlIG5hbWUKKy8qIFJlZ2lzdGVyIHRoZSBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBmdW5jdGlvbiBlcnJvciB1bmRlciB0aGUgZ2l2ZW4KICAgIG5hbWUuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGNvZGVjIHdoZW4gaXQgZW5jb3VudGVycwogICAgdW5lbmNvZGFibGUgY2hhcmFjdGVycy91bmRlY29kYWJsZSBieXRlcyBhbmQgZG9lc24ndCBrbm93IHRoZQogICAgY2FsbGJhY2sgbmFtZSwgd2hlbiBuYW1lIGlzIHNwZWNpZmllZCBhcyB0aGUgZXJyb3IgcGFyYW1ldGVyCkBAIC0xNDEsOCArMTQxLDggQEAKICAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yICovCiBQeUFQSV9GVU5DKGludCkgUHlDb2RlY19SZWdpc3RlckVycm9yKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICplcnJvcik7CiAKLS8qIExvb2t1cCB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUKLSAgIG5hbWUgZXJyb3IuIEFzIGEgc3BlY2lhbCBjYXNlIE5VTEwgY2FuIGJlIHBhc3NlZCwgaW4gd2hpY2ggY2FzZQorLyogTG9va3VwIHRoZSBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkIHVuZGVyIHRoZSBnaXZlbgorICAgbmFtZS4gQXMgYSBzcGVjaWFsIGNhc2UgTlVMTCBjYW4gYmUgcGFzc2VkLCBpbiB3aGljaCBjYXNlCiAgICB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZm9yICJzdHJpY3QiIHdpbGwgYmUgcmV0dXJuZWQuICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5Q29kZWNfTG9va3VwRXJyb3IoY29uc3QgY2hhciAqbmFtZSk7CiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogLyogaWdub3JlIHRoZSB1bmljb2RlIGVycm9yLCBza2lwcGluZyB0aGUgZmF1bHR5IGlucHV0ICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5Q29kZWNfSWdub3JlRXJyb3JzKFB5T2JqZWN0ICpleGMpOwogCi0vKiByZXBsYWNlIHRoZSB1bmljb2RlIGVycm9yIHdpdGggPyBvciBVK0ZGRkQgKi8KKy8qIHJlcGxhY2UgdGhlIHVuaWNvZGUgZW5jb2RlIGVycm9yIHdpdGggPyBvciBVK0ZGRkQgKi8KIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlDb2RlY19SZXBsYWNlRXJyb3JzKFB5T2JqZWN0ICpleGMpOwogCiAvKiByZXBsYWNlIHRoZSB1bmljb2RlIGVuY29kZSBlcnJvciB3aXRoIFhNTCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb21waWxlLmggYi9JbmNsdWRlL2NvbXBpbGUuaAppbmRleCA0M2E0NzBkLi42MTAwMTAxIDEwMDY0NAotLS0gYS9JbmNsdWRlL2NvbXBpbGUuaAorKysgYi9JbmNsdWRlL2NvbXBpbGUuaApAQCAtMzMsOCArMzMsNiBAQAogCQkJCQlQeUNvbXBpbGVyRmxhZ3MgKiwgUHlBcmVuYSAqKTsKIFB5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKHN0cnVjdCBfbW9kICosIGNvbnN0IGNoYXIgKik7CiAKLSNkZWZpbmUgRVJSX0xBVEVfRlVUVVJFIFwKLSJmcm9tIF9fZnV0dXJlX18gaW1wb3J0cyBtdXN0IG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUiCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb21wbGV4b2JqZWN0LmggYi9JbmNsdWRlL2NvbXBsZXhvYmplY3QuaAppbmRleCA4NGI2ZDhiLi5jOWE5NTAwIDEwMDY0NAotLS0gYS9JbmNsdWRlL2NvbXBsZXhvYmplY3QuaAorKysgYi9JbmNsdWRlL2NvbXBsZXhvYmplY3QuaApAQCAtNTQsNiArNTQsMTIgQEAKIFB5QVBJX0ZVTkMoZG91YmxlKSBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlKFB5T2JqZWN0ICpvcCk7CiBQeUFQSV9GVU5DKFB5X2NvbXBsZXgpIFB5Q29tcGxleF9Bc0NDb21wbGV4KFB5T2JqZWN0ICpvcCk7CiAKKy8qIEZvcm1hdCB0aGUgb2JqZWN0IGJhc2VkIG9uIHRoZSBmb3JtYXRfc3BlYywgYXMgZGVmaW5lZCBpbiBQRVAgMzEwMQorICAgKEFkdmFuY2VkIFN0cmluZyBGb3JtYXR0aW5nKS4gKi8KK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5Q29tcGxleF9Gb3JtYXRBZHZhbmNlZChQeU9iamVjdCAqb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdF9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZm9ybWF0X3NwZWNfbGVuKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZGF0ZXRpbWUuaCBiL0luY2x1ZGUvZGF0ZXRpbWUuaAppbmRleCAyODMxOGVhLi40N2FiZTVjIDEwMDY0NAotLS0gYS9JbmNsdWRlL2RhdGV0aW1lLmgKKysrIGIvSW5jbHVkZS9kYXRldGltZS5oCkBAIC0xNTgsNiArMTU4LDggQEAKIAogfSBQeURhdGVUaW1lX0NBUEk7CiAKKyNkZWZpbmUgUHlEYXRlVGltZV9DQVBTVUxFX05BTUUgImRhdGV0aW1lLmRhdGV0aW1lX0NBUEkiCisKIAogLyogIm1hZ2ljIiBjb25zdGFudCB1c2VkIHRvIHBhcnRpYWxseSBwcm90ZWN0IGFnYWluc3QgZGV2ZWxvcGVyIG1pc3Rha2VzLiAqLwogI2RlZmluZSBEQVRFVElNRV9BUElfTUFHSUMgMHg0MTQ1NDhkNQpAQCAtMTgzLDE4ICsxODUsMTAgQEAKICNlbHNlCiAKIC8qIERlZmluZSBnbG9iYWwgdmFyaWFibGUgZm9yIHRoZSBDIEFQSSBhbmQgYSBtYWNybyBmb3Igc2V0dGluZyBpdC4gKi8KLXN0YXRpYyBQeURhdGVUaW1lX0NBUEkgKlB5RGF0ZVRpbWVBUEk7CitzdGF0aWMgUHlEYXRlVGltZV9DQVBJICpQeURhdGVUaW1lQVBJID0gTlVMTDsKIAogI2RlZmluZSBQeURhdGVUaW1lX0lNUE9SVCBcCi0gICAgUHlEYXRlVGltZUFQSSA9IChQeURhdGVUaW1lX0NBUEkqKSBQeUNPYmplY3RfSW1wb3J0KCJkYXRldGltZSIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGV0aW1lX0NBUEkiKQotCi0vKiBUaGlzIG1hY3JvIHdvdWxkIGJlIHVzZWQgaWYgUHlDT2JqZWN0X0ltcG9ydEV4KCkgd2FzIGNyZWF0ZWQuCi0jZGVmaW5lIFB5RGF0ZVRpbWVfSU1QT1JUIFwKLSAgICBQeURhdGVUaW1lQVBJID0gKFB5RGF0ZVRpbWVfQ0FQSSopIFB5Q09iamVjdF9JbXBvcnRFeCgiZGF0ZXRpbWUiLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRldGltZV9DQVBJIiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRFVElNRV9BUElfTUFHSUMpCi0qLworICAgIFB5RGF0ZVRpbWVBUEkgPSAoUHlEYXRlVGltZV9DQVBJICopUHlDYXBzdWxlX0ltcG9ydChQeURhdGVUaW1lX0NBUFNVTEVfTkFNRSwgMCkKIAogLyogTWFjcm9zIGZvciB0eXBlIGNoZWNraW5nIHdoZW4gbm90IGJ1aWxkaW5nIHRoZSBQeXRob24gY29yZS4gKi8KICNkZWZpbmUgUHlEYXRlX0NoZWNrKG9wKSBQeU9iamVjdF9UeXBlQ2hlY2sob3AsIFB5RGF0ZVRpbWVBUEktPkRhdGVUeXBlKQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9kaWN0b2JqZWN0LmggYi9JbmNsdWRlL2RpY3RvYmplY3QuaAppbmRleCBiMDQ2ZmM3Li5lY2UwMWM2IDEwMDY0NAotLS0gYS9JbmNsdWRlL2RpY3RvYmplY3QuaAorKysgYi9JbmNsdWRlL2RpY3RvYmplY3QuaApAQCAtODksMTAgKzg5LDIyIEBACiB9OwogCiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlEaWN0X1R5cGU7CitQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlEaWN0SXRlcktleV9UeXBlOworUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RGljdEl0ZXJWYWx1ZV9UeXBlOworUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RGljdEl0ZXJJdGVtX1R5cGU7CitQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlEaWN0S2V5c19UeXBlOworUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RGljdEl0ZW1zX1R5cGU7CitQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlEaWN0VmFsdWVzX1R5cGU7CiAKICNkZWZpbmUgUHlEaWN0X0NoZWNrKG9wKSBcCiAgICAgICAgICAgICAgICAgIFB5VHlwZV9GYXN0U3ViY2xhc3MoUHlfVFlQRShvcCksIFB5X1RQRkxBR1NfRElDVF9TVUJDTEFTUykKICNkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3Qob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlEaWN0X1R5cGUpCisjZGVmaW5lIFB5RGljdEtleXNfQ2hlY2sob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlEaWN0S2V5c19UeXBlKQorI2RlZmluZSBQeURpY3RJdGVtc19DaGVjayhvcCkgKFB5X1RZUEUob3ApID09ICZQeURpY3RJdGVtc19UeXBlKQorI2RlZmluZSBQeURpY3RWYWx1ZXNfQ2hlY2sob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlEaWN0VmFsdWVzX1R5cGUpCisvKiBUaGlzIGV4Y2x1ZGVzIFZhbHVlcywgc2luY2UgdGhleSBhcmUgbm90IHNldHMuICovCisjIGRlZmluZSBQeURpY3RWaWV3U2V0X0NoZWNrKG9wKSBcCisgICAgKFB5RGljdEtleXNfQ2hlY2sob3ApIHx8IFB5RGljdEl0ZW1zX0NoZWNrKG9wKSkKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfTmV3KHZvaWQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfR2V0SXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwpAQCAtMTExLDYgKzEyMyw3IEBACiBQeUFQSV9GVU5DKGludCkgUHlEaWN0X0NvbnRhaW5zKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSk7CiBQeUFQSV9GVU5DKGludCkgX1B5RGljdF9Db250YWlucyhQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIGxvbmcgaGFzaCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeURpY3RfTmV3UHJlc2l6ZWQoUHlfc3NpemVfdCBtaW51c2VkKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9NYXliZVVudHJhY2soUHlPYmplY3QgKm1wKTsKIAogLyogUHlEaWN0X1VwZGF0ZShtcCwgb3RoZXIpIGlzIGVxdWl2YWxlbnQgdG8gUHlEaWN0X01lcmdlKG1wLCBvdGhlciwgMSkuICovCiBQeUFQSV9GVU5DKGludCkgUHlEaWN0X1VwZGF0ZShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICpvdGhlcik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2R0b2EuaCBiL0luY2x1ZGUvZHRvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNDM0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9JbmNsdWRlL2R0b2EuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworUHlBUElfRlVOQyhkb3VibGUpIF9QeV9kZ19zdHJ0b2QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcHRyKTsKK1B5QVBJX0ZVTkMoY2hhciAqKSBfUHlfZGdfZHRvYShkb3VibGUgZCwgaW50IG1vZGUsIGludCBuZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkZWNwdCwgaW50ICpzaWduLCBjaGFyICoqcnZlKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5X2RnX2ZyZWVkdG9hKGNoYXIgKnMpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZmlsZW9iamVjdC5oIGIvSW5jbHVkZS9maWxlb2JqZWN0LmgKaW5kZXggYzIzMzRiMi4uYmE1MDZlYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9maWxlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9maWxlb2JqZWN0LmgKQEAgLTcwLDYgKzcwLDIwIEBACiAqLwogaW50IF9QeUZpbGVfU2FuaXRpemVNb2RlKGNoYXIgKm1vZGUpOwogCisjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBfTVNDX1ZFUiA+PSAxNDAwCisvKiBBIHJvdXRpbmUgdG8gY2hlY2sgaWYgYSBmaWxlIGRlc2NyaXB0b3IgaXMgdmFsaWQgb24gV2luZG93cy4gIFJldHVybnMgMAorICogYW5kIHNldHMgZXJybm8gdG8gRUJBREYgaWYgaXQgaXNuJ3QuICBUaGlzIGlzIHRvIGF2b2lkIEFzc2VydGlvbnMKKyAqIGZyb20gdmFyaW91cyBmdW5jdGlvbnMgaW4gdGhlIFdpbmRvd3MgQ1JUIGJlZ2lubmluZyB3aXRoCisgKiBWaXN1YWwgU3R1ZGlvIDIwMDUKKyAqLworaW50IF9QeVZlcmlmeV9mZChpbnQgZmQpOworI2VsaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBfTVNDX1ZFUiA+PSAxMjAwCisvKiBmZG9wZW4gZG9lc24ndCBzZXQgZXJybm8gRUJBREYgYW5kIGNyYXNoZXMgZm9yIGxhcmdlIGZkIG9uIGRlYnVnIGJ1aWxkICovCisjZGVmaW5lIF9QeVZlcmlmeV9mZChmZCkgKF9nZXRfb3NmaGFuZGxlKGZkKSA+PSAwKQorI2Vsc2UKKyNkZWZpbmUgX1B5VmVyaWZ5X2ZkKEEpICgxKSAvKiBkdW1teSAqLworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2Zsb2F0b2JqZWN0LmggYi9JbmNsdWRlL2Zsb2F0b2JqZWN0LmgKaW5kZXggNjBlZGU0MC4uNTRlODgyNSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9mbG9hdG9iamVjdC5oCisrKyBiL0luY2x1ZGUvZmxvYXRvYmplY3QuaApAQCAtMjEsNiArMjEsMTIgQEAKICNkZWZpbmUgUHlGbG9hdF9DaGVjayhvcCkgUHlPYmplY3RfVHlwZUNoZWNrKG9wLCAmUHlGbG9hdF9UeXBlKQogI2RlZmluZSBQeUZsb2F0X0NoZWNrRXhhY3Qob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlGbG9hdF9UeXBlKQogCisvKiBUaGUgc3RyKCkgcHJlY2lzaW9uIFB5RmxvYXRfU1RSX1BSRUNJU0lPTiBpcyBjaG9zZW4gc28gdGhhdCBpbiBtb3N0IGNhc2VzLAorICAgdGhlIHJvdW5kaW5nIG5vaXNlIGNyZWF0ZWQgYnkgdmFyaW91cyBvcGVyYXRpb25zIGlzIHN1cHByZXNzZWQsIHdoaWxlCisgICBnaXZpbmcgcGxlbnR5IG9mIHByZWNpc2lvbiBmb3IgcHJhY3RpY2FsIHVzZS4gKi8KKworI2RlZmluZSBQeUZsb2F0X1NUUl9QUkVDSVNJT04gMTIKKwogI2lmZGVmIFB5X05BTgogI2RlZmluZSBQeV9SRVRVUk5fTkFOIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoUHlfTkFOKQogI2VuZGlmCkBAIC0xMjEsNiArMTI3LDEzIEBACiAJCQkJCSAgICAgICBjaGFyICpmb3JtYXRfc3BlYywKIAkJCQkJICAgICAgIFB5X3NzaXplX3QgZm9ybWF0X3NwZWNfbGVuKTsKIAorLyogUm91bmQgYSBDIGRvdWJsZSB4IHRvIHRoZSBjbG9zZXN0IG11bHRpcGxlIG9mIDEwKiotbmRpZ2l0cy4gIFJldHVybnMgYQorICAgUHl0aG9uIGZsb2F0IG9uIHN1Y2Nlc3MsIG9yIE5VTEwgKHdpdGggYW4gYXBwcm9wcmlhdGUgZXhjZXB0aW9uIHNldCkgb24KKyAgIGZhaWx1cmUuICBVc2VkIGluIGJ1aWx0aW5fcm91bmQgaW4gYmx0aW5tb2R1bGUuYy4gKi8KK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5X2RvdWJsZV9yb3VuZChkb3VibGUgeCwgaW50IG5kaWdpdHMpOworCisKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZnJhbWVvYmplY3QuaCBiL0luY2x1ZGUvZnJhbWVvYmplY3QuaAppbmRleCAyOTdiNjZkLi4xN2U3Njc5IDEwMDY0NAotLS0gYS9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9mcmFtZW9iamVjdC5oCkBAIC0zOCw4ICszOCwxMSBAQAogCiAgICAgUHlUaHJlYWRTdGF0ZSAqZl90c3RhdGU7CiAgICAgaW50IGZfbGFzdGk7CQkvKiBMYXN0IGluc3RydWN0aW9uIGlmIGNhbGxlZCAqLwotICAgIC8qIEFzIG9mIDIuMyBmX2xpbmVubyBpcyBvbmx5IHZhbGlkIHdoZW4gdHJhY2luZyBpcyBhY3RpdmUgKGkuZS4gd2hlbgotICAgICAgIGZfdHJhY2UgaXMgc2V0KSAtLSBhdCBvdGhlciB0aW1lcyB1c2UgUHlDb2RlX0FkZHIyTGluZSBpbnN0ZWFkLiAqLworICAgIC8qIENhbGwgUHlGcmFtZV9HZXRMaW5lTnVtYmVyKCkgaW5zdGVhZCBvZiByZWFkaW5nIHRoaXMgZmllbGQKKyAgICAgICBkaXJlY3RseS4gIEFzIG9mIDIuMyBmX2xpbmVubyBpcyBvbmx5IHZhbGlkIHdoZW4gdHJhY2luZyBpcworICAgICAgIGFjdGl2ZSAoaS5lLiB3aGVuIGZfdHJhY2UgaXMgc2V0KS4gIEF0IG90aGVyIHRpbWVzIHdlIHVzZQorICAgICAgIFB5Q29kZV9BZGRyMkxpbmUgdG8gY2FsY3VsYXRlIHRoZSBsaW5lIGZyb20gdGhlIGN1cnJlbnQKKyAgICAgICBieXRlY29kZSBpbmRleC4gKi8KICAgICBpbnQgZl9saW5lbm87CQkvKiBDdXJyZW50IGxpbmUgbnVtYmVyICovCiAgICAgaW50IGZfaWJsb2NrOwkJLyogaW5kZXggaW4gZl9ibG9ja3N0YWNrICovCiAgICAgUHlUcnlCbG9jayBmX2Jsb2Nrc3RhY2tbQ09fTUFYQkxPQ0tTXTsgLyogZm9yIHRyeSBhbmQgbG9vcCBibG9ja3MgKi8KQEAgLTc3LDYgKzgwLDkgQEAKIAogUHlBUElfRlVOQyhpbnQpIFB5RnJhbWVfQ2xlYXJGcmVlTGlzdCh2b2lkKTsKIAorLyogUmV0dXJuIHRoZSBsaW5lIG9mIGNvZGUgdGhlIGZyYW1lIGlzIGN1cnJlbnRseSBleGVjdXRpbmcuICovCitQeUFQSV9GVU5DKGludCkgUHlGcmFtZV9HZXRMaW5lTnVtYmVyKFB5RnJhbWVPYmplY3QgKik7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2dyYW1pbml0LmggYi9JbmNsdWRlL2dyYW1pbml0LmgKaW5kZXggMzhiNGRhYy4uNDBkNTMxZSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ncmFtaW5pdC5oCisrKyBiL0luY2x1ZGUvZ3JhbWluaXQuaApAQCAtNDIsNyArNDIsNyBAQAogI2RlZmluZSBmb3Jfc3RtdCAyOTUKICNkZWZpbmUgdHJ5X3N0bXQgMjk2CiAjZGVmaW5lIHdpdGhfc3RtdCAyOTcKLSNkZWZpbmUgd2l0aF92YXIgMjk4CisjZGVmaW5lIHdpdGhfaXRlbSAyOTgKICNkZWZpbmUgZXhjZXB0X2NsYXVzZSAyOTkKICNkZWZpbmUgc3VpdGUgMzAwCiAjZGVmaW5lIHRlc3RsaXN0X3NhZmUgMzAxCkBAIC02NCw3ICs2NCw3IEBACiAjZGVmaW5lIHBvd2VyIDMxNwogI2RlZmluZSBhdG9tIDMxOAogI2RlZmluZSBsaXN0bWFrZXIgMzE5Ci0jZGVmaW5lIHRlc3RsaXN0X2dleHAgMzIwCisjZGVmaW5lIHRlc3RsaXN0X2NvbXAgMzIwCiAjZGVmaW5lIGxhbWJkZWYgMzIxCiAjZGVmaW5lIHRyYWlsZXIgMzIyCiAjZGVmaW5lIHN1YnNjcmlwdGxpc3QgMzIzCkBAIC03MiwxNiArNzIsMTYgQEAKICNkZWZpbmUgc2xpY2VvcCAzMjUKICNkZWZpbmUgZXhwcmxpc3QgMzI2CiAjZGVmaW5lIHRlc3RsaXN0IDMyNwotI2RlZmluZSBkaWN0bWFrZXIgMzI4CisjZGVmaW5lIGRpY3RvcnNldG1ha2VyIDMyOAogI2RlZmluZSBjbGFzc2RlZiAzMjkKICNkZWZpbmUgYXJnbGlzdCAzMzAKICNkZWZpbmUgYXJndW1lbnQgMzMxCiAjZGVmaW5lIGxpc3RfaXRlciAzMzIKICNkZWZpbmUgbGlzdF9mb3IgMzMzCiAjZGVmaW5lIGxpc3RfaWYgMzM0Ci0jZGVmaW5lIGdlbl9pdGVyIDMzNQotI2RlZmluZSBnZW5fZm9yIDMzNgotI2RlZmluZSBnZW5faWYgMzM3CisjZGVmaW5lIGNvbXBfaXRlciAzMzUKKyNkZWZpbmUgY29tcF9mb3IgMzM2CisjZGVmaW5lIGNvbXBfaWYgMzM3CiAjZGVmaW5lIHRlc3RsaXN0MSAzMzgKICNkZWZpbmUgZW5jb2RpbmdfZGVjbCAzMzkKICNkZWZpbmUgeWllbGRfZXhwciAzNDAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvaW1wb3J0LmggYi9JbmNsdWRlL2ltcG9ydC5oCmluZGV4IDc2YWVjZGQuLjFiN2ZlMGEgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvaW1wb3J0LmgKKysrIGIvSW5jbHVkZS9pbXBvcnQuaApAQCAtNTEsNyArNTEsNyBAQAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5TnVsbEltcG9ydGVyX1R5cGU7CiBQeUFQSV9EQVRBKHN0cnVjdCBfaW5pdHRhYiAqKSBQeUltcG9ydF9Jbml0dGFiOwogCi1QeUFQSV9GVU5DKGludCkgUHlJbXBvcnRfQXBwZW5kSW5pdHRhYihjaGFyICpuYW1lLCB2b2lkICgqaW5pdGZ1bmMpKHZvaWQpKTsKK1B5QVBJX0ZVTkMoaW50KSBQeUltcG9ydF9BcHBlbmRJbml0dGFiKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKCppbml0ZnVuYykodm9pZCkpOwogUHlBUElfRlVOQyhpbnQpIFB5SW1wb3J0X0V4dGVuZEluaXR0YWIoc3RydWN0IF9pbml0dGFiICpuZXd0YWIpOwogCiBzdHJ1Y3QgX2Zyb3plbiB7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2xvbmdpbnRyZXByLmggYi9JbmNsdWRlL2xvbmdpbnRyZXByLmgKaW5kZXggZGYxNTdhOC4uNjQyNWMzMCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9sb25naW50cmVwci5oCisrKyBiL0luY2x1ZGUvbG9uZ2ludHJlcHIuaApAQCAtNywyNiArNyw2MSBAQAogCiAvKiBUaGlzIGlzIHB1Ymxpc2hlZCBmb3IgdGhlIGJlbmVmaXQgb2YgImZyaWVuZCIgbWFyc2hhbC5jIG9ubHkuICovCiAKLS8qIFBhcmFtZXRlcnMgb2YgdGhlIGxvbmcgaW50ZWdlciByZXByZXNlbnRhdGlvbi4KLSAgIFRoZXNlIHNob3VsZG4ndCBoYXZlIHRvIGJlIGNoYW5nZWQgYXMgQyBzaG91bGQgZ3VhcmFudGVlIHRoYXQgYSBzaG9ydAotICAgY29udGFpbnMgYXQgbGVhc3QgMTYgYml0cywgYnV0IGl0J3MgbWFkZSBjaGFuZ2VhYmxlIGFueXdheS4KLSAgIE5vdGU6ICdkaWdpdCcgc2hvdWxkIGJlIGFibGUgdG8gaG9sZCAyKk1BU0srMSwgYW5kICd0d29kaWdpdHMnCi0gICBzaG91bGQgYmUgYWJsZSB0byBob2xkIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyBpbiAnbXVsJwotICAgKGF0IG1vc3QgKEJBU0UtMSkqKDIqQkFTRSsxKSA9PSBNQVNLKigyKk1BU0srMykpLgotICAgQWxzbywgeF9zdWIgYXNzdW1lcyB0aGF0ICdkaWdpdCcgaXMgYW4gdW5zaWduZWQgdHlwZSwgYW5kIG92ZXJmbG93Ci0gICBpcyBoYW5kbGVkIGJ5IHRha2luZyB0aGUgcmVzdWx0IG1vZCAyKipOIGZvciBzb21lIE4gPiBTSElGVC4KLSAgIEFuZCwgYXQgc29tZSBwbGFjZXMgaXQgaXMgYXNzdW1lZCB0aGF0IE1BU0sgZml0cyBpbiBhbiBpbnQsIGFzIHdlbGwuCi0gICBsb25nX3BvdygpIHJlcXVpcmVzIHRoYXQgU0hJRlQgYmUgZGl2aXNpYmxlIGJ5IDUuICovCisvKiBQYXJhbWV0ZXJzIG9mIHRoZSBsb25nIGludGVnZXIgcmVwcmVzZW50YXRpb24uICBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudAorICAgc2V0cyBvZiBwYXJhbWV0ZXJzOiBvbmUgc2V0IGZvciAzMC1iaXQgZGlnaXRzLCBzdG9yZWQgaW4gYW4gdW5zaWduZWQgMzItYml0CisgICBpbnRlZ2VyIHR5cGUsIGFuZCBvbmUgc2V0IGZvciAxNS1iaXQgZGlnaXRzIHdpdGggZWFjaCBkaWdpdCBzdG9yZWQgaW4gYW4KKyAgIHVuc2lnbmVkIHNob3J0LiAgVGhlIHZhbHVlIG9mIFBZTE9OR19CSVRTX0lOX0RJR0lULCBkZWZpbmVkIGVpdGhlciBhdAorICAgY29uZmlndXJlIHRpbWUgb3IgaW4gcHlwb3J0LmgsIGlzIHVzZWQgdG8gZGVjaWRlIHdoaWNoIGRpZ2l0IHNpemUgdG8gdXNlLgogCisgICBUeXBlICdkaWdpdCcgc2hvdWxkIGJlIGFibGUgdG8gaG9sZCAyKlB5TG9uZ19CQVNFLTEsIGFuZCB0eXBlICd0d29kaWdpdHMnCisgICBzaG91bGQgYmUgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIGFibGUgdG8gaG9sZCBhbGwgaW50ZWdlcnMgdXAgdG8KKyAgIFB5TG9uZ19CQVNFKlB5TG9uZ19CQVNFLTEuICB4X3N1YiBhc3N1bWVzIHRoYXQgJ2RpZ2l0JyBpcyBhbiB1bnNpZ25lZCB0eXBlLAorICAgYW5kIHRoYXQgb3ZlcmZsb3cgaXMgaGFuZGxlZCBieSB0YWtpbmcgdGhlIHJlc3VsdCBtb2R1bG8gMioqTiBmb3Igc29tZSBOID4KKyAgIFB5TG9uZ19TSElGVC4gIFRoZSBtYWpvcml0eSBvZiB0aGUgY29kZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIHByZWNpc2UKKyAgIHZhbHVlIG9mIFB5TG9uZ19TSElGVCwgYnV0IHRoZXJlIGFyZSBzb21lIG5vdGFibGUgZXhjZXB0aW9uczoKKworICAgLSBsb25nX3BvdygpIHJlcXVpcmVzIHRoYXQgUHlMb25nX1NISUZUIGJlIGRpdmlzaWJsZSBieSA1CisKKyAgIC0gUHlMb25nX3tBcyxGcm9tfUJ5dGVBcnJheSByZXF1aXJlIHRoYXQgUHlMb25nX1NISUZUIGJlIGF0IGxlYXN0IDgKKworICAgLSBsb25nX2hhc2goKSByZXF1aXJlcyB0aGF0IFB5TG9uZ19TSElGVCBpcyAqc3RyaWN0bHkqIGxlc3MgdGhhbiB0aGUgbnVtYmVyCisgICAgIG9mIGJpdHMgaW4gYW4gdW5zaWduZWQgbG9uZywgYXMgZG8gdGhlIFB5TG9uZyA8LT4gbG9uZyAob3IgdW5zaWduZWQgbG9uZykKKyAgICAgY29udmVyc2lvbiBmdW5jdGlvbnMKKworICAgLSB0aGUgbG9uZyA8LT4gc2l6ZV90L1B5X3NzaXplX3QgY29udmVyc2lvbiBmdW5jdGlvbnMgZXhwZWN0IHRoYXQKKyAgICAgUHlMb25nX1NISUZUIGlzIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBzaXplX3QKKworICAgLSB0aGUgbWFyc2hhbCBjb2RlIGN1cnJlbnRseSBleHBlY3RzIHRoYXQgUHlMb25nX1NISUZUIGlzIGEgbXVsdGlwbGUgb2YgMTUKKworICBUaGUgdmFsdWVzIDE1IGFuZCAzMCBzaG91bGQgZml0IGFsbCBvZiB0aGUgYWJvdmUgcmVxdWlyZW1lbnRzLCBvbiBhbnkKKyAgcGxhdGZvcm0uCisqLworCisjaWYgUFlMT05HX0JJVFNfSU5fRElHSVQgPT0gMzAKKyNpZiAhKGRlZmluZWQgSEFWRV9VSU5UNjRfVCAmJiBkZWZpbmVkIEhBVkVfVUlOVDMyX1QgJiYgICAgICAgICAgXAorICAgICAgZGVmaW5lZCBIQVZFX0lOVDY0X1QgJiYgZGVmaW5lZCBIQVZFX0lOVDMyX1QpCisjZXJyb3IgIjMwLWJpdCBsb25nIGRpZ2l0cyByZXF1ZXN0ZWQsIGJ1dCB0aGUgbmVjZXNzYXJ5IHR5cGVzIGFyZSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0iCisjZW5kaWYKK3R5cGVkZWYgUFlfVUlOVDMyX1QgZGlnaXQ7Cit0eXBlZGVmIFBZX0lOVDMyX1Qgc2RpZ2l0OyAvKiBzaWduZWQgdmFyaWFudCBvZiBkaWdpdCAqLwordHlwZWRlZiBQWV9VSU5UNjRfVCB0d29kaWdpdHM7Cit0eXBlZGVmIFBZX0lOVDY0X1Qgc3R3b2RpZ2l0czsgLyogc2lnbmVkIHZhcmlhbnQgb2YgdHdvZGlnaXRzICovCisjZGVmaW5lIFB5TG9uZ19TSElGVAkzMAorI2RlZmluZSBfUHlMb25nX0RFQ0lNQUxfU0hJRlQJOSAvKiBtYXgoZSBzdWNoIHRoYXQgMTAqKmUgZml0cyBpbiBhIGRpZ2l0KSAqLworI2RlZmluZSBfUHlMb25nX0RFQ0lNQUxfQkFTRQkoKGRpZ2l0KTEwMDAwMDAwMDApIC8qIDEwICoqIERFQ0lNQUxfU0hJRlQgKi8KKyNlbGlmIFBZTE9OR19CSVRTX0lOX0RJR0lUID09IDE1CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGRpZ2l0OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2RpZ2l0OyAvKiBkaWdpdCB3aWRlbmVkIHRvIHBhcmFtZXRlciBzaXplICovCi0jZGVmaW5lIEJBU0VfVFdPRElHSVRTX1RZUEUgbG9uZwotdHlwZWRlZiB1bnNpZ25lZCBCQVNFX1RXT0RJR0lUU19UWVBFIHR3b2RpZ2l0czsKLXR5cGVkZWYgQkFTRV9UV09ESUdJVFNfVFlQRSBzdHdvZGlnaXRzOyAvKiBzaWduZWQgdmFyaWFudCBvZiB0d29kaWdpdHMgKi8KLQotI2RlZmluZSBQeUxvbmdfU0hJRlQgICAgMTUKLSNkZWZpbmUgUHlMb25nX0JBU0UgICAgICgoZGlnaXQpMSA8PCBQeUxvbmdfU0hJRlQpCi0jZGVmaW5lIFB5TG9uZ19NQVNLICAgICAoKGludCkoUHlMb25nX0JBU0UgLSAxKSkKK3R5cGVkZWYgc2hvcnQgc2RpZ2l0OyAvKiBzaWduZWQgdmFyaWFudCBvZiBkaWdpdCAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHR3b2RpZ2l0czsKK3R5cGVkZWYgbG9uZyBzdHdvZGlnaXRzOyAvKiBzaWduZWQgdmFyaWFudCBvZiB0d29kaWdpdHMgKi8KKyNkZWZpbmUgUHlMb25nX1NISUZUCTE1CisjZGVmaW5lIF9QeUxvbmdfREVDSU1BTF9TSElGVAk0IC8qIG1heChlIHN1Y2ggdGhhdCAxMCoqZSBmaXRzIGluIGEgZGlnaXQpICovCisjZGVmaW5lIF9QeUxvbmdfREVDSU1BTF9CQVNFCSgoZGlnaXQpMTAwMDApIC8qIDEwICoqIERFQ0lNQUxfU0hJRlQgKi8KKyNlbHNlCisjZXJyb3IgIlBZTE9OR19CSVRTX0lOX0RJR0lUIHNob3VsZCBiZSAxNSBvciAzMCIKKyNlbmRpZgorI2RlZmluZSBQeUxvbmdfQkFTRQkoKGRpZ2l0KTEgPDwgUHlMb25nX1NISUZUKQorI2RlZmluZSBQeUxvbmdfTUFTSwkoKGRpZ2l0KShQeUxvbmdfQkFTRSAtIDEpKQogCiAvKiBiL3cgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjUgKi8KICNkZWZpbmUgU0hJRlQJUHlMb25nX1NISUZUCmRpZmYgLS1naXQgYS9JbmNsdWRlL2xvbmdvYmplY3QuaCBiL0luY2x1ZGUvbG9uZ29iamVjdC5oCmluZGV4IGZhNTExYTcuLjJiNDA0NjEgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbG9uZ29iamVjdC5oCisrKyBiL0luY2x1ZGUvbG9uZ29iamVjdC5oCkBAIC0yMSw5ICsyMSwxMSBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVNpemVfdChzaXplX3QpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVNzaXplX3QoUHlfc3NpemVfdCk7CiBQeUFQSV9GVU5DKGxvbmcpIFB5TG9uZ19Bc0xvbmcoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKGxvbmcpIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqLCBpbnQgKik7CiBQeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkModW5zaWduZWQgbG9uZykgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlMb25nX0FzU3NpemVfdChQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0dldEluZm8odm9pZCk7CiAKIC8qIEZvciB1c2UgYnkgaW50b2JqZWN0LmMgb25seSAqLwogI2RlZmluZSBfUHlMb25nX0FzU3NpemVfdCBQeUxvbmdfQXNTc2l6ZV90CkBAIC0zMSwxMyArMzMsMTMgQEAKICNkZWZpbmUgX1B5TG9uZ19Gcm9tU3NpemVfdCBQeUxvbmdfRnJvbVNzaXplX3QKIFB5QVBJX0RBVEEoaW50KSBfUHlMb25nX0RpZ2l0VmFsdWVbMjU2XTsKIAotLyogX1B5TG9uZ19Bc1NjYWxlZERvdWJsZSByZXR1cm5zIGEgZG91YmxlIHggYW5kIGFuIGV4cG9uZW50IGUgc3VjaCB0aGF0Ci0gICB0aGUgdHJ1ZSB2YWx1ZSBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIHggKiAyKiooU0hJRlQqZSkuICBlIGlzID49IDAuCi0gICB4IGlzIDAuMCBpZiBhbmQgb25seSBpZiB0aGUgaW5wdXQgaXMgMCAoaW4gd2hpY2ggY2FzZSwgZSBhbmQgeCBhcmUgYm90aAotICAgemVyb2VzKS4gIE92ZXJmbG93IGlzIGltcG9zc2libGUuICBOb3RlIHRoYXQgdGhlIGV4cG9uZW50IHJldHVybmVkIG11c3QKLSAgIGJlIG11bHRpcGxpZWQgYnkgU0hJRlQhICBUaGVyZSBtYXkgbm90IGJlIGVub3VnaCByb29tIGluIGFuIGludCB0byBzdG9yZQotICAgZSpTSElGVCBkaXJlY3RseS4gKi8KLVB5QVBJX0ZVTkMoZG91YmxlKSBfUHlMb25nX0FzU2NhbGVkRG91YmxlKFB5T2JqZWN0ICp2diwgaW50ICplKTsKKy8qIF9QeUxvbmdfRnJleHAgcmV0dXJucyBhIGRvdWJsZSB4IGFuZCBhbiBleHBvbmVudCBlIHN1Y2ggdGhhdCB0aGUKKyAgIHRydWUgdmFsdWUgaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byB4ICogMioqZS4gIGUgaXMgPj0gMC4gIHggaXMKKyAgIDAuMCBpZiBhbmQgb25seSBpZiB0aGUgaW5wdXQgaXMgMCAoaW4gd2hpY2ggY2FzZSwgZSBhbmQgeCBhcmUgYm90aAorICAgemVyb2VzKTsgb3RoZXJ3aXNlLCAwLjUgPD0gYWJzKHgpIDwgMS4wLiAgT24gb3ZlcmZsb3csIHdoaWNoIGlzCisgICBwb3NzaWJsZSBpZiB0aGUgbnVtYmVyIG9mIGJpdHMgZG9lc24ndCBmaXQgaW50byBhIFB5X3NzaXplX3QsIHNldHMKKyAgIE92ZXJmbG93RXJyb3IgYW5kIHJldHVybnMgLTEuMCBmb3IgeCwgMCBmb3IgZS4gKi8KK1B5QVBJX0ZVTkMoZG91YmxlKSBfUHlMb25nX0ZyZXhwKFB5TG9uZ09iamVjdCAqYSwgUHlfc3NpemVfdCAqZSk7CiAKIFB5QVBJX0ZVTkMoZG91YmxlKSBQeUxvbmdfQXNEb3VibGUoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tVm9pZFB0cih2b2lkICopOwpAQCAtNDksNiArNTEsNyBAQAogUHlBUElfRlVOQyhQWV9MT05HX0xPTkcpIFB5TG9uZ19Bc0xvbmdMb25nKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2soUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFBZX0xPTkdfTE9ORykgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqLCBpbnQgKik7CiAjZW5kaWYgLyogSEFWRV9MT05HX0xPTkcgKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVN0cmluZyhjaGFyICosIGNoYXIgKiosIGludCk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL21lbW9yeW9iamVjdC5oIGIvSW5jbHVkZS9tZW1vcnlvYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjBiNjIxCi0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9tZW1vcnlvYmplY3QuaApAQCAtMCwwICsxLDc0IEBACisvKiBNZW1vcnkgdmlldyBvYmplY3QuIEluIFB5dGhvbiB0aGlzIGlzIGF2YWlsYWJsZSBhcyAibWVtb3J5dmlldyIuICovCisKKyNpZm5kZWYgUHlfTUVNT1JZT0JKRUNUX0gKKyNkZWZpbmUgUHlfTUVNT1JZT0JKRUNUX0gKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5TWVtb3J5Vmlld19UeXBlOworCisjZGVmaW5lIFB5TWVtb3J5Vmlld19DaGVjayhvcCkgKFB5X1RZUEUob3ApID09ICZQeU1lbW9yeVZpZXdfVHlwZSkKKworLyogR2V0IGEgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBQeV9idWZmZXIgb2YgYSBtZW1vcnl2aWV3IG9iamVjdC4gKi8KKyNkZWZpbmUgUHlNZW1vcnlWaWV3X0dFVF9CVUZGRVIob3ApICgmKChQeU1lbW9yeVZpZXdPYmplY3QgKikob3ApKS0+dmlldykKKy8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIFB5T2JqZWN0IGZyb20gd2hpY2ggb3JpZ2luYXRlcyBhIG1lbW9yeXZpZXcgb2JqZWN0LiAqLworI2RlZmluZSBQeU1lbW9yeVZpZXdfR0VUX0JBU0Uob3ApICgoKFB5TWVtb3J5Vmlld09iamVjdCAqKShvcCkpLT52aWV3Lm9iaikKKworCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzKFB5T2JqZWN0ICpiYXNlLCAKKwkJCQkJCSAgaW50IGJ1ZmZlcnR5cGUsIAorCQkJCQkJICBjaGFyIGZvcnQpOworCisgICAgLyogUmV0dXJuIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgcmVwcmVzZW50aW5nIHRoZSBidWZmZXIKKyAgICAgICBmcm9tIGFuIG9iamVjdCBpbiBhIG1lbW9yeSB2aWV3IG9iamVjdC4gIElmIGEgY29weSBpcyBtYWRlIHRoZW4gdGhlCisgICAgICAgYmFzZSBvYmplY3QgZm9yIHRoZSBtZW1vcnkgdmlldyB3aWxsIGJlIGEgKm5ldyogYnl0ZXMgb2JqZWN0LiAKKyAgICAgICAKKyAgICAgICBPdGhlcndpc2UsIHRoZSBiYXNlLW9iamVjdCB3aWxsIGJlIHRoZSBvYmplY3QgaXRzZWxmIGFuZCBubyAKKyAgICAgICBkYXRhLWNvcHlpbmcgd2lsbCBiZSBkb25lLiAKKworICAgICAgIFRoZSBidWZmZXJ0eXBlIGFyZ3VtZW50IGNhbiBiZSBQeUJVRl9SRUFELCBQeUJVRl9XUklURSwKKyAgICAgICBQeUJVRl9TSEFET1cgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHJldHVybmVkIGJ1ZmZlcgorICAgICAgIHNob3VsZCBiZSBSRUFET05MWSwgV1JJVEFCTEUsIG9yIHNldCB0byB1cGRhdGUgdGhlCisgICAgICAgb3JpZ2luYWwgYnVmZmVyIGlmIGEgY29weSBtdXN0IGJlIG1hZGUuICBJZiBidWZmZXJ0eXBlIGlzCisgICAgICAgUHlCVUZfV1JJVEUgYW5kIHRoZSBidWZmZXIgaXMgbm90IGNvbnRpZ3VvdXMgYW4gZXJyb3Igd2lsbAorICAgICAgIGJlIHJhaXNlZC4gIEluIHRoaXMgY2lyY3Vtc3RhbmNlLCB0aGUgdXNlciBjYW4gdXNlCisgICAgICAgUHlCVUZfU0hBRE9XIHRvIGVuc3VyZSB0aGF0IGEgYSB3cml0YWJsZSB0ZW1wb3JhcnkKKyAgICAgICBjb250aWd1b3VzIGJ1ZmZlciBpcyByZXR1cm5lZC4gIFRoZSBjb250ZW50cyBvZiB0aGlzCisgICAgICAgY29udGlndW91cyBidWZmZXIgd2lsbCBiZSBjb3BpZWQgYmFjayBpbnRvIHRoZSBvcmlnaW5hbAorICAgICAgIG9iamVjdCBhZnRlciB0aGUgbWVtb3J5dmlldyBvYmplY3QgaXMgZGVsZXRlZCBhcyBsb25nIGFzCisgICAgICAgdGhlIG9yaWdpbmFsIG9iamVjdCBpcyB3cml0YWJsZSBhbmQgYWxsb3dzIHNldHRpbmcgYW4KKyAgICAgICBleGNsdXNpdmUgd3JpdGUgbG9jay4gSWYgdGhpcyBpcyBub3QgYWxsb3dlZCBieSB0aGUKKyAgICAgICBvcmlnaW5hbCBvYmplY3QsIHRoZW4gYSBCdWZmZXJFcnJvciBpcyByYWlzZWQuCisgICAgICAgCisgICAgICAgSWYgdGhlIG9iamVjdCBpcyBtdWx0aS1kaW1lbnNpb25hbCBhbmQgaWYgZm9ydHJhbiBpcyAnRicsCisgICAgICAgdGhlIGZpcnN0IGRpbWVuc2lvbiBvZiB0aGUgdW5kZXJseWluZyBhcnJheSB3aWxsIHZhcnkgdGhlCisgICAgICAgZmFzdGVzdCBpbiB0aGUgYnVmZmVyLiAgSWYgZm9ydHJhbiBpcyAnQycsIHRoZW4gdGhlIGxhc3QKKyAgICAgICBkaW1lbnNpb24gd2lsbCB2YXJ5IHRoZSBmYXN0ZXN0IChDLXN0eWxlIGNvbnRpZ3VvdXMpLiAgSWYKKyAgICAgICBmb3J0cmFuIGlzICdBJywgdGhlbiBpdCBkb2VzIG5vdCBtYXR0ZXIgYW5kIHlvdSB3aWxsIGdldAorICAgICAgIHdoYXRldmVyIHRoZSBvYmplY3QgZGVjaWRlcyBpcyBtb3JlIGVmZmljaWVudC4gIAorCisgICAgICAgQSBuZXcgcmVmZXJlbmNlIGlzIHJldHVybmVkIHRoYXQgbXVzdCBiZSBERUNSRUYnZCB3aGVuIGZpbmlzaGVkLgorICAgICovCisKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QoUHlPYmplY3QgKmJhc2UpOworCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKFB5X2J1ZmZlciAqaW5mbyk7CisgICAgLyogY3JlYXRlIG5ldyBpZiBidWZwdHIgaXMgTlVMTCAKKyAgICAgICAgd2lsbCBiZSBhIG5ldyBieXRlc29iamVjdCBpbiBiYXNlICovCisKKworLyogVGhlIHN0cnVjdCBpcyBkZWNsYXJlZCBoZXJlIHNvIHRoYXQgbWFjcm9zIGNhbiB3b3JrLCBidXQgaXQgc2hvdWxkbid0CisgICBiZSBjb25zaWRlcmVkIHB1YmxpYy4gRG9uJ3QgYWNjZXNzIHRob3NlIGZpZWxkcyBkaXJlY3RseSwgdXNlIHRoZSBtYWNyb3MKKyAgIGFuZCBmdW5jdGlvbnMgaW5zdGVhZCEgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKmJhc2U7CisgICAgUHlfYnVmZmVyIHZpZXc7Cit9IFB5TWVtb3J5Vmlld09iamVjdDsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qICFQeV9NRU1PUllPQkpFQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vYmplY3QuaCBiL0luY2x1ZGUvb2JqZWN0LmgKaW5kZXggMWJiNGQ3OC4uYjM2ODk0NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vYmplY3QuaAorKysgYi9JbmNsdWRlL29iamVjdC5oCkBAIC0xNTksMTEgKzE1OSwxMSBAQAogdHlwZWRlZiBQeV9zc2l6ZV90ICgqc2VnY291bnRwcm9jKShQeU9iamVjdCAqLCBQeV9zc2l6ZV90ICopOwogdHlwZWRlZiBQeV9zc2l6ZV90ICgqY2hhcmJ1ZmZlcnByb2MpKFB5T2JqZWN0ICosIFB5X3NzaXplX3QsIGNoYXIgKiopOwogCi0vKiBQeTNrIGJ1ZmZlciBpbnRlcmZhY2UgKi8KIAorLyogUHkzayBidWZmZXIgaW50ZXJmYWNlICovCiB0eXBlZGVmIHN0cnVjdCBidWZmZXJpbmZvIHsKICAgICB2b2lkICpidWY7Ci0gICAgUHlPYmplY3QgKm9iajsgICAgICAgIC8qIGJvcnJvd2VkIHJlZmVyZW5jZSAqLworICAgIFB5T2JqZWN0ICpvYmo7ICAgICAgICAvKiBvd25lZCByZWZlcmVuY2UgKi8KICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBQeV9zc2l6ZV90IGl0ZW1zaXplOyAgLyogVGhpcyBpcyBQeV9zc2l6ZV90IHNvIGl0IGNhbiBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVkIHRvIGJ5IHN0cmlkZXMgaW4gc2ltcGxlIGNhc2UuKi8KQEAgLTE3Myw2ICsxNzMsOCBAQAogICAgIFB5X3NzaXplX3QgKnNoYXBlOwogICAgIFB5X3NzaXplX3QgKnN0cmlkZXM7CiAgICAgUHlfc3NpemVfdCAqc3Vib2Zmc2V0czsKKyAgICBQeV9zc2l6ZV90IHNtYWxsdGFibGVbMl07ICAvKiBzdGF0aWMgc3RvcmUgZm9yIHNoYXBlIGFuZCBzdHJpZGVzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uby1kaW1lbnNpb25hbCBidWZmZXJzLiAqLwogICAgIHZvaWQgKmludGVybmFsOwogfSBQeV9idWZmZXI7CiAKQEAgLTQ0OSw2ICs0NTEsNyBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVR5cGVfR2VuZXJpY05ldyhQeVR5cGVPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVR5cGVfTG9va3VwKFB5VHlwZU9iamVjdCAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwoUHlPYmplY3QgKiwgY2hhciAqLCBQeU9iamVjdCAqKik7CiBQeUFQSV9GVU5DKHVuc2lnbmVkIGludCkgUHlUeXBlX0NsZWFyQ2FjaGUodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5VHlwZV9Nb2RpZmllZChQeVR5cGVPYmplY3QgKik7CiAKQEAgLTQ3Myw2ICs0NzYsNyBAQAogUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X0hhc0F0dHIoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICoqKSBfUHlPYmplY3RfR2V0RGljdFB0cihQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfU2VsZkl0ZXIoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9OZXh0Tm90SW1wbGVtZW50ZWQoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyKFB5T2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CkBAIC00ODgsNiArNDkyLDEzIEBACiAKIC8qIEEgc2xvdCBmdW5jdGlvbiB3aG9zZSBhZGRyZXNzIHdlIG5lZWQgdG8gY29tcGFyZSAqLwogZXh0ZXJuIGludCBfUHlPYmplY3RfU2xvdENvbXBhcmUoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisvKiBTYW1lIGFzIFB5T2JqZWN0X0dlbmVyaWN7R2V0LFNldH1BdHRyLCBidXQgcGFzc2luZyB0aGUgYXR0cmlidXRlcworICAgZGljdCBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuICovCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopCitfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJXaXRoRGljdChQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoaW50KQorX1B5T2JqZWN0X0dlbmVyaWNTZXRBdHRyV2l0aERpY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogCiAKIC8qIFB5T2JqZWN0X0RpcihvYmopIGFjdHMgbGlrZSBQeXRob24gX19idWlsdGluX18uZGlyKG9iaiksIHJldHVybmluZyBhCkBAIC03NDYsMTEgKzc1NywxMyBAQAogICAgICgoUHlPYmplY3QqKShvcCkpLT5vYl9yZWZjbnQrKykKIAogI2RlZmluZSBQeV9ERUNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKF9QeV9ERUNfUkVGVE9UQUwgIF9QeV9SRUZfREVCVUdfQ09NTUEgICAgICAgICAgIFwKLSAgICAgICAgLS0oKFB5T2JqZWN0Kikob3ApKS0+b2JfcmVmY250ICE9IDApICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9QeV9DSEVDS19SRUZDTlQob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfUHlfRGVhbGxvYygoUHlPYmplY3QgKikob3ApKQorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfUHlfREVDX1JFRlRPVEFMICBfUHlfUkVGX0RFQlVHX0NPTU1BICAgICAgIFwKKyAgICAgICAgLS0oKFB5T2JqZWN0Kikob3ApKS0+b2JfcmVmY250ICE9IDApICAgICAgICAgICAgXAorICAgICAgICAgICAgX1B5X0NIRUNLX1JFRkNOVChvcCkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX1B5X0RlYWxsb2MoKFB5T2JqZWN0ICopKG9wKSk7ICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKIC8qIFNhZmVseSBkZWNyZWYgYG9wYCBhbmQgc2V0IGBvcGAgdG8gTlVMTCwgZXNwZWNpYWxseSB1c2VmdWwgaW4gdHBfY2xlYXIKICAqIGFuZCB0cF9kZWFsbG9jIGltcGxlbWVudGF0b25zLgpAQCAtNzk2LDggKzgwOSw4IEBACiAgICAgfSB3aGlsZSAoMCkKIAogLyogTWFjcm9zIHRvIHVzZSBpbiBjYXNlIHRoZSBvYmplY3QgcG9pbnRlciBtYXkgYmUgTlVMTDogKi8KLSNkZWZpbmUgUHlfWElOQ1JFRihvcCkgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0lOQ1JFRihvcCkKLSNkZWZpbmUgUHlfWERFQ1JFRihvcCkgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0RFQ1JFRihvcCkKKyNkZWZpbmUgUHlfWElOQ1JFRihvcCkgZG8geyBpZiAoKG9wKSA9PSBOVUxMKSA7IGVsc2UgUHlfSU5DUkVGKG9wKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUHlfWERFQ1JFRihvcCkgZG8geyBpZiAoKG9wKSA9PSBOVUxMKSA7IGVsc2UgUHlfREVDUkVGKG9wKTsgfSB3aGlsZSAoMCkKIAogLyoKIFRoZXNlIGFyZSBwcm92aWRlZCBhcyBjb252ZW5pZW5jZXMgdG8gUHl0aG9uIHJ1bnRpbWUgZW1iZWRkZXJzLCBzbyB0aGF0CmRpZmYgLS1naXQgYS9JbmNsdWRlL29iamltcGwuaCBiL0luY2x1ZGUvb2JqaW1wbC5oCmluZGV4IDE5YmViNzYuLjU1ZTgzZWMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb2JqaW1wbC5oCisrKyBiL0luY2x1ZGUvb2JqaW1wbC5oCkBAIC0xMDgsNiArMTA4LDEzIEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0R1bXBBZGRyZXNzKGNvbnN0IHZvaWQgKnApOwogUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3MoY29uc3Qgdm9pZCAqcCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z01hbGxvY1N0YXRzKHZvaWQpOworUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGFwaSwgc2l6ZV90IG5ieXRlcyk7CitQeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApOworUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApOworUHlBUElfRlVOQyh2b2lkICopIF9QeU1lbV9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOworUHlBUElfRlVOQyh2b2lkKSBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApOwogI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBfUHlPYmplY3RfRGVidWdNYWxsb2MKICNkZWZpbmUgUHlPYmplY3RfTWFsbG9jICAgICAgICAgX1B5T2JqZWN0X0RlYnVnTWFsbG9jCiAjZGVmaW5lIFB5T2JqZWN0X1JFQUxMT0MgICAgICAgIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2MKQEAgLTI4NSw2ICsyOTIsMTcgQEAKICAgICBnLT5nYy5nY19uZXh0ID0gTlVMTDsgXAogICAgIH0gd2hpbGUgKDApOwogCisvKiBUcnVlIGlmIHRoZSBvYmplY3QgaXMgY3VycmVudGx5IHRyYWNrZWQgYnkgdGhlIEdDLiAqLworI2RlZmluZSBfUHlPYmplY3RfR0NfSVNfVFJBQ0tFRChvKSBcCisgICAgKChfUHlfQVNfR0MobykpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKQorCisvKiBUcnVlIGlmIHRoZSBvYmplY3QgbWF5IGJlIHRyYWNrZWQgYnkgdGhlIEdDIGluIHRoZSBmdXR1cmUsIG9yIGFscmVhZHkgaXMuCisgICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gaW1wbGVtZW50IHNvbWUgb3B0aW1pemF0aW9ucy4gKi8KKyNkZWZpbmUgX1B5T2JqZWN0X0dDX01BWV9CRV9UUkFDS0VEKG9iaikgXAorICAgIChQeU9iamVjdF9JU19HQyhvYmopICYmIFwKKyAgICAgICAgKCFQeVR1cGxlX0NoZWNrRXhhY3Qob2JqKSB8fCBfUHlPYmplY3RfR0NfSVNfVFJBQ0tFRChvYmopKSkKKworCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9HQ19NYWxsb2Moc2l6ZV90KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0dDX05ldyhQeVR5cGVPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5VmFyT2JqZWN0ICopIF9QeU9iamVjdF9HQ19OZXdWYXIoUHlUeXBlT2JqZWN0ICosIFB5X3NzaXplX3QpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vcGNvZGUuaCBiL0luY2x1ZGUvb3Bjb2RlLmgKaW5kZXggOWYyMGI1Ni4uOTc2NDEwOSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vcGNvZGUuaAorKysgYi9JbmNsdWRlL29wY29kZS5oCkBAIC0yMiw3ICsyMiw2IEBACiAKICNkZWZpbmUgVU5BUllfSU5WRVJUCTE1CiAKLSNkZWZpbmUgTElTVF9BUFBFTkQJMTgKICNkZWZpbmUgQklOQVJZX1BPV0VSCTE5CiAKICNkZWZpbmUgQklOQVJZX01VTFRJUExZCTIwCkBAIC04OSw2ICs4OCw3IEBACiAjZGVmaW5lIERFTEVURV9OQU1FCTkxCS8qICIiICovCiAjZGVmaW5lIFVOUEFDS19TRVFVRU5DRQk5MgkvKiBOdW1iZXIgb2Ygc2VxdWVuY2UgaXRlbXMgKi8KICNkZWZpbmUgRk9SX0lURVIJOTMKKyNkZWZpbmUgTElTVF9BUFBFTkQJOTQKIAogI2RlZmluZSBTVE9SRV9BVFRSCTk1CS8qIEluZGV4IGluIG5hbWUgbGlzdCAqLwogI2RlZmluZSBERUxFVEVfQVRUUgk5NgkvKiAiIiAqLwpAQCAtOTksMTYgKzk5LDIwIEBACiAjZGVmaW5lIExPQURfTkFNRQkxMDEJLyogSW5kZXggaW4gbmFtZSBsaXN0ICovCiAjZGVmaW5lIEJVSUxEX1RVUExFCTEwMgkvKiBOdW1iZXIgb2YgdHVwbGUgaXRlbXMgKi8KICNkZWZpbmUgQlVJTERfTElTVAkxMDMJLyogTnVtYmVyIG9mIGxpc3QgaXRlbXMgKi8KLSNkZWZpbmUgQlVJTERfTUFQCTEwNAkvKiBBbHdheXMgemVybyBmb3Igbm93ICovCi0jZGVmaW5lIExPQURfQVRUUgkxMDUJLyogSW5kZXggaW4gbmFtZSBsaXN0ICovCi0jZGVmaW5lIENPTVBBUkVfT1AJMTA2CS8qIENvbXBhcmlzb24gb3BlcmF0b3IgKi8KLSNkZWZpbmUgSU1QT1JUX05BTUUJMTA3CS8qIEluZGV4IGluIG5hbWUgbGlzdCAqLwotI2RlZmluZSBJTVBPUlRfRlJPTQkxMDgJLyogSW5kZXggaW4gbmFtZSBsaXN0ICovCi0KKyNkZWZpbmUgQlVJTERfU0VUCTEwNCAgICAgLyogTnVtYmVyIG9mIHNldCBpdGVtcyAqLworI2RlZmluZSBCVUlMRF9NQVAJMTA1CS8qIEFsd2F5cyB6ZXJvIGZvciBub3cgKi8KKyNkZWZpbmUgTE9BRF9BVFRSCTEwNgkvKiBJbmRleCBpbiBuYW1lIGxpc3QgKi8KKyNkZWZpbmUgQ09NUEFSRV9PUAkxMDcJLyogQ29tcGFyaXNvbiBvcGVyYXRvciAqLworI2RlZmluZSBJTVBPUlRfTkFNRQkxMDgJLyogSW5kZXggaW4gbmFtZSBsaXN0ICovCisjZGVmaW5lIElNUE9SVF9GUk9NCTEwOQkvKiBJbmRleCBpbiBuYW1lIGxpc3QgKi8KICNkZWZpbmUgSlVNUF9GT1JXQVJECTExMAkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCAqLwotI2RlZmluZSBKVU1QX0lGX0ZBTFNFCTExMQkvKiAiIiAqLwotI2RlZmluZSBKVU1QX0lGX1RSVUUJMTEyCS8qICIiICovCi0jZGVmaW5lIEpVTVBfQUJTT0xVVEUJMTEzCS8qIFRhcmdldCBieXRlIG9mZnNldCBmcm9tIGJlZ2lubmluZyBvZiBjb2RlICovCisKKyNkZWZpbmUgSlVNUF9JRl9GQUxTRV9PUl9QT1AgMTExIC8qIFRhcmdldCBieXRlIG9mZnNldCBmcm9tIGJlZ2lubmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgY29kZSAqLworI2RlZmluZSBKVU1QX0lGX1RSVUVfT1JfUE9QIDExMgkvKiAiIiAqLworI2RlZmluZSBKVU1QX0FCU09MVVRFCTExMwkvKiAiIiAqLworI2RlZmluZSBQT1BfSlVNUF9JRl9GQUxTRSAxMTQJLyogIiIgKi8KKyNkZWZpbmUgUE9QX0pVTVBfSUZfVFJVRSAxMTUJLyogIiIgKi8KIAogI2RlZmluZSBMT0FEX0dMT0JBTAkxMTYJLyogSW5kZXggaW4gbmFtZSBsaXN0ICovCiAKQEAgLTEzOCw4ICsxNDIsMTMgQEAKICNkZWZpbmUgQ0FMTF9GVU5DVElPTl9LVyAgICAgICAgICAgMTQxCS8qICNhcmdzICsgKCNrd2FyZ3M8PDgpICovCiAjZGVmaW5lIENBTExfRlVOQ1RJT05fVkFSX0tXICAgICAgIDE0MgkvKiAjYXJncyArICgja3dhcmdzPDw4KSAqLwogCisjZGVmaW5lIFNFVFVQX1dJVEggMTQzCisKIC8qIFN1cHBvcnQgZm9yIG9wYXJncyBtb3JlIHRoYW4gMTYgYml0cyBsb25nICovCi0jZGVmaW5lIEVYVEVOREVEX0FSRyAgMTQzCisjZGVmaW5lIEVYVEVOREVEX0FSRyAgMTQ1CisKKyNkZWZpbmUgU0VUX0FERCAgICAgICAgIDE0NgorI2RlZmluZSBNQVBfQUREICAgICAgICAgMTQ3CiAKIAogZW51bSBjbXBfb3Age1B5Q21wX0xUPVB5X0xULCBQeUNtcF9MRT1QeV9MRSwgUHlDbXBfRVE9UHlfRVEsIFB5Q21wX05FPVB5X05FLCBQeUNtcF9HVD1QeV9HVCwgUHlDbXBfR0U9UHlfR0UsCmRpZmYgLS1naXQgYS9JbmNsdWRlL3BhdGNobGV2ZWwuaCBiL0luY2x1ZGUvcGF0Y2hsZXZlbC5oCmluZGV4IDM5NTJkMDcuLjQyZDVjZWQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcGF0Y2hsZXZlbC5oCisrKyBiL0luY2x1ZGUvcGF0Y2hsZXZlbC5oCkBAIC0yMSwxMyArMjEsMTMgQEAKIC8qIFZlcnNpb24gcGFyc2VkIG91dCBpbnRvIG51bWVyaWMgdmFsdWVzICovCiAvKi0tc3RhcnQgY29uc3RhbnRzLS0qLwogI2RlZmluZSBQWV9NQUpPUl9WRVJTSU9OCTIKLSNkZWZpbmUgUFlfTUlOT1JfVkVSU0lPTgk2Ci0jZGVmaW5lIFBZX01JQ1JPX1ZFUlNJT04JNgorI2RlZmluZSBQWV9NSU5PUl9WRVJTSU9OCTcKKyNkZWZpbmUgUFlfTUlDUk9fVkVSU0lPTgkxCiAjZGVmaW5lIFBZX1JFTEVBU0VfTEVWRUwJUFlfUkVMRUFTRV9MRVZFTF9GSU5BTAogI2RlZmluZSBQWV9SRUxFQVNFX1NFUklBTAkwCiAKIC8qIFZlcnNpb24gYXMgYSBzdHJpbmcgKi8KLSNkZWZpbmUgUFlfVkVSU0lPTiAgICAgIAkiMi42LjYrIgorI2RlZmluZSBQWV9WRVJTSU9OICAgICAgCSIyLjcuMSsiCiAvKi0tZW5kIGNvbnN0YW50cy0tKi8KIAogLyogU3VidmVyc2lvbiBSZXZpc2lvbiBudW1iZXIgb2YgdGhpcyBmaWxlIChub3Qgb2YgdGhlIHJlcG9zaXRvcnkpICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5X2N1cnNlcy5oIGIvSW5jbHVkZS9weV9jdXJzZXMuaAppbmRleCBlNGMwYTZlLi42NTc4MTZjIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5X2N1cnNlcy5oCisrKyBiL0luY2x1ZGUvcHlfY3Vyc2VzLmgKQEAgLTgwLDYgKzgwLDkgQEAKIAogI2RlZmluZSBQeUN1cnNlc1dpbmRvd19DaGVjayh2KQkgKFB5X1RZUEUodikgPT0gJlB5Q3Vyc2VzV2luZG93X1R5cGUpCiAKKyNkZWZpbmUgUHlDdXJzZXNfQ0FQU1VMRV9OQU1FICJfY3Vyc2VzLl9DX0FQSSIKKworCiAjaWZkZWYgQ1VSU0VTX01PRFVMRQogLyogVGhpcyBzZWN0aW9uIGlzIHVzZWQgd2hlbiBjb21waWxpbmcgX2N1cnNlc21vZHVsZS5jICovCiAKQEAgLTk0LDE2ICs5Nyw4IEBACiAjZGVmaW5lIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvciB7aWYgKCEgKChpbnQgKCopKHZvaWQpKVB5Q3Vyc2VzX0FQSVszXSkgKCkgKSByZXR1cm4gTlVMTDt9CiAKICNkZWZpbmUgaW1wb3J0X2N1cnNlcygpIFwKLXsgXAotICBQeU9iamVjdCAqbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaygiX2N1cnNlcyIpOyBcCi0gIGlmIChtb2R1bGUgIT0gTlVMTCkgeyBcCi0gICAgUHlPYmplY3QgKm1vZHVsZV9kaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtb2R1bGUpOyBcCi0gICAgUHlPYmplY3QgKmNfYXBpX29iamVjdCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZV9kaWN0LCAiX0NfQVBJIik7IFwKLSAgICBpZiAoUHlDT2JqZWN0X0NoZWNrKGNfYXBpX29iamVjdCkpIHsgXAotICAgICAgUHlDdXJzZXNfQVBJID0gKHZvaWQgKiopUHlDT2JqZWN0X0FzVm9pZFB0cihjX2FwaV9vYmplY3QpOyBcCi0gICAgfSBcCi0gIH0gXAotfQorICAgIFB5Q3Vyc2VzX0FQSSA9ICh2b2lkICoqKVB5Q2Fwc3VsZV9JbXBvcnQoUHlDdXJzZXNfQ0FQU1VMRV9OQU1FLCAxKTsKKwogI2VuZGlmCiAKIC8qIGdlbmVyYWwgZXJyb3IgbWVzc2FnZXMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHljYXBzdWxlLmggYi9JbmNsdWRlL3B5Y2Fwc3VsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjgyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9JbmNsdWRlL3B5Y2Fwc3VsZS5oCkBAIC0wLDAgKzEsNTYgQEAKKworLyogQ2Fwc3VsZSBvYmplY3RzIGxldCB5b3Ugd3JhcCBhIEMgInZvaWQgKiIgcG9pbnRlciBpbiBhIFB5dGhvbgorICAgb2JqZWN0LiAgVGhleSdyZSBhIHdheSBvZiBwYXNzaW5nIGRhdGEgdGhyb3VnaCB0aGUgUHl0aG9uIGludGVycHJldGVyCisgICB3aXRob3V0IGNyZWF0aW5nIHlvdXIgb3duIGN1c3RvbSB0eXBlLgorCisgICBDYXBzdWxlcyBhcmUgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGV4dGVuc2lvbiBtb2R1bGVzLgorICAgVGhleSBwcm92aWRlIGEgd2F5IGZvciBhbiBleHRlbnNpb24gbW9kdWxlIHRvIGV4cG9ydCBhIEMgaW50ZXJmYWNlCisgICB0byBvdGhlciBleHRlbnNpb24gbW9kdWxlcywgc28gdGhhdCBleHRlbnNpb24gbW9kdWxlcyBjYW4gdXNlIHRoZQorICAgUHl0aG9uIGltcG9ydCBtZWNoYW5pc20gdG8gbGluayB0byBvbmUgYW5vdGhlci4KKworICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgImMtYXBpL2NhcHN1bGUuaHRtbCIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uLgorKi8KKworI2lmbmRlZiBQeV9DQVBTVUxFX0gKKyNkZWZpbmUgUHlfQ0FQU1VMRV9ICisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1B5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUNhcHN1bGVfVHlwZTsKKwordHlwZWRlZiB2b2lkICgqUHlDYXBzdWxlX0Rlc3RydWN0b3IpKFB5T2JqZWN0ICopOworCisjZGVmaW5lIFB5Q2Fwc3VsZV9DaGVja0V4YWN0KG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5Q2Fwc3VsZV9UeXBlKQorCisKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlDYXBzdWxlX05ldygKKyAgICB2b2lkICpwb2ludGVyLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgUHlDYXBzdWxlX0Rlc3RydWN0b3IgZGVzdHJ1Y3Rvcik7CisKK1B5QVBJX0ZVTkModm9pZCAqKSBQeUNhcHN1bGVfR2V0UG9pbnRlcihQeU9iamVjdCAqY2Fwc3VsZSwgY29uc3QgY2hhciAqbmFtZSk7CisKK1B5QVBJX0ZVTkMoUHlDYXBzdWxlX0Rlc3RydWN0b3IpIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yKFB5T2JqZWN0ICpjYXBzdWxlKTsKKworUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5Q2Fwc3VsZV9HZXROYW1lKFB5T2JqZWN0ICpjYXBzdWxlKTsKKworUHlBUElfRlVOQyh2b2lkICopIFB5Q2Fwc3VsZV9HZXRDb250ZXh0KFB5T2JqZWN0ICpjYXBzdWxlKTsKKworUHlBUElfRlVOQyhpbnQpIFB5Q2Fwc3VsZV9Jc1ZhbGlkKFB5T2JqZWN0ICpjYXBzdWxlLCBjb25zdCBjaGFyICpuYW1lKTsKKworUHlBUElfRlVOQyhpbnQpIFB5Q2Fwc3VsZV9TZXRQb2ludGVyKFB5T2JqZWN0ICpjYXBzdWxlLCB2b2lkICpwb2ludGVyKTsKKworUHlBUElfRlVOQyhpbnQpIFB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yKFB5T2JqZWN0ICpjYXBzdWxlLCBQeUNhcHN1bGVfRGVzdHJ1Y3RvciBkZXN0cnVjdG9yKTsKKworUHlBUElfRlVOQyhpbnQpIFB5Q2Fwc3VsZV9TZXROYW1lKFB5T2JqZWN0ICpjYXBzdWxlLCBjb25zdCBjaGFyICpuYW1lKTsKKworUHlBUElfRlVOQyhpbnQpIFB5Q2Fwc3VsZV9TZXRDb250ZXh0KFB5T2JqZWN0ICpjYXBzdWxlLCB2b2lkICpjb250ZXh0KTsKKworUHlBUElfRlVOQyh2b2lkICopIFB5Q2Fwc3VsZV9JbXBvcnQoY29uc3QgY2hhciAqbmFtZSwgaW50IG5vX2Jsb2NrKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKiAhUHlfQ0FQU1VMRV9IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5Y3R5cGUuaCBiL0luY2x1ZGUvcHljdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Y2M2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9JbmNsdWRlL3B5Y3R5cGUuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIFBZQ1RZUEVfSAorI2RlZmluZSBQWUNUWVBFX0gKKworI2RlZmluZSBQWV9DVEZfTE9XRVIgIDB4MDEKKyNkZWZpbmUgUFlfQ1RGX1VQUEVSICAweDAyCisjZGVmaW5lIFBZX0NURl9BTFBIQSAgKFBZX0NURl9MT1dFUnxQWV9DVEZfVVBQRVIpCisjZGVmaW5lIFBZX0NURl9ESUdJVCAgMHgwNAorI2RlZmluZSBQWV9DVEZfQUxOVU0gIChQWV9DVEZfQUxQSEF8UFlfQ1RGX0RJR0lUKQorI2RlZmluZSBQWV9DVEZfU1BBQ0UgIDB4MDgKKyNkZWZpbmUgUFlfQ1RGX1hESUdJVCAweDEwCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgX1B5X2N0eXBlX3RhYmxlWzI1Nl07CisKKy8qIFVubGlrZSB0aGVpciBDIGNvdW50ZXJwYXJ0cywgdGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIG5vdCBtZWFudCB0bworICogaGFuZGxlIGFuIGludCB3aXRoIGFueSBvZiB0aGUgdmFsdWVzIFtFT0YsIDAtVUNIQVJfTUFYXS4gVGhlIGFyZ3VtZW50CisgKiBtdXN0IGJlIGEgc2lnbmVkL3Vuc2lnbmVkIGNoYXIuICovCisjZGVmaW5lIFB5X0lTTE9XRVIoYykgIChfUHlfY3R5cGVfdGFibGVbUHlfQ0hBUk1BU0soYyldICYgUFlfQ1RGX0xPV0VSKQorI2RlZmluZSBQeV9JU1VQUEVSKGMpICAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIFBZX0NURl9VUFBFUikKKyNkZWZpbmUgUHlfSVNBTFBIQShjKSAgKF9QeV9jdHlwZV90YWJsZVtQeV9DSEFSTUFTSyhjKV0gJiBQWV9DVEZfQUxQSEEpCisjZGVmaW5lIFB5X0lTRElHSVQoYykgIChfUHlfY3R5cGVfdGFibGVbUHlfQ0hBUk1BU0soYyldICYgUFlfQ1RGX0RJR0lUKQorI2RlZmluZSBQeV9JU1hESUdJVChjKSAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIFBZX0NURl9YRElHSVQpCisjZGVmaW5lIFB5X0lTQUxOVU0oYykgIChfUHlfY3R5cGVfdGFibGVbUHlfQ0hBUk1BU0soYyldICYgUFlfQ1RGX0FMTlVNKQorI2RlZmluZSBQeV9JU1NQQUNFKGMpICAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIFBZX0NURl9TUEFDRSkKKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X2N0eXBlX3RvbG93ZXJbMjU2XTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9jdHlwZV90b3VwcGVyWzI1Nl07CisKKyNkZWZpbmUgUHlfVE9MT1dFUihjKSAoX1B5X2N0eXBlX3RvbG93ZXJbUHlfQ0hBUk1BU0soYyldKQorI2RlZmluZSBQeV9UT1VQUEVSKGMpIChfUHlfY3R5cGVfdG91cHBlcltQeV9DSEFSTUFTSyhjKV0pCisKKyNlbmRpZiAvKiAhUFlDVFlQRV9IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5ZXJyb3JzLmggYi9JbmNsdWRlL3B5ZXJyb3JzLmgKaW5kZXggZTRmNWRmNi4uZGJlM2JmYSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWVycm9ycy5oCisrKyBiL0luY2x1ZGUvcHllcnJvcnMuaApAQCAtMTg1LDExICsxODUsMTIgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbUVycm5vKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoCiAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7Ci1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqLCBjaGFyICopOwotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoCisgICAgUHlPYmplY3QgKiwgY29uc3QgY2hhciAqKTsKKyNpZmRlZiBNU19XSU5ET1dTCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJub1dpdGhVbmljb2RlRmlsZW5hbWUoCi0gICAgUHlPYmplY3QgKiwgUHlfVU5JQ09ERSAqKTsKLSNlbmRpZiAvKiBQeV9XSU5fV0lERV9GSUxFTkFNRVMgKi8KKyAgICBQeU9iamVjdCAqLCBjb25zdCBQeV9VTklDT0RFICopOworI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9Gb3JtYXQoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9HQ0NfQVRUUklCVVRFKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOwpAQCAtMTk5LDE5ICsyMDAsMTUgQEAKICAgICBpbnQsIGNvbnN0IGNoYXIgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKAogICAgIGludCwgY29uc3QgY2hhciAqKTsKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoVW5pY29kZUZpbGVuYW1lKAogICAgIGludCwgY29uc3QgUHlfVU5JQ09ERSAqKTsKLSNlbmRpZiAvKiBQeV9XSU5fV0lERV9GSUxFTkFNRVMgKi8KIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoaW50KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCiAgICAgUHlPYmplY3QgKixpbnQsIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZSgKICAgICBQeU9iamVjdCAqLGludCwgY29uc3QgY2hhciAqKTsKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoVW5pY29kZUZpbGVuYW1lKAogICAgIFB5T2JqZWN0ICosaW50LCBjb25zdCBQeV9VTklDT0RFICopOwotI2VuZGlmIC8qIFB5X1dJTl9XSURFX0ZJTEVOQU1FUyAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeU9iamVjdCAqLCBpbnQpOwogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIApAQCAtMjIzLDggKzIyMCwxMCBAQAogI2RlZmluZSBQeUVycl9CYWRJbnRlcm5hbENhbGwoKSBfUHlFcnJfQmFkSW50ZXJuYWxDYWxsKF9fRklMRV9fLCBfX0xJTkVfXykKIAogLyogRnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IGV4Y2VwdGlvbiAqLwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9OZXdFeGNlcHRpb24oY2hhciAqbmFtZSwgUHlPYmplY3QgKmJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkaWN0KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfTmV3RXhjZXB0aW9uKAorICAgIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MoCisgICAgY2hhciAqbmFtZSwgY2hhciAqZG9jLCBQeU9iamVjdCAqYmFzZSwgUHlPYmplY3QgKmRpY3QpOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9Xcml0ZVVucmFpc2FibGUoUHlPYmplY3QgKik7CiAKIC8qIEluIHNpZ2NoZWNrLmMgb3Igc2lnbmFsbW9kdWxlLmMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlleHBhdC5oIGIvSW5jbHVkZS9weWV4cGF0LmgKaW5kZXggMWU3OWY0ZS4uNTM0MGVmNSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWV4cGF0LmgKKysrIGIvSW5jbHVkZS9weWV4cGF0LmgKQEAgLTQsNiArNCw3IEBACiAvKiBub3RlOiB5b3UgbXVzdCBpbXBvcnQgZXhwYXQuaCBiZWZvcmUgaW1wb3J0aW5nIHRoaXMgbW9kdWxlISAqLwogCiAjZGVmaW5lIFB5RXhwYXRfQ0FQSV9NQUdJQyAgInB5ZXhwYXQuZXhwYXRfQ0FQSSAxLjAiCisjZGVmaW5lIFB5RXhwYXRfQ0FQU1VMRV9OQU1FICJweWV4cGF0LmV4cGF0X0NBUEkiCiAKIHN0cnVjdCBQeUV4cGF0X0NBUEkgCiB7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWFjY29uZmlnLmggYi9JbmNsdWRlL3B5bWFjY29uZmlnLmgKaW5kZXggZmUzYTZkZS4uNmQ0YTk3MSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1hY2NvbmZpZy5oCisrKyBiL0luY2x1ZGUvcHltYWNjb25maWcuaApAQCAtMTYsNyArMTYsMTMgQEAKICMgdW5kZWYgU0laRU9GX1RJTUVfVAogIyB1bmRlZiBTSVpFT0ZfVk9JRF9QCiAjIHVuZGVmIFNJWkVPRl9fQk9PTAorIyB1bmRlZiBTSVpFT0ZfVUlOVFBUUl9UCisjIHVuZGVmIFNJWkVPRl9QVEhSRUFEX1QKICMgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIHVuZGVmIERPVUJMRV9JU19BUk1fTUlYRURfRU5ESUFOX0lFRUU3NTQKKyMgdW5kZWYgRE9VQkxFX0lTX0JJR19FTkRJQU5fSUVFRTc1NAorIyB1bmRlZiBET1VCTEVfSVNfTElUVExFX0VORElBTl9JRUVFNzU0CisjIHVuZGVmIEhBVkVfR0NDX0FTTV9GT1JfWDg3CiAKICMgICAgdW5kZWYgVkFfTElTVF9JU19BUlJBWQogIyAgICBpZiBkZWZpbmVkKF9fTFA2NF9fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pCkBAIC0zNyw2ICs0Myw4IEBACiAjICAgICAgICBkZWZpbmUgU0laRU9GX1NJWkVfVCAgICAgICAgICAgOAogIyAgICAgICAgZGVmaW5lIFNJWkVPRl9USU1FX1QgICAgICAgICAgIDgKICMgICAgICAgIGRlZmluZSBTSVpFT0ZfVk9JRF9QICAgICAgICAgICA4CisjICAgICAgICBkZWZpbmUgU0laRU9GX1VJTlRQVFJfVCAgICAgICAgOAorIyAgICAgICAgZGVmaW5lIFNJWkVPRl9QVEhSRUFEX1QgICAgICAgIDgKICMgICAgZWxzZQogIyAgICAgICAgaWZkZWYgX19wcGNfXwogIyAgICAgICAgICAgZGVmaW5lIFNJWkVPRl9fQk9PTCAgICAgICAgIDQKQEAgLTQ4LDYgKzU2LDggQEAKICMgICAgICAgIGRlZmluZSBTSVpFT0ZfU0laRV9UICAgICAgICAgICA0CiAjICAgICAgICBkZWZpbmUgU0laRU9GX1RJTUVfVCAgICAgICAgICAgNAogIyAgICAgICAgZGVmaW5lIFNJWkVPRl9WT0lEX1AgICAgICAgICAgIDQKKyMgICAgICAgIGRlZmluZSBTSVpFT0ZfVUlOVFBUUl9UICAgICAgICA0CisjICAgICAgICBkZWZpbmUgU0laRU9GX1BUSFJFQURfVCAgICAgICAgNAogIyAgICBlbmRpZgogCiAjICAgIGlmIGRlZmluZWQoX19MUDY0X18pCkBAIC02NSw4ICs3NSwxNSBAQAogCiAjaWZkZWYgX19CSUdfRU5ESUFOX18KICNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyNkZWZpbmUgRE9VQkxFX0lTX0JJR19FTkRJQU5fSUVFRTc1NAorI2Vsc2UKKyNkZWZpbmUgRE9VQkxFX0lTX0xJVFRMRV9FTkRJQU5fSUVFRTc1NAogI2VuZGlmIC8qIF9fQklHX0VORElBTiAqLwogCisjaWZkZWYgX19pMzg2X18KKyMgZGVmaW5lIEhBVkVfR0NDX0FTTV9GT1JfWDg3CisjZW5kaWYKKwogICAgIC8qCiAgICAgICogVGhlIGRlZmluaXRpb24gaW4gcHljb25maWcuaCBpcyBvbmx5IHZhbGlkIG9uIHRoZSBPUyByZWxlYXNlCiAgICAgICogd2hlcmUgY29uZmlndXJlIHJhbiBvbiBhbmQgbm90IG5lY2Vzc2FyaWx5IGZvciBhbGwgc3lzdGVtcyB3aGVyZQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weW1hdGguaCBiL0luY2x1ZGUvcHltYXRoLmgKaW5kZXggNmFkMTc0ZC4uZTNjZjIyYiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1hdGguaAorKysgYi9JbmNsdWRlL3B5bWF0aC5oCkBAIC0zLDE4ICszLDE0IEBACiAKICNpbmNsdWRlICJweWNvbmZpZy5oIiAvKiBpbmNsdWRlIGZvciBkZWZpbmVzICovCiAKLSNpZmRlZiBIQVZFX1NURElOVF9ICi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBTeW1ib2xzIGFuZCBtYWNyb3MgdG8gc3VwcGx5IHBsYXRmb3JtLWluZGVwZW5kZW50IGludGVyZmFjZXMgdG8gbWF0aGVtYXRpY2FsCiBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIFB5dGhvbiBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbnMgZm9yIGNvcHlzaWduLCBhY29zaCwgYXNpbmgsIGF0YW5oLCAKLSAqIGxvZzFwIGFuZCBoeXBvdCBpbiBQeXRob24vcHltYXRoLmMganVzdCBpbiBjYXNlIHlvdXIgbWF0aCBsaWJyYXJ5IGRvZXNuJ3QKLSAqIHByb3ZpZGUgdGhlIGZ1bmN0aW9ucy4KKy8qIFB5dGhvbiBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbnMgZm9yIGNvcHlzaWduLCByb3VuZCBhbmQgaHlwb3QgaW4KKyAqIFB5dGhvbi9weW1hdGguYyBqdXN0IGluIGNhc2UgeW91ciBtYXRoIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIHRoZQorICogZnVuY3Rpb25zLgogICoKICAqTm90ZTogUEMvcHljb25maWcuaCBkZWZpbmVzIGNvcHlzaWduIGFzIF9jb3B5c2lnbgogICovCkBAIC0yMiwyMCArMTgsOCBAQAogZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbihkb3VibGUsIGRvdWJsZSk7CiAjZW5kaWYKIAotI2lmbmRlZiBIQVZFX0FDT1NICi1leHRlcm4gZG91YmxlIGFjb3NoKGRvdWJsZSk7Ci0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0FTSU5ICi1leHRlcm4gZG91YmxlIGFzaW5oKGRvdWJsZSk7Ci0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0FUQU5ICi1leHRlcm4gZG91YmxlIGF0YW5oKGRvdWJsZSk7Ci0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0xPRzFQCi1leHRlcm4gZG91YmxlIGxvZzFwKGRvdWJsZSk7CisjaWZuZGVmIEhBVkVfUk9VTkQKK2V4dGVybiBkb3VibGUgcm91bmQoZG91YmxlKTsKICNlbmRpZgogCiAjaWZuZGVmIEhBVkVfSFlQT1QKQEAgLTkyLDYgKzc2LDExIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX0dDQ19BU01fRk9SX1g4NworUHlBUElfRlVOQyh1bnNpZ25lZCBzaG9ydCkgX1B5X2dldF8zODdjb250cm9sd29yZCh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5X3NldF8zODdjb250cm9sd29yZCh1bnNpZ25lZCBzaG9ydCk7CisjZW5kaWYKKwogLyogUHlfSVNfTkFOKFgpCiAgKiBSZXR1cm4gMSBpZiBmbG9hdCBvciBkb3VibGUgYXJnIGlzIGEgTmFOLCBlbHNlIDAuCiAgKiBDYXV0aW9uOgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weW1lbS5oIGIvSW5jbHVkZS9weW1lbS5oCmluZGV4IGM4ODAxYmIuLjEwYjViZWEgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHltZW0uaAorKysgYi9JbmNsdWRlL3B5bWVtLmgKQEAgLTU5LDkgKzU5LDkgQEAKIC8qIE1hY3Jvcy4gKi8KICNpZmRlZiBQWU1BTExPQ19ERUJVRwogLyogUmVkaXJlY3QgYWxsIG1lbW9yeSBvcGVyYXRpb25zIHRvIFB5dGhvbidzIGRlYnVnZ2luZyBhbGxvY2F0b3IuICovCi0jZGVmaW5lIFB5TWVtX01BTExPQwkJUHlPYmplY3RfTUFMTE9DCi0jZGVmaW5lIFB5TWVtX1JFQUxMT0MJCVB5T2JqZWN0X1JFQUxMT0MKLSNkZWZpbmUgUHlNZW1fRlJFRQkJUHlPYmplY3RfRlJFRQorI2RlZmluZSBQeU1lbV9NQUxMT0MJCV9QeU1lbV9EZWJ1Z01hbGxvYworI2RlZmluZSBQeU1lbV9SRUFMTE9DCQlfUHlNZW1fRGVidWdSZWFsbG9jCisjZGVmaW5lIFB5TWVtX0ZSRUUJCV9QeU1lbV9EZWJ1Z0ZyZWUKIAogI2Vsc2UJLyogISBQWU1BTExPQ19ERUJVRyAqLwogCkBAIC03MSw5ICs3MSw5IEBACiAgICBweW1hbGxvYy4gVG8gc29sdmUgdGhlc2UgcHJvYmxlbXMsIGFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUuICovCiAvKiBSZXR1cm5zIE5VTEwgdG8gaW5kaWNhdGUgZXJyb3IgaWYgYSBuZWdhdGl2ZSBzaXplIG9yIHNpemUgbGFyZ2VyIHRoYW4KICAgIFB5X3NzaXplX3QgY2FuIHJlcHJlc2VudCBpcyBzdXBwbGllZC4gIEhlbHBzIHByZXZlbnRzIHNlY3VyaXR5IGhvbGVzLiAqLwotI2RlZmluZSBQeU1lbV9NQUxMT0MobikJCSgoKG4pIDwgMCB8fCAobikgPiBQWV9TU0laRV9UX01BWCkgPyBOVUxMIFwKKyNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pCQkoKHNpemVfdCkobikgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYID8gTlVMTCBcCiAJCQkJOiBtYWxsb2MoKG4pID8gKG4pIDogMSkpCi0jZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikJKCgobikgPCAwIHx8IChuKSA+IFBZX1NTSVpFX1RfTUFYKSA/IE5VTEwgXAorI2RlZmluZSBQeU1lbV9SRUFMTE9DKHAsIG4pCSgoc2l6ZV90KShuKSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggID8gTlVMTCBcCiAJCQkJOiByZWFsbG9jKChwKSwgKG4pID8gKG4pIDogMSkpCiAjZGVmaW5lIFB5TWVtX0ZSRUUJCWZyZWUKIApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXBvcnQuaCBiL0luY2x1ZGUvcHlwb3J0LmgKaW5kZXggZWQ1ZmM1Ni4uMWFiYzE0YyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXBvcnQuaAorKysgYi9JbmNsdWRlL3B5cG9ydC5oCkBAIC0zLDYgKzMsMTIgQEAKIAogI2luY2x1ZGUgInB5Y29uZmlnLmgiIC8qIGluY2x1ZGUgZm9yIGRlZmluZXMgKi8KIAorLyogU29tZSB2ZXJzaW9ucyBvZiBIUC1VWCAmIFNvbGFyaXMgbmVlZCBpbnR0eXBlcy5oIGZvciBpbnQzMl90LAorICAgSU5UMzJfTUFYLCBldGMuICovCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9TVERJTlRfSAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2VuZGlmCkBAIC04MCw2ICs4Niw1NyBAQAogI2VuZGlmCiAjZW5kaWYgLyogSEFWRV9MT05HX0xPTkcgKi8KIAorLyogYSBidWlsZCB3aXRoIDMwLWJpdCBkaWdpdHMgZm9yIFB5dGhvbiBsb25nIGludGVnZXJzIG5lZWRzIGFuIGV4YWN0LXdpZHRoCisgKiAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlIHRvIHN0b3JlIHRob3NlIGRpZ2l0cy4gIChXZSBjb3VsZCBqdXN0IHVzZQorICogdHlwZSAndW5zaWduZWQgbG9uZycsIGJ1dCB0aGF0IHdvdWxkIGJlIHdhc3RlZnVsIG9uIGEgc3lzdGVtIHdoZXJlIGxvbmdzCisgKiBhcmUgNjQtYml0cy4pICBPbiBVbml4IHN5c3RlbXMsIHRoZSBhdXRvY29uZiBtYWNybyBBQ19UWVBFX1VJTlQzMl9UIGRlZmluZXMKKyAqIHVpbnQzMl90IHRvIGJlIHN1Y2ggYSB0eXBlIHVubGVzcyBzdGRpbnQuaCBvciBpbnR0eXBlcy5oIGRlZmluZXMgdWludDMyX3QuCisgKiBIb3dldmVyLCBpdCBkb2Vzbid0IHNldCBIQVZFX1VJTlQzMl9ULCBzbyB3ZSBkbyB0aGF0IGhlcmUuCisgKi8KKyNpZiAoZGVmaW5lZCBVSU5UMzJfTUFYIHx8IGRlZmluZWQgdWludDMyX3QpCisjaWZuZGVmIFBZX1VJTlQzMl9UCisjZGVmaW5lIEhBVkVfVUlOVDMyX1QgMQorI2RlZmluZSBQWV9VSU5UMzJfVCB1aW50MzJfdAorI2VuZGlmCisjZW5kaWYKKworLyogTWFjcm9zIGZvciBhIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGU7IHVzZWQgZm9yIHR5cGUgJ3R3b2RpZ2l0cycgaW4gdGhlCisgKiBsb25nIGludGVnZXIgaW1wbGVtZW50YXRpb24sIHdoZW4gMzAtYml0IGRpZ2l0cyBhcmUgZW5hYmxlZC4KKyAqLworI2lmIChkZWZpbmVkIFVJTlQ2NF9NQVggfHwgZGVmaW5lZCB1aW50NjRfdCkKKyNpZm5kZWYgUFlfVUlOVDY0X1QKKyNkZWZpbmUgSEFWRV9VSU5UNjRfVCAxCisjZGVmaW5lIFBZX1VJTlQ2NF9UIHVpbnQ2NF90CisjZW5kaWYKKyNlbmRpZgorCisvKiBTaWduZWQgdmFyaWFudHMgb2YgdGhlIGFib3ZlICovCisjaWYgKGRlZmluZWQgSU5UMzJfTUFYIHx8IGRlZmluZWQgaW50MzJfdCkKKyNpZm5kZWYgUFlfSU5UMzJfVAorI2RlZmluZSBIQVZFX0lOVDMyX1QgMQorI2RlZmluZSBQWV9JTlQzMl9UIGludDMyX3QKKyNlbmRpZgorI2VuZGlmCisjaWYgKGRlZmluZWQgSU5UNjRfTUFYIHx8IGRlZmluZWQgaW50NjRfdCkKKyNpZm5kZWYgUFlfSU5UNjRfVAorI2RlZmluZSBIQVZFX0lOVDY0X1QgMQorI2RlZmluZSBQWV9JTlQ2NF9UIGludDY0X3QKKyNlbmRpZgorI2VuZGlmCisKKy8qIElmIFBZTE9OR19CSVRTX0lOX0RJR0lUIGlzIG5vdCBkZWZpbmVkIHRoZW4gd2UnbGwgdXNlIDMwLWJpdCBkaWdpdHMgaWYgYWxsCisgICB0aGUgbmVjZXNzYXJ5IGludGVnZXIgdHlwZXMgYXJlIGF2YWlsYWJsZSwgYW5kIHdlJ3JlIG9uIGEgNjQtYml0IHBsYXRmb3JtCisgICAoYXMgZGV0ZXJtaW5lZCBieSBTSVpFT0ZfVk9JRF9QKTsgb3RoZXJ3aXNlIHdlIHVzZSAxNS1iaXQgZGlnaXRzLiAqLworCisjaWZuZGVmIFBZTE9OR19CSVRTX0lOX0RJR0lUCisjaWYgKGRlZmluZWQgSEFWRV9VSU5UNjRfVCAmJiBkZWZpbmVkIEhBVkVfSU5UNjRfVCAmJiBcCisgICAgIGRlZmluZWQgSEFWRV9VSU5UMzJfVCAmJiBkZWZpbmVkIEhBVkVfSU5UMzJfVCAmJiBTSVpFT0ZfVk9JRF9QID49IDgpCisjZGVmaW5lIFBZTE9OR19CSVRTX0lOX0RJR0lUIDMwCisjZWxzZQorI2RlZmluZSBQWUxPTkdfQklUU19JTl9ESUdJVCAxNQorI2VuZGlmCisjZW5kaWYKKwogLyogdWludHB0cl90IGlzIHRoZSBDOVggbmFtZSBmb3IgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSBzdWNoIHRoYXQgYQogICogbGVnaXRpbWF0ZSB2b2lkKiBjYW4gYmUgY2FzdCB0byB1aW50cHRyX3QgYW5kIHRoZW4gYmFjayB0byB2b2lkKiBhZ2FpbgogICogd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLiAgU2ltaWxhcmx5IGZvciBpbnRwdHJfdCwgd3J0IGEgc2lnbmVkCkBAIC0xNzIsNiArMjI5LDIyIEBACiAjICAgZW5kaWYKICNlbmRpZgogCisvKiBQWV9GT1JNQVRfTE9OR19MT05HIGlzIGFuYWxvZ291cyB0byBQWV9GT1JNQVRfU0laRV9UIGFib3ZlLCBidXQgZm9yCisgKiB0aGUgbG9uZyBsb25nIHR5cGUgaW5zdGVhZCBvZiB0aGUgc2l6ZV90IHR5cGUuICBJdCdzIG9ubHkgYXZhaWxhYmxlCisgKiB3aGVuIEhBVkVfTE9OR19MT05HIGlzIGRlZmluZWQuIFRoZSAiaGlnaCBsZXZlbCIgUHl0aG9uIGZvcm1hdAorICogZnVuY3Rpb25zIGxpc3RlZCBhYm92ZSB3aWxsIGludGVycHJldCAibGxkIiBvciAibGx1IiBjb3JyZWN0bHkgb24KKyAqIGFsbCBwbGF0Zm9ybXMuCisgKi8KKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworIyAgIGlmbmRlZiBQWV9GT1JNQVRfTE9OR19MT05HCisjICAgICAgIGlmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyMgICAgICAgICAgIGRlZmluZSBQWV9GT1JNQVRfTE9OR19MT05HICJJNjQiCisjICAgICAgIGVsc2UKKyMgICAgICAgICAgIGVycm9yICJUaGlzIHBsYXRmb3JtJ3MgcHljb25maWcuaCBuZWVkcyB0byBkZWZpbmUgUFlfRk9STUFUX0xPTkdfTE9ORyIKKyMgICAgICAgZW5kaWYKKyMgICBlbmRpZgorI2VuZGlmCisKIC8qIFB5X0xPQ0FMIGNhbiBiZSB1c2VkIGluc3RlYWQgb2Ygc3RhdGljIHRvIGdldCB0aGUgZmFzdGVzdCBwb3NzaWJsZSBjYWxsaW5nCiAgKiBjb252ZW50aW9uIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgbG9jYWwgdG8gYSBnaXZlbiBtb2R1bGUuCiAgKgpAQCAtMjMyLDYgKzMwNSwxMCBAQAogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjaW5jbHVkZSA8aWVlZWZwLmg+ICAvKiBuZWVkZWQgZm9yICdmaW5pdGUnIGRlY2xhcmF0aW9uIG9uIHNvbWUgcGxhdGZvcm1zICovCisjZW5kaWYKKwogI2luY2x1ZGUgPG1hdGguaD4gLyogTW92ZWQgaGVyZSBmcm9tIHRoZSBtYXRoIHNlY3Rpb24sIGJlZm9yZSBleHRlcm4gIkMiICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzI3LDE5ICs0MDQsMjMgQEAKICAqIEMgZG9lc24ndCBkZWZpbmUgd2hldGhlciBhIHJpZ2h0LXNoaWZ0IG9mIGEgc2lnbmVkIGludGVnZXIgc2lnbi1leHRlbmRzCiAgKiBvciB6ZXJvLWZpbGxzLiAgSGVyZSBhIG1hY3JvIHRvIGZvcmNlIHNpZ24gZXh0ZW5zaW9uOgogICogUHlfQVJJVEhNRVRJQ19SSUdIVF9TSElGVChUWVBFLCBJLCBKKQotICogICAgUmV0dXJuIEkgPj4gSiwgZm9yY2luZyBzaWduIGV4dGVuc2lvbi4KKyAqICAgIFJldHVybiBJID4+IEosIGZvcmNpbmcgc2lnbiBleHRlbnNpb24uICBBcml0aG1ldGljYWxseSwgcmV0dXJuIHRoZQorICogICAgZmxvb3Igb2YgSS8yKipKLgogICogUmVxdWlyZW1lbnRzOgotICogICAgSSBpcyBvZiBiYXNpYyBzaWduZWQgdHlwZSBUWVBFIChjaGFyLCBzaG9ydCwgaW50LCBsb25nLCBvciBsb25nIGxvbmcpLgotICogICAgVFlQRSBpcyBvbmUgb2YgY2hhciwgc2hvcnQsIGludCwgbG9uZywgb3IgbG9uZyBsb25nLCBhbHRob3VnaCBsb25nIGxvbmcKLSAqICAgIG11c3Qgbm90IGJlIHVzZWQgZXhjZXB0IG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQuCi0gKiAgICBKIGlzIGFuIGludGVnZXIgPj0gMCBhbmQgc3RyaWN0bHkgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgYml0cyBpbiBUWVBFCi0gKiAgICAoYmVjYXVzZSBDIGRvZXNuJ3QgZGVmaW5lIHdoYXQgaGFwcGVucyBmb3IgSiBvdXRzaWRlIHRoYXQgcmFuZ2UgZWl0aGVyKS4KKyAqICAgIEkgc2hvdWxkIGhhdmUgc2lnbmVkIGludGVnZXIgdHlwZS4gIEluIHRoZSB0ZXJtaW5vbG9neSBvZiBDOTksIHRoaXMgY2FuCisgKiAgICBiZSBlaXRoZXIgb25lIG9mIHRoZSBmaXZlIHN0YW5kYXJkIHNpZ25lZCBpbnRlZ2VyIHR5cGVzIChzaWduZWQgY2hhciwKKyAqICAgIHNob3J0LCBpbnQsIGxvbmcsIGxvbmcgbG9uZykgb3IgYW4gZXh0ZW5kZWQgc2lnbmVkIGludGVnZXIgdHlwZS4KKyAqICAgIEogaXMgYW4gaW50ZWdlciA+PSAwIGFuZCBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZQorICogICAgdHlwZSBvZiBJIChiZWNhdXNlIEMgZG9lc24ndCBkZWZpbmUgd2hhdCBoYXBwZW5zIGZvciBKIG91dHNpZGUgdGhhdAorICogICAgcmFuZ2UgZWl0aGVyKS4KKyAqICAgIFRZUEUgdXNlZCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIEksIGJ1dCBpcyBub3cgaWdub3JlZC4gIEl0J3MgYmVlbiBsZWZ0CisgKiAgICBpbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyA8PSAyLjYgb3IgMy4wLgogICogQ2F1dGlvbjoKICAqICAgIEkgbWF5IGJlIGV2YWx1YXRlZCBtb3JlIHRoYW4gb25jZS4KICAqLwogI2lmZGVmIFNJR05FRF9SSUdIVF9TSElGVF9aRVJPX0ZJTExTCiAjZGVmaW5lIFB5X0FSSVRITUVUSUNfUklHSFRfU0hJRlQoVFlQRSwgSSwgSikgXAotICAgICgoSSkgPCAwID8gfigofih1bnNpZ25lZCBUWVBFKShJKSkgPj4gKEopKSA6IChJKSA+PiAoSikpCisgICAgKChJKSA8IDAgPyAtMS0oKC0xLShJKSkgPj4gKEopKSA6IChJKSA+PiAoSikpCiAjZWxzZQogI2RlZmluZSBQeV9BUklUSE1FVElDX1JJR0hUX1NISUZUKFRZUEUsIEksIEopICgoSSkgPj4gKEopKQogI2VuZGlmCkBAIC00MjcsNiArNTA4LDc5IEBACiAgICAgICAgICAgICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSgwKQogCisvKiAgVGhlIGZ1bmN0aW9ucyBfUHlfZGdfc3RydG9kIGFuZCBfUHlfZGdfZHRvYSBpbiBQeXRob24vZHRvYS5jICh3aGljaCBhcmUKKyAqICByZXF1aXJlZCB0byBzdXBwb3J0IHRoZSBzaG9ydCBmbG9hdCByZXByIGludHJvZHVjZWQgaW4gUHl0aG9uIDMuMSkgcmVxdWlyZQorICogIHRoYXQgdGhlIGZsb2F0aW5nLXBvaW50IHVuaXQgdGhhdCdzIGJlaW5nIHVzZWQgZm9yIGFyaXRobWV0aWMgb3BlcmF0aW9ucworICogIG9uIEMgZG91YmxlcyBpcyBzZXQgdG8gdXNlIDUzLWJpdCBwcmVjaXNpb24uICBJdCBhbHNvIHJlcXVpcmVzIHRoYXQgdGhlCisgKiAgRlBVIHJvdW5kaW5nIG1vZGUgaXMgcm91bmQtaGFsZi10by1ldmVuLCBidXQgdGhhdCdzIGxlc3Mgb2Z0ZW4gYW4gaXNzdWUuCisgKgorICogIElmIHlvdXIgRlBVIGlzbid0IGFscmVhZHkgc2V0IHRvIDUzLWJpdCBwcmVjaXNpb24vcm91bmQtaGFsZi10by1ldmVuLCBhbmQKKyAqICB5b3Ugd2FudCB0byBtYWtlIHVzZSBvZiBfUHlfZGdfc3RydG9kIGFuZCBfUHlfZGdfZHRvYSwgdGhlbiB5b3Ugc2hvdWxkCisgKgorICogICAgICNkZWZpbmUgSEFWRV9QWV9TRVRfNTNCSVRfUFJFQ0lTSU9OIDEKKyAqCisgKiAgYW5kIGFsc28gZ2l2ZSBhcHByb3ByaWF0ZSBkZWZpbml0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyB0aHJlZSBtYWNyb3M6CisgKgorICogICAgX1BZX1NFVF81M0JJVF9QUkVDSVNJT05fU1RBUlQgOiBzdG9yZSBvcmlnaW5hbCBGUFUgc2V0dGluZ3MsIGFuZAorICogICAgICAgIHNldCBGUFUgdG8gNTMtYml0IHByZWNpc2lvbi9yb3VuZC1oYWxmLXRvLWV2ZW4KKyAqICAgIF9QWV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0VORCA6IHJlc3RvcmUgb3JpZ2luYWwgRlBVIHNldHRpbmdzCisgKiAgICBfUFlfU0VUXzUzQklUX1BSRUNJU0lPTl9IRUFERVIgOiBhbnkgdmFyaWFibGUgZGVjbGFyYXRpb25zIG5lZWRlZCB0bworICogICAgICAgIHVzZSB0aGUgdHdvIG1hY3JvcyBhYm92ZS4KKyAqCisgKiBUaGUgbWFjcm9zIGFyZSBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGhpbiBhIHNpbmdsZSBDIGZ1bmN0aW9uOiBzZWUKKyAqIFB5dGhvbi9weXN0cnRvZC5jIGZvciBhbiBleGFtcGxlIG9mIHRoZWlyIHVzZS4KKyAqLworCisvKiBnZXQgYW5kIHNldCB4ODcgY29udHJvbCB3b3JkIGZvciBnY2MveDg2ICovCisjaWZkZWYgSEFWRV9HQ0NfQVNNX0ZPUl9YODcKKyNkZWZpbmUgSEFWRV9QWV9TRVRfNTNCSVRfUFJFQ0lTSU9OIDEKKy8qIF9QeV9nZXQvc2V0XzM4N2NvbnRyb2x3b3JkIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBQeXRob24vcHltYXRoLmMgKi8KKyNkZWZpbmUgX1B5X1NFVF81M0JJVF9QUkVDSVNJT05fSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgc2hvcnQgb2xkXzM4N2NvbnRyb2x3b3JkLCBuZXdfMzg3Y29udHJvbHdvcmQKKyNkZWZpbmUgX1B5X1NFVF81M0JJVF9QUkVDSVNJT05fU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgb2xkXzM4N2NvbnRyb2x3b3JkID0gX1B5X2dldF8zODdjb250cm9sd29yZCgpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbmV3XzM4N2NvbnRyb2x3b3JkID0gKG9sZF8zODdjb250cm9sd29yZCAmIH4weDBmMDApIHwgMHgwMjAwOyBcCisgICAgICAgIGlmIChuZXdfMzg3Y29udHJvbHdvcmQgIT0gb2xkXzM4N2NvbnRyb2x3b3JkKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfUHlfc2V0XzM4N2NvbnRyb2x3b3JkKG5ld18zODdjb250cm9sd29yZCk7ICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX1B5X1NFVF81M0JJVF9QUkVDSVNJT05fRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKG5ld18zODdjb250cm9sd29yZCAhPSBvbGRfMzg3Y29udHJvbHdvcmQpICAgICAgICAgICAgICAgXAorICAgICAgICBfUHlfc2V0XzM4N2NvbnRyb2x3b3JkKG9sZF8zODdjb250cm9sd29yZCkKKyNlbmRpZgorCisvKiBkZWZhdWx0IGRlZmluaXRpb25zIGFyZSBlbXB0eSAqLworI2lmbmRlZiBIQVZFX1BZX1NFVF81M0JJVF9QUkVDSVNJT04KKyNkZWZpbmUgX1B5X1NFVF81M0JJVF9QUkVDSVNJT05fSEVBREVSCisjZGVmaW5lIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX1NUQVJUCisjZGVmaW5lIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0VORAorI2VuZGlmCisKKy8qIElmIHdlIGNhbid0IGd1YXJhbnRlZSA1My1iaXQgcHJlY2lzaW9uLCBkb24ndCB1c2UgdGhlIGNvZGUKKyAgIGluIFB5dGhvbi9kdG9hLmMsIGJ1dCBmYWxsIGJhY2sgdG8gc3RhbmRhcmQgY29kZS4gIFRoaXMKKyAgIG1lYW5zIHRoYXQgcmVwciBvZiBhIGZsb2F0IHdpbGwgYmUgbG9uZyAoMTcgc2lnIGRpZ2l0cykuCisKKyAgIFJlYWxpc3RpY2FsbHksIHRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgY291bGQgZ28gd3Jvbmc6CisKKyAgICgxKSBkb3VibGVzIGFyZW4ndCBJRUVFIDc1NCBkb3VibGVzLCBvcgorICAgKDIpIHdlJ3JlIG9uIHg4NiB3aXRoIHRoZSByb3VuZGluZyBwcmVjaXNpb24gc2V0IHRvIDY0LWJpdHMKKyAgICAgICAoZXh0ZW5kZWQgcHJlY2lzaW9uKSwgYW5kIHdlIGRvbid0IGtub3cgaG93IHRvIGNoYW5nZQorICAgICAgIHRoZSByb3VuZGluZyBwcmVjaXNpb24uCisgKi8KKworI2lmICFkZWZpbmVkKERPVUJMRV9JU19MSVRUTEVfRU5ESUFOX0lFRUU3NTQpICYmIFwKKyAgICAhZGVmaW5lZChET1VCTEVfSVNfQklHX0VORElBTl9JRUVFNzU0KSAmJiBcCisgICAgIWRlZmluZWQoRE9VQkxFX0lTX0FSTV9NSVhFRF9FTkRJQU5fSUVFRTc1NCkKKyNkZWZpbmUgUFlfTk9fU0hPUlRfRkxPQVRfUkVQUgorI2VuZGlmCisKKy8qIGRvdWJsZSByb3VuZGluZyBpcyBzeW1wdG9tYXRpYyBvZiB1c2Ugb2YgZXh0ZW5kZWQgcHJlY2lzaW9uIG9uIHg4Ni4gIElmCisgICB3ZSdyZSBzZWVpbmcgZG91YmxlIHJvdW5kaW5nLCBhbmQgd2UgZG9uJ3QgaGF2ZSBhbnkgbWVjaGFuaXNtIGF2YWlsYWJsZSBmb3IKKyAgIGNoYW5naW5nIHRoZSBGUFUgcm91bmRpbmcgcHJlY2lzaW9uLCB0aGVuIGRvbid0IHVzZSBQeXRob24vZHRvYS5jLiAqLworI2lmIGRlZmluZWQoWDg3X0RPVUJMRV9ST1VORElORykgJiYgIWRlZmluZWQoSEFWRV9QWV9TRVRfNTNCSVRfUFJFQ0lTSU9OKQorI2RlZmluZSBQWV9OT19TSE9SVF9GTE9BVF9SRVBSCisjZW5kaWYKKwogLyogUHlfREVQUkVDQVRFRCh2ZXJzaW9uKQogICogRGVjbGFyZSBhIHZhcmlhYmxlLCB0eXBlLCBvciBmdW5jdGlvbiBkZXByZWNhdGVkLgogICogVXNhZ2U6CkBAIC00NzMsNyArNjI3LDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX09QRU5QVFkpIHx8IGRlZmluZWQoSEFWRV9GT1JLUFRZKQotI2lmICFkZWZpbmVkKEhBVkVfUFRZX0gpICYmICFkZWZpbmVkKEhBVkVfTElCVVRJTF9IKQorI2lmICFkZWZpbmVkKEhBVkVfUFRZX0gpICYmICFkZWZpbmVkKEhBVkVfTElCVVRJTF9IKSAmJiAhZGVmaW5lZChIQVZFX1VUSUxfSCkKIC8qIEJTREkgZG9lcyBub3Qgc3VwcGx5IGEgcHJvdG90eXBlIGZvciB0aGUgJ29wZW5wdHknIGFuZCAnZm9ya3B0eScKICAgIGZ1bmN0aW9ucywgZXZlbiB0aG91Z2ggdGhleSBhcmUgaW5jbHVkZWQgaW4gbGlidXRpbC4gKi8KICNpbmNsdWRlIDx0ZXJtaW9zLmg+CkBAIC01NzAsMjMgKzcyNCwyNCBAQAogIyAgICAgICAgICAgICAgIGlmZGVmIFB5X0JVSUxEX0NPUkUKICMgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBQeUFQSV9GVU5DKFJUWVBFKSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgUlRZUEUKICMgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBQeUFQSV9EQVRBKFJUWVBFKSBleHRlcm4gX19kZWNsc3BlYyhkbGxleHBvcnQpIFJUWVBFCi0gICAgICAgICAgICAvKiBtb2R1bGUgaW5pdCBmdW5jdGlvbnMgaW5zaWRlIHRoZSBjb3JlIG5lZWQgbm8gZXh0ZXJuYWwgbGlua2FnZSAqLwotICAgICAgICAgICAgLyogZXhjZXB0IGZvciBDeWd3aW4gdG8gaGFuZGxlIGVtYmVkZGluZyAoRklYTUU6IEJlT1MgdG9vPykgKi8KKyAgICAgICAgLyogbW9kdWxlIGluaXQgZnVuY3Rpb25zIGluc2lkZSB0aGUgY29yZSBuZWVkIG5vIGV4dGVybmFsIGxpbmthZ2UgKi8KKyAgICAgICAgLyogZXhjZXB0IGZvciBDeWd3aW4gdG8gaGFuZGxlIGVtYmVkZGluZyAoRklYTUU6IEJlT1MgdG9vPykgKi8KICMgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlZmluZWQoX19DWUdXSU5fXykKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIFB5TU9ESU5JVF9GVU5DIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSB2b2lkCiAjICAgICAgICAgICAgICAgICAgICAgICBlbHNlIC8qIF9fQ1lHV0lOX18gKi8KICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIFB5TU9ESU5JVF9GVU5DIHZvaWQKICMgICAgICAgICAgICAgICAgICAgICAgIGVuZGlmIC8qIF9fQ1lHV0lOX18gKi8KICMgICAgICAgICAgICAgICBlbHNlIC8qIFB5X0JVSUxEX0NPUkUgKi8KLSAgICAgICAgICAgIC8qIEJ1aWxkaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUsIG9yIGFuIGVtYmVkZGVkIHNpdHVhdGlvbiAqLwotICAgICAgICAgICAgLyogcHVibGljIFB5dGhvbiBmdW5jdGlvbnMgYW5kIGRhdGEgYXJlIGltcG9ydGVkICovCi0gICAgICAgICAgICAvKiBVbmRlciBDeWd3aW4sIGF1dG8taW1wb3J0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IGNvbXBpbGF0aW9uICovCi0gICAgICAgICAgICAvKiBmYWlsdXJlcyBzaW1pbGFyIHRvIGh0dHA6Ly9weXRob24ub3JnL2RvYy9GQVEuaHRtbCMzLjI0ICovCisgICAgICAgIC8qIEJ1aWxkaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUsIG9yIGFuIGVtYmVkZGVkIHNpdHVhdGlvbiAqLworICAgICAgICAvKiBwdWJsaWMgUHl0aG9uIGZ1bmN0aW9ucyBhbmQgZGF0YSBhcmUgaW1wb3J0ZWQgKi8KKyAgICAgICAgLyogVW5kZXIgQ3lnd2luLCBhdXRvLWltcG9ydCBmdW5jdGlvbnMgdG8gcHJldmVudCBjb21waWxhdGlvbiAqLworICAgICAgICAvKiBmYWlsdXJlcyBzaW1pbGFyIHRvIHRob3NlIGRlc2NyaWJlZCBhdCB0aGUgYm90dG9tIG9mIDQuMTogKi8KKyAgICAgICAgLyogaHR0cDovL2RvY3MucHl0aG9uLm9yZy9leHRlbmRpbmcvd2luZG93cy5odG1sI2EtY29va2Jvb2stYXBwcm9hY2ggKi8KICMgICAgICAgICAgICAgICAgICAgICAgIGlmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBQeUFQSV9GVU5DKFJUWVBFKSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgUlRZUEUKICMgICAgICAgICAgICAgICAgICAgICAgIGVuZGlmIC8qICFfX0NZR1dJTl9fICovCiAjICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgUHlBUElfREFUQShSVFlQRSkgZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBSVFlQRQotICAgICAgICAgICAgLyogbW9kdWxlIGluaXQgZnVuY3Rpb25zIG91dHNpZGUgdGhlIGNvcmUgbXVzdCBiZSBleHBvcnRlZCAqLworICAgICAgICAvKiBtb2R1bGUgaW5pdCBmdW5jdGlvbnMgb3V0c2lkZSB0aGUgY29yZSBtdXN0IGJlIGV4cG9ydGVkICovCiAjICAgICAgICAgICAgICAgICAgICAgICBpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgUHlNT0RJTklUX0ZVTkMgZXh0ZXJuICJDIiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZAogIyAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvKiBfX2NwbHVzcGx1cyAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXN0cnRvZC5oIGIvSW5jbHVkZS9weXN0cnRvZC5oCmluZGV4IGM2OTIxZGEuLmVlYzQzNGYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlzdHJ0b2QuaAorKysgYi9JbmNsdWRlL3B5c3RydG9kLmgKQEAgLTgsOCArOCwzNSBAQAogCiBQeUFQSV9GVU5DKGRvdWJsZSkgUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcHRyKTsKIFB5QVBJX0ZVTkMoZG91YmxlKSBQeU9TX2FzY2lpX2F0b2YoY29uc3QgY2hhciAqc3RyKTsKLVB5QVBJX0ZVTkMoY2hhciAqKSBQeU9TX2FzY2lpX2Zvcm1hdGQoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmX2xlbiwgIGNvbnN0IGNoYXIgKmZvcm1hdCwgZG91YmxlIGQpOwogCisvKiBEZXByZWNhdGVkIGluIDIuNyBhbmQgMy4xLiBXaWxsIGRpc2FwcGVhciBpbiAyLjggKGlmIGl0IGV4aXN0cykgYW5kIDMuMiAqLworUHlBUElfRlVOQyhjaGFyICopIFB5T1NfYXNjaWlfZm9ybWF0ZChjaGFyICpidWZmZXIsIHNpemVfdCBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIGRvdWJsZSBkKTsKK1B5QVBJX0ZVTkMoZG91YmxlKSBQeU9TX3N0cmluZ190b19kb3VibGUoY29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqZW5kcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqb3ZlcmZsb3dfZXhjZXB0aW9uKTsKKworLyogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBQeU1lbV9GcmVlIHRvIGZyZWUgdGhlIGJ1ZmZlcgorICAgdGhhdCdzIGlzIHJldHVybmVkLiAqLworUHlBUElfRlVOQyhjaGFyICopIFB5T1NfZG91YmxlX3RvX3N0cmluZyhkb3VibGUgdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGZvcm1hdF9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdHlwZSk7CisKK1B5QVBJX0ZVTkMoZG91YmxlKSBfUHlfcGFyc2VfaW5mX29yX25hbihjb25zdCBjaGFyICpwLCBjaGFyICoqZW5kcHRyKTsKKworCisvKiBQeU9TX2RvdWJsZV90b19zdHJpbmcncyAiZmxhZ3MiIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIDAgb3IgbW9yZSBvZjogKi8KKyNkZWZpbmUgUHlfRFRTRl9TSUdOICAgICAgMHgwMSAvKiBhbHdheXMgYWRkIHRoZSBzaWduICovCisjZGVmaW5lIFB5X0RUU0ZfQUREX0RPVF8wIDB4MDIgLyogaWYgdGhlIHJlc3VsdCBpcyBhbiBpbnRlZ2VyIGFkZCAiLjAiICovCisjZGVmaW5lIFB5X0RUU0ZfQUxUICAgICAgIDB4MDQgLyogImFsdGVybmF0ZSIgZm9ybWF0dGluZy4gaXQncyBmb3JtYXRfY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljICovCisKKy8qIFB5T1NfZG91YmxlX3RvX3N0cmluZydzICJ0eXBlIiwgaWYgbm9uLU5VTEwsIHdpbGwgYmUgc2V0IHRvIG9uZSBvZjogKi8KKyNkZWZpbmUgUHlfRFRTVF9GSU5JVEUgMAorI2RlZmluZSBQeV9EVFNUX0lORklOSVRFIDEKKyNkZWZpbmUgUHlfRFRTVF9OQU4gMgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHl0aG9ucnVuLmggYi9JbmNsdWRlL3B5dGhvbnJ1bi5oCmluZGV4IDAzOWI0OTguLmY4ZWQ3MTggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrIGIvSW5jbHVkZS9weXRob25ydW4uaApAQCAtMTIzLDYgKzEyMyw3IEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeUltcG9ydEhvb2tzX0luaXQodm9pZCk7CiBQeUFQSV9GVU5DKGludCkgX1B5RnJhbWVfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlJbnRfSW5pdCh2b2lkKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlMb25nX0luaXQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeUZsb2F0X0luaXQodm9pZCk7CiBQeUFQSV9GVU5DKGludCkgUHlCeXRlQXJyYXlfSW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXRocmVhZC5oIGIvSW5jbHVkZS9weXRocmVhZC5oCmluZGV4IGI1YTZlYzMuLmRmZDYxNTcgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHl0aHJlYWQuaAorKysgYi9JbmNsdWRlL3B5dGhyZWFkLmgKQEAgLTIsOSArMiw2IEBACiAjaWZuZGVmIFB5X1BZVEhSRUFEX0gKICNkZWZpbmUgUHlfUFlUSFJFQURfSAogCi0jZGVmaW5lIE5PX0VYSVRfUFJPRwkJLyogZG9uJ3QgZGVmaW5lIFB5VGhyZWFkX2V4aXRfcHJvZygpICovCi0JCQkJLyogKHRoZSByZXN1bHQgaXMgbm8gdXNlIG9mIHNpZ25hbHMgb24gU0dJKSAqLwotCiB0eXBlZGVmIHZvaWQgKlB5VGhyZWFkX3R5cGVfbG9jazsKIHR5cGVkZWYgdm9pZCAqUHlUaHJlYWRfdHlwZV9zZW1hOwogCkBAIC0xNSw3ICsxMiw2IEBACiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkX2luaXRfdGhyZWFkKHZvaWQpOwogUHlBUElfRlVOQyhsb25nKSBQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkKHZvaWQgKCopKHZvaWQgKiksIHZvaWQgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZF9fUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCk7CiBQeUFQSV9GVU5DKGxvbmcpIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQodm9pZCk7CiAKIFB5QVBJX0ZVTkMoUHlUaHJlYWRfdHlwZV9sb2NrKSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKHZvaWQpOwpAQCAtMjgsMTEgKzI0LDYgQEAKIFB5QVBJX0ZVTkMoc2l6ZV90KSBQeVRocmVhZF9nZXRfc3RhY2tzaXplKHZvaWQpOwogUHlBUElfRlVOQyhpbnQpIFB5VGhyZWFkX3NldF9zdGFja3NpemUoc2l6ZV90KTsKIAotI2lmbmRlZiBOT19FWElUX1BST0cKLVB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRfZXhpdF9wcm9nKGludCk7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkX19QeVRocmVhZF9leGl0X3Byb2coaW50KTsKLSNlbmRpZgotCiAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSAoVExTKSBBUEkgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeVRocmVhZF9jcmVhdGVfa2V5KHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZF9kZWxldGVfa2V5KGludCk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3N0cmluZ29iamVjdC5oIGIvSW5jbHVkZS9zdHJpbmdvYmplY3QuaAppbmRleCBjMGExZmNhLi4xOGI1YjQxIDEwMDY0NAotLS0gYS9JbmNsdWRlL3N0cmluZ29iamVjdC5oCisrKyBiL0luY2x1ZGUvc3RyaW5nb2JqZWN0LmgKQEAgLTYyLDkgKzYyLDkgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoY29uc3QgY2hhciAqLCBQeV9zc2l6ZV90KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTdHJpbmdfRnJvbVN0cmluZyhjb25zdCBjaGFyICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVN0cmluZ19Gcm9tRm9ybWF0Vihjb25zdCBjaGFyKiwgdmFfbGlzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfR0NDX0FUVFJJQlVURSgoZm9ybWF0KHByaW50ZiwgMSwgMCkpKTsKKwkJCQlQeV9HQ0NfQVRUUklCVVRFKChmb3JtYXQocHJpbnRmLCAxLCAwKSkpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVN0cmluZ19Gcm9tRm9ybWF0KGNvbnN0IGNoYXIqLCAuLi4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0dDQ19BVFRSSUJVVEUoKGZvcm1hdChwcmludGYsIDEsIDIpKSk7CisJCQkJUHlfR0NDX0FUVFJJQlVURSgoZm9ybWF0KHByaW50ZiwgMSwgMikpKTsKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlTdHJpbmdfU2l6ZShQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoY2hhciAqKSBQeVN0cmluZ19Bc1N0cmluZyhQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTdHJpbmdfUmVwcihQeU9iamVjdCAqLCBpbnQpOwpAQCAtNzQsMTAgKzc0LDEwIEBACiBQeUFQSV9GVU5DKGludCkgX1B5U3RyaW5nX0VxKFB5T2JqZWN0ICosIFB5T2JqZWN0Kik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U3RyaW5nX0Zvcm1hdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5U3RyaW5nX0Zvcm1hdExvbmcoUHlPYmplY3QqLCBpbnQsIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBjaGFyKiosIGludCopOwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVN0cmluZ19EZWNvZGVFc2NhcGUoY29uc3QgY2hhciAqLCBQeV9zc2l6ZV90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBQeV9zc2l6ZV90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKKwkJCQkJCSAgaW50LCBjaGFyKiosIGludCopOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVN0cmluZ19EZWNvZGVFc2NhcGUoY29uc3QgY2hhciAqLCBQeV9zc2l6ZV90LCAKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKiwgUHlfc3NpemVfdCwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKik7CiAKIFB5QVBJX0ZVTkModm9pZCkgUHlTdHJpbmdfSW50ZXJuSW5QbGFjZShQeU9iamVjdCAqKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5U3RyaW5nX0ludGVybkltbW9ydGFsKFB5T2JqZWN0ICoqKTsKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLwogICAgICk7CiAKLS8qIEVuY29kZXMgYSBjaGFyIGJ1ZmZlciBvZiB0aGUgZ2l2ZW4gc2l6ZSBhbmQgcmV0dXJucyBhCisvKiBFbmNvZGVzIGEgY2hhciBidWZmZXIgb2YgdGhlIGdpdmVuIHNpemUgYW5kIHJldHVybnMgYSAKICAgIFB5dGhvbiBvYmplY3QuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVN0cmluZ19FbmNvZGUoCkBAIC0xMTcsNTAgKzExNyw1MCBAQAogICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLwogICAgICk7CiAKLS8qIEVuY29kZXMgYSBzdHJpbmcgb2JqZWN0IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgUHl0aG9uCisvKiBFbmNvZGVzIGEgc3RyaW5nIG9iamVjdCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIFB5dGhvbiAKICAgIG9iamVjdC4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5U3RyaW5nX0FzRW5jb2RlZE9iamVjdCgKLSAgICBQeU9iamVjdCAqc3RyLCAgICAgICAgICAgICAgLyogc3RyaW5nIG9iamVjdCAqLwotICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCAgICAgICAvKiBlbmNvZGluZyAqLwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLworICAgIFB5T2JqZWN0ICpzdHIsCSAJLyogc3RyaW5nIG9iamVjdCAqLworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAkvKiBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmVycm9ycwkJLyogZXJyb3IgaGFuZGxpbmcgKi8KICAgICApOwogCiAvKiBFbmNvZGVzIGEgc3RyaW5nIG9iamVjdCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIFB5dGhvbiBzdHJpbmcKLSAgIG9iamVjdC4KLQorICAgb2JqZWN0LiAgIAorICAgCiAgICBJZiB0aGUgY29kZWMgcmV0dXJucyBhbiBVbmljb2RlIG9iamVjdCwgdGhlIG9iamVjdCBpcyBjb252ZXJ0ZWQKICAgIGJhY2sgdG8gYSBzdHJpbmcgdXNpbmcgdGhlIGRlZmF1bHQgZW5jb2RpbmcuCiAKICAgIERFUFJFQ0FURUQgLSB1c2UgUHlTdHJpbmdfQXNFbmNvZGVkT2JqZWN0KCkgaW5zdGVhZC4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5U3RyaW5nX0FzRW5jb2RlZFN0cmluZygKLSAgICBQeU9iamVjdCAqc3RyLCAgICAgICAgICAgICAgLyogc3RyaW5nIG9iamVjdCAqLwotICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCAgICAgICAvKiBlbmNvZGluZyAqLwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLworICAgIFB5T2JqZWN0ICpzdHIsCSAJLyogc3RyaW5nIG9iamVjdCAqLworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAkvKiBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmVycm9ycwkJLyogZXJyb3IgaGFuZGxpbmcgKi8KICAgICApOwogCi0vKiBEZWNvZGVzIGEgc3RyaW5nIG9iamVjdCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIFB5dGhvbgorLyogRGVjb2RlcyBhIHN0cmluZyBvYmplY3QgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBQeXRob24gCiAgICBvYmplY3QuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVN0cmluZ19Bc0RlY29kZWRPYmplY3QoCi0gICAgUHlPYmplY3QgKnN0ciwgICAgICAgICAgICAgIC8qIHN0cmluZyBvYmplY3QgKi8KLSAgICBjb25zdCBjaGFyICplbmNvZGluZywgICAgICAgLyogZW5jb2RpbmcgKi8KLSAgICBjb25zdCBjaGFyICplcnJvcnMgICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KKyAgICBQeU9iamVjdCAqc3RyLAkgCS8qIHN0cmluZyBvYmplY3QgKi8KKyAgICBjb25zdCBjaGFyICplbmNvZGluZywJLyogZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICplcnJvcnMJCS8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKIAogLyogRGVjb2RlcyBhIHN0cmluZyBvYmplY3QgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBQeXRob24gc3RyaW5nCi0gICBvYmplY3QuCi0KKyAgIG9iamVjdC4gIAorICAgCiAgICBJZiB0aGUgY29kZWMgcmV0dXJucyBhbiBVbmljb2RlIG9iamVjdCwgdGhlIG9iamVjdCBpcyBjb252ZXJ0ZWQKICAgIGJhY2sgdG8gYSBzdHJpbmcgdXNpbmcgdGhlIGRlZmF1bHQgZW5jb2RpbmcuCiAKICAgIERFUFJFQ0FURUQgLSB1c2UgUHlTdHJpbmdfQXNEZWNvZGVkT2JqZWN0KCkgaW5zdGVhZC4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5U3RyaW5nX0FzRGVjb2RlZFN0cmluZygKLSAgICBQeU9iamVjdCAqc3RyLCAgICAgICAgICAgICAgLyogc3RyaW5nIG9iamVjdCAqLwotICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCAgICAgICAvKiBlbmNvZGluZyAqLwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLworICAgIFB5T2JqZWN0ICpzdHIsCSAJLyogc3RyaW5nIG9iamVjdCAqLworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAkvKiBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmVycm9ycwkJLyogZXJyb3IgaGFuZGxpbmcgKi8KICAgICApOwogCiAvKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGludGVybmFsIGRhdGEgYnVmZmVyIGFuZCBzaXplIG9mIGEgc3RyaW5nCkBAIC0xNzAsMjkgKzE3MCwzOSBAQAogICAgY2F1c2UgYW4gZXhjZXB0aW9uKS4gICovCiAKIFB5QVBJX0ZVTkMoaW50KSBQeVN0cmluZ19Bc1N0cmluZ0FuZFNpemUoCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9iaiwgICAgIC8qIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKipzLCAgICAgICAgICAvKiBwb2ludGVyIHRvIGJ1ZmZlciB2YXJpYWJsZSAqLwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgKmxlbiAgICAvKiBwb2ludGVyIHRvIGxlbmd0aCB2YXJpYWJsZSBvciBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHBvc3NpYmxlIGZvciAwLXRlcm1pbmF0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncykgKi8KKyAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqLAkvKiBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QgKi8KKyAgICByZWdpc3RlciBjaGFyICoqcywJCS8qIHBvaW50ZXIgdG8gYnVmZmVyIHZhcmlhYmxlICovCisgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCAqbGVuCS8qIHBvaW50ZXIgdG8gbGVuZ3RoIHZhcmlhYmxlIG9yIE5VTEwKKwkJCQkgICAob25seSBwb3NzaWJsZSBmb3IgMC10ZXJtaW5hdGVkCisJCQkJICAgc3RyaW5ncykgKi8KICAgICApOwogCisKIC8qIFVzaW5nIHRoZSBjdXJyZW50IGxvY2FsZSwgaW5zZXJ0IHRoZSB0aG91c2FuZHMgZ3JvdXBpbmcKICAgIGludG8gdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IGJ1ZmZlci4gIEZvciB0aGUgYXJndW1lbnQgZGVzY3JpcHRpb25zLAogICAgc2VlIE9iamVjdHMvc3RyaW5nbGliL2xvY2FsZXV0aWwuaCAqLworUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlTdHJpbmdfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmdMb2NhbGUoY2hhciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtaW5fd2lkdGgpOwogCi1QeUFQSV9GVU5DKGludCkgX1B5U3RyaW5nX0luc2VydFRob3VzYW5kc0dyb3VwaW5nKGNoYXIgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBidWZfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcHBlbmRfemVyb19jaGFyKTsKKy8qIFVzaW5nIGV4cGxpY2l0IHBhc3NlZC1pbiB2YWx1ZXMsIGluc2VydCB0aGUgdGhvdXNhbmRzIGdyb3VwaW5nCisgICBpbnRvIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSBidWZmZXIuICBGb3IgdGhlIGFyZ3VtZW50IGRlc2NyaXB0aW9ucywKKyAgIHNlZSBPYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmggKi8KK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5U3RyaW5nX0luc2VydFRob3VzYW5kc0dyb3VwaW5nKGNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5fYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5fZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWluX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmdyb3VwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRob3VzYW5kc19zZXApOwogCiAvKiBGb3JtYXQgdGhlIG9iamVjdCBiYXNlZCBvbiB0aGUgZm9ybWF0X3NwZWMsIGFzIGRlZmluZWQgaW4gUEVQIDMxMDEKICAgIChBZHZhbmNlZCBTdHJpbmcgRm9ybWF0dGluZykuICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUJ5dGVzX0Zvcm1hdEFkdmFuY2VkKFB5T2JqZWN0ICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdF9zcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9zcGVjX2xlbik7CisJCQkJCSAgICAgICBjaGFyICpmb3JtYXRfc3BlYywKKwkJCQkJICAgICAgIFB5X3NzaXplX3QgZm9ybWF0X3NwZWNfbGVuKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL3N5bXRhYmxlLmggYi9JbmNsdWRlL3N5bXRhYmxlLmgKaW5kZXggNjU3NzViMC4uZTBhMGJlNCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zeW10YWJsZS5oCisrKyBiL0luY2x1ZGUvc3ltdGFibGUuaApAQCAtMTksNyArMTksNiBAQAogICAgIFB5T2JqZWN0ICpzdF9nbG9iYWw7ICAgICAvKiBib3Jyb3dlZCByZWYgdG8gTU9EVUxFIGluIHN0X3N5bWJvbHMgKi8KICAgICBpbnQgc3RfbmJsb2NrczsgICAgICAgICAgLyogbnVtYmVyIG9mIGJsb2NrcyAqLwogICAgIFB5T2JqZWN0ICpzdF9wcml2YXRlOyAgICAgICAgLyogbmFtZSBvZiBjdXJyZW50IGNsYXNzIG9yIE5VTEwgKi8KLSAgICBpbnQgc3RfdG1wbmFtZTsgICAgICAgICAgLyogdGVtcG9yYXJ5IG5hbWUgY291bnRlciAqLwogICAgIFB5RnV0dXJlRmVhdHVyZXMgKnN0X2Z1dHVyZTsgLyogbW9kdWxlJ3MgZnV0dXJlIGZlYXR1cmVzICovCiB9OwogCkBAIC02NSwxMyArNjQsOSBAQAogI2RlZmluZSBERUZfTE9DQUwgMiAgICAgICAgICAgIC8qIGFzc2lnbm1lbnQgaW4gY29kZSBibG9jayAqLwogI2RlZmluZSBERUZfUEFSQU0gMjw8MSAgICAgICAgIC8qIGZvcm1hbCBwYXJhbWV0ZXIgKi8KICNkZWZpbmUgVVNFIDI8PDIgICAgICAgICAgICAgICAvKiBuYW1lIGlzIHVzZWQgKi8KLSNkZWZpbmUgREVGX1NUQVIgMjw8MyAgICAgICAgICAvKiBwYXJhbWV0ZXIgaXMgc3RhciBhcmcgKi8KLSNkZWZpbmUgREVGX0RPVUJMRVNUQVIgMjw8NCAgICAvKiBwYXJhbWV0ZXIgaXMgc3Rhci1zdGFyIGFyZyAqLwotI2RlZmluZSBERUZfSU5UVVBMRSAyPDw1ICAgICAgIC8qIG5hbWUgZGVmaW5lZCBpbiB0dXBsZSBpbiBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIERFRl9GUkVFIDI8PDYgICAgICAgICAgLyogbmFtZSB1c2VkIGJ1dCBub3QgZGVmaW5lZCBpbiBuZXN0ZWQgYmxvY2sgKi8KLSNkZWZpbmUgREVGX0ZSRUVfR0xPQkFMIDI8PDcgICAvKiBmcmVlIHZhcmlhYmxlIGlzIGFjdHVhbGx5IGltcGxpY2l0IGdsb2JhbCAqLwotI2RlZmluZSBERUZfRlJFRV9DTEFTUyAyPDw4ICAgIC8qIGZyZWUgdmFyaWFibGUgZnJvbSBjbGFzcydzIG1ldGhvZCAqLwotI2RlZmluZSBERUZfSU1QT1JUIDI8PDkgICAgICAgIC8qIGFzc2lnbm1lbnQgb2NjdXJyZWQgdmlhIGltcG9ydCAqLworI2RlZmluZSBERUZfRlJFRSAyPDwzICAgICAgICAgLyogbmFtZSB1c2VkIGJ1dCBub3QgZGVmaW5lZCBpbiBuZXN0ZWQgYmxvY2sgKi8KKyNkZWZpbmUgREVGX0ZSRUVfQ0xBU1MgMjw8NCAgICAvKiBmcmVlIHZhcmlhYmxlIGZyb20gY2xhc3MncyBtZXRob2QgKi8KKyNkZWZpbmUgREVGX0lNUE9SVCAyPDw1ICAgICAgICAvKiBhc3NpZ25tZW50IG9jY3VycmVkIHZpYSBpbXBvcnQgKi8KIAogI2RlZmluZSBERUZfQk9VTkQgKERFRl9MT0NBTCB8IERFRl9QQVJBTSB8IERFRl9JTVBPUlQpCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvdG9rZW4uaCBiL0luY2x1ZGUvdG9rZW4uaAppbmRleCA0MjUwMDAwLi43MjY1OWFjIDEwMDY0NAotLS0gYS9JbmNsdWRlL3Rva2VuLmgKKysrIGIvSW5jbHVkZS90b2tlbi5oCkBAIC03LDYgKzcsOCBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorI3VuZGVmIFRJTERFICAgLyogUHJldmVudCBjbGFzaCBvZiBvdXIgZGVmaW5pdGlvbiB3aXRoIHN5c3RlbSBtYWNyby4gRXggQUlYLCBpb2N0bC5oICovCisKICNkZWZpbmUgRU5ETUFSS0VSCTAKICNkZWZpbmUgTkFNRQkJMQogI2RlZmluZSBOVU1CRVIJCTIKZGlmZiAtLWdpdCBhL0luY2x1ZGUvdHVwbGVvYmplY3QuaCBiL0luY2x1ZGUvdHVwbGVvYmplY3QuaAppbmRleCA1ODQ3OWVlLi5hNWFiNzMzIDEwMDY0NAotLS0gYS9JbmNsdWRlL3R1cGxlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS90dXBsZW9iamVjdC5oCkBAIC00NCw2ICs0NCw3IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VHVwbGVfR2V0U2xpY2UoUHlPYmplY3QgKiwgUHlfc3NpemVfdCwgUHlfc3NpemVfdCk7CiBQeUFQSV9GVU5DKGludCkgX1B5VHVwbGVfUmVzaXplKFB5T2JqZWN0ICoqLCBQeV9zc2l6ZV90KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlUdXBsZV9QYWNrKFB5X3NzaXplX3QsIC4uLik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeVR1cGxlX01heWJlVW50cmFjayhQeU9iamVjdCAqKTsKIAogLyogTWFjcm8sIHRyYWRpbmcgc2FmZXR5IGZvciBzcGVlZCAqLwogI2RlZmluZSBQeVR1cGxlX0dFVF9JVEVNKG9wLCBpKSAoKChQeVR1cGxlT2JqZWN0ICopKG9wKSktPm9iX2l0ZW1baV0pCmRpZmYgLS1naXQgYS9JbmNsdWRlL3Vjbmhhc2guaCBiL0luY2x1ZGUvdWNuaGFzaC5oCmluZGV4IDYyMzFjOTguLjY5Yjc3NzQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdWNuaGFzaC5oCisrKyBiL0luY2x1ZGUvdWNuaGFzaC5oCkBAIC02LDcgKzYsOSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotLyogcmV2aXNlZCB1Y25oYXNoIENBUEkgaW50ZXJmYWNlIChleHBvcnRlZCB0aHJvdWdoIGEgUHlDT2JqZWN0KSAqLworLyogcmV2aXNlZCB1Y25oYXNoIENBUEkgaW50ZXJmYWNlIChleHBvcnRlZCB0aHJvdWdoIGEgIndyYXBwZXIiKSAqLworCisjZGVmaW5lIFB5VW5pY29kZURhdGFfQ0FQU1VMRV9OQU1FICJ1bmljb2RlZGF0YS51Y25oYXNoX0NBUEkiCiAKIHR5cGVkZWYgc3RydWN0IHsKIApkaWZmIC0tZ2l0IGEvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmggYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAppbmRleCBjMGExY2ExLi45YWI3MjRhIDEwMDY0NAotLS0gYS9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAorKysgYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaApAQCAtNzQwLDEwICs3NDAsOCBAQAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9FbmNvZGVVVEY3KAogICAgIGNvbnN0IFB5X1VOSUNPREUgKmRhdGEsICAgICAvKiBVbmljb2RlIGNoYXIgYnVmZmVyICovCiAgICAgUHlfc3NpemVfdCBsZW5ndGgsICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIFB5X1VOSUNPREUgY2hhcnMgdG8gZW5jb2RlICovCi0gICAgaW50IGVuY29kZVNldE8sICAgICAgICAgICAgIC8qIGZvcmNlIHRoZSBlbmNvZGVyIHRvIGVuY29kZSBjaGFyYWN0ZXJzIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBPLCBhcyBkZXNjcmliZWQgaW4gUkZDMjE1MiAqLwotICAgIGludCBlbmNvZGVXaGl0ZVNwYWNlLCAgICAgICAvKiBmb3JjZSB0aGUgZW5jb2RlciB0byBlbmNvZGUgc3BhY2UsIHRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FycmlhZ2UgcmV0dXJuIGFuZCBsaW5lZmVlZCBjaGFyYWN0ZXJzICovCisgICAgaW50IGJhc2U2NFNldE8sICAgICAgICAgICAgIC8qIEVuY29kZSBSRkMyMTUyIFNldCBPIGNoYXJhY3RlcnMgaW4gYmFzZTY0ICovCisgICAgaW50IGJhc2U2NFdoaXRlU3BhY2UsICAgICAgIC8qIEVuY29kZSB3aGl0ZXNwYWNlIChzcCwgaHQsIG5sLCBjcikgaW4gYmFzZTY0ICovCiAgICAgY29uc3QgY2hhciAqZXJyb3JzICAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKIApkaWZmIC0tZ2l0IGEvTElDRU5TRSBiL0xJQ0VOU0UKaW5kZXggMTA1MGVhOS4uNWNkYjAxZSAxMDA2NDQKLS0tIGEvTElDRU5TRQorKysgYi9MSUNFTlNFCkBAIC02Myw2ICs2Myw3IEBACiAgICAgMi42LjMgICAgICAgICAgIDIuNi4yICAgICAgIDIwMDkgICAgICAgIFBTRiAgICAgICAgIHllcwogICAgIDIuNi40ICAgICAgICAgICAyLjYuMyAgICAgICAyMDA5ICAgICAgICBQU0YgICAgICAgICB5ZXMKICAgICAyLjYuNSAgICAgICAgICAgMi42LjQgICAgICAgMjAxMCAgICAgICAgUFNGICAgICAgICAgeWVzCisgICAgMi43ICAgICAgICAgICAgIDIuNiAgICAgICAgIDIwMTAgICAgICAgIFBTRiAgICAgICAgIHllcwogCiBGb290bm90ZXM6CiAKZGlmZiAtLWdpdCBhL0xpYi9CYXNlSFRUUFNlcnZlci5weSBiL0xpYi9CYXNlSFRUUFNlcnZlci5weQppbmRleCA2YzBjZjQ2Li5kYTA0MzE1IDEwMDY0NAotLS0gYS9MaWIvQmFzZUhUVFBTZXJ2ZXIucHkKKysrIGIvTGliL0Jhc2VIVFRQU2VydmVyLnB5CkBAIC0zMDksMTggKzMwOSwzMiBAQAogICAgICAgICBjb21tYW5kcyBzdWNoIGFzIEdFVCBhbmQgUE9TVC4KIAogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5yYXdfcmVxdWVzdGxpbmUgPSBzZWxmLnJmaWxlLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IHNlbGYucmF3X3JlcXVlc3RsaW5lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJhd19yZXF1ZXN0bGluZSA9IHNlbGYucmZpbGUucmVhZGxpbmUoNjU1MzcpCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5yYXdfcmVxdWVzdGxpbmUpID4gNjU1MzY6CisgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0bGluZSA9ICcnCisgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0X3ZlcnNpb24gPSAnJworICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9ICcnCisgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQxNCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJhd19yZXF1ZXN0bGluZToKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5wYXJzZV9yZXF1ZXN0KCk6CisgICAgICAgICAgICAgICAgIyBBbiBlcnJvciBjb2RlIGhhcyBiZWVuIHNlbnQsIGp1c3QgZXhpdAorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgbW5hbWUgPSAnZG9fJyArIHNlbGYuY29tbWFuZAorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgbW5hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig1MDEsICJVbnN1cHBvcnRlZCBtZXRob2QgKCVyKSIgJSBzZWxmLmNvbW1hbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsIG1uYW1lKQorICAgICAgICAgICAgbWV0aG9kKCkKKyAgICAgICAgICAgIHNlbGYud2ZpbGUuZmx1c2goKSAjYWN0dWFsbHkgc2VuZCB0aGUgcmVzcG9uc2UgaWYgbm90IGFscmVhZHkgZG9uZS4KKyAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0LCBlOgorICAgICAgICAgICAgI2EgcmVhZCBvciBhIHdyaXRlIHRpbWVkIG91dC4gIERpc2NhcmQgdGhpcyBjb25uZWN0aW9uCisgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiUmVxdWVzdCB0aW1lZCBvdXQ6ICVyIiwgZSkKICAgICAgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IDEKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBub3Qgc2VsZi5wYXJzZV9yZXF1ZXN0KCk6ICMgQW4gZXJyb3IgY29kZSBoYXMgYmVlbiBzZW50LCBqdXN0IGV4aXQKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBtbmFtZSA9ICdkb18nICsgc2VsZi5jb21tYW5kCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsIG1uYW1lKToKLSAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig1MDEsICJVbnN1cHBvcnRlZCBtZXRob2QgKCVyKSIgJSBzZWxmLmNvbW1hbmQpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCBtbmFtZSkKLSAgICAgICAgbWV0aG9kKCkKIAogICAgIGRlZiBoYW5kbGUoc2VsZik6CiAgICAgICAgICIiIkhhbmRsZSBtdWx0aXBsZSByZXF1ZXN0cyBpZiBuZWNlc3NhcnkuIiIiCmRpZmYgLS1naXQgYS9MaWIvQ0dJSFRUUFNlcnZlci5weSBiL0xpYi9DR0lIVFRQU2VydmVyLnB5CmluZGV4IGE4Mjk2MjEuLjEzY2EwYjUgMTAwNjQ0Ci0tLSBhL0xpYi9DR0lIVFRQU2VydmVyLnB5CisrKyBiL0xpYi9DR0lIVFRQU2VydmVyLnB5CkBAIC0yOSw2ICsyOSw3IEBACiBpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKIGltcG9ydCBTaW1wbGVIVFRQU2VydmVyCiBpbXBvcnQgc2VsZWN0CitpbXBvcnQgY29weQogCiAKIGNsYXNzIENHSUhUVFBSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CkBAIC03MCwyNyArNzEsMjMgQEAKICAgICAgICAgICAgIHJldHVybiBTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5zZW5kX2hlYWQoc2VsZikKIAogICAgIGRlZiBpc19jZ2koc2VsZik6Ci0gICAgICAgICIiIlRlc3Qgd2hldGhlciBzZWxmLnBhdGggY29ycmVzcG9uZHMgdG8gYSBDR0kgc2NyaXB0LAotICAgICAgICBhbmQgcmV0dXJuIGEgYm9vbGVhbi4KKyAgICAgICAgIiIiVGVzdCB3aGV0aGVyIHNlbGYucGF0aCBjb3JyZXNwb25kcyB0byBhIENHSSBzY3JpcHQuCiAKLSAgICAgICAgVGhpcyBmdW5jdGlvbiBzZXRzIHNlbGYuY2dpX2luZm8gdG8gYSB0dXBsZSAoZGlyLCByZXN0KQotICAgICAgICB3aGVuIGl0IHJldHVybnMgVHJ1ZSwgd2hlcmUgZGlyIGlzIHRoZSBkaXJlY3RvcnkgcGFydCBiZWZvcmUKLSAgICAgICAgdGhlIENHSSBzY3JpcHQgbmFtZS4gIE5vdGUgdGhhdCByZXN0IGJlZ2lucyB3aXRoIGEKLSAgICAgICAgc2xhc2ggaWYgaXQgaXMgbm90IGVtcHR5LgorICAgICAgICBSZXR1cm5zIFRydWUgYW5kIHVwZGF0ZXMgdGhlIGNnaV9pbmZvIGF0dHJpYnV0ZSB0byB0aGUgdHVwbGUKKyAgICAgICAgKGRpciwgcmVzdCkgaWYgc2VsZi5wYXRoIHJlcXVpcmVzIHJ1bm5pbmcgYSBDR0kgc2NyaXB0LgorICAgICAgICBSZXR1cm5zIEZhbHNlIG90aGVyd2lzZS4KIAotICAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0ZXN0cyB3aGV0aGVyIHRoZSBwYXRoCi0gICAgICAgIGJlZ2lucyB3aXRoIG9uZSBvZiB0aGUgc3RyaW5ncyBpbiB0aGUgbGlzdAotICAgICAgICBzZWxmLmNnaV9kaXJlY3RvcmllcyAoYW5kIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhICcvJwotICAgICAgICBvciB0aGUgZW5kIG9mIHRoZSBzdHJpbmcpLgorICAgICAgICBJZiBhbnkgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdGhlIGNhbGxlciBzaG91bGQgYXNzdW1lIHRoYXQKKyAgICAgICAgc2VsZi5wYXRoIHdhcyByZWplY3RlZCBhcyBpbnZhbGlkIGFuZCBhY3QgYWNjb3JkaW5nbHkuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdGVzdHMgd2hldGhlciB0aGUgbm9ybWFsaXplZCB1cmwKKyAgICAgICAgcGF0aCBiZWdpbnMgd2l0aCBvbmUgb2YgdGhlIHN0cmluZ3MgaW4gc2VsZi5jZ2lfZGlyZWN0b3JpZXMKKyAgICAgICAgKGFuZCB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYSAnLycgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nKS4KICAgICAgICAgIiIiCi0KLSAgICAgICAgcGF0aCA9IHNlbGYucGF0aAotCi0gICAgICAgIGZvciB4IGluIHNlbGYuY2dpX2RpcmVjdG9yaWVzOgotICAgICAgICAgICAgaSA9IGxlbih4KQotICAgICAgICAgICAgaWYgcGF0aFs6aV0gPT0geCBhbmQgKG5vdCBwYXRoW2k6XSBvciBwYXRoW2ldID09ICcvJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5jZ2lfaW5mbyA9IHBhdGhbOmldLCBwYXRoW2krMTpdCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgc3BsaXRwYXRoID0gX3VybF9jb2xsYXBzZV9wYXRoX3NwbGl0KHNlbGYucGF0aCkKKyAgICAgICAgaWYgc3BsaXRwYXRoWzBdIGluIHNlbGYuY2dpX2RpcmVjdG9yaWVzOgorICAgICAgICAgICAgc2VsZi5jZ2lfaW5mbyA9IHNwbGl0cGF0aAorICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBjZ2lfZGlyZWN0b3JpZXMgPSBbJy9jZ2ktYmluJywgJy9odGJpbiddCkBAIC0xNTgsNyArMTU1LDcgQEAKIAogICAgICAgICAjIFJlZmVyZW5jZTogaHR0cDovL2hvb2hvby5uY3NhLnVpdWMuZWR1L2NnaS9lbnYuaHRtbAogICAgICAgICAjIFhYWCBNdWNoIG9mIHRoZSBmb2xsb3dpbmcgY291bGQgYmUgcHJlcGFyZWQgYWhlYWQgb2YgdGltZSEKLSAgICAgICAgZW52ID0ge30KKyAgICAgICAgZW52ID0gY29weS5kZWVwY29weShvcy5lbnZpcm9uKQogICAgICAgICBlbnZbJ1NFUlZFUl9TT0ZUV0FSRSddID0gc2VsZi52ZXJzaW9uX3N0cmluZygpCiAgICAgICAgIGVudlsnU0VSVkVSX05BTUUnXSA9IHNlbGYuc2VydmVyLnNlcnZlcl9uYW1lCiAgICAgICAgIGVudlsnR0FURVdBWV9JTlRFUkZBQ0UnXSA9ICdDR0kvMS4xJwpAQCAtMjIwLDcgKzIxNyw2IEBACiAgICAgICAgIGZvciBrIGluICgnUVVFUllfU1RSSU5HJywgJ1JFTU9URV9IT1NUJywgJ0NPTlRFTlRfTEVOR1RIJywKICAgICAgICAgICAgICAgICAgICdIVFRQX1VTRVJfQUdFTlQnLCAnSFRUUF9DT09LSUUnLCAnSFRUUF9SRUZFUkVSJyk6CiAgICAgICAgICAgICBlbnYuc2V0ZGVmYXVsdChrLCAiIikKLSAgICAgICAgb3MuZW52aXJvbi51cGRhdGUoZW52KQogCiAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDAsICJTY3JpcHQgb3V0cHV0IGZvbGxvd3MiKQogCkBAIC0yNTIsNyArMjQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIG9zLmR1cDIoc2VsZi5yZmlsZS5maWxlbm8oKSwgMCkKICAgICAgICAgICAgICAgICBvcy5kdXAyKHNlbGYud2ZpbGUuZmlsZW5vKCksIDEpCi0gICAgICAgICAgICAgICAgb3MuZXhlY3ZlKHNjcmlwdGZpbGUsIGFyZ3MsIG9zLmVudmlyb24pCisgICAgICAgICAgICAgICAgb3MuZXhlY3ZlKHNjcmlwdGZpbGUsIGFyZ3MsIGVudikKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVfZXJyb3Ioc2VsZi5yZXF1ZXN0LCBzZWxmLmNsaWVudF9hZGRyZXNzKQogICAgICAgICAgICAgICAgIG9zLl9leGl0KDEyNykKQEAgLTI3OCw3ICsyNzQsOCBAQAogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluID0gc3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIgPSBzdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYgPSBlbnYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgaWYgc2VsZi5jb21tYW5kLmxvd2VyKCkgPT0gInBvc3QiIGFuZCBuYnl0ZXMgPiAwOgogICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJmaWxlLnJlYWQobmJ5dGVzKQpAQCAtMjkyLDYgKzI4OSw4IEBACiAgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKHN0ZG91dCkKICAgICAgICAgICAgIGlmIHN0ZGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcignJXMnLCBzdGRlcnIpCisgICAgICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCisgICAgICAgICAgICBwLnN0ZG91dC5jbG9zZSgpCiAgICAgICAgICAgICBzdGF0dXMgPSBwLnJldHVybmNvZGUKICAgICAgICAgICAgIGlmIHN0YXR1czoKICAgICAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ0dJIHNjcmlwdCBleGl0IHN0YXR1cyAlI3giLCBzdGF0dXMpCkBAIC0yOTksNiArMjk4LDQ2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5sb2dfbWVzc2FnZSgiQ0dJIHNjcmlwdCBleGl0ZWQgT0siKQogCiAKKyMgVE9ETyhncmVnb3J5LnAuc21pdGgpOiBNb3ZlIHRoaXMgaW50byBhbiBhcHByb3ByaWF0ZSBsaWJyYXJ5LgorZGVmIF91cmxfY29sbGFwc2VfcGF0aF9zcGxpdChwYXRoKToKKyAgICAiIiIKKyAgICBHaXZlbiBhIFVSTCBwYXRoLCByZW1vdmUgZXh0cmEgJy8ncyBhbmQgJy4nIHBhdGggZWxlbWVudHMgYW5kIGNvbGxhcHNlCisgICAgYW55ICcuLicgcmVmZXJlbmNlcy4KKworICAgIEltcGxlbWVudHMgc29tZXRoaW5nIGFraW4gdG8gUkZDLTIzOTYgNS4yIHN0ZXAgNiB0byBwYXJzZSByZWxhdGl2ZSBwYXRocy4KKworICAgIFJldHVybnM6IEEgdHVwbGUgb2YgKGhlYWQsIHRhaWwpIHdoZXJlIHRhaWwgaXMgZXZlcnl0aGluZyBhZnRlciB0aGUgZmluYWwgLworICAgIGFuZCBoZWFkIGlzIGV2ZXJ5dGhpbmcgYmVmb3JlIGl0LiAgSGVhZCB3aWxsIGFsd2F5cyBzdGFydCB3aXRoIGEgJy8nIGFuZCwKKyAgICBpZiBpdCBjb250YWlucyBhbnl0aGluZyBlbHNlLCBuZXZlciBoYXZlIGEgdHJhaWxpbmcgJy8nLgorCisgICAgUmFpc2VzOiBJbmRleEVycm9yIGlmIHRvbyBtYW55ICcuLicgb2NjdXIgd2l0aGluIHRoZSBwYXRoLgorICAgICIiIgorICAgICMgU2ltaWxhciB0byBvcy5wYXRoLnNwbGl0KG9zLnBhdGgubm9ybXBhdGgocGF0aCkpIGJ1dCBzcGVjaWZpYyB0byBVUkwKKyAgICAjIHBhdGggc2VtYW50aWNzIHJhdGhlciB0aGFuIGxvY2FsIG9wZXJhdGluZyBzeXN0ZW0gc2VtYW50aWNzLgorICAgIHBhdGhfcGFydHMgPSBbXQorICAgIGZvciBwYXJ0IGluIHBhdGguc3BsaXQoJy8nKToKKyAgICAgICAgaWYgcGFydCA9PSAnLic6CisgICAgICAgICAgICBwYXRoX3BhcnRzLmFwcGVuZCgnJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGhfcGFydHMuYXBwZW5kKHBhcnQpCisgICAgIyBGaWx0ZXIgb3V0IGJsYW5rIG5vbiB0cmFpbGluZyBwYXJ0cyBiZWZvcmUgY29uc3VtaW5nIHRoZSAnLi4nLgorICAgIHBhdGhfcGFydHMgPSBbcGFydCBmb3IgcGFydCBpbiBwYXRoX3BhcnRzWzotMV0gaWYgcGFydF0gKyBwYXRoX3BhcnRzWy0xOl0KKyAgICBpZiBwYXRoX3BhcnRzOgorICAgICAgICB0YWlsX3BhcnQgPSBwYXRoX3BhcnRzLnBvcCgpCisgICAgZWxzZToKKyAgICAgICAgdGFpbF9wYXJ0ID0gJycKKyAgICBoZWFkX3BhcnRzID0gW10KKyAgICBmb3IgcGFydCBpbiBwYXRoX3BhcnRzOgorICAgICAgICBpZiBwYXJ0ID09ICcuLic6CisgICAgICAgICAgICBoZWFkX3BhcnRzLnBvcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoZWFkX3BhcnRzLmFwcGVuZChwYXJ0KQorICAgIGlmIHRhaWxfcGFydCBhbmQgdGFpbF9wYXJ0ID09ICcuLic6CisgICAgICAgIGhlYWRfcGFydHMucG9wKCkKKyAgICAgICAgdGFpbF9wYXJ0ID0gJycKKyAgICByZXR1cm4gKCcvJyArICcvJy5qb2luKGhlYWRfcGFydHMpLCB0YWlsX3BhcnQpCisKKwogbm9ib2R5ID0gTm9uZQogCiBkZWYgbm9ib2R5X3VpZCgpOgpkaWZmIC0tZ2l0IGEvTGliL0NvbmZpZ1BhcnNlci5weSBiL0xpYi9Db25maWdQYXJzZXIucHkKaW5kZXggYzcyYWJiNy4uNmNmM2MyYSAxMDA2NDQKLS0tIGEvTGliL0NvbmZpZ1BhcnNlci5weQorKysgYi9MaWIvQ29uZmlnUGFyc2VyLnB5CkBAIC04Nyw2ICs4NywxMiBAQAogICAgICAgICB3cml0ZSB0aGUgY29uZmlndXJhdGlvbiBzdGF0ZSBpbiAuaW5pIGZvcm1hdAogIiIiCiAKK3RyeToKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCBhcyBfZGVmYXVsdF9kaWN0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBmYWxsYmFjayBmb3Igc2V0dXAucHkgd2hpY2ggaGFzbid0IHlldCBidWlsdCBfY29sbGVjdGlvbnMKKyAgICBfZGVmYXVsdF9kaWN0ID0gZGljdAorCiBpbXBvcnQgcmUKIAogX19hbGxfXyA9IFsiTm9TZWN0aW9uRXJyb3IiLCAiRHVwbGljYXRlU2VjdGlvbkVycm9yIiwgIk5vT3B0aW9uRXJyb3IiLApAQCAtMjE1LDEwICsyMjEsMTUgQEAKIAogCiBjbGFzcyBSYXdDb25maWdQYXJzZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZmF1bHRzPU5vbmUsIGRpY3RfdHlwZT1kaWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmYXVsdHM9Tm9uZSwgZGljdF90eXBlPV9kZWZhdWx0X2RpY3QsCisgICAgICAgICAgICAgICAgIGFsbG93X25vX3ZhbHVlPUZhbHNlKToKICAgICAgICAgc2VsZi5fZGljdCA9IGRpY3RfdHlwZQogICAgICAgICBzZWxmLl9zZWN0aW9ucyA9IHNlbGYuX2RpY3QoKQogICAgICAgICBzZWxmLl9kZWZhdWx0cyA9IHNlbGYuX2RpY3QoKQorICAgICAgICBpZiBhbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIHNlbGYuX29wdGNyZSA9IHNlbGYuT1BUQ1JFX05WCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9vcHRjcmUgPSBzZWxmLk9QVENSRQogICAgICAgICBpZiBkZWZhdWx0czoKICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRlZmF1bHRzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5fZGVmYXVsdHNbc2VsZi5vcHRpb254Zm9ybShrZXkpXSA9IHZhbHVlCkBAIC0zNjYsNyArMzc3LDcgQEAKICAgICAgICAgICAgIHJldHVybiAob3B0aW9uIGluIHNlbGYuX3NlY3Rpb25zW3NlY3Rpb25dCiAgICAgICAgICAgICAgICAgICAgIG9yIG9wdGlvbiBpbiBzZWxmLl9kZWZhdWx0cykKIAotICAgIGRlZiBzZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CisgICAgZGVmIHNldChzZWxmLCBzZWN0aW9uLCBvcHRpb24sIHZhbHVlPU5vbmUpOgogICAgICAgICAiIiJTZXQgYW4gb3B0aW9uLiIiIgogICAgICAgICBpZiBub3Qgc2VjdGlvbiBvciBzZWN0aW9uID09IERFRkFVTFRTRUNUOgogICAgICAgICAgICAgc2VjdGRpY3QgPSBzZWxmLl9kZWZhdWx0cwpAQCAtMzg3LDkgKzM5OCwxMSBAQAogICAgICAgICBmb3Igc2VjdGlvbiBpbiBzZWxmLl9zZWN0aW9uczoKICAgICAgICAgICAgIGZwLndyaXRlKCJbJXNdXG4iICUgc2VjdGlvbikKICAgICAgICAgICAgIGZvciAoa2V5LCB2YWx1ZSkgaW4gc2VsZi5fc2VjdGlvbnNbc2VjdGlvbl0uaXRlbXMoKToKLSAgICAgICAgICAgICAgICBpZiBrZXkgIT0gIl9fbmFtZV9fIjoKLSAgICAgICAgICAgICAgICAgICAgZnAud3JpdGUoIiVzID0gJXNcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5LCBzdHIodmFsdWUpLnJlcGxhY2UoJ1xuJywgJ1xuXHQnKSkpCisgICAgICAgICAgICAgICAgaWYga2V5ID09ICJfX25hbWVfXyI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlIGlzIG5vdCBOb25lKSBvciAoc2VsZi5fb3B0Y3JlID09IHNlbGYuT1BUQ1JFKToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gIiA9ICIuam9pbigoa2V5LCBzdHIodmFsdWUpLnJlcGxhY2UoJ1xuJywgJ1xuXHQnKSkpCisgICAgICAgICAgICAgICAgZnAud3JpdGUoIiVzXG4iICUgKGtleSkpCiAgICAgICAgICAgICBmcC53cml0ZSgiXG4iKQogCiAgICAgZGVmIHJlbW92ZV9vcHRpb24oc2VsZiwgc2VjdGlvbiwgb3B0aW9uKToKQEAgLTQzMCw2ICs0NDMsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJ5IGFueSAjIHNwYWNlL3RhYgogICAgICAgICByJyg/UDx2YWx1ZT4uKikkJyAgICAgICAgICAgICAgICAgICAgICMgZXZlcnl0aGluZyB1cCB0byBlb2wKICAgICAgICAgKQorICAgIE9QVENSRV9OViA9IHJlLmNvbXBpbGUoCisgICAgICAgIHInKD9QPG9wdGlvbj5bXjo9XHNdW146PV0qKScgICAgICAgICAgIyB2ZXJ5IHBlcm1pc3NpdmUhCisgICAgICAgIHInXHMqKD86JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbnkgbnVtYmVyIG9mIHNwYWNlL3RhYiwKKyAgICAgICAgcicoP1A8dmk+Wzo9XSlccyonICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlcGFyYXRvciAoZWl0aGVyIDogb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjID0pLCBmb2xsb3dlZCBieSBhbnkgIworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3BhY2UvdGFiCisgICAgICAgIHInKD9QPHZhbHVlPi4qKSk/JCcgICAgICAgICAgICAgICAgICAgIyBldmVyeXRoaW5nIHVwIHRvIGVvbAorICAgICAgICApCiAKICAgICBkZWYgX3JlYWQoc2VsZiwgZnAsIGZwbmFtZSk6CiAgICAgICAgICIiIlBhcnNlIGEgc2VjdGlvbmVkIHNldHVwIGZpbGUuCkBAIC00NDEsMTAgKzQ2MywxMCBAQAogICAgICAgICBsZWFkaW5nIHdoaXRlc3BhY2UuICBCbGFuayBsaW5lcywgbGluZXMgYmVnaW5uaW5nIHdpdGggYSAnIycsCiAgICAgICAgIGFuZCBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgZWxzZSBhcmUgaWdub3JlZC4KICAgICAgICAgIiIiCi0gICAgICAgIGN1cnNlY3QgPSBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm9uZSwgb3IgYSBkaWN0aW9uYXJ5CisgICAgICAgIGN1cnNlY3QgPSBOb25lICAgICAgICAgICAgICAgICAgICAgICAgIyBOb25lLCBvciBhIGRpY3Rpb25hcnkKICAgICAgICAgb3B0bmFtZSA9IE5vbmUKICAgICAgICAgbGluZW5vID0gMAotICAgICAgICBlID0gTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vbmUsIG9yIGFuIGV4Y2VwdGlvbgorICAgICAgICBlID0gTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm9uZSwgb3IgYW4gZXhjZXB0aW9uCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQogICAgICAgICAgICAgaWYgbm90IGxpbmU6CkBAIC00NjAsNyArNDgyLDcgQEAKICAgICAgICAgICAgIGlmIGxpbmVbMF0uaXNzcGFjZSgpIGFuZCBjdXJzZWN0IGlzIG5vdCBOb25lIGFuZCBvcHRuYW1lOgogICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgaWYgdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnNlY3Rbb3B0bmFtZV0gPSAiJXNcbiVzIiAlIChjdXJzZWN0W29wdG5hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgY3Vyc2VjdFtvcHRuYW1lXS5hcHBlbmQodmFsdWUpCiAgICAgICAgICAgICAjIGEgc2VjdGlvbiBoZWFkZXIgb3Igb3B0aW9uIGhlYWRlcj8KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBpcyBpdCBhIHNlY3Rpb24gaGVhZGVyPwpAQCAtNDgyLDIxICs1MDQsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTWlzc2luZ1NlY3Rpb25IZWFkZXJFcnJvcihmcG5hbWUsIGxpbmVubywgbGluZSkKICAgICAgICAgICAgICAgICAjIGFuIG9wdGlvbiBsaW5lPwogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1vID0gc2VsZi5PUFRDUkUubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgbW8gPSBzZWxmLl9vcHRjcmUubWF0Y2gobGluZSkKICAgICAgICAgICAgICAgICAgICAgaWYgbW86CiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRuYW1lLCB2aSwgb3B0dmFsID0gbW8uZ3JvdXAoJ29wdGlvbicsICd2aScsICd2YWx1ZScpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB2aSBpbiAoJz0nLCAnOicpIGFuZCAnOycgaW4gb3B0dmFsOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJzsnIGlzIGEgY29tbWVudCBkZWxpbWl0ZXIgb25seSBpZiBpdCBmb2xsb3dzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhIHNwYWNpbmcgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gb3B0dmFsLmZpbmQoJzsnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBvcyAhPSAtMSBhbmQgb3B0dmFsW3Bvcy0xXS5pc3NwYWNlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHZhbCA9IG9wdHZhbFs6cG9zXQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0dmFsID0gb3B0dmFsLnN0cmlwKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICMgYWxsb3cgZW1wdHkgdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBvcHR2YWwgPT0gJyIiJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHR2YWwgPSAnJwogICAgICAgICAgICAgICAgICAgICAgICAgb3B0bmFtZSA9IHNlbGYub3B0aW9ueGZvcm0ob3B0bmFtZS5yc3RyaXAoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNlY3Rbb3B0bmFtZV0gPSBvcHR2YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBjaGVjayBpcyBmaW5lIGJlY2F1c2UgdGhlIE9QVENSRSBjYW5ub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbWF0Y2ggaWYgaXQgd291bGQgc2V0IG9wdHZhbCB0byBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcHR2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmkgaW4gKCc9JywgJzonKSBhbmQgJzsnIGluIG9wdHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAnOycgaXMgYSBjb21tZW50IGRlbGltaXRlciBvbmx5IGlmIGl0IGZvbGxvd3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhIHNwYWNpbmcgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG9wdHZhbC5maW5kKCc7JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcG9zICE9IC0xIGFuZCBvcHR2YWxbcG9zLTFdLmlzc3BhY2UoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHZhbCA9IG9wdHZhbFs6cG9zXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHZhbCA9IG9wdHZhbC5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGxvdyBlbXB0eSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcHR2YWwgPT0gJyIiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0dmFsID0gJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzZWN0W29wdG5hbWVdID0gW29wdHZhbF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZWxlc3Mgb3B0aW9uIGhhbmRsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2VjdFtvcHRuYW1lXSA9IG9wdHZhbAogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgIyBhIG5vbi1mYXRhbCBwYXJzaW5nIGVycm9yIG9jY3VycmVkLiAgc2V0IHVwIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgIyBleGNlcHRpb24gYnV0IGtlZXAgZ29pbmcuIHRoZSBleGNlcHRpb24gd2lsbCBiZQpAQCAtNTA5LDYgKzUzNyw0NSBAQAogICAgICAgICBpZiBlOgogICAgICAgICAgICAgcmFpc2UgZQogCisgICAgICAgICMgam9pbiB0aGUgbXVsdGktbGluZSB2YWx1ZXMgY29sbGVjdGVkIHdoaWxlIHJlYWRpbmcKKyAgICAgICAgYWxsX3NlY3Rpb25zID0gW3NlbGYuX2RlZmF1bHRzXQorICAgICAgICBhbGxfc2VjdGlvbnMuZXh0ZW5kKHNlbGYuX3NlY3Rpb25zLnZhbHVlcygpKQorICAgICAgICBmb3Igb3B0aW9ucyBpbiBhbGxfc2VjdGlvbnM6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsIGluIG9wdGlvbnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbbmFtZV0gPSAnXG4nLmpvaW4odmFsKQorCitpbXBvcnQgVXNlckRpY3QgYXMgX1VzZXJEaWN0CisKK2NsYXNzIF9DaGFpbm1hcChfVXNlckRpY3QuRGljdE1peGluKToKKyAgICAiIiJDb21iaW5lIG11bHRpcGxlIG1hcHBpbmdzIGZvciBzdWNjZXNzaXZlIGxvb2t1cHMuCisKKyAgICBGb3IgZXhhbXBsZSwgdG8gZW11bGF0ZSBQeXRob24ncyBub3JtYWwgbG9va3VwIHNlcXVlbmNlOgorCisgICAgICAgIGltcG9ydCBfX2J1aWx0aW5fXworICAgICAgICBweWxvb2t1cCA9IF9DaGFpbm1hcChsb2NhbHMoKSwgZ2xvYmFscygpLCB2YXJzKF9fYnVpbHRpbl9fKSkKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbWFwcyk6CisgICAgICAgIHNlbGYuX21hcHMgPSBtYXBzCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gc2VsZi5fbWFwczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFwcGluZ1trZXldCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgc2VlbiA9IHNldCgpCisgICAgICAgIGZvciBtYXBwaW5nIGluIHNlbGZfbWFwczoKKyAgICAgICAgICAgIGZvciBrZXkgaW4gbWFwcGluZzoKKyAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluIHNlZW46CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KQorICAgICAgICAgICAgICAgICAgICBzZWVuLmFkZChrZXkpCisgICAgICAgIHJldHVybiByZXN1bHQKIAogY2xhc3MgQ29uZmlnUGFyc2VyKFJhd0NvbmZpZ1BhcnNlcik6CiAKQEAgLTUyNCwyMyArNTkxLDI1IEBACiAKICAgICAgICAgVGhlIHNlY3Rpb24gREVGQVVMVCBpcyBzcGVjaWFsLgogICAgICAgICAiIiIKLSAgICAgICAgZCA9IHNlbGYuX2RlZmF1bHRzLmNvcHkoKQorICAgICAgICBzZWN0aW9uZGljdCA9IHt9CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGQudXBkYXRlKHNlbGYuX3NlY3Rpb25zW3NlY3Rpb25dKQorICAgICAgICAgICAgc2VjdGlvbmRpY3QgPSBzZWxmLl9zZWN0aW9uc1tzZWN0aW9uXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICBpZiBzZWN0aW9uICE9IERFRkFVTFRTRUNUOgogICAgICAgICAgICAgICAgIHJhaXNlIE5vU2VjdGlvbkVycm9yKHNlY3Rpb24pCiAgICAgICAgICMgVXBkYXRlIHdpdGggdGhlIGVudHJ5IHNwZWNpZmljIHZhcmlhYmxlcworICAgICAgICB2YXJkaWN0ID0ge30KICAgICAgICAgaWYgdmFyczoKICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHZhcnMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICBkW3NlbGYub3B0aW9ueGZvcm0oa2V5KV0gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHZhcmRpY3Rbc2VsZi5vcHRpb254Zm9ybShrZXkpXSA9IHZhbHVlCisgICAgICAgIGQgPSBfQ2hhaW5tYXAodmFyZGljdCwgc2VjdGlvbmRpY3QsIHNlbGYuX2RlZmF1bHRzKQogICAgICAgICBvcHRpb24gPSBzZWxmLm9wdGlvbnhmb3JtKG9wdGlvbikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdmFsdWUgPSBkW29wdGlvbl0KICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcmFpc2UgTm9PcHRpb25FcnJvcihvcHRpb24sIHNlY3Rpb24pCiAKLSAgICAgICAgaWYgcmF3OgorICAgICAgICBpZiByYXcgb3IgdmFsdWUgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiB2YWx1ZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVycG9sYXRlKHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUsIGQpCkBAIC01ODMsNyArNjUyLDcgQEAKICAgICAgICAgZGVwdGggPSBNQVhfSU5URVJQT0xBVElPTl9ERVBUSAogICAgICAgICB3aGlsZSBkZXB0aDogICAgICAgICAgICAgICAgICAgICMgTG9vcCB0aHJvdWdoIHRoaXMgdW50aWwgaXQncyBkb25lCiAgICAgICAgICAgICBkZXB0aCAtPSAxCi0gICAgICAgICAgICBpZiAiJSgiIGluIHZhbHVlOgorICAgICAgICAgICAgaWYgdmFsdWUgYW5kICIlKCIgaW4gdmFsdWU6CiAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9LRVlDUkUuc3ViKHNlbGYuX2ludGVycG9sYXRpb25fcmVwbGFjZSwgdmFsdWUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICUgdmFycwpAQCAtNTkyLDcgKzY2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCwgZS5hcmdzWzBdKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiAiJSgiIGluIHZhbHVlOgorICAgICAgICBpZiB2YWx1ZSBhbmQgIiUoIiBpbiB2YWx1ZToKICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25EZXB0aEVycm9yKG9wdGlvbiwgc2VjdGlvbiwgcmF3dmFsKQogICAgICAgICByZXR1cm4gdmFsdWUKIApAQCAtNjU0LDE3ICs3MjMsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCBzZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAiJyUlJyBtdXN0IGJlIGZvbGxvd2VkIGJ5ICclJScgb3IgJygnLCBmb3VuZDogJXIiICUgKHJlc3QsKSkKIAotICAgIGRlZiBzZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CisgICAgZGVmIHNldChzZWxmLCBzZWN0aW9uLCBvcHRpb24sIHZhbHVlPU5vbmUpOgogICAgICAgICAiIiJTZXQgYW4gb3B0aW9uLiAgRXh0ZW5kIENvbmZpZ1BhcnNlci5zZXQ6IGNoZWNrIGZvciBzdHJpbmcgdmFsdWVzLiIiIgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm9wdGlvbiB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzIikKLSAgICAgICAgIyBjaGVjayBmb3IgYmFkIHBlcmNlbnQgc2lnbnM6Ci0gICAgICAgICMgZmlyc3QsIHJlcGxhY2UgYWxsICJnb29kIiBpbnRlcnBvbGF0aW9ucwotICAgICAgICB0bXBfdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCclJScsICcnKQotICAgICAgICB0bXBfdmFsdWUgPSBzZWxmLl9pbnRlcnB2YXJfcmUuc3ViKCcnLCB0bXBfdmFsdWUpCi0gICAgICAgICMgdGhlbiwgY2hlY2sgaWYgdGhlcmUncyBhIGxvbmUgcGVyY2VudCBzaWduIGxlZnQKLSAgICAgICAgcGVyY2VudF9pbmRleCA9IHRtcF92YWx1ZS5maW5kKCclJykKLSAgICAgICAgaWYgcGVyY2VudF9pbmRleCAhPSAtMToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgaW50ZXJwb2xhdGlvbiBzeW50YXggaW4gJXIgYXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gJWQiICUgKHZhbHVlLCBwZXJjZW50X2luZGV4KSkKKyAgICAgICAgIyBUaGUgb25seSBsZWdhbCBub24tc3RyaW5nIHZhbHVlIGlmIHdlIGFsbG93IHZhbHVlbGVzcworICAgICAgICAjIG9wdGlvbnMgaXMgTm9uZSwgc28gd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdmFsdWUgaXMgYQorICAgICAgICAjIHN0cmluZyBpZjoKKyAgICAgICAgIyAtIHdlIGRvIG5vdCBhbGxvdyB2YWx1ZWxlc3Mgb3B0aW9ucywgb3IKKyAgICAgICAgIyAtIHdlIGFsbG93IHZhbHVlbGVzcyBvcHRpb25zIGJ1dCB0aGUgdmFsdWUgaXMgbm90IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fb3B0Y3JlIGlzIHNlbGYuT1BUQ1JFIG9yIHZhbHVlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigib3B0aW9uIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MiKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgY2hlY2sgZm9yIGJhZCBwZXJjZW50IHNpZ25zOgorICAgICAgICAgICAgIyBmaXJzdCwgcmVwbGFjZSBhbGwgImdvb2QiIGludGVycG9sYXRpb25zCisgICAgICAgICAgICB0bXBfdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCclJScsICcnKQorICAgICAgICAgICAgdG1wX3ZhbHVlID0gc2VsZi5faW50ZXJwdmFyX3JlLnN1YignJywgdG1wX3ZhbHVlKQorICAgICAgICAgICAgIyB0aGVuLCBjaGVjayBpZiB0aGVyZSdzIGEgbG9uZSBwZXJjZW50IHNpZ24gbGVmdAorICAgICAgICAgICAgaWYgJyUnIGluIHRtcF92YWx1ZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGludGVycG9sYXRpb24gc3ludGF4IGluICVyIGF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uICVkIiAlICh2YWx1ZSwgdG1wX3ZhbHVlLmZpbmQoJyUnKSkpCiAgICAgICAgIENvbmZpZ1BhcnNlci5zZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKZGlmZiAtLWdpdCBhL0xpYi9Db29raWUucHkgYi9MaWIvQ29va2llLnB5CmluZGV4IDYwMGQyMTIuLjMyMzQ1MGIgMTAwNjQ0Ci0tLSBhL0xpYi9Db29raWUucHkKKysrIGIvTGliL0Nvb2tpZS5weQpAQCAtMjU4LDYgKzI1OCwxMSBAQAogICAgICdcMDMzJyA6ICdcXDAzMycsICAnXDAzNCcgOiAnXFwwMzQnLCAgJ1wwMzUnIDogJ1xcMDM1JywKICAgICAnXDAzNicgOiAnXFwwMzYnLCAgJ1wwMzcnIDogJ1xcMDM3JywKIAorICAgICMgQmVjYXVzZSBvZiB0aGUgd2F5IGJyb3dzZXJzIHJlYWxseSBoYW5kbGUgY29va2llcyAoYXMgb3Bwb3NlZAorICAgICMgdG8gd2hhdCB0aGUgUkZDIHNheXMpIHdlIGFsc28gZW5jb2RlICwgYW5kIDsKKworICAgICcsJyA6ICdcXDA1NCcsICc7JyA6ICdcXDA3MycsCisKICAgICAnIicgOiAnXFwiJywgICAgICAgJ1xcJyA6ICdcXFxcJywKIAogICAgICdcMTc3JyA6ICdcXDE3NycsICAnXDIwMCcgOiAnXFwyMDAnLCAgJ1wyMDEnIDogJ1xcMjAxJywKQEAgLTQ3Nyw3ICs0ODIsNyBAQAogICAgICAgICBkb2N1bWVudC5jb29raWUgPSBcIiVzXCI7CiAgICAgICAgIC8vIGVuZCBoaWRpbmcgLS0+CiAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICAiIiIgJSAoIHNlbGYuT3V0cHV0U3RyaW5nKGF0dHJzKSwgKQorICAgICAgICAiIiIgJSAoIHNlbGYuT3V0cHV0U3RyaW5nKGF0dHJzKS5yZXBsYWNlKCciJyxyJ1wiJyksICkKICAgICAjIGVuZCBqc19vdXRwdXQoKQogCiAgICAgZGVmIE91dHB1dFN0cmluZyhzZWxmLCBhdHRycz1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi9Eb2NYTUxSUENTZXJ2ZXIucHkgYi9MaWIvRG9jWE1MUlBDU2VydmVyLnB5CmluZGV4IDQzMmIzYzMuLjQwNjRlYzIgMTAwNjQ0Ci0tLSBhL0xpYi9Eb2NYTUxSUENTZXJ2ZXIucHkKKysrIGIvTGliL0RvY1hNTFJQQ1NlcnZlci5weQpAQCAtMjQwLDEwICsyNDAsNiBAQAogICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShyZXNwb25zZSkKIAotICAgICAgICAjIHNodXQgZG93biB0aGUgY29ubmVjdGlvbgotICAgICAgICBzZWxmLndmaWxlLmZsdXNoKCkKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uLnNodXRkb3duKDEpCi0KIGNsYXNzIERvY1hNTFJQQ1NlcnZlciggIFNpbXBsZVhNTFJQQ1NlcnZlciwKICAgICAgICAgICAgICAgICAgICAgICAgIFhNTFJQQ0RvY0dlbmVyYXRvcik6CiAgICAgIiIiWE1MLVJQQyBhbmQgSFRNTCBkb2N1bWVudGF0aW9uIHNlcnZlci4KZGlmZiAtLWdpdCBhL0xpYi9IVE1MUGFyc2VyLnB5IGIvTGliL0hUTUxQYXJzZXIucHkKaW5kZXggN2NlZTQ3YS4uNGZkYzA5YSAxMDA2NDQKLS0tIGEvTGliL0hUTUxQYXJzZXIucHkKKysrIGIvTGliL0hUTUxQYXJzZXIucHkKQEAgLTM2NywxMyArMzY3LDE2IEBACiAgICAgICAgICAgICByZXR1cm4gcwogICAgICAgICBkZWYgcmVwbGFjZUVudGl0aWVzKHMpOgogICAgICAgICAgICAgcyA9IHMuZ3JvdXBzKClbMF0KLSAgICAgICAgICAgIGlmIHNbMF0gPT0gIiMiOgotICAgICAgICAgICAgICAgIHMgPSBzWzE6XQotICAgICAgICAgICAgICAgIGlmIHNbMF0gaW4gWyd4JywnWCddOgotICAgICAgICAgICAgICAgICAgICBjID0gaW50KHNbMTpdLCAxNikKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBjID0gaW50KHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNocihjKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNbMF0gPT0gIiMiOgorICAgICAgICAgICAgICAgICAgICBzID0gc1sxOl0KKyAgICAgICAgICAgICAgICAgICAgaWYgc1swXSBpbiBbJ3gnLCdYJ106CisgICAgICAgICAgICAgICAgICAgICAgICBjID0gaW50KHNbMTpdLCAxNikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBpbnQocykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNocihjKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuICcmIycrcysnOycKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBDYW5ub3QgdXNlIG5hbWUyY29kZXBvaW50IGRpcmVjdGx5LCBiZWNhdXNlIEhUTUxQYXJzZXIgc3VwcG9ydHMgYXBvcywKICAgICAgICAgICAgICAgICAjIHdoaWNoIGlzIG5vdCBwYXJ0IG9mIEhUTUwgNApkaWZmIC0tZ2l0IGEvTGliL1F1ZXVlLnB5IGIvTGliL1F1ZXVlLnB5CmluZGV4IDc3M2I2ODAuLjJkYjhkNzYgMTAwNjQ0Ci0tLSBhL0xpYi9RdWV1ZS5weQorKysgYi9MaWIvUXVldWUucHkKQEAgLTEsNiArMSwxMCBAQAogIiIiQSBtdWx0aS1wcm9kdWNlciwgbXVsdGktY29uc3VtZXIgcXVldWUuIiIiCiAKIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyBfdGltZQordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcgYXMgX3RocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBkdW1teV90aHJlYWRpbmcgYXMgX3RocmVhZGluZwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIGltcG9ydCBoZWFwcQogCkBAIC0yMCwyNiArMjQsMjIgQEAKICAgICBJZiBtYXhzaXplIGlzIDw9IDAsIHRoZSBxdWV1ZSBzaXplIGlzIGluZmluaXRlLgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhzaXplPTApOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIGltcG9ydCBkdW1teV90aHJlYWRpbmcgYXMgdGhyZWFkaW5nCiAgICAgICAgIHNlbGYubWF4c2l6ZSA9IG1heHNpemUKICAgICAgICAgc2VsZi5faW5pdChtYXhzaXplKQogICAgICAgICAjIG11dGV4IG11c3QgYmUgaGVsZCB3aGVuZXZlciB0aGUgcXVldWUgaXMgbXV0YXRpbmcuICBBbGwgbWV0aG9kcwogICAgICAgICAjIHRoYXQgYWNxdWlyZSBtdXRleCBtdXN0IHJlbGVhc2UgaXQgYmVmb3JlIHJldHVybmluZy4gIG11dGV4CiAgICAgICAgICMgaXMgc2hhcmVkIGJldHdlZW4gdGhlIHRocmVlIGNvbmRpdGlvbnMsIHNvIGFjcXVpcmluZyBhbmQKICAgICAgICAgIyByZWxlYXNpbmcgdGhlIGNvbmRpdGlvbnMgYWxzbyBhY3F1aXJlcyBhbmQgcmVsZWFzZXMgbXV0ZXguCi0gICAgICAgIHNlbGYubXV0ZXggPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYubXV0ZXggPSBfdGhyZWFkaW5nLkxvY2soKQogICAgICAgICAjIE5vdGlmeSBub3RfZW1wdHkgd2hlbmV2ZXIgYW4gaXRlbSBpcyBhZGRlZCB0byB0aGUgcXVldWU7IGEKICAgICAgICAgIyB0aHJlYWQgd2FpdGluZyB0byBnZXQgaXMgbm90aWZpZWQgdGhlbi4KLSAgICAgICAgc2VsZi5ub3RfZW1wdHkgPSB0aHJlYWRpbmcuQ29uZGl0aW9uKHNlbGYubXV0ZXgpCisgICAgICAgIHNlbGYubm90X2VtcHR5ID0gX3RocmVhZGluZy5Db25kaXRpb24oc2VsZi5tdXRleCkKICAgICAgICAgIyBOb3RpZnkgbm90X2Z1bGwgd2hlbmV2ZXIgYW4gaXRlbSBpcyByZW1vdmVkIGZyb20gdGhlIHF1ZXVlOwogICAgICAgICAjIGEgdGhyZWFkIHdhaXRpbmcgdG8gcHV0IGlzIG5vdGlmaWVkIHRoZW4uCi0gICAgICAgIHNlbGYubm90X2Z1bGwgPSB0aHJlYWRpbmcuQ29uZGl0aW9uKHNlbGYubXV0ZXgpCisgICAgICAgIHNlbGYubm90X2Z1bGwgPSBfdGhyZWFkaW5nLkNvbmRpdGlvbihzZWxmLm11dGV4KQogICAgICAgICAjIE5vdGlmeSBhbGxfdGFza3NfZG9uZSB3aGVuZXZlciB0aGUgbnVtYmVyIG9mIHVuZmluaXNoZWQgdGFza3MKICAgICAgICAgIyBkcm9wcyB0byB6ZXJvOyB0aHJlYWQgd2FpdGluZyB0byBqb2luKCkgaXMgbm90aWZpZWQgdG8gcmVzdW1lCi0gICAgICAgIHNlbGYuYWxsX3Rhc2tzX2RvbmUgPSB0aHJlYWRpbmcuQ29uZGl0aW9uKHNlbGYubXV0ZXgpCisgICAgICAgIHNlbGYuYWxsX3Rhc2tzX2RvbmUgPSBfdGhyZWFkaW5nLkNvbmRpdGlvbihzZWxmLm11dGV4KQogICAgICAgICBzZWxmLnVuZmluaXNoZWRfdGFza3MgPSAwCiAKICAgICBkZWYgdGFza19kb25lKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL1NpbXBsZVhNTFJQQ1NlcnZlci5weSBiL0xpYi9TaW1wbGVYTUxSUENTZXJ2ZXIucHkKaW5kZXggNmFmMmYyZi4uYjJhNTYxMCAxMDA2NDQKLS0tIGEvTGliL1NpbXBsZVhNTFJQQ1NlcnZlci5weQorKysgYi9MaWIvU2ltcGxlWE1MUlBDU2VydmVyLnB5CkBAIC0xMDYsNiArMTA2LDcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHJlCiB0cnk6CiAgICAgaW1wb3J0IGZjbnRsCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0xNjAsOCArMTYxLDkgQEAKICAgICAiIiJNaXgtaW4gY2xhc3MgdGhhdCBkaXNwYXRjaGVzIFhNTC1SUEMgcmVxdWVzdHMuCiAKICAgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcmVnaXN0ZXIgWE1MLVJQQyBtZXRob2QgaGFuZGxlcnMKLSAgICBhbmQgdGhlbiB0byBkaXNwYXRjaCB0aGVtLiBUaGVyZSBzaG91bGQgbmV2ZXIgYmUgYW55Ci0gICAgcmVhc29uIHRvIGluc3RhbnRpYXRlIHRoaXMgY2xhc3MgZGlyZWN0bHkuCisgICAgYW5kIHRoZW4gdG8gZGlzcGF0Y2ggdGhlbS4gVGhpcyBjbGFzcyBkb2Vzbid0IG5lZWQgdG8gYmUKKyAgICBpbnN0YW5jZWQgZGlyZWN0bHkgd2hlbiB1c2VkIGJ5IFNpbXBsZVhNTFJQQ1NlcnZlciBidXQgaXQKKyAgICBjYW4gYmUgaW5zdGFuY2VkIHdoZW4gdXNlZCBieSB0aGUgTXVsdGlQYXRoWE1MUlBDU2VydmVyLgogICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFsbG93X25vbmU9RmFsc2UsIGVuY29kaW5nPU5vbmUpOgpAQCAtMjM2LDcgKzIzOCw3IEBACiAKICAgICAgICAgc2VsZi5mdW5jcy51cGRhdGUoeydzeXN0ZW0ubXVsdGljYWxsJyA6IHNlbGYuc3lzdGVtX211bHRpY2FsbH0pCiAKLSAgICBkZWYgX21hcnNoYWxlZF9kaXNwYXRjaChzZWxmLCBkYXRhLCBkaXNwYXRjaF9tZXRob2QgPSBOb25lKToKKyAgICBkZWYgX21hcnNoYWxlZF9kaXNwYXRjaChzZWxmLCBkYXRhLCBkaXNwYXRjaF9tZXRob2QgPSBOb25lLCBwYXRoID0gTm9uZSk6CiAgICAgICAgICIiIkRpc3BhdGNoZXMgYW4gWE1MLVJQQyBtZXRob2QgZnJvbSBtYXJzaGFsbGVkIChYTUwpIGRhdGEuCiAKICAgICAgICAgWE1MLVJQQyBtZXRob2RzIGFyZSBkaXNwYXRjaGVkIGZyb20gdGhlIG1hcnNoYWxsZWQgKFhNTCkgZGF0YQpAQCAtNDMwLDYgKzQzMiwzMSBAQAogICAgICMgcGF0aHMgbm90IG9uIHRoaXMgbGlzdCB3aWxsIHJlc3VsdCBpbiBhIDQwNCBlcnJvci4KICAgICBycGNfcGF0aHMgPSAoJy8nLCAnL1JQQzInKQogCisgICAgI2lmIG5vdCBOb25lLCBlbmNvZGUgcmVzcG9uc2VzIGxhcmdlciB0aGFuIHRoaXMsIGlmIHBvc3NpYmxlCisgICAgZW5jb2RlX3RocmVzaG9sZCA9IDE0MDAgI2EgY29tbW9uIE1UVQorCisgICAgI092ZXJyaWRlIGZvcm0gU3RyZWFtUmVxdWVzdEhhbmRsZXI6IGZ1bGwgYnVmZmVyaW5nIG9mIG91dHB1dAorICAgICNhbmQgbm8gTmFnbGUuCisgICAgd2J1ZnNpemUgPSAtMQorICAgIGRpc2FibGVfbmFnbGVfYWxnb3JpdGhtID0gVHJ1ZQorCisgICAgIyBhIHJlIHRvIG1hdGNoIGEgZ3ppcCBBY2NlcHQtRW5jb2RpbmcKKyAgICBhZXBhdHRlcm4gPSByZS5jb21waWxlKHIiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBccyogKFteXHM7XSspIFxzKiAgICAgICAgICAgICNjb250ZW50LWNvZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICg7XHMqIHEgXHMqPVxzKiAoWzAtOVwuXSspKT8gI3EKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiIsIHJlLlZFUkJPU0UgfCByZS5JR05PUkVDQVNFKQorCisgICAgZGVmIGFjY2VwdF9lbmNvZGluZ3Moc2VsZik6CisgICAgICAgIHIgPSB7fQorICAgICAgICBhZSA9IHNlbGYuaGVhZGVycy5nZXQoIkFjY2VwdC1FbmNvZGluZyIsICIiKQorICAgICAgICBmb3IgZSBpbiBhZS5zcGxpdCgiLCIpOgorICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLmFlcGF0dGVybi5tYXRjaChlKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgdiA9IG1hdGNoLmdyb3VwKDMpCisgICAgICAgICAgICAgICAgdiA9IGZsb2F0KHYpIGlmIHYgZWxzZSAxLjAKKyAgICAgICAgICAgICAgICByW21hdGNoLmdyb3VwKDEpXSA9IHYKKyAgICAgICAgcmV0dXJuIHIKKwogICAgIGRlZiBpc19ycGNfcGF0aF92YWxpZChzZWxmKToKICAgICAgICAgaWYgc2VsZi5ycGNfcGF0aHM6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXRoIGluIHNlbGYucnBjX3BhdGhzCkBAIC00NjMsMTMgKzQ5MCwxNyBAQAogICAgICAgICAgICAgICAgIHNpemVfcmVtYWluaW5nIC09IGxlbihMWy0xXSkKICAgICAgICAgICAgIGRhdGEgPSAnJy5qb2luKEwpCiAKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmRlY29kZV9yZXF1ZXN0X2NvbnRlbnQoZGF0YSkKKyAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gI3Jlc3BvbnNlIGhhcyBiZWVuIHNlbnQKKwogICAgICAgICAgICAgIyBJbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBTaW1wbGVYTUxSUENTZXJ2ZXIsIF9kaXNwYXRjaAogICAgICAgICAgICAgIyBjb3VsZCBiZSBvdmVycmlkZGVuIGluIHRoaXMgY2xhc3MsIGluc3RlYWQgb2YgaW4KICAgICAgICAgICAgICMgU2ltcGxlWE1MUlBDRGlzcGF0Y2hlci4gVG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHksCiAgICAgICAgICAgICAjIGNoZWNrIHRvIHNlZSBpZiBhIHN1YmNsYXNzIGltcGxlbWVudHMgX2Rpc3BhdGNoIGFuZCBkaXNwYXRjaAogICAgICAgICAgICAgIyB1c2luZyB0aGF0IG1ldGhvZCBpZiBwcmVzZW50LgogICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnNlcnZlci5fbWFyc2hhbGVkX2Rpc3BhdGNoKAotICAgICAgICAgICAgICAgICAgICBkYXRhLCBnZXRhdHRyKHNlbGYsICdfZGlzcGF0Y2gnLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBkYXRhLCBnZXRhdHRyKHNlbGYsICdfZGlzcGF0Y2gnLCBOb25lKSwgc2VsZi5wYXRoCiAgICAgICAgICAgICAgICAgKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOiAjIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBtb2R1bGUgaXMgYnVnZ3kKICAgICAgICAgICAgICMgaW50ZXJuYWwgZXJyb3IsIHJlcG9ydCBhcyBIVFRQIHNlcnZlciBlcnJvcgpAQCAtNDgxLDE4ICs1MTIsNDEgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJYLWV4Y2VwdGlvbiIsIHN0cihlKSkKICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJYLXRyYWNlYmFjayIsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCiAKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgIjAiKQogICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIGdvdCBhIHZhbGlkIFhNTCBSUEMgcmVzcG9uc2UKICAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCiAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAidGV4dC94bWwiKQorICAgICAgICAgICAgaWYgc2VsZi5lbmNvZGVfdGhyZXNob2xkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIGxlbihyZXNwb25zZSkgPiBzZWxmLmVuY29kZV90aHJlc2hvbGQ6CisgICAgICAgICAgICAgICAgICAgIHEgPSBzZWxmLmFjY2VwdF9lbmNvZGluZ3MoKS5nZXQoImd6aXAiLCAwKQorICAgICAgICAgICAgICAgICAgICBpZiBxOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geG1scnBjbGliLmd6aXBfZW5jb2RlKHJlc3BvbnNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciLCAiZ3ppcCIpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIHN0cihsZW4ocmVzcG9uc2UpKSkKICAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShyZXNwb25zZSkKIAotICAgICAgICAgICAgIyBzaHV0IGRvd24gdGhlIGNvbm5lY3Rpb24KLSAgICAgICAgICAgIHNlbGYud2ZpbGUuZmx1c2goKQotICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnNodXRkb3duKDEpCisgICAgZGVmIGRlY29kZV9yZXF1ZXN0X2NvbnRlbnQoc2VsZiwgZGF0YSk6CisgICAgICAgICNzdXBwb3J0IGd6aXAgZW5jb2Rpbmcgb2YgcmVxdWVzdAorICAgICAgICBlbmNvZGluZyA9IHNlbGYuaGVhZGVycy5nZXQoImNvbnRlbnQtZW5jb2RpbmciLCAiaWRlbnRpdHkiKS5sb3dlcigpCisgICAgICAgIGlmIGVuY29kaW5nID09ICJpZGVudGl0eSI6CisgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBpZiBlbmNvZGluZyA9PSAiZ3ppcCI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhtbHJwY2xpYi5nemlwX2RlY29kZShkYXRhKQorICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDUwMSwgImVuY29kaW5nICVyIG5vdCBzdXBwb3J0ZWQiICUgZW5jb2RpbmcpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoNDAwLCAiZXJyb3IgZGVjb2RpbmcgZ3ppcCBjb250ZW50IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSg1MDEsICJlbmNvZGluZyAlciBub3Qgc3VwcG9ydGVkIiAlIGVuY29kaW5nKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsICIwIikKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAKICAgICBkZWYgcmVwb3J0XzQwNCAoc2VsZik6CiAgICAgICAgICAgICAjIFJlcG9ydCBhIDQwNCBlcnJvcgpAQCAtNTAyLDkgKzU1Niw2IEBACiAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgc3RyKGxlbihyZXNwb25zZSkpKQogICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShyZXNwb25zZSkKLSAgICAgICAgIyBzaHV0IGRvd24gdGhlIGNvbm5lY3Rpb24KLSAgICAgICAgc2VsZi53ZmlsZS5mbHVzaCgpCi0gICAgICAgIHNlbGYuY29ubmVjdGlvbi5zaHV0ZG93bigxKQogCiAgICAgZGVmIGxvZ19yZXF1ZXN0KHNlbGYsIGNvZGU9Jy0nLCBzaXplPSctJyk6CiAgICAgICAgICIiIlNlbGVjdGl2ZWx5IGxvZyBhbiBhY2NlcHRlZCByZXF1ZXN0LiIiIgpAQCAtNTQ2LDYgKzU5Nyw0NCBAQAogICAgICAgICAgICAgZmxhZ3MgfD0gZmNudGwuRkRfQ0xPRVhFQwogICAgICAgICAgICAgZmNudGwuZmNudGwoc2VsZi5maWxlbm8oKSwgZmNudGwuRl9TRVRGRCwgZmxhZ3MpCiAKK2NsYXNzIE11bHRpUGF0aFhNTFJQQ1NlcnZlcihTaW1wbGVYTUxSUENTZXJ2ZXIpOgorICAgICIiIk11bHRpcGF0aCBYTUwtUlBDIFNlcnZlcgorICAgIFRoaXMgc3BlY2lhbGl6YXRpb24gb2YgU2ltcGxlWE1MUlBDU2VydmVyIGFsbG93cyB0aGUgdXNlciB0byBjcmVhdGUKKyAgICBtdWx0aXBsZSBEaXNwYXRjaGVyIGluc3RhbmNlcyBhbmQgYXNzaWduIHRoZW0gdG8gZGlmZmVyZW50CisgICAgSFRUUCByZXF1ZXN0IHBhdGhzLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gdHdvIG9yIG1vcmUKKyAgICAndmlydHVhbCBYTUwtUlBDIHNlcnZlcnMnIGF0IHRoZSBzYW1lIHBvcnQuCisgICAgTWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVlc3RIYW5kbGVyIGFjY2VwdHMgdGhlIHBhdGhzIGluIHF1ZXN0aW9uLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyLCByZXF1ZXN0SGFuZGxlcj1TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgbG9nUmVxdWVzdHM9VHJ1ZSwgYWxsb3dfbm9uZT1GYWxzZSwgZW5jb2Rpbmc9Tm9uZSwgYmluZF9hbmRfYWN0aXZhdGU9VHJ1ZSk6CisKKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHIsIHJlcXVlc3RIYW5kbGVyLCBsb2dSZXF1ZXN0cywgYWxsb3dfbm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCBiaW5kX2FuZF9hY3RpdmF0ZSkKKyAgICAgICAgc2VsZi5kaXNwYXRjaGVycyA9IHt9CisgICAgICAgIHNlbGYuYWxsb3dfbm9uZSA9IGFsbG93X25vbmUKKyAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCisKKyAgICBkZWYgYWRkX2Rpc3BhdGNoZXIoc2VsZiwgcGF0aCwgZGlzcGF0Y2hlcik6CisgICAgICAgIHNlbGYuZGlzcGF0Y2hlcnNbcGF0aF0gPSBkaXNwYXRjaGVyCisgICAgICAgIHJldHVybiBkaXNwYXRjaGVyCisKKyAgICBkZWYgZ2V0X2Rpc3BhdGNoZXIoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmRpc3BhdGNoZXJzW3BhdGhdCisKKyAgICBkZWYgX21hcnNoYWxlZF9kaXNwYXRjaChzZWxmLCBkYXRhLCBkaXNwYXRjaF9tZXRob2QgPSBOb25lLCBwYXRoID0gTm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5kaXNwYXRjaGVyc1twYXRoXS5fbWFyc2hhbGVkX2Rpc3BhdGNoKAorICAgICAgICAgICAgICAgZGF0YSwgZGlzcGF0Y2hfbWV0aG9kLCBwYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIHJlcG9ydCBsb3cgbGV2ZWwgZXhjZXB0aW9uIGJhY2sgdG8gc2VydmVyCisgICAgICAgICAgICAjIChlYWNoIGRpc3BhdGNoZXIgc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGVpciBvd24KKyAgICAgICAgICAgICMgZXhjZXB0aW9ucykKKyAgICAgICAgICAgIGV4Y190eXBlLCBleGNfdmFsdWUgPSBzeXMuZXhjX2luZm8oKVs6Ml0KKyAgICAgICAgICAgIHJlc3BvbnNlID0geG1scnBjbGliLmR1bXBzKAorICAgICAgICAgICAgICAgIHhtbHJwY2xpYi5GYXVsdCgxLCAiJXM6JXMiICUgKGV4Y190eXBlLCBleGNfdmFsdWUpKSwKKyAgICAgICAgICAgICAgICBlbmNvZGluZz1zZWxmLmVuY29kaW5nLCBhbGxvd19ub25lPXNlbGYuYWxsb3dfbm9uZSkKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlCisKIGNsYXNzIENHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyKFNpbXBsZVhNTFJQQ0Rpc3BhdGNoZXIpOgogICAgICIiIlNpbXBsZSBoYW5kbGVyIGZvciBYTUwtUlBDIGRhdGEgcGFzc2VkIHRocm91Z2ggQ0dJLiIiIgogCkBAIC01ODAsNyArNjY5LDcgQEAKICAgICAgICAgICAgICAnZXhwbGFpbicgOiBleHBsYWluCiAgICAgICAgICAgICB9CiAgICAgICAgIHByaW50ICdTdGF0dXM6ICVkICVzJyAlIChjb2RlLCBtZXNzYWdlKQotICAgICAgICBwcmludCAnQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwnCisgICAgICAgIHByaW50ICdDb250ZW50LVR5cGU6ICVzJyAlIEJhc2VIVFRQU2VydmVyLkRFRkFVTFRfRVJST1JfQ09OVEVOVF9UWVBFCiAgICAgICAgIHByaW50ICdDb250ZW50LUxlbmd0aDogJWQnICUgbGVuKHJlc3BvbnNlKQogICAgICAgICBwcmludAogICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvTGliL1NvY2tldFNlcnZlci5weSBiL0xpYi9Tb2NrZXRTZXJ2ZXIucHkKaW5kZXggNzA0MDczOC4uZjBkYjUxMSAxMDA2NDQKLS0tIGEvTGliL1NvY2tldFNlcnZlci5weQorKysgYi9MaWIvU29ja2V0U2VydmVyLnB5CkBAIC0xNjgsNiArMTY4LDcgQEAKICAgICAtIHZlcmlmeV9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQogICAgIC0gc2VydmVyX2Nsb3NlKCkKICAgICAtIHByb2Nlc3NfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKyAgICAtIHNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKICAgICAtIGNsb3NlX3JlcXVlc3QocmVxdWVzdCkKICAgICAtIGhhbmRsZV9lcnJvcigpCiAKQEAgLTI4Myw3ICsyODQsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQotICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQogCiAgICAgZGVmIGhhbmRsZV90aW1lb3V0KHNlbGYpOgogICAgICAgICAiIiJDYWxsZWQgaWYgbm8gbmV3IHJlcXVlc3QgYXJyaXZlcyB3aXRoaW4gc2VsZi50aW1lb3V0LgpAQCAtMzA3LDcgKzMwOCw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuZmluaXNoX3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCi0gICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKIAogICAgIGRlZiBzZXJ2ZXJfY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkNhbGxlZCB0byBjbGVhbi11cCB0aGUgc2VydmVyLgpAQCAtMzIxLDYgKzMyMiwxMCBAQAogICAgICAgICAiIiJGaW5pc2ggb25lIHJlcXVlc3QgYnkgaW5zdGFudGlhdGluZyBSZXF1ZXN0SGFuZGxlckNsYXNzLiIiIgogICAgICAgICBzZWxmLlJlcXVlc3RIYW5kbGVyQ2xhc3MocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MsIHNlbGYpCiAKKyAgICBkZWYgc2h1dGRvd25fcmVxdWVzdChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiQ2FsbGVkIHRvIHNodXRkb3duIGFuZCBjbG9zZSBhbiBpbmRpdmlkdWFsIHJlcXVlc3QuIiIiCisgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQorCiAgICAgZGVmIGNsb3NlX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgICIiIkNhbGxlZCB0byBjbGVhbiB1cCBhbiBpbmRpdmlkdWFsIHJlcXVlc3QuIiIiCiAgICAgICAgIHBhc3MKQEAgLTM2MSw2ICszNjYsNyBAQAogICAgIC0gaGFuZGxlX3RpbWVvdXQoKQogICAgIC0gdmVyaWZ5X3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCiAgICAgLSBwcm9jZXNzX3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisgICAgLSBzaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgLSBjbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgLSBoYW5kbGVfZXJyb3IoKQogCkBAIC00NDUsNiArNDUxLDE2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5zb2NrZXQuYWNjZXB0KCkKIAorICAgIGRlZiBzaHV0ZG93bl9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QpOgorICAgICAgICAiIiJDYWxsZWQgdG8gc2h1dGRvd24gYW5kIGNsb3NlIGFuIGluZGl2aWR1YWwgcmVxdWVzdC4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI2V4cGxpY2l0bHkgc2h1dGRvd24uICBzb2NrZXQuY2xvc2UoKSBtZXJlbHkgcmVsZWFzZXMKKyAgICAgICAgICAgICN0aGUgc29ja2V0IGFuZCB3YWl0cyBmb3IgR0MgdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGNsb3NlLgorICAgICAgICAgICAgcmVxdWVzdC5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIHBhc3MgI3NvbWUgcGxhdGZvcm1zIG1heSByYWlzZSBFTk9UQ09OTiBoZXJlCisgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQorCiAgICAgZGVmIGNsb3NlX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgICIiIkNhbGxlZCB0byBjbGVhbiB1cCBhbiBpbmRpdmlkdWFsIHJlcXVlc3QuIiIiCiAgICAgICAgIHJlcXVlc3QuY2xvc2UoKQpAQCAtNDY4LDYgKzQ4NCwxMCBAQAogICAgICAgICAjIE5vIG5lZWQgdG8gY2FsbCBsaXN0ZW4oKSBmb3IgVURQLgogICAgICAgICBwYXNzCiAKKyAgICBkZWYgc2h1dGRvd25fcmVxdWVzdChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIyBObyBuZWVkIHRvIHNodXRkb3duIGFueXRoaW5nLgorICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKwogICAgIGRlZiBjbG9zZV9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QpOgogICAgICAgICAjIE5vIG5lZWQgdG8gY2xvc2UgYW55dGhpbmcuCiAgICAgICAgIHBhc3MKQEAgLTUyOCwxNyArNTQ4LDE5IEBACiAgICAgICAgICAgICBpZiBzZWxmLmFjdGl2ZV9jaGlsZHJlbiBpcyBOb25lOgogICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuID0gW10KICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLmFwcGVuZChwaWQpCi0gICAgICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KSAjY2xvc2UgaGFuZGxlIGluIHBhcmVudCBwcm9jZXNzCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2Vzcy4KICAgICAgICAgICAgICMgVGhpcyBtdXN0IG5ldmVyIHJldHVybiwgaGVuY2Ugb3MuX2V4aXQoKSEKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaF9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQorICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQogICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoMSkKIApAQCAtNTU4LDEwICs1ODAsMTAgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuZmluaXNoX3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCi0gICAgICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKLSAgICAgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3QpCiAKICAgICBkZWYgcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKICAgICAgICAgIiIiU3RhcnQgYSBuZXcgdGhyZWFkIHRvIHByb2Nlc3MgdGhlIHJlcXVlc3QuIiIiCkBAIC02MTIsMTIgKzYzNCwxMSBAQAogICAgICAgICBzZWxmLnJlcXVlc3QgPSByZXF1ZXN0CiAgICAgICAgIHNlbGYuY2xpZW50X2FkZHJlc3MgPSBjbGllbnRfYWRkcmVzcwogICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLnNldHVwKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5zZXR1cCgpCiAgICAgICAgICAgICBzZWxmLmhhbmRsZSgpCi0gICAgICAgICAgICBzZWxmLmZpbmlzaCgpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuZXhjX3RyYWNlYmFjayA9IE5vbmUgICAgIyBIZWxwIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgICAgICAgc2VsZi5maW5pc2goKQogCiAgICAgZGVmIHNldHVwKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC02NTEsOCArNjcyLDIwIEBACiAgICAgcmJ1ZnNpemUgPSAtMQogICAgIHdidWZzaXplID0gMAogCisgICAgIyBBIHRpbWVvdXQgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3Qgc29ja2V0LCBpZiBub3QgTm9uZS4KKyAgICB0aW1lb3V0ID0gTm9uZQorCisgICAgIyBEaXNhYmxlIG5hZ2xlIGFsZ29yaXRtIGZvciB0aGlzIHNvY2tldCwgaWYgVHJ1ZS4KKyAgICAjIFVzZSBvbmx5IHdoZW4gd2J1ZnNpemUgIT0gMCwgdG8gYXZvaWQgc21hbGwgcGFja2V0cy4KKyAgICBkaXNhYmxlX25hZ2xlX2FsZ29yaXRobSA9IEZhbHNlCisKICAgICBkZWYgc2V0dXAoc2VsZik6CiAgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IHNlbGYucmVxdWVzdAorICAgICAgICBpZiBzZWxmLnRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24uc2V0dGltZW91dChzZWxmLnRpbWVvdXQpCisgICAgICAgIGlmIHNlbGYuZGlzYWJsZV9uYWdsZV9hbGdvcml0aG06CisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24uc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19UQ1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuVENQX05PREVMQVksIFRydWUpCiAgICAgICAgIHNlbGYucmZpbGUgPSBzZWxmLmNvbm5lY3Rpb24ubWFrZWZpbGUoJ3JiJywgc2VsZi5yYnVmc2l6ZSkKICAgICAgICAgc2VsZi53ZmlsZSA9IHNlbGYuY29ubmVjdGlvbi5tYWtlZmlsZSgnd2InLCBzZWxmLndidWZzaXplKQogCmRpZmYgLS1naXQgYS9MaWIvVXNlckRpY3QucHkgYi9MaWIvVXNlckRpY3QucHkKaW5kZXggMGQ5NTkxYS4uYmIyMjE4YSAxMDA2NDQKLS0tIGEvTGliL1VzZXJEaWN0LnB5CisrKyBiL0xpYi9Vc2VyRGljdC5weQpAQCAtMTMsNiArMTMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLmRhdGEsIGRpY3QuZGF0YSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5kYXRhLCBkaWN0KQorICAgIF9faGFzaF9fID0gTm9uZSAjIEF2b2lkIFB5M2sgd2FybmluZwogICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gbGVuKHNlbGYuZGF0YSkKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgaWYga2V5IGluIHNlbGYuZGF0YToKQEAgLTk3LDcgKzk4LDcgQEAKICAgICAgICAgICAgIHlpZWxkIGsKICAgICBkZWYgaGFzX2tleShzZWxmLCBrZXkpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2YWx1ZSA9IHNlbGZba2V5XQorICAgICAgICAgICAgc2VsZltrZXldCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvTGliL19hYmNvbGwucHkgYi9MaWIvX2FiY29sbC5weQppbmRleCAzNzQzZWE4Li5lNzM3NmU0IDEwMDY0NAotLS0gYS9MaWIvX2FiY29sbC5weQorKysgYi9MaWIvX2FiY29sbC5weQpAQCAtODIsNyArODIsNyBAQAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CiAgICAgICAgIGlmIGNscyBpcyBJdGVyYXRvcjoKLSAgICAgICAgICAgIGlmIF9oYXNhdHRyKEMsICJuZXh0Iik6CisgICAgICAgICAgICBpZiBfaGFzYXR0cihDLCAibmV4dCIpIGFuZCBfaGFzYXR0cihDLCAiX19pdGVyX18iKToKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIApAQCAtMzA1LDE4ICszMDUsMjQgQEAKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBfX2l4b3JfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0LCBTZXQpOgotICAgICAgICAgICAgaXQgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKGl0KQotICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCisgICAgICAgIGlmIGl0IGlzIHNlbGY6CisgICAgICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0LCBTZXQpOgorICAgICAgICAgICAgICAgIGl0ID0gc2VsZi5fZnJvbV9pdGVyYWJsZShpdCkKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgX19pc3ViX18oc2VsZiwgaXQpOgotICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgIGlmIGl0IGlzIHNlbGY6CisgICAgICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCiAgICAgICAgIHJldHVybiBzZWxmCiAKIE11dGFibGVTZXQucmVnaXN0ZXIoc2V0KQpAQCAtMzg0LDkgKzM5MCwxNiBAQAogICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX21hcHBpbmcpCiAKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnezAuX19jbGFzc19fLl9fbmFtZV9ffSh7MC5fbWFwcGluZyFyfSknLmZvcm1hdChzZWxmKQorCiAKIGNsYXNzIEtleXNWaWV3KE1hcHBpbmdWaWV3LCBTZXQpOgogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKHNlbGYsIGl0KToKKyAgICAgICAgcmV0dXJuIHNldChpdCkKKwogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKICAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9tYXBwaW5nCiAKQEAgLTM5Nyw2ICs0MTAsMTAgQEAKIAogY2xhc3MgSXRlbXNWaWV3KE1hcHBpbmdWaWV3LCBTZXQpOgogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKHNlbGYsIGl0KToKKyAgICAgICAgcmV0dXJuIHNldChpdCkKKwogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6CiAgICAgICAgIGtleSwgdmFsdWUgPSBpdGVtCiAgICAgICAgIHRyeToKQEAgLTQ2Myw3ICs0ODAsMTUgQEAKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIHVwZGF0ZShzZWxmLCBvdGhlcj0oKSwgKiprd2RzKToKKyAgICBkZWYgdXBkYXRlKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICBpZiBsZW4oYXJncykgPiAyOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1cGRhdGUoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50cyAoe30gZ2l2ZW4pIi5mb3JtYXQobGVuKGFyZ3MpKSkKKyAgICAgICAgZWxpZiBub3QgYXJnczoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbGVhc3QgMSBhcmd1bWVudCAoMCBnaXZlbikiKQorICAgICAgICBzZWxmID0gYXJnc1swXQorICAgICAgICBvdGhlciA9IGFyZ3NbMV0gaWYgbGVuKGFyZ3MpID49IDIgZWxzZSAoKQorCiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIE1hcHBpbmcpOgogICAgICAgICAgICAgZm9yIGtleSBpbiBvdGhlcjoKICAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCmRpZmYgLS1naXQgYS9MaWIvX3B5aW8ucHkgYi9MaWIvX3B5aW8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM2OGQwNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9fcHlpby5weQpAQCAtMCwwICsxLDIwMDIgQEAKKyIiIgorUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbyBtb2R1bGUuCisiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAocHJpbnRfZnVuY3Rpb24sIHVuaWNvZGVfbGl0ZXJhbHMpCisKK2ltcG9ydCBvcworaW1wb3J0IGFiYworaW1wb3J0IGNvZGVjcworaW1wb3J0IHdhcm5pbmdzCisjIEltcG9ydCB0aHJlYWQgaW5zdGVhZCBvZiB0aHJlYWRpbmcgdG8gcmVkdWNlIHN0YXJ0dXAgY29zdAordHJ5OgorICAgIGZyb20gdGhyZWFkIGltcG9ydCBhbGxvY2F0ZV9sb2NrIGFzIExvY2sKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIGR1bW15X3RocmVhZCBpbXBvcnQgYWxsb2NhdGVfbG9jayBhcyBMb2NrCisKK2ltcG9ydCBpbworZnJvbSBpbyBpbXBvcnQgKF9fYWxsX18sIFNFRUtfU0VULCBTRUVLX0NVUiwgU0VFS19FTkQpCitmcm9tIGVycm5vIGltcG9ydCBFSU5UUgorCitfX21ldGFjbGFzc19fID0gdHlwZQorCisjIG9wZW4oKSB1c2VzIHN0X2Jsa3NpemUgd2hlbmV2ZXIgd2UgY2FuCitERUZBVUxUX0JVRkZFUl9TSVpFID0gOCAqIDEwMjQgICMgYnl0ZXMKKworIyBOT1RFOiBCYXNlIGNsYXNzZXMgZGVmaW5lZCBoZXJlIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlICJvZmZpY2lhbCIgQUJDcworIyBkZWZpbmVkIGluIGlvLnB5LiBXZSBkb24ndCB1c2UgcmVhbCBpbmhlcml0YW5jZSB0aG91Z2gsIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgd2FudCB0byBpbmhlcml0IHRoZSBDIGltcGxlbWVudGF0aW9ucy4KKworCitjbGFzcyBCbG9ja2luZ0lPRXJyb3IoSU9FcnJvcik6CisKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gSS9PIHdvdWxkIGJsb2NrIG9uIGEgbm9uLWJsb2NraW5nIEkvTyBzdHJlYW0uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXJybm8sIHN0cmVycm9yLCBjaGFyYWN0ZXJzX3dyaXR0ZW49MCk6CisgICAgICAgIHN1cGVyKElPRXJyb3IsIHNlbGYpLl9faW5pdF9fKGVycm5vLCBzdHJlcnJvcikKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2hhcmFjdGVyc193cml0dGVuLCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNoYXJhY3RlcnNfd3JpdHRlbiBtdXN0IGJlIGEgaW50ZWdlciIpCisgICAgICAgIHNlbGYuY2hhcmFjdGVyc193cml0dGVuID0gY2hhcmFjdGVyc193cml0dGVuCisKKworZGVmIG9wZW4oZmlsZSwgbW9kZT0iciIsIGJ1ZmZlcmluZz0tMSwKKyAgICAgICAgIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLAorICAgICAgICAgbmV3bGluZT1Ob25lLCBjbG9zZWZkPVRydWUpOgorCisgICAgciIiIk9wZW4gZmlsZSBhbmQgcmV0dXJuIGEgc3RyZWFtLiAgUmFpc2UgSU9FcnJvciB1cG9uIGZhaWx1cmUuCisKKyAgICBmaWxlIGlzIGVpdGhlciBhIHRleHQgb3IgYnl0ZSBzdHJpbmcgZ2l2aW5nIHRoZSBuYW1lIChhbmQgdGhlIHBhdGgKKyAgICBpZiB0aGUgZmlsZSBpc24ndCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkgb2YgdGhlIGZpbGUgdG8KKyAgICBiZSBvcGVuZWQgb3IgYW4gaW50ZWdlciBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGZpbGUgdG8gYmUKKyAgICB3cmFwcGVkLiAoSWYgYSBmaWxlIGRlc2NyaXB0b3IgaXMgZ2l2ZW4sIGl0IGlzIGNsb3NlZCB3aGVuIHRoZQorICAgIHJldHVybmVkIEkvTyBvYmplY3QgaXMgY2xvc2VkLCB1bmxlc3MgY2xvc2VmZCBpcyBzZXQgdG8gRmFsc2UuKQorCisgICAgbW9kZSBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG1vZGUgaW4gd2hpY2ggdGhlIGZpbGUKKyAgICBpcyBvcGVuZWQuIEl0IGRlZmF1bHRzIHRvICdyJyB3aGljaCBtZWFucyBvcGVuIGZvciByZWFkaW5nIGluIHRleHQKKyAgICBtb2RlLiAgT3RoZXIgY29tbW9uIHZhbHVlcyBhcmUgJ3cnIGZvciB3cml0aW5nICh0cnVuY2F0aW5nIHRoZSBmaWxlIGlmCisgICAgaXQgYWxyZWFkeSBleGlzdHMpLCBhbmQgJ2EnIGZvciBhcHBlbmRpbmcgKHdoaWNoIG9uIHNvbWUgVW5peCBzeXN0ZW1zLAorICAgIG1lYW5zIHRoYXQgYWxsIHdyaXRlcyBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSByZWdhcmRsZXNzIG9mIHRoZQorICAgIGN1cnJlbnQgc2VlayBwb3NpdGlvbikuIEluIHRleHQgbW9kZSwgaWYgZW5jb2RpbmcgaXMgbm90IHNwZWNpZmllZCB0aGUKKyAgICBlbmNvZGluZyB1c2VkIGlzIHBsYXRmb3JtIGRlcGVuZGVudC4gKEZvciByZWFkaW5nIGFuZCB3cml0aW5nIHJhdworICAgIGJ5dGVzIHVzZSBiaW5hcnkgbW9kZSBhbmQgbGVhdmUgZW5jb2RpbmcgdW5zcGVjaWZpZWQuKSBUaGUgYXZhaWxhYmxlCisgICAgbW9kZXMgYXJlOgorCisgICAgPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIENoYXJhY3RlciBNZWFuaW5nCisgICAgLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICdyJyAgICAgICBvcGVuIGZvciByZWFkaW5nIChkZWZhdWx0KQorICAgICd3JyAgICAgICBvcGVuIGZvciB3cml0aW5nLCB0cnVuY2F0aW5nIHRoZSBmaWxlIGZpcnN0CisgICAgJ2EnICAgICAgIG9wZW4gZm9yIHdyaXRpbmcsIGFwcGVuZGluZyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGlmIGl0IGV4aXN0cworICAgICdiJyAgICAgICBiaW5hcnkgbW9kZQorICAgICd0JyAgICAgICB0ZXh0IG1vZGUgKGRlZmF1bHQpCisgICAgJysnICAgICAgIG9wZW4gYSBkaXNrIGZpbGUgZm9yIHVwZGF0aW5nIChyZWFkaW5nIGFuZCB3cml0aW5nKQorICAgICdVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IHVubmVlZGVkCisgICAgICAgICAgICAgIGZvciBuZXcgY29kZSkKKyAgICA9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGUgZGVmYXVsdCBtb2RlIGlzICdydCcgKG9wZW4gZm9yIHJlYWRpbmcgdGV4dCkuIEZvciBiaW5hcnkgcmFuZG9tCisgICAgYWNjZXNzLCB0aGUgbW9kZSAndytiJyBvcGVucyBhbmQgdHJ1bmNhdGVzIHRoZSBmaWxlIHRvIDAgYnl0ZXMsIHdoaWxlCisgICAgJ3IrYicgb3BlbnMgdGhlIGZpbGUgd2l0aG91dCB0cnVuY2F0aW9uLgorCisgICAgUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBmaWxlcyBvcGVuZWQgaW4gYmluYXJ5IGFuZCB0ZXh0IG1vZGVzLAorICAgIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGRvZXNuJ3QuIEZpbGVzIG9wZW5lZCBpbgorICAgIGJpbmFyeSBtb2RlIChhcHBlbmRpbmcgJ2InIHRvIHRoZSBtb2RlIGFyZ3VtZW50KSByZXR1cm4gY29udGVudHMgYXMKKyAgICBieXRlcyBvYmplY3RzIHdpdGhvdXQgYW55IGRlY29kaW5nLiBJbiB0ZXh0IG1vZGUgKHRoZSBkZWZhdWx0LCBvciB3aGVuCisgICAgJ3QnIGlzIGFwcGVuZGVkIHRvIHRoZSBtb2RlIGFyZ3VtZW50KSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGFyZQorICAgIHJldHVybmVkIGFzIHN0cmluZ3MsIHRoZSBieXRlcyBoYXZpbmcgYmVlbiBmaXJzdCBkZWNvZGVkIHVzaW5nIGEKKyAgICBwbGF0Zm9ybS1kZXBlbmRlbnQgZW5jb2Rpbmcgb3IgdXNpbmcgdGhlIHNwZWNpZmllZCBlbmNvZGluZyBpZiBnaXZlbi4KKworICAgIGJ1ZmZlcmluZyBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LgorICAgIFBhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3QKKyAgICBsaW5lIGJ1ZmZlcmluZyAob25seSB1c2FibGUgaW4gdGV4dCBtb2RlKSwgYW5kIGFuIGludGVnZXIgPiAxIHRvIGluZGljYXRlCisgICAgdGhlIHNpemUgb2YgYSBmaXhlZC1zaXplIGNodW5rIGJ1ZmZlci4gIFdoZW4gbm8gYnVmZmVyaW5nIGFyZ3VtZW50IGlzCisgICAgZ2l2ZW4sIHRoZSBkZWZhdWx0IGJ1ZmZlcmluZyBwb2xpY3kgd29ya3MgYXMgZm9sbG93czoKKworICAgICogQmluYXJ5IGZpbGVzIGFyZSBidWZmZXJlZCBpbiBmaXhlZC1zaXplIGNodW5rczsgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgorICAgICAgaXMgY2hvc2VuIHVzaW5nIGEgaGV1cmlzdGljIHRyeWluZyB0byBkZXRlcm1pbmUgdGhlIHVuZGVybHlpbmcgZGV2aWNlJ3MKKyAgICAgICJibG9jayBzaXplIiBhbmQgZmFsbGluZyBiYWNrIG9uIGBpby5ERUZBVUxUX0JVRkZFUl9TSVpFYC4KKyAgICAgIE9uIG1hbnkgc3lzdGVtcywgdGhlIGJ1ZmZlciB3aWxsIHR5cGljYWxseSBiZSA0MDk2IG9yIDgxOTIgYnl0ZXMgbG9uZy4KKworICAgICogIkludGVyYWN0aXZlIiB0ZXh0IGZpbGVzIChmaWxlcyBmb3Igd2hpY2ggaXNhdHR5KCkgcmV0dXJucyBUcnVlKQorICAgICAgdXNlIGxpbmUgYnVmZmVyaW5nLiAgT3RoZXIgdGV4dCBmaWxlcyB1c2UgdGhlIHBvbGljeSBkZXNjcmliZWQgYWJvdmUKKyAgICAgIGZvciBiaW5hcnkgZmlsZXMuCisKKyAgICBlbmNvZGluZyBpcyB0aGUgbmFtZSBvZiB0aGUgZW5jb2RpbmcgdXNlZCB0byBkZWNvZGUgb3IgZW5jb2RlIHRoZQorICAgIGZpbGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGVuY29kaW5nIGlzCisgICAgcGxhdGZvcm0gZGVwZW5kZW50LCBidXQgYW55IGVuY29kaW5nIHN1cHBvcnRlZCBieSBQeXRob24gY2FuIGJlCisgICAgcGFzc2VkLiAgU2VlIHRoZSBjb2RlY3MgbW9kdWxlIGZvciB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZW5jb2RpbmdzLgorCisgICAgZXJyb3JzIGlzIGFuIG9wdGlvbmFsIHN0cmluZyB0aGF0IHNwZWNpZmllcyBob3cgZW5jb2RpbmcgZXJyb3JzIGFyZSB0bworICAgIGJlIGhhbmRsZWQtLS10aGlzIGFyZ3VtZW50IHNob3VsZCBub3QgYmUgdXNlZCBpbiBiaW5hcnkgbW9kZS4gUGFzcworICAgICdzdHJpY3QnIHRvIHJhaXNlIGEgVmFsdWVFcnJvciBleGNlcHRpb24gaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgZXJyb3IKKyAgICAodGhlIGRlZmF1bHQgb2YgTm9uZSBoYXMgdGhlIHNhbWUgZWZmZWN0KSwgb3IgcGFzcyAnaWdub3JlJyB0byBpZ25vcmUKKyAgICBlcnJvcnMuIChOb3RlIHRoYXQgaWdub3JpbmcgZW5jb2RpbmcgZXJyb3JzIGNhbiBsZWFkIHRvIGRhdGEgbG9zcy4pCisgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBjb2RlY3MucmVnaXN0ZXIgZm9yIGEgbGlzdCBvZiB0aGUgcGVybWl0dGVkCisgICAgZW5jb2RpbmcgZXJyb3Igc3RyaW5ncy4KKworICAgIG5ld2xpbmUgY29udHJvbHMgaG93IHVuaXZlcnNhbCBuZXdsaW5lcyB3b3JrcyAoaXQgb25seSBhcHBsaWVzIHRvIHRleHQKKyAgICBtb2RlKS4gSXQgY2FuIGJlIE5vbmUsICcnLCAnXG4nLCAnXHInLCBhbmQgJ1xyXG4nLiAgSXQgd29ya3MgYXMKKyAgICBmb2xsb3dzOgorCisgICAgKiBPbiBpbnB1dCwgaWYgbmV3bGluZSBpcyBOb25lLCB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcworICAgICAgZW5hYmxlZC4gTGluZXMgaW4gdGhlIGlucHV0IGNhbiBlbmQgaW4gJ1xuJywgJ1xyJywgb3IgJ1xyXG4nLCBhbmQKKyAgICAgIHRoZXNlIGFyZSB0cmFuc2xhdGVkIGludG8gJ1xuJyBiZWZvcmUgYmVpbmcgcmV0dXJuZWQgdG8gdGhlCisgICAgICBjYWxsZXIuIElmIGl0IGlzICcnLCB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIGlzIGVuYWJsZWQsIGJ1dCBsaW5lCisgICAgICBlbmRpbmdzIGFyZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyIHVudHJhbnNsYXRlZC4gSWYgaXQgaGFzIGFueSBvZgorICAgICAgdGhlIG90aGVyIGxlZ2FsIHZhbHVlcywgaW5wdXQgbGluZXMgYXJlIG9ubHkgdGVybWluYXRlZCBieSB0aGUgZ2l2ZW4KKyAgICAgIHN0cmluZywgYW5kIHRoZSBsaW5lIGVuZGluZyBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIHVudHJhbnNsYXRlZC4KKworICAgICogT24gb3V0cHV0LCBpZiBuZXdsaW5lIGlzIE5vbmUsIGFueSAnXG4nIGNoYXJhY3RlcnMgd3JpdHRlbiBhcmUKKyAgICAgIHRyYW5zbGF0ZWQgdG8gdGhlIHN5c3RlbSBkZWZhdWx0IGxpbmUgc2VwYXJhdG9yLCBvcy5saW5lc2VwLiBJZgorICAgICAgbmV3bGluZSBpcyAnJywgbm8gdHJhbnNsYXRpb24gdGFrZXMgcGxhY2UuIElmIG5ld2xpbmUgaXMgYW55IG9mIHRoZQorICAgICAgb3RoZXIgbGVnYWwgdmFsdWVzLCBhbnkgJ1xuJyBjaGFyYWN0ZXJzIHdyaXR0ZW4gYXJlIHRyYW5zbGF0ZWQgdG8KKyAgICAgIHRoZSBnaXZlbiBzdHJpbmcuCisKKyAgICBJZiBjbG9zZWZkIGlzIEZhbHNlLCB0aGUgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSBrZXB0IG9wZW4KKyAgICB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZC4gVGhpcyBkb2VzIG5vdCB3b3JrIHdoZW4gYSBmaWxlIG5hbWUgaXMgZ2l2ZW4KKyAgICBhbmQgbXVzdCBiZSBUcnVlIGluIHRoYXQgY2FzZS4KKworICAgIG9wZW4oKSByZXR1cm5zIGEgZmlsZSBvYmplY3Qgd2hvc2UgdHlwZSBkZXBlbmRzIG9uIHRoZSBtb2RlLCBhbmQKKyAgICB0aHJvdWdoIHdoaWNoIHRoZSBzdGFuZGFyZCBmaWxlIG9wZXJhdGlvbnMgc3VjaCBhcyByZWFkaW5nIGFuZCB3cml0aW5nCisgICAgYXJlIHBlcmZvcm1lZC4gV2hlbiBvcGVuKCkgaXMgdXNlZCB0byBvcGVuIGEgZmlsZSBpbiBhIHRleHQgbW9kZSAoJ3cnLAorICAgICdyJywgJ3d0JywgJ3J0JywgZXRjLiksIGl0IHJldHVybnMgYSBUZXh0SU9XcmFwcGVyLiBXaGVuIHVzZWQgdG8gb3BlbgorICAgIGEgZmlsZSBpbiBhIGJpbmFyeSBtb2RlLCB0aGUgcmV0dXJuZWQgY2xhc3MgdmFyaWVzOiBpbiByZWFkIGJpbmFyeQorICAgIG1vZGUsIGl0IHJldHVybnMgYSBCdWZmZXJlZFJlYWRlcjsgaW4gd3JpdGUgYmluYXJ5IGFuZCBhcHBlbmQgYmluYXJ5CisgICAgbW9kZXMsIGl0IHJldHVybnMgYSBCdWZmZXJlZFdyaXRlciwgYW5kIGluIHJlYWQvd3JpdGUgbW9kZSwgaXQgcmV0dXJucworICAgIGEgQnVmZmVyZWRSYW5kb20uCisKKyAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIHN0cmluZyBvciBieXRlYXJyYXkgYXMgYSBmaWxlIGZvciBib3RoCisgICAgcmVhZGluZyBhbmQgd3JpdGluZy4gRm9yIHN0cmluZ3MgU3RyaW5nSU8gY2FuIGJlIHVzZWQgbGlrZSBhIGZpbGUKKyAgICBvcGVuZWQgaW4gYSB0ZXh0IG1vZGUsIGFuZCBmb3IgYnl0ZXMgYSBCeXRlc0lPIGNhbiBiZSB1c2VkIGxpa2UgYSBmaWxlCisgICAgb3BlbmVkIGluIGEgYmluYXJ5IG1vZGUuCisgICAgIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2UoZmlsZSwgKGJhc2VzdHJpbmcsIGludCwgbG9uZykpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludmFsaWQgZmlsZTogJXIiICUgZmlsZSkKKyAgICBpZiBub3QgaXNpbnN0YW5jZShtb2RlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbnZhbGlkIG1vZGU6ICVyIiAlIG1vZGUpCisgICAgaWYgbm90IGlzaW5zdGFuY2UoYnVmZmVyaW5nLCAoaW50LCBsb25nKSk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW52YWxpZCBidWZmZXJpbmc6ICVyIiAlIGJ1ZmZlcmluZykKKyAgICBpZiBlbmNvZGluZyBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UoZW5jb2RpbmcsIGJhc2VzdHJpbmcpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludmFsaWQgZW5jb2Rpbmc6ICVyIiAlIGVuY29kaW5nKQorICAgIGlmIGVycm9ycyBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UoZXJyb3JzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbnZhbGlkIGVycm9yczogJXIiICUgZXJyb3JzKQorICAgIG1vZGVzID0gc2V0KG1vZGUpCisgICAgaWYgbW9kZXMgLSBzZXQoImFyd2IrdFUiKSBvciBsZW4obW9kZSkgPiBsZW4obW9kZXMpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIG1vZGU6ICVyIiAlIG1vZGUpCisgICAgcmVhZGluZyA9ICJyIiBpbiBtb2RlcworICAgIHdyaXRpbmcgPSAidyIgaW4gbW9kZXMKKyAgICBhcHBlbmRpbmcgPSAiYSIgaW4gbW9kZXMKKyAgICB1cGRhdGluZyA9ICIrIiBpbiBtb2RlcworICAgIHRleHQgPSAidCIgaW4gbW9kZXMKKyAgICBiaW5hcnkgPSAiYiIgaW4gbW9kZXMKKyAgICBpZiAiVSIgaW4gbW9kZXM6CisgICAgICAgIGlmIHdyaXRpbmcgb3IgYXBwZW5kaW5nOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgdXNlIFUgYW5kIHdyaXRpbmcgbW9kZSBhdCBvbmNlIikKKyAgICAgICAgcmVhZGluZyA9IFRydWUKKyAgICBpZiB0ZXh0IGFuZCBiaW5hcnk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdGV4dCBhbmQgYmluYXJ5IG1vZGUgYXQgb25jZSIpCisgICAgaWYgcmVhZGluZyArIHdyaXRpbmcgKyBhcHBlbmRpbmcgPiAxOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCBoYXZlIHJlYWQvd3JpdGUvYXBwZW5kIG1vZGUgYXQgb25jZSIpCisgICAgaWYgbm90IChyZWFkaW5nIG9yIHdyaXRpbmcgb3IgYXBwZW5kaW5nKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibXVzdCBoYXZlIGV4YWN0bHkgb25lIG9mIHJlYWQvd3JpdGUvYXBwZW5kIG1vZGUiKQorICAgIGlmIGJpbmFyeSBhbmQgZW5jb2RpbmcgaXMgbm90IE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJpbmFyeSBtb2RlIGRvZXNuJ3QgdGFrZSBhbiBlbmNvZGluZyBhcmd1bWVudCIpCisgICAgaWYgYmluYXJ5IGFuZCBlcnJvcnMgaXMgbm90IE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJpbmFyeSBtb2RlIGRvZXNuJ3QgdGFrZSBhbiBlcnJvcnMgYXJndW1lbnQiKQorICAgIGlmIGJpbmFyeSBhbmQgbmV3bGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYmluYXJ5IG1vZGUgZG9lc24ndCB0YWtlIGEgbmV3bGluZSBhcmd1bWVudCIpCisgICAgcmF3ID0gRmlsZUlPKGZpbGUsCisgICAgICAgICAgICAgICAgIChyZWFkaW5nIGFuZCAiciIgb3IgIiIpICsKKyAgICAgICAgICAgICAgICAgKHdyaXRpbmcgYW5kICJ3IiBvciAiIikgKworICAgICAgICAgICAgICAgICAoYXBwZW5kaW5nIGFuZCAiYSIgb3IgIiIpICsKKyAgICAgICAgICAgICAgICAgKHVwZGF0aW5nIGFuZCAiKyIgb3IgIiIpLAorICAgICAgICAgICAgICAgICBjbG9zZWZkKQorICAgIGxpbmVfYnVmZmVyaW5nID0gRmFsc2UKKyAgICBpZiBidWZmZXJpbmcgPT0gMSBvciBidWZmZXJpbmcgPCAwIGFuZCByYXcuaXNhdHR5KCk6CisgICAgICAgIGJ1ZmZlcmluZyA9IC0xCisgICAgICAgIGxpbmVfYnVmZmVyaW5nID0gVHJ1ZQorICAgIGlmIGJ1ZmZlcmluZyA8IDA6CisgICAgICAgIGJ1ZmZlcmluZyA9IERFRkFVTFRfQlVGRkVSX1NJWkUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnMgPSBvcy5mc3RhdChyYXcuZmlsZW5vKCkpLnN0X2Jsa3NpemUKKyAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgYnMgPiAxOgorICAgICAgICAgICAgICAgIGJ1ZmZlcmluZyA9IGJzCisgICAgaWYgYnVmZmVyaW5nIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBidWZmZXJpbmcgc2l6ZSIpCisgICAgaWYgYnVmZmVyaW5nID09IDA6CisgICAgICAgIGlmIGJpbmFyeToKKyAgICAgICAgICAgIHJldHVybiByYXcKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgaGF2ZSB1bmJ1ZmZlcmVkIHRleHQgSS9PIikKKyAgICBpZiB1cGRhdGluZzoKKyAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSYW5kb20ocmF3LCBidWZmZXJpbmcpCisgICAgZWxpZiB3cml0aW5nIG9yIGFwcGVuZGluZzoKKyAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRXcml0ZXIocmF3LCBidWZmZXJpbmcpCisgICAgZWxpZiByZWFkaW5nOgorICAgICAgICBidWZmZXIgPSBCdWZmZXJlZFJlYWRlcihyYXcsIGJ1ZmZlcmluZykKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIG1vZGU6ICVyIiAlIG1vZGUpCisgICAgaWYgYmluYXJ5OgorICAgICAgICByZXR1cm4gYnVmZmVyCisgICAgdGV4dCA9IFRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLCBsaW5lX2J1ZmZlcmluZykKKyAgICB0ZXh0Lm1vZGUgPSBtb2RlCisgICAgcmV0dXJuIHRleHQKKworCitjbGFzcyBEb2NEZXNjcmlwdG9yOgorICAgICIiIkhlbHBlciBmb3IgYnVpbHRpbnMub3Blbi5fX2RvY19fCisgICAgIiIiCisgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCB0eXApOgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgIm9wZW4oZmlsZSwgbW9kZT0ncicsIGJ1ZmZlcmluZz0tMSwgZW5jb2Rpbmc9Tm9uZSwgIgorICAgICAgICAgICAgICAgICAiZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSwgY2xvc2VmZD1UcnVlKVxuXG4iICsKKyAgICAgICAgICAgIG9wZW4uX19kb2NfXykKKworY2xhc3MgT3BlbldyYXBwZXI6CisgICAgIiIiV3JhcHBlciBmb3IgYnVpbHRpbnMub3BlbgorCisgICAgVHJpY2sgc28gdGhhdCBvcGVuIHdvbid0IGJlY29tZSBhIGJvdW5kIG1ldGhvZCB3aGVuIHN0b3JlZAorICAgIGFzIGEgY2xhc3MgdmFyaWFibGUgKGFzIGRibS5kdW1iIGRvZXMpLgorCisgICAgU2VlIGluaXRzdGRpbygpIGluIFB5dGhvbi9weXRob25ydW4uYy4KKyAgICAiIiIKKyAgICBfX2RvY19fID0gRG9jRGVzY3JpcHRvcigpCisKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBvcGVuKCphcmdzLCAqKmt3YXJncykKKworCitjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBJT0Vycm9yKToKKyAgICBwYXNzCisKKworY2xhc3MgSU9CYXNlOgorICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorCisgICAgIiIiVGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFsbCBJL08gY2xhc3NlcywgYWN0aW5nIG9uIHN0cmVhbXMgb2YKKyAgICBieXRlcy4gVGhlcmUgaXMgbm8gcHVibGljIGNvbnN0cnVjdG9yLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBkdW1teSBpbXBsZW1lbnRhdGlvbnMgZm9yIG1hbnkgbWV0aG9kcyB0aGF0CisgICAgZGVyaXZlZCBjbGFzc2VzIGNhbiBvdmVycmlkZSBzZWxlY3RpdmVseTsgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zCisgICAgcmVwcmVzZW50IGEgZmlsZSB0aGF0IGNhbm5vdCBiZSByZWFkLCB3cml0dGVuIG9yIHNlZWtlZC4KKworICAgIEV2ZW4gdGhvdWdoIElPQmFzZSBkb2VzIG5vdCBkZWNsYXJlIHJlYWQsIHJlYWRpbnRvLCBvciB3cml0ZSBiZWNhdXNlCisgICAgdGhlaXIgc2lnbmF0dXJlcyB3aWxsIHZhcnksIGltcGxlbWVudGF0aW9ucyBhbmQgY2xpZW50cyBzaG91bGQKKyAgICBjb25zaWRlciB0aG9zZSBtZXRob2RzIHBhcnQgb2YgdGhlIGludGVyZmFjZS4gQWxzbywgaW1wbGVtZW50YXRpb25zCisgICAgbWF5IHJhaXNlIGEgSU9FcnJvciB3aGVuIG9wZXJhdGlvbnMgdGhleSBkbyBub3Qgc3VwcG9ydCBhcmUgY2FsbGVkLgorCisgICAgVGhlIGJhc2ljIHR5cGUgdXNlZCBmb3IgYmluYXJ5IGRhdGEgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gYSBmaWxlIGlzCisgICAgYnl0ZXMuIGJ5dGVhcnJheXMgYXJlIGFjY2VwdGVkIHRvbywgYW5kIGluIHNvbWUgY2FzZXMgKHN1Y2ggYXMKKyAgICByZWFkaW50bykgbmVlZGVkLiBUZXh0IEkvTyBjbGFzc2VzIHdvcmsgd2l0aCBzdHIgZGF0YS4KKworICAgIE5vdGUgdGhhdCBjYWxsaW5nIGFueSBtZXRob2QgKGV2ZW4gaW5xdWlyaWVzKSBvbiBhIGNsb3NlZCBzdHJlYW0gaXMKKyAgICB1bmRlZmluZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgcmFpc2UgSU9FcnJvciBpbiB0aGlzIGNhc2UuCisKKyAgICBJT0Jhc2UgKGFuZCBpdHMgc3ViY2xhc3Nlcykgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wsIG1lYW5pbmcKKyAgICB0aGF0IGFuIElPQmFzZSBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgeWllbGRpbmcgdGhlIGxpbmVzIGluIGEKKyAgICBzdHJlYW0uCisKKyAgICBJT0Jhc2UgYWxzbyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gSW4gdGhpcyBleGFtcGxlLAorICAgIGZwIGlzIGNsb3NlZCBhZnRlciB0aGUgc3VpdGUgb2YgdGhlIHdpdGggc3RhdGVtZW50IGlzIGNvbXBsZXRlOgorCisgICAgd2l0aCBvcGVuKCdzcGFtLnR4dCcsICdyJykgYXMgZnA6CisgICAgICAgIGZwLndyaXRlKCdTcGFtIGFuZCBlZ2dzIScpCisgICAgIiIiCisKKyAgICAjIyMgSW50ZXJuYWwgIyMjCisKKyAgICBkZWYgX3Vuc3VwcG9ydGVkKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gZXhjZXB0aW9uIGZvciB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLiIiIgorICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigiJXMuJXMoKSBub3Qgc3VwcG9ydGVkIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgbmFtZSkpCisKKyAgICAjIyMgUG9zaXRpb25pbmcgIyMjCisKKyAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZT0wKToKKyAgICAgICAgIiIiQ2hhbmdlIHN0cmVhbSBwb3NpdGlvbi4KKworICAgICAgICBDaGFuZ2UgdGhlIHN0cmVhbSBwb3NpdGlvbiB0byBieXRlIG9mZnNldCBvZmZzZXQuIG9mZnNldCBpcworICAgICAgICBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gaW5kaWNhdGVkIGJ5IHdoZW5jZS4gIFZhbHVlcworICAgICAgICBmb3Igd2hlbmNlIGFyZToKKworICAgICAgICAqIDAgLS0gc3RhcnQgb2Ygc3RyZWFtICh0aGUgZGVmYXVsdCk7IG9mZnNldCBzaG91bGQgYmUgemVybyBvciBwb3NpdGl2ZQorICAgICAgICAqIDEgLS0gY3VycmVudCBzdHJlYW0gcG9zaXRpb247IG9mZnNldCBtYXkgYmUgbmVnYXRpdmUKKyAgICAgICAgKiAyIC0tIGVuZCBvZiBzdHJlYW07IG9mZnNldCBpcyB1c3VhbGx5IG5lZ2F0aXZlCisKKyAgICAgICAgUmV0dXJuIHRoZSBuZXcgYWJzb2x1dGUgcG9zaXRpb24uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgic2VlayIpCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5zZWVrKDAsIDEpCisKKyAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zPU5vbmUpOgorICAgICAgICAiIiJUcnVuY2F0ZSBmaWxlIHRvIHNpemUgYnl0ZXMuCisKKyAgICAgICAgU2l6ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBJTyBwb3NpdGlvbiBhcyByZXBvcnRlZCBieSB0ZWxsKCkuICBSZXR1cm4KKyAgICAgICAgdGhlIG5ldyBzaXplLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInRydW5jYXRlIikKKworICAgICMjIyBGbHVzaCBhbmQgY2xvc2UgIyMjCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICIiIkZsdXNoIHdyaXRlIGJ1ZmZlcnMsIGlmIGFwcGxpY2FibGUuCisKKyAgICAgICAgVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlYWQtb25seSBhbmQgbm9uLWJsb2NraW5nIHN0cmVhbXMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4/Pz8KKworICAgIF9fY2xvc2VkID0gRmFsc2UKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiRmx1c2ggYW5kIGNsb3NlIHRoZSBJTyBvYmplY3QuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGNsb3NlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgICAgICBzZWxmLl9fY2xvc2VkID0gVHJ1ZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICIiIkRlc3RydWN0b3IuICBDYWxscyBjbG9zZSgpLiIiIgorICAgICAgICAjIFRoZSB0cnkvZXhjZXB0IGJsb2NrIGlzIGluIGNhc2UgdGhpcyBpcyBjYWxsZWQgYXQgcHJvZ3JhbQorICAgICAgICAjIGV4aXQgdGltZSwgd2hlbiBpdCdzIHBvc3NpYmxlIHRoYXQgZ2xvYmFscyBoYXZlIGFscmVhZHkgYmVlbgorICAgICAgICAjIGRlbGV0ZWQsIGFuZCB0aGVuIHRoZSBjbG9zZSgpIGNhbGwgbWlnaHQgZmFpbC4gIFNpbmNlCisgICAgICAgICMgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBzdWNoIGZhaWx1cmVzIGFuZCB0aGV5IGFubm95CisgICAgICAgICMgdGhlIGVuZCB1c2Vycywgd2Ugc3VwcHJlc3MgdGhlIHRyYWNlYmFjay4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICMjIyBJbnF1aXJpZXMgIyMjCisKKyAgICBkZWYgc2Vla2FibGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIG9iamVjdCBzdXBwb3J0cyByYW5kb20gYWNjZXNzLgorCisgICAgICAgIElmIEZhbHNlLCBzZWVrKCksIHRlbGwoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIElPRXJyb3IuCisgICAgICAgIFRoaXMgbWV0aG9kIG1heSBuZWVkIHRvIGRvIGEgdGVzdCBzZWVrKCkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfY2hlY2tTZWVrYWJsZShzZWxmLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGlmIGZpbGUgaXMgbm90IHNlZWthYmxlCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5zZWVrYWJsZSgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiRmlsZSBvciBzdHJlYW0gaXMgbm90IHNlZWthYmxlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmUgZWxzZSBtc2cpCisKKworICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgb2JqZWN0IHdhcyBvcGVuZWQgZm9yIHJlYWRpbmcuCisKKyAgICAgICAgSWYgRmFsc2UsIHJlYWQoKSB3aWxsIHJhaXNlIElPRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfY2hlY2tSZWFkYWJsZShzZWxmLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGlmIGZpbGUgaXMgbm90IHJlYWRhYmxlCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5yZWFkYWJsZSgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiRmlsZSBvciBzdHJlYW0gaXMgbm90IHJlYWRhYmxlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmUgZWxzZSBtc2cpCisKKyAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIG9iamVjdCB3YXMgb3BlbmVkIGZvciB3cml0aW5nLgorCisgICAgICAgIElmIEZhbHNlLCB3cml0ZSgpIGFuZCB0cnVuY2F0ZSgpIHdpbGwgcmFpc2UgSU9FcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9jaGVja1dyaXRhYmxlKHNlbGYsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIElPRXJyb3IgaWYgZmlsZSBpcyBub3Qgd3JpdGFibGUKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLndyaXRhYmxlKCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJGaWxlIG9yIHN0cmVhbSBpcyBub3Qgd3JpdGFibGUuIgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtc2cgaXMgTm9uZSBlbHNlIG1zZykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjbG9zZWQoc2VsZik6CisgICAgICAgICIiImNsb3NlZDogYm9vbC4gIFRydWUgaWZmIHRoZSBmaWxlIGhhcyBiZWVuIGNsb3NlZC4KKworICAgICAgICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoaXMgaXMgYSBwcm9wZXJ0eSwgbm90IGEgcHJlZGljYXRlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbG9zZWQKKworICAgIGRlZiBfY2hlY2tDbG9zZWQoc2VsZiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gVmFsdWVFcnJvciBpZiBmaWxlIGlzIGNsb3NlZAorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmUgZWxzZSBtc2cpCisKKyAgICAjIyMgQ29udGV4dCBtYW5hZ2VyICMjIworCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIiIiQ29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgUmV0dXJucyBzZWxmLiIiIgorICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJDb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuICBDYWxscyBjbG9zZSgpIiIiCisgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgIyMjIExvd2VyLWxldmVsIEFQSXMgIyMjCisKKyAgICAjIFhYWCBTaG91bGQgdGhlc2UgYmUgcHJlc2VudCBldmVuIGlmIHVuaW1wbGVtZW50ZWQ/CisKKyAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGlmIG9uZSBleGlzdHMuCisKKyAgICAgICAgQW4gSU9FcnJvciBpcyByYWlzZWQgaWYgdGhlIElPIG9iamVjdCBkb2VzIG5vdCB1c2UgYSBmaWxlIGRlc2NyaXB0b3IuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgiZmlsZW5vIikKKworICAgIGRlZiBpc2F0dHkoc2VsZik6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoaXMgaXMgYW4gJ2ludGVyYWN0aXZlJyBzdHJlYW0uCisKKyAgICAgICAgUmV0dXJuIEZhbHNlIGlmIGl0IGNhbid0IGJlIGRldGVybWluZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyMjIFJlYWRsaW5lW3NdIGFuZCB3cml0ZWxpbmVzICMjIworCisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxpbWl0PS0xKToKKyAgICAgICAgciIiIlJlYWQgYW5kIHJldHVybiBhIGxpbmUgZnJvbSB0aGUgc3RyZWFtLgorCisgICAgICAgIElmIGxpbWl0IGlzIHNwZWNpZmllZCwgYXQgbW9zdCBsaW1pdCBieXRlcyB3aWxsIGJlIHJlYWQuCisKKyAgICAgICAgVGhlIGxpbmUgdGVybWluYXRvciBpcyBhbHdheXMgYidcbicgZm9yIGJpbmFyeSBmaWxlczsgZm9yIHRleHQKKyAgICAgICAgZmlsZXMsIHRoZSBuZXdsaW5lcyBhcmd1bWVudCB0byBvcGVuIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZQorICAgICAgICB0ZXJtaW5hdG9yKHMpIHJlY29nbml6ZWQuCisgICAgICAgICIiIgorICAgICAgICAjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYSAoc2xvd2lzaCkgcmVhZGxpbmUoKS4KKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAicGVlayIpOgorICAgICAgICAgICAgZGVmIG5yZWFkYWhlYWQoKToKKyAgICAgICAgICAgICAgICByZWFkYWhlYWQgPSBzZWxmLnBlZWsoMSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVhZGFoZWFkOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIG4gPSAocmVhZGFoZWFkLmZpbmQoYiJcbiIpICsgMSkgb3IgbGVuKHJlYWRhaGVhZCkKKyAgICAgICAgICAgICAgICBpZiBsaW1pdCA+PSAwOgorICAgICAgICAgICAgICAgICAgICBuID0gbWluKG4sIGxpbWl0KQorICAgICAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWYgbnJlYWRhaGVhZCgpOgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIGxpbWl0IGlzIE5vbmU6CisgICAgICAgICAgICBsaW1pdCA9IC0xCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UobGltaXQsIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIikKKyAgICAgICAgcmVzID0gYnl0ZWFycmF5KCkKKyAgICAgICAgd2hpbGUgbGltaXQgPCAwIG9yIGxlbihyZXMpIDwgbGltaXQ6CisgICAgICAgICAgICBiID0gc2VsZi5yZWFkKG5yZWFkYWhlYWQoKSkKKyAgICAgICAgICAgIGlmIG5vdCBiOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXMgKz0gYgorICAgICAgICAgICAgaWYgcmVzLmVuZHN3aXRoKGIiXG4iKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gYnl0ZXMocmVzKQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgbGluZSA9IHNlbGYucmVhZGxpbmUoKQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIGRlZiByZWFkbGluZXMoc2VsZiwgaGludD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBsaW5lcyBmcm9tIHRoZSBzdHJlYW0uCisKKyAgICAgICAgaGludCBjYW4gYmUgc3BlY2lmaWVkIHRvIGNvbnRyb2wgdGhlIG51bWJlciBvZiBsaW5lcyByZWFkOiBubyBtb3JlCisgICAgICAgIGxpbmVzIHdpbGwgYmUgcmVhZCBpZiB0aGUgdG90YWwgc2l6ZSAoaW4gYnl0ZXMvY2hhcmFjdGVycykgb2YgYWxsCisgICAgICAgIGxpbmVzIHNvIGZhciBleGNlZWRzIGhpbnQuCisgICAgICAgICIiIgorICAgICAgICBpZiBoaW50IGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShoaW50LCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludGVnZXIgb3IgTm9uZSBleHBlY3RlZCIpCisgICAgICAgIGlmIGhpbnQgaXMgTm9uZSBvciBoaW50IDw9IDA6CisgICAgICAgICAgICByZXR1cm4gbGlzdChzZWxmKQorICAgICAgICBuID0gMAorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIHNlbGY6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIG4gKz0gbGVuKGxpbmUpCisgICAgICAgICAgICBpZiBuID49IGhpbnQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBsaW5lcyk6CisgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBzZWxmLndyaXRlKGxpbmUpCisKK2lvLklPQmFzZS5yZWdpc3RlcihJT0Jhc2UpCisKKworY2xhc3MgUmF3SU9CYXNlKElPQmFzZSk6CisKKyAgICAiIiJCYXNlIGNsYXNzIGZvciByYXcgYmluYXJ5IEkvTy4iIiIKKworICAgICMgVGhlIHJlYWQoKSBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyByZWFkaW50bygpOyBkZXJpdmVkCisgICAgIyBjbGFzc2VzIHRoYXQgd2FudCB0byBzdXBwb3J0IHJlYWQoKSBvbmx5IG5lZWQgdG8gaW1wbGVtZW50CisgICAgIyByZWFkaW50bygpIGFzIGEgcHJpbWl0aXZlIG9wZXJhdGlvbi4gIEluIGdlbmVyYWwsIHJlYWRpbnRvKCkgY2FuIGJlCisgICAgIyBtb3JlIGVmZmljaWVudCB0aGFuIHJlYWQoKS4KKworICAgICMgKEl0IHdvdWxkIGJlIHRlbXB0aW5nIHRvIGFsc28gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgorICAgICMgcmVhZGludG8oKSBpbiB0ZXJtcyBvZiByZWFkKCksIGluIGNhc2UgdGhlIGxhdHRlciBpcyBhIG1vcmUgc3VpdGFibGUKKyAgICAjIHByaW1pdGl2ZSBvcGVyYXRpb24sIGJ1dCB0aGF0IHdvdWxkIGxlYWQgdG8gbmFzdHkgcmVjdXJzaW9uIGluIGNhc2UKKyAgICAjIGEgc3ViY2xhc3MgZG9lc24ndCBpbXBsZW1lbnQgZWl0aGVyLikKKworICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgorICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcy4KKworICAgICAgICBSZXR1cm5zIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBvbiBFT0YsIG9yIE5vbmUgaWYgdGhlIG9iamVjdCBpcworICAgICAgICBzZXQgbm90IHRvIGJsb2NrIGFuZCBoYXMgbm8gZGF0YSB0byByZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbiBpcyBOb25lOgorICAgICAgICAgICAgbiA9IC0xCisgICAgICAgIGlmIG4gPCAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZGFsbCgpCisgICAgICAgIGIgPSBieXRlYXJyYXkobi5fX2luZGV4X18oKSkKKyAgICAgICAgbiA9IHNlbGYucmVhZGludG8oYikKKyAgICAgICAgaWYgbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZGVsIGJbbjpdCisgICAgICAgIHJldHVybiBieXRlcyhiKQorCisgICAgZGVmIHJlYWRhbGwoc2VsZik6CisgICAgICAgICIiIlJlYWQgdW50aWwgRU9GLCB1c2luZyBtdWx0aXBsZSByZWFkKCkgY2FsbC4iIiIKKyAgICAgICAgcmVzID0gYnl0ZWFycmF5KCkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQoREVGQVVMVF9CVUZGRVJfU0laRSkKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXMgKz0gZGF0YQorICAgICAgICByZXR1cm4gYnl0ZXMocmVzKQorCisgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgorICAgICAgICAiIiJSZWFkIHVwIHRvIGxlbihiKSBieXRlcyBpbnRvIGIuCisKKyAgICAgICAgUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZCAoMCBmb3IgRU9GKSwgb3IgTm9uZSBpZiB0aGUgb2JqZWN0CisgICAgICAgIGlzIHNldCBub3QgdG8gYmxvY2sgYW5kIGhhcyBubyBkYXRhIHRvIHJlYWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZGludG8iKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICAiIiJXcml0ZSB0aGUgZ2l2ZW4gYnVmZmVyIHRvIHRoZSBJTyBzdHJlYW0uCisKKyAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIHdoaWNoIG1heSBiZSBsZXNzIHRoYW4gbGVuKGIpLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoIndyaXRlIikKKworaW8uUmF3SU9CYXNlLnJlZ2lzdGVyKFJhd0lPQmFzZSkKK2Zyb20gX2lvIGltcG9ydCBGaWxlSU8KK1Jhd0lPQmFzZS5yZWdpc3RlcihGaWxlSU8pCisKKworY2xhc3MgQnVmZmVyZWRJT0Jhc2UoSU9CYXNlKToKKworICAgICIiIkJhc2UgY2xhc3MgZm9yIGJ1ZmZlcmVkIElPIG9iamVjdHMuCisKKyAgICBUaGUgbWFpbiBkaWZmZXJlbmNlIHdpdGggUmF3SU9CYXNlIGlzIHRoYXQgdGhlIHJlYWQoKSBtZXRob2QKKyAgICBzdXBwb3J0cyBvbWl0dGluZyB0aGUgc2l6ZSBhcmd1bWVudCwgYW5kIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0CisgICAgaW1wbGVtZW50YXRpb24gdGhhdCBkZWZlcnMgdG8gcmVhZGludG8oKS4KKworICAgIEluIGFkZGl0aW9uLCByZWFkKCksIHJlYWRpbnRvKCkgYW5kIHdyaXRlKCkgbWF5IHJhaXNlCisgICAgQmxvY2tpbmdJT0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgaW4gbm9uLWJsb2NraW5nCisgICAgbW9kZSBhbmQgbm90IHJlYWR5OyB1bmxpa2UgdGhlaXIgcmF3IGNvdW50ZXJwYXJ0cywgdGhleSB3aWxsIG5ldmVyCisgICAgcmV0dXJuIE5vbmUuCisKKyAgICBBIHR5cGljYWwgaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBpbmhlcml0IGZyb20gYSBSYXdJT0Jhc2UKKyAgICBpbXBsZW1lbnRhdGlvbiwgYnV0IHdyYXAgb25lLgorICAgICIiIgorCisgICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMuCisKKyAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIE5vbmUsIG9yIG5lZ2F0aXZlLCByZWFkcyBhbmQKKyAgICAgICAgcmV0dXJucyBhbGwgZGF0YSB1bnRpbCBFT0YuCisKKyAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlLCBhbmQgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcworICAgICAgICBub3QgJ2ludGVyYWN0aXZlJywgbXVsdGlwbGUgcmF3IHJlYWRzIG1heSBiZSBpc3N1ZWQgdG8gc2F0aXNmeQorICAgICAgICB0aGUgYnl0ZSBjb3VudCAodW5sZXNzIEVPRiBpcyByZWFjaGVkIGZpcnN0KS4gIEJ1dCBmb3IKKyAgICAgICAgaW50ZXJhY3RpdmUgcmF3IHN0cmVhbXMgKFhYWCBhbmQgZm9yIHBpcGVzPyksIGF0IG1vc3Qgb25lIHJhdworICAgICAgICByZWFkIHdpbGwgYmUgaXNzdWVkLCBhbmQgYSBzaG9ydCByZXN1bHQgZG9lcyBub3QgaW1wbHkgdGhhdAorICAgICAgICBFT0YgaXMgaW1taW5lbnQuCisKKyAgICAgICAgUmV0dXJucyBhbiBlbXB0eSBieXRlcyBhcnJheSBvbiBFT0YuCisKKyAgICAgICAgUmFpc2VzIEJsb2NraW5nSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGhhcyBubworICAgICAgICBkYXRhIGF0IHRoZSBtb21lbnQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZCIpCisKKyAgICBkZWYgcmVhZDEoc2VsZiwgbj1Ob25lKToKKyAgICAgICAgIiIiUmVhZCB1cCB0byBuIGJ5dGVzIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgorICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZDEiKQorCisgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgorICAgICAgICAiIiJSZWFkIHVwIHRvIGxlbihiKSBieXRlcyBpbnRvIGIuCisKKyAgICAgICAgTGlrZSByZWFkKCksIHRoaXMgbWF5IGlzc3VlIG11bHRpcGxlIHJlYWRzIHRvIHRoZSB1bmRlcmx5aW5nIHJhdworICAgICAgICBzdHJlYW0sIHVubGVzcyB0aGUgbGF0dGVyIGlzICdpbnRlcmFjdGl2ZScuCisKKyAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKDAgZm9yIEVPRikuCisKKyAgICAgICAgUmFpc2VzIEJsb2NraW5nSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGhhcyBubworICAgICAgICBkYXRhIGF0IHRoZSBtb21lbnQuCisgICAgICAgICIiIgorICAgICAgICAjIFhYWCBUaGlzIG91Z2h0IHRvIHdvcmsgd2l0aCBhbnl0aGluZyB0aGF0IHN1cHBvcnRzIHRoZSBidWZmZXIgQVBJCisgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobGVuKGIpKQorICAgICAgICBuID0gbGVuKGRhdGEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJbOm5dID0gZGF0YQorICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGltcG9ydCBhcnJheQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYiwgYXJyYXkuYXJyYXkpOgorICAgICAgICAgICAgICAgIHJhaXNlIGVycgorICAgICAgICAgICAgYls6bl0gPSBhcnJheS5hcnJheShiJ2InLCBkYXRhKQorICAgICAgICByZXR1cm4gbgorCisgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICAiIiJXcml0ZSB0aGUgZ2l2ZW4gYnVmZmVyIHRvIHRoZSBJTyBzdHJlYW0uCisKKyAgICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgd2hpY2ggaXMgbmV2ZXIgbGVzcyB0aGFuCisgICAgICAgIGxlbihiKS4KKworICAgICAgICBSYWlzZXMgQmxvY2tpbmdJT0Vycm9yIGlmIHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgdGhlCisgICAgICAgIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBjYW5ub3QgYWNjZXB0IG1vcmUgZGF0YSBhdCB0aGUgbW9tZW50LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoIndyaXRlIikKKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTZXBhcmF0ZSB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGZyb20gdGhlIGJ1ZmZlciBhbmQgcmV0dXJuIGl0LgorCisgICAgICAgIEFmdGVyIHRoZSByYXcgc3RyZWFtIGhhcyBiZWVuIGRldGFjaGVkLCB0aGUgYnVmZmVyIGlzIGluIGFuIHVudXNhYmxlCisgICAgICAgIHN0YXRlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoImRldGFjaCIpCisKK2lvLkJ1ZmZlcmVkSU9CYXNlLnJlZ2lzdGVyKEJ1ZmZlcmVkSU9CYXNlKQorCisKK2NsYXNzIF9CdWZmZXJlZElPTWl4aW4oQnVmZmVyZWRJT0Jhc2UpOgorCisgICAgIiIiQSBtaXhpbiBpbXBsZW1lbnRhdGlvbiBvZiBCdWZmZXJlZElPQmFzZSB3aXRoIGFuIHVuZGVybHlpbmcgcmF3IHN0cmVhbS4KKworICAgIFRoaXMgcGFzc2VzIG1vc3QgcmVxdWVzdHMgb24gdG8gdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbS4gIEl0CisgICAgZG9lcyAqbm90KiBwcm92aWRlIGltcGxlbWVudGF0aW9ucyBvZiByZWFkKCksIHJlYWRpbnRvKCkgb3IKKyAgICB3cml0ZSgpLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdyk6CisgICAgICAgIHNlbGYuX3JhdyA9IHJhdworCisgICAgIyMjIFBvc2l0aW9uaW5nICMjIworCisgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6CisgICAgICAgIG5ld19wb3NpdGlvbiA9IHNlbGYucmF3LnNlZWsocG9zLCB3aGVuY2UpCisgICAgICAgIGlmIG5ld19wb3NpdGlvbiA8IDA6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgIHJldHVybiBuZXdfcG9zaXRpb24KKworICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICBwb3MgPSBzZWxmLnJhdy50ZWxsKCkKKyAgICAgICAgaWYgcG9zIDwgMDoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGwoKSByZXR1cm5lZCBhbiBpbnZhbGlkIHBvc2l0aW9uIikKKyAgICAgICAgcmV0dXJuIHBvcworCisgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKKyAgICAgICAgIyBGbHVzaCB0aGUgc3RyZWFtLiAgV2UncmUgbWl4aW5nIGJ1ZmZlcmVkIEkvTyB3aXRoIGxvd2VyLWxldmVsIEkvTywKKyAgICAgICAgIyBhbmQgYSBmbHVzaCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHN5bmNoIGJvdGggdmlld3Mgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgIyBmaWxlIHN0YXRlLgorICAgICAgICBzZWxmLmZsdXNoKCkKKworICAgICAgICBpZiBwb3MgaXMgTm9uZToKKyAgICAgICAgICAgIHBvcyA9IHNlbGYudGVsbCgpCisgICAgICAgICMgWFhYOiBTaG91bGQgc2VlaygpIGJlIHVzZWQsIGluc3RlYWQgb2YgcGFzc2luZyB0aGUgcG9zaXRpb24KKyAgICAgICAgIyBYWFggIGRpcmVjdGx5IHRvIHRydW5jYXRlPworICAgICAgICByZXR1cm4gc2VsZi5yYXcudHJ1bmNhdGUocG9zKQorCisgICAgIyMjIEZsdXNoIGFuZCBjbG9zZSAjIyMKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmbHVzaCBvZiBjbG9zZWQgZmlsZSIpCisgICAgICAgIHNlbGYucmF3LmZsdXNoKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yYXcgaXMgbm90IE5vbmUgYW5kIG5vdCBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICAgICAgc2VsZi5yYXcuY2xvc2UoKQorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yYXcgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJhdyBzdHJlYW0gYWxyZWFkeSBkZXRhY2hlZCIpCisgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICByYXcgPSBzZWxmLl9yYXcKKyAgICAgICAgc2VsZi5fcmF3ID0gTm9uZQorICAgICAgICByZXR1cm4gcmF3CisKKyAgICAjIyMgSW5xdWlyaWVzICMjIworCisgICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXcuc2Vla2FibGUoKQorCisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXcucmVhZGFibGUoKQorCisgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXcud3JpdGFibGUoKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJhdyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JhdworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNsb3NlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3LmNsb3NlZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhdy5uYW1lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbW9kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3Lm1vZGUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgY2xzbmFtZSA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuICI8X3B5aW8uezB9PiIuZm9ybWF0KGNsc25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIjxfcHlpby57MH0gbmFtZT17MSFyfT4iLmZvcm1hdChjbHNuYW1lLCBuYW1lKQorCisgICAgIyMjIExvd2VyLWxldmVsIEFQSXMgIyMjCisKKyAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXcuZmlsZW5vKCkKKworICAgIGRlZiBpc2F0dHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhdy5pc2F0dHkoKQorCisKK2NsYXNzIEJ5dGVzSU8oQnVmZmVyZWRJT0Jhc2UpOgorCisgICAgIiIiQnVmZmVyZWQgSS9PIGltcGxlbWVudGF0aW9uIHVzaW5nIGFuIGluLW1lbW9yeSBieXRlcyBidWZmZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5pdGlhbF9ieXRlcz1Ob25lKToKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KCkKKyAgICAgICAgaWYgaW5pdGlhbF9ieXRlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJ1Zi5leHRlbmQoaW5pdGlhbF9ieXRlcykKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gYnVmCisgICAgICAgIHNlbGYuX3BvcyA9IDAKKworICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiX19nZXRzdGF0ZV9fIG9uIGNsb3NlZCBmaWxlIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18uY29weSgpCisKKyAgICBkZWYgZ2V0dmFsdWUoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgYnl0ZXMgdmFsdWUgKGNvbnRlbnRzKSBvZiB0aGUgYnVmZmVyCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImdldHZhbHVlIG9uIGNsb3NlZCBmaWxlIikKKyAgICAgICAgcmV0dXJuIGJ5dGVzKHNlbGYuX2J1ZmZlcikKKworICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicmVhZCBmcm9tIGNsb3NlZCBmaWxlIikKKyAgICAgICAgaWYgbiBpcyBOb25lOgorICAgICAgICAgICAgbiA9IC0xCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG4sIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IHswIXJ9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgdHlwZShuKSkpCisgICAgICAgIGlmIG4gPCAwOgorICAgICAgICAgICAgbiA9IGxlbihzZWxmLl9idWZmZXIpCisgICAgICAgIGlmIGxlbihzZWxmLl9idWZmZXIpIDw9IHNlbGYuX3BvczoKKyAgICAgICAgICAgIHJldHVybiBiIiIKKyAgICAgICAgbmV3cG9zID0gbWluKGxlbihzZWxmLl9idWZmZXIpLCBzZWxmLl9wb3MgKyBuKQorICAgICAgICBiID0gc2VsZi5fYnVmZmVyW3NlbGYuX3BvcyA6IG5ld3Bvc10KKyAgICAgICAgc2VsZi5fcG9zID0gbmV3cG9zCisgICAgICAgIHJldHVybiBieXRlcyhiKQorCisgICAgZGVmIHJlYWQxKHNlbGYsIG4pOgorICAgICAgICAiIiJUaGlzIGlzIHRoZSBzYW1lIGFzIHJlYWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5yZWFkKG4pCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgYik6CisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigid3JpdGUgdG8gY2xvc2VkIGZpbGUiKQorICAgICAgICBpZiBpc2luc3RhbmNlKGIsIHVuaWNvZGUpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYW4ndCB3cml0ZSB1bmljb2RlIHRvIGJpbmFyeSBzdHJlYW0iKQorICAgICAgICBuID0gbGVuKGIpCisgICAgICAgIGlmIG4gPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHBvcyA9IHNlbGYuX3BvcworICAgICAgICBpZiBwb3MgPiBsZW4oc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgICMgSW5zZXJ0cyBudWxsIGJ5dGVzIGJldHdlZW4gdGhlIGN1cnJlbnQgZW5kIG9mIHRoZSBmaWxlCisgICAgICAgICAgICAjIGFuZCB0aGUgbmV3IHdyaXRlIHBvc2l0aW9uLgorICAgICAgICAgICAgcGFkZGluZyA9IGInXHgwMCcgKiAocG9zIC0gbGVuKHNlbGYuX2J1ZmZlcikpCisgICAgICAgICAgICBzZWxmLl9idWZmZXIgKz0gcGFkZGluZworICAgICAgICBzZWxmLl9idWZmZXJbcG9zOnBvcyArIG5dID0gYgorICAgICAgICBzZWxmLl9wb3MgKz0gbgorICAgICAgICByZXR1cm4gbgorCisgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6CisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2VlayBvbiBjbG9zZWQgZmlsZSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBvcy5fX2luZGV4X18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikKKyAgICAgICAgaWYgd2hlbmNlID09IDA6CisgICAgICAgICAgICBpZiBwb3MgPCAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5lZ2F0aXZlIHNlZWsgcG9zaXRpb24gJXIiICUgKHBvcywpKQorICAgICAgICAgICAgc2VsZi5fcG9zID0gcG9zCisgICAgICAgIGVsaWYgd2hlbmNlID09IDE6CisgICAgICAgICAgICBzZWxmLl9wb3MgPSBtYXgoMCwgc2VsZi5fcG9zICsgcG9zKQorICAgICAgICBlbGlmIHdoZW5jZSA9PSAyOgorICAgICAgICAgICAgc2VsZi5fcG9zID0gbWF4KDAsIGxlbihzZWxmLl9idWZmZXIpICsgcG9zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB3aGVuY2UgdmFsdWUiKQorICAgICAgICByZXR1cm4gc2VsZi5fcG9zCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0ZWxsIG9uIGNsb3NlZCBmaWxlIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcworCisgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0cnVuY2F0ZSBvbiBjbG9zZWQgZmlsZSIpCisgICAgICAgIGlmIHBvcyBpcyBOb25lOgorICAgICAgICAgICAgcG9zID0gc2VsZi5fcG9zCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcG9zLl9faW5kZXhfXworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpCisgICAgICAgICAgICBpZiBwb3MgPCAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5lZ2F0aXZlIHRydW5jYXRlIHBvc2l0aW9uICVyIiAlIChwb3MsKSkKKyAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcltwb3M6XQorICAgICAgICByZXR1cm4gcG9zCisKKyAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc2Vla2FibGUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgQnVmZmVyZWRSZWFkZXIoX0J1ZmZlcmVkSU9NaXhpbik6CisKKyAgICAiIiJCdWZmZXJlZFJlYWRlcihyYXdbLCBidWZmZXJfc2l6ZV0pCisKKyAgICBBIGJ1ZmZlciBmb3IgYSByZWFkYWJsZSwgc2VxdWVudGlhbCBCYXNlUmF3SU8gb2JqZWN0LgorCisgICAgVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBCdWZmZXJlZFJlYWRlciBmb3IgdGhlIGdpdmVuIHJlYWRhYmxlIHJhdworICAgIHN0cmVhbSBhbmQgYnVmZmVyX3NpemUuIElmIGJ1ZmZlcl9zaXplIGlzIG9taXR0ZWQsIERFRkFVTFRfQlVGRkVSX1NJWkUKKyAgICBpcyB1c2VkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdywgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBidWZmZXJlZCByZWFkZXIgdXNpbmcgdGhlIGdpdmVuIHJlYWRhYmxlIHJhdyBJTyBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgcmF3LnJlYWRhYmxlKCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcicmF3IiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCisKKyAgICAgICAgX0J1ZmZlcmVkSU9NaXhpbi5fX2luaXRfXyhzZWxmLCByYXcpCisgICAgICAgIGlmIGJ1ZmZlcl9zaXplIDw9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGJ1ZmZlciBzaXplIikKKyAgICAgICAgc2VsZi5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCisgICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKKyAgICAgICAgc2VsZi5fcmVhZF9sb2NrID0gTG9jaygpCisKKyAgICBkZWYgX3Jlc2V0X3JlYWRfYnVmKHNlbGYpOgorICAgICAgICBzZWxmLl9yZWFkX2J1ZiA9IGIiIgorICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKKworICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgICAgICIiIlJlYWQgbiBieXRlcy4KKworICAgICAgICBSZXR1cm5zIGV4YWN0bHkgbiBieXRlcyBvZiBkYXRhIHVubGVzcyB0aGUgdW5kZXJseWluZyByYXcgSU8KKyAgICAgICAgc3RyZWFtIHJlYWNoZXMgRU9GIG9yIGlmIHRoZSBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZworICAgICAgICBtb2RlLiBJZiBuIGlzIG5lZ2F0aXZlLCByZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQKKyAgICAgICAgYmxvY2suCisgICAgICAgICIiIgorICAgICAgICBpZiBuIGlzIG5vdCBOb25lIGFuZCBuIDwgLTE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIG51bWJlciBvZiBieXRlcyB0byByZWFkIikKKyAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZChuKQorCisgICAgZGVmIF9yZWFkX3VubG9ja2VkKHNlbGYsIG49Tm9uZSk6CisgICAgICAgIG5vZGF0YV92YWwgPSBiIiIKKyAgICAgICAgZW1wdHlfdmFsdWVzID0gKGIiIiwgTm9uZSkKKyAgICAgICAgYnVmID0gc2VsZi5fcmVhZF9idWYKKyAgICAgICAgcG9zID0gc2VsZi5fcmVhZF9wb3MKKworICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgaXMgdW5zcGVjaWZpZWQuCisgICAgICAgIGlmIG4gaXMgTm9uZSBvciBuID09IC0xOgorICAgICAgICAgICAgc2VsZi5fcmVzZXRfcmVhZF9idWYoKQorICAgICAgICAgICAgY2h1bmtzID0gW2J1Zltwb3M6XV0gICMgU3RyaXAgdGhlIGNvbnN1bWVkIGJ5dGVzLgorICAgICAgICAgICAgY3VycmVudF9zaXplID0gMAorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAjIFJlYWQgdW50aWwgRU9GIG9yIHVudGlsIHJlYWQoKSB3b3VsZCBibG9jay4KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5yYXcucmVhZCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgY2h1bmsgaW4gZW1wdHlfdmFsdWVzOgorICAgICAgICAgICAgICAgICAgICBub2RhdGFfdmFsID0gY2h1bmsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBjdXJyZW50X3NpemUgKz0gbGVuKGNodW5rKQorICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoY2h1bmspCisgICAgICAgICAgICByZXR1cm4gYiIiLmpvaW4oY2h1bmtzKSBvciBub2RhdGFfdmFsCisKKyAgICAgICAgIyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgaXMgc3BlY2lmaWVkLCByZXR1cm4gYXQgbW9zdCBuIGJ5dGVzLgorICAgICAgICBhdmFpbCA9IGxlbihidWYpIC0gcG9zICAjIExlbmd0aCBvZiB0aGUgYXZhaWxhYmxlIGJ1ZmZlcmVkIGRhdGEuCisgICAgICAgIGlmIG4gPD0gYXZhaWw6CisgICAgICAgICAgICAjIEZhc3QgcGF0aDogdGhlIGRhdGEgdG8gcmVhZCBpcyBmdWxseSBidWZmZXJlZC4KKyAgICAgICAgICAgIHNlbGYuX3JlYWRfcG9zICs9IG4KKyAgICAgICAgICAgIHJldHVybiBidWZbcG9zOnBvcytuXQorICAgICAgICAjIFNsb3cgcGF0aDogcmVhZCBmcm9tIHRoZSBzdHJlYW0gdW50aWwgZW5vdWdoIGJ5dGVzIGFyZSByZWFkLAorICAgICAgICAjIG9yIHVudGlsIGFuIEVPRiBvY2N1cnMgb3IgdW50aWwgcmVhZCgpIHdvdWxkIGJsb2NrLgorICAgICAgICBjaHVua3MgPSBbYnVmW3BvczpdXQorICAgICAgICB3YW50ZWQgPSBtYXgoc2VsZi5idWZmZXJfc2l6ZSwgbikKKyAgICAgICAgd2hpbGUgYXZhaWwgPCBuOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5yYXcucmVhZCh3YW50ZWQpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRUlOVFI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGNodW5rIGluIGVtcHR5X3ZhbHVlczoKKyAgICAgICAgICAgICAgICBub2RhdGFfdmFsID0gY2h1bmsKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgYXZhaWwgKz0gbGVuKGNodW5rKQorICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChjaHVuaykKKyAgICAgICAgIyBuIGlzIG1vcmUgdGhlbiBhdmFpbCBvbmx5IHdoZW4gYW4gRU9GIG9jY3VycmVkIG9yIHdoZW4KKyAgICAgICAgIyByZWFkKCkgd291bGQgaGF2ZSBibG9ja2VkLgorICAgICAgICBuID0gbWluKG4sIGF2YWlsKQorICAgICAgICBvdXQgPSBiIiIuam9pbihjaHVua3MpCisgICAgICAgIHNlbGYuX3JlYWRfYnVmID0gb3V0W246XSAgIyBTYXZlIHRoZSBleHRyYSBkYXRhIGluIHRoZSBidWZmZXIuCisgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAorICAgICAgICByZXR1cm4gb3V0WzpuXSBpZiBvdXQgZWxzZSBub2RhdGFfdmFsCisKKyAgICBkZWYgcGVlayhzZWxmLCBuPTApOgorICAgICAgICAiIiJSZXR1cm5zIGJ1ZmZlcmVkIGJ5dGVzIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBwb3NpdGlvbi4KKworICAgICAgICBUaGUgYXJndW1lbnQgaW5kaWNhdGVzIGEgZGVzaXJlZCBtaW5pbWFsIG51bWJlciBvZiBieXRlczsgd2UKKyAgICAgICAgZG8gYXQgbW9zdCBvbmUgcmF3IHJlYWQgdG8gc2F0aXNmeSBpdC4gIFdlIG5ldmVyIHJldHVybiBtb3JlCisgICAgICAgIHRoYW4gc2VsZi5idWZmZXJfc2l6ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BlZWtfdW5sb2NrZWQobikKKworICAgIGRlZiBfcGVla191bmxvY2tlZChzZWxmLCBuPTApOgorICAgICAgICB3YW50ID0gbWluKG4sIHNlbGYuYnVmZmVyX3NpemUpCisgICAgICAgIGhhdmUgPSBsZW4oc2VsZi5fcmVhZF9idWYpIC0gc2VsZi5fcmVhZF9wb3MKKyAgICAgICAgaWYgaGF2ZSA8IHdhbnQgb3IgaGF2ZSA8PSAwOgorICAgICAgICAgICAgdG9fcmVhZCA9IHNlbGYuYnVmZmVyX3NpemUgLSBoYXZlCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHNlbGYucmF3LnJlYWQodG9fcmVhZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVJTlRSOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgY3VycmVudDoKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2J1ZiA9IHNlbGYuX3JlYWRfYnVmW3NlbGYuX3JlYWRfcG9zOl0gKyBjdXJyZW50CisgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2J1ZltzZWxmLl9yZWFkX3BvczpdCisKKyAgICBkZWYgcmVhZDEoc2VsZiwgbik6CisgICAgICAgICIiIlJlYWRzIHVwIHRvIG4gYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgorICAgICAgICAjIFJldHVybnMgdXAgdG8gbiBieXRlcy4gIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCB3ZQorICAgICAgICAjIG9ubHkgcmV0dXJuIGJ1ZmZlcmVkIGJ5dGVzLiAgT3RoZXJ3aXNlLCB3ZSBkbyBvbmUgcmF3IHJlYWQuCisgICAgICAgIGlmIG4gPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgbXVzdCBiZSBwb3NpdGl2ZSIpCisgICAgICAgIGlmIG4gPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBiIiIKKyAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9wZWVrX3VubG9ja2VkKDEpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZCgKKyAgICAgICAgICAgICAgICBtaW4obiwgbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zKSkKKworICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICByZXR1cm4gX0J1ZmZlcmVkSU9NaXhpbi50ZWxsKHNlbGYpIC0gbGVuKHNlbGYuX3JlYWRfYnVmKSArIHNlbGYuX3JlYWRfcG9zCisKKyAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZT0wKToKKyAgICAgICAgaWYgbm90ICgwIDw9IHdoZW5jZSA8PSAyKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgd2hlbmNlIHZhbHVlIikKKyAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CisgICAgICAgICAgICBpZiB3aGVuY2UgPT0gMToKKyAgICAgICAgICAgICAgICBwb3MgLT0gbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zCisgICAgICAgICAgICBwb3MgPSBfQnVmZmVyZWRJT01peGluLnNlZWsoc2VsZiwgcG9zLCB3aGVuY2UpCisgICAgICAgICAgICBzZWxmLl9yZXNldF9yZWFkX2J1ZigpCisgICAgICAgICAgICByZXR1cm4gcG9zCisKK2NsYXNzIEJ1ZmZlcmVkV3JpdGVyKF9CdWZmZXJlZElPTWl4aW4pOgorCisgICAgIiIiQSBidWZmZXIgZm9yIGEgd3JpdGVhYmxlIHNlcXVlbnRpYWwgUmF3SU8gb2JqZWN0LgorCisgICAgVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBCdWZmZXJlZFdyaXRlciBmb3IgdGhlIGdpdmVuIHdyaXRlYWJsZSByYXcKKyAgICBzdHJlYW0uIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvCisgICAgREVGQVVMVF9CVUZGRVJfU0laRS4KKyAgICAiIiIKKworICAgIF93YXJuaW5nX3N0YWNrX29mZnNldCA9IDIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXcsCisgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplPURFRkFVTFRfQlVGRkVSX1NJWkUsIG1heF9idWZmZXJfc2l6ZT1Ob25lKToKKyAgICAgICAgaWYgbm90IHJhdy53cml0YWJsZSgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQorCisgICAgICAgIF9CdWZmZXJlZElPTWl4aW4uX19pbml0X18oc2VsZiwgcmF3KQorICAgICAgICBpZiBidWZmZXJfc2l6ZSA8PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBidWZmZXIgc2l6ZSIpCisgICAgICAgIGlmIG1heF9idWZmZXJfc2l6ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIm1heF9idWZmZXJfc2l6ZSBpcyBkZXByZWNhdGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93YXJuaW5nX3N0YWNrX29mZnNldCkKKyAgICAgICAgc2VsZi5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCisgICAgICAgIHNlbGYuX3dyaXRlX2J1ZiA9IGJ5dGVhcnJheSgpCisgICAgICAgIHNlbGYuX3dyaXRlX2xvY2sgPSBMb2NrKCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ3cml0ZSB0byBjbG9zZWQgZmlsZSIpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYiwgdW5pY29kZSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNhbid0IHdyaXRlIHVuaWNvZGUgdG8gYmluYXJ5IHN0cmVhbSIpCisgICAgICAgIHdpdGggc2VsZi5fd3JpdGVfbG9jazoKKyAgICAgICAgICAgICMgWFhYIHdlIGNhbiBpbXBsZW1lbnQgc29tZSBtb3JlIHRyaWNrcyB0byB0cnkgYW5kIGF2b2lkCisgICAgICAgICAgICAjIHBhcnRpYWwgd3JpdGVzCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5fd3JpdGVfYnVmKSA+IHNlbGYuYnVmZmVyX3NpemU6CisgICAgICAgICAgICAgICAgIyBXZSdyZSBmdWxsLCBzbyBsZXQncyBwcmUtZmx1c2ggdGhlIGJ1ZmZlcgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmx1c2hfdW5sb2NrZWQoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgIyBXZSBjYW4ndCBhY2NlcHQgYW55dGhpbmcgZWxzZS4KKyAgICAgICAgICAgICAgICAgICAgIyBYWFggV2h5IG5vdCBqdXN0IGxldCB0aGUgZXhjZXB0aW9uIHBhc3MgdGhyb3VnaD8KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQmxvY2tpbmdJT0Vycm9yKGUuZXJybm8sIGUuc3RyZXJyb3IsIDApCisgICAgICAgICAgICBiZWZvcmUgPSBsZW4oc2VsZi5fd3JpdGVfYnVmKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfYnVmLmV4dGVuZChiKQorICAgICAgICAgICAgd3JpdHRlbiA9IGxlbihzZWxmLl93cml0ZV9idWYpIC0gYmVmb3JlCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5fd3JpdGVfYnVmKSA+IHNlbGYuYnVmZmVyX3NpemU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mbHVzaF91bmxvY2tlZCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fd3JpdGVfYnVmKSA+IHNlbGYuYnVmZmVyX3NpemU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFdlJ3ZlIGhpdCB0aGUgYnVmZmVyX3NpemUuIFdlIGhhdmUgdG8gYWNjZXB0IGEgcGFydGlhbAorICAgICAgICAgICAgICAgICAgICAgICAgIyB3cml0ZSBhbmQgY3V0IGJhY2sgb3VyIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhZ2UgPSBsZW4oc2VsZi5fd3JpdGVfYnVmKSAtIHNlbGYuYnVmZmVyX3NpemUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXR0ZW4gLT0gb3ZlcmFnZQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfYnVmID0gc2VsZi5fd3JpdGVfYnVmWzpzZWxmLmJ1ZmZlcl9zaXplXQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQmxvY2tpbmdJT0Vycm9yKGUuZXJybm8sIGUuc3RyZXJyb3IsIHdyaXR0ZW4pCisgICAgICAgICAgICByZXR1cm4gd3JpdHRlbgorCisgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKKyAgICAgICAgd2l0aCBzZWxmLl93cml0ZV9sb2NrOgorICAgICAgICAgICAgc2VsZi5fZmx1c2hfdW5sb2NrZWQoKQorICAgICAgICAgICAgaWYgcG9zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcG9zID0gc2VsZi5yYXcudGVsbCgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5yYXcudHJ1bmNhdGUocG9zKQorCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuX3dyaXRlX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9mbHVzaF91bmxvY2tlZCgpCisKKyAgICBkZWYgX2ZsdXNoX3VubG9ja2VkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZsdXNoIG9mIGNsb3NlZCBmaWxlIikKKyAgICAgICAgd3JpdHRlbiA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgc2VsZi5fd3JpdGVfYnVmOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbiA9IHNlbGYucmF3LndyaXRlKHNlbGYuX3dyaXRlX2J1ZikKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVJTlRSOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBuID4gbGVuKHNlbGYuX3dyaXRlX2J1Zikgb3IgbiA8IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIndyaXRlKCkgcmV0dXJuZWQgaW5jb3JyZWN0IG51bWJlciBvZiBieXRlcyIpCisgICAgICAgICAgICAgICAgZGVsIHNlbGYuX3dyaXRlX2J1Zls6bl0KKyAgICAgICAgICAgICAgICB3cml0dGVuICs9IG4KKyAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgbiA9IGUuY2hhcmFjdGVyc193cml0dGVuCisgICAgICAgICAgICBkZWwgc2VsZi5fd3JpdGVfYnVmWzpuXQorICAgICAgICAgICAgd3JpdHRlbiArPSBuCisgICAgICAgICAgICByYWlzZSBCbG9ja2luZ0lPRXJyb3IoZS5lcnJubywgZS5zdHJlcnJvciwgd3JpdHRlbikKKworICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICByZXR1cm4gX0J1ZmZlcmVkSU9NaXhpbi50ZWxsKHNlbGYpICsgbGVuKHNlbGYuX3dyaXRlX2J1ZikKKworICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgorICAgICAgICBpZiBub3QgKDAgPD0gd2hlbmNlIDw9IDIpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB3aGVuY2UiKQorICAgICAgICB3aXRoIHNlbGYuX3dyaXRlX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9mbHVzaF91bmxvY2tlZCgpCisgICAgICAgICAgICByZXR1cm4gX0J1ZmZlcmVkSU9NaXhpbi5zZWVrKHNlbGYsIHBvcywgd2hlbmNlKQorCisKK2NsYXNzIEJ1ZmZlcmVkUldQYWlyKEJ1ZmZlcmVkSU9CYXNlKToKKworICAgICIiIkEgYnVmZmVyZWQgcmVhZGVyIGFuZCB3cml0ZXIgb2JqZWN0IHRvZ2V0aGVyLgorCisgICAgQSBidWZmZXJlZCByZWFkZXIgb2JqZWN0IGFuZCBidWZmZXJlZCB3cml0ZXIgb2JqZWN0IHB1dCB0b2dldGhlciB0bworICAgIGZvcm0gYSBzZXF1ZW50aWFsIElPIG9iamVjdCB0aGF0IGNhbiByZWFkIGFuZCB3cml0ZS4gVGhpcyBpcyB0eXBpY2FsbHkKKyAgICB1c2VkIHdpdGggYSBzb2NrZXQgb3IgdHdvLXdheSBwaXBlLgorCisgICAgcmVhZGVyIGFuZCB3cml0ZXIgYXJlIFJhd0lPQmFzZSBvYmplY3RzIHRoYXQgYXJlIHJlYWRhYmxlIGFuZAorICAgIHdyaXRlYWJsZSByZXNwZWN0aXZlbHkuIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBvbWl0dGVkIGl0IGRlZmF1bHRzIHRvCisgICAgREVGQVVMVF9CVUZGRVJfU0laRS4KKyAgICAiIiIKKworICAgICMgWFhYIFRoZSB1c2VmdWxuZXNzIG9mIHRoaXMgKGNvbXBhcmVkIHRvIGhhdmluZyB0d28gc2VwYXJhdGUgSU8KKyAgICAjIG9iamVjdHMpIGlzIHF1ZXN0aW9uYWJsZS4KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFkZXIsIHdyaXRlciwKKyAgICAgICAgICAgICAgICAgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSwgbWF4X2J1ZmZlcl9zaXplPU5vbmUpOgorICAgICAgICAiIiJDb25zdHJ1Y3Rvci4KKworICAgICAgICBUaGUgYXJndW1lbnRzIGFyZSB0d28gUmF3SU8gaW5zdGFuY2VzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbWF4X2J1ZmZlcl9zaXplIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigibWF4X2J1ZmZlcl9zaXplIGlzIGRlcHJlY2F0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisKKyAgICAgICAgaWYgbm90IHJlYWRlci5yZWFkYWJsZSgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJlYWRlciIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQorCisgICAgICAgIGlmIG5vdCB3cml0ZXIud3JpdGFibGUoKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJ3cml0ZXIiIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKKworICAgICAgICBzZWxmLnJlYWRlciA9IEJ1ZmZlcmVkUmVhZGVyKHJlYWRlciwgYnVmZmVyX3NpemUpCisgICAgICAgIHNlbGYud3JpdGVyID0gQnVmZmVyZWRXcml0ZXIod3JpdGVyLCBidWZmZXJfc2l6ZSkKKworICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgICAgIGlmIG4gaXMgTm9uZToKKyAgICAgICAgICAgIG4gPSAtMQorICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZChuKQorCisgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgorICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZGludG8oYikKKworICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLndyaXRlKGIpCisKKyAgICBkZWYgcGVlayhzZWxmLCBuPTApOgorICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucGVlayhuKQorCisgICAgZGVmIHJlYWQxKHNlbGYsIG4pOgorICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZDEobikKKworICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRhYmxlKCkKKworICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLndyaXRhYmxlKCkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLmZsdXNoKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZXIuY2xvc2UoKQorICAgICAgICBzZWxmLnJlYWRlci5jbG9zZSgpCisKKyAgICBkZWYgaXNhdHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIuaXNhdHR5KCkgb3Igc2VsZi53cml0ZXIuaXNhdHR5KCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjbG9zZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLndyaXRlci5jbG9zZWQKKworCitjbGFzcyBCdWZmZXJlZFJhbmRvbShCdWZmZXJlZFdyaXRlciwgQnVmZmVyZWRSZWFkZXIpOgorCisgICAgIiIiQSBidWZmZXJlZCBpbnRlcmZhY2UgdG8gcmFuZG9tIGFjY2VzcyBzdHJlYW1zLgorCisgICAgVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSByZWFkZXIgYW5kIHdyaXRlciBmb3IgYSBzZWVrYWJsZSBzdHJlYW0sCisgICAgcmF3LCBnaXZlbiBpbiB0aGUgZmlyc3QgYXJndW1lbnQuIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBvbWl0dGVkIGl0CisgICAgZGVmYXVsdHMgdG8gREVGQVVMVF9CVUZGRVJfU0laRS4KKyAgICAiIiIKKworICAgIF93YXJuaW5nX3N0YWNrX29mZnNldCA9IDMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXcsCisgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplPURFRkFVTFRfQlVGRkVSX1NJWkUsIG1heF9idWZmZXJfc2l6ZT1Ob25lKToKKyAgICAgICAgcmF3Ll9jaGVja1NlZWthYmxlKCkKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIuX19pbml0X18oc2VsZiwgcmF3LCBidWZmZXJfc2l6ZSkKKyAgICAgICAgQnVmZmVyZWRXcml0ZXIuX19pbml0X18oc2VsZiwgcmF3LCBidWZmZXJfc2l6ZSwgbWF4X2J1ZmZlcl9zaXplKQorCisgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6CisgICAgICAgIGlmIG5vdCAoMCA8PSB3aGVuY2UgPD0gMik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHdoZW5jZSIpCisgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICBpZiBzZWxmLl9yZWFkX2J1ZjoKKyAgICAgICAgICAgICMgVW5kbyByZWFkIGFoZWFkLgorICAgICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5yYXcuc2VlayhzZWxmLl9yZWFkX3BvcyAtIGxlbihzZWxmLl9yZWFkX2J1ZiksIDEpCisgICAgICAgICMgRmlyc3QgZG8gdGhlIHJhdyBzZWVrLCB0aGVuIGVtcHR5IHRoZSByZWFkIGJ1ZmZlciwgc28gdGhhdAorICAgICAgICAjIGlmIHRoZSByYXcgc2VlayBmYWlscywgd2UgZG9uJ3QgbG9zZSBidWZmZXJlZCBkYXRhIGZvcmV2ZXIuCisgICAgICAgIHBvcyA9IHNlbGYucmF3LnNlZWsocG9zLCB3aGVuY2UpCisgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcmVzZXRfcmVhZF9idWYoKQorICAgICAgICBpZiBwb3MgPCAwOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic2VlaygpIHJldHVybmVkIGludmFsaWQgcG9zaXRpb24iKQorICAgICAgICByZXR1cm4gcG9zCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfYnVmOgorICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkV3JpdGVyLnRlbGwoc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci50ZWxsKHNlbGYpCisKKyAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zPU5vbmUpOgorICAgICAgICBpZiBwb3MgaXMgTm9uZToKKyAgICAgICAgICAgIHBvcyA9IHNlbGYudGVsbCgpCisgICAgICAgICMgVXNlIHNlZWsgdG8gZmx1c2ggdGhlIHJlYWQgYnVmZmVyLgorICAgICAgICByZXR1cm4gQnVmZmVyZWRXcml0ZXIudHJ1bmNhdGUoc2VsZiwgcG9zKQorCisgICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICAgICAgaWYgbiBpcyBOb25lOgorICAgICAgICAgICAgbiA9IC0xCisgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZChzZWxmLCBuKQorCisgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgorICAgICAgICBzZWxmLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWRpbnRvKHNlbGYsIGIpCisKKyAgICBkZWYgcGVlayhzZWxmLCBuPTApOgorICAgICAgICBzZWxmLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnBlZWsoc2VsZiwgbikKKworICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkMShzZWxmLCBuKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICBpZiBzZWxmLl9yZWFkX2J1ZjoKKyAgICAgICAgICAgICMgVW5kbyByZWFkYWhlYWQKKyAgICAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgorICAgICAgICAgICAgICAgIHNlbGYucmF3LnNlZWsoc2VsZi5fcmVhZF9wb3MgLSBsZW4oc2VsZi5fcmVhZF9idWYpLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkV3JpdGVyLndyaXRlKHNlbGYsIGIpCisKKworY2xhc3MgVGV4dElPQmFzZShJT0Jhc2UpOgorCisgICAgIiIiQmFzZSBjbGFzcyBmb3IgdGV4dCBJL08uCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgY2hhcmFjdGVyIGFuZCBsaW5lIGJhc2VkIGludGVyZmFjZSB0byBzdHJlYW0KKyAgICBJL08uIFRoZXJlIGlzIG5vIHJlYWRpbnRvIG1ldGhvZCBiZWNhdXNlIFB5dGhvbidzIGNoYXJhY3RlciBzdHJpbmdzCisgICAgYXJlIGltbXV0YWJsZS4gVGhlcmUgaXMgbm8gcHVibGljIGNvbnN0cnVjdG9yLgorICAgICIiIgorCisgICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6CisgICAgICAgICIiIlJlYWQgYXQgbW9zdCBuIGNoYXJhY3RlcnMgZnJvbSBzdHJlYW0uCisKKyAgICAgICAgUmVhZCBmcm9tIHVuZGVybHlpbmcgYnVmZmVyIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIG9yIHdlIGhpdCBFT0YuCisgICAgICAgIElmIG4gaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0YuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZCIpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgcyk6CisgICAgICAgICIiIldyaXRlIHN0cmluZyBzIHRvIHN0cmVhbS4iIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoIndyaXRlIikKKworICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CisgICAgICAgICIiIlRydW5jYXRlIHNpemUgdG8gcG9zLiIiIgorICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgidHJ1bmNhdGUiKQorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICAiIiJSZWFkIHVudGlsIG5ld2xpbmUgb3IgRU9GLgorCisgICAgICAgIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIEVPRiBpcyBoaXQgaW1tZWRpYXRlbHkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZGxpbmUiKQorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlcGFyYXRlIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBmcm9tIHRoZSBUZXh0SU9CYXNlIGFuZCByZXR1cm4gaXQuCisKKyAgICAgICAgQWZ0ZXIgdGhlIHVuZGVybHlpbmcgYnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkLCB0aGUgVGV4dElPIGlzIGluIGFuCisgICAgICAgIHVudXNhYmxlIHN0YXRlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoImRldGFjaCIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICIiIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlLiIiIgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5ld2xpbmVzKHNlbGYpOgorICAgICAgICAiIiJMaW5lIGVuZGluZ3MgdHJhbnNsYXRlZCBzbyBmYXIuCisKKyAgICAgICAgT25seSBsaW5lIGVuZGluZ3MgdHJhbnNsYXRlZCBkdXJpbmcgcmVhZGluZyBhcmUgY29uc2lkZXJlZC4KKworICAgICAgICBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZXJyb3JzKHNlbGYpOgorICAgICAgICAiIiJFcnJvciBzZXR0aW5nIG9mIHRoZSBkZWNvZGVyIG9yIGVuY29kZXIuCisKKyAgICAgICAgU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUuIiIiCisgICAgICAgIHJldHVybiBOb25lCisKK2lvLlRleHRJT0Jhc2UucmVnaXN0ZXIoVGV4dElPQmFzZSkKKworCitjbGFzcyBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIHIiIiJDb2RlYyB1c2VkIHdoZW4gcmVhZGluZyBhIGZpbGUgaW4gdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUuICBJdCB3cmFwcworICAgIGFub3RoZXIgaW5jcmVtZW50YWwgZGVjb2RlciwgdHJhbnNsYXRpbmcgXHJcbiBhbmQgXHIgaW50byBcbi4gIEl0IGFsc28KKyAgICByZWNvcmRzIHRoZSB0eXBlcyBvZiBuZXdsaW5lcyBlbmNvdW50ZXJlZC4gIFdoZW4gdXNlZCB3aXRoCisgICAgdHJhbnNsYXRlPUZhbHNlLCBpdCBlbnN1cmVzIHRoYXQgdGhlIG5ld2xpbmUgc2VxdWVuY2UgaXMgcmV0dXJuZWQgaW4KKyAgICBvbmUgcGllY2UuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlY29kZXIsIHRyYW5zbGF0ZSwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlci5fX2luaXRfXyhzZWxmLCBlcnJvcnM9ZXJyb3JzKQorICAgICAgICBzZWxmLnRyYW5zbGF0ZSA9IHRyYW5zbGF0ZQorICAgICAgICBzZWxmLmRlY29kZXIgPSBkZWNvZGVyCisgICAgICAgIHNlbGYuc2Vlbm5sID0gMAorICAgICAgICBzZWxmLnBlbmRpbmdjciA9IEZhbHNlCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgICMgZGVjb2RlIGlucHV0ICh3aXRoIHRoZSBldmVudHVhbCBcciBmcm9tIGEgcHJldmlvdXMgcGFzcykKKyAgICAgICAgaWYgc2VsZi5kZWNvZGVyIGlzIE5vbmU6CisgICAgICAgICAgICBvdXRwdXQgPSBpbnB1dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5kZWNvZGVyLmRlY29kZShpbnB1dCwgZmluYWw9ZmluYWwpCisgICAgICAgIGlmIHNlbGYucGVuZGluZ2NyIGFuZCAob3V0cHV0IG9yIGZpbmFsKToKKyAgICAgICAgICAgIG91dHB1dCA9ICJcciIgKyBvdXRwdXQKKyAgICAgICAgICAgIHNlbGYucGVuZGluZ2NyID0gRmFsc2UKKworICAgICAgICAjIHJldGFpbiBsYXN0IFxyIGV2ZW4gd2hlbiBub3QgdHJhbnNsYXRpbmcgZGF0YToKKyAgICAgICAgIyB0aGVuIHJlYWRsaW5lKCkgaXMgc3VyZSB0byBnZXQgXHJcbiBpbiBvbmUgcGFzcworICAgICAgICBpZiBvdXRwdXQuZW5kc3dpdGgoIlxyIikgYW5kIG5vdCBmaW5hbDoKKyAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dFs6LTFdCisgICAgICAgICAgICBzZWxmLnBlbmRpbmdjciA9IFRydWUKKworICAgICAgICAjIFJlY29yZCB3aGljaCBuZXdsaW5lcyBhcmUgcmVhZAorICAgICAgICBjcmxmID0gb3V0cHV0LmNvdW50KCdcclxuJykKKyAgICAgICAgY3IgPSBvdXRwdXQuY291bnQoJ1xyJykgLSBjcmxmCisgICAgICAgIGxmID0gb3V0cHV0LmNvdW50KCdcbicpIC0gY3JsZgorICAgICAgICBzZWxmLnNlZW5ubCB8PSAobGYgYW5kIHNlbGYuX0xGKSB8IChjciBhbmQgc2VsZi5fQ1IpIFwKKyAgICAgICAgICAgICAgICAgICAgfCAoY3JsZiBhbmQgc2VsZi5fQ1JMRikKKworICAgICAgICBpZiBzZWxmLnRyYW5zbGF0ZToKKyAgICAgICAgICAgIGlmIGNybGY6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKQorICAgICAgICAgICAgaWYgY3I6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoIlxyIiwgIlxuIikKKworICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYgZ2V0c3RhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVjb2RlciBpcyBOb25lOgorICAgICAgICAgICAgYnVmID0gYiIiCisgICAgICAgICAgICBmbGFnID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYnVmLCBmbGFnID0gc2VsZi5kZWNvZGVyLmdldHN0YXRlKCkKKyAgICAgICAgZmxhZyA8PD0gMQorICAgICAgICBpZiBzZWxmLnBlbmRpbmdjcjoKKyAgICAgICAgICAgIGZsYWcgfD0gMQorICAgICAgICByZXR1cm4gYnVmLCBmbGFnCisKKyAgICBkZWYgc2V0c3RhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBidWYsIGZsYWcgPSBzdGF0ZQorICAgICAgICBzZWxmLnBlbmRpbmdjciA9IGJvb2woZmxhZyAmIDEpCisgICAgICAgIGlmIHNlbGYuZGVjb2RlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGVjb2Rlci5zZXRzdGF0ZSgoYnVmLCBmbGFnID4+IDEpKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNlZW5ubCA9IDAKKyAgICAgICAgc2VsZi5wZW5kaW5nY3IgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLmRlY29kZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRlY29kZXIucmVzZXQoKQorCisgICAgX0xGID0gMQorICAgIF9DUiA9IDIKKyAgICBfQ1JMRiA9IDQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuZXdsaW5lcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChOb25lLAorICAgICAgICAgICAgICAgICJcbiIsCisgICAgICAgICAgICAgICAgIlxyIiwKKyAgICAgICAgICAgICAgICAoIlxyIiwgIlxuIiksCisgICAgICAgICAgICAgICAgIlxyXG4iLAorICAgICAgICAgICAgICAgICgiXG4iLCAiXHJcbiIpLAorICAgICAgICAgICAgICAgICgiXHIiLCAiXHJcbiIpLAorICAgICAgICAgICAgICAgICgiXHIiLCAiXG4iLCAiXHJcbiIpCisgICAgICAgICAgICAgICApW3NlbGYuc2Vlbm5sXQorCisKK2NsYXNzIFRleHRJT1dyYXBwZXIoVGV4dElPQmFzZSk6CisKKyAgICByIiIiQ2hhcmFjdGVyIGFuZCBsaW5lIGJhc2VkIGxheWVyIG92ZXIgYSBCdWZmZXJlZElPQmFzZSBvYmplY3QsIGJ1ZmZlci4KKworICAgIGVuY29kaW5nIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB0aGF0IHRoZSBzdHJlYW0gd2lsbCBiZQorICAgIGRlY29kZWQgb3IgZW5jb2RlZCB3aXRoLiBJdCBkZWZhdWx0cyB0byBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcuCisKKyAgICBlcnJvcnMgZGV0ZXJtaW5lcyB0aGUgc3RyaWN0bmVzcyBvZiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgKHNlZSB0aGUKKyAgICBjb2RlY3MucmVnaXN0ZXIpIGFuZCBkZWZhdWx0cyB0byAic3RyaWN0Ii4KKworICAgIG5ld2xpbmUgY2FuIGJlIE5vbmUsICcnLCAnXG4nLCAnXHInLCBvciAnXHJcbicuICBJdCBjb250cm9scyB0aGUKKyAgICBoYW5kbGluZyBvZiBsaW5lIGVuZGluZ3MuIElmIGl0IGlzIE5vbmUsIHVuaXZlcnNhbCBuZXdsaW5lcyBpcworICAgIGVuYWJsZWQuICBXaXRoIHRoaXMgZW5hYmxlZCwgb24gaW5wdXQsIHRoZSBsaW5lcyBlbmRpbmdzICdcbicsICdccicsCisgICAgb3IgJ1xyXG4nIGFyZSB0cmFuc2xhdGVkIHRvICdcbicgYmVmb3JlIGJlaW5nIHJldHVybmVkIHRvIHRoZQorICAgIGNhbGxlci4gQ29udmVyc2VseSwgb24gb3V0cHV0LCAnXG4nIGlzIHRyYW5zbGF0ZWQgdG8gdGhlIHN5c3RlbQorICAgIGRlZmF1bHQgbGluZSBzZXBlcmF0b3IsIG9zLmxpbmVzZXAuIElmIG5ld2xpbmUgaXMgYW55IG90aGVyIG9mIGl0cworICAgIGxlZ2FsIHZhbHVlcywgdGhhdCBuZXdsaW5lIGJlY29tZXMgdGhlIG5ld2xpbmUgd2hlbiB0aGUgZmlsZSBpcyByZWFkCisgICAgYW5kIGl0IGlzIHJldHVybmVkIHVudHJhbnNsYXRlZC4gT24gb3V0cHV0LCAnXG4nIGlzIGNvbnZlcnRlZCB0byB0aGUKKyAgICBuZXdsaW5lLgorCisgICAgSWYgbGluZV9idWZmZXJpbmcgaXMgVHJ1ZSwgYSBjYWxsIHRvIGZsdXNoIGlzIGltcGxpZWQgd2hlbiBhIGNhbGwgdG8KKyAgICB3cml0ZSBjb250YWlucyBhIG5ld2xpbmUgY2hhcmFjdGVyLgorICAgICIiIgorCisgICAgX0NIVU5LX1NJWkUgPSAyMDQ4CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVmZmVyLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lLAorICAgICAgICAgICAgICAgICBsaW5lX2J1ZmZlcmluZz1GYWxzZSk6CisgICAgICAgIGlmIG5ld2xpbmUgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKG5ld2xpbmUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbGxlZ2FsIG5ld2xpbmUgdHlwZTogJXIiICUgKHR5cGUobmV3bGluZSksKSkKKyAgICAgICAgaWYgbmV3bGluZSBub3QgaW4gKE5vbmUsICIiLCAiXG4iLCAiXHIiLCAiXHJcbiIpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaWxsZWdhbCBuZXdsaW5lIHZhbHVlOiAlciIgJSAobmV3bGluZSwpKQorICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBsb2NhbGUKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAjIEltcG9ydGluZyBsb2NhbGUgbWF5IGZhaWwgaWYgUHl0aG9uIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSAiYXNjaWkiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlbmNvZGluZywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGVuY29kaW5nOiAlciIgJSBlbmNvZGluZykKKworICAgICAgICBpZiBlcnJvcnMgaXMgTm9uZToKKyAgICAgICAgICAgIGVycm9ycyA9ICJzdHJpY3QiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlcnJvcnMsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgZXJyb3JzOiAlciIgJSBlcnJvcnMpCisKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gYnVmZmVyCisgICAgICAgIHNlbGYuX2xpbmVfYnVmZmVyaW5nID0gbGluZV9idWZmZXJpbmcKKyAgICAgICAgc2VsZi5fZW5jb2RpbmcgPSBlbmNvZGluZworICAgICAgICBzZWxmLl9lcnJvcnMgPSBlcnJvcnMKKyAgICAgICAgc2VsZi5fcmVhZHVuaXZlcnNhbCA9IG5vdCBuZXdsaW5lCisgICAgICAgIHNlbGYuX3JlYWR0cmFuc2xhdGUgPSBuZXdsaW5lIGlzIE5vbmUKKyAgICAgICAgc2VsZi5fcmVhZG5sID0gbmV3bGluZQorICAgICAgICBzZWxmLl93cml0ZXRyYW5zbGF0ZSA9IG5ld2xpbmUgIT0gJycKKyAgICAgICAgc2VsZi5fd3JpdGVubCA9IG5ld2xpbmUgb3Igb3MubGluZXNlcAorICAgICAgICBzZWxmLl9lbmNvZGVyID0gTm9uZQorICAgICAgICBzZWxmLl9kZWNvZGVyID0gTm9uZQorICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzID0gJycgICMgYnVmZmVyIGZvciB0ZXh0IHJldHVybmVkIGZyb20gZGVjb2RlcgorICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgPSAwICAjIG9mZnNldCBpbnRvIF9kZWNvZGVkX2NoYXJzIGZvciByZWFkKCkKKyAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lICAjIGluZm8gZm9yIHJlY29uc3RydWN0aW5nIGRlY29kZXIgc3RhdGUKKyAgICAgICAgc2VsZi5fc2Vla2FibGUgPSBzZWxmLl90ZWxsaW5nID0gc2VsZi5idWZmZXIuc2Vla2FibGUoKQorCisgICAgICAgIGlmIHNlbGYuX3NlZWthYmxlIGFuZCBzZWxmLndyaXRhYmxlKCk6CisgICAgICAgICAgICBwb3NpdGlvbiA9IHNlbGYuYnVmZmVyLnRlbGwoKQorICAgICAgICAgICAgaWYgcG9zaXRpb24gIT0gMDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2dldF9lbmNvZGVyKCkuc2V0c3RhdGUoMCkKKyAgICAgICAgICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgU29tZXRpbWVzIHRoZSBlbmNvZGVyIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBzZWxmLl9zbmFwc2hvdCBpcyBlaXRoZXIgTm9uZSwgb3IgYSB0dXBsZSAoZGVjX2ZsYWdzLCBuZXh0X2lucHV0KQorICAgICMgd2hlcmUgZGVjX2ZsYWdzIGlzIHRoZSBzZWNvbmQgKGludGVnZXIpIGl0ZW0gb2YgdGhlIGRlY29kZXIgc3RhdGUKKyAgICAjIGFuZCBuZXh0X2lucHV0IGlzIHRoZSBjaHVuayBvZiBpbnB1dCBieXRlcyB0aGF0IGNvbWVzIG5leHQgYWZ0ZXIgdGhlCisgICAgIyBzbmFwc2hvdCBwb2ludC4gIFdlIHVzZSB0aGlzIHRvIHJlY29uc3RydWN0IGRlY29kZXIgc3RhdGVzIGluIHRlbGwoKS4KKworICAgICMgTmFtaW5nIGNvbnZlbnRpb246CisgICAgIyAgIC0gImJ5dGVzXy4uLiIgZm9yIGludGVnZXIgdmFyaWFibGVzIHRoYXQgY291bnQgaW5wdXQgYnl0ZXMKKyAgICAjICAgLSAiY2hhcnNfLi4uIiBmb3IgaW50ZWdlciB2YXJpYWJsZXMgdGhhdCBjb3VudCBkZWNvZGVkIGNoYXJhY3RlcnMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gIjxfcHlpby5UZXh0SU9XcmFwcGVyIGVuY29kaW5nPSd7MH0nPiIuZm9ybWF0KHNlbGYuZW5jb2RpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIjxfcHlpby5UZXh0SU9XcmFwcGVyIG5hbWU9ezAhcn0gZW5jb2Rpbmc9J3sxfSc+Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgbmFtZSwgc2VsZi5lbmNvZGluZykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBlbmNvZGluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VuY29kaW5nCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZXJyb3JzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXJyb3JzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGluZV9idWZmZXJpbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saW5lX2J1ZmZlcmluZworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGJ1ZmZlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlcgorCisgICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2Vla2FibGUKKworICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLnJlYWRhYmxlKCkKKworICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLndyaXRhYmxlKCkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgc2VsZi5idWZmZXIuZmx1c2goKQorICAgICAgICBzZWxmLl90ZWxsaW5nID0gc2VsZi5fc2Vla2FibGUKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgbm90IE5vbmUgYW5kIG5vdCBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICAgICAgc2VsZi5idWZmZXIuY2xvc2UoKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNsb3NlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLmNsb3NlZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlci5uYW1lCisKKyAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIuZmlsZW5vKCkKKworICAgIGRlZiBpc2F0dHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlci5pc2F0dHkoKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHMpOgorICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlIHRvIGNsb3NlZCBmaWxlIikKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocywgdW5pY29kZSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNhbid0IHdyaXRlICVzIHRvIHRleHQgc3RyZWFtIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIGxlbmd0aCA9IGxlbihzKQorICAgICAgICBoYXNsZiA9IChzZWxmLl93cml0ZXRyYW5zbGF0ZSBvciBzZWxmLl9saW5lX2J1ZmZlcmluZykgYW5kICJcbiIgaW4gcworICAgICAgICBpZiBoYXNsZiBhbmQgc2VsZi5fd3JpdGV0cmFuc2xhdGUgYW5kIHNlbGYuX3dyaXRlbmwgIT0gIlxuIjoKKyAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIlxuIiwgc2VsZi5fd3JpdGVubCkKKyAgICAgICAgZW5jb2RlciA9IHNlbGYuX2VuY29kZXIgb3Igc2VsZi5fZ2V0X2VuY29kZXIoKQorICAgICAgICAjIFhYWCBXaGF0IGlmIHdlIHdlcmUganVzdCByZWFkaW5nPworICAgICAgICBiID0gZW5jb2Rlci5lbmNvZGUocykKKyAgICAgICAgc2VsZi5idWZmZXIud3JpdGUoYikKKyAgICAgICAgaWYgc2VsZi5fbGluZV9idWZmZXJpbmcgYW5kIChoYXNsZiBvciAiXHIiIGluIHMpOgorICAgICAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9kZWNvZGVyOgorICAgICAgICAgICAgc2VsZi5fZGVjb2Rlci5yZXNldCgpCisgICAgICAgIHJldHVybiBsZW5ndGgKKworICAgIGRlZiBfZ2V0X2VuY29kZXIoc2VsZik6CisgICAgICAgIG1ha2VfZW5jb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXIoc2VsZi5fZW5jb2RpbmcpCisgICAgICAgIHNlbGYuX2VuY29kZXIgPSBtYWtlX2VuY29kZXIoc2VsZi5fZXJyb3JzKQorICAgICAgICByZXR1cm4gc2VsZi5fZW5jb2RlcgorCisgICAgZGVmIF9nZXRfZGVjb2RlcihzZWxmKToKKyAgICAgICAgbWFrZV9kZWNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcihzZWxmLl9lbmNvZGluZykKKyAgICAgICAgZGVjb2RlciA9IG1ha2VfZGVjb2RlcihzZWxmLl9lcnJvcnMpCisgICAgICAgIGlmIHNlbGYuX3JlYWR1bml2ZXJzYWw6CisgICAgICAgICAgICBkZWNvZGVyID0gSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihkZWNvZGVyLCBzZWxmLl9yZWFkdHJhbnNsYXRlKQorICAgICAgICBzZWxmLl9kZWNvZGVyID0gZGVjb2RlcgorICAgICAgICByZXR1cm4gZGVjb2RlcgorCisgICAgIyBUaGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMgaW1wbGVtZW50IGFuIEFEVCBmb3IgX2RlY29kZWRfY2hhcnMuCisgICAgIyBUZXh0IHJldHVybmVkIGZyb20gdGhlIGRlY29kZXIgaXMgYnVmZmVyZWQgaGVyZSB1bnRpbCB0aGUgY2xpZW50CisgICAgIyByZXF1ZXN0cyBpdCBieSBjYWxsaW5nIG91ciByZWFkKCkgb3IgcmVhZGxpbmUoKSBtZXRob2QuCisgICAgZGVmIF9zZXRfZGVjb2RlZF9jaGFycyhzZWxmLCBjaGFycyk6CisgICAgICAgICIiIlNldCB0aGUgX2RlY29kZWRfY2hhcnMgYnVmZmVyLiIiIgorICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzID0gY2hhcnMKKyAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkID0gMAorCisgICAgZGVmIF9nZXRfZGVjb2RlZF9jaGFycyhzZWxmLCBuPU5vbmUpOgorICAgICAgICAiIiJBZHZhbmNlIGludG8gdGhlIF9kZWNvZGVkX2NoYXJzIGJ1ZmZlci4iIiIKKyAgICAgICAgb2Zmc2V0ID0gc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkCisgICAgICAgIGlmIG4gaXMgTm9uZToKKyAgICAgICAgICAgIGNoYXJzID0gc2VsZi5fZGVjb2RlZF9jaGFyc1tvZmZzZXQ6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hhcnMgPSBzZWxmLl9kZWNvZGVkX2NoYXJzW29mZnNldDpvZmZzZXQgKyBuXQorICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgKz0gbGVuKGNoYXJzKQorICAgICAgICByZXR1cm4gY2hhcnMKKworICAgIGRlZiBfcmV3aW5kX2RlY29kZWRfY2hhcnMoc2VsZiwgbik6CisgICAgICAgICIiIlJld2luZCB0aGUgX2RlY29kZWRfY2hhcnMgYnVmZmVyLiIiIgorICAgICAgICBpZiBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgPCBuOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInJld2luZCBkZWNvZGVkX2NoYXJzIG91dCBvZiBib3VuZHMiKQorICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgLT0gbgorCisgICAgZGVmIF9yZWFkX2NodW5rKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVhZCBhbmQgZGVjb2RlIHRoZSBuZXh0IGNodW5rIG9mIGRhdGEgZnJvbSB0aGUgQnVmZmVyZWRSZWFkZXIuCisgICAgICAgICIiIgorCisgICAgICAgICMgVGhlIHJldHVybiB2YWx1ZSBpcyBUcnVlIHVubGVzcyBFT0Ygd2FzIHJlYWNoZWQuICBUaGUgZGVjb2RlZAorICAgICAgICAjIHN0cmluZyBpcyBwbGFjZWQgaW4gc2VsZi5fZGVjb2RlZF9jaGFycyAocmVwbGFjaW5nIGl0cyBwcmV2aW91cworICAgICAgICAjIHZhbHVlKS4gIFRoZSBlbnRpcmUgaW5wdXQgY2h1bmsgaXMgc2VudCB0byB0aGUgZGVjb2RlciwgdGhvdWdoCisgICAgICAgICMgc29tZSBvZiBpdCBtYXkgcmVtYWluIGJ1ZmZlcmVkIGluIHRoZSBkZWNvZGVyLCB5ZXQgdG8gYmUKKyAgICAgICAgIyBjb252ZXJ0ZWQuCisKKyAgICAgICAgaWYgc2VsZi5fZGVjb2RlciBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gZGVjb2RlciIpCisKKyAgICAgICAgaWYgc2VsZi5fdGVsbGluZzoKKyAgICAgICAgICAgICMgVG8gcHJlcGFyZSBmb3IgdGVsbCgpLCB3ZSBuZWVkIHRvIHNuYXBzaG90IGEgcG9pbnQgaW4gdGhlCisgICAgICAgICAgICAjIGZpbGUgd2hlcmUgdGhlIGRlY29kZXIncyBpbnB1dCBidWZmZXIgaXMgZW1wdHkuCisKKyAgICAgICAgICAgIGRlY19idWZmZXIsIGRlY19mbGFncyA9IHNlbGYuX2RlY29kZXIuZ2V0c3RhdGUoKQorICAgICAgICAgICAgIyBHaXZlbiB0aGlzLCB3ZSBrbm93IHRoZXJlIHdhcyBhIHZhbGlkIHNuYXBzaG90IHBvaW50CisgICAgICAgICAgICAjIGxlbihkZWNfYnVmZmVyKSBieXRlcyBhZ28gd2l0aCBkZWNvZGVyIHN0YXRlIChiJycsIGRlY19mbGFncykuCisKKyAgICAgICAgIyBSZWFkIGEgY2h1bmssIGRlY29kZSBpdCwgYW5kIHB1dCB0aGUgcmVzdWx0IGluIHNlbGYuX2RlY29kZWRfY2hhcnMuCisgICAgICAgIGlucHV0X2NodW5rID0gc2VsZi5idWZmZXIucmVhZDEoc2VsZi5fQ0hVTktfU0laRSkKKyAgICAgICAgZW9mID0gbm90IGlucHV0X2NodW5rCisgICAgICAgIHNlbGYuX3NldF9kZWNvZGVkX2NoYXJzKHNlbGYuX2RlY29kZXIuZGVjb2RlKGlucHV0X2NodW5rLCBlb2YpKQorCisgICAgICAgIGlmIHNlbGYuX3RlbGxpbmc6CisgICAgICAgICAgICAjIEF0IHRoZSBzbmFwc2hvdCBwb2ludCwgbGVuKGRlY19idWZmZXIpIGJ5dGVzIGJlZm9yZSB0aGUgcmVhZCwKKyAgICAgICAgICAgICMgdGhlIG5leHQgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBkZWNfYnVmZmVyICsgaW5wdXRfY2h1bmsuCisgICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IChkZWNfZmxhZ3MsIGRlY19idWZmZXIgKyBpbnB1dF9jaHVuaykKKworICAgICAgICByZXR1cm4gbm90IGVvZgorCisgICAgZGVmIF9wYWNrX2Nvb2tpZShzZWxmLCBwb3NpdGlvbiwgZGVjX2ZsYWdzPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc190b19mZWVkPTAsIG5lZWRfZW9mPTAsIGNoYXJzX3RvX3NraXA9MCk6CisgICAgICAgICMgVGhlIG1lYW5pbmcgb2YgYSB0ZWxsKCkgY29va2llIGlzOiBzZWVrIHRvIHBvc2l0aW9uLCBzZXQgdGhlCisgICAgICAgICMgZGVjb2RlciBmbGFncyB0byBkZWNfZmxhZ3MsIHJlYWQgYnl0ZXNfdG9fZmVlZCBieXRlcywgZmVlZCB0aGVtCisgICAgICAgICMgaW50byB0aGUgZGVjb2RlciB3aXRoIG5lZWRfZW9mIGFzIHRoZSBFT0YgZmxhZywgdGhlbiBza2lwCisgICAgICAgICMgY2hhcnNfdG9fc2tpcCBjaGFyYWN0ZXJzIG9mIHRoZSBkZWNvZGVkIHJlc3VsdC4gIEZvciBtb3N0IHNpbXBsZQorICAgICAgICAjIGRlY29kZXJzLCB0ZWxsKCkgd2lsbCBvZnRlbiBqdXN0IGdpdmUgYSBieXRlIG9mZnNldCBpbiB0aGUgZmlsZS4KKyAgICAgICAgcmV0dXJuIChwb3NpdGlvbiB8IChkZWNfZmxhZ3M8PDY0KSB8IChieXRlc190b19mZWVkPDwxMjgpIHwKKyAgICAgICAgICAgICAgIChjaGFyc190b19za2lwPDwxOTIpIHwgYm9vbChuZWVkX2VvZik8PDI1NikKKworICAgIGRlZiBfdW5wYWNrX2Nvb2tpZShzZWxmLCBiaWdpbnQpOgorICAgICAgICByZXN0LCBwb3NpdGlvbiA9IGRpdm1vZChiaWdpbnQsIDE8PDY0KQorICAgICAgICByZXN0LCBkZWNfZmxhZ3MgPSBkaXZtb2QocmVzdCwgMTw8NjQpCisgICAgICAgIHJlc3QsIGJ5dGVzX3RvX2ZlZWQgPSBkaXZtb2QocmVzdCwgMTw8NjQpCisgICAgICAgIG5lZWRfZW9mLCBjaGFyc190b19za2lwID0gZGl2bW9kKHJlc3QsIDE8PDY0KQorICAgICAgICByZXR1cm4gcG9zaXRpb24sIGRlY19mbGFncywgYnl0ZXNfdG9fZmVlZCwgbmVlZF9lb2YsIGNoYXJzX3RvX3NraXAKKworICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fc2Vla2FibGU6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKQorICAgICAgICBpZiBub3Qgc2VsZi5fdGVsbGluZzoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQorICAgICAgICBzZWxmLmZsdXNoKCkKKyAgICAgICAgcG9zaXRpb24gPSBzZWxmLmJ1ZmZlci50ZWxsKCkKKyAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIKKyAgICAgICAgaWYgZGVjb2RlciBpcyBOb25lIG9yIHNlbGYuX3NuYXBzaG90IGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9kZWNvZGVkX2NoYXJzOgorICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJwZW5kaW5nIGRlY29kZWQgdGV4dCIpCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24KKworICAgICAgICAjIFNraXAgYmFja3dhcmQgdG8gdGhlIHNuYXBzaG90IHBvaW50IChzZWUgX3JlYWRfY2h1bmspLgorICAgICAgICBkZWNfZmxhZ3MsIG5leHRfaW5wdXQgPSBzZWxmLl9zbmFwc2hvdAorICAgICAgICBwb3NpdGlvbiAtPSBsZW4obmV4dF9pbnB1dCkKKworICAgICAgICAjIEhvdyBtYW55IGRlY29kZWQgY2hhcmFjdGVycyBoYXZlIGJlZW4gdXNlZCB1cCBzaW5jZSB0aGUgc25hcHNob3Q/CisgICAgICAgIGNoYXJzX3RvX3NraXAgPSBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQKKyAgICAgICAgaWYgY2hhcnNfdG9fc2tpcCA9PSAwOgorICAgICAgICAgICAgIyBXZSBoYXZlbid0IG1vdmVkIGZyb20gdGhlIHNuYXBzaG90IHBvaW50LgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BhY2tfY29va2llKHBvc2l0aW9uLCBkZWNfZmxhZ3MpCisKKyAgICAgICAgIyBTdGFydGluZyBmcm9tIHRoZSBzbmFwc2hvdCBwb3NpdGlvbiwgd2Ugd2lsbCB3YWxrIHRoZSBkZWNvZGVyCisgICAgICAgICMgZm9yd2FyZCB1bnRpbCBpdCBnaXZlcyB1cyBlbm91Z2ggZGVjb2RlZCBjaGFyYWN0ZXJzLgorICAgICAgICBzYXZlZF9zdGF0ZSA9IGRlY29kZXIuZ2V0c3RhdGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIE5vdGUgb3VyIGluaXRpYWwgc3RhcnQgcG9pbnQuCisgICAgICAgICAgICBkZWNvZGVyLnNldHN0YXRlKChiJycsIGRlY19mbGFncykpCisgICAgICAgICAgICBzdGFydF9wb3MgPSBwb3NpdGlvbgorICAgICAgICAgICAgc3RhcnRfZmxhZ3MsIGJ5dGVzX2ZlZCwgY2hhcnNfZGVjb2RlZCA9IGRlY19mbGFncywgMCwgMAorICAgICAgICAgICAgbmVlZF9lb2YgPSAwCisKKyAgICAgICAgICAgICMgRmVlZCB0aGUgZGVjb2RlciBvbmUgYnl0ZSBhdCBhIHRpbWUuICBBcyB3ZSBnbywgbm90ZSB0aGUKKyAgICAgICAgICAgICMgbmVhcmVzdCAic2FmZSBzdGFydCBwb2ludCIgYmVmb3JlIHRoZSBjdXJyZW50IGxvY2F0aW9uCisgICAgICAgICAgICAjIChhIHBvaW50IHdoZXJlIHRoZSBkZWNvZGVyIGhhcyBub3RoaW5nIGJ1ZmZlcmVkLCBzbyBzZWVrKCkKKyAgICAgICAgICAgICMgY2FuIHNhZmVseSBzdGFydCBmcm9tIHRoZXJlIGFuZCBhZHZhbmNlIHRvIHRoaXMgbG9jYXRpb24pLgorICAgICAgICAgICAgZm9yIG5leHRfYnl0ZSBpbiBuZXh0X2lucHV0OgorICAgICAgICAgICAgICAgIGJ5dGVzX2ZlZCArPSAxCisgICAgICAgICAgICAgICAgY2hhcnNfZGVjb2RlZCArPSBsZW4oZGVjb2Rlci5kZWNvZGUobmV4dF9ieXRlKSkKKyAgICAgICAgICAgICAgICBkZWNfYnVmZmVyLCBkZWNfZmxhZ3MgPSBkZWNvZGVyLmdldHN0YXRlKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGVjX2J1ZmZlciBhbmQgY2hhcnNfZGVjb2RlZCA8PSBjaGFyc190b19za2lwOgorICAgICAgICAgICAgICAgICAgICAjIERlY29kZXIgYnVmZmVyIGlzIGVtcHR5LCBzbyB0aGlzIGlzIGEgc2FmZSBzdGFydCBwb2ludC4KKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfcG9zICs9IGJ5dGVzX2ZlZAorICAgICAgICAgICAgICAgICAgICBjaGFyc190b19za2lwIC09IGNoYXJzX2RlY29kZWQKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZmxhZ3MsIGJ5dGVzX2ZlZCwgY2hhcnNfZGVjb2RlZCA9IGRlY19mbGFncywgMCwgMAorICAgICAgICAgICAgICAgIGlmIGNoYXJzX2RlY29kZWQgPj0gY2hhcnNfdG9fc2tpcDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBXZSBkaWRuJ3QgZ2V0IGVub3VnaCBkZWNvZGVkIGRhdGE7IHNpZ25hbCBFT0YgdG8gZ2V0IG1vcmUuCisgICAgICAgICAgICAgICAgY2hhcnNfZGVjb2RlZCArPSBsZW4oZGVjb2Rlci5kZWNvZGUoYicnLCBmaW5hbD1UcnVlKSkKKyAgICAgICAgICAgICAgICBuZWVkX2VvZiA9IDEKKyAgICAgICAgICAgICAgICBpZiBjaGFyc19kZWNvZGVkIDwgY2hhcnNfdG9fc2tpcDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgcmVjb25zdHJ1Y3QgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKKworICAgICAgICAgICAgIyBUaGUgcmV0dXJuZWQgY29va2llIGNvcnJlc3BvbmRzIHRvIHRoZSBsYXN0IHNhZmUgc3RhcnQgcG9pbnQuCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFja19jb29raWUoCisgICAgICAgICAgICAgICAgc3RhcnRfcG9zLCBzdGFydF9mbGFncywgYnl0ZXNfZmVkLCBuZWVkX2VvZiwgY2hhcnNfdG9fc2tpcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlY29kZXIuc2V0c3RhdGUoc2F2ZWRfc3RhdGUpCisKKyAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zPU5vbmUpOgorICAgICAgICBzZWxmLmZsdXNoKCkKKyAgICAgICAgaWYgcG9zIGlzIE5vbmU6CisgICAgICAgICAgICBwb3MgPSBzZWxmLnRlbGwoKQorICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIudHJ1bmNhdGUocG9zKQorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJ1ZmZlciBpcyBhbHJlYWR5IGRldGFjaGVkIikKKyAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgIGJ1ZmZlciA9IHNlbGYuX2J1ZmZlcgorICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgIHJldHVybiBidWZmZXIKKworICAgIGRlZiBzZWVrKHNlbGYsIGNvb2tpZSwgd2hlbmNlPTApOgorICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRlbGwgb24gY2xvc2VkIGZpbGUiKQorICAgICAgICBpZiBub3Qgc2VsZi5fc2Vla2FibGU6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKQorICAgICAgICBpZiB3aGVuY2UgPT0gMTogIyBzZWVrIHJlbGF0aXZlIHRvIGN1cnJlbnQgcG9zaXRpb24KKyAgICAgICAgICAgIGlmIGNvb2tpZSAhPSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbid0IGRvIG5vbnplcm8gY3VyLXJlbGF0aXZlIHNlZWtzIikKKyAgICAgICAgICAgICMgU2Vla2luZyB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBzaG91bGQgYXR0ZW1wdCB0bworICAgICAgICAgICAgIyBzeW5jIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciB3aXRoIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICAgICAgd2hlbmNlID0gMAorICAgICAgICAgICAgY29va2llID0gc2VsZi50ZWxsKCkKKyAgICAgICAgaWYgd2hlbmNlID09IDI6ICMgc2VlayByZWxhdGl2ZSB0byBlbmQgb2YgZmlsZQorICAgICAgICAgICAgaWYgY29va2llICE9IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgZG8gbm9uemVybyBlbmQtcmVsYXRpdmUgc2Vla3MiKQorICAgICAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgICAgICBwb3NpdGlvbiA9IHNlbGYuYnVmZmVyLnNlZWsoMCwgMikKKyAgICAgICAgICAgIHNlbGYuX3NldF9kZWNvZGVkX2NoYXJzKCcnKQorICAgICAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lCisgICAgICAgICAgICBpZiBzZWxmLl9kZWNvZGVyOgorICAgICAgICAgICAgICAgIHNlbGYuX2RlY29kZXIucmVzZXQoKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uCisgICAgICAgIGlmIHdoZW5jZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB3aGVuY2UgKCVyLCBzaG91bGQgYmUgMCwgMSBvciAyKSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2hlbmNlLCkpCisgICAgICAgIGlmIGNvb2tpZSA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuZWdhdGl2ZSBzZWVrIHBvc2l0aW9uICVyIiAlIChjb29raWUsKSkKKyAgICAgICAgc2VsZi5mbHVzaCgpCisKKyAgICAgICAgIyBUaGUgc3RyYXRlZ3kgb2Ygc2VlaygpIGlzIHRvIGdvIGJhY2sgdG8gdGhlIHNhZmUgc3RhcnQgcG9pbnQKKyAgICAgICAgIyBhbmQgcmVwbGF5IHRoZSBlZmZlY3Qgb2YgcmVhZChjaGFyc190b19za2lwKSBmcm9tIHRoZXJlLgorICAgICAgICBzdGFydF9wb3MsIGRlY19mbGFncywgYnl0ZXNfdG9fZmVlZCwgbmVlZF9lb2YsIGNoYXJzX3RvX3NraXAgPSBcCisgICAgICAgICAgICBzZWxmLl91bnBhY2tfY29va2llKGNvb2tpZSkKKworICAgICAgICAjIFNlZWsgYmFjayB0byB0aGUgc2FmZSBzdGFydCBwb2ludC4KKyAgICAgICAgc2VsZi5idWZmZXIuc2VlayhzdGFydF9wb3MpCisgICAgICAgIHNlbGYuX3NldF9kZWNvZGVkX2NoYXJzKCcnKQorICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKKworICAgICAgICAjIFJlc3RvcmUgdGhlIGRlY29kZXIgdG8gaXRzIHN0YXRlIGZyb20gdGhlIHNhZmUgc3RhcnQgcG9pbnQuCisgICAgICAgIGlmIGNvb2tpZSA9PSAwIGFuZCBzZWxmLl9kZWNvZGVyOgorICAgICAgICAgICAgc2VsZi5fZGVjb2Rlci5yZXNldCgpCisgICAgICAgIGVsaWYgc2VsZi5fZGVjb2RlciBvciBkZWNfZmxhZ3Mgb3IgY2hhcnNfdG9fc2tpcDoKKyAgICAgICAgICAgIHNlbGYuX2RlY29kZXIgPSBzZWxmLl9kZWNvZGVyIG9yIHNlbGYuX2dldF9kZWNvZGVyKCkKKyAgICAgICAgICAgIHNlbGYuX2RlY29kZXIuc2V0c3RhdGUoKGInJywgZGVjX2ZsYWdzKSkKKyAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gKGRlY19mbGFncywgYicnKQorCisgICAgICAgIGlmIGNoYXJzX3RvX3NraXA6CisgICAgICAgICAgICAjIEp1c3QgbGlrZSBfcmVhZF9jaHVuaywgZmVlZCB0aGUgZGVjb2RlciBhbmQgc2F2ZSBhIHNuYXBzaG90LgorICAgICAgICAgICAgaW5wdXRfY2h1bmsgPSBzZWxmLmJ1ZmZlci5yZWFkKGJ5dGVzX3RvX2ZlZWQpCisgICAgICAgICAgICBzZWxmLl9zZXRfZGVjb2RlZF9jaGFycygKKyAgICAgICAgICAgICAgICBzZWxmLl9kZWNvZGVyLmRlY29kZShpbnB1dF9jaHVuaywgbmVlZF9lb2YpKQorICAgICAgICAgICAgc2VsZi5fc25hcHNob3QgPSAoZGVjX2ZsYWdzLCBpbnB1dF9jaHVuaykKKworICAgICAgICAgICAgIyBTa2lwIGNoYXJzX3RvX3NraXAgb2YgdGhlIGRlY29kZWQgY2hhcmFjdGVycy4KKyAgICAgICAgICAgIGlmIGxlbihzZWxmLl9kZWNvZGVkX2NoYXJzKSA8IGNoYXJzX3RvX3NraXA6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgcmVzdG9yZSBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQorICAgICAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkID0gY2hhcnNfdG9fc2tpcAorCisgICAgICAgICMgRmluYWxseSwgcmVzZXQgdGhlIGVuY29kZXIgKG1lcmVseSB1c2VmdWwgZm9yIHByb3BlciBCT00gaGFuZGxpbmcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVuY29kZXIgPSBzZWxmLl9lbmNvZGVyIG9yIHNlbGYuX2dldF9lbmNvZGVyKCkKKyAgICAgICAgZXhjZXB0IExvb2t1cEVycm9yOgorICAgICAgICAgICAgIyBTb21ldGltZXMgdGhlIGVuY29kZXIgZG9lc24ndCBleGlzdAorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgY29va2llICE9IDA6CisgICAgICAgICAgICAgICAgZW5jb2Rlci5zZXRzdGF0ZSgwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbmNvZGVyLnJlc2V0KCkKKyAgICAgICAgcmV0dXJuIGNvb2tpZQorCisgICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICAgICAgc2VsZi5fY2hlY2tSZWFkYWJsZSgpCisgICAgICAgIGlmIG4gaXMgTm9uZToKKyAgICAgICAgICAgIG4gPSAtMQorICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlciBvciBzZWxmLl9nZXRfZGVjb2RlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG4uX19pbmRleF9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpCisgICAgICAgIGlmIG4gPCAwOgorICAgICAgICAgICAgIyBSZWFkIGV2ZXJ5dGhpbmcuCisgICAgICAgICAgICByZXN1bHQgPSAoc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKSArCisgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5kZWNvZGUoc2VsZi5idWZmZXIucmVhZCgpLCBmaW5hbD1UcnVlKSkKKyAgICAgICAgICAgIHNlbGYuX3NldF9kZWNvZGVkX2NoYXJzKCcnKQorICAgICAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEtlZXAgcmVhZGluZyBjaHVua3MgdW50aWwgd2UgaGF2ZSBuIGNoYXJhY3RlcnMgdG8gcmV0dXJuLgorICAgICAgICAgICAgZW9mID0gRmFsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKG4pCisgICAgICAgICAgICB3aGlsZSBsZW4ocmVzdWx0KSA8IG4gYW5kIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgZW9mID0gbm90IHNlbGYuX3JlYWRfY2h1bmsoKQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhuIC0gbGVuKHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVsbGluZyA9IEZhbHNlCisgICAgICAgIGxpbmUgPSBzZWxmLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3RlbGxpbmcgPSBzZWxmLl9zZWVrYWJsZQorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICByZXR1cm4gbGluZQorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxpbWl0PU5vbmUpOgorICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJlYWQgZnJvbSBjbG9zZWQgZmlsZSIpCisgICAgICAgIGlmIGxpbWl0IGlzIE5vbmU6CisgICAgICAgICAgICBsaW1pdCA9IC0xCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UobGltaXQsIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIikKKworICAgICAgICAjIEdyYWIgYWxsIHRoZSBkZWNvZGVkIHRleHQgKHdlIHdpbGwgcmV3aW5kIGFueSBleHRyYSBiaXRzIGxhdGVyKS4KKyAgICAgICAgbGluZSA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKCkKKworICAgICAgICBzdGFydCA9IDAKKyAgICAgICAgIyBNYWtlIHRoZSBkZWNvZGVyIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KKyAgICAgICAgaWYgbm90IHNlbGYuX2RlY29kZXI6CisgICAgICAgICAgICBzZWxmLl9nZXRfZGVjb2RlcigpCisKKyAgICAgICAgcG9zID0gZW5kcG9zID0gTm9uZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgc2VsZi5fcmVhZHRyYW5zbGF0ZToKKyAgICAgICAgICAgICAgICAjIE5ld2xpbmVzIGFyZSBhbHJlYWR5IHRyYW5zbGF0ZWQsIG9ubHkgc2VhcmNoIGZvciBcbgorICAgICAgICAgICAgICAgIHBvcyA9IGxpbmUuZmluZCgnXG4nLCBzdGFydCkKKyAgICAgICAgICAgICAgICBpZiBwb3MgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgZW5kcG9zID0gcG9zICsgMQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGVuKGxpbmUpCisKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fcmVhZHVuaXZlcnNhbDoKKyAgICAgICAgICAgICAgICAjIFVuaXZlcnNhbCBuZXdsaW5lIHNlYXJjaC4gRmluZCBhbnkgb2YgXHIsIFxyXG4sIFxuCisgICAgICAgICAgICAgICAgIyBUaGUgZGVjb2RlciBlbnN1cmVzIHRoYXQgXHJcbiBhcmUgbm90IHNwbGl0IGluIHR3byBwaWVjZXMKKworICAgICAgICAgICAgICAgICMgSW4gQyB3ZSdkIGxvb2sgZm9yIHRoZXNlIGluIHBhcmFsbGVsIG9mIGNvdXJzZS4KKyAgICAgICAgICAgICAgICBubHBvcyA9IGxpbmUuZmluZCgiXG4iLCBzdGFydCkKKyAgICAgICAgICAgICAgICBjcnBvcyA9IGxpbmUuZmluZCgiXHIiLCBzdGFydCkKKyAgICAgICAgICAgICAgICBpZiBjcnBvcyA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgaWYgbmxwb3MgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE5vdGhpbmcgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGVuKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEZvdW5kIFxuCisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBubHBvcyArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBubHBvcyA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCBsb25lIFxyCisgICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IGNycG9zICsgMQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsaWYgbmxwb3MgPCBjcnBvczoKKyAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCBcbgorICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBubHBvcyArIDEKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIG5scG9zID09IGNycG9zICsgMToKKyAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCBcclxuCisgICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IGNycG9zICsgMgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgRm91bmQgXHIKKyAgICAgICAgICAgICAgICAgICAgZW5kcG9zID0gY3Jwb3MgKyAxCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgbm9uLXVuaXZlcnNhbAorICAgICAgICAgICAgICAgIHBvcyA9IGxpbmUuZmluZChzZWxmLl9yZWFkbmwpCisgICAgICAgICAgICAgICAgaWYgcG9zID49IDA6CisgICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IHBvcyArIGxlbihzZWxmLl9yZWFkbmwpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIGxpbWl0ID49IDAgYW5kIGxlbihsaW5lKSA+PSBsaW1pdDoKKyAgICAgICAgICAgICAgICBlbmRwb3MgPSBsaW1pdCAgIyByZWFjaGVkIGxlbmd0aCBsaW1pdAorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgTm8gbGluZSBlbmRpbmcgc2VlbiB5ZXQgLSBnZXQgbW9yZSBkYXRhJworICAgICAgICAgICAgd2hpbGUgc2VsZi5fcmVhZF9jaHVuaygpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2RlY29kZWRfY2hhcnM6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBzZWxmLl9kZWNvZGVkX2NoYXJzOgorICAgICAgICAgICAgICAgIGxpbmUgKz0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGVuZCBvZiBmaWxlCisgICAgICAgICAgICAgICAgc2VsZi5fc2V0X2RlY29kZWRfY2hhcnMoJycpCisgICAgICAgICAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKworICAgICAgICBpZiBsaW1pdCA+PSAwIGFuZCBlbmRwb3MgPiBsaW1pdDoKKyAgICAgICAgICAgIGVuZHBvcyA9IGxpbWl0ICAjIGRvbid0IGV4Y2VlZCBsaW1pdAorCisgICAgICAgICMgUmV3aW5kIF9kZWNvZGVkX2NoYXJzIHRvIGp1c3QgYWZ0ZXIgdGhlIGxpbmUgZW5kaW5nIHdlIGZvdW5kLgorICAgICAgICBzZWxmLl9yZXdpbmRfZGVjb2RlZF9jaGFycyhsZW4obGluZSkgLSBlbmRwb3MpCisgICAgICAgIHJldHVybiBsaW5lWzplbmRwb3NdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmV3bGluZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZWNvZGVyLm5ld2xpbmVzIGlmIHNlbGYuX2RlY29kZXIgZWxzZSBOb25lCisKKworY2xhc3MgU3RyaW5nSU8oVGV4dElPV3JhcHBlcik6CisgICAgIiIiVGV4dCBJL08gaW1wbGVtZW50YXRpb24gdXNpbmcgYW4gaW4tbWVtb3J5IGJ1ZmZlci4KKworICAgIFRoZSBpbml0aWFsX3ZhbHVlIGFyZ3VtZW50IHNldHMgdGhlIHZhbHVlIG9mIG9iamVjdC4gIFRoZSBuZXdsaW5lCisgICAgYXJndW1lbnQgaXMgbGlrZSB0aGUgb25lIG9mIFRleHRJT1dyYXBwZXIncyBjb25zdHJ1Y3Rvci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbml0aWFsX3ZhbHVlPSIiLCBuZXdsaW5lPSJcbiIpOgorICAgICAgICBzdXBlcihTdHJpbmdJTywgc2VsZikuX19pbml0X18oQnl0ZXNJTygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9InV0Zi04IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycz0ic3RyaWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9bmV3bGluZSkKKyAgICAgICAgIyBJc3N1ZSAjNTY0NTogbWFrZSB1bml2ZXJzYWwgbmV3bGluZXMgc2VtYW50aWNzIHRoZSBzYW1lIGFzIGluIHRoZQorICAgICAgICAjIEMgdmVyc2lvbiwgZXZlbiB1bmRlciBXaW5kb3dzLgorICAgICAgICBpZiBuZXdsaW5lIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl93cml0ZXRyYW5zbGF0ZSA9IEZhbHNlCisgICAgICAgIGlmIGluaXRpYWxfdmFsdWU6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpbml0aWFsX3ZhbHVlLCB1bmljb2RlKToKKyAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlID0gdW5pY29kZShpbml0aWFsX3ZhbHVlKQorICAgICAgICAgICAgc2VsZi53cml0ZShpbml0aWFsX3ZhbHVlKQorICAgICAgICAgICAgc2VsZi5zZWVrKDApCisKKyAgICBkZWYgZ2V0dmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIuZ2V0dmFsdWUoKS5kZWNvZGUoc2VsZi5fZW5jb2RpbmcsIHNlbGYuX2Vycm9ycykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgIyBUZXh0SU9XcmFwcGVyIHRlbGxzIHRoZSBlbmNvZGluZyBpbiBpdHMgcmVwci4gSW4gU3RyaW5nSU8sCisgICAgICAgICMgdGhhdCdzIGEgaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcmVwcl9fKHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZXJyb3JzKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVuY29kaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgIyBUaGlzIGRvZXNuJ3QgbWFrZSBzZW5zZSBvbiBTdHJpbmdJTy4KKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoImRldGFjaCIpCmRpZmYgLS1naXQgYS9MaWIvX3RocmVhZGluZ19sb2NhbC5weSBiL0xpYi9fdGhyZWFkaW5nX2xvY2FsLnB5CmluZGV4IDI0M2Q4NGUuLjA5YTM1MTUgMTAwNjQ0Ci0tLSBhL0xpYi9fdGhyZWFkaW5nX2xvY2FsLnB5CisrKyBiL0xpYi9fdGhyZWFkaW5nX2xvY2FsLnB5CkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICAgICAgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsICdfbG9jYWxfX2FyZ3MnLCAoYXJncywga3cpKQogICAgICAgICBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgJ19sb2NhbF9fbG9jaycsIFJMb2NrKCkpCiAKLSAgICAgICAgaWYgYXJncyBvciBrdyBhbmQgKGNscy5fX2luaXRfXyBpcyBvYmplY3QuX19pbml0X18pOgorICAgICAgICBpZiAoYXJncyBvciBrdykgYW5kIChjbHMuX19pbml0X18gaXMgb2JqZWN0Ll9faW5pdF9fKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiSW5pdGlhbGl6YXRpb24gYXJndW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIikKIAogICAgICAgICAjIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSB0aHJlYWQgZGljdCBpbiBhbnRpY2lwYXRpb24gb2YKQEAgLTE5NSw2ICsxOTUsMTAgQEAKICAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCiAKICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBpZiBuYW1lID09ICdfX2RpY3RfXyc6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICAgICAiJXIgb2JqZWN0IGF0dHJpYnV0ZSAnX19kaWN0X18nIGlzIHJlYWQtb25seSIKKyAgICAgICAgICAgICAgICAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQogICAgICAgICBsb2NrID0gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgJ19sb2NhbF9fbG9jaycpCiAgICAgICAgIGxvY2suYWNxdWlyZSgpCiAgICAgICAgIHRyeToKQEAgLTIwNCw2ICsyMDgsMTAgQEAKICAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCiAKICAgICBkZWYgX19kZWxhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUgPT0gJ19fZGljdF9fJzoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAorICAgICAgICAgICAgICAgICIlciBvYmplY3QgYXR0cmlidXRlICdfX2RpY3RfXycgaXMgcmVhZC1vbmx5IgorICAgICAgICAgICAgICAgICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgICAgIGxvY2sgPSBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCAnX2xvY2FsX19sb2NrJykKICAgICAgICAgbG9jay5hY3F1aXJlKCkKICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL193ZWFrcmVmc2V0LnB5IGIvTGliL193ZWFrcmVmc2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTVlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX3dlYWtyZWZzZXQucHkKQEAgLTAsMCArMSwyMTYgQEAKKyMgQWNjZXNzIFdlYWtTZXQgdGhyb3VnaCB0aGUgd2Vha3JlZiBtb2R1bGUuCisjIFRoaXMgY29kZSBpcyBzZXBhcmF0ZWQtb3V0IGJlY2F1c2UgaXQgaXMgbmVlZGVkCisjIGJ5IGFiYy5weSB0byBsb2FkIGV2ZXJ5dGhpbmcgZWxzZSBhdCBzdGFydHVwLgorCitmcm9tIF93ZWFrcmVmIGltcG9ydCByZWYKKworX19hbGxfXyA9IFsnV2Vha1NldCddCisKKworY2xhc3MgX0l0ZXJhdGlvbkd1YXJkKG9iamVjdCk6CisgICAgIyBUaGlzIGNvbnRleHQgbWFuYWdlciByZWdpc3RlcnMgaXRzZWxmIGluIHRoZSBjdXJyZW50IGl0ZXJhdG9ycyBvZiB0aGUKKyAgICAjIHdlYWsgY29udGFpbmVyLCBzdWNoIGFzIHRvIGRlbGF5IGFsbCByZW1vdmFscyB1bnRpbCB0aGUgY29udGV4dCBtYW5hZ2VyCisgICAgIyBleGl0cy4KKyAgICAjIFRoaXMgdGVjaG5pcXVlIHNob3VsZCBiZSByZWxhdGl2ZWx5IHRocmVhZC1zYWZlIChzaW5jZSBzZXRzIGFyZSkuCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2Vha2NvbnRhaW5lcik6CisgICAgICAgICMgRG9uJ3QgY3JlYXRlIGN5Y2xlcworICAgICAgICBzZWxmLndlYWtjb250YWluZXIgPSByZWYod2Vha2NvbnRhaW5lcikKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHcgPSBzZWxmLndlYWtjb250YWluZXIoKQorICAgICAgICBpZiB3IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdy5faXRlcmF0aW5nLmFkZChzZWxmKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGUsIHQsIGIpOgorICAgICAgICB3ID0gc2VsZi53ZWFrY29udGFpbmVyKCkKKyAgICAgICAgaWYgdyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHMgPSB3Ll9pdGVyYXRpbmcKKyAgICAgICAgICAgIHMucmVtb3ZlKHNlbGYpCisgICAgICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgICAgICB3Ll9jb21taXRfcmVtb3ZhbHMoKQorCisKK2NsYXNzIFdlYWtTZXQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YT1Ob25lKToKKyAgICAgICAgc2VsZi5kYXRhID0gc2V0KCkKKyAgICAgICAgZGVmIF9yZW1vdmUoaXRlbSwgc2VsZnJlZj1yZWYoc2VsZikpOgorICAgICAgICAgICAgc2VsZiA9IHNlbGZyZWYoKQorICAgICAgICAgICAgaWYgc2VsZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9pdGVyYXRpbmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHMuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhLmRpc2NhcmQoaXRlbSkKKyAgICAgICAgc2VsZi5fcmVtb3ZlID0gX3JlbW92ZQorICAgICAgICAjIEEgbGlzdCBvZiBrZXlzIHRvIGJlIHJlbW92ZWQKKyAgICAgICAgc2VsZi5fcGVuZGluZ19yZW1vdmFscyA9IFtdCisgICAgICAgIHNlbGYuX2l0ZXJhdGluZyA9IHNldCgpCisgICAgICAgIGlmIGRhdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZShkYXRhKQorCisgICAgZGVmIF9jb21taXRfcmVtb3ZhbHMoc2VsZik6CisgICAgICAgIGwgPSBzZWxmLl9wZW5kaW5nX3JlbW92YWxzCisgICAgICAgIGRpc2NhcmQgPSBzZWxmLmRhdGEuZGlzY2FyZAorICAgICAgICB3aGlsZSBsOgorICAgICAgICAgICAgZGlzY2FyZChsLnBvcCgpKQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICB3aXRoIF9JdGVyYXRpb25HdWFyZChzZWxmKToKKyAgICAgICAgICAgIGZvciBpdGVtcmVmIGluIHNlbGYuZGF0YToKKyAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXJlZigpCisgICAgICAgICAgICAgICAgaWYgaXRlbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgaXRlbQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdW0oeCgpIGlzIG5vdCBOb25lIGZvciB4IGluIHNlbGYuZGF0YSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyID0gcmVmKGl0ZW0pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHdyIGluIHNlbGYuZGF0YQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIChsaXN0KHNlbGYpLCksCisgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKSkKKworICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgZGVmIGFkZChzZWxmLCBpdGVtKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19yZW1vdmFsczoKKyAgICAgICAgICAgIHNlbGYuX2NvbW1pdF9yZW1vdmFscygpCisgICAgICAgIHNlbGYuZGF0YS5hZGQocmVmKGl0ZW0sIHNlbGYuX3JlbW92ZSkpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICBzZWxmLl9jb21taXRfcmVtb3ZhbHMoKQorICAgICAgICBzZWxmLmRhdGEuY2xlYXIoKQorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzZWxmKQorCisgICAgZGVmIHBvcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19yZW1vdmFsczoKKyAgICAgICAgICAgIHNlbGYuX2NvbW1pdF9yZW1vdmFscygpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXRlbXJlZiA9IHNlbGYuZGF0YS5wb3AoKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdwb3AgZnJvbSBlbXB0eSBXZWFrU2V0JykKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtcmVmKCkKKyAgICAgICAgICAgIGlmIGl0ZW0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0KKworICAgIGRlZiByZW1vdmUoc2VsZiwgaXRlbSk6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICBzZWxmLl9jb21taXRfcmVtb3ZhbHMoKQorICAgICAgICBzZWxmLmRhdGEucmVtb3ZlKHJlZihpdGVtKSkKKworICAgIGRlZiBkaXNjYXJkKHNlbGYsIGl0ZW0pOgorICAgICAgICBpZiBzZWxmLl9wZW5kaW5nX3JlbW92YWxzOgorICAgICAgICAgICAgc2VsZi5fY29tbWl0X3JlbW92YWxzKCkKKyAgICAgICAgc2VsZi5kYXRhLmRpc2NhcmQocmVmKGl0ZW0pKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICBzZWxmLl9jb21taXRfcmVtb3ZhbHMoKQorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICBzZWxmLmRhdGEudXBkYXRlKG90aGVyLmRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBvdGhlcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFkZChlbGVtZW50KQorCisgICAgZGVmIF9faW9yX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzZWxmLnVwZGF0ZShvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igc2ltcGxlIGRlbGVnYXRpbmcgbWV0aG9kcy4KKyAgICBkZWYgX2FwcGx5KHNlbGYsIG90aGVyLCBtZXRob2QpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgorICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9fY2xhc3NfXyhvdGhlcikKKyAgICAgICAgbmV3ZGF0YSA9IG1ldGhvZChvdGhlci5kYXRhKQorICAgICAgICBuZXdzZXQgPSBzZWxmLl9fY2xhc3NfXygpCisgICAgICAgIG5ld3NldC5kYXRhID0gbmV3ZGF0YQorICAgICAgICByZXR1cm4gbmV3c2V0CisKKyAgICBkZWYgZGlmZmVyZW5jZShzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9hcHBseShvdGhlciwgc2VsZi5kYXRhLmRpZmZlcmVuY2UpCisgICAgX19zdWJfXyA9IGRpZmZlcmVuY2UKKworICAgIGRlZiBkaWZmZXJlbmNlX3VwZGF0ZShzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICBzZWxmLl9jb21taXRfcmVtb3ZhbHMoKQorICAgICAgICBpZiBzZWxmIGlzIG90aGVyOgorICAgICAgICAgICAgc2VsZi5kYXRhLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5kaWZmZXJlbmNlX3VwZGF0ZShyZWYoaXRlbSkgZm9yIGl0ZW0gaW4gb3RoZXIpCisgICAgZGVmIF9faXN1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19yZW1vdmFsczoKKyAgICAgICAgICAgIHNlbGYuX2NvbW1pdF9yZW1vdmFscygpCisgICAgICAgIGlmIHNlbGYgaXMgb3RoZXI6CisgICAgICAgICAgICBzZWxmLmRhdGEuY2xlYXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kYXRhLmRpZmZlcmVuY2VfdXBkYXRlKHJlZihpdGVtKSBmb3IgaXRlbSBpbiBvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBpbnRlcnNlY3Rpb24oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fYXBwbHkob3RoZXIsIHNlbGYuZGF0YS5pbnRlcnNlY3Rpb24pCisgICAgX19hbmRfXyA9IGludGVyc2VjdGlvbgorCisgICAgZGVmIGludGVyc2VjdGlvbl91cGRhdGUoc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLl9wZW5kaW5nX3JlbW92YWxzOgorICAgICAgICAgICAgc2VsZi5fY29tbWl0X3JlbW92YWxzKCkKKyAgICAgICAgc2VsZi5kYXRhLmludGVyc2VjdGlvbl91cGRhdGUocmVmKGl0ZW0pIGZvciBpdGVtIGluIG90aGVyKQorICAgIGRlZiBfX2lhbmRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICBzZWxmLl9jb21taXRfcmVtb3ZhbHMoKQorICAgICAgICBzZWxmLmRhdGEuaW50ZXJzZWN0aW9uX3VwZGF0ZShyZWYoaXRlbSkgZm9yIGl0ZW0gaW4gb3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgaXNzdWJzZXQoc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhLmlzc3Vic2V0KHJlZihpdGVtKSBmb3IgaXRlbSBpbiBvdGhlcikKKyAgICBfX2x0X18gPSBpc3N1YnNldAorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmRhdGEgPD0gc2V0KHJlZihpdGVtKSBmb3IgaXRlbSBpbiBvdGhlcikKKworICAgIGRlZiBpc3N1cGVyc2V0KHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YS5pc3N1cGVyc2V0KHJlZihpdGVtKSBmb3IgaXRlbSBpbiBvdGhlcikKKyAgICBfX2d0X18gPSBpc3N1cGVyc2V0CisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YSA+PSBzZXQocmVmKGl0ZW0pIGZvciBpdGVtIGluIG90aGVyKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YSA9PSBzZXQocmVmKGl0ZW0pIGZvciBpdGVtIGluIG90aGVyKQorCisgICAgZGVmIHN5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FwcGx5KG90aGVyLCBzZWxmLmRhdGEuc3ltbWV0cmljX2RpZmZlcmVuY2UpCisgICAgX194b3JfXyA9IHN5bW1ldHJpY19kaWZmZXJlbmNlCisKKyAgICBkZWYgc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19yZW1vdmFsczoKKyAgICAgICAgICAgIHNlbGYuX2NvbW1pdF9yZW1vdmFscygpCisgICAgICAgIGlmIHNlbGYgaXMgb3RoZXI6CisgICAgICAgICAgICBzZWxmLmRhdGEuY2xlYXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kYXRhLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShyZWYoaXRlbSkgZm9yIGl0ZW0gaW4gb3RoZXIpCisgICAgZGVmIF9faXhvcl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19yZW1vdmFsczoKKyAgICAgICAgICAgIHNlbGYuX2NvbW1pdF9yZW1vdmFscygpCisgICAgICAgIGlmIHNlbGYgaXMgb3RoZXI6CisgICAgICAgICAgICBzZWxmLmRhdGEuY2xlYXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kYXRhLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShyZWYoaXRlbSkgZm9yIGl0ZW0gaW4gb3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgdW5pb24oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fYXBwbHkob3RoZXIsIHNlbGYuZGF0YS51bmlvbikKKyAgICBfX29yX18gPSB1bmlvbgorCisgICAgZGVmIGlzZGlzam9pbnQoc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuaW50ZXJzZWN0aW9uKG90aGVyKSkgPT0gMApkaWZmIC0tZ2l0IGEvTGliL2FiYy5weSBiL0xpYi9hYmMucHkKaW5kZXggNjgxYzc1My4uMDJlNDhhMSAxMDA2NDQKLS0tIGEvTGliL2FiYy5weQorKysgYi9MaWIvYWJjLnB5CkBAIC0zLDYgKzMsOSBAQAogCiAiIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGFjY29yZGluZyB0byBQRVAgMzExOS4iIiIKIAoraW1wb3J0IHR5cGVzCisKK2Zyb20gX3dlYWtyZWZzZXQgaW1wb3J0IFdlYWtTZXQKIAogIyBJbnN0YW5jZSBvZiBvbGQtc3R5bGUgY2xhc3MKIGNsYXNzIF9DOiBwYXNzCkBAIC05MywxNSArOTYsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RzLmFkZChuYW1lKQogICAgICAgICBjbHMuX19hYnN0cmFjdG1ldGhvZHNfXyA9IGZyb3plbnNldChhYnN0cmFjdHMpCiAgICAgICAgICMgU2V0IHVwIGluaGVyaXRhbmNlIHJlZ2lzdHJ5Ci0gICAgICAgIGNscy5fYWJjX3JlZ2lzdHJ5ID0gc2V0KCkKLSAgICAgICAgY2xzLl9hYmNfY2FjaGUgPSBzZXQoKQotICAgICAgICBjbHMuX2FiY19uZWdhdGl2ZV9jYWNoZSA9IHNldCgpCisgICAgICAgIGNscy5fYWJjX3JlZ2lzdHJ5ID0gV2Vha1NldCgpCisgICAgICAgIGNscy5fYWJjX2NhY2hlID0gV2Vha1NldCgpCisgICAgICAgIGNscy5fYWJjX25lZ2F0aXZlX2NhY2hlID0gV2Vha1NldCgpCiAgICAgICAgIGNscy5fYWJjX25lZ2F0aXZlX2NhY2hlX3ZlcnNpb24gPSBBQkNNZXRhLl9hYmNfaW52YWxpZGF0aW9uX2NvdW50ZXIKICAgICAgICAgcmV0dXJuIGNscwogCiAgICAgZGVmIHJlZ2lzdGVyKGNscywgc3ViY2xhc3MpOgogICAgICAgICAiIiJSZWdpc3RlciBhIHZpcnR1YWwgc3ViY2xhc3Mgb2YgYW4gQUJDLiIiIgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjbHMsIHR5cGUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzdWJjbGFzcywgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW4gb25seSByZWdpc3RlciBjbGFzc2VzIikKICAgICAgICAgaWYgaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xzKToKICAgICAgICAgICAgIHJldHVybiAgIyBBbHJlYWR5IGEgc3ViY2xhc3MKQEAgLTEyNiw3ICsxMjksNyBAQAogICAgICAgICAiIiJPdmVycmlkZSBmb3IgaXNpbnN0YW5jZShpbnN0YW5jZSwgY2xzKS4iIiIKICAgICAgICAgIyBJbmxpbmUgdGhlIGNhY2hlIGNoZWNraW5nIHdoZW4gaXQncyBzaW1wbGUuCiAgICAgICAgIHN1YmNsYXNzID0gZ2V0YXR0cihpbnN0YW5jZSwgJ19fY2xhc3NfXycsIE5vbmUpCi0gICAgICAgIGlmIHN1YmNsYXNzIGluIGNscy5fYWJjX2NhY2hlOgorICAgICAgICBpZiBzdWJjbGFzcyBpcyBub3QgTm9uZSBhbmQgc3ViY2xhc3MgaW4gY2xzLl9hYmNfY2FjaGU6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBzdWJ0eXBlID0gdHlwZShpbnN0YW5jZSkKICAgICAgICAgIyBPbGQtc3R5bGUgaW5zdGFuY2VzCkBAIC0xNTAsNyArMTUzLDcgQEAKICAgICAgICAgIyBDaGVjayBuZWdhdGl2ZSBjYWNoZTsgbWF5IGhhdmUgdG8gaW52YWxpZGF0ZQogICAgICAgICBpZiBjbHMuX2FiY19uZWdhdGl2ZV9jYWNoZV92ZXJzaW9uIDwgQUJDTWV0YS5fYWJjX2ludmFsaWRhdGlvbl9jb3VudGVyOgogICAgICAgICAgICAgIyBJbnZhbGlkYXRlIHRoZSBuZWdhdGl2ZSBjYWNoZQotICAgICAgICAgICAgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGUgPSBzZXQoKQorICAgICAgICAgICAgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGUgPSBXZWFrU2V0KCkKICAgICAgICAgICAgIGNscy5fYWJjX25lZ2F0aXZlX2NhY2hlX3ZlcnNpb24gPSBBQkNNZXRhLl9hYmNfaW52YWxpZGF0aW9uX2NvdW50ZXIKICAgICAgICAgZWxpZiBzdWJjbGFzcyBpbiBjbHMuX2FiY19uZWdhdGl2ZV9jYWNoZToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEvTGliL2FpZmMucHkgYi9MaWIvYWlmYy5weQppbmRleCA3NmJjNzRjLi43N2E5ZDdkIDEwMDY0NAotLS0gYS9MaWIvYWlmYy5weQorKysgYi9MaWIvYWlmYy5weQpAQCAtNzMzLDYgKzczMyw4IEBACiAgICAgICAgIGlmIHNlbGYuX2NvbXA6CiAgICAgICAgICAgICBzZWxmLl9jb21wLkNsb3NlQ29tcHJlc3NvcigpCiAgICAgICAgICAgICBzZWxmLl9jb21wID0gTm9uZQorICAgICAgICAjIFByZXZlbnQgcmVmIGN5Y2xlcworICAgICAgICBzZWxmLl9jb252ZXJ0ID0gTm9uZQogICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKIAogICAgICMKZGlmZiAtLWdpdCBhL0xpYi9hbnRpZ3Jhdml0eS5weSBiL0xpYi9hbnRpZ3Jhdml0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmI3ZDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FudGlncmF2aXR5LnB5CkBAIC0wLDAgKzEsNCBAQAorCitpbXBvcnQgd2ViYnJvd3NlcgorCit3ZWJicm93c2VyLm9wZW4oImh0dHA6Ly94a2NkLmNvbS8zNTMvIikKZGlmZiAtLWdpdCBhL0xpYi9hcmdwYXJzZS5weSBiL0xpYi9hcmdwYXJzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTE3MjJhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FyZ3BhcnNlLnB5CkBAIC0wLDAgKzEsMjMzOSBAQAorIyBBdXRob3I6IFN0ZXZlbiBKLiBCZXRoYXJkIDxzdGV2ZW4uYmV0aGFyZEBnbWFpbC5jb20+LgorCisiIiJDb21tYW5kLWxpbmUgcGFyc2luZyBsaWJyYXJ5CisKK1RoaXMgbW9kdWxlIGlzIGFuIG9wdHBhcnNlLWluc3BpcmVkIGNvbW1hbmQtbGluZSBwYXJzaW5nIGxpYnJhcnkgdGhhdDoKKworICAgIC0gaGFuZGxlcyBib3RoIG9wdGlvbmFsIGFuZCBwb3NpdGlvbmFsIGFyZ3VtZW50cworICAgIC0gcHJvZHVjZXMgaGlnaGx5IGluZm9ybWF0aXZlIHVzYWdlIG1lc3NhZ2VzCisgICAgLSBzdXBwb3J0cyBwYXJzZXJzIHRoYXQgZGlzcGF0Y2ggdG8gc3ViLXBhcnNlcnMKKworVGhlIGZvbGxvd2luZyBpcyBhIHNpbXBsZSB1c2FnZSBleGFtcGxlIHRoYXQgc3VtcyBpbnRlZ2VycyBmcm9tIHRoZQorY29tbWFuZC1saW5lIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byBhIGZpbGU6OgorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uPSdzdW0gdGhlIGludGVnZXJzIGF0IHRoZSBjb21tYW5kIGxpbmUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICdpbnRlZ2VycycsIG1ldGF2YXI9J2ludCcsIG5hcmdzPScrJywgdHlwZT1pbnQsCisgICAgICAgIGhlbHA9J2FuIGludGVnZXIgdG8gYmUgc3VtbWVkJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAnLS1sb2cnLCBkZWZhdWx0PXN5cy5zdGRvdXQsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3cnKSwKKyAgICAgICAgaGVscD0ndGhlIGZpbGUgd2hlcmUgdGhlIHN1bSBzaG91bGQgYmUgd3JpdHRlbicpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBhcmdzLmxvZy53cml0ZSgnJXMnICUgc3VtKGFyZ3MuaW50ZWdlcnMpKQorICAgIGFyZ3MubG9nLmNsb3NlKCkKKworVGhlIG1vZHVsZSBjb250YWlucyB0aGUgZm9sbG93aW5nIHB1YmxpYyBjbGFzc2VzOgorCisgICAgLSBBcmd1bWVudFBhcnNlciAtLSBUaGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgY29tbWFuZC1saW5lIHBhcnNpbmcuIEFzIHRoZQorICAgICAgICBleGFtcGxlIGFib3ZlIHNob3dzLCB0aGUgYWRkX2FyZ3VtZW50KCkgbWV0aG9kIGlzIHVzZWQgdG8gcG9wdWxhdGUKKyAgICAgICAgdGhlIHBhcnNlciB3aXRoIGFjdGlvbnMgZm9yIG9wdGlvbmFsIGFuZCBwb3NpdGlvbmFsIGFyZ3VtZW50cy4gVGhlbgorICAgICAgICB0aGUgcGFyc2VfYXJncygpIG1ldGhvZCBpcyBpbnZva2VkIHRvIGNvbnZlcnQgdGhlIGFyZ3MgYXQgdGhlCisgICAgICAgIGNvbW1hbmQtbGluZSBpbnRvIGFuIG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMuCisKKyAgICAtIEFyZ3VtZW50RXJyb3IgLS0gVGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgQXJndW1lbnRQYXJzZXIgb2JqZWN0cyB3aGVuCisgICAgICAgIHRoZXJlIGFyZSBlcnJvcnMgd2l0aCB0aGUgcGFyc2VyJ3MgYWN0aW9ucy4gRXJyb3JzIHJhaXNlZCB3aGlsZQorICAgICAgICBwYXJzaW5nIHRoZSBjb21tYW5kLWxpbmUgYXJlIGNhdWdodCBieSBBcmd1bWVudFBhcnNlciBhbmQgZW1pdHRlZAorICAgICAgICBhcyBjb21tYW5kLWxpbmUgbWVzc2FnZXMuCisKKyAgICAtIEZpbGVUeXBlIC0tIEEgZmFjdG9yeSBmb3IgZGVmaW5pbmcgdHlwZXMgb2YgZmlsZXMgdG8gYmUgY3JlYXRlZC4gQXMgdGhlCisgICAgICAgIGV4YW1wbGUgYWJvdmUgc2hvd3MsIGluc3RhbmNlcyBvZiBGaWxlVHlwZSBhcmUgdHlwaWNhbGx5IHBhc3NlZCBhcworICAgICAgICB0aGUgdHlwZT0gYXJndW1lbnQgb2YgYWRkX2FyZ3VtZW50KCkgY2FsbHMuCisKKyAgICAtIEFjdGlvbiAtLSBUaGUgYmFzZSBjbGFzcyBmb3IgcGFyc2VyIGFjdGlvbnMuIFR5cGljYWxseSBhY3Rpb25zIGFyZQorICAgICAgICBzZWxlY3RlZCBieSBwYXNzaW5nIHN0cmluZ3MgbGlrZSAnc3RvcmVfdHJ1ZScgb3IgJ2FwcGVuZF9jb25zdCcgdG8KKyAgICAgICAgdGhlIGFjdGlvbj0gYXJndW1lbnQgb2YgYWRkX2FyZ3VtZW50KCkuIEhvd2V2ZXIsIGZvciBncmVhdGVyCisgICAgICAgIGN1c3RvbWl6YXRpb24gb2YgQXJndW1lbnRQYXJzZXIgYWN0aW9ucywgc3ViY2xhc3NlcyBvZiBBY3Rpb24gbWF5CisgICAgICAgIGJlIGRlZmluZWQgYW5kIHBhc3NlZCBhcyB0aGUgYWN0aW9uPSBhcmd1bWVudC4KKworICAgIC0gSGVscEZvcm1hdHRlciwgUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLCBSYXdUZXh0SGVscEZvcm1hdHRlciwKKyAgICAgICAgQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIgLS0gRm9ybWF0dGVyIGNsYXNzZXMgd2hpY2gKKyAgICAgICAgbWF5IGJlIHBhc3NlZCBhcyB0aGUgZm9ybWF0dGVyX2NsYXNzPSBhcmd1bWVudCB0byB0aGUKKyAgICAgICAgQXJndW1lbnRQYXJzZXIgY29uc3RydWN0b3IuIEhlbHBGb3JtYXR0ZXIgaXMgdGhlIGRlZmF1bHQsCisgICAgICAgIFJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlciBhbmQgUmF3VGV4dEhlbHBGb3JtYXR0ZXIgdGVsbCB0aGUgcGFyc2VyCisgICAgICAgIG5vdCB0byBjaGFuZ2UgdGhlIGZvcm1hdHRpbmcgZm9yIGhlbHAgdGV4dCwgYW5kCisgICAgICAgIEFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyIGFkZHMgaW5mb3JtYXRpb24gYWJvdXQgYXJndW1lbnQgZGVmYXVsdHMKKyAgICAgICAgdG8gdGhlIGhlbHAuCisKK0FsbCBvdGhlciBjbGFzc2VzIGluIHRoaXMgbW9kdWxlIGFyZSBjb25zaWRlcmVkIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCisoQWxzbyBub3RlIHRoYXQgSGVscEZvcm1hdHRlciBhbmQgUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyIGFyZSBvbmx5Citjb25zaWRlcmVkIHB1YmxpYyBhcyBvYmplY3QgbmFtZXMgLS0gdGhlIEFQSSBvZiB0aGUgZm9ybWF0dGVyIG9iamVjdHMgaXMKK3N0aWxsIGNvbnNpZGVyZWQgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLikKKyIiIgorCitfX3ZlcnNpb25fXyA9ICcxLjEnCitfX2FsbF9fID0gWworICAgICdBcmd1bWVudFBhcnNlcicsCisgICAgJ0FyZ3VtZW50RXJyb3InLAorICAgICdBcmd1bWVudFR5cGVFcnJvcicsCisgICAgJ0ZpbGVUeXBlJywKKyAgICAnSGVscEZvcm1hdHRlcicsCisgICAgJ0FyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyJywKKyAgICAnUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyJywKKyAgICAnUmF3VGV4dEhlbHBGb3JtYXR0ZXInLAorICAgICdOYW1lc3BhY2UnLAorICAgICdBY3Rpb24nLAorICAgICdPTkVfT1JfTU9SRScsCisgICAgJ09QVElPTkFMJywKKyAgICAnUEFSU0VSJywKKyAgICAnUkVNQUlOREVSJywKKyAgICAnU1VQUFJFU1MnLAorICAgICdaRVJPX09SX01PUkUnLAorXQorCisKK2ltcG9ydCBjb3B5IGFzIF9jb3B5CitpbXBvcnQgb3MgYXMgX29zCitpbXBvcnQgcmUgYXMgX3JlCitpbXBvcnQgc3lzIGFzIF9zeXMKK2ltcG9ydCB0ZXh0d3JhcCBhcyBfdGV4dHdyYXAKKworZnJvbSBnZXR0ZXh0IGltcG9ydCBnZXR0ZXh0IGFzIF8KKworCitkZWYgX2NhbGxhYmxlKG9iaik6CisgICAgcmV0dXJuIGhhc2F0dHIob2JqLCAnX19jYWxsX18nKSBvciBoYXNhdHRyKG9iaiwgJ19fYmFzZXNfXycpCisKKworU1VQUFJFU1MgPSAnPT1TVVBQUkVTUz09JworCitPUFRJT05BTCA9ICc/JworWkVST19PUl9NT1JFID0gJyonCitPTkVfT1JfTU9SRSA9ICcrJworUEFSU0VSID0gJ0EuLi4nCitSRU1BSU5ERVIgPSAnLi4uJworX1VOUkVDT0dOSVpFRF9BUkdTX0FUVFIgPSAnX3VucmVjb2duaXplZF9hcmdzJworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFV0aWxpdHkgZnVuY3Rpb25zIGFuZCBjbGFzc2VzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIF9BdHRyaWJ1dGVIb2xkZXIob2JqZWN0KToKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIHRoYXQgcHJvdmlkZXMgX19yZXByX18uCisKKyAgICBUaGUgX19yZXByX18gbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdDo6CisgICAgICAgIENsYXNzTmFtZShhdHRyPW5hbWUsIGF0dHI9bmFtZSwgLi4uKQorICAgIFRoZSBhdHRyaWJ1dGVzIGFyZSBkZXRlcm1pbmVkIGVpdGhlciBieSBhIGNsYXNzLWxldmVsIGF0dHJpYnV0ZSwKKyAgICAnX2t3YXJnX25hbWVzJywgb3IgYnkgaW5zcGVjdGluZyB0aGUgaW5zdGFuY2UgX19kaWN0X18uCisgICAgIiIiCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHR5cGVfbmFtZSA9IHR5cGUoc2VsZikuX19uYW1lX18KKyAgICAgICAgYXJnX3N0cmluZ3MgPSBbXQorICAgICAgICBmb3IgYXJnIGluIHNlbGYuX2dldF9hcmdzKCk6CisgICAgICAgICAgICBhcmdfc3RyaW5ncy5hcHBlbmQocmVwcihhcmcpKQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc2VsZi5fZ2V0X2t3YXJncygpOgorICAgICAgICAgICAgYXJnX3N0cmluZ3MuYXBwZW5kKCclcz0lcicgJSAobmFtZSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gJyVzKCVzKScgJSAodHlwZV9uYW1lLCAnLCAnLmpvaW4oYXJnX3N0cmluZ3MpKQorCisgICAgZGVmIF9nZXRfa3dhcmdzKHNlbGYpOgorICAgICAgICByZXR1cm4gc29ydGVkKHNlbGYuX19kaWN0X18uaXRlbXMoKSkKKworICAgIGRlZiBfZ2V0X2FyZ3Moc2VsZik6CisgICAgICAgIHJldHVybiBbXQorCisKK2RlZiBfZW5zdXJlX3ZhbHVlKG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpOgorICAgIGlmIGdldGF0dHIobmFtZXNwYWNlLCBuYW1lLCBOb25lKSBpcyBOb25lOgorICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpCisgICAgcmV0dXJuIGdldGF0dHIobmFtZXNwYWNlLCBuYW1lKQorCisKKyMgPT09PT09PT09PT09PT09CisjIEZvcm1hdHRpbmcgSGVscAorIyA9PT09PT09PT09PT09PT0KKworY2xhc3MgSGVscEZvcm1hdHRlcihvYmplY3QpOgorICAgICIiIkZvcm1hdHRlciBmb3IgZ2VuZXJhdGluZyB1c2FnZSBtZXNzYWdlcyBhbmQgYXJndW1lbnQgaGVscCBzdHJpbmdzLgorCisgICAgT25seSB0aGUgbmFtZSBvZiB0aGlzIGNsYXNzIGlzIGNvbnNpZGVyZWQgYSBwdWJsaWMgQVBJLiBBbGwgdGhlIG1ldGhvZHMKKyAgICBwcm92aWRlZCBieSB0aGUgY2xhc3MgYXJlIGNvbnNpZGVyZWQgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIHByb2csCisgICAgICAgICAgICAgICAgIGluZGVudF9pbmNyZW1lbnQ9MiwKKyAgICAgICAgICAgICAgICAgbWF4X2hlbHBfcG9zaXRpb249MjQsCisgICAgICAgICAgICAgICAgIHdpZHRoPU5vbmUpOgorCisgICAgICAgICMgZGVmYXVsdCBzZXR0aW5nIGZvciB3aWR0aAorICAgICAgICBpZiB3aWR0aCBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpZHRoID0gaW50KF9vcy5lbnZpcm9uWydDT0xVTU5TJ10pCisgICAgICAgICAgICBleGNlcHQgKEtleUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICB3aWR0aCA9IDgwCisgICAgICAgICAgICB3aWR0aCAtPSAyCisKKyAgICAgICAgc2VsZi5fcHJvZyA9IHByb2cKKyAgICAgICAgc2VsZi5faW5kZW50X2luY3JlbWVudCA9IGluZGVudF9pbmNyZW1lbnQKKyAgICAgICAgc2VsZi5fbWF4X2hlbHBfcG9zaXRpb24gPSBtYXhfaGVscF9wb3NpdGlvbgorICAgICAgICBzZWxmLl93aWR0aCA9IHdpZHRoCisKKyAgICAgICAgc2VsZi5fY3VycmVudF9pbmRlbnQgPSAwCisgICAgICAgIHNlbGYuX2xldmVsID0gMAorICAgICAgICBzZWxmLl9hY3Rpb25fbWF4X2xlbmd0aCA9IDAKKworICAgICAgICBzZWxmLl9yb290X3NlY3Rpb24gPSBzZWxmLl9TZWN0aW9uKHNlbGYsIE5vbmUpCisgICAgICAgIHNlbGYuX2N1cnJlbnRfc2VjdGlvbiA9IHNlbGYuX3Jvb3Rfc2VjdGlvbgorCisgICAgICAgIHNlbGYuX3doaXRlc3BhY2VfbWF0Y2hlciA9IF9yZS5jb21waWxlKHInXHMrJykKKyAgICAgICAgc2VsZi5fbG9uZ19icmVha19tYXRjaGVyID0gX3JlLmNvbXBpbGUocidcblxuXG4rJykKKworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICMgU2VjdGlvbiBhbmQgaW5kZW50YXRpb24gbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiBfaW5kZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9jdXJyZW50X2luZGVudCArPSBzZWxmLl9pbmRlbnRfaW5jcmVtZW50CisgICAgICAgIHNlbGYuX2xldmVsICs9IDEKKworICAgIGRlZiBfZGVkZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9jdXJyZW50X2luZGVudCAtPSBzZWxmLl9pbmRlbnRfaW5jcmVtZW50CisgICAgICAgIGFzc2VydCBzZWxmLl9jdXJyZW50X2luZGVudCA+PSAwLCAnSW5kZW50IGRlY3JlYXNlZCBiZWxvdyAwLicKKyAgICAgICAgc2VsZi5fbGV2ZWwgLT0gMQorCisgICAgY2xhc3MgX1NlY3Rpb24ob2JqZWN0KToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9ybWF0dGVyLCBwYXJlbnQsIGhlYWRpbmc9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZvcm1hdHRlciA9IGZvcm1hdHRlcgorICAgICAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKKyAgICAgICAgICAgIHNlbGYuaGVhZGluZyA9IGhlYWRpbmcKKyAgICAgICAgICAgIHNlbGYuaXRlbXMgPSBbXQorCisgICAgICAgIGRlZiBmb3JtYXRfaGVscChzZWxmKToKKyAgICAgICAgICAgICMgZm9ybWF0IHRoZSBpbmRlbnRlZCBzZWN0aW9uCisgICAgICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdHRlci5faW5kZW50KCkKKyAgICAgICAgICAgIGpvaW4gPSBzZWxmLmZvcm1hdHRlci5fam9pbl9wYXJ0cworICAgICAgICAgICAgZm9yIGZ1bmMsIGFyZ3MgaW4gc2VsZi5pdGVtczoKKyAgICAgICAgICAgICAgICBmdW5jKCphcmdzKQorICAgICAgICAgICAgaXRlbV9oZWxwID0gam9pbihbZnVuYygqYXJncykgZm9yIGZ1bmMsIGFyZ3MgaW4gc2VsZi5pdGVtc10pCisgICAgICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdHRlci5fZGVkZW50KCkKKworICAgICAgICAgICAgIyByZXR1cm4gbm90aGluZyBpZiB0aGUgc2VjdGlvbiB3YXMgZW1wdHkKKyAgICAgICAgICAgIGlmIG5vdCBpdGVtX2hlbHA6CisgICAgICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgICAgICMgYWRkIHRoZSBoZWFkaW5nIGlmIHRoZSBzZWN0aW9uIHdhcyBub24tZW1wdHkKKyAgICAgICAgICAgIGlmIHNlbGYuaGVhZGluZyBpcyBub3QgU1VQUFJFU1MgYW5kIHNlbGYuaGVhZGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjdXJyZW50X2luZGVudCA9IHNlbGYuZm9ybWF0dGVyLl9jdXJyZW50X2luZGVudAorICAgICAgICAgICAgICAgIGhlYWRpbmcgPSAnJSpzJXM6XG4nICUgKGN1cnJlbnRfaW5kZW50LCAnJywgc2VsZi5oZWFkaW5nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoZWFkaW5nID0gJycKKworICAgICAgICAgICAgIyBqb2luIHRoZSBzZWN0aW9uLWluaXRpYWwgbmV3bGluZSwgdGhlIGhlYWRpbmcgYW5kIHRoZSBoZWxwCisgICAgICAgICAgICByZXR1cm4gam9pbihbJ1xuJywgaGVhZGluZywgaXRlbV9oZWxwLCAnXG4nXSkKKworICAgIGRlZiBfYWRkX2l0ZW0oc2VsZiwgZnVuYywgYXJncyk6CisgICAgICAgIHNlbGYuX2N1cnJlbnRfc2VjdGlvbi5pdGVtcy5hcHBlbmQoKGZ1bmMsIGFyZ3MpKQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIE1lc3NhZ2UgYnVpbGRpbmcgbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIHN0YXJ0X3NlY3Rpb24oc2VsZiwgaGVhZGluZyk6CisgICAgICAgIHNlbGYuX2luZGVudCgpCisgICAgICAgIHNlY3Rpb24gPSBzZWxmLl9TZWN0aW9uKHNlbGYsIHNlbGYuX2N1cnJlbnRfc2VjdGlvbiwgaGVhZGluZykKKyAgICAgICAgc2VsZi5fYWRkX2l0ZW0oc2VjdGlvbi5mb3JtYXRfaGVscCwgW10pCisgICAgICAgIHNlbGYuX2N1cnJlbnRfc2VjdGlvbiA9IHNlY3Rpb24KKworICAgIGRlZiBlbmRfc2VjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fY3VycmVudF9zZWN0aW9uID0gc2VsZi5fY3VycmVudF9zZWN0aW9uLnBhcmVudAorICAgICAgICBzZWxmLl9kZWRlbnQoKQorCisgICAgZGVmIGFkZF90ZXh0KHNlbGYsIHRleHQpOgorICAgICAgICBpZiB0ZXh0IGlzIG5vdCBTVVBQUkVTUyBhbmQgdGV4dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9pdGVtKHNlbGYuX2Zvcm1hdF90ZXh0LCBbdGV4dF0pCisKKyAgICBkZWYgYWRkX3VzYWdlKHNlbGYsIHVzYWdlLCBhY3Rpb25zLCBncm91cHMsIHByZWZpeD1Ob25lKToKKyAgICAgICAgaWYgdXNhZ2UgaXMgbm90IFNVUFBSRVNTOgorICAgICAgICAgICAgYXJncyA9IHVzYWdlLCBhY3Rpb25zLCBncm91cHMsIHByZWZpeAorICAgICAgICAgICAgc2VsZi5fYWRkX2l0ZW0oc2VsZi5fZm9ybWF0X3VzYWdlLCBhcmdzKQorCisgICAgZGVmIGFkZF9hcmd1bWVudChzZWxmLCBhY3Rpb24pOgorICAgICAgICBpZiBhY3Rpb24uaGVscCBpcyBub3QgU1VQUFJFU1M6CisKKyAgICAgICAgICAgICMgZmluZCBhbGwgaW52b2NhdGlvbnMKKyAgICAgICAgICAgIGdldF9pbnZvY2F0aW9uID0gc2VsZi5fZm9ybWF0X2FjdGlvbl9pbnZvY2F0aW9uCisgICAgICAgICAgICBpbnZvY2F0aW9ucyA9IFtnZXRfaW52b2NhdGlvbihhY3Rpb24pXQorICAgICAgICAgICAgZm9yIHN1YmFjdGlvbiBpbiBzZWxmLl9pdGVyX2luZGVudGVkX3N1YmFjdGlvbnMoYWN0aW9uKToKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9ucy5hcHBlbmQoZ2V0X2ludm9jYXRpb24oc3ViYWN0aW9uKSkKKworICAgICAgICAgICAgIyB1cGRhdGUgdGhlIG1heGltdW0gaXRlbSBsZW5ndGgKKyAgICAgICAgICAgIGludm9jYXRpb25fbGVuZ3RoID0gbWF4KFtsZW4ocykgZm9yIHMgaW4gaW52b2NhdGlvbnNdKQorICAgICAgICAgICAgYWN0aW9uX2xlbmd0aCA9IGludm9jYXRpb25fbGVuZ3RoICsgc2VsZi5fY3VycmVudF9pbmRlbnQKKyAgICAgICAgICAgIHNlbGYuX2FjdGlvbl9tYXhfbGVuZ3RoID0gbWF4KHNlbGYuX2FjdGlvbl9tYXhfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uX2xlbmd0aCkKKworICAgICAgICAgICAgIyBhZGQgdGhlIGl0ZW0gdG8gdGhlIGxpc3QKKyAgICAgICAgICAgIHNlbGYuX2FkZF9pdGVtKHNlbGYuX2Zvcm1hdF9hY3Rpb24sIFthY3Rpb25dKQorCisgICAgZGVmIGFkZF9hcmd1bWVudHMoc2VsZiwgYWN0aW9ucyk6CisgICAgICAgIGZvciBhY3Rpb24gaW4gYWN0aW9uczoKKyAgICAgICAgICAgIHNlbGYuYWRkX2FyZ3VtZW50KGFjdGlvbikKKworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIEhlbHAtZm9ybWF0dGluZyBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiBmb3JtYXRfaGVscChzZWxmKToKKyAgICAgICAgaGVscCA9IHNlbGYuX3Jvb3Rfc2VjdGlvbi5mb3JtYXRfaGVscCgpCisgICAgICAgIGlmIGhlbHA6CisgICAgICAgICAgICBoZWxwID0gc2VsZi5fbG9uZ19icmVha19tYXRjaGVyLnN1YignXG5cbicsIGhlbHApCisgICAgICAgICAgICBoZWxwID0gaGVscC5zdHJpcCgnXG4nKSArICdcbicKKyAgICAgICAgcmV0dXJuIGhlbHAKKworICAgIGRlZiBfam9pbl9wYXJ0cyhzZWxmLCBwYXJ0X3N0cmluZ3MpOgorICAgICAgICByZXR1cm4gJycuam9pbihbcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gcGFydF9zdHJpbmdzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0IGFuZCBwYXJ0IGlzIG5vdCBTVVBQUkVTU10pCisKKyAgICBkZWYgX2Zvcm1hdF91c2FnZShzZWxmLCB1c2FnZSwgYWN0aW9ucywgZ3JvdXBzLCBwcmVmaXgpOgorICAgICAgICBpZiBwcmVmaXggaXMgTm9uZToKKyAgICAgICAgICAgIHByZWZpeCA9IF8oJ3VzYWdlOiAnKQorCisgICAgICAgICMgaWYgdXNhZ2UgaXMgc3BlY2lmaWVkLCB1c2UgdGhhdAorICAgICAgICBpZiB1c2FnZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHVzYWdlID0gdXNhZ2UgJSBkaWN0KHByb2c9c2VsZi5fcHJvZykKKworICAgICAgICAjIGlmIG5vIG9wdGlvbmFscyBvciBwb3NpdGlvbmFscyBhcmUgYXZhaWxhYmxlLCB1c2FnZSBpcyBqdXN0IHByb2cKKyAgICAgICAgZWxpZiB1c2FnZSBpcyBOb25lIGFuZCBub3QgYWN0aW9uczoKKyAgICAgICAgICAgIHVzYWdlID0gJyUocHJvZylzJyAlIGRpY3QocHJvZz1zZWxmLl9wcm9nKQorCisgICAgICAgICMgaWYgb3B0aW9uYWxzIGFuZCBwb3NpdGlvbmFscyBhcmUgYXZhaWxhYmxlLCBjYWxjdWxhdGUgdXNhZ2UKKyAgICAgICAgZWxpZiB1c2FnZSBpcyBOb25lOgorICAgICAgICAgICAgcHJvZyA9ICclKHByb2cpcycgJSBkaWN0KHByb2c9c2VsZi5fcHJvZykKKworICAgICAgICAgICAgIyBzcGxpdCBvcHRpb25hbHMgZnJvbSBwb3NpdGlvbmFscworICAgICAgICAgICAgb3B0aW9uYWxzID0gW10KKyAgICAgICAgICAgIHBvc2l0aW9uYWxzID0gW10KKyAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gYWN0aW9uczoKKyAgICAgICAgICAgICAgICBpZiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFscy5hcHBlbmQoYWN0aW9uKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxzLmFwcGVuZChhY3Rpb24pCisKKyAgICAgICAgICAgICMgYnVpbGQgZnVsbCB1c2FnZSBzdHJpbmcKKyAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9hY3Rpb25zX3VzYWdlCisgICAgICAgICAgICBhY3Rpb25fdXNhZ2UgPSBmb3JtYXQob3B0aW9uYWxzICsgcG9zaXRpb25hbHMsIGdyb3VwcykKKyAgICAgICAgICAgIHVzYWdlID0gJyAnLmpvaW4oW3MgZm9yIHMgaW4gW3Byb2csIGFjdGlvbl91c2FnZV0gaWYgc10pCisKKyAgICAgICAgICAgICMgd3JhcCB0aGUgdXNhZ2UgcGFydHMgaWYgaXQncyB0b28gbG9uZworICAgICAgICAgICAgdGV4dF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gc2VsZi5fY3VycmVudF9pbmRlbnQKKyAgICAgICAgICAgIGlmIGxlbihwcmVmaXgpICsgbGVuKHVzYWdlKSA+IHRleHRfd2lkdGg6CisKKyAgICAgICAgICAgICAgICAjIGJyZWFrIHVzYWdlIGludG8gd3JhcHBhYmxlIHBhcnRzCisgICAgICAgICAgICAgICAgcGFydF9yZWdleHAgPSByJ1woLio/XCkrfFxbLio/XF0rfFxTKycKKyAgICAgICAgICAgICAgICBvcHRfdXNhZ2UgPSBmb3JtYXQob3B0aW9uYWxzLCBncm91cHMpCisgICAgICAgICAgICAgICAgcG9zX3VzYWdlID0gZm9ybWF0KHBvc2l0aW9uYWxzLCBncm91cHMpCisgICAgICAgICAgICAgICAgb3B0X3BhcnRzID0gX3JlLmZpbmRhbGwocGFydF9yZWdleHAsIG9wdF91c2FnZSkKKyAgICAgICAgICAgICAgICBwb3NfcGFydHMgPSBfcmUuZmluZGFsbChwYXJ0X3JlZ2V4cCwgcG9zX3VzYWdlKQorICAgICAgICAgICAgICAgIGFzc2VydCAnICcuam9pbihvcHRfcGFydHMpID09IG9wdF91c2FnZQorICAgICAgICAgICAgICAgIGFzc2VydCAnICcuam9pbihwb3NfcGFydHMpID09IHBvc191c2FnZQorCisgICAgICAgICAgICAgICAgIyBoZWxwZXIgZm9yIHdyYXBwaW5nIGxpbmVzCisgICAgICAgICAgICAgICAgZGVmIGdldF9saW5lcyhwYXJ0cywgaW5kZW50LCBwcmVmaXg9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGlmIHByZWZpeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbGVuID0gbGVuKHByZWZpeCkgLSAxCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX2xlbiA9IGxlbihpbmRlbnQpIC0gMQorICAgICAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVfbGVuICsgMSArIGxlbihwYXJ0KSA+IHRleHRfd2lkdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcgJy5qb2luKGxpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbGVuID0gbGVuKGluZGVudCkgLSAxCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZChwYXJ0KQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9sZW4gKz0gbGVuKHBhcnQpICsgMQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcgJy5qb2luKGxpbmUpKQorICAgICAgICAgICAgICAgICAgICBpZiBwcmVmaXggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1swXSA9IGxpbmVzWzBdW2xlbihpbmRlbnQpOl0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICAgICAgICAgICAgICAjIGlmIHByb2cgaXMgc2hvcnQsIGZvbGxvdyBpdCB3aXRoIG9wdGlvbmFscyBvciBwb3NpdGlvbmFscworICAgICAgICAgICAgICAgIGlmIGxlbihwcmVmaXgpICsgbGVuKHByb2cpIDw9IDAuNzUgKiB0ZXh0X3dpZHRoOgorICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSAnICcgKiAobGVuKHByZWZpeCkgKyBsZW4ocHJvZykgKyAxKQorICAgICAgICAgICAgICAgICAgICBpZiBvcHRfcGFydHM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGdldF9saW5lcyhbcHJvZ10gKyBvcHRfcGFydHMsIGluZGVudCwgcHJlZml4KQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKGdldF9saW5lcyhwb3NfcGFydHMsIGluZGVudCkpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgcG9zX3BhcnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBnZXRfbGluZXMoW3Byb2ddICsgcG9zX3BhcnRzLCBpbmRlbnQsIHByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gW3Byb2ddCisKKyAgICAgICAgICAgICAgICAjIGlmIHByb2cgaXMgbG9uZywgcHV0IGl0IG9uIGl0cyBvd24gbGluZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGluZGVudCA9ICcgJyAqIGxlbihwcmVmaXgpCisgICAgICAgICAgICAgICAgICAgIHBhcnRzID0gb3B0X3BhcnRzICsgcG9zX3BhcnRzCisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gZ2V0X2xpbmVzKHBhcnRzLCBpbmRlbnQpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lcykgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKGdldF9saW5lcyhvcHRfcGFydHMsIGluZGVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5leHRlbmQoZ2V0X2xpbmVzKHBvc19wYXJ0cywgaW5kZW50KSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbcHJvZ10gKyBsaW5lcworCisgICAgICAgICAgICAgICAgIyBqb2luIGxpbmVzIGludG8gdXNhZ2UKKyAgICAgICAgICAgICAgICB1c2FnZSA9ICdcbicuam9pbihsaW5lcykKKworICAgICAgICAjIHByZWZpeCB3aXRoICd1c2FnZTonCisgICAgICAgIHJldHVybiAnJXMlc1xuXG4nICUgKHByZWZpeCwgdXNhZ2UpCisKKyAgICBkZWYgX2Zvcm1hdF9hY3Rpb25zX3VzYWdlKHNlbGYsIGFjdGlvbnMsIGdyb3Vwcyk6CisgICAgICAgICMgZmluZCBncm91cCBpbmRpY2VzIGFuZCBpZGVudGlmeSBhY3Rpb25zIGluIGdyb3VwcworICAgICAgICBncm91cF9hY3Rpb25zID0gc2V0KCkKKyAgICAgICAgaW5zZXJ0cyA9IHt9CisgICAgICAgIGZvciBncm91cCBpbiBncm91cHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3RhcnQgPSBhY3Rpb25zLmluZGV4KGdyb3VwLl9ncm91cF9hY3Rpb25zWzBdKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBsZW4oZ3JvdXAuX2dyb3VwX2FjdGlvbnMpCisgICAgICAgICAgICAgICAgaWYgYWN0aW9uc1tzdGFydDplbmRdID09IGdyb3VwLl9ncm91cF9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICBmb3IgYWN0aW9uIGluIGdyb3VwLl9ncm91cF9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYWN0aW9ucy5hZGQoYWN0aW9uKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZ3JvdXAucmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdGFydCBpbiBpbnNlcnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydHNbc3RhcnRdICs9ICcgWycKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0c1tzdGFydF0gPSAnWycKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydHNbZW5kXSA9ICddJworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RhcnQgaW4gaW5zZXJ0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRzW3N0YXJ0XSArPSAnICgnCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydHNbc3RhcnRdID0gJygnCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRzW2VuZF0gPSAnKScKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc3RhcnQgKyAxLCBlbmQpOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0c1tpXSA9ICd8JworCisgICAgICAgICMgY29sbGVjdCBhbGwgYWN0aW9ucyBmb3JtYXQgc3RyaW5ncworICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIGZvciBpLCBhY3Rpb24gaW4gZW51bWVyYXRlKGFjdGlvbnMpOgorCisgICAgICAgICAgICAjIHN1cHByZXNzZWQgYXJndW1lbnRzIGFyZSBtYXJrZWQgd2l0aCBOb25lCisgICAgICAgICAgICAjIHJlbW92ZSB8IHNlcGFyYXRvcnMgZm9yIHN1cHByZXNzZWQgYXJndW1lbnRzCisgICAgICAgICAgICBpZiBhY3Rpb24uaGVscCBpcyBTVVBQUkVTUzoKKyAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBpbnNlcnRzLmdldChpKSA9PSAnfCc6CisgICAgICAgICAgICAgICAgICAgIGluc2VydHMucG9wKGkpCisgICAgICAgICAgICAgICAgZWxpZiBpbnNlcnRzLmdldChpICsgMSkgPT0gJ3wnOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRzLnBvcChpICsgMSkKKworICAgICAgICAgICAgIyBwcm9kdWNlIGFsbCBhcmcgc3RyaW5ncworICAgICAgICAgICAgZWxpZiBub3QgYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgICAgIHBhcnQgPSBzZWxmLl9mb3JtYXRfYXJncyhhY3Rpb24sIGFjdGlvbi5kZXN0KQorCisgICAgICAgICAgICAgICAgIyBpZiBpdCdzIGluIGEgZ3JvdXAsIHN0cmlwIHRoZSBvdXRlciBbXQorICAgICAgICAgICAgICAgIGlmIGFjdGlvbiBpbiBncm91cF9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0WzBdID09ICdbJyBhbmQgcGFydFstMV0gPT0gJ10nOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnRbMTotMV0KKworICAgICAgICAgICAgICAgICMgYWRkIHRoZSBhY3Rpb24gc3RyaW5nIHRvIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKHBhcnQpCisKKyAgICAgICAgICAgICMgcHJvZHVjZSB0aGUgZmlyc3Qgd2F5IHRvIGludm9rZSB0aGUgb3B0aW9uIGluIGJyYWNrZXRzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmcgPSBhY3Rpb24ub3B0aW9uX3N0cmluZ3NbMF0KKworICAgICAgICAgICAgICAgICMgaWYgdGhlIE9wdGlvbmFsIGRvZXNuJ3QgdGFrZSBhIHZhbHVlLCBmb3JtYXQgaXM6CisgICAgICAgICAgICAgICAgIyAgICAtcyBvciAtLWxvbmcKKyAgICAgICAgICAgICAgICBpZiBhY3Rpb24ubmFyZ3MgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcGFydCA9ICclcycgJSBvcHRpb25fc3RyaW5nCisKKyAgICAgICAgICAgICAgICAjIGlmIHRoZSBPcHRpb25hbCB0YWtlcyBhIHZhbHVlLCBmb3JtYXQgaXM6CisgICAgICAgICAgICAgICAgIyAgICAtcyBBUkdTIG9yIC0tbG9uZyBBUkdTCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IGFjdGlvbi5kZXN0LnVwcGVyKCkKKyAgICAgICAgICAgICAgICAgICAgYXJnc19zdHJpbmcgPSBzZWxmLl9mb3JtYXRfYXJncyhhY3Rpb24sIGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgIHBhcnQgPSAnJXMgJXMnICUgKG9wdGlvbl9zdHJpbmcsIGFyZ3Nfc3RyaW5nKQorCisgICAgICAgICAgICAgICAgIyBtYWtlIGl0IGxvb2sgb3B0aW9uYWwgaWYgaXQncyBub3QgcmVxdWlyZWQgb3IgaW4gYSBncm91cAorICAgICAgICAgICAgICAgIGlmIG5vdCBhY3Rpb24ucmVxdWlyZWQgYW5kIGFjdGlvbiBub3QgaW4gZ3JvdXBfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgcGFydCA9ICdbJXNdJyAlIHBhcnQKKworICAgICAgICAgICAgICAgICMgYWRkIHRoZSBhY3Rpb24gc3RyaW5nIHRvIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKHBhcnQpCisKKyAgICAgICAgIyBpbnNlcnQgdGhpbmdzIGF0IHRoZSBuZWNlc3NhcnkgaW5kaWNlcworICAgICAgICBmb3IgaSBpbiBzb3J0ZWQoaW5zZXJ0cywgcmV2ZXJzZT1UcnVlKToKKyAgICAgICAgICAgIHBhcnRzW2k6aV0gPSBbaW5zZXJ0c1tpXV0KKworICAgICAgICAjIGpvaW4gYWxsIHRoZSBhY3Rpb24gaXRlbXMgd2l0aCBzcGFjZXMKKyAgICAgICAgdGV4dCA9ICcgJy5qb2luKFtpdGVtIGZvciBpdGVtIGluIHBhcnRzIGlmIGl0ZW0gaXMgbm90IE5vbmVdKQorCisgICAgICAgICMgY2xlYW4gdXAgc2VwYXJhdG9ycyBmb3IgbXV0dWFsbHkgZXhjbHVzaXZlIGdyb3VwcworICAgICAgICBvcGVuID0gcidbXFsoXScKKyAgICAgICAgY2xvc2UgPSByJ1tcXSldJworICAgICAgICB0ZXh0ID0gX3JlLnN1YihyJyglcykgJyAlIG9wZW4sIHInXDEnLCB0ZXh0KQorICAgICAgICB0ZXh0ID0gX3JlLnN1YihyJyAoJXMpJyAlIGNsb3NlLCByJ1wxJywgdGV4dCkKKyAgICAgICAgdGV4dCA9IF9yZS5zdWIociclcyAqJXMnICUgKG9wZW4sIGNsb3NlKSwgcicnLCB0ZXh0KQorICAgICAgICB0ZXh0ID0gX3JlLnN1YihyJ1woKFtefF0qKVwpJywgcidcMScsIHRleHQpCisgICAgICAgIHRleHQgPSB0ZXh0LnN0cmlwKCkKKworICAgICAgICAjIHJldHVybiB0aGUgdGV4dAorICAgICAgICByZXR1cm4gdGV4dAorCisgICAgZGVmIF9mb3JtYXRfdGV4dChzZWxmLCB0ZXh0KToKKyAgICAgICAgaWYgJyUocHJvZyknIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dCAlIGRpY3QocHJvZz1zZWxmLl9wcm9nKQorICAgICAgICB0ZXh0X3dpZHRoID0gc2VsZi5fd2lkdGggLSBzZWxmLl9jdXJyZW50X2luZGVudAorICAgICAgICBpbmRlbnQgPSAnICcgKiBzZWxmLl9jdXJyZW50X2luZGVudAorICAgICAgICByZXR1cm4gc2VsZi5fZmlsbF90ZXh0KHRleHQsIHRleHRfd2lkdGgsIGluZGVudCkgKyAnXG5cbicKKworICAgIGRlZiBfZm9ybWF0X2FjdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICAjIGRldGVybWluZSB0aGUgcmVxdWlyZWQgd2lkdGggYW5kIHRoZSBlbnRyeSBsYWJlbAorICAgICAgICBoZWxwX3Bvc2l0aW9uID0gbWluKHNlbGYuX2FjdGlvbl9tYXhfbGVuZ3RoICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXhfaGVscF9wb3NpdGlvbikKKyAgICAgICAgaGVscF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gaGVscF9wb3NpdGlvbgorICAgICAgICBhY3Rpb25fd2lkdGggPSBoZWxwX3Bvc2l0aW9uIC0gc2VsZi5fY3VycmVudF9pbmRlbnQgLSAyCisgICAgICAgIGFjdGlvbl9oZWFkZXIgPSBzZWxmLl9mb3JtYXRfYWN0aW9uX2ludm9jYXRpb24oYWN0aW9uKQorCisgICAgICAgICMgaG8gbmVscDsgc3RhcnQgb24gc2FtZSBsaW5lIGFuZCBhZGQgYSBmaW5hbCBuZXdsaW5lCisgICAgICAgIGlmIG5vdCBhY3Rpb24uaGVscDoKKyAgICAgICAgICAgIHR1cCA9IHNlbGYuX2N1cnJlbnRfaW5kZW50LCAnJywgYWN0aW9uX2hlYWRlcgorICAgICAgICAgICAgYWN0aW9uX2hlYWRlciA9ICclKnMlc1xuJyAlIHR1cAorCisgICAgICAgICMgc2hvcnQgYWN0aW9uIG5hbWU7IHN0YXJ0IG9uIHRoZSBzYW1lIGxpbmUgYW5kIHBhZCB0d28gc3BhY2VzCisgICAgICAgIGVsaWYgbGVuKGFjdGlvbl9oZWFkZXIpIDw9IGFjdGlvbl93aWR0aDoKKyAgICAgICAgICAgIHR1cCA9IHNlbGYuX2N1cnJlbnRfaW5kZW50LCAnJywgYWN0aW9uX3dpZHRoLCBhY3Rpb25faGVhZGVyCisgICAgICAgICAgICBhY3Rpb25faGVhZGVyID0gJyUqcyUtKnMgICcgJSB0dXAKKyAgICAgICAgICAgIGluZGVudF9maXJzdCA9IDAKKworICAgICAgICAjIGxvbmcgYWN0aW9uIG5hbWU7IHN0YXJ0IG9uIHRoZSBuZXh0IGxpbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHR1cCA9IHNlbGYuX2N1cnJlbnRfaW5kZW50LCAnJywgYWN0aW9uX2hlYWRlcgorICAgICAgICAgICAgYWN0aW9uX2hlYWRlciA9ICclKnMlc1xuJyAlIHR1cAorICAgICAgICAgICAgaW5kZW50X2ZpcnN0ID0gaGVscF9wb3NpdGlvbgorCisgICAgICAgICMgY29sbGVjdCB0aGUgcGllY2VzIG9mIHRoZSBhY3Rpb24gaGVscAorICAgICAgICBwYXJ0cyA9IFthY3Rpb25faGVhZGVyXQorCisgICAgICAgICMgaWYgdGhlcmUgd2FzIGhlbHAgZm9yIHRoZSBhY3Rpb24sIGFkZCBsaW5lcyBvZiBoZWxwIHRleHQKKyAgICAgICAgaWYgYWN0aW9uLmhlbHA6CisgICAgICAgICAgICBoZWxwX3RleHQgPSBzZWxmLl9leHBhbmRfaGVscChhY3Rpb24pCisgICAgICAgICAgICBoZWxwX2xpbmVzID0gc2VsZi5fc3BsaXRfbGluZXMoaGVscF90ZXh0LCBoZWxwX3dpZHRoKQorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCclKnMlc1xuJyAlIChpbmRlbnRfZmlyc3QsICcnLCBoZWxwX2xpbmVzWzBdKSkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGhlbHBfbGluZXNbMTpdOgorICAgICAgICAgICAgICAgIHBhcnRzLmFwcGVuZCgnJSpzJXNcbicgJSAoaGVscF9wb3NpdGlvbiwgJycsIGxpbmUpKQorCisgICAgICAgICMgb3IgYWRkIGEgbmV3bGluZSBpZiB0aGUgZGVzY3JpcHRpb24gZG9lc24ndCBlbmQgd2l0aCBvbmUKKyAgICAgICAgZWxpZiBub3QgYWN0aW9uX2hlYWRlci5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgIHBhcnRzLmFwcGVuZCgnXG4nKQorCisgICAgICAgICMgaWYgdGhlcmUgYXJlIGFueSBzdWItYWN0aW9ucywgYWRkIHRoZWlyIGhlbHAgYXMgd2VsbAorICAgICAgICBmb3Igc3ViYWN0aW9uIGluIHNlbGYuX2l0ZXJfaW5kZW50ZWRfc3ViYWN0aW9ucyhhY3Rpb24pOgorICAgICAgICAgICAgcGFydHMuYXBwZW5kKHNlbGYuX2Zvcm1hdF9hY3Rpb24oc3ViYWN0aW9uKSkKKworICAgICAgICAjIHJldHVybiBhIHNpbmdsZSBzdHJpbmcKKyAgICAgICAgcmV0dXJuIHNlbGYuX2pvaW5fcGFydHMocGFydHMpCisKKyAgICBkZWYgX2Zvcm1hdF9hY3Rpb25faW52b2NhdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICBpZiBub3QgYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgbWV0YXZhciwgPSBzZWxmLl9tZXRhdmFyX2Zvcm1hdHRlcihhY3Rpb24sIGFjdGlvbi5kZXN0KSgxKQorICAgICAgICAgICAgcmV0dXJuIG1ldGF2YXIKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFydHMgPSBbXQorCisgICAgICAgICAgICAjIGlmIHRoZSBPcHRpb25hbCBkb2Vzbid0IHRha2UgYSB2YWx1ZSwgZm9ybWF0IGlzOgorICAgICAgICAgICAgIyAgICAtcywgLS1sb25nCisgICAgICAgICAgICBpZiBhY3Rpb24ubmFyZ3MgPT0gMDoKKyAgICAgICAgICAgICAgICBwYXJ0cy5leHRlbmQoYWN0aW9uLm9wdGlvbl9zdHJpbmdzKQorCisgICAgICAgICAgICAjIGlmIHRoZSBPcHRpb25hbCB0YWtlcyBhIHZhbHVlLCBmb3JtYXQgaXM6CisgICAgICAgICAgICAjICAgIC1zIEFSR1MsIC0tbG9uZyBBUkdTCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBhY3Rpb24uZGVzdC51cHBlcigpCisgICAgICAgICAgICAgICAgYXJnc19zdHJpbmcgPSBzZWxmLl9mb3JtYXRfYXJncyhhY3Rpb24sIGRlZmF1bHQpCisgICAgICAgICAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcgaW4gYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoJyVzICVzJyAlIChvcHRpb25fc3RyaW5nLCBhcmdzX3N0cmluZykpCisKKyAgICAgICAgICAgIHJldHVybiAnLCAnLmpvaW4ocGFydHMpCisKKyAgICBkZWYgX21ldGF2YXJfZm9ybWF0dGVyKHNlbGYsIGFjdGlvbiwgZGVmYXVsdF9tZXRhdmFyKToKKyAgICAgICAgaWYgYWN0aW9uLm1ldGF2YXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXN1bHQgPSBhY3Rpb24ubWV0YXZhcgorICAgICAgICBlbGlmIGFjdGlvbi5jaG9pY2VzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2hvaWNlX3N0cnMgPSBbc3RyKGNob2ljZSkgZm9yIGNob2ljZSBpbiBhY3Rpb24uY2hvaWNlc10KKyAgICAgICAgICAgIHJlc3VsdCA9ICd7JXN9JyAlICcsJy5qb2luKGNob2ljZV9zdHJzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdF9tZXRhdmFyCisKKyAgICAgICAgZGVmIGZvcm1hdCh0dXBsZV9zaXplKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCB0dXBsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHJlc3VsdCwgKSAqIHR1cGxlX3NpemUKKyAgICAgICAgcmV0dXJuIGZvcm1hdAorCisgICAgZGVmIF9mb3JtYXRfYXJncyhzZWxmLCBhY3Rpb24sIGRlZmF1bHRfbWV0YXZhcik6CisgICAgICAgIGdldF9tZXRhdmFyID0gc2VsZi5fbWV0YXZhcl9mb3JtYXR0ZXIoYWN0aW9uLCBkZWZhdWx0X21ldGF2YXIpCisgICAgICAgIGlmIGFjdGlvbi5uYXJncyBpcyBOb25lOgorICAgICAgICAgICAgcmVzdWx0ID0gJyVzJyAlIGdldF9tZXRhdmFyKDEpCisgICAgICAgIGVsaWYgYWN0aW9uLm5hcmdzID09IE9QVElPTkFMOgorICAgICAgICAgICAgcmVzdWx0ID0gJ1slc10nICUgZ2V0X21ldGF2YXIoMSkKKyAgICAgICAgZWxpZiBhY3Rpb24ubmFyZ3MgPT0gWkVST19PUl9NT1JFOgorICAgICAgICAgICAgcmVzdWx0ID0gJ1slcyBbJXMgLi4uXV0nICUgZ2V0X21ldGF2YXIoMikKKyAgICAgICAgZWxpZiBhY3Rpb24ubmFyZ3MgPT0gT05FX09SX01PUkU6CisgICAgICAgICAgICByZXN1bHQgPSAnJXMgWyVzIC4uLl0nICUgZ2V0X21ldGF2YXIoMikKKyAgICAgICAgZWxpZiBhY3Rpb24ubmFyZ3MgPT0gUkVNQUlOREVSOgorICAgICAgICAgICAgcmVzdWx0ID0gJy4uLicKKyAgICAgICAgZWxpZiBhY3Rpb24ubmFyZ3MgPT0gUEFSU0VSOgorICAgICAgICAgICAgcmVzdWx0ID0gJyVzIC4uLicgJSBnZXRfbWV0YXZhcigxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9ybWF0cyA9IFsnJXMnIGZvciBfIGluIHJhbmdlKGFjdGlvbi5uYXJncyldCisgICAgICAgICAgICByZXN1bHQgPSAnICcuam9pbihmb3JtYXRzKSAlIGdldF9tZXRhdmFyKGFjdGlvbi5uYXJncykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9leHBhbmRfaGVscChzZWxmLCBhY3Rpb24pOgorICAgICAgICBwYXJhbXMgPSBkaWN0KHZhcnMoYWN0aW9uKSwgcHJvZz1zZWxmLl9wcm9nKQorICAgICAgICBmb3IgbmFtZSBpbiBsaXN0KHBhcmFtcyk6CisgICAgICAgICAgICBpZiBwYXJhbXNbbmFtZV0gaXMgU1VQUFJFU1M6CisgICAgICAgICAgICAgICAgZGVsIHBhcmFtc1tuYW1lXQorICAgICAgICBmb3IgbmFtZSBpbiBsaXN0KHBhcmFtcyk6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHBhcmFtc1tuYW1lXSwgJ19fbmFtZV9fJyk6CisgICAgICAgICAgICAgICAgcGFyYW1zW25hbWVdID0gcGFyYW1zW25hbWVdLl9fbmFtZV9fCisgICAgICAgIGlmIHBhcmFtcy5nZXQoJ2Nob2ljZXMnKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNob2ljZXNfc3RyID0gJywgJy5qb2luKFtzdHIoYykgZm9yIGMgaW4gcGFyYW1zWydjaG9pY2VzJ11dKQorICAgICAgICAgICAgcGFyYW1zWydjaG9pY2VzJ10gPSBjaG9pY2VzX3N0cgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2hlbHBfc3RyaW5nKGFjdGlvbikgJSBwYXJhbXMKKworICAgIGRlZiBfaXRlcl9pbmRlbnRlZF9zdWJhY3Rpb25zKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdldF9zdWJhY3Rpb25zID0gYWN0aW9uLl9nZXRfc3ViYWN0aW9ucworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9pbmRlbnQoKQorICAgICAgICAgICAgZm9yIHN1YmFjdGlvbiBpbiBnZXRfc3ViYWN0aW9ucygpOgorICAgICAgICAgICAgICAgIHlpZWxkIHN1YmFjdGlvbgorICAgICAgICAgICAgc2VsZi5fZGVkZW50KCkKKworICAgIGRlZiBfc3BsaXRfbGluZXMoc2VsZiwgdGV4dCwgd2lkdGgpOgorICAgICAgICB0ZXh0ID0gc2VsZi5fd2hpdGVzcGFjZV9tYXRjaGVyLnN1YignICcsIHRleHQpLnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIF90ZXh0d3JhcC53cmFwKHRleHQsIHdpZHRoKQorCisgICAgZGVmIF9maWxsX3RleHQoc2VsZiwgdGV4dCwgd2lkdGgsIGluZGVudCk6CisgICAgICAgIHRleHQgPSBzZWxmLl93aGl0ZXNwYWNlX21hdGNoZXIuc3ViKCcgJywgdGV4dCkuc3RyaXAoKQorICAgICAgICByZXR1cm4gX3RleHR3cmFwLmZpbGwodGV4dCwgd2lkdGgsIGluaXRpYWxfaW5kZW50PWluZGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD1pbmRlbnQpCisKKyAgICBkZWYgX2dldF9oZWxwX3N0cmluZyhzZWxmLCBhY3Rpb24pOgorICAgICAgICByZXR1cm4gYWN0aW9uLmhlbHAKKworCitjbGFzcyBSYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIoSGVscEZvcm1hdHRlcik6CisgICAgIiIiSGVscCBtZXNzYWdlIGZvcm1hdHRlciB3aGljaCByZXRhaW5zIGFueSBmb3JtYXR0aW5nIGluIGRlc2NyaXB0aW9ucy4KKworICAgIE9ubHkgdGhlIG5hbWUgb2YgdGhpcyBjbGFzcyBpcyBjb25zaWRlcmVkIGEgcHVibGljIEFQSS4gQWxsIHRoZSBtZXRob2RzCisgICAgcHJvdmlkZWQgYnkgdGhlIGNsYXNzIGFyZSBjb25zaWRlcmVkIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAiIiIKKworICAgIGRlZiBfZmlsbF90ZXh0KHNlbGYsIHRleHQsIHdpZHRoLCBpbmRlbnQpOgorICAgICAgICByZXR1cm4gJycuam9pbihbaW5kZW50ICsgbGluZSBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoVHJ1ZSldKQorCisKK2NsYXNzIFJhd1RleHRIZWxwRm9ybWF0dGVyKFJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcik6CisgICAgIiIiSGVscCBtZXNzYWdlIGZvcm1hdHRlciB3aGljaCByZXRhaW5zIGZvcm1hdHRpbmcgb2YgYWxsIGhlbHAgdGV4dC4KKworICAgIE9ubHkgdGhlIG5hbWUgb2YgdGhpcyBjbGFzcyBpcyBjb25zaWRlcmVkIGEgcHVibGljIEFQSS4gQWxsIHRoZSBtZXRob2RzCisgICAgcHJvdmlkZWQgYnkgdGhlIGNsYXNzIGFyZSBjb25zaWRlcmVkIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAiIiIKKworICAgIGRlZiBfc3BsaXRfbGluZXMoc2VsZiwgdGV4dCwgd2lkdGgpOgorICAgICAgICByZXR1cm4gdGV4dC5zcGxpdGxpbmVzKCkKKworCitjbGFzcyBBcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcihIZWxwRm9ybWF0dGVyKToKKyAgICAiIiJIZWxwIG1lc3NhZ2UgZm9ybWF0dGVyIHdoaWNoIGFkZHMgZGVmYXVsdCB2YWx1ZXMgdG8gYXJndW1lbnQgaGVscC4KKworICAgIE9ubHkgdGhlIG5hbWUgb2YgdGhpcyBjbGFzcyBpcyBjb25zaWRlcmVkIGEgcHVibGljIEFQSS4gQWxsIHRoZSBtZXRob2RzCisgICAgcHJvdmlkZWQgYnkgdGhlIGNsYXNzIGFyZSBjb25zaWRlcmVkIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAiIiIKKworICAgIGRlZiBfZ2V0X2hlbHBfc3RyaW5nKHNlbGYsIGFjdGlvbik6CisgICAgICAgIGhlbHAgPSBhY3Rpb24uaGVscAorICAgICAgICBpZiAnJShkZWZhdWx0KScgbm90IGluIGFjdGlvbi5oZWxwOgorICAgICAgICAgICAgaWYgYWN0aW9uLmRlZmF1bHQgaXMgbm90IFNVUFBSRVNTOgorICAgICAgICAgICAgICAgIGRlZmF1bHRpbmdfbmFyZ3MgPSBbT1BUSU9OQUwsIFpFUk9fT1JfTU9SRV0KKyAgICAgICAgICAgICAgICBpZiBhY3Rpb24ub3B0aW9uX3N0cmluZ3Mgb3IgYWN0aW9uLm5hcmdzIGluIGRlZmF1bHRpbmdfbmFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGhlbHAgKz0gJyAoZGVmYXVsdDogJShkZWZhdWx0KXMpJworICAgICAgICByZXR1cm4gaGVscAorCisKKyMgPT09PT09PT09PT09PT09PT09PT09CisjIE9wdGlvbnMgYW5kIEFyZ3VtZW50cworIyA9PT09PT09PT09PT09PT09PT09PT0KKworZGVmIF9nZXRfYWN0aW9uX25hbWUoYXJndW1lbnQpOgorICAgIGlmIGFyZ3VtZW50IGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZWxpZiBhcmd1bWVudC5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgcmV0dXJuICAnLycuam9pbihhcmd1bWVudC5vcHRpb25fc3RyaW5ncykKKyAgICBlbGlmIGFyZ3VtZW50Lm1ldGF2YXIgbm90IGluIChOb25lLCBTVVBQUkVTUyk6CisgICAgICAgIHJldHVybiBhcmd1bWVudC5tZXRhdmFyCisgICAgZWxpZiBhcmd1bWVudC5kZXN0IG5vdCBpbiAoTm9uZSwgU1VQUFJFU1MpOgorICAgICAgICByZXR1cm4gYXJndW1lbnQuZGVzdAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgQXJndW1lbnRFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkFuIGVycm9yIGZyb20gY3JlYXRpbmcgb3IgdXNpbmcgYW4gYXJndW1lbnQgKG9wdGlvbmFsIG9yIHBvc2l0aW9uYWwpLgorCisgICAgVGhlIHN0cmluZyB2YWx1ZSBvZiB0aGlzIGV4Y2VwdGlvbiBpcyB0aGUgbWVzc2FnZSwgYXVnbWVudGVkIHdpdGgKKyAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXJndW1lbnQgdGhhdCBjYXVzZWQgaXQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJndW1lbnQsIG1lc3NhZ2UpOgorICAgICAgICBzZWxmLmFyZ3VtZW50X25hbWUgPSBfZ2V0X2FjdGlvbl9uYW1lKGFyZ3VtZW50KQorICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5hcmd1bWVudF9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBmb3JtYXQgPSAnJShtZXNzYWdlKXMnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3JtYXQgPSAnYXJndW1lbnQgJShhcmd1bWVudF9uYW1lKXM6ICUobWVzc2FnZSlzJworICAgICAgICByZXR1cm4gZm9ybWF0ICUgZGljdChtZXNzYWdlPXNlbGYubWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRfbmFtZT1zZWxmLmFyZ3VtZW50X25hbWUpCisKKworY2xhc3MgQXJndW1lbnRUeXBlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJBbiBlcnJvciBmcm9tIHRyeWluZyB0byBjb252ZXJ0IGEgY29tbWFuZCBsaW5lIHN0cmluZyB0byBhIHR5cGUuIiIiCisgICAgcGFzcworCisKKyMgPT09PT09PT09PT09PT0KKyMgQWN0aW9uIGNsYXNzZXMKKyMgPT09PT09PT09PT09PT0KKworY2xhc3MgQWN0aW9uKF9BdHRyaWJ1dGVIb2xkZXIpOgorICAgICIiIkluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBjb252ZXJ0IGNvbW1hbmQgbGluZSBzdHJpbmdzIHRvIFB5dGhvbiBvYmplY3RzLgorCisgICAgQWN0aW9uIG9iamVjdHMgYXJlIHVzZWQgYnkgYW4gQXJndW1lbnRQYXJzZXIgdG8gcmVwcmVzZW50IHRoZSBpbmZvcm1hdGlvbgorICAgIG5lZWRlZCB0byBwYXJzZSBhIHNpbmdsZSBhcmd1bWVudCBmcm9tIG9uZSBvciBtb3JlIHN0cmluZ3MgZnJvbSB0aGUKKyAgICBjb21tYW5kIGxpbmUuIFRoZSBrZXl3b3JkIGFyZ3VtZW50cyB0byB0aGUgQWN0aW9uIGNvbnN0cnVjdG9yIGFyZSBhbHNvCisgICAgYWxsIGF0dHJpYnV0ZXMgb2YgQWN0aW9uIGluc3RhbmNlcy4KKworICAgIEtleXdvcmQgQXJndW1lbnRzOgorCisgICAgICAgIC0gb3B0aW9uX3N0cmluZ3MgLS0gQSBsaXN0IG9mIGNvbW1hbmQtbGluZSBvcHRpb24gc3RyaW5ncyB3aGljaAorICAgICAgICAgICAgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjdGlvbi4KKworICAgICAgICAtIGRlc3QgLS0gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBob2xkIHRoZSBjcmVhdGVkIG9iamVjdChzKQorCisgICAgICAgIC0gbmFyZ3MgLS0gVGhlIG51bWJlciBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIGJlCisgICAgICAgICAgICBjb25zdW1lZC4gQnkgZGVmYXVsdCwgb25lIGFyZ3VtZW50IHdpbGwgYmUgY29uc3VtZWQgYW5kIGEgc2luZ2xlCisgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHByb2R1Y2VkLiAgT3RoZXIgdmFsdWVzIGluY2x1ZGU6CisgICAgICAgICAgICAgICAgLSBOIChhbiBpbnRlZ2VyKSBjb25zdW1lcyBOIGFyZ3VtZW50cyAoYW5kIHByb2R1Y2VzIGEgbGlzdCkKKyAgICAgICAgICAgICAgICAtICc/JyBjb25zdW1lcyB6ZXJvIG9yIG9uZSBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAtICcqJyBjb25zdW1lcyB6ZXJvIG9yIG1vcmUgYXJndW1lbnRzIChhbmQgcHJvZHVjZXMgYSBsaXN0KQorICAgICAgICAgICAgICAgIC0gJysnIGNvbnN1bWVzIG9uZSBvciBtb3JlIGFyZ3VtZW50cyAoYW5kIHByb2R1Y2VzIGEgbGlzdCkKKyAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkZWZhdWx0IGFuZCBuYXJncz0xIGlzIHRoYXQKKyAgICAgICAgICAgIHdpdGggdGhlIGRlZmF1bHQsIGEgc2luZ2xlIHZhbHVlIHdpbGwgYmUgcHJvZHVjZWQsIHdoaWxlIHdpdGgKKyAgICAgICAgICAgIG5hcmdzPTEsIGEgbGlzdCBjb250YWluaW5nIGEgc2luZ2xlIHZhbHVlIHdpbGwgYmUgcHJvZHVjZWQuCisKKyAgICAgICAgLSBjb25zdCAtLSBUaGUgdmFsdWUgdG8gYmUgcHJvZHVjZWQgaWYgdGhlIG9wdGlvbiBpcyBzcGVjaWZpZWQgYW5kIHRoZQorICAgICAgICAgICAgb3B0aW9uIHVzZXMgYW4gYWN0aW9uIHRoYXQgdGFrZXMgbm8gdmFsdWVzLgorCisgICAgICAgIC0gZGVmYXVsdCAtLSBUaGUgdmFsdWUgdG8gYmUgcHJvZHVjZWQgaWYgdGhlIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLgorCisgICAgICAgIC0gdHlwZSAtLSBUaGUgdHlwZSB3aGljaCB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBzaG91bGQgYmUgY29udmVydGVkCisgICAgICAgICAgICB0bywgc2hvdWxkIGJlIG9uZSBvZiAnc3RyaW5nJywgJ2ludCcsICdmbG9hdCcsICdjb21wbGV4JyBvciBhCisgICAgICAgICAgICBjYWxsYWJsZSBvYmplY3QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudC4gSWYgTm9uZSwKKyAgICAgICAgICAgICdzdHJpbmcnIGlzIGFzc3VtZWQuCisKKyAgICAgICAgLSBjaG9pY2VzIC0tIEEgY29udGFpbmVyIG9mIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBhbGxvd2VkLiBJZiBub3QgTm9uZSwKKyAgICAgICAgICAgIGFmdGVyIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50IGhhcyBiZWVuIGNvbnZlcnRlZCB0byB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgIHR5cGUsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBpZiBpdCBpcyBub3QgYSBtZW1iZXIgb2YgdGhpcworICAgICAgICAgICAgY29sbGVjdGlvbi4KKworICAgICAgICAtIHJlcXVpcmVkIC0tIFRydWUgaWYgdGhlIGFjdGlvbiBtdXN0IGFsd2F5cyBiZSBzcGVjaWZpZWQgYXQgdGhlCisgICAgICAgICAgICBjb21tYW5kIGxpbmUuIFRoaXMgaXMgb25seSBtZWFuaW5nZnVsIGZvciBvcHRpb25hbCBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgIGFyZ3VtZW50cy4KKworICAgICAgICAtIGhlbHAgLS0gVGhlIGhlbHAgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGFyZ3VtZW50LgorCisgICAgICAgIC0gbWV0YXZhciAtLSBUaGUgbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgb3B0aW9uJ3MgYXJndW1lbnQgd2l0aCB0aGUKKyAgICAgICAgICAgIGhlbHAgc3RyaW5nLiBJZiBOb25lLCB0aGUgJ2Rlc3QnIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgbmFtZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgZGVzdCwKKyAgICAgICAgICAgICAgICAgbmFyZ3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgY29uc3Q9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICB0eXBlPU5vbmUsCisgICAgICAgICAgICAgICAgIGNob2ljZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbWV0YXZhcj1Ob25lKToKKyAgICAgICAgc2VsZi5vcHRpb25fc3RyaW5ncyA9IG9wdGlvbl9zdHJpbmdzCisgICAgICAgIHNlbGYuZGVzdCA9IGRlc3QKKyAgICAgICAgc2VsZi5uYXJncyA9IG5hcmdzCisgICAgICAgIHNlbGYuY29uc3QgPSBjb25zdAorICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgIHNlbGYudHlwZSA9IHR5cGUKKyAgICAgICAgc2VsZi5jaG9pY2VzID0gY2hvaWNlcworICAgICAgICBzZWxmLnJlcXVpcmVkID0gcmVxdWlyZWQKKyAgICAgICAgc2VsZi5oZWxwID0gaGVscAorICAgICAgICBzZWxmLm1ldGF2YXIgPSBtZXRhdmFyCisKKyAgICBkZWYgX2dldF9rd2FyZ3Moc2VsZik6CisgICAgICAgIG5hbWVzID0gWworICAgICAgICAgICAgJ29wdGlvbl9zdHJpbmdzJywKKyAgICAgICAgICAgICdkZXN0JywKKyAgICAgICAgICAgICduYXJncycsCisgICAgICAgICAgICAnY29uc3QnLAorICAgICAgICAgICAgJ2RlZmF1bHQnLAorICAgICAgICAgICAgJ3R5cGUnLAorICAgICAgICAgICAgJ2Nob2ljZXMnLAorICAgICAgICAgICAgJ2hlbHAnLAorICAgICAgICAgICAgJ21ldGF2YXInLAorICAgICAgICBdCisgICAgICAgIHJldHVybiBbKG5hbWUsIGdldGF0dHIoc2VsZiwgbmFtZSkpIGZvciBuYW1lIGluIG5hbWVzXQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoXygnLl9fY2FsbF9fKCkgbm90IGRlZmluZWQnKSkKKworCitjbGFzcyBfU3RvcmVBY3Rpb24oQWN0aW9uKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgZGVzdCwKKyAgICAgICAgICAgICAgICAgbmFyZ3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgY29uc3Q9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICB0eXBlPU5vbmUsCisgICAgICAgICAgICAgICAgIGNob2ljZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbWV0YXZhcj1Ob25lKToKKyAgICAgICAgaWYgbmFyZ3MgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25hcmdzIGZvciBzdG9yZSBhY3Rpb25zIG11c3QgYmUgPiAwOyBpZiB5b3UgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGF2ZSBub3RoaW5nIHRvIHN0b3JlLCBhY3Rpb25zIHN1Y2ggYXMgc3RvcmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ1ZSBvciBzdG9yZSBjb25zdCBtYXkgYmUgbW9yZSBhcHByb3ByaWF0ZScpCisgICAgICAgIGlmIGNvbnN0IGlzIG5vdCBOb25lIGFuZCBuYXJncyAhPSBPUFRJT05BTDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25hcmdzIG11c3QgYmUgJXIgdG8gc3VwcGx5IGNvbnN0JyAlIE9QVElPTkFMKQorICAgICAgICBzdXBlcihfU3RvcmVBY3Rpb24sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3M9b3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICBkZXN0PWRlc3QsCisgICAgICAgICAgICBuYXJncz1uYXJncywKKyAgICAgICAgICAgIGNvbnN0PWNvbnN0LAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgdHlwZT10eXBlLAorICAgICAgICAgICAgY2hvaWNlcz1jaG9pY2VzLAorICAgICAgICAgICAgcmVxdWlyZWQ9cmVxdWlyZWQsCisgICAgICAgICAgICBoZWxwPWhlbHAsCisgICAgICAgICAgICBtZXRhdmFyPW1ldGF2YXIpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgdmFsdWVzKQorCisKK2NsYXNzIF9TdG9yZUNvbnN0QWN0aW9uKEFjdGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIGRlc3QsCisgICAgICAgICAgICAgICAgIGNvbnN0LAorICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgICAgICBoZWxwPU5vbmUsCisgICAgICAgICAgICAgICAgIG1ldGF2YXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKF9TdG9yZUNvbnN0QWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgbmFyZ3M9MCwKKyAgICAgICAgICAgIGNvbnN0PWNvbnN0LAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgcmVxdWlyZWQ9cmVxdWlyZWQsCisgICAgICAgICAgICBoZWxwPWhlbHApCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgc2VsZi5jb25zdCkKKworCitjbGFzcyBfU3RvcmVUcnVlQWN0aW9uKF9TdG9yZUNvbnN0QWN0aW9uKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgZGVzdCwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSk6CisgICAgICAgIHN1cGVyKF9TdG9yZVRydWVBY3Rpb24sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3M9b3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICBkZXN0PWRlc3QsCisgICAgICAgICAgICBjb25zdD1UcnVlLAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgcmVxdWlyZWQ9cmVxdWlyZWQsCisgICAgICAgICAgICBoZWxwPWhlbHApCisKKworY2xhc3MgX1N0b3JlRmFsc2VBY3Rpb24oX1N0b3JlQ29uc3RBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICBkZXN0LAorICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgICAgICBoZWxwPU5vbmUpOgorICAgICAgICBzdXBlcihfU3RvcmVGYWxzZUFjdGlvbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgIGRlc3Q9ZGVzdCwKKyAgICAgICAgICAgIGNvbnN0PUZhbHNlLAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgcmVxdWlyZWQ9cmVxdWlyZWQsCisgICAgICAgICAgICBoZWxwPWhlbHApCisKKworY2xhc3MgX0FwcGVuZEFjdGlvbihBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICBkZXN0LAorICAgICAgICAgICAgICAgICBuYXJncz1Ob25lLAorICAgICAgICAgICAgICAgICBjb25zdD1Ob25lLAorICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgIHR5cGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgY2hvaWNlcz1Ob25lLAorICAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgaGVscD1Ob25lLAorICAgICAgICAgICAgICAgICBtZXRhdmFyPU5vbmUpOgorICAgICAgICBpZiBuYXJncyA9PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbmFyZ3MgZm9yIGFwcGVuZCBhY3Rpb25zIG11c3QgYmUgPiAwOyBpZiBhcmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5ncyBhcmUgbm90IHN1cHBseWluZyB0aGUgdmFsdWUgdG8gYXBwZW5kLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgYXBwZW5kIGNvbnN0IGFjdGlvbiBtYXkgYmUgbW9yZSBhcHByb3ByaWF0ZScpCisgICAgICAgIGlmIGNvbnN0IGlzIG5vdCBOb25lIGFuZCBuYXJncyAhPSBPUFRJT05BTDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25hcmdzIG11c3QgYmUgJXIgdG8gc3VwcGx5IGNvbnN0JyAlIE9QVElPTkFMKQorICAgICAgICBzdXBlcihfQXBwZW5kQWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgbmFyZ3M9bmFyZ3MsCisgICAgICAgICAgICBjb25zdD1jb25zdCwKKyAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdCwKKyAgICAgICAgICAgIHR5cGU9dHlwZSwKKyAgICAgICAgICAgIGNob2ljZXM9Y2hvaWNlcywKKyAgICAgICAgICAgIHJlcXVpcmVkPXJlcXVpcmVkLAorICAgICAgICAgICAgaGVscD1oZWxwLAorICAgICAgICAgICAgbWV0YXZhcj1tZXRhdmFyKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgIGl0ZW1zID0gX2NvcHkuY29weShfZW5zdXJlX3ZhbHVlKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCBbXSkpCisgICAgICAgIGl0ZW1zLmFwcGVuZCh2YWx1ZXMpCisgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIGl0ZW1zKQorCisKK2NsYXNzIF9BcHBlbmRDb25zdEFjdGlvbihBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICBkZXN0LAorICAgICAgICAgICAgICAgICBjb25zdCwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgaGVscD1Ob25lLAorICAgICAgICAgICAgICAgICBtZXRhdmFyPU5vbmUpOgorICAgICAgICBzdXBlcihfQXBwZW5kQ29uc3RBY3Rpb24sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3M9b3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICBkZXN0PWRlc3QsCisgICAgICAgICAgICBuYXJncz0wLAorICAgICAgICAgICAgY29uc3Q9Y29uc3QsCisgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHQsCisgICAgICAgICAgICByZXF1aXJlZD1yZXF1aXJlZCwKKyAgICAgICAgICAgIGhlbHA9aGVscCwKKyAgICAgICAgICAgIG1ldGF2YXI9bWV0YXZhcikKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICBpdGVtcyA9IF9jb3B5LmNvcHkoX2Vuc3VyZV92YWx1ZShuYW1lc3BhY2UsIHNlbGYuZGVzdCwgW10pKQorICAgICAgICBpdGVtcy5hcHBlbmQoc2VsZi5jb25zdCkKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgaXRlbXMpCisKKworY2xhc3MgX0NvdW50QWN0aW9uKEFjdGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIGRlc3QsCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSk6CisgICAgICAgIHN1cGVyKF9Db3VudEFjdGlvbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgIGRlc3Q9ZGVzdCwKKyAgICAgICAgICAgIG5hcmdzPTAsCisgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHQsCisgICAgICAgICAgICByZXF1aXJlZD1yZXF1aXJlZCwKKyAgICAgICAgICAgIGhlbHA9aGVscCkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICBuZXdfY291bnQgPSBfZW5zdXJlX3ZhbHVlKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCAwKSArIDEKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgbmV3X2NvdW50KQorCisKK2NsYXNzIF9IZWxwQWN0aW9uKEFjdGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIGRlc3Q9U1VQUFJFU1MsCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9U1VQUFJFU1MsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSk6CisgICAgICAgIHN1cGVyKF9IZWxwQWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgbmFyZ3M9MCwKKyAgICAgICAgICAgIGhlbHA9aGVscCkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHBhcnNlci5leGl0KCkKKworCitjbGFzcyBfVmVyc2lvbkFjdGlvbihBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICB2ZXJzaW9uPU5vbmUsCisgICAgICAgICAgICAgICAgIGRlc3Q9U1VQUFJFU1MsCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9U1VQUFJFU1MsCisgICAgICAgICAgICAgICAgIGhlbHA9InNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0Iik6CisgICAgICAgIHN1cGVyKF9WZXJzaW9uQWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgbmFyZ3M9MCwKKyAgICAgICAgICAgIGhlbHA9aGVscCkKKyAgICAgICAgc2VsZi52ZXJzaW9uID0gdmVyc2lvbgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgIHZlcnNpb24gPSBzZWxmLnZlcnNpb24KKyAgICAgICAgaWYgdmVyc2lvbiBpcyBOb25lOgorICAgICAgICAgICAgdmVyc2lvbiA9IHBhcnNlci52ZXJzaW9uCisgICAgICAgIGZvcm1hdHRlciA9IHBhcnNlci5fZ2V0X2Zvcm1hdHRlcigpCisgICAgICAgIGZvcm1hdHRlci5hZGRfdGV4dCh2ZXJzaW9uKQorICAgICAgICBwYXJzZXIuZXhpdChtZXNzYWdlPWZvcm1hdHRlci5mb3JtYXRfaGVscCgpKQorCisKK2NsYXNzIF9TdWJQYXJzZXJzQWN0aW9uKEFjdGlvbik6CisKKyAgICBjbGFzcyBfQ2hvaWNlc1BzZXVkb0FjdGlvbihBY3Rpb24pOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBoZWxwKToKKyAgICAgICAgICAgIHN1cCA9IHN1cGVyKF9TdWJQYXJzZXJzQWN0aW9uLl9DaG9pY2VzUHNldWRvQWN0aW9uLCBzZWxmKQorICAgICAgICAgICAgc3VwLl9faW5pdF9fKG9wdGlvbl9zdHJpbmdzPVtdLCBkZXN0PW5hbWUsIGhlbHA9aGVscCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgcHJvZywKKyAgICAgICAgICAgICAgICAgcGFyc2VyX2NsYXNzLAorICAgICAgICAgICAgICAgICBkZXN0PVNVUFBSRVNTLAorICAgICAgICAgICAgICAgICBoZWxwPU5vbmUsCisgICAgICAgICAgICAgICAgIG1ldGF2YXI9Tm9uZSk6CisKKyAgICAgICAgc2VsZi5fcHJvZ19wcmVmaXggPSBwcm9nCisgICAgICAgIHNlbGYuX3BhcnNlcl9jbGFzcyA9IHBhcnNlcl9jbGFzcworICAgICAgICBzZWxmLl9uYW1lX3BhcnNlcl9tYXAgPSB7fQorICAgICAgICBzZWxmLl9jaG9pY2VzX2FjdGlvbnMgPSBbXQorCisgICAgICAgIHN1cGVyKF9TdWJQYXJzZXJzQWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgbmFyZ3M9UEFSU0VSLAorICAgICAgICAgICAgY2hvaWNlcz1zZWxmLl9uYW1lX3BhcnNlcl9tYXAsCisgICAgICAgICAgICBoZWxwPWhlbHAsCisgICAgICAgICAgICBtZXRhdmFyPW1ldGF2YXIpCisKKyAgICBkZWYgYWRkX3BhcnNlcihzZWxmLCBuYW1lLCAqKmt3YXJncyk6CisgICAgICAgICMgc2V0IHByb2cgZnJvbSB0aGUgZXhpc3RpbmcgcHJlZml4CisgICAgICAgIGlmIGt3YXJncy5nZXQoJ3Byb2cnKSBpcyBOb25lOgorICAgICAgICAgICAga3dhcmdzWydwcm9nJ10gPSAnJXMgJXMnICUgKHNlbGYuX3Byb2dfcHJlZml4LCBuYW1lKQorCisgICAgICAgICMgY3JlYXRlIGEgcHNldWRvLWFjdGlvbiB0byBob2xkIHRoZSBjaG9pY2UgaGVscAorICAgICAgICBpZiAnaGVscCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgaGVscCA9IGt3YXJncy5wb3AoJ2hlbHAnKQorICAgICAgICAgICAgY2hvaWNlX2FjdGlvbiA9IHNlbGYuX0Nob2ljZXNQc2V1ZG9BY3Rpb24obmFtZSwgaGVscCkKKyAgICAgICAgICAgIHNlbGYuX2Nob2ljZXNfYWN0aW9ucy5hcHBlbmQoY2hvaWNlX2FjdGlvbikKKworICAgICAgICAjIGNyZWF0ZSB0aGUgcGFyc2VyIGFuZCBhZGQgaXQgdG8gdGhlIG1hcAorICAgICAgICBwYXJzZXIgPSBzZWxmLl9wYXJzZXJfY2xhc3MoKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX25hbWVfcGFyc2VyX21hcFtuYW1lXSA9IHBhcnNlcgorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBkZWYgX2dldF9zdWJhY3Rpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2hvaWNlc19hY3Rpb25zCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgcGFyc2VyX25hbWUgPSB2YWx1ZXNbMF0KKyAgICAgICAgYXJnX3N0cmluZ3MgPSB2YWx1ZXNbMTpdCisKKyAgICAgICAgIyBzZXQgdGhlIHBhcnNlciBuYW1lIGlmIHJlcXVlc3RlZAorICAgICAgICBpZiBzZWxmLmRlc3QgaXMgbm90IFNVUFBSRVNTOgorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgcGFyc2VyX25hbWUpCisKKyAgICAgICAgIyBzZWxlY3QgdGhlIHBhcnNlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9uYW1lX3BhcnNlcl9tYXBbcGFyc2VyX25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHR1cCA9IHBhcnNlcl9uYW1lLCAnLCAnLmpvaW4oc2VsZi5fbmFtZV9wYXJzZXJfbWFwKQorICAgICAgICAgICAgbXNnID0gXygndW5rbm93biBwYXJzZXIgJXIgKGNob2ljZXM6ICVzKScpICUgdHVwCisgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKHNlbGYsIG1zZykKKworICAgICAgICAjIHBhcnNlIGFsbCB0aGUgcmVtYWluaW5nIG9wdGlvbnMgaW50byB0aGUgbmFtZXNwYWNlCisgICAgICAgICMgc3RvcmUgYW55IHVucmVjb2duaXplZCBvcHRpb25zIG9uIHRoZSBvYmplY3QsIHNvIHRoYXQgdGhlIHRvcAorICAgICAgICAjIGxldmVsIHBhcnNlciBjYW4gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGVtCisgICAgICAgIG5hbWVzcGFjZSwgYXJnX3N0cmluZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmdfc3RyaW5ncywgbmFtZXNwYWNlKQorICAgICAgICBpZiBhcmdfc3RyaW5nczoKKyAgICAgICAgICAgIHZhcnMobmFtZXNwYWNlKS5zZXRkZWZhdWx0KF9VTlJFQ09HTklaRURfQVJHU19BVFRSLCBbXSkKKyAgICAgICAgICAgIGdldGF0dHIobmFtZXNwYWNlLCBfVU5SRUNPR05JWkVEX0FSR1NfQVRUUikuZXh0ZW5kKGFyZ19zdHJpbmdzKQorCisKKyMgPT09PT09PT09PT09PT0KKyMgVHlwZSBjbGFzc2VzCisjID09PT09PT09PT09PT09CisKK2NsYXNzIEZpbGVUeXBlKG9iamVjdCk6CisgICAgIiIiRmFjdG9yeSBmb3IgY3JlYXRpbmcgZmlsZSBvYmplY3QgdHlwZXMKKworICAgIEluc3RhbmNlcyBvZiBGaWxlVHlwZSBhcmUgdHlwaWNhbGx5IHBhc3NlZCBhcyB0eXBlPSBhcmd1bWVudHMgdG8gdGhlCisgICAgQXJndW1lbnRQYXJzZXIgYWRkX2FyZ3VtZW50KCkgbWV0aG9kLgorCisgICAgS2V5d29yZCBBcmd1bWVudHM6CisgICAgICAgIC0gbW9kZSAtLSBBIHN0cmluZyBpbmRpY2F0aW5nIGhvdyB0aGUgZmlsZSBpcyB0byBiZSBvcGVuZWQuIEFjY2VwdHMgdGhlCisgICAgICAgICAgICBzYW1lIHZhbHVlcyBhcyB0aGUgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCisgICAgICAgIC0gYnVmc2l6ZSAtLSBUaGUgZmlsZSdzIGRlc2lyZWQgYnVmZmVyIHNpemUuIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWVzIGFzCisgICAgICAgICAgICB0aGUgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZT0ncicsIGJ1ZnNpemU9LTEpOgorICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQorICAgICAgICBzZWxmLl9idWZzaXplID0gYnVmc2l6ZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHN0cmluZyk6CisgICAgICAgICMgdGhlIHNwZWNpYWwgYXJndW1lbnQgIi0iIG1lYW5zIHN5cy5zdGR7aW4sb3V0fQorICAgICAgICBpZiBzdHJpbmcgPT0gJy0nOgorICAgICAgICAgICAgaWYgJ3InIGluIHNlbGYuX21vZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9zeXMuc3RkaW4KKyAgICAgICAgICAgIGVsaWYgJ3cnIGluIHNlbGYuX21vZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9zeXMuc3Rkb3V0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9IF8oJ2FyZ3VtZW50ICItIiB3aXRoIG1vZGUgJXInKSAlIHNlbGYuX21vZGUKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKworICAgICAgICAjIGFsbCBvdGhlciBhcmd1bWVudHMgYXJlIHVzZWQgYXMgZmlsZSBuYW1lcworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gb3BlbihzdHJpbmcsIHNlbGYuX21vZGUsIHNlbGYuX2J1ZnNpemUpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBtZXNzYWdlID0gXygiY2FuJ3Qgb3BlbiAnJXMnOiAlcyIpCisgICAgICAgICAgICByYWlzZSBBcmd1bWVudFR5cGVFcnJvcihtZXNzYWdlICUgKHN0cmluZywgZSkpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGFyZ3MgPSBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplCisgICAgICAgIGFyZ3Nfc3RyID0gJywgJy5qb2luKHJlcHIoYXJnKSBmb3IgYXJnIGluIGFyZ3MgaWYgYXJnICE9IC0xKQorICAgICAgICByZXR1cm4gJyVzKCVzKScgJSAodHlwZShzZWxmKS5fX25hbWVfXywgYXJnc19zdHIpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIE9wdGlvbmFsIGFuZCBQb3NpdGlvbmFsIFBhcnNpbmcKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIE5hbWVzcGFjZShfQXR0cmlidXRlSG9sZGVyKToKKyAgICAiIiJTaW1wbGUgb2JqZWN0IGZvciBzdG9yaW5nIGF0dHJpYnV0ZXMuCisKKyAgICBJbXBsZW1lbnRzIGVxdWFsaXR5IGJ5IGF0dHJpYnV0ZSBuYW1lcyBhbmQgdmFsdWVzLCBhbmQgcHJvdmlkZXMgYSBzaW1wbGUKKyAgICBzdHJpbmcgcmVwcmVzZW50YXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBmb3IgbmFtZSBpbiBrd2FyZ3M6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG5hbWUsIGt3YXJnc1tuYW1lXSkKKworICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiB2YXJzKHNlbGYpID09IHZhcnMob3RoZXIpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9fZGljdF9fCisKKworY2xhc3MgX0FjdGlvbnNDb250YWluZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgcHJlZml4X2NoYXJzLAorICAgICAgICAgICAgICAgICBhcmd1bWVudF9kZWZhdWx0LAorICAgICAgICAgICAgICAgICBjb25mbGljdF9oYW5kbGVyKToKKyAgICAgICAgc3VwZXIoX0FjdGlvbnNDb250YWluZXIsIHNlbGYpLl9faW5pdF9fKCkKKworICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi5hcmd1bWVudF9kZWZhdWx0ID0gYXJndW1lbnRfZGVmYXVsdAorICAgICAgICBzZWxmLnByZWZpeF9jaGFycyA9IHByZWZpeF9jaGFycworICAgICAgICBzZWxmLmNvbmZsaWN0X2hhbmRsZXIgPSBjb25mbGljdF9oYW5kbGVyCisKKyAgICAgICAgIyBzZXQgdXAgcmVnaXN0cmllcworICAgICAgICBzZWxmLl9yZWdpc3RyaWVzID0ge30KKworICAgICAgICAjIHJlZ2lzdGVyIGFjdGlvbnMKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgTm9uZSwgX1N0b3JlQWN0aW9uKQorICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCAnc3RvcmUnLCBfU3RvcmVBY3Rpb24pCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsICdzdG9yZV9jb25zdCcsIF9TdG9yZUNvbnN0QWN0aW9uKQorICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCAnc3RvcmVfdHJ1ZScsIF9TdG9yZVRydWVBY3Rpb24pCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsICdzdG9yZV9mYWxzZScsIF9TdG9yZUZhbHNlQWN0aW9uKQorICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCAnYXBwZW5kJywgX0FwcGVuZEFjdGlvbikKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgJ2FwcGVuZF9jb25zdCcsIF9BcHBlbmRDb25zdEFjdGlvbikKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgJ2NvdW50JywgX0NvdW50QWN0aW9uKQorICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCAnaGVscCcsIF9IZWxwQWN0aW9uKQorICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCAndmVyc2lvbicsIF9WZXJzaW9uQWN0aW9uKQorICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCAncGFyc2VycycsIF9TdWJQYXJzZXJzQWN0aW9uKQorCisgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBjb25mbGljdCBoYW5kbGVyIGlzIGludmFsaWQKKyAgICAgICAgc2VsZi5fZ2V0X2hhbmRsZXIoKQorCisgICAgICAgICMgYWN0aW9uIHN0b3JhZ2UKKyAgICAgICAgc2VsZi5fYWN0aW9ucyA9IFtdCisgICAgICAgIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9ucyA9IHt9CisKKyAgICAgICAgIyBncm91cHMKKyAgICAgICAgc2VsZi5fYWN0aW9uX2dyb3VwcyA9IFtdCisgICAgICAgIHNlbGYuX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cHMgPSBbXQorCisgICAgICAgICMgZGVmYXVsdHMgc3RvcmFnZQorICAgICAgICBzZWxmLl9kZWZhdWx0cyA9IHt9CisKKyAgICAgICAgIyBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gIm9wdGlvbiIgbG9va3MgbGlrZSBhIG5lZ2F0aXZlIG51bWJlcgorICAgICAgICBzZWxmLl9uZWdhdGl2ZV9udW1iZXJfbWF0Y2hlciA9IF9yZS5jb21waWxlKHInXi1cZCskfF4tXGQqXC5cZCskJykKKworICAgICAgICAjIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgb3B0aW9uYWxzIHRoYXQgbG9vayBsaWtlIG5lZ2F0aXZlCisgICAgICAgICMgbnVtYmVycyAtLSB1c2VzIGEgbGlzdCBzbyBpdCBjYW4gYmUgc2hhcmVkIGFuZCBlZGl0ZWQKKyAgICAgICAgc2VsZi5faGFzX25lZ2F0aXZlX251bWJlcl9vcHRpb25hbHMgPSBbXQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PQorICAgICMgUmVnaXN0cmF0aW9uIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHJlZ2lzdHJ5X25hbWUsIHZhbHVlLCBvYmplY3QpOgorICAgICAgICByZWdpc3RyeSA9IHNlbGYuX3JlZ2lzdHJpZXMuc2V0ZGVmYXVsdChyZWdpc3RyeV9uYW1lLCB7fSkKKyAgICAgICAgcmVnaXN0cnlbdmFsdWVdID0gb2JqZWN0CisKKyAgICBkZWYgX3JlZ2lzdHJ5X2dldChzZWxmLCByZWdpc3RyeV9uYW1lLCB2YWx1ZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdHJpZXNbcmVnaXN0cnlfbmFtZV0uZ2V0KHZhbHVlLCBkZWZhdWx0KQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBOYW1lc3BhY2UgZGVmYXVsdCBhY2Nlc3NvciBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIHNldF9kZWZhdWx0cyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX2RlZmF1bHRzLnVwZGF0ZShrd2FyZ3MpCisKKyAgICAgICAgIyBpZiB0aGVzZSBkZWZhdWx0cyBtYXRjaCBhbnkgZXhpc3RpbmcgYXJndW1lbnRzLCByZXBsYWNlCisgICAgICAgICMgdGhlIHByZXZpb3VzIGRlZmF1bHQgb24gdGhlIG9iamVjdCB3aXRoIHRoZSBuZXcgb25lCisgICAgICAgIGZvciBhY3Rpb24gaW4gc2VsZi5fYWN0aW9uczoKKyAgICAgICAgICAgIGlmIGFjdGlvbi5kZXN0IGluIGt3YXJnczoKKyAgICAgICAgICAgICAgICBhY3Rpb24uZGVmYXVsdCA9IGt3YXJnc1thY3Rpb24uZGVzdF0KKworICAgIGRlZiBnZXRfZGVmYXVsdChzZWxmLCBkZXN0KToKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBzZWxmLl9hY3Rpb25zOgorICAgICAgICAgICAgaWYgYWN0aW9uLmRlc3QgPT0gZGVzdCBhbmQgYWN0aW9uLmRlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kZWZhdWx0CisgICAgICAgIHJldHVybiBzZWxmLl9kZWZhdWx0cy5nZXQoZGVzdCwgTm9uZSkKKworCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PQorICAgICMgQWRkaW5nIGFyZ3VtZW50IGFjdGlvbnMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIGFkZF9hcmd1bWVudChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgYWRkX2FyZ3VtZW50KGRlc3QsIC4uLiwgbmFtZT12YWx1ZSwgLi4uKQorICAgICAgICBhZGRfYXJndW1lbnQob3B0aW9uX3N0cmluZywgb3B0aW9uX3N0cmluZywgLi4uLCBuYW1lPXZhbHVlLCAuLi4pCisgICAgICAgICIiIgorCisgICAgICAgICMgaWYgbm8gcG9zaXRpb25hbCBhcmdzIGFyZSBzdXBwbGllZCBvciBvbmx5IG9uZSBpcyBzdXBwbGllZCBhbmQKKyAgICAgICAgIyBpdCBkb2Vzbid0IGxvb2sgbGlrZSBhbiBvcHRpb24gc3RyaW5nLCBwYXJzZSBhIHBvc2l0aW9uYWwKKyAgICAgICAgIyBhcmd1bWVudAorICAgICAgICBjaGFycyA9IHNlbGYucHJlZml4X2NoYXJzCisgICAgICAgIGlmIG5vdCBhcmdzIG9yIGxlbihhcmdzKSA9PSAxIGFuZCBhcmdzWzBdWzBdIG5vdCBpbiBjaGFyczoKKyAgICAgICAgICAgIGlmIGFyZ3MgYW5kICdkZXN0JyBpbiBrd2FyZ3M6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZGVzdCBzdXBwbGllZCB0d2ljZSBmb3IgcG9zaXRpb25hbCBhcmd1bWVudCcpCisgICAgICAgICAgICBrd2FyZ3MgPSBzZWxmLl9nZXRfcG9zaXRpb25hbF9rd2FyZ3MoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgICMgb3RoZXJ3aXNlLCB3ZSdyZSBhZGRpbmcgYW4gb3B0aW9uYWwgYXJndW1lbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGt3YXJncyA9IHNlbGYuX2dldF9vcHRpb25hbF9rd2FyZ3MoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgICMgaWYgbm8gZGVmYXVsdCB3YXMgc3VwcGxpZWQsIHVzZSB0aGUgcGFyc2VyLWxldmVsIGRlZmF1bHQKKyAgICAgICAgaWYgJ2RlZmF1bHQnIG5vdCBpbiBrd2FyZ3M6CisgICAgICAgICAgICBkZXN0ID0ga3dhcmdzWydkZXN0J10KKyAgICAgICAgICAgIGlmIGRlc3QgaW4gc2VsZi5fZGVmYXVsdHM6CisgICAgICAgICAgICAgICAga3dhcmdzWydkZWZhdWx0J10gPSBzZWxmLl9kZWZhdWx0c1tkZXN0XQorICAgICAgICAgICAgZWxpZiBzZWxmLmFyZ3VtZW50X2RlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAga3dhcmdzWydkZWZhdWx0J10gPSBzZWxmLmFyZ3VtZW50X2RlZmF1bHQKKworICAgICAgICAjIGNyZWF0ZSB0aGUgYWN0aW9uIG9iamVjdCwgYW5kIGFkZCBpdCB0byB0aGUgcGFyc2VyCisgICAgICAgIGFjdGlvbl9jbGFzcyA9IHNlbGYuX3BvcF9hY3Rpb25fY2xhc3Moa3dhcmdzKQorICAgICAgICBpZiBub3QgX2NhbGxhYmxlKGFjdGlvbl9jbGFzcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmtub3duIGFjdGlvbiAiJXMiJyAlIGFjdGlvbl9jbGFzcykKKyAgICAgICAgYWN0aW9uID0gYWN0aW9uX2NsYXNzKCoqa3dhcmdzKQorCisgICAgICAgICMgcmFpc2UgYW4gZXJyb3IgaWYgdGhlIGFjdGlvbiB0eXBlIGlzIG5vdCBjYWxsYWJsZQorICAgICAgICB0eXBlX2Z1bmMgPSBzZWxmLl9yZWdpc3RyeV9nZXQoJ3R5cGUnLCBhY3Rpb24udHlwZSwgYWN0aW9uLnR5cGUpCisgICAgICAgIGlmIG5vdCBfY2FsbGFibGUodHlwZV9mdW5jKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyVyIGlzIG5vdCBjYWxsYWJsZScgJSB0eXBlX2Z1bmMpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FkZF9hY3Rpb24oYWN0aW9uKQorCisgICAgZGVmIGFkZF9hcmd1bWVudF9ncm91cChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBncm91cCA9IF9Bcmd1bWVudEdyb3VwKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fYWN0aW9uX2dyb3Vwcy5hcHBlbmQoZ3JvdXApCisgICAgICAgIHJldHVybiBncm91cAorCisgICAgZGVmIGFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBncm91cCA9IF9NdXR1YWxseUV4Y2x1c2l2ZUdyb3VwKHNlbGYsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzLmFwcGVuZChncm91cCkKKyAgICAgICAgcmV0dXJuIGdyb3VwCisKKyAgICBkZWYgX2FkZF9hY3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgIyByZXNvbHZlIGFueSBjb25mbGljdHMKKyAgICAgICAgc2VsZi5fY2hlY2tfY29uZmxpY3QoYWN0aW9uKQorCisgICAgICAgICMgYWRkIHRvIGFjdGlvbnMgbGlzdAorICAgICAgICBzZWxmLl9hY3Rpb25zLmFwcGVuZChhY3Rpb24pCisgICAgICAgIGFjdGlvbi5jb250YWluZXIgPSBzZWxmCisKKyAgICAgICAgIyBpbmRleCB0aGUgYWN0aW9uIGJ5IGFueSBvcHRpb24gc3RyaW5ncyBpdCBoYXMKKyAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcgaW4gYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zW29wdGlvbl9zdHJpbmddID0gYWN0aW9uCisKKyAgICAgICAgIyBzZXQgdGhlIGZsYWcgaWYgYW55IG9wdGlvbiBzdHJpbmdzIGxvb2sgbGlrZSBuZWdhdGl2ZSBudW1iZXJzCisgICAgICAgIGZvciBvcHRpb25fc3RyaW5nIGluIGFjdGlvbi5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgICAgIGlmIHNlbGYuX25lZ2F0aXZlX251bWJlcl9tYXRjaGVyLm1hdGNoKG9wdGlvbl9zdHJpbmcpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9oYXNfbmVnYXRpdmVfbnVtYmVyX29wdGlvbmFsczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFzX25lZ2F0aXZlX251bWJlcl9vcHRpb25hbHMuYXBwZW5kKFRydWUpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIGNyZWF0ZWQgYWN0aW9uCisgICAgICAgIHJldHVybiBhY3Rpb24KKworICAgIGRlZiBfcmVtb3ZlX2FjdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICBzZWxmLl9hY3Rpb25zLnJlbW92ZShhY3Rpb24pCisKKyAgICBkZWYgX2FkZF9jb250YWluZXJfYWN0aW9ucyhzZWxmLCBjb250YWluZXIpOgorICAgICAgICAjIGNvbGxlY3QgZ3JvdXBzIGJ5IHRpdGxlcworICAgICAgICB0aXRsZV9ncm91cF9tYXAgPSB7fQorICAgICAgICBmb3IgZ3JvdXAgaW4gc2VsZi5fYWN0aW9uX2dyb3VwczoKKyAgICAgICAgICAgIGlmIGdyb3VwLnRpdGxlIGluIHRpdGxlX2dyb3VwX21hcDoKKyAgICAgICAgICAgICAgICBtc2cgPSBfKCdjYW5ub3QgbWVyZ2UgYWN0aW9ucyAtIHR3byBncm91cHMgYXJlIG5hbWVkICVyJykKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZyAlIChncm91cC50aXRsZSkpCisgICAgICAgICAgICB0aXRsZV9ncm91cF9tYXBbZ3JvdXAudGl0bGVdID0gZ3JvdXAKKworICAgICAgICAjIG1hcCBlYWNoIGFjdGlvbiB0byBpdHMgZ3JvdXAKKyAgICAgICAgZ3JvdXBfbWFwID0ge30KKyAgICAgICAgZm9yIGdyb3VwIGluIGNvbnRhaW5lci5fYWN0aW9uX2dyb3VwczoKKworICAgICAgICAgICAgIyBpZiBhIGdyb3VwIHdpdGggdGhlIHRpdGxlIGV4aXN0cywgdXNlIHRoYXQsIG90aGVyd2lzZQorICAgICAgICAgICAgIyBjcmVhdGUgYSBuZXcgZ3JvdXAgbWF0Y2hpbmcgdGhlIGNvbnRhaW5lcidzIGdyb3VwCisgICAgICAgICAgICBpZiBncm91cC50aXRsZSBub3QgaW4gdGl0bGVfZ3JvdXBfbWFwOgorICAgICAgICAgICAgICAgIHRpdGxlX2dyb3VwX21hcFtncm91cC50aXRsZV0gPSBzZWxmLmFkZF9hcmd1bWVudF9ncm91cCgKKyAgICAgICAgICAgICAgICAgICAgdGl0bGU9Z3JvdXAudGl0bGUsCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPWdyb3VwLmRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICBjb25mbGljdF9oYW5kbGVyPWdyb3VwLmNvbmZsaWN0X2hhbmRsZXIpCisKKyAgICAgICAgICAgICMgbWFwIHRoZSBhY3Rpb25zIHRvIHRoZWlyIG5ldyBncm91cAorICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBncm91cC5fZ3JvdXBfYWN0aW9uczoKKyAgICAgICAgICAgICAgICBncm91cF9tYXBbYWN0aW9uXSA9IHRpdGxlX2dyb3VwX21hcFtncm91cC50aXRsZV0KKworICAgICAgICAjIGFkZCBjb250YWluZXIncyBtdXR1YWxseSBleGNsdXNpdmUgZ3JvdXBzCisgICAgICAgICMgTk9URTogaWYgYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCBldmVyIGdhaW5zIHRpdGxlPSBhbmQKKyAgICAgICAgIyBkZXNjcmlwdGlvbj0gdGhlbiB0aGlzIGNvZGUgd2lsbCBuZWVkIHRvIGJlIGV4cGFuZGVkIGFzIGFib3ZlCisgICAgICAgIGZvciBncm91cCBpbiBjb250YWluZXIuX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cHM6CisgICAgICAgICAgICBtdXRleF9ncm91cCA9IHNlbGYuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgKKyAgICAgICAgICAgICAgICByZXF1aXJlZD1ncm91cC5yZXF1aXJlZCkKKworICAgICAgICAgICAgIyBtYXAgdGhlIGFjdGlvbnMgdG8gdGhlaXIgbmV3IG11dGV4IGdyb3VwCisgICAgICAgICAgICBmb3IgYWN0aW9uIGluIGdyb3VwLl9ncm91cF9hY3Rpb25zOgorICAgICAgICAgICAgICAgIGdyb3VwX21hcFthY3Rpb25dID0gbXV0ZXhfZ3JvdXAKKworICAgICAgICAjIGFkZCBhbGwgYWN0aW9ucyB0byB0aGlzIGNvbnRhaW5lciBvciB0aGVpciBncm91cAorICAgICAgICBmb3IgYWN0aW9uIGluIGNvbnRhaW5lci5fYWN0aW9uczoKKyAgICAgICAgICAgIGdyb3VwX21hcC5nZXQoYWN0aW9uLCBzZWxmKS5fYWRkX2FjdGlvbihhY3Rpb24pCisKKyAgICBkZWYgX2dldF9wb3NpdGlvbmFsX2t3YXJncyhzZWxmLCBkZXN0LCAqKmt3YXJncyk6CisgICAgICAgICMgbWFrZSBzdXJlIHJlcXVpcmVkIGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgICAgaWYgJ3JlcXVpcmVkJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICBtc2cgPSBfKCIncmVxdWlyZWQnIGlzIGFuIGludmFsaWQgYXJndW1lbnQgZm9yIHBvc2l0aW9uYWxzIikKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKKyAgICAgICAgIyBtYXJrIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFzIHJlcXVpcmVkIGlmIGF0IGxlYXN0IG9uZSBpcworICAgICAgICAjIGFsd2F5cyByZXF1aXJlZAorICAgICAgICBpZiBrd2FyZ3MuZ2V0KCduYXJncycpIG5vdCBpbiBbT1BUSU9OQUwsIFpFUk9fT1JfTU9SRV06CisgICAgICAgICAgICBrd2FyZ3NbJ3JlcXVpcmVkJ10gPSBUcnVlCisgICAgICAgIGlmIGt3YXJncy5nZXQoJ25hcmdzJykgPT0gWkVST19PUl9NT1JFIGFuZCAnZGVmYXVsdCcgbm90IGluIGt3YXJnczoKKyAgICAgICAgICAgIGt3YXJnc1sncmVxdWlyZWQnXSA9IFRydWUKKworICAgICAgICAjIHJldHVybiB0aGUga2V5d29yZCBhcmd1bWVudHMgd2l0aCBubyBvcHRpb24gc3RyaW5ncworICAgICAgICByZXR1cm4gZGljdChrd2FyZ3MsIGRlc3Q9ZGVzdCwgb3B0aW9uX3N0cmluZ3M9W10pCisKKyAgICBkZWYgX2dldF9vcHRpb25hbF9rd2FyZ3Moc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIyBkZXRlcm1pbmUgc2hvcnQgYW5kIGxvbmcgb3B0aW9uIHN0cmluZ3MKKyAgICAgICAgb3B0aW9uX3N0cmluZ3MgPSBbXQorICAgICAgICBsb25nX29wdGlvbl9zdHJpbmdzID0gW10KKyAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcgaW4gYXJnczoKKyAgICAgICAgICAgICMgZXJyb3Igb24gc3RyaW5ncyB0aGF0IGRvbid0IHN0YXJ0IHdpdGggYW4gYXBwcm9wcmlhdGUgcHJlZml4CisgICAgICAgICAgICBpZiBub3Qgb3B0aW9uX3N0cmluZ1swXSBpbiBzZWxmLnByZWZpeF9jaGFyczoKKyAgICAgICAgICAgICAgICBtc2cgPSBfKCdpbnZhbGlkIG9wdGlvbiBzdHJpbmcgJXI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IHN0YXJ0IHdpdGggYSBjaGFyYWN0ZXIgJXInKQorICAgICAgICAgICAgICAgIHR1cCA9IG9wdGlvbl9zdHJpbmcsIHNlbGYucHJlZml4X2NoYXJzCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cgJSB0dXApCisKKyAgICAgICAgICAgICMgc3RyaW5ncyBzdGFydGluZyB3aXRoIHR3byBwcmVmaXggY2hhcmFjdGVycyBhcmUgbG9uZyBvcHRpb25zCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncy5hcHBlbmQob3B0aW9uX3N0cmluZykKKyAgICAgICAgICAgIGlmIG9wdGlvbl9zdHJpbmdbMF0gaW4gc2VsZi5wcmVmaXhfY2hhcnM6CisgICAgICAgICAgICAgICAgaWYgbGVuKG9wdGlvbl9zdHJpbmcpID4gMToKKyAgICAgICAgICAgICAgICAgICAgaWYgb3B0aW9uX3N0cmluZ1sxXSBpbiBzZWxmLnByZWZpeF9jaGFyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9uX3N0cmluZ3MuYXBwZW5kKG9wdGlvbl9zdHJpbmcpCisKKyAgICAgICAgIyBpbmZlciBkZXN0aW5hdGlvbiwgJy0tZm9vLWJhcicgLT4gJ2Zvb19iYXInIGFuZCAnLXgnIC0+ICd4JworICAgICAgICBkZXN0ID0ga3dhcmdzLnBvcCgnZGVzdCcsIE5vbmUpCisgICAgICAgIGlmIGRlc3QgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGxvbmdfb3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICAgICAgZGVzdF9vcHRpb25fc3RyaW5nID0gbG9uZ19vcHRpb25fc3RyaW5nc1swXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZXN0X29wdGlvbl9zdHJpbmcgPSBvcHRpb25fc3RyaW5nc1swXQorICAgICAgICAgICAgZGVzdCA9IGRlc3Rfb3B0aW9uX3N0cmluZy5sc3RyaXAoc2VsZi5wcmVmaXhfY2hhcnMpCisgICAgICAgICAgICBpZiBub3QgZGVzdDoKKyAgICAgICAgICAgICAgICBtc2cgPSBfKCdkZXN0PSBpcyByZXF1aXJlZCBmb3Igb3B0aW9ucyBsaWtlICVyJykKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZyAlIG9wdGlvbl9zdHJpbmcpCisgICAgICAgICAgICBkZXN0ID0gZGVzdC5yZXBsYWNlKCctJywgJ18nKQorCisgICAgICAgICMgcmV0dXJuIHRoZSB1cGRhdGVkIGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIHJldHVybiBkaWN0KGt3YXJncywgZGVzdD1kZXN0LCBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncykKKworICAgIGRlZiBfcG9wX2FjdGlvbl9jbGFzcyhzZWxmLCBrd2FyZ3MsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIGFjdGlvbiA9IGt3YXJncy5wb3AoJ2FjdGlvbicsIGRlZmF1bHQpCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RyeV9nZXQoJ2FjdGlvbicsIGFjdGlvbiwgYWN0aW9uKQorCisgICAgZGVmIF9nZXRfaGFuZGxlcihzZWxmKToKKyAgICAgICAgIyBkZXRlcm1pbmUgZnVuY3Rpb24gZnJvbSBjb25mbGljdCBoYW5kbGVyIHN0cmluZworICAgICAgICBoYW5kbGVyX2Z1bmNfbmFtZSA9ICdfaGFuZGxlX2NvbmZsaWN0XyVzJyAlIHNlbGYuY29uZmxpY3RfaGFuZGxlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBoYW5kbGVyX2Z1bmNfbmFtZSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgbXNnID0gXygnaW52YWxpZCBjb25mbGljdF9yZXNvbHV0aW9uIHZhbHVlOiAlcicpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZyAlIHNlbGYuY29uZmxpY3RfaGFuZGxlcikKKworICAgIGRlZiBfY2hlY2tfY29uZmxpY3Qoc2VsZiwgYWN0aW9uKToKKworICAgICAgICAjIGZpbmQgYWxsIG9wdGlvbnMgdGhhdCBjb25mbGljdCB3aXRoIHRoaXMgb3B0aW9uCisgICAgICAgIGNvbmZsX29wdGlvbmFscyA9IFtdCisgICAgICAgIGZvciBvcHRpb25fc3RyaW5nIGluIGFjdGlvbi5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgICAgIGlmIG9wdGlvbl9zdHJpbmcgaW4gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zOgorICAgICAgICAgICAgICAgIGNvbmZsX29wdGlvbmFsID0gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zW29wdGlvbl9zdHJpbmddCisgICAgICAgICAgICAgICAgY29uZmxfb3B0aW9uYWxzLmFwcGVuZCgob3B0aW9uX3N0cmluZywgY29uZmxfb3B0aW9uYWwpKQorCisgICAgICAgICMgcmVzb2x2ZSBhbnkgY29uZmxpY3RzCisgICAgICAgIGlmIGNvbmZsX29wdGlvbmFsczoKKyAgICAgICAgICAgIGNvbmZsaWN0X2hhbmRsZXIgPSBzZWxmLl9nZXRfaGFuZGxlcigpCisgICAgICAgICAgICBjb25mbGljdF9oYW5kbGVyKGFjdGlvbiwgY29uZmxfb3B0aW9uYWxzKQorCisgICAgZGVmIF9oYW5kbGVfY29uZmxpY3RfZXJyb3Ioc2VsZiwgYWN0aW9uLCBjb25mbGljdGluZ19hY3Rpb25zKToKKyAgICAgICAgbWVzc2FnZSA9IF8oJ2NvbmZsaWN0aW5nIG9wdGlvbiBzdHJpbmcocyk6ICVzJykKKyAgICAgICAgY29uZmxpY3Rfc3RyaW5nID0gJywgJy5qb2luKFtvcHRpb25fc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcsIGFjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGNvbmZsaWN0aW5nX2FjdGlvbnNdKQorICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKGFjdGlvbiwgbWVzc2FnZSAlIGNvbmZsaWN0X3N0cmluZykKKworICAgIGRlZiBfaGFuZGxlX2NvbmZsaWN0X3Jlc29sdmUoc2VsZiwgYWN0aW9uLCBjb25mbGljdGluZ19hY3Rpb25zKToKKworICAgICAgICAjIHJlbW92ZSBhbGwgY29uZmxpY3Rpbmcgb3B0aW9ucworICAgICAgICBmb3Igb3B0aW9uX3N0cmluZywgYWN0aW9uIGluIGNvbmZsaWN0aW5nX2FjdGlvbnM6CisKKyAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBjb25mbGljdGluZyBvcHRpb24KKyAgICAgICAgICAgIGFjdGlvbi5vcHRpb25fc3RyaW5ncy5yZW1vdmUob3B0aW9uX3N0cmluZykKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9ucy5wb3Aob3B0aW9uX3N0cmluZywgTm9uZSkKKworICAgICAgICAgICAgIyBpZiB0aGUgb3B0aW9uIG5vdyBoYXMgbm8gb3B0aW9uIHN0cmluZywgcmVtb3ZlIGl0IGZyb20gdGhlCisgICAgICAgICAgICAjIGNvbnRhaW5lciBob2xkaW5nIGl0CisgICAgICAgICAgICBpZiBub3QgYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgICAgIGFjdGlvbi5jb250YWluZXIuX3JlbW92ZV9hY3Rpb24oYWN0aW9uKQorCisKK2NsYXNzIF9Bcmd1bWVudEdyb3VwKF9BY3Rpb25zQ29udGFpbmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250YWluZXIsIHRpdGxlPU5vbmUsIGRlc2NyaXB0aW9uPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIyBhZGQgYW55IG1pc3Npbmcga2V5d29yZCBhcmd1bWVudHMgYnkgY2hlY2tpbmcgdGhlIGNvbnRhaW5lcgorICAgICAgICB1cGRhdGUgPSBrd2FyZ3Muc2V0ZGVmYXVsdAorICAgICAgICB1cGRhdGUoJ2NvbmZsaWN0X2hhbmRsZXInLCBjb250YWluZXIuY29uZmxpY3RfaGFuZGxlcikKKyAgICAgICAgdXBkYXRlKCdwcmVmaXhfY2hhcnMnLCBjb250YWluZXIucHJlZml4X2NoYXJzKQorICAgICAgICB1cGRhdGUoJ2FyZ3VtZW50X2RlZmF1bHQnLCBjb250YWluZXIuYXJndW1lbnRfZGVmYXVsdCkKKyAgICAgICAgc3VwZXJfaW5pdCA9IHN1cGVyKF9Bcmd1bWVudEdyb3VwLCBzZWxmKS5fX2luaXRfXworICAgICAgICBzdXBlcl9pbml0KGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uLCAqKmt3YXJncykKKworICAgICAgICAjIGdyb3VwIGF0dHJpYnV0ZXMKKyAgICAgICAgc2VsZi50aXRsZSA9IHRpdGxlCisgICAgICAgIHNlbGYuX2dyb3VwX2FjdGlvbnMgPSBbXQorCisgICAgICAgICMgc2hhcmUgbW9zdCBhdHRyaWJ1dGVzIHdpdGggdGhlIGNvbnRhaW5lcgorICAgICAgICBzZWxmLl9yZWdpc3RyaWVzID0gY29udGFpbmVyLl9yZWdpc3RyaWVzCisgICAgICAgIHNlbGYuX2FjdGlvbnMgPSBjb250YWluZXIuX2FjdGlvbnMKKyAgICAgICAgc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zID0gY29udGFpbmVyLl9vcHRpb25fc3RyaW5nX2FjdGlvbnMKKyAgICAgICAgc2VsZi5fZGVmYXVsdHMgPSBjb250YWluZXIuX2RlZmF1bHRzCisgICAgICAgIHNlbGYuX2hhc19uZWdhdGl2ZV9udW1iZXJfb3B0aW9uYWxzID0gXAorICAgICAgICAgICAgY29udGFpbmVyLl9oYXNfbmVnYXRpdmVfbnVtYmVyX29wdGlvbmFscworICAgICAgICBzZWxmLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzID0gY29udGFpbmVyLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzCisKKyAgICBkZWYgX2FkZF9hY3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgYWN0aW9uID0gc3VwZXIoX0FyZ3VtZW50R3JvdXAsIHNlbGYpLl9hZGRfYWN0aW9uKGFjdGlvbikKKyAgICAgICAgc2VsZi5fZ3JvdXBfYWN0aW9ucy5hcHBlbmQoYWN0aW9uKQorICAgICAgICByZXR1cm4gYWN0aW9uCisKKyAgICBkZWYgX3JlbW92ZV9hY3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc3VwZXIoX0FyZ3VtZW50R3JvdXAsIHNlbGYpLl9yZW1vdmVfYWN0aW9uKGFjdGlvbikKKyAgICAgICAgc2VsZi5fZ3JvdXBfYWN0aW9ucy5yZW1vdmUoYWN0aW9uKQorCisKK2NsYXNzIF9NdXR1YWxseUV4Y2x1c2l2ZUdyb3VwKF9Bcmd1bWVudEdyb3VwKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250YWluZXIsIHJlcXVpcmVkPUZhbHNlKToKKyAgICAgICAgc3VwZXIoX011dHVhbGx5RXhjbHVzaXZlR3JvdXAsIHNlbGYpLl9faW5pdF9fKGNvbnRhaW5lcikKKyAgICAgICAgc2VsZi5yZXF1aXJlZCA9IHJlcXVpcmVkCisgICAgICAgIHNlbGYuX2NvbnRhaW5lciA9IGNvbnRhaW5lcgorCisgICAgZGVmIF9hZGRfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgIGlmIGFjdGlvbi5yZXF1aXJlZDoKKyAgICAgICAgICAgIG1zZyA9IF8oJ211dHVhbGx5IGV4Y2x1c2l2ZSBhcmd1bWVudHMgbXVzdCBiZSBvcHRpb25hbCcpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICAgICAgYWN0aW9uID0gc2VsZi5fY29udGFpbmVyLl9hZGRfYWN0aW9uKGFjdGlvbikKKyAgICAgICAgc2VsZi5fZ3JvdXBfYWN0aW9ucy5hcHBlbmQoYWN0aW9uKQorICAgICAgICByZXR1cm4gYWN0aW9uCisKKyAgICBkZWYgX3JlbW92ZV9hY3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi5fY29udGFpbmVyLl9yZW1vdmVfYWN0aW9uKGFjdGlvbikKKyAgICAgICAgc2VsZi5fZ3JvdXBfYWN0aW9ucy5yZW1vdmUoYWN0aW9uKQorCisKK2NsYXNzIEFyZ3VtZW50UGFyc2VyKF9BdHRyaWJ1dGVIb2xkZXIsIF9BY3Rpb25zQ29udGFpbmVyKToKKyAgICAiIiJPYmplY3QgZm9yIHBhcnNpbmcgY29tbWFuZCBsaW5lIHN0cmluZ3MgaW50byBQeXRob24gb2JqZWN0cy4KKworICAgIEtleXdvcmQgQXJndW1lbnRzOgorICAgICAgICAtIHByb2cgLS0gVGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gKGRlZmF1bHQ6IHN5cy5hcmd2WzBdKQorICAgICAgICAtIHVzYWdlIC0tIEEgdXNhZ2UgbWVzc2FnZSAoZGVmYXVsdDogYXV0by1nZW5lcmF0ZWQgZnJvbSBhcmd1bWVudHMpCisgICAgICAgIC0gZGVzY3JpcHRpb24gLS0gQSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBwcm9ncmFtIGRvZXMKKyAgICAgICAgLSBlcGlsb2cgLS0gVGV4dCBmb2xsb3dpbmcgdGhlIGFyZ3VtZW50IGRlc2NyaXB0aW9ucworICAgICAgICAtIHBhcmVudHMgLS0gUGFyc2VycyB3aG9zZSBhcmd1bWVudHMgc2hvdWxkIGJlIGNvcGllZCBpbnRvIHRoaXMgb25lCisgICAgICAgIC0gZm9ybWF0dGVyX2NsYXNzIC0tIEhlbHBGb3JtYXR0ZXIgY2xhc3MgZm9yIHByaW50aW5nIGhlbHAgbWVzc2FnZXMKKyAgICAgICAgLSBwcmVmaXhfY2hhcnMgLS0gQ2hhcmFjdGVycyB0aGF0IHByZWZpeCBvcHRpb25hbCBhcmd1bWVudHMKKyAgICAgICAgLSBmcm9tZmlsZV9wcmVmaXhfY2hhcnMgLS0gQ2hhcmFjdGVycyB0aGF0IHByZWZpeCBmaWxlcyBjb250YWluaW5nCisgICAgICAgICAgICBhZGRpdGlvbmFsIGFyZ3VtZW50cworICAgICAgICAtIGFyZ3VtZW50X2RlZmF1bHQgLS0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGFsbCBhcmd1bWVudHMKKyAgICAgICAgLSBjb25mbGljdF9oYW5kbGVyIC0tIFN0cmluZyBpbmRpY2F0aW5nIGhvdyB0byBoYW5kbGUgY29uZmxpY3RzCisgICAgICAgIC0gYWRkX2hlbHAgLS0gQWRkIGEgLWgvLWhlbHAgb3B0aW9uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgcHJvZz1Ob25lLAorICAgICAgICAgICAgICAgICB1c2FnZT1Ob25lLAorICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1Ob25lLAorICAgICAgICAgICAgICAgICBlcGlsb2c9Tm9uZSwKKyAgICAgICAgICAgICAgICAgdmVyc2lvbj1Ob25lLAorICAgICAgICAgICAgICAgICBwYXJlbnRzPVtdLAorICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9SGVscEZvcm1hdHRlciwKKyAgICAgICAgICAgICAgICAgcHJlZml4X2NoYXJzPSctJywKKyAgICAgICAgICAgICAgICAgZnJvbWZpbGVfcHJlZml4X2NoYXJzPU5vbmUsCisgICAgICAgICAgICAgICAgIGFyZ3VtZW50X2RlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgY29uZmxpY3RfaGFuZGxlcj0nZXJyb3InLAorICAgICAgICAgICAgICAgICBhZGRfaGVscD1UcnVlKToKKworICAgICAgICBpZiB2ZXJzaW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICIiIlRoZSAidmVyc2lvbiIgYXJndW1lbnQgdG8gQXJndW1lbnRQYXJzZXIgaXMgZGVwcmVjYXRlZC4gIiIiCisgICAgICAgICAgICAgICAgIiIiUGxlYXNlIHVzZSAiIiIKKyAgICAgICAgICAgICAgICAiIiIiYWRkX2FyZ3VtZW50KC4uLiwgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0iTiIsIC4uLikiICIiIgorICAgICAgICAgICAgICAgICIiImluc3RlYWQiIiIsIERlcHJlY2F0aW9uV2FybmluZykKKworICAgICAgICBzdXBlcmluaXQgPSBzdXBlcihBcmd1bWVudFBhcnNlciwgc2VsZikuX19pbml0X18KKyAgICAgICAgc3VwZXJpbml0KGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgcHJlZml4X2NoYXJzPXByZWZpeF9jaGFycywKKyAgICAgICAgICAgICAgICAgIGFyZ3VtZW50X2RlZmF1bHQ9YXJndW1lbnRfZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgIGNvbmZsaWN0X2hhbmRsZXI9Y29uZmxpY3RfaGFuZGxlcikKKworICAgICAgICAjIGRlZmF1bHQgc2V0dGluZyBmb3IgcHJvZworICAgICAgICBpZiBwcm9nIGlzIE5vbmU6CisgICAgICAgICAgICBwcm9nID0gX29zLnBhdGguYmFzZW5hbWUoX3N5cy5hcmd2WzBdKQorCisgICAgICAgIHNlbGYucHJvZyA9IHByb2cKKyAgICAgICAgc2VsZi51c2FnZSA9IHVzYWdlCisgICAgICAgIHNlbGYuZXBpbG9nID0gZXBpbG9nCisgICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KKyAgICAgICAgc2VsZi5mb3JtYXR0ZXJfY2xhc3MgPSBmb3JtYXR0ZXJfY2xhc3MKKyAgICAgICAgc2VsZi5mcm9tZmlsZV9wcmVmaXhfY2hhcnMgPSBmcm9tZmlsZV9wcmVmaXhfY2hhcnMKKyAgICAgICAgc2VsZi5hZGRfaGVscCA9IGFkZF9oZWxwCisKKyAgICAgICAgYWRkX2dyb3VwID0gc2VsZi5hZGRfYXJndW1lbnRfZ3JvdXAKKyAgICAgICAgc2VsZi5fcG9zaXRpb25hbHMgPSBhZGRfZ3JvdXAoXygncG9zaXRpb25hbCBhcmd1bWVudHMnKSkKKyAgICAgICAgc2VsZi5fb3B0aW9uYWxzID0gYWRkX2dyb3VwKF8oJ29wdGlvbmFsIGFyZ3VtZW50cycpKQorICAgICAgICBzZWxmLl9zdWJwYXJzZXJzID0gTm9uZQorCisgICAgICAgICMgcmVnaXN0ZXIgdHlwZXMKKyAgICAgICAgZGVmIGlkZW50aXR5KHN0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ3R5cGUnLCBOb25lLCBpZGVudGl0eSkKKworICAgICAgICAjIGFkZCBoZWxwIGFuZCB2ZXJzaW9uIGFyZ3VtZW50cyBpZiBuZWNlc3NhcnkKKyAgICAgICAgIyAodXNpbmcgZXhwbGljaXQgZGVmYXVsdCB0byBvdmVycmlkZSBnbG9iYWwgYXJndW1lbnRfZGVmYXVsdCkKKyAgICAgICAgZGVmYXVsdF9wcmVmaXggPSAnLScgaWYgJy0nIGluIHByZWZpeF9jaGFycyBlbHNlIHByZWZpeF9jaGFyc1swXQorICAgICAgICBpZiBzZWxmLmFkZF9oZWxwOgorICAgICAgICAgICAgc2VsZi5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAgICAgZGVmYXVsdF9wcmVmaXgrJ2gnLCBkZWZhdWx0X3ByZWZpeCoyKydoZWxwJywKKyAgICAgICAgICAgICAgICBhY3Rpb249J2hlbHAnLCBkZWZhdWx0PVNVUFBSRVNTLAorICAgICAgICAgICAgICAgIGhlbHA9Xygnc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCcpKQorICAgICAgICBpZiBzZWxmLnZlcnNpb246CisgICAgICAgICAgICBzZWxmLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICAgICBkZWZhdWx0X3ByZWZpeCsndicsIGRlZmF1bHRfcHJlZml4KjIrJ3ZlcnNpb24nLAorICAgICAgICAgICAgICAgIGFjdGlvbj0ndmVyc2lvbicsIGRlZmF1bHQ9U1VQUFJFU1MsCisgICAgICAgICAgICAgICAgdmVyc2lvbj1zZWxmLnZlcnNpb24sCisgICAgICAgICAgICAgICAgaGVscD1fKCJzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdCIpKQorCisgICAgICAgICMgYWRkIHBhcmVudCBhcmd1bWVudHMgYW5kIGRlZmF1bHRzCisgICAgICAgIGZvciBwYXJlbnQgaW4gcGFyZW50czoKKyAgICAgICAgICAgIHNlbGYuX2FkZF9jb250YWluZXJfYWN0aW9ucyhwYXJlbnQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVmYXVsdHMgPSBwYXJlbnQuX2RlZmF1bHRzCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9kZWZhdWx0cy51cGRhdGUoZGVmYXVsdHMpCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBQcmV0dHkgX19yZXByX18gbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgX2dldF9rd2FyZ3Moc2VsZik6CisgICAgICAgIG5hbWVzID0gWworICAgICAgICAgICAgJ3Byb2cnLAorICAgICAgICAgICAgJ3VzYWdlJywKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbicsCisgICAgICAgICAgICAndmVyc2lvbicsCisgICAgICAgICAgICAnZm9ybWF0dGVyX2NsYXNzJywKKyAgICAgICAgICAgICdjb25mbGljdF9oYW5kbGVyJywKKyAgICAgICAgICAgICdhZGRfaGVscCcsCisgICAgICAgIF0KKyAgICAgICAgcmV0dXJuIFsobmFtZSwgZ2V0YXR0cihzZWxmLCBuYW1lKSkgZm9yIG5hbWUgaW4gbmFtZXNdCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIE9wdGlvbmFsL1Bvc2l0aW9uYWwgYWRkaW5nIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgYWRkX3N1YnBhcnNlcnMoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBpZiBzZWxmLl9zdWJwYXJzZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5lcnJvcihfKCdjYW5ub3QgaGF2ZSBtdWx0aXBsZSBzdWJwYXJzZXIgYXJndW1lbnRzJykpCisKKyAgICAgICAgIyBhZGQgdGhlIHBhcnNlciBjbGFzcyB0byB0aGUgYXJndW1lbnRzIGlmIGl0J3Mgbm90IHByZXNlbnQKKyAgICAgICAga3dhcmdzLnNldGRlZmF1bHQoJ3BhcnNlcl9jbGFzcycsIHR5cGUoc2VsZikpCisKKyAgICAgICAgaWYgJ3RpdGxlJyBpbiBrd2FyZ3Mgb3IgJ2Rlc2NyaXB0aW9uJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICB0aXRsZSA9IF8oa3dhcmdzLnBvcCgndGl0bGUnLCAnc3ViY29tbWFuZHMnKSkKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gXyhrd2FyZ3MucG9wKCdkZXNjcmlwdGlvbicsIE5vbmUpKQorICAgICAgICAgICAgc2VsZi5fc3VicGFyc2VycyA9IHNlbGYuYWRkX2FyZ3VtZW50X2dyb3VwKHRpdGxlLCBkZXNjcmlwdGlvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3N1YnBhcnNlcnMgPSBzZWxmLl9wb3NpdGlvbmFscworCisgICAgICAgICMgcHJvZyBkZWZhdWx0cyB0byB0aGUgdXNhZ2UgbWVzc2FnZSBvZiB0aGlzIHBhcnNlciwgc2tpcHBpbmcKKyAgICAgICAgIyBvcHRpb25hbCBhcmd1bWVudHMgYW5kIHdpdGggbm8gInVzYWdlOiIgcHJlZml4CisgICAgICAgIGlmIGt3YXJncy5nZXQoJ3Byb2cnKSBpcyBOb25lOgorICAgICAgICAgICAgZm9ybWF0dGVyID0gc2VsZi5fZ2V0X2Zvcm1hdHRlcigpCisgICAgICAgICAgICBwb3NpdGlvbmFscyA9IHNlbGYuX2dldF9wb3NpdGlvbmFsX2FjdGlvbnMoKQorICAgICAgICAgICAgZ3JvdXBzID0gc2VsZi5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwcworICAgICAgICAgICAgZm9ybWF0dGVyLmFkZF91c2FnZShzZWxmLnVzYWdlLCBwb3NpdGlvbmFscywgZ3JvdXBzLCAnJykKKyAgICAgICAgICAgIGt3YXJnc1sncHJvZyddID0gZm9ybWF0dGVyLmZvcm1hdF9oZWxwKCkuc3RyaXAoKQorCisgICAgICAgICMgY3JlYXRlIHRoZSBwYXJzZXJzIGFjdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSBwb3NpdGlvbmFscyBsaXN0CisgICAgICAgIHBhcnNlcnNfY2xhc3MgPSBzZWxmLl9wb3BfYWN0aW9uX2NsYXNzKGt3YXJncywgJ3BhcnNlcnMnKQorICAgICAgICBhY3Rpb24gPSBwYXJzZXJzX2NsYXNzKG9wdGlvbl9zdHJpbmdzPVtdLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fc3VicGFyc2Vycy5fYWRkX2FjdGlvbihhY3Rpb24pCisKKyAgICAgICAgIyByZXR1cm4gdGhlIGNyZWF0ZWQgcGFyc2VycyBhY3Rpb24KKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCisgICAgZGVmIF9hZGRfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgIGlmIGFjdGlvbi5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbmFscy5fYWRkX2FjdGlvbihhY3Rpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wb3NpdGlvbmFscy5fYWRkX2FjdGlvbihhY3Rpb24pCisgICAgICAgIHJldHVybiBhY3Rpb24KKworICAgIGRlZiBfZ2V0X29wdGlvbmFsX2FjdGlvbnMoc2VsZik6CisgICAgICAgIHJldHVybiBbYWN0aW9uCisgICAgICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBzZWxmLl9hY3Rpb25zCisgICAgICAgICAgICAgICAgaWYgYWN0aW9uLm9wdGlvbl9zdHJpbmdzXQorCisgICAgZGVmIF9nZXRfcG9zaXRpb25hbF9hY3Rpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gW2FjdGlvbgorICAgICAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gc2VsZi5fYWN0aW9ucworICAgICAgICAgICAgICAgIGlmIG5vdCBhY3Rpb24ub3B0aW9uX3N0cmluZ3NdCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIENvbW1hbmQgbGluZSBhcmd1bWVudCBwYXJzaW5nIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBhcmdzPU5vbmUsIG5hbWVzcGFjZT1Ob25lKToKKyAgICAgICAgYXJncywgYXJndiA9IHNlbGYucGFyc2Vfa25vd25fYXJncyhhcmdzLCBuYW1lc3BhY2UpCisgICAgICAgIGlmIGFyZ3Y6CisgICAgICAgICAgICBtc2cgPSBfKCd1bnJlY29nbml6ZWQgYXJndW1lbnRzOiAlcycpCisgICAgICAgICAgICBzZWxmLmVycm9yKG1zZyAlICcgJy5qb2luKGFyZ3YpKQorICAgICAgICByZXR1cm4gYXJncworCisgICAgZGVmIHBhcnNlX2tub3duX2FyZ3Moc2VsZiwgYXJncz1Ob25lLCBuYW1lc3BhY2U9Tm9uZSk6CisgICAgICAgICMgYXJncyBkZWZhdWx0IHRvIHRoZSBzeXN0ZW0gYXJncworICAgICAgICBpZiBhcmdzIGlzIE5vbmU6CisgICAgICAgICAgICBhcmdzID0gX3N5cy5hcmd2WzE6XQorCisgICAgICAgICMgZGVmYXVsdCBOYW1lc3BhY2UgYnVpbHQgZnJvbSBwYXJzZXIgZGVmYXVsdHMKKyAgICAgICAgaWYgbmFtZXNwYWNlIGlzIE5vbmU6CisgICAgICAgICAgICBuYW1lc3BhY2UgPSBOYW1lc3BhY2UoKQorCisgICAgICAgICMgYWRkIGFueSBhY3Rpb24gZGVmYXVsdHMgdGhhdCBhcmVuJ3QgcHJlc2VudAorICAgICAgICBmb3IgYWN0aW9uIGluIHNlbGYuX2FjdGlvbnM6CisgICAgICAgICAgICBpZiBhY3Rpb24uZGVzdCBpcyBub3QgU1VQUFJFU1M6CisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobmFtZXNwYWNlLCBhY3Rpb24uZGVzdCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGFjdGlvbi5kZWZhdWx0IGlzIG5vdCBTVVBQUkVTUzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBhY3Rpb24uZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhY3Rpb24uZGVmYXVsdCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IHNlbGYuX2dldF92YWx1ZShhY3Rpb24sIGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgYWN0aW9uLmRlc3QsIGRlZmF1bHQpCisKKyAgICAgICAgIyBhZGQgYW55IHBhcnNlciBkZWZhdWx0cyB0aGF0IGFyZW4ndCBwcmVzZW50CisgICAgICAgIGZvciBkZXN0IGluIHNlbGYuX2RlZmF1bHRzOgorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobmFtZXNwYWNlLCBkZXN0KToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgZGVzdCwgc2VsZi5fZGVmYXVsdHNbZGVzdF0pCisKKyAgICAgICAgIyBwYXJzZSB0aGUgYXJndW1lbnRzIGFuZCBleGl0IGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWVzcGFjZSwgYXJncyA9IHNlbGYuX3BhcnNlX2tub3duX2FyZ3MoYXJncywgbmFtZXNwYWNlKQorICAgICAgICAgICAgaWYgaGFzYXR0cihuYW1lc3BhY2UsIF9VTlJFQ09HTklaRURfQVJHU19BVFRSKToKKyAgICAgICAgICAgICAgICBhcmdzLmV4dGVuZChnZXRhdHRyKG5hbWVzcGFjZSwgX1VOUkVDT0dOSVpFRF9BUkdTX0FUVFIpKQorICAgICAgICAgICAgICAgIGRlbGF0dHIobmFtZXNwYWNlLCBfVU5SRUNPR05JWkVEX0FSR1NfQVRUUikKKyAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2UsIGFyZ3MKKyAgICAgICAgZXhjZXB0IEFyZ3VtZW50RXJyb3I6CisgICAgICAgICAgICBlcnIgPSBfc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIHNlbGYuZXJyb3Ioc3RyKGVycikpCisKKyAgICBkZWYgX3BhcnNlX2tub3duX2FyZ3Moc2VsZiwgYXJnX3N0cmluZ3MsIG5hbWVzcGFjZSk6CisgICAgICAgICMgcmVwbGFjZSBhcmcgc3RyaW5ncyB0aGF0IGFyZSBmaWxlIHJlZmVyZW5jZXMKKyAgICAgICAgaWYgc2VsZi5mcm9tZmlsZV9wcmVmaXhfY2hhcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IHNlbGYuX3JlYWRfYXJnc19mcm9tX2ZpbGVzKGFyZ19zdHJpbmdzKQorCisgICAgICAgICMgbWFwIGFsbCBtdXR1YWxseSBleGNsdXNpdmUgYXJndW1lbnRzIHRvIHRoZSBvdGhlciBhcmd1bWVudHMKKyAgICAgICAgIyB0aGV5IGNhbid0IG9jY3VyIHdpdGgKKyAgICAgICAgYWN0aW9uX2NvbmZsaWN0cyA9IHt9CisgICAgICAgIGZvciBtdXRleF9ncm91cCBpbiBzZWxmLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzOgorICAgICAgICAgICAgZ3JvdXBfYWN0aW9ucyA9IG11dGV4X2dyb3VwLl9ncm91cF9hY3Rpb25zCisgICAgICAgICAgICBmb3IgaSwgbXV0ZXhfYWN0aW9uIGluIGVudW1lcmF0ZShtdXRleF9ncm91cC5fZ3JvdXBfYWN0aW9ucyk6CisgICAgICAgICAgICAgICAgY29uZmxpY3RzID0gYWN0aW9uX2NvbmZsaWN0cy5zZXRkZWZhdWx0KG11dGV4X2FjdGlvbiwgW10pCisgICAgICAgICAgICAgICAgY29uZmxpY3RzLmV4dGVuZChncm91cF9hY3Rpb25zWzppXSkKKyAgICAgICAgICAgICAgICBjb25mbGljdHMuZXh0ZW5kKGdyb3VwX2FjdGlvbnNbaSArIDE6XSkKKworICAgICAgICAjIGZpbmQgYWxsIG9wdGlvbiBpbmRpY2VzLCBhbmQgZGV0ZXJtaW5lIHRoZSBhcmdfc3RyaW5nX3BhdHRlcm4KKyAgICAgICAgIyB3aGljaCBoYXMgYW4gJ08nIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBhdCBhbiBpbmRleCwKKyAgICAgICAgIyBhbiAnQScgaWYgdGhlcmUgaXMgYW4gYXJndW1lbnQsIG9yIGEgJy0nIGlmIHRoZXJlIGlzIGEgJy0tJworICAgICAgICBvcHRpb25fc3RyaW5nX2luZGljZXMgPSB7fQorICAgICAgICBhcmdfc3RyaW5nX3BhdHRlcm5fcGFydHMgPSBbXQorICAgICAgICBhcmdfc3RyaW5nc19pdGVyID0gaXRlcihhcmdfc3RyaW5ncykKKyAgICAgICAgZm9yIGksIGFyZ19zdHJpbmcgaW4gZW51bWVyYXRlKGFyZ19zdHJpbmdzX2l0ZXIpOgorCisgICAgICAgICAgICAjIGFsbCBhcmdzIGFmdGVyIC0tIGFyZSBub24tb3B0aW9ucworICAgICAgICAgICAgaWYgYXJnX3N0cmluZyA9PSAnLS0nOgorICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdfcGF0dGVybl9wYXJ0cy5hcHBlbmQoJy0nKQorICAgICAgICAgICAgICAgIGZvciBhcmdfc3RyaW5nIGluIGFyZ19zdHJpbmdzX2l0ZXI6CisgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdfcGF0dGVybl9wYXJ0cy5hcHBlbmQoJ0EnKQorCisgICAgICAgICAgICAjIG90aGVyd2lzZSwgYWRkIHRoZSBhcmcgdG8gdGhlIGFyZyBzdHJpbmdzCisgICAgICAgICAgICAjIGFuZCBub3RlIHRoZSBpbmRleCBpZiBpdCB3YXMgYW4gb3B0aW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9wdGlvbl90dXBsZSA9IHNlbGYuX3BhcnNlX29wdGlvbmFsKGFyZ19zdHJpbmcpCisgICAgICAgICAgICAgICAgaWYgb3B0aW9uX3R1cGxlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAnQScKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5nX2luZGljZXNbaV0gPSBvcHRpb25fdHVwbGUKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9ICdPJworICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdfcGF0dGVybl9wYXJ0cy5hcHBlbmQocGF0dGVybikKKworICAgICAgICAjIGpvaW4gdGhlIHBpZWNlcyB0b2dldGhlciB0byBmb3JtIHRoZSBwYXR0ZXJuCisgICAgICAgIGFyZ19zdHJpbmdzX3BhdHRlcm4gPSAnJy5qb2luKGFyZ19zdHJpbmdfcGF0dGVybl9wYXJ0cykKKworICAgICAgICAjIGNvbnZlcnRzIGFyZyBzdHJpbmdzIHRvIHRoZSBhcHByb3ByaWF0ZSBhbmQgdGhlbiB0YWtlcyB0aGUgYWN0aW9uCisgICAgICAgIHNlZW5fYWN0aW9ucyA9IHNldCgpCisgICAgICAgIHNlZW5fbm9uX2RlZmF1bHRfYWN0aW9ucyA9IHNldCgpCisKKyAgICAgICAgZGVmIHRha2VfYWN0aW9uKGFjdGlvbiwgYXJndW1lbnRfc3RyaW5ncywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgICAgIHNlZW5fYWN0aW9ucy5hZGQoYWN0aW9uKQorICAgICAgICAgICAgYXJndW1lbnRfdmFsdWVzID0gc2VsZi5fZ2V0X3ZhbHVlcyhhY3Rpb24sIGFyZ3VtZW50X3N0cmluZ3MpCisKKyAgICAgICAgICAgICMgZXJyb3IgaWYgdGhpcyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCB3aXRoIG90aGVyIHByZXZpb3VzbHkKKyAgICAgICAgICAgICMgc2VlbiBhcmd1bWVudHMsIGFzc3VtaW5nIHRoYXQgYWN0aW9ucyB0aGF0IHVzZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgIyB2YWx1ZSBkb24ndCByZWFsbHkgY291bnQgYXMgInByZXNlbnQiCisgICAgICAgICAgICBpZiBhcmd1bWVudF92YWx1ZXMgaXMgbm90IGFjdGlvbi5kZWZhdWx0OgorICAgICAgICAgICAgICAgIHNlZW5fbm9uX2RlZmF1bHRfYWN0aW9ucy5hZGQoYWN0aW9uKQorICAgICAgICAgICAgICAgIGZvciBjb25mbGljdF9hY3Rpb24gaW4gYWN0aW9uX2NvbmZsaWN0cy5nZXQoYWN0aW9uLCBbXSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbmZsaWN0X2FjdGlvbiBpbiBzZWVuX25vbl9kZWZhdWx0X2FjdGlvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBfKCdub3QgYWxsb3dlZCB3aXRoIGFyZ3VtZW50ICVzJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbl9uYW1lID0gX2dldF9hY3Rpb25fbmFtZShjb25mbGljdF9hY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKGFjdGlvbiwgbXNnICUgYWN0aW9uX25hbWUpCisKKyAgICAgICAgICAgICMgdGFrZSB0aGUgYWN0aW9uIGlmIHdlIGRpZG4ndCByZWNlaXZlIGEgU1VQUFJFU1MgdmFsdWUKKyAgICAgICAgICAgICMgKGUuZy4gZnJvbSBhIGRlZmF1bHQpCisgICAgICAgICAgICBpZiBhcmd1bWVudF92YWx1ZXMgaXMgbm90IFNVUFBSRVNTOgorICAgICAgICAgICAgICAgIGFjdGlvbihzZWxmLCBuYW1lc3BhY2UsIGFyZ3VtZW50X3ZhbHVlcywgb3B0aW9uX3N0cmluZykKKworICAgICAgICAjIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYXJnX3N0cmluZ3MgaW50byBhbiBvcHRpb25hbCBhY3Rpb24KKyAgICAgICAgZGVmIGNvbnN1bWVfb3B0aW9uYWwoc3RhcnRfaW5kZXgpOgorCisgICAgICAgICAgICAjIGdldCB0aGUgb3B0aW9uYWwgaWRlbnRpZmllZCBhdCB0aGlzIGluZGV4CisgICAgICAgICAgICBvcHRpb25fdHVwbGUgPSBvcHRpb25fc3RyaW5nX2luZGljZXNbc3RhcnRfaW5kZXhdCisgICAgICAgICAgICBhY3Rpb24sIG9wdGlvbl9zdHJpbmcsIGV4cGxpY2l0X2FyZyA9IG9wdGlvbl90dXBsZQorCisgICAgICAgICAgICAjIGlkZW50aWZ5IGFkZGl0aW9uYWwgb3B0aW9uYWxzIGluIHRoZSBzYW1lIGFyZyBzdHJpbmcKKyAgICAgICAgICAgICMgKGUuZy4gLXh5eiBpcyB0aGUgc2FtZSBhcyAteCAteSAteiBpZiBubyBhcmdzIGFyZSByZXF1aXJlZCkKKyAgICAgICAgICAgIG1hdGNoX2FyZ3VtZW50ID0gc2VsZi5fbWF0Y2hfYXJndW1lbnQKKyAgICAgICAgICAgIGFjdGlvbl90dXBsZXMgPSBbXQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKworICAgICAgICAgICAgICAgICMgaWYgd2UgZm91bmQgbm8gb3B0aW9uYWwgYWN0aW9uLCBza2lwIGl0CisgICAgICAgICAgICAgICAgaWYgYWN0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhcy5hcHBlbmQoYXJnX3N0cmluZ3Nbc3RhcnRfaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRfaW5kZXggKyAxCisKKyAgICAgICAgICAgICAgICAjIGlmIHRoZXJlIGlzIGFuIGV4cGxpY2l0IGFyZ3VtZW50LCB0cnkgdG8gbWF0Y2ggdGhlCisgICAgICAgICAgICAgICAgIyBvcHRpb25hbCdzIHN0cmluZyBhcmd1bWVudHMgdG8gb25seSB0aGlzCisgICAgICAgICAgICAgICAgaWYgZXhwbGljaXRfYXJnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBhcmdfY291bnQgPSBtYXRjaF9hcmd1bWVudChhY3Rpb24sICdBJykKKworICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSBhY3Rpb24gaXMgYSBzaW5nbGUtZGFzaCBvcHRpb24gYW5kIHRha2VzIG5vCisgICAgICAgICAgICAgICAgICAgICMgYXJndW1lbnRzLCB0cnkgdG8gcGFyc2UgbW9yZSBzaW5nbGUtZGFzaCBvcHRpb25zIG91dAorICAgICAgICAgICAgICAgICAgICAjIG9mIHRoZSB0YWlsIG9mIHRoZSBvcHRpb24gc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIGNoYXJzID0gc2VsZi5wcmVmaXhfY2hhcnMKKyAgICAgICAgICAgICAgICAgICAgaWYgYXJnX2NvdW50ID09IDAgYW5kIG9wdGlvbl9zdHJpbmdbMV0gbm90IGluIGNoYXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uX3R1cGxlcy5hcHBlbmQoKGFjdGlvbiwgW10sIG9wdGlvbl9zdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciA9IG9wdGlvbl9zdHJpbmdbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmcgPSBjaGFyICsgZXhwbGljaXRfYXJnWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfZXhwbGljaXRfYXJnID0gZXhwbGljaXRfYXJnWzE6XSBvciBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbHNfbWFwID0gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5nIGluIG9wdGlvbmFsc19tYXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gb3B0aW9uYWxzX21hcFtvcHRpb25fc3RyaW5nXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0X2FyZyA9IG5ld19leHBsaWNpdF9hcmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gXygnaWdub3JlZCBleHBsaWNpdCBhcmd1bWVudCAlcicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihhY3Rpb24sIG1zZyAlIGV4cGxpY2l0X2FyZykKKworICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSBhY3Rpb24gZXhwZWN0IGV4YWN0bHkgb25lIGFyZ3VtZW50LCB3ZSd2ZQorICAgICAgICAgICAgICAgICAgICAjIHN1Y2Nlc3NmdWxseSBtYXRjaGVkIHRoZSBvcHRpb247IGV4aXQgdGhlIGxvb3AKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBhcmdfY291bnQgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3AgPSBzdGFydF9pbmRleCArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbZXhwbGljaXRfYXJnXQorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uX3R1cGxlcy5hcHBlbmQoKGFjdGlvbiwgYXJncywgb3B0aW9uX3N0cmluZykpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgICAgICMgZXJyb3IgaWYgYSBkb3VibGUtZGFzaCBvcHRpb24gZGlkIG5vdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICMgZXhwbGljaXQgYXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IF8oJ2lnbm9yZWQgZXhwbGljaXQgYXJndW1lbnQgJXInKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihhY3Rpb24sIG1zZyAlIGV4cGxpY2l0X2FyZykKKworICAgICAgICAgICAgICAgICMgaWYgdGhlcmUgaXMgbm8gZXhwbGljaXQgYXJndW1lbnQsIHRyeSB0byBtYXRjaCB0aGUKKyAgICAgICAgICAgICAgICAjIG9wdGlvbmFsJ3Mgc3RyaW5nIGFyZ3VtZW50cyB3aXRoIHRoZSBmb2xsb3dpbmcgc3RyaW5ncworICAgICAgICAgICAgICAgICMgaWYgc3VjY2Vzc2Z1bCwgZXhpdCB0aGUgbG9vcAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnRfaW5kZXggKyAxCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkX3BhdHRlcm5zID0gYXJnX3N0cmluZ3NfcGF0dGVybltzdGFydDpdCisgICAgICAgICAgICAgICAgICAgIGFyZ19jb3VudCA9IG1hdGNoX2FyZ3VtZW50KGFjdGlvbiwgc2VsZWN0ZWRfcGF0dGVybnMpCisgICAgICAgICAgICAgICAgICAgIHN0b3AgPSBzdGFydCArIGFyZ19jb3VudAorICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnX3N0cmluZ3Nbc3RhcnQ6c3RvcF0KKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uX3R1cGxlcy5hcHBlbmQoKGFjdGlvbiwgYXJncywgb3B0aW9uX3N0cmluZykpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgYWRkIHRoZSBPcHRpb25hbCB0byB0aGUgbGlzdCBhbmQgcmV0dXJuIHRoZSBpbmRleCBhdCB3aGljaAorICAgICAgICAgICAgIyB0aGUgT3B0aW9uYWwncyBzdHJpbmcgYXJncyBzdG9wcGVkCisgICAgICAgICAgICBhc3NlcnQgYWN0aW9uX3R1cGxlcworICAgICAgICAgICAgZm9yIGFjdGlvbiwgYXJncywgb3B0aW9uX3N0cmluZyBpbiBhY3Rpb25fdHVwbGVzOgorICAgICAgICAgICAgICAgIHRha2VfYWN0aW9uKGFjdGlvbiwgYXJncywgb3B0aW9uX3N0cmluZykKKyAgICAgICAgICAgIHJldHVybiBzdG9wCisKKyAgICAgICAgIyB0aGUgbGlzdCBvZiBQb3NpdGlvbmFscyBsZWZ0IHRvIGJlIHBhcnNlZDsgdGhpcyBpcyBtb2RpZmllZAorICAgICAgICAjIGJ5IGNvbnN1bWVfcG9zaXRpb25hbHMoKQorICAgICAgICBwb3NpdGlvbmFscyA9IHNlbGYuX2dldF9wb3NpdGlvbmFsX2FjdGlvbnMoKQorCisgICAgICAgICMgZnVuY3Rpb24gdG8gY29udmVydCBhcmdfc3RyaW5ncyBpbnRvIHBvc2l0aW9uYWwgYWN0aW9ucworICAgICAgICBkZWYgY29uc3VtZV9wb3NpdGlvbmFscyhzdGFydF9pbmRleCk6CisgICAgICAgICAgICAjIG1hdGNoIGFzIG1hbnkgUG9zaXRpb25hbHMgYXMgcG9zc2libGUKKyAgICAgICAgICAgIG1hdGNoX3BhcnRpYWwgPSBzZWxmLl9tYXRjaF9hcmd1bWVudHNfcGFydGlhbAorICAgICAgICAgICAgc2VsZWN0ZWRfcGF0dGVybiA9IGFyZ19zdHJpbmdzX3BhdHRlcm5bc3RhcnRfaW5kZXg6XQorICAgICAgICAgICAgYXJnX2NvdW50cyA9IG1hdGNoX3BhcnRpYWwocG9zaXRpb25hbHMsIHNlbGVjdGVkX3BhdHRlcm4pCisKKyAgICAgICAgICAgICMgc2xpY2Ugb2ZmIHRoZSBhcHByb3ByaWF0ZSBhcmcgc3RyaW5ncyBmb3IgZWFjaCBQb3NpdGlvbmFsCisgICAgICAgICAgICAjIGFuZCBhZGQgdGhlIFBvc2l0aW9uYWwgYW5kIGl0cyBhcmdzIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBmb3IgYWN0aW9uLCBhcmdfY291bnQgaW4gemlwKHBvc2l0aW9uYWxzLCBhcmdfY291bnRzKToKKyAgICAgICAgICAgICAgICBhcmdzID0gYXJnX3N0cmluZ3Nbc3RhcnRfaW5kZXg6IHN0YXJ0X2luZGV4ICsgYXJnX2NvdW50XQorICAgICAgICAgICAgICAgIHN0YXJ0X2luZGV4ICs9IGFyZ19jb3VudAorICAgICAgICAgICAgICAgIHRha2VfYWN0aW9uKGFjdGlvbiwgYXJncykKKworICAgICAgICAgICAgIyBzbGljZSBvZmYgdGhlIFBvc2l0aW9uYWxzIHRoYXQgd2UganVzdCBwYXJzZWQgYW5kIHJldHVybiB0aGUKKyAgICAgICAgICAgICMgaW5kZXggYXQgd2hpY2ggdGhlIFBvc2l0aW9uYWxzJyBzdHJpbmcgYXJncyBzdG9wcGVkCisgICAgICAgICAgICBwb3NpdGlvbmFsc1s6XSA9IHBvc2l0aW9uYWxzW2xlbihhcmdfY291bnRzKTpdCisgICAgICAgICAgICByZXR1cm4gc3RhcnRfaW5kZXgKKworICAgICAgICAjIGNvbnN1bWUgUG9zaXRpb25hbHMgYW5kIE9wdGlvbmFscyBhbHRlcm5hdGVseSwgdW50aWwgd2UgaGF2ZQorICAgICAgICAjIHBhc3NlZCB0aGUgbGFzdCBvcHRpb24gc3RyaW5nCisgICAgICAgIGV4dHJhcyA9IFtdCisgICAgICAgIHN0YXJ0X2luZGV4ID0gMAorICAgICAgICBpZiBvcHRpb25fc3RyaW5nX2luZGljZXM6CisgICAgICAgICAgICBtYXhfb3B0aW9uX3N0cmluZ19pbmRleCA9IG1heChvcHRpb25fc3RyaW5nX2luZGljZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXhfb3B0aW9uX3N0cmluZ19pbmRleCA9IC0xCisgICAgICAgIHdoaWxlIHN0YXJ0X2luZGV4IDw9IG1heF9vcHRpb25fc3RyaW5nX2luZGV4OgorCisgICAgICAgICAgICAjIGNvbnN1bWUgYW55IFBvc2l0aW9uYWxzIHByZWNlZGluZyB0aGUgbmV4dCBvcHRpb24KKyAgICAgICAgICAgIG5leHRfb3B0aW9uX3N0cmluZ19pbmRleCA9IG1pbihbCisgICAgICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgICAgICBmb3IgaW5kZXggaW4gb3B0aW9uX3N0cmluZ19pbmRpY2VzCisgICAgICAgICAgICAgICAgaWYgaW5kZXggPj0gc3RhcnRfaW5kZXhdKQorICAgICAgICAgICAgaWYgc3RhcnRfaW5kZXggIT0gbmV4dF9vcHRpb25fc3RyaW5nX2luZGV4OgorICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxzX2VuZF9pbmRleCA9IGNvbnN1bWVfcG9zaXRpb25hbHMoc3RhcnRfaW5kZXgpCisKKyAgICAgICAgICAgICAgICAjIG9ubHkgdHJ5IHRvIHBhcnNlIHRoZSBuZXh0IG9wdGlvbmFsIGlmIHdlIGRpZG4ndCBjb25zdW1lCisgICAgICAgICAgICAgICAgIyB0aGUgb3B0aW9uIHN0cmluZyBkdXJpbmcgdGhlIHBvc2l0aW9uYWxzIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBpZiBwb3NpdGlvbmFsc19lbmRfaW5kZXggPiBzdGFydF9pbmRleDoKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBwb3NpdGlvbmFsc19lbmRfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdGFydF9pbmRleCA9IHBvc2l0aW9uYWxzX2VuZF9pbmRleAorCisgICAgICAgICAgICAjIGlmIHdlIGNvbnN1bWVkIGFsbCB0aGUgcG9zaXRpb25hbHMgd2UgY291bGQgYW5kIHdlJ3JlIG5vdAorICAgICAgICAgICAgIyBhdCB0aGUgaW5kZXggb2YgYW4gb3B0aW9uIHN0cmluZywgdGhlcmUgd2VyZSBleHRyYSBhcmd1bWVudHMKKyAgICAgICAgICAgIGlmIHN0YXJ0X2luZGV4IG5vdCBpbiBvcHRpb25fc3RyaW5nX2luZGljZXM6CisgICAgICAgICAgICAgICAgc3RyaW5ncyA9IGFyZ19zdHJpbmdzW3N0YXJ0X2luZGV4Om5leHRfb3B0aW9uX3N0cmluZ19pbmRleF0KKyAgICAgICAgICAgICAgICBleHRyYXMuZXh0ZW5kKHN0cmluZ3MpCisgICAgICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBuZXh0X29wdGlvbl9zdHJpbmdfaW5kZXgKKworICAgICAgICAgICAgIyBjb25zdW1lIHRoZSBuZXh0IG9wdGlvbmFsIGFuZCBhbnkgYXJndW1lbnRzIGZvciBpdAorICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBjb25zdW1lX29wdGlvbmFsKHN0YXJ0X2luZGV4KQorCisgICAgICAgICMgY29uc3VtZSBhbnkgcG9zaXRpb25hbHMgZm9sbG93aW5nIHRoZSBsYXN0IE9wdGlvbmFsCisgICAgICAgIHN0b3BfaW5kZXggPSBjb25zdW1lX3Bvc2l0aW9uYWxzKHN0YXJ0X2luZGV4KQorCisgICAgICAgICMgaWYgd2UgZGlkbid0IGNvbnN1bWUgYWxsIHRoZSBhcmd1bWVudCBzdHJpbmdzLCB0aGVyZSB3ZXJlIGV4dHJhcworICAgICAgICBleHRyYXMuZXh0ZW5kKGFyZ19zdHJpbmdzW3N0b3BfaW5kZXg6XSkKKworICAgICAgICAjIGlmIHdlIGRpZG4ndCB1c2UgYWxsIHRoZSBQb3NpdGlvbmFsIG9iamVjdHMsIHRoZXJlIHdlcmUgdG9vIGZldworICAgICAgICAjIGFyZyBzdHJpbmdzIHN1cHBsaWVkLgorICAgICAgICBpZiBwb3NpdGlvbmFsczoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoXygndG9vIGZldyBhcmd1bWVudHMnKSkKKworICAgICAgICAjIG1ha2Ugc3VyZSBhbGwgcmVxdWlyZWQgYWN0aW9ucyB3ZXJlIHByZXNlbnQKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBzZWxmLl9hY3Rpb25zOgorICAgICAgICAgICAgaWYgYWN0aW9uLnJlcXVpcmVkOgorICAgICAgICAgICAgICAgIGlmIGFjdGlvbiBub3QgaW4gc2Vlbl9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gX2dldF9hY3Rpb25fbmFtZShhY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoXygnYXJndW1lbnQgJXMgaXMgcmVxdWlyZWQnKSAlIG5hbWUpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgYWxsIHJlcXVpcmVkIGdyb3VwcyBoYWQgb25lIG9wdGlvbiBwcmVzZW50CisgICAgICAgIGZvciBncm91cCBpbiBzZWxmLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzOgorICAgICAgICAgICAgaWYgZ3JvdXAucmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBncm91cC5fZ3JvdXBfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgaWYgYWN0aW9uIGluIHNlZW5fbm9uX2RlZmF1bHRfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAjIGlmIG5vIGFjdGlvbnMgd2VyZSB1c2VkLCByZXBvcnQgdGhlIGVycm9yCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBbX2dldF9hY3Rpb25fbmFtZShhY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gZ3JvdXAuX2dyb3VwX2FjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWN0aW9uLmhlbHAgaXMgbm90IFNVUFBSRVNTXQorICAgICAgICAgICAgICAgICAgICBtc2cgPSBfKCdvbmUgb2YgdGhlIGFyZ3VtZW50cyAlcyBpcyByZXF1aXJlZCcpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IobXNnICUgJyAnLmpvaW4obmFtZXMpKQorCisgICAgICAgICMgcmV0dXJuIHRoZSB1cGRhdGVkIG5hbWVzcGFjZSBhbmQgdGhlIGV4dHJhIGFyZ3VtZW50cworICAgICAgICByZXR1cm4gbmFtZXNwYWNlLCBleHRyYXMKKworICAgIGRlZiBfcmVhZF9hcmdzX2Zyb21fZmlsZXMoc2VsZiwgYXJnX3N0cmluZ3MpOgorICAgICAgICAjIGV4cGFuZCBhcmd1bWVudHMgcmVmZXJlbmNpbmcgZmlsZXMKKyAgICAgICAgbmV3X2FyZ19zdHJpbmdzID0gW10KKyAgICAgICAgZm9yIGFyZ19zdHJpbmcgaW4gYXJnX3N0cmluZ3M6CisKKyAgICAgICAgICAgICMgZm9yIHJlZ3VsYXIgYXJndW1lbnRzLCBqdXN0IGFkZCB0aGVtIGJhY2sgaW50byB0aGUgbGlzdAorICAgICAgICAgICAgaWYgYXJnX3N0cmluZ1swXSBub3QgaW4gc2VsZi5mcm9tZmlsZV9wcmVmaXhfY2hhcnM6CisgICAgICAgICAgICAgICAgbmV3X2FyZ19zdHJpbmdzLmFwcGVuZChhcmdfc3RyaW5nKQorCisgICAgICAgICAgICAjIHJlcGxhY2UgYXJndW1lbnRzIHJlZmVyZW5jaW5nIGZpbGVzIHdpdGggdGhlIGZpbGUgY29udGVudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGFyZ3NfZmlsZSA9IG9wZW4oYXJnX3N0cmluZ1sxOl0pCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmdfbGluZSBpbiBhcmdzX2ZpbGUucmVhZCgpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIHNlbGYuY29udmVydF9hcmdfbGluZV90b19hcmdzKGFyZ19saW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3N0cmluZ3MuYXBwZW5kKGFyZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gc2VsZi5fcmVhZF9hcmdzX2Zyb21fZmlsZXMoYXJnX3N0cmluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJnX3N0cmluZ3MuZXh0ZW5kKGFyZ19zdHJpbmdzKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19maWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gX3N5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3Ioc3RyKGVycikpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIG1vZGlmaWVkIGFyZ3VtZW50IGxpc3QKKyAgICAgICAgcmV0dXJuIG5ld19hcmdfc3RyaW5ncworCisgICAgZGVmIGNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhzZWxmLCBhcmdfbGluZSk6CisgICAgICAgIHJldHVybiBbYXJnX2xpbmVdCisKKyAgICBkZWYgX21hdGNoX2FyZ3VtZW50KHNlbGYsIGFjdGlvbiwgYXJnX3N0cmluZ3NfcGF0dGVybik6CisgICAgICAgICMgbWF0Y2ggdGhlIHBhdHRlcm4gZm9yIHRoaXMgYWN0aW9uIHRvIHRoZSBhcmcgc3RyaW5ncworICAgICAgICBuYXJnc19wYXR0ZXJuID0gc2VsZi5fZ2V0X25hcmdzX3BhdHRlcm4oYWN0aW9uKQorICAgICAgICBtYXRjaCA9IF9yZS5tYXRjaChuYXJnc19wYXR0ZXJuLCBhcmdfc3RyaW5nc19wYXR0ZXJuKQorCisgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHdlIHdlcmVuJ3QgYWJsZSB0byBmaW5kIGEgbWF0Y2gKKyAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgIG5hcmdzX2Vycm9ycyA9IHsKKyAgICAgICAgICAgICAgICBOb25lOiBfKCdleHBlY3RlZCBvbmUgYXJndW1lbnQnKSwKKyAgICAgICAgICAgICAgICBPUFRJT05BTDogXygnZXhwZWN0ZWQgYXQgbW9zdCBvbmUgYXJndW1lbnQnKSwKKyAgICAgICAgICAgICAgICBPTkVfT1JfTU9SRTogXygnZXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50JyksCisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0ID0gXygnZXhwZWN0ZWQgJXMgYXJndW1lbnQocyknKSAlIGFjdGlvbi5uYXJncworICAgICAgICAgICAgbXNnID0gbmFyZ3NfZXJyb3JzLmdldChhY3Rpb24ubmFyZ3MsIGRlZmF1bHQpCisgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKGFjdGlvbiwgbXNnKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIG1hdGNoZWQKKyAgICAgICAgcmV0dXJuIGxlbihtYXRjaC5ncm91cCgxKSkKKworICAgIGRlZiBfbWF0Y2hfYXJndW1lbnRzX3BhcnRpYWwoc2VsZiwgYWN0aW9ucywgYXJnX3N0cmluZ3NfcGF0dGVybik6CisgICAgICAgICMgcHJvZ3Jlc3NpdmVseSBzaG9ydGVuIHRoZSBhY3Rpb25zIGxpc3QgYnkgc2xpY2luZyBvZmYgdGhlCisgICAgICAgICMgZmluYWwgYWN0aW9ucyB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2gKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFjdGlvbnMpLCAwLCAtMSk6CisgICAgICAgICAgICBhY3Rpb25zX3NsaWNlID0gYWN0aW9uc1s6aV0KKyAgICAgICAgICAgIHBhdHRlcm4gPSAnJy5qb2luKFtzZWxmLl9nZXRfbmFyZ3NfcGF0dGVybihhY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBhY3Rpb25zX3NsaWNlXSkKKyAgICAgICAgICAgIG1hdGNoID0gX3JlLm1hdGNoKHBhdHRlcm4sIGFyZ19zdHJpbmdzX3BhdHRlcm4pCisgICAgICAgICAgICBpZiBtYXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKFtsZW4oc3RyaW5nKSBmb3Igc3RyaW5nIGluIG1hdGNoLmdyb3VwcygpXSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgcmV0dXJuIHRoZSBsaXN0IG9mIGFyZyBzdHJpbmcgY291bnRzCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfcGFyc2Vfb3B0aW9uYWwoc2VsZiwgYXJnX3N0cmluZyk6CisgICAgICAgICMgaWYgaXQncyBhbiBlbXB0eSBzdHJpbmcsIGl0IHdhcyBtZWFudCB0byBiZSBhIHBvc2l0aW9uYWwKKyAgICAgICAgaWYgbm90IGFyZ19zdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgaWYgaXQgZG9lc24ndCBzdGFydCB3aXRoIGEgcHJlZml4LCBpdCB3YXMgbWVhbnQgdG8gYmUgcG9zaXRpb25hbAorICAgICAgICBpZiBub3QgYXJnX3N0cmluZ1swXSBpbiBzZWxmLnByZWZpeF9jaGFyczoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBpZiB0aGUgb3B0aW9uIHN0cmluZyBpcyBwcmVzZW50IGluIHRoZSBwYXJzZXIsIHJldHVybiB0aGUgYWN0aW9uCisgICAgICAgIGlmIGFyZ19zdHJpbmcgaW4gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zOgorICAgICAgICAgICAgYWN0aW9uID0gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zW2FyZ19zdHJpbmddCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uLCBhcmdfc3RyaW5nLCBOb25lCisKKyAgICAgICAgIyBpZiBpdCdzIGp1c3QgYSBzaW5nbGUgY2hhcmFjdGVyLCBpdCB3YXMgbWVhbnQgdG8gYmUgcG9zaXRpb25hbAorICAgICAgICBpZiBsZW4oYXJnX3N0cmluZykgPT0gMToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBpZiB0aGUgb3B0aW9uIHN0cmluZyBiZWZvcmUgdGhlICI9IiBpcyBwcmVzZW50LCByZXR1cm4gdGhlIGFjdGlvbgorICAgICAgICBpZiAnPScgaW4gYXJnX3N0cmluZzoKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmcsIGV4cGxpY2l0X2FyZyA9IGFyZ19zdHJpbmcuc3BsaXQoJz0nLCAxKQorICAgICAgICAgICAgaWYgb3B0aW9uX3N0cmluZyBpbiBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgYWN0aW9uID0gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zW29wdGlvbl9zdHJpbmddCisgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbiwgb3B0aW9uX3N0cmluZywgZXhwbGljaXRfYXJnCisKKyAgICAgICAgIyBzZWFyY2ggdGhyb3VnaCBhbGwgcG9zc2libGUgcHJlZml4ZXMgb2YgdGhlIG9wdGlvbiBzdHJpbmcKKyAgICAgICAgIyBhbmQgYWxsIGFjdGlvbnMgaW4gdGhlIHBhcnNlciBmb3IgcG9zc2libGUgaW50ZXJwcmV0YXRpb25zCisgICAgICAgIG9wdGlvbl90dXBsZXMgPSBzZWxmLl9nZXRfb3B0aW9uX3R1cGxlcyhhcmdfc3RyaW5nKQorCisgICAgICAgICMgaWYgbXVsdGlwbGUgYWN0aW9ucyBtYXRjaCwgdGhlIG9wdGlvbiBzdHJpbmcgd2FzIGFtYmlndW91cworICAgICAgICBpZiBsZW4ob3B0aW9uX3R1cGxlcykgPiAxOgorICAgICAgICAgICAgb3B0aW9ucyA9ICcsICcuam9pbihbb3B0aW9uX3N0cmluZworICAgICAgICAgICAgICAgIGZvciBhY3Rpb24sIG9wdGlvbl9zdHJpbmcsIGV4cGxpY2l0X2FyZyBpbiBvcHRpb25fdHVwbGVzXSkKKyAgICAgICAgICAgIHR1cCA9IGFyZ19zdHJpbmcsIG9wdGlvbnMKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoXygnYW1iaWd1b3VzIG9wdGlvbjogJXMgY291bGQgbWF0Y2ggJXMnKSAlIHR1cCkKKworICAgICAgICAjIGlmIGV4YWN0bHkgb25lIGFjdGlvbiBtYXRjaGVkLCB0aGlzIHNlZ21lbnRhdGlvbiBpcyBnb29kLAorICAgICAgICAjIHNvIHJldHVybiB0aGUgcGFyc2VkIGFjdGlvbgorICAgICAgICBlbGlmIGxlbihvcHRpb25fdHVwbGVzKSA9PSAxOgorICAgICAgICAgICAgb3B0aW9uX3R1cGxlLCA9IG9wdGlvbl90dXBsZXMKKyAgICAgICAgICAgIHJldHVybiBvcHRpb25fdHVwbGUKKworICAgICAgICAjIGlmIGl0IHdhcyBub3QgZm91bmQgYXMgYW4gb3B0aW9uLCBidXQgaXQgbG9va3MgbGlrZSBhIG5lZ2F0aXZlCisgICAgICAgICMgbnVtYmVyLCBpdCB3YXMgbWVhbnQgdG8gYmUgcG9zaXRpb25hbAorICAgICAgICAjIHVubGVzcyB0aGVyZSBhcmUgbmVnYXRpdmUtbnVtYmVyLWxpa2Ugb3B0aW9ucworICAgICAgICBpZiBzZWxmLl9uZWdhdGl2ZV9udW1iZXJfbWF0Y2hlci5tYXRjaChhcmdfc3RyaW5nKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9oYXNfbmVnYXRpdmVfbnVtYmVyX29wdGlvbmFsczoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgaWYgaXQgY29udGFpbnMgYSBzcGFjZSwgaXQgd2FzIG1lYW50IHRvIGJlIGEgcG9zaXRpb25hbAorICAgICAgICBpZiAnICcgaW4gYXJnX3N0cmluZzoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBpdCB3YXMgbWVhbnQgdG8gYmUgYW4gb3B0aW9uYWwgYnV0IHRoZXJlIGlzIG5vIHN1Y2ggb3B0aW9uCisgICAgICAgICMgaW4gdGhpcyBwYXJzZXIgKHRob3VnaCBpdCBtaWdodCBiZSBhIHZhbGlkIG9wdGlvbiBpbiBhIHN1YnBhcnNlcikKKyAgICAgICAgcmV0dXJuIE5vbmUsIGFyZ19zdHJpbmcsIE5vbmUKKworICAgIGRlZiBfZ2V0X29wdGlvbl90dXBsZXMoc2VsZiwgb3B0aW9uX3N0cmluZyk6CisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgIyBvcHRpb24gc3RyaW5ncyBzdGFydGluZyB3aXRoIHR3byBwcmVmaXggY2hhcmFjdGVycyBhcmUgb25seQorICAgICAgICAjIHNwbGl0IGF0IHRoZSAnPScKKyAgICAgICAgY2hhcnMgPSBzZWxmLnByZWZpeF9jaGFycworICAgICAgICBpZiBvcHRpb25fc3RyaW5nWzBdIGluIGNoYXJzIGFuZCBvcHRpb25fc3RyaW5nWzFdIGluIGNoYXJzOgorICAgICAgICAgICAgaWYgJz0nIGluIG9wdGlvbl9zdHJpbmc6CisgICAgICAgICAgICAgICAgb3B0aW9uX3ByZWZpeCwgZXhwbGljaXRfYXJnID0gb3B0aW9uX3N0cmluZy5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9wdGlvbl9wcmVmaXggPSBvcHRpb25fc3RyaW5nCisgICAgICAgICAgICAgICAgZXhwbGljaXRfYXJnID0gTm9uZQorICAgICAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcgaW4gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zOgorICAgICAgICAgICAgICAgIGlmIG9wdGlvbl9zdHJpbmcuc3RhcnRzd2l0aChvcHRpb25fcHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zW29wdGlvbl9zdHJpbmddCisgICAgICAgICAgICAgICAgICAgIHR1cCA9IGFjdGlvbiwgb3B0aW9uX3N0cmluZywgZXhwbGljaXRfYXJnCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHVwKQorCisgICAgICAgICMgc2luZ2xlIGNoYXJhY3RlciBvcHRpb25zIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGVpciBhcmd1bWVudHMKKyAgICAgICAgIyBidXQgbXVsdGlwbGUgY2hhcmFjdGVyIG9wdGlvbnMgYWx3YXlzIGhhdmUgdG8gaGF2ZSB0aGVpciBhcmd1bWVudAorICAgICAgICAjIHNlcGFyYXRlCisgICAgICAgIGVsaWYgb3B0aW9uX3N0cmluZ1swXSBpbiBjaGFycyBhbmQgb3B0aW9uX3N0cmluZ1sxXSBub3QgaW4gY2hhcnM6CisgICAgICAgICAgICBvcHRpb25fcHJlZml4ID0gb3B0aW9uX3N0cmluZworICAgICAgICAgICAgZXhwbGljaXRfYXJnID0gTm9uZQorICAgICAgICAgICAgc2hvcnRfb3B0aW9uX3ByZWZpeCA9IG9wdGlvbl9zdHJpbmdbOjJdCisgICAgICAgICAgICBzaG9ydF9leHBsaWNpdF9hcmcgPSBvcHRpb25fc3RyaW5nWzI6XQorCisgICAgICAgICAgICBmb3Igb3B0aW9uX3N0cmluZyBpbiBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgb3B0aW9uX3N0cmluZyA9PSBzaG9ydF9vcHRpb25fcHJlZml4OgorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnNbb3B0aW9uX3N0cmluZ10KKyAgICAgICAgICAgICAgICAgICAgdHVwID0gYWN0aW9uLCBvcHRpb25fc3RyaW5nLCBzaG9ydF9leHBsaWNpdF9hcmcKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0dXApCisgICAgICAgICAgICAgICAgZWxpZiBvcHRpb25fc3RyaW5nLnN0YXJ0c3dpdGgob3B0aW9uX3ByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uc1tvcHRpb25fc3RyaW5nXQorICAgICAgICAgICAgICAgICAgICB0dXAgPSBhY3Rpb24sIG9wdGlvbl9zdHJpbmcsIGV4cGxpY2l0X2FyZworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHR1cCkKKworICAgICAgICAjIHNob3VsZG4ndCBldmVyIGdldCBoZXJlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmVycm9yKF8oJ3VuZXhwZWN0ZWQgb3B0aW9uIHN0cmluZzogJXMnKSAlIG9wdGlvbl9zdHJpbmcpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIGNvbGxlY3RlZCBvcHRpb24gdHVwbGVzCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfZ2V0X25hcmdzX3BhdHRlcm4oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgIyBpbiBhbGwgZXhhbXBsZXMgYmVsb3csIHdlIGhhdmUgdG8gYWxsb3cgZm9yICctLScgYXJncworICAgICAgICAjIHdoaWNoIGFyZSByZXByZXNlbnRlZCBhcyAnLScgaW4gdGhlIHBhdHRlcm4KKyAgICAgICAgbmFyZ3MgPSBhY3Rpb24ubmFyZ3MKKworICAgICAgICAjIHRoZSBkZWZhdWx0IChOb25lKSBpcyBhc3N1bWVkIHRvIGJlIGEgc2luZ2xlIGFyZ3VtZW50CisgICAgICAgIGlmIG5hcmdzIGlzIE5vbmU6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gJygtKkEtKiknCisKKyAgICAgICAgIyBhbGxvdyB6ZXJvIG9yIG9uZSBhcmd1bWVudHMKKyAgICAgICAgZWxpZiBuYXJncyA9PSBPUFRJT05BTDoKKyAgICAgICAgICAgIG5hcmdzX3BhdHRlcm4gPSAnKC0qQT8tKiknCisKKyAgICAgICAgIyBhbGxvdyB6ZXJvIG9yIG1vcmUgYXJndW1lbnRzCisgICAgICAgIGVsaWYgbmFyZ3MgPT0gWkVST19PUl9NT1JFOgorICAgICAgICAgICAgbmFyZ3NfcGF0dGVybiA9ICcoLSpbQS1dKiknCisKKyAgICAgICAgIyBhbGxvdyBvbmUgb3IgbW9yZSBhcmd1bWVudHMKKyAgICAgICAgZWxpZiBuYXJncyA9PSBPTkVfT1JfTU9SRToKKyAgICAgICAgICAgIG5hcmdzX3BhdHRlcm4gPSAnKC0qQVtBLV0qKScKKworICAgICAgICAjIGFsbG93IGFueSBudW1iZXIgb2Ygb3B0aW9ucyBvciBhcmd1bWVudHMKKyAgICAgICAgZWxpZiBuYXJncyA9PSBSRU1BSU5ERVI6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gJyhbLUFPXSopJworCisgICAgICAgICMgYWxsb3cgb25lIGFyZ3VtZW50IGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2Ygb3B0aW9ucyBvciBhcmd1bWVudHMKKyAgICAgICAgZWxpZiBuYXJncyA9PSBQQVJTRVI6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gJygtKkFbLUFPXSopJworCisgICAgICAgICMgYWxsIG90aGVycyBzaG91bGQgYmUgaW50ZWdlcnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hcmdzX3BhdHRlcm4gPSAnKC0qJXMtKiknICUgJy0qJy5qb2luKCdBJyAqIG5hcmdzKQorCisgICAgICAgICMgaWYgdGhpcyBpcyBhbiBvcHRpb25hbCBhY3Rpb24sIC0tIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGlmIGFjdGlvbi5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgICAgIG5hcmdzX3BhdHRlcm4gPSBuYXJnc19wYXR0ZXJuLnJlcGxhY2UoJy0qJywgJycpCisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gbmFyZ3NfcGF0dGVybi5yZXBsYWNlKCctJywgJycpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIHBhdHRlcm4KKyAgICAgICAgcmV0dXJuIG5hcmdzX3BhdHRlcm4KKworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBWYWx1ZSBjb252ZXJzaW9uIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiBfZ2V0X3ZhbHVlcyhzZWxmLCBhY3Rpb24sIGFyZ19zdHJpbmdzKToKKyAgICAgICAgIyBmb3IgZXZlcnl0aGluZyBidXQgUEFSU0VSIGFyZ3MsIHN0cmlwIG91dCAnLS0nCisgICAgICAgIGlmIGFjdGlvbi5uYXJncyBub3QgaW4gW1BBUlNFUiwgUkVNQUlOREVSXToKKyAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gW3MgZm9yIHMgaW4gYXJnX3N0cmluZ3MgaWYgcyAhPSAnLS0nXQorCisgICAgICAgICMgb3B0aW9uYWwgYXJndW1lbnQgcHJvZHVjZXMgYSBkZWZhdWx0IHdoZW4gbm90IHByZXNlbnQKKyAgICAgICAgaWYgbm90IGFyZ19zdHJpbmdzIGFuZCBhY3Rpb24ubmFyZ3MgPT0gT1BUSU9OQUw6CisgICAgICAgICAgICBpZiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhY3Rpb24uY29uc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhY3Rpb24uZGVmYXVsdAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9nZXRfdmFsdWUoYWN0aW9uLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGVja192YWx1ZShhY3Rpb24sIHZhbHVlKQorCisgICAgICAgICMgd2hlbiBuYXJncz0nKicgb24gYSBwb3NpdGlvbmFsLCBpZiB0aGVyZSB3ZXJlIG5vIGNvbW1hbmQtbGluZQorICAgICAgICAjIGFyZ3MsIHVzZSB0aGUgZGVmYXVsdCBpZiBpdCBpcyBhbnl0aGluZyBvdGhlciB0aGFuIE5vbmUKKyAgICAgICAgZWxpZiAobm90IGFyZ19zdHJpbmdzIGFuZCBhY3Rpb24ubmFyZ3MgPT0gWkVST19PUl9NT1JFIGFuZAorICAgICAgICAgICAgICBub3QgYWN0aW9uLm9wdGlvbl9zdHJpbmdzKToKKyAgICAgICAgICAgIGlmIGFjdGlvbi5kZWZhdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYWN0aW9uLmRlZmF1bHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmdfc3RyaW5ncworICAgICAgICAgICAgc2VsZi5fY2hlY2tfdmFsdWUoYWN0aW9uLCB2YWx1ZSkKKworICAgICAgICAjIHNpbmdsZSBhcmd1bWVudCBvciBvcHRpb25hbCBhcmd1bWVudCBwcm9kdWNlcyBhIHNpbmdsZSB2YWx1ZQorICAgICAgICBlbGlmIGxlbihhcmdfc3RyaW5ncykgPT0gMSBhbmQgYWN0aW9uLm5hcmdzIGluIFtOb25lLCBPUFRJT05BTF06CisgICAgICAgICAgICBhcmdfc3RyaW5nLCA9IGFyZ19zdHJpbmdzCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX2dldF92YWx1ZShhY3Rpb24sIGFyZ19zdHJpbmcpCisgICAgICAgICAgICBzZWxmLl9jaGVja192YWx1ZShhY3Rpb24sIHZhbHVlKQorCisgICAgICAgICMgUkVNQUlOREVSIGFyZ3VtZW50cyBjb252ZXJ0IGFsbCB2YWx1ZXMsIGNoZWNraW5nIG5vbmUKKyAgICAgICAgZWxpZiBhY3Rpb24ubmFyZ3MgPT0gUkVNQUlOREVSOgorICAgICAgICAgICAgdmFsdWUgPSBbc2VsZi5fZ2V0X3ZhbHVlKGFjdGlvbiwgdikgZm9yIHYgaW4gYXJnX3N0cmluZ3NdCisKKyAgICAgICAgIyBQQVJTRVIgYXJndW1lbnRzIGNvbnZlcnQgYWxsIHZhbHVlcywgYnV0IGNoZWNrIG9ubHkgdGhlIGZpcnN0CisgICAgICAgIGVsaWYgYWN0aW9uLm5hcmdzID09IFBBUlNFUjoKKyAgICAgICAgICAgIHZhbHVlID0gW3NlbGYuX2dldF92YWx1ZShhY3Rpb24sIHYpIGZvciB2IGluIGFyZ19zdHJpbmdzXQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfdmFsdWUoYWN0aW9uLCB2YWx1ZVswXSkKKworICAgICAgICAjIGFsbCBvdGhlciB0eXBlcyBvZiBuYXJncyBwcm9kdWNlIGEgbGlzdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSBbc2VsZi5fZ2V0X3ZhbHVlKGFjdGlvbiwgdikgZm9yIHYgaW4gYXJnX3N0cmluZ3NdCisgICAgICAgICAgICBmb3IgdiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGVja192YWx1ZShhY3Rpb24sIHYpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIGNvbnZlcnRlZCB2YWx1ZQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBfZ2V0X3ZhbHVlKHNlbGYsIGFjdGlvbiwgYXJnX3N0cmluZyk6CisgICAgICAgIHR5cGVfZnVuYyA9IHNlbGYuX3JlZ2lzdHJ5X2dldCgndHlwZScsIGFjdGlvbi50eXBlLCBhY3Rpb24udHlwZSkKKyAgICAgICAgaWYgbm90IF9jYWxsYWJsZSh0eXBlX2Z1bmMpOgorICAgICAgICAgICAgbXNnID0gXygnJXIgaXMgbm90IGNhbGxhYmxlJykKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cgJSB0eXBlX2Z1bmMpCisKKyAgICAgICAgIyBjb252ZXJ0IHRoZSB2YWx1ZSB0byB0aGUgYXBwcm9wcmlhdGUgdHlwZQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSB0eXBlX2Z1bmMoYXJnX3N0cmluZykKKworICAgICAgICAjIEFyZ3VtZW50VHlwZUVycm9ycyBpbmRpY2F0ZSBlcnJvcnMKKyAgICAgICAgZXhjZXB0IEFyZ3VtZW50VHlwZUVycm9yOgorICAgICAgICAgICAgbmFtZSA9IGdldGF0dHIoYWN0aW9uLnR5cGUsICdfX25hbWVfXycsIHJlcHIoYWN0aW9uLnR5cGUpKQorICAgICAgICAgICAgbXNnID0gc3RyKF9zeXMuZXhjX2luZm8oKVsxXSkKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cpCisKKyAgICAgICAgIyBUeXBlRXJyb3JzIG9yIFZhbHVlRXJyb3JzIGFsc28gaW5kaWNhdGUgZXJyb3JzCisgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIG5hbWUgPSBnZXRhdHRyKGFjdGlvbi50eXBlLCAnX19uYW1lX18nLCByZXByKGFjdGlvbi50eXBlKSkKKyAgICAgICAgICAgIG1zZyA9IF8oJ2ludmFsaWQgJXMgdmFsdWU6ICVyJykKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cgJSAobmFtZSwgYXJnX3N0cmluZykpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIGNvbnZlcnRlZCB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX2NoZWNrX3ZhbHVlKHNlbGYsIGFjdGlvbiwgdmFsdWUpOgorICAgICAgICAjIGNvbnZlcnRlZCB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgY2hvaWNlcyAoaWYgc3BlY2lmaWVkKQorICAgICAgICBpZiBhY3Rpb24uY2hvaWNlcyBpcyBub3QgTm9uZSBhbmQgdmFsdWUgbm90IGluIGFjdGlvbi5jaG9pY2VzOgorICAgICAgICAgICAgdHVwID0gdmFsdWUsICcsICcuam9pbihtYXAocmVwciwgYWN0aW9uLmNob2ljZXMpKQorICAgICAgICAgICAgbXNnID0gXygnaW52YWxpZCBjaG9pY2U6ICVyIChjaG9vc2UgZnJvbSAlcyknKSAlIHR1cAorICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihhY3Rpb24sIG1zZykKKworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIEhlbHAtZm9ybWF0dGluZyBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiBmb3JtYXRfdXNhZ2Uoc2VsZik6CisgICAgICAgIGZvcm1hdHRlciA9IHNlbGYuX2dldF9mb3JtYXR0ZXIoKQorICAgICAgICBmb3JtYXR0ZXIuYWRkX3VzYWdlKHNlbGYudXNhZ2UsIHNlbGYuX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwcykKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXRfaGVscCgpCisKKyAgICBkZWYgZm9ybWF0X2hlbHAoc2VsZik6CisgICAgICAgIGZvcm1hdHRlciA9IHNlbGYuX2dldF9mb3JtYXR0ZXIoKQorCisgICAgICAgICMgdXNhZ2UKKyAgICAgICAgZm9ybWF0dGVyLmFkZF91c2FnZShzZWxmLnVzYWdlLCBzZWxmLl9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cHMpCisKKyAgICAgICAgIyBkZXNjcmlwdGlvbgorICAgICAgICBmb3JtYXR0ZXIuYWRkX3RleHQoc2VsZi5kZXNjcmlwdGlvbikKKworICAgICAgICAjIHBvc2l0aW9uYWxzLCBvcHRpb25hbHMgYW5kIHVzZXItZGVmaW5lZCBncm91cHMKKyAgICAgICAgZm9yIGFjdGlvbl9ncm91cCBpbiBzZWxmLl9hY3Rpb25fZ3JvdXBzOgorICAgICAgICAgICAgZm9ybWF0dGVyLnN0YXJ0X3NlY3Rpb24oYWN0aW9uX2dyb3VwLnRpdGxlKQorICAgICAgICAgICAgZm9ybWF0dGVyLmFkZF90ZXh0KGFjdGlvbl9ncm91cC5kZXNjcmlwdGlvbikKKyAgICAgICAgICAgIGZvcm1hdHRlci5hZGRfYXJndW1lbnRzKGFjdGlvbl9ncm91cC5fZ3JvdXBfYWN0aW9ucykKKyAgICAgICAgICAgIGZvcm1hdHRlci5lbmRfc2VjdGlvbigpCisKKyAgICAgICAgIyBlcGlsb2cKKyAgICAgICAgZm9ybWF0dGVyLmFkZF90ZXh0KHNlbGYuZXBpbG9nKQorCisgICAgICAgICMgZGV0ZXJtaW5lIGhlbHAgZnJvbSBmb3JtYXQgYWJvdmUKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXRfaGVscCgpCisKKyAgICBkZWYgZm9ybWF0X3ZlcnNpb24oc2VsZik6CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgJ1RoZSBmb3JtYXRfdmVyc2lvbiBtZXRob2QgaXMgZGVwcmVjYXRlZCAtLSB0aGUgInZlcnNpb24iICcKKyAgICAgICAgICAgICdhcmd1bWVudCB0byBBcmd1bWVudFBhcnNlciBpcyBubyBsb25nZXIgc3VwcG9ydGVkLicsCisgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIGZvcm1hdHRlciA9IHNlbGYuX2dldF9mb3JtYXR0ZXIoKQorICAgICAgICBmb3JtYXR0ZXIuYWRkX3RleHQoc2VsZi52ZXJzaW9uKQorICAgICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdF9oZWxwKCkKKworICAgIGRlZiBfZ2V0X2Zvcm1hdHRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZm9ybWF0dGVyX2NsYXNzKHByb2c9c2VsZi5wcm9nKQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIEhlbHAtcHJpbnRpbmcgbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIHByaW50X3VzYWdlKHNlbGYsIGZpbGU9Tm9uZSk6CisgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIGZpbGUgPSBfc3lzLnN0ZG91dAorICAgICAgICBzZWxmLl9wcmludF9tZXNzYWdlKHNlbGYuZm9ybWF0X3VzYWdlKCksIGZpbGUpCisKKyAgICBkZWYgcHJpbnRfaGVscChzZWxmLCBmaWxlPU5vbmUpOgorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlID0gX3N5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fcHJpbnRfbWVzc2FnZShzZWxmLmZvcm1hdF9oZWxwKCksIGZpbGUpCisKKyAgICBkZWYgcHJpbnRfdmVyc2lvbihzZWxmLCBmaWxlPU5vbmUpOgorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICdUaGUgcHJpbnRfdmVyc2lvbiBtZXRob2QgaXMgZGVwcmVjYXRlZCAtLSB0aGUgInZlcnNpb24iICcKKyAgICAgICAgICAgICdhcmd1bWVudCB0byBBcmd1bWVudFBhcnNlciBpcyBubyBsb25nZXIgc3VwcG9ydGVkLicsCisgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIHNlbGYuX3ByaW50X21lc3NhZ2Uoc2VsZi5mb3JtYXRfdmVyc2lvbigpLCBmaWxlKQorCisgICAgZGVmIF9wcmludF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGZpbGU9Tm9uZSk6CisgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZmlsZSA9IF9zeXMuc3RkZXJyCisgICAgICAgICAgICBmaWxlLndyaXRlKG1lc3NhZ2UpCisKKyAgICAjID09PT09PT09PT09PT09PQorICAgICMgRXhpdGluZyBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT0KKyAgICBkZWYgZXhpdChzZWxmLCBzdGF0dXM9MCwgbWVzc2FnZT1Ob25lKToKKyAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAgICAgIHNlbGYuX3ByaW50X21lc3NhZ2UobWVzc2FnZSwgX3N5cy5zdGRlcnIpCisgICAgICAgIF9zeXMuZXhpdChzdGF0dXMpCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICIiImVycm9yKG1lc3NhZ2U6IHN0cmluZykKKworICAgICAgICBQcmludHMgYSB1c2FnZSBtZXNzYWdlIGluY29ycG9yYXRpbmcgdGhlIG1lc3NhZ2UgdG8gc3RkZXJyIGFuZAorICAgICAgICBleGl0cy4KKworICAgICAgICBJZiB5b3Ugb3ZlcnJpZGUgdGhpcyBpbiBhIHN1YmNsYXNzLCBpdCBzaG91bGQgbm90IHJldHVybiAtLSBpdAorICAgICAgICBzaG91bGQgZWl0aGVyIGV4aXQgb3IgcmFpc2UgYW4gZXhjZXB0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5wcmludF91c2FnZShfc3lzLnN0ZGVycikKKyAgICAgICAgc2VsZi5leGl0KDIsIF8oJyVzOiBlcnJvcjogJXNcbicpICUgKHNlbGYucHJvZywgbWVzc2FnZSkpCmRpZmYgLS1naXQgYS9MaWIvYXN0LnB5IGIvTGliL2FzdC5weQppbmRleCA2ZDkyZWRkLi5mZDVkZmRiIDEwMDY0NAotLS0gYS9MaWIvYXN0LnB5CisrKyBiL0xpYi9hc3QucHkKQEAgLTI5LDEyICsyOSwxMiBAQAogZnJvbSBfYXN0IGltcG9ydCBfX3ZlcnNpb25fXwogCiAKLWRlZiBwYXJzZShleHByLCBmaWxlbmFtZT0nPHVua25vd24+JywgbW9kZT0nZXhlYycpOgorZGVmIHBhcnNlKHNvdXJjZSwgZmlsZW5hbWU9Jzx1bmtub3duPicsIG1vZGU9J2V4ZWMnKToKICAgICAiIiIKLSAgICBQYXJzZSBhbiBleHByZXNzaW9uIGludG8gYW4gQVNUIG5vZGUuCi0gICAgRXF1aXZhbGVudCB0byBjb21waWxlKGV4cHIsIGZpbGVuYW1lLCBtb2RlLCBQeUNGX09OTFlfQVNUKS4KKyAgICBQYXJzZSB0aGUgc291cmNlIGludG8gYW4gQVNUIG5vZGUuCisgICAgRXF1aXZhbGVudCB0byBjb21waWxlKHNvdXJjZSwgZmlsZW5hbWUsIG1vZGUsIFB5Q0ZfT05MWV9BU1QpLgogICAgICIiIgotICAgIHJldHVybiBjb21waWxlKGV4cHIsIGZpbGVuYW1lLCBtb2RlLCBQeUNGX09OTFlfQVNUKQorICAgIHJldHVybiBjb21waWxlKHNvdXJjZSwgZmlsZW5hbWUsIG1vZGUsIFB5Q0ZfT05MWV9BU1QpCiAKIAogZGVmIGxpdGVyYWxfZXZhbChub2RlX29yX3N0cmluZyk6CkBAIC02NCw2ICs2NCwxOCBAQAogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgTmFtZSk6CiAgICAgICAgICAgICBpZiBub2RlLmlkIGluIF9zYWZlX25hbWVzOgogICAgICAgICAgICAgICAgIHJldHVybiBfc2FmZV9uYW1lc1tub2RlLmlkXQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgQmluT3ApIGFuZCBcCisgICAgICAgICAgICAgaXNpbnN0YW5jZShub2RlLm9wLCAoQWRkLCBTdWIpKSBhbmQgXAorICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5yaWdodCwgTnVtKSBhbmQgXAorICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5yaWdodC5uLCBjb21wbGV4KSBhbmQgXAorICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5sZWZ0LCBOdW0pIGFuZCBcCisgICAgICAgICAgICAgaXNpbnN0YW5jZShub2RlLmxlZnQubiwgKGludCwgbG9uZywgZmxvYXQpKToKKyAgICAgICAgICAgIGxlZnQgPSBub2RlLmxlZnQubgorICAgICAgICAgICAgcmlnaHQgPSBub2RlLnJpZ2h0Lm4KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5vcCwgQWRkKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCArIHJpZ2h0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0IC0gcmlnaHQKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbWFsZm9ybWVkIHN0cmluZycpCiAgICAgcmV0dXJuIF9jb252ZXJ0KG5vZGVfb3Jfc3RyaW5nKQogCkBAIC0xNDAsOCArMTUyLDYgQEAKICAgICBJbmNyZW1lbnQgdGhlIGxpbmUgbnVtYmVyIG9mIGVhY2ggbm9kZSBpbiB0aGUgdHJlZSBzdGFydGluZyBhdCAqbm9kZSogYnkgKm4qLgogICAgIFRoaXMgaXMgdXNlZnVsIHRvICJtb3ZlIGNvZGUiIHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uIGluIGEgZmlsZS4KICAgICAiIiIKLSAgICBpZiAnbGluZW5vJyBpbiBub2RlLl9hdHRyaWJ1dGVzOgotICAgICAgICBub2RlLmxpbmVubyA9IGdldGF0dHIobm9kZSwgJ2xpbmVubycsIDApICsgbgogICAgIGZvciBjaGlsZCBpbiB3YWxrKG5vZGUpOgogICAgICAgICBpZiAnbGluZW5vJyBpbiBjaGlsZC5fYXR0cmlidXRlczoKICAgICAgICAgICAgIGNoaWxkLmxpbmVubyA9IGdldGF0dHIoY2hpbGQsICdsaW5lbm8nLCAwKSArIG4KQEAgLTE5Miw5ICsyMDIsOSBAQAogCiBkZWYgd2Fsayhub2RlKToKICAgICAiIiIKLSAgICBSZWN1cnNpdmVseSB5aWVsZCBhbGwgY2hpbGQgbm9kZXMgb2YgKm5vZGUqLCBpbiBubyBzcGVjaWZpZWQgb3JkZXIuICBUaGlzIGlzCi0gICAgdXNlZnVsIGlmIHlvdSBvbmx5IHdhbnQgdG8gbW9kaWZ5IG5vZGVzIGluIHBsYWNlIGFuZCBkb24ndCBjYXJlIGFib3V0IHRoZQotICAgIGNvbnRleHQuCisgICAgUmVjdXJzaXZlbHkgeWllbGQgYWxsIGRlc2NlbmRhbnQgbm9kZXMgaW4gdGhlIHRyZWUgc3RhcnRpbmcgYXQgKm5vZGUqCisgICAgKGluY2x1ZGluZyAqbm9kZSogaXRzZWxmKSwgaW4gbm8gc3BlY2lmaWVkIG9yZGVyLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91CisgICAgb25seSB3YW50IHRvIG1vZGlmeSBub2RlcyBpbiBwbGFjZSBhbmQgZG9uJ3QgY2FyZSBhYm91dCB0aGUgY29udGV4dC4KICAgICAiIiIKICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQogICAgIHRvZG8gPSBkZXF1ZShbbm9kZV0pCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNvcmUucHkgYi9MaWIvYXN5bmNvcmUucHkKaW5kZXggYjZlYjY3ZS4uMWE2MjNkYiAxMDA2NDQKLS0tIGEvTGliL2FzeW5jb3JlLnB5CisrKyBiL0xpYi9hc3luY29yZS5weQpAQCAtNTAsMTAgKzUwLDE1IEBACiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQoraW1wb3J0IHdhcm5pbmdzCiAKIGltcG9ydCBvcwotZnJvbSBlcnJubyBpbXBvcnQgRUFMUkVBRFksIEVJTlBST0dSRVNTLCBFV09VTERCTE9DSywgRUNPTk5SRVNFVCwgXAotICAgICBFTk9UQ09OTiwgRVNIVVRET1dOLCBFSU5UUiwgRUlTQ09OTiwgRUJBREYsIEVDT05OQUJPUlRFRCwgZXJyb3Jjb2RlCitmcm9tIGVycm5vIGltcG9ydCBFQUxSRUFEWSwgRUlOUFJPR1JFU1MsIEVXT1VMREJMT0NLLCBFQ09OTlJFU0VULCBFSU5WQUwsIFwKKyAgICAgRU5PVENPTk4sIEVTSFVURE9XTiwgRUlOVFIsIEVJU0NPTk4sIEVCQURGLCBFQ09OTkFCT1JURUQsIEVQSVBFLCBFQUdBSU4sIFwKKyAgICAgZXJyb3Jjb2RlCisKK19ESVNDT05ORUNURUQgPSBmcm96ZW5zZXQoKEVDT05OUkVTRVQsIEVOT1RDT05OLCBFU0hVVERPV04sIEVDT05OQUJPUlRFRCwgRVBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBFQkFERikpCiAKIHRyeToKICAgICBzb2NrZXRfbWFwCkBAIC0xMDgsOCArMTEzLDcgQEAKICAgICAgICAgaWYgZmxhZ3MgJiAoc2VsZWN0LlBPTExIVVAgfCBzZWxlY3QuUE9MTEVSUiB8IHNlbGVjdC5QT0xMTlZBTCk6CiAgICAgICAgICAgICBvYmouaGFuZGxlX2Nsb3NlKCkKICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlOgotICAgICAgICBpZiBlLmFyZ3NbMF0gbm90IGluIChFQkFERiwgRUNPTk5SRVNFVCwgRU5PVENPTk4sIEVTSFVURE9XTiwKLUVDT05OQUJPUlRFRCk6CisgICAgICAgIGlmIGUuYXJnc1swXSBub3QgaW4gX0RJU0NPTk5FQ1RFRDoKICAgICAgICAgICAgIG9iai5oYW5kbGVfZXJyb3IoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb2JqLmhhbmRsZV9jbG9zZSgpCkBAIC0yNjgsNiArMjcyLDggQEAKICAgICAgICAgICAgICAgICBzdGF0dXMuYXBwZW5kKHJlcHIoc2VsZi5hZGRyKSkKICAgICAgICAgcmV0dXJuICc8JXMgYXQgJSN4PicgJSAoJyAnLmpvaW4oc3RhdHVzKSwgaWQoc2VsZikpCiAKKyAgICBfX3N0cl9fID0gX19yZXByX18KKwogICAgIGRlZiBhZGRfY2hhbm5lbChzZWxmLCBtYXA9Tm9uZSk6CiAgICAgICAgICNzZWxmLmxvZ19pbmZvKCdhZGRpbmcgY2hhbm5lbCAlcycgJSBzZWxmKQogICAgICAgICBpZiBtYXAgaXMgTm9uZToKQEAgLTMzNSw4ICszNDEsOCBAQAogICAgIGRlZiBjb25uZWN0KHNlbGYsIGFkZHJlc3MpOgogICAgICAgICBzZWxmLmNvbm5lY3RlZCA9IEZhbHNlCiAgICAgICAgIGVyciA9IHNlbGYuc29ja2V0LmNvbm5lY3RfZXgoYWRkcmVzcykKLSAgICAgICAgIyBYWFggU2hvdWxkIGludGVycHJldCBXaW5zb2NrIHJldHVybiB2YWx1ZXMKLSAgICAgICAgaWYgZXJyIGluIChFSU5QUk9HUkVTUywgRUFMUkVBRFksIEVXT1VMREJMT0NLKToKKyAgICAgICAgaWYgZXJyIGluIChFSU5QUk9HUkVTUywgRUFMUkVBRFksIEVXT1VMREJMT0NLKSBcCisgICAgICAgIG9yIGVyciA9PSBFSU5WQUwgYW5kIG9zLm5hbWUgaW4gKCdudCcsICdjZScpOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIGVyciBpbiAoMCwgRUlTQ09OTik6CiAgICAgICAgICAgICBzZWxmLmFkZHIgPSBhZGRyZXNzCkBAIC0zNDgsMTIgKzM1NCwxNSBAQAogICAgICAgICAjIFhYWCBjYW4gcmV0dXJuIGVpdGhlciBhbiBhZGRyZXNzIHBhaXIgb3IgTm9uZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKLSAgICAgICAgICAgIHJldHVybiBjb25uLCBhZGRyCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHdoeToKLSAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdID09IEVXT1VMREJMT0NLOgotICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gaW4gKEVXT1VMREJMT0NLLCBFQ09OTkFCT1JURUQsIEVBR0FJTik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjb25uLCBhZGRyCiAKICAgICBkZWYgc2VuZChzZWxmLCBkYXRhKToKICAgICAgICAgdHJ5OgpAQCAtMzYyLDcgKzM3MSw3IEBACiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHdoeToKICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdID09IEVXT1VMREJMT0NLOgogICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICBlbGlmIHdoeS5hcmdzWzBdIGluIChFQ09OTlJFU0VULCBFTk9UQ09OTiwgRVNIVVRET1dOLCBFQ09OTkFCT1JURUQpOgorICAgICAgICAgICAgZWxpZiB3aHkuYXJnc1swXSBpbiBfRElTQ09OTkVDVEVEOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgZWxzZToKQEAgLTM4MCw3ICszODksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHdoeToKICAgICAgICAgICAgICMgd2luc29jayBzb21ldGltZXMgdGhyb3dzIEVOT1RDT05OCi0gICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBpbiBbRUNPTk5SRVNFVCwgRU5PVENPTk4sIEVTSFVURE9XTiwgRUNPTk5BQk9SVEVEXToKKyAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIGluIF9ESVNDT05ORUNURUQ6CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiAnJwogICAgICAgICAgICAgZWxzZToKQEAgLTQwMCwxMCArNDA5LDE1IEBACiAgICAgIyByZWZlcmVuY2VzIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnNvY2tldCwgYXR0cikKKyAgICAgICAgICAgIHJldGF0dHIgPSBnZXRhdHRyKHNlbGYuc29ja2V0LCBhdHRyKQogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJXMgaW5zdGFuY2UgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJShzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0cikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAiJShtZSlzLiUoYXR0cilzIGlzIGRlcHJlY2F0ZWQuIFVzZSAlKG1lKXMuc29ja2V0LiUoYXR0cilzICIgXAorICAgICAgICAgICAgICAgICAgImluc3RlYWQuIiAlIHsnbWUnOiBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgJ2F0dHInOmF0dHJ9CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgICAgICByZXR1cm4gcmV0YXR0cgogCiAgICAgIyBsb2cgYW5kIGxvZ19pbmZvIG1heSBiZSBvdmVycmlkZGVuIHRvIHByb3ZpZGUgbW9yZSBzb3BoaXN0aWNhdGVkCiAgICAgIyBsb2dnaW5nIGFuZCB3YXJuaW5nIG1ldGhvZHMuIEluIGdlbmVyYWwsIGxvZyBpcyBmb3IgJ2hpdCcgbG9nZ2luZwpAQCAtNDI4LDYgKzQ0Miw5IEBACiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9yZWFkKCkKIAogICAgIGRlZiBoYW5kbGVfY29ubmVjdF9ldmVudChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrZXQuZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0VSUk9SKQorICAgICAgICBpZiBlcnIgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnIsIF9zdHJlcnJvcihlcnIpKQogICAgICAgICBzZWxmLmhhbmRsZV9jb25uZWN0KCkKICAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBUcnVlCiAKZGlmZiAtLWdpdCBhL0xpYi9iYXNlNjQucHkgYi9MaWIvYmFzZTY0LnB5CmluZGV4IDQxYTVlMTQuLjg1MjA0ZGQgMTAwNzU1Ci0tLSBhL0xpYi9iYXNlNjQucHkKKysrIGIvTGliL2Jhc2U2NC5weQpAQCAtMzQzLDcgKzM0Myw4IEBACiAgICAgICAgIGlmIG8gPT0gJy11JzogZnVuYyA9IGRlY29kZQogICAgICAgICBpZiBvID09ICctdCc6IHRlc3QxKCk7IHJldHVybgogICAgIGlmIGFyZ3MgYW5kIGFyZ3NbMF0gIT0gJy0nOgotICAgICAgICBmdW5jKG9wZW4oYXJnc1swXSwgJ3JiJyksIHN5cy5zdGRvdXQpCisgICAgICAgIHdpdGggb3BlbihhcmdzWzBdLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZnVuYyhmLCBzeXMuc3Rkb3V0KQogICAgIGVsc2U6CiAgICAgICAgIGZ1bmMoc3lzLnN0ZGluLCBzeXMuc3Rkb3V0KQogCmRpZmYgLS1naXQgYS9MaWIvYmRiLnB5IGIvTGliL2JkYi5weQppbmRleCA0YTMxNTNjLi42YWFkOTc5IDEwMDY0NAotLS0gYS9MaWIvYmRiLnB5CisrKyBiL0xpYi9iZGIucHkKQEAgLTEsNSArMSw2IEBACiAiIiJEZWJ1Z2dlciBiYXNpY3MiIiIKIAoraW1wb3J0IGZubWF0Y2gKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHR5cGVzCkBAIC0xOSw3ICsyMCw4IEBACiAgICAgVGhlIHN0YW5kYXJkIGRlYnVnZ2VyIGNsYXNzIChwZGIuUGRiKSBpcyBhbiBleGFtcGxlLgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBza2lwPU5vbmUpOgorICAgICAgICBzZWxmLnNraXAgPSBzZXQoc2tpcCkgaWYgc2tpcCBlbHNlIE5vbmUKICAgICAgICAgc2VsZi5icmVha3MgPSB7fQogICAgICAgICBzZWxmLmZuY2FjaGUgPSB7fQogCkBAIC05NCw5ICs5NiwxOCBAQAogICAgICMgbWV0aG9kcywgYnV0IHRoZXkgbWF5IGlmIHRoZXkgd2FudCB0byByZWRlZmluZSB0aGUKICAgICAjIGRlZmluaXRpb24gb2Ygc3RvcHBpbmcgYW5kIGJyZWFrcG9pbnRzLgogCisgICAgZGVmIGlzX3NraXBwZWRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgZm9yIHBhdHRlcm4gaW4gc2VsZi5za2lwOgorICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKG1vZHVsZV9uYW1lLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKwogICAgIGRlZiBzdG9wX2hlcmUoc2VsZiwgZnJhbWUpOgogICAgICAgICAjIChDVCkgc3RvcGZyYW1lIG1heSBub3cgYWxzbyBiZSBOb25lLCBzZWUgZGlzcGF0Y2hfY2FsbC4KICAgICAgICAgIyAoQ1QpIHRoZSBmb3JtZXIgdGVzdCBmb3IgTm9uZSBpcyB0aGVyZWZvcmUgcmVtb3ZlZCBmcm9tIGhlcmUuCisgICAgICAgIGlmIHNlbGYuc2tpcCBhbmQgXAorICAgICAgICAgICAgICAgc2VsZi5pc19za2lwcGVkX21vZHVsZShmcmFtZS5mX2dsb2JhbHMuZ2V0KCdfX25hbWVfXycpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBpZiBmcmFtZSBpcyBzZWxmLnN0b3BmcmFtZToKICAgICAgICAgICAgIGlmIHNlbGYuc3RvcGxpbmVubyA9PSAtMToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTIzOSw2ICsyNTAsMTIgQEAKICAgICAgICAgICAgIGxpc3QuYXBwZW5kKGxpbmVubykKICAgICAgICAgYnAgPSBCcmVha3BvaW50KGZpbGVuYW1lLCBsaW5lbm8sIHRlbXBvcmFyeSwgY29uZCwgZnVuY25hbWUpCiAKKyAgICBkZWYgX3BydW5lX2JyZWFrcyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKKyAgICAgICAgaWYgKGZpbGVuYW1lLCBsaW5lbm8pIG5vdCBpbiBCcmVha3BvaW50LmJwbGlzdDoKKyAgICAgICAgICAgIHNlbGYuYnJlYWtzW2ZpbGVuYW1lXS5yZW1vdmUobGluZW5vKQorICAgICAgICBpZiBub3Qgc2VsZi5icmVha3NbZmlsZW5hbWVdOgorICAgICAgICAgICAgZGVsIHNlbGYuYnJlYWtzW2ZpbGVuYW1lXQorCiAgICAgZGVmIGNsZWFyX2JyZWFrKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pOgogICAgICAgICBmaWxlbmFtZSA9IHNlbGYuY2Fub25pYyhmaWxlbmFtZSkKICAgICAgICAgaWYgbm90IGZpbGVuYW1lIGluIHNlbGYuYnJlYWtzOgpAQCAtMjUwLDEwICsyNjcsNyBAQAogICAgICAgICAjIHBhaXIsIHRoZW4gcmVtb3ZlIHRoZSBicmVha3MgZW50cnkKICAgICAgICAgZm9yIGJwIGluIEJyZWFrcG9pbnQuYnBsaXN0W2ZpbGVuYW1lLCBsaW5lbm9dWzpdOgogICAgICAgICAgICAgYnAuZGVsZXRlTWUoKQotICAgICAgICBpZiBub3QgQnJlYWtwb2ludC5icGxpc3QuaGFzX2tleSgoZmlsZW5hbWUsIGxpbmVubykpOgotICAgICAgICAgICAgc2VsZi5icmVha3NbZmlsZW5hbWVdLnJlbW92ZShsaW5lbm8pCi0gICAgICAgIGlmIG5vdCBzZWxmLmJyZWFrc1tmaWxlbmFtZV06Ci0gICAgICAgICAgICBkZWwgc2VsZi5icmVha3NbZmlsZW5hbWVdCisgICAgICAgIHNlbGYuX3BydW5lX2JyZWFrcyhmaWxlbmFtZSwgbGluZW5vKQogCiAgICAgZGVmIGNsZWFyX2JwYnludW1iZXIoc2VsZiwgYXJnKToKICAgICAgICAgdHJ5OgpAQCAtMjY2LDcgKzI4MCw4IEBACiAgICAgICAgICAgICByZXR1cm4gJ0JyZWFrcG9pbnQgbnVtYmVyICglZCkgb3V0IG9mIHJhbmdlJyAlIG51bWJlcgogICAgICAgICBpZiBub3QgYnA6CiAgICAgICAgICAgICByZXR1cm4gJ0JyZWFrcG9pbnQgKCVkKSBhbHJlYWR5IGRlbGV0ZWQnICUgbnVtYmVyCi0gICAgICAgIHNlbGYuY2xlYXJfYnJlYWsoYnAuZmlsZSwgYnAubGluZSkKKyAgICAgICAgYnAuZGVsZXRlTWUoKQorICAgICAgICBzZWxmLl9wcnVuZV9icmVha3MoYnAuZmlsZSwgYnAubGluZSkKIAogICAgIGRlZiBjbGVhcl9hbGxfZmlsZV9icmVha3Moc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICBmaWxlbmFtZSA9IHNlbGYuY2Fub25pYyhmaWxlbmFtZSkKQEAgLTQ1Nyw3ICs0NzIsNyBAQAogICAgICAgICBCcmVha3BvaW50Lm5leHQgPSBCcmVha3BvaW50Lm5leHQgKyAxCiAgICAgICAgICMgQnVpbGQgdGhlIHR3byBsaXN0cwogICAgICAgICBzZWxmLmJwYnludW1iZXIuYXBwZW5kKHNlbGYpCi0gICAgICAgIGlmIHNlbGYuYnBsaXN0Lmhhc19rZXkoKGZpbGUsIGxpbmUpKToKKyAgICAgICAgaWYgKGZpbGUsIGxpbmUpIGluIHNlbGYuYnBsaXN0OgogICAgICAgICAgICAgc2VsZi5icGxpc3RbZmlsZSwgbGluZV0uYXBwZW5kKHNlbGYpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmJwbGlzdFtmaWxlLCBsaW5lXSA9IFtzZWxmXQpkaWZmIC0tZ2l0IGEvTGliL2JpbmhleC5weSBiL0xpYi9iaW5oZXgucHkKaW5kZXggYmQ0ZThiMy4uOGFiYzlmMyAxMDA2NDQKLS0tIGEvTGliL2JpbmhleC5weQorKysgYi9MaWIvYmluaGV4LnB5CkBAIC0xNzUsOSArMTc1LDYgQEAKICAgICAgICAgaWYgdHlwZShvZnApID09IHR5cGUoJycpOgogICAgICAgICAgICAgb2ZuYW1lID0gb2ZwCiAgICAgICAgICAgICBvZnAgPSBvcGVuKG9mbmFtZSwgJ3cnKQotICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICAgICAgICAgICAgICBmc3MgPSBGU1NwZWMob2ZuYW1lKQotICAgICAgICAgICAgICAgIGZzcy5TZXRDcmVhdG9yVHlwZSgnQm5IcScsICdURVhUJykKICAgICAgICAgb2ZwLndyaXRlKCcoVGhpcyBmaWxlIG11c3QgYmUgY29udmVydGVkIHdpdGggQmluSGV4IDQuMClcblxuOicpCiAgICAgICAgIGhxeGVyID0gX0hxeGNvZGVyZW5naW5lKG9mcCkKICAgICAgICAgc2VsZi5vZnAgPSBfUmxlY29kZXJlbmdpbmUoaHF4ZXIpCkBAIC00NzgsOSArNDc1LDYgQEAKICAgICBmaW5mbyA9IGlmcC5GSW5mbwogICAgIGlmIG5vdCBvdXQ6CiAgICAgICAgIG91dCA9IGlmcC5GTmFtZQotICAgIGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgIG9mc3MgPSBGU1NwZWMob3V0KQotICAgICAgICBvdXQgPSBvZnNzLmFzX3BhdGhuYW1lKCkKIAogICAgIG9mcCA9IG9wZW4ob3V0LCAnd2InKQogICAgICMgWFhYWCBEbyB0cmFuc2xhdGlvbiBvbiBub24tbWFjIHN5c3RlbXMKQEAgLTUwMSwxMyArNDk1LDYgQEAKICAgICAgICAgICAgIG9mcC53cml0ZShkKQogICAgICAgICBvZnAuY2xvc2UoKQogCi0gICAgaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICAgICAgbmZpbmZvID0gb2Zzcy5HZXRGSW5mbygpCi0gICAgICAgIG5maW5mby5DcmVhdG9yID0gZmluZm8uQ3JlYXRvcgotICAgICAgICBuZmluZm8uVHlwZSA9IGZpbmZvLlR5cGUKLSAgICAgICAgbmZpbmZvLkZsYWdzID0gZmluZm8uRmxhZ3MKLSAgICAgICAgb2Zzcy5TZXRGSW5mbyhuZmluZm8pCi0KICAgICBpZnAuY2xvc2UoKQogCiBkZWYgX3Rlc3QoKToKZGlmZiAtLWdpdCBhL0xpYi9iaXNlY3QucHkgYi9MaWIvYmlzZWN0LnB5CmluZGV4IGZlODQyNTUuLjRhNGQwNTIgMTAwNjQ0Ci0tLSBhL0xpYi9iaXNlY3QucHkKKysrIGIvTGliL2Jpc2VjdC5weQpAQCAtODcsNiArODcsNiBAQAogCiAjIE92ZXJ3cml0ZSBhYm92ZSBkZWZpbml0aW9ucyB3aXRoIGEgZmFzdCBDIGltcGxlbWVudGF0aW9uCiB0cnk6Ci0gICAgZnJvbSBfYmlzZWN0IGltcG9ydCBiaXNlY3RfcmlnaHQsIGJpc2VjdF9sZWZ0LCBpbnNvcnRfbGVmdCwgaW5zb3J0X3JpZ2h0LCBpbnNvcnQsIGJpc2VjdAorICAgIGZyb20gX2Jpc2VjdCBpbXBvcnQgKgogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi9fX2luaXRfXy5weSBiL0xpYi9ic2RkYi9fX2luaXRfXy5weQppbmRleCAwN2M3YzlkLi5lZDRkZWVhIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvX19pbml0X18ucHkKKysrIGIvTGliL2JzZGRiL19faW5pdF9fLnB5CkBAIC0zMyw3ICszMyw3IEBACiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKLSIiIlN1cHBvcnQgZm9yIEJlcmtlbGV5IERCIDQuMCB0aHJvdWdoIDQuNyB3aXRoIGEgc2ltcGxlIGludGVyZmFjZS4KKyIiIlN1cHBvcnQgZm9yIEJlcmtlbGV5IERCIDQuMSB0aHJvdWdoIDQuOCB3aXRoIGEgc2ltcGxlIGludGVyZmFjZS4KIAogRm9yIHRoZSBmdWxsIGZlYXR1cmVkIG9iamVjdCBvcmllbnRlZCBpbnRlcmZhY2UgdXNlIHRoZSBic2RkYi5kYiBtb2R1bGUKIGluc3RlYWQuICBJdCBtaXJyb3JzIHRoZSBPcmFjbGUgQmVya2VsZXkgREIgQyBBUEkuCkBAIC00MiwxMSArNDIsMTQgQEAKIGltcG9ydCBzeXMKIGFic29sdXRlX2ltcG9ydCA9IChzeXMudmVyc2lvbl9pbmZvWzBdID49IDMpCiAKLWlmIHN5cy5weTNrd2FybmluZzoKK2lmIChzeXMudmVyc2lvbl9pbmZvID49ICgyLCA2KSkgYW5kIChzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDApKSA6CiAgICAgaW1wb3J0IHdhcm5pbmdzCi0gICAgd2FybmluZ3Mud2FybnB5M2soImluIDMueCwgdGhlIGJzZGRiIG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkOyAiCi0gICAgICAgICAgICAgICAgICAgICAgInBsZWFzZSB1c2UgdGhlIHB5YnNkZGIgcHJvamVjdCBpbnN0ZWFkIiwKLSAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgaWYgc3lzLnB5M2t3YXJuaW5nIGFuZCAoX19uYW1lX18gIT0gJ2JzZGRiMycpIDoKKyAgICAgICAgd2FybmluZ3Mud2FybnB5M2soImluIDMueCwgdGhlIGJzZGRiIG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJwbGVhc2UgdXNlIHRoZSBweWJzZGRiIHByb2plY3QgaW5zdGVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4qQ09iamVjdC4qIiwgRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJic2RkYi5fX2luaXRfXyIpCiAKIHRyeToKICAgICBpZiBfX25hbWVfXyA9PSAnYnNkZGIzJzoKQEAgLTgxLDcgKzg0LDcgQEAKIAogZnJvbSB3ZWFrcmVmIGltcG9ydCByZWYKIAotaWYgc3lzLnZlcnNpb25faW5mb1swOjJdIDw9ICgyLCA1KSA6CitpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKICAgICBpbXBvcnQgVXNlckRpY3QKICAgICBNdXRhYmxlTWFwcGluZyA9IFVzZXJEaWN0LkRpY3RNaXhpbgogZWxzZSA6CkBAIC0yNTYsNyArMjU5LDcgQEAKICAgICAgICAgc2VsZi5fY2hlY2tPcGVuKCkKICAgICAgICAgcmV0dXJuIF9EZWFkbG9ja1dyYXAobGFtYmRhOiBsZW4oc2VsZi5kYikpICAjIGxlbihzZWxmLmRiKQogCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1swOjJdID49ICgyLCA2KSA6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMiwgNikgOgogICAgICAgICBkZWYgX19yZXByX18oc2VsZikgOgogICAgICAgICAgICAgaWYgc2VsZi5pc09wZW4oKSA6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcHIoZGljdChfRGVhZGxvY2tXcmFwKHNlbGYuZGIuaXRlbXMpKSkKQEAgLTQ0Miw4ICs0NDUsMTAgQEAKICMgQmVya2VsZXkgREIgd2FzIHRvby4KIAogdHJ5OgotICAgIGltcG9ydCB0aHJlYWQKLSAgICBkZWwgdGhyZWFkCisgICAgIyAydG8zIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyAiaW1wb3J0IHRocmVhZCIgdG8gImltcG9ydCBfdGhyZWFkIgorICAgIGltcG9ydCB0aHJlYWQgYXMgVAorICAgIGRlbCBUCisKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBkYi5EQl9USFJFQUQgPSAwCiAKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi9kYm9iai5weSBiL0xpYi9ic2RkYi9kYm9iai5weQppbmRleCAxZTQyMzk3Li5jN2M3MzIyIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvZGJvYmoucHkKKysrIGIvTGliL2JzZGRiL2Rib2JqLnB5CkBAIC0yOSw3ICsyOSw3IEBACiBlbHNlIDoKICAgICBpbXBvcnQgZGIKIAotaWYgc3lzLnZlcnNpb25faW5mb1swOjJdIDw9ICgyLCA1KSA6CitpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKICAgICB0cnk6CiAgICAgICAgIGZyb20gVXNlckRpY3QgaW1wb3J0IERpY3RNaXhpbgogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTExMCwxNSArMTEwLDE3IEBACiAgICAgZGVmIGxvZ19zdGF0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiBzZWxmLl9jb2JqLmxvZ19zdGF0KCphcmdzLCAqKmt3YXJncykKIAotICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwxKToKLSAgICAgICAgZGVmIGRicmVtb3ZlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fY29iai5kYnJlbW92ZSgqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGRlZiBkYnJlbmFtZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvYmouZGJyZW5hbWUoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBkZWYgc2V0X2VuY3J5cHQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2JqLnNldF9lbmNyeXB0KCphcmdzLCAqKmt3YXJncykKKyAgICBkZWYgZGJyZW1vdmUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvYmouZGJyZW1vdmUoKmFyZ3MsICoqa3dhcmdzKQorICAgIGRlZiBkYnJlbmFtZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29iai5kYnJlbmFtZSgqYXJncywgKiprd2FyZ3MpCisgICAgZGVmIHNldF9lbmNyeXB0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2JqLnNldF9lbmNyeXB0KCphcmdzLCAqKmt3YXJncykKIAogICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCw0KToKKyAgICAgICAgZGVmIGZpbGVpZF9yZXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvYmouZmlsZWlkX3Jlc2V0KCphcmdzLCAqKmt3YXJncykKKwogICAgICAgICBkZWYgbHNuX3Jlc2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29iai5sc25fcmVzZXQoKmFyZ3MsICoqa3dhcmdzKQogCkBAIC0xMzgsNyArMTQwLDcgQEAKICAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgYXJnKToKICAgICAgICAgZGVsIHNlbGYuX2NvYmpbYXJnXQogCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1swOjJdID49ICgyLCA2KSA6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMiwgNikgOgogICAgICAgICBkZWYgX19pdGVyX18oc2VsZikgOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvYmouX19pdGVyX18oKQogCkBAIC0yMjksOSArMjMxLDggQEAKICAgICBkZWYgc2V0X2dldF9yZXR1cm5zX25vbmUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NvYmouc2V0X2dldF9yZXR1cm5zX25vbmUoKmFyZ3MsICoqa3dhcmdzKQogCi0gICAgaWYgZGIudmVyc2lvbigpID49ICg0LDEpOgotICAgICAgICBkZWYgc2V0X2VuY3J5cHQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2JqLnNldF9lbmNyeXB0KCphcmdzLCAqKmt3YXJncykKKyAgICBkZWYgc2V0X2VuY3J5cHQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvYmouc2V0X2VuY3J5cHQoKmFyZ3MsICoqa3dhcmdzKQogCiAKIGNsYXNzIERCU2VxdWVuY2U6CmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvZGJzaGVsdmUucHkgYi9MaWIvYnNkZGIvZGJzaGVsdmUucHkKaW5kZXggN2M4NzViNC4uZTNmNmQ0YyAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL2Ric2hlbHZlLnB5CisrKyBiL0xpYi9ic2RkYi9kYnNoZWx2ZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDAxIGJ5IFRvdGFsIENvbnRyb2wgU29mdHdhcmUKICMgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZApAQCAtMjksOSArMjksNiBAQAogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWltcG9ydCBjUGlja2xlCi1pbXBvcnQgc3lzCi0KIGltcG9ydCBzeXMKIGFic29sdXRlX2ltcG9ydCA9IChzeXMudmVyc2lvbl9pbmZvWzBdID49IDMpCiBpZiBhYnNvbHV0ZV9pbXBvcnQgOgpAQCAtNDAsMTMgKzM3LDQxIEBACiBlbHNlIDoKICAgICBpbXBvcnQgZGIKIAoraWYgc3lzLnZlcnNpb25faW5mb1swXSA+PSAzIDoKKyAgICBpbXBvcnQgY1BpY2tsZSAgIyBXaWxsIGJlIGNvbnZlcnRlZCB0byAicGlja2xlIiBieSAiMnRvMyIKK2Vsc2UgOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICBpbXBvcnQgY1BpY2tsZQorICAgIGVsc2UgOgorICAgICAgICAjIFdoZW4gd2UgZHJvcCBzdXBwb3J0IGZvciBweXRob24gMi4zIGFuZCAyLjQKKyAgICAgICAgIyB3ZSBjb3VsZCB1c2U6IChpbiAyLjUgd2UgbmVlZCBhIF9fZnV0dXJlX18gc3RhdGVtZW50KQorICAgICAgICAjCisgICAgICAgICMgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAjICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncyguLi4pCisgICAgICAgICMgICAgICAgIC4uLgorICAgICAgICAjCisgICAgICAgICMgV2UgY2FuIG5vdCB1c2UgIndpdGgiIGFzIGlzLCBiZWNhdXNlIGl0IHdvdWxkIGJlIGludmFsaWQgc3ludGF4CisgICAgICAgICMgaW4gcHl0aG9uIDIuMywgMi40IGFuZCAod2l0aCBubyBfX2Z1dHVyZV9fKSAyLjUuCisgICAgICAgICMgSGVyZSB3ZSBzaW11bGF0ZSAid2l0aCIgZm9sbG93aW5nIFBFUCAzNDMgOgorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgdyA9IHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCkKKyAgICAgICAgdy5fX2VudGVyX18oKQorICAgICAgICB0cnkgOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoJ2lnbm9yZScsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0ndGhlIGNQaWNrbGUgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gUHl0aG9uIDMuMCcsCisgICAgICAgICAgICAgICAgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgaW1wb3J0IGNQaWNrbGUKKyAgICAgICAgZmluYWxseSA6CisgICAgICAgICAgICB3Ll9fZXhpdF9fKCkKKyAgICAgICAgZGVsIHcKKwogI0F0IHZlcnNpb24gMi4zIGNQaWNrbGUgc3dpdGNoZWQgdG8gdXNpbmcgcHJvdG9jb2wgaW5zdGVhZCBvZiBiaW4KLWlmIHN5cy52ZXJzaW9uX2luZm9bOjNdID49ICgyLCAzLCAwKToKK2lmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsIDMpOgogICAgIEhJR0hFU1RfUFJPVE9DT0wgPSBjUGlja2xlLkhJR0hFU1RfUFJPVE9DT0wKICMgSW4gcHl0aG9uIDIuMy4qLCAiY1BpY2tsZS5kdW1wcyIgYWNjZXB0cyBubwogIyBuYW1lZCBwYXJhbWV0ZXJzLiAicGlja2xlLmR1bXBzIiBhY2NlcHRzIHRoZW0sCiAjIHNvIHRoaXMgc2VlbXMgYSBidWcuCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1s6M10gPCAoMiwgNCwgMCk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KToKICAgICAgICAgZGVmIF9kdW1wcyhvYmplY3QsIHByb3RvY29sKToKICAgICAgICAgICAgIHJldHVybiBjUGlja2xlLmR1bXBzKG9iamVjdCwgcHJvdG9jb2wpCiAgICAgZWxzZSA6CkBAIC01OSwxMSArODQsMTYgQEAKICAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMob2JqZWN0LCBiaW49cHJvdG9jb2wpCiAKIAotdHJ5OgotICAgIGZyb20gVXNlckRpY3QgaW1wb3J0IERpY3RNaXhpbgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgRGljdE1peGluIGlzIG5ldyBpbiBQeXRob24gMi4zCi0gICAgY2xhc3MgRGljdE1peGluOiBwYXNzCitpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICB0cnk6CisgICAgICAgIGZyb20gVXNlckRpY3QgaW1wb3J0IERpY3RNaXhpbgorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgIyBEaWN0TWl4aW4gaXMgbmV3IGluIFB5dGhvbiAyLjMKKyAgICAgICAgY2xhc3MgRGljdE1peGluOiBwYXNzCisgICAgTXV0YWJsZU1hcHBpbmcgPSBEaWN0TWl4aW4KK2Vsc2UgOgorICAgIGltcG9ydCBjb2xsZWN0aW9ucworICAgIE11dGFibGVNYXBwaW5nID0gY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMDYsNyArMTM2LDcgQEAKIGNsYXNzIERCU2hlbHZlRXJyb3IoZGIuREJFcnJvcik6IHBhc3MKIAogCi1jbGFzcyBEQlNoZWxmKERpY3RNaXhpbik6CitjbGFzcyBEQlNoZWxmKE11dGFibGVNYXBwaW5nKToKICAgICAiIiJBIHNoZWxmIHRvIGhvbGQgcGlja2xlZCBvYmplY3RzLCBidWlsdCB1cG9uIGEgYnNkZGIgREIgb2JqZWN0LiAgSXQKICAgICBhdXRvbWF0aWNhbGx5IHBpY2tsZXMvdW5waWNrbGVzIGRhdGEgb2JqZWN0cyBnb2luZyB0by9mcm9tIHRoZSBEQi4KICAgICAiIiIKQEAgLTE1Nyw2ICsxODcsMTcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLmRiLmtleXMoKQogCisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMiwgNikgOgorICAgICAgICBkZWYgX19pdGVyX18oc2VsZikgOiAgIyBYWFg6IExvYWQgYWxsIGtleXMgaW4gbWVtb3J5IDotKAorICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5kYi5rZXlzKCkgOgorICAgICAgICAgICAgICAgIHlpZWxkIGsKKworICAgICAgICAjIERvIHRoaXMgd2hlbiAiREIiICBzdXBwb3J0IGl0ZXJhdGlvbgorICAgICAgICAjIE9yIGlzIGl0IGVub3VnaCB0byBwYXNzIHRocnUgImdldGF0dHIiPworICAgICAgICAjCisgICAgICAgICMgZGVmIF9faXRlcl9fKHNlbGYpIDoKKyAgICAgICAgIyAgICByZXR1cm4gc2VsZi5kYi5fX2l0ZXJfXygpCisKIAogICAgIGRlZiBvcGVuKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHNlbGYuZGIub3BlbigqYXJncywgKiprd2FyZ3MpCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvZGJ0YWJsZXMucHkgYi9MaWIvYnNkZGIvZGJ0YWJsZXMucHkKaW5kZXggMWZjM2FlZi4uM2ViYzY4ZCAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL2RidGFibGVzLnB5CisrKyBiL0xpYi9ic2RkYi9kYnRhYmxlcy5weQpAQCAtMjIsNyArMjIsMzUgQEAKIGltcG9ydCBjb3B5CiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc3RydWN0Ci1pbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKKworCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDMgOgorICAgIGltcG9ydCBwaWNrbGUKK2Vsc2UgOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKKyAgICBlbHNlIDoKKyAgICAgICAgIyBXaGVuIHdlIGRyb3Agc3VwcG9ydCBmb3IgcHl0aG9uIDIuMyBhbmQgMi40CisgICAgICAgICMgd2UgY291bGQgdXNlOiAoaW4gMi41IHdlIG5lZWQgYSBfX2Z1dHVyZV9fIHN0YXRlbWVudCkKKyAgICAgICAgIworICAgICAgICAjICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgIyAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoLi4uKQorICAgICAgICAjICAgICAgICAuLi4KKyAgICAgICAgIworICAgICAgICAjIFdlIGNhbiBub3QgdXNlICJ3aXRoIiBhcyBpcywgYmVjYXVzZSBpdCB3b3VsZCBiZSBpbnZhbGlkIHN5bnRheAorICAgICAgICAjIGluIHB5dGhvbiAyLjMsIDIuNCBhbmQgKHdpdGggbm8gX19mdXR1cmVfXykgMi41LgorICAgICAgICAjIEhlcmUgd2Ugc2ltdWxhdGUgIndpdGgiIGZvbGxvd2luZyBQRVAgMzQzIDoKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHcgPSB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpCisgICAgICAgIHcuX19lbnRlcl9fKCkKKyAgICAgICAgdHJ5IDoKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9J3RoZSBjUGlja2xlIG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLjAnLAorICAgICAgICAgICAgICAgIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorICAgICAgICBmaW5hbGx5IDoKKyAgICAgICAgICAgIHcuX19leGl0X18oKQorICAgICAgICBkZWwgdwogCiB0cnk6CiAgICAgIyBGb3IgUHl0aG9ucyB3L2Rpc3R1dGlscyBweWJzZGRiCkBAIC0zMSwxMiArNTksNiBAQAogICAgICMgRm9yIFB5dGhvbiAyLjMKICAgICBmcm9tIGJzZGRiIGltcG9ydCBkYgogCi0jIFhYWChubm9yd2l0eik6IGlzIHRoaXMgY29ycmVjdD8gREJJbmNvbXBsZXRlRXJyb3IgaXMgY29uZGl0aW9uYWwgaW4gX2JzZGRiLmMKLWlmIG5vdCBoYXNhdHRyKGRiLCJEQkluY29tcGxldGVFcnJvciIpIDoKLSAgICBjbGFzcyBEQkluY29tcGxldGVFcnJvcihFeGNlcHRpb24pOgotICAgICAgICBwYXNzCi0gICAgZGIuREJJbmNvbXBsZXRlRXJyb3IgPSBEQkluY29tcGxldGVFcnJvcgotCiBjbGFzcyBUYWJsZURCRXJyb3IoU3RhbmRhcmRFcnJvcik6CiAgICAgcGFzcwogY2xhc3MgVGFibGVBbHJlYWR5RXhpc3RzKFRhYmxlREJFcnJvcik6CkBAIC0yNjEsMTYgKzI4MywxMCBAQAogICAgICAgICAgICAgc2VsZi5lbnYgPSBOb25lCiAKICAgICBkZWYgY2hlY2twb2ludChzZWxmLCBtaW5zPTApOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmVudi50eG5fY2hlY2twb2ludChtaW5zKQotICAgICAgICBleGNlcHQgZGIuREJJbmNvbXBsZXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuZW52LnR4bl9jaGVja3BvaW50KG1pbnMpCiAKICAgICBkZWYgc3luYyhzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5kYi5zeW5jKCkKLSAgICAgICAgZXhjZXB0IGRiLkRCSW5jb21wbGV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmRiLnN5bmMoKQogCiAgICAgZGVmIF9kYl9wcmludChzZWxmKSA6CiAgICAgICAgICIiIlByaW50IHRoZSBkYXRhYmFzZSB0byBzdGRvdXQgZm9yIGRlYnVnZ2luZyIiIgpAQCAtMzk4LDcgKzQxNCw3IEBACiAgICAgICAgICAgICAgICAgIyBjb2x1bW4gbmFtZXMKICAgICAgICAgICAgICAgICBuZXdjb2x1bW5saXN0ID0gY29weS5jb3B5KG9sZGNvbHVtbmxpc3QpCiAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29sdW1uczoKLSAgICAgICAgICAgICAgICAgICAgaWYgYyBub3QgaW4gb2xkY29sdW1uaGFzaDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGMgaW4gb2xkY29sdW1uaGFzaDoKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2NvbHVtbmxpc3QuYXBwZW5kKGMpCiAKICAgICAgICAgICAgICAgICAjIHN0b3JlIHRoZSB0YWJsZSdzIG5ldyBleHRlbmRlZCBjb2x1bW4gbGlzdApAQCAtNjE1LDcgKzYzMSw3IEBACiAgICAgICAgICAgYXJndW1lbnQgYW5kIHJldHVybmluZyBhIGJvb2xlYW4uCiAgICAgICAgICIiIgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiB0YWJsZSBub3QgaW4gc2VsZi5fX3RhYmxlY29sdW1uczoKKyAgICAgICAgICAgIGlmIG5vdCB0YWJsZSBpbiBzZWxmLl9fdGFibGVjb2x1bW5zOgogICAgICAgICAgICAgICAgIHNlbGYuX19sb2FkX2NvbHVtbl9pbmZvKHRhYmxlKQogICAgICAgICAgICAgaWYgY29sdW1ucyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBzZWxmLl9fdGFibGVjb2x1bW5zW3RhYmxlXQpAQCAtNjU5LDYgKzY3NSwxMyBAQAogICAgICAgICAgICAgYSA9IGF0dXBsZVsxXQogICAgICAgICAgICAgYiA9IGJ0dXBsZVsxXQogICAgICAgICAgICAgaWYgdHlwZShhKSBpcyB0eXBlKGIpOgorCisgICAgICAgICAgICAgICAgIyBOZWVkZWQgZm9yIHB5dGhvbiAzLiAiY21wIiB2YW5pc2hlZCBpbiAzLjAuMQorICAgICAgICAgICAgICAgIGRlZiBjbXAoYSwgYikgOgorICAgICAgICAgICAgICAgICAgICBpZiBhPT1iIDogcmV0dXJuIDAKKyAgICAgICAgICAgICAgICAgICAgaWYgYTxiIDogcmV0dXJuIC0xCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGEsIFByZWZpeENvbmQpIGFuZCBpc2luc3RhbmNlKGIsIFByZWZpeENvbmQpOgogICAgICAgICAgICAgICAgICAgICAjIGxvbmdlc3QgcHJlZml4IGZpcnN0CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbXAobGVuKGIucHJlZml4KSwgbGVuKGEucHJlZml4KSkKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfYWxsLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9hbGwucHkKaW5kZXggMzkyMzFjNi4uZTlmZTYxOCAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9hbGwucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9hbGwucHkKQEAgLTE1LDYgKzE1LDUxIEBACiBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDMgOgogICAgIGNoYXJzZXQgPSAiaXNvODg1OS0xIiAgIyBGdWxsIDggYml0CiAKKyAgICBjbGFzcyBsb2djdXJzb3JfcHkzayhvYmplY3QpIDoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudikgOgorICAgICAgICAgICAgc2VsZi5fbG9nY3Vyc29yID0gZW52LmxvZ19jdXJzb3IoKQorCisgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCB2KSA6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9sb2djdXJzb3IsIHYpCisKKyAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBnZXRhdHRyKHNlbGYuX2xvZ2N1cnNvciwgIm5leHQiKSgpCisgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lIDoKKyAgICAgICAgICAgICAgICB2ID0gKHZbMF0sIHZbMV0uZGVjb2RlKGNoYXJzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHYKKworICAgICAgICBuZXh0ID0gX19uZXh0X18KKworICAgICAgICBkZWYgZmlyc3Qoc2VsZikgOgorICAgICAgICAgICAgdiA9IHNlbGYuX2xvZ2N1cnNvci5maXJzdCgpCisgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lIDoKKyAgICAgICAgICAgICAgICB2ID0gKHZbMF0sIHZbMV0uZGVjb2RlKGNoYXJzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHYKKworICAgICAgICBkZWYgbGFzdChzZWxmKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5fbG9nY3Vyc29yLmxhc3QoKQorICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZSA6CisgICAgICAgICAgICAgICAgdiA9ICh2WzBdLCB2WzFdLmRlY29kZShjaGFyc2V0KSkKKyAgICAgICAgICAgIHJldHVybiB2CisKKyAgICAgICAgZGVmIHByZXYoc2VsZikgOgorICAgICAgICAgICAgdiA9IHNlbGYuX2xvZ2N1cnNvci5wcmV2KCkKKyAgICAgICAgICAgIGlmIHYgaXMgbm90IE5vbmUgOgorICAgICAgICAgICAgICAgIHYgPSAodlswXSwgdlsxXS5kZWNvZGUoY2hhcnNldCkpCisgICAgICAgICAgICByZXR1cm4gdgorCisgICAgICAgIGRlZiBjdXJyZW50KHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLl9sb2djdXJzb3IuY3VycmVudCgpCisgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lIDoKKyAgICAgICAgICAgICAgICB2ID0gKHZbMF0sIHZbMV0uZGVjb2RlKGNoYXJzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHYKKworICAgICAgICBkZWYgc2V0KHNlbGYsIGxzbikgOgorICAgICAgICAgICAgdiA9IHNlbGYuX2xvZ2N1cnNvci5zZXQobHNuKQorICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZSA6CisgICAgICAgICAgICAgICAgdiA9ICh2WzBdLCB2WzFdLmRlY29kZShjaGFyc2V0KSkKKyAgICAgICAgICAgIHJldHVybiB2CisKICAgICBjbGFzcyBjdXJzb3JfcHkzayhvYmplY3QpIDoKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRiLCAqYXJncywgKiprd2FyZ3MpIDoKICAgICAgICAgICAgIHNlbGYuX2RiY3Vyc29yID0gZGIuY3Vyc29yKCphcmdzLCAqKmt3YXJncykKQEAgLTcxLDEyICsxMTYsMTIgQEAKICAgICAgICAgICAgIHYgPSBzZWxmLl9kYmN1cnNvci5uZXh0X25vZHVwKCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXgodikKIAotICAgICAgICBkZWYgcHV0KHNlbGYsIGtleSwgdmFsdWUsIGZsYWdzPTAsIGRsZW49LTEsIGRvZmY9LTEpIDoKKyAgICAgICAgZGVmIHB1dChzZWxmLCBrZXksIGRhdGEsIGZsYWdzPTAsIGRsZW49LTEsIGRvZmY9LTEpIDoKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpIDoKICAgICAgICAgICAgICAgICBrZXkgPSBieXRlcyhrZXksIGNoYXJzZXQpCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpIDoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGJ5dGVzKHZhbHVlLCBjaGFyc2V0KQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiY3Vyc29yLnB1dChrZXksIHZhbHVlLCBmbGFncz1mbGFncywgZGxlbj1kbGVuLAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBzdHIpIDoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGJ5dGVzKGRhdGEsIGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGJjdXJzb3IucHV0KGtleSwgZGF0YSwgZmxhZ3M9ZmxhZ3MsIGRsZW49ZGxlbiwKICAgICAgICAgICAgICAgICAgICAgZG9mZj1kb2ZmKQogCiAgICAgICAgIGRlZiBjdXJyZW50KHNlbGYsIGZsYWdzPTAsIGRsZW49LTEsIGRvZmY9LTEpIDoKQEAgLTIwMywxMiArMjQ4LDI2IEBACiAgICAgICAgICAgICAgICAgayA9IGJ5dGVzKGssIGNoYXJzZXQpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGIuaGFzX2tleShrLCB0eG49dHhuKQogCi0gICAgICAgIGRlZiBwdXQoc2VsZiwga2V5LCB2YWx1ZSwgdHhuPU5vbmUsIGZsYWdzPTAsIGRsZW49LTEsIGRvZmY9LTEpIDoKKyAgICAgICAgZGVmIHNldF9yZV9kZWxpbShzZWxmLCBjKSA6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGMsIHN0cikgOiAgIyBXZSBjYW4gdXNlIGEgbnVtZXJpYyB2YWx1ZSBieXRlIHRvbworICAgICAgICAgICAgICAgIGMgPSBieXRlcyhjLCBjaGFyc2V0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiLnNldF9yZV9kZWxpbShjKQorCisgICAgICAgIGRlZiBzZXRfcmVfcGFkKHNlbGYsIGMpIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYywgc3RyKSA6ICAjIFdlIGNhbiB1c2UgYSBudW1lcmljIHZhbHVlIGJ5dGUgdG9vCisgICAgICAgICAgICAgICAgYyA9IGJ5dGVzKGMsIGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGIuc2V0X3JlX3BhZChjKQorCisgICAgICAgIGRlZiBnZXRfcmVfc291cmNlKHNlbGYpIDoKKyAgICAgICAgICAgIHNvdXJjZSA9IHNlbGYuX2RiLmdldF9yZV9zb3VyY2UoKQorICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5kZWNvZGUoY2hhcnNldCkKKworICAgICAgICBkZWYgcHV0KHNlbGYsIGtleSwgZGF0YSwgdHhuPU5vbmUsIGZsYWdzPTAsIGRsZW49LTEsIGRvZmY9LTEpIDoKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpIDoKICAgICAgICAgICAgICAgICBrZXkgPSBieXRlcyhrZXksIGNoYXJzZXQpCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpIDoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGJ5dGVzKHZhbHVlLCBjaGFyc2V0KQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiLnB1dChrZXksIHZhbHVlLCBmbGFncz1mbGFncywgdHhuPXR4biwgZGxlbj1kbGVuLAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBzdHIpIDoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGJ5dGVzKGRhdGEsIGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGIucHV0KGtleSwgZGF0YSwgZmxhZ3M9ZmxhZ3MsIHR4bj10eG4sIGRsZW49ZGxlbiwKICAgICAgICAgICAgICAgICAgICAgZG9mZj1kb2ZmKQogCiAgICAgICAgIGRlZiBhcHBlbmQoc2VsZiwgdmFsdWUsIHR4bj1Ob25lKSA6CkBAIC0yMjEsNiArMjgwLDExIEBACiAgICAgICAgICAgICAgICAga2V5ID0gYnl0ZXMoa2V5LCBjaGFyc2V0KQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiLmdldF9zaXplKGtleSkKIAorICAgICAgICBkZWYgZXhpc3RzKHNlbGYsIGtleSwgKmFyZ3MsICoqa3dhcmdzKSA6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKSA6CisgICAgICAgICAgICAgICAga2V5ID0gYnl0ZXMoa2V5LCBjaGFyc2V0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiLmV4aXN0cyhrZXksICphcmdzLCAqKmt3YXJncykKKwogICAgICAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD0iTWFnaWNDb29raWUiLCB0eG49Tm9uZSwgZmxhZ3M9MCwgZGxlbj0tMSwgZG9mZj0tMSkgOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cikgOgogICAgICAgICAgICAgICAgIGtleSA9IGJ5dGVzKGtleSwgY2hhcnNldCkKQEAgLTI4OCwxMyArMzUyLDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkuZGVjb2RlKGNoYXJzZXQpCiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZShjaGFyc2V0KQogICAgICAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9jYWxsYmFjayhrZXksIGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgIT0gYnNkZGIuX2RiLkRCX0RPTk9USU5ERVgpIGFuZCBpc2luc3RhbmNlKGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGJ5dGVzKGtleSwgY2hhcnNldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPSBic2RkYi5fZGIuREJfRE9OT1RJTkRFWCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cikgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGJ5dGVzKGtleSwgY2hhcnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGxpc3QpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkyID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiBrZXkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGksIHN0cikgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGJ5dGVzKGksIGNoYXJzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTIuYXBwZW5kKGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5MgogICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5CiAKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYi5hc3NvY2lhdGUoc2Vjb25kYXJ5ZGIuX2RiLAotICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVfY2FsbGJhY2soY2FsbGJhY2spLmNhbGxiYWNrLCBmbGFncz1mbGFncywgdHhuPXR4bikKKyAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlX2NhbGxiYWNrKGNhbGxiYWNrKS5jYWxsYmFjaywgZmxhZ3M9ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIHR4bj10eG4pCiAKICAgICAgICAgZGVmIGN1cnNvcihzZWxmLCB0eG49Tm9uZSwgZmxhZ3M9MCkgOgogICAgICAgICAgICAgcmV0dXJuIGN1cnNvcl9weTNrKHNlbGYuX2RiLCB0eG49dHhuLCBmbGFncz1mbGFncykKQEAgLTMxMCw2ICszODIsMjEgQEAKICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHYpIDoKICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX2RiZW52LCB2KQogCisgICAgICAgIGRlZiBsb2dfY3Vyc29yKHNlbGYsIGZsYWdzPTApIDoKKyAgICAgICAgICAgIHJldHVybiBsb2djdXJzb3JfcHkzayhzZWxmLl9kYmVudikKKworICAgICAgICBkZWYgZ2V0X2xnX2RpcihzZWxmKSA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGJlbnYuZ2V0X2xnX2RpcigpLmRlY29kZShjaGFyc2V0KQorCisgICAgICAgIGRlZiBnZXRfdG1wX2RpcihzZWxmKSA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGJlbnYuZ2V0X3RtcF9kaXIoKS5kZWNvZGUoY2hhcnNldCkKKworICAgICAgICBkZWYgZ2V0X2RhdGFfZGlycyhzZWxmKSA6CisgICAgICAgICAgICAjIEhhdmUgdG8gdXNlIGEgbGlzdCBjb21wcmVoZW5zaW9uIGFuZCBub3QKKyAgICAgICAgICAgICMgZ2VuZXJhdG9ycywgYmVjYXVzZSB3ZSBhcmUgc3VwcG9ydGluZyBQeXRob24gMi4zLgorICAgICAgICAgICAgcmV0dXJuIHR1cGxlKAorICAgICAgICAgICAgICAgIFtpLmRlY29kZShjaGFyc2V0KSBmb3IgaSBpbiBzZWxmLl9kYmVudi5nZXRfZGF0YV9kaXJzKCldKQorCiAgICAgY2xhc3MgREJTZXF1ZW5jZV9weTNrKG9iamVjdCkgOgogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZGIsICphcmdzLCAqKmt3YXJncykgOgogICAgICAgICAgICAgc2VsZi5fZGI9ZGIKQEAgLTMzMiw3ICs0MTksMTAgQEAKIAogICAgIGJzZGRiLl9kYi5EQkVudl9vcmlnID0gYnNkZGIuX2RiLkRCRW52CiAgICAgYnNkZGIuX2RiLkRCX29yaWcgPSBic2RkYi5fZGIuREIKLSAgICBic2RkYi5fZGIuREJTZXF1ZW5jZV9vcmlnID0gYnNkZGIuX2RiLkRCU2VxdWVuY2UKKyAgICBpZiBic2RkYi5kYi52ZXJzaW9uKCkgPD0gKDQsIDMpIDoKKyAgICAgICAgYnNkZGIuX2RiLkRCU2VxdWVuY2Vfb3JpZyA9IE5vbmUKKyAgICBlbHNlIDoKKyAgICAgICAgYnNkZGIuX2RiLkRCU2VxdWVuY2Vfb3JpZyA9IGJzZGRiLl9kYi5EQlNlcXVlbmNlCiAKICAgICBkZWYgZG9fcHJveHlfZGJfcHkzayhmbGFnKSA6CiAgICAgICAgIGZsYWcyID0gZG9fcHJveHlfZGJfcHkzay5mbGFnCkBAIC0zOTYsOCArNDg2LDEyIEBACiAgICAgcHJpbnQgJ2JzZGRiLmRiLnZlcnNpb24oKTogICAlcycgJSAoZGIudmVyc2lvbigpLCApCiAgICAgcHJpbnQgJ2JzZGRiLmRiLl9fdmVyc2lvbl9fOiAlcycgJSBkYi5fX3ZlcnNpb25fXwogICAgIHByaW50ICdic2RkYi5kYi5jdnNpZDogICAgICAgJXMnICUgZGIuY3ZzaWQKLSAgICBwcmludCAncHkgbW9kdWxlOiAgICAgICAgICAgICVzJyAlIGJzZGRiLl9fZmlsZV9fCi0gICAgcHJpbnQgJ2V4dGVuc2lvbiBtb2R1bGU6ICAgICAlcycgJSBic2RkYi5fYnNkZGIuX19maWxlX18KKworICAgICMgV29ya2Fyb3VuZCBmb3IgYWxsb3dpbmcgZ2VuZXJhdGluZyBhbiBFR0dzIGFzIGEgWklQIGZpbGVzLgorICAgIHN1ZmZpeD0iX18iCisgICAgcHJpbnQgJ3B5IG1vZHVsZTogICAgICAgICAgICAlcycgJSBnZXRhdHRyKGJzZGRiLCAiX19maWxlIitzdWZmaXgpCisgICAgcHJpbnQgJ2V4dGVuc2lvbiBtb2R1bGU6ICAgICAlcycgJSBnZXRhdHRyKGJzZGRiLCAiX19maWxlIitzdWZmaXgpCisKICAgICBwcmludCAncHl0aG9uIHZlcnNpb246ICAgICAgICVzJyAlIHN5cy52ZXJzaW9uCiAgICAgcHJpbnQgJ015IHBpZDogICAgICAgICAgICAgICAlcycgJSBvcy5nZXRwaWQoKQogICAgIHByaW50ICctPScgKiAzOApAQCAtNDgxLDYgKzU3NSw4IEBACiAgICAgdGVzdF9tb2R1bGVzID0gWwogICAgICAgICAndGVzdF9hc3NvY2lhdGUnLAogICAgICAgICAndGVzdF9iYXNpY3MnLAorICAgICAgICAndGVzdF9kYmVudicsCisgICAgICAgICd0ZXN0X2RiJywKICAgICAgICAgJ3Rlc3RfY29tcGFyZScsCiAgICAgICAgICd0ZXN0X2NvbXBhdCcsCiAgICAgICAgICd0ZXN0X2N1cnNvcl9wZ2V0X2J1ZycsCkBAIC00ODksNiArNTg1LDcgQEAKICAgICAgICAgJ3Rlc3RfZGJ0YWJsZXMnLAogICAgICAgICAndGVzdF9kaXN0cmlidXRlZF90cmFuc2FjdGlvbnMnLAogICAgICAgICAndGVzdF9lYXJseV9jbG9zZScsCisgICAgICAgICd0ZXN0X2ZpbGVpZCcsCiAgICAgICAgICd0ZXN0X2dldF9ub25lJywKICAgICAgICAgJ3Rlc3Rfam9pbicsCiAgICAgICAgICd0ZXN0X2xvY2snLApkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9hc3NvY2lhdGUucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2Fzc29jaWF0ZS5weQppbmRleCBjMGRhM2U4Li43YTQ5ZTExIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2Fzc29jaWF0ZS5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2Fzc29jaWF0ZS5weQpAQCAtMTQ4LDEyICsxNDgsOCBAQAogICAgICAgICBzZWxmLnNlY0RCID0gTm9uZQogICAgICAgICBzZWxmLnByaW1hcnkgPSBkYi5EQihzZWxmLmVudikKICAgICAgICAgc2VsZi5wcmltYXJ5LnNldF9nZXRfcmV0dXJuc19ub25lKDIpCi0gICAgICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgMSk6Ci0gICAgICAgICAgICBzZWxmLnByaW1hcnkub3BlbihzZWxmLmZpbGVuYW1lLCAicHJpbWFyeSIsIHNlbGYuZGJ0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5EQl9DUkVBVEUgfCBkYi5EQl9USFJFQUQgfCBzZWxmLmRiRmxhZ3MsIHR4bj10eG4pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnByaW1hcnkub3BlbihzZWxmLmZpbGVuYW1lLCAicHJpbWFyeSIsIHNlbGYuZGJ0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYi5EQl9DUkVBVEUgfCBkYi5EQl9USFJFQUQgfCBzZWxmLmRiRmxhZ3MpCisgICAgICAgIHNlbGYucHJpbWFyeS5vcGVuKHNlbGYuZmlsZW5hbWUsICJwcmltYXJ5Iiwgc2VsZi5kYnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFEIHwgc2VsZi5kYkZsYWdzLCB0eG49dHhuKQogCiAgICAgZGVmIGNsb3NlREIoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuY3VyOgpAQCAtMTY5LDEyICsxNjUsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5wcmltYXJ5CiAKIAotICAgIGRlZiB0ZXN0MDFfYXNzb2NpYXRlV2l0aERCKHNlbGYpOgotICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCi0gICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDFfYXNzb2NpYXRlV2l0aERCLi4uIiAlIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCi0KKyAgICBkZWYgX2Fzc29jaWF0ZVdpdGhEQihzZWxmLCBnZXRHZW5yZSk6CiAgICAgICAgIHNlbGYuY3JlYXRlREIoKQogCiAgICAgICAgIHNlbGYuc2VjREIgPSBkYi5EQihzZWxmLmVudikKQEAgLTE4MiwxOSArMTczLDIxIEBACiAgICAgICAgIHNlbGYuc2VjREIuc2V0X2dldF9yZXR1cm5zX25vbmUoMikKICAgICAgICAgc2VsZi5zZWNEQi5vcGVuKHNlbGYuZmlsZW5hbWUsICJzZWNvbmRhcnkiLCBkYi5EQl9CVFJFRSwKICAgICAgICAgICAgICAgICAgICBkYi5EQl9DUkVBVEUgfCBkYi5EQl9USFJFQUQgfCBzZWxmLmRiRmxhZ3MpCi0gICAgICAgIHNlbGYuZ2V0REIoKS5hc3NvY2lhdGUoc2VsZi5zZWNEQiwgc2VsZi5nZXRHZW5yZSkKKyAgICAgICAgc2VsZi5nZXREQigpLmFzc29jaWF0ZShzZWxmLnNlY0RCLCBnZXRHZW5yZSkKIAogICAgICAgICBzZWxmLmFkZERhdGFUb0RCKHNlbGYuZ2V0REIoKSkKIAogICAgICAgICBzZWxmLmZpbmlzaF90ZXN0KHNlbGYuc2VjREIpCiAKLQotICAgIGRlZiB0ZXN0MDJfYXNzb2NpYXRlQWZ0ZXJEQihzZWxmKToKKyAgICBkZWYgdGVzdDAxX2Fzc29jaWF0ZVdpdGhEQihzZWxmKToKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAotICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDAyX2Fzc29jaWF0ZUFmdGVyREIuLi4iICUgXAorICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDAxX2Fzc29jaWF0ZVdpdGhEQi4uLiIgJSBcCiAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogCisgICAgICAgIHJldHVybiBzZWxmLl9hc3NvY2lhdGVXaXRoREIoc2VsZi5nZXRHZW5yZSkKKworICAgIGRlZiBfYXNzb2NpYXRlQWZ0ZXJEQihzZWxmLCBnZXRHZW5yZSkgOgogICAgICAgICBzZWxmLmNyZWF0ZURCKCkKICAgICAgICAgc2VsZi5hZGREYXRhVG9EQihzZWxmLmdldERCKCkpCiAKQEAgLTIwNCwxMCArMTk3LDM1IEBACiAgICAgICAgICAgICAgICAgICAgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFEIHwgc2VsZi5kYkZsYWdzKQogCiAgICAgICAgICMgYWRkaW5nIHRoZSBEQl9DUkVBVEUgZmxhZyB3aWxsIGNhdXNlIGl0IHRvIGluZGV4IGV4aXN0aW5nIHJlY29yZHMKLSAgICAgICAgc2VsZi5nZXREQigpLmFzc29jaWF0ZShzZWxmLnNlY0RCLCBzZWxmLmdldEdlbnJlLCBkYi5EQl9DUkVBVEUpCisgICAgICAgIHNlbGYuZ2V0REIoKS5hc3NvY2lhdGUoc2VsZi5zZWNEQiwgZ2V0R2VucmUsIGRiLkRCX0NSRUFURSkKIAogICAgICAgICBzZWxmLmZpbmlzaF90ZXN0KHNlbGYuc2VjREIpCiAKKyAgICBkZWYgdGVzdDAyX2Fzc29jaWF0ZUFmdGVyREIoc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwMl9hc3NvY2lhdGVBZnRlckRCLi4uIiAlIFwKKyAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Fzc29jaWF0ZUFmdGVyREIoc2VsZi5nZXRHZW5yZSkKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNik6CisgICAgICAgIGRlZiB0ZXN0MDNfYXNzb2NpYXRlV2l0aERCKHNlbGYpOgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDNfYXNzb2NpYXRlV2l0aERCLi4uIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXNzb2NpYXRlV2l0aERCKHNlbGYuZ2V0R2VucmVMaXN0KQorCisgICAgICAgIGRlZiB0ZXN0MDRfYXNzb2NpYXRlQWZ0ZXJEQihzZWxmKToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDA0X2Fzc29jaWF0ZUFmdGVyREIuLi4iICUgXAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9hc3NvY2lhdGVBZnRlckRCKHNlbGYuZ2V0R2VucmVMaXN0KQorCiAKICAgICBkZWYgZmluaXNoX3Rlc3Qoc2VsZiwgc2VjREIsIHR4bj1Ob25lKToKICAgICAgICAgIyAnQmx1ZXMnIHNob3VsZCBub3QgYmUgaW4gdGhlIHNlY29uZGFyeSBkYXRhYmFzZQpAQCAtMjE1LDcgKzIzMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFscywgTm9uZSwgdmFscykKIAogICAgICAgICB2YWxzID0gc2VjREIucGdldCgnVW5rbm93bicsIHR4bj10eG4pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2YWxzWzBdID09IDk5IG9yIHZhbHNbMF0gPT0gJzk5JywgdmFscykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHNbMF0gPT0gOTkgb3IgdmFsc1swXSA9PSAnOTknLCB2YWxzKQogICAgICAgICB2YWxzWzFdLmluZGV4KCdVbmtub3duJykKICAgICAgICAgdmFsc1sxXS5pbmRleCgnVW5uYW1lZCcpCiAgICAgICAgIHZhbHNbMV0uaW5kZXgoJ3Vua25vd24nKQpAQCAtMjI3LDkgKzI0NSw5IEBACiAgICAgICAgIHJlYyA9IHNlbGYuY3VyLmZpcnN0KCkKICAgICAgICAgd2hpbGUgcmVjIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgdHlwZShzZWxmLmtleXR5cGUpID09IHR5cGUoJycpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpbnQocmVjWzBdKSkgICMgZm9yIHByaW1hcnkgZGIsIGtleSBpcyBhIG51bWJlcgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQocmVjWzBdKSkgICMgZm9yIHByaW1hcnkgZGIsIGtleSBpcyBhIG51bWJlcgogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8ocmVjWzBdIGFuZCB0eXBlKHJlY1swXSkgPT0gdHlwZSgwKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVjWzBdIGFuZCB0eXBlKHJlY1swXSkgPT0gdHlwZSgwKSkKICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxCiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50IHJlYwpAQCAtMjQ0LDcgKzI2Miw3IEBACiAKICAgICAgICAgIyB0ZXN0IGN1cnNvciBwZ2V0CiAgICAgICAgIHZhbHMgPSBzZWxmLmN1ci5wZ2V0KCdVbmtub3duJywgZmxhZ3M9ZGIuREJfTEFTVCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHZhbHNbMV0gPT0gOTkgb3IgdmFsc1sxXSA9PSAnOTknLCB2YWxzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsc1sxXSA9PSA5OSBvciB2YWxzWzFdID09ICc5OScsIHZhbHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsc1swXSwgJ1Vua25vd24nKQogICAgICAgICB2YWxzWzJdLmluZGV4KCdVbmtub3duJykKICAgICAgICAgdmFsc1syXS5pbmRleCgnVW5uYW1lZCcpCkBAIC0yNzcsNiArMjk1LDEyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gZ2VucmUKIAorICAgIGRlZiBnZXRHZW5yZUxpc3Qoc2VsZiwgcHJpS2V5LCBQcmlEYXRhKSA6CisgICAgICAgIHYgPSBzZWxmLmdldEdlbnJlKHByaUtleSwgUHJpRGF0YSkKKyAgICAgICAgaWYgdHlwZSh2KSA9PSB0eXBlKCIiKSA6CisgICAgICAgICAgICB2ID0gW3ZdCisgICAgICAgIHJldHVybiB2CisKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzIyLDEwICszNDYsNyBAQAogICAgICAgICAgICAgc2VsZi5zZWNEQi5zZXRfZ2V0X3JldHVybnNfbm9uZSgyKQogICAgICAgICAgICAgc2VsZi5zZWNEQi5vcGVuKHNlbGYuZmlsZW5hbWUsICJzZWNvbmRhcnkiLCBkYi5EQl9CVFJFRSwKICAgICAgICAgICAgICAgICAgICAgICAgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFELCB0eG49dHhuKQotICAgICAgICAgICAgaWYgZGIudmVyc2lvbigpID49ICg0LDEpOgotICAgICAgICAgICAgICAgIHNlbGYuZ2V0REIoKS5hc3NvY2lhdGUoc2VsZi5zZWNEQiwgc2VsZi5nZXRHZW5yZSwgdHhuPXR4bikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5nZXREQigpLmFzc29jaWF0ZShzZWxmLnNlY0RCLCBzZWxmLmdldEdlbnJlKQorICAgICAgICAgICAgc2VsZi5nZXREQigpLmFzc29jaWF0ZShzZWxmLnNlY0RCLCBzZWxmLmdldEdlbnJlLCB0eG49dHhuKQogCiAgICAgICAgICAgICBzZWxmLmFkZERhdGFUb0RCKHNlbGYuZ2V0REIoKSwgdHhuPXR4bikKICAgICAgICAgZXhjZXB0OgpAQCAtNDI2LDggKzQ0Nyw3IEBACiAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQXNzb2NpYXRlQlRyZWVUZXN0Q2FzZSkpCiAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQXNzb2NpYXRlUmVjbm9UZXN0Q2FzZSkpCiAKLSAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDEpOgotICAgICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShBc3NvY2lhdGVCVHJlZVR4blRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShBc3NvY2lhdGVCVHJlZVR4blRlc3RDYXNlKSkKIAogICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKFNoZWx2ZUFzc29jaWF0ZUhhc2hUZXN0Q2FzZSkpCiAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoU2hlbHZlQXNzb2NpYXRlQlRyZWVUZXN0Q2FzZSkpCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2Jhc2ljcy5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfYmFzaWNzLnB5CmluZGV4IDIxYjFmOGYuLjRkNDMzOTAgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfYmFzaWNzLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfYmFzaWNzLnB5CkBAIC0zMyw2ICszMyw3IEBACiAKIGNsYXNzIEJhc2ljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRidHlwZSAgICAgICA9IGRiLkRCX1VOS05PV04gICMgbXVzdCBiZSBzZXQgaW4gZGVyaXZlZCBjbGFzcworICAgIGNhY2hlc2l6ZSAgICA9ICgwLCAxMDI0KjEwMjQsIDEpCiAgICAgZGJvcGVuZmxhZ3MgID0gMAogICAgIGRic2V0ZmxhZ3MgICA9IDAKICAgICBkYm1vZGUgICAgICAgPSAwNjYwCkBAIC00Myw2ICs0NCwxMyBAQAogCiAgICAgX251bUtleXMgICAgICA9IDEwMDIgICAgIyBQUklWQVRFLiAgTk9URTogbXVzdCBiZSBhbiBldmVuIHZhbHVlCiAKKyAgICBpbXBvcnQgc3lzCisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KToKKyAgICAgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGV4cHIsbXNnPW1zZykKKyAgICAgICAgZGVmIGFzc2VydEZhbHNlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGV4cHIsbXNnPW1zZykKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgaWYgc2VsZi51c2VFbnY6CiAgICAgICAgICAgICBzZWxmLmhvbWVEaXI9Z2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKQEAgLTUwLDcgKzU4LDggQEAKICAgICAgICAgICAgICAgICBzZWxmLmVudiA9IGRiLkRCRW52KCkKICAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbGdfbWF4KDEwMjQqMTAyNCkKICAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfdHhfbWF4KDMwKQotICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF90eF90aW1lc3RhbXAoaW50KHRpbWUudGltZSgpKSkKKyAgICAgICAgICAgICAgICBzZWxmLl90ID0gaW50KHRpbWUudGltZSgpKQorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF90eF90aW1lc3RhbXAoc2VsZi5fdCkKICAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfZmxhZ3Moc2VsZi5lbnZzZXRmbGFncywgMSkKICAgICAgICAgICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgc2VsZi5lbnZmbGFncyB8IGRiLkRCX0NSRUFURSkKICAgICAgICAgICAgICAgICBzZWxmLmZpbGVuYW1lID0gInRlc3QiCkBAIC02NCw2ICs3MywxNSBAQAogCiAgICAgICAgICMgY3JlYXRlIGFuZCBvcGVuIHRoZSBEQgogICAgICAgICBzZWxmLmQgPSBkYi5EQihzZWxmLmVudikKKyAgICAgICAgaWYgbm90IHNlbGYudXNlRW52IDoKKyAgICAgICAgICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgMikgOgorICAgICAgICAgICAgICAgIHNlbGYuZC5zZXRfY2FjaGVzaXplKCpzZWxmLmNhY2hlc2l6ZSkKKyAgICAgICAgICAgICAgICBjYWNoZXNpemUgPSBzZWxmLmQuZ2V0X2NhY2hlc2l6ZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZXNpemVbMF0sIHNlbGYuY2FjaGVzaXplWzBdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FjaGVzaXplWzJdLCBzZWxmLmNhY2hlc2l6ZVsyXSkKKyAgICAgICAgICAgICAgICAjIEJlcmtlbGV5IERCIGV4cGFuZHMgdGhlIGNhY2hlIDI1JSBhY2NvdW50aW5nIG92ZXJoZWFkLAorICAgICAgICAgICAgICAgICMgaWYgdGhlIGNhY2hlIGlzIHNtYWxsLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTI1LCBpbnQoMTAwLjAqY2FjaGVzaXplWzFdL3NlbGYuY2FjaGVzaXplWzFdKSkKICAgICAgICAgc2VsZi5kLnNldF9mbGFncyhzZWxmLmRic2V0ZmxhZ3MpCiAgICAgICAgIGlmIHNlbGYuZGJuYW1lOgogICAgICAgICAgICAgc2VsZi5kLm9wZW4oc2VsZi5maWxlbmFtZSwgc2VsZi5kYm5hbWUsIHNlbGYuZGJ0eXBlLApAQCAtNzQsNiArOTIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGRidHlwZSA9IHNlbGYuZGJ0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBzZWxmLmRib3BlbmZsYWdzfGRiLkRCX0NSRUFURSkKIAorICAgICAgICBpZiBub3Qgc2VsZi51c2VFbnY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kLnNldF9jYWNoZXNpemUsICpzZWxmLmNhY2hlc2l6ZSkKKwogICAgICAgICBzZWxmLnBvcHVsYXRlREIoKQogCiAKQEAgLTEzOSw3ICsxNjEsMTEgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZC5kZWxldGUoJ2FiY2QnKQogICAgICAgICBleGNlcHQgZGIuREJOb3RGb3VuZEVycm9yLCB2YWw6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9OT1RGT1VORCkKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsWzBdLCBkYi5EQl9OT1RGT1VORCkKKyAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgdmFsCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiIpCkBAIC0xNTgsNyArMTg0LDExIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGQucHV0KCdhYmNkJywgJ3RoaXMgc2hvdWxkIGZhaWwnLCBmbGFncz1kYi5EQl9OT09WRVJXUklURSkKICAgICAgICAgZXhjZXB0IGRiLkRCS2V5RXhpc3RFcnJvciwgdmFsOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfS0VZRVhJU1QpCisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgZGIuREJfS0VZRVhJU1QpCisgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9LRVlFWElTVCkKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24iKQpAQCAtMjY4LDYgKzI5OCwyMSBAQAogICAgICAgICAgICAgcHByaW50KHZhbHVlc1s6MTBdKQogCiAKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHRlc3QwMmJfU2VxdWVuY2VNZXRob2RzKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5kCisKKyAgICAgICAgZm9yIGtleSBpbiBbJzAwMDInLCAnMDEwMScsICcwNDAxJywgJzA3MDEnLCAnMDk5OCddOgorICAgICAgICAgICAgZGF0YSA9IGRba2V5XQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzZWxmLm1ha2VEYXRhKGtleSkpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50IGRhdGEKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihkLCAiX19jb250YWluc19fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiMDQwMSIgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiMTIzNCIgaW4gZCkKKwogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjkzLDcgKzMzOCwxMSBAQAogICAgICAgICAgICAgICAgIHJlYyA9IGMubmV4dCgpCiAgICAgICAgICAgICBleGNlcHQgZGIuREJOb3RGb3VuZEVycm9yLCB2YWw6CiAgICAgICAgICAgICAgICAgaWYgZ2V0X3JhaXNlc19lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfTk9URk9VTkQpCisgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgZGIuREJfTk9URk9VTkQpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfTk9URk9VTkQpCiAgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICAgICAgICAgICAgICByZWMgPSBOb25lCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTMxNCw3ICszNjMsMTEgQEAKICAgICAgICAgICAgICAgICByZWMgPSBjLnByZXYoKQogICAgICAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgogICAgICAgICAgICAgICAgIGlmIGdldF9yYWlzZXNfZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQogICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgICAgICAgICAgICAgcmVjID0gTm9uZQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0zMzcsNyArMzkwLDExIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG4gPSBjLnNldCgnYmFkIGtleScpCiAgICAgICAgIGV4Y2VwdCBkYi5EQk5vdEZvdW5kRXJyb3IsIHZhbDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfTk9URk9VTkQpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHNldF9yYWlzZXNfZXJyb3I6CkBAIC0zNTEsNyArNDA4LDExIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG4gPSBjLmdldF9ib3RoKCcwNDA0JywgJ2JhZCBkYXRhJykKICAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfTk9URk9VTkQpCisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgZGIuREJfTk9URk9VTkQpCisgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9OT1RGT1VORCkKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgZ2V0X3JhaXNlc19lcnJvcjoKQEAgLTM4MCw3ICs0NDEsMTEgQEAKICAgICAgICAgICAgIHJlYyA9IGMuY3VycmVudCgpCiAgICAgICAgIGV4Y2VwdCBkYi5EQktleUVtcHR5RXJyb3IsIHZhbDoKICAgICAgICAgICAgIGlmIGdldF9yYWlzZXNfZXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfS0VZRU1QVFkpCisgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgZGIuREJfS0VZRU1QVFkpCisgICAgICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX0tFWUVNUFRZKQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuZXhwZWN0ZWQgREJLZXlFbXB0eUVycm9yIikKQEAgLTQyNSw3ICs0OTAsMTEgQEAKICAgICAgICAgICAgICAgICAjIGEgYnVnIG1heSBjYXVzZSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4uLgogICAgICAgICAgICAgICAgIGdldGF0dHIoYywgbWV0aG9kKSgqYXJncykKICAgICAgICAgICAgIGV4Y2VwdCBkYi5EQkVycm9yLCB2YWw6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgMCkKKyAgICAgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsWzBdLCAwKQorICAgICAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCAwKQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiByYWlzZWQgd2hlbiB1c2luZyBhIGJ1Z2d5IGN1cnNvcidzIgpAQCAtNDc3LDYgKzU0NiwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9sZCwgMSkKICAgICAgICAgc2VsZi50ZXN0MDNfU2ltcGxlQ3Vyc29yU3R1ZmYoZ2V0X3JhaXNlc19lcnJvcj0wLCBzZXRfcmFpc2VzX2Vycm9yPTApCiAKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDYpOgorICAgICAgICBkZWYgdGVzdDAzZF9TaW1wbGVDdXJzb3JQcmlvcml0eShzZWxmKSA6CisgICAgICAgICAgICBjID0gc2VsZi5kLmN1cnNvcigpCisgICAgICAgICAgICBjLnNldF9wcmlvcml0eShkYi5EQl9QUklPUklUWV9WRVJZX0xPVykgICMgUG9zaXRpb25hbAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYi5EQl9QUklPUklUWV9WRVJZX0xPVywgYy5nZXRfcHJpb3JpdHkoKSkKKyAgICAgICAgICAgIGMuc2V0X3ByaW9yaXR5KHByaW9yaXR5PWRiLkRCX1BSSU9SSVRZX0hJR0gpICAjIEtleXdvcmQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGIuREJfUFJJT1JJVFlfSElHSCwgYy5nZXRfcHJpb3JpdHkoKSkKKyAgICAgICAgICAgIGMuY2xvc2UoKQorCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIGRlZiB0ZXN0MDRfUGFydGlhbEdldEFuZFB1dChzZWxmKToKQEAgLTUzMCwxMSArNjA4LDExIEBACiAgICAgICAgIGQgPSBzZWxmLmQKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAotICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDk5X1RydW5jYXRlLi4uIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDZfVHJ1bmNhdGUuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KIAogICAgICAgICBkLnB1dCgiYWJjZGUiLCAiQUJDREUiKTsKICAgICAgICAgbnVtID0gZC50cnVuY2F0ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhudW0gPj0gMSwgInRydW5jYXRlIHJldHVybmVkIDw9IDAgb24gbm9uLWVtcHR5IGRhdGFiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG51bSA+PSAxLCAidHJ1bmNhdGUgcmV0dXJuZWQgPD0gMCBvbiBub24tZW1wdHkgZGF0YWJhc2UiKQogICAgICAgICBudW0gPSBkLnRydW5jYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW0sIDAsCiAgICAgICAgICAgICAgICAgInRydW5jYXRlIG9uIGVtcHR5IERCIHJldHVybmVkIG5vbnplcm8gKCVyKSIgJSAobnVtLCkpCkBAIC01NTAsNiArNjI4LDMzIEBACiAKICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA2KToKKyAgICAgICAgZGVmIHRlc3QwOF9leGlzdHMoc2VsZikgOgorICAgICAgICAgICAgc2VsZi5kLnB1dCgiYWJjZGUiLCAiQUJDREUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZC5leGlzdHMoImFiY2RlIikgPT0gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgIkRCLT5leGlzdHMoKSByZXR1cm5zIHdyb25nIHZhbHVlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmQuZXhpc3RzKCJ4IikgPT0gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICJEQi0+ZXhpc3RzKCkgcmV0dXJucyB3cm9uZyB2YWx1ZSIpCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA3KToKKyAgICAgICAgZGVmIHRlc3RfY29tcGFjdChzZWxmKSA6CisgICAgICAgICAgICBkID0gc2VsZi5kCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGQuY29tcGFjdChmbGFncz1kYi5EQl9GUkVFTElTVF9PTkxZKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZC5jb21wYWN0KGZsYWdzPWRiLkRCX0ZSRUVMSVNUX09OTFkpKQorICAgICAgICAgICAgZC5wdXQoImFiY2RlIiwgIkFCQ0RFIik7CisgICAgICAgICAgICBkLnB1dCgiYmNkZSIsICJCQ0RFIik7CisgICAgICAgICAgICBkLnB1dCgiYWJjIiwgIkFCQyIpOworICAgICAgICAgICAgZC5wdXQoIm1vbnR5IiwgInB5dGhvbiIpOworICAgICAgICAgICAgZC5kZWxldGUoImFiYyIpCisgICAgICAgICAgICBkLmRlbGV0ZSgiYmNkZSIpCisgICAgICAgICAgICBkLmNvbXBhY3Qoc3RhcnQ9J2FiY2RlJywgc3RvcD0nbW9udHknLCB0eG49Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGFjdF9maWxscGVyY2VudD00MiwgY29tcGFjdF9wYWdlcz0xLAorICAgICAgICAgICAgICAgICAgICBjb21wYWN0X3RpbWVvdXQ9NTAwMDAwMDAsCisgICAgICAgICAgICAgICAgICAgIGZsYWdzPWRiLkRCX0ZSRUVMSVNUX09OTFl8ZGIuREJfRlJFRV9TUEFDRSkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTU3OSwxMyArNjg0LDEzIEBACiAKICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIHRlc3QwOF9FbnZSZW1vdmVBbmRSZW5hbWUoc2VsZik6CisgICAgZGVmIHRlc3QwOV9FbnZSZW1vdmVBbmRSZW5hbWUoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLmVudjoKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKLSAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwOF9FbnZSZW1vdmVBbmRSZW5hbWUuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwOV9FbnZSZW1vdmVBbmRSZW5hbWUuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KIAogICAgICAgICAjIGNhbid0IHJlbmFtZSBvciByZW1vdmUgYW4gb3BlbiBEQgogICAgICAgICBzZWxmLmQuY2xvc2UoKQpAQCAtNTk0LDEwICs2OTksNiBAQAogICAgICAgICBzZWxmLmVudi5kYnJlbmFtZShzZWxmLmZpbGVuYW1lLCBOb25lLCBuZXduYW1lKQogICAgICAgICBzZWxmLmVudi5kYnJlbW92ZShuZXduYW1lKQogCi0gICAgIyBkYnJlbW92ZSBhbmQgZGJyZW5hbWUgYXJlIGluIDQuMSBhbmQgbGF0ZXIKLSAgICBpZiBkYi52ZXJzaW9uKCkgPCAoNCwxKToKLSAgICAgICAgZGVsIHRlc3QwOF9FbnZSZW1vdmVBbmRSZW5hbWUKLQogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNsYXNzIEJhc2ljQlRyZWVXaXRoRW52VGVzdENhc2UoQmFzaWNXaXRoRW52VGVzdENhc2UpOgpAQCAtNjEyLDkgKzcxMywxNCBAQAogCiBjbGFzcyBCYXNpY1RyYW5zYWN0aW9uVGVzdENhc2UoQmFzaWNUZXN0Q2FzZSk6CiAgICAgaW1wb3J0IHN5cwotICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bOjNdIDwgKDIsIDQsIDApOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCk6CiAgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5mYWlsVW5sZXNzKGV4cHIsbXNnPW1zZykKKworICAgIGlmIChzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcpKSBvciAoKHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDApKSBhbmQKKyAgICAgICAgICAgIChzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDIpKSkgOgorICAgICAgICBkZWYgYXNzZXJ0SW4oc2VsZiwgYSwgYiwgbXNnPU5vbmUpIDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFzc2VydFRydWUoYSBpbiBiLCBtc2c9bXNnKQogCiAgICAgZGJvcGVuZmxhZ3MgPSBkYi5EQl9USFJFQUQgfCBkYi5EQl9BVVRPX0NPTU1JVAogICAgIHVzZUVudiA9IDEKQEAgLTY3MiwxNiArNzc4LDEzIEBACiAgICAgICAgIHNlbGYudHhuLmNvbW1pdCgpCiAKICAgICAgICAgIyBmbHVzaCBwZW5kaW5nIHVwZGF0ZXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5lbnYudHhuX2NoZWNrcG9pbnQgKDAsIDAsIDApCi0gICAgICAgIGV4Y2VwdCBkYi5EQkluY29tcGxldGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5lbnYudHhuX2NoZWNrcG9pbnQgKDAsIDAsIDApCiAKICAgICAgICAgc3RhdERpY3QgPSBzZWxmLmVudi5sb2dfc3RhdCgwKTsKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdtYWdpYycgaW4gc3RhdERpY3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndmVyc2lvbicgaW4gc3RhdERpY3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnY3VyX2ZpbGUnIGluIHN0YXREaWN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3JlZ2lvbl9ub3dhaXQnIGluIHN0YXREaWN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdtYWdpYycsIHN0YXREaWN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd2ZXJzaW9uJywgc3RhdERpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2N1cl9maWxlJywgc3RhdERpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3JlZ2lvbl9ub3dhaXQnLCBzdGF0RGljdCkKIAogICAgICAgICAjIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgbG9nIGZpbGUgcHJlc2VudDoKICAgICAgICAgbG9ncyA9IHNlbGYuZW52LmxvZ19hcmNoaXZlKGRiLkRCX0FSQ0hfQUJTIHwgZGIuREJfQVJDSF9MT0cpCkBAIC02OTcsMTYgKzgwMCwzMCBAQAogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiB0ZXN0MDhfVHhuVHJ1bmNhdGUoc2VsZik6CisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA2KToKKyAgICAgICAgZGVmIHRlc3QwOF9leGlzdHMoc2VsZikgOgorICAgICAgICAgICAgdHhuID0gc2VsZi5lbnYudHhuX2JlZ2luKCkKKyAgICAgICAgICAgIHNlbGYuZC5wdXQoImFiY2RlIiwgIkFCQ0RFIiwgdHhuPXR4bikKKyAgICAgICAgICAgIHR4bi5jb21taXQoKQorICAgICAgICAgICAgdHhuID0gc2VsZi5lbnYudHhuX2JlZ2luKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmQuZXhpc3RzKCJhYmNkZSIsIHR4bj10eG4pID09IFRydWUsCisgICAgICAgICAgICAgICAgICAgICJEQi0+ZXhpc3RzKCkgcmV0dXJucyB3cm9uZyB2YWx1ZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kLmV4aXN0cygieCIsIHR4bj10eG4pID09IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAiREItPmV4aXN0cygpIHJldHVybnMgd3JvbmcgdmFsdWUiKQorICAgICAgICAgICAgdHhuLmFib3J0KCkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgdGVzdDA5X1R4blRydW5jYXRlKHNlbGYpOgogICAgICAgICBkID0gc2VsZi5kCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKLSAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwOF9UeG5UcnVuY2F0ZS4uLiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDA5X1R4blRydW5jYXRlLi4uIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAKICAgICAgICAgZC5wdXQoImFiY2RlIiwgIkFCQ0RFIik7CiAgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCiAgICAgICAgIG51bSA9IGQudHJ1bmNhdGUodHhuKQotICAgICAgICBzZWxmLmFzc2VydF8obnVtID49IDEsICJ0cnVuY2F0ZSByZXR1cm5lZCA8PSAwIG9uIG5vbi1lbXB0eSBkYXRhYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW0gPj0gMSwgInRydW5jYXRlIHJldHVybmVkIDw9IDAgb24gbm9uLWVtcHR5IGRhdGFiYXNlIikKICAgICAgICAgbnVtID0gZC50cnVuY2F0ZSh0eG4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtLCAwLAogICAgICAgICAgICAgICAgICJ0cnVuY2F0ZSBvbiBlbXB0eSBEQiByZXR1cm5lZCBub256ZXJvICglcikiICUgKG51bSwpKQpAQCAtNzE0LDcgKzgzMSw3IEBACiAKICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIHRlc3QwOV9UeG5MYXRlVXNlKHNlbGYpOgorICAgIGRlZiB0ZXN0MTBfVHhuTGF0ZVVzZShzZWxmKToKICAgICAgICAgdHhuID0gc2VsZi5lbnYudHhuX2JlZ2luKCkKICAgICAgICAgdHhuLmFib3J0KCkKICAgICAgICAgdHJ5OgpAQCAtNzM0LDYgKzg1MSwzOSBAQAogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiREJUeG4uY29tbWl0KCkgY2FsbGVkIGFmdGVyIERCX1RYTiBubyBsb25nZXIgdmFsaWQgdy9vIGFuIGV4Y2VwdGlvbiIKIAogCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA0KToKKyAgICAgICAgZGVmIHRlc3RfdHhuX25hbWUoc2VsZikgOgorICAgICAgICAgICAgdHhuPXNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4bi5nZXRfbmFtZSgpLCAiIikKKyAgICAgICAgICAgIHR4bi5zZXRfbmFtZSgiWFhZWSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4bi5nZXRfbmFtZSgpLCAiWFhZWSIpCisgICAgICAgICAgICB0eG4uc2V0X25hbWUoIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4bi5nZXRfbmFtZSgpLCAiIikKKyAgICAgICAgICAgIHR4bi5hYm9ydCgpCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyAgICAgICAgZGVmIHRlc3RfdHhuX3NldF90aW1lb3V0KHNlbGYpIDoKKyAgICAgICAgICAgIHR4bj1zZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgdHhuLnNldF90aW1lb3V0KDEyMzQ1NjcsIGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpCisgICAgICAgICAgICB0eG4uc2V0X3RpbWVvdXQoMjM0NTY3OCwgZmxhZ3M9ZGIuREJfU0VUX1RYTl9USU1FT1VUKQorICAgICAgICAgICAgdHhuLmFib3J0KCkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDIpIDoKKyAgICAgICAgZGVmIHRlc3RfZ2V0X3R4X21heChzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90eF9tYXgoKSwgMzApCisKKyAgICAgICAgZGVmIHRlc3RfZ2V0X3R4X3RpbWVzdGFtcChzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90eF90aW1lc3RhbXAoKSwgc2VsZi5fdCkKKworCisKIGNsYXNzIEJUcmVlVHJhbnNhY3Rpb25UZXN0Q2FzZShCYXNpY1RyYW5zYWN0aW9uVGVzdENhc2UpOgogICAgIGRidHlwZSA9IGRiLkRCX0JUUkVFCiAKQEAgLTc0OCwxMSArODk4LDExIEBACiAgICAgZGJ0eXBlICAgICA9IGRiLkRCX0JUUkVFCiAgICAgZGJzZXRmbGFncyA9IGRiLkRCX1JFQ05VTQogCi0gICAgZGVmIHRlc3QwOF9SZWNub0luQlRyZWUoc2VsZik6CisgICAgZGVmIHRlc3QwOV9SZWNub0luQlRyZWUoc2VsZik6CiAgICAgICAgIGQgPSBzZWxmLmQKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAotICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDA4X1JlY25vSW5CVHJlZS4uLiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDA5X1JlY25vSW5CVHJlZS4uLiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogCiAgICAgICAgIHJlYyA9IGQuZ2V0KDIwMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlYyksIHR5cGUoKCkpKQpAQCAtNzgyLDExICs5MzIsMTEgQEAKIGNsYXNzIEJhc2ljRFVQVGVzdENhc2UoQmFzaWNUZXN0Q2FzZSk6CiAgICAgZGJzZXRmbGFncyA9IGRiLkRCX0RVUAogCi0gICAgZGVmIHRlc3QwOV9EdXBsaWNhdGVLZXlzKHNlbGYpOgorICAgIGRlZiB0ZXN0MTBfRHVwbGljYXRlS2V5cyhzZWxmKToKICAgICAgICAgZCA9IHNlbGYuZAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCi0gICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDlfRHVwbGljYXRlS2V5cy4uLiIgJSBcCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MTBfRHVwbGljYXRlS2V5cy4uLiIgJSBcCiAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogCiAgICAgICAgIGQucHV0KCJkdXAwIiwgImJlZm9yZSIpCkBAIC04NTUsMTEgKzEwMDUsMTEgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBkYi5EQl9CVFJFRQogCi0gICAgZGVmIHRlc3QxMF9NdWx0aURCKHNlbGYpOgorICAgIGRlZiB0ZXN0MTFfTXVsdGlEQihzZWxmKToKICAgICAgICAgZDEgPSBzZWxmLmQKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAotICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDEwX011bHRpREIuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QxMV9NdWx0aURCLi4uIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAKICAgICAgICAgZDIgPSBkYi5EQihzZWxmLmVudikKICAgICAgICAgZDIub3BlbihzZWxmLmZpbGVuYW1lLCAic2Vjb25kIiwgc2VsZi5kYnR5cGUsCkBAIC05NDksNyArMTA5OSw3IEBACiAKIGNsYXNzIFByaXZhdGVPYmplY3QodW5pdHRlc3QuVGVzdENhc2UpIDoKICAgICBpbXBvcnQgc3lzCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1s6M10gPCAoMiwgNCwgMCk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KToKICAgICAgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgogICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGV4cHIsbXNnPW1zZykKIApAQCAtOTkyLDcgKzExNDIsNyBAQAogCiBjbGFzcyBDcmFzaEFuZEJ1cm4odW5pdHRlc3QuVGVzdENhc2UpIDoKICAgICBpbXBvcnQgc3lzCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1s6M10gPCAoMiwgNCwgMCk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KToKICAgICAgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgogICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGV4cHIsbXNnPW1zZykKIApAQCAtMTAwMCwxMSArMTE1MCwxMiBAQAogICAgICMgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTMzMDcKICAgICAjICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLCBkYi5EQiwgTm9uZSwgNjU1MzUpCiAKLSAgICBkZWYgdGVzdDAyX0RCRW52X2RlYWxsb2Moc2VsZik6Ci0gICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM4ODUKLSAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLCBkYi5EQkVudiwgfmRiLkRCX1JQQ0NMSUVOVCkKLSAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgaWYgZGIudmVyc2lvbigpIDwgKDQsIDgpIDoKKyAgICAgICAgZGVmIHRlc3QwMl9EQkVudl9kZWFsbG9jKHNlbGYpOgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzg4NQorICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgZGIuREJFbnYsIH5kYi5EQl9SUENDTElFTlQpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKIAogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9jb21wYXJlLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9jb21wYXJlLnB5CmluZGV4IGNlMzcyOGEuLmRiOWNkNzQgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY29tcGFyZS5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2NvbXBhcmUucHkKQEAgLTEyLDYgKzEyLDEyIEBACiAgICAgICAgIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCiAKIAorIyBOZWVkZWQgZm9yIHB5dGhvbiAzLiAiY21wIiB2YW5pc2hlZCBpbiAzLjAuMQorZGVmIGNtcChhLCBiKSA6CisgICAgaWYgYT09YiA6IHJldHVybiAwCisgICAgaWYgYTxiIDogcmV0dXJuIC0xCisgICAgcmV0dXJuIDEKKwogbGV4aWNhbF9jbXAgPSBjbXAKIAogZGVmIGxvd2VyY2FzZV9jbXAobGVmdCwgcmlnaHQpOgpAQCAtMjYsMTIgKzMyLDE2IEBACiBfZXhwZWN0ZWRfbG93ZXJjYXNlX3Rlc3RfZGF0YSA9IFsnJywgJ2EnLCAnYWFhJywgJ2InLCAnYycsICdDQycsICdjY2NjZScsICdjY2NjZicsICdDQ0NQJ10KIAogY2xhc3MgQ29tcGFyYXRvclRlc3RzICh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KSA6CisgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKSA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mYWlsVW5sZXNzKGV4cHIsbXNnPW1zZykKKwogICAgIGRlZiBjb21wYXJhdG9yX3Rlc3RfaGVscGVyIChzZWxmLCBjb21wYXJhdG9yLCBleHBlY3RlZF9kYXRhKToKICAgICAgICAgZGF0YSA9IGV4cGVjdGVkX2RhdGFbOl0KIAogICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bOjNdIDwgKDIsIDYsIDApOgotICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1s6M10gPCAoMiwgNCwgMCk6CisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KSA6CiAgICAgICAgICAgICAgICAgZGF0YS5zb3J0KGNvbXBhcmF0b3IpCiAgICAgICAgICAgICBlbHNlIDoKICAgICAgICAgICAgICAgICBkYXRhLnNvcnQoY21wPWNvbXBhcmF0b3IpCkBAIC00Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRhdGEyLmFwcGVuZChpKQogICAgICAgICAgICAgZGF0YSA9IGRhdGEyCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wYXJhdG9yIGAlcycgaXMgbm90IHJpZ2h0OiAlcyB2cy4gJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoY29tcGFyYXRvciwgZXhwZWN0ZWRfZGF0YSwgZGF0YSkpCiAgICAgZGVmIHRlc3RfbGV4aWNhbF9jb21wYXJhdG9yIChzZWxmKToKQEAgLTY1LDYgKzc1LDE1IEBACiAgICAgZW52ID0gTm9uZQogICAgIGRiID0gTm9uZQogCisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KSA6CisgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCisKKyAgICBpZiAoc3lzLnZlcnNpb25faW5mbyA8ICgyLCA3KSkgb3IgKChzeXMudmVyc2lvbl9pbmZvID49ICgzLDApKSBhbmQKKyAgICAgICAgICAgIChzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDIpKSkgOgorICAgICAgICBkZWYgYXNzZXJ0TGVzcyhzZWxmLCBhLCBiLCBtc2c9Tm9uZSkgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0VHJ1ZShhPGIsIG1zZz1tc2cpCisKICAgICBkZWYgc2V0VXAgKHNlbGYpOgogICAgICAgICBzZWxmLmZpbGVuYW1lID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnLmRiJwogICAgICAgICBzZWxmLmhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQpAQCAtMTE1LDE0ICsxMzQsMTQgQEAKICAgICAgICAgICAgIHJlYyA9IGN1cnMuZmlyc3QgKCkKICAgICAgICAgICAgIHdoaWxlIHJlYzoKICAgICAgICAgICAgICAgICBrZXksIGlnbm9yZSA9IHJlYwotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSAoaW5kZXggPCBsZW4gKGV4cGVjdGVkKSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoaW5kZXgsIGxlbiAoZXhwZWN0ZWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIG1hbnkgdmFsdWVzIHJldHVybmVkIGZyb20gY3Vyc29yIikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChleHBlY3RlZFtpbmRleF0sIGtleSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkW2luZGV4XSwga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHZhbHVlIGAlcycgYXQgJWQgYnV0IGdvdCBgJXMnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXhwZWN0ZWRbaW5kZXhdLCBpbmRleCwga2V5KSkKICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsgMQogICAgICAgICAgICAgICAgIHJlYyA9IGN1cnMubmV4dCAoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAoaW5kZXgsIGxlbiAoZXhwZWN0ZWQpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleCwgbGVuIChleHBlY3RlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIHZhbHVlcyByZXR1cm5lZCBmcm9tIGN1cnNvciIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBjdXJzLmNsb3NlICgpCkBAIC0xOTMsNyArMjEyLDggQEAKICAgICAgICAgICAgIGVycm9yT3V0ID0gdGVtcC5nZXR2YWx1ZSgpCiAgICAgICAgICAgICBpZiBub3Qgc3VjY2Vzc1JlLnNlYXJjaChlcnJvck91dCk6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmV4cGVjdGVkIHN0ZGVyciBvdXRwdXQ6XG4iK2Vycm9yT3V0KQotICAgICAgICBzeXMuZXhjX3RyYWNlYmFjayA9IHN5cy5sYXN0X3RyYWNlYmFjayA9IE5vbmUKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCAwKSA6ICAjIFhYWDogSG93IHRvIGRvIHRoaXMgaW4gUHkzayA/Pz8KKyAgICAgICAgICAgIHN5cy5leGNfdHJhY2ViYWNrID0gc3lzLmxhc3RfdHJhY2ViYWNrID0gTm9uZQogCiAgICAgZGVmIF90ZXN0X2NvbXBhcmVfZnVuY3Rpb25fZXhjZXB0aW9uIChzZWxmKToKICAgICAgICAgc2VsZi5zdGFydFRlc3QgKCkKQEAgLTIzNyw4ICsyNTcsOCBAQAogICAgICAgICBkZWYgbXlfY29tcGFyZSAoYSwgYik6CiAgICAgICAgICAgICByZXR1cm4gMAogCi0gICAgICAgIHNlbGYuc3RhcnRUZXN0ICgpCi0gICAgICAgIHNlbGYuY3JlYXRlREIgKG15X2NvbXBhcmUpCisgICAgICAgIHNlbGYuc3RhcnRUZXN0KCkKKyAgICAgICAgc2VsZi5jcmVhdGVEQihteV9jb21wYXJlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyAoUnVudGltZUVycm9yLCBzZWxmLmRiLnNldF9idF9jb21wYXJlLCBteV9jb21wYXJlKQogCiBkZWYgdGVzdF9zdWl0ZSAoKToKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY29tcGF0LnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9jb21wYXQucHkKaW5kZXggMGIwZmE3MC4uNzY3OWYxOSAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9jb21wYXQucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9jb21wYXQucHkKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICBwcmludCByZWMKIAotICAgICAgICBzZWxmLmFzc2VydF8oZi5oYXNfa2V5KCdmJyksICdFcnJvciwgbWlzc2luZyBrZXkhJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuaGFzX2tleSgnZicpLCAnRXJyb3IsIG1pc3Npbmcga2V5IScpCiAKICAgICAgICAgIyB0ZXN0IHRoYXQgc2V0X2xvY2F0aW9uKCkgcmV0dXJucyB0aGUgbmV4dCBuZWFyZXN0IGtleSwgdmFsdWUKICAgICAgICAgIyBvbiBidHJlZSBkYXRhYmFzZXMgYW5kIHJhaXNlcyBLZXlFcnJvciBvbiBvdGhlcnMuCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2N1cnNvcl9wZ2V0X2J1Zy5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY3Vyc29yX3BnZXRfYnVnLnB5CmluZGV4IDY4YjZhODcuLjIyZDNkYzEgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY3Vyc29yX3BnZXRfYnVnLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY3Vyc29yX3BnZXRfYnVnLnB5CkBAIC0zNywxMiArMzcsMTIgQEAKICAgICBkZWYgdGVzdF9wZ2V0KHNlbGYpOgogICAgICAgICBjdXJzb3IgPSBzZWxmLnNlY29uZGFyeV9kYi5jdXJzb3IoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgnZWdncycsICdzYWxhZCcsICdlZ2dzJyksIGN1cnNvci5wZ2V0KGtleT0nZWdncycsIGZsYWdzPWRiLkRCX1NFVCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgnZWdncycsICdvbWVsZXQnLCAnZWdncycpLCBjdXJzb3IucGdldChkYi5EQl9ORVhUX0RVUCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIGN1cnNvci5wZ2V0KGRiLkRCX05FWFRfRFVQKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ2VnZ3MnLCAnc2FsYWQnLCAnZWdncycpLCBjdXJzb3IucGdldChrZXk9J2VnZ3MnLCBmbGFncz1kYi5EQl9TRVQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnZWdncycsICdvbWVsZXQnLCAnZWdncycpLCBjdXJzb3IucGdldChkYi5EQl9ORVhUX0RVUCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgY3Vyc29yLnBnZXQoZGIuREJfTkVYVF9EVVApKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgnaGFtJywgJ3NwYW0nLCAnaGFtJyksIGN1cnNvci5wZ2V0KCdoYW0nLCAnc3BhbScsIGZsYWdzPWRiLkRCX1NFVCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIGN1cnNvci5wZ2V0KGRiLkRCX05FWFRfRFVQKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ2hhbScsICdzcGFtJywgJ2hhbScpLCBjdXJzb3IucGdldCgnaGFtJywgJ3NwYW0nLCBmbGFncz1kYi5EQl9TRVQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGN1cnNvci5wZ2V0KGRiLkRCX05FWFRfRFVQKSkKIAogICAgICAgICBjdXJzb3IuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2RiLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDNhMzJiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYi5weQpAQCAtMCwwICsxLDE0MiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MsIGdsb2IKKworZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIHRlc3Rfc3VwcG9ydCwgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBcCisgICAgICAgIGdldF9uZXdfZGF0YWJhc2VfcGF0aAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBEQih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW1wb3J0IHN5cworICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCkgOgorICAgICAgICBkZWYgYXNzZXJ0VHJ1ZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZXhwcixtc2c9bXNnKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhdGggPSBnZXRfbmV3X2RhdGFiYXNlX3BhdGgoKQorICAgICAgICBzZWxmLmRiID0gZGIuREIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmRiLmNsb3NlKCkKKyAgICAgICAgZGVsIHNlbGYuZGIKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLnBhdGgpCisKK2NsYXNzIERCX2dlbmVyYWwoREIpIDoKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDIpIDoKKyAgICAgICAgZGVmIHRlc3RfYnRfbWlua2V5KHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxNywgMTA4LCAxMDMwXSA6CisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfYnRfbWlua2V5KGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmRiLmdldF9idF9taW5rZXkoKSkKKworICAgICAgICBkZWYgdGVzdF9sb3JkZXIoc2VsZikgOgorICAgICAgICAgICAgc2VsZi5kYi5zZXRfbG9yZGVyKDEyMzQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEyMzQsIHNlbGYuZGIuZ2V0X2xvcmRlcigpKQorICAgICAgICAgICAgc2VsZi5kYi5zZXRfbG9yZGVyKDQzMjEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQzMjEsIHNlbGYuZGIuZ2V0X2xvcmRlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsIHNlbGYuZGIuc2V0X2xvcmRlciwgOTE4MikKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNikgOgorICAgICAgICBkZWYgdGVzdF9wcmlvcml0eShzZWxmKSA6CisgICAgICAgICAgICBmbGFncyA9IFtkYi5EQl9QUklPUklUWV9WRVJZX0xPVywgZGIuREJfUFJJT1JJVFlfTE9XLAorICAgICAgICAgICAgICAgICAgICBkYi5EQl9QUklPUklUWV9ERUZBVUxULCBkYi5EQl9QUklPUklUWV9ISUdILAorICAgICAgICAgICAgICAgICAgICBkYi5EQl9QUklPUklUWV9WRVJZX0hJR0hdCisgICAgICAgICAgICBmb3IgZmxhZyBpbiBmbGFncyA6CisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfcHJpb3JpdHkoZmxhZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYWcsIHNlbGYuZGIuZ2V0X3ByaW9yaXR5KCkpCisKK2NsYXNzIERCX2hhc2goREIpIDoKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDIpIDoKKyAgICAgICAgZGVmIHRlc3RfaF9mZmFjdG9yKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBmZmFjdG9yIGluIFs0LCAxNiwgMjU2XSA6CisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfaF9mZmFjdG9yKGZmYWN0b3IpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZmFjdG9yLCBzZWxmLmRiLmdldF9oX2ZmYWN0b3IoKSkKKworICAgICAgICBkZWYgdGVzdF9oX25lbGVtKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBuZWxlbSBpbiBbMSwgMiwgNF0gOgorICAgICAgICAgICAgICAgIG5lbGVtID0gbmVsZW0qMTAyNCoxMDI0ICAjIE1pbGxpb25zCisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfaF9uZWxlbShuZWxlbSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5lbGVtLCBzZWxmLmRiLmdldF9oX25lbGVtKCkpCisKKyAgICAgICAgZGVmIHRlc3RfcGFnZXNpemUoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDksIDE3KSA6ICAjIEZyb20gNTEyIHRvIDY1NTM2CisgICAgICAgICAgICAgICAgaSA9IDE8PGkKKyAgICAgICAgICAgICAgICBzZWxmLmRiLnNldF9wYWdlc2l6ZShpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5kYi5nZXRfcGFnZXNpemUoKSkKKworICAgICAgICAgICAgIyBUaGUgdmFsaWQgdmFsdWVzIGdvZXMgZnJvbSA1MTIgdG8gNjU1MzYKKyAgICAgICAgICAgICMgVGVzdCAxMzEwNzIgYnl0ZXMuLi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLCBzZWxmLmRiLnNldF9wYWdlc2l6ZSwgMTw8MTcpCisgICAgICAgICAgICAjIFRlc3QgMjU2IGJ5dGVzLi4uCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgc2VsZi5kYi5zZXRfcGFnZXNpemUsIDE8PDgpCisKK2NsYXNzIERCX3R4bihEQikgOgorICAgIGRlZiBzZXRVcChzZWxmKSA6CisgICAgICAgIHNlbGYuaG9tZURpciA9IGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCisgICAgICAgIHNlbGYuZW52ID0gZGIuREJFbnYoKQorICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTCB8CisgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9JTklUX1RYTikKKyAgICAgICAgc2VsZi5kYiA9IGRiLkRCKHNlbGYuZW52KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpIDoKKyAgICAgICAgc2VsZi5kYi5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLmRiCisgICAgICAgIHNlbGYuZW52LmNsb3NlKCkKKyAgICAgICAgZGVsIHNlbGYuZW52CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5ob21lRGlyKQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAyKSA6CisgICAgICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpIDoKKyAgICAgICAgICAgIHNlbGYuZGIuc2V0X2ZsYWdzKGRiLkRCX0NIS1NVTSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGIuREJfQ0hLU1VNLCBzZWxmLmRiLmdldF9mbGFncygpKQorICAgICAgICAgICAgc2VsZi5kYi5zZXRfZmxhZ3MoZGIuREJfVFhOX05PVF9EVVJBQkxFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYi5EQl9UWE5fTk9UX0RVUkFCTEUgfCBkYi5EQl9DSEtTVU0sCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGIuZ2V0X2ZsYWdzKCkpCisKK2NsYXNzIERCX3JlY25vKERCKSA6CisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAyKSA6CisgICAgICAgIGRlZiB0ZXN0X3JlX3BhZChzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbJyAnLCAnKiddIDogICMgQ2hlY2sgY2hhcnMKKyAgICAgICAgICAgICAgICBzZWxmLmRiLnNldF9yZV9wYWQoaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZChpKSwgc2VsZi5kYi5nZXRfcmVfcGFkKCkpCisgICAgICAgICAgICBmb3IgaSBpbiBbOTcsIDY1XSA6ICAjIENoZWNrIGludGVnZXJzCisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfcmVfcGFkKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmRiLmdldF9yZV9wYWQoKSkKKworICAgICAgICBkZWYgdGVzdF9yZV9kZWxpbShzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbJyAnLCAnKiddIDogICMgQ2hlY2sgY2hhcnMKKyAgICAgICAgICAgICAgICBzZWxmLmRiLnNldF9yZV9kZWxpbShpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKGkpLCBzZWxmLmRiLmdldF9yZV9kZWxpbSgpKQorICAgICAgICAgICAgZm9yIGkgaW4gWzk3LCA2NV0gOiAgIyBDaGVjayBpbnRlZ2VycworICAgICAgICAgICAgICAgIHNlbGYuZGIuc2V0X3JlX2RlbGltKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmRiLmdldF9yZV9kZWxpbSgpKQorCisgICAgICAgIGRlZiB0ZXN0X3JlX3NvdXJjZShzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbInRlc3QiLCAidGVzdDIiLCAidGVzdDMiXSA6CisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfcmVfc291cmNlKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmRiLmdldF9yZV9zb3VyY2UoKSkKKworY2xhc3MgREJfcXVldWUoREIpIDoKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDIpIDoKKyAgICAgICAgZGVmIHRlc3RfcmVfbGVuKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFszMywgNjUsIDMwMCwgMjAwMF0gOgorICAgICAgICAgICAgICAgIHNlbGYuZGIuc2V0X3JlX2xlbihpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5kYi5nZXRfcmVfbGVuKCkpCisKKyAgICAgICAgZGVmIHRlc3RfcV9leHRlbnRzaXplKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxLCA2MCwgMTAwXSA6CisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfcV9leHRlbnRzaXplKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmRiLmdldF9xX2V4dGVudHNpemUoKSkKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQl9nZW5lcmFsKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQl90eG4pKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCX2hhc2gpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCX3JlY25vKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQl9xdWV1ZSkpCisKKyAgICByZXR1cm4gc3VpdGUKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSd0ZXN0X3N1aXRlJykKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZGJlbnYucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2RiZW52LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MjgxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2RiZW52LnB5CkBAIC0wLDAgKzEsNTEzIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcywgZ2xvYgorCitmcm9tIHRlc3RfYWxsIGltcG9ydCBkYiwgdGVzdF9zdXBwb3J0LCBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIFwKKyAgICAgICAgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIERCRW52KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbXBvcnQgc3lzCisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KSA6CisgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCisKKyAgICAgICAgZGVmIGFzc2VydEZhbHNlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGV4cHIsbXNnPW1zZykKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ob21lRGlyID0gZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKKyAgICAgICAgc2VsZi5lbnYgPSBkYi5EQkVudigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZW52LmNsb3NlKCkKKyAgICAgICAgZGVsIHNlbGYuZW52CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5ob21lRGlyKQorCitjbGFzcyBEQkVudl9nZW5lcmFsKERCRW52KSA6CisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA3KSA6CisgICAgICAgIGRlZiB0ZXN0X2xrX3BhcnRpdGlvbnMoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWzEwLCAyMCwgNDBdIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbGtfcGFydGl0aW9ucyhpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X2xrX3BhcnRpdGlvbnMoKSkKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNikgOgorICAgICAgICBkZWYgdGVzdF90aHJlYWQoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWzE2LCAxMDAsIDEwMDBdIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfdGhyZWFkX2NvdW50KGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfdGhyZWFkX2NvdW50KCkpCisKKyAgICAgICAgZGVmIHRlc3RfY2FjaGVfbWF4KHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBzaXplIGluIFs2NCwgMTI4XSA6CisgICAgICAgICAgICAgICAgc2l6ZSA9IHNpemUqMTAyNCoxMDI0ICAjIE1lZ2FieXRlcworICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9jYWNoZV9tYXgoMCwgc2l6ZSkKKyAgICAgICAgICAgICAgICBzaXplMiA9IHNlbGYuZW52LmdldF9jYWNoZV9tYXgoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2l6ZTJbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpemUgPD0gc2l6ZTJbMV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqc2l6ZSA+IHNpemUyWzFdKQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA0KSA6CisgICAgICAgIGRlZiB0ZXN0X211dGV4X3N0YXQoc2VsZikgOgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wgfAorICAgICAgICAgICAgICAgICAgICBkYi5EQl9JTklUX0xPQ0spCisgICAgICAgICAgICBzdGF0ID0gc2VsZi5lbnYubXV0ZXhfc3RhdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIm11dGV4X2ludXNlX21heCIgaW4gc3RhdCkKKworICAgICAgICBkZWYgdGVzdF9sZ19maWxlbW9kZShzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMDYwMCwgMDY2MCwgMDY2Nl0gOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9sZ19maWxlbW9kZShpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X2xnX2ZpbGVtb2RlKCkpCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDMpIDoKKyAgICAgICAgZGVmIHRlc3RfbXBfbWF4X29wZW5mZChzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMTcsIDMxLCA0Ml0gOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9tcF9tYXhfb3BlbmZkKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfbXBfbWF4X29wZW5mZCgpKQorCisgICAgICAgIGRlZiB0ZXN0X21wX21heF93cml0ZShzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMTAwLCAyMDAsIDMwMF0gOgorICAgICAgICAgICAgICAgIGZvciBqIGluIFsxLCAyLCAzXSA6CisgICAgICAgICAgICAgICAgICAgIGogKj0gMTAwMDAwMAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbXBfbWF4X3dyaXRlKGksIGopCisgICAgICAgICAgICAgICAgICAgIHY9c2VsZi5lbnYuZ2V0X21wX21heF93cml0ZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGksIGopLCB2KQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAyKSA6CisgICAgICAgIGRlZiB0ZXN0X2ludmFsaWRfdHhuKHNlbGYpIDoKKyAgICAgICAgICAgICMgVGhpcyBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQgdHJhbnNhY3Rpb25zCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgc2VsZi5lbnYudHhuX2JlZ2luKQorCisgICAgICAgIGRlZiB0ZXN0X21wX21tYXBzaXplKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxNiwgMzIsIDY0XSA6CisgICAgICAgICAgICAgICAgaSAqPSAxMDI0KjEwMjQKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbXBfbW1hcHNpemUoaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZW52LmdldF9tcF9tbWFwc2l6ZSgpKQorCisgICAgICAgIGRlZiB0ZXN0X3RtcF9kaXIoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWyJhIiwgImJiIiwgImNjYyJdIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfdG1wX2RpcihpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X3RtcF9kaXIoKSkKKworICAgICAgICBkZWYgdGVzdF9mbGFncyhzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmVudi5zZXRfZmxhZ3MoZGIuREJfQVVUT19DT01NSVQsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRiLkRCX0FVVE9fQ09NTUlULCBzZWxmLmVudi5nZXRfZmxhZ3MoKSkKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9mbGFncyhkYi5EQl9UWE5fTk9TWU5DLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYi5EQl9BVVRPX0NPTU1JVCB8IGRiLkRCX1RYTl9OT1NZTkMsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52LmdldF9mbGFncygpKQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2ZsYWdzKGRiLkRCX0FVVE9fQ09NTUlULCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYi5EQl9UWE5fTk9TWU5DLCBzZWxmLmVudi5nZXRfZmxhZ3MoKSkKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9mbGFncyhkYi5EQl9UWE5fTk9TWU5DLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZWxmLmVudi5nZXRfZmxhZ3MoKSkKKworICAgICAgICBkZWYgdGVzdF9sa19tYXhfb2JqZWN0cyhzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMTAwMCwgMjAwMCwgMzAwMF0gOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9sa19tYXhfb2JqZWN0cyhpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X2xrX21heF9vYmplY3RzKCkpCisKKyAgICAgICAgZGVmIHRlc3RfbGtfbWF4X2xvY2tzKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxMDAwLCAyMDAwLCAzMDAwXSA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xrX21heF9sb2NrcyhpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X2xrX21heF9sb2NrcygpKQorCisgICAgICAgIGRlZiB0ZXN0X2xrX21heF9sb2NrZXJzKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxMDAwLCAyMDAwLCAzMDAwXSA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xrX21heF9sb2NrZXJzKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfbGtfbWF4X2xvY2tlcnMoKSkKKworICAgICAgICBkZWYgdGVzdF9sZ19yZWdpb25tYXgoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWzEyOCwgMjU2LCAxMDI0XSA6CisgICAgICAgICAgICAgICAgaSA9IGkqMTAyNCoxMDI0CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xnX3JlZ2lvbm1heChpKQorICAgICAgICAgICAgICAgIGogPSBzZWxmLmVudi5nZXRfbGdfcmVnaW9ubWF4KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaSA8PSBqKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKmkgPiBqKQorCisgICAgICAgIGRlZiB0ZXN0X2xrX2RldGVjdChzZWxmKSA6CisgICAgICAgICAgICBmbGFncz0gW2RiLkRCX0xPQ0tfREVGQVVMVCwgZGIuREJfTE9DS19FWFBJUkUsIGRiLkRCX0xPQ0tfTUFYTE9DS1MsCisgICAgICAgICAgICAgICAgICAgIGRiLkRCX0xPQ0tfTUlOTE9DS1MsIGRiLkRCX0xPQ0tfTUlOV1JJVEUsCisgICAgICAgICAgICAgICAgICAgIGRiLkRCX0xPQ0tfT0xERVNULCBkYi5EQl9MT0NLX1JBTkRPTSwgZGIuREJfTE9DS19ZT1VOR0VTVF0KKworICAgICAgICAgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAzKSA6CisgICAgICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKGRiLkRCX0xPQ0tfTUFYV1JJVEUpCisKKyAgICAgICAgICAgIGZvciBpIGluIGZsYWdzIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbGtfZGV0ZWN0KGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfbGtfZGV0ZWN0KCkpCisKKyAgICAgICAgZGVmIHRlc3RfbGdfZGlyKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsiYSIsICJiYiIsICJjY2MiLCAiZGRkZCJdIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbGdfZGlyKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfbGdfZGlyKCkpCisKKyAgICAgICAgZGVmIHRlc3RfbGdfYnNpemUoc2VsZikgOgorICAgICAgICAgICAgbG9nX3NpemUgPSA3MCoxMDI0CisgICAgICAgICAgICBzZWxmLmVudi5zZXRfbGdfYnNpemUobG9nX3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYuZ2V0X2xnX2JzaXplKCkgPj0gbG9nX3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYuZ2V0X2xnX2JzaXplKCkgPCA0KmxvZ19zaXplKQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xnX2JzaXplKDQqbG9nX3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYuZ2V0X2xnX2JzaXplKCkgPj0gNCpsb2dfc2l6ZSkKKworICAgICAgICBkZWYgdGVzdF9zZXRnZXRfZGF0YV9kaXJzKHNlbGYpIDoKKyAgICAgICAgICAgIGRpcnMgPSAoImEiLCAiYiIsICJjIiwgImQiKQorICAgICAgICAgICAgZm9yIGkgaW4gZGlycyA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2RhdGFfZGlyKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnMsIHNlbGYuZW52LmdldF9kYXRhX2RpcnMoKSkKKworICAgICAgICBkZWYgdGVzdF9zZXRnZXRfY2FjaGVzaXplKHNlbGYpIDoKKyAgICAgICAgICAgIGNhY2hlc2l6ZSA9ICgwLCA1MTIqMTAyNCoxMDI0LCAzKQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2NhY2hlc2l6ZSgqY2FjaGVzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZXNpemUsIHNlbGYuZW52LmdldF9jYWNoZXNpemUoKSkKKworICAgICAgICAgICAgY2FjaGVzaXplID0gKDAsIDEqMTAyNCoxMDI0LCA1KQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2NhY2hlc2l6ZSgqY2FjaGVzaXplKQorICAgICAgICAgICAgY2FjaGVzaXplMiA9IHNlbGYuZW52LmdldF9jYWNoZXNpemUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZXNpemVbMF0sIGNhY2hlc2l6ZTJbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhY2hlc2l6ZVsyXSwgY2FjaGVzaXplMlsyXSkKKyAgICAgICAgICAgICMgQmVya2VsZXkgREIgZXhwYW5kcyB0aGUgY2FjaGUgMjUlIGFjY291bnRpbmcgb3ZlcmhlYWQsCisgICAgICAgICAgICAjIGlmIHRoZSBjYWNoZSBpcyBzbWFsbC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTI1LCBpbnQoMTAwLjAqY2FjaGVzaXplMlsxXS9jYWNoZXNpemVbMV0pKQorCisgICAgICAgICAgICAjIFlvdSBjYW4gbm90IGNoYW5nZSBjb25maWd1cmF0aW9uIGFmdGVyIG9wZW5pbmcKKyAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wpCisgICAgICAgICAgICBjYWNoZXNpemUgPSAoMCwgMioxMDI0KjEwMjQsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfY2FjaGVzaXplLCAqY2FjaGVzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZXNpemUyLCBzZWxmLmVudi5nZXRfY2FjaGVzaXplKCkpCisKKyAgICAgICAgZGVmIHRlc3Rfc2V0X2NhY2hlc2l6ZV9kYmVudl9kYihzZWxmKSA6CisgICAgICAgICAgICAjIFlvdSBjYW4gbm90IGNvbmZpZ3VyZSB0aGUgY2FjaGVzaXplIHVzaW5nCisgICAgICAgICAgICAjIHRoZSBkYXRhYmFzZSBoYW5kbGUsIGlmIHlvdSBhcmUgdXNpbmcgYW4gZW52aXJvbm1lbnQuCisgICAgICAgICAgICBkID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwKKyAgICAgICAgICAgICAgICBkLnNldF9jYWNoZXNpemUsIDAsIDEwMjQqMTAyNCwgMSkKKworICAgICAgICBkZWYgdGVzdF9zZXRnZXRfc2htX2tleShzZWxmKSA6CisgICAgICAgICAgICBzaG1fa2V5PTEzNworICAgICAgICAgICAgc2VsZi5lbnYuc2V0X3NobV9rZXkoc2htX2tleSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2htX2tleSwgc2VsZi5lbnYuZ2V0X3NobV9rZXkoKSkKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9zaG1fa2V5KHNobV9rZXkrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2htX2tleSsxLCBzZWxmLmVudi5nZXRfc2htX2tleSgpKQorCisgICAgICAgICAgICAjIFlvdSBjYW4gbm90IGNoYW5nZSBjb25maWd1cmF0aW9uIGFmdGVyIG9wZW5pbmcKKyAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wpCisgICAgICAgICAgICAjIElmIHdlIHRyeSB0byByZWNvbmZpZ3VyZSBjYWNoZSBhZnRlciBvcGVuaW5nIHRoZQorICAgICAgICAgICAgIyBlbnZpcm9ubWVudCwgY29yZSBkdW1wLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X3NobV9rZXksIHNobV9rZXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNobV9rZXkrMSwgc2VsZi5lbnYuZ2V0X3NobV9rZXkoKSkKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNCkgOgorICAgICAgICBkZWYgdGVzdF9tdXRleF9zZXRnZXRfbWF4KHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLmVudi5tdXRleF9nZXRfbWF4KCkKKyAgICAgICAgICAgIHYyID0gdioyKzEKKworICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X21heCh2MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodjIsIHNlbGYuZW52Lm11dGV4X2dldF9tYXgoKSkKKworICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X21heCh2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCBzZWxmLmVudi5tdXRleF9nZXRfbWF4KCkpCisKKyAgICAgICAgICAgICMgWW91IGNhbiBub3QgY2hhbmdlIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgb3BlbmluZworICAgICAgICAgICAgIyB0aGUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9tYXgsIHYyKQorCisgICAgICAgIGRlZiB0ZXN0X211dGV4X3NldGdldF9pbmNyZW1lbnQoc2VsZikgOgorICAgICAgICAgICAgdiA9IHNlbGYuZW52Lm11dGV4X2dldF9pbmNyZW1lbnQoKQorICAgICAgICAgICAgdjIgPSAxMjcKKworICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X2luY3JlbWVudCh2MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodjIsIHNlbGYuZW52Lm11dGV4X2dldF9pbmNyZW1lbnQoKSkKKworICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X2luY3JlbWVudCh2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCBzZWxmLmVudi5tdXRleF9nZXRfaW5jcmVtZW50KCkpCisKKyAgICAgICAgICAgICMgWW91IGNhbiBub3QgY2hhbmdlIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgb3BlbmluZworICAgICAgICAgICAgIyB0aGUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9pbmNyZW1lbnQsIHYyKQorCisgICAgICAgIGRlZiB0ZXN0X211dGV4X3NldGdldF90YXNfc3BpbnMoc2VsZikgOgorICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X3Rhc19zcGlucygwKSAgIyBEZWZhdWx0ID0gQkRCIGRlY2lkZXMKKyAgICAgICAgICAgIHYgPSBzZWxmLmVudi5tdXRleF9nZXRfdGFzX3NwaW5zKCkKKyAgICAgICAgICAgIHYyID0gdioyKzEKKworICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X3Rhc19zcGlucyh2MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodjIsIHNlbGYuZW52Lm11dGV4X2dldF90YXNfc3BpbnMoKSkKKworICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X3Rhc19zcGlucyh2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCBzZWxmLmVudi5tdXRleF9nZXRfdGFzX3NwaW5zKCkpCisKKyAgICAgICAgICAgICMgSW4gdGhpcyBjYXNlLCB5b3UgY2FuIGNoYW5nZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAjIGFmdGVyIG9wZW5pbmcgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF90YXNfc3BpbnModjIpCisKKyAgICAgICAgZGVmIHRlc3RfbXV0ZXhfc2V0Z2V0X2FsaWduKHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLmVudi5tdXRleF9nZXRfYWxpZ24oKQorICAgICAgICAgICAgdjIgPSA2NAorICAgICAgICAgICAgaWYgdiA9PSA2NCA6CisgICAgICAgICAgICAgICAgdjIgPSAxMjgKKworICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X2FsaWduKHYyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Miwgc2VsZi5lbnYubXV0ZXhfZ2V0X2FsaWduKCkpCisKKyAgICAgICAgICAgICMgUmVxdWlyZXMgYSBub256ZXJvIHBvd2VyIG9mIHR3bworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9hbGlnbiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfYWxpZ24sIDE3KQorCisgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfYWxpZ24oMip2MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMip2Miwgc2VsZi5lbnYubXV0ZXhfZ2V0X2FsaWduKCkpCisKKyAgICAgICAgICAgICMgWW91IGNhbiBub3QgY2hhbmdlIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgb3BlbmluZworICAgICAgICAgICAgIyB0aGUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9hbGlnbiwgdjIpCisKKworY2xhc3MgREJFbnZfbG9nKERCRW52KSA6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBEQkVudi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTCB8IGRiLkRCX0lOSVRfTE9HKQorCisgICAgZGVmIHRlc3RfbG9nX2ZpbGUoc2VsZikgOgorICAgICAgICBsb2dfZmlsZSA9IHNlbGYuZW52LmxvZ19maWxlKCgxLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgibG9nLjAwMDAwMDAwMDEiLCBsb2dfZmlsZVstMTQ6XSkKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNCkgOgorICAgICAgICAjIFRoZSB2ZXJzaW9uIHdpdGggdHJhbnNhY3Rpb25zIGlzIGNoZWNrZWQgaW4gb3RoZXIgdGVzdCBvYmplY3QKKyAgICAgICAgZGVmIHRlc3RfbG9nX3ByaW50ZihzZWxmKSA6CisgICAgICAgICAgICBtc2cgPSAiVGhpcyBpcyBhIHRlc3QuLi4iCisgICAgICAgICAgICBzZWxmLmVudi5sb2dfcHJpbnRmKG1zZykKKyAgICAgICAgICAgIGxvZ2MgPSBzZWxmLmVudi5sb2dfY3Vyc29yKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cgaW4gKGxvZ2MubGFzdCgpWzFdKSkKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNykgOgorICAgICAgICBkZWYgdGVzdF9sb2dfY29uZmlnKHNlbGYpIDoKKyAgICAgICAgICAgIHNlbGYuZW52LmxvZ19zZXRfY29uZmlnKGRiLkRCX0xPR19EU1lOQyB8IGRiLkRCX0xPR19aRVJPLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52LmxvZ19nZXRfY29uZmlnKGRiLkRCX0xPR19EU1lOQykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYubG9nX2dldF9jb25maWcoZGIuREJfTE9HX1pFUk8pKQorICAgICAgICAgICAgc2VsZi5lbnYubG9nX3NldF9jb25maWcoZGIuREJfTE9HX1pFUk8sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYubG9nX2dldF9jb25maWcoZGIuREJfTE9HX0RTWU5DKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5lbnYubG9nX2dldF9jb25maWcoZGIuREJfTE9HX1pFUk8pKQorCisKK2NsYXNzIERCRW52X2xvZ190eG4oREJFbnYpIDoKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIERCRW52LnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX01QT09MIHwKKyAgICAgICAgICAgICAgICBkYi5EQl9JTklUX0xPRyB8IGRiLkRCX0lOSVRfVFhOKQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA1KSA6CisgICAgICAgIGRlZiB0ZXN0X3R4X21heChzZWxmKSA6CisgICAgICAgICAgICB0eG5zPVtdCisgICAgICAgICAgICBkZWYgdHgoKSA6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuZW52LmdldF90eF9tYXgoKSkgOgorICAgICAgICAgICAgICAgICAgICB0eG5zLmFwcGVuZChzZWxmLmVudi50eG5fYmVnaW4oKSkKKworICAgICAgICAgICAgdHgoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTWVtb3J5RXJyb3IsIHR4KQorCisgICAgICAgICAgICAjIEFib3J0IHRoZSB0cmFuc2FjdGlvbnMgYmVmb3JlIGdhcmJhZ2UgY29sbGVjdGlvbiwKKyAgICAgICAgICAgICMgdG8gYXZvaWQgIndhcm5pbmdzIi4KKyAgICAgICAgICAgIGZvciBpIGluIHR4bnMgOgorICAgICAgICAgICAgICAgIGkuYWJvcnQoKQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA0KSA6CisgICAgICAgICMgVGhlIHZlcnNpb24gd2l0aG91dCB0cmFuc2FjdGlvbnMgaXMgY2hlY2tlZCBpbiBvdGhlciB0ZXN0IG9iamVjdAorICAgICAgICBkZWYgdGVzdF9sb2dfcHJpbnRmKHNlbGYpIDoKKyAgICAgICAgICAgIG1zZyA9ICJUaGlzIGlzIGEgdGVzdC4uLiIKKyAgICAgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgICAgICBzZWxmLmVudi5sb2dfcHJpbnRmKG1zZywgdHhuPXR4bikKKyAgICAgICAgICAgIHR4bi5jb21taXQoKQorICAgICAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICAgICAgbG9nYy5sYXN0KCkgICMgU2tpcCB0aGUgY29tbWl0CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnIGluIChsb2djLnByZXYoKVsxXSkpCisKKyAgICAgICAgICAgIG1zZyA9ICJUaGlzIGlzIGFub3RoZXIgdGVzdC4uLiIKKyAgICAgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgICAgICBzZWxmLmVudi5sb2dfcHJpbnRmKG1zZywgdHhuPXR4bikKKyAgICAgICAgICAgIHR4bi5hYm9ydCgpICAjIERvIG5vdCBzdG9yZSB0aGUgbmV3IG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2MubGFzdCgpICAjIFNraXAgdGhlIGFib3J0CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnIG5vdCBpbiAobG9nYy5wcmV2KClbMV0pKQorCisgICAgICAgICAgICBtc2cgPSAiVGhpcyBpcyBhIHRoaXJkIHRlc3QuLi4iCisgICAgICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5lbnYubG9nX3ByaW50Zihtc2csIHR4bj10eG4pCisgICAgICAgICAgICB0eG4uY29tbWl0KCkgICMgRG8gbm90IHN0b3JlIHRoZSBuZXcgbWVzc2FnZQorICAgICAgICAgICAgbG9nYy5sYXN0KCkgICMgU2tpcCB0aGUgY29tbWl0CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnIGluIChsb2djLnByZXYoKVsxXSkpCisKKworY2xhc3MgREJFbnZfbWVtcChEQkVudik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBEQkVudi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTCB8IGRiLkRCX0lOSVRfTE9HKQorICAgICAgICBzZWxmLmRiID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgIHNlbGYuZGIub3BlbigidGVzdCIsIGRiLkRCX0hBU0gsIGRiLkRCX0NSRUFURSwgMDY2MCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5kYi5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLmRiCisgICAgICAgIERCRW52LnRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgdGVzdF9tZW1wXzFfdHJpY2tsZShzZWxmKSA6CisgICAgICAgIHNlbGYuZGIucHV0KCJoaSIsICJieWUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYubWVtcF90cmlja2xlKDEwMCkgPiAwKQorCisjIFByZXNlcnZlIHRoZSBvcmRlciwgZG8gIm1lbXBfdHJpY2tsZSIgdGVzdCBmaXJzdAorICAgIGRlZiB0ZXN0X21lbXBfMl9zeW5jKHNlbGYpIDoKKyAgICAgICAgc2VsZi5kYi5wdXQoImhpIiwgImJ5ZSIpCisgICAgICAgIHNlbGYuZW52Lm1lbXBfc3luYygpICAjIEZ1bGwgZmx1c2gKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmVudi5tZW1wX3RyaWNrbGUoMTAwKSA9PSAwKQorCisgICAgICAgIHNlbGYuZGIucHV0KCJoaSIsICJieWUyIikKKyAgICAgICAgc2VsZi5lbnYubWVtcF9zeW5jKCgxLCAwKSkgICMgTk9QLCBwcm9iYWJseQorICAgICAgICAjIFNvbWV0aGluZyB0byBkby4uLiBvciBub3QKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52Lm1lbXBfdHJpY2tsZSgxMDApID49IDApCisKKyAgICAgICAgc2VsZi5kYi5wdXQoImhpIiwgImJ5ZTMiKQorICAgICAgICBzZWxmLmVudi5tZW1wX3N5bmMoKDEyMywgOTkpKSAgIyBGdWxsIGZsdXNoCisgICAgICAgICMgTm90aGluZyB0byBkby4uLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYubWVtcF90cmlja2xlKDEwMCkgPT0gMCkKKworICAgIGRlZiB0ZXN0X21lbXBfc3RhdF8xKHNlbGYpIDoKKyAgICAgICAgc3RhdHMgPSBzZWxmLmVudi5tZW1wX3N0YXQoKSAgIyBObyBwYXJhbQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHN0YXRzKT09MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJjYWNoZV9taXNzIiBpbiBzdGF0c1swXSkKKyAgICAgICAgc3RhdHMgPSBzZWxmLmVudi5tZW1wX3N0YXQoZGIuREJfU1RBVF9DTEVBUikgICMgUG9zaXRpb25hbCBwYXJhbQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImNhY2hlX21pc3MiIGluIHN0YXRzWzBdKQorICAgICAgICBzdGF0cyA9IHNlbGYuZW52Lm1lbXBfc3RhdChmbGFncz0wKSAgIyBLZXl3b3JkIHBhcmFtCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiY2FjaGVfbWlzcyIgaW4gc3RhdHNbMF0pCisKKyAgICBkZWYgdGVzdF9tZW1wX3N0YXRfMihzZWxmKSA6CisgICAgICAgIHN0YXRzPXNlbGYuZW52Lm1lbXBfc3RhdCgpWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oc3RhdHMpKT09MQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInRlc3QiIGluIHN0YXRzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInBhZ2VfaW4iIGluIHN0YXRzWyJ0ZXN0Il0pCisKK2NsYXNzIERCRW52X2xvZ2N1cnNvcihEQkVudik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBEQkVudi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTCB8CisgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9JTklUX1RYTikKKyAgICAgICAgdHhuID0gc2VsZi5lbnYudHhuX2JlZ2luKCkKKyAgICAgICAgc2VsZi5kYiA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBzZWxmLmRiLm9wZW4oInRlc3QiLCBkYi5EQl9IQVNILCBkYi5EQl9DUkVBVEUsIDA2NjAsIHR4bj10eG4pCisgICAgICAgIHR4bi5jb21taXQoKQorICAgICAgICBmb3IgaSBpbiBbIjIiLCAiOCIsICIyMCJdIDoKKyAgICAgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgICAgICBzZWxmLmRiLnB1dChrZXkgPSBpLCBkYXRhID0gaSppbnQoaSksIHR4bj10eG4pCisgICAgICAgICAgICB0eG4uY29tbWl0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5kYi5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLmRiCisgICAgICAgIERCRW52LnRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgX2NoZWNrX3JldHVybihzZWxmLCB2YWx1ZSkgOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2YWx1ZSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZhbHVlWzBdLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlWzBdKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWVbMF1bMF0sIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZhbHVlWzBdWzFdLCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2YWx1ZVsxXSwgc3RyKSkKKworICAgICMgUHJlc2VydmUgdGVzdCBvcmRlcgorICAgIGRlZiB0ZXN0XzFfZmlyc3Qoc2VsZikgOgorICAgICAgICBsb2djID0gc2VsZi5lbnYubG9nX2N1cnNvcigpCisgICAgICAgIHYgPSBsb2djLmZpcnN0KCkKKyAgICAgICAgc2VsZi5fY2hlY2tfcmV0dXJuKHYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoMSwgMSkgPCB2WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHZbMV0pPjApCisKKyAgICBkZWYgdGVzdF8yX2xhc3Qoc2VsZikgOgorICAgICAgICBsb2djID0gc2VsZi5lbnYubG9nX2N1cnNvcigpCisgICAgICAgIGxzbl9maXJzdCA9IGxvZ2MuZmlyc3QoKVswXQorICAgICAgICB2ID0gbG9nYy5sYXN0KCkKKyAgICAgICAgc2VsZi5fY2hlY2tfcmV0dXJuKHYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fZmlyc3QgPCB2WzBdKQorCisgICAgZGVmIHRlc3RfM19uZXh0KHNlbGYpIDoKKyAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICBsc25fbGFzdCA9IGxvZ2MubGFzdCgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nYy5uZXh0KCksIE5vbmUpCisgICAgICAgIGxzbl9maXJzdCA9IGxvZ2MuZmlyc3QoKVswXQorICAgICAgICB2ID0gbG9nYy5uZXh0KCkKKyAgICAgICAgc2VsZi5fY2hlY2tfcmV0dXJuKHYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fZmlyc3QgPCB2WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHNuX2xhc3QgPiB2WzBdKQorCisgICAgICAgIHYyID0gbG9nYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYyWzBdID4gdlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzbl9sYXN0ID4gdjJbMF0pCisKKyAgICAgICAgdjMgPSBsb2djLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodjNbMF0gPiB2MlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzbl9sYXN0ID4gdjNbMF0pCisKKyAgICBkZWYgdGVzdF80X3ByZXYoc2VsZikgOgorICAgICAgICBsb2djID0gc2VsZi5lbnYubG9nX2N1cnNvcigpCisgICAgICAgIGxzbl9maXJzdCA9IGxvZ2MuZmlyc3QoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2MucHJldigpLCBOb25lKQorICAgICAgICBsc25fbGFzdCA9IGxvZ2MubGFzdCgpWzBdCisgICAgICAgIHYgPSBsb2djLnByZXYoKQorICAgICAgICBzZWxmLl9jaGVja19yZXR1cm4odikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzbl9maXJzdCA8IHZbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fbGFzdCA+IHZbMF0pCisKKyAgICAgICAgdjIgPSBsb2djLnByZXYoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodjJbMF0gPCB2WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHNuX2ZpcnN0IDwgdjJbMF0pCisKKyAgICAgICAgdjMgPSBsb2djLnByZXYoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodjNbMF0gPCB2MlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzbl9maXJzdCA8IHYzWzBdKQorCisgICAgZGVmIHRlc3RfNV9jdXJyZW50KHNlbGYpIDoKKyAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICBsb2djLmZpcnN0KCkKKyAgICAgICAgdiA9IGxvZ2MubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgbG9nYy5jdXJyZW50KCkpCisKKyAgICBkZWYgdGVzdF82X3NldChzZWxmKSA6CisgICAgICAgIGxvZ2MgPSBzZWxmLmVudi5sb2dfY3Vyc29yKCkKKyAgICAgICAgbG9nYy5maXJzdCgpCisgICAgICAgIHYgPSBsb2djLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHYsIGxvZ2MubmV4dCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHYsIGxvZ2MubmV4dCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIGxvZ2Muc2V0KHZbMF0pKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfY2xvc2Uoc2VsZikgOgorICAgICAgICBsb2djID0gc2VsZi5lbnYubG9nX2N1cnNvcigpCisgICAgICAgIGxvZ2MuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkN1cnNvckNsb3NlZEVycm9yLCBsb2djLm5leHQpCisKKyAgICBkZWYgdGVzdF9pbXBsaWNpdF9jbG9zZShzZWxmKSA6CisgICAgICAgIGxvZ2MgPSAgW3NlbGYuZW52LmxvZ19jdXJzb3IoKSBmb3IgaSBpbiB4cmFuZ2UoMTApXQorICAgICAgICBzZWxmLmVudi5jbG9zZSgpICAjIFRoaXMgY2xvc2Ugc2hvdWxkIGNsb3NlIHRvbyBhbGwgaXRzIHRyZWUKKyAgICAgICAgZm9yIGkgaW4gbG9nYyA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkN1cnNvckNsb3NlZEVycm9yLCBpLm5leHQpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJFbnZfZ2VuZXJhbCkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJFbnZfbWVtcCkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJFbnZfbG9nY3Vyc29yKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQkVudl9sb2cpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCRW52X2xvZ190eG4pKQorCisgICAgcmV0dXJuIHN1aXRlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0ndGVzdF9zdWl0ZScpCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2Ric2hlbHZlLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYnNoZWx2ZS5weQppbmRleCAxM2Y5Y2QyLi5jMDEzNWZlIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2Ric2hlbHZlLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZGJzaGVsdmUucHkKQEAgLTIsMTAgKzIsOSBAQAogVGVzdENhc2VzIGZvciBjaGVja2luZyBkYlNoZWx2ZSBvYmplY3RzLgogIiIiCiAKLWltcG9ydCBvcywgc3RyaW5nCitpbXBvcnQgb3MsIHN0cmluZywgc3lzCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3YXJuaW5ncwogCiAKIGZyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCBkYnNoZWx2ZSwgdGVzdF9zdXBwb3J0LCB2ZXJib3NlLCBcCkBAIC0xMyw2ICsxMiwxMSBAQAogCiAKIAoraWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KSA6CisgICAgZnJvbSBzZXRzIGltcG9ydCBTZXQgYXMgc2V0CisKKworCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIFdlIHdhbnQgdGhlIG9iamVjdHMgdG8gYmUgY29tcGFyYWJsZSBzbyB3ZSBjYW4gdGVzdCBkYnNoZWx2ZS52YWx1ZXMKQEAgLTI5LDggKzMzLDE3IEBACiAKIAogY2xhc3MgREJTaGVsdmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KToKKyAgICAgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCisKKyAgICBpZiAoc3lzLnZlcnNpb25faW5mbyA8ICgyLCA3KSkgb3IgKChzeXMudmVyc2lvbl9pbmZvID49ICgzLCAwKSkgYW5kCisgICAgICAgICAgICAoc3lzLnZlcnNpb25faW5mbyA8ICgzLCAyKSkpIDoKKyAgICAgICAgZGVmIGFzc2VydEluKHNlbGYsIGEsIGIsIG1zZz1Ob25lKSA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hc3NlcnRUcnVlKGEgaW4gYiwgbXNnPW1zZykKKworCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMyA6CiAgICAgICAgICAgICBmcm9tIHRlc3RfYWxsIGltcG9ydCBkb19wcm94eV9kYl9weTNrCiAgICAgICAgICAgICBzZWxmLl9mbGFnX3Byb3h5X2RiX3B5M2sgPSBkb19wcm94eV9kYl9weTNrKEZhbHNlKQpAQCAtMzgsNyArNTEsNiBAQAogICAgICAgICBzZWxmLmRvX29wZW4oKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMyA6CiAgICAgICAgICAgICBmcm9tIHRlc3RfYWxsIGltcG9ydCBkb19wcm94eV9kYl9weTNrCiAgICAgICAgICAgICBkb19wcm94eV9kYl9weTNrKHNlbGYuX2ZsYWdfcHJveHlfZGJfcHkzaykKQEAgLTQ4LDcgKzYwLDYgQEAKICAgICBkZWYgbWsoc2VsZiwga2V5KToKICAgICAgICAgIiIiVHVybiBrZXkgaW50byBhbiBhcHByb3ByaWF0ZSBrZXkgdHlwZSBmb3IgdGhpcyBkYiIiIgogICAgICAgICAjIG92ZXJyaWRlIGluIGNoaWxkIGNsYXNzIGZvciBSRUNOTwotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgIHJldHVybiBrZXkKICAgICAgICAgZWxzZSA6CkBAIC0xMTgsMTEgKzEyOSwxNCBAQAogCiAgICAgICAgIGRidmFsdWVzID0gZC52YWx1ZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkYnZhbHVlcyksIGxlbihkLmtleXMoKSkpCi0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKLSAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBhcmluZyB1bmVxdWFsIHR5cGVzIG5vdCBzdXBwb3J0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodmFsdWVzKSwgc29ydGVkKGRidmFsdWVzKSkKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgICAgICAgICB2YWx1ZXMuc29ydCgpCisgICAgICAgICAgICBkYnZhbHVlcy5zb3J0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCBkYnZhbHVlcykKKyAgICAgICAgZWxzZSA6ICAjIFhYWDogQ29udmVydCBhbGwgdG8gc3RyaW5ncy4gUGxlYXNlLCBpbXByb3ZlCisgICAgICAgICAgICB2YWx1ZXMuc29ydChrZXk9bGFtYmRhIHggOiBzdHIoeCkpCisgICAgICAgICAgICBkYnZhbHVlcy5zb3J0KGtleT1sYW1iZGEgeCA6IHN0cih4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih2YWx1ZXMpLCByZXByKGRidmFsdWVzKSkKIAogICAgICAgICBpdGVtcyA9IGQuaXRlbXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdGVtcyksIGxlbih2YWx1ZXMpKQpAQCAtMTk3LDEwICsyMTEsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmFwcGVuZCwgJ3VuaXQgdGVzdCB3YXMgaGVyZScpCiAKIAorICAgIGRlZiB0ZXN0MDRfaXRlcmFibGUoc2VsZikgOgorICAgICAgICBzZWxmLnBvcHVsYXRlREIoc2VsZi5kKQorICAgICAgICBkID0gc2VsZi5kCisgICAgICAgIGtleXMgPSBkLmtleXMoKQorICAgICAgICBrZXlzZXQgPSBzZXQoa2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5c2V0KSwgbGVuKGtleXMpKQorCisgICAgICAgIGZvciBrZXkgaW4gZCA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwga2V5c2V0KQorICAgICAgICAgICAga2V5c2V0LnJlbW92ZShrZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXNldCksIDApCisKICAgICBkZWYgY2hlY2tyZWMoc2VsZiwga2V5LCB2YWx1ZSk6CiAgICAgICAgICMgb3ZlcnJpZGUgdGhpcyBpbiBhIHN1YmNsYXNzIGlmIHRoZSBrZXkgdHlwZSBpcyBkaWZmZXJlbnQKIAotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMyA6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgYnl0ZXMpIDoKICAgICAgICAgICAgICAgICBrZXkgPSBrZXkuZGVjb2RlKCJpc284ODU5LTEiKSAgIyA4IGJpdHMKQEAgLTIxOSw3ICsyNDQsNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgW3hdICogMTApCiAKICAgICAgICAgZWxpZiBrZXlbMF0gPT0gJ08nOgotICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgogICAgICAgICAgICAgICAgIGZyb20gdHlwZXMgaW1wb3J0IEluc3RhbmNlVHlwZQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWx1ZSksIEluc3RhbmNlVHlwZSkKQEAgLTIzMSw3ICsyNTUsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5MLCBbeF0gKiAxMCkKIAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDAsICdVbmtub3duIGtleSB0eXBlLCBmaXggdGhlIHRlc3QnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAsICdVbmtub3duIGtleSB0eXBlLCBmaXggdGhlIHRlc3QnKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yODcsNyArMzExLDYgQEAKICAgICAgICAgREJTaGVsdmVUZXN0Q2FzZS5zZXRVcChzZWxmKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMyA6CiAgICAgICAgICAgICBmcm9tIHRlc3RfYWxsIGltcG9ydCBkb19wcm94eV9kYl9weTNrCiAgICAgICAgICAgICBkb19wcm94eV9kYl9weTNrKHNlbGYuX2ZsYWdfcHJveHlfZGJfcHkzaykKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZGJ0YWJsZXMucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2RidGFibGVzLnB5CmluZGV4IDkzNWM5ZDUuLmJiMzEzODEgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZGJ0YWJsZXMucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYnRhYmxlcy5weQpAQCAtMjAsMTEgKzIwLDE1IEBACiAjCiAjICRJZCQKIAotaW1wb3J0IG9zLCByZQotdHJ5OgotICAgIGltcG9ydCBjUGlja2xlCi0gICAgcGlja2xlID0gY1BpY2tsZQotZXhjZXB0IEltcG9ydEVycm9yOgoraW1wb3J0IG9zLCByZSwgc3lzCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBjUGlja2xlCisgICAgICAgIHBpY2tsZSA9IGNQaWNrbGUKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGltcG9ydCBwaWNrbGUKK2Vsc2UgOgogICAgIGltcG9ydCBwaWNrbGUKIAogaW1wb3J0IHVuaXR0ZXN0CkBAIC04MCw4ICs4NCw4IEBACiAgICAgICAgICAgICBjb2x2YWwgPSBwaWNrbGUubG9hZHModmFsdWVzWzBdW2NvbG5hbWVdKQogICAgICAgICBlbHNlIDoKICAgICAgICAgICAgIGNvbHZhbCA9IHBpY2tsZS5sb2FkcyhieXRlcyh2YWx1ZXNbMF1bY29sbmFtZV0sICJpc284ODU5LTEiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbHZhbCA+IDMuMTQxKQotICAgICAgICBzZWxmLmFzc2VydF8oY29sdmFsIDwgMy4xNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2x2YWwgPiAzLjE0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbHZhbCA8IDMuMTQyKQogCiAKICAgICBkZWYgdGVzdDAyKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9kaXN0cmlidXRlZF90cmFuc2FjdGlvbnMucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2Rpc3RyaWJ1dGVkX3RyYW5zYWN0aW9ucy5weQppbmRleCBmODY0Yjg4Li4xNzExZmM1IDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2Rpc3RyaWJ1dGVkX3RyYW5zYWN0aW9ucy5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2Rpc3RyaWJ1dGVkX3RyYW5zYWN0aW9ucy5weQpAQCAtMzUsOSArMzUsOSBAQAogICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfVFhOIHwgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9JTklUX01QT09MIHwKICAgICAgICAgICAgICAgICBkYi5EQl9JTklUX0xPQ0ssIDA2NjYpCiAgICAgICAgIHNlbGYuZGIgPSBkYi5EQihzZWxmLmRiZW52KQotICAgICAgICBzZWxmLmRiLnNldF9yZV9sZW4oZGIuREJfWElEREFUQVNJWkUpCisgICAgICAgIHNlbGYuZGIuc2V0X3JlX2xlbihkYi5EQl9HSURfU0laRSkKICAgICAgICAgaWYgbXVzdF9vcGVuX2RiIDoKLSAgICAgICAgICAgIGlmIGRiLnZlcnNpb24oKSA+ICg0LDEpIDoKKyAgICAgICAgICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwyKSA6CiAgICAgICAgICAgICAgICAgdHhuPXNlbGYuZGJlbnYudHhuX2JlZ2luKCkKICAgICAgICAgICAgICAgICBzZWxmLmRiLm9wZW4oc2VsZi5maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRiLkRCX1FVRVVFLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9USFJFQUQsIDA2NjYsCkBAIC03Niw3ICs3Niw3IEBACiAgICAgIyBsZXQgdGhlbSBiZSBnYXJiYWdlIGNvbGxlY3RlZC4KICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYubnVtX3R4bnMpIDoKICAgICAgICAgICAgIHR4biA9IHNlbGYuZGJlbnYudHhuX2JlZ2luKCkKLSAgICAgICAgICAgIGdpZCA9ICIlJSVkZCIgJWRiLkRCX1hJRERBVEFTSVpFCisgICAgICAgICAgICBnaWQgPSAiJSUlZGQiICVkYi5EQl9HSURfU0laRQogICAgICAgICAgICAgZ2lkID0gYWRhcHQoZ2lkICVpKQogICAgICAgICAgICAgc2VsZi5kYi5wdXQoaSwgZ2lkLCB0eG49dHhuLCBmbGFncz1kYi5EQl9BUFBFTkQpCiAgICAgICAgICAgICB0eG5zLmFkZChnaWQpCkBAIC04OCw5ICs4OCw5IEBACiAgICAgIyBHZXQgInRvIGJlIHJlY292ZXJlZCIgdHJhbnNhY3Rpb25zIGJ1dAogICAgICMgbGV0IHRoZW0gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAgICAgICAgIHJlY292ZXJlZF90eG5zPXNlbGYuZGJlbnYudHhuX3JlY292ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm51bV90eG5zLGxlbihyZWNvdmVyZWRfdHhucykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5udW1fdHhucyxsZW4ocmVjb3ZlcmVkX3R4bnMpKQogICAgICAgICBmb3IgZ2lkLHR4biBpbiByZWNvdmVyZWRfdHhucyA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZ2lkIGluIHR4bnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2lkIGluIHR4bnMpCiAgICAgICAgIGRlbCB0eG4KICAgICAgICAgZGVsIHJlY292ZXJlZF90eG5zCiAKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAjIEdldCAidG8gYmUgcmVjb3ZlcmVkIiB0cmFuc2FjdGlvbnMuIENvbW1pdCwgYWJvcnQgYW5kCiAgICAgIyBkaXNjYXJkIHRoZW0uCiAgICAgICAgIHJlY292ZXJlZF90eG5zPXNlbGYuZGJlbnYudHhuX3JlY292ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm51bV90eG5zLGxlbihyZWNvdmVyZWRfdHhucykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5udW1fdHhucyxsZW4ocmVjb3ZlcmVkX3R4bnMpKQogICAgICAgICBkaXNjYXJkX3R4bnM9c2V0KCkKICAgICAgICAgY29tbWl0dGVkX3R4bnM9c2V0KCkKICAgICAgICAgc3RhdGU9MApAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgIyBWZXJpZnkgdGhlIGRpc2NhcmRlZCB0cmFuc2FjdGlvbnMgYXJlIHN0aWxsCiAgICAgIyBhcm91bmQsIGFuZCBkaXNwb3NlIHRoZW0uCiAgICAgICAgIHJlY292ZXJlZF90eG5zPXNlbGYuZGJlbnYudHhuX3JlY292ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oZGlzY2FyZF90eG5zKSxsZW4ocmVjb3ZlcmVkX3R4bnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXNjYXJkX3R4bnMpLGxlbihyZWNvdmVyZWRfdHhucykpCiAgICAgICAgIGZvciBnaWQsdHhuIGluIHJlY292ZXJlZF90eG5zIDoKICAgICAgICAgICAgIHR4bi5hYm9ydCgpCiAgICAgICAgIGRlbCB0eG4KQEAgLTEzMyw4ICsxMzMsOCBAQAogICAgICMgQmUgc3VyZSB0aGVyZSBhcmUgbm90IHBlbmRpbmcgdHJhbnNhY3Rpb25zLgogICAgICMgQ2hlY2sgYWxzbyBkYXRhYmFzZSBzaXplLgogICAgICAgICByZWNvdmVyZWRfdHhucz1zZWxmLmRiZW52LnR4bl9yZWNvdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihyZWNvdmVyZWRfdHhucyk9PTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjb21taXR0ZWRfdHhucyksc2VsZi5kYi5zdGF0KClbIm5rZXlzIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocmVjb3ZlcmVkX3R4bnMpPT0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjb21taXR0ZWRfdHhucyksc2VsZi5kYi5zdGF0KClbIm5rZXlzIl0pCiAKIGNsYXNzIERCVHhuX2Rpc3RyaWJ1dGVkU1lOQyhEQlR4bl9kaXN0cmlidXRlZCk6CiAgICAgbm9zeW5jPUZhbHNlCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2Vhcmx5X2Nsb3NlLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9lYXJseV9jbG9zZS5weQppbmRleCBjYzY5ZTQ3Li44NmI4NmRjIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2Vhcmx5X2Nsb3NlLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZWFybHlfY2xvc2UucHkKQEAgLTIsNyArMiw3IEBACiBpcyBjbG9zZWQgYmVmb3JlIGl0cyBEQiBvYmplY3RzLgogIiIiCiAKLWltcG9ydCBvcworaW1wb3J0IG9zLCBzeXMKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3RfYWxsIGltcG9ydCBkYiwgdGVzdF9zdXBwb3J0LCB2ZXJib3NlLCBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIGdldF9uZXdfZGF0YWJhc2VfcGF0aApAQCAtMTU1LDIyICsxNTUsNDMgQEAKICAgICAgICAgICAgICAgICBkYi5EQl9JTklUX0xPRyB8IGRiLkRCX0NSRUFURSkKICAgICAgICAgZCA9IGRiLkRCKGRiZW52KQogICAgICAgICB0eG4gPSBkYmVudi50eG5fYmVnaW4oKQotICAgICAgICBpZiBkYi52ZXJzaW9uKCkgPCAoNCwxKSA6Ci0gICAgICAgICAgICBkLm9wZW4oc2VsZi5maWxlbmFtZSwgZGJ0eXBlID0gZGIuREJfSEFTSCwgZmxhZ3MgPSBkYi5EQl9DUkVBVEUpCi0gICAgICAgIGVsc2UgOgotICAgICAgICAgICAgZC5vcGVuKHNlbGYuZmlsZW5hbWUsIGRidHlwZSA9IGRiLkRCX0hBU0gsIGZsYWdzID0gZGIuREJfQ1JFQVRFLAotICAgICAgICAgICAgICAgICAgICB0eG49dHhuKQorICAgICAgICBkLm9wZW4oc2VsZi5maWxlbmFtZSwgZGJ0eXBlID0gZGIuREJfSEFTSCwgZmxhZ3MgPSBkYi5EQl9DUkVBVEUsCisgICAgICAgICAgICAgICAgdHhuPXR4bikKICAgICAgICAgZC5wdXQoIlhYWCIsICJ5eXkiLCB0eG49dHhuKQogICAgICAgICB0eG4uY29tbWl0KCkKICAgICAgICAgdHhuID0gZGJlbnYudHhuX2JlZ2luKCkKICAgICAgICAgYzEgPSBkLmN1cnNvcih0eG4pCiAgICAgICAgIGMyID0gYzEuZHVwKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKCJYWFgiLCAieXl5IiksIGMxLmZpcnN0KCkpCi0gICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgiWFhYIiwgInl5eSIpLCBjMS5maXJzdCgpKQorCiAgICAgICAgICMgTm90IGludGVyZXN0ZWQgaW4gd2FybmluZ3MgYWJvdXQgaW1wbGljaXQgY2xvc2UuCi0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgIyBDb21wbGV0ZWx5IHJlc2V0dGluZyB0aGUgd2FybmluZyBzdGF0ZSBpcworICAgICAgICAgICAgIyBwcm9ibGVtYXRpYyB3aXRoIHB5dGhvbiA+PTIuNiB3aXRoIC0zIChweTNrIHdhcm5pbmcpLAorICAgICAgICAgICAgIyBiZWNhdXNlIHNvbWUgc3RkbGliIG1vZHVsZXMgc2VsZWN0aXZlbHkgaWdub3JlcyB3YXJuaW5ncy4KICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIikKICAgICAgICAgICAgIHR4bi5jb21taXQoKQorICAgICAgICAgICAgd2FybmluZ3MucmVzZXR3YXJuaW5ncygpCisgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgIyBXaGVuIHdlIGRyb3Agc3VwcG9ydCBmb3IgcHl0aG9uIDIuMyBhbmQgMi40CisgICAgICAgICAgICAjIHdlIGNvdWxkIHVzZTogKGluIDIuNSB3ZSBuZWVkIGEgX19mdXR1cmVfXyBzdGF0ZW1lbnQpCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICMgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIikKKyAgICAgICAgICAgICMgICAgICAgIHR4bi5jb21taXQoKQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBXZSBjYW4gbm90IHVzZSAid2l0aCIgYXMgaXMsIGJlY2F1c2UgaXQgd291bGQgYmUgaW52YWxpZCBzeW50YXgKKyAgICAgICAgICAgICMgaW4gcHl0aG9uIDIuMywgMi40IGFuZCAod2l0aCBubyBfX2Z1dHVyZV9fKSAyLjUuCisgICAgICAgICAgICAjIEhlcmUgd2Ugc2ltdWxhdGUgIndpdGgiIGZvbGxvd2luZyBQRVAgMzQzIDoKKyAgICAgICAgICAgIHcgPSB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpCisgICAgICAgICAgICB3Ll9fZW50ZXJfXygpCisgICAgICAgICAgICB0cnkgOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIikKKyAgICAgICAgICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgICAgIGZpbmFsbHkgOgorICAgICAgICAgICAgICAgIHcuX19leGl0X18oKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCQ3Vyc29yQ2xvc2VkRXJyb3IsIGMyLmZpcnN0KQogCiAgICAgaWYgZGIudmVyc2lvbigpID4gKDQsMywwKSA6CmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2ZpbGVpZC5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZmlsZWlkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NWVjODMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2ZpbGVpZC5weQpAQCAtMCwwICsxLDYxIEBACisiIiJUZXN0Q2FzZSBmb3IgcmVzZXRpbmcgRmlsZSBJRC4KKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3RfYWxsIGltcG9ydCBkYiwgdGVzdF9zdXBwb3J0LCBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIGdldF9uZXdfZGF0YWJhc2VfcGF0aAorCitjbGFzcyBGaWxlaWRSZXNldFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZGJfcGF0aF8xID0gZ2V0X25ld19kYXRhYmFzZV9wYXRoKCkKKyAgICAgICAgc2VsZi5kYl9wYXRoXzIgPSBnZXRfbmV3X2RhdGFiYXNlX3BhdGgoKQorICAgICAgICBzZWxmLmRiX2Vudl9wYXRoID0gZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKKworICAgIGRlZiB0ZXN0X2ZpbGVpZF9yZXNldChzZWxmKToKKyAgICAgICAgIyBjcmVhdGUgREIgMQorICAgICAgICBzZWxmLmRiMSA9IGRiLkRCKCkKKyAgICAgICAgc2VsZi5kYjEub3BlbihzZWxmLmRiX3BhdGhfMSwgZGJ0eXBlPWRiLkRCX0hBU0gsIGZsYWdzPShkYi5EQl9DUkVBVEV8ZGIuREJfRVhDTCkpCisgICAgICAgIHNlbGYuZGIxLnB1dCgnc3BhbScsICdlZ2dzJykKKyAgICAgICAgc2VsZi5kYjEuY2xvc2UoKQorCisgICAgICAgIHNodXRpbC5jb3B5KHNlbGYuZGJfcGF0aF8xLCBzZWxmLmRiX3BhdGhfMikKKworICAgICAgICBzZWxmLmRiMiA9IGRiLkRCKCkKKyAgICAgICAgc2VsZi5kYjIub3BlbihzZWxmLmRiX3BhdGhfMiwgZGJ0eXBlPWRiLkRCX0hBU0gpCisgICAgICAgIHNlbGYuZGIyLnB1dCgnc3BhbScsICdzcGFtJykKKyAgICAgICAgc2VsZi5kYjIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuZGJfZW52ID0gZGIuREJFbnYoKQorICAgICAgICBzZWxmLmRiX2Vudi5vcGVuKHNlbGYuZGJfZW52X3BhdGgsIGRiLkRCX0NSRUFURXxkYi5EQl9JTklUX01QT09MKQorCisgICAgICAgICMgdXNlIGZpbGVpZF9yZXNldCgpIGhlcmUKKyAgICAgICAgc2VsZi5kYl9lbnYuZmlsZWlkX3Jlc2V0KHNlbGYuZGJfcGF0aF8yKQorCisgICAgICAgIHNlbGYuZGIxID0gZGIuREIoc2VsZi5kYl9lbnYpCisgICAgICAgIHNlbGYuZGIxLm9wZW4oc2VsZi5kYl9wYXRoXzEsIGRidHlwZT1kYi5EQl9IQVNILCBmbGFncz1kYi5EQl9SRE9OTFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYjEuZ2V0KCdzcGFtJyksICdlZ2dzJykKKworICAgICAgICBzZWxmLmRiMiA9IGRiLkRCKHNlbGYuZGJfZW52KQorICAgICAgICBzZWxmLmRiMi5vcGVuKHNlbGYuZGJfcGF0aF8yLCBkYnR5cGU9ZGIuREJfSEFTSCwgZmxhZ3M9ZGIuREJfUkRPTkxZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIyLmdldCgnc3BhbScpLCAnc3BhbScpCisKKyAgICAgICAgc2VsZi5kYjEuY2xvc2UoKQorICAgICAgICBzZWxmLmRiMi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5kYl9lbnYuY2xvc2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYuZGJfcGF0aF8xKQorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYuZGJfcGF0aF8yKQorICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuZGJfZW52X3BhdGgpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNCk6CisgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEZpbGVpZFJlc2V0VGVzdENhc2UpKQorICAgIHJldHVybiBzdWl0ZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3Rlc3Rfc3VpdGUnKQpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9nZXRfbm9uZS5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZ2V0X25vbmUucHkKaW5kZXggNGFhZjJmZC4uODc2M2I1NCAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9nZXRfbm9uZS5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2dldF9ub25lLnB5CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlYywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGV4Y2VwdGlvbkhhcHBlbmVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhjZXB0aW9uSGFwcGVuZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIGxlbihzdHJpbmcubGV0dGVycykpCiAKICAgICAgICAgYy5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2pvaW4ucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2pvaW4ucHkKaW5kZXggOWI0NWRmOC4uMWYwZGZmZiAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9qb2luLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3Rfam9pbi5weQpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgIyBEb24ndCBkbyB0aGUgLnNldCgpIGluIGFuIGFzc2VydCwgb3IgeW91IGNhbiBnZXQgYSBib2d1cyBmYWlsdXJlCiAgICAgICAgICAgICAjIHdoZW4gcnVubmluZyBweXRob24gLU8KICAgICAgICAgICAgIHRtcCA9IHNDdXJzb3Iuc2V0KCdyZWQnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHRtcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0bXApCiAKICAgICAgICAgICAgICMgRklYTUU6IGpDdXJzb3IgZG9lc24ndCBwcm9wZXJseSBob2xkIGEgcmVmZXJlbmNlIHRvIGl0cwogICAgICAgICAgICAgIyBjdXJzb3JzLCBpZiB0aGV5IGFyZSBjbG9zZWQgYmVmb3JlIGpjdXJzb3IgaXMgdXNlZCBpdApkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9sb2NrLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9sb2NrLnB5CmluZGV4IDQ3ZGEzOTIuLjI1MjYwZmMgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfbG9jay5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2xvY2sucHkKQEAgLTIwLDcgKzIwLDcgQEAKIAogY2xhc3MgTG9ja2luZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBpbXBvcnQgc3lzCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1s6M10gPCAoMiwgNCwgMCk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KSA6CiAgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCiAKQEAgLTg5LDcgKzg5LDE4IEBACiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CiAgICAgICAgICAgICB0LmpvaW4oKQogCi0gICAgZGVmIHRlc3QwM19sb2NrX3RpbWVvdXQoc2VsZik6CisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAyKSA6CisgICAgICAgIGRlZiB0ZXN0MDNfbG9ja190aW1lb3V0KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X3RpbWVvdXQoMCwgZGIuREJfU0VUX0xPQ0tfVElNRU9VVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnYuZ2V0X3RpbWVvdXQoZGIuREJfU0VUX0xPQ0tfVElNRU9VVCksIDApCisgICAgICAgICAgICBzZWxmLmVudi5zZXRfdGltZW91dCgwLCBkYi5EQl9TRVRfVFhOX1RJTUVPVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90aW1lb3V0KGRiLkRCX1NFVF9UWE5fVElNRU9VVCksIDApCisgICAgICAgICAgICBzZWxmLmVudi5zZXRfdGltZW91dCgxMjM0NTYsIGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90aW1lb3V0KGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpLCAxMjM0NTYpCisgICAgICAgICAgICBzZWxmLmVudi5zZXRfdGltZW91dCg3ODkwMTIzLCBkYi5EQl9TRVRfVFhOX1RJTUVPVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90aW1lb3V0KGRiLkRCX1NFVF9UWE5fVElNRU9VVCksIDc4OTAxMjMpCisKKyAgICBkZWYgdGVzdDA0X2xvY2tfdGltZW91dDIoc2VsZik6CiAgICAgICAgIHNlbGYuZW52LnNldF90aW1lb3V0KDAsIGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpCiAgICAgICAgIHNlbGYuZW52LnNldF90aW1lb3V0KDAsIGRiLkRCX1NFVF9UWE5fVElNRU9VVCkKICAgICAgICAgc2VsZi5lbnYuc2V0X3RpbWVvdXQoMTIzNDU2LCBkYi5EQl9TRVRfTE9DS19USU1FT1VUKQpAQCAtMTI0LDYgKzEzNSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5lbnYubG9ja19nZXQsYW5JRDIsICJzaGFyZWQgbG9jayIsIGRiLkRCX0xPQ0tfUkVBRCkKICAgICAgICAgZW5kX3RpbWU9dGltZS50aW1lKCkKICAgICAgICAgZGVhZGxvY2tfZGV0ZWN0aW9uLmVuZD1UcnVlCisgICAgICAgICMgRmxvYXRpbmcgcG9pbnQgcm91bmRpbmcKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChlbmRfdGltZS1zdGFydF90aW1lKSA+PSAwLjA5OTkpCiAgICAgICAgIHNlbGYuZW52LmxvY2tfcHV0KGxvY2spCiAgICAgICAgIHQuam9pbigpCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X21pc2MucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X21pc2MucHkKaW5kZXggMGNmNzVlOS4uOGRkYTI5NiAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9taXNjLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfbWlzYy5weQpAQCAtMSw3ICsxLDcgQEAKICIiIk1pc2NlbGxhbmVvdXMgYnNkZGIgbW9kdWxlIHRlc3QgY2FzZXMKICIiIgogCi1pbXBvcnQgb3MKK2ltcG9ydCBvcywgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIGRic2hlbHZlLCBoYXNob3BlbiwgdGVzdF9zdXBwb3J0LCBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIGdldF9uZXdfZGF0YWJhc2VfcGF0aApAQCAtOSw2ICs5LDEzIEBACiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBNaXNjVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCkgOgorICAgICAgICBkZWYgYXNzZXJ0VHJ1ZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZXhwciwgbXNnPW1zZykKKworICAgICAgICBkZWYgYXNzZXJ0RmFsc2Uoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgorICAgICAgICAgICAgc2VsZi5mYWlsSWYoZXhwciwgbXNnPW1zZykKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5maWxlbmFtZSA9IGdldF9uZXdfZGF0YWJhc2VfcGF0aCgpCiAgICAgICAgIHNlbGYuaG9tZURpciA9IGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCkBAIC0yNSw5ICszMiw4IEBACiAgICAgZGVmIHRlc3QwMl9kYl9ob21lKHNlbGYpOgogICAgICAgICBlbnYgPSBkYi5EQkVudigpCiAgICAgICAgICMgY2hlY2sgZm9yIGNyYXNoIGZpeGVkIHdoZW4gZGJfaG9tZSBpcyB1c2VkIGJlZm9yZSBvcGVuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGVudi5kYl9ob21lIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnYuZGJfaG9tZSBpcyBOb25lKQogICAgICAgICBlbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSkKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaG9tZURpciwgZW52LmRiX2hvbWUpCiAgICAgICAgIGVsc2UgOgpAQCAtMzcsNyArNDMsNyBAQAogICAgICAgICBkYiA9IGhhc2hvcGVuKHNlbGYuZmlsZW5hbWUpCiAgICAgICAgIGRiLmNsb3NlKCkKICAgICAgICAgcnAgPSByZXByKGRiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhycCwgInt9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChycCwgInt9IikKIAogICAgIGRlZiB0ZXN0MDRfcmVwcl9kYihzZWxmKSA6CiAgICAgICAgIGRiID0gaGFzaG9wZW4oc2VsZi5maWxlbmFtZSkKQEAgLTQ4LDcgKzU0LDcgQEAKICAgICAgICAgZGIuY2xvc2UoKQogICAgICAgICBkYiA9IGhhc2hvcGVuKHNlbGYuZmlsZW5hbWUpCiAgICAgICAgIHJwID0gcmVwcihkYikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocnAsIHJlcHIoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnAsIHJlcHIoZCkpCiAgICAgICAgIGRiLmNsb3NlKCkKIAogICAgICMgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyL2luZGV4LnBocD9mdW5jPWRldGFpbCZhaWQ9MTcwODg2OCZncm91cF9pZD0xMzkwMCZhdGlkPTMxMzkwMApAQCAtMTE5LDYgKzEyNSwxOSBAQAogICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLmZpbGVuYW1lKQogCiAKKyAgICBkZWYgdGVzdDA4X0V4Y2VwdGlvblR5cGVzKHNlbGYpIDoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZGIuREJFcnJvciwgRXhjZXB0aW9uKSkKKyAgICAgICAgZm9yIGksIGogaW4gZGIuX19kaWN0X18uaXRlbXMoKSA6CisgICAgICAgICAgICBpZiBpLnN0YXJ0c3dpdGgoIkRCIikgYW5kIGkuZW5kc3dpdGgoIkVycm9yIikgOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGosIGRiLkRCRXJyb3IpLCBtc2c9aSkKKyAgICAgICAgICAgICAgICBpZiBpIG5vdCBpbiAoIkRCS2V5RW1wdHlFcnJvciIsICJEQk5vdEZvdW5kRXJyb3IiKSA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhqLCBLZXlFcnJvciksIG1zZz1pKQorCisgICAgICAgICMgVGhpcyB0d28gZXhjZXB0aW9ucyBoYXZlIHR3byBiYXNlcworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhkYi5EQktleUVtcHR5RXJyb3IsIEtleUVycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZGIuREJOb3RGb3VuZEVycm9yLCBLZXlFcnJvcikpCisKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X3BpY2tsZS5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcGlja2xlLnB5CmluZGV4IDQ4OWMwOTMuLjZhODQ3OGQgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcGlja2xlLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcGlja2xlLnB5CkBAIC0xLDEwICsxLDE2IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHBpY2tsZQotdHJ5OgotICAgIGltcG9ydCBjUGlja2xlCi1leGNlcHQgSW1wb3J0RXJyb3I6CitpbXBvcnQgc3lzCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBjUGlja2xlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBjUGlja2xlID0gTm9uZQorZWxzZSA6CiAgICAgY1BpY2tsZSA9IE5vbmUKKwogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCB0ZXN0X3N1cHBvcnQsIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X3JlY25vLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9yZWNuby5weQppbmRleCBkMzMyNDk3Li4zMTkxZmRjIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X3JlY25vLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcmVjbm8ucHkKQEAgLTEsNyArMSw3IEBACiAiIiJUZXN0Q2FzZXMgZm9yIGV4ZXJjaXNpbmcgYSBSZWNubyBEQi4KICIiIgogCi1pbXBvcnQgb3MKK2ltcG9ydCBvcywgc3lzCiBpbXBvcnQgZXJybm8KIGZyb20gcHByaW50IGltcG9ydCBwcHJpbnQKIGltcG9ydCB1bml0dGVzdApAQCAtMTQsMTAgKzE0LDE5IEBACiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBTaW1wbGVSZWNub1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpbXBvcnQgc3lzCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1s6M10gPCAoMiwgNCwgMCk6Ci0gICAgICAgIGRlZiBhc3NlcnRGYWxzZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihleHByLG1zZz1tc2cpCisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KSA6CisgICAgICAgIGRlZiBhc3NlcnRGYWxzZShzZWxmLCBleHByLCBtc2c9Tm9uZSkgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmFpbElmKGV4cHIsbXNnPW1zZykKKyAgICAgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwgbXNnPU5vbmUpIDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFzc2VydFRydWUoZXhwciwgbXNnPW1zZykKKworICAgIGlmIChzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcpKSBvciAoKHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDApKSBhbmQKKyAgICAgICAgICAgIChzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDIpKSkgOgorICAgICAgICBkZWYgYXNzZXJ0SXNJbnN0YW5jZShzZWxmLCBvYmosIGRhdGF0eXBlLCBtc2c9Tm9uZSkgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShvYmopLCBkYXRhdHlwZSwgbXNnPW1zZykKKyAgICAgICAgZGVmIGFzc2VydEdyZWF0ZXJFcXVhbChzZWxmLCBhLCBiLCBtc2c9Tm9uZSkgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0VHJ1ZShhPj1iLCBtc2c9bXNnKQorCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBnZXRfbmV3X2RhdGFiYXNlX3BhdGgoKQpAQCAtMzgsOCArNDcsOCBAQAogCiAgICAgICAgIGZvciB4IGluIGxldHRlcnM6CiAgICAgICAgICAgICByZWNubyA9IGQuYXBwZW5kKHggKiA2MCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHJlY25vLCBpbnQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlY25vID49IDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVjbm8sIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHJlY25vLCAxKQogICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICBwcmludCByZWNubywKIApAQCAtNTQsMTMgKzYzLDE2IEBACiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50IGRhdGEKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZGF0YSwgc3RyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkYXRhLCBzdHIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGQuZ2V0KHJlY25vKSkKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkYXRhID0gZFswXSAgIyBUaGlzIHNob3VsZCByYWlzZSBhIEtleUVycm9yIT8hPyEKICAgICAgICAgZXhjZXB0IGRiLkRCSW52YWxpZEFyZ0Vycm9yLCB2YWw6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5FSU5WQUwpCisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgZGIuRUlOVkFMKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuRUlOVkFMKQogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgdmFsCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiIpCkBAIC05MSwxOCArMTAzLDE4IEBACiAgICAgICAgIGtleXMgPSBkLmtleXMoKQogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQga2V5cwotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShrZXlzLCBsaXN0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoa2V5c1swXSwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGtleXMsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShrZXlzWzBdLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCBsZW4oZCkpCiAKICAgICAgICAgaXRlbXMgPSBkLml0ZW1zKCkKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHBwcmludChpdGVtcykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoaXRlbXMsIGxpc3QpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShpdGVtc1swXSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXRlbXMsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdGVtc1swXSwgdHVwbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0ZW1zWzBdKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoaXRlbXNbMF1bMF0sIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGl0ZW1zWzBdWzFdLCBzdHIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXRlbXNbMF1bMF0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW1zWzBdWzFdLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0ZW1zKSwgbGVuKGQpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmhhc19rZXkoMjUpKQpAQCAtMTc3LDcgKzE4OSwxMCBAQAogICAgICAgICAgICAgaWYgZ2V0X3JldHVybnNfbm9uZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuZXhwZWN0ZWQgREJLZXlFbXB0eUVycm9yIGV4Y2VwdGlvbiIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX0tFWUVNUFRZKQorICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgZGIuREJfS0VZRU1QVFkpCisgICAgICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX0tFWUVNUFRZKQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbm90IGdldF9yZXR1cm5zX25vbmU6CkBAIC0yNjUsNyArMjgwLDEwIEBACiAgICAgICAgIHRyeTogICAgICAgICAgICAgICAgICAgICMgdGhpcyBvbmUgd2lsbCBmYWlsCiAgICAgICAgICAgICBkLmFwcGVuZCgnYmFkJyAqIDIwKQogICAgICAgICBleGNlcHQgZGIuREJJbnZhbGlkQXJnRXJyb3IsIHZhbDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkVJTlZBTCkKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsWzBdLCBkYi5FSU5WQUwpCisgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5FSU5WQUwpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIikKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcmVwbGljYXRpb24ucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X3JlcGxpY2F0aW9uLnB5CmluZGV4IGZhYmMxNjUuLmYzZTk3NGYgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcmVwbGljYXRpb24ucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9yZXBsaWNhdGlvbi5weQpAQCAtNCw3ICs0LDYgQEAKIGltcG9ydCBvcwogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHdlYWtyZWYKIAogZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIHRlc3Rfc3VwcG9ydCwgaGF2ZV90aHJlYWRzLCB2ZXJib3NlLCBcCiAgICAgICAgIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCkBAIC0xMiw5ICsxMSw5IEBACiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIERCUmVwbGljYXRpb25NYW5hZ2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIERCUmVwbGljYXRpb24odW5pdHRlc3QuVGVzdENhc2UpIDoKICAgICBpbXBvcnQgc3lzCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1s6M10gPCAoMiwgNCwgMCk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KSA6CiAgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCiAKQEAgLTM1LDE2ICszNCwxMyBAQAogICAgICAgICAgICAgICAgIHwgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9JTklUX01QT09MIHwgZGIuREJfSU5JVF9MT0NLIHwKICAgICAgICAgICAgICAgICBkYi5EQl9JTklUX1JFUCB8IGRiLkRCX1JFQ09WRVIgfCBkYi5EQl9USFJFQUQsIDA2NjYpCiAKLSAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzZWxmKQogICAgICAgICBzZWxmLmNvbmZpcm1lZF9tYXN0ZXI9c2VsZi5jbGllbnRfc3RhcnR1cGRvbmU9RmFsc2UKICAgICAgICAgZGVmIGNvbmZpcm1lZF9tYXN0ZXIoYSxiLGMpIDoKICAgICAgICAgICAgIGlmIGI9PWRiLkRCX0VWRU5UX1JFUF9NQVNURVIgOgotICAgICAgICAgICAgICAgIHNlbGYgPSB3cigpCiAgICAgICAgICAgICAgICAgc2VsZi5jb25maXJtZWRfbWFzdGVyPVRydWUKIAogICAgICAgICBkZWYgY2xpZW50X3N0YXJ0dXBkb25lKGEsYixjKSA6CiAgICAgICAgICAgICBpZiBiPT1kYi5EQl9FVkVOVF9SRVBfU1RBUlRVUERPTkUgOgotICAgICAgICAgICAgICAgIHNlbGYgPSB3cigpCiAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfc3RhcnR1cGRvbmU9VHJ1ZQogCiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIuc2V0X2V2ZW50X25vdGlmeShjb25maXJtZWRfbWFzdGVyKQpAQCAtNjMsMTEgKzU5LDIxIEBACiAgICAgICAgICAgICBzZWxmLmRiQ2xpZW50LmNsb3NlKCkKICAgICAgICAgaWYgc2VsZi5kYk1hc3RlciA6CiAgICAgICAgICAgICBzZWxmLmRiTWFzdGVyLmNsb3NlKCkKKworICAgICAgICAjIEhlcmUgd2UgYXNzaWduIGR1bW15IGV2ZW50IGhhbmRsZXJzIHRvIGFsbG93IEdDIG9mIHRoZSB0ZXN0IG9iamVjdC4KKyAgICAgICAgIyBTaW5jZSB0aGUgZHVtbXkgaGFuZGxlciBkb2Vzbid0IHVzZSBhbnkgb3V0ZXIgc2NvcGUgdmFyaWFibGUsIGl0CisgICAgICAgICMgZG9lc24ndCBrZWVwIGFueSByZWZlcmVuY2UgdG8gdGhlIHRlc3Qgb2JqZWN0LgorICAgICAgICBkZWYgZHVtbXkoKmFyZ3MpIDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5zZXRfZXZlbnRfbm90aWZ5KGR1bW15KQorICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnNldF9ldmVudF9ub3RpZnkoZHVtbXkpCisKICAgICAgICAgc2VsZi5kYmVudkNsaWVudC5jbG9zZSgpCiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIuY2xvc2UoKQogICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpckNsaWVudCkKICAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmhvbWVEaXJNYXN0ZXIpCiAKK2NsYXNzIERCUmVwbGljYXRpb25NYW5hZ2VyKERCUmVwbGljYXRpb24pIDoKICAgICBkZWYgdGVzdDAxX2Jhc2ljX3JlcGxpY2F0aW9uKHNlbGYpIDoKICAgICAgICAgbWFzdGVyX3BvcnQgPSB0ZXN0X3N1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwbWdyX3NldF9sb2NhbF9zaXRlKCIxMjcuMC4wLjEiLCBtYXN0ZXJfcG9ydCkKQEAgLTgyLDIzICs4OCwyMyBAQAogCiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3NldF90aW1lb3V0KGRiLkRCX1JFUF9DT05ORUNUSU9OX1JFVFJZLDEwMDEyMykKICAgICAgICAgc2VsZi5kYmVudkNsaWVudC5yZXBfc2V0X3RpbWVvdXQoZGIuREJfUkVQX0NPTk5FQ1RJT05fUkVUUlksMTAwMzIxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfdGltZW91dCgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfdGltZW91dCgKICAgICAgICAgICAgIGRiLkRCX1JFUF9DT05ORUNUSU9OX1JFVFJZKSwgMTAwMTIzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfdGltZW91dCgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfdGltZW91dCgKICAgICAgICAgICAgIGRiLkRCX1JFUF9DT05ORUNUSU9OX1JFVFJZKSwgMTAwMzIxKQogCiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3NldF90aW1lb3V0KGRiLkRCX1JFUF9FTEVDVElPTl9USU1FT1VULCAxMDAyMzQpCiAgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3NldF90aW1lb3V0KGRiLkRCX1JFUF9FTEVDVElPTl9USU1FT1VULCAxMDA0MzIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGJlbnZNYXN0ZXIucmVwX2dldF90aW1lb3V0KAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZNYXN0ZXIucmVwX2dldF90aW1lb3V0KAogICAgICAgICAgICAgZGIuREJfUkVQX0VMRUNUSU9OX1RJTUVPVVQpLCAxMDAyMzQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGJlbnZDbGllbnQucmVwX2dldF90aW1lb3V0KAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZDbGllbnQucmVwX2dldF90aW1lb3V0KAogICAgICAgICAgICAgZGIuREJfUkVQX0VMRUNUSU9OX1RJTUVPVVQpLCAxMDA0MzIpCiAKICAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5yZXBfc2V0X3RpbWVvdXQoZGIuREJfUkVQX0VMRUNUSU9OX1JFVFJZLCAxMDAzNDUpCiAgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3NldF90aW1lb3V0KGRiLkRCX1JFUF9FTEVDVElPTl9SRVRSWSwgMTAwNTQzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfdGltZW91dCgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfdGltZW91dCgKICAgICAgICAgICAgIGRiLkRCX1JFUF9FTEVDVElPTl9SRVRSWSksIDEwMDM0NSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kYmVudkNsaWVudC5yZXBfZ2V0X3RpbWVvdXQoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudkNsaWVudC5yZXBfZ2V0X3RpbWVvdXQoCiAgICAgICAgICAgICBkYi5EQl9SRVBfRUxFQ1RJT05fUkVUUlkpLCAxMDA1NDMpCiAKICAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5yZXBtZ3Jfc2V0X2Fja19wb2xpY3koZGIuREJfUkVQTUdSX0FDS1NfQUxMKQpAQCAtMTA3LDEzICsxMTMsMTMgQEAKICAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5yZXBtZ3Jfc3RhcnQoMSwgZGIuREJfUkVQX01BU1RFUik7CiAgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwbWdyX3N0YXJ0KDEsIGRiLkRCX1JFUF9DTElFTlQpOwogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGJlbnZNYXN0ZXIucmVwX2dldF9uc2l0ZXMoKSwyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfbnNpdGVzKCksMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X3ByaW9yaXR5KCksMTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGJlbnZDbGllbnQucmVwX2dldF9wcmlvcml0eSgpLDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGJlbnZNYXN0ZXIucmVwbWdyX2dldF9hY2tfcG9saWN5KCksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X25zaXRlcygpLDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudkNsaWVudC5yZXBfZ2V0X25zaXRlcygpLDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X3ByaW9yaXR5KCksMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudkNsaWVudC5yZXBfZ2V0X3ByaW9yaXR5KCksMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52TWFzdGVyLnJlcG1ncl9nZXRfYWNrX3BvbGljeSgpLAogICAgICAgICAgICAgICAgIGRiLkRCX1JFUE1HUl9BQ0tTX0FMTCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kYmVudkNsaWVudC5yZXBtZ3JfZ2V0X2Fja19wb2xpY3koKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52Q2xpZW50LnJlcG1ncl9nZXRfYWNrX3BvbGljeSgpLAogICAgICAgICAgICAgICAgIGRiLkRCX1JFUE1HUl9BQ0tTX0FMTCkKIAogICAgICAgICAjIFRoZSB0aW1lb3V0IGlzIG5lY2Vzc2FyeSBpbiBCREIgNC41LCBzaW5jZSBEQl9FVkVOVF9SRVBfU1RBUlRVUERPTkUKQEAgLTEzNywxNiArMTQzLDE2IEBACiAgICAgICAgICAgICBzdGFydHVwX3RpbWVvdXQgPSBUcnVlCiAKICAgICAgICAgZCA9IHNlbGYuZGJlbnZNYXN0ZXIucmVwbWdyX3NpdGVfbGlzdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihkKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZFswXVswXSwgIjEyNy4wLjAuMSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRbMF1bMV0sIGNsaWVudF9wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzBdWzBdLCAiMTI3LjAuMC4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzBdWzFdLCBjbGllbnRfcG9ydCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChkWzBdWzJdPT1kYi5EQl9SRVBNR1JfQ09OTkVDVEVEKSBvciBcCiAgICAgICAgICAgICAgICAgKGRbMF1bMl09PWRiLkRCX1JFUE1HUl9ESVNDT05ORUNURUQpKQogCiAgICAgICAgIGQgPSBzZWxmLmRiZW52Q2xpZW50LnJlcG1ncl9zaXRlX2xpc3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oZCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRbMF1bMF0sICIxMjcuMC4wLjEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkWzBdWzFdLCBtYXN0ZXJfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFswXVswXSwgIjEyNy4wLjAuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFswXVsxXSwgbWFzdGVyX3BvcnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZFswXVsyXT09ZGIuREJfUkVQTUdSX0NPTk5FQ1RFRCkgb3IgXAogICAgICAgICAgICAgICAgIChkWzBdWzJdPT1kYi5EQl9SRVBNR1JfRElTQ09OTkVDVEVEKSkKIApAQCAtMjAxLDcgKzIwNyw3IEBACiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXBsaWNhdGlvbiB0ZXN0IHNraXBwZWQgZHVlIHRvIHJhbmRvbSBmYWlsdXJlLCAiCiAgICAgICAgICAgICAgICAgInNlZSBpc3N1ZSAzODkyIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUudGltZSgpPHRpbWVvdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCIxMjMiLCB2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCB2KQogCiAgICAgICAgIHR4bj1zZWxmLmRiZW52TWFzdGVyLnR4bl9iZWdpbigpCiAgICAgICAgIHNlbGYuZGJNYXN0ZXIuZGVsZXRlKCJBQkMiLCB0eG49dHhuKQpAQCAtMjE0LDIwICsyMjAsMTcgQEAKICAgICAgICAgICAgIGlmIHYgaXMgTm9uZSA6CiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS50aW1lKCk8dGltZW91dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgdikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB2KQogCi1jbGFzcyBEQkJhc2VSZXBsaWNhdGlvbihEQlJlcGxpY2F0aW9uTWFuYWdlcik6CitjbGFzcyBEQkJhc2VSZXBsaWNhdGlvbihEQlJlcGxpY2F0aW9uKSA6CiAgICAgZGVmIHNldFVwKHNlbGYpIDoKLSAgICAgICAgREJSZXBsaWNhdGlvbk1hbmFnZXIuc2V0VXAoc2VsZikKLSAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzZWxmKQorICAgICAgICBEQlJlcGxpY2F0aW9uLnNldFVwKHNlbGYpCiAgICAgICAgIGRlZiBjb25maXJtZWRfbWFzdGVyKGEsYixjKSA6CiAgICAgICAgICAgICBpZiAoYiA9PSBkYi5EQl9FVkVOVF9SRVBfTUFTVEVSKSBvciAoYiA9PSBkYi5EQl9FVkVOVF9SRVBfRUxFQ1RFRCkgOgotICAgICAgICAgICAgICAgIHNlbGYgPSB3cigpCiAgICAgICAgICAgICAgICAgc2VsZi5jb25maXJtZWRfbWFzdGVyID0gVHJ1ZQogCiAgICAgICAgIGRlZiBjbGllbnRfc3RhcnR1cGRvbmUoYSxiLGMpIDoKICAgICAgICAgICAgIGlmIGIgPT0gZGIuREJfRVZFTlRfUkVQX1NUQVJUVVBET05FIDoKLSAgICAgICAgICAgICAgICBzZWxmID0gd3IoKQogICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X3N0YXJ0dXBkb25lID0gVHJ1ZQogCiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIuc2V0X2V2ZW50X25vdGlmeShjb25maXJtZWRfbWFzdGVyKQpAQCAtMjQwLDExICsyNDMsOSBAQAogICAgICAgICAjIFRoZXJlIGFyZSBvbmx5IHR3byBub2Rlcywgc28gd2UgZG9uJ3QgbmVlZCB0bwogICAgICAgICAjIGRvIGFueSByb3V0aW5nIGRlY2lzaW9uCiAgICAgICAgIGRlZiBtMmMoZGJlbnYsIGNvbnRyb2wsIHJlYywgbHNucCwgZW52aWQsIGZsYWdzKSA6Ci0gICAgICAgICAgICBzZWxmID0gd3IoKQogICAgICAgICAgICAgc2VsZi5tMmMucHV0KChjb250cm9sLCByZWMpKQogCiAgICAgICAgIGRlZiBjMm0oZGJlbnYsIGNvbnRyb2wsIHJlYywgbHNucCwgZW52aWQsIGZsYWdzKSA6Ci0gICAgICAgICAgICBzZWxmID0gd3IoKQogICAgICAgICAgICAgc2VsZi5jMm0ucHV0KChjb250cm9sLCByZWMpKQogCiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3NldF90cmFuc3BvcnQoMTMsbTJjKQpAQCAtMjUyLDggKzI1Myw4IEBACiAgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3NldF90cmFuc3BvcnQoMyxjMm0pCiAgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3NldF9wcmlvcml0eSgwKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGJlbnZNYXN0ZXIucmVwX2dldF9wcmlvcml0eSgpLDEwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfcHJpb3JpdHkoKSwwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZNYXN0ZXIucmVwX2dldF9wcmlvcml0eSgpLDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZDbGllbnQucmVwX2dldF9wcmlvcml0eSgpLDApCiAKICAgICAgICAgI3NlbGYuZGJlbnZNYXN0ZXIuc2V0X3ZlcmJvc2UoZGIuREJfVkVSQl9SRVBMSUNBVElPTiwgVHJ1ZSkKICAgICAgICAgI3NlbGYuZGJlbnZNYXN0ZXIuc2V0X3ZlcmJvc2UoZGIuREJfVkVSQl9GSUxFT1BTX0FMTCwgVHJ1ZSkKQEAgLTI2MSwxMiArMjYyLDEwIEBACiAgICAgICAgICNzZWxmLmRiZW52Q2xpZW50LnNldF92ZXJib3NlKGRiLkRCX1ZFUkJfRklMRU9QU19BTEwsIFRydWUpCiAKICAgICAgICAgZGVmIHRocmVhZF9tYXN0ZXIoKSA6Ci0gICAgICAgICAgICBzZWxmID0gd3IoKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYudGhyZWFkX2RvKHNlbGYuZGJlbnZNYXN0ZXIsIHNlbGYuYzJtLCAzLAogICAgICAgICAgICAgICAgICAgICBzZWxmLm1hc3Rlcl9kb2luZ19lbGVjdGlvbiwgVHJ1ZSkKIAogICAgICAgICBkZWYgdGhyZWFkX2NsaWVudCgpIDoKLSAgICAgICAgICAgIHNlbGYgPSB3cigpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi50aHJlYWRfZG8oc2VsZi5kYmVudkNsaWVudCwgc2VsZi5tMmMsIDEzLAogICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9kb2luZ19lbGVjdGlvbiwgRmFsc2UpCiAKQEAgLTI5OSw2ICsyOTgsMTcgQEAKICAgICAgICAgc2VsZi5jMm0ucHV0KE5vbmUpCiAgICAgICAgIHNlbGYudF9tLmpvaW4oKQogICAgICAgICBzZWxmLnRfYy5qb2luKCkKKworICAgICAgICAjIEhlcmUgd2UgYXNzaWduIGR1bW15IGV2ZW50IGhhbmRsZXJzIHRvIGFsbG93IEdDIG9mIHRoZSB0ZXN0IG9iamVjdC4KKyAgICAgICAgIyBTaW5jZSB0aGUgZHVtbXkgaGFuZGxlciBkb2Vzbid0IHVzZSBhbnkgb3V0ZXIgc2NvcGUgdmFyaWFibGUsIGl0CisgICAgICAgICMgZG9lc24ndCBrZWVwIGFueSByZWZlcmVuY2UgdG8gdGhlIHRlc3Qgb2JqZWN0LgorICAgICAgICBkZWYgZHVtbXkoKmFyZ3MpIDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5zZXRfZXZlbnRfbm90aWZ5KGR1bW15KQorICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnNldF9ldmVudF9ub3RpZnkoZHVtbXkpCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3NldF90cmFuc3BvcnQoMTMsZHVtbXkpCisgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3NldF90cmFuc3BvcnQoMyxkdW1teSkKKwogICAgICAgICBzZWxmLmRiZW52Q2xpZW50LmNsb3NlKCkKICAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5jbG9zZSgpCiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5ob21lRGlyQ2xpZW50KQpAQCAtMzU4LDYgKzM2OCw5IEBACiAgICAgICAgICAgICB0eG4uY29tbWl0KCkKICAgICAgICAgICAgIGJyZWFrCiAKKyAgICAgICAgZCA9IHNlbGYuZGJlbnZNYXN0ZXIucmVwX3N0YXQoZmxhZ3M9ZGIuREJfU1RBVF9DTEVBUik7CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgibWFzdGVyX2NoYW5nZXMiIGluIGQpCisKICAgICAgICAgdHhuPXNlbGYuZGJlbnZNYXN0ZXIudHhuX2JlZ2luKCkKICAgICAgICAgc2VsZi5kYk1hc3Rlci5wdXQoIkFCQyIsICIxMjMiLCB0eG49dHhuKQogICAgICAgICB0eG4uY29tbWl0KCkKQEAgLTM3MSw3ICszODQsNyBAQAogICAgICAgICAgICAgaWYgdiBpcyBOb25lIDoKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnRpbWUoKTx0aW1lb3V0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiMTIzIiwgdikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgdikKIAogICAgICAgICB0eG49c2VsZi5kYmVudk1hc3Rlci50eG5fYmVnaW4oKQogICAgICAgICBzZWxmLmRiTWFzdGVyLmRlbGV0ZSgiQUJDIiwgdHhuPXR4bikKQEAgLTM4NCw3ICszOTcsNyBAQAogICAgICAgICAgICAgaWYgdiBpcyBOb25lIDoKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnRpbWUoKTx0aW1lb3V0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCB2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHYpCiAKICAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsNykgOgogICAgICAgICBkZWYgdGVzdDAyX3Rlc3RfcmVxdWVzdChzZWxmKSA6CkBAIC00MTksNyArNDMyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBkYi5EQlJlcFVuYXZhaWxFcnJvciA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlbGVjdGlvbl9zdGF0dXNbMF0gYW5kIG5vdCBzZWxmLmNvbmZpcm1lZF9tYXN0ZXIgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVjdGlvbl9zdGF0dXNbMF0gPSBUcnVlCkBAIC00NDksNiArNDYxLDE0IEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbmZpcm1lZF9tYXN0ZXIpCiAKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsNykgOgorICAgICAgICBkZWYgdGVzdDA0X3Rlc3RfY2xvY2tza2V3KHNlbGYpIDoKKyAgICAgICAgICAgIGZhc3QsIHNsb3cgPSAxMjM0LCAxMjMwCisgICAgICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcF9zZXRfY2xvY2tza2V3KGZhc3QsIHNsb3cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChmYXN0LCBzbG93KSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X2Nsb2Nrc2tldygpKQorICAgICAgICAgICAgc2VsZi5iYXNpY19yZXBfdGhyZWFkaW5nKCkKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogZGVmIHRlc3Rfc3VpdGUoKToKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3Rfc2VxdWVuY2UucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X3NlcXVlbmNlLnB5CmluZGV4IGI2MWVhZDQuLjNkM2VlMjkgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3Rfc2VxdWVuY2UucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9zZXF1ZW5jZS5weQpAQCAtNiw3ICs2LDcgQEAKIAogY2xhc3MgREJTZXF1ZW5jZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGltcG9ydCBzeXMKLSAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzozXSA8ICgyLCA0LCAwKToKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDQpIDoKICAgICAgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgogICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGV4cHIsbXNnPW1zZykKIApAQCAtMzcsNTMgKzM3LDUzIEBACiAgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCiAgICAgICAgIHN0YXJ0X3ZhbHVlID0gMTAgKiBzZWxmLmludF8zMl9tYXgKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweEEwMDAwMDAwMCwgc3RhcnRfdmFsdWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHNlbGYuc2VxLmluaXRfdmFsdWUoc3RhcnRfdmFsdWUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0naWQnLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RhcnRfdmFsdWUsIHNlbGYuc2VxLmdldCg1KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RhcnRfdmFsdWUgKyA1LCBzZWxmLnNlcS5nZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5pbml0aWFsX3ZhbHVlKHN0YXJ0X3ZhbHVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0naWQnLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydF92YWx1ZSwgc2VsZi5zZXEuZ2V0KDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0X3ZhbHVlICsgNSwgc2VsZi5zZXEuZ2V0KCkpCiAKICAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CiAgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdmb28nLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEucmVtb3ZlKHR4bj1Ob25lLCBmbGFncz0wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEucmVtb3ZlKHR4bj1Ob25lLCBmbGFncz0wKSkKICAgICAgICAgZGVsIHNlbGYuc2VxCiAKICAgICBkZWYgdGVzdF9nZXRfa2V5KHNlbGYpOgogICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kLCBmbGFncz0wKQogICAgICAgICBrZXkgPSAnZm9vJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5vcGVuKGtleT1rZXksIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhrZXksIHNlbGYuc2VxLmdldF9rZXkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5vcGVuKGtleT1rZXksIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSwgc2VsZi5zZXEuZ2V0X2tleSgpKQogCiAgICAgZGVmIHRlc3RfZ2V0X2RicChzZWxmKToKICAgICAgICAgc2VsZi5zZXEgPSBkYi5EQlNlcXVlbmNlKHNlbGYuZCwgZmxhZ3M9MCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2ZvbycsIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmQsIHNlbGYuc2VxLmdldF9kYnAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLCBzZWxmLnNlcS5nZXRfZGJwKCkpCiAKICAgICBkZWYgdGVzdF9jYWNoZXNpemUoc2VsZik6CiAgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCiAgICAgICAgIGNhc2hlX3NpemUgPSAxMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5zZXRfY2FjaGVzaXplKGNhc2hlX3NpemUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNhc2hlX3NpemUsIHNlbGYuc2VxLmdldF9jYWNoZXNpemUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5zZXRfY2FjaGVzaXplKGNhc2hlX3NpemUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdmb28nLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXNoZV9zaXplLCBzZWxmLnNlcS5nZXRfY2FjaGVzaXplKCkpCiAKICAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKICAgICAgICAgc2VsZi5zZXEgPSBkYi5EQlNlcXVlbmNlKHNlbGYuZCwgZmxhZ3M9MCkKICAgICAgICAgZmxhZyA9IGRiLkRCX1NFUV9XUkFQOwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5zZXRfZmxhZ3MoZmxhZykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdmb28nLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmxhZywgc2VsZi5zZXEuZ2V0X2ZsYWdzKCkgJiBmbGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLnNldF9mbGFncyhmbGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZywgc2VsZi5zZXEuZ2V0X2ZsYWdzKCkgJiBmbGFnKQogCiAgICAgZGVmIHRlc3RfcmFuZ2Uoc2VsZik6CiAgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCiAgICAgICAgIHNlcV9yYW5nZSA9ICgxMCAqIHNlbGYuaW50XzMyX21heCwgMTEgKiBzZWxmLmludF8zMl9tYXggLSAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5zZXRfcmFuZ2Uoc2VxX3JhbmdlKSkKLSAgICAgICAgc2VsZi5zZXEuaW5pdF92YWx1ZShzZXFfcmFuZ2VbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdmb28nLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VxX3JhbmdlLCBzZWxmLnNlcS5nZXRfcmFuZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5zZXRfcmFuZ2Uoc2VxX3JhbmdlKSkKKyAgICAgICAgc2VsZi5zZXEuaW5pdGlhbF92YWx1ZShzZXFfcmFuZ2VbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2ZvbycsIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcV9yYW5nZSwgc2VsZi5zZXEuZ2V0X3JhbmdlKCkpCiAKICAgICBkZWYgdGVzdF9zdGF0KHNlbGYpOgogICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kLCBmbGFncz0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2ZvbycsIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQogICAgICAgICBzdGF0ID0gc2VsZi5zZXEuc3RhdCgpCiAgICAgICAgIGZvciBwYXJhbSBpbiAoJ25vd2FpdCcsICdtaW4nLCAnbWF4JywgJ3ZhbHVlJywgJ2N1cnJlbnQnLAogICAgICAgICAgICAgICAgICAgICAgICdmbGFncycsICdjYWNoZV9zaXplJywgJ2xhc3RfdmFsdWUnLCAnd2FpdCcpOgpAQCAtMTA2LDI0ICsxMDYsMjQgQEAKICAgICBkZWYgdGVzdF82NGJpdHMoc2VsZikgOgogICAgICAgICAjIFdlIGRvbid0IHVzZSBib3RoIGV4dHJlbWVzIGJlY2F1c2UgdGhleSBhcmUgcHJvYmxlbWF0aWMKICAgICAgICAgdmFsdWVfcGx1cz0oMUw8PDYzKS0yCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDkyMjMzNzIwMzY4NTQ3NzU4MDZMLHZhbHVlX3BsdXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTIyMzM3MjAzNjg1NDc3NTgwNkwsdmFsdWVfcGx1cykKICAgICAgICAgdmFsdWVfbWludXM9KC0xTDw8NjMpKzEgICMgVHdvIGNvbXBsZW1lbnQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMLHZhbHVlX21pbnVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC05MjIzMzcyMDM2ODU0Nzc1ODA3TCx2YWx1ZV9taW51cykKICAgICAgICAgc2VsZi5zZXEgPSBkYi5EQlNlcXVlbmNlKHNlbGYuZCwgZmxhZ3M9MCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEuaW5pdF92YWx1ZSh2YWx1ZV9wbHVzLTEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0naWQnLCB0eG49Tm9uZSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5pbml0aWFsX3ZhbHVlKHZhbHVlX3BsdXMtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2lkJywgdHhuPU5vbmUsCiAgICAgICAgICAgICBmbGFncz1kYi5EQl9DUkVBVEUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh2YWx1ZV9wbHVzLTEsIHNlbGYuc2VxLmdldCgxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModmFsdWVfcGx1cywgc2VsZi5zZXEuZ2V0KDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlX3BsdXMtMSwgc2VsZi5zZXEuZ2V0KDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlX3BsdXMsIHNlbGYuc2VxLmdldCgxKSkKIAogICAgICAgICBzZWxmLnNlcS5yZW1vdmUodHhuPU5vbmUsIGZsYWdzPTApCiAKICAgICAgICAgc2VsZi5zZXEgPSBkYi5EQlNlcXVlbmNlKHNlbGYuZCwgZmxhZ3M9MCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEuaW5pdF92YWx1ZSh2YWx1ZV9taW51cykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdpZCcsIHR4bj1Ob25lLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLmluaXRpYWxfdmFsdWUodmFsdWVfbWludXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdpZCcsIHR4bj1Ob25lLAogICAgICAgICAgICAgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModmFsdWVfbWludXMsIHNlbGYuc2VxLmdldCgxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModmFsdWVfbWludXMrMSwgc2VsZi5zZXEuZ2V0KDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlX21pbnVzLCBzZWxmLnNlcS5nZXQoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVfbWludXMrMSwgc2VsZi5zZXEuZ2V0KDEpKQogCiAgICAgZGVmIHRlc3RfbXVsdGlwbGVfY2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQpCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X3RocmVhZC5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CmluZGV4IDI4YTI1NTUuLjkxMDAyYjggMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CkBAIC0yMSw3ICsyMSw2IEBACiAKIGlmIGhhdmVfdGhyZWFkcyA6CiAgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAotICAgIGltcG9ydCBzeXMKICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBjdXJyZW50VGhyZWFkCiAgICAgZWxzZSA6CkBAIC0zNiw4ICszNSw3IEBACiAgICAgZGJzZXRmbGFncyAgID0gMAogICAgIGVudmZsYWdzICAgICA9IDAKIAotICAgIGltcG9ydCBzeXMKLSAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzozXSA8ICgyLCA0LCAwKToKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDQpIDoKICAgICAgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgogICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGV4cHIsbXNnPW1zZykKIApAQCAtOTksNyArOTcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IChzZWxmLmQsIHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICdyZWFkZXIgJWQnICUgeCwKICAgICAgICAgICAgICAgICAgICAgICAgICkjdmVyYm9zZSA9IHZlcmJvc2UpCi0gICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICAgICAgcnQuc2V0RGFlbW9uKFRydWUpCiAgICAgICAgICAgICBlbHNlIDoKQEAgLTExOCw3ICsxMTUsNiBAQAogICAgICAgICAgICAgd3JpdGVycy5hcHBlbmQod3QpCiAKICAgICAgICAgZm9yIHQgaW4gd3JpdGVyczoKLSAgICAgICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgICAgICB0LnNldERhZW1vbihUcnVlKQogICAgICAgICAgICAgZWxzZSA6CkBAIC0xMzEsNyArMTI3LDYgQEAKICAgICAgICAgICAgIHQuam9pbigpCiAKICAgICBkZWYgd3JpdGVyVGhyZWFkKHNlbGYsIGQsIGtleXMsIHJlYWRlcnMpOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpCiAgICAgICAgIGVsc2UgOgpAQCAtMTYxLDcgKzE1Niw2IEBACiAgICAgICAgICAgICBwcmludCAiJXM6IHRocmVhZCBmaW5pc2hlZCIgJSBuYW1lCiAKICAgICBkZWYgcmVhZGVyVGhyZWFkKHNlbGYsIGQsIHJlYWRlck51bSk6Ci0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgogICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkKICAgICAgICAgZWxzZSA6CkBAIC0yMzEsNyArMjI1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAoc2VsZi5kLCB4KSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAncmVhZGVyICVkJyAlIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICApI3ZlcmJvc2UgPSB2ZXJib3NlKQotICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgogICAgICAgICAgICAgICAgIHJ0LnNldERhZW1vbihUcnVlKQogICAgICAgICAgICAgZWxzZSA6CkBAIC0yNTAsNyArMjQzLDYgQEAKICAgICAgICAgICAgIHdyaXRlcnMuYXBwZW5kKHd0KQogCiAgICAgICAgIGZvciB0IGluIHdyaXRlcnM6Ci0gICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICAgICAgdC5zZXREYWVtb24oVHJ1ZSkKICAgICAgICAgICAgIGVsc2UgOgpAQCAtMjYzLDcgKzI1NSw2IEBACiAgICAgICAgICAgICB0LmpvaW4oKQogCiAgICAgZGVmIHdyaXRlclRocmVhZChzZWxmLCBkLCBrZXlzLCByZWFkZXJzKToKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICBuYW1lID0gY3VycmVudFRocmVhZCgpLmdldE5hbWUoKQogICAgICAgICBlbHNlIDoKQEAgLTI5MCw3ICsyODEsNiBAQAogICAgICAgICAgICAgcHJpbnQgIiVzOiB0aHJlYWQgZmluaXNoZWQiICUgbmFtZQogCiAgICAgZGVmIHJlYWRlclRocmVhZChzZWxmLCBkLCByZWFkZXJOdW0pOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpCiAgICAgICAgIGVsc2UgOgpAQCAtMzYxLDcgKzM1MSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gKHNlbGYuZCwgeCksCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gJ3JlYWRlciAlZCcgJSB4LAogICAgICAgICAgICAgICAgICAgICAgICAgKSN2ZXJib3NlID0gdmVyYm9zZSkKLSAgICAgICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgICAgICBydC5zZXREYWVtb24oVHJ1ZSkKICAgICAgICAgICAgIGVsc2UgOgpAQCAtMzc5LDcgKzM2OCw2IEBACiAgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZCh3dCkKIAogICAgICAgICBkdCA9IFRocmVhZCh0YXJnZXQgPSBzZWxmLmRlYWRsb2NrVGhyZWFkKQotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgIGR0LnNldERhZW1vbihUcnVlKQogICAgICAgICBlbHNlIDoKQEAgLTM4Nyw3ICszNzUsNiBAQAogICAgICAgICBkdC5zdGFydCgpCiAKICAgICAgICAgZm9yIHQgaW4gd3JpdGVyczoKLSAgICAgICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgICAgICB0LnNldERhZW1vbihUcnVlKQogICAgICAgICAgICAgZWxzZSA6CkBAIC00MDMsNyArMzkwLDYgQEAKICAgICAgICAgZHQuam9pbigpCiAKICAgICBkZWYgd3JpdGVyVGhyZWFkKHNlbGYsIGQsIGtleXMsIHJlYWRlcnMpOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpCiAgICAgICAgIGVsc2UgOgpAQCAtNDI0LDE0ICs0MTAsMTcgQEAKICAgICAgICAgICAgICAgICByZWFkZXJzLnBvcCgpLnN0YXJ0KCkKICAgICAgICAgICAgIGV4Y2VwdCAoZGIuREJMb2NrRGVhZGxvY2tFcnJvciwgZGIuREJMb2NrTm90R3JhbnRlZEVycm9yKSwgdmFsOgogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICIlczogQWJvcnRpbmcgdHJhbnNhY3Rpb24gKCVzKSIgJSAobmFtZSwgdmFsLmFyZ3NbMV0pCisgICAgICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzOiBBYm9ydGluZyB0cmFuc2FjdGlvbiAoJXMpIiAlIChuYW1lLCB2YWxbMV0pCisgICAgICAgICAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzOiBBYm9ydGluZyB0cmFuc2FjdGlvbiAoJXMpIiAlIChuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwuYXJnc1sxXSkKICAgICAgICAgICAgICAgICB0eG4uYWJvcnQoKQogCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAiJXM6IHRocmVhZCBmaW5pc2hlZCIgJSBuYW1lCiAKICAgICBkZWYgcmVhZGVyVGhyZWFkKHNlbGYsIGQsIHJlYWRlck51bSk6Ci0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgogICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkKICAgICAgICAgZWxzZSA6CkBAIC00NTUsNyArNDQ0LDExIEBACiAgICAgICAgICAgICAgICAgZmluaXNoZWQgPSBUcnVlCiAgICAgICAgICAgICBleGNlcHQgKGRiLkRCTG9ja0RlYWRsb2NrRXJyb3IsIGRiLkRCTG9ja05vdEdyYW50ZWRFcnJvciksIHZhbDoKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiJXM6IEFib3J0aW5nIHRyYW5zYWN0aW9uICglcykiICUgKG5hbWUsIHZhbC5hcmdzWzFdKQorICAgICAgICAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlczogQWJvcnRpbmcgdHJhbnNhY3Rpb24gKCVzKSIgJSAobmFtZSwgdmFsWzFdKQorICAgICAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlczogQWJvcnRpbmcgdHJhbnNhY3Rpb24gKCVzKSIgJSAobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmFyZ3NbMV0pCiAgICAgICAgICAgICAgICAgYy5jbG9zZSgpCiAgICAgICAgICAgICAgICAgdHhuLmFib3J0KCkKIApkaWZmIC0tZ2l0IGEvTGliL2NQcm9maWxlLnB5IGIvTGliL2NQcm9maWxlLnB5CmluZGV4IDE5ZDU4MDQuLmIyZWZkMDQgMTAwNzU1Ci0tLSBhL0xpYi9jUHJvZmlsZS5weQorKysgYi9MaWIvY1Byb2ZpbGUucHkKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHByb2YucHJpbnRfc3RhdHMoc29ydCkKICAgICByZXR1cm4gcmVzdWx0CiAKLWRlZiBydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lPU5vbmUpOgorZGVmIHJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywgZmlsZW5hbWU9Tm9uZSwgc29ydD0tMSk6CiAgICAgIiIiUnVuIHN0YXRlbWVudCB1bmRlciBwcm9maWxlciwgc3VwcGx5aW5nIHlvdXIgb3duIGdsb2JhbHMgYW5kIGxvY2FscywKICAgICBvcHRpb25hbGx5IHNhdmluZyByZXN1bHRzIGluIGZpbGVuYW1lLgogCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gcHJvZi5wcmludF9zdGF0cygpCisgICAgICAgICAgICByZXN1bHQgPSBwcm9mLnByaW50X3N0YXRzKHNvcnQpCiAgICAgcmV0dXJuIHJlc3VsdAogCiAjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgpAQCAtMTY5LDcgKzE2OSw4IEBACiAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1vJywgJy0tb3V0ZmlsZScsIGRlc3Q9Im91dGZpbGUiLAogICAgICAgICBoZWxwPSJTYXZlIHN0YXRzIHRvIDxvdXRmaWxlPiIsIGRlZmF1bHQ9Tm9uZSkKICAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zb3J0JywgZGVzdD0ic29ydCIsCi0gICAgICAgIGhlbHA9IlNvcnQgb3JkZXIgd2hlbiBwcmludGluZyB0byBzdGRvdXQsIGJhc2VkIG9uIHBzdGF0cy5TdGF0cyBjbGFzcyIsIGRlZmF1bHQ9LTEpCisgICAgICAgIGhlbHA9IlNvcnQgb3JkZXIgd2hlbiBwcmludGluZyB0byBzdGRvdXQsIGJhc2VkIG9uIHBzdGF0cy5TdGF0cyBjbGFzcyIsCisgICAgICAgIGRlZmF1bHQ9LTEpCiAKICAgICBpZiBub3Qgc3lzLmFyZ3ZbMTpdOgogICAgICAgICBwYXJzZXIucHJpbnRfdXNhZ2UoKQpAQCAtMTc4LDkgKzE3OSwxNyBAQAogICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgICBzeXMuYXJndls6XSA9IGFyZ3MKIAotICAgIGlmIChsZW4oc3lzLmFyZ3YpID4gMCk6Ci0gICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pKQotICAgICAgICBydW4oJ2V4ZWNmaWxlKCVyKScgJSAoc3lzLmFyZ3ZbMF0sKSwgb3B0aW9ucy5vdXRmaWxlLCBvcHRpb25zLnNvcnQpCisgICAgaWYgbGVuKGFyZ3MpID4gMDoKKyAgICAgICAgcHJvZ25hbWUgPSBhcmdzWzBdCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUocHJvZ25hbWUpKQorICAgICAgICB3aXRoIG9wZW4ocHJvZ25hbWUsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoZnAucmVhZCgpLCBwcm9nbmFtZSwgJ2V4ZWMnKQorICAgICAgICBnbG9icyA9IHsKKyAgICAgICAgICAgICdfX2ZpbGVfXyc6IHByb2duYW1lLAorICAgICAgICAgICAgJ19fbmFtZV9fJzogJ19fbWFpbl9fJywKKyAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6IE5vbmUsCisgICAgICAgIH0KKyAgICAgICAgcnVuY3R4KGNvZGUsIGdsb2JzLCBOb25lLCBvcHRpb25zLm91dGZpbGUsIG9wdGlvbnMuc29ydCkKICAgICBlbHNlOgogICAgICAgICBwYXJzZXIucHJpbnRfdXNhZ2UoKQogICAgIHJldHVybiBwYXJzZXIKZGlmZiAtLWdpdCBhL0xpYi9jYWxlbmRhci5weSBiL0xpYi9jYWxlbmRhci5weQppbmRleCAyZTQ1ZTI0Li4zMTA2ZWYyIDEwMDY0NAotLS0gYS9MaWIvY2FsZW5kYXIucHkKKysrIGIvTGliL2NhbGVuZGFyLnB5CkBAIC05NSw3ICs5NSw3IEBACiAKIAogZGVmIGlzbGVhcCh5ZWFyKToKLSAgICAiIiJSZXR1cm4gMSBmb3IgbGVhcCB5ZWFycywgMCBmb3Igbm9uLWxlYXAgeWVhcnMuIiIiCisgICAgIiIiUmV0dXJuIFRydWUgZm9yIGxlYXAgeWVhcnMsIEZhbHNlIGZvciBub24tbGVhcCB5ZWFycy4iIiIKICAgICByZXR1cm4geWVhciAlIDQgPT0gMCBhbmQgKHllYXIgJSAxMDAgIT0gMCBvciB5ZWFyICUgNDAwID09IDApCiAKIApAQCAtNDg2LDggKzQ4Niw4IEBACiAgICAgICAgIHNlbGYubG9jYWxlID0gbG9jYWxlCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICBzZWxmLm9sZGxvY2FsZSA9IF9sb2NhbGUuc2V0bG9jYWxlKF9sb2NhbGUuTENfVElNRSwgc2VsZi5sb2NhbGUpCi0gICAgICAgIHJldHVybiBfbG9jYWxlLmdldGxvY2FsZShfbG9jYWxlLkxDX1RJTUUpWzFdCisgICAgICAgIHNlbGYub2xkbG9jYWxlID0gX2xvY2FsZS5nZXRsb2NhbGUoX2xvY2FsZS5MQ19USU1FKQorICAgICAgICBfbG9jYWxlLnNldGxvY2FsZShfbG9jYWxlLkxDX1RJTUUsIHNlbGYubG9jYWxlKQogCiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKICAgICAgICAgX2xvY2FsZS5zZXRsb2NhbGUoX2xvY2FsZS5MQ19USU1FLCBzZWxmLm9sZGxvY2FsZSkKZGlmZiAtLWdpdCBhL0xpYi9jZ2kucHkgYi9MaWIvY2dpLnB5CmluZGV4IGRiMTBhNjIuLmI0YzYyMGEgMTAwNzU1Ci0tLSBhL0xpYi9jZ2kucHkKKysrIGIvTGliL2NnaS5weQpAQCAtNDUsMTAgKzQ1LDEwIEBACiB3aXRoIGNhdGNoX3dhcm5pbmdzKCk6CiAgICAgaWYgc3lzLnB5M2t3YXJuaW5nOgogICAgICAgICBmaWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4qbWltZXRvb2xzIGhhcyBiZWVuIHJlbW92ZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIGZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiLipyZmM4MjIgaGFzIGJlZW4gcmVtb3ZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKICAgICBpbXBvcnQgbWltZXRvb2xzCi0gICAgaWYgc3lzLnB5M2t3YXJuaW5nOgotICAgICAgICBmaWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4qcmZjODIyIGhhcyBiZWVuIHJlbW92ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgaW1wb3J0IHJmYzgyMgogCiB0cnk6CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICAgICAgZW52aXJvbiAgICAgICAgIDogZW52aXJvbm1lbnQgZGljdGlvbmFyeTsgZGVmYXVsdDogb3MuZW52aXJvbgogCiAgICAgICAgIGtlZXBfYmxhbmtfdmFsdWVzOiBmbGFnIGluZGljYXRpbmcgd2hldGhlciBibGFuayB2YWx1ZXMgaW4KLSAgICAgICAgICAgIFVSTCBlbmNvZGVkIGZvcm1zIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuCisgICAgICAgICAgICBwZXJjZW50LWVuY29kZWQgZm9ybXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmxhbmsgc3RyaW5ncy4KICAgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBibGFua3Mgc2hvdWxkIGJlIHJldGFpbmVkIGFzCiAgICAgICAgICAgICBibGFuayBzdHJpbmdzLiAgVGhlIGRlZmF1bHQgZmFsc2UgdmFsdWUgaW5kaWNhdGVzIHRoYXQKICAgICAgICAgICAgIGJsYW5rIHZhbHVlcyBhcmUgdG8gYmUgaWdub3JlZCBhbmQgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUKQEAgLTE4MCw4ICsxODAsOCBAQAogCiBkZWYgcGFyc2VfcXMocXMsIGtlZXBfYmxhbmtfdmFsdWVzPTAsIHN0cmljdF9wYXJzaW5nPTApOgogICAgICIiIlBhcnNlIGEgcXVlcnkgZ2l2ZW4gYXMgYSBzdHJpbmcgYXJndW1lbnQuIiIiCi0gICAgd2FybigiY2dpLnBhcnNlX3FzIGlzIGRlcHJlY2F0ZWQsIHVzZSB1cmxwYXJzZS5wYXJzZV9xcyBcCi0gICAgICAgICAgICBpbnN0ZWFkIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICB3YXJuKCJjZ2kucGFyc2VfcXMgaXMgZGVwcmVjYXRlZCwgdXNlIHVybHBhcnNlLnBhcnNlX3FzIGluc3RlYWQiLAorICAgICAgICAgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKICAgICByZXR1cm4gdXJscGFyc2UucGFyc2VfcXMocXMsIGtlZXBfYmxhbmtfdmFsdWVzLCBzdHJpY3RfcGFyc2luZykKIAogCkBAIC00MTEsNyArNDExLDcgQEAKICAgICAgICAgZW52aXJvbiAgICAgICAgIDogZW52aXJvbm1lbnQgZGljdGlvbmFyeTsgZGVmYXVsdDogb3MuZW52aXJvbgogCiAgICAgICAgIGtlZXBfYmxhbmtfdmFsdWVzOiBmbGFnIGluZGljYXRpbmcgd2hldGhlciBibGFuayB2YWx1ZXMgaW4KLSAgICAgICAgICAgIFVSTCBlbmNvZGVkIGZvcm1zIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuCisgICAgICAgICAgICBwZXJjZW50LWVuY29kZWQgZm9ybXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmxhbmsgc3RyaW5ncy4KICAgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBibGFua3Mgc2hvdWxkIGJlIHJldGFpbmVkIGFzCiAgICAgICAgICAgICBibGFuayBzdHJpbmdzLiAgVGhlIGRlZmF1bHQgZmFsc2UgdmFsdWUgaW5kaWNhdGVzIHRoYXQKICAgICAgICAgICAgIGJsYW5rIHZhbHVlcyBhcmUgdG8gYmUgaWdub3JlZCBhbmQgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUKZGlmZiAtLWdpdCBhL0xpYi9jZ2l0Yi5weSBiL0xpYi9jZ2l0Yi5weQppbmRleCA3NjZkMzMxLi41YmVjZGYzIDEwMDY0NAotLS0gYS9MaWIvY2dpdGIucHkKKysrIGIvTGliL2NnaXRiLnB5CkBAIC0xOSwxMyArMTksMTkgQEAKIGZvciB5b3UsIGNhbGwgY2dpdGIuaGFuZGxlcigpLiAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGhhbmRsZXIoKSBpcyBhCiAzLWl0ZW0gdHVwbGUgKGV0eXBlLCBldmFsdWUsIGV0YikganVzdCBsaWtlIHRoZSB2YWx1ZSBvZiBzeXMuZXhjX2luZm8oKS4KIFRoZSBkZWZhdWx0IGhhbmRsZXIgZGlzcGxheXMgb3V0cHV0IGFzIEhUTUwuCisKICIiIgotCi1fX2F1dGhvcl9fID0gJ0thLVBpbmcgWWVlJwotCi1fX3ZlcnNpb25fXyA9ICckUmV2aXNpb24kJwotCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGtleXdvcmQKK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCBvcworaW1wb3J0IHB5ZG9jCiBpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdG9rZW5pemUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB0eXBlcwogCiBkZWYgcmVzZXQoKToKICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgdGhhdCByZXNldHMgdGhlIENHSSBhbmQgYnJvd3NlciB0byBhIGtub3duIHN0YXRlLiIiIgpAQCAtNzQsNyArODAsNiBAQAogCiBkZWYgc2NhbnZhcnMocmVhZGVyLCBmcmFtZSwgbG9jYWxzKToKICAgICAiIiJTY2FuIG9uZSBsb2dpY2FsIGxpbmUgb2YgUHl0aG9uIGFuZCBsb29rIHVwIHZhbHVlcyBvZiB2YXJpYWJsZXMgdXNlZC4iIiIKLSAgICBpbXBvcnQgdG9rZW5pemUsIGtleXdvcmQKICAgICB2YXJzLCBsYXN0dG9rZW4sIHBhcmVudCwgcHJlZml4LCB2YWx1ZSA9IFtdLCBOb25lLCBOb25lLCAnJywgX19VTkRFRl9fCiAgICAgZm9yIHR0eXBlLCB0b2tlbiwgc3RhcnQsIGVuZCwgbGluZSBpbiB0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnMocmVhZGVyKToKICAgICAgICAgaWYgdHR5cGUgPT0gdG9rZW5pemUuTkVXTElORTogYnJlYWsKQEAgLTk2LDcgKzEwMSw2IEBACiAKIGRlZiBodG1sKGVpbmZvLCBjb250ZXh0PTUpOgogICAgICIiIlJldHVybiBhIG5pY2UgSFRNTCBkb2N1bWVudCBkZXNjcmliaW5nIGEgZ2l2ZW4gdHJhY2ViYWNrLiIiIgotICAgIGltcG9ydCBvcywgdHlwZXMsIHRpbWUsIHRyYWNlYmFjaywgbGluZWNhY2hlLCBpbnNwZWN0LCBweWRvYwogICAgIGV0eXBlLCBldmFsdWUsIGV0YiA9IGVpbmZvCiAgICAgaWYgdHlwZShldHlwZSkgaXMgdHlwZXMuQ2xhc3NUeXBlOgogICAgICAgICBldHlwZSA9IGV0eXBlLl9fbmFtZV9fCkBAIC0xMzgsMTAgKzE0MiwxMSBAQAogICAgICAgICAgICAgaSA9IGxudW0gLSBpbmRleAogICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAgICAgICAgICAgbnVtID0gc21hbGwoJyZuYnNwOycgKiAoNS1sZW4oc3RyKGkpKSkgKyBzdHIoaSkpICsgJyZuYnNwOycKLSAgICAgICAgICAgICAgICBsaW5lID0gJzx0dD4lcyVzPC90dD4nICUgKG51bSwgcHlkb2MuaHRtbC5wcmVmb3JtYXQobGluZSkpCiAgICAgICAgICAgICAgICAgaWYgaSBpbiBoaWdobGlnaHQ6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSAnPHR0Pj0mZ3Q7JXMlczwvdHQ+JyAlIChudW0sIHB5ZG9jLmh0bWwucHJlZm9ybWF0KGxpbmUpKQogICAgICAgICAgICAgICAgICAgICByb3dzLmFwcGVuZCgnPHRyPjx0ZCBiZ2NvbG9yPSIjZmZjY2VlIj4lczwvdGQ+PC90cj4nICUgbGluZSkKICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gJzx0dD4mbmJzcDsmbmJzcDslcyVzPC90dD4nICUgKG51bSwgcHlkb2MuaHRtbC5wcmVmb3JtYXQobGluZSkpCiAgICAgICAgICAgICAgICAgICAgIHJvd3MuYXBwZW5kKCc8dHI+PHRkPiVzPC90ZD48L3RyPicgJSBncmV5KGxpbmUpKQogICAgICAgICAgICAgICAgIGkgKz0gMQogCkBAIC0xNzMsNyArMTc4LDYgQEAKICAgICAgICAgICAgIHZhbHVlID0gcHlkb2MuaHRtbC5yZXByKGdldGF0dHIoZXZhbHVlLCBuYW1lKSkKICAgICAgICAgICAgIGV4Y2VwdGlvbi5hcHBlbmQoJ1xuPGJyPiVzJXMmbmJzcDs9XG4lcycgJSAoaW5kZW50LCBuYW1lLCB2YWx1ZSkpCiAKLSAgICBpbXBvcnQgdHJhY2ViYWNrCiAgICAgcmV0dXJuIGhlYWQgKyAnJy5qb2luKGZyYW1lcykgKyAnJy5qb2luKGV4Y2VwdGlvbikgKyAnJycKIAogCkBAIC0xODgsNyArMTkyLDYgQEAKIAogZGVmIHRleHQoZWluZm8sIGNvbnRleHQ9NSk6CiAgICAgIiIiUmV0dXJuIGEgcGxhaW4gdGV4dCBkb2N1bWVudCBkZXNjcmliaW5nIGEgZ2l2ZW4gdHJhY2ViYWNrLiIiIgotICAgIGltcG9ydCBvcywgdHlwZXMsIHRpbWUsIHRyYWNlYmFjaywgbGluZWNhY2hlLCBpbnNwZWN0LCBweWRvYwogICAgIGV0eXBlLCBldmFsdWUsIGV0YiA9IGVpbmZvCiAgICAgaWYgdHlwZShldHlwZSkgaXMgdHlwZXMuQ2xhc3NUeXBlOgogICAgICAgICBldHlwZSA9IGV0eXBlLl9fbmFtZV9fCkBAIC0yNDUsNyArMjQ4LDYgQEAKICAgICAgICAgICAgIHZhbHVlID0gcHlkb2MudGV4dC5yZXByKGdldGF0dHIoZXZhbHVlLCBuYW1lKSkKICAgICAgICAgICAgIGV4Y2VwdGlvbi5hcHBlbmQoJ1xuJXMlcyA9ICVzJyAlICgiICIqNCwgbmFtZSwgdmFsdWUpKQogCi0gICAgaW1wb3J0IHRyYWNlYmFjawogICAgIHJldHVybiBoZWFkICsgJycuam9pbihmcmFtZXMpICsgJycuam9pbihleGNlcHRpb24pICsgJycnCiAKIFRoZSBhYm92ZSBpcyBhIGRlc2NyaXB0aW9uIG9mIGFuIGVycm9yIGluIGEgUHl0aG9uIHByb2dyYW0uICBIZXJlIGlzCkBAIC0yNzgsNyArMjgwLDYgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZG9jID0gZm9ybWF0dGVyKGluZm8sIHNlbGYuY29udGV4dCkKICAgICAgICAgZXhjZXB0OiAgICAgICAgICAgICAgICAgICAgICAgICAjIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZwotICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawogICAgICAgICAgICAgZG9jID0gJycuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqaW5mbykpCiAgICAgICAgICAgICBwbGFpbiA9IFRydWUKIApAQCAtMjkyLDcgKzI5Myw2IEBACiAgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoJzxwPkEgcHJvYmxlbSBvY2N1cnJlZCBpbiBhIFB5dGhvbiBzY3JpcHQuXG4nKQogCiAgICAgICAgIGlmIHNlbGYubG9nZGlyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaW1wb3J0IG9zLCB0ZW1wZmlsZQogICAgICAgICAgICAgc3VmZml4ID0gWycudHh0JywgJy5odG1sJ11bc2VsZi5mb3JtYXQ9PSJodG1sIl0KICAgICAgICAgICAgIChmZCwgcGF0aCkgPSB0ZW1wZmlsZS5ta3N0ZW1wKHN1ZmZpeD1zdWZmaXgsIGRpcj1zZWxmLmxvZ2RpcikKICAgICAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9jbWQucHkgYi9MaWIvY21kLnB5CmluZGV4IGVjNjJjNzQuLjI5ZWE0NjAgMTAwNjQ0Ci0tLSBhL0xpYi9jbWQucHkKKysrIGIvTGliL2NtZC5weQpAQCAtMjgxLDE5ICsyODEsMTUgQEAKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgZ2V0X25hbWVzKHNlbGYpOgotICAgICAgICAjIEluaGVyaXRhbmNlIHNheXMgd2UgaGF2ZSB0byBsb29rIGluIGNsYXNzIGFuZAotICAgICAgICAjIGJhc2UgY2xhc3Nlczsgb3JkZXIgaXMgbm90IGltcG9ydGFudC4KLSAgICAgICAgbmFtZXMgPSBbXQotICAgICAgICBjbGFzc2VzID0gW3NlbGYuX19jbGFzc19fXQotICAgICAgICB3aGlsZSBjbGFzc2VzOgotICAgICAgICAgICAgYWNsYXNzID0gY2xhc3Nlcy5wb3AoMCkKLSAgICAgICAgICAgIGlmIGFjbGFzcy5fX2Jhc2VzX186Ci0gICAgICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMgKyBsaXN0KGFjbGFzcy5fX2Jhc2VzX18pCi0gICAgICAgICAgICBuYW1lcyA9IG5hbWVzICsgZGlyKGFjbGFzcykKLSAgICAgICAgcmV0dXJuIG5hbWVzCisgICAgICAgICMgVGhpcyBtZXRob2QgdXNlZCB0byBwdWxsIGluIGJhc2UgY2xhc3MgYXR0cmlidXRlcworICAgICAgICAjIGF0IGEgdGltZSBkaXIoKSBkaWRuJ3QgZG8gaXQgeWV0LgorICAgICAgICByZXR1cm4gZGlyKHNlbGYuX19jbGFzc19fKQogCiAgICAgZGVmIGNvbXBsZXRlX2hlbHAoc2VsZiwgKmFyZ3MpOgotICAgICAgICByZXR1cm4gc2VsZi5jb21wbGV0ZW5hbWVzKCphcmdzKQorICAgICAgICBjb21tYW5kcyA9IHNldChzZWxmLmNvbXBsZXRlbmFtZXMoKmFyZ3MpKQorICAgICAgICB0b3BpY3MgPSBzZXQoYVs1Ol0gZm9yIGEgaW4gc2VsZi5nZXRfbmFtZXMoKQorICAgICAgICAgICAgICAgICAgICAgaWYgYS5zdGFydHN3aXRoKCdoZWxwXycgKyBhcmdzWzBdKSkKKyAgICAgICAgcmV0dXJuIGxpc3QoY29tbWFuZHMgfCB0b3BpY3MpCiAKICAgICBkZWYgZG9faGVscChzZWxmLCBhcmcpOgogICAgICAgICBpZiBhcmc6CmRpZmYgLS1naXQgYS9MaWIvY29kZS5weSBiL0xpYi9jb2RlLnB5CmluZGV4IDJlM2VlMTEuLjNiMzlkMWIgMTAwNjQ0Ci0tLSBhL0xpYi9jb2RlLnB5CisrKyBiL0xpYi9jb2RlLnB5CkBAIC0zMDYsNiArMzA2LDUgQEAKICAgICBjb25zb2xlLmludGVyYWN0KGJhbm5lcikKIAogCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBwZGIKLSAgICBwZGIucnVuKCJpbnRlcmFjdCgpXG4iKQoraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBpbnRlcmFjdCgpCmRpZmYgLS1naXQgYS9MaWIvY29sbGVjdGlvbnMucHkgYi9MaWIvY29sbGVjdGlvbnMucHkKaW5kZXggYjgxZWZmZS4uYmI2YjE1ZCAxMDA2NDQKLS0tIGEvTGliL2NvbGxlY3Rpb25zLnB5CisrKyBiL0xpYi9jb2xsZWN0aW9ucy5weQpAQCAtMSw0ICsxLDQgQEAKLV9fYWxsX18gPSBbJ2RlcXVlJywgJ2RlZmF1bHRkaWN0JywgJ25hbWVkdHVwbGUnXQorX19hbGxfXyA9IFsnQ291bnRlcicsICdkZXF1ZScsICdkZWZhdWx0ZGljdCcsICduYW1lZHR1cGxlJywgJ09yZGVyZWREaWN0J10KICMgRm9yIGJvb3RzdHJhcHBpbmcgcmVhc29ucywgdGhlIGNvbGxlY3Rpb24gQUJDcyBhcmUgZGVmaW5lZCBpbiBfYWJjb2xsLnB5LgogIyBUaGV5IHNob3VsZCBob3dldmVyIGJlIGNvbnNpZGVyZWQgYW4gaW50ZWdyYWwgcGFydCBvZiBjb2xsZWN0aW9ucy5weS4KIGZyb20gX2FiY29sbCBpbXBvcnQgKgpAQCAtNiwxMSArNiwyMjIgQEAKIF9fYWxsX18gKz0gX2FiY29sbC5fX2FsbF9fCiAKIGZyb20gX2NvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSwgZGVmYXVsdGRpY3QKLWZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIgYXMgX2l0ZW1nZXR0ZXIKK2Zyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIgYXMgX2l0ZW1nZXR0ZXIsIGVxIGFzIF9lcQogZnJvbSBrZXl3b3JkIGltcG9ydCBpc2tleXdvcmQgYXMgX2lza2V5d29yZAogaW1wb3J0IHN5cyBhcyBfc3lzCitpbXBvcnQgaGVhcHEgYXMgX2hlYXBxCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcmVwZWF0IGFzIF9yZXBlYXQsIGNoYWluIGFzIF9jaGFpbiwgc3Rhcm1hcCBhcyBfc3Rhcm1hcCwgXAorICAgICAgICAgICAgICAgICAgICAgIGlmaWx0ZXIgYXMgX2lmaWx0ZXIsIGltYXAgYXMgX2ltYXAKK3RyeToKKyAgICBmcm9tIHRocmVhZCBpbXBvcnQgZ2V0X2lkZW50CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBkdW1teV90aHJlYWQgaW1wb3J0IGdldF9pZGVudAogCi1kZWYgbmFtZWR0dXBsZSh0eXBlbmFtZSwgZmllbGRfbmFtZXMsIHZlcmJvc2U9RmFsc2UpOgorZGVmIF9yZWN1cnNpdmVfcmVwcih1c2VyX2Z1bmN0aW9uKToKKyAgICAnRGVjb3JhdG9yIHRvIG1ha2UgYSByZXByIGZ1bmN0aW9uIHJldHVybiAiLi4uIiBmb3IgYSByZWN1cnNpdmUgY2FsbCcKKyAgICByZXByX3J1bm5pbmcgPSBzZXQoKQorCisgICAgZGVmIHdyYXBwZXIoc2VsZik6CisgICAgICAgIGtleSA9IGlkKHNlbGYpLCBnZXRfaWRlbnQoKQorICAgICAgICBpZiBrZXkgaW4gcmVwcl9ydW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuICcuLi4nCisgICAgICAgIHJlcHJfcnVubmluZy5hZGQoa2V5KQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSB1c2VyX2Z1bmN0aW9uKHNlbGYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByZXByX3J1bm5pbmcuZGlzY2FyZChrZXkpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICMgQ2FuJ3QgdXNlIGZ1bmN0b29scy53cmFwcygpIGhlcmUgYmVjYXVzZSBvZiBib290c3RyYXAgaXNzdWVzCisgICAgd3JhcHBlci5fX21vZHVsZV9fID0gZ2V0YXR0cih1c2VyX2Z1bmN0aW9uLCAnX19tb2R1bGVfXycpCisgICAgd3JhcHBlci5fX2RvY19fID0gZ2V0YXR0cih1c2VyX2Z1bmN0aW9uLCAnX19kb2NfXycpCisgICAgd3JhcHBlci5fX25hbWVfXyA9IGdldGF0dHIodXNlcl9mdW5jdGlvbiwgJ19fbmFtZV9fJykKKyAgICByZXR1cm4gd3JhcHBlcgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgT3JkZXJlZERpY3QKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIE9yZGVyZWREaWN0KGRpY3QpOgorICAgICdEaWN0aW9uYXJ5IHRoYXQgcmVtZW1iZXJzIGluc2VydGlvbiBvcmRlcicKKyAgICAjIEFuIGluaGVyaXRlZCBkaWN0IG1hcHMga2V5cyB0byB2YWx1ZXMuCisgICAgIyBUaGUgaW5oZXJpdGVkIGRpY3QgcHJvdmlkZXMgX19nZXRpdGVtX18sIF9fbGVuX18sIF9fY29udGFpbnNfXywgYW5kIGdldC4KKyAgICAjIFRoZSByZW1haW5pbmcgbWV0aG9kcyBhcmUgb3JkZXItYXdhcmUuCisgICAgIyBCaWctTyBydW5uaW5nIHRpbWVzIGZvciBhbGwgbWV0aG9kcyBhcmUgdGhlIHNhbWUgYXMgZm9yIHJlZ3VsYXIgZGljdGlvbmFyaWVzLgorCisgICAgIyBUaGUgaW50ZXJuYWwgc2VsZi5fX21hcCBkaWN0aW9uYXJ5IG1hcHMga2V5cyB0byBsaW5rcyBpbiBhIGRvdWJseSBsaW5rZWQgbGlzdC4KKyAgICAjIFRoZSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3Qgc3RhcnRzIGFuZCBlbmRzIHdpdGggYSBzZW50aW5lbCBlbGVtZW50LgorICAgICMgVGhlIHNlbnRpbmVsIGVsZW1lbnQgbmV2ZXIgZ2V0cyBkZWxldGVkICh0aGlzIHNpbXBsaWZpZXMgdGhlIGFsZ29yaXRobSkuCisgICAgIyBFYWNoIGxpbmsgaXMgc3RvcmVkIGFzIGEgbGlzdCBvZiBsZW5ndGggdGhyZWU6ICBbUFJFViwgTkVYVCwgS0VZXS4KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgJycnSW5pdGlhbGl6ZSBhbiBvcmRlcmVkIGRpY3Rpb25hcnkuICBTaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMgZm9yCisgICAgICAgIHJlZ3VsYXIgZGljdGlvbmFyaWVzLCBidXQga2V5d29yZCBhcmd1bWVudHMgYXJlIG5vdCByZWNvbW1lbmRlZAorICAgICAgICBiZWNhdXNlIHRoZWlyIGluc2VydGlvbiBvcmRlciBpcyBhcmJpdHJhcnkuCisKKyAgICAgICAgJycnCisgICAgICAgIGlmIGxlbihhcmdzKSA+IDE6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkIGF0IG1vc3QgMSBhcmd1bWVudHMsIGdvdCAlZCcgJSBsZW4oYXJncykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX19yb290CisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX19yb290ID0gcm9vdCA9IFtOb25lLCBOb25lLCBOb25lXSAgICAgIyBzZW50aW5lbCBub2RlCisgICAgICAgICAgICBQUkVWID0gMAorICAgICAgICAgICAgTkVYVCA9IDEKKyAgICAgICAgICAgIHJvb3RbUFJFVl0gPSByb290W05FWFRdID0gcm9vdAorICAgICAgICAgICAgc2VsZi5fX21hcCA9IHt9CisgICAgICAgIHNlbGYuX191cGRhdGUoKmFyZ3MsICoqa3dkcykKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlLCBQUkVWPTAsIE5FWFQ9MSwgZGljdF9zZXRpdGVtPWRpY3QuX19zZXRpdGVtX18pOgorICAgICAgICAnb2QuX19zZXRpdGVtX18oaSwgeSkgPD09PiBvZFtpXT15JworICAgICAgICAjIFNldHRpbmcgYSBuZXcgaXRlbSBjcmVhdGVzIGEgbmV3IGxpbmsgd2hpY2ggZ29lcyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5rZWQKKyAgICAgICAgIyBsaXN0LCBhbmQgdGhlIGluaGVyaXRlZCBkaWN0aW9uYXJ5IGlzIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IGtleS92YWx1ZSBwYWlyLgorICAgICAgICBpZiBrZXkgbm90IGluIHNlbGY6CisgICAgICAgICAgICByb290ID0gc2VsZi5fX3Jvb3QKKyAgICAgICAgICAgIGxhc3QgPSByb290W1BSRVZdCisgICAgICAgICAgICBsYXN0W05FWFRdID0gcm9vdFtQUkVWXSA9IHNlbGYuX19tYXBba2V5XSA9IFtsYXN0LCByb290LCBrZXldCisgICAgICAgIGRpY3Rfc2V0aXRlbShzZWxmLCBrZXksIHZhbHVlKQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSwgUFJFVj0wLCBORVhUPTEsIGRpY3RfZGVsaXRlbT1kaWN0Ll9fZGVsaXRlbV9fKToKKyAgICAgICAgJ29kLl9fZGVsaXRlbV9fKHkpIDw9PT4gZGVsIG9kW3ldJworICAgICAgICAjIERlbGV0aW5nIGFuIGV4aXN0aW5nIGl0ZW0gdXNlcyBzZWxmLl9fbWFwIHRvIGZpbmQgdGhlIGxpbmsgd2hpY2ggaXMKKyAgICAgICAgIyB0aGVuIHJlbW92ZWQgYnkgdXBkYXRpbmcgdGhlIGxpbmtzIGluIHRoZSBwcmVkZWNlc3NvciBhbmQgc3VjY2Vzc29yIG5vZGVzLgorICAgICAgICBkaWN0X2RlbGl0ZW0oc2VsZiwga2V5KQorICAgICAgICBsaW5rID0gc2VsZi5fX21hcC5wb3Aoa2V5KQorICAgICAgICBsaW5rX3ByZXYgPSBsaW5rW1BSRVZdCisgICAgICAgIGxpbmtfbmV4dCA9IGxpbmtbTkVYVF0KKyAgICAgICAgbGlua19wcmV2W05FWFRdID0gbGlua19uZXh0CisgICAgICAgIGxpbmtfbmV4dFtQUkVWXSA9IGxpbmtfcHJldgorCisgICAgZGVmIF9faXRlcl9fKHNlbGYsIE5FWFQ9MSwgS0VZPTIpOgorICAgICAgICAnb2QuX19pdGVyX18oKSA8PT0+IGl0ZXIob2QpJworICAgICAgICAjIFRyYXZlcnNlIHRoZSBsaW5rZWQgbGlzdCBpbiBvcmRlci4KKyAgICAgICAgcm9vdCA9IHNlbGYuX19yb290CisgICAgICAgIGN1cnIgPSByb290W05FWFRdCisgICAgICAgIHdoaWxlIGN1cnIgaXMgbm90IHJvb3Q6CisgICAgICAgICAgICB5aWVsZCBjdXJyW0tFWV0KKyAgICAgICAgICAgIGN1cnIgPSBjdXJyW05FWFRdCisKKyAgICBkZWYgX19yZXZlcnNlZF9fKHNlbGYsIFBSRVY9MCwgS0VZPTIpOgorICAgICAgICAnb2QuX19yZXZlcnNlZF9fKCkgPD09PiByZXZlcnNlZChvZCknCisgICAgICAgICMgVHJhdmVyc2UgdGhlIGxpbmtlZCBsaXN0IGluIHJldmVyc2Ugb3JkZXIuCisgICAgICAgIHJvb3QgPSBzZWxmLl9fcm9vdAorICAgICAgICBjdXJyID0gcm9vdFtQUkVWXQorICAgICAgICB3aGlsZSBjdXJyIGlzIG5vdCByb290OgorICAgICAgICAgICAgeWllbGQgY3VycltLRVldCisgICAgICAgICAgICBjdXJyID0gY3VycltQUkVWXQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICdSZXR1cm4gc3RhdGUgaW5mb3JtYXRpb24gZm9yIHBpY2tsaW5nJworICAgICAgICBpdGVtcyA9IFtbaywgc2VsZltrXV0gZm9yIGsgaW4gc2VsZl0KKyAgICAgICAgdG1wID0gc2VsZi5fX21hcCwgc2VsZi5fX3Jvb3QKKyAgICAgICAgZGVsIHNlbGYuX19tYXAsIHNlbGYuX19yb290CisgICAgICAgIGluc3RfZGljdCA9IHZhcnMoc2VsZikuY29weSgpCisgICAgICAgIHNlbGYuX19tYXAsIHNlbGYuX19yb290ID0gdG1wCisgICAgICAgIGlmIGluc3RfZGljdDoKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIChpdGVtcywpLCBpbnN0X2RpY3QpCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKGl0ZW1zLCkKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgJ29kLmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBvZC4nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBub2RlIGluIHNlbGYuX19tYXAuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGRlbCBub2RlWzpdCisgICAgICAgICAgICBzZWxmLl9fcm9vdFs6XSA9IFtzZWxmLl9fcm9vdCwgc2VsZi5fX3Jvb3QsIE5vbmVdCisgICAgICAgICAgICBzZWxmLl9fbWFwLmNsZWFyKCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkaWN0LmNsZWFyKHNlbGYpCisKKyAgICB1cGRhdGUgPSBfX3VwZGF0ZSA9IE11dGFibGVNYXBwaW5nLnVwZGF0ZQorICAgIGtleXMgPSBNdXRhYmxlTWFwcGluZy5rZXlzCisgICAgdmFsdWVzID0gTXV0YWJsZU1hcHBpbmcudmFsdWVzCisgICAgaXRlbXMgPSBNdXRhYmxlTWFwcGluZy5pdGVtcworICAgIGl0ZXJrZXlzID0gTXV0YWJsZU1hcHBpbmcuaXRlcmtleXMKKyAgICBpdGVydmFsdWVzID0gTXV0YWJsZU1hcHBpbmcuaXRlcnZhbHVlcworICAgIGl0ZXJpdGVtcyA9IE11dGFibGVNYXBwaW5nLml0ZXJpdGVtcworICAgIF9fbmVfXyA9IE11dGFibGVNYXBwaW5nLl9fbmVfXworCisgICAgZGVmIHZpZXdrZXlzKHNlbGYpOgorICAgICAgICAib2Qudmlld2tleXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIG9kJ3Mga2V5cyIKKyAgICAgICAgcmV0dXJuIEtleXNWaWV3KHNlbGYpCisKKyAgICBkZWYgdmlld3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIm9kLnZpZXd2YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBvZCdzIHZhbHVlcyIKKyAgICAgICAgcmV0dXJuIFZhbHVlc1ZpZXcoc2VsZikKKworICAgIGRlZiB2aWV3aXRlbXMoc2VsZik6CisgICAgICAgICJvZC52aWV3aXRlbXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIG9kJ3MgaXRlbXMiCisgICAgICAgIHJldHVybiBJdGVtc1ZpZXcoc2VsZikKKworICAgIF9fbWFya2VyID0gb2JqZWN0KCkKKworICAgIGRlZiBwb3Aoc2VsZiwga2V5LCBkZWZhdWx0PV9fbWFya2VyKToKKyAgICAgICAgaWYga2V5IGluIHNlbGY6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2tleV0KKyAgICAgICAgICAgIGRlbCBzZWxmW2tleV0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAnb2Quc2V0ZGVmYXVsdChrWyxkXSkgLT4gb2QuZ2V0KGssZCksIGFsc28gc2V0IG9kW2tdPWQgaWYgayBub3QgaW4gb2QnCisgICAgICAgIGlmIGtleSBpbiBzZWxmOgorICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQorICAgICAgICBzZWxmW2tleV0gPSBkZWZhdWx0CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBkZWYgcG9waXRlbShzZWxmLCBsYXN0PVRydWUpOgorICAgICAgICAnJydvZC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZXR1cm4gYW5kIHJlbW92ZSBhIChrZXksIHZhbHVlKSBwYWlyLgorICAgICAgICBQYWlycyBhcmUgcmV0dXJuZWQgaW4gTElGTyBvcmRlciBpZiBsYXN0IGlzIHRydWUgb3IgRklGTyBvcmRlciBpZiBmYWxzZS4KKworICAgICAgICAnJycKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignZGljdGlvbmFyeSBpcyBlbXB0eScpCisgICAgICAgIGtleSA9IG5leHQocmV2ZXJzZWQoc2VsZikgaWYgbGFzdCBlbHNlIGl0ZXIoc2VsZikpCisgICAgICAgIHZhbHVlID0gc2VsZi5wb3Aoa2V5KQorICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQorCisgICAgQF9yZWN1cnNpdmVfcmVwcgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgJ29kLl9fcmVwcl9fKCkgPD09PiByZXByKG9kKScKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICByZXR1cm4gJyVzKCknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCkKKyAgICAgICAgcmV0dXJuICclcyglciknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLml0ZW1zKCkpCisKKyAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgJ29kLmNvcHkoKSAtPiBhIHNoYWxsb3cgY29weSBvZiBvZCcKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbWtleXMoY2xzLCBpdGVyYWJsZSwgdmFsdWU9Tm9uZSk6CisgICAgICAgICcnJ09ELmZyb21rZXlzKFNbLCB2XSkgLT4gTmV3IG9yZGVyZWQgZGljdGlvbmFyeSB3aXRoIGtleXMgZnJvbSBTCisgICAgICAgIGFuZCB2YWx1ZXMgZXF1YWwgdG8gdiAod2hpY2ggZGVmYXVsdHMgdG8gTm9uZSkuCisKKyAgICAgICAgJycnCisgICAgICAgIGQgPSBjbHMoKQorICAgICAgICBmb3Iga2V5IGluIGl0ZXJhYmxlOgorICAgICAgICAgICAgZFtrZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIGQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAnJydvZC5fX2VxX18oeSkgPD09PiBvZD09eS4gIENvbXBhcmlzb24gdG8gYW5vdGhlciBPRCBpcyBvcmRlci1zZW5zaXRpdmUKKyAgICAgICAgd2hpbGUgY29tcGFyaXNvbiB0byBhIHJlZ3VsYXIgbWFwcGluZyBpcyBvcmRlci1pbnNlbnNpdGl2ZS4KKworICAgICAgICAnJycKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgT3JkZXJlZERpY3QpOgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmKT09bGVuKG90aGVyKSBhbmQgXAorICAgICAgICAgICAgICAgICAgIGFsbChfaW1hcChfZXEsIHNlbGYuaXRlcml0ZW1zKCksIG90aGVyLml0ZXJpdGVtcygpKSkKKyAgICAgICAgcmV0dXJuIGRpY3QuX19lcV9fKHNlbGYsIG90aGVyKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgbmFtZWR0dXBsZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIG5hbWVkdHVwbGUodHlwZW5hbWUsIGZpZWxkX25hbWVzLCB2ZXJib3NlPUZhbHNlLCByZW5hbWU9RmFsc2UpOgogICAgICIiIlJldHVybnMgYSBuZXcgc3ViY2xhc3Mgb2YgdHVwbGUgd2l0aCBuYW1lZCBmaWVsZHMuCiAKICAgICA+Pj4gUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknKQpAQCAtMzksNiArMjUwLDE2IEBACiAgICAgaWYgaXNpbnN0YW5jZShmaWVsZF9uYW1lcywgYmFzZXN0cmluZyk6CiAgICAgICAgIGZpZWxkX25hbWVzID0gZmllbGRfbmFtZXMucmVwbGFjZSgnLCcsICcgJykuc3BsaXQoKSAjIG5hbWVzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIGFuZC9vciBjb21tYXMKICAgICBmaWVsZF9uYW1lcyA9IHR1cGxlKG1hcChzdHIsIGZpZWxkX25hbWVzKSkKKyAgICBpZiByZW5hbWU6CisgICAgICAgIG5hbWVzID0gbGlzdChmaWVsZF9uYW1lcykKKyAgICAgICAgc2VlbiA9IHNldCgpCisgICAgICAgIGZvciBpLCBuYW1lIGluIGVudW1lcmF0ZShuYW1lcyk6CisgICAgICAgICAgICBpZiAobm90IGFsbChjLmlzYWxudW0oKSBvciBjPT0nXycgZm9yIGMgaW4gbmFtZSkgb3IgX2lza2V5d29yZChuYW1lKQorICAgICAgICAgICAgICAgIG9yIG5vdCBuYW1lIG9yIG5hbWVbMF0uaXNkaWdpdCgpIG9yIG5hbWUuc3RhcnRzd2l0aCgnXycpCisgICAgICAgICAgICAgICAgb3IgbmFtZSBpbiBzZWVuKToKKyAgICAgICAgICAgICAgICBuYW1lc1tpXSA9ICdfJWQnICUgaQorICAgICAgICAgICAgc2Vlbi5hZGQobmFtZSkKKyAgICAgICAgZmllbGRfbmFtZXMgPSB0dXBsZShuYW1lcykKICAgICBmb3IgbmFtZSBpbiAodHlwZW5hbWUsKSArIGZpZWxkX25hbWVzOgogICAgICAgICBpZiBub3QgYWxsKGMuaXNhbG51bSgpIG9yIGM9PSdfJyBmb3IgYyBpbiBuYW1lKToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1R5cGUgbmFtZXMgYW5kIGZpZWxkIG5hbWVzIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzOiAlcicgJSBuYW1lKQpAQCAtNDgsNyArMjY5LDcgQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1R5cGUgbmFtZXMgYW5kIGZpZWxkIG5hbWVzIGNhbm5vdCBzdGFydCB3aXRoIGEgbnVtYmVyOiAlcicgJSBuYW1lKQogICAgIHNlZW5fbmFtZXMgPSBzZXQoKQogICAgIGZvciBuYW1lIGluIGZpZWxkX25hbWVzOgotICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfJykgYW5kIG5vdCByZW5hbWU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdGaWVsZCBuYW1lcyBjYW5ub3Qgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlOiAlcicgJSBuYW1lKQogICAgICAgICBpZiBuYW1lIGluIHNlZW5fbmFtZXM6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFbmNvdW50ZXJlZCBkdXBsaWNhdGUgZmllbGQgbmFtZTogJXInICUgbmFtZSkKQEAgLTU4LDEyICsyNzksMTIgQEAKICAgICBudW1maWVsZHMgPSBsZW4oZmllbGRfbmFtZXMpCiAgICAgYXJndHh0ID0gcmVwcihmaWVsZF9uYW1lcykucmVwbGFjZSgiJyIsICIiKVsxOi0xXSAgICMgdHVwbGUgcmVwciB3aXRob3V0IHBhcmVucyBvciBxdW90ZXMKICAgICByZXBydHh0ID0gJywgJy5qb2luKCclcz0lJXInICUgbmFtZSBmb3IgbmFtZSBpbiBmaWVsZF9uYW1lcykKLSAgICBkaWN0dHh0ID0gJywgJy5qb2luKCclcjogdFslZF0nICUgKG5hbWUsIHBvcykgZm9yIHBvcywgbmFtZSBpbiBlbnVtZXJhdGUoZmllbGRfbmFtZXMpKQogICAgIHRlbXBsYXRlID0gJycnY2xhc3MgJSh0eXBlbmFtZSlzKHR1cGxlKToKICAgICAgICAgJyUodHlwZW5hbWUpcyglKGFyZ3R4dClzKScgXG4KICAgICAgICAgX19zbG90c19fID0gKCkgXG4KICAgICAgICAgX2ZpZWxkcyA9ICUoZmllbGRfbmFtZXMpciBcbgogICAgICAgICBkZWYgX19uZXdfXyhfY2xzLCAlKGFyZ3R4dClzKToKKyAgICAgICAgICAgICdDcmVhdGUgbmV3IGluc3RhbmNlIG9mICUodHlwZW5hbWUpcyglKGFyZ3R4dClzKScKICAgICAgICAgICAgIHJldHVybiBfdHVwbGUuX19uZXdfXyhfY2xzLCAoJShhcmd0eHQpcykpIFxuCiAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICBkZWYgX21ha2UoY2xzLCBpdGVyYWJsZSwgbmV3PXR1cGxlLl9fbmV3X18sIGxlbj1sZW4pOgpAQCAtNzMsMTAgKzI5NCwxMSBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignRXhwZWN0ZWQgJShudW1maWVsZHMpZCBhcmd1bWVudHMsIGdvdCAlJWQnICUlIGxlbihyZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBcbgogICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAnUmV0dXJuIGEgbmljZWx5IGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbiBzdHJpbmcnCiAgICAgICAgICAgICByZXR1cm4gJyUodHlwZW5hbWUpcyglKHJlcHJ0eHQpcyknICUlIHNlbGYgXG4KLSAgICAgICAgZGVmIF9hc2RpY3QodCk6Ci0gICAgICAgICAgICAnUmV0dXJuIGEgbmV3IGRpY3Qgd2hpY2ggbWFwcyBmaWVsZCBuYW1lcyB0byB0aGVpciB2YWx1ZXMnCi0gICAgICAgICAgICByZXR1cm4geyUoZGljdHR4dClzfSBcbgorICAgICAgICBkZWYgX2FzZGljdChzZWxmKToKKyAgICAgICAgICAgICdSZXR1cm4gYSBuZXcgT3JkZXJlZERpY3Qgd2hpY2ggbWFwcyBmaWVsZCBuYW1lcyB0byB0aGVpciB2YWx1ZXMnCisgICAgICAgICAgICByZXR1cm4gT3JkZXJlZERpY3QoemlwKHNlbGYuX2ZpZWxkcywgc2VsZikpIFxuCiAgICAgICAgIGRlZiBfcmVwbGFjZShfc2VsZiwgKiprd2RzKToKICAgICAgICAgICAgICdSZXR1cm4gYSBuZXcgJSh0eXBlbmFtZSlzIG9iamVjdCByZXBsYWNpbmcgc3BlY2lmaWVkIGZpZWxkcyB3aXRoIG5ldyB2YWx1ZXMnCiAgICAgICAgICAgICByZXN1bHQgPSBfc2VsZi5fbWFrZShtYXAoa3dkcy5wb3AsICUoZmllbGRfbmFtZXMpciwgX3NlbGYpKQpAQCAtODQsMTYgKzMwNiwxNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0dvdCB1bmV4cGVjdGVkIGZpZWxkIG5hbWVzOiAlJXInICUlIGt3ZHMua2V5cygpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBcbgogICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAnUmV0dXJuIHNlbGYgYXMgYSBwbGFpbiB0dXBsZS4gIFVzZWQgYnkgY29weSBhbmQgcGlja2xlLicKICAgICAgICAgICAgIHJldHVybiB0dXBsZShzZWxmKSBcblxuJycnICUgbG9jYWxzKCkKICAgICBmb3IgaSwgbmFtZSBpbiBlbnVtZXJhdGUoZmllbGRfbmFtZXMpOgotICAgICAgICB0ZW1wbGF0ZSArPSAnICAgICAgICAlcyA9IF9wcm9wZXJ0eShfaXRlbWdldHRlciglZCkpXG4nICUgKG5hbWUsIGkpCisgICAgICAgIHRlbXBsYXRlICs9ICIgICAgICAgICVzID0gX3Byb3BlcnR5KF9pdGVtZ2V0dGVyKCVkKSwgZG9jPSdBbGlhcyBmb3IgZmllbGQgbnVtYmVyICVkJylcbiIgJSAobmFtZSwgaSwgaSkKICAgICBpZiB2ZXJib3NlOgogICAgICAgICBwcmludCB0ZW1wbGF0ZQogCiAgICAgIyBFeGVjdXRlIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgaW4gYSB0ZW1wb3JhcnkgbmFtZXNwYWNlIGFuZAogICAgICMgc3VwcG9ydCB0cmFjaW5nIHV0aWxpdGllcyBieSBzZXR0aW5nIGEgdmFsdWUgZm9yIGZyYW1lLmZfZ2xvYmFsc1snX19uYW1lX18nXQogICAgIG5hbWVzcGFjZSA9IGRpY3QoX2l0ZW1nZXR0ZXI9X2l0ZW1nZXR0ZXIsIF9fbmFtZV9fPSduYW1lZHR1cGxlXyVzJyAlIHR5cGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgX3Byb3BlcnR5PXByb3BlcnR5LCBfdHVwbGU9dHVwbGUpCisgICAgICAgICAgICAgICAgICAgICBPcmRlcmVkRGljdD1PcmRlcmVkRGljdCwgX3Byb3BlcnR5PXByb3BlcnR5LCBfdHVwbGU9dHVwbGUpCiAgICAgdHJ5OgogICAgICAgICBleGVjIHRlbXBsYXRlIGluIG5hbWVzcGFjZQogICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgZToKQEAgLTEwMiwxNSArMzI1LDI5MCBAQAogCiAgICAgIyBGb3IgcGlja2xpbmcgdG8gd29yaywgdGhlIF9fbW9kdWxlX18gdmFyaWFibGUgbmVlZHMgdG8gYmUgc2V0IHRvIHRoZSBmcmFtZQogICAgICMgd2hlcmUgdGhlIG5hbWVkIHR1cGxlIGlzIGNyZWF0ZWQuICBCeXBhc3MgdGhpcyBzdGVwIGluIGVudmlyb21lbnRzIHdoZXJlCi0gICAgIyBzeXMuX2dldGZyYW1lIGlzIG5vdCBkZWZpbmVkIChKeXRob24gZm9yIGV4YW1wbGUpLgotICAgIGlmIGhhc2F0dHIoX3N5cywgJ19nZXRmcmFtZScpOgorICAgICMgc3lzLl9nZXRmcmFtZSBpcyBub3QgZGVmaW5lZCAoSnl0aG9uIGZvciBleGFtcGxlKSBvciBzeXMuX2dldGZyYW1lIGlzIG5vdAorICAgICMgZGVmaW5lZCBmb3IgYXJndW1lbnRzIGdyZWF0ZXIgdGhhbiAwIChJcm9uUHl0aG9uKS4KKyAgICB0cnk6CiAgICAgICAgIHJlc3VsdC5fX21vZHVsZV9fID0gX3N5cy5fZ2V0ZnJhbWUoMSkuZl9nbG9iYWxzLmdldCgnX19uYW1lX18nLCAnX19tYWluX18nKQorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICBwYXNzCiAKICAgICByZXR1cm4gcmVzdWx0CiAKIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgIENvdW50ZXIKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCitjbGFzcyBDb3VudGVyKGRpY3QpOgorICAgICcnJ0RpY3Qgc3ViY2xhc3MgZm9yIGNvdW50aW5nIGhhc2hhYmxlIGl0ZW1zLiAgU29tZXRpbWVzIGNhbGxlZCBhIGJhZworICAgIG9yIG11bHRpc2V0LiAgRWxlbWVudHMgYXJlIHN0b3JlZCBhcyBkaWN0aW9uYXJ5IGtleXMgYW5kIHRoZWlyIGNvdW50cworICAgIGFyZSBzdG9yZWQgYXMgZGljdGlvbmFyeSB2YWx1ZXMuCiAKKyAgICA+Pj4gYyA9IENvdW50ZXIoJ2FiY2RlYWJjZGFiY2FiYScpICAjIGNvdW50IGVsZW1lbnRzIGZyb20gYSBzdHJpbmcKKworICAgID4+PiBjLm1vc3RfY29tbW9uKDMpICAgICAgICAgICAgICAgICMgdGhyZWUgbW9zdCBjb21tb24gZWxlbWVudHMKKyAgICBbKCdhJywgNSksICgnYicsIDQpLCAoJ2MnLCAzKV0KKyAgICA+Pj4gc29ydGVkKGMpICAgICAgICAgICAgICAgICAgICAgICAjIGxpc3QgYWxsIHVuaXF1ZSBlbGVtZW50cworICAgIFsnYScsICdiJywgJ2MnLCAnZCcsICdlJ10KKyAgICA+Pj4gJycuam9pbihzb3J0ZWQoYy5lbGVtZW50cygpKSkgICAjIGxpc3QgZWxlbWVudHMgd2l0aCByZXBldGl0aW9ucworICAgICdhYWFhYWJiYmJjY2NkZGUnCisgICAgPj4+IHN1bShjLnZhbHVlcygpKSAgICAgICAgICAgICAgICAgIyB0b3RhbCBvZiBhbGwgY291bnRzCisgICAgMTUKKworICAgID4+PiBjWydhJ10gICAgICAgICAgICAgICAgICAgICAgICAgICMgY291bnQgb2YgbGV0dGVyICdhJworICAgIDUKKyAgICA+Pj4gZm9yIGVsZW0gaW4gJ3NoYXphbSc6ICAgICAgICAgICAjIHVwZGF0ZSBjb3VudHMgZnJvbSBhbiBpdGVyYWJsZQorICAgIC4uLiAgICAgY1tlbGVtXSArPSAxICAgICAgICAgICAgICAgICMgYnkgYWRkaW5nIDEgdG8gZWFjaCBlbGVtZW50J3MgY291bnQKKyAgICA+Pj4gY1snYSddICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdyB0aGVyZSBhcmUgc2V2ZW4gJ2EnCisgICAgNworICAgID4+PiBkZWwgY1snYiddICAgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIGFsbCAnYicKKyAgICA+Pj4gY1snYiddICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdyB0aGVyZSBhcmUgemVybyAnYicKKyAgICAwCisKKyAgICA+Pj4gZCA9IENvdW50ZXIoJ3NpbXNhbGFiaW0nKSAgICAgICAjIG1ha2UgYW5vdGhlciBjb3VudGVyCisgICAgPj4+IGMudXBkYXRlKGQpICAgICAgICAgICAgICAgICAgICAgIyBhZGQgaW4gdGhlIHNlY29uZCBjb3VudGVyCisgICAgPj4+IGNbJ2EnXSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBub3cgdGhlcmUgYXJlIG5pbmUgJ2EnCisgICAgOQorCisgICAgPj4+IGMuY2xlYXIoKSAgICAgICAgICAgICAgICAgICAgICAgIyBlbXB0eSB0aGUgY291bnRlcgorICAgID4+PiBjCisgICAgQ291bnRlcigpCisKKyAgICBOb3RlOiAgSWYgYSBjb3VudCBpcyBzZXQgdG8gemVybyBvciByZWR1Y2VkIHRvIHplcm8sIGl0IHdpbGwgcmVtYWluCisgICAgaW4gdGhlIGNvdW50ZXIgdW50aWwgdGhlIGVudHJ5IGlzIGRlbGV0ZWQgb3IgdGhlIGNvdW50ZXIgaXMgY2xlYXJlZDoKKworICAgID4+PiBjID0gQ291bnRlcignYWFhYmJjJykKKyAgICA+Pj4gY1snYiddIC09IDIgICAgICAgICAgICAgICAgICAgICAjIHJlZHVjZSB0aGUgY291bnQgb2YgJ2InIGJ5IHR3bworICAgID4+PiBjLm1vc3RfY29tbW9uKCkgICAgICAgICAgICAgICAgICMgJ2InIGlzIHN0aWxsIGluLCBidXQgaXRzIGNvdW50IGlzIHplcm8KKyAgICBbKCdhJywgMyksICgnYycsIDEpLCAoJ2InLCAwKV0KKworICAgICcnJworICAgICMgUmVmZXJlbmNlczoKKyAgICAjICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NdWx0aXNldAorICAgICMgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc21hbGx0YWxrL21hbnVhbC1iYXNlL2h0bWxfbm9kZS9CYWcuaHRtbAorICAgICMgICBodHRwOi8vd3d3LmRlbW8ycy5jb20vVHV0b3JpYWwvQ3BwLzAzODBfX3NldC1tdWx0aXNldC9DYXRhbG9nMDM4MF9fc2V0LW11bHRpc2V0Lmh0bQorICAgICMgICBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNTkxNzQvCisgICAgIyAgIEtudXRoLCBUQU9DUCBWb2wuIElJIHNlY3Rpb24gNC42LjMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyYWJsZT1Ob25lLCAqKmt3ZHMpOgorICAgICAgICAnJydDcmVhdGUgYSBuZXcsIGVtcHR5IENvdW50ZXIgb2JqZWN0LiAgQW5kIGlmIGdpdmVuLCBjb3VudCBlbGVtZW50cworICAgICAgICBmcm9tIGFuIGlucHV0IGl0ZXJhYmxlLiAgT3IsIGluaXRpYWxpemUgdGhlIGNvdW50IGZyb20gYW5vdGhlciBtYXBwaW5nCisgICAgICAgIG9mIGVsZW1lbnRzIHRvIHRoZWlyIGNvdW50cy4KKworICAgICAgICA+Pj4gYyA9IENvdW50ZXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBuZXcsIGVtcHR5IGNvdW50ZXIKKyAgICAgICAgPj4+IGMgPSBDb3VudGVyKCdnYWxsYWhhZCcpICAgICAgICAgICAgICAgICAjIGEgbmV3IGNvdW50ZXIgZnJvbSBhbiBpdGVyYWJsZQorICAgICAgICA+Pj4gYyA9IENvdW50ZXIoeydhJzogNCwgJ2InOiAyfSkgICAgICAgICAgICMgYSBuZXcgY291bnRlciBmcm9tIGEgbWFwcGluZworICAgICAgICA+Pj4gYyA9IENvdW50ZXIoYT00LCBiPTIpICAgICAgICAgICAgICAgICAgICMgYSBuZXcgY291bnRlciBmcm9tIGtleXdvcmQgYXJncworCisgICAgICAgICcnJworICAgICAgICBzdXBlcihDb3VudGVyLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYudXBkYXRlKGl0ZXJhYmxlLCAqKmt3ZHMpCisKKyAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKKyAgICAgICAgJ1RoZSBjb3VudCBvZiBlbGVtZW50cyBub3QgaW4gdGhlIENvdW50ZXIgaXMgemVyby4nCisgICAgICAgICMgTmVlZGVkIHNvIHRoYXQgc2VsZlttaXNzaW5nX2l0ZW1dIGRvZXMgbm90IHJhaXNlIEtleUVycm9yCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgbW9zdF9jb21tb24oc2VsZiwgbj1Ob25lKToKKyAgICAgICAgJycnTGlzdCB0aGUgbiBtb3N0IGNvbW1vbiBlbGVtZW50cyBhbmQgdGhlaXIgY291bnRzIGZyb20gdGhlIG1vc3QKKyAgICAgICAgY29tbW9uIHRvIHRoZSBsZWFzdC4gIElmIG4gaXMgTm9uZSwgdGhlbiBsaXN0IGFsbCBlbGVtZW50IGNvdW50cy4KKworICAgICAgICA+Pj4gQ291bnRlcignYWJjZGVhYmNkYWJjYWJhJykubW9zdF9jb21tb24oMykKKyAgICAgICAgWygnYScsIDUpLCAoJ2InLCA0KSwgKCdjJywgMyldCisKKyAgICAgICAgJycnCisgICAgICAgICMgRW11bGF0ZSBCYWcuc29ydGVkQnlDb3VudCBmcm9tIFNtYWxsdGFsaworICAgICAgICBpZiBuIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc29ydGVkKHNlbGYuaXRlcml0ZW1zKCksIGtleT1faXRlbWdldHRlcigxKSwgcmV2ZXJzZT1UcnVlKQorICAgICAgICByZXR1cm4gX2hlYXBxLm5sYXJnZXN0KG4sIHNlbGYuaXRlcml0ZW1zKCksIGtleT1faXRlbWdldHRlcigxKSkKKworICAgIGRlZiBlbGVtZW50cyhzZWxmKToKKyAgICAgICAgJycnSXRlcmF0b3Igb3ZlciBlbGVtZW50cyByZXBlYXRpbmcgZWFjaCBhcyBtYW55IHRpbWVzIGFzIGl0cyBjb3VudC4KKworICAgICAgICA+Pj4gYyA9IENvdW50ZXIoJ0FCQ0FCQycpCisgICAgICAgID4+PiBzb3J0ZWQoYy5lbGVtZW50cygpKQorICAgICAgICBbJ0EnLCAnQScsICdCJywgJ0InLCAnQycsICdDJ10KKworICAgICAgICAjIEtudXRoJ3MgZXhhbXBsZSBmb3IgcHJpbWUgZmFjdG9ycyBvZiAxODM2OiAgMioqMiAqIDMqKjMgKiAxNyoqMQorICAgICAgICA+Pj4gcHJpbWVfZmFjdG9ycyA9IENvdW50ZXIoezI6IDIsIDM6IDMsIDE3OiAxfSkKKyAgICAgICAgPj4+IHByb2R1Y3QgPSAxCisgICAgICAgID4+PiBmb3IgZmFjdG9yIGluIHByaW1lX2ZhY3RvcnMuZWxlbWVudHMoKTogICAgICMgbG9vcCBvdmVyIGZhY3RvcnMKKyAgICAgICAgLi4uICAgICBwcm9kdWN0ICo9IGZhY3RvciAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgbXVsdGlwbHkgdGhlbQorICAgICAgICA+Pj4gcHJvZHVjdAorICAgICAgICAxODM2CisKKyAgICAgICAgTm90ZSwgaWYgYW4gZWxlbWVudCdzIGNvdW50IGhhcyBiZWVuIHNldCB0byB6ZXJvIG9yIGlzIGEgbmVnYXRpdmUKKyAgICAgICAgbnVtYmVyLCBlbGVtZW50cygpIHdpbGwgaWdub3JlIGl0LgorCisgICAgICAgICcnJworICAgICAgICAjIEVtdWxhdGUgQmFnLmRvIGZyb20gU21hbGx0YWxrIGFuZCBNdWx0aXNldC5iZWdpbiBmcm9tIEMrKy4KKyAgICAgICAgcmV0dXJuIF9jaGFpbi5mcm9tX2l0ZXJhYmxlKF9zdGFybWFwKF9yZXBlYXQsIHNlbGYuaXRlcml0ZW1zKCkpKQorCisgICAgIyBPdmVycmlkZSBkaWN0IG1ldGhvZHMgd2hlcmUgbmVjZXNzYXJ5CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbWtleXMoY2xzLCBpdGVyYWJsZSwgdj1Ob25lKToKKyAgICAgICAgIyBUaGVyZSBpcyBubyBlcXVpdmFsZW50IG1ldGhvZCBmb3IgY291bnRlcnMgYmVjYXVzZSBzZXR0aW5nIHY9MQorICAgICAgICAjIG1lYW5zIHRoYXQgbm8gZWxlbWVudCBjYW4gaGF2ZSBhIGNvdW50IGdyZWF0ZXIgdGhhbiBvbmUuCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCisgICAgICAgICAgICAnQ291bnRlci5mcm9ta2V5cygpIGlzIHVuZGVmaW5lZC4gIFVzZSBDb3VudGVyKGl0ZXJhYmxlKSBpbnN0ZWFkLicpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIGl0ZXJhYmxlPU5vbmUsICoqa3dkcyk6CisgICAgICAgICcnJ0xpa2UgZGljdC51cGRhdGUoKSBidXQgYWRkIGNvdW50cyBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgorCisgICAgICAgIFNvdXJjZSBjYW4gYmUgYW4gaXRlcmFibGUsIGEgZGljdGlvbmFyeSwgb3IgYW5vdGhlciBDb3VudGVyIGluc3RhbmNlLgorCisgICAgICAgID4+PiBjID0gQ291bnRlcignd2hpY2gnKQorICAgICAgICA+Pj4gYy51cGRhdGUoJ3dpdGNoJykgICAgICAgICAgICMgYWRkIGVsZW1lbnRzIGZyb20gYW5vdGhlciBpdGVyYWJsZQorICAgICAgICA+Pj4gZCA9IENvdW50ZXIoJ3dhdGNoJykKKyAgICAgICAgPj4+IGMudXBkYXRlKGQpICAgICAgICAgICAgICAgICAjIGFkZCBlbGVtZW50cyBmcm9tIGFub3RoZXIgY291bnRlcgorICAgICAgICA+Pj4gY1snaCddICAgICAgICAgICAgICAgICAgICAgICMgZm91ciAnaCcgaW4gd2hpY2gsIHdpdGNoLCBhbmQgd2F0Y2gKKyAgICAgICAgNAorCisgICAgICAgICcnJworICAgICAgICAjIFRoZSByZWd1bGFyIGRpY3QudXBkYXRlKCkgb3BlcmF0aW9uIG1ha2VzIG5vIHNlbnNlIGhlcmUgYmVjYXVzZSB0aGUKKyAgICAgICAgIyByZXBsYWNlIGJlaGF2aW9yIHJlc3VsdHMgaW4gdGhlIHNvbWUgb2Ygb3JpZ2luYWwgdW50b3VjaGVkIGNvdW50cworICAgICAgICAjIGJlaW5nIG1peGVkLWluIHdpdGggYWxsIG9mIHRoZSBvdGhlciBjb3VudHMgZm9yIGEgbWlzbWFzaCB0aGF0CisgICAgICAgICMgZG9lc24ndCBoYXZlIGEgc3RyYWlnaHQtZm9yd2FyZCBpbnRlcnByZXRhdGlvbiBpbiBtb3N0IGNvdW50aW5nCisgICAgICAgICMgY29udGV4dHMuICBJbnN0ZWFkLCB3ZSBpbXBsZW1lbnQgc3RyYWlnaHQtYWRkaXRpb24uICBCb3RoIHRoZSBpbnB1dHMKKyAgICAgICAgIyBhbmQgb3V0cHV0cyBhcmUgYWxsb3dlZCB0byBjb250YWluIHplcm8gYW5kIG5lZ2F0aXZlIGNvdW50cy4KKworICAgICAgICBpZiBpdGVyYWJsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlcmFibGUsIE1hcHBpbmcpOgorICAgICAgICAgICAgICAgIGlmIHNlbGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGZfZ2V0ID0gc2VsZi5nZXQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGVsZW0sIGNvdW50IGluIGl0ZXJhYmxlLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZltlbGVtXSA9IHNlbGZfZ2V0KGVsZW0sIDApICsgY291bnQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdXBlcihDb3VudGVyLCBzZWxmKS51cGRhdGUoaXRlcmFibGUpICMgZmFzdCBwYXRoIHdoZW4gY291bnRlciBpcyBlbXB0eQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmX2dldCA9IHNlbGYuZ2V0CisgICAgICAgICAgICAgICAgZm9yIGVsZW0gaW4gaXRlcmFibGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGZbZWxlbV0gPSBzZWxmX2dldChlbGVtLCAwKSArIDEKKyAgICAgICAgaWYga3dkczoKKyAgICAgICAgICAgIHNlbGYudXBkYXRlKGt3ZHMpCisKKyAgICBkZWYgc3VidHJhY3Qoc2VsZiwgaXRlcmFibGU9Tm9uZSwgKiprd2RzKToKKyAgICAgICAgJycnTGlrZSBkaWN0LnVwZGF0ZSgpIGJ1dCBzdWJ0cmFjdHMgY291bnRzIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCisgICAgICAgIENvdW50cyBjYW4gYmUgcmVkdWNlZCBiZWxvdyB6ZXJvLiAgQm90aCB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFyZQorICAgICAgICBhbGxvd2VkIHRvIGNvbnRhaW4gemVybyBhbmQgbmVnYXRpdmUgY291bnRzLgorCisgICAgICAgIFNvdXJjZSBjYW4gYmUgYW4gaXRlcmFibGUsIGEgZGljdGlvbmFyeSwgb3IgYW5vdGhlciBDb3VudGVyIGluc3RhbmNlLgorCisgICAgICAgID4+PiBjID0gQ291bnRlcignd2hpY2gnKQorICAgICAgICA+Pj4gYy5zdWJ0cmFjdCgnd2l0Y2gnKSAgICAgICAgICAgICAjIHN1YnRyYWN0IGVsZW1lbnRzIGZyb20gYW5vdGhlciBpdGVyYWJsZQorICAgICAgICA+Pj4gYy5zdWJ0cmFjdChDb3VudGVyKCd3YXRjaCcpKSAgICAjIHN1YnRyYWN0IGVsZW1lbnRzIGZyb20gYW5vdGhlciBjb3VudGVyCisgICAgICAgID4+PiBjWydoJ10gICAgICAgICAgICAgICAgICAgICAgICAgICMgMiBpbiB3aGljaCwgbWludXMgMSBpbiB3aXRjaCwgbWludXMgMSBpbiB3YXRjaAorICAgICAgICAwCisgICAgICAgID4+PiBjWyd3J10gICAgICAgICAgICAgICAgICAgICAgICAgICMgMSBpbiB3aGljaCwgbWludXMgMSBpbiB3aXRjaCwgbWludXMgMSBpbiB3YXRjaAorICAgICAgICAtMQorCisgICAgICAgICcnJworICAgICAgICBpZiBpdGVyYWJsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGZfZ2V0ID0gc2VsZi5nZXQKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlcmFibGUsIE1hcHBpbmcpOgorICAgICAgICAgICAgICAgIGZvciBlbGVtLCBjb3VudCBpbiBpdGVyYWJsZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmW2VsZW1dID0gc2VsZl9nZXQoZWxlbSwgMCkgLSBjb3VudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgZWxlbSBpbiBpdGVyYWJsZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZltlbGVtXSA9IHNlbGZfZ2V0KGVsZW0sIDApIC0gMQorICAgICAgICBpZiBrd2RzOgorICAgICAgICAgICAgc2VsZi5zdWJ0cmFjdChrd2RzKQorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgICdMaWtlIGRpY3QuY29weSgpIGJ1dCByZXR1cm5zIGEgQ291bnRlciBpbnN0YW5jZSBpbnN0ZWFkIG9mIGEgZGljdC4nCisgICAgICAgIHJldHVybiBDb3VudGVyKHNlbGYpCisKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCAoZGljdChzZWxmKSwpCisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgZWxlbSk6CisgICAgICAgICdMaWtlIGRpY3QuX19kZWxpdGVtX18oKSBidXQgZG9lcyBub3QgcmFpc2UgS2V5RXJyb3IgZm9yIG1pc3NpbmcgdmFsdWVzLicKKyAgICAgICAgaWYgZWxlbSBpbiBzZWxmOgorICAgICAgICAgICAgc3VwZXIoQ291bnRlciwgc2VsZikuX19kZWxpdGVtX18oZWxlbSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICByZXR1cm4gJyVzKCknICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgaXRlbXMgPSAnLCAnLmpvaW4obWFwKCclcjogJXInLl9fbW9kX18sIHNlbGYubW9zdF9jb21tb24oKSkpCisgICAgICAgIHJldHVybiAnJXMoeyVzfSknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBpdGVtcykKKworICAgICMgTXVsdGlzZXQtc3R5bGUgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgZGlzY3Vzc2VkIGluOgorICAgICMgICAgICAgS251dGggVEFPQ1AgVm9sdW1lIElJIHNlY3Rpb24gNC42LjMgZXhlcmNpc2UgMTkKKyAgICAjICAgICAgIGFuZCBhdCBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL011bHRpc2V0CisgICAgIworICAgICMgT3V0cHV0cyBndWFyYW50ZWVkIHRvIG9ubHkgaW5jbHVkZSBwb3NpdGl2ZSBjb3VudHMuCisgICAgIworICAgICMgVG8gc3RyaXAgbmVnYXRpdmUgYW5kIHplcm8gY291bnRzLCBhZGQtaW4gYW4gZW1wdHkgY291bnRlcjoKKyAgICAjICAgICAgIGMgKz0gQ291bnRlcigpCisKKyAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICcnJ0FkZCBjb3VudHMgZnJvbSB0d28gY291bnRlcnMuCisKKyAgICAgICAgPj4+IENvdW50ZXIoJ2FiYmInKSArIENvdW50ZXIoJ2JjYycpCisgICAgICAgIENvdW50ZXIoeydiJzogNCwgJ2MnOiAyLCAnYSc6IDF9KQorCisgICAgICAgICcnJworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgQ291bnRlcik6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmVzdWx0ID0gQ291bnRlcigpCisgICAgICAgIGZvciBlbGVtIGluIHNldChzZWxmKSB8IHNldChvdGhlcik6CisgICAgICAgICAgICBuZXdjb3VudCA9IHNlbGZbZWxlbV0gKyBvdGhlcltlbGVtXQorICAgICAgICAgICAgaWYgbmV3Y291bnQgPiAwOgorICAgICAgICAgICAgICAgIHJlc3VsdFtlbGVtXSA9IG5ld2NvdW50CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgJycnIFN1YnRyYWN0IGNvdW50LCBidXQga2VlcCBvbmx5IHJlc3VsdHMgd2l0aCBwb3NpdGl2ZSBjb3VudHMuCisKKyAgICAgICAgPj4+IENvdW50ZXIoJ2FiYmJjJykgLSBDb3VudGVyKCdiY2NkJykKKyAgICAgICAgQ291bnRlcih7J2InOiAyLCAnYSc6IDF9KQorCisgICAgICAgICcnJworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgQ291bnRlcik6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmVzdWx0ID0gQ291bnRlcigpCisgICAgICAgIGZvciBlbGVtIGluIHNldChzZWxmKSB8IHNldChvdGhlcik6CisgICAgICAgICAgICBuZXdjb3VudCA9IHNlbGZbZWxlbV0gLSBvdGhlcltlbGVtXQorICAgICAgICAgICAgaWYgbmV3Y291bnQgPiAwOgorICAgICAgICAgICAgICAgIHJlc3VsdFtlbGVtXSA9IG5ld2NvdW50CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfX29yX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAnJydVbmlvbiBpcyB0aGUgbWF4aW11bSBvZiB2YWx1ZSBpbiBlaXRoZXIgb2YgdGhlIGlucHV0IGNvdW50ZXJzLgorCisgICAgICAgID4+PiBDb3VudGVyKCdhYmJiJykgfCBDb3VudGVyKCdiY2MnKQorICAgICAgICBDb3VudGVyKHsnYic6IDMsICdjJzogMiwgJ2EnOiAxfSkKKworICAgICAgICAnJycKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIENvdW50ZXIpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJlc3VsdCA9IENvdW50ZXIoKQorICAgICAgICBmb3IgZWxlbSBpbiBzZXQoc2VsZikgfCBzZXQob3RoZXIpOgorICAgICAgICAgICAgcCwgcSA9IHNlbGZbZWxlbV0sIG90aGVyW2VsZW1dCisgICAgICAgICAgICBuZXdjb3VudCA9IHEgaWYgcCA8IHEgZWxzZSBwCisgICAgICAgICAgICBpZiBuZXdjb3VudCA+IDA6CisgICAgICAgICAgICAgICAgcmVzdWx0W2VsZW1dID0gbmV3Y291bnQKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9fYW5kX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAnJycgSW50ZXJzZWN0aW9uIGlzIHRoZSBtaW5pbXVtIG9mIGNvcnJlc3BvbmRpbmcgY291bnRzLgorCisgICAgICAgID4+PiBDb3VudGVyKCdhYmJiJykgJiBDb3VudGVyKCdiY2MnKQorICAgICAgICBDb3VudGVyKHsnYic6IDF9KQorCisgICAgICAgICcnJworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgQ291bnRlcik6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmVzdWx0ID0gQ291bnRlcigpCisgICAgICAgIGlmIGxlbihzZWxmKSA8IGxlbihvdGhlcik6CisgICAgICAgICAgICBzZWxmLCBvdGhlciA9IG90aGVyLCBzZWxmCisgICAgICAgIGZvciBlbGVtIGluIF9pZmlsdGVyKHNlbGYuX19jb250YWluc19fLCBvdGhlcik6CisgICAgICAgICAgICBwLCBxID0gc2VsZltlbGVtXSwgb3RoZXJbZWxlbV0KKyAgICAgICAgICAgIG5ld2NvdW50ID0gcCBpZiBwIDwgcSBlbHNlIHEKKyAgICAgICAgICAgIGlmIG5ld2NvdW50ID4gMDoKKyAgICAgICAgICAgICAgICByZXN1bHRbZWxlbV0gPSBuZXdjb3VudAorICAgICAgICByZXR1cm4gcmVzdWx0CiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi9jb2xvcnN5cy5weSBiL0xpYi9jb2xvcnN5cy5weQppbmRleCA4NTE0MTdiLi5hNmMwY2Y2IDEwMDY0NAotLS0gYS9MaWIvY29sb3JzeXMucHkKKysrIGIvTGliL2NvbG9yc3lzLnB5CkBAIC00NCwxMiArNDQsMTggQEAKICAgICByID0geSArIDAuOTQ4MjYyKmkgKyAwLjYyNDAxMypxCiAgICAgZyA9IHkgLSAwLjI3NjA2NippIC0gMC42Mzk4MTAqcQogICAgIGIgPSB5IC0gMS4xMDU0NTAqaSArIDEuNzI5ODYwKnEKLSAgICBpZiByIDwgMC4wOiByID0gMC4wCi0gICAgaWYgZyA8IDAuMDogZyA9IDAuMAotICAgIGlmIGIgPCAwLjA6IGIgPSAwLjAKLSAgICBpZiByID4gMS4wOiByID0gMS4wCi0gICAgaWYgZyA+IDEuMDogZyA9IDEuMAotICAgIGlmIGIgPiAxLjA6IGIgPSAxLjAKKyAgICBpZiByIDwgMC4wOgorICAgICAgICByID0gMC4wCisgICAgaWYgZyA8IDAuMDoKKyAgICAgICAgZyA9IDAuMAorICAgIGlmIGIgPCAwLjA6CisgICAgICAgIGIgPSAwLjAKKyAgICBpZiByID4gMS4wOgorICAgICAgICByID0gMS4wCisgICAgaWYgZyA+IDEuMDoKKyAgICAgICAgZyA9IDEuMAorICAgIGlmIGIgPiAxLjA6CisgICAgICAgIGIgPSAxLjAKICAgICByZXR1cm4gKHIsIGcsIGIpCiAKIApAQCAtNjMsMzAgKzY5LDQyIEBACiAgICAgbWluYyA9IG1pbihyLCBnLCBiKQogICAgICMgWFhYIENhbiBvcHRpbWl6ZSAobWF4YyttaW5jKSBhbmQgKG1heGMtbWluYykKICAgICBsID0gKG1pbmMrbWF4YykvMi4wCi0gICAgaWYgbWluYyA9PSBtYXhjOiByZXR1cm4gMC4wLCBsLCAwLjAKLSAgICBpZiBsIDw9IDAuNTogcyA9IChtYXhjLW1pbmMpIC8gKG1heGMrbWluYykKLSAgICBlbHNlOiBzID0gKG1heGMtbWluYykgLyAoMi4wLW1heGMtbWluYykKKyAgICBpZiBtaW5jID09IG1heGM6CisgICAgICAgIHJldHVybiAwLjAsIGwsIDAuMAorICAgIGlmIGwgPD0gMC41OgorICAgICAgICBzID0gKG1heGMtbWluYykgLyAobWF4YyttaW5jKQorICAgIGVsc2U6CisgICAgICAgIHMgPSAobWF4Yy1taW5jKSAvICgyLjAtbWF4Yy1taW5jKQogICAgIHJjID0gKG1heGMtcikgLyAobWF4Yy1taW5jKQogICAgIGdjID0gKG1heGMtZykgLyAobWF4Yy1taW5jKQogICAgIGJjID0gKG1heGMtYikgLyAobWF4Yy1taW5jKQotICAgIGlmIHIgPT0gbWF4YzogaCA9IGJjLWdjCi0gICAgZWxpZiBnID09IG1heGM6IGggPSAyLjArcmMtYmMKLSAgICBlbHNlOiBoID0gNC4wK2djLXJjCisgICAgaWYgciA9PSBtYXhjOgorICAgICAgICBoID0gYmMtZ2MKKyAgICBlbGlmIGcgPT0gbWF4YzoKKyAgICAgICAgaCA9IDIuMCtyYy1iYworICAgIGVsc2U6CisgICAgICAgIGggPSA0LjArZ2MtcmMKICAgICBoID0gKGgvNi4wKSAlIDEuMAogICAgIHJldHVybiBoLCBsLCBzCiAKIGRlZiBobHNfdG9fcmdiKGgsIGwsIHMpOgotICAgIGlmIHMgPT0gMC4wOiByZXR1cm4gbCwgbCwgbAotICAgIGlmIGwgPD0gMC41OiBtMiA9IGwgKiAoMS4wK3MpCi0gICAgZWxzZTogbTIgPSBsK3MtKGwqcykKKyAgICBpZiBzID09IDAuMDoKKyAgICAgICAgcmV0dXJuIGwsIGwsIGwKKyAgICBpZiBsIDw9IDAuNToKKyAgICAgICAgbTIgPSBsICogKDEuMCtzKQorICAgIGVsc2U6CisgICAgICAgIG0yID0gbCtzLShsKnMpCiAgICAgbTEgPSAyLjAqbCAtIG0yCiAgICAgcmV0dXJuIChfdihtMSwgbTIsIGgrT05FX1RISVJEKSwgX3YobTEsIG0yLCBoKSwgX3YobTEsIG0yLCBoLU9ORV9USElSRCkpCiAKIGRlZiBfdihtMSwgbTIsIGh1ZSk6CiAgICAgaHVlID0gaHVlICUgMS4wCi0gICAgaWYgaHVlIDwgT05FX1NJWFRIOiByZXR1cm4gbTEgKyAobTItbTEpKmh1ZSo2LjAKLSAgICBpZiBodWUgPCAwLjU6IHJldHVybiBtMgotICAgIGlmIGh1ZSA8IFRXT19USElSRDogcmV0dXJuIG0xICsgKG0yLW0xKSooVFdPX1RISVJELWh1ZSkqNi4wCisgICAgaWYgaHVlIDwgT05FX1NJWFRIOgorICAgICAgICByZXR1cm4gbTEgKyAobTItbTEpKmh1ZSo2LjAKKyAgICBpZiBodWUgPCAwLjU6CisgICAgICAgIHJldHVybiBtMgorICAgIGlmIGh1ZSA8IFRXT19USElSRDoKKyAgICAgICAgcmV0dXJuIG0xICsgKG0yLW0xKSooVFdPX1RISVJELWh1ZSkqNi4wCiAgICAgcmV0dXJuIG0xCiAKIApAQCAtOTksMjkgKzExNyw0MCBAQAogICAgIG1heGMgPSBtYXgociwgZywgYikKICAgICBtaW5jID0gbWluKHIsIGcsIGIpCiAgICAgdiA9IG1heGMKLSAgICBpZiBtaW5jID09IG1heGM6IHJldHVybiAwLjAsIDAuMCwgdgorICAgIGlmIG1pbmMgPT0gbWF4YzoKKyAgICAgICAgcmV0dXJuIDAuMCwgMC4wLCB2CiAgICAgcyA9IChtYXhjLW1pbmMpIC8gbWF4YwogICAgIHJjID0gKG1heGMtcikgLyAobWF4Yy1taW5jKQogICAgIGdjID0gKG1heGMtZykgLyAobWF4Yy1taW5jKQogICAgIGJjID0gKG1heGMtYikgLyAobWF4Yy1taW5jKQotICAgIGlmIHIgPT0gbWF4YzogaCA9IGJjLWdjCi0gICAgZWxpZiBnID09IG1heGM6IGggPSAyLjArcmMtYmMKLSAgICBlbHNlOiBoID0gNC4wK2djLXJjCisgICAgaWYgciA9PSBtYXhjOgorICAgICAgICBoID0gYmMtZ2MKKyAgICBlbGlmIGcgPT0gbWF4YzoKKyAgICAgICAgaCA9IDIuMCtyYy1iYworICAgIGVsc2U6CisgICAgICAgIGggPSA0LjArZ2MtcmMKICAgICBoID0gKGgvNi4wKSAlIDEuMAogICAgIHJldHVybiBoLCBzLCB2CiAKIGRlZiBoc3ZfdG9fcmdiKGgsIHMsIHYpOgotICAgIGlmIHMgPT0gMC4wOiByZXR1cm4gdiwgdiwgdgorICAgIGlmIHMgPT0gMC4wOgorICAgICAgICByZXR1cm4gdiwgdiwgdgogICAgIGkgPSBpbnQoaCo2LjApICMgWFhYIGFzc3VtZSBpbnQoKSB0cnVuY2F0ZXMhCiAgICAgZiA9IChoKjYuMCkgLSBpCiAgICAgcCA9IHYqKDEuMCAtIHMpCiAgICAgcSA9IHYqKDEuMCAtIHMqZikKICAgICB0ID0gdiooMS4wIC0gcyooMS4wLWYpKQogICAgIGkgPSBpJTYKLSAgICBpZiBpID09IDA6IHJldHVybiB2LCB0LCBwCi0gICAgaWYgaSA9PSAxOiByZXR1cm4gcSwgdiwgcAotICAgIGlmIGkgPT0gMjogcmV0dXJuIHAsIHYsIHQKLSAgICBpZiBpID09IDM6IHJldHVybiBwLCBxLCB2Ci0gICAgaWYgaSA9PSA0OiByZXR1cm4gdCwgcCwgdgotICAgIGlmIGkgPT0gNTogcmV0dXJuIHYsIHAsIHEKKyAgICBpZiBpID09IDA6CisgICAgICAgIHJldHVybiB2LCB0LCBwCisgICAgaWYgaSA9PSAxOgorICAgICAgICByZXR1cm4gcSwgdiwgcAorICAgIGlmIGkgPT0gMjoKKyAgICAgICAgcmV0dXJuIHAsIHYsIHQKKyAgICBpZiBpID09IDM6CisgICAgICAgIHJldHVybiBwLCBxLCB2CisgICAgaWYgaSA9PSA0OgorICAgICAgICByZXR1cm4gdCwgcCwgdgorICAgIGlmIGkgPT0gNToKKyAgICAgICAgcmV0dXJuIHYsIHAsIHEKICAgICAjIENhbm5vdCBnZXQgaGVyZQpkaWZmIC0tZ2l0IGEvTGliL2NvbW1hbmRzLnB5IGIvTGliL2NvbW1hbmRzLnB5CmluZGV4IDg1OGIzZDYuLmQwZThkZDUgMTAwNjQ0Ci0tLSBhL0xpYi9jb21tYW5kcy5weQorKysgYi9MaWIvY29tbWFuZHMucHkKQEAgLTE4LDYgKzE4LDEwIEBACiAKICBbTm90ZTogIGl0IHdvdWxkIGJlIG5pY2UgdG8gYWRkIGZ1bmN0aW9ucyB0byBpbnRlcnByZXQgdGhlIGV4aXQgc3RhdHVzLl0KICIiIgorZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybnB5M2sKK3dhcm5weTNrKCJ0aGUgY29tbWFuZHMgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gUHl0aG9uIDMuMDsgIgorICAgICAgICAgInVzZSB0aGUgc3VicHJvY2VzcyBtb2R1bGUgaW5zdGVhZCIsIHN0YWNrbGV2ZWw9MikKK2RlbCB3YXJucHkzawogCiBfX2FsbF9fID0gWyJnZXRzdGF0dXNvdXRwdXQiLCJnZXRvdXRwdXQiLCJnZXRzdGF0dXMiXQogCkBAIC02Myw4ICs2Nyw2IEBACiAjIE1ha2UgY29tbWFuZCBhcmd1bWVudCBmcm9tIGRpcmVjdG9yeSBhbmQgcGF0aG5hbWUgKHByZWZpeCBzcGFjZSwgYWRkIHF1b3RlcykuCiAjCiBkZWYgbWsyYXJnKGhlYWQsIHgpOgotICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrCi0gICAgd2FybnB5M2soIkluIDMueCwgbWsyYXJnIGhhcyBiZWVuIHJlbW92ZWQuIikKICAgICBpbXBvcnQgb3MKICAgICByZXR1cm4gbWthcmcob3MucGF0aC5qb2luKGhlYWQsIHgpKQogCkBAIC03Nyw4ICs3OSw2IEBACiAjIHdpdGggYmFja3NsYXNoLgogIwogZGVmIG1rYXJnKHgpOgotICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrCi0gICAgd2FybnB5M2soImluIDMueCwgbWthcmcgaGFzIGJlZW4gcmVtb3ZlZC4iKQogICAgIGlmICdcJycgbm90IGluIHg6CiAgICAgICAgIHJldHVybiAnIFwnJyArIHggKyAnXCcnCiAgICAgcyA9ICcgIicKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlYWxsLnB5IGIvTGliL2NvbXBpbGVhbGwucHkKaW5kZXggYTVjODJhMy4uOTEwZjMwNSAxMDA2NDQKLS0tIGEvTGliL2NvbXBpbGVhbGwucHkKKysrIGIvTGliL2NvbXBpbGVhbGwucHkKQEAgLTksMTQgKzksMTQgQEAKIHBhY2thZ2VzIC0tIGZvciBub3csIHlvdSdsbCBoYXZlIHRvIGRlYWwgd2l0aCBwYWNrYWdlcyBzZXBhcmF0ZWx5LikKIAogU2VlIG1vZHVsZSBweV9jb21waWxlIGZvciBkZXRhaWxzIG9mIHRoZSBhY3R1YWwgYnl0ZS1jb21waWxhdGlvbi4KLQogIiIiCi0KIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHB5X2NvbXBpbGUKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBpbXAKIAotX19hbGxfXyA9IFsiY29tcGlsZV9kaXIiLCJjb21waWxlX3BhdGgiXQorX19hbGxfXyA9IFsiY29tcGlsZV9kaXIiLCJjb21waWxlX2ZpbGUiLCJjb21waWxlX3BhdGgiXQogCiBkZWYgY29tcGlsZV9kaXIoZGlyLCBtYXhsZXZlbHM9MTAsIGRkaXI9Tm9uZSwKICAgICAgICAgICAgICAgICBmb3JjZT0wLCByeD1Ob25lLCBxdWlldD0wKToKQEAgLTMwLDcgKzMwLDYgQEAKICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lIHRoYXQgd2lsbCBzaG93IHVwIGluIGVycm9yIG1lc3NhZ2VzKQogICAgIGZvcmNlOiAgICAgaWYgMSwgZm9yY2UgY29tcGlsYXRpb24sIGV2ZW4gaWYgdGltZXN0YW1wcyBhcmUgdXAtdG8tZGF0ZQogICAgIHF1aWV0OiAgICAgaWYgMSwgYmUgcXVpZXQgZHVyaW5nIGNvbXBpbGF0aW9uCi0KICAgICAiIiIKICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgIHByaW50ICdMaXN0aW5nJywgZGlyLCAnLi4uJwpAQCAtNDcsNDMgKzQ2LDcwIEBACiAgICAgICAgICAgICBkZmlsZSA9IG9zLnBhdGguam9pbihkZGlyLCBuYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZGZpbGUgPSBOb25lCi0gICAgICAgIGlmIHJ4IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgbW8gPSByeC5zZWFyY2goZnVsbG5hbWUpCi0gICAgICAgICAgICBpZiBtbzoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsbmFtZSk6Ci0gICAgICAgICAgICBoZWFkLCB0YWlsID0gbmFtZVs6LTNdLCBuYW1lWy0zOl0KLSAgICAgICAgICAgIGlmIHRhaWwgPT0gJy5weSc6Ci0gICAgICAgICAgICAgICAgY2ZpbGUgPSBmdWxsbmFtZSArIChfX2RlYnVnX18gYW5kICdjJyBvciAnbycpCi0gICAgICAgICAgICAgICAgZnRpbWUgPSBvcy5zdGF0KGZ1bGxuYW1lKS5zdF9tdGltZQotICAgICAgICAgICAgICAgIHRyeTogY3RpbWUgPSBvcy5zdGF0KGNmaWxlKS5zdF9tdGltZQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjogY3RpbWUgPSAwCi0gICAgICAgICAgICAgICAgaWYgKGN0aW1lID4gZnRpbWUpIGFuZCBub3QgZm9yY2U6IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgbm90IHF1aWV0OgotICAgICAgICAgICAgICAgICAgICBwcmludCAnQ29tcGlsaW5nJywgZnVsbG5hbWUsICcuLi4nCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBvayA9IHB5X2NvbXBpbGUuY29tcGlsZShmdWxsbmFtZSwgTm9uZSwgZGZpbGUsIFRydWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAotICAgICAgICAgICAgICAgIGV4Y2VwdCBweV9jb21waWxlLlB5Q29tcGlsZUVycm9yLGVycjoKLSAgICAgICAgICAgICAgICAgICAgaWYgcXVpZXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnQ29tcGlsaW5nJywgZnVsbG5hbWUsICcuLi4nCi0gICAgICAgICAgICAgICAgICAgIHByaW50IGVyci5tc2cKLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlNvcnJ5IiwgZQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9rID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihmdWxsbmFtZSk6CisgICAgICAgICAgICBpZiBub3QgY29tcGlsZV9maWxlKGZ1bGxuYW1lLCBkZGlyLCBmb3JjZSwgcngsIHF1aWV0KToKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAogICAgICAgICBlbGlmIG1heGxldmVscyA+IDAgYW5kIFwKICAgICAgICAgICAgICBuYW1lICE9IG9zLmN1cmRpciBhbmQgbmFtZSAhPSBvcy5wYXJkaXIgYW5kIFwKICAgICAgICAgICAgICBvcy5wYXRoLmlzZGlyKGZ1bGxuYW1lKSBhbmQgXAogICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmlzbGluayhmdWxsbmFtZSk6Ci0gICAgICAgICAgICBpZiBub3QgY29tcGlsZV9kaXIoZnVsbG5hbWUsIG1heGxldmVscyAtIDEsIGRmaWxlLCBmb3JjZSwgcngsIHF1aWV0KToKKyAgICAgICAgICAgIGlmIG5vdCBjb21waWxlX2RpcihmdWxsbmFtZSwgbWF4bGV2ZWxzIC0gMSwgZGZpbGUsIGZvcmNlLCByeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWlldCk6CiAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKICAgICByZXR1cm4gc3VjY2VzcwogCitkZWYgY29tcGlsZV9maWxlKGZ1bGxuYW1lLCBkZGlyPU5vbmUsIGZvcmNlPTAsIHJ4PU5vbmUsIHF1aWV0PTApOgorICAgICIiIkJ5dGUtY29tcGlsZSBvbmUgZmlsZS4KKworICAgIEFyZ3VtZW50cyAob25seSBmdWxsbmFtZSBpcyByZXF1aXJlZCk6CisKKyAgICBmdWxsbmFtZTogIHRoZSBmaWxlIHRvIGJ5dGUtY29tcGlsZQorICAgIGRkaXI6ICAgICAgaWYgZ2l2ZW4sIHB1cnBvcnRlZCBkaXJlY3RvcnkgbmFtZSAodGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lIHRoYXQgd2lsbCBzaG93IHVwIGluIGVycm9yIG1lc3NhZ2VzKQorICAgIGZvcmNlOiAgICAgaWYgMSwgZm9yY2UgY29tcGlsYXRpb24sIGV2ZW4gaWYgdGltZXN0YW1wcyBhcmUgdXAtdG8tZGF0ZQorICAgIHF1aWV0OiAgICAgaWYgMSwgYmUgcXVpZXQgZHVyaW5nIGNvbXBpbGF0aW9uCisgICAgIiIiCisgICAgc3VjY2VzcyA9IDEKKyAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmdWxsbmFtZSkKKyAgICBpZiBkZGlyIGlzIG5vdCBOb25lOgorICAgICAgICBkZmlsZSA9IG9zLnBhdGguam9pbihkZGlyLCBuYW1lKQorICAgIGVsc2U6CisgICAgICAgIGRmaWxlID0gTm9uZQorICAgIGlmIHJ4IGlzIG5vdCBOb25lOgorICAgICAgICBtbyA9IHJ4LnNlYXJjaChmdWxsbmFtZSkKKyAgICAgICAgaWYgbW86CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcworICAgIGlmIG9zLnBhdGguaXNmaWxlKGZ1bGxuYW1lKToKKyAgICAgICAgaGVhZCwgdGFpbCA9IG5hbWVbOi0zXSwgbmFtZVstMzpdCisgICAgICAgIGlmIHRhaWwgPT0gJy5weSc6CisgICAgICAgICAgICBpZiBub3QgZm9yY2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtdGltZSA9IGludChvcy5zdGF0KGZ1bGxuYW1lKS5zdF9tdGltZSkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ID0gc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIG10aW1lKQorICAgICAgICAgICAgICAgICAgICBjZmlsZSA9IGZ1bGxuYW1lICsgKF9fZGVidWdfXyBhbmQgJ2MnIG9yICdvJykKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNmaWxlLCAncmInKSBhcyBjaGFuZGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gY2hhbmRsZS5yZWFkKDgpCisgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdCA9PSBhY3R1YWw6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcworICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgcHJpbnQgJ0NvbXBpbGluZycsIGZ1bGxuYW1lLCAnLi4uJworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9rID0gcHlfY29tcGlsZS5jb21waWxlKGZ1bGxuYW1lLCBOb25lLCBkZmlsZSwgVHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBweV9jb21waWxlLlB5Q29tcGlsZUVycm9yLGVycjoKKyAgICAgICAgICAgICAgICBpZiBxdWlldDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ0NvbXBpbGluZycsIGZ1bGxuYW1lLCAnLi4uJworICAgICAgICAgICAgICAgIHByaW50IGVyci5tc2cKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgcHJpbnQgIlNvcnJ5IiwgZQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG9rID09IDA6CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCisgICAgcmV0dXJuIHN1Y2Nlc3MKKwogZGVmIGNvbXBpbGVfcGF0aChza2lwX2N1cmRpcj0xLCBtYXhsZXZlbHM9MCwgZm9yY2U9MCwgcXVpZXQ9MCk6CiAgICAgIiIiQnl0ZS1jb21waWxlIGFsbCBtb2R1bGUgb24gc3lzLnBhdGguCiAKQEAgLTkzLDcgKzExOSw2IEBACiAgICAgbWF4bGV2ZWxzOiAgIG1heCByZWN1cnNpb24gbGV2ZWwgKGRlZmF1bHQgMCkKICAgICBmb3JjZTogYXMgZm9yIGNvbXBpbGVfZGlyKCkgKGRlZmF1bHQgMCkKICAgICBxdWlldDogYXMgZm9yIGNvbXBpbGVfZGlyKCkgKGRlZmF1bHQgMCkKLQogICAgICIiIgogICAgIHN1Y2Nlc3MgPSAxCiAgICAgZm9yIGRpciBpbiBzeXMucGF0aDoKQEAgLTEwNCwxNSArMTI5LDM0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2UsIHF1aWV0PXF1aWV0KQogICAgIHJldHVybiBzdWNjZXNzCiAKK2RlZiBleHBhbmRfYXJncyhhcmdzLCBmbGlzdCk6CisgICAgIiIicmVhZCBuYW1lcyBpbiBmbGlzdCBhbmQgYXBwZW5kIHRvIGFyZ3MiIiIKKyAgICBleHBhbmRlZCA9IGFyZ3NbOl0KKyAgICBpZiBmbGlzdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZmxpc3QgPT0gJy0nOgorICAgICAgICAgICAgICAgIGZkID0gc3lzLnN0ZGluCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZkID0gb3BlbihmbGlzdCkKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgbGluZSA9IGZkLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleHBhbmRlZC5hcHBlbmQobGluZVs6LTFdKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJFcnJvciByZWFkaW5nIGZpbGUgbGlzdCAlcyIgJSBmbGlzdAorICAgICAgICAgICAgcmFpc2UKKyAgICByZXR1cm4gZXhwYW5kZWQKKwogZGVmIG1haW4oKToKICAgICAiIiJTY3JpcHQgbWFpbiBwcm9ncmFtLiIiIgogICAgIGltcG9ydCBnZXRvcHQKICAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2xmcWQ6eDonKQorICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdsZnFkOng6aTonKQogICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgIHByaW50ICJ1c2FnZTogcHl0aG9uIGNvbXBpbGVhbGwucHkgWy1sXSBbLWZdIFstcV0gWy1kIGRlc3RkaXJdICIgXAotICAgICAgICAgICAgICAiWy14IHJlZ2V4cF0gW2RpcmVjdG9yeSAuLi5dIgorICAgICAgICAgICAgICAiWy14IHJlZ2V4cF0gWy1pIGxpc3RdIFtkaXJlY3Rvcnl8ZmlsZSAuLi5dIgogICAgICAgICBwcmludCAiLWw6IGRvbid0IHJlY3Vyc2UgZG93biIKICAgICAgICAgcHJpbnQgIi1mOiBmb3JjZSByZWJ1aWxkIGV2ZW4gaWYgdGltZXN0YW1wcyBhcmUgdXAtdG8tZGF0ZSIKICAgICAgICAgcHJpbnQgIi1xOiBxdWlldCBvcGVyYXRpb24iCkBAIC0xMjAsMTIgKzE2NCwxNCBAQAogICAgICAgICBwcmludCAiICAgaWYgbm8gZGlyZWN0b3J5IGFyZ3VtZW50cywgLWwgc3lzLnBhdGggaXMgYXNzdW1lZCIKICAgICAgICAgcHJpbnQgIi14IHJlZ2V4cDogc2tpcCBmaWxlcyBtYXRjaGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIHJlZ2V4cCIKICAgICAgICAgcHJpbnQgIiAgIHRoZSByZWdleHAgaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGUiCisgICAgICAgIHByaW50ICItaSBsaXN0OiBleHBhbmQgbGlzdCB3aXRoIGl0cyBjb250ZW50IChmaWxlIGFuZCBkaXJlY3RvcnkgbmFtZXMpIgogICAgICAgICBzeXMuZXhpdCgyKQogICAgIG1heGxldmVscyA9IDEwCiAgICAgZGRpciA9IE5vbmUKICAgICBmb3JjZSA9IDAKICAgICBxdWlldCA9IDAKICAgICByeCA9IE5vbmUKKyAgICBmbGlzdCA9IE5vbmUKICAgICBmb3IgbywgYSBpbiBvcHRzOgogICAgICAgICBpZiBvID09ICctbCc6IG1heGxldmVscyA9IDAKICAgICAgICAgaWYgbyA9PSAnLWQnOiBkZGlyID0gYQpAQCAtMTM0LDE3ICsxODAsMjggQEAKICAgICAgICAgaWYgbyA9PSAnLXgnOgogICAgICAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgICAgICByeCA9IHJlLmNvbXBpbGUoYSkKKyAgICAgICAgaWYgbyA9PSAnLWknOiBmbGlzdCA9IGEKICAgICBpZiBkZGlyOgotICAgICAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgaWYgbGVuKGFyZ3MpICE9IDEgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKGFyZ3NbMF0pOgogICAgICAgICAgICAgcHJpbnQgIi1kIGRlc3RkaXIgcmVxdWlyZSBleGFjdGx5IG9uZSBkaXJlY3RvcnkgYXJndW1lbnQiCiAgICAgICAgICAgICBzeXMuZXhpdCgyKQogICAgIHN1Y2Nlc3MgPSAxCiAgICAgdHJ5OgotICAgICAgICBpZiBhcmdzOgotICAgICAgICAgICAgZm9yIGRpciBpbiBhcmdzOgotICAgICAgICAgICAgICAgIGlmIG5vdCBjb21waWxlX2RpcihkaXIsIG1heGxldmVscywgZGRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2UsIHJ4LCBxdWlldCk6Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCisgICAgICAgIGlmIGFyZ3Mgb3IgZmxpc3Q6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZmxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBleHBhbmRfYXJncyhhcmdzLCBmbGlzdCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCisgICAgICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihhcmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNvbXBpbGVfZGlyKGFyZywgbWF4bGV2ZWxzLCBkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlLCByeCwgcXVpZXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgY29tcGlsZV9maWxlKGFyZywgZGRpciwgZm9yY2UsIHJ4LCBxdWlldCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBjb21waWxlX3BhdGgoKQogICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlci9fX2luaXRfXy5weSBiL0xpYi9jb21waWxlci9fX2luaXRfXy5weQppbmRleCBkNzUxNDBhLi4yYTZmNjRmIDEwMDY0NAotLS0gYS9MaWIvY29tcGlsZXIvX19pbml0X18ucHkKKysrIGIvTGliL2NvbXBpbGVyL19faW5pdF9fLnB5CkBAIC0yMCw5ICsyMCwxMSBAQAogY29tcGlsZUZpbGUoZmlsZW5hbWUpCiAgICAgR2VuZXJhdGVzIGEgLnB5YyBmaWxlIGJ5IGNvbXBpbGluZyBmaWxlbmFtZS4KICIiIgotZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybnB5M2sKLXdhcm5weTNrKCJ0aGUgY29tcGlsZXIgcGFja2FnZSBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLjAiLCBzdGFja2xldmVsPTIpCi1kZWwgd2FybnB5M2sKKworaW1wb3J0IHdhcm5pbmdzCisKK3dhcm5pbmdzLndhcm4oIlRoZSBjb21waWxlciBwYWNrYWdlIGlzIGRlcHJlY2F0ZWQgYW5kIHJlbW92ZWQgaW4gUHl0aG9uIDMueC4iLAorICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKIAogZnJvbSBjb21waWxlci50cmFuc2Zvcm1lciBpbXBvcnQgcGFyc2UsIHBhcnNlRmlsZQogZnJvbSBjb21waWxlci52aXNpdG9yIGltcG9ydCB3YWxrCmRpZmYgLS1naXQgYS9MaWIvY29tcGlsZXIvYXN0LnB5IGIvTGliL2NvbXBpbGVyL2FzdC5weQppbmRleCBmOTIzMDc3Li40YzNmYzE2IDEwMDY0NAotLS0gYS9MaWIvY29tcGlsZXIvYXN0LnB5CisrKyBiL0xpYi9jb21waWxlci9hc3QucHkKQEAgLTg5MCw2ICs4OTAsNTEgQEAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiAiTGlzdENvbXBJZiglcykiICUgKHJlcHIoc2VsZi50ZXN0KSwpCiAKK2NsYXNzIFNldENvbXAoTm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cHIsIHF1YWxzLCBsaW5lbm89Tm9uZSk6CisgICAgICAgIHNlbGYuZXhwciA9IGV4cHIKKyAgICAgICAgc2VsZi5xdWFscyA9IHF1YWxzCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisKKyAgICBkZWYgZ2V0Q2hpbGRyZW4oc2VsZik6CisgICAgICAgIGNoaWxkcmVuID0gW10KKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHNlbGYuZXhwcikKKyAgICAgICAgY2hpbGRyZW4uZXh0ZW5kKGZsYXR0ZW4oc2VsZi5xdWFscykpCisgICAgICAgIHJldHVybiB0dXBsZShjaGlsZHJlbikKKworICAgIGRlZiBnZXRDaGlsZE5vZGVzKHNlbGYpOgorICAgICAgICBub2RlbGlzdCA9IFtdCisgICAgICAgIG5vZGVsaXN0LmFwcGVuZChzZWxmLmV4cHIpCisgICAgICAgIG5vZGVsaXN0LmV4dGVuZChmbGF0dGVuX25vZGVzKHNlbGYucXVhbHMpKQorICAgICAgICByZXR1cm4gdHVwbGUobm9kZWxpc3QpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiU2V0Q29tcCglcywgJXMpIiAlIChyZXByKHNlbGYuZXhwciksIHJlcHIoc2VsZi5xdWFscykpCisKK2NsYXNzIERpY3RDb21wKE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZXksIHZhbHVlLCBxdWFscywgbGluZW5vPU5vbmUpOgorICAgICAgICBzZWxmLmtleSA9IGtleQorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgc2VsZi5xdWFscyA9IHF1YWxzCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisKKyAgICBkZWYgZ2V0Q2hpbGRyZW4oc2VsZik6CisgICAgICAgIGNoaWxkcmVuID0gW10KKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHNlbGYua2V5KQorICAgICAgICBjaGlsZHJlbi5hcHBlbmQoc2VsZi52YWx1ZSkKKyAgICAgICAgY2hpbGRyZW4uZXh0ZW5kKGZsYXR0ZW4oc2VsZi5xdWFscykpCisgICAgICAgIHJldHVybiB0dXBsZShjaGlsZHJlbikKKworICAgIGRlZiBnZXRDaGlsZE5vZGVzKHNlbGYpOgorICAgICAgICBub2RlbGlzdCA9IFtdCisgICAgICAgIG5vZGVsaXN0LmFwcGVuZChzZWxmLmtleSkKKyAgICAgICAgbm9kZWxpc3QuYXBwZW5kKHNlbGYudmFsdWUpCisgICAgICAgIG5vZGVsaXN0LmV4dGVuZChmbGF0dGVuX25vZGVzKHNlbGYucXVhbHMpKQorICAgICAgICByZXR1cm4gdHVwbGUobm9kZWxpc3QpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiRGljdENvbXAoJXMsICVzLCAlcykiICUgKHJlcHIoc2VsZi5rZXkpLCByZXByKHNlbGYudmFsdWUpLCByZXByKHNlbGYucXVhbHMpKQorCiBjbGFzcyBNb2QoTm9kZSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlZnRyaWdodCwgbGluZW5vPU5vbmUpOgogICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0cmlnaHRbMF0KQEAgLTExMDcsNiArMTE1MiwyMiBAQAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICJSaWdodFNoaWZ0KCglcywgJXMpKSIgJSAocmVwcihzZWxmLmxlZnQpLCByZXByKHNlbGYucmlnaHQpKQogCitjbGFzcyBTZXQoTm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGVzLCBsaW5lbm89Tm9uZSk6CisgICAgICAgIHNlbGYubm9kZXMgPSBub2RlcworICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworCisgICAgZGVmIGdldENoaWxkcmVuKHNlbGYpOgorICAgICAgICByZXR1cm4gdHVwbGUoZmxhdHRlbihzZWxmLm5vZGVzKSkKKworICAgIGRlZiBnZXRDaGlsZE5vZGVzKHNlbGYpOgorICAgICAgICBub2RlbGlzdCA9IFtdCisgICAgICAgIG5vZGVsaXN0LmV4dGVuZChmbGF0dGVuX25vZGVzKHNlbGYubm9kZXMpKQorICAgICAgICByZXR1cm4gdHVwbGUobm9kZWxpc3QpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiU2V0KCVzKSIgJSAocmVwcihzZWxmLm5vZGVzKSwpCisKIGNsYXNzIFNsaWNlKE5vZGUpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHByLCBmbGFncywgbG93ZXIsIHVwcGVyLCBsaW5lbm89Tm9uZSk6CiAgICAgICAgIHNlbGYuZXhwciA9IGV4cHIKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlci9jb25zdHMucHkgYi9MaWIvY29tcGlsZXIvY29uc3RzLnB5CmluZGV4IGRkNDI3OTMuLjAyMmY2ZGEgMTAwNjQ0Ci0tLSBhL0xpYi9jb21waWxlci9jb25zdHMucHkKKysrIGIvTGliL2NvbXBpbGVyL2NvbnN0cy5weQpAQCAtNCwxMCArNCwxMSBAQAogT1BfQVBQTFkgPSAnT1BfQVBQTFknCiAKIFNDX0xPQ0FMID0gMQotU0NfR0xPQkFMID0gMgotU0NfRlJFRSA9IDMKLVNDX0NFTEwgPSA0Ci1TQ19VTktOT1dOID0gNQorU0NfR0xPQkFMX0lNUExJQ0lUID0gMgorU0NfR0xPQkFMX0VYUExJQ1QgPSAzCitTQ19GUkVFID0gNAorU0NfQ0VMTCA9IDUKK1NDX1VOS05PV04gPSA2CiAKIENPX09QVElNSVpFRCA9IDB4MDAwMQogQ09fTkVXTE9DQUxTID0gMHgwMDAyCmRpZmYgLS1naXQgYS9MaWIvY29tcGlsZXIvcHlhc3NlbS5weSBiL0xpYi9jb21waWxlci9weWFzc2VtLnB5CmluZGV4IDZlZmVjMjguLjI4NmJlMGMgMTAwNjQ0Ci0tLSBhL0xpYi9jb21waWxlci9weWFzc2VtLnB5CisrKyBiL0xpYi9jb21waWxlci9weWFzc2VtLnB5CkBAIC0yMSw2ICsyMSw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnQ6CiAgICAgICAgICAgICAgICAgcHJpbnQgImVuZCIsIHJlcHIoc2VsZi5jdXJyZW50KQogICAgICAgICAgICAgICAgIHByaW50ICIgICAgbmV4dCIsIHNlbGYuY3VycmVudC5uZXh0CisgICAgICAgICAgICAgICAgcHJpbnQgIiAgICBwcmV2Iiwgc2VsZi5jdXJyZW50LnByZXYKICAgICAgICAgICAgICAgICBwcmludCAiICAgIiwgc2VsZi5jdXJyZW50LmdldF9jaGlsZHJlbigpCiAgICAgICAgICAgICBwcmludCByZXByKGJsb2NrKQogICAgICAgICBzZWxmLmN1cnJlbnQgPSBibG9jawpAQCAtNDAsMTMgKzQxLDEyIEBACiAgICAgICAgIGlmIGJsb2NrIGlzIE5vbmU6CiAgICAgICAgICAgICBibG9jayA9IHNlbGYubmV3QmxvY2soKQogCi0gICAgICAgICMgTm90ZTogSWYgdGhlIGN1cnJlbnQgYmxvY2sgZW5kcyB3aXRoIGFuIHVuY29uZGl0aW9uYWwKLSAgICAgICAgIyBjb250cm9sIHRyYW5zZmVyLCB0aGVuIGl0IGlzIGluY29ycmVjdCB0byBhZGQgYW4gaW1wbGljaXQKLSAgICAgICAgIyB0cmFuc2ZlciB0byB0aGUgYmxvY2sgZ3JhcGguICBUaGUgY3VycmVudCBjb2RlIHJlcXVpcmVzCi0gICAgICAgICMgdGhlc2UgZWRnZXMgdG8gZ2V0IHRoZSBibG9ja3MgZW1pdHRlZCBpbiB0aGUgcmlnaHQgb3JkZXIsCi0gICAgICAgICMgaG93ZXZlci4gOi0oICBJZiBhIGNsaWVudCBuZWVkcyB0byByZW1vdmUgdGhlc2UgZWRnZXMsIGNhbGwKLSAgICAgICAgIyBwcnVuZUVkZ2VzKCkuCi0KKyAgICAgICAgIyBOb3RlOiBJZiB0aGUgY3VycmVudCBibG9jayBlbmRzIHdpdGggYW4gdW5jb25kaXRpb25hbCBjb250cm9sCisgICAgICAgICMgdHJhbnNmZXIsIHRoZW4gaXQgaXMgdGVjaGljYWxseSBpbmNvcnJlY3QgdG8gYWRkIGFuIGltcGxpY2l0CisgICAgICAgICMgdHJhbnNmZXIgdG8gdGhlIGJsb2NrIGdyYXBoLiBEb2luZyBzbyByZXN1bHRzIGluIGNvZGUgZ2VuZXJhdGlvbgorICAgICAgICAjIGZvciB1bnJlYWNoYWJsZSBibG9ja3MuICBUaGF0IGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHZlcnkgY29tbW9uCisgICAgICAgICMgd2l0aCBQeXRob24gY29kZSBhbmQgc2luY2UgdGhlIGJ1aWx0LWluIGNvbXBpbGVyIGRvZXNuJ3Qgb3B0aW1pemUKKyAgICAgICAgIyBpdCBvdXQgd2UgZG9uJ3QgZWl0aGVyLgogICAgICAgICBzZWxmLmN1cnJlbnQuYWRkTmV4dChibG9jaykKICAgICAgICAgc2VsZi5zdGFydEJsb2NrKGJsb2NrKQogCkBAIC02OSw4ICs2OSw2IEBACiAgICAgZGVmIGVtaXQoc2VsZiwgKmluc3QpOgogICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKICAgICAgICAgICAgIHByaW50ICJcdCIsIGluc3QKLSAgICAgICAgaWYgaW5zdFswXSBpbiBbJ1JFVFVSTl9WQUxVRScsICdZSUVMRF9WQUxVRSddOgotICAgICAgICAgICAgc2VsZi5jdXJyZW50LmFkZE91dEVkZ2Uoc2VsZi5leGl0KQogICAgICAgICBpZiBsZW4oaW5zdCkgPT0gMiBhbmQgaXNpbnN0YW5jZShpbnN0WzFdLCBCbG9jayk6CiAgICAgICAgICAgICBzZWxmLmN1cnJlbnQuYWRkT3V0RWRnZShpbnN0WzFdKQogICAgICAgICBzZWxmLmN1cnJlbnQuZW1pdChpbnN0KQpAQCAtODAsMTE4ICs3OCw5IEBACiAKICAgICAgICAgaS5lLiBlYWNoIG5vZGUgYXBwZWFycyBiZWZvcmUgYWxsIG9mIGl0cyBzdWNjZXNzb3JzCiAgICAgICAgICIiIgotICAgICAgICAjIFhYWCBtYWtlIHN1cmUgZXZlcnkgbm9kZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBuZXh0Ci0gICAgICAgICMgaXMgc2V0IHNvIHRoYXQgbmV4dCBwb2ludHMgdG8gZXhpdAotICAgICAgICBmb3IgYiBpbiBzZWxmLmJsb2Nrcy5lbGVtZW50cygpOgotICAgICAgICAgICAgaWYgYiBpcyBzZWxmLmV4aXQ6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIG5vdCBiLm5leHQ6Ci0gICAgICAgICAgICAgICAgYi5hZGROZXh0KHNlbGYuZXhpdCkKLSAgICAgICAgb3JkZXIgPSBkZnNfcG9zdG9yZGVyKHNlbGYuZW50cnksIHt9KQotICAgICAgICBvcmRlci5yZXZlcnNlKCkKLSAgICAgICAgc2VsZi5maXh1cE9yZGVyKG9yZGVyLCBzZWxmLmV4aXQpCi0gICAgICAgICMgaGFjayBhbGVydAotICAgICAgICBpZiBub3Qgc2VsZi5leGl0IGluIG9yZGVyOgotICAgICAgICAgICAgb3JkZXIuYXBwZW5kKHNlbGYuZXhpdCkKLQorICAgICAgICBvcmRlciA9IG9yZGVyX2Jsb2NrcyhzZWxmLmVudHJ5LCBzZWxmLmV4aXQpCiAgICAgICAgIHJldHVybiBvcmRlcgogCi0gICAgZGVmIGZpeHVwT3JkZXIoc2VsZiwgYmxvY2tzLCBkZWZhdWx0X25leHQpOgotICAgICAgICAiIiJGaXh1cCBiYWQgb3JkZXIgaW50cm9kdWNlZCBieSBERlMuIiIiCi0KLSAgICAgICAgIyBYWFggVGhpcyBpcyBhIHRvdGFsIG1lc3MuICBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBnZXQKLSAgICAgICAgIyB0aGUgY29kZSBibG9ja3MgaW4gdGhlIHJpZ2h0IG9yZGVyLgotCi0gICAgICAgIHNlbGYuZml4dXBPcmRlckhvbm9yTmV4dChibG9ja3MsIGRlZmF1bHRfbmV4dCkKLSAgICAgICAgc2VsZi5maXh1cE9yZGVyRm9yd2FyZChibG9ja3MsIGRlZmF1bHRfbmV4dCkKLQotICAgIGRlZiBmaXh1cE9yZGVySG9ub3JOZXh0KHNlbGYsIGJsb2NrcywgZGVmYXVsdF9uZXh0KToKLSAgICAgICAgIiIiRml4IG9uZSBwcm9ibGVtIHdpdGggREZTLgotCi0gICAgICAgIFRoZSBERlMgdXNlcyBjaGlsZCBibG9jaywgYnV0IGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgc3BlY2lhbAotICAgICAgICAibmV4dCIgYmxvY2suICBBcyBhIHJlc3VsdCwgdGhlIERGUyBjYW4gb3JkZXIgYmxvY2tzIHNvIHRoYXQgYQotICAgICAgICBibG9jayBpc24ndCBuZXh0IHRvIHRoZSByaWdodCBibG9jayBmb3IgaW1wbGljaXQgY29udHJvbAotICAgICAgICB0cmFuc2ZlcnMuCi0gICAgICAgICIiIgotICAgICAgICBpbmRleCA9IHt9Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihibG9ja3MpKToKLSAgICAgICAgICAgIGluZGV4W2Jsb2Nrc1tpXV0gPSBpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGJsb2NrcykgLSAxKToKLSAgICAgICAgICAgIGIgPSBibG9ja3NbaV0KLSAgICAgICAgICAgIG4gPSBibG9ja3NbaSArIDFdCi0gICAgICAgICAgICBpZiBub3QgYi5uZXh0IG9yIGIubmV4dFswXSA9PSBkZWZhdWx0X25leHQgb3IgYi5uZXh0WzBdID09IG46Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICMgVGhlIGJsb2NrcyBhcmUgaW4gdGhlIHdyb25nIG9yZGVyLiAgRmluZCB0aGUgY2hhaW4gb2YKLSAgICAgICAgICAgICMgYmxvY2tzIHRvIGluc2VydCB3aGVyZSB0aGV5IGJlbG9uZy4KLSAgICAgICAgICAgIGN1ciA9IGIKLSAgICAgICAgICAgIGNoYWluID0gW10KLSAgICAgICAgICAgIGVsdCA9IGN1cgotICAgICAgICAgICAgd2hpbGUgZWx0Lm5leHQgYW5kIGVsdC5uZXh0WzBdICE9IGRlZmF1bHRfbmV4dDoKLSAgICAgICAgICAgICAgICBjaGFpbi5hcHBlbmQoZWx0Lm5leHRbMF0pCi0gICAgICAgICAgICAgICAgZWx0ID0gZWx0Lm5leHRbMF0KLSAgICAgICAgICAgICMgTm93IHJlbW92ZSB0aGUgYmxvY2tzIGluIHRoZSBjaGFpbiBmcm9tIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAjIGJsb2NrIGxpc3QsIHNvIHRoYXQgdGhleSBjYW4gYmUgcmUtaW5zZXJ0ZWQuCi0gICAgICAgICAgICBsID0gW10KLSAgICAgICAgICAgIGZvciBiIGluIGNoYWluOgotICAgICAgICAgICAgICAgIGFzc2VydCBpbmRleFtiXSA+IGkKLSAgICAgICAgICAgICAgICBsLmFwcGVuZCgoaW5kZXhbYl0sIGIpKQotICAgICAgICAgICAgbC5zb3J0KCkKLSAgICAgICAgICAgIGwucmV2ZXJzZSgpCi0gICAgICAgICAgICBmb3IgaiwgYiBpbiBsOgotICAgICAgICAgICAgICAgIGRlbCBibG9ja3NbaW5kZXhbYl1dCi0gICAgICAgICAgICAjIEluc2VydCB0aGUgY2hhaW4gaW4gdGhlIHByb3BlciBsb2NhdGlvbgotICAgICAgICAgICAgYmxvY2tzW2k6aSArIDFdID0gW2N1cl0gKyBjaGFpbgotICAgICAgICAgICAgIyBGaW5hbGx5LCByZS1jb21wdXRlIHRoZSBibG9jayBpbmRleGVzCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYmxvY2tzKSk6Ci0gICAgICAgICAgICAgICAgaW5kZXhbYmxvY2tzW2ldXSA9IGkKLQotICAgIGRlZiBmaXh1cE9yZGVyRm9yd2FyZChzZWxmLCBibG9ja3MsIGRlZmF1bHRfbmV4dCk6Ci0gICAgICAgICIiIk1ha2Ugc3VyZSBhbGwgSlVNUF9GT1JXQVJEcyBqdW1wIGZvcndhcmQiIiIKLSAgICAgICAgaW5kZXggPSB7fQotICAgICAgICBjaGFpbnMgPSBbXQotICAgICAgICBjdXIgPSBbXQotICAgICAgICBmb3IgYiBpbiBibG9ja3M6Ci0gICAgICAgICAgICBpbmRleFtiXSA9IGxlbihjaGFpbnMpCi0gICAgICAgICAgICBjdXIuYXBwZW5kKGIpCi0gICAgICAgICAgICBpZiBiLm5leHQgYW5kIGIubmV4dFswXSA9PSBkZWZhdWx0X25leHQ6Ci0gICAgICAgICAgICAgICAgY2hhaW5zLmFwcGVuZChjdXIpCi0gICAgICAgICAgICAgICAgY3VyID0gW10KLSAgICAgICAgY2hhaW5zLmFwcGVuZChjdXIpCi0KLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGNvbnN0cmFpbnRzID0gW10KLQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNoYWlucykpOgotICAgICAgICAgICAgICAgIGwgPSBjaGFpbnNbaV0KLSAgICAgICAgICAgICAgICBmb3IgYiBpbiBsOgotICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBiLmdldF9jaGlsZHJlbigpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXhbY10gPCBpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfcCA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5zdCBpbiBiLmluc3RzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0WzBdID09ICdKVU1QX0ZPUldBUkQnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdFsxXSA9PSBjOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfcCA9IDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZm9yd2FyZF9wOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLmFwcGVuZCgoaW5kZXhbY10sIGkpKQotCi0gICAgICAgICAgICBpZiBub3QgY29uc3RyYWludHM6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICAgICAgIyBYWFgganVzdCBkbyBvbmUgZm9yIG5vdwotICAgICAgICAgICAgIyBkbyBzd2FwcyB0byBnZXQgdGhpbmdzIGluIHRoZSByaWdodCBvcmRlcgotICAgICAgICAgICAgZ29lc19iZWZvcmUsIGFfY2hhaW4gPSBjb25zdHJhaW50c1swXQotICAgICAgICAgICAgYXNzZXJ0IGFfY2hhaW4gPiBnb2VzX2JlZm9yZQotICAgICAgICAgICAgYyA9IGNoYWluc1thX2NoYWluXQotICAgICAgICAgICAgY2hhaW5zLnJlbW92ZShjKQotICAgICAgICAgICAgY2hhaW5zLmluc2VydChnb2VzX2JlZm9yZSwgYykKLQotICAgICAgICBkZWwgYmxvY2tzWzpdCi0gICAgICAgIGZvciBjIGluIGNoYWluczoKLSAgICAgICAgICAgIGZvciBiIGluIGM6Ci0gICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChiKQotCiAgICAgZGVmIGdldEJsb2NrcyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuYmxvY2tzLmVsZW1lbnRzKCkKIApAQCAtMjA1LDI3ICs5NCw4NCBAQAogICAgICAgICAgICAgbC5leHRlbmQoYi5nZXRDb250YWluZWRHcmFwaHMoKSkKICAgICAgICAgcmV0dXJuIGwKIAotZGVmIGRmc19wb3N0b3JkZXIoYiwgc2Vlbik6Ci0gICAgIiIiRGVwdGgtZmlyc3Qgc2VhcmNoIG9mIHRyZWUgcm9vdGVkIGF0IGIsIHJldHVybiBpbiBwb3N0b3JkZXIiIiIKKworZGVmIG9yZGVyX2Jsb2NrcyhzdGFydF9ibG9jaywgZXhpdF9ibG9jayk6CisgICAgIiIiT3JkZXIgYmxvY2tzIHNvIHRoYXQgdGhleSBhcmUgZW1pdHRlZCBpbiB0aGUgcmlnaHQgb3JkZXIiIiIKKyAgICAjIFJ1bGVzOgorICAgICMgLSB3aGVuIGEgYmxvY2sgaGFzIGEgbmV4dCBibG9jaywgdGhlIG5leHQgYmxvY2sgbXVzdCBiZSBlbWl0dGVkIGp1c3QgYWZ0ZXIKKyAgICAjIC0gd2hlbiBhIGJsb2NrIGhhcyBmb2xsb3dlcnMgKHJlbGF0aXZlIGp1bXBzKSwgaXQgbXVzdCBiZSBlbWl0dGVkIGJlZm9yZQorICAgICMgICB0aGVtCisgICAgIyAtIGFsbCByZWFjaGFibGUgYmxvY2tzIG11c3QgYmUgZW1pdHRlZAogICAgIG9yZGVyID0gW10KLSAgICBzZWVuW2JdID0gYgotICAgIGZvciBjIGluIGIuZ2V0X2NoaWxkcmVuKCk6Ci0gICAgICAgIGlmIGMgaW4gc2VlbjoKKworICAgICMgRmluZCBhbGwgdGhlIGJsb2NrcyB0byBiZSBlbWl0dGVkLgorICAgIHJlbWFpbmluZyA9IHNldCgpCisgICAgdG9kbyA9IFtzdGFydF9ibG9ja10KKyAgICB3aGlsZSB0b2RvOgorICAgICAgICBiID0gdG9kby5wb3AoKQorICAgICAgICBpZiBiIGluIHJlbWFpbmluZzoKICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIG9yZGVyID0gb3JkZXIgKyBkZnNfcG9zdG9yZGVyKGMsIHNlZW4pCi0gICAgb3JkZXIuYXBwZW5kKGIpCisgICAgICAgIHJlbWFpbmluZy5hZGQoYikKKyAgICAgICAgZm9yIGMgaW4gYi5nZXRfY2hpbGRyZW4oKToKKyAgICAgICAgICAgIGlmIGMgbm90IGluIHJlbWFpbmluZzoKKyAgICAgICAgICAgICAgICB0b2RvLmFwcGVuZChjKQorCisgICAgIyBBIGJsb2NrIGlzIGRvbWluYXRlZCBieSBhbm90aGVyIGJsb2NrIGlmIHRoYXQgYmxvY2sgbXVzdCBiZSBlbWl0dGVkCisgICAgIyBiZWZvcmUgaXQuCisgICAgZG9taW5hdG9ycyA9IHt9CisgICAgZm9yIGIgaW4gcmVtYWluaW5nOgorICAgICAgICBpZiBfX2RlYnVnX18gYW5kIGIubmV4dDoKKyAgICAgICAgICAgIGFzc2VydCBiIGlzIGIubmV4dFswXS5wcmV2WzBdLCAoYiwgYi5uZXh0KQorICAgICAgICAjIE1ha2Ugc3VyZSBldmVyeSBibG9jayBhcHBlYXJzIGluIGRvbWluYXRvcnMsIGV2ZW4gaWYgbm8KKyAgICAgICAgIyBvdGhlciBibG9jayBtdXN0IHByZWNlZGUgaXQuCisgICAgICAgIGRvbWluYXRvcnMuc2V0ZGVmYXVsdChiLCBzZXQoKSkKKyAgICAgICAgIyBwcmVjZWVkaW5nIGJsb2NrcyBkb21pbmF0ZSBmb2xsb3dpbmcgYmxvY2tzCisgICAgICAgIGZvciBjIGluIGIuZ2V0X2ZvbGxvd2VycygpOgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBkb21pbmF0b3JzLnNldGRlZmF1bHQoYywgc2V0KCkpLmFkZChiKQorICAgICAgICAgICAgICAgICMgQW55IGJsb2NrIHRoYXQgaGFzIGEgbmV4dCBwb2ludGVyIGxlYWRpbmcgdG8gYyBpcyBhbHNvCisgICAgICAgICAgICAgICAgIyBkb21pbmF0ZWQgYmVjYXVzZSB0aGUgd2hvbGUgY2hhaW4gd2lsbCBiZSBlbWl0dGVkIGF0IG9uY2UuCisgICAgICAgICAgICAgICAgIyBXYWxrIGJhY2t3YXJkcyBhbmQgYWRkIHRoZW0gYWxsLgorICAgICAgICAgICAgICAgIGlmIGMucHJldiBhbmQgYy5wcmV2WzBdIGlzIG5vdCBiOgorICAgICAgICAgICAgICAgICAgICBjID0gYy5wcmV2WzBdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBmaW5kX25leHQoKToKKyAgICAgICAgIyBGaW5kIGEgYmxvY2sgdGhhdCBjYW4gYmUgZW1pdHRlZCBuZXh0LgorICAgICAgICBmb3IgYiBpbiByZW1haW5pbmc6CisgICAgICAgICAgICBmb3IgYyBpbiBkb21pbmF0b3JzW2JdOgorICAgICAgICAgICAgICAgIGlmIGMgaW4gcmVtYWluaW5nOgorICAgICAgICAgICAgICAgICAgICBicmVhayAjIGNhbid0IGVtaXQgeWV0LCBkb21pbmF0ZWQgYnkgYSByZW1haW5pbmcgYmxvY2sKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGIKKyAgICAgICAgYXNzZXJ0IDAsICdjaXJjdWxhciBkZXBlbmRlbmN5LCBjYW5ub3QgZmluZCBuZXh0IGJsb2NrJworCisgICAgYiA9IHN0YXJ0X2Jsb2NrCisgICAgd2hpbGUgMToKKyAgICAgICAgb3JkZXIuYXBwZW5kKGIpCisgICAgICAgIHJlbWFpbmluZy5kaXNjYXJkKGIpCisgICAgICAgIGlmIGIubmV4dDoKKyAgICAgICAgICAgIGIgPSBiLm5leHRbMF0KKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsaWYgYiBpcyBub3QgZXhpdF9ibG9jayBhbmQgbm90IGIuaGFzX3VuY29uZGl0aW9uYWxfdHJhbnNmZXIoKToKKyAgICAgICAgICAgIG9yZGVyLmFwcGVuZChleGl0X2Jsb2NrKQorICAgICAgICBpZiBub3QgcmVtYWluaW5nOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgYiA9IGZpbmRfbmV4dCgpCiAgICAgcmV0dXJuIG9yZGVyCiAKKwogY2xhc3MgQmxvY2s6CiAgICAgX2NvdW50ID0gMAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsPScnKToKICAgICAgICAgc2VsZi5pbnN0cyA9IFtdCi0gICAgICAgIHNlbGYuaW5FZGdlcyA9IG1pc2MuU2V0KCkKLSAgICAgICAgc2VsZi5vdXRFZGdlcyA9IG1pc2MuU2V0KCkKKyAgICAgICAgc2VsZi5vdXRFZGdlcyA9IHNldCgpCiAgICAgICAgIHNlbGYubGFiZWwgPSBsYWJlbAogICAgICAgICBzZWxmLmJpZCA9IEJsb2NrLl9jb3VudAogICAgICAgICBzZWxmLm5leHQgPSBbXQorICAgICAgICBzZWxmLnByZXYgPSBbXQogICAgICAgICBCbG9jay5fY291bnQgPSBCbG9jay5fY291bnQgKyAxCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CkBAIC0yNDEsNTEgKzE4Nyw0NiBAQAogCiAgICAgZGVmIGVtaXQoc2VsZiwgaW5zdCk6CiAgICAgICAgIG9wID0gaW5zdFswXQotICAgICAgICBpZiBvcFs6NF0gPT0gJ0pVTVAnOgotICAgICAgICAgICAgc2VsZi5vdXRFZGdlcy5hZGQoaW5zdFsxXSkKICAgICAgICAgc2VsZi5pbnN0cy5hcHBlbmQoaW5zdCkKIAogICAgIGRlZiBnZXRJbnN0cnVjdGlvbnMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmluc3RzCiAKLSAgICBkZWYgYWRkSW5FZGdlKHNlbGYsIGJsb2NrKToKLSAgICAgICAgc2VsZi5pbkVkZ2VzLmFkZChibG9jaykKLQogICAgIGRlZiBhZGRPdXRFZGdlKHNlbGYsIGJsb2NrKToKICAgICAgICAgc2VsZi5vdXRFZGdlcy5hZGQoYmxvY2spCiAKICAgICBkZWYgYWRkTmV4dChzZWxmLCBibG9jayk6CiAgICAgICAgIHNlbGYubmV4dC5hcHBlbmQoYmxvY2spCiAgICAgICAgIGFzc2VydCBsZW4oc2VsZi5uZXh0KSA9PSAxLCBtYXAoc3RyLCBzZWxmLm5leHQpCisgICAgICAgIGJsb2NrLnByZXYuYXBwZW5kKHNlbGYpCisgICAgICAgIGFzc2VydCBsZW4oYmxvY2sucHJldikgPT0gMSwgbWFwKHN0ciwgYmxvY2sucHJldikKIAotICAgIF91bmNvbmRfdHJhbnNmZXIgPSAoJ1JFVFVSTl9WQUxVRScsICdSQUlTRV9WQVJBUkdTJywgJ1lJRUxEX1ZBTFVFJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdKVU1QX0FCU09MVVRFJywgJ0pVTVBfRk9SV0FSRCcsICdDT05USU5VRV9MT09QJykKKyAgICBfdW5jb25kX3RyYW5zZmVyID0gKCdSRVRVUk5fVkFMVUUnLCAnUkFJU0VfVkFSQVJHUycsCisgICAgICAgICAgICAgICAgICAgICAgICAnSlVNUF9BQlNPTFVURScsICdKVU1QX0ZPUldBUkQnLCAnQ09OVElOVUVfTE9PUCcsCisgICAgICAgICAgICAgICAgICAgICAgICApCiAKLSAgICBkZWYgcHJ1bmVOZXh0KHNlbGYpOgotICAgICAgICAiIiJSZW1vdmUgYm9ndXMgZWRnZSBmb3IgdW5jb25kaXRpb25hbCB0cmFuc2ZlcnMKLQotICAgICAgICBFYWNoIGJsb2NrIGhhcyBhIG5leHQgZWRnZSB0aGF0IGFjY291bnRzIGZvciBpbXBsaWNpdCBjb250cm9sCi0gICAgICAgIHRyYW5zZmVycywgZS5nLiBmcm9tIGEgSlVNUF9JRl9GQUxTRSB0byB0aGUgYmxvY2sgdGhhdCB3aWxsIGJlCi0gICAgICAgIGV4ZWN1dGVkIGlmIHRoZSB0ZXN0IGlzIHRydWUuCi0KLSAgICAgICAgVGhlc2UgZWRnZXMgbXVzdCByZW1haW4gZm9yIHRoZSBjdXJyZW50IGFzc2VtYmxlciBjb2RlIHRvCi0gICAgICAgIHdvcmsuIElmIHRoZXkgYXJlIHJlbW92ZWQsIHRoZSBkZnNfcG9zdG9yZGVyIGdldHMgdGhpbmdzIGluCi0gICAgICAgIHdlaXJkIG9yZGVycy4gIEhvd2V2ZXIsIHRoZXkgc2hvdWxkbid0IGJlIHRoZXJlIGZvciBvdGhlcgotICAgICAgICBwdXJwb3NlcywgZS5nLiBjb252ZXJzaW9uIHRvIFNTQSBmb3JtLiAgVGhpcyBtZXRob2Qgd2lsbAotICAgICAgICByZW1vdmUgdGhlIG5leHQgZWRnZSB3aGVuIGl0IGZvbGxvd3MgYW4gdW5jb25kaXRpb25hbCBjb250cm9sCi0gICAgICAgIHRyYW5zZmVyLgotICAgICAgICAiIiIKKyAgICBkZWYgaGFzX3VuY29uZGl0aW9uYWxfdHJhbnNmZXIoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiB0aGVyZSBpcyBhbiB1bmNvbmRpdGlvbmFsIHRyYW5zZmVyIHRvIGFuIG90aGVyIGJsb2NrCisgICAgICAgIGF0IHRoZSBlbmQgb2YgdGhpcyBibG9jay4gVGhpcyBtZWFucyB0aGVyZSBpcyBubyByaXNrIGZvciB0aGUgYnl0ZWNvZGUKKyAgICAgICAgZXhlY3V0ZXIgdG8gZ28gcGFzdCB0aGlzIGJsb2NrJ3MgYnl0ZWNvZGUuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9wLCBhcmcgPSBzZWxmLmluc3RzWy0xXQogICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG9wIGluIHNlbGYuX3VuY29uZF90cmFuc2ZlcjoKLSAgICAgICAgICAgIHNlbGYubmV4dCA9IFtdCisgICAgICAgIHJldHVybiBvcCBpbiBzZWxmLl91bmNvbmRfdHJhbnNmZXIKIAogICAgIGRlZiBnZXRfY2hpbGRyZW4oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYubmV4dCBhbmQgc2VsZi5uZXh0WzBdIGluIHNlbGYub3V0RWRnZXM6Ci0gICAgICAgICAgICBzZWxmLm91dEVkZ2VzLnJlbW92ZShzZWxmLm5leHRbMF0pCi0gICAgICAgIHJldHVybiBzZWxmLm91dEVkZ2VzLmVsZW1lbnRzKCkgKyBzZWxmLm5leHQKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5vdXRFZGdlcykgKyBzZWxmLm5leHQKKworICAgIGRlZiBnZXRfZm9sbG93ZXJzKHNlbGYpOgorICAgICAgICAiIiJHZXQgdGhlIHdob2xlIGxpc3Qgb2YgZm9sbG93ZXJzLCBpbmNsdWRpbmcgdGhlIG5leHQgYmxvY2suIiIiCisgICAgICAgIGZvbGxvd2VycyA9IHNldChzZWxmLm5leHQpCisgICAgICAgICMgQmxvY2tzIHRoYXQgbXVzdCBiZSBlbWl0dGVkICphZnRlciogdGhpcyBvbmUsIGJlY2F1c2Ugb2YKKyAgICAgICAgIyBieXRlY29kZSBvZmZzZXRzIChlLmcuIHJlbGF0aXZlIGp1bXBzKSBwb2ludGluZyB0byB0aGVtLgorICAgICAgICBmb3IgaW5zdCBpbiBzZWxmLmluc3RzOgorICAgICAgICAgICAgaWYgaW5zdFswXSBpbiBQeUZsb3dHcmFwaC5oYXNqcmVsOgorICAgICAgICAgICAgICAgIGZvbGxvd2Vycy5hZGQoaW5zdFsxXSkKKyAgICAgICAgcmV0dXJuIGZvbGxvd2VycwogCiAgICAgZGVmIGdldENvbnRhaW5lZEdyYXBocyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFsbCBncmFwaHMgY29udGFpbmVkIHdpdGhpbiB0aGlzIGJsb2NrLgpAQCAtNDQ2LDE4ICszODcsMTggQEAKICAgICAgICAgICAgIGVsaWYgaW5zdFswXSAhPSAiU0VUX0xJTkVOTyI6CiAgICAgICAgICAgICAgICAgcGMgPSBwYyArIDMKICAgICAgICAgICAgIG9wbmFtZSA9IGluc3RbMF0KLSAgICAgICAgICAgIGlmIHNlbGYuaGFzanJlbC5oYXNfZWx0KG9wbmFtZSk6CisgICAgICAgICAgICBpZiBvcG5hbWUgaW4gc2VsZi5oYXNqcmVsOgogICAgICAgICAgICAgICAgIG9wYXJnID0gaW5zdFsxXQogICAgICAgICAgICAgICAgIG9mZnNldCA9IGJlZ2luW29wYXJnXSAtIHBjCiAgICAgICAgICAgICAgICAgaW5zdHNbaV0gPSBvcG5hbWUsIG9mZnNldAotICAgICAgICAgICAgZWxpZiBzZWxmLmhhc2phYnMuaGFzX2VsdChvcG5hbWUpOgorICAgICAgICAgICAgZWxpZiBvcG5hbWUgaW4gc2VsZi5oYXNqYWJzOgogICAgICAgICAgICAgICAgIGluc3RzW2ldID0gb3BuYW1lLCBiZWdpbltpbnN0WzFdXQogICAgICAgICBzZWxmLnN0YWdlID0gRkxBVAogCi0gICAgaGFzanJlbCA9IG1pc2MuU2V0KCkKKyAgICBoYXNqcmVsID0gc2V0KCkKICAgICBmb3IgaSBpbiBkaXMuaGFzanJlbDoKICAgICAgICAgaGFzanJlbC5hZGQoZGlzLm9wbmFtZVtpXSkKLSAgICBoYXNqYWJzID0gbWlzYy5TZXQoKQorICAgIGhhc2phYnMgPSBzZXQoKQogICAgIGZvciBpIGluIGRpcy5oYXNqYWJzOgogICAgICAgICBoYXNqYWJzLmFkZChkaXMub3BuYW1lW2ldKQogCkBAIC03NDQsNyArNjg1LDkgQEAKICAgICBlZmZlY3QgPSB7CiAgICAgICAgICdQT1BfVE9QJzogLTEsCiAgICAgICAgICdEVVBfVE9QJzogMSwKLSAgICAgICAgJ0xJU1RfQVBQRU5EJzogLTIsCisgICAgICAgICdMSVNUX0FQUEVORCc6IC0xLAorICAgICAgICAnU0VUX0FERCc6IC0xLAorICAgICAgICAnTUFQX0FERCc6IC0yLAogICAgICAgICAnU0xJQ0UrMSc6IC0xLAogICAgICAgICAnU0xJQ0UrMic6IC0xLAogICAgICAgICAnU0xJQ0UrMyc6IC0yLApAQCAtNzkzLDYgKzczNiw4IEBACiAgICAgICAgIHJldHVybiAtY291bnQrMQogICAgIGRlZiBCVUlMRF9MSVNUKHNlbGYsIGNvdW50KToKICAgICAgICAgcmV0dXJuIC1jb3VudCsxCisgICAgZGVmIEJVSUxEX1NFVChzZWxmLCBjb3VudCk6CisgICAgICAgIHJldHVybiAtY291bnQrMQogICAgIGRlZiBDQUxMX0ZVTkNUSU9OKHNlbGYsIGFyZ2MpOgogICAgICAgICBoaSwgbG8gPSBkaXZtb2QoYXJnYywgMjU2KQogICAgICAgICByZXR1cm4gLShsbyArIGhpICogMikKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlci9weWNvZGVnZW4ucHkgYi9MaWIvY29tcGlsZXIvcHljb2RlZ2VuLnB5CmluZGV4IDE3YThmNGEuLjRmMmVjZjIgMTAwNjQ0Ci0tLSBhL0xpYi9jb21waWxlci9weWNvZGVnZW4ucHkKKysrIGIvTGliL2NvbXBpbGVyL3B5Y29kZWdlbi5weQpAQCAtNyw3ICs3LDggQEAKIAogZnJvbSBjb21waWxlciBpbXBvcnQgYXN0LCBwYXJzZSwgd2Fsaywgc3ludGF4CiBmcm9tIGNvbXBpbGVyIGltcG9ydCBweWFzc2VtLCBtaXNjLCBmdXR1cmUsIHN5bWJvbHMKLWZyb20gY29tcGlsZXIuY29uc3RzIGltcG9ydCBTQ19MT0NBTCwgU0NfR0xPQkFMLCBTQ19GUkVFLCBTQ19DRUxMCitmcm9tIGNvbXBpbGVyLmNvbnN0cyBpbXBvcnQgU0NfTE9DQUwsIFNDX0dMT0JBTF9JTVBMSUNJVCwgU0NfR0xPQkFMX0VYUExJQ1QsIFwKKyAgICAgU0NfRlJFRSwgU0NfQ0VMTAogZnJvbSBjb21waWxlci5jb25zdHMgaW1wb3J0IChDT19WQVJBUkdTLCBDT19WQVJLRVlXT1JEUywgQ09fTkVXTE9DQUxTLAogICAgICBDT19ORVNURUQsIENPX0dFTkVSQVRPUiwgQ09fRlVUVVJFX0RJVklTSU9OLAogICAgICBDT19GVVRVUkVfQUJTSU1QT1JULCBDT19GVVRVUkVfV0lUSF9TVEFURU1FTlQsIENPX0ZVVFVSRV9QUklOVF9GVU5DVElPTikKQEAgLTI4Miw3ICsyODMsOSBAQAogICAgICAgICAgICAgICAgIHNlbGYuZW1pdChwcmVmaXggKyAnX05BTUUnLCBuYW1lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmVtaXQocHJlZml4ICsgJ19GQVNUJywgbmFtZSkKLSAgICAgICAgZWxpZiBzY29wZSA9PSBTQ19HTE9CQUw6CisgICAgICAgIGVsaWYgc2NvcGUgPT0gU0NfR0xPQkFMX0VYUExJQ1Q6CisgICAgICAgICAgICBzZWxmLmVtaXQocHJlZml4ICsgJ19HTE9CQUwnLCBuYW1lKQorICAgICAgICBlbGlmIHNjb3BlID09IFNDX0dMT0JBTF9JTVBMSUNJVDoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLm9wdGltaXplZDoKICAgICAgICAgICAgICAgICBzZWxmLmVtaXQocHJlZml4ICsgJ19OQU1FJywgbmFtZSkKICAgICAgICAgICAgIGVsc2U6CkBAIC00MTgsMTMgKzQyMSwxMSBAQAogICAgICAgICAgICAgc2VsZi5zZXRfbGluZW5vKHRlc3QpCiAgICAgICAgICAgICBzZWxmLnZpc2l0KHRlc3QpCiAgICAgICAgICAgICBuZXh0VGVzdCA9IHNlbGYubmV3QmxvY2soKQotICAgICAgICAgICAgc2VsZi5lbWl0KCdKVU1QX0lGX0ZBTFNFJywgbmV4dFRlc3QpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ1BPUF9KVU1QX0lGX0ZBTFNFJywgbmV4dFRlc3QpCiAgICAgICAgICAgICBzZWxmLm5leHRCbG9jaygpCi0gICAgICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQogICAgICAgICAgICAgc2VsZi52aXNpdChzdWl0ZSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9GT1JXQVJEJywgZW5kKQogICAgICAgICAgICAgc2VsZi5zdGFydEJsb2NrKG5leHRUZXN0KQotICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKICAgICAgICAgaWYgbm9kZS5lbHNlXzoKICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5lbHNlXykKICAgICAgICAgc2VsZi5uZXh0QmxvY2soZW5kKQpAQCAtNDQzLDE1ICs0NDQsMTMgQEAKIAogICAgICAgICBzZWxmLnNldF9saW5lbm8obm9kZSwgZm9yY2U9VHJ1ZSkKICAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCi0gICAgICAgIHNlbGYuZW1pdCgnSlVNUF9JRl9GQUxTRScsIGVsc2VfIG9yIGFmdGVyKQorICAgICAgICBzZWxmLmVtaXQoJ1BPUF9KVU1QX0lGX0ZBTFNFJywgZWxzZV8gb3IgYWZ0ZXIpCiAKICAgICAgICAgc2VsZi5uZXh0QmxvY2soKQotICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQogICAgICAgICBzZWxmLnZpc2l0KG5vZGUuYm9keSkKICAgICAgICAgc2VsZi5lbWl0KCdKVU1QX0FCU09MVVRFJywgbG9vcCkKIAogICAgICAgICBzZWxmLnN0YXJ0QmxvY2soZWxzZV8pICMgb3IganVzdCB0aGUgUE9QcyBpZiBub3QgZWxzZSBjbGF1c2UKLSAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKICAgICAgICAgc2VsZi5lbWl0KCdQT1BfQkxPQ0snKQogICAgICAgICBzZWxmLnNldHVwcy5wb3AoKQogICAgICAgICBpZiBub2RlLmVsc2VfOgpAQCAtNTIyLDI2ICs1MjEsMjMgQEAKICAgICAgICAgICAgIHNlbGYudmlzaXQoY2hpbGQpCiAgICAgICAgICAgICBzZWxmLmVtaXQoanVtcCwgZW5kKQogICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soKQotICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKICAgICAgICAgc2VsZi52aXNpdChub2RlLm5vZGVzWy0xXSkKICAgICAgICAgc2VsZi5uZXh0QmxvY2soZW5kKQogCiAgICAgZGVmIHZpc2l0QW5kKHNlbGYsIG5vZGUpOgotICAgICAgICBzZWxmLnZpc2l0VGVzdChub2RlLCAnSlVNUF9JRl9GQUxTRScpCisgICAgICAgIHNlbGYudmlzaXRUZXN0KG5vZGUsICdKVU1QX0lGX0ZBTFNFX09SX1BPUCcpCiAKICAgICBkZWYgdmlzaXRPcihzZWxmLCBub2RlKToKLSAgICAgICAgc2VsZi52aXNpdFRlc3Qobm9kZSwgJ0pVTVBfSUZfVFJVRScpCisgICAgICAgIHNlbGYudmlzaXRUZXN0KG5vZGUsICdKVU1QX0lGX1RSVUVfT1JfUE9QJykKIAogICAgIGRlZiB2aXNpdElmRXhwKHNlbGYsIG5vZGUpOgogICAgICAgICBlbmRibG9jayA9IHNlbGYubmV3QmxvY2soKQogICAgICAgICBlbHNlYmxvY2sgPSBzZWxmLm5ld0Jsb2NrKCkKICAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCi0gICAgICAgIHNlbGYuZW1pdCgnSlVNUF9JRl9GQUxTRScsIGVsc2VibG9jaykKLSAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKKyAgICAgICAgc2VsZi5lbWl0KCdQT1BfSlVNUF9JRl9GQUxTRScsIGVsc2VibG9jaykKICAgICAgICAgc2VsZi52aXNpdChub2RlLnRoZW4pCiAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9GT1JXQVJEJywgZW5kYmxvY2spCiAgICAgICAgIHNlbGYubmV4dEJsb2NrKGVsc2VibG9jaykKLSAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKICAgICAgICAgc2VsZi52aXNpdChub2RlLmVsc2VfKQogICAgICAgICBzZWxmLm5leHRCbG9jayhlbmRibG9jaykKIApAQCAtNTUzLDkgKzU0OSw4IEBACiAgICAgICAgICAgICBzZWxmLmVtaXQoJ0RVUF9UT1AnKQogICAgICAgICAgICAgc2VsZi5lbWl0KCdST1RfVEhSRUUnKQogICAgICAgICAgICAgc2VsZi5lbWl0KCdDT01QQVJFX09QJywgb3ApCi0gICAgICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfSUZfRkFMU0UnLCBjbGVhbnVwKQorICAgICAgICAgICAgc2VsZi5lbWl0KCdKVU1QX0lGX0ZBTFNFX09SX1BPUCcsIGNsZWFudXApCiAgICAgICAgICAgICBzZWxmLm5leHRCbG9jaygpCi0gICAgICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQogICAgICAgICAjIG5vdyBkbyB0aGUgbGFzdCBjb21wYXJpc29uCiAgICAgICAgIGlmIG5vZGUub3BzOgogICAgICAgICAgICAgb3AsIGNvZGUgPSBub2RlLm9wc1stMV0KQEAgLTU3MCwxNiArNTY1LDEwIEBACiAgICAgICAgICAgICBzZWxmLm5leHRCbG9jayhlbmQpCiAKICAgICAjIGxpc3QgY29tcHJlaGVuc2lvbnMKLSAgICBfX2xpc3RfY291bnQgPSAwCi0KICAgICBkZWYgdmlzaXRMaXN0Q29tcChzZWxmLCBub2RlKToKICAgICAgICAgc2VsZi5zZXRfbGluZW5vKG5vZGUpCiAgICAgICAgICMgc2V0dXAgbGlzdAotICAgICAgICB0bXBuYW1lID0gIiRsaXN0JWQiICUgc2VsZi5fX2xpc3RfY291bnQKLSAgICAgICAgc2VsZi5fX2xpc3RfY291bnQgPSBzZWxmLl9fbGlzdF9jb3VudCArIDEKICAgICAgICAgc2VsZi5lbWl0KCdCVUlMRF9MSVNUJywgMCkKLSAgICAgICAgc2VsZi5lbWl0KCdEVVBfVE9QJykKLSAgICAgICAgc2VsZi5faW1wbGljaXROYW1lT3AoJ1NUT1JFJywgdG1wbmFtZSkKIAogICAgICAgICBzdGFjayA9IFtdCiAgICAgICAgIGZvciBpLCBmb3JfIGluIHppcChyYW5nZShsZW4obm9kZS5xdWFscykpLCBub2RlLnF1YWxzKToKQEAgLTU5MSwyMiArNTgwLDYzIEBACiAgICAgICAgICAgICAgICAgc2VsZi52aXNpdChpZl8sIGNvbnQpCiAgICAgICAgICAgICBzdGFjay5pbnNlcnQoMCwgKHN0YXJ0LCBjb250LCBhbmNob3IpKQogCi0gICAgICAgIHNlbGYuX2ltcGxpY2l0TmFtZU9wKCdMT0FEJywgdG1wbmFtZSkKICAgICAgICAgc2VsZi52aXNpdChub2RlLmV4cHIpCi0gICAgICAgIHNlbGYuZW1pdCgnTElTVF9BUFBFTkQnKQorICAgICAgICBzZWxmLmVtaXQoJ0xJU1RfQVBQRU5EJywgbGVuKG5vZGUucXVhbHMpICsgMSkKIAogICAgICAgICBmb3Igc3RhcnQsIGNvbnQsIGFuY2hvciBpbiBzdGFjazoKICAgICAgICAgICAgIGlmIGNvbnQ6Ci0gICAgICAgICAgICAgICAgc2tpcF9vbmUgPSBzZWxmLm5ld0Jsb2NrKCkKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfRk9SV0FSRCcsIHNraXBfb25lKQotICAgICAgICAgICAgICAgIHNlbGYuc3RhcnRCbG9jayhjb250KQotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCi0gICAgICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soc2tpcF9vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soY29udCkKICAgICAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9BQlNPTFVURScsIHN0YXJ0KQogICAgICAgICAgICAgc2VsZi5zdGFydEJsb2NrKGFuY2hvcikKLSAgICAgICAgc2VsZi5faW1wbGljaXROYW1lT3AoJ0RFTEVURScsIHRtcG5hbWUpCiAKLSAgICAgICAgc2VsZi5fX2xpc3RfY291bnQgPSBzZWxmLl9fbGlzdF9jb3VudCAtIDEKKyAgICBkZWYgdmlzaXRTZXRDb21wKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLnNldF9saW5lbm8obm9kZSkKKyAgICAgICAgIyBzZXR1cCBsaXN0CisgICAgICAgIHNlbGYuZW1pdCgnQlVJTERfU0VUJywgMCkKKworICAgICAgICBzdGFjayA9IFtdCisgICAgICAgIGZvciBpLCBmb3JfIGluIHppcChyYW5nZShsZW4obm9kZS5xdWFscykpLCBub2RlLnF1YWxzKToKKyAgICAgICAgICAgIHN0YXJ0LCBhbmNob3IgPSBzZWxmLnZpc2l0KGZvcl8pCisgICAgICAgICAgICBjb250ID0gTm9uZQorICAgICAgICAgICAgZm9yIGlmXyBpbiBmb3JfLmlmczoKKyAgICAgICAgICAgICAgICBpZiBjb250IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnQgPSBzZWxmLm5ld0Jsb2NrKCkKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KGlmXywgY29udCkKKyAgICAgICAgICAgIHN0YWNrLmluc2VydCgwLCAoc3RhcnQsIGNvbnQsIGFuY2hvcikpCisKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmV4cHIpCisgICAgICAgIHNlbGYuZW1pdCgnU0VUX0FERCcsIGxlbihub2RlLnF1YWxzKSArIDEpCisKKyAgICAgICAgZm9yIHN0YXJ0LCBjb250LCBhbmNob3IgaW4gc3RhY2s6CisgICAgICAgICAgICBpZiBjb250OgorICAgICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKGNvbnQpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfQUJTT0xVVEUnLCBzdGFydCkKKyAgICAgICAgICAgIHNlbGYuc3RhcnRCbG9jayhhbmNob3IpCisKKyAgICBkZWYgdmlzaXREaWN0Q29tcChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5zZXRfbGluZW5vKG5vZGUpCisgICAgICAgICMgc2V0dXAgbGlzdAorICAgICAgICBzZWxmLmVtaXQoJ0JVSUxEX01BUCcsIDApCisKKyAgICAgICAgc3RhY2sgPSBbXQorICAgICAgICBmb3IgaSwgZm9yXyBpbiB6aXAocmFuZ2UobGVuKG5vZGUucXVhbHMpKSwgbm9kZS5xdWFscyk6CisgICAgICAgICAgICBzdGFydCwgYW5jaG9yID0gc2VsZi52aXNpdChmb3JfKQorICAgICAgICAgICAgY29udCA9IE5vbmUKKyAgICAgICAgICAgIGZvciBpZl8gaW4gZm9yXy5pZnM6CisgICAgICAgICAgICAgICAgaWYgY29udCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250ID0gc2VsZi5uZXdCbG9jaygpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChpZl8sIGNvbnQpCisgICAgICAgICAgICBzdGFjay5pbnNlcnQoMCwgKHN0YXJ0LCBjb250LCBhbmNob3IpKQorCisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmtleSkKKyAgICAgICAgc2VsZi5lbWl0KCdNQVBfQUREJywgbGVuKG5vZGUucXVhbHMpICsgMSkKKworICAgICAgICBmb3Igc3RhcnQsIGNvbnQsIGFuY2hvciBpbiBzdGFjazoKKyAgICAgICAgICAgIGlmIGNvbnQ6CisgICAgICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soY29udCkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9BQlNPTFVURScsIHN0YXJ0KQorICAgICAgICAgICAgc2VsZi5zdGFydEJsb2NrKGFuY2hvcikKIAogICAgIGRlZiB2aXNpdExpc3RDb21wRm9yKHNlbGYsIG5vZGUpOgogICAgICAgICBzdGFydCA9IHNlbGYubmV3QmxvY2soKQpAQCAtNjI0LDkgKzY1NCw4IEBACiAgICAgZGVmIHZpc2l0TGlzdENvbXBJZihzZWxmLCBub2RlLCBicmFuY2gpOgogICAgICAgICBzZWxmLnNldF9saW5lbm8obm9kZSwgZm9yY2U9VHJ1ZSkKICAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCi0gICAgICAgIHNlbGYuZW1pdCgnSlVNUF9JRl9GQUxTRScsIGJyYW5jaCkKKyAgICAgICAgc2VsZi5lbWl0KCdQT1BfSlVNUF9JRl9GQUxTRScsIGJyYW5jaCkKICAgICAgICAgc2VsZi5uZXdCbG9jaygpCi0gICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCiAKICAgICBkZWYgX21ha2VDbG9zdXJlKHNlbGYsIGdlbiwgYXJncyk6CiAgICAgICAgIGZyZWVzID0gZ2VuLnNjb3BlLmdldF9mcmVlX3ZhcnMoKQpAQCAtNjcyLDE2ICs3MDEsMTIgQEAKIAogICAgICAgICBmb3Igc3RhcnQsIGNvbnQsIGFuY2hvciwgZW5kIGluIHN0YWNrOgogICAgICAgICAgICAgaWYgY29udDoKLSAgICAgICAgICAgICAgICBza2lwX29uZSA9IHNlbGYubmV3QmxvY2soKQotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9GT1JXQVJEJywgc2tpcF9vbmUpCi0gICAgICAgICAgICAgICAgc2VsZi5zdGFydEJsb2NrKGNvbnQpCi0gICAgICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKLSAgICAgICAgICAgICAgICBzZWxmLm5leHRCbG9jayhza2lwX29uZSkKKyAgICAgICAgICAgICAgICBzZWxmLm5leHRCbG9jayhjb250KQogICAgICAgICAgICAgc2VsZi5lbWl0KCdKVU1QX0FCU09MVVRFJywgc3RhcnQpCiAgICAgICAgICAgICBzZWxmLnN0YXJ0QmxvY2soYW5jaG9yKQogICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfQkxPQ0snKQogICAgICAgICAgICAgc2VsZi5zZXR1cHMucG9wKCkKLSAgICAgICAgICAgIHNlbGYuc3RhcnRCbG9jayhlbmQpCisgICAgICAgICAgICBzZWxmLm5leHRCbG9jayhlbmQpCiAKICAgICAgICAgc2VsZi5lbWl0KCdMT0FEX0NPTlNUJywgTm9uZSkKIApAQCAtNzA5LDkgKzczNCw4IEBACiAgICAgZGVmIHZpc2l0R2VuRXhwcklmKHNlbGYsIG5vZGUsIGJyYW5jaCk6CiAgICAgICAgIHNlbGYuc2V0X2xpbmVubyhub2RlLCBmb3JjZT1UcnVlKQogICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGVzdCkKLSAgICAgICAgc2VsZi5lbWl0KCdKVU1QX0lGX0ZBTFNFJywgYnJhbmNoKQorICAgICAgICBzZWxmLmVtaXQoJ1BPUF9KVU1QX0lGX0ZBTFNFJywgYnJhbmNoKQogICAgICAgICBzZWxmLm5ld0Jsb2NrKCkKLSAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKIAogICAgICMgZXhjZXB0aW9uIHJlbGF0ZWQKIApAQCAtNzI2LDkgKzc1MCw4IEBACiAgICAgICAgICAgICAjIGlzIGEgc29ydCBvZiByZW5hbWluZyBvcC4KICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKCkKICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS50ZXN0KQotICAgICAgICAgICAgc2VsZi5lbWl0KCdKVU1QX0lGX1RSVUUnLCBlbmQpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ1BPUF9KVU1QX0lGX1RSVUUnLCBlbmQpCiAgICAgICAgICAgICBzZWxmLm5leHRCbG9jaygpCi0gICAgICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQogICAgICAgICAgICAgc2VsZi5lbWl0KCdMT0FEX0dMT0JBTCcsICdBc3NlcnRpb25FcnJvcicpCiAgICAgICAgICAgICBpZiBub2RlLmZhaWw6CiAgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLmZhaWwpCkBAIC03MzYsNyArNzU5LDYgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCdSQUlTRV9WQVJBUkdTJywgMSkKICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKGVuZCkKLSAgICAgICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCiAKICAgICBkZWYgdmlzaXRSYWlzZShzZWxmLCBub2RlKToKICAgICAgICAgc2VsZi5zZXRfbGluZW5vKG5vZGUpCkBAIC03NzksOSArODAxLDggQEAKICAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KGV4cHIpCiAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCdDT01QQVJFX09QJywgJ2V4Y2VwdGlvbiBtYXRjaCcpCiAgICAgICAgICAgICAgICAgbmV4dCA9IHNlbGYubmV3QmxvY2soKQotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9JRl9GQUxTRScsIG5leHQpCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfSlVNUF9JRl9GQUxTRScsIG5leHQpCiAgICAgICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soKQotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCiAgICAgICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQogICAgICAgICAgICAgaWYgdGFyZ2V0OgogICAgICAgICAgICAgICAgIHNlbGYudmlzaXQodGFyZ2V0KQpAQCAtNzk0LDggKzgxNSw2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2sobmV4dCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soKQotICAgICAgICAgICAgaWYgZXhwcjogIyBYWFgKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQogICAgICAgICBzZWxmLmVtaXQoJ0VORF9GSU5BTExZJykKICAgICAgICAgaWYgbm9kZS5lbHNlXzoKICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKGxFbHNlKQpAQCAtODI0LDggKzg0Myw4IEBACiAgICAgZGVmIHZpc2l0V2l0aChzZWxmLCBub2RlKToKICAgICAgICAgYm9keSA9IHNlbGYubmV3QmxvY2soKQogICAgICAgICBmaW5hbCA9IHNlbGYubmV3QmxvY2soKQotICAgICAgICB2YWx1ZXZhciA9ICIkdmFsdWUlZCIgJSBzZWxmLl9fd2l0aF9jb3VudAogICAgICAgICBzZWxmLl9fd2l0aF9jb3VudCArPSAxCisgICAgICAgIHZhbHVldmFyID0gIl9bJWRdIiAlIHNlbGYuX193aXRoX2NvdW50CiAgICAgICAgIHNlbGYuc2V0X2xpbmVubyhub2RlKQogICAgICAgICBzZWxmLnZpc2l0KG5vZGUuZXhwcikKICAgICAgICAgc2VsZi5lbWl0KCdEVVBfVE9QJykKQEAgLTEyNDUsNiArMTI2NCwxMiBAQAogICAgICAgICAgICAgc2VsZi52aXNpdChlbHQpCiAgICAgICAgIHNlbGYuZW1pdCgnQlVJTERfTElTVCcsIGxlbihub2RlLm5vZGVzKSkKIAorICAgIGRlZiB2aXNpdFNldChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5zZXRfbGluZW5vKG5vZGUpCisgICAgICAgIGZvciBlbHQgaW4gbm9kZS5ub2RlczoKKyAgICAgICAgICAgIHNlbGYudmlzaXQoZWx0KQorICAgICAgICBzZWxmLmVtaXQoJ0JVSUxEX1NFVCcsIGxlbihub2RlLm5vZGVzKSkKKwogICAgIGRlZiB2aXNpdFNsaWNlb2JqKHNlbGYsIG5vZGUpOgogICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5ub2RlczoKICAgICAgICAgICAgIHNlbGYudmlzaXQoY2hpbGQpCmRpZmYgLS1naXQgYS9MaWIvY29tcGlsZXIvc3ltYm9scy5weSBiL0xpYi9jb21waWxlci9zeW1ib2xzLnB5CmluZGV4IDBlNjYwYWUuLjBiYmRjNzEgMTAwNjQ0Ci0tLSBhL0xpYi9jb21waWxlci9zeW1ib2xzLnB5CisrKyBiL0xpYi9jb21waWxlci9zeW1ib2xzLnB5CkBAIC0xLDcgKzEsOCBAQAogIiIiTW9kdWxlIHN5bWJvbC10YWJsZSBnZW5lcmF0b3IiIiIKIAogZnJvbSBjb21waWxlciBpbXBvcnQgYXN0Ci1mcm9tIGNvbXBpbGVyLmNvbnN0cyBpbXBvcnQgU0NfTE9DQUwsIFNDX0dMT0JBTCwgU0NfRlJFRSwgU0NfQ0VMTCwgU0NfVU5LTk9XTgorZnJvbSBjb21waWxlci5jb25zdHMgaW1wb3J0IFNDX0xPQ0FMLCBTQ19HTE9CQUxfSU1QTElDSVQsIFNDX0dMT0JBTF9FWFBMSUNULCBcCisgICAgU0NfRlJFRSwgU0NfQ0VMTCwgU0NfVU5LTk9XTgogZnJvbSBjb21waWxlci5taXNjIGltcG9ydCBtYW5nbGUKIGltcG9ydCB0eXBlcwogCkBAIC04OSw3ICs5MCw3IEBACiAgICAgICAgIFRoZSBzY29wZSBvZiBhIG5hbWUgY291bGQgYmUgTE9DQUwsIEdMT0JBTCwgRlJFRSwgb3IgQ0VMTC4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5nbG9iYWxzOgotICAgICAgICAgICAgcmV0dXJuIFNDX0dMT0JBTAorICAgICAgICAgICAgcmV0dXJuIFNDX0dMT0JBTF9FWFBMSUNUCiAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5jZWxsczoKICAgICAgICAgICAgIHJldHVybiBTQ19DRUxMCiAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5kZWZzOgpAQCAtOTksNyArMTAwLDcgQEAKICAgICAgICAgaWYgc2VsZi5uZXN0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gU0NfVU5LTk9XTgogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIFNDX0dMT0JBTAorICAgICAgICAgICAgcmV0dXJuIFNDX0dMT0JBTF9JTVBMSUNJVAogCiAgICAgZGVmIGdldF9mcmVlX3ZhcnMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLm5lc3RlZDoKQEAgLTE1Miw3ICsxNTMsNyBAQAogICAgICAgICAgICAgICAgIGlmIHNjID09IFNDX1VOS05PV04gb3Igc2MgPT0gU0NfRlJFRSBcCiAgICAgICAgICAgICAgICAgICAgb3IgaXNpbnN0YW5jZShzZWxmLCBDbGFzc1Njb3BlKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcmVlc1tuYW1lXSA9IDEKLSAgICAgICAgICAgICAgICBlbGlmIHNjID09IFNDX0dMT0JBTDoKKyAgICAgICAgICAgICAgICBlbGlmIHNjID09IFNDX0dMT0JBTF9JTVBMSUNJVDoKICAgICAgICAgICAgICAgICAgICAgY2hpbGRfZ2xvYmFscy5hcHBlbmQobmFtZSkKICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZiwgRnVuY3Rpb25TY29wZSkgYW5kIHNjID09IFNDX0xPQ0FMOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmNlbGxzW25hbWVdID0gMQpkaWZmIC0tZ2l0IGEvTGliL2NvbXBpbGVyL3RyYW5zZm9ybWVyLnB5IGIvTGliL2NvbXBpbGVyL3RyYW5zZm9ybWVyLnB5CmluZGV4IGY1ZmU1ODIuLmQ0ZjQ2MTMgMTAwNjQ0Ci0tLSBhL0xpYi9jb21waWxlci90cmFuc2Zvcm1lci5weQorKysgYi9MaWIvY29tcGlsZXIvdHJhbnNmb3JtZXIucHkKQEAgLTU4MSw4ICs1ODEsMTAgQEAKICAgICB0ZXN0bGlzdDEgPSB0ZXN0bGlzdAogICAgIGV4cHJsaXN0ID0gdGVzdGxpc3QKIAotICAgIGRlZiB0ZXN0bGlzdF9nZXhwKHNlbGYsIG5vZGVsaXN0KToKLSAgICAgICAgaWYgbGVuKG5vZGVsaXN0KSA9PSAyIGFuZCBub2RlbGlzdFsxXVswXSA9PSBzeW1ib2wuZ2VuX2ZvcjoKKyAgICBkZWYgdGVzdGxpc3RfY29tcChzZWxmLCBub2RlbGlzdCk6CisgICAgICAgICMgdGVzdCAoIGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10gKQorICAgICAgICBhc3NlcnQgbm9kZWxpc3RbMF1bMF0gPT0gc3ltYm9sLnRlc3QKKyAgICAgICAgaWYgbGVuKG5vZGVsaXN0KSA9PSAyIGFuZCBub2RlbGlzdFsxXVswXSA9PSBzeW1ib2wuY29tcF9mb3I6CiAgICAgICAgICAgICB0ZXN0ID0gc2VsZi5jb21fbm9kZShub2RlbGlzdFswXSkKICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbV9nZW5lcmF0b3JfZXhwcmVzc2lvbih0ZXN0LCBub2RlbGlzdFsxXSkKICAgICAgICAgcmV0dXJuIHNlbGYudGVzdGxpc3Qobm9kZWxpc3QpCkBAIC03NDksNyArNzUxLDcgQEAKICAgICBkZWYgYXRvbV9sYnJhY2Uoc2VsZiwgbm9kZWxpc3QpOgogICAgICAgICBpZiBub2RlbGlzdFsxXVswXSA9PSB0b2tlbi5SQlJBQ0U6CiAgICAgICAgICAgICByZXR1cm4gRGljdCgoKSwgbGluZW5vPW5vZGVsaXN0WzBdWzJdKQotICAgICAgICByZXR1cm4gc2VsZi5jb21fZGljdG1ha2VyKG5vZGVsaXN0WzFdKQorICAgICAgICByZXR1cm4gc2VsZi5jb21fZGljdG9yc2V0bWFrZXIobm9kZWxpc3RbMV0pCiAKICAgICBkZWYgYXRvbV9iYWNrcXVvdGUoc2VsZiwgbm9kZWxpc3QpOgogICAgICAgICByZXR1cm4gQmFja3F1b3RlKHNlbGYuY29tX25vZGUobm9kZWxpc3RbMV0pKQpAQCAtOTY1LDE4ICs5NjcsMjIgQEAKICAgICAgICAgICAgIHJldHVybiB0cnlfZXhjZXB0CiAKICAgICBkZWYgY29tX3dpdGgoc2VsZiwgbm9kZWxpc3QpOgotICAgICAgICAjIHdpdGhfc3RtdDogJ3dpdGgnIGV4cHIgW3dpdGhfdmFyXSAnOicgc3VpdGUKLSAgICAgICAgZXhwciA9IHNlbGYuY29tX25vZGUobm9kZWxpc3RbMV0pCisgICAgICAgICMgd2l0aF9zdG10OiAnd2l0aCcgd2l0aF9pdGVtICgnLCcgd2l0aF9pdGVtKSogJzonIHN1aXRlCiAgICAgICAgIGJvZHkgPSBzZWxmLmNvbV9ub2RlKG5vZGVsaXN0Wy0xXSkKLSAgICAgICAgaWYgbm9kZWxpc3RbMl1bMF0gPT0gdG9rZW4uQ09MT046Ci0gICAgICAgICAgICB2YXIgPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB2YXIgPSBzZWxmLmNvbV9hc3NpZ24obm9kZWxpc3RbMl1bMl0sIE9QX0FTU0lHTikKLSAgICAgICAgcmV0dXJuIFdpdGgoZXhwciwgdmFyLCBib2R5LCBsaW5lbm89bm9kZWxpc3RbMF1bMl0pCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihub2RlbGlzdCkgLSAzLCAwLCAtMik6CisgICAgICAgICAgICByZXQgPSBzZWxmLmNvbV93aXRoX2l0ZW0obm9kZWxpc3RbaV0sIGJvZHksIG5vZGVsaXN0WzBdWzJdKQorICAgICAgICAgICAgaWYgaSA9PSAxOgorICAgICAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgICAgIGJvZHkgPSByZXQKIAotICAgIGRlZiBjb21fd2l0aF92YXIoc2VsZiwgbm9kZWxpc3QpOgotICAgICAgICAjIHdpdGhfdmFyOiAnYXMnIGV4cHIKLSAgICAgICAgcmV0dXJuIHNlbGYuY29tX25vZGUobm9kZWxpc3RbMV0pCisgICAgZGVmIGNvbV93aXRoX2l0ZW0oc2VsZiwgbm9kZWxpc3QsIGJvZHksIGxpbmVubyk6CisgICAgICAgICMgd2l0aF9pdGVtOiB0ZXN0IFsnYXMnIGV4cHJdCisgICAgICAgIGlmIGxlbihub2RlbGlzdCkgPT0gNDoKKyAgICAgICAgICAgIHZhciA9IHNlbGYuY29tX2Fzc2lnbihub2RlbGlzdFszXSwgT1BfQVNTSUdOKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFyID0gTm9uZQorICAgICAgICBleHByID0gc2VsZi5jb21fbm9kZShub2RlbGlzdFsxXSkKKyAgICAgICAgcmV0dXJuIFdpdGgoZXhwciwgdmFyLCBib2R5LCBsaW5lbm89bGluZW5vKQogCiAgICAgZGVmIGNvbV9hdWdhc3NpZ25fb3Aoc2VsZiwgbm9kZSk6CiAgICAgICAgIGFzc2VydCBub2RlWzBdID09IHN5bWJvbC5hdWdhc3NpZ24KQEAgLTk5Nyw3ICsxMDAzLDcgQEAKICAgICAgICAgIyBsb29wIHRvIGF2b2lkIHRyaXZpYWwgcmVjdXJzaW9uCiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0ID0gbm9kZVswXQotICAgICAgICAgICAgaWYgdCBpbiAoc3ltYm9sLmV4cHJsaXN0LCBzeW1ib2wudGVzdGxpc3QsIHN5bWJvbC50ZXN0bGlzdF9zYWZlLCBzeW1ib2wudGVzdGxpc3RfZ2V4cCk6CisgICAgICAgICAgICBpZiB0IGluIChzeW1ib2wuZXhwcmxpc3QsIHN5bWJvbC50ZXN0bGlzdCwgc3ltYm9sLnRlc3RsaXN0X3NhZmUsIHN5bWJvbC50ZXN0bGlzdF9jb21wKToKICAgICAgICAgICAgICAgICBpZiBsZW4obm9kZSkgPiAyOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21fYXNzaWduX3R1cGxlKG5vZGUsIGFzc2lnbmluZykKICAgICAgICAgICAgICAgICBub2RlID0gbm9kZVsxXQpAQCAtMTA5NSwxMTEgKzExMDEsMTQxIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdG10cy5hcHBlbmQocmVzdWx0KQogCi0gICAgaWYgaGFzYXR0cihzeW1ib2wsICdsaXN0X2ZvcicpOgotICAgICAgICBkZWYgY29tX2xpc3RfY29uc3RydWN0b3Ioc2VsZiwgbm9kZWxpc3QpOgotICAgICAgICAgICAgIyBsaXN0bWFrZXI6IHRlc3QgKCBsaXN0X2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddICkKLSAgICAgICAgICAgIHZhbHVlcyA9IFtdCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4obm9kZWxpc3QpKToKLSAgICAgICAgICAgICAgICBpZiBub2RlbGlzdFtpXVswXSA9PSBzeW1ib2wubGlzdF9mb3I6Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obm9kZWxpc3RbaTpdKSA9PSAxCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbV9saXN0X2NvbXByZWhlbnNpb24odmFsdWVzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVsaXN0W2ldKQotICAgICAgICAgICAgICAgIGVsaWYgbm9kZWxpc3RbaV1bMF0gPT0gdG9rZW4uQ09NTUE6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChzZWxmLmNvbV9ub2RlKG5vZGVsaXN0W2ldKSkKLSAgICAgICAgICAgIHJldHVybiBMaXN0KHZhbHVlcywgbGluZW5vPXZhbHVlc1swXS5saW5lbm8pCisgICAgZGVmIGNvbV9saXN0X2NvbnN0cnVjdG9yKHNlbGYsIG5vZGVsaXN0KToKKyAgICAgICAgIyBsaXN0bWFrZXI6IHRlc3QgKCBsaXN0X2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddICkKKyAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG5vZGVsaXN0KSk6CisgICAgICAgICAgICBpZiBub2RlbGlzdFtpXVswXSA9PSBzeW1ib2wubGlzdF9mb3I6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihub2RlbGlzdFtpOl0pID09IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21fbGlzdF9jb21wcmVoZW5zaW9uKHZhbHVlc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVsaXN0W2ldKQorICAgICAgICAgICAgZWxpZiBub2RlbGlzdFtpXVswXSA9PSB0b2tlbi5DT01NQToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChzZWxmLmNvbV9ub2RlKG5vZGVsaXN0W2ldKSkKKyAgICAgICAgcmV0dXJuIExpc3QodmFsdWVzLCBsaW5lbm89dmFsdWVzWzBdLmxpbmVubykKIAotICAgICAgICBkZWYgY29tX2xpc3RfY29tcHJlaGVuc2lvbihzZWxmLCBleHByLCBub2RlKToKLSAgICAgICAgICAgICMgbGlzdF9pdGVyOiBsaXN0X2ZvciB8IGxpc3RfaWYKLSAgICAgICAgICAgICMgbGlzdF9mb3I6ICdmb3InIGV4cHJsaXN0ICdpbicgdGVzdGxpc3QgW2xpc3RfaXRlcl0KLSAgICAgICAgICAgICMgbGlzdF9pZjogJ2lmJyB0ZXN0IFtsaXN0X2l0ZXJdCisgICAgZGVmIGNvbV9saXN0X2NvbXByZWhlbnNpb24oc2VsZiwgZXhwciwgbm9kZSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbV9jb21wcmVoZW5zaW9uKGV4cHIsIE5vbmUsIG5vZGUsICdsaXN0JykKIAotICAgICAgICAgICAgIyBYWFggc2hvdWxkIHJhaXNlIFN5bnRheEVycm9yIGZvciBhc3NpZ25tZW50CisgICAgZGVmIGNvbV9jb21wcmVoZW5zaW9uKHNlbGYsIGV4cHIxLCBleHByMiwgbm9kZSwgdHlwZSk6CisgICAgICAgICMgbGlzdF9pdGVyOiBsaXN0X2ZvciB8IGxpc3RfaWYKKyAgICAgICAgIyBsaXN0X2ZvcjogJ2ZvcicgZXhwcmxpc3QgJ2luJyB0ZXN0bGlzdCBbbGlzdF9pdGVyXQorICAgICAgICAjIGxpc3RfaWY6ICdpZicgdGVzdCBbbGlzdF9pdGVyXQogCi0gICAgICAgICAgICBsaW5lbm8gPSBub2RlWzFdWzJdCi0gICAgICAgICAgICBmb3JzID0gW10KLSAgICAgICAgICAgIHdoaWxlIG5vZGU6Ci0gICAgICAgICAgICAgICAgdCA9IG5vZGVbMV1bMV0KLSAgICAgICAgICAgICAgICBpZiB0ID09ICdmb3InOgotICAgICAgICAgICAgICAgICAgICBhc3NpZ25Ob2RlID0gc2VsZi5jb21fYXNzaWduKG5vZGVbMl0sIE9QX0FTU0lHTikKLSAgICAgICAgICAgICAgICAgICAgbGlzdE5vZGUgPSBzZWxmLmNvbV9ub2RlKG5vZGVbNF0pCi0gICAgICAgICAgICAgICAgICAgIG5ld2ZvciA9IExpc3RDb21wRm9yKGFzc2lnbk5vZGUsIGxpc3ROb2RlLCBbXSkKLSAgICAgICAgICAgICAgICAgICAgbmV3Zm9yLmxpbmVubyA9IG5vZGVbMV1bMl0KLSAgICAgICAgICAgICAgICAgICAgZm9ycy5hcHBlbmQobmV3Zm9yKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4obm9kZSkgPT0gNToKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5jb21fbGlzdF9pdGVyKG5vZGVbNV0pCi0gICAgICAgICAgICAgICAgZWxpZiB0ID09ICdpZic6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3QgPSBzZWxmLmNvbV9ub2RlKG5vZGVbMl0pCi0gICAgICAgICAgICAgICAgICAgIG5ld2lmID0gTGlzdENvbXBJZih0ZXN0LCBsaW5lbm89bm9kZVsxXVsyXSkKLSAgICAgICAgICAgICAgICAgICAgbmV3Zm9yLmlmcy5hcHBlbmQobmV3aWYpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbihub2RlKSA9PSAzOgotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzZWxmLmNvbV9saXN0X2l0ZXIobm9kZVszXSkKKyAgICAgICAgIyBYWFggc2hvdWxkIHJhaXNlIFN5bnRheEVycm9yIGZvciBhc3NpZ25tZW50CisgICAgICAgICMgWFhYKGF2YXNzYWxvdHRpKSBTZXQgYW5kIGRpY3QgY29tcHJlaGVuc2lvbnMgc2hvdWxkIGhhdmUgZ2VuZXJhdG9yCisgICAgICAgICMgICAgICAgICAgICAgICAgICBzZW1hbnRpY3MuIEluIG90aGVyIHdvcmRzLCB0aGV5IHNob3VsZG4ndCBsZWFrCisgICAgICAgICMgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgb3V0c2lkZSBvZiB0aGUgY29tcHJlaGVuc2lvbidzIHNjb3BlLgorCisgICAgICAgIGxpbmVubyA9IG5vZGVbMV1bMl0KKyAgICAgICAgZm9ycyA9IFtdCisgICAgICAgIHdoaWxlIG5vZGU6CisgICAgICAgICAgICB0ID0gbm9kZVsxXVsxXQorICAgICAgICAgICAgaWYgdCA9PSAnZm9yJzoKKyAgICAgICAgICAgICAgICBhc3NpZ25Ob2RlID0gc2VsZi5jb21fYXNzaWduKG5vZGVbMl0sIE9QX0FTU0lHTikKKyAgICAgICAgICAgICAgICBjb21wTm9kZSA9IHNlbGYuY29tX25vZGUobm9kZVs0XSkKKyAgICAgICAgICAgICAgICBuZXdmb3IgPSBMaXN0Q29tcEZvcihhc3NpZ25Ob2RlLCBjb21wTm9kZSwgW10pCisgICAgICAgICAgICAgICAgbmV3Zm9yLmxpbmVubyA9IG5vZGVbMV1bMl0KKyAgICAgICAgICAgICAgICBmb3JzLmFwcGVuZChuZXdmb3IpCisgICAgICAgICAgICAgICAgaWYgbGVuKG5vZGUpID09IDU6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb25lCisgICAgICAgICAgICAgICAgZWxpZiB0eXBlID09ICdsaXN0JzoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHNlbGYuY29tX2xpc3RfaXRlcihub2RlWzVdKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgidW5leHBlY3RlZCBsaXN0IGNvbXByZWhlbnNpb24gZWxlbWVudDogJXMgJWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAlIChub2RlLCBsaW5lbm8pKQotICAgICAgICAgICAgcmV0dXJuIExpc3RDb21wKGV4cHIsIGZvcnMsIGxpbmVubz1saW5lbm8pCi0KLSAgICAgICAgZGVmIGNvbV9saXN0X2l0ZXIoc2VsZiwgbm9kZSk6Ci0gICAgICAgICAgICBhc3NlcnQgbm9kZVswXSA9PSBzeW1ib2wubGlzdF9pdGVyCi0gICAgICAgICAgICByZXR1cm4gbm9kZVsxXQotICAgIGVsc2U6Ci0gICAgICAgIGRlZiBjb21fbGlzdF9jb25zdHJ1Y3RvcihzZWxmLCBub2RlbGlzdCk6Ci0gICAgICAgICAgICB2YWx1ZXMgPSBbXQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG5vZGVsaXN0KSwgMik6Ci0gICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChzZWxmLmNvbV9ub2RlKG5vZGVsaXN0W2ldKSkKLSAgICAgICAgICAgIHJldHVybiBMaXN0KHZhbHVlcywgbGluZW5vPXZhbHVlc1swXS5saW5lbm8pCi0KLSAgICBpZiBoYXNhdHRyKHN5bWJvbCwgJ2dlbl9mb3InKToKLSAgICAgICAgZGVmIGNvbV9nZW5lcmF0b3JfZXhwcmVzc2lvbihzZWxmLCBleHByLCBub2RlKToKLSAgICAgICAgICAgICMgZ2VuX2l0ZXI6IGdlbl9mb3IgfCBnZW5faWYKLSAgICAgICAgICAgICMgZ2VuX2ZvcjogJ2ZvcicgZXhwcmxpc3QgJ2luJyB0ZXN0IFtnZW5faXRlcl0KLSAgICAgICAgICAgICMgZ2VuX2lmOiAnaWYnIHRlc3QgW2dlbl9pdGVyXQotCi0gICAgICAgICAgICBsaW5lbm8gPSBub2RlWzFdWzJdCi0gICAgICAgICAgICBmb3JzID0gW10KLSAgICAgICAgICAgIHdoaWxlIG5vZGU6Ci0gICAgICAgICAgICAgICAgdCA9IG5vZGVbMV1bMV0KLSAgICAgICAgICAgICAgICBpZiB0ID09ICdmb3InOgotICAgICAgICAgICAgICAgICAgICBhc3NpZ25Ob2RlID0gc2VsZi5jb21fYXNzaWduKG5vZGVbMl0sIE9QX0FTU0lHTikKLSAgICAgICAgICAgICAgICAgICAgZ2VuTm9kZSA9IHNlbGYuY29tX25vZGUobm9kZVs0XSkKLSAgICAgICAgICAgICAgICAgICAgbmV3Zm9yID0gR2VuRXhwckZvcihhc3NpZ25Ob2RlLCBnZW5Ob2RlLCBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm89bm9kZVsxXVsyXSkKLSAgICAgICAgICAgICAgICAgICAgZm9ycy5hcHBlbmQobmV3Zm9yKQotICAgICAgICAgICAgICAgICAgICBpZiAobGVuKG5vZGUpKSA9PSA1OgotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzZWxmLmNvbV9nZW5faXRlcihub2RlWzVdKQotICAgICAgICAgICAgICAgIGVsaWYgdCA9PSAnaWYnOgotICAgICAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi5jb21fbm9kZShub2RlWzJdKQotICAgICAgICAgICAgICAgICAgICBuZXdpZiA9IEdlbkV4cHJJZih0ZXN0LCBsaW5lbm89bm9kZVsxXVsyXSkKLSAgICAgICAgICAgICAgICAgICAgbmV3Zm9yLmlmcy5hcHBlbmQobmV3aWYpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbihub2RlKSA9PSAzOgotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzZWxmLmNvbV9nZW5faXRlcihub2RlWzNdKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5jb21fY29tcF9pdGVyKG5vZGVbNV0pCisgICAgICAgICAgICBlbGlmIHQgPT0gJ2lmJzoKKyAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi5jb21fbm9kZShub2RlWzJdKQorICAgICAgICAgICAgICAgIG5ld2lmID0gTGlzdENvbXBJZih0ZXN0LCBsaW5lbm89bm9kZVsxXVsyXSkKKyAgICAgICAgICAgICAgICBuZXdmb3IuaWZzLmFwcGVuZChuZXdpZikKKyAgICAgICAgICAgICAgICBpZiBsZW4obm9kZSkgPT0gMzoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbGlmIHR5cGUgPT0gJ2xpc3QnOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5jb21fbGlzdF9pdGVyKG5vZGVbM10pCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInVuZXhwZWN0ZWQgZ2VuZXJhdG9yIGV4cHJlc3Npb24gZWxlbWVudDogJXMgJWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG5vZGUsIGxpbmVubykpCi0gICAgICAgICAgICBmb3JzWzBdLmlzX291dG1vc3QgPSBUcnVlCi0gICAgICAgICAgICByZXR1cm4gR2VuRXhwcihHZW5FeHBySW5uZXIoZXhwciwgZm9ycyksIGxpbmVubz1saW5lbm8pCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzZWxmLmNvbV9jb21wX2l0ZXIobm9kZVszXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAoInVuZXhwZWN0ZWQgY29tcHJlaGVuc2lvbiBlbGVtZW50OiAlcyAlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgJSAobm9kZSwgbGluZW5vKSkKKyAgICAgICAgaWYgdHlwZSA9PSAnbGlzdCc6CisgICAgICAgICAgICByZXR1cm4gTGlzdENvbXAoZXhwcjEsIGZvcnMsIGxpbmVubz1saW5lbm8pCisgICAgICAgIGVsaWYgdHlwZSA9PSAnc2V0JzoKKyAgICAgICAgICAgIHJldHVybiBTZXRDb21wKGV4cHIxLCBmb3JzLCBsaW5lbm89bGluZW5vKQorICAgICAgICBlbGlmIHR5cGUgPT0gJ2RpY3QnOgorICAgICAgICAgICAgcmV0dXJuIERpY3RDb21wKGV4cHIxLCBleHByMiwgZm9ycywgbGluZW5vPWxpbmVubykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuZXhwZWN0ZWQgY29tcHJlaGVuc2lvbiB0eXBlOiAiICsgcmVwcih0eXBlKSkKIAotICAgICAgICBkZWYgY29tX2dlbl9pdGVyKHNlbGYsIG5vZGUpOgotICAgICAgICAgICAgYXNzZXJ0IG5vZGVbMF0gPT0gc3ltYm9sLmdlbl9pdGVyCi0gICAgICAgICAgICByZXR1cm4gbm9kZVsxXQorICAgIGRlZiBjb21fbGlzdF9pdGVyKHNlbGYsIG5vZGUpOgorICAgICAgICBhc3NlcnQgbm9kZVswXSA9PSBzeW1ib2wubGlzdF9pdGVyCisgICAgICAgIHJldHVybiBub2RlWzFdCiAKLSAgICBkZWYgY29tX2RpY3RtYWtlcihzZWxmLCBub2RlbGlzdCk6Ci0gICAgICAgICMgZGljdG1ha2VyOiB0ZXN0ICc6JyB0ZXN0ICgnLCcgdGVzdCAnOicgdmFsdWUpKiBbJywnXQotICAgICAgICBpdGVtcyA9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihub2RlbGlzdCksIDQpOgotICAgICAgICAgICAgaXRlbXMuYXBwZW5kKChzZWxmLmNvbV9ub2RlKG5vZGVsaXN0W2ldKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21fbm9kZShub2RlbGlzdFtpKzJdKSkpCi0gICAgICAgIHJldHVybiBEaWN0KGl0ZW1zLCBsaW5lbm89aXRlbXNbMF1bMF0ubGluZW5vKQorICAgIGRlZiBjb21fY29tcF9pdGVyKHNlbGYsIG5vZGUpOgorICAgICAgICBhc3NlcnQgbm9kZVswXSA9PSBzeW1ib2wuY29tcF9pdGVyCisgICAgICAgIHJldHVybiBub2RlWzFdCisKKyAgICBkZWYgY29tX2dlbmVyYXRvcl9leHByZXNzaW9uKHNlbGYsIGV4cHIsIG5vZGUpOgorICAgICAgICAjIGNvbXBfaXRlcjogY29tcF9mb3IgfCBjb21wX2lmCisgICAgICAgICMgY29tcF9mb3I6ICdmb3InIGV4cHJsaXN0ICdpbicgdGVzdCBbY29tcF9pdGVyXQorICAgICAgICAjIGNvbXBfaWY6ICdpZicgdGVzdCBbY29tcF9pdGVyXQorCisgICAgICAgIGxpbmVubyA9IG5vZGVbMV1bMl0KKyAgICAgICAgZm9ycyA9IFtdCisgICAgICAgIHdoaWxlIG5vZGU6CisgICAgICAgICAgICB0ID0gbm9kZVsxXVsxXQorICAgICAgICAgICAgaWYgdCA9PSAnZm9yJzoKKyAgICAgICAgICAgICAgICBhc3NpZ25Ob2RlID0gc2VsZi5jb21fYXNzaWduKG5vZGVbMl0sIE9QX0FTU0lHTikKKyAgICAgICAgICAgICAgICBnZW5Ob2RlID0gc2VsZi5jb21fbm9kZShub2RlWzRdKQorICAgICAgICAgICAgICAgIG5ld2ZvciA9IEdlbkV4cHJGb3IoYXNzaWduTm9kZSwgZ2VuTm9kZSwgW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm89bm9kZVsxXVsyXSkKKyAgICAgICAgICAgICAgICBmb3JzLmFwcGVuZChuZXdmb3IpCisgICAgICAgICAgICAgICAgaWYgKGxlbihub2RlKSkgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5jb21fY29tcF9pdGVyKG5vZGVbNV0pCisgICAgICAgICAgICBlbGlmIHQgPT0gJ2lmJzoKKyAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi5jb21fbm9kZShub2RlWzJdKQorICAgICAgICAgICAgICAgIG5ld2lmID0gR2VuRXhwcklmKHRlc3QsIGxpbmVubz1ub2RlWzFdWzJdKQorICAgICAgICAgICAgICAgIG5ld2Zvci5pZnMuYXBwZW5kKG5ld2lmKQorICAgICAgICAgICAgICAgIGlmIGxlbihub2RlKSA9PSAzOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzZWxmLmNvbV9jb21wX2l0ZXIobm9kZVszXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICgidW5leHBlY3RlZCBnZW5lcmF0b3IgZXhwcmVzc2lvbiBlbGVtZW50OiAlcyAlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChub2RlLCBsaW5lbm8pKQorICAgICAgICBmb3JzWzBdLmlzX291dG1vc3QgPSBUcnVlCisgICAgICAgIHJldHVybiBHZW5FeHByKEdlbkV4cHJJbm5lcihleHByLCBmb3JzKSwgbGluZW5vPWxpbmVubykKKworICAgIGRlZiBjb21fZGljdG9yc2V0bWFrZXIoc2VsZiwgbm9kZWxpc3QpOgorICAgICAgICAjIGRpY3RvcnNldG1ha2VyOiAoICh0ZXN0ICc6JyB0ZXN0IChjb21wX2ZvciB8ICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddKSkgfAorICAgICAgICAjICAgICAgICAgICAgICAgICAgICh0ZXN0IChjb21wX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddKSkgKQorICAgICAgICBhc3NlcnQgbm9kZWxpc3RbMF0gPT0gc3ltYm9sLmRpY3RvcnNldG1ha2VyCisgICAgICAgIG5vZGVsaXN0ID0gbm9kZWxpc3RbMTpdCisgICAgICAgIGlmIGxlbihub2RlbGlzdCkgPT0gMSBvciBub2RlbGlzdFsxXVswXSA9PSB0b2tlbi5DT01NQToKKyAgICAgICAgICAgICMgc2V0IGxpdGVyYWwKKyAgICAgICAgICAgIGl0ZW1zID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihub2RlbGlzdCksIDIpOgorICAgICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChzZWxmLmNvbV9ub2RlKG5vZGVsaXN0W2ldKSkKKyAgICAgICAgICAgIHJldHVybiBTZXQoaXRlbXMsIGxpbmVubz1pdGVtc1swXS5saW5lbm8pCisgICAgICAgIGVsaWYgbm9kZWxpc3RbMV1bMF0gPT0gc3ltYm9sLmNvbXBfZm9yOgorICAgICAgICAgICAgIyBzZXQgY29tcHJlaGVuc2lvbgorICAgICAgICAgICAgZXhwciA9IHNlbGYuY29tX25vZGUobm9kZWxpc3RbMF0pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21fY29tcHJlaGVuc2lvbihleHByLCBOb25lLCBub2RlbGlzdFsxXSwgJ3NldCcpCisgICAgICAgIGVsaWYgbGVuKG5vZGVsaXN0KSA+IDMgYW5kIG5vZGVsaXN0WzNdWzBdID09IHN5bWJvbC5jb21wX2ZvcjoKKyAgICAgICAgICAgICMgZGljdCBjb21wcmVoZW5zaW9uCisgICAgICAgICAgICBhc3NlcnQgbm9kZWxpc3RbMV1bMF0gPT0gdG9rZW4uQ09MT04KKyAgICAgICAgICAgIGtleSA9IHNlbGYuY29tX25vZGUobm9kZWxpc3RbMF0pCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuY29tX25vZGUobm9kZWxpc3RbMl0pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21fY29tcHJlaGVuc2lvbihrZXksIHZhbHVlLCBub2RlbGlzdFszXSwgJ2RpY3QnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBkaWN0IGxpdGVyYWwKKyAgICAgICAgICAgIGl0ZW1zID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihub2RlbGlzdCksIDQpOgorICAgICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZCgoc2VsZi5jb21fbm9kZShub2RlbGlzdFtpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbV9ub2RlKG5vZGVsaXN0W2krMl0pKSkKKyAgICAgICAgICAgIHJldHVybiBEaWN0KGl0ZW1zLCBsaW5lbm89aXRlbXNbMF1bMF0ubGluZW5vKQogCiAgICAgZGVmIGNvbV9hcHBseV90cmFpbGVyKHNlbGYsIHByaW1hcnlOb2RlLCBub2RlbGlzdCk6CiAgICAgICAgIHQgPSBub2RlbGlzdFsxXVswXQpAQCAtMTI0NSw3ICsxMjgxLDcgQEAKICAgICAgICAgICAgIGt3LCByZXN1bHQgPSBzZWxmLmNvbV9hcmd1bWVudChub2RlLCBrdywgc3Rhcl9ub2RlKQogCiAgICAgICAgICAgICBpZiBsZW5fbm9kZWxpc3QgIT0gMiBhbmQgaXNpbnN0YW5jZShyZXN1bHQsIEdlbkV4cHIpIFwKLSAgICAgICAgICAgICAgIGFuZCBsZW4obm9kZSkgPT0gMyBhbmQgbm9kZVsyXVswXSA9PSBzeW1ib2wuZ2VuX2ZvcjoKKyAgICAgICAgICAgICAgIGFuZCBsZW4obm9kZSkgPT0gMyBhbmQgbm9kZVsyXVswXSA9PSBzeW1ib2wuY29tcF9mb3I6CiAgICAgICAgICAgICAgICAgIyBhbGxvdyBmKHggZm9yIHggaW4geSksIGJ1dCByZWplY3QgZih4IGZvciB4IGluIHksIDEpCiAgICAgICAgICAgICAgICAgIyBzaG91bGQgdXNlIGYoKHggZm9yIHggaW4geSksIDEpIGluc3RlYWQgb2YgZih4IGZvciB4IGluIHksIDEpCiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IsICdnZW5lcmF0b3IgZXhwcmVzc2lvbiBuZWVkcyBwYXJlbnRoZXNpcycKQEAgLTEyNTcsNyArMTI5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm89ZXh0cmFjdExpbmVObyhub2RlbGlzdCkpCiAKICAgICBkZWYgY29tX2FyZ3VtZW50KHNlbGYsIG5vZGVsaXN0LCBrdywgc3Rhcl9ub2RlKToKLSAgICAgICAgaWYgbGVuKG5vZGVsaXN0KSA9PSAzIGFuZCBub2RlbGlzdFsyXVswXSA9PSBzeW1ib2wuZ2VuX2ZvcjoKKyAgICAgICAgaWYgbGVuKG5vZGVsaXN0KSA9PSAzIGFuZCBub2RlbGlzdFsyXVswXSA9PSBzeW1ib2wuY29tcF9mb3I6CiAgICAgICAgICAgICB0ZXN0ID0gc2VsZi5jb21fbm9kZShub2RlbGlzdFsxXSkKICAgICAgICAgICAgIHJldHVybiAwLCBzZWxmLmNvbV9nZW5lcmF0b3JfZXhwcmVzc2lvbih0ZXN0LCBub2RlbGlzdFsyXSkKICAgICAgICAgaWYgbGVuKG5vZGVsaXN0KSA9PSAyOgpkaWZmIC0tZ2l0IGEvTGliL2NvbnRleHRsaWIucHkgYi9MaWIvY29udGV4dGxpYi5weQppbmRleCBjOTc5M2FmLi5mMDUyMDViIDEwMDY0NAotLS0gYS9MaWIvY29udGV4dGxpYi5weQorKysgYi9MaWIvY29udGV4dGxpYi5weQpAQCAtMiw2ICsyLDcgQEAKIAogaW1wb3J0IHN5cwogZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAKIF9fYWxsX18gPSBbImNvbnRleHRtYW5hZ2VyIiwgIm5lc3RlZCIsICJjbG9zaW5nIl0KIApAQCAtODYsMjEgKzg3LDIxIEBACiAKIEBjb250ZXh0bWFuYWdlcgogZGVmIG5lc3RlZCgqbWFuYWdlcnMpOgotICAgICIiIlN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBtYW5hZ2VycyBpbiBhIHNpbmdsZSB3aXRoLXN0YXRlbWVudC4KKyAgICAiIiJDb21iaW5lIG11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMgaW50byBhIHNpbmdsZSBuZXN0ZWQgY29udGV4dCBtYW5hZ2VyLgogCi0gICAgQ29kZSBsaWtlIHRoaXM6CisgICBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIHRoZSBtdWx0aXBsZSBtYW5hZ2VyIGZvcm0KKyAgIG9mIHRoZSB3aXRoIHN0YXRlbWVudC4KIAotICAgICAgICB3aXRoIG5lc3RlZChBLCBCLCBDKSBhcyAoWCwgWSwgWik6Ci0gICAgICAgICAgICA8Ym9keT4KKyAgIFRoZSBvbmUgYWR2YW50YWdlIG9mIHRoaXMgZnVuY3Rpb24gb3ZlciB0aGUgbXVsdGlwbGUgbWFuYWdlciBmb3JtIG9mIHRoZQorICAgd2l0aCBzdGF0ZW1lbnQgaXMgdGhhdCBhcmd1bWVudCB1bnBhY2tpbmcgYWxsb3dzIGl0IHRvIGJlCisgICB1c2VkIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgY29udGV4dCBtYW5hZ2VycyBhcyBmb2xsb3dzOgogCi0gICAgaXMgZXF1aXZhbGVudCB0byB0aGlzOgotCi0gICAgICAgIHdpdGggQSBhcyBYOgotICAgICAgICAgICAgd2l0aCBCIGFzIFk6Ci0gICAgICAgICAgICAgICAgd2l0aCBDIGFzIFo6Ci0gICAgICAgICAgICAgICAgICAgIDxib2R5PgorICAgICAgd2l0aCBuZXN0ZWQoKm1hbmFnZXJzKToKKyAgICAgICAgICBkb19zb21ldGhpbmcoKQogCiAgICAgIiIiCisgICAgd2FybigiV2l0aC1zdGF0ZW1lbnRzIG5vdyBkaXJlY3RseSBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMiLAorICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAzKQogICAgIGV4aXRzID0gW10KICAgICB2YXJzID0gW10KICAgICBleGMgPSAoTm9uZSwgTm9uZSwgTm9uZSkKZGlmZiAtLWdpdCBhL0xpYi9jb3B5LnB5IGIvTGliL2NvcHkucHkKaW5kZXggM2YyMDMzZi4uYzIyN2EyZSAxMDA2NDQKLS0tIGEvTGliL2NvcHkucHkKKysrIGIvTGliL2NvcHkucHkKQEAgLTQ5LDYgKzQ5LDcgQEAKICIiIgogCiBpbXBvcnQgdHlwZXMKK2ltcG9ydCB3ZWFrcmVmCiBmcm9tIGNvcHlfcmVnIGltcG9ydCBkaXNwYXRjaF90YWJsZQogCiBjbGFzcyBFcnJvcihFeGNlcHRpb24pOgpAQCAtMTAyLDcgKzEwMyw3IEBACiBmb3IgdCBpbiAodHlwZShOb25lKSwgaW50LCBsb25nLCBmbG9hdCwgYm9vbCwgc3RyLCB0dXBsZSwKICAgICAgICAgICBmcm96ZW5zZXQsIHR5cGUsIHhyYW5nZSwgdHlwZXMuQ2xhc3NUeXBlLAogICAgICAgICAgIHR5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGUsIHR5cGUoRWxsaXBzaXMpLAotICAgICAgICAgIHR5cGVzLkZ1bmN0aW9uVHlwZSk6CisgICAgICAgICAgdHlwZXMuRnVuY3Rpb25UeXBlLCB3ZWFrcmVmLnJlZik6CiAgICAgZFt0XSA9IF9jb3B5X2ltbXV0YWJsZQogZm9yIG5hbWUgaW4gKCJDb21wbGV4VHlwZSIsICJVbmljb2RlVHlwZSIsICJDb2RlVHlwZSIpOgogICAgIHQgPSBnZXRhdHRyKHR5cGVzLCBuYW1lLCBOb25lKQpAQCAtMjIwLDYgKzIyMSw3IEBACiBkW3R5cGVzLkNsYXNzVHlwZV0gPSBfZGVlcGNvcHlfYXRvbWljCiBkW3R5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGVdID0gX2RlZXBjb3B5X2F0b21pYwogZFt0eXBlcy5GdW5jdGlvblR5cGVdID0gX2RlZXBjb3B5X2F0b21pYworZFt3ZWFrcmVmLnJlZl0gPSBfZGVlcGNvcHlfYXRvbWljCiAKIGRlZiBfZGVlcGNvcHlfbGlzdCh4LCBtZW1vKToKICAgICB5ID0gW10KQEAgLTI1OCw2ICsyNjAsMTAgQEAKIGlmIFB5U3RyaW5nTWFwIGlzIG5vdCBOb25lOgogICAgIGRbUHlTdHJpbmdNYXBdID0gX2RlZXBjb3B5X2RpY3QKIAorZGVmIF9kZWVwY29weV9tZXRob2QoeCwgbWVtbyk6ICMgQ29weSBpbnN0YW5jZSBtZXRob2RzCisgICAgcmV0dXJuIHR5cGUoeCkoeC5pbV9mdW5jLCBkZWVwY29weSh4LmltX3NlbGYsIG1lbW8pLCB4LmltX2NsYXNzKQorX2RlZXBjb3B5X2Rpc3BhdGNoW3R5cGVzLk1ldGhvZFR5cGVdID0gX2RlZXBjb3B5X21ldGhvZAorCiBkZWYgX2tlZXBfYWxpdmUoeCwgbWVtbyk6CiAgICAgIiIiS2VlcHMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB4IGluIHRoZSBtZW1vLgogCkBAIC0zMjIsMTcgKzMyOCw3IEBACiAgICAgICAgIGFyZ3MgPSBkZWVwY29weShhcmdzLCBtZW1vKQogICAgIHkgPSBjYWxsYWJsZSgqYXJncykKICAgICBtZW1vW2lkKHgpXSA9IHkKLSAgICBpZiBsaXN0aXRlciBpcyBub3QgTm9uZToKLSAgICAgICAgZm9yIGl0ZW0gaW4gbGlzdGl0ZXI6Ci0gICAgICAgICAgICBpZiBkZWVwOgotICAgICAgICAgICAgICAgIGl0ZW0gPSBkZWVwY29weShpdGVtLCBtZW1vKQotICAgICAgICAgICAgeS5hcHBlbmQoaXRlbSkKLSAgICBpZiBkaWN0aXRlciBpcyBub3QgTm9uZToKLSAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGljdGl0ZXI6Ci0gICAgICAgICAgICBpZiBkZWVwOgotICAgICAgICAgICAgICAgIGtleSA9IGRlZXBjb3B5KGtleSwgbWVtbykKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlZXBjb3B5KHZhbHVlLCBtZW1vKQotICAgICAgICAgICAgeVtrZXldID0gdmFsdWUKKwogICAgIGlmIHN0YXRlOgogICAgICAgICBpZiBkZWVwOgogICAgICAgICAgICAgc3RhdGUgPSBkZWVwY29weShzdGF0ZSwgbWVtbykKQEAgLTM0OCw2ICszNDQsMTggQEAKICAgICAgICAgICAgIGlmIHNsb3RzdGF0ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzbG90c3RhdGUuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoeSwga2V5LCB2YWx1ZSkKKworICAgIGlmIGxpc3RpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICBmb3IgaXRlbSBpbiBsaXN0aXRlcjoKKyAgICAgICAgICAgIGlmIGRlZXA6CisgICAgICAgICAgICAgICAgaXRlbSA9IGRlZXBjb3B5KGl0ZW0sIG1lbW8pCisgICAgICAgICAgICB5LmFwcGVuZChpdGVtKQorICAgIGlmIGRpY3RpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0aXRlcjoKKyAgICAgICAgICAgIGlmIGRlZXA6CisgICAgICAgICAgICAgICAga2V5ID0gZGVlcGNvcHkoa2V5LCBtZW1vKQorICAgICAgICAgICAgICAgIHZhbHVlID0gZGVlcGNvcHkodmFsdWUsIG1lbW8pCisgICAgICAgICAgICB5W2tleV0gPSB2YWx1ZQogICAgIHJldHVybiB5CiAKIGRlbCBkCkBAIC00MTAsNiArNDE4LDE2IEBACiAgICAgcHJpbnQgbWFwKHJlcHIucmVwciwgbDEpCiAgICAgcHJpbnQgbWFwKHJlcHIucmVwciwgbDIpCiAgICAgcHJpbnQgbWFwKHJlcHIucmVwciwgbDMpCisgICAgY2xhc3Mgb2RpY3QoZGljdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkID0ge30pOgorICAgICAgICAgICAgc2VsZi5hID0gOTkKKyAgICAgICAgICAgIGRpY3QuX19pbml0X18oc2VsZiwgZCkKKyAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGssIGkpOgorICAgICAgICAgICAgZGljdC5fX3NldGl0ZW1fXyhzZWxmLCBrLCBpKQorICAgICAgICAgICAgc2VsZi5hCisgICAgbyA9IG9kaWN0KHsiQSIgOiAiQiJ9KQorICAgIHggPSBkZWVwY29weShvKQorICAgIHByaW50KG8sIHgpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgX3Rlc3QoKQpkaWZmIC0tZ2l0IGEvTGliL2Nzdi5weSBiL0xpYi9jc3YucHkKaW5kZXggZmY1MWE4Ni4uMWRmNTA2MiAxMDA2NDQKLS0tIGEvTGliL2Nzdi5weQorKysgYi9MaWIvY3N2LnB5CkBAIC0xMzIsNiArMTMyLDEwIEBACiAgICAgICAgIHNlbGYuZXh0cmFzYWN0aW9uID0gZXh0cmFzYWN0aW9uCiAgICAgICAgIHNlbGYud3JpdGVyID0gd3JpdGVyKGYsIGRpYWxlY3QsICphcmdzLCAqKmt3ZHMpCiAKKyAgICBkZWYgd3JpdGVoZWFkZXIoc2VsZik6CisgICAgICAgIGhlYWRlciA9IGRpY3QoemlwKHNlbGYuZmllbGRuYW1lcywgc2VsZi5maWVsZG5hbWVzKSkKKyAgICAgICAgc2VsZi53cml0ZXJvdyhoZWFkZXIpCisKICAgICBkZWYgX2RpY3RfdG9fbGlzdChzZWxmLCByb3dkaWN0KToKICAgICAgICAgaWYgc2VsZi5leHRyYXNhY3Rpb24gPT0gInJhaXNlIjoKICAgICAgICAgICAgIHdyb25nX2ZpZWxkcyA9IFtrIGZvciBrIGluIHJvd2RpY3QgaWYgayBub3QgaW4gc2VsZi5maWVsZG5hbWVzXQpAQCAtMTcwLDcgKzE3NCw3IEBACiAgICAgICAgIFJldHVybnMgYSBkaWFsZWN0IChvciBOb25lKSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzYW1wbGUKICAgICAgICAgIiIiCiAKLSAgICAgICAgcXVvdGVjaGFyLCBkZWxpbWl0ZXIsIHNraXBpbml0aWFsc3BhY2UgPSBcCisgICAgICAgIHF1b3RlY2hhciwgZG91YmxlcXVvdGUsIGRlbGltaXRlciwgc2tpcGluaXRpYWxzcGFjZSA9IFwKICAgICAgICAgICAgICAgICAgICBzZWxmLl9ndWVzc19xdW90ZV9hbmRfZGVsaW1pdGVyKHNhbXBsZSwgZGVsaW1pdGVycykKICAgICAgICAgaWYgbm90IGRlbGltaXRlcjoKICAgICAgICAgICAgIGRlbGltaXRlciwgc2tpcGluaXRpYWxzcGFjZSA9IHNlbGYuX2d1ZXNzX2RlbGltaXRlcihzYW1wbGUsCkBAIC0xODQsOCArMTg4LDggQEAKICAgICAgICAgICAgIGxpbmV0ZXJtaW5hdG9yID0gJ1xyXG4nCiAgICAgICAgICAgICBxdW90aW5nID0gUVVPVEVfTUlOSU1BTAogICAgICAgICAgICAgIyBlc2NhcGVjaGFyID0gJycKLSAgICAgICAgICAgIGRvdWJsZXF1b3RlID0gRmFsc2UKIAorICAgICAgICBkaWFsZWN0LmRvdWJsZXF1b3RlID0gZG91YmxlcXVvdGUKICAgICAgICAgZGlhbGVjdC5kZWxpbWl0ZXIgPSBkZWxpbWl0ZXIKICAgICAgICAgIyBfY3N2LnJlYWRlciB3b24ndCBhY2NlcHQgYSBxdW90ZWNoYXIgb2YgJycKICAgICAgICAgZGlhbGVjdC5xdW90ZWNoYXIgPSBxdW90ZWNoYXIgb3IgJyInCkBAIC0yMTcsOCArMjIxLDggQEAKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIGlmIG5vdCBtYXRjaGVzOgotICAgICAgICAgICAgcmV0dXJuICgnJywgTm9uZSwgMCkgIyAocXVvdGVjaGFyLCBkZWxpbWl0ZXIsIHNraXBpbml0aWFsc3BhY2UpCi0KKyAgICAgICAgICAgICMgKHF1b3RlY2hhciwgZG91YmxlcXVvdGUsIGRlbGltaXRlciwgc2tpcGluaXRpYWxzcGFjZSkKKyAgICAgICAgICAgIHJldHVybiAoJycsIEZhbHNlLCBOb25lLCAwKQogICAgICAgICBxdW90ZXMgPSB7fQogICAgICAgICBkZWxpbXMgPSB7fQogICAgICAgICBzcGFjZXMgPSAwCkBAIC0yNTUsNyArMjU5LDE5IEBACiAgICAgICAgICAgICBkZWxpbSA9ICcnCiAgICAgICAgICAgICBza2lwaW5pdGlhbHNwYWNlID0gMAogCi0gICAgICAgIHJldHVybiAocXVvdGVjaGFyLCBkZWxpbSwgc2tpcGluaXRpYWxzcGFjZSkKKyAgICAgICAgIyBpZiB3ZSBzZWUgYW4gZXh0cmEgcXVvdGUgYmV0d2VlbiBkZWxpbWl0ZXJzLCB3ZSd2ZSBnb3QgYQorICAgICAgICAjIGRvdWJsZSBxdW90ZWQgZm9ybWF0CisgICAgICAgIGRxX3JlZ2V4cCA9IHJlLmNvbXBpbGUociIoKCUoZGVsaW0pcyl8XilcVyolKHF1b3RlKXNbXiUoZGVsaW0pc1xuXSolKHF1b3RlKXNbXiUoZGVsaW0pc1xuXSolKHF1b3RlKXNcVyooKCUoZGVsaW0pcyl8JCkiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnZGVsaW0nOmRlbGltLCAncXVvdGUnOnF1b3RlY2hhcn0sIHJlLk1VTFRJTElORSkKKworCisKKyAgICAgICAgaWYgZHFfcmVnZXhwLnNlYXJjaChkYXRhKToKKyAgICAgICAgICAgIGRvdWJsZXF1b3RlID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZG91YmxlcXVvdGUgPSBGYWxzZQorCisgICAgICAgIHJldHVybiAocXVvdGVjaGFyLCBkb3VibGVxdW90ZSwgZGVsaW0sIHNraXBpbml0aWFsc3BhY2UpCiAKIAogICAgIGRlZiBfZ3Vlc3NfZGVsaW1pdGVyKHNlbGYsIGRhdGEsIGRlbGltaXRlcnMpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy9fX2luaXRfXy5weSBiL0xpYi9jdHlwZXMvX19pbml0X18ucHkKaW5kZXggMWIwMzgzNS4uMTY0ODliOSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CkBAIC00NjIsMTAgKzQ2MiwxMyBAQAogCiBpZiBzaXplb2YoY191aW50KSA9PSBzaXplb2YoY192b2lkX3ApOgogICAgIGNfc2l6ZV90ID0gY191aW50CisgICAgY19zc2l6ZV90ID0gY19pbnQKIGVsaWYgc2l6ZW9mKGNfdWxvbmcpID09IHNpemVvZihjX3ZvaWRfcCk6CiAgICAgY19zaXplX3QgPSBjX3Vsb25nCisgICAgY19zc2l6ZV90ID0gY19sb25nCiBlbGlmIHNpemVvZihjX3Vsb25nbG9uZykgPT0gc2l6ZW9mKGNfdm9pZF9wKToKICAgICBjX3NpemVfdCA9IGNfdWxvbmdsb25nCisgICAgY19zc2l6ZV90ID0gY19sb25nbG9uZwogCiAjIGZ1bmN0aW9ucwogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hbm9uLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYW5vbi5weQppbmRleCA5OWUwMmNiLi5kODkyYjU5IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hbm9uLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Fub24ucHkKQEAgLTE0LDIyICsxNCwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgY19pbnQpXQogICAgICAgICAgICAgX2Fub255bW91c18gPSBbIl8iXQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFkuYS5vZmZzZXQsIHNpemVvZihjX2ludCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFkuYi5vZmZzZXQsIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5hLm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLmIub2Zmc2V0LCBzaXplb2YoY19pbnQpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKEFOT04uYS5vZmZzZXQsIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKEFOT04uYi5vZmZzZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQU5PTi5hLm9mZnNldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBTk9OLmIub2Zmc2V0LCAwKQogCiAgICAgZGVmIHRlc3RfYW5vbl9ub25zZXEoc2VsZik6CiAgICAgICAgICMgVHlwZUVycm9yOiBfYW5vbnltb3VzXyBtdXN0IGJlIGEgc2VxdWVuY2UKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiB0eXBlKFN0cnVjdHVyZSkoIk5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0cnVjdHVyZSwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJfZmllbGRzXyI6IFtdLCAiX2Fub255bW91c18iOiA0Mn0pKQogCiAgICAgZGVmIHRlc3RfYW5vbl9ub25tZW1iZXIoc2VsZik6CiAgICAgICAgICMgQXR0cmlidXRlRXJyb3I6IHR5cGUgb2JqZWN0ICdOYW1lJyBoYXMgbm8gYXR0cmlidXRlICd4JwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoQXR0cmlidXRlRXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiB0eXBlKFN0cnVjdHVyZSkoIk5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0cnVjdHVyZSwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJfZmllbGRzXyI6IFtdLApAQCAtNTAsMTEgKzUwLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoInkiLCBjX2ludCldCiAgICAgICAgICAgICBfYW5vbnltb3VzXyA9IFsiXyJdCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWS54Lm9mZnNldCwgMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWS5hLm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWS5iLm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWS5fLm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWS55Lm9mZnNldCwgc2l6ZW9mKGNfaW50KSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS54Lm9mZnNldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLmEub2Zmc2V0LCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuYi5vZmZzZXQsIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5fLm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLnkub2Zmc2V0LCBzaXplb2YoY19pbnQpICogMikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5X2luX3BvaW50ZXIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheV9pbl9wb2ludGVyLnB5CmluZGV4IDNlZDMxMGMuLmVlNzg2M2MgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5X2luX3BvaW50ZXIucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlfaW5fcG9pbnRlci5weQpAQCAtNiw3ICs2LDcgQEAKIGRlZiBkdW1wKG9iaik6CiAgICAgIyBoZWxwZXIgZnVuY3Rpb24gdG8gZHVtcCBtZW1vcnkgY29udGVudHMgaW4gaGV4LCB3aXRoIGEgaHlwaGVuCiAgICAgIyBiZXR3ZWVuIHRoZSBieXRlcy4KLSAgICBoID0gaGV4bGlmeShidWZmZXIob2JqKSkKKyAgICBoID0gaGV4bGlmeShtZW1vcnl2aWV3KG9iaikpCiAgICAgcmV0dXJuIHJlLnN1YihyIiguLikiLCByIlwxLSIsIGgpWzotMV0KIAogCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgIGMucHZhbHVlcyA9IHZhbF9hcnJheQogCiAgICAgICAgICMgbWVtb3J5IGNvbnRhaW5zIDQgTlVMIGJ5dGVzIG5vdywgdGhhdCdzIGNvcnJlY3QKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjAwLTAwLTAwLTAwIiwgZHVtcCh2YWxfYXJyYXkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIwMC0wMC0wMC0wMCIsIGR1bXAodmFsX2FycmF5KSkKIAogICAgICAgICAjIHNldCB0aGUgdmFsdWVzIG9mIHRoZSBhcnJheSB0aHJvdWdoIHRoZSBwb2ludGVyOgogICAgICAgICBmb3IgaSBpbiByYW5nZSg0KToKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgdmFsdWVzID0gW2MucHZhbHVlc1tpXS52YWwgZm9yIGkgaW4gcmFuZ2UoNCldCiAKICAgICAgICAgIyBUaGVzZSBhcmUgdGhlIGV4cGVjdGVkIHJlc3VsdHM6IGhlcmUgcyB0aGUgYnVnIQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICh2YWx1ZXMsIGR1bXAodmFsX2FycmF5KSksCiAgICAgICAgICAgICAoWzEsIDIsIDMsIDRdLCAiMDEtMDItMDMtMDQiKQogICAgICAgICApCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHZhbF9hcnJheSA9IChWYWx1ZSAqIDQpKCkKIAogICAgICAgICAjIG1lbW9yeSBjb250YWlucyA0IE5VTCBieXRlcyBub3csIHRoYXQncyBjb3JyZWN0Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIwMC0wMC0wMC0wMCIsIGR1bXAodmFsX2FycmF5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMDAtMDAtMDAtMDAiLCBkdW1wKHZhbF9hcnJheSkpCiAKICAgICAgICAgcHRyID0gY2FzdCh2YWxfYXJyYXksIFBPSU5URVIoVmFsdWUpKQogICAgICAgICAjIHNldCB0aGUgdmFsdWVzIG9mIHRoZSBhcnJheSB0aHJvdWdoIHRoZSBwb2ludGVyOgpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICB2YWx1ZXMgPSBbcHRyW2ldLnZhbCBmb3IgaSBpbiByYW5nZSg0KV0KIAogICAgICAgICAjIFRoZXNlIGFyZSB0aGUgZXhwZWN0ZWQgcmVzdWx0czogaGVyZSBzIHRoZSBidWchCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgKHZhbHVlcywgZHVtcCh2YWxfYXJyYXkpKSwKICAgICAgICAgICAgIChbMSwgMiwgMywgNF0sICIwMS0wMi0wMy0wNCIpCiAgICAgICAgICkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5cy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5cy5weQppbmRleCA3ZWUxNmMxLi40MzNhMWZmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlzLnB5CkBAIC0xOSwyMyArMTksMjMgQEAKIAogICAgICAgICAgICAgaWEgPSBpbnRfYXJyYXkoKmluaXQpCiAgICAgICAgICAgICAjIGxlbmd0aCBvZiBpbnN0YW5jZSBvaz8KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihpYSksIGFsZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpYSksIGFsZW4pCiAKICAgICAgICAgICAgICMgc2xvdCB2YWx1ZXMgb2s/CiAgICAgICAgICAgICB2YWx1ZXMgPSBbaWFbaV0gZm9yIGkgaW4gcmFuZ2UobGVuKGluaXQpKV0KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbHVlcywgaW5pdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCBpbml0KQogCiAgICAgICAgICAgICAjIGNoYW5nZSB0aGUgaXRlbXMKICAgICAgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IHNldGl0ZW0KICAgICAgICAgICAgIG5ld192YWx1ZXMgPSByYW5nZSg0MiwgNDIrYWxlbikKICAgICAgICAgICAgIFtzZXRpdGVtKGlhLCBuLCBuZXdfdmFsdWVzW25dKSBmb3IgbiBpbiByYW5nZShhbGVuKV0KICAgICAgICAgICAgIHZhbHVlcyA9IFtpYVtpXSBmb3IgaSBpbiByYW5nZShsZW4oaW5pdCkpXQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsdWVzLCBuZXdfdmFsdWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMsIG5ld192YWx1ZXMpCiAKICAgICAgICAgICAgICMgYXJlIHRoZSBpdGVtcyBpbml0aWFsaXplZCB0byAwPwogICAgICAgICAgICAgaWEgPSBpbnRfYXJyYXkoKQogICAgICAgICAgICAgdmFsdWVzID0gW2lhW2ldIGZvciBpIGluIHJhbmdlKGxlbihpbml0KSldCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWx1ZXMsIFswXSAqIGxlbihpbml0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCBbMF0gKiBsZW4oaW5pdCkpCiAKICAgICAgICAgICAgICMgVG9vIG1hbnkgaW4gaXRpYWxpemVycyBzaG91bGQgYmUgY2F1Z2h0CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBpbnRfYXJyYXksICpyYW5nZShhbGVuKjIpKQpAQCAtNDgsMTQgKzQ4LDE0IEBACiAgICAgICAgICMgQ2hhckFycmF5KCJhYmMiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIENoYXJBcnJheSwgImFiYyIpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FbMF0sICJhIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FbMV0sICJiIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FbMl0sICJjIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FbLTNdLCAiYSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhWy0yXSwgImIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjYVstMV0sICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYVswXSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhWzFdLCAiYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FbMl0sICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYVstM10sICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYVstMl0sICJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYVstMV0sICJjIikKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oY2EpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjYSksIDMpCiAKICAgICAgICAgIyBzbGljaW5nIGlzIG5vdyBzdXBwb3J0ZWQsIGJ1dCBub3QgZXh0ZW5kZWQgc2xpY2luZyAoMy1hcmd1bWVudCkhCiAgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGdldHNsaWNlLCBkZWxpdGVtCkBAIC03MiwzNCArNzIsMzQgQEAKIAogICAgICAgICBuYSA9IG51bWFycmF5KCkKICAgICAgICAgdmFsdWVzID0gW25hW2ldIGZvciBpIGluIHJhbmdlKGFsZW4pXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWx1ZXMsIFswXSAqIGFsZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCBbMF0gKiBhbGVuKQogCiAgICAgICAgIG5hID0gbnVtYXJyYXkoKltjX2ludCgpXSAqIGFsZW4pCiAgICAgICAgIHZhbHVlcyA9IFtuYVtpXSBmb3IgaSBpbiByYW5nZShhbGVuKV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsdWVzLCBbMF0qYWxlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMsIFswXSphbGVuKQogCiAgICAgICAgIG5hID0gbnVtYXJyYXkoMSwgMiwgMywgNCwgNSkKICAgICAgICAgdmFsdWVzID0gW2kgZm9yIGkgaW4gbmFdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbHVlcywgWzEsIDIsIDMsIDQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgWzEsIDIsIDMsIDQsIDVdKQogCiAgICAgICAgIG5hID0gbnVtYXJyYXkoKm1hcChjX2ludCwgKDEsIDIsIDMsIDQsIDUpKSkKICAgICAgICAgdmFsdWVzID0gW2kgZm9yIGkgaW4gbmFdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbHVlcywgWzEsIDIsIDMsIDQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgWzEsIDIsIDMsIDQsIDVdKQogCiAgICAgZGVmIHRlc3RfY2xhc3NjYWNoZShzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCBBUlJBWShjX2ludCwgMykgaXMgQVJSQVkoY19pbnQsIDQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoQVJSQVkoY19pbnQsIDMpIGlzIEFSUkFZKGNfaW50LCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBBUlJBWShjX2ludCwgMykgaXMgQVJSQVkoY19pbnQsIDQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQVJSQVkoY19pbnQsIDMpIGlzIEFSUkFZKGNfaW50LCAzKSkKIAogICAgIGRlZiB0ZXN0X2Zyb21fYWRkcmVzcyhzZWxmKToKICAgICAgICAgIyBGYWlsZWQgd2l0aCAwLjkuOCwgcmVwb3J0ZWQgYnkgSlVybmVyCiAgICAgICAgIHAgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcigiZm9vIikKICAgICAgICAgc3ogPSAoY19jaGFyICogMykuZnJvbV9hZGRyZXNzKGFkZHJlc3NvZihwKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3pbOl0sICJmb28iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzels6Ol0sICJmb28iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzels6Oi0xXSwgIm9vZiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN6Wzo6M10sICJmIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3pbMTo0OjJdLCAibyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN6LnZhbHVlLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6XSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjpdLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6Oi0xXSwgIm9vZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjozXSwgImYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6WzE6NDoyXSwgIm8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6LnZhbHVlLCAiZm9vIikKIAogICAgIHRyeToKICAgICAgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyCkBAIC0xMDksMTIgKzEwOSwxMiBAQAogICAgICAgICBkZWYgdGVzdF9mcm9tX2FkZHJlc3NXKHNlbGYpOgogICAgICAgICAgICAgcCA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigiZm9vIikKICAgICAgICAgICAgIHN6ID0gKGNfd2NoYXIgKiAzKS5mcm9tX2FkZHJlc3MoYWRkcmVzc29mKHApKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3pbOl0sICJmb28iKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3pbOjpdLCAiZm9vIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN6Wzo6LTFdLCAib29mIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN6Wzo6M10sICJmIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN6WzE6NDoyXSwgIm8iKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3oudmFsdWUsICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6XSwgImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6XSwgImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6LTFdLCAib29mIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjozXSwgImYiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzelsxOjQ6Ml0sICJvIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3oudmFsdWUsICJmb28iKQogCiAgICAgZGVmIHRlc3RfY2FjaGUoc2VsZik6CiAgICAgICAgICMgQXJyYXkgdHlwZXMgYXJlIGNhY2hlZCBpbnRlcm5hbGx5IGluIHRoZSBfY3R5cGVzIGV4dGVuc2lvbiwKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICAjIENyZWF0ZSBhIG5ldyBhcnJheSB0eXBlIGJhc2VkIG9uIGl0OgogICAgICAgICB0MSA9IG15X2ludCAqIDEKICAgICAgICAgdDIgPSBteV9pbnQgKiAxCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSBpcyB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIGlzIHQyKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXNfcGFyYW1ldGVyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXNfcGFyYW1ldGVyLnB5CmluZGV4IDA1ODEwNTkuLmYyNTM5YjEgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FzX3BhcmFtZXRlci5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkKQEAgLTI1LDggKzI1LDggQEAKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfd2NoYXIsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQogICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgxKSwgc2VsZi53cmFwKHUieCIpLCBzZWxmLndyYXAoMyksIHNlbGYud3JhcCg0KSwgc2VsZi53cmFwKDUuMCksIHNlbGYud3JhcCg2LjApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIDEzOSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUocmVzdWx0KSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMTM5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShyZXN1bHQpLCBpbnQpCiAKICAgICBkZWYgdGVzdF9wb2ludGVycyhzZWxmKToKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfcF9wCkBAIC0zOSwxOCArMzksMTggQEAKIAogICAgICAgICB2ID0gY19pbnQoNDIpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocG9pbnRlcih2KS5jb250ZW50cy52YWx1ZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9pbnRlcih2KS5jb250ZW50cy52YWx1ZSwgNDIpCiAgICAgICAgIHJlc3VsdCA9IGYoc2VsZi53cmFwKHBvaW50ZXIodikpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHJlc3VsdCksIFBPSU5URVIoY19pbnQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgUE9JTlRFUihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCA0MikKIAogICAgICAgICAjIFRoaXMgb24gd29ya3MuLi4KICAgICAgICAgcmVzdWx0ID0gZihzZWxmLndyYXAocG9pbnRlcih2KSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdC5jb250ZW50cy52YWx1ZSwgdi52YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIHYudmFsdWUpCiAKICAgICAgICAgcCA9IHBvaW50ZXIoY19pbnQoOTkpKQogICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcChwKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCA5OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIDk5KQogCiAgICAgZGVmIHRlc3Rfc2hvcnRzKHNlbGYpOgogICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19jYWxsYmFja19pX2lmCkBAIC02Nyw3ICs2Nyw3IEBACiAKICAgICAgICAgY2IgPSBDYWxsQmFjayhjYWxsYmFjaykKICAgICAgICAgZihzZWxmLndyYXAoMioqMTgpLCBzZWxmLndyYXAoY2IpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhcmdzLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBleHBlY3RlZCkKIAogICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtODQsMTcgKzg0LDE3IEBACiAgICAgICAgIGNiID0gTXlDYWxsYmFjayhjYWxsYmFjaykKIAogICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgtMTApLCBzZWxmLndyYXAoY2IpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIC0xOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0xOCkKIAogICAgICAgICAjIHRlc3Qgd2l0aCBwcm90b3R5cGUKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2ludCwgTXlDYWxsYmFja10KICAgICAgICAgY2IgPSBNeUNhbGxiYWNrKGNhbGxiYWNrKQogCiAgICAgICAgIHJlc3VsdCA9IGYoc2VsZi53cmFwKC0xMCksIHNlbGYud3JhcChjYikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgLTE4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQogCiAgICAgICAgIHJlc3VsdCA9IGYoc2VsZi53cmFwKC0xMCksIHNlbGYud3JhcChjYikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgLTE4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQogCiAgICAgICAgIEFub3RoZXJDYWxsYmFjayA9IENBTExCQUNLX0ZVTkNUWVBFKGNfaW50LCBjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCkKIApAQCAtMTE2LDEyICsxMTYsMTIgQEAKIAogICAgICAgICBkZWYgY2FsbGJhY2sodmFsdWUpOgogICAgICAgICAgICAgI3ByaW50ICJjYWxsZWQgYmFjayB3aXRoIiwgdmFsdWUKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUodmFsdWUpLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsdWUpLCBpbnQpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWUKIAogICAgICAgICBjYiA9IE15Q2FsbGJhY2soY2FsbGJhY2spCiAgICAgICAgIHJlc3VsdCA9IGYoc2VsZi53cmFwKC0xMCksIHNlbGYud3JhcChjYikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgLTE4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQogCiAgICAgZGVmIHRlc3RfbG9uZ2xvbmdfY2FsbGJhY2tzKHNlbGYpOgogCkBAIC0xMzMsMTIgKzEzMywxMiBAQAogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfbG9uZ2xvbmcsIE15Q2FsbGJhY2tdCiAKICAgICAgICAgZGVmIGNhbGxiYWNrKHZhbHVlKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBsb25nKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2YWx1ZSwgKGludCwgbG9uZykpKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlICYgMHg3RkZGRkZGRgogCiAgICAgICAgIGNiID0gTXlDYWxsYmFjayhjYWxsYmFjaykKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgxMzU3NzYyNTU4NywgaW50KGYoc2VsZi53cmFwKDEwMDAwMDAwMDAwMDApLCBzZWxmLndyYXAoY2IpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTM1Nzc2MjU1ODcsIGludChmKHNlbGYud3JhcCgxMDAwMDAwMDAwMDAwKSwgc2VsZi53cmFwKGNiKSkpKQogCiAgICAgZGVmIHRlc3RfYnl2YWwoc2VsZik6CiAgICAgICAgICMgd2l0aG91dCBwcm90b3R5cGUKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgICAgICByZXN1bHQgPSBkbGwuX3Rlc3RmdW5jX2J5dmFsKHB0aW4sIGJ5cmVmKHB0b3V0KSkKICAgICAgICAgZ290ID0gcmVzdWx0LCBwdG91dC54LCBwdG91dC55CiAgICAgICAgIGV4cGVjdGVkID0gMywgMSwgMgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChnb3QsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCiAKICAgICAgICAgIyB3aXRoIHByb3RvdHlwZQogICAgICAgICBwdGluID0gUE9JTlQoMTAxLCAxMDIpCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgcmVzdWx0ID0gZGxsLl90ZXN0ZnVuY19ieXZhbChzZWxmLndyYXAocHRpbiksIGJ5cmVmKHB0b3V0KSkKICAgICAgICAgZ290ID0gcmVzdWx0LCBwdG91dC54LCBwdG91dC55CiAgICAgICAgIGV4cGVjdGVkID0gMjAzLCAxMDEsIDEwMgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChnb3QsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzJIKHNlbGYpOgogICAgICAgICBjbGFzcyBTMkgoU3RydWN0dXJlKToKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgICAgICBkbGwucmV0XzJoX2Z1bmMuYXJndHlwZXMgPSBbUzJIXQogICAgICAgICBpbnAgPSBTMkgoOTksIDg4KQogICAgICAgICBzMmggPSBkbGwucmV0XzJoX2Z1bmMoc2VsZi53cmFwKGlucCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChzMmgueCwgczJoLnkpLCAoOTkqMiwgODgqMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHMyaC54LCBzMmgueSksICg5OSoyLCA4OCozKSkKIAogICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fOEgoc2VsZik6CiAgICAgICAgIGNsYXNzIFM4SShTdHJ1Y3R1cmUpOgpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgICAgIGRsbC5yZXRfOGlfZnVuYy5hcmd0eXBlcyA9IFtTOEldCiAgICAgICAgIGlucCA9IFM4SSg5LCA4LCA3LCA2LCA1LCA0LCAzLCAyKQogICAgICAgICBzOGkgPSBkbGwucmV0XzhpX2Z1bmMoc2VsZi53cmFwKGlucCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChzOGkuYSwgczhpLmIsIHM4aS5jLCBzOGkuZCwgczhpLmUsIHM4aS5mLCBzOGkuZywgczhpLmgpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzOGkuYSwgczhpLmIsIHM4aS5jLCBzOGkuZCwgczhpLmUsIHM4aS5mLCBzOGkuZywgczhpLmgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQogCiAjfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5CmluZGV4IDk2Y2Q3YzYuLmU5YzQ2YzIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2JpdGZpZWxkcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkKQEAgLTM3LDE0ICszNywxNCBAQAogICAgICAgICAgICAgZm9yIG5hbWUgaW4gIkFCQ0RFRkdISSI6CiAgICAgICAgICAgICAgICAgYiA9IEJJVFMoKQogICAgICAgICAgICAgICAgIHNldGF0dHIoYiwgbmFtZSwgaSkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgobmFtZSwgaSwgZ2V0YXR0cihiLCBuYW1lKSksIChuYW1lLCBpLCBmdW5jKGJ5cmVmKGIpLCBuYW1lKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgaSwgZ2V0YXR0cihiLCBuYW1lKSksIChuYW1lLCBpLCBmdW5jKGJ5cmVmKGIpLCBuYW1lKSkpCiAKICAgICBkZWYgdGVzdF9zaG9ydHMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKDI1Nik6CiAgICAgICAgICAgICBmb3IgbmFtZSBpbiAiTU5PUFFSUyI6CiAgICAgICAgICAgICAgICAgYiA9IEJJVFMoKQogICAgICAgICAgICAgICAgIHNldGF0dHIoYiwgbmFtZSwgaSkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgobmFtZSwgaSwgZ2V0YXR0cihiLCBuYW1lKSksIChuYW1lLCBpLCBmdW5jKGJ5cmVmKGIpLCBuYW1lKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgaSwgZ2V0YXR0cihiLCBuYW1lKSksIChuYW1lLCBpLCBmdW5jKGJ5cmVmKGIpLCBuYW1lKSkpCiAKIHNpZ25lZF9pbnRfdHlwZXMgPSAoY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2xvbmdsb25nKQogdW5zaWduZWRfaW50X3R5cGVzID0gKGNfdWJ5dGUsIGNfdXNob3J0LCBjX3VpbnQsIGNfdWxvbmcsIGNfdWxvbmdsb25nKQpAQCAtNTgsMTAgKzU4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2xvbmdsb25nLCA2MiksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX2xvbmdsb25nLCAxKV0KIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2xvbmdsb25nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2xvbmdsb25nKSkKICAgICAgICAgeCA9IFgoKQogICAgICAgICB4LmEsIHguYiwgeC5jID0gLTEsIDcsIC0xCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCh4LmEsIHguYiwgeC5jKSwgKC0xLCA3LCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHguYSwgeC5iLCB4LmMpLCAoLTEsIDcsIC0xKSkKIAogICAgIGRlZiB0ZXN0X3Vsb25nbG9uZyhzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgpAQCAtNjksMTEgKzY5LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3Vsb25nbG9uZywgNjIpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY191bG9uZ2xvbmcsIDEpXQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfbG9uZ2xvbmcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfbG9uZ2xvbmcpKQogICAgICAgICB4ID0gWCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCh4LmEsIHguYiwgeC5jKSwgKDAsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4LmEsIHguYiwgeC5jKSwgKDAsIDAsIDApKQogICAgICAgICB4LmEsIHguYiwgeC5jID0gNywgNywgNwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoeC5hLCB4LmIsIHguYyksICgxLCA3LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeC5hLCB4LmIsIHguYyksICgxLCA3LCAxKSkKIAogICAgIGRlZiB0ZXN0X3NpZ25lZChzZWxmKToKICAgICAgICAgZm9yIGNfdHlwIGluIHNpZ25lZF9pbnRfdHlwZXM6CkBAIC04MiwxNCArODIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImEiLCBjX3R5cCwgMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY190eXAsIDMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsIGNfdHlwLCAxKV0KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfdHlwKSoyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3R5cCkqMikKIAogICAgICAgICAgICAgeCA9IFgoKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAwLCAwLCAwKSkKICAgICAgICAgICAgIHguYSA9IC0xCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoY190eXAsIHguYSwgeC5iLCB4LmMpLCAoY190eXAsIC0xLCAwLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAtMSwgMCwgMCkpCiAgICAgICAgICAgICB4LmEsIHguYiA9IDAsIC0xCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoY190eXAsIHguYSwgeC5iLCB4LmMpLCAoY190eXAsIDAsIC0xLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAwLCAtMSwgMCkpCiAKIAogICAgIGRlZiB0ZXN0X3Vuc2lnbmVkKHNlbGYpOgpAQCAtOTgsMTQgKzk4LDE0IEBACiAgICAgICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY190eXAsIDMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfdHlwLCAzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX3R5cCwgMSldCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3R5cCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfdHlwKSkKIAogICAgICAgICAgICAgeCA9IFgoKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAwLCAwLCAwKSkKICAgICAgICAgICAgIHguYSA9IC0xCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoY190eXAsIHguYSwgeC5iLCB4LmMpLCAoY190eXAsIDcsIDAsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoY190eXAsIHguYSwgeC5iLCB4LmMpLCAoY190eXAsIDcsIDAsIDApKQogICAgICAgICAgICAgeC5hLCB4LmIgPSAwLCAtMQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAwLCA3LCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAwLCA3LCAwKSkKIAogCiAgICAgZGVmIGZhaWxfZmllbGRzKHNlbGYsICpmaWVsZHMpOgpAQCAtMTE1LDE3ICsxMTUsMTcgQEAKICAgICBkZWYgdGVzdF9ub25pbnRfdHlwZXMoc2VsZik6CiAgICAgICAgICMgYml0IGZpZWxkcyBhcmUgbm90IGFsbG93ZWQgb24gbm9uLWludGVnZXIgdHlwZXMuCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY19jaGFyX3AsIDEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIGNfY2hhcl9wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX2NoYXJfcCcpKQogCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY192b2lkX3AsIDEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIGNfdm9pZF9wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX3ZvaWRfcCcpKQogCiAgICAgICAgIGlmIGNfaW50ICE9IGNfbG9uZzoKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgUE9JTlRFUihjX2ludCksIDEpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBMUF9jX2ludCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIExQX2NfaW50JykpCiAKICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX2NoYXIsIDEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIGNfY2hhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgY19jaGFyJykpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY193Y2hhcgpAQCAtMTMzLDU5ICsxMzMsNTkgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY193Y2hhciwgMSkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIGNfd2NoYXInKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX3djaGFyJykpCiAKICAgICAgICAgY2xhc3MgRHVtbXkoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gW10KIAogICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIER1bW15LCAxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBEdW1teScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgRHVtbXknKSkKIAogICAgIGRlZiB0ZXN0X3NpbmdsZV9iaXRmaWVsZF9zaXplKHNlbGYpOgogICAgICAgICBmb3IgY190eXAgaW4gaW50X3R5cGVzOgogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX3R5cCwgLTEpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAoVmFsdWVFcnJvciwgJ251bWJlciBvZiBiaXRzIGludmFsaWQgZm9yIGJpdCBmaWVsZCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChWYWx1ZUVycm9yLCAnbnVtYmVyIG9mIGJpdHMgaW52YWxpZCBmb3IgYml0IGZpZWxkJykpCiAKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY190eXAsIDApKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAoVmFsdWVFcnJvciwgJ251bWJlciBvZiBiaXRzIGludmFsaWQgZm9yIGJpdCBmaWVsZCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChWYWx1ZUVycm9yLCAnbnVtYmVyIG9mIGJpdHMgaW52YWxpZCBmb3IgYml0IGZpZWxkJykpCiAKICAgICAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3R5cCwgMSldCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3R5cCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfdHlwKSkKIAogICAgICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfdHlwLCBzaXplb2YoY190eXApKjgpXQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY190eXApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3R5cCkpCiAKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY190eXAsIHNpemVvZihjX3R5cCkqOCArIDEpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAoVmFsdWVFcnJvciwgJ251bWJlciBvZiBiaXRzIGludmFsaWQgZm9yIGJpdCBmaWVsZCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChWYWx1ZUVycm9yLCAnbnVtYmVyIG9mIGJpdHMgaW52YWxpZCBmb3IgYml0IGZpZWxkJykpCiAKICAgICBkZWYgdGVzdF9tdWx0aV9iaXRmaWVsZHNfc2l6ZShzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19zaG9ydCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3Nob3J0LCAxNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX3Nob3J0LCAxKV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19zaG9ydCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19zaG9ydCkpCiAKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19zaG9ydCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImExIiwgY19zaG9ydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3Nob3J0LCAxNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX3Nob3J0LCAxKV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19zaG9ydCkqMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC5hLm9mZnNldCwgMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC5hMS5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC5iLm9mZnNldCwgc2l6ZW9mKGNfc2hvcnQpKjIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguYy5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSoyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfc2hvcnQpKjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5hLm9mZnNldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmExLm9mZnNldCwgc2l6ZW9mKGNfc2hvcnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYi5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSoyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYy5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSoyKQogCiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfc2hvcnQsIDMpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19zaG9ydCwgMTQpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19zaG9ydCwgMTQpXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3Nob3J0KSozKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLmEub2Zmc2V0LCBzaXplb2YoY19zaG9ydCkqMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC5iLm9mZnNldCwgc2l6ZW9mKGNfc2hvcnQpKjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguYy5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSoyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfc2hvcnQpKjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5hLm9mZnNldCwgc2l6ZW9mKGNfc2hvcnQpKjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5iLm9mZnNldCwgc2l6ZW9mKGNfc2hvcnQpKjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5jLm9mZnNldCwgc2l6ZW9mKGNfc2hvcnQpKjIpCiAKIAogICAgIGRlZiBnZXRfZXhjZXB0KHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3KToKQEAgLTE5OSwyMSArMTk5LDIxIEBACiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2J5dGUsIDQpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19pbnQsIDQpXQogICAgICAgICBpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSoyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkqMikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpKQogCiAgICAgZGVmIHRlc3RfbWl4ZWRfMihzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19ieXRlLCA0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfaW50LCAzMildCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSoyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSoyKQogCiAgICAgZGVmIHRlc3RfbWl4ZWRfMyhzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19ieXRlLCA0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfdWJ5dGUsIDQpXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2J5dGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfYnl0ZSkpCiAKICAgICBkZWYgdGVzdF9taXhlZF80KHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CkBAIC0yMjcsOSArMjI3LDkgQEAKICAgICAgICAgIyBkb2VzICh1bmxlc3MgR0NDIGlzIHJ1biB3aXRoICctbW1zLWJpdGZpZWxkcycgd2hpY2gKICAgICAgICAgIyBwcm9kdWNlcyBjb2RlIGNvbXBhdGlibGUgd2l0aCBNU1ZDKS4KICAgICAgICAgaWYgb3MubmFtZSBpbiAoIm50IiwgImNlIik6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkgKiA0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkgKiA0KQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpICogMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpICogMikKIAogICAgIGRlZiB0ZXN0X2Fub25fYml0ZmllbGRzKHNlbGYpOgogICAgICAgICAjIGFub255bW91cyBiaXQtZmllbGRzIGdhdmUgYSBzdHJhbmdlIGVycm9yIG1lc3NhZ2UKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J1ZmZlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9idWZmZXJzLnB5CmluZGV4IDViOTZkMTIuLmJmOTMxYWIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J1ZmZlcnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnVmZmVycy5weQpAQCAtNSwzMiArNSwzMiBAQAogCiAgICAgZGVmIHRlc3RfYnVmZmVyKHNlbGYpOgogICAgICAgICBiID0gY3JlYXRlX3N0cmluZ19idWZmZXIoMzIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihiKSwgMzIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihiKSwgMzIgKiBzaXplb2YoY19jaGFyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoYlswXSkgaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCAzMiAqIHNpemVvZihjX2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShiWzBdKSBpcyBzdHIpCiAKICAgICAgICAgYiA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKCJhYmMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfY2hhcikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGJbMF0pIGlzIHN0cikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYlswXSwgImEiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzpdLCAiYWJjXDAiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6XSwgImFiY1wwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6Oi0xXSwgIlwwY2JhIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6OjJdLCAiYWMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6NV0sICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY19jaGFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYlswXSkgaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCAiYWJjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjpdLCAiYWJjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCAiYWMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjo1XSwgImEiKQogCiAgICAgZGVmIHRlc3Rfc3RyaW5nX2NvbnZlcnNpb24oc2VsZik6CiAgICAgICAgIGIgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcih1ImFiYyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihiKSwgNCkgIyB0cmFpbGluZyBudWwgY2hhcgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY19jaGFyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoYlswXSkgaXMgc3RyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzBdLCAiYSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOl0sICJhYmNcMCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOjpdLCAiYWJjXDAiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6LTFdLCAiXDBjYmEiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6Ml0sICJhYyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOjo1XSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgNCkgIyB0cmFpbGluZyBudWwgY2hhcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihiKSwgNCAqIHNpemVvZihjX2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShiWzBdKSBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlswXSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOl0sICJhYmNcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Ol0sICJhYmNcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Oi0xXSwgIlwwY2JhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6Ml0sICJhYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjVdLCAiYSIpCiAKICAgICB0cnk6CiAgICAgICAgIGNfd2NoYXIKQEAgLTM5LDMyICszOSwzMiBAQAogICAgIGVsc2U6CiAgICAgICAgIGRlZiB0ZXN0X3VuaWNvZGVfYnVmZmVyKHNlbGYpOgogICAgICAgICAgICAgYiA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigzMikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihiKSwgMzIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoYiksIDMyICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoYlswXSkgaXMgdW5pY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCAzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCAzMiAqIHNpemVvZihjX3djaGFyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGJbMF0pIGlzIHVuaWNvZGUpCiAKICAgICAgICAgICAgIGIgPSBjcmVhdGVfdW5pY29kZV9idWZmZXIodSJhYmMiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKGIpLCA0KSAjIHRyYWlsaW5nIG51bCBjaGFyCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY193Y2hhcikpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShiWzBdKSBpcyB1bmljb2RlKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYlswXSwgdSJhIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOl0sICJhYmNcMCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6XSwgImFiY1wwIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOjotMV0sICJcMGNiYSIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6Ml0sICJhYyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6NV0sICJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCA0KSAjIHRyYWlsaW5nIG51bCBjaGFyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihiKSwgNCAqIHNpemVvZihjX3djaGFyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGJbMF0pIGlzIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sIHUiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOl0sICJhYmNcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjpdLCAiYWJjXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6LTFdLCAiXDBjYmEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6Ml0sICJhYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjo1XSwgImEiKQogCiAgICAgICAgIGRlZiB0ZXN0X3VuaWNvZGVfY29udmVyc2lvbihzZWxmKToKICAgICAgICAgICAgIGIgPSBjcmVhdGVfdW5pY29kZV9idWZmZXIoImFiYyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihiKSwgNCAqIHNpemVvZihjX3djaGFyKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGJbMF0pIGlzIHVuaWNvZGUpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzBdLCB1ImEiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6XSwgImFiY1wwIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOjpdLCAiYWJjXDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6Oi0xXSwgIlwwY2JhIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOjoyXSwgImFjIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOjo1XSwgImEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYlswXSkgaXMgdW5pY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlswXSwgdSJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Ol0sICJhYmNcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjVdLCAiYSIpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlc3dhcC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J5dGVzd2FwLnB5CmluZGV4IDFmNjg5OTIuLjMxNjM3NTYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J5dGVzd2FwLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J5dGVzd2FwLnB5CkBAIC00LDcgKzQsNyBAQAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKIAogZGVmIGJpbihzKToKLSAgICByZXR1cm4gaGV4bGlmeShidWZmZXIocykpLnVwcGVyKCkKKyAgICByZXR1cm4gaGV4bGlmeShtZW1vcnl2aWV3KHMpKS51cHBlcigpCiAKICMgRWFjaCAqc2ltcGxlKiB0eXBlIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IGJ5dGUgb3JkZXJzIGhhcyBhbgogIyBfX2N0eXBlX2JlX18gYXR0cmlidXRlIHRoYXQgc3BlY2lmaWVzIHRoZSBzYW1lIHR5cGUgaW4gQklHIEVORElBTgpAQCAtMjMsMTMxICsyMywxMzEgQEAKIAogICAgIGRlZiB0ZXN0X2VuZGlhbl9zaG9ydChzZWxmKToKICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3Nob3J0Ll9fY3R5cGVfbGVfXyBpcyBjX3Nob3J0KQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfc2hvcnQuX19jdHlwZV9iZV9fLl9fY3R5cGVfbGVfXyBpcyBjX3Nob3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc2hvcnQuX19jdHlwZV9sZV9fIGlzIGNfc2hvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zaG9ydC5fX2N0eXBlX2JlX18uX19jdHlwZV9sZV9fIGlzIGNfc2hvcnQpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19zaG9ydC5fX2N0eXBlX2JlX18gaXMgY19zaG9ydCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3Nob3J0Ll9fY3R5cGVfbGVfXy5fX2N0eXBlX2JlX18gaXMgY19zaG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3Nob3J0Ll9fY3R5cGVfYmVfXyBpcyBjX3Nob3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc2hvcnQuX19jdHlwZV9sZV9fLl9fY3R5cGVfYmVfXyBpcyBjX3Nob3J0KQogICAgICAgICBzID0gY19zaG9ydC5fX2N0eXBlX2JlX18oMHgxMjM0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIj5oIiwgMHgxMjM0KSksICIxMjM0IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHMpLCAiMTIzNCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMudmFsdWUsIDB4MTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIj5oIiwgMHgxMjM0KSksICIxMjM0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICIxMjM0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQpCiAKICAgICAgICAgcyA9IGNfc2hvcnQuX19jdHlwZV9sZV9fKDB4MTIzNCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHN0cnVjdC5wYWNrKCI8aCIsIDB4MTIzNCkpLCAiMzQxMiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzKSwgIjM0MTIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLnZhbHVlLCAweDEyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI8aCIsIDB4MTIzNCkpLCAiMzQxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiMzQxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0KQogCiAgICAgICAgIHMgPSBjX3VzaG9ydC5fX2N0eXBlX2JlX18oMHgxMjM0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIj5oIiwgMHgxMjM0KSksICIxMjM0IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHMpLCAiMTIzNCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMudmFsdWUsIDB4MTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIj5oIiwgMHgxMjM0KSksICIxMjM0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICIxMjM0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQpCiAKICAgICAgICAgcyA9IGNfdXNob3J0Ll9fY3R5cGVfbGVfXygweDEyMzQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGgiLCAweDEyMzQpKSwgIjM0MTIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4ocyksICIzNDEyIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy52YWx1ZSwgMHgxMjM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGgiLCAweDEyMzQpKSwgIjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIDB4MTIzNCkKIAogICAgIGRlZiB0ZXN0X2VuZGlhbl9pbnQoc2VsZik6CiAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19pbnQuX19jdHlwZV9sZV9fIGlzIGNfaW50KQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfaW50Ll9fY3R5cGVfYmVfXy5fX2N0eXBlX2xlX18gaXMgY19pbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19pbnQuX19jdHlwZV9sZV9fIGlzIGNfaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfaW50Ll9fY3R5cGVfYmVfXy5fX2N0eXBlX2xlX18gaXMgY19pbnQpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19pbnQuX19jdHlwZV9iZV9fIGlzIGNfaW50KQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfaW50Ll9fY3R5cGVfbGVfXy5fX2N0eXBlX2JlX18gaXMgY19pbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19pbnQuX19jdHlwZV9iZV9fIGlzIGNfaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfaW50Ll9fY3R5cGVfbGVfXy5fX2N0eXBlX2JlX18gaXMgY19pbnQpCiAKICAgICAgICAgcyA9IGNfaW50Ll9fY3R5cGVfYmVfXygweDEyMzQ1Njc4KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIj5pIiwgMHgxMjM0NTY3OCkpLCAiMTIzNDU2NzgiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4ocyksICIxMjM0NTY3OCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMudmFsdWUsIDB4MTIzNDU2NzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+aSIsIDB4MTIzNDU2NzgpKSwgIjEyMzQ1Njc4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICIxMjM0NTY3OCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3OCkKIAogICAgICAgICBzID0gY19pbnQuX19jdHlwZV9sZV9fKDB4MTIzNDU2NzgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGkiLCAweDEyMzQ1Njc4KSksICI3ODU2MzQxMiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzKSwgIjc4NTYzNDEyIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIjxpIiwgMHgxMjM0NTY3OCkpLCAiNzg1NjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIjc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4KQogCiAgICAgICAgIHMgPSBjX3VpbnQuX19jdHlwZV9iZV9fKDB4MTIzNDU2NzgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPkkiLCAweDEyMzQ1Njc4KSksICIxMjM0NTY3OCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzKSwgIjEyMzQ1Njc4IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIj5JIiwgMHgxMjM0NTY3OCkpLCAiMTIzNDU2NzgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIjEyMzQ1Njc4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4KQogCiAgICAgICAgIHMgPSBjX3VpbnQuX19jdHlwZV9sZV9fKDB4MTIzNDU2NzgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPEkiLCAweDEyMzQ1Njc4KSksICI3ODU2MzQxMiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzKSwgIjc4NTYzNDEyIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIjxJIiwgMHgxMjM0NTY3OCkpLCAiNzg1NjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIjc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4KQogCiAgICAgZGVmIHRlc3RfZW5kaWFuX2xvbmdsb25nKHNlbGYpOgogICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfbG9uZ2xvbmcuX19jdHlwZV9sZV9fIGlzIGNfbG9uZ2xvbmcpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19sb25nbG9uZy5fX2N0eXBlX2JlX18uX19jdHlwZV9sZV9fIGlzIGNfbG9uZ2xvbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19sb25nbG9uZy5fX2N0eXBlX2xlX18gaXMgY19sb25nbG9uZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2xvbmdsb25nLl9fY3R5cGVfYmVfXy5fX2N0eXBlX2xlX18gaXMgY19sb25nbG9uZykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2xvbmdsb25nLl9fY3R5cGVfYmVfXyBpcyBjX2xvbmdsb25nKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfbG9uZ2xvbmcuX19jdHlwZV9sZV9fLl9fY3R5cGVfYmVfXyBpcyBjX2xvbmdsb25nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfbG9uZ2xvbmcuX19jdHlwZV9iZV9fIGlzIGNfbG9uZ2xvbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19sb25nbG9uZy5fX2N0eXBlX2xlX18uX19jdHlwZV9iZV9fIGlzIGNfbG9uZ2xvbmcpCiAKICAgICAgICAgcyA9IGNfbG9uZ2xvbmcuX19jdHlwZV9iZV9fKDB4MTIzNDU2Nzg5MEFCQ0RFRikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+cSIsIDB4MTIzNDU2Nzg5MEFCQ0RFRikpLCAiMTIzNDU2Nzg5MEFCQ0RFRiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzKSwgIjEyMzQ1Njc4OTBBQkNERUYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4OTBBQkNERUYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+cSIsIDB4MTIzNDU2Nzg5MEFCQ0RFRikpLCAiMTIzNDU2Nzg5MEFCQ0RFRiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiMTIzNDU2Nzg5MEFCQ0RFRiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3ODkwQUJDREVGKQogCiAgICAgICAgIHMgPSBjX2xvbmdsb25nLl9fY3R5cGVfbGVfXygweDEyMzQ1Njc4OTBBQkNERUYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPHEiLCAweDEyMzQ1Njc4OTBBQkNERUYpKSwgIkVGQ0RBQjkwNzg1NjM0MTIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4ocyksICJFRkNEQUI5MDc4NTYzNDEyIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3ODkwQUJDREVGKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPHEiLCAweDEyMzQ1Njc4OTBBQkNERUYpKSwgIkVGQ0RBQjkwNzg1NjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIkVGQ0RBQjkwNzg1NjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIDB4MTIzNDU2Nzg5MEFCQ0RFRikKIAogICAgICAgICBzID0gY191bG9uZ2xvbmcuX19jdHlwZV9iZV9fKDB4MTIzNDU2Nzg5MEFCQ0RFRikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+USIsIDB4MTIzNDU2Nzg5MEFCQ0RFRikpLCAiMTIzNDU2Nzg5MEFCQ0RFRiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzKSwgIjEyMzQ1Njc4OTBBQkNERUYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4OTBBQkNERUYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+USIsIDB4MTIzNDU2Nzg5MEFCQ0RFRikpLCAiMTIzNDU2Nzg5MEFCQ0RFRiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiMTIzNDU2Nzg5MEFCQ0RFRiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3ODkwQUJDREVGKQogCiAgICAgICAgIHMgPSBjX3Vsb25nbG9uZy5fX2N0eXBlX2xlX18oMHgxMjM0NTY3ODkwQUJDREVGKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIjxRIiwgMHgxMjM0NTY3ODkwQUJDREVGKSksICJFRkNEQUI5MDc4NTYzNDEyIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHMpLCAiRUZDREFCOTA3ODU2MzQxMiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMudmFsdWUsIDB4MTIzNDU2Nzg5MEFCQ0RFRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIjxRIiwgMHgxMjM0NTY3ODkwQUJDREVGKSksICJFRkNEQUI5MDc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICJFRkNEQUI5MDc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4OTBBQkNERUYpCiAKICAgICBkZWYgdGVzdF9lbmRpYW5fZmxvYXQoc2VsZik6CiAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19mbG9hdC5fX2N0eXBlX2xlX18gaXMgY19mbG9hdCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2Zsb2F0Ll9fY3R5cGVfYmVfXy5fX2N0eXBlX2xlX18gaXMgY19mbG9hdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2Zsb2F0Ll9fY3R5cGVfbGVfXyBpcyBjX2Zsb2F0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfZmxvYXQuX19jdHlwZV9iZV9fLl9fY3R5cGVfbGVfXyBpcyBjX2Zsb2F0KQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfZmxvYXQuX19jdHlwZV9iZV9fIGlzIGNfZmxvYXQpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19mbG9hdC5fX2N0eXBlX2xlX18uX19jdHlwZV9iZV9fIGlzIGNfZmxvYXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19mbG9hdC5fX2N0eXBlX2JlX18gaXMgY19mbG9hdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2Zsb2F0Ll9fY3R5cGVfbGVfXy5fX2N0eXBlX2JlX18gaXMgY19mbG9hdCkKICAgICAgICAgcyA9IGNfZmxvYXQobWF0aC5waSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHN0cnVjdC5wYWNrKCJmIiwgbWF0aC5waSkpLCBiaW4ocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCJmIiwgbWF0aC5waSkpLCBiaW4ocykpCiAgICAgICAgICMgSG0sIHdoYXQncyB0aGUgcHJlY2lzaW9uIG9mIGEgZmxvYXQgY29tcGFyZWQgdG8gYSBkb3VibGU/Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKHMudmFsdWUsIG1hdGgucGksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocy52YWx1ZSwgbWF0aC5waSwgNikKICAgICAgICAgcyA9IGNfZmxvYXQuX19jdHlwZV9sZV9fKG1hdGgucGkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKHMudmFsdWUsIG1hdGgucGksIDYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGYiLCBtYXRoLnBpKSksIGJpbihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzLnZhbHVlLCBtYXRoLnBpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGYiLCBtYXRoLnBpKSksIGJpbihzKSkKICAgICAgICAgcyA9IGNfZmxvYXQuX19jdHlwZV9iZV9fKG1hdGgucGkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKHMudmFsdWUsIG1hdGgucGksIDYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPmYiLCBtYXRoLnBpKSksIGJpbihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzLnZhbHVlLCBtYXRoLnBpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPmYiLCBtYXRoLnBpKSksIGJpbihzKSkKIAogICAgIGRlZiB0ZXN0X2VuZGlhbl9kb3VibGUoc2VsZik6CiAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19kb3VibGUuX19jdHlwZV9sZV9fIGlzIGNfZG91YmxlKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfZG91YmxlLl9fY3R5cGVfYmVfXy5fX2N0eXBlX2xlX18gaXMgY19kb3VibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19kb3VibGUuX19jdHlwZV9sZV9fIGlzIGNfZG91YmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfZG91YmxlLl9fY3R5cGVfYmVfXy5fX2N0eXBlX2xlX18gaXMgY19kb3VibGUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19kb3VibGUuX19jdHlwZV9iZV9fIGlzIGNfZG91YmxlKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfZG91YmxlLl9fY3R5cGVfbGVfXy5fX2N0eXBlX2JlX18gaXMgY19kb3VibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19kb3VibGUuX19jdHlwZV9iZV9fIGlzIGNfZG91YmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfZG91YmxlLl9fY3R5cGVfbGVfXy5fX2N0eXBlX2JlX18gaXMgY19kb3VibGUpCiAgICAgICAgIHMgPSBjX2RvdWJsZShtYXRoLnBpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLnZhbHVlLCBtYXRoLnBpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soImQiLCBtYXRoLnBpKSksIGJpbihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCBtYXRoLnBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiZCIsIG1hdGgucGkpKSwgYmluKHMpKQogICAgICAgICBzID0gY19kb3VibGUuX19jdHlwZV9sZV9fKG1hdGgucGkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMudmFsdWUsIG1hdGgucGkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGQiLCBtYXRoLnBpKSksIGJpbihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCBtYXRoLnBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGQiLCBtYXRoLnBpKSksIGJpbihzKSkKICAgICAgICAgcyA9IGNfZG91YmxlLl9fY3R5cGVfYmVfXyhtYXRoLnBpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLnZhbHVlLCBtYXRoLnBpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIj5kIiwgbWF0aC5waSkpLCBiaW4ocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIj5kIiwgbWF0aC5waSkpLCBiaW4ocykpCiAKICAgICBkZWYgdGVzdF9lbmRpYW5fb3RoZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2J5dGUuX19jdHlwZV9sZV9fIGlzIGNfYnl0ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfYnl0ZS5fX2N0eXBlX2JlX18gaXMgY19ieXRlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19ieXRlLl9fY3R5cGVfbGVfXyBpcyBjX2J5dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2J5dGUuX19jdHlwZV9iZV9fIGlzIGNfYnl0ZSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY191Ynl0ZS5fX2N0eXBlX2xlX18gaXMgY191Ynl0ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfdWJ5dGUuX19jdHlwZV9iZV9fIGlzIGNfdWJ5dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3VieXRlLl9fY3R5cGVfbGVfXyBpcyBjX3VieXRlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY191Ynl0ZS5fX2N0eXBlX2JlX18gaXMgY191Ynl0ZSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19jaGFyLl9fY3R5cGVfbGVfXyBpcyBjX2NoYXIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2NoYXIuX19jdHlwZV9iZV9fIGlzIGNfY2hhcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfY2hhci5fX2N0eXBlX2xlX18gaXMgY19jaGFyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19jaGFyLl9fY3R5cGVfYmVfXyBpcyBjX2NoYXIpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3RfZmllbGRzXzEoc2VsZik6CiAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6CkBAIC0yMTksNyArMjE5LDcgQEAKIAogICAgICAgICBzMSA9IFMoMHgxMiwgMHgxMjM0LCAweDEyMzQ1Njc4LCAzLjE0KQogICAgICAgICBzMiA9IHN0cnVjdC5wYWNrKGZtdCwgMHgxMiwgMHgxMjM0LCAweDEyMzQ1Njc4LCAzLjE0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oczEpLCBiaW4oczIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzMSksIGJpbihzMikpCiAKICAgICBkZWYgdGVzdF91bmFsaWduZWRfbm9ubmF0aXZlX3N0cnVjdF9maWVsZHMoc2VsZik6CiAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6CkBAIC0yNDcsNyArMjQ3LDcgQEAKICAgICAgICAgczEuaSA9IDB4MTIzNDU2NzgKICAgICAgICAgczEuZCA9IDMuMTQKICAgICAgICAgczIgPSBzdHJ1Y3QucGFjayhmbXQsIDB4MTIsIDB4MTIzNCwgMHgxMjM0NTY3OCwgMy4xNCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHMxKSwgYmluKHMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oczEpLCBiaW4oczIpKQogCiAgICAgZGVmIHRlc3RfdW5hbGlnbmVkX25hdGl2ZV9zdHJ1Y3RfZmllbGRzKHNlbGYpOgogICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgpAQCAtMjc0LDcgKzI3NCw3IEBACiAgICAgICAgIHMxLmkgPSAweDEyMzQ1Njc4CiAgICAgICAgIHMxLmQgPSAzLjE0CiAgICAgICAgIHMyID0gc3RydWN0LnBhY2soZm10LCAweDEyLCAweDEyMzQsIDB4MTIzNDU2NzgsIDMuMTQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzMSksIGJpbihzMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMxKSwgYmluKHMyKSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weQppbmRleCA3MTc3MTFjLi42MjFhMDE5IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYWxsYmFja3MucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FsbGJhY2tzLnB5CkBAIC0xNywxOCArMTcsMTggQEAKICAgICAgICAgUFJPVE8gPSBzZWxmLmZ1bmN0eXBlLmltX2Z1bmModHlwLCB0eXApCiAgICAgICAgIHJlc3VsdCA9IFBST1RPKHNlbGYuY2FsbGJhY2spKGFyZykKICAgICAgICAgaWYgdHlwID09IGNfZmxvYXQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbChyZXN1bHQsIGFyZywgcGxhY2VzPTUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJlc3VsdCwgYXJnLCBwbGFjZXM9NSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuZ290X2FyZ3MsIChhcmcsKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdvdF9hcmdzLCAoYXJnLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgYXJnKQogCiAgICAgICAgIFBST1RPID0gc2VsZi5mdW5jdHlwZS5pbV9mdW5jKHR5cCwgY19ieXRlLCB0eXApCiAgICAgICAgIHJlc3VsdCA9IFBST1RPKHNlbGYuY2FsbGJhY2spKC0zLCBhcmcpCiAgICAgICAgIGlmIHR5cCA9PSBjX2Zsb2F0OgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzQWxtb3N0RXF1YWwocmVzdWx0LCBhcmcsIHBsYWNlcz01KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXN1bHQsIGFyZywgcGxhY2VzPTUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmdvdF9hcmdzLCAoLTMsIGFyZykpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nb3RfYXJncywgKC0zLCBhcmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGFyZykKIAogICAgICMjIyMjIyMjIyMjIyMjIyMKIApAQCAtNjEsMTAgKzYxLDE2IEBACiAgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX3Vsb25nLCA0MikKIAogICAgIGRlZiB0ZXN0X2xvbmdsb25nKHNlbGYpOgorICAgICAgICAjIHRlc3Qgc29tZSA2NC1iaXQgdmFsdWVzLCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfbG9uZ2xvbmcsIDU5NDgyOTE3NTcyNDUyNzc0NjcpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2xvbmdsb25nLCAtNTIyOTM4ODkwOTc4NDE5MDU4MCkKICAgICAgICAgc2VsZi5jaGVja190eXBlKGNfbG9uZ2xvbmcsIDQyKQogICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19sb25nbG9uZywgLTQyKQogCiAgICAgZGVmIHRlc3RfdWxvbmdsb25nKHNlbGYpOgorICAgICAgICAjIHRlc3Qgc29tZSA2NC1iaXQgdmFsdWVzLCB3aXRoIGFuZCB3aXRob3V0IG1zYiBzZXQuCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX3Vsb25nbG9uZywgMTA5NTU0MTIyNDIxNzAzMzk3ODIpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX3Vsb25nbG9uZywgMzY2NTg4NTQ5OTg0MTE2NzQ1OCkKICAgICAgICAgc2VsZi5jaGVja190eXBlKGNfdWxvbmdsb25nLCA0MikKIAogICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgpAQCAtMTAzLDcgKzEwOSw3IEBACiAgICAgICAgICAgICAjIC4uLmJ1dCB0aGlzIGNhbGwgZG9lc24ndCBsZWFrIGFueSBtb3JlLiAgV2hlcmUgaXMgdGhlIHJlZmNvdW50PwogICAgICAgICAgICAgc2VsZi5jaGVja190eXBlKHB5X29iamVjdCwgbykKICAgICAgICAgICAgIGFmdGVyID0gZ3JjKG8pCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoYWZ0ZXIsIG8pLCAoYmVmb3JlLCBvKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGFmdGVyLCBvKSwgKGJlZm9yZSwgbykpCiAKICAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9yZXN0eXBlXzEoc2VsZik6CiAgICAgICAgICMgT25seSAiZnVuZGFtZW50YWwiIHJlc3VsdCB0eXBlcyBhcmUgc3VwcG9ydGVkIGZvciBjYWxsYmFjawpAQCAtMTY0LDcgKzE3MCw3NyBAQAogICAgICAgICByZXN1bHQgPSBpbnRlZ3JhdGUoMC4wLCAxLjAsIENBTExCQUNLKGZ1bmMpLCAxMCkKICAgICAgICAgZGlmZiA9IGFicyhyZXN1bHQgLSAxLi8zLikKIAotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlmZiA8IDAuMDEsICIlcyBub3QgbGVzcyB0aGFuIDAuMDEiICUgZGlmZikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGRpZmYsIDAuMDEsICIlcyBub3QgbGVzcyB0aGFuIDAuMDEiICUgZGlmZikKKworICAgIGRlZiB0ZXN0X2lzc3VlXzg5NTlfYShzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5CisgICAgICAgIGxpYmNfcGF0aCA9IGZpbmRfbGlicmFyeSgiYyIpCisgICAgICAgIGlmIG5vdCBsaWJjX3BhdGg6CisgICAgICAgICAgICByZXR1cm4gIyBjYW5ub3QgdGVzdAorICAgICAgICBsaWJjID0gQ0RMTChsaWJjX3BhdGgpCisKKyAgICAgICAgQENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihjX2ludCksIFBPSU5URVIoY19pbnQpKQorICAgICAgICBkZWYgY21wX2Z1bmMoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYVswXSAtIGJbMF0KKworICAgICAgICBhcnJheSA9IChjX2ludCAqIDUpKDUsIDEsIDk5LCA3LCAzMykKKworICAgICAgICBsaWJjLnFzb3J0KGFycmF5LCBsZW4oYXJyYXkpLCBzaXplb2YoY19pbnQpLCBjbXBfZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheVs6XSwgWzEsIDUsIDcsIDMzLCA5OV0pCisKKyAgICB0cnk6CisgICAgICAgIFdJTkZVTkNUWVBFCisgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGRlZiB0ZXN0X2lzc3VlXzg5NTlfYihzZWxmKToKKyAgICAgICAgICAgIGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCT09MLCBIV05ELCBMUEFSQU0KKyAgICAgICAgICAgIGdsb2JhbCB3aW5kb3dDb3VudAorICAgICAgICAgICAgd2luZG93Q291bnQgPSAwCisKKyAgICAgICAgICAgIEBXSU5GVU5DVFlQRShCT09MLCBIV05ELCBMUEFSQU0pCisgICAgICAgICAgICBkZWYgRW51bVdpbmRvd3NDYWxsYmFja0Z1bmMoaHduZCwgbFBhcmFtKToKKyAgICAgICAgICAgICAgICBnbG9iYWwgd2luZG93Q291bnQKKyAgICAgICAgICAgICAgICB3aW5kb3dDb3VudCArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUgI0FsbG93IHdpbmRvd3MgdG8ga2VlcCBlbnVtZXJhdGluZworCisgICAgICAgICAgICB3aW5kbGwudXNlcjMyLkVudW1XaW5kb3dzKEVudW1XaW5kb3dzQ2FsbGJhY2tGdW5jLCAwKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfcmVnaXN0ZXJfaW50KHNlbGYpOgorICAgICAgICAjIElzc3VlICM4Mjc1OiBidWdneSBoYW5kbGluZyBvZiBjYWxsYmFjayBhcmdzIHVuZGVyIFdpbjY0CisgICAgICAgICMgTk9URTogc2hvdWxkIGJlIHJ1biBvbiByZWxlYXNlIGJ1aWxkcyBhcyB3ZWxsCisgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorICAgICAgICBDQUxMQkFDSyA9IENGVU5DVFlQRShjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCwgY19pbnQsIGNfaW50KQorICAgICAgICAjIEFsbCB0aGlzIGZ1bmN0aW9uIGRvZXMgaXMgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCBpdHMgYXJncyBzcXVhcmVkCisgICAgICAgIGZ1bmMgPSBkbGwuX3Rlc3RmdW5jX2Nia19yZWdfaW50CisgICAgICAgIGZ1bmMuYXJndHlwZXMgPSAoY19pbnQsIGNfaW50LCBjX2ludCwgY19pbnQsIGNfaW50LCBDQUxMQkFDSykKKyAgICAgICAgZnVuYy5yZXN0eXBlID0gY19pbnQKKworICAgICAgICBkZWYgY2FsbGJhY2soYSwgYiwgYywgZCwgZSk6CisgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjICsgZCArIGUKKworICAgICAgICByZXN1bHQgPSBmdW5jKDIsIDMsIDQsIDUsIDYsIENBTExCQUNLKGNhbGxiYWNrKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNhbGxiYWNrKDIqMiwgMyozLCA0KjQsIDUqNSwgNio2KSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3JlZ2lzdGVyX2RvdWJsZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjODI3NTogYnVnZ3kgaGFuZGxpbmcgb2YgY2FsbGJhY2sgYXJncyB1bmRlciBXaW42NAorICAgICAgICAjIE5PVEU6IHNob3VsZCBiZSBydW4gb24gcmVsZWFzZSBidWlsZHMgYXMgd2VsbAorICAgICAgICBkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgQ0FMTEJBQ0sgPSBDRlVOQ1RZUEUoY19kb3VibGUsIGNfZG91YmxlLCBjX2RvdWJsZSwgY19kb3VibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZG91YmxlLCBjX2RvdWJsZSkKKyAgICAgICAgIyBBbGwgdGhpcyBmdW5jdGlvbiBkb2VzIGlzIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGggaXRzIGFyZ3Mgc3F1YXJlZAorICAgICAgICBmdW5jID0gZGxsLl90ZXN0ZnVuY19jYmtfcmVnX2RvdWJsZQorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gKGNfZG91YmxlLCBjX2RvdWJsZSwgY19kb3VibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY19kb3VibGUsIGNfZG91YmxlLCBDQUxMQkFDSykKKyAgICAgICAgZnVuYy5yZXN0eXBlID0gY19kb3VibGUKKworICAgICAgICBkZWYgY2FsbGJhY2soYSwgYiwgYywgZCwgZSk6CisgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjICsgZCArIGUKKworICAgICAgICByZXN1bHQgPSBmdW5jKDEuMSwgMi4yLCAzLjMsIDQuNCwgNS41LCBDQUxMQkFDSyhjYWxsYmFjaykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKDEuMSoxLjEsIDIuMioyLjIsIDMuMyozLjMsIDQuNCo0LjQsIDUuNSo1LjUpKQorCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FzdC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkKaW5kZXggMjJjNjQ3NS4uOTA2ZmZmYyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FzdC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYXN0LnB5CkBAIC05LDE1ICs5LDE1IEBACiAKICAgICAgICAgIyBjYXN0aW5nIGFuIGFycmF5IHRvIGEgcG9pbnRlciB3b3Jrcy4KICAgICAgICAgcHRyID0gY2FzdChhcnJheSwgUE9JTlRFUihjX2ludCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFtwdHJbaV0gZm9yIGkgaW4gcmFuZ2UoMyldLCBbNDIsIDE3LCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbcHRyW2ldIGZvciBpIGluIHJhbmdlKDMpXSwgWzQyLCAxNywgMl0pCiAKICAgICAgICAgaWYgMipzaXplb2YoY19zaG9ydCkgPT0gc2l6ZW9mKGNfaW50KToKICAgICAgICAgICAgIHB0ciA9IGNhc3QoYXJyYXksIFBPSU5URVIoY19zaG9ydCkpCiAgICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFtwdHJbaV0gZm9yIGkgaW4gcmFuZ2UoNildLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3B0cltpXSBmb3IgaSBpbiByYW5nZSg2KV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzQyLCAwLCAxNywgMCwgMiwgMF0pCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFtwdHJbaV0gZm9yIGkgaW4gcmFuZ2UoNildLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3B0cltpXSBmb3IgaSBpbiByYW5nZSg2KV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAsIDQyLCAwLCAxNywgMCwgMl0pCiAKICAgICBkZWYgdGVzdF9hZGRyZXNzMnBvaW50ZXIoc2VsZik6CkBAIC0yNSw1NCArMjUsNTQgQEAKIAogICAgICAgICBhZGRyZXNzID0gYWRkcmVzc29mKGFycmF5KQogICAgICAgICBwdHIgPSBjYXN0KGNfdm9pZF9wKGFkZHJlc3MpLCBQT0lOVEVSKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoW3B0cltpXSBmb3IgaSBpbiByYW5nZSgzKV0sIFs0MiwgMTcsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtwdHJbaV0gZm9yIGkgaW4gcmFuZ2UoMyldLCBbNDIsIDE3LCAyXSkKIAogICAgICAgICBwdHIgPSBjYXN0KGFkZHJlc3MsIFBPSU5URVIoY19pbnQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChbcHRyW2ldIGZvciBpIGluIHJhbmdlKDMpXSwgWzQyLCAxNywgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3B0cltpXSBmb3IgaSBpbiByYW5nZSgzKV0sIFs0MiwgMTcsIDJdKQogCiAgICAgZGVmIHRlc3RfcDJhX29iamVjdHMoc2VsZik6CiAgICAgICAgIGFycmF5ID0gKGNfY2hhcl9wICogNSkoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhcnJheS5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheS5fb2JqZWN0cywgTm9uZSkKICAgICAgICAgYXJyYXlbMF0gPSAiZm9vIGJhciIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYXJyYXkuX29iamVjdHMsIHsnMCc6ICJmb28gYmFyIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJyYXkuX29iamVjdHMsIHsnMCc6ICJmb28gYmFyIn0pCiAKICAgICAgICAgcCA9IGNhc3QoYXJyYXksIFBPSU5URVIoY19jaGFyX3ApKQogICAgICAgICAjIGFycmF5IGFuZCBwIHNoYXJlIGEgY29tbW9uIF9vYmplY3RzIGF0dHJpYnV0ZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocC5fb2JqZWN0cyBpcyBhcnJheS5fb2JqZWN0cykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYXJyYXkuX29iamVjdHMsIHsnMCc6ICJmb28gYmFyIiwgaWQoYXJyYXkpOiBhcnJheX0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLl9vYmplY3RzIGlzIGFycmF5Ll9vYmplY3RzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFycmF5Ll9vYmplY3RzLCB7JzAnOiAiZm9vIGJhciIsIGlkKGFycmF5KTogYXJyYXl9KQogICAgICAgICBwWzBdID0gInNwYW0gc3BhbSIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocC5fb2JqZWN0cywgeycwJzogInNwYW0gc3BhbSIsIGlkKGFycmF5KTogYXJyYXl9KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYXJyYXkuX29iamVjdHMgaXMgcC5fb2JqZWN0cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9vYmplY3RzLCB7JzAnOiAic3BhbSBzcGFtIiwgaWQoYXJyYXkpOiBhcnJheX0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcnJheS5fb2JqZWN0cyBpcyBwLl9vYmplY3RzKQogICAgICAgICBwWzFdID0gImZvbyBiYXIiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHAuX29iamVjdHMsIHsnMSc6ICdmb28gYmFyJywgJzAnOiAic3BhbSBzcGFtIiwgaWQoYXJyYXkpOiBhcnJheX0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhhcnJheS5fb2JqZWN0cyBpcyBwLl9vYmplY3RzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX29iamVjdHMsIHsnMSc6ICdmb28gYmFyJywgJzAnOiAic3BhbSBzcGFtIiwgaWQoYXJyYXkpOiBhcnJheX0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcnJheS5fb2JqZWN0cyBpcyBwLl9vYmplY3RzKQogCiAgICAgZGVmIHRlc3Rfb3RoZXIoc2VsZik6CiAgICAgICAgIHAgPSBjYXN0KChjX2ludCAqIDQpKDEsIDIsIDMsIDQpLCBQT0lOVEVSKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6NF0sIFsxLDIsIDMsIDRdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzo0Ol0sIFsxLCAyLCAzLCA0XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFszOi0xOi0xXSwgWzQsIDMsIDIsIDFdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzo0OjNdLCBbMSwgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6NF0sIFsxLDIsIDMsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjQ6XSwgWzEsIDIsIDMsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbMzotMTotMV0sIFs0LCAzLCAyLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0OjNdLCBbMSwgNF0pCiAgICAgICAgIGNfaW50KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6NF0sIFsxLCAyLCAzLCA0XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6NDpdLCBbMSwgMiwgMywgNF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbMzotMTotMV0sIFs0LCAzLCAyLCAxXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6NDozXSwgWzEsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjRdLCBbMSwgMiwgMywgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6NDpdLCBbMSwgMiwgMywgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFszOi0xOi0xXSwgWzQsIDMsIDIsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjQ6M10sIFsxLCA0XSkKICAgICAgICAgcFsyXSA9IDk2Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbOjRdLCBbMSwgMiwgOTYsIDRdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzo0Ol0sIFsxLCAyLCA5NiwgNF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbMzotMTotMV0sIFs0LCA5NiwgMiwgMV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbOjQ6M10sIFsxLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0XSwgWzEsIDIsIDk2LCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0Ol0sIFsxLCAyLCA5NiwgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFszOi0xOi0xXSwgWzQsIDk2LCAyLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0OjNdLCBbMSwgNF0pCiAgICAgICAgIGNfaW50KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6NF0sIFsxLCAyLCA5NiwgNF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbOjQ6XSwgWzEsIDIsIDk2LCA0XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFszOi0xOi0xXSwgWzQsIDk2LCAyLCAxXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6NDozXSwgWzEsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjRdLCBbMSwgMiwgOTYsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjQ6XSwgWzEsIDIsIDk2LCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzM6LTE6LTFdLCBbNCwgOTYsIDIsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjQ6M10sIFsxLCA0XSkKIAogICAgIGRlZiB0ZXN0X2NoYXJfcChzZWxmKToKICAgICAgICAgIyBUaGlzIGRpZG4ndCB3b3JrOiBiYWQgYXJndW1lbnQgdG8gaW50ZXJuYWwgZnVuY3Rpb24KICAgICAgICAgcyA9IGNfY2hhcl9wKCJoaWhvIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FzdChjYXN0KHMsIGNfdm9pZF9wKSwgY19jaGFyX3ApLnZhbHVlLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoY2FzdChzLCBjX3ZvaWRfcCksIGNfY2hhcl9wKS52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpaG8iKQogCiAgICAgdHJ5OgpAQCAtODIsNyArODIsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIGRlZiB0ZXN0X3djaGFyX3Aoc2VsZik6CiAgICAgICAgICAgICBzID0gY193Y2hhcl9wKCJoaWhvIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhc3QoY2FzdChzLCBjX3ZvaWRfcCksIGNfd2NoYXJfcCkudmFsdWUsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoY2FzdChzLCBjX3ZvaWRfcCksIGNfd2NoYXJfcCkudmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGlobyIpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jZnVuY3MucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jZnVuY3MucHkKaW5kZXggOGY5N2ZjNC4uNDkzY2JlOSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NmdW5jcy5weQpAQCAtMTcsMTc2ICsxNywxNzYgQEAKICAgICBkZWYgdGVzdF9ieXRlKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfYi5yZXN0eXBlID0gY19ieXRlCiAgICAgICAgIHNlbGYuX2RsbC50Zl9iLmFyZ3R5cGVzID0gKGNfYnl0ZSwpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9iKC0xMjYpLCAtNDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCAtMTI2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iKC0xMjYpLCAtNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC0xMjYpCiAKICAgICBkZWYgdGVzdF9ieXRlX3BsdXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iYi5yZXN0eXBlID0gY19ieXRlCiAgICAgICAgIHNlbGYuX2RsbC50Zl9iYi5hcmd0eXBlcyA9IChjX2J5dGUsIGNfYnl0ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2JiKDAsIC0xMjYpLCAtNDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCAtMTI2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iYigwLCAtMTI2KSwgLTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtMTI2KQogCiAgICAgZGVmIHRlc3RfdWJ5dGUoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9CLnJlc3R5cGUgPSBjX3VieXRlCiAgICAgICAgIHNlbGYuX2RsbC50Zl9CLmFyZ3R5cGVzID0gKGNfdWJ5dGUsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfQigyNTUpLCA4NSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5VKCksIDI1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfQigyNTUpLCA4NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgMjU1KQogCiAgICAgZGVmIHRlc3RfdWJ5dGVfcGx1cyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2JCLnJlc3R5cGUgPSBjX3VieXRlCiAgICAgICAgIHNlbGYuX2RsbC50Zl9iQi5hcmd0eXBlcyA9IChjX2J5dGUsIGNfdWJ5dGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9iQigwLCAyNTUpLCA4NSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5VKCksIDI1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYkIoMCwgMjU1KSwgODUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDI1NSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0KHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfaC5yZXN0eXBlID0gY19zaG9ydAogICAgICAgICBzZWxmLl9kbGwudGZfaC5hcmd0eXBlcyA9IChjX3Nob3J0LCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2goLTMyNzY2KSwgLTEwOTIyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgLTMyNzY2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9oKC0zMjc2NiksIC0xMDkyMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTMyNzY2KQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfcGx1cyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2JoLnJlc3R5cGUgPSBjX3Nob3J0CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iaC5hcmd0eXBlcyA9IChjX2J5dGUsIGNfc2hvcnQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9iaCgwLCAtMzI3NjYpLCAtMTA5MjIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCAtMzI3NjYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JoKDAsIC0zMjc2NiksIC0xMDkyMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTMyNzY2KQogCiAgICAgZGVmIHRlc3RfdXNob3J0KHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfSC5yZXN0eXBlID0gY191c2hvcnQKICAgICAgICAgc2VsZi5fZGxsLnRmX0guYXJndHlwZXMgPSAoY191c2hvcnQsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfSCg2NTUzNSksIDIxODQ1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlUoKSwgNjU1MzUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX0goNjU1MzUpLCAyMTg0NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgNjU1MzUpCiAKICAgICBkZWYgdGVzdF91c2hvcnRfcGx1cyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2JILnJlc3R5cGUgPSBjX3VzaG9ydAogICAgICAgICBzZWxmLl9kbGwudGZfYkguYXJndHlwZXMgPSAoY19ieXRlLCBjX3VzaG9ydCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2JIKDAsIDY1NTM1KSwgMjE4NDUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuVSgpLCA2NTUzNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYkgoMCwgNjU1MzUpLCAyMTg0NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgNjU1MzUpCiAKICAgICBkZWYgdGVzdF9pbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9pLnJlc3R5cGUgPSBjX2ludAogICAgICAgICBzZWxmLl9kbGwudGZfaS5hcmd0eXBlcyA9IChjX2ludCwpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9pKC0yMTQ3NDgzNjQ2KSwgLTcxNTgyNzg4MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIC0yMTQ3NDgzNjQ2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9pKC0yMTQ3NDgzNjQ2KSwgLTcxNTgyNzg4MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTIxNDc0ODM2NDYpCiAKICAgICBkZWYgdGVzdF9pbnRfcGx1cyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2JpLnJlc3R5cGUgPSBjX2ludAogICAgICAgICBzZWxmLl9kbGwudGZfYmkuYXJndHlwZXMgPSAoY19ieXRlLCBjX2ludCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2JpKDAsIC0yMTQ3NDgzNjQ2KSwgLTcxNTgyNzg4MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIC0yMTQ3NDgzNjQ2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iaSgwLCAtMjE0NzQ4MzY0NiksIC03MTU4Mjc4ODIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC0yMTQ3NDgzNjQ2KQogCiAgICAgZGVmIHRlc3RfdWludChzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX0kucmVzdHlwZSA9IGNfdWludAogICAgICAgICBzZWxmLl9kbGwudGZfSS5hcmd0eXBlcyA9IChjX3VpbnQsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfSSg0Mjk0OTY3Mjk1KSwgMTQzMTY1NTc2NSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5VKCksIDQyOTQ5NjcyOTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX0koNDI5NDk2NzI5NSksIDE0MzE2NTU3NjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDQyOTQ5NjcyOTUpCiAKICAgICBkZWYgdGVzdF91aW50X3BsdXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iSS5yZXN0eXBlID0gY191aW50CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iSS5hcmd0eXBlcyA9IChjX2J5dGUsIGNfdWludCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2JJKDAsIDQyOTQ5NjcyOTUpLCAxNDMxNjU1NzY1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlUoKSwgNDI5NDk2NzI5NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYkkoMCwgNDI5NDk2NzI5NSksIDE0MzE2NTU3NjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDQyOTQ5NjcyOTUpCiAKICAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfbC5yZXN0eXBlID0gY19sb25nCiAgICAgICAgIHNlbGYuX2RsbC50Zl9sLmFyZ3R5cGVzID0gKGNfbG9uZywpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9sKC0yMTQ3NDgzNjQ2KSwgLTcxNTgyNzg4MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIC0yMTQ3NDgzNjQ2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9sKC0yMTQ3NDgzNjQ2KSwgLTcxNTgyNzg4MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTIxNDc0ODM2NDYpCiAKICAgICBkZWYgdGVzdF9sb25nX3BsdXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9ibC5yZXN0eXBlID0gY19sb25nCiAgICAgICAgIHNlbGYuX2RsbC50Zl9ibC5hcmd0eXBlcyA9IChjX2J5dGUsIGNfbG9uZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2JsKDAsIC0yMTQ3NDgzNjQ2KSwgLTcxNTgyNzg4MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIC0yMTQ3NDgzNjQ2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9ibCgwLCAtMjE0NzQ4MzY0NiksIC03MTU4Mjc4ODIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC0yMTQ3NDgzNjQ2KQogCiAgICAgZGVmIHRlc3RfdWxvbmcoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9MLnJlc3R5cGUgPSBjX3Vsb25nCiAgICAgICAgIHNlbGYuX2RsbC50Zl9MLmFyZ3R5cGVzID0gKGNfdWxvbmcsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfTCg0Mjk0OTY3Mjk1KSwgMTQzMTY1NTc2NSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5VKCksIDQyOTQ5NjcyOTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX0woNDI5NDk2NzI5NSksIDE0MzE2NTU3NjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDQyOTQ5NjcyOTUpCiAKICAgICBkZWYgdGVzdF91bG9uZ19wbHVzKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfYkwucmVzdHlwZSA9IGNfdWxvbmcKICAgICAgICAgc2VsZi5fZGxsLnRmX2JMLmFyZ3R5cGVzID0gKGNfY2hhciwgY191bG9uZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2JMKCcgJywgNDI5NDk2NzI5NSksIDE0MzE2NTU3NjUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuVSgpLCA0Mjk0OTY3Mjk1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iTCgnICcsIDQyOTQ5NjcyOTUpLCAxNDMxNjU1NzY1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuVSgpLCA0Mjk0OTY3Mjk1KQogCiAgICAgZGVmIHRlc3RfbG9uZ2xvbmcoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9xLnJlc3R5cGUgPSBjX2xvbmdsb25nCiAgICAgICAgIHNlbGYuX2RsbC50Zl9xLmFyZ3R5cGVzID0gKGNfbG9uZ2xvbmcsICkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX3EoLTkyMjMzNzIwMzY4NTQ3NzU4MDYpLCAtMzA3NDQ1NzM0NTYxODI1ODYwMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIC05MjIzMzcyMDM2ODU0Nzc1ODA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9xKC05MjIzMzcyMDM2ODU0Nzc1ODA2KSwgLTMwNzQ0NTczNDU2MTgyNTg2MDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC05MjIzMzcyMDM2ODU0Nzc1ODA2KQogCiAgICAgZGVmIHRlc3RfbG9uZ2xvbmdfcGx1cyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2JxLnJlc3R5cGUgPSBjX2xvbmdsb25nCiAgICAgICAgIHNlbGYuX2RsbC50Zl9icS5hcmd0eXBlcyA9IChjX2J5dGUsIGNfbG9uZ2xvbmcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9icSgwLCAtOTIyMzM3MjAzNjg1NDc3NTgwNiksIC0zMDc0NDU3MzQ1NjE4MjU4NjAyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JxKDAsIC05MjIzMzcyMDM2ODU0Nzc1ODA2KSwgLTMwNzQ0NTczNDU2MTgyNTg2MDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC05MjIzMzcyMDM2ODU0Nzc1ODA2KQogCiAgICAgZGVmIHRlc3RfdWxvbmdsb25nKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfUS5yZXN0eXBlID0gY191bG9uZ2xvbmcKICAgICAgICAgc2VsZi5fZGxsLnRmX1EuYXJndHlwZXMgPSAoY191bG9uZ2xvbmcsICkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX1EoMTg0NDY3NDQwNzM3MDk1NTE2MTUpLCA2MTQ4OTE0NjkxMjM2NTE3MjA1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlUoKSwgMTg0NDY3NDQwNzM3MDk1NTE2MTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX1EoMTg0NDY3NDQwNzM3MDk1NTE2MTUpLCA2MTQ4OTE0NjkxMjM2NTE3MjA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuVSgpLCAxODQ0Njc0NDA3MzcwOTU1MTYxNSkKIAogICAgIGRlZiB0ZXN0X3Vsb25nbG9uZ19wbHVzKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfYlEucmVzdHlwZSA9IGNfdWxvbmdsb25nCiAgICAgICAgIHNlbGYuX2RsbC50Zl9iUS5hcmd0eXBlcyA9IChjX2J5dGUsIGNfdWxvbmdsb25nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfYlEoMCwgMTg0NDY3NDQwNzM3MDk1NTE2MTUpLCA2MTQ4OTE0NjkxMjM2NTE3MjA1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlUoKSwgMTg0NDY3NDQwNzM3MDk1NTE2MTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JRKDAsIDE4NDQ2NzQ0MDczNzA5NTUxNjE1KSwgNjE0ODkxNDY5MTIzNjUxNzIwNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgMTg0NDY3NDQwNzM3MDk1NTE2MTUpCiAKICAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2YucmVzdHlwZSA9IGNfZmxvYXQKICAgICAgICAgc2VsZi5fZGxsLnRmX2YuYXJndHlwZXMgPSAoY19mbG9hdCwpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9mKC00Mi4pLCAtMTQuKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgLTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9mKC00Mi4pLCAtMTQuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtNDIpCiAKICAgICBkZWYgdGVzdF9mbG9hdF9wbHVzKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfYmYucmVzdHlwZSA9IGNfZmxvYXQKICAgICAgICAgc2VsZi5fZGxsLnRmX2JmLmFyZ3R5cGVzID0gKGNfYnl0ZSwgY19mbG9hdCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2JmKDAsIC00Mi4pLCAtMTQuKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgLTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iZigwLCAtNDIuKSwgLTE0LikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTQyKQogCiAgICAgZGVmIHRlc3RfZG91YmxlKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfZC5yZXN0eXBlID0gY19kb3VibGUKICAgICAgICAgc2VsZi5fZGxsLnRmX2QuYXJndHlwZXMgPSAoY19kb3VibGUsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfZCg0Mi4pLCAxNC4pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfZCg0Mi4pLCAxNC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIDQyKQogCiAgICAgZGVmIHRlc3RfZG91YmxlX3BsdXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iZC5yZXN0eXBlID0gY19kb3VibGUKICAgICAgICAgc2VsZi5fZGxsLnRmX2JkLmFyZ3R5cGVzID0gKGNfYnl0ZSwgY19kb3VibGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9iZCgwLCA0Mi4pLCAxNC4pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYmQoMCwgNDIuKSwgMTQuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCA0MikKIAogICAgIGRlZiB0ZXN0X2xvbmdkb3VibGUoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9ELnJlc3R5cGUgPSBjX2xvbmdkb3VibGUKICAgICAgICAgc2VsZi5fZGxsLnRmX0QuYXJndHlwZXMgPSAoY19sb25nZG91YmxlLCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX0QoNDIuKSwgMTQuKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX0QoNDIuKSwgMTQuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCA0MikKIAogICAgIGRlZiB0ZXN0X2xvbmdkb3VibGVfcGx1cyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2JELnJlc3R5cGUgPSBjX2xvbmdkb3VibGUKICAgICAgICAgc2VsZi5fZGxsLnRmX2JELmFyZ3R5cGVzID0gKGNfYnl0ZSwgY19sb25nZG91YmxlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfYkQoMCwgNDIuKSwgMTQuKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JEKDAsIDQyLiksIDE0LikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgNDIpCiAKICAgICBkZWYgdGVzdF9jYWxsd2l0aHJlc3VsdChzZWxmKToKICAgICAgICAgZGVmIHByb2Nlc3NfcmVzdWx0KHJlc3VsdCk6CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICogMgogICAgICAgICBzZWxmLl9kbGwudGZfaS5yZXN0eXBlID0gcHJvY2Vzc19yZXN1bHQKICAgICAgICAgc2VsZi5fZGxsLnRmX2kuYXJndHlwZXMgPSAoY19pbnQsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfaSg0MiksIDI4KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgNDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9pKC00MiksIC0yOCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIC00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfaSg0MiksIDI4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfaSgtNDIpLCAtMjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC00MikKIAogICAgIGRlZiB0ZXN0X3ZvaWQoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50dl9pLnJlc3R5cGUgPSBOb25lCiAgICAgICAgIHNlbGYuX2RsbC50dl9pLmFyZ3R5cGVzID0gKGNfaW50LCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnR2X2koNDIpLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgNDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50dl9pKC00MiksIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCAtNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnR2X2koNDIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudHZfaSgtNDIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtNDIpCiAKICMgVGhlIGZvbGxvd2luZyByZXBlYXRlcyB0aGUgYWJvdmUgdGVzdHMgd2l0aCBzdGRjYWxsIGZ1bmN0aW9ucyAod2hlcmUKICMgdGhleSBhcmUgYXZhaWxhYmxlKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQppbmRleCBkMTViZDJlLi4wMWNjYzU3IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQpAQCAtMTQsMTYgKzE0LDE2IEBACiAKICAgICAgICAgaW1wb3J0IF9jdHlwZXNfdGVzdAogICAgICAgICBkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGRsbC5fdGVzdGZ1bmNfcF9wKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZGxsLl90ZXN0ZnVuY19wX3AoNDIpKQogCiAgICAgICAgIGRsbC5fdGVzdGZ1bmNfcF9wLnJlc3R5cGUgPSBDSEVDS0VECi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCI0MiIsIGRsbC5fdGVzdGZ1bmNfcF9wKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiNDIiLCBkbGwuX3Rlc3RmdW5jX3BfcCg0MikpCiAKICAgICAgICAgZGxsLl90ZXN0ZnVuY19wX3AucmVzdHlwZSA9IE5vbmUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgZGxsLl90ZXN0ZnVuY19wX3AoNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGRsbC5fdGVzdGZ1bmNfcF9wKDQyKSkKIAogICAgICAgICBkZWwgZGxsLl90ZXN0ZnVuY19wX3AucmVzdHlwZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZGxsLl90ZXN0ZnVuY19wX3AoNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBkbGwuX3Rlc3RmdW5jX3BfcCg0MikpCiAKICAgICB0cnk6CiAgICAgICAgIG9sZWRsbApAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICBwYXNzCiAgICAgZWxzZToKICAgICAgICAgZGVmIHRlc3Rfb2xlZGxsKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFdpbmRvd3NFcnJvciwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGVkbGwub2xlYXV0MzIuQ3JlYXRlVHlwZUxpYjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTm9uZSwgTm9uZSkKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZXJybm8ucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9lcnJuby5weQppbmRleCBiODA2NTZiLi5jN2E1YmYwIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9lcnJuby5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9lcnJuby5weQpAQCAtMSwyNyArMSwzMiBAQAogaW1wb3J0IHVuaXR0ZXN0LCBvcywgZXJybm8KIGZyb20gY3R5cGVzIGltcG9ydCAqCiBmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKLWltcG9ydCB0aHJlYWRpbmcKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKIAogY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKICAgICAgICAgbGliY19uYW1lID0gZmluZF9saWJyYXJ5KCJjIikKLSAgICAgICAgaWYgbGliY19uYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgbGliYyA9IENETEwobGliY19uYW1lLCB1c2VfZXJybm89VHJ1ZSkKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgICAgICAgICBsaWJjX29wZW4gPSBsaWJjLl9vcGVuCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxpYmNfb3BlbiA9IGxpYmMub3BlbgorICAgICAgICBpZiBsaWJjX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJVbmFibGUgdG8gZmluZCBDIGxpYnJhcnkiKQorICAgICAgICBsaWJjID0gQ0RMTChsaWJjX25hbWUsIHVzZV9lcnJubz1UcnVlKQorICAgICAgICBpZiBvcy5uYW1lID09ICJudCI6CisgICAgICAgICAgICBsaWJjX29wZW4gPSBsaWJjLl9vcGVuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaWJjX29wZW4gPSBsaWJjLm9wZW4KIAotICAgICAgICAgICAgbGliY19vcGVuLmFyZ3R5cGVzID0gY19jaGFyX3AsIGNfaW50CisgICAgICAgIGxpYmNfb3Blbi5hcmd0eXBlcyA9IGNfY2hhcl9wLCBjX2ludAogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsaWJjX29wZW4oIiIsIDApLCAtMSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdldF9lcnJubygpLCBlcnJuby5FTk9FTlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGliY19vcGVuKCIiLCAwKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm5vKCksIGVycm5vLkVOT0VOVCkKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2V0X2Vycm5vKDMyKSwgZXJybm8uRU5PRU5UKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ2V0X2Vycm5vKCksIDMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldF9lcnJubygzMiksIGVycm5vLkVOT0VOVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJybm8oKSwgMzIpCiAKLQorICAgICAgICBpZiB0aHJlYWRpbmc6CiAgICAgICAgICAgICBkZWYgX3dvcmtlcigpOgogICAgICAgICAgICAgICAgIHNldF9lcnJubygwKQogCkBAIC0zMSw0NiArMzYsNDUgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBsaWJjX29wZW4gPSBsaWJjLm9wZW4KICAgICAgICAgICAgICAgICBsaWJjX29wZW4uYXJndHlwZXMgPSBjX2NoYXJfcCwgY19pbnQKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsaWJjX29wZW4oIiIsIDApLCAtMSkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChnZXRfZXJybm8oKSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpYmNfb3BlbigiIiwgMCksIC0xKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm5vKCksIDApCiAKICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fd29ya2VyKQogICAgICAgICAgICAgdC5zdGFydCgpCiAgICAgICAgICAgICB0LmpvaW4oKQogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChnZXRfZXJybm8oKSwgMzIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJubygpLCAzMikKICAgICAgICAgICAgIHNldF9lcnJubygwKQogCi0gICAgaWYgb3MubmFtZSA9PSAibnQiOgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gIm50IiwgJ1Rlc3Qgc3BlY2lmaWMgdG8gV2luZG93cycpCisgICAgZGVmIHRlc3RfR2V0TGFzdEVycm9yKHNlbGYpOgorICAgICAgICBkbGwgPSBXaW5ETEwoImtlcm5lbDMyIiwgdXNlX2xhc3RfZXJyb3I9VHJ1ZSkKKyAgICAgICAgR2V0TW9kdWxlSGFuZGxlID0gZGxsLkdldE1vZHVsZUhhbmRsZUEKKyAgICAgICAgR2V0TW9kdWxlSGFuZGxlLmFyZ3R5cGVzID0gW2Nfd2NoYXJfcF0KIAotICAgICAgICBkZWYgdGVzdF9HZXRMYXN0RXJyb3Ioc2VsZik6Ci0gICAgICAgICAgICBkbGwgPSBXaW5ETEwoImtlcm5lbDMyIiwgdXNlX2xhc3RfZXJyb3I9VHJ1ZSkKLSAgICAgICAgICAgIEdldE1vZHVsZUhhbmRsZSA9IGRsbC5HZXRNb2R1bGVIYW5kbGVBCi0gICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUuYXJndHlwZXMgPSBbY193Y2hhcl9wXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIEdldE1vZHVsZUhhbmRsZSgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2xhc3RfZXJyb3IoKSwgMTI2KQogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBHZXRNb2R1bGVIYW5kbGUoImZvbyIpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ2V0X2xhc3RfZXJyb3IoKSwgMTI2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldF9sYXN0X2Vycm9yKDMyKSwgMTI2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9sYXN0X2Vycm9yKCksIDMyKQogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZXRfbGFzdF9lcnJvcigzMiksIDEyNikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdldF9sYXN0X2Vycm9yKCksIDMyKQotCi0gICAgICAgICAgICBkZWYgX3dvcmtlcigpOgotICAgICAgICAgICAgICAgIHNldF9sYXN0X2Vycm9yKDApCi0KLSAgICAgICAgICAgICAgICBkbGwgPSBXaW5ETEwoImtlcm5lbDMyIiwgdXNlX2xhc3RfZXJyb3I9RmFsc2UpCi0gICAgICAgICAgICAgICAgR2V0TW9kdWxlSGFuZGxlID0gZGxsLkdldE1vZHVsZUhhbmRsZVcKLSAgICAgICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUuYXJndHlwZXMgPSBbY193Y2hhcl9wXQotICAgICAgICAgICAgICAgIEdldE1vZHVsZUhhbmRsZSgiYmFyIikKLQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdldF9sYXN0X2Vycm9yKCksIDApCi0KLSAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fd29ya2VyKQotICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICB0LmpvaW4oKQotCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChnZXRfbGFzdF9lcnJvcigpLCAzMikKLQorICAgICAgICBkZWYgX3dvcmtlcigpOgogICAgICAgICAgICAgc2V0X2xhc3RfZXJyb3IoMCkKIAorICAgICAgICAgICAgZGxsID0gV2luRExMKCJrZXJuZWwzMiIsIHVzZV9sYXN0X2Vycm9yPUZhbHNlKQorICAgICAgICAgICAgR2V0TW9kdWxlSGFuZGxlID0gZGxsLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIEdldE1vZHVsZUhhbmRsZS5hcmd0eXBlcyA9IFtjX3djaGFyX3BdCisgICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUoImJhciIpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2xhc3RfZXJyb3IoKSwgMCkKKworICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9X3dvcmtlcikKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHQuam9pbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfbGFzdF9lcnJvcigpLCAzMikKKworICAgICAgICBzZXRfbGFzdF9lcnJvcigwKQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkKaW5kZXggZWQxMjk3ZC4uNzdlNzg5ZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9maW5kLnB5CkBAIC03Niw3ICs3Niw3IEBACiAjIyAgICAgICAgICAgIHNxcnQgPSBsaWJtLnNxcnQKICMjICAgICAgICAgICAgc3FydC5hcmd0eXBlcyA9IChjX2RvdWJsZSwpCiAjIyAgICAgICAgICAgIHNxcnQucmVzdHlwZSA9IGNfZG91YmxlCi0jIyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNxcnQoMiksIG1hdGguc3FydCgyKSkKKyMjICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXJ0KDIpLCBtYXRoLnNxcnQoMikpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mcm9tYnVmZmVyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnJvbWJ1ZmZlci5weQppbmRleCA0Mjg1ZTQwLi42MjRmYjcwIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mcm9tYnVmZmVyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Zyb21idWZmZXIucHkKQEAgLTE2LDE0ICsxNiwxNCBAQAogCiAgICAgICAgIHkgPSBYLmZyb21fYnVmZmVyKGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5jX2ludCwgYVswXSkKLSAgICAgICAgc2VsZi5mYWlsSWYoeS5pbml0X2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh5LmluaXRfY2FsbGVkKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFs6XSwgYS50b2xpc3QoKSkKIAogICAgICAgICBhWzBdLCBhWy0xXSA9IDIwMCwgLTIwMAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbOl0sIGEudG9saXN0KCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgaW4geC5fb2JqZWN0cy52YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaW4geC5fb2JqZWN0cy52YWx1ZXMoKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjX2ludC5mcm9tX2J1ZmZlciwgYSwgLTEpCkBAIC00OSw3ICs0OSw3IEBACiAKICAgICAgICAgeSA9IFguZnJvbV9idWZmZXJfY29weShhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuY19pbnQsIGFbMF0pCi0gICAgICAgIHNlbGYuZmFpbElmKHkuaW5pdF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeS5pbml0X2NhbGxlZCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbOl0sIHJhbmdlKDE2KSkKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3B0ci5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Z1bmNwdHIucHkKaW5kZXggN2VhODczZi4uOTlhZjVlZCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3B0ci5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mdW5jcHRyLnB5CkBAIC0xOCwxMCArMTgsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBsZW4oYXJncykKIAogICAgICAgICB4ID0gWChmdW5jKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh4LnJlc3R5cGUsIGNfaW50KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh4LmFyZ3R5cGVzLCAoY19pbnQsIGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKHgpLCBzaXplb2YoY192b2lkcCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfdm9pZHApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgucmVzdHlwZSwgY19pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hcmd0eXBlcywgKGNfaW50LCBjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHgpLCBzaXplb2YoY192b2lkcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY192b2lkcCkpCiAKICAgICBkZWYgdGVzdF9maXJzdChzZWxmKToKICAgICAgICAgU3RkQ2FsbGJhY2sgPSBXSU5GVU5DVFlQRShjX2ludCwgY19pbnQsIGNfaW50KQpAQCAtMzMsMTIgKzMzLDEyIEBACiAgICAgICAgIHMgPSBTdGRDYWxsYmFjayhmdW5jKQogICAgICAgICBjID0gQ2RlY2xDYWxsYmFjayhmdW5jKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMoMSwgMiksIDMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGMoMSwgMiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocygxLCAyKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjKDEsIDIpLCAzKQogICAgICAgICAjIFRoZSBmb2xsb3dpbmcgbm8gbG9uZ2VyIHJhaXNlcyBhIFR5cGVFcnJvciAtIGl0IGlzIG5vdwogICAgICAgICAjIHBvc3NpYmxlLCBhcyBpbiBDLCB0byBjYWxsIGNkZWNsIGZ1bmN0aW9ucyB3aXRoIG1vcmUgcGFyYW1ldGVycy4KICAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYywgMSwgMiwgMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYygxLCAyLCAzLCA0LCA1LCA2KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjKDEsIDIsIDMsIDQsIDUsIDYpLCAzKQogICAgICAgICBpZiBub3QgV0lORlVOQ1RZUEUgaXMgQ0ZVTkNUWVBFIGFuZCBvcy5uYW1lICE9ICJjZSI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHMsIDEsIDIsIDMpCiAKQEAgLTc1LDkgKzc1LDkgQEAKICAgICAgICAgIyMgICAgICAgICAgICAgICAgICAibHBmblduZFByb2MiLCBXTkRQUk9DXzIod25kcHJvYykpCiAgICAgICAgICMgaW5zdGVhZDoKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoV05EUFJPQyBpcyBXTkRQUk9DXzIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShXTkRQUk9DIGlzIFdORFBST0NfMikKICAgICAgICAgIyAnd25kY2xhc3MubHBmblduZFByb2MnIGxlYWtzIDk0IHJlZmVyZW5jZXMuICBXaHk/Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHduZGNsYXNzLmxwZm5XbmRQcm9jKDEsIDIsIDMsIDQpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3bmRjbGFzcy5scGZuV25kUHJvYygxLCAyLCAzLCA0KSwgMTApCiAKIAogICAgICAgICBmID0gd25kY2xhc3MubHBmblduZFByb2MKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgZGVsIHduZGNsYXNzCiAgICAgICAgIGRlbCB3bmRwcm9jCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZigxMCwgMTEsIDEyLCAxMyksIDQ2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoMTAsIDExLCAxMiwgMTMpLCA0NikKIAogICAgIGRlZiB0ZXN0X2RsbGZ1bmN0aW9ucyhzZWxmKToKIApAQCAtOTcsOCArOTcsOCBAQAogICAgICAgICBzdHJjaHIgPSBsaWIubXlfc3RyY2hyCiAgICAgICAgIHN0cmNoci5yZXN0eXBlID0gY19jaGFyX3AKICAgICAgICAgc3RyY2hyLmFyZ3R5cGVzID0gKGNfY2hhcl9wLCBjX2NoYXIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmNocigiYWJjZGVmZ2hpIiwgImIiKSwgImJjZGVmZ2hpIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyY2hyKCJhYmNkZWZnaGkiLCAieCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmNocigiYWJjZGVmZ2hpIiwgImIiKSwgImJjZGVmZ2hpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJjaHIoImFiY2RlZmdoaSIsICJ4IiksIE5vbmUpCiAKIAogICAgICAgICBzdHJ0b2sgPSBsaWIubXlfc3RydG9rCkBAIC0xMTgsMTAgKzExOCwxMCBAQAogIyMgICAgICAgIGIudmFsdWUgPSBzCiAKICMjICAgICAgICBiID0gY19zdHJpbmcocykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RydG9rKGIsICJcbiIpLCAiYSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cnRvayhOb25lLCAiXG4iKSwgImIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJ0b2soTm9uZSwgIlxuIiksICJjIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RydG9rKE5vbmUsICJcbiIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnRvayhiLCAiXG4iKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnRvayhOb25lLCAiXG4iKSwgImIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnRvayhOb25lLCAiXG4iKSwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnRvayhOb25lLCAiXG4iKSwgTm9uZSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Z1bmN0aW9ucy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Z1bmN0aW9ucy5weQppbmRleCA5M2Q4OTViLi40NTM0ODE1IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mdW5jdGlvbnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3Rpb25zLnB5CkBAIC03MSw4ICs3MSw4IEBACiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX2lfYmhpbGZkCiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3djaGFyLCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2RvdWJsZV0KICAgICAgICAgcmVzdWx0ID0gZigxLCB1IngiLCAzLCA0LCA1LjAsIDYuMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAxMzkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUocmVzdWx0KSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMTM5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgaW50KQogCiAgICAgZGVmIHRlc3Rfd2NoYXJfcmVzdWx0KHNlbGYpOgogICAgICAgICB0cnk6CkBAIC04MywzOCArODMsMzggQEAKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfc2hvcnQsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQogICAgICAgICBmLnJlc3R5cGUgPSBjX3djaGFyCiAgICAgICAgIHJlc3VsdCA9IGYoMCwgMCwgMCwgMCwgMCwgMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCB1J1x4MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgdSdceDAwJykKIAogICAgIGRlZiB0ZXN0X3ZvaWRyZXN1bHQoc2VsZik6CiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX3YKICAgICAgICAgZi5yZXN0eXBlID0gTm9uZQogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfaW50LCBjX2ludCwgUE9JTlRFUihjX2ludCldCiAgICAgICAgIHJlc3VsdCA9IGNfaW50KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgZigxLCAyLCBieXJlZihyZXN1bHQpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LnZhbHVlLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGYoMSwgMiwgYnlyZWYocmVzdWx0KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlLCAzKQogCiAgICAgZGVmIHRlc3RfaW50cmVzdWx0KHNlbGYpOgogICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19pX2JoaWxmZAogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGVdCiAgICAgICAgIGYucmVzdHlwZSA9IGNfaW50CiAgICAgICAgIHJlc3VsdCA9IGYoMSwgMiwgMywgNCwgNS4wLCA2LjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgMjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUocmVzdWx0KSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBpbnQpCiAKICAgICAgICAgcmVzdWx0ID0gZigtMSwgLTIsIC0zLCAtNCwgLTUuMCwgLTYuMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAtMjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUocmVzdWx0KSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgaW50KQogCiAgICAgICAgICMgSWYgd2UgZGVjbGFyZSB0aGUgZnVuY3Rpb24gdG8gcmV0dXJuIGEgc2hvcnQsCiAgICAgICAgICMgaXMgdGhlIGhpZ2ggcGFydCBzcGxpdCBvZmY/CiAgICAgICAgIGYucmVzdHlwZSA9IGNfc2hvcnQKICAgICAgICAgcmVzdWx0ID0gZigxLCAyLCAzLCA0LCA1LjAsIDYuMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAyMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZShyZXN1bHQpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIGludCkKIAogICAgICAgICByZXN1bHQgPSBmKDEsIDIsIDMsIDB4MTAwMDQsIDUuMCwgNi4wKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIDIxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHJlc3VsdCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgaW50KQogCiAgICAgICAgICMgWW91IGNhbm5vdCBhc3NpbmcgY2hhcmFjdGVyIGZvcm1hdCBjb2RlcyBhcyByZXN0eXBlIGFueSBsb25nZXIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBmLCAicmVzdHlwZSIsICJpIikKQEAgLTEyNCwzNiArMTI0LDM2IEBACiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2RvdWJsZV0KICAgICAgICAgZi5yZXN0eXBlID0gY19mbG9hdAogICAgICAgICByZXN1bHQgPSBmKDEsIDIsIDMsIDQsIDUuMCwgNi4wKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIDIxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHJlc3VsdCksIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBmbG9hdCkKIAogICAgICAgICByZXN1bHQgPSBmKC0xLCAtMiwgLTMsIC00LCAtNS4wLCAtNi4wKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIC0yMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZShyZXN1bHQpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0yMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIGZsb2F0KQogCiAgICAgZGVmIHRlc3RfZG91YmxlcmVzdWx0KHNlbGYpOgogICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19kX2JoaWxmZAogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGVdCiAgICAgICAgIGYucmVzdHlwZSA9IGNfZG91YmxlCiAgICAgICAgIHJlc3VsdCA9IGYoMSwgMiwgMywgNCwgNS4wLCA2LjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgMjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIGZsb2F0KQogCiAgICAgICAgIHJlc3VsdCA9IGYoLTEsIC0yLCAtMywgLTQsIC01LjAsIC02LjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgLTIxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHJlc3VsdCksIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCiAKICAgICBkZWYgdGVzdF9sb25nZG91YmxlcmVzdWx0KHNlbGYpOgogICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19EX2JoaWxmRAogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19sb25nZG91YmxlXQogICAgICAgICBmLnJlc3R5cGUgPSBjX2xvbmdkb3VibGUKICAgICAgICAgcmVzdWx0ID0gZigxLCAyLCAzLCA0LCA1LjAsIDYuMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAyMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZShyZXN1bHQpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCiAKICAgICAgICAgcmVzdWx0ID0gZigtMSwgLTIsIC0zLCAtNCwgLTUuMCwgLTYuMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAtMjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAtMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBmbG9hdCkKIAogICAgIGRlZiB0ZXN0X2xvbmdsb25ncmVzdWx0KHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0xNjQsMjMgKzE2NCwyMyBAQAogICAgICAgICBmLnJlc3R5cGUgPSBjX2xvbmdsb25nCiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2RvdWJsZV0KICAgICAgICAgcmVzdWx0ID0gZigxLCAyLCAzLCA0LCA1LjAsIDYuMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIxKQogCiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX3FfYmhpbGZkcQogICAgICAgICBmLnJlc3R5cGUgPSBjX2xvbmdsb25nCiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2RvdWJsZSwgY19sb25nbG9uZ10KICAgICAgICAgcmVzdWx0ID0gZigxLCAyLCAzLCA0LCA1LjAsIDYuMCwgMjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCA0MikKIAogICAgIGRlZiB0ZXN0X3N0cmluZ3Jlc3VsdChzZWxmKToKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfcF9wCiAgICAgICAgIGYuYXJndHlwZXMgPSBOb25lCiAgICAgICAgIGYucmVzdHlwZSA9IGNfY2hhcl9wCiAgICAgICAgIHJlc3VsdCA9IGYoIjEyMyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgIjEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAiMTIzIikKIAogICAgICAgICByZXN1bHQgPSBmKE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9wb2ludGVycyhzZWxmKToKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfcF9wCkBAIC0xOTMsMjkgKzE5MywyOSBAQAogCiAgICAgICAgIHYgPSBjX2ludCg0MikKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwb2ludGVyKHYpLmNvbnRlbnRzLnZhbHVlLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb2ludGVyKHYpLmNvbnRlbnRzLnZhbHVlLCA0MikKICAgICAgICAgcmVzdWx0ID0gZihwb2ludGVyKHYpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHJlc3VsdCksIFBPSU5URVIoY19pbnQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgUE9JTlRFUihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCA0MikKIAogICAgICAgICAjIFRoaXMgb24gd29ya3MuLi4KICAgICAgICAgcmVzdWx0ID0gZihwb2ludGVyKHYpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIHYudmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCB2LnZhbHVlKQogCiAgICAgICAgIHAgPSBwb2ludGVyKGNfaW50KDk5KSkKICAgICAgICAgcmVzdWx0ID0gZihwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIDk5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb250ZW50cy52YWx1ZSwgOTkpCiAKICAgICAgICAgYXJnID0gYnlyZWYodikKICAgICAgICAgcmVzdWx0ID0gZihhcmcpCi0gICAgICAgIHNlbGYuZmFpbElmRXF1YWwocmVzdWx0LmNvbnRlbnRzLCB2LnZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5jb250ZW50cywgdi52YWx1ZSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudEVycm9yLCBmLCBieXJlZihjX3Nob3J0KDIyKSkpCiAKICAgICAgICAgIyBJdCBpcyBkYW5nZXJvdXMsIGhvd2V2ZXIsIGJlY2F1c2UgeW91IGRvbid0IGNvbnRyb2wgdGhlIGxpZmV0aW1lCiAgICAgICAgICMgb2YgdGhlIHBvaW50ZXI6CiAgICAgICAgIHJlc3VsdCA9IGYoYnlyZWYoY19pbnQoOTkpKSkKLSAgICAgICAgc2VsZi5mYWlsSWZFcXVhbChyZXN1bHQuY29udGVudHMsIDk5KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5jb250ZW50cywgOTkpCiAKICAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX3BfcApAQCAtMjQyLDcgKzI0Miw3IEBACiAKICAgICAgICAgY2IgPSBDYWxsQmFjayhjYWxsYmFjaykKICAgICAgICAgZigyKioxOCwgY2IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFyZ3MsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIGV4cGVjdGVkKQogCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0yNTksMTMgKzI1OSwxMyBAQAogCiAgICAgICAgIGNiID0gTXlDYWxsYmFjayhjYWxsYmFjaykKICAgICAgICAgcmVzdWx0ID0gZigtMTAsIGNiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIC0xOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0xOCkKIAogICAgICAgICAjIHRlc3Qgd2l0aCBwcm90b3R5cGUKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2ludCwgTXlDYWxsYmFja10KICAgICAgICAgY2IgPSBNeUNhbGxiYWNrKGNhbGxiYWNrKQogICAgICAgICByZXN1bHQgPSBmKC0xMCwgY2IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgLTE4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQogCiAgICAgICAgIEFub3RoZXJDYWxsYmFjayA9IFdJTkZVTkNUWVBFKGNfaW50LCBjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCkKIApAQCAtMjg4LDEyICsyODgsMTIgQEAKIAogICAgICAgICBkZWYgY2FsbGJhY2sodmFsdWUpOgogICAgICAgICAgICAgI3ByaW50ICJjYWxsZWQgYmFjayB3aXRoIiwgdmFsdWUKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUodmFsdWUpLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsdWUpLCBpbnQpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWUKIAogICAgICAgICBjYiA9IE15Q2FsbGJhY2soY2FsbGJhY2spCiAgICAgICAgIHJlc3VsdCA9IGYoLTEwLCBjYikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAtMTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAtMTgpCiAKICAgICBkZWYgdGVzdF9sb25nbG9uZ19jYWxsYmFja3Moc2VsZik6CiAKQEAgLTMwNSwxMiArMzA1LDEyIEBACiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19sb25nbG9uZywgTXlDYWxsYmFja10KIAogICAgICAgICBkZWYgY2FsbGJhY2sodmFsdWUpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UodmFsdWUsIChpbnQsIGxvbmcpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBsb25nKSkpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWUgJiAweDdGRkZGRkZGCiAKICAgICAgICAgY2IgPSBNeUNhbGxiYWNrKGNhbGxiYWNrKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDEzNTc3NjI1NTg3LCBmKDEwMDAwMDAwMDAwMDAsIGNiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMzU3NzYyNTU4NywgZigxMDAwMDAwMDAwMDAwLCBjYikpCiAKICAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBkbGwsICJfeHh4X3l5eSIpCkBAIC0zMjUsNyArMzI1LDcgQEAKICAgICAgICAgcmVzdWx0ID0gZGxsLl90ZXN0ZnVuY19ieXZhbChwdGluLCBieXJlZihwdG91dCkpCiAgICAgICAgIGdvdCA9IHJlc3VsdCwgcHRvdXQueCwgcHRvdXQueQogICAgICAgICBleHBlY3RlZCA9IDMsIDEsIDIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ290LCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQogCiAgICAgICAgICMgd2l0aCBwcm90b3R5cGUKICAgICAgICAgcHRpbiA9IFBPSU5UKDEwMSwgMTAyKQpAQCAtMzM1LDcgKzMzNSw3IEBACiAgICAgICAgIHJlc3VsdCA9IGRsbC5fdGVzdGZ1bmNfYnl2YWwocHRpbiwgYnlyZWYocHRvdXQpKQogICAgICAgICBnb3QgPSByZXN1bHQsIHB0b3V0LngsIHB0b3V0LnkKICAgICAgICAgZXhwZWN0ZWQgPSAyMDMsIDEwMSwgMTAyCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdvdCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fMkgoc2VsZik6CiAgICAgICAgIGNsYXNzIFMySChTdHJ1Y3R1cmUpOgpAQCAtMzQ1LDcgKzM0NSw3IEBACiAgICAgICAgIGRsbC5yZXRfMmhfZnVuYy5hcmd0eXBlcyA9IFtTMkhdCiAgICAgICAgIGlucCA9IFMySCg5OSwgODgpCiAgICAgICAgIHMyaCA9IGRsbC5yZXRfMmhfZnVuYyhpbnApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChzMmgueCwgczJoLnkpLCAoOTkqMiwgODgqMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHMyaC54LCBzMmgueSksICg5OSoyLCA4OCozKSkKIAogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgogICAgICAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzJIX3N0ZGNhbGwoc2VsZik6CkBAIC0zNTYsNyArMzU2LDcgQEAKICAgICAgICAgICAgIHdpbmRsbC5zX3JldF8yaF9mdW5jLnJlc3R5cGUgPSBTMkgKICAgICAgICAgICAgIHdpbmRsbC5zX3JldF8yaF9mdW5jLmFyZ3R5cGVzID0gW1MySF0KICAgICAgICAgICAgIHMyaCA9IHdpbmRsbC5zX3JldF8yaF9mdW5jKFMySCg5OSwgODgpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHMyaC54LCBzMmgueSksICg5OSoyLCA4OCozKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHMyaC54LCBzMmgueSksICg5OSoyLCA4OCozKSkKIAogICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fOEgoc2VsZik6CiAgICAgICAgIGNsYXNzIFM4SShTdHJ1Y3R1cmUpOgpAQCAtMzcyLDcgKzM3Miw3IEBACiAgICAgICAgIGRsbC5yZXRfOGlfZnVuYy5hcmd0eXBlcyA9IFtTOEldCiAgICAgICAgIGlucCA9IFM4SSg5LCA4LCA3LCA2LCA1LCA0LCAzLCAyKQogICAgICAgICBzOGkgPSBkbGwucmV0XzhpX2Z1bmMoaW5wKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoczhpLmEsIHM4aS5iLCBzOGkuYywgczhpLmQsIHM4aS5lLCBzOGkuZiwgczhpLmcsIHM4aS5oKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczhpLmEsIHM4aS5iLCBzOGkuYywgczhpLmQsIHM4aS5lLCBzOGkuZiwgczhpLmcsIHM4aS5oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkqMiwgOCozLCA3KjQsIDYqNSwgNSo2LCA0KjcsIDMqOCwgMio5KSkKIAogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgpAQCAtMzkwLDcgKzM5MCw3IEBACiAgICAgICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5hcmd0eXBlcyA9IFtTOEldCiAgICAgICAgICAgICBpbnAgPSBTOEkoOSwgOCwgNywgNiwgNSwgNCwgMywgMikKICAgICAgICAgICAgIHM4aSA9IHdpbmRsbC5zX3JldF84aV9mdW5jKGlucCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChzOGkuYSwgczhpLmIsIHM4aS5jLCBzOGkuZCwgczhpLmUsIHM4aS5mLCBzOGkuZywgczhpLmgpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczhpLmEsIHM4aS5iLCBzOGkuYywgczhpLmQsIHM4aS5lLCBzOGkuZiwgczhpLmcsIHM4aS5oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg5KjIsIDgqMywgNyo0LCA2KjUsIDUqNiwgNCo3LCAzKjgsIDIqOSkpCiAKICAgICBkZWYgdGVzdF9zZjE2NTEyMzUoc2VsZik6CkBAIC00MDEsNyArNDAxLDcgQEAKICAgICAgICAgICAgIHJldHVybiAwCiAKICAgICAgICAgY2FsbGJhY2sgPSBwcm90byhjYWxsYmFjaykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEFyZ3VtZW50RXJyb3IsIGxhbWJkYTogY2FsbGJhY2soKDEsIDIsIDMsIDQpLCBQT0lOVCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRFcnJvciwgbGFtYmRhOiBjYWxsYmFjaygoMSwgMiwgMywgNCksIFBPSU5UKCkpKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW5jb21wbGV0ZS5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2luY29tcGxldGUucHkKaW5kZXggYWY5ZjUwNC4uMWUwM2U5ZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW5jb21wbGV0ZS5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbmNvbXBsZXRlLnB5CkBAIC0zMCw3ICszMCw3IEBACiAgICAgICAgIGZvciBpIGluIHJhbmdlKDgpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwLm5hbWUpCiAgICAgICAgICAgICBwID0gcC5uZXh0WzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgWyJmb28iLCAiYmFyIl0gKiA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWyJmb28iLCAiYmFyIl0gKiA0KQogCiAgICAgICAgICMgdG8gbm90IGxlYWsgcmVmZXJlbmNlcywgd2UgbXVzdCBjbGVhbiBfcG9pbnRlcl90eXBlX2NhY2hlCiAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBfcG9pbnRlcl90eXBlX2NhY2hlCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbml0LnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW5pdC5weQppbmRleCAzZDlkYzkyLi45NTNhMTQ1IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbml0LnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2luaXQucHkKQEAgLTI0LDE3ICsyNCwxNyBAQAogICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgb25seSBhY2Nlc3NpbmcgYSBuZXN0ZWQgc3RydWN0dXJlCiAgICAgICAgICMgZG9lc24ndCBjYWxsIHRoZSBzdHJ1Y3R1cmUncyBfX25ld19fIGFuZCBfX2luaXRfXwogICAgICAgICB5ID0gWSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCh5LnguYSwgeS54LmIpLCAoMCwgMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHkueC5uZXdfd2FzX2NhbGxlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHkueC5hLCB5LnguYiksICgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LngubmV3X3dhc19jYWxsZWQsIEZhbHNlKQogCiAgICAgICAgICMgQnV0IGV4cGxpY2l0ZWx5IGNyZWF0aW5nIGFuIFggc3RydWN0dXJlIGNhbGxzIF9fbmV3X18gYW5kIF9faW5pdF9fLCBvZiBjb3Vyc2UuCiAgICAgICAgIHggPSBYKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHguYSwgeC5iKSwgKDksIDEyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeC5uZXdfd2FzX2NhbGxlZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeC5hLCB4LmIpLCAoOSwgMTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubmV3X3dhc19jYWxsZWQsIFRydWUpCiAKICAgICAgICAgeS54ID0geAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoeS54LmEsIHkueC5iKSwgKDksIDEyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeS54Lm5ld193YXNfY2FsbGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeS54LmEsIHkueC5iKSwgKDksIDEyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LngubmV3X3dhc19jYWxsZWQsIEZhbHNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CmluZGV4IDA0YjIwNDAuLjJlNWIxZmUgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKQEAgLTE4LDIyICsxOCwyMiBAQAogIiIiCiAKIGNsYXNzIE9iamVjdHNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGZhaWxVbmxlc3NTYW1lKHNlbGYsIGEsIGIpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChpZChhKSwgaWQoYikpCisgICAgZGVmIGFzc2VydFNhbWUoc2VsZiwgYSwgYik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQoYSksIGlkKGIpKQogCiAgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKICAgICAgICAgaSA9IDQyMDAwMTIzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDMsIGdyYyhpKSkKKyAgICAgICAgcmVmY250ID0gZ3JjKGkpCiAgICAgICAgIGNpID0gY19pbnQoaSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMywgZ3JjKGkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjaS5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWZjbnQsIGdyYyhpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaS5fb2JqZWN0cywgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2NfY2hhcl9wKHNlbGYpOgogICAgICAgICBzID0gIkhlbGxvLCBXb3JsZCIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMywgZ3JjKHMpKQorICAgICAgICByZWZjbnQgPSBncmMocykKICAgICAgICAgY3MgPSBjX2NoYXJfcChzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0LCBncmMocykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1NhbWUoY3MuX29iamVjdHMsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVmY250ICsgMSwgZ3JjKHMpKQorICAgICAgICBzZWxmLmFzc2VydFNhbWUoY3MuX29iamVjdHMsIHMpCiAKICAgICBkZWYgdGVzdF9zaW1wbGVfc3RydWN0KHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICAgICAgYSA9IDQyMTIzNAogICAgICAgICBiID0gNDIxMjM1CiAgICAgICAgIHggPSBYKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQogICAgICAgICB4LmEgPSBhCiAgICAgICAgIHguYiA9IGIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQogCiAgICAgZGVmIHRlc3RfZW1iZWRkZWRfc3RydWN0cyhzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgpAQCAtNTUsMTMgKzU1LDEzIEBACiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBYKSwgKCJ5IiwgWCldCiAKICAgICAgICAgeSA9IFkoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh5Ll9vYmplY3RzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX29iamVjdHMsIE5vbmUpCiAKICAgICAgICAgeDEsIHgyID0gWCgpLCBYKCkKICAgICAgICAgeS54LCB5LnkgPSB4MSwgeDIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeS5fb2JqZWN0cywgeyIwIjoge30sICIxIjoge319KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX29iamVjdHMsIHsiMCI6IHt9LCAiMSI6IHt9fSkKICAgICAgICAgeDEuYSwgeDIuYiA9IDQyLCA5MwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh5Ll9vYmplY3RzLCB7IjAiOiB7fSwgIjEiOiB7fX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fb2JqZWN0cywgeyIwIjoge30sICIxIjoge319KQogCiAgICAgZGVmIHRlc3RfeHh4KHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CkBAIC03NiwxMSArNzYsMTEgQEAKICAgICAgICAgeCA9IFgoKQogICAgICAgICB4LmEgPSBzMQogICAgICAgICB4LmIgPSBzMgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh4Ll9vYmplY3RzLCB7IjAiOiBzMSwgIjEiOiBzMn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgeyIwIjogczEsICIxIjogczJ9KQogCiAgICAgICAgIHkgPSBZKCkKICAgICAgICAgeS54ID0geAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh5Ll9vYmplY3RzLCB7IjAiOiB7IjAiOiBzMSwgIjEiOiBzMn19KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX29iamVjdHMsIHsiMCI6IHsiMCI6IHMxLCAiMSI6IHMyfX0pCiAjIyAgICAgICAgeCA9IHkueAogIyMgICAgICAgIGRlbCB5CiAjIyAgICAgICAgcHJpbnQgeC5fYl9iYXNlXy5fb2JqZWN0cwpAQCAtOTEsNyArOTEsNyBAQAogCiAgICAgICAgIEEgPSBjX2ludCo0CiAgICAgICAgIGEgPSBBKDExLCAyMiwgMzMsIDQ0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhLl9vYmplY3RzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX29iamVjdHMsIE5vbmUpCiAKICAgICAgICAgeCA9IFgoKQogICAgICAgICB4LmRhdGEgPSBhCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9rZWVwcmVmcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5CmluZGV4IDgwYjZjYTIuLmI1MDRjMGMgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5CkBAIC00LDE5ICs0LDE5IEBACiBjbGFzcyBTaW1wbGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfY2ludChzZWxmKToKICAgICAgICAgeCA9IGNfaW50KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQogICAgICAgICB4LnZhbHVlID0gNDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQogICAgICAgICB4ID0gY19pbnQoOTkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2NjaGFycChzZWxmKToKICAgICAgICAgeCA9IGNfY2hhcl9wKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQogICAgICAgICB4LnZhbHVlID0gImFiYyIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5fb2JqZWN0cywgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgImFiYyIpCiAgICAgICAgIHggPSBjX2NoYXJfcCgic3BhbSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguX29iamVjdHMsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCAic3BhbSIpCiAKIGNsYXNzIFN0cnVjdHVyZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9jaW50X3N0cnVjdChzZWxmKToKQEAgLTI1LDIxICsyNSwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19pbnQpXQogCiAgICAgICAgIHggPSBYKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQogICAgICAgICB4LmEgPSA0MgogICAgICAgICB4LmIgPSA5OQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4Ll9vYmplY3RzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9jY2hhcnBfc3RydWN0KHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2NoYXJfcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2NoYXJfcCldCiAgICAgICAgIHggPSBYKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQogCiAgICAgICAgIHguYSA9ICJzcGFtIgogICAgICAgICB4LmIgPSAiZm9vIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4Ll9vYmplY3RzLCB7IjAiOiAic3BhbSIsICIxIjogImZvbyJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIHsiMCI6ICJzcGFtIiwgIjEiOiAiZm9vIn0pCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3Rfc3RydWN0KHNlbGYpOgogICAgICAgICBjbGFzcyBQT0lOVChTdHJ1Y3R1cmUpOgpAQCAtNTIsMjggKzUyLDI4IEBACiAgICAgICAgIHIudWwueSA9IDEKICAgICAgICAgci5sci54ID0gMgogICAgICAgICByLmxyLnkgPSAzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHIuX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5fb2JqZWN0cywgTm9uZSkKIAogICAgICAgICByID0gUkVDVCgpCiAgICAgICAgIHB0ID0gUE9JTlQoMSwgMikKICAgICAgICAgci51bCA9IHB0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHIuX29iamVjdHMsIHsnMCc6IHt9fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLl9vYmplY3RzLCB7JzAnOiB7fX0pCiAgICAgICAgIHIudWwueCA9IDIyCiAgICAgICAgIHIudWwueSA9IDQ0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHIuX29iamVjdHMsIHsnMCc6IHt9fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLl9vYmplY3RzLCB7JzAnOiB7fX0pCiAgICAgICAgIHIubHIgPSBQT0lOVCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHIuX29iamVjdHMsIHsnMCc6IHt9LCAnMSc6IHt9fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLl9vYmplY3RzLCB7JzAnOiB7fSwgJzEnOiB7fX0pCiAKIGNsYXNzIEFycmF5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2NpbnRfYXJyYXkoc2VsZik6CiAgICAgICAgIElOVEFSUiA9IGNfaW50ICogMwogCiAgICAgICAgIGlhID0gSU5UQVJSKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaWEuX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWEuX29iamVjdHMsIE5vbmUpCiAgICAgICAgIGlhWzBdID0gMQogICAgICAgICBpYVsxXSA9IDIKICAgICAgICAgaWFbMl0gPSAzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGlhLl9vYmplY3RzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlhLl9vYmplY3RzLCBOb25lKQogCiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwKQEAgLTgzLDE1ICs4MywxNSBAQAogICAgICAgICB4LnggPSAxMDAwCiAgICAgICAgIHguYVswXSA9IDQyCiAgICAgICAgIHguYVsxXSA9IDk2Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKICAgICAgICAgeC5hID0gaWEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5fb2JqZWN0cywgeycxJzoge319KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIHsnMSc6IHt9fSkKIAogY2xhc3MgUG9pbnRlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9wX2NpbnQoc2VsZik6CiAgICAgICAgIGkgPSBjX2ludCg0MikKICAgICAgICAgeCA9IHBvaW50ZXIoaSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeC5fb2JqZWN0cywgeycxJzogaX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgeycxJzogaX0pCiAKIGNsYXNzIERlbGV0ZVBvaW50ZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIFhfdGVzdChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xpYmMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9saWJjLnB5CmluZGV4IDhkNTlmOTAuLjNkYzQ2M2YgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xpYmMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbGliYy5weQpAQCAtOSw5ICs5LDkgQEAKICAgICBkZWYgdGVzdF9zcXJ0KHNlbGYpOgogICAgICAgICBsaWIubXlfc3FydC5hcmd0eXBlcyA9IGNfZG91YmxlLAogICAgICAgICBsaWIubXlfc3FydC5yZXN0eXBlID0gY19kb3VibGUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGliLm15X3NxcnQoNC4wKSwgMi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpYi5teV9zcXJ0KDQuMCksIDIuMCkKICAgICAgICAgaW1wb3J0IG1hdGgKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGliLm15X3NxcnQoMi4wKSwgbWF0aC5zcXJ0KDIuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGliLm15X3NxcnQoMi4wKSwgbWF0aC5zcXJ0KDIuMCkpCiAKICAgICBkZWYgdGVzdF9xc29ydChzZWxmKToKICAgICAgICAgY29tcGFyZWZ1bmMgPSBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoY19jaGFyKSwgUE9JTlRFUihjX2NoYXIpKQpAQCAtMjMsNyArMjMsNyBAQAogCiAgICAgICAgIGNoYXJzID0gY3JlYXRlX3N0cmluZ19idWZmZXIoInNwYW0sIHNwYW0sIGFuZCBzcGFtIikKICAgICAgICAgbGliLm15X3Fzb3J0KGNoYXJzLCBsZW4oY2hhcnMpLTEsIHNpemVvZihjX2NoYXIpLCBjb21wYXJlZnVuYyhzb3J0KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2hhcnMucmF3LCAiICAgLCxhYWFhZG1tbW5wcHBzc3NceDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFycy5yYXcsICIgICAsLGFhYWFkbW1tbnBwcHNzc1x4MDAiKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbG9hZGluZy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkKaW5kZXggNzEyYjY1MC4uMjY2ODNkOCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbG9hZGluZy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9sb2FkaW5nLnB5CkBAIC00Myw3ICs0Myw3IEBACiAKICAgICBpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKICAgICAgICAgZGVmIHRlc3RfbG9hZF9saWJyYXJ5KHNlbGYpOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYobGliY19uYW1lIGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxpYmNfbmFtZSBpcyBOb25lKQogICAgICAgICAgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZCgicHJpbnRpbmciKToKICAgICAgICAgICAgICAgICBwcmludCBmaW5kX2xpYnJhcnkoImtlcm5lbDMyIikKICAgICAgICAgICAgICAgICBwcmludCBmaW5kX2xpYnJhcnkoInVzZXIzMiIpCkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICAgICBhX25hbWUgPSBhZGRyZXNzb2YoZnVuY19uYW1lKQogICAgICAgICAgICAgZl9vcmRfYWRkciA9IGNfdm9pZF9wLmZyb21fYWRkcmVzcyhhX29yZCkudmFsdWUKICAgICAgICAgICAgIGZfbmFtZV9hZGRyID0gY192b2lkX3AuZnJvbV9hZGRyZXNzKGFfbmFtZSkudmFsdWUKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGhleChmX29yZF9hZGRyKSwgaGV4KGZfbmFtZV9hZGRyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4KGZfb3JkX2FkZHIpLCBoZXgoZl9uYW1lX2FkZHIpKQogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGRsbC5fX2dldGl0ZW1fXywgMTIzNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBkbGwuX19nZXRpdGVtX18sIDEyMzQpCiAKICAgICBpZiBvcy5uYW1lID09ICJudCI6CiAgICAgICAgIGRlZiB0ZXN0XzE3MDMyODZfQShzZWxmKToKQEAgLTk0LDEzICs5NCwxMyBAQAogICAgICAgICAgICAgYWR2YXBpMzIgPSB3aW5kbGwuYWR2YXBpMzIKICAgICAgICAgICAgICMgQ2FsbGluZyBDbG9zZUV2ZW50TG9nIHdpdGggYSBOVUxMIGFyZ3VtZW50IHNob3VsZCBmYWlsLAogICAgICAgICAgICAgIyBidXQgdGhlIGNhbGwgc2hvdWxkIG5vdCBzZWdmYXVsdCBvciBzby4KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDAsIGFkdmFwaTMyLkNsb3NlRXZlbnRMb2coTm9uZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGFkdmFwaTMyLkNsb3NlRXZlbnRMb2coTm9uZSkpCiAgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MuYXJndHlwZXMgPSBjX3ZvaWRfcCwgY19jaGFyX3AKICAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5yZXN0eXBlID0gY192b2lkX3AKICAgICAgICAgICAgIHByb2MgPSB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MoYWR2YXBpMzIuX2hhbmRsZSwgIkNsb3NlRXZlbnRMb2ciKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHByb2MpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvYykKICAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgcmVhbCB0ZXN0OiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgJ2NhbGxfZnVuY3Rpb24nCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBjYWxsX2Z1bmN0aW9uKHByb2MsIChOb25lLCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjYWxsX2Z1bmN0aW9uKHByb2MsIChOb25lLCkpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWFjaG9saWIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQppbmRleCBmMmVlMDM1Li5lZGE4NDZkIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQpAQCAtNDgsMTQgKzQ4LDE0IEBACiAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgogICAgICAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmaW5kX2xpYigncHRocmVhZCcpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kX2xpYigncHRocmVhZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJykKIAogICAgICAgICAgICAgcmVzdWx0ID0gZmluZF9saWIoJ3onKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlc3VsdC5zdGFydHN3aXRoKCcvdXNyL2xpYi9saWJ6LjEnKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHQuZW5kc3dpdGgoJy5keWxpYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zdGFydHN3aXRoKCcvdXNyL2xpYi9saWJ6LjEnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuZW5kc3dpdGgoJy5keWxpYicpKQogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmaW5kX2xpYignSU9LaXQnKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ0lPS2l0JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU9LaXQnKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWVtZnVuY3Rpb25zLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWVtZnVuY3Rpb25zLnB5CmluZGV4IGNiOTA5OWQuLmQwNzI2MDMgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21lbWZ1bmN0aW9ucy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tZW1mdW5jdGlvbnMucHkKQEAgLTE5LDQ1ICsxOSw0NSBAQAogICAgICAgICBhID0gY3JlYXRlX3N0cmluZ19idWZmZXIoMTAwMDAwMCkKICAgICAgICAgcCA9ICJIZWxsbywgV29ybGQiCiAgICAgICAgIHJlc3VsdCA9IG1lbW1vdmUoYSwgcCwgbGVuKHApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhLnZhbHVlLCAiSGVsbG8sIFdvcmxkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnZhbHVlLCAiSGVsbG8sIFdvcmxkIikKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJpbmdfYXQocmVzdWx0KSwgIkhlbGxvLCBXb3JsZCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmluZ19hdChyZXN1bHQsIDUpLCAiSGVsbG8iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJpbmdfYXQocmVzdWx0LCAxNiksICJIZWxsbywgV29ybGRcMFwwXDBcMCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmluZ19hdChyZXN1bHQsIDApLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQocmVzdWx0KSwgIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX2F0KHJlc3VsdCwgNSksICJIZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX2F0KHJlc3VsdCwgMTYpLCAiSGVsbG8sIFdvcmxkXDBcMFwwXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdChyZXN1bHQsIDApLCAiIikKIAogICAgIGRlZiB0ZXN0X21lbXNldChzZWxmKToKICAgICAgICAgYSA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKDEwMDAwMDApCiAgICAgICAgIHJlc3VsdCA9IG1lbXNldChhLCBvcmQoJ3gnKSwgMTYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGEudmFsdWUsICJ4eHh4eHh4eHh4eHh4eHh4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnZhbHVlLCAieHh4eHh4eHh4eHh4eHh4eCIpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyaW5nX2F0KHJlc3VsdCksICJ4eHh4eHh4eHh4eHh4eHh4IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyaW5nX2F0KGEpLCAieHh4eHh4eHh4eHh4eHh4eCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmluZ19hdChhLCAyMCksICJ4eHh4eHh4eHh4eHh4eHh4XDBcMFwwXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdChyZXN1bHQpLCAieHh4eHh4eHh4eHh4eHh4eCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX2F0KGEpLCAieHh4eHh4eHh4eHh4eHh4eCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX2F0KGEsIDIwKSwgInh4eHh4eHh4eHh4eHh4eHhcMFwwXDBcMCIpCiAKICAgICBkZWYgdGVzdF9jYXN0KHNlbGYpOgogICAgICAgICBhID0gKGNfdWJ5dGUgKiAzMikoKm1hcChvcmQsICJhYmNkZWYiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FzdChhLCBjX2NoYXJfcCkudmFsdWUsICJhYmNkZWYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbOjddLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoYSwgY19jaGFyX3ApLnZhbHVlLCAiYWJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbOjddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhc3QoYSwgUE9JTlRFUihjX2J5dGUpKVs6NzpdLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoYSwgUE9JTlRFUihjX2J5dGUpKVs6NzpdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhc3QoYSwgUE9JTlRFUihjX2J5dGUpKVs2Oi0xOi0xXSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbNjotMTotMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLCAxMDIsIDEwMSwgMTAwLCA5OSwgOTgsIDk3XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FzdChhLCBQT0lOVEVSKGNfYnl0ZSkpWzo3OjJdLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoYSwgUE9JTlRFUihjX2J5dGUpKVs6NzoyXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzk3LCA5OSwgMTAxLCAwXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FzdChhLCBQT0lOVEVSKGNfYnl0ZSkpWzo3OjddLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoYSwgUE9JTlRFUihjX2J5dGUpKVs6Nzo3XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzk3XSkKIAogICAgIGRlZiB0ZXN0X3N0cmluZ19hdChzZWxmKToKICAgICAgICAgcyA9IHN0cmluZ19hdCgiZm9vIGJhciIpCiAgICAgICAgICMgWFhYIFRoZSBmb2xsb3dpbmcgbWF5IGJlIHdyb25nLCBkZXBlbmRpbmcgb24gaG93IFB5dGhvbgogICAgICAgICAjIG1hbmFnZXMgc3RyaW5nIGluc3RhbmNlcwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQocykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLCAiZm9vIGJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocywgImZvbyBiYXIiKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmluZ19hdCgiZm9vIGJhciIsIDgpLCAiZm9vIGJhclwwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyaW5nX2F0KCJmb28gYmFyIiwgMyksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdCgiZm9vIGJhciIsIDgpLCAiZm9vIGJhclwwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQoImZvbyBiYXIiLCAzKSwgImZvbyIpCiAKICAgICB0cnk6CiAgICAgICAgIGNyZWF0ZV91bmljb2RlX2J1ZmZlcgpAQCAtNjgsMTIgKzY4LDEyIEBACiAgICAgICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJIZWxsbywgV29ybGQiKQogICAgICAgICAgICAgYSA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigxMDAwMDAwKQogICAgICAgICAgICAgcmVzdWx0ID0gbWVtbW92ZShhLCBwLCBsZW4ocCkgKiBzaXplb2YoY193Y2hhcikpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhLnZhbHVlLCAiSGVsbG8sIFdvcmxkIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS52YWx1ZSwgIkhlbGxvLCBXb3JsZCIpCiAKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdzdHJpbmdfYXQoYSksICJIZWxsbywgV29ybGQiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod3N0cmluZ19hdChhLCA1KSwgIkhlbGxvIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdzdHJpbmdfYXQoYSwgMTYpLCAiSGVsbG8sIFdvcmxkXDBcMFwwXDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod3N0cmluZ19hdChhLCAwKSwgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdzdHJpbmdfYXQoYSksICJIZWxsbywgV29ybGQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDUpLCAiSGVsbG8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDE2KSwgIkhlbGxvLCBXb3JsZFwwXDBcMFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhLCAwKSwgIiIpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9udW1iZXJzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbnVtYmVycy5weQppbmRleCBkZmQ4NGVlLi5iNTE4NWJmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9udW1iZXJzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X251bWJlcnMucHkKQEAgLTU1LDI1ICs1NSwyNSBAQAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfaW5pdChzZWxmKToKICAgICAgICAgIyBkZWZhdWx0IHZhbHVlcyBhcmUgc2V0IHRvIHplcm8KICAgICAgICAgZm9yIHQgaW4gc2lnbmVkX3R5cGVzICsgdW5zaWduZWRfdHlwZXMgKyBmbG9hdF90eXBlczoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHQoKS52YWx1ZSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCgpLnZhbHVlLCAwKQogCiAgICAgZGVmIHRlc3RfdW5zaWduZWRfdmFsdWVzKHNlbGYpOgogICAgICAgICAjIHRoZSB2YWx1ZSBnaXZlbiB0byB0aGUgY29uc3RydWN0b3IgaXMgYXZhaWxhYmxlCiAgICAgICAgICMgYXMgdGhlICd2YWx1ZScgYXR0cmlidXRlCiAgICAgICAgIGZvciB0LCAobCwgaCkgaW4gemlwKHVuc2lnbmVkX3R5cGVzLCB1bnNpZ25lZF9yYW5nZXMpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodChsKS52YWx1ZSwgbCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHQoaCkudmFsdWUsIGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQobCkudmFsdWUsIGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQoaCkudmFsdWUsIGgpCiAKICAgICBkZWYgdGVzdF9zaWduZWRfdmFsdWVzKHNlbGYpOgogICAgICAgICAjIHNlZSBhYm92ZQogICAgICAgICBmb3IgdCwgKGwsIGgpIGluIHppcChzaWduZWRfdHlwZXMsIHNpZ25lZF9yYW5nZXMpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodChsKS52YWx1ZSwgbCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHQoaCkudmFsdWUsIGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQobCkudmFsdWUsIGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQoaCkudmFsdWUsIGgpCiAKICAgICBkZWYgdGVzdF9ib29sX3ZhbHVlcyhzZWxmKToKICAgICAgICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgdHJ1dGgKICAgICAgICAgZm9yIHQsIHYgaW4gemlwKGJvb2xfdHlwZXMsIGJvb2xfdmFsdWVzKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHQodikudmFsdWUsIHRydXRoKHYpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KHYpLnZhbHVlLCB0cnV0aCh2KSkKIAogICAgIGRlZiB0ZXN0X3R5cGVlcnJvcihzZWxmKToKICAgICAgICAgIyBPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIGNvbnRydWN0b3IsCkBAIC05MywxMyArOTMsMTMgQEAKICAgICAgICAgIyB0aGUgZnJvbV9wYXJhbSBjbGFzcyBtZXRob2QgYXR0cmlidXRlIGFsd2F5cwogICAgICAgICAjIHJldHVybnMgUHlDQXJnT2JqZWN0IGluc3RhbmNlcwogICAgICAgICBmb3IgdCBpbiBzaWduZWRfdHlwZXMgKyB1bnNpZ25lZF90eXBlcyArIGZsb2F0X3R5cGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoQXJnVHlwZSwgdHlwZSh0LmZyb21fcGFyYW0oMCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBcmdUeXBlLCB0eXBlKHQuZnJvbV9wYXJhbSgwKSkpCiAKICAgICBkZWYgdGVzdF9ieXJlZihzZWxmKToKICAgICAgICAgIyBjYWxsaW5nIGJ5cmVmIHJldHVybnMgYWxzbyBhIFB5Q0FyZ09iamVjdCBpbnN0YW5jZQogICAgICAgICBmb3IgdCBpbiBzaWduZWRfdHlwZXMgKyB1bnNpZ25lZF90eXBlcyArIGZsb2F0X3R5cGVzICsgYm9vbF90eXBlczoKICAgICAgICAgICAgIHBhcm0gPSBieXJlZih0KCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChBcmdUeXBlLCB0eXBlKHBhcm0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBcmdUeXBlLCB0eXBlKHBhcm0pKQogCiAKICAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CkBAIC0xMTAsMTAgKzExMCwxMCBAQAogICAgICAgICAgICAgICAgIHJldHVybiAyLjAKICAgICAgICAgZiA9IEZsb2F0TGlrZSgpCiAgICAgICAgIGZvciB0IGluIGZsb2F0X3R5cGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodCgyLjApLnZhbHVlLCAyLjApCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0KDIpLnZhbHVlLCAyLjApCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0KDJMKS52YWx1ZSwgMi4wKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodChmKS52YWx1ZSwgMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KDIuMCkudmFsdWUsIDIuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCgyKS52YWx1ZSwgMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KDJMKS52YWx1ZSwgMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KGYpLnZhbHVlLCAyLjApCiAKICAgICBkZWYgdGVzdF9pbnRlZ2VycyhzZWxmKToKICAgICAgICAgY2xhc3MgRmxvYXRMaWtlKG9iamVjdCk6CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgZm9yIHQgaW4gc2lnbmVkX3R5cGVzICsgdW5zaWduZWRfdHlwZXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsIDMuMTQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsIGYpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0KGkpLnZhbHVlLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KGkpLnZhbHVlLCAyKQogCiAgICAgZGVmIHRlc3Rfc2l6ZXMoc2VsZik6CiAgICAgICAgIGZvciB0IGluIHNpZ25lZF90eXBlcyArIHVuc2lnbmVkX3R5cGVzICsgZmxvYXRfdHlwZXMgKyBib29sX3R5cGVzOgpAQCAtMTM4LDkgKzEzOCw5IEBACiAgICAgICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAjIHNpemVvZiBvZiB0aGUgdHlwZS4uLgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKHQpLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YodCksIHNpemUpCiAgICAgICAgICAgICAjIGFuZCBzaXplb2Ygb2YgYW4gaW5zdGFuY2UKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZih0KCkpLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YodCgpKSwgc2l6ZSkKIAogICAgIGRlZiB0ZXN0X2FsaWdubWVudHMoc2VsZik6CiAgICAgICAgIGZvciB0IGluIHNpZ25lZF90eXBlcyArIHVuc2lnbmVkX3R5cGVzICsgZmxvYXRfdHlwZXM6CkBAIC0xNDgsMTAgKzE0OCwxMCBAQAogICAgICAgICAgICAgYWxpZ24gPSBzdHJ1Y3QuY2FsY3NpemUoImMlYyIgJSBjb2RlKSAtIHN0cnVjdC5jYWxjc2l6ZShjb2RlKQogCiAgICAgICAgICAgICAjIGFsaWdubWVudCBvZiB0aGUgdHlwZS4uLgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGNvZGUsIGFsaWdubWVudCh0KSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjb2RlLCBhbGlnbm1lbnQodCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvZGUsIGFsaWduKSkKICAgICAgICAgICAgICMgYW5kIGFsaWdubWVudCBvZiBhbiBpbnN0YW5jZQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGNvZGUsIGFsaWdubWVudCh0KCkpKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNvZGUsIGFsaWdubWVudCh0KCkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2RlLCBhbGlnbikpCiAKICAgICBkZWYgdGVzdF9pbnRfZnJvbV9hZGRyZXNzKHNlbGYpOgpAQCAtMTY3LDEyICsxNjcsMTIgQEAKIAogICAgICAgICAgICAgIyB2IG5vdyBpcyBhbiBpbnRlZ2VyIGF0IGFuICdleHRlcm5hbCcgbWVtb3J5IGxvY2F0aW9uCiAgICAgICAgICAgICB2ID0gdC5mcm9tX2FkZHJlc3MoYS5idWZmZXJfaW5mbygpWzBdKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi52YWx1ZSwgYVswXSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUodiksIHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodiksIHQpCiAKICAgICAgICAgICAgICMgY2hhbmdpbmcgdGhlIHZhbHVlIGF0IHRoZSBtZW1vcnkgbG9jYXRpb24gY2hhbmdlcyB2J3MgdmFsdWUgYWxzbwogICAgICAgICAgICAgYVswXSA9IDQyCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2LnZhbHVlLCBhWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBhWzBdKQogCiAKICAgICBkZWYgdGVzdF9mbG9hdF9mcm9tX2FkZHJlc3Moc2VsZik6CkBAIC0xODAsMTEgKzE4MCwxMSBAQAogICAgICAgICBmb3IgdCBpbiBmbG9hdF90eXBlczoKICAgICAgICAgICAgIGEgPSBhcnJheSh0Ll90eXBlXywgWzMuMTRdKQogICAgICAgICAgICAgdiA9IHQuZnJvbV9hZGRyZXNzKGEuYnVmZmVyX2luZm8oKVswXSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYudmFsdWUsIGFbMF0pCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZSh2KSBpcyB0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBhWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodikgaXMgdCkKICAgICAgICAgICAgIGFbMF0gPSAyLjM0NTZlMTcKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYudmFsdWUsIGFbMF0pCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZSh2KSBpcyB0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBhWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodikgaXMgdCkKIAogICAgIGRlZiB0ZXN0X2NoYXJfZnJvbV9hZGRyZXNzKHNlbGYpOgogICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY19jaGFyCkBAIC0xOTIsMTEgKzE5MiwxMSBAQAogCiAgICAgICAgIGEgPSBhcnJheSgnYycsICd4JykKICAgICAgICAgdiA9IGNfY2hhci5mcm9tX2FkZHJlc3MoYS5idWZmZXJfaW5mbygpWzBdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2LnZhbHVlLCBhWzBdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZSh2KSBpcyBjX2NoYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodikgaXMgY19jaGFyKQogCiAgICAgICAgIGFbMF0gPSAnPycKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBhWzBdKQogCiAgICAgIyBhcnJheSBkb2VzIG5vdCBzdXBwb3J0IGNfYm9vbCAvICd0JwogICAgICMgZGVmIHRlc3RfYm9vbF9mcm9tX2FkZHJlc3Moc2VsZik6CkBAIC0yMDQsMTEgKzIwNCwxMSBAQAogICAgICMgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CiAgICAgIyAgICAgYSA9IGFycmF5KGNfYm9vbC5fdHlwZV8sIFtUcnVlXSkKICAgICAjICAgICB2ID0gdC5mcm9tX2FkZHJlc3MoYS5idWZmZXJfaW5mbygpWzBdKQotICAgICMgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYudmFsdWUsIGFbMF0pCi0gICAgIyAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZSh2KSBpcyB0KQorICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodikgaXMgdCkKICAgICAjICAgICBhWzBdID0gRmFsc2UKLSAgICAjICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2LnZhbHVlLCBhWzBdKQotICAgICMgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUodikgaXMgdCkKKyAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCisgICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHYpIGlzIHQpCiAKICAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgogICAgICAgICAjIGNfaW50KCkgY2FuIGJlIGluaXRpYWxpemVkIGZyb20gUHl0aG9uJ3MgaW50LCBhbmQgY19pbnQuCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wYXJhbWV0ZXJzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGFyYW1ldGVycy5weQppbmRleCBkNDc3YThjLi44MjcwNGQ1IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wYXJhbWV0ZXJzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRlcnMucHkKQEAgLTMzLDggKzMzLDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKiA0CiAgICAgICAgICAgICBmcm9tX3BhcmFtID0gY2xhc3NtZXRob2QoZnJvbV9wYXJhbSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChDVk9JRFAuZnJvbV9wYXJhbSgiYWJjIiksICJhYmNhYmMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChDQ0hBUlAuZnJvbV9wYXJhbSgiYWJjIiksICJhYmNhYmNhYmNhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENWT0lEUC5mcm9tX3BhcmFtKCJhYmMiKSwgImFiY2FiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ0NIQVJQLmZyb21fcGFyYW0oImFiYyIpLCAiYWJjYWJjYWJjYWJjIikKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY193Y2hhcl9wCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogMwogICAgICAgICAgICAgZnJvbV9wYXJhbSA9IGNsYXNzbWV0aG9kKGZyb21fcGFyYW0pCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoQ1dDSEFSUC5mcm9tX3BhcmFtKCJhYmMiKSwgImFiY2FiY2FiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1dDSEFSUC5mcm9tX3BhcmFtKCJhYmMiKSwgImFiY2FiY2FiYyIpCiAKICAgICAjIFhYWCBSZXBsYWNlIGJ5IGNfY2hhcl9wIHRlc3RzCiAgICAgZGVmIHRlc3RfY3N0cmluZ3Moc2VsZik6CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgIyBjX2NoYXJfcC5mcm9tX3BhcmFtIG9uIGEgUHl0aG9uIFN0cmluZyBwYWNrcyB0aGUgc3RyaW5nCiAgICAgICAgICMgaW50byBhIGNwYXJhbSBvYmplY3QKICAgICAgICAgcyA9ICIxMjMiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2NoYXJfcC5mcm9tX3BhcmFtKHMpLl9vYmogaXMgcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfY2hhcl9wLmZyb21fcGFyYW0ocykuX29iaiBpcyBzKQogCiAgICAgICAgICMgbmV3IGluIDAuOS4xOiBjb252ZXJ0IChlbmNvZGUpIHVuaWNvZGUgdG8gYXNjaWkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY19jaGFyX3AuZnJvbV9wYXJhbSh1IjEyMyIpLl9vYmosICIxMjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfY2hhcl9wLmZyb21fcGFyYW0odSIxMjMiKS5fb2JqLCAiMTIzIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBjX2NoYXJfcC5mcm9tX3BhcmFtLCB1IjEyM1wzNzciKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY19jaGFyX3AuZnJvbV9wYXJhbSwgNDIpCkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICMgY2FsbGluZyBjX2NoYXJfcC5mcm9tX3BhcmFtIHdpdGggYSBjX2NoYXJfcCBpbnN0YW5jZQogICAgICAgICAjIHJldHVybnMgdGhlIGFyZ3VtZW50IGl0c2VsZjoKICAgICAgICAgYSA9IGNfY2hhcl9wKCIxMjMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19jaGFyX3AuZnJvbV9wYXJhbShhKSBpcyBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19jaGFyX3AuZnJvbV9wYXJhbShhKSBpcyBhKQogCiAgICAgZGVmIHRlc3RfY3dfc3RyaW5ncyhzZWxmKToKICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGJ5cmVmCkBAIC03NywxNSArNzcsMTUgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzID0gdSIxMjMiCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfd2NoYXJfcC5mcm9tX3BhcmFtKHMpLl9vYmogaXMgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3djaGFyX3AuZnJvbV9wYXJhbShzKS5fb2JqIGlzIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfd2NoYXJfcC5mcm9tX3BhcmFtLCA0MikKIAogICAgICAgICAgICAgIyBuZXcgaW4gMC45LjE6IGNvbnZlcnQgKGRlY29kZSkgYXNjaWkgdG8gdW5pY29kZQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY193Y2hhcl9wLmZyb21fcGFyYW0oIjEyMyIpLl9vYmosIHUiMTIzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY193Y2hhcl9wLmZyb21fcGFyYW0oIjEyMyIpLl9vYmosIHUiMTIzIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjX3djaGFyX3AuZnJvbV9wYXJhbSwgIjEyM1wzNzciKQogCiAgICAgICAgIHBhID0gY193Y2hhcl9wLmZyb21fcGFyYW0oY193Y2hhcl9wKHUiMTIzIikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUocGEpLCBjX3djaGFyX3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShwYSksIGNfd2NoYXJfcCkKIAogICAgIGRlZiB0ZXN0X2ludF9wb2ludGVycyhzZWxmKToKICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfc2hvcnQsIGNfdWludCwgY19pbnQsIGNfbG9uZywgUE9JTlRFUiwgcG9pbnRlcgpAQCAtOTQsOCArOTQsOCBAQAogIyMgICAgICAgIHAgPSBwb2ludGVyKGNfaW50KDQyKSkKICMjICAgICAgICB4ID0gTFBJTlQuZnJvbV9wYXJhbShwKQogICAgICAgICB4ID0gTFBJTlQuZnJvbV9wYXJhbShwb2ludGVyKGNfaW50KDQyKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHguY29udGVudHMudmFsdWUsIDQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChMUElOVChjX2ludCg0MikpLmNvbnRlbnRzLnZhbHVlLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmNvbnRlbnRzLnZhbHVlLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMUElOVChjX2ludCg0MikpLmNvbnRlbnRzLnZhbHVlLCA0MikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExQSU5ULmZyb21fcGFyYW0oTm9uZSksIE5vbmUpCiAKQEAgLTEzMyw4ICsxMzMsOCBAQAogICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY19zaG9ydCwgY191aW50LCBjX2ludCwgY19sb25nLCBQT0lOVEVSCiAgICAgICAgIElOVEFSUkFZID0gY19pbnQgKiAzCiAgICAgICAgIGlhID0gSU5UQVJSQVkoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oaWEpLCAzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChbaWFbaV0gZm9yIGkgaW4gcmFuZ2UoMyldLCBbMCwgMCwgMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGlhKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbaWFbaV0gZm9yIGkgaW4gcmFuZ2UoMyldLCBbMCwgMCwgMF0pCiAKICAgICAgICAgIyBQb2ludGVycyBhcmUgb25seSBjb21wYXRpYmxlIHdpdGggYXJyYXlzIGNvbnRhaW5pbmcgaXRlbXMgb2YKICAgICAgICAgIyB0aGUgc2FtZSB0eXBlIQpAQCAtMTYxLDggKzE2MSw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgICAgICBmdW5jLmFyZ3R5cGVzID0gKEFkYXB0ZXIoKSwpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGZ1bmMoTm9uZSksIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGZ1bmMob2JqZWN0KCkpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoTm9uZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhvYmplY3QoKSksIE5vbmUpCiAKICAgICAgICAgY2xhc3MgQWRhcHRlcihvYmplY3QpOgogICAgICAgICAgICAgZGVmIGZyb21fcGFyYW0oY2xzLCBvYmopOgpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSAoQWRhcHRlcigpLCkKICAgICAgICAgIyBkb24ndCBrbm93IGhvdyB0byBjb252ZXJ0IHBhcmFtZXRlciAxCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50RXJyb3IsIGZ1bmMsIG9iamVjdCgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmdW5jKGNfdm9pZF9wKDQyKSksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoY192b2lkX3AoNDIpKSwgNDIpCiAKICAgICAgICAgY2xhc3MgQWRhcHRlcihvYmplY3QpOgogICAgICAgICAgICAgZGVmIGZyb21fcGFyYW0oY2xzLCBvYmopOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGVwMzExOC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BlcDMxMTgucHkKaW5kZXggZDM1NTBjYy4uOTc2NDczYyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGVwMzExOC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wZXAzMTE4LnB5CkBAIC0xLDYgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGN0eXBlcyBpbXBvcnQgKgotaW1wb3J0IHJlLCBzdHJ1Y3QsIHN5cworaW1wb3J0IHJlLCBzeXMKIAogaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKICAgICBUSElTX0VORElBTiA9ICI8IgpAQCAtOSwyNyArOSw2IEBACiAgICAgVEhJU19FTkRJQU4gPSAiPiIKICAgICBPVEhFUl9FTkRJQU4gPSAiPCIKIAotY2xhc3MgbWVtb3J5dmlldyhvYmplY3QpOgotICAgICMgVGhpcyBjbGFzcyBjcmVhdGVzIGEgbWVtb3J5dmlldyAtIGxpa2Ugb2JqZWN0IGZyb20gZGF0YSByZXR1cm5lZAotICAgICMgYnkgdGhlIHByaXZhdGUgX2N0eXBlcy5fYnVmZmVyX2luZm8oKSBmdW5jdGlvbiwganVzdCBlbm91Z2ggZm9yCi0gICAgIyB0aGVzZSB0ZXN0cy4KLSAgICAjCi0gICAgIyBJdCBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBweTNrIG1lbW9yeXZpZXcgb2JqZWN0IGlzIGJhY2twb3J0ZWQuCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iKToKLSAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBfYnVmZmVyX2luZm8KLSAgICAgICAgc2VsZi5mb3JtYXQsIHNlbGYubmRpbSwgc2VsZi5zaGFwZSA9IF9idWZmZXJfaW5mbyhvYikKLSAgICAgICAgaWYgc2VsZi5zaGFwZSA9PSAoKToKLSAgICAgICAgICAgIHNlbGYuc2hhcGUgPSBOb25lCi0gICAgICAgICAgICBzZWxmLml0ZW1zaXplID0gc2l6ZW9mKG9iKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2l6ZSA9IHNpemVvZihvYikKLSAgICAgICAgICAgIGZvciBkaW0gaW4gc2VsZi5zaGFwZToKLSAgICAgICAgICAgICAgICBzaXplIC8vPSBkaW0KLSAgICAgICAgICAgIHNlbGYuaXRlbXNpemUgPSBzaXplCi0gICAgICAgIHNlbGYuc3RyaWRlcyA9IE5vbmUKLSAgICAgICAgc2VsZi5yZWFkb25seSA9IEZhbHNlCi0gICAgICAgIHNlbGYuc2l6ZSA9IHNpemVvZihvYikKLQogZGVmIG5vcm1hbGl6ZShmb3JtYXQpOgogICAgICMgUmVtb3ZlIGN1cnJlbnQgZW5kaWFuIHNwZWNpZmllciBhbmQgd2hpdGUgc3BhY2UgZnJvbSBhIGZvcm1hdAogICAgICMgc3RyaW5nCkBAIC00NSwyMCArMjQsMjMgQEAKICAgICAgICAgICAgIG9iID0gdHAoKQogICAgICAgICAgICAgdiA9IG1lbW9yeXZpZXcob2IpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobm9ybWFsaXplKHYuZm9ybWF0KSwgbm9ybWFsaXplKGZtdCkpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi5zaXplLCBzaXplb2Yob2IpKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYuaXRlbXNpemUsIHNpemVvZihpdGVtdHApKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYuc2hhcGUsIHNoYXBlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9ybWFsaXplKHYuZm9ybWF0KSwgbm9ybWFsaXplKGZtdCkpCisgICAgICAgICAgICAgICAgaWYgc2hhcGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCBzaGFwZVswXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSAqIHNpemVvZihpdGVtdHApLCBzaXplb2Yob2IpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5pdGVtc2l6ZSwgc2l6ZW9mKGl0ZW10cCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnNoYXBlLCBzaGFwZSkKICAgICAgICAgICAgICAgICAjIGN0eXBlcyBvYmplY3QgYWx3YXlzIGhhdmUgYSBub24tc3RyaWRlZCBtZW1vcnkgYmxvY2sKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2LnN0cmlkZXMsIE5vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnN0cmlkZXMsIE5vbmUpCiAgICAgICAgICAgICAgICAgIyB0aGV5IGFyZSBhbHdheXMgcmVhZC93cml0ZQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKHYucmVhZG9ubHkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh2LnJlYWRvbmx5KQogCiAgICAgICAgICAgICAgICAgaWYgdi5zaGFwZToKICAgICAgICAgICAgICAgICAgICAgbiA9IDEKICAgICAgICAgICAgICAgICAgICAgZm9yIGRpbSBpbiB2LnNoYXBlOgogICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gKiBkaW0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi5pdGVtc2l6ZSAqIG4sIHYuc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuICogdi5pdGVtc2l6ZSwgbGVuKHYudG9ieXRlcygpKSkKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAjIHNvIHRoYXQgd2UgY2FuIHNlZSB0aGUgZmFpbGluZyB0eXBlCiAgICAgICAgICAgICAgICAgcHJpbnQodHApCkBAIC02OSwyMCArNTEsMjMgQEAKICAgICAgICAgICAgIG9iID0gdHAoKQogICAgICAgICAgICAgdiA9IG1lbW9yeXZpZXcob2IpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi5mb3JtYXQsIGZtdCkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2LnNpemUsIHNpemVvZihvYikpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi5pdGVtc2l6ZSwgc2l6ZW9mKGl0ZW10cCkpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi5zaGFwZSwgc2hhcGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LmZvcm1hdCwgZm10KQorICAgICAgICAgICAgICAgIGlmIHNoYXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgc2hhcGVbMF0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odikgKiBzaXplb2YoaXRlbXRwKSwgc2l6ZW9mKG9iKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYuaXRlbXNpemUsIHNpemVvZihpdGVtdHApKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5zaGFwZSwgc2hhcGUpCiAgICAgICAgICAgICAgICAgIyBjdHlwZXMgb2JqZWN0IGFsd2F5cyBoYXZlIGEgbm9uLXN0cmlkZWQgbWVtb3J5IGJsb2NrCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi5zdHJpZGVzLCBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5zdHJpZGVzLCBOb25lKQogICAgICAgICAgICAgICAgICMgdGhleSBhcmUgYWx3YXlzIHJlYWQvd3JpdGUKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZih2LnJlYWRvbmx5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uodi5yZWFkb25seSkKIAogICAgICAgICAgICAgICAgIGlmIHYuc2hhcGU6CiAgICAgICAgICAgICAgICAgICAgIG4gPSAxCiAgICAgICAgICAgICAgICAgICAgIGZvciBkaW0gaW4gdi5zaGFwZToKICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuICogZGltCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYuaXRlbXNpemUgKiBuLCB2LnNpemUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgbGVuKHYpKQogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICMgc28gdGhhdCB3ZSBjYW4gc2VlIHRoZSBmYWlsaW5nIHR5cGUKICAgICAgICAgICAgICAgICBwcmludCh0cCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BpY2tsaW5nLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGlja2xpbmcucHkKaW5kZXggMjg4NjhmNC4uMTM2Y2JlOSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGlja2xpbmcucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGlja2xpbmcucHkKQEAgLTI3LDI3ICsyNywyNyBAQAogICAgICAgICAgICAgY19kb3VibGUoMy4xNCksCiAgICAgICAgICAgICBdOgogICAgICAgICAgICAgZHN0ID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKHNyYykpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzcmMuX19kaWN0X18sIGRzdC5fX2RpY3RfXykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1ZmZlcihzcmMpWzpdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyKGRzdClbOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyYy5fX2RpY3RfXywgZHN0Ll9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1vcnl2aWV3KHNyYykudG9ieXRlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhkc3QpLnRvYnl0ZXMoKSkKIAogICAgIGRlZiB0ZXN0X3N0cnVjdChzZWxmKToKICAgICAgICAgWC5pbml0X2NhbGxlZCA9IDAKIAogICAgICAgICB4ID0gWCgpCiAgICAgICAgIHguYSA9IDQyCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguaW5pdF9jYWxsZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5pbml0X2NhbGxlZCwgMSkKIAogICAgICAgICB5ID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKHgpKQogCiAgICAgICAgICMgbG9hZHMgbXVzdCBOT1QgY2FsbCBfX2luaXRfXwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLmluaXRfY2FsbGVkLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguaW5pdF9jYWxsZWQsIDEpCiAKICAgICAgICAgIyBjdHlwZXMgaW5zdGFuY2VzIGFyZSBpZGVudGljYWwgd2hlbiB0aGUgaW5zdGFuY2UgX19kaWN0X18KICAgICAgICAgIyBhbmQgdGhlIG1lbW9yeSBidWZmZXIgYXJlIGlkZW50aWNhbAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh5Ll9fZGljdF9fLCB4Ll9fZGljdF9fKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZmZXIoeSlbOl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcih4KVs6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9fZGljdF9fLCB4Ll9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbW9yeXZpZXcoeSkudG9ieXRlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KHgpLnRvYnl0ZXMoKSkKIAogICAgIGRlZiB0ZXN0X3VucGlja2FibGUoc2VsZik6CiAgICAgICAgICMgY3R5cGVzIG9iamVjdHMgdGhhdCBhcmUgcG9pbnRlcnMgb3IgY29udGFpbiBwb2ludGVycyBhcmUKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BvaW50ZXJzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcG9pbnRlcnMucHkKaW5kZXggMDc2Y2Q4Yi4uOTJiOGNlNiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcG9pbnRlcnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcG9pbnRlcnMucHkKQEAgLTE3LDcgKzE3LDcgQEAKIAogICAgICAgICBQT0lOVEVSKGNfdWxvbmcpKGNfdWxvbmcoMjIpKQogICAgICAgICAjIFBvaW50ZXIgY2FuJ3Qgc2V0IGNvbnRlbnRzOiBoYXMgbm8gX3R5cGVfCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIEEsIGNfdWxvbmcoMzMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEEsIGNfdWxvbmcoMzMpKQogCiAgICAgZGVmIHRlc3RfcGFzc19wb2ludGVycyhzZWxmKToKICAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCkBAIC0yNywxMiArMjcsMTIgQEAKICAgICAgICAgaSA9IGNfaW50KDEyMzQ1Njc4KQogIyMgICAgICAgIGZ1bmMuYXJndHlwZXMgPSAoUE9JTlRFUihjX2ludCksKQogICAgICAgICBhZGRyZXNzID0gZnVuYyhieXJlZihpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY19pbnQuZnJvbV9hZGRyZXNzKGFkZHJlc3MpLnZhbHVlLCAxMjM0NTY3OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX2ludC5mcm9tX2FkZHJlc3MoYWRkcmVzcykudmFsdWUsIDEyMzQ1Njc4KQogCiAgICAgICAgIGZ1bmMucmVzdHlwZSA9IFBPSU5URVIoY19pbnQpCiAgICAgICAgIHJlcyA9IGZ1bmMocG9pbnRlcihpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzLmNvbnRlbnRzLnZhbHVlLCAxMjM0NTY3OCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzWzBdLCAxMjM0NTY3OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuY29udGVudHMudmFsdWUsIDEyMzQ1Njc4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1swXSwgMTIzNDU2NzgpCiAKICAgICBkZWYgdGVzdF9jaGFuZ2VfcG9pbnRlcnMoc2VsZik6CiAgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQpAQCAtNDMsMTggKzQzLDE4IEBACiAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSAoUE9JTlRFUihjX2ludCksKQogCiAgICAgICAgIHJlcyA9IGZ1bmMocG9pbnRlcihpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzWzBdLCA4NzY1NCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzLmNvbnRlbnRzLnZhbHVlLCA4NzY1NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMF0sIDg3NjU0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5jb250ZW50cy52YWx1ZSwgODc2NTQpCiAKICAgICAgICAgIyBDIGNvZGU6ICpyZXMgPSA1NDM0NQogICAgICAgICByZXNbMF0gPSA1NDM0NQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChpLnZhbHVlLCA1NDM0NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLnZhbHVlLCA1NDM0NSkKIAogICAgICAgICAjIEMgY29kZToKICAgICAgICAgIyAgIGludCB4ID0gMTIzMjE7CiAgICAgICAgICMgICByZXMgPSAmeAogICAgICAgICByZXMuY29udGVudHMgPSBjX2ludCgxMjMyMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoaS52YWx1ZSwgNTQzNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS52YWx1ZSwgNTQzNDUpCiAKICAgICBkZWYgdGVzdF9jYWxsYmFja3Nfd2l0aF9wb2ludGVycyhzZWxmKToKICAgICAgICAgIyBhIGZ1bmN0aW9uIHR5cGUgcmVjZWl2aW5nIGEgcG9pbnRlcgpAQCAtNzgsNyArNzgsNyBAQAogCiAjIyAgICAgICAgaSA9IGNfaW50KDQyKQogIyMgICAgICAgIGNhbGxiYWNrKGJ5cmVmKGkpKQotIyMgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpLnZhbHVlID09IDg0KQorIyMgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpLnZhbHVlID09IDg0KQogCiAgICAgICAgIGRvaXQoY2FsbGJhY2spCiAjIyAgICAgICAgcHJpbnQgc2VsZi5yZXN1bHQKQEAgLTkxLDExICs5MSwxMSBAQAogICAgICAgICAgICAgaSA9IGN0KDQyKQogICAgICAgICAgICAgcCA9IHBvaW50ZXIoaSkKICMjICAgICAgICAgICAgcHJpbnQgdHlwZShwLmNvbnRlbnRzKSwgY3QKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKHAuY29udGVudHMpIGlzIGN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocC5jb250ZW50cykgaXMgY3QpCiAgICAgICAgICAgICAjIHAuY29udGVudHMgaXMgdGhlIHNhbWUgYXMgcFswXQogIyMgICAgICAgICAgICBwcmludCBwLmNvbnRlbnRzCi0jIyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhwLmNvbnRlbnRzID09IDQyKQotIyMgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MocFswXSA9PSA0MikKKyMjICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuY29udGVudHMgPT0gNDIpCisjIyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwWzBdID09IDQyKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlbGl0ZW0sIHAsIDApCiAKQEAgLTExNyw5ICsxMTcsOSBAQAogCiAgICAgICAgIHB0ID0gcG9pbnRlcihUYWJsZSgxLCAyLCAzKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwdC5jb250ZW50cy5hLCAxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwdC5jb250ZW50cy5iLCAyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwdC5jb250ZW50cy5jLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB0LmNvbnRlbnRzLmEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHQuY29udGVudHMuYiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwdC5jb250ZW50cy5jLCAzKQogCiAgICAgICAgIHB0LmNvbnRlbnRzLmMgPSAzMwogCkBAIC0xMzAsOCArMTMwLDggQEAKICAgICAgICAgcCA9IHBvaW50ZXIoY19pbnQoNDIpKQogICAgICAgICAjIEFsdGhvdWdoIGEgcG9pbnRlciBjYW4gYmUgaW5kZXhlZCwgaXQgaGEgbm8gbGVuZ3RoCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCBwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzBdLCA0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocC5jb250ZW50cy52YWx1ZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFswXSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5jb250ZW50cy52YWx1ZSwgNDIpCiAKICAgICBkZWYgdGVzdF9jaGFycHAoc2VsZik6CiAgICAgICAgICIiIlRlc3QgdGhhdCBhIGNoYXJhY3RlciBwb2ludGVyLXRvLXBvaW50ZXIgaXMgY29ycmVjdGx5IHBhc3NlZCIiIgpAQCAtMTU2LDIwICsxNTYsMjAgQEAKICAgICAgICAgcHAgPSBwb2ludGVyKHApCiAgICAgICAgIHEgPSBwb2ludGVyKHkpCiAgICAgICAgIHBwWzBdID0gcSAgICAgICAgICMgPD09Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbMF0sIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFswXSwgNikKICAgICBkZWYgdGVzdF9jX3ZvaWRfcChzZWxmKToKICAgICAgICAgIyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmFpZD0xNTE4MTkwJmdyb3VwX2lkPTU0NzAmYXRpZD0xMDU0NzAKICAgICAgICAgaWYgc2l6ZW9mKGNfdm9pZF9wKSA9PSA0OgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY192b2lkX3AoMHhGRkZGRkZGRkwpLnZhbHVlLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3ZvaWRfcCgweEZGRkZGRkZGTCkudmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCgtMSkudmFsdWUpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjX3ZvaWRfcCgweEZGRkZGRkZGRkZGRkZGRkZMKS52YWx1ZSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY192b2lkX3AoMHhGRkZGRkZGRkZGRkZGRkZGTCkudmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCgtMSkudmFsdWUpCiAgICAgICAgIGVsaWYgc2l6ZW9mKGNfdm9pZF9wKSA9PSA4OgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY192b2lkX3AoMHhGRkZGRkZGRkwpLnZhbHVlLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3ZvaWRfcCgweEZGRkZGRkZGTCkudmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGTCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNfdm9pZF9wKDB4RkZGRkZGRkZGRkZGRkZGRkwpLnZhbHVlLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3ZvaWRfcCgweEZGRkZGRkZGRkZGRkZGRkZMKS52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfdm9pZF9wKC0xKS52YWx1ZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNfdm9pZF9wKDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGTCkudmFsdWUsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfdm9pZF9wKDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGTCkudmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCgtMSkudmFsdWUpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3ZvaWRfcCwgMy4xNCkgIyBtYWtlIHN1cmUgZmxvYXRzIGFyZSBOT1QgYWNjZXB0ZWQKQEAgLTE3NywxNiArMTc3LDE2IEBACiAKICAgICBkZWYgdGVzdF9wb2ludGVyc19ib29sKHNlbGYpOgogICAgICAgICAjIE5VTEwgcG9pbnRlcnMgaGF2ZSBhIGJvb2xlYW4gRmFsc2UgdmFsdWUsIG5vbi1OVUxMIHBvaW50ZXJzIFRydWUuCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJvb2woUE9JTlRFUihjX2ludCkoKSksIEZhbHNlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChib29sKHBvaW50ZXIoY19pbnQoKSkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvb2woUE9JTlRFUihjX2ludCkoKSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvb2wocG9pbnRlcihjX2ludCgpKSksIFRydWUpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYm9vbChDRlVOQ1RZUEUoTm9uZSkoMCkpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYm9vbChDRlVOQ1RZUEUoTm9uZSkoNDIpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib29sKENGVU5DVFlQRShOb25lKSgwKSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvb2woQ0ZVTkNUWVBFKE5vbmUpKDQyKSksIFRydWUpCiAKICAgICAgICAgIyBDT00gbWV0aG9kcyBhcmUgYm9vbGVhbiBUcnVlOgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKICAgICAgICAgICAgIG10aCA9IFdJTkZVTkNUWVBFKE5vbmUpKDQyLCAibmFtZSIsICgpLCBOb25lKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYm9vbChtdGgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib29sKG10aCksIFRydWUpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wcm90b3R5cGVzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHJvdG90eXBlcy5weQppbmRleCAzM2RlYWUzLi4wOWJhNjU1IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wcm90b3R5cGVzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkKQEAgLTU4LDIzICs1OCwyMyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdW5jKCkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZGV0YWlsczoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cihkZXRhaWxzKSwgInJlcXVpcmVkIGFyZ3VtZW50ICdpbnB1dCcgbWlzc2luZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkZXRhaWxzKSwgInJlcXVpcmVkIGFyZ3VtZW50ICdpbnB1dCcgbWlzc2luZyIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIlR5cGVFcnJvciBub3QgcmFpc2VkIikKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmdW5jKE5vbmUpLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmdW5jKGlucHV0PU5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoTm9uZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhpbnB1dD1Ob25lKSwgTm9uZSkKIAogCiAgICAgZGVmIHRlc3RfaW50X3BvaW50ZXJfYXJnKHNlbGYpOgogICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCiAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfbG9uZwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBmdW5jKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGZ1bmMoMCkpCiAKICAgICAgICAgY2kgPSBjX2ludCgwKQogCiAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBQT0lOVEVSKGNfaW50KSwKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocG9zaXRpdmVfYWRkcmVzcyhhZGRyZXNzb2YoY2kpKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpdGl2ZV9hZGRyZXNzKGFkZHJlc3NvZihjaSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZV9hZGRyZXNzKGZ1bmMoYnlyZWYoY2kpKSkpCiAKICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IGNfY2hhcl9wLApAQCAtOTEsNDUgKzkxLDQ1IEBACiAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfY2hhcl9wCiAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBQT0lOVEVSKGNfY2hhciksCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBmdW5jKGNfY2hhcl9wKE5vbmUpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjEyMyIsIGZ1bmMoY19jaGFyX3AoIjEyMyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKCIxMjMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfY2hhcl9wKE5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX2NoYXJfcCgiMTIzIikpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIxMjMiLCBmdW5jKGNfYnVmZmVyKCIxMjMiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY19idWZmZXIoIjEyMyIpKSkKICAgICAgICAgY2EgPSBjX2NoYXIoImEiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQogCiAgICAgZGVmIHRlc3RfY19jaGFyX3BfYXJnKHNlbGYpOgogICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCiAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfY2hhcl9wCiAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBjX2NoYXJfcCwKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBmdW5jKE5vbmUpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiMTIzIiwgZnVuYygiMTIzIikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGZ1bmMoY19jaGFyX3AoTm9uZSkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiMTIzIiwgZnVuYyhjX2NoYXJfcCgiMTIzIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoY19jaGFyX3AoTm9uZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfY2hhcl9wKCIxMjMiKSkpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjEyMyIsIGZ1bmMoY19idWZmZXIoIjEyMyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX2J1ZmZlcigiMTIzIikpKQogICAgICAgICBjYSA9IGNfY2hhcigiYSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCiAKICAgICBkZWYgdGVzdF9jX3ZvaWRfcF9hcmcoc2VsZik6CiAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKICAgICAgICAgZnVuYy5yZXN0eXBlID0gY19jaGFyX3AKICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IGNfdm9pZF9wLAogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIxMjMiLCBmdW5jKCIxMjMiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjEyMyIsIGZ1bmMoY19jaGFyX3AoIjEyMyIpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgZnVuYyhjX2NoYXJfcChOb25lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYygiMTIzIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY19jaGFyX3AoIjEyMyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfY2hhcl9wKE5vbmUpKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiMTIzIiwgZnVuYyhjX2J1ZmZlcigiMTIzIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfYnVmZmVyKCIxMjMiKSkpCiAgICAgICAgIGNhID0gY19jaGFyKCJhIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoImEiLCBmdW5jKHBvaW50ZXIoY2EpKVswXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKHBvaW50ZXIoY2EpKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKIAogICAgICAgICBmdW5jKGJ5cmVmKGNfaW50KCkpKQogICAgICAgICBmdW5jKHBvaW50ZXIoY19pbnQoKSkpCkBAIC0xNDAsOCArMTQwLDggQEAKICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHUiMTIzIiwgZnVuYyhjX3djaGFyX3AodSIxMjMiKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIxMjMiLCBmdW5jKGNfd2NoYXJfcCh1IjEyMyIpKSkKIAogICAgIGRlZiB0ZXN0X2luc3RhbmNlKHNlbGYpOgogICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCkBAIC0xNTEsMTAgKzE1MSwxMCBAQAogICAgICAgICAgICAgX2FzX3BhcmFtZXRlcl8gPSBOb25lCiAKICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IGNfdm9pZF9wLAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBmdW5jKFgoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhYKCkpKQogCiAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBOb25lCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGZ1bmMoWCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKFgoKSkpCiAKIHRyeToKICAgICBjX3djaGFyCkBAIC0xNzQsMTUgKzE3NCwxNSBAQAogICAgICAgICAgICAgZnVuYy5yZXN0eXBlID0gY193Y2hhcl9wCiAgICAgICAgICAgICBmdW5jLmFyZ3R5cGVzID0gUE9JTlRFUihjX3djaGFyKSwKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHUiMTIzIiwgZnVuYyh1IjEyMyIpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgZnVuYyhjX3djaGFyX3AoTm9uZSkpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodSIxMjMiLCBmdW5jKGNfd2NoYXJfcCh1IjEyMyIpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIxMjMiLCBmdW5jKHUiMTIzIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIxMjMiLCBmdW5jKGNfd2NoYXJfcCh1IjEyMyIpKSkKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodSIxMjMiLCBmdW5jKGNfd2J1ZmZlcih1IjEyMyIpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIxMjMiLCBmdW5jKGNfd2J1ZmZlcih1IjEyMyIpKSkKICAgICAgICAgICAgIGNhID0gY193Y2hhcigiYSIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh1ImEiLCBmdW5jKHBvaW50ZXIoY2EpKVswXSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHUiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKIAogICAgICAgICBkZWYgdGVzdF9jX3djaGFyX3BfYXJnKHNlbGYpOgogICAgICAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcApAQCAtMTkxLDE2ICsxOTEsMTYgQEAKIAogICAgICAgICAgICAgY193Y2hhcl9wLmZyb21fcGFyYW0odSIxMjMiKQogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBmdW5jKE5vbmUpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjEyMyIsIGZ1bmModSIxMjMiKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIxMjMiLCBmdW5jKGNfd2NoYXJfcCgiMTIzIikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKE5vbmUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyh1IjEyMyIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2NoYXJfcCgiMTIzIikpKQogCiAgICAgICAgICAgICAjIFhYWCBDdXJyZW50bHksIHRoZXNlIHJhaXNlIFR5cGVFcnJvcnMsIGFsdGhvdWdoIHRoZXkgc2hvdWxkbid0OgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjEyMyIsIGZ1bmMoY193YnVmZmVyKCIxMjMiKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2J1ZmZlcigiMTIzIikpKQogICAgICAgICAgICAgY2EgPSBjX3djaGFyKCJhIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKHBvaW50ZXIoY2EpKVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCiAKIGNsYXNzIEFycmF5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Qoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9weXRob25fYXBpLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHl0aG9uX2FwaS5weQppbmRleCAyNjVlZTU1Li42OTgxNzBmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9weXRob25fYXBpLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3B5dGhvbl9hcGkucHkKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUucmVzdHlwZSA9IHB5X29iamVjdAogICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZS5hcmd0eXBlcyA9IGNfY2hhcl9wLCBjX3B5X3NzaXplX3QKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgiYWJjZGVmZ2hpIiwgMyksICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCJhYmNkZWZnaGkiLCAzKSwgImFiYyIpCiAKICAgICBkZWYgdGVzdF9QeVN0cmluZ19Gcm9tU3RyaW5nKHNlbGYpOgogICAgICAgICBweXRob25hcGkuUHlTdHJpbmdfRnJvbVN0cmluZy5yZXN0eXBlID0gcHlfb2JqZWN0CkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgcyA9ICJhYmMiCiAgICAgICAgIHJlZmNudCA9IGdyYyhzKQogICAgICAgICBweW9iID0gcHl0aG9uYXBpLlB5U3RyaW5nX0Zyb21TdHJpbmcocykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ3JjKHMpLCByZWZjbnQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMsIHB5b2IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHMpLCByZWZjbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgcHlvYikKICAgICAgICAgZGVsIHB5b2IKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ3JjKHMpLCByZWZjbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHMpLCByZWZjbnQpCiAKICAgICBpZiBpc19yZXNvdXJjZV9lbmFibGVkKCJyZWZjb3VudCIpOgogICAgICAgICAjIFRoaXMgdGVzdCBpcyB1bnJlbGlhYmxlLCBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIHRoYXQgY29kZSBpbgpAQCAtNDQsMjggKzQ0LDI4IEBACiAgICAgICAgIGRlZiB0ZXN0X1B5SW50X0xvbmcoc2VsZik6CiAgICAgICAgICAgICByZWY0MiA9IGdyYyg0MikKICAgICAgICAgICAgIHB5dGhvbmFwaS5QeUludF9Gcm9tTG9uZy5yZXN0eXBlID0gcHlfb2JqZWN0Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChweXRob25hcGkuUHlJbnRfRnJvbUxvbmcoNDIpLCA0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aG9uYXBpLlB5SW50X0Zyb21Mb25nKDQyKSwgNDIpCiAKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdyYyg0MiksIHJlZjQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKIAogICAgICAgICAgICAgcHl0aG9uYXBpLlB5SW50X0FzTG9uZy5hcmd0eXBlcyA9IChweV9vYmplY3QsKQogICAgICAgICAgICAgcHl0aG9uYXBpLlB5SW50X0FzTG9uZy5yZXN0eXBlID0gY19sb25nCiAKICAgICAgICAgICAgIHJlcyA9IHB5dGhvbmFwaS5QeUludF9Bc0xvbmcoNDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChncmMocmVzKSwgcmVmNDIgKyAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMocmVzKSwgcmVmNDIgKyAxKQogICAgICAgICAgICAgZGVsIHJlcwotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ3JjKDQyKSwgcmVmNDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyg0MiksIHJlZjQyKQogCiAgICAgZGVmIHRlc3RfUHlPYmpfRnJvbVB0cihzZWxmKToKICAgICAgICAgcyA9ICJhYmMgZGVmIGdoaSBqa2wiCiAgICAgICAgIHJlZiA9IGdyYyhzKQogICAgICAgICAjIGlkKHB5dGhvbi1vYmplY3QpIGlzIHRoZSBhZGRyZXNzCiAgICAgICAgIHB5b2JqID0gUHlPYmpfRnJvbVB0cihpZChzKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMgaXMgcHlvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzIGlzIHB5b2JqKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdyYyhzKSwgcmVmICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMocyksIHJlZiArIDEpCiAgICAgICAgIGRlbCBweW9iagotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChncmMocyksIHJlZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMocyksIHJlZikKIAogICAgIGRlZiB0ZXN0X1B5T1Nfc25wcmludGYoc2VsZik6CiAgICAgICAgIFB5T1Nfc25wcmludGYgPSBweXRob25hcGkuUHlPU19zbnByaW50ZgpAQCAtNzMsMTggKzczLDE4IEBACiAKICAgICAgICAgYnVmID0gY19idWZmZXIoMjU2KQogICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJIZWxsbyBmcm9tICVzIiwgImN0eXBlcyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zi52YWx1ZSwgIkhlbGxvIGZyb20gY3R5cGVzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJIZWxsbyBmcm9tIGN0eXBlcyIpCiAKICAgICAgICAgUHlPU19zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiSGVsbG8gZnJvbSAlcyIsICJjdHlwZXMiLCAxLCAyLCAzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWYudmFsdWUsICJIZWxsbyBmcm9tIGN0eXBlcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAiSGVsbG8gZnJvbSBjdHlwZXMiKQogCiAgICAgICAgICMgbm90IGVub3VnaCBhcmd1bWVudHMKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgUHlPU19zbnByaW50ZiwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFB5T1Nfc25wcmludGYsIGJ1ZikKIAogICAgIGRlZiB0ZXN0X3B5b2JqZWN0X3JlcHIoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlcHIocHlfb2JqZWN0KCkpLCAicHlfb2JqZWN0KDxOVUxMPikiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXByKHB5X29iamVjdCg0MikpLCAicHlfb2JqZWN0KDQyKSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlcHIocHlfb2JqZWN0KG9iamVjdCkpLCAicHlfb2JqZWN0KCVyKSIgJSBvYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihweV9vYmplY3QoKSksICJweV9vYmplY3QoPE5VTEw+KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihweV9vYmplY3QoNDIpKSwgInB5X29iamVjdCg0MikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocHlfb2JqZWN0KG9iamVjdCkpLCAicHlfb2JqZWN0KCVyKSIgJSBvYmplY3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yYW5kb21fdGhpbmdzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weQppbmRleCAxODNiMWQ2Li4xYzIxN2MzIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yYW5kb21fdGhpbmdzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JhbmRvbV90aGluZ3MucHkKQEAgLTIsNyArMiw3IEBACiBpbXBvcnQgdW5pdHRlc3QsIHN5cwogCiBkZWYgY2FsbGJhY2tfZnVuYyhhcmcpOgotICAgIDQyIC8gYXJnCisgICAgNDIgLy8gYXJnCiAgICAgcmFpc2UgVmFsdWVFcnJvcihhcmcpCiAKIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgpAQCAtMjAsNyArMjAsNyBAQAogICAgICAgICAgICAgaGRsbCA9IHdpbmRsbC5rZXJuZWwzMi5Mb2FkTGlicmFyeUEoImtlcm5lbDMyIikKICAgICAgICAgICAgIGZ1bmNhZGRyID0gd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzKGhkbGwsICJHZXRNb2R1bGVIYW5kbGVBIikKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FsbF9mdW5jdGlvbihmdW5jYWRkciwgKE5vbmUsKSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxfZnVuY3Rpb24oZnVuY2FkZHIsIChOb25lLCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoTm9uZSkpCiAKIGNsYXNzIENhbGxiYWNrVHJhY2JhY2tUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00OSwyNyArNDksMjcgQEAKICAgICBkZWYgdGVzdF9WYWx1ZUVycm9yKHNlbGYpOgogICAgICAgICBjYiA9IENGVU5DVFlQRShjX2ludCwgY19pbnQpKGNhbGxiYWNrX2Z1bmMpCiAgICAgICAgIG91dCA9IHNlbGYuY2FwdHVyZV9zdGRlcnIoY2IsIDQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChvdXQuc3BsaXRsaW5lcygpWy0xXSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3BsaXRsaW5lcygpWy0xXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbHVlRXJyb3I6IDQyIikKIAogICAgIGRlZiB0ZXN0X0ludGVnZXJEaXZpc2lvbkVycm9yKHNlbGYpOgogICAgICAgICBjYiA9IENGVU5DVFlQRShjX2ludCwgY19pbnQpKGNhbGxiYWNrX2Z1bmMpCiAgICAgICAgIG91dCA9IHNlbGYuY2FwdHVyZV9zdGRlcnIoY2IsIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG91dC5zcGxpdGxpbmVzKClbLTFdWzoxOV0sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnNwbGl0bGluZXMoKVstMV1bOjE5XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlplcm9EaXZpc2lvbkVycm9yOiAiKQogCiAgICAgZGVmIHRlc3RfRmxvYXREaXZpc2lvbkVycm9yKHNlbGYpOgogICAgICAgICBjYiA9IENGVU5DVFlQRShjX2ludCwgY19kb3VibGUpKGNhbGxiYWNrX2Z1bmMpCiAgICAgICAgIG91dCA9IHNlbGYuY2FwdHVyZV9zdGRlcnIoY2IsIDAuMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwob3V0LnNwbGl0bGluZXMoKVstMV1bOjE5XSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3BsaXRsaW5lcygpWy0xXVs6MTldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWmVyb0RpdmlzaW9uRXJyb3I6ICIpCiAKICAgICBkZWYgdGVzdF9UeXBlRXJyb3JEaXZpc2lvbkVycm9yKHNlbGYpOgogICAgICAgICBjYiA9IENGVU5DVFlQRShjX2ludCwgY19jaGFyX3ApKGNhbGxiYWNrX2Z1bmMpCiAgICAgICAgIG91dCA9IHNlbGYuY2FwdHVyZV9zdGRlcnIoY2IsICJzcGFtIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwob3V0LnNwbGl0bGluZXMoKVstMV0sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnNwbGl0bGluZXMoKVstMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUeXBlRXJyb3I6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIG9wZXJhbmQgdHlwZShzKSBmb3IgLzogJ2ludCcgYW5kICdzdHInIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIG9wZXJhbmQgdHlwZShzKSBmb3IgLy86ICdpbnQnIGFuZCAnc3RyJyIpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZWZjb3VudHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZWZjb3VudHMucHkKaW5kZXggNDQ4ZjI5Mi4uMzVhODFhYSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmVmY291bnRzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JlZmNvdW50cy5weQpAQCAtMjEsMTcgKzIxLDE3IEBACiAgICAgICAgICAgICAjcHJpbnQgImNhbGxlZCBiYWNrIHdpdGgiLCB2YWx1ZQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ3JjKGNhbGxiYWNrKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoY2FsbGJhY2spLCAyKQogICAgICAgICBjYiA9IE15Q2FsbGJhY2soY2FsbGJhY2spCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGdyYyhjYWxsYmFjaykgPiAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JjKGNhbGxiYWNrKSA+IDIpCiAgICAgICAgIHJlc3VsdCA9IGYoLTEwLCBjYikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAtMTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAtMTgpCiAgICAgICAgIGNiID0gTm9uZQogCiAgICAgICAgIGdjLmNvbGxlY3QoKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdyYyhjYWxsYmFjayksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKGNhbGxiYWNrKSwgMikKIAogCiAgICAgZGVmIHRlc3RfcmVmY291bnQoc2VsZik6CkBAIC0zOSwxOSArMzksMTkgQEAKICAgICAgICAgZGVmIGZ1bmMoKmFyZ3MpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICAjIHRoaXMgaXMgdGhlIHN0YW5kYXJkIHJlZmNvdW50IGZvciBmdW5jCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdyYyhmdW5jKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoZnVuYyksIDIpCiAKICAgICAgICAgIyB0aGUgQ0Z1bmNQdHIgaW5zdGFuY2UgaG9sZHMgYXRyIGxlYXN0IG9uZSByZWZjb3VudCBvbiBmdW5jOgogICAgICAgICBmID0gT3RoZXJDYWxsYmFjayhmdW5jKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZ3JjKGZ1bmMpID4gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdyYyhmdW5jKSA+IDIpCiAKICAgICAgICAgIyBhbmQgbWF5IHJlbGVhc2UgaXQgYWdhaW4KICAgICAgICAgZGVsIGYKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGdyYyhmdW5jKSA+PSAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JjKGZ1bmMpID49IDIpCiAKICAgICAgICAgIyBidXQgbm93IGl0IG11c3QgYmUgZ29uZQogICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGdyYyhmdW5jKSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JjKGZ1bmMpID09IDIpCiAKICAgICAgICAgY2xhc3MgWChjdHlwZXMuU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIE90aGVyQ2FsbGJhY2spXQpAQCAtNTksMjcgKzU5LDI3IEBACiAgICAgICAgIHguYSA9IE90aGVyQ2FsbGJhY2soZnVuYykKIAogICAgICAgICAjIHRoZSBDRnVuY1B0ciBpbnN0YW5jZSBob2xkcyBhdHIgbGVhc3Qgb25lIHJlZmNvdW50IG9uIGZ1bmM6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhncmMoZnVuYykgPiAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JjKGZ1bmMpID4gMikKIAogICAgICAgICAjIGFuZCBtYXkgcmVsZWFzZSBpdCBhZ2FpbgogICAgICAgICBkZWwgeAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZ3JjKGZ1bmMpID49IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShncmMoZnVuYykgPj0gMikKIAogICAgICAgICAjIGFuZCBub3cgaXQgbXVzdCBiZSBnb25lIGFnYWluCiAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChncmMoZnVuYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKGZ1bmMpLCAyKQogCiAgICAgICAgIGYgPSBPdGhlckNhbGxiYWNrKGZ1bmMpCiAKICAgICAgICAgIyB0aGUgQ0Z1bmNQdHIgaW5zdGFuY2UgaG9sZHMgYXRyIGxlYXN0IG9uZSByZWZjb3VudCBvbiBmdW5jOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZ3JjKGZ1bmMpID4gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdyYyhmdW5jKSA+IDIpCiAKICAgICAgICAgIyBjcmVhdGUgYSBjeWNsZQogICAgICAgICBmLmN5Y2xlID0gZgogCiAgICAgICAgIGRlbCBmCiAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChncmMoZnVuYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKGZ1bmMpLCAyKQogCiBjbGFzcyBBbm90aGVyTGVhayh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfY2FsbGJhY2soc2VsZik6CkBAIC05Miw3ICs5Miw3IEBACiAKICAgICAgICAgYSA9IHN5cy5nZXRyZWZjb3VudChjdHlwZXMuY19pbnQpCiAgICAgICAgIGYoMSwgMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3lzLmdldHJlZmNvdW50KGN0eXBlcy5jX2ludCksIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KGN0eXBlcy5jX2ludCksIGEpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZXByLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmVwci5weQppbmRleCA5ZmVmMjFmLi45OWNjNTU2IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZXByLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JlcHIucHkKQEAgLTE4LDEyICsxOCwxMiBAQAogICAgIGRlZiB0ZXN0X251bWJlcnMoc2VsZik6CiAgICAgICAgIGZvciB0eXAgaW4gc3ViY2xhc3NlczoKICAgICAgICAgICAgIGJhc2UgPSB0eXAuX19iYXNlc19fWzBdCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVwcihiYXNlKDQyKSkuc3RhcnRzd2l0aChiYXNlLl9fbmFtZV9fKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCI8WCBvYmplY3QgYXQiLCByZXByKHR5cCg0MikpWzoxMl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihiYXNlKDQyKSkuc3RhcnRzd2l0aChiYXNlLl9fbmFtZV9fKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxYIG9iamVjdCBhdCIsIHJlcHIodHlwKDQyKSlbOjEyXSkKIAogICAgIGRlZiB0ZXN0X2NoYXIoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCJjX2NoYXIoJ3gnKSIsIHJlcHIoY19jaGFyKCd4JykpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiPFggb2JqZWN0IGF0IiwgcmVwcihYKCd4JykpWzoxMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImNfY2hhcigneCcpIiwgcmVwcihjX2NoYXIoJ3gnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxYIG9iamVjdCBhdCIsIHJlcHIoWCgneCcpKVs6MTJdKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmV0dXJuZnVuY3B0cnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZXR1cm5mdW5jcHRycy5weQppbmRleCA4OGRjY2YyLi5mNzY2MTg5IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZXR1cm5mdW5jcHRycy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZXR1cm5mdW5jcHRycy5weQpAQCAtMTIsOCArMTIsOCBAQAogICAgICAgICBnZXRfc3RyY2hyID0gZGxsLmdldF9zdHJjaHIKICAgICAgICAgZ2V0X3N0cmNoci5yZXN0eXBlID0gQ0ZVTkNUWVBFKGNfY2hhcl9wLCBjX2NoYXJfcCwgY19jaGFyKQogICAgICAgICBzdHJjaHIgPSBnZXRfc3RyY2hyKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyY2hyKCJhYmNkZWYiLCAiYiIpLCAiYmNkZWYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJjaHIoImFiY2RlZiIsICJ4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKCJhYmNkZWYiLCAiYiIpLCAiYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmNocigiYWJjZGVmIiwgIngiKSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRFcnJvciwgc3RyY2hyLCAiYWJjZGVmIiwgMykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdHJjaHIsICJhYmNkZWYiKQogCkBAIC0yNiw4ICsyNiw4IEBACiAgICAgICAgICMgX0NGdW5jUHRyIGluc3RhbmNlcyBhcmUgbm93IGNhbGxhYmxlIHdpdGggYW4gaW50ZWdlciBhcmd1bWVudAogICAgICAgICAjIHdoaWNoIGRlbm90ZXMgYSBmdW5jdGlvbiBhZGRyZXNzOgogICAgICAgICBzdHJjaHIgPSBDRlVOQ1RZUEUoY19jaGFyX3AsIGNfY2hhcl9wLCBjX2NoYXIpKGFkZHIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJjaHIoImFiY2RlZiIsICJiIiksICJiY2RlZiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmNocigiYWJjZGVmIiwgIngiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmNocigiYWJjZGVmIiwgImIiKSwgImJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJjaHIoImFiY2RlZiIsICJ4IiksIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50RXJyb3IsIHN0cmNociwgImFiY2RlZiIsIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3RyY2hyLCAiYWJjZGVmIikKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc2ltcGxlc3ViY2xhc3Nlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NpbXBsZXN1YmNsYXNzZXMucHkKaW5kZXggNTY3MWNjZS4uMWI3M2ZiMyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc2ltcGxlc3ViY2xhc3Nlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zaW1wbGVzdWJjbGFzc2VzLnB5CkBAIC0xMiw4ICsxMiw4IEBACiBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE15SW50KDMpLCBNeUludCgzKSkKLSAgICAgICAgc2VsZi5mYWlsSWZFcXVhbChNeUludCg0MiksIE15SW50KDQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNeUludCgzKSwgTXlJbnQoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoTXlJbnQoNDIpLCBNeUludCg0MykpCiAKICAgICBkZWYgdGVzdF9pZ25vcmVfcmV0dmFsKHNlbGYpOgogICAgICAgICAjIFRlc3QgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGNhbGxiYWNrIGlzIGlnbm9yZWQKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgICAgIHJldHVybiAoMSwgImFiYyIsIE5vbmUpCiAKICAgICAgICAgY2IgPSBwcm90byhmdW5jKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBjYigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGNiKCkpCiAKIAogICAgIGRlZiB0ZXN0X2ludF9jYWxsYmFjayhzZWxmKToKQEAgLTM0LDI0ICszNCwyNCBAQAogCiAgICAgICAgIGNiID0gQ0ZVTkNUWVBFKE5vbmUsIE15SW50KShmdW5jKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGNiKDQyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZShhcmdzWy0xXSksIE15SW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGNiKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGFyZ3NbLTFdKSwgTXlJbnQpCiAKICAgICAgICAgY2IgPSBDRlVOQ1RZUEUoY19pbnQsIGNfaW50KShmdW5jKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBjYig0MikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUoYXJnc1stMV0pLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGNiKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGFyZ3NbLTFdKSwgaW50KQogCiAgICAgZGVmIHRlc3RfaW50X3N0cnVjdChzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgTXlJbnQpXQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFgoKS54LCBNeUludCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKS54LCBNeUludCgpKQogCiAgICAgICAgIHMgPSBYKCkKICAgICAgICAgcy54ID0gTXlJbnQoNDIpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy54LCBNeUludCg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy54LCBNeUludCg0MikpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zaXplcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NpemVzLnB5CmluZGV4IDIwOGMwMGUuLmY5YjVlOTcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NpemVzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NpemVzLnB5CkBAIC0xLDI3ICsxLDM0IEBACiAjIFRlc3Qgc3BlY2lmaWNhbGx5LXNpemVkIGNvbnRhaW5lcnMuCiAKLWltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKIAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKKwogY2xhc3MgU2l6ZXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfOChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMSwgc2l6ZW9mKGNfaW50OCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDEsIHNpemVvZihjX3VpbnQ4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzaXplb2YoY19pbnQ4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzaXplb2YoY191aW50OCkpCiAKICAgICBkZWYgdGVzdF8xNihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMiwgc2l6ZW9mKGNfaW50MTYpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgyLCBzaXplb2YoY191aW50MTYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNpemVvZihjX2ludDE2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzaXplb2YoY191aW50MTYpKQogCiAgICAgZGVmIHRlc3RfMzIoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQsIHNpemVvZihjX2ludDMyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNCwgc2l6ZW9mKGNfdWludDMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0LCBzaXplb2YoY19pbnQzMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgc2l6ZW9mKGNfdWludDMyKSkKIAogICAgIGRlZiB0ZXN0XzY0KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg4LCBzaXplb2YoY19pbnQ2NCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDgsIHNpemVvZihjX3VpbnQ2NCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOCwgc2l6ZW9mKGNfaW50NjQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIHNpemVvZihjX3VpbnQ2NCkpCiAKICAgICBkZWYgdGVzdF9zaXplX3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihjX3ZvaWRfcCksIHNpemVvZihjX3NpemVfdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGNfdm9pZF9wKSwgc2l6ZW9mKGNfc2l6ZV90KSkKKworICAgIGRlZiB0ZXN0X3NzaXplX3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGNfdm9pZF9wKSwgc2l6ZW9mKGNfc3NpemVfdCkpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NsaWNpbmcucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zbGljaW5nLnB5CmluZGV4IDI1YmQ4MDEuLmE1NjMyZWMgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NsaWNpbmcucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc2xpY2luZy5weQpAQCAtNyw0MyArNyw0MyBAQAogICAgIGRlZiB0ZXN0X2dldHNsaWNlX2NpbnQoc2VsZik6CiAgICAgICAgIGEgPSAoY19pbnQgKiAxMDApKCp4cmFuZ2UoMTEwMCwgMTIwMCkpCiAgICAgICAgIGIgPSByYW5nZSgxMTAwLCAxMjAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzA6Ml0sIGJbMDoyXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVswOjI6XSwgYlswOjI6XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKGEpLCBsZW4oYikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbNTo3XSwgYls1OjddKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzU6NzpdLCBiWzU6NzpdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWy0xXSwgYlstMV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbOl0sIGJbOl0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbOjpdLCBiWzo6XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVsxMDo6LTFdLCBiWzEwOjotMV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbMzA6MjA6LTFdLCBiWzMwOjIwOi0xXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVs6MTI6Nl0sIGJbOjEyOjZdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzI6Njo0XSwgYlsyOjY6NF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswOjJdLCBiWzA6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswOjI6XSwgYlswOjI6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYSksIGxlbihiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzU6N10sIGJbNTo3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzU6NzpdLCBiWzU6NzpdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTFdLCBiWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzpdLCBiWzpdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjpdLCBiWzo6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzEwOjotMV0sIGJbMTA6Oi0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzMwOjIwOi0xXSwgYlszMDoyMDotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6MTI6Nl0sIGJbOjEyOjZdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMjo2OjRdLCBiWzI6Njo0XSkKIAogICAgICAgICBhWzA6NV0gPSByYW5nZSg1LCAxMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVswOjVdLCByYW5nZSg1LCAxMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbMDo1Ol0sIHJhbmdlKDUsIDEwKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVs0OjotMV0sIHJhbmdlKDksIDQsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzA6NV0sIHJhbmdlKDUsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzA6NTpdLCByYW5nZSg1LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs0OjotMV0sIHJhbmdlKDksIDQsIC0xKSkKIAogICAgIGRlZiB0ZXN0X3NldHNsaWNlX2NpbnQoc2VsZik6CiAgICAgICAgIGEgPSAoY19pbnQgKiAxMDApKCp4cmFuZ2UoMTEwMCwgMTIwMCkpCiAgICAgICAgIGIgPSByYW5nZSgxMTAwLCAxMjAwKQogCiAgICAgICAgIGFbMzI6NDddID0gcmFuZ2UoMzIsIDQ3KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzMyOjQ3XSwgcmFuZ2UoMzIsIDQ3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzMyOjQ3XSwgcmFuZ2UoMzIsIDQ3KSkKICAgICAgICAgYVszMjo0N10gPSByYW5nZSgxMzIsIDE0NykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVszMjo0NzpdLCByYW5nZSgxMzIsIDE0NykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVszMjo0NzpdLCByYW5nZSgxMzIsIDE0NykpCiAgICAgICAgIGFbNDY6MzE6LTFdID0gcmFuZ2UoMjMyLCAyNDcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbMzI6NDc6MV0sIHJhbmdlKDI0NiwgMjMxLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVszMjo0NzoxXSwgcmFuZ2UoMjQ2LCAyMzEsIC0xKSkKIAogICAgICAgICBhWzMyOjQ3XSA9IHJhbmdlKDExMzIsIDExNDcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbOl0sIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6XSwgYikKICAgICAgICAgYVszMjo0Nzo3XSA9IHJhbmdlKDMpCiAgICAgICAgIGJbMzI6NDc6N10gPSByYW5nZSgzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzpdLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOl0sIGIpCiAgICAgICAgIGFbMzM6Oi0zXSA9IHJhbmdlKDEyKQogICAgICAgICBiWzMzOjotM10gPSByYW5nZSgxMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVs6XSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzpdLCBiKQogCiAgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IHNldHNsaWNlLCBzZXRpdGVtCiAKQEAgLTY5LDEyICs2OSwxMiBAQAogICAgICAgICBkbGwubXlfc3RyZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfY2hhcikKICAgICAgICAgZGxsLm15X2ZyZWUucmVzdHlwZSA9IE5vbmUKICAgICAgICAgcmVzID0gZGxsLm15X3N0cmR1cChzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbOmxlbihzKV0sIHMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc1s6M10sIHNbOjNdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbOmxlbihzKTpdLCBzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbbGVuKHMpLTE6LTE6LTFdLCBzWzo6LTFdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbbGVuKHMpLTE6NTotN10sIHNbOjU6LTddKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbMDotMTotMV0sIHNbMDo6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpXSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOjNdLCBzWzozXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKTpdLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMTotMTotMV0sIHNbOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0xOjU6LTddLCBzWzo1Oi03XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMDotMTotMV0sIHNbMDo6LTFdKQogCiAgICAgICAgIGltcG9ydCBvcGVyYXRvcgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtLApAQCAtOTQsOCArOTQsOCBAQAogCiAgICAgICAgIGRsbC5teV9zdHJkdXAucmVzdHlwZSA9IFBPSU5URVIoY19ieXRlKQogICAgICAgICByZXMgPSBkbGwubXlfc3RyZHVwKHMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc1s6bGVuKHMpXSwgcmFuZ2Uob3JkKCJhIiksIG9yZCgieiIpKzEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbOmxlbihzKTpdLCByYW5nZShvcmQoImEiKSwgb3JkKCJ6IikrMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyldLCByYW5nZShvcmQoImEiKSwgb3JkKCJ6IikrMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyk6XSwgcmFuZ2Uob3JkKCJhIiksIG9yZCgieiIpKzEpKQogICAgICAgICBkbGwubXlfZnJlZShyZXMpCiAKICAgICBkZWYgdGVzdF9jaGFyX3B0cl93aXRoX2ZyZWUoc2VsZik6CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgZGxsLm15X3N0cmR1cC5lcnJjaGVjayA9IGVycmNoZWNrCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlcyA9IGRsbC5teV9zdHJkdXAocykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlcywgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGVsIGRsbC5teV9zdHJkdXAuZXJyY2hlY2sKIApAQCAtMTI0LDExICsxMjQsMTEgQEAKICAgICAgICAgcyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwwIgogCiAgICAgICAgIHAgPSAoY19jaGFyICogMjcpKCpzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzpdLCBzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzo6XSwgcykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6Oi0xXSwgc1s6Oi0xXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs1OjotMl0sIHNbNTo6LTJdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzI6NTotM10sIHNbMjo1Oi0zXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzpdLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjpdLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjotMV0sIHNbOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs1OjotMl0sIHNbNTo6LTJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbMjo1Oi0zXSwgc1syOjU6LTNdKQogCiAKICAgICB0cnk6CkBAIC0xNDQsMTAgKzE0NCwxMCBAQAogICAgICAgICAgICAgZGxsLm15X3djc2R1cC5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCiAgICAgICAgICAgICBkbGwubXlfZnJlZS5yZXN0eXBlID0gTm9uZQogICAgICAgICAgICAgcmVzID0gZGxsLm15X3djc2R1cChzKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzWzpsZW4ocyldLCBzKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzWzpsZW4ocyk6XSwgcykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc1tsZW4ocyktMTotMTotMV0sIHNbOjotMV0pCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbbGVuKHMpLTE6NTotN10sIHNbOjU6LTddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKV0sIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpOl0sIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMTotMTotMV0sIHNbOjotMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMTo1Oi03XSwgc1s6NTotN10pCiAKICAgICAgICAgICAgIGltcG9ydCBvcGVyYXRvcgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRzbGljZSwKQEAgLTE2NiwxMCArMTY2LDEwIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICByZXMgPSBkbGwubXlfd2NzZHVwKHMpCiAgICAgICAgICAgICB0bXBsID0gcmFuZ2Uob3JkKCJhIiksIG9yZCgieiIpKzEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbOmxlbihzKS0xXSwgdG1wbCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc1s6bGVuKHMpLTE6XSwgdG1wbCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc1tsZW4ocyktMjotMTotMV0sIHRtcGxbOjotMV0pCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbbGVuKHMpLTI6NTotN10sIHRtcGxbOjU6LTddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKS0xXSwgdG1wbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyktMTpdLCB0bXBsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTI6LTE6LTFdLCB0bXBsWzo6LTFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTI6NTotN10sIHRtcGxbOjU6LTddKQogICAgICAgICAgICAgZGxsLm15X2ZyZWUocmVzKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdwdHIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdwdHIucHkKaW5kZXggNmVlNmFlMC4uYWJlZDU4YiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncHRyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3B0ci5weQpAQCAtMTYsMTQgKzE2LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldGF0dHIsIHguc3RyLCAiY29udGVudHMiKQogICAgICAgICBiID0gY19idWZmZXIoIkhlbGxvLCBXb3JsZCIpCiAgICAgICAgIGZyb20gc3lzIGltcG9ydCBnZXRyZWZjb3VudCBhcyBncmMKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ3JjKGIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhiKSwgMikKICAgICAgICAgeC5zdHIgPSBiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdyYyhiKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoYiksIDMpCiAKICAgICAgICAgIyBQT0lOVEVSKGNfY2hhcikgYW5kIFB5dGhvbiBzdHJpbmcgaXMgTk9UIGNvbXBhdGlibGUKICAgICAgICAgIyBQT0lOVEVSKGNfY2hhcikgYW5kIGNfYnVmZmVyKCkgaXMgY29tcGF0aWJsZQogICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYikpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYltpXSwgeC5zdHJbaV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbaV0sIHguc3RyW2ldKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgeCwgInN0ciIsICJIZWxsbywgV29ybGQiKQogCkBAIC0zNCwxMSArMzQsMTEgQEAKIAogICAgICAgICAjIGNfY2hhcl9wIGFuZCBQeXRob24gc3RyaW5nIGlzIGNvbXBhdGlibGUKICAgICAgICAgIyBjX2NoYXJfcCBhbmQgY19idWZmZXIgaXMgTk9UIGNvbXBhdGlibGUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeC5zdHIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5zdHIsIE5vbmUpCiAgICAgICAgIHguc3RyID0gIkhlbGxvLCBXb3JsZCIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeC5zdHIsICJIZWxsbywgV29ybGQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguc3RyLCAiSGVsbG8sIFdvcmxkIikKICAgICAgICAgYiA9IGNfYnVmZmVyKCJIZWxsbywgV29ybGQiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCB4LCAic3RyIiwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCB4LCAic3RyIiwgYikKIAogCiAgICAgZGVmIHRlc3RfZnVuY3Rpb25zKHNlbGYpOgpAQCAtNDgsMTUgKzQ4LDE1IEBACiAgICAgICAgICMgY19jaGFyX3AgYW5kIFB5dGhvbiBzdHJpbmcgaXMgY29tcGF0aWJsZQogICAgICAgICAjIGNfY2hhcl9wIGFuZCBjX2J1ZmZlciBhcmUgbm93IGNvbXBhdGlibGUKICAgICAgICAgc3RyY2hyLmFyZ3R5cGVzID0gY19jaGFyX3AsIGNfY2hhcgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJjaHIoImFiY2RlZiIsICJjIiksICJjZGVmIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyY2hyKGNfYnVmZmVyKCJhYmNkZWYiKSwgImMiKSwgImNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmNocigiYWJjZGVmIiwgImMiKSwgImNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmNocihjX2J1ZmZlcigiYWJjZGVmIiksICJjIiksICJjZGVmIikKIAogICAgICAgICAjIFBPSU5URVIoY19jaGFyKSBhbmQgUHl0aG9uIHN0cmluZyBpcyBOT1QgY29tcGF0aWJsZQogICAgICAgICAjIFBPSU5URVIoY19jaGFyKSBhbmQgY19idWZmZXIoKSBpcyBjb21wYXRpYmxlCiAgICAgICAgIHN0cmNoci5hcmd0eXBlcyA9IFBPSU5URVIoY19jaGFyKSwgY19jaGFyCiAgICAgICAgIGJ1ZiA9IGNfYnVmZmVyKCJhYmNkZWYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJjaHIoYnVmLCAiYyIpLCAiY2RlZiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmNocigiYWJjZGVmIiwgImMiKSwgImNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmNocihidWYsICJjIiksICJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJjaHIoImFiY2RlZiIsICJjIiksICJjZGVmIikKIAogICAgICAgICAjIFhYWCBUaGVzZSBjYWxscyBhcmUgZGFuZ2Vyb3VzLCBiZWNhdXNlIHRoZSBmaXJzdCBhcmd1bWVudAogICAgICAgICAjIHRvIHN0cmNociBpcyBubyBsb25nZXIgdmFsaWQgYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMhCkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgIGJ1ZiA9IGNfYnVmZmVyKCJhYmNkZWYiKQogICAgICAgICByID0gc3RyY2hyKGJ1ZiwgImMiKQogICAgICAgICB4ID0gclswXSwgclsxXSwgclsyXSwgclszXSwgcls0XQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh4LCAoImMiLCAiZCIsICJlIiwgImYiLCAiXDAwMCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsICgiYyIsICJkIiwgImUiLCAiZiIsICJcMDAwIikpCiAgICAgICAgIGRlbCBidWYKICAgICAgICAgIyB4MSB3aWxsIE5PVCBiZSB0aGUgc2FtZSBhcyB4LCB1c3VhbGx5OgogICAgICAgICB4MSA9IHJbMF0sIHJbMV0sIHJbMl0sIHJbM10sIHJbNF0KZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3MucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdzLnB5CmluZGV4IDcyMjQ4ZTEuLjg5NDVkMGMgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3MucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncy5weQpAQCAtMSw0NiArMSw1MyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogY2xhc3MgU3RyaW5nQXJyYXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Qoc2VsZik6CiAgICAgICAgIEJVRiA9IGNfY2hhciAqIDQKIAogICAgICAgICBidWYgPSBCVUYoImEiLCAiYiIsICJjIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnZhbHVlLCAiYWJjIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnJhdywgImFiY1wwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnJhdywgImFiY1wwMDAiKQogCiAgICAgICAgIGJ1Zi52YWx1ZSA9ICJBQkNEIgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWYudmFsdWUsICJBQkNEIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnJhdywgIkFCQ0QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgIkFCQ0QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5yYXcsICJBQkNEIikKIAogICAgICAgICBidWYudmFsdWUgPSAieCIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnZhbHVlLCAieCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zi5yYXcsICJ4XDAwMENEIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYucmF3LCAieFwwMDBDRCIpCiAKICAgICAgICAgYnVmWzFdID0gIloiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zi52YWx1ZSwgInhaQ0QiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWYucmF3LCAieFpDRCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAieFpDRCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnJhdywgInhaQ0QiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInZhbHVlIiwgImFhYWFhYWFhIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBidWYsICJ2YWx1ZSIsIDQyKQogCi0gICAgZGVmIHRlc3RfY19idWZmZXJfdmFsdWUoc2VsZik6CisgICAgZGVmIHRlc3RfY19idWZmZXJfdmFsdWUoc2VsZiwgbWVtb3J5dmlldz1tZW1vcnl2aWV3KToKICAgICAgICAgYnVmID0gY19idWZmZXIoMzIpCiAKICAgICAgICAgYnVmLnZhbHVlID0gIkhlbGxvLCBXb3JsZCIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnZhbHVlLCAiSGVsbG8sIFdvcmxkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJIZWxsbywgV29ybGQiKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInZhbHVlIiwgYnVmZmVyKCJIZWxsbywgV29ybGQiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBidWYsICJ2YWx1ZSIsIGJ1ZmZlcigiYWJjIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInJhdyIsIGJ1ZmZlcigieCIgKiAxMDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInZhbHVlIiwgbWVtb3J5dmlldygiSGVsbG8sIFdvcmxkIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgYnVmLCAidmFsdWUiLCBtZW1vcnl2aWV3KCJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgYnVmLCAicmF3IiwgbWVtb3J5dmlldygieCIgKiAxMDApKQogCi0gICAgZGVmIHRlc3RfY19idWZmZXJfcmF3KHNlbGYpOgorICAgIGRlZiB0ZXN0X2NfYnVmZmVyX3JhdyhzZWxmLCBtZW1vcnl2aWV3PW1lbW9yeXZpZXcpOgogICAgICAgICBidWYgPSBjX2J1ZmZlcigzMikKIAotICAgICAgICBidWYucmF3ID0gYnVmZmVyKCJIZWxsbywgV29ybGQiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWYudmFsdWUsICJIZWxsbywgV29ybGQiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInZhbHVlIiwgYnVmZmVyKCJhYmMiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgYnVmLCAicmF3IiwgYnVmZmVyKCJ4IiAqIDEwMCkpCisgICAgICAgIGJ1Zi5yYXcgPSBtZW1vcnl2aWV3KCJIZWxsbywgV29ybGQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgYnVmLCAidmFsdWUiLCBtZW1vcnl2aWV3KCJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgYnVmLCAicmF3IiwgbWVtb3J5dmlldygieCIgKiAxMDApKQorCisgICAgZGVmIHRlc3RfY19idWZmZXJfZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgIyBDb21wYXRpYmlsaXR5IHdpdGggMi54CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYudGVzdF9jX2J1ZmZlcl92YWx1ZShidWZmZXIpCisgICAgICAgICAgICBzZWxmLnRlc3RfY19idWZmZXJfcmF3KGJ1ZmZlcikKIAogICAgIGRlZiB0ZXN0X3BhcmFtXzEoc2VsZik6CiAgICAgICAgIEJVRiA9IGNfY2hhciAqIDQKQEAgLTYzLDE2ICs3MCwxNiBAQAogICAgICAgICAgICAgQlVGID0gY193Y2hhciAqIDQKIAogICAgICAgICAgICAgYnVmID0gQlVGKHUiYSIsIHUiYiIsIHUiYyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWYudmFsdWUsIHUiYWJjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCB1ImFiYyIpCiAKICAgICAgICAgICAgIGJ1Zi52YWx1ZSA9IHUiQUJDRCIKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zi52YWx1ZSwgdSJBQkNEIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCB1IkFCQ0QiKQogCiAgICAgICAgICAgICBidWYudmFsdWUgPSB1IngiCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWYudmFsdWUsIHUieCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgdSJ4IikKIAogICAgICAgICAgICAgYnVmWzFdID0gdSJaIgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnZhbHVlLCB1InhaQ0QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsIHUieFpDRCIpCiAKIGNsYXNzIFN0cmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgWFhfdGVzdF9iYXNpY19zdHJpbmdzKHNlbGYpOgpAQCAtODAsMjQgKzg3LDI0IEBACiAKICAgICAgICAgIyBDYW5ub3QgY2FsbCBsZW4gb24gYSBjX3N0cmluZyBhbnkgbG9uZ2VyCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCBjcykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKGNzKSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoY3MpLCA3KQogCiAgICAgICAgICMgVGhlIHZhbHVlIHByb3BlcnR5IGlzIHRoZSBzdHJpbmcgdXAgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIE5VTC4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY3MudmFsdWUsICJhYmNkZWYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjX3N0cmluZygiYWJjXDAwMGRlZiIpLnZhbHVlLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy52YWx1ZSwgImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19zdHJpbmcoImFiY1wwMDBkZWYiKS52YWx1ZSwgImFiYyIpCiAKICAgICAgICAgIyBUaGUgcmF3IHByb3BlcnR5IGlzIHRoZSB0b3RhbCBidWZmZXIgY29udGVudHM6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNzLnJhdywgImFiY2RlZlwwMDAiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjX3N0cmluZygiYWJjXDAwMGRlZiIpLnJhdywgImFiY1wwMDBkZWZcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJhYmNkZWZcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3N0cmluZygiYWJjXDAwMGRlZiIpLnJhdywgImFiY1wwMDBkZWZcMDAwIikKIAogICAgICAgICAjIFdlIGNhbiBjaGFuZ2UgdGhlIHZhbHVlOgogICAgICAgICBjcy52YWx1ZSA9ICJhYiIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY3MudmFsdWUsICJhYiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNzLnJhdywgImFiXDAwMFwwMDBcMDAwXDAwMFwwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnZhbHVlLCAiYWIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnJhdywgImFiXDAwMFwwMDBcMDAwXDAwMFwwMDAiKQogCiAgICAgICAgIGNzLnJhdyA9ICJYWSIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY3MudmFsdWUsICJYWSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNzLnJhdywgIlhZXDAwMFwwMDBcMDAwXDAwMFwwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnZhbHVlLCAiWFkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnJhdywgIlhZXDAwMFwwMDBcMDAwXDAwMFwwMDAiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY19zdHJpbmcsIHUiMTIzIikKIApAQCAtMTA4LDI0ICsxMTUsMjQgQEAKIAogICAgICAgICAjIE5ldyBpbiByZWxlYXNlcyBsYXRlciB0aGFuIDAuNC4wOgogICAgICAgICAjIGNfc3RyaW5nKG51bWJlcikgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgb2Ygc2l6ZSBudW1iZXIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxlbihjX3N0cmluZygzMikucmF3KSA9PSAzMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihjX3N0cmluZygzMikucmF3KSA9PSAzMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY19zdHJpbmcsIC0xKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjX3N0cmluZywgMCkKIAogICAgICAgICAjIFRoZXNlIHRlc3RzIGZhaWwsIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIGluaXRpYWxpemVkCi0jIyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfc3RyaW5nKDIpLnZhbHVlID09ICIiKQotIyMgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3N0cmluZygyKS5yYXcgPT0gIlwwMDBcMDAwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfc3RyaW5nKDIpLnJhd1stMV0gPT0gIlwwMDAiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobGVuKGNfc3RyaW5nKDIpLnJhdykgPT0gMikKKyMjICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zdHJpbmcoMikudmFsdWUgPT0gIiIpCisjIyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc3RyaW5nKDIpLnJhdyA9PSAiXDAwMFwwMDAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zdHJpbmcoMikucmF3Wy0xXSA9PSAiXDAwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oY19zdHJpbmcoMikucmF3KSA9PSAyKQogCiAgICAgZGVmIFhYX3Rlc3RfaW5pdGlhbGl6ZWRfc3RyaW5ncyhzZWxmKToKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19zdHJpbmcoImFiIiwgNCkucmF3WzoyXSA9PSAiYWIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19zdHJpbmcoImFiIiwgNCkucmF3WzoyOl0gPT0gImFiIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1s6MjotMV0gPT0gImJhIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1s6MjoyXSA9PSAiYSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3N0cmluZygiYWIiLCA0KS5yYXdbLTFdID09ICJcMDAwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfc3RyaW5nKCJhYiIsIDIpLnJhdyA9PSAiYVwwMDAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zdHJpbmcoImFiIiwgNCkucmF3WzoyXSA9PSAiYWIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zdHJpbmcoImFiIiwgNCkucmF3WzoyOl0gPT0gImFiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1s6MjotMV0gPT0gImJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1s6MjoyXSA9PSAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3N0cmluZygiYWIiLCA0KS5yYXdbLTFdID09ICJcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc3RyaW5nKCJhYiIsIDIpLnJhdyA9PSAiYVwwMDAiKQogCiAgICAgZGVmIFhYX3Rlc3RfdG9vbG9uZyhzZWxmKToKICAgICAgICAgY3MgPSBjX3N0cmluZygiYWJjZGVmIikKQEAgLTE1NiwyMiArMTYzLDIyIEBACiAgICAgICAgICAgICAjIFhYWCBUaGlzIGJlaGF2aW91ciBpcyBhYm91dCB0byBjaGFuZ2U6CiAgICAgICAgICAgICAjIGxlbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgaW4gYnl0ZXMuCiAgICAgICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIE5VTCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2l6ZW9mKGNzKSA9PSAxNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaXplb2YoY3MpID09IDE0KQogCiAgICAgICAgICAgICAjIFRoZSB2YWx1ZSBwcm9wZXJ0eSBpcyB0aGUgc3RyaW5nIHVwIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBOVUwuCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3MudmFsdWUgPT0gdSJhYmNkZWYiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfd3N0cmluZyh1ImFiY1wwMDBkZWYiKS52YWx1ZSA9PSB1ImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY3MudmFsdWUgPT0gdSJhYmNkZWYiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfd3N0cmluZyh1ImFiY1wwMDBkZWYiKS52YWx1ZSA9PSB1ImFiYyIpCiAKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3dzdHJpbmcodSJhYmNcMDAwZGVmIikudmFsdWUgPT0gdSJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfd3N0cmluZyh1ImFiY1wwMDBkZWYiKS52YWx1ZSA9PSB1ImFiYyIpCiAKICAgICAgICAgICAgICMgVGhlIHJhdyBwcm9wZXJ0eSBpcyB0aGUgdG90YWwgYnVmZmVyIGNvbnRlbnRzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNzLnJhdyA9PSB1ImFiY2RlZlwwMDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfd3N0cmluZyh1ImFiY1wwMDBkZWYiKS5yYXcgPT0gdSJhYmNcMDAwZGVmXDAwMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY3MucmF3ID09IHUiYWJjZGVmXDAwMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY193c3RyaW5nKHUiYWJjXDAwMGRlZiIpLnJhdyA9PSB1ImFiY1wwMDBkZWZcMDAwIikKIAogICAgICAgICAgICAgIyBXZSBjYW4gY2hhbmdlIHRoZSB2YWx1ZToKICAgICAgICAgICAgIGNzLnZhbHVlID0gdSJhYiIKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjcy52YWx1ZSA9PSB1ImFiIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjcy5yYXcgPT0gdSJhYlwwMDBcMDAwXDAwMFwwMDBcMDAwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcy52YWx1ZSA9PSB1ImFiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcy5yYXcgPT0gdSJhYlwwMDBcMDAwXDAwMFwwMDBcMDAwIikKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3dzdHJpbmcsICIxMjMiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY193c3RyaW5nLCAwKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0X2ZpZWxkcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdF9maWVsZHMucHkKaW5kZXggZWY1ZmI1MC4uMjJlYjNiMCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0X2ZpZWxkcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3RfZmllbGRzLnB5CkBAIC0xNSw3ICsxNSw3IEBACiAgICAgZGVmIHRlc3RfMV9BKHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgMCkgIyBub3QgZmluYWxpemVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCAwKSAjIG5vdCBmaW5hbGl6ZWQKICAgICAgICAgWC5fZmllbGRzXyA9IFtdICMgZmluYWxpemVkCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBYLCAiX2ZpZWxkc18iLCBbXSkKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKaW5kZXggMzViZWE2Mi4uNzdjZmIyNiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CkBAIC0xMywzMyArMTMsMzMgQEAKICAgICAgICAgY2xhc3MgWihYKToKICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihZKSwgc2l6ZW9mKGNfaW50KSoyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWiksIHNpemVvZihjX2ludCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguX2ZpZWxkc18sIFsoImEiLCBjX2ludCldKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChZLl9maWVsZHNfLCBbKCJiIiwgY19pbnQpXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWi5fZmllbGRzXywgWygiYSIsIGNfaW50KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihZKSwgc2l6ZW9mKGNfaW50KSoyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihaKSwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLl9maWVsZHNfLCBbKCJhIiwgY19pbnQpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLl9maWVsZHNfLCBbKCJiIiwgY19pbnQpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChaLl9maWVsZHNfLCBbKCJhIiwgY19pbnQpXSkKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2RlbGF5ZWQoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgMCkKICAgICAgICAgWC5fZmllbGRzXyA9IFsoImEiLCBjX2ludCldCiAKICAgICAgICAgY2xhc3MgWShYKToKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFkpLCBzaXplb2YoWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFkpLCBzaXplb2YoWCkpCiAgICAgICAgIFkuX2ZpZWxkc18gPSBbKCJiIiwgY19pbnQpXQogCiAgICAgICAgIGNsYXNzIFooWCk6CiAgICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWSksIHNpemVvZihjX2ludCkqMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFopLCBzaXplb2YoY19pbnQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLl9maWVsZHNfLCBbKCJhIiwgY19pbnQpXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWS5fZmllbGRzXywgWygiYiIsIGNfaW50KV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFouX2ZpZWxkc18sIFsoImEiLCBjX2ludCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWSksIHNpemVvZihjX2ludCkqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWiksIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5fZmllbGRzXywgWygiYSIsIGNfaW50KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5fZmllbGRzXywgWygiYiIsIGNfaW50KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWi5fZmllbGRzXywgWygiYSIsIGNfaW50KV0pCiAKIGNsYXNzIFN0cnVjdHVyZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBmb3JtYXRzID0geyJjIjogY19jaGFyLApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfY2hhciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgdHApXQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHNpemVvZihYKSwgY29kZSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzaXplb2YoWCksIGNvZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGNzaXplKCJjJWMwJWMiICUgKGNvZGUsIGNvZGUpKSwgY29kZSkpCiAKICAgICBkZWYgdGVzdF91bmlvbnMoc2VsZik6CkBAIC03MCwzOSArNzAsMzkgQEAKICAgICAgICAgICAgIGNsYXNzIFgoVW5pb24pOgogICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfY2hhciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgdHApXQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHNpemVvZihYKSwgY29kZSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzaXplb2YoWCksIGNvZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGNzaXplKCIlYyIgJSAoY29kZSkpLCBjb2RlKSkKIAogICAgIGRlZiB0ZXN0X3N0cnVjdF9hbGlnbm1lbnQoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfY2hhciAqIDMpXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhbGlnbm1lbnQoWCksIGNhbGNzaXplKCJzIikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgY2FsY3NpemUoIjNzIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpZ25tZW50KFgpLCBjYWxjc2l6ZSgicyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgY2FsY3NpemUoIjNzIikpCiAKICAgICAgICAgY2xhc3MgWShTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19jaGFyICogMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAoInkiLCBjX2ludCldCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFsaWdubWVudChZKSwgY2FsY3NpemUoImkiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFkpLCBjYWxjc2l6ZSgiM3NpIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpZ25tZW50KFkpLCBjYWxjc2l6ZSgiaSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihZKSwgY2FsY3NpemUoIjNzaSIpKQogCiAgICAgICAgIGNsYXNzIFNJKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBYKSwKICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIFkpXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhbGlnbm1lbnQoU0kpLCBtYXgoYWxpZ25tZW50KFkpLCBhbGlnbm1lbnQoWCkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoU0kpLCBjYWxjc2l6ZSgiM3MwaSAzc2kgMGkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlnbm1lbnQoU0kpLCBtYXgoYWxpZ25tZW50KFkpLCBhbGlnbm1lbnQoWCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihTSSksIGNhbGNzaXplKCIzczBpIDNzaSAwaSIpKQogCiAgICAgICAgIGNsYXNzIElTKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImIiLCBZKSwKICAgICAgICAgICAgICAgICAgICAgICAgICgiYSIsIFgpXQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFsaWdubWVudChTSSksIG1heChhbGlnbm1lbnQoWCksIGFsaWdubWVudChZKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihJUyksIGNhbGNzaXplKCIzc2kgM3MgMGkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlnbm1lbnQoU0kpLCBtYXgoYWxpZ25tZW50KFgpLCBhbGlnbm1lbnQoWSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihJUyksIGNhbGNzaXplKCIzc2kgM3MgMGkiKSkKIAogICAgICAgICBjbGFzcyBYWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgWCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBYKV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYWxpZ25tZW50KFhYKSwgYWxpZ25tZW50KFgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWFgpLCBjYWxjc2l6ZSgiM3MgM3MgMHMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlnbm1lbnQoWFgpLCBhbGlnbm1lbnQoWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFhYKSwgY2FsY3NpemUoIjNzIDNzIDBzIikpCiAKICAgICBkZWYgdGVzdF9lbXRweShzZWxmKToKICAgICAgICAgIyBJIGhhZCBwcm9ibGVtcyB3aXRoIHRoZXNlCkBAIC0xMTUsMTUgKzExNSwxNSBAQAogICAgICAgICAgICAgX2ZpZWxkc18gPSBbXQogCiAgICAgICAgICMgSXMgdGhpcyByZWFsbHkgdGhlIGNvcnJlY3QgYWxpZ25tZW50LCBvciBzaG91bGQgaXQgYmUgMD8KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGFsaWdubWVudChYKSA9PSBhbGlnbm1lbnQoWSkgPT0gMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNpemVvZihYKSA9PSBzaXplb2YoWSkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsaWdubWVudChYKSA9PSBhbGlnbm1lbnQoWSkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpemVvZihYKSA9PSBzaXplb2YoWSkgPT0gMCkKIAogICAgICAgICBjbGFzcyBYWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgWCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBYKV0KIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhbGlnbm1lbnQoWFgpLCAxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWFgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsaWdubWVudChYWCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFhYKSwgMCkKIAogICAgIGRlZiB0ZXN0X2ZpZWxkcyhzZWxmKToKICAgICAgICAgIyB0ZXN0IHRoZSBvZmZzZXQgYW5kIHNpemUgYXR0cmlidXRlcyBvZiBTdHJ1Y3R1cmUvVW5vaW4gZmllbGRzLgpAQCAtMTMxLDExICsxMzEsMTEgQEAKICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIGNfY2hhcildCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC54Lm9mZnNldCwgMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC54LnNpemUsIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC54Lm9mZnNldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLnguc2l6ZSwgc2l6ZW9mKGNfaW50KSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLnkub2Zmc2V0LCBzaXplb2YoY19pbnQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLnkuc2l6ZSwgc2l6ZW9mKGNfY2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC55Lm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLnkuc2l6ZSwgc2l6ZW9mKGNfY2hhcikpCiAKICAgICAgICAgIyByZWFkb25seQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIHNldGF0dHIsIFgueCwgIm9mZnNldCIsIDkyKQpAQCAtMTQ1LDExICsxNDUsMTEgQEAKICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIGNfY2hhcildCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC54Lm9mZnNldCwgMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC54LnNpemUsIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC54Lm9mZnNldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLnguc2l6ZSwgc2l6ZW9mKGNfaW50KSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLnkub2Zmc2V0LCAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLnkuc2l6ZSwgc2l6ZW9mKGNfY2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC55Lm9mZnNldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLnkuc2l6ZSwgc2l6ZW9mKGNfY2hhcikpCiAKICAgICAgICAgIyByZWFkb25seQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIHNldGF0dHIsIFgueCwgIm9mZnNldCIsIDkyKQpAQCAtMTY0LDIyICsxNjQsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfbG9uZ2xvbmcpXQogICAgICAgICAgICAgX3BhY2tfID0gMQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgOSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC5iLm9mZnNldCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIDkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5iLm9mZnNldCwgMSkKIAogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2J5dGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19sb25nbG9uZyldCiAgICAgICAgICAgICBfcGFja18gPSAyCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgMTApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguYi5vZmZzZXQsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmIub2Zmc2V0LCAyKQogCiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfYnl0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2xvbmdsb25nKV0KICAgICAgICAgICAgIF9wYWNrXyA9IDQKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCAxMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC5iLm9mZnNldCwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYi5vZmZzZXQsIDQpCiAKICAgICAgICAgaW1wb3J0IHN0cnVjdAogICAgICAgICBsb25nbG9uZ19zaXplID0gc3RydWN0LmNhbGNzaXplKCJxIikKQEAgLTE5MCw4ICsxOTAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19sb25nbG9uZyldCiAgICAgICAgICAgICBfcGFja18gPSA4CiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBsb25nbG9uZ19hbGlnbiArIGxvbmdsb25nX3NpemUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguYi5vZmZzZXQsIG1pbig4LCBsb25nbG9uZ19hbGlnbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBsb25nbG9uZ19hbGlnbiArIGxvbmdsb25nX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5iLm9mZnNldCwgbWluKDgsIGxvbmdsb25nX2FsaWduKSkKIAogCiAgICAgICAgIGQgPSB7Il9maWVsZHNfIjogWygiYSIsICJiIiksCkBAIC0yMDksOSArMjA5LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQZXJzb24sICJOYW1lIiwgIkhJIikKIAogICAgICAgICAjIHNob3J0IGVub3VnaAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChQZXJzb24oIjEyMzQ1IiwgNSkubmFtZSwgIjEyMzQ1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQZXJzb24oIjEyMzQ1IiwgNSkubmFtZSwgIjEyMzQ1IikKICAgICAgICAgIyBleGFjdCBmaXQKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoUGVyc29uKCIxMjM0NTYiLCA1KS5uYW1lLCAiMTIzNDU2IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQZXJzb24oIjEyMzQ1NiIsIDUpLm5hbWUsICIxMjM0NTYiKQogICAgICAgICAjIHRvbyBsb25nCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFBlcnNvbiwgIjEyMzQ1NjciLCA1KQogCkBAIC0yMjksMTAgKzIyOSwxMCBAQAogICAgICAgICBjbGFzcyBQT0lOVChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19pbnQpLCAoInkiLCBjX2ludCldCiAgICAgICAgIHB0ID0gUE9JTlQoMSwgMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHB0LngsIHB0LnkpLCAoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHB0LngsIHB0LnkpLCAoMSwgMikpCiAKICAgICAgICAgcHQgPSBQT0lOVCh5PTIsIHg9MSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHB0LngsIHB0LnkpLCAoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHB0LngsIHB0LnkpLCAoMSwgMikpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkX2ZpZWxkX3R5cGVzKHNlbGYpOgogICAgICAgICBjbGFzcyBQT0lOVChTdHJ1Y3R1cmUpOgpAQCAtMjQ0LDE0ICsyNDQsMTQgQEAKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50ICogNCldCiAKICAgICAgICAgIyBjYW4gdXNlIHR1cGxlIHRvIGluaXRpYWxpemUgYXJyYXkgKGJ1dCBub3QgbGlzdCEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFNvbWVJbnRzKCgxLCAyKSkuYVs6XSwgWzEsIDIsIDAsIDBdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChTb21lSW50cygoMSwgMikpLmFbOjpdLCBbMSwgMiwgMCwgMF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFNvbWVJbnRzKCgxLCAyKSkuYVs6Oi0xXSwgWzAsIDAsIDIsIDFdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChTb21lSW50cygoMSwgMikpLmFbOjoyXSwgWzEsIDBdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChTb21lSW50cygoMSwgMikpLmFbMTo1OjZdLCBbMl0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFNvbWVJbnRzKCgxLCAyKSkuYVs2OjQ6LTFdLCBbXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoU29tZUludHMoKDEsIDIsIDMsIDQpKS5hWzpdLCBbMSwgMiwgMywgNF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFNvbWVJbnRzKCgxLCAyLCAzLCA0KSkuYVs6Ol0sIFsxLCAyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lSW50cygoMSwgMikpLmFbOl0sIFsxLCAyLCAwLCAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lSW50cygoMSwgMikpLmFbOjpdLCBbMSwgMiwgMCwgMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzo6LTFdLCBbMCwgMCwgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzo6Ml0sIFsxLCAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lSW50cygoMSwgMikpLmFbMTo1OjZdLCBbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzY6NDotMV0sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNvbWVJbnRzKCgxLCAyLCAzLCA0KSkuYVs6XSwgWzEsIDIsIDMsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNvbWVJbnRzKCgxLCAyLCAzLCA0KSkuYVs6Ol0sIFsxLCAyLCAzLCA0XSkKICAgICAgICAgIyB0b28gbG9uZwogICAgICAgICAjIFhYWCBTaG91bGQgcmFpc2UgVmFsdWVFcnJvcj8sIG5vdCBSdW50aW1lRXJyb3IKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBTb21lSW50cywgKDEsIDIsIDMsIDQsIDUpKQpAQCAtMjY5LDEwICsyNjksMTAgQEAKIAogICAgICAgICBwID0gUGVyc29uKCJTb21lb25lIiwgKCIxMjM0IiwgIjU2NzgiKSwgNSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwLm5hbWUsICJTb21lb25lIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocC5waG9uZS5hcmVhY29kZSwgIjEyMzQiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwLnBob25lLm51bWJlciwgIjU2NzgiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwLmFnZSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm5hbWUsICJTb21lb25lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBob25lLmFyZWFjb2RlLCAiMTIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5waG9uZS5udW1iZXIsICI1Njc4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmFnZSwgNSkKIAogICAgIGRlZiB0ZXN0X3N0cnVjdHVyZXNfd2l0aF93Y2hhcihzZWxmKToKICAgICAgICAgdHJ5OgpAQCAtMjg1LDEyICsyODUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICgiYWdlIiwgY19pbnQpXQogCiAgICAgICAgIHAgPSBQZXJzb25XKHUiU29tZW9uZSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHAubmFtZSwgIlNvbWVvbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubmFtZSwgIlNvbWVvbmUiKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFBlcnNvblcodSIxMjM0NTY3ODkwIikubmFtZSwgdSIxMjM0NTY3ODkwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoUGVyc29uVyh1IjEyMzQ1Njc4OTAxIikubmFtZSwgdSIxMjM0NTY3ODkwMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGVyc29uVyh1IjEyMzQ1Njc4OTAiKS5uYW1lLCB1IjEyMzQ1Njc4OTAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBlcnNvblcodSIxMjM0NTY3ODkwMSIpLm5hbWUsIHUiMTIzNDU2Nzg5MDEiKQogICAgICAgICAjIGV4YWN0IGZpdAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChQZXJzb25XKHUiMTIzNDU2Nzg5MDEyIikubmFtZSwgdSIxMjM0NTY3ODkwMTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBlcnNvblcodSIxMjM0NTY3ODkwMTIiKS5uYW1lLCB1IjEyMzQ1Njc4OTAxMiIpCiAgICAgICAgICN0b28gbG9uZwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQZXJzb25XLCB1IjEyMzQ1Njc4OTAxMjMiKQogCkBAIC0zMDUsMjQgKzMwNSwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKCJhZ2UiLCBjX2ludCldCiAKICAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQoUGVyc29uLCAiU29tZW9uZSIsICgxLCAyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2xzLCBSdW50aW1lRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xzLCBSdW50aW1lRXJyb3IpCiAgICAgICAgICMgSW4gUHl0aG9uIDIuNSwgRXhjZXB0aW9uIGlzIGEgbmV3LXN0eWxlIGNsYXNzLCBhbmQgdGhlIHJlcHIgY2hhbmdlZAogICAgICAgICBpZiBpc3N1YmNsYXNzKEV4Y2VwdGlvbiwgb2JqZWN0KToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG1zZywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihQaG9uZSkgPHR5cGUgJ2V4Y2VwdGlvbnMuVHlwZUVycm9yJz46ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QsIGludCBmb3VuZCIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChtc2csCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoUGhvbmUpIGV4Y2VwdGlvbnMuVHlwZUVycm9yOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgc3RyaW5nIG9yIFVuaWNvZGUgb2JqZWN0LCBpbnQgZm91bmQiKQogCiAgICAgICAgIGNscywgbXNnID0gc2VsZi5nZXRfZXhjZXB0KFBlcnNvbiwgIlNvbWVvbmUiLCAoImEiLCAiYiIsICJjIikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNscywgUnVudGltZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscywgUnVudGltZUVycm9yKQogICAgICAgICBpZiBpc3N1YmNsYXNzKEV4Y2VwdGlvbiwgb2JqZWN0KToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG1zZywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihQaG9uZSkgPHR5cGUgJ2V4Y2VwdGlvbnMuVHlwZUVycm9yJz46IHRvbyBtYW55IGluaXRpYWxpemVycyIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChtc2csICIoUGhvbmUpIGV4Y2VwdGlvbnMuVHlwZUVycm9yOiB0b28gbWFueSBpbml0aWFsaXplcnMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csICIoUGhvbmUpIGV4Y2VwdGlvbnMuVHlwZUVycm9yOiB0b28gbWFueSBpbml0aWFsaXplcnMiKQogCiAKICAgICBkZWYgZ2V0X2V4Y2VwdChzZWxmLCBmdW5jLCAqYXJncyk6CkBAIC0zMzcsNyArMzM3LDcgQEAKICMjICAgICAgICAjIHNhbWUgYXMgJ2NsYXNzIFgoU3RydWN0dXJlKTogcGFzcycKICMjICAgICAgICAjIGZhaWxzLCBzaW5jZSB3ZSBuZWVkIGVpdGhlciBhIF9maWVsZHNfIG9yIGEgX2Fic3RyYWN0XyBhdHRyaWJ1dGUKICMjICAgICAgICBjbHMsIG1zZyA9IHNlbGYuZ2V0X2V4Y2VwdChtZXRhLCAiWCIsIChTdHJ1Y3R1cmUsKSwge30pCi0jIyAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGNscywgbXNnKSwKKyMjICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjbHMsIG1zZyksCiAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEF0dHJpYnV0ZUVycm9yLCAiY2xhc3MgbXVzdCBkZWZpbmUgYSAnX2ZpZWxkc18nIGF0dHJpYnV0ZSIpKQogCiAgICAgZGVmIHRlc3RfYWJzdHJhY3RfY2xhc3Moc2VsZik6CkBAIC0zNDUsMTUgKzM0NSwxNSBAQAogICAgICAgICAgICAgX2Fic3RyYWN0XyA9ICJzb21ldGhpbmciCiAgICAgICAgICMgdHJ5ICdYKCknCiAgICAgICAgIGNscywgbXNnID0gc2VsZi5nZXRfZXhjZXB0KGV2YWwsICJYKCkiLCBsb2NhbHMoKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGNscywgbXNnKSwgKFR5cGVFcnJvciwgImFic3RyYWN0IGNsYXNzIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNscywgbXNnKSwgKFR5cGVFcnJvciwgImFic3RyYWN0IGNsYXNzIikpCiAKICAgICBkZWYgdGVzdF9tZXRob2RzKHNlbGYpOgogIyMgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICMjICAgICAgICAgICAgX2ZpZWxkc18gPSBbXQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygiaW5fZGxsIiBpbiBkaXIodHlwZShTdHJ1Y3R1cmUpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJmcm9tX2FkZHJlc3MiIGluIGRpcih0eXBlKFN0cnVjdHVyZSkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoImluX2RsbCIgaW4gZGlyKHR5cGUoU3RydWN0dXJlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiaW5fZGxsIiBpbiBkaXIodHlwZShTdHJ1Y3R1cmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJmcm9tX2FkZHJlc3MiIGluIGRpcih0eXBlKFN0cnVjdHVyZSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImluX2RsbCIgaW4gZGlyKHR5cGUoU3RydWN0dXJlKSkpCiAKICAgICBkZWYgdGVzdF9wb3NpdGlvbmFsX2FyZ3Moc2VsZik6CiAgICAgICAgICMgc2VlIGFsc28gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTUwNDIKQEAgLTM4NSw3ICszODUsNyBAQAogICAgICAgICAjIFdlIGNhbiBhc3NpZ24gYXJyYXlzIG9mIHRoZSBjb3JyZWN0IHR5cGUKICAgICAgICAgcy5hcnJheSA9IChjX2ludCAqIDMpKDEsIDIsIDMpCiAgICAgICAgIGl0ZW1zID0gW3MuYXJyYXlbaV0gZm9yIGkgaW4gcmFuZ2UoMyldCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGl0ZW1zLCBbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbXMsIFsxLCAyLCAzXSkKIAogICAgICAgICAjIFRoZSBmb2xsb3dpbmcgYXJlIGJ1Z3MsIGJ1dCBhcmUgaW5jbHVkZWQgaGVyZSBiZWNhdXNlIHRoZSB1bml0dGVzdHMKICAgICAgICAgIyBhbHNvIGRlc2NyaWJlIHRoZSBjdXJyZW50IGJlaGF2aW91ci4KQEAgLTM5NiwxNCArMzk2LDE0IEBACiAgICAgICAgIHMuYXJyYXlbMF0gPSA0MgogCiAgICAgICAgIGl0ZW1zID0gW3MuYXJyYXlbaV0gZm9yIGkgaW4gcmFuZ2UoMyldCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGl0ZW1zLCBbNDIsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBbNDIsIDIsIDNdKQogCiAgICAgICAgIHMuYXJyYXlbMF0gPSAxCiAKICMjICAgICAgICBzLmFycmF5WzFdID0gNDIKIAogICAgICAgICBpdGVtcyA9IFtzLmFycmF5W2ldIGZvciBpIGluIHJhbmdlKDMpXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChpdGVtcywgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBbMSwgMiwgM10pCiAKICAgICBkZWYgdGVzdF9ub25lX3RvX3BvaW50ZXJfZmllbGRzKHNlbGYpOgogICAgICAgICBjbGFzcyBTKFN0cnVjdHVyZSk6CkBAIC00MTMsNyArNDEzLDcgQEAKICAgICAgICAgcyA9IFMoKQogICAgICAgICBzLnggPSAxMjM0NTY3OAogICAgICAgICBzLnAgPSBOb25lCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMueCwgMTIzNDU2NzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy54LCAxMjM0NTY3OCkKIAogY2xhc3MgVGVzdFJlY3Vyc2l2ZVN0cnVjdHVyZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfY29udGFpbnNfaXRzZWxmKHNlbGYpOgpAQCAtNDIzLDcgKzQyMyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIFJlY3Vyc2l2ZS5fZmllbGRzXyA9IFsoIm5leHQiLCBSZWN1cnNpdmUpXQogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGRldGFpbHM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoIlN0cnVjdHVyZSBvciB1bmlvbiBjYW5ub3QgY29udGFpbiBpdHNlbGYiIGluCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIlN0cnVjdHVyZSBvciB1bmlvbiBjYW5ub3QgY29udGFpbiBpdHNlbGYiIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGRldGFpbHMpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJTdHJ1Y3R1cmUgb3IgdW5pb24gY2Fubm90IGNvbnRhaW4gaXRzZWxmIikKQEAgLTQ0MCw3ICs0NDAsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBTZWNvbmQuX2ZpZWxkc18gPSBbKCJmaXJzdCIsIEZpcnN0KV0KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBkZXRhaWxzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJfZmllbGRzXyBpcyBmaW5hbCIgaW4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiX2ZpZWxkc18gaXMgZmluYWwiIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGRldGFpbHMpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJBdHRyaWJ1dGVFcnJvciBub3QgcmFpc2VkIikKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuYWxpZ25lZF9zdHJ1Y3R1cmVzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5hbGlnbmVkX3N0cnVjdHVyZXMucHkKaW5kZXggODkzNDNiYS4uYmNhY2ZjOCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5hbGlnbmVkX3N0cnVjdHVyZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5hbGlnbmVkX3N0cnVjdHVyZXMucHkKQEAgLTI4LDE4ICsyOCwxOCBAQAogICAgIGRlZiB0ZXN0X25hdGl2ZShzZWxmKToKICAgICAgICAgZm9yIHR5cCBpbiBzdHJ1Y3R1cmVzOgogIyMgICAgICAgICAgICBwcmludCB0eXAudmFsdWUKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cC52YWx1ZS5vZmZzZXQsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cC52YWx1ZS5vZmZzZXQsIDEpCiAgICAgICAgICAgICBvID0gdHlwKCkKICAgICAgICAgICAgIG8udmFsdWUgPSA0Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChvLnZhbHVlLCA0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLnZhbHVlLCA0KQogCiAgICAgZGVmIHRlc3Rfc3dhcHBlZChzZWxmKToKICAgICAgICAgZm9yIHR5cCBpbiBieXRlc3dhcHBlZF9zdHJ1Y3R1cmVzOgogIyMgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCB0eXAudmFsdWUKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cC52YWx1ZS5vZmZzZXQsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cC52YWx1ZS5vZmZzZXQsIDEpCiAgICAgICAgICAgICBvID0gdHlwKCkKICAgICAgICAgICAgIG8udmFsdWUgPSA0Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChvLnZhbHVlLCA0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLnZhbHVlLCA0KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5pY29kZS5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuaWNvZGUucHkKaW5kZXggODhkMDc3My4uNjU1NzQ3OSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5pY29kZS5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF91bmljb2RlLnB5CkBAIC0yMyw1NSArMjMsNTUgQEAKICAgICAgICAgZGVmIHRlc3RfYXNjaWlfc3RyaWN0KHNlbGYpOgogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInN0cmljdCIpCiAgICAgICAgICAgICAjIG5vIGNvbnZlcnNpb25zIHRha2UgcGxhY2Ugd2l0aCB1bmljb2RlIGFyZ3VtZW50cwotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2NzbGVuKHUiYWJjIiksIDMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Y3NsZW4odSJhYlx1MjA3MCIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4odSJhYmMiKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKHUiYWJcdTIwNzAiKSwgMykKICAgICAgICAgICAgICMgc3RyaW5nIGFyZ3MgYXJlIGNvbnZlcnRlZAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2NzbGVuKCJhYmMiKSwgMykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhjdHlwZXMuQXJndW1lbnRFcnJvciwgd2NzbGVuLCAiYWLkIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYmMiKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGN0eXBlcy5Bcmd1bWVudEVycm9yLCB3Y3NsZW4sICJhYuQiKQogCiAgICAgICAgIGRlZiB0ZXN0X2FzY2lpX3JlcGxhY2Uoc2VsZik6CiAgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAicmVwbGFjZSIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Y3NsZW4odSJhYmMiKSwgMykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdjc2xlbih1ImFiXHUyMDcwIiksIDMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2NzbGVuKCJhYuQiKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKHUiYWJjIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbih1ImFiXHUyMDcwIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWJjIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWLkIiksIDMpCiAKICAgICAgICAgZGVmIHRlc3RfYXNjaWlfaWdub3JlKHNlbGYpOgogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgImlnbm9yZSIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Y3NsZW4odSJhYmMiKSwgMykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdjc2xlbih1ImFiXHUyMDcwIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbih1ImFiYyIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4odSJhYlx1MjA3MCIpLCAzKQogICAgICAgICAgICAgIyBpZ25vcmUgZXJyb3IgbW9kZSBza2lwcyBub24tYXNjaWkgY2hhcmFjdGVycwotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2NzbGVuKCJhYmMiKSwgMykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdjc2xlbigi5Pb83yIpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oIuT2/N8iKSwgMCkKIAogICAgICAgICBkZWYgdGVzdF9sYXRpbjFfc3RyaWN0KHNlbGYpOgogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImxhdGluLTEiLCAic3RyaWN0IikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdjc2xlbih1ImFiYyIpLCAzKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2NzbGVuKHUiYWJcdTIwNzAiKSwgMykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdjc2xlbigiYWJjIiksIDMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Y3NsZW4oIuT2/N8iKSwgNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKHUiYWJjIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbih1ImFiXHUyMDcwIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWJjIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigi5Pb83yIpLCA0KQogCiAgICAgICAgIGRlZiB0ZXN0X2J1ZmZlcnMoc2VsZik6CiAgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAic3RyaWN0IikKICAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoImFiYyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oYnVmKSwgMysxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgMysxKQogCiAgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAicmVwbGFjZSIpCiAgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYuT2/CIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbOl0sIHUiYWJcdUZGRkRcdUZGRkRcdUZGRkRcMCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbOjpdLCB1ImFiXHVGRkZEXHVGRkZEXHVGRkZEXDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzo6LTFdLCB1IlwwXHVGRkZEXHVGRkZEXHVGRkZEYmEiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzo6Ml0sIHUiYVx1RkZGRFx1RkZGRCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbNjo1Oi0xXSwgdSIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOl0sIHUiYWJcdUZGRkRcdUZGRkRcdUZGRkRcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sIHUiYWJcdUZGRkRcdUZGRkRcdUZGRkRcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Oi0xXSwgdSJcMFx1RkZGRFx1RkZGRFx1RkZGRGJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6Ml0sIHUiYVx1RkZGRFx1RkZGRCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls2OjU6LTFdLCB1IiIpCiAKICAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJpZ25vcmUiKQogICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlcigiYWLk9vwiKQogICAgICAgICAgICAgIyBpcyB0aGF0IGNvcnJlY3Q/IG5vdCBzdXJlLiAgQnV0IHdpdGggJ2lnbm9yZScsIHlvdSBnZXQgd2hhdCB5b3UgcGF5IGZvci4uCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbOl0sIHUiYWJcMFwwXDBcMCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbOjpdLCB1ImFiXDBcMFwwXDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzo6LTFdLCB1IlwwXDBcMFwwYmEiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzo6Ml0sIHUiYVwwXDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzY6NTotMV0sIHUiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCB1ImFiXDBcMFwwXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjpdLCB1ImFiXDBcMFwwXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjotMV0sIHUiXDBcMFwwXDBiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6OjJdLCB1ImFcMFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzY6NTotMV0sIHUiIikKIAogICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKICAgICBmdW5jID0gY3R5cGVzLkNETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKS5fdGVzdGZ1bmNfcF9wCkBAIC04OSw0MSArODksNDEgQEAKIAogICAgICAgICBkZWYgdGVzdF9hc2NpaV9yZXBsYWNlKHNlbGYpOgogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInN0cmljdCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmdW5jKCJhYmMiKSwgImFiYyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmdW5jKHUiYWJjIiksICJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJhYmMiKSwgImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmModSJhYmMiKSwgImFiYyIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjdHlwZXMuQXJndW1lbnRFcnJvciwgZnVuYywgdSJhYuQiKQogCiAgICAgICAgIGRlZiB0ZXN0X2FzY2lpX2lnbm9yZShzZWxmKToKICAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJpZ25vcmUiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZnVuYygiYWJjIiksICJhYmMiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZnVuYyh1ImFiYyIpLCAiYWJjIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGZ1bmModSLk9vzfIiksICIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJhYmMiKSwgImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmModSJhYmMiKSwgImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmModSLk9vzfIiksICIiKQogCiAgICAgICAgIGRlZiB0ZXN0X2FzY2lpX3JlcGxhY2Uoc2VsZik6CiAgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAicmVwbGFjZSIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmdW5jKCJhYmMiKSwgImFiYyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmdW5jKHUiYWJjIiksICJhYmMiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZnVuYyh1IuT2/N8iKSwgIj8/Pz8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJhYmMiKSwgImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmModSJhYmMiKSwgImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmModSLk9vzfIiksICI/Pz8/IikKIAogICAgICAgICBkZWYgdGVzdF9idWZmZXJzKHNlbGYpOgogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInN0cmljdCIpCiAgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIodSJhYmMiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKGJ1ZiksIDMrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIDMrMSkKIAogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInJlcGxhY2UiKQogICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKHUiYWLk9vwiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzpdLCAiYWI/Pz9cMCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbOjpdLCAiYWI/Pz9cMCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbOjotMV0sICJcMD8/P2JhIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zls6OjJdLCAiYT8/IikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zls2OjU6LTFdLCAiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCAiYWI/Pz9cMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sICJhYj8/P1wwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCAiXDA/Pz9iYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6OjJdLCAiYT8/IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzY6NTotMV0sICIiKQogCiAgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAiaWdub3JlIikKICAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcih1ImFi5Pb8IikKICAgICAgICAgICAgICMgaXMgdGhhdCBjb3JyZWN0PyBub3Qgc3VyZS4gIEJ1dCB3aXRoICdpZ25vcmUnLCB5b3UgZ2V0IHdoYXQgeW91IHBheSBmb3IuLgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzpdLCAiYWJcMFwwXDBcMCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbOjpdLCAiYWJcMFwwXDBcMCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbOjotMV0sICJcMFwwXDBcMGJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCAiYWJcMFwwXDBcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sICJhYlwwXDBcMFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCAiXDBcMFwwXDBiYSIpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF92YWx1ZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF92YWx1ZXMucHkKaW5kZXggN2JhM2UyMS4uNGNiZmQ0YiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFsdWVzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhbHVlcy5weQpAQCAtMTMsOSArMTMsOSBAQAogICAgICAgICBjdGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQogICAgICAgICBhbl9pbnRlZ2VyID0gY19pbnQuaW5fZGxsKGN0ZGxsLCAiYW5faW50ZWdlciIpCiAgICAgICAgIHggPSBhbl9pbnRlZ2VyLnZhbHVlCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHgsIGN0ZGxsLmdldF9hbl9pbnRlZ2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgY3RkbGwuZ2V0X2FuX2ludGVnZXIoKSkKICAgICAgICAgYW5faW50ZWdlci52YWx1ZSAqPSAyCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHgqMiwgY3RkbGwuZ2V0X2FuX2ludGVnZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4KjIsIGN0ZGxsLmdldF9hbl9pbnRlZ2VyKCkpCiAKICAgICBkZWYgdGVzdF91bmRlZmluZWQoc2VsZik6CiAgICAgICAgIGN0ZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCkBAIC0zNCwxMSArMzQsMTEgQEAKICAgICAgICAgICAgICMgZG9jc3RyaW5ncyBhcmUgYWxzbyByZW1vdmVkIGluIHRoZSBsYXR0ZXIgY2FzZS4KICAgICAgICAgICAgIG9wdCA9IGNfaW50LmluX2RsbChweWRsbCwgIlB5X09wdGltaXplRmxhZyIpLnZhbHVlCiAgICAgICAgICAgICBpZiBfX2RlYnVnX186Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwob3B0LCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCAwKQogICAgICAgICAgICAgZWxpZiBWYWx1ZXNUZXN0Q2FzZS5fX2RvY19fIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG9wdCwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdCwgMSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwob3B0LCAyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCAyKQogCiAgICAgICAgIGRlZiB0ZXN0X2Zyb3plbnRhYmxlKHNlbGYpOgogICAgICAgICAgICAgIyBQeXRob24gZXhwb3J0cyBhIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXMgc3ltYm9sLiBUaGlzIGlzIGEKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFsoIl9faGVsbG9fXyIsIDEwNCksICgiX19waGVsbG9fXyIsIC0xMDQpLCAoIl9fcGhlbGxvX18uc3BhbSIsIDEwNCldCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gWygiX19oZWxsb19fIiwgMTAwKSwgKCJfX3BoZWxsb19fIiwgLTEwMCksICgiX19waGVsbG9fXy5zcGFtIiwgMTAwKV0KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGl0ZW1zLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbXMsIGV4cGVjdGVkKQogCiAgICAgICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgX3BvaW50ZXJfdHlwZV9jYWNoZQogICAgICAgICAgICAgZGVsIF9wb2ludGVyX3R5cGVfY2FjaGVbc3RydWN0X2Zyb3plbl0KZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhcnNpemVfc3RydWN0LnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFyc2l6ZV9zdHJ1Y3QucHkKaW5kZXggMDZkMjMyMy4uZjQwOTUwMCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFyc2l6ZV9zdHJ1Y3QucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFyc2l6ZV9zdHJ1Y3QucHkKQEAgLTcsNDQgKzcsNDQgQEAKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiaXRlbSIsIGNfaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICgiYXJyYXkiLCBjX2ludCAqIDEpXQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpICogMikKICAgICAgICAgeCA9IFgoKQogICAgICAgICB4Lml0ZW0gPSA0MgogICAgICAgICB4LmFycmF5WzBdID0gMTAwCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZih4KSwgc2l6ZW9mKGNfaW50KSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHgpLCBzaXplb2YoY19pbnQpICogMikKIAogICAgICAgICAjIG1ha2Ugcm9vbSBmb3Igb25lIGFkZGl0aW9uYWwgaXRlbQogICAgICAgICBuZXdfc2l6ZSA9IHNpemVvZihYKSArIHNpemVvZihjX2ludCkgKiAxCiAgICAgICAgIHJlc2l6ZSh4LCBuZXdfc2l6ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKHgpLCBuZXdfc2l6ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHguaXRlbSwgeC5hcnJheVswXSksICg0MiwgMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoeCksIG5ld19zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4Lml0ZW0sIHguYXJyYXlbMF0pLCAoNDIsIDEwMCkpCiAKICAgICAgICAgIyBtYWtlIHJvb20gZm9yIDEwIGFkZGl0aW9uYWwgaXRlbXMKICAgICAgICAgbmV3X3NpemUgPSBzaXplb2YoWCkgKyBzaXplb2YoY19pbnQpICogOQogICAgICAgICByZXNpemUoeCwgbmV3X3NpemUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZih4KSwgbmV3X3NpemUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCh4Lml0ZW0sIHguYXJyYXlbMF0pLCAoNDIsIDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHgpLCBuZXdfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeC5pdGVtLCB4LmFycmF5WzBdKSwgKDQyLCAxMDApKQogCiAgICAgICAgICMgbWFrZSByb29tIGZvciBvbmUgYWRkaXRpb25hbCBpdGVtCiAgICAgICAgIG5ld19zaXplID0gc2l6ZW9mKFgpICsgc2l6ZW9mKGNfaW50KSAqIDEKICAgICAgICAgcmVzaXplKHgsIG5ld19zaXplKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoeCksIG5ld19zaXplKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoeC5pdGVtLCB4LmFycmF5WzBdKSwgKDQyLCAxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih4KSwgbmV3X3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHguaXRlbSwgeC5hcnJheVswXSksICg0MiwgMTAwKSkKIAogICAgIGRlZiB0ZXN0X2FycmF5X2ludmFsaWRfbGVuZ3RoKHNlbGYpOgogICAgICAgICAjIGNhbm5vdCBjcmVhdGUgYXJyYXlzIHdpdGggbm9uLXBvc2l0aXZlIHNpemUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogY19pbnQgKiAtMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogY19pbnQgKiAtMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBjX2ludCAqIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGNfaW50ICogLTMpCiAKICAgICBkZWYgdGVzdF96ZXJvc2l6ZWRfYXJyYXkoc2VsZik6CiAgICAgICAgIGFycmF5ID0gKGNfaW50ICogMCkoKQogICAgICAgICAjIGFjY2Vzc2luZyBlbGVtZW50cyBvZiB6ZXJvLXNpemVkIGFycmF5cyByYWlzZSBJbmRleEVycm9yCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX3NldGl0ZW1fXywgMCwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEluZGV4RXJyb3IsIGFycmF5Ll9fZ2V0aXRlbV9fLCAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoSW5kZXhFcnJvciwgYXJyYXkuX19zZXRpdGVtX18sIDEsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX2dldGl0ZW1fXywgMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEluZGV4RXJyb3IsIGFycmF5Ll9fc2V0aXRlbV9fLCAtMSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEluZGV4RXJyb3IsIGFycmF5Ll9fZ2V0aXRlbV9fLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYXJyYXkuX19zZXRpdGVtX18sIDAsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGFycmF5Ll9fZ2V0aXRlbV9fLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX3NldGl0ZW1fXywgMSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYXJyYXkuX19nZXRpdGVtX18sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGFycmF5Ll9fc2V0aXRlbV9fLCAtMSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYXJyYXkuX19nZXRpdGVtX18sIC0xKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weQppbmRleCA1MDY3YjYwLi41ZGVkZDlmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weQpAQCAtMTgsNyArMTgsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgSXNXaW5kb3cpCiAKICAgICAgICAgICAgICMgVGhpcyBvbmUgc2hvdWxkIHN1Y2NlZWVkLi4uCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBJc1dpbmRvdygwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgSXNXaW5kb3coMCkpCiAKICAgICAgICAgICAgICMgVmFsdWVFcnJvcjogUHJvY2VkdXJlIHByb2JhYmx5IGNhbGxlZCB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cyAoOCBieXRlcyBpbiBleGNlc3MpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdywgMCwgMCwgMCkKQEAgLTQ5LDEzICs0OSwxMyBAQAogICAgIGNsYXNzIFRlc3RXaW50eXBlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGRlZiB0ZXN0X0hXTkQoc2VsZik6CiAgICAgICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZih3aW50eXBlcy5IV05EKSwgc2l6ZW9mKGNfdm9pZF9wKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLkhXTkQpLCBzaXplb2YoY192b2lkX3ApKQogCiAgICAgICAgIGRlZiB0ZXN0X1BBUkFNKHNlbGYpOgogICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2Yod2ludHlwZXMuV1BBUkFNKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLldQQVJBTSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY192b2lkX3ApKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKHdpbnR5cGVzLkxQQVJBTSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih3aW50eXBlcy5MUEFSQU0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNfdm9pZF9wKSkKIAogICAgICAgICBkZWYgdGVzdF9DT01FcnJvcihzZWxmKToKQEAgLTg0LDcgKzg0LDcgQEAKIAogICAgICAgICBwdCA9IFBPSU5UKDEwLCAxMCkKICAgICAgICAgcmVjdCA9IFJFQ1QoMCwgMCwgMjAsIDIwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgxLCBkbGwuUG9pbnRJblJlY3QoYnlyZWYocmVjdCksIHB0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBkbGwuUG9pbnRJblJlY3QoYnlyZWYocmVjdCksIHB0KSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdXRpbC5weSBiL0xpYi9jdHlwZXMvdXRpbC5weQppbmRleCBlMmEzMWM4Li41MmIzNTIwIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3V0aWwucHkKKysrIGIvTGliL2N0eXBlcy91dGlsLnB5CkBAIC05Niw4ICs5NiwxMCBAQAogICAgICAgICAgICAgICAnJENDIC1XbCwtdCAtbyAnICsgY2NvdXQgKyAnIDI+JjEgLWwnICsgbmFtZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3MucG9wZW4oY21kKQotICAgICAgICAgICAgdHJhY2UgPSBmLnJlYWQoKQotICAgICAgICAgICAgcnYgPSBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0cmFjZSA9IGYucmVhZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGNjb3V0KQpAQCAtMTE4LDcgKzEyMCwxMiBAQAogICAgICAgICAgICAgaWYgbm90IGY6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGNtZCA9ICIvdXNyL2Njcy9iaW4vZHVtcCAtTHB2IDI+L2Rldi9udWxsICIgKyBmCi0gICAgICAgICAgICByZXMgPSByZS5zZWFyY2gocidcWy4qXF1cc1NPTkFNRVxzKyhbXlxzXSspJywgb3MucG9wZW4oY21kKS5yZWFkKCkpCisgICAgICAgICAgICBmID0gb3MucG9wZW4oY21kKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChyJ1xbLipcXVxzU09OQU1FXHMrKFteXHNdKyknLCBkYXRhKQogICAgICAgICAgICAgaWYgbm90IHJlczoKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHJlcy5ncm91cCgxKQpAQCAtMTM0LDcgKzE0MSwxMiBAQAogICAgICAgICAgICAgcnYgPSBmLmNsb3NlKCkKICAgICAgICAgICAgIGlmIHJ2ID09IDEwOgogICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IsICdvYmpkdW1wIGNvbW1hbmQgbm90IGZvdW5kJwotICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKHInXHNTT05BTUVccysoW15cc10rKScsIG9zLnBvcGVuKGNtZCkucmVhZCgpKQorICAgICAgICAgICAgZiA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICByZXMgPSByZS5zZWFyY2gocidcc1NPTkFNRVxzKyhbXlxzXSspJywgZGF0YSkKICAgICAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIHJldHVybiByZXMuZ3JvdXAoMSkKQEAgLTE1Nyw4ICsxNjksMTIgQEAKICAgICAgICAgZGVmIGZpbmRfbGlicmFyeShuYW1lKToKICAgICAgICAgICAgIGVuYW1lID0gcmUuZXNjYXBlKG5hbWUpCiAgICAgICAgICAgICBleHByID0gcic6LWwlc1wuXFMrID0+IFxTKi8obGliJXNcLlxTKyknICUgKGVuYW1lLCBlbmFtZSkKLSAgICAgICAgICAgIHJlcyA9IHJlLmZpbmRhbGwoZXhwciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucG9wZW4oJy9zYmluL2xkY29uZmlnIC1yIDI+L2Rldi9udWxsJykucmVhZCgpKQorICAgICAgICAgICAgZiA9IG9zLnBvcGVuKCcvc2Jpbi9sZGNvbmZpZyAtciAyPi9kZXYvbnVsbCcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgcmVzID0gcmUuZmluZGFsbChleHByLCBkYXRhKQogICAgICAgICAgICAgaWYgbm90IHJlczoKICAgICAgICAgICAgICAgICByZXR1cm4gX2dldF9zb25hbWUoX2ZpbmRMaWJfZ2NjKG5hbWUpKQogICAgICAgICAgICAgcmVzLnNvcnQoY21wPSBsYW1iZGEgeCx5OiBjbXAoX251bV92ZXJzaW9uKHgpLCBfbnVtX3ZlcnNpb24oeSkpKQpAQCAtMTY5LDEyICsxODUsMjEgQEAKICAgICAgICAgZGVmIF9maW5kTGliX2xkY29uZmlnKG5hbWUpOgogICAgICAgICAgICAgIyBYWFggYXNzdW1pbmcgR0xJQkMncyBsZGNvbmZpZyAod2l0aCBvcHRpb24gLXApCiAgICAgICAgICAgICBleHByID0gcicvW15cKFwpXHNdKmxpYiVzXC5bXlwoXClcc10qJyAlIHJlLmVzY2FwZShuYW1lKQotICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKGV4cHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucG9wZW4oJy9zYmluL2xkY29uZmlnIC1wIDI+L2Rldi9udWxsJykucmVhZCgpKQorICAgICAgICAgICAgZiA9IG9zLnBvcGVuKCdMQ19BTEw9QyBMQU5HPUMgL3NiaW4vbGRjb25maWcgLXAgMj4vZGV2L251bGwnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChleHByLCBkYXRhKQogICAgICAgICAgICAgaWYgbm90IHJlczoKICAgICAgICAgICAgICAgICAjIEhtLCB0aGlzIHdvcmtzIG9ubHkgZm9yIGxpYnMgbmVlZGVkIGJ5IHRoZSBweXRob24gZXhlY3V0YWJsZS4KICAgICAgICAgICAgICAgICBjbWQgPSAnbGRkICVzIDI+L2Rldi9udWxsJyAlIHN5cy5leGVjdXRhYmxlCi0gICAgICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKGV4cHIsIG9zLnBvcGVuKGNtZCkucmVhZCgpKQorICAgICAgICAgICAgICAgIGYgPSBvcy5wb3BlbihjbWQpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByZXMgPSByZS5zZWFyY2goZXhwciwgZGF0YSkKICAgICAgICAgICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHJlcy5ncm91cCgwKQpAQCAtMTk3LDggKzIyMiwxMiBAQAogICAgICAgICAgICAgIyBYWFggYXNzdW1pbmcgR0xJQkMncyBsZGNvbmZpZyAod2l0aCBvcHRpb24gLXApCiAgICAgICAgICAgICBleHByID0gcicoXFMrKVxzK1woKCVzKD86LCBPUyBBQkk6W15cKV0qKT8pXClbXi9dKigvW15cKFwpXHNdKmxpYiVzXC5bXlwoXClcc10qKScgXAogICAgICAgICAgICAgICAgICAgICUgKGFiaV90eXBlLCByZS5lc2NhcGUobmFtZSkpCi0gICAgICAgICAgICByZXMgPSByZS5zZWFyY2goZXhwciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wb3BlbignTEFORz1DIC9zYmluL2xkY29uZmlnIC1wIDI+L2Rldi9udWxsJykucmVhZCgpKQorICAgICAgICAgICAgZiA9IG9zLnBvcGVuKCcvc2Jpbi9sZGNvbmZpZyAtcCAyPi9kZXYvbnVsbCcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKGV4cHIsIGRhdGEpCiAgICAgICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICByZXR1cm4gcmVzLmdyb3VwKDEpCmRpZmYgLS1naXQgYS9MaWIvY3Vyc2VzL2hhc19rZXkucHkgYi9MaWIvY3Vyc2VzL2hhc19rZXkucHkKaW5kZXggNjBiN2JlOS4uMWRkNWEzYiAxMDA2NDQKLS0tIGEvTGliL2N1cnNlcy9oYXNfa2V5LnB5CisrKyBiL0xpYi9jdXJzZXMvaGFzX2tleS5weQpAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAgICAgIEwgPSBbXQogICAgICAgICBfY3Vyc2VzLmluaXRzY3IoKQogICAgICAgICBmb3Iga2V5IGluIF9jYXBhYmlsaXR5X25hbWVzLmtleXMoKToKLSAgICAgICAgICAgIHN5c3RlbSA9IF9jdXJzZXMuaGFzX2tleShrZXkpCisgICAgICAgICAgICBzeXN0ZW0gPSBrZXkgaW4gX2N1cnNlcwogICAgICAgICAgICAgcHl0aG9uID0gaGFzX2tleShrZXkpCiAgICAgICAgICAgICBpZiBzeXN0ZW0gIT0gcHl0aG9uOgogICAgICAgICAgICAgICAgIEwuYXBwZW5kKCAnTWlzbWF0Y2ggZm9yIGtleSAlcywgc3lzdGVtPSVpLCBQeXRob249JWknCmRpZmYgLS1naXQgYS9MaWIvZGJoYXNoLnB5IGIvTGliL2RiaGFzaC5weQppbmRleCA3N2E4NzhlLi5hNWQ1Mzc1IDEwMDY0NAotLS0gYS9MaWIvZGJoYXNoLnB5CisrKyBiL0xpYi9kYmhhc2gucHkKQEAgLTEsOSArMSw4IEBACiAiIiJQcm92aWRlIGEgKGcpZGJtLWNvbXBhdGlibGUgaW50ZXJmYWNlIHRvIGJzZGRiLmhhc2hvcGVuLiIiIgogCiBpbXBvcnQgc3lzCi1pZiBzeXMucHkza3dhcm5pbmc6Ci0gICAgaW1wb3J0IHdhcm5pbmdzCi0gICAgd2FybmluZ3Mud2FybnB5M2soImluIDMueCwgdGhlIGRiaGFzaCBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKK2ltcG9ydCB3YXJuaW5ncword2FybmluZ3Mud2FybnB5M2soImluIDMueCwgdGhlIGRiaGFzaCBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCIsIHN0YWNrbGV2ZWw9MikKIHRyeToKICAgICBpbXBvcnQgYnNkZGIKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKZGlmZiAtLWdpdCBhL0xpYi9kZWNpbWFsLnB5IGIvTGliL2RlY2ltYWwucHkKaW5kZXggYjNiZGM3Zi4uZmViYTNkNyAxMDA2NDQKLS0tIGEvTGliL2RlY2ltYWwucHkKKysrIGIvTGliL2RlY2ltYWwucHkKQEAgLTEzNCw3ICsxMzQsMTAgQEAKICAgICAnc2V0Y29udGV4dCcsICdnZXRjb250ZXh0JywgJ2xvY2FsY29udGV4dCcKIF0KIAorX192ZXJzaW9uX18gPSAnMS43MCcgICAgIyBIaWdoZXN0IHZlcnNpb24gb2YgdGhlIHNwZWMgdGhpcyBjb21wbGllcyB3aXRoCisKIGltcG9ydCBjb3B5IGFzIF9jb3B5CitpbXBvcnQgbWF0aCBhcyBfbWF0aAogaW1wb3J0IG51bWJlcnMgYXMgX251bWJlcnMKIAogdHJ5OgpAQCAtNjQ1LDExICs2NDgsNTUgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCBmbG9hdCB0byBEZWNpbWFsLiAgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpcnN0IGNvbnZlcnQgdGhlIGZsb2F0IHRvIGEgc3RyaW5nIikKKyAgICAgICAgICAgIHZhbHVlID0gRGVjaW1hbC5mcm9tX2Zsb2F0KHZhbHVlKQorICAgICAgICAgICAgc2VsZi5fZXhwICA9IHZhbHVlLl9leHAKKyAgICAgICAgICAgIHNlbGYuX3NpZ24gPSB2YWx1ZS5fc2lnbgorICAgICAgICAgICAgc2VsZi5faW50ICA9IHZhbHVlLl9pbnQKKyAgICAgICAgICAgIHNlbGYuX2lzX3NwZWNpYWwgID0gdmFsdWUuX2lzX3NwZWNpYWwKKyAgICAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byBEZWNpbWFsIiAlIHZhbHVlKQogCisgICAgIyBAY2xhc3NtZXRob2QsIGJ1dCBAZGVjb3JhdG9yIGlzIG5vdCB2YWxpZCBQeXRob24gMi4zIHN5bnRheCwgc28KKyAgICAjIGRvbid0IHVzZSBpdCAoc2VlIG5vdGVzIG9uIFB5Mi4zIGNvbXBhdGliaWxpdHkgYXQgdG9wIG9mIGZpbGUpCisgICAgZGVmIGZyb21fZmxvYXQoY2xzLCBmKToKKyAgICAgICAgIiIiQ29udmVydHMgYSBmbG9hdCB0byBhIGRlY2ltYWwgbnVtYmVyLCBleGFjdGx5LgorCisgICAgICAgIE5vdGUgdGhhdCBEZWNpbWFsLmZyb21fZmxvYXQoMC4xKSBpcyBub3QgdGhlIHNhbWUgYXMgRGVjaW1hbCgnMC4xJykuCisgICAgICAgIFNpbmNlIDAuMSBpcyBub3QgZXhhY3RseSByZXByZXNlbnRhYmxlIGluIGJpbmFyeSBmbG9hdGluZyBwb2ludCwgdGhlCisgICAgICAgIHZhbHVlIGlzIHN0b3JlZCBhcyB0aGUgbmVhcmVzdCByZXByZXNlbnRhYmxlIHZhbHVlIHdoaWNoIGlzCisgICAgICAgIDB4MS45OTk5OTk5OTk5OTlhcC00LiAgVGhlIGV4YWN0IGVxdWl2YWxlbnQgb2YgdGhlIHZhbHVlIGluIGRlY2ltYWwKKyAgICAgICAgaXMgMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1LgorCisgICAgICAgID4+PiBEZWNpbWFsLmZyb21fZmxvYXQoMC4xKQorICAgICAgICBEZWNpbWFsKCcwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUnKQorICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCduYW4nKSkKKyAgICAgICAgRGVjaW1hbCgnTmFOJykKKyAgICAgICAgPj4+IERlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnaW5mJykpCisgICAgICAgIERlY2ltYWwoJ0luZmluaXR5JykKKyAgICAgICAgPj4+IERlY2ltYWwuZnJvbV9mbG9hdCgtZmxvYXQoJ2luZicpKQorICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQorICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KC0wLjApCisgICAgICAgIERlY2ltYWwoJy0wJykKKworICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmLCAoaW50LCBsb25nKSk6ICAgICAgICAjIGhhbmRsZSBpbnRlZ2VyIGlucHV0cworICAgICAgICAgICAgcmV0dXJuIGNscyhmKQorICAgICAgICBpZiBfbWF0aC5pc2luZihmKSBvciBfbWF0aC5pc25hbihmKTogICMgcmFpc2VzIFR5cGVFcnJvciBpZiBub3QgYSBmbG9hdAorICAgICAgICAgICAgcmV0dXJuIGNscyhyZXByKGYpKQorICAgICAgICBpZiBfbWF0aC5jb3B5c2lnbigxLjAsIGYpID09IDEuMDoKKyAgICAgICAgICAgIHNpZ24gPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaWduID0gMQorICAgICAgICBuLCBkID0gYWJzKGYpLmFzX2ludGVnZXJfcmF0aW8oKQorICAgICAgICBrID0gZC5iaXRfbGVuZ3RoKCkgLSAxCisgICAgICAgIHJlc3VsdCA9IF9kZWNfZnJvbV90cmlwbGUoc2lnbiwgc3RyKG4qNSoqayksIC1rKQorICAgICAgICBpZiBjbHMgaXMgRGVjaW1hbDoKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjbHMocmVzdWx0KQorICAgIGZyb21fZmxvYXQgPSBjbGFzc21ldGhvZChmcm9tX2Zsb2F0KQorCiAgICAgZGVmIF9pc25hbihzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBudW1iZXIgaXMgbm90IGFjdHVhbGx5IG9uZS4KIApAQCAtODAyLDggKzg0OSwxMSBAQAogICAgICMgc3ViamVjdCBvZiB3aGF0IHNob3VsZCBoYXBwZW4gZm9yIGEgY29tcGFyaXNvbiBpbnZvbHZpbmcgYSBOYU4uCiAgICAgIyBXZSB0YWtlIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2g6CiAgICAgIwotICAgICMgICA9PSBjb21wYXJpc29ucyBpbnZvbHZpbmcgYSBOYU4gYWx3YXlzIHJldHVybiBGYWxzZQotICAgICMgICAhPSBjb21wYXJpc29ucyBpbnZvbHZpbmcgYSBOYU4gYWx3YXlzIHJldHVybiBUcnVlCisgICAgIyAgID09IGNvbXBhcmlzb25zIGludm9sdmluZyBhIHF1aWV0IE5hTiBhbHdheXMgcmV0dXJuIEZhbHNlCisgICAgIyAgICE9IGNvbXBhcmlzb25zIGludm9sdmluZyBhIHF1aWV0IE5hTiBhbHdheXMgcmV0dXJuIFRydWUKKyAgICAjICAgPT0gb3IgIT0gY29tcGFyaXNvbnMgaW52b2x2aW5nIGEgc2lnbmFsaW5nIE5hTiBzaWduYWwKKyAgICAjICAgICAgSW52YWxpZE9wZXJhdGlvbiwgYW5kIHJldHVybiBGYWxzZSBvciBUcnVlIGFzIGFib3ZlIGlmIHRoZQorICAgICMgICAgICBJbnZhbGlkT3BlcmF0aW9uIGlzIG5vdCB0cmFwcGVkLgogICAgICMgICA8LCA+LCA8PSBhbmQgPj0gY29tcGFyaXNvbnMgaW52b2x2aW5nIGEgKHF1aWV0IG9yIHNpZ25hbGluZykKICAgICAjICAgICAgTmFOIHNpZ25hbCBJbnZhbGlkT3BlcmF0aW9uLCBhbmQgcmV0dXJuIEZhbHNlIGlmIHRoZQogICAgICMgICAgICBJbnZhbGlkT3BlcmF0aW9uIGlzIG5vdCB0cmFwcGVkLgpAQCAtODExLDI0ICs4NjEsMjQgQEAKICAgICAjIFRoaXMgYmVoYXZpb3IgaXMgZGVzaWduZWQgdG8gY29uZm9ybSBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlIHRvCiAgICAgIyB0aGF0IHNwZWNpZmllZCBieSBJRUVFIDc1NC4KIAotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIGFsbG93X2Zsb2F0PVRydWUpCiAgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgogICAgICAgICAgICAgcmV0dXJuIG90aGVyCi0gICAgICAgIGlmIHNlbGYuaXNfbmFuKCkgb3Igb3RoZXIuaXNfbmFuKCk6CisgICAgICAgIGlmIHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpID09IDAKIAotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQorICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIGFsbG93X2Zsb2F0PVRydWUpCiAgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgogICAgICAgICAgICAgcmV0dXJuIG90aGVyCi0gICAgICAgIGlmIHNlbGYuaXNfbmFuKCkgb3Igb3RoZXIuaXNfbmFuKCk6CisgICAgICAgIGlmIHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgIT0gMAogCiAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgYWxsb3dfZmxvYXQ9VHJ1ZSkKICAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CiAgICAgICAgICAgICByZXR1cm4gb3RoZXIKICAgICAgICAgYW5zID0gc2VsZi5fY29tcGFyZV9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQpAQCAtODM3LDcgKzg4Nyw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDwgMAogCiAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgYWxsb3dfZmxvYXQ9VHJ1ZSkKICAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CiAgICAgICAgICAgICByZXR1cm4gb3RoZXIKICAgICAgICAgYW5zID0gc2VsZi5fY29tcGFyZV9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQpAQCAtODQ2LDcgKzg5Niw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDw9IDAKIAogICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIGFsbG93X2Zsb2F0PVRydWUpCiAgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgogICAgICAgICAgICAgcmV0dXJuIG90aGVyCiAgICAgICAgIGFucyA9IHNlbGYuX2NvbXBhcmVfY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKQEAgLTg1NSw3ICs5MDUsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA+IDAKIAogICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIGFsbG93X2Zsb2F0PVRydWUpCiAgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgogICAgICAgICAgICAgcmV0dXJuIG90aGVyCiAgICAgICAgIGFucyA9IHNlbGYuX2NvbXBhcmVfY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKQEAgLTg4OSwxMiArOTM5LDM0IEBACiAgICAgICAgICMgVGhlIGhhc2ggb2YgYSBub25zcGVjaWFsIG5vbmludGVnZXIgRGVjaW1hbCBtdXN0IGRlcGVuZCBvbmx5CiAgICAgICAgICMgb24gdGhlIHZhbHVlIG9mIHRoYXQgRGVjaW1hbCwgYW5kIG5vdCBvbiBpdHMgcmVwcmVzZW50YXRpb24uCiAgICAgICAgICMgRm9yIGV4YW1wbGU6IGhhc2goRGVjaW1hbCgnMTAwRS0xJykpID09IGhhc2goRGVjaW1hbCgnMTAnKSkuCisKKyAgICAgICAgIyBFcXVhbGl0eSBjb21wYXJpc29ucyBpbnZvbHZpbmcgc2lnbmFsaW5nIG5hbnMgY2FuIHJhaXNlIGFuCisgICAgICAgICMgZXhjZXB0aW9uOyBzaW5jZSBlcXVhbGl0eSBjaGVja3MgYXJlIGltcGxpY2l0bHkgYW5kCisgICAgICAgICMgdW5wcmVkaWN0YWJseSB1c2VkIHdoZW4gY2hlY2tpbmcgc2V0IGFuZCBkaWN0IG1lbWJlcnNoaXAsIHdlCisgICAgICAgICMgcHJldmVudCBzaWduYWxpbmcgbmFucyBmcm9tIGJlaW5nIHVzZWQgYXMgc2V0IGVsZW1lbnRzIG9yCisgICAgICAgICMgZGljdCBrZXlzIGJ5IG1ha2luZyBfX2hhc2hfXyByYWlzZSBhbiBleGNlcHRpb24uCiAgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICBpZiBzZWxmLl9pc25hbigpOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGhhc2ggYSBOYU4gdmFsdWUuJykKLSAgICAgICAgICAgIHJldHVybiBoYXNoKHN0cihzZWxmKSkKLSAgICAgICAgaWYgbm90IHNlbGY6Ci0gICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgaWYgc2VsZi5pc19zbmFuKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdDYW5ub3QgaGFzaCBhIHNpZ25hbGluZyBOYU4gdmFsdWUuJykKKyAgICAgICAgICAgIGVsaWYgc2VsZi5pc19uYW4oKToKKyAgICAgICAgICAgICAgICAjIDAgdG8gbWF0Y2ggaGFzaChmbG9hdCgnbmFuJykpCisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyB2YWx1ZXMgY2hvc2VuIHRvIG1hdGNoIGhhc2goZmxvYXQoJ2luZicpKSBhbmQKKyAgICAgICAgICAgICAgICAjIGhhc2goZmxvYXQoJy1pbmYnKSkuCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2lnbjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0yNzE4MjgKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzE0MTU5CisKKyAgICAgICAgIyBJbiBQeXRob24gMi43LCB3ZSdyZSBhbGxvd2luZyBjb21wYXJpc29ucyAoYnV0IG5vdAorICAgICAgICAjIGFyaXRobWV0aWMgb3BlcmF0aW9ucykgYmV0d2VlbiBmbG9hdHMgYW5kIERlY2ltYWxzOyAgc28gaWYKKyAgICAgICAgIyBhIERlY2ltYWwgaW5zdGFuY2UgaXMgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGEgZmxvYXQgdGhlbgorICAgICAgICAjIGl0cyBoYXNoIHNob3VsZCBtYXRjaCB0aGF0IG9mIHRoZSBmbG9hdC4KKyAgICAgICAgc2VsZl9hc19mbG9hdCA9IGZsb2F0KHNlbGYpCisgICAgICAgIGlmIERlY2ltYWwuZnJvbV9mbG9hdChzZWxmX2FzX2Zsb2F0KSA9PSBzZWxmOgorICAgICAgICAgICAgcmV0dXJuIGhhc2goc2VsZl9hc19mbG9hdCkKKwogICAgICAgICBpZiBzZWxmLl9pc2ludGVnZXIoKToKICAgICAgICAgICAgIG9wID0gX1dvcmtSZXAoc2VsZi50b19pbnRlZ3JhbF92YWx1ZSgpKQogICAgICAgICAgICAgIyB0byBtYWtlIGNvbXB1dGF0aW9uIGZlYXNpYmxlIGZvciBEZWNpbWFscyB3aXRoIGxhcmdlCkBAIC0yODEzLDYgKzI4ODUsNyBAQAogCiAgICAgZGVmIGNvcHlfc2lnbihzZWxmLCBvdGhlcik6CiAgICAgICAgICIiIlJldHVybnMgc2VsZiB3aXRoIHRoZSBzaWduIG9mIG90aGVyLiIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKG90aGVyLl9zaWduLCBzZWxmLl9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cCwgc2VsZi5faXNfc3BlY2lhbCkKIApAQCAtMzUxNywyNyArMzU5MCwyNSBAQAogICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoc3RyKHNlbGYpLCkpCiAKICAgICBkZWYgX19jb3B5X18oc2VsZik6Ci0gICAgICAgIGlmIHR5cGUoc2VsZikgPT0gRGVjaW1hbDoKKyAgICAgICAgaWYgdHlwZShzZWxmKSBpcyBEZWNpbWFsOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYgICAgICMgSSdtIGltbXV0YWJsZTsgdGhlcmVmb3JlIEkgYW0gbXkgb3duIGNsb25lCiAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzdHIoc2VsZikpCiAKICAgICBkZWYgX19kZWVwY29weV9fKHNlbGYsIG1lbW8pOgotICAgICAgICBpZiB0eXBlKHNlbGYpID09IERlY2ltYWw6CisgICAgICAgIGlmIHR5cGUoc2VsZikgaXMgRGVjaW1hbDoKICAgICAgICAgICAgIHJldHVybiBzZWxmICAgICAjIE15IGNvbXBvbmVudHMgYXJlIGFsc28gaW1tdXRhYmxlCiAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzdHIoc2VsZikpCiAKLSAgICAjIFBFUCAzMTAxIHN1cHBvcnQuICBTZWUgYWxzbyBfcGFyc2VfZm9ybWF0X3NwZWNpZmllciBhbmQgX2Zvcm1hdF9hbGlnbgotICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWNpZmllciwgY29udGV4dD1Ob25lKToKKyAgICAjIFBFUCAzMTAxIHN1cHBvcnQuICB0aGUgX2xvY2FsZWNvbnYga2V5d29yZCBhcmd1bWVudCBzaG91bGQgYmUKKyAgICAjIGNvbnNpZGVyZWQgcHJpdmF0ZTogaXQncyBwcm92aWRlZCBmb3IgZWFzZSBvZiB0ZXN0aW5nIG9ubHkuCisgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgc3BlY2lmaWVyLCBjb250ZXh0PU5vbmUsIF9sb2NhbGVjb252PU5vbmUpOgogICAgICAgICAiIiJGb3JtYXQgYSBEZWNpbWFsIGluc3RhbmNlIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gc3BlY2lmaWVyLgogCiAgICAgICAgIFRoZSBzcGVjaWZpZXIgc2hvdWxkIGJlIGEgc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciwgd2l0aCB0aGUKICAgICAgICAgZm9ybSBkZXNjcmliZWQgaW4gUEVQIDMxMDEuICBGb3JtYXR0aW5nIHR5cGVzICdlJywgJ0UnLCAnZicsCi0gICAgICAgICdGJywgJ2cnLCAnRycsIGFuZCAnJScgYXJlIHN1cHBvcnRlZC4gIElmIHRoZSBmb3JtYXR0aW5nIHR5cGUKLSAgICAgICAgaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0byAnZycgb3IgJ0cnLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlCi0gICAgICAgIG9mIGNvbnRleHQuY2FwaXRhbHMuCi0KLSAgICAgICAgQXQgdGhpcyB0aW1lIHRoZSAnbicgZm9ybWF0IHNwZWNpZmllciB0eXBlICh3aGljaCBpcyBzdXBwb3NlZAotICAgICAgICB0byB1c2UgdGhlIGN1cnJlbnQgbG9jYWxlKSBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAgICAnRicsICdnJywgJ0cnLCAnbicgYW5kICclJyBhcmUgc3VwcG9ydGVkLiAgSWYgdGhlIGZvcm1hdHRpbmcKKyAgICAgICAgdHlwZSBpcyBvbWl0dGVkIGl0IGRlZmF1bHRzIHRvICdnJyBvciAnRycsIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgdmFsdWUgb2YgY29udGV4dC5jYXBpdGFscy4KICAgICAgICAgIiIiCiAKICAgICAgICAgIyBOb3RlOiBQRVAgMzEwMSBzYXlzIHRoYXQgaWYgdGhlIHR5cGUgaXMgbm90IHByZXNlbnQgdGhlbgpAQCAtMzU0OCwxNyArMzYxOSwyMCBAQAogICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CiAgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCiAKLSAgICAgICAgc3BlYyA9IF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyKHNwZWNpZmllcikKKyAgICAgICAgc3BlYyA9IF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyKHNwZWNpZmllciwgX2xvY2FsZWNvbnY9X2xvY2FsZWNvbnYpCiAKLSAgICAgICAgIyBzcGVjaWFsIHZhbHVlcyBkb24ndCBjYXJlIGFib3V0IHRoZSB0eXBlIG9yIHByZWNpc2lvbi4uLgorICAgICAgICAjIHNwZWNpYWwgdmFsdWVzIGRvbid0IGNhcmUgYWJvdXQgdGhlIHR5cGUgb3IgcHJlY2lzaW9uCiAgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICByZXR1cm4gX2Zvcm1hdF9hbGlnbihzdHIoc2VsZiksIHNwZWMpCisgICAgICAgICAgICBzaWduID0gX2Zvcm1hdF9zaWduKHNlbGYuX3NpZ24sIHNwZWMpCisgICAgICAgICAgICBib2R5ID0gc3RyKHNlbGYuY29weV9hYnMoKSkKKyAgICAgICAgICAgIHJldHVybiBfZm9ybWF0X2FsaWduKHNpZ24sIGJvZHksIHNwZWMpCiAKICAgICAgICAgIyBhIHR5cGUgb2YgTm9uZSBkZWZhdWx0cyB0byAnZycgb3IgJ0cnLCBkZXBlbmRpbmcgb24gY29udGV4dAotICAgICAgICAjIGlmIHR5cGUgaXMgJyUnLCBhZGp1c3QgZXhwb25lbnQgb2Ygc2VsZiBhY2NvcmRpbmdseQogICAgICAgICBpZiBzcGVjWyd0eXBlJ10gaXMgTm9uZToKICAgICAgICAgICAgIHNwZWNbJ3R5cGUnXSA9IFsnZycsICdHJ11bY29udGV4dC5jYXBpdGFsc10KLSAgICAgICAgZWxpZiBzcGVjWyd0eXBlJ10gPT0gJyUnOgorCisgICAgICAgICMgaWYgdHlwZSBpcyAnJScsIGFkanVzdCBleHBvbmVudCBvZiBzZWxmIGFjY29yZGluZ2x5CisgICAgICAgIGlmIHNwZWNbJ3R5cGUnXSA9PSAnJSc6CiAgICAgICAgICAgICBzZWxmID0gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCBzZWxmLl9pbnQsIHNlbGYuX2V4cCsyKQogCiAgICAgICAgICMgcm91bmQgaWYgbmVjZXNzYXJ5LCB0YWtpbmcgcm91bmRpbmcgbW9kZSBmcm9tIHRoZSBjb250ZXh0CkBAIC0zNTY3LDUzICszNjQxLDQ1IEBACiAgICAgICAgIGlmIHByZWNpc2lvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGlmIHNwZWNbJ3R5cGUnXSBpbiAnZUUnOgogICAgICAgICAgICAgICAgIHNlbGYgPSBzZWxmLl9yb3VuZChwcmVjaXNpb24rMSwgcm91bmRpbmcpCi0gICAgICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZ0cnOgotICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLl9pbnQpID4gcHJlY2lzaW9uOgotICAgICAgICAgICAgICAgICAgICBzZWxmID0gc2VsZi5fcm91bmQocHJlY2lzaW9uLCByb3VuZGluZykKICAgICAgICAgICAgIGVsaWYgc3BlY1sndHlwZSddIGluICdmRiUnOgogICAgICAgICAgICAgICAgIHNlbGYgPSBzZWxmLl9yZXNjYWxlKC1wcmVjaXNpb24sIHJvdW5kaW5nKQorICAgICAgICAgICAgZWxpZiBzcGVjWyd0eXBlJ10gaW4gJ2dHJyBhbmQgbGVuKHNlbGYuX2ludCkgPiBwcmVjaXNpb246CisgICAgICAgICAgICAgICAgc2VsZiA9IHNlbGYuX3JvdW5kKHByZWNpc2lvbiwgcm91bmRpbmcpCiAgICAgICAgICMgc3BlY2lhbCBjYXNlOiB6ZXJvcyB3aXRoIGEgcG9zaXRpdmUgZXhwb25lbnQgY2FuJ3QgYmUKICAgICAgICAgIyByZXByZXNlbnRlZCBpbiBmaXhlZCBwb2ludDsgcmVzY2FsZSB0aGVtIHRvIDBlMC4KLSAgICAgICAgZWxpZiBub3Qgc2VsZiBhbmQgc2VsZi5fZXhwID4gMCBhbmQgc3BlY1sndHlwZSddIGluICdmRiUnOgorICAgICAgICBpZiBub3Qgc2VsZiBhbmQgc2VsZi5fZXhwID4gMCBhbmQgc3BlY1sndHlwZSddIGluICdmRiUnOgogICAgICAgICAgICAgc2VsZiA9IHNlbGYuX3Jlc2NhbGUoMCwgcm91bmRpbmcpCiAKICAgICAgICAgIyBmaWd1cmUgb3V0IHBsYWNlbWVudCBvZiB0aGUgZGVjaW1hbCBwb2ludAogICAgICAgICBsZWZ0ZGlnaXRzID0gc2VsZi5fZXhwICsgbGVuKHNlbGYuX2ludCkKLSAgICAgICAgaWYgc3BlY1sndHlwZSddIGluICdmRiUnOgotICAgICAgICAgICAgZG90cGxhY2UgPSBsZWZ0ZGlnaXRzCi0gICAgICAgIGVsaWYgc3BlY1sndHlwZSddIGluICdlRSc6CisgICAgICAgIGlmIHNwZWNbJ3R5cGUnXSBpbiAnZUUnOgogICAgICAgICAgICAgaWYgbm90IHNlbGYgYW5kIHByZWNpc2lvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBkb3RwbGFjZSA9IDEgLSBwcmVjaXNpb24KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZG90cGxhY2UgPSAxCisgICAgICAgIGVsaWYgc3BlY1sndHlwZSddIGluICdmRiUnOgorICAgICAgICAgICAgZG90cGxhY2UgPSBsZWZ0ZGlnaXRzCiAgICAgICAgIGVsaWYgc3BlY1sndHlwZSddIGluICdnRyc6CiAgICAgICAgICAgICBpZiBzZWxmLl9leHAgPD0gMCBhbmQgbGVmdGRpZ2l0cyA+IC02OgogICAgICAgICAgICAgICAgIGRvdHBsYWNlID0gbGVmdGRpZ2l0cwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBkb3RwbGFjZSA9IDEKIAotICAgICAgICAjIGZpZ3VyZSBvdXQgbWFpbiBwYXJ0IG9mIG51bWVyaWMgc3RyaW5nLi4uCi0gICAgICAgIGlmIGRvdHBsYWNlIDw9IDA6Ci0gICAgICAgICAgICBudW0gPSAnMC4nICsgJzAnKigtZG90cGxhY2UpICsgc2VsZi5faW50Ci0gICAgICAgIGVsaWYgZG90cGxhY2UgPj0gbGVuKHNlbGYuX2ludCk6Ci0gICAgICAgICAgICAjIG1ha2Ugc3VyZSB3ZSdyZSBub3QgcGFkZGluZyBhICcwJyB3aXRoIGV4dHJhIHplcm9zIG9uIHRoZSByaWdodAotICAgICAgICAgICAgYXNzZXJ0IGRvdHBsYWNlPT1sZW4oc2VsZi5faW50KSBvciBzZWxmLl9pbnQgIT0gJzAnCi0gICAgICAgICAgICBudW0gPSBzZWxmLl9pbnQgKyAnMCcqKGRvdHBsYWNlLWxlbihzZWxmLl9pbnQpKQorICAgICAgICAjIGZpbmQgZGlnaXRzIGJlZm9yZSBhbmQgYWZ0ZXIgZGVjaW1hbCBwb2ludCwgYW5kIGdldCBleHBvbmVudAorICAgICAgICBpZiBkb3RwbGFjZSA8IDA6CisgICAgICAgICAgICBpbnRwYXJ0ID0gJzAnCisgICAgICAgICAgICBmcmFjcGFydCA9ICcwJyooLWRvdHBsYWNlKSArIHNlbGYuX2ludAorICAgICAgICBlbGlmIGRvdHBsYWNlID4gbGVuKHNlbGYuX2ludCk6CisgICAgICAgICAgICBpbnRwYXJ0ID0gc2VsZi5faW50ICsgJzAnKihkb3RwbGFjZS1sZW4oc2VsZi5faW50KSkKKyAgICAgICAgICAgIGZyYWNwYXJ0ID0gJycKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG51bSA9IHNlbGYuX2ludFs6ZG90cGxhY2VdICsgJy4nICsgc2VsZi5faW50W2RvdHBsYWNlOl0KKyAgICAgICAgICAgIGludHBhcnQgPSBzZWxmLl9pbnRbOmRvdHBsYWNlXSBvciAnMCcKKyAgICAgICAgICAgIGZyYWNwYXJ0ID0gc2VsZi5faW50W2RvdHBsYWNlOl0KKyAgICAgICAgZXhwID0gbGVmdGRpZ2l0cy1kb3RwbGFjZQogCi0gICAgICAgICMgLi4udGhlbiB0aGUgdHJhaWxpbmcgZXhwb25lbnQsIG9yIHRyYWlsaW5nICclJwotICAgICAgICBpZiBsZWZ0ZGlnaXRzICE9IGRvdHBsYWNlIG9yIHNwZWNbJ3R5cGUnXSBpbiAnZUUnOgotICAgICAgICAgICAgZWNoYXIgPSB7J0UnOiAnRScsICdlJzogJ2UnLCAnRyc6ICdFJywgJ2cnOiAnZSd9W3NwZWNbJ3R5cGUnXV0KLSAgICAgICAgICAgIG51bSA9IG51bSArICJ7MH17MTorfSIuZm9ybWF0KGVjaGFyLCBsZWZ0ZGlnaXRzLWRvdHBsYWNlKQotICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSA9PSAnJSc6Ci0gICAgICAgICAgICBudW0gPSBudW0gKyAnJScKLQotICAgICAgICAjIGFkZCBzaWduCi0gICAgICAgIGlmIHNlbGYuX3NpZ24gPT0gMToKLSAgICAgICAgICAgIG51bSA9ICctJyArIG51bQotICAgICAgICByZXR1cm4gX2Zvcm1hdF9hbGlnbihudW0sIHNwZWMpCi0KKyAgICAgICAgIyBkb25lIHdpdGggdGhlIGRlY2ltYWwtc3BlY2lmaWMgc3R1ZmY7ICBoYW5kIG92ZXIgdGhlIHJlc3QKKyAgICAgICAgIyBvZiB0aGUgZm9ybWF0dGluZyB0byB0aGUgX2Zvcm1hdF9udW1iZXIgZnVuY3Rpb24KKyAgICAgICAgcmV0dXJuIF9mb3JtYXRfbnVtYmVyKHNlbGYuX3NpZ24sIGludHBhcnQsIGZyYWNwYXJ0LCBleHAsIHNwZWMpCiAKIGRlZiBfZGVjX2Zyb21fdHJpcGxlKHNpZ24sIGNvZWZmaWNpZW50LCBleHBvbmVudCwgc3BlY2lhbD1GYWxzZSk6CiAgICAgIiIiQ3JlYXRlIGEgZGVjaW1hbCBpbnN0YW5jZSBkaXJlY3RseSwgd2l0aG91dCBhbnkgdmFsaWRhdGlvbiwKQEAgLTM4NDIsNiArMzkwOCwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWFnbm9zdGljIGluZm8gdG9vIGxvbmcgaW4gTmFOIikKICAgICAgICAgcmV0dXJuIGQuX2ZpeChzZWxmKQogCisgICAgZGVmIGNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoc2VsZiwgZik6CisgICAgICAgICIiIkNyZWF0ZXMgYSBuZXcgRGVjaW1hbCBpbnN0YW5jZSBmcm9tIGEgZmxvYXQgYnV0IHJvdW5kaW5nIHVzaW5nIHNlbGYKKyAgICAgICAgYXMgdGhlIGNvbnRleHQuCisKKyAgICAgICAgPj4+IGNvbnRleHQgPSBDb250ZXh0KHByZWM9NSwgcm91bmRpbmc9Uk9VTkRfRE9XTikKKyAgICAgICAgPj4+IGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCgzLjE0MTU5MjY1MzU4OTc5MzIpCisgICAgICAgIERlY2ltYWwoJzMuMTQxNScpCisgICAgICAgID4+PiBjb250ZXh0ID0gQ29udGV4dChwcmVjPTUsIHRyYXBzPVtJbmV4YWN0XSkKKyAgICAgICAgPj4+IGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCgzLjE0MTU5MjY1MzU4OTc5MzIpCisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgICAgIC4uLgorICAgICAgICBJbmV4YWN0OiBOb25lCisKKyAgICAgICAgIiIiCisgICAgICAgIGQgPSBEZWNpbWFsLmZyb21fZmxvYXQoZikgICAgICAgIyBBbiBleGFjdCBjb252ZXJzaW9uCisgICAgICAgIHJldHVybiBkLl9maXgoc2VsZikgICAgICAgICAgICAgIyBBcHBseSB0aGUgY29udGV4dCByb3VuZGluZworCiAgICAgIyBNZXRob2RzCiAgICAgZGVmIGFicyhzZWxmLCBhKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG9wZXJhbmQuCkBAIC0zODU4LDcgKzM5NDEsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnMTAxLjUnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFicyhEZWNpbWFsKCctMTAxLjUnKSkKICAgICAgICAgRGVjaW1hbCgnMTAxLjUnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFicygtMSkKKyAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5fX2Fic19fKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBhZGQoc2VsZiwgYSwgYik6CkBAIC0zODY4LDggKzM5NTQsMTkgQEAKICAgICAgICAgRGVjaW1hbCgnMTkuMDAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFkZChEZWNpbWFsKCcxRSsyJyksIERlY2ltYWwoJzEuMDFFKzQnKSkKICAgICAgICAgRGVjaW1hbCgnMS4wMkUrNCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuYWRkKDEsIERlY2ltYWwoMikpCisgICAgICAgIERlY2ltYWwoJzMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFkZChEZWNpbWFsKDgpLCA1KQorICAgICAgICBEZWNpbWFsKCcxMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuYWRkKDUsIDUpCisgICAgICAgIERlY2ltYWwoJzEwJykKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhLl9fYWRkX18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX2FkZF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKIAogICAgIGRlZiBfYXBwbHkoc2VsZiwgYSk6CiAgICAgICAgIHJldHVybiBzdHIoYS5fZml4KHNlbGYpKQpAQCAtMzkxMSw3ICs0MDA4LDE0IEBACiAgICAgICAgIERlY2ltYWwoJzEnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoRGVjaW1hbCgnLTMnKSwgRGVjaW1hbCgnMi4xJykpCiAgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlKDEsIDIpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlKERlY2ltYWwoMSksIDIpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlKDEsIERlY2ltYWwoMikpCisgICAgICAgIERlY2ltYWwoJy0xJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmNvbXBhcmUoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGNvbXBhcmVfc2lnbmFsKHNlbGYsIGEsIGIpOgpAQCAtMzkzOSw3ICs0MDQzLDE0IEBACiAgICAgICAgIERlY2ltYWwoJ05hTicpCiAgICAgICAgID4+PiBwcmludCBjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dCiAgICAgICAgIDEKKyAgICAgICAgPj4+IGMuY29tcGFyZV9zaWduYWwoLTEsIDIpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IGMuY29tcGFyZV9zaWduYWwoRGVjaW1hbCgtMSksIDIpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IGMuY29tcGFyZV9zaWduYWwoLTEsIERlY2ltYWwoMikpCisgICAgICAgIERlY2ltYWwoJy0xJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmNvbXBhcmVfc2lnbmFsKGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBjb21wYXJlX3RvdGFsKHNlbGYsIGEsIGIpOgpAQCAtMzk2MSw3ICs0MDcyLDE0IEBACiAgICAgICAgIERlY2ltYWwoJzEnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmVfdG90YWwoRGVjaW1hbCgnMTIuMycpLCAgRGVjaW1hbCgnTmFOJykpCiAgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKDEsIDIpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKERlY2ltYWwoMSksIDIpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKDEsIERlY2ltYWwoMikpCisgICAgICAgIERlY2ltYWwoJy0xJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmNvbXBhcmVfdG90YWwoYikKIAogICAgIGRlZiBjb21wYXJlX3RvdGFsX21hZyhzZWxmLCBhLCBiKToKQEAgLTM5NjksNiArNDA4Nyw3IEBACiAKICAgICAgICAgTGlrZSBjb21wYXJlX3RvdGFsLCBidXQgd2l0aCBvcGVyYW5kJ3Mgc2lnbiBpZ25vcmVkIGFuZCBhc3N1bWVkIHRvIGJlIDAuCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5jb21wYXJlX3RvdGFsX21hZyhiKQogCiAgICAgZGVmIGNvcHlfYWJzKHNlbGYsIGEpOgpAQCAtMzk3OCwxNyArNDA5NywyMyBAQAogICAgICAgICBEZWNpbWFsKCcyLjEnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfYWJzKERlY2ltYWwoJy0xMDAnKSkKICAgICAgICAgRGVjaW1hbCgnMTAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X2FicygtMSkKKyAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5jb3B5X2FicygpCiAKICAgICBkZWYgY29weV9kZWNpbWFsKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm5zIGEgY29weSBvZiB0aGUgZGVjaW1hbCBvYmpldC4KKyAgICAgICAgIiIiUmV0dXJucyBhIGNvcHkgb2YgdGhlIGRlY2ltYWwgb2JqZWN0LgogCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9kZWNpbWFsKERlY2ltYWwoJzIuMScpKQogICAgICAgICBEZWNpbWFsKCcyLjEnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfZGVjaW1hbChEZWNpbWFsKCctMS4wMCcpKQogICAgICAgICBEZWNpbWFsKCctMS4wMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9kZWNpbWFsKDEpCisgICAgICAgIERlY2ltYWwoJzEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIERlY2ltYWwoYSkKIAogICAgIGRlZiBjb3B5X25lZ2F0ZShzZWxmLCBhKToKQEAgLTM5OTgsNyArNDEyMywxMCBAQAogICAgICAgICBEZWNpbWFsKCctMTAxLjUnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfbmVnYXRlKERlY2ltYWwoJy0xMDEuNScpKQogICAgICAgICBEZWNpbWFsKCcxMDEuNScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9uZWdhdGUoMSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuY29weV9uZWdhdGUoKQogCiAgICAgZGVmIGNvcHlfc2lnbihzZWxmLCBhLCBiKToKQEAgLTQwMTUsNyArNDE0MywxNCBAQAogICAgICAgICBEZWNpbWFsKCctMS41MCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9zaWduKERlY2ltYWwoJy0xLjUwJyksIERlY2ltYWwoJy03LjMzJykpCiAgICAgICAgIERlY2ltYWwoJy0xLjUwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X3NpZ24oMSwgLTIpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X3NpZ24oRGVjaW1hbCgxKSwgLTIpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X3NpZ24oMSwgRGVjaW1hbCgtMikpCisgICAgICAgIERlY2ltYWwoJy0xJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmNvcHlfc2lnbihiKQogCiAgICAgZGVmIGRpdmlkZShzZWxmLCBhLCBiKToKQEAgLTQwNDEsOCArNDE3NiwxOSBAQAogICAgICAgICBEZWNpbWFsKCcxMDAwJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMi40MEUrNicpLCBEZWNpbWFsKCcyJykpCiAgICAgICAgIERlY2ltYWwoJzEuMjBFKzYnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZSg1LCA1KQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCg1KSwgNSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKDUsIERlY2ltYWwoNSkpCisgICAgICAgIERlY2ltYWwoJzEnKQogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIGEuX19kaXZfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHIgPSBhLl9fZGl2X18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcgogCiAgICAgZGVmIGRpdmlkZV9pbnQoc2VsZiwgYSwgYik6CiAgICAgICAgICIiIkRpdmlkZXMgdHdvIG51bWJlcnMgYW5kIHJldHVybnMgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgcmVzdWx0LgpAQCAtNDA1MywxOCArNDE5OSw0MCBAQAogICAgICAgICBEZWNpbWFsKCczJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGVfaW50KERlY2ltYWwoJzEnKSwgRGVjaW1hbCgnMC4zJykpCiAgICAgICAgIERlY2ltYWwoJzMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZV9pbnQoMTAsIDMpCisgICAgICAgIERlY2ltYWwoJzMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZV9pbnQoRGVjaW1hbCgxMCksIDMpCisgICAgICAgIERlY2ltYWwoJzMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZV9pbnQoMTAsIERlY2ltYWwoMykpCisgICAgICAgIERlY2ltYWwoJzMnKQogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIGEuX19mbG9vcmRpdl9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19mbG9vcmRpdl9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKIAogICAgIGRlZiBkaXZtb2Qoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIlJldHVybiAoYSAvLyBiLCBhICUgYikKKyAgICAgICAgIiIiUmV0dXJuIChhIC8vIGIsIGEgJSBiKS4KIAogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdm1vZChEZWNpbWFsKDgpLCBEZWNpbWFsKDMpKQogICAgICAgICAoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCcyJykpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2bW9kKERlY2ltYWwoOCksIERlY2ltYWwoNCkpCiAgICAgICAgIChEZWNpbWFsKCcyJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZtb2QoOCwgNCkKKyAgICAgICAgKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnMCcpKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdm1vZChEZWNpbWFsKDgpLCA0KQorICAgICAgICAoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCcwJykpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2bW9kKDgsIERlY2ltYWwoNCkpCisgICAgICAgIChEZWNpbWFsKCcyJyksIERlY2ltYWwoJzAnKSkKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhLl9fZGl2bW9kX18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX2Rpdm1vZF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKIAogICAgIGRlZiBleHAoc2VsZiwgYSk6CiAgICAgICAgICIiIlJldHVybnMgZSAqKiBhLgpAQCAtNDA4NCw3ICs0MjUyLDEwIEBACiAgICAgICAgIERlY2ltYWwoJzIuMDAwMDAwMDAnKQogICAgICAgICA+Pj4gYy5leHAoRGVjaW1hbCgnK0luZmluaXR5JykpCiAgICAgICAgIERlY2ltYWwoJ0luZmluaXR5JykKKyAgICAgICAgPj4+IGMuZXhwKDEwKQorICAgICAgICBEZWNpbWFsKCcyMjAyNi40NjU4JykKICAgICAgICAgIiIiCisgICAgICAgIGEgPV9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuZXhwKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBmbWEoc2VsZiwgYSwgYiwgYyk6CkBAIC00MTAwLDcgKzQyNzEsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnLTgnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmZtYShEZWNpbWFsKCc4ODg1NjUyOTAnKSwgRGVjaW1hbCgnMTU1Ny45NjkzMCcpLCBEZWNpbWFsKCctODYwODcuNzU3OCcpKQogICAgICAgICBEZWNpbWFsKCcxLjM4NDM1NzM2RSsxMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZm1hKDEsIDMsIDQpCisgICAgICAgIERlY2ltYWwoJzcnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmZtYSgxLCBEZWNpbWFsKDMpLCA0KQorICAgICAgICBEZWNpbWFsKCc3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5mbWEoMSwgMywgRGVjaW1hbCg0KSkKKyAgICAgICAgRGVjaW1hbCgnNycpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5mbWEoYiwgYywgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGlzX2Nhbm9uaWNhbChzZWxmLCBhKToKQEAgLTQxMzAsNyArNDMwOCwxMCBAQAogICAgICAgICBGYWxzZQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2Zpbml0ZShEZWNpbWFsKCdOYU4nKSkKICAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19maW5pdGUoMSkKKyAgICAgICAgVHJ1ZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuaXNfZmluaXRlKCkKIAogICAgIGRlZiBpc19pbmZpbml0ZShzZWxmLCBhKToKQEAgLTQxNDIsNyArNDMyMywxMCBAQAogICAgICAgICBUcnVlCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfaW5maW5pdGUoRGVjaW1hbCgnTmFOJykpCiAgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfaW5maW5pdGUoMSkKKyAgICAgICAgRmFsc2UKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmlzX2luZmluaXRlKCkKIAogICAgIGRlZiBpc19uYW4oc2VsZiwgYSk6CkBAIC00MTU1LDcgKzQzMzksMTAgQEAKICAgICAgICAgVHJ1ZQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX25hbihEZWNpbWFsKCctc05hTicpKQogICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfbmFuKDEpCisgICAgICAgIEZhbHNlCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5pc19uYW4oKQogCiAgICAgZGVmIGlzX25vcm1hbChzZWxmLCBhKToKQEAgLTQxNzUsNyArNDM2MiwxMCBAQAogICAgICAgICBGYWxzZQogICAgICAgICA+Pj4gYy5pc19ub3JtYWwoRGVjaW1hbCgnTmFOJykpCiAgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBjLmlzX25vcm1hbCgxKQorICAgICAgICBUcnVlCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5pc19ub3JtYWwoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGlzX3FuYW4oc2VsZiwgYSk6CkBAIC00MTg3LDcgKzQzNzcsMTAgQEAKICAgICAgICAgVHJ1ZQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3FuYW4oRGVjaW1hbCgnc05hTicpKQogICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3FuYW4oMSkKKyAgICAgICAgRmFsc2UKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmlzX3FuYW4oKQogCiAgICAgZGVmIGlzX3NpZ25lZChzZWxmLCBhKToKQEAgLTQxOTksNyArNDM5MiwxMiBAQAogICAgICAgICBUcnVlCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfc2lnbmVkKERlY2ltYWwoJy0wJykpCiAgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zaWduZWQoOCkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zaWduZWQoLTgpCisgICAgICAgIFRydWUKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmlzX3NpZ25lZCgpCiAKICAgICBkZWYgaXNfc25hbihzZWxmLCBhKToKQEAgLTQyMTIsNyArNDQxMCwxMCBAQAogICAgICAgICBGYWxzZQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NuYW4oRGVjaW1hbCgnc05hTicpKQogICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfc25hbigxKQorICAgICAgICBGYWxzZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuaXNfc25hbigpCiAKICAgICBkZWYgaXNfc3Vibm9ybWFsKHNlbGYsIGEpOgpAQCAtNDIzMSw3ICs0NDMyLDEwIEBACiAgICAgICAgIEZhbHNlCiAgICAgICAgID4+PiBjLmlzX3N1Ym5vcm1hbChEZWNpbWFsKCdOYU4nKSkKICAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKDEpCisgICAgICAgIEZhbHNlCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5pc19zdWJub3JtYWwoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGlzX3plcm8oc2VsZiwgYSk6CkBAIC00MjQzLDcgKzQ0NDcsMTIgQEAKICAgICAgICAgRmFsc2UKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc196ZXJvKERlY2ltYWwoJy0wRSsyJykpCiAgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc196ZXJvKDEpCisgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfemVybygwKQorICAgICAgICBUcnVlCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5pc196ZXJvKCkKIAogICAgIGRlZiBsbihzZWxmLCBhKToKQEAgLTQyNjIsNyArNDQ3MSwxMCBAQAogICAgICAgICBEZWNpbWFsKCcyLjMwMjU4NTA5JykKICAgICAgICAgPj4+IGMubG4oRGVjaW1hbCgnK0luZmluaXR5JykpCiAgICAgICAgIERlY2ltYWwoJ0luZmluaXR5JykKKyAgICAgICAgPj4+IGMubG4oMSkKKyAgICAgICAgRGVjaW1hbCgnMCcpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5sbihjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgbG9nMTAoc2VsZiwgYSk6CkBAIC00Mjg1LDcgKzQ0OTcsMTIgQEAKICAgICAgICAgRGVjaW1hbCgnMS44NDUwOTgwNCcpCiAgICAgICAgID4+PiBjLmxvZzEwKERlY2ltYWwoJytJbmZpbml0eScpKQogICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCisgICAgICAgID4+PiBjLmxvZzEwKDApCisgICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCisgICAgICAgID4+PiBjLmxvZzEwKDEpCisgICAgICAgIERlY2ltYWwoJzAnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubG9nMTAoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGxvZ2Ioc2VsZiwgYSk6CkBAIC00MzA0LDcgKzQ1MjEsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnLTInKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoRGVjaW1hbCgnMCcpKQogICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoMSkKKyAgICAgICAgRGVjaW1hbCgnMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9nYigxMCkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9nYigxMDApCisgICAgICAgIERlY2ltYWwoJzInKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubG9nYihjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgbG9naWNhbF9hbmQoc2VsZiwgYSwgYik6CkBAIC00MzI0LDcgKzQ1NDgsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnMTAwMCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9hbmQoRGVjaW1hbCgnMTExMScpLCBEZWNpbWFsKCcxMCcpKQogICAgICAgICBEZWNpbWFsKCcxMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9hbmQoMTEwLCAxMTAxKQorICAgICAgICBEZWNpbWFsKCcxMDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKERlY2ltYWwoMTEwKSwgMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2FuZCgxMTAsIERlY2ltYWwoMTEwMSkpCisgICAgICAgIERlY2ltYWwoJzEwMCcpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5sb2dpY2FsX2FuZChiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgbG9naWNhbF9pbnZlcnQoc2VsZiwgYSk6CkBAIC00MzQwLDcgKzQ1NzEsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnMCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9pbnZlcnQoRGVjaW1hbCgnMTAxMDEwMTAxJykpCiAgICAgICAgIERlY2ltYWwoJzEwMTAxMDEwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2ludmVydCgxMTAxKQorICAgICAgICBEZWNpbWFsKCcxMTExMTAwMTAnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubG9naWNhbF9pbnZlcnQoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGxvZ2ljYWxfb3Ioc2VsZiwgYSwgYik6CkBAIC00MzYwLDcgKzQ1OTQsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnMTExMCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcxMTEwJyksIERlY2ltYWwoJzEwJykpCiAgICAgICAgIERlY2ltYWwoJzExMTAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfb3IoMTEwLCAxMTAxKQorICAgICAgICBEZWNpbWFsKCcxMTExJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX29yKERlY2ltYWwoMTEwKSwgMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTExMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcigxMTAsIERlY2ltYWwoMTEwMSkpCisgICAgICAgIERlY2ltYWwoJzExMTEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubG9naWNhbF9vcihiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgbG9naWNhbF94b3Ioc2VsZiwgYSwgYik6CkBAIC00MzgwLDEwICs0NjIxLDE3IEBACiAgICAgICAgIERlY2ltYWwoJzExMCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF94b3IoRGVjaW1hbCgnMTExMScpLCBEZWNpbWFsKCcxMCcpKQogICAgICAgICBEZWNpbWFsKCcxMTAxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX3hvcigxMTAsIDExMDEpCisgICAgICAgIERlY2ltYWwoJzEwMTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKERlY2ltYWwoMTEwKSwgMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTAxMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF94b3IoMTEwLCBEZWNpbWFsKDExMDEpKQorICAgICAgICBEZWNpbWFsKCcxMDExJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmxvZ2ljYWxfeG9yKGIsIGNvbnRleHQ9c2VsZikKIAotICAgIGRlZiBtYXgoc2VsZiwgYSxiKToKKyAgICBkZWYgbWF4KHNlbGYsIGEsIGIpOgogICAgICAgICAiIiJtYXggY29tcGFyZXMgdHdvIHZhbHVlcyBudW1lcmljYWxseSBhbmQgcmV0dXJucyB0aGUgbWF4aW11bS4KIAogICAgICAgICBJZiBlaXRoZXIgb3BlcmFuZCBpcyBhIE5hTiB0aGVuIHRoZSBnZW5lcmFsIHJ1bGVzIGFwcGx5LgpAQCAtNDQwMCwxNCArNDY0OCwzNCBAQAogICAgICAgICBEZWNpbWFsKCcxJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXgoRGVjaW1hbCgnNycpLCBEZWNpbWFsKCdOYU4nKSkKICAgICAgICAgRGVjaW1hbCgnNycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4KDEsIDIpCisgICAgICAgIERlY2ltYWwoJzInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heChEZWNpbWFsKDEpLCAyKQorICAgICAgICBEZWNpbWFsKCcyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXgoMSwgRGVjaW1hbCgyKSkKKyAgICAgICAgRGVjaW1hbCgnMicpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5tYXgoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG1heF9tYWcoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIkNvbXBhcmVzIHRoZSB2YWx1ZXMgbnVtZXJpY2FsbHkgd2l0aCB0aGVpciBzaWduIGlnbm9yZWQuIiIiCisgICAgICAgICIiIkNvbXBhcmVzIHRoZSB2YWx1ZXMgbnVtZXJpY2FsbHkgd2l0aCB0aGVpciBzaWduIGlnbm9yZWQuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXhfbWFnKERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnTmFOJykpCisgICAgICAgIERlY2ltYWwoJzcnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heF9tYWcoRGVjaW1hbCgnNycpLCBEZWNpbWFsKCctMTAnKSkKKyAgICAgICAgRGVjaW1hbCgnLTEwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXhfbWFnKDEsIC0yKQorICAgICAgICBEZWNpbWFsKCctMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4X21hZyhEZWNpbWFsKDEpLCAtMikKKyAgICAgICAgRGVjaW1hbCgnLTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heF9tYWcoMSwgRGVjaW1hbCgtMikpCisgICAgICAgIERlY2ltYWwoJy0yJykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLm1heF9tYWcoYiwgY29udGV4dD1zZWxmKQogCi0gICAgZGVmIG1pbihzZWxmLCBhLGIpOgorICAgIGRlZiBtaW4oc2VsZiwgYSwgYik6CiAgICAgICAgICIiIm1pbiBjb21wYXJlcyB0d28gdmFsdWVzIG51bWVyaWNhbGx5IGFuZCByZXR1cm5zIHRoZSBtaW5pbXVtLgogCiAgICAgICAgIElmIGVpdGhlciBvcGVyYW5kIGlzIGEgTmFOIHRoZW4gdGhlIGdlbmVyYWwgcnVsZXMgYXBwbHkuCkBAIC00NDI0LDExICs0NjkyLDMxIEBACiAgICAgICAgIERlY2ltYWwoJzEuMCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnTmFOJykpCiAgICAgICAgIERlY2ltYWwoJzcnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbigxLCAyKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW4oRGVjaW1hbCgxKSwgMikKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKDEsIERlY2ltYWwoMjkpKQorICAgICAgICBEZWNpbWFsKCcxJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLm1pbihiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgbWluX21hZyhzZWxmLCBhLCBiKToKLSAgICAgICAgIiIiQ29tcGFyZXMgdGhlIHZhbHVlcyBudW1lcmljYWxseSB3aXRoIHRoZWlyIHNpZ24gaWdub3JlZC4iIiIKKyAgICAgICAgIiIiQ29tcGFyZXMgdGhlIHZhbHVlcyBudW1lcmljYWxseSB3aXRoIHRoZWlyIHNpZ24gaWdub3JlZC4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoRGVjaW1hbCgnMycpLCBEZWNpbWFsKCctMicpKQorICAgICAgICBEZWNpbWFsKCctMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluX21hZyhEZWNpbWFsKCctMycpLCBEZWNpbWFsKCdOYU4nKSkKKyAgICAgICAgRGVjaW1hbCgnLTMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoMSwgLTIpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoRGVjaW1hbCgxKSwgLTIpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoMSwgRGVjaW1hbCgtMikpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubWluX21hZyhiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgbWludXMoc2VsZiwgYSk6CkBAIC00NDQyLDE2ICs0NzMwLDE5IEBACiAgICAgICAgIERlY2ltYWwoJy0xLjMnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbnVzKERlY2ltYWwoJy0xLjMnKSkKICAgICAgICAgRGVjaW1hbCgnMS4zJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW51cygxKQorICAgICAgICBEZWNpbWFsKCctMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5fX25lZ19fKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBtdWx0aXBseShzZWxmLCBhLCBiKToKICAgICAgICAgIiIibXVsdGlwbHkgbXVsdGlwbGllcyB0d28gb3BlcmFuZHMuCiAKICAgICAgICAgSWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBzcGVjaWFsIHZhbHVlIHRoZW4gdGhlIGdlbmVyYWwgcnVsZXMgYXBwbHkuCi0gICAgICAgIE90aGVyd2lzZSwgdGhlIG9wZXJhbmRzIGFyZSBtdWx0aXBsaWVkIHRvZ2V0aGVyICgnbG9uZyBtdWx0aXBsaWNhdGlvbicpLAotICAgICAgICByZXN1bHRpbmcgaW4gYSBudW1iZXIgd2hpY2ggbWF5IGJlIGFzIGxvbmcgYXMgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocwotICAgICAgICBvZiB0aGUgdHdvIG9wZXJhbmRzLgorICAgICAgICBPdGhlcndpc2UsIHRoZSBvcGVyYW5kcyBhcmUgbXVsdGlwbGllZCB0b2dldGhlcgorICAgICAgICAoJ2xvbmcgbXVsdGlwbGljYXRpb24nKSwgcmVzdWx0aW5nIGluIGEgbnVtYmVyIHdoaWNoIG1heSBiZSBhcyBsb25nIGFzCisgICAgICAgIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIHR3byBvcGVyYW5kcy4KIAogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm11bHRpcGx5KERlY2ltYWwoJzEuMjAnKSwgRGVjaW1hbCgnMycpKQogICAgICAgICBEZWNpbWFsKCczLjYwJykKQEAgLTQ0NjMsOCArNDc1NCwxOSBAQAogICAgICAgICBEZWNpbWFsKCctMC4wJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tdWx0aXBseShEZWNpbWFsKCc2NTQzMjEnKSwgRGVjaW1hbCgnNjU0MzIxJykpCiAgICAgICAgIERlY2ltYWwoJzQuMjgxMzU5NzFFKzExJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tdWx0aXBseSg3LCA3KQorICAgICAgICBEZWNpbWFsKCc0OScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoRGVjaW1hbCg3KSwgNykKKyAgICAgICAgRGVjaW1hbCgnNDknKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm11bHRpcGx5KDcsIERlY2ltYWwoNykpCisgICAgICAgIERlY2ltYWwoJzQ5JykKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhLl9fbXVsX18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX211bF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKIAogICAgIGRlZiBuZXh0X21pbnVzKHNlbGYsIGEpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBsYXJnZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyIHNtYWxsZXIgdGhhbiBhLgpAQCAtNDQ4MCw3ICs0NzgyLDEwIEBACiAgICAgICAgIERlY2ltYWwoJy0xLjAwMDAwMDA0JykKICAgICAgICAgPj4+IGMubmV4dF9taW51cyhEZWNpbWFsKCdJbmZpbml0eScpKQogICAgICAgICBEZWNpbWFsKCc5Ljk5OTk5OTk5RSs5OTknKQorICAgICAgICA+Pj4gYy5uZXh0X21pbnVzKDEpCisgICAgICAgIERlY2ltYWwoJzAuOTk5OTk5OTk5JykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLm5leHRfbWludXMoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG5leHRfcGx1cyhzZWxmLCBhKToKQEAgLTQ0OTcsNyArNDgwMiwxMCBAQAogICAgICAgICBEZWNpbWFsKCctMS4wMDAwMDAwMicpCiAgICAgICAgID4+PiBjLm5leHRfcGx1cyhEZWNpbWFsKCctSW5maW5pdHknKSkKICAgICAgICAgRGVjaW1hbCgnLTkuOTk5OTk5OTlFKzk5OScpCisgICAgICAgID4+PiBjLm5leHRfcGx1cygxKQorICAgICAgICBEZWNpbWFsKCcxLjAwMDAwMDAxJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLm5leHRfcGx1cyhjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgbmV4dF90b3dhcmQoc2VsZiwgYSwgYik6CkBAIC00NTI1LDcgKzQ4MzMsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnLTEuMDAwMDAwMDQnKQogICAgICAgICA+Pj4gYy5uZXh0X3Rvd2FyZChEZWNpbWFsKCcwLjAwJyksIERlY2ltYWwoJy0wLjAwMDAnKSkKICAgICAgICAgRGVjaW1hbCgnLTAuMDAnKQorICAgICAgICA+Pj4gYy5uZXh0X3Rvd2FyZCgwLCAxKQorICAgICAgICBEZWNpbWFsKCcxRS0xMDA3JykKKyAgICAgICAgPj4+IGMubmV4dF90b3dhcmQoRGVjaW1hbCgwKSwgMSkKKyAgICAgICAgRGVjaW1hbCgnMUUtMTAwNycpCisgICAgICAgID4+PiBjLm5leHRfdG93YXJkKDAsIERlY2ltYWwoMSkpCisgICAgICAgIERlY2ltYWwoJzFFLTEwMDcnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubmV4dF90b3dhcmQoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG5vcm1hbGl6ZShzZWxmLCBhKToKQEAgLTQ1NDYsNyArNDg2MSwxMCBAQAogICAgICAgICBEZWNpbWFsKCcxLjJFKzInKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm5vcm1hbGl6ZShEZWNpbWFsKCcwLjAwJykpCiAgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm5vcm1hbGl6ZSg2KQorICAgICAgICBEZWNpbWFsKCc2JykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLm5vcm1hbGl6ZShjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgbnVtYmVyX2NsYXNzKHNlbGYsIGEpOgpAQCAtNDU5Myw3ICs0OTExLDEwIEBACiAgICAgICAgICdOYU4nCiAgICAgICAgID4+PiBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKCdzTmFOJykpCiAgICAgICAgICdzTmFOJworICAgICAgICA+Pj4gYy5udW1iZXJfY2xhc3MoMTIzKQorICAgICAgICAnK05vcm1hbCcKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLm51bWJlcl9jbGFzcyhjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgcGx1cyhzZWxmLCBhKToKQEAgLTQ2MDcsNyArNDkyOCwxMCBAQAogICAgICAgICBEZWNpbWFsKCcxLjMnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnBsdXMoRGVjaW1hbCgnLTEuMycpKQogICAgICAgICBEZWNpbWFsKCctMS4zJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wbHVzKC0xKQorICAgICAgICBEZWNpbWFsKCctMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5fX3Bvc19fKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBwb3dlcihzZWxmLCBhLCBiLCBtb2R1bG89Tm9uZSk6CkBAIC00Njc2LDggKzUwMDAsMTkgQEAKICAgICAgICAgRGVjaW1hbCgnLTAnKQogICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCctMjMnKSwgRGVjaW1hbCgnMCcpLCBEZWNpbWFsKCc2NTUzNycpKQogICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wb3dlcig3LCA3KQorICAgICAgICBEZWNpbWFsKCc4MjM1NDMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnBvd2VyKERlY2ltYWwoNyksIDcpCisgICAgICAgIERlY2ltYWwoJzgyMzU0MycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucG93ZXIoNywgRGVjaW1hbCg3KSwgMikKKyAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX3Bvd19fKGIsIG1vZHVsbywgY29udGV4dD1zZWxmKQorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX3Bvd19fKGIsIG1vZHVsbywgY29udGV4dD1zZWxmKQorICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcgogCiAgICAgZGVmIHF1YW50aXplKHNlbGYsIGEsIGIpOgogICAgICAgICAiIiJSZXR1cm5zIGEgdmFsdWUgZXF1YWwgdG8gJ2EnIChyb3VuZGVkKSwgaGF2aW5nIHRoZSBleHBvbmVudCBvZiAnYicuCkBAIC00NzI3LDcgKzUwNjIsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnMi4yRSsyJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5xdWFudGl6ZShEZWNpbWFsKCcyMTcnKSwgRGVjaW1hbCgnMWUrMicpKQogICAgICAgICBEZWNpbWFsKCcyRSsyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5xdWFudGl6ZSgxLCAyKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5xdWFudGl6ZShEZWNpbWFsKDEpLCAyKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5xdWFudGl6ZSgxLCBEZWNpbWFsKDIpKQorICAgICAgICBEZWNpbWFsKCcxJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnF1YW50aXplKGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiByYWRpeChzZWxmKToKQEAgLTQ3NjIsOCArNTEwNCwxOSBAQAogICAgICAgICBEZWNpbWFsKCcwLjEnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcihEZWNpbWFsKCczLjYnKSwgRGVjaW1hbCgnMS4zJykpCiAgICAgICAgIERlY2ltYWwoJzEuMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKDIyLCA2KQorICAgICAgICBEZWNpbWFsKCc0JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXIoRGVjaW1hbCgyMiksIDYpCisgICAgICAgIERlY2ltYWwoJzQnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcigyMiwgRGVjaW1hbCg2KSkKKyAgICAgICAgRGVjaW1hbCgnNCcpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX21vZF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19tb2RfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgcmVtYWluZGVyX25lYXIoc2VsZiwgYSwgYik6CiAgICAgICAgICIiIlJldHVybnMgdG8gYmUgImEgLSBiICogbiIsIHdoZXJlIG4gaXMgdGhlIGludGVnZXIgbmVhcmVzdCB0aGUgZXhhY3QKQEAgLTQ3ODksNyArNTE0MiwxNCBAQAogICAgICAgICBEZWNpbWFsKCcwLjEnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcl9uZWFyKERlY2ltYWwoJzMuNicpLCBEZWNpbWFsKCcxLjMnKSkKICAgICAgICAgRGVjaW1hbCgnLTAuMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoMywgMTEpCisgICAgICAgIERlY2ltYWwoJzMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcl9uZWFyKERlY2ltYWwoMyksIDExKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXJfbmVhcigzLCBEZWNpbWFsKDExKSkKKyAgICAgICAgRGVjaW1hbCgnMycpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5yZW1haW5kZXJfbmVhcihiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgcm90YXRlKHNlbGYsIGEsIGIpOgpAQCAtNDgxMSw3ICs1MTcxLDE0IEBACiAgICAgICAgIERlY2ltYWwoJzEyMzQ1Njc4OScpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucm90YXRlKERlY2ltYWwoJzEyMzQ1Njc4OScpLCBEZWNpbWFsKCcrMicpKQogICAgICAgICBEZWNpbWFsKCczNDU2Nzg5MTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJvdGF0ZSgxMzMzMzMzLCAxKQorICAgICAgICBEZWNpbWFsKCcxMzMzMzMzMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucm90YXRlKERlY2ltYWwoMTMzMzMzMyksIDEpCisgICAgICAgIERlY2ltYWwoJzEzMzMzMzMwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yb3RhdGUoMTMzMzMzMywgRGVjaW1hbCgxKSkKKyAgICAgICAgRGVjaW1hbCgnMTMzMzMzMzAnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEucm90YXRlKGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBzYW1lX3F1YW50dW0oc2VsZiwgYSwgYik6CkBAIC00ODI4LDcgKzUxOTUsMTQgQEAKICAgICAgICAgRmFsc2UKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zYW1lX3F1YW50dW0oRGVjaW1hbCgnSW5mJyksIERlY2ltYWwoJy1JbmYnKSkKICAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNhbWVfcXVhbnR1bSgxMDAwMCwgLTEpCisgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zYW1lX3F1YW50dW0oRGVjaW1hbCgxMDAwMCksIC0xKQorICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKDEwMDAwLCBEZWNpbWFsKC0xKSkKKyAgICAgICAgVHJ1ZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuc2FtZV9xdWFudHVtKGIpCiAKICAgICBkZWYgc2NhbGViIChzZWxmLCBhLCBiKToKQEAgLTQ4NDAsOCArNTIxNCwxNSBAQAogICAgICAgICBEZWNpbWFsKCc3LjUwJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zY2FsZWIoRGVjaW1hbCgnNy41MCcpLCBEZWNpbWFsKCczJykpCiAgICAgICAgIERlY2ltYWwoJzcuNTBFKzMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNjYWxlYigxLCA0KQorICAgICAgICBEZWNpbWFsKCcxRSs0JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zY2FsZWIoRGVjaW1hbCgxKSwgNCkKKyAgICAgICAgRGVjaW1hbCgnMUUrNCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2NhbGViKDEsIERlY2ltYWwoNCkpCisgICAgICAgIERlY2ltYWwoJzFFKzQnKQogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIGEuc2NhbGViIChiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLnNjYWxlYihiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgc2hpZnQoc2VsZiwgYSwgYik6CiAgICAgICAgICIiIlJldHVybnMgYSBzaGlmdGVkIGNvcHkgb2YgYSwgYiB0aW1lcy4KQEAgLTQ4NjMsNyArNTI0NCwxNCBAQAogICAgICAgICBEZWNpbWFsKCcxMjM0NTY3ODknKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KERlY2ltYWwoJzEyMzQ1Njc4OScpLCBEZWNpbWFsKCcrMicpKQogICAgICAgICBEZWNpbWFsKCczNDU2Nzg5MDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KDg4ODg4ODg4LCAyKQorICAgICAgICBEZWNpbWFsKCc4ODg4ODg4MDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KERlY2ltYWwoODg4ODg4ODgpLCAyKQorICAgICAgICBEZWNpbWFsKCc4ODg4ODg4MDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KDg4ODg4ODg4LCBEZWNpbWFsKDIpKQorICAgICAgICBEZWNpbWFsKCc4ODg4ODg4MDAnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuc2hpZnQoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHNxcnQoc2VsZiwgYSk6CkBAIC00ODkwLDkgKzUyNzgsMTIgQEAKICAgICAgICAgRGVjaW1hbCgnMi42NDU3NTEzMScpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3FydChEZWNpbWFsKCcxMCcpKQogICAgICAgICBEZWNpbWFsKCczLjE2MjI3NzY2JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KDIpCisgICAgICAgIERlY2ltYWwoJzEuNDE0MjEzNTYnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnByZWMKICAgICAgICAgOQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuc3FydChjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgc3VidHJhY3Qoc2VsZiwgYSwgYik6CkBAIC00OTA0LDE0ICs1Mjk1LDI2IEBACiAgICAgICAgIERlY2ltYWwoJzAuMDAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnN1YnRyYWN0KERlY2ltYWwoJzEuMycpLCBEZWNpbWFsKCcyLjA3JykpCiAgICAgICAgIERlY2ltYWwoJy0wLjc3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdCg4LCA1KQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdChEZWNpbWFsKDgpLCA1KQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdCg4LCBEZWNpbWFsKDUpKQorICAgICAgICBEZWNpbWFsKCczJykKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhLl9fc3ViX18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX3N1Yl9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKIAogICAgIGRlZiB0b19lbmdfc3RyaW5nKHNlbGYsIGEpOgogICAgICAgICAiIiJDb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywgdXNpbmcgc2NpZW50aWZpYyBub3RhdGlvbi4KIAogICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgY29udGV4dC4KICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnRvX2VuZ19zdHJpbmcoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHRvX3NjaV9zdHJpbmcoc2VsZiwgYSk6CkBAIC00OTE5LDYgKzUzMjIsNyBAQAogCiAgICAgICAgIFRoZSBvcGVyYXRpb24gaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBjb250ZXh0LgogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuX19zdHJfXyhjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgdG9faW50ZWdyYWxfZXhhY3Qoc2VsZiwgYSk6CkBAIC00OTQ4LDYgKzUzNTIsNyBAQAogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX2V4YWN0KERlY2ltYWwoJy1JbmYnKSkKICAgICAgICAgRGVjaW1hbCgnLUluZmluaXR5JykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnRvX2ludGVncmFsX2V4YWN0KGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiB0b19pbnRlZ3JhbF92YWx1ZShzZWxmLCBhKToKQEAgLTQ5NzYsNiArNTM4MSw3IEBACiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfdmFsdWUoRGVjaW1hbCgnLUluZicpKQogICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEudG9faW50ZWdyYWxfdmFsdWUoY29udGV4dD1zZWxmKQogCiAgICAgIyB0aGUgbWV0aG9kIG5hbWUgY2hhbmdlZCwgYnV0IHdlIHByb3ZpZGUgYWxzbyB0aGUgb2xkIG9uZSwgZm9yIGNvbXBhdGliaWxpdHkKQEAgLTUzNzcsMTUgKzU3ODMsMjEgQEAKIAogIyMjIyMgSGVscGVyIEZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLWRlZiBfY29udmVydF9vdGhlcihvdGhlciwgcmFpc2VpdD1GYWxzZSk6CitkZWYgX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9RmFsc2UsIGFsbG93X2Zsb2F0PUZhbHNlKToKICAgICAiIiJDb252ZXJ0IG90aGVyIHRvIERlY2ltYWwuCiAKICAgICBWZXJpZmllcyB0aGF0IGl0J3Mgb2sgdG8gdXNlIGluIGFuIGltcGxpY2l0IGNvbnN0cnVjdGlvbi4KKyAgICBJZiBhbGxvd19mbG9hdCBpcyB0cnVlLCBhbGxvdyBjb252ZXJzaW9uIGZyb20gZmxvYXQ7ICB0aGlzCisgICAgaXMgdXNlZCBpbiB0aGUgY29tcGFyaXNvbiBtZXRob2RzIChfX2VxX18gYW5kIGZyaWVuZHMpLgorCiAgICAgIiIiCiAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgRGVjaW1hbCk6CiAgICAgICAgIHJldHVybiBvdGhlcgogICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIChpbnQsIGxvbmcpKToKICAgICAgICAgcmV0dXJuIERlY2ltYWwob3RoZXIpCisgICAgaWYgYWxsb3dfZmxvYXQgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIGZsb2F0KToKKyAgICAgICAgcmV0dXJuIERlY2ltYWwuZnJvbV9mbG9hdChvdGhlcikKKwogICAgIGlmIHJhaXNlaXQ6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBvdGhlcikKICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKQEAgLTU0NjAsMTQgKzU4NzIsMTMgQEAKIF9leGFjdF9oYWxmID0gcmUuY29tcGlsZSgnNTAqJCcpLm1hdGNoCiAKICMjIyMjIFBFUDMxMDEgc3VwcG9ydCBmdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBUaGUgZnVuY3Rpb25zIHBhcnNlX2Zvcm1hdF9zcGVjaWZpZXIgYW5kIGZvcm1hdF9hbGlnbiBoYXZlIGxpdHRsZSB0byBkbwotIyB3aXRoIHRoZSBEZWNpbWFsIGNsYXNzLCBhbmQgY291bGQgcG90ZW50aWFsbHkgYmUgcmV1c2VkIGZvciBvdGhlciBwdXJlCisjIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGhhdmUgbGl0dGxlIHRvIGRvIHdpdGggdGhlIERlY2ltYWwKKyMgY2xhc3MsIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBiZSByZXVzZWQgb3IgYWRhcHRlZCBmb3Igb3RoZXIgcHVyZQogIyBQeXRob24gbnVtZXJpYyBjbGFzc2VzIHRoYXQgd2FudCB0byBpbXBsZW1lbnQgX19mb3JtYXRfXwogIwogIyBBIGZvcm1hdCBzcGVjaWZpZXIgZm9yIERlY2ltYWwgbG9va3MgbGlrZToKICMKLSMgICBbW2ZpbGxdYWxpZ25dW3NpZ25dWzBdW21pbmltdW13aWR0aF1bLnByZWNpc2lvbl1bdHlwZV0KLSMKKyMgICBbW2ZpbGxdYWxpZ25dW3NpZ25dWzBdW21pbmltdW13aWR0aF1bLF1bLnByZWNpc2lvbl1bdHlwZV0KIAogX3BhcnNlX2Zvcm1hdF9zcGVjaWZpZXJfcmVnZXggPSByZS5jb21waWxlKHIiIiJcQQogKD86CkBAIC01NDc3LDE0ICs1ODg4LDIzIEBACiAoP1A8c2lnbj5bLSsgXSk/CiAoP1A8emVyb3BhZD4wKT8KICg/UDxtaW5pbXVtd2lkdGg+KD8hMClcZCspPworKD9QPHRob3VzYW5kc19zZXA+LCk/CiAoPzpcLig/UDxwcmVjaXNpb24+MHwoPyEwKVxkKykpPwotKD9QPHR5cGU+W2VFZkZnRyVdKT8KKyg/UDx0eXBlPltlRWZGZ0duJV0pPwogXFoKICIiIiwgcmUuVkVSQk9TRSkKIAogZGVsIHJlCiAKLWRlZiBfcGFyc2VfZm9ybWF0X3NwZWNpZmllcihmb3JtYXRfc3BlYyk6CisjIFRoZSBsb2NhbGUgbW9kdWxlIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgJ24nIGZvcm1hdCBzcGVjaWZpZXIuICBUaGUKKyMgcmVzdCBvZiB0aGUgUEVQIDMxMDEgY29kZSBmdW5jdGlvbnMgcXVpdGUgaGFwcGlseSB3aXRob3V0IGl0LCBzbyB3ZQorIyBkb24ndCBjYXJlIHRvbyBtdWNoIGlmIGxvY2FsZSBpc24ndCBwcmVzZW50LgordHJ5OgorICAgIGltcG9ydCBsb2NhbGUgYXMgX2xvY2FsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKworZGVmIF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyKGZvcm1hdF9zcGVjLCBfbG9jYWxlY29udj1Ob25lKToKICAgICAiIiJQYXJzZSBhbmQgdmFsaWRhdGUgYSBmb3JtYXQgc3BlY2lmaWVyLgogCiAgICAgVHVybnMgYSBzdGFuZGFyZCBudW1lcmljIGZvcm1hdCBzcGVjaWZpZXIgaW50byBhIGRpY3QsIHdpdGggdGhlCkBAIC01NDk0LDkgKzU5MTQsMTQgQEAKICAgICAgIGFsaWduOiBhbGlnbm1lbnQgdHlwZSwgZWl0aGVyICc8JywgJz4nLCAnPScgb3IgJ14nCiAgICAgICBzaWduOiBlaXRoZXIgJysnLCAnLScgb3IgJyAnCiAgICAgICBtaW5pbXVtd2lkdGg6IG5vbm5lZ2F0aXZlIGludGVnZXIgZ2l2aW5nIG1pbmltdW0gd2lkdGgKKyAgICAgIHplcm9wYWQ6IGJvb2xlYW4sIGluZGljYXRpbmcgd2hldGhlciB0byBwYWQgd2l0aCB6ZXJvcworICAgICAgdGhvdXNhbmRzX3NlcDogc3RyaW5nIHRvIHVzZSBhcyB0aG91c2FuZHMgc2VwYXJhdG9yLCBvciAnJworICAgICAgZ3JvdXBpbmc6IGdyb3VwaW5nIGZvciB0aG91c2FuZHMgc2VwYXJhdG9ycywgaW4gZm9ybWF0CisgICAgICAgIHVzZWQgYnkgbG9jYWxlY29udgorICAgICAgZGVjaW1hbF9wb2ludDogc3RyaW5nIHRvIHVzZSBmb3IgZGVjaW1hbCBwb2ludAogICAgICAgcHJlY2lzaW9uOiBub25uZWdhdGl2ZSBpbnRlZ2VyIGdpdmluZyBwcmVjaXNpb24sIG9yIE5vbmUKICAgICAgIHR5cGU6IG9uZSBvZiB0aGUgY2hhcmFjdGVycyAnZUVmRmdHJScsIG9yIE5vbmUKLSAgICAgIHVuaWNvZGU6IGVpdGhlciBUcnVlIG9yIEZhbHNlIChhbHdheXMgVHJ1ZSBmb3IgUHl0aG9uIDMueCkKKyAgICAgIHVuaWNvZGU6IGJvb2xlYW4gKGFsd2F5cyBUcnVlIGZvciBQeXRob24gMy54KQogCiAgICAgIiIiCiAgICAgbSA9IF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyX3JlZ2V4Lm1hdGNoKGZvcm1hdF9zcGVjKQpAQCAtNTUwNiwyNiArNTkzMSwyOCBAQAogICAgICMgZ2V0IHRoZSBkaWN0aW9uYXJ5CiAgICAgZm9ybWF0X2RpY3QgPSBtLmdyb3VwZGljdCgpCiAKLSAgICAjIGRlZmF1bHRzIGZvciBmaWxsIGFuZCBhbGlnbm1lbnQKKyAgICAjIHplcm9wYWQ7IGRlZmF1bHRzIGZvciBmaWxsIGFuZCBhbGlnbm1lbnQuICBJZiB6ZXJvIHBhZGRpbmcKKyAgICAjIGlzIHJlcXVlc3RlZCwgdGhlIGZpbGwgYW5kIGFsaWduIGZpZWxkcyBzaG91bGQgYmUgYWJzZW50LgogICAgIGZpbGwgPSBmb3JtYXRfZGljdFsnZmlsbCddCiAgICAgYWxpZ24gPSBmb3JtYXRfZGljdFsnYWxpZ24nXQotICAgIGlmIGZvcm1hdF9kaWN0LnBvcCgnemVyb3BhZCcpIGlzIG5vdCBOb25lOgotICAgICAgICAjIGluIHRoZSBmYWNlIG9mIGNvbmZsaWN0LCByZWZ1c2UgdGhlIHRlbXB0YXRpb24gdG8gZ3Vlc3MKLSAgICAgICAgaWYgZmlsbCBpcyBub3QgTm9uZSBhbmQgZmlsbCAhPSAnMCc6CisgICAgZm9ybWF0X2RpY3RbJ3plcm9wYWQnXSA9IChmb3JtYXRfZGljdFsnemVyb3BhZCddIGlzIG5vdCBOb25lKQorICAgIGlmIGZvcm1hdF9kaWN0Wyd6ZXJvcGFkJ106CisgICAgICAgIGlmIGZpbGwgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJGaWxsIGNoYXJhY3RlciBjb25mbGljdHMgd2l0aCAnMCciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaW4gZm9ybWF0IHNwZWNpZmllcjogIiArIGZvcm1hdF9zcGVjKQotICAgICAgICBpZiBhbGlnbiBpcyBub3QgTm9uZSBhbmQgYWxpZ24gIT0gJz0nOgorICAgICAgICBpZiBhbGlnbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkFsaWdubWVudCBjb25mbGljdHMgd2l0aCAnMCcgaW4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IHNwZWNpZmllcjogIiArIGZvcm1hdF9zcGVjKQotICAgICAgICBmaWxsID0gJzAnCi0gICAgICAgIGFsaWduID0gJz0nCiAgICAgZm9ybWF0X2RpY3RbJ2ZpbGwnXSA9IGZpbGwgb3IgJyAnCi0gICAgZm9ybWF0X2RpY3RbJ2FsaWduJ10gPSBhbGlnbiBvciAnPCcKKyAgICAjIFBFUCAzMTAxIG9yaWdpbmFsbHkgc3BlY2lmaWVkIHRoYXQgdGhlIGRlZmF1bHQgYWxpZ25tZW50IHNob3VsZAorICAgICMgYmUgbGVmdDsgIGl0IHdhcyBsYXRlciBhZ3JlZWQgdGhhdCByaWdodC1hbGlnbmVkIG1ha2VzIG1vcmUgc2Vuc2UKKyAgICAjIGZvciBudW1lcmljIHR5cGVzLiAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2ODU3LgorICAgIGZvcm1hdF9kaWN0WydhbGlnbiddID0gYWxpZ24gb3IgJz4nCiAKKyAgICAjIGRlZmF1bHQgc2lnbiBoYW5kbGluZzogJy0nIGZvciBuZWdhdGl2ZSwgJycgZm9yIHBvc2l0aXZlCiAgICAgaWYgZm9ybWF0X2RpY3RbJ3NpZ24nXSBpcyBOb25lOgogICAgICAgICBmb3JtYXRfZGljdFsnc2lnbiddID0gJy0nCiAKLSAgICAjIHR1cm4gbWluaW11bXdpZHRoIGFuZCBwcmVjaXNpb24gZW50cmllcyBpbnRvIGludGVnZXJzLgogICAgICMgbWluaW11bXdpZHRoIGRlZmF1bHRzIHRvIDA7IHByZWNpc2lvbiByZW1haW5zIE5vbmUgaWYgbm90IGdpdmVuCiAgICAgZm9ybWF0X2RpY3RbJ21pbmltdW13aWR0aCddID0gaW50KGZvcm1hdF9kaWN0WydtaW5pbXVtd2lkdGgnXSBvciAnMCcpCiAgICAgaWYgZm9ybWF0X2RpY3RbJ3ByZWNpc2lvbiddIGlzIG5vdCBOb25lOgpAQCAtNTUzNyw1OCArNTk2NCwxNzEgQEAKICAgICAgICAgaWYgZm9ybWF0X2RpY3RbJ3R5cGUnXSBpcyBOb25lIG9yIGZvcm1hdF9kaWN0Wyd0eXBlJ10gaW4gJ2dHJzoKICAgICAgICAgICAgIGZvcm1hdF9kaWN0WydwcmVjaXNpb24nXSA9IDEKIAorICAgICMgZGV0ZXJtaW5lIHRob3VzYW5kcyBzZXBhcmF0b3IsIGdyb3VwaW5nLCBhbmQgZGVjaW1hbCBzZXBhcmF0b3IsIGFuZAorICAgICMgYWRkIGFwcHJvcHJpYXRlIGVudHJpZXMgdG8gZm9ybWF0X2RpY3QKKyAgICBpZiBmb3JtYXRfZGljdFsndHlwZSddID09ICduJzoKKyAgICAgICAgIyBhcGFydCBmcm9tIHNlcGFyYXRvcnMsICduJyBiZWhhdmVzIGp1c3QgbGlrZSAnZycKKyAgICAgICAgZm9ybWF0X2RpY3RbJ3R5cGUnXSA9ICdnJworICAgICAgICBpZiBfbG9jYWxlY29udiBpcyBOb25lOgorICAgICAgICAgICAgX2xvY2FsZWNvbnYgPSBfbG9jYWxlLmxvY2FsZWNvbnYoKQorICAgICAgICBpZiBmb3JtYXRfZGljdFsndGhvdXNhbmRzX3NlcCddIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwbGljaXQgdGhvdXNhbmRzIHNlcGFyYXRvciBjb25mbGljdHMgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInbicgdHlwZSBpbiBmb3JtYXQgc3BlY2lmaWVyOiAiICsgZm9ybWF0X3NwZWMpCisgICAgICAgIGZvcm1hdF9kaWN0Wyd0aG91c2FuZHNfc2VwJ10gPSBfbG9jYWxlY29udlsndGhvdXNhbmRzX3NlcCddCisgICAgICAgIGZvcm1hdF9kaWN0Wydncm91cGluZyddID0gX2xvY2FsZWNvbnZbJ2dyb3VwaW5nJ10KKyAgICAgICAgZm9ybWF0X2RpY3RbJ2RlY2ltYWxfcG9pbnQnXSA9IF9sb2NhbGVjb252WydkZWNpbWFsX3BvaW50J10KKyAgICBlbHNlOgorICAgICAgICBpZiBmb3JtYXRfZGljdFsndGhvdXNhbmRzX3NlcCddIGlzIE5vbmU6CisgICAgICAgICAgICBmb3JtYXRfZGljdFsndGhvdXNhbmRzX3NlcCddID0gJycKKyAgICAgICAgZm9ybWF0X2RpY3RbJ2dyb3VwaW5nJ10gPSBbMywgMF0KKyAgICAgICAgZm9ybWF0X2RpY3RbJ2RlY2ltYWxfcG9pbnQnXSA9ICcuJworCiAgICAgIyByZWNvcmQgd2hldGhlciByZXR1cm4gdHlwZSBzaG91bGQgYmUgc3RyIG9yIHVuaWNvZGUKICAgICBmb3JtYXRfZGljdFsndW5pY29kZSddID0gaXNpbnN0YW5jZShmb3JtYXRfc3BlYywgdW5pY29kZSkKIAogICAgIHJldHVybiBmb3JtYXRfZGljdAogCi1kZWYgX2Zvcm1hdF9hbGlnbihib2R5LCBzcGVjX2RpY3QpOgotICAgICIiIkdpdmVuIGFuIHVucGFkZGVkLCBub24tYWxpZ25lZCBudW1lcmljIHN0cmluZywgYWRkIHBhZGRpbmcgYW5kCi0gICAgYWxpZ21lbnQgdG8gY29uZm9ybSB3aXRoIHRoZSBnaXZlbiBmb3JtYXQgc3BlY2lmaWVyIGRpY3Rpb25hcnkgKGFzCi0gICAgb3V0cHV0IGZyb20gcGFyc2VfZm9ybWF0X3NwZWNpZmllcikuCitkZWYgX2Zvcm1hdF9hbGlnbihzaWduLCBib2R5LCBzcGVjKToKKyAgICAiIiJHaXZlbiBhbiB1bnBhZGRlZCwgbm9uLWFsaWduZWQgbnVtZXJpYyBzdHJpbmcgJ2JvZHknIGFuZCBzaWduCisgICAgc3RyaW5nICdzaWduJywgYWRkIHBhZGRpbmcgYW5kIGFsaWdtZW50IGNvbmZvcm1pbmcgdG8gdGhlIGdpdmVuCisgICAgZm9ybWF0IHNwZWNpZmllciBkaWN0aW9uYXJ5ICdzcGVjJyAoYXMgcHJvZHVjZWQgYnkKKyAgICBwYXJzZV9mb3JtYXRfc3BlY2lmaWVyKS4KIAotICAgIEl0J3MgYXNzdW1lZCB0aGF0IGlmIGJvZHkgaXMgbmVnYXRpdmUgdGhlbiBpdCBzdGFydHMgd2l0aCAnLScuCi0gICAgQW55IGxlYWRpbmcgc2lnbiAoJy0nIG9yICcrJykgaXMgc3RyaXBwZWQgZnJvbSB0aGUgYm9keSBiZWZvcmUKLSAgICBhcHBseWluZyB0aGUgYWxpZ25tZW50IGFuZCBwYWRkaW5nIHJ1bGVzLCBhbmQgcmVwbGFjZWQgaW4gdGhlCi0gICAgYXBwcm9wcmlhdGUgcG9zaXRpb24uCisgICAgQWxzbyBjb252ZXJ0cyByZXN1bHQgdG8gdW5pY29kZSBpZiBuZWNlc3NhcnkuCiAKICAgICAiIiIKLSAgICAjIGZpZ3VyZSBvdXQgdGhlIHNpZ247IHdlIG9ubHkgZXhhbWluZSB0aGUgZmlyc3QgY2hhcmFjdGVyLCBzbyBpZgotICAgICMgYm9keSBoYXMgbGVhZGluZyB3aGl0ZXNwYWNlIHRoZSByZXN1bHRzIG1heSBiZSBzdXJwcmlzaW5nLgotICAgIGlmIGxlbihib2R5KSA+IDAgYW5kIGJvZHlbMF0gaW4gJy0rJzoKLSAgICAgICAgc2lnbiA9IGJvZHlbMF0KLSAgICAgICAgYm9keSA9IGJvZHlbMTpdCi0gICAgZWxzZToKLSAgICAgICAgc2lnbiA9ICcnCi0KLSAgICBpZiBzaWduICE9ICctJzoKLSAgICAgICAgaWYgc3BlY19kaWN0WydzaWduJ10gaW4gJyArJzoKLSAgICAgICAgICAgIHNpZ24gPSBzcGVjX2RpY3RbJ3NpZ24nXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2lnbiA9ICcnCi0KICAgICAjIGhvdyBtdWNoIGV4dHJhIHNwYWNlIGRvIHdlIGhhdmUgdG8gcGxheSB3aXRoPwotICAgIG1pbmltdW13aWR0aCA9IHNwZWNfZGljdFsnbWluaW11bXdpZHRoJ10KLSAgICBmaWxsID0gc3BlY19kaWN0WydmaWxsJ10KLSAgICBwYWRkaW5nID0gZmlsbCoobWF4KG1pbmltdW13aWR0aCAtIChsZW4oc2lnbitib2R5KSksIDApKQorICAgIG1pbmltdW13aWR0aCA9IHNwZWNbJ21pbmltdW13aWR0aCddCisgICAgZmlsbCA9IHNwZWNbJ2ZpbGwnXQorICAgIHBhZGRpbmcgPSBmaWxsKihtaW5pbXVtd2lkdGggLSBsZW4oc2lnbikgLSBsZW4oYm9keSkpCiAKLSAgICBhbGlnbiA9IHNwZWNfZGljdFsnYWxpZ24nXQorICAgIGFsaWduID0gc3BlY1snYWxpZ24nXQogICAgIGlmIGFsaWduID09ICc8JzoKICAgICAgICAgcmVzdWx0ID0gc2lnbiArIGJvZHkgKyBwYWRkaW5nCiAgICAgZWxpZiBhbGlnbiA9PSAnPic6CiAgICAgICAgIHJlc3VsdCA9IHBhZGRpbmcgKyBzaWduICsgYm9keQogICAgIGVsaWYgYWxpZ24gPT0gJz0nOgogICAgICAgICByZXN1bHQgPSBzaWduICsgcGFkZGluZyArIGJvZHkKLSAgICBlbHNlOiAjYWxpZ24gPT0gJ14nCisgICAgZWxpZiBhbGlnbiA9PSAnXic6CiAgICAgICAgIGhhbGYgPSBsZW4ocGFkZGluZykvLzIKICAgICAgICAgcmVzdWx0ID0gcGFkZGluZ1s6aGFsZl0gKyBzaWduICsgYm9keSArIHBhZGRpbmdbaGFsZjpdCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5yZWNvZ25pc2VkIGFsaWdubWVudCBmaWVsZCcpCiAKICAgICAjIG1ha2Ugc3VyZSB0aGF0IHJlc3VsdCBpcyB1bmljb2RlIGlmIG5lY2Vzc2FyeQotICAgIGlmIHNwZWNfZGljdFsndW5pY29kZSddOgorICAgIGlmIHNwZWNbJ3VuaWNvZGUnXToKICAgICAgICAgcmVzdWx0ID0gdW5pY29kZShyZXN1bHQpCiAKICAgICByZXR1cm4gcmVzdWx0CiAKK2RlZiBfZ3JvdXBfbGVuZ3Rocyhncm91cGluZyk6CisgICAgIiIiQ29udmVydCBhIGxvY2FsZWNvbnYtc3R5bGUgZ3JvdXBpbmcgaW50byBhIChwb3NzaWJseSBpbmZpbml0ZSkKKyAgICBpdGVyYWJsZSBvZiBpbnRlZ2VycyByZXByZXNlbnRpbmcgZ3JvdXAgbGVuZ3Rocy4KKworICAgICIiIgorICAgICMgVGhlIHJlc3VsdCBmcm9tIGxvY2FsZWNvbnYoKVsnZ3JvdXBpbmcnXSwgYW5kIHRoZSBpbnB1dCB0byB0aGlzCisgICAgIyBmdW5jdGlvbiwgc2hvdWxkIGJlIGEgbGlzdCBvZiBpbnRlZ2VycyBpbiBvbmUgb2YgdGhlCisgICAgIyBmb2xsb3dpbmcgdGhyZWUgZm9ybXM6CisgICAgIworICAgICMgICAoMSkgYW4gZW1wdHkgbGlzdCwgb3IKKyAgICAjICAgKDIpIG5vbmVtcHR5IGxpc3Qgb2YgcG9zaXRpdmUgaW50ZWdlcnMgKyBbMF0KKyAgICAjICAgKDMpIGxpc3Qgb2YgcG9zaXRpdmUgaW50ZWdlcnMgKyBbbG9jYWxlLkNIQVJfTUFYXSwgb3IKKworICAgIGZyb20gaXRlcnRvb2xzIGltcG9ydCBjaGFpbiwgcmVwZWF0CisgICAgaWYgbm90IGdyb3VwaW5nOgorICAgICAgICByZXR1cm4gW10KKyAgICBlbGlmIGdyb3VwaW5nWy0xXSA9PSAwIGFuZCBsZW4oZ3JvdXBpbmcpID49IDI6CisgICAgICAgIHJldHVybiBjaGFpbihncm91cGluZ1s6LTFdLCByZXBlYXQoZ3JvdXBpbmdbLTJdKSkKKyAgICBlbGlmIGdyb3VwaW5nWy0xXSA9PSBfbG9jYWxlLkNIQVJfTUFYOgorICAgICAgICByZXR1cm4gZ3JvdXBpbmdbOi0xXQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VucmVjb2duaXNlZCBmb3JtYXQgZm9yIGdyb3VwaW5nJykKKworZGVmIF9pbnNlcnRfdGhvdXNhbmRzX3NlcChkaWdpdHMsIHNwZWMsIG1pbl93aWR0aD0xKToKKyAgICAiIiJJbnNlcnQgdGhvdXNhbmRzIHNlcGFyYXRvcnMgaW50byBhIGRpZ2l0IHN0cmluZy4KKworICAgIHNwZWMgaXMgYSBkaWN0aW9uYXJ5IHdob3NlIGtleXMgc2hvdWxkIGluY2x1ZGUgJ3Rob3VzYW5kc19zZXAnIGFuZAorICAgICdncm91cGluZyc7IHR5cGljYWxseSBpdCdzIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgZm9ybWF0CisgICAgc3BlY2lmaWVyIHVzaW5nIF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyLgorCisgICAgVGhlIG1pbl93aWR0aCBrZXl3b3JkIGFyZ3VtZW50IGdpdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBvZiB0aGUKKyAgICByZXN1bHQsIHdoaWNoIHdpbGwgYmUgcGFkZGVkIG9uIHRoZSBsZWZ0IHdpdGggemVyb3MgaWYgbmVjZXNzYXJ5LgorCisgICAgSWYgbmVjZXNzYXJ5LCB0aGUgemVybyBwYWRkaW5nIGFkZHMgYW4gZXh0cmEgJzAnIG9uIHRoZSBsZWZ0IHRvCisgICAgYXZvaWQgYSBsZWFkaW5nIHRob3VzYW5kcyBzZXBhcmF0b3IuICBGb3IgZXhhbXBsZSwgaW5zZXJ0aW5nCisgICAgY29tbWFzIGV2ZXJ5IHRocmVlIGRpZ2l0cyBpbiAnMTIzNDU2Jywgd2l0aCBtaW5fd2lkdGg9OCwgZ2l2ZXMKKyAgICAnMCwxMjMsNDU2JywgZXZlbiB0aG91Z2ggdGhhdCBoYXMgbGVuZ3RoIDkuCisKKyAgICAiIiIKKworICAgIHNlcCA9IHNwZWNbJ3Rob3VzYW5kc19zZXAnXQorICAgIGdyb3VwaW5nID0gc3BlY1snZ3JvdXBpbmcnXQorCisgICAgZ3JvdXBzID0gW10KKyAgICBmb3IgbCBpbiBfZ3JvdXBfbGVuZ3Rocyhncm91cGluZyk6CisgICAgICAgIGlmIGwgPD0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImdyb3VwIGxlbmd0aCBzaG91bGQgYmUgcG9zaXRpdmUiKQorICAgICAgICAjIG1heCguLi4sIDEpIGZvcmNlcyBhdCBsZWFzdCAxIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIGEgc2VwYXJhdG9yCisgICAgICAgIGwgPSBtaW4obWF4KGxlbihkaWdpdHMpLCBtaW5fd2lkdGgsIDEpLCBsKQorICAgICAgICBncm91cHMuYXBwZW5kKCcwJyoobCAtIGxlbihkaWdpdHMpKSArIGRpZ2l0c1stbDpdKQorICAgICAgICBkaWdpdHMgPSBkaWdpdHNbOi1sXQorICAgICAgICBtaW5fd2lkdGggLT0gbAorICAgICAgICBpZiBub3QgZGlnaXRzIGFuZCBtaW5fd2lkdGggPD0gMDoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIG1pbl93aWR0aCAtPSBsZW4oc2VwKQorICAgIGVsc2U6CisgICAgICAgIGwgPSBtYXgobGVuKGRpZ2l0cyksIG1pbl93aWR0aCwgMSkKKyAgICAgICAgZ3JvdXBzLmFwcGVuZCgnMCcqKGwgLSBsZW4oZGlnaXRzKSkgKyBkaWdpdHNbLWw6XSkKKyAgICByZXR1cm4gc2VwLmpvaW4ocmV2ZXJzZWQoZ3JvdXBzKSkKKworZGVmIF9mb3JtYXRfc2lnbihpc19uZWdhdGl2ZSwgc3BlYyk6CisgICAgIiIiRGV0ZXJtaW5lIHNpZ24gY2hhcmFjdGVyLiIiIgorCisgICAgaWYgaXNfbmVnYXRpdmU6CisgICAgICAgIHJldHVybiAnLScKKyAgICBlbGlmIHNwZWNbJ3NpZ24nXSBpbiAnICsnOgorICAgICAgICByZXR1cm4gc3BlY1snc2lnbiddCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICcnCisKK2RlZiBfZm9ybWF0X251bWJlcihpc19uZWdhdGl2ZSwgaW50cGFydCwgZnJhY3BhcnQsIGV4cCwgc3BlYyk6CisgICAgIiIiRm9ybWF0IGEgbnVtYmVyLCBnaXZlbiB0aGUgZm9sbG93aW5nIGRhdGE6CisKKyAgICBpc19uZWdhdGl2ZTogdHJ1ZSBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlLCBlbHNlIGZhbHNlCisgICAgaW50cGFydDogc3RyaW5nIG9mIGRpZ2l0cyB0aGF0IG11c3QgYXBwZWFyIGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludAorICAgIGZyYWNwYXJ0OiBzdHJpbmcgb2YgZGlnaXRzIHRoYXQgbXVzdCBjb21lIGFmdGVyIHRoZSBwb2ludAorICAgIGV4cDogZXhwb25lbnQsIGFzIGFuIGludGVnZXIKKyAgICBzcGVjOiBkaWN0aW9uYXJ5IHJlc3VsdGluZyBmcm9tIHBhcnNpbmcgdGhlIGZvcm1hdCBzcGVjaWZpZXIKKworICAgIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgaW5mb3JtYXRpb24gaW4gc3BlYyB0bzoKKyAgICAgIGluc2VydCBzZXBhcmF0b3JzIChkZWNpbWFsIHNlcGFyYXRvciBhbmQgdGhvdXNhbmRzIHNlcGFyYXRvcnMpCisgICAgICBmb3JtYXQgdGhlIHNpZ24KKyAgICAgIGZvcm1hdCB0aGUgZXhwb25lbnQKKyAgICAgIGFkZCB0cmFpbGluZyAnJScgZm9yIHRoZSAnJScgdHlwZQorICAgICAgemVyby1wYWQgaWYgbmVjZXNzYXJ5CisgICAgICBmaWxsIGFuZCBhbGlnbiBpZiBuZWNlc3NhcnkKKyAgICAiIiIKKworICAgIHNpZ24gPSBfZm9ybWF0X3NpZ24oaXNfbmVnYXRpdmUsIHNwZWMpCisKKyAgICBpZiBmcmFjcGFydDoKKyAgICAgICAgZnJhY3BhcnQgPSBzcGVjWydkZWNpbWFsX3BvaW50J10gKyBmcmFjcGFydAorCisgICAgaWYgZXhwICE9IDAgb3Igc3BlY1sndHlwZSddIGluICdlRSc6CisgICAgICAgIGVjaGFyID0geydFJzogJ0UnLCAnZSc6ICdlJywgJ0cnOiAnRScsICdnJzogJ2UnfVtzcGVjWyd0eXBlJ11dCisgICAgICAgIGZyYWNwYXJ0ICs9ICJ7MH17MTorfSIuZm9ybWF0KGVjaGFyLCBleHApCisgICAgaWYgc3BlY1sndHlwZSddID09ICclJzoKKyAgICAgICAgZnJhY3BhcnQgKz0gJyUnCisKKyAgICBpZiBzcGVjWyd6ZXJvcGFkJ106CisgICAgICAgIG1pbl93aWR0aCA9IHNwZWNbJ21pbmltdW13aWR0aCddIC0gbGVuKGZyYWNwYXJ0KSAtIGxlbihzaWduKQorICAgIGVsc2U6CisgICAgICAgIG1pbl93aWR0aCA9IDAKKyAgICBpbnRwYXJ0ID0gX2luc2VydF90aG91c2FuZHNfc2VwKGludHBhcnQsIHNwZWMsIG1pbl93aWR0aCkKKworICAgIHJldHVybiBfZm9ybWF0X2FsaWduKHNpZ24sIGludHBhcnQrZnJhY3BhcnQsIHNwZWMpCisKKwogIyMjIyMgVXNlZnVsIENvbnN0YW50cyAoaW50ZXJuYWwgdXNlIG9ubHkpICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICMgUmV1c2FibGUgZGVmYXVsdHMKZGlmZiAtLWdpdCBhL0xpYi9kaWZmbGliLnB5IGIvTGliL2RpZmZsaWIucHkKaW5kZXggYjQzZGM5Ny4uZTU5MTBiYyAxMDA2NDQKLS0tIGEvTGliL2RpZmZsaWIucHkKKysrIGIvTGliL2RpZmZsaWIucHkKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICBSZXR1cm4gYW4gdXBwZXIgYm91bmQgb24gcmF0aW8oKSB2ZXJ5IHF1aWNrbHkuCiAgICAgIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaXNqdW5rPU5vbmUsIGE9JycsIGI9JycpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpc2p1bms9Tm9uZSwgYT0nJywgYj0nJywgYXV0b2p1bms9VHJ1ZSk6CiAgICAgICAgICIiIkNvbnN0cnVjdCBhIFNlcXVlbmNlTWF0Y2hlci4KIAogICAgICAgICBPcHRpb25hbCBhcmcgaXNqdW5rIGlzIE5vbmUgKHRoZSBkZWZhdWx0KSwgb3IgYSBvbmUtYXJndW1lbnQKQEAgLTE2OSw2ICsxNjksMTAgQEAKICAgICAgICAgT3B0aW9uYWwgYXJnIGIgaXMgdGhlIHNlY29uZCBvZiB0d28gc2VxdWVuY2VzIHRvIGJlIGNvbXBhcmVkLiAgQnkKICAgICAgICAgZGVmYXVsdCwgYW4gZW1wdHkgc3RyaW5nLiAgVGhlIGVsZW1lbnRzIG9mIGIgbXVzdCBiZSBoYXNoYWJsZS4gU2VlCiAgICAgICAgIGFsc28gLnNldF9zZXFzKCkgYW5kIC5zZXRfc2VxMigpLgorCisgICAgICAgIE9wdGlvbmFsIGFyZyBhdXRvanVuayBzaG91bGQgYmUgc2V0IHRvIEZhbHNlIHRvIGRpc2FibGUgdGhlCisgICAgICAgICJhdXRvbWF0aWMganVuayBoZXVyaXN0aWMiIHRoYXQgdHJlYXRzIHBvcHVsYXIgZWxlbWVudHMgYXMganVuaworICAgICAgICAoc2VlIG1vZHVsZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KICAgICAgICAgIiIiCiAKICAgICAgICAgIyBNZW1iZXJzOgpAQCAtMjA3LDExICsyMTEsMTMgQEAKICAgICAgICAgIyAgICAgIERPRVMgTk9UIFdPUksgZm9yIHggaW4gYSEKICAgICAgICAgIyBpc2Jwb3B1bGFyCiAgICAgICAgICMgICAgICBmb3IgeCBpbiBiLCBpc2Jwb3B1bGFyKHgpIGlzIHRydWUgaWZmIGIgaXMgcmVhc29uYWJseSBsb25nCi0gICAgICAgICMgICAgICAoYXQgbGVhc3QgMjAwIGVsZW1lbnRzKSBhbmQgeCBhY2NvdW50cyBmb3IgbW9yZSB0aGFuIDElIG9mCi0gICAgICAgICMgICAgICBpdHMgZWxlbWVudHMuICBET0VTIE5PVCBXT1JLIGZvciB4IGluIGEhCisgICAgICAgICMgICAgICAoYXQgbGVhc3QgMjAwIGVsZW1lbnRzKSBhbmQgeCBhY2NvdW50cyBmb3IgbW9yZSB0aGFuIDEgKyAxJSBvZgorICAgICAgICAjICAgICAgaXRzIGVsZW1lbnRzICh3aGVuIGF1dG9qdW5rIGlzIGVuYWJsZWQpLgorICAgICAgICAjICAgICAgRE9FUyBOT1QgV09SSyBmb3IgeCBpbiBhIQogCiAgICAgICAgIHNlbGYuaXNqdW5rID0gaXNqdW5rCiAgICAgICAgIHNlbGYuYSA9IHNlbGYuYiA9IE5vbmUKKyAgICAgICAgc2VsZi5hdXRvanVuayA9IGF1dG9qdW5rCiAgICAgICAgIHNlbGYuc2V0X3NlcXMoYSwgYikKIAogICAgIGRlZiBzZXRfc2VxcyhzZWxmLCBhLCBiKToKQEAgLTI4OCw3ICsyOTQsNyBAQAogICAgICMgZnJvbSBzdGFydGluZyBhbnkgbWF0Y2hpbmcgYmxvY2sgYXQgYSBqdW5rIGVsZW1lbnQgLi4uCiAgICAgIyBhbHNvIGNyZWF0ZXMgdGhlIGZhc3QgaXNianVuayBmdW5jdGlvbiAuLi4KICAgICAjIGIyaiBhbHNvIGRvZXMgbm90IGNvbnRhaW4gZW50cmllcyBmb3IgInBvcHVsYXIiIGVsZW1lbnRzLCBtZWFuaW5nCi0gICAgIyBlbGVtZW50cyB0aGF0IGFjY291bnQgZm9yIG1vcmUgdGhhbiAxJSBvZiB0aGUgdG90YWwgZWxlbWVudHMsIGFuZAorICAgICMgZWxlbWVudHMgdGhhdCBhY2NvdW50IGZvciBtb3JlIHRoYW4gMSArIDElIG9mIHRoZSB0b3RhbCBlbGVtZW50cywgYW5kCiAgICAgIyB3aGVuIHRoZSBzZXF1ZW5jZSBpcyByZWFzb25hYmx5IGxhcmdlICg+PSAyMDAgZWxlbWVudHMpOyB0aGlzIGNhbgogICAgICMgYmUgdmlld2VkIGFzIGFuIGFkYXB0aXZlIG5vdGlvbiBvZiBzZW1pLWp1bmssIGFuZCB5aWVsZHMgYW4gZW5vcm1vdXMKICAgICAjIHNwZWVkdXAgd2hlbiwgZS5nLiwgY29tcGFyaW5nIHByb2dyYW0gZmlsZXMgd2l0aCBodW5kcmVkcyBvZgpAQCAtMzA5LDQ0ICszMTUsMzcgQEAKICAgICAgICAgIyBvdXQgdGhlIGp1bmsgbGF0ZXIgaXMgbXVjaCBjaGVhcGVyIHRoYW4gYnVpbGRpbmcgYjJqICJyaWdodCIKICAgICAgICAgIyBmcm9tIHRoZSBzdGFydC4KICAgICAgICAgYiA9IHNlbGYuYgotICAgICAgICBuID0gbGVuKGIpCiAgICAgICAgIHNlbGYuYjJqID0gYjJqID0ge30KLSAgICAgICAgcG9wdWxhcmRpY3QgPSB7fQorCiAgICAgICAgIGZvciBpLCBlbHQgaW4gZW51bWVyYXRlKGIpOgotICAgICAgICAgICAgaWYgZWx0IGluIGIyajoKLSAgICAgICAgICAgICAgICBpbmRpY2VzID0gYjJqW2VsdF0KLSAgICAgICAgICAgICAgICBpZiBuID49IDIwMCBhbmQgbGVuKGluZGljZXMpICogMTAwID4gbjoKLSAgICAgICAgICAgICAgICAgICAgcG9wdWxhcmRpY3RbZWx0XSA9IDEKLSAgICAgICAgICAgICAgICAgICAgZGVsIGluZGljZXNbOl0KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLmFwcGVuZChpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBiMmpbZWx0XSA9IFtpXQorICAgICAgICAgICAgaW5kaWNlcyA9IGIyai5zZXRkZWZhdWx0KGVsdCwgW10pCisgICAgICAgICAgICBpbmRpY2VzLmFwcGVuZChpKQogCi0gICAgICAgICMgUHVyZ2UgbGVmdG92ZXIgaW5kaWNlcyBmb3IgcG9wdWxhciBlbGVtZW50cy4KLSAgICAgICAgZm9yIGVsdCBpbiBwb3B1bGFyZGljdDoKLSAgICAgICAgICAgIGRlbCBiMmpbZWx0XQotCi0gICAgICAgICMgTm93IGIyai5rZXlzKCkgY29udGFpbnMgZWxlbWVudHMgdW5pcXVlbHksIGFuZCBlc3BlY2lhbGx5IHdoZW4KLSAgICAgICAgIyB0aGUgc2VxdWVuY2UgaXMgYSBzdHJpbmcsIHRoYXQncyB1c3VhbGx5IGEgZ29vZCBkZWFsIHNtYWxsZXIKLSAgICAgICAgIyB0aGFuIGxlbihzdHJpbmcpLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhlIG51bWJlciBvZiBpc2p1bmsgY2FsbHMKLSAgICAgICAgIyBzYXZlZC4KKyAgICAgICAgIyBQdXJnZSBqdW5rIGVsZW1lbnRzCisgICAgICAgIGp1bmsgPSBzZXQoKQogICAgICAgICBpc2p1bmsgPSBzZWxmLmlzanVuawotICAgICAgICBqdW5rZGljdCA9IHt9CiAgICAgICAgIGlmIGlzanVuazoKLSAgICAgICAgICAgIGZvciBkIGluIHBvcHVsYXJkaWN0LCBiMmo6Ci0gICAgICAgICAgICAgICAgZm9yIGVsdCBpbiBkLmtleXMoKToKLSAgICAgICAgICAgICAgICAgICAgaWYgaXNqdW5rKGVsdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBqdW5rZGljdFtlbHRdID0gMQotICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGRbZWx0XQorICAgICAgICAgICAgZm9yIGVsdCBpbiBsaXN0KGIyai5rZXlzKCkpOiAgIyB1c2luZyBsaXN0KCkgc2luY2UgYjJqIGlzIG1vZGlmaWVkCisgICAgICAgICAgICAgICAgaWYgaXNqdW5rKGVsdCk6CisgICAgICAgICAgICAgICAgICAgIGp1bmsuYWRkKGVsdCkKKyAgICAgICAgICAgICAgICAgICAgZGVsIGIyaltlbHRdCiAKLSAgICAgICAgIyBOb3cgZm9yIHggaW4gYiwgaXNqdW5rKHgpID09IHggaW4ganVua2RpY3QsIGJ1dCB0aGUKLSAgICAgICAgIyBsYXR0ZXIgaXMgbXVjaCBmYXN0ZXIuICBOb3RlIHRvbyB0aGF0IHdoaWxlIHRoZXJlIG1heSBiZSBhCi0gICAgICAgICMgbG90IG9mIGp1bmsgaW4gdGhlIHNlcXVlbmNlLCB0aGUgbnVtYmVyIG9mICp1bmlxdWUqIGp1bmsKLSAgICAgICAgIyBlbGVtZW50cyBpcyBwcm9iYWJseSBzbWFsbC4gIFNvIHRoZSBtZW1vcnkgYnVyZGVuIG9mIGtlZXBpbmcKLSAgICAgICAgIyB0aGlzIGRpY3QgYWxpdmUgaXMgbGlrZWx5IHRyaXZpYWwgY29tcGFyZWQgdG8gdGhlIHNpemUgb2YgYjJqLgotICAgICAgICBzZWxmLmlzYmp1bmsgPSBqdW5rZGljdC5fX2NvbnRhaW5zX18KLSAgICAgICAgc2VsZi5pc2Jwb3B1bGFyID0gcG9wdWxhcmRpY3QuX19jb250YWluc19fCisgICAgICAgICMgUHVyZ2UgcG9wdWxhciBlbGVtZW50cyB0aGF0IGFyZSBub3QganVuaworICAgICAgICBwb3B1bGFyID0gc2V0KCkKKyAgICAgICAgbiA9IGxlbihiKQorICAgICAgICBpZiBzZWxmLmF1dG9qdW5rIGFuZCBuID49IDIwMDoKKyAgICAgICAgICAgIG50ZXN0ID0gbiAvLyAxMDAgKyAxCisgICAgICAgICAgICBmb3IgZWx0LCBpZHhzIGluIGxpc3QoYjJqLml0ZW1zKCkpOgorICAgICAgICAgICAgICAgIGlmIGxlbihpZHhzKSA+IG50ZXN0OgorICAgICAgICAgICAgICAgICAgICBwb3B1bGFyLmFkZChlbHQpCisgICAgICAgICAgICAgICAgICAgIGRlbCBiMmpbZWx0XQorCisgICAgICAgICMgTm93IGZvciB4IGluIGIsIGlzanVuayh4KSA9PSB4IGluIGp1bmssIGJ1dCB0aGUgbGF0dGVyIGlzIG11Y2ggZmFzdGVyLgorICAgICAgICAjIFNpY25lIHRoZSBudW1iZXIgb2YgKnVuaXF1ZSoganVuayBlbGVtZW50cyBpcyBwcm9iYWJseSBzbWFsbCwgdGhlCisgICAgICAgICMgbWVtb3J5IGJ1cmRlbiBvZiBrZWVwaW5nIHRoaXMgc2V0IGFsaXZlIGlzIGxpa2VseSB0cml2aWFsIGNvbXBhcmVkIHRvCisgICAgICAgICMgdGhlIHNpemUgb2YgYjJqLgorICAgICAgICBzZWxmLmlzYmp1bmsgPSBqdW5rLl9fY29udGFpbnNfXworICAgICAgICBzZWxmLmlzYnBvcHVsYXIgPSBwb3B1bGFyLl9fY29udGFpbnNfXwogCiAgICAgZGVmIGZpbmRfbG9uZ2VzdF9tYXRjaChzZWxmLCBhbG8sIGFoaSwgYmxvLCBiaGkpOgogICAgICAgICAiIiJGaW5kIGxvbmdlc3QgbWF0Y2hpbmcgYmxvY2sgaW4gYVthbG86YWhpXSBhbmQgYltibG86YmhpXS4KQEAgLTExNjEsMTggKzExNjAsMTggQEAKIAogICAgIFRoZSB1bmlkaWZmIGZvcm1hdCBub3JtYWxseSBoYXMgYSBoZWFkZXIgZm9yIGZpbGVuYW1lcyBhbmQgbW9kaWZpY2F0aW9uCiAgICAgdGltZXMuICBBbnkgb3IgYWxsIG9mIHRoZXNlIG1heSBiZSBzcGVjaWZpZWQgdXNpbmcgc3RyaW5ncyBmb3IKLSAgICAnZnJvbWZpbGUnLCAndG9maWxlJywgJ2Zyb21maWxlZGF0ZScsIGFuZCAndG9maWxlZGF0ZScuICBUaGUgbW9kaWZpY2F0aW9uCi0gICAgdGltZXMgYXJlIG5vcm1hbGx5IGV4cHJlc3NlZCBpbiB0aGUgZm9ybWF0IHJldHVybmVkIGJ5IHRpbWUuY3RpbWUoKS4KKyAgICAnZnJvbWZpbGUnLCAndG9maWxlJywgJ2Zyb21maWxlZGF0ZScsIGFuZCAndG9maWxlZGF0ZScuCisgICAgVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkgZXhwcmVzc2VkIGluIHRoZSBJU08gODYwMSBmb3JtYXQuCiAKICAgICBFeGFtcGxlOgogCiAgICAgPj4+IGZvciBsaW5lIGluIHVuaWZpZWRfZGlmZignb25lIHR3byB0aHJlZSBmb3VyJy5zcGxpdCgpLAogICAgIC4uLiAgICAgICAgICAgICAnemVybyBvbmUgdHJlZSBmb3VyJy5zcGxpdCgpLCAnT3JpZ2luYWwnLCAnQ3VycmVudCcsCi0gICAgLi4uICAgICAgICAgICAgICdTYXQgSmFuIDI2IDIzOjMwOjUwIDE5OTEnLCAnRnJpIEp1biAwNiAxMDoyMDo1MiAyMDAzJywKKyAgICAuLi4gICAgICAgICAgICAgJzIwMDUtMDEtMjYgMjM6MzA6NTAnLCAnMjAxMC0wNC0wMiAxMDoyMDo1MicsCiAgICAgLi4uICAgICAgICAgICAgIGxpbmV0ZXJtPScnKToKLSAgICAuLi4gICAgIHByaW50IGxpbmUKLSAgICAtLS0gT3JpZ2luYWwgU2F0IEphbiAyNiAyMzozMDo1MCAxOTkxCi0gICAgKysrIEN1cnJlbnQgRnJpIEp1biAwNiAxMDoyMDo1MiAyMDAzCisgICAgLi4uICAgICBwcmludCBsaW5lICAgICAgICAgICAgICAgICAgIyBkb2N0ZXN0OiArTk9STUFMSVpFX1dISVRFU1BBQ0UKKyAgICAtLS0gT3JpZ2luYWwgICAgICAgIDIwMDUtMDEtMjYgMjM6MzA6NTAKKyAgICArKysgQ3VycmVudCAgICAgICAgIDIwMTAtMDQtMDIgMTA6MjA6NTIKICAgICBAQCAtMSw0ICsxLDQgQEAKICAgICAremVybwogICAgICBvbmUKQEAgLTExODUsOCArMTE4NCwxMCBAQAogICAgIHN0YXJ0ZWQgPSBGYWxzZQogICAgIGZvciBncm91cCBpbiBTZXF1ZW5jZU1hdGNoZXIoTm9uZSxhLGIpLmdldF9ncm91cGVkX29wY29kZXMobik6CiAgICAgICAgIGlmIG5vdCBzdGFydGVkOgotICAgICAgICAgICAgeWllbGQgJy0tLSAlcyAlcyVzJyAlIChmcm9tZmlsZSwgZnJvbWZpbGVkYXRlLCBsaW5ldGVybSkKLSAgICAgICAgICAgIHlpZWxkICcrKysgJXMgJXMlcycgJSAodG9maWxlLCB0b2ZpbGVkYXRlLCBsaW5ldGVybSkKKyAgICAgICAgICAgIGZyb21kYXRlID0gJ1x0JXMnICUgZnJvbWZpbGVkYXRlIGlmIGZyb21maWxlZGF0ZSBlbHNlICcnCisgICAgICAgICAgICB0b2RhdGUgPSAnXHQlcycgJSB0b2ZpbGVkYXRlIGlmIHRvZmlsZWRhdGUgZWxzZSAnJworICAgICAgICAgICAgeWllbGQgJy0tLSAlcyVzJXMnICUgKGZyb21maWxlLCBmcm9tZGF0ZSwgbGluZXRlcm0pCisgICAgICAgICAgICB5aWVsZCAnKysrICVzJXMlcycgJSAodG9maWxlLCB0b2RhdGUsIGxpbmV0ZXJtKQogICAgICAgICAgICAgc3RhcnRlZCA9IFRydWUKICAgICAgICAgaTEsIGkyLCBqMSwgajIgPSBncm91cFswXVsxXSwgZ3JvdXBbLTFdWzJdLCBncm91cFswXVszXSwgZ3JvdXBbLTFdWzRdCiAgICAgICAgIHlpZWxkICJAQCAtJWQsJWQgKyVkLCVkIEBAJXMiICUgKGkxKzEsIGkyLWkxLCBqMSsxLCBqMi1qMSwgbGluZXRlcm0pCkBAIC0xMjI0LDE2ICsxMjI1LDE1IEBACiAgICAgVGhlIGNvbnRleHQgZGlmZiBmb3JtYXQgbm9ybWFsbHkgaGFzIGEgaGVhZGVyIGZvciBmaWxlbmFtZXMgYW5kCiAgICAgbW9kaWZpY2F0aW9uIHRpbWVzLiAgQW55IG9yIGFsbCBvZiB0aGVzZSBtYXkgYmUgc3BlY2lmaWVkIHVzaW5nCiAgICAgc3RyaW5ncyBmb3IgJ2Zyb21maWxlJywgJ3RvZmlsZScsICdmcm9tZmlsZWRhdGUnLCBhbmQgJ3RvZmlsZWRhdGUnLgotICAgIFRoZSBtb2RpZmljYXRpb24gdGltZXMgYXJlIG5vcm1hbGx5IGV4cHJlc3NlZCBpbiB0aGUgZm9ybWF0IHJldHVybmVkCi0gICAgYnkgdGltZS5jdGltZSgpLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIHN0cmluZ3MgZGVmYXVsdCB0byBibGFua3MuCisgICAgVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkgZXhwcmVzc2VkIGluIHRoZSBJU08gODYwMSBmb3JtYXQuCisgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIHN0cmluZ3MgZGVmYXVsdCB0byBibGFua3MuCiAKICAgICBFeGFtcGxlOgogCiAgICAgPj4+IHByaW50ICcnLmpvaW4oY29udGV4dF9kaWZmKCdvbmVcbnR3b1xudGhyZWVcbmZvdXJcbicuc3BsaXRsaW5lcygxKSwKLSAgICAuLi4gICAgICAgJ3plcm9cbm9uZVxudHJlZVxuZm91clxuJy5zcGxpdGxpbmVzKDEpLCAnT3JpZ2luYWwnLCAnQ3VycmVudCcsCi0gICAgLi4uICAgICAgICdTYXQgSmFuIDI2IDIzOjMwOjUwIDE5OTEnLCAnRnJpIEp1biAwNiAxMDoyMjo0NiAyMDAzJykpLAotICAgICoqKiBPcmlnaW5hbCBTYXQgSmFuIDI2IDIzOjMwOjUwIDE5OTEKLSAgICAtLS0gQ3VycmVudCBGcmkgSnVuIDA2IDEwOjIyOjQ2IDIwMDMKKyAgICAuLi4gICAgICAgJ3plcm9cbm9uZVxudHJlZVxuZm91clxuJy5zcGxpdGxpbmVzKDEpLCAnT3JpZ2luYWwnLCAnQ3VycmVudCcpKSwKKyAgICAqKiogT3JpZ2luYWwKKyAgICAtLS0gQ3VycmVudAogICAgICoqKioqKioqKioqKioqKgogICAgICoqKiAxLDQgKioqKgogICAgICAgb25lCkBAIC0xMjUxLDggKzEyNTEsMTAgQEAKICAgICBwcmVmaXhtYXAgPSB7J2luc2VydCc6JysgJywgJ2RlbGV0ZSc6Jy0gJywgJ3JlcGxhY2UnOichICcsICdlcXVhbCc6JyAgJ30KICAgICBmb3IgZ3JvdXAgaW4gU2VxdWVuY2VNYXRjaGVyKE5vbmUsYSxiKS5nZXRfZ3JvdXBlZF9vcGNvZGVzKG4pOgogICAgICAgICBpZiBub3Qgc3RhcnRlZDoKLSAgICAgICAgICAgIHlpZWxkICcqKiogJXMgJXMlcycgJSAoZnJvbWZpbGUsIGZyb21maWxlZGF0ZSwgbGluZXRlcm0pCi0gICAgICAgICAgICB5aWVsZCAnLS0tICVzICVzJXMnICUgKHRvZmlsZSwgdG9maWxlZGF0ZSwgbGluZXRlcm0pCisgICAgICAgICAgICBmcm9tZGF0ZSA9ICdcdCVzJyAlIGZyb21maWxlZGF0ZSBpZiBmcm9tZmlsZWRhdGUgZWxzZSAnJworICAgICAgICAgICAgdG9kYXRlID0gJ1x0JXMnICUgdG9maWxlZGF0ZSBpZiB0b2ZpbGVkYXRlIGVsc2UgJycKKyAgICAgICAgICAgIHlpZWxkICcqKiogJXMlcyVzJyAlIChmcm9tZmlsZSwgZnJvbWRhdGUsIGxpbmV0ZXJtKQorICAgICAgICAgICAgeWllbGQgJy0tLSAlcyVzJXMnICUgKHRvZmlsZSwgdG9kYXRlLCBsaW5ldGVybSkKICAgICAgICAgICAgIHN0YXJ0ZWQgPSBUcnVlCiAKICAgICAgICAgeWllbGQgJyoqKioqKioqKioqKioqKiVzJyAlIChsaW5ldGVybSwpCmRpZmYgLS1naXQgYS9MaWIvZGlzLnB5IGIvTGliL2Rpcy5weQppbmRleCAzNWFlNTk1Li41YWEwOWM5IDEwMDY0NAotLS0gYS9MaWIvZGlzLnB5CisrKyBiL0xpYi9kaXMucHkKQEAgLTYsNyArNiw4IEBACiBmcm9tIG9wY29kZSBpbXBvcnQgKgogZnJvbSBvcGNvZGUgaW1wb3J0IF9fYWxsX18gYXMgX29wY29kZXNfYWxsCiAKLV9fYWxsX18gPSBbImRpcyIsImRpc2Fzc2VtYmxlIiwiZGlzdGIiLCJkaXNjbyJdICsgX29wY29kZXNfYWxsCitfX2FsbF9fID0gWyJkaXMiLCAiZGlzYXNzZW1ibGUiLCAiZGlzdGIiLCAiZGlzY28iLAorICAgICAgICAgICAiZmluZGxpbmVzdGFydHMiLCAiZmluZGxhYmVscyJdICsgX29wY29kZXNfYWxsCiBkZWwgX29wY29kZXNfYWxsCiAKIF9oYXZlX2NvZGUgPSAodHlwZXMuTWV0aG9kVHlwZSwgdHlwZXMuRnVuY3Rpb25UeXBlLCB0eXBlcy5Db2RlVHlwZSwKQEAgLTIxLDcgKzIyLDcgQEAKICAgICBpZiB4IGlzIE5vbmU6CiAgICAgICAgIGRpc3RiKCkKICAgICAgICAgcmV0dXJuCi0gICAgaWYgdHlwZSh4KSBpcyB0eXBlcy5JbnN0YW5jZVR5cGU6CisgICAgaWYgaXNpbnN0YW5jZSh4LCB0eXBlcy5JbnN0YW5jZVR5cGUpOgogICAgICAgICB4ID0geC5fX2NsYXNzX18KICAgICBpZiBoYXNhdHRyKHgsICdpbV9mdW5jJyk6CiAgICAgICAgIHggPSB4LmltX2Z1bmMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvUkVBRE1FIGIvTGliL2Rpc3R1dGlscy9SRUFETUUKaW5kZXggNDVjN2NhOC4uNDA4YTIwMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9SRUFETUUKKysrIGIvTGliL2Rpc3R1dGlscy9SRUFETUUKQEAgLTEsMjIgKzEsMTMgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIG9ubHkgYSBzdWJzZXQgb2YgdGhlIERpc3R1dGlscywgc3BlY2lmaWNhbGx5Ci10aGUgUHl0aG9uIG1vZHVsZXMgaW4gdGhlICdkaXN0dXRpbHMnIGFuZCAnZGlzdHV0aWxzLmNvbW1hbmQnCi1wYWNrYWdlcy4gIFRoaXMgaXMgYWxsIHlvdSBuZWVkIHRvIGRpc3RyaWJ1dGUgYW5kIGluc3RhbGwgUHl0aG9uCi1tb2R1bGVzIHVzaW5nIHRoZSBEaXN0dXRpbHMuICBUaGVyZSBpcyBhbHNvIGEgc2VwYXJhdGVseSBwYWNrYWdlZAotc3RhbmRhbG9uZSB2ZXJzaW9uIG9mIHRoZSBEaXN0dXRpbHMgYXZhaWxhYmxlIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8KLXVwZ3JhZGUgdGhlIERpc3R1dGlscyB3aXRob3V0IHVwZ3JhZGluZyBQeXRob24sIGF2YWlsYWJsZSBmcm9tIHRoZQotRGlzdHV0aWxzIHdlYiBwYWdlOgorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIERpc3R1dGlscyBwYWNrYWdlLgorCitUaGVyZSdzIGEgZnVsbCBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBhdDoKKworICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGlzdHV0aWxzLworCitUaGUgRGlzdHV0aWxzLVNJRyB3ZWIgcGFnZSBpcyBhbHNvIGEgZ29vZCBzdGFydGluZyBwb2ludDoKIAogICAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zaWdzL2Rpc3R1dGlscy1zaWcvCiAKLVRoZSBzdGFuZGFsb25lIHZlcnNpb24gaW5jbHVkZXMgYWxsIG9mIHRoZSBjb2RlIGluIHRoaXMgZGlyZWN0b3J5LAotcGx1cyBkb2N1bWVudGF0aW9uLCB0ZXN0IHNjcmlwdHMsIGV4YW1wbGVzLCBldGMuCi0KLVRoZSBEaXN0dXRpbHMgZG9jdW1lbnRhdGlvbiBpcyBkaXZpZGVkIGludG8gdHdvIGRvY3VtZW50cywgIkluc3RhbGxpbmcKLVB5dGhvbiBNb2R1bGVzIiwgd2hpY2ggZXhwbGFpbnMgaG93IHRvIGluc3RhbGwgUHl0aG9uIHBhY2thZ2VzLCBhbmQKLSJEaXN0cmlidXRpbmcgUHl0aG9uIE1vZHVsZXMiLCB3aGljaCBleHBsYWlucyBob3cgdG8gd3JpdGUgc2V0dXAucHkKLWZpbGVzLiAgQm90aCBkb2N1bWVudHMgYXJlIHBhcnQgb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBkb2N1bWVudGF0aW9uCi1zZXQsIGFuZCBhcmUgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9jdXJyZW50LyAuCi0KLSAgICAgICAgR3JlZyBXYXJkIChnd2FyZEBweXRob24ubmV0KQorV0FSTklORyA6IERpc3R1dGlscyBtdXN0IHJlbWFpbiBjb21wYXRpYmxlIHdpdGggMi4zCiAKICRJZCQKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkgYi9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5CmluZGV4IDkwZjk2ZmUuLmE4MmQ0Y2IgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9fX2luaXRfXy5weQpAQCAtOCwxOSArOCwxMiBAQAogICAgc2V0dXAgKC4uLikKICIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAogIyBEaXN0dXRpbHMgdmVyc2lvbgogIwotIyBQbGVhc2UgY29vcmRpbmF0ZSB3aXRoIE1hcmMtQW5kcmUgTGVtYnVyZyA8bWFsQGVnZW5peC5jb20+IHdoZW4gYWRkaW5nCi0jIG5ldyBmZWF0dXJlcyB0byBkaXN0dXRpbHMgdGhhdCB3b3VsZCB3YXJyYW50IGJ1bXBpbmcgdGhlIHZlcnNpb24gbnVtYmVyLgorIyBVcGRhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFB5dGhvbiByZWxlYXNlIHByb2Nlc3MuCiAjCi0jIEluIGdlbmVyYWwsIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIHNob3VsZCBsb29zZWx5IGZvbGxvdyB0aGUgUHl0aG9uCi0jIHZlcnNpb24gbnVtYmVyIHRoZSBkaXN0dXRpbHMgY29kZSB3YXMgc2hpcHBlZCB3aXRoLgotIwotCiAjLS1zdGFydCBjb25zdGFudHMtLQotX192ZXJzaW9uX18gPSAiMi42LjYiCitfX3ZlcnNpb25fXyA9ICIyLjcuMSIKICMtLWVuZCBjb25zdGFudHMtLQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9hcmNoaXZlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQppbmRleCA3ODJkNGVmLi44MzRiNzIyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQpAQCAtMyw2NiArMywxMjkgQEAKIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBjcmVhdGluZyBhcmNoaXZlIGZpbGVzICh0YXJiYWxscywgemlwIGZpbGVzLAogdGhhdCBzb3J0IG9mIHRoaW5nKS4iIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKIGltcG9ydCBvcworZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgoraW1wb3J0IHN5cworCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvcgogZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgbWtwYXRoCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLWRlZiBtYWtlX3RhcmJhbGwgKGJhc2VfbmFtZSwgYmFzZV9kaXIsIGNvbXByZXNzPSJnemlwIiwKLSAgICAgICAgICAgICAgICAgIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKLSAgICAiIiJDcmVhdGUgYSAocG9zc2libHkgY29tcHJlc3NlZCkgdGFyIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyCi0gICAgJ2Jhc2VfZGlyJy4gICdjb21wcmVzcycgbXVzdCBiZSAiZ3ppcCIgKHRoZSBkZWZhdWx0KSwgImNvbXByZXNzIiwKLSAgICAiYnppcDIiLCBvciBOb25lLiAgQm90aCAidGFyIiBhbmQgdGhlIGNvbXByZXNzaW9uIHV0aWxpdHkgbmFtZWQgYnkKLSAgICAnY29tcHJlc3MnIG11c3QgYmUgb24gdGhlIGRlZmF1bHQgcHJvZ3JhbSBzZWFyY2ggcGF0aCwgc28gdGhpcyBpcwotICAgIHByb2JhYmx5IFVuaXgtc3BlY2lmaWMuICBUaGUgb3V0cHV0IHRhciBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Jhc2VfZGlyJyArCi0gICAgIi50YXIiLCBwb3NzaWJseSBwbHVzIHRoZSBhcHByb3ByaWF0ZSBjb21wcmVzc2lvbiBleHRlbnNpb24gKCIuZ3oiLAotICAgICIuYnoyIiBvciAiLloiKS4gIFJldHVybiB0aGUgb3V0cHV0IGZpbGVuYW1lLgotICAgICIiIgotICAgICMgWFhYIEdOVSB0YXIgMS4xMyBoYXMgYSBuaWZ0eSBvcHRpb24gdG8gYWRkIGEgcHJlZml4IGRpcmVjdG9yeS4KLSAgICAjIEl0J3MgcHJldHR5IG5ldywgdGhvdWdoLCBzbyB3ZSBjZXJ0YWlubHkgY2FuJ3QgcmVxdWlyZSBpdCAtLQotICAgICMgYnV0IGl0IHdvdWxkIGJlIG5pY2UgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQgdG8gc2tpcCB0aGUKLSAgICAjICJjcmVhdGUgYSB0cmVlIG9mIGhhcmRsaW5rcyIgc3RlcCEgIChXb3VsZCBhbHNvIGJlIG5pY2UgdG8KLSAgICAjIGRldGVjdCBHTlUgdGFyIHRvIHVzZSBpdHMgJ3onIG9wdGlvbiBhbmQgc2F2ZSBhIHN0ZXAuKQordHJ5OgorICAgIGZyb20gcHdkIGltcG9ydCBnZXRwd25hbQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdldHB3bmFtID0gTm9uZQogCi0gICAgY29tcHJlc3NfZXh0ID0geyAnZ3ppcCc6ICIuZ3oiLAotICAgICAgICAgICAgICAgICAgICAgJ2J6aXAyJzogJy5iejInLAotICAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzJzogIi5aIiB9Cit0cnk6CisgICAgZnJvbSBncnAgaW1wb3J0IGdldGdybmFtCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ2V0Z3JuYW0gPSBOb25lCisKK2RlZiBfZ2V0X2dpZChuYW1lKToKKyAgICAiIiJSZXR1cm5zIGEgZ2lkLCBnaXZlbiBhIGdyb3VwIG5hbWUuIiIiCisgICAgaWYgZ2V0Z3JuYW0gaXMgTm9uZSBvciBuYW1lIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSBnZXRncm5hbShuYW1lKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdFsyXQorICAgIHJldHVybiBOb25lCisKK2RlZiBfZ2V0X3VpZChuYW1lKToKKyAgICAiIiJSZXR1cm5zIGFuIHVpZCwgZ2l2ZW4gYSB1c2VyIG5hbWUuIiIiCisgICAgaWYgZ2V0cHduYW0gaXMgTm9uZSBvciBuYW1lIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSBnZXRwd25hbShuYW1lKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdFsyXQorICAgIHJldHVybiBOb25lCisKK2RlZiBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCBiYXNlX2RpciwgY29tcHJlc3M9Imd6aXAiLCB2ZXJib3NlPTAsIGRyeV9ydW49MCwKKyAgICAgICAgICAgICAgICAgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSk6CisgICAgIiIiQ3JlYXRlIGEgKHBvc3NpYmx5IGNvbXByZXNzZWQpIHRhciBmaWxlIGZyb20gYWxsIHRoZSBmaWxlcyB1bmRlcgorICAgICdiYXNlX2RpcicuCisKKyAgICAnY29tcHJlc3MnIG11c3QgYmUgImd6aXAiICh0aGUgZGVmYXVsdCksICJjb21wcmVzcyIsICJiemlwMiIsIG9yIE5vbmUuCisgICAgKGNvbXByZXNzIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yKQorCisgICAgJ293bmVyJyBhbmQgJ2dyb3VwJyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYW4gb3duZXIgYW5kIGEgZ3JvdXAgZm9yIHRoZQorICAgIGFyY2hpdmUgdGhhdCBpcyBiZWluZyBidWlsdC4gSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAKKyAgICB3aWxsIGJlIHVzZWQuCisKKyAgICBUaGUgb3V0cHV0IHRhciBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Jhc2VfZGlyJyArICAiLnRhciIsIHBvc3NpYmx5IHBsdXMKKyAgICB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6IiwgIi5iejIiIG9yICIuWiIpLgorCisgICAgUmV0dXJucyB0aGUgb3V0cHV0IGZpbGVuYW1lLgorICAgICIiIgorICAgIHRhcl9jb21wcmVzc2lvbiA9IHsnZ3ppcCc6ICdneicsICdiemlwMic6ICdiejInLCBOb25lOiAnJywgJ2NvbXByZXNzJzogJyd9CisgICAgY29tcHJlc3NfZXh0ID0geydnemlwJzogJy5neicsICdiemlwMic6ICcuYnoyJywgJ2NvbXByZXNzJzogJy5aJ30KIAogICAgICMgZmxhZ3MgZm9yIGNvbXByZXNzaW9uIHByb2dyYW0sIGVhY2ggZWxlbWVudCBvZiBsaXN0IHdpbGwgYmUgYW4gYXJndW1lbnQKLSAgICBjb21wcmVzc19mbGFncyA9IHsnZ3ppcCc6IFsiLWY5Il0sCi0gICAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzJzogWyItZiJdLAotICAgICAgICAgICAgICAgICAgICAgICdiemlwMic6IFsnLWY5J119Ci0KICAgICBpZiBjb21wcmVzcyBpcyBub3QgTm9uZSBhbmQgY29tcHJlc3Mgbm90IGluIGNvbXByZXNzX2V4dC5rZXlzKCk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsIFwKLSAgICAgICAgICAgICAgImJhZCB2YWx1ZSBmb3IgJ2NvbXByZXNzJzogbXVzdCBiZSBOb25lLCAnZ3ppcCcsIG9yICdjb21wcmVzcyciCisgICAgICAgICAgICAgICgiYmFkIHZhbHVlIGZvciAnY29tcHJlc3MnOiBtdXN0IGJlIE5vbmUsICdnemlwJywgJ2J6aXAyJyAiCisgICAgICAgICAgICAgICAib3IgJ2NvbXByZXNzJyIpCiAKLSAgICBhcmNoaXZlX25hbWUgPSBiYXNlX25hbWUgKyAiLnRhciIKKyAgICBhcmNoaXZlX25hbWUgPSBiYXNlX25hbWUgKyAnLnRhcicKKyAgICBpZiBjb21wcmVzcyAhPSAnY29tcHJlc3MnOgorICAgICAgICBhcmNoaXZlX25hbWUgKz0gY29tcHJlc3NfZXh0LmdldChjb21wcmVzcywgJycpCisKICAgICBta3BhdGgob3MucGF0aC5kaXJuYW1lKGFyY2hpdmVfbmFtZSksIGRyeV9ydW49ZHJ5X3J1bikKLSAgICBjbWQgPSBbInRhciIsICItY2YiLCBhcmNoaXZlX25hbWUsIGJhc2VfZGlyXQotICAgIHNwYXduKGNtZCwgZHJ5X3J1bj1kcnlfcnVuKQogCi0gICAgaWYgY29tcHJlc3M6Ci0gICAgICAgIHNwYXduKFtjb21wcmVzc10gKyBjb21wcmVzc19mbGFnc1tjb21wcmVzc10gKyBbYXJjaGl2ZV9uYW1lXSwKLSAgICAgICAgICAgICAgZHJ5X3J1bj1kcnlfcnVuKQotICAgICAgICByZXR1cm4gYXJjaGl2ZV9uYW1lICsgY29tcHJlc3NfZXh0W2NvbXByZXNzXQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBhcmNoaXZlX25hbWUKKyAgICAjIGNyZWF0aW5nIHRoZSB0YXJiYWxsCisgICAgaW1wb3J0IHRhcmZpbGUgICMgbGF0ZSBpbXBvcnQgc28gUHl0aG9uIGJ1aWxkIGl0c2VsZiBkb2Vzbid0IGJyZWFrCiAKLSMgbWFrZV90YXJiYWxsICgpCisgICAgbG9nLmluZm8oJ0NyZWF0aW5nIHRhciBhcmNoaXZlJykKIAorICAgIHVpZCA9IF9nZXRfdWlkKG93bmVyKQorICAgIGdpZCA9IF9nZXRfZ2lkKGdyb3VwKQogCi1kZWYgbWFrZV96aXBmaWxlIChiYXNlX25hbWUsIGJhc2VfZGlyLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6Ci0gICAgIiIiQ3JlYXRlIGEgemlwIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyICdiYXNlX2RpcicuICBUaGUgb3V0cHV0Ci0gICAgemlwIGZpbGUgd2lsbCBiZSBuYW1lZCAnYmFzZV9kaXInICsgIi56aXAiLiAgVXNlcyBlaXRoZXIgdGhlICJ6aXBmaWxlIgotICAgIFB5dGhvbiBtb2R1bGUgKGlmIGF2YWlsYWJsZSkgb3IgdGhlIEluZm9aSVAgInppcCIgdXRpbGl0eSAoaWYgaW5zdGFsbGVkCi0gICAgYW5kIGZvdW5kIG9uIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoKS4gIElmIG5laXRoZXIgdG9vbCBpcyBhdmFpbGFibGUsCi0gICAgcmFpc2VzIERpc3R1dGlsc0V4ZWNFcnJvci4gIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCB6aXAgZmlsZS4KKyAgICBkZWYgX3NldF91aWRfZ2lkKHRhcmluZm8pOgorICAgICAgICBpZiBnaWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YXJpbmZvLmdpZCA9IGdpZAorICAgICAgICAgICAgdGFyaW5mby5nbmFtZSA9IGdyb3VwCisgICAgICAgIGlmIHVpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRhcmluZm8udWlkID0gdWlkCisgICAgICAgICAgICB0YXJpbmZvLnVuYW1lID0gb3duZXIKKyAgICAgICAgcmV0dXJuIHRhcmluZm8KKworICAgIGlmIG5vdCBkcnlfcnVuOgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lLCAnd3wlcycgJSB0YXJfY29tcHJlc3Npb25bY29tcHJlc3NdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXIuYWRkKGJhc2VfZGlyLCBmaWx0ZXI9X3NldF91aWRfZ2lkKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICMgY29tcHJlc3Npb24gdXNpbmcgYGNvbXByZXNzYAorICAgIGlmIGNvbXByZXNzID09ICdjb21wcmVzcyc6CisgICAgICAgIHdhcm4oIidjb21wcmVzcycgd2lsbCBiZSBkZXByZWNhdGVkLiIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICMgdGhlIG9wdGlvbiB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybQorICAgICAgICBjb21wcmVzc2VkX25hbWUgPSBhcmNoaXZlX25hbWUgKyBjb21wcmVzc19leHRbY29tcHJlc3NdCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgY21kID0gW2NvbXByZXNzLCBhcmNoaXZlX25hbWUsIGNvbXByZXNzZWRfbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9IFtjb21wcmVzcywgJy1mJywgYXJjaGl2ZV9uYW1lXQorICAgICAgICBzcGF3bihjbWQsIGRyeV9ydW49ZHJ5X3J1bikKKyAgICAgICAgcmV0dXJuIGNvbXByZXNzZWRfbmFtZQorCisgICAgcmV0dXJuIGFyY2hpdmVfbmFtZQorCitkZWYgbWFrZV96aXBmaWxlKGJhc2VfbmFtZSwgYmFzZV9kaXIsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKKyAgICAiIiJDcmVhdGUgYSB6aXAgZmlsZSBmcm9tIGFsbCB0aGUgZmlsZXMgdW5kZXIgJ2Jhc2VfZGlyJy4KKworICAgIFRoZSBvdXRwdXQgemlwIGZpbGUgd2lsbCBiZSBuYW1lZCAnYmFzZV9uYW1lJyArICIuemlwIi4gIFVzZXMgZWl0aGVyIHRoZQorICAgICJ6aXBmaWxlIiBQeXRob24gbW9kdWxlIChpZiBhdmFpbGFibGUpIG9yIHRoZSBJbmZvWklQICJ6aXAiIHV0aWxpdHkKKyAgICAoaWYgaW5zdGFsbGVkIGFuZCBmb3VuZCBvbiB0aGUgZGVmYXVsdCBzZWFyY2ggcGF0aCkuICBJZiBuZWl0aGVyIHRvb2wgaXMKKyAgICBhdmFpbGFibGUsIHJhaXNlcyBEaXN0dXRpbHNFeGVjRXJyb3IuICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgemlwCisgICAgZmlsZS4KICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIGltcG9ydCB6aXBmaWxlCkBAIC05NiwyMiArMTU5LDE5IEBACiAgICAgICAgICAgICAgICAgIHppcF9maWxlbmFtZSwgYmFzZV9kaXIpCiAKICAgICAgICAgaWYgbm90IGRyeV9ydW46Ci0gICAgICAgICAgICB6ID0gemlwZmlsZS5aaXBGaWxlKHppcF9maWxlbmFtZSwgInciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICAgICAgICAgIHppcCA9IHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZW5hbWUsICJ3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAogICAgICAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhiYXNlX2Rpcik6CiAgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgogICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oZGlycGF0aCwgbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgotICAgICAgICAgICAgICAgICAgICAgICAgei53cml0ZShwYXRoLCBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgemlwLndyaXRlKHBhdGgsIHBhdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiYWRkaW5nICclcyciICUgcGF0aCkKLSAgICAgICAgICAgIHouY2xvc2UoKQorICAgICAgICAgICAgemlwLmNsb3NlKCkKIAogICAgIHJldHVybiB6aXBfZmlsZW5hbWUKIAotIyBtYWtlX3ppcGZpbGUgKCkKLQotCiBBUkNISVZFX0ZPUk1BVFMgPSB7CiAgICAgJ2d6dGFyJzogKG1ha2VfdGFyYmFsbCwgWygnY29tcHJlc3MnLCAnZ3ppcCcpXSwgImd6aXAnZWQgdGFyLWZpbGUiKSwKICAgICAnYnp0YXInOiAobWFrZV90YXJiYWxsLCBbKCdjb21wcmVzcycsICdiemlwMicpXSwgImJ6aXAyJ2VkIHRhci1maWxlIiksCkBAIC0xMjAsMjUgKzE4MCwzMyBAQAogICAgICd6aXAnOiAgIChtYWtlX3ppcGZpbGUsIFtdLCJaSVAgZmlsZSIpCiAgICAgfQogCi1kZWYgY2hlY2tfYXJjaGl2ZV9mb3JtYXRzIChmb3JtYXRzKToKK2RlZiBjaGVja19hcmNoaXZlX2Zvcm1hdHMoZm9ybWF0cyk6CisgICAgIiIiUmV0dXJucyB0aGUgZmlyc3QgZm9ybWF0IGZyb20gdGhlICdmb3JtYXQnIGxpc3QgdGhhdCBpcyB1bmtub3duLgorCisgICAgSWYgYWxsIGZvcm1hdHMgYXJlIGtub3duLCByZXR1cm5zIE5vbmUKKyAgICAiIiIKICAgICBmb3IgZm9ybWF0IGluIGZvcm1hdHM6CiAgICAgICAgIGlmIGZvcm1hdCBub3QgaW4gQVJDSElWRV9GT1JNQVRTOgogICAgICAgICAgICAgcmV0dXJuIGZvcm1hdAotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuIE5vbmUKIAotZGVmIG1ha2VfYXJjaGl2ZSAoYmFzZV9uYW1lLCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLAotICAgICAgICAgICAgICAgICAgdmVyYm9zZT0wLCBkcnlfcnVuPTApOgotICAgICIiIkNyZWF0ZSBhbiBhcmNoaXZlIGZpbGUgKGVnLiB6aXAgb3IgdGFyKS4gICdiYXNlX25hbWUnIGlzIHRoZSBuYW1lCi0gICAgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLCBtaW51cyBhbnkgZm9ybWF0LXNwZWNpZmljIGV4dGVuc2lvbjsgJ2Zvcm1hdCcKLSAgICBpcyB0aGUgYXJjaGl2ZSBmb3JtYXQ6IG9uZSBvZiAiemlwIiwgInRhciIsICJ6dGFyIiwgb3IgImd6dGFyIi4KK2RlZiBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmb3JtYXQsIHJvb3RfZGlyPU5vbmUsIGJhc2VfZGlyPU5vbmUsIHZlcmJvc2U9MCwKKyAgICAgICAgICAgICAgICAgZHJ5X3J1bj0wLCBvd25lcj1Ob25lLCBncm91cD1Ob25lKToKKyAgICAiIiJDcmVhdGUgYW4gYXJjaGl2ZSBmaWxlIChlZy4gemlwIG9yIHRhcikuCisKKyAgICAnYmFzZV9uYW1lJyBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBjcmVhdGUsIG1pbnVzIGFueSBmb3JtYXQtc3BlY2lmaWMKKyAgICBleHRlbnNpb247ICdmb3JtYXQnIGlzIHRoZSBhcmNoaXZlIGZvcm1hdDogb25lIG9mICJ6aXAiLCAidGFyIiwgInp0YXIiLAorICAgIG9yICJnenRhciIuCisKICAgICAncm9vdF9kaXInIGlzIGEgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlCiAgICAgYXJjaGl2ZTsgaWUuIHdlIHR5cGljYWxseSBjaGRpciBpbnRvICdyb290X2RpcicgYmVmb3JlIGNyZWF0aW5nIHRoZQogICAgIGFyY2hpdmUuICAnYmFzZV9kaXInIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgd2Ugc3RhcnQgYXJjaGl2aW5nIGZyb207CiAgICAgaWUuICdiYXNlX2Rpcicgd2lsbCBiZSB0aGUgY29tbW9uIHByZWZpeCBvZiBhbGwgZmlsZXMgYW5kCiAgICAgZGlyZWN0b3JpZXMgaW4gdGhlIGFyY2hpdmUuICAncm9vdF9kaXInIGFuZCAnYmFzZV9kaXInIGJvdGggZGVmYXVsdAogICAgIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdmUgZmlsZS4KKworICAgICdvd25lcicgYW5kICdncm91cCcgYXJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBhcmNoaXZlLiBCeSBkZWZhdWx0LAorICAgIHVzZXMgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwLgogICAgICIiIgogICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCkKICAgICBpZiByb290X2RpciBpcyBub3QgTm9uZToKQEAgLTE1MCw3ICsyMTgsNyBAQAogICAgIGlmIGJhc2VfZGlyIGlzIE5vbmU6CiAgICAgICAgIGJhc2VfZGlyID0gb3MuY3VyZGlyCiAKLSAgICBrd2FyZ3MgPSB7ICdkcnlfcnVuJzogZHJ5X3J1biB9CisgICAga3dhcmdzID0geydkcnlfcnVuJzogZHJ5X3J1bn0KIAogICAgIHRyeToKICAgICAgICAgZm9ybWF0X2luZm8gPSBBUkNISVZFX0ZPUk1BVFNbZm9ybWF0XQpAQCAtMTU4LDkgKzIyNiwxMiBAQAogICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAidW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIiAlIGZvcm1hdAogCiAgICAgZnVuYyA9IGZvcm1hdF9pbmZvWzBdCi0gICAgZm9yIChhcmcsdmFsKSBpbiBmb3JtYXRfaW5mb1sxXToKKyAgICBmb3IgYXJnLCB2YWwgaW4gZm9ybWF0X2luZm9bMV06CiAgICAgICAgIGt3YXJnc1thcmddID0gdmFsCi0gICAgZmlsZW5hbWUgPSBmdW5jKGJhc2VfbmFtZSwgYmFzZV9kaXIsICoqa3dhcmdzKQorCisgICAgaWYgZm9ybWF0ICE9ICd6aXAnOgorICAgICAgICBrd2FyZ3NbJ293bmVyJ10gPSBvd25lcgorICAgICAgICBrd2FyZ3NbJ2dyb3VwJ10gPSBncm91cAogCiAgICAgdHJ5OgogICAgICAgICBmaWxlbmFtZSA9IGZ1bmMoYmFzZV9uYW1lLCBiYXNlX2RpciwgKiprd2FyZ3MpCkBAIC0xNzAsNSArMjQxLDMgQEAKICAgICAgICAgICAgIG9zLmNoZGlyKHNhdmVfY3dkKQogCiAgICAgcmV0dXJuIGZpbGVuYW1lCi0KLSMgbWFrZV9hcmNoaXZlICgpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2JjcHBjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvYmNwcGNvbXBpbGVyLnB5CmluZGV4IGQ0ZmM1MzMuLmYyNmU3YWUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvYmNwcGNvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvYmNwcGNvbXBpbGVyLnB5CkBAIC0xMSwxNyArMTEsMTMgQEAKICMgc29tZW9uZSBzaG91bGQgc2l0IGRvd24gYW5kIGZhY3RvciBvdXQgdGhlIGNvbW1vbiBjb2RlIGFzCiAjIFdpbmRvd3NDQ29tcGlsZXIhICAtLUdQVwogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotCiBpbXBvcnQgb3MKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgXAotICAgICBEaXN0dXRpbHNFeGVjRXJyb3IsIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIFwKLSAgICAgQ29tcGlsZUVycm9yLCBMaWJFcnJvciwgTGlua0Vycm9yLCBVbmtub3duRmlsZUVycm9yCi1mcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IFwKLSAgICAgQ0NvbXBpbGVyLCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zLCBnZW5fbGliX29wdGlvbnMKKworZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzRXhlY0Vycm9yLCBDb21waWxlRXJyb3IsIExpYkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0Vycm9yLCBVbmtub3duRmlsZUVycm9yKQorZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBDQ29tcGlsZXIsIGdlbl9wcmVwcm9jZXNzX29wdGlvbnMKIGZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgd3JpdGVfZmlsZQogZnJvbSBkaXN0dXRpbHMuZGVwX3V0aWwgaW1wb3J0IG5ld2VyCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CmluZGV4IGJmOTJkNzguLmMyYjFmNmYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CkBAIC0zLDIxICszLDczIEBACiBDb250YWlucyBDQ29tcGlsZXIsIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgdGhhdCBkZWZpbmVzIHRoZSBpbnRlcmZhY2UKIGZvciB0aGUgRGlzdHV0aWxzIGNvbXBpbGVyIGFic3RyYWN0aW9uIG1vZGVsLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotaW1wb3J0IHN5cywgb3MsIHJlCi1mcm9tIHR5cGVzIGltcG9ydCAqCi1mcm9tIGNvcHkgaW1wb3J0IGNvcHkKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmUKKworZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoQ29tcGlsZUVycm9yLCBMaW5rRXJyb3IsIFVua25vd25GaWxlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCBEaXN0dXRpbHNNb2R1bGVFcnJvcikKIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3bgogZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCBtb3ZlX2ZpbGUKIGZyb20gZGlzdHV0aWxzLmRpcl91dGlsIGltcG9ydCBta3BhdGgKLWZyb20gZGlzdHV0aWxzLmRlcF91dGlsIGltcG9ydCBuZXdlcl9wYWlyd2lzZSwgbmV3ZXJfZ3JvdXAKK2Zyb20gZGlzdHV0aWxzLmRlcF91dGlsIGltcG9ydCBuZXdlcl9ncm91cAogZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgc3BsaXRfcXVvdGVkLCBleGVjdXRlCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKK19zeXNjb25maWcgPSBfX2ltcG9ydF9fKCdzeXNjb25maWcnKQorCitkZWYgY3VzdG9taXplX2NvbXBpbGVyKGNvbXBpbGVyKToKKyAgICAiIiJEbyBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgY3VzdG9taXphdGlvbiBvZiBhIENDb21waWxlciBpbnN0YW5jZS4KKworICAgIE1haW5seSBuZWVkZWQgb24gVW5peCwgc28gd2UgY2FuIHBsdWcgaW4gdGhlIGluZm9ybWF0aW9uIHRoYXQKKyAgICB2YXJpZXMgYWNyb3NzIFVuaWNlcyBhbmQgaXMgc3RvcmVkIGluIFB5dGhvbidzIE1ha2VmaWxlLgorICAgICIiIgorICAgIGlmIGNvbXBpbGVyLmNvbXBpbGVyX3R5cGUgPT0gInVuaXgiOgorICAgICAgICAoY2MsIGN4eCwgb3B0LCBjZmxhZ3MsIGNjc2hhcmVkLCBsZHNoYXJlZCwgc29fZXh0LCBhciwgYXJfZmxhZ3MpID0gXAorICAgICAgICAgICAgX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0NDJywgJ0NYWCcsICdPUFQnLCAnQ0ZMQUdTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDQ1NIQVJFRCcsICdMRFNIQVJFRCcsICdTTycsICdBUicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQVJGTEFHUycpCisKKyAgICAgICAgaWYgJ0NDJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgY2MgPSBvcy5lbnZpcm9uWydDQyddCisgICAgICAgIGlmICdDWFgnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBjeHggPSBvcy5lbnZpcm9uWydDWFgnXQorICAgICAgICBpZiAnTERTSEFSRUQnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBsZHNoYXJlZCA9IG9zLmVudmlyb25bJ0xEU0hBUkVEJ10KKyAgICAgICAgaWYgJ0NQUCcgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGNwcCA9IG9zLmVudmlyb25bJ0NQUCddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjcHAgPSBjYyArICIgLUUiICAgICAgICAgICAjIG5vdCBhbHdheXMKKyAgICAgICAgaWYgJ0xERkxBR1MnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBsZHNoYXJlZCA9IGxkc2hhcmVkICsgJyAnICsgb3MuZW52aXJvblsnTERGTEFHUyddCisgICAgICAgIGlmICdDRkxBR1MnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBjZmxhZ3MgPSBvcHQgKyAnICcgKyBvcy5lbnZpcm9uWydDRkxBR1MnXQorICAgICAgICAgICAgbGRzaGFyZWQgPSBsZHNoYXJlZCArICcgJyArIG9zLmVudmlyb25bJ0NGTEFHUyddCisgICAgICAgIGlmICdDUFBGTEFHUycgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGNwcCA9IGNwcCArICcgJyArIG9zLmVudmlyb25bJ0NQUEZMQUdTJ10KKyAgICAgICAgICAgIGNmbGFncyA9IGNmbGFncyArICcgJyArIG9zLmVudmlyb25bJ0NQUEZMQUdTJ10KKyAgICAgICAgICAgIGxkc2hhcmVkID0gbGRzaGFyZWQgKyAnICcgKyBvcy5lbnZpcm9uWydDUFBGTEFHUyddCisgICAgICAgIGlmICdBUicgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGFyID0gb3MuZW52aXJvblsnQVInXQorICAgICAgICBpZiAnQVJGTEFHUycgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGFyY2hpdmVyID0gYXIgKyAnICcgKyBvcy5lbnZpcm9uWydBUkZMQUdTJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyY2hpdmVyID0gYXIgKyAnICcgKyBhcl9mbGFncworCisgICAgICAgIGNjX2NtZCA9IGNjICsgJyAnICsgY2ZsYWdzCisgICAgICAgIGNvbXBpbGVyLnNldF9leGVjdXRhYmxlcygKKyAgICAgICAgICAgIHByZXByb2Nlc3Nvcj1jcHAsCisgICAgICAgICAgICBjb21waWxlcj1jY19jbWQsCisgICAgICAgICAgICBjb21waWxlcl9zbz1jY19jbWQgKyAnICcgKyBjY3NoYXJlZCwKKyAgICAgICAgICAgIGNvbXBpbGVyX2N4eD1jeHgsCisgICAgICAgICAgICBsaW5rZXJfc289bGRzaGFyZWQsCisgICAgICAgICAgICBsaW5rZXJfZXhlPWNjLAorICAgICAgICAgICAgYXJjaGl2ZXI9YXJjaGl2ZXIpCisKKyAgICAgICAgY29tcGlsZXIuc2hhcmVkX2xpYl9leHRlbnNpb24gPSBzb19leHQKKwogY2xhc3MgQ0NvbXBpbGVyOgogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgdG8gZGVmaW5lIHRoZSBpbnRlcmZhY2UgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkCiAgICAgYnkgcmVhbCBjb21waWxlciBjbGFzc2VzLiAgQWxzbyBoYXMgc29tZSB1dGlsaXR5IG1ldGhvZHMgdXNlZCBieQpAQCAtODgsMTEgKzE0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgfQogICAgIGxhbmd1YWdlX29yZGVyID0gWyJjKysiLCAib2JqYyIsICJjIl0KIAotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwKLSAgICAgICAgICAgICAgICAgIHZlcmJvc2U9MCwKLSAgICAgICAgICAgICAgICAgIGRyeV9ydW49MCwKLSAgICAgICAgICAgICAgICAgIGZvcmNlPTApOgotCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB2ZXJib3NlPTAsIGRyeV9ydW49MCwgZm9yY2U9MCk6CiAgICAgICAgIHNlbGYuZHJ5X3J1biA9IGRyeV9ydW4KICAgICAgICAgc2VsZi5mb3JjZSA9IGZvcmNlCiAgICAgICAgIHNlbGYudmVyYm9zZSA9IHZlcmJvc2UKQEAgLTEyOCwxMSArMTc2LDcgQEAKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmV4ZWN1dGFibGVzLmtleXMoKToKICAgICAgICAgICAgIHNlbGYuc2V0X2V4ZWN1dGFibGUoa2V5LCBzZWxmLmV4ZWN1dGFibGVzW2tleV0pCiAKLSAgICAjIF9faW5pdF9fICgpCi0KLQotICAgIGRlZiBzZXRfZXhlY3V0YWJsZXMgKHNlbGYsICoqYXJncyk6Ci0KKyAgICBkZWYgc2V0X2V4ZWN1dGFibGVzKHNlbGYsICoqYXJncyk6CiAgICAgICAgICIiIkRlZmluZSB0aGUgZXhlY3V0YWJsZXMgKGFuZCBvcHRpb25zIGZvciB0aGVtKSB0aGF0IHdpbGwgYmUgcnVuCiAgICAgICAgIHRvIHBlcmZvcm0gdGhlIHZhcmlvdXMgc3RhZ2VzIG9mIGNvbXBpbGF0aW9uLiAgVGhlIGV4YWN0IHNldCBvZgogICAgICAgICBleGVjdXRhYmxlcyB0aGF0IG1heSBiZSBzcGVjaWZpZWQgaGVyZSBkZXBlbmRzIG9uIHRoZSBjb21waWxlcgpAQCAtMTY1LDM2ICsyMDksMzEgQEAKICAgICAgICAgICAgICAgICAgICAgICAoa2V5LCBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICAgICAgIHNlbGYuc2V0X2V4ZWN1dGFibGUoa2V5LCBhcmdzW2tleV0pCiAKLSAgICAjIHNldF9leGVjdXRhYmxlcyAoKQotCiAgICAgZGVmIHNldF9leGVjdXRhYmxlKHNlbGYsIGtleSwgdmFsdWUpOgotICAgICAgICBpZiB0eXBlKHZhbHVlKSBpcyBTdHJpbmdUeXBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgogICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHNwbGl0X3F1b3RlZCh2YWx1ZSkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsdWUpCiAKLQotICAgIGRlZiBfZmluZF9tYWNybyAoc2VsZiwgbmFtZSk6CisgICAgZGVmIF9maW5kX21hY3JvKHNlbGYsIG5hbWUpOgogICAgICAgICBpID0gMAogICAgICAgICBmb3IgZGVmbiBpbiBzZWxmLm1hY3JvczoKICAgICAgICAgICAgIGlmIGRlZm5bMF0gPT0gbmFtZToKICAgICAgICAgICAgICAgICByZXR1cm4gaQogICAgICAgICAgICAgaSA9IGkgKyAxCi0KICAgICAgICAgcmV0dXJuIE5vbmUKIAotCi0gICAgZGVmIF9jaGVja19tYWNyb19kZWZpbml0aW9ucyAoc2VsZiwgZGVmaW5pdGlvbnMpOgorICAgIGRlZiBfY2hlY2tfbWFjcm9fZGVmaW5pdGlvbnMoc2VsZiwgZGVmaW5pdGlvbnMpOgogICAgICAgICAiIiJFbnN1cmVzIHRoYXQgZXZlcnkgZWxlbWVudCBvZiAnZGVmaW5pdGlvbnMnIGlzIGEgdmFsaWQgbWFjcm8KICAgICAgICAgZGVmaW5pdGlvbiwgaWUuIGVpdGhlciAobmFtZSx2YWx1ZSkgMi10dXBsZSBvciBhIChuYW1lLCkgdHVwbGUuICBEbwogICAgICAgICBub3RoaW5nIGlmIGFsbCBkZWZpbml0aW9ucyBhcmUgT0ssIHJhaXNlIFR5cGVFcnJvciBvdGhlcndpc2UuCiAgICAgICAgICIiIgogICAgICAgICBmb3IgZGVmbiBpbiBkZWZpbml0aW9uczoKLSAgICAgICAgICAgIGlmIG5vdCAodHlwZSAoZGVmbikgaXMgVHVwbGVUeXBlIGFuZAorICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKGRlZm4sIHR1cGxlKSBhbmQKICAgICAgICAgICAgICAgICAgICAgKGxlbiAoZGVmbikgPT0gMSBvcgogICAgICAgICAgICAgICAgICAgICAgKGxlbiAoZGVmbikgPT0gMiBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAodHlwZSAoZGVmblsxXSkgaXMgU3RyaW5nVHlwZSBvciBkZWZuWzFdIGlzIE5vbmUpKSkgYW5kCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgKGRlZm5bMF0pIGlzIFN0cmluZ1R5cGUpOgorICAgICAgICAgICAgICAgICAgICAgIChpc2luc3RhbmNlKGRlZm5bMV0sIHN0cikgb3IgZGVmblsxXSBpcyBOb25lKSkpIGFuZAorICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGRlZm5bMF0sIHN0cikpOgogICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgXAogICAgICAgICAgICAgICAgICAgICAgICgiaW52YWxpZCBtYWNybyBkZWZpbml0aW9uICclcyc6ICIgJSBkZWZuKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSB0dXBsZSAoc3RyaW5nLCksIChzdHJpbmcsIHN0cmluZyksIG9yICIgKyBcCkBAIC0yMDMsNyArMjQyLDcgQEAKIAogICAgICMgLS0gQm9va2tlZXBpbmcgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgZGVmaW5lX21hY3JvIChzZWxmLCBuYW1lLCB2YWx1ZT1Ob25lKToKKyAgICBkZWYgZGVmaW5lX21hY3JvKHNlbGYsIG5hbWUsIHZhbHVlPU5vbmUpOgogICAgICAgICAiIiJEZWZpbmUgYSBwcmVwcm9jZXNzb3IgbWFjcm8gZm9yIGFsbCBjb21waWxhdGlvbnMgZHJpdmVuIGJ5IHRoaXMKICAgICAgICAgY29tcGlsZXIgb2JqZWN0LiAgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciAndmFsdWUnIHNob3VsZCBiZSBhCiAgICAgICAgIHN0cmluZzsgaWYgaXQgaXMgbm90IHN1cHBsaWVkLCB0aGVuIHRoZSBtYWNybyB3aWxsIGJlIGRlZmluZWQKQEAgLTIxOSw4ICsyNTgsNyBAQAogICAgICAgICBkZWZuID0gKG5hbWUsIHZhbHVlKQogICAgICAgICBzZWxmLm1hY3Jvcy5hcHBlbmQgKGRlZm4pCiAKLQotICAgIGRlZiB1bmRlZmluZV9tYWNybyAoc2VsZiwgbmFtZSk6CisgICAgZGVmIHVuZGVmaW5lX21hY3JvKHNlbGYsIG5hbWUpOgogICAgICAgICAiIiJVbmRlZmluZSBhIHByZXByb2Nlc3NvciBtYWNybyBmb3IgYWxsIGNvbXBpbGF0aW9ucyBkcml2ZW4gYnkKICAgICAgICAgdGhpcyBjb21waWxlciBvYmplY3QuICBJZiB0aGUgc2FtZSBtYWNybyBpcyBkZWZpbmVkIGJ5CiAgICAgICAgICdkZWZpbmVfbWFjcm8oKScgYW5kIHVuZGVmaW5lZCBieSAndW5kZWZpbmVfbWFjcm8oKScgdGhlIGxhc3QgY2FsbApAQCAtMjM4LDggKzI3Niw3IEBACiAgICAgICAgIHVuZGVmbiA9IChuYW1lLCkKICAgICAgICAgc2VsZi5tYWNyb3MuYXBwZW5kICh1bmRlZm4pCiAKLQotICAgIGRlZiBhZGRfaW5jbHVkZV9kaXIgKHNlbGYsIGRpcik6CisgICAgZGVmIGFkZF9pbmNsdWRlX2RpcihzZWxmLCBkaXIpOgogICAgICAgICAiIiJBZGQgJ2RpcicgdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCB3aWxsIGJlIHNlYXJjaGVkIGZvcgogICAgICAgICBoZWFkZXIgZmlsZXMuICBUaGUgY29tcGlsZXIgaXMgaW5zdHJ1Y3RlZCB0byBzZWFyY2ggZGlyZWN0b3JpZXMgaW4KICAgICAgICAgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHN1cHBsaWVkIGJ5IHN1Y2Nlc3NpdmUgY2FsbHMgdG8KQEAgLTI0Nyw3ICsyODQsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMuYXBwZW5kIChkaXIpCiAKLSAgICBkZWYgc2V0X2luY2x1ZGVfZGlycyAoc2VsZiwgZGlycyk6CisgICAgZGVmIHNldF9pbmNsdWRlX2RpcnMoc2VsZiwgZGlycyk6CiAgICAgICAgICIiIlNldCB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQgdG8gJ2RpcnMnIChhCiAgICAgICAgIGxpc3Qgb2Ygc3RyaW5ncykuICBPdmVycmlkZXMgYW55IHByZWNlZGluZyBjYWxscyB0bwogICAgICAgICAnYWRkX2luY2x1ZGVfZGlyKCknOyBzdWJzZXF1ZW5jZSBjYWxscyB0byAnYWRkX2luY2x1ZGVfZGlyKCknIGFkZApAQCAtMjU1LDEwICsyOTIsOSBAQAogICAgICAgICBhbnkgbGlzdCBvZiBzdGFuZGFyZCBpbmNsdWRlIGRpcmVjdG9yaWVzIHRoYXQgdGhlIGNvbXBpbGVyIG1heQogICAgICAgICBzZWFyY2ggYnkgZGVmYXVsdC4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuaW5jbHVkZV9kaXJzID0gY29weSAoZGlycykKKyAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMgPSBkaXJzWzpdCiAKLQotICAgIGRlZiBhZGRfbGlicmFyeSAoc2VsZiwgbGlibmFtZSk6CisgICAgZGVmIGFkZF9saWJyYXJ5KHNlbGYsIGxpYm5hbWUpOgogICAgICAgICAiIiJBZGQgJ2xpYm5hbWUnIHRvIHRoZSBsaXN0IG9mIGxpYnJhcmllcyB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4KICAgICAgICAgYWxsIGxpbmtzIGRyaXZlbiBieSB0aGlzIGNvbXBpbGVyIG9iamVjdC4gIE5vdGUgdGhhdCAnbGlibmFtZScKICAgICAgICAgc2hvdWxkICpub3QqIGJlIHRoZSBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgbGlicmFyeSwgYnV0IHRoZQpAQCAtMjc0LDYxICszMTAsNTkgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYubGlicmFyaWVzLmFwcGVuZCAobGlibmFtZSkKIAotICAgIGRlZiBzZXRfbGlicmFyaWVzIChzZWxmLCBsaWJuYW1lcyk6CisgICAgZGVmIHNldF9saWJyYXJpZXMoc2VsZiwgbGlibmFtZXMpOgogICAgICAgICAiIiJTZXQgdGhlIGxpc3Qgb2YgbGlicmFyaWVzIHRvIGJlIGluY2x1ZGVkIGluIGFsbCBsaW5rcyBkcml2ZW4gYnkKICAgICAgICAgdGhpcyBjb21waWxlciBvYmplY3QgdG8gJ2xpYm5hbWVzJyAoYSBsaXN0IG9mIHN0cmluZ3MpLiAgVGhpcyBkb2VzCiAgICAgICAgIG5vdCBhZmZlY3QgYW55IHN0YW5kYXJkIHN5c3RlbSBsaWJyYXJpZXMgdGhhdCB0aGUgbGlua2VyIG1heQogICAgICAgICBpbmNsdWRlIGJ5IGRlZmF1bHQuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmxpYnJhcmllcyA9IGNvcHkgKGxpYm5hbWVzKQorICAgICAgICBzZWxmLmxpYnJhcmllcyA9IGxpYm5hbWVzWzpdCiAKIAotICAgIGRlZiBhZGRfbGlicmFyeV9kaXIgKHNlbGYsIGRpcik6CisgICAgZGVmIGFkZF9saWJyYXJ5X2RpcihzZWxmLCBkaXIpOgogICAgICAgICAiIiJBZGQgJ2RpcicgdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCB3aWxsIGJlIHNlYXJjaGVkIGZvcgogICAgICAgICBsaWJyYXJpZXMgc3BlY2lmaWVkIHRvICdhZGRfbGlicmFyeSgpJyBhbmQgJ3NldF9saWJyYXJpZXMoKScuICBUaGUKICAgICAgICAgbGlua2VyIHdpbGwgYmUgaW5zdHJ1Y3RlZCB0byBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiB0aGUgb3JkZXIgdGhleQogICAgICAgICBhcmUgc3VwcGxpZWQgdG8gJ2FkZF9saWJyYXJ5X2RpcigpJyBhbmQvb3IgJ3NldF9saWJyYXJ5X2RpcnMoKScuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmxpYnJhcnlfZGlycy5hcHBlbmQgKGRpcikKKyAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKGRpcikKIAotICAgIGRlZiBzZXRfbGlicmFyeV9kaXJzIChzZWxmLCBkaXJzKToKKyAgICBkZWYgc2V0X2xpYnJhcnlfZGlycyhzZWxmLCBkaXJzKToKICAgICAgICAgIiIiU2V0IHRoZSBsaXN0IG9mIGxpYnJhcnkgc2VhcmNoIGRpcmVjdG9yaWVzIHRvICdkaXJzJyAoYSBsaXN0IG9mCiAgICAgICAgIHN0cmluZ3MpLiAgVGhpcyBkb2VzIG5vdCBhZmZlY3QgYW55IHN0YW5kYXJkIGxpYnJhcnkgc2VhcmNoIHBhdGgKICAgICAgICAgdGhhdCB0aGUgbGlua2VyIG1heSBzZWFyY2ggYnkgZGVmYXVsdC4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYubGlicmFyeV9kaXJzID0gY29weSAoZGlycykKKyAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMgPSBkaXJzWzpdCiAKLQotICAgIGRlZiBhZGRfcnVudGltZV9saWJyYXJ5X2RpciAoc2VsZiwgZGlyKToKKyAgICBkZWYgYWRkX3J1bnRpbWVfbGlicmFyeV9kaXIoc2VsZiwgZGlyKToKICAgICAgICAgIiIiQWRkICdkaXInIHRvIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRoYXQgd2lsbCBiZSBzZWFyY2hlZCBmb3IKICAgICAgICAgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5ydW50aW1lX2xpYnJhcnlfZGlycy5hcHBlbmQgKGRpcikKKyAgICAgICAgc2VsZi5ydW50aW1lX2xpYnJhcnlfZGlycy5hcHBlbmQoZGlyKQogCi0gICAgZGVmIHNldF9ydW50aW1lX2xpYnJhcnlfZGlycyAoc2VsZiwgZGlycyk6CisgICAgZGVmIHNldF9ydW50aW1lX2xpYnJhcnlfZGlycyhzZWxmLCBkaXJzKToKICAgICAgICAgIiIiU2V0IHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3Igc2hhcmVkIGxpYnJhcmllcyBhdAogICAgICAgICBydW50aW1lIHRvICdkaXJzJyAoYSBsaXN0IG9mIHN0cmluZ3MpLiAgVGhpcyBkb2VzIG5vdCBhZmZlY3QgYW55CiAgICAgICAgIHN0YW5kYXJkIHNlYXJjaCBwYXRoIHRoYXQgdGhlIHJ1bnRpbWUgbGlua2VyIG1heSBzZWFyY2ggYnkKICAgICAgICAgZGVmYXVsdC4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYucnVudGltZV9saWJyYXJ5X2RpcnMgPSBjb3B5IChkaXJzKQorICAgICAgICBzZWxmLnJ1bnRpbWVfbGlicmFyeV9kaXJzID0gZGlyc1s6XQogCi0KLSAgICBkZWYgYWRkX2xpbmtfb2JqZWN0IChzZWxmLCBvYmplY3QpOgorICAgIGRlZiBhZGRfbGlua19vYmplY3Qoc2VsZiwgb2JqZWN0KToKICAgICAgICAgIiIiQWRkICdvYmplY3QnIHRvIHRoZSBsaXN0IG9mIG9iamVjdCBmaWxlcyAob3IgYW5hbG9ndWVzLCBzdWNoIGFzCiAgICAgICAgIGV4cGxpY2l0bHkgbmFtZWQgbGlicmFyeSBmaWxlcyBvciB0aGUgb3V0cHV0IG9mICJyZXNvdXJjZQogICAgICAgICBjb21waWxlcnMiKSB0byBiZSBpbmNsdWRlZCBpbiBldmVyeSBsaW5rIGRyaXZlbiBieSB0aGlzIGNvbXBpbGVyCiAgICAgICAgIG9iamVjdC4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYub2JqZWN0cy5hcHBlbmQgKG9iamVjdCkKKyAgICAgICAgc2VsZi5vYmplY3RzLmFwcGVuZChvYmplY3QpCiAKLSAgICBkZWYgc2V0X2xpbmtfb2JqZWN0cyAoc2VsZiwgb2JqZWN0cyk6CisgICAgZGVmIHNldF9saW5rX29iamVjdHMoc2VsZiwgb2JqZWN0cyk6CiAgICAgICAgICIiIlNldCB0aGUgbGlzdCBvZiBvYmplY3QgZmlsZXMgKG9yIGFuYWxvZ3VlcykgdG8gYmUgaW5jbHVkZWQgaW4KICAgICAgICAgZXZlcnkgbGluayB0byAnb2JqZWN0cycuICBUaGlzIGRvZXMgbm90IGFmZmVjdCBhbnkgc3RhbmRhcmQgb2JqZWN0CiAgICAgICAgIGZpbGVzIHRoYXQgdGhlIGxpbmtlciBtYXkgaW5jbHVkZSBieSBkZWZhdWx0IChzdWNoIGFzIHN5c3RlbQogICAgICAgICBsaWJyYXJpZXMpLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5vYmplY3RzID0gY29weSAob2JqZWN0cykKKyAgICAgICAgc2VsZi5vYmplY3RzID0gb2JqZWN0c1s6XQogCiAKICAgICAjIC0tIFByaXZhdGUgdXRpbGl0eSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNDEsMTkgKzM3NSwxOSBAQAogICAgICAgICAiIiJQcm9jZXNzIGFyZ3VtZW50cyBhbmQgZGVjaWRlIHdoaWNoIHNvdXJjZSBmaWxlcyB0byBjb21waWxlLiIiIgogICAgICAgICBpZiBvdXRkaXIgaXMgTm9uZToKICAgICAgICAgICAgIG91dGRpciA9IHNlbGYub3V0cHV0X2RpcgotICAgICAgICBlbGlmIHR5cGUob3V0ZGlyKSBpcyBub3QgU3RyaW5nVHlwZToKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShvdXRkaXIsIHN0cik6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICInb3V0cHV0X2RpcicgbXVzdCBiZSBhIHN0cmluZyBvciBOb25lIgogCiAgICAgICAgIGlmIG1hY3JvcyBpcyBOb25lOgogICAgICAgICAgICAgbWFjcm9zID0gc2VsZi5tYWNyb3MKLSAgICAgICAgZWxpZiB0eXBlKG1hY3JvcykgaXMgTGlzdFR5cGU6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYWNyb3MsIGxpc3QpOgogICAgICAgICAgICAgbWFjcm9zID0gbWFjcm9zICsgKHNlbGYubWFjcm9zIG9yIFtdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiJ21hY3JvcycgKGlmIHN1cHBsaWVkKSBtdXN0IGJlIGEgbGlzdCBvZiB0dXBsZXMiCiAKICAgICAgICAgaWYgaW5jZGlycyBpcyBOb25lOgogICAgICAgICAgICAgaW5jZGlycyA9IHNlbGYuaW5jbHVkZV9kaXJzCi0gICAgICAgIGVsaWYgdHlwZShpbmNkaXJzKSBpbiAoTGlzdFR5cGUsIFR1cGxlVHlwZSk6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShpbmNkaXJzLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgIGluY2RpcnMgPSBsaXN0KGluY2RpcnMpICsgKHNlbGYuaW5jbHVkZV9kaXJzIG9yIFtdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCBcCkBAIC0zODksNyArNDIzLDcgQEAKICAgICAgICAgICAgIGNjX2FyZ3NbOjBdID0gYmVmb3JlCiAgICAgICAgIHJldHVybiBjY19hcmdzCiAKLSAgICBkZWYgX2ZpeF9jb21waWxlX2FyZ3MgKHNlbGYsIG91dHB1dF9kaXIsIG1hY3JvcywgaW5jbHVkZV9kaXJzKToKKyAgICBkZWYgX2ZpeF9jb21waWxlX2FyZ3Moc2VsZiwgb3V0cHV0X2RpciwgbWFjcm9zLCBpbmNsdWRlX2RpcnMpOgogICAgICAgICAiIiJUeXBlY2hlY2sgYW5kIGZpeC11cCBzb21lIG9mIHRoZSBhcmd1bWVudHMgdG8gdGhlICdjb21waWxlKCknCiAgICAgICAgIG1ldGhvZCwgYW5kIHJldHVybiBmaXhlZC11cCB2YWx1ZXMuICBTcGVjaWZpY2FsbHk6IGlmICdvdXRwdXRfZGlyJwogICAgICAgICBpcyBOb25lLCByZXBsYWNlcyBpdCB3aXRoICdzZWxmLm91dHB1dF9kaXInOyBlbnN1cmVzIHRoYXQgJ21hY3JvcycKQEAgLTQwMSwxOSArNDM1LDE5IEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBvdXRwdXRfZGlyIGlzIE5vbmU6CiAgICAgICAgICAgICBvdXRwdXRfZGlyID0gc2VsZi5vdXRwdXRfZGlyCi0gICAgICAgIGVsaWYgdHlwZSAob3V0cHV0X2RpcikgaXMgbm90IFN0cmluZ1R5cGU6CisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob3V0cHV0X2Rpciwgc3RyKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIidvdXRwdXRfZGlyJyBtdXN0IGJlIGEgc3RyaW5nIG9yIE5vbmUiCiAKICAgICAgICAgaWYgbWFjcm9zIGlzIE5vbmU6CiAgICAgICAgICAgICBtYWNyb3MgPSBzZWxmLm1hY3JvcwotICAgICAgICBlbGlmIHR5cGUgKG1hY3JvcykgaXMgTGlzdFR5cGU6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYWNyb3MsIGxpc3QpOgogICAgICAgICAgICAgbWFjcm9zID0gbWFjcm9zICsgKHNlbGYubWFjcm9zIG9yIFtdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiJ21hY3JvcycgKGlmIHN1cHBsaWVkKSBtdXN0IGJlIGEgbGlzdCBvZiB0dXBsZXMiCiAKICAgICAgICAgaWYgaW5jbHVkZV9kaXJzIGlzIE5vbmU6CiAgICAgICAgICAgICBpbmNsdWRlX2RpcnMgPSBzZWxmLmluY2x1ZGVfZGlycwotICAgICAgICBlbGlmIHR5cGUgKGluY2x1ZGVfZGlycykgaW4gKExpc3RUeXBlLCBUdXBsZVR5cGUpOgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoaW5jbHVkZV9kaXJzLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgIGluY2x1ZGVfZGlycyA9IGxpc3QgKGluY2x1ZGVfZGlycykgKyAoc2VsZi5pbmNsdWRlX2RpcnMgb3IgW10pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsIFwKQEAgLTQyMSw0NCArNDU1LDI1IEBACiAKICAgICAgICAgcmV0dXJuIG91dHB1dF9kaXIsIG1hY3JvcywgaW5jbHVkZV9kaXJzCiAKLSAgICAjIF9maXhfY29tcGlsZV9hcmdzICgpCi0KLSAgICBkZWYgX3ByZXBfY29tcGlsZShzZWxmLCBzb3VyY2VzLCBvdXRwdXRfZGlyLCBkZXBlbmRzPU5vbmUpOgotICAgICAgICAiIiJEZWNpZGUgd2hpY2ggc291Y2UgZmlsZXMgbXVzdCBiZSByZWNvbXBpbGVkLgotCi0gICAgICAgIERldGVybWluZSB0aGUgbGlzdCBvZiBvYmplY3QgZmlsZXMgY29ycmVzcG9uZGluZyB0byAnc291cmNlcycsCi0gICAgICAgIGFuZCBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgcmVhbGx5IG5lZWQgdG8gYmUgcmVjb21waWxlZC4KLSAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBhbGwgb2JqZWN0IGZpbGVzIGFuZCBhIGRpY3Rpb25hcnkgdGVsbGluZwotICAgICAgICB3aGljaCBzb3VyY2UgZmlsZXMgY2FuIGJlIHNraXBwZWQuCi0gICAgICAgICIiIgotICAgICAgICAjIEdldCB0aGUgbGlzdCBvZiBleHBlY3RlZCBvdXRwdXQgKG9iamVjdCkgZmlsZXMKLSAgICAgICAgb2JqZWN0cyA9IHNlbGYub2JqZWN0X2ZpbGVuYW1lcyhzb3VyY2VzLCBvdXRwdXRfZGlyPW91dHB1dF9kaXIpCi0gICAgICAgIGFzc2VydCBsZW4ob2JqZWN0cykgPT0gbGVuKHNvdXJjZXMpCi0KLSAgICAgICAgIyBSZXR1cm4gYW4gZW1wdHkgZGljdCBmb3IgdGhlICJ3aGljaCBzb3VyY2UgZmlsZXMgY2FuIGJlIHNraXBwZWQiCi0gICAgICAgICMgcmV0dXJuIHZhbHVlIHRvIHByZXNlcnZlIEFQSSBjb21wYXRpYmlsaXR5LgotICAgICAgICByZXR1cm4gb2JqZWN0cywge30KLQotICAgIGRlZiBfZml4X29iamVjdF9hcmdzIChzZWxmLCBvYmplY3RzLCBvdXRwdXRfZGlyKToKKyAgICBkZWYgX2ZpeF9vYmplY3RfYXJncyhzZWxmLCBvYmplY3RzLCBvdXRwdXRfZGlyKToKICAgICAgICAgIiIiVHlwZWNoZWNrIGFuZCBmaXggdXAgc29tZSBhcmd1bWVudHMgc3VwcGxpZWQgdG8gdmFyaW91cyBtZXRob2RzLgogICAgICAgICBTcGVjaWZpY2FsbHk6IGVuc3VyZSB0aGF0ICdvYmplY3RzJyBpcyBhIGxpc3Q7IGlmIG91dHB1dF9kaXIgaXMKICAgICAgICAgTm9uZSwgcmVwbGFjZSB3aXRoIHNlbGYub3V0cHV0X2Rpci4gIFJldHVybiBmaXhlZCB2ZXJzaW9ucyBvZgogICAgICAgICAnb2JqZWN0cycgYW5kICdvdXRwdXRfZGlyJy4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIHR5cGUgKG9iamVjdHMpIG5vdCBpbiAoTGlzdFR5cGUsIFR1cGxlVHlwZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iamVjdHMsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAiJ29iamVjdHMnIG11c3QgYmUgYSBsaXN0IG9yIHR1cGxlIG9mIHN0cmluZ3MiCiAgICAgICAgIG9iamVjdHMgPSBsaXN0IChvYmplY3RzKQogCiAgICAgICAgIGlmIG91dHB1dF9kaXIgaXMgTm9uZToKICAgICAgICAgICAgIG91dHB1dF9kaXIgPSBzZWxmLm91dHB1dF9kaXIKLSAgICAgICAgZWxpZiB0eXBlIChvdXRwdXRfZGlyKSBpcyBub3QgU3RyaW5nVHlwZToKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShvdXRwdXRfZGlyLCBzdHIpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiJ291dHB1dF9kaXInIG11c3QgYmUgYSBzdHJpbmcgb3IgTm9uZSIKIAogICAgICAgICByZXR1cm4gKG9iamVjdHMsIG91dHB1dF9kaXIpCiAKLQotICAgIGRlZiBfZml4X2xpYl9hcmdzIChzZWxmLCBsaWJyYXJpZXMsIGxpYnJhcnlfZGlycywgcnVudGltZV9saWJyYXJ5X2RpcnMpOgorICAgIGRlZiBfZml4X2xpYl9hcmdzKHNlbGYsIGxpYnJhcmllcywgbGlicmFyeV9kaXJzLCBydW50aW1lX2xpYnJhcnlfZGlycyk6CiAgICAgICAgICIiIlR5cGVjaGVjayBhbmQgZml4IHVwIHNvbWUgb2YgdGhlIGFyZ3VtZW50cyBzdXBwbGllZCB0byB0aGUKICAgICAgICAgJ2xpbmtfKicgbWV0aG9kcy4gIFNwZWNpZmljYWxseTogZW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyBhcmUKICAgICAgICAgbGlzdHMsIGFuZCBhdWdtZW50IHRoZW0gd2l0aCB0aGVpciBwZXJtYW5lbnQgdmVyc2lvbnMKQEAgLTQ2Nyw3ICs0ODIsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgbGlicmFyaWVzIGlzIE5vbmU6CiAgICAgICAgICAgICBsaWJyYXJpZXMgPSBzZWxmLmxpYnJhcmllcwotICAgICAgICBlbGlmIHR5cGUgKGxpYnJhcmllcykgaW4gKExpc3RUeXBlLCBUdXBsZVR5cGUpOgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobGlicmFyaWVzLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgIGxpYnJhcmllcyA9IGxpc3QgKGxpYnJhcmllcykgKyAoc2VsZi5saWJyYXJpZXMgb3IgW10pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsIFwKQEAgLTQ3NSw3ICs0OTAsNyBAQAogCiAgICAgICAgIGlmIGxpYnJhcnlfZGlycyBpcyBOb25lOgogICAgICAgICAgICAgbGlicmFyeV9kaXJzID0gc2VsZi5saWJyYXJ5X2RpcnMKLSAgICAgICAgZWxpZiB0eXBlIChsaWJyYXJ5X2RpcnMpIGluIChMaXN0VHlwZSwgVHVwbGVUeXBlKToKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGxpYnJhcnlfZGlycywgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICBsaWJyYXJ5X2RpcnMgPSBsaXN0IChsaWJyYXJ5X2RpcnMpICsgKHNlbGYubGlicmFyeV9kaXJzIG9yIFtdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCBcCkBAIC00ODMsNyArNDk4LDcgQEAKIAogICAgICAgICBpZiBydW50aW1lX2xpYnJhcnlfZGlycyBpcyBOb25lOgogICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnMgPSBzZWxmLnJ1bnRpbWVfbGlicmFyeV9kaXJzCi0gICAgICAgIGVsaWYgdHlwZSAocnVudGltZV9saWJyYXJ5X2RpcnMpIGluIChMaXN0VHlwZSwgVHVwbGVUeXBlKToKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHJ1bnRpbWVfbGlicmFyeV9kaXJzLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzID0gKGxpc3QgKHJ1bnRpbWVfbGlicmFyeV9kaXJzKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5ydW50aW1lX2xpYnJhcnlfZGlycyBvciBbXSkpCiAgICAgICAgIGVsc2U6CkBAIC00OTMsMTAgKzUwOCw3IEBACiAKICAgICAgICAgcmV0dXJuIChsaWJyYXJpZXMsIGxpYnJhcnlfZGlycywgcnVudGltZV9saWJyYXJ5X2RpcnMpCiAKLSAgICAjIF9maXhfbGliX2FyZ3MgKCkKLQotCi0gICAgZGVmIF9uZWVkX2xpbmsgKHNlbGYsIG9iamVjdHMsIG91dHB1dF9maWxlKToKKyAgICBkZWYgX25lZWRfbGluayhzZWxmLCBvYmplY3RzLCBvdXRwdXRfZmlsZSk6CiAgICAgICAgICIiIlJldHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gcmVsaW5rIHRoZSBmaWxlcyBsaXN0ZWQgaW4gJ29iamVjdHMnCiAgICAgICAgIHRvIHJlY3JlYXRlICdvdXRwdXRfZmlsZScuCiAgICAgICAgICIiIgpAQCAtNTA5LDEzICs1MjEsMTEgQEAKICAgICAgICAgICAgICAgICBuZXdlciA9IG5ld2VyX2dyb3VwIChvYmplY3RzLCBvdXRwdXRfZmlsZSkKICAgICAgICAgICAgIHJldHVybiBuZXdlcgogCi0gICAgIyBfbmVlZF9saW5rICgpCi0KLSAgICBkZWYgZGV0ZWN0X2xhbmd1YWdlIChzZWxmLCBzb3VyY2VzKToKKyAgICBkZWYgZGV0ZWN0X2xhbmd1YWdlKHNlbGYsIHNvdXJjZXMpOgogICAgICAgICAiIiJEZXRlY3QgdGhlIGxhbmd1YWdlIG9mIGEgZ2l2ZW4gZmlsZSwgb3IgbGlzdCBvZiBmaWxlcy4gVXNlcwogICAgICAgICBsYW5ndWFnZV9tYXAsIGFuZCBsYW5ndWFnZV9vcmRlciB0byBkbyB0aGUgam9iLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgdHlwZShzb3VyY2VzKSBpcyBub3QgTGlzdFR5cGU6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNvdXJjZXMsIGxpc3QpOgogICAgICAgICAgICAgc291cmNlcyA9IFtzb3VyY2VzXQogICAgICAgICBsYW5nID0gTm9uZQogICAgICAgICBpbmRleCA9IGxlbihzZWxmLmxhbmd1YWdlX29yZGVyKQpAQCAtNTMxLDE4ICs1NDEsMTEgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBsYW5nCiAKLSAgICAjIGRldGVjdF9sYW5ndWFnZSAoKQotCiAgICAgIyAtLSBXb3JrZXIgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAjIChtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMpCiAKLSAgICBkZWYgcHJlcHJvY2VzcyAoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgc291cmNlLAotICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICBtYWNyb3M9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3M9Tm9uZSk6CisgICAgZGVmIHByZXByb2Nlc3Moc2VsZiwgc291cmNlLCBvdXRwdXRfZmlsZT1Ob25lLCBtYWNyb3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnM9Tm9uZSwgZXh0cmFfcHJlYXJncz1Ob25lLCBleHRyYV9wb3N0YXJncz1Ob25lKToKICAgICAgICAgIiIiUHJlcHJvY2VzcyBhIHNpbmdsZSBDL0MrKyBzb3VyY2UgZmlsZSwgbmFtZWQgaW4gJ3NvdXJjZScuCiAgICAgICAgIE91dHB1dCB3aWxsIGJlIHdyaXR0ZW4gdG8gZmlsZSBuYW1lZCAnb3V0cHV0X2ZpbGUnLCBvciBzdGRvdXQgaWYKICAgICAgICAgJ291dHB1dF9maWxlJyBub3Qgc3VwcGxpZWQuICAnbWFjcm9zJyBpcyBhIGxpc3Qgb2YgbWFjcm8KQEAgLTYzMCwxMiArNjMzLDggQEAKICAgICAgICAgIyBzaG91bGQgaW1wbGVtZW50IF9jb21waWxlKCkuCiAgICAgICAgIHBhc3MKIAotICAgIGRlZiBjcmVhdGVfc3RhdGljX2xpYiAoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGlibmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXI9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbGFuZz1Ob25lKToKKyAgICBkZWYgY3JlYXRlX3N0YXRpY19saWIoc2VsZiwgb2JqZWN0cywgb3V0cHV0X2xpYm5hbWUsIG91dHB1dF9kaXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc9MCwgdGFyZ2V0X2xhbmc9Tm9uZSk6CiAgICAgICAgICIiIkxpbmsgYSBidW5jaCBvZiBzdHVmZiB0b2dldGhlciB0byBjcmVhdGUgYSBzdGF0aWMgbGlicmFyeSBmaWxlLgogICAgICAgICBUaGUgImJ1bmNoIG9mIHN0dWZmIiBjb25zaXN0cyBvZiB0aGUgbGlzdCBvZiBvYmplY3QgZmlsZXMgc3VwcGxpZWQKICAgICAgICAgYXMgJ29iamVjdHMnLCB0aGUgZXh0cmEgb2JqZWN0IGZpbGVzIHN1cHBsaWVkIHRvCkBAIC02NjAsMjYgKzY1OSwxNSBAQAogICAgICAgICAiIiIKICAgICAgICAgcGFzcwogCi0KICAgICAjIHZhbHVlcyBmb3IgdGFyZ2V0X2Rlc2MgcGFyYW1ldGVyIGluIGxpbmsoKQogICAgIFNIQVJFRF9PQkpFQ1QgPSAic2hhcmVkX29iamVjdCIKICAgICBTSEFSRURfTElCUkFSWSA9ICJzaGFyZWRfbGlicmFyeSIKICAgICBFWEVDVVRBQkxFID0gImV4ZWN1dGFibGUiCiAKLSAgICBkZWYgbGluayAoc2VsZiwKLSAgICAgICAgICAgICAgdGFyZ2V0X2Rlc2MsCi0gICAgICAgICAgICAgIG9iamVjdHMsCi0gICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgb3V0cHV0X2Rpcj1Ob25lLAotICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwKLSAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgIGV4cG9ydF9zeW1ib2xzPU5vbmUsCi0gICAgICAgICAgICAgIGRlYnVnPTAsCi0gICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgYnVpbGRfdGVtcD1Ob25lLAotICAgICAgICAgICAgICB0YXJnZXRfbGFuZz1Ob25lKToKKyAgICBkZWYgbGluayhzZWxmLCB0YXJnZXRfZGVzYywgb2JqZWN0cywgb3V0cHV0X2ZpbGVuYW1lLCBvdXRwdXRfZGlyPU5vbmUsCisgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsIGxpYnJhcnlfZGlycz1Ob25lLCBydW50aW1lX2xpYnJhcnlfZGlycz1Ob25lLAorICAgICAgICAgICAgIGV4cG9ydF9zeW1ib2xzPU5vbmUsIGRlYnVnPTAsIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKKyAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLCBidWlsZF90ZW1wPU5vbmUsIHRhcmdldF9sYW5nPU5vbmUpOgogICAgICAgICAiIiJMaW5rIGEgYnVuY2ggb2Ygc3R1ZmYgdG9nZXRoZXIgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgb3IKICAgICAgICAgc2hhcmVkIGxpYnJhcnkgZmlsZS4KIApAQCAtNzI4LDE5ICs3MTYsMTEgQEAKIAogICAgICMgT2xkICdsaW5rXyooKScgbWV0aG9kcywgcmV3cml0dGVuIHRvIHVzZSB0aGUgbmV3ICdsaW5rKCknIG1ldGhvZC4KIAotICAgIGRlZiBsaW5rX3NoYXJlZF9saWIgKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGlibmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRfc3ltYm9scz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfdGVtcD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9sYW5nPU5vbmUpOgorICAgIGRlZiBsaW5rX3NoYXJlZF9saWIoc2VsZiwgb2JqZWN0cywgb3V0cHV0X2xpYm5hbWUsIG91dHB1dF9kaXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLCBsaWJyYXJ5X2RpcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPU5vbmUsIGV4cG9ydF9zeW1ib2xzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz0wLCBleHRyYV9wcmVhcmdzPU5vbmUsIGV4dHJhX3Bvc3RhcmdzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF90ZW1wPU5vbmUsIHRhcmdldF9sYW5nPU5vbmUpOgogICAgICAgICBzZWxmLmxpbmsoQ0NvbXBpbGVyLlNIQVJFRF9MSUJSQVJZLCBvYmplY3RzLAogICAgICAgICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2ZpbGVuYW1lKG91dHB1dF9saWJuYW1lLCBsaWJfdHlwZT0nc2hhcmVkJyksCiAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyLApAQCAtNzQ5LDM3ICs3MjksMjEgQEAKICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3MsIGV4dHJhX3Bvc3RhcmdzLCBidWlsZF90ZW1wLCB0YXJnZXRfbGFuZykKIAogCi0gICAgZGVmIGxpbmtfc2hhcmVkX29iamVjdCAoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRfc3ltYm9scz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfdGVtcD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9sYW5nPU5vbmUpOgorICAgIGRlZiBsaW5rX3NoYXJlZF9vYmplY3Qoc2VsZiwgb2JqZWN0cywgb3V0cHV0X2ZpbGVuYW1lLCBvdXRwdXRfZGlyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwgbGlicmFyeV9kaXJzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1Ob25lLCBleHBvcnRfc3ltYm9scz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc9MCwgZXh0cmFfcHJlYXJncz1Ob25lLCBleHRyYV9wb3N0YXJncz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfdGVtcD1Ob25lLCB0YXJnZXRfbGFuZz1Ob25lKToKICAgICAgICAgc2VsZi5saW5rKENDb21waWxlci5TSEFSRURfT0JKRUNULCBvYmplY3RzLAogICAgICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVuYW1lLCBvdXRwdXRfZGlyLAogICAgICAgICAgICAgICAgICAgbGlicmFyaWVzLCBsaWJyYXJ5X2RpcnMsIHJ1bnRpbWVfbGlicmFyeV9kaXJzLAogICAgICAgICAgICAgICAgICAgZXhwb3J0X3N5bWJvbHMsIGRlYnVnLAogICAgICAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncywgZXh0cmFfcG9zdGFyZ3MsIGJ1aWxkX3RlbXAsIHRhcmdldF9sYW5nKQogCi0KLSAgICBkZWYgbGlua19leGVjdXRhYmxlIChzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3Byb2duYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXI9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2xhbmc9Tm9uZSk6CisgICAgZGVmIGxpbmtfZXhlY3V0YWJsZShzZWxmLCBvYmplY3RzLCBvdXRwdXRfcHJvZ25hbWUsIG91dHB1dF9kaXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLCBsaWJyYXJ5X2RpcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPU5vbmUsIGRlYnVnPTAsIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzPU5vbmUsIHRhcmdldF9sYW5nPU5vbmUpOgogICAgICAgICBzZWxmLmxpbmsoQ0NvbXBpbGVyLkVYRUNVVEFCTEUsIG9iamVjdHMsCiAgICAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGFibGVfZmlsZW5hbWUob3V0cHV0X3Byb2duYW1lKSwgb3V0cHV0X2RpciwKICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcywgbGlicmFyeV9kaXJzLCBydW50aW1lX2xpYnJhcnlfZGlycywgTm9uZSwKQEAgLTc5MSwyOSArNzU1LDI2IEBACiAgICAgIyBubyBhcHByb3ByaWF0ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNvIHN1YmNsYXNzZXMgc2hvdWxkCiAgICAgIyBpbXBsZW1lbnQgYWxsIG9mIHRoZXNlLgogCi0gICAgZGVmIGxpYnJhcnlfZGlyX29wdGlvbiAoc2VsZiwgZGlyKToKKyAgICBkZWYgbGlicmFyeV9kaXJfb3B0aW9uKHNlbGYsIGRpcik6CiAgICAgICAgICIiIlJldHVybiB0aGUgY29tcGlsZXIgb3B0aW9uIHRvIGFkZCAnZGlyJyB0byB0aGUgbGlzdCBvZgogICAgICAgICBkaXJlY3RvcmllcyBzZWFyY2hlZCBmb3IgbGlicmFyaWVzLgogICAgICAgICAiIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCi0gICAgZGVmIHJ1bnRpbWVfbGlicmFyeV9kaXJfb3B0aW9uIChzZWxmLCBkaXIpOgorICAgIGRlZiBydW50aW1lX2xpYnJhcnlfZGlyX29wdGlvbihzZWxmLCBkaXIpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbXBpbGVyIG9wdGlvbiB0byBhZGQgJ2RpcicgdG8gdGhlIGxpc3Qgb2YKICAgICAgICAgZGlyZWN0b3JpZXMgc2VhcmNoZWQgZm9yIHJ1bnRpbWUgbGlicmFyaWVzLgogICAgICAgICAiIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCi0gICAgZGVmIGxpYnJhcnlfb3B0aW9uIChzZWxmLCBsaWIpOgorICAgIGRlZiBsaWJyYXJ5X29wdGlvbihzZWxmLCBsaWIpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbXBpbGVyIG9wdGlvbiB0byBhZGQgJ2RpcicgdG8gdGhlIGxpc3Qgb2YgbGlicmFyaWVzCiAgICAgICAgIGxpbmtlZCBpbnRvIHRoZSBzaGFyZWQgbGlicmFyeSBvciBleGVjdXRhYmxlLgogICAgICAgICAiIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCi0gICAgZGVmIGhhc19mdW5jdGlvbihzZWxmLCBmdW5jbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPU5vbmUpOgorICAgIGRlZiBoYXNfZnVuY3Rpb24oc2VsZiwgZnVuY25hbWUsIGluY2x1ZGVzPU5vbmUsIGluY2x1ZGVfZGlycz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsIGxpYnJhcnlfZGlycz1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgZnVuY25hbWUgaXMgc3VwcG9ydGVkIG9uCiAgICAgICAgIHRoZSBjdXJyZW50IHBsYXRmb3JtLiAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50cyBjYW4gYmUgdXNlZCB0bwogICAgICAgICBhdWdtZW50IHRoZSBjb21waWxhdGlvbiBlbnZpcm9ubWVudC4KQEAgLTgzMywxNCArNzk0LDE2IEBACiAgICAgICAgICAgICBsaWJyYXJ5X2RpcnMgPSBbXQogICAgICAgICBmZCwgZm5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCIuYyIsIGZ1bmNuYW1lLCB0ZXh0PVRydWUpCiAgICAgICAgIGYgPSBvcy5mZG9wZW4oZmQsICJ3IikKLSAgICAgICAgZm9yIGluY2wgaW4gaW5jbHVkZXM6Ci0gICAgICAgICAgICBmLndyaXRlKCIiIiNpbmNsdWRlICIlcyJcbiIiIiAlIGluY2wpCi0gICAgICAgIGYud3JpdGUoIiIiXAorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaW5jbCBpbiBpbmNsdWRlczoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIiIiNpbmNsdWRlICIlcyJcbiIiIiAlIGluY2wpCisgICAgICAgICAgICBmLndyaXRlKCIiIlwKIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikgewogICAgICVzKCk7CiB9CiAiIiIgJSBmdW5jbmFtZSkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb2JqZWN0cyA9IHNlbGYuY29tcGlsZShbZm5hbWVdLCBpbmNsdWRlX2RpcnM9aW5jbHVkZV9kaXJzKQogICAgICAgICBleGNlcHQgQ29tcGlsZUVycm9yOgpAQCAtOTQ0LDI4ICs5MDcsMjggQEAKIAogICAgICMgLS0gVXRpbGl0eSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgYW5ub3VuY2UgKHNlbGYsIG1zZywgbGV2ZWw9MSk6CisgICAgZGVmIGFubm91bmNlKHNlbGYsIG1zZywgbGV2ZWw9MSk6CiAgICAgICAgIGxvZy5kZWJ1Zyhtc2cpCiAKLSAgICBkZWYgZGVidWdfcHJpbnQgKHNlbGYsIG1zZyk6CisgICAgZGVmIGRlYnVnX3ByaW50KHNlbGYsIG1zZyk6CiAgICAgICAgIGZyb20gZGlzdHV0aWxzLmRlYnVnIGltcG9ydCBERUJVRwogICAgICAgICBpZiBERUJVRzoKICAgICAgICAgICAgIHByaW50IG1zZwogCi0gICAgZGVmIHdhcm4gKHNlbGYsIG1zZyk6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUgKCJ3YXJuaW5nOiAlc1xuIiAlIG1zZykKKyAgICBkZWYgd2FybihzZWxmLCBtc2cpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ3YXJuaW5nOiAlc1xuIiAlIG1zZykKIAotICAgIGRlZiBleGVjdXRlIChzZWxmLCBmdW5jLCBhcmdzLCBtc2c9Tm9uZSwgbGV2ZWw9MSk6CisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgZnVuYywgYXJncywgbXNnPU5vbmUsIGxldmVsPTEpOgogICAgICAgICBleGVjdXRlKGZ1bmMsIGFyZ3MsIG1zZywgc2VsZi5kcnlfcnVuKQogCi0gICAgZGVmIHNwYXduIChzZWxmLCBjbWQpOgotICAgICAgICBzcGF3biAoY21kLCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKKyAgICBkZWYgc3Bhd24oc2VsZiwgY21kKToKKyAgICAgICAgc3Bhd24oY21kLCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKIAotICAgIGRlZiBtb3ZlX2ZpbGUgKHNlbGYsIHNyYywgZHN0KToKLSAgICAgICAgcmV0dXJuIG1vdmVfZmlsZSAoc3JjLCBkc3QsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQorICAgIGRlZiBtb3ZlX2ZpbGUoc2VsZiwgc3JjLCBkc3QpOgorICAgICAgICByZXR1cm4gbW92ZV9maWxlKHNyYywgZHN0LCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKIAotICAgIGRlZiBta3BhdGggKHNlbGYsIG5hbWUsIG1vZGU9MDc3Nyk6Ci0gICAgICAgIG1rcGF0aCAobmFtZSwgbW9kZSwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCisgICAgZGVmIG1rcGF0aChzZWxmLCBuYW1lLCBtb2RlPTA3NzcpOgorICAgICAgICBta3BhdGgobmFtZSwgbW9kZSwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKIAogIyBjbGFzcyBDQ29tcGlsZXIKQEAgLTk4NywxMiArOTUwLDEwIEBACiAgICAgIyBPUyBuYW1lIG1hcHBpbmdzCiAgICAgKCdwb3NpeCcsICd1bml4JyksCiAgICAgKCdudCcsICdtc3ZjJyksCi0gICAgKCdtYWMnLCAnbXdlcmtzJyksCiAKICAgICApCiAKIGRlZiBnZXRfZGVmYXVsdF9jb21waWxlcihvc25hbWU9Tm9uZSwgcGxhdGZvcm09Tm9uZSk6Ci0KICAgICAiIiIgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGNvbXBpbGVyIHRvIHVzZSBmb3IgdGhlIGdpdmVuIHBsYXRmb3JtLgogCiAgICAgICAgIG9zbmFtZSBzaG91bGQgYmUgb25lIG9mIHRoZSBzdGFuZGFyZCBQeXRob24gT1MgbmFtZXMgKGkuZS4gdGhlCkBAIC0xMDI3LDggKzk4OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pbmd3MzIgcG9ydCBvZiBHTlUgQyBDb21waWxlciBmb3IgV2luMzIiKSwKICAgICAgICAgICAgICAgICAgICAnYmNwcCc6ICAgICgnYmNwcGNvbXBpbGVyJywgJ0JDUFBDb21waWxlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJvcmxhbmQgQysrIENvbXBpbGVyIiksCi0gICAgICAgICAgICAgICAgICAgJ213ZXJrcyc6ICAoJ213ZXJrc2NvbXBpbGVyJywgJ01XZXJrc0NvbXBpbGVyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWV0cm9XZXJrcyBDb2RlV2FycmlvciIpLAogICAgICAgICAgICAgICAgICAgICdlbXgnOiAgICAgKCdlbXhjY29tcGlsZXInLCAnRU1YQ0NvbXBpbGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1YIHBvcnQgb2YgR05VIEMgQ29tcGlsZXIgZm9yIE9TLzIiKSwKICAgICAgICAgICAgICAgICAgfQpAQCAtMTA1MCwxMSArMTAwOSw3IEBACiAgICAgcHJldHR5X3ByaW50ZXIucHJpbnRfaGVscCgiTGlzdCBvZiBhdmFpbGFibGUgY29tcGlsZXJzOiIpCiAKIAotZGVmIG5ld19jb21waWxlciAocGxhdD1Ob25lLAotICAgICAgICAgICAgICAgICAgY29tcGlsZXI9Tm9uZSwKLSAgICAgICAgICAgICAgICAgIHZlcmJvc2U9MCwKLSAgICAgICAgICAgICAgICAgIGRyeV9ydW49MCwKLSAgICAgICAgICAgICAgICAgIGZvcmNlPTApOgorZGVmIG5ld19jb21waWxlcihwbGF0PU5vbmUsIGNvbXBpbGVyPU5vbmUsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wLCBmb3JjZT0wKToKICAgICAiIiJHZW5lcmF0ZSBhbiBpbnN0YW5jZSBvZiBzb21lIENDb21waWxlciBzdWJjbGFzcyBmb3IgdGhlIHN1cHBsaWVkCiAgICAgcGxhdGZvcm0vY29tcGlsZXIgY29tYmluYXRpb24uICAncGxhdCcgZGVmYXVsdHMgdG8gJ29zLm5hbWUnCiAgICAgKGVnLiAncG9zaXgnLCAnbnQnKSwgYW5kICdjb21waWxlcicgZGVmYXVsdHMgdG8gdGhlIGRlZmF1bHQgY29tcGlsZXIKQEAgLTEwOTYsMTAgKzEwNTEsMTAgQEAKICAgICAjIFhYWCBUaGUgTm9uZSBpcyBuZWNlc3NhcnkgdG8gcHJlc2VydmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKICAgICAjIHdpdGggY2xhc3NlcyB0aGF0IGV4cGVjdCB2ZXJib3NlIHRvIGJlIHRoZSBmaXJzdCBwb3NpdGlvbmFsCiAgICAgIyBhcmd1bWVudC4KLSAgICByZXR1cm4ga2xhc3MgKE5vbmUsIGRyeV9ydW4sIGZvcmNlKQorICAgIHJldHVybiBrbGFzcyhOb25lLCBkcnlfcnVuLCBmb3JjZSkKIAogCi1kZWYgZ2VuX3ByZXByb2Nlc3Nfb3B0aW9ucyAobWFjcm9zLCBpbmNsdWRlX2RpcnMpOgorZGVmIGdlbl9wcmVwcm9jZXNzX29wdGlvbnMobWFjcm9zLCBpbmNsdWRlX2RpcnMpOgogICAgICIiIkdlbmVyYXRlIEMgcHJlLXByb2Nlc3NvciBvcHRpb25zICgtRCwgLVUsIC1JKSBhcyB1c2VkIGJ5IGF0IGxlYXN0CiAgICAgdHdvIHR5cGVzIG9mIGNvbXBpbGVyczogdGhlIHR5cGljYWwgVW5peCBjb21waWxlciBhbmQgVmlzdWFsIEMrKy4KICAgICAnbWFjcm9zJyBpcyB0aGUgdXN1YWwgdGhpbmcsIGEgbGlzdCBvZiAxLSBvciAyLXR1cGxlcywgd2hlcmUgKG5hbWUsKQpAQCAtMTEyNCw3ICsxMDc5LDcgQEAKICAgICBwcF9vcHRzID0gW10KICAgICBmb3IgbWFjcm8gaW4gbWFjcm9zOgogCi0gICAgICAgIGlmIG5vdCAodHlwZSAobWFjcm8pIGlzIFR1cGxlVHlwZSBhbmQKKyAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKG1hY3JvLCB0dXBsZSkgYW5kCiAgICAgICAgICAgICAgICAgMSA8PSBsZW4gKG1hY3JvKSA8PSAyKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgXAogICAgICAgICAgICAgICAgICAgKCJiYWQgbWFjcm8gZGVmaW5pdGlvbiAnJXMnOiAiICsKQEAgLTExNDcsMjcgKzExMDIsMjcgQEAKIAogICAgIHJldHVybiBwcF9vcHRzCiAKLSMgZ2VuX3ByZXByb2Nlc3Nfb3B0aW9ucyAoKQogCi0KLWRlZiBnZW5fbGliX29wdGlvbnMgKGNvbXBpbGVyLCBsaWJyYXJ5X2RpcnMsIHJ1bnRpbWVfbGlicmFyeV9kaXJzLCBsaWJyYXJpZXMpOgorZGVmIGdlbl9saWJfb3B0aW9ucyhjb21waWxlciwgbGlicmFyeV9kaXJzLCBydW50aW1lX2xpYnJhcnlfZGlycywgbGlicmFyaWVzKToKICAgICAiIiJHZW5lcmF0ZSBsaW5rZXIgb3B0aW9ucyBmb3Igc2VhcmNoaW5nIGxpYnJhcnkgZGlyZWN0b3JpZXMgYW5kCi0gICAgbGlua2luZyB3aXRoIHNwZWNpZmljIGxpYnJhcmllcy4gICdsaWJyYXJpZXMnIGFuZCAnbGlicmFyeV9kaXJzJyBhcmUsCi0gICAgcmVzcGVjdGl2ZWx5LCBsaXN0cyBvZiBsaWJyYXJ5IG5hbWVzIChub3QgZmlsZW5hbWVzISkgYW5kIHNlYXJjaAotICAgIGRpcmVjdG9yaWVzLiAgUmV0dXJucyBhIGxpc3Qgb2YgY29tbWFuZC1saW5lIG9wdGlvbnMgc3VpdGFibGUgZm9yIHVzZQotICAgIHdpdGggc29tZSBjb21waWxlciAoZGVwZW5kaW5nIG9uIHRoZSB0d28gZm9ybWF0IHN0cmluZ3MgcGFzc2VkIGluKS4KKyAgICBsaW5raW5nIHdpdGggc3BlY2lmaWMgbGlicmFyaWVzLgorCisgICAgJ2xpYnJhcmllcycgYW5kICdsaWJyYXJ5X2RpcnMnIGFyZSwgcmVzcGVjdGl2ZWx5LCBsaXN0cyBvZiBsaWJyYXJ5IG5hbWVzCisgICAgKG5vdCBmaWxlbmFtZXMhKSBhbmQgc2VhcmNoIGRpcmVjdG9yaWVzLiAgUmV0dXJucyBhIGxpc3Qgb2YgY29tbWFuZC1saW5lCisgICAgb3B0aW9ucyBzdWl0YWJsZSBmb3IgdXNlIHdpdGggc29tZSBjb21waWxlciAoZGVwZW5kaW5nIG9uIHRoZSB0d28gZm9ybWF0CisgICAgc3RyaW5ncyBwYXNzZWQgaW4pLgogICAgICIiIgogICAgIGxpYl9vcHRzID0gW10KIAogICAgIGZvciBkaXIgaW4gbGlicmFyeV9kaXJzOgotICAgICAgICBsaWJfb3B0cy5hcHBlbmQgKGNvbXBpbGVyLmxpYnJhcnlfZGlyX29wdGlvbiAoZGlyKSkKKyAgICAgICAgbGliX29wdHMuYXBwZW5kKGNvbXBpbGVyLmxpYnJhcnlfZGlyX29wdGlvbihkaXIpKQogCiAgICAgZm9yIGRpciBpbiBydW50aW1lX2xpYnJhcnlfZGlyczoKLSAgICAgICAgb3B0ID0gY29tcGlsZXIucnVudGltZV9saWJyYXJ5X2Rpcl9vcHRpb24gKGRpcikKLSAgICAgICAgaWYgdHlwZShvcHQpIGlzIExpc3RUeXBlOgotICAgICAgICAgICAgbGliX29wdHMgPSBsaWJfb3B0cyArIG9wdAorICAgICAgICBvcHQgPSBjb21waWxlci5ydW50aW1lX2xpYnJhcnlfZGlyX29wdGlvbihkaXIpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3B0LCBsaXN0KToKKyAgICAgICAgICAgIGxpYl9vcHRzLmV4dGVuZChvcHQpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaWJfb3B0cy5hcHBlbmQgKG9wdCkKKyAgICAgICAgICAgIGxpYl9vcHRzLmFwcGVuZChvcHQpCiAKICAgICAjIFhYWCBpdCdzIGltcG9ydGFudCB0aGF0IHdlICpub3QqIHJlbW92ZSByZWR1bmRhbnQgbGlicmFyeSBtZW50aW9ucyEKICAgICAjIHNvbWV0aW1lcyB5b3UgcmVhbGx5IGRvIGhhdmUgdG8gc2F5ICItbGZvbyAtbGJhciAtbGZvbyIgaW4gb3JkZXIgdG8KQEAgLTExNzYsMTcgKzExMzEsMTUgQEAKICAgICAjIHByZXR0eSBuYXN0eSB3YXkgdG8gYXJyYW5nZSB5b3VyIEMgY29kZS4KIAogICAgIGZvciBsaWIgaW4gbGlicmFyaWVzOgotICAgICAgICAobGliX2RpciwgbGliX25hbWUpID0gb3MucGF0aC5zcGxpdCAobGliKQotICAgICAgICBpZiBsaWJfZGlyOgotICAgICAgICAgICAgbGliX2ZpbGUgPSBjb21waWxlci5maW5kX2xpYnJhcnlfZmlsZSAoW2xpYl9kaXJdLCBsaWJfbmFtZSkKLSAgICAgICAgICAgIGlmIGxpYl9maWxlOgotICAgICAgICAgICAgICAgIGxpYl9vcHRzLmFwcGVuZCAobGliX2ZpbGUpCisgICAgICAgIGxpYl9kaXIsIGxpYl9uYW1lID0gb3MucGF0aC5zcGxpdChsaWIpCisgICAgICAgIGlmIGxpYl9kaXIgIT0gJyc6CisgICAgICAgICAgICBsaWJfZmlsZSA9IGNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKFtsaWJfZGlyXSwgbGliX25hbWUpCisgICAgICAgICAgICBpZiBsaWJfZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaWJfb3B0cy5hcHBlbmQobGliX2ZpbGUpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvbXBpbGVyLndhcm4gKCJubyBsaWJyYXJ5IGZpbGUgY29ycmVzcG9uZGluZyB0byAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgZm91bmQgKHNraXBwaW5nKSIgJSBsaWIpCisgICAgICAgICAgICAgICAgY29tcGlsZXIud2Fybigibm8gbGlicmFyeSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgZm91bmQgKHNraXBwaW5nKSIgJSBsaWIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaWJfb3B0cy5hcHBlbmQgKGNvbXBpbGVyLmxpYnJhcnlfb3B0aW9uIChsaWIpKQorICAgICAgICAgICAgbGliX29wdHMuYXBwZW5kKGNvbXBpbGVyLmxpYnJhcnlfb3B0aW9uKGxpYikpCiAKICAgICByZXR1cm4gbGliX29wdHMKLQotIyBnZW5fbGliX29wdGlvbnMgKCkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY21kLnB5IGIvTGliL2Rpc3R1dGlscy9jbWQucHkKaW5kZXggM2NkNTg1OC4uZGM0MGMxNCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jbWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jbWQucHkKQEAgLTQsMTMgKzQsMTAgQEAKIGluIHRoZSBkaXN0dXRpbHMuY29tbWFuZCBwYWNrYWdlLgogIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgc3lzLCBvcywgc3RyaW5nLCByZQotZnJvbSB0eXBlcyBpbXBvcnQgKgotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCitpbXBvcnQgc3lzLCBvcywgcmUKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzT3B0aW9uRXJyb3IKIGZyb20gZGlzdHV0aWxzIGltcG9ydCB1dGlsLCBkaXJfdXRpbCwgZmlsZV91dGlsLCBhcmNoaXZlX3V0aWwsIGRlcF91dGlsCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKQEAgLTQ5LDcgKzQ2LDcgQEAKIAogICAgICMgLS0gQ3JlYXRpb24vaW5pdGlhbGl6YXRpb24gbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgX19pbml0X18gKHNlbGYsIGRpc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXN0KToKICAgICAgICAgIiIiQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IENvbW1hbmQgb2JqZWN0LiAgTW9zdCBpbXBvcnRhbnRseSwKICAgICAgICAgaW52b2tlcyB0aGUgJ2luaXRpYWxpemVfb3B0aW9ucygpJyBtZXRob2QsIHdoaWNoIGlzIHRoZSByZWFsCiAgICAgICAgIGluaXRpYWxpemVyIGFuZCBkZXBlbmRzIG9uIHRoZSBhY3R1YWwgY29tbWFuZCBiZWluZwpAQCAtOTYsMTIgKzkzLDggQEAKICAgICAgICAgIyBhbHdheXMgY2FsbHMgJ2ZpbmFsaXplX29wdGlvbnMoKScsIHRvIHJlc3BlY3QvdXBkYXRlIGl0LgogICAgICAgICBzZWxmLmZpbmFsaXplZCA9IDAKIAotICAgICMgX19pbml0X18gKCkKLQotCiAgICAgIyBYWFggQSBtb3JlIGV4cGxpY2l0IHdheSB0byBjdXN0b21pemUgZHJ5X3J1biB3b3VsZCBiZSBiZXR0ZXIuCi0KLSAgICBkZWYgX19nZXRhdHRyX18gKHNlbGYsIGF0dHIpOgorICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKICAgICAgICAgaWYgYXR0ciA9PSAnZHJ5X3J1bic6CiAgICAgICAgICAgICBteXZhbCA9IGdldGF0dHIoc2VsZiwgIl8iICsgYXR0cikKICAgICAgICAgICAgIGlmIG15dmFsIGlzIE5vbmU6CkBAIC0xMTEsMTMgKzEwNCwxMSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsIGF0dHIKIAotCi0gICAgZGVmIGVuc3VyZV9maW5hbGl6ZWQgKHNlbGYpOgorICAgIGRlZiBlbnN1cmVfZmluYWxpemVkKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5maW5hbGl6ZWQ6CiAgICAgICAgICAgICBzZWxmLmZpbmFsaXplX29wdGlvbnMoKQogICAgICAgICBzZWxmLmZpbmFsaXplZCA9IDEKIAotCiAgICAgIyBTdWJjbGFzc2VzIG11c3QgZGVmaW5lOgogICAgICMgICBpbml0aWFsaXplX29wdGlvbnMoKQogICAgICMgICAgIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBvcHRpb25zOyBtYXkgYmUgY3VzdG9taXplZCBieQpAQCAtMTMxLDcgKzEyMiw3IEBACiAgICAgIyAgICAgcnVuIHRoZSBjb21tYW5kOiBkbyB3aGF0ZXZlciBpdCBpcyB3ZSdyZSBoZXJlIHRvIGRvLAogICAgICMgICAgIGNvbnRyb2xsZWQgYnkgdGhlIGNvbW1hbmQncyB2YXJpb3VzIG9wdGlvbiB2YWx1ZXMKIAotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgICIiIlNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBvcHRpb25zIHRoYXQgdGhpcyBjb21tYW5kCiAgICAgICAgIHN1cHBvcnRzLiAgTm90ZSB0aGF0IHRoZXNlIGRlZmF1bHRzIG1heSBiZSBvdmVycmlkZGVuIGJ5IG90aGVyCiAgICAgICAgIGNvbW1hbmRzLCBieSB0aGUgc2V0dXAgc2NyaXB0LCBieSBjb25maWcgZmlsZXMsIG9yIGJ5IHRoZQpAQCAtMTQ0LDcgKzEzNSw3IEBACiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgXAogICAgICAgICAgICAgICAiYWJzdHJhY3QgbWV0aG9kIC0tIHN1YmNsYXNzICVzIG11c3Qgb3ZlcnJpZGUiICUgc2VsZi5fX2NsYXNzX18KIAotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zIChzZWxmKToKKyAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgIiIiU2V0IGZpbmFsIHZhbHVlcyBmb3IgYWxsIHRoZSBvcHRpb25zIHRoYXQgdGhpcyBjb21tYW5kIHN1cHBvcnRzLgogICAgICAgICBUaGlzIGlzIGFsd2F5cyBjYWxsZWQgYXMgbGF0ZSBhcyBwb3NzaWJsZSwgaWUuICBhZnRlciBhbnkgb3B0aW9uCiAgICAgICAgIGFzc2lnbm1lbnRzIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBmcm9tIG90aGVyIGNvbW1hbmRzIGhhdmUgYmVlbgpAQCAtMTU5LDIxICsxNTAsMjEgQEAKICAgICAgICAgICAgICAgImFic3RyYWN0IG1ldGhvZCAtLSBzdWJjbGFzcyAlcyBtdXN0IG92ZXJyaWRlIiAlIHNlbGYuX19jbGFzc19fCiAKIAotICAgIGRlZiBkdW1wX29wdGlvbnMgKHNlbGYsIGhlYWRlcj1Ob25lLCBpbmRlbnQ9IiIpOgorICAgIGRlZiBkdW1wX29wdGlvbnMoc2VsZiwgaGVhZGVyPU5vbmUsIGluZGVudD0iIik6CiAgICAgICAgIGZyb20gZGlzdHV0aWxzLmZhbmN5X2dldG9wdCBpbXBvcnQgbG9uZ29wdF94bGF0ZQogICAgICAgICBpZiBoZWFkZXIgaXMgTm9uZToKICAgICAgICAgICAgIGhlYWRlciA9ICJjb21tYW5kIG9wdGlvbnMgZm9yICclcyc6IiAlIHNlbGYuZ2V0X2NvbW1hbmRfbmFtZSgpCi0gICAgICAgIHByaW50IGluZGVudCArIGhlYWRlcgorICAgICAgICBzZWxmLmFubm91bmNlKGluZGVudCArIGhlYWRlciwgbGV2ZWw9bG9nLklORk8pCiAgICAgICAgIGluZGVudCA9IGluZGVudCArICIgICIKICAgICAgICAgZm9yIChvcHRpb24sIF8sIF8pIGluIHNlbGYudXNlcl9vcHRpb25zOgotICAgICAgICAgICAgb3B0aW9uID0gc3RyaW5nLnRyYW5zbGF0ZShvcHRpb24sIGxvbmdvcHRfeGxhdGUpCisgICAgICAgICAgICBvcHRpb24gPSBvcHRpb24udHJhbnNsYXRlKGxvbmdvcHRfeGxhdGUpCiAgICAgICAgICAgICBpZiBvcHRpb25bLTFdID09ICI9IjoKICAgICAgICAgICAgICAgICBvcHRpb24gPSBvcHRpb25bOi0xXQogICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKHNlbGYsIG9wdGlvbikKLSAgICAgICAgICAgIHByaW50IGluZGVudCArICIlcyA9ICVzIiAlIChvcHRpb24sIHZhbHVlKQorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShpbmRlbnQgKyAiJXMgPSAlcyIgJSAob3B0aW9uLCB2YWx1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPWxvZy5JTkZPKQogCi0KLSAgICBkZWYgcnVuIChzZWxmKToKKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAiIiJBIGNvbW1hbmQncyByYWlzb24gZCdldHJlOiBjYXJyeSBvdXQgdGhlIGFjdGlvbiBpdCBleGlzdHMgdG8KICAgICAgICAgcGVyZm9ybSwgY29udHJvbGxlZCBieSB0aGUgb3B0aW9ucyBpbml0aWFsaXplZCBpbgogICAgICAgICAnaW5pdGlhbGl6ZV9vcHRpb25zKCknLCBjdXN0b21pemVkIGJ5IG90aGVyIGNvbW1hbmRzLCB0aGUgc2V0dXAKQEAgLTE4MywxNyArMTc0LDE2IEBACiAKICAgICAgICAgVGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhbGwgY29tbWFuZCBjbGFzc2VzLgogICAgICAgICAiIiIKLQogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsIFwKICAgICAgICAgICAgICAgImFic3RyYWN0IG1ldGhvZCAtLSBzdWJjbGFzcyAlcyBtdXN0IG92ZXJyaWRlIiAlIHNlbGYuX19jbGFzc19fCiAKLSAgICBkZWYgYW5ub3VuY2UgKHNlbGYsIG1zZywgbGV2ZWw9MSk6CisgICAgZGVmIGFubm91bmNlKHNlbGYsIG1zZywgbGV2ZWw9MSk6CiAgICAgICAgICIiIklmIHRoZSBjdXJyZW50IHZlcmJvc2l0eSBsZXZlbCBpcyBvZiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KICAgICAgICAgJ2xldmVsJyBwcmludCAnbXNnJyB0byBzdGRvdXQuCiAgICAgICAgICIiIgogICAgICAgICBsb2cubG9nKGxldmVsLCBtc2cpCiAKLSAgICBkZWYgZGVidWdfcHJpbnQgKHNlbGYsIG1zZyk6CisgICAgZGVmIGRlYnVnX3ByaW50KHNlbGYsIG1zZyk6CiAgICAgICAgICIiIlByaW50ICdtc2cnIHRvIHN0ZG91dCBpZiB0aGUgZ2xvYmFsIERFQlVHICh0YWtlbiBmcm9tIHRoZQogICAgICAgICBESVNUVVRJTFNfREVCVUcgZW52aXJvbm1lbnQgdmFyaWFibGUpIGZsYWcgaXMgdHJ1ZS4KICAgICAgICAgIiIiCkBAIC0yMDMsNyArMTkzLDYgQEAKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogCiAKLQogICAgICMgLS0gT3B0aW9uIHZhbGlkYXRpb24gbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIyAodGhlc2UgYXJlIHZlcnkgaGFuZHkgaW4gd3JpdGluZyB0aGUgJ2ZpbmFsaXplX29wdGlvbnMoKScgbWV0aG9kKQogICAgICMKQEAgLTIxNywyMyArMjA2LDIzIEBACiAgICAgIyBhbmQgdGhleSBjYW4gYmUgZ3VhcmFudGVlZCB0aGF0IHRoZXJlYWZ0ZXIsIHNlbGYuZm9vIHdpbGwgYmUKICAgICAjIGEgbGlzdCBvZiBzdHJpbmdzLgogCi0gICAgZGVmIF9lbnN1cmVfc3RyaW5nbGlrZSAoc2VsZiwgb3B0aW9uLCB3aGF0LCBkZWZhdWx0PU5vbmUpOgorICAgIGRlZiBfZW5zdXJlX3N0cmluZ2xpa2Uoc2VsZiwgb3B0aW9uLCB3aGF0LCBkZWZhdWx0PU5vbmUpOgogICAgICAgICB2YWwgPSBnZXRhdHRyKHNlbGYsIG9wdGlvbikKICAgICAgICAgaWYgdmFsIGlzIE5vbmU6CiAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG9wdGlvbiwgZGVmYXVsdCkKICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0gICAgICAgIGVsaWYgdHlwZSh2YWwpIGlzIG5vdCBTdHJpbmdUeXBlOgorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHZhbCwgc3RyKToKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAiJyVzJyBtdXN0IGJlIGEgJXMgKGdvdCBgJXNgKSIgJSAob3B0aW9uLCB3aGF0LCB2YWwpCiAgICAgICAgIHJldHVybiB2YWwKIAotICAgIGRlZiBlbnN1cmVfc3RyaW5nIChzZWxmLCBvcHRpb24sIGRlZmF1bHQ9Tm9uZSk6CisgICAgZGVmIGVuc3VyZV9zdHJpbmcoc2VsZiwgb3B0aW9uLCBkZWZhdWx0PU5vbmUpOgogICAgICAgICAiIiJFbnN1cmUgdGhhdCAnb3B0aW9uJyBpcyBhIHN0cmluZzsgaWYgbm90IGRlZmluZWQsIHNldCBpdCB0bwogICAgICAgICAnZGVmYXVsdCcuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9lbnN1cmVfc3RyaW5nbGlrZShvcHRpb24sICJzdHJpbmciLCBkZWZhdWx0KQogCi0gICAgZGVmIGVuc3VyZV9zdHJpbmdfbGlzdCAoc2VsZiwgb3B0aW9uKToKKyAgICBkZWYgZW5zdXJlX3N0cmluZ19saXN0KHNlbGYsIG9wdGlvbik6CiAgICAgICAgICIiIkVuc3VyZSB0aGF0ICdvcHRpb24nIGlzIGEgbGlzdCBvZiBzdHJpbmdzLiAgSWYgJ29wdGlvbicgaXMKICAgICAgICAgY3VycmVudGx5IGEgc3RyaW5nLCB3ZSBzcGxpdCBpdCBlaXRoZXIgb24gLyxccyovIG9yIC9ccysvLCBzbwogICAgICAgICAiZm9vIGJhciBiYXoiLCAiZm9vLGJhcixiYXoiLCBhbmQgImZvbywgICBiYXIgYmF6IiBhbGwgYmVjb21lCkBAIC0yNDIsMzQgKzIzMSwzOSBAQAogICAgICAgICB2YWwgPSBnZXRhdHRyKHNlbGYsIG9wdGlvbikKICAgICAgICAgaWYgdmFsIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZWxpZiB0eXBlKHZhbCkgaXMgU3RyaW5nVHlwZToKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbCwgc3RyKToKICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgb3B0aW9uLCByZS5zcGxpdChyJyxccyp8XHMrJywgdmFsKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHR5cGUodmFsKSBpcyBMaXN0VHlwZToKLSAgICAgICAgICAgICAgICB0eXBlcyA9IG1hcCh0eXBlLCB2YWwpCi0gICAgICAgICAgICAgICAgb2sgPSAodHlwZXMgPT0gW1N0cmluZ1R5cGVdICogbGVuKHZhbCkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgbGlzdCk6CisgICAgICAgICAgICAgICAgIyBjaGVja3MgaWYgYWxsIGVsZW1lbnRzIGFyZSBzdHIKKyAgICAgICAgICAgICAgICBvayA9IDEKKyAgICAgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiB2YWw6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGVsZW1lbnQsIHN0cik6CisgICAgICAgICAgICAgICAgICAgICAgICBvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG9rID0gMAogCiAgICAgICAgICAgICBpZiBub3Qgb2s6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzT3B0aW9uRXJyb3IsIFwKLSAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBtdXN0IGJlIGEgbGlzdCBvZiBzdHJpbmdzIChnb3QgJXIpIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uLCB2YWwpCisgICAgICAgICAgICAgICAgICAgICInJXMnIG11c3QgYmUgYSBsaXN0IG9mIHN0cmluZ3MgKGdvdCAlcikiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbiwgdmFsKQogCi0gICAgZGVmIF9lbnN1cmVfdGVzdGVkX3N0cmluZyAoc2VsZiwgb3B0aW9uLCB0ZXN0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hhdCwgZXJyb3JfZm10LCBkZWZhdWx0PU5vbmUpOgorCisgICAgZGVmIF9lbnN1cmVfdGVzdGVkX3N0cmluZyhzZWxmLCBvcHRpb24sIHRlc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQsIGVycm9yX2ZtdCwgZGVmYXVsdD1Ob25lKToKICAgICAgICAgdmFsID0gc2VsZi5fZW5zdXJlX3N0cmluZ2xpa2Uob3B0aW9uLCB3aGF0LCBkZWZhdWx0KQogICAgICAgICBpZiB2YWwgaXMgbm90IE5vbmUgYW5kIG5vdCB0ZXN0ZXIodmFsKToKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAoImVycm9yIGluICclcycgb3B0aW9uOiAiICsgZXJyb3JfZm10KSAlIChvcHRpb24sIHZhbCkKIAotICAgIGRlZiBlbnN1cmVfZmlsZW5hbWUgKHNlbGYsIG9wdGlvbik6CisgICAgZGVmIGVuc3VyZV9maWxlbmFtZShzZWxmLCBvcHRpb24pOgogICAgICAgICAiIiJFbnN1cmUgdGhhdCAnb3B0aW9uJyBpcyB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmaWxlLiIiIgogICAgICAgICBzZWxmLl9lbnN1cmVfdGVzdGVkX3N0cmluZyhvcHRpb24sIG9zLnBhdGguaXNmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZW5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBmaWxlIikKIAotICAgIGRlZiBlbnN1cmVfZGlybmFtZSAoc2VsZiwgb3B0aW9uKToKKyAgICBkZWYgZW5zdXJlX2Rpcm5hbWUoc2VsZiwgb3B0aW9uKToKICAgICAgICAgc2VsZi5fZW5zdXJlX3Rlc3RlZF9zdHJpbmcob3B0aW9uLCBvcy5wYXRoLmlzZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0b3J5IG5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiKQpAQCAtMjc3LDE0ICsyNzEsMTMgQEAKIAogICAgICMgLS0gQ29udmVuaWVuY2UgbWV0aG9kcyBmb3IgY29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgZ2V0X2NvbW1hbmRfbmFtZSAoc2VsZik6CisgICAgZGVmIGdldF9jb21tYW5kX25hbWUoc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2NvbW1hbmRfbmFtZScpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWFuZF9uYW1lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KIAotCi0gICAgZGVmIHNldF91bmRlZmluZWRfb3B0aW9ucyAoc2VsZiwgc3JjX2NtZCwgKm9wdGlvbl9wYWlycyk6CisgICAgZGVmIHNldF91bmRlZmluZWRfb3B0aW9ucyhzZWxmLCBzcmNfY21kLCAqb3B0aW9uX3BhaXJzKToKICAgICAgICAgIiIiU2V0IHRoZSB2YWx1ZXMgb2YgYW55ICJ1bmRlZmluZWQiIG9wdGlvbnMgZnJvbSBjb3JyZXNwb25kaW5nCiAgICAgICAgIG9wdGlvbiB2YWx1ZXMgaW4gc29tZSBvdGhlciBjb21tYW5kIG9iamVjdC4gICJVbmRlZmluZWQiIGhlcmUgbWVhbnMKICAgICAgICAgImlzIE5vbmUiLCB3aGljaCBpcyB0aGUgY29udmVudGlvbiB1c2VkIHRvIGluZGljYXRlIHRoYXQgYW4gb3B0aW9uCkBAIC0zMDksNyArMzAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoc3JjX2NtZF9vYmosIHNyY19vcHRpb24pKQogCiAKLSAgICBkZWYgZ2V0X2ZpbmFsaXplZF9jb21tYW5kIChzZWxmLCBjb21tYW5kLCBjcmVhdGU9MSk6CisgICAgZGVmIGdldF9maW5hbGl6ZWRfY29tbWFuZChzZWxmLCBjb21tYW5kLCBjcmVhdGU9MSk6CiAgICAgICAgICIiIldyYXBwZXIgYXJvdW5kIERpc3RyaWJ1dGlvbidzICdnZXRfY29tbWFuZF9vYmooKScgbWV0aG9kOiBmaW5kCiAgICAgICAgIChjcmVhdGUgaWYgbmVjZXNzYXJ5IGFuZCAnY3JlYXRlJyBpcyB0cnVlKSB0aGUgY29tbWFuZCBvYmplY3QgZm9yCiAgICAgICAgICdjb21tYW5kJywgY2FsbCBpdHMgJ2Vuc3VyZV9maW5hbGl6ZWQoKScgbWV0aG9kLCBhbmQgcmV0dXJuIHRoZQpAQCAtMzIxLDE5ICszMTQsMTggQEAKIAogICAgICMgWFhYIHJlbmFtZSB0byAnZ2V0X3JlaW5pdGlhbGl6ZWRfY29tbWFuZCgpJz8gKHNob3VsZCBkbyB0aGUKICAgICAjIHNhbWUgaW4gZGlzdC5weSwgaWYgc28pCi0gICAgZGVmIHJlaW5pdGlhbGl6ZV9jb21tYW5kIChzZWxmLCBjb21tYW5kLCByZWluaXRfc3ViY29tbWFuZHM9MCk6CisgICAgZGVmIHJlaW5pdGlhbGl6ZV9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHJlaW5pdF9zdWJjb21tYW5kcz0wKToKICAgICAgICAgcmV0dXJuIHNlbGYuZGlzdHJpYnV0aW9uLnJlaW5pdGlhbGl6ZV9jb21tYW5kKAogICAgICAgICAgICAgY29tbWFuZCwgcmVpbml0X3N1YmNvbW1hbmRzKQogCi0gICAgZGVmIHJ1bl9jb21tYW5kIChzZWxmLCBjb21tYW5kKToKKyAgICBkZWYgcnVuX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgICIiIlJ1biBzb21lIG90aGVyIGNvbW1hbmQ6IHVzZXMgdGhlICdydW5fY29tbWFuZCgpJyBtZXRob2Qgb2YKICAgICAgICAgRGlzdHJpYnV0aW9uLCB3aGljaCBjcmVhdGVzIGFuZCBmaW5hbGl6ZXMgdGhlIGNvbW1hbmQgb2JqZWN0IGlmCiAgICAgICAgIG5lY2Vzc2FyeSBhbmQgdGhlbiBpbnZva2VzIGl0cyAncnVuKCknIG1ldGhvZC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLnJ1bl9jb21tYW5kKGNvbW1hbmQpCiAKLQotICAgIGRlZiBnZXRfc3ViX2NvbW1hbmRzIChzZWxmKToKKyAgICBkZWYgZ2V0X3N1Yl9jb21tYW5kcyhzZWxmKToKICAgICAgICAgIiIiRGV0ZXJtaW5lIHRoZSBzdWItY29tbWFuZHMgdGhhdCBhcmUgcmVsZXZhbnQgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgZGlzdHJpYnV0aW9uIChpZS4sIHRoYXQgbmVlZCB0byBiZSBydW4pLiAgVGhpcyBpcyBiYXNlZCBvbiB0aGUKICAgICAgICAgJ3N1Yl9jb21tYW5kcycgY2xhc3MgYXR0cmlidXRlOiBlYWNoIHR1cGxlIGluIHRoYXQgbGlzdCBtYXkgaW5jbHVkZQpAQCAtMzQ5LDIwICszNDEsMTcgQEAKIAogICAgICMgLS0gRXh0ZXJuYWwgd29ybGQgbWFuaXB1bGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgd2FybiAoc2VsZiwgbXNnKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgid2FybmluZzogJXM6ICVzXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5nZXRfY29tbWFuZF9uYW1lKCksIG1zZykpCisgICAgZGVmIHdhcm4oc2VsZiwgbXNnKToKKyAgICAgICAgbG9nLndhcm4oIndhcm5pbmc6ICVzOiAlc1xuIiAlCisgICAgICAgICAgICAgICAgKHNlbGYuZ2V0X2NvbW1hbmRfbmFtZSgpLCBtc2cpKQogCi0KLSAgICBkZWYgZXhlY3V0ZSAoc2VsZiwgZnVuYywgYXJncywgbXNnPU5vbmUsIGxldmVsPTEpOgorICAgIGRlZiBleGVjdXRlKHNlbGYsIGZ1bmMsIGFyZ3MsIG1zZz1Ob25lLCBsZXZlbD0xKToKICAgICAgICAgdXRpbC5leGVjdXRlKGZ1bmMsIGFyZ3MsIG1zZywgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKLQotICAgIGRlZiBta3BhdGggKHNlbGYsIG5hbWUsIG1vZGU9MDc3Nyk6CisgICAgZGVmIG1rcGF0aChzZWxmLCBuYW1lLCBtb2RlPTA3NzcpOgogICAgICAgICBkaXJfdXRpbC5ta3BhdGgobmFtZSwgbW9kZSwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKLQotICAgIGRlZiBjb3B5X2ZpbGUgKHNlbGYsIGluZmlsZSwgb3V0ZmlsZSwKKyAgICBkZWYgY29weV9maWxlKHNlbGYsIGluZmlsZSwgb3V0ZmlsZSwKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9tb2RlPTEsIHByZXNlcnZlX3RpbWVzPTEsIGxpbms9Tm9uZSwgbGV2ZWw9MSk6CiAgICAgICAgICIiIkNvcHkgYSBmaWxlIHJlc3BlY3RpbmcgdmVyYm9zZSwgZHJ5LXJ1biBhbmQgZm9yY2UgZmxhZ3MuICAoVGhlCiAgICAgICAgIGZvcm1lciB0d28gZGVmYXVsdCB0byB3aGF0ZXZlciBpcyBpbiB0aGUgRGlzdHJpYnV0aW9uIG9iamVjdCwgYW5kCkBAIC0zNzUsOCArMzY0LDcgQEAKICAgICAgICAgICAgIGxpbmssCiAgICAgICAgICAgICBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKIAotCi0gICAgZGVmIGNvcHlfdHJlZSAoc2VsZiwgaW5maWxlLCBvdXRmaWxlLAorICAgIGRlZiBjb3B5X3RyZWUoc2VsZiwgaW5maWxlLCBvdXRmaWxlLAogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX21vZGU9MSwgcHJlc2VydmVfdGltZXM9MSwgcHJlc2VydmVfc3ltbGlua3M9MCwKICAgICAgICAgICAgICAgICAgICBsZXZlbD0xKToKICAgICAgICAgIiIiQ29weSBhbiBlbnRpcmUgZGlyZWN0b3J5IHRyZWUgcmVzcGVjdGluZyB2ZXJib3NlLCBkcnktcnVuLApAQCAtMzk3LDE0ICszODUsMTQgQEAKICAgICAgICAgZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCiAgICAgICAgIHNwYXduKGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49IHNlbGYuZHJ5X3J1bikKIAotICAgIGRlZiBtYWtlX2FyY2hpdmUgKHNlbGYsIGJhc2VfbmFtZSwgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgIHJvb3RfZGlyPU5vbmUsIGJhc2VfZGlyPU5vbmUpOgotICAgICAgICByZXR1cm4gYXJjaGl2ZV91dGlsLm1ha2VfYXJjaGl2ZSgKLSAgICAgICAgICAgIGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2RpciwgYmFzZV9kaXIsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQorICAgIGRlZiBtYWtlX2FyY2hpdmUoc2VsZiwgYmFzZV9uYW1lLCBmb3JtYXQsIHJvb3RfZGlyPU5vbmUsIGJhc2VfZGlyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBvd25lcj1Ob25lLCBncm91cD1Ob25lKToKKyAgICAgICAgcmV0dXJuIGFyY2hpdmVfdXRpbC5tYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmb3JtYXQsIHJvb3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2RpciwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKIAotCi0gICAgZGVmIG1ha2VfZmlsZSAoc2VsZiwgaW5maWxlcywgb3V0ZmlsZSwgZnVuYywgYXJncywKLSAgICAgICAgICAgICAgICAgICBleGVjX21zZz1Ob25lLCBza2lwX21zZz1Ob25lLCBsZXZlbD0xKToKKyAgICBkZWYgbWFrZV9maWxlKHNlbGYsIGluZmlsZXMsIG91dGZpbGUsIGZ1bmMsIGFyZ3MsCisgICAgICAgICAgICAgICAgICBleGVjX21zZz1Ob25lLCBza2lwX21zZz1Ob25lLCBsZXZlbD0xKToKICAgICAgICAgIiIiU3BlY2lhbCBjYXNlIG9mICdleGVjdXRlKCknIGZvciBvcGVyYXRpb25zIHRoYXQgcHJvY2VzcyBvbmUgb3IKICAgICAgICAgbW9yZSBpbnB1dCBmaWxlcyBhbmQgZ2VuZXJhdGUgb25lIG91dHB1dCBmaWxlLiAgV29ya3MganVzdCBsaWtlCiAgICAgICAgICdleGVjdXRlKCknLCBleGNlcHQgdGhlIG9wZXJhdGlvbiBpcyBza2lwcGVkIGFuZCBhIGRpZmZlcmVudApAQCAtNDEzLDQxICs0MDEsMzYgQEAKICAgICAgICAgYW5kIGl0IGlzIHRydWUsIHRoZW4gdGhlIGNvbW1hbmQgaXMgdW5jb25kaXRpb25hbGx5IHJ1biAtLSBkb2VzIG5vCiAgICAgICAgIHRpbWVzdGFtcCBjaGVja3MuCiAgICAgICAgICIiIgotICAgICAgICBpZiBleGVjX21zZyBpcyBOb25lOgotICAgICAgICAgICAgZXhlY19tc2cgPSAiZ2VuZXJhdGluZyAlcyBmcm9tICVzIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgKG91dGZpbGUsIHN0cmluZy5qb2luKGluZmlsZXMsICcsICcpKQogICAgICAgICBpZiBza2lwX21zZyBpcyBOb25lOgogICAgICAgICAgICAgc2tpcF9tc2cgPSAic2tpcHBpbmcgJXMgKGlucHV0cyB1bmNoYW5nZWQpIiAlIG91dGZpbGUKIAotCiAgICAgICAgICMgQWxsb3cgJ2luZmlsZXMnIHRvIGJlIGEgc2luZ2xlIHN0cmluZwotICAgICAgICBpZiB0eXBlKGluZmlsZXMpIGlzIFN0cmluZ1R5cGU6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5maWxlcywgc3RyKToKICAgICAgICAgICAgIGluZmlsZXMgPSAoaW5maWxlcywpCi0gICAgICAgIGVsaWYgdHlwZShpbmZpbGVzKSBub3QgaW4gKExpc3RUeXBlLCBUdXBsZVR5cGUpOgorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGluZmlsZXMsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAiJ2luZmlsZXMnIG11c3QgYmUgYSBzdHJpbmcsIG9yIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzIgogCisgICAgICAgIGlmIGV4ZWNfbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBleGVjX21zZyA9ICJnZW5lcmF0aW5nICVzIGZyb20gJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAob3V0ZmlsZSwgJywgJy5qb2luKGluZmlsZXMpKQorCiAgICAgICAgICMgSWYgJ291dGZpbGUnIG11c3QgYmUgcmVnZW5lcmF0ZWQgKGVpdGhlciBiZWNhdXNlIGl0IGRvZXNuJ3QKICAgICAgICAgIyBleGlzdCwgaXMgb3V0LW9mLWRhdGUsIG9yIHRoZSAnZm9yY2UnIGZsYWcgaXMgdHJ1ZSkgdGhlbgogICAgICAgICAjIHBlcmZvcm0gdGhlIGFjdGlvbiB0aGF0IHByZXN1bWFibHkgcmVnZW5lcmF0ZXMgaXQKLSAgICAgICAgaWYgc2VsZi5mb3JjZSBvciBkZXBfdXRpbC5uZXdlcl9ncm91cCAoaW5maWxlcywgb3V0ZmlsZSk6CisgICAgICAgIGlmIHNlbGYuZm9yY2Ugb3IgZGVwX3V0aWwubmV3ZXJfZ3JvdXAoaW5maWxlcywgb3V0ZmlsZSk6CiAgICAgICAgICAgICBzZWxmLmV4ZWN1dGUoZnVuYywgYXJncywgZXhlY19tc2csIGxldmVsKQogCiAgICAgICAgICMgT3RoZXJ3aXNlLCBwcmludCB0aGUgInNraXAiIG1lc3NhZ2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxvZy5kZWJ1Zyhza2lwX21zZykKIAotICAgICMgbWFrZV9maWxlICgpCi0KLSMgY2xhc3MgQ29tbWFuZAotCi0KICMgWFhYICdpbnN0YWxsX21pc2MnIGNsYXNzIG5vdCBjdXJyZW50bHkgdXNlZCAtLSBpdCB3YXMgdGhlIGJhc2UgY2xhc3MgZm9yCiAjIGJvdGggJ2luc3RhbGxfc2NyaXB0cycgYW5kICdpbnN0YWxsX2RhdGEnLCBidXQgdGhleSBvdXRncmV3IGl0LiAgSXQgbWlnaHQKICMgc3RpbGwgYmUgdXNlZnVsIGZvciAnaW5zdGFsbF9oZWFkZXJzJywgdGhvdWdoLCBzbyBJJ20ga2VlcGluZyBpdCBhcm91bmQKICMgZm9yIHRoZSB0aW1lIGJlaW5nLgogCi1jbGFzcyBpbnN0YWxsX21pc2MgKENvbW1hbmQpOgorY2xhc3MgaW5zdGFsbF9taXNjKENvbW1hbmQpOgogICAgICIiIkNvbW1vbiBiYXNlIGNsYXNzIGZvciBpbnN0YWxsaW5nIHNvbWUgZmlsZXMgaW4gYSBzdWJkaXJlY3RvcnkuCiAgICAgQ3VycmVudGx5IHVzZWQgYnkgaW5zdGFsbF9kYXRhIGFuZCBpbnN0YWxsX3NjcmlwdHMuCiAgICAgIiIiCkBAIC00NTgsMTAgKzQ0MSwxMCBAQAogICAgICAgICBzZWxmLmluc3RhbGxfZGlyID0gTm9uZQogICAgICAgICBzZWxmLm91dGZpbGVzID0gW10KIAotICAgIGRlZiBfaW5zdGFsbF9kaXJfZnJvbSAoc2VsZiwgZGlybmFtZSk6CisgICAgZGVmIF9pbnN0YWxsX2Rpcl9mcm9tKHNlbGYsIGRpcm5hbWUpOgogICAgICAgICBzZWxmLnNldF91bmRlZmluZWRfb3B0aW9ucygnaW5zdGFsbCcsIChkaXJuYW1lLCAnaW5zdGFsbF9kaXInKSkKIAotICAgIGRlZiBfY29weV9maWxlcyAoc2VsZiwgZmlsZWxpc3QpOgorICAgIGRlZiBfY29weV9maWxlcyhzZWxmLCBmaWxlbGlzdCk6CiAgICAgICAgIHNlbGYub3V0ZmlsZXMgPSBbXQogICAgICAgICBpZiBub3QgZmlsZWxpc3Q6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTQ3MCw5ICs0NTMsNSBAQAogICAgICAgICAgICAgc2VsZi5jb3B5X2ZpbGUoZiwgc2VsZi5pbnN0YWxsX2RpcikKICAgICAgICAgICAgIHNlbGYub3V0ZmlsZXMuYXBwZW5kKG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyLCBmKSkKIAotICAgIGRlZiBnZXRfb3V0cHV0cyAoc2VsZik6CisgICAgZGVmIGdldF9vdXRwdXRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5vdXRmaWxlcwotCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcHJpbnQgIm9rIgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL19faW5pdF9fLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL19faW5pdF9fLnB5CmluZGV4IDA1Yzc1OGEuLjIwYjE1OWYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9fX2luaXRfXy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvX19pbml0X18ucHkKQEAgLTMsOCArMyw2IEBACiBQYWNrYWdlIGNvbnRhaW5pbmcgaW1wbGVtZW50YXRpb24gb2YgYWxsIHRoZSBzdGFuZGFyZCBEaXN0dXRpbHMKIGNvbW1hbmRzLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAogX19hbGxfXyA9IFsnYnVpbGQnLApAQCAtMjUsNyArMjMsNyBAQAogICAgICAgICAgICAnYmRpc3RfcnBtJywKICAgICAgICAgICAgJ2JkaXN0X3dpbmluc3QnLAogICAgICAgICAgICAndXBsb2FkJywKLQorICAgICAgICAgICAnY2hlY2snLAogICAgICAgICAgICAjIFRoZXNlIHR3byBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U6CiAgICAgICAgICAgICMnYmRpc3Rfc2R1eCcsCiAgICAgICAgICAgICMnYmRpc3RfcGtndG9vbCcsCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKaW5kZXggY2EzZGE3NC4uZDc5MTBiMSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQpAQCAtMywyMiArMywyMCBAQAogSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdiZGlzdCcgY29tbWFuZCAoY3JlYXRlIGEgYnVpbHQgW2JpbmFyeV0KIGRpc3RyaWJ1dGlvbikuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBpbXBvcnQgb3MKLWZyb20gdHlwZXMgaW1wb3J0ICoKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgorCiBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwgRGlzdHV0aWxzT3B0aW9uRXJyb3IKIAogCi1kZWYgc2hvd19mb3JtYXRzICgpOgorZGVmIHNob3dfZm9ybWF0cygpOgogICAgICIiIlByaW50IGxpc3Qgb2YgYXZhaWxhYmxlIGZvcm1hdHMgKGFyZ3VtZW50cyB0byAiLS1mb3JtYXQiIG9wdGlvbikuCiAgICAgIiIiCiAgICAgZnJvbSBkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0IGltcG9ydCBGYW5jeUdldG9wdAotICAgIGZvcm1hdHM9W10KKyAgICBmb3JtYXRzID0gW10KICAgICBmb3IgZm9ybWF0IGluIGJkaXN0LmZvcm1hdF9jb21tYW5kczoKICAgICAgICAgZm9ybWF0cy5hcHBlbmQoKCJmb3JtYXRzPSIgKyBmb3JtYXQsIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBiZGlzdC5mb3JtYXRfY29tbWFuZFtmb3JtYXRdWzFdKSkKQEAgLTI2LDcgKzI0LDcgQEAKICAgICBwcmV0dHlfcHJpbnRlci5wcmludF9oZWxwKCJMaXN0IG9mIGF2YWlsYWJsZSBkaXN0cmlidXRpb24gZm9ybWF0czoiKQogCiAKLWNsYXNzIGJkaXN0IChDb21tYW5kKToKK2NsYXNzIGJkaXN0KENvbW1hbmQpOgogCiAgICAgZGVzY3JpcHRpb24gPSAiY3JlYXRlIGEgYnVpbHQgKGJpbmFyeSkgZGlzdHJpYnV0aW9uIgogCkBAIC00Miw2ICs0MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgIltkZWZhdWx0OiBkaXN0XSIpLAogICAgICAgICAgICAgICAgICAgICAoJ3NraXAtYnVpbGQnLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgInNraXAgcmVidWlsZGluZyBldmVyeXRoaW5nIChmb3IgdGVzdGluZy9kZWJ1Z2dpbmcpIiksCisgICAgICAgICAgICAgICAgICAgICgnb3duZXI9JywgJ3UnLAorICAgICAgICAgICAgICAgICAgICAgIk93bmVyIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUiCisgICAgICAgICAgICAgICAgICAgICAiIFtkZWZhdWx0OiBjdXJyZW50IHVzZXJdIiksCisgICAgICAgICAgICAgICAgICAgICgnZ3JvdXA9JywgJ2cnLAorICAgICAgICAgICAgICAgICAgICAgIkdyb3VwIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUiCisgICAgICAgICAgICAgICAgICAgICAiIFtkZWZhdWx0OiBjdXJyZW50IGdyb3VwXSIpLAogICAgICAgICAgICAgICAgICAgIF0KIAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsnc2tpcC1idWlsZCddCkBAIC01Miw0OSArNTYsNDEgQEAKICAgICAgICAgXQogCiAgICAgIyBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGRvIG5vdCB0YWtlIGEgZm9ybWF0IG9wdGlvbiBmcm9tIGJkaXN0Ci0gICAgbm9fZm9ybWF0X29wdGlvbiA9ICgnYmRpc3RfcnBtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICMnYmRpc3Rfc2R1eCcsICdiZGlzdF9wa2d0b29sJwotICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIG5vX2Zvcm1hdF9vcHRpb24gPSAoJ2JkaXN0X3JwbScsKQogCiAgICAgIyBUaGlzIHdvbid0IGRvIGluIHJlYWxpdHk6IHdpbGwgbmVlZCB0byBkaXN0aW5ndWlzaCBSUE0taXNoIExpbnV4LAogICAgICMgRGViaWFuLWlzaCBMaW51eCwgU29sYXJpcywgRnJlZUJTRCwgLi4uLCBXaW5kb3dzLCBNYWMgT1MuCi0gICAgZGVmYXVsdF9mb3JtYXQgPSB7ICdwb3NpeCc6ICdnenRhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnLAotICAgICAgICAgICAgICAgICAgICAgICAnb3MyJzogJ3ppcCcsIH0KKyAgICBkZWZhdWx0X2Zvcm1hdCA9IHsncG9zaXgnOiAnZ3p0YXInLAorICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnLAorICAgICAgICAgICAgICAgICAgICAgICdvczInOiAnemlwJ30KIAogICAgICMgRXN0YWJsaXNoIHRoZSBwcmVmZXJyZWQgb3JkZXIgKGZvciB0aGUgLS1oZWxwLWZvcm1hdHMgb3B0aW9uKS4KICAgICBmb3JtYXRfY29tbWFuZHMgPSBbJ3JwbScsICdnenRhcicsICdienRhcicsICd6dGFyJywgJ3RhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICd3aW5pbnN0JywgJ3ppcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICMncGtndG9vbCcsICdzZHV4JwotICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICd3aW5pbnN0JywgJ3ppcCcsICdtc2knXQogCiAgICAgIyBBbmQgdGhlIHJlYWwgaW5mb3JtYXRpb24uCi0gICAgZm9ybWF0X2NvbW1hbmQgPSB7ICdycG0nOiAgICgnYmRpc3RfcnBtJywgICJSUE0gZGlzdHJpYnV0aW9uIiksCi0gICAgICAgICAgICAgICAgICAgICAgICd6aXAnOiAgICgnYmRpc3RfZHVtYicsICJaSVAgZmlsZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAnZ3p0YXInOiAoJ2JkaXN0X2R1bWInLCAiZ3ppcCdlZCB0YXIgZmlsZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAnYnp0YXInOiAoJ2JkaXN0X2R1bWInLCAiYnppcDInZWQgdGFyIGZpbGUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJ3p0YXInOiAgKCdiZGlzdF9kdW1iJywgImNvbXByZXNzZWQgdGFyIGZpbGUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJ3Rhcic6ICAgKCdiZGlzdF9kdW1iJywgInRhciBmaWxlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICd3aW5pbnN0JzogKCdiZGlzdF93aW5pbnN0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpbmRvd3MgZXhlY3V0YWJsZSBpbnN0YWxsZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJ3ppcCc6ICAgKCdiZGlzdF9kdW1iJywgIlpJUCBmaWxlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICMncGtndG9vbCc6ICgnYmRpc3RfcGtndG9vbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAiU29sYXJpcyBwa2d0b29sIGRpc3RyaWJ1dGlvbiIpLAotICAgICAgICAgICAgICAgICAgICAgICAjJ3NkdXgnOiAgKCdiZGlzdF9zZHV4JywgIkhQLVVYIHN3aW5zdGFsbCBkZXBvdCIpLAorICAgIGZvcm1hdF9jb21tYW5kID0geydycG0nOiAgICgnYmRpc3RfcnBtJywgICJSUE0gZGlzdHJpYnV0aW9uIiksCisgICAgICAgICAgICAgICAgICAgICAgJ2d6dGFyJzogKCdiZGlzdF9kdW1iJywgImd6aXAnZWQgdGFyIGZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAnYnp0YXInOiAoJ2JkaXN0X2R1bWInLCAiYnppcDInZWQgdGFyIGZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAnenRhcic6ICAoJ2JkaXN0X2R1bWInLCAiY29tcHJlc3NlZCB0YXIgZmlsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICd0YXInOiAgICgnYmRpc3RfZHVtYicsICJ0YXIgZmlsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICd3aW5pbnN0JzogKCdiZGlzdF93aW5pbnN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2luZG93cyBleGVjdXRhYmxlIGluc3RhbGxlciIpLAorICAgICAgICAgICAgICAgICAgICAgICd6aXAnOiAgICgnYmRpc3RfZHVtYicsICJaSVAgZmlsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICdtc2knOiAgICgnYmRpc3RfbXNpJywgICJNaWNyb3NvZnQgSW5zdGFsbGVyIikKICAgICAgICAgICAgICAgICAgICAgICB9CiAKIAotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYmRpc3RfYmFzZSA9IE5vbmUKICAgICAgICAgc2VsZi5wbGF0X25hbWUgPSBOb25lCiAgICAgICAgIHNlbGYuZm9ybWF0cyA9IE5vbmUKICAgICAgICAgc2VsZi5kaXN0X2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5za2lwX2J1aWxkID0gMAorICAgICAgICBzZWxmLmdyb3VwID0gTm9uZQorICAgICAgICBzZWxmLm93bmVyID0gTm9uZQogCi0gICAgIyBpbml0aWFsaXplX29wdGlvbnMoKQotCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgICMgaGF2ZSB0byBmaW5hbGl6ZSAncGxhdF9uYW1lJyBiZWZvcmUgJ2JkaXN0X2Jhc2UnCiAgICAgICAgIGlmIHNlbGYucGxhdF9uYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBpZiBzZWxmLnNraXBfYnVpbGQ6CkBAIC0xMjIsMTAgKzExOCw3IEBACiAgICAgICAgIGlmIHNlbGYuZGlzdF9kaXIgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuZGlzdF9kaXIgPSAiZGlzdCIKIAotICAgICMgZmluYWxpemVfb3B0aW9ucygpCi0KLSAgICBkZWYgcnVuIChzZWxmKToKLQorICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICMgRmlndXJlIG91dCB3aGljaCBzdWItY29tbWFuZHMgd2UgbmVlZCB0byBydW4uCiAgICAgICAgIGNvbW1hbmRzID0gW10KICAgICAgICAgZm9yIGZvcm1hdCBpbiBzZWxmLmZvcm1hdHM6CkBAIC0xNDEsMTIgKzEzNCwxMyBAQAogICAgICAgICAgICAgaWYgY21kX25hbWUgbm90IGluIHNlbGYubm9fZm9ybWF0X29wdGlvbjoKICAgICAgICAgICAgICAgICBzdWJfY21kLmZvcm1hdCA9IHNlbGYuZm9ybWF0c1tpXQogCisgICAgICAgICAgICAjIHBhc3NpbmcgdGhlIG93bmVyIGFuZCBncm91cCBuYW1lcyBmb3IgdGFyIGFyY2hpdmluZworICAgICAgICAgICAgaWYgY21kX25hbWUgPT0gJ2JkaXN0X2R1bWInOgorICAgICAgICAgICAgICAgIHN1Yl9jbWQub3duZXIgPSBzZWxmLm93bmVyCisgICAgICAgICAgICAgICAgc3ViX2NtZC5ncm91cCA9IHNlbGYuZ3JvdXAKKwogICAgICAgICAgICAgIyBJZiB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgYWdhaW4sIHRlbGwgaXQgdG8KICAgICAgICAgICAgICMga2VlcCBpdHMgdGVtcG9yYXJ5IGZpbGVzIGFyb3VuZCBzbyBzdWJzZXF1ZW50IHJ1bnMgZ28gZmFzdGVyLgogICAgICAgICAgICAgaWYgY21kX25hbWUgaW4gY29tbWFuZHNbaSsxOl06CiAgICAgICAgICAgICAgICAgc3ViX2NtZC5rZWVwX3RlbXAgPSAxCiAgICAgICAgICAgICBzZWxmLnJ1bl9jb21tYW5kKGNtZF9uYW1lKQotCi0gICAgIyBydW4oKQotCi0jIGNsYXNzIGJkaXN0CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5CmluZGV4IGY3NDBjNDYuLjdjNjBkMzkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5CkBAIC00LDIxICs0LDIxIEBACiBkaXN0cmlidXRpb24gLS0gaS5lLiwganVzdCBhbiBhcmNoaXZlIHRvIGJlIHVucGFja2VkIHVuZGVyICRwcmVmaXggb3IKICRleGVjX3ByZWZpeCkuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBpbXBvcnQgb3MKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKKworZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9weXRob25fdmVyc2lvbgorCiBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKIGZyb20gZGlzdHV0aWxzLmRpcl91dGlsIGltcG9ydCByZW1vdmVfdHJlZSwgZW5zdXJlX3JlbGF0aXZlCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKLWZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgZ2V0X3B5dGhvbl92ZXJzaW9uCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAogY2xhc3MgYmRpc3RfZHVtYiAoQ29tbWFuZCk6CiAKLSAgICBkZXNjcmlwdGlvbiA9ICJjcmVhdGUgYSBcImR1bWJcIiBidWlsdCBkaXN0cmlidXRpb24iCisgICAgZGVzY3JpcHRpb24gPSAnY3JlYXRlIGEgImR1bWIiIGJ1aWx0IGRpc3RyaWJ1dGlvbicKIAogICAgIHVzZXJfb3B0aW9ucyA9IFsoJ2JkaXN0LWRpcj0nLCAnZCcsCiAgICAgICAgICAgICAgICAgICAgICAidGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY3JlYXRpbmcgdGhlIGRpc3RyaWJ1dGlvbiIpLApAQCAtMzcsNiArMzcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgKCdyZWxhdGl2ZScsIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAiYnVpbGQgdGhlIGFyY2hpdmUgdXNpbmcgcmVsYXRpdmUgcGF0aHMiCiAgICAgICAgICAgICAgICAgICAgICAiKGRlZmF1bHQ6IGZhbHNlKSIpLAorICAgICAgICAgICAgICAgICAgICAoJ293bmVyPScsICd1JywKKyAgICAgICAgICAgICAgICAgICAgICJPd25lciBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAgICAgICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICAgICAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCBncm91cF0iKSwKICAgICAgICAgICAgICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ2tlZXAtdGVtcCcsICdza2lwLWJ1aWxkJywgJ3JlbGF0aXZlJ10KQEAgLTU0LDEyICs2MCwxMCBAQAogICAgICAgICBzZWxmLmRpc3RfZGlyID0gTm9uZQogICAgICAgICBzZWxmLnNraXBfYnVpbGQgPSAwCiAgICAgICAgIHNlbGYucmVsYXRpdmUgPSAwCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCiAKLSAgICAjIGluaXRpYWxpemVfb3B0aW9ucygpCi0KLQotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zIChzZWxmKToKLQorICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmJkaXN0X2RpciBpcyBOb25lOgogICAgICAgICAgICAgYmRpc3RfYmFzZSA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdiZGlzdCcpLmJkaXN0X2Jhc2UKICAgICAgICAgICAgIHNlbGYuYmRpc3RfZGlyID0gb3MucGF0aC5qb2luKGJkaXN0X2Jhc2UsICdkdW1iJykKQEAgLTc2LDExICs4MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZGlzdF9kaXInLCAnZGlzdF9kaXInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdwbGF0X25hbWUnLCAncGxhdF9uYW1lJykpCiAKLSAgICAjIGZpbmFsaXplX29wdGlvbnMoKQotCi0KLSAgICBkZWYgcnVuIChzZWxmKToKLQorICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLnNraXBfYnVpbGQ6CiAgICAgICAgICAgICBzZWxmLnJ1bl9jb21tYW5kKCdidWlsZCcpCiAKQEAgLTExOSw3ICsxMTksOCBAQAogCiAgICAgICAgICMgTWFrZSB0aGUgYXJjaGl2ZQogICAgICAgICBmaWxlbmFtZSA9IHNlbGYubWFrZV9hcmNoaXZlKHBzZXVkb2luc3RhbGxfcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdCwgcm9vdF9kaXI9YXJjaGl2ZV9yb290KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9ybWF0LCByb290X2Rpcj1hcmNoaXZlX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9c2VsZi5vd25lciwgZ3JvdXA9c2VsZi5ncm91cCkKICAgICAgICAgaWYgc2VsZi5kaXN0cmlidXRpb24uaGFzX2V4dF9tb2R1bGVzKCk6CiAgICAgICAgICAgICBweXZlcnNpb24gPSBnZXRfcHl0aG9uX3ZlcnNpb24oKQogICAgICAgICBlbHNlOgpAQCAtMTI5LDcgKzEzMCwzIEBACiAKICAgICAgICAgaWYgbm90IHNlbGYua2VlcF90ZW1wOgogICAgICAgICAgICAgcmVtb3ZlX3RyZWUoc2VsZi5iZGlzdF9kaXIsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQotCi0gICAgIyBydW4oKQotCi0jIGNsYXNzIGJkaXN0X2R1bWIKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9tc2kucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfbXNpLnB5CmluZGV4IDQyMjcxYzQuLmRlZDgzN2QgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9tc2kucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X21zaS5weQpAQCAtMSwyMCArMSwyMSBAQAogIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQotIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTWFydGluIHYuIEz2d2lzCisjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNYXJ0aW4gdm9uIEz2d2lzCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMgVGhlIGJkaXN0X3dpbmluc3QgY29tbWFuZCBwcm9wZXIKICMgYmFzZWQgb24gYmRpc3Rfd2luaW5zdAogIiIiCiBJbXBsZW1lbnRzIHRoZSBiZGlzdF9tc2kgY29tbWFuZC4KICIiIgotCiBpbXBvcnQgc3lzLCBvcworZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9weXRob25fdmVyc2lvbgorCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgcmVtb3ZlX3RyZWUKLWZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgZ2V0X3B5dGhvbl92ZXJzaW9uCiBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBTdHJpY3RWZXJzaW9uCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yCi1mcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKK2Zyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybQorCiBpbXBvcnQgbXNpbGliCiBmcm9tIG1zaWxpYiBpbXBvcnQgc2NoZW1hLCBzZXF1ZW5jZSwgdGV4dAogZnJvbSBtc2lsaWIgaW1wb3J0IERpcmVjdG9yeSwgRmVhdHVyZSwgRGlhbG9nLCBhZGRfZGF0YQpAQCAtMjgsNyArMjksNiBAQAogICAgICAgICBkZWZhdWx0LCBjYW5jZWwsIGJpdG1hcD10cnVlKSIiIgogICAgICAgICBEaWFsb2cuX19pbml0X18oc2VsZiwgKmFyZ3MpCiAgICAgICAgIHJ1bGVyID0gc2VsZi5oIC0gMzYKLSAgICAgICAgYm13aWR0aCA9IDE1MipydWxlci8zMjgKICAgICAgICAgI2lmIGt3LmdldCgiYml0bWFwIiwgVHJ1ZSk6CiAgICAgICAgICMgICAgc2VsZi5iaXRtYXAoIkJpdG1hcCIsIDAsIDAsIGJtd2lkdGgsIHJ1bGVyLCAiUHl0aG9uV2luIikKICAgICAgICAgc2VsZi5saW5lKCJCb3R0b21MaW5lIiwgMCwgcnVsZXIsIHNlbGYudywgMCkKQEAgLTExNyw2ICsxMTcsMTIgQEAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ2tlZXAtdGVtcCcsICduby10YXJnZXQtY29tcGlsZScsICduby10YXJnZXQtb3B0aW1pemUnLAogICAgICAgICAgICAgICAgICAgICAgICAnc2tpcC1idWlsZCddCiAKKyAgICBhbGxfdmVyc2lvbnMgPSBbJzIuMCcsICcyLjEnLCAnMi4yJywgJzIuMycsICcyLjQnLAorICAgICAgICAgICAgICAgICAgICAnMi41JywgJzIuNicsICcyLjcnLCAnMi44JywgJzIuOScsCisgICAgICAgICAgICAgICAgICAgICczLjAnLCAnMy4xJywgJzMuMicsICczLjMnLCAnMy40JywKKyAgICAgICAgICAgICAgICAgICAgJzMuNScsICczLjYnLCAnMy43JywgJzMuOCcsICczLjknXQorICAgIG90aGVyX3ZlcnNpb24gPSAnWCcKKwogICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgogICAgICAgICBzZWxmLmJkaXN0X2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5wbGF0X25hbWUgPSBOb25lCkBAIC0xMjgsMjAgKzEzNCwyNCBAQAogICAgICAgICBzZWxmLnNraXBfYnVpbGQgPSAwCiAgICAgICAgIHNlbGYuaW5zdGFsbF9zY3JpcHQgPSBOb25lCiAgICAgICAgIHNlbGYucHJlX2luc3RhbGxfc2NyaXB0ID0gTm9uZQorICAgICAgICBzZWxmLnZlcnNpb25zID0gTm9uZQogCiAgICAgZGVmIGZpbmFsaXplX29wdGlvbnMgKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmJkaXN0X2RpciBpcyBOb25lOgogICAgICAgICAgICAgYmRpc3RfYmFzZSA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdiZGlzdCcpLmJkaXN0X2Jhc2UKICAgICAgICAgICAgIHNlbGYuYmRpc3RfZGlyID0gb3MucGF0aC5qb2luKGJkaXN0X2Jhc2UsICdtc2knKQogICAgICAgICBzaG9ydF92ZXJzaW9uID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkKKyAgICAgICAgaWYgKG5vdCBzZWxmLnRhcmdldF92ZXJzaW9uKSBhbmQgc2VsZi5kaXN0cmlidXRpb24uaGFzX2V4dF9tb2R1bGVzKCk6CisgICAgICAgICAgICBzZWxmLnRhcmdldF92ZXJzaW9uID0gc2hvcnRfdmVyc2lvbgogICAgICAgICBpZiBzZWxmLnRhcmdldF92ZXJzaW9uOgorICAgICAgICAgICAgc2VsZi52ZXJzaW9ucyA9IFtzZWxmLnRhcmdldF92ZXJzaW9uXQogICAgICAgICAgICAgaWYgbm90IHNlbGYuc2tpcF9idWlsZCBhbmQgc2VsZi5kaXN0cmlidXRpb24uaGFzX2V4dF9tb2R1bGVzKClcCiAgICAgICAgICAgICAgICBhbmQgc2VsZi50YXJnZXRfdmVyc2lvbiAhPSBzaG9ydF92ZXJzaW9uOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgInRhcmdldCB2ZXJzaW9uIGNhbiBvbmx5IGJlICVzLCBvciB0aGUgJy0tc2tpcC1idWlsZCciIFwKICAgICAgICAgICAgICAgICAgICAgICAiIG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCIgJSAoc2hvcnRfdmVyc2lvbiwpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnRhcmdldF92ZXJzaW9uID0gc2hvcnRfdmVyc2lvbgorICAgICAgICAgICAgc2VsZi52ZXJzaW9ucyA9IGxpc3Qoc2VsZi5hbGxfdmVyc2lvbnMpCiAKICAgICAgICAgc2VsZi5zZXRfdW5kZWZpbmVkX29wdGlvbnMoJ2JkaXN0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkaXN0X2RpcicsICdkaXN0X2RpcicpLApAQCAtMjIzLDggKzIzMywxMSBAQAogICAgICAgICAjIFByZWZpeCBQcm9kdWN0TmFtZSB3aXRoIFB5dGhvbiB4LnksIHNvIHRoYXQKICAgICAgICAgIyBpdCBzb3J0cyB0b2dldGhlciB3aXRoIHRoZSBvdGhlciBQeXRob24gcGFja2FnZXMKICAgICAgICAgIyBpbiBBZGQtUmVtb3ZlLVByb2dyYW1zIChBUFIpCi0gICAgICAgIHByb2R1Y3RfbmFtZSA9ICJQeXRob24gJXMgJXMiICUgKHNlbGYudGFyZ2V0X3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLmdldF9mdWxsbmFtZSgpKQorICAgICAgICBmdWxsbmFtZSA9IHNlbGYuZGlzdHJpYnV0aW9uLmdldF9mdWxsbmFtZSgpCisgICAgICAgIGlmIHNlbGYudGFyZ2V0X3ZlcnNpb246CisgICAgICAgICAgICBwcm9kdWN0X25hbWUgPSAiUHl0aG9uICVzICVzIiAlIChzZWxmLnRhcmdldF92ZXJzaW9uLCBmdWxsbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb2R1Y3RfbmFtZSA9ICJQeXRob24gJXMiICUgKGZ1bGxuYW1lKQogICAgICAgICBzZWxmLmRiID0gbXNpbGliLmluaXRfZGF0YWJhc2UoaW5zdGFsbGVyX25hbWUsIHNjaGVtYSwKICAgICAgICAgICAgICAgICBwcm9kdWN0X25hbWUsIG1zaWxpYi5nZW5fdXVpZCgpLAogICAgICAgICAgICAgICAgIHN2ZXJzaW9uLCBhdXRob3IpCkBAIC0yNDUsNyArMjU4LDggQEAKICAgICAgICAgc2VsZi5kYi5Db21taXQoKQogCiAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5kaXN0cmlidXRpb24sICdkaXN0X2ZpbGVzJyk6Ci0gICAgICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbi5kaXN0X2ZpbGVzLmFwcGVuZCgoJ2JkaXN0X21zaScsIHNlbGYudGFyZ2V0X3ZlcnNpb24sIGZ1bGxuYW1lKSkKKyAgICAgICAgICAgIHR1cCA9ICdiZGlzdF9tc2knLCBzZWxmLnRhcmdldF92ZXJzaW9uIG9yICdhbnknLCBmdWxsbmFtZQorICAgICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24uZGlzdF9maWxlcy5hcHBlbmQodHVwKQogCiAgICAgICAgIGlmIG5vdCBzZWxmLmtlZXBfdGVtcDoKICAgICAgICAgICAgIHJlbW92ZV90cmVlKHNlbGYuYmRpc3RfZGlyLCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKQEAgLTI1Myw3MCArMjY3LDEyNSBAQAogICAgIGRlZiBhZGRfZmlsZXMoc2VsZik6CiAgICAgICAgIGRiID0gc2VsZi5kYgogICAgICAgICBjYWIgPSBtc2lsaWIuQ0FCKCJkaXN0ZmlsZXMiKQotICAgICAgICBmID0gRmVhdHVyZShkYiwgImRlZmF1bHQiLCAiRGVmYXVsdCBGZWF0dXJlIiwgIkV2ZXJ5dGhpbmciLCAxLCBkaXJlY3Rvcnk9IlRBUkdFVERJUiIpCi0gICAgICAgIGYuc2V0X2N1cnJlbnQoKQogICAgICAgICByb290ZGlyID0gb3MucGF0aC5hYnNwYXRoKHNlbGYuYmRpc3RfZGlyKQotICAgICAgICByb290ID0gRGlyZWN0b3J5KGRiLCBjYWIsIE5vbmUsIHJvb3RkaXIsICJUQVJHRVRESVIiLCAiU291cmNlRGlyIikKLSAgICAgICAgZGIuQ29tbWl0KCkKLSAgICAgICAgdG9kbyA9IFtyb290XQotICAgICAgICB3aGlsZSB0b2RvOgotICAgICAgICAgICAgZGlyID0gdG9kby5wb3AoKQotICAgICAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihkaXIuYWJzb2x1dGUpOgotICAgICAgICAgICAgICAgIGFmaWxlID0gb3MucGF0aC5qb2luKGRpci5hYnNvbHV0ZSwgZmlsZSkKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGFmaWxlKToKLSAgICAgICAgICAgICAgICAgICAgbmV3ZGlyID0gRGlyZWN0b3J5KGRiLCBjYWIsIGRpciwgZmlsZSwgZmlsZSwgIiVzfCVzIiAlIChkaXIubWFrZV9zaG9ydChmaWxlKSwgZmlsZSkpCi0gICAgICAgICAgICAgICAgICAgIHRvZG8uYXBwZW5kKG5ld2RpcikKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBrZXkgPSBkaXIuYWRkX2ZpbGUoZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgZmlsZT09c2VsZi5pbnN0YWxsX3NjcmlwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaW5zdGFsbF9zY3JpcHRfa2V5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCAiTXVsdGlwbGUgZmlsZXMgd2l0aCBuYW1lICVzIiAlIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5zdGFsbF9zY3JpcHRfa2V5ID0gJ1sjJXNdJyAlIGtleQogCisgICAgICAgIHJvb3QgPSBEaXJlY3RvcnkoZGIsIGNhYiwgTm9uZSwgcm9vdGRpciwgIlRBUkdFVERJUiIsICJTb3VyY2VEaXIiKQorICAgICAgICBmID0gRmVhdHVyZShkYiwgIlB5dGhvbiIsICJQeXRob24iLCAiRXZlcnl0aGluZyIsCisgICAgICAgICAgICAgICAgICAgIDAsIDEsIGRpcmVjdG9yeT0iVEFSR0VURElSIikKKworICAgICAgICBpdGVtcyA9IFsoZiwgcm9vdCwgJycpXQorICAgICAgICBmb3IgdmVyc2lvbiBpbiBzZWxmLnZlcnNpb25zICsgW3NlbGYub3RoZXJfdmVyc2lvbl06CisgICAgICAgICAgICB0YXJnZXQgPSAiVEFSR0VURElSIiArIHZlcnNpb24KKyAgICAgICAgICAgIG5hbWUgPSBkZWZhdWx0ID0gIlB5dGhvbiIgKyB2ZXJzaW9uCisgICAgICAgICAgICBkZXNjID0gIkV2ZXJ5dGhpbmciCisgICAgICAgICAgICBpZiB2ZXJzaW9uIGlzIHNlbGYub3RoZXJfdmVyc2lvbjoKKyAgICAgICAgICAgICAgICB0aXRsZSA9ICJQeXRob24gZnJvbSBhbm90aGVyIGxvY2F0aW9uIgorICAgICAgICAgICAgICAgIGxldmVsID0gMgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0aXRsZSA9ICJQeXRob24gJXMgZnJvbSByZWdpc3RyeSIgJSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgbGV2ZWwgPSAxCisgICAgICAgICAgICBmID0gRmVhdHVyZShkYiwgbmFtZSwgdGl0bGUsIGRlc2MsIDEsIGxldmVsLCBkaXJlY3Rvcnk9dGFyZ2V0KQorICAgICAgICAgICAgZGlyID0gRGlyZWN0b3J5KGRiLCBjYWIsIHJvb3QsIHJvb3RkaXIsIHRhcmdldCwgZGVmYXVsdCkKKyAgICAgICAgICAgIGl0ZW1zLmFwcGVuZCgoZiwgZGlyLCB2ZXJzaW9uKSkKKyAgICAgICAgZGIuQ29tbWl0KCkKKworICAgICAgICBzZWVuID0ge30KKyAgICAgICAgZm9yIGZlYXR1cmUsIGRpciwgdmVyc2lvbiBpbiBpdGVtczoKKyAgICAgICAgICAgIHRvZG8gPSBbZGlyXQorICAgICAgICAgICAgd2hpbGUgdG9kbzoKKyAgICAgICAgICAgICAgICBkaXIgPSB0b2RvLnBvcCgpCisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihkaXIuYWJzb2x1dGUpOgorICAgICAgICAgICAgICAgICAgICBhZmlsZSA9IG9zLnBhdGguam9pbihkaXIuYWJzb2x1dGUsIGZpbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoYWZpbGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgPSAiJXN8JXMiICUgKGRpci5tYWtlX3Nob3J0KGZpbGUpLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IGZpbGUgKyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdkaXIgPSBEaXJlY3RvcnkoZGIsIGNhYiwgZGlyLCBmaWxlLCBkZWZhdWx0LCBzaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvZG8uYXBwZW5kKG5ld2RpcikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkaXIuY29tcG9uZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpci5zdGFydF9jb21wb25lbnQoZGlyLmxvZ2ljYWwsIGZlYXR1cmUsIDApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhZmlsZSBub3QgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBzZWVuW2FmaWxlXSA9IGRpci5hZGRfZmlsZShmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbGU9PXNlbGYuaW5zdGFsbF9zY3JpcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaW5zdGFsbF9zY3JpcHRfa2V5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzT3B0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTXVsdGlwbGUgZmlsZXMgd2l0aCBuYW1lICVzIiAlIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5zdGFsbF9zY3JpcHRfa2V5ID0gJ1sjJXNdJyAlIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBzZWVuW2FmaWxlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJEdXBsaWNhdGVGaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhrZXkgKyB2ZXJzaW9uLCBkaXIuY29tcG9uZW50LCBrZXksIE5vbmUsIGRpci5sb2dpY2FsKV0pCisgICAgICAgICAgICBkYi5Db21taXQoKQogICAgICAgICBjYWIuY29tbWl0KGRiKQogCiAgICAgZGVmIGFkZF9maW5kX3B5dGhvbihzZWxmKToKICAgICAgICAgIiIiQWRkcyBjb2RlIHRvIHRoZSBpbnN0YWxsZXIgdG8gY29tcHV0ZSB0aGUgbG9jYXRpb24gb2YgUHl0aG9uLgotICAgICAgICBQcm9wZXJ0aWVzIFBZVEhPTi5NQUNISU5FLCBQWVRIT04uVVNFUiwgUFlUSE9ORElSIGFuZCBQWVRIT04gd2lsbCBiZSBzZXQKLSAgICAgICAgaW4gYm90aCB0aGUgZXhlY3V0ZSBhbmQgVUkgc2VxdWVuY2VzOyBQWVRIT05ESVIgd2lsbCBiZSBzZXQgZnJvbQotICAgICAgICBQWVRIT04uVVNFUiBpZiBkZWZpbmVkLCBlbHNlIGZyb20gUFlUSE9OLk1BQ0hJTkUuCi0gICAgICAgIFBZVEhPTiBpcyBQWVRIT05ESVJccHl0aG9uLmV4ZSIiIgotICAgICAgICBpbnN0YWxsX3BhdGggPSByIlNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXCVzXEluc3RhbGxQYXRoIiAlIHNlbGYudGFyZ2V0X3ZlcnNpb24KLSAgICAgICAgaWYgbXNpbGliLldpbjY0OgotICAgICAgICAgICAgIyB0eXBlOiBtc2lkYkxvY2F0b3JUeXBlUmF3VmFsdWUgKyBtc2lkYkxvY2F0b3JUeXBlNjRiaXQKLSAgICAgICAgICAgIFR5cGUgPSAyKzE2Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBUeXBlID0gMgotICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiUmVnTG9jYXRvciIsCi0gICAgICAgICAgICAgICAgWygicHl0aG9uLm1hY2hpbmUiLCAyLCBpbnN0YWxsX3BhdGgsIE5vbmUsIFR5cGUpLAotICAgICAgICAgICAgICAgICAoInB5dGhvbi51c2VyIiwgMSwgaW5zdGFsbF9wYXRoLCBOb25lLCBUeXBlKV0pCi0gICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJBcHBTZWFyY2giLAotICAgICAgICAgICAgICAgIFsoIlBZVEhPTi5NQUNISU5FIiwgInB5dGhvbi5tYWNoaW5lIiksCi0gICAgICAgICAgICAgICAgICgiUFlUSE9OLlVTRVIiLCAicHl0aG9uLnVzZXIiKV0pCi0gICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJDdXN0b21BY3Rpb24iLAotICAgICAgICAgICAgICAgIFsoIlB5dGhvbkZyb21NYWNoaW5lIiwgNTErMjU2LCAiUFlUSE9ORElSIiwgIltQWVRIT04uTUFDSElORV0iKSwKLSAgICAgICAgICAgICAgICAgKCJQeXRob25Gcm9tVXNlciIsIDUxKzI1NiwgIlBZVEhPTkRJUiIsICJbUFlUSE9OLlVTRVJdIiksCi0gICAgICAgICAgICAgICAgICgiUHl0aG9uRXhlIiwgNTErMjU2LCAiUFlUSE9OIiwgIltQWVRIT05ESVJdXFxweXRob24uZXhlIiksCi0gICAgICAgICAgICAgICAgICgiSW5pdGlhbFRhcmdldERpciIsIDUxKzI1NiwgIlRBUkdFVERJUiIsICJbUFlUSE9ORElSXSIpXSkKLSAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIkluc3RhbGxFeGVjdXRlU2VxdWVuY2UiLAotICAgICAgICAgICAgICAgIFsoIlB5dGhvbkZyb21NYWNoaW5lIiwgIlBZVEhPTi5NQUNISU5FIiwgNDAxKSwKLSAgICAgICAgICAgICAgICAgKCJQeXRob25Gcm9tVXNlciIsICJQWVRIT04uVVNFUiIsIDQwMiksCi0gICAgICAgICAgICAgICAgICgiUHl0aG9uRXhlIiwgTm9uZSwgNDAzKSwKLSAgICAgICAgICAgICAgICAgKCJJbml0aWFsVGFyZ2V0RGlyIiwgJ1RBUkdFVERJUj0iIicsIDQwNCksCi0gICAgICAgICAgICAgICAgXSkKLSAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIkluc3RhbGxVSVNlcXVlbmNlIiwKLSAgICAgICAgICAgICAgICBbKCJQeXRob25Gcm9tTWFjaGluZSIsICJQWVRIT04uTUFDSElORSIsIDQwMSksCi0gICAgICAgICAgICAgICAgICgiUHl0aG9uRnJvbVVzZXIiLCAiUFlUSE9OLlVTRVIiLCA0MDIpLAotICAgICAgICAgICAgICAgICAoIlB5dGhvbkV4ZSIsIE5vbmUsIDQwMyksCi0gICAgICAgICAgICAgICAgICgiSW5pdGlhbFRhcmdldERpciIsICdUQVJHRVRESVI9IiInLCA0MDQpLAotICAgICAgICAgICAgICAgIF0pCisKKyAgICAgICAgUHJvcGVydGllcyBQWVRIT04uTUFDSElORS5YLlkgYW5kIFBZVEhPTi5VU0VSLlguWSB3aWxsIGJlIHNldCBmcm9tIHRoZQorICAgICAgICByZWdpc3RyeSBmb3IgZWFjaCB2ZXJzaW9uIG9mIFB5dGhvbi4KKworICAgICAgICBQcm9wZXJ0aWVzIFRBUkdFVERJUlguWSB3aWxsIGJlIHNldCBmcm9tIFBZVEhPTi5VU0VSLlguWSBpZiBkZWZpbmVkLAorICAgICAgICBlbHNlIGZyb20gUFlUSE9OLk1BQ0hJTkUuWC5ZLgorCisgICAgICAgIFByb3BlcnRpZXMgUFlUSE9OWC5ZIHdpbGwgYmUgc2V0IHRvIFRBUkdFVERJUlguWVxccHl0aG9uLmV4ZSIiIgorCisgICAgICAgIHN0YXJ0ID0gNDAyCisgICAgICAgIGZvciB2ZXIgaW4gc2VsZi52ZXJzaW9uczoKKyAgICAgICAgICAgIGluc3RhbGxfcGF0aCA9IHIiU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcJXNcSW5zdGFsbFBhdGgiICUgdmVyCisgICAgICAgICAgICBtYWNoaW5lX3JlZyA9ICJweXRob24ubWFjaGluZS4iICsgdmVyCisgICAgICAgICAgICB1c2VyX3JlZyA9ICJweXRob24udXNlci4iICsgdmVyCisgICAgICAgICAgICBtYWNoaW5lX3Byb3AgPSAiUFlUSE9OLk1BQ0hJTkUuIiArIHZlcgorICAgICAgICAgICAgdXNlcl9wcm9wID0gIlBZVEhPTi5VU0VSLiIgKyB2ZXIKKyAgICAgICAgICAgIG1hY2hpbmVfYWN0aW9uID0gIlB5dGhvbkZyb21NYWNoaW5lIiArIHZlcgorICAgICAgICAgICAgdXNlcl9hY3Rpb24gPSAiUHl0aG9uRnJvbVVzZXIiICsgdmVyCisgICAgICAgICAgICBleGVfYWN0aW9uID0gIlB5dGhvbkV4ZSIgKyB2ZXIKKyAgICAgICAgICAgIHRhcmdldF9kaXJfcHJvcCA9ICJUQVJHRVRESVIiICsgdmVyCisgICAgICAgICAgICBleGVfcHJvcCA9ICJQWVRIT04iICsgdmVyCisgICAgICAgICAgICBpZiBtc2lsaWIuV2luNjQ6CisgICAgICAgICAgICAgICAgIyB0eXBlOiBtc2lkYkxvY2F0b3JUeXBlUmF3VmFsdWUgKyBtc2lkYkxvY2F0b3JUeXBlNjRiaXQKKyAgICAgICAgICAgICAgICBUeXBlID0gMisxNgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBUeXBlID0gMgorICAgICAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIlJlZ0xvY2F0b3IiLAorICAgICAgICAgICAgICAgICAgICBbKG1hY2hpbmVfcmVnLCAyLCBpbnN0YWxsX3BhdGgsIE5vbmUsIFR5cGUpLAorICAgICAgICAgICAgICAgICAgICAgKHVzZXJfcmVnLCAxLCBpbnN0YWxsX3BhdGgsIE5vbmUsIFR5cGUpXSkKKyAgICAgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJBcHBTZWFyY2giLAorICAgICAgICAgICAgICAgICAgICBbKG1hY2hpbmVfcHJvcCwgbWFjaGluZV9yZWcpLAorICAgICAgICAgICAgICAgICAgICAgKHVzZXJfcHJvcCwgdXNlcl9yZWcpXSkKKyAgICAgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJDdXN0b21BY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICBbKG1hY2hpbmVfYWN0aW9uLCA1MSsyNTYsIHRhcmdldF9kaXJfcHJvcCwgIlsiICsgbWFjaGluZV9wcm9wICsgIl0iKSwKKyAgICAgICAgICAgICAgICAgICAgICh1c2VyX2FjdGlvbiwgNTErMjU2LCB0YXJnZXRfZGlyX3Byb3AsICJbIiArIHVzZXJfcHJvcCArICJdIiksCisgICAgICAgICAgICAgICAgICAgICAoZXhlX2FjdGlvbiwgNTErMjU2LCBleGVfcHJvcCwgIlsiICsgdGFyZ2V0X2Rpcl9wcm9wICsgIl1cXHB5dGhvbi5leGUiKSwKKyAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJJbnN0YWxsRXhlY3V0ZVNlcXVlbmNlIiwKKyAgICAgICAgICAgICAgICAgICAgWyhtYWNoaW5lX2FjdGlvbiwgbWFjaGluZV9wcm9wLCBzdGFydCksCisgICAgICAgICAgICAgICAgICAgICAodXNlcl9hY3Rpb24sIHVzZXJfcHJvcCwgc3RhcnQgKyAxKSwKKyAgICAgICAgICAgICAgICAgICAgIChleGVfYWN0aW9uLCBOb25lLCBzdGFydCArIDIpLAorICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIkluc3RhbGxVSVNlcXVlbmNlIiwKKyAgICAgICAgICAgICAgICAgICAgWyhtYWNoaW5lX2FjdGlvbiwgbWFjaGluZV9wcm9wLCBzdGFydCksCisgICAgICAgICAgICAgICAgICAgICAodXNlcl9hY3Rpb24sIHVzZXJfcHJvcCwgc3RhcnQgKyAxKSwKKyAgICAgICAgICAgICAgICAgICAgIChleGVfYWN0aW9uLCBOb25lLCBzdGFydCArIDIpLAorICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIkNvbmRpdGlvbiIsCisgICAgICAgICAgICAgICAgICAgIFsoIlB5dGhvbiIgKyB2ZXIsIDAsICJOT1QgVEFSR0VURElSIiArIHZlcildKQorICAgICAgICAgICAgc3RhcnQgKz0gNAorICAgICAgICAgICAgYXNzZXJ0IHN0YXJ0IDwgNTAwCiAKICAgICBkZWYgYWRkX3NjcmlwdHMoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuaW5zdGFsbF9zY3JpcHQ6Ci0gICAgICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiQ3VzdG9tQWN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgWygiaW5zdGFsbF9zY3JpcHQiLCA1MCwgIlBZVEhPTiIsIHNlbGYuaW5zdGFsbF9zY3JpcHRfa2V5KV0pCi0gICAgICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSIsCi0gICAgICAgICAgICAgICAgICAgIFsoImluc3RhbGxfc2NyaXB0IiwgIk5PVCBJbnN0YWxsZWQiLCA2ODAwKV0pCisgICAgICAgICAgICBzdGFydCA9IDY4MDAKKyAgICAgICAgICAgIGZvciB2ZXIgaW4gc2VsZi52ZXJzaW9ucyArIFtzZWxmLm90aGVyX3ZlcnNpb25dOgorICAgICAgICAgICAgICAgIGluc3RhbGxfYWN0aW9uID0gImluc3RhbGxfc2NyaXB0LiIgKyB2ZXIKKyAgICAgICAgICAgICAgICBleGVfcHJvcCA9ICJQWVRIT04iICsgdmVyCisgICAgICAgICAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIkN1c3RvbUFjdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBbKGluc3RhbGxfYWN0aW9uLCA1MCwgZXhlX3Byb3AsIHNlbGYuaW5zdGFsbF9zY3JpcHRfa2V5KV0pCisgICAgICAgICAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIkluc3RhbGxFeGVjdXRlU2VxdWVuY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnN0YWxsX2FjdGlvbiwgIiZQeXRob24lcz0zIiAlIHZlciwgc3RhcnQpXSkKKyAgICAgICAgICAgICAgICBzdGFydCArPSAxCisgICAgICAgICMgWFhYIHByZS1pbnN0YWxsIHNjcmlwdHMgYXJlIGN1cnJlbnRseSByZWZ1c2VkIGluIGZpbmFsaXplX29wdGlvbnMoKQorICAgICAgICAjICAgICBidXQgaWYgdGhpcyBmZWF0dXJlIGlzIGNvbXBsZXRlZCwgaXQgd2lsbCBhbHNvIG5lZWQgdG8gYWRkCisgICAgICAgICMgICAgIGVudHJpZXMgZm9yIGVhY2ggdmVyc2lvbiBhcyB0aGUgYWJvdmUgY29kZSBkb2VzCiAgICAgICAgIGlmIHNlbGYucHJlX2luc3RhbGxfc2NyaXB0OgogICAgICAgICAgICAgc2NyaXB0Zm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5iZGlzdF9kaXIsICJwcmVpbnN0YWxsLmJhdCIpCiAgICAgICAgICAgICBmID0gb3BlbihzY3JpcHRmbiwgInciKQpAQCAtMzUxLDcgKzQyMCw2IEBACiAgICAgICAgICMgc2VlICJEaWFsb2cgU3R5bGUgQml0cyIKICAgICAgICAgbW9kYWwgPSAzICAgICAgIyB2aXNpYmxlIHwgbW9kYWwKICAgICAgICAgbW9kZWxlc3MgPSAxICAgIyB2aXNpYmxlCi0gICAgICAgIHRyYWNrX2Rpc2tfc3BhY2UgPSAzMgogCiAgICAgICAgICMgVUkgY3VzdG9taXphdGlvbiBwcm9wZXJ0aWVzCiAgICAgICAgIGFkZF9kYXRhKGRiLCAiUHJvcGVydHkiLApAQCAtMzgwLDcgKzQ0OCw3IEBACiAgICAgICAgICAgICAgICAgIFsoIlByZXBhcmVEbGciLCAiTm90IFByaXZpbGVnZWQgb3IgV2luZG93czl4IG9yIEluc3RhbGxlZCIsIDE0MCksCiAgICAgICAgICAgICAgICAgICAoIldoaWNoVXNlcnNEbGciLCAiUHJpdmlsZWdlZCBhbmQgbm90IFdpbmRvd3M5eCBhbmQgbm90IEluc3RhbGxlZCIsIDE0MSksCiAgICAgICAgICAgICAgICAgICAjIEluIHRoZSB1c2VyIGludGVyZmFjZSwgYXNzdW1lIGFsbC11c2VycyBpbnN0YWxsYXRpb24gaWYgcHJpdmlsZWdlZC4KLSAgICAgICAgICAgICAgICAgICgiU2VsZWN0RGlyZWN0b3J5RGxnIiwgIk5vdCBJbnN0YWxsZWQiLCAxMjMwKSwKKyAgICAgICAgICAgICAgICAgICgiU2VsZWN0RmVhdHVyZXNEbGciLCAiTm90IEluc3RhbGxlZCIsIDEyMzApLAogICAgICAgICAgICAgICAgICAgIyBYWFggbm8gc3VwcG9ydCBmb3IgcmVzdW1lIGluc3RhbGxhdGlvbnMgeWV0CiAgICAgICAgICAgICAgICAgICAjKCJSZXN1bWVEbGciLCAiSW5zdGFsbGVkIEFORCAoUkVTVU1FIE9SIFByZXNlbGVjdGVkKSIsIDEyNDApLAogICAgICAgICAgICAgICAgICAgKCJNYWludGVuYW5jZVR5cGVEbGciLCAiSW5zdGFsbGVkIEFORCBOT1QgUkVTVU1FIEFORCBOT1QgUHJlc2VsZWN0ZWQiLCAxMjUwKSwKQEAgLTUwMywzMyArNTcxLDQ5IEBACiAgICAgICAgIGMuZXZlbnQoIlNwYXduRGlhbG9nIiwgIkNhbmNlbERsZyIpCiAKICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICMgVGFyZ2V0IGRpcmVjdG9yeSBzZWxlY3Rpb24KLSAgICAgICAgc2VsZGxnID0gUHlEaWFsb2coZGIsICJTZWxlY3REaXJlY3RvcnlEbGciLCB4LCB5LCB3LCBoLCBtb2RhbCwgdGl0bGUsCisgICAgICAgICMgRmVhdHVyZSAoUHl0aG9uIGRpcmVjdG9yeSkgc2VsZWN0aW9uCisgICAgICAgIHNlbGRsZyA9IFB5RGlhbG9nKGRiLCAiU2VsZWN0RmVhdHVyZXNEbGciLCB4LCB5LCB3LCBoLCBtb2RhbCwgdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiTmV4dCIsICJOZXh0IiwgIkNhbmNlbCIpCi0gICAgICAgIHNlbGRsZy50aXRsZSgiU2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeSIpCisgICAgICAgIHNlbGRsZy50aXRsZSgiU2VsZWN0IFB5dGhvbiBJbnN0YWxsYXRpb25zIikKIAotICAgICAgICB2ZXJzaW9uID0gc3lzLnZlcnNpb25bOjNdKyIgIgotICAgICAgICBzZWxkbGcudGV4dCgiSGludCIsIDE1LCAzMCwgMzAwLCA0MCwgMywKLSAgICAgICAgICAgICAgICAiVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBzaG91bGQgY29udGFpbiBhIFB5dGhvbiAlc2luc3RhbGxhdGlvbiIgJSB2ZXJzaW9uKQorICAgICAgICBzZWxkbGcudGV4dCgiSGludCIsIDE1LCAzMCwgMzAwLCAyMCwgMywKKyAgICAgICAgICAgICAgICAgICAgIlNlbGVjdCB0aGUgUHl0aG9uIGxvY2F0aW9ucyB3aGVyZSAlcyBzaG91bGQgYmUgaW5zdGFsbGVkLiIKKyAgICAgICAgICAgICAgICAgICAgJSBzZWxmLmRpc3RyaWJ1dGlvbi5nZXRfZnVsbG5hbWUoKSkKIAogICAgICAgICBzZWxkbGcuYmFjaygiPCBCYWNrIiwgTm9uZSwgYWN0aXZlPTApCiAgICAgICAgIGMgPSBzZWxkbGcubmV4dCgiTmV4dCA+IiwgIkNhbmNlbCIpCi0gICAgICAgIGMuZXZlbnQoIlNldFRhcmdldFBhdGgiLCAiVEFSR0VURElSIiwgb3JkZXJpbmc9MSkKLSAgICAgICAgYy5ldmVudCgiU3Bhd25XYWl0RGlhbG9nIiwgIldhaXRGb3JDb3N0aW5nRGxnIiwgb3JkZXJpbmc9MikKLSAgICAgICAgYy5ldmVudCgiRW5kRGlhbG9nIiwgIlJldHVybiIsIG9yZGVyaW5nPTMpCi0KLSAgICAgICAgYyA9IHNlbGRsZy5jYW5jZWwoIkNhbmNlbCIsICJEaXJlY3RvcnlDb21ibyIpCisgICAgICAgIG9yZGVyID0gMQorICAgICAgICBjLmV2ZW50KCJbVEFSR0VURElSXSIsICJbU291cmNlRGlyXSIsIG9yZGVyaW5nPW9yZGVyKQorICAgICAgICBmb3IgdmVyc2lvbiBpbiBzZWxmLnZlcnNpb25zICsgW3NlbGYub3RoZXJfdmVyc2lvbl06CisgICAgICAgICAgICBvcmRlciArPSAxCisgICAgICAgICAgICBjLmV2ZW50KCJbVEFSR0VURElSXSIsICJbVEFSR0VURElSJXNdIiAlIHZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICJGRUFUVVJFX1NFTEVDVEVEIEFORCAmUHl0aG9uJXM9MyIgJSB2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICBvcmRlcmluZz1vcmRlcikKKyAgICAgICAgYy5ldmVudCgiU3Bhd25XYWl0RGlhbG9nIiwgIldhaXRGb3JDb3N0aW5nRGxnIiwgb3JkZXJpbmc9b3JkZXIgKyAxKQorICAgICAgICBjLmV2ZW50KCJFbmREaWFsb2ciLCAiUmV0dXJuIiwgb3JkZXJpbmc9b3JkZXIgKyAyKQorICAgICAgICBjID0gc2VsZGxnLmNhbmNlbCgiQ2FuY2VsIiwgIkZlYXR1cmVzIikKICAgICAgICAgYy5ldmVudCgiU3Bhd25EaWFsb2ciLCAiQ2FuY2VsRGxnIikKIAotICAgICAgICBzZWxkbGcuY29udHJvbCgiRGlyZWN0b3J5Q29tYm8iLCAiRGlyZWN0b3J5Q29tYm8iLCAxNSwgNzAsIDI3MiwgODAsIDM5MzIxOSwKLSAgICAgICAgICAgICAgICAgICAgICAgIlRBUkdFVERJUiIsIE5vbmUsICJEaXJlY3RvcnlMaXN0IiwgTm9uZSkKLSAgICAgICAgc2VsZGxnLmNvbnRyb2woIkRpcmVjdG9yeUxpc3QiLCAiRGlyZWN0b3J5TGlzdCIsIDE1LCA5MCwgMzA4LCAxMzYsIDMsICJUQVJHRVRESVIiLAotICAgICAgICAgICAgICAgICAgICAgICBOb25lLCAiUGF0aEVkaXQiLCBOb25lKQotICAgICAgICBzZWxkbGcuY29udHJvbCgiUGF0aEVkaXQiLCAiUGF0aEVkaXQiLCAxNSwgMjMwLCAzMDYsIDE2LCAzLCAiVEFSR0VURElSIiwgTm9uZSwgIk5leHQiLCBOb25lKQotICAgICAgICBjID0gc2VsZGxnLnB1c2hidXR0b24oIlVwIiwgMzA2LCA3MCwgMTgsIDE4LCAzLCAiVXAiLCBOb25lKQotICAgICAgICBjLmV2ZW50KCJEaXJlY3RvcnlMaXN0VXAiLCAiMCIpCi0gICAgICAgIGMgPSBzZWxkbGcucHVzaGJ1dHRvbigiTmV3RGlyIiwgMzI0LCA3MCwgMzAsIDE4LCAzLCAiTmV3IiwgTm9uZSkKLSAgICAgICAgYy5ldmVudCgiRGlyZWN0b3J5TGlzdE5ldyIsICIwIikKKyAgICAgICAgYyA9IHNlbGRsZy5jb250cm9sKCJGZWF0dXJlcyIsICJTZWxlY3Rpb25UcmVlIiwgMTUsIDYwLCAzMDAsIDEyMCwgMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJGRUFUVVJFIiwgTm9uZSwgIlBhdGhFZGl0IiwgTm9uZSkKKyAgICAgICAgYy5ldmVudCgiW0ZFQVRVUkVfU0VMRUNURURdIiwgIjEiKQorICAgICAgICB2ZXIgPSBzZWxmLm90aGVyX3ZlcnNpb24KKyAgICAgICAgaW5zdGFsbF9vdGhlcl9jb25kID0gIkZFQVRVUkVfU0VMRUNURUQgQU5EICZQeXRob24lcz0zIiAlIHZlcgorICAgICAgICBkb250X2luc3RhbGxfb3RoZXJfY29uZCA9ICJGRUFUVVJFX1NFTEVDVEVEIEFORCAmUHl0aG9uJXM8PjMiICUgdmVyCisKKyAgICAgICAgYyA9IHNlbGRsZy50ZXh0KCJPdGhlciIsIDE1LCAyMDAsIDMwMCwgMTUsIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHJvdmlkZSBhbiBhbHRlcm5hdGUgUHl0aG9uIGxvY2F0aW9uIikKKyAgICAgICAgYy5jb25kaXRpb24oIkVuYWJsZSIsIGluc3RhbGxfb3RoZXJfY29uZCkKKyAgICAgICAgYy5jb25kaXRpb24oIlNob3ciLCBpbnN0YWxsX290aGVyX2NvbmQpCisgICAgICAgIGMuY29uZGl0aW9uKCJEaXNhYmxlIiwgZG9udF9pbnN0YWxsX290aGVyX2NvbmQpCisgICAgICAgIGMuY29uZGl0aW9uKCJIaWRlIiwgZG9udF9pbnN0YWxsX290aGVyX2NvbmQpCisKKyAgICAgICAgYyA9IHNlbGRsZy5jb250cm9sKCJQYXRoRWRpdCIsICJQYXRoRWRpdCIsIDE1LCAyMTUsIDMwMCwgMTYsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiVEFSR0VURElSIiArIHZlciwgTm9uZSwgIk5leHQiLCBOb25lKQorICAgICAgICBjLmNvbmRpdGlvbigiRW5hYmxlIiwgaW5zdGFsbF9vdGhlcl9jb25kKQorICAgICAgICBjLmNvbmRpdGlvbigiU2hvdyIsIGluc3RhbGxfb3RoZXJfY29uZCkKKyAgICAgICAgYy5jb25kaXRpb24oIkRpc2FibGUiLCBkb250X2luc3RhbGxfb3RoZXJfY29uZCkKKyAgICAgICAgYy5jb25kaXRpb24oIkhpZGUiLCBkb250X2luc3RhbGxfb3RoZXJfY29uZCkKIAogICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAgICAgIyBEaXNrIGNvc3QKQEAgLTY0NSw3ICs3MjksMTAgQEAKIAogICAgIGRlZiBnZXRfaW5zdGFsbGVyX2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIyBGYWN0b3JlZCBvdXQgdG8gYWxsb3cgb3ZlcnJpZGluZyBpbiBzdWJjbGFzc2VzCi0gICAgICAgIGJhc2VfbmFtZSA9ICIlcy4lcy1weSVzLm1zaSIgJSAoZnVsbG5hbWUsIHNlbGYucGxhdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0X3ZlcnNpb24pCisgICAgICAgIGlmIHNlbGYudGFyZ2V0X3ZlcnNpb246CisgICAgICAgICAgICBiYXNlX25hbWUgPSAiJXMuJXMtcHklcy5tc2kiICUgKGZ1bGxuYW1lLCBzZWxmLnBsYXRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXRfdmVyc2lvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2VfbmFtZSA9ICIlcy4lcy5tc2kiICUgKGZ1bGxuYW1lLCBzZWxmLnBsYXRfbmFtZSkKICAgICAgICAgaW5zdGFsbGVyX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXN0X2RpciwgYmFzZV9uYW1lKQogICAgICAgICByZXR1cm4gaW5zdGFsbGVyX25hbWUKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9ycG0ucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfcnBtLnB5CmluZGV4IDlhYTcwMzAuLjBiYmEzNjMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9ycG0ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X3JwbS5weQpAQCAtMywxOCArMywxNyBAQAogSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdiZGlzdF9ycG0nIGNvbW1hbmQgKGNyZWF0ZSBSUE0gc291cmNlIGFuZCBiaW5hcnkKIGRpc3RyaWJ1dGlvbnMpLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotaW1wb3J0IHN5cywgb3MsIHN0cmluZwotZnJvbSB0eXBlcyBpbXBvcnQgKgoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3RyaW5nCisKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKIGZyb20gZGlzdHV0aWxzLmRlYnVnIGltcG9ydCBERUJVRwotZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCiBmcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IHdyaXRlX2ZpbGUKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgotZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCBnZXRfcHl0aG9uX3ZlcnNpb24KK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKERpc3R1dGlsc09wdGlvbkVycm9yLCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzdHV0aWxzRmlsZUVycm9yLCBEaXN0dXRpbHNFeGVjRXJyb3IpCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKIGNsYXNzIGJkaXN0X3JwbSAoQ29tbWFuZCk6CkBAIC0xMjUsMTAgKzEyNCwxMyBAQAogICAgICAgICAjIEFsbG93IGEgcGFja2FnZXIgdG8gZXhwbGljaXRseSBmb3JjZSBhbiBhcmNoaXRlY3R1cmUKICAgICAgICAgKCdmb3JjZS1hcmNoPScsIE5vbmUsCiAgICAgICAgICAiRm9yY2UgYW4gYXJjaGl0ZWN0dXJlIG9udG8gdGhlIFJQTSBidWlsZCBwcm9jZXNzIiksCi0gICAgICAgXQorCisgICAgICAgICgncXVpZXQnLCAncScsCisgICAgICAgICAiUnVuIHRoZSBJTlNUQUxMIHBoYXNlIG9mIFJQTSBidWlsZGluZyBpbiBxdWlldCBtb2RlIiksCisgICAgICAgIF0KIAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsna2VlcC10ZW1wJywgJ3VzZS1ycG0tb3B0LWZsYWdzJywgJ3JwbTMtbW9kZScsCi0gICAgICAgICAgICAgICAgICAgICAgICduby1hdXRvcmVxJ10KKyAgICAgICAgICAgICAgICAgICAgICAgJ25vLWF1dG9yZXEnLCAncXVpZXQnXQogCiAgICAgbmVnYXRpdmVfb3B0ID0geyduby1rZWVwLXRlbXAnOiAna2VlcC10ZW1wJywKICAgICAgICAgICAgICAgICAgICAgJ25vLXJwbS1vcHQtZmxhZ3MnOiAndXNlLXJwbS1vcHQtZmxhZ3MnLApAQCAtMTc4LDYgKzE4MCw3IEBACiAgICAgICAgIHNlbGYubm9fYXV0b3JlcSA9IDAKIAogICAgICAgICBzZWxmLmZvcmNlX2FyY2ggPSBOb25lCisgICAgICAgIHNlbGYucXVpZXQgPSAwCiAKICAgICAjIGluaXRpYWxpemVfb3B0aW9ucygpCiAKQEAgLTIyMyw3ICsyMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLmdldF9jb250YWN0X2VtYWlsKCkpKQogICAgICAgICBzZWxmLmVuc3VyZV9zdHJpbmcoJ3BhY2thZ2VyJykKICAgICAgICAgc2VsZi5lbnN1cmVfc3RyaW5nX2xpc3QoJ2RvY19maWxlcycpCi0gICAgICAgIGlmIHR5cGUoc2VsZi5kb2NfZmlsZXMpIGlzIExpc3RUeXBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZG9jX2ZpbGVzLCBsaXN0KToKICAgICAgICAgICAgIGZvciByZWFkbWUgaW4gKCdSRUFETUUnLCAnUkVBRE1FLnR4dCcpOgogICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJlYWRtZSkgYW5kIHJlYWRtZSBub3QgaW4gc2VsZi5kb2NfZmlsZXM6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9jX2ZpbGVzLmFwcGVuZChyZWFkbWUpCkBAIC0zMjQsNiArMzI3LDcgQEAKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoJy91c3IvYmluL3JwbWJ1aWxkJykgb3IgXAogICAgICAgICAgICBvcy5wYXRoLmV4aXN0cygnL2Jpbi9ycG1idWlsZCcpOgogICAgICAgICAgICAgcnBtX2NtZCA9IFsncnBtYnVpbGQnXQorCiAgICAgICAgIGlmIHNlbGYuc291cmNlX29ubHk6ICMgd2hhdCBraW5kIG9mIFJQTXM/CiAgICAgICAgICAgICBycG1fY21kLmFwcGVuZCgnLWJzJykKICAgICAgICAgZWxpZiBzZWxmLmJpbmFyeV9vbmx5OgpAQCAtMzM1LDYgKzMzOSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX3RvcGRpciAlcycgJSBvcy5wYXRoLmFic3BhdGgoc2VsZi5ycG1fYmFzZSldKQogICAgICAgICBpZiBub3Qgc2VsZi5rZWVwX3RlbXA6CiAgICAgICAgICAgICBycG1fY21kLmFwcGVuZCgnLS1jbGVhbicpCisKKyAgICAgICAgaWYgc2VsZi5xdWlldDoKKyAgICAgICAgICAgIHJwbV9jbWQuYXBwZW5kKCctLXF1aWV0JykKKwogICAgICAgICBycG1fY21kLmFwcGVuZChzcGVjX3BhdGgpCiAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBiaW5hcnkgcnBtIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGJ1aWx0IG91dCBvZiB0aGlzIHNwZWMKICAgICAgICAgIyBmaWxlCkBAIC0zNDcsMjIgKzM1NSwyNiBAQAogICAgICAgICAgICAgc3JjX3JwbSwgbm9uX3NyY19ycG0sIHNwZWNfcGF0aCkKIAogICAgICAgICBvdXQgPSBvcy5wb3BlbihxX2NtZCkKLSAgICAgICAgYmluYXJ5X3JwbXMgPSBbXQotICAgICAgICBzb3VyY2VfcnBtID0gTm9uZQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgbGluZSA9IG91dC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgbCA9IHN0cmluZy5zcGxpdChzdHJpbmcuc3RyaXAobGluZSkpCi0gICAgICAgICAgICBhc3NlcnQobGVuKGwpID09IDIpCi0gICAgICAgICAgICBiaW5hcnlfcnBtcy5hcHBlbmQobFsxXSkKLSAgICAgICAgICAgICMgVGhlIHNvdXJjZSBycG0gaXMgbmFtZWQgYWZ0ZXIgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBzcGVjIGZpbGUKLSAgICAgICAgICAgIGlmIHNvdXJjZV9ycG0gaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzb3VyY2VfcnBtID0gbFswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiaW5hcnlfcnBtcyA9IFtdCisgICAgICAgICAgICBzb3VyY2VfcnBtID0gTm9uZQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBsaW5lID0gb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBsID0gc3RyaW5nLnNwbGl0KHN0cmluZy5zdHJpcChsaW5lKSkKKyAgICAgICAgICAgICAgICBhc3NlcnQobGVuKGwpID09IDIpCisgICAgICAgICAgICAgICAgYmluYXJ5X3JwbXMuYXBwZW5kKGxbMV0pCisgICAgICAgICAgICAgICAgIyBUaGUgc291cmNlIHJwbSBpcyBuYW1lZCBhZnRlciB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIHNwZWMgZmlsZQorICAgICAgICAgICAgICAgIGlmIHNvdXJjZV9ycG0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc291cmNlX3JwbSA9IGxbMF0KIAotICAgICAgICBzdGF0dXMgPSBvdXQuY2xvc2UoKQotICAgICAgICBpZiBzdGF0dXM6Ci0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IoIkZhaWxlZCB0byBleGVjdXRlOiAlcyIgJSByZXByKHFfY21kKSkKKyAgICAgICAgICAgIHN0YXR1cyA9IG91dC5jbG9zZSgpCisgICAgICAgICAgICBpZiBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZTogJXMiICUgcmVwcihxX2NtZCkpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG91dC5jbG9zZSgpCiAKICAgICAgICAgc2VsZi5zcGF3bihycG1fY21kKQogCkBAIC00MzcsNyArNDQ5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAnT2Jzb2xldGVzJywKICAgICAgICAgICAgICAgICAgICAgICApOgogICAgICAgICAgICAgdmFsID0gZ2V0YXR0cihzZWxmLCBzdHJpbmcubG93ZXIoZmllbGQpKQotICAgICAgICAgICAgaWYgdHlwZSh2YWwpIGlzIExpc3RUeXBlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGxpc3QpOgogICAgICAgICAgICAgICAgIHNwZWNfZmlsZS5hcHBlbmQoJyVzOiAlcycgJSAoZmllbGQsIHN0cmluZy5qb2luKHZhbCkpKQogICAgICAgICAgICAgZWxpZiB2YWwgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgc3BlY19maWxlLmFwcGVuZCgnJXM6ICVzJyAlIChmaWVsZCwgdmFsKSkKQEAgLTQ4OCwxMyArNTAwLDEzIEBACiAgICAgICAgICMgdGhhdCB3ZSBvcGVuIGFuZCBpbnRlcnBvbGF0ZSBpbnRvIHRoZSBzcGVjIGZpbGUsIGJ1dCB0aGUgZGVmYXVsdHMKICAgICAgICAgIyBhcmUganVzdCB0ZXh0IHRoYXQgd2UgZHJvcCBpbiBhcy1pcy4gIEhtbW0uCiAKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAoJyVzIGluc3RhbGwgLU8xIC0tcm9vdD0kUlBNX0JVSUxEX1JPT1QgJworICAgICAgICAgICAgICAgICAgICAgICAnLS1yZWNvcmQ9SU5TVEFMTEVEX0ZJTEVTJykgJSBkZWZfc2V0dXBfY2FsbAorCiAgICAgICAgIHNjcmlwdF9vcHRpb25zID0gWwogICAgICAgICAgICAgKCdwcmVwJywgJ3ByZXBfc2NyaXB0JywgIiVzZXR1cCAtbiAle25hbWV9LSV7dW5tYW5nbGVkX3ZlcnNpb259IiksCiAgICAgICAgICAgICAoJ2J1aWxkJywgJ2J1aWxkX3NjcmlwdCcsIGRlZl9idWlsZCksCi0gICAgICAgICAgICAoJ2luc3RhbGwnLCAnaW5zdGFsbF9zY3JpcHQnLAotICAgICAgICAgICAgICgiJXMgaW5zdGFsbCAiCi0gICAgICAgICAgICAgICItLXJvb3Q9JFJQTV9CVUlMRF9ST09UICIKLSAgICAgICAgICAgICAgIi0tcmVjb3JkPUlOU1RBTExFRF9GSUxFUyIpICUgZGVmX3NldHVwX2NhbGwpLAorICAgICAgICAgICAgKCdpbnN0YWxsJywgJ2luc3RhbGxfc2NyaXB0JywgaW5zdGFsbF9jbWQpLAogICAgICAgICAgICAgKCdjbGVhbicsICdjbGVhbl9zY3JpcHQnLCAicm0gLXJmICRSUE1fQlVJTERfUk9PVCIpLAogICAgICAgICAgICAgKCd2ZXJpZnlzY3JpcHQnLCAndmVyaWZ5X3NjcmlwdCcsIE5vbmUpLAogICAgICAgICAgICAgKCdwcmUnLCAncHJlX2luc3RhbGwnLCBOb25lKSwKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF93aW5pbnN0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X3dpbmluc3QucHkKaW5kZXggMTI4ZTE5OS4uMzZkNDZiZCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X3dpbmluc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X3dpbmluc3QucHkKQEAgLTMsMTcgKzMsMTkgQEAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAnYmRpc3Rfd2luaW5zdCcgY29tbWFuZDogY3JlYXRlIGEgd2luZG93cyBpbnN0YWxsZXIKIGV4ZS1wcm9ncmFtLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotaW1wb3J0IHN5cywgb3MsIHN0cmluZworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3RyaW5nCisKK2Zyb20gc3lzY29uZmlnIGltcG9ydCBnZXRfcHl0aG9uX3ZlcnNpb24KKwogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZAotZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCi1mcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgY3JlYXRlX3RyZWUsIHJlbW92ZV90cmVlCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKLWZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgZ2V0X3B5dGhvbl92ZXJzaW9uCitmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgcmVtb3ZlX3RyZWUKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzT3B0aW9uRXJyb3IsIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKK2Zyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybQogCiBjbGFzcyBiZGlzdF93aW5pbnN0IChDb21tYW5kKToKIApAQCAtMzU0LDUgKzM1Niw5IEBACiAgICAgICAgICAgICBzZml4ID0gJycKIAogICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkaXJlY3RvcnksICJ3aW5pbnN0LSUuMWYlcy5leGUiICUgKGJ2LCBzZml4KSkKLSAgICAgICAgcmV0dXJuIG9wZW4oZmlsZW5hbWUsICJyYiIpLnJlYWQoKQorICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKICMgY2xhc3MgYmRpc3Rfd2luaW5zdApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkLnB5CmluZGV4IDc0NjJlOTMuLmY4NGJmMzUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGQucHkKQEAgLTIsMjIgKzIsMTkgQEAKIAogSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdidWlsZCcgY29tbWFuZC4iIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKIGltcG9ydCBzeXMsIG9zCisKK2Zyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybQogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZAogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNPcHRpb25FcnJvcgotZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCiAKLQotZGVmIHNob3dfY29tcGlsZXJzICgpOgorZGVmIHNob3dfY29tcGlsZXJzKCk6CiAgICAgZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBzaG93X2NvbXBpbGVycwogICAgIHNob3dfY29tcGlsZXJzKCkKIAotCi1jbGFzcyBidWlsZCAoQ29tbWFuZCk6CitjbGFzcyBidWlsZChDb21tYW5kKToKIAogICAgIGRlc2NyaXB0aW9uID0gImJ1aWxkIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGluc3RhbGwiCiAKQEAgLTU1LDcgKzUyLDcgQEAKICAgICAgICAgICJsaXN0IGF2YWlsYWJsZSBjb21waWxlcnMiLCBzaG93X2NvbXBpbGVycyksCiAgICAgICAgIF0KIAotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYnVpbGRfYmFzZSA9ICdidWlsZCcKICAgICAgICAgIyB0aGVzZSBhcmUgZGVjaWRlZCBvbmx5IGFmdGVyICdidWlsZF9iYXNlJyBoYXMgaXRzIGZpbmFsIHZhbHVlCiAgICAgICAgICMgKHVubGVzcyBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyIG9yIGNsaWVudCkKQEAgLTcwLDggKzY3LDcgQEAKICAgICAgICAgc2VsZi5mb3JjZSA9IDAKICAgICAgICAgc2VsZi5leGVjdXRhYmxlID0gTm9uZQogCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMgKHNlbGYpOgotCisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIGlmIHNlbGYucGxhdF9uYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLnBsYXRfbmFtZSA9IGdldF9wbGF0Zm9ybSgpCiAgICAgICAgIGVsc2U6CkBAIC0xMjAsMTEgKzExNiw4IEBACiAKICAgICAgICAgaWYgc2VsZi5leGVjdXRhYmxlIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLmV4ZWN1dGFibGUgPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjdXRhYmxlKQotICAgICMgZmluYWxpemVfb3B0aW9ucyAoKQogCi0KLSAgICBkZWYgcnVuIChzZWxmKToKLQorICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICMgUnVuIGFsbCByZWxldmFudCBzdWItY29tbWFuZHMuICBUaGlzIHdpbGwgYmUgc29tZSBzdWJzZXQgb2Y6CiAgICAgICAgICMgIC0gYnVpbGRfcHkgICAgICAtIHB1cmUgUHl0aG9uIG1vZHVsZXMKICAgICAgICAgIyAgLSBidWlsZF9jbGliICAgIC0gc3RhbmRhbG9uZSBDIGxpYnJhcmllcwpAQCAtMTMzLDcgKzEyNiw2IEBACiAgICAgICAgIGZvciBjbWRfbmFtZSBpbiBzZWxmLmdldF9zdWJfY29tbWFuZHMoKToKICAgICAgICAgICAgIHNlbGYucnVuX2NvbW1hbmQoY21kX25hbWUpCiAKLQogICAgICMgLS0gUHJlZGljYXRlcyBmb3IgdGhlIHN1Yi1jb21tYW5kIGxpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBkZWYgaGFzX3B1cmVfbW9kdWxlcyAoc2VsZik6CkBAIC0xNDgsMTEgKzE0MCw4IEBACiAgICAgZGVmIGhhc19zY3JpcHRzIChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19zY3JpcHRzKCkKIAotCiAgICAgc3ViX2NvbW1hbmRzID0gWygnYnVpbGRfcHknLCAgICAgIGhhc19wdXJlX21vZHVsZXMpLAogICAgICAgICAgICAgICAgICAgICAoJ2J1aWxkX2NsaWInLCAgICBoYXNfY19saWJyYXJpZXMpLAogICAgICAgICAgICAgICAgICAgICAoJ2J1aWxkX2V4dCcsICAgICBoYXNfZXh0X21vZHVsZXMpLAogICAgICAgICAgICAgICAgICAgICAoJ2J1aWxkX3NjcmlwdHMnLCBoYXNfc2NyaXB0cyksCiAgICAgICAgICAgICAgICAgICAgXQotCi0jIGNsYXNzIGJ1aWxkCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfY2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9jbGliLnB5CmluZGV4IDY5ZDhjNzUuLjk4YTE3MjYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9jbGliLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9jbGliLnB5CkBAIC00LDggKzQsNiBAQAogdGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgbW9kdWxlIGRpc3RyaWJ1dGlvbiBhbmQgbmVlZGVkIGJ5IGFuIGV4dGVuc2lvbgogbW9kdWxlLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAogCkBAIC0xOCwyNiArMTYsMjUgQEAKICMgdHdvIG1vZHVsZXMsIG1haW5seSBiZWNhdXNlIGEgbnVtYmVyIG9mIHN1YnRsZSBkZXRhaWxzIGNoYW5nZWQgaW4gdGhlCiAjIGN1dCAnbiBwYXN0ZS4gIFNpZ2guCiAKLWltcG9ydCBvcywgc3RyaW5nCi1mcm9tIHR5cGVzIGltcG9ydCAqCitpbXBvcnQgb3MKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgotZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCBjdXN0b21pemVfY29tcGlsZXIKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzU2V0dXBFcnJvcgorZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBjdXN0b21pemVfY29tcGlsZXIKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAotZGVmIHNob3dfY29tcGlsZXJzICgpOgorZGVmIHNob3dfY29tcGlsZXJzKCk6CiAgICAgZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBzaG93X2NvbXBpbGVycwogICAgIHNob3dfY29tcGlsZXJzKCkKIAogCi1jbGFzcyBidWlsZF9jbGliIChDb21tYW5kKToKK2NsYXNzIGJ1aWxkX2NsaWIoQ29tbWFuZCk6CiAKICAgICBkZXNjcmlwdGlvbiA9ICJidWlsZCBDL0MrKyBsaWJyYXJpZXMgdXNlZCBieSBQeXRob24gZXh0ZW5zaW9ucyIKIAogICAgIHVzZXJfb3B0aW9ucyA9IFsKLSAgICAgICAgKCdidWlsZC1jbGliJywgJ2InLAorICAgICAgICAoJ2J1aWxkLWNsaWI9JywgJ2InLAogICAgICAgICAgImRpcmVjdG9yeSB0byBidWlsZCBDL0MrKyBsaWJyYXJpZXMgdG8iKSwKLSAgICAgICAgKCdidWlsZC10ZW1wJywgJ3QnLAorICAgICAgICAoJ2J1aWxkLXRlbXA9JywgJ3QnLAogICAgICAgICAgImRpcmVjdG9yeSB0byBwdXQgdGVtcG9yYXJ5IGJ1aWxkIGJ5LXByb2R1Y3RzIiksCiAgICAgICAgICgnZGVidWcnLCAnZycsCiAgICAgICAgICAiY29tcGlsZSB3aXRoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiIpLApAQCAtNTQsNyArNTEsNyBAQAogICAgICAgICAgImxpc3QgYXZhaWxhYmxlIGNvbXBpbGVycyIsIHNob3dfY29tcGlsZXJzKSwKICAgICAgICAgXQogCi0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5idWlsZF9jbGliID0gTm9uZQogICAgICAgICBzZWxmLmJ1aWxkX3RlbXAgPSBOb25lCiAKQEAgLTY5LDExICs2Niw4IEBACiAgICAgICAgIHNlbGYuZm9yY2UgPSAwCiAgICAgICAgIHNlbGYuY29tcGlsZXIgPSBOb25lCiAKLSAgICAjIGluaXRpYWxpemVfb3B0aW9ucygpCiAKLQotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zIChzZWxmKToKLQorICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICAjIFRoaXMgbWlnaHQgYmUgY29uZnVzaW5nOiBib3RoIGJ1aWxkLWNsaWIgYW5kIGJ1aWxkLXRlbXAgZGVmYXVsdAogICAgICAgICAjIHRvIGJ1aWxkLXRlbXAgYXMgZGVmaW5lZCBieSB0aGUgImJ1aWxkIiBjb21tYW5kLiAgVGhpcyBpcyBiZWNhdXNlCiAgICAgICAgICMgSSB0aGluayB0aGF0IEMgbGlicmFyaWVzIGFyZSByZWFsbHkganVzdCB0ZW1wb3JhcnkgYnVpbGQKQEAgLTkyLDE4ICs4NiwxMyBAQAogCiAgICAgICAgIGlmIHNlbGYuaW5jbHVkZV9kaXJzIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfZGlycyA9IHNlbGYuZGlzdHJpYnV0aW9uLmluY2x1ZGVfZGlycyBvciBbXQotICAgICAgICBpZiB0eXBlKHNlbGYuaW5jbHVkZV9kaXJzKSBpcyBTdHJpbmdUeXBlOgotICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMgPSBzdHJpbmcuc3BsaXQoc2VsZi5pbmNsdWRlX2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoc2VwKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuaW5jbHVkZV9kaXJzLCBzdHIpOgorICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMgPSBzZWxmLmluY2x1ZGVfZGlycy5zcGxpdChvcy5wYXRoc2VwKQogCiAgICAgICAgICMgWFhYIHNhbWUgYXMgZm9yIGJ1aWxkX2V4dCAtLSB3aGF0IGFib3V0ICdzZWxmLmRlZmluZScgYW5kCiAgICAgICAgICMgJ3NlbGYudW5kZWYnID8KIAotICAgICMgZmluYWxpemVfb3B0aW9ucygpCi0KLQotICAgIGRlZiBydW4gKHNlbGYpOgotCisgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYubGlicmFyaWVzOgogICAgICAgICAgICAgcmV0dXJuCiAKQEAgLTEyNiw1MSArMTE1LDQ2IEBACiAKICAgICAgICAgc2VsZi5idWlsZF9saWJyYXJpZXMoc2VsZi5saWJyYXJpZXMpCiAKLSAgICAjIHJ1bigpCiAKKyAgICBkZWYgY2hlY2tfbGlicmFyeV9saXN0KHNlbGYsIGxpYnJhcmllcyk6CisgICAgICAgICIiIkVuc3VyZSB0aGF0IHRoZSBsaXN0IG9mIGxpYnJhcmllcyBpcyB2YWxpZC4KIAotICAgIGRlZiBjaGVja19saWJyYXJ5X2xpc3QgKHNlbGYsIGxpYnJhcmllcyk6Ci0gICAgICAgICIiIkVuc3VyZSB0aGF0IHRoZSBsaXN0IG9mIGxpYnJhcmllcyAocHJlc3VtYWJseSBwcm92aWRlZCBhcyBhCi0gICAgICAgICAgIGNvbW1hbmQgb3B0aW9uICdsaWJyYXJpZXMnKSBpcyB2YWxpZCwgaS5lLiBpdCBpcyBhIGxpc3Qgb2YKLSAgICAgICAgICAgMi10dXBsZXMsIHdoZXJlIHRoZSB0dXBsZXMgYXJlIChsaWJyYXJ5X25hbWUsIGJ1aWxkX2luZm9fZGljdCkuCi0gICAgICAgICAgIFJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IgaWYgdGhlIHN0cnVjdHVyZSBpcyBpbnZhbGlkIGFueXdoZXJlOwotICAgICAgICAgICBqdXN0IHJldHVybnMgb3RoZXJ3aXNlLiIiIgorICAgICAgICBgbGlicmFyeWAgaXMgcHJlc3VtYWJseSBwcm92aWRlZCBhcyBhIGNvbW1hbmQgb3B0aW9uICdsaWJyYXJpZXMnLgorICAgICAgICBUaGlzIG1ldGhvZCBjaGVja3MgdGhhdCBpdCBpcyBhIGxpc3Qgb2YgMi10dXBsZXMsIHdoZXJlIHRoZSB0dXBsZXMKKyAgICAgICAgYXJlIChsaWJyYXJ5X25hbWUsIGJ1aWxkX2luZm9fZGljdCkuCiAKLSAgICAgICAgIyBZZWNoaCwgYmxlY2NoLCBhY2trOiB0aGlzIGlzIHJpcHBlZCBzdHJhaWdodCBvdXQgb2YgYnVpbGRfZXh0LnB5LAotICAgICAgICAjIHdpdGggb25seSBuYW1lcyBjaGFuZ2VkIHRvIHByb3RlY3QgdGhlIGlubm9jZW50IQotCi0gICAgICAgIGlmIHR5cGUobGlicmFyaWVzKSBpcyBub3QgTGlzdFR5cGU6CisgICAgICAgIFJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IgaWYgdGhlIHN0cnVjdHVyZSBpcyBpbnZhbGlkIGFueXdoZXJlOworICAgICAgICBqdXN0IHJldHVybnMgb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobGlicmFyaWVzLCBsaXN0KToKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICInbGlicmFyaWVzJyBvcHRpb24gbXVzdCBiZSBhIGxpc3Qgb2YgdHVwbGVzIgogCiAgICAgICAgIGZvciBsaWIgaW4gbGlicmFyaWVzOgotICAgICAgICAgICAgaWYgdHlwZShsaWIpIGlzIG5vdCBUdXBsZVR5cGUgYW5kIGxlbihsaWIpICE9IDI6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShsaWIsIHR1cGxlKSBhbmQgbGVuKGxpYikgIT0gMjoKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNTZXR1cEVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgImVhY2ggZWxlbWVudCBvZiAnbGlicmFyaWVzJyBtdXN0IGEgMi10dXBsZSIKIAotICAgICAgICAgICAgaWYgdHlwZShsaWJbMF0pIGlzIG5vdCBTdHJpbmdUeXBlOgorICAgICAgICAgICAgbmFtZSwgYnVpbGRfaW5mbyA9IGxpYgorCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShuYW1lLCBzdHIpOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgZWxlbWVudCBvZiBlYWNoIHR1cGxlIGluICdsaWJyYXJpZXMnICIgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgYSBzdHJpbmcgKHRoZSBsaWJyYXJ5IG5hbWUpIgotICAgICAgICAgICAgaWYgJy8nIGluIGxpYlswXSBvciAob3Muc2VwICE9ICcvJyBhbmQgb3Muc2VwIGluIGxpYlswXSk6CisgICAgICAgICAgICBpZiAnLycgaW4gbmFtZSBvciAob3Muc2VwICE9ICcvJyBhbmQgb3Muc2VwIGluIG5hbWUpOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAoImJhZCBsaWJyYXJ5IG5hbWUgJyVzJzogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICJtYXkgbm90IGNvbnRhaW4gZGlyZWN0b3J5IHNlcGFyYXRvcnMiKSAlIFwKICAgICAgICAgICAgICAgICAgICAgICBsaWJbMF0KIAotICAgICAgICAgICAgaWYgdHlwZShsaWJbMV0pIGlzIG5vdCBEaWN0aW9uYXJ5VHlwZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGJ1aWxkX2luZm8sIGRpY3QpOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAic2Vjb25kIGVsZW1lbnQgb2YgZWFjaCB0dXBsZSBpbiAnbGlicmFyaWVzJyAiICsgXAogICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIGEgZGljdGlvbmFyeSAoYnVpbGQgaW5mbykiCi0gICAgICAgICMgZm9yIGxpYgogCi0gICAgIyBjaGVja19saWJyYXJ5X2xpc3QgKCkKLQotCi0gICAgZGVmIGdldF9saWJyYXJ5X25hbWVzIChzZWxmKToKKyAgICBkZWYgZ2V0X2xpYnJhcnlfbmFtZXMoc2VsZik6CiAgICAgICAgICMgQXNzdW1lIHRoZSBsaWJyYXJ5IGxpc3QgaXMgdmFsaWQgLS0gJ2NoZWNrX2xpYnJhcnlfbGlzdCgpJyBpcwogICAgICAgICAjIGNhbGxlZCBmcm9tICdmaW5hbGl6ZV9vcHRpb25zKCknLCBzbyBpdCBzaG91bGQgYmUhCi0KICAgICAgICAgaWYgbm90IHNlbGYubGlicmFyaWVzOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIApAQCAtMTc5LDMyICsxNjMsMjUgQEAKICAgICAgICAgICAgIGxpYl9uYW1lcy5hcHBlbmQobGliX25hbWUpCiAgICAgICAgIHJldHVybiBsaWJfbmFtZXMKIAotICAgICMgZ2V0X2xpYnJhcnlfbmFtZXMgKCkKIAotCi0gICAgZGVmIGdldF9zb3VyY2VfZmlsZXMgKHNlbGYpOgorICAgIGRlZiBnZXRfc291cmNlX2ZpbGVzKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2xpYnJhcnlfbGlzdChzZWxmLmxpYnJhcmllcykKICAgICAgICAgZmlsZW5hbWVzID0gW10KICAgICAgICAgZm9yIChsaWJfbmFtZSwgYnVpbGRfaW5mbykgaW4gc2VsZi5saWJyYXJpZXM6CiAgICAgICAgICAgICBzb3VyY2VzID0gYnVpbGRfaW5mby5nZXQoJ3NvdXJjZXMnKQotICAgICAgICAgICAgaWYgKHNvdXJjZXMgaXMgTm9uZSBvcgotICAgICAgICAgICAgICAgIHR5cGUoc291cmNlcykgbm90IGluIChMaXN0VHlwZSwgVHVwbGVUeXBlKSApOgorICAgICAgICAgICAgaWYgc291cmNlcyBpcyBOb25lIG9yIG5vdCBpc2luc3RhbmNlKHNvdXJjZXMsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAoImluICdsaWJyYXJpZXMnIG9wdGlvbiAobGlicmFyeSAnJXMnKSwgIgogICAgICAgICAgICAgICAgICAgICAgICAiJ3NvdXJjZXMnIG11c3QgYmUgcHJlc2VudCBhbmQgbXVzdCBiZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICJhIGxpc3Qgb2Ygc291cmNlIGZpbGVuYW1lcyIpICUgbGliX25hbWUKIAogICAgICAgICAgICAgZmlsZW5hbWVzLmV4dGVuZChzb3VyY2VzKQotCiAgICAgICAgIHJldHVybiBmaWxlbmFtZXMKLSAgICAjIGdldF9zb3VyY2VfZmlsZXMgKCkKIAotCi0gICAgZGVmIGJ1aWxkX2xpYnJhcmllcyAoc2VsZiwgbGlicmFyaWVzKToKLQorICAgIGRlZiBidWlsZF9saWJyYXJpZXMoc2VsZiwgbGlicmFyaWVzKToKICAgICAgICAgZm9yIChsaWJfbmFtZSwgYnVpbGRfaW5mbykgaW4gbGlicmFyaWVzOgogICAgICAgICAgICAgc291cmNlcyA9IGJ1aWxkX2luZm8uZ2V0KCdzb3VyY2VzJykKLSAgICAgICAgICAgIGlmIHNvdXJjZXMgaXMgTm9uZSBvciB0eXBlKHNvdXJjZXMpIG5vdCBpbiAoTGlzdFR5cGUsIFR1cGxlVHlwZSk6CisgICAgICAgICAgICBpZiBzb3VyY2VzIGlzIE5vbmUgb3Igbm90IGlzaW5zdGFuY2Uoc291cmNlcywgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzU2V0dXBFcnJvciwgXAogICAgICAgICAgICAgICAgICAgICAgICgiaW4gJ2xpYnJhcmllcycgb3B0aW9uIChsaWJyYXJ5ICclcycpLCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIidzb3VyY2VzJyBtdXN0IGJlIHByZXNlbnQgYW5kIG11c3QgYmUgIiArCkBAIC0yMzAsOSArMjA3LDMgQEAKICAgICAgICAgICAgIHNlbGYuY29tcGlsZXIuY3JlYXRlX3N0YXRpY19saWIob2JqZWN0cywgbGliX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXI9c2VsZi5idWlsZF9jbGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz1zZWxmLmRlYnVnKQotCi0gICAgICAgICMgZm9yIGxpYnJhcmllcwotCi0gICAgIyBidWlsZF9saWJyYXJpZXMgKCkKLQotIyBjbGFzcyBidWlsZF9saWIKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CmluZGV4IGFlYjZiNzQuLjU1YTQyODggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQpAQCAtMjA3LDcgKzIwNyw3IEBACiAKICAgICAgICAgICAgIGVsaWYgTVNWQ19WRVJTSU9OID09IDg6CiAgICAgICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQQycsICdWUzguMCcsICd3aW4zMnJlbGVhc2UnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BDJywgJ1ZTOC4wJykpCiAgICAgICAgICAgICBlbGlmIE1TVkNfVkVSU0lPTiA9PSA3OgogICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUEMnLCAnVlM3LjEnKSkKQEAgLTc1Myw3ICs3NTMsOSBAQAogICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgICMgRG9uJ3QgdXNlIHRoZSBkZWZhdWx0IGNvZGUgYmVsb3cKICAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzCi0KKyAgICAgICAgZWxpZiBzeXMucGxhdGZvcm1bOjNdID09ICdhaXgnOgorICAgICAgICAgICAgIyBEb24ndCB1c2UgdGhlIGRlZmF1bHQgY29kZSBiZWxvdworICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKICAgICAgICAgICAgIGlmIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUHlfRU5BQkxFX1NIQVJFRCcpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CmluZGV4IDlmOGE3NTkuLjA0YzQ1NWYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKQEAgLTIsMjEgKzIsMTggQEAKIAogSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdidWlsZF9weScgY29tbWFuZC4iIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBzdHJpbmcsIG9zCi1mcm9tIHR5cGVzIGltcG9ydCAqCitpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgogCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzT3B0aW9uRXJyb3IsIERpc3R1dGlsc0ZpbGVFcnJvcgogZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY29udmVydF9wYXRoCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLWNsYXNzIGJ1aWxkX3B5IChDb21tYW5kKToKK2NsYXNzIGJ1aWxkX3B5KENvbW1hbmQpOgogCiAgICAgZGVzY3JpcHRpb24gPSAiXCJidWlsZFwiIHB1cmUgUHl0aG9uIG1vZHVsZXMgKGNvcHkgdG8gYnVpbGQgZGlyZWN0b3J5KSIKIApAQCAtMzMsOCArMzAsNyBAQAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsnY29tcGlsZScsICdmb3JjZSddCiAgICAgbmVnYXRpdmVfb3B0ID0geyduby1jb21waWxlJyA6ICdjb21waWxlJ30KIAotCi0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5idWlsZF9saWIgPSBOb25lCiAgICAgICAgIHNlbGYucHlfbW9kdWxlcyA9IE5vbmUKICAgICAgICAgc2VsZi5wYWNrYWdlID0gTm9uZQpAQCAtNDQsNyArNDAsNyBAQAogICAgICAgICBzZWxmLm9wdGltaXplID0gMAogICAgICAgICBzZWxmLmZvcmNlID0gTm9uZQogCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBzZWxmLnNldF91bmRlZmluZWRfb3B0aW9ucygnYnVpbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2J1aWxkX2xpYicsICdidWlsZF9saWInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdmb3JjZScsICdmb3JjZScpKQpAQCAtNjIsMTUgKzU4LDE0IEBACiAKICAgICAgICAgIyBJY2ssIGNvcGllZCBzdHJhaWdodCBmcm9tIGluc3RhbGxfbGliLnB5IChmYW5jeV9nZXRvcHQgbmVlZHMgYQogICAgICAgICAjIHR5cGUgc3lzdGVtISAgSGVsbCwgKmV2ZXJ5dGhpbmcqIG5lZWRzIGEgdHlwZSBzeXN0ZW0hISEpCi0gICAgICAgIGlmIHR5cGUoc2VsZi5vcHRpbWl6ZSkgaXMgbm90IEludFR5cGU6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYub3B0aW1pemUsIGludCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5vcHRpbWl6ZSA9IGludChzZWxmLm9wdGltaXplKQogICAgICAgICAgICAgICAgIGFzc2VydCAwIDw9IHNlbGYub3B0aW1pemUgPD0gMgogICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBBc3NlcnRpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzT3B0aW9uRXJyb3IsICJvcHRpbWl6ZSBtdXN0IGJlIDAsIDEsIG9yIDIiCisgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzT3B0aW9uRXJyb3IoIm9wdGltaXplIG11c3QgYmUgMCwgMSwgb3IgMiIpCiAKLSAgICBkZWYgcnVuIChzZWxmKToKLQorICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICMgWFhYIGNvcHlfZmlsZSBieSBkZWZhdWx0IHByZXNlcnZlcyBhdGltZSBhbmQgbXRpbWUuICBJTUhPIHRoaXMgaXMKICAgICAgICAgIyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBwZXJoYXBzIGl0IHNob3VsZCBiZSBhbiBvcHRpb24gLS0gaW4KICAgICAgICAgIyBwYXJ0aWN1bGFyLCBhIHNpdGUgYWRtaW5pc3RyYXRvciBtaWdodCB3YW50IGluc3RhbGxlZCBmaWxlcyB0bwpAQCAtMTAwLDkgKzk1LDcgQEAKIAogICAgICAgICBzZWxmLmJ5dGVfY29tcGlsZShzZWxmLmdldF9vdXRwdXRzKGluY2x1ZGVfYnl0ZWNvZGU9MCkpCiAKLSAgICAjIHJ1biAoKQotCi0gICAgZGVmIGdldF9kYXRhX2ZpbGVzIChzZWxmKToKKyAgICBkZWYgZ2V0X2RhdGFfZmlsZXMoc2VsZik6CiAgICAgICAgICIiIkdlbmVyYXRlIGxpc3Qgb2YgJyhwYWNrYWdlLHNyY19kaXIsYnVpbGRfZGlyLGZpbGVuYW1lcyknIHR1cGxlcyIiIgogICAgICAgICBkYXRhID0gW10KICAgICAgICAgaWYgbm90IHNlbGYucGFja2FnZXM6CkBAIC0xMjYsNyArMTE5LDcgQEAKICAgICAgICAgICAgIGRhdGEuYXBwZW5kKChwYWNrYWdlLCBzcmNfZGlyLCBidWlsZF9kaXIsIGZpbGVuYW1lcykpCiAgICAgICAgIHJldHVybiBkYXRhCiAKLSAgICBkZWYgZmluZF9kYXRhX2ZpbGVzIChzZWxmLCBwYWNrYWdlLCBzcmNfZGlyKToKKyAgICBkZWYgZmluZF9kYXRhX2ZpbGVzKHNlbGYsIHBhY2thZ2UsIHNyY19kaXIpOgogICAgICAgICAiIiJSZXR1cm4gZmlsZW5hbWVzIGZvciBwYWNrYWdlJ3MgZGF0YSBmaWxlcyBpbiAnc3JjX2RpciciIiIKICAgICAgICAgZ2xvYnMgPSAoc2VsZi5wYWNrYWdlX2RhdGEuZ2V0KCcnLCBbXSkKICAgICAgICAgICAgICAgICAgKyBzZWxmLnBhY2thZ2VfZGF0YS5nZXQocGFja2FnZSwgW10pKQpAQCAtMTM4LDkgKzEzMSw4IEBACiAgICAgICAgICAgICBmaWxlcy5leHRlbmQoW2ZuIGZvciBmbiBpbiBmaWxlbGlzdCBpZiBmbiBub3QgaW4gZmlsZXNdKQogICAgICAgICByZXR1cm4gZmlsZXMKIAotICAgIGRlZiBidWlsZF9wYWNrYWdlX2RhdGEgKHNlbGYpOgorICAgIGRlZiBidWlsZF9wYWNrYWdlX2RhdGEoc2VsZik6CiAgICAgICAgICIiIkNvcHkgZGF0YSBmaWxlcyBpbnRvIGJ1aWxkIGRpcmVjdG9yeSIiIgotICAgICAgICBsYXN0ZGlyID0gTm9uZQogICAgICAgICBmb3IgcGFja2FnZSwgc3JjX2RpciwgYnVpbGRfZGlyLCBmaWxlbmFtZXMgaW4gc2VsZi5kYXRhX2ZpbGVzOgogICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKICAgICAgICAgICAgICAgICB0YXJnZXQgPSBvcy5wYXRoLmpvaW4oYnVpbGRfZGlyLCBmaWxlbmFtZSkKQEAgLTE0OCwxMiArMTQwLDEyIEBACiAgICAgICAgICAgICAgICAgc2VsZi5jb3B5X2ZpbGUob3MucGF0aC5qb2luKHNyY19kaXIsIGZpbGVuYW1lKSwgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX21vZGU9RmFsc2UpCiAKLSAgICBkZWYgZ2V0X3BhY2thZ2VfZGlyIChzZWxmLCBwYWNrYWdlKToKKyAgICBkZWYgZ2V0X3BhY2thZ2VfZGlyKHNlbGYsIHBhY2thZ2UpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlCiAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgd2hlcmUgcGFja2FnZSAncGFja2FnZScgc2hvdWxkIGJlIGZvdW5kCiAgICAgICAgICAgIChhdCBsZWFzdCBhY2NvcmRpbmcgdG8gdGhlICdwYWNrYWdlX2Rpcicgb3B0aW9uLCBpZiBhbnkpLiIiIgogCi0gICAgICAgIHBhdGggPSBzdHJpbmcuc3BsaXQocGFja2FnZSwgJy4nKQorICAgICAgICBwYXRoID0gcGFja2FnZS5zcGxpdCgnLicpCiAKICAgICAgICAgaWYgbm90IHNlbGYucGFja2FnZV9kaXI6CiAgICAgICAgICAgICBpZiBwYXRoOgpAQCAtMTY0LDcgKzE1Niw3IEBACiAgICAgICAgICAgICB0YWlsID0gW10KICAgICAgICAgICAgIHdoaWxlIHBhdGg6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwZGlyID0gc2VsZi5wYWNrYWdlX2RpcltzdHJpbmcuam9pbihwYXRoLCAnLicpXQorICAgICAgICAgICAgICAgICAgICBwZGlyID0gc2VsZi5wYWNrYWdlX2RpclsnLicuam9pbihwYXRoKV0KICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHRhaWwuaW5zZXJ0KDAsIHBhdGhbLTFdKQogICAgICAgICAgICAgICAgICAgICBkZWwgcGF0aFstMV0KQEAgLTE4OCwyMyArMTgwLDE5IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnCiAKLSAgICAjIGdldF9wYWNrYWdlX2RpciAoKQotCi0KLSAgICBkZWYgY2hlY2tfcGFja2FnZSAoc2VsZiwgcGFja2FnZSwgcGFja2FnZV9kaXIpOgotCisgICAgZGVmIGNoZWNrX3BhY2thZ2Uoc2VsZiwgcGFja2FnZSwgcGFja2FnZV9kaXIpOgogICAgICAgICAjIEVtcHR5IGRpciBuYW1lIG1lYW5zIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGljaCB3ZSBjYW4gcHJvYmFibHkKICAgICAgICAgIyBhc3N1bWUgZXhpc3RzLiAgQWxzbywgb3MucGF0aC5leGlzdHMgYW5kIGlzZGlyIGRvbid0IGtub3cgYWJvdXQKICAgICAgICAgIyBteSAiZW1wdHkgc3RyaW5nIG1lYW5zIGN1cnJlbnQgZGlyIiBjb252ZW50aW9uLCBzbyB3ZSBoYXZlIHRvCiAgICAgICAgICMgY2lyY3VtdmVudCB0aGVtLgogICAgICAgICBpZiBwYWNrYWdlX2RpciAhPSAiIjoKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYWNrYWdlX2Rpcik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgZGlyZWN0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiICUgcGFja2FnZV9kaXIKKyAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgZGlyZWN0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiICUgcGFja2FnZV9kaXIpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihwYWNrYWdlX2Rpcik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAgICAgKCJzdXBwb3NlZCBwYWNrYWdlIGRpcmVjdG9yeSAnJXMnIGV4aXN0cywgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICJidXQgaXMgbm90IGEgZGlyZWN0b3J5IikgJSBwYWNrYWdlX2RpcgorICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvc2VkIHBhY2thZ2UgZGlyZWN0b3J5ICclcycgZXhpc3RzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICJidXQgaXMgbm90IGEgZGlyZWN0b3J5IiAlIHBhY2thZ2VfZGlyKQogCiAgICAgICAgICMgUmVxdWlyZSBfX2luaXRfXy5weSBmb3IgYWxsIGJ1dCB0aGUgInJvb3QgcGFja2FnZSIKICAgICAgICAgaWYgcGFja2FnZToKQEAgLTIxOSwyMCArMjA3LDE0IEBACiAgICAgICAgICMgX19pbml0X18ucHkgZG9lc24ndCBleGlzdCAtLSBzbyBkb24ndCByZXR1cm4gdGhlIGZpbGVuYW1lLgogICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgIyBjaGVja19wYWNrYWdlICgpCi0KLQotICAgIGRlZiBjaGVja19tb2R1bGUgKHNlbGYsIG1vZHVsZSwgbW9kdWxlX2ZpbGUpOgorICAgIGRlZiBjaGVja19tb2R1bGUoc2VsZiwgbW9kdWxlLCBtb2R1bGVfZmlsZSk6CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtb2R1bGVfZmlsZSk6CiAgICAgICAgICAgICBsb2cud2FybigiZmlsZSAlcyAoZm9yIG1vZHVsZSAlcykgbm90IGZvdW5kIiwgbW9kdWxlX2ZpbGUsIG1vZHVsZSkKLSAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgIyBjaGVja19tb2R1bGUgKCkKLQotCi0gICAgZGVmIGZpbmRfcGFja2FnZV9tb2R1bGVzIChzZWxmLCBwYWNrYWdlLCBwYWNrYWdlX2Rpcik6CisgICAgZGVmIGZpbmRfcGFja2FnZV9tb2R1bGVzKHNlbGYsIHBhY2thZ2UsIHBhY2thZ2VfZGlyKToKICAgICAgICAgc2VsZi5jaGVja19wYWNrYWdlKHBhY2thZ2UsIHBhY2thZ2VfZGlyKQogICAgICAgICBtb2R1bGVfZmlsZXMgPSBnbG9iKG9zLnBhdGguam9pbihwYWNrYWdlX2RpciwgIioucHkiKSkKICAgICAgICAgbW9kdWxlcyA9IFtdCkBAIC0yNDcsOCArMjI5LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJleGNsdWRpbmcgJXMiICUgc2V0dXBfc2NyaXB0KQogICAgICAgICByZXR1cm4gbW9kdWxlcwogCi0KLSAgICBkZWYgZmluZF9tb2R1bGVzIChzZWxmKToKKyAgICBkZWYgZmluZF9tb2R1bGVzKHNlbGYpOgogICAgICAgICAiIiJGaW5kcyBpbmRpdmlkdWFsbHktc3BlY2lmaWVkIFB5dGhvbiBtb2R1bGVzLCBpZS4gdGhvc2UgbGlzdGVkIGJ5CiAgICAgICAgIG1vZHVsZSBuYW1lIGluICdzZWxmLnB5X21vZHVsZXMnLiAgUmV0dXJucyBhIGxpc3Qgb2YgdHVwbGVzIChwYWNrYWdlLAogICAgICAgICBtb2R1bGVfYmFzZSwgZmlsZW5hbWUpOiAncGFja2FnZScgaXMgYSB0dXBsZSBvZiB0aGUgcGF0aCB0aHJvdWdoCkBAIC0yNTcsNyArMjM4LDYgQEAKICAgICAgICAgIi5weSIgZmlsZSAocmVsYXRpdmUgdG8gdGhlIGRpc3RyaWJ1dGlvbiByb290KSB0aGF0IGltcGxlbWVudHMgdGhlCiAgICAgICAgIG1vZHVsZS4KICAgICAgICAgIiIiCi0KICAgICAgICAgIyBNYXAgcGFja2FnZSBuYW1lcyB0byB0dXBsZXMgb2YgdXNlZnVsIGluZm8gYWJvdXQgdGhlIHBhY2thZ2U6CiAgICAgICAgICMgICAgKHBhY2thZ2VfZGlyLCBjaGVja2VkKQogICAgICAgICAjIHBhY2thZ2VfZGlyIC0gdGhlIGRpcmVjdG9yeSB3aGVyZSB3ZSdsbCBmaW5kIHNvdXJjZSBmaWxlcyBmb3IKQEAgLTI3MywxMCArMjUzLDkgQEAKICAgICAgICAgIyBqdXN0IHRoZSAicGFja2FnZSIgZm9yIGEgdG9wbGV2ZWwgaXMgZW1wdHkgKGVpdGhlciBhbiBlbXB0eQogICAgICAgICAjIHN0cmluZyBvciBlbXB0eSBsaXN0LCBkZXBlbmRpbmcgb24gY29udGV4dCkuICBEaWZmZXJlbmNlczoKICAgICAgICAgIyAgIC0gZG9uJ3QgY2hlY2sgZm9yIF9faW5pdF9fLnB5IGluIGRpcmVjdG9yeSBmb3IgZW1wdHkgcGFja2FnZQotCiAgICAgICAgIGZvciBtb2R1bGUgaW4gc2VsZi5weV9tb2R1bGVzOgotICAgICAgICAgICAgcGF0aCA9IHN0cmluZy5zcGxpdChtb2R1bGUsICcuJykKLSAgICAgICAgICAgIHBhY2thZ2UgPSBzdHJpbmcuam9pbihwYXRoWzA6LTFdLCAnLicpCisgICAgICAgICAgICBwYXRoID0gbW9kdWxlLnNwbGl0KCcuJykKKyAgICAgICAgICAgIHBhY2thZ2UgPSAnLicuam9pbihwYXRoWzA6LTFdKQogICAgICAgICAgICAgbW9kdWxlX2Jhc2UgPSBwYXRoWy0xXQogCiAgICAgICAgICAgICB0cnk6CkBAIC0zMDIsMTYgKzI4MSwxMiBAQAogCiAgICAgICAgIHJldHVybiBtb2R1bGVzCiAKLSAgICAjIGZpbmRfbW9kdWxlcyAoKQotCi0KLSAgICBkZWYgZmluZF9hbGxfbW9kdWxlcyAoc2VsZik6CisgICAgZGVmIGZpbmRfYWxsX21vZHVsZXMoc2VsZik6CiAgICAgICAgICIiIkNvbXB1dGUgdGhlIGxpc3Qgb2YgYWxsIG1vZHVsZXMgdGhhdCB3aWxsIGJlIGJ1aWx0LCB3aGV0aGVyCiAgICAgICAgIHRoZXkgYXJlIHNwZWNpZmllZCBvbmUtbW9kdWxlLWF0LWEtdGltZSAoJ3NlbGYucHlfbW9kdWxlcycpIG9yCiAgICAgICAgIGJ5IHdob2xlIHBhY2thZ2VzICgnc2VsZi5wYWNrYWdlcycpLiAgUmV0dXJuIGEgbGlzdCBvZiB0dXBsZXMKICAgICAgICAgKHBhY2thZ2UsIG1vZHVsZSwgbW9kdWxlX2ZpbGUpLCBqdXN0IGxpa2UgJ2ZpbmRfbW9kdWxlcygpJyBhbmQKICAgICAgICAgJ2ZpbmRfcGFja2FnZV9tb2R1bGVzKCknIGRvLiIiIgotCiAgICAgICAgIG1vZHVsZXMgPSBbXQogICAgICAgICBpZiBzZWxmLnB5X21vZHVsZXM6CiAgICAgICAgICAgICBtb2R1bGVzLmV4dGVuZChzZWxmLmZpbmRfbW9kdWxlcygpKQpAQCAtMzIwLDMyICsyOTUsMjAgQEAKICAgICAgICAgICAgICAgICBwYWNrYWdlX2RpciA9IHNlbGYuZ2V0X3BhY2thZ2VfZGlyKHBhY2thZ2UpCiAgICAgICAgICAgICAgICAgbSA9IHNlbGYuZmluZF9wYWNrYWdlX21vZHVsZXMocGFja2FnZSwgcGFja2FnZV9kaXIpCiAgICAgICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQobSkKLQogICAgICAgICByZXR1cm4gbW9kdWxlcwogCi0gICAgIyBmaW5kX2FsbF9tb2R1bGVzICgpCisgICAgZGVmIGdldF9zb3VyY2VfZmlsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBbbW9kdWxlWy0xXSBmb3IgbW9kdWxlIGluIHNlbGYuZmluZF9hbGxfbW9kdWxlcygpXQogCi0KLSAgICBkZWYgZ2V0X3NvdXJjZV9maWxlcyAoc2VsZik6Ci0KLSAgICAgICAgbW9kdWxlcyA9IHNlbGYuZmluZF9hbGxfbW9kdWxlcygpCi0gICAgICAgIGZpbGVuYW1lcyA9IFtdCi0gICAgICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKLSAgICAgICAgICAgIGZpbGVuYW1lcy5hcHBlbmQobW9kdWxlWy0xXSkKLQotICAgICAgICByZXR1cm4gZmlsZW5hbWVzCi0KLQotICAgIGRlZiBnZXRfbW9kdWxlX291dGZpbGUgKHNlbGYsIGJ1aWxkX2RpciwgcGFja2FnZSwgbW9kdWxlKToKKyAgICBkZWYgZ2V0X21vZHVsZV9vdXRmaWxlKHNlbGYsIGJ1aWxkX2RpciwgcGFja2FnZSwgbW9kdWxlKToKICAgICAgICAgb3V0ZmlsZV9wYXRoID0gW2J1aWxkX2Rpcl0gKyBsaXN0KHBhY2thZ2UpICsgW21vZHVsZSArICIucHkiXQogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKCpvdXRmaWxlX3BhdGgpCiAKLQotICAgIGRlZiBnZXRfb3V0cHV0cyAoc2VsZiwgaW5jbHVkZV9ieXRlY29kZT0xKToKKyAgICBkZWYgZ2V0X291dHB1dHMoc2VsZiwgaW5jbHVkZV9ieXRlY29kZT0xKToKICAgICAgICAgbW9kdWxlcyA9IHNlbGYuZmluZF9hbGxfbW9kdWxlcygpCiAgICAgICAgIG91dHB1dHMgPSBbXQogICAgICAgICBmb3IgKHBhY2thZ2UsIG1vZHVsZSwgbW9kdWxlX2ZpbGUpIGluIG1vZHVsZXM6Ci0gICAgICAgICAgICBwYWNrYWdlID0gc3RyaW5nLnNwbGl0KHBhY2thZ2UsICcuJykKKyAgICAgICAgICAgIHBhY2thZ2UgPSBwYWNrYWdlLnNwbGl0KCcuJykKICAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5nZXRfbW9kdWxlX291dGZpbGUoc2VsZi5idWlsZF9saWIsIHBhY2thZ2UsIG1vZHVsZSkKICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGZpbGVuYW1lKQogICAgICAgICAgICAgaWYgaW5jbHVkZV9ieXRlY29kZToKQEAgLTM2MiwxMyArMzI1LDEyIEBACiAKICAgICAgICAgcmV0dXJuIG91dHB1dHMKIAotCi0gICAgZGVmIGJ1aWxkX21vZHVsZSAoc2VsZiwgbW9kdWxlLCBtb2R1bGVfZmlsZSwgcGFja2FnZSk6Ci0gICAgICAgIGlmIHR5cGUocGFja2FnZSkgaXMgU3RyaW5nVHlwZToKLSAgICAgICAgICAgIHBhY2thZ2UgPSBzdHJpbmcuc3BsaXQocGFja2FnZSwgJy4nKQotICAgICAgICBlbGlmIHR5cGUocGFja2FnZSkgbm90IGluIChMaXN0VHlwZSwgVHVwbGVUeXBlKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgIidwYWNrYWdlJyBtdXN0IGJlIGEgc3RyaW5nIChkb3Qtc2VwYXJhdGVkKSwgbGlzdCwgb3IgdHVwbGUiCisgICAgZGVmIGJ1aWxkX21vZHVsZShzZWxmLCBtb2R1bGUsIG1vZHVsZV9maWxlLCBwYWNrYWdlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYWNrYWdlLCBzdHIpOgorICAgICAgICAgICAgcGFja2FnZSA9IHBhY2thZ2Uuc3BsaXQoJy4nKQorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHBhY2thZ2UsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgICAgICAgIidwYWNrYWdlJyBtdXN0IGJlIGEgc3RyaW5nIChkb3Qtc2VwYXJhdGVkKSwgbGlzdCwgb3IgdHVwbGUiKQogCiAgICAgICAgICMgTm93IHB1dCB0aGUgbW9kdWxlIHNvdXJjZSBmaWxlIGludG8gdGhlICJidWlsZCIgYXJlYSAtLSB0aGlzIGlzCiAgICAgICAgICMgZWFzeSwgd2UganVzdCBjb3B5IGl0IHNvbWV3aGVyZSB1bmRlciBzZWxmLmJ1aWxkX2xpYiAodGhlIGJ1aWxkCkBAIC0zNzgsOSArMzQwLDcgQEAKICAgICAgICAgc2VsZi5ta3BhdGgoZGlyKQogICAgICAgICByZXR1cm4gc2VsZi5jb3B5X2ZpbGUobW9kdWxlX2ZpbGUsIG91dGZpbGUsIHByZXNlcnZlX21vZGU9MCkKIAotCi0gICAgZGVmIGJ1aWxkX21vZHVsZXMgKHNlbGYpOgotCisgICAgZGVmIGJ1aWxkX21vZHVsZXMoc2VsZik6CiAgICAgICAgIG1vZHVsZXMgPSBzZWxmLmZpbmRfbW9kdWxlcygpCiAgICAgICAgIGZvciAocGFja2FnZSwgbW9kdWxlLCBtb2R1bGVfZmlsZSkgaW4gbW9kdWxlczoKIApAQCAtMzkwLDExICszNTAsNyBAQAogICAgICAgICAgICAgIyB1bmRlciBzZWxmLmJ1aWxkX2xpYi4pCiAgICAgICAgICAgICBzZWxmLmJ1aWxkX21vZHVsZShtb2R1bGUsIG1vZHVsZV9maWxlLCBwYWNrYWdlKQogCi0gICAgIyBidWlsZF9tb2R1bGVzICgpCi0KLQotICAgIGRlZiBidWlsZF9wYWNrYWdlcyAoc2VsZik6Ci0KKyAgICBkZWYgYnVpbGRfcGFja2FnZXMoc2VsZik6CiAgICAgICAgIGZvciBwYWNrYWdlIGluIHNlbGYucGFja2FnZXM6CiAKICAgICAgICAgICAgICMgR2V0IGxpc3Qgb2YgKHBhY2thZ2UsIG1vZHVsZSwgbW9kdWxlX2ZpbGUpIHR1cGxlcyBiYXNlZCBvbgpAQCAtNDE1LDEwICszNzEsNyBAQAogICAgICAgICAgICAgICAgIGFzc2VydCBwYWNrYWdlID09IHBhY2thZ2VfCiAgICAgICAgICAgICAgICAgc2VsZi5idWlsZF9tb2R1bGUobW9kdWxlLCBtb2R1bGVfZmlsZSwgcGFja2FnZSkKIAotICAgICMgYnVpbGRfcGFja2FnZXMgKCkKLQotCi0gICAgZGVmIGJ5dGVfY29tcGlsZSAoc2VsZiwgZmlsZXMpOgorICAgIGRlZiBieXRlX2NvbXBpbGUoc2VsZiwgZmlsZXMpOgogICAgICAgICBpZiBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKICAgICAgICAgICAgIHNlbGYud2FybignYnl0ZS1jb21waWxpbmcgaXMgZGlzYWJsZWQsIHNraXBwaW5nLicpCiAgICAgICAgICAgICByZXR1cm4KQEAgLTQzOCw1ICszOTEsMyBAQAogICAgICAgICBpZiBzZWxmLm9wdGltaXplID4gMDoKICAgICAgICAgICAgIGJ5dGVfY29tcGlsZShmaWxlcywgb3B0aW1pemU9c2VsZi5vcHRpbWl6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZT1zZWxmLmZvcmNlLCBwcmVmaXg9cHJlZml4LCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKLQotIyBjbGFzcyBidWlsZF9weQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQppbmRleCA0NTMzMzBmLi41NjdkZjY1IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQpAQCAtMiwxMyArMiwxMCBAQAogCiBJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ2J1aWxkX3NjcmlwdHMnIGNvbW1hbmQuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBpbXBvcnQgb3MsIHJlCiBmcm9tIHN0YXQgaW1wb3J0IFNUX01PREUKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKIGZyb20gZGlzdHV0aWxzLmRlcF91dGlsIGltcG9ydCBuZXdlcgogZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY29udmVydF9wYXRoCkBAIC01OSw2ICs1Niw3IEBACiAgICAgICAgIGllLiBzdGFydHMgd2l0aCAiXCMhIiBhbmQgY29udGFpbnMgInB5dGhvbiIpLCB0aGVuIGFkanVzdCB0aGUgZmlyc3QKICAgICAgICAgbGluZSB0byByZWZlciB0byB0aGUgY3VycmVudCBQeXRob24gaW50ZXJwcmV0ZXIgYXMgd2UgY29weS4KICAgICAgICAgIiIiCisgICAgICAgIF9zeXNjb25maWcgPSBfX2ltcG9ydF9fKCdzeXNjb25maWcnKQogICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2RpcikKICAgICAgICAgb3V0ZmlsZXMgPSBbXQogICAgICAgICBmb3Igc2NyaXB0IGluIHNlbGYuc2NyaXB0czoKQEAgLTk2LDE2ICs5NCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRfZGlyKQogICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRyeV9ydW46CiAgICAgICAgICAgICAgICAgICAgIG91dGYgPSBvcGVuKG91dGZpbGUsICJ3IikKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN5c2NvbmZpZy5weXRob25fYnVpbGQ6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBfc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgb3V0Zi53cml0ZSgiIyElcyVzXG4iICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZXhlY3V0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RfaW50ZXJwKSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGYud3JpdGUoIiMhJXMlc1xuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJCSU5ESVIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24lcyVzIiAlIChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlZFUlNJT04iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkVYRSIpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQklORElSIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uJXMlcyIgJSAoX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiVkVSU0lPTiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkVYRSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0X2ludGVycCkpCiAgICAgICAgICAgICAgICAgICAgIG91dGYud3JpdGVsaW5lcyhmLnJlYWRsaW5lcygpKQogICAgICAgICAgICAgICAgICAgICBvdXRmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jaGVjay5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jaGVjay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzI5YmFhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2NoZWNrLnB5CkBAIC0wLDAgKzEsMTQzIEBACisiIiJkaXN0dXRpbHMuY29tbWFuZC5jaGVjaworCitJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ2NoZWNrJyBjb21tYW5kLgorIiIiCitfX3JldmlzaW9uX18gPSAiJElkJCIKKworZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZAorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNTZXR1cEVycm9yCisKK3RyeToKKyAgICAjIGRvY3V0aWxzIGlzIGluc3RhbGxlZAorICAgIGZyb20gZG9jdXRpbHMudXRpbHMgaW1wb3J0IFJlcG9ydGVyCisgICAgZnJvbSBkb2N1dGlscy5wYXJzZXJzLnJzdCBpbXBvcnQgUGFyc2VyCisgICAgZnJvbSBkb2N1dGlscyBpbXBvcnQgZnJvbnRlbmQKKyAgICBmcm9tIGRvY3V0aWxzIGltcG9ydCBub2RlcworICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKKyAgICBjbGFzcyBTaWxlbnRSZXBvcnRlcihSZXBvcnRlcik6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgcmVwb3J0X2xldmVsLCBoYWx0X2xldmVsLCBzdHJlYW09Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGRlYnVnPTAsIGVuY29kaW5nPSdhc2NpaScsIGVycm9yX2hhbmRsZXI9J3JlcGxhY2UnKToKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZXMgPSBbXQorICAgICAgICAgICAgUmVwb3J0ZXIuX19pbml0X18oc2VsZiwgc291cmNlLCByZXBvcnRfbGV2ZWwsIGhhbHRfbGV2ZWwsIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnLCBlbmNvZGluZywgZXJyb3JfaGFuZGxlcikKKworICAgICAgICBkZWYgc3lzdGVtX21lc3NhZ2Uoc2VsZiwgbGV2ZWwsIG1lc3NhZ2UsICpjaGlsZHJlbiwgKiprd2FyZ3MpOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlcy5hcHBlbmQoKGxldmVsLCBtZXNzYWdlLCBjaGlsZHJlbiwga3dhcmdzKSkKKworICAgIEhBU19ET0NVVElMUyA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIGRvY3V0aWxzIGlzIG5vdCBpbnN0YWxsZWQKKyAgICBIQVNfRE9DVVRJTFMgPSBGYWxzZQorCitjbGFzcyBjaGVjayhDb21tYW5kKToKKyAgICAiIiJUaGlzIGNvbW1hbmQgY2hlY2tzIHRoZSBtZXRhLWRhdGEgb2YgdGhlIHBhY2thZ2UuCisgICAgIiIiCisgICAgZGVzY3JpcHRpb24gPSAoInBlcmZvcm0gc29tZSBjaGVja3Mgb24gdGhlIHBhY2thZ2UiKQorICAgIHVzZXJfb3B0aW9ucyA9IFsoJ21ldGFkYXRhJywgJ20nLCAnVmVyaWZ5IG1ldGEtZGF0YScpLAorICAgICAgICAgICAgICAgICAgICAoJ3Jlc3RydWN0dXJlZHRleHQnLCAncicsCisgICAgICAgICAgICAgICAgICAgICAoJ0NoZWNrcyBpZiBsb25nIHN0cmluZyBtZXRhLWRhdGEgc3ludGF4ICcKKyAgICAgICAgICAgICAgICAgICAgICAnYXJlIHJlU3RydWN0dXJlZFRleHQtY29tcGxpYW50JykpLAorICAgICAgICAgICAgICAgICAgICAoJ3N0cmljdCcsICdzJywKKyAgICAgICAgICAgICAgICAgICAgICdXaWxsIGV4aXQgd2l0aCBhbiBlcnJvciBpZiBhIGNoZWNrIGZhaWxzJyldCisKKyAgICBib29sZWFuX29wdGlvbnMgPSBbJ21ldGFkYXRhJywgJ3Jlc3RydWN0dXJlZHRleHQnLCAnc3RyaWN0J10KKworICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CisgICAgICAgICIiIlNldHMgZGVmYXVsdCB2YWx1ZXMgZm9yIG9wdGlvbnMuIiIiCisgICAgICAgIHNlbGYucmVzdHJ1Y3R1cmVkdGV4dCA9IDAKKyAgICAgICAgc2VsZi5tZXRhZGF0YSA9IDEKKyAgICAgICAgc2VsZi5zdHJpY3QgPSAwCisgICAgICAgIHNlbGYuX3dhcm5pbmdzID0gMAorCisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB3YXJuKHNlbGYsIG1zZyk6CisgICAgICAgICIiIkNvdW50cyB0aGUgbnVtYmVyIG9mIHdhcm5pbmdzIHRoYXQgb2NjdXJzLiIiIgorICAgICAgICBzZWxmLl93YXJuaW5ncyArPSAxCisgICAgICAgIHJldHVybiBDb21tYW5kLndhcm4oc2VsZiwgbXNnKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiUnVucyB0aGUgY29tbWFuZC4iIiIKKyAgICAgICAgIyBwZXJmb3JtIHRoZSB2YXJpb3VzIHRlc3RzCisgICAgICAgIGlmIHNlbGYubWV0YWRhdGE6CisgICAgICAgICAgICBzZWxmLmNoZWNrX21ldGFkYXRhKCkKKyAgICAgICAgaWYgc2VsZi5yZXN0cnVjdHVyZWR0ZXh0OgorICAgICAgICAgICAgaWYgSEFTX0RPQ1VUSUxTOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcmVzdHJ1Y3R1cmVkdGV4dCgpCisgICAgICAgICAgICBlbGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IoJ1RoZSBkb2N1dGlscyBwYWNrYWdlIGlzIG5lZWRlZC4nKQorCisgICAgICAgICMgbGV0J3MgcmFpc2UgYW4gZXJyb3IgaW4gc3RyaWN0IG1vZGUsIGlmIHdlIGhhdmUgYXQgbGVhc3QKKyAgICAgICAgIyBvbmUgd2FybmluZworICAgICAgICBpZiBzZWxmLnN0cmljdCBhbmQgc2VsZi5fd2FybmluZ3MgPiAwOgorICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzU2V0dXBFcnJvcignUGxlYXNlIGNvcnJlY3QgeW91ciBwYWNrYWdlLicpCisKKyAgICBkZWYgY2hlY2tfbWV0YWRhdGEoc2VsZik6CisgICAgICAgICIiIkVuc3VyZXMgdGhhdCBhbGwgcmVxdWlyZWQgZWxlbWVudHMgb2YgbWV0YS1kYXRhIGFyZSBzdXBwbGllZC4KKworICAgICAgICBuYW1lLCB2ZXJzaW9uLCBVUkwsIChhdXRob3IgYW5kIGF1dGhvcl9lbWFpbCkgb3IKKyAgICAgICAgKG1haW50YWluZXIgYW5kIG1haW50YWluZXJfZW1haWwpKS4KKworICAgICAgICBXYXJucyBpZiBhbnkgYXJlIG1pc3NpbmcuCisgICAgICAgICIiIgorICAgICAgICBtZXRhZGF0YSA9IHNlbGYuZGlzdHJpYnV0aW9uLm1ldGFkYXRhCisKKyAgICAgICAgbWlzc2luZyA9IFtdCisgICAgICAgIGZvciBhdHRyIGluICgnbmFtZScsICd2ZXJzaW9uJywgJ3VybCcpOgorICAgICAgICAgICAgaWYgbm90IChoYXNhdHRyKG1ldGFkYXRhLCBhdHRyKSBhbmQgZ2V0YXR0cihtZXRhZGF0YSwgYXR0cikpOgorICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKGF0dHIpCisKKyAgICAgICAgaWYgbWlzc2luZzoKKyAgICAgICAgICAgIHNlbGYud2FybigibWlzc2luZyByZXF1aXJlZCBtZXRhLWRhdGE6ICVzIiAgJSAnLCAnLmpvaW4obWlzc2luZykpCisgICAgICAgIGlmIG1ldGFkYXRhLmF1dGhvcjoKKyAgICAgICAgICAgIGlmIG5vdCBtZXRhZGF0YS5hdXRob3JfZW1haWw6CisgICAgICAgICAgICAgICAgc2VsZi53YXJuKCJtaXNzaW5nIG1ldGEtZGF0YTogaWYgJ2F1dGhvcicgc3VwcGxpZWQsICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiJ2F1dGhvcl9lbWFpbCcgbXVzdCBiZSBzdXBwbGllZCB0b28iKQorICAgICAgICBlbGlmIG1ldGFkYXRhLm1haW50YWluZXI6CisgICAgICAgICAgICBpZiBub3QgbWV0YWRhdGEubWFpbnRhaW5lcl9lbWFpbDoKKyAgICAgICAgICAgICAgICBzZWxmLndhcm4oIm1pc3NpbmcgbWV0YS1kYXRhOiBpZiAnbWFpbnRhaW5lcicgc3VwcGxpZWQsICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiJ21haW50YWluZXJfZW1haWwnIG11c3QgYmUgc3VwcGxpZWQgdG9vIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud2FybigibWlzc2luZyBtZXRhLWRhdGE6IGVpdGhlciAoYXV0aG9yIGFuZCBhdXRob3JfZW1haWwpICIgKworICAgICAgICAgICAgICAgICAgICAgICJvciAobWFpbnRhaW5lciBhbmQgbWFpbnRhaW5lcl9lbWFpbCkgIiArCisgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc3VwcGxpZWQiKQorCisgICAgZGVmIGNoZWNrX3Jlc3RydWN0dXJlZHRleHQoc2VsZik6CisgICAgICAgICIiIkNoZWNrcyBpZiB0aGUgbG9uZyBzdHJpbmcgZmllbGRzIGFyZSByZVNULWNvbXBsaWFudC4iIiIKKyAgICAgICAgZGF0YSA9IHNlbGYuZGlzdHJpYnV0aW9uLmdldF9sb25nX2Rlc2NyaXB0aW9uKCkKKyAgICAgICAgZm9yIHdhcm5pbmcgaW4gc2VsZi5fY2hlY2tfcnN0X2RhdGEoZGF0YSk6CisgICAgICAgICAgICBsaW5lID0gd2FybmluZ1stMV0uZ2V0KCdsaW5lJykKKyAgICAgICAgICAgIGlmIGxpbmUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB3YXJuaW5nID0gd2FybmluZ1sxXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3YXJuaW5nID0gJyVzIChsaW5lICVzKScgJSAod2FybmluZ1sxXSwgbGluZSkKKyAgICAgICAgICAgIHNlbGYud2Fybih3YXJuaW5nKQorCisgICAgZGVmIF9jaGVja19yc3RfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiUmV0dXJucyB3YXJuaW5ncyB3aGVuIHRoZSBwcm92aWRlZCBkYXRhIGRvZXNuJ3QgY29tcGlsZS4iIiIKKyAgICAgICAgc291cmNlX3BhdGggPSBTdHJpbmdJTygpCisgICAgICAgIHBhcnNlciA9IFBhcnNlcigpCisgICAgICAgIHNldHRpbmdzID0gZnJvbnRlbmQuT3B0aW9uUGFyc2VyKCkuZ2V0X2RlZmF1bHRfdmFsdWVzKCkKKyAgICAgICAgc2V0dGluZ3MudGFiX3dpZHRoID0gNAorICAgICAgICBzZXR0aW5ncy5wZXBfcmVmZXJlbmNlcyA9IE5vbmUKKyAgICAgICAgc2V0dGluZ3MucmZjX3JlZmVyZW5jZXMgPSBOb25lCisgICAgICAgIHJlcG9ydGVyID0gU2lsZW50UmVwb3J0ZXIoc291cmNlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLnJlcG9ydF9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuaGFsdF9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtPXNldHRpbmdzLndhcm5pbmdfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz1zZXR0aW5ncy5kZWJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9c2V0dGluZ3MuZXJyb3JfZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXI9c2V0dGluZ3MuZXJyb3JfZW5jb2RpbmdfZXJyb3JfaGFuZGxlcikKKworICAgICAgICBkb2N1bWVudCA9IG5vZGVzLmRvY3VtZW50KHNldHRpbmdzLCByZXBvcnRlciwgc291cmNlPXNvdXJjZV9wYXRoKQorICAgICAgICBkb2N1bWVudC5ub3RlX3NvdXJjZShzb3VyY2VfcGF0aCwgLTEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZShkYXRhLCBkb2N1bWVudCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmVwb3J0ZXIubWVzc2FnZXMuYXBwZW5kKCgtMSwgJ0NvdWxkIG5vdCBmaW5pc2ggdGhlIHBhcnNpbmcuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsIHt9KSkKKworICAgICAgICByZXR1cm4gcmVwb3J0ZXIubWVzc2FnZXMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jbGVhbi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jbGVhbi5weQppbmRleCAwMjE4OWM1Li45MGVmMzVmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvY2xlYW4ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2NsZWFuLnB5CkBAIC00LDggKzQsNiBAQAogCiAjIGNvbnRyaWJ1dGVkIGJ5IEJhc3RpYW4gS2xlaW5laWRhbSA8Y2FsdmluQGNzLnVuaS1zYi5kZT4sIGFkZGVkIDIwMDAtMDMtMTgKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKIGltcG9ydCBvcwpAQCAtMTMsNyArMTEsNyBAQAogZnJvbSBkaXN0dXRpbHMuZGlyX3V0aWwgaW1wb3J0IHJlbW92ZV90cmVlCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLWNsYXNzIGNsZWFuIChDb21tYW5kKToKK2NsYXNzIGNsZWFuKENvbW1hbmQpOgogCiAgICAgZGVzY3JpcHRpb24gPSAiY2xlYW4gdXAgdGVtcG9yYXJ5IGZpbGVzIGZyb20gJ2J1aWxkJyBjb21tYW5kIgogICAgIHVzZXJfb3B0aW9ucyA9IFsKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvY29uZmlnLnB5CmluZGV4IDUyMGMxYjAuLmRhOGRhNTkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2NvbmZpZy5weQpAQCAtOSwyMSArOSwxOSBAQAogdGhpcyBoZWFkZXIgZmlsZSBsaXZlcyIuCiAiIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBzeXMsIG9zLCBzdHJpbmcsIHJlCi1mcm9tIHR5cGVzIGltcG9ydCAqCitpbXBvcnQgb3MKK2ltcG9ydCByZQorCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvcgotZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCBjdXN0b21pemVfY29tcGlsZXIKK2Zyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgY3VzdG9taXplX2NvbXBpbGVyCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLUxBTkdfRVhUID0geydjJzogJy5jJywKLSAgICAgICAgICAgICdjKysnOiAnLmN4eCd9CitMQU5HX0VYVCA9IHsnYyc6ICcuYycsICdjKysnOiAnLmN4eCd9CiAKLWNsYXNzIGNvbmZpZyAoQ29tbWFuZCk6CitjbGFzcyBjb25maWcoQ29tbWFuZCk6CiAKICAgICBkZXNjcmlwdGlvbiA9ICJwcmVwYXJlIHRvIGJ1aWxkIgogCkBAIC01MywxMiArNTEsMTAgQEAKICAgICAjIFRoZSB0aHJlZSBzdGFuZGFyZCBjb21tYW5kIG1ldGhvZHM6IHNpbmNlIHRoZSAiY29uZmlnIiBjb21tYW5kCiAgICAgIyBkb2VzIG5vdGhpbmcgYnkgZGVmYXVsdCwgdGhlc2UgYXJlIGVtcHR5LgogCi0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5jb21waWxlciA9IE5vbmUKICAgICAgICAgc2VsZi5jYyA9IE5vbmUKICAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMgPSBOb25lCi0gICAgICAgICNzZWxmLmRlZmluZSA9IE5vbmUKLSAgICAgICAgI3NlbGYudW5kZWYgPSBOb25lCiAgICAgICAgIHNlbGYubGlicmFyaWVzID0gTm9uZQogICAgICAgICBzZWxmLmxpYnJhcnlfZGlycyA9IE5vbmUKIApAQCAtNzAsMjQgKzY2LDIzIEBACiAgICAgICAgICMgdG8gY2xlYW4gYXQgc29tZSBwb2ludAogICAgICAgICBzZWxmLnRlbXBfZmlsZXMgPSBbXQogCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmluY2x1ZGVfZGlycyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMgPSBzZWxmLmRpc3RyaWJ1dGlvbi5pbmNsdWRlX2RpcnMgb3IgW10KLSAgICAgICAgZWxpZiB0eXBlKHNlbGYuaW5jbHVkZV9kaXJzKSBpcyBTdHJpbmdUeXBlOgotICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMgPSBzdHJpbmcuc3BsaXQoc2VsZi5pbmNsdWRlX2RpcnMsIG9zLnBhdGhzZXApCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLmluY2x1ZGVfZGlycywgc3RyKToKKyAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9kaXJzID0gc2VsZi5pbmNsdWRlX2RpcnMuc3BsaXQob3MucGF0aHNlcCkKIAogICAgICAgICBpZiBzZWxmLmxpYnJhcmllcyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5saWJyYXJpZXMgPSBbXQotICAgICAgICBlbGlmIHR5cGUoc2VsZi5saWJyYXJpZXMpIGlzIFN0cmluZ1R5cGU6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLmxpYnJhcmllcywgc3RyKToKICAgICAgICAgICAgIHNlbGYubGlicmFyaWVzID0gW3NlbGYubGlicmFyaWVzXQogCiAgICAgICAgIGlmIHNlbGYubGlicmFyeV9kaXJzIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLmxpYnJhcnlfZGlycyA9IFtdCi0gICAgICAgIGVsaWYgdHlwZShzZWxmLmxpYnJhcnlfZGlycykgaXMgU3RyaW5nVHlwZToKLSAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzID0gc3RyaW5nLnNwbGl0KHNlbGYubGlicmFyeV9kaXJzLCBvcy5wYXRoc2VwKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5saWJyYXJ5X2RpcnMsIHN0cik6CisgICAgICAgICAgICBzZWxmLmxpYnJhcnlfZGlycyA9IHNlbGYubGlicmFyeV9kaXJzLnNwbGl0KG9zLnBhdGhzZXApCiAKLQotICAgIGRlZiBydW4gKHNlbGYpOgorICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIHBhc3MKIAogCkBAIC05NSw3ICs5MCw3IEBACiAgICAgIyBsb29zZWx5IGJhc2VkIG9uIEF1dG9jb25mIG1hY3JvcyBvZiBzaW1pbGFyIG5hbWVzLiAgU3ViLWNsYXNzZXMKICAgICAjIG1heSB1c2UgdGhlc2UgZnJlZWx5LgogCi0gICAgZGVmIF9jaGVja19jb21waWxlciAoc2VsZik6CisgICAgZGVmIF9jaGVja19jb21waWxlcihzZWxmKToKICAgICAgICAgIiIiQ2hlY2sgdGhhdCAnc2VsZi5jb21waWxlcicgcmVhbGx5IGlzIGEgQ0NvbXBpbGVyIG9iamVjdDsKICAgICAgICAgaWYgbm90LCBtYWtlIGl0IG9uZS4KICAgICAgICAgIiIiCkBAIC0xMTQsNyArMTA5LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmNvbXBpbGVyLnNldF9saWJyYXJ5X2RpcnMoc2VsZi5saWJyYXJ5X2RpcnMpCiAKIAotICAgIGRlZiBfZ2VuX3RlbXBfc291cmNlZmlsZSAoc2VsZiwgYm9keSwgaGVhZGVycywgbGFuZyk6CisgICAgZGVmIF9nZW5fdGVtcF9zb3VyY2VmaWxlKHNlbGYsIGJvZHksIGhlYWRlcnMsIGxhbmcpOgogICAgICAgICBmaWxlbmFtZSA9ICJfY29uZmlndGVzdCIgKyBMQU5HX0VYVFtsYW5nXQogICAgICAgICBmaWxlID0gb3BlbihmaWxlbmFtZSwgInciKQogICAgICAgICBpZiBoZWFkZXJzOgpAQCAtMTI3LDE0ICsxMjIsMTQgQEAKICAgICAgICAgZmlsZS5jbG9zZSgpCiAgICAgICAgIHJldHVybiBmaWxlbmFtZQogCi0gICAgZGVmIF9wcmVwcm9jZXNzIChzZWxmLCBib2R5LCBoZWFkZXJzLCBpbmNsdWRlX2RpcnMsIGxhbmcpOgorICAgIGRlZiBfcHJlcHJvY2VzcyhzZWxmLCBib2R5LCBoZWFkZXJzLCBpbmNsdWRlX2RpcnMsIGxhbmcpOgogICAgICAgICBzcmMgPSBzZWxmLl9nZW5fdGVtcF9zb3VyY2VmaWxlKGJvZHksIGhlYWRlcnMsIGxhbmcpCiAgICAgICAgIG91dCA9ICJfY29uZmlndGVzdC5pIgogICAgICAgICBzZWxmLnRlbXBfZmlsZXMuZXh0ZW5kKFtzcmMsIG91dF0pCiAgICAgICAgIHNlbGYuY29tcGlsZXIucHJlcHJvY2VzcyhzcmMsIG91dCwgaW5jbHVkZV9kaXJzPWluY2x1ZGVfZGlycykKICAgICAgICAgcmV0dXJuIChzcmMsIG91dCkKIAotICAgIGRlZiBfY29tcGlsZSAoc2VsZiwgYm9keSwgaGVhZGVycywgaW5jbHVkZV9kaXJzLCBsYW5nKToKKyAgICBkZWYgX2NvbXBpbGUoc2VsZiwgYm9keSwgaGVhZGVycywgaW5jbHVkZV9kaXJzLCBsYW5nKToKICAgICAgICAgc3JjID0gc2VsZi5fZ2VuX3RlbXBfc291cmNlZmlsZShib2R5LCBoZWFkZXJzLCBsYW5nKQogICAgICAgICBpZiBzZWxmLmR1bXBfc291cmNlOgogICAgICAgICAgICAgZHVtcF9maWxlKHNyYywgImNvbXBpbGluZyAnJXMnOiIgJSBzcmMpCkBAIC0xNDMsOSArMTM4LDggQEAKICAgICAgICAgc2VsZi5jb21waWxlci5jb21waWxlKFtzcmNdLCBpbmNsdWRlX2RpcnM9aW5jbHVkZV9kaXJzKQogICAgICAgICByZXR1cm4gKHNyYywgb2JqKQogCi0gICAgZGVmIF9saW5rIChzZWxmLCBib2R5LAotICAgICAgICAgICAgICAgaGVhZGVycywgaW5jbHVkZV9kaXJzLAotICAgICAgICAgICAgICAgbGlicmFyaWVzLCBsaWJyYXJ5X2RpcnMsIGxhbmcpOgorICAgIGRlZiBfbGluayhzZWxmLCBib2R5LCBoZWFkZXJzLCBpbmNsdWRlX2RpcnMsIGxpYnJhcmllcywgbGlicmFyeV9kaXJzLAorICAgICAgICAgICAgICBsYW5nKToKICAgICAgICAgKHNyYywgb2JqKSA9IHNlbGYuX2NvbXBpbGUoYm9keSwgaGVhZGVycywgaW5jbHVkZV9kaXJzLCBsYW5nKQogICAgICAgICBwcm9nID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHNyYykpWzBdCiAgICAgICAgIHNlbGYuY29tcGlsZXIubGlua19leGVjdXRhYmxlKFtvYmpdLCBwcm9nLApAQCAtMTU5LDExICsxNTMsMTEgQEAKIAogICAgICAgICByZXR1cm4gKHNyYywgb2JqLCBwcm9nKQogCi0gICAgZGVmIF9jbGVhbiAoc2VsZiwgKmZpbGVuYW1lcyk6CisgICAgZGVmIF9jbGVhbihzZWxmLCAqZmlsZW5hbWVzKToKICAgICAgICAgaWYgbm90IGZpbGVuYW1lczoKICAgICAgICAgICAgIGZpbGVuYW1lcyA9IHNlbGYudGVtcF9maWxlcwogICAgICAgICAgICAgc2VsZi50ZW1wX2ZpbGVzID0gW10KLSAgICAgICAgbG9nLmluZm8oInJlbW92aW5nOiAlcyIsIHN0cmluZy5qb2luKGZpbGVuYW1lcykpCisgICAgICAgIGxvZy5pbmZvKCJyZW1vdmluZzogJXMiLCAnICcuam9pbihmaWxlbmFtZXMpKQogICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKQEAgLTE4MSw3ICsxNzUsNyBAQAogCiAgICAgIyBYWFggbmVlZCBhY2Nlc3MgdG8gdGhlIGhlYWRlciBzZWFyY2ggcGF0aCBhbmQgbWF5YmUgZGVmYXVsdCBtYWNyb3MuCiAKLSAgICBkZWYgdHJ5X2NwcCAoc2VsZiwgYm9keT1Ob25lLCBoZWFkZXJzPU5vbmUsIGluY2x1ZGVfZGlycz1Ob25lLCBsYW5nPSJjIik6CisgICAgZGVmIHRyeV9jcHAoc2VsZiwgYm9keT1Ob25lLCBoZWFkZXJzPU5vbmUsIGluY2x1ZGVfZGlycz1Ob25lLCBsYW5nPSJjIik6CiAgICAgICAgICIiIkNvbnN0cnVjdCBhIHNvdXJjZSBmaWxlIGZyb20gJ2JvZHknIChhIHN0cmluZyBjb250YWluaW5nIGxpbmVzCiAgICAgICAgIG9mIEMvQysrIGNvZGUpIGFuZCAnaGVhZGVycycgKGEgbGlzdCBvZiBoZWFkZXIgZmlsZXMgdG8gaW5jbHVkZSkKICAgICAgICAgYW5kIHJ1biBpdCB0aHJvdWdoIHRoZSBwcmVwcm9jZXNzb3IuICBSZXR1cm4gdHJ1ZSBpZiB0aGUKQEAgLTE5OSw4ICsxOTMsOCBAQAogICAgICAgICBzZWxmLl9jbGVhbigpCiAgICAgICAgIHJldHVybiBvawogCi0gICAgZGVmIHNlYXJjaF9jcHAgKHNlbGYsIHBhdHRlcm4sIGJvZHk9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVycz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwgbGFuZz0iYyIpOgorICAgIGRlZiBzZWFyY2hfY3BwKHNlbGYsIHBhdHRlcm4sIGJvZHk9Tm9uZSwgaGVhZGVycz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICBsYW5nPSJjIik6CiAgICAgICAgICIiIkNvbnN0cnVjdCBhIHNvdXJjZSBmaWxlIChqdXN0IGxpa2UgJ3RyeV9jcHAoKScpLCBydW4gaXQgdGhyb3VnaAogICAgICAgICB0aGUgcHJlcHJvY2Vzc29yLCBhbmQgcmV0dXJuIHRydWUgaWYgYW55IGxpbmUgb2YgdGhlIG91dHB1dCBtYXRjaGVzCiAgICAgICAgICdwYXR0ZXJuJy4gICdwYXR0ZXJuJyBzaG91bGQgZWl0aGVyIGJlIGEgY29tcGlsZWQgcmVnZXggb2JqZWN0IG9yIGEKQEAgLTIwOCwxMSArMjAyLDEwIEBACiAgICAgICAgIHByZXByb2Nlc3NlcyBhbiBlbXB0eSBmaWxlIC0tIHdoaWNoIGNhbiBiZSB1c2VmdWwgdG8gZGV0ZXJtaW5lIHRoZQogICAgICAgICBzeW1ib2xzIHRoZSBwcmVwcm9jZXNzb3IgYW5kIGNvbXBpbGVyIHNldCBieSBkZWZhdWx0LgogICAgICAgICAiIiIKLQogICAgICAgICBzZWxmLl9jaGVja19jb21waWxlcigpCi0gICAgICAgIChzcmMsIG91dCkgPSBzZWxmLl9wcmVwcm9jZXNzKGJvZHksIGhlYWRlcnMsIGluY2x1ZGVfZGlycywgbGFuZykKKyAgICAgICAgc3JjLCBvdXQgPSBzZWxmLl9wcmVwcm9jZXNzKGJvZHksIGhlYWRlcnMsIGluY2x1ZGVfZGlycywgbGFuZykKIAotICAgICAgICBpZiB0eXBlKHBhdHRlcm4pIGlzIFN0cmluZ1R5cGU6CisgICAgICAgIGlmIGlzaW5zdGFuY2UocGF0dGVybiwgc3RyKToKICAgICAgICAgICAgIHBhdHRlcm4gPSByZS5jb21waWxlKHBhdHRlcm4pCiAKICAgICAgICAgZmlsZSA9IG9wZW4ob3V0KQpAQCAtMjI5LDcgKzIyMiw3IEBACiAgICAgICAgIHNlbGYuX2NsZWFuKCkKICAgICAgICAgcmV0dXJuIG1hdGNoCiAKLSAgICBkZWYgdHJ5X2NvbXBpbGUgKHNlbGYsIGJvZHksIGhlYWRlcnM9Tm9uZSwgaW5jbHVkZV9kaXJzPU5vbmUsIGxhbmc9ImMiKToKKyAgICBkZWYgdHJ5X2NvbXBpbGUoc2VsZiwgYm9keSwgaGVhZGVycz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwgbGFuZz0iYyIpOgogICAgICAgICAiIiJUcnkgdG8gY29tcGlsZSBhIHNvdXJjZSBmaWxlIGJ1aWx0IGZyb20gJ2JvZHknIGFuZCAnaGVhZGVycycuCiAgICAgICAgIFJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KICAgICAgICAgIiIiCkBAIC0yNDUsMTAgKzIzOCw4IEBACiAgICAgICAgIHNlbGYuX2NsZWFuKCkKICAgICAgICAgcmV0dXJuIG9rCiAKLSAgICBkZWYgdHJ5X2xpbmsgKHNlbGYsIGJvZHksCi0gICAgICAgICAgICAgICAgICBoZWFkZXJzPU5vbmUsIGluY2x1ZGVfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsIGxpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICAgbGFuZz0iYyIpOgorICAgIGRlZiB0cnlfbGluayhzZWxmLCBib2R5LCBoZWFkZXJzPU5vbmUsIGluY2x1ZGVfZGlycz1Ob25lLCBsaWJyYXJpZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPU5vbmUsIGxhbmc9ImMiKToKICAgICAgICAgIiIiVHJ5IHRvIGNvbXBpbGUgYW5kIGxpbmsgYSBzb3VyY2UgZmlsZSwgYnVpbHQgZnJvbSAnYm9keScgYW5kCiAgICAgICAgICdoZWFkZXJzJywgdG8gZXhlY3V0YWJsZSBmb3JtLiAgUmV0dXJuIHRydWUgb24gc3VjY2VzcywgZmFsc2UKICAgICAgICAgb3RoZXJ3aXNlLgpAQCAtMjY2LDEwICsyNTcsOCBAQAogICAgICAgICBzZWxmLl9jbGVhbigpCiAgICAgICAgIHJldHVybiBvawogCi0gICAgZGVmIHRyeV9ydW4gKHNlbGYsIGJvZHksCi0gICAgICAgICAgICAgICAgIGhlYWRlcnM9Tm9uZSwgaW5jbHVkZV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLCBsaWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgbGFuZz0iYyIpOgorICAgIGRlZiB0cnlfcnVuKHNlbGYsIGJvZHksIGhlYWRlcnM9Tm9uZSwgaW5jbHVkZV9kaXJzPU5vbmUsIGxpYnJhcmllcz1Ob25lLAorICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1Ob25lLCBsYW5nPSJjIik6CiAgICAgICAgICIiIlRyeSB0byBjb21waWxlLCBsaW5rIHRvIGFuIGV4ZWN1dGFibGUsIGFuZCBydW4gYSBwcm9ncmFtCiAgICAgICAgIGJ1aWx0IGZyb20gJ2JvZHknIGFuZCAnaGVhZGVycycuICBSZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZQogICAgICAgICBvdGhlcndpc2UuCkBAIC0yOTMsMTAgKzI4Miw4IEBACiAgICAgIyAodGhlc2UgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGFjdHVhbGx5IGxpa2VseSB0byBiZSB1c2VmdWwKICAgICAjIHdoZW4gaW1wbGVtZW50aW5nIGEgcmVhbC13b3JsZCBjb25maWcgY29tbWFuZCEpCiAKLSAgICBkZWYgY2hlY2tfZnVuYyAoc2VsZiwgZnVuYywKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVycz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsIGxpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICAgICBkZWNsPTAsIGNhbGw9MCk6CisgICAgZGVmIGNoZWNrX2Z1bmMoc2VsZiwgZnVuYywgaGVhZGVycz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwgbGlicmFyeV9kaXJzPU5vbmUsIGRlY2w9MCwgY2FsbD0wKToKIAogICAgICAgICAiIiJEZXRlcm1pbmUgaWYgZnVuY3Rpb24gJ2Z1bmMnIGlzIGF2YWlsYWJsZSBieSBjb25zdHJ1Y3RpbmcgYQogICAgICAgICBzb3VyY2UgZmlsZSB0aGF0IHJlZmVycyB0byAnZnVuYycsIGFuZCBjb21waWxlcyBhbmQgbGlua3MgaXQuCkBAIC0zMjIsMTUgKzMwOSwxNSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYm9keS5hcHBlbmQoIiAgJXM7IiAlIGZ1bmMpCiAgICAgICAgIGJvZHkuYXBwZW5kKCJ9IikKLSAgICAgICAgYm9keSA9IHN0cmluZy5qb2luKGJvZHksICJcbiIpICsgIlxuIgorICAgICAgICBib2R5ID0gIlxuIi5qb2luKGJvZHkpICsgIlxuIgogCiAgICAgICAgIHJldHVybiBzZWxmLnRyeV9saW5rKGJvZHksIGhlYWRlcnMsIGluY2x1ZGVfZGlycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzLCBsaWJyYXJ5X2RpcnMpCiAKICAgICAjIGNoZWNrX2Z1bmMgKCkKIAotICAgIGRlZiBjaGVja19saWIgKHNlbGYsIGxpYnJhcnksIGxpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9Tm9uZSwgaW5jbHVkZV9kaXJzPU5vbmUsIG90aGVyX2xpYnJhcmllcz1bXSk6CisgICAgZGVmIGNoZWNrX2xpYihzZWxmLCBsaWJyYXJ5LCBsaWJyYXJ5X2RpcnM9Tm9uZSwgaGVhZGVycz1Ob25lLAorICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzPU5vbmUsIG90aGVyX2xpYnJhcmllcz1bXSk6CiAgICAgICAgICIiIkRldGVybWluZSBpZiAnbGlicmFyeScgaXMgYXZhaWxhYmxlIHRvIGJlIGxpbmtlZCBhZ2FpbnN0LAogICAgICAgICB3aXRob3V0IGFjdHVhbGx5IGNoZWNraW5nIHRoYXQgYW55IHBhcnRpY3VsYXIgc3ltYm9scyBhcmUgcHJvdmlkZWQKICAgICAgICAgYnkgaXQuICAnaGVhZGVycycgd2lsbCBiZSB1c2VkIGluIGNvbnN0cnVjdGluZyB0aGUgc291cmNlIGZpbGUgdG8KQEAgLTM0NCw4ICszMzEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLCBpbmNsdWRlX2RpcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaWJyYXJ5XStvdGhlcl9saWJyYXJpZXMsIGxpYnJhcnlfZGlycykKIAotICAgIGRlZiBjaGVja19oZWFkZXIgKHNlbGYsIGhlYWRlciwgaW5jbHVkZV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPU5vbmUsIGxhbmc9ImMiKToKKyAgICBkZWYgY2hlY2tfaGVhZGVyKHNlbGYsIGhlYWRlciwgaW5jbHVkZV9kaXJzPU5vbmUsIGxpYnJhcnlfZGlycz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgbGFuZz0iYyIpOgogICAgICAgICAiIiJEZXRlcm1pbmUgaWYgdGhlIHN5c3RlbSBoZWFkZXIgZmlsZSBuYW1lZCBieSAnaGVhZGVyX2ZpbGUnCiAgICAgICAgIGV4aXN0cyBhbmQgY2FuIGJlIGZvdW5kIGJ5IHRoZSBwcmVwcm9jZXNzb3I7IHJldHVybiB0cnVlIGlmIHNvLAogICAgICAgICBmYWxzZSBvdGhlcndpc2UuCkBAIC0zNTQsMTUgKzM0MSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1pbmNsdWRlX2RpcnMpCiAKIAotIyBjbGFzcyBjb25maWcKK2RlZiBkdW1wX2ZpbGUoZmlsZW5hbWUsIGhlYWQ9Tm9uZSk6CisgICAgIiIiRHVtcHMgYSBmaWxlIGNvbnRlbnQgaW50byBsb2cuaW5mby4KIAotCi1kZWYgZHVtcF9maWxlIChmaWxlbmFtZSwgaGVhZD1Ob25lKToKKyAgICBJZiBoZWFkIGlzIG5vdCBOb25lLCB3aWxsIGJlIGR1bXBlZCBiZWZvcmUgdGhlIGZpbGUgY29udGVudC4KKyAgICAiIiIKICAgICBpZiBoZWFkIGlzIE5vbmU6Ci0gICAgICAgIHByaW50IGZpbGVuYW1lICsgIjoiCisgICAgICAgIGxvZy5pbmZvKCclcycgJSBmaWxlbmFtZSkKICAgICBlbHNlOgotICAgICAgICBwcmludCBoZWFkCi0KKyAgICAgICAgbG9nLmluZm8oaGVhZCkKICAgICBmaWxlID0gb3BlbihmaWxlbmFtZSkKLSAgICBzeXMuc3Rkb3V0LndyaXRlKGZpbGUucmVhZCgpKQotICAgIGZpbGUuY2xvc2UoKQorICAgIHRyeToKKyAgICAgICAgbG9nLmluZm8oZmlsZS5yZWFkKCkpCisgICAgZmluYWxseToKKyAgICAgICAgZmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CmluZGV4IDQ0Yzc2OTIuLmYxZjNiZDUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CkBAIC02OSwyMCArNjksNiBAQAogICAgICAgICAnc2NyaXB0cyc6ICckdXNlcmJhc2UvU2NyaXB0cycsCiAgICAgICAgICdkYXRhJyAgIDogJyR1c2VyYmFzZScsCiAgICAgICAgIH0sCi0gICAgJ21hYyc6IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAncGxhdGxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAotICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCi0gICAgICAgIH0sCi0gICAgJ21hY191c2VyJzogewotICAgICAgICAncHVyZWxpYic6ICckdXNlcnNpdGUnLAotICAgICAgICAncGxhdGxpYic6ICckdXNlcnNpdGUnLAotICAgICAgICAnaGVhZGVycyc6ICckdXNlcmJhc2UvJHB5X3ZlcnNpb25fc2hvcnQvaW5jbHVkZS8kZGlzdF9uYW1lJywKLSAgICAgICAgJ3NjcmlwdHMnOiAnJHVzZXJiYXNlL2JpbicsCi0gICAgICAgICdkYXRhJyAgIDogJyR1c2VyYmFzZScsCi0gICAgICAgIH0sCiAgICAgJ29zMic6IHsKICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAogICAgICAgICAncGxhdGxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9kYXRhLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfZGF0YS5weQppbmRleCAxMDY5ODMwLi5hYjQwNzk3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9kYXRhLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2RhdGEucHkKQEAgLTUsMTYgKzUsMTMgQEAKIAogIyBjb250cmlidXRlZCBieSBCYXN0aWFuIEtsZWluZWlkYW0KIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKIGltcG9ydCBvcwotZnJvbSB0eXBlcyBpbXBvcnQgU3RyaW5nVHlwZQogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZAogZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY2hhbmdlX3Jvb3QsIGNvbnZlcnRfcGF0aAogCi1jbGFzcyBpbnN0YWxsX2RhdGEgKENvbW1hbmQpOgorY2xhc3MgaW5zdGFsbF9kYXRhKENvbW1hbmQpOgogCiAgICAgZGVzY3JpcHRpb24gPSAiaW5zdGFsbCBkYXRhIGZpbGVzIgogCkBAIC0yOSwyNiArMjYsMjUgQEAKIAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsnZm9yY2UnXQogCi0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5pbnN0YWxsX2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5vdXRmaWxlcyA9IFtdCiAgICAgICAgIHNlbGYucm9vdCA9IE5vbmUKICAgICAgICAgc2VsZi5mb3JjZSA9IDAKLQogICAgICAgICBzZWxmLmRhdGFfZmlsZXMgPSBzZWxmLmRpc3RyaWJ1dGlvbi5kYXRhX2ZpbGVzCiAgICAgICAgIHNlbGYud2Fybl9kaXIgPSAxCiAKLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuc2V0X3VuZGVmaW5lZF9vcHRpb25zKCdpbnN0YWxsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdpbnN0YWxsX2RhdGEnLCAnaW5zdGFsbF9kaXInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdyb290JywgJ3Jvb3QnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdmb3JjZScsICdmb3JjZScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIAotICAgIGRlZiBydW4gKHNlbGYpOgorICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIHNlbGYubWtwYXRoKHNlbGYuaW5zdGFsbF9kaXIpCiAgICAgICAgIGZvciBmIGluIHNlbGYuZGF0YV9maWxlczoKLSAgICAgICAgICAgIGlmIHR5cGUoZikgaXMgU3RyaW5nVHlwZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZiwgc3RyKToKICAgICAgICAgICAgICAgICAjIGl0J3MgYSBzaW1wbGUgZmlsZSwgc28gY29weSBpdAogICAgICAgICAgICAgICAgIGYgPSBjb252ZXJ0X3BhdGgoZikKICAgICAgICAgICAgICAgICBpZiBzZWxmLndhcm5fZGlyOgpAQCAtNzgsOCArNzQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKG91dCwgXykgPSBzZWxmLmNvcHlfZmlsZShkYXRhLCBkaXIpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm91dGZpbGVzLmFwcGVuZChvdXQpCiAKLSAgICBkZWYgZ2V0X2lucHV0cyAoc2VsZik6CisgICAgZGVmIGdldF9pbnB1dHMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmRhdGFfZmlsZXMgb3IgW10KIAotICAgIGRlZiBnZXRfb3V0cHV0cyAoc2VsZik6CisgICAgZGVmIGdldF9vdXRwdXRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5vdXRmaWxlcwpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfaGVhZGVycy5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2hlYWRlcnMucHkKaW5kZXggNDg5NTI0MC4uZDg5MjQxNiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfaGVhZGVycy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9oZWFkZXJzLnB5CkBAIC0zLDE0ICszLDEzIEBACiBJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ2luc3RhbGxfaGVhZGVycycgY29tbWFuZCwgdG8gaW5zdGFsbCBDL0MrKyBoZWFkZXIKIGZpbGVzIHRvIHRoZSBQeXRob24gaW5jbHVkZSBkaXJlY3RvcnkuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCiAKIAotY2xhc3MgaW5zdGFsbF9oZWFkZXJzIChDb21tYW5kKToKKyMgWFhYIGZvcmNlIGlzIG5ldmVyIHVzZWQKK2NsYXNzIGluc3RhbGxfaGVhZGVycyhDb21tYW5kKToKIAogICAgIGRlc2NyaXB0aW9uID0gImluc3RhbGwgQy9DKysgaGVhZGVyIGZpbGVzIgogCkBAIC0yMiwxOCArMjEsMTggQEAKIAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsnZm9yY2UnXQogCi0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5pbnN0YWxsX2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5mb3JjZSA9IDAKICAgICAgICAgc2VsZi5vdXRmaWxlcyA9IFtdCiAKLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuc2V0X3VuZGVmaW5lZF9vcHRpb25zKCdpbnN0YWxsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdpbnN0YWxsX2hlYWRlcnMnLCAnaW5zdGFsbF9kaXInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdmb3JjZScsICdmb3JjZScpKQogCiAKLSAgICBkZWYgcnVuIChzZWxmKToKKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICBoZWFkZXJzID0gc2VsZi5kaXN0cmlidXRpb24uaGVhZGVycwogICAgICAgICBpZiBub3QgaGVhZGVyczoKICAgICAgICAgICAgIHJldHVybgpAQCAtNDMsMTAgKzQyLDEwIEBACiAgICAgICAgICAgICAob3V0LCBfKSA9IHNlbGYuY29weV9maWxlKGhlYWRlciwgc2VsZi5pbnN0YWxsX2RpcikKICAgICAgICAgICAgIHNlbGYub3V0ZmlsZXMuYXBwZW5kKG91dCkKIAotICAgIGRlZiBnZXRfaW5wdXRzIChzZWxmKToKKyAgICBkZWYgZ2V0X2lucHV0cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZGlzdHJpYnV0aW9uLmhlYWRlcnMgb3IgW10KIAotICAgIGRlZiBnZXRfb3V0cHV0cyAoc2VsZik6CisgICAgZGVmIGdldF9vdXRwdXRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5vdXRmaWxlcwogCiAjIGNsYXNzIGluc3RhbGxfaGVhZGVycwpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CmluZGV4IGZiMTU1MzAuLjA0M2U4YjYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKQEAgLTEsNCArMSwzIEBACi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgogIiIiZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9saWIKIAogSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdpbnN0YWxsX2xpYicgY29tbWFuZApAQCAtNyw3ICs2LDYgQEAKIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBpbXBvcnQgb3MKLWZyb20gdHlwZXMgaW1wb3J0IEludFR5cGUKIGltcG9ydCBzeXMKIAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZApAQCAtMjAsNyArMTgsNyBAQAogZWxzZToKICAgICBQWVRIT05fU09VUkNFX0VYVEVOU0lPTiA9ICIucHkiCiAKLWNsYXNzIGluc3RhbGxfbGliIChDb21tYW5kKToKK2NsYXNzIGluc3RhbGxfbGliKENvbW1hbmQpOgogCiAgICAgZGVzY3JpcHRpb24gPSAiaW5zdGFsbCBhbGwgUHl0aG9uIG1vZHVsZXMgKGV4dGVuc2lvbnMgYW5kIHB1cmUgUHl0aG9uKSIKIApAQCAtNTQsOCArNTIsNyBAQAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsnZm9yY2UnLCAnY29tcGlsZScsICdza2lwLWJ1aWxkJ10KICAgICBuZWdhdGl2ZV9vcHQgPSB7J25vLWNvbXBpbGUnIDogJ2NvbXBpbGUnfQogCi0KLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zIChzZWxmKToKKyAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICAjIGxldCB0aGUgJ2luc3RhbGwnIGNvbW1hbmQgZGljdGF0ZSBvdXIgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeQogICAgICAgICBzZWxmLmluc3RhbGxfZGlyID0gTm9uZQogICAgICAgICBzZWxmLmJ1aWxkX2RpciA9IE5vbmUKQEAgLTY0LDggKzYxLDcgQEAKICAgICAgICAgc2VsZi5vcHRpbWl6ZSA9IE5vbmUKICAgICAgICAgc2VsZi5za2lwX2J1aWxkID0gTm9uZQogCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMgKHNlbGYpOgotCisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgICMgR2V0IGFsbCB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCB0byBpbnN0YWxsIHB1cmUgUHl0aG9uIG1vZHVsZXMKICAgICAgICAgIyBmcm9tIHRoZSB1bWJyZWxsYSAnaW5zdGFsbCcgY29tbWFuZCAtLSBidWlsZCAoc291cmNlKSBkaXJlY3RvcnksCiAgICAgICAgICMgaW5zdGFsbCAodGFyZ2V0KSBkaXJlY3RvcnksIGFuZCB3aGV0aGVyIHRvIGNvbXBpbGUgLnB5IGZpbGVzLgpAQCAtODMsNyArNzksNyBAQAogICAgICAgICBpZiBzZWxmLm9wdGltaXplIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLm9wdGltaXplID0gMAogCi0gICAgICAgIGlmIHR5cGUoc2VsZi5vcHRpbWl6ZSkgaXMgbm90IEludFR5cGU6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYub3B0aW1pemUsIGludCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5vcHRpbWl6ZSA9IGludChzZWxmLm9wdGltaXplKQogICAgICAgICAgICAgICAgIGlmIHNlbGYub3B0aW1pemUgbm90IGluICgwLCAxLCAyKToKQEAgLTkxLDggKzg3LDcgQEAKICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgQXNzZXJ0aW9uRXJyb3IpOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCAib3B0aW1pemUgbXVzdCBiZSAwLCAxLCBvciAyIgogCi0gICAgZGVmIHJ1biAoc2VsZik6Ci0KKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGJ1aWx0IGV2ZXJ5dGhpbmcgd2UgbmVlZCBmaXJzdAogICAgICAgICBzZWxmLmJ1aWxkKCkKIApAQCAtMTA1LDIwICsxMDAsMTcgQEAKICAgICAgICAgaWYgb3V0ZmlsZXMgaXMgbm90IE5vbmUgYW5kIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19wdXJlX21vZHVsZXMoKToKICAgICAgICAgICAgIHNlbGYuYnl0ZV9jb21waWxlKG91dGZpbGVzKQogCi0gICAgIyBydW4gKCkKLQotCiAgICAgIyAtLSBUb3AtbGV2ZWwgd29ya2VyIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAjIChjYWxsZWQgZnJvbSAncnVuKCknKQogCi0gICAgZGVmIGJ1aWxkIChzZWxmKToKKyAgICBkZWYgYnVpbGQoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLnNraXBfYnVpbGQ6CiAgICAgICAgICAgICBpZiBzZWxmLmRpc3RyaWJ1dGlvbi5oYXNfcHVyZV9tb2R1bGVzKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5ydW5fY29tbWFuZCgnYnVpbGRfcHknKQogICAgICAgICAgICAgaWYgc2VsZi5kaXN0cmlidXRpb24uaGFzX2V4dF9tb2R1bGVzKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5ydW5fY29tbWFuZCgnYnVpbGRfZXh0JykKIAotICAgIGRlZiBpbnN0YWxsIChzZWxmKToKKyAgICBkZWYgaW5zdGFsbChzZWxmKToKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzZWxmLmJ1aWxkX2Rpcik6CiAgICAgICAgICAgICBvdXRmaWxlcyA9IHNlbGYuY29weV90cmVlKHNlbGYuYnVpbGRfZGlyLCBzZWxmLmluc3RhbGxfZGlyKQogICAgICAgICBlbHNlOgpAQCAtMTI3LDcgKzExOSw3IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgcmV0dXJuIG91dGZpbGVzCiAKLSAgICBkZWYgYnl0ZV9jb21waWxlIChzZWxmLCBmaWxlcyk6CisgICAgZGVmIGJ5dGVfY29tcGlsZShzZWxmLCBmaWxlcyk6CiAgICAgICAgIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgogICAgICAgICAgICAgc2VsZi53YXJuKCdieXRlLWNvbXBpbGluZyBpcyBkaXNhYmxlZCwgc2tpcHBpbmcuJykKICAgICAgICAgICAgIHJldHVybgpAQCAtMTUyLDggKzE0NCw3IEBACiAKICAgICAjIC0tIFV0aWxpdHkgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIF9tdXRhdGVfb3V0cHV0cyAoc2VsZiwgaGFzX2FueSwgYnVpbGRfY21kLCBjbWRfb3B0aW9uLCBvdXRwdXRfZGlyKToKLQorICAgIGRlZiBfbXV0YXRlX291dHB1dHMoc2VsZiwgaGFzX2FueSwgYnVpbGRfY21kLCBjbWRfb3B0aW9uLCBvdXRwdXRfZGlyKToKICAgICAgICAgaWYgbm90IGhhc19hbnk6CiAgICAgICAgICAgICByZXR1cm4gW10KIApAQCAtMTY4LDkgKzE1OSw3IEBACiAKICAgICAgICAgcmV0dXJuIG91dHB1dHMKIAotICAgICMgX211dGF0ZV9vdXRwdXRzICgpCi0KLSAgICBkZWYgX2J5dGVjb2RlX2ZpbGVuYW1lcyAoc2VsZiwgcHlfZmlsZW5hbWVzKToKKyAgICBkZWYgX2J5dGVjb2RlX2ZpbGVuYW1lcyhzZWxmLCBweV9maWxlbmFtZXMpOgogICAgICAgICBieXRlY29kZV9maWxlcyA9IFtdCiAgICAgICAgIGZvciBweV9maWxlIGluIHB5X2ZpbGVuYW1lczoKICAgICAgICAgICAgICMgU2luY2UgYnVpbGRfcHkgaGFuZGxlcyBwYWNrYWdlIGRhdGEgaW5zdGFsbGF0aW9uLCB0aGUKQEAgLTE5MCw3ICsxNzksNyBAQAogICAgICMgLS0gRXh0ZXJuYWwgaW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIyAoY2FsbGVkIGJ5IG91dHNpZGVycykKIAotICAgIGRlZiBnZXRfb3V0cHV0cyAoc2VsZik6CisgICAgZGVmIGdldF9vdXRwdXRzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCB3b3VsZCBiZSBpbnN0YWxsZWQgaWYgdGhpcyBjb21tYW5kCiAgICAgICAgIHdlcmUgYWN0dWFsbHkgcnVuLiAgTm90IGFmZmVjdGVkIGJ5IHRoZSAiZHJ5LXJ1biIgZmxhZyBvciB3aGV0aGVyCiAgICAgICAgIG1vZHVsZXMgaGF2ZSBhY3R1YWxseSBiZWVuIGJ1aWx0IHlldC4KQEAgLTIxMSw5ICsyMDAsNyBAQAogCiAgICAgICAgIHJldHVybiBwdXJlX291dHB1dHMgKyBieXRlY29kZV9vdXRwdXRzICsgZXh0X291dHB1dHMKIAotICAgICMgZ2V0X291dHB1dHMgKCkKLQotICAgIGRlZiBnZXRfaW5wdXRzIChzZWxmKToKKyAgICBkZWYgZ2V0X2lucHV0cyhzZWxmKToKICAgICAgICAgIiIiR2V0IHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgYXJlIGlucHV0IHRvIHRoaXMgY29tbWFuZCwgaWUuIHRoZQogICAgICAgICBmaWxlcyB0aGF0IGdldCBpbnN0YWxsZWQgYXMgdGhleSBhcmUgbmFtZWQgaW4gdGhlIGJ1aWxkIHRyZWUuCiAgICAgICAgIFRoZSBmaWxlcyBpbiB0aGlzIGxpc3QgY29ycmVzcG9uZCBvbmUtdG8tb25lIHRvIHRoZSBvdXRwdXQKQEAgLTIzMCw1ICsyMTcsMyBAQAogICAgICAgICAgICAgaW5wdXRzLmV4dGVuZChidWlsZF9leHQuZ2V0X291dHB1dHMoKSkKIAogICAgICAgICByZXR1cm4gaW5wdXRzCi0KLSMgY2xhc3MgaW5zdGFsbF9saWIKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX3NjcmlwdHMucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9zY3JpcHRzLnB5CmluZGV4IGZlOTNlZjUuLjI5Y2Q5ZTcgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX3NjcmlwdHMucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfc2NyaXB0cy5weQpAQCAtNSw4ICs1LDYgQEAKIAogIyBjb250cmlidXRlZCBieSBCYXN0aWFuIEtsZWluZWlkYW0KIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKIGltcG9ydCBvcwpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3JlZ2lzdGVyLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3JlZ2lzdGVyLnB5CmluZGV4IGY1MzFkMGYuLmRjMDg5OTAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9yZWdpc3Rlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvcmVnaXN0ZXIucHkKQEAgLTcsMTEgKzcsMTMgQEAKIAogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBvcywgc3RyaW5nLCB1cmxsaWIyLCBnZXRwYXNzLCB1cmxwYXJzZQoraW1wb3J0IHVybGxpYjIKK2ltcG9ydCBnZXRwYXNzCitpbXBvcnQgdXJscGFyc2UKIGltcG9ydCBTdHJpbmdJTworZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgogCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBQeVBJUkNDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAogY2xhc3MgcmVnaXN0ZXIoUHlQSVJDQ29tbWFuZCk6CkBAIC0yMCwxOCArMjIsMzQgQEAKICAgICB1c2VyX29wdGlvbnMgPSBQeVBJUkNDb21tYW5kLnVzZXJfb3B0aW9ucyArIFsKICAgICAgICAgKCdsaXN0LWNsYXNzaWZpZXJzJywgTm9uZSwKICAgICAgICAgICdsaXN0IHRoZSB2YWxpZCBUcm92ZSBjbGFzc2lmaWVycycpLAorICAgICAgICAoJ3N0cmljdCcsIE5vbmUgLAorICAgICAgICAgJ1dpbGwgc3RvcCB0aGUgcmVnaXN0ZXJpbmcgaWYgdGhlIG1ldGEtZGF0YSBhcmUgbm90IGZ1bGx5IGNvbXBsaWFudCcpCiAgICAgICAgIF0KICAgICBib29sZWFuX29wdGlvbnMgPSBQeVBJUkNDb21tYW5kLmJvb2xlYW5fb3B0aW9ucyArIFsKLSAgICAgICAgJ3ZlcmlmeScsICdsaXN0LWNsYXNzaWZpZXJzJ10KKyAgICAgICAgJ3ZlcmlmeScsICdsaXN0LWNsYXNzaWZpZXJzJywgJ3N0cmljdCddCisKKyAgICBzdWJfY29tbWFuZHMgPSBbKCdjaGVjaycsIGxhbWJkYSBzZWxmOiBUcnVlKV0KIAogICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIFB5UElSQ0NvbW1hbmQuaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpCiAgICAgICAgIHNlbGYubGlzdF9jbGFzc2lmaWVycyA9IDAKKyAgICAgICAgc2VsZi5zdHJpY3QgPSAwCisKKyAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgUHlQSVJDQ29tbWFuZC5maW5hbGl6ZV9vcHRpb25zKHNlbGYpCisgICAgICAgICMgc2V0dGluZyBvcHRpb25zIGZvciB0aGUgYGNoZWNrYCBzdWJjb21tYW5kCisgICAgICAgIGNoZWNrX29wdGlvbnMgPSB7J3N0cmljdCc6ICgncmVnaXN0ZXInLCBzZWxmLnN0cmljdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3RydWN0dXJlZHRleHQnOiAoJ3JlZ2lzdGVyJywgMSl9CisgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLmNvbW1hbmRfb3B0aW9uc1snY2hlY2snXSA9IGNoZWNrX29wdGlvbnMKIAogICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIHNlbGYuZmluYWxpemVfb3B0aW9ucygpCiAgICAgICAgIHNlbGYuX3NldF9jb25maWcoKQotICAgICAgICBzZWxmLmNoZWNrX21ldGFkYXRhKCkKKworICAgICAgICAjIFJ1biBzdWIgY29tbWFuZHMKKyAgICAgICAgZm9yIGNtZF9uYW1lIGluIHNlbGYuZ2V0X3N1Yl9jb21tYW5kcygpOgorICAgICAgICAgICAgc2VsZi5ydW5fY29tbWFuZChjbWRfbmFtZSkKKwogICAgICAgICBpZiBzZWxmLmRyeV9ydW46CiAgICAgICAgICAgICBzZWxmLnZlcmlmeV9tZXRhZGF0YSgpCiAgICAgICAgIGVsaWYgc2VsZi5saXN0X2NsYXNzaWZpZXJzOgpAQCAtNDAsMzQgKzU4LDE0IEBACiAgICAgICAgICAgICBzZWxmLnNlbmRfbWV0YWRhdGEoKQogCiAgICAgZGVmIGNoZWNrX21ldGFkYXRhKHNlbGYpOgotICAgICAgICAiIiJFbnN1cmUgdGhhdCBhbGwgcmVxdWlyZWQgZWxlbWVudHMgb2YgbWV0YS1kYXRhIChuYW1lLCB2ZXJzaW9uLAotICAgICAgICAgICBVUkwsIChhdXRob3IgYW5kIGF1dGhvcl9lbWFpbCkgb3IgKG1haW50YWluZXIgYW5kCi0gICAgICAgICAgIG1haW50YWluZXJfZW1haWwpKSBhcmUgc3VwcGxpZWQgYnkgdGhlIERpc3RyaWJ1dGlvbiBvYmplY3Q7IHdhcm4gaWYKLSAgICAgICAgICAgYW55IGFyZSBtaXNzaW5nLgotICAgICAgICAiIiIKLSAgICAgICAgbWV0YWRhdGEgPSBzZWxmLmRpc3RyaWJ1dGlvbi5tZXRhZGF0YQotCi0gICAgICAgIG1pc3NpbmcgPSBbXQotICAgICAgICBmb3IgYXR0ciBpbiAoJ25hbWUnLCAndmVyc2lvbicsICd1cmwnKToKLSAgICAgICAgICAgIGlmIG5vdCAoaGFzYXR0cihtZXRhZGF0YSwgYXR0cikgYW5kIGdldGF0dHIobWV0YWRhdGEsIGF0dHIpKToKLSAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChhdHRyKQotCi0gICAgICAgIGlmIG1pc3Npbmc6Ci0gICAgICAgICAgICBzZWxmLndhcm4oIm1pc3NpbmcgcmVxdWlyZWQgbWV0YS1kYXRhOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuam9pbihtaXNzaW5nLCAiLCAiKSkKLQotICAgICAgICBpZiBtZXRhZGF0YS5hdXRob3I6Ci0gICAgICAgICAgICBpZiBub3QgbWV0YWRhdGEuYXV0aG9yX2VtYWlsOgotICAgICAgICAgICAgICAgIHNlbGYud2FybigibWlzc2luZyBtZXRhLWRhdGE6IGlmICdhdXRob3InIHN1cHBsaWVkLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIidhdXRob3JfZW1haWwnIG11c3QgYmUgc3VwcGxpZWQgdG9vIikKLSAgICAgICAgZWxpZiBtZXRhZGF0YS5tYWludGFpbmVyOgotICAgICAgICAgICAgaWYgbm90IG1ldGFkYXRhLm1haW50YWluZXJfZW1haWw6Ci0gICAgICAgICAgICAgICAgc2VsZi53YXJuKCJtaXNzaW5nIG1ldGEtZGF0YTogaWYgJ21haW50YWluZXInIHN1cHBsaWVkLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIidtYWludGFpbmVyX2VtYWlsJyBtdXN0IGJlIHN1cHBsaWVkIHRvbyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndhcm4oIm1pc3NpbmcgbWV0YS1kYXRhOiBlaXRoZXIgKGF1dGhvciBhbmQgYXV0aG9yX2VtYWlsKSAiICsKLSAgICAgICAgICAgICAgICAgICAgICAib3IgKG1haW50YWluZXIgYW5kIG1haW50YWluZXJfZW1haWwpICIgKwotICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHN1cHBsaWVkIikKKyAgICAgICAgIiIiRGVwcmVjYXRlZCBBUEkuIiIiCisgICAgICAgIHdhcm4oImRpc3R1dGlscy5jb21tYW5kLnJlZ2lzdGVyLmNoZWNrX21ldGFkYXRhIGlzIGRlcHJlY2F0ZWQsIFwKKyAgICAgICAgICAgICAgdXNlIHRoZSBjaGVjayBjb21tYW5kIGluc3RlYWQiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBjaGVjayA9IHNlbGYuZGlzdHJpYnV0aW9uLmdldF9jb21tYW5kX29iaignY2hlY2snKQorICAgICAgICBjaGVjay5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY2hlY2suc3RyaWN0ID0gc2VsZi5zdHJpY3QKKyAgICAgICAgY2hlY2sucmVzdHJ1Y3R1cmVkdGV4dCA9IDEKKyAgICAgICAgY2hlY2sucnVuKCkKIAogICAgIGRlZiBfc2V0X2NvbmZpZyhzZWxmKToKICAgICAgICAgJycnIFJlYWRzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHNldCBhdHRyaWJ1dGVzLgpAQCAtOTAsMTQgKzg4LDE0IEBACiAgICAgICAgICcnJyBGZXRjaCB0aGUgbGlzdCBvZiBjbGFzc2lmaWVycyBmcm9tIHRoZSBzZXJ2ZXIuCiAgICAgICAgICcnJwogICAgICAgICByZXNwb25zZSA9IHVybGxpYjIudXJsb3BlbihzZWxmLnJlcG9zaXRvcnkrJz86YWN0aW9uPWxpc3RfY2xhc3NpZmllcnMnKQotICAgICAgICBwcmludCByZXNwb25zZS5yZWFkKCkKKyAgICAgICAgbG9nLmluZm8ocmVzcG9uc2UucmVhZCgpKQogCiAgICAgZGVmIHZlcmlmeV9tZXRhZGF0YShzZWxmKToKICAgICAgICAgJycnIFNlbmQgdGhlIG1ldGFkYXRhIHRvIHRoZSBwYWNrYWdlIGluZGV4IHNlcnZlciB0byBiZSBjaGVja2VkLgogICAgICAgICAnJycKICAgICAgICAgIyBzZW5kIHRoZSBpbmZvIHRvIHRoZSBzZXJ2ZXIgYW5kIHJlcG9ydCB0aGUgcmVzdWx0CiAgICAgICAgIChjb2RlLCByZXN1bHQpID0gc2VsZi5wb3N0X3RvX3NlcnZlcihzZWxmLmJ1aWxkX3Bvc3RfZGF0YSgndmVyaWZ5JykpCi0gICAgICAgIHByaW50ICdTZXJ2ZXIgcmVzcG9uc2UgKCVzKTogJXMnJShjb2RlLCByZXN1bHQpCisgICAgICAgIGxvZy5pbmZvKCdTZXJ2ZXIgcmVzcG9uc2UgKCVzKTogJXMnICUgKGNvZGUsIHJlc3VsdCkpCiAKIAogICAgIGRlZiBzZW5kX21ldGFkYXRhKHNlbGYpOgpAQCAtMTczLDE5ICsxNzEsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLklORk8pCiAKICAgICAgICAgICAgICMgcG9zc2libHkgc2F2ZSB0aGUgbG9naW4KLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhhc19jb25maWcgYW5kIGNvZGUgPT0gMjAwOgotICAgICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoKCdJIGNhbiBzdG9yZSB5b3VyIFB5UEkgbG9naW4gc28gZnV0dXJlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VibWlzc2lvbnMgd2lsbCBiZSBmYXN0ZXIuJyksIGxvZy5JTkZPKQotICAgICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJyh0aGUgbG9naW4gd2lsbCBiZSBzdG9yZWQgaW4gJXMpJyAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2dldF9yY19maWxlKCksIGxvZy5JTkZPKQotCi0gICAgICAgICAgICAgICAgY2hvaWNlID0gJ1gnCi0gICAgICAgICAgICAgICAgd2hpbGUgY2hvaWNlLmxvd2VyKCkgbm90IGluICd5bic6Ci0gICAgICAgICAgICAgICAgICAgIGNob2ljZSA9IHJhd19pbnB1dCgnU2F2ZSB5b3VyIGxvZ2luICh5L04pPycpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaG9pY2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2UgPSAnbicKLSAgICAgICAgICAgICAgICBpZiBjaG9pY2UubG93ZXIoKSA9PSAneSc6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3JlX3B5cGlyYyh1c2VybmFtZSwgcGFzc3dvcmQpCisgICAgICAgICAgICBpZiBjb2RlID09IDIwMDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmhhc19jb25maWc6CisgICAgICAgICAgICAgICAgICAgICMgc2hhcmluZyB0aGUgcGFzc3dvcmQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBpbnN0YW5jZQorICAgICAgICAgICAgICAgICAgICAjIHNvIHRoZSB1cGxvYWQgY29tbWFuZCBjYW4gcmV1c2UgaXQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24ucGFzc3dvcmQgPSBwYXNzd29yZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoKCdJIGNhbiBzdG9yZSB5b3VyIFB5UEkgbG9naW4gc28gZnV0dXJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Ym1pc3Npb25zIHdpbGwgYmUgZmFzdGVyLicpLCBsb2cuSU5GTykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnKHRoZSBsb2dpbiB3aWxsIGJlIHN0b3JlZCBpbiAlcyknICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2dldF9yY19maWxlKCksIGxvZy5JTkZPKQorICAgICAgICAgICAgICAgICAgICBjaG9pY2UgPSAnWCcKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgY2hvaWNlLmxvd2VyKCkgbm90IGluICd5bic6CisgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2UgPSByYXdfaW5wdXQoJ1NhdmUgeW91ciBsb2dpbiAoeS9OKT8nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNob2ljZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2UgPSAnbicKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hvaWNlLmxvd2VyKCkgPT0gJ3knOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcmVfcHlwaXJjKHVzZXJuYW1lLCBwYXNzd29yZCkKIAogICAgICAgICBlbGlmIGNob2ljZSA9PSAnMic6CiAgICAgICAgICAgICBkYXRhID0geyc6YWN0aW9uJzogJ3VzZXInfQpAQCAtMjA2LDE3ICsyMDgsMTggQEAKICAgICAgICAgICAgICAgICBkYXRhWydlbWFpbCddID0gcmF3X2lucHV0KCcgICBFTWFpbDogJykKICAgICAgICAgICAgIGNvZGUsIHJlc3VsdCA9IHNlbGYucG9zdF90b19zZXJ2ZXIoZGF0YSkKICAgICAgICAgICAgIGlmIGNvZGUgIT0gMjAwOgotICAgICAgICAgICAgICAgIHByaW50ICdTZXJ2ZXIgcmVzcG9uc2UgKCVzKTogJXMnJShjb2RlLCByZXN1bHQpCisgICAgICAgICAgICAgICAgbG9nLmluZm8oJ1NlcnZlciByZXNwb25zZSAoJXMpOiAlcycgJSAoY29kZSwgcmVzdWx0KSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgJ1lvdSB3aWxsIHJlY2VpdmUgYW4gZW1haWwgc2hvcnRseS4nCi0gICAgICAgICAgICAgICAgcHJpbnQgJ0ZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIGl0IHRvIGNvbXBsZXRlIHJlZ2lzdHJhdGlvbi4nCisgICAgICAgICAgICAgICAgbG9nLmluZm8oJ1lvdSB3aWxsIHJlY2VpdmUgYW4gZW1haWwgc2hvcnRseS4nKQorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCgnRm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4gaXQgdG8gJworICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxldGUgcmVnaXN0cmF0aW9uLicpKQogICAgICAgICBlbGlmIGNob2ljZSA9PSAnMyc6CiAgICAgICAgICAgICBkYXRhID0geyc6YWN0aW9uJzogJ3Bhc3N3b3JkX3Jlc2V0J30KICAgICAgICAgICAgIGRhdGFbJ2VtYWlsJ10gPSAnJwogICAgICAgICAgICAgd2hpbGUgbm90IGRhdGFbJ2VtYWlsJ106CiAgICAgICAgICAgICAgICAgZGF0YVsnZW1haWwnXSA9IHJhd19pbnB1dCgnWW91ciBlbWFpbCBhZGRyZXNzOiAnKQogICAgICAgICAgICAgY29kZSwgcmVzdWx0ID0gc2VsZi5wb3N0X3RvX3NlcnZlcihkYXRhKQotICAgICAgICAgICAgcHJpbnQgJ1NlcnZlciByZXNwb25zZSAoJXMpOiAlcyclKGNvZGUsIHJlc3VsdCkKKyAgICAgICAgICAgIGxvZy5pbmZvKCdTZXJ2ZXIgcmVzcG9uc2UgKCVzKTogJXMnICUgKGNvZGUsIHJlc3VsdCkpCiAKICAgICBkZWYgYnVpbGRfcG9zdF9kYXRhKHNlbGYsIGFjdGlvbik6CiAgICAgICAgICMgZmlndXJlIHRoZSBkYXRhIHRvIHNlbmQgLSB0aGUgbWV0YWRhdGEgcGx1cyBzb21lIGFkZGl0aW9uYWwKQEAgLTI0OSw4ICsyNTIsMTAgQEAKICAgICBkZWYgcG9zdF90b19zZXJ2ZXIoc2VsZiwgZGF0YSwgYXV0aD1Ob25lKToKICAgICAgICAgJycnIFBvc3QgYSBxdWVyeSB0byB0aGUgc2VydmVyLCBhbmQgcmV0dXJuIGEgc3RyaW5nIHJlc3BvbnNlLgogICAgICAgICAnJycKLSAgICAgICAgc2VsZi5hbm5vdW5jZSgnUmVnaXN0ZXJpbmcgJXMgdG8gJXMnICUgKGRhdGFbJ25hbWUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwb3NpdG9yeSksIGxvZy5JTkZPKQorICAgICAgICBpZiAnbmFtZScgaW4gZGF0YToKKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJ1JlZ2lzdGVyaW5nICVzIHRvICVzJyAlIChkYXRhWyduYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9zaXRvcnkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLklORk8pCiAgICAgICAgICMgQnVpbGQgdXAgdGhlIE1JTUUgcGF5bG9hZCBmb3IgdGhlIHVybGxpYjIgUE9TVCBkYXRhCiAgICAgICAgIGJvdW5kYXJ5ID0gJy0tLS0tLS0tLS0tLS0tR0hTS0ZKRExHRFM3NTQzRkpLTEZIUkU3NTY0Mjc1Njc0MzI1NCcKICAgICAgICAgc2VwX2JvdW5kYXJ5ID0gJ1xuLS0nICsgYm91bmRhcnkKQEAgLTI5Niw1ICszMDEsNyBAQAogICAgICAgICAgICAgICAgIGRhdGEgPSByZXN1bHQucmVhZCgpCiAgICAgICAgICAgICByZXN1bHQgPSAyMDAsICdPSycKICAgICAgICAgaWYgc2VsZi5zaG93X3Jlc3BvbnNlOgotICAgICAgICAgICAgcHJpbnQgJy0nKjc1LCBkYXRhLCAnLScqNzUKKyAgICAgICAgICAgIGRhc2hlcyA9ICctJyAqIDc1CisgICAgICAgICAgICBzZWxmLmFubm91bmNlKCclcyVzJXMnICUgKGRhc2hlcywgZGF0YSwgZGFzaGVzKSkKKwogICAgICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkKaW5kZXggYTM2NmQxZS4uMGMzYjBiNSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weQpAQCAtMiw0MSArMiw0NyBAQAogCiBJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ3NkaXN0JyBjb21tYW5kIChjcmVhdGUgYSBzb3VyY2UgZGlzdHJpYnV0aW9uKS4iIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBvcywgc3RyaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzdHJpbmcKIGltcG9ydCBzeXMKLWZyb20gdHlwZXMgaW1wb3J0ICoKIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgorZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgorCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgZGlyX3V0aWwsIGRlcF91dGlsLCBmaWxlX3V0aWwsIGFyY2hpdmVfdXRpbAogZnJvbSBkaXN0dXRpbHMudGV4dF9maWxlIGltcG9ydCBUZXh0RmlsZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IChEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCBEaXN0dXRpbHNPcHRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3R1dGlsc1RlbXBsYXRlRXJyb3IpCiBmcm9tIGRpc3R1dGlscy5maWxlbGlzdCBpbXBvcnQgRmlsZUxpc3QKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKK2Zyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGNvbnZlcnRfcGF0aAogCi0KLWRlZiBzaG93X2Zvcm1hdHMgKCk6CitkZWYgc2hvd19mb3JtYXRzKCk6CiAgICAgIiIiUHJpbnQgYWxsIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlICdmb3JtYXRzJyBvcHRpb24gKHVzZWQgYnkKICAgICB0aGUgIi0taGVscC1mb3JtYXRzIiBjb21tYW5kLWxpbmUgb3B0aW9uKS4KICAgICAiIiIKICAgICBmcm9tIGRpc3R1dGlscy5mYW5jeV9nZXRvcHQgaW1wb3J0IEZhbmN5R2V0b3B0CiAgICAgZnJvbSBkaXN0dXRpbHMuYXJjaGl2ZV91dGlsIGltcG9ydCBBUkNISVZFX0ZPUk1BVFMKLSAgICBmb3JtYXRzPVtdCisgICAgZm9ybWF0cyA9IFtdCiAgICAgZm9yIGZvcm1hdCBpbiBBUkNISVZFX0ZPUk1BVFMua2V5cygpOgogICAgICAgICBmb3JtYXRzLmFwcGVuZCgoImZvcm1hdHM9IiArIGZvcm1hdCwgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEFSQ0hJVkVfRk9STUFUU1tmb3JtYXRdWzJdKSkKICAgICBmb3JtYXRzLnNvcnQoKQotICAgIHByZXR0eV9wcmludGVyID0gRmFuY3lHZXRvcHQoZm9ybWF0cykKLSAgICBwcmV0dHlfcHJpbnRlci5wcmludF9oZWxwKAorICAgIEZhbmN5R2V0b3B0KGZvcm1hdHMpLnByaW50X2hlbHAoCiAgICAgICAgICJMaXN0IG9mIGF2YWlsYWJsZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvcm1hdHM6IikKIAotY2xhc3Mgc2Rpc3QgKENvbW1hbmQpOgorY2xhc3Mgc2Rpc3QoQ29tbWFuZCk6CiAKICAgICBkZXNjcmlwdGlvbiA9ICJjcmVhdGUgYSBzb3VyY2UgZGlzdHJpYnV0aW9uICh0YXJiYWxsLCB6aXAgZmlsZSwgZXRjLikiCiAKKyAgICBkZWYgY2hlY2tpbmdfbWV0YWRhdGEoc2VsZik6CisgICAgICAgICIiIkNhbGxhYmxlIHVzZWQgZm9yIHRoZSBjaGVjayBzdWItY29tbWFuZC4KKworICAgICAgICBQbGFjZWQgaGVyZSBzbyB1c2VyX29wdGlvbnMgY2FuIHZpZXcgaXQiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYubWV0YWRhdGFfY2hlY2sKKwogICAgIHVzZXJfb3B0aW9ucyA9IFsKICAgICAgICAgKCd0ZW1wbGF0ZT0nLCAndCcsCiAgICAgICAgICAibmFtZSBvZiBtYW5pZmVzdCB0ZW1wbGF0ZSBmaWxlIFtkZWZhdWx0OiBNQU5JRkVTVC5pbl0iKSwKQEAgLTU3LDcgKzYzLDggQEAKICAgICAgICAgICJqdXN0IHJlZ2VuZXJhdGUgdGhlIG1hbmlmZXN0IGFuZCB0aGVuIHN0b3AgIgogICAgICAgICAgIihpbXBsaWVzIC0tZm9yY2UtbWFuaWZlc3QpIiksCiAgICAgICAgICgnZm9yY2UtbWFuaWZlc3QnLCAnZicsCi0gICAgICAgICAiZm9yY2libHkgcmVnZW5lcmF0ZSB0aGUgbWFuaWZlc3QgYW5kIGNhcnJ5IG9uIGFzIHVzdWFsIiksCisgICAgICAgICAiZm9yY2libHkgcmVnZW5lcmF0ZSB0aGUgbWFuaWZlc3QgYW5kIGNhcnJ5IG9uIGFzIHVzdWFsLiAiCisgICAgICAgICAiRGVwcmVjYXRlZDogbm93IHRoZSBtYW5pZmVzdCBpcyBhbHdheXMgcmVnZW5lcmF0ZWQuIiksCiAgICAgICAgICgnZm9ybWF0cz0nLCBOb25lLAogICAgICAgICAgImZvcm1hdHMgZm9yIHNvdXJjZSBkaXN0cmlidXRpb24gKGNvbW1hLXNlcGFyYXRlZCBsaXN0KSIpLAogICAgICAgICAoJ2tlZXAtdGVtcCcsICdrJywKQEAgLTY2LDExICs3MywxOCBAQAogICAgICAgICAoJ2Rpc3QtZGlyPScsICdkJywKICAgICAgICAgICJkaXJlY3RvcnkgdG8gcHV0IHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGFyY2hpdmUocykgaW4gIgogICAgICAgICAgIltkZWZhdWx0OiBkaXN0XSIpLAorICAgICAgICAoJ21ldGFkYXRhLWNoZWNrJywgTm9uZSwKKyAgICAgICAgICJFbnN1cmUgdGhhdCBhbGwgcmVxdWlyZWQgZWxlbWVudHMgb2YgbWV0YS1kYXRhICIKKyAgICAgICAgICJhcmUgc3VwcGxpZWQuIFdhcm4gaWYgYW55IG1pc3NpbmcuIFtkZWZhdWx0XSIpLAorICAgICAgICAoJ293bmVyPScsICd1JywKKyAgICAgICAgICJPd25lciBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIFtkZWZhdWx0OiBjdXJyZW50IHVzZXJdIiksCisgICAgICAgICgnZ3JvdXA9JywgJ2cnLAorICAgICAgICAgIkdyb3VwIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUgW2RlZmF1bHQ6IGN1cnJlbnQgZ3JvdXBdIiksCiAgICAgICAgIF0KIAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsndXNlLWRlZmF1bHRzJywgJ3BydW5lJywKICAgICAgICAgICAgICAgICAgICAgICAgJ21hbmlmZXN0LW9ubHknLCAnZm9yY2UtbWFuaWZlc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAna2VlcC10ZW1wJ10KKyAgICAgICAgICAgICAgICAgICAgICAgJ2tlZXAtdGVtcCcsICdtZXRhZGF0YS1jaGVjayddCiAKICAgICBoZWxwX29wdGlvbnMgPSBbCiAgICAgICAgICgnaGVscC1mb3JtYXRzJywgTm9uZSwKQEAgLTgwLDEwICs5NCwxMiBAQAogICAgIG5lZ2F0aXZlX29wdCA9IHsnbm8tZGVmYXVsdHMnOiAndXNlLWRlZmF1bHRzJywKICAgICAgICAgICAgICAgICAgICAgJ25vLXBydW5lJzogJ3BydW5lJyB9CiAKLSAgICBkZWZhdWx0X2Zvcm1hdCA9IHsgJ3Bvc2l4JzogJ2d6dGFyJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcgfQorICAgIGRlZmF1bHRfZm9ybWF0ID0geydwb3NpeCc6ICdnenRhcicsCisgICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcgfQogCi0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgc3ViX2NvbW1hbmRzID0gWygnY2hlY2snLCBjaGVja2luZ19tZXRhZGF0YSldCisKKyAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICAjICd0ZW1wbGF0ZScgYW5kICdtYW5pZmVzdCcgYXJlLCByZXNwZWN0aXZlbHksIHRoZSBuYW1lcyBvZgogICAgICAgICAjIHRoZSBtYW5pZmVzdCB0ZW1wbGF0ZSBhbmQgbWFuaWZlc3QgZmlsZS4KICAgICAgICAgc2VsZi50ZW1wbGF0ZSA9IE5vbmUKQEAgLTEwMiw5ICsxMTgsMTEgQEAKICAgICAgICAgc2VsZi5kaXN0X2RpciA9IE5vbmUKIAogICAgICAgICBzZWxmLmFyY2hpdmVfZmlsZXMgPSBOb25lCisgICAgICAgIHNlbGYubWV0YWRhdGFfY2hlY2sgPSAxCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCiAKLQotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zIChzZWxmKToKKyAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5tYW5pZmVzdCBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5tYW5pZmVzdCA9ICJNQU5JRkVTVCIKICAgICAgICAgaWYgc2VsZi50ZW1wbGF0ZSBpcyBOb25lOgpAQCAtMTI3LDE2ICsxNDUsMTQgQEAKICAgICAgICAgaWYgc2VsZi5kaXN0X2RpciBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5kaXN0X2RpciA9ICJkaXN0IgogCi0KLSAgICBkZWYgcnVuIChzZWxmKToKLQorICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICMgJ2ZpbGVsaXN0JyBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IHdpbGwgbWFrZSB1cCB0aGUKICAgICAgICAgIyBtYW5pZmVzdAogICAgICAgICBzZWxmLmZpbGVsaXN0ID0gRmlsZUxpc3QoKQogCi0gICAgICAgICMgRW5zdXJlIHRoYXQgYWxsIHJlcXVpcmVkIG1ldGEtZGF0YSBpcyBnaXZlbjsgd2FybiBpZiBub3QgKGJ1dAotICAgICAgICAjIGRvbid0IGRpZSwgaXQncyBub3QgKnRoYXQqIHNlcmlvdXMhKQotICAgICAgICBzZWxmLmNoZWNrX21ldGFkYXRhKCkKKyAgICAgICAgIyBSdW4gc3ViIGNvbW1hbmRzCisgICAgICAgIGZvciBjbWRfbmFtZSBpbiBzZWxmLmdldF9zdWJfY29tbWFuZHMoKToKKyAgICAgICAgICAgIHNlbGYucnVuX2NvbW1hbmQoY21kX25hbWUpCiAKICAgICAgICAgIyBEbyB3aGF0ZXZlciBpdCB0YWtlcyB0byBnZXQgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcHJvY2VzcwogICAgICAgICAjIChwcm9jZXNzIHRoZSBtYW5pZmVzdCB0ZW1wbGF0ZSwgcmVhZCBhbiBleGlzdGluZyBtYW5pZmVzdCwKQEAgLTE1MSwxMTYgKzE2Nyw1NyBAQAogICAgICAgICAjIG9yIHppcGZpbGUsIG9yIHdoYXRldmVyLgogICAgICAgICBzZWxmLm1ha2VfZGlzdHJpYnV0aW9uKCkKIAorICAgIGRlZiBjaGVja19tZXRhZGF0YShzZWxmKToKKyAgICAgICAgIiIiRGVwcmVjYXRlZCBBUEkuIiIiCisgICAgICAgIHdhcm4oImRpc3R1dGlscy5jb21tYW5kLnNkaXN0LmNoZWNrX21ldGFkYXRhIGlzIGRlcHJlY2F0ZWQsIFwKKyAgICAgICAgICAgICAgdXNlIHRoZSBjaGVjayBjb21tYW5kIGluc3RlYWQiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBjaGVjayA9IHNlbGYuZGlzdHJpYnV0aW9uLmdldF9jb21tYW5kX29iaignY2hlY2snKQorICAgICAgICBjaGVjay5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY2hlY2sucnVuKCkKIAotICAgIGRlZiBjaGVja19tZXRhZGF0YSAoc2VsZik6Ci0gICAgICAgICIiIkVuc3VyZSB0aGF0IGFsbCByZXF1aXJlZCBlbGVtZW50cyBvZiBtZXRhLWRhdGEgKG5hbWUsIHZlcnNpb24sCi0gICAgICAgIFVSTCwgKGF1dGhvciBhbmQgYXV0aG9yX2VtYWlsKSBvciAobWFpbnRhaW5lciBhbmQKLSAgICAgICAgbWFpbnRhaW5lcl9lbWFpbCkpIGFyZSBzdXBwbGllZCBieSB0aGUgRGlzdHJpYnV0aW9uIG9iamVjdDsgd2FybiBpZgotICAgICAgICBhbnkgYXJlIG1pc3NpbmcuCi0gICAgICAgICIiIgotICAgICAgICBtZXRhZGF0YSA9IHNlbGYuZGlzdHJpYnV0aW9uLm1ldGFkYXRhCi0KLSAgICAgICAgbWlzc2luZyA9IFtdCi0gICAgICAgIGZvciBhdHRyIGluICgnbmFtZScsICd2ZXJzaW9uJywgJ3VybCcpOgotICAgICAgICAgICAgaWYgbm90IChoYXNhdHRyKG1ldGFkYXRhLCBhdHRyKSBhbmQgZ2V0YXR0cihtZXRhZGF0YSwgYXR0cikpOgotICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKGF0dHIpCi0KLSAgICAgICAgaWYgbWlzc2luZzoKLSAgICAgICAgICAgIHNlbGYud2FybigibWlzc2luZyByZXF1aXJlZCBtZXRhLWRhdGE6ICIgKwotICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5qb2luKG1pc3NpbmcsICIsICIpKQotCi0gICAgICAgIGlmIG1ldGFkYXRhLmF1dGhvcjoKLSAgICAgICAgICAgIGlmIG5vdCBtZXRhZGF0YS5hdXRob3JfZW1haWw6Ci0gICAgICAgICAgICAgICAgc2VsZi53YXJuKCJtaXNzaW5nIG1ldGEtZGF0YTogaWYgJ2F1dGhvcicgc3VwcGxpZWQsICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAiJ2F1dGhvcl9lbWFpbCcgbXVzdCBiZSBzdXBwbGllZCB0b28iKQotICAgICAgICBlbGlmIG1ldGFkYXRhLm1haW50YWluZXI6Ci0gICAgICAgICAgICBpZiBub3QgbWV0YWRhdGEubWFpbnRhaW5lcl9lbWFpbDoKLSAgICAgICAgICAgICAgICBzZWxmLndhcm4oIm1pc3NpbmcgbWV0YS1kYXRhOiBpZiAnbWFpbnRhaW5lcicgc3VwcGxpZWQsICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAiJ21haW50YWluZXJfZW1haWwnIG11c3QgYmUgc3VwcGxpZWQgdG9vIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYud2FybigibWlzc2luZyBtZXRhLWRhdGE6IGVpdGhlciAoYXV0aG9yIGFuZCBhdXRob3JfZW1haWwpICIgKwotICAgICAgICAgICAgICAgICAgICAgICJvciAobWFpbnRhaW5lciBhbmQgbWFpbnRhaW5lcl9lbWFpbCkgIiArCi0gICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc3VwcGxpZWQiKQotCi0gICAgIyBjaGVja19tZXRhZGF0YSAoKQotCi0KLSAgICBkZWYgZ2V0X2ZpbGVfbGlzdCAoc2VsZik6CisgICAgZGVmIGdldF9maWxlX2xpc3Qoc2VsZik6CiAgICAgICAgICIiIkZpZ3VyZSBvdXQgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gaW5jbHVkZSBpbiB0aGUgc291cmNlCiAgICAgICAgIGRpc3RyaWJ1dGlvbiwgYW5kIHB1dCBpdCBpbiAnc2VsZi5maWxlbGlzdCcuICBUaGlzIG1pZ2h0IGludm9sdmUKICAgICAgICAgcmVhZGluZyB0aGUgbWFuaWZlc3QgdGVtcGxhdGUgKGFuZCB3cml0aW5nIHRoZSBtYW5pZmVzdCksIG9yIGp1c3QKICAgICAgICAgcmVhZGluZyB0aGUgbWFuaWZlc3QsIG9yIGp1c3QgdXNpbmcgdGhlIGRlZmF1bHQgZmlsZSBzZXQgLS0gaXQgYWxsCi0gICAgICAgIGRlcGVuZHMgb24gdGhlIHVzZXIncyBvcHRpb25zIGFuZCB0aGUgc3RhdGUgb2YgdGhlIGZpbGVzeXN0ZW0uCisgICAgICAgIGRlcGVuZHMgb24gdGhlIHVzZXIncyBvcHRpb25zLgogICAgICAgICAiIiIKLQotICAgICAgICAjIElmIHdlIGhhdmUgYSBtYW5pZmVzdCB0ZW1wbGF0ZSwgc2VlIGlmIGl0J3MgbmV3ZXIgdGhhbiB0aGUKLSAgICAgICAgIyBtYW5pZmVzdDsgaWYgc28sIHdlJ2xsIHJlZ2VuZXJhdGUgdGhlIG1hbmlmZXN0LgorICAgICAgICAjIG5ldyBiZWhhdmlvcjoKKyAgICAgICAgIyB0aGUgZmlsZSBsaXN0IGlzIHJlY2FsY3VsYXRlZCBldmVyeXRpbWUgYmVjYXVzZQorICAgICAgICAjIGV2ZW4gaWYgTUFOSUZFU1QuaW4gb3Igc2V0dXAucHkgYXJlIG5vdCBjaGFuZ2VkCisgICAgICAgICMgdGhlIHVzZXIgbWlnaHQgaGF2ZSBhZGRlZCBzb21lIGZpbGVzIGluIHRoZSB0cmVlIHRoYXQKKyAgICAgICAgIyBuZWVkIHRvIGJlIGluY2x1ZGVkLgorICAgICAgICAjCisgICAgICAgICMgIFRoaXMgbWFrZXMgLS1mb3JjZSB0aGUgZGVmYXVsdCBhbmQgb25seSBiZWhhdmlvci4KICAgICAgICAgdGVtcGxhdGVfZXhpc3RzID0gb3MucGF0aC5pc2ZpbGUoc2VsZi50ZW1wbGF0ZSkKKyAgICAgICAgaWYgbm90IHRlbXBsYXRlX2V4aXN0czoKKyAgICAgICAgICAgIHNlbGYud2FybigoIm1hbmlmZXN0IHRlbXBsYXRlICclcycgZG9lcyBub3QgZXhpc3QgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAiKHVzaW5nIGRlZmF1bHQgZmlsZSBsaXN0KSIpICUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVtcGxhdGUpCisgICAgICAgIHNlbGYuZmlsZWxpc3QuZmluZGFsbCgpCisKKyAgICAgICAgaWYgc2VsZi51c2VfZGVmYXVsdHM6CisgICAgICAgICAgICBzZWxmLmFkZF9kZWZhdWx0cygpCisKICAgICAgICAgaWYgdGVtcGxhdGVfZXhpc3RzOgotICAgICAgICAgICAgdGVtcGxhdGVfbmV3ZXIgPSBkZXBfdXRpbC5uZXdlcihzZWxmLnRlbXBsYXRlLCBzZWxmLm1hbmlmZXN0KQorICAgICAgICAgICAgc2VsZi5yZWFkX3RlbXBsYXRlKCkKIAotICAgICAgICAjIFRoZSBjb250ZW50cyBvZiB0aGUgbWFuaWZlc3QgZmlsZSBhbG1vc3QgY2VydGFpbmx5IGRlcGVuZCBvbiB0aGUKLSAgICAgICAgIyBzZXR1cCBzY3JpcHQgYXMgd2VsbCBhcyB0aGUgbWFuaWZlc3QgdGVtcGxhdGUgLS0gc28gaWYgdGhlIHNldHVwCi0gICAgICAgICMgc2NyaXB0IGlzIG5ld2VyIHRoYW4gdGhlIG1hbmlmZXN0LCB3ZSdsbCByZWdlbmVyYXRlIHRoZSBtYW5pZmVzdAotICAgICAgICAjIGZyb20gdGhlIHRlbXBsYXRlLiAgKFdlbGwsIG5vdCBxdWl0ZTogaWYgd2UgYWxyZWFkeSBoYXZlIGEKLSAgICAgICAgIyBtYW5pZmVzdCwgYnV0IHRoZXJlJ3Mgbm8gdGVtcGxhdGUgLS0gd2hpY2ggd2lsbCBoYXBwZW4gaWYgdGhlCi0gICAgICAgICMgZGV2ZWxvcGVyIGVsZWN0cyB0byBnZW5lcmF0ZSBhIG1hbmlmZXN0IHNvbWUgb3RoZXIgd2F5IC0tIHRoZW4gd2UKLSAgICAgICAgIyBjYW4ndCByZWdlbmVyYXRlIHRoZSBtYW5pZmVzdCwgc28gd2UgZG9uJ3QuKQotICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJjaGVja2luZyBpZiAlcyBuZXdlciB0aGFuICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZGlzdHJpYnV0aW9uLnNjcmlwdF9uYW1lLCBzZWxmLm1hbmlmZXN0KSkKLSAgICAgICAgc2V0dXBfbmV3ZXIgPSBkZXBfdXRpbC5uZXdlcihzZWxmLmRpc3RyaWJ1dGlvbi5zY3JpcHRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hbmlmZXN0KQorICAgICAgICBpZiBzZWxmLnBydW5lOgorICAgICAgICAgICAgc2VsZi5wcnVuZV9maWxlX2xpc3QoKQogCi0gICAgICAgICMgY2FzZXM6Ci0gICAgICAgICMgICAxKSBubyBtYW5pZmVzdCwgdGVtcGxhdGUgZXhpc3RzOiBnZW5lcmF0ZSBtYW5pZmVzdAotICAgICAgICAjICAgICAgKGNvdmVyZWQgYnkgMmE6IG5vIG1hbmlmZXN0ID09IHRlbXBsYXRlIG5ld2VyKQotICAgICAgICAjICAgMikgbWFuaWZlc3QgJiB0ZW1wbGF0ZSBleGlzdDoKLSAgICAgICAgIyAgICAgIDJhKSB0ZW1wbGF0ZSBvciBzZXR1cCBzY3JpcHQgbmV3ZXIgdGhhbiBtYW5pZmVzdDoKLSAgICAgICAgIyAgICAgICAgICByZWdlbmVyYXRlIG1hbmlmZXN0Ci0gICAgICAgICMgICAgICAyYikgbWFuaWZlc3QgbmV3ZXIgdGhhbiBib3RoOgotICAgICAgICAjICAgICAgICAgIGRvIG5vdGhpbmcgKHVubGVzcyAtLWZvcmNlIG9yIC0tbWFuaWZlc3Qtb25seSkKLSAgICAgICAgIyAgIDMpIG1hbmlmZXN0IGV4aXN0cywgbm8gdGVtcGxhdGU6Ci0gICAgICAgICMgICAgICBkbyBub3RoaW5nICh1bmxlc3MgLS1mb3JjZSBvciAtLW1hbmlmZXN0LW9ubHkpCi0gICAgICAgICMgICA0KSBubyBtYW5pZmVzdCwgbm8gdGVtcGxhdGU6IGdlbmVyYXRlIHcvIHdhcm5pbmcgKCJkZWZhdWx0cyBvbmx5IikKKyAgICAgICAgc2VsZi5maWxlbGlzdC5zb3J0KCkKKyAgICAgICAgc2VsZi5maWxlbGlzdC5yZW1vdmVfZHVwbGljYXRlcygpCisgICAgICAgIHNlbGYud3JpdGVfbWFuaWZlc3QoKQogCi0gICAgICAgIG1hbmlmZXN0X291dG9mZGF0ZSA9ICh0ZW1wbGF0ZV9leGlzdHMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVtcGxhdGVfbmV3ZXIgb3Igc2V0dXBfbmV3ZXIpKQotICAgICAgICBmb3JjZV9yZWdlbiA9IHNlbGYuZm9yY2VfbWFuaWZlc3Qgb3Igc2VsZi5tYW5pZmVzdF9vbmx5Ci0gICAgICAgIG1hbmlmZXN0X2V4aXN0cyA9IG9zLnBhdGguaXNmaWxlKHNlbGYubWFuaWZlc3QpCi0gICAgICAgIG5laXRoZXJfZXhpc3RzID0gKG5vdCB0ZW1wbGF0ZV9leGlzdHMgYW5kIG5vdCBtYW5pZmVzdF9leGlzdHMpCi0KLSAgICAgICAgIyBSZWdlbmVyYXRlIHRoZSBtYW5pZmVzdCBpZiBuZWNlc3NhcnkgKG9yIGlmIGV4cGxpY2l0bHkgdG9sZCB0bykKLSAgICAgICAgaWYgbWFuaWZlc3Rfb3V0b2ZkYXRlIG9yIG5laXRoZXJfZXhpc3RzIG9yIGZvcmNlX3JlZ2VuOgotICAgICAgICAgICAgaWYgbm90IHRlbXBsYXRlX2V4aXN0czoKLSAgICAgICAgICAgICAgICBzZWxmLndhcm4oKCJtYW5pZmVzdCB0ZW1wbGF0ZSAnJXMnIGRvZXMgbm90IGV4aXN0ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIih1c2luZyBkZWZhdWx0IGZpbGUgbGlzdCkiKSAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVtcGxhdGUpCi0gICAgICAgICAgICBzZWxmLmZpbGVsaXN0LmZpbmRhbGwoKQotCi0gICAgICAgICAgICBpZiBzZWxmLnVzZV9kZWZhdWx0czoKLSAgICAgICAgICAgICAgICBzZWxmLmFkZF9kZWZhdWx0cygpCi0gICAgICAgICAgICBpZiB0ZW1wbGF0ZV9leGlzdHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5yZWFkX3RlbXBsYXRlKCkKLSAgICAgICAgICAgIGlmIHNlbGYucHJ1bmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5wcnVuZV9maWxlX2xpc3QoKQotCi0gICAgICAgICAgICBzZWxmLmZpbGVsaXN0LnNvcnQoKQotICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5yZW1vdmVfZHVwbGljYXRlcygpCi0gICAgICAgICAgICBzZWxmLndyaXRlX21hbmlmZXN0KCkKLQotICAgICAgICAjIERvbid0IHJlZ2VuZXJhdGUgdGhlIG1hbmlmZXN0LCBqdXN0IHJlYWQgaXQgaW4uCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnJlYWRfbWFuaWZlc3QoKQotCi0gICAgIyBnZXRfZmlsZV9saXN0ICgpCi0KLQotICAgIGRlZiBhZGRfZGVmYXVsdHMgKHNlbGYpOgorICAgIGRlZiBhZGRfZGVmYXVsdHMoc2VsZik6CiAgICAgICAgICIiIkFkZCBhbGwgdGhlIGRlZmF1bHQgZmlsZXMgdG8gc2VsZi5maWxlbGlzdDoKICAgICAgICAgICAtIFJFQURNRSBvciBSRUFETUUudHh0CiAgICAgICAgICAgLSBzZXR1cC5weQogICAgICAgICAgIC0gdGVzdC90ZXN0Ki5weQogICAgICAgICAgIC0gYWxsIHB1cmUgUHl0aG9uIG1vZHVsZXMgbWVudGlvbmVkIGluIHNldHVwIHNjcmlwdAorICAgICAgICAgIC0gYWxsIGZpbGVzIHBvaW50ZWQgYnkgcGFja2FnZV9kYXRhIChidWlsZF9weSkKKyAgICAgICAgICAtIGFsbCBmaWxlcyBkZWZpbmVkIGluIGRhdGFfZmlsZXMuCisgICAgICAgICAgLSBhbGwgZmlsZXMgZGVmaW5lZCBhcyBzY3JpcHRzLgogICAgICAgICAgIC0gYWxsIEMgc291cmNlcyBsaXN0ZWQgYXMgcGFydCBvZiBleHRlbnNpb25zIG9yIEMgbGlicmFyaWVzCiAgICAgICAgICAgICBpbiB0aGUgc2V0dXAgc2NyaXB0IChkb2Vzbid0IGNhdGNoIEMgaGVhZGVycyEpCiAgICAgICAgIFdhcm5zIGlmIChSRUFETUUgb3IgUkVBRE1FLnR4dCkgb3Igc2V0dXAucHkgYXJlIG1pc3Npbmc7IGV2ZXJ5dGhpbmcKQEAgLTI2OSw3ICsyMjYsNyBAQAogCiAgICAgICAgIHN0YW5kYXJkcyA9IFsoJ1JFQURNRScsICdSRUFETUUudHh0JyksIHNlbGYuZGlzdHJpYnV0aW9uLnNjcmlwdF9uYW1lXQogICAgICAgICBmb3IgZm4gaW4gc3RhbmRhcmRzOgotICAgICAgICAgICAgaWYgdHlwZShmbikgaXMgVHVwbGVUeXBlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmbiwgdHVwbGUpOgogICAgICAgICAgICAgICAgIGFsdHMgPSBmbgogICAgICAgICAgICAgICAgIGdvdF9pdCA9IDAKICAgICAgICAgICAgICAgICBmb3IgZm4gaW4gYWx0czoKQEAgLTI5MywxMCArMjUwLDM1IEBACiAgICAgICAgICAgICBpZiBmaWxlczoKICAgICAgICAgICAgICAgICBzZWxmLmZpbGVsaXN0LmV4dGVuZChmaWxlcykKIAorICAgICAgICAjIGJ1aWxkX3B5IGlzIHVzZWQgdG8gZ2V0OgorICAgICAgICAjICAtIHB5dGhvbiBtb2R1bGVzCisgICAgICAgICMgIC0gZmlsZXMgZGVmaW5lZCBpbiBwYWNrYWdlX2RhdGEKKyAgICAgICAgYnVpbGRfcHkgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGRfcHknKQorCisgICAgICAgICMgZ2V0dGluZyBweXRob24gZmlsZXMKICAgICAgICAgaWYgc2VsZi5kaXN0cmlidXRpb24uaGFzX3B1cmVfbW9kdWxlcygpOgotICAgICAgICAgICAgYnVpbGRfcHkgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGRfcHknKQogICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5leHRlbmQoYnVpbGRfcHkuZ2V0X3NvdXJjZV9maWxlcygpKQogCisgICAgICAgICMgZ2V0dGluZyBwYWNrYWdlX2RhdGEgZmlsZXMKKyAgICAgICAgIyAoY29tcHV0ZWQgaW4gYnVpbGRfcHkuZGF0YV9maWxlcyBieSBidWlsZF9weS5maW5hbGl6ZV9vcHRpb25zKQorICAgICAgICBmb3IgcGtnLCBzcmNfZGlyLCBidWlsZF9kaXIsIGZpbGVuYW1lcyBpbiBidWlsZF9weS5kYXRhX2ZpbGVzOgorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZChvcy5wYXRoLmpvaW4oc3JjX2RpciwgZmlsZW5hbWUpKQorCisgICAgICAgICMgZ2V0dGluZyBkaXN0cmlidXRpb24uZGF0YV9maWxlcworICAgICAgICBpZiBzZWxmLmRpc3RyaWJ1dGlvbi5oYXNfZGF0YV9maWxlcygpOgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5kaXN0cmlidXRpb24uZGF0YV9maWxlczoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIHN0cik6ICMgcGxhaW4gZmlsZQorICAgICAgICAgICAgICAgICAgICBpdGVtID0gY29udmVydF9wYXRoKGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGl0ZW0pOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgICAgICBlbHNlOiAgICAjIGEgKGRpcm5hbWUsIGZpbGVuYW1lcykgdHVwbGUKKyAgICAgICAgICAgICAgICAgICAgZGlybmFtZSwgZmlsZW5hbWVzID0gaXRlbQorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBmID0gY29udmVydF9wYXRoKGYpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZChmKQorCiAgICAgICAgIGlmIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19leHRfbW9kdWxlcygpOgogICAgICAgICAgICAgYnVpbGRfZXh0ID0gc2VsZi5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2J1aWxkX2V4dCcpCiAgICAgICAgICAgICBzZWxmLmZpbGVsaXN0LmV4dGVuZChidWlsZF9leHQuZ2V0X3NvdXJjZV9maWxlcygpKQpAQCAtMzA5LDEwICsyOTEsNyBAQAogICAgICAgICAgICAgYnVpbGRfc2NyaXB0cyA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZF9zY3JpcHRzJykKICAgICAgICAgICAgIHNlbGYuZmlsZWxpc3QuZXh0ZW5kKGJ1aWxkX3NjcmlwdHMuZ2V0X3NvdXJjZV9maWxlcygpKQogCi0gICAgIyBhZGRfZGVmYXVsdHMgKCkKLQotCi0gICAgZGVmIHJlYWRfdGVtcGxhdGUgKHNlbGYpOgorICAgIGRlZiByZWFkX3RlbXBsYXRlKHNlbGYpOgogICAgICAgICAiIiJSZWFkIGFuZCBwYXJzZSBtYW5pZmVzdCB0ZW1wbGF0ZSBmaWxlIG5hbWVkIGJ5IHNlbGYudGVtcGxhdGUuCiAKICAgICAgICAgKHVzdWFsbHkgIk1BTklGRVNULmluIikgVGhlIHBhcnNpbmcgYW5kIHByb2Nlc3NpbmcgaXMgZG9uZSBieQpAQCAtMzM5LDEwICszMTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5jdXJyZW50X2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZykpCiAKLSAgICAjIHJlYWRfdGVtcGxhdGUgKCkKLQotCi0gICAgZGVmIHBydW5lX2ZpbGVfbGlzdCAoc2VsZik6CisgICAgZGVmIHBydW5lX2ZpbGVfbGlzdChzZWxmKToKICAgICAgICAgIiIiUHJ1bmUgb2ZmIGJyYW5jaGVzIHRoYXQgbWlnaHQgc2xpcCBpbnRvIHRoZSBmaWxlIGxpc3QgYXMgY3JlYXRlZAogICAgICAgICBieSAncmVhZF90ZW1wbGF0ZSgpJywgYnV0IHJlYWxseSBkb24ndCBiZWxvbmcgdGhlcmU6CiAgICAgICAgICAgKiB0aGUgYnVpbGQgdHJlZSAodHlwaWNhbGx5ICJidWlsZCIpCkBAIC0zNjgsMTkgKzM0NCwyOSBAQAogICAgICAgICB2Y3NfcHRybiA9IHInKF58JXMpKCVzKSglcykuKicgJSAoc2VwcywgJ3wnLmpvaW4odmNzX2RpcnMpLCBzZXBzKQogICAgICAgICBzZWxmLmZpbGVsaXN0LmV4Y2x1ZGVfcGF0dGVybih2Y3NfcHRybiwgaXNfcmVnZXg9MSkKIAotICAgIGRlZiB3cml0ZV9tYW5pZmVzdCAoc2VsZik6CisgICAgZGVmIHdyaXRlX21hbmlmZXN0KHNlbGYpOgogICAgICAgICAiIiJXcml0ZSB0aGUgZmlsZSBsaXN0IGluICdzZWxmLmZpbGVsaXN0JyAocHJlc3VtYWJseSBhcyBmaWxsZWQgaW4KICAgICAgICAgYnkgJ2FkZF9kZWZhdWx0cygpJyBhbmQgJ3JlYWRfdGVtcGxhdGUoKScpIHRvIHRoZSBtYW5pZmVzdCBmaWxlCiAgICAgICAgIG5hbWVkIGJ5ICdzZWxmLm1hbmlmZXN0Jy4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZXhlY3V0ZShmaWxlX3V0aWwud3JpdGVfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hbmlmZXN0LCBzZWxmLmZpbGVsaXN0LmZpbGVzKSwKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5tYW5pZmVzdCk6CisgICAgICAgICAgICBmcCA9IG9wZW4oc2VsZi5tYW5pZmVzdCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaXJzdF9saW5lID0gZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICAgICAgICAgIGlmIGZpcnN0X2xpbmUgIT0gJyMgZmlsZSBHRU5FUkFURUQgYnkgZGlzdHV0aWxzLCBkbyBOT1QgZWRpdFxuJzoKKyAgICAgICAgICAgICAgICBsb2cuaW5mbygibm90IHdyaXRpbmcgdG8gbWFudWFsbHkgbWFpbnRhaW5lZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm1hbmlmZXN0IGZpbGUgJyVzJyIgJSBzZWxmLm1hbmlmZXN0KQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLmZpbGVsaXN0LmZpbGVzWzpdCisgICAgICAgIGNvbnRlbnQuaW5zZXJ0KDAsICcjIGZpbGUgR0VORVJBVEVEIGJ5IGRpc3R1dGlscywgZG8gTk9UIGVkaXQnKQorICAgICAgICBzZWxmLmV4ZWN1dGUoZmlsZV91dGlsLndyaXRlX2ZpbGUsIChzZWxmLm1hbmlmZXN0LCBjb250ZW50KSwKICAgICAgICAgICAgICAgICAgICAgICJ3cml0aW5nIG1hbmlmZXN0IGZpbGUgJyVzJyIgJSBzZWxmLm1hbmlmZXN0KQogCi0gICAgIyB3cml0ZV9tYW5pZmVzdCAoKQotCi0KLSAgICBkZWYgcmVhZF9tYW5pZmVzdCAoc2VsZik6CisgICAgZGVmIHJlYWRfbWFuaWZlc3Qoc2VsZik6CiAgICAgICAgICIiIlJlYWQgdGhlIG1hbmlmZXN0IGZpbGUgKG5hbWVkIGJ5ICdzZWxmLm1hbmlmZXN0JykgYW5kIHVzZSBpdCB0bwogICAgICAgICBmaWxsIGluICdzZWxmLmZpbGVsaXN0JywgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gaW5jbHVkZSBpbiB0aGUgc291cmNlCiAgICAgICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTM5NiwxMCArMzgyLDcgQEAKICAgICAgICAgICAgIHNlbGYuZmlsZWxpc3QuYXBwZW5kKGxpbmUpCiAgICAgICAgIG1hbmlmZXN0LmNsb3NlKCkKIAotICAgICMgcmVhZF9tYW5pZmVzdCAoKQotCi0KLSAgICBkZWYgbWFrZV9yZWxlYXNlX3RyZWUgKHNlbGYsIGJhc2VfZGlyLCBmaWxlcyk6CisgICAgZGVmIG1ha2VfcmVsZWFzZV90cmVlKHNlbGYsIGJhc2VfZGlyLCBmaWxlcyk6CiAgICAgICAgICIiIkNyZWF0ZSB0aGUgZGlyZWN0b3J5IHRyZWUgdGhhdCB3aWxsIGJlY29tZSB0aGUgc291cmNlCiAgICAgICAgIGRpc3RyaWJ1dGlvbiBhcmNoaXZlLiAgQWxsIGRpcmVjdG9yaWVzIGltcGxpZWQgYnkgdGhlIGZpbGVuYW1lcyBpbgogICAgICAgICAnZmlsZXMnIGFyZSBjcmVhdGVkIHVuZGVyICdiYXNlX2RpcicsIGFuZCB0aGVuIHdlIGhhcmQgbGluayBvciBjb3B5CkBAIC00NDEsOSArNDI0LDcgQEAKIAogICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbi5tZXRhZGF0YS53cml0ZV9wa2dfaW5mbyhiYXNlX2RpcikKIAotICAgICMgbWFrZV9yZWxlYXNlX3RyZWUgKCkKLQotICAgIGRlZiBtYWtlX2Rpc3RyaWJ1dGlvbiAoc2VsZik6CisgICAgZGVmIG1ha2VfZGlzdHJpYnV0aW9uKHNlbGYpOgogICAgICAgICAiIiJDcmVhdGUgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24ocykuICBGaXJzdCwgd2UgY3JlYXRlIHRoZSByZWxlYXNlCiAgICAgICAgIHRyZWUgd2l0aCAnbWFrZV9yZWxlYXNlX3RyZWUoKSc7IHRoZW4sIHdlIGNyZWF0ZSBhbGwgcmVxdWlyZWQKICAgICAgICAgYXJjaGl2ZSBmaWxlcyAoYWNjb3JkaW5nIHRvICdzZWxmLmZvcm1hdHMnKSBmcm9tIHRoZSByZWxlYXNlIHRyZWUuCkBAIC00NjMsNyArNDQ0LDggQEAKICAgICAgICAgICAgIHNlbGYuZm9ybWF0cy5hcHBlbmQoc2VsZi5mb3JtYXRzLnBvcChzZWxmLmZvcm1hdHMuaW5kZXgoJ3RhcicpKSkKIAogICAgICAgICBmb3IgZm10IGluIHNlbGYuZm9ybWF0czoKLSAgICAgICAgICAgIGZpbGUgPSBzZWxmLm1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZtdCwgYmFzZV9kaXI9YmFzZV9kaXIpCisgICAgICAgICAgICBmaWxlID0gc2VsZi5tYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmbXQsIGJhc2VfZGlyPWJhc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPXNlbGYub3duZXIsIGdyb3VwPXNlbGYuZ3JvdXApCiAgICAgICAgICAgICBhcmNoaXZlX2ZpbGVzLmFwcGVuZChmaWxlKQogICAgICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24uZGlzdF9maWxlcy5hcHBlbmQoKCdzZGlzdCcsICcnLCBmaWxlKSkKIApAQCAtNDcyLDEwICs0NTQsOCBAQAogICAgICAgICBpZiBub3Qgc2VsZi5rZWVwX3RlbXA6CiAgICAgICAgICAgICBkaXJfdXRpbC5yZW1vdmVfdHJlZShiYXNlX2RpciwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKLSAgICBkZWYgZ2V0X2FyY2hpdmVfZmlsZXMgKHNlbGYpOgorICAgIGRlZiBnZXRfYXJjaGl2ZV9maWxlcyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGFyY2hpdmUgZmlsZXMgY3JlYXRlZCB3aGVuIHRoZSBjb21tYW5kCiAgICAgICAgIHdhcyBydW4sIG9yIE5vbmUgaWYgdGhlIGNvbW1hbmQgaGFzbid0IHJ1biB5ZXQuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5hcmNoaXZlX2ZpbGVzCi0KLSMgY2xhc3Mgc2Rpc3QKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CmluZGV4IDkzNzI3YWUuLmQwMTMzMzUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQpAQCAtMSwyMSArMSwxOSBAQAogIiIiZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkCiAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAndXBsb2FkJyBzdWJjb21tYW5kICh1cGxvYWQgcGFja2FnZSB0byBQeVBJKS4iIiIKLQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBQeVBJUkNDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLWZyb20gaGFzaGxpYiBpbXBvcnQgbWQ1CiBpbXBvcnQgb3MKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBwbGF0Zm9ybQotaW1wb3J0IGh0dHBsaWIKK2Zyb20gdXJsbGliMiBpbXBvcnQgdXJsb3BlbiwgUmVxdWVzdCwgSFRUUEVycm9yCiBmcm9tIGJhc2U2NCBpbXBvcnQgc3RhbmRhcmRfYjY0ZW5jb2RlCiBpbXBvcnQgdXJscGFyc2UKIGltcG9ydCBjU3RyaW5nSU8gYXMgU3RyaW5nSU8KLWZyb20gQ29uZmlnUGFyc2VyIGltcG9ydCBDb25maWdQYXJzZXIKK2Zyb20gaGFzaGxpYiBpbXBvcnQgbWQ1CiAKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzT3B0aW9uRXJyb3IKK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IFB5UElSQ0NvbW1hbmQKK2Zyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3bgorZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCiBjbGFzcyB1cGxvYWQoUHlQSVJDQ29tbWFuZCk6CiAKQEAgLTUwLDYgKzQ4LDExIEBACiAgICAgICAgICAgICBzZWxmLnJlcG9zaXRvcnkgPSBjb25maWdbJ3JlcG9zaXRvcnknXQogICAgICAgICAgICAgc2VsZi5yZWFsbSA9IGNvbmZpZ1sncmVhbG0nXQogCisgICAgICAgICMgZ2V0dGluZyB0aGUgcGFzc3dvcmQgZnJvbSB0aGUgZGlzdHJpYnV0aW9uCisgICAgICAgICMgaWYgcHJldmlvdXNseSBzZXQgYnkgdGhlIHJlZ2lzdGVyIGNvbW1hbmQKKyAgICAgICAgaWYgbm90IHNlbGYucGFzc3dvcmQgYW5kIHNlbGYuZGlzdHJpYnV0aW9uLnBhc3N3b3JkOgorICAgICAgICAgICAgc2VsZi5wYXNzd29yZCA9IHNlbGYuZGlzdHJpYnV0aW9uLnBhc3N3b3JkCisKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5kaXN0cmlidXRpb24uZGlzdF9maWxlczoKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yKCJObyBkaXN0IGZpbGUgY3JlYXRlZCBpbiBlYXJsaWVyIGNvbW1hbmQiKQpAQCAtNTcsNiArNjAsMTUgQEAKICAgICAgICAgICAgIHNlbGYudXBsb2FkX2ZpbGUoY29tbWFuZCwgcHl2ZXJzaW9uLCBmaWxlbmFtZSkKIAogICAgIGRlZiB1cGxvYWRfZmlsZShzZWxmLCBjb21tYW5kLCBweXZlcnNpb24sIGZpbGVuYW1lKToKKyAgICAgICAgIyBNYWtlcyBzdXJlIHRoZSByZXBvc2l0b3J5IFVSTCBpcyBjb21wbGlhbnQKKyAgICAgICAgc2NoZW1hLCBuZXRsb2MsIHVybCwgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnRzID0gXAorICAgICAgICAgICAgdXJscGFyc2UudXJscGFyc2Uoc2VsZi5yZXBvc2l0b3J5KQorICAgICAgICBpZiBwYXJhbXMgb3IgcXVlcnkgb3IgZnJhZ21lbnRzOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkluY29tcGF0aWJsZSB1cmwgJXMiICUgc2VsZi5yZXBvc2l0b3J5KQorCisgICAgICAgIGlmIHNjaGVtYSBub3QgaW4gKCdodHRwJywgJ2h0dHBzJyk6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigidW5zdXBwb3J0ZWQgc2NoZW1hICIgKyBzY2hlbWEpCisKICAgICAgICAgIyBTaWduIGlmIHJlcXVlc3RlZAogICAgICAgICBpZiBzZWxmLnNpZ246CiAgICAgICAgICAgICBncGdfYXJncyA9IFsiZ3BnIiwgIi0tZGV0YWNoLXNpZ24iLCAiLWEiLCBmaWxlbmFtZV0KQEAgLTY3LDcgKzc5LDExIEBACiAKICAgICAgICAgIyBGaWxsIGluIHRoZSBkYXRhIC0gc2VuZCBhbGwgdGhlIG1ldGEtZGF0YSBpbiBjYXNlIHdlIG5lZWQgdG8KICAgICAgICAgIyByZWdpc3RlciBhIG5ldyByZWxlYXNlCi0gICAgICAgIGNvbnRlbnQgPSBvcGVuKGZpbGVuYW1lLCdyYicpLnJlYWQoKQorICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwncmInKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBtZXRhID0gc2VsZi5kaXN0cmlidXRpb24ubWV0YWRhdGEKICAgICAgICAgZGF0YSA9IHsKICAgICAgICAgICAgICMgYWN0aW9uCkBAIC0xMjUsMTAgKzE0MSwxMCBAQAogICAgICAgICBib2R5ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkYXRhLml0ZW1zKCk6CiAgICAgICAgICAgICAjIGhhbmRsZSBtdWx0aXBsZSBlbnRyaWVzIGZvciB0aGUgc2FtZSBuYW1lCi0gICAgICAgICAgICBpZiB0eXBlKHZhbHVlKSAhPSB0eXBlKFtdKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKICAgICAgICAgICAgICAgICB2YWx1ZSA9IFt2YWx1ZV0KICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZToKLSAgICAgICAgICAgICAgICBpZiB0eXBlKHZhbHVlKSBpcyB0dXBsZToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCB0dXBsZSk6CiAgICAgICAgICAgICAgICAgICAgIGZuID0gJztmaWxlbmFtZT0iJXMiJyAlIHZhbHVlWzBdCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbMV0KICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTQ4LDM5ICsxNjQsMzEgQEAKICAgICAgICAgc2VsZi5hbm5vdW5jZSgiU3VibWl0dGluZyAlcyB0byAlcyIgJSAoZmlsZW5hbWUsIHNlbGYucmVwb3NpdG9yeSksIGxvZy5JTkZPKQogCiAgICAgICAgICMgYnVpbGQgdGhlIFJlcXVlc3QKLSAgICAgICAgIyBXZSBjYW4ndCB1c2UgdXJsbGliMiBzaW5jZSB3ZSBuZWVkIHRvIHNlbmQgdGhlIEJhc2ljCi0gICAgICAgICMgYXV0aCByaWdodCB3aXRoIHRoZSBmaXJzdCByZXF1ZXN0Ci0gICAgICAgIHNjaGVtYSwgbmV0bG9jLCB1cmwsIHBhcmFtcywgcXVlcnksIGZyYWdtZW50cyA9IFwKLSAgICAgICAgICAgIHVybHBhcnNlLnVybHBhcnNlKHNlbGYucmVwb3NpdG9yeSkKLSAgICAgICAgYXNzZXJ0IG5vdCBwYXJhbXMgYW5kIG5vdCBxdWVyeSBhbmQgbm90IGZyYWdtZW50cwotICAgICAgICBpZiBzY2hlbWEgPT0gJ2h0dHAnOgotICAgICAgICAgICAgaHR0cCA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24obmV0bG9jKQotICAgICAgICBlbGlmIHNjaGVtYSA9PSAnaHR0cHMnOgotICAgICAgICAgICAgaHR0cCA9IGh0dHBsaWIuSFRUUFNDb25uZWN0aW9uKG5ldGxvYykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yLCAidW5zdXBwb3J0ZWQgc2NoZW1hICIrc2NoZW1hCisgICAgICAgIGhlYWRlcnMgPSB7J0NvbnRlbnQtdHlwZSc6CisgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JXMnICUgYm91bmRhcnksCisgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtbGVuZ3RoJzogc3RyKGxlbihib2R5KSksCisgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBhdXRofQogCi0gICAgICAgIGRhdGEgPSAnJwotICAgICAgICBsb2dsZXZlbCA9IGxvZy5JTkZPCisgICAgICAgIHJlcXVlc3QgPSBSZXF1ZXN0KHNlbGYucmVwb3NpdG9yeSwgZGF0YT1ib2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPWhlYWRlcnMpCisgICAgICAgICMgc2VuZCB0aGUgZGF0YQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBodHRwLmNvbm5lY3QoKQotICAgICAgICAgICAgaHR0cC5wdXRyZXF1ZXN0KCJQT1NUIiwgdXJsKQotICAgICAgICAgICAgaHR0cC5wdXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JXMnJWJvdW5kYXJ5KQotICAgICAgICAgICAgaHR0cC5wdXRoZWFkZXIoJ0NvbnRlbnQtbGVuZ3RoJywgc3RyKGxlbihib2R5KSkpCi0gICAgICAgICAgICBodHRwLnB1dGhlYWRlcignQXV0aG9yaXphdGlvbicsIGF1dGgpCi0gICAgICAgICAgICBodHRwLmVuZGhlYWRlcnMoKQotICAgICAgICAgICAgaHR0cC5zZW5kKGJvZHkpCisgICAgICAgICAgICByZXN1bHQgPSB1cmxvcGVuKHJlcXVlc3QpCisgICAgICAgICAgICBzdGF0dXMgPSByZXN1bHQuZ2V0Y29kZSgpCisgICAgICAgICAgICByZWFzb24gPSByZXN1bHQubXNnCisgICAgICAgICAgICBpZiBzZWxmLnNob3dfcmVzcG9uc2U6CisgICAgICAgICAgICAgICAgbXNnID0gJ1xuJy5qb2luKCgnLScgKiA3NSwgci5yZWFkKCksICctJyAqIDc1KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKG1zZywgbG9nLklORk8pCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CiAgICAgICAgICAgICBzZWxmLmFubm91bmNlKHN0cihlKSwgbG9nLkVSUk9SKQogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBIVFRQRXJyb3IsIGU6CisgICAgICAgICAgICBzdGF0dXMgPSBlLmNvZGUKKyAgICAgICAgICAgIHJlYXNvbiA9IGUubXNnCiAKLSAgICAgICAgciA9IGh0dHAuZ2V0cmVzcG9uc2UoKQotICAgICAgICBpZiByLnN0YXR1cyA9PSAyMDA6Ci0gICAgICAgICAgICBzZWxmLmFubm91bmNlKCdTZXJ2ZXIgcmVzcG9uc2UgKCVzKTogJXMnICUgKHIuc3RhdHVzLCByLnJlYXNvbiksCisgICAgICAgIGlmIHN0YXR1cyA9PSAyMDA6CisgICAgICAgICAgICBzZWxmLmFubm91bmNlKCdTZXJ2ZXIgcmVzcG9uc2UgKCVzKTogJXMnICUgKHN0YXR1cywgcmVhc29uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLklORk8pCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFubm91bmNlKCdVcGxvYWQgZmFpbGVkICglcyk6ICVzJyAlIChyLnN0YXR1cywgci5yZWFzb24pLAorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnVXBsb2FkIGZhaWxlZCAoJXMpOiAlcycgJSAoc3RhdHVzLCByZWFzb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuRVJST1IpCi0gICAgICAgIGlmIHNlbGYuc2hvd19yZXNwb25zZToKLSAgICAgICAgICAgIHByaW50ICctJyo3NSwgci5yZWFkKCksICctJyo3NQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQppbmRleCA0MTg2YzliLi5hZmE0MDNmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQpAQCAtNCw3ICs0LDYgQEAKIHRoYXQgdXNlcyAucHlwaXJjIGluIHRoZSBkaXN0dXRpbHMuY29tbWFuZCBwYWNrYWdlLgogIiIiCiBpbXBvcnQgb3MKLWltcG9ydCBzeXMKIGZyb20gQ29uZmlnUGFyc2VyIGltcG9ydCBDb25maWdQYXJzZXIKIAogZnJvbSBkaXN0dXRpbHMuY21kIGltcG9ydCBDb21tYW5kCkBAIC02MCw4ICs1OSw2IEBACiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJjKToKICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJ1VzaW5nIFB5UEkgbG9naW4gZnJvbSAlcycgJSByYykKICAgICAgICAgICAgIHJlcG9zaXRvcnkgPSBzZWxmLnJlcG9zaXRvcnkgb3Igc2VsZi5ERUZBVUxUX1JFUE9TSVRPUlkKLSAgICAgICAgICAgIHJlYWxtID0gc2VsZi5yZWFsbSBvciBzZWxmLkRFRkFVTFRfUkVBTE0KLQogICAgICAgICAgICAgY29uZmlnID0gQ29uZmlnUGFyc2VyKCkKICAgICAgICAgICAgIGNvbmZpZy5yZWFkKHJjKQogICAgICAgICAgICAgc2VjdGlvbnMgPSBjb25maWcuc2VjdGlvbnMoKQpAQCAtODIsMTIgKzc5LDEyIEBACiAgICAgICAgICAgICAgICAgZm9yIHNlcnZlciBpbiBfc2VydmVyczoKICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHsnc2VydmVyJzogc2VydmVyfQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50Wyd1c2VybmFtZSddID0gY29uZmlnLmdldChzZXJ2ZXIsICd1c2VybmFtZScpCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbJ3Bhc3N3b3JkJ10gPSBjb25maWcuZ2V0KHNlcnZlciwgJ3Bhc3N3b3JkJykKIAogICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIHBhcmFtcwogICAgICAgICAgICAgICAgICAgICBmb3Iga2V5LCBkZWZhdWx0IGluICgoJ3JlcG9zaXRvcnknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ERUZBVUxUX1JFUE9TSVRPUlkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlYWxtJywgc2VsZi5ERUZBVUxUX1JFQUxNKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncmVhbG0nLCBzZWxmLkRFRkFVTFRfUkVBTE0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3Bhc3N3b3JkJywgTm9uZSkpOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29uZmlnLmhhc19vcHRpb24oc2VydmVyLCBrZXkpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IGNvbmZpZy5nZXQoc2VydmVyLCBrZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb3JlLnB5IGIvTGliL2Rpc3R1dGlscy9jb3JlLnB5CmluZGV4IDYyYTMzODkuLmI4OTU1N2QgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29yZS5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvcmUucHkKQEAgLTYsMTUgKzYsMTQgQEAKIHJlYWxseSBkZWZpbmVkIGluIGRpc3R1dGlscy5kaXN0IGFuZCBkaXN0dXRpbHMuY21kLgogIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgc3lzLCBvcwotZnJvbSB0eXBlcyBpbXBvcnQgKgoraW1wb3J0IHN5cworaW1wb3J0IG9zCiAKIGZyb20gZGlzdHV0aWxzLmRlYnVnIGltcG9ydCBERUJVRwotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IChEaXN0dXRpbHNTZXR1cEVycm9yLCBEaXN0dXRpbHNBcmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3R1dGlsc0Vycm9yLCBDQ29tcGlsZXJFcnJvcikKIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdyb2tfZW52aXJvbm1lbnRfZXJyb3IKIAogIyBNYWlubHkgaW1wb3J0IHRoZXNlIHNvIHNldHVwIHNjcmlwdHMgY2FuICJmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCIgdGhlbS4KQEAgLTM0LDkgKzMzLDkgQEAKICAgIG9yOiAlKHNjcmlwdClzIGNtZCAtLWhlbHAKICIiIgogCi1kZWYgZ2VuX3VzYWdlIChzY3JpcHRfbmFtZSk6CitkZWYgZ2VuX3VzYWdlKHNjcmlwdF9uYW1lKToKICAgICBzY3JpcHQgPSBvcy5wYXRoLmJhc2VuYW1lKHNjcmlwdF9uYW1lKQotICAgIHJldHVybiBVU0FHRSAlIHZhcnMoKQorICAgIHJldHVybiBVU0FHRSAlIHsnc2NyaXB0Jzogc2NyaXB0fQogCiAKICMgU29tZSBtaWxkIG1hZ2ljIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiAnc2V0dXAoKScgZnJvbSAncnVuX3NldHVwKCknLgpAQCAtNTksNyArNTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICdleHRyYV9vYmplY3RzJywgJ2V4dHJhX2NvbXBpbGVfYXJncycsICdleHRyYV9saW5rX2FyZ3MnLAogICAgICAgICAgICAgICAgICAgICAgICdzd2lnX29wdHMnLCAnZXhwb3J0X3N5bWJvbHMnLCAnZGVwZW5kcycsICdsYW5ndWFnZScpCiAKLWRlZiBzZXR1cCAoKiphdHRycyk6CitkZWYgc2V0dXAoKiphdHRycyk6CiAgICAgIiIiVGhlIGdhdGV3YXkgdG8gdGhlIERpc3R1dGlsczogZG8gZXZlcnl0aGluZyB5b3VyIHNldHVwIHNjcmlwdCBuZWVkcwogICAgIHRvIGRvLCBpbiBhIGhpZ2hseSBmbGV4aWJsZSBhbmQgdXNlci1kcml2ZW4gd2F5LiAgQnJpZWZseTogY3JlYXRlIGEKICAgICBEaXN0cmlidXRpb24gaW5zdGFuY2U7IGZpbmQgYW5kIHBhcnNlIGNvbmZpZyBmaWxlczsgcGFyc2UgdGhlIGNvbW1hbmQKQEAgLTEzMiw4ICsxMzEsOSBAQAogICAgIGlmIF9zZXR1cF9zdG9wX2FmdGVyID09ICJjb25maWciOgogICAgICAgICByZXR1cm4gZGlzdAogCi0gICAgIyBQYXJzZSB0aGUgY29tbWFuZCBsaW5lOyBhbnkgY29tbWFuZC1saW5lIGVycm9ycyBhcmUgdGhlIGVuZCB1c2VyJ3MKLSAgICAjIGZhdWx0LCBzbyB0dXJuIHRoZW0gaW50byBTeXN0ZW1FeGl0IHRvIHN1cHByZXNzIHRyYWNlYmFja3MuCisgICAgIyBQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFuZCBvdmVycmlkZSBjb25maWcgZmlsZXM7IGFueQorICAgICMgY29tbWFuZC1saW5lIGVycm9ycyBhcmUgdGhlIGVuZCB1c2VyJ3MgZmF1bHQsIHNvIHR1cm4gdGhlbSBpbnRvCisgICAgIyBTeXN0ZW1FeGl0IHRvIHN1cHByZXNzIHRyYWNlYmFja3MuCiAgICAgdHJ5OgogICAgICAgICBvayA9IGRpc3QucGFyc2VfY29tbWFuZF9saW5lKCkKICAgICBleGNlcHQgRGlzdHV0aWxzQXJnRXJyb3IsIG1zZzoKQEAgLTE3MCwxMCArMTcwLDggQEAKIAogICAgIHJldHVybiBkaXN0CiAKLSMgc2V0dXAgKCkKIAotCi1kZWYgcnVuX3NldHVwIChzY3JpcHRfbmFtZSwgc2NyaXB0X2FyZ3M9Tm9uZSwgc3RvcF9hZnRlcj0icnVuIik6CitkZWYgcnVuX3NldHVwKHNjcmlwdF9uYW1lLCBzY3JpcHRfYXJncz1Ob25lLCBzdG9wX2FmdGVyPSJydW4iKToKICAgICAiIiJSdW4gYSBzZXR1cCBzY3JpcHQgaW4gYSBzb21ld2hhdCBjb250cm9sbGVkIGVudmlyb25tZW50LCBhbmQKICAgICByZXR1cm4gdGhlIERpc3RyaWJ1dGlvbiBpbnN0YW5jZSB0aGF0IGRyaXZlcyB0aGluZ3MuICBUaGlzIGlzIHVzZWZ1bAogICAgIGlmIHlvdSBuZWVkIHRvIGZpbmQgb3V0IHRoZSBkaXN0cmlidXRpb24gbWV0YS1kYXRhIChwYXNzZWQgYXMKQEAgLTIxOCw3ICsyMTYsMTEgQEAKICAgICAgICAgICAgIHN5cy5hcmd2WzBdID0gc2NyaXB0X25hbWUKICAgICAgICAgICAgIGlmIHNjcmlwdF9hcmdzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHN5cy5hcmd2WzE6XSA9IHNjcmlwdF9hcmdzCi0gICAgICAgICAgICBleGVjIG9wZW4oc2NyaXB0X25hbWUsICdyJykucmVhZCgpIGluIGcsIGwKKyAgICAgICAgICAgIGYgPSBvcGVuKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4ZWMgZi5yZWFkKCkgaW4gZywgbAorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5hcmd2ID0gc2F2ZV9hcmd2CiAgICAgICAgICAgICBfc2V0dXBfc3RvcF9hZnRlciA9IE5vbmUKQEAgLTIzNyw3ICsyMzksNCBAQAogCiAgICAgIyBJIHdvbmRlciBpZiB0aGUgc2V0dXAgc2NyaXB0J3MgbmFtZXNwYWNlIC0tIGcgYW5kIGwgLS0gd291bGQgYmUgb2YKICAgICAjIGFueSBpbnRlcmVzdCB0byBjYWxsZXJzPwotICAgICNwcmludCAiX3NldHVwX2Rpc3RyaWJ1dGlvbjoiLCBfc2V0dXBfZGlzdHJpYnV0aW9uCiAgICAgcmV0dXJuIF9zZXR1cF9kaXN0cmlidXRpb24KLQotIyBydW5fc2V0dXAgKCkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKaW5kZXggMmRhYmMwZi4uYTFlZTgxNSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKQEAgLTM4Miw4ICszODIsMTAgQEAKICAgICAgICAgIyBJdCB3b3VsZCBwcm9iYWJseSBiZXR0ZXIgdG8gcmVhZCBzaW5nbGUgbGluZXMgdG8gc2VhcmNoLgogICAgICAgICAjIEJ1dCB3ZSBkbyB0aGlzIG9ubHkgb25jZSwgYW5kIGl0IGlzIGZhc3QgZW5vdWdoCiAgICAgICAgIGYgPSBvcGVuKGZuKQotICAgICAgICBzID0gZi5yZWFkKCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBmLnJlYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBleGNlcHQgSU9FcnJvciwgZXhjOgogICAgICAgICAjIGlmIHdlIGNhbid0IHJlYWQgdGhpcyBmaWxlLCB3ZSBjYW5ub3Qgc2F5IGl0IGlzIHdyb25nCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2RlYnVnLnB5IGIvTGliL2Rpc3R1dGlscy9kZWJ1Zy5weQppbmRleCBiNjcxMzljLi4yODg2NzQ0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2RlYnVnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZGVidWcucHkKQEAgLTEsNyArMSw1IEBACiBpbXBvcnQgb3MKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKICMgSWYgRElTVFVUSUxTX0RFQlVHIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gdGhlIGVtcHR5IHN0cmluZywgd2UgcnVuIGluCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2RlcF91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy9kZXBfdXRpbC5weQppbmRleCAyYzZkNzkyLi40ZTQwZGY2IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2RlcF91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZGVwX3V0aWwucHkKQEAgLTQsMzYgKzQsMzIgQEAKIGFuZCBncm91cHMgb2YgZmlsZXM7IGFsc28sIGZ1bmN0aW9uIGJhc2VkIGVudGlyZWx5IG9uIHN1Y2gKIHRpbWVzdGFtcCBkZXBlbmRlbmN5IGFuYWx5c2lzLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAogaW1wb3J0IG9zCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0ZpbGVFcnJvcgogCitkZWYgbmV3ZXIoc291cmNlLCB0YXJnZXQpOgorICAgICIiIlRlbGxzIGlmIHRoZSB0YXJnZXQgaXMgbmV3ZXIgdGhhbiB0aGUgc291cmNlLgogCi1kZWYgbmV3ZXIgKHNvdXJjZSwgdGFyZ2V0KToKLSAgICAiIiJSZXR1cm4gdHJ1ZSBpZiAnc291cmNlJyBleGlzdHMgYW5kIGlzIG1vcmUgcmVjZW50bHkgbW9kaWZpZWQgdGhhbgotICAgICd0YXJnZXQnLCBvciBpZiAnc291cmNlJyBleGlzdHMgYW5kICd0YXJnZXQnIGRvZXNuJ3QuICBSZXR1cm4gZmFsc2UgaWYKLSAgICBib3RoIGV4aXN0IGFuZCAndGFyZ2V0JyBpcyB0aGUgc2FtZSBhZ2Ugb3IgeW91bmdlciB0aGFuICdzb3VyY2UnLgotICAgIFJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciBpZiAnc291cmNlJyBkb2VzIG5vdCBleGlzdC4KKyAgICBSZXR1cm4gdHJ1ZSBpZiAnc291cmNlJyBleGlzdHMgYW5kIGlzIG1vcmUgcmVjZW50bHkgbW9kaWZpZWQgdGhhbgorICAgICd0YXJnZXQnLCBvciBpZiAnc291cmNlJyBleGlzdHMgYW5kICd0YXJnZXQnIGRvZXNuJ3QuCisKKyAgICBSZXR1cm4gZmFsc2UgaWYgYm90aCBleGlzdCBhbmQgJ3RhcmdldCcgaXMgdGhlIHNhbWUgYWdlIG9yIHlvdW5nZXIKKyAgICB0aGFuICdzb3VyY2UnLiBSYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IgaWYgJ3NvdXJjZScgZG9lcyBub3QgZXhpc3QuCisKKyAgICBOb3RlIHRoYXQgdGhpcyB0ZXN0IGlzIG5vdCB2ZXJ5IGFjY3VyYXRlOiBmaWxlcyBjcmVhdGVkIGluIHRoZSBzYW1lIHNlY29uZAorICAgIHdpbGwgaGF2ZSB0aGUgc2FtZSAiYWdlIi4KICAgICAiIiIKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc291cmNlKToKLSAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCAoImZpbGUgJyVzJyBkb2VzIG5vdCBleGlzdCIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgoc291cmNlKSkKKyAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKCJmaWxlICclcycgZG9lcyBub3QgZXhpc3QiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChzb3VyY2UpKQogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXQpOgotICAgICAgICByZXR1cm4gMQorICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgZnJvbSBzdGF0IGltcG9ydCBTVF9NVElNRQotICAgIG10aW1lMSA9IG9zLnN0YXQoc291cmNlKVtTVF9NVElNRV0KLSAgICBtdGltZTIgPSBvcy5zdGF0KHRhcmdldClbU1RfTVRJTUVdCisgICAgcmV0dXJuIG9zLnN0YXQoc291cmNlKS5zdF9tdGltZSA+IG9zLnN0YXQodGFyZ2V0KS5zdF9tdGltZQogCi0gICAgcmV0dXJuIG10aW1lMSA+IG10aW1lMgotCi0jIG5ld2VyICgpCi0KLQotZGVmIG5ld2VyX3BhaXJ3aXNlIChzb3VyY2VzLCB0YXJnZXRzKToKK2RlZiBuZXdlcl9wYWlyd2lzZShzb3VyY2VzLCB0YXJnZXRzKToKICAgICAiIiJXYWxrIHR3byBmaWxlbmFtZSBsaXN0cyBpbiBwYXJhbGxlbCwgdGVzdGluZyBpZiBlYWNoIHNvdXJjZSBpcyBuZXdlcgogICAgIHRoYW4gaXRzIGNvcnJlc3BvbmRpbmcgdGFyZ2V0LiAgUmV0dXJuIGEgcGFpciBvZiBsaXN0cyAoc291cmNlcywKICAgICB0YXJnZXRzKSB3aGVyZSBzb3VyY2UgaXMgbmV3ZXIgdGhhbiB0YXJnZXQsIGFjY29yZGluZyB0byB0aGUgc2VtYW50aWNzCkBAIC00NSwxOSArNDEsMTggQEAKICAgICAjIGJ1aWxkIGEgcGFpciBvZiBsaXN0cyAoc291cmNlcywgdGFyZ2V0cykgd2hlcmUgIHNvdXJjZSBpcyBuZXdlcgogICAgIG5fc291cmNlcyA9IFtdCiAgICAgbl90YXJnZXRzID0gW10KLSAgICBmb3IgaSBpbiByYW5nZShsZW4oc291cmNlcykpOgotICAgICAgICBpZiBuZXdlcihzb3VyY2VzW2ldLCB0YXJnZXRzW2ldKToKLSAgICAgICAgICAgIG5fc291cmNlcy5hcHBlbmQoc291cmNlc1tpXSkKLSAgICAgICAgICAgIG5fdGFyZ2V0cy5hcHBlbmQodGFyZ2V0c1tpXSkKKyAgICBmb3Igc291cmNlLCB0YXJnZXQgaW4gemlwKHNvdXJjZXMsIHRhcmdldHMpOgorICAgICAgICBpZiBuZXdlcihzb3VyY2UsIHRhcmdldCk6CisgICAgICAgICAgICBuX3NvdXJjZXMuYXBwZW5kKHNvdXJjZSkKKyAgICAgICAgICAgIG5fdGFyZ2V0cy5hcHBlbmQodGFyZ2V0KQogCi0gICAgcmV0dXJuIChuX3NvdXJjZXMsIG5fdGFyZ2V0cykKKyAgICByZXR1cm4gbl9zb3VyY2VzLCBuX3RhcmdldHMKIAotIyBuZXdlcl9wYWlyd2lzZSAoKQotCi0KLWRlZiBuZXdlcl9ncm91cCAoc291cmNlcywgdGFyZ2V0LCBtaXNzaW5nPSdlcnJvcicpOgorZGVmIG5ld2VyX2dyb3VwKHNvdXJjZXMsIHRhcmdldCwgbWlzc2luZz0nZXJyb3InKToKICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiAndGFyZ2V0JyBpcyBvdXQtb2YtZGF0ZSB3aXRoIHJlc3BlY3QgdG8gYW55IGZpbGUKLSAgICBsaXN0ZWQgaW4gJ3NvdXJjZXMnLiAgSW4gb3RoZXIgd29yZHMsIGlmICd0YXJnZXQnIGV4aXN0cyBhbmQgaXMgbmV3ZXIKKyAgICBsaXN0ZWQgaW4gJ3NvdXJjZXMnLgorCisgICAgSW4gb3RoZXIgd29yZHMsIGlmICd0YXJnZXQnIGV4aXN0cyBhbmQgaXMgbmV3ZXIKICAgICB0aGFuIGV2ZXJ5IGZpbGUgaW4gJ3NvdXJjZXMnLCByZXR1cm4gZmFsc2U7IG90aGVyd2lzZSByZXR1cm4gdHJ1ZS4KICAgICAnbWlzc2luZycgY29udHJvbHMgd2hhdCB3ZSBkbyB3aGVuIGEgc291cmNlIGZpbGUgaXMgbWlzc2luZzsgdGhlCiAgICAgZGVmYXVsdCAoImVycm9yIikgaXMgdG8gYmxvdyB1cCB3aXRoIGFuIE9TRXJyb3IgZnJvbSBpbnNpZGUgJ3N0YXQoKSc7CkBAIC03MCwxNCArNjUsMTQgQEAKICAgICAiIiIKICAgICAjIElmIHRoZSB0YXJnZXQgZG9lc24ndCBldmVuIGV4aXN0LCB0aGVuIGl0J3MgZGVmaW5pdGVseSBvdXQtb2YtZGF0ZS4KICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGFyZ2V0KToKLSAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICMgT3RoZXJ3aXNlIHdlIGhhdmUgdG8gZmluZCBvdXQgdGhlIGhhcmQgd2F5OiBpZiAqYW55KiBzb3VyY2UgZmlsZQogICAgICMgaXMgbW9yZSByZWNlbnQgdGhhbiAndGFyZ2V0JywgdGhlbiAndGFyZ2V0JyBpcyBvdXQtb2YtZGF0ZSBhbmQKICAgICAjIHdlIGNhbiBpbW1lZGlhdGVseSByZXR1cm4gdHJ1ZS4gIElmIHdlIGZhbGwgdGhyb3VnaCB0byB0aGUgZW5kCiAgICAgIyBvZiB0aGUgbG9vcCwgdGhlbiAndGFyZ2V0JyBpcyB1cC10by1kYXRlIGFuZCB3ZSByZXR1cm4gZmFsc2UuCi0gICAgZnJvbSBzdGF0IGltcG9ydCBTVF9NVElNRQotICAgIHRhcmdldF9tdGltZSA9IG9zLnN0YXQodGFyZ2V0KVtTVF9NVElNRV0KKyAgICB0YXJnZXRfbXRpbWUgPSBvcy5zdGF0KHRhcmdldCkuc3RfbXRpbWUKKwogICAgIGZvciBzb3VyY2UgaW4gc291cmNlczoKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNvdXJjZSk6CiAgICAgICAgICAgICBpZiBtaXNzaW5nID09ICdlcnJvcic6ICAgICAgIyBibG93IHVwIHdoZW4gd2Ugc3RhdCgpIHRoZSBmaWxlCkBAIC04NSwxMiArODAsOSBAQAogICAgICAgICAgICAgZWxpZiBtaXNzaW5nID09ICdpZ25vcmUnOiAgICMgbWlzc2luZyBzb3VyY2UgZHJvcHBlZCBmcm9tCiAgICAgICAgICAgICAgICAgY29udGludWUgICAgICAgICAgICAgICAgIyAgdGFyZ2V0J3MgZGVwZW5kZW5jeSBsaXN0CiAgICAgICAgICAgICBlbGlmIG1pc3NpbmcgPT0gJ25ld2VyJzogICAgIyBtaXNzaW5nIHNvdXJjZSBtZWFucyB0YXJnZXQgaXMKLSAgICAgICAgICAgICAgICByZXR1cm4gMSAgICAgICAgICAgICAgICAjICBvdXQtb2YtZGF0ZQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlICAgICAgICAgICAgICMgIG91dC1vZi1kYXRlCiAKLSAgICAgICAgc291cmNlX210aW1lID0gb3Muc3RhdChzb3VyY2UpW1NUX01USU1FXQotICAgICAgICBpZiBzb3VyY2VfbXRpbWUgPiB0YXJnZXRfbXRpbWU6Ci0gICAgICAgICAgICByZXR1cm4gMQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAwCisgICAgICAgIGlmIG9zLnN0YXQoc291cmNlKS5zdF9tdGltZSA+IHRhcmdldF9tdGltZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAKLSMgbmV3ZXJfZ3JvdXAgKCkKKyAgICByZXR1cm4gRmFsc2UKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CmluZGV4IDkyZjQ5MzQuLjljNWNmMzMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQpAQCAtMiwxMiArMiwxMCBAQAogCiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIGRpcmVjdG9yaWVzIGFuZCBkaXJlY3RvcnkgdHJlZXMuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgb3MsIHN5cwotZnJvbSB0eXBlcyBpbXBvcnQgKgoraW1wb3J0IG9zCitpbXBvcnQgZXJybm8KIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRmlsZUVycm9yLCBEaXN0dXRpbHNJbnRlcm5hbEVycm9yCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKQEAgLTE4LDIwICsxNiwyMSBAQAogIyBJIGRvbid0IHVzZSBvcy5tYWtlZGlycyBiZWNhdXNlIGEpIGl0J3MgbmV3IHRvIFB5dGhvbiAxLjUuMiwgYW5kCiAjIGIpIGl0IGJsb3dzIHVwIGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgKEkgd2FudCB0byBzaWxlbnRseQogIyBzdWNjZWVkIGluIHRoYXQgY2FzZSkuCi1kZWYgbWtwYXRoIChuYW1lLCBtb2RlPTA3NzcsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKLSAgICAiIiJDcmVhdGUgYSBkaXJlY3RvcnkgYW5kIGFueSBtaXNzaW5nIGFuY2VzdG9yIGRpcmVjdG9yaWVzLiAgSWYgdGhlCi0gICAgICAgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIChvciBpZiAnbmFtZScgaXMgdGhlIGVtcHR5IHN0cmluZywgd2hpY2gKLSAgICAgICBtZWFucyB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdoaWNoIG9mIGNvdXJzZSBleGlzdHMpLCB0aGVuIGRvCi0gICAgICAgbm90aGluZy4gIFJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciBpZiB1bmFibGUgdG8gY3JlYXRlIHNvbWUKLSAgICAgICBkaXJlY3RvcnkgYWxvbmcgdGhlIHdheSAoZWcuIHNvbWUgc3ViLXBhdGggZXhpc3RzLCBidXQgaXMgYSBmaWxlCi0gICAgICAgcmF0aGVyIHRoYW4gYSBkaXJlY3RvcnkpLiAgSWYgJ3ZlcmJvc2UnIGlzIHRydWUsIHByaW50IGEgb25lLWxpbmUKLSAgICAgICBzdW1tYXJ5IG9mIGVhY2ggbWtkaXIgdG8gc3Rkb3V0LiAgUmV0dXJuIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzCi0gICAgICAgYWN0dWFsbHkgY3JlYXRlZC4iIiIKK2RlZiBta3BhdGgobmFtZSwgbW9kZT0wNzc3LCB2ZXJib3NlPTEsIGRyeV9ydW49MCk6CisgICAgIiIiQ3JlYXRlIGEgZGlyZWN0b3J5IGFuZCBhbnkgbWlzc2luZyBhbmNlc3RvciBkaXJlY3Rvcmllcy4KKworICAgIElmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgKG9yIGlmICduYW1lJyBpcyB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaAorICAgIG1lYW5zIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2hpY2ggb2YgY291cnNlIGV4aXN0cyksIHRoZW4gZG8gbm90aGluZy4KKyAgICBSYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IgaWYgdW5hYmxlIHRvIGNyZWF0ZSBzb21lIGRpcmVjdG9yeSBhbG9uZyB0aGUgd2F5CisgICAgKGVnLiBzb21lIHN1Yi1wYXRoIGV4aXN0cywgYnV0IGlzIGEgZmlsZSByYXRoZXIgdGhhbiBhIGRpcmVjdG9yeSkuCisgICAgSWYgJ3ZlcmJvc2UnIGlzIHRydWUsIHByaW50IGEgb25lLWxpbmUgc3VtbWFyeSBvZiBlYWNoIG1rZGlyIHRvIHN0ZG91dC4KKyAgICBSZXR1cm4gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgYWN0dWFsbHkgY3JlYXRlZC4KKyAgICAiIiIKIAogICAgIGdsb2JhbCBfcGF0aF9jcmVhdGVkCiAKICAgICAjIERldGVjdCBhIGNvbW1vbiBidWcgLS0gbmFtZSBpcyBOb25lCi0gICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgU3RyaW5nVHlwZXMpOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsIGJhc2VzdHJpbmcpOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNJbnRlcm5hbEVycm9yLCBcCiAgICAgICAgICAgICAgICJta3BhdGg6ICduYW1lJyBtdXN0IGJlIGEgc3RyaW5nIChnb3QgJXIpIiAlIChuYW1lLCkKIApAQCAtNTEsMTMgKzUwLDkgQEAKICAgICB0YWlscyA9IFt0YWlsXSAgICAgICAgICAgICAgICAgICAgICAjIHN0YWNrIG9mIGxvbmUgZGlycyB0byBjcmVhdGUKIAogICAgIHdoaWxlIGhlYWQgYW5kIHRhaWwgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKGhlYWQpOgotICAgICAgICAjcHJpbnQgInNwbGl0dGluZyAnJXMnOiAiICUgaGVhZCwKICAgICAgICAgKGhlYWQsIHRhaWwpID0gb3MucGF0aC5zcGxpdChoZWFkKQotICAgICAgICAjcHJpbnQgInRvICgnJXMnLCclcycpIiAlIChoZWFkLCB0YWlsKQogICAgICAgICB0YWlscy5pbnNlcnQoMCwgdGFpbCkgICAgICAgICAgIyBwdXNoIG5leHQgaGlnaGVyIGRpciBvbnRvIHN0YWNrCiAKLSAgICAjcHJpbnQgInN0YWNrIG9mIHRhaWxzOiIsIHRhaWxzCi0KICAgICAjIG5vdyAnaGVhZCcgY29udGFpbnMgdGhlIGRlZXBlc3QgZGlyZWN0b3J5IHRoYXQgYWxyZWFkeSBleGlzdHMKICAgICAjICh0aGF0IGlzLCB0aGUgY2hpbGQgb2YgJ2hlYWQnIGluICduYW1lJyBpcyB0aGUgaGlnaGVzdCBkaXJlY3RvcnkKICAgICAjIHRoYXQgZG9lcyAqbm90KiBleGlzdCkKQEAgLTY5LDMyICs2NCwzMSBAQAogICAgICAgICBpZiBfcGF0aF9jcmVhdGVkLmdldChhYnNfaGVhZCk6CiAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgIGxvZy5pbmZvKCJjcmVhdGluZyAlcyIsIGhlYWQpCisgICAgICAgIGlmIHZlcmJvc2UgPj0gMToKKyAgICAgICAgICAgIGxvZy5pbmZvKCJjcmVhdGluZyAlcyIsIGhlYWQpCiAKICAgICAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoaGVhZCkKLSAgICAgICAgICAgICAgICBjcmVhdGVkX2RpcnMuYXBwZW5kKGhlYWQpCisgICAgICAgICAgICAgICAgb3MubWtkaXIoaGVhZCwgbW9kZSkKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBleGM6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgJyVzJzogJXMiICUgKGhlYWQsIGV4Y1stMV0pCisgICAgICAgICAgICAgICAgaWYgbm90IChleGMuZXJybm8gPT0gZXJybm8uRUVYSVNUIGFuZCBvcy5wYXRoLmlzZGlyKGhlYWQpKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSAnJXMnOiAlcyIgJSAoaGVhZCwgZXhjLmFyZ3NbLTFdKSkKKyAgICAgICAgICAgIGNyZWF0ZWRfZGlycy5hcHBlbmQoaGVhZCkKIAogICAgICAgICBfcGF0aF9jcmVhdGVkW2Fic19oZWFkXSA9IDEKICAgICByZXR1cm4gY3JlYXRlZF9kaXJzCiAKLSMgbWtwYXRoICgpCitkZWYgY3JlYXRlX3RyZWUoYmFzZV9kaXIsIGZpbGVzLCBtb2RlPTA3NzcsIHZlcmJvc2U9MSwgZHJ5X3J1bj0wKToKKyAgICAiIiJDcmVhdGUgYWxsIHRoZSBlbXB0eSBkaXJlY3RvcmllcyB1bmRlciAnYmFzZV9kaXInIG5lZWRlZCB0byBwdXQgJ2ZpbGVzJworICAgIHRoZXJlLgogCi0KLWRlZiBjcmVhdGVfdHJlZSAoYmFzZV9kaXIsIGZpbGVzLCBtb2RlPTA3NzcsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKLQotICAgICIiIkNyZWF0ZSBhbGwgdGhlIGVtcHR5IGRpcmVjdG9yaWVzIHVuZGVyICdiYXNlX2RpcicgbmVlZGVkIHRvCi0gICAgICAgcHV0ICdmaWxlcycgdGhlcmUuICAnYmFzZV9kaXInIGlzIGp1c3QgdGhlIGEgbmFtZSBvZiBhIGRpcmVjdG9yeQotICAgICAgIHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkgZXhpc3QgeWV0OyAnZmlsZXMnIGlzIGEgbGlzdCBvZiBmaWxlbmFtZXMKLSAgICAgICB0byBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byAnYmFzZV9kaXInLiAgJ2Jhc2VfZGlyJyArIHRoZQotICAgICAgIGRpcmVjdG9yeSBwb3J0aW9uIG9mIGV2ZXJ5IGZpbGUgaW4gJ2ZpbGVzJyB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQKLSAgICAgICBkb2Vzbid0IGFscmVhZHkgZXhpc3QuICAnbW9kZScsICd2ZXJib3NlJyBhbmQgJ2RyeV9ydW4nIGZsYWdzIGFyZSBhcwotICAgICAgIGZvciAnbWtwYXRoKCknLiIiIgotCisgICAgJ2Jhc2VfZGlyJyBpcyBqdXN0IHRoZSBhIG5hbWUgb2YgYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseQorICAgIGV4aXN0IHlldDsgJ2ZpbGVzJyBpcyBhIGxpc3Qgb2YgZmlsZW5hbWVzIHRvIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvCisgICAgJ2Jhc2VfZGlyJy4gICdiYXNlX2RpcicgKyB0aGUgZGlyZWN0b3J5IHBvcnRpb24gb2YgZXZlcnkgZmlsZSBpbiAnZmlsZXMnCisgICAgd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gICdtb2RlJywgJ3ZlcmJvc2UnIGFuZAorICAgICdkcnlfcnVuJyBmbGFncyBhcmUgYXMgZm9yICdta3BhdGgoKScuCisgICAgIiIiCiAgICAgIyBGaXJzdCBnZXQgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gY3JlYXRlCiAgICAgbmVlZF9kaXIgPSB7fQogICAgIGZvciBmaWxlIGluIGZpbGVzOgpAQCAtMTA0LDM3ICs5OCwyOSBAQAogCiAgICAgIyBOb3cgY3JlYXRlIHRoZW0KICAgICBmb3IgZGlyIGluIG5lZWRfZGlyczoKLSAgICAgICAgbWtwYXRoKGRpciwgbW9kZSwgZHJ5X3J1bj1kcnlfcnVuKQorICAgICAgICBta3BhdGgoZGlyLCBtb2RlLCB2ZXJib3NlPXZlcmJvc2UsIGRyeV9ydW49ZHJ5X3J1bikKIAotIyBjcmVhdGVfdHJlZSAoKQorZGVmIGNvcHlfdHJlZShzcmMsIGRzdCwgcHJlc2VydmVfbW9kZT0xLCBwcmVzZXJ2ZV90aW1lcz0xLAorICAgICAgICAgICAgICBwcmVzZXJ2ZV9zeW1saW5rcz0wLCB1cGRhdGU9MCwgdmVyYm9zZT0xLCBkcnlfcnVuPTApOgorICAgICIiIkNvcHkgYW4gZW50aXJlIGRpcmVjdG9yeSB0cmVlICdzcmMnIHRvIGEgbmV3IGxvY2F0aW9uICdkc3QnLgogCisgICAgQm90aCAnc3JjJyBhbmQgJ2RzdCcgbXVzdCBiZSBkaXJlY3RvcnkgbmFtZXMuICBJZiAnc3JjJyBpcyBub3QgYQorICAgIGRpcmVjdG9yeSwgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLiAgSWYgJ2RzdCcgZG9lcyBub3QgZXhpc3QsIGl0IGlzCisgICAgY3JlYXRlZCB3aXRoICdta3BhdGgoKScuICBUaGUgZW5kIHJlc3VsdCBvZiB0aGUgY29weSBpcyB0aGF0IGV2ZXJ5CisgICAgZmlsZSBpbiAnc3JjJyBpcyBjb3BpZWQgdG8gJ2RzdCcsIGFuZCBkaXJlY3RvcmllcyB1bmRlciAnc3JjJyBhcmUKKyAgICByZWN1cnNpdmVseSBjb3BpZWQgdG8gJ2RzdCcuICBSZXR1cm4gdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCB3ZXJlCisgICAgY29waWVkIG9yIG1pZ2h0IGhhdmUgYmVlbiBjb3BpZWQsIHVzaW5nIHRoZWlyIG91dHB1dCBuYW1lLiAgVGhlCisgICAgcmV0dXJuIHZhbHVlIGlzIHVuYWZmZWN0ZWQgYnkgJ3VwZGF0ZScgb3IgJ2RyeV9ydW4nOiBpdCBpcyBzaW1wbHkKKyAgICB0aGUgbGlzdCBvZiBhbGwgZmlsZXMgdW5kZXIgJ3NyYycsIHdpdGggdGhlIG5hbWVzIGNoYW5nZWQgdG8gYmUKKyAgICB1bmRlciAnZHN0Jy4KIAotZGVmIGNvcHlfdHJlZSAoc3JjLCBkc3QsCi0gICAgICAgICAgICAgICBwcmVzZXJ2ZV9tb2RlPTEsCi0gICAgICAgICAgICAgICBwcmVzZXJ2ZV90aW1lcz0xLAotICAgICAgICAgICAgICAgcHJlc2VydmVfc3ltbGlua3M9MCwKLSAgICAgICAgICAgICAgIHVwZGF0ZT0wLAotICAgICAgICAgICAgICAgdmVyYm9zZT0wLAotICAgICAgICAgICAgICAgZHJ5X3J1bj0wKToKLQotICAgICIiIkNvcHkgYW4gZW50aXJlIGRpcmVjdG9yeSB0cmVlICdzcmMnIHRvIGEgbmV3IGxvY2F0aW9uICdkc3QnLiAgQm90aAotICAgICAgICdzcmMnIGFuZCAnZHN0JyBtdXN0IGJlIGRpcmVjdG9yeSBuYW1lcy4gIElmICdzcmMnIGlzIG5vdCBhCi0gICAgICAgZGlyZWN0b3J5LCByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IuICBJZiAnZHN0JyBkb2VzIG5vdCBleGlzdCwgaXQgaXMKLSAgICAgICBjcmVhdGVkIHdpdGggJ21rcGF0aCgpJy4gIFRoZSBlbmQgcmVzdWx0IG9mIHRoZSBjb3B5IGlzIHRoYXQgZXZlcnkKLSAgICAgICBmaWxlIGluICdzcmMnIGlzIGNvcGllZCB0byAnZHN0JywgYW5kIGRpcmVjdG9yaWVzIHVuZGVyICdzcmMnIGFyZQotICAgICAgIHJlY3Vyc2l2ZWx5IGNvcGllZCB0byAnZHN0Jy4gIFJldHVybiB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IHdlcmUKLSAgICAgICBjb3BpZWQgb3IgbWlnaHQgaGF2ZSBiZWVuIGNvcGllZCwgdXNpbmcgdGhlaXIgb3V0cHV0IG5hbWUuICBUaGUKLSAgICAgICByZXR1cm4gdmFsdWUgaXMgdW5hZmZlY3RlZCBieSAndXBkYXRlJyBvciAnZHJ5X3J1bic6IGl0IGlzIHNpbXBseQotICAgICAgIHRoZSBsaXN0IG9mIGFsbCBmaWxlcyB1bmRlciAnc3JjJywgd2l0aCB0aGUgbmFtZXMgY2hhbmdlZCB0byBiZQotICAgICAgIHVuZGVyICdkc3QnLgotCi0gICAgICAgJ3ByZXNlcnZlX21vZGUnIGFuZCAncHJlc2VydmVfdGltZXMnIGFyZSB0aGUgc2FtZSBhcyBmb3IKLSAgICAgICAnY29weV9maWxlJzsgbm90ZSB0aGF0IHRoZXkgb25seSBhcHBseSB0byByZWd1bGFyIGZpbGVzLCBub3QgdG8KLSAgICAgICBkaXJlY3Rvcmllcy4gIElmICdwcmVzZXJ2ZV9zeW1saW5rcycgaXMgdHJ1ZSwgc3ltbGlua3Mgd2lsbCBiZQotICAgICAgIGNvcGllZCBhcyBzeW1saW5rcyAob24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGVtISk7IG90aGVyd2lzZQotICAgICAgICh0aGUgZGVmYXVsdCksIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgc3ltbGluayB3aWxsIGJlIGNvcGllZC4KLSAgICAgICAndXBkYXRlJyBhbmQgJ3ZlcmJvc2UnIGFyZSB0aGUgc2FtZSBhcyBmb3IgJ2NvcHlfZmlsZScuIiIiCi0KKyAgICAncHJlc2VydmVfbW9kZScgYW5kICdwcmVzZXJ2ZV90aW1lcycgYXJlIHRoZSBzYW1lIGFzIGZvcgorICAgICdjb3B5X2ZpbGUnOyBub3RlIHRoYXQgdGhleSBvbmx5IGFwcGx5IHRvIHJlZ3VsYXIgZmlsZXMsIG5vdCB0bworICAgIGRpcmVjdG9yaWVzLiAgSWYgJ3ByZXNlcnZlX3N5bWxpbmtzJyBpcyB0cnVlLCBzeW1saW5rcyB3aWxsIGJlCisgICAgY29waWVkIGFzIHN5bWxpbmtzIChvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoZW0hKTsgb3RoZXJ3aXNlCisgICAgKHRoZSBkZWZhdWx0KSwgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBzeW1saW5rIHdpbGwgYmUgY29waWVkLgorICAgICd1cGRhdGUnIGFuZCAndmVyYm9zZScgYXJlIHRoZSBzYW1lIGFzIGZvciAnY29weV9maWxlJy4KKyAgICAiIiIKICAgICBmcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IGNvcHlfZmlsZQogCiAgICAgaWYgbm90IGRyeV9ydW4gYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHNyYyk6CkBAIC0xNTAsNyArMTM2LDcgQEAKICAgICAgICAgICAgICAgICAgICJlcnJvciBsaXN0aW5nIGZpbGVzIGluICclcyc6ICVzIiAlIChzcmMsIGVycnN0cikKIAogICAgIGlmIG5vdCBkcnlfcnVuOgotICAgICAgICBta3BhdGgoZHN0KQorICAgICAgICBta3BhdGgoZHN0LCB2ZXJib3NlPXZlcmJvc2UpCiAKICAgICBvdXRwdXRzID0gW10KIApAQCAtMTYwLDcgKzE0Niw4IEBACiAKICAgICAgICAgaWYgcHJlc2VydmVfc3ltbGlua3MgYW5kIG9zLnBhdGguaXNsaW5rKHNyY19uYW1lKToKICAgICAgICAgICAgIGxpbmtfZGVzdCA9IG9zLnJlYWRsaW5rKHNyY19uYW1lKQotICAgICAgICAgICAgbG9nLmluZm8oImxpbmtpbmcgJXMgLT4gJXMiLCBkc3RfbmFtZSwgbGlua19kZXN0KQorICAgICAgICAgICAgaWYgdmVyYm9zZSA+PSAxOgorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJsaW5raW5nICVzIC0+ICVzIiwgZHN0X25hbWUsIGxpbmtfZGVzdCkKICAgICAgICAgICAgIGlmIG5vdCBkcnlfcnVuOgogICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsobGlua19kZXN0LCBkc3RfbmFtZSkKICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGRzdF9uYW1lKQpAQCAtMTY5LDE4ICsxNTYsMTcgQEAKICAgICAgICAgICAgIG91dHB1dHMuZXh0ZW5kKAogICAgICAgICAgICAgICAgIGNvcHlfdHJlZShzcmNfbmFtZSwgZHN0X25hbWUsIHByZXNlcnZlX21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX3RpbWVzLCBwcmVzZXJ2ZV9zeW1saW5rcywgdXBkYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkcnlfcnVuPWRyeV9ydW4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPXZlcmJvc2UsIGRyeV9ydW49ZHJ5X3J1bikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb3B5X2ZpbGUoc3JjX25hbWUsIGRzdF9uYW1lLCBwcmVzZXJ2ZV9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX3RpbWVzLCB1cGRhdGUsIGRyeV9ydW49ZHJ5X3J1bikKKyAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV90aW1lcywgdXBkYXRlLCB2ZXJib3NlPXZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgZHJ5X3J1bj1kcnlfcnVuKQogICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoZHN0X25hbWUpCiAKICAgICByZXR1cm4gb3V0cHV0cwogCi0jIGNvcHlfdHJlZSAoKQotCi0jIEhlbHBlciBmb3IgcmVtb3ZlX3RyZWUoKQogZGVmIF9idWlsZF9jbWR0dXBsZShwYXRoLCBjbWR0dXBsZXMpOgorICAgICIiIkhlbHBlciBmb3IgcmVtb3ZlX3RyZWUoKS4iIiIKICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKHBhdGgpOgogICAgICAgICByZWFsX2YgPSBvcy5wYXRoLmpvaW4ocGF0aCxmKQogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHJlYWxfZikgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhyZWFsX2YpOgpAQCAtMTg5LDE1ICsxNzUsMTcgQEAKICAgICAgICAgICAgIGNtZHR1cGxlcy5hcHBlbmQoKG9zLnJlbW92ZSwgcmVhbF9mKSkKICAgICBjbWR0dXBsZXMuYXBwZW5kKChvcy5ybWRpciwgcGF0aCkpCiAKK2RlZiByZW1vdmVfdHJlZShkaXJlY3RvcnksIHZlcmJvc2U9MSwgZHJ5X3J1bj0wKToKKyAgICAiIiJSZWN1cnNpdmVseSByZW1vdmUgYW4gZW50aXJlIGRpcmVjdG9yeSB0cmVlLgogCi1kZWYgcmVtb3ZlX3RyZWUgKGRpcmVjdG9yeSwgdmVyYm9zZT0wLCBkcnlfcnVuPTApOgotICAgICIiIlJlY3Vyc2l2ZWx5IHJlbW92ZSBhbiBlbnRpcmUgZGlyZWN0b3J5IHRyZWUuICBBbnkgZXJyb3JzIGFyZSBpZ25vcmVkCi0gICAgKGFwYXJ0IGZyb20gYmVpbmcgcmVwb3J0ZWQgdG8gc3Rkb3V0IGlmICd2ZXJib3NlJyBpcyB0cnVlKS4KKyAgICBBbnkgZXJyb3JzIGFyZSBpZ25vcmVkIChhcGFydCBmcm9tIGJlaW5nIHJlcG9ydGVkIHRvIHN0ZG91dCBpZiAndmVyYm9zZScKKyAgICBpcyB0cnVlKS4KICAgICAiIiIKICAgICBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBncm9rX2Vudmlyb25tZW50X2Vycm9yCiAgICAgZ2xvYmFsIF9wYXRoX2NyZWF0ZWQKIAotICAgIGxvZy5pbmZvKCJyZW1vdmluZyAnJXMnIChhbmQgZXZlcnl0aGluZyB1bmRlciBpdCkiLCBkaXJlY3RvcnkpCisgICAgaWYgdmVyYm9zZSA+PSAxOgorICAgICAgICBsb2cuaW5mbygicmVtb3ZpbmcgJyVzJyAoYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgaXQpIiwgZGlyZWN0b3J5KQogICAgIGlmIGRyeV9ydW46CiAgICAgICAgIHJldHVybgogICAgIGNtZHR1cGxlcyA9IFtdCkBAIC0yMTMsMTUgKzIwMSwxMiBAQAogICAgICAgICAgICAgbG9nLndhcm4oZ3Jva19lbnZpcm9ubWVudF9lcnJvcigKICAgICAgICAgICAgICAgICAgICAgZXhjLCAiZXJyb3IgcmVtb3ZpbmcgJXM6ICIgJSBkaXJlY3RvcnkpKQogCitkZWYgZW5zdXJlX3JlbGF0aXZlKHBhdGgpOgorICAgICIiIlRha2UgdGhlIGZ1bGwgcGF0aCAncGF0aCcsIGFuZCBtYWtlIGl0IGEgcmVsYXRpdmUgcGF0aC4KIAotZGVmIGVuc3VyZV9yZWxhdGl2ZSAocGF0aCk6Ci0gICAgIiIiVGFrZSB0aGUgZnVsbCBwYXRoICdwYXRoJywgYW5kIG1ha2UgaXQgYSByZWxhdGl2ZSBwYXRoIHNvCi0gICAgaXQgY2FuIGJlIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gb3MucGF0aC5qb2luKCkuCisgICAgVGhpcyBpcyB1c2VmdWwgdG8gbWFrZSAncGF0aCcgdGhlIHNlY29uZCBhcmd1bWVudCB0byBvcy5wYXRoLmpvaW4oKS4KICAgICAiIiIKICAgICBkcml2ZSwgcGF0aCA9IG9zLnBhdGguc3BsaXRkcml2ZShwYXRoKQotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnbWFjJzoKLSAgICAgICAgcmV0dXJuIG9zLnNlcCArIHBhdGgKLSAgICBlbHNlOgotICAgICAgICBpZiBwYXRoWzA6MV0gPT0gb3Muc2VwOgotICAgICAgICAgICAgcGF0aCA9IGRyaXZlICsgcGF0aFsxOl0KLSAgICAgICAgcmV0dXJuIHBhdGgKKyAgICBpZiBwYXRoWzA6MV0gPT0gb3Muc2VwOgorICAgICAgICBwYXRoID0gZHJpdmUgKyBwYXRoWzE6XQorICAgIHJldHVybiBwYXRoCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKaW5kZXggMzAyNjBmMy4uNTk3OTA5ZSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZGlzdC5weQpAQCAtNCwyMCArNCwxOCBAQAogYmVpbmcgYnVpbHQvaW5zdGFsbGVkL2Rpc3RyaWJ1dGVkLgogIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgc3lzLCBvcywgc3RyaW5nLCByZQotZnJvbSB0eXBlcyBpbXBvcnQgKgotZnJvbSBjb3B5IGltcG9ydCBjb3B5CitpbXBvcnQgc3lzLCBvcywgcmUKK2Zyb20gZW1haWwgaW1wb3J0IG1lc3NhZ2VfZnJvbV9maWxlCiAKIHRyeToKICAgICBpbXBvcnQgd2FybmluZ3MKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB3YXJuaW5ncyA9IE5vbmUKIAotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IChEaXN0dXRpbHNPcHRpb25FcnJvciwgRGlzdHV0aWxzQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0dXRpbHNNb2R1bGVFcnJvciwgRGlzdHV0aWxzQ2xhc3NFcnJvcikKIGZyb20gZGlzdHV0aWxzLmZhbmN5X2dldG9wdCBpbXBvcnQgRmFuY3lHZXRvcHQsIHRyYW5zbGF0ZV9sb25nb3B0CiBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBjaGVja19lbnZpcm9uLCBzdHJ0b2Jvb2wsIHJmYzgyMl9lc2NhcGUKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKQEAgLTYwLDcgKzU4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAoJ3F1aWV0JywgJ3EnLCAicnVuIHF1aWV0bHkgKHR1cm5zIHZlcmJvc2l0eSBvZmYpIiksCiAgICAgICAgICAgICAgICAgICAgICAgKCdkcnktcnVuJywgJ24nLCAiZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmciKSwKICAgICAgICAgICAgICAgICAgICAgICAoJ2hlbHAnLCAnaCcsICJzaG93IGRldGFpbGVkIGhlbHAgbWVzc2FnZSIpLAotICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICgnbm8tdXNlci1jZmcnLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAnaWdub3JlIHB5ZGlzdHV0aWxzLmNmZyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5JyksCisgICAgXQogCiAgICAgIyAnY29tbW9uX3VzYWdlJyBpcyBhIHNob3J0ICgyLTMgbGluZSkgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNvbW1vbgogICAgICMgdXNhZ2Ugb2YgdGhlIHNldHVwIHNjcmlwdC4KQEAgLTIwNiw2ICsyMDYsNyBAQAogICAgICAgICBzZWxmLmV4dHJhX3BhdGggPSBOb25lCiAgICAgICAgIHNlbGYuc2NyaXB0cyA9IE5vbmUKICAgICAgICAgc2VsZi5kYXRhX2ZpbGVzID0gTm9uZQorICAgICAgICBzZWxmLnBhc3N3b3JkID0gJycKIAogICAgICAgICAjIEFuZCBub3cgaW5pdGlhbGl6ZSBib29ra2VlcGluZyBzdHVmZiB0aGF0IGNhbid0IGJlIHN1cHBsaWVkIGJ5CiAgICAgICAgICMgdGhlIGNhbGxlciBhdCBhbGwuICAnY29tbWFuZF9vYmonIG1hcHMgY29tbWFuZCBuYW1lcyB0bwpAQCAtMjUzLDcgKzI1NCw3IEBACiAKICAgICAgICAgICAgICMgTm93IHdvcmsgb24gdGhlIHJlc3Qgb2YgdGhlIGF0dHJpYnV0ZXMuICBBbnkgYXR0cmlidXRlIHRoYXQncwogICAgICAgICAgICAgIyBub3QgYWxyZWFkeSBkZWZpbmVkIGlzIGludmFsaWQhCi0gICAgICAgICAgICBmb3IgKGtleSx2YWwpIGluIGF0dHJzLml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgKGtleSwgdmFsKSBpbiBhdHRycy5pdGVtcygpOgogICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5tZXRhZGF0YSwgInNldF8iICsga2V5KToKICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLm1ldGFkYXRhLCAic2V0XyIgKyBrZXkpKHZhbCkKICAgICAgICAgICAgICAgICBlbGlmIGhhc2F0dHIoc2VsZi5tZXRhZGF0YSwga2V5KToKQEAgLTI2NywyNSArMjY4LDM2IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZyArICJcbiIpCiAKKyAgICAgICAgIyBuby11c2VyLWNmZyBpcyBoYW5kbGVkIGJlZm9yZSBvdGhlciBjb21tYW5kIGxpbmUgYXJncworICAgICAgICAjIGJlY2F1c2Ugb3RoZXIgYXJncyBvdmVycmlkZSB0aGUgY29uZmlnIGZpbGVzLCBhbmQgdGhpcworICAgICAgICAjIG9uZSBpcyBuZWVkZWQgYmVmb3JlIHdlIGNhbiBsb2FkIHRoZSBjb25maWcgZmlsZXMuCisgICAgICAgICMgSWYgYXR0cnNbJ3NjcmlwdF9hcmdzJ10gd2Fzbid0IHBhc3NlZCwgYXNzdW1lIGZhbHNlLgorICAgICAgICAjCisgICAgICAgICMgVGhpcyBhbHNvIG1ha2Ugc3VyZSB3ZSBqdXN0IGxvb2sgYXQgdGhlIGdsb2JhbCBvcHRpb25zCisgICAgICAgIHNlbGYud2FudF91c2VyX2NmZyA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnNjcmlwdF9hcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLnNjcmlwdF9hcmdzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBhcmcuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGFyZyA9PSAnLS1uby11c2VyLWNmZyc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYud2FudF91c2VyX2NmZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgc2VsZi5maW5hbGl6ZV9vcHRpb25zKCkKIAotICAgICMgX19pbml0X18gKCkKLQotCi0gICAgZGVmIGdldF9vcHRpb25fZGljdCAoc2VsZiwgY29tbWFuZCk6CisgICAgZGVmIGdldF9vcHRpb25fZGljdChzZWxmLCBjb21tYW5kKToKICAgICAgICAgIiIiR2V0IHRoZSBvcHRpb24gZGljdGlvbmFyeSBmb3IgYSBnaXZlbiBjb21tYW5kLiAgSWYgdGhhdAogICAgICAgICBjb21tYW5kJ3Mgb3B0aW9uIGRpY3Rpb25hcnkgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQsIHRoZW4gY3JlYXRlIGl0CiAgICAgICAgIGFuZCByZXR1cm4gdGhlIG5ldyBkaWN0aW9uYXJ5OyBvdGhlcndpc2UsIHJldHVybiB0aGUgZXhpc3RpbmcKICAgICAgICAgb3B0aW9uIGRpY3Rpb25hcnkuCiAgICAgICAgICIiIgotCiAgICAgICAgIGRpY3QgPSBzZWxmLmNvbW1hbmRfb3B0aW9ucy5nZXQoY29tbWFuZCkKICAgICAgICAgaWYgZGljdCBpcyBOb25lOgogICAgICAgICAgICAgZGljdCA9IHNlbGYuY29tbWFuZF9vcHRpb25zW2NvbW1hbmRdID0ge30KICAgICAgICAgcmV0dXJuIGRpY3QKIAotCi0gICAgZGVmIGR1bXBfb3B0aW9uX2RpY3RzIChzZWxmLCBoZWFkZXI9Tm9uZSwgY29tbWFuZHM9Tm9uZSwgaW5kZW50PSIiKToKKyAgICBkZWYgZHVtcF9vcHRpb25fZGljdHMoc2VsZiwgaGVhZGVyPU5vbmUsIGNvbW1hbmRzPU5vbmUsIGluZGVudD0iIik6CiAgICAgICAgIGZyb20gcHByaW50IGltcG9ydCBwZm9ybWF0CiAKICAgICAgICAgaWYgY29tbWFuZHMgaXMgTm9uZTogICAgICAgICAgICAgIyBkdW1wIGFsbCBjb21tYW5kIG9wdGlvbiBkaWN0cwpAQCAtMjkzLDMwICszMDUsMjggQEAKICAgICAgICAgICAgIGNvbW1hbmRzLnNvcnQoKQogCiAgICAgICAgIGlmIGhlYWRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHByaW50IGluZGVudCArIGhlYWRlcgorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShpbmRlbnQgKyBoZWFkZXIpCiAgICAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgKyAiICAiCiAKICAgICAgICAgaWYgbm90IGNvbW1hbmRzOgotICAgICAgICAgICAgcHJpbnQgaW5kZW50ICsgIm5vIGNvbW1hbmRzIGtub3duIHlldCIKKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoaW5kZW50ICsgIm5vIGNvbW1hbmRzIGtub3duIHlldCIpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBmb3IgY21kX25hbWUgaW4gY29tbWFuZHM6CiAgICAgICAgICAgICBvcHRfZGljdCA9IHNlbGYuY29tbWFuZF9vcHRpb25zLmdldChjbWRfbmFtZSkKICAgICAgICAgICAgIGlmIG9wdF9kaWN0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQgaW5kZW50ICsgIm5vIG9wdGlvbiBkaWN0IGZvciAnJXMnIGNvbW1hbmQiICUgY21kX25hbWUKKyAgICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKGluZGVudCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gb3B0aW9uIGRpY3QgZm9yICclcycgY29tbWFuZCIgJSBjbWRfbmFtZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgaW5kZW50ICsgIm9wdGlvbiBkaWN0IGZvciAnJXMnIGNvbW1hbmQ6IiAlIGNtZF9uYW1lCisgICAgICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShpbmRlbnQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbiBkaWN0IGZvciAnJXMnIGNvbW1hbmQ6IiAlIGNtZF9uYW1lKQogICAgICAgICAgICAgICAgIG91dCA9IHBmb3JtYXQob3B0X2RpY3QpCi0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc3RyaW5nLnNwbGl0KG91dCwgIlxuIik6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50IGluZGVudCArICIgICIgKyBsaW5lCi0KLSAgICAjIGR1bXBfb3B0aW9uX2RpY3RzICgpCi0KLQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIG91dC5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShpbmRlbnQgKyAiICAiICsgbGluZSkKIAogICAgICMgLS0gQ29uZmlnIGZpbGUgZmluZGluZy9wYXJzaW5nIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgZmluZF9jb25maWdfZmlsZXMgKHNlbGYpOgorICAgIGRlZiBmaW5kX2NvbmZpZ19maWxlcyhzZWxmKToKICAgICAgICAgIiIiRmluZCBhcyBtYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgYXMgc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhpcwogICAgICAgICBwbGF0Zm9ybSwgYW5kIHJldHVybiBhIGxpc3Qgb2YgZmlsZW5hbWVzIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5CiAgICAgICAgIHNob3VsZCBiZSBwYXJzZWQuICBUaGUgZmlsZW5hbWVzIHJldHVybmVkIGFyZSBndWFyYW50ZWVkIHRvIGV4aXN0CkBAIC0zMjYsNyArMzM2LDEwIEBACiAgICAgICAgIERpc3R1dGlscyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IChpZS4gd2hlcmUgdGhlIHRvcC1sZXZlbAogICAgICAgICBEaXN0dXRpbHMgX19pbnN0X18ucHkgZmlsZSBsaXZlcyksIGEgZmlsZSBpbiB0aGUgdXNlcidzIGhvbWUKICAgICAgICAgZGlyZWN0b3J5IG5hbWVkIC5weWRpc3R1dGlscy5jZmcgb24gVW5peCBhbmQgcHlkaXN0dXRpbHMuY2ZnCi0gICAgICAgIG9uIFdpbmRvd3MvTWFjLCBhbmQgc2V0dXAuY2ZnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgb24gV2luZG93cy9NYWM7IGFuZCBzZXR1cC5jZmcgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisgICAgICAgIFRoZSBmaWxlIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlCisgICAgICAgIC0tbm8tdXNlci1jZmcgb3B0aW9uLgogICAgICAgICAiIiIKICAgICAgICAgZmlsZXMgPSBbXQogICAgICAgICBjaGVja19lbnZpcm9uKCkKQEAgLTM0NiwzMSArMzU5LDM0IEBACiAgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gInB5ZGlzdHV0aWxzLmNmZyIKIAogICAgICAgICAjIEFuZCBsb29rIGZvciB0aGUgdXNlciBjb25maWcgZmlsZQotICAgICAgICB1c2VyX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksIHVzZXJfZmlsZW5hbWUpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHVzZXJfZmlsZSk6Ci0gICAgICAgICAgICBmaWxlcy5hcHBlbmQodXNlcl9maWxlKQorICAgICAgICBpZiBzZWxmLndhbnRfdXNlcl9jZmc6CisgICAgICAgICAgICB1c2VyX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksIHVzZXJfZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh1c2VyX2ZpbGUpOgorICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZCh1c2VyX2ZpbGUpCiAKICAgICAgICAgIyBBbGwgcGxhdGZvcm1zIHN1cHBvcnQgbG9jYWwgc2V0dXAuY2ZnCiAgICAgICAgIGxvY2FsX2ZpbGUgPSAic2V0dXAuY2ZnIgogICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShsb2NhbF9maWxlKToKICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChsb2NhbF9maWxlKQogCisgICAgICAgIGlmIERFQlVHOgorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgidXNpbmcgY29uZmlnIGZpbGVzOiAlcyIgJSAnLCAnLmpvaW4oZmlsZXMpKQorCiAgICAgICAgIHJldHVybiBmaWxlcwogCi0gICAgIyBmaW5kX2NvbmZpZ19maWxlcyAoKQotCi0KLSAgICBkZWYgcGFyc2VfY29uZmlnX2ZpbGVzIChzZWxmLCBmaWxlbmFtZXM9Tm9uZSk6CisgICAgZGVmIHBhcnNlX2NvbmZpZ19maWxlcyhzZWxmLCBmaWxlbmFtZXM9Tm9uZSk6CiAgICAgICAgIGZyb20gQ29uZmlnUGFyc2VyIGltcG9ydCBDb25maWdQYXJzZXIKIAogICAgICAgICBpZiBmaWxlbmFtZXMgaXMgTm9uZToKICAgICAgICAgICAgIGZpbGVuYW1lcyA9IHNlbGYuZmluZF9jb25maWdfZmlsZXMoKQogCi0gICAgICAgIGlmIERFQlVHOiBwcmludCAiRGlzdHJpYnV0aW9uLnBhcnNlX2NvbmZpZ19maWxlcygpOiIKKyAgICAgICAgaWYgREVCVUc6CisgICAgICAgICAgICBzZWxmLmFubm91bmNlKCJEaXN0cmlidXRpb24ucGFyc2VfY29uZmlnX2ZpbGVzKCk6IikKIAogICAgICAgICBwYXJzZXIgPSBDb25maWdQYXJzZXIoKQogICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgotICAgICAgICAgICAgaWYgREVCVUc6IHByaW50ICIgIHJlYWRpbmciLCBmaWxlbmFtZQorICAgICAgICAgICAgaWYgREVCVUc6CisgICAgICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgiICByZWFkaW5nICVzIiAlIGZpbGVuYW1lKQogICAgICAgICAgICAgcGFyc2VyLnJlYWQoZmlsZW5hbWUpCiAgICAgICAgICAgICBmb3Igc2VjdGlvbiBpbiBwYXJzZXIuc2VjdGlvbnMoKToKICAgICAgICAgICAgICAgICBvcHRpb25zID0gcGFyc2VyLm9wdGlvbnMoc2VjdGlvbikKQEAgLTM3OSw3ICszOTUsNyBAQAogICAgICAgICAgICAgICAgIGZvciBvcHQgaW4gb3B0aW9uczoKICAgICAgICAgICAgICAgICAgICAgaWYgb3B0ICE9ICdfX25hbWVfXyc6CiAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBwYXJzZXIuZ2V0KHNlY3Rpb24sb3B0KQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0ID0gc3RyaW5nLnJlcGxhY2Uob3B0LCAnLScsICdfJykKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdCA9IG9wdC5yZXBsYWNlKCctJywgJ18nKQogICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2RpY3Rbb3B0XSA9IChmaWxlbmFtZSwgdmFsKQogCiAgICAgICAgICAgICAjIE1ha2UgdGhlIENvbmZpZ1BhcnNlciBmb3JnZXQgZXZlcnl0aGluZyAoc28gd2UgcmV0YWluCkBAIC00MDIsMTIgKzQxOCw5IEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIG1zZzoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzT3B0aW9uRXJyb3IsIG1zZwogCi0gICAgIyBwYXJzZV9jb25maWdfZmlsZXMgKCkKLQotCiAgICAgIyAtLSBDb21tYW5kLWxpbmUgcGFyc2luZyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiBwYXJzZV9jb21tYW5kX2xpbmUgKHNlbGYpOgorICAgIGRlZiBwYXJzZV9jb21tYW5kX2xpbmUoc2VsZik6CiAgICAgICAgICIiIlBhcnNlIHRoZSBzZXR1cCBzY3JpcHQncyBjb21tYW5kIGxpbmUsIHRha2VuIGZyb20gdGhlCiAgICAgICAgICdzY3JpcHRfYXJncycgaW5zdGFuY2UgYXR0cmlidXRlICh3aGljaCBkZWZhdWx0cyB0byAnc3lzLmFyZ3ZbMTpdJwogICAgICAgICAtLSBzZWUgJ3NldHVwKCknIGluIGNvcmUucHkpLiAgVGhpcyBsaXN0IGlzIGZpcnN0IHByb2Nlc3NlZCBmb3IKQEAgLTQzMSwxMSArNDQ0LDYgQEAKICAgICAgICAgIyB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBpbnRlcmFjdGl2ZWx5IHNwZWNpZnkgdGhlICJjb21tYW5kIGxpbmUiLgogICAgICAgICAjCiAgICAgICAgIHRvcGxldmVsX29wdGlvbnMgPSBzZWxmLl9nZXRfdG9wbGV2ZWxfb3B0aW9ucygpCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnbWFjJzoKLSAgICAgICAgICAgIGltcG9ydCBFYXN5RGlhbG9ncwotICAgICAgICAgICAgY21kbGlzdCA9IHNlbGYuZ2V0X2NvbW1hbmRfbGlzdCgpCi0gICAgICAgICAgICBzZWxmLnNjcmlwdF9hcmdzID0gRWFzeURpYWxvZ3MuR2V0QXJndigKLSAgICAgICAgICAgICAgICB0b3BsZXZlbF9vcHRpb25zICsgc2VsZi5kaXNwbGF5X29wdGlvbnMsIGNtZGxpc3QpCiAKICAgICAgICAgIyBXZSBoYXZlIHRvIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYSBiaXQgYXQgYSB0aW1lIC0tIGdsb2JhbAogICAgICAgICAjIG9wdGlvbnMsIHRoZW4gdGhlIGZpcnN0IGNvbW1hbmQsIHRoZW4gaXRzIG9wdGlvbnMsIGFuZCBzbyBvbiAtLQpAQCAtNDU1LDcgKzQ2Myw2IEBACiAgICAgICAgICMgZm9yIGRpc3BsYXkgb3B0aW9ucyB3ZSByZXR1cm4gaW1tZWRpYXRlbHkKICAgICAgICAgaWYgc2VsZi5oYW5kbGVfZGlzcGxheV9vcHRpb25zKG9wdGlvbl9vcmRlcik6CiAgICAgICAgICAgICByZXR1cm4KLQogICAgICAgICB3aGlsZSBhcmdzOgogICAgICAgICAgICAgYXJncyA9IHNlbGYuX3BhcnNlX2NvbW1hbmRfb3B0cyhwYXJzZXIsIGFyZ3MpCiAgICAgICAgICAgICBpZiBhcmdzIGlzIE5vbmU6ICAgICAgICAgICAgIyB1c2VyIGFza2VkIGZvciBoZWxwIChhbmQgZ290IGl0KQpAQCAtNDgwLDkgKzQ4Nyw3IEBACiAgICAgICAgICMgQWxsIGlzIHdlbGw6IHJldHVybiB0cnVlCiAgICAgICAgIHJldHVybiAxCiAKLSAgICAjIHBhcnNlX2NvbW1hbmRfbGluZSgpCi0KLSAgICBkZWYgX2dldF90b3BsZXZlbF9vcHRpb25zIChzZWxmKToKKyAgICBkZWYgX2dldF90b3BsZXZlbF9vcHRpb25zKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG5vbi1kaXNwbGF5IG9wdGlvbnMgcmVjb2duaXplZCBhdCB0aGUgdG9wIGxldmVsLgogCiAgICAgICAgIFRoaXMgaW5jbHVkZXMgb3B0aW9ucyB0aGF0IGFyZSByZWNvZ25pemVkICpvbmx5KiBhdCB0aGUgdG9wCkBAIC00OTMsNyArNDk4LDcgQEAKICAgICAgICAgICAgICAibGlzdCBvZiBwYWNrYWdlcyB0aGF0IHByb3ZpZGUgZGlzdHV0aWxzIGNvbW1hbmRzIiksCiAgICAgICAgICAgICBdCiAKLSAgICBkZWYgX3BhcnNlX2NvbW1hbmRfb3B0cyAoc2VsZiwgcGFyc2VyLCBhcmdzKToKKyAgICBkZWYgX3BhcnNlX2NvbW1hbmRfb3B0cyhzZWxmLCBwYXJzZXIsIGFyZ3MpOgogICAgICAgICAiIiJQYXJzZSB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGEgc2luZ2xlIGNvbW1hbmQuCiAgICAgICAgICdwYXJzZXInIG11c3QgYmUgYSBGYW5jeUdldG9wdCBpbnN0YW5jZTsgJ2FyZ3MnIG11c3QgYmUgdGhlIGxpc3QKICAgICAgICAgb2YgYXJndW1lbnRzLCBzdGFydGluZyB3aXRoIHRoZSBjdXJyZW50IGNvbW1hbmQgKHdob3NlIG9wdGlvbnMKQEAgLTUyOCw3ICs1MzMsNyBAQAogICAgICAgICAjIEFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbW1hbmQgb2JqZWN0IHByb3ZpZGVzIGEgbGlzdCBvZiBpdHMKICAgICAgICAgIyBrbm93biBvcHRpb25zLgogICAgICAgICBpZiBub3QgKGhhc2F0dHIoY21kX2NsYXNzLCAndXNlcl9vcHRpb25zJykgYW5kCi0gICAgICAgICAgICAgICAgdHlwZShjbWRfY2xhc3MudXNlcl9vcHRpb25zKSBpcyBMaXN0VHlwZSk6CisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShjbWRfY2xhc3MudXNlcl9vcHRpb25zLCBsaXN0KSk6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNDbGFzc0Vycm9yLCBcCiAgICAgICAgICAgICAgICAgICAoImNvbW1hbmQgY2xhc3MgJXMgbXVzdCBwcm92aWRlICIgKwogICAgICAgICAgICAgICAgICAgICIndXNlcl9vcHRpb25zJyBhdHRyaWJ1dGUgKGEgbGlzdCBvZiB0dXBsZXMpIikgJSBcCkBAIC01MzgsMTMgKzU0MywxMyBAQAogICAgICAgICAjIG1lcmdlIGl0IGluIHdpdGggdGhlIGdsb2JhbCBuZWdhdGl2ZSBhbGlhc2VzLgogICAgICAgICBuZWdhdGl2ZV9vcHQgPSBzZWxmLm5lZ2F0aXZlX29wdAogICAgICAgICBpZiBoYXNhdHRyKGNtZF9jbGFzcywgJ25lZ2F0aXZlX29wdCcpOgotICAgICAgICAgICAgbmVnYXRpdmVfb3B0ID0gY29weShuZWdhdGl2ZV9vcHQpCisgICAgICAgICAgICBuZWdhdGl2ZV9vcHQgPSBuZWdhdGl2ZV9vcHQuY29weSgpCiAgICAgICAgICAgICBuZWdhdGl2ZV9vcHQudXBkYXRlKGNtZF9jbGFzcy5uZWdhdGl2ZV9vcHQpCiAKICAgICAgICAgIyBDaGVjayBmb3IgaGVscF9vcHRpb25zIGluIGNvbW1hbmQgY2xhc3MuICBUaGV5IGhhdmUgYSBkaWZmZXJlbnQKICAgICAgICAgIyBmb3JtYXQgKHR1cGxlIG9mIGZvdXIpIHNvIHdlIG5lZWQgdG8gcHJlcHJvY2VzcyB0aGVtIGhlcmUuCiAgICAgICAgIGlmIChoYXNhdHRyKGNtZF9jbGFzcywgJ2hlbHBfb3B0aW9ucycpIGFuZAotICAgICAgICAgICAgdHlwZShjbWRfY2xhc3MuaGVscF9vcHRpb25zKSBpcyBMaXN0VHlwZSk6CisgICAgICAgICAgICBpc2luc3RhbmNlKGNtZF9jbGFzcy5oZWxwX29wdGlvbnMsIGxpc3QpKToKICAgICAgICAgICAgIGhlbHBfb3B0aW9ucyA9IGZpeF9oZWxwX29wdGlvbnMoY21kX2NsYXNzLmhlbHBfb3B0aW9ucykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGhlbHBfb3B0aW9ucyA9IFtdCkBAIC01NjIsMTUgKzU2NywxMiBAQAogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgaWYgKGhhc2F0dHIoY21kX2NsYXNzLCAnaGVscF9vcHRpb25zJykgYW5kCi0gICAgICAgICAgICB0eXBlKGNtZF9jbGFzcy5oZWxwX29wdGlvbnMpIGlzIExpc3RUeXBlKToKKyAgICAgICAgICAgIGlzaW5zdGFuY2UoY21kX2NsYXNzLmhlbHBfb3B0aW9ucywgbGlzdCkpOgogICAgICAgICAgICAgaGVscF9vcHRpb25fZm91bmQ9MAogICAgICAgICAgICAgZm9yIChoZWxwX29wdGlvbiwgc2hvcnQsIGRlc2MsIGZ1bmMpIGluIGNtZF9jbGFzcy5oZWxwX29wdGlvbnM6CiAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihvcHRzLCBwYXJzZXIuZ2V0X2F0dHJfbmFtZShoZWxwX29wdGlvbikpOgogICAgICAgICAgICAgICAgICAgICBoZWxwX29wdGlvbl9mb3VuZD0xCi0gICAgICAgICAgICAgICAgICAgICNwcmludCAic2hvd2luZyBoZWxwIGZvciBvcHRpb24gJXMgb2YgY29tbWFuZCAlcyIgJSBcCi0gICAgICAgICAgICAgICAgICAgICMgICAgICAoaGVscF9vcHRpb25bMF0sY21kX2NsYXNzKQotCi0gICAgICAgICAgICAgICAgICAgIGlmIGNhbGxhYmxlKGZ1bmMpOgorICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZ1bmMsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgICAgICAgICAgICAgZnVuYygpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNDbGFzc0Vycm9yKApAQCAtNTg5LDMxICs1OTEsMjEgQEAKIAogICAgICAgICByZXR1cm4gYXJncwogCi0gICAgIyBfcGFyc2VfY29tbWFuZF9vcHRzICgpCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgICIiIlNldCBmaW5hbCB2YWx1ZXMgZm9yIGFsbCB0aGUgb3B0aW9ucyBvbiB0aGUgRGlzdHJpYnV0aW9uCiAgICAgICAgIGluc3RhbmNlLCBhbmFsb2dvdXMgdG8gdGhlIC5maW5hbGl6ZV9vcHRpb25zKCkgbWV0aG9kIG9mIENvbW1hbmQKICAgICAgICAgb2JqZWN0cy4KICAgICAgICAgIiIiCisgICAgICAgIGZvciBhdHRyIGluICgna2V5d29yZHMnLCAncGxhdGZvcm1zJyk6CisgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoc2VsZi5tZXRhZGF0YSwgYXR0cikKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBbZWxtLnN0cmlwKCkgZm9yIGVsbSBpbiB2YWx1ZS5zcGxpdCgnLCcpXQorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZi5tZXRhZGF0YSwgYXR0ciwgdmFsdWUpCiAKLSAgICAgICAga2V5d29yZHMgPSBzZWxmLm1ldGFkYXRhLmtleXdvcmRzCi0gICAgICAgIGlmIGtleXdvcmRzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdHlwZShrZXl3b3JkcykgaXMgU3RyaW5nVHlwZToKLSAgICAgICAgICAgICAgICBrZXl3b3JkbGlzdCA9IHN0cmluZy5zcGxpdChrZXl3b3JkcywgJywnKQotICAgICAgICAgICAgICAgIHNlbGYubWV0YWRhdGEua2V5d29yZHMgPSBtYXAoc3RyaW5nLnN0cmlwLCBrZXl3b3JkbGlzdCkKLQotICAgICAgICBwbGF0Zm9ybXMgPSBzZWxmLm1ldGFkYXRhLnBsYXRmb3JtcwotICAgICAgICBpZiBwbGF0Zm9ybXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiB0eXBlKHBsYXRmb3JtcykgaXMgU3RyaW5nVHlwZToKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybWxpc3QgPSBzdHJpbmcuc3BsaXQocGxhdGZvcm1zLCAnLCcpCi0gICAgICAgICAgICAgICAgc2VsZi5tZXRhZGF0YS5wbGF0Zm9ybXMgPSBtYXAoc3RyaW5nLnN0cmlwLCBwbGF0Zm9ybWxpc3QpCi0KLSAgICBkZWYgX3Nob3dfaGVscCAoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICBnbG9iYWxfb3B0aW9ucz0xLAotICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X29wdGlvbnM9MSwKLSAgICAgICAgICAgICAgICAgICAgY29tbWFuZHM9W10pOgorICAgIGRlZiBfc2hvd19oZWxwKHNlbGYsIHBhcnNlciwgZ2xvYmFsX29wdGlvbnM9MSwgZGlzcGxheV9vcHRpb25zPTEsCisgICAgICAgICAgICAgICAgICAgY29tbWFuZHM9W10pOgogICAgICAgICAiIiJTaG93IGhlbHAgZm9yIHRoZSBzZXR1cCBzY3JpcHQgY29tbWFuZC1saW5lIGluIHRoZSBmb3JtIG9mCiAgICAgICAgIHNldmVyYWwgbGlzdHMgb2YgY29tbWFuZC1saW5lIG9wdGlvbnMuICAncGFyc2VyJyBzaG91bGQgYmUgYQogICAgICAgICBGYW5jeUdldG9wdCBpbnN0YW5jZTsgZG8gbm90IGV4cGVjdCBpdCB0byBiZSByZXR1cm5lZCBpbiB0aGUKQEAgLTYzNywzNiArNjI5LDMyIEBACiAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHNlbGYuZ2xvYmFsX29wdGlvbnMKICAgICAgICAgICAgIHBhcnNlci5zZXRfb3B0aW9uX3RhYmxlKG9wdGlvbnMpCiAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscChzZWxmLmNvbW1vbl91c2FnZSArICJcbkdsb2JhbCBvcHRpb25zOiIpCi0gICAgICAgICAgICBwcmludAorICAgICAgICAgICAgcHJpbnQoJycpCiAKICAgICAgICAgaWYgZGlzcGxheV9vcHRpb25zOgogICAgICAgICAgICAgcGFyc2VyLnNldF9vcHRpb25fdGFibGUoc2VsZi5kaXNwbGF5X29wdGlvbnMpCiAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgKICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpb24gZGlzcGxheSBvcHRpb25zIChqdXN0IGRpc3BsYXkgIiArCiAgICAgICAgICAgICAgICAgImluZm9ybWF0aW9uLCBpZ25vcmUgYW55IGNvbW1hbmRzKSIpCi0gICAgICAgICAgICBwcmludAorICAgICAgICAgICAgcHJpbnQoJycpCiAKICAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kczoKLSAgICAgICAgICAgIGlmIHR5cGUoY29tbWFuZCkgaXMgQ2xhc3NUeXBlIGFuZCBpc3N1YmNsYXNzKGNvbW1hbmQsIENvbW1hbmQpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb21tYW5kLCB0eXBlKSBhbmQgaXNzdWJjbGFzcyhjb21tYW5kLCBDb21tYW5kKToKICAgICAgICAgICAgICAgICBrbGFzcyA9IGNvbW1hbmQKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAga2xhc3MgPSBzZWxmLmdldF9jb21tYW5kX2NsYXNzKGNvbW1hbmQpCiAgICAgICAgICAgICBpZiAoaGFzYXR0cihrbGFzcywgJ2hlbHBfb3B0aW9ucycpIGFuZAotICAgICAgICAgICAgICAgIHR5cGUoa2xhc3MuaGVscF9vcHRpb25zKSBpcyBMaXN0VHlwZSk6CisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShrbGFzcy5oZWxwX29wdGlvbnMsIGxpc3QpKToKICAgICAgICAgICAgICAgICBwYXJzZXIuc2V0X29wdGlvbl90YWJsZShrbGFzcy51c2VyX29wdGlvbnMgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeF9oZWxwX29wdGlvbnMoa2xhc3MuaGVscF9vcHRpb25zKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGFyc2VyLnNldF9vcHRpb25fdGFibGUoa2xhc3MudXNlcl9vcHRpb25zKQogICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoIk9wdGlvbnMgZm9yICclcycgY29tbWFuZDoiICUga2xhc3MuX19uYW1lX18pCi0gICAgICAgICAgICBwcmludAorICAgICAgICAgICAgcHJpbnQoJycpCiAKLSAgICAgICAgcHJpbnQgZ2VuX3VzYWdlKHNlbGYuc2NyaXB0X25hbWUpCi0gICAgICAgIHJldHVybgorICAgICAgICBwcmludChnZW5fdXNhZ2Uoc2VsZi5zY3JpcHRfbmFtZSkpCiAKLSAgICAjIF9zaG93X2hlbHAgKCkKLQotCi0gICAgZGVmIGhhbmRsZV9kaXNwbGF5X29wdGlvbnMgKHNlbGYsIG9wdGlvbl9vcmRlcik6CisgICAgZGVmIGhhbmRsZV9kaXNwbGF5X29wdGlvbnMoc2VsZiwgb3B0aW9uX29yZGVyKToKICAgICAgICAgIiIiSWYgdGhlcmUgd2VyZSBhbnkgbm9uLWdsb2JhbCAiZGlzcGxheS1vbmx5IiBvcHRpb25zCiAgICAgICAgICgtLWhlbHAtY29tbWFuZHMgb3IgdGhlIG1ldGFkYXRhIGRpc3BsYXkgb3B0aW9ucykgb24gdGhlIGNvbW1hbmQKICAgICAgICAgbGluZSwgZGlzcGxheSB0aGUgcmVxdWVzdGVkIGluZm8gYW5kIHJldHVybiB0cnVlOyBlbHNlIHJldHVybgpAQCAtNjc5LDggKzY2Nyw4IEBACiAgICAgICAgICMgd2UgaWdub3JlICJmb28gYmFyIikuCiAgICAgICAgIGlmIHNlbGYuaGVscF9jb21tYW5kczoKICAgICAgICAgICAgIHNlbGYucHJpbnRfY29tbWFuZHMoKQotICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgIHByaW50IGdlbl91c2FnZShzZWxmLnNjcmlwdF9uYW1lKQorICAgICAgICAgICAgcHJpbnQoJycpCisgICAgICAgICAgICBwcmludChnZW5fdXNhZ2Uoc2VsZi5zY3JpcHRfbmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gMQogCiAgICAgICAgICMgSWYgdXNlciBzdXBwbGllZCBhbnkgb2YgdGhlICJkaXNwbGF5IG1ldGFkYXRhIiBvcHRpb25zLCB0aGVuCkBAIC02OTYsMjQgKzY4NCwyMSBAQAogICAgICAgICAgICAgICAgIG9wdCA9IHRyYW5zbGF0ZV9sb25nb3B0KG9wdCkKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoc2VsZi5tZXRhZGF0YSwgImdldF8iK29wdCkoKQogICAgICAgICAgICAgICAgIGlmIG9wdCBpbiBbJ2tleXdvcmRzJywgJ3BsYXRmb3JtcyddOgotICAgICAgICAgICAgICAgICAgICBwcmludCBzdHJpbmcuam9pbih2YWx1ZSwgJywnKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnLCcuam9pbih2YWx1ZSkpCiAgICAgICAgICAgICAgICAgZWxpZiBvcHQgaW4gKCdjbGFzc2lmaWVycycsICdwcm92aWRlcycsICdyZXF1aXJlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvYnNvbGV0ZXMnKToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgc3RyaW5nLmpvaW4odmFsdWUsICdcbicpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdcbicuam9pbih2YWx1ZSkpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQodmFsdWUpCiAgICAgICAgICAgICAgICAgYW55X2Rpc3BsYXlfb3B0aW9ucyA9IDEKIAogICAgICAgICByZXR1cm4gYW55X2Rpc3BsYXlfb3B0aW9ucwogCi0gICAgIyBoYW5kbGVfZGlzcGxheV9vcHRpb25zKCkKLQotICAgIGRlZiBwcmludF9jb21tYW5kX2xpc3QgKHNlbGYsIGNvbW1hbmRzLCBoZWFkZXIsIG1heF9sZW5ndGgpOgorICAgIGRlZiBwcmludF9jb21tYW5kX2xpc3Qoc2VsZiwgY29tbWFuZHMsIGhlYWRlciwgbWF4X2xlbmd0aCk6CiAgICAgICAgICIiIlByaW50IGEgc3Vic2V0IG9mIHRoZSBsaXN0IG9mIGFsbCBjb21tYW5kcyAtLSB1c2VkIGJ5CiAgICAgICAgICdwcmludF9jb21tYW5kcygpJy4KICAgICAgICAgIiIiCi0KLSAgICAgICAgcHJpbnQgaGVhZGVyICsgIjoiCisgICAgICAgIHByaW50KGhlYWRlciArICI6IikKIAogICAgICAgICBmb3IgY21kIGluIGNvbW1hbmRzOgogICAgICAgICAgICAga2xhc3MgPSBzZWxmLmNtZGNsYXNzLmdldChjbWQpCkBAIC03MjQsMTIgKzcwOSw5IEBACiAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiKG5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZSkiCiAKLSAgICAgICAgICAgIHByaW50ICIgICUtKnMgICVzIiAlIChtYXhfbGVuZ3RoLCBjbWQsIGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgcHJpbnQoIiAgJS0qcyAgJXMiICUgKG1heF9sZW5ndGgsIGNtZCwgZGVzY3JpcHRpb24pKQogCi0gICAgIyBwcmludF9jb21tYW5kX2xpc3QgKCkKLQotCi0gICAgZGVmIHByaW50X2NvbW1hbmRzIChzZWxmKToKKyAgICBkZWYgcHJpbnRfY29tbWFuZHMoc2VsZik6CiAgICAgICAgICIiIlByaW50IG91dCBhIGhlbHAgbWVzc2FnZSBsaXN0aW5nIGFsbCBhdmFpbGFibGUgY29tbWFuZHMgd2l0aCBhCiAgICAgICAgIGRlc2NyaXB0aW9uIG9mIGVhY2guICBUaGUgbGlzdCBpcyBkaXZpZGVkIGludG8gInN0YW5kYXJkIGNvbW1hbmRzIgogICAgICAgICAobGlzdGVkIGluIGRpc3R1dGlscy5jb21tYW5kLl9fYWxsX18pIGFuZCAiZXh0cmEgY29tbWFuZHMiCkBAIC03MzcsNyArNzE5LDYgQEAKICAgICAgICAgZGVzY3JpcHRpb25zIGNvbWUgZnJvbSB0aGUgY29tbWFuZCBjbGFzcyBhdHRyaWJ1dGUKICAgICAgICAgJ2Rlc2NyaXB0aW9uJy4KICAgICAgICAgIiIiCi0KICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kCiAgICAgICAgIHN0ZF9jb21tYW5kcyA9IGRpc3R1dGlscy5jb21tYW5kLl9fYWxsX18KICAgICAgICAgaXNfc3RkID0ge30KQEAgLTc2Myw5ICs3NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4dHJhIGNvbW1hbmRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9sZW5ndGgpCiAKLSAgICAjIHByaW50X2NvbW1hbmRzICgpCi0KLSAgICBkZWYgZ2V0X2NvbW1hbmRfbGlzdCAoc2VsZik6CisgICAgZGVmIGdldF9jb21tYW5kX2xpc3Qoc2VsZik6CiAgICAgICAgICIiIkdldCBhIGxpc3Qgb2YgKGNvbW1hbmQsIGRlc2NyaXB0aW9uKSB0dXBsZXMuCiAgICAgICAgIFRoZSBsaXN0IGlzIGRpdmlkZWQgaW50byAic3RhbmRhcmQgY29tbWFuZHMiIChsaXN0ZWQgaW4KICAgICAgICAgZGlzdHV0aWxzLmNvbW1hbmQuX19hbGxfXykgYW5kICJleHRyYSBjb21tYW5kcyIgKG1lbnRpb25lZCBpbgpAQCAtODAwLDIwICs3NzksMTkgQEAKIAogICAgICMgLS0gQ29tbWFuZCBjbGFzcy9vYmplY3QgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgZ2V0X2NvbW1hbmRfcGFja2FnZXMgKHNlbGYpOgorICAgIGRlZiBnZXRfY29tbWFuZF9wYWNrYWdlcyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBwYWNrYWdlcyBmcm9tIHdoaWNoIGNvbW1hbmRzIGFyZSBsb2FkZWQuIiIiCiAgICAgICAgIHBrZ3MgPSBzZWxmLmNvbW1hbmRfcGFja2FnZXMKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocGtncywgdHlwZShbXSkpOgotICAgICAgICAgICAgcGtncyA9IHN0cmluZy5zcGxpdChwa2dzIG9yICIiLCAiLCIpCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocGtncykpOgotICAgICAgICAgICAgICAgIHBrZ3NbaV0gPSBzdHJpbmcuc3RyaXAocGtnc1tpXSkKLSAgICAgICAgICAgIHBrZ3MgPSBmaWx0ZXIoTm9uZSwgcGtncykKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocGtncywgbGlzdCk6CisgICAgICAgICAgICBpZiBwa2dzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcGtncyA9ICcnCisgICAgICAgICAgICBwa2dzID0gW3BrZy5zdHJpcCgpIGZvciBwa2cgaW4gcGtncy5zcGxpdCgnLCcpIGlmIHBrZyAhPSAnJ10KICAgICAgICAgICAgIGlmICJkaXN0dXRpbHMuY29tbWFuZCIgbm90IGluIHBrZ3M6CiAgICAgICAgICAgICAgICAgcGtncy5pbnNlcnQoMCwgImRpc3R1dGlscy5jb21tYW5kIikKICAgICAgICAgICAgIHNlbGYuY29tbWFuZF9wYWNrYWdlcyA9IHBrZ3MKICAgICAgICAgcmV0dXJuIHBrZ3MKIAotICAgIGRlZiBnZXRfY29tbWFuZF9jbGFzcyAoc2VsZiwgY29tbWFuZCk6CisgICAgZGVmIGdldF9jb21tYW5kX2NsYXNzKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzIGNvbW1hbmQgbmFtZWQgYnkKICAgICAgICAgJ2NvbW1hbmQnLiAgRmlyc3Qgd2UgY2hlY2sgdGhlICdjbWRjbGFzcycgZGljdGlvbmFyeTsgaWYgdGhlCiAgICAgICAgIGNvbW1hbmQgaXMgbWVudGlvbmVkIHRoZXJlLCB3ZSBmZXRjaCB0aGUgY2xhc3Mgb2JqZWN0IGZyb20gdGhlCkBAIC04NTIsOSArODMwLDcgQEAKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzTW9kdWxlRXJyb3IoImludmFsaWQgY29tbWFuZCAnJXMnIiAlIGNvbW1hbmQpCiAKIAotICAgICMgZ2V0X2NvbW1hbmRfY2xhc3MgKCkKLQotICAgIGRlZiBnZXRfY29tbWFuZF9vYmogKHNlbGYsIGNvbW1hbmQsIGNyZWF0ZT0xKToKKyAgICBkZWYgZ2V0X2NvbW1hbmRfb2JqKHNlbGYsIGNvbW1hbmQsIGNyZWF0ZT0xKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjb21tYW5kIG9iamVjdCBmb3IgJ2NvbW1hbmQnLiAgTm9ybWFsbHkgdGhpcyBvYmplY3QKICAgICAgICAgaXMgY2FjaGVkIG9uIGEgcHJldmlvdXMgY2FsbCB0byAnZ2V0X2NvbW1hbmRfb2JqKCknOyBpZiBubyBjb21tYW5kCiAgICAgICAgIG9iamVjdCBmb3IgJ2NvbW1hbmQnIGlzIGluIHRoZSBjYWNoZSwgdGhlbiB3ZSBlaXRoZXIgY3JlYXRlIGFuZApAQCAtODYzLDggKzgzOSw4IEBACiAgICAgICAgIGNtZF9vYmogPSBzZWxmLmNvbW1hbmRfb2JqLmdldChjb21tYW5kKQogICAgICAgICBpZiBub3QgY21kX29iaiBhbmQgY3JlYXRlOgogICAgICAgICAgICAgaWYgREVCVUc6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIkRpc3RyaWJ1dGlvbi5nZXRfY29tbWFuZF9vYmooKTogIiBcCi0gICAgICAgICAgICAgICAgICAgICAgImNyZWF0aW5nICclcycgY29tbWFuZCBvYmplY3QiICUgY29tbWFuZAorICAgICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoIkRpc3RyaWJ1dGlvbi5nZXRfY29tbWFuZF9vYmooKTogIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRpbmcgJyVzJyBjb21tYW5kIG9iamVjdCIgJSBjb21tYW5kKQogCiAgICAgICAgICAgICBrbGFzcyA9IHNlbGYuZ2V0X2NvbW1hbmRfY2xhc3MoY29tbWFuZCkKICAgICAgICAgICAgIGNtZF9vYmogPSBzZWxmLmNvbW1hbmRfb2JqW2NvbW1hbmRdID0ga2xhc3Moc2VsZikKQEAgLTg4MSw3ICs4NTcsNyBAQAogCiAgICAgICAgIHJldHVybiBjbWRfb2JqCiAKLSAgICBkZWYgX3NldF9jb21tYW5kX29wdGlvbnMgKHNlbGYsIGNvbW1hbmRfb2JqLCBvcHRpb25fZGljdD1Ob25lKToKKyAgICBkZWYgX3NldF9jb21tYW5kX29wdGlvbnMoc2VsZiwgY29tbWFuZF9vYmosIG9wdGlvbl9kaWN0PU5vbmUpOgogICAgICAgICAiIiJTZXQgdGhlIG9wdGlvbnMgZm9yICdjb21tYW5kX29iaicgZnJvbSAnb3B0aW9uX2RpY3QnLiAgQmFzaWNhbGx5CiAgICAgICAgIHRoaXMgbWVhbnMgY29weWluZyBlbGVtZW50cyBvZiBhIGRpY3Rpb25hcnkgKCdvcHRpb25fZGljdCcpIHRvCiAgICAgICAgIGF0dHJpYnV0ZXMgb2YgYW4gaW5zdGFuY2UgKCdjb21tYW5kJykuCkBAIC04OTQsOSArODcwLDEyIEBACiAgICAgICAgIGlmIG9wdGlvbl9kaWN0IGlzIE5vbmU6CiAgICAgICAgICAgICBvcHRpb25fZGljdCA9IHNlbGYuZ2V0X29wdGlvbl9kaWN0KGNvbW1hbmRfbmFtZSkKIAotICAgICAgICBpZiBERUJVRzogcHJpbnQgIiAgc2V0dGluZyBvcHRpb25zIGZvciAnJXMnIGNvbW1hbmQ6IiAlIGNvbW1hbmRfbmFtZQorICAgICAgICBpZiBERUJVRzoKKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoIiAgc2V0dGluZyBvcHRpb25zIGZvciAnJXMnIGNvbW1hbmQ6IiAlIGNvbW1hbmRfbmFtZSkKICAgICAgICAgZm9yIChvcHRpb24sIChzb3VyY2UsIHZhbHVlKSkgaW4gb3B0aW9uX2RpY3QuaXRlbXMoKToKLSAgICAgICAgICAgIGlmIERFQlVHOiBwcmludCAiICAgICVzID0gJXMgKGZyb20gJXMpIiAlIChvcHRpb24sIHZhbHVlLCBzb3VyY2UpCisgICAgICAgICAgICBpZiBERUJVRzoKKyAgICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCIgICAgJXMgPSAlcyAoZnJvbSAlcykiICUgKG9wdGlvbiwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJvb2xfb3B0cyA9IG1hcCh0cmFuc2xhdGVfbG9uZ29wdCwgY29tbWFuZF9vYmouYm9vbGVhbl9vcHRpb25zKQogICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgpAQCAtOTA3LDcgKzg4Niw3IEBACiAgICAgICAgICAgICAgICAgbmVnX29wdCA9IHt9CiAKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpc19zdHJpbmcgPSB0eXBlKHZhbHVlKSBpcyBTdHJpbmdUeXBlCisgICAgICAgICAgICAgICAgaXNfc3RyaW5nID0gaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKQogICAgICAgICAgICAgICAgIGlmIG9wdGlvbiBpbiBuZWdfb3B0IGFuZCBpc19zdHJpbmc6CiAgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoY29tbWFuZF9vYmosIG5lZ19vcHRbb3B0aW9uXSwgbm90IHN0cnRvYm9vbCh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgZWxpZiBvcHRpb24gaW4gYm9vbF9vcHRzIGFuZCBpc19zdHJpbmc6CkBAIC05MjEsNyArOTAwLDcgQEAKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBtc2c6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzT3B0aW9uRXJyb3IsIG1zZwogCi0gICAgZGVmIHJlaW5pdGlhbGl6ZV9jb21tYW5kIChzZWxmLCBjb21tYW5kLCByZWluaXRfc3ViY29tbWFuZHM9MCk6CisgICAgZGVmIHJlaW5pdGlhbGl6ZV9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHJlaW5pdF9zdWJjb21tYW5kcz0wKToKICAgICAgICAgIiIiUmVpbml0aWFsaXplcyBhIGNvbW1hbmQgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiB3aGVuIGZpcnN0CiAgICAgICAgIHJldHVybmVkIGJ5ICdnZXRfY29tbWFuZF9vYmooKSc6IGllLiwgaW5pdGlhbGl6ZWQgYnV0IG5vdCB5ZXQKICAgICAgICAgZmluYWxpemVkLiAgVGhpcyBwcm92aWRlcyB0aGUgb3Bwb3J0dW5pdHkgdG8gc25lYWsgb3B0aW9uCkBAIC05NjAsMTMgKzkzOSwxMiBAQAogCiAgICAgICAgIHJldHVybiBjb21tYW5kCiAKLQogICAgICMgLS0gTWV0aG9kcyB0aGF0IG9wZXJhdGUgb24gdGhlIERpc3RyaWJ1dGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgYW5ub3VuY2UgKHNlbGYsIG1zZywgbGV2ZWw9MSk6Ci0gICAgICAgIGxvZy5kZWJ1Zyhtc2cpCisgICAgZGVmIGFubm91bmNlKHNlbGYsIG1zZywgbGV2ZWw9bG9nLklORk8pOgorICAgICAgICBsb2cubG9nKGxldmVsLCBtc2cpCiAKLSAgICBkZWYgcnVuX2NvbW1hbmRzIChzZWxmKToKKyAgICBkZWYgcnVuX2NvbW1hbmRzKHNlbGYpOgogICAgICAgICAiIiJSdW4gZWFjaCBjb21tYW5kIHRoYXQgd2FzIHNlZW4gb24gdGhlIHNldHVwIHNjcmlwdCBjb21tYW5kIGxpbmUuCiAgICAgICAgIFVzZXMgdGhlIGxpc3Qgb2YgY29tbWFuZHMgZm91bmQgYW5kIGNhY2hlIG9mIGNvbW1hbmQgb2JqZWN0cwogICAgICAgICBjcmVhdGVkIGJ5ICdnZXRfY29tbWFuZF9vYmooKScuCkBAIC05NzQsMTAgKzk1Miw5IEBACiAgICAgICAgIGZvciBjbWQgaW4gc2VsZi5jb21tYW5kczoKICAgICAgICAgICAgIHNlbGYucnVuX2NvbW1hbmQoY21kKQogCi0KICAgICAjIC0tIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGl0cyBDb21tYW5kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIHJ1bl9jb21tYW5kIChzZWxmLCBjb21tYW5kKToKKyAgICBkZWYgcnVuX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgICIiIkRvIHdoYXRldmVyIGl0IHRha2VzIHRvIHJ1biBhIGNvbW1hbmQgKGluY2x1ZGluZyBub3RoaW5nIGF0IGFsbCwKICAgICAgICAgaWYgdGhlIGNvbW1hbmQgaGFzIGFscmVhZHkgYmVlbiBydW4pLiAgU3BlY2lmaWNhbGx5OiBpZiB3ZSBoYXZlCiAgICAgICAgIGFscmVhZHkgY3JlYXRlZCBhbmQgcnVuIHRoZSBjb21tYW5kIG5hbWVkIGJ5ICdjb21tYW5kJywgcmV0dXJuCkBAIC05OTgsMjggKzk3NSwyOCBAQAogCiAgICAgIyAtLSBEaXN0cmlidXRpb24gcXVlcnkgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiBoYXNfcHVyZV9tb2R1bGVzIChzZWxmKToKKyAgICBkZWYgaGFzX3B1cmVfbW9kdWxlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnBhY2thZ2VzIG9yIHNlbGYucHlfbW9kdWxlcyBvciBbXSkgPiAwCiAKLSAgICBkZWYgaGFzX2V4dF9tb2R1bGVzIChzZWxmKToKKyAgICBkZWYgaGFzX2V4dF9tb2R1bGVzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5leHRfbW9kdWxlcyBhbmQgbGVuKHNlbGYuZXh0X21vZHVsZXMpID4gMAogCi0gICAgZGVmIGhhc19jX2xpYnJhcmllcyAoc2VsZik6CisgICAgZGVmIGhhc19jX2xpYnJhcmllcyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubGlicmFyaWVzIGFuZCBsZW4oc2VsZi5saWJyYXJpZXMpID4gMAogCi0gICAgZGVmIGhhc19tb2R1bGVzIChzZWxmKToKKyAgICBkZWYgaGFzX21vZHVsZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmhhc19wdXJlX21vZHVsZXMoKSBvciBzZWxmLmhhc19leHRfbW9kdWxlcygpCiAKLSAgICBkZWYgaGFzX2hlYWRlcnMgKHNlbGYpOgorICAgIGRlZiBoYXNfaGVhZGVycyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuaGVhZGVycyBhbmQgbGVuKHNlbGYuaGVhZGVycykgPiAwCiAKLSAgICBkZWYgaGFzX3NjcmlwdHMgKHNlbGYpOgorICAgIGRlZiBoYXNfc2NyaXB0cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuc2NyaXB0cyBhbmQgbGVuKHNlbGYuc2NyaXB0cykgPiAwCiAKLSAgICBkZWYgaGFzX2RhdGFfZmlsZXMgKHNlbGYpOgorICAgIGRlZiBoYXNfZGF0YV9maWxlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YV9maWxlcyBhbmQgbGVuKHNlbGYuZGF0YV9maWxlcykgPiAwCiAKLSAgICBkZWYgaXNfcHVyZSAoc2VsZik6CisgICAgZGVmIGlzX3B1cmUoc2VsZik6CiAgICAgICAgIHJldHVybiAoc2VsZi5oYXNfcHVyZV9tb2R1bGVzKCkgYW5kCiAgICAgICAgICAgICAgICAgbm90IHNlbGYuaGFzX2V4dF9tb2R1bGVzKCkgYW5kCiAgICAgICAgICAgICAgICAgbm90IHNlbGYuaGFzX2NfbGlicmFyaWVzKCkpCkBAIC0xMDMxLDkgKzEwMDgsNiBAQAogICAgICMgdG8gc2VsZi5tZXRhZGF0YS5nZXRfWFhYLiAgVGhlIGFjdHVhbCBjb2RlIGlzIGluIHRoZQogICAgICMgRGlzdHJpYnV0aW9uTWV0YWRhdGEgY2xhc3MsIGJlbG93LgogCi0jIGNsYXNzIERpc3RyaWJ1dGlvbgotCi0KIGNsYXNzIERpc3RyaWJ1dGlvbk1ldGFkYXRhOgogICAgICIiIkR1bW15IGNsYXNzIHRvIGhvbGQgdGhlIGRpc3RyaWJ1dGlvbiBtZXRhLWRhdGE6IG5hbWUsIHZlcnNpb24sCiAgICAgYXV0aG9yLCBhbmQgc28gZm9ydGguCkBAIC0xMDQ5LDM4ICsxMDIzLDkxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGVzIiwgInJlcXVpcmVzIiwgIm9ic29sZXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKQogCi0gICAgZGVmIF9faW5pdF9fIChzZWxmKToKLSAgICAgICAgc2VsZi5uYW1lID0gTm9uZQotICAgICAgICBzZWxmLnZlcnNpb24gPSBOb25lCi0gICAgICAgIHNlbGYuYXV0aG9yID0gTm9uZQotICAgICAgICBzZWxmLmF1dGhvcl9lbWFpbCA9IE5vbmUKLSAgICAgICAgc2VsZi5tYWludGFpbmVyID0gTm9uZQotICAgICAgICBzZWxmLm1haW50YWluZXJfZW1haWwgPSBOb25lCi0gICAgICAgIHNlbGYudXJsID0gTm9uZQotICAgICAgICBzZWxmLmxpY2Vuc2UgPSBOb25lCi0gICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBOb25lCi0gICAgICAgIHNlbGYubG9uZ19kZXNjcmlwdGlvbiA9IE5vbmUKLSAgICAgICAgc2VsZi5rZXl3b3JkcyA9IE5vbmUKLSAgICAgICAgc2VsZi5wbGF0Zm9ybXMgPSBOb25lCi0gICAgICAgIHNlbGYuY2xhc3NpZmllcnMgPSBOb25lCi0gICAgICAgIHNlbGYuZG93bmxvYWRfdXJsID0gTm9uZQotICAgICAgICAjIFBFUCAzMTQKLSAgICAgICAgc2VsZi5wcm92aWRlcyA9IE5vbmUKLSAgICAgICAgc2VsZi5yZXF1aXJlcyA9IE5vbmUKLSAgICAgICAgc2VsZi5vYnNvbGV0ZXMgPSBOb25lCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9Tm9uZSk6CisgICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnJlYWRfcGtnX2ZpbGUob3BlbihwYXRoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYudmVyc2lvbiA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuYXV0aG9yID0gTm9uZQorICAgICAgICAgICAgc2VsZi5hdXRob3JfZW1haWwgPSBOb25lCisgICAgICAgICAgICBzZWxmLm1haW50YWluZXIgPSBOb25lCisgICAgICAgICAgICBzZWxmLm1haW50YWluZXJfZW1haWwgPSBOb25lCisgICAgICAgICAgICBzZWxmLnVybCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYubGljZW5zZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBOb25lCisgICAgICAgICAgICBzZWxmLmxvbmdfZGVzY3JpcHRpb24gPSBOb25lCisgICAgICAgICAgICBzZWxmLmtleXdvcmRzID0gTm9uZQorICAgICAgICAgICAgc2VsZi5wbGF0Zm9ybXMgPSBOb25lCisgICAgICAgICAgICBzZWxmLmNsYXNzaWZpZXJzID0gTm9uZQorICAgICAgICAgICAgc2VsZi5kb3dubG9hZF91cmwgPSBOb25lCisgICAgICAgICAgICAjIFBFUCAzMTQKKyAgICAgICAgICAgIHNlbGYucHJvdmlkZXMgPSBOb25lCisgICAgICAgICAgICBzZWxmLnJlcXVpcmVzID0gTm9uZQorICAgICAgICAgICAgc2VsZi5vYnNvbGV0ZXMgPSBOb25lCiAKLSAgICBkZWYgd3JpdGVfcGtnX2luZm8gKHNlbGYsIGJhc2VfZGlyKToKKyAgICBkZWYgcmVhZF9wa2dfZmlsZShzZWxmLCBmaWxlKToKKyAgICAgICAgIiIiUmVhZHMgdGhlIG1ldGFkYXRhIHZhbHVlcyBmcm9tIGEgZmlsZSBvYmplY3QuIiIiCisgICAgICAgIG1zZyA9IG1lc3NhZ2VfZnJvbV9maWxlKGZpbGUpCisKKyAgICAgICAgZGVmIF9yZWFkX2ZpZWxkKG5hbWUpOgorICAgICAgICAgICAgdmFsdWUgPSBtc2dbbmFtZV0KKyAgICAgICAgICAgIGlmIHZhbHVlID09ICdVTktOT1dOJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICAgICAgZGVmIF9yZWFkX2xpc3QobmFtZSk6CisgICAgICAgICAgICB2YWx1ZXMgPSBtc2cuZ2V0X2FsbChuYW1lLCBOb25lKQorICAgICAgICAgICAgaWYgdmFsdWVzID09IFtdOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gdmFsdWVzCisKKyAgICAgICAgbWV0YWRhdGFfdmVyc2lvbiA9IG1zZ1snbWV0YWRhdGEtdmVyc2lvbiddCisgICAgICAgIHNlbGYubmFtZSA9IF9yZWFkX2ZpZWxkKCduYW1lJykKKyAgICAgICAgc2VsZi52ZXJzaW9uID0gX3JlYWRfZmllbGQoJ3ZlcnNpb24nKQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gX3JlYWRfZmllbGQoJ3N1bW1hcnknKQorICAgICAgICAjIHdlIGFyZSBmaWxsaW5nIGF1dGhvciBvbmx5LgorICAgICAgICBzZWxmLmF1dGhvciA9IF9yZWFkX2ZpZWxkKCdhdXRob3InKQorICAgICAgICBzZWxmLm1haW50YWluZXIgPSBOb25lCisgICAgICAgIHNlbGYuYXV0aG9yX2VtYWlsID0gX3JlYWRfZmllbGQoJ2F1dGhvci1lbWFpbCcpCisgICAgICAgIHNlbGYubWFpbnRhaW5lcl9lbWFpbCA9IE5vbmUKKyAgICAgICAgc2VsZi51cmwgPSBfcmVhZF9maWVsZCgnaG9tZS1wYWdlJykKKyAgICAgICAgc2VsZi5saWNlbnNlID0gX3JlYWRfZmllbGQoJ2xpY2Vuc2UnKQorCisgICAgICAgIGlmICdkb3dubG9hZC11cmwnIGluIG1zZzoKKyAgICAgICAgICAgIHNlbGYuZG93bmxvYWRfdXJsID0gX3JlYWRfZmllbGQoJ2Rvd25sb2FkLXVybCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRvd25sb2FkX3VybCA9IE5vbmUKKworICAgICAgICBzZWxmLmxvbmdfZGVzY3JpcHRpb24gPSBfcmVhZF9maWVsZCgnZGVzY3JpcHRpb24nKQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gX3JlYWRfZmllbGQoJ3N1bW1hcnknKQorCisgICAgICAgIGlmICdrZXl3b3JkcycgaW4gbXNnOgorICAgICAgICAgICAgc2VsZi5rZXl3b3JkcyA9IF9yZWFkX2ZpZWxkKCdrZXl3b3JkcycpLnNwbGl0KCcsJykKKworICAgICAgICBzZWxmLnBsYXRmb3JtcyA9IF9yZWFkX2xpc3QoJ3BsYXRmb3JtJykKKyAgICAgICAgc2VsZi5jbGFzc2lmaWVycyA9IF9yZWFkX2xpc3QoJ2NsYXNzaWZpZXInKQorCisgICAgICAgICMgUEVQIDMxNCAtIHRoZXNlIGZpZWxkcyBvbmx5IGV4aXN0IGluIDEuMQorICAgICAgICBpZiBtZXRhZGF0YV92ZXJzaW9uID09ICcxLjEnOgorICAgICAgICAgICAgc2VsZi5yZXF1aXJlcyA9IF9yZWFkX2xpc3QoJ3JlcXVpcmVzJykKKyAgICAgICAgICAgIHNlbGYucHJvdmlkZXMgPSBfcmVhZF9saXN0KCdwcm92aWRlcycpCisgICAgICAgICAgICBzZWxmLm9ic29sZXRlcyA9IF9yZWFkX2xpc3QoJ29ic29sZXRlcycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnJlcXVpcmVzID0gTm9uZQorICAgICAgICAgICAgc2VsZi5wcm92aWRlcyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYub2Jzb2xldGVzID0gTm9uZQorCisgICAgZGVmIHdyaXRlX3BrZ19pbmZvKHNlbGYsIGJhc2VfZGlyKToKICAgICAgICAgIiIiV3JpdGUgdGhlIFBLRy1JTkZPIGZpbGUgaW50byB0aGUgcmVsZWFzZSB0cmVlLgogICAgICAgICAiIiIKLSAgICAgICAgcGtnX2luZm8gPSBvcGVuKCBvcy5wYXRoLmpvaW4oYmFzZV9kaXIsICdQS0ctSU5GTycpLCAndycpCisgICAgICAgIHBrZ19pbmZvID0gb3Blbihvcy5wYXRoLmpvaW4oYmFzZV9kaXIsICdQS0ctSU5GTycpLCAndycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfcGtnX2ZpbGUocGtnX2luZm8pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBwa2dfaW5mby5jbG9zZSgpCiAKLSAgICAgICAgc2VsZi53cml0ZV9wa2dfZmlsZShwa2dfaW5mbykKLQotICAgICAgICBwa2dfaW5mby5jbG9zZSgpCi0KLSAgICAjIHdyaXRlX3BrZ19pbmZvICgpCi0KLSAgICBkZWYgd3JpdGVfcGtnX2ZpbGUgKHNlbGYsIGZpbGUpOgorICAgIGRlZiB3cml0ZV9wa2dfZmlsZShzZWxmLCBmaWxlKToKICAgICAgICAgIiIiV3JpdGUgdGhlIFBLRy1JTkZPIGZvcm1hdCBkYXRhIHRvIGEgZmlsZSBvYmplY3QuCiAgICAgICAgICIiIgogICAgICAgICB2ZXJzaW9uID0gJzEuMCcKQEAgLTEwOTgsMTAgKzExMjUsMTAgQEAKICAgICAgICAgaWYgc2VsZi5kb3dubG9hZF91cmw6CiAgICAgICAgICAgICBzZWxmLl93cml0ZV9maWVsZChmaWxlLCAnRG93bmxvYWQtVVJMJywgc2VsZi5kb3dubG9hZF91cmwpCiAKLSAgICAgICAgbG9uZ19kZXNjID0gcmZjODIyX2VzY2FwZSggc2VsZi5nZXRfbG9uZ19kZXNjcmlwdGlvbigpKQorICAgICAgICBsb25nX2Rlc2MgPSByZmM4MjJfZXNjYXBlKHNlbGYuZ2V0X2xvbmdfZGVzY3JpcHRpb24oKSkKICAgICAgICAgc2VsZi5fd3JpdGVfZmllbGQoZmlsZSwgJ0Rlc2NyaXB0aW9uJywgbG9uZ19kZXNjKQogCi0gICAgICAgIGtleXdvcmRzID0gc3RyaW5nLmpvaW4oIHNlbGYuZ2V0X2tleXdvcmRzKCksICcsJykKKyAgICAgICAga2V5d29yZHMgPSAnLCcuam9pbihzZWxmLmdldF9rZXl3b3JkcygpKQogICAgICAgICBpZiBrZXl3b3JkczoKICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2ZpZWxkKGZpbGUsICdLZXl3b3JkcycsIGtleXdvcmRzKQogCkBAIC0xMTE3LDcgKzExNDQsNiBAQAogICAgICAgICBmaWxlLndyaXRlKCclczogJXNcbicgJSAobmFtZSwgc2VsZi5fZW5jb2RlX2ZpZWxkKHZhbHVlKSkpCiAKICAgICBkZWYgX3dyaXRlX2xpc3QgKHNlbGYsIGZpbGUsIG5hbWUsIHZhbHVlcyk6Ci0KICAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlczoKICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2ZpZWxkKGZpbGUsIG5hbWUsIHZhbHVlKQogCkBAIC0xMTMwLDEzICsxMTU2LDEzIEBACiAKICAgICAjIC0tIE1ldGFkYXRhIHF1ZXJ5IG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIGdldF9uYW1lIChzZWxmKToKKyAgICBkZWYgZ2V0X25hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm5hbWUgb3IgIlVOS05PV04iCiAKICAgICBkZWYgZ2V0X3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnZlcnNpb24gb3IgIjAuMC4wIgogCi0gICAgZGVmIGdldF9mdWxsbmFtZSAoc2VsZik6CisgICAgZGVmIGdldF9mdWxsbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICIlcy0lcyIgJSAoc2VsZi5nZXRfbmFtZSgpLCBzZWxmLmdldF92ZXJzaW9uKCkpCiAKICAgICBkZWYgZ2V0X2F1dGhvcihzZWxmKToKQEAgLTExNTYsOSArMTE4Miw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fZW5jb2RlX2ZpZWxkKHNlbGYuYXV0aG9yKSBvciAiVU5LTk9XTiIpCiAKICAgICBkZWYgZ2V0X2NvbnRhY3RfZW1haWwoc2VsZik6Ci0gICAgICAgIHJldHVybiAoc2VsZi5tYWludGFpbmVyX2VtYWlsIG9yCi0gICAgICAgICAgICAgICAgc2VsZi5hdXRob3JfZW1haWwgb3IKLSAgICAgICAgICAgICAgICAiVU5LTk9XTiIpCisgICAgICAgIHJldHVybiBzZWxmLm1haW50YWluZXJfZW1haWwgb3Igc2VsZi5hdXRob3JfZW1haWwgb3IgIlVOS05PV04iCiAKICAgICBkZWYgZ2V0X3VybChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYudXJsIG9yICJVTktOT1dOIgpAQCAtMTE4Niw3ICsxMjEwLDYgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuZG93bmxvYWRfdXJsIG9yICJVTktOT1dOIgogCiAgICAgIyBQRVAgMzE0Ci0KICAgICBkZWYgZ2V0X3JlcXVpcmVzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5yZXF1aXJlcyBvciBbXQogCkBAIC0xMjE1LDEwICsxMjM4LDcgQEAKICAgICAgICAgICAgIGRpc3R1dGlscy52ZXJzaW9ucHJlZGljYXRlLlZlcnNpb25QcmVkaWNhdGUodikKICAgICAgICAgc2VsZi5vYnNvbGV0ZXMgPSB2YWx1ZQogCi0jIGNsYXNzIERpc3RyaWJ1dGlvbk1ldGFkYXRhCi0KLQotZGVmIGZpeF9oZWxwX29wdGlvbnMgKG9wdGlvbnMpOgorZGVmIGZpeF9oZWxwX29wdGlvbnMob3B0aW9ucyk6CiAgICAgIiIiQ29udmVydCBhIDQtdHVwbGUgJ2hlbHBfb3B0aW9ucycgbGlzdCBhcyBmb3VuZCBpbiB2YXJpb3VzIGNvbW1hbmQKICAgICBjbGFzc2VzIHRvIHRoZSAzLXR1cGxlIGZvcm0gcmVxdWlyZWQgYnkgRmFuY3lHZXRvcHQuCiAgICAgIiIiCkBAIC0xMjI2LDggKzEyNDYsMyBAQAogICAgIGZvciBoZWxwX3R1cGxlIGluIG9wdGlvbnM6CiAgICAgICAgIG5ld19vcHRpb25zLmFwcGVuZChoZWxwX3R1cGxlWzA6M10pCiAgICAgcmV0dXJuIG5ld19vcHRpb25zCi0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKLSAgICBwcmludCAib2siCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CmluZGV4IGY1MmU2MzIuLmEwMTcyMDUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CkBAIC0yNzIsOCArMjcyLDEwIEBACiAgICAgICAgICMgSXQgd291bGQgcHJvYmFibHkgYmV0dGVyIHRvIHJlYWQgc2luZ2xlIGxpbmVzIHRvIHNlYXJjaC4KICAgICAgICAgIyBCdXQgd2UgZG8gdGhpcyBvbmx5IG9uY2UsIGFuZCBpdCBpcyBmYXN0IGVub3VnaAogICAgICAgICBmID0gb3BlbihmbikKLSAgICAgICAgcyA9IGYucmVhZCgpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gZi5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZXhjZXB0IElPRXJyb3IsIGV4YzoKICAgICAgICAgIyBpZiB3ZSBjYW4ndCByZWFkIHRoaXMgZmlsZSwgd2UgY2Fubm90IHNheSBpdCBpcyB3cm9uZwpAQCAtMzAwLDggKzMwMiwxMCBAQAogICAgIGdjY19leGUgPSBmaW5kX2V4ZWN1dGFibGUoJ2djYycpCiAgICAgaWYgZ2NjX2V4ZToKICAgICAgICAgb3V0ID0gb3MucG9wZW4oZ2NjX2V4ZSArICcgLWR1bXB2ZXJzaW9uJywncicpCi0gICAgICAgIG91dF9zdHJpbmcgPSBvdXQucmVhZCgpCi0gICAgICAgIG91dC5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dF9zdHJpbmcgPSBvdXQucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvdXQuY2xvc2UoKQogICAgICAgICByZXN1bHQgPSByZS5zZWFyY2goJyhcZCtcLlxkK1wuXGQrKScsb3V0X3N0cmluZykKICAgICAgICAgaWYgcmVzdWx0OgogICAgICAgICAgICAgZ2NjX3ZlcnNpb24gPSBTdHJpY3RWZXJzaW9uKHJlc3VsdC5ncm91cCgxKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5IGIvTGliL2Rpc3R1dGlscy9lcnJvcnMucHkKaW5kZXggOWQxNzU2Yi4uZDljNDdjNyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9lcnJvcnMucHkKKysrIGIvTGliL2Rpc3R1dGlscy9lcnJvcnMucHkKQEAgLTgsOTQgKzgsODEgQEAKIFRoaXMgbW9kdWxlIGlzIHNhZmUgdG8gdXNlIGluICJmcm9tIC4uLiBpbXBvcnQgKiIgbW9kZTsgaXQgb25seSBleHBvcnRzCiBzeW1ib2xzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggIkRpc3R1dGlscyIgYW5kIGVuZCB3aXRoICJFcnJvciIuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1jbGFzcyBEaXN0dXRpbHNFcnJvciAoRXhjZXB0aW9uKToKK2NsYXNzIERpc3R1dGlsc0Vycm9yKEV4Y2VwdGlvbik6CiAgICAgIiIiVGhlIHJvb3Qgb2YgYWxsIERpc3R1dGlscyBldmlsLiIiIgotICAgIHBhc3MKIAotY2xhc3MgRGlzdHV0aWxzTW9kdWxlRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKK2NsYXNzIERpc3R1dGlsc01vZHVsZUVycm9yKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJVbmFibGUgdG8gbG9hZCBhbiBleHBlY3RlZCBtb2R1bGUsIG9yIHRvIGZpbmQgYW4gZXhwZWN0ZWQgY2xhc3MKICAgICB3aXRoaW4gc29tZSBtb2R1bGUgKGluIHBhcnRpY3VsYXIsIGNvbW1hbmQgbW9kdWxlcyBhbmQgY2xhc3NlcykuIiIiCi0gICAgcGFzcwogCi1jbGFzcyBEaXN0dXRpbHNDbGFzc0Vycm9yIChEaXN0dXRpbHNFcnJvcik6CitjbGFzcyBEaXN0dXRpbHNDbGFzc0Vycm9yKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJTb21lIGNvbW1hbmQgY2xhc3MgKG9yIHBvc3NpYmx5IGRpc3RyaWJ1dGlvbiBjbGFzcywgaWYgYW55b25lCiAgICAgZmVlbHMgYSBuZWVkIHRvIHN1YmNsYXNzIERpc3RyaWJ1dGlvbikgaXMgZm91bmQgbm90IHRvIGJlIGhvbGRpbmcKICAgICB1cCBpdHMgZW5kIG9mIHRoZSBiYXJnYWluLCBpZS4gaW1wbGVtZW50aW5nIHNvbWUgcGFydCBvZiB0aGUKICAgICAiY29tbWFuZCAiaW50ZXJmYWNlLiIiIgotICAgIHBhc3MKIAotY2xhc3MgRGlzdHV0aWxzR2V0b3B0RXJyb3IgKERpc3R1dGlsc0Vycm9yKToKK2NsYXNzIERpc3R1dGlsc0dldG9wdEVycm9yKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJUaGUgb3B0aW9uIHRhYmxlIHByb3ZpZGVkIHRvICdmYW5jeV9nZXRvcHQoKScgaXMgYm9ndXMuIiIiCi0gICAgcGFzcwogCi1jbGFzcyBEaXN0dXRpbHNBcmdFcnJvciAoRGlzdHV0aWxzRXJyb3IpOgorY2xhc3MgRGlzdHV0aWxzQXJnRXJyb3IoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIlJhaXNlZCBieSBmYW5jeV9nZXRvcHQgaW4gcmVzcG9uc2UgdG8gZ2V0b3B0LmVycm9yIC0tIGllLiBhbgogICAgIGVycm9yIGluIHRoZSBjb21tYW5kIGxpbmUgdXNhZ2UuIiIiCi0gICAgcGFzcwogCi1jbGFzcyBEaXN0dXRpbHNGaWxlRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKK2NsYXNzIERpc3R1dGlsc0ZpbGVFcnJvcihEaXN0dXRpbHNFcnJvcik6CiAgICAgIiIiQW55IHByb2JsZW1zIGluIHRoZSBmaWxlc3lzdGVtOiBleHBlY3RlZCBmaWxlIG5vdCBmb3VuZCwgZXRjLgogICAgIFR5cGljYWxseSB0aGlzIGlzIGZvciBwcm9ibGVtcyB0aGF0IHdlIGRldGVjdCBiZWZvcmUgSU9FcnJvciBvcgogICAgIE9TRXJyb3IgY291bGQgYmUgcmFpc2VkLiIiIgotICAgIHBhc3MKIAotY2xhc3MgRGlzdHV0aWxzT3B0aW9uRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKK2NsYXNzIERpc3R1dGlsc09wdGlvbkVycm9yKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJTeW50YWN0aWMvc2VtYW50aWMgZXJyb3JzIGluIGNvbW1hbmQgb3B0aW9ucywgc3VjaCBhcyB1c2Ugb2YKICAgICBtdXR1YWxseSBjb25mbGljdGluZyBvcHRpb25zLCBvciBpbmNvbnNpc3RlbnQgb3B0aW9ucywKICAgICBiYWRseS1zcGVsbGVkIHZhbHVlcywgZXRjLiAgTm8gZGlzdGluY3Rpb24gaXMgbWFkZSBiZXR3ZWVuIG9wdGlvbgogICAgIHZhbHVlcyBvcmlnaW5hdGluZyBpbiB0aGUgc2V0dXAgc2NyaXB0LCB0aGUgY29tbWFuZCBsaW5lLCBjb25maWcKICAgICBmaWxlcywgb3Igd2hhdC1oYXZlLXlvdSAtLSBidXQgaWYgd2UgKmtub3cqIHNvbWV0aGluZyBvcmlnaW5hdGVkIGluCiAgICAgdGhlIHNldHVwIHNjcmlwdCwgd2UnbGwgcmFpc2UgRGlzdHV0aWxzU2V0dXBFcnJvciBpbnN0ZWFkLiIiIgotICAgIHBhc3MKIAotY2xhc3MgRGlzdHV0aWxzU2V0dXBFcnJvciAoRGlzdHV0aWxzRXJyb3IpOgorY2xhc3MgRGlzdHV0aWxzU2V0dXBFcnJvcihEaXN0dXRpbHNFcnJvcik6CiAgICAgIiIiRm9yIGVycm9ycyB0aGF0IGNhbiBiZSBkZWZpbml0ZWx5IGJsYW1lZCBvbiB0aGUgc2V0dXAgc2NyaXB0LAogICAgIHN1Y2ggYXMgaW52YWxpZCBrZXl3b3JkIGFyZ3VtZW50cyB0byAnc2V0dXAoKScuIiIiCi0gICAgcGFzcwogCi1jbGFzcyBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yIChEaXN0dXRpbHNFcnJvcik6CitjbGFzcyBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJXZSBkb24ndCBrbm93IGhvdyB0byBkbyBzb21ldGhpbmcgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0gKGJ1dAogICAgIHdlIGRvIGtub3cgaG93IHRvIGRvIGl0IG9uIHNvbWUgcGxhdGZvcm0pIC0tIGVnLiB0cnlpbmcgdG8gY29tcGlsZQogICAgIEMgZmlsZXMgb24gYSBwbGF0Zm9ybSBub3Qgc3VwcG9ydGVkIGJ5IGEgQ0NvbXBpbGVyIHN1YmNsYXNzLiIiIgotICAgIHBhc3MKIAotY2xhc3MgRGlzdHV0aWxzRXhlY0Vycm9yIChEaXN0dXRpbHNFcnJvcik6CitjbGFzcyBEaXN0dXRpbHNFeGVjRXJyb3IoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIkFueSBwcm9ibGVtcyBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbSAoc3VjaCBhcyB0aGUgQwogICAgIGNvbXBpbGVyLCB3aGVuIGNvbXBpbGluZyBDIGZpbGVzKS4iIiIKLSAgICBwYXNzCiAKLWNsYXNzIERpc3R1dGlsc0ludGVybmFsRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKK2NsYXNzIERpc3R1dGlsc0ludGVybmFsRXJyb3IoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIkludGVybmFsIGluY29uc2lzdGVuY2llcyBvciBpbXBvc3NpYmlsaXRpZXMgKG9idmlvdXNseSwgdGhpcwogICAgIHNob3VsZCBuZXZlciBiZSBzZWVuIGlmIHRoZSBjb2RlIGlzIHdvcmtpbmchKS4iIiIKLSAgICBwYXNzCiAKLWNsYXNzIERpc3R1dGlsc1RlbXBsYXRlRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKK2NsYXNzIERpc3R1dGlsc1RlbXBsYXRlRXJyb3IoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIlN5bnRheCBlcnJvciBpbiBhIGZpbGUgbGlzdCB0ZW1wbGF0ZS4iIiIKIAogY2xhc3MgRGlzdHV0aWxzQnl0ZUNvbXBpbGVFcnJvcihEaXN0dXRpbHNFcnJvcik6CiAgICAgIiIiQnl0ZSBjb21waWxlIGVycm9yLiIiIgogCiAjIEV4Y2VwdGlvbiBjbGFzc2VzIHVzZWQgYnkgdGhlIENDb21waWxlciBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzCi1jbGFzcyBDQ29tcGlsZXJFcnJvciAoRXhjZXB0aW9uKToKK2NsYXNzIENDb21waWxlckVycm9yKEV4Y2VwdGlvbik6CiAgICAgIiIiU29tZSBjb21waWxlL2xpbmsgb3BlcmF0aW9uIGZhaWxlZC4iIiIKIAotY2xhc3MgUHJlcHJvY2Vzc0Vycm9yIChDQ29tcGlsZXJFcnJvcik6CitjbGFzcyBQcmVwcm9jZXNzRXJyb3IoQ0NvbXBpbGVyRXJyb3IpOgogICAgICIiIkZhaWx1cmUgdG8gcHJlcHJvY2VzcyBvbmUgb3IgbW9yZSBDL0MrKyBmaWxlcy4iIiIKIAotY2xhc3MgQ29tcGlsZUVycm9yIChDQ29tcGlsZXJFcnJvcik6CitjbGFzcyBDb21waWxlRXJyb3IoQ0NvbXBpbGVyRXJyb3IpOgogICAgICIiIkZhaWx1cmUgdG8gY29tcGlsZSBvbmUgb3IgbW9yZSBDL0MrKyBzb3VyY2UgZmlsZXMuIiIiCiAKLWNsYXNzIExpYkVycm9yIChDQ29tcGlsZXJFcnJvcik6CitjbGFzcyBMaWJFcnJvcihDQ29tcGlsZXJFcnJvcik6CiAgICAgIiIiRmFpbHVyZSB0byBjcmVhdGUgYSBzdGF0aWMgbGlicmFyeSBmcm9tIG9uZSBvciBtb3JlIEMvQysrIG9iamVjdAogICAgIGZpbGVzLiIiIgogCi1jbGFzcyBMaW5rRXJyb3IgKENDb21waWxlckVycm9yKToKK2NsYXNzIExpbmtFcnJvcihDQ29tcGlsZXJFcnJvcik6CiAgICAgIiIiRmFpbHVyZSB0byBsaW5rIG9uZSBvciBtb3JlIEMvQysrIG9iamVjdCBmaWxlcyBpbnRvIGFuIGV4ZWN1dGFibGUKICAgICBvciBzaGFyZWQgbGlicmFyeSBmaWxlLiIiIgogCi1jbGFzcyBVbmtub3duRmlsZUVycm9yIChDQ29tcGlsZXJFcnJvcik6CitjbGFzcyBVbmtub3duRmlsZUVycm9yKENDb21waWxlckVycm9yKToKICAgICAiIiJBdHRlbXB0IHRvIHByb2Nlc3MgYW4gdW5rbm93biBmaWxlIHR5cGUuIiIiCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2V4dGVuc2lvbi5weSBiL0xpYi9kaXN0dXRpbHMvZXh0ZW5zaW9uLnB5CmluZGV4IDQ0MGQxMjguLjlhNjdjYTggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZXh0ZW5zaW9uLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZXh0ZW5zaW9uLnB5CkBAIC0xNTAsODcgKzE1MCw5NiBAQAogICAgIGZpbGUgPSBUZXh0RmlsZShmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgc3RyaXBfY29tbWVudHM9MSwgc2tpcF9ibGFua3M9MSwgam9pbl9saW5lcz0xLAogICAgICAgICAgICAgICAgICAgICBsc3RyaXBfd3M9MSwgcnN0cmlwX3dzPTEpCi0gICAgZXh0ZW5zaW9ucyA9IFtdCisgICAgdHJ5OgorICAgICAgICBleHRlbnNpb25zID0gW10KIAotICAgIHdoaWxlIDE6Ci0gICAgICAgIGxpbmUgPSBmaWxlLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbGluZSBpcyBOb25lOiAgICAgICAgICAgICAgICAjIGVvZgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgX3ZhcmlhYmxlX3J4Lm1hdGNoKGxpbmUpOiAgICAjIFZBUj1WQUxVRSwgaGFuZGxlZCBpbiBmaXJzdCBwYXNzCi0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgIGlmIGxpbmVbMF0gPT0gbGluZVstMV0gPT0gIioiOgotICAgICAgICAgICAgZmlsZS53YXJuKCInJXMnIGxpbmVzIG5vdCBoYW5kbGVkIHlldCIgJSBsaW5lKQotICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAjcHJpbnQgIm9yaWdpbmFsIGxpbmU6ICIgKyBsaW5lCi0gICAgICAgIGxpbmUgPSBleHBhbmRfbWFrZWZpbGVfdmFycyhsaW5lLCB2YXJzKQotICAgICAgICB3b3JkcyA9IHNwbGl0X3F1b3RlZChsaW5lKQotICAgICAgICAjcHJpbnQgImV4cGFuZGVkIGxpbmU6ICIgKyBsaW5lCi0KLSAgICAgICAgIyBOQi4gdGhpcyBwYXJzZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc3ludGF4IHRoYW4gdGhlIG9sZAotICAgICAgICAjIG1ha2VzZXR1cCBzY3JpcHQ6IGhlcmUsIHRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgZXh0ZW5zaW9uIHBlcgotICAgICAgICAjIGxpbmUsIGFuZCBpdCBtdXN0IGJlIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lLiAgSSBoYXZlIG5vIGlkZWEKLSAgICAgICAgIyB3aHkgdGhlIG9sZCBzeW50YXggc3VwcG9ydGVkIG11bHRpcGxlIGV4dGVuc2lvbnMgcGVyIGxpbmUsIGFzCi0gICAgICAgICMgdGhleSBhbGwgd2luZCB1cCBiZWluZyB0aGUgc2FtZS4KLQotICAgICAgICBtb2R1bGUgPSB3b3Jkc1swXQotICAgICAgICBleHQgPSBFeHRlbnNpb24obW9kdWxlLCBbXSkKLSAgICAgICAgYXBwZW5kX25leHRfd29yZCA9IE5vbmUKLQotICAgICAgICBmb3Igd29yZCBpbiB3b3Jkc1sxOl06Ci0gICAgICAgICAgICBpZiBhcHBlbmRfbmV4dF93b3JkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQuYXBwZW5kKHdvcmQpCi0gICAgICAgICAgICAgICAgYXBwZW5kX25leHRfd29yZCA9IE5vbmUKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGxpbmUgPSBmaWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIGxpbmUgaXMgTm9uZTogICAgICAgICAgICAgICAgIyBlb2YKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgX3ZhcmlhYmxlX3J4Lm1hdGNoKGxpbmUpOiAgICAjIFZBUj1WQUxVRSwgaGFuZGxlZCBpbiBmaXJzdCBwYXNzCiAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgc3VmZml4ID0gb3MucGF0aC5zcGxpdGV4dCh3b3JkKVsxXQotICAgICAgICAgICAgc3dpdGNoID0gd29yZFswOjJdIDsgdmFsdWUgPSB3b3JkWzI6XQorICAgICAgICAgICAgICAgIGlmIGxpbmVbMF0gPT0gbGluZVstMV0gPT0gIioiOgorICAgICAgICAgICAgICAgICAgICBmaWxlLndhcm4oIiclcycgbGluZXMgbm90IGhhbmRsZWQgeWV0IiAlIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGlmIHN1ZmZpeCBpbiAoIi5jIiwgIi5jYyIsICIuY3BwIiwgIi5jeHgiLCAiLmMrKyIsICIubSIsICIubW0iKToKLSAgICAgICAgICAgICAgICAjIGhtbSwgc2hvdWxkIHdlIGRvIHNvbWV0aGluZyBhYm91dCBDIHZzLiBDKysgc291cmNlcz8KLSAgICAgICAgICAgICAgICAjIG9yIGxlYXZlIGl0IHVwIHRvIHRoZSBDQ29tcGlsZXIgaW1wbGVtZW50YXRpb24gdG8KLSAgICAgICAgICAgICAgICAjIHdvcnJ5IGFib3V0PwotICAgICAgICAgICAgICAgIGV4dC5zb3VyY2VzLmFwcGVuZCh3b3JkKQotICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi1JIjoKLSAgICAgICAgICAgICAgICBleHQuaW5jbHVkZV9kaXJzLmFwcGVuZCh2YWx1ZSkKLSAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItRCI6Ci0gICAgICAgICAgICAgICAgZXF1YWxzID0gc3RyaW5nLmZpbmQodmFsdWUsICI9IikKLSAgICAgICAgICAgICAgICBpZiBlcXVhbHMgPT0gLTE6ICAgICAgICAjIGJhcmUgIi1ERk9PIiAtLSBubyB2YWx1ZQotICAgICAgICAgICAgICAgICAgICBleHQuZGVmaW5lX21hY3Jvcy5hcHBlbmQoKHZhbHVlLCBOb25lKSkKLSAgICAgICAgICAgICAgICBlbHNlOiAgICAgICAgICAgICAgICAgICAjICItREZPTz1ibGFoIgotICAgICAgICAgICAgICAgICAgICBleHQuZGVmaW5lX21hY3Jvcy5hcHBlbmQoKHZhbHVlWzA6ZXF1YWxzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtlcXVhbHMrMjpdKSkKLSAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItVSI6Ci0gICAgICAgICAgICAgICAgZXh0LnVuZGVmX21hY3Jvcy5hcHBlbmQodmFsdWUpCi0gICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLUMiOiAgICAgICAgIyBvbmx5IGhlcmUgJ2NhdXNlIG1ha2VzZXR1cCBoYXMgaXQhCi0gICAgICAgICAgICAgICAgZXh0LmV4dHJhX2NvbXBpbGVfYXJncy5hcHBlbmQod29yZCkKLSAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItbCI6Ci0gICAgICAgICAgICAgICAgZXh0LmxpYnJhcmllcy5hcHBlbmQodmFsdWUpCi0gICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLUwiOgotICAgICAgICAgICAgICAgIGV4dC5saWJyYXJ5X2RpcnMuYXBwZW5kKHZhbHVlKQotICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi1SIjoKLSAgICAgICAgICAgICAgICBleHQucnVudGltZV9saWJyYXJ5X2RpcnMuYXBwZW5kKHZhbHVlKQotICAgICAgICAgICAgZWxpZiB3b3JkID09ICItcnBhdGgiOgotICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBleHQucnVudGltZV9saWJyYXJ5X2RpcnMKLSAgICAgICAgICAgIGVsaWYgd29yZCA9PSAiLVhsaW5rZXIiOgotICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBleHQuZXh0cmFfbGlua19hcmdzCi0gICAgICAgICAgICBlbGlmIHdvcmQgPT0gIi1YY29tcGlsZXIiOgotICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBleHQuZXh0cmFfY29tcGlsZV9hcmdzCi0gICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLXUiOgotICAgICAgICAgICAgICAgIGV4dC5leHRyYV9saW5rX2FyZ3MuYXBwZW5kKHdvcmQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgI3ByaW50ICJvcmlnaW5hbCBsaW5lOiAiICsgbGluZQorICAgICAgICAgICAgbGluZSA9IGV4cGFuZF9tYWtlZmlsZV92YXJzKGxpbmUsIHZhcnMpCisgICAgICAgICAgICB3b3JkcyA9IHNwbGl0X3F1b3RlZChsaW5lKQorICAgICAgICAgICAgI3ByaW50ICJleHBhbmRlZCBsaW5lOiAiICsgbGluZQorCisgICAgICAgICAgICAjIE5CLiB0aGlzIHBhcnNlcyBhIHNsaWdodGx5IGRpZmZlcmVudCBzeW50YXggdGhhbiB0aGUgb2xkCisgICAgICAgICAgICAjIG1ha2VzZXR1cCBzY3JpcHQ6IGhlcmUsIHRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgZXh0ZW5zaW9uIHBlcgorICAgICAgICAgICAgIyBsaW5lLCBhbmQgaXQgbXVzdCBiZSB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZS4gIEkgaGF2ZSBubyBpZGVhCisgICAgICAgICAgICAjIHdoeSB0aGUgb2xkIHN5bnRheCBzdXBwb3J0ZWQgbXVsdGlwbGUgZXh0ZW5zaW9ucyBwZXIgbGluZSwgYXMKKyAgICAgICAgICAgICMgdGhleSBhbGwgd2luZCB1cCBiZWluZyB0aGUgc2FtZS4KKworICAgICAgICAgICAgbW9kdWxlID0gd29yZHNbMF0KKyAgICAgICAgICAgIGV4dCA9IEV4dGVuc2lvbihtb2R1bGUsIFtdKQorICAgICAgICAgICAgYXBwZW5kX25leHRfd29yZCA9IE5vbmUKKworICAgICAgICAgICAgZm9yIHdvcmQgaW4gd29yZHNbMTpdOgorICAgICAgICAgICAgICAgIGlmIGFwcGVuZF9uZXh0X3dvcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQuYXBwZW5kKHdvcmQpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBzdWZmaXggPSBvcy5wYXRoLnNwbGl0ZXh0KHdvcmQpWzFdCisgICAgICAgICAgICAgICAgc3dpdGNoID0gd29yZFswOjJdIDsgdmFsdWUgPSB3b3JkWzI6XQorCisgICAgICAgICAgICAgICAgaWYgc3VmZml4IGluICgiLmMiLCAiLmNjIiwgIi5jcHAiLCAiLmN4eCIsICIuYysrIiwgIi5tIiwgIi5tbSIpOgorICAgICAgICAgICAgICAgICAgICAjIGhtbSwgc2hvdWxkIHdlIGRvIHNvbWV0aGluZyBhYm91dCBDIHZzLiBDKysgc291cmNlcz8KKyAgICAgICAgICAgICAgICAgICAgIyBvciBsZWF2ZSBpdCB1cCB0byB0aGUgQ0NvbXBpbGVyIGltcGxlbWVudGF0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgICMgd29ycnkgYWJvdXQ/CisgICAgICAgICAgICAgICAgICAgIGV4dC5zb3VyY2VzLmFwcGVuZCh3b3JkKQorICAgICAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItSSI6CisgICAgICAgICAgICAgICAgICAgIGV4dC5pbmNsdWRlX2RpcnMuYXBwZW5kKHZhbHVlKQorICAgICAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItRCI6CisgICAgICAgICAgICAgICAgICAgIGVxdWFscyA9IHN0cmluZy5maW5kKHZhbHVlLCAiPSIpCisgICAgICAgICAgICAgICAgICAgIGlmIGVxdWFscyA9PSAtMTogICAgICAgICMgYmFyZSAiLURGT08iIC0tIG5vIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBleHQuZGVmaW5lX21hY3Jvcy5hcHBlbmQoKHZhbHVlLCBOb25lKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgIyAiLURGT089YmxhaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dC5kZWZpbmVfbWFjcm9zLmFwcGVuZCgodmFsdWVbMDplcXVhbHNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtlcXVhbHMrMjpdKSkKKyAgICAgICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLVUiOgorICAgICAgICAgICAgICAgICAgICBleHQudW5kZWZfbWFjcm9zLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLUMiOiAgICAgICAgIyBvbmx5IGhlcmUgJ2NhdXNlIG1ha2VzZXR1cCBoYXMgaXQhCisgICAgICAgICAgICAgICAgICAgIGV4dC5leHRyYV9jb21waWxlX2FyZ3MuYXBwZW5kKHdvcmQpCisgICAgICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi1sIjoKKyAgICAgICAgICAgICAgICAgICAgZXh0LmxpYnJhcmllcy5hcHBlbmQodmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi1MIjoKKyAgICAgICAgICAgICAgICAgICAgZXh0LmxpYnJhcnlfZGlycy5hcHBlbmQodmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi1SIjoKKyAgICAgICAgICAgICAgICAgICAgZXh0LnJ1bnRpbWVfbGlicmFyeV9kaXJzLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBlbGlmIHdvcmQgPT0gIi1ycGF0aCI6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBleHQucnVudGltZV9saWJyYXJ5X2RpcnMKKyAgICAgICAgICAgICAgICBlbGlmIHdvcmQgPT0gIi1YbGlua2VyIjoKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25leHRfd29yZCA9IGV4dC5leHRyYV9saW5rX2FyZ3MKLSAgICAgICAgICAgIGVsaWYgc3VmZml4IGluICgiLmEiLCAiLnNvIiwgIi5zbCIsICIubyIsICIuZHlsaWIiKToKLSAgICAgICAgICAgICAgICAjIE5CLiBhIHJlYWxseSBmYWl0aGZ1bCBlbXVsYXRpb24gb2YgbWFrZXNldHVwIHdvdWxkCi0gICAgICAgICAgICAgICAgIyBhcHBlbmQgYSAubyBmaWxlIHRvIGV4dHJhX29iamVjdHMgb25seSBpZiBpdAotICAgICAgICAgICAgICAgICMgaGFkIGEgc2xhc2ggaW4gaXQ7IG90aGVyd2lzZSwgaXQgd291bGQgcy8uby8uYy8KLSAgICAgICAgICAgICAgICAjIGFuZCBhcHBlbmQgaXQgdG8gc291cmNlcy4gIEhtbW1tLgotICAgICAgICAgICAgICAgIGV4dC5leHRyYV9vYmplY3RzLmFwcGVuZCh3b3JkKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmaWxlLndhcm4oInVucmVjb2duaXplZCBhcmd1bWVudCAnJXMnIiAlIHdvcmQpCisgICAgICAgICAgICAgICAgZWxpZiB3b3JkID09ICItWGNvbXBpbGVyIjoKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25leHRfd29yZCA9IGV4dC5leHRyYV9jb21waWxlX2FyZ3MKKyAgICAgICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLXUiOgorICAgICAgICAgICAgICAgICAgICBleHQuZXh0cmFfbGlua19hcmdzLmFwcGVuZCh3b3JkKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfbmV4dF93b3JkID0gZXh0LmV4dHJhX2xpbmtfYXJncworICAgICAgICAgICAgICAgIGVsaWYgd29yZCA9PSAiLVhjb21waWxlciI6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBleHQuZXh0cmFfY29tcGlsZV9hcmdzCisgICAgICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi11IjoKKyAgICAgICAgICAgICAgICAgICAgZXh0LmV4dHJhX2xpbmtfYXJncy5hcHBlbmQod29yZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25leHRfd29yZCA9IGV4dC5leHRyYV9saW5rX2FyZ3MKKyAgICAgICAgICAgICAgICBlbGlmIHN1ZmZpeCBpbiAoIi5hIiwgIi5zbyIsICIuc2wiLCAiLm8iLCAiLmR5bGliIik6CisgICAgICAgICAgICAgICAgICAgICMgTkIuIGEgcmVhbGx5IGZhaXRoZnVsIGVtdWxhdGlvbiBvZiBtYWtlc2V0dXAgd291bGQKKyAgICAgICAgICAgICAgICAgICAgIyBhcHBlbmQgYSAubyBmaWxlIHRvIGV4dHJhX29iamVjdHMgb25seSBpZiBpdAorICAgICAgICAgICAgICAgICAgICAjIGhhZCBhIHNsYXNoIGluIGl0OyBvdGhlcndpc2UsIGl0IHdvdWxkIHMvLm8vLmMvCisgICAgICAgICAgICAgICAgICAgICMgYW5kIGFwcGVuZCBpdCB0byBzb3VyY2VzLiAgSG1tbW0uCisgICAgICAgICAgICAgICAgICAgIGV4dC5leHRyYV9vYmplY3RzLmFwcGVuZCh3b3JkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZpbGUud2FybigidW5yZWNvZ25pemVkIGFyZ3VtZW50ICclcyciICUgd29yZCkKIAotICAgICAgICBleHRlbnNpb25zLmFwcGVuZChleHQpCisgICAgICAgICAgICBleHRlbnNpb25zLmFwcGVuZChleHQpCisgICAgZmluYWxseToKKyAgICAgICAgZmlsZS5jbG9zZSgpCiAKICAgICAgICAgI3ByaW50ICJtb2R1bGU6IiwgbW9kdWxlCiAgICAgICAgICNwcmludCAic291cmNlIGZpbGVzOiIsIHNvdXJjZV9maWxlcwpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9mYW5jeV9nZXRvcHQucHkgYi9MaWIvZGlzdHV0aWxzL2ZhbmN5X2dldG9wdC5weQppbmRleCAzMWNmMGM1Li4yZGVhOTQ4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2ZhbmN5X2dldG9wdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2ZhbmN5X2dldG9wdC5weQpAQCAtOCwxNCArOCwxMyBAQAogICAqIG9wdGlvbnMgc2V0IGF0dHJpYnV0ZXMgb2YgYSBwYXNzZWQtaW4gb2JqZWN0CiAiIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBzeXMsIHN0cmluZywgcmUKLWZyb20gdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCByZQogaW1wb3J0IGdldG9wdAotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0dldG9wdEVycm9yLCBEaXN0dXRpbHNBcmdFcnJvcgogCiAjIE11Y2ggbGlrZSBjb21tYW5kX3JlIGluIGRpc3R1dGlscy5jb3JlLCB0aGlzIGlzIGNsb3NlIHRvIGJ1dCBub3QgcXVpdGUKICMgdGhlIHNhbWUgYXMgYSBQeXRob24gTkFNRSAtLSBleGNlcHQsIGluIHRoZSBzcGlyaXQgb2YgbW9zdCBHTlUKQEAgLTExOSw3ICsxMTgsNyBAQAogCiAKICAgICBkZWYgX2NoZWNrX2FsaWFzX2RpY3QgKHNlbGYsIGFsaWFzZXMsIHdoYXQpOgotICAgICAgICBhc3NlcnQgdHlwZShhbGlhc2VzKSBpcyBEaWN0aW9uYXJ5VHlwZQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhbGlhc2VzLCBkaWN0KQogICAgICAgICBmb3IgKGFsaWFzLCBvcHQpIGluIGFsaWFzZXMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGFsaWFzIG5vdCBpbiBzZWxmLm9wdGlvbl9pbmRleDoKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNHZXRvcHRFcnJvciwgXApAQCAtMTY2LDEzICsxNjUsMTMgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiaW52YWxpZCBvcHRpb24gdHVwbGU6ICVyIiAlIChvcHRpb24sKQogCiAgICAgICAgICAgICAjIFR5cGUtIGFuZCB2YWx1ZS1jaGVjayB0aGUgb3B0aW9uIG5hbWVzCi0gICAgICAgICAgICBpZiB0eXBlKGxvbmcpIGlzIG5vdCBTdHJpbmdUeXBlIG9yIGxlbihsb25nKSA8IDI6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShsb25nLCBzdHIpIG9yIGxlbihsb25nKSA8IDI6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzR2V0b3B0RXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAoImludmFsaWQgbG9uZyBvcHRpb24gJyVzJzogIgogICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBhIHN0cmluZyBvZiBsZW5ndGggPj0gMiIpICUgbG9uZwogCiAgICAgICAgICAgICBpZiAobm90ICgoc2hvcnQgaXMgTm9uZSkgb3IKLSAgICAgICAgICAgICAgICAgICAgICh0eXBlKHNob3J0KSBpcyBTdHJpbmdUeXBlIGFuZCBsZW4oc2hvcnQpID09IDEpKSk6CisgICAgICAgICAgICAgICAgICAgICAoaXNpbnN0YW5jZShzaG9ydCwgc3RyKSBhbmQgbGVuKHNob3J0KSA9PSAxKSkpOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0dldG9wdEVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgKCJpbnZhbGlkIHNob3J0IG9wdGlvbiAnJXMnOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGEgc2luZ2xlIGNoYXJhY3RlciBvciBOb25lIikgJSBzaG9ydApAQCAtNDY2LDEwICs0NjUsOCBAQAogCiAgICAgcmV0dXJuIGxpbmVzCiAKLSMgd3JhcF90ZXh0ICgpCiAKLQotZGVmIHRyYW5zbGF0ZV9sb25nb3B0IChvcHQpOgorZGVmIHRyYW5zbGF0ZV9sb25nb3B0KG9wdCk6CiAgICAgIiIiQ29udmVydCBhIGxvbmcgb3B0aW9uIG5hbWUgdG8gYSB2YWxpZCBQeXRob24gaWRlbnRpZmllciBieQogICAgIGNoYW5naW5nICItIiB0byAiXyIuCiAgICAgIiIiCkBAIC00ODUsMTggKzQ4MiwzIEBACiAgICAgICAgICdvcHRpb25zJyB3aWxsIGJlIGluaXRpYWxpemVkIHRvIE5vbmUuIiIiCiAgICAgICAgIGZvciBvcHQgaW4gb3B0aW9uczoKICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgb3B0LCBOb25lKQotCi0jIGNsYXNzIE9wdGlvbkR1bW15Ci0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXh0ID0gIiIiXAotVHJhLWxhLWxhLCBzdXBlcmNhbGlmcmFnaWxpc3RpY2V4cGlhbGlkb2Npb3VzLgotSG93ICpkbyogeW91IHNwZWxsIHRoYXQgb2RkIHdvcmQsIGFueXdheXM/Ci0oU29tZW9uZSBhc2sgTWFyeSAtLSBzaGUnbGwga25vdyBbb3Igc2hlJ2xsCi1zYXksICJIb3cgc2hvdWxkIEkga25vdz8iXS4pIiIiCi0KLSAgICBmb3IgdyBpbiAoMTAsIDIwLCAzMCwgNDApOgotICAgICAgICBwcmludCAid2lkdGg6ICVkIiAlIHcKLSAgICAgICAgcHJpbnQgc3RyaW5nLmpvaW4od3JhcF90ZXh0KHRleHQsIHcpLCAiXG4iKQotICAgICAgICBwcmludApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQppbmRleCAzN2IxNTJlLi5iOWYwNzg2IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQpAQCAtMyw4ICszLDYgQEAKIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBvcGVyYXRpbmcgb24gc2luZ2xlIGZpbGVzLgogIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBpbXBvcnQgb3MKQEAgLTEyLDQ5ICsxMCw0OCBAQAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCiAjIGZvciBnZW5lcmF0aW5nIHZlcmJvc2Ugb3V0cHV0IGluICdjb3B5X2ZpbGUoKScKLV9jb3B5X2FjdGlvbiA9IHsgTm9uZTogICAnY29weWluZycsCi0gICAgICAgICAgICAgICAgICdoYXJkJzogJ2hhcmQgbGlua2luZycsCi0gICAgICAgICAgICAgICAgICdzeW0nOiAgJ3N5bWJvbGljYWxseSBsaW5raW5nJyB9CitfY29weV9hY3Rpb24gPSB7Tm9uZTogJ2NvcHlpbmcnLAorICAgICAgICAgICAgICAgICdoYXJkJzogJ2hhcmQgbGlua2luZycsCisgICAgICAgICAgICAgICAgJ3N5bSc6ICdzeW1ib2xpY2FsbHkgbGlua2luZyd9CiAKIAotZGVmIF9jb3B5X2ZpbGVfY29udGVudHMgKHNyYywgZHN0LCBidWZmZXJfc2l6ZT0xNioxMDI0KToKLSAgICAiIiJDb3B5IHRoZSBmaWxlICdzcmMnIHRvICdkc3QnOyBib3RoIG11c3QgYmUgZmlsZW5hbWVzLiAgQW55IGVycm9yCi0gICAgb3BlbmluZyBlaXRoZXIgZmlsZSwgcmVhZGluZyBmcm9tICdzcmMnLCBvciB3cml0aW5nIHRvICdkc3QnLCByYWlzZXMKLSAgICBEaXN0dXRpbHNGaWxlRXJyb3IuICBEYXRhIGlzIHJlYWQvd3JpdHRlbiBpbiBjaHVua3Mgb2YgJ2J1ZmZlcl9zaXplJwotICAgIGJ5dGVzIChkZWZhdWx0IDE2aykuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gaGFuZGxlIGFueXRoaW5nIGFwYXJ0IGZyb20KLSAgICByZWd1bGFyIGZpbGVzLgorZGVmIF9jb3B5X2ZpbGVfY29udGVudHMoc3JjLCBkc3QsIGJ1ZmZlcl9zaXplPTE2KjEwMjQpOgorICAgICIiIkNvcHkgdGhlIGZpbGUgJ3NyYycgdG8gJ2RzdCcuCisKKyAgICBCb3RoIG11c3QgYmUgZmlsZW5hbWVzLiBBbnkgZXJyb3Igb3BlbmluZyBlaXRoZXIgZmlsZSwgcmVhZGluZyBmcm9tCisgICAgJ3NyYycsIG9yIHdyaXRpbmcgdG8gJ2RzdCcsIHJhaXNlcyBEaXN0dXRpbHNGaWxlRXJyb3IuICBEYXRhIGlzCisgICAgcmVhZC93cml0dGVuIGluIGNodW5rcyBvZiAnYnVmZmVyX3NpemUnIGJ5dGVzIChkZWZhdWx0IDE2aykuICBObyBhdHRlbXB0CisgICAgaXMgbWFkZSB0byBoYW5kbGUgYW55dGhpbmcgYXBhcnQgZnJvbSByZWd1bGFyIGZpbGVzLgogICAgICIiIgogICAgICMgU3RvbGVuIGZyb20gc2h1dGlsIG1vZHVsZSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSwgYnV0IHdpdGgKICAgICAjIGN1c3RvbSBlcnJvci1oYW5kbGluZyBhZGRlZC4KLQogICAgIGZzcmMgPSBOb25lCiAgICAgZmRzdCA9IE5vbmUKICAgICB0cnk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZzcmMgPSBvcGVuKHNyYywgJ3JiJykKICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCAoZXJybm8sIGVycnN0cik6Ci0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IsIFwKLSAgICAgICAgICAgICAgICAgICJjb3VsZCBub3Qgb3BlbiAnJXMnOiAlcyIgJSAoc3JjLCBlcnJzdHIpCisgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoImNvdWxkIG5vdCBvcGVuICclcyc6ICVzIiAlIChzcmMsIGVycnN0cikpCiAKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZHN0KToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZHN0KQogICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCAoZXJybm8sIGVycnN0cik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBkZWxldGUgJyVzJzogJXMiICUgKGRzdCwgZXJyc3RyKQorICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGRlbGV0ZSAnJXMnOiAlcyIgJSAoZHN0LCBlcnJzdHIpKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZkc3QgPSBvcGVuKGRzdCwgJ3diJykKICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCAoZXJybm8sIGVycnN0cik6Ci0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IsIFwKLSAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlICclcyc6ICVzIiAlIChkc3QsIGVycnN0cikKKyAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlICclcyc6ICVzIiAlIChkc3QsIGVycnN0cikpCiAKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBidWYgPSBmc3JjLnJlYWQoYnVmZmVyX3NpemUpCiAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IsIChlcnJubywgZXJyc3RyKToKLSAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IsIFwKLSAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHJlYWQgZnJvbSAnJXMnOiAlcyIgJSAoc3JjLCBlcnJzdHIpCisgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgcmVhZCBmcm9tICclcyc6ICVzIiAlIChzcmMsIGVycnN0cikpCiAKICAgICAgICAgICAgIGlmIG5vdCBidWY6CiAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTYyLDggKzU5LDggQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZHN0LndyaXRlKGJ1ZikKICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgKGVycm5vLCBlcnJzdHIpOgotICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJzogJXMiICUgKGRzdCwgZXJyc3RyKQorICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHdyaXRlIHRvICclcyc6ICVzIiAlIChkc3QsIGVycnN0cikpCiAKICAgICBmaW5hbGx5OgogICAgICAgICBpZiBmZHN0OgpAQCAtNzEsMjUgKzY4LDE4IEBACiAgICAgICAgIGlmIGZzcmM6CiAgICAgICAgICAgICBmc3JjLmNsb3NlKCkKIAotIyBfY29weV9maWxlX2NvbnRlbnRzKCkKK2RlZiBjb3B5X2ZpbGUoc3JjLCBkc3QsIHByZXNlcnZlX21vZGU9MSwgcHJlc2VydmVfdGltZXM9MSwgdXBkYXRlPTAsCisgICAgICAgICAgICAgIGxpbms9Tm9uZSwgdmVyYm9zZT0xLCBkcnlfcnVuPTApOgorICAgICIiIkNvcHkgYSBmaWxlICdzcmMnIHRvICdkc3QnLgogCi1kZWYgY29weV9maWxlIChzcmMsIGRzdCwKLSAgICAgICAgICAgICAgIHByZXNlcnZlX21vZGU9MSwKLSAgICAgICAgICAgICAgIHByZXNlcnZlX3RpbWVzPTEsCi0gICAgICAgICAgICAgICB1cGRhdGU9MCwKLSAgICAgICAgICAgICAgIGxpbms9Tm9uZSwKLSAgICAgICAgICAgICAgIHZlcmJvc2U9MCwKLSAgICAgICAgICAgICAgIGRyeV9ydW49MCk6Ci0KLSAgICAiIiJDb3B5IGEgZmlsZSAnc3JjJyB0byAnZHN0Jy4gIElmICdkc3QnIGlzIGEgZGlyZWN0b3J5LCB0aGVuICdzcmMnIGlzCi0gICAgY29waWVkIHRoZXJlIHdpdGggdGhlIHNhbWUgbmFtZTsgb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGEgZmlsZW5hbWUuICAoSWYKLSAgICB0aGUgZmlsZSBleGlzdHMsIGl0IHdpbGwgYmUgcnV0aGxlc3NseSBjbG9iYmVyZWQuKSAgSWYgJ3ByZXNlcnZlX21vZGUnCi0gICAgaXMgdHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGUgZmlsZSdzIG1vZGUgKHR5cGUgYW5kIHBlcm1pc3Npb24gYml0cywgb3IKLSAgICB3aGF0ZXZlciBpcyBhbmFsb2dvdXMgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0pIGlzIGNvcGllZC4gIElmCi0gICAgJ3ByZXNlcnZlX3RpbWVzJyBpcyB0cnVlICh0aGUgZGVmYXVsdCksIHRoZSBsYXN0LW1vZGlmaWVkIGFuZAotICAgIGxhc3QtYWNjZXNzIHRpbWVzIGFyZSBjb3BpZWQgYXMgd2VsbC4gIElmICd1cGRhdGUnIGlzIHRydWUsICdzcmMnIHdpbGwKLSAgICBvbmx5IGJlIGNvcGllZCBpZiAnZHN0JyBkb2VzIG5vdCBleGlzdCwgb3IgaWYgJ2RzdCcgZG9lcyBleGlzdCBidXQgaXMKLSAgICBvbGRlciB0aGFuICdzcmMnLgorICAgIElmICdkc3QnIGlzIGEgZGlyZWN0b3J5LCB0aGVuICdzcmMnIGlzIGNvcGllZCB0aGVyZSB3aXRoIHRoZSBzYW1lIG5hbWU7CisgICAgb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGEgZmlsZW5hbWUuICAoSWYgdGhlIGZpbGUgZXhpc3RzLCBpdCB3aWxsIGJlCisgICAgcnV0aGxlc3NseSBjbG9iYmVyZWQuKSAgSWYgJ3ByZXNlcnZlX21vZGUnIGlzIHRydWUgKHRoZSBkZWZhdWx0KSwKKyAgICB0aGUgZmlsZSdzIG1vZGUgKHR5cGUgYW5kIHBlcm1pc3Npb24gYml0cywgb3Igd2hhdGV2ZXIgaXMgYW5hbG9nb3VzIG9uCisgICAgdGhlIGN1cnJlbnQgcGxhdGZvcm0pIGlzIGNvcGllZC4gIElmICdwcmVzZXJ2ZV90aW1lcycgaXMgdHJ1ZSAodGhlCisgICAgZGVmYXVsdCksIHRoZSBsYXN0LW1vZGlmaWVkIGFuZCBsYXN0LWFjY2VzcyB0aW1lcyBhcmUgY29waWVkIGFzIHdlbGwuCisgICAgSWYgJ3VwZGF0ZScgaXMgdHJ1ZSwgJ3NyYycgd2lsbCBvbmx5IGJlIGNvcGllZCBpZiAnZHN0JyBkb2VzIG5vdCBleGlzdCwKKyAgICBvciBpZiAnZHN0JyBkb2VzIGV4aXN0IGJ1dCBpcyBvbGRlciB0aGFuICdzcmMnLgogCiAgICAgJ2xpbmsnIGFsbG93cyB5b3UgdG8gbWFrZSBoYXJkIGxpbmtzIChvcy5saW5rKSBvciBzeW1ib2xpYyBsaW5rcwogICAgIChvcy5zeW1saW5rKSBpbnN0ZWFkIG9mIGNvcHlpbmc6IHNldCBpdCB0byAiaGFyZCIgb3IgInN5bSI7IGlmIGl0IGlzCkBAIC0xMTUsOCArMTA1LDggQEAKICAgICBmcm9tIHN0YXQgaW1wb3J0IFNUX0FUSU1FLCBTVF9NVElNRSwgU1RfTU9ERSwgU19JTU9ERQogCiAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNyYyk6Ci0gICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAotICAgICAgICAgICAgICAiY2FuJ3QgY29weSAnJXMnOiBkb2Vzbid0IGV4aXN0IG9yIG5vdCBhIHJlZ3VsYXIgZmlsZSIgJSBzcmMKKyAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAorICAgICAgICAgICAgICAiY2FuJ3QgY29weSAnJXMnOiBkb2Vzbid0IGV4aXN0IG9yIG5vdCBhIHJlZ3VsYXIgZmlsZSIgJSBzcmMpCiAKICAgICBpZiBvcy5wYXRoLmlzZGlyKGRzdCk6CiAgICAgICAgIGRpciA9IGRzdApAQCAtMTI1LDM0ICsxMTUsMjcgQEAKICAgICAgICAgZGlyID0gb3MucGF0aC5kaXJuYW1lKGRzdCkKIAogICAgIGlmIHVwZGF0ZSBhbmQgbm90IG5ld2VyKHNyYywgZHN0KToKLSAgICAgICAgbG9nLmRlYnVnKCJub3QgY29weWluZyAlcyAob3V0cHV0IHVwLXRvLWRhdGUpIiwgc3JjKQorICAgICAgICBpZiB2ZXJib3NlID49IDE6CisgICAgICAgICAgICBsb2cuZGVidWcoIm5vdCBjb3B5aW5nICVzIChvdXRwdXQgdXAtdG8tZGF0ZSkiLCBzcmMpCiAgICAgICAgIHJldHVybiBkc3QsIDAKIAogICAgIHRyeToKICAgICAgICAgYWN0aW9uID0gX2NvcHlfYWN0aW9uW2xpbmtdCiAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCBcCi0gICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlICclcycgZm9yICdsaW5rJyBhcmd1bWVudCIgJSBsaW5rCi0gICAgaWYgb3MucGF0aC5iYXNlbmFtZShkc3QpID09IG9zLnBhdGguYmFzZW5hbWUoc3JjKToKLSAgICAgICAgbG9nLmluZm8oIiVzICVzIC0+ICVzIiwgYWN0aW9uLCBzcmMsIGRpcikKLSAgICBlbHNlOgotICAgICAgICBsb2cuaW5mbygiJXMgJXMgLT4gJXMiLCBhY3Rpb24sIHNyYywgZHN0KQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHZhbHVlICclcycgZm9yICdsaW5rJyBhcmd1bWVudCIgJSBsaW5rKQorCisgICAgaWYgdmVyYm9zZSA+PSAxOgorICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKGRzdCkgPT0gb3MucGF0aC5iYXNlbmFtZShzcmMpOgorICAgICAgICAgICAgbG9nLmluZm8oIiVzICVzIC0+ICVzIiwgYWN0aW9uLCBzcmMsIGRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5pbmZvKCIlcyAlcyAtPiAlcyIsIGFjdGlvbiwgc3JjLCBkc3QpCiAKICAgICBpZiBkcnlfcnVuOgogICAgICAgICByZXR1cm4gKGRzdCwgMSkKIAotICAgICMgT24gTWFjIE9TLCB1c2UgdGhlIG5hdGl2ZSBmaWxlIGNvcHkgcm91dGluZQotICAgIGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgIGltcG9ydCBtYWNvc3Rvb2xzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1hY29zdG9vbHMuY29weShzcmMsIGRzdCwgMCwgcHJlc2VydmVfdGltZXMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgZXhjOgotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnOiAlcyIgJSAoc3JjLCBkc3QsIGV4Y1stMV0pCi0KICAgICAjIElmIGxpbmtpbmcgKGhhcmQgb3Igc3ltYm9saWMpLCB1c2UgdGhlIGFwcHJvcHJpYXRlIHN5c3RlbSBjYWxsCiAgICAgIyAoVW5peCBvbmx5LCBvZiBjb3Vyc2UsIGJ1dCB0aGF0J3MgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5KQotICAgIGVsaWYgbGluayA9PSAnaGFyZCc6CisgICAgaWYgbGluayA9PSAnaGFyZCc6CiAgICAgICAgIGlmIG5vdCAob3MucGF0aC5leGlzdHMoZHN0KSBhbmQgb3MucGF0aC5zYW1lZmlsZShzcmMsIGRzdCkpOgogICAgICAgICAgICAgb3MubGluayhzcmMsIGRzdCkKICAgICBlbGlmIGxpbmsgPT0gJ3N5bSc6CkBAIC0xNzUsMTcgKzE1OCwxMyBAQAogCiAgICAgcmV0dXJuIChkc3QsIDEpCiAKLSMgY29weV9maWxlICgpCi0KLQogIyBYWFggSSBzdXNwZWN0IHRoaXMgaXMgVW5peC1zcGVjaWZpYyAtLSBuZWVkIHBvcnRpbmcgaGVscCEKLWRlZiBtb3ZlX2ZpbGUgKHNyYywgZHN0LAotICAgICAgICAgICAgICAgdmVyYm9zZT0wLAotICAgICAgICAgICAgICAgZHJ5X3J1bj0wKToKK2RlZiBtb3ZlX2ZpbGUgKHNyYywgZHN0LCB2ZXJib3NlPTEsIGRyeV9ydW49MCk6CisgICAgIiIiTW92ZSBhIGZpbGUgJ3NyYycgdG8gJ2RzdCcuCiAKLSAgICAiIiJNb3ZlIGEgZmlsZSAnc3JjJyB0byAnZHN0Jy4gIElmICdkc3QnIGlzIGEgZGlyZWN0b3J5LCB0aGUgZmlsZSB3aWxsCi0gICAgYmUgbW92ZWQgaW50byBpdCB3aXRoIHRoZSBzYW1lIG5hbWU7IG90aGVyd2lzZSwgJ3NyYycgaXMganVzdCByZW5hbWVkCi0gICAgdG8gJ2RzdCcuICBSZXR1cm4gdGhlIG5ldyBmdWxsIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgSWYgJ2RzdCcgaXMgYSBkaXJlY3RvcnksIHRoZSBmaWxlIHdpbGwgYmUgbW92ZWQgaW50byBpdCB3aXRoIHRoZSBzYW1lCisgICAgbmFtZTsgb3RoZXJ3aXNlLCAnc3JjJyBpcyBqdXN0IHJlbmFtZWQgdG8gJ2RzdCcuICBSZXR1cm4gdGhlIG5ldworICAgIGZ1bGwgbmFtZSBvZiB0aGUgZmlsZS4KIAogICAgIEhhbmRsZXMgY3Jvc3MtZGV2aWNlIG1vdmVzIG9uIFVuaXggdXNpbmcgJ2NvcHlfZmlsZSgpJy4gIFdoYXQgYWJvdXQKICAgICBvdGhlciBzeXN0ZW1zPz8/CkBAIC0xOTMsMjYgKzE3MiwyNiBAQAogICAgIGZyb20gb3MucGF0aCBpbXBvcnQgZXhpc3RzLCBpc2ZpbGUsIGlzZGlyLCBiYXNlbmFtZSwgZGlybmFtZQogICAgIGltcG9ydCBlcnJubwogCi0gICAgbG9nLmluZm8oIm1vdmluZyAlcyAtPiAlcyIsIHNyYywgZHN0KQorICAgIGlmIHZlcmJvc2UgPj0gMToKKyAgICAgICAgbG9nLmluZm8oIm1vdmluZyAlcyAtPiAlcyIsIHNyYywgZHN0KQogCiAgICAgaWYgZHJ5X3J1bjoKICAgICAgICAgcmV0dXJuIGRzdAogCiAgICAgaWYgbm90IGlzZmlsZShzcmMpOgotICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IsIFwKLSAgICAgICAgICAgICAgImNhbid0IG1vdmUgJyVzJzogbm90IGEgcmVndWxhciBmaWxlIiAlIHNyYworICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoImNhbid0IG1vdmUgJyVzJzogbm90IGEgcmVndWxhciBmaWxlIiAlIHNyYykKIAogICAgIGlmIGlzZGlyKGRzdCk6CiAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihkc3QsIGJhc2VuYW1lKHNyYykpCiAgICAgZWxpZiBleGlzdHMoZHN0KToKLSAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCi0gICAgICAgICAgICAgICJjYW4ndCBtb3ZlICclcyc6IGRlc3RpbmF0aW9uICclcycgYWxyZWFkeSBleGlzdHMiICUgXAotICAgICAgICAgICAgICAoc3JjLCBkc3QpCisgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKKyAgICAgICAgICAgICAgImNhbid0IG1vdmUgJyVzJzogZGVzdGluYXRpb24gJyVzJyBhbHJlYWR5IGV4aXN0cyIgJQorICAgICAgICAgICAgICAoc3JjLCBkc3QpKQogCiAgICAgaWYgbm90IGlzZGlyKGRpcm5hbWUoZHN0KSk6Ci0gICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAorICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICJjYW4ndCBtb3ZlICclcyc6IGRlc3RpbmF0aW9uICclcycgbm90IGEgdmFsaWQgcGF0aCIgJSBcCi0gICAgICAgICAgICAgIChzcmMsIGRzdCkKKyAgICAgICAgICAgICAgKHNyYywgZHN0KSkKIAogICAgIGNvcHlfaXQgPSAwCiAgICAgdHJ5OgpAQCAtMjIxLDExICsyMDAsMTEgQEAKICAgICAgICAgaWYgbnVtID09IGVycm5vLkVYREVWOgogICAgICAgICAgICAgY29weV9pdCA9IDEKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgImNvdWxkbid0IG1vdmUgJyVzJyB0byAnJXMnOiAlcyIgJSAoc3JjLCBkc3QsIG1zZykKKyAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBtb3ZlICclcycgdG8gJyVzJzogJXMiICUgKHNyYywgZHN0LCBtc2cpKQogCiAgICAgaWYgY29weV9pdDoKLSAgICAgICAgY29weV9maWxlKHNyYywgZHN0KQorICAgICAgICBjb3B5X2ZpbGUoc3JjLCBkc3QsIHZlcmJvc2U9dmVyYm9zZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHNyYykKICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCAobnVtLCBtc2cpOgpAQCAtMjMzLDIxICsyMTIsMjAgQEAKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZHN0KQogICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAorICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgKCJjb3VsZG4ndCBtb3ZlICclcycgdG8gJyVzJyBieSBjb3B5L2RlbGV0ZTogIiArCi0gICAgICAgICAgICAgICAgICAgImRlbGV0ZSAnJXMnIGZhaWxlZDogJXMiKSAlIFwKLSAgICAgICAgICAgICAgICAgIChzcmMsIGRzdCwgc3JjLCBtc2cpCi0KKyAgICAgICAgICAgICAgICAgICAiZGVsZXRlICclcycgZmFpbGVkOiAlcyIpICUKKyAgICAgICAgICAgICAgICAgIChzcmMsIGRzdCwgc3JjLCBtc2cpKQogICAgIHJldHVybiBkc3QKIAotIyBtb3ZlX2ZpbGUgKCkKLQogCiBkZWYgd3JpdGVfZmlsZSAoZmlsZW5hbWUsIGNvbnRlbnRzKToKICAgICAiIiJDcmVhdGUgYSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFuZCB3cml0ZSAnY29udGVudHMnIChhCiAgICAgc2VxdWVuY2Ugb2Ygc3RyaW5ncyB3aXRob3V0IGxpbmUgdGVybWluYXRvcnMpIHRvIGl0LgogICAgICIiIgogICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIpCi0gICAgZm9yIGxpbmUgaW4gY29udGVudHM6Ci0gICAgICAgIGYud3JpdGUobGluZSArICJcbiIpCi0gICAgZi5jbG9zZSgpCisgICAgdHJ5OgorICAgICAgICBmb3IgbGluZSBpbiBjb250ZW50czoKKyAgICAgICAgICAgIGYud3JpdGUobGluZSArICJcbiIpCisgICAgZmluYWxseToKKyAgICAgICAgZi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2ZpbGVsaXN0LnB5IGIvTGliL2Rpc3R1dGlscy9maWxlbGlzdC5weQppbmRleCA0NDQ4ZDVjLi40YWFjNmQzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2ZpbGVsaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZmlsZWxpc3QucHkKQEAgLTQsMTkgKzQsMTUgQEAKIGFuZCBidWlsZGluZyBsaXN0cyBvZiBmaWxlcy4KICIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotaW1wb3J0IG9zLCBzdHJpbmcsIHJlCitpbXBvcnQgb3MsIHJlCiBpbXBvcnQgZm5tYXRjaAotZnJvbSB0eXBlcyBpbXBvcnQgKgogZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY29udmVydF9wYXRoCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1RlbXBsYXRlRXJyb3IsIERpc3R1dGlsc0ludGVybmFsRXJyb3IKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAogY2xhc3MgRmlsZUxpc3Q6Ci0KICAgICAiIiJBIGxpc3Qgb2YgZmlsZXMgYnVpbHQgYnkgb24gZXhwbG9yaW5nIHRoZSBmaWxlc3lzdGVtIGFuZCBmaWx0ZXJlZCBieQogICAgIGFwcGx5aW5nIHZhcmlvdXMgcGF0dGVybnMgdG8gd2hhdCB3ZSBmaW5kIHRoZXJlLgogCkBAIC0zMSwyMiArMjcsMTkgQEAKICAgICAgICAgZmlsdGVyaW5nIGFwcGxpZWQpCiAgICAgIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwKLSAgICAgICAgICAgICAgICAgd2Fybj1Ob25lLAotICAgICAgICAgICAgICAgICBkZWJ1Z19wcmludD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2Fybj1Ob25lLCBkZWJ1Z19wcmludD1Ob25lKToKICAgICAgICAgIyBpZ25vcmUgYXJndW1lbnQgdG8gRmlsZUxpc3QsIGJ1dCBrZWVwIHRoZW0gZm9yIGJhY2t3YXJkcwogICAgICAgICAjIGNvbXBhdGliaWxpdHkKLQogICAgICAgICBzZWxmLmFsbGZpbGVzID0gTm9uZQogICAgICAgICBzZWxmLmZpbGVzID0gW10KIAotICAgIGRlZiBzZXRfYWxsZmlsZXMgKHNlbGYsIGFsbGZpbGVzKToKKyAgICBkZWYgc2V0X2FsbGZpbGVzKHNlbGYsIGFsbGZpbGVzKToKICAgICAgICAgc2VsZi5hbGxmaWxlcyA9IGFsbGZpbGVzCiAKLSAgICBkZWYgZmluZGFsbCAoc2VsZiwgZGlyPW9zLmN1cmRpcik6CisgICAgZGVmIGZpbmRhbGwoc2VsZiwgZGlyPW9zLmN1cmRpcik6CiAgICAgICAgIHNlbGYuYWxsZmlsZXMgPSBmaW5kYWxsKGRpcikKIAotICAgIGRlZiBkZWJ1Z19wcmludCAoc2VsZiwgbXNnKToKKyAgICBkZWYgZGVidWdfcHJpbnQoc2VsZiwgbXNnKToKICAgICAgICAgIiIiUHJpbnQgJ21zZycgdG8gc3Rkb3V0IGlmIHRoZSBnbG9iYWwgREVCVUcgKHRha2VuIGZyb20gdGhlCiAgICAgICAgIERJU1RVVElMU19ERUJVRyBlbnZpcm9ubWVudCB2YXJpYWJsZSkgZmxhZyBpcyB0cnVlLgogICAgICAgICAiIiIKQEAgLTU2LDEzICs0OSwxMyBAQAogCiAgICAgIyAtLSBMaXN0LWxpa2UgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiBhcHBlbmQgKHNlbGYsIGl0ZW0pOgorICAgIGRlZiBhcHBlbmQoc2VsZiwgaXRlbSk6CiAgICAgICAgIHNlbGYuZmlsZXMuYXBwZW5kKGl0ZW0pCiAKLSAgICBkZWYgZXh0ZW5kIChzZWxmLCBpdGVtcyk6CisgICAgZGVmIGV4dGVuZChzZWxmLCBpdGVtcyk6CiAgICAgICAgIHNlbGYuZmlsZXMuZXh0ZW5kKGl0ZW1zKQogCi0gICAgZGVmIHNvcnQgKHNlbGYpOgorICAgIGRlZiBzb3J0KHNlbGYpOgogICAgICAgICAjIE5vdCBhIHN0cmljdCBsZXhpY2FsIHNvcnQhCiAgICAgICAgIHNvcnRhYmxlX2ZpbGVzID0gbWFwKG9zLnBhdGguc3BsaXQsIHNlbGYuZmlsZXMpCiAgICAgICAgIHNvcnRhYmxlX2ZpbGVzLnNvcnQoKQpAQCAtNzMsNyArNjYsNyBAQAogCiAgICAgIyAtLSBPdGhlciBtaXNjZWxsYW5lb3VzIHV0aWxpdHkgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiByZW1vdmVfZHVwbGljYXRlcyAoc2VsZik6CisgICAgZGVmIHJlbW92ZV9kdXBsaWNhdGVzKHNlbGYpOgogICAgICAgICAjIEFzc3VtZXMgbGlzdCBoYXMgYmVlbiBzb3J0ZWQhCiAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLmZpbGVzKSAtIDEsIDAsIC0xKToKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZXNbaV0gPT0gc2VsZi5maWxlc1tpIC0gMV06CkBAIC04Miw4ICs3NSw4IEBACiAKICAgICAjIC0tICJGaWxlIHRlbXBsYXRlIiBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIF9wYXJzZV90ZW1wbGF0ZV9saW5lIChzZWxmLCBsaW5lKToKLSAgICAgICAgd29yZHMgPSBzdHJpbmcuc3BsaXQobGluZSkKKyAgICBkZWYgX3BhcnNlX3RlbXBsYXRlX2xpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIHdvcmRzID0gbGluZS5zcGxpdCgpCiAgICAgICAgIGFjdGlvbiA9IHdvcmRzWzBdCiAKICAgICAgICAgcGF0dGVybnMgPSBkaXIgPSBkaXJfcGF0dGVybiA9IE5vbmUKQEAgLTExNiw0NCArMTA5LDQwIEBACiAKICAgICAgICAgcmV0dXJuIChhY3Rpb24sIHBhdHRlcm5zLCBkaXIsIGRpcl9wYXR0ZXJuKQogCi0gICAgIyBfcGFyc2VfdGVtcGxhdGVfbGluZSAoKQotCi0KLSAgICBkZWYgcHJvY2Vzc190ZW1wbGF0ZV9saW5lIChzZWxmLCBsaW5lKToKLQorICAgIGRlZiBwcm9jZXNzX3RlbXBsYXRlX2xpbmUoc2VsZiwgbGluZSk6CiAgICAgICAgICMgUGFyc2UgdGhlIGxpbmU6IHNwbGl0IGl0IHVwLCBtYWtlIHN1cmUgdGhlIHJpZ2h0IG51bWJlciBvZiB3b3JkcwogICAgICAgICAjIGlzIHRoZXJlLCBhbmQgcmV0dXJuIHRoZSByZWxldmFudCB3b3Jkcy4gICdhY3Rpb24nIGlzIGFsd2F5cwogICAgICAgICAjIGRlZmluZWQ6IGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUuICBXaGljaCBvZiB0aGUgb3RoZXIKICAgICAgICAgIyB0aHJlZSBhcmUgZGVmaW5lZCBkZXBlbmRzIG9uIHRoZSBhY3Rpb247IGl0J2xsIGJlIGVpdGhlcgogICAgICAgICAjIHBhdHRlcm5zLCAoZGlyIGFuZCBwYXR0ZXJucyksIG9yIChkaXJfcGF0dGVybikuCi0gICAgICAgIChhY3Rpb24sIHBhdHRlcm5zLCBkaXIsIGRpcl9wYXR0ZXJuKSA9IHNlbGYuX3BhcnNlX3RlbXBsYXRlX2xpbmUobGluZSkKKyAgICAgICAgYWN0aW9uLCBwYXR0ZXJucywgZGlyLCBkaXJfcGF0dGVybiA9IHNlbGYuX3BhcnNlX3RlbXBsYXRlX2xpbmUobGluZSkKIAogICAgICAgICAjIE9LLCBub3cgd2Uga25vdyB0aGF0IHRoZSBhY3Rpb24gaXMgdmFsaWQgYW5kIHdlIGhhdmUgdGhlCiAgICAgICAgICMgcmlnaHQgbnVtYmVyIG9mIHdvcmRzIG9uIHRoZSBsaW5lIGZvciB0aGF0IGFjdGlvbiAtLSBzbyB3ZQogICAgICAgICAjIGNhbiBwcm9jZWVkIHdpdGggbWluaW1hbCBlcnJvci1jaGVja2luZy4KICAgICAgICAgaWYgYWN0aW9uID09ICdpbmNsdWRlJzoKLSAgICAgICAgICAgIHNlbGYuZGVidWdfcHJpbnQoImluY2x1ZGUgIiArIHN0cmluZy5qb2luKHBhdHRlcm5zKSkKKyAgICAgICAgICAgIHNlbGYuZGVidWdfcHJpbnQoImluY2x1ZGUgIiArICcgJy5qb2luKHBhdHRlcm5zKSkKICAgICAgICAgICAgIGZvciBwYXR0ZXJuIGluIHBhdHRlcm5zOgogICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmluY2x1ZGVfcGF0dGVybihwYXR0ZXJuLCBhbmNob3I9MSk6CiAgICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKCJ3YXJuaW5nOiBubyBmaWxlcyBmb3VuZCBtYXRjaGluZyAnJXMnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybikKIAogICAgICAgICBlbGlmIGFjdGlvbiA9PSAnZXhjbHVkZSc6Ci0gICAgICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJleGNsdWRlICIgKyBzdHJpbmcuam9pbihwYXR0ZXJucykpCisgICAgICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJleGNsdWRlICIgKyAnICcuam9pbihwYXR0ZXJucykpCiAgICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJuczoKICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5leGNsdWRlX3BhdHRlcm4ocGF0dGVybiwgYW5jaG9yPTEpOgogICAgICAgICAgICAgICAgICAgICBsb2cud2FybigoIndhcm5pbmc6IG5vIHByZXZpb3VzbHktaW5jbHVkZWQgZmlsZXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvdW5kIG1hdGNoaW5nICclcyciKSwgcGF0dGVybikKIAogICAgICAgICBlbGlmIGFjdGlvbiA9PSAnZ2xvYmFsLWluY2x1ZGUnOgotICAgICAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiZ2xvYmFsLWluY2x1ZGUgIiArIHN0cmluZy5qb2luKHBhdHRlcm5zKSkKKyAgICAgICAgICAgIHNlbGYuZGVidWdfcHJpbnQoImdsb2JhbC1pbmNsdWRlICIgKyAnICcuam9pbihwYXR0ZXJucykpCiAgICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJuczoKICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5pbmNsdWRlX3BhdHRlcm4ocGF0dGVybiwgYW5jaG9yPTApOgogICAgICAgICAgICAgICAgICAgICBsb2cud2FybigoIndhcm5pbmc6IG5vIGZpbGVzIGZvdW5kIG1hdGNoaW5nICclcycgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW55d2hlcmUgaW4gZGlzdHJpYnV0aW9uIiksIHBhdHRlcm4pCiAKICAgICAgICAgZWxpZiBhY3Rpb24gPT0gJ2dsb2JhbC1leGNsdWRlJzoKLSAgICAgICAgICAgIHNlbGYuZGVidWdfcHJpbnQoImdsb2JhbC1leGNsdWRlICIgKyBzdHJpbmcuam9pbihwYXR0ZXJucykpCisgICAgICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJnbG9iYWwtZXhjbHVkZSAiICsgJyAnLmpvaW4ocGF0dGVybnMpKQogICAgICAgICAgICAgZm9yIHBhdHRlcm4gaW4gcGF0dGVybnM6CiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZXhjbHVkZV9wYXR0ZXJuKHBhdHRlcm4sIGFuY2hvcj0wKToKICAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oKCJ3YXJuaW5nOiBubyBwcmV2aW91c2x5LWluY2x1ZGVkIGZpbGVzIG1hdGNoaW5nICIKQEAgLTE2Miw3ICsxNTEsNyBAQAogCiAgICAgICAgIGVsaWYgYWN0aW9uID09ICdyZWN1cnNpdmUtaW5jbHVkZSc6CiAgICAgICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJyZWN1cnNpdmUtaW5jbHVkZSAlcyAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlyLCBzdHJpbmcuam9pbihwYXR0ZXJucykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlyLCAnICcuam9pbihwYXR0ZXJucykpKQogICAgICAgICAgICAgZm9yIHBhdHRlcm4gaW4gcGF0dGVybnM6CiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuaW5jbHVkZV9wYXR0ZXJuKHBhdHRlcm4sIHByZWZpeD1kaXIpOgogICAgICAgICAgICAgICAgICAgICBsb2cud2FybigoIndhcm5pbmc6IG5vIGZpbGVzIGZvdW5kIG1hdGNoaW5nICclcycgIiArCkBAIC0xNzEsNyArMTYwLDcgQEAKIAogICAgICAgICBlbGlmIGFjdGlvbiA9PSAncmVjdXJzaXZlLWV4Y2x1ZGUnOgogICAgICAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgicmVjdXJzaXZlLWV4Y2x1ZGUgJXMgJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpciwgc3RyaW5nLmpvaW4ocGF0dGVybnMpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpciwgJyAnLmpvaW4ocGF0dGVybnMpKSkKICAgICAgICAgICAgIGZvciBwYXR0ZXJuIGluIHBhdHRlcm5zOgogICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmV4Y2x1ZGVfcGF0dGVybihwYXR0ZXJuLCBwcmVmaXg9ZGlyKToKICAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oKCJ3YXJuaW5nOiBubyBwcmV2aW91c2x5LWluY2x1ZGVkIGZpbGVzIG1hdGNoaW5nICIKQEAgLTE5MywxOCArMTgyLDE1IEBACiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNJbnRlcm5hbEVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAidGhpcyBjYW5ub3QgaGFwcGVuOiBpbnZhbGlkIGFjdGlvbiAnJXMnIiAlIGFjdGlvbgogCi0gICAgIyBwcm9jZXNzX3RlbXBsYXRlX2xpbmUgKCkKLQotCiAgICAgIyAtLSBGaWx0ZXJpbmcvc2VsZWN0aW9uIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiBpbmNsdWRlX3BhdHRlcm4gKHNlbGYsIHBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yPTEsIHByZWZpeD1Ob25lLCBpc19yZWdleD0wKToKKyAgICBkZWYgaW5jbHVkZV9wYXR0ZXJuKHNlbGYsIHBhdHRlcm4sIGFuY2hvcj0xLCBwcmVmaXg9Tm9uZSwgaXNfcmVnZXg9MCk6CiAgICAgICAgICIiIlNlbGVjdCBzdHJpbmdzIChwcmVzdW1hYmx5IGZpbGVuYW1lcykgZnJvbSAnc2VsZi5maWxlcycgdGhhdAotICAgICAgICBtYXRjaCAncGF0dGVybicsIGEgVW5peC1zdHlsZSB3aWxkY2FyZCAoZ2xvYikgcGF0dGVybi4gIFBhdHRlcm5zCi0gICAgICAgIGFyZSBub3QgcXVpdGUgdGhlIHNhbWUgYXMgaW1wbGVtZW50ZWQgYnkgdGhlICdmbm1hdGNoJyBtb2R1bGU6ICcqJwotICAgICAgICBhbmQgJz8nICBtYXRjaCBub24tc3BlY2lhbCBjaGFyYWN0ZXJzLCB3aGVyZSAic3BlY2lhbCIgaXMgcGxhdGZvcm0tCi0gICAgICAgIGRlcGVuZGVudDogc2xhc2ggb24gVW5peDsgY29sb24sIHNsYXNoLCBhbmQgYmFja3NsYXNoIG9uCisgICAgICAgIG1hdGNoICdwYXR0ZXJuJywgYSBVbml4LXN0eWxlIHdpbGRjYXJkIChnbG9iKSBwYXR0ZXJuLgorCisgICAgICAgIFBhdHRlcm5zIGFyZSBub3QgcXVpdGUgdGhlIHNhbWUgYXMgaW1wbGVtZW50ZWQgYnkgdGhlICdmbm1hdGNoJworICAgICAgICBtb2R1bGU6ICcqJyBhbmQgJz8nICBtYXRjaCBub24tc3BlY2lhbCBjaGFyYWN0ZXJzLCB3aGVyZSAic3BlY2lhbCIKKyAgICAgICAgaXMgcGxhdGZvcm0tZGVwZW5kZW50OiBzbGFzaCBvbiBVbml4OyBjb2xvbiwgc2xhc2gsIGFuZCBiYWNrc2xhc2ggb24KICAgICAgICAgRE9TL1dpbmRvd3M7IGFuZCBjb2xvbiBvbiBNYWMgT1MuCiAKICAgICAgICAgSWYgJ2FuY2hvcicgaXMgdHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGVuIHRoZSBwYXR0ZXJuIG1hdGNoIGlzIG1vcmUKQEAgLTI0MSwxNiArMjI3LDE0IEBACiAKICAgICAgICAgcmV0dXJuIGZpbGVzX2ZvdW5kCiAKLSAgICAjIGluY2x1ZGVfcGF0dGVybiAoKQogCi0KLSAgICBkZWYgZXhjbHVkZV9wYXR0ZXJuIChzZWxmLCBwYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcj0xLCBwcmVmaXg9Tm9uZSwgaXNfcmVnZXg9MCk6CisgICAgZGVmIGV4Y2x1ZGVfcGF0dGVybihzZWxmLCBwYXR0ZXJuLCBhbmNob3I9MSwgcHJlZml4PU5vbmUsIGlzX3JlZ2V4PTApOgogICAgICAgICAiIiJSZW1vdmUgc3RyaW5ncyAocHJlc3VtYWJseSBmaWxlbmFtZXMpIGZyb20gJ2ZpbGVzJyB0aGF0IG1hdGNoCi0gICAgICAgICdwYXR0ZXJuJy4gIE90aGVyIHBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lIGFzIGZvcgotICAgICAgICAnaW5jbHVkZV9wYXR0ZXJuKCknLCBhYm92ZS4KLSAgICAgICAgVGhlIGxpc3QgJ3NlbGYuZmlsZXMnIGlzIG1vZGlmaWVkIGluIHBsYWNlLgotICAgICAgICBSZXR1cm4gMSBpZiBmaWxlcyBhcmUgZm91bmQuCisgICAgICAgICdwYXR0ZXJuJy4KKworICAgICAgICBPdGhlciBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZSBhcyBmb3IgJ2luY2x1ZGVfcGF0dGVybigpJywgYWJvdmUuCisgICAgICAgIFRoZSBsaXN0ICdzZWxmLmZpbGVzJyBpcyBtb2RpZmllZCBpbiBwbGFjZS4gUmV0dXJuIDEgaWYgZmlsZXMgYXJlCisgICAgICAgIGZvdW5kLgogICAgICAgICAiIiIKICAgICAgICAgZmlsZXNfZm91bmQgPSAwCiAgICAgICAgIHBhdHRlcm5fcmUgPSB0cmFuc2xhdGVfcGF0dGVybihwYXR0ZXJuLCBhbmNob3IsIHByZWZpeCwgaXNfcmVnZXgpCkBAIC0yNjQsMTUgKzI0OCwxMSBAQAogCiAgICAgICAgIHJldHVybiBmaWxlc19mb3VuZAogCi0gICAgIyBleGNsdWRlX3BhdHRlcm4gKCkKLQotIyBjbGFzcyBGaWxlTGlzdAotCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBVdGlsaXR5IGZ1bmN0aW9ucwogCi1kZWYgZmluZGFsbCAoZGlyID0gb3MuY3VyZGlyKToKK2RlZiBmaW5kYWxsKGRpciA9IG9zLmN1cmRpcik6CiAgICAgIiIiRmluZCBhbGwgZmlsZXMgdW5kZXIgJ2RpcicgYW5kIHJldHVybiB0aGUgbGlzdCBvZiBmdWxsIGZpbGVuYW1lcwogICAgIChyZWxhdGl2ZSB0byAnZGlyJykuCiAgICAgIiIiCkBAIC0zMDUsMTAgKzI4NSwxMSBAQAogCiAKIGRlZiBnbG9iX3RvX3JlKHBhdHRlcm4pOgotICAgICIiIlRyYW5zbGF0ZSBhIHNoZWxsLWxpa2UgZ2xvYiBwYXR0ZXJuIHRvIGEgcmVndWxhciBleHByZXNzaW9uOyByZXR1cm4KLSAgICBhIHN0cmluZyBjb250YWluaW5nIHRoZSByZWdleC4gIERpZmZlcnMgZnJvbSAnZm5tYXRjaC50cmFuc2xhdGUoKScgaW4KLSAgICB0aGF0ICcqJyBkb2VzIG5vdCBtYXRjaCAic3BlY2lhbCBjaGFyYWN0ZXJzIiAod2hpY2ggYXJlCi0gICAgcGxhdGZvcm0tc3BlY2lmaWMpLgorICAgICIiIlRyYW5zbGF0ZSBhIHNoZWxsLWxpa2UgZ2xvYiBwYXR0ZXJuIHRvIGEgcmVndWxhciBleHByZXNzaW9uLgorCisgICAgUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlZ2V4LiAgRGlmZmVycyBmcm9tCisgICAgJ2ZubWF0Y2gudHJhbnNsYXRlKCknIGluIHRoYXQgJyonIGRvZXMgbm90IG1hdGNoICJzcGVjaWFsIGNoYXJhY3RlcnMiCisgICAgKHdoaWNoIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYykuCiAgICAgIiIiCiAgICAgcGF0dGVybl9yZSA9IGZubWF0Y2gudHJhbnNsYXRlKHBhdHRlcm4pCiAKQEAgLTMyMywxNyArMzA0LDE3IEBACiAKICAgICByZXR1cm4gcGF0dGVybl9yZQogCi0jIGdsb2JfdG9fcmUgKCkKIAotCi1kZWYgdHJhbnNsYXRlX3BhdHRlcm4gKHBhdHRlcm4sIGFuY2hvcj0xLCBwcmVmaXg9Tm9uZSwgaXNfcmVnZXg9MCk6CitkZWYgdHJhbnNsYXRlX3BhdHRlcm4ocGF0dGVybiwgYW5jaG9yPTEsIHByZWZpeD1Ob25lLCBpc19yZWdleD0wKToKICAgICAiIiJUcmFuc2xhdGUgYSBzaGVsbC1saWtlIHdpbGRjYXJkIHBhdHRlcm4gdG8gYSBjb21waWxlZCByZWd1bGFyCi0gICAgZXhwcmVzc2lvbi4gIFJldHVybiB0aGUgY29tcGlsZWQgcmVnZXguICBJZiAnaXNfcmVnZXgnIHRydWUsCisgICAgZXhwcmVzc2lvbi4KKworICAgIFJldHVybiB0aGUgY29tcGlsZWQgcmVnZXguICBJZiAnaXNfcmVnZXgnIHRydWUsCiAgICAgdGhlbiAncGF0dGVybicgaXMgZGlyZWN0bHkgY29tcGlsZWQgdG8gYSByZWdleCAoaWYgaXQncyBhIHN0cmluZykKICAgICBvciBqdXN0IHJldHVybmVkIGFzLWlzIChhc3N1bWVzIGl0J3MgYSByZWdleCBvYmplY3QpLgogICAgICIiIgogICAgIGlmIGlzX3JlZ2V4OgotICAgICAgICBpZiB0eXBlKHBhdHRlcm4pIGlzIFN0cmluZ1R5cGU6CisgICAgICAgIGlmIGlzaW5zdGFuY2UocGF0dGVybiwgc3RyKToKICAgICAgICAgICAgIHJldHVybiByZS5jb21waWxlKHBhdHRlcm4pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gcGF0dGVybgpAQCAtMzQ2LDEyICszMjcsMTAgQEAKICAgICBpZiBwcmVmaXggaXMgbm90IE5vbmU6CiAgICAgICAgICMgZGl0Y2ggZW5kIG9mIHBhdHRlcm4gY2hhcmFjdGVyCiAgICAgICAgIGVtcHR5X3BhdHRlcm4gPSBnbG9iX3RvX3JlKCcnKQotICAgICAgICBwcmVmaXhfcmUgPSAoZ2xvYl90b19yZShwcmVmaXgpKVs6LWxlbihlbXB0eV9wYXR0ZXJuKV0KKyAgICAgICAgcHJlZml4X3JlID0gZ2xvYl90b19yZShwcmVmaXgpWzotbGVuKGVtcHR5X3BhdHRlcm4pXQogICAgICAgICBwYXR0ZXJuX3JlID0gIl4iICsgb3MucGF0aC5qb2luKHByZWZpeF9yZSwgIi4qIiArIHBhdHRlcm5fcmUpCiAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBwcmVmaXggLS0gcmVzcGVjdCBhbmNob3IgZmxhZwogICAgICAgICBpZiBhbmNob3I6CiAgICAgICAgICAgICBwYXR0ZXJuX3JlID0gIl4iICsgcGF0dGVybl9yZQogCiAgICAgcmV0dXJuIHJlLmNvbXBpbGUocGF0dGVybl9yZSkKLQotIyB0cmFuc2xhdGVfcGF0dGVybiAoKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9sb2cucHkgYi9MaWIvZGlzdHV0aWxzL2xvZy5weQppbmRleCA5NWQ0YzFjLi43NTg4NTcwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2xvZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2xvZy5weQpAQCAtMSw3ICsxLDUgQEAKICIiIkEgc2ltcGxlIGxvZyBtZWNoYW5pc20gc3R5bGVkIGFmdGVyIFBFUCAyODIuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KICMgVGhlIGNsYXNzIGhlcmUgaXMgc3R5bGVkIGFmdGVyIFBFUCAyODIgc28gdGhhdCBpdCBjb3VsZCBsYXRlciBiZQogIyByZXBsYWNlZCB3aXRoIGEgc3RhbmRhcmQgUHl0aG9uIGxvZ2dpbmcgaW1wbGVtZW50YXRpb24uCiAKQEAgLTE5LDE0ICsxNywxOCBAQAogICAgICAgICBzZWxmLnRocmVzaG9sZCA9IHRocmVzaG9sZAogCiAgICAgZGVmIF9sb2coc2VsZiwgbGV2ZWwsIG1zZywgYXJncyk6CisgICAgICAgIGlmIGxldmVsIG5vdCBpbiAoREVCVUcsIElORk8sIFdBUk4sIEVSUk9SLCBGQVRBTCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCclcyB3cm9uZyBsb2cgbGV2ZWwnICUgc3RyKGxldmVsKSkKKwogICAgICAgICBpZiBsZXZlbCA+PSBzZWxmLnRocmVzaG9sZDoKLSAgICAgICAgICAgIGlmIG5vdCBhcmdzOgotICAgICAgICAgICAgICAgICMgbXNnIG1heSBjb250YWluIGEgJyUnLiBJZiBhcmdzIGlzIGVtcHR5LAotICAgICAgICAgICAgICAgICMgZG9uJ3QgZXZlbiB0cnkgdG8gc3RyaW5nLWZvcm1hdAotICAgICAgICAgICAgICAgIHByaW50IG1zZworICAgICAgICAgICAgaWYgYXJnczoKKyAgICAgICAgICAgICAgICBtc2cgPSBtc2cgJSBhcmdzCisgICAgICAgICAgICBpZiBsZXZlbCBpbiAoV0FSTiwgRVJST1IsIEZBVEFMKToKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBzeXMuc3RkZXJyCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50IG1zZyAlIGFyZ3MKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgIHN0cmVhbSA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSgnJXNcbicgJSBtc2cpCisgICAgICAgICAgICBzdHJlYW0uZmx1c2goKQogCiAgICAgZGVmIGxvZyhzZWxmLCBsZXZlbCwgbXNnLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2xvZyhsZXZlbCwgbXNnLCBhcmdzKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CmluZGV4IDlmZThjNzQuLmJmODVhYzcgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKQEAgLTE4LDEwICsxOCwxMCBAQAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCByZQorCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IChEaXN0dXRpbHNFeGVjRXJyb3IsIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsCi0gICAgQ29tcGlsZUVycm9yLCBMaWJFcnJvciwgTGlua0Vycm9yKQotZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCAoQ0NvbXBpbGVyLCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zLAotICAgIGdlbl9saWJfb3B0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgTGliRXJyb3IsIExpbmtFcnJvcikKK2Zyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgQ0NvbXBpbGVyLCBnZW5fbGliX29wdGlvbnMKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybQogCkBAIC00MywxMCArNDMsMTIgQEAKICAgICAjIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdHJ5IGJyYW5jaCwgaWYgd2UncmUgcnVubmluZyBhCiAgICAgIyA2NC1iaXQgUHl0aG9uIG9uIFdpbjY0CiAgICAgVlNfQkFTRSA9IHIiU29mdHdhcmVcV293NjQzMk5vZGVcTWljcm9zb2Z0XFZpc3VhbFN0dWRpb1wlMC4xZiIKKyAgICBWU0VYUFJFU1NfQkFTRSA9IHIiU29mdHdhcmVcV293NjQzMk5vZGVcTWljcm9zb2Z0XFZDRXhwcmVzc1wlMC4xZiIKICAgICBXSU5TREtfQkFTRSA9IHIiU29mdHdhcmVcV293NjQzMk5vZGVcTWljcm9zb2Z0XE1pY3Jvc29mdCBTREtzXFdpbmRvd3MiCiAgICAgTkVUX0JBU0UgPSByIlNvZnR3YXJlXFdvdzY0MzJOb2RlXE1pY3Jvc29mdFwuTkVURnJhbWV3b3JrIgogZWxzZToKICAgICBWU19CQVNFID0gciJTb2Z0d2FyZVxNaWNyb3NvZnRcVmlzdWFsU3R1ZGlvXCUwLjFmIgorICAgIFZTRVhQUkVTU19CQVNFID0gciJTb2Z0d2FyZVxNaWNyb3NvZnRcVkNFeHByZXNzXCUwLjFmIgogICAgIFdJTlNES19CQVNFID0gciJTb2Z0d2FyZVxNaWNyb3NvZnRcTWljcm9zb2Z0IFNES3NcV2luZG93cyIKICAgICBORVRfQkFTRSA9IHIiU29mdHdhcmVcTWljcm9zb2Z0XC5ORVRGcmFtZXdvcmsiCiAKQEAgLTYzLDE1ICs2NSwxNCBAQAogICAgICIiIkhlbHBlciBjbGFzcyB0byByZWFkIHZhbHVlcyBmcm9tIHRoZSByZWdpc3RyeQogICAgICIiIgogCi0gICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGdldF92YWx1ZShjbHMsIHBhdGgsIGtleSk6CiAgICAgICAgIGZvciBiYXNlIGluIEhLRVlTOgogICAgICAgICAgICAgZCA9IGNscy5yZWFkX3ZhbHVlcyhiYXNlLCBwYXRoKQogICAgICAgICAgICAgaWYgZCBhbmQga2V5IGluIGQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRba2V5XQogICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisgICAgZ2V0X3ZhbHVlID0gY2xhc3NtZXRob2QoZ2V0X3ZhbHVlKQogCi0gICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHJlYWRfa2V5cyhjbHMsIGJhc2UsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBsaXN0IG9mIHJlZ2lzdHJ5IGtleXMuIiIiCiAgICAgICAgIHRyeToKQEAgLTg4LDggKzg5LDggQEAKICAgICAgICAgICAgIEwuYXBwZW5kKGspCiAgICAgICAgICAgICBpICs9IDEKICAgICAgICAgcmV0dXJuIEwKKyAgICByZWFkX2tleXMgPSBjbGFzc21ldGhvZChyZWFkX2tleXMpCiAKLSAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgcmVhZF92YWx1ZXMoY2xzLCBiYXNlLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gZGljdCBvZiByZWdpc3RyeSBrZXlzIGFuZCB2YWx1ZXMuCiAKQEAgLTExMCw4ICsxMTEsOCBAQAogICAgICAgICAgICAgZFtjbHMuY29udmVydF9tYmNzKG5hbWUpXSA9IGNscy5jb252ZXJ0X21iY3ModmFsdWUpCiAgICAgICAgICAgICBpICs9IDEKICAgICAgICAgcmV0dXJuIGQKKyAgICByZWFkX3ZhbHVlcyA9IGNsYXNzbWV0aG9kKHJlYWRfdmFsdWVzKQogCi0gICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjb252ZXJ0X21iY3Mocyk6CiAgICAgICAgIGRlYyA9IGdldGF0dHIocywgImRlY29kZSIsIE5vbmUpCiAgICAgICAgIGlmIGRlYyBpcyBub3QgTm9uZToKQEAgLTEyMCw2ICsxMjEsNyBAQAogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBzCisgICAgY29udmVydF9tYmNzID0gc3RhdGljbWV0aG9kKGNvbnZlcnRfbWJjcykKIAogY2xhc3MgTWFjcm9FeHBhbmRlcjoKIApAQCAtMTQxLDcgKzE0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNka2luc3RhbGxyb290djIuMCIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJzZGtpbnN0YWxscm9vdHYyLjAiKQotICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZXhjOiAjCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAiIiJQeXRob24gd2FzIGJ1aWx0IHdpdGggVmlzdWFsIFN0dWRpbyAyMDA4OwogZXh0ZW5zaW9ucyBtdXN0IGJlIGJ1aWx0IHdpdGggYSBjb21waWxlciB0aGFuIGNhbiBnZW5lcmF0ZSBjb21wYXRpYmxlIGJpbmFyaWVzLgpAQCAtMjI1LDkgKzIyNywxOCBAQAogICAgICAgICBwcm9kdWN0ZGlyID0gUmVnLmdldF92YWx1ZShyIiVzXFNldHVwXFZDIiAlIHZzYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb2R1Y3RkaXIiKQogICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgbG9nLmRlYnVnKCJVbmFibGUgdG8gZmluZCBwcm9kdWN0ZGlyIGluIHJlZ2lzdHJ5IikKICAgICAgICAgcHJvZHVjdGRpciA9IE5vbmUKIAorICAgICMgdHJ5aW5nIEV4cHJlc3MgZWRpdGlvbgorICAgIGlmIHByb2R1Y3RkaXIgaXMgTm9uZToKKyAgICAgICAgdnNiYXNlID0gVlNFWFBSRVNTX0JBU0UgJSB2ZXJzaW9uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb2R1Y3RkaXIgPSBSZWcuZ2V0X3ZhbHVlKHIiJXNcU2V0dXBcVkMiICUgdnNiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb2R1Y3RkaXIiKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwcm9kdWN0ZGlyID0gTm9uZQorICAgICAgICAgICAgbG9nLmRlYnVnKCJVbmFibGUgdG8gZmluZCBwcm9kdWN0ZGlyIGluIHJlZ2lzdHJ5IikKKwogICAgIGlmIG5vdCBwcm9kdWN0ZGlyIG9yIG5vdCBvcy5wYXRoLmlzZGlyKHByb2R1Y3RkaXIpOgogICAgICAgICB0b29sc2tleSA9ICJWUyUwLmYwQ09NTlRPT0xTIiAlIHZlcnNpb24KICAgICAgICAgdG9vbHNkaXIgPSBvcy5lbnZpcm9uLmdldCh0b29sc2tleSwgTm9uZSkKQEAgLTI2MiwyMyArMjczLDI3IEBACiAgICAgcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuKCciJXMiICVzICYgc2V0JyAlICh2Y3ZhcnNhbGwsIGFyY2gpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgIHRyeToKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCisgICAgICAgIGlmIHBvcGVuLndhaXQoKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcihzdGRlcnIuZGVjb2RlKCJtYmNzIikpCiAKLSAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKLSAgICBpZiBwb3Blbi53YWl0KCkgIT0gMDoKLSAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcihzdGRlcnIuZGVjb2RlKCJtYmNzIikpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5kZWNvZGUoIm1iY3MiKQorICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBsaW5lID0gUmVnLmNvbnZlcnRfbWJjcyhsaW5lKQorICAgICAgICAgICAgaWYgJz0nIG5vdCBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICBrZXksIHZhbHVlID0gbGluZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQorICAgICAgICAgICAgaWYga2V5IGluIGludGVyZXN0aW5nOgorICAgICAgICAgICAgICAgIGlmIHZhbHVlLmVuZHN3aXRoKG9zLnBhdGhzZXApOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWzotMV0KKyAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHJlbW92ZUR1cGxpY2F0ZXModmFsdWUpCiAKLSAgICBzdGRvdXQgPSBzdGRvdXQuZGVjb2RlKCJtYmNzIikKLSAgICBmb3IgbGluZSBpbiBzdGRvdXQuc3BsaXQoIlxuIik6Ci0gICAgICAgIGxpbmUgPSBSZWcuY29udmVydF9tYmNzKGxpbmUpCi0gICAgICAgIGlmICc9JyBub3QgaW4gbGluZToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAga2V5LCB2YWx1ZSA9IGxpbmUuc3BsaXQoJz0nLCAxKQotICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQotICAgICAgICBpZiBrZXkgaW4gaW50ZXJlc3Rpbmc6Ci0gICAgICAgICAgICBpZiB2YWx1ZS5lbmRzd2l0aChvcy5wYXRoc2VwKToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWzotMV0KLSAgICAgICAgICAgIHJlc3VsdFtrZXldID0gcmVtb3ZlRHVwbGljYXRlcyh2YWx1ZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBwb3Blbi5zdGRvdXQuY2xvc2UoKQorICAgICAgICBwb3Blbi5zdGRlcnIuY2xvc2UoKQogCiAgICAgaWYgbGVuKHJlc3VsdCkgIT0gbGVuKGludGVyZXN0aW5nKToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihzdHIobGlzdChyZXN1bHQua2V5cygpKSkpCkBAIC00ODksNyArNTA0LDcgQEAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oW3NlbGYucmNdICsgcHBfb3B0cyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW291dHB1dF9vcHRdICsgW2lucHV0X29wdF0pCi0gICAgICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6CisgICAgICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBDb21waWxlRXJyb3IobXNnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbGlmIGV4dCBpbiBzZWxmLl9tY19leHRlbnNpb25zOgpAQCAtNTE2LDcgKzUzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oW3NlbGYucmNdICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIi9mbyIgKyBvYmpdICsgW3JjX2ZpbGVdKQogCi0gICAgICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6CisgICAgICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBDb21waWxlRXJyb3IobXNnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgpAQCAtNTI5LDcgKzU0NCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbc2VsZi5jY10gKyBjb21waWxlX29wdHMgKyBwcF9vcHRzICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dF9vcHQsIG91dHB1dF9vcHRdICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yLCBtc2c6CiAgICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yKG1zZykKIAogICAgICAgICByZXR1cm4gb2JqZWN0cwpAQCAtNTU0LDcgKzU2OSw3IEBACiAgICAgICAgICAgICAgICAgcGFzcyAjIFhYWCB3aGF0IGdvZXMgaGVyZT8KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNwYXduKFtzZWxmLmxpYl0gKyBsaWJfYXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIExpYkVycm9yKG1zZykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxvZy5kZWJ1Zygic2tpcHBpbmcgJXMgKHVwLXRvLWRhdGUpIiwgb3V0cHV0X2ZpbGVuYW1lKQpAQCAtNjQzLDcgKzY1OCw3IEBACiAgICAgICAgICAgICBzZWxmLm1rcGF0aChvcy5wYXRoLmRpcm5hbWUob3V0cHV0X2ZpbGVuYW1lKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNwYXduKFtzZWxmLmxpbmtlcl0gKyBsZF9hcmdzKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yLCBtc2c6CiAgICAgICAgICAgICAgICAgcmFpc2UgTGlua0Vycm9yKG1zZykKIAogICAgICAgICAgICAgIyBlbWJlZCB0aGUgbWFuaWZlc3QKQEAgLTY1NSwzNyArNjcwLDQzIEBACiAgICAgICAgICAgICAgICAgbWZpZCA9IDEKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbWZpZCA9IDIKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhlIFZpc3VhbCBDIHJ1bnRpbWUsIHNvIHRoZXkgd2lsbAotICAgICAgICAgICAgICAgICAgICAjIGZhbGwgdGhyb3VnaCB0byB0aGUgVmlzdWFsIEMgZGVwZW5kZW5jeSBvZiBQeXRob24uZXhlLgotICAgICAgICAgICAgICAgICAgICAjIFRoaXMgd2F5LCB3aGVuIGluc3RhbGxlZCBmb3IgYSByZXN0cmljdGVkIHVzZXIgKGUuZy4KLSAgICAgICAgICAgICAgICAgICAgIyBydW50aW1lcyBhcmUgbm90IGluIFdpblN4UyBmb2xkZXIsIGJ1dCBpbiBQeXRob24ncyBvd24KLSAgICAgICAgICAgICAgICAgICAgIyBmb2xkZXIpLCB0aGUgcnVudGltZXMgZG8gbm90IG5lZWQgdG8gYmUgaW4gZXZlcnkgZm9sZGVyCi0gICAgICAgICAgICAgICAgICAgICMgd2l0aCAucHlkJ3MuCi0gICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2YgPSBvcGVuKHRlbXBfbWFuaWZlc3QsICJyYiIpCi0gICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2J1ZiA9IG1hbmlmZXN0X2YucmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2YuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gcmUuY29tcGlsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHIiIiI8YXNzZW1ibHlJZGVudGl0eS4qP25hbWU9KCJ8JylNaWNyb3NvZnRcLiIiIlwKLSAgICAgICAgICAgICAgICAgICAgICAgIHIiIiJWQ1xkezJ9XC5DUlQoInwnKS4qPygvPnw8L2Fzc2VtYmx5SWRlbnRpdHk+KSIiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlLkRPVEFMTCkKLSAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfYnVmID0gcmUuc3ViKHBhdHRlcm4sICIiLCBtYW5pZmVzdF9idWYpCi0gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAiPGRlcGVuZGVudEFzc2VtYmx5PlxzKjwvZGVwZW5kZW50QXNzZW1ibHk+IgotICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF9idWYgPSByZS5zdWIocGF0dGVybiwgIiIsIG1hbmlmZXN0X2J1ZikKLSAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfZiA9IG9wZW4odGVtcF9tYW5pZmVzdCwgIndiIikKLSAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfZi53cml0ZShtYW5pZmVzdF9idWYpCi0gICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2YuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX3Zpc3VhbF9jX3JlZih0ZW1wX21hbmlmZXN0KQogICAgICAgICAgICAgb3V0X2FyZyA9ICctb3V0cHV0cmVzb3VyY2U6JXM7JXMnICUgKG91dHB1dF9maWxlbmFtZSwgbWZpZCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNwYXduKFsnbXQuZXhlJywgJy1ub2xvZ28nLCAnLW1hbmlmZXN0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX21hbmlmZXN0LCBvdXRfYXJnXSkKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIExpbmtFcnJvcihtc2cpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsb2cuZGVidWcoInNraXBwaW5nICVzICh1cC10by1kYXRlKSIsIG91dHB1dF9maWxlbmFtZSkKIAorICAgIGRlZiBfcmVtb3ZlX3Zpc3VhbF9jX3JlZihzZWxmLCBtYW5pZmVzdF9maWxlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBSZW1vdmUgcmVmZXJlbmNlcyB0byB0aGUgVmlzdWFsIEMgcnVudGltZSwgc28gdGhleSB3aWxsCisgICAgICAgICAgICAjIGZhbGwgdGhyb3VnaCB0byB0aGUgVmlzdWFsIEMgZGVwZW5kZW5jeSBvZiBQeXRob24uZXhlLgorICAgICAgICAgICAgIyBUaGlzIHdheSwgd2hlbiBpbnN0YWxsZWQgZm9yIGEgcmVzdHJpY3RlZCB1c2VyIChlLmcuCisgICAgICAgICAgICAjIHJ1bnRpbWVzIGFyZSBub3QgaW4gV2luU3hTIGZvbGRlciwgYnV0IGluIFB5dGhvbidzIG93bgorICAgICAgICAgICAgIyBmb2xkZXIpLCB0aGUgcnVudGltZXMgZG8gbm90IG5lZWQgdG8gYmUgaW4gZXZlcnkgZm9sZGVyCisgICAgICAgICAgICAjIHdpdGggLnB5ZCdzLgorICAgICAgICAgICAgbWFuaWZlc3RfZiA9IG9wZW4obWFuaWZlc3RfZmlsZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtYW5pZmVzdF9idWYgPSBtYW5pZmVzdF9mLnJlYWQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBtYW5pZmVzdF9mLmNsb3NlKCkKKyAgICAgICAgICAgIHBhdHRlcm4gPSByZS5jb21waWxlKAorICAgICAgICAgICAgICAgIHIiIiI8YXNzZW1ibHlJZGVudGl0eS4qP25hbWU9KCJ8JylNaWNyb3NvZnRcLiIiIlwKKyAgICAgICAgICAgICAgICByIiIiVkNcZHsyfVwuQ1JUKCJ8JykuKj8oLz58PC9hc3NlbWJseUlkZW50aXR5PikiIiIsCisgICAgICAgICAgICAgICAgcmUuRE9UQUxMKQorICAgICAgICAgICAgbWFuaWZlc3RfYnVmID0gcmUuc3ViKHBhdHRlcm4sICIiLCBtYW5pZmVzdF9idWYpCisgICAgICAgICAgICBwYXR0ZXJuID0gIjxkZXBlbmRlbnRBc3NlbWJseT5ccyo8L2RlcGVuZGVudEFzc2VtYmx5PiIKKyAgICAgICAgICAgIG1hbmlmZXN0X2J1ZiA9IHJlLnN1YihwYXR0ZXJuLCAiIiwgbWFuaWZlc3RfYnVmKQorICAgICAgICAgICAgbWFuaWZlc3RfZiA9IG9wZW4obWFuaWZlc3RfZmlsZSwgJ3cnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1hbmlmZXN0X2Yud3JpdGUobWFuaWZlc3RfYnVmKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBtYW5pZmVzdF9mLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwYXNzCiAKICAgICAjIC0tIE1pc2NlbGxhbmVvdXMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICMgVGhlc2UgYXJlIGFsbCB1c2VkIGJ5IHRoZSAnZ2VuX2xpYl9vcHRpb25zKCkgZnVuY3Rpb24sIGluCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL21zdmNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvbXN2Y2NvbXBpbGVyLnB5CmluZGV4IDMwYTlmYzYuLjBlNjlmZDMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvbXN2Y2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvbXN2Y2NvbXBpbGVyLnB5CkBAIC04LDE2ICs4LDE1IEBACiAjIGhhY2tlZCBieSBSb2JpbiBCZWNrZXIgYW5kIFRob21hcyBIZWxsZXIgdG8gZG8gYSBiZXR0ZXIgam9iIG9mCiAjICAgZmluZGluZyBEZXZTdHVkaW8gKHRocm91Z2ggdGhlIHJlZ2lzdHJ5KQogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotaW1wb3J0IHN5cywgb3MsIHN0cmluZwotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBcCi0gICAgIERpc3R1dGlsc0V4ZWNFcnJvciwgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwgXAotICAgICBDb21waWxlRXJyb3IsIExpYkVycm9yLCBMaW5rRXJyb3IKLWZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgXAotICAgICBDQ29tcGlsZXIsIGdlbl9wcmVwcm9jZXNzX29wdGlvbnMsIGdlbl9saWJfb3B0aW9ucworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3RyaW5nCisKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKERpc3R1dGlsc0V4ZWNFcnJvciwgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgTGliRXJyb3IsIExpbmtFcnJvcikKK2Zyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgQ0NvbXBpbGVyLCBnZW5fbGliX29wdGlvbnMKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAogX2Nhbl9yZWFkX3JlZyA9IDAKQEAgLTEyOSw3ICsxMjgsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc2V0X21hY3JvKCJGcmFtZXdvcmtTREtEaXIiLCBuZXQsICJzZGtpbnN0YWxscm9vdHYxLjEiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLnNldF9tYWNybygiRnJhbWV3b3JrU0RLRGlyIiwgbmV0LCAic2RraW5zdGFsbHJvb3QiKQotICAgICAgICBleGNlcHQgS2V5RXJyb3IsIGV4YzogIworICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAoIiIiUHl0aG9uIHdhcyBidWlsdCB3aXRoIFZpc3VhbCBTdHVkaW8gMjAwMzsKIGV4dGVuc2lvbnMgbXVzdCBiZSBidWlsdCB3aXRoIGEgY29tcGlsZXIgdGhhbiBjYW4gZ2VuZXJhdGUgY29tcGF0aWJsZSBiaW5hcmllcy4KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvbXdlcmtzY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL213ZXJrc2NvbXBpbGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDNjNmNlLi4wMDAwMDAwCi0tLSBhL0xpYi9kaXN0dXRpbHMvbXdlcmtzY29tcGlsZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotIiIiZGlzdHV0aWxzLm13ZXJrc2NvbXBpbGVyCi0KLUNvbnRhaW5zIE1XZXJrc0NvbXBpbGVyLCBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYWJzdHJhY3QgQ0NvbXBpbGVyIGNsYXNzCi1mb3IgTWV0cm9XZXJrcyBDb2RlV2FycmlvciBvbiB0aGUgTWFjaW50b3NoLiBOZWVkcyB3b3JrIHRvIHN1cHBvcnQgQ1cgb24KLVdpbmRvd3MuIiIiCi0KLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KLV9fcmV2aXNpb25fXyA9ICIkSWQkIgotCi1pbXBvcnQgc3lzLCBvcywgc3RyaW5nCi1mcm9tIHR5cGVzIGltcG9ydCAqCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IFwKLSAgICAgRGlzdHV0aWxzRXhlY0Vycm9yLCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCBcCi0gICAgIENvbXBpbGVFcnJvciwgTGliRXJyb3IsIExpbmtFcnJvcgotZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBcCi0gICAgIENDb21waWxlciwgZ2VuX3ByZXByb2Nlc3Nfb3B0aW9ucywgZ2VuX2xpYl9vcHRpb25zCi1pbXBvcnQgZGlzdHV0aWxzLnV0aWwKLWltcG9ydCBkaXN0dXRpbHMuZGlyX3V0aWwKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLQotY2xhc3MgTVdlcmtzQ29tcGlsZXIgKENDb21waWxlcikgOgotICAgICIiIkNvbmNyZXRlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhbiBpbnRlcmZhY2UgdG8gTWV0cm9XZXJrcyBDb2RlV2FycmlvciwKLSAgICAgICBhcyBkZWZpbmVkIGJ5IHRoZSBDQ29tcGlsZXIgYWJzdHJhY3QgY2xhc3MuIiIiCi0KLSAgICBjb21waWxlcl90eXBlID0gJ213ZXJrcycKLQotICAgICMgSnVzdCBzZXQgdGhpcyBzbyBDQ29tcGlsZXIncyBjb25zdHJ1Y3RvciBkb2Vzbid0IGJhcmYuICBXZSBjdXJyZW50bHkKLSAgICAjIGRvbid0IHVzZSB0aGUgJ3NldF9leGVjdXRhYmxlcygpJyBidXJlYXVjcmFjeSBwcm92aWRlZCBieSBDQ29tcGlsZXIsCi0gICAgIyBhcyBpdCByZWFsbHkgaXNuJ3QgbmVjZXNzYXJ5IGZvciB0aGlzIHNvcnQgb2Ygc2luZ2xlLWNvbXBpbGVyIGNsYXNzLgotICAgICMgV291bGQgYmUgbmljZSB0byBoYXZlIGEgY29uc2lzdGVudCBpbnRlcmZhY2Ugd2l0aCBVbml4Q0NvbXBpbGVyLAotICAgICMgdGhvdWdoLCBzbyBpdCdzIHdvcnRoIHRoaW5raW5nIGFib3V0LgotICAgIGV4ZWN1dGFibGVzID0ge30KLQotICAgICMgUHJpdmF0ZSBjbGFzcyBkYXRhIChuZWVkIHRvIGRpc3Rpbmd1aXNoIEMgZnJvbSBDKysgc291cmNlIGZvciBjb21waWxlcikKLSAgICBfY19leHRlbnNpb25zID0gWycuYyddCi0gICAgX2NwcF9leHRlbnNpb25zID0gWycuY2MnLCAnLmNwcCcsICcuY3h4J10KLSAgICBfcmNfZXh0ZW5zaW9ucyA9IFsnLnInXQotICAgIF9leHBfZXh0ZW5zaW9uID0gJy5leHAnCi0KLSAgICAjIE5lZWRlZCBmb3IgdGhlIGZpbGVuYW1lIGdlbmVyYXRpb24gbWV0aG9kcyBwcm92aWRlZCBieSB0aGUKLSAgICAjIGJhc2UgY2xhc3MsIENDb21waWxlci4KLSAgICBzcmNfZXh0ZW5zaW9ucyA9IChfY19leHRlbnNpb25zICsgX2NwcF9leHRlbnNpb25zICsKLSAgICAgICAgICAgICAgICAgICAgICBfcmNfZXh0ZW5zaW9ucykKLSAgICByZXNfZXh0ZW5zaW9uID0gJy5yc3JjJwotICAgIG9ial9leHRlbnNpb24gPSAnLm9iaicgIyBOb3QgdXNlZCwgcmVhbGx5Ci0gICAgc3RhdGljX2xpYl9leHRlbnNpb24gPSAnLmxpYicKLSAgICBzaGFyZWRfbGliX2V4dGVuc2lvbiA9ICcuc2xiJwotICAgIHN0YXRpY19saWJfZm9ybWF0ID0gc2hhcmVkX2xpYl9mb3JtYXQgPSAnJXMlcycKLSAgICBleGVfZXh0ZW5zaW9uID0gJycKLQotCi0gICAgZGVmIF9faW5pdF9fIChzZWxmLAotICAgICAgICAgICAgICAgICAgdmVyYm9zZT0wLAotICAgICAgICAgICAgICAgICAgZHJ5X3J1bj0wLAotICAgICAgICAgICAgICAgICAgZm9yY2U9MCk6Ci0KLSAgICAgICAgQ0NvbXBpbGVyLl9faW5pdF9fIChzZWxmLCB2ZXJib3NlLCBkcnlfcnVuLCBmb3JjZSkKLQotCi0gICAgZGVmIGNvbXBpbGUgKHNlbGYsCi0gICAgICAgICAgICAgICAgIHNvdXJjZXMsCi0gICAgICAgICAgICAgICAgIG91dHB1dF9kaXI9Tm9uZSwKLSAgICAgICAgICAgICAgICAgbWFjcm9zPU5vbmUsCi0gICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICBkZWJ1Zz0wLAotICAgICAgICAgICAgICAgICBleHRyYV9wcmVhcmdzPU5vbmUsCi0gICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzPU5vbmUsCi0gICAgICAgICAgICAgICAgIGRlcGVuZHM9Tm9uZSk6Ci0gICAgICAgIChvdXRwdXRfZGlyLCBtYWNyb3MsIGluY2x1ZGVfZGlycykgPSBcCi0gICAgICAgICAgIHNlbGYuX2ZpeF9jb21waWxlX2FyZ3MgKG91dHB1dF9kaXIsIG1hY3JvcywgaW5jbHVkZV9kaXJzKQotICAgICAgICBzZWxmLl9fc291cmNlcyA9IHNvdXJjZXMKLSAgICAgICAgc2VsZi5fX21hY3JvcyA9IG1hY3JvcwotICAgICAgICBzZWxmLl9faW5jbHVkZV9kaXJzID0gaW5jbHVkZV9kaXJzCi0gICAgICAgICMgRG9uJ3QgbmVlZCBleHRyYV9wcmVhcmdzIGFuZCBleHRyYV9wb3N0YXJncyBmb3IgQ1cKLSAgICAgICAgcmV0dXJuIFtdCi0KLSAgICBkZWYgbGluayAoc2VsZiwKLSAgICAgICAgICAgICAgdGFyZ2V0X2Rlc2MsCi0gICAgICAgICAgICAgIG9iamVjdHMsCi0gICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgb3V0cHV0X2Rpcj1Ob25lLAotICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwKLSAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgIGV4cG9ydF9zeW1ib2xzPU5vbmUsCi0gICAgICAgICAgICAgIGRlYnVnPTAsCi0gICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgYnVpbGRfdGVtcD1Ob25lLAotICAgICAgICAgICAgICB0YXJnZXRfbGFuZz1Ob25lKToKLSAgICAgICAgIyBGaXJzdCBmaXh1cC4KLSAgICAgICAgKG9iamVjdHMsIG91dHB1dF9kaXIpID0gc2VsZi5fZml4X29iamVjdF9hcmdzIChvYmplY3RzLCBvdXRwdXRfZGlyKQotICAgICAgICAobGlicmFyaWVzLCBsaWJyYXJ5X2RpcnMsIHJ1bnRpbWVfbGlicmFyeV9kaXJzKSA9IFwKLSAgICAgICAgICAgIHNlbGYuX2ZpeF9saWJfYXJncyAobGlicmFyaWVzLCBsaWJyYXJ5X2RpcnMsIHJ1bnRpbWVfbGlicmFyeV9kaXJzKQotCi0gICAgICAgICMgRmlyc3QgZXhhbWluZSBhIGNvdXBsZSBvZiBvcHRpb25zIGZvciB0aGluZ3MgdGhhdCBhcmVuJ3QgaW1wbGVtZW50ZWQgeWV0Ci0gICAgICAgIGlmIG5vdCB0YXJnZXRfZGVzYyBpbiAoc2VsZi5TSEFSRURfTElCUkFSWSwgc2VsZi5TSEFSRURfT0JKRUNUKToKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsICdDYW4gb25seSBtYWtlIFNIQVJFRF9MSUJSQVJZIG9yIFNIQVJFRF9PQkpFQ1QgdGFyZ2V0cyBvbiB0aGUgTWFjJwotICAgICAgICBpZiBydW50aW1lX2xpYnJhcnlfZGlyczoKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsICdSdW50aW1lIGxpYnJhcnkgZGlycyBub3QgaW1wbGVtZW50ZWQgeWV0JwotICAgICAgICBpZiBleHRyYV9wcmVhcmdzIG9yIGV4dHJhX3Bvc3RhcmdzOgotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwgJ1J1bnRpbWUgbGlicmFyeSBkaXJzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnCi0gICAgICAgIGlmIGxlbihleHBvcnRfc3ltYm9scykgIT0gMToKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsICdOZWVkIGV4YWN0bHkgb25lIGV4cG9ydCBzeW1ib2wnCi0gICAgICAgICMgTmV4dCB0aGVyZSBhcmUgdmFyaW91cyB0aGluZ3MgZm9yIHdoaWNoIHdlIG5lZWQgYWJzb2x1dGUgcGF0aG5hbWVzLgotICAgICAgICAjIFRoaXMgaXMgYmVjYXVzZSB3ZSAodXN1YWxseSkgY3JlYXRlIHRoZSBwcm9qZWN0IGluIGEgc3ViZGlyZWN0b3J5IG9mCi0gICAgICAgICMgd2hlcmUgd2UgYXJlIG5vdywgYW5kIGtlZXBpbmcgdGhlIHBhdGhzIHJlbGF0aXZlIGlzIHRvbyBtdWNoIHdvcmsgcmlnaHQKLSAgICAgICAgIyBub3cuCi0gICAgICAgIHNvdXJjZXMgPSBtYXAoc2VsZi5fZmlsZW5hbWVfdG9fYWJzLCBzZWxmLl9fc291cmNlcykKLSAgICAgICAgaW5jbHVkZV9kaXJzID0gbWFwKHNlbGYuX2ZpbGVuYW1lX3RvX2Ficywgc2VsZi5fX2luY2x1ZGVfZGlycykKLSAgICAgICAgaWYgb2JqZWN0czoKLSAgICAgICAgICAgIG9iamVjdHMgPSBtYXAoc2VsZi5fZmlsZW5hbWVfdG9fYWJzLCBvYmplY3RzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb2JqZWN0cyA9IFtdCi0gICAgICAgIGlmIGJ1aWxkX3RlbXA6Ci0gICAgICAgICAgICBidWlsZF90ZW1wID0gc2VsZi5fZmlsZW5hbWVfdG9fYWJzKGJ1aWxkX3RlbXApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBidWlsZF90ZW1wID0gb3MuY3VyZGlyKCkKLSAgICAgICAgaWYgb3V0cHV0X2RpcjoKLSAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyLCBvdXRwdXRfZmlsZW5hbWUpCi0gICAgICAgICMgVGhlIG91dHB1dCBmaWxlbmFtZSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nOiBzcGxpdHRpbmcgaXQgaW50byBkaXIgYW5kCi0gICAgICAgICMgZmlsZW5hbWUgcGFydC4gQWN0dWFsbHkgSSdtIG5vdCBzdXJlIHRoaXMgaXMgcmVhbGx5IG5lZWRlZCwgYnV0IGl0Ci0gICAgICAgICMgY2FuJ3QgaHVydC4KLSAgICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gc2VsZi5fZmlsZW5hbWVfdG9fYWJzKG91dHB1dF9maWxlbmFtZSkKLSAgICAgICAgb3V0cHV0X2Rpciwgb3V0cHV0X2ZpbGVuYW1lID0gb3MucGF0aC5zcGxpdChvdXRwdXRfZmlsZW5hbWUpCi0gICAgICAgICMgTm93IHdlIG5lZWQgdGhlIHNob3J0IG5hbWVzIG9mIGEgY291cGxlIG9mIHRoaW5ncyBmb3IgcHV0dGluZyB0aGVtCi0gICAgICAgICMgaW50byB0aGUgcHJvamVjdC4KLSAgICAgICAgaWYgb3V0cHV0X2ZpbGVuYW1lWy04Ol0gPT0gJy5wcGMuc2xiJzoKLSAgICAgICAgICAgIGJhc2VuYW1lID0gb3V0cHV0X2ZpbGVuYW1lWzotOF0KLSAgICAgICAgZWxpZiBvdXRwdXRfZmlsZW5hbWVbLTExOl0gPT0gJy5jYXJib24uc2xiJzoKLSAgICAgICAgICAgIGJhc2VuYW1lID0gb3V0cHV0X2ZpbGVuYW1lWzotMTFdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguc3RyaXAob3V0cHV0X2ZpbGVuYW1lKVswXQotICAgICAgICBwcm9qZWN0bmFtZSA9IGJhc2VuYW1lICsgJy5tY3AnCi0gICAgICAgIHRhcmdldG5hbWUgPSBiYXNlbmFtZQotICAgICAgICB4bWxuYW1lID0gYmFzZW5hbWUgKyAnLnhtbCcKLSAgICAgICAgZXhwb3J0bmFtZSA9IGJhc2VuYW1lICsgJy5tY3AuZXhwJwotICAgICAgICBwcmVmaXhuYW1lID0gJ213ZXJrc18lc19jb25maWcuaCclYmFzZW5hbWUKLSAgICAgICAgIyBDcmVhdGUgdGhlIGRpcmVjdG9yaWVzIHdlIG5lZWQKLSAgICAgICAgZGlzdHV0aWxzLmRpcl91dGlsLm1rcGF0aChidWlsZF90ZW1wLCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKLSAgICAgICAgZGlzdHV0aWxzLmRpcl91dGlsLm1rcGF0aChvdXRwdXRfZGlyLCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKLSAgICAgICAgIyBBbmQgb24gdG8gZmlsbGluZyBpbiB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIHByb2plY3QgYnVpbGRlcgotICAgICAgICBzZXR0aW5ncyA9IHt9Ci0gICAgICAgIHNldHRpbmdzWydtYWNfZXhwb3J0bmFtZSddID0gZXhwb3J0bmFtZQotICAgICAgICBzZXR0aW5nc1snbWFjX291dHB1dGRpciddID0gb3V0cHV0X2RpcgotICAgICAgICBzZXR0aW5nc1snbWFjX2RsbG5hbWUnXSA9IG91dHB1dF9maWxlbmFtZQotICAgICAgICBzZXR0aW5nc1snbWFjX3RhcmdldG5hbWUnXSA9IHRhcmdldG5hbWUKLSAgICAgICAgc2V0dGluZ3NbJ3N5c3ByZWZpeCddID0gc3lzLnByZWZpeAotICAgICAgICBzZXR0aW5nc1snbWFjX3N5c3ByZWZpeHR5cGUnXSA9ICdBYnNvbHV0ZScKLSAgICAgICAgc291cmNlZmlsZW5hbWVzID0gW10KLSAgICAgICAgc291cmNlZmlsZWRpcnMgPSBbXQotICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc291cmNlcyArIG9iamVjdHM6Ci0gICAgICAgICAgICBkaXJuYW1lLCBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCi0gICAgICAgICAgICBzb3VyY2VmaWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lKQotICAgICAgICAgICAgaWYgbm90IGRpcm5hbWUgaW4gc291cmNlZmlsZWRpcnM6Ci0gICAgICAgICAgICAgICAgc291cmNlZmlsZWRpcnMuYXBwZW5kKGRpcm5hbWUpCi0gICAgICAgIHNldHRpbmdzWydzb3VyY2VzJ10gPSBzb3VyY2VmaWxlbmFtZXMKLSAgICAgICAgc2V0dGluZ3NbJ2xpYnJhcmllcyddID0gbGlicmFyaWVzCi0gICAgICAgIHNldHRpbmdzWydleHRyYXNlYXJjaGRpcnMnXSA9IHNvdXJjZWZpbGVkaXJzICsgaW5jbHVkZV9kaXJzICsgbGlicmFyeV9kaXJzCi0gICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKLSAgICAgICAgICAgIHByaW50ICdDQUxMSU5HIExJTktFUiBJTicsIG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZXR0aW5ncy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHByaW50ICclMjAuMjBzICVzJyUoa2V5LCB2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICAjIEJ1aWxkIHRoZSBleHBvcnQgZmlsZQotICAgICAgICBleHBvcnRmaWxlbmFtZSA9IG9zLnBhdGguam9pbihidWlsZF90ZW1wLCBleHBvcnRuYW1lKQotICAgICAgICBsb2cuZGVidWcoIlx0Q3JlYXRlIGV4cG9ydCBmaWxlICVzIiwgZXhwb3J0ZmlsZW5hbWUpCi0gICAgICAgIGZwID0gb3BlbihleHBvcnRmaWxlbmFtZSwgJ3cnKQotICAgICAgICBmcC53cml0ZSgnJXNcbiclZXhwb3J0X3N5bWJvbHNbMF0pCi0gICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgIyBHZW5lcmF0ZSB0aGUgcHJlZml4IGZpbGUsIGlmIG5lZWRlZCwgYW5kIHB1dCBpdCBpbiB0aGUgc2V0dGluZ3MKLSAgICAgICAgaWYgc2VsZi5fX21hY3JvczoKLSAgICAgICAgICAgIHByZWZpeGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBvcy5wYXRoLmpvaW4oYnVpbGRfdGVtcCwgcHJlZml4bmFtZSkpCi0gICAgICAgICAgICBmcCA9IG9wZW4ocHJlZml4ZmlsZW5hbWUsICd3JykKLSAgICAgICAgICAgIGZwLndyaXRlKCcjaW5jbHVkZSAibXdlcmtzX3NoY2FyYm9uX2NvbmZpZy5oIlxuJykKLSAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLl9fbWFjcm9zOgotICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGZwLndyaXRlKCcjZGVmaW5lICVzXG4nJW5hbWUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZnAud3JpdGUoJyNkZWZpbmUgJXMgJXNcbiclKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgIHNldHRpbmdzWydwcmVmaXhuYW1lJ10gPSBwcmVmaXhuYW1lCi0KLSAgICAgICAgIyBCdWlsZCB0aGUgWE1MIGZpbGUuIFdlIG5lZWQgdGhlIGZ1bGwgcGF0aG5hbWUgKG9ubHkgbGF0ZXJvbiwgcmVhbGx5KQotICAgICAgICAjIGJlY2F1c2Ugd2UgcGFzcyB0aGlzIHBhdGhuYW1lIHRvIENvZGVXYXJyaW9yIGluIGFuIEFwcGxlRXZlbnQsIGFuZCBDVwotICAgICAgICAjIGRvZXNuJ3QgaGF2ZSBhIGNsdWUgYWJvdXQgb3VyIHdvcmtpbmcgZGlyZWN0b3J5LgotICAgICAgICB4bWxmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgb3MucGF0aC5qb2luKGJ1aWxkX3RlbXAsIHhtbG5hbWUpKQotICAgICAgICBsb2cuZGVidWcoIlx0Q3JlYXRlIFhNTCBmaWxlICVzIiwgeG1sZmlsZW5hbWUpCi0gICAgICAgIGltcG9ydCBta2N3cHJvamVjdAotICAgICAgICB4bWxidWlsZGVyID0gbWtjd3Byb2plY3QuY3d4bWxnZW4uUHJvamVjdEJ1aWxkZXIoc2V0dGluZ3MpCi0gICAgICAgIHhtbGJ1aWxkZXIuZ2VuZXJhdGUoKQotICAgICAgICB4bWxkYXRhID0gc2V0dGluZ3NbJ3RtcF9wcm9qZWN0eG1sZGF0YSddCi0gICAgICAgIGZwID0gb3Blbih4bWxmaWxlbmFtZSwgJ3cnKQotICAgICAgICBmcC53cml0ZSh4bWxkYXRhKQotICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICMgR2VuZXJhdGUgdGhlIHByb2plY3QuIEFnYWluIGEgZnVsbCBwYXRobmFtZS4KLSAgICAgICAgcHJvamVjdGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBvcy5wYXRoLmpvaW4oYnVpbGRfdGVtcCwgcHJvamVjdG5hbWUpKQotICAgICAgICBsb2cuZGVidWcoJ1x0Q3JlYXRlIHByb2plY3QgZmlsZSAlcycsIHByb2plY3RmaWxlbmFtZSkKLSAgICAgICAgbWtjd3Byb2plY3QubWFrZXByb2plY3QoeG1sZmlsZW5hbWUsIHByb2plY3RmaWxlbmFtZSkKLSAgICAgICAgIyBBbmQgYnVpbGQgaXQKLSAgICAgICAgbG9nLmRlYnVnKCdcdEJ1aWxkIHByb2plY3QnKQotICAgICAgICBta2N3cHJvamVjdC5idWlsZHByb2plY3QocHJvamVjdGZpbGVuYW1lKQotCi0gICAgZGVmIF9maWxlbmFtZV90b19hYnMoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICAjIFNvbWUgZmlsZW5hbWVzIHNlZW0gdG8gYmUgdW5peC1saWtlLiBDb252ZXJ0IHRvIE1hYyBuYW1lcy4KLSMjICAgICAgICBpZiAnLycgaW4gZmlsZW5hbWUgYW5kICc6JyBpbiBmaWxlbmFtZToKLSMjICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCAnRmlsZW5hbWUgbWF5IGJlIFVuaXggb3IgTWFjIHN0eWxlOiAlcyclZmlsZW5hbWUKLSMjICAgICAgICBpZiAnLycgaW4gZmlsZW5hbWU6Ci0jIyAgICAgICAgICAgZmlsZW5hbWUgPSBtYWN1cmwycGF0aChmaWxlbmFtZSkKLSAgICAgICAgZmlsZW5hbWUgPSBkaXN0dXRpbHMudXRpbC5jb252ZXJ0X3BhdGgoZmlsZW5hbWUpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZpbGVuYW1lKToKLSAgICAgICAgICAgIGN1cmRpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihjdXJkaXIsIGZpbGVuYW1lKQotICAgICAgICAjIEZpbmFsbHkgcmVtb3ZlIC4uIGNvbXBvbmVudHMKLSAgICAgICAgY29tcG9uZW50cyA9IHN0cmluZy5zcGxpdChmaWxlbmFtZSwgJzonKQotICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oY29tcG9uZW50cykpOgotICAgICAgICAgICAgaWYgY29tcG9uZW50c1tpXSA9PSAnLi4nOgotICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbaV0gPSAnJwotICAgICAgICByZXR1cm4gc3RyaW5nLmpvaW4oY29tcG9uZW50cywgJzonKQotCi0gICAgZGVmIGxpYnJhcnlfZGlyX29wdGlvbiAoc2VsZiwgZGlyKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBjb21waWxlciBvcHRpb24gdG8gYWRkICdkaXInIHRvIHRoZSBsaXN0IG9mCi0gICAgICAgIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGZvciBsaWJyYXJpZXMuCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gIyBYWFhYIE5vdCBjb3JyZWN0Li4uCi0KLSAgICBkZWYgcnVudGltZV9saWJyYXJ5X2Rpcl9vcHRpb24gKHNlbGYsIGRpcik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgY29tcGlsZXIgb3B0aW9uIHRvIGFkZCAnZGlyJyB0byB0aGUgbGlzdCBvZgotICAgICAgICBkaXJlY3RvcmllcyBzZWFyY2hlZCBmb3IgcnVudGltZSBsaWJyYXJpZXMuCi0gICAgICAgICIiIgotICAgICAgICAjIE5vdGhpbmcgbmVlZGVkIG9yIE13ZXJrcy9NYWMuCi0gICAgICAgIHJldHVybgotCi0gICAgZGVmIGxpYnJhcnlfb3B0aW9uIChzZWxmLCBsaWIpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbXBpbGVyIG9wdGlvbiB0byBhZGQgJ2RpcicgdG8gdGhlIGxpc3Qgb2YgbGlicmFyaWVzCi0gICAgICAgIGxpbmtlZCBpbnRvIHRoZSBzaGFyZWQgbGlicmFyeSBvciBleGVjdXRhYmxlLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuCi0KLSAgICBkZWYgZmluZF9saWJyYXJ5X2ZpbGUgKHNlbGYsIGRpcnMsIGxpYiwgZGVidWc9MCk6Ci0gICAgICAgICIiIlNlYXJjaCB0aGUgc3BlY2lmaWVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIGEgc3RhdGljIG9yIHNoYXJlZAotICAgICAgICBsaWJyYXJ5IGZpbGUgJ2xpYicgYW5kIHJldHVybiB0aGUgZnVsbCBwYXRoIHRvIHRoYXQgZmlsZS4gIElmCi0gICAgICAgICdkZWJ1ZycgdHJ1ZSwgbG9vayBmb3IgYSBkZWJ1Z2dpbmcgdmVyc2lvbiAoaWYgdGhhdCBtYWtlcyBzZW5zZSBvbgotICAgICAgICB0aGUgY3VycmVudCBwbGF0Zm9ybSkuICBSZXR1cm4gTm9uZSBpZiAnbGliJyB3YXNuJ3QgZm91bmQgaW4gYW55IG9mCi0gICAgICAgIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3JpZXMuCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gMApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zcGF3bi5weSBiL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKaW5kZXggZTU2NTRmZi4uNWMwMTRjNCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9zcGF3bi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CkBAIC02LDIxICs2LDE4IEBACiBleGVjdXRhYmxlIG5hbWUuCiAiIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBzeXMsIG9zLCBzdHJpbmcKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgoraW1wb3J0IHN5cworaW1wb3J0IG9zCisKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwgRGlzdHV0aWxzRXhlY0Vycm9yCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLWRlZiBzcGF3biAoY21kLAotICAgICAgICAgICBzZWFyY2hfcGF0aD0xLAotICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgIGRyeV9ydW49MCk6CitkZWYgc3Bhd24oY21kLCBzZWFyY2hfcGF0aD0xLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6CisgICAgIiIiUnVuIGFub3RoZXIgcHJvZ3JhbSwgc3BlY2lmaWVkIGFzIGEgY29tbWFuZCBsaXN0ICdjbWQnLCBpbiBhIG5ldyBwcm9jZXNzLgogCi0gICAgIiIiUnVuIGFub3RoZXIgcHJvZ3JhbSwgc3BlY2lmaWVkIGFzIGEgY29tbWFuZCBsaXN0ICdjbWQnLCBpbiBhIG5ldwotICAgIHByb2Nlc3MuICAnY21kJyBpcyBqdXN0IHRoZSBhcmd1bWVudCBsaXN0IGZvciB0aGUgbmV3IHByb2Nlc3MsIGllLgorICAgICdjbWQnIGlzIGp1c3QgdGhlIGFyZ3VtZW50IGxpc3QgZm9yIHRoZSBuZXcgcHJvY2VzcywgaWUuCiAgICAgY21kWzBdIGlzIHRoZSBwcm9ncmFtIHRvIHJ1biBhbmQgY21kWzE6XSBhcmUgdGhlIHJlc3Qgb2YgaXRzIGFyZ3VtZW50cy4KICAgICBUaGVyZSBpcyBubyB3YXkgdG8gcnVuIGEgcHJvZ3JhbSB3aXRoIGEgbmFtZSBkaWZmZXJlbnQgZnJvbSB0aGF0IG9mIGl0cwogICAgIGV4ZWN1dGFibGUuCkBAIC00MywzNyArNDAsMjkgQEAKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwgXAogICAgICAgICAgICAgICAiZG9uJ3Qga25vdyBob3cgdG8gc3Bhd24gcHJvZ3JhbXMgb24gcGxhdGZvcm0gJyVzJyIgJSBvcy5uYW1lCiAKLSMgc3Bhd24gKCkKK2RlZiBfbnRfcXVvdGVfYXJncyhhcmdzKToKKyAgICAiIiJRdW90ZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGZvciBET1MvV2luZG93cyBjb252ZW50aW9ucy4KIAotCi1kZWYgX250X3F1b3RlX2FyZ3MgKGFyZ3MpOgotICAgICIiIlF1b3RlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgZm9yIERPUy9XaW5kb3dzIGNvbnZlbnRpb25zOiBqdXN0Ci0gICAgd3JhcHMgZXZlcnkgYXJndW1lbnQgd2hpY2ggY29udGFpbnMgYmxhbmtzIGluIGRvdWJsZSBxdW90ZXMsIGFuZAorICAgIEp1c3Qgd3JhcHMgZXZlcnkgYXJndW1lbnQgd2hpY2ggY29udGFpbnMgYmxhbmtzIGluIGRvdWJsZSBxdW90ZXMsIGFuZAogICAgIHJldHVybnMgYSBuZXcgYXJndW1lbnQgbGlzdC4KICAgICAiIiIKLQogICAgICMgWFhYIHRoaXMgZG9lc24ndCBzZWVtIHZlcnkgcm9idXN0IHRvIG1lIC0tIGJ1dCBpZiB0aGUgV2luZG93cyBndXlzCiAgICAgIyBzYXkgaXQnbGwgd29yaywgSSBndWVzcyBJJ2xsIGhhdmUgdG8gYWNjZXB0IGl0LiAgKFdoYXQgaWYgYW4gYXJnCiAgICAgIyBjb250YWlucyBxdW90ZXM/ICBXaGF0IG90aGVyIG1hZ2ljIGNoYXJhY3RlcnMsIG90aGVyIHRoYW4gc3BhY2VzLAogICAgICMgaGF2ZSB0byBiZSBlc2NhcGVkPyAgSXMgdGhlcmUgYW4gZXNjYXBpbmcgbWVjaGFuaXNtIG90aGVyIHRoYW4KICAgICAjIHF1b3Rpbmc/KQotCi0gICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyZ3MpKToKLSAgICAgICAgaWYgc3RyaW5nLmZpbmQoYXJnc1tpXSwgJyAnKSAhPSAtMToKLSAgICAgICAgICAgIGFyZ3NbaV0gPSAnIiVzIicgJSBhcmdzW2ldCisgICAgZm9yIGksIGFyZyBpbiBlbnVtZXJhdGUoYXJncyk6CisgICAgICAgIGlmICcgJyBpbiBhcmc6CisgICAgICAgICAgICBhcmdzW2ldID0gJyIlcyInICUgYXJnCiAgICAgcmV0dXJuIGFyZ3MKIAotZGVmIF9zcGF3bl9udCAoY21kLAotICAgICAgICAgICAgICAgc2VhcmNoX3BhdGg9MSwKLSAgICAgICAgICAgICAgIHZlcmJvc2U9MCwKLSAgICAgICAgICAgICAgIGRyeV9ydW49MCk6Ci0KK2RlZiBfc3Bhd25fbnQoY21kLCBzZWFyY2hfcGF0aD0xLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6CiAgICAgZXhlY3V0YWJsZSA9IGNtZFswXQogICAgIGNtZCA9IF9udF9xdW90ZV9hcmdzKGNtZCkKICAgICBpZiBzZWFyY2hfcGF0aDoKICAgICAgICAgIyBlaXRoZXIgd2UgZmluZCBvbmUgb3IgaXQgc3RheXMgdGhlIHNhbWUKICAgICAgICAgZXhlY3V0YWJsZSA9IGZpbmRfZXhlY3V0YWJsZShleGVjdXRhYmxlKSBvciBleGVjdXRhYmxlCi0gICAgbG9nLmluZm8oc3RyaW5nLmpvaW4oW2V4ZWN1dGFibGVdICsgY21kWzE6XSwgJyAnKSkKKyAgICBsb2cuaW5mbygnICcuam9pbihbZXhlY3V0YWJsZV0gKyBjbWRbMTpdKSkKICAgICBpZiBub3QgZHJ5X3J1bjoKICAgICAgICAgIyBzcGF3biBmb3IgTlQgcmVxdWlyZXMgYSBmdWxsIHBhdGggdG8gdGhlIC5leGUKICAgICAgICAgdHJ5OgpAQCAtODcsMTggKzc2LDEyIEBACiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICJjb21tYW5kICclcycgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZFswXSwgcmMpCiAKLQotZGVmIF9zcGF3bl9vczIgKGNtZCwKLSAgICAgICAgICAgICAgICBzZWFyY2hfcGF0aD0xLAotICAgICAgICAgICAgICAgIHZlcmJvc2U9MCwKLSAgICAgICAgICAgICAgICBkcnlfcnVuPTApOgotCitkZWYgX3NwYXduX29zMihjbWQsIHNlYXJjaF9wYXRoPTEsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKICAgICBleGVjdXRhYmxlID0gY21kWzBdCi0gICAgI2NtZCA9IF9udF9xdW90ZV9hcmdzKGNtZCkKICAgICBpZiBzZWFyY2hfcGF0aDoKICAgICAgICAgIyBlaXRoZXIgd2UgZmluZCBvbmUgb3IgaXQgc3RheXMgdGhlIHNhbWUKICAgICAgICAgZXhlY3V0YWJsZSA9IGZpbmRfZXhlY3V0YWJsZShleGVjdXRhYmxlKSBvciBleGVjdXRhYmxlCi0gICAgbG9nLmluZm8oc3RyaW5nLmpvaW4oW2V4ZWN1dGFibGVdICsgY21kWzE6XSwgJyAnKSkKKyAgICBsb2cuaW5mbygnICcuam9pbihbZXhlY3V0YWJsZV0gKyBjbWRbMTpdKSkKICAgICBpZiBub3QgZHJ5X3J1bjoKICAgICAgICAgIyBzcGF3bnYgZm9yIE9TLzIgRU1YIHJlcXVpcmVzIGEgZnVsbCBwYXRoIHRvIHRoZSAuZXhlCiAgICAgICAgIHRyeToKQEAgLTEwOSwyNyArOTIsMjAgQEAKICAgICAgICAgICAgICAgICAgICJjb21tYW5kICclcycgZmFpbGVkOiAlcyIgJSAoY21kWzBdLCBleGNbLTFdKQogICAgICAgICBpZiByYyAhPSAwOgogICAgICAgICAgICAgIyBhbmQgdGhpcyByZWZsZWN0cyB0aGUgY29tbWFuZCBydW5uaW5nIGJ1dCBmYWlsaW5nCi0gICAgICAgICAgICBwcmludCAiY29tbWFuZCAnJXMnIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWRbMF0sIHJjKQorICAgICAgICAgICAgbG9nLmRlYnVnKCJjb21tYW5kICclcycgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZFswXSwgcmMpKQogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yLCBcCiAgICAgICAgICAgICAgICAgICAiY29tbWFuZCAnJXMnIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWRbMF0sIHJjKQogCiAKLWRlZiBfc3Bhd25fcG9zaXggKGNtZCwKLSAgICAgICAgICAgICAgICAgIHNlYXJjaF9wYXRoPTEsCi0gICAgICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgICBkcnlfcnVuPTApOgotCi0gICAgbG9nLmluZm8oc3RyaW5nLmpvaW4oY21kLCAnICcpKQorZGVmIF9zcGF3bl9wb3NpeChjbWQsIHNlYXJjaF9wYXRoPTEsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKKyAgICBsb2cuaW5mbygnICcuam9pbihjbWQpKQogICAgIGlmIGRyeV9ydW46CiAgICAgICAgIHJldHVybgogICAgIGV4ZWNfZm4gPSBzZWFyY2hfcGF0aCBhbmQgb3MuZXhlY3ZwIG9yIG9zLmV4ZWN2Ci0KICAgICBwaWQgPSBvcy5mb3JrKCkKIAotICAgIGlmIHBpZCA9PSAwOiAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIGNoaWxkCisgICAgaWYgcGlkID09IDA6ICAjIGluIHRoZSBjaGlsZAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjcHJpbnQgImNtZFswXSA9IiwgY21kWzBdCi0gICAgICAgICAgICAjcHJpbnQgImNtZCA9IiwgY21kCiAgICAgICAgICAgICBleGVjX2ZuKGNtZFswXSwgY21kKQogICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInVuYWJsZSB0byBleGVjdXRlICVzOiAlc1xuIiAlCkBAIC0xMzgsMTQgKzExNCwxMiBAQAogCiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInVuYWJsZSB0byBleGVjdXRlICVzIGZvciB1bmtub3duIHJlYXNvbnMiICUgY21kWzBdKQogICAgICAgICBvcy5fZXhpdCgxKQotCi0KLSAgICBlbHNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluIHRoZSBwYXJlbnQKKyAgICBlbHNlOiAgICMgaW4gdGhlIHBhcmVudAogICAgICAgICAjIExvb3AgdW50aWwgdGhlIGNoaWxkIGVpdGhlciBleGl0cyBvciBpcyB0ZXJtaW5hdGVkIGJ5IGEgc2lnbmFsCiAgICAgICAgICMgKGllLiBrZWVwIHdhaXRpbmcgaWYgaXQncyBtZXJlbHkgc3RvcHBlZCkKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAocGlkLCBzdGF0dXMpID0gb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBleGM6CiAgICAgICAgICAgICAgICAgaW1wb3J0IGVycm5vCiAgICAgICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVJTlRSOgpAQCAtMTYwLDcgKzEzNCw3IEBACiAgICAgICAgICAgICBlbGlmIG9zLldJRkVYSVRFRChzdGF0dXMpOgogICAgICAgICAgICAgICAgIGV4aXRfc3RhdHVzID0gb3MuV0VYSVRTVEFUVVMoc3RhdHVzKQogICAgICAgICAgICAgICAgIGlmIGV4aXRfc3RhdHVzID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICAgIyBoZXksIGl0IHN1Y2NlZWRlZCEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAgIyBoZXksIGl0IHN1Y2NlZWRlZCEKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJyVzJyBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSBcCkBAIC0xNzMsMjEgKzE0NywyMSBAQAogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0V4ZWNFcnJvciwgXAogICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGVycm9yIGV4ZWN1dGluZyAnJXMnOiB0ZXJtaW5hdGlvbiBzdGF0dXMgJWQiICUgXAogICAgICAgICAgICAgICAgICAgICAgIChjbWRbMF0sIHN0YXR1cykKLSMgX3NwYXduX3Bvc2l4ICgpCi0KIAogZGVmIGZpbmRfZXhlY3V0YWJsZShleGVjdXRhYmxlLCBwYXRoPU5vbmUpOgotICAgICIiIlRyeSB0byBmaW5kICdleGVjdXRhYmxlJyBpbiB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICdwYXRoJyAoYQotICAgIHN0cmluZyBsaXN0aW5nIGRpcmVjdG9yaWVzIHNlcGFyYXRlZCBieSAnb3MucGF0aHNlcCc7IGRlZmF1bHRzIHRvCi0gICAgb3MuZW52aXJvblsnUEFUSCddKS4gIFJldHVybnMgdGhlIGNvbXBsZXRlIGZpbGVuYW1lIG9yIE5vbmUgaWYgbm90Ci0gICAgZm91bmQuCisgICAgIiIiVHJpZXMgdG8gZmluZCAnZXhlY3V0YWJsZScgaW4gdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAncGF0aCcuCisKKyAgICBBIHN0cmluZyBsaXN0aW5nIGRpcmVjdG9yaWVzIHNlcGFyYXRlZCBieSAnb3MucGF0aHNlcCc7IGRlZmF1bHRzIHRvCisgICAgb3MuZW52aXJvblsnUEFUSCddLiAgUmV0dXJucyB0aGUgY29tcGxldGUgZmlsZW5hbWUgb3IgTm9uZSBpZiBub3QgZm91bmQuCiAgICAgIiIiCiAgICAgaWYgcGF0aCBpcyBOb25lOgogICAgICAgICBwYXRoID0gb3MuZW52aXJvblsnUEFUSCddCi0gICAgcGF0aHMgPSBzdHJpbmcuc3BsaXQocGF0aCwgb3MucGF0aHNlcCkKLSAgICAoYmFzZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoZXhlY3V0YWJsZSkKKyAgICBwYXRocyA9IHBhdGguc3BsaXQob3MucGF0aHNlcCkKKyAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGV4ZWN1dGFibGUpCisKICAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3Igb3MubmFtZSA9PSAnb3MyJykgYW5kIChleHQgIT0gJy5leGUnKToKICAgICAgICAgZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGUgKyAnLmV4ZScKKwogICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShleGVjdXRhYmxlKToKICAgICAgICAgZm9yIHAgaW4gcGF0aHM6CiAgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKHAsIGV4ZWN1dGFibGUpCkBAIC0xOTcsNSArMTcxLDMgQEAKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gZXhlY3V0YWJsZQotCi0jIGZpbmRfZXhlY3V0YWJsZSgpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CmluZGV4IDQ2ZDIzZWMuLjMzY2M1YTMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CkBAIC0yNSw3ICsyNSw3IEBACiAjIFBhdGggdG8gdGhlIGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LiBPbiBXaW5kb3dzIHRoZSBiaW5hcnkgbWF5CiAjIGxpdmUgaW4gcHJvamVjdC9QQ0J1aWxkOS4gIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiB4NjQgV2luZG93cyBidWlsZCwKICMgaXQnbGwgbGl2ZSBpbiBwcm9qZWN0L1BDYnVpbGQvYW1kNjQuCi1wcm9qZWN0X2Jhc2UgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCitwcm9qZWN0X2Jhc2UgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5leGVjdXRhYmxlKSkKIGlmIG9zLm5hbWUgPT0gIm50IiBhbmQgInBjYnVpbGQiIGluIHByb2plY3RfYmFzZVstODpdLmxvd2VyKCk6CiAgICAgcHJvamVjdF9iYXNlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwcm9qZWN0X2Jhc2UsIG9zLnBhdGgucGFyZGlyKSkKICMgUEMvVlM3LjEKQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKICAgICAgICAgaWYgcHl0aG9uX2J1aWxkOgotICAgICAgICAgICAgYnVpbGRpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSkKKyAgICAgICAgICAgIGJ1aWxkaXIgPSBvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpCiAgICAgICAgICAgICBpZiBwbGF0X3NwZWNpZmljOgogICAgICAgICAgICAgICAgICMgcHl0aG9uLmggaXMgbG9jYXRlZCBpbiB0aGUgYnVpbGRpcgogICAgICAgICAgICAgICAgIGluY19kaXIgPSBidWlsZGlyCkBAIC04OCwxMSArODgsNiBAQAogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgImluY2x1ZGUiLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQogICAgIGVsaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgImluY2x1ZGUiKQotICAgIGVsaWYgb3MubmFtZSA9PSAibWFjIjoKLSAgICAgICAgaWYgcGxhdF9zcGVjaWZpYzoKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTWFjIiwgIkluY2x1ZGUiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJJbmNsdWRlIikKICAgICBlbGlmIG9zLm5hbWUgPT0gIm9zMiI6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiSW5jbHVkZSIpCiAgICAgZWxzZToKQEAgLTEzNSwxOCArMTMwLDYgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpCiAKLSAgICBlbGlmIG9zLm5hbWUgPT0gIm1hYyI6Ci0gICAgICAgIGlmIHBsYXRfc3BlY2lmaWM6Ci0gICAgICAgICAgICBpZiBzdGFuZGFyZF9saWI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAibGliLWR5bmxvYWQiKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKQotCiAgICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgogICAgICAgICBpZiBzdGFuZGFyZF9saWI6CiAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIpCkBAIC0yMjIsOCArMjA1LDcgQEAKIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKICAgICAiIiJSZXR1cm4gZnVsbCBwYXRobmFtZSBvZiBpbnN0YWxsZWQgTWFrZWZpbGUgZnJvbSB0aGUgUHl0aG9uIGJ1aWxkLiIiIgogICAgIGlmIHB5dGhvbl9idWlsZDoKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYWtlZmlsZSIpCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHN5cy5leGVjdXRhYmxlKSwgIk1ha2VmaWxlIikKICAgICBsaWJfZGlyID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0xLCBzdGFuZGFyZF9saWI9MSkKICAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsICJjb25maWciLCAiTWFrZWZpbGUiKQogCkBAIC0zMzYsNiArMzE4LDExIEBACiAKICAgICBmcC5jbG9zZSgpCiAKKyAgICAjIHN0cmlwIHNwdXJpb3VzIHNwYWNlcworICAgIGZvciBrLCB2IGluIGRvbmUuaXRlbXMoKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBzdHIpOgorICAgICAgICAgICAgZG9uZVtrXSA9IHYuc3RyaXAoKQorCiAgICAgIyBzYXZlIHRoZSByZXN1bHRzIGluIHRoZSBnbG9iYWwgZGljdGlvbmFyeQogICAgIGcudXBkYXRlKGRvbmUpCiAgICAgcmV0dXJuIGcKQEAgLTQ2MCwzOCArNDQ3LDEyIEBACiAgICAgZ1snU08nXSA9ICcucHlkJwogICAgIGdbJ0VYRSddID0gIi5leGUiCiAgICAgZ1snVkVSU0lPTiddID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkucmVwbGFjZSgiLiIsICIiKQotICAgIGdbJ0JJTkRJUiddID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKQorICAgIGdbJ0JJTkRJUiddID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuZXhlY3V0YWJsZSkpCiAKICAgICBnbG9iYWwgX2NvbmZpZ192YXJzCiAgICAgX2NvbmZpZ192YXJzID0gZwogCiAKLWRlZiBfaW5pdF9tYWMoKToKLSAgICAiIiJJbml0aWFsaXplIHRoZSBtb2R1bGUgYXMgYXBwcm9wcmlhdGUgZm9yIE1hY2ludG9zaCBzeXN0ZW1zIiIiCi0gICAgZyA9IHt9Ci0gICAgIyBzZXQgYmFzaWMgaW5zdGFsbCBkaXJlY3RvcmllcwotICAgIGdbJ0xJQkRFU1QnXSA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTEpCi0gICAgZ1snQklOTElCREVTVCddID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0xLCBzdGFuZGFyZF9saWI9MSkKLQotICAgICMgWFhYIGhtbW0uLiBhIG5vcm1hbCBpbnN0YWxsIHB1dHMgaW5jbHVkZSBmaWxlcyBoZXJlCi0gICAgZ1snSU5DTFVERVBZJ10gPSBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTApCi0KLSAgICBpbXBvcnQgTWFjT1MKLSAgICBpZiBub3QgaGFzYXR0cihNYWNPUywgJ3J1bnRpbWVtb2RlbCcpOgotICAgICAgICBnWydTTyddID0gJy5wcGMuc2xiJwotICAgIGVsc2U6Ci0gICAgICAgIGdbJ1NPJ10gPSAnLiVzLnNsYicgJSBNYWNPUy5ydW50aW1lbW9kZWwKLQotICAgICMgWFhYIGFyZSB0aGVzZSB1c2VkIGFueXdoZXJlPwotICAgIGdbJ2luc3RhbGxfbGliJ10gPSBvcy5wYXRoLmpvaW4oRVhFQ19QUkVGSVgsICJMaWIiKQotICAgIGdbJ2luc3RhbGxfcGxhdGxpYiddID0gb3MucGF0aC5qb2luKEVYRUNfUFJFRklYLCAiTWFjIiwgIkxpYiIpCi0KLSAgICAjIFRoZXNlIGFyZSB1c2VkIGJ5IHRoZSBleHRlbnNpb24gbW9kdWxlIGJ1aWxkCi0gICAgZ1snc3JjZGlyJ10gPSAnOicKLSAgICBnbG9iYWwgX2NvbmZpZ192YXJzCi0gICAgX2NvbmZpZ192YXJzID0gZwotCi0KIGRlZiBfaW5pdF9vczIoKToKICAgICAiIiJJbml0aWFsaXplIHRoZSBtb2R1bGUgYXMgYXBwcm9wcmlhdGUgZm9yIE9TLzIiIiIKICAgICBnID0ge30KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvU2V0dXAuc2FtcGxlIGIvTGliL2Rpc3R1dGlscy90ZXN0cy9TZXR1cC5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzZjNDI5MAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvU2V0dXAuc2FtcGxlCkBAIC0wLDAgKzEsNjcgQEAKKyMgU2V0dXAgZmlsZSBmcm9tIHRoZSBweWdhbWUgcHJvamVjdAorCisjLS1TdGFydENvbmZpZworU0RMID0gLUkvdXNyL2luY2x1ZGUvU0RMIC1EX1JFRU5UUkFOVCAtbFNETAorRk9OVCA9IC1sU0RMX3R0ZgorSU1BR0UgPSAtbFNETF9pbWFnZQorTUlYRVIgPSAtbFNETF9taXhlcgorU01QRUcgPSAtbHNtcGVnCitQTkcgPSAtbHBuZworSlBFRyA9IC1sanBlZworU0NSQVAgPSAtbFgxMQorUE9SVE1JREkgPSAtbHBvcnRtaWRpCitQT1JUVElNRSA9IC1scG9ydHRpbWUKKyMtLUVuZENvbmZpZworCisjREVCVUcgPSAtQy1XIC1DLVdhbGwKK0RFQlVHID0gCisKKyN0aGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIG9wdGlvbmFsLiB5b3Ugd2lsbCB3YW50IHRvIGNvbXBpbGUKKyNldmVyeXRoaW5nIHlvdSBjYW4sIGJ1dCB5b3UgY2FuIGlnbm9yZSBvbmVzIHlvdSBkb24ndCBoYXZlCisjZGVwZW5kZW5jaWVzIGZvciwganVzdCBjb21tZW50IHRoZW0gb3V0CisKK2ltYWdlZXh0IHNyYy9pbWFnZWV4dC5jICQoU0RMKSAkKElNQUdFKSAkKFBORykgJChKUEVHKSAkKERFQlVHKQorZm9udCBzcmMvZm9udC5jICQoU0RMKSAkKEZPTlQpICQoREVCVUcpCittaXhlciBzcmMvbWl4ZXIuYyAkKFNETCkgJChNSVhFUikgJChERUJVRykKK21peGVyX211c2ljIHNyYy9tdXNpYy5jICQoU0RMKSAkKE1JWEVSKSAkKERFQlVHKQorX251bWVyaWNzdXJmYXJyYXkgc3JjL19udW1lcmljc3VyZmFycmF5LmMgJChTREwpICQoREVCVUcpCitfbnVtZXJpY3NuZGFycmF5IHNyYy9fbnVtZXJpY3NuZGFycmF5LmMgJChTREwpICQoTUlYRVIpICQoREVCVUcpCittb3ZpZSBzcmMvbW92aWUuYyAkKFNETCkgJChTTVBFRykgJChERUJVRykKK3NjcmFwIHNyYy9zY3JhcC5jICQoU0RMKSAkKFNDUkFQKSAkKERFQlVHKQorX2NhbWVyYSBzcmMvX2NhbWVyYS5jIHNyYy9jYW1lcmFfdjRsMi5jIHNyYy9jYW1lcmFfdjRsLmMgJChTREwpICQoREVCVUcpCitweXBtIHNyYy9weXBtLmMgJChTREwpICQoUE9SVE1JREkpICQoUE9SVFRJTUUpICQoREVCVUcpCisKK0dGWCA9IHNyYy9TRExfZ2Z4L1NETF9nZnhQcmltaXRpdmVzLmMgCisjR0ZYID0gc3JjL1NETF9nZngvU0RMX2dmeEJsaXRGdW5jLmMgc3JjL1NETF9nZngvU0RMX2dmeFByaW1pdGl2ZXMuYyAKK2dmeGRyYXcgc3JjL2dmeGRyYXcuYyAkKFNETCkgJChHRlgpICQoREVCVUcpCisKKworCisjdGhlc2UgbW9kdWxlcyBhcmUgcmVxdWlyZWQgZm9yIHB5Z2FtZSB0byBydW4uIHRoZXkgb25seSByZXF1aXJlCisjU0RMIGFzIGEgZGVwZW5kZW5jeS4gdGhlc2Ugc2hvdWxkIG5vdCBiZSBhbHRlcmVkCisKK2Jhc2Ugc3JjL2Jhc2UuYyAkKFNETCkgJChERUJVRykKK2Nkcm9tIHNyYy9jZHJvbS5jICQoU0RMKSAkKERFQlVHKQorY29sb3Igc3JjL2NvbG9yLmMgJChTREwpICQoREVCVUcpCitjb25zdGFudHMgc3JjL2NvbnN0YW50cy5jICQoU0RMKSAkKERFQlVHKQorZGlzcGxheSBzcmMvZGlzcGxheS5jICQoU0RMKSAkKERFQlVHKQorZXZlbnQgc3JjL2V2ZW50LmMgJChTREwpICQoREVCVUcpCitmYXN0ZXZlbnQgc3JjL2Zhc3RldmVudC5jIHNyYy9mYXN0ZXZlbnRzLmMgJChTREwpICQoREVCVUcpCitrZXkgc3JjL2tleS5jICQoU0RMKSAkKERFQlVHKQorbW91c2Ugc3JjL21vdXNlLmMgJChTREwpICQoREVCVUcpCityZWN0IHNyYy9yZWN0LmMgJChTREwpICQoREVCVUcpCityd29iamVjdCBzcmMvcndvYmplY3QuYyAkKFNETCkgJChERUJVRykKK3N1cmZhY2Ugc3JjL3N1cmZhY2UuYyBzcmMvYWxwaGFibGl0LmMgc3JjL3N1cmZhY2VfZmlsbC5jICQoU0RMKSAkKERFQlVHKQorc3VyZmxvY2sgc3JjL3N1cmZsb2NrLmMgJChTREwpICQoREVCVUcpCit0aW1lIHNyYy90aW1lLmMgJChTREwpICQoREVCVUcpCitqb3lzdGljayBzcmMvam95c3RpY2suYyAkKFNETCkgJChERUJVRykKK2RyYXcgc3JjL2RyYXcuYyAkKFNETCkgJChERUJVRykKK2ltYWdlIHNyYy9pbWFnZS5jICQoU0RMKSAkKERFQlVHKQorb3ZlcmxheSBzcmMvb3ZlcmxheS5jICQoU0RMKSAkKERFQlVHKQordHJhbnNmb3JtIHNyYy90cmFuc2Zvcm0uYyBzcmMvcm90b3pvb20uYyBzcmMvc2NhbGUyeC5jIHNyYy9zY2FsZV9tbXguYyAkKFNETCkgJChERUJVRykKK21hc2sgc3JjL21hc2suYyBzcmMvYml0bWFzay5jICQoU0RMKSAkKERFQlVHKQorYnVmZmVycHJveHkgc3JjL2J1ZmZlcnByb3h5LmMgJChTREwpICQoREVCVUcpCitwaXhlbGFycmF5IHNyYy9waXhlbGFycmF5LmMgJChTREwpICQoREVCVUcpCitfYXJyYXlzdXJmYXJyYXkgc3JjL19hcnJheXN1cmZhcnJheS5jICQoU0RMKSAkKERFQlVHKQorCisKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvX19pbml0X18ucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL19faW5pdF9fLnB5CmluZGV4IDdiZGI5MTIuLjY5N2ZmODQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvX19pbml0X18ucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy9fX2luaXRfXy5weQpAQCAtMTUsOSArMTUsMTAgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogCi1oZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQoraGVyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyCiAKIAogZGVmIHRlc3Rfc3VpdGUoKToKQEAgLTMyLDQgKzMzLDQgQEAKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3N1cHBvcnQucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3N1cHBvcnQucHkKaW5kZXggMmEwMzc2NS4uNzgzMzE4ZSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy9zdXBwb3J0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvc3VwcG9ydC5weQpAQCAtMiwxMSArMiwxOSBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdGVtcGZpbGUKK2Zyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKK2ltcG9ydCB3YXJuaW5ncwogCi1mcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLWZyb20gZGlzdHV0aWxzLmRpc3QgaW1wb3J0IERpc3RyaWJ1dGlvbgotZnJvbSBkaXN0dXRpbHMuY21kIGltcG9ydCBDb21tYW5kCitmcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwKK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgorCitkZWYgY2FwdHVyZV93YXJuaW5ncyhmdW5jKToKKyAgICBkZWYgX2NhcHR1cmVfd2FybmluZ3MoKmFyZ3MsICoqa3cpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIpCisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprdykKKyAgICByZXR1cm4gX2NhcHR1cmVfd2FybmluZ3MKIAogY2xhc3MgTG9nZ2luZ1NpbGVuY2VyKG9iamVjdCk6CiAKQEAgLTE5LDE4ICsyNywxMiBAQAogICAgICAgICBzZWxmLl9vbGRfbG9nID0gbG9nLkxvZy5fbG9nCiAgICAgICAgIGxvZy5Mb2cuX2xvZyA9IHNlbGYuX2xvZwogICAgICAgICBzZWxmLmxvZ3MgPSBbXQotICAgICAgICBzZWxmLl9vbGRfd2FybiA9IENvbW1hbmQud2FybgotICAgICAgICBDb21tYW5kLndhcm4gPSBzZWxmLl93YXJuCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGxvZy5zZXRfdGhyZXNob2xkKHNlbGYudGhyZXNob2xkKQogICAgICAgICBsb2cuTG9nLl9sb2cgPSBzZWxmLl9vbGRfbG9nCi0gICAgICAgIENvbW1hbmQud2FybiA9IHNlbGYuX29sZF93YXJuCiAgICAgICAgIHN1cGVyKExvZ2dpbmdTaWxlbmNlciwgc2VsZikudGVhckRvd24oKQogCi0gICAgZGVmIF93YXJuKHNlbGYsIG1zZyk6Ci0gICAgICAgIHNlbGYubG9ncy5hcHBlbmQoKCcnLCBtc2csICcnKSkKLQogICAgIGRlZiBfbG9nKHNlbGYsIGxldmVsLCBtc2csIGFyZ3MpOgogICAgICAgICBpZiBsZXZlbCBub3QgaW4gKERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignJXMgd3JvbmcgbG9nIGxldmVsJyAlIHN0cihsZXZlbCkpCkBAIC00Nyw3ICs0OSw2IEBACiAgICAgZGVmIGNsZWFyX2xvZ3Moc2VsZik6CiAgICAgICAgIHNlbGYubG9ncyA9IFtdCiAKLQogY2xhc3MgVGVtcGRpck1hbmFnZXIob2JqZWN0KToKICAgICAiIiJNaXgtaW4gY2xhc3MgdGhhdCBoYW5kbGVzIHRlbXBvcmFyeSBkaXJlY3RvcmllcyBmb3IgdGVzdCBjYXNlcy4KIApAQCAtNjIsNyArNjMsNyBAQAogICAgICAgICBzdXBlcihUZW1wZGlyTWFuYWdlciwgc2VsZikudGVhckRvd24oKQogICAgICAgICB3aGlsZSBzZWxmLnRlbXBkaXJzOgogICAgICAgICAgICAgZCA9IHNlbGYudGVtcGRpcnMucG9wKCkKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCkKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCwgb3MubmFtZSBpbiAoJ250JywgJ2N5Z3dpbicpKQogCiAgICAgZGVmIG1rZHRlbXAoc2VsZik6CiAgICAgICAgICIiIkNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIGNsZWFuZWQgdXAuCkBAIC03Niw2ICs3Nyw3IEBACiAgICAgZGVmIHdyaXRlX2ZpbGUoc2VsZiwgcGF0aCwgY29udGVudD0neHh4Jyk6CiAgICAgICAgICIiIldyaXRlcyBhIGZpbGUgaW4gdGhlIGdpdmVuIHBhdGguCiAKKwogICAgICAgICBwYXRoIGNhbiBiZSBhIHN0cmluZyBvciBhIHNlcXVlbmNlLgogICAgICAgICAiIiIKICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCAobGlzdCwgdHVwbGUpKToKQEAgLTExMiwzICsxMTQsMjAgQEAKIAogICAgIGRlZiBlbnN1cmVfZmluYWxpemVkKHNlbGYpOgogICAgICAgICBwYXNzCisKK2NsYXNzIEVudmlyb25HdWFyZChvYmplY3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihFbnZpcm9uR3VhcmQsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5vbGRfZW52aXJvbiA9IGRlZXBjb3B5KG9zLmVudmlyb24pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYub2xkX2Vudmlyb24uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KGtleSkgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKworICAgICAgICBmb3Iga2V5IGluIG9zLmVudmlyb24ua2V5cygpOgorICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLm9sZF9lbnZpcm9uOgorICAgICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tleV0KKworICAgICAgICBzdXBlcihFbnZpcm9uR3VhcmQsIHNlbGYpLnRlYXJEb3duKCkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzEwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5CkBAIC0wLDAgKzEsMjg0IEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmFyY2hpdmVfdXRpbC4iIiIKK19fcmV2aXNpb25fXyA9ICIkSWQkIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHRhcmZpbGUKK2Zyb20gb3MucGF0aCBpbXBvcnQgc3BsaXRkcml2ZQoraW1wb3J0IHdhcm5pbmdzCisKK2Zyb20gZGlzdHV0aWxzLmFyY2hpdmVfdXRpbCBpbXBvcnQgKGNoZWNrX2FyY2hpdmVfZm9ybWF0cywgbWFrZV90YXJiYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV96aXBmaWxlLCBtYWtlX2FyY2hpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUkNISVZFX0ZPUk1BVFMpCitmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlLCBzcGF3bgorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QKKwordHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCisKK3RyeToKKyAgICBpbXBvcnQgemlwZmlsZQorICAgIFpJUF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFpJUF9TVVBQT1JUID0gZmluZF9leGVjdXRhYmxlKCd6aXAnKQorCisjIHNvbWUgdGVzdHMgd2lsbCBmYWlsIGlmIHpsaWIgaXMgbm90IGF2YWlsYWJsZQordHJ5OgorICAgIGltcG9ydCB6bGliCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgemxpYiA9IE5vbmUKKworCitjbGFzcyBBcmNoaXZlVXRpbFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfbWFrZV90YXJiYWxsKHNlbGYpOgorICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyB0byB0YXIKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdmaWxlMSddLCAneHh4JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdmaWxlMiddLCAneHh4JykKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHRtcGRpciwgJ3N1YicpKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ3N1YicsICdmaWxlMyddLCAneHh4JykKKworICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgdW5pdHRlc3Quc2tpcFVubGVzcyhzcGxpdGRyaXZlKHRtcGRpcilbMF0gPT0gc3BsaXRkcml2ZSh0bXBkaXIyKVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIGFuZCB0YXJnZXQgc2hvdWxkIGJlIG9uIHNhbWUgZHJpdmUiKQorCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisKKyAgICAgICAgIyB3b3JraW5nIHdpdGggcmVsYXRpdmUgcGF0aHMgdG8gYXZvaWQgdGFyIHdhcm5pbmdzCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1ha2VfdGFyYmFsbChzcGxpdGRyaXZlKGJhc2VfbmFtZSlbMV0sICcuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhci5neicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgICAgICMgdHJ5aW5nIGFuIHVuY29tcHJlc3NlZCBvbmUKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFrZV90YXJiYWxsKHNwbGl0ZHJpdmUoYmFzZV9uYW1lKVsxXSwgJy4nLCBjb21wcmVzcz1Ob25lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICBkZWYgX3RhcmluZm8oc2VsZiwgcGF0aCk6CisgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lcyA9IHRhci5nZXRuYW1lcygpCisgICAgICAgICAgICBuYW1lcy5zb3J0KCkKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShuYW1lcykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICBkZWYgX2NyZWF0ZV9maWxlcyhzZWxmKToKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGRpc3QgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlzdCcpCisgICAgICAgIG9zLm1rZGlyKGRpc3QpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbZGlzdCwgJ2ZpbGUxJ10sICd4eHgnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW2Rpc3QsICdmaWxlMiddLCAneHh4JykKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGRpc3QsICdzdWInKSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFtkaXN0LCAnc3ViJywgJ2ZpbGUzJ10sICd4eHgnKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZGlzdCwgJ3N1YjInKSkKKyAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIHJldHVybiB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZpbmRfZXhlY3V0YWJsZSgndGFyJykgYW5kIGZpbmRfZXhlY3V0YWJsZSgnZ3ppcCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdOZWVkIHRoZSB0YXIgY29tbWFuZCB0byBydW4nKQorICAgIGRlZiB0ZXN0X3RhcmZpbGVfdnNfdGFyKHNlbGYpOgorICAgICAgICB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXIuZ3onCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKworICAgICAgICAjIG5vdyBjcmVhdGUgYW5vdGhlciB0YXJiYWxsIHVzaW5nIGB0YXJgCisgICAgICAgIHRhcmJhbGwyID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2FyY2hpdmUyLnRhci5neicpCisgICAgICAgIHRhcl9jbWQgPSBbJ3RhcicsICctY2YnLCAnYXJjaGl2ZTIudGFyJywgJ2Rpc3QnXQorICAgICAgICBnemlwX2NtZCA9IFsnZ3ppcCcsICctZjknLCAnYXJjaGl2ZTIudGFyJ10KKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3Bhd24odGFyX2NtZCkKKyAgICAgICAgICAgIHNwYXduKGd6aXBfY21kKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbDIpKQorICAgICAgICAjIGxldCdzIGNvbXBhcmUgYm90aCB0YXJiYWxscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RhcmluZm8odGFyYmFsbCksIHNlbGYuX3RhcmluZm8odGFyYmFsbDIpKQorCisgICAgICAgICMgdHJ5aW5nIGFuIHVuY29tcHJlc3NlZCBvbmUKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICAgICAgIyBub3cgZm9yIGEgZHJ5X3J1bgorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUsIGRyeV9ydW49VHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmluZF9leGVjdXRhYmxlKCdjb21wcmVzcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgY29tcHJlc3MgcHJvZ3JhbSBpcyByZXF1aXJlZCcpCisgICAgZGVmIHRlc3RfY29tcHJlc3NfZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKworICAgICAgICAjIHVzaW5nIGNvbXByZXNzIGFuZCB0ZXN0aW5nIHRoZSBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgICAgICAgICBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPSdjb21wcmVzcycpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXIuWicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMSkKKworICAgICAgICAjIHNhbWUgdGVzdCB3aXRoIGRyeV9ydW4KKyAgICAgICAgb3MucmVtb3ZlKHRhcmJhbGwpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgICAgICAgICBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPSdjb21wcmVzcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeV9ydW49VHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHModGFyYmFsbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFpJUF9TVVBQT1JULCAnTmVlZCB6aXAgc3VwcG9ydCB0byBydW4nKQorICAgIGRlZiB0ZXN0X21ha2VfemlwZmlsZShzZWxmKToKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTEnXSwgJ3h4eCcpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTInXSwgJ3h4eCcpCisKKyAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIG1ha2VfemlwZmlsZShiYXNlX25hbWUsIHRtcGRpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcuemlwJworCisgICAgZGVmIHRlc3RfY2hlY2tfYXJjaGl2ZV9mb3JtYXRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrX2FyY2hpdmVfZm9ybWF0cyhbJ2d6dGFyJywgJ3h4eCcsICd6aXAnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3h4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hlY2tfYXJjaGl2ZV9mb3JtYXRzKFsnZ3p0YXInLCAnemlwJ10pLCBOb25lKQorCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlKHNlbGYpOgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnYXJjaGl2ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ha2VfYXJjaGl2ZSwgYmFzZV9uYW1lLCAneHh4JykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmVfb3duZXJfZ3JvdXAoc2VsZik6CisgICAgICAgICMgdGVzdGluZyBtYWtlX2FyY2hpdmUgd2l0aCBvd25lciBhbmQgZ3JvdXAsIHdpdGggdmFyaW91cyBjb21iaW5hdGlvbnMKKyAgICAgICAgIyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUncyBub3QgZ2lkL3VpZCBzdXBwb3J0CisgICAgICAgIGlmIFVJRF9HSURfU1VQUE9SVDoKKyAgICAgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3JvdXAgPSBvd25lciA9ICdyb290JworCisgICAgICAgIGJhc2VfZGlyLCByb290X2RpciwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSAsICdhcmNoaXZlJykKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2Rpciwgb3duZXI9b3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPSdramhramhramcnLCBncm91cD0nb2lob2hvaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFVJRF9HSURfU1VQUE9SVCwgIlJlcXVpcmVzIGdycCBhbmQgcHdkIHN1cHBvcnQiKQorICAgIGRlZiB0ZXN0X3RhcmZpbGVfcm9vdF9vd25lcihzZWxmKToKKyAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KKyAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXJjaGl2ZV9uYW1lID0gbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX25hbWUpKQorCisgICAgICAgICMgbm93IGNoZWNrcyB0aGUgcmlnaHRzCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZV9jd2Qoc2VsZik6CisgICAgICAgIGN1cnJlbnRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgZGVmIF9icmVha3MoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKyAgICAgICAgQVJDSElWRV9GT1JNQVRTWyd4eHgnXSA9IChfYnJlYWtzLCBbXSwgJ3h4eCBmaWxlJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1ha2VfYXJjaGl2ZSgneHh4JywgJ3h4eCcsIHJvb3RfZGlyPXNlbGYubWtkdGVtcCgpKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0Y3dkKCksIGN1cnJlbnRfZGlyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIEFSQ0hJVkVfRk9STUFUU1sneHh4J10KKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEFyY2hpdmVVdGlsVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTdjZDVhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0LnB5CkBAIC0wLDAgKzEsNDUgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdC4iIiIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgorZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdCBpbXBvcnQgYmRpc3QKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3Bhd24KK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yCisKK2NsYXNzIEJ1aWxkVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZm9ybWF0cyhzZWxmKToKKworICAgICAgICAjIGxldCdzIGNyZWF0ZSBhIGNvbW1hbmQgYW5kIG1ha2Ugc3VyZQorICAgICAgICAjIHdlIGNhbiBmaXggdGhlIGZvcm1hdAorICAgICAgICBwa2dfcHRoLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGJkaXN0KGRpc3QpCisgICAgICAgIGNtZC5mb3JtYXRzID0gWydtc2knXQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmZvcm1hdHMsIFsnbXNpJ10pCisKKyAgICAgICAgIyB3aGF0IGZvcm1hdCBiZGlzdCBvZmZlcnMgPworICAgICAgICAjIFhYWCBhbiBleHBsaWNpdCBsaXN0IGluIGJkaXN0IGlzCisgICAgICAgICMgbm90IHRoZSBiZXN0IHdheSB0byAgYmRpc3RfKiBjb21tYW5kcworICAgICAgICAjIHdlIHNob3VsZCBhZGQgYSByZWdpc3RyeQorICAgICAgICBmb3JtYXRzID0gWydycG0nLCAnemlwJywgJ2d6dGFyJywgJ2J6dGFyJywgJ3p0YXInLAorICAgICAgICAgICAgICAgICAgICd0YXInLCAnd2luaW5zdCcsICdtc2knXQorICAgICAgICBmb3JtYXRzLnNvcnQoKQorICAgICAgICBmb3VuZGVkID0gY21kLmZvcm1hdF9jb21tYW5kLmtleXMoKQorICAgICAgICBmb3VuZGVkLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kZWQsIGZvcm1hdHMpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZFRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMjJhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weQpAQCAtMCwwICsxLDEwNSBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X2R1bWIuIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IG9zCisKKyMgemxpYiBpcyBub3QgdXNlZCBoZXJlLCBidXQgaWYgaXQncyBub3QgYXZhaWxhYmxlCisjIHRlc3Rfc2ltcGxlX2J1aWx0IHdpbGwgZmFpbAordHJ5OgorICAgIGltcG9ydCB6bGliCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgemxpYiA9IE5vbmUKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgorZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9kdW1iIGltcG9ydCBiZGlzdF9kdW1iCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorCitTRVRVUF9QWSA9ICIiIlwKK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCitpbXBvcnQgZm9vCisKK3NldHVwKG5hbWU9J2ZvbycsIHZlcnNpb249JzAuMScsIHB5X21vZHVsZXM9Wydmb28nXSwKKyAgICAgIHVybD0neHh4JywgYXV0aG9yPSd4eHgnLCBhdXRob3JfZW1haWw9J3h4eCcpCisKKyIiIgorCitjbGFzcyBCdWlsZER1bWJUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoQnVpbGREdW1iVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5vbGRfbG9jYXRpb24gPSBvcy5nZXRjd2QoKQorICAgICAgICBzZWxmLm9sZF9zeXNfYXJndiA9IHN5cy5hcmd2LCBzeXMuYXJndls6XQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy5jaGRpcihzZWxmLm9sZF9sb2NhdGlvbikKKyAgICAgICAgc3lzLmFyZ3YgPSBzZWxmLm9sZF9zeXNfYXJndlswXQorICAgICAgICBzeXMuYXJndls6XSA9IHNlbGYub2xkX3N5c19hcmd2WzFdCisgICAgICAgIHN1cGVyKEJ1aWxkRHVtYlRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3Rfc2ltcGxlX2J1aWx0KHNlbGYpOgorCisgICAgICAgICMgbGV0J3MgY3JlYXRlIGEgc2ltcGxlIHBhY2thZ2UKKyAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2ZvbycpCisgICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdmb28ucHknKSwgJyMnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdNQU5JRkVTVC5pbicpLCAnaW5jbHVkZSBmb28ucHknKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdSRUFETUUnKSwgJycpCisKKyAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAnZm9vJywgJ3ZlcnNpb24nOiAnMC4xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5X21vZHVsZXMnOiBbJ2ZvbyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogJ3h4eCcsICdhdXRob3InOiAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICd4eHgnfSkKKyAgICAgICAgZGlzdC5zY3JpcHRfbmFtZSA9ICdzZXR1cC5weScKKyAgICAgICAgb3MuY2hkaXIocGtnX2RpcikKKworICAgICAgICBzeXMuYXJndiA9IFsnc2V0dXAucHknXQorICAgICAgICBjbWQgPSBiZGlzdF9kdW1iKGRpc3QpCisKKyAgICAgICAgIyBzbyB0aGUgb3V0cHV0IGlzIHRoZSBzYW1lIG5vIG1hdHRlcgorICAgICAgICAjIHdoYXQgaXMgdGhlIHBsYXRmb3JtCisgICAgICAgIGNtZC5mb3JtYXQgPSAnemlwJworCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBzZWUgd2hhdCB3ZSBoYXZlCisgICAgICAgIGRpc3RfY3JlYXRlZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKHBrZ19kaXIsICdkaXN0JykpCisgICAgICAgIGJhc2UgPSAiJXMuJXMiICUgKGRpc3QuZ2V0X2Z1bGxuYW1lKCksIGNtZC5wbGF0X25hbWUpCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6CisgICAgICAgICAgICBiYXNlID0gYmFzZS5yZXBsYWNlKCc6JywgJy0nKQorCisgICAgICAgIHdhbnRlZCA9IFsnJXMuemlwJyAlIGJhc2VdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdF9jcmVhdGVkLCB3YW50ZWQpCisKKyAgICAgICAgIyBub3cgbGV0J3MgY2hlY2sgd2hhdCB3ZSBoYXZlIGluIHRoZSB6aXAgZmlsZQorICAgICAgICAjIFhYWCB0byBiZSBkb25lCisKKyAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgorICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIG9zLmNoZGlyKHBrZ19kaXIpCisgICAgICAgIGNtZCA9IGJkaXN0X2R1bWIoZGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuYmRpc3RfZGlyLCBOb25lKQorICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCisKKyAgICAgICAgIyBiZGlzdF9kaXIgaXMgaW5pdGlhbGl6ZWQgdG8gYmRpc3RfYmFzZS9kdW1iIGlmIG5vdCBzZXQKKyAgICAgICAgYmFzZSA9IGNtZC5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2JkaXN0JykuYmRpc3RfYmFzZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5iZGlzdF9kaXIsIG9zLnBhdGguam9pbihiYXNlLCAnZHVtYicpKQorCisgICAgICAgICMgdGhlIGZvcm1hdCBpcyBzZXQgdG8gYSBkZWZhdWx0IHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgb3MubmFtZQorICAgICAgICBkZWZhdWx0ID0gY21kLmRlZmF1bHRfZm9ybWF0W29zLm5hbWVdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmZvcm1hdCwgZGVmYXVsdCkKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEJ1aWxkRHVtYlRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfbXNpLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X21zaS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzg5N2FiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X21zaS5weQpAQCAtMCwwICsxLDI1IEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfbXNpLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm09PSJ3aW4zMiIsICJUaGVzZSB0ZXN0cyBhcmUgb25seSBmb3Igd2luMzIiKQorY2xhc3MgQkRpc3RNU0lUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbWluaW1hbChzZWxmKToKKyAgICAgICAgIyBtaW5pbWFsIHRlc3QgWFhYIG5lZWQgbW9yZSB0ZXN0cworICAgICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X21zaSBpbXBvcnQgYmRpc3RfbXNpCisgICAgICAgIHBrZ19wdGgsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gYmRpc3RfbXNpKGRpc3QpCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEJEaXN0TVNJVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9ycG0ucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfcnBtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YTU3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfcnBtLnB5CkBAIC0wLDAgKzEsMTI3IEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfcnBtLiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KK2Zyb20gZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfcnBtIGltcG9ydCBiZGlzdF9ycG0KK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3Bhd24KK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yCisKK1NFVFVQX1BZID0gIiIiXAorZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKK2ltcG9ydCBmb28KKworc2V0dXAobmFtZT0nZm9vJywgdmVyc2lvbj0nMC4xJywgcHlfbW9kdWxlcz1bJ2ZvbyddLAorICAgICAgdXJsPSd4eHgnLCBhdXRob3I9J3h4eCcsIGF1dGhvcl9lbWFpbD0neHh4JykKKworIiIiCisKK2NsYXNzIEJ1aWxkUnBtVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoQnVpbGRScG1UZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLm9sZF9sb2NhdGlvbiA9IG9zLmdldGN3ZCgpCisgICAgICAgIHNlbGYub2xkX3N5c19hcmd2ID0gc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLmNoZGlyKHNlbGYub2xkX2xvY2F0aW9uKQorICAgICAgICBzeXMuYXJndiA9IHNlbGYub2xkX3N5c19hcmd2WzBdCisgICAgICAgIHN5cy5hcmd2WzpdID0gc2VsZi5vbGRfc3lzX2FyZ3ZbMV0KKyAgICAgICAgc3VwZXIoQnVpbGRScG1UZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfcXVpZXQoc2VsZik6CisKKyAgICAgICAgIyBYWFggSSBhbSB1bmFibGUgeWV0IHRvIG1ha2UgdGhpcyB0ZXN0IHdvcmsgd2l0aG91dAorICAgICAgICAjIHNwdXJpb3VzIHNkdG91dC9zdGRlcnIgb3V0cHV0IHVuZGVyIE1hYyBPUyBYCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnbGludXgyJzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgdGhpcyB0ZXN0IHdpbGwgcnVuIG9ubHkgaWYgdGhlIHJwbSBjb21tYW5kcyBhcmUgZm91bmQKKyAgICAgICAgaWYgKGZpbmRfZXhlY3V0YWJsZSgncnBtJykgaXMgTm9uZSBvcgorICAgICAgICAgICAgZmluZF9leGVjdXRhYmxlKCdycG1idWlsZCcpIGlzIE5vbmUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBsZXQncyBjcmVhdGUgYSBwYWNrYWdlCisgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmb28nKQorICAgICAgICBvcy5ta2Rpcihwa2dfZGlyKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdzZXR1cC5weScpLCBTRVRVUF9QWSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnZm9vLnB5JyksICcjJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnTUFOSUZFU1QuaW4nKSwgJ2luY2x1ZGUgZm9vLnB5JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnUkVBRE1FJyksICcnKQorCisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ2ZvbycsICd2ZXJzaW9uJzogJzAuMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweV9tb2R1bGVzJzogWydmb28nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICd4eHgnLCAnYXV0aG9yJzogJ3h4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAneHh4J30pCisgICAgICAgIGRpc3Quc2NyaXB0X25hbWUgPSAnc2V0dXAucHknCisgICAgICAgIG9zLmNoZGlyKHBrZ19kaXIpCisKKyAgICAgICAgc3lzLmFyZ3YgPSBbJ3NldHVwLnB5J10KKyAgICAgICAgY21kID0gYmRpc3RfcnBtKGRpc3QpCisgICAgICAgIGNtZC5maXhfcHl0aG9uID0gVHJ1ZQorCisgICAgICAgICMgcnVubmluZyBpbiBxdWlldCBtb2RlCisgICAgICAgIGNtZC5xdWlldCA9IDEKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICBkaXN0X2NyZWF0ZWQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZGlzdCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Zvby0wLjEtMS5ub2FyY2gucnBtJyBpbiBkaXN0X2NyZWF0ZWQpCisKKyAgICBkZWYgdGVzdF9ub19vcHRpbWl6ZV9mbGFnKHNlbGYpOgorCisgICAgICAgICMgWFhYIEkgYW0gdW5hYmxlIHlldCB0byBtYWtlIHRoaXMgdGVzdCB3b3JrIHdpdGhvdXQKKyAgICAgICAgIyBzcHVyaW91cyBzZHRvdXQvc3RkZXJyIG91dHB1dCB1bmRlciBNYWMgT1MgWAorICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2xpbnV4Mic6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTMzMTY0CisgICAgICAgICMgdGhpcyB0ZXN0IHdpbGwgcnVuIG9ubHkgaWYgdGhlIHJwbSBjb21tYW5kIGlzIGZvdW5kCisgICAgICAgIGlmIChmaW5kX2V4ZWN1dGFibGUoJ3JwbScpIGlzIE5vbmUgb3IKKyAgICAgICAgICAgIGZpbmRfZXhlY3V0YWJsZSgncnBtYnVpbGQnKSBpcyBOb25lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgbGV0J3MgY3JlYXRlIGEgcGFja2FnZSB0aGF0IGJyYWtlcyBiZGlzdF9ycG0KKyAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2ZvbycpCisgICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdmb28ucHknKSwgJyMnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdNQU5JRkVTVC5pbicpLCAnaW5jbHVkZSBmb28ucHknKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdSRUFETUUnKSwgJycpCisKKyAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAnZm9vJywgJ3ZlcnNpb24nOiAnMC4xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5X21vZHVsZXMnOiBbJ2ZvbyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogJ3h4eCcsICdhdXRob3InOiAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICd4eHgnfSkKKyAgICAgICAgZGlzdC5zY3JpcHRfbmFtZSA9ICdzZXR1cC5weScKKyAgICAgICAgb3MuY2hkaXIocGtnX2RpcikKKworICAgICAgICBzeXMuYXJndiA9IFsnc2V0dXAucHknXQorICAgICAgICBjbWQgPSBiZGlzdF9ycG0oZGlzdCkKKyAgICAgICAgY21kLmZpeF9weXRob24gPSBUcnVlCisKKyAgICAgICAgY21kLnF1aWV0ID0gMQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgIGRpc3RfY3JlYXRlZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKHBrZ19kaXIsICdkaXN0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZm9vLTAuMS0xLm5vYXJjaC5ycG0nIGluIGRpc3RfY3JlYXRlZCkKKyAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZGlzdCcsICdmb28tMC4xLTEubm9hcmNoLnJwbScpKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRScG1UZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X3dpbmluc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3Rfd2luaW5zdC5weQppbmRleCA4NWFhMDJhLi5jMmIxM2IzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3Rfd2luaW5zdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3Rfd2luaW5zdC5weQpAQCAtMSw4ICsxLDggQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF93aW5pbnN0LiIiIgogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKIAotZnJvbSBkaXN0dXRpbHMuZGlzdCBpbXBvcnQgRGlzdHJpYnV0aW9uCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKwogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF93aW5pbnN0IGltcG9ydCBiZGlzdF93aW5pbnN0CiBmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAogCkBAIC0xNSwxMCArMTUsNyBAQAogICAgICAgICAjIGlzc3VlNTczMTogY29tbWFuZCB3YXMgYnJva2VuIG9uIG5vbi13aW5kb3dzIHBsYXRmb3JtcwogICAgICAgICAjIHRoaXMgdGVzdCBtYWtlcyBzdXJlIGl0IHdvcmtzIG5vdyBmb3IgZXZlcnkgcGxhdGZvcm0KICAgICAgICAgIyBsZXQncyBjcmVhdGUgYSBjb21tYW5kCi0gICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmb28nKQotICAgICAgICBvcy5ta2Rpcihwa2dfZGlyKQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKKyAgICAgICAgcGtnX3B0aCwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQogICAgICAgICBjbWQgPSBiZGlzdF93aW5pbnN0KGRpc3QpCiAgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKIApAQCAtMjYsMTAgKzIzLDEwIEBACiAgICAgICAgICMgYW5kIG1ha2Ugc3VyZSBpdCBmaW5kcyBpdCBhbmQgcmV0dXJucyBpdHMgY29udGVudAogICAgICAgICAjIG5vIG1hdHRlciB3aGF0IHBsYXRmb3JtIHdlIGhhdmUKICAgICAgICAgZXhlX2ZpbGUgPSBjbWQuZ2V0X2V4ZV9ieXRlcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZXhlX2ZpbGUpID4gMTApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZXhlX2ZpbGUpID4gMTApCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZFdpbkluc3RUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYjhkNzMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGQucHkKQEAgLTAsMCArMSw1NSBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkIGltcG9ydCBidWlsZAorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gc3lzY29uZmlnIGltcG9ydCBnZXRfcGxhdGZvcm0KKworY2xhc3MgQnVpbGRUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKKyAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBidWlsZChkaXN0KQorICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCisKKyAgICAgICAgIyBpZiBub3Qgc3BlY2lmaWVkLCBwbGF0X25hbWUgZ2V0cyB0aGUgY3VycmVudCBwbGF0Zm9ybQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5wbGF0X25hbWUsIGdldF9wbGF0Zm9ybSgpKQorCisgICAgICAgICMgYnVpbGRfcHVyZWxpYiBpcyBidWlsZCArIGxpYgorICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY21kLmJ1aWxkX2Jhc2UsICdsaWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF9wdXJlbGliLCB3YW50ZWQpCisKKyAgICAgICAgIyBidWlsZF9wbGF0bGliIGlzICdidWlsZC9saWIucGxhdGZvcm0teC54Wy1weWRlYnVnXScKKyAgICAgICAgIyBleGFtcGxlczoKKyAgICAgICAgIyAgIGJ1aWxkL2xpYi5tYWNvc3gtMTAuMy1pMzg2LTIuNworICAgICAgICBwbGF0X3NwZWMgPSAnLiVzLSVzJyAlIChjbWQucGxhdF9uYW1lLCBzeXMudmVyc2lvblswOjNdKQorICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ2dldHRvdGFscmVmY291bnQnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWQuYnVpbGRfcGxhdGxpYi5lbmRzd2l0aCgnLXB5ZGVidWcnKSkKKyAgICAgICAgICAgIHBsYXRfc3BlYyArPSAnLXB5ZGVidWcnCisgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjbWQuYnVpbGRfYmFzZSwgJ2xpYicgKyBwbGF0X3NwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmJ1aWxkX3BsYXRsaWIsIHdhbnRlZCkKKworICAgICAgICAjIGJ5IGRlZmF1bHQsIGJ1aWxkX2xpYiA9IGJ1aWxkX3B1cmVsaWIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuYnVpbGRfbGliLCBjbWQuYnVpbGRfcHVyZWxpYikKKworICAgICAgICAjIGJ1aWxkX3RlbXAgaXMgYnVpbGQvdGVtcC48cGxhdD4KKyAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGNtZC5idWlsZF9iYXNlLCAndGVtcCcgKyBwbGF0X3NwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmJ1aWxkX3RlbXAsIHdhbnRlZCkKKworICAgICAgICAjIGJ1aWxkX3NjcmlwdHMgaXMgYnVpbGQvc2NyaXB0cy14LngKKyAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGNtZC5idWlsZF9iYXNlLCAnc2NyaXB0cy0nICsgIHN5cy52ZXJzaW9uWzA6M10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmJ1aWxkX3NjcmlwdHMsIHdhbnRlZCkKKworICAgICAgICAjIGV4ZWN1dGFibGUgaXMgb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZXhlY3V0YWJsZSwgb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY3V0YWJsZSkpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZFRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfY2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9jbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNGUyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfY2xpYi5weQpAQCAtMCwwICsxLDE0NSBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2NsaWIuIiIiCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9jbGliIGltcG9ydCBidWlsZF9jbGliCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1NldHVwRXJyb3IKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCisKK2NsYXNzIEJ1aWxkQ0xpYlRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NoZWNrX2xpYnJhcnlfZGlzdChzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBidWlsZF9jbGliKGRpc3QpCisKKyAgICAgICAgIyAnbGlicmFyaWVzJyBvcHRpb24gbXVzdCBiZSBhIGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmNoZWNrX2xpYnJhcnlfbGlzdCwgJ2ZvbycpCisKKyAgICAgICAgIyBlYWNoIGVsZW1lbnQgb2YgJ2xpYnJhcmllcycgbXVzdCBhIDItdHVwbGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmNoZWNrX2xpYnJhcnlfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWydmb28xJywgJ2ZvbzInXSkKKworICAgICAgICAjIGZpcnN0IGVsZW1lbnQgb2YgZWFjaCB0dXBsZSBpbiAnbGlicmFyaWVzJworICAgICAgICAjIG11c3QgYmUgYSBzdHJpbmcgKHRoZSBsaWJyYXJ5IG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5jaGVja19saWJyYXJ5X2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsoMSwgJ2ZvbzEnKSwgKCduYW1lJywgJ2ZvbzInKV0pCisKKyAgICAgICAgIyBsaWJyYXJ5IG5hbWUgbWF5IG5vdCBjb250YWluIGRpcmVjdG9yeSBzZXBhcmF0b3JzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5jaGVja19saWJyYXJ5X2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ25hbWUnLCAnZm9vMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhbm90aGVyL25hbWUnLCAnZm9vMicpXSkKKworICAgICAgICAjIHNlY29uZCBlbGVtZW50IG9mIGVhY2ggdHVwbGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkgKGJ1aWxkIGluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5jaGVja19saWJyYXJ5X2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ25hbWUnLCB7fSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2Fub3RoZXInLCAnZm9vMicpXSkKKworICAgICAgICAjIHRob3NlIHdvcmsKKyAgICAgICAgbGlicyA9IFsoJ25hbWUnLCB7fSksICgnbmFtZScsIHsnb2snOiAnZ29vZCd9KV0KKyAgICAgICAgY21kLmNoZWNrX2xpYnJhcnlfbGlzdChsaWJzKQorCisgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZV9maWxlcyhzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBidWlsZF9jbGliKGRpc3QpCisKKyAgICAgICAgIyAiaW4gJ2xpYnJhcmllcycgb3B0aW9uICdzb3VyY2VzJyBtdXN0IGJlIHByZXNlbnQgYW5kIG11c3QgYmUKKyAgICAgICAgIyBhIGxpc3Qgb2Ygc291cmNlIGZpbGVuYW1lcworICAgICAgICBjbWQubGlicmFyaWVzID0gWygnbmFtZScsIHt9KV0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmdldF9zb3VyY2VfZmlsZXMpCisKKyAgICAgICAgY21kLmxpYnJhcmllcyA9IFsoJ25hbWUnLCB7J3NvdXJjZXMnOiAxfSldCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5nZXRfc291cmNlX2ZpbGVzKQorCisgICAgICAgIGNtZC5saWJyYXJpZXMgPSBbKCduYW1lJywgeydzb3VyY2VzJzogWydhJywgJ2InXX0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5nZXRfc291cmNlX2ZpbGVzKCksIFsnYScsICdiJ10pCisKKyAgICAgICAgY21kLmxpYnJhcmllcyA9IFsoJ25hbWUnLCB7J3NvdXJjZXMnOiAoJ2EnLCAnYicpfSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmdldF9zb3VyY2VfZmlsZXMoKSwgWydhJywgJ2InXSkKKworICAgICAgICBjbWQubGlicmFyaWVzID0gWygnbmFtZScsIHsnc291cmNlcyc6ICgnYScsICdiJyl9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ25hbWUyJywgeydzb3VyY2VzJzogWydjJywgJ2QnXX0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5nZXRfc291cmNlX2ZpbGVzKCksIFsnYScsICdiJywgJ2MnLCAnZCddKQorCisgICAgZGVmIHRlc3RfYnVpbGRfbGlicmFyaWVzKHNlbGYpOgorCisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gYnVpbGRfY2xpYihkaXN0KQorICAgICAgICBjbGFzcyBGYWtlQ29tcGlsZXI6CisgICAgICAgICAgICBkZWYgY29tcGlsZSgqYXJncywgKiprdyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgY3JlYXRlX3N0YXRpY19saWIgPSBjb21waWxlCisKKyAgICAgICAgY21kLmNvbXBpbGVyID0gRmFrZUNvbXBpbGVyKCkKKworICAgICAgICAjIGJ1aWxkX2xpYnJhcmllcyBpcyBhbHNvIGRvaW5nIGEgYml0IG9mIHR5cG9lIGNoZWNraW5nCisgICAgICAgIGxpYiA9IFsoJ25hbWUnLCB7J3NvdXJjZXMnOiAnbm90dmFsaWQnfSldCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5idWlsZF9saWJyYXJpZXMsIGxpYikKKworICAgICAgICBsaWIgPSBbKCduYW1lJywgeydzb3VyY2VzJzogbGlzdCgpfSldCisgICAgICAgIGNtZC5idWlsZF9saWJyYXJpZXMobGliKQorCisgICAgICAgIGxpYiA9IFsoJ25hbWUnLCB7J3NvdXJjZXMnOiB0dXBsZSgpfSldCisgICAgICAgIGNtZC5idWlsZF9saWJyYXJpZXMobGliKQorCisgICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBidWlsZF9jbGliKGRpc3QpCisKKyAgICAgICAgY21kLmluY2x1ZGVfZGlycyA9ICdvbmUtZGlyJworICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmluY2x1ZGVfZGlycywgWydvbmUtZGlyJ10pCisKKyAgICAgICAgY21kLmluY2x1ZGVfZGlycyA9IE5vbmUKKyAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5pbmNsdWRlX2RpcnMsIFtdKQorCisgICAgICAgIGNtZC5kaXN0cmlidXRpb24ubGlicmFyaWVzID0gJ1dPTlRXT1JLJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuZmluYWxpemVfb3B0aW9ucykKKworICAgIGRlZiB0ZXN0X3J1bihzZWxmKToKKyAgICAgICAgIyBjYW4ndCB0ZXN0IG9uIHdpbmRvd3MKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGJ1aWxkX2NsaWIoZGlzdCkKKworICAgICAgICBmb29fYyA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnZm9vLmMnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZm9vX2MsICdpbnQgbWFpbih2b2lkKSB7IHJldHVybiAxO31cbicpCisgICAgICAgIGNtZC5saWJyYXJpZXMgPSBbKCdmb28nLCB7J3NvdXJjZXMnOiBbZm9vX2NdfSldCisKKyAgICAgICAgYnVpbGRfdGVtcCA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnYnVpbGQnKQorICAgICAgICBvcy5ta2RpcihidWlsZF90ZW1wKQorICAgICAgICBjbWQuYnVpbGRfdGVtcCA9IGJ1aWxkX3RlbXAKKyAgICAgICAgY21kLmJ1aWxkX2NsaWIgPSBidWlsZF90ZW1wCisKKyAgICAgICAgIyBiZWZvcmUgd2UgcnVuIHRoZSBjb21tYW5kLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZQorICAgICAgICAjIGFsbCBjb21tYW5kcyBhcmUgcHJlc2VudCBvbiB0aGUgc3lzdGVtCisgICAgICAgICMgYnkgY3JlYXRpbmcgYSBjb21waWxlciBhbmQgY2hlY2tpbmcgaXRzIGV4ZWN1dGFibGVzCisgICAgICAgIGZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgbmV3X2NvbXBpbGVyLCBjdXN0b21pemVfY29tcGlsZXIKKworICAgICAgICBjb21waWxlciA9IG5ld19jb21waWxlcigpCisgICAgICAgIGN1c3RvbWl6ZV9jb21waWxlcihjb21waWxlcikKKyAgICAgICAgZm9yIGNjbWQgaW4gY29tcGlsZXIuZXhlY3V0YWJsZXMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBjY21kIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGZpbmRfZXhlY3V0YWJsZShjY21kWzBdKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiAjIGNhbid0IHRlc3QKKworICAgICAgICAjIHRoaXMgc2hvdWxkIHdvcmsKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBsZXQncyBjaGVjayB0aGUgcmVzdWx0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbGliZm9vLmEnIGluIG9zLmxpc3RkaXIoYnVpbGRfdGVtcCkpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZENMaWJUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9leHQucHkKaW5kZXggMWVkOWQwNC4uODY1NjhlYiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfZXh0LnB5CkBAIC0yMyw2ICsyMyw4IEBACiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc3lzY29uZmlnLnByb2plY3RfYmFzZSwgJ01vZHVsZXMnLCAneHhtb2R1bGUuYycpCiAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzcmNkaXIsICdNb2R1bGVzJywgJ3h4bW9kdWxlLmMnKQogCitfWFhfTU9EVUxFX1BBVEggPSBfZ2V0X3NvdXJjZV9maWxlbmFtZSgpCisKIGNsYXNzIEJ1aWxkRXh0VGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTMxLDEwICszMyw0MyBAQAogICAgICAgICAjIE5vdGUgdGhhdCB3ZSdyZSBtYWtpbmcgY2hhbmdlcyB0byBzeXMucGF0aAogICAgICAgICBzdXBlcihCdWlsZEV4dFRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCiAgICAgICAgIHNlbGYudG1wX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSJweXRob250ZXN0XyIpCi0gICAgICAgIHNlbGYuc3lzX3BhdGggPSBzeXMucGF0aFs6XQotICAgICAgICBzeXMucGF0aC5hcHBlbmQoc2VsZi50bXBfZGlyKQotICAgICAgICBzaHV0aWwuY29weShfZ2V0X3NvdXJjZV9maWxlbmFtZSgpLCBzZWxmLnRtcF9kaXIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKF9YWF9NT0RVTEVfUEFUSCk6CisgICAgICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgICAgIHN5cy5wYXRoLmFwcGVuZChzZWxmLnRtcF9kaXIpCisgICAgICAgICAgICBzaHV0aWwuY29weShfWFhfTU9EVUxFX1BBVEgsIHNlbGYudG1wX2RpcikKIAorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBHZXQgZXZlcnl0aGluZyBiYWNrIHRvIG5vcm1hbAorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhfWFhfTU9EVUxFX1BBVEgpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubG9hZCgneHgnKQorICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c19wYXRoCisgICAgICAgICAgICAjIFhYWCBvbiBXaW5kb3dzIHRoZSB0ZXN0IGxlYXZlcyBhIGRpcmVjdG9yeQorICAgICAgICAgICAgIyB3aXRoIHh4IG1vZHVsZSBpbiBURU1QCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50bXBfZGlyLCBvcy5uYW1lID09ICdudCcgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJykKKyAgICAgICAgc3VwZXIoQnVpbGRFeHRUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIF9maXh1cF9jb21tYW5kKHNlbGYsIGNtZCk6CisgICAgICAgICMgV2hlbiBQeXRob24gd2FzIGJ1aWxkIHdpdGggLS1lbmFibGUtc2hhcmVkLCAtTC4gaXMgbm90IGdvb2QgZW5vdWdoCisgICAgICAgICMgdG8gZmluZCB0aGUgbGlicHl0aG9uPGJsYWg+LnNvLiAgVGhpcyBpcyBiZWNhdXNlIHJlZ3J0ZXN0IHJ1bnMgaXQKKyAgICAgICAgIyB1bmRlciBhIHRlbXBkaXIsIG5vdCBpbiB0aGUgdG9wIGxldmVsIHdoZXJlIHRoZSAuc28gbGl2ZXMuICBCeSB0aGUKKyAgICAgICAgIyB0aW1lIHdlJ3ZlIGdvdHRlbiBoZXJlLCBQeXRob24ncyBhbHJlYWR5IGJlZW4gY2hkaXInZCB0byB0aGUKKyAgICAgICAgIyB0ZW1wZGlyLgorICAgICAgICAjCisgICAgICAgICMgVG8gZnVydGhlciBhZGQgdG8gdGhlIGZ1biwgd2UgY2FuJ3QganVzdCBhZGQgbGlicmFyeV9kaXJzIHRvIHRoZQorICAgICAgICAjIEV4dGVuc2lvbigpIGluc3RhbmNlIGJlY2F1c2UgdGhhdCBkb2Vzbid0IGdldCBwbHVtYmVkIHRocm91Z2ggdG8gdGhlCisgICAgICAgICMgZmluYWwgY29tcGlsZXIgY29tbWFuZC4KKyAgICAgICAgaWYgKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUHlfRU5BQkxFX1NIQVJFRCcpIGFuZAorICAgICAgICAgICAgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSk6CisgICAgICAgICAgICBydW5zaGFyZWQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1JVTlNIQVJFRCcpCisgICAgICAgICAgICBpZiBydW5zaGFyZWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjbWQubGlicmFyeV9kaXJzID0gWycuJ10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSwgZXF1YWxzLCB2YWx1ZSA9IHJ1bnNoYXJlZC5wYXJ0aXRpb24oJz0nKQorICAgICAgICAgICAgICAgIGNtZC5saWJyYXJ5X2RpcnMgPSB2YWx1ZS5zcGxpdChvcy5wYXRoc2VwKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgb3MucGF0aC5leGlzdHMoX1hYX01PRFVMRV9QQVRIKSwKKyAgICAgICAgICAgICAgICAgICAgICd4eG1vZHVsZS5jIG5vdCBmb3VuZCcpCiAgICAgZGVmIHRlc3RfYnVpbGRfZXh0KHNlbGYpOgogICAgICAgICBnbG9iYWwgQUxSRUFEWV9URVNURUQKICAgICAgICAgeHhfYyA9IG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICd4eG1vZHVsZS5jJykKQEAgLTQyLDYgKzc3LDcgQEAKICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnLCAnZXh0X21vZHVsZXMnOiBbeHhfZXh0XX0pCiAgICAgICAgIGRpc3QucGFja2FnZV9kaXIgPSBzZWxmLnRtcF9kaXIKICAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIHNlbGYuX2ZpeHVwX2NvbW1hbmQoY21kKQogICAgICAgICBpZiBvcy5uYW1lID09ICJudCI6CiAgICAgICAgICAgICAjIE9uIFdpbmRvd3MsIHdlIG11c3QgYnVpbGQgYSBkZWJ1ZyB2ZXJzaW9uIGlmZiBydW5uaW5nCiAgICAgICAgICAgICAjIGEgZGVidWcgYnVpbGQgb2YgUHl0aG9uCkBAIC02NywyMyArMTAzLDE1IEBACiAgICAgICAgIGltcG9ydCB4eAogCiAgICAgICAgIGZvciBhdHRyIGluICgnZXJyb3InLCAnZm9vJywgJ25ldycsICdyb2onKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKHh4LCBhdHRyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHh4LCBhdHRyKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4eC5mb28oMiwgNSksIDcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHh4LmZvbygxMywxNSksIDI4KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4eC5uZXcoKS5kZW1vKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeHguZm9vKDIsIDUpLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHh4LmZvbygxMywxNSksIDI4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHh4Lm5ldygpLmRlbW8oKSwgTm9uZSkKICAgICAgICAgZG9jID0gJ1RoaXMgaXMgYSB0ZW1wbGF0ZSBtb2R1bGUganVzdCBmb3IgaW5zdHJ1Y3Rpb24uJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4eC5fX2RvY19fLCBkb2MpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHh4Lk51bGwoKSwgeHguTnVsbCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHh4LlN0cigpLCB4eC5TdHIpKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAjIEdldCBldmVyeXRoaW5nIGJhY2sgdG8gbm9ybWFsCi0gICAgICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQoJ3h4JykKLSAgICAgICAgc3lzLnBhdGggPSBzZWxmLnN5c19wYXRoCi0gICAgICAgICMgWFhYIG9uIFdpbmRvd3MgdGhlIHRlc3QgbGVhdmVzIGEgZGlyZWN0b3J5IHdpdGggeHggbW9kdWxlIGluIFRFTVAKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRtcF9kaXIsIG9zLm5hbWUgPT0gJ250JyBvciBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbicpCi0gICAgICAgIHN1cGVyKEJ1aWxkRXh0VGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4eC5fX2RvY19fLCBkb2MpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHh4Lk51bGwoKSwgeHguTnVsbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHh4LlN0cigpLCB4eC5TdHIpKQogCiAgICAgZGVmIHRlc3Rfc29sYXJpc19lbmFibGVfc2hhcmVkKHNlbGYpOgogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCd9KQpAQCAtMTA0LDcgKzEzMiw3IEBACiAgICAgICAgICAgICAgICAgX2NvbmZpZ192YXJzWydQeV9FTkFCTEVfU0hBUkVEJ10gPSBvbGRfdmFyCiAKICAgICAgICAgIyBtYWtlIHN1cmUgd2UgZ2V0IHNvbWUgbGlicmFyeSBkaXJzIHVuZGVyIHNvbGFyaXMKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihjbWQubGlicmFyeV9kaXJzKSA+IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oY21kLmxpYnJhcnlfZGlycykgPiAwKQogCiAgICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgUHl0aG9uJ3MgaW5jbHVkZSBkaXJlY3RvcmllcyAoZm9yIFB5dGhvbi5oLCBweWNvbmZpZy5oLApAQCAtMTE2LDMxICsxNDQsMzEgQEAKIAogICAgICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiAgICAgICAgIHB5X2luY2x1ZGUgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMoKQotICAgICAgICBzZWxmLmFzc2VydF8ocHlfaW5jbHVkZSBpbiBjbWQuaW5jbHVkZV9kaXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHlfaW5jbHVkZSBpbiBjbWQuaW5jbHVkZV9kaXJzKQogCiAgICAgICAgIHBsYXRfcHlfaW5jbHVkZSA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhwbGF0X3B5X2luY2x1ZGUgaW4gY21kLmluY2x1ZGVfZGlycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBsYXRfcHlfaW5jbHVkZSBpbiBjbWQuaW5jbHVkZV9kaXJzKQogCiAgICAgICAgICMgbWFrZSBzdXJlIGNtZC5saWJyYXJpZXMgaXMgdHVybmVkIGludG8gYSBsaXN0CiAgICAgICAgICMgaWYgaXQncyBhIHN0cmluZwogICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLmxpYnJhcmllcyA9ICdteV9saWInCiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21kLmxpYnJhcmllcywgWydteV9saWInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQubGlicmFyaWVzLCBbJ215X2xpYiddKQogCiAgICAgICAgICMgbWFrZSBzdXJlIGNtZC5saWJyYXJ5X2RpcnMgaXMgdHVybmVkIGludG8gYSBsaXN0CiAgICAgICAgICMgaWYgaXQncyBhIHN0cmluZwogICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLmxpYnJhcnlfZGlycyA9ICdteV9saWJfZGlyJwogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnbXlfbGliX2RpcicgaW4gY21kLmxpYnJhcnlfZGlycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdteV9saWJfZGlyJyBpbiBjbWQubGlicmFyeV9kaXJzKQogCiAgICAgICAgICMgbWFrZSBzdXJlIHJwYXRoIGlzIHR1cm5lZCBpbnRvIGEgbGlzdAogICAgICAgICAjIGlmIGl0J3MgYSBsaXN0IG9mIG9zLnBhdGhzZXAncyBwYXRocwogICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLnJwYXRoID0gb3MucGF0aHNlcC5qb2luKFsnb25lJywgJ3R3byddKQogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtZC5ycGF0aCwgWydvbmUnLCAndHdvJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnJwYXRoLCBbJ29uZScsICd0d28nXSkKIAogICAgICAgICAjIFhYWCBtb3JlIHRlc3RzIHRvIHBlcmZvcm0gZm9yIHdpbjMyCiAKQEAgLTE0OSwyNSArMTc3LDI1IEBACiAgICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQogICAgICAgICBjbWQuZGVmaW5lID0gJ29uZSx0d28nCiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21kLmRlZmluZSwgWygnb25lJywgJzEnKSwgKCd0d28nLCAnMScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZGVmaW5lLCBbKCdvbmUnLCAnMScpLCAoJ3R3bycsICcxJyldKQogCiAgICAgICAgICMgbWFrZSBzdXJlIHVuZGVmIGlzIHR1cm5lZCBpbnRvIGEgbGlzdCBvZgogICAgICAgICAjIHN0cmluZ3MgaWYgdGhleSBhcmUgJywnLXNlcGFyYXRlZCBzdHJpbmdzCiAgICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQogICAgICAgICBjbWQudW5kZWYgPSAnb25lLHR3bycKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjbWQudW5kZWYsIFsnb25lJywgJ3R3byddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC51bmRlZiwgWydvbmUnLCAndHdvJ10pCiAKICAgICAgICAgIyBtYWtlIHN1cmUgc3dpZ19vcHRzIGlzIHR1cm5lZCBpbnRvIGEgbGlzdAogICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLnN3aWdfb3B0cyA9IE5vbmUKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjbWQuc3dpZ19vcHRzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuc3dpZ19vcHRzLCBbXSkKIAogICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLnN3aWdfb3B0cyA9ICcxIDInCiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21kLnN3aWdfb3B0cywgWycxJywgJzInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuc3dpZ19vcHRzLCBbJzEnLCAnMiddKQogCiAgICAgZGVmIHRlc3RfY2hlY2tfZXh0ZW5zaW9uc19saXN0KHNlbGYpOgogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKQEAgLTE5OCwxMyArMjI2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb21lJzogJ2Jhcid9KV0KICAgICAgICAgY21kLmNoZWNrX2V4dGVuc2lvbnNfbGlzdChleHRzKQogICAgICAgICBleHQgPSBleHRzWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGV4dCwgRXh0ZW5zaW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZXh0LCBFeHRlbnNpb24pKQogCiAgICAgICAgICMgY2hlY2tfZXh0ZW5zaW9uc19saXN0IGFkZHMgaW4gZXh0IHRoZSB2YWx1ZXMgcGFzc2VkCiAgICAgICAgICMgd2hlbiB0aGV5IGFyZSBpbiAoJ2luY2x1ZGVfZGlycycsICdsaWJyYXJ5X2RpcnMnLCAnbGlicmFyaWVzJwogICAgICAgICAjICdleHRyYV9vYmplY3RzJywgJ2V4dHJhX2NvbXBpbGVfYXJncycsICdleHRyYV9saW5rX2FyZ3MnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHQubGlicmFyaWVzLCAnZm9vJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBoYXNhdHRyKGV4dCwgJ3NvbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHQubGlicmFyaWVzLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGV4dCwgJ3NvbWUnKSkKIAogICAgICAgICAjICdtYWNyb3MnIGVsZW1lbnQgb2YgYnVpbGQgaW5mbyBkaWN0IG11c3QgYmUgMS0gb3IgMi10dXBsZQogICAgICAgICBleHRzID0gWygnZm9vLmJhcicsIHsnc291cmNlcyc6IFsnJ10sICdsaWJyYXJpZXMnOiAnZm9vJywKQEAgLTIxMywxNSArMjQxLDE1IEBACiAKICAgICAgICAgZXh0c1swXVsxXVsnbWFjcm9zJ10gPSBbKCcxJywgJzInKSwgKCczJywpXQogICAgICAgICBjbWQuY2hlY2tfZXh0ZW5zaW9uc19saXN0KGV4dHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4dHNbMF0udW5kZWZfbWFjcm9zLCBbJzMnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXh0c1swXS5kZWZpbmVfbWFjcm9zLCBbKCcxJywgJzInKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0c1swXS51bmRlZl9tYWNyb3MsIFsnMyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHNbMF0uZGVmaW5lX21hY3JvcywgWygnMScsICcyJyldKQogCiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZV9maWxlcyhzZWxmKToKICAgICAgICAgbW9kdWxlcyA9IFtFeHRlbnNpb24oJ2ZvbycsIFsneHh4J10pXQogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCcsICdleHRfbW9kdWxlcyc6IG1vZHVsZXN9KQogICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjbWQuZ2V0X3NvdXJjZV9maWxlcygpLCBbJ3h4eCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5nZXRfc291cmNlX2ZpbGVzKCksIFsneHh4J10pCiAKICAgICBkZWYgdGVzdF9jb21waWxlcl9vcHRpb24oc2VsZik6CiAgICAgICAgICMgY21kLmNvbXBpbGVyIGlzIGFuIG9wdGlvbiBhbmQKQEAgLTIzMiw3ICsyNjAsNyBAQAogICAgICAgICBjbWQuY29tcGlsZXIgPSAndW5peCcKICAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQogICAgICAgICBjbWQucnVuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21kLmNvbXBpbGVyLCAndW5peCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmNvbXBpbGVyLCAndW5peCcpCiAKICAgICBkZWYgdGVzdF9nZXRfb3V0cHV0cyhzZWxmKToKICAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCkBAIC0yNDIsOCArMjcwLDkgQEAKICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0X21vZHVsZXMnOiBbZXh0XX0pCiAgICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQorICAgICAgICBzZWxmLl9maXh1cF9jb21tYW5kKGNtZCkKICAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oY21kLmdldF9vdXRwdXRzKCkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbWQuZ2V0X291dHB1dHMoKSksIDEpCiAKICAgICAgICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgICAgICAgY21kLmRlYnVnID0gc3lzLmV4ZWN1dGFibGUuZW5kc3dpdGgoIl9kLmV4ZSIpCkBAIC0yNjIsMjAgKzI5MSwyMCBAQAogICAgICAgICAgICAgc29fZmlsZSA9IGNtZC5nZXRfb3V0cHV0cygpWzBdCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5jaGRpcihvbGRfd2QpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhzb19maWxlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3MucGF0aC5zcGxpdGV4dChzb19maWxlKVstMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNvX2ZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguc3BsaXRleHQoc29fZmlsZSlbLTFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSkKICAgICAgICAgc29fZGlyID0gb3MucGF0aC5kaXJuYW1lKHNvX2ZpbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNvX2Rpciwgb3RoZXJfdG1wX2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb19kaXIsIG90aGVyX3RtcF9kaXIpCiAgICAgICAgIGNtZC5jb21waWxlciA9IE5vbmUKICAgICAgICAgY21kLmlucGxhY2UgPSAwCiAgICAgICAgIGNtZC5ydW4oKQogICAgICAgICBzb19maWxlID0gY21kLmdldF9vdXRwdXRzKClbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKHNvX2ZpbGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcy5wYXRoLnNwbGl0ZXh0KHNvX2ZpbGUpWy0xXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc29fZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5zcGxpdGV4dChzb19maWxlKVstMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpKQogICAgICAgICBzb19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoc29fZmlsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc29fZGlyLCBjbWQuYnVpbGRfbGliKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvX2RpciwgY21kLmJ1aWxkX2xpYikKIAogICAgICAgICAjIGlucGxhY2UgPSAwLCBjbWQucGFja2FnZSA9ICdiYXInCiAgICAgICAgIGJ1aWxkX3B5ID0gY21kLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGRfcHknKQpAQCAtMjgzLDcgKzMxMiw3IEBACiAgICAgICAgIHBhdGggPSBjbWQuZ2V0X2V4dF9mdWxscGF0aCgnZm9vJykKICAgICAgICAgIyBjaGVja2luZyB0aGF0IHRoZSBsYXN0IGRpcmVjdG9yeSBpcyB0aGUgYnVpbGRfZGlyCiAgICAgICAgIHBhdGggPSBvcy5wYXRoLnNwbGl0KHBhdGgpWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhdGgsIGNtZC5idWlsZF9saWIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgY21kLmJ1aWxkX2xpYikKIAogICAgICAgICAjIGlucGxhY2UgPSAxLCBjbWQucGFja2FnZSA9ICdiYXInCiAgICAgICAgIGNtZC5pbnBsYWNlID0gMQpAQCAtMjk3LDcgKzMyNiw3IEBACiAgICAgICAgICMgY2hlY2tpbmcgdGhhdCB0aGUgbGFzdCBkaXJlY3RvcnkgaXMgYmFyCiAgICAgICAgIHBhdGggPSBvcy5wYXRoLnNwbGl0KHBhdGgpWzBdCiAgICAgICAgIGxhc3RkaXIgPSBvcy5wYXRoLnNwbGl0KHBhdGgpWy0xXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsYXN0ZGlyLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYXN0ZGlyLCAnYmFyJykKIAogICAgIGRlZiB0ZXN0X2V4dF9mdWxscGF0aChzZWxmKToKICAgICAgICAgZXh0ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygpWydTTyddCkBAIC0zMDksMTQgKzMzOCwxNCBAQAogICAgICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQogICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCAnc3JjJywgJ2x4bWwnLCAnZXRyZWUnICsgZXh0KQogICAgICAgICBwYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoJ2x4bWwuZXRyZWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh3YW50ZWQsIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FudGVkLCBwYXRoKQogCiAgICAgICAgICMgYnVpbGRpbmcgbHhtbC5ldHJlZSBub3QgaW5wbGFjZQogICAgICAgICBjbWQuaW5wbGFjZSA9IDAKICAgICAgICAgY21kLmJ1aWxkX2xpYiA9IG9zLnBhdGguam9pbihjdXJkaXIsICd0bXBkaXInKQogICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCAndG1wZGlyJywgJ2x4bWwnLCAnZXRyZWUnICsgZXh0KQogICAgICAgICBwYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoJ2x4bWwuZXRyZWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh3YW50ZWQsIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FudGVkLCBwYXRoKQogCiAgICAgICAgICMgYnVpbGRpbmcgdHdpc3RlZC5ydW5uZXIucG9ydG1hcCBub3QgaW5wbGFjZQogICAgICAgICBidWlsZF9weSA9IGNtZC5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2J1aWxkX3B5JykKQEAgLTMyNSwxMyArMzU0LDEzIEBACiAgICAgICAgIHBhdGggPSBjbWQuZ2V0X2V4dF9mdWxscGF0aCgndHdpc3RlZC5ydW5uZXIucG9ydG1hcCcpCiAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjdXJkaXIsICd0bXBkaXInLCAndHdpc3RlZCcsICdydW5uZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvcnRtYXAnICsgZXh0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh3YW50ZWQsIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FudGVkLCBwYXRoKQogCiAgICAgICAgICMgYnVpbGRpbmcgdHdpc3RlZC5ydW5uZXIucG9ydG1hcCBpbnBsYWNlCiAgICAgICAgIGNtZC5pbnBsYWNlID0gMQogICAgICAgICBwYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoJ3R3aXN0ZWQucnVubmVyLnBvcnRtYXAnKQogICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCAndHdpc3RlZCcsICdydW5uZXInLCAncG9ydG1hcCcgKyBleHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHdhbnRlZCwgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YW50ZWQsIHBhdGgpCiAKICAgICBkZWYgdGVzdF9idWlsZF9leHRfaW5wbGFjZShzZWxmKToKICAgICAgICAgZXRyZWVfYyA9IG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdseG1sLmV0cmVlLmMnKQpAQCAtMzQ2LDMwICszNzUsMzcgQEAKICAgICAgICAgZXh0ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJTTyIpCiAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjdXJkaXIsICdzcmMnLCAnbHhtbCcsICdldHJlZScgKyBleHQpCiAgICAgICAgIHBhdGggPSBjbWQuZ2V0X2V4dF9mdWxscGF0aCgnbHhtbC5ldHJlZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHdhbnRlZCwgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YW50ZWQsIHBhdGgpCiAKICAgICBkZWYgdGVzdF9zZXR1cHRvb2xzX2NvbXBhdChzZWxmKToKKyAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb3JlLCBkaXN0dXRpbHMuZXh0ZW5zaW9uLCBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHQKKyAgICAgICAgc2F2ZWRfZXh0ID0gZGlzdHV0aWxzLmV4dGVuc2lvbi5FeHRlbnNpb24KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBvbiBzb21lIHBsYXRmb3JtcywgaXQgbG9hZHMgdGhlIGRlcHJlY2F0ZWQgImRsIiBtb2R1bGUKICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdzZXR1cHRvb2xzX2J1aWxkX2V4dCcsIGRlcHJlY2F0ZWQ9VHJ1ZSkKLSAgICAgICAgZXhjZXB0IHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZDoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBmcm9tIHNldHVwdG9vbHNfYnVpbGRfZXh0IGltcG9ydCBidWlsZF9leHQgYXMgc2V0dXB0b29sc19idWlsZF9leHQKLSAgICAgICAgZnJvbSBzZXR1cHRvb2xzX2V4dGVuc2lvbiBpbXBvcnQgRXh0ZW5zaW9uCiAKLSAgICAgICAgZXRyZWVfYyA9IG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdseG1sLmV0cmVlLmMnKQotICAgICAgICBldHJlZV9leHQgPSBFeHRlbnNpb24oJ2x4bWwuZXRyZWUnLCBbZXRyZWVfY10pCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ2x4bWwnLCAnZXh0X21vZHVsZXMnOiBbZXRyZWVfZXh0XX0pCi0gICAgICAgIGNtZCA9IHNldHVwdG9vbHNfYnVpbGRfZXh0KGRpc3QpCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLmlucGxhY2UgPSAxCi0gICAgICAgIGNtZC5kaXN0cmlidXRpb24ucGFja2FnZV9kaXIgPSB7Jyc6ICdzcmMnfQotICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnBhY2thZ2VzID0gWydseG1sJywgJ2x4bWwuaHRtbCddCi0gICAgICAgIGN1cmRpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIGV4dCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiU08iKQotICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCAnc3JjJywgJ2x4bWwnLCAnZXRyZWUnICsgZXh0KQotICAgICAgICBwYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoJ2x4bWwuZXRyZWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh3YW50ZWQsIHBhdGgpCisgICAgICAgICAgICAjIHRoZXNlcyBpbXBvcnQgcGF0Y2ggRGlzdHV0aWxzJyBFeHRlbnNpb24gY2xhc3MKKyAgICAgICAgICAgIGZyb20gc2V0dXB0b29sc19idWlsZF9leHQgaW1wb3J0IGJ1aWxkX2V4dCBhcyBzZXR1cHRvb2xzX2J1aWxkX2V4dAorICAgICAgICAgICAgZnJvbSBzZXR1cHRvb2xzX2V4dGVuc2lvbiBpbXBvcnQgRXh0ZW5zaW9uCisKKyAgICAgICAgICAgIGV0cmVlX2MgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAnbHhtbC5ldHJlZS5jJykKKyAgICAgICAgICAgIGV0cmVlX2V4dCA9IEV4dGVuc2lvbignbHhtbC5ldHJlZScsIFtldHJlZV9jXSkKKyAgICAgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ2x4bWwnLCAnZXh0X21vZHVsZXMnOiBbZXRyZWVfZXh0XX0pCisgICAgICAgICAgICBjbWQgPSBzZXR1cHRvb2xzX2J1aWxkX2V4dChkaXN0KQorICAgICAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICAgICAgY21kLmlucGxhY2UgPSAxCisgICAgICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnBhY2thZ2VfZGlyID0geycnOiAnc3JjJ30KKyAgICAgICAgICAgIGNtZC5kaXN0cmlidXRpb24ucGFja2FnZXMgPSBbJ2x4bWwnLCAnbHhtbC5odG1sJ10KKyAgICAgICAgICAgIGN1cmRpciA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBleHQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlNPIikKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjdXJkaXIsICdzcmMnLCAnbHhtbCcsICdldHJlZScgKyBleHQpCisgICAgICAgICAgICBwYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoJ2x4bWwuZXRyZWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YW50ZWQsIHBhdGgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIHJlc3RvcmluZyBEaXN0dXRpbHMnIEV4dGVuc2lvbiBjbGFzcyBvdGhlcndpc2UgaXRzIGJyb2tlbgorICAgICAgICAgICAgZGlzdHV0aWxzLmV4dGVuc2lvbi5FeHRlbnNpb24gPSBzYXZlZF9leHQKKyAgICAgICAgICAgIGRpc3R1dGlscy5jb3JlLkV4dGVuc2lvbiA9IHNhdmVkX2V4dAorICAgICAgICAgICAgZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0LkV4dGVuc2lvbiA9IHNhdmVkX2V4dAogCiAgICAgZGVmIHRlc3RfYnVpbGRfZXh0X3BhdGhfd2l0aF9vc19zZXAoc2VsZik6CiAgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ1VwZGF0ZU1hbmFnZXInfSkKQEAgLTM3OSw3ICs0MTUsNyBAQAogICAgICAgICBleHRfbmFtZSA9IG9zLnBhdGguam9pbignVXBkYXRlTWFuYWdlcicsICdmZHNlbmQnKQogICAgICAgICBleHRfcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKGV4dF9uYW1lKQogICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY21kLmJ1aWxkX2xpYiwgJ1VwZGF0ZU1hbmFnZXInLCAnZmRzZW5kJyArIGV4dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXh0X3BhdGgsIHdhbnRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRfcGF0aCwgd2FudGVkKQogCiAgICAgZGVmIHRlc3RfYnVpbGRfZXh0X3BhdGhfY3Jvc3NfcGxhdGZvcm0oc2VsZik6CiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgpAQCAtMzkyLDE2ICs0MjgsMTAgQEAKICAgICAgICAgZXh0X25hbWUgPSAnVXBkYXRlTWFuYWdlci9mZHNlbmQnCiAgICAgICAgIGV4dF9wYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoZXh0X25hbWUpCiAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjbWQuYnVpbGRfbGliLCAnVXBkYXRlTWFuYWdlcicsICdmZHNlbmQnICsgZXh0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHRfcGF0aCwgd2FudGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dF9wYXRoLCB3YW50ZWQpCiAKIGRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgc3JjID0gX2dldF9zb3VyY2VfZmlsZW5hbWUoKQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzcmMpOgotICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgIHByaW50ICgndGVzdF9idWlsZF9leHQ6IENhbm5vdCBmaW5kIHNvdXJjZSBjb2RlICh0ZXN0JwotICAgICAgICAgICAgICAgICAgICcgbXVzdCBydW4gaW4gcHl0aG9uIGJ1aWxkIGRpciknKQotICAgICAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICBlbHNlOiByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEJ1aWxkRXh0VGVzdENhc2UpCisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZEV4dFRlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CmluZGV4IDRhMDU0ZjIuLjkzN2ZhMGMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKQEAgLTEwLDIwICsxMCwyNSBAQAogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNGaWxlRXJyb3IKIAogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiAKIGNsYXNzIEJ1aWxkUHlUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAogICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiB0ZXN0X3BhY2thZ2VfZGF0YShzZWxmKToKKyAgICBkZWYgX3NldHVwX3BhY2thZ2VfZGF0YShzZWxmKToKICAgICAgICAgc291cmNlcyA9IHNlbGYubWtkdGVtcCgpCiAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzb3VyY2VzLCAiX19pbml0X18ucHkiKSwgInciKQotICAgICAgICBmLndyaXRlKCIjIFByZXRlbmQgdGhpcyBpcyBhIHBhY2thZ2UuIikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoIiMgUHJldGVuZCB0aGlzIGlzIGEgcGFja2FnZS4iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzb3VyY2VzLCAiUkVBRE1FLnR4dCIpLCAidyIpCi0gICAgICAgIGYud3JpdGUoIkluZm8gYWJvdXQgdGhpcyBwYWNrYWdlIikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoIkluZm8gYWJvdXQgdGhpcyBwYWNrYWdlIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgICAgIGRlc3RpbmF0aW9uID0gc2VsZi5ta2R0ZW1wKCkKIApAQCAtNTIsOSArNTcsMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY21kLmdldF9vdXRwdXRzKCkpLCAzKQogICAgICAgICBwa2dkZXN0ID0gb3MucGF0aC5qb2luKGRlc3RpbmF0aW9uLCAicGtnIikKICAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKHBrZ2Rlc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiX19pbml0X18ucHkiIGluIGZpbGVzKQotICAgICAgICBzZWxmLmFzc2VydF8oIl9faW5pdF9fLnB5YyIgaW4gZmlsZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiUkVBRE1FLnR4dCIgaW4gZmlsZXMpCisgICAgICAgIHJldHVybiBmaWxlcworCisgICAgZGVmIHRlc3RfcGFja2FnZV9kYXRhKHNlbGYpOgorICAgICAgICBmaWxlcyA9IHNlbGYuX3NldHVwX3BhY2thZ2VfZGF0YSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiX19pbml0X18ucHkiIGluIGZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIlJFQURNRS50eHQiIGluIGZpbGVzKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJweWMgZmlsZXMgYXJlIG5vdCB3cml0dGVuIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcGFja2FnZV9kYXRhX3B5YyhzZWxmKToKKyAgICAgICAgZmlsZXMgPSBzZWxmLl9zZXR1cF9wYWNrYWdlX2RhdGEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIl9faW5pdF9fLnB5YyIgaW4gZmlsZXMpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9wYWNrYWdlX2RpciAoc2VsZik6CiAgICAgICAgICMgU2VlIFNGIDE2Njg1OTYvMTcyMDg5Ny4KQEAgLTExMCw0ICsxMjQsNCBAQAogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRQeVRlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfc2NyaXB0cy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9zY3JpcHRzLnB5CmluZGV4IGI1NWViNTguLjRkYTkzY2MgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9zY3JpcHRzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9zY3JpcHRzLnB5CkBAIC01LDkgKzUsMTAgQEAKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9zY3JpcHRzIGltcG9ydCBidWlsZF9zY3JpcHRzCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KLWZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKK2ltcG9ydCBzeXNjb25maWcKIAogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiAKIGNsYXNzIEJ1aWxkU2NyaXB0c1Rlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCkBAIC0xNiwxMiArMTcsMTIgQEAKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfc2V0dGluZ3Moc2VsZik6CiAgICAgICAgIGNtZCA9IHNlbGYuZ2V0X2J1aWxkX3NjcmlwdHNfY21kKCIvZm9vL2JhciIsIFtdKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNtZC5mb3JjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNtZC5idWlsZF9kaXIgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjbWQuZm9yY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWQuYnVpbGRfZGlyIGlzIE5vbmUpCiAKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWQuZm9yY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWQuZm9yY2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmJ1aWxkX2RpciwgIi9mb28vYmFyIikKIAogICAgIGRlZiB0ZXN0X2J1aWxkKHNlbGYpOgpAQCAtMzcsNyArMzgsNyBAQAogCiAgICAgICAgIGJ1aWx0ID0gb3MubGlzdGRpcih0YXJnZXQpCiAgICAgICAgIGZvciBuYW1lIGluIGV4cGVjdGVkOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5hbWUgaW4gYnVpbHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobmFtZSBpbiBidWlsdCkKIAogICAgIGRlZiBnZXRfYnVpbGRfc2NyaXB0c19jbWQoc2VsZiwgdGFyZ2V0LCBzY3JpcHRzKToKICAgICAgICAgaW1wb3J0IHN5cwpAQCAtNzEsOCArNzIsMTAgQEAKIAogICAgIGRlZiB3cml0ZV9zY3JpcHQoc2VsZiwgZGlyLCBuYW1lLCB0ZXh0KToKICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKGRpciwgbmFtZSksICJ3IikKLSAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2ludChzZWxmKToKICAgICAgICAgc291cmNlID0gc2VsZi5ta2R0ZW1wKCkKQEAgLTkxLDE5ICs5NCwxOSBAQAogICAgICAgICAjIC0td2l0aC1zdWZmaXg9M2AsIHB5dGhvbiBpcyBjb21waWxlZCBva2F5IGJ1dCB0aGUgYnVpbGQgc2NyaXB0cwogICAgICAgICAjIGZhaWxlZCB3aGVuIHdyaXRpbmcgdGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUKICAgICAgICAgb2xkID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygpLmdldCgnVkVSU0lPTicpCi0gICAgICAgIHN5c2NvbmZpZy5fY29uZmlnX3ZhcnNbJ1ZFUlNJT04nXSA9IDQKKyAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSU1snVkVSU0lPTiddID0gNAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjbWQucnVuKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIG9sZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzeXNjb25maWcuX2NvbmZpZ192YXJzWydWRVJTSU9OJ10gPSBvbGQKKyAgICAgICAgICAgICAgICBzeXNjb25maWcuX0NPTkZJR19WQVJTWydWRVJTSU9OJ10gPSBvbGQKIAogICAgICAgICBidWlsdCA9IG9zLmxpc3RkaXIodGFyZ2V0KQogICAgICAgICBmb3IgbmFtZSBpbiBleHBlY3RlZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhuYW1lIGluIGJ1aWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgaW4gYnVpbHQpCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZFNjcmlwdHNUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Njb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jY29tcGlsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIxODczZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jY29tcGlsZXIucHkKQEAgLTAsMCArMSw4MSBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jY29tcGlsZXIuIiIiCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0CisKK2Zyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgKGdlbl9saWJfb3B0aW9ucywgQ0NvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2RlZmF1bHRfY29tcGlsZXIsIGN1c3RvbWl6ZV9jb21waWxlcikKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBkZWJ1ZworZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKKworY2xhc3MgRmFrZUNvbXBpbGVyKG9iamVjdCk6CisgICAgZGVmIGxpYnJhcnlfZGlyX29wdGlvbihzZWxmLCBkaXIpOgorICAgICAgICByZXR1cm4gIi1MIiArIGRpcgorCisgICAgZGVmIHJ1bnRpbWVfbGlicmFyeV9kaXJfb3B0aW9uKHNlbGYsIGRpcik6CisgICAgICAgIHJldHVybiBbIi1jb29sIiwgIi1SIiArIGRpcl0KKworICAgIGRlZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCBkaXJzLCBsaWIsIGRlYnVnPTApOgorICAgICAgICByZXR1cm4gJ2ZvdW5kJworCisgICAgZGVmIGxpYnJhcnlfb3B0aW9uKHNlbGYsIGxpYik6CisgICAgICAgIHJldHVybiAiLWwiICsgbGliCisKK2NsYXNzIENDb21waWxlclRlc3RDYXNlKHN1cHBvcnQuRW52aXJvbkd1YXJkLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9nZW5fbGliX29wdGlvbnMoc2VsZik6CisgICAgICAgIGNvbXBpbGVyID0gRmFrZUNvbXBpbGVyKCkKKyAgICAgICAgbGliZGlycyA9IFsnbGliMScsICdsaWIyJ10KKyAgICAgICAgcnVubGliZGlycyA9IFsncnVubGliMSddCisgICAgICAgIGxpYnMgPSBbb3MucGF0aC5qb2luKCdkaXInLCAnbmFtZScpLCAnbmFtZTInXQorCisgICAgICAgIG9wdHMgPSBnZW5fbGliX29wdGlvbnMoY29tcGlsZXIsIGxpYmRpcnMsIHJ1bmxpYmRpcnMsIGxpYnMpCisgICAgICAgIHdhbnRlZCA9IFsnLUxsaWIxJywgJy1MbGliMicsICctY29vbCcsICctUnJ1bmxpYjEnLCAnZm91bmQnLAorICAgICAgICAgICAgICAgICAgJy1sbmFtZTInXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIHdhbnRlZCkKKworICAgIGRlZiB0ZXN0X2RlYnVnX3ByaW50KHNlbGYpOgorCisgICAgICAgIGNsYXNzIE15Q0NvbXBpbGVyKENDb21waWxlcik6CisgICAgICAgICAgICBleGVjdXRhYmxlcyA9IHt9CisKKyAgICAgICAgY29tcGlsZXIgPSBNeUNDb21waWxlcigpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgY29tcGlsZXIuZGVidWdfcHJpbnQoJ3h4eCcpCisgICAgICAgIHN0ZG91dC5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJlYWQoKSwgJycpCisKKyAgICAgICAgZGVidWcuREVCVUcgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgICAgIGNvbXBpbGVyLmRlYnVnX3ByaW50KCd4eHgnKQorICAgICAgICAgICAgc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJlYWQoKSwgJ3h4eFxuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlYnVnLkRFQlVHID0gRmFsc2UKKworICAgIGRlZiB0ZXN0X2N1c3RvbWl6ZV9jb21waWxlcihzZWxmKToKKworICAgICAgICAjIG5vdCB0ZXN0aW5nIGlmIGRlZmF1bHQgY29tcGlsZXIgaXMgbm90IHVuaXgKKyAgICAgICAgaWYgZ2V0X2RlZmF1bHRfY29tcGlsZXIoKSAhPSAndW5peCc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvcy5lbnZpcm9uWydBUiddID0gJ215X2FyJworICAgICAgICBvcy5lbnZpcm9uWydBUkZMQUdTJ10gPSAnLWFyZmxhZ3MnCisKKyAgICAgICAgIyBtYWtlIHN1cmUgQVIgZ2V0cyBjYXVnaHQKKyAgICAgICAgY2xhc3MgY29tcGlsZXI6CisgICAgICAgICAgICBjb21waWxlcl90eXBlID0gJ3VuaXgnCisKKyAgICAgICAgICAgIGRlZiBzZXRfZXhlY3V0YWJsZXMoc2VsZiwgKiprdyk6CisgICAgICAgICAgICAgICAgc2VsZi5leGVzID0ga3cKKworICAgICAgICBjb21wID0gY29tcGlsZXIoKQorICAgICAgICBjdXN0b21pemVfY29tcGlsZXIoY29tcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wLmV4ZXNbJ2FyY2hpdmVyJ10sICdteV9hciAtYXJmbGFncycpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShDQ29tcGlsZXJUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jaGVjay5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jaGVjay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWE4M2RjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NoZWNrLnB5CkBAIC0wLDAgKzEsOTkgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5jaGVjay4iIiIKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2Zyb20gZGlzdHV0aWxzLmNvbW1hbmQuY2hlY2sgaW1wb3J0IGNoZWNrLCBIQVNfRE9DVVRJTFMKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1NldHVwRXJyb3IKKworY2xhc3MgQ2hlY2tUZXN0Q2FzZShzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9ydW4oc2VsZiwgbWV0YWRhdGE9Tm9uZSwgKipvcHRpb25zKToKKyAgICAgICAgaWYgbWV0YWRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIG1ldGFkYXRhID0ge30KKyAgICAgICAgcGtnX2luZm8sIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCoqbWV0YWRhdGEpCisgICAgICAgIGNtZCA9IGNoZWNrKGRpc3QpCisgICAgICAgIGNtZC5pbml0aWFsaXplX29wdGlvbnMoKQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gb3B0aW9ucy5pdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihjbWQsIG5hbWUsIHZhbHVlKQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorICAgICAgICByZXR1cm4gY21kCisKKyAgICBkZWYgdGVzdF9jaGVja19tZXRhZGF0YShzZWxmKToKKyAgICAgICAgIyBsZXQncyBydW4gdGhlIGNvbW1hbmQgd2l0aCBubyBtZXRhZGF0YSBhdCBhbGwKKyAgICAgICAgIyBieSBkZWZhdWx0LCBjaGVjayBpcyBjaGVja2luZyB0aGUgbWV0YWRhdGEKKyAgICAgICAgIyBzaG91bGQgaGF2ZSBzb21lIHdhcm5pbmdzCisgICAgICAgIGNtZCA9IHNlbGYuX3J1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLl93YXJuaW5ncywgMikKKworICAgICAgICAjIG5vdyBsZXQncyBhZGQgdGhlIHJlcXVpcmVkIGZpZWxkcworICAgICAgICAjIGFuZCBydW4gaXQgYWdhaW4sIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQKKyAgICAgICAgIyBhbnkgd2FybmluZyBhbnltb3JlCisgICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnLAorICAgICAgICAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ3h4eCcsCisgICAgICAgICAgICAgICAgICAgICduYW1lJzogJ3h4eCcsICd2ZXJzaW9uJzogJ3h4eCd9CisgICAgICAgIGNtZCA9IHNlbGYuX3J1bihtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuX3dhcm5pbmdzLCAwKQorCisgICAgICAgICMgbm93IHdpdGggdGhlIHN0cmljdCBtb2RlLCB3ZSBzaG91bGQKKyAgICAgICAgIyBnZXQgYW4gZXJyb3IgaWYgdGhlcmUgYXJlIG1pc3NpbmcgbWV0YWRhdGEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgc2VsZi5fcnVuLCB7fSwgKip7J3N0cmljdCc6IDF9KQorCisgICAgICAgICMgYW5kIG9mIGNvdXJzZSwgbm8gZXJyb3Igd2hlbiBhbGwgbWV0YWRhdGEgYXJlIHByZXNlbnQKKyAgICAgICAgY21kID0gc2VsZi5fcnVuKG1ldGFkYXRhLCBzdHJpY3Q9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuX3dhcm5pbmdzLCAwKQorCisgICAgZGVmIHRlc3RfY2hlY2tfZG9jdW1lbnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBIQVNfRE9DVVRJTFM6ICMgd29uJ3QgdGVzdCB3aXRob3V0IGRvY3V0aWxzCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcGtnX2luZm8sIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gY2hlY2soZGlzdCkKKworICAgICAgICAjIGxldCdzIHNlZSBpZiBpdCBkZXRlY3RzIGJyb2tlbiByZXN0CisgICAgICAgIGJyb2tlbl9yZXN0ID0gJ3RpdGxlXG49PT1cblxudGVzdCcKKyAgICAgICAgbXNncyA9IGNtZC5fY2hlY2tfcnN0X2RhdGEoYnJva2VuX3Jlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1zZ3MpLCAxKQorCisgICAgICAgICMgYW5kIG5vbi1icm9rZW4gcmVzdAorICAgICAgICByZXN0ID0gJ3RpdGxlXG49PT09PVxuXG50ZXN0JworICAgICAgICBtc2dzID0gY21kLl9jaGVja19yc3RfZGF0YShyZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtc2dzKSwgMCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX3Jlc3RydWN0dXJlZHRleHQoc2VsZik6CisgICAgICAgIGlmIG5vdCBIQVNfRE9DVVRJTFM6ICMgd29uJ3QgdGVzdCB3aXRob3V0IGRvY3V0aWxzCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBsZXQncyBzZWUgaWYgaXQgZGV0ZWN0cyBicm9rZW4gcmVzdCBpbiBsb25nX2Rlc2NyaXB0aW9uCisgICAgICAgIGJyb2tlbl9yZXN0ID0gJ3RpdGxlXG49PT1cblxudGVzdCcKKyAgICAgICAgcGtnX2luZm8sIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KGxvbmdfZGVzY3JpcHRpb249YnJva2VuX3Jlc3QpCisgICAgICAgIGNtZCA9IGNoZWNrKGRpc3QpCisgICAgICAgIGNtZC5jaGVja19yZXN0cnVjdHVyZWR0ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuX3dhcm5pbmdzLCAxKQorCisgICAgICAgICMgbGV0J3Mgc2VlIGlmIHdlIGhhdmUgYW4gZXJyb3Igd2l0aCBzdHJpY3Q9MQorICAgICAgICBtZXRhZGF0YSA9IHsndXJsJzogJ3h4eCcsICdhdXRob3InOiAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICd4eHgnLAorICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICd4eHgnLCAndmVyc2lvbic6ICd4eHgnLAorICAgICAgICAgICAgICAgICAgICAnbG9uZ19kZXNjcmlwdGlvbic6IGJyb2tlbl9yZXN0fQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBzZWxmLl9ydW4sIG1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAqKnsnc3RyaWN0JzogMSwgJ3Jlc3RydWN0dXJlZHRleHQnOiAxfSkKKworICAgICAgICAjIGFuZCBub24tYnJva2VuIHJlc3QKKyAgICAgICAgbWV0YWRhdGFbJ2xvbmdfZGVzY3JpcHRpb24nXSA9ICd0aXRsZVxuPT09PT1cblxudGVzdCcKKyAgICAgICAgY21kID0gc2VsZi5fcnVuKG1ldGFkYXRhLCBzdHJpY3Q9MSwgcmVzdHJ1Y3R1cmVkdGV4dD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5fd2FybmluZ3MsIDApCisKKyAgICBkZWYgdGVzdF9jaGVja19hbGwoc2VsZik6CisKKyAgICAgICAgbWV0YWRhdGEgPSB7J3VybCc6ICd4eHgnLCAnYXV0aG9yJzogJ3h4eCd9CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIHNlbGYuX3J1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAge30sICoqeydzdHJpY3QnOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3RydWN0dXJlZHRleHQnOiAxfSkKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKENoZWNrVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jbGVhbi5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jbGVhbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDE2MTBkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NsZWFuLnB5CkBAIC0wLDAgKzEsNTEgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5jbGVhbi4iIiIKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgZ2V0cGFzcworCitmcm9tIGRpc3R1dGlscy5jb21tYW5kLmNsZWFuIGltcG9ydCBjbGVhbgorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitjbGFzcyBjbGVhblRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcnVuKHNlbGYpOgorICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGNsZWFuKGRpc3QpCisKKyAgICAgICAgIyBsZXQncyBhZGQgc29tZSBlbGVtZW50cyBjbGVhbiBzaG91bGQgcmVtb3ZlCisgICAgICAgIGRpcnMgPSBbKGQsIG9zLnBhdGguam9pbihwa2dfZGlyLCBkKSkKKyAgICAgICAgICAgICAgICBmb3IgZCBpbiAoJ2J1aWxkX3RlbXAnLCAnYnVpbGRfbGliJywgJ2JkaXN0X2Jhc2UnLAorICAgICAgICAgICAgICAgICdidWlsZF9zY3JpcHRzJywgJ2J1aWxkX2Jhc2UnKV0KKworICAgICAgICBmb3IgbmFtZSwgcGF0aCBpbiBkaXJzOgorICAgICAgICAgICAgb3MubWtkaXIocGF0aCkKKyAgICAgICAgICAgIHNldGF0dHIoY21kLCBuYW1lLCBwYXRoKQorICAgICAgICAgICAgaWYgbmFtZSA9PSAnYnVpbGRfYmFzZSc6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBmIGluICgnb25lJywgJ3R3bycsICd0aHJlZScpOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfZmlsZShvcy5wYXRoLmpvaW4ocGF0aCwgZikpCisKKyAgICAgICAgIyBsZXQncyBydW4gdGhlIGNvbW1hbmQKKyAgICAgICAgY21kLmFsbCA9IDEKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgZmlsZXMgd2hlcmUgcmVtb3ZlZAorICAgICAgICBmb3IgbmFtZSwgcGF0aCBpbiBkaXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJXMgd2FzIG5vdCByZW1vdmVkJyAlIHBhdGgpCisKKyAgICAgICAgIyBsZXQncyBydW4gdGhlIGNvbW1hbmQgYWdhaW4gKHNob3VsZCBzcGl0IHdhcm5pbmdzIGJ1dCBzdWNlZWQpCisgICAgICAgIGNtZC5hbGwgPSAxCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShjbGVhblRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY21kLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NtZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDc0MDk5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NtZC5weQpAQCAtMCwwICsxLDEyNyBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jbWQuIiIiCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0LCBydW5fdW5pdHRlc3QKKworZnJvbSBkaXN0dXRpbHMuY21kIGltcG9ydCBDb21tYW5kCitmcm9tIGRpc3R1dGlscy5kaXN0IGltcG9ydCBEaXN0cmlidXRpb24KK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzT3B0aW9uRXJyb3IKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBkZWJ1ZworCitjbGFzcyBNeUNtZChDb21tYW5kKToKKyAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgorICAgICAgICBwYXNzCisKK2NsYXNzIENvbW1hbmRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQorICAgICAgICBzZWxmLmNtZCA9IE15Q21kKGRpc3QpCisKKyAgICBkZWYgdGVzdF9lbnN1cmVfc3RyaW5nX2xpc3Qoc2VsZik6CisKKyAgICAgICAgY21kID0gc2VsZi5jbWQKKyAgICAgICAgY21kLm5vdF9zdHJpbmdfbGlzdCA9IFsnb25lJywgMiwgJ3RocmVlJ10KKyAgICAgICAgY21kLnllc19zdHJpbmdfbGlzdCA9IFsnb25lJywgJ3R3bycsICd0aHJlZSddCisgICAgICAgIGNtZC5ub3Rfc3RyaW5nX2xpc3QyID0gb2JqZWN0KCkKKyAgICAgICAgY21kLnllc19zdHJpbmdfbGlzdDIgPSAnb2snCisgICAgICAgIGNtZC5lbnN1cmVfc3RyaW5nX2xpc3QoJ3llc19zdHJpbmdfbGlzdCcpCisgICAgICAgIGNtZC5lbnN1cmVfc3RyaW5nX2xpc3QoJ3llc19zdHJpbmdfbGlzdDInKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc09wdGlvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQuZW5zdXJlX3N0cmluZ19saXN0LCAnbm90X3N0cmluZ19saXN0JykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLmVuc3VyZV9zdHJpbmdfbGlzdCwgJ25vdF9zdHJpbmdfbGlzdDInKQorCisgICAgZGVmIHRlc3RfbWFrZV9maWxlKHNlbGYpOgorCisgICAgICAgIGNtZCA9IHNlbGYuY21kCisKKyAgICAgICAgIyBtYWtpbmcgc3VyZSBpdCByYWlzZXMgd2hlbiBpbmZpbGVzIGlzIG5vdCBhIHN0cmluZyBvciBhIGxpc3QvdHVwbGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbWQubWFrZV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZpbGVzPTEsIG91dGZpbGU9JycsIGZ1bmM9J2Z1bmMnLCBhcmdzPSgpKQorCisgICAgICAgICMgbWFraW5nIHN1cmUgZXhlY3V0ZSBnZXRzIGNhbGxlZCBwcm9wZXJseQorICAgICAgICBkZWYgX2V4ZWN1dGUoZnVuYywgYXJncywgZXhlY19tc2csIGxldmVsKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhlY19tc2csICdnZW5lcmF0aW5nIG91dCBmcm9tIGluJykKKyAgICAgICAgY21kLmZvcmNlID0gVHJ1ZQorICAgICAgICBjbWQuZXhlY3V0ZSA9IF9leGVjdXRlCisgICAgICAgIGNtZC5tYWtlX2ZpbGUoaW5maWxlcz0naW4nLCBvdXRmaWxlPSdvdXQnLCBmdW5jPSdmdW5jJywgYXJncz0oKSkKKworICAgIGRlZiB0ZXN0X2R1bXBfb3B0aW9ucyhzZWxmKToKKworICAgICAgICBtc2dzID0gW10KKyAgICAgICAgZGVmIF9hbm5vdW5jZShtc2csIGxldmVsKToKKyAgICAgICAgICAgIG1zZ3MuYXBwZW5kKG1zZykKKyAgICAgICAgY21kID0gc2VsZi5jbWQKKyAgICAgICAgY21kLmFubm91bmNlID0gX2Fubm91bmNlCisgICAgICAgIGNtZC5vcHRpb24xID0gMQorICAgICAgICBjbWQub3B0aW9uMiA9IDEKKyAgICAgICAgY21kLnVzZXJfb3B0aW9ucyA9IFsoJ29wdGlvbjEnLCAnJywgJycpLCAoJ29wdGlvbjInLCAnJywgJycpXQorICAgICAgICBjbWQuZHVtcF9vcHRpb25zKCkKKworICAgICAgICB3YW50ZWQgPSBbImNvbW1hbmQgb3B0aW9ucyBmb3IgJ015Q21kJzoiLCAnICBvcHRpb24xID0gMScsCisgICAgICAgICAgICAgICAgICAnICBvcHRpb24yID0gMSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNncywgd2FudGVkKQorCisgICAgZGVmIHRlc3RfZW5zdXJlX3N0cmluZyhzZWxmKToKKyAgICAgICAgY21kID0gc2VsZi5jbWQKKyAgICAgICAgY21kLm9wdGlvbjEgPSAnb2snCisgICAgICAgIGNtZC5lbnN1cmVfc3RyaW5nKCdvcHRpb24xJykKKworICAgICAgICBjbWQub3B0aW9uMiA9IE5vbmUKKyAgICAgICAgY21kLmVuc3VyZV9zdHJpbmcoJ29wdGlvbjInLCAneHh4JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoY21kLCAnb3B0aW9uMicpKQorCisgICAgICAgIGNtZC5vcHRpb24zID0gMQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwgY21kLmVuc3VyZV9zdHJpbmcsICdvcHRpb24zJykKKworICAgIGRlZiB0ZXN0X2Vuc3VyZV9zdHJpbmdfbGlzdChzZWxmKToKKyAgICAgICAgY21kID0gc2VsZi5jbWQKKyAgICAgICAgY21kLm9wdGlvbjEgPSAnb2ssZG9rJworICAgICAgICBjbWQuZW5zdXJlX3N0cmluZ19saXN0KCdvcHRpb24xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQub3B0aW9uMSwgWydvaycsICdkb2snXSkKKworICAgICAgICBjbWQub3B0aW9uMiA9IFsneHh4JywgJ3d3dyddCisgICAgICAgIGNtZC5lbnN1cmVfc3RyaW5nX2xpc3QoJ29wdGlvbjInKQorCisgICAgICAgIGNtZC5vcHRpb24zID0gWydvaycsIDJdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc09wdGlvbkVycm9yLCBjbWQuZW5zdXJlX3N0cmluZ19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9uMycpCisKKyAgICBkZWYgdGVzdF9lbnN1cmVfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGNtZCA9IHNlbGYuY21kCisgICAgICAgIGNtZC5vcHRpb24xID0gX19maWxlX18KKyAgICAgICAgY21kLmVuc3VyZV9maWxlbmFtZSgnb3B0aW9uMScpCisgICAgICAgIGNtZC5vcHRpb24yID0gJ3h4eCcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5lbnN1cmVfZmlsZW5hbWUsICdvcHRpb24yJykKKworICAgIGRlZiB0ZXN0X2Vuc3VyZV9kaXJuYW1lKHNlbGYpOgorICAgICAgICBjbWQgPSBzZWxmLmNtZAorICAgICAgICBjbWQub3B0aW9uMSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyCisgICAgICAgIGNtZC5lbnN1cmVfZGlybmFtZSgnb3B0aW9uMScpCisgICAgICAgIGNtZC5vcHRpb24yID0gJ3h4eCcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5lbnN1cmVfZGlybmFtZSwgJ29wdGlvbjInKQorCisgICAgZGVmIHRlc3RfZGVidWdfcHJpbnQoc2VsZik6CisgICAgICAgIGNtZCA9IHNlbGYuY21kCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgY21kLmRlYnVnX3ByaW50KCd4eHgnKQorICAgICAgICBzdGRvdXQuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICcnKQorCisgICAgICAgIGRlYnVnLkRFQlVHID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgICAgICBjbWQuZGVidWdfcHJpbnQoJ3h4eCcpCisgICAgICAgICAgICBzdGRvdXQuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucmVhZCgpLCAneHh4XG4nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVidWcuREVCVUcgPSBGYWxzZQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQ29tbWFuZFRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQppbmRleCAyMzI5MWRhLi5jZmQwOTZlIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkKQEAgLTIsNiArMiw4IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc2h1dGlsCiAKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IFB5UElSQ0NvbW1hbmQKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgpAQCAtOSw2ICsxMSw3IEBACiBmcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IFdBUk4KIAogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBQWVBJUkMgPSAiIiJcCiBbZGlzdHV0aWxzXQpAQCAtNDUsMTggKzQ4LDE3IEBACiAiIiIKIAogCi1jbGFzcyBQeVBJUkNDb21tYW5kVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUHlQSVJDQ29tbWFuZFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJQYXRjaGVzIHRoZSBlbnZpcm9ubWVudC4iIiIKICAgICAgICAgc3VwZXIoUHlQSVJDQ29tbWFuZFRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCi0gICAgICAgIGlmIG9zLmVudmlyb24uaGFzX2tleSgnSE9NRScpOgotICAgICAgICAgICAgc2VsZi5fb2xkX2hvbWUgPSBvcy5lbnZpcm9uWydIT01FJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX29sZF9ob21lID0gTm9uZQotICAgICAgICB0ZW1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgb3MuZW52aXJvblsnSE9NRSddID0gdGVtcGRpcgotICAgICAgICBzZWxmLnJjID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICcucHlwaXJjJykKKyAgICAgICAgc2VsZi50bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgb3MuZW52aXJvblsnSE9NRSddID0gc2VsZi50bXBfZGlyCisgICAgICAgIHNlbGYucmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAnLnB5cGlyYycpCiAgICAgICAgIHNlbGYuZGlzdCA9IERpc3RyaWJ1dGlvbigpCiAKICAgICAgICAgY2xhc3MgY29tbWFuZChQeVBJUkNDb21tYW5kKToKQEAgLTcxLDEwICs3Myw2IEBACiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgICIiIlJlbW92ZXMgdGhlIHBhdGNoLiIiIgotICAgICAgICBpZiBzZWxmLl9vbGRfaG9tZSBpcyBOb25lOgotICAgICAgICAgICAgZGVsIG9zLmVudmlyb25bJ0hPTUUnXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb3MuZW52aXJvblsnSE9NRSddID0gc2VsZi5fb2xkX2hvbWUKICAgICAgICAgc2V0X3RocmVzaG9sZChzZWxmLm9sZF90aHJlc2hvbGQpCiAgICAgICAgIHN1cGVyKFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQogCkBAIC04NCwxMiArODIsNyBAQAogICAgICAgICAjIDIuIGhhbmRsZSB0aGUgb2xkIGZvcm1hdAogCiAgICAgICAgICMgbmV3IGZvcm1hdAotICAgICAgICBmID0gb3BlbihzZWxmLnJjLCAndycpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYud3JpdGUoUFlQSVJDKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KKyAgICAgICAgc2VsZi53cml0ZV9maWxlKHNlbGYucmMsIFBZUElSQykKICAgICAgICAgY21kID0gc2VsZi5fY21kKHNlbGYuZGlzdCkKICAgICAgICAgY29uZmlnID0gY21kLl9yZWFkX3B5cGlyYygpCiAKQEAgLTk4LDM3ICs5MSwzMyBAQAogICAgICAgICB3YWl0ZWQgPSBbKCdwYXNzd29yZCcsICdzZWNyZXQnKSwgKCdyZWFsbScsICdweXBpJyksCiAgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJyksCiAgICAgICAgICAgICAgICAgICAoJ3NlcnZlcicsICdzZXJ2ZXIxJyksICgndXNlcm5hbWUnLCAnbWUnKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29uZmlnLCB3YWl0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uZmlnLCB3YWl0ZWQpCiAKICAgICAgICAgIyBvbGQgZm9ybWF0Ci0gICAgICAgIGYgPSBvcGVuKHNlbGYucmMsICd3JykKLSAgICAgICAgZi53cml0ZShQWVBJUkNfT0xEKQotICAgICAgICBmLmNsb3NlKCkKLQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoc2VsZi5yYywgUFlQSVJDX09MRCkKICAgICAgICAgY29uZmlnID0gY21kLl9yZWFkX3B5cGlyYygpCiAgICAgICAgIGNvbmZpZyA9IGNvbmZpZy5pdGVtcygpCiAgICAgICAgIGNvbmZpZy5zb3J0KCkKICAgICAgICAgd2FpdGVkID0gWygncGFzc3dvcmQnLCAnc2VjcmV0JyksICgncmVhbG0nLCAncHlwaScpLAogICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpLAogICAgICAgICAgICAgICAgICAgKCdzZXJ2ZXInLCAnc2VydmVyLWxvZ2luJyksICgndXNlcm5hbWUnLCAndGFyZWsnKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29uZmlnLCB3YWl0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uZmlnLCB3YWl0ZWQpCiAKICAgICBkZWYgdGVzdF9zZXJ2ZXJfZW1wdHlfcmVnaXN0cmF0aW9uKHNlbGYpOgotCiAgICAgICAgIGNtZCA9IHNlbGYuX2NtZChzZWxmLmRpc3QpCiAgICAgICAgIHJjID0gY21kLl9nZXRfcmNfZmlsZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgb3MucGF0aC5leGlzdHMocmMpKQotCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMocmMpKQogICAgICAgICBjbWQuX3N0b3JlX3B5cGlyYygndGFyZWsnLCAneHh4JykKLQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMocmMpKQotICAgICAgICBjb250ZW50ID0gb3BlbihyYykucmVhZCgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29udGVudCwgV0FOVEVEKQotCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyYykpCisgICAgICAgIGYgPSBvcGVuKHJjKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudCwgV0FOVEVEKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShQeVBJUkNDb21tYW5kVGVzdENhc2UpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWdfY21kLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZ19jbWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2YTFkNQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWdfY21kLnB5CkBAIC0wLDAgKzEsOTAgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5jb25maWcuIiIiCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2Zyb20gZGlzdHV0aWxzLmNvbW1hbmQuY29uZmlnIGltcG9ydCBkdW1wX2ZpbGUsIGNvbmZpZworZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKKworY2xhc3MgQ29uZmlnVGVzdENhc2Uoc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9pbmZvKHNlbGYsIG1zZywgKmFyZ3MpOgorICAgICAgICBmb3IgbGluZSBpbiBtc2cuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgc2VsZi5fbG9ncy5hcHBlbmQobGluZSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoQ29uZmlnVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5fbG9ncyA9IFtdCisgICAgICAgIHNlbGYub2xkX2xvZyA9IGxvZy5pbmZvCisgICAgICAgIGxvZy5pbmZvID0gc2VsZi5faW5mbworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBsb2cuaW5mbyA9IHNlbGYub2xkX2xvZworICAgICAgICBzdXBlcihDb25maWdUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfZHVtcF9maWxlKHNlbGYpOgorICAgICAgICB0aGlzX2ZpbGUgPSBvcy5wYXRoLnNwbGl0ZXh0KF9fZmlsZV9fKVswXSArICcucHknCisgICAgICAgIGYgPSBvcGVuKHRoaXNfZmlsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbnVtbGluZXMgPSBsZW4oZi5yZWFkbGluZXMoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGR1bXBfZmlsZSh0aGlzX2ZpbGUsICdJIGFtIHRoZSBoZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9sb2dzKSwgbnVtbGluZXMrMSkKKworICAgIGRlZiB0ZXN0X3NlYXJjaF9jcHAoc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gY29uZmlnKGRpc3QpCisKKyAgICAgICAgIyBzaW1wbGUgcGF0dGVybiBzZWFyY2hlcworICAgICAgICBtYXRjaCA9IGNtZC5zZWFyY2hfY3BwKHBhdHRlcm49J3h4eCcsIGJvZHk9Jy8vIHh4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0Y2gsIDApCisKKyAgICAgICAgbWF0Y2ggPSBjbWQuc2VhcmNoX2NwcChwYXR0ZXJuPSdfY29uZmlndGVzdCcsIGJvZHk9Jy8vIHh4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0Y2gsIDEpCisKKyAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgorICAgICAgICAjIGZpbmFsaXplX29wdGlvbnMgZG9lcyBhIGJpdCBvZiB0cmFuc2Zvcm1hdGlvbgorICAgICAgICAjIG9uIG9wdGlvbnMKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBjb25maWcoZGlzdCkKKyAgICAgICAgY21kLmluY2x1ZGVfZGlycyA9ICdvbmUlc3R3bycgJSBvcy5wYXRoc2VwCisgICAgICAgIGNtZC5saWJyYXJpZXMgPSAnb25lJworICAgICAgICBjbWQubGlicmFyeV9kaXJzID0gJ3RocmVlJXNmb3VyJyAlIG9zLnBhdGhzZXAKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmluY2x1ZGVfZGlycywgWydvbmUnLCAndHdvJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmxpYnJhcmllcywgWydvbmUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQubGlicmFyeV9kaXJzLCBbJ3RocmVlJywgJ2ZvdXInXSkKKworICAgIGRlZiB0ZXN0X2NsZWFuKHNlbGYpOgorICAgICAgICAjIF9jbGVhbiByZW1vdmVzIGZpbGVzCisgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBmMSA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnb25lJykKKyAgICAgICAgZjIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ3R3bycpCisKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKGYxLCAneHh4JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKGYyLCAneHh4JykKKworICAgICAgICBmb3IgZiBpbiAoZjEsIGYyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmKSkKKworICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGNvbmZpZyhkaXN0KQorICAgICAgICBjbWQuX2NsZWFuKGYxLCBmMikKKworICAgICAgICBmb3IgZiBpbiAoZjEsIGYyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoZikpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShDb25maWdUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvcmUucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29yZS5weQppbmRleCBlNDgxZThkLi4wZDk3OWJjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29yZS5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29yZS5weQpAQCAtNiw4ICs2LDkgQEAKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0LCBydW5fdW5pdHRlc3QKIGltcG9ydCB1bml0dGVzdAotCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAogCiAjIHNldHVwIHNjcmlwdCB0aGF0IHVzZXMgX19maWxlX18KIHNldHVwX3VzaW5nX19fZmlsZV9fID0gIiIiXApAQCAtMjgsMTUgKzI5LDIwIEBACiAiIiIKIAogCi1jbGFzcyBDb3JlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQ29yZVRlc3RDYXNlKHN1cHBvcnQuRW52aXJvbkd1YXJkLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKENvcmVUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQogICAgICAgICBzZWxmLm9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgIHNlbGYuY2xlYW51cF90ZXN0Zm4oKQorICAgICAgICBzZWxmLm9sZF9hcmd2ID0gc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm9sZF9zdGRvdXQKICAgICAgICAgc2VsZi5jbGVhbnVwX3Rlc3RmbigpCisgICAgICAgIHN5cy5hcmd2ID0gc2VsZi5vbGRfYXJndlswXQorICAgICAgICBzeXMuYXJndls6XSA9IHNlbGYub2xkX2FyZ3ZbMV0KKyAgICAgICAgc3VwZXIoQ29yZVRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCiAKICAgICBkZWYgY2xlYW51cF90ZXN0Zm4oc2VsZik6CiAgICAgICAgIHBhdGggPSB0ZXN0LnRlc3Rfc3VwcG9ydC5URVNURk4KQEAgLTQ2LDcgKzUyLDExIEBACiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCiAKICAgICBkZWYgd3JpdGVfc2V0dXAoc2VsZiwgdGV4dCwgcGF0aD10ZXN0LnRlc3Rfc3VwcG9ydC5URVNURk4pOgotICAgICAgICBvcGVuKHBhdGgsICJ3Iikud3JpdGUodGV4dCkKKyAgICAgICAgZiA9IG9wZW4ocGF0aCwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgcmV0dXJuIHBhdGgKIAogICAgIGRlZiB0ZXN0X3J1bl9zZXR1cF9wcm92aWRlc19maWxlKHNlbGYpOgpAQCAtNzMsOSArODMsMjYgQEAKICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dFs6LTFdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3dkLCBvdXRwdXQpCiAKKyAgICBkZWYgdGVzdF9kZWJ1Z19tb2RlKHNlbGYpOgorICAgICAgICAjIHRoaXMgY292ZXJzIHRoZSBjb2RlIGNhbGxlZCB3aGVuIERFQlVHIGlzIHNldAorICAgICAgICBzeXMuYXJndiA9IFsnc2V0dXAucHknLCAnLS1uYW1lJ10KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBkaXN0dXRpbHMuY29yZS5zZXR1cChuYW1lPSdiYXInKQorICAgICAgICBzdGRvdXQuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICdiYXJcbicpCisKKyAgICAgICAgZGlzdHV0aWxzLmNvcmUuREVCVUcgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgICAgIGRpc3R1dGlscy5jb3JlLnNldHVwKG5hbWU9J2JhcicpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkaXN0dXRpbHMuY29yZS5ERUJVRyA9IEZhbHNlCisgICAgICAgIHN0ZG91dC5zZWVrKDApCisgICAgICAgIHdhbnRlZCA9ICJvcHRpb25zIChhZnRlciBwYXJzaW5nIGNvbmZpZyBmaWxlcyk6XG4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJlYWRsaW5lcygpWzBdLCB3YW50ZWQpCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShDb3JlVGVzdENhc2UpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kZXBfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kZXBfdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTEwNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2RlcF91dGlsLnB5CkBAIC0wLDAgKzEsODEgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuZGVwX3V0aWwuIiIiCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKKworZnJvbSBkaXN0dXRpbHMuZGVwX3V0aWwgaW1wb3J0IG5ld2VyLCBuZXdlcl9wYWlyd2lzZSwgbmV3ZXJfZ3JvdXAKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRmlsZUVycm9yCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2NsYXNzIERlcFV0aWxUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9uZXdlcihzZWxmKToKKworICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBuZXdfZmlsZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICduZXcnKQorICAgICAgICBvbGRfZmlsZSA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKworICAgICAgICAjIFJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciBpZiAnbmV3X2ZpbGUnIGRvZXMgbm90IGV4aXN0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNGaWxlRXJyb3IsIG5ld2VyLCBuZXdfZmlsZSwgb2xkX2ZpbGUpCisKKyAgICAgICAgIyBSZXR1cm4gdHJ1ZSBpZiAnbmV3X2ZpbGUnIGV4aXN0cyBhbmQgaXMgbW9yZSByZWNlbnRseSBtb2RpZmllZCB0aGFuCisgICAgICAgICMgJ29sZF9maWxlJywgb3IgaWYgJ25ld19maWxlJyBleGlzdHMgYW5kICdvbGRfZmlsZScgZG9lc24ndC4KKyAgICAgICAgc2VsZi53cml0ZV9maWxlKG5ld19maWxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3ZXIobmV3X2ZpbGUsICdJX2RvbnRfZXhpc3QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld2VyKG5ld19maWxlLCBvbGRfZmlsZSkpCisKKyAgICAgICAgIyBSZXR1cm4gZmFsc2UgaWYgYm90aCBleGlzdCBhbmQgJ29sZF9maWxlJyBpcyB0aGUgc2FtZSBhZ2Ugb3IgeW91bmdlcgorICAgICAgICAjIHRoYW4gJ25ld19maWxlJy4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdlcihvbGRfZmlsZSwgbmV3X2ZpbGUpKQorCisgICAgZGVmIHRlc3RfbmV3ZXJfcGFpcndpc2Uoc2VsZik6CisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNvdXJjZXMgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnc291cmNlcycpCisgICAgICAgIHRhcmdldHMgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAndGFyZ2V0cycpCisgICAgICAgIG9zLm1rZGlyKHNvdXJjZXMpCisgICAgICAgIG9zLm1rZGlyKHRhcmdldHMpCisgICAgICAgIG9uZSA9IG9zLnBhdGguam9pbihzb3VyY2VzLCAnb25lJykKKyAgICAgICAgdHdvID0gb3MucGF0aC5qb2luKHNvdXJjZXMsICd0d28nKQorICAgICAgICB0aHJlZSA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykgICAgIyBJIGFtIHRoZSBvbGQgZmlsZQorICAgICAgICBmb3VyID0gb3MucGF0aC5qb2luKHRhcmdldHMsICdmb3VyJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKG9uZSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKHR3bykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKGZvdXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdlcl9wYWlyd2lzZShbb25lLCB0d29dLCBbdGhyZWUsIGZvdXJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoW29uZV0sW3RocmVlXSkpCisKKyAgICBkZWYgdGVzdF9uZXdlcl9ncm91cChzZWxmKToKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgc291cmNlcyA9IG9zLnBhdGguam9pbih0bXBkaXIsICdzb3VyY2VzJykKKyAgICAgICAgb3MubWtkaXIoc291cmNlcykKKyAgICAgICAgb25lID0gb3MucGF0aC5qb2luKHNvdXJjZXMsICdvbmUnKQorICAgICAgICB0d28gPSBvcy5wYXRoLmpvaW4oc291cmNlcywgJ3R3bycpCisgICAgICAgIHRocmVlID0gb3MucGF0aC5qb2luKHNvdXJjZXMsICd0aHJlZScpCisgICAgICAgIG9sZF9maWxlID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQorCisgICAgICAgICMgcmV0dXJuIHRydWUgaWYgJ29sZF9maWxlJyBpcyBvdXQtb2YtZGF0ZSB3aXRoIHJlc3BlY3QgdG8gYW55IGZpbGUKKyAgICAgICAgIyBsaXN0ZWQgaW4gJ3NvdXJjZXMnLgorICAgICAgICBzZWxmLndyaXRlX2ZpbGUob25lKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUodHdvKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUodGhyZWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdlcl9ncm91cChbb25lLCB0d28sIHRocmVlXSwgb2xkX2ZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5ld2VyX2dyb3VwKFtvbmUsIHR3bywgb2xkX2ZpbGVdLCB0aHJlZSkpCisKKyAgICAgICAgIyBtaXNzaW5nIGhhbmRsaW5nCisgICAgICAgIG9zLnJlbW92ZShvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG5ld2VyX2dyb3VwLCBbb25lLCB0d28sIG9sZF9maWxlXSwgdGhyZWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdlcl9ncm91cChbb25lLCB0d28sIG9sZF9maWxlXSwgdGhyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZz0naWdub3JlJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld2VyX2dyb3VwKFtvbmUsIHR3bywgb2xkX2ZpbGVdLCB0aHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npbmc9J25ld2VyJykpCisKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKERlcFV0aWxUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5M2Y3N2MKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlyX3V0aWwucHkKQEAgLTAsMCArMSwxMTYgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuZGlyX3V0aWwuIiIiCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN0YXQKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzeXMKKworZnJvbSBkaXN0dXRpbHMuZGlyX3V0aWwgaW1wb3J0IChta3BhdGgsIHJlbW92ZV90cmVlLCBjcmVhdGVfdHJlZSwgY29weV90cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnN1cmVfcmVsYXRpdmUpCisKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworY2xhc3MgRGlyVXRpbFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfbG9nKHNlbGYsIG1zZywgKmFyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgPiAwOgorICAgICAgICAgICAgc2VsZi5fbG9ncy5hcHBlbmQobXNnICUgYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ3MuYXBwZW5kKG1zZykKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoRGlyVXRpbFRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuX2xvZ3MgPSBbXQorICAgICAgICB0bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5yb290X3RhcmdldCA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZGVlcCcpCisgICAgICAgIHNlbGYudGFyZ2V0ID0gb3MucGF0aC5qb2luKHNlbGYucm9vdF90YXJnZXQsICdoZXJlJykKKyAgICAgICAgc2VsZi50YXJnZXQyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdkZWVwMicpCisgICAgICAgIHNlbGYub2xkX2xvZyA9IGxvZy5pbmZvCisgICAgICAgIGxvZy5pbmZvID0gc2VsZi5fbG9nCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGxvZy5pbmZvID0gc2VsZi5vbGRfbG9nCisgICAgICAgIHN1cGVyKERpclV0aWxUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfbWtwYXRoX3JlbW92ZV90cmVlX3ZlcmJvc2l0eShzZWxmKToKKworICAgICAgICBta3BhdGgoc2VsZi50YXJnZXQsIHZlcmJvc2U9MCkKKyAgICAgICAgd2FudGVkID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCB3YW50ZWQpCisgICAgICAgIHJlbW92ZV90cmVlKHNlbGYucm9vdF90YXJnZXQsIHZlcmJvc2U9MCkKKworICAgICAgICBta3BhdGgoc2VsZi50YXJnZXQsIHZlcmJvc2U9MSkKKyAgICAgICAgd2FudGVkID0gWydjcmVhdGluZyAlcycgJSBzZWxmLnJvb3RfdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgJ2NyZWF0aW5nICVzJyAlIHNlbGYudGFyZ2V0XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKKyAgICAgICAgc2VsZi5fbG9ncyA9IFtdCisKKyAgICAgICAgcmVtb3ZlX3RyZWUoc2VsZi5yb290X3RhcmdldCwgdmVyYm9zZT0xKQorICAgICAgICB3YW50ZWQgPSBbInJlbW92aW5nICclcycgKGFuZCBldmVyeXRoaW5nIHVuZGVyIGl0KSIgJSBzZWxmLnJvb3RfdGFyZ2V0XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgdGVzdCBpcyBvbmx5IGFwcHJvcHJpYXRlIGZvciBQT1NJWC1saWtlIHN5c3RlbXMuIikKKyAgICBkZWYgdGVzdF9ta3BhdGhfd2l0aF9jdXN0b21fbW9kZShzZWxmKToKKyAgICAgICAgIyBHZXQgYW5kIHNldCB0aGUgY3VycmVudCB1bWFzayB2YWx1ZSBmb3IgdGVzdGluZyBtb2RlIGJpdHMuCisgICAgICAgIHVtYXNrID0gb3MudW1hc2soMG8wMDIpCisgICAgICAgIG9zLnVtYXNrKHVtYXNrKQorICAgICAgICBta3BhdGgoc2VsZi50YXJnZXQsIDBvNzAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc3RhdC5TX0lNT0RFKG9zLnN0YXQoc2VsZi50YXJnZXQpLnN0X21vZGUpLCAwbzcwMCAmIH51bWFzaykKKyAgICAgICAgbWtwYXRoKHNlbGYudGFyZ2V0MiwgMG81NTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzdGF0LlNfSU1PREUob3Muc3RhdChzZWxmLnRhcmdldDIpLnN0X21vZGUpLCAwbzU1NSAmIH51bWFzaykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV90cmVlX3ZlcmJvc2l0eShzZWxmKToKKworICAgICAgICBjcmVhdGVfdHJlZShzZWxmLnJvb3RfdGFyZ2V0LCBbJ29uZScsICd0d28nLCAndGhyZWUnXSwgdmVyYm9zZT0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIFtdKQorICAgICAgICByZW1vdmVfdHJlZShzZWxmLnJvb3RfdGFyZ2V0LCB2ZXJib3NlPTApCisKKyAgICAgICAgd2FudGVkID0gWydjcmVhdGluZyAlcycgJSBzZWxmLnJvb3RfdGFyZ2V0XQorICAgICAgICBjcmVhdGVfdHJlZShzZWxmLnJvb3RfdGFyZ2V0LCBbJ29uZScsICd0d28nLCAndGhyZWUnXSwgdmVyYm9zZT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKKworICAgICAgICByZW1vdmVfdHJlZShzZWxmLnJvb3RfdGFyZ2V0LCB2ZXJib3NlPTApCisKKworICAgIGRlZiB0ZXN0X2NvcHlfdHJlZV92ZXJib3NpdHkoc2VsZik6CisKKyAgICAgICAgbWtwYXRoKHNlbGYudGFyZ2V0LCB2ZXJib3NlPTApCisKKyAgICAgICAgY29weV90cmVlKHNlbGYudGFyZ2V0LCBzZWxmLnRhcmdldDIsIHZlcmJvc2U9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCBbXSkKKworICAgICAgICByZW1vdmVfdHJlZShzZWxmLnJvb3RfdGFyZ2V0LCB2ZXJib3NlPTApCisKKyAgICAgICAgbWtwYXRoKHNlbGYudGFyZ2V0LCB2ZXJib3NlPTApCisgICAgICAgIGFfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRhcmdldCwgJ29rLnR4dCcpCisgICAgICAgIGYgPSBvcGVuKGFfZmlsZSwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCdzb21lIGNvbnRlbnQnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgd2FudGVkID0gWydjb3B5aW5nICVzIC0+ICVzJyAlIChhX2ZpbGUsIHNlbGYudGFyZ2V0MildCisgICAgICAgIGNvcHlfdHJlZShzZWxmLnRhcmdldCwgc2VsZi50YXJnZXQyLCB2ZXJib3NlPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgd2FudGVkKQorCisgICAgICAgIHJlbW92ZV90cmVlKHNlbGYucm9vdF90YXJnZXQsIHZlcmJvc2U9MCkKKyAgICAgICAgcmVtb3ZlX3RyZWUoc2VsZi50YXJnZXQyLCB2ZXJib3NlPTApCisKKyAgICBkZWYgdGVzdF9lbnN1cmVfcmVsYXRpdmUoc2VsZik6CisgICAgICAgIGlmIG9zLnNlcCA9PSAnLyc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuc3VyZV9yZWxhdGl2ZSgnL2hvbWUvZm9vJyksICdob21lL2ZvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuc3VyZV9yZWxhdGl2ZSgnc29tZS9wYXRoJyksICdzb21lL3BhdGgnKQorICAgICAgICBlbHNlOiAgICMgXFwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5zdXJlX3JlbGF0aXZlKCdjOlxcaG9tZVxcZm9vJyksICdjOmhvbWVcXGZvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuc3VyZV9yZWxhdGl2ZSgnaG9tZVxcZm9vJyksICdob21lXFxmb28nKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoRGlyVXRpbFRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXN0LnB5CmluZGV4IGFmNDAxODYuLmJhNjA2MzggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXN0LnB5CkBAIC0xLDkgKzEsNiBAQAotIyAtKi0gY29kaW5nOiBsYXRpbi0xIC0qLQorIyAtKi0gY29kaW5nOiB1dGY4IC0qLQogCiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmRpc3QuIiIiCi0KLWltcG9ydCBkaXN0dXRpbHMuY21kCi1pbXBvcnQgZGlzdHV0aWxzLmRpc3QKIGltcG9ydCBvcwogaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgc3lzCkBAIC0xMSwxMCArOCwxMyBAQAogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgdGV4dHdyYXAKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOCitmcm9tIGRpc3R1dGlscy5kaXN0IGltcG9ydCBEaXN0cmlidXRpb24sIGZpeF9oZWxwX29wdGlvbnMsIERpc3RyaWJ1dGlvbk1ldGFkYXRhCitmcm9tIGRpc3R1dGlscy5jbWQgaW1wb3J0IENvbW1hbmQKK2ltcG9ydCBkaXN0dXRpbHMuZGlzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKIAotCi1jbGFzcyB0ZXN0X2Rpc3QoZGlzdHV0aWxzLmNtZC5Db21tYW5kKToKK2NsYXNzIHRlc3RfZGlzdChDb21tYW5kKToKICAgICAiIiJTYW1wbGUgZGlzdHV0aWxzIGV4dGVuc2lvbiBjb21tYW5kLiIiIgogCiAgICAgdXNlcl9vcHRpb25zID0gWwpAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICBzZWxmLnNhbXBsZV9vcHRpb24gPSBOb25lCiAKIAotY2xhc3MgVGVzdERpc3RyaWJ1dGlvbihkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24pOgorY2xhc3MgVGVzdERpc3RyaWJ1dGlvbihEaXN0cmlidXRpb24pOgogICAgICIiIkRpc3RyaWJ1dGlvbiBzdWJjbGFzc2VzIHRoYXQgYXZvaWRzIHRoZSBkZWZhdWx0IHNlYXJjaCBmb3IKICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgogCkBAIC0zNywxNCArMzcsMjAgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZ19maWxlcwogCiAKLWNsYXNzIERpc3RyaWJ1dGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIERpc3RyaWJ1dGlvblRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuRW52aXJvbkd1YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLmFyZ3YgPSBzeXMuYXJndls6XQorICAgICAgICBzdXBlcihEaXN0cmlidXRpb25UZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmFyZ3YgPSBzeXMuYXJndiwgc3lzLmFyZ3ZbOl0KICAgICAgICAgZGVsIHN5cy5hcmd2WzE6XQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzeXMuYXJndls6XSA9IHNlbGYuYXJndgorICAgICAgICBzeXMuYXJndiA9IHNlbGYuYXJndlswXQorICAgICAgICBzeXMuYXJndls6XSA9IHNlbGYuYXJndlsxXQorICAgICAgICBzdXBlcihEaXN0cmlidXRpb25UZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQogCiAgICAgZGVmIGNyZWF0ZV9kaXN0cmlidXRpb24oc2VsZiwgY29uZmlnZmlsZXM9KCkpOgogICAgICAgICBkID0gVGVzdERpc3RyaWJ1dGlvbigpCkBAIC01Myw2ICs1OSwyNyBAQAogICAgICAgICBkLnBhcnNlX2NvbW1hbmRfbGluZSgpCiAgICAgICAgIHJldHVybiBkCiAKKyAgICBkZWYgdGVzdF9kZWJ1Z19tb2RlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJbZ2xvYmFsXSIpCisgICAgICAgICAgICBmLndyaXRlKCJjb21tYW5kX3BhY2thZ2VzID0gZm9vLmJhciwgc3BsYXQiKQorCisgICAgICAgIGZpbGVzID0gW1RFU1RGTl0KKyAgICAgICAgc3lzLmFyZ3YuYXBwZW5kKCJidWlsZCIpCisKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzZWxmLmNyZWF0ZV9kaXN0cmlidXRpb24oZmlsZXMpCisgICAgICAgIHN0ZG91dC5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJlYWQoKSwgJycpCisgICAgICAgIGRpc3R1dGlscy5kaXN0LkRFQlVHID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9kaXN0cmlidXRpb24oZmlsZXMpCisgICAgICAgICAgICBzdGRvdXQuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucmVhZCgpLCAnJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRpc3R1dGlscy5kaXN0LkRFQlVHID0gRmFsc2UKKwogICAgIGRlZiB0ZXN0X2NvbW1hbmRfcGFja2FnZXNfdW5zcGVjaWZpZWQoc2VsZik6CiAgICAgICAgIHN5cy5hcmd2LmFwcGVuZCgiYnVpbGQiKQogICAgICAgICBkID0gc2VsZi5jcmVhdGVfZGlzdHJpYnV0aW9uKCkKQEAgLTcwLDU1ICs5Nyw1MiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0X2NvbW1hbmRfcGFja2FnZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbImRpc3R1dGlscy5jb21tYW5kIiwgImZvby5iYXIiLCAiZGlzdHV0aWxzLnRlc3RzIl0pCiAgICAgICAgIGNtZCA9IGQuZ2V0X2NvbW1hbmRfb2JqKCJ0ZXN0X2Rpc3QiKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjbWQsIHRlc3RfZGlzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGNtZCwgdGVzdF9kaXN0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuc2FtcGxlX29wdGlvbiwgInNvbWV0ZXh0IikKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfcGFja2FnZXNfY29uZmlnZmlsZShzZWxmKToKICAgICAgICAgc3lzLmFyZ3YuYXBwZW5kKCJidWlsZCIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy51bmxpbmssIFRFU1RGTikKICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHByaW50ID4+ZiwgIltnbG9iYWxdIgogICAgICAgICAgICAgcHJpbnQgPj5mLCAiY29tbWFuZF9wYWNrYWdlcyA9IGZvby5iYXIsIHNwbGF0IgotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBkID0gc2VsZi5jcmVhdGVfZGlzdHJpYnV0aW9uKFtURVNURk5dKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldF9jb21tYW5kX3BhY2thZ2VzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZGlzdHV0aWxzLmNvbW1hbmQiLCAiZm9vLmJhciIsICJzcGxhdCJdKQotCi0gICAgICAgICAgICAjIGVuc3VyZSBjb21tYW5kIGxpbmUgb3ZlcnJpZGVzIGNvbmZpZzoKLSAgICAgICAgICAgIHN5cy5hcmd2WzE6XSA9IFsiLS1jb21tYW5kLXBhY2thZ2VzIiwgInNwb3JrIiwgImJ1aWxkIl0KLSAgICAgICAgICAgIGQgPSBzZWxmLmNyZWF0ZV9kaXN0cmlidXRpb24oW1RFU1RGTl0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0X2NvbW1hbmRfcGFja2FnZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJkaXN0dXRpbHMuY29tbWFuZCIsICJzcG9yayJdKQotCi0gICAgICAgICAgICAjIFNldHRpbmcgLS1jb21tYW5kLXBhY2thZ2VzIHRvICcnIHNob3VsZCBjYXVzZSB0aGUgZGVmYXVsdCB0bwotICAgICAgICAgICAgIyBiZSB1c2VkIGV2ZW4gaWYgYSBjb25maWcgZmlsZSBzcGVjaWZpZWQgc29tZXRoaW5nIGVsc2U6Ci0gICAgICAgICAgICBzeXMuYXJndlsxOl0gPSBbIi0tY29tbWFuZC1wYWNrYWdlcyIsICIiLCAiYnVpbGQiXQotICAgICAgICAgICAgZCA9IHNlbGYuY3JlYXRlX2Rpc3RyaWJ1dGlvbihbVEVTVEZOXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRfY29tbWFuZF9wYWNrYWdlcygpLCBbImRpc3R1dGlscy5jb21tYW5kIl0pCi0KICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBkID0gc2VsZi5jcmVhdGVfZGlzdHJpYnV0aW9uKFtURVNURk5dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0X2NvbW1hbmRfcGFja2FnZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbImRpc3R1dGlscy5jb21tYW5kIiwgImZvby5iYXIiLCAic3BsYXQiXSkKKworICAgICAgICAjIGVuc3VyZSBjb21tYW5kIGxpbmUgb3ZlcnJpZGVzIGNvbmZpZzoKKyAgICAgICAgc3lzLmFyZ3ZbMTpdID0gWyItLWNvbW1hbmQtcGFja2FnZXMiLCAic3BvcmsiLCAiYnVpbGQiXQorICAgICAgICBkID0gc2VsZi5jcmVhdGVfZGlzdHJpYnV0aW9uKFtURVNURk5dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0X2NvbW1hbmRfcGFja2FnZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbImRpc3R1dGlscy5jb21tYW5kIiwgInNwb3JrIl0pCisKKyAgICAgICAgIyBTZXR0aW5nIC0tY29tbWFuZC1wYWNrYWdlcyB0byAnJyBzaG91bGQgY2F1c2UgdGhlIGRlZmF1bHQgdG8KKyAgICAgICAgIyBiZSB1c2VkIGV2ZW4gaWYgYSBjb25maWcgZmlsZSBzcGVjaWZpZWQgc29tZXRoaW5nIGVsc2U6CisgICAgICAgIHN5cy5hcmd2WzE6XSA9IFsiLS1jb21tYW5kLXBhY2thZ2VzIiwgIiIsICJidWlsZCJdCisgICAgICAgIGQgPSBzZWxmLmNyZWF0ZV9kaXN0cmlidXRpb24oW1RFU1RGTl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRfY29tbWFuZF9wYWNrYWdlcygpLCBbImRpc3R1dGlscy5jb21tYW5kIl0pCiAKICAgICBkZWYgdGVzdF93cml0ZV9wa2dfZmlsZShzZWxmKToKICAgICAgICAgIyBDaGVjayBEaXN0cmlidXRpb25NZXRhZGF0YSBoYW5kbGluZyBvZiBVbmljb2RlIGZpZWxkcwotICAgICAgICBteV9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdmJykKLSAgICAgICAga2xhc3MgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24KKyAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIG15X2ZpbGUgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2YnKQorICAgICAgICBrbGFzcyA9IERpc3RyaWJ1dGlvbgogCi0gICAgICAgIGRpc3QgPSBrbGFzcyhhdHRycz17J2F1dGhvcic6IHUnTWlzdGVyIENhZuknLAorICAgICAgICBkaXN0ID0ga2xhc3MoYXR0cnM9eydhdXRob3InOiB1J01pc3RlciBDYWbDqScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnbXkucGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21haW50YWluZXInOiB1J0NhZukgSnVuaW9yJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiB1J0NhZukgdG9yculmaeknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb25nX2Rlc2NyaXB0aW9uJzogdSdI6WjpaOknfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFpbnRhaW5lcic6IHUnQ2Fmw6kgSnVuaW9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiB1J0NhZsOpIHRvcnLDqWZpw6knLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb25nX2Rlc2NyaXB0aW9uJzogdSdIw6low6low6knfSkKIAogCiAgICAgICAgICMgbGV0J3MgbWFrZSBzdXJlIHRoZSBmaWxlIGNhbiBiZSB3cml0dGVuCiAgICAgICAgICMgd2l0aCBVbmljb2RlIGZpZWxkcy4gdGhleSBhcmUgZW5jb2RlZCB3aXRoCiAgICAgICAgICMgUEtHX0lORk9fRU5DT0RJTkcKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGlzdC5tZXRhZGF0YS53cml0ZV9wa2dfZmlsZShvcGVuKG15X2ZpbGUsICd3JykpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhteV9maWxlKToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUobXlfZmlsZSkKKyAgICAgICAgZGlzdC5tZXRhZGF0YS53cml0ZV9wa2dfZmlsZShvcGVuKG15X2ZpbGUsICd3JykpCiAKICAgICAgICAgIyByZWd1bGFyIGFzY2lpIGlzIG9mIGNvdXJzZSBhbHdheXMgdXNhYmxlCiAgICAgICAgIGRpc3QgPSBrbGFzcyhhdHRycz17J2F1dGhvcic6ICdNaXN0ZXIgQ2FmZScsCkBAIC0xMjcsMTYgKzE1MSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdDYWZlIHRvcnJlZmllJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9uZ19kZXNjcmlwdGlvbic6ICdIZWhlaGUnfSkKIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkaXN0Lm1ldGFkYXRhLndyaXRlX3BrZ19maWxlKG9wZW4obXlfZmlsZSwgJ3cnKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG15X2ZpbGUpOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShteV9maWxlKQorICAgICAgICBteV9maWxlMiA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZjInKQorICAgICAgICBkaXN0Lm1ldGFkYXRhLndyaXRlX3BrZ19maWxlKG9wZW4obXlfZmlsZSwgJ3cnKSkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X29wdGlvbnMoc2VsZik6CiAgICAgICAgICMgYW4gZW1wdHkgb3B0aW9ucyBkaWN0aW9uYXJ5IHNob3VsZCBub3Qgc3RheSBpbiB0aGUKICAgICAgICAgIyBsaXN0IG9mIGF0dHJpYnV0ZXMKLSAgICAgICAga2xhc3MgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24KKyAgICAgICAga2xhc3MgPSBEaXN0cmlidXRpb24KIAogICAgICAgICAjIGNhdGNoaW5nIHdhcm5pbmdzCiAgICAgICAgIHdhcm5zID0gW10KQEAgLTE1NCwzNyArMTc1LDEwOCBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgd2FybmluZ3Mud2FybiA9IG9sZF93YXJuCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHdhcm5zKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4od2FybnMpLCAwKQogCi1jbGFzcyBNZXRhZGF0YVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgorCisgICAgICAgIGF0dHJzID0geydrZXl3b3Jkcyc6ICdvbmUsdHdvJywKKyAgICAgICAgICAgICAgICAgJ3BsYXRmb3Jtcyc6ICdvbmUsdHdvJ30KKworICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKGF0dHJzPWF0dHJzKQorICAgICAgICBkaXN0LmZpbmFsaXplX29wdGlvbnMoKQorCisgICAgICAgICMgZmluYWxpemVfb3B0aW9uIHNwbGl0cyBwbGF0Zm9ybXMgYW5kIGtleXdvcmRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdC5tZXRhZGF0YS5wbGF0Zm9ybXMsIFsnb25lJywgJ3R3byddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3QubWV0YWRhdGEua2V5d29yZHMsIFsnb25lJywgJ3R3byddKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbW1hbmRfcGFja2FnZXMoc2VsZik6CisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3QuY29tbWFuZF9wYWNrYWdlcywgTm9uZSkKKyAgICAgICAgY21kcyA9IGRpc3QuZ2V0X2NvbW1hbmRfcGFja2FnZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZHMsIFsnZGlzdHV0aWxzLmNvbW1hbmQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0LmNvbW1hbmRfcGFja2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydkaXN0dXRpbHMuY29tbWFuZCddKQorCisgICAgICAgIGRpc3QuY29tbWFuZF9wYWNrYWdlcyA9ICdvbmUsdHdvJworICAgICAgICBjbWRzID0gZGlzdC5nZXRfY29tbWFuZF9wYWNrYWdlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kcywgWydkaXN0dXRpbHMuY29tbWFuZCcsICdvbmUnLCAndHdvJ10pCisKKworICAgIGRlZiB0ZXN0X2Fubm91bmNlKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgbGV2ZWwgaXMga25vd24KKyAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCisgICAgICAgIGFyZ3MgPSAoJ29rJywpCisgICAgICAgIGt3YXJncyA9IHsnbGV2ZWwnOiAnb2syJ30KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGlzdC5hbm5vdW5jZSwgYXJncywga3dhcmdzKQorCisgICAgZGVmIHRlc3RfZmluZF9jb25maWdfZmlsZXNfZGlzYWJsZShzZWxmKToKKyAgICAgICAgIyBUaWNrZXQgIzExODA6IEFsbG93IHVzZXIgdG8gZGlzYWJsZSB0aGVpciBob21lIGNvbmZpZyBmaWxlLgorICAgICAgICB0ZW1wX2hvbWUgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRlbXBfaG9tZSwgIi5weWRpc3R1dGlscy5jZmciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wX2hvbWUsICJweWRpc3R1dGlscy5jZmciKQorCisgICAgICAgIHdpdGggb3Blbih1c2VyX2ZpbGVuYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdbZGlzdHV0aWxzXVxuJykKKworICAgICAgICBkZWYgX2V4cGFuZGVyKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIHRlbXBfaG9tZQorCisgICAgICAgIG9sZF9leHBhbmRlciA9IG9zLnBhdGguZXhwYW5kdXNlcgorICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIgPSBfZXhwYW5kZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZCA9IGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbigpCisgICAgICAgICAgICBhbGxfZmlsZXMgPSBkLmZpbmRfY29uZmlnX2ZpbGVzKCkKKworICAgICAgICAgICAgZCA9IGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbihhdHRycz17J3NjcmlwdF9hcmdzJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLW5vLXVzZXItY2ZnJ119KQorICAgICAgICAgICAgZmlsZXMgPSBkLmZpbmRfY29uZmlnX2ZpbGVzKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlciA9IG9sZF9leHBhbmRlcgorCisgICAgICAgICMgbWFrZSBzdXJlIC0tbm8tdXNlci1jZmcgZGlzYWJsZXMgdGhlIHVzZXIgY2ZnIGZpbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWxsX2ZpbGVzKS0xLCBsZW4oZmlsZXMpKQorCisKK2NsYXNzIE1ldGFkYXRhVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoTWV0YWRhdGFUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmFyZ3YgPSBzeXMuYXJndiwgc3lzLmFyZ3ZbOl0KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3lzLmFyZ3YgPSBzZWxmLmFyZ3ZbMF0KKyAgICAgICAgc3lzLmFyZ3ZbOl0gPSBzZWxmLmFyZ3ZbMV0KKyAgICAgICAgc3VwZXIoTWV0YWRhdGFUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQogCiAgICAgZGVmIHRlc3Rfc2ltcGxlX21ldGFkYXRhKHNlbGYpOgogICAgICAgICBhdHRycyA9IHsibmFtZSI6ICJwYWNrYWdlIiwKICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIn0KLSAgICAgICAgZGlzdCA9IGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbihhdHRycykKKyAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbihhdHRycykKICAgICAgICAgbWV0YSA9IHNlbGYuZm9ybWF0X21ldGFkYXRhKGRpc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiTWV0YWRhdGEtVmVyc2lvbjogMS4wIiBpbiBtZXRhKQotICAgICAgICBzZWxmLmFzc2VydF8oInByb3ZpZGVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJyZXF1aXJlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xygib2Jzb2xldGVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJNZXRhZGF0YS1WZXJzaW9uOiAxLjAiIGluIG1ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicHJvdmlkZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInJlcXVpcmVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJvYnNvbGV0ZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQogCiAgICAgZGVmIHRlc3RfcHJvdmlkZXMoc2VsZik6CiAgICAgICAgIGF0dHJzID0geyJuYW1lIjogInBhY2thZ2UiLAogICAgICAgICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAiLAogICAgICAgICAgICAgICAgICAicHJvdmlkZXMiOiBbInBhY2thZ2UiLCAicGFja2FnZS5zdWIiXX0KLSAgICAgICAgZGlzdCA9IGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbihhdHRycykKKyAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbihhdHRycykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0Lm1ldGFkYXRhLmdldF9wcm92aWRlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsicGFja2FnZSIsICJwYWNrYWdlLnN1YiJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3QuZ2V0X3Byb3ZpZGVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWyJwYWNrYWdlIiwgInBhY2thZ2Uuc3ViIl0pCiAgICAgICAgIG1ldGEgPSBzZWxmLmZvcm1hdF9tZXRhZGF0YShkaXN0KQotICAgICAgICBzZWxmLmFzc2VydF8oIk1ldGFkYXRhLVZlcnNpb246IDEuMSIgaW4gbWV0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJyZXF1aXJlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xygib2Jzb2xldGVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJNZXRhZGF0YS1WZXJzaW9uOiAxLjEiIGluIG1ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicmVxdWlyZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIm9ic29sZXRlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCiAKICAgICBkZWYgdGVzdF9wcm92aWRlc19pbGxlZ2FsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24sCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERpc3RyaWJ1dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInBhY2thZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRlcyI6IFsibXkucGtnIChzcGxhdCkiXX0pCkBAIC0xOTMsMjEgKzI4NSwyMCBAQAogICAgICAgICBhdHRycyA9IHsibmFtZSI6ICJwYWNrYWdlIiwKICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIiwKICAgICAgICAgICAgICAgICAgInJlcXVpcmVzIjogWyJvdGhlciIsICJhbm90aGVyICg9PTEuMCkiXX0KLSAgICAgICAgZGlzdCA9IGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbihhdHRycykKKyAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbihhdHRycykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0Lm1ldGFkYXRhLmdldF9yZXF1aXJlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsib3RoZXIiLCAiYW5vdGhlciAoPT0xLjApIl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdC5nZXRfcmVxdWlyZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbIm90aGVyIiwgImFub3RoZXIgKD09MS4wKSJdKQogICAgICAgICBtZXRhID0gc2VsZi5mb3JtYXRfbWV0YWRhdGEoZGlzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJNZXRhZGF0YS1WZXJzaW9uOiAxLjEiIGluIG1ldGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygicHJvdmlkZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydF8oIlJlcXVpcmVzOiBvdGhlciIgaW4gbWV0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJSZXF1aXJlczogYW5vdGhlciAoPT0xLjApIiBpbiBtZXRhKQotICAgICAgICBzZWxmLmFzc2VydF8oIm9ic29sZXRlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiTWV0YWRhdGEtVmVyc2lvbjogMS4xIiBpbiBtZXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInByb3ZpZGVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJSZXF1aXJlczogb3RoZXIiIGluIG1ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiUmVxdWlyZXM6IGFub3RoZXIgKD09MS4wKSIgaW4gbWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJvYnNvbGV0ZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQogCiAgICAgZGVmIHRlc3RfcmVxdWlyZXNfaWxsZWdhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEaXN0cmlidXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJwYWNrYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMiOiBbIm15LnBrZyAoc3BsYXQpIl19KQpAQCAtMjE2LDIxICszMDcsMjAgQEAKICAgICAgICAgYXR0cnMgPSB7Im5hbWUiOiAicGFja2FnZSIsCiAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMCIsCiAgICAgICAgICAgICAgICAgICJvYnNvbGV0ZXMiOiBbIm90aGVyIiwgImFub3RoZXIgKDwxLjApIl19Ci0gICAgICAgIGRpc3QgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24oYXR0cnMpCisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oYXR0cnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdC5tZXRhZGF0YS5nZXRfb2Jzb2xldGVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWyJvdGhlciIsICJhbm90aGVyICg8MS4wKSJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3QuZ2V0X29ic29sZXRlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsib3RoZXIiLCAiYW5vdGhlciAoPDEuMCkiXSkKICAgICAgICAgbWV0YSA9IHNlbGYuZm9ybWF0X21ldGFkYXRhKGRpc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiTWV0YWRhdGEtVmVyc2lvbjogMS4xIiBpbiBtZXRhKQotICAgICAgICBzZWxmLmFzc2VydF8oInByb3ZpZGVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJyZXF1aXJlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiT2Jzb2xldGVzOiBvdGhlciIgaW4gbWV0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJPYnNvbGV0ZXM6IGFub3RoZXIgKDwxLjApIiBpbiBtZXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIk1ldGFkYXRhLVZlcnNpb246IDEuMSIgaW4gbWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJwcm92aWRlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicmVxdWlyZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIk9ic29sZXRlczogb3RoZXIiIGluIG1ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiT2Jzb2xldGVzOiBhbm90aGVyICg8MS4wKSIgaW4gbWV0YSkKIAogICAgIGRlZiB0ZXN0X29ic29sZXRlc19pbGxlZ2FsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24sCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERpc3RyaWJ1dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInBhY2thZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYnNvbGV0ZXMiOiBbIm15LnBrZyAoc3BsYXQpIl19KQpAQCAtMjQzLDQ3ICszMzMsNTcgQEAKICAgICBkZWYgdGVzdF9jdXN0b21fcHlkaXN0dXRpbHMoc2VsZik6CiAgICAgICAgICMgZml4ZXMgIzIxNjYKICAgICAgICAgIyBtYWtlIHN1cmUgcHlkaXN0dXRpbHMuY2ZnIGlzIGZvdW5kCi0gICAgICAgIG9sZCA9IHt9Ci0gICAgICAgIGZvciBlbnYgaW4gKCdIT01FJywgJ0hPTUVQQVRIJywgJ0hPTUVEUklWRScpOgotICAgICAgICAgICAgdmFsdWUgPSBvcy5lbnZpcm9uLmdldChlbnYpCi0gICAgICAgICAgICBvbGRbZW52XSA9IHZhbHVlCi0gICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJvbltlbnZdCi0KICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgogICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9ICIucHlkaXN0dXRpbHMuY2ZnIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9ICJweWRpc3R1dGlscy5jZmciCiAKLSAgICAgICAgY3VyZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGN1cmRpciwgdXNlcl9maWxlbmFtZSkKKyAgICAgICAgdGVtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRlbXBfZGlyLCB1c2VyX2ZpbGVuYW1lKQogICAgICAgICBmID0gb3Blbih1c2VyX2ZpbGVuYW1lLCAndycpCi0gICAgICAgIGYud3JpdGUoJy4nKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgnLicpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkaXN0ID0gZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uKCkKKyAgICAgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQogCiAgICAgICAgICAgICAjIGxpbnV4LXN0eWxlCiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdsaW51eCcsICdkYXJ3aW4nKToKLSAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydIT01FJ10gPSBjdXJkaXIKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydIT01FJ10gPSB0ZW1wX2RpcgogICAgICAgICAgICAgICAgIGZpbGVzID0gZGlzdC5maW5kX2NvbmZpZ19maWxlcygpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHVzZXJfZmlsZW5hbWUgaW4gZmlsZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZmlsZW5hbWUgaW4gZmlsZXMpCiAKICAgICAgICAgICAgICMgd2luMzItc3R5bGUKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgICAgICMgaG9tZSBkcml2ZSBzaG91bGQgYmUgZm91bmQKLSAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydIT01FJ10gPSBjdXJkaXIKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydIT01FJ10gPSB0ZW1wX2RpcgogICAgICAgICAgICAgICAgIGZpbGVzID0gZGlzdC5maW5kX2NvbmZpZ19maWxlcygpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHVzZXJfZmlsZW5hbWUgaW4gZmlsZXMsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZmlsZW5hbWUgaW4gZmlsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclciBub3QgZm91bmQgaW4gJXInICUgKHVzZXJfZmlsZW5hbWUsIGZpbGVzKSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIG9sZC5pdGVtcygpOgotICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKICAgICAgICAgICAgIG9zLnJlbW92ZSh1c2VyX2ZpbGVuYW1lKQogCisgICAgZGVmIHRlc3RfZml4X2hlbHBfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgaGVscF90dXBsZXMgPSBbKCdhJywgJ2InLCAnYycsICdkJyksICgxLCAyLCAzLCA0KV0KKyAgICAgICAgZmFuY3lfb3B0aW9ucyA9IGZpeF9oZWxwX29wdGlvbnMoaGVscF90dXBsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmFuY3lfb3B0aW9uc1swXSwgKCdhJywgJ2InLCAnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbmN5X29wdGlvbnNbMV0sICgxLCAyLCAzKSkKKworICAgIGRlZiB0ZXN0X3Nob3dfaGVscChzZWxmKToKKyAgICAgICAgIyBzbW9rZSB0ZXN0LCBqdXN0IG1ha2VzIHN1cmUgc29tZSBoZWxwIGlzIGRpc3BsYXllZAorICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKKyAgICAgICAgc3lzLmFyZ3YgPSBbXQorICAgICAgICBkaXN0LmhlbHAgPSAxCisgICAgICAgIGRpc3Quc2NyaXB0X25hbWUgPSAnc2V0dXAucHknCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgczoKKyAgICAgICAgICAgIGRpc3QucGFyc2VfY29tbWFuZF9saW5lKCkKKworICAgICAgICBvdXRwdXQgPSBbbGluZSBmb3IgbGluZSBpbiBzLmdldHZhbHVlKCkuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKSAhPSAnJ10KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihvdXRwdXQpID4gMCkKKwogICAgIGRlZiB0ZXN0X2xvbmdfZGVzY3JpcHRpb24oc2VsZik6CiAgICAgICAgIGxvbmdfZGVzYyA9IHRleHR3cmFwLmRlZGVudCgiIiJcCiAgICAgICAgIGV4YW1wbGU6OgpAQCAtMjk5LDYgKzM5OSwzMyBAQAogICAgICAgICBtZXRhID0gbWV0YS5yZXBsYWNlKCdcbicgKyA4ICogJyAnLCAnXG4nKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobG9uZ19kZXNjIGluIG1ldGEpCiAKKyAgICBkZWYgdGVzdF9yZWFkX21ldGFkYXRhKHNlbGYpOgorICAgICAgICBhdHRycyA9IHsibmFtZSI6ICJwYWNrYWdlIiwKKyAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIiwKKyAgICAgICAgICAgICAgICAgImxvbmdfZGVzY3JpcHRpb24iOiAiZGVzYyIsCisgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ4eHgiLAorICAgICAgICAgICAgICAgICAiZG93bmxvYWRfdXJsIjogImh0dHA6Ly9leGFtcGxlLmNvbSIsCisgICAgICAgICAgICAgICAgICJrZXl3b3JkcyI6IFsnb25lJywgJ3R3byddLAorICAgICAgICAgICAgICAgICAicmVxdWlyZXMiOiBbJ2ZvbyddfQorCisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oYXR0cnMpCisgICAgICAgIG1ldGFkYXRhID0gZGlzdC5tZXRhZGF0YQorCisgICAgICAgICMgd3JpdGUgaXQgdGhlbiByZWxvYWRzIGl0CisgICAgICAgIFBLR19JTkZPID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBtZXRhZGF0YS53cml0ZV9wa2dfZmlsZShQS0dfSU5GTykKKyAgICAgICAgUEtHX0lORk8uc2VlaygwKQorICAgICAgICBtZXRhZGF0YS5yZWFkX3BrZ19maWxlKFBLR19JTkZPKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEubmFtZSwgInBhY2thZ2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLnZlcnNpb24sICIxLjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLmRlc2NyaXB0aW9uLCAieHh4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5kb3dubG9hZF91cmwsICdodHRwOi8vZXhhbXBsZS5jb20nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLmtleXdvcmRzLCBbJ29uZScsICd0d28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5wbGF0Zm9ybXMsIFsnVU5LTk9XTiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLm9ic29sZXRlcywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5yZXF1aXJlcywgWydmb28nXSkKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCiAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoRGlzdHJpYnV0aW9uVGVzdENhc2UpKQpAQCAtMzA2LDQgKzQzMyw0IEBACiAgICAgcmV0dXJuIHN1aXRlCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZV91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYmNmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZV91dGlsLnB5CkBAIC0wLDAgKzEsODEgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuZmlsZV91dGlsLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKKworZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCBtb3ZlX2ZpbGUsIHdyaXRlX2ZpbGUsIGNvcHlfZmlsZQorZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZworZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitjbGFzcyBGaWxlVXRpbFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfbG9nKHNlbGYsIG1zZywgKmFyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgPiAwOgorICAgICAgICAgICAgc2VsZi5fbG9ncy5hcHBlbmQobXNnICUgYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ3MuYXBwZW5kKG1zZykKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoRmlsZVV0aWxUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLl9sb2dzID0gW10KKyAgICAgICAgc2VsZi5vbGRfbG9nID0gbG9nLmluZm8KKyAgICAgICAgbG9nLmluZm8gPSBzZWxmLl9sb2cKKyAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNlbGYuc291cmNlID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmMScpCisgICAgICAgIHNlbGYudGFyZ2V0ID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmMicpCisgICAgICAgIHNlbGYudGFyZ2V0X2RpciA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZDEnKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBsb2cuaW5mbyA9IHNlbGYub2xkX2xvZworICAgICAgICBzdXBlcihGaWxlVXRpbFRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCisKKyAgICBkZWYgdGVzdF9tb3ZlX2ZpbGVfdmVyYm9zaXR5KHNlbGYpOgorICAgICAgICBmID0gb3BlbihzZWxmLnNvdXJjZSwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCdzb21lIGNvbnRlbnQnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgbW92ZV9maWxlKHNlbGYuc291cmNlLCBzZWxmLnRhcmdldCwgdmVyYm9zZT0wKQorICAgICAgICB3YW50ZWQgPSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKKworICAgICAgICAjIGJhY2sgdG8gb3JpZ2luYWwgc3RhdGUKKyAgICAgICAgbW92ZV9maWxlKHNlbGYudGFyZ2V0LCBzZWxmLnNvdXJjZSwgdmVyYm9zZT0wKQorCisgICAgICAgIG1vdmVfZmlsZShzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXQsIHZlcmJvc2U9MSkKKyAgICAgICAgd2FudGVkID0gWydtb3ZpbmcgJXMgLT4gJXMnICUgKHNlbGYuc291cmNlLCBzZWxmLnRhcmdldCldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgd2FudGVkKQorCisgICAgICAgICMgYmFjayB0byBvcmlnaW5hbCBzdGF0ZQorICAgICAgICBtb3ZlX2ZpbGUoc2VsZi50YXJnZXQsIHNlbGYuc291cmNlLCB2ZXJib3NlPTApCisKKyAgICAgICAgc2VsZi5fbG9ncyA9IFtdCisgICAgICAgICMgbm93IHRoZSB0YXJnZXQgaXMgYSBkaXIKKyAgICAgICAgb3MubWtkaXIoc2VsZi50YXJnZXRfZGlyKQorICAgICAgICBtb3ZlX2ZpbGUoc2VsZi5zb3VyY2UsIHNlbGYudGFyZ2V0X2RpciwgdmVyYm9zZT0xKQorICAgICAgICB3YW50ZWQgPSBbJ21vdmluZyAlcyAtPiAlcycgJSAoc2VsZi5zb3VyY2UsIHNlbGYudGFyZ2V0X2RpcildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgd2FudGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZmlsZShzZWxmKToKKyAgICAgICAgbGluZXMgPSBbJ2EnLCAnYicsICdjJ10KKyAgICAgICAgZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgZm9vID0gb3MucGF0aC5qb2luKGRpciwgJ2ZvbycpCisgICAgICAgIHdyaXRlX2ZpbGUoZm9vLCBsaW5lcykKKyAgICAgICAgY29udGVudCA9IFtsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gb3Blbihmb28pLnJlYWRsaW5lcygpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnQsIGxpbmVzKQorCisgICAgZGVmIHRlc3RfY29weV9maWxlKHNlbGYpOgorICAgICAgICBzcmNfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgZm9vID0gb3MucGF0aC5qb2luKHNyY19kaXIsICdmb28nKQorICAgICAgICB3cml0ZV9maWxlKGZvbywgJ2NvbnRlbnQnKQorICAgICAgICBkc3RfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgY29weV9maWxlKGZvbywgZHN0X2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihkc3RfZGlyLCAnZm9vJykpKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoRmlsZVV0aWxUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVsaXN0LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVsaXN0LnB5CmluZGV4IDFmYWNjZmEuLmJlMTFlYTVkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZWxpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVsaXN0LnB5CkBAIC0xLDIzICsxLDg1IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmZpbGVsaXN0LiIiIgorZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gZGlzdHV0aWxzLmZpbGVsaXN0IGltcG9ydCBnbG9iX3RvX3JlCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAorCitmcm9tIGRpc3R1dGlscy5maWxlbGlzdCBpbXBvcnQgZ2xvYl90b19yZSwgRmlsZUxpc3QKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBkZWJ1ZworCitNQU5JRkVTVF9JTiA9ICIiIlwKK2luY2x1ZGUgb2sKK2luY2x1ZGUgeG8KK2V4Y2x1ZGUgeG8KK2luY2x1ZGUgZm9vLnRtcAorZ2xvYmFsLWluY2x1ZGUgKi54CitnbG9iYWwtaW5jbHVkZSAqLnR4dAorZ2xvYmFsLWV4Y2x1ZGUgKi50bXAKK3JlY3Vyc2l2ZS1pbmNsdWRlIGYgKi5vbworcmVjdXJzaXZlLWV4Y2x1ZGUgZ2xvYmFsICoueAorZ3JhZnQgZGlyCitwcnVuZSBkaXIzCisiIiIKIAogY2xhc3MgRmlsZUxpc3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9nbG9iX3RvX3JlKHNlbGYpOgogICAgICAgICAjIHNpbXBsZSBjYXNlcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnbG9iX3RvX3JlKCdmb28qJyksICdmb29bXi9dKlxcWig/bXMpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ2xvYl90b19yZSgnZm9vPycpLCAnZm9vW14vXVxcWig/bXMpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ2xvYl90b19yZSgnZm9vPz8nKSwgJ2Zvb1teL11bXi9dXFxaKD9tcyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JfdG9fcmUoJ2ZvbyonKSwgJ2Zvb1teL10qXFxaKD9tcyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JfdG9fcmUoJ2Zvbz8nKSwgJ2Zvb1teL11cXFooP21zKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYl90b19yZSgnZm9vPz8nKSwgJ2Zvb1teL11bXi9dXFxaKD9tcyknKQogCiAgICAgICAgICMgc3BlY2lhbCBjYXNlcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnbG9iX3RvX3JlKHInZm9vXFwqJyksIHInZm9vXFxcXFteL10qXFooP21zKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdsb2JfdG9fcmUocidmb29cXFwqJyksIHInZm9vXFxcXFxcW14vXSpcWig/bXMpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ2xvYl90b19yZSgnZm9vPz8/PycpLCByJ2Zvb1teL11bXi9dW14vXVteL11cWig/bXMpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ2xvYl90b19yZShyJ2Zvb1xcPz8nKSwgcidmb29cXFxcW14vXVteL11cWig/bXMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iX3RvX3JlKHInZm9vXFwqJyksIHInZm9vXFxcXFteL10qXFooP21zKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYl90b19yZShyJ2Zvb1xcXConKSwgcidmb29cXFxcXFxbXi9dKlxaKD9tcyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JfdG9fcmUoJ2Zvbz8/Pz8nKSwgcidmb29bXi9dW14vXVteL11bXi9dXFooP21zKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYl90b19yZShyJ2Zvb1xcPz8nKSwgcidmb29cXFxcW14vXVteL11cWig/bXMpJykKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfdGVtcGxhdGVfbGluZShzZWxmKToKKyAgICAgICAgIyB0ZXN0aW5nICBhbGwgTUFOSUZFU1QuaW4gdGVtcGxhdGUgcGF0dGVybnMKKyAgICAgICAgZmlsZV9saXN0ID0gRmlsZUxpc3QoKQorCisgICAgICAgICMgc2ltdWxhdGVkIGZpbGUgbGlzdAorICAgICAgICBmaWxlX2xpc3QuYWxsZmlsZXMgPSBbJ2Zvby50bXAnLCAnb2snLCAneG8nLCAnZm91ci50eHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbignZ2xvYmFsJywgJ29uZS50eHQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4oJ2dsb2JhbCcsICd0d28udHh0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luKCdnbG9iYWwnLCAnZmlsZXMueCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbignZ2xvYmFsJywgJ2hlcmUudG1wJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luKCdmJywgJ28nLCAnZi5vbycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbignZGlyJywgJ2dyYWZ0LW9uZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbignZGlyJywgJ2RpcjInLCAnZ3JhZnQyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luKCdkaXIzJywgJ29rJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luKCdkaXIzJywgJ3N1YicsICdvay50eHQnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgICAgIGZvciBsaW5lIGluIE1BTklGRVNUX0lOLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpID09ICcnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmaWxlX2xpc3QucHJvY2Vzc190ZW1wbGF0ZV9saW5lKGxpbmUpCisKKyAgICAgICAgd2FudGVkID0gWydvaycsICdmb3VyLnR4dCcsIGpvaW4oJ2dsb2JhbCcsICdvbmUudHh0JyksCisgICAgICAgICAgICAgICAgICBqb2luKCdnbG9iYWwnLCAndHdvLnR4dCcpLCBqb2luKCdmJywgJ28nLCAnZi5vbycpLAorICAgICAgICAgICAgICAgICAgam9pbignZGlyJywgJ2dyYWZ0LW9uZScpLCBqb2luKCdkaXInLCAnZGlyMicsICdncmFmdDInKV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgd2FudGVkKQorCisgICAgZGVmIHRlc3RfZGVidWdfcHJpbnQoc2VsZik6CisgICAgICAgIGZpbGVfbGlzdCA9IEZpbGVMaXN0KCkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBmaWxlX2xpc3QuZGVidWdfcHJpbnQoJ3h4eCcpCisgICAgICAgIHN0ZG91dC5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJlYWQoKSwgJycpCisKKyAgICAgICAgZGVidWcuREVCVUcgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgICAgIGZpbGVfbGlzdC5kZWJ1Z19wcmludCgneHh4JykKKyAgICAgICAgICAgIHN0ZG91dC5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICd4eHhcbicpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWJ1Zy5ERUJVRyA9IEZhbHNlCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShGaWxlTGlzdFRlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CmluZGV4IGM4MzRiOTEuLjRmOTc2ZjMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CkBAIC0zLDYgKzMsOCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbCBpbXBvcnQgaW5zdGFsbAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCiAKQEAgLTUyLDQgKzU0LDQgQEAKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEluc3RhbGxUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfZGF0YS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3NTY5NAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2RhdGEucHkKQEAgLTAsMCArMSw3NyBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfZGF0YS4iIiIKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgZ2V0cGFzcworCitmcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfZGF0YSBpbXBvcnQgaW5zdGFsbF9kYXRhCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2NsYXNzIEluc3RhbGxEYXRhVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuRW52aXJvbkd1YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcnVuKHNlbGYpOgorICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGluc3RhbGxfZGF0YShkaXN0KQorICAgICAgICBjbWQuaW5zdGFsbF9kaXIgPSBpbnN0ID0gb3MucGF0aC5qb2luKHBrZ19kaXIsICdpbnN0JykKKworICAgICAgICAjIGRhdGFfZmlsZXMgY2FuIGNvbnRhaW4KKyAgICAgICAgIyAgLSBzaW1wbGUgZmlsZXMKKyAgICAgICAgIyAgLSBhIHR1cGxlIHdpdGggYSBwYXRoLCBhbmQgYSBsaXN0IG9mIGZpbGUKKyAgICAgICAgb25lID0gb3MucGF0aC5qb2luKHBrZ19kaXIsICdvbmUnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUob25lLCAneHh4JykKKyAgICAgICAgaW5zdDIgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2luc3QyJykKKyAgICAgICAgdHdvID0gb3MucGF0aC5qb2luKHBrZ19kaXIsICd0d28nKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUodHdvLCAneHh4JykKKworICAgICAgICBjbWQuZGF0YV9maWxlcyA9IFtvbmUsIChpbnN0MiwgW3R3b10pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5nZXRfaW5wdXRzKCksIFtvbmUsIChpbnN0MiwgW3R3b10pXSkKKworICAgICAgICAjIGxldCdzIHJ1biB0aGUgY29tbWFuZAorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbGV0J3MgY2hlY2sgdGhlIHJlc3VsdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbWQuZ2V0X291dHB1dHMoKSksIDIpCisgICAgICAgIHJ0d28gPSBvcy5wYXRoLnNwbGl0KHR3bylbLTFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW5zdDIsIHJ0d28pKSkKKyAgICAgICAgcm9uZSA9IG9zLnBhdGguc3BsaXQob25lKVstMV0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbnN0LCByb25lKSkpCisgICAgICAgIGNtZC5vdXRmaWxlcyA9IFtdCisKKyAgICAgICAgIyBsZXQncyB0cnkgd2l0aCB3YXJuX2RpciBvbmUKKyAgICAgICAgY21kLndhcm5fZGlyID0gMQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbGV0J3MgY2hlY2sgdGhlIHJlc3VsdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbWQuZ2V0X291dHB1dHMoKSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW5zdDIsIHJ0d28pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbnN0LCByb25lKSkpCisgICAgICAgIGNtZC5vdXRmaWxlcyA9IFtdCisKKyAgICAgICAgIyBub3cgdXNpbmcgcm9vdCBhbmQgZW1wdHkgZGlyCisgICAgICAgIGNtZC5yb290ID0gb3MucGF0aC5qb2luKHBrZ19kaXIsICdyb290JykKKyAgICAgICAgaW5zdDMgPSBvcy5wYXRoLmpvaW4oY21kLmluc3RhbGxfZGlyLCAnaW5zdDMnKQorICAgICAgICBpbnN0NCA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnaW5zdDQnKQorICAgICAgICB0aHJlZSA9IG9zLnBhdGguam9pbihjbWQuaW5zdGFsbF9kaXIsICd0aHJlZScpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSh0aHJlZSwgJ3h4JykKKyAgICAgICAgY21kLmRhdGFfZmlsZXMgPSBbb25lLCAoaW5zdDIsIFt0d29dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCdpbnN0MycsIFt0aHJlZV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5zdDQsIFtdKV0KKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICAjIGxldCdzIGNoZWNrIHRoZSByZXN1bHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY21kLmdldF9vdXRwdXRzKCkpLCA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGluc3QyLCBydHdvKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW5zdCwgcm9uZSkpKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoSW5zdGFsbERhdGFUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfaGVhZGVycy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2hlYWRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3MjI0YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2hlYWRlcnMucHkKQEAgLTAsMCArMSw0MSBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfaGVhZGVycy4iIiIKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgZ2V0cGFzcworCitmcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfaGVhZGVycyBpbXBvcnQgaW5zdGFsbF9oZWFkZXJzCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2NsYXNzIEluc3RhbGxIZWFkZXJzVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuRW52aXJvbkd1YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcnVuKHNlbGYpOgorICAgICAgICAjIHdlIGhhdmUgdHdvIGhlYWRlcnMKKyAgICAgICAgaGVhZGVyX2xpc3QgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBoZWFkZXIxID0gb3MucGF0aC5qb2luKGhlYWRlcl9saXN0LCAnaGVhZGVyMScpCisgICAgICAgIGhlYWRlcjIgPSBvcy5wYXRoLmpvaW4oaGVhZGVyX2xpc3QsICdoZWFkZXIyJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKGhlYWRlcjEpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShoZWFkZXIyKQorICAgICAgICBoZWFkZXJzID0gW2hlYWRlcjEsIGhlYWRlcjJdCisKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoaGVhZGVycz1oZWFkZXJzKQorICAgICAgICBjbWQgPSBpbnN0YWxsX2hlYWRlcnMoZGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZ2V0X2lucHV0cygpLCBoZWFkZXJzKQorCisgICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCisgICAgICAgIGNtZC5pbnN0YWxsX2RpciA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnaW5zdCcpCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBsZXQncyBjaGVjayB0aGUgcmVzdWx0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbWQuZ2V0X291dHB1dHMoKSksIDIpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShJbnN0YWxsSGVhZGVyc1Rlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKaW5kZXggNzg5MjJmNC4uNGQ4NjMwOCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQpAQCAtMSwxNyArMSw4OSBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfZGF0YS4iIiIKLWltcG9ydCBzeXMKIGltcG9ydCBvcworaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9saWIgaW1wb3J0IGluc3RhbGxfbGliCiBmcm9tIGRpc3R1dGlscy5leHRlbnNpb24gaW1wb3J0IEV4dGVuc2lvbgogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzT3B0aW9uRXJyb3IKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBjbGFzcyBJbnN0YWxsTGliVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgorICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGluc3RhbGxfbGliKGRpc3QpCisKKyAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5jb21waWxlLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5vcHRpbWl6ZSwgMCkKKworICAgICAgICAjIG9wdGltaXplIG11c3QgYmUgMCwgMSwgb3IgMgorICAgICAgICBjbWQub3B0aW1pemUgPSAnZm9vJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwgY21kLmZpbmFsaXplX29wdGlvbnMpCisgICAgICAgIGNtZC5vcHRpbWl6ZSA9ICc0JworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwgY21kLmZpbmFsaXplX29wdGlvbnMpCisKKyAgICAgICAgY21kLm9wdGltaXplID0gJzInCisgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQub3B0aW1pemUsIDIpCisKKyAgICBkZWYgX3NldHVwX2J5dGVfY29tcGlsZShzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBpbnN0YWxsX2xpYihkaXN0KQorICAgICAgICBjbWQuY29tcGlsZSA9IGNtZC5vcHRpbWl6ZSA9IDEKKworICAgICAgICBmID0gb3MucGF0aC5qb2luKHBrZ19kaXIsICdmb28ucHknKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZiwgJyMgcHl0aG9uIGZpbGUnKQorICAgICAgICBjbWQuYnl0ZV9jb21waWxlKFtmXSkKKyAgICAgICAgcmV0dXJuIHBrZ19kaXIKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUsICdieXRlLWNvbXBpbGUgbm90IGVuYWJsZWQnKQorICAgIGRlZiB0ZXN0X2J5dGVfY29tcGlsZShzZWxmKToKKyAgICAgICAgcGtnX2RpciA9IHNlbGYuX3NldHVwX2J5dGVfY29tcGlsZSgpCisgICAgICAgIGlmIHN5cy5mbGFncy5vcHRpbWl6ZSA8IDE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBrZ19kaXIsICdmb28ucHljJykpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZm9vLnB5bycpKSkKKworICAgIGRlZiB0ZXN0X2dldF9vdXRwdXRzKHNlbGYpOgorICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGluc3RhbGxfbGliKGRpc3QpCisKKyAgICAgICAgIyBzZXR0aW5nIHVwIGEgZGlzdCBlbnZpcm9ubWVudAorICAgICAgICBjbWQuY29tcGlsZSA9IGNtZC5vcHRpbWl6ZSA9IDEKKyAgICAgICAgY21kLmluc3RhbGxfZGlyID0gcGtnX2RpcgorICAgICAgICBmID0gb3MucGF0aC5qb2luKHBrZ19kaXIsICdmb28ucHknKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZiwgJyMgcHl0aG9uIGZpbGUnKQorICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnB5X21vZHVsZXMgPSBbcGtnX2Rpcl0KKyAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5leHRfbW9kdWxlcyA9IFtFeHRlbnNpb24oJ2ZvbycsIFsneHh4J10pXQorICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnBhY2thZ2VzID0gW3BrZ19kaXJdCisgICAgICAgIGNtZC5kaXN0cmlidXRpb24uc2NyaXB0X25hbWUgPSAnc2V0dXAucHknCisKKyAgICAgICAgIyBnZXRfb3V0cHV0IHNob3VsZCByZXR1cm4gNCBlbGVtZW50cworICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGNtZC5nZXRfb3V0cHV0cygpKSA+PSAyKQorCisgICAgZGVmIHRlc3RfZ2V0X2lucHV0cyhzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBpbnN0YWxsX2xpYihkaXN0KQorCisgICAgICAgICMgc2V0dGluZyB1cCBhIGRpc3QgZW52aXJvbm1lbnQKKyAgICAgICAgY21kLmNvbXBpbGUgPSBjbWQub3B0aW1pemUgPSAxCisgICAgICAgIGNtZC5pbnN0YWxsX2RpciA9IHBrZ19kaXIKKyAgICAgICAgZiA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnZm9vLnB5JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKGYsICcjIHB5dGhvbiBmaWxlJykKKyAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5weV9tb2R1bGVzID0gW3BrZ19kaXJdCisgICAgICAgIGNtZC5kaXN0cmlidXRpb24uZXh0X21vZHVsZXMgPSBbRXh0ZW5zaW9uKCdmb28nLCBbJ3h4eCddKV0KKyAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5wYWNrYWdlcyA9IFtwa2dfZGlyXQorICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JworCisgICAgICAgICMgZ2V0X2lucHV0IHNob3VsZCByZXR1cm4gMiBlbGVtZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbWQuZ2V0X2lucHV0cygpKSwgMikKKwogICAgIGRlZiB0ZXN0X2RvbnRfd3JpdGVfYnl0ZWNvZGUoc2VsZik6CiAgICAgICAgICMgbWFrZXMgc3VyZSBieXRlX2NvbXBpbGUgaXMgbm90IHVzZWQKICAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQpAQCAtMzIsNCArMTA0LDQgQEAKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEluc3RhbGxMaWJUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfc2NyaXB0cy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX3NjcmlwdHMucHkKaW5kZXggZmZmYTZlZi4uNDYwODU0NSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfc2NyaXB0cy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9zY3JpcHRzLnB5CkBAIC03LDYgKzcsNyBAQAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCiAKIGZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogCiBjbGFzcyBJbnN0YWxsU2NyaXB0c1Rlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCkBAIC0yMywxNSArMjQsMTUgQEAKICAgICAgICAgICAgIHNraXBfYnVpbGQ9MSwKICAgICAgICAgICAgICkKICAgICAgICAgY21kID0gaW5zdGFsbF9zY3JpcHRzKGRpc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgY21kLmZvcmNlKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNtZC5za2lwX2J1aWxkKQotICAgICAgICBzZWxmLmFzc2VydF8oY21kLmJ1aWxkX2RpciBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oY21kLmluc3RhbGxfZGlyIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY21kLmZvcmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNtZC5za2lwX2J1aWxkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21kLmJ1aWxkX2RpciBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21kLmluc3RhbGxfZGlyIGlzIE5vbmUpCiAKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWQuZm9yY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWQuc2tpcF9idWlsZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtZC5mb3JjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtZC5za2lwX2J1aWxkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF9kaXIsICIvZm9vL2JhciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmluc3RhbGxfZGlyLCAiL3NwbGF0L2Z1bmsiKQogCkBAIC00Miw4ICs0MywxMCBAQAogICAgICAgICBkZWYgd3JpdGVfc2NyaXB0KG5hbWUsIHRleHQpOgogICAgICAgICAgICAgZXhwZWN0ZWQuYXBwZW5kKG5hbWUpCiAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc291cmNlLCBuYW1lKSwgInciKQotICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICB3cml0ZV9zY3JpcHQoInNjcmlwdDEucHkiLCAoIiMhIC91c3IvYmluL2VudiBweXRob24yLjNcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjIGJvZ3VzIHNjcmlwdCB3LyBQeXRob24gc2gtYmFuZ1xuIgpAQCAtNjksMTEgKzcyLDExIEBACiAKICAgICAgICAgaW5zdGFsbGVkID0gb3MubGlzdGRpcih0YXJnZXQpCiAgICAgICAgIGZvciBuYW1lIGluIGV4cGVjdGVkOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5hbWUgaW4gaW5zdGFsbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgaW4gaW5zdGFsbGVkKQogCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShJbnN0YWxsU2NyaXB0c1Rlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfbXN2Yzljb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9tc3ZjOWNvbXBpbGVyLnB5CmluZGV4IDBjOGJkNmUuLmUxNTVkYmYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9tc3ZjOWNvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9tc3ZjOWNvbXBpbGVyLnB5CkBAIC0xLDIyICsxLDgzIEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLm1zdmM5Y29tcGlsZXIuIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcwogCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAotY2xhc3MgbXN2Yzljb21waWxlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK19NQU5JRkVTVCA9ICIiIlwKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KKzxhc3NlbWJseSB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjEiCisgICAgICAgICAgbWFuaWZlc3RWZXJzaW9uPSIxLjAiPgorICA8dHJ1c3RJbmZvIHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MyI+CisgICAgPHNlY3VyaXR5PgorICAgICAgPHJlcXVlc3RlZFByaXZpbGVnZXM+CisgICAgICAgIDxyZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbCBsZXZlbD0iYXNJbnZva2VyIiB1aUFjY2Vzcz0iZmFsc2UiPgorICAgICAgICA8L3JlcXVlc3RlZEV4ZWN1dGlvbkxldmVsPgorICAgICAgPC9yZXF1ZXN0ZWRQcml2aWxlZ2VzPgorICAgIDwvc2VjdXJpdHk+CisgIDwvdHJ1c3RJbmZvPgorICA8ZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW50QXNzZW1ibHk+CisgICAgICA8YXNzZW1ibHlJZGVudGl0eSB0eXBlPSJ3aW4zMiIgbmFtZT0iTWljcm9zb2Z0LlZDOTAuQ1JUIgorICAgICAgICAgdmVyc2lvbj0iOS4wLjIxMDIyLjgiIHByb2Nlc3NvckFyY2hpdGVjdHVyZT0ieDg2IgorICAgICAgICAgcHVibGljS2V5VG9rZW49IlhYWFgiPgorICAgICAgPC9hc3NlbWJseUlkZW50aXR5PgorICAgIDwvZGVwZW5kZW50QXNzZW1ibHk+CisgIDwvZGVwZW5kZW5jeT4KKyAgPGRlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVudEFzc2VtYmx5PgorICAgICAgPGFzc2VtYmx5SWRlbnRpdHkgdHlwZT0id2luMzIiIG5hbWU9Ik1pY3Jvc29mdC5WQzkwLk1GQyIKKyAgICAgICAgdmVyc2lvbj0iOS4wLjIxMDIyLjgiIHByb2Nlc3NvckFyY2hpdGVjdHVyZT0ieDg2IgorICAgICAgICBwdWJsaWNLZXlUb2tlbj0iWFhYWCI+PC9hc3NlbWJseUlkZW50aXR5PgorICAgIDwvZGVwZW5kZW50QXNzZW1ibHk+CisgIDwvZGVwZW5kZW5jeT4KKzwvYXNzZW1ibHk+CisiIiIKKworX0NMRUFORURfTUFOSUZFU1QgPSAiIiJcCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+Cis8YXNzZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIgorICAgICAgICAgIG1hbmlmZXN0VmVyc2lvbj0iMS4wIj4KKyAgPHRydXN0SW5mbyB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjMiPgorICAgIDxzZWN1cml0eT4KKyAgICAgIDxyZXF1ZXN0ZWRQcml2aWxlZ2VzPgorICAgICAgICA8cmVxdWVzdGVkRXhlY3V0aW9uTGV2ZWwgbGV2ZWw9ImFzSW52b2tlciIgdWlBY2Nlc3M9ImZhbHNlIj4KKyAgICAgICAgPC9yZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbD4KKyAgICAgIDwvcmVxdWVzdGVkUHJpdmlsZWdlcz4KKyAgICA8L3NlY3VyaXR5PgorICA8L3RydXN0SW5mbz4KKyAgPGRlcGVuZGVuY3k+CisKKyAgPC9kZXBlbmRlbmN5PgorICA8ZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW50QXNzZW1ibHk+CisgICAgICA8YXNzZW1ibHlJZGVudGl0eSB0eXBlPSJ3aW4zMiIgbmFtZT0iTWljcm9zb2Z0LlZDOTAuTUZDIgorICAgICAgICB2ZXJzaW9uPSI5LjAuMjEwMjIuOCIgcHJvY2Vzc29yQXJjaGl0ZWN0dXJlPSJ4ODYiCisgICAgICAgIHB1YmxpY0tleVRva2VuPSJYWFhYIj48L2Fzc2VtYmx5SWRlbnRpdHk+CisgICAgPC9kZXBlbmRlbnRBc3NlbWJseT4KKyAgPC9kZXBlbmRlbmN5PgorPC9hc3NlbWJseT4iIiIKKworaWYgc3lzLnBsYXRmb3JtPT0id2luMzIiOgorICAgIGZyb20gZGlzdHV0aWxzLm1zdmNjb21waWxlciBpbXBvcnQgZ2V0X2J1aWxkX3ZlcnNpb24KKyAgICBpZiBnZXRfYnVpbGRfdmVyc2lvbigpPj04LjA6CisgICAgICAgIFNLSVBfTUVTU0FHRSA9IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBTS0lQX01FU1NBR0UgPSAiVGhlc2UgdGVzdHMgYXJlIG9ubHkgZm9yIE1TVkM4LjAgb3IgYWJvdmUiCitlbHNlOgorICAgIFNLSVBfTUVTU0FHRSA9ICJUaGVzZSB0ZXN0cyBhcmUgb25seSBmb3Igd2luMzIiCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKFNLSVBfTUVTU0FHRSBpcyBOb25lLCBTS0lQX01FU1NBR0UpCitjbGFzcyBtc3ZjOWNvbXBpbGVyVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9ub19jb21waWxlcihzZWxmKToKICAgICAgICAgIyBtYWtlcyBzdXJlIHF1ZXJ5X3ZjdmFyc2FsbCB0aHJvd3MKICAgICAgICAgIyBhIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IgaWYgdGhlIGNvbXBpbGVyCiAgICAgICAgICMgaXMgbm90IGZvdW5kCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgotICAgICAgICAgICAgIyB0aGlzIHRlc3QgaXMgb25seSBmb3Igd2luMzIKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBmcm9tIGRpc3R1dGlscy5tc3ZjY29tcGlsZXIgaW1wb3J0IGdldF9idWlsZF92ZXJzaW9uCi0gICAgICAgIGlmIGdldF9idWlsZF92ZXJzaW9uKCkgPCA4LjA6Ci0gICAgICAgICAgICAjIHRoaXMgdGVzdCBpcyBvbmx5IGZvciBNU1ZDOC4wIG9yIGFib3ZlCi0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZnJvbSBkaXN0dXRpbHMubXN2Yzljb21waWxlciBpbXBvcnQgcXVlcnlfdmN2YXJzYWxsCiAgICAgICAgIGRlZiBfZmluZF92Y3ZhcnNhbGwodmVyc2lvbik6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQpAQCAtMzAsOCArOTEsNTEgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG1zdmM5Y29tcGlsZXIuZmluZF92Y3ZhcnNhbGwgPSBvbGRfZmluZF92Y3ZhcnNhbGwKIAorICAgIGRlZiB0ZXN0X3JlZ19jbGFzcyhzZWxmKToKKyAgICAgICAgZnJvbSBkaXN0dXRpbHMubXN2Yzljb21waWxlciBpbXBvcnQgUmVnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBSZWcuZ2V0X3ZhbHVlLCAneHh4JywgJ3h4eCcpCisKKyAgICAgICAgIyBsb29raW5nIGZvciB2YWx1ZXMgdGhhdCBzaG91bGQgZXhpc3Qgb24gYWxsCisgICAgICAgICMgd2luZG93cyByZWdpc3RlcmllcyB2ZXJzaW9ucy4KKyAgICAgICAgcGF0aCA9IHInQ29udHJvbCBQYW5lbFxEZXNrdG9wJworICAgICAgICB2ID0gUmVnLmdldF92YWx1ZShwYXRoLCB1J2RyYWdmdWxsd2luZG93cycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGluICh1JzAnLCB1JzEnLCB1JzInKSkKKworICAgICAgICBpbXBvcnQgX3dpbnJlZworICAgICAgICBIS0NVID0gX3dpbnJlZy5IS0VZX0NVUlJFTlRfVVNFUgorICAgICAgICBrZXlzID0gUmVnLnJlYWRfa2V5cyhIS0NVLCAneHh4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgTm9uZSkKKworICAgICAgICBrZXlzID0gUmVnLnJlYWRfa2V5cyhIS0NVLCByJ0NvbnRyb2wgUGFuZWwnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0Rlc2t0b3AnIGluIGtleXMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfdmlzdWFsX2NfcmVmKHNlbGYpOgorICAgICAgICBmcm9tIGRpc3R1dGlscy5tc3ZjOWNvbXBpbGVyIGltcG9ydCBNU1ZDQ29tcGlsZXIKKyAgICAgICAgdGVtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIG1hbmlmZXN0ID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdtYW5pZmVzdCcpCisgICAgICAgIGYgPSBvcGVuKG1hbmlmZXN0LCAndycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoX01BTklGRVNUKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgY29tcGlsZXIgPSBNU1ZDQ29tcGlsZXIoKQorICAgICAgICBjb21waWxlci5fcmVtb3ZlX3Zpc3VhbF9jX3JlZihtYW5pZmVzdCkKKworICAgICAgICAjIHNlZSB3aGF0IHdlIGdvdAorICAgICAgICBmID0gb3BlbihtYW5pZmVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyByZW1vdmluZyB0cmFpbGluZyBzcGFjZXMKKyAgICAgICAgICAgIGNvbnRlbnQgPSAnXG4nLmpvaW4oW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKV0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIG1ha2VzIHN1cmUgdGhlIG1hbmlmZXN0IHdhcyBwcm9wZXJseSBjbGVhbmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudCwgX0NMRUFORURfTUFOSUZFU1QpCisKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKG1zdmM5Y29tcGlsZXJUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3JlZ2lzdGVyLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3JlZ2lzdGVyLnB5CmluZGV4IDNhM2EzYjcuLmRkNjBmOGMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9yZWdpc3Rlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfcmVnaXN0ZXIucHkKQEAgLTEsMTQgKzEsNDIgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5yZWdpc3Rlci4iIiIKKyMgLSotIGVuY29kaW5nOiB1dGY4IC0qLQogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBnZXRwYXNzCitpbXBvcnQgdXJsbGliMgoraW1wb3J0IHdhcm5pbmdzCiAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QKKworZnJvbSBkaXN0dXRpbHMuY29tbWFuZCBpbXBvcnQgcmVnaXN0ZXIgYXMgcmVnaXN0ZXJfbW9kdWxlCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLnJlZ2lzdGVyIGltcG9ydCByZWdpc3RlcgogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1NldHVwRXJyb3IKIAogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKIGZyb20gZGlzdHV0aWxzLnRlc3RzLnRlc3RfY29uZmlnIGltcG9ydCBQWVBJUkMsIFB5UElSQ0NvbW1hbmRUZXN0Q2FzZQogCitQWVBJUkNfTk9QQVNTV09SRCA9ICIiIlwKK1tkaXN0dXRpbHNdCisKK2luZGV4LXNlcnZlcnMgPQorICAgIHNlcnZlcjEKKworW3NlcnZlcjFdCit1c2VybmFtZTptZQorIiIiCisKK1dBTlRFRF9QWVBJUkMgPSAiIiJcCitbZGlzdHV0aWxzXQoraW5kZXgtc2VydmVycyA9CisgICAgcHlwaQorCitbcHlwaV0KK3VzZXJuYW1lOnRhcmVrCitwYXNzd29yZDpwYXNzd29yZAorIiIiCisKIGNsYXNzIFJhd0lucHV0cyhvYmplY3QpOgogICAgICIiIkZha2VzIHVzZXIgaW5wdXRzLiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYW5zd2Vycyk6CkBAIC0yMSwzNCArNDksNTUgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQogCi1XQU5URURfUFlQSVJDID0gIiIiXAotW2Rpc3R1dGlsc10KLWluZGV4LXNlcnZlcnMgPQotICAgIHB5cGkKK2NsYXNzIEZha2VPcGVuZXIob2JqZWN0KToKKyAgICAiIiJGYWtlcyBhIFB5UEkgc2VydmVyIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlcXMgPSBbXQogCi1bcHlwaV0KLXVzZXJuYW1lOnRhcmVrCi1wYXNzd29yZDp4eHgKLSIiIgorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzZWxmCiAKLWNsYXNzIHJlZ2lzdGVyVGVzdENhc2UoUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKKyAgICBkZWYgb3BlbihzZWxmLCByZXEpOgorICAgICAgICBzZWxmLnJlcXMuYXBwZW5kKHJlcSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3h4eCcKKworY2xhc3MgUmVnaXN0ZXJUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihSZWdpc3RlclRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCisgICAgICAgICMgcGF0Y2hpbmcgdGhlIHBhc3N3b3JkIHByb21wdAorICAgICAgICBzZWxmLl9vbGRfZ2V0cGFzcyA9IGdldHBhc3MuZ2V0cGFzcworICAgICAgICBkZWYgX2dldHBhc3MocHJvbXB0KToKKyAgICAgICAgICAgIHJldHVybiAncGFzc3dvcmQnCisgICAgICAgIGdldHBhc3MuZ2V0cGFzcyA9IF9nZXRwYXNzCisgICAgICAgIHNlbGYub2xkX29wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyCisgICAgICAgIHNlbGYuY29ubiA9IHVybGxpYjIuYnVpbGRfb3BlbmVyID0gRmFrZU9wZW5lcigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGdldHBhc3MuZ2V0cGFzcyA9IHNlbGYuX29sZF9nZXRwYXNzCisgICAgICAgIHVybGxpYjIuYnVpbGRfb3BlbmVyID0gc2VsZi5vbGRfb3BlbmVyCisgICAgICAgIHN1cGVyKFJlZ2lzdGVyVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKKworICAgIGRlZiBfZ2V0X2NtZChzZWxmLCBtZXRhZGF0YT1Ob25lKToKKyAgICAgICAgaWYgbWV0YWRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICd4eHgnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAneHh4JywgJ3ZlcnNpb24nOiAneHh4J30KKyAgICAgICAgcGtnX2luZm8sIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCoqbWV0YWRhdGEpCisgICAgICAgIHJldHVybiByZWdpc3RlcihkaXN0KQogCiAgICAgZGVmIHRlc3RfY3JlYXRlX3B5cGlyYyhzZWxmKToKICAgICAgICAgIyB0aGlzIHRlc3QgbWFrZXMgc3VyZSBhIC5weXBpcmMgZmlsZQogICAgICAgICAjIGlzIGNyZWF0ZWQgd2hlbiByZXF1ZXN0ZWQuCiAKLSAgICAgICAgIyBsZXQncyBjcmVhdGUgYSBmYWtlIGRpc3RyaWJ1dGlvbgotICAgICAgICAjIGFuZCBhIHJlZ2lzdGVyIGluc3RhbmNlCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQotICAgICAgICBkaXN0Lm1ldGFkYXRhLnVybCA9ICd4eHgnCi0gICAgICAgIGRpc3QubWV0YWRhdGEuYXV0aG9yID0gJ3h4eCcKLSAgICAgICAgZGlzdC5tZXRhZGF0YS5hdXRob3JfZW1haWwgPSAneHh4JwotICAgICAgICBkaXN0Lm1ldGFkYXRhLm5hbWUgPSAneHh4JwotICAgICAgICBkaXN0Lm1ldGFkYXRhLnZlcnNpb24gPSAgJ3h4eCcKLSAgICAgICAgY21kID0gcmVnaXN0ZXIoZGlzdCkKKyAgICAgICAgIyBsZXQncyBjcmVhdGUgYSByZWdpc3RlciBpbnN0YW5jZQorICAgICAgICBjbWQgPSBzZWxmLl9nZXRfY21kKCkKIAogICAgICAgICAjIHdlIHNob3VsZG4ndCBoYXZlIGEgLnB5cGlyYyBmaWxlIHlldAotICAgICAgICBzZWxmLmFzc2VydF8obm90IG9zLnBhdGguZXhpc3RzKHNlbGYucmMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHNlbGYucmMpKQogCiAgICAgICAgICMgcGF0Y2hpbmcgcmF3X2lucHV0IGFuZCBnZXRwYXNzLmdldHBhc3MKICAgICAgICAgIyBzbyByZWdpc3RlciBnZXRzIGhhcHB5CkBAIC01NiwzNyArMTA1LDI2IEBACiAgICAgICAgICMgSGVyZSdzIHdoYXQgd2UgYXJlIGZha2luZyA6CiAgICAgICAgICMgdXNlIHlvdXIgZXhpc3RpbmcgbG9naW4gKGNob2ljZSAxLikKICAgICAgICAgIyBVc2VybmFtZSA6ICd0YXJlaycKLSAgICAgICAgIyBQYXNzd29yZCA6ICd4eHgnCisgICAgICAgICMgUGFzc3dvcmQgOiAncGFzc3dvcmQnCiAgICAgICAgICMgU2F2ZSB5b3VyIGxvZ2luICh5L04pPyA6ICd5JwogICAgICAgICBpbnB1dHMgPSBSYXdJbnB1dHMoJzEnLCAndGFyZWsnLCAneScpCi0gICAgICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQgaW1wb3J0IHJlZ2lzdGVyIGFzIHJlZ2lzdGVyX21vZHVsZQogICAgICAgICByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0ID0gaW5wdXRzLl9fY2FsbF9fCi0gICAgICAgIGRlZiBfZ2V0cGFzcyhwcm9tcHQpOgotICAgICAgICAgICAgcmV0dXJuICd4eHgnCi0gICAgICAgIHJlZ2lzdGVyX21vZHVsZS5nZXRwYXNzLmdldHBhc3MgPSBfZ2V0cGFzcwotICAgICAgICBjbGFzcyBGYWtlU2VydmVyKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICAgICAgICAgc2VsZi5jYWxscyA9IFtdCi0KLSAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgICAgICAgICAgIyB3ZSB3YW50IHRvIGNvbXBhcmUgdGhlbSwgc28gbGV0J3Mgc3RvcmUKLSAgICAgICAgICAgICAgICAjIHNvbWV0aGluZyBjb21wYXJhYmxlCi0gICAgICAgICAgICAgICAgZWxzID0gYXJnc1swXS5pdGVtcygpCi0gICAgICAgICAgICAgICAgZWxzLnNvcnQoKQotICAgICAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKHR1cGxlKGVscykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDIwMCwgJ09LJwotCi0gICAgICAgIGNtZC5wb3N0X3RvX3NlcnZlciA9IHB5cGlfc2VydmVyID0gRmFrZVNlcnZlcigpCi0KICAgICAgICAgIyBsZXQncyBydW4gdGhlIGNvbW1hbmQKLSAgICAgICAgY21kLnJ1bigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZC5ydW4oKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHJlZ2lzdGVyX21vZHVsZS5yYXdfaW5wdXQKIAogICAgICAgICAjIHdlIHNob3VsZCBoYXZlIGEgYnJhbmQgbmV3IC5weXBpcmMgZmlsZQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMoc2VsZi5yYykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnJjKSkKIAogICAgICAgICAjIHdpdGggdGhlIGNvbnRlbnQgc2ltaWxhciB0byBXQU5URURfUFlQSVJDCi0gICAgICAgIGNvbnRlbnQgPSBvcGVuKHNlbGYucmMpLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50LCBXQU5URURfUFlQSVJDKQorICAgICAgICBmID0gb3BlbihzZWxmLnJjKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudCwgV0FOVEVEX1BZUElSQykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgICAgICMgbm93IGxldCdzIG1ha2Ugc3VyZSB0aGUgLnB5cGlyYyBmaWxlIGdlbmVyYXRlZAogICAgICAgICAjIHJlYWxseSB3b3JrcyA6IHdlIHNob3VsZG4ndCBiZSBhc2tlZCBhbnl0aGluZwpAQCAtOTUsMTUgKzEzMywxMjkgQEAKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKHByb21wdCkKICAgICAgICAgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dCA9IF9ub193YXkKIAorICAgICAgICBjbWQuc2hvd19yZXNwb25zZSA9IDEKICAgICAgICAgY21kLnJ1bigpCiAKICAgICAgICAgIyBsZXQncyBzZWUgd2hhdCB0aGUgc2VydmVyIHJlY2VpdmVkIDogd2Ugc2hvdWxkCiAgICAgICAgICMgaGF2ZSAyIHNpbWlsYXIgcmVxdWVzdHMKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihweXBpX3NlcnZlci5jYWxscyksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhweXBpX3NlcnZlci5jYWxsc1swXSwgcHlwaV9zZXJ2ZXIuY2FsbHNbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbm4ucmVxcywgMikKKyAgICAgICAgcmVxMSA9IGRpY3Qoc2VsZi5jb25uLnJlcXNbMF0uaGVhZGVycykKKyAgICAgICAgcmVxMiA9IGRpY3Qoc2VsZi5jb25uLnJlcXNbMV0uaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEyWydDb250ZW50LWxlbmd0aCddLCByZXExWydDb250ZW50LWxlbmd0aCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3h4eCcgaW4gc2VsZi5jb25uLnJlcXNbMV0uZGF0YSkKKworICAgIGRlZiB0ZXN0X3Bhc3N3b3JkX25vdF9pbl9maWxlKHNlbGYpOgorCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShzZWxmLnJjLCBQWVBJUkNfTk9QQVNTV09SRCkKKyAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZCgpCisgICAgICAgIGNtZC5fc2V0X2NvbmZpZygpCisgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKKyAgICAgICAgY21kLnNlbmRfbWV0YWRhdGEoKQorCisgICAgICAgICMgZGlzdC5wYXNzd29yZCBzaG91bGQgYmUgc2V0CisgICAgICAgICMgdGhlcmVmb3JlIHVzZWQgYWZ0ZXJ3YXJkcyBieSBvdGhlciBjb21tYW5kcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5kaXN0cmlidXRpb24ucGFzc3dvcmQsICdwYXNzd29yZCcpCisKKyAgICBkZWYgdGVzdF9yZWdpc3RlcmluZyhzZWxmKToKKyAgICAgICAgIyB0aGlzIHRlc3QgcnVucyBjaG9pY2UgMgorICAgICAgICBjbWQgPSBzZWxmLl9nZXRfY21kKCkKKyAgICAgICAgaW5wdXRzID0gUmF3SW5wdXRzKCcyJywgJ3RhcmVrJywgJ3RhcmVrQHppYWRlLm9yZycpCisgICAgICAgIHJlZ2lzdGVyX21vZHVsZS5yYXdfaW5wdXQgPSBpbnB1dHMuX19jYWxsX18KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBsZXQncyBydW4gdGhlIGNvbW1hbmQKKyAgICAgICAgICAgIGNtZC5ydW4oKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHJlZ2lzdGVyX21vZHVsZS5yYXdfaW5wdXQKKworICAgICAgICAjIHdlIHNob3VsZCBoYXZlIHNlbmQgYSByZXF1ZXN0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbm4ucmVxcywgMSkKKyAgICAgICAgcmVxID0gc2VsZi5jb25uLnJlcXNbMF0KKyAgICAgICAgaGVhZGVycyA9IGRpY3QocmVxLmhlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhZGVyc1snQ29udGVudC1sZW5ndGgnXSwgJzYwOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndGFyZWsnIGluIHJlcS5kYXRhKQorCisgICAgZGVmIHRlc3RfcGFzc3dvcmRfcmVzZXQoc2VsZik6CisgICAgICAgICMgdGhpcyB0ZXN0IHJ1bnMgY2hvaWNlIDMKKyAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZCgpCisgICAgICAgIGlucHV0cyA9IFJhd0lucHV0cygnMycsICd0YXJla0B6aWFkZS5vcmcnKQorICAgICAgICByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0ID0gaW5wdXRzLl9fY2FsbF9fCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCisgICAgICAgICAgICBjbWQucnVuKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0CisKKyAgICAgICAgIyB3ZSBzaG91bGQgaGF2ZSBzZW5kIGEgcmVxdWVzdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jb25uLnJlcXMsIDEpCisgICAgICAgIHJlcSA9IHNlbGYuY29ubi5yZXFzWzBdCisgICAgICAgIGhlYWRlcnMgPSBkaWN0KHJlcS5oZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnNbJ0NvbnRlbnQtbGVuZ3RoJ10sICcyOTAnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3RhcmVrJyBpbiByZXEuZGF0YSkKKworICAgIGRlZiB0ZXN0X3N0cmljdChzZWxmKToKKyAgICAgICAgIyB0ZXN0aW5nIHRoZSBzY3JpcHQgb3B0aW9uCisgICAgICAgICMgd2hlbiBvbiwgdGhlIHJlZ2lzdGVyIGNvbW1hbmQgc3RvcHMgaWYKKyAgICAgICAgIyB0aGUgbWV0YWRhdGEgaXMgaW5jb21wbGV0ZSBvciBpZgorICAgICAgICAjIGxvbmdfZGVzY3JpcHRpb24gaXMgbm90IHJlU3QgY29tcGxpYW50CisKKyAgICAgICAgIyBlbXB0eSBtZXRhZGF0YQorICAgICAgICBjbWQgPSBzZWxmLl9nZXRfY21kKHt9KQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5zdHJpY3QgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5ydW4pCisKKyAgICAgICAgIyB3ZSBkb24ndCB0ZXN0IHRoZSByZVN0IGZlYXR1cmUgaWYgZG9jdXRpbHMKKyAgICAgICAgIyBpcyBub3QgaW5zdGFsbGVkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBkb2N1dGlscworICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIG1ldGFkYXRhIGFyZSBPSyBidXQgbG9uZ19kZXNjcmlwdGlvbiBpcyBicm9rZW4KKyAgICAgICAgbWV0YWRhdGEgPSB7J3VybCc6ICd4eHgnLCAnYXV0aG9yJzogJ3h4eCcsCisgICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiB1J8OpeMOpeMOpJywKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAneHh4JywgJ3ZlcnNpb24nOiAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgJ2xvbmdfZGVzY3JpcHRpb24nOiAndGl0bGVcbj09XG5cbnRleHQnfQorCisgICAgICAgIGNtZCA9IHNlbGYuX2dldF9jbWQobWV0YWRhdGEpCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnN0cmljdCA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLnJ1bikKKworICAgICAgICAjIG5vdyBzb21ldGhpbmcgdGhhdCB3b3JrcworICAgICAgICBtZXRhZGF0YVsnbG9uZ19kZXNjcmlwdGlvbiddID0gJ3RpdGxlXG49PT09PVxuXG50ZXh0JworICAgICAgICBjbWQgPSBzZWxmLl9nZXRfY21kKG1ldGFkYXRhKQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5zdHJpY3QgPSAxCisgICAgICAgIGlucHV0cyA9IFJhd0lucHV0cygnMScsICd0YXJlaycsICd5JykKKyAgICAgICAgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dCA9IGlucHV0cy5fX2NhbGxfXworICAgICAgICAjIGxldCdzIHJ1biB0aGUgY29tbWFuZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQucnVuKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0CisKKyAgICAgICAgIyBzdHJpY3QgaXMgbm90IGJ5IGRlZmF1bHQKKyAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZCgpCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgaW5wdXRzID0gUmF3SW5wdXRzKCcxJywgJ3RhcmVrJywgJ3knKQorICAgICAgICByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0ID0gaW5wdXRzLl9fY2FsbF9fCisgICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZC5ydW4oKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHJlZ2lzdGVyX21vZHVsZS5yYXdfaW5wdXQKKworICAgIGRlZiB0ZXN0X2NoZWNrX21ldGFkYXRhX2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgICMgbWFrZXMgc3VyZSBtYWtlX21ldGFkYXRhIGlzIGRlcHJlY2F0ZWQKKyAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZCgpCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQorICAgICAgICAgICAgY21kLmNoZWNrX21ldGFkYXRhKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUocmVnaXN0ZXJUZXN0Q2FzZSkKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFJlZ2lzdGVyVGVzdENhc2UpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQppbmRleCBlMzIyYzEzLi5hYjhjM2Q5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CkBAIC0zLDE0ICszLDM3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB6aXBmaWxlCitpbXBvcnQgdGFyZmlsZQorCisjIHpsaWIgaXMgbm90IHVzZWQgaGVyZSwgYnV0IGlmIGl0J3Mgbm90IGF2YWlsYWJsZQorIyB0aGUgdGVzdHMgdGhhdCB1c2UgemlwZmlsZSBtYXkgZmFpbAordHJ5OgorICAgIGltcG9ydCB6bGliCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgemxpYiA9IE5vbmUKKwordHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCisKIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgogaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgd2FybmluZ3MKIAotZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5zZGlzdCBpbXBvcnQgc2Rpc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dCwgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdAorCitmcm9tIGRpc3R1dGlscy5jb21tYW5kLnNkaXN0IGltcG9ydCBzZGlzdCwgc2hvd19mb3JtYXRzCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KIGZyb20gZGlzdHV0aWxzLnRlc3RzLnRlc3RfY29uZmlnIGltcG9ydCBQeVBJUkNDb21tYW5kVGVzdENhc2UKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvciwgRGlzdHV0aWxzT3B0aW9uRXJyb3IKIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IFdBUk4KK2Zyb20gZGlzdHV0aWxzLmFyY2hpdmVfdXRpbCBpbXBvcnQgQVJDSElWRV9GT1JNQVRTCiAKIFNFVFVQX1BZID0gIiIiCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cApAQCAtMTksODIgKzQyLDkwIEBACiBzZXR1cChuYW1lPSdmYWtlJykKICIiIgogCi1NQU5JRkVTVF9JTiA9ICIiIgotcmVjdXJzaXZlLWluY2x1ZGUgc29tZWNvZGUgKgorTUFOSUZFU1QgPSAiIiJcCisjIGZpbGUgR0VORVJBVEVEIGJ5IGRpc3R1dGlscywgZG8gTk9UIGVkaXQKK1JFQURNRQoraW5yb290LnR4dAorc2V0dXAucHkKK2RhdGElKHNlcClzZGF0YS5kdAorc2NyaXB0cyUoc2VwKXNzY3JpcHQucHkKK3NvbWUlKHNlcClzZmlsZS50eHQKK3NvbWUlKHNlcClzb3RoZXJfZmlsZS50eHQKK3NvbWVjb2RlJShzZXApc19faW5pdF9fLnB5Citzb21lY29kZSUoc2VwKXNkb2MuZGF0Citzb21lY29kZSUoc2VwKXNkb2MudHh0CiAiIiIKIAotY2xhc3Mgc2Rpc3RUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgorY2xhc3MgU0Rpc3RUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdXBlcihzZGlzdFRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCisgICAgICAgICMgUHlQSVJDQ29tbWFuZFRlc3RDYXNlIGNyZWF0ZXMgYSB0ZW1wIGRpciBhbHJlYWR5CisgICAgICAgICMgYW5kIHB1dCBpdCBpbiBzZWxmLnRtcF9kaXIKKyAgICAgICAgc3VwZXIoU0Rpc3RUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQorICAgICAgICAjIHNldHRpbmcgdXAgYW4gZW52aXJvbm1lbnQKICAgICAgICAgc2VsZi5vbGRfcGF0aCA9IG9zLmdldGN3ZCgpCi0gICAgICAgIHNlbGYudGVtcF9wa2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCksICd0ZW1wcGtnJykKKyAgICAgICAgb3MubWtkaXIoam9pbihzZWxmLnRtcF9kaXIsICdzb21lY29kZScpKQorICAgICAgICBvcy5ta2Rpcihqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnKSkKKyAgICAgICAgIyBhIHBhY2thZ2UsIGFuZCBhIFJFQURNRQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ1JFQURNRScpLCAneHh4JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICdfX2luaXRfXy5weScpLCAnIycpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnc2V0dXAucHknKSwgU0VUVVBfUFkpCisgICAgICAgIG9zLmNoZGlyKHNlbGYudG1wX2RpcikKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBiYWNrIHRvIG5vcm1hbAogICAgICAgICBvcy5jaGRpcihzZWxmLm9sZF9wYXRoKQotICAgICAgICBzdXBlcihzZGlzdFRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCisgICAgICAgIHN1cGVyKFNEaXN0VGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKIAotICAgIGRlZiBfaW5pdF90bXBfcGtnKHNlbGYpOgotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnRlbXBfcGtnKToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50ZW1wX3BrZykKLSAgICAgICAgb3MubWtkaXIoc2VsZi50ZW1wX3BrZykKLSAgICAgICAgb3MubWtkaXIoam9pbihzZWxmLnRlbXBfcGtnLCAnc29tZWNvZGUnKSkKLSAgICAgICAgb3MubWtkaXIoam9pbihzZWxmLnRlbXBfcGtnLCAnZGlzdCcpKQotICAgICAgICAjIGNyZWF0aW5nIGEgTUFOSUZFU1QsIGEgcGFja2FnZSwgYW5kIGEgUkVBRE1FCi0gICAgICAgIHNlbGYuX3dyaXRlKGpvaW4oc2VsZi50ZW1wX3BrZywgJ01BTklGRVNULmluJyksIE1BTklGRVNUX0lOKQotICAgICAgICBzZWxmLl93cml0ZShqb2luKHNlbGYudGVtcF9wa2csICdSRUFETUUnKSwgJ3h4eCcpCi0gICAgICAgIHNlbGYuX3dyaXRlKGpvaW4oc2VsZi50ZW1wX3BrZywgJ3NvbWVjb2RlJywgJ19faW5pdF9fLnB5JyksICcjJykKLSAgICAgICAgc2VsZi5fd3JpdGUoam9pbihzZWxmLnRlbXBfcGtnLCAnc2V0dXAucHknKSwgU0VUVVBfUFkpCi0gICAgICAgIG9zLmNoZGlyKHNlbGYudGVtcF9wa2cpCisgICAgZGVmIGdldF9jbWQoc2VsZiwgbWV0YWRhdGE9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgYSBjbWQiIiIKKyAgICAgICAgaWYgbWV0YWRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIG1ldGFkYXRhID0geyduYW1lJzogJ2Zha2UnLCAndmVyc2lvbic6ICcxLjAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICd4eHgnLCAnYXV0aG9yJzogJ3h4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ3h4eCd9CisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24obWV0YWRhdGEpCisgICAgICAgIGRpc3Quc2NyaXB0X25hbWUgPSAnc2V0dXAucHknCisgICAgICAgIGRpc3QucGFja2FnZXMgPSBbJ3NvbWVjb2RlJ10KKyAgICAgICAgZGlzdC5pbmNsdWRlX3BhY2thZ2VfZGF0YSA9IFRydWUKKyAgICAgICAgY21kID0gc2Rpc3QoZGlzdCkKKyAgICAgICAgY21kLmRpc3RfZGlyID0gJ2Rpc3QnCisgICAgICAgIGRlZiBfd2FybigqYXJncyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNtZC53YXJuID0gX3dhcm4KKyAgICAgICAgcmV0dXJuIGRpc3QsIGNtZAogCi0gICAgZGVmIF93cml0ZShzZWxmLCBwYXRoLCBjb250ZW50KToKLSAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3cnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKGNvbnRlbnQpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKICAgICBkZWYgdGVzdF9wcnVuZV9maWxlX2xpc3Qoc2VsZik6CiAgICAgICAgICMgdGhpcyB0ZXN0IGNyZWF0ZXMgYSBwYWNrYWdlIHdpdGggc29tZSB2Y3MgZGlycyBpbiBpdAogICAgICAgICAjIGFuZCBsYXVuY2ggc2Rpc3QgdG8gbWFrZSBzdXJlIHRoZXkgZ2V0IHBydW5lZAogICAgICAgICAjIG9uIGFsbCBzeXN0ZW1zCi0gICAgICAgIHNlbGYuX2luaXRfdG1wX3BrZygpCiAKICAgICAgICAgIyBjcmVhdGluZyBWQ1MgZGlyZWN0b3JpZXMgd2l0aCBzb21lIGZpbGVzIGluIHRoZW0KLSAgICAgICAgb3MubWtkaXIoam9pbihzZWxmLnRlbXBfcGtnLCAnc29tZWNvZGUnLCAnLnN2bicpKQotICAgICAgICBzZWxmLl93cml0ZShqb2luKHNlbGYudGVtcF9wa2csICdzb21lY29kZScsICcuc3ZuJywgJ29rLnB5JyksICd4eHgnKQorICAgICAgICBvcy5ta2Rpcihqb2luKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJy5zdm4nKSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcuc3ZuJywgJ29rLnB5JyksICd4eHgnKQogCi0gICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50ZW1wX3BrZywgJ3NvbWVjb2RlJywgJy5oZycpKQotICAgICAgICBzZWxmLl93cml0ZShqb2luKHNlbGYudGVtcF9wa2csICdzb21lY29kZScsICcuaGcnLAorICAgICAgICBvcy5ta2Rpcihqb2luKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJy5oZycpKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJy5oZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ29rJyksICd4eHgnKQogCi0gICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50ZW1wX3BrZywgJ3NvbWVjb2RlJywgJy5naXQnKSkKLSAgICAgICAgc2VsZi5fd3JpdGUoam9pbihzZWxmLnRlbXBfcGtnLCAnc29tZWNvZGUnLCAnLmdpdCcsCisgICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnLmdpdCcpKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJy5naXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdvaycpLCAneHh4JykKIAogICAgICAgICAjIG5vdyBidWlsZGluZyBhIHNkaXN0Ci0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQotICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JwotICAgICAgICBkaXN0Lm1ldGFkYXRhLm5hbWUgPSAnZmFrZScKLSAgICAgICAgZGlzdC5tZXRhZGF0YS52ZXJzaW9uID0gJzEuMCcKLSAgICAgICAgZGlzdC5tZXRhZGF0YS51cmwgPSAnaHR0cDovL3h4eCcKLSAgICAgICAgZGlzdC5tZXRhZGF0YS5hdXRob3IgPSBkaXN0Lm1ldGFkYXRhLmF1dGhvcl9lbWFpbCA9ICd4eHgnCi0gICAgICAgIGRpc3QucGFja2FnZXMgPSBbJ3NvbWVjb2RlJ10KLSAgICAgICAgZGlzdC5pbmNsdWRlX3BhY2thZ2VfZGF0YSA9IFRydWUKLSAgICAgICAgY21kID0gc2Rpc3QoZGlzdCkKLSAgICAgICAgY21kLm1hbmlmZXN0ID0gJ01BTklGRVNUJwotICAgICAgICBjbWQudGVtcGxhdGUgPSAnTUFOSUZFU1QuaW4nCi0gICAgICAgIGNtZC5kaXN0X2RpciA9ICdkaXN0JworICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQogCiAgICAgICAgICMgemlwIGlzIGF2YWlsYWJsZSB1bml2ZXJzYWxseQogICAgICAgICAjICh0YXIgbWlnaHQgbm90IGJlIGluc3RhbGxlZCB1bmRlciB3aW4zMikKICAgICAgICAgY21kLmZvcm1hdHMgPSBbJ3ppcCddCisKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQogICAgICAgICBjbWQucnVuKCkKIAogICAgICAgICAjIG5vdyBsZXQncyBjaGVjayB3aGF0IHdlIGhhdmUKLSAgICAgICAgZGlzdF9mb2xkZXIgPSBqb2luKHNlbGYudGVtcF9wa2csICdkaXN0JykKKyAgICAgICAgZGlzdF9mb2xkZXIgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnKQogICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIoZGlzdF9mb2xkZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZpbGVzLCBbJ2Zha2UtMS4wLnppcCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzLCBbJ2Zha2UtMS4wLnppcCddKQogCiAgICAgICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKGpvaW4oZGlzdF9mb2xkZXIsICdmYWtlLTEuMC56aXAnKSkKICAgICAgICAgdHJ5OgpAQCAtMTAzLDggKzEzNCw5IEBACiAgICAgICAgICAgICB6aXBfZmlsZS5jbG9zZSgpCiAKICAgICAgICAgIyBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGhhcyBiZWVuIHBydW5lZCBjb3JyZWN0bHkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGNvbnRlbnQpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjb250ZW50KSwgNCkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKICAgICBkZWYgdGVzdF9tYWtlX2Rpc3RyaWJ1dGlvbihzZWxmKToKIAogICAgICAgICAjIGNoZWNrIGlmIHRhciBhbmQgZ3ppcCBhcmUgaW5zdGFsbGVkCkBAIC0xMTIsNDcgKzE0NCwyODQgQEAKICAgICAgICAgICAgIGZpbmRfZXhlY3V0YWJsZSgnZ3ppcCcpIGlzIE5vbmUpOgogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2VsZi5faW5pdF90bXBfcGtnKCkKLQogICAgICAgICAjIG5vdyBidWlsZGluZyBhIHNkaXN0Ci0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQotICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JwotICAgICAgICBkaXN0Lm1ldGFkYXRhLm5hbWUgPSAnZmFrZScKLSAgICAgICAgZGlzdC5tZXRhZGF0YS52ZXJzaW9uID0gJzEuMCcKLSAgICAgICAgZGlzdC5tZXRhZGF0YS51cmwgPSAnaHR0cDovL3h4eCcKLSAgICAgICAgZGlzdC5tZXRhZGF0YS5hdXRob3IgPSBkaXN0Lm1ldGFkYXRhLmF1dGhvcl9lbWFpbCA9ICd4eHgnCi0gICAgICAgIGRpc3QucGFja2FnZXMgPSBbJ3NvbWVjb2RlJ10KLSAgICAgICAgZGlzdC5pbmNsdWRlX3BhY2thZ2VfZGF0YSA9IFRydWUKLSAgICAgICAgY21kID0gc2Rpc3QoZGlzdCkKLSAgICAgICAgY21kLm1hbmlmZXN0ID0gJ01BTklGRVNUJwotICAgICAgICBjbWQudGVtcGxhdGUgPSAnTUFOSUZFU1QuaW4nCi0gICAgICAgIGNtZC5kaXN0X2RpciA9ICdkaXN0JworICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQogCiAgICAgICAgICMgY3JlYXRpbmcgYSBnenRhciB0aGVuIGEgdGFyCiAgICAgICAgIGNtZC5mb3JtYXRzID0gWydnenRhcicsICd0YXInXQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCiAgICAgICAgIGNtZC5ydW4oKQogCiAgICAgICAgICMgbWFraW5nIHN1cmUgd2UgaGF2ZSB0d28gZmlsZXMKLSAgICAgICAgZGlzdF9mb2xkZXIgPSBqb2luKHNlbGYudGVtcF9wa2csICdkaXN0JykKKyAgICAgICAgZGlzdF9mb2xkZXIgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnKQogICAgICAgICByZXN1bHQgPSBvcy5saXN0ZGlyKGRpc3RfZm9sZGVyKQogICAgICAgICByZXN1bHQuc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWydmYWtlLTEuMC50YXInLCAnZmFrZS0xLjAudGFyLmd6J10gKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydmYWtlLTEuMC50YXInLCAnZmFrZS0xLjAudGFyLmd6J10gKQogCiAgICAgICAgIG9zLnJlbW92ZShqb2luKGRpc3RfZm9sZGVyLCAnZmFrZS0xLjAudGFyJykpCiAgICAgICAgIG9zLnJlbW92ZShqb2luKGRpc3RfZm9sZGVyLCAnZmFrZS0xLjAudGFyLmd6JykpCiAKICAgICAgICAgIyBub3cgdHJ5aW5nIGEgdGFyIHRoZW4gYSBnenRhcgogICAgICAgICBjbWQuZm9ybWF0cyA9IFsndGFyJywgJ2d6dGFyJ10KKworICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCiAgICAgICAgIGNtZC5ydW4oKQogCiAgICAgICAgIHJlc3VsdCA9IG9zLmxpc3RkaXIoZGlzdF9mb2xkZXIpCiAgICAgICAgIHJlc3VsdC5zb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LAotICAgICAgICAgICAgICAgIFsnZmFrZS0xLjAudGFyJywgJ2Zha2UtMS4wLnRhci5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydmYWtlLTEuMC50YXInLCAnZmFrZS0xLjAudGFyLmd6J10pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfYWRkX2RlZmF1bHRzKHNlbGYpOgorCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIyNzkKKworICAgICAgICAjIGFkZF9kZWZhdWx0IHNob3VsZCBhbHNvIGluY2x1ZGUKKyAgICAgICAgIyBkYXRhX2ZpbGVzIGFuZCBwYWNrYWdlX2RhdGEKKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKworICAgICAgICAjIGZpbGxpbmcgZGF0YV9maWxlcyBieSBwb2ludGluZyBmaWxlcworICAgICAgICAjIGluIHBhY2thZ2VfZGF0YQorICAgICAgICBkaXN0LnBhY2thZ2VfZGF0YSA9IHsnJzogWycqLmNmZycsICcqLmRhdCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc29tZWNvZGUnOiBbJyoudHh0J119CisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnZG9jLnR4dCcpLCAnIycpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnZG9jLmRhdCcpLCAnIycpCisKKyAgICAgICAgIyBhZGRpbmcgc29tZSBkYXRhIGluIGRhdGFfZmlsZXMKKyAgICAgICAgZGF0YV9kaXIgPSBqb2luKHNlbGYudG1wX2RpciwgJ2RhdGEnKQorICAgICAgICBvcy5ta2RpcihkYXRhX2RpcikKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChkYXRhX2RpciwgJ2RhdGEuZHQnKSwgJyMnKQorICAgICAgICBzb21lX2RpciA9IGpvaW4oc2VsZi50bXBfZGlyLCAnc29tZScpCisgICAgICAgIG9zLm1rZGlyKHNvbWVfZGlyKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ2lucm9vdC50eHQnKSwgJyMnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNvbWVfZGlyLCAnZmlsZS50eHQnKSwgJyMnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNvbWVfZGlyLCAnb3RoZXJfZmlsZS50eHQnKSwgJyMnKQorCisgICAgICAgIGRpc3QuZGF0YV9maWxlcyA9IFsoJ2RhdGEnLCBbJ2RhdGEvZGF0YS5kdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucm9vdC50eHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3RleGlzdGluZyddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb21lL2ZpbGUudHh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb21lL290aGVyX2ZpbGUudHh0J10KKworICAgICAgICAjIGFkZGluZyBhIHNjcmlwdAorICAgICAgICBzY3JpcHRfZGlyID0gam9pbihzZWxmLnRtcF9kaXIsICdzY3JpcHRzJykKKyAgICAgICAgb3MubWtkaXIoc2NyaXB0X2RpcikKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChzY3JpcHRfZGlyLCAnc2NyaXB0LnB5JyksICcjJykKKyAgICAgICAgZGlzdC5zY3JpcHRzID0gW2pvaW4oJ3NjcmlwdHMnLCAnc2NyaXB0LnB5JyldCisKKyAgICAgICAgY21kLmZvcm1hdHMgPSBbJ3ppcCddCisgICAgICAgIGNtZC51c2VfZGVmYXVsdHMgPSBUcnVlCisKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICAjIG5vdyBsZXQncyBjaGVjayB3aGF0IHdlIGhhdmUKKyAgICAgICAgZGlzdF9mb2xkZXIgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnKQorICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIoZGlzdF9mb2xkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXMsIFsnZmFrZS0xLjAuemlwJ10pCisKKyAgICAgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoam9pbihkaXN0X2ZvbGRlciwgJ2Zha2UtMS4wLnppcCcpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZW50ID0gemlwX2ZpbGUubmFtZWxpc3QoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgemlwX2ZpbGUuY2xvc2UoKQorCisgICAgICAgICMgbWFraW5nIHN1cmUgZXZlcnl0aGluZyB3YXMgYWRkZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY29udGVudCksIDExKQorCisgICAgICAgICMgY2hlY2tpbmcgdGhlIE1BTklGRVNUCisgICAgICAgIGYgPSBvcGVuKGpvaW4oc2VsZi50bXBfZGlyLCAnTUFOSUZFU1QnKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFuaWZlc3QgPSBmLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYW5pZmVzdCwgTUFOSUZFU1QgJSB7J3NlcCc6IG9zLnNlcH0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9tZXRhZGF0YV9jaGVja19vcHRpb24oc2VsZik6CisgICAgICAgICMgdGVzdGluZyB0aGUgYG1lZGF0YS1jaGVja2Agb3B0aW9uCisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZChtZXRhZGF0YT17fSkKKworICAgICAgICAjIHRoaXMgc2hvdWxkIHJhaXNlIHNvbWUgd2FybmluZ3MgIQorICAgICAgICAjIHdpdGggdGhlIGBjaGVja2Agc3ViY29tbWFuZAorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorICAgICAgICB3YXJuaW5ncyA9IHNlbGYuZ2V0X2xvZ3MoV0FSTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4od2FybmluZ3MpLCAyKQorCisgICAgICAgICMgdHJ5aW5nIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgbWV0YWRhdGEKKyAgICAgICAgc2VsZi5jbGVhcl9sb2dzKCkKKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQubWV0YWRhdGFfY2hlY2sgPSAwCisgICAgICAgIGNtZC5ydW4oKQorICAgICAgICB3YXJuaW5ncyA9IHNlbGYuZ2V0X2xvZ3MoV0FSTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4od2FybmluZ3MpLCAwKQorCisgICAgZGVmIHRlc3RfY2hlY2tfbWV0YWRhdGFfZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgIyBtYWtlcyBzdXJlIG1ha2VfbWV0YWRhdGEgaXMgZGVwcmVjYXRlZAorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgICAgIGNtZC5jaGVja19tZXRhZGF0YSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMSkKKworICAgIGRlZiB0ZXN0X3Nob3dfZm9ybWF0cyhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzaG93X2Zvcm1hdHMoKQorCisgICAgICAgICMgdGhlIG91dHB1dCBzaG91bGQgYmUgYSBoZWFkZXIgbGluZSArIG9uZSBsaW5lIHBlciBmb3JtYXQKKyAgICAgICAgbnVtX2Zvcm1hdHMgPSBsZW4oQVJDSElWRV9GT1JNQVRTLmtleXMoKSkKKyAgICAgICAgb3V0cHV0ID0gW2xpbmUgZm9yIGxpbmUgaW4gc3Rkb3V0LmdldHZhbHVlKCkuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKS5zdGFydHN3aXRoKCctLWZvcm1hdHM9JyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91dHB1dCksIG51bV9mb3JtYXRzKQorCisgICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKKworICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCisKKyAgICAgICAgIyBkZWZhdWx0IG9wdGlvbnMgc2V0IGJ5IGZpbmFsaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLm1hbmlmZXN0LCAnTUFOSUZFU1QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC50ZW1wbGF0ZSwgJ01BTklGRVNULmluJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZGlzdF9kaXIsICdkaXN0JykKKworICAgICAgICAjIGZvcm1hdHMgaGFzIHRvIGJlIGEgc3RyaW5nIHNwbGl0YWJsZSBvbiAoJyAnLCAnLCcpIG9yCisgICAgICAgICMgYSBzdHJpbmdsaXN0CisgICAgICAgIGNtZC5mb3JtYXRzID0gMQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwgY21kLmZpbmFsaXplX29wdGlvbnMpCisgICAgICAgIGNtZC5mb3JtYXRzID0gWyd6aXAnXQorICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCisKKyAgICAgICAgIyBmb3JtYXRzIGhhcyB0byBiZSBrbm93bgorICAgICAgICBjbWQuZm9ybWF0cyA9ICdzdXBhemlwYScKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5maW5hbGl6ZV9vcHRpb25zKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFVJRF9HSURfU1VQUE9SVCwgIlJlcXVpcmVzIGdycCBhbmQgcHdkIHN1cHBvcnQiKQorICAgIGRlZiB0ZXN0X21ha2VfZGlzdHJpYnV0aW9uX293bmVyX2dyb3VwKHNlbGYpOgorCisgICAgICAgICMgY2hlY2sgaWYgdGFyIGFuZCBnemlwIGFyZSBpbnN0YWxsZWQKKyAgICAgICAgaWYgKGZpbmRfZXhlY3V0YWJsZSgndGFyJykgaXMgTm9uZSBvcgorICAgICAgICAgICAgZmluZF9leGVjdXRhYmxlKCdnemlwJykgaXMgTm9uZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIG5vdyBidWlsZGluZyBhIHNkaXN0CisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCisKKyAgICAgICAgIyBjcmVhdGluZyBhIGd6dGFyIGFuZCBzcGVjaWZ5aW5nIHRoZSBvd25lcitncm91cAorICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQorICAgICAgICBjbWQub3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgY21kLmdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBtYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBnb29kIHJpZ2h0cworICAgICAgICBhcmNoaXZlX25hbWUgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnLCAnZmFrZS0xLjAudGFyLmd6JykKKyAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gYXJjaGl2ZS5nZXRtZW1iZXJzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIudWlkLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLmdpZCwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQorCisgICAgICAgICMgYnVpbGRpbmcgYSBzZGlzdCBhZ2FpbgorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorCisgICAgICAgICMgY3JlYXRpbmcgYSBnenRhcgorICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbWFraW5nIHN1cmUgd2UgaGF2ZSB0aGUgZ29vZCByaWdodHMKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JywgJ2Zha2UtMS4wLnRhci5neicpCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorCisgICAgICAgICMgbm90ZSB0aGF0IHdlIGFyZSBub3QgdGVzdGluZyB0aGUgZ3JvdXAgb3duZXJzaGlwIGhlcmUKKyAgICAgICAgIyBiZWNhdXNlLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtcyBhbmQgdGhlIGNvbnRhaW5lcgorICAgICAgICAjIHJpZ2h0cyAoc2VlICM3NDA4KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgb3MuZ2V0dWlkKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9nZXRfZmlsZV9saXN0KHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBNQU5JRkVTVCBpcyByZWNhbGN1bGF0ZWQKKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKworICAgICAgICAjIGZpbGxpbmcgZGF0YV9maWxlcyBieSBwb2ludGluZyBmaWxlcyBpbiBwYWNrYWdlX2RhdGEKKyAgICAgICAgZGlzdC5wYWNrYWdlX2RhdGEgPSB7J3NvbWVjb2RlJzogWycqLnR4dCddfQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJ2RvYy50eHQnKSwgJyMnKQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgIGYgPSBvcGVuKGNtZC5tYW5pZmVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFuaWZlc3QgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGYucmVhZCgpLnNwbGl0KCdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgIT0gJyddCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtYW5pZmVzdCksIDUpCisKKyAgICAgICAgIyBhZGRpbmcgYSBmaWxlCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnZG9jMi50eHQnKSwgJyMnKQorCisgICAgICAgICMgbWFrZSBzdXJlIGJ1aWxkX3B5IGlzIHJlaW5pdGluaWFsaXplZCwgbGlrZSBhIGZyZXNoIHJ1bgorICAgICAgICBidWlsZF9weSA9IGRpc3QuZ2V0X2NvbW1hbmRfb2JqKCdidWlsZF9weScpCisgICAgICAgIGJ1aWxkX3B5LmZpbmFsaXplZCA9IEZhbHNlCisgICAgICAgIGJ1aWxkX3B5LmVuc3VyZV9maW5hbGl6ZWQoKQorCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgIGYgPSBvcGVuKGNtZC5tYW5pZmVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFuaWZlc3QyID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBmLnJlYWQoKS5zcGxpdCgnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKSAhPSAnJ10KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgZG8gd2UgaGF2ZSB0aGUgbmV3IGZpbGUgaW4gTUFOSUZFU1QgPworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtYW5pZmVzdDIpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEluKCdkb2MyLnR4dCcsIG1hbmlmZXN0MlstMV0pCisKKyAgICBkZWYgdGVzdF9tYW5pZmVzdF9tYXJrZXIoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBhdXRvZ2VuZXJhdGVkIE1BTklGRVNUcyBoYXZlIGEgbWFya2VyCisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgZiA9IG9wZW4oY21kLm1hbmlmZXN0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtYW5pZmVzdCA9IFtsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gZi5yZWFkKCkuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKSAhPSAnJ10KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFuaWZlc3RbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgJyMgZmlsZSBHRU5FUkFURUQgYnkgZGlzdHV0aWxzLCBkbyBOT1QgZWRpdCcpCisKKyAgICBkZWYgdGVzdF9tYW51YWxfbWFuaWZlc3Qoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBhIE1BTklGRVNUIHdpdGhvdXQgYSBtYXJrZXIgaXMgbGVmdCBhbG9uZQorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCBjbWQubWFuaWZlc3QpLCAnUkVBRE1FLm1hbnVhbCcpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgIGYgPSBvcGVuKGNtZC5tYW5pZmVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFuaWZlc3QgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGYucmVhZCgpLnNwbGl0KCdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgIT0gJyddCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hbmlmZXN0LCBbJ1JFQURNRS5tYW51YWwnXSkKIAogZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKHNkaXN0VGVzdENhc2UpCisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShTRGlzdFRlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3Bhd24ucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3Bhd24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmYTU0ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zcGF3bi5weQpAQCAtMCwwICsxLDYwIEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnNwYXduLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAorCitmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgX250X3F1b3RlX2FyZ3MKK2Zyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3biwgZmluZF9leGVjdXRhYmxlCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvcgorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKKworY2xhc3MgU3Bhd25UZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKKyAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbnRfcXVvdGVfYXJncyhzZWxmKToKKworICAgICAgICBmb3IgKGFyZ3MsIHdhbnRlZCkgaW4gKChbJ3dpdGggc3BhY2UnLCAnbm9zcGFjZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyJ3aXRoIHNwYWNlIicsICdub3NwYWNlJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbJ25vY2hhbmdlJywgJ25vc3BhY2UnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydub2NoYW5nZScsICdub3NwYWNlJ10pKToKKyAgICAgICAgICAgIHJlcyA9IF9udF9xdW90ZV9hcmdzKGFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgd2FudGVkKQorCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lIGluICgnbnQnLCAncG9zaXgnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnUnVucyBvbmx5IHVuZGVyIHBvc2l4IG9yIG50JykKKyAgICBkZWYgdGVzdF9zcGF3bihzZWxmKToKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKworICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyBleGVjdXRhYmxlCisgICAgICAgICMgdGhyb3VnaCB0aGUgc2hlbGwgdGhhdCByZXR1cm5zIDEKKyAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Zvby5zaCcpCisgICAgICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZXhlLCAnIyEvYmluL3NoXG5leGl0IDEnKQorICAgICAgICAgICAgb3MuY2htb2QoZXhlLCAwNzc3KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Zvby5iYXQnKQorICAgICAgICAgICAgc2VsZi53cml0ZV9maWxlKGV4ZSwgJ2V4aXQgMScpCisKKyAgICAgICAgb3MuY2htb2QoZXhlLCAwNzc3KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNFeGVjRXJyb3IsIHNwYXduLCBbZXhlXSkKKworICAgICAgICAjIG5vdyBzb21ldGhpbmcgdGhhdCB3b3JrcworICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICBleGUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZm9vLnNoJykKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZmlsZShleGUsICcjIS9iaW4vc2hcbmV4aXQgMCcpCisgICAgICAgICAgICBvcy5jaG1vZChleGUsIDA3NzcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZm9vLmJhdCcpCisgICAgICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZXhlLCAnZXhpdCAwJykKKworICAgICAgICBvcy5jaG1vZChleGUsIDA3NzcpCisgICAgICAgIHNwYXduKFtleGVdKSAgIyBzaG91bGQgd29yayB3aXRob3V0IGFueSBlcnJvcgorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3Bhd25UZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKaW5kZXggODhmOWVkOC4uNDk1NzBjNCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5CkBAIC0xLDEzICsxLDE1IEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmRpc3QuIiIiCi0KLWZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuc3lzY29uZmlnLiIiIgogaW1wb3J0IG9zCiBpbXBvcnQgdGVzdAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc2h1dGlsCiAKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0CiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4KIAotY2xhc3MgU3lzY29uZmlnVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU3lzY29uZmlnVGVzdENhc2Uoc3VwcG9ydC5FbnZpcm9uR3VhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcihTeXNjb25maWdUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQogICAgICAgICBzZWxmLm1ha2VmaWxlID0gTm9uZQpAQCAtMTUsMTkgKzE3LDI2IEBACiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBpZiBzZWxmLm1ha2VmaWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgb3MudW5saW5rKHNlbGYubWFrZWZpbGUpCisgICAgICAgIHNlbGYuY2xlYW51cF90ZXN0Zm4oKQogICAgICAgICBzdXBlcihTeXNjb25maWdUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQogCi0gICAgZGVmIHRlc3RfZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICBjb25maWdfaCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWUoKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKKyAgICBkZWYgY2xlYW51cF90ZXN0Zm4oc2VsZik6CisgICAgICAgIHBhdGggPSB0ZXN0LnRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CisgICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQogCiAgICAgZGVmIHRlc3RfZ2V0X3B5dGhvbl9saWIoc2VsZik6CiAgICAgICAgIGxpYl9kaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoKQogICAgICAgICAjIFhYWCBkb2Vzbid0IHdvcmsgb24gTGludXggd2hlbiBQeXRob24gd2FzIG5ldmVyIGluc3RhbGxlZCBiZWZvcmUKLSAgICAgICAgI3NlbGYuYXNzZXJ0Xyhvcy5wYXRoLmlzZGlyKGxpYl9kaXIpLCBsaWJfZGlyKQorICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIobGliX2RpciksIGxpYl9kaXIpCiAgICAgICAgICMgdGVzdCBmb3IgcHl0aG9ueHgubGliPwogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwcmVmaXg9VEVTVEZOKSkKKyAgICAgICAgX3N5c2NvbmZpZyA9IF9faW1wb3J0X18oJ3N5c2NvbmZpZycpCisgICAgICAgIHJlcyA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihUcnVlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9zeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKSwgcmVzKQogCiAgICAgZGVmIHRlc3RfZ2V0X3B5dGhvbl9pbmMoc2VsZik6CiAgICAgICAgIGluY19kaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMoKQpAQCAtMzgsMjAgKzQ3LDI5IEBACiAgICAgICAgIHB5dGhvbl9oID0gb3MucGF0aC5qb2luKGluY19kaXIsICJQeXRob24uaCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShweXRob25faCksIHB5dGhvbl9oKQogCi0gICAgZGVmIHRlc3RfZ2V0X2NvbmZpZ192YXJzKHNlbGYpOgotICAgICAgICBjdmFycyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjdmFycywgZGljdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjdmFycykKKyAgICBkZWYgdGVzdF9wYXJzZV9tYWtlZmlsZV9iYXNlKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2VmaWxlID0gdGVzdC50ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIGZkID0gb3BlbihzZWxmLm1ha2VmaWxlLCAndycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkLndyaXRlKHIiQ09ORklHX0FSR1M9ICAnLS1hcmcxPW9wdGFyZzEnICdFTlY9TElCJyIgJ1xuJykKKyAgICAgICAgICAgIGZkLndyaXRlKCdWQVI9JE9USEVSXG5PVEhFUj1mb28nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICBkID0gc3lzY29uZmlnLnBhcnNlX21ha2VmaWxlKHNlbGYubWFrZWZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydDT05GSUdfQVJHUyc6ICInLS1hcmcxPW9wdGFyZzEnICdFTlY9TElCJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPVEhFUic6ICdmb28nfSkKIAogICAgIGRlZiB0ZXN0X3BhcnNlX21ha2VmaWxlX2xpdGVyYWxfZG9sbGFyKHNlbGYpOgogICAgICAgICBzZWxmLm1ha2VmaWxlID0gdGVzdC50ZXN0X3N1cHBvcnQuVEVTVEZOCiAgICAgICAgIGZkID0gb3BlbihzZWxmLm1ha2VmaWxlLCAndycpCi0gICAgICAgIGZkLndyaXRlKHIiQ09ORklHX0FSR1M9ICAnLS1hcmcxPW9wdGFyZzEnICdFTlY9XCQkTElCJyIgJ1xuJykKLSAgICAgICAgZmQud3JpdGUoJ1ZBUj0kT1RIRVJcbk9USEVSPWZvbycpCi0gICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmQud3JpdGUociJDT05GSUdfQVJHUz0gICctLWFyZzE9b3B0YXJnMScgJ0VOVj1cJCRMSUInIiAnXG4nKQorICAgICAgICAgICAgZmQud3JpdGUoJ1ZBUj0kT1RIRVJcbk9USEVSPWZvbycpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmZC5jbG9zZSgpCiAgICAgICAgIGQgPSBzeXNjb25maWcucGFyc2VfbWFrZWZpbGUoc2VsZi5tYWtlZmlsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZCwgeydDT05GSUdfQVJHUyc6IHIiJy0tYXJnMT1vcHRhcmcxJyAnRU5WPVwkTElCJyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT1RIRVInOiAnZm9vJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydDT05GSUdfQVJHUyc6IHIiJy0tYXJnMT1vcHRhcmcxJyAnRU5WPVwkTElCJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPVEhFUic6ICdmb28nfSkKIAogCiBkZWYgdGVzdF9zdWl0ZSgpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3RleHRfZmlsZS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF90ZXh0X2ZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UxOWNkNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF90ZXh0X2ZpbGUucHkKQEAgLTAsMCArMSwxMDcgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMudGV4dF9maWxlLiIiIgoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gZGlzdHV0aWxzLnRleHRfZmlsZSBpbXBvcnQgVGV4dEZpbGUKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworVEVTVF9EQVRBID0gIiIiIyB0ZXN0IGZpbGUKKworbGluZSAzIFxcCisjIGludGVydmVuaW5nIGNvbW1lbnQKKyAgY29udGludWVzIG9uIG5leHQgbGluZQorIiIiCisKK2NsYXNzIFRleHRGaWxlVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2xhc3Moc2VsZik6CisgICAgICAgICMgb2xkIHRlc3RzIG1vdmVkIGZyb20gdGV4dF9maWxlLl9fbWFpbl9fCisgICAgICAgICMgc28gdGhleSBhcmUgcmVhbGx5IGNhbGxlZCBieSB0aGUgYnVpbGRib3RzCisKKyAgICAgICAgIyByZXN1bHQgMTogbm8gZmFuY3kgb3B0aW9ucworICAgICAgICByZXN1bHQxID0gWycjIHRlc3QgZmlsZVxuJywgJ1xuJywgJ2xpbmUgMyBcXFxuJywKKyAgICAgICAgICAgICAgICAgICAnIyBpbnRlcnZlbmluZyBjb21tZW50XG4nLAorICAgICAgICAgICAgICAgICAgICcgIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmVcbiddCisKKyAgICAgICAgIyByZXN1bHQgMjoganVzdCBzdHJpcCBjb21tZW50cworICAgICAgICByZXN1bHQyID0gWyJcbiIsCisgICAgICAgICAgICAgICAgICAgImxpbmUgMyBcXFxuIiwKKyAgICAgICAgICAgICAgICAgICAiICBjb250aW51ZXMgb24gbmV4dCBsaW5lXG4iXQorCisgICAgICAgICMgcmVzdWx0IDM6IGp1c3Qgc3RyaXAgYmxhbmsgbGluZXMKKyAgICAgICAgcmVzdWx0MyA9IFsiIyB0ZXN0IGZpbGVcbiIsCisgICAgICAgICAgICAgICAgICAgImxpbmUgMyBcXFxuIiwKKyAgICAgICAgICAgICAgICAgICAiIyBpbnRlcnZlbmluZyBjb21tZW50XG4iLAorICAgICAgICAgICAgICAgICAgICIgIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmVcbiJdCisKKyAgICAgICAgIyByZXN1bHQgNDogZGVmYXVsdCwgc3RyaXAgY29tbWVudHMsIGJsYW5rIGxpbmVzLAorICAgICAgICAjIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgICAgIHJlc3VsdDQgPSBbImxpbmUgMyBcXCIsCisgICAgICAgICAgICAgICAgICAgIiAgY29udGludWVzIG9uIG5leHQgbGluZSJdCisKKyAgICAgICAgIyByZXN1bHQgNTogc3RyaXAgY29tbWVudHMgYW5kIGJsYW5rcywgcGx1cyBqb2luIGxpbmVzIChidXQgZG9uJ3QKKyAgICAgICAgIyAiY29sbGFwc2UiIGpvaW5lZCBsaW5lcworICAgICAgICByZXN1bHQ1ID0gWyJsaW5lIDMgICBjb250aW51ZXMgb24gbmV4dCBsaW5lIl0KKworICAgICAgICAjIHJlc3VsdCA2OiBzdHJpcCBjb21tZW50cyBhbmQgYmxhbmtzLCBwbHVzIGpvaW4gbGluZXMgKGFuZAorICAgICAgICAjICJjb2xsYXBzZSIgam9pbmVkIGxpbmVzCisgICAgICAgIHJlc3VsdDYgPSBbImxpbmUgMyBjb250aW51ZXMgb24gbmV4dCBsaW5lIl0KKworICAgICAgICBkZWYgdGVzdF9pbnB1dChjb3VudCwgZGVzY3JpcHRpb24sIGZpbGUsIGV4cGVjdGVkX3Jlc3VsdCk6CisgICAgICAgICAgICByZXN1bHQgPSBmaWxlLnJlYWRsaW5lcygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWRfcmVzdWx0KQorCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgInRlc3QudHh0IikKKyAgICAgICAgb3V0X2ZpbGUgPSBvcGVuKGZpbGVuYW1lLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKFRFU1RfREFUQSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG91dF9maWxlLmNsb3NlKCkKKworICAgICAgICBpbl9maWxlID0gVGV4dEZpbGUoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTAsIHNraXBfYmxhbmtzPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsc3RyaXBfd3M9MCwgcnN0cmlwX3dzPTApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfaW5wdXQoMSwgIm5vIHByb2Nlc3NpbmciLCBpbl9maWxlLCByZXN1bHQxKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaW5fZmlsZS5jbG9zZSgpCisKKyAgICAgICAgaW5fZmlsZSA9IFRleHRGaWxlKGZpbGVuYW1lLCBzdHJpcF9jb21tZW50cz0xLCBza2lwX2JsYW5rcz0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN0cmlwX3dzPTAsIHJzdHJpcF93cz0wKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2lucHV0KDIsICJzdHJpcCBjb21tZW50cyIsIGluX2ZpbGUsIHJlc3VsdDIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpbl9maWxlLmNsb3NlKCkKKworICAgICAgICBpbl9maWxlID0gVGV4dEZpbGUoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTAsIHNraXBfYmxhbmtzPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsc3RyaXBfd3M9MCwgcnN0cmlwX3dzPTApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfaW5wdXQoMywgInN0cmlwIGJsYW5rcyIsIGluX2ZpbGUsIHJlc3VsdDMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpbl9maWxlLmNsb3NlKCkKKworICAgICAgICBpbl9maWxlID0gVGV4dEZpbGUoZmlsZW5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfaW5wdXQoNCwgImRlZmF1bHQgcHJvY2Vzc2luZyIsIGluX2ZpbGUsIHJlc3VsdDQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpbl9maWxlLmNsb3NlKCkKKworICAgICAgICBpbl9maWxlID0gVGV4dEZpbGUoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTEsIHNraXBfYmxhbmtzPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luX2xpbmVzPTEsIHJzdHJpcF93cz0xKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2lucHV0KDUsICJqb2luIGxpbmVzIHdpdGhvdXQgY29sbGFwc2luZyIsIGluX2ZpbGUsIHJlc3VsdDUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpbl9maWxlLmNsb3NlKCkKKworICAgICAgICBpbl9maWxlID0gVGV4dEZpbGUoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTEsIHNraXBfYmxhbmtzPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luX2xpbmVzPTEsIHJzdHJpcF93cz0xLCBjb2xsYXBzZV9qb2luPTEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfaW5wdXQoNiwgImpvaW4gbGluZXMgd2l0aCBjb2xsYXBzaW5nIiwgaW5fZmlsZSwgcmVzdWx0NikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGluX2ZpbGUuY2xvc2UoKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoVGV4dEZpbGVUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VuaXhjY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdW5peGNjb21waWxlci5weQppbmRleCAzZjIzM2UyLi40MGM5MDhhIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdW5peGNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdW5peGNjb21waWxlci5weQpAQCAtMSw2ICsxLDcgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMudW5peGNjb21waWxlci4iIiIKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKIGZyb20gZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIgaW1wb3J0IFVuaXhDQ29tcGlsZXIKQEAgLTEyNiw0ICsxMjcsNCBAQAogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoVW5peENDb21waWxlclRlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQppbmRleCAzODI2OTdmLi45OTExMTk5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKQEAgLTEsMTQgKzEsMTMgQEAKLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC51cGxvYWQuIiIiCiAjIC0qLSBlbmNvZGluZzogdXRmOCAtKi0KLWltcG9ydCBzeXMKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC51cGxvYWQuIiIiCiBpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IGh0dHBsaWIKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCitmcm9tIGRpc3R1dGlscy5jb21tYW5kIGltcG9ydCB1cGxvYWQgYXMgdXBsb2FkX21vZAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC51cGxvYWQgaW1wb3J0IHVwbG9hZAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCiAKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0CiBmcm9tIGRpc3R1dGlscy50ZXN0cy50ZXN0X2NvbmZpZyBpbXBvcnQgUFlQSVJDLCBQeVBJUkNDb21tYW5kVGVzdENhc2UKIAogUFlQSVJDX0xPTkdfUEFTU1dPUkQgPSAiIiJcCkBAIC0yOSw2MyArMjgsNzUgQEAKIHJlcG9zaXRvcnk6aHR0cDovL2Fub3RoZXIucHlwaS8KICIiIgogCi1jbGFzcyBfUmVzcChvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXMpOgotICAgICAgICBzZWxmLnN0YXR1cyA9IHN0YXR1cwotICAgICAgICBzZWxmLnJlYXNvbiA9ICdPSycKIAotX0NPTk5FQ1RJT05TID0gW10KK1BZUElSQ19OT1BBU1NXT1JEID0gIiIiXAorW2Rpc3R1dGlsc10KIAotY2xhc3MgX0Zha2VIVFRQQ29ubmVjdGlvbihvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuZXRsb2MpOgotICAgICAgICBzZWxmLnJlcXVlc3RzID0gW10KLSAgICAgICAgc2VsZi5oZWFkZXJzID0ge30KLSAgICAgICAgc2VsZi5ib2R5ID0gTm9uZQotICAgICAgICBzZWxmLm5ldGxvYyA9IG5ldGxvYwotICAgICAgICBfQ09OTkVDVElPTlMuYXBwZW5kKHNlbGYpCitpbmRleC1zZXJ2ZXJzID0KKyAgICBzZXJ2ZXIxCiAKLSAgICBkZWYgY29ubmVjdChzZWxmKToKLSAgICAgICAgcGFzcwotICAgIGVuZGhlYWRlcnMgPSBjb25uZWN0Citbc2VydmVyMV0KK3VzZXJuYW1lOm1lCisiIiIKIAotICAgIGRlZiBzZW5kKHNlbGYsIGJvZHkpOgotICAgICAgICBzZWxmLmJvZHkgPSBib2R5CitjbGFzcyBGYWtlT3BlbihvYmplY3QpOgogCi0gICAgZGVmIHB1dHJlcXVlc3Qoc2VsZiwgdHlwZV8sIGRhdGEpOgotICAgICAgICBzZWxmLnJlcXVlc3RzLmFwcGVuZCgodHlwZV8sIGRhdGEpKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwpOgorICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh1cmwsIHN0cik6CisgICAgICAgICAgICBzZWxmLnJlcSA9IHVybAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZXEgPSBOb25lCisgICAgICAgIHNlbGYubXNnID0gJ09LJwogCi0gICAgZGVmIHB1dGhlYWRlcihzZWxmLCBuYW1lLCB2YWx1ZSk6Ci0gICAgICAgIHNlbGYuaGVhZGVyc1tuYW1lXSA9IHZhbHVlCisgICAgZGVmIGdldGNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiAyMDAKIAotICAgIGRlZiBnZXRyZXNwb25zZShzZWxmKToKLSAgICAgICAgcmV0dXJuIF9SZXNwKDIwMCkKIAogY2xhc3MgdXBsb2FkVGVzdENhc2UoUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIodXBsb2FkVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi5vbGRfa2xhc3MgPSBodHRwbGliLkhUVFBDb25uZWN0aW9uCi0gICAgICAgIGh0dHBsaWIuSFRUUENvbm5lY3Rpb24gPSBfRmFrZUhUVFBDb25uZWN0aW9uCisgICAgICAgIHNlbGYub2xkX29wZW4gPSB1cGxvYWRfbW9kLnVybG9wZW4KKyAgICAgICAgdXBsb2FkX21vZC51cmxvcGVuID0gc2VsZi5fdXJsb3BlbgorICAgICAgICBzZWxmLmxhc3Rfb3BlbiA9IE5vbmUKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaHR0cGxpYi5IVFRQQ29ubmVjdGlvbiA9IHNlbGYub2xkX2tsYXNzCisgICAgICAgIHVwbG9hZF9tb2QudXJsb3BlbiA9IHNlbGYub2xkX29wZW4KICAgICAgICAgc3VwZXIodXBsb2FkVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKIAorICAgIGRlZiBfdXJsb3BlbihzZWxmLCB1cmwpOgorICAgICAgICBzZWxmLmxhc3Rfb3BlbiA9IEZha2VPcGVuKHVybCkKKyAgICAgICAgcmV0dXJuIHNlbGYubGFzdF9vcGVuCisKICAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogCiAgICAgICAgICMgbmV3IGZvcm1hdAotICAgICAgICBmID0gb3BlbihzZWxmLnJjLCAndycpCi0gICAgICAgIGYud3JpdGUoUFlQSVJDKQotICAgICAgICBmLmNsb3NlKCkKLQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoc2VsZi5yYywgUFlQSVJDKQogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKICAgICAgICAgY21kID0gdXBsb2FkKGRpc3QpCiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKICAgICAgICAgZm9yIGF0dHIsIHdhaXRlZCBpbiAoKCd1c2VybmFtZScsICdtZScpLCAoJ3Bhc3N3b3JkJywgJ3NlY3JldCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlYWxtJywgJ3B5cGknKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdldGF0dHIoY21kLCBhdHRyKSwgd2FpdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKGNtZCwgYXR0ciksIHdhaXRlZCkKIAorICAgIGRlZiB0ZXN0X3NhdmVkX3Bhc3N3b3JkKHNlbGYpOgorICAgICAgICAjIGZpbGUgd2l0aCBubyBwYXNzd29yZAorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoc2VsZi5yYywgUFlQSVJDX05PUEFTU1dPUkQpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgaXQgcGFzc2VzCisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQorICAgICAgICBjbWQgPSB1cGxvYWQoZGlzdCkKKyAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5wYXNzd29yZCwgTm9uZSkKKworICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBnZXQgaXQgYXMgd2VsbCwgaWYgYW5vdGhlciBjb21tYW5kCisgICAgICAgICMgaW5pdGlhbGl6ZWQgaXQgYXQgdGhlIGRpc3QgbGV2ZWwKKyAgICAgICAgZGlzdC5wYXNzd29yZCA9ICd4eHgnCisgICAgICAgIGNtZCA9IHVwbG9hZChkaXN0KQorICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnBhc3N3b3JkLCAneHh4JykKIAogICAgIGRlZiB0ZXN0X3VwbG9hZChzZWxmKToKICAgICAgICAgdG1wID0gc2VsZi5ta2R0ZW1wKCkKQEAgLTEwMiwyMSArMTEzLDE5IEBACiAgICAgICAgIGNtZC5ydW4oKQogCiAgICAgICAgICMgd2hhdCBkaWQgd2Ugc2VuZCA/Ci0gICAgICAgIHJlcyA9IF9DT05ORUNUSU9OU1stMV0KLQotICAgICAgICBoZWFkZXJzID0gcmVzLmhlYWRlcnMKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdkw6lkw6knIGluIHJlcy5ib2R5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhoZWFkZXJzWydDb250ZW50LWxlbmd0aCddLCAnMjA4NScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2TDqWTDqScsIHNlbGYubGFzdF9vcGVuLnJlcS5kYXRhKQorICAgICAgICBoZWFkZXJzID0gZGljdChzZWxmLmxhc3Rfb3Blbi5yZXEuaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWydDb250ZW50LWxlbmd0aCddLCAnMjA4NScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoZWFkZXJzWydDb250ZW50LXR5cGUnXS5zdGFydHN3aXRoKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpCi0KLSAgICAgICAgbWV0aG9kLCByZXF1ZXN0ID0gcmVzLnJlcXVlc3RzWy0xXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRob2QsICdQT1NUJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLm5ldGxvYywgJ3B5cGkucHl0aG9uLm9yZycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgneHh4JyBpbiByZXMuYm9keSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnXG4nIGluIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X21ldGhvZCgpLCAnUE9TVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9mdWxsX3VybCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGknKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3h4eCcgaW4gc2VsZi5sYXN0X29wZW4ucmVxLmRhdGEpCisgICAgICAgIGF1dGggPSBzZWxmLmxhc3Rfb3Blbi5yZXEuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ1xuJyBpbiBhdXRoKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUodXBsb2FkVGVzdENhc2UpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkKaW5kZXggOTgxYWQwMC4uNjdjZDRjYyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkKQEAgLTEsNiArMSw3IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnV0aWwuIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIERpc3R1dGlsc0J5dGVDb21waWxlRXJyb3IKIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGJ5dGVfY29tcGlsZQpAQCAtMjEsNCArMjIsNCBAQAogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoVXRpbFRlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdmVyc2lvbi5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF92ZXJzaW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODk5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdmVyc2lvbi5weQpAQCAtMCwwICsxLDcxIEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnZlcnNpb24uIiIiCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgU3RyaWN0VmVyc2lvbgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2NsYXNzIFZlcnNpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9wcmVyZWxlYXNlKHNlbGYpOgorICAgICAgICB2ZXJzaW9uID0gU3RyaWN0VmVyc2lvbignMS4yLjNhMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVyc2lvbi52ZXJzaW9uLCAoMSwgMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVyc2lvbi5wcmVyZWxlYXNlLCAoJ2EnLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmVyc2lvbiksICcxLjIuM2ExJykKKworICAgICAgICB2ZXJzaW9uID0gU3RyaWN0VmVyc2lvbignMS4yLjAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2ZXJzaW9uKSwgJzEuMicpCisKKyAgICBkZWYgdGVzdF9jbXBfc3RyaWN0KHNlbGYpOgorICAgICAgICB2ZXJzaW9ucyA9ICgoJzEuNS4xJywgJzEuNS4yYjInLCAtMSksCisgICAgICAgICAgICAgICAgICAgICgnMTYxJywgJzMuMTBhJywgVmFsdWVFcnJvciksCisgICAgICAgICAgICAgICAgICAgICgnOC4wMicsICc4LjAyJywgMCksCisgICAgICAgICAgICAgICAgICAgICgnMy40aicsICcxOTk2LjA3LjEyJywgVmFsdWVFcnJvciksCisgICAgICAgICAgICAgICAgICAgICgnMy4yLnBsMCcsICczLjEuMS42JywgVmFsdWVFcnJvciksCisgICAgICAgICAgICAgICAgICAgICgnMmc2JywgJzExZycsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAoJzAuOScsICcyLjInLCAtMSksCisgICAgICAgICAgICAgICAgICAgICgnMS4yLjEnLCAnMS4yJywgMSksCisgICAgICAgICAgICAgICAgICAgICgnMS4xJywgJzEuMi4yJywgLTEpLAorICAgICAgICAgICAgICAgICAgICAoJzEuMicsICcxLjEnLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgKCcxLjIuMScsICcxLjIuMicsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgKCcxLjIuMicsICcxLjInLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgKCcxLjInLCAnMS4yLjInLCAtMSksCisgICAgICAgICAgICAgICAgICAgICgnMC40LjAnLCAnMC40JywgMCksCisgICAgICAgICAgICAgICAgICAgICgnMS4xMysrJywgJzUuNS5rdycsIFZhbHVlRXJyb3IpKQorCisgICAgICAgIGZvciB2MSwgdjIsIHdhbnRlZCBpbiB2ZXJzaW9uczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXMgPSBTdHJpY3RWZXJzaW9uKHYxKS5fX2NtcF9fKFN0cmljdFZlcnNpb24odjIpKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgd2FudGVkIGlzIFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoKCJjbXAoJXMsICVzKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkbid0IHJhaXNlIFZhbHVlRXJyb3IiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh2MSwgdjIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHdhbnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NtcCglcywgJXMpIHNob3VsZCBiZSAlcywgZ290ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2MSwgdjIsIHdhbnRlZCwgcmVzKSkKKworCisgICAgZGVmIHRlc3RfY21wKHNlbGYpOgorICAgICAgICB2ZXJzaW9ucyA9ICgoJzEuNS4xJywgJzEuNS4yYjInLCAtMSksCisgICAgICAgICAgICAgICAgICAgICgnMTYxJywgJzMuMTBhJywgMSksCisgICAgICAgICAgICAgICAgICAgICgnOC4wMicsICc4LjAyJywgMCksCisgICAgICAgICAgICAgICAgICAgICgnMy40aicsICcxOTk2LjA3LjEyJywgLTEpLAorICAgICAgICAgICAgICAgICAgICAoJzMuMi5wbDAnLCAnMy4xLjEuNicsIDEpLAorICAgICAgICAgICAgICAgICAgICAoJzJnNicsICcxMWcnLCAtMSksCisgICAgICAgICAgICAgICAgICAgICgnMC45NjA5MjMnLCAnMi4yYmV0YTI5JywgLTEpLAorICAgICAgICAgICAgICAgICAgICAoJzEuMTMrKycsICc1LjUua3cnLCAtMSkpCisKKworICAgICAgICBmb3IgdjEsIHYyLCB3YW50ZWQgaW4gdmVyc2lvbnM6CisgICAgICAgICAgICByZXMgPSBMb29zZVZlcnNpb24odjEpLl9fY21wX18oTG9vc2VWZXJzaW9uKHYyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCB3YW50ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbXAoJXMsICVzKSBzaG91bGQgYmUgJXMsIGdvdCAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodjEsIHYyLCB3YW50ZWQsIHJlcykpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShWZXJzaW9uVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF92ZXJzaW9ucHJlZGljYXRlLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3ZlcnNpb25wcmVkaWNhdGUucHkKaW5kZXggOGE2MGRiZS4uMWQ2YzhkNSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3ZlcnNpb25wcmVkaWNhdGUucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3ZlcnNpb25wcmVkaWNhdGUucHkKQEAgLTQsNiArNCwxMCBAQAogCiBpbXBvcnQgZGlzdHV0aWxzLnZlcnNpb25wcmVkaWNhdGUKIGltcG9ydCBkb2N0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoZGlzdHV0aWxzLnZlcnNpb25wcmVkaWNhdGUpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGV4dF9maWxlLnB5IGIvTGliL2Rpc3R1dGlscy90ZXh0X2ZpbGUucHkKaW5kZXggZmYyODc4ZC4uMDlhNzk4YiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXh0X2ZpbGUucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXh0X2ZpbGUucHkKQEAgLTYsOCArNiw3IEBACiAKIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1mcm9tIHR5cGVzIGltcG9ydCAqCi1pbXBvcnQgc3lzLCBvcywgc3RyaW5nCitpbXBvcnQgc3lzCiAKIAogY2xhc3MgVGV4dEZpbGU6CkBAIC0xMzcsMTIgKzEzNiwxMiBAQAogICAgICAgICBpZiBsaW5lIGlzIE5vbmU6CiAgICAgICAgICAgICBsaW5lID0gc2VsZi5jdXJyZW50X2xpbmUKICAgICAgICAgb3V0bXNnLmFwcGVuZChzZWxmLmZpbGVuYW1lICsgIiwgIikKLSAgICAgICAgaWYgdHlwZSAobGluZSkgaW4gKExpc3RUeXBlLCBUdXBsZVR5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICAgb3V0bXNnLmFwcGVuZCgibGluZXMgJWQtJWQ6ICIgJSB0dXBsZSAobGluZSkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvdXRtc2cuYXBwZW5kKCJsaW5lICVkOiAiICUgbGluZSkKICAgICAgICAgb3V0bXNnLmFwcGVuZChzdHIobXNnKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZy5qb2luKG91dG1zZywgIiIpCisgICAgICAgIHJldHVybiAnJy5qb2luKG91dG1zZykKIAogCiAgICAgZGVmIGVycm9yIChzZWxmLCBtc2csIGxpbmU9Tm9uZSk6CkBAIC0xOTYsNyArMTk1LDcgQEAKICAgICAgICAgICAgICAgICAjIHVuZXNjYXBlIGl0IChhbmQgYW55IG90aGVyIGVzY2FwZWQgIiMiJ3MgdGhhdCBtaWdodCBiZQogICAgICAgICAgICAgICAgICMgbHVya2luZyBpbiB0aGVyZSkgYW5kIG90aGVyd2lzZSBsZWF2ZSB0aGUgbGluZSBhbG9uZS4KIAotICAgICAgICAgICAgICAgIHBvcyA9IHN0cmluZy5maW5kIChsaW5lLCAiIyIpCisgICAgICAgICAgICAgICAgcG9zID0gbGluZS5maW5kKCIjIikKICAgICAgICAgICAgICAgICBpZiBwb3MgPT0gLTE6ICAgICAgICAgICAjIG5vICIjIiAtLSBubyBjb21tZW50cwogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKQEAgLTIxOSwxMSArMjE4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICMgICAjIGNvbW1lbnQgdGhhdCBzaG91bGQgYmUgaWdub3JlZAogICAgICAgICAgICAgICAgICAgICAjICAgdGhlcmUKICAgICAgICAgICAgICAgICAgICAgIyByZXN1bHQgaW4gImhlbGxvIHRoZXJlIi4KLSAgICAgICAgICAgICAgICAgICAgaWYgc3RyaW5nLnN0cmlwKGxpbmUpID09ICIiOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgPT0gIiI6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgIyBpdCdzIGFuIGVzY2FwZWQgIiMiCi0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzdHJpbmcucmVwbGFjZSAobGluZSwgIlxcIyIsICIjIikKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiXFwjIiwgIiMiKQogCiAKICAgICAgICAgICAgICMgZGlkIHByZXZpb3VzIGxpbmUgZW5kIHdpdGggYSBiYWNrc2xhc2g/IHRoZW4gYWNjdW11bGF0ZQpAQCAtMjM1LDExICsyMzQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkdXBfbGluZQogCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb2xsYXBzZV9qb2luOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gc3RyaW5nLmxzdHJpcCAobGluZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUubHN0cmlwKCkKICAgICAgICAgICAgICAgICBsaW5lID0gYnVpbGR1cF9saW5lICsgbGluZQogCiAgICAgICAgICAgICAgICAgIyBjYXJlZnVsOiBwYXkgYXR0ZW50aW9uIHRvIGxpbmUgbnVtYmVyIHdoZW4gaW5jcmVtZW50aW5nIGl0Ci0gICAgICAgICAgICAgICAgaWYgdHlwZSAoc2VsZi5jdXJyZW50X2xpbmUpIGlzIExpc3RUeXBlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jdXJyZW50X2xpbmUsIGxpc3QpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfbGluZVsxXSA9IHNlbGYuY3VycmVudF9saW5lWzFdICsgMQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9saW5lID0gW3NlbGYuY3VycmVudF9saW5lLApAQCAtMjUwLDcgKzI0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgICAgICAgICAjIHN0aWxsIGhhdmUgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmNyZW1lbnRpbmcgdGhlIGxpbmUgbnVtYmVyIQotICAgICAgICAgICAgICAgIGlmIHR5cGUgKHNlbGYuY3VycmVudF9saW5lKSBpcyBMaXN0VHlwZToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY3VycmVudF9saW5lLCBsaXN0KToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2xpbmUgPSBzZWxmLmN1cnJlbnRfbGluZVsxXSArIDEKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfbGluZSA9IHNlbGYuY3VycmVudF9saW5lICsgMQpAQCAtMjU5LDExICsyNTgsMTEgQEAKICAgICAgICAgICAgICMgc3RyaXAgd2hpdGVzcGFjZSBob3dldmVyIHRoZSBjbGllbnQgd2FudHMgKGxlYWRpbmcgYW5kCiAgICAgICAgICAgICAjIHRyYWlsaW5nLCBvciBvbmUgb3IgdGhlIG90aGVyLCBvciBuZWl0aGVyKQogICAgICAgICAgICAgaWYgc2VsZi5sc3RyaXBfd3MgYW5kIHNlbGYucnN0cmlwX3dzOgotICAgICAgICAgICAgICAgIGxpbmUgPSBzdHJpbmcuc3RyaXAgKGxpbmUpCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICAgZWxpZiBzZWxmLmxzdHJpcF93czoKLSAgICAgICAgICAgICAgICBsaW5lID0gc3RyaW5nLmxzdHJpcCAobGluZSkKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoKQogICAgICAgICAgICAgZWxpZiBzZWxmLnJzdHJpcF93czoKLSAgICAgICAgICAgICAgICBsaW5lID0gc3RyaW5nLnJzdHJpcCAobGluZSkKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQogCiAgICAgICAgICAgICAjIGJsYW5rIGxpbmUgKHdoZXRoZXIgd2UgcnN0cmlwJ2VkIG9yIG5vdCk/IHNraXAgdG8gbmV4dCBsaW5lCiAgICAgICAgICAgICAjIGlmIGFwcHJvcHJpYXRlCkBAIC0zMDMsODAgKzMwMiwzIEBACiAgICAgICAgICAgIGEgcGFyc2VyIHdpdGggbGluZS1hdC1hLXRpbWUgbG9va2FoZWFkLiIiIgogCiAgICAgICAgIHNlbGYubGluZWJ1Zi5hcHBlbmQgKGxpbmUpCi0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X2RhdGEgPSAiIiIjIHRlc3QgZmlsZQotCi1saW5lIDMgXFwKLSMgaW50ZXJ2ZW5pbmcgY29tbWVudAotICBjb250aW51ZXMgb24gbmV4dCBsaW5lCi0iIiIKLSAgICAjIHJlc3VsdCAxOiBubyBmYW5jeSBvcHRpb25zCi0gICAgcmVzdWx0MSA9IG1hcCAobGFtYmRhIHg6IHggKyAiXG4iLCBzdHJpbmcuc3BsaXQgKHRlc3RfZGF0YSwgIlxuIilbMDotMV0pCi0KLSAgICAjIHJlc3VsdCAyOiBqdXN0IHN0cmlwIGNvbW1lbnRzCi0gICAgcmVzdWx0MiA9IFsiXG4iLAotICAgICAgICAgICAgICAgImxpbmUgMyBcXFxuIiwKLSAgICAgICAgICAgICAgICIgIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmVcbiJdCi0KLSAgICAjIHJlc3VsdCAzOiBqdXN0IHN0cmlwIGJsYW5rIGxpbmVzCi0gICAgcmVzdWx0MyA9IFsiIyB0ZXN0IGZpbGVcbiIsCi0gICAgICAgICAgICAgICAibGluZSAzIFxcXG4iLAotICAgICAgICAgICAgICAgIiMgaW50ZXJ2ZW5pbmcgY29tbWVudFxuIiwKLSAgICAgICAgICAgICAgICIgIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmVcbiJdCi0KLSAgICAjIHJlc3VsdCA0OiBkZWZhdWx0LCBzdHJpcCBjb21tZW50cywgYmxhbmsgbGluZXMsIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCi0gICAgcmVzdWx0NCA9IFsibGluZSAzIFxcIiwKLSAgICAgICAgICAgICAgICIgIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmUiXQotCi0gICAgIyByZXN1bHQgNTogc3RyaXAgY29tbWVudHMgYW5kIGJsYW5rcywgcGx1cyBqb2luIGxpbmVzIChidXQgZG9uJ3QKLSAgICAjICJjb2xsYXBzZSIgam9pbmVkIGxpbmVzCi0gICAgcmVzdWx0NSA9IFsibGluZSAzICAgY29udGludWVzIG9uIG5leHQgbGluZSJdCi0KLSAgICAjIHJlc3VsdCA2OiBzdHJpcCBjb21tZW50cyBhbmQgYmxhbmtzLCBwbHVzIGpvaW4gbGluZXMgKGFuZAotICAgICMgImNvbGxhcHNlIiBqb2luZWQgbGluZXMKLSAgICByZXN1bHQ2ID0gWyJsaW5lIDMgY29udGludWVzIG9uIG5leHQgbGluZSJdCi0KLSAgICBkZWYgdGVzdF9pbnB1dCAoY291bnQsIGRlc2NyaXB0aW9uLCBmaWxlLCBleHBlY3RlZF9yZXN1bHQpOgotICAgICAgICByZXN1bHQgPSBmaWxlLnJlYWRsaW5lcyAoKQotICAgICAgICAjIHJlc3VsdCA9IHN0cmluZy5qb2luIChyZXN1bHQsICcnKQotICAgICAgICBpZiByZXN1bHQgPT0gZXhwZWN0ZWRfcmVzdWx0OgotICAgICAgICAgICAgcHJpbnQgIm9rICVkICglcykiICUgKGNvdW50LCBkZXNjcmlwdGlvbikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICJub3Qgb2sgJWQgKCVzKToiICUgKGNvdW50LCBkZXNjcmlwdGlvbikKLSAgICAgICAgICAgIHByaW50ICIqKiBleHBlY3RlZDoiCi0gICAgICAgICAgICBwcmludCBleHBlY3RlZF9yZXN1bHQKLSAgICAgICAgICAgIHByaW50ICIqKiByZWNlaXZlZDoiCi0gICAgICAgICAgICBwcmludCByZXN1bHQKLQotCi0gICAgZmlsZW5hbWUgPSAidGVzdC50eHQiCi0gICAgb3V0X2ZpbGUgPSBvcGVuIChmaWxlbmFtZSwgInciKQotICAgIG91dF9maWxlLndyaXRlICh0ZXN0X2RhdGEpCi0gICAgb3V0X2ZpbGUuY2xvc2UgKCkKLQotICAgIGluX2ZpbGUgPSBUZXh0RmlsZSAoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTAsIHNraXBfYmxhbmtzPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICBsc3RyaXBfd3M9MCwgcnN0cmlwX3dzPTApCi0gICAgdGVzdF9pbnB1dCAoMSwgIm5vIHByb2Nlc3NpbmciLCBpbl9maWxlLCByZXN1bHQxKQotCi0gICAgaW5fZmlsZSA9IFRleHRGaWxlIChmaWxlbmFtZSwgc3RyaXBfY29tbWVudHM9MSwgc2tpcF9ibGFua3M9MCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxzdHJpcF93cz0wLCByc3RyaXBfd3M9MCkKLSAgICB0ZXN0X2lucHV0ICgyLCAic3RyaXAgY29tbWVudHMiLCBpbl9maWxlLCByZXN1bHQyKQotCi0gICAgaW5fZmlsZSA9IFRleHRGaWxlIChmaWxlbmFtZSwgc3RyaXBfY29tbWVudHM9MCwgc2tpcF9ibGFua3M9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxzdHJpcF93cz0wLCByc3RyaXBfd3M9MCkKLSAgICB0ZXN0X2lucHV0ICgzLCAic3RyaXAgYmxhbmtzIiwgaW5fZmlsZSwgcmVzdWx0MykKLQotICAgIGluX2ZpbGUgPSBUZXh0RmlsZSAoZmlsZW5hbWUpCi0gICAgdGVzdF9pbnB1dCAoNCwgImRlZmF1bHQgcHJvY2Vzc2luZyIsIGluX2ZpbGUsIHJlc3VsdDQpCi0KLSAgICBpbl9maWxlID0gVGV4dEZpbGUgKGZpbGVuYW1lLCBzdHJpcF9jb21tZW50cz0xLCBza2lwX2JsYW5rcz0xLAotICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9saW5lcz0xLCByc3RyaXBfd3M9MSkKLSAgICB0ZXN0X2lucHV0ICg1LCAiam9pbiBsaW5lcyB3aXRob3V0IGNvbGxhcHNpbmciLCBpbl9maWxlLCByZXN1bHQ1KQotCi0gICAgaW5fZmlsZSA9IFRleHRGaWxlIChmaWxlbmFtZSwgc3RyaXBfY29tbWVudHM9MSwgc2tpcF9ibGFua3M9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGpvaW5fbGluZXM9MSwgcnN0cmlwX3dzPTEsIGNvbGxhcHNlX2pvaW49MSkKLSAgICB0ZXN0X2lucHV0ICg2LCAiam9pbiBsaW5lcyB3aXRoIGNvbGxhcHNpbmciLCBpbl9maWxlLCByZXN1bHQ2KQotCi0gICAgb3MucmVtb3ZlIChmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdXRpbC5weQppbmRleCBlOTJiZWYxLi5mMDZlNGZkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CkBAIC0xMTYsMTMgKzExNiwxNSBAQAogICAgICAgICAgICAgICAgICMgYmVoYXZpb3VyLgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbSA9IHJlLnNlYXJjaCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHInPGtleT5Qcm9kdWN0VXNlclZpc2libGVWZXJzaW9uPC9rZXk+XHMqJyArCi0gICAgICAgICAgICAgICAgICAgICAgICByJzxzdHJpbmc+KC4qPyk8L3N0cmluZz4nLCBmLnJlYWQoKSkKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBtYWNyZWxlYXNlID0gJy4nLmpvaW4obS5ncm91cCgxKS5zcGxpdCgnLicpWzoyXSkKLSAgICAgICAgICAgICAgICAjIGVsc2U6IGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBiZWhhdmlvdXIKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG0gPSByZS5zZWFyY2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcic8a2V5PlByb2R1Y3RVc2VyVmlzaWJsZVZlcnNpb248L2tleT5ccyonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByJzxzdHJpbmc+KC4qPyk8L3N0cmluZz4nLCBmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY3JlbGVhc2UgPSAnLicuam9pbihtLmdyb3VwKDEpLnNwbGl0KCcuJylbOjJdKQorICAgICAgICAgICAgICAgICAgICAjIGVsc2U6IGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBiZWhhdmlvdXIKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICBpZiBub3QgbWFjdmVyOgogICAgICAgICAgICAgbWFjdmVyID0gbWFjcmVsZWFzZQpAQCAtMjM0LDE1ICsyMzYsNiBAQAogICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCiAKLSAgICBlbGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKHBhdGhuYW1lKToKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGhuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBDaG9wIG9mZiB2b2x1bWUgbmFtZSBmcm9tIHN0YXJ0IG9mIHBhdGgKLSAgICAgICAgICAgIGVsZW1lbnRzID0gc3RyaW5nLnNwbGl0KHBhdGhuYW1lLCAiOiIsIDEpCi0gICAgICAgICAgICBwYXRobmFtZSA9ICI6IiArIGVsZW1lbnRzWzFdCi0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG5ld19yb290LCBwYXRobmFtZSkKLQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIFwKICAgICAgICAgICAgICAgIm5vdGhpbmcga25vd24gYWJvdXQgcGxhdGZvcm0gJyVzJyIgJSBvcy5uYW1lCmRpZmYgLS1naXQgYS9MaWIvZG9jdGVzdC5weSBiL0xpYi9kb2N0ZXN0LnB5CmluZGV4IGYxY2IxZjIuLjU1NjVhYWIgMTAwNjQ0Ci0tLSBhL0xpYi9kb2N0ZXN0LnB5CisrKyBiL0xpYi9kb2N0ZXN0LnB5CkBAIC0yMTYsNyArMjE2LDggQEAKICAgICAgICAgICAgICAgICAjIGdldF9kYXRhKCkgb3BlbnMgZmlsZXMgYXMgJ3JiJywgc28gb25lIG11c3QgZG8gdGhlIGVxdWl2YWxlbnQKICAgICAgICAgICAgICAgICAjIGNvbnZlcnNpb24gYXMgdW5pdmVyc2FsIG5ld2xpbmVzIHdvdWxkIGRvLgogICAgICAgICAgICAgICAgIHJldHVybiBmaWxlX2NvbnRlbnRzLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJyksIGZpbGVuYW1lCi0gICAgcmV0dXJuIG9wZW4oZmlsZW5hbWUpLnJlYWQoKSwgZmlsZW5hbWUKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGY6CisgICAgICAgIHJldHVybiBmLnJlYWQoKSwgZmlsZW5hbWUKIAogIyBVc2Ugc3lzLnN0ZG91dCBlbmNvZGluZyBmb3Igb3VwdXQuCiBfZW5jb2RpbmcgPSBnZXRhdHRyKHN5cy5fX3N0ZG91dF9fLCAnZW5jb2RpbmcnLCBOb25lKSBvciAndXRmLTgnCkBAIC0xMjg3LDkgKzEyODgsOSBAQAogCiAgICAgICAgICAgICAgICAgIyBBbm90aGVyIGNoYW5jZSBpZiB0aGV5IGRpZG4ndCBjYXJlIGFib3V0IHRoZSBkZXRhaWwuCiAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLm9wdGlvbmZsYWdzICYgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUw6Ci0gICAgICAgICAgICAgICAgICAgIG0xID0gcmUubWF0Y2gocidbXjpdKjonLCBleGFtcGxlLmV4Y19tc2cpCi0gICAgICAgICAgICAgICAgICAgIG0yID0gcmUubWF0Y2gocidbXjpdKjonLCBleGNfbXNnKQotICAgICAgICAgICAgICAgICAgICBpZiBtMSBhbmQgbTIgYW5kIGNoZWNrKG0xLmdyb3VwKDApLCBtMi5ncm91cCgwKSwKKyAgICAgICAgICAgICAgICAgICAgbTEgPSByZS5tYXRjaChyJyg/OlteOl0qXC4pPyhbXjpdKjopJywgZXhhbXBsZS5leGNfbXNnKQorICAgICAgICAgICAgICAgICAgICBtMiA9IHJlLm1hdGNoKHInKD86W146XSpcLik/KFteOl0qOiknLCBleGNfbXNnKQorICAgICAgICAgICAgICAgICAgICBpZiBtMSBhbmQgbTIgYW5kIGNoZWNrKG0xLmdyb3VwKDEpLCBtMi5ncm91cCgxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbmZsYWdzKToKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGNvbWUgPSBTVUNDRVNTCiAKQEAgLTEzMjcsMTMgKzEzMjgsMTUgQEAKICAgICAgICAgc2VsZi50cmllcyArPSB0CiAKICAgICBfX0xJTkVDQUNIRV9GSUxFTkFNRV9SRSA9IHJlLmNvbXBpbGUocic8ZG9jdGVzdCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInKD9QPG5hbWU+W1x3XC5dKyknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInKD9QPG5hbWU+LispJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ1xbKD9QPGV4YW1wbGVudW0+XGQrKVxdPiQnKQogICAgIGRlZiBfX3BhdGNoZWRfbGluZWNhY2hlX2dldGxpbmVzKHNlbGYsIGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscz1Ob25lKToKICAgICAgICAgbSA9IHNlbGYuX19MSU5FQ0FDSEVfRklMRU5BTUVfUkUubWF0Y2goZmlsZW5hbWUpCiAgICAgICAgIGlmIG0gYW5kIG0uZ3JvdXAoJ25hbWUnKSA9PSBzZWxmLnRlc3QubmFtZToKICAgICAgICAgICAgIGV4YW1wbGUgPSBzZWxmLnRlc3QuZXhhbXBsZXNbaW50KG0uZ3JvdXAoJ2V4YW1wbGVudW0nKSldCi0gICAgICAgICAgICBzb3VyY2UgPSBleGFtcGxlLnNvdXJjZS5lbmNvZGUoJ2FzY2lpJywgJ2JhY2tzbGFzaHJlcGxhY2UnKQorICAgICAgICAgICAgc291cmNlID0gZXhhbXBsZS5zb3VyY2UKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc291cmNlLCB1bmljb2RlKToKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCdhc2NpaScsICdiYWNrc2xhc2hyZXBsYWNlJykKICAgICAgICAgICAgIHJldHVybiBzb3VyY2Uuc3BsaXRsaW5lcyhUcnVlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2F2ZV9saW5lY2FjaGVfZ2V0bGluZXMoZmlsZW5hbWUsIG1vZHVsZV9nbG9iYWxzKQpAQCAtMTc3MSw3ICsxNzc0LDcgQEAKIAogICAgIFJldHVybiAoI2ZhaWx1cmVzLCAjdGVzdHMpLgogCi0gICAgU2VlIGRvY3Rlc3QuX19kb2NfXyBmb3IgYW4gb3ZlcnZpZXcuCisgICAgU2VlIGhlbHAoZG9jdGVzdCkgZm9yIGFuIG92ZXJ2aWV3LgogCiAgICAgT3B0aW9uYWwga2V5d29yZCBhcmcgIm5hbWUiIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGU7IGJ5IGRlZmF1bHQKICAgICB1c2UgbS5fX25hbWVfXy4KQEAgLTIyNTgsNiArMjI2MSwxOSBAQAogICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgogICAgICAgICByZXR1cm4gIkRvY3Rlc3Q6ICIgKyBzZWxmLl9kdF90ZXN0Lm5hbWUKIAorY2xhc3MgU2tpcERvY1Rlc3RDYXNlKERvY1Rlc3RDYXNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIERvY1Rlc3RDYXNlLl9faW5pdF9fKHNlbGYsIE5vbmUpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcFRlc3QoIkRvY1Rlc3RTdWl0ZSB3aWxsIG5vdCB3b3JrIHdpdGggLU8yIGFuZCBhYm92ZSIpCisKKyAgICBkZWYgdGVzdF9za2lwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2hvcnREZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuICJTa2lwcGluZyB0ZXN0cyBmcm9tICVzIiAlIG1vZHVsZS5fX25hbWVfXworCiBkZWYgRG9jVGVzdFN1aXRlKG1vZHVsZT1Ob25lLCBnbG9icz1Ob25lLCBleHRyYWdsb2JzPU5vbmUsIHRlc3RfZmluZGVyPU5vbmUsCiAgICAgICAgICAgICAgICAgICoqb3B0aW9ucyk6CiAgICAgIiIiCkBAIC0yMzAwLDEzICsyMzE2LDIwIEBACiAKICAgICBtb2R1bGUgPSBfbm9ybWFsaXplX21vZHVsZShtb2R1bGUpCiAgICAgdGVzdHMgPSB0ZXN0X2ZpbmRlci5maW5kKG1vZHVsZSwgZ2xvYnM9Z2xvYnMsIGV4dHJhZ2xvYnM9ZXh0cmFnbG9icykKLSAgICBpZiBub3QgdGVzdHM6CisKKyAgICBpZiBub3QgdGVzdHMgYW5kIHN5cy5mbGFncy5vcHRpbWl6ZSA+PTI6CisgICAgICAgICMgU2tpcCBkb2N0ZXN0cyB3aGVuIHJ1bm5pbmcgd2l0aCAtTzIKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KFNraXBEb2NUZXN0Q2FzZSgpKQorICAgICAgICByZXR1cm4gc3VpdGUKKyAgICBlbGlmIG5vdCB0ZXN0czoKICAgICAgICAgIyBXaHkgZG8gd2Ugd2FudCB0byBkbyB0aGlzPyBCZWNhdXNlIGl0IHJldmVhbHMgYSBidWcgdGhhdCBtaWdodAogICAgICAgICAjIG90aGVyd2lzZSBiZSBoaWRkZW4uCiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobW9kdWxlLCAiaGFzIG5vIHRlc3RzIikKIAogICAgIHRlc3RzLnNvcnQoKQogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKwogICAgIGZvciB0ZXN0IGluIHRlc3RzOgogICAgICAgICBpZiBsZW4odGVzdC5leGFtcGxlcykgPT0gMDoKICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC0yNjc4LDI3ICsyNzAxLDMxIEBACiAgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgIH0KIAorCiBkZWYgX3Rlc3QoKToKICAgICB0ZXN0ZmlsZXMgPSBbYXJnIGZvciBhcmcgaW4gc3lzLmFyZ3ZbMTpdIGlmIGFyZyBhbmQgYXJnWzBdICE9ICctJ10KLSAgICBpZiB0ZXN0ZmlsZXM6Ci0gICAgICAgIGZvciBmaWxlbmFtZSBpbiB0ZXN0ZmlsZXM6Ci0gICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgiLnB5Iik6Ci0gICAgICAgICAgICAgICAgIyBJdCBpcyBhIG1vZHVsZSAtLSBpbnNlcnQgaXRzIGRpciBpbnRvIHN5cy5wYXRoIGFuZCB0cnkgdG8KLSAgICAgICAgICAgICAgICAjIGltcG9ydCBpdC4gSWYgaXQgaXMgcGFydCBvZiBhIHBhY2thZ2UsIHRoYXQgcG9zc2libHkgd29uJ3Qgd29yawotICAgICAgICAgICAgICAgICMgYmVjYXVzZSBvZiBwYWNrYWdlIGltcG9ydHMuCi0gICAgICAgICAgICAgICAgZGlybmFtZSwgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQotICAgICAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBkaXJuYW1lKQotICAgICAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKGZpbGVuYW1lWzotM10pCi0gICAgICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICAgICAgZmFpbHVyZXMsIF8gPSB0ZXN0bW9kKG0pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdGZpbGUoZmlsZW5hbWUsIG1vZHVsZV9yZWxhdGl2ZT1GYWxzZSkKLSAgICAgICAgICAgIGlmIGZhaWx1cmVzOgotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgZWxzZToKLSAgICAgICAgciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKLSAgICAgICAgci5ydW4oRG9jVGVzdFN1aXRlKCkpCisgICAgaWYgbm90IHRlc3RmaWxlczoKKyAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisgICAgICAgIGlmICdfX2xvYWRlcl9fJyBpbiBnbG9iYWxzKCk6ICAgICAgICAgICMgcHl0aG9uIC1tCisgICAgICAgICAgICBuYW1lLCBfID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQorICAgICAgICBwcmludCgidXNhZ2U6IHswfSBbLXZdIGZpbGUgLi4uIi5mb3JtYXQobmFtZSkpCisgICAgICAgIHJldHVybiAyCisgICAgZm9yIGZpbGVuYW1lIGluIHRlc3RmaWxlczoKKyAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgIyBJdCBpcyBhIG1vZHVsZSAtLSBpbnNlcnQgaXRzIGRpciBpbnRvIHN5cy5wYXRoIGFuZCB0cnkgdG8KKyAgICAgICAgICAgICMgaW1wb3J0IGl0LiBJZiBpdCBpcyBwYXJ0IG9mIGEgcGFja2FnZSwgdGhhdCBwb3NzaWJseQorICAgICAgICAgICAgIyB3b24ndCB3b3JrIGJlY2F1c2Ugb2YgcGFja2FnZSBpbXBvcnRzLgorICAgICAgICAgICAgZGlybmFtZSwgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQorICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGRpcm5hbWUpCisgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhmaWxlbmFtZVs6LTNdKQorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisgICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3Rtb2QobSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdGZpbGUoZmlsZW5hbWUsIG1vZHVsZV9yZWxhdGl2ZT1GYWxzZSkKKyAgICAgICAgaWYgZmFpbHVyZXM6CisgICAgICAgICAgICByZXR1cm4gMQogICAgIHJldHVybiAwCiAKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBzeXMuZXhpdChfdGVzdCgpKQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL19faW5pdF9fLnB5IGIvTGliL2VtYWlsL19faW5pdF9fLnB5CmluZGV4IGE3OTM0MzYuLmE3ODBlYmUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9fX2luaXRfXy5weQorKysgYi9MaWIvZW1haWwvX19pbml0X18ucHkKQEAgLTQsNyArNCw3IEBACiAKICIiIkEgcGFja2FnZSBmb3IgcGFyc2luZywgaGFuZGxpbmcsIGFuZCBnZW5lcmF0aW5nIGVtYWlsIG1lc3NhZ2VzLiIiIgogCi1fX3ZlcnNpb25fXyA9ICc0LjAuMicKK19fdmVyc2lvbl9fID0gJzQuMC4zJwogCiBfX2FsbF9fID0gWwogICAgICMgT2xkIG5hbWVzCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvX3BhcnNlYWRkci5weSBiL0xpYi9lbWFpbC9fcGFyc2VhZGRyLnB5CmluZGV4IDgxOTEzYTMuLjNiZDRiYTQgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9fcGFyc2VhZGRyLnB5CisrKyBiL0xpYi9lbWFpbC9fcGFyc2VhZGRyLnB5CkBAIC0xMDcsNiArMTA3LDE4IEBACiAgICAgICAgIHRzcyA9IGludCh0c3MpCiAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCisgICAgIyBDaGVjayBmb3IgYSB5eSBzcGVjaWZpZWQgaW4gdHdvLWRpZ2l0IGZvcm1hdCwgdGhlbiBjb252ZXJ0IGl0IHRvIHRoZQorICAgICMgYXBwcm9wcmlhdGUgZm91ci1kaWdpdCBmb3JtYXQsIGFjY29yZGluZyB0byB0aGUgUE9TSVggc3RhbmRhcmQuIFJGQyA4MjIKKyAgICAjIGNhbGxzIGZvciBhIHR3by1kaWdpdCB5eSwgYnV0IFJGQyAyODIyICh3aGljaCBvYnNvbGV0ZXMgUkZDIDgyMikKKyAgICAjIG1hbmRhdGVzIGEgNC1kaWdpdCB5eS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKyAgICAjIHRoZSB0aW1lIG1vZHVsZS4KKyAgICBpZiB5eSA8IDEwMDoKKyAgICAgICAgIyBUaGUgeWVhciBpcyBiZXR3ZWVuIDE5NjkgYW5kIDE5OTkgKGluY2x1c2l2ZSkuCisgICAgICAgIGlmIHl5ID4gNjg6CisgICAgICAgICAgICB5eSArPSAxOTAwCisgICAgICAgICMgVGhlIHllYXIgaXMgYmV0d2VlbiAyMDAwIGFuZCAyMDY4IChpbmNsdXNpdmUpLgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeXkgKz0gMjAwMAogICAgIHR6b2Zmc2V0ID0gTm9uZQogICAgIHR6ID0gdHoudXBwZXIoKQogICAgIGlmIHR6IGluIF90aW1lem9uZXM6CkBAIC0xNDgsNyArMTYwLDEyIEBACiAKIAogZGVmIHF1b3RlKHN0cik6Ci0gICAgIiIiQWRkIHF1b3RlcyBhcm91bmQgYSBzdHJpbmcuIiIiCisgICAgIiIiUHJlcGFyZSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBhIHF1b3RlZCBzdHJpbmcuCisKKyAgICBUdXJucyBiYWNrc2xhc2ggYW5kIGRvdWJsZSBxdW90ZSBjaGFyYWN0ZXJzIGludG8gcXVvdGVkIHBhaXJzLiAgVGhlc2UKKyAgICBhcmUgdGhlIG9ubHkgY2hhcmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgcXVvdGVkIGluc2lkZSBhIHF1b3RlZCBzdHJpbmcuCisgICAgRG9lcyBub3QgYWRkIHRoZSBzdXJyb3VuZGluZyBkb3VibGUgcXVvdGVzLgorICAgICIiIgogICAgIHJldHVybiBzdHIucmVwbGFjZSgnXFwnLCAnXFxcXCcpLnJlcGxhY2UoJyInLCAnXFwiJykKIAogCkBAIC0zMDYsNyArMzIzLDcgQEAKICAgICAgICAgICAgICAgICBhc2xpc3QuYXBwZW5kKCcuJykKICAgICAgICAgICAgICAgICBzZWxmLnBvcyArPSAxCiAgICAgICAgICAgICBlbGlmIHNlbGYuZmllbGRbc2VsZi5wb3NdID09ICciJzoKLSAgICAgICAgICAgICAgICBhc2xpc3QuYXBwZW5kKCciJXMiJyAlIHNlbGYuZ2V0cXVvdGUoKSkKKyAgICAgICAgICAgICAgICBhc2xpc3QuYXBwZW5kKCciJXMiJyAlIHF1b3RlKHNlbGYuZ2V0cXVvdGUoKSkpCiAgICAgICAgICAgICBlbGlmIHNlbGYuZmllbGRbc2VsZi5wb3NdIGluIHNlbGYuYXRvbWVuZHM6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvY2hhcnNldC5weSBiL0xpYi9lbWFpbC9jaGFyc2V0LnB5CmluZGV4IDliZWJmNmYuLmRkZGFhNzYgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9jaGFyc2V0LnB5CisrKyBiL0xpYi9lbWFpbC9jaGFyc2V0LnB5CkBAIC05LDYgKzksNyBAQAogICAgICdhZGRfY29kZWMnLAogICAgIF0KIAoraW1wb3J0IGNvZGVjcwogaW1wb3J0IGVtYWlsLmJhc2U2NG1pbWUKIGltcG9ydCBlbWFpbC5xdW9wcmltaW1lCiAKQEAgLTIwOCw4ICsyMDksMTMgQEAKICAgICAgICAgICAgICAgICBpbnB1dF9jaGFyc2V0ID0gdW5pY29kZShpbnB1dF9jaGFyc2V0LCAnYXNjaWknKQogICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgZXJyb3JzLkNoYXJzZXRFcnJvcihpbnB1dF9jaGFyc2V0KQotICAgICAgICBpbnB1dF9jaGFyc2V0ID0gaW5wdXRfY2hhcnNldC5sb3dlcigpCi0gICAgICAgICMgU2V0IHRoZSBpbnB1dCBjaGFyc2V0IGFmdGVyIGZpbHRlcmluZyB0aHJvdWdoIHRoZSBhbGlhc2VzCisgICAgICAgIGlucHV0X2NoYXJzZXQgPSBpbnB1dF9jaGFyc2V0Lmxvd2VyKCkuZW5jb2RlKCdhc2NpaScpCisgICAgICAgICMgU2V0IHRoZSBpbnB1dCBjaGFyc2V0IGFmdGVyIGZpbHRlcmluZyB0aHJvdWdoIHRoZSBhbGlhc2VzIGFuZC9vciBjb2RlY3MKKyAgICAgICAgaWYgbm90IChpbnB1dF9jaGFyc2V0IGluIEFMSUFTRVMgb3IgaW5wdXRfY2hhcnNldCBpbiBDSEFSU0VUUyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW5wdXRfY2hhcnNldCA9IGNvZGVjcy5sb29rdXAoaW5wdXRfY2hhcnNldCkubmFtZQorICAgICAgICAgICAgZXhjZXB0IExvb2t1cEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5pbnB1dF9jaGFyc2V0ID0gQUxJQVNFUy5nZXQoaW5wdXRfY2hhcnNldCwgaW5wdXRfY2hhcnNldCkKICAgICAgICAgIyBXZSBjYW4gdHJ5IHRvIGd1ZXNzIHdoaWNoIGVuY29kaW5nIGFuZCBjb252ZXJzaW9uIHRvIHVzZSBieSB0aGUKICAgICAgICAgIyBjaGFyc2V0X21hcCBkaWN0aW9uYXJ5LiAgVHJ5IHRoYXQgZmlyc3QsIGJ1dCBsZXQgdGhlIHVzZXIgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9lbmNvZGVycy5weSBiL0xpYi9lbWFpbC9lbmNvZGVycy5weQppbmRleCAwNjAxNmNkLi5hZjQ1ZTYyIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvZW5jb2RlcnMucHkKKysrIGIvTGliL2VtYWlsL2VuY29kZXJzLnB5CkBAIC03MiwxMyArNzIsNyBAQAogICAgIHRyeToKICAgICAgICAgb3JpZy5lbmNvZGUoJ2FzY2lpJykKICAgICBleGNlcHQgVW5pY29kZUVycm9yOgotICAgICAgICAjIGlzby0yMDIyLSogaXMgbm9uLUFTQ0lJIGJ1dCBzdGlsbCA3LWJpdAotICAgICAgICBjaGFyc2V0ID0gbXNnLmdldF9jaGFyc2V0KCkKLSAgICAgICAgb3V0cHV0X2NzZXQgPSBjaGFyc2V0IGFuZCBjaGFyc2V0Lm91dHB1dF9jaGFyc2V0Ci0gICAgICAgIGlmIG91dHB1dF9jc2V0IGFuZCBvdXRwdXRfY3NldC5sb3dlcigpLnN0YXJ0c3dpdGgoJ2lzby0yMjAyLScpOgotICAgICAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAnN2JpdCcKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzhiaXQnCisgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzhiaXQnCiAgICAgZWxzZToKICAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAnN2JpdCcKIApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2dlbmVyYXRvci5weSBiL0xpYi9lbWFpbC9nZW5lcmF0b3IucHkKaW5kZXggNTYwY2U5YS4uZWI3MTA0NCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2dlbmVyYXRvci5weQorKysgYi9MaWIvZW1haWwvZ2VuZXJhdG9yLnB5CkBAIC0xNTUsMTAgKzE1NSwxMyBAQAogICAgICAgICAgICAgICAgICMgYmUgdG8gbm90IHNwbGl0IHRoZSBzdHJpbmcgYW5kIHJpc2sgaXQgYmVpbmcgdG9vIGxvbmcuCiAgICAgICAgICAgICAgICAgcHJpbnQgPj4gc2VsZi5fZnAsIHYKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBIZWFkZXIncyBnb3QgbG90cyBvZiBzbWFydHMsIHNvIHVzZSBpdC4KKyAgICAgICAgICAgICAgICAjIEhlYWRlcidzIGdvdCBsb3RzIG9mIHNtYXJ0cywgc28gdXNlIGl0LiAgTm90ZSB0aGF0IHRoaXMgaXMKKyAgICAgICAgICAgICAgICAjIGZ1bmRhbWVudGFsbHkgYnJva2VuIHRob3VnaCBiZWNhdXNlIHdlIGxvc2UgaWRlbXBvdGVuY3kgd2hlbgorICAgICAgICAgICAgICAgICMgdGhlIGhlYWRlciBzdHJpbmcgaXMgY29udGludWVkIHdpdGggdGFicy4gIEl0IHdpbGwgbm93IGJlCisgICAgICAgICAgICAgICAgIyBjb250aW51ZWQgd2l0aCBzcGFjZXMuICBUaGlzIHdhcyByZXZlcnNlZGx5IGJyb2tlbiBiZWZvcmUgd2UKKyAgICAgICAgICAgICAgICAjIGZpeGVkIGJ1ZyAxOTc0LiAgRWl0aGVyIHdheSwgd2UgbG9zZS4KICAgICAgICAgICAgICAgICBwcmludCA+PiBzZWxmLl9mcCwgSGVhZGVyKAotICAgICAgICAgICAgICAgICAgICB2LCBtYXhsaW5lbGVuPXNlbGYuX21heGhlYWRlcmxlbiwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyX25hbWU9aCwgY29udGludWF0aW9uX3dzPSdcdCcpLmVuY29kZSgpCisgICAgICAgICAgICAgICAgICAgIHYsIG1heGxpbmVsZW49c2VsZi5fbWF4aGVhZGVybGVuLCBoZWFkZXJfbmFtZT1oKS5lbmNvZGUoKQogICAgICAgICAjIEEgYmxhbmsgbGluZSBhbHdheXMgc2VwYXJhdGVzIGhlYWRlcnMgZnJvbSBib2R5CiAgICAgICAgIHByaW50ID4+IHNlbGYuX2ZwCiAKQEAgLTE5OSwxOCArMjAyLDEzIEBACiAgICAgICAgICAgICBnID0gc2VsZi5jbG9uZShzKQogICAgICAgICAgICAgZy5mbGF0dGVuKHBhcnQsIHVuaXhmcm9tPUZhbHNlKQogICAgICAgICAgICAgbXNndGV4dHMuYXBwZW5kKHMuZ2V0dmFsdWUoKSkKLSAgICAgICAgIyBOb3cgbWFrZSBzdXJlIHRoZSBib3VuZGFyeSB3ZSd2ZSBzZWxlY3RlZCBkb2Vzbid0IGFwcGVhciBpbiBhbnkgb2YKLSAgICAgICAgIyB0aGUgbWVzc2FnZSB0ZXh0cy4KLSAgICAgICAgYWxsdGV4dCA9IE5MLmpvaW4obXNndGV4dHMpCiAgICAgICAgICMgQkFXOiBXaGF0IGFib3V0IGJvdW5kYXJpZXMgdGhhdCBhcmUgd3JhcHBlZCBpbiBkb3VibGUtcXVvdGVzPwotICAgICAgICBib3VuZGFyeSA9IG1zZy5nZXRfYm91bmRhcnkoZmFpbG9iaj1fbWFrZV9ib3VuZGFyeShhbGx0ZXh0KSkKLSAgICAgICAgIyBJZiB3ZSBoYWQgdG8gY2FsY3VsYXRlIGEgbmV3IGJvdW5kYXJ5IGJlY2F1c2UgdGhlIGJvZHkgdGV4dAotICAgICAgICAjIGNvbnRhaW5lZCB0aGF0IHN0cmluZywgc2V0IHRoZSBuZXcgYm91bmRhcnkuICBXZSBkb24ndCBkbyBpdAotICAgICAgICAjIHVuY29uZGl0aW9uYWxseSBiZWNhdXNlLCB3aGlsZSBzZXRfYm91bmRhcnkoKSBwcmVzZXJ2ZXMgb3JkZXIsIGl0Ci0gICAgICAgICMgZG9lc24ndCBwcmVzZXJ2ZSBuZXdsaW5lcy9jb250aW51YXRpb25zIGluIGhlYWRlcnMuICBUaGlzIGlzIG5vIGJpZwotICAgICAgICAjIGRlYWwgaW4gcHJhY3RpY2UsIGJ1dCB0dXJucyBvdXQgdG8gYmUgaW5jb252ZW5pZW50IGZvciB0aGUgdW5pdHRlc3QKLSAgICAgICAgIyBzdWl0ZS4KLSAgICAgICAgaWYgbXNnLmdldF9ib3VuZGFyeSgpICE9IGJvdW5kYXJ5OgorICAgICAgICBib3VuZGFyeSA9IG1zZy5nZXRfYm91bmRhcnkoKQorICAgICAgICBpZiBub3QgYm91bmRhcnk6CisgICAgICAgICAgICAjIENyZWF0ZSBhIGJvdW5kYXJ5IHRoYXQgZG9lc24ndCBhcHBlYXIgaW4gYW55IG9mIHRoZQorICAgICAgICAgICAgIyBtZXNzYWdlIHRleHRzLgorICAgICAgICAgICAgYWxsdGV4dCA9IE5MLmpvaW4obXNndGV4dHMpCisgICAgICAgICAgICBib3VuZGFyeSA9IF9tYWtlX2JvdW5kYXJ5KGFsbHRleHQpCiAgICAgICAgICAgICBtc2cuc2V0X2JvdW5kYXJ5KGJvdW5kYXJ5KQogICAgICAgICAjIElmIHRoZXJlJ3MgYSBwcmVhbWJsZSwgd3JpdGUgaXQgb3V0LCB3aXRoIGEgdHJhaWxpbmcgQ1JMRgogICAgICAgICBpZiBtc2cucHJlYW1ibGUgaXMgbm90IE5vbmU6CkBAIC0yODksNyArMjg3LDcgQEAKIF9GTVQgPSAnW05vbi10ZXh0ICglKHR5cGUpcykgcGFydCBvZiBtZXNzYWdlIG9taXR0ZWQsIGZpbGVuYW1lICUoZmlsZW5hbWUpc10nCiAKIGNsYXNzIERlY29kZWRHZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICAiIiJHZW5lcmF0b3IgYSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIGEgbWVzc2FnZS4KKyAgICAiIiJHZW5lcmF0ZXMgYSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIGEgbWVzc2FnZS4KIAogICAgIExpa2UgdGhlIEdlbmVyYXRvciBiYXNlIGNsYXNzLCBleGNlcHQgdGhhdCBub24tdGV4dCBwYXJ0cyBhcmUgc3Vic3RpdHV0ZWQKICAgICB3aXRoIGEgZm9ybWF0IHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhcnQuCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvaGVhZGVyLnB5IGIvTGliL2VtYWlsL2hlYWRlci5weQppbmRleCA2ZTAzOTIyLi43MDJhZGYxIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvaGVhZGVyLnB5CisrKyBiL0xpYi9lbWFpbC9oZWFkZXIucHkKQEAgLTQ3LDYgKzQ3LDEwIEBACiAjIEZvciB1c2Ugd2l0aCAubWF0Y2goKQogZmNyZSA9IHJlLmNvbXBpbGUocidbXDA0MS1cMTc2XSs6JCcpCiAKKyMgRmluZCBhIGhlYWRlciBlbWJlZGVkIGluIGEgcHV0YXRpdmUgaGVhZGVyIHZhbHVlLiAgVXNlZCB0byBjaGVjayBmb3IKKyMgaGVhZGVyIGluamVjdGlvbiBhdHRhY2suCitfZW1iZWRlZF9oZWFkZXIgPSByZS5jb21waWxlKHInXG5bXiBcdF0rOicpCisKIAogDAogIyBIZWxwZXJzCkBAIC05Miw2ICs5Niw5IEBACiAgICAgICAgICAgICAgICAgaWYgZW5jb2RpbmcgPT0gJ3EnOgogICAgICAgICAgICAgICAgICAgICBkZWMgPSBlbWFpbC5xdW9wcmltaW1lLmhlYWRlcl9kZWNvZGUoZW5jb2RlZCkKICAgICAgICAgICAgICAgICBlbGlmIGVuY29kaW5nID09ICdiJzoKKyAgICAgICAgICAgICAgICAgICAgcGFkZXJyID0gbGVuKGVuY29kZWQpICUgNCAgICMgUG9zdGVsJ3MgbGF3OiBhZGQgbWlzc2luZyBwYWRkaW5nCisgICAgICAgICAgICAgICAgICAgIGlmIHBhZGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWQgKz0gJz09PSdbOjQgLSBwYWRlcnJdCiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYyA9IGVtYWlsLmJhc2U2NG1pbWUuZGVjb2RlKGVuY29kZWQpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBiaW5hc2NpaS5FcnJvcjoKQEAgLTQwMCw3ICs0MDcsMTEgQEAKICAgICAgICAgICAgIG5ld2NodW5rcyArPSBzZWxmLl9zcGxpdChzLCBjaGFyc2V0LCB0YXJnZXRsZW4sIHNwbGl0Y2hhcnMpCiAgICAgICAgICAgICBsYXN0Y2h1bmssIGxhc3RjaGFyc2V0ID0gbmV3Y2h1bmtzWy0xXQogICAgICAgICAgICAgbGFzdGxlbiA9IGxhc3RjaGFyc2V0LmVuY29kZWRfaGVhZGVyX2xlbihsYXN0Y2h1bmspCi0gICAgICAgIHJldHVybiBzZWxmLl9lbmNvZGVfY2h1bmtzKG5ld2NodW5rcywgbWF4bGluZWxlbikKKyAgICAgICAgdmFsdWUgPSBzZWxmLl9lbmNvZGVfY2h1bmtzKG5ld2NodW5rcywgbWF4bGluZWxlbikKKyAgICAgICAgaWYgX2VtYmVkZWRfaGVhZGVyLnNlYXJjaCh2YWx1ZSk6CisgICAgICAgICAgICByYWlzZSBIZWFkZXJQYXJzZUVycm9yKCJoZWFkZXIgdmFsdWUgYXBwZWFycyB0byBjb250YWluICIKKyAgICAgICAgICAgICAgICAiYW4gZW1iZWRkZWQgaGVhZGVyOiB7IXJ9Ii5mb3JtYXQodmFsdWUpKQorICAgICAgICByZXR1cm4gdmFsdWUKIAogCiAMCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvbWVzc2FnZS5weSBiL0xpYi9lbWFpbC9tZXNzYWdlLnB5CmluZGV4IDYyNjczOWIuLjdjOTMzNzAgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9tZXNzYWdlLnB5CisrKyBiL0xpYi9lbWFpbC9tZXNzYWdlLnB5CkBAIC0zOCw3ICszOCw5IEBACiBkZWYgX2Zvcm1hdHBhcmFtKHBhcmFtLCB2YWx1ZT1Ob25lLCBxdW90ZT1UcnVlKToKICAgICAiIiJDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBmb3JtYXQgYW5kIHJldHVybiBhIGtleT12YWx1ZSBwYWlyLgogCi0gICAgVGhpcyB3aWxsIHF1b3RlIHRoZSB2YWx1ZSBpZiBuZWVkZWQgb3IgaWYgcXVvdGUgaXMgdHJ1ZS4KKyAgICBUaGlzIHdpbGwgcXVvdGUgdGhlIHZhbHVlIGlmIG5lZWRlZCBvciBpZiBxdW90ZSBpcyB0cnVlLiAgSWYgdmFsdWUgaXMgYQorICAgIHRocmVlIHR1cGxlIChjaGFyc2V0LCBsYW5ndWFnZSwgdmFsdWUpLCBpdCB3aWxsIGJlIGVuY29kZWQgYWNjb3JkaW5nCisgICAgdG8gUkZDMjIzMSBydWxlcy4KICAgICAiIiIKICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZSBhbmQgbGVuKHZhbHVlKSA+IDA6CiAgICAgICAgICMgQSB0dXBsZSBpcyB1c2VkIGZvciBSRkMgMjIzMSBlbmNvZGVkIHBhcmFtZXRlciB2YWx1ZXMgd2hlcmUgaXRlbXMKQEAgLTk3LDcgKzk5LDcgQEAKICAgICBvYmplY3RzLCBvdGhlcndpc2UgaXQgaXMgYSBzdHJpbmcuCiAKICAgICBNZXNzYWdlIG9iamVjdHMgaW1wbGVtZW50IHBhcnQgb2YgdGhlIGBtYXBwaW5nJyBpbnRlcmZhY2UsIHdoaWNoIGFzc3VtZXMKLSAgICB0aGVyZSBpcyBleGFjdGx5IG9uZSBvY2N1cnJhbmNlIG9mIHRoZSBoZWFkZXIgcGVyIG1lc3NhZ2UuICBTb21lIGhlYWRlcnMKKyAgICB0aGVyZSBpcyBleGFjdGx5IG9uZSBvY2N1cnJlbmNlIG9mIHRoZSBoZWFkZXIgcGVyIG1lc3NhZ2UuICBTb21lIGhlYWRlcnMKICAgICBkbyBpbiBmYWN0IGFwcGVhciBtdWx0aXBsZSB0aW1lcyAoZS5nLiBSZWNlaXZlZCkgYW5kIGZvciB0aG9zZSBoZWFkZXJzLAogICAgIHlvdSBtdXN0IHVzZSB0aGUgZXhwbGljaXQgQVBJIHRvIHNldCBvciBnZXQgYWxsIHRoZSBoZWFkZXJzLiAgTm90IGFsbCBvZgogICAgIHRoZSBtYXBwaW5nIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkLgpAQCAtMjQ5LDkgKzI1MSw5IEBACiAgICAgICAgICMgQkFXOiBzaG91bGQgd2UgYWNjZXB0IHN0cmluZ3MgdGhhdCBjYW4gc2VydmUgYXMgYXJndW1lbnRzIHRvIHRoZQogICAgICAgICAjIENoYXJzZXQgY29uc3RydWN0b3I/CiAgICAgICAgIHNlbGYuX2NoYXJzZXQgPSBjaGFyc2V0Ci0gICAgICAgIGlmIG5vdCBzZWxmLmhhc19rZXkoJ01JTUUtVmVyc2lvbicpOgorICAgICAgICBpZiAnTUlNRS1WZXJzaW9uJyBub3QgaW4gc2VsZjoKICAgICAgICAgICAgIHNlbGYuYWRkX2hlYWRlcignTUlNRS1WZXJzaW9uJywgJzEuMCcpCi0gICAgICAgIGlmIG5vdCBzZWxmLmhhc19rZXkoJ0NvbnRlbnQtVHlwZScpOgorICAgICAgICBpZiAnQ29udGVudC1UeXBlJyBub3QgaW4gc2VsZjoKICAgICAgICAgICAgIHNlbGYuYWRkX2hlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9Y2hhcnNldC5nZXRfb3V0cHV0X2NoYXJzZXQoKSkKICAgICAgICAgZWxzZToKQEAgLTI2MCw3ICsyNjIsNyBAQAogICAgICAgICAgICAgc2VsZi5fcGF5bG9hZCA9IHNlbGYuX3BheWxvYWQuZW5jb2RlKGNoYXJzZXQub3V0cHV0X2NoYXJzZXQpCiAgICAgICAgIGlmIHN0cihjaGFyc2V0KSAhPSBjaGFyc2V0LmdldF9vdXRwdXRfY2hhcnNldCgpOgogICAgICAgICAgICAgc2VsZi5fcGF5bG9hZCA9IGNoYXJzZXQuYm9keV9lbmNvZGUoc2VsZi5fcGF5bG9hZCkKLSAgICAgICAgaWYgbm90IHNlbGYuaGFzX2tleSgnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZycpOgorICAgICAgICBpZiAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZycgbm90IGluIHNlbGY6CiAgICAgICAgICAgICBjdGUgPSBjaGFyc2V0LmdldF9ib2R5X2VuY29kaW5nKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjdGUoc2VsZikKQEAgLTI4Niw3ICsyODgsNyBAQAogICAgICAgICBSZXR1cm4gTm9uZSBpZiB0aGUgaGVhZGVyIGlzIG1pc3NpbmcgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KIAogICAgICAgICBOb3RlIHRoYXQgaWYgdGhlIGhlYWRlciBhcHBlYXJlZCBtdWx0aXBsZSB0aW1lcywgZXhhY3RseSB3aGljaAotICAgICAgICBvY2N1cnJhbmNlIGdldHMgcmV0dXJuZWQgaXMgdW5kZWZpbmVkLiAgVXNlIGdldF9hbGwoKSB0byBnZXQgYWxsCisgICAgICAgIG9jY3VycmVuY2UgZ2V0cyByZXR1cm5lZCBpcyB1bmRlZmluZWQuICBVc2UgZ2V0X2FsbCgpIHRvIGdldCBhbGwKICAgICAgICAgdGhlIHZhbHVlcyBtYXRjaGluZyBhIGhlYWRlciBmaWVsZCBuYW1lLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KG5hbWUpCkBAIC0zODksNyArMzkxLDEwIEBACiAgICAgICAgIG5hbWUgaXMgdGhlIGhlYWRlciBmaWVsZCB0byBhZGQuICBrZXl3b3JkIGFyZ3VtZW50cyBjYW4gYmUgdXNlZCB0byBzZXQKICAgICAgICAgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgaGVhZGVyIGZpZWxkLCB3aXRoIHVuZGVyc2NvcmVzIGNvbnZlcnRlZAogICAgICAgICB0byBkYXNoZXMuICBOb3JtYWxseSB0aGUgcGFyYW1ldGVyIHdpbGwgYmUgYWRkZWQgYXMga2V5PSJ2YWx1ZSIgdW5sZXNzCi0gICAgICAgIHZhbHVlIGlzIE5vbmUsIGluIHdoaWNoIGNhc2Ugb25seSB0aGUga2V5IHdpbGwgYmUgYWRkZWQuCisgICAgICAgIHZhbHVlIGlzIE5vbmUsIGluIHdoaWNoIGNhc2Ugb25seSB0aGUga2V5IHdpbGwgYmUgYWRkZWQuICBJZiBhCisgICAgICAgIHBhcmFtZXRlciB2YWx1ZSBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycyBpdCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhCisgICAgICAgIHRocmVlLXR1cGxlIG9mIChjaGFyc2V0LCBsYW5ndWFnZSwgdmFsdWUpLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUKKyAgICAgICAgZW5jb2RlZCBhY2NvcmRpbmcgdG8gUkZDMjIzMSBydWxlcy4KIAogICAgICAgICBFeGFtcGxlOgogCkBAIC01NTMsNyArNTU4LDcgQEAKICAgICAgICAgVkFMVUUgaXRlbSBpbiB0aGUgMy10dXBsZSkgaXMgYWx3YXlzIHVucXVvdGVkLCB1bmxlc3MgdW5xdW90ZSBpcyBzZXQKICAgICAgICAgdG8gRmFsc2UuCiAgICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5oYXNfa2V5KGhlYWRlcik6CisgICAgICAgIGlmIGhlYWRlciBub3QgaW4gc2VsZjoKICAgICAgICAgICAgIHJldHVybiBmYWlsb2JqCiAgICAgICAgIGZvciBrLCB2IGluIHNlbGYuX2dldF9wYXJhbXNfcHJlc2VydmUoZmFpbG9iaiwgaGVhZGVyKToKICAgICAgICAgICAgIGlmIGsubG93ZXIoKSA9PSBwYXJhbS5sb3dlcigpOgpAQCAtNTg0LDcgKzU4OSw3IEBACiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCB0dXBsZSkgYW5kIGNoYXJzZXQ6CiAgICAgICAgICAgICB2YWx1ZSA9IChjaGFyc2V0LCBsYW5ndWFnZSwgdmFsdWUpCiAKLSAgICAgICAgaWYgbm90IHNlbGYuaGFzX2tleShoZWFkZXIpIGFuZCBoZWFkZXIubG93ZXIoKSA9PSAnY29udGVudC10eXBlJzoKKyAgICAgICAgaWYgaGVhZGVyIG5vdCBpbiBzZWxmIGFuZCBoZWFkZXIubG93ZXIoKSA9PSAnY29udGVudC10eXBlJzoKICAgICAgICAgICAgIGN0eXBlID0gJ3RleHQvcGxhaW4nCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjdHlwZSA9IHNlbGYuZ2V0KGhlYWRlcikKQEAgLTYxOSw3ICs2MjQsNyBAQAogICAgICAgICBGYWxzZS4gIE9wdGlvbmFsIGhlYWRlciBzcGVjaWZpZXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIENvbnRlbnQtVHlwZQogICAgICAgICBoZWFkZXIuCiAgICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5oYXNfa2V5KGhlYWRlcik6CisgICAgICAgIGlmIGhlYWRlciBub3QgaW4gc2VsZjoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBuZXdfY3R5cGUgPSAnJwogICAgICAgICBmb3IgcCwgdiBpbiBzZWxmLmdldF9wYXJhbXMoaGVhZGVyPWhlYWRlciwgdW5xdW90ZT1yZXF1b3RlKToKQEAgLTY1NSw3ICs2NjAsNyBAQAogICAgICAgICBpZiBoZWFkZXIubG93ZXIoKSA9PSAnY29udGVudC10eXBlJzoKICAgICAgICAgICAgIGRlbCBzZWxmWydtaW1lLXZlcnNpb24nXQogICAgICAgICAgICAgc2VsZlsnTUlNRS1WZXJzaW9uJ10gPSAnMS4wJwotICAgICAgICBpZiBub3Qgc2VsZi5oYXNfa2V5KGhlYWRlcik6CisgICAgICAgIGlmIGhlYWRlciBub3QgaW4gc2VsZjoKICAgICAgICAgICAgIHNlbGZbaGVhZGVyXSA9IHR5cGUKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBwYXJhbXMgPSBzZWxmLmdldF9wYXJhbXMoaGVhZGVyPWhlYWRlciwgdW5xdW90ZT1yZXF1b3RlKQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL21pbWUvbm9ubXVsdGlwYXJ0LnB5IGIvTGliL2VtYWlsL21pbWUvbm9ubXVsdGlwYXJ0LnB5CmluZGV4IGRkMjgwYjUuLmZjM2I5ZWIgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9taW1lL25vbm11bHRpcGFydC5weQorKysgYi9MaWIvZW1haWwvbWltZS9ub25tdWx0aXBhcnQucHkKQEAgLTE0LDEzICsxNCw5IEBACiBjbGFzcyBNSU1FTm9uTXVsdGlwYXJ0KE1JTUVCYXNlKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciBNSU1FIG11bHRpcGFydC8qIHR5cGUgbWVzc2FnZXMuIiIiCiAKLSAgICBfX3B5Y2hlY2tlcl9fID0gJ3VudXNlZG5hbWVzPXBheWxvYWQnCi0KICAgICBkZWYgYXR0YWNoKHNlbGYsIHBheWxvYWQpOgogICAgICAgICAjIFRoZSBwdWJsaWMgQVBJIHByb2hpYml0cyBhdHRhY2hpbmcgbXVsdGlwbGUgc3VicGFydHMgdG8gTUlNRUJhc2UKICAgICAgICAgIyBkZXJpdmVkIHN1YnR5cGVzIHNpbmNlIG5vbmUgb2YgdGhlbSBhcmUsIGJ5IGRlZmluaXRpb24sIG9mIGNvbnRlbnQKICAgICAgICAgIyB0eXBlIG11bHRpcGFydC8qCiAgICAgICAgIHJhaXNlIGVycm9ycy5NdWx0aXBhcnRDb252ZXJzaW9uRXJyb3IoCiAgICAgICAgICAgICAnQ2Fubm90IGF0dGFjaCBhZGRpdGlvbmFsIHN1YnBhcnRzIHRvIG5vbi1tdWx0aXBhcnQvKicpCi0KLSAgICBkZWwgX19weWNoZWNrZXJfXwpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3F1b3ByaW1pbWUucHkgYi9MaWIvZW1haWwvcXVvcHJpbWltZS5weQppbmRleCBiOWRiZmE5Li4wYzE4YTllIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvcXVvcHJpbWltZS5weQorKysgYi9MaWIvZW1haWwvcXVvcHJpbWltZS5weQpAQCAtMzMzLDQgKzMzMyw0IEBACiAgICAgdGhlIGhpZ2ggbGV2ZWwgZW1haWwuaGVhZGVyIGNsYXNzIGZvciB0aGF0IGZ1bmN0aW9uYWxpdHkuCiAgICAgIiIiCiAgICAgcyA9IHMucmVwbGFjZSgnXycsICcgJykKLSAgICByZXR1cm4gcmUuc3ViKHInPVx3ezJ9JywgX3VucXVvdGVfbWF0Y2gsIHMpCisgICAgcmV0dXJuIHJlLnN1YihyJz1bYS1mQS1GMC05XXsyfScsIF91bnF1b3RlX21hdGNoLCBzKQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTAudHh0IGIvTGliL2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTAudHh0CmluZGV4IGJkMzBkMTMuLjA3OTAzOTYgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC90ZXN0L2RhdGEvbXNnXzEwLnR4dAorKysgYi9MaWIvZW1haWwvdGVzdC9kYXRhL21zZ18xMC50eHQKQEAgLTI2LDYgKzI2LDEzIEBACiAKIC0tQk9VTkRBUlkKIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTg4NTktMSIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IEJhc2U2NAorCitWR2hwY3lCcGN5QmhJRUpoYzJVMk5DQmxibU52WkdWa0lHMWxjM05oWjJVdUNnPT0KKworCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Imlzby04ODU5LTEiCiAKIFRoaXMgaGFzIG5vIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGhlYWRlci4KIApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjYudHh0IGIvTGliL2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjYudHh0CmluZGV4IDZjNzFiY2UuLjI5MjE5N2IgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC90ZXN0L2RhdGEvbXNnXzI2LnR4dAorKysgYi9MaWIvZW1haWwvdGVzdC9kYXRhL21zZ18yNi50eHQKQEAgLTEsNDUgKzEsNDUgQEAKLVJlY2VpdmVkOiBmcm9tIHhjYXIgWzE5Mi4xNjguMC4yXSBieSBqZWV2ZXMud29vc3Rlci5sb2NhbA0KLSAgKFNNVFBEMzItNy4wNyBFVkFMKSBpZCBBRkY5MkYwMjE0OyBTdW4sIDEyIE1heSAyMDAyIDA4OjU1OjM3ICswMTAwDQotRGF0ZTogU3VuLCAxMiBNYXkgMjAwMiAwODo1NjoxNSArMDEwMA0KLUZyb206IEZhdGhlciBUaW1lIDxmYXRoZXIudGltZUB4Y2FyLndvb3N0ZXIubG9jYWw+DQotVG86IHRpbWJvQGplZXZlcy53b29zdGVyLmxvY2FsDQotU3ViamVjdDogSU1BUCBmaWxlIHRlc3QNCi1NZXNzYWdlLUlEOiA8NmRmNjVkMzU0Yi5mYXRoZXIudGltZUBycGMud29vc3Rlci5sb2NhbD4NCi1YLU9yZ2FuaXphdGlvbjogSG9tZQ0KLVVzZXItQWdlbnQ6IE1lc3Nlbmdlci1Qcm8vMi41MGEgKE1zZ1NlcnZlLzEuNTApIChSSVNDLU9TLzQuMDIpIFBPUHN0YXIvMi4wMw0KLU1JTUUtVmVyc2lvbjogMS4wDQotQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSIxNjE4NDkyODYwLS0yMDUxMzAxMTkwLS0xMTM4NTM2ODAiDQotU3RhdHVzOiBSDQotWC1VSURMOiAzMTk5OTgzMDINCi0NCi1UaGlzIG1lc3NhZ2UgaXMgaW4gTUlNRSBmb3JtYXQgd2hpY2ggeW91ciBtYWlsZXIgYXBwYXJlbnRseSBkb2VzIG5vdCBzdXBwb3J0Lg0KLVlvdSBlaXRoZXIgcmVxdWlyZSBhIG5ld2VyIHZlcnNpb24gb2YgeW91ciBzb2Z0d2FyZSB3aGljaCBzdXBwb3J0cyBNSU1FLCBvcg0KLWEgc2VwYXJhdGUgTUlNRSBkZWNvZGluZyB1dGlsaXR5LiAgQWx0ZXJuYXRpdmVseSwgYXNrIHRoZSBzZW5kZXIgb2YgdGhpcw0KLW1lc3NhZ2UgdG8gcmVzZW5kIGl0IGluIGEgZGlmZmVyZW50IGZvcm1hdC4NCi0NCi0tLTE2MTg0OTI4NjAtLTIwNTEzMDExOTAtLTExMzg1MzY4MA0KLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQ0KLQ0KLVNpbXBsZSBlbWFpbCB3aXRoIGF0dGFjaG1lbnQuDQotDQotDQotLS0xNjE4NDkyODYwLS0yMDUxMzAxMTkwLS0xMTM4NTM2ODANCi1Db250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3Jpc2NvczsgbmFtZT0iY2xvY2suYm1wLDY5YyI7IHR5cGU9Qk1QOyBsb2FkPSZmZmY2OWM0YjsgZXhlYz0mMzU1ZGQ0ZDE7IGFjY2Vzcz0mMDMNCi1Db250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iY2xvY2suYm1wIg0KLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NA0KLQ0KLVFrMTJBZ0FBQUFBQUFIWUFBQUFvQUFBQUlBQUFBQ0FBQUFBQkFBUUFBQUFBQUFBQUFBRFhEUUFBMXcwQUFBQUFBQUFBDQotQUFBQUFBQUFBQUFBaUFBQWlBQUFBSWlJQUlnQUFBQ0lBSWdBaUlnQUFMdTd1d0NJaUlnQUVSSGRBQ0x1SWdBei8vOEENCi16QUFBQU4wUjNRRHU3aUlBLy8vL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBaTNBQUFBQUFBQUFEZUFBQUFBQUFBQQ0KLUMzQURNek16TUFOd0FBQUFBQUFBQUFBSE1BQUFBQU53QUFBQUFBQUFBQUNBTUFkM3pQZndBd2dBQUFBQUFBQUlBd2QvDQotZjh4L2YzQXdnQUFBQUFBQWdEQjB4L2YzLy96UEF3Z0FBQUFBQUFjSGZNOS8vLy84ei9Bd0FBQUFBQWl3ZC9mMy8vLy8NCi0vLy8vQTRBQUFBQUFjRXgvZi8vLy8vLy96QU1BQUFBQWl3Zk05Ly8vLzMvLy84endPQUFBQUFjSGYzLy8vL0IvLy8vLw0KLThEQUFBQUFMQi9mMy8vL3dkM2QzLy9Bd0FBQUFCd1RQZi8vd0NRQUFEL3pBTUFBQUFBc0V4L2YvLy9CLy8vLzh3REFBDQotQUFBSEIzOS8vLy93Zi8vLy8vQXdBQUFBQ3dmMzkvLy84SC8vLy8vd01BQUFBSWNIZk05Ly8vQi8vLy9NOERnQUFBQUENCi1zSFRILy8vd2YvLy94QU1BQUFBQUNIQjNmMy8vOEgvLy8vY0RnQUFBQUFBTEIzekgvL0QvL005d01BQUFBQUFBZ0xCMA0KLXozOS8vL3hIQXdnQUFBQUFBQWdMQjNkM1JIZDNjRENBQUFBQUFBQUFnTEFIZDBSM2NBTUlBQUFBQUFBQWdBZ0xjQUFBDQotQUFNd2dBZ0FBQUFBQ0RBQUFBdTd0N2N3QUFnRGdBQUFBQUJ6Y0lBQUFBQUFBQWdETXdBQUFBQUFON3V3Z0FBQUFBZ0gNCi1Nek1BQUFBQUNIOTd0ekFBQUFBTHUzYzNnQUFBQUFBTCs3dHpEQUJBdTdmN2NBQUFBQUFBQ0ErM01BN0VRQXYvc0lBQQ0KLUFBQUFBQUFJQUFBQUFBQUFBSUFBQUFBQQ0KLQ0KLS0tMTYxODQ5Mjg2MC0tMjA1MTMwMTE5MC0tMTEzODUzNjgwLS0NCitSZWNlaXZlZDogZnJvbSB4Y2FyIFsxOTIuMTY4LjAuMl0gYnkgamVldmVzLndvb3N0ZXIubG9jYWwKKyAgKFNNVFBEMzItNy4wNyBFVkFMKSBpZCBBRkY5MkYwMjE0OyBTdW4sIDEyIE1heSAyMDAyIDA4OjU1OjM3ICswMTAwCitEYXRlOiBTdW4sIDEyIE1heSAyMDAyIDA4OjU2OjE1ICswMTAwCitGcm9tOiBGYXRoZXIgVGltZSA8ZmF0aGVyLnRpbWVAeGNhci53b29zdGVyLmxvY2FsPgorVG86IHRpbWJvQGplZXZlcy53b29zdGVyLmxvY2FsCitTdWJqZWN0OiBJTUFQIGZpbGUgdGVzdAorTWVzc2FnZS1JRDogPDZkZjY1ZDM1NGIuZmF0aGVyLnRpbWVAcnBjLndvb3N0ZXIubG9jYWw+CitYLU9yZ2FuaXphdGlvbjogSG9tZQorVXNlci1BZ2VudDogTWVzc2VuZ2VyLVByby8yLjUwYSAoTXNnU2VydmUvMS41MCkgKFJJU0MtT1MvNC4wMikgUE9Qc3Rhci8yLjAzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSIxNjE4NDkyODYwLS0yMDUxMzAxMTkwLS0xMTM4NTM2ODAiCitTdGF0dXM6IFIKK1gtVUlETDogMzE5OTk4MzAyCisKK1RoaXMgbWVzc2FnZSBpcyBpbiBNSU1FIGZvcm1hdCB3aGljaCB5b3VyIG1haWxlciBhcHBhcmVudGx5IGRvZXMgbm90IHN1cHBvcnQuCitZb3UgZWl0aGVyIHJlcXVpcmUgYSBuZXdlciB2ZXJzaW9uIG9mIHlvdXIgc29mdHdhcmUgd2hpY2ggc3VwcG9ydHMgTUlNRSwgb3IKK2Egc2VwYXJhdGUgTUlNRSBkZWNvZGluZyB1dGlsaXR5LiAgQWx0ZXJuYXRpdmVseSwgYXNrIHRoZSBzZW5kZXIgb2YgdGhpcworbWVzc2FnZSB0byByZXNlbmQgaXQgaW4gYSBkaWZmZXJlbnQgZm9ybWF0LgorCistLTE2MTg0OTI4NjAtLTIwNTEzMDExOTAtLTExMzg1MzY4MAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCisKK1NpbXBsZSBlbWFpbCB3aXRoIGF0dGFjaG1lbnQuCisKKworLS0xNjE4NDkyODYwLS0yMDUxMzAxMTkwLS0xMTM4NTM2ODAKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vcmlzY29zOyBuYW1lPSJjbG9jay5ibXAsNjljIjsgdHlwZT1CTVA7IGxvYWQ9JmZmZjY5YzRiOyBleGVjPSYzNTVkZDRkMTsgYWNjZXNzPSYwMworQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImNsb2NrLmJtcCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCitRazEyQWdBQUFBQUFBSFlBQUFBb0FBQUFJQUFBQUNBQUFBQUJBQVFBQUFBQUFBQUFBQURYRFFBQTF3MEFBQUFBQUFBQQorQUFBQUFBQUFBQUFBaUFBQWlBQUFBSWlJQUlnQUFBQ0lBSWdBaUlnQUFMdTd1d0NJaUlnQUVSSGRBQ0x1SWdBei8vOEEKK3pBQUFBTjBSM1FEdTdpSUEvLy8vQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFpM0FBQUFBQUFBQURlQUFBQUFBQUFBCitDM0FETXpNek1BTndBQUFBQUFBQUFBQUhNQUFBQUFOd0FBQUFBQUFBQUFDQU1BZDN6UGZ3QXdnQUFBQUFBQUFJQXdkLworZjh4L2YzQXdnQUFBQUFBQWdEQjB4L2YzLy96UEF3Z0FBQUFBQUFjSGZNOS8vLy84ei9Bd0FBQUFBQWl3ZC9mMy8vLy8KKy8vLy9BNEFBQUFBQWNFeC9mLy8vLy8vL3pBTUFBQUFBaXdmTTkvLy8vMy8vLzh6d09BQUFBQWNIZjMvLy8vQi8vLy8vCis4REFBQUFBTEIvZjMvLy93ZDNkMy8vQXdBQUFBQndUUGYvL3dDUUFBRC96QU1BQUFBQXNFeC9mLy8vQi8vLy84d0RBQQorQUFBSEIzOS8vLy93Zi8vLy8vQXdBQUFBQ3dmMzkvLy84SC8vLy8vd01BQUFBSWNIZk05Ly8vQi8vLy9NOERnQUFBQUEKK3NIVEgvLy93Zi8vL3hBTUFBQUFBQ0hCM2YzLy84SC8vLy9jRGdBQUFBQUFMQjN6SC8vRC8vTTl3TUFBQUFBQUFnTEIwCit6MzkvLy94SEF3Z0FBQUFBQUFnTEIzZDNSSGQzY0RDQUFBQUFBQUFBZ0xBSGQwUjNjQU1JQUFBQUFBQUFnQWdMY0FBQQorQUFNd2dBZ0FBQUFBQ0RBQUFBdTd0N2N3QUFnRGdBQUFBQUJ6Y0lBQUFBQUFBQWdETXdBQUFBQUFON3V3Z0FBQUFBZ0gKK016TUFBQUFBQ0g5N3R6QUFBQUFMdTNjM2dBQUFBQUFMKzd0ekRBQkF1N2Y3Y0FBQUFBQUFDQSszTUE3RVFBdi9zSUFBCitBQUFBQUFBSUFBQUFBQUFBQUlBQUFBQUEKKworLS0xNjE4NDkyODYwLS0yMDUxMzAxMTkwLS0xMTM4NTM2ODAtLQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbC5weSBiL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWwucHkKaW5kZXggYmY1MjcyZS4uNWM5YTcyNSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbC5weQorKysgYi9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsLnB5CkBAIC00MCwxNyArNDAsMTcgQEAKIFNQQUNFID0gJyAnCiAKIAotDAorCiBkZWYgb3BlbmZpbGUoZmlsZW5hbWUsIG1vZGU9J3InKToKICAgICBwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShsYW5kbWFyayksICdkYXRhJywgZmlsZW5hbWUpCiAgICAgcmV0dXJuIG9wZW4ocGF0aCwgbW9kZSkKIAogCi0MCisKICMgQmFzZSB0ZXN0IGNsYXNzCiBjbGFzcyBUZXN0RW1haWxCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgbmRpZmZBc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kKToKLSAgICAgICAgIiIiTGlrZSBmYWlsVW5sZXNzRXF1YWwgZXhjZXB0IHVzZSBuZGlmZiBmb3IgcmVhZGFibGUgb3V0cHV0LiIiIgorICAgICAgICAiIiJMaWtlIGFzc2VydEVxdWFsIGV4Y2VwdCB1c2UgbmRpZmYgZm9yIHJlYWRhYmxlIG91dHB1dC4iIiIKICAgICAgICAgaWYgZmlyc3QgIT0gc2Vjb25kOgogICAgICAgICAgICAgc2ZpcnN0ID0gc3RyKGZpcnN0KQogICAgICAgICAgICAgc3NlY29uZCA9IHN0cihzZWNvbmQpCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIHJldHVybiBtc2cKIAogCi0MCisKICMgVGVzdCB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlIE1lc3NhZ2UgY2xhc3MncyBBUEkKIGNsYXNzIFRlc3RNZXNzYWdlQVBJKFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiB0ZXN0X2dldF9hbGwoc2VsZik6CkBAIC0xNzksNiArMTc5LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVycm9ycy5IZWFkZXJQYXJzZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuc2V0X2JvdW5kYXJ5LCAnQk9VTkRBUlknKQogCisgICAgZGVmIHRlc3RfbWFrZV9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgbXNnID0gTUlNRU11bHRpcGFydCgnZm9ybS1kYXRhJykKKyAgICAgICAgIyBOb3RlIHRoYXQgd2hlbiB0aGUgYm91bmRhcnkgZ2V0cyBjcmVhdGVkIGlzIGFuIGltcGxlbWVudGF0aW9uCisgICAgICAgICMgZGV0YWlsIGFuZCBtaWdodCBjaGFuZ2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLml0ZW1zKClbMF1bMV0sICdtdWx0aXBhcnQvZm9ybS1kYXRhJykKKyAgICAgICAgIyBUcmlnZ2VyIGNyZWF0aW9uIG9mIGJvdW5kYXJ5CisgICAgICAgIG1zZy5hc19zdHJpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5pdGVtcygpWzBdWzFdWzozM10sCisgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Ij09JykKKyAgICAgICAgIyBYWFg6IHRoZXJlIG91Z2h0IHRvIGJlIHRlc3RzIG9mIHRoZSB1bmlxdWVuZXNzIG9mIHRoZSBib3VuZGFyeSwgdG9vLgorCiAgICAgZGVmIHRlc3RfbWVzc2FnZV9yZmM4MjJfb25seShzZWxmKToKICAgICAgICAgIyBJc3N1ZSA3OTcwOiBtZXNzYWdlL3JmYzgyMiBub3QgaW4gbXVsdGlwYXJ0IHBhcnNlZCBieQogICAgICAgICAjIEhlYWRlclBhcnNlciBjYXVzZWQgYW4gZXhjZXB0aW9uIHdoZW4gZmxhdHRlbmVkLgpAQCAtMjA1LDggKzIxNiwxMiBAQAogICAgICAgICAjIFN1YnBhcnQgMyBpcyBiYXNlNjQKICAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKDIpLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwKICAgICAgICAgICAgJ1RoaXMgaXMgYSBCYXNlNjQgZW5jb2RlZCBtZXNzYWdlLicpCi0gICAgICAgICMgU3VicGFydCA0IGhhcyBubyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBoZWFkZXIuCisgICAgICAgICMgU3VicGFydCA0IGlzIGJhc2U2NCB3aXRoIGEgdHJhaWxpbmcgbmV3bGluZSwgd2hpY2gKKyAgICAgICAgIyB1c2VkIHRvIGJlIHN0cmlwcGVkIChpc3N1ZSA3MTQzKS4KICAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKDMpLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwKKyAgICAgICAgICAgJ1RoaXMgaXMgYSBCYXNlNjQgZW5jb2RlZCBtZXNzYWdlLlxuJykKKyAgICAgICAgIyBTdWJwYXJ0IDUgaGFzIG5vIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGhlYWRlci4KKyAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKDQpLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwKICAgICAgICAgICAgJ1RoaXMgaGFzIG5vIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGhlYWRlci5cbicpCiAKICAgICBkZWYgdGVzdF9nZXRfZGVjb2RlZF91dV9wYXlsb2FkKHNlbGYpOgpAQCAtMjUxLDI1ICsyNjYsMzQgQEAKICAgICAgICAgbXNnWydGcm9tJ10gPSAnTWUnCiAgICAgICAgIG1zZ1sndG8nXSA9ICdZb3UnCiAgICAgICAgICMgQ2hlY2sgZm9yIGNhc2UgaW5zZW5zaXRpdml0eQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoJ2Zyb20nIGluIG1zZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCdGcm9tJyBpbiBtc2cpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygnRlJPTScgaW4gbXNnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoJ3RvJyBpbiBtc2cpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygnVG8nIGluIG1zZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCdUTycgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Zyb20nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGcm9tJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRlJPTScgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3RvJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnVG8nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdUTycgaW4gbXNnKQogCiAgICAgZGVmIHRlc3RfYXNfc3RyaW5nKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKICAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkKKyAgICAgICAgICAgICMgQkFXIDMwLU1hci0yMDA5IEV2aWwgYmUgaGVyZS4gIFNvLCB0aGUgZ2VuZXJhdG9yIGlzIGJyb2tlbiB3aXRoCisgICAgICAgICAgICAjIHJlc3BlY3QgdG8gbG9uZyBsaW5lIGJyZWFraW5nLiAgSXQncyBhbHNvIG5vdCBpZGVtcG90ZW50IHdoZW4gYQorICAgICAgICAgICAgIyBoZWFkZXIgZnJvbSBhIHBhcnNlZCBtZXNzYWdlIGlzIGNvbnRpbnVlZCB3aXRoIHRhYnMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICMgc3BhY2VzLiAgQmVmb3JlIHdlIGZpeGVkIGJ1ZyAxOTc0IGl0IHdhcyByZXZlcnNlZGx5IGJyb2tlbiwKKyAgICAgICAgICAgICMgaS5lLiBoZWFkZXJzIHRoYXQgd2VyZSBjb250aW51ZWQgd2l0aCBzcGFjZXMgZ290IGNvbnRpbnVlZCB3aXRoCisgICAgICAgICAgICAjIHRhYnMuICBGb3IgUHl0aG9uIDIueCB0aGVyZSdzIHJlYWxseSBubyBnb29kIGZpeCBhbmQgaW4gUHl0aG9uCisgICAgICAgICAgICAjIDMueCBhbGwgdGhpcyBzdHVmZiBpcyByZS13cml0dGVuIHRvIGJlIHJpZ2h0KGVyKS4gIENocmlzIFdpdGhlcnMKKyAgICAgICAgICAgICMgY29udmluY2VkIG1lIHRoYXQgdXNpbmcgc3BhY2UgYXMgdGhlIGRlZmF1bHQgY29udGludWF0aW9uCisgICAgICAgICAgICAjIGNoYXJhY3RlciBpcyBsZXNzIGJhZCBmb3IgbW9yZSBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpLnJlcGxhY2UoJ1x0JywgJyAnKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICBlcSh0ZXh0LCBtc2cuYXNfc3RyaW5nKCkpCiAgICAgICAgIGZ1bGxyZXByID0gc3RyKG1zZykKICAgICAgICAgbGluZXMgPSBmdWxscmVwci5zcGxpdCgnXG4nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobGluZXNbMF0uc3RhcnRzd2l0aCgnRnJvbSAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzBdLnN0YXJ0c3dpdGgoJ0Zyb20gJykpCiAgICAgICAgIGVxKHRleHQsIE5MLmpvaW4obGluZXNbMTpdKSkKIAogICAgIGRlZiB0ZXN0X2JhZF9wYXJhbShzZWxmKToKQEAgLTM0OCwxMCArMzcyLDEwIEBACiAKICAgICBkZWYgdGVzdF9oYXNfa2V5KHNlbGYpOgogICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCdIZWFkZXI6IGV4aXN0cycpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtc2cuaGFzX2tleSgnaGVhZGVyJykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtc2cuaGFzX2tleSgnSGVhZGVyJykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtc2cuaGFzX2tleSgnSEVBREVSJykpCi0gICAgICAgIHNlbGYuZmFpbElmKG1zZy5oYXNfa2V5KCdoZWFkZXJpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaGFzX2tleSgnaGVhZGVyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaGFzX2tleSgnSGVhZGVyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaGFzX2tleSgnSEVBREVSJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobXNnLmhhc19rZXkoJ2hlYWRlcmknKSkKIAogICAgIGRlZiB0ZXN0X3NldF9wYXJhbShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC01MjksOCArNTUzLDE5IEBACiAgICAgICAgIG1zZy5zZXRfY2hhcnNldCh1J3VzLWFzY2lpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndXMtYXNjaWknLCBtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpKQogCisgICAgIyBJc3N1ZSA1ODcxOiByZWplY3QgYW4gYXR0ZW1wdCB0byBlbWJlZCBhIGhlYWRlciBpbnNpZGUgYSBoZWFkZXIgdmFsdWUKKyAgICAjIChoZWFkZXIgaW5qZWN0aW9uIGF0dGFjaykuCisgICAgZGVmIHRlc3RfZW1iZWRlZF9oZWFkZXJfdmlhX0hlYWRlcl9yZWplY3RlZChzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snRHVtbXknXSA9IEhlYWRlcignZHVtbXlcblgtSW5qZWN0ZWQtSGVhZGVyOiB0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyb3JzLkhlYWRlclBhcnNlRXJyb3IsIG1zZy5hc19zdHJpbmcpCiAKLQwKKyAgICBkZWYgdGVzdF9lbWJlZGVkX2hlYWRlcl92aWFfc3RyaW5nX3JlamVjdGVkKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydEdW1teSddID0gJ2R1bW15XG5YLUluamVjdGVkLUhlYWRlcjogdGVzdCcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyb3JzLkhlYWRlclBhcnNlRXJyb3IsIG1zZy5hc19zdHJpbmcpCisKKwogIyBUZXN0IHRoZSBlbWFpbC5FbmNvZGVycyBtb2R1bGUKIGNsYXNzIFRlc3RFbmNvZGVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZW5jb2RlX2VtcHR5X3BheWxvYWQoc2VsZik6CkBAIC01NTEsOCArNTg2LDE1IEBACiAgICAgICAgIG1zZyA9IE1JTUVUZXh0KCdoZWxsbyBceGY4IHdvcmxkJywgX2NoYXJzZXQ9J2lzby04ODU5LTEnKQogICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJ3F1b3RlZC1wcmludGFibGUnKQogCisgICAgZGVmIHRlc3RfZW5jb2RlN29yOGJpdChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYSBjaGFyc2V0IHdob3NlIGlucHV0IGNoYXJhY3RlciBzZXQgaXMgOGJpdCBidXQKKyAgICAgICAgIyB3aG9zZSBvdXRwdXQgY2hhcmFjdGVyIHNldCBpcyA3Yml0IGdldHMgYSB0cmFuc2Zlci1lbmNvZGluZworICAgICAgICAjIG9mIDdiaXQuCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBlbWFpbC5NSU1FVGV4dC5NSU1FVGV4dCgnXHhjYVx4YjgnLCBfY2hhcnNldD0nZXVjLWpwJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10sICc3Yml0JykKIAotDAorCiAjIFRlc3QgbG9uZyBoZWFkZXIgd3JhcHBpbmcKIGNsYXNzIFRlc3RMb25nSGVhZGVycyhUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9zcGxpdF9sb25nX2NvbnRpbnVhdGlvbihzZWxmKToKQEAgLTU2OSw4ICs2MTEsOCBAQAogICAgICAgICBnLmZsYXR0ZW4obXNnKQogICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgIiIiXAogU3ViamVjdDogYnVnIGRlbW9uc3RyYXRpb24KLVx0MTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzNDU2Nzg5NzEyMzQ1Njc4OTgxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkKLVx0bW9yZSB0ZXh0CisgMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzNDU2Nzg5NzEyMzQ1Njc4OTgxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkKKyBtb3JlIHRleHQKIAogdGVzdAogIiIiKQpAQCAtNjcwLDcgKzcxMiw3IEBACiBNSU1FLVZlcnNpb246IDEuMAogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAogWC1Gb29iYXItU3BvaW5rLURlZnJvYm5pdDogd2Fzbmlwb29wOyBnaXJhZmZlcz0idmVyeS1sb25nLW5lY2tlZC1hbmltYWxzIjsKLVx0c3Bvb2dlPSJ5dW1teSI7IGhpcHBvcz0iZ2FyZ2FudHVhbiI7IG1hcnNobWFsbG93cz0iZ29vZXkiCisgc3Bvb2dlPSJ5dW1teSI7IGhpcHBvcz0iZ2FyZ2FudHVhbiI7IG1hcnNobWFsbG93cz0iZ29vZXkiCiAKICcnJykKIApAQCAtNjg2LDcgKzcyOCw3IEBACiAgICAgICAgIGVxKHNmcC5nZXR2YWx1ZSgpLCAiIiJcCiBGcm9tOiB0ZXN0QGRvbS5haW4KIFJlZmVyZW5jZXM6IDwwQGRvbS5haW4+IDwxQGRvbS5haW4+IDwyQGRvbS5haW4+IDwzQGRvbS5haW4+IDw0QGRvbS5haW4+Ci1cdDw1QGRvbS5haW4+IDw2QGRvbS5haW4+IDw3QGRvbS5haW4+IDw4QGRvbS5haW4+IDw5QGRvbS5haW4+CisgPDVAZG9tLmFpbj4gPDZAZG9tLmFpbj4gPDdAZG9tLmFpbj4gPDhAZG9tLmFpbj4gPDlAZG9tLmFpbj4KIAogVGVzdCIiIikKIApAQCAtNzY0LDkgKzgwNiw5IEBACiAgICAgICAgIG1zZ1snVG8nXSA9IHRvCiAgICAgICAgIGVxKG1zZy5hc19zdHJpbmcoMCksICcnJ1wKIFRvOiAiU29tZW9uZSBUZXN0ICNBIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4sIDxzb21lb25lQGVlY3MudW1pY2guZWR1PiwKLVx0IlNvbWVvbmUgVGVzdCAjQiIgPHNvbWVvbmVAdW1pY2guZWR1PiwKLVx0IlNvbWVvbmUgVGVzdCAjQyIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LAotXHQiU29tZW9uZSBUZXN0ICNEIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4KKyAiU29tZW9uZSBUZXN0ICNCIiA8c29tZW9uZUB1bWljaC5lZHU+LAorICJTb21lb25lIFRlc3QgI0MiIDxzb21lb25lQGVlY3MudW1pY2guZWR1PiwKKyAiU29tZW9uZSBUZXN0ICNEIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4KIAogJycnKQogCkBAIC04MDksMjIgKzg1MSwyMiBAQAogXHRocm90aGdhci5sYS5tYXN0YWxlci5jb20gKHRtZGEtb2ZtaXBkKSB3aXRoIEVTTVRQOwogXHRXZWQsIDA1IE1hciAyMDAzIDE4OjEwOjE4IC0wNzAwCiBSZWNlaXZlZC0yOiBmcm9tIEZPTy5UTEQgKHZpendvcmxkLmFjbC5mb28udGxkIFsxMjMuNDUyLjY3OC45XSkgYnkKLVx0aHJvdGhnYXIubGEubWFzdGFsZXIuY29tICh0bWRhLW9mbWlwZCkgd2l0aCBFU01UUDsKLVx0V2VkLCAwNSBNYXIgMjAwMyAxODoxMDoxOCAtMDcwMAorIGhyb3RoZ2FyLmxhLm1hc3RhbGVyLmNvbSAodG1kYS1vZm1pcGQpIHdpdGggRVNNVFA7CisgV2VkLCAwNSBNYXIgMjAwMyAxODoxMDoxOCAtMDcwMAogCiAiIiIpCiAKICAgICBkZWYgdGVzdF9zdHJpbmdfaGVhZGVyaW5zdF9lcShzZWxmKToKICAgICAgICAgaCA9ICc8MTU5NzUuMTc5MDEuMjA3MjQwLjQxNDYwNEBzZ2lncml0em1hbm4xLm1hdGhlbWF0aWsudHUtbXVlbmNoZW4uZGU+IChEYXZpZCBCcmVtbmVyXCdzIG1lc3NhZ2Ugb2YgIlRodSwgNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMCIpJwogICAgICAgICBtc2cgPSBNZXNzYWdlKCkKLSAgICAgICAgbXNnWydSZWNlaXZlZC0xJ10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J1JlY2VpdmVkLTEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51YXRpb25fd3M9J1x0JykKLSAgICAgICAgbXNnWydSZWNlaXZlZC0yJ10gPSBoCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCi1SZWNlaXZlZC0xOiA8MTU5NzUuMTc5MDEuMjA3MjQwLjQxNDYwNEBzZ2lncml0em1hbm4xLm1hdGhlbWF0aWsudHUtbXVlbmNoZW4uZGU+CisgICAgICAgIG1zZ1snUmVjZWl2ZWQnXSA9IEhlYWRlcihoLCBoZWFkZXJfbmFtZT0nUmVjZWl2ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWF0aW9uX3dzPSdcdCcpCisgICAgICAgIG1zZ1snUmVjZWl2ZWQnXSA9IGgKKyAgICAgICAgc2VsZi5uZGlmZkFzc2VydEVxdWFsKG1zZy5hc19zdHJpbmcoKSwgIiIiXAorUmVjZWl2ZWQ6IDwxNTk3NS4xNzkwMS4yMDcyNDAuNDE0NjA0QHNnaWdyaXR6bWFubjEubWF0aGVtYXRpay50dS1tdWVuY2hlbi5kZT4KIFx0KERhdmlkIEJyZW1uZXIncyBtZXNzYWdlIG9mICJUaHUsIDYgTWFyIDIwMDMgMTM6NTg6MjEgKzAxMDAiKQotUmVjZWl2ZWQtMjogPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPgotXHQoRGF2aWQgQnJlbW5lcidzIG1lc3NhZ2Ugb2YgIlRodSwgNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMCIpCitSZWNlaXZlZDogPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPgorIChEYXZpZCBCcmVtbmVyJ3MgbWVzc2FnZSBvZiAiVGh1LCA2IE1hciAyMDAzIDEzOjU4OjIxICswMTAwIikKIAogIiIiKQogCkBAIC04MzgsNyArODgwLDcgQEAKICAgICAgICAgbXNnWydGYWNlLTInXSA9IEhlYWRlcih0LCBoZWFkZXJfbmFtZT0nRmFjZS0yJykKICAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCiBGYWNlLTE6IGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3QkFNQUFBQ2xMT1MwQUFBQUdGQk1WRVVBQUFBa0hpSmVSVUljR0JpOQotXHRsb2NRRFE0ekp5a0ZCQVhKZldEakFBQUNZVWxFUVZSNG5GMlRRWS9qSUF5RmM2bHlkbEc1eDhOeXAxWTY5d2oxUE4ySTVnenAKKyBsb2NRRFE0ekp5a0ZCQVhKZldEakFBQUNZVWxFUVZSNG5GMlRRWS9qSUF5RmM2bHlkbEc1eDhOeXAxWTY5d2oxUE4ySTVnenAKIEZhY2UtMjogaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdCQU1BQUFDbExPUzBBQUFBR0ZCTVZFVUFBQUFrSGlKZVJVSWNHQmk5CiAgbG9jUURRNHpKeWtGQkFYSmZXRGpBQUFDWVVsRVFWUjRuRjJUUVkvaklBeUZjNmx5ZGxHNXg4TnlwMVk2OXdqMVBOMkk1Z3pwCiAKQEAgLTg0OCwxMSArODkwLDExIEBACiAgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCiAgICAgICAgIG0gPSAnJydcCiBSZWNlaXZlZDogZnJvbSBzaWltYWdlLmNvbSAoWzE3Mi4yNS4xLjNdKSBieSB6aW1hLnNpbGljb25pbWFnZS5jb20gd2l0aCBNaWNyb3NvZnQgU01UUFNWQyg1LjAuMjE5NS40OTA1KTsKLVx0V2VkLCAxNiBPY3QgMjAwMiAwNzo0MToxMSAtMDcwMCcnJworIFdlZCwgMTYgT2N0IDIwMDIgMDc6NDE6MTEgLTA3MDAnJycKICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQogICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksICcnJ1wKIFJlY2VpdmVkOiBmcm9tIHNpaW1hZ2UuY29tIChbMTcyLjI1LjEuM10pIGJ5IHppbWEuc2lsaWNvbmltYWdlLmNvbSB3aXRoCi1cdE1pY3Jvc29mdCBTTVRQU1ZDKDUuMC4yMTk1LjQ5MDUpOyBXZWQsIDE2IE9jdCAyMDAyIDA3OjQxOjExIC0wNzAwCisgTWljcm9zb2Z0IFNNVFBTVkMoNS4wLjIxOTUuNDkwNSk7IFdlZCwgMTYgT2N0IDIwMDIgMDc6NDE6MTEgLTA3MDAKIAogJycnKQogCkBAIC04NjYsMTQgKzkwOCwxNCBAQAogICAgICAgICBtc2dbJ0xpc3QnXSA9IEhlYWRlcihoLCBoZWFkZXJfbmFtZT0nTGlzdCcpCiAgICAgICAgIGVxKG1zZy5hc19zdHJpbmcoKSwgIiIiXAogTGlzdDogTGlzdC1VbnN1YnNjcmliZTogPGh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3NwYW1hc3Nhc3Npbi10YWxrPiwKLVx0PG1haWx0bzpzcGFtYXNzYXNzaW4tdGFsay1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD9zdWJqZWN0PXVuc3Vic2NyaWJlPgorIDxtYWlsdG86c3BhbWFzc2Fzc2luLXRhbGstcmVxdWVzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ/c3ViamVjdD11bnN1YnNjcmliZT4KIExpc3Q6IExpc3QtVW5zdWJzY3JpYmU6IDxodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcGFtYXNzYXNzaW4tdGFsaz4sCiAgPG1haWx0bzpzcGFtYXNzYXNzaW4tdGFsay1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD9zdWJqZWN0PXVuc3Vic2NyaWJlPgogCiAiIiIpCiAKIAotDAorCiAjIFRlc3QgbWFuZ2xpbmcgb2YgIkZyb20gIiBsaW5lcyBpbiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UKIGNsYXNzIFRlc3RGcm9tTWFuZ2xpbmcodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTkwNyw3ICs5NDksNyBAQAogIiIiKQogCiAKLQwKKwogIyBUZXN0IHRoZSBiYXNpYyBNSU1FQXVkaW8gY2xhc3MKIGNsYXNzIFRlc3RNSU1FQXVkaW8odW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTkzNyw3ICs5NzksNyBAQAogCiAgICAgZGVmIHRlc3RfYWRkX2hlYWRlcihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgc2VsZi5fYXUuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZT0nYXVkaW90ZXN0LmF1JykKICAgICAgICAgZXEoc2VsZi5fYXVbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSwKQEAgLTk1Niw3ICs5OTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0nZm9vYmFyJykgaXMgbWlzc2luZykKIAogCi0MCisKICMgVGVzdCB0aGUgYmFzaWMgTUlNRUltYWdlIGNsYXNzCiBjbGFzcyBUZXN0TUlNRUltYWdlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC05ODAsNyArMTAyMiw3IEBACiAKICAgICBkZWYgdGVzdF9hZGRfaGVhZGVyKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBzZWxmLl9pbS5hZGRfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPSdkaW5ndXNmaXNoLmdpZicpCiAgICAgICAgIGVxKHNlbGYuX2ltWydjb250ZW50LWRpc3Bvc2l0aW9uJ10sCkBAIC05OTksNyArMTA0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyPSdmb29iYXInKSBpcyBtaXNzaW5nKQogCiAKLQwKKwogIyBUZXN0IHRoZSBiYXNpYyBNSU1FVGV4dCBjbGFzcwogY2xhc3MgVGVzdE1JTUVUZXh0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xMDA3LDcgKzEwNDksNyBAQAogCiAgICAgZGVmIHRlc3RfdHlwZXMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIGVxKHNlbGYuX21zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKICAgICAgICAgZXEoc2VsZi5fbXNnLmdldF9wYXJhbSgnY2hhcnNldCcpLCAndXMtYXNjaWknKQogICAgICAgICBtaXNzaW5nID0gW10KQEAgLTEwMTcsNyArMTA1OSw3IEBACiAKICAgICBkZWYgdGVzdF9wYXlsb2FkKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX21zZy5nZXRfcGF5bG9hZCgpLCAnaGVsbG8gdGhlcmUnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHNlbGYuX21zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLl9tc2cuaXNfbXVsdGlwYXJ0KCkpCiAKICAgICBkZWYgdGVzdF9jaGFyc2V0KHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTEwNTEsNyArMTA5Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgTUlNRVRleHQsIHRlc3RzdHIpCiAKIAotDAorCiAjIFRlc3QgY29tcGxpY2F0ZWQgbXVsdGlwYXJ0LyogbWVzc2FnZXMKIGNsYXNzIFRlc3RNdWx0aXBhcnQoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTA5Nyw3ICsxMTM5LDcgQEAKICAgICBkZWYgdGVzdF9oaWVyYXJjaHkoc2VsZik6CiAgICAgICAgICMgY29udmVuaWVuY2UKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKICAgICAgICAgIyB0ZXN0cwogICAgICAgICBtID0gc2VsZi5fbXNnCkBAIC0xNDExLDcgKzE0NTMsNyBAQAogCiAtLSAgICBYWFhYLS0KICcnJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5pc19tdWx0aXBhcnQoKSkKICAgICAgICAgZXEobXNnLmdldF9ib3VuZGFyeSgpLCAnICAgIFhYWFgnKQogICAgICAgICBlcShsZW4obXNnLmdldF9wYXlsb2FkKCkpLCAyKQogCkBAIC0xNDI3LDEwICsxNDY5LDEwIEBACiAKIFlYTmtaZz09CiAtLT09PT09PT09PT09PT09PTAwMTIzOTQxNjQ9PS0tIiIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLmdldF9wYXlsb2FkKDApLmdldF9wYXlsb2FkKCksICdZWE5rWmc9PScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgwKS5nZXRfcGF5bG9hZCgpLCAnWVhOa1pnPT0nKQogCiAKLQwKKwogIyBUZXN0IHNvbWUgYmFkbHkgZm9ybWF0dGVkIG1lc3NhZ2VzCiBjbGFzcyBUZXN0Tm9uQ29uZm9ybWFudChUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9wYXJzZV9taXNzaW5nX21pbm9yX3R5cGUoc2VsZik6CkBAIC0xNDQxLDcgKzE0ODMsNyBAQAogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfc3VidHlwZSgpLCAncGxhaW4nKQogCiAgICAgZGVmIHRlc3Rfc2FtZV9ib3VuZGFyeV9pbm5lcl9vdXRlcihzZWxmKToKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18xNS50eHQnKQogICAgICAgICAjIFhYWCBXZSBjYW4gcHJvYmFibHkgZXZlbnR1YWxseSBkbyBiZXR0ZXIKICAgICAgICAgaW5uZXIgPSBtc2cuZ2V0X3BheWxvYWQoMCkKQEAgLTE0NTEsNyArMTQ5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9ycy5TdGFydEJvdW5kYXJ5Tm90Rm91bmREZWZlY3QpKQogCiAgICAgZGVmIHRlc3RfbXVsdGlwYXJ0X25vX2JvdW5kYXJ5KHNlbGYpOgotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzI1LnR4dCcpCiAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKG1zZy5nZXRfcGF5bG9hZCgpLCBzdHIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtc2cuZGVmZWN0cyksIDIpCkBAIC0xNTA5LDcgKzE1NTEsNyBAQAogIiIiKQogCiAgICAgZGVmIHRlc3RfbHlpbmdfbXVsdGlwYXJ0KHNlbGYpOgotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzQxLnR4dCcpCiAgICAgICAgIHVubGVzcyhoYXNhdHRyKG1zZywgJ2RlZmVjdHMnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmRlZmVjdHMpLCAyKQpAQCAtMTUyOSw3ICsxNTcxLDcgQEAKICAgICAgICAgIyBbKl0gVGhpcyBtZXNzYWdlIGlzIG1pc3NpbmcgaXRzIHN0YXJ0IGJvdW5kYXJ5CiAgICAgICAgIGJhZCA9IG91dGVyLmdldF9wYXlsb2FkKDEpLmdldF9wYXlsb2FkKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJhZC5kZWZlY3RzKSwgMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoYmFkLmRlZmVjdHNbMF0sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJhZC5kZWZlY3RzWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvcnMuU3RhcnRCb3VuZGFyeU5vdEZvdW5kRGVmZWN0KSkKIAogICAgIGRlZiB0ZXN0X2ZpcnN0X2xpbmVfaXNfY29udGludWF0aW9uX2hlYWRlcihzZWxmKToKQEAgLTE1MzksMTMgKzE1ODEsMTMgQEAKICAgICAgICAgZXEobXNnLmtleXMoKSwgW10pCiAgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAnTGluZSAyXG5MaW5lIDMnKQogICAgICAgICBlcShsZW4obXNnLmRlZmVjdHMpLCAxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShtc2cuZGVmZWN0c1swXSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobXNnLmRlZmVjdHNbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9ycy5GaXJzdEhlYWRlckxpbmVJc0NvbnRpbnVhdGlvbkRlZmVjdCkpCiAgICAgICAgIGVxKG1zZy5kZWZlY3RzWzBdLmxpbmUsICcgTGluZSAxXG4nKQogCiAKIAotDAorCiAjIFRlc3QgUkZDIDIwNDcgaGVhZGVyIGVuY29kaW5nIGFuZCBkZWNvZGluZwogY2xhc3MgVGVzdFJGQzIwNDcodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JmYzIwNDdfbXVsdGlsaW5lKHNlbGYpOgpAQCAtMTU5MSw4ICsxNjMzLDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JnJywgTm9uZSksICgnXHhlNScsICdpc28tODg1OS0xJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3Nib3JkJywgTm9uZSldKQogCisgICAgZGVmIHRlc3RfcmZjMjA0N19CX2JhZF9wYWRkaW5nKHNlbGYpOgorICAgICAgICBzID0gJz0/aXNvLTg4NTktMT9CPyVzPz0nCisgICAgICAgIGRhdGEgPSBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9ubHkgdGVzdCBjb21wbGV0ZSBieXRlcworICAgICAgICAgICAgKCdkbT09JywgJ3YnKSwgKCdkbT0nLCAndicpLCAoJ2RtJywgJ3YnKSwKKyAgICAgICAgICAgICgnZG1rPScsICd2aScpLCAoJ2RtaycsICd2aScpCisgICAgICAgICAgXQorICAgICAgICBmb3IgcSwgYSBpbiBkYXRhOgorICAgICAgICAgICAgZGggPSBkZWNvZGVfaGVhZGVyKHMgJSBxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaCwgWyhhLCAnaXNvLTg4NTktMScpXSkKIAotDAorICAgIGRlZiB0ZXN0X3JmYzIwNDdfUV9pbnZhbGlkX2RpZ2l0cyhzZWxmKToKKyAgICAgICAgIyBpc3N1ZSAxMDAwNC4KKyAgICAgICAgcyA9ICc9P2lzby04NjU5LTE/UT9hbmRyPWU5PXp6Pz0nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlX2hlYWRlcihzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoYidhbmRyXHhlOT16eicsICdpc28tODY1OS0xJyldKQorCisKICMgVGVzdCB0aGUgTUlNRU1lc3NhZ2UgY2xhc3MKIGNsYXNzIFRlc3RNSU1FTWVzc2FnZShUZXN0RW1haWxCYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xNjA3LDcgKzE2NjQsNyBAQAogCiAgICAgZGVmIHRlc3RfdmFsaWRfYXJndW1lbnQoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIHN1YmplY3QgPSAnQSBzdWItbWVzc2FnZScKICAgICAgICAgbSA9IE1lc3NhZ2UoKQogICAgICAgICBtWydTdWJqZWN0J10gPSBzdWJqZWN0CkBAIC0xNjUxLDIwICsxNzA4LDIwIEBACiAKICAgICBkZWYgdGVzdF9wYXJzZV9tZXNzYWdlX3JmYzgyMihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMTEudHh0JykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKICAgICAgICAgcGF5bG9hZCA9IG1zZy5nZXRfcGF5bG9hZCgpCiAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHBheWxvYWQsIGxpc3QpKQogICAgICAgICBlcShsZW4ocGF5bG9hZCksIDEpCiAgICAgICAgIHN1Ym1zZyA9IHBheWxvYWRbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VibXNnLCBNZXNzYWdlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VibXNnLCBNZXNzYWdlKSkKICAgICAgICAgZXEoc3VibXNnWydzdWJqZWN0J10sICdBbiBlbmNsb3NlZCBtZXNzYWdlJykKICAgICAgICAgZXEoc3VibXNnLmdldF9wYXlsb2FkKCksICdIZXJlIGlzIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlLlxuJykKIAogICAgIGRlZiB0ZXN0X2RzbihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgIyBtc2cgMTYgaXMgYSBEZWxpdmVyeSBTdGF0dXMgTm90aWZpY2F0aW9uLCBzZWUgUkZDIDE4OTQKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMTYudHh0JykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ211bHRpcGFydC9yZXBvcnQnKQpAQCAtMTkwNSw3ICsxOTYyLDcgQEAKICAgICAgICAgbXNnID0gTUlNRU11bHRpcGFydCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaXNfbXVsdGlwYXJ0KCkpCiAKLQwKKwogIyBBIGdlbmVyYWwgdGVzdCBvZiBwYXJzZXItPm1vZGVsLT5nZW5lcmF0b3IgaWRlbXBvdGVuY3kuICBJT1csIHJlYWQgYSBtZXNzYWdlCiAjIGluLCBwYXJzZSBpdCBpbnRvIGEgbWVzc2FnZSBvYmplY3QgdHJlZSwgdGhlbiB3aXRob3V0IHRvdWNoaW5nIHRoZSB0cmVlLAogIyByZWdlbmVyYXRlIHRoZSBwbGFpbiB0ZXh0LiAgVGhlIG9yaWdpbmFsIHRleHQgYW5kIHRoZSB0cmFuc2Zvcm1lZCB0ZXh0CkBAIC0xOTI5LDcgKzE5ODYsNyBAQAogICAgICAgICBlcSh0ZXh0LCBzLmdldHZhbHVlKCkpCiAKICAgICBkZWYgdGVzdF9wYXJzZV90ZXh0X21lc3NhZ2Uoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCiAgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X21haW50eXBlKCksICd0ZXh0JykKQEAgLTE5NDEsNyArMTk5OCw3IEBACiAgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQogCiAgICAgZGVmIHRlc3RfcGFyc2VfdW50eXBlZF9tZXNzYWdlKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wMy50eHQnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCiAgICAgICAgIGVxKG1zZy5nZXRfcGFyYW1zKCksIE5vbmUpCkBAIC0yMDEzLDggKzIwNzAsOCBAQAogICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKIAogICAgIGRlZiB0ZXN0X2NvbnRlbnRfdHlwZShzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscwotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICAjIEdldCBhIG1lc3NhZ2Ugb2JqZWN0IGFuZCByZXNldCB0aGUgc2VlayBwb2ludGVyIGZvciBvdGhlciB0ZXN0cwogICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wNS50eHQnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L3JlcG9ydCcpCkBAIC0yMDM2LDcgKzIwOTMsNyBAQAogICAgICAgICBlcShtc2cyLmdldF9wYXlsb2FkKCksICdZYWRkYSB5YWRkYSB5YWRkYVxuJykKICAgICAgICAgbXNnMyA9IG1zZy5nZXRfcGF5bG9hZCgyKQogICAgICAgICBlcShtc2czLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobXNnMywgTWVzc2FnZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZzMsIE1lc3NhZ2UpKQogICAgICAgICBwYXlsb2FkID0gbXNnMy5nZXRfcGF5bG9hZCgpCiAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHBheWxvYWQsIGxpc3QpKQogICAgICAgICBlcShsZW4ocGF5bG9hZCksIDEpCkBAIC0yMDQ1LDggKzIxMDIsOCBAQAogICAgICAgICBlcShtc2c0LmdldF9wYXlsb2FkKCksICdZYWRkYSB5YWRkYSB5YWRkYVxuJykKIAogICAgIGRlZiB0ZXN0X3BhcnNlcihzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscwotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wNi50eHQnKQogICAgICAgICAjIENoZWNrIHNvbWUgb2YgdGhlIG91dGVyIGhlYWRlcnMKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKQEAgLTIwNTYsMTMgKzIxMTMsMTMgQEAKICAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCiAgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKICAgICAgICAgbXNnMSA9IHBheWxvYWRbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobXNnMSwgTWVzc2FnZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZzEsIE1lc3NhZ2UpKQogICAgICAgICBlcShtc2cxLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShtc2cxLmdldF9wYXlsb2FkKCksIHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZzEuZ2V0X3BheWxvYWQoKSwgc3RyKSkKICAgICAgICAgZXEobXNnMS5nZXRfcGF5bG9hZCgpLCAnXG4nKQogCiAKLQwKKwogIyBUZXN0IHZhcmlvdXMgb3RoZXIgYml0cyBvZiB0aGUgcGFja2FnZSdzIGZ1bmN0aW9uYWxpdHkKIGNsYXNzIFRlc3RNaXNjZWxsYW5lb3VzKFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiB0ZXN0X21lc3NhZ2VfZnJvbV9zdHJpbmcoc2VsZik6CkBAIC0yMDk1LDcgKzIxNTIsNyBAQAogICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfbWVzc2FnZV9mcm9tX3N0cmluZ193aXRoX2NsYXNzKHNlbGYpOgotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18wMS50eHQnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCkBAIC0yMTE4LDcgKzIxNzUsNyBAQAogICAgICAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2Uoc3VicGFydCwgTXlNZXNzYWdlKSkKIAogICAgIGRlZiB0ZXN0X21lc3NhZ2VfZnJvbV9maWxlX3dpdGhfY2xhc3Moc2VsZik6Ci0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgIyBDcmVhdGUgYSBzdWJjbGFzcwogICAgICAgICBjbGFzcyBNeU1lc3NhZ2UoTWVzc2FnZSk6CiAgICAgICAgICAgICBwYXNzCkBAIC0yMjA1LDYgKzIyNjIsMTkgQEAKICAgICAgICAgZXEodGltZS5sb2NhbHRpbWUodClbOjZdLCB0aW1ldHVwWzo2XSkKICAgICAgICAgZXEoaW50KHRpbWUuc3RyZnRpbWUoJyVZJywgdGltZXR1cFs6OV0pKSwgMjAwMykKIAorICAgIGRlZiB0ZXN0X3BhcnNlZGF0ZV95Mmsoc2VsZik6CisgICAgICAgICIiIlRlc3QgZm9yIHBhcnNpbmcgYSBkYXRlIHdpdGggYSB0d28tZGlnaXQgeWVhci4KKworICAgICAgICBQYXJzaW5nIGEgZGF0ZSB3aXRoIGEgdHdvLWRpZ2l0IHllYXIgc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdAorICAgICAgICBmb3VyLWRpZ2l0IHllYXIuIFJGQzgyMiBhbGxvd3MgdHdvLWRpZ2l0IHllYXJzLCBidXQgUkZDMjgyMiAod2hpY2gKKyAgICAgICAgb2Jzb2xldGVzIFJGQzgyMikgcmVxdWlyZXMgZm91ci1kaWdpdCB5ZWFycy4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVdGlscy5wYXJzZWRhdGVfdHooJzI1IEZlYiAwMyAxMzo0NzoyNiAtMDgwMCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnBhcnNlZGF0ZV90eignMjUgRmViIDIwMDMgMTM6NDc6MjYgLTA4MDAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVdGlscy5wYXJzZWRhdGVfdHooJzI1IEZlYiA3MSAxMzo0NzoyNiAtMDgwMCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnBhcnNlZGF0ZV90eignMjUgRmViIDE5NzEgMTM6NDc6MjYgLTA4MDAnKSkKKwogICAgIGRlZiB0ZXN0X3BhcnNlYWRkcl9lbXB0eShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVdGlscy5wYXJzZWFkZHIoJzw+JyksICgnJywgJycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFV0aWxzLmZvcm1hdGFkZHIoVXRpbHMucGFyc2VhZGRyKCc8PicpKSwgJycpCkBAIC0yMjM5LDYgKzIzMDksMjQgQEAKICAgICAgICAgIyBmb3JtYXRhZGRyKCkgcXVvdGVzIHRoZSBuYW1lIGlmIHRoZXJlJ3MgYSBkb3QgaW4gaXQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVdGlscy5mb3JtYXRhZGRyKChhLCBiKSksIHkpCiAKKyAgICBkZWYgdGVzdF9wYXJzZWFkZHJfcHJlc2VydmVzX3F1b3RlZF9wYWlyc19pbl9hZGRyZXNzZXMoc2VsZik6CisgICAgICAgICMgaXNzdWUgMTAwMDUuICBOb3RlIHRoYXQgaW4gdGhlIHRoaXJkIHRlc3QgdGhlIHNlY29uZCBwYWlyIG9mCisgICAgICAgICMgYmFja3NsYXNoZXMgaXMgbm90IGFjdHVhbGx5IGEgcXVvdGVkIHBhaXIgYmVjYXVzZSBpdCBpcyBub3QgaW5zaWRlIGEKKyAgICAgICAgIyBjb21tZW50IG9yIHF1b3RlZCBzdHJpbmc6IHRoZSBhZGRyZXNzIGJlaW5nIHBhcnNlZCBoYXMgYSBxdW90ZWQKKyAgICAgICAgIyBzdHJpbmcgY29udGFpbmluZyBhIHF1b3RlZCBiYWNrc2xhc2gsIGZvbGxvd2VkIGJ5ICdleGFtcGxlJyBhbmQgdHdvCisgICAgICAgICMgYmFja3NsYXNoZXMsIGZvbGxvd2VkIGJ5IGFub3RoZXIgcXVvdGVkIHN0cmluZyBjb250YWluaW5nIGEgc3BhY2UgYW5kCisgICAgICAgICMgdGhlIHdvcmQgJ2V4YW1wbGUnLiAgcGFyc2VhZGRyIGNvcGllcyB0aG9zZSB0d28gYmFja3NsYXNoZXMKKyAgICAgICAgIyBsaXRlcmFsbHkuICBQZXIgcmZjNTMyMiB0aGlzIGlzIG5vdCB0ZWNobmljYWxseSBjb3JyZWN0IHNpbmNlIGEgXCBtYXkKKyAgICAgICAgIyBub3QgYXBwZWFyIGluIGFuIGFkZHJlc3Mgb3V0c2lkZSBvZiBhIHF1b3RlZCBzdHJpbmcuICBJdCBpcyBwcm9iYWJseQorICAgICAgICAjIGEgc2Vuc2libGUgUG9zdGVsIGludGVycHJldGF0aW9uLCB0aG91Z2guCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShVdGlscy5wYXJzZWFkZHIoJyIiZXhhbXBsZSIgZXhhbXBsZSJAZXhhbXBsZS5jb20nKSwKKyAgICAgICAgICAoJycsICciImV4YW1wbGUiIGV4YW1wbGUiQGV4YW1wbGUuY29tJykpCisgICAgICAgIGVxKFV0aWxzLnBhcnNlYWRkcignIlxcImV4YW1wbGVcXCIgZXhhbXBsZSJAZXhhbXBsZS5jb20nKSwKKyAgICAgICAgICAoJycsICciXFwiZXhhbXBsZVxcIiBleGFtcGxlIkBleGFtcGxlLmNvbScpKQorICAgICAgICBlcShVdGlscy5wYXJzZWFkZHIoJyJcXFxcImV4YW1wbGVcXFxcIiBleGFtcGxlIkBleGFtcGxlLmNvbScpLAorICAgICAgICAgICgnJywgJyJcXFxcImV4YW1wbGVcXFxcIiBleGFtcGxlIkBleGFtcGxlLmNvbScpKQorCiAgICAgZGVmIHRlc3RfbXVsdGlsaW5lX2Zyb21fY29tbWVudChzZWxmKToKICAgICAgICAgeCA9ICIiIlwKIEZvbwpAQCAtMjI2MCw3ICsyMzQ4LDcgQEAKIAogICAgIGRlZiB0ZXN0X2NoYXJzZXRfcmljaGNvbXBhcmlzb25zKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgbmUgPSBzZWxmLmZhaWxJZkVxdWFsCisgICAgICAgIG5lID0gc2VsZi5hc3NlcnROb3RFcXVhbAogICAgICAgICBjc2V0MSA9IENoYXJzZXQoKQogICAgICAgICBjc2V0MiA9IENoYXJzZXQoKQogICAgICAgICBlcShjc2V0MSwgJ3VzLWFzY2lpJykKQEAgLTIzODYsNyArMjQ3NCw3IEBACiAiIiIpCiAKIAotDAorCiAjIFRlc3QgdGhlIGl0ZXJhdG9yL2dlbmVyYXRvcnMKIGNsYXNzIFRlc3RJdGVyYXRvcnMoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHRlc3RfYm9keV9saW5lX2l0ZXJhdG9yKHNlbGYpOgpAQCAtMjQ3OSw3ICsyNTY3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcnLmpvaW4oW2lsIGZvciBpbCwgbiBpbiBpbXRdKSA9PSAnJy5qb2luKG9tKSkKIAogCi0MCisKIGNsYXNzIFRlc3RQYXJzZXJzKFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiB0ZXN0X2hlYWRlcl9wYXJzZXIoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjQ5Miw4ICsyNTgwLDggQEAKICAgICAgICAgZXEobXNnWydmcm9tJ10sICdwcHAtcmVxdWVzdEB6enoub3JnJykKICAgICAgICAgZXEobXNnWyd0byddLCAncHBwQHp6ei5vcmcnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L21peGVkJykKLSAgICAgICAgc2VsZi5mYWlsSWYobXNnLmlzX211bHRpcGFydCgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShtc2cuZ2V0X3BheWxvYWQoKSwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtc2cuaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZy5nZXRfcGF5bG9hZCgpLCBzdHIpKQogCiAgICAgZGVmIHRlc3Rfd2hpdGVzcGFjZV9jb250aW51YXRpb24oc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjY0Miw3ICsyNzMwLDcgQEAKICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmdldF9wYXlsb2FkKDApLmdldF9wYXlsb2FkKCkuZW5kc3dpdGgoJ1xyXG4nKSkKIAotDAorCiBjbGFzcyBUZXN0QmFzZTY0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9sZW4oc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjcxNCw3ICsyODAyLDcgQEAKICA9P2lzby04ODU5LTE/Yj9lSGg0ZUNCNGVIaDRJSGg0ZUhnZz89IiIiKQogCiAKLQwKKwogY2xhc3MgVGVzdFF1b3ByaSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmhsaXQgPSBbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnYScpLCBvcmQoJ3onKSsxKV0gKyBcCkBAIC0yNzMwLDE1ICsyODE4LDE1IEBACiAKICAgICBkZWYgdGVzdF9oZWFkZXJfcXVvcHJpX2NoZWNrKHNlbGYpOgogICAgICAgICBmb3IgYyBpbiBzZWxmLmhsaXQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihxdW9wcmlNSU1FLmhlYWRlcl9xdW9wcmlfY2hlY2soYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHF1b3ByaU1JTUUuaGVhZGVyX3F1b3ByaV9jaGVjayhjKSkKICAgICAgICAgZm9yIGMgaW4gc2VsZi5obm9uOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHF1b3ByaU1JTUUuaGVhZGVyX3F1b3ByaV9jaGVjayhjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmlNSU1FLmhlYWRlcl9xdW9wcmlfY2hlY2soYykpCiAKICAgICBkZWYgdGVzdF9ib2R5X3F1b3ByaV9jaGVjayhzZWxmKToKICAgICAgICAgZm9yIGMgaW4gc2VsZi5ibGl0OgotICAgICAgICAgICAgc2VsZi5mYWlsSWYocXVvcHJpTUlNRS5ib2R5X3F1b3ByaV9jaGVjayhjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocXVvcHJpTUlNRS5ib2R5X3F1b3ByaV9jaGVjayhjKSkKICAgICAgICAgZm9yIGMgaW4gc2VsZi5ibm9uOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHF1b3ByaU1JTUUuYm9keV9xdW9wcmlfY2hlY2soYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpTUlNRS5ib2R5X3F1b3ByaV9jaGVjayhjKSkKIAogICAgIGRlZiB0ZXN0X2hlYWRlcl9xdW9wcmlfbGVuKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI4MjQsNyArMjkxMiw3IEBACiB0d28gbGluZSIiIikKIAogCi0MCisKICMgVGVzdCB0aGUgQ2hhcnNldCBjbGFzcwogY2xhc3MgVGVzdENoYXJzZXQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTI4ODEsOCArMjk2OSwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjaGFyc2V0KSwgJ3VzLWFzY2lpJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyb3JzLkNoYXJzZXRFcnJvciwgQ2hhcnNldCwgJ2FzY1x4ZmZpaScpCiAKKyAgICBkZWYgdGVzdF9jb2RlY3NfYWxpYXNlc19hY2NlcHRlZChzZWxmKToKKyAgICAgICAgY2hhcnNldCA9IENoYXJzZXQoJ3V0ZjgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjaGFyc2V0KSwgJ3V0Zi04JykKIAotDAorCiAjIFRlc3QgbXVsdGlsaW5ndWFsIE1JTUUgaGVhZGVycy4KIGNsYXNzIFRlc3RIZWFkZXIoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgpAQCAtMjkwNyw3ICsyOTk4LDcgQEAKICAgICAgICAgaCA9IEhlYWRlcigiSSBhbSB0aGUgdmVyeSBtb2RlbCBvZiBhIG1vZGVybiBNYWpvci1HZW5lcmFsOyBJJ3ZlIGluZm9ybWF0aW9uIHZlZ2V0YWJsZSwgYW5pbWFsLCBhbmQgbWluZXJhbDsgSSBrbm93IHRoZSBraW5ncyBvZiBFbmdsYW5kLCBhbmQgSSBxdW90ZSB0aGUgZmlnaHRzIGhpc3RvcmljYWwgZnJvbSBNYXJhdGhvbiB0byBXYXRlcmxvbywgaW4gb3JkZXIgY2F0ZWdvcmljYWw7IEknbSB2ZXJ5IHdlbGwgYWNxdWFpbnRlZCwgdG9vLCB3aXRoIG1hdHRlcnMgbWF0aGVtYXRpY2FsOyBJIHVuZGVyc3RhbmQgZXF1YXRpb25zLCBib3RoIHRoZSBzaW1wbGUgYW5kIHF1YWRyYXRpY2FsOyBhYm91dCBiaW5vbWlhbCB0aGVvcmVtIEknbSB0ZWVtaW5nIHdpdGggYSBsb3QgbycgbmV3cywgd2l0aCBtYW55IGNoZWVyZnVsIGZhY3RzIGFib3V0IHRoZSBzcXVhcmUgb2YgdGhlIGh5cG90ZW51c2UuIiwKICAgICAgICAgICAgICAgICAgICBtYXhsaW5lbGVuPTc2KQogICAgICAgICBmb3IgbCBpbiBoLmVuY29kZShzcGxpdGNoYXJzPScgJykuc3BsaXQoJ1xuICcpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxlbihsKSA8PSA3NikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obCkgPD0gNzYpCiAKICAgICBkZWYgdGVzdF9tdWx0aWxpbmd1YWwoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCkBAIC0zMDQxLDExICszMTMyLDMzIEBACiAKICAgICBkZWYgdGVzdF9icm9rZW5fYmFzZTY0X2hlYWRlcihzZWxmKToKICAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKLSAgICAgICAgcyA9ICdTdWJqZWN0OiA9P0VVQy1LUj9CP0NTaXhwTER0S1NDLzdMaXV2c2F4NGlDNnVMbXdNY2lqSUtIYUlMelN3ZC9IMFNDOCtMQ2p3THNndjdXLytNajNJUT89JworICAgICAgICBzID0gJ1N1YmplY3Q6ID0/RVVDLUtSP0I/Q1NpeHBMRHRLU0MvN0xpdXZzYXg0aUM2dUxtd01jaWpJS0hhSUx6U3dkL0gwU0M4K0xDandMc2d2N1cvK01qM0kgPz0nCiAgICAgICAgIHJhaXNlcyhFcnJvcnMuSGVhZGVyUGFyc2VFcnJvciwgZGVjb2RlX2hlYWRlciwgcykKIAorICAgICMgSXNzdWUgMTA3ODkxOQorICAgIGRlZiB0ZXN0X2FzY2lpX2FkZF9oZWFkZXIoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9J2J1ZC5naWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhdHRhY2htZW50OyBmaWxlbmFtZT0iYnVkLmdpZiInLAorICAgICAgICAgICAgbXNnWydDb250ZW50LURpc3Bvc2l0aW9uJ10pCiAKLQwKKyAgICBkZWYgdGVzdF9ub25hc2NpaV9hZGRfaGVhZGVyX3ZpYV90cmlwbGUoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywKKyAgICAgICAgICAgIGZpbGVuYW1lPSgnaXNvLTg4NTktMScsICcnLCAnRnVceGRmYmFsbGVyLnBwdCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lKj0iaXNvLTg4NTktMVwnXCdGdSVERmJhbGxlci5wcHQiJywKKyAgICAgICAgICAgIG1zZ1snQ29udGVudC1EaXNwb3NpdGlvbiddKQorCisgICAgZGVmIHRlc3RfZW5jb2RlX3VuYWxpYXNlZF9jaGFyc2V0KHNlbGYpOgorICAgICAgICAjIElzc3VlIDEzNzk0MTY6IHdoZW4gdGhlIGNoYXJzZXQgaGFzIG5vIG91dHB1dCBjb252ZXJzaW9uLAorICAgICAgICAjIG91dHB1dCB3YXMgYWNjaWRlbnRhbGx5IGdldHRpbmcgY29lcmNlZCB0byB1bmljb2RlLgorICAgICAgICByZXMgPSBIZWFkZXIoJ2FiYycsJ2lzby04ODU5LTInKS5lbmNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJz0/aXNvLTg4NTktMj9xP2FiYz89JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlcywgc3RyKQorCisKICMgVGVzdCBSRkMgMjIzMSBoZWFkZXIgcGFyYW1ldGVycyAoZW4vZGUpY29kaW5nCiBjbGFzcyBUZXN0UkZDMjIzMShUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9nZXRfcGFyYW0oc2VsZik6CkBAIC0zMDcwLDExICszMTgzLDExIEBACiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCiAgICAgICAgIG1zZy5zZXRfcGFyYW0oJ3RpdGxlJywgJ1RoaXMgaXMgZXZlbiBtb3JlICoqKmZ1bioqKiBpc25cJ3QgaXQhJywKICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0PSd1cy1hc2NpaScsIGxhbmd1YWdlPSdlbicpCi0gICAgICAgIGVxKG1zZy5hc19zdHJpbmcoKSwgIiIiXAorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCiBSZXR1cm4tUGF0aDogPGJiYkB6enoub3JnPgogRGVsaXZlcmVkLVRvOiBiYmJAenp6Lm9yZwogUmVjZWl2ZWQ6IGJ5IG1haWwuenp6Lm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQotXHRpZCAyN0NFQUQzOENDOyBGcmksICA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwIChFRFQpCisgaWQgMjdDRUFEMzhDQzsgRnJpLCAgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMCAoRURUKQogTUlNRS1WZXJzaW9uOiAxLjAKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKIE1lc3NhZ2UtSUQ6IDwxNTA5MC42MTMwNC4xMTA5MjkuNDU2ODRAYWFhLnp6ei5vcmc+CkBAIC0zMDgzLDcgKzMxOTYsNyBAQAogU3ViamVjdDogVGhpcyBpcyBhIHRlc3QgbWVzc2FnZQogRGF0ZTogRnJpLCA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwCiBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWk7Ci1cdHRpdGxlKj0idXMtYXNjaWknZW4nVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAlMkElMkElMkFmdW4lMkElMkElMkElMjBpc24lMjd0JTIwaXQlMjEiCisgdGl0bGUqPSJ1cy1hc2NpaSdlbidUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMGlzbiUyN3QlMjBpdCUyMSIKIAogCiBIaSwKQEAgLTMxMDQsNyArMzIxNyw3IEBACiBSZXR1cm4tUGF0aDogPGJiYkB6enoub3JnPgogRGVsaXZlcmVkLVRvOiBiYmJAenp6Lm9yZwogUmVjZWl2ZWQ6IGJ5IG1haWwuenp6Lm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQotXHRpZCAyN0NFQUQzOENDOyBGcmksICA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwIChFRFQpCisgaWQgMjdDRUFEMzhDQzsgRnJpLCAgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMCAoRURUKQogTUlNRS1WZXJzaW9uOiAxLjAKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKIE1lc3NhZ2UtSUQ6IDwxNTA5MC42MTMwNC4xMTA5MjkuNDU2ODRAYWFhLnp6ei5vcmc+CkBAIC0zMTEzLDcgKzMyMjYsNyBAQAogU3ViamVjdDogVGhpcyBpcyBhIHRlc3QgbWVzc2FnZQogRGF0ZTogRnJpLCA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwCiBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIjsKLVx0dGl0bGUqPSJ1cy1hc2NpaSdlbidUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMGlzbiUyN3QlMjBpdCUyMSIKKyB0aXRsZSo9InVzLWFzY2lpJ2VuJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwJTJBJTJBJTJBZnVuJTJBJTJBJTJBJTIwaXNuJTI3dCUyMGl0JTIxIgogCiAKIEhpLApAQCAtMzEzNyw3ICszMjUwLDcgQEAKICcnJwogICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCiAgICAgICAgIHBhcmFtID0gbXNnLmdldF9wYXJhbSgnTkFNRScpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzaW5zdGFuY2UocGFyYW0sIHR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKHBhcmFtLCB0dXBsZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBwYXJhbSwKICAgICAgICAgICAgICdmaWxlX19fX0NfX0RPQ1VNRU5UU18yMEFORF8yMFNFVFRJTkdTX0ZBQklFTl9MT0NBTF8yMFNFVFRJTkdTX1RFTVBfbnNtYWlsLmh0bScpCkBAIC0zMjkwLDcgKzM0MDMsNyBAQAogIiIiCiAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKICAgICAgICAgcGFyYW0gPSBtc2cuZ2V0X3BhcmFtKCduYW1lJykKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UocGFyYW0sIHR1cGxlKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbSwgIkZyYW5rJ3MgRG9jdW1lbnQiKQogCiAgICAgZGVmIHRlc3RfcmZjMjIzMV90aWNrX2F0dGFja19leHRlbmRlZChzZWxmKToKQEAgLTMzMTQsNyArMzQyNyw3IEBACiAiIiIKICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQogICAgICAgICBwYXJhbSA9IG1zZy5nZXRfcGFyYW0oJ25hbWUnKQotICAgICAgICBzZWxmLmZhaWxJZihpc2luc3RhbmNlKHBhcmFtLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtLCAidXMtYXNjaWknZW4tdXMnRnJhbmsncyBEb2N1bWVudCIpCiAKICAgICBkZWYgdGVzdF9yZmMyMjMxX25vX2V4dGVuZGVkX3ZhbHVlcyhzZWxmKToKQEAgLTMzNTcsNyArMzQ3MCw3IEBACiAgICAgICAgIGVxKHMsICdNeSBEb2N1bWVudCBGb3IgWW91JykKIAogCi0MCisKICMgVGVzdHMgdG8gZW5zdXJlIHRoYXQgc2lnbmVkIHBhcnRzIG9mIGFuIGVtYWlsIGFyZSBjb21wbGV0ZWx5IHByZXNlcnZlZCwgYXMKICMgcmVxdWlyZWQgYnkgUkZDMTg0NyBzZWN0aW9uIDIuMS4gIE5vdGUgdGhhdCB0aGVzZSBhcmUgaW5jb21wbGV0ZSwgYmVjYXVzZSB0aGUKICMgZW1haWwgcGFja2FnZSBkb2VzIG5vdCBjdXJyZW50bHkgYWx3YXlzIHByZXNlcnZlIHRoZSBib2R5LiAgU2VlIGlzc3VlIDE2NzA3NjUuCkBAIC0zMzkzLDcgKzM1MDYsNyBAQAogICAgICAgICBzZWxmLl9zaWduZWRfcGFydHNfZXEob3JpZ2luYWwsIHJlc3VsdCkKIAogCi0MCisKIGRlZiBfdGVzdGNsYXNzZXMoKToKICAgICBtb2QgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KICAgICByZXR1cm4gW2dldGF0dHIobW9kLCBuYW1lKSBmb3IgbmFtZSBpbiBkaXIobW9kKSBpZiBuYW1lLnN0YXJ0c3dpdGgoJ1Rlc3QnKV0KQEAgLTM0MTEsNiArMzUyNCw2IEBACiAgICAgICAgIHJ1bl91bml0dGVzdCh0ZXN0Y2xhc3MpCiAKIAotDAorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3N1aXRlJykKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfY29kZWNzLnB5IGIvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9jb2RlY3MucHkKaW5kZXggNTZiYWNjZC4uNTMyNzUwYSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9jb2RlY3MucHkKKysrIGIvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9jb2RlY3MucHkKQEAgLTMsNyArMyw3IEBACiAjIGVtYWlsIHBhY2thZ2UgdW5pdCB0ZXN0cyBmb3IgKG9wdGlvbmFsKSBBc2lhbiBjb2RlY3MKIAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZCwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogZnJvbSBlbWFpbC50ZXN0LnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UKIGZyb20gZW1haWwuY2hhcnNldCBpbXBvcnQgQ2hhcnNldApAQCAtMTUsNyArMTUsNyBAQAogdHJ5OgogICAgIHVuaWNvZGUoJ2ZvbycsICdldWMtanAnKQogZXhjZXB0IExvb2t1cEVycm9yOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QKIAogCiAMCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjc19yZW5hbWVkLnB5IGIvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9jb2RlY3NfcmVuYW1lZC5weQppbmRleCA1NmJhY2NkLi41MzI3NTBhIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjc19yZW5hbWVkLnB5CisrKyBiL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfY29kZWNzX3JlbmFtZWQucHkKQEAgLTMsNyArMyw3IEBACiAjIGVtYWlsIHBhY2thZ2UgdW5pdCB0ZXN0cyBmb3IgKG9wdGlvbmFsKSBBc2lhbiBjb2RlY3MKIAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZCwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogZnJvbSBlbWFpbC50ZXN0LnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UKIGZyb20gZW1haWwuY2hhcnNldCBpbXBvcnQgQ2hhcnNldApAQCAtMTUsNyArMTUsNyBAQAogdHJ5OgogICAgIHVuaWNvZGUoJ2ZvbycsICdldWMtanAnKQogZXhjZXB0IExvb2t1cEVycm9yOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QKIAogCiAMCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX3JlbmFtZWQucHkgYi9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX3JlbmFtZWQucHkKaW5kZXggMjJiYmU2Ni4uNDk3YjY2YiAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9yZW5hbWVkLnB5CisrKyBiL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfcmVuYW1lZC5weQpAQCAtNDEsMTcgKzQxLDE3IEBACiBTUEFDRSA9ICcgJwogCiAKLQwKKwogZGVmIG9wZW5maWxlKGZpbGVuYW1lLCBtb2RlPSdyJyk6CiAgICAgcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUobGFuZG1hcmspLCAnZGF0YScsIGZpbGVuYW1lKQogICAgIHJldHVybiBvcGVuKHBhdGgsIG1vZGUpCiAKIAotDAorCiAjIEJhc2UgdGVzdCBjbGFzcwogY2xhc3MgVGVzdEVtYWlsQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIG5kaWZmQXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCk6Ci0gICAgICAgICIiIkxpa2UgZmFpbFVubGVzc0VxdWFsIGV4Y2VwdCB1c2UgbmRpZmYgZm9yIHJlYWRhYmxlIG91dHB1dC4iIiIKKyAgICAgICAgIiIiTGlrZSBhc3NlcnRFcXVhbCBleGNlcHQgdXNlIG5kaWZmIGZvciByZWFkYWJsZSBvdXRwdXQuIiIiCiAgICAgICAgIGlmIGZpcnN0ICE9IHNlY29uZDoKICAgICAgICAgICAgIHNmaXJzdCA9IHN0cihmaXJzdCkKICAgICAgICAgICAgIHNzZWNvbmQgPSBzdHIoc2Vjb25kKQpAQCAtNjksNyArNjksNyBAQAogICAgICAgICByZXR1cm4gbXNnCiAKIAotDAorCiAjIFRlc3QgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBNZXNzYWdlIGNsYXNzJ3MgQVBJCiBjbGFzcyBUZXN0TWVzc2FnZUFQSShUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9nZXRfYWxsKHNlbGYpOgpAQCAtMTk0LDggKzE5NCwxMiBAQAogICAgICAgICAjIFN1YnBhcnQgMyBpcyBiYXNlNjQKICAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKDIpLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwKICAgICAgICAgICAgJ1RoaXMgaXMgYSBCYXNlNjQgZW5jb2RlZCBtZXNzYWdlLicpCi0gICAgICAgICMgU3VicGFydCA0IGhhcyBubyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBoZWFkZXIuCisgICAgICAgICMgU3VicGFydCA0IGlzIGJhc2U2NCB3aXRoIGEgdHJhaWxpbmcgbmV3bGluZSwgd2hpY2gKKyAgICAgICAgIyB1c2VkIHRvIGJlIHN0cmlwcGVkIChpc3N1ZSA3MTQzKS4KICAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKDMpLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwKKyAgICAgICAgICAgJ1RoaXMgaXMgYSBCYXNlNjQgZW5jb2RlZCBtZXNzYWdlLlxuJykKKyAgICAgICAgIyBTdWJwYXJ0IDUgaGFzIG5vIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGhlYWRlci4KKyAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKDQpLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwKICAgICAgICAgICAgJ1RoaXMgaGFzIG5vIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGhlYWRlci5cbicpCiAKICAgICBkZWYgdGVzdF9nZXRfZGVjb2RlZF91dV9wYXlsb2FkKHNlbGYpOgpAQCAtMjI3LDI1ICsyMzEsMzQgQEAKICAgICAgICAgbXNnWydGcm9tJ10gPSAnTWUnCiAgICAgICAgIG1zZ1sndG8nXSA9ICdZb3UnCiAgICAgICAgICMgQ2hlY2sgZm9yIGNhc2UgaW5zZW5zaXRpdml0eQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoJ2Zyb20nIGluIG1zZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCdGcm9tJyBpbiBtc2cpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygnRlJPTScgaW4gbXNnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoJ3RvJyBpbiBtc2cpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygnVG8nIGluIG1zZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCdUTycgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Zyb20nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGcm9tJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRlJPTScgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3RvJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnVG8nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdUTycgaW4gbXNnKQogCiAgICAgZGVmIHRlc3RfYXNfc3RyaW5nKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKICAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkKKyAgICAgICAgICAgICMgQkFXIDMwLU1hci0yMDA5IEV2aWwgYmUgaGVyZS4gIFNvLCB0aGUgZ2VuZXJhdG9yIGlzIGJyb2tlbiB3aXRoCisgICAgICAgICAgICAjIHJlc3BlY3QgdG8gbG9uZyBsaW5lIGJyZWFraW5nLiAgSXQncyBhbHNvIG5vdCBpZGVtcG90ZW50IHdoZW4gYQorICAgICAgICAgICAgIyBoZWFkZXIgZnJvbSBhIHBhcnNlZCBtZXNzYWdlIGlzIGNvbnRpbnVlZCB3aXRoIHRhYnMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICMgc3BhY2VzLiAgQmVmb3JlIHdlIGZpeGVkIGJ1ZyAxOTc0IGl0IHdhcyByZXZlcnNlZGx5IGJyb2tlbiwKKyAgICAgICAgICAgICMgaS5lLiBoZWFkZXJzIHRoYXQgd2VyZSBjb250aW51ZWQgd2l0aCBzcGFjZXMgZ290IGNvbnRpbnVlZCB3aXRoCisgICAgICAgICAgICAjIHRhYnMuICBGb3IgUHl0aG9uIDIueCB0aGVyZSdzIHJlYWxseSBubyBnb29kIGZpeCBhbmQgaW4gUHl0aG9uCisgICAgICAgICAgICAjIDMueCBhbGwgdGhpcyBzdHVmZiBpcyByZS13cml0dGVuIHRvIGJlIHJpZ2h0KGVyKS4gIENocmlzIFdpdGhlcnMKKyAgICAgICAgICAgICMgY29udmluY2VkIG1lIHRoYXQgdXNpbmcgc3BhY2UgYXMgdGhlIGRlZmF1bHQgY29udGludWF0aW9uCisgICAgICAgICAgICAjIGNoYXJhY3RlciBpcyBsZXNzIGJhZCBmb3IgbW9yZSBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpLnJlcGxhY2UoJ1x0JywgJyAnKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICBlcSh0ZXh0LCBtc2cuYXNfc3RyaW5nKCkpCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbCh0ZXh0LCBtc2cuYXNfc3RyaW5nKCkpCiAgICAgICAgIGZ1bGxyZXByID0gc3RyKG1zZykKICAgICAgICAgbGluZXMgPSBmdWxscmVwci5zcGxpdCgnXG4nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobGluZXNbMF0uc3RhcnRzd2l0aCgnRnJvbSAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzBdLnN0YXJ0c3dpdGgoJ0Zyb20gJykpCiAgICAgICAgIGVxKHRleHQsIE5MLmpvaW4obGluZXNbMTpdKSkKIAogICAgIGRlZiB0ZXN0X2JhZF9wYXJhbShzZWxmKToKQEAgLTMxNiwxMCArMzI5LDEwIEBACiAKICAgICBkZWYgdGVzdF9oYXNfa2V5KHNlbGYpOgogICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCdIZWFkZXI6IGV4aXN0cycpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtc2cuaGFzX2tleSgnaGVhZGVyJykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtc2cuaGFzX2tleSgnSGVhZGVyJykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtc2cuaGFzX2tleSgnSEVBREVSJykpCi0gICAgICAgIHNlbGYuZmFpbElmKG1zZy5oYXNfa2V5KCdoZWFkZXJpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaGFzX2tleSgnaGVhZGVyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaGFzX2tleSgnSGVhZGVyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaGFzX2tleSgnSEVBREVSJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobXNnLmhhc19rZXkoJ2hlYWRlcmknKSkKIAogICAgIGRlZiB0ZXN0X3NldF9wYXJhbShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC00OTEsNyArNTA0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCB4KQogCiAKLQwKKwogIyBUZXN0IHRoZSBlbWFpbC5lbmNvZGVycyBtb2R1bGUKIGNsYXNzIFRlc3RFbmNvZGVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZW5jb2RlX2VtcHR5X3BheWxvYWQoc2VsZik6CkBAIC01MTgsNyArNTMxLDcgQEAKICAgICAgICAgZXEobXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10sICdxdW90ZWQtcHJpbnRhYmxlJykKIAogCi0MCisKICMgVGVzdCBsb25nIGhlYWRlciB3cmFwcGluZwogY2xhc3MgVGVzdExvbmdIZWFkZXJzKFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiB0ZXN0X3NwbGl0X2xvbmdfY29udGludWF0aW9uKHNlbGYpOgpAQCAtNTM1LDggKzU0OCw4IEBACiAgICAgICAgIGcuZmxhdHRlbihtc2cpCiAgICAgICAgIGVxKHNmcC5nZXR2YWx1ZSgpLCAiIiJcCiBTdWJqZWN0OiBidWcgZGVtb25zdHJhdGlvbgotXHQxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjM0NTY3ODk3MTIzNDU2Nzg5ODExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OQotXHRtb3JlIHRleHQKKyAxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjM0NTY3ODk3MTIzNDU2Nzg5ODExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OQorIG1vcmUgdGV4dAogCiB0ZXN0CiAiIiIpCkBAIC02MzYsNyArNjQ5LDcgQEAKIE1JTUUtVmVyc2lvbjogMS4wCiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CiBYLUZvb2Jhci1TcG9pbmstRGVmcm9ibml0OiB3YXNuaXBvb3A7IGdpcmFmZmVzPSJ2ZXJ5LWxvbmctbmVja2VkLWFuaW1hbHMiOwotXHRzcG9vZ2U9Inl1bW15IjsgaGlwcG9zPSJnYXJnYW50dWFuIjsgbWFyc2htYWxsb3dzPSJnb29leSIKKyBzcG9vZ2U9Inl1bW15IjsgaGlwcG9zPSJnYXJnYW50dWFuIjsgbWFyc2htYWxsb3dzPSJnb29leSIKIAogJycnKQogCkBAIC02NTIsNyArNjY1LDcgQEAKICAgICAgICAgZXEoc2ZwLmdldHZhbHVlKCksICIiIlwKIEZyb206IHRlc3RAZG9tLmFpbgogUmVmZXJlbmNlczogPDBAZG9tLmFpbj4gPDFAZG9tLmFpbj4gPDJAZG9tLmFpbj4gPDNAZG9tLmFpbj4gPDRAZG9tLmFpbj4KLVx0PDVAZG9tLmFpbj4gPDZAZG9tLmFpbj4gPDdAZG9tLmFpbj4gPDhAZG9tLmFpbj4gPDlAZG9tLmFpbj4KKyA8NUBkb20uYWluPiA8NkBkb20uYWluPiA8N0Bkb20uYWluPiA8OEBkb20uYWluPiA8OUBkb20uYWluPgogCiBUZXN0IiIiKQogCkBAIC03MzAsOSArNzQzLDkgQEAKICAgICAgICAgbXNnWydUbyddID0gdG8KICAgICAgICAgZXEobXNnLmFzX3N0cmluZygwKSwgJycnXAogVG86ICJTb21lb25lIFRlc3QgI0EiIDxzb21lb25lQGVlY3MudW1pY2guZWR1PiwgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LAotXHQiU29tZW9uZSBUZXN0ICNCIiA8c29tZW9uZUB1bWljaC5lZHU+LAotXHQiU29tZW9uZSBUZXN0ICNDIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4sCi1cdCJTb21lb25lIFRlc3QgI0QiIDxzb21lb25lQGVlY3MudW1pY2guZWR1PgorICJTb21lb25lIFRlc3QgI0IiIDxzb21lb25lQHVtaWNoLmVkdT4sCisgIlNvbWVvbmUgVGVzdCAjQyIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LAorICJTb21lb25lIFRlc3QgI0QiIDxzb21lb25lQGVlY3MudW1pY2guZWR1PgogCiAnJycpCiAKQEAgLTc3MCwyNyArNzgzLDI3IEBACiAgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQogICAgICAgICBtc2dbJ1JlY2VpdmVkLTEnXSA9IEhlYWRlcihoLCBjb250aW51YXRpb25fd3M9J1x0JykKICAgICAgICAgbXNnWydSZWNlaXZlZC0yJ10gPSBoCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbChtc2cuYXNfc3RyaW5nKCksICIiIlwKIFJlY2VpdmVkLTE6IGZyb20gRk9PLlRMRCAodml6d29ybGQuYWNsLmZvby50bGQgWzEyMy40NTIuNjc4LjldKSBieQogXHRocm90aGdhci5sYS5tYXN0YWxlci5jb20gKHRtZGEtb2ZtaXBkKSB3aXRoIEVTTVRQOwogXHRXZWQsIDA1IE1hciAyMDAzIDE4OjEwOjE4IC0wNzAwCiBSZWNlaXZlZC0yOiBmcm9tIEZPTy5UTEQgKHZpendvcmxkLmFjbC5mb28udGxkIFsxMjMuNDUyLjY3OC45XSkgYnkKLVx0aHJvdGhnYXIubGEubWFzdGFsZXIuY29tICh0bWRhLW9mbWlwZCkgd2l0aCBFU01UUDsKLVx0V2VkLCAwNSBNYXIgMjAwMyAxODoxMDoxOCAtMDcwMAorIGhyb3RoZ2FyLmxhLm1hc3RhbGVyLmNvbSAodG1kYS1vZm1pcGQpIHdpdGggRVNNVFA7CisgV2VkLCAwNSBNYXIgMjAwMyAxODoxMDoxOCAtMDcwMAogCiAiIiIpCiAKICAgICBkZWYgdGVzdF9zdHJpbmdfaGVhZGVyaW5zdF9lcShzZWxmKToKICAgICAgICAgaCA9ICc8MTU5NzUuMTc5MDEuMjA3MjQwLjQxNDYwNEBzZ2lncml0em1hbm4xLm1hdGhlbWF0aWsudHUtbXVlbmNoZW4uZGU+IChEYXZpZCBCcmVtbmVyXCdzIG1lc3NhZ2Ugb2YgIlRodSwgNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMCIpJwogICAgICAgICBtc2cgPSBNZXNzYWdlKCkKLSAgICAgICAgbXNnWydSZWNlaXZlZC0xJ10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J1JlY2VpdmVkLTEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51YXRpb25fd3M9J1x0JykKLSAgICAgICAgbXNnWydSZWNlaXZlZC0yJ10gPSBoCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCi1SZWNlaXZlZC0xOiA8MTU5NzUuMTc5MDEuMjA3MjQwLjQxNDYwNEBzZ2lncml0em1hbm4xLm1hdGhlbWF0aWsudHUtbXVlbmNoZW4uZGU+CisgICAgICAgIG1zZ1snUmVjZWl2ZWQnXSA9IEhlYWRlcihoLCBoZWFkZXJfbmFtZT0nUmVjZWl2ZWQtMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51YXRpb25fd3M9J1x0JykKKyAgICAgICAgbXNnWydSZWNlaXZlZCddID0gaAorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCitSZWNlaXZlZDogPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPgogXHQoRGF2aWQgQnJlbW5lcidzIG1lc3NhZ2Ugb2YgIlRodSwgNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMCIpCi1SZWNlaXZlZC0yOiA8MTU5NzUuMTc5MDEuMjA3MjQwLjQxNDYwNEBzZ2lncml0em1hbm4xLm1hdGhlbWF0aWsudHUtbXVlbmNoZW4uZGU+Ci1cdChEYXZpZCBCcmVtbmVyJ3MgbWVzc2FnZSBvZiAiVGh1LCA2IE1hciAyMDAzIDEzOjU4OjIxICswMTAwIikKK1JlY2VpdmVkOiA8MTU5NzUuMTc5MDEuMjA3MjQwLjQxNDYwNEBzZ2lncml0em1hbm4xLm1hdGhlbWF0aWsudHUtbXVlbmNoZW4uZGU+CisgKERhdmlkIEJyZW1uZXIncyBtZXNzYWdlIG9mICJUaHUsIDYgTWFyIDIwMDMgMTM6NTg6MjEgKzAxMDAiKQogCiAiIiIpCiAKQEAgLTgwNCw3ICs4MTcsNyBAQAogICAgICAgICBtc2dbJ0ZhY2UtMiddID0gSGVhZGVyKHQsIGhlYWRlcl9uYW1lPSdGYWNlLTInKQogICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksICIiIlwKIEZhY2UtMTogaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdCQU1BQUFDbExPUzBBQUFBR0ZCTVZFVUFBQUFrSGlKZVJVSWNHQmk5Ci1cdGxvY1FEUTR6SnlrRkJBWEpmV0RqQUFBQ1lVbEVRVlI0bkYyVFFZL2pJQXlGYzZseWRsRzV4OE55cDFZNjl3ajFQTjJJNWd6cAorIGxvY1FEUTR6SnlrRkJBWEpmV0RqQUFBQ1lVbEVRVlI0bkYyVFFZL2pJQXlGYzZseWRsRzV4OE55cDFZNjl3ajFQTjJJNWd6cAogRmFjZS0yOiBpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0JBTUFBQUNsTE9TMEFBQUFHRkJNVkVVQUFBQWtIaUplUlVJY0dCaTkKICBsb2NRRFE0ekp5a0ZCQVhKZldEakFBQUNZVWxFUVZSNG5GMlRRWS9qSUF5RmM2bHlkbEc1eDhOeXAxWTY5d2oxUE4ySTVnenAKIApAQCAtODE0LDExICs4MjcsMTEgQEAKICAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKICAgICAgICAgbSA9ICcnJ1wKIFJlY2VpdmVkOiBmcm9tIHNpaW1hZ2UuY29tIChbMTcyLjI1LjEuM10pIGJ5IHppbWEuc2lsaWNvbmltYWdlLmNvbSB3aXRoIE1pY3Jvc29mdCBTTVRQU1ZDKDUuMC4yMTk1LjQ5MDUpOwotXHRXZWQsIDE2IE9jdCAyMDAyIDA3OjQxOjExIC0wNzAwJycnCisgV2VkLCAxNiBPY3QgMjAwMiAwNzo0MToxMSAtMDcwMCcnJwogICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCiAgICAgICAgIGVxKG1zZy5hc19zdHJpbmcoKSwgJycnXAogUmVjZWl2ZWQ6IGZyb20gc2lpbWFnZS5jb20gKFsxNzIuMjUuMS4zXSkgYnkgemltYS5zaWxpY29uaW1hZ2UuY29tIHdpdGgKLVx0TWljcm9zb2Z0IFNNVFBTVkMoNS4wLjIxOTUuNDkwNSk7IFdlZCwgMTYgT2N0IDIwMDIgMDc6NDE6MTEgLTA3MDAKKyBNaWNyb3NvZnQgU01UUFNWQyg1LjAuMjE5NS40OTA1KTsgV2VkLCAxNiBPY3QgMjAwMiAwNzo0MToxMSAtMDcwMAogCiAnJycpCiAKQEAgLTgzMCwxNiArODQzLDE2IEBACiAgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQogICAgICAgICBtc2dbJ0xpc3QnXSA9IGgKICAgICAgICAgbXNnWydMaXN0J10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J0xpc3QnKQotICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksICIiIlwKKyAgICAgICAgc2VsZi5uZGlmZkFzc2VydEVxdWFsKG1zZy5hc19zdHJpbmcoKSwgIiIiXAogTGlzdDogTGlzdC1VbnN1YnNjcmliZTogPGh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3NwYW1hc3Nhc3Npbi10YWxrPiwKLVx0PG1haWx0bzpzcGFtYXNzYXNzaW4tdGFsay1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD9zdWJqZWN0PXVuc3Vic2NyaWJlPgorIDxtYWlsdG86c3BhbWFzc2Fzc2luLXRhbGstcmVxdWVzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ/c3ViamVjdD11bnN1YnNjcmliZT4KIExpc3Q6IExpc3QtVW5zdWJzY3JpYmU6IDxodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcGFtYXNzYXNzaW4tdGFsaz4sCiAgPG1haWx0bzpzcGFtYXNzYXNzaW4tdGFsay1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD9zdWJqZWN0PXVuc3Vic2NyaWJlPgogCiAiIiIpCiAKIAotDAorCiAjIFRlc3QgbWFuZ2xpbmcgb2YgIkZyb20gIiBsaW5lcyBpbiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UKIGNsYXNzIFRlc3RGcm9tTWFuZ2xpbmcodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTg3Myw3ICs4ODYsNyBAQAogIiIiKQogCiAKLQwKKwogIyBUZXN0IHRoZSBiYXNpYyBNSU1FQXVkaW8gY2xhc3MKIGNsYXNzIFRlc3RNSU1FQXVkaW8odW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTkwMyw3ICs5MTYsNyBAQAogCiAgICAgZGVmIHRlc3RfYWRkX2hlYWRlcihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgc2VsZi5fYXUuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZT0nYXVkaW90ZXN0LmF1JykKICAgICAgICAgZXEoc2VsZi5fYXVbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSwKQEAgLTkyMiw3ICs5MzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0nZm9vYmFyJykgaXMgbWlzc2luZykKIAogCi0MCisKICMgVGVzdCB0aGUgYmFzaWMgTUlNRUltYWdlIGNsYXNzCiBjbGFzcyBUZXN0TUlNRUltYWdlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC05NDYsNyArOTU5LDcgQEAKIAogICAgIGRlZiB0ZXN0X2FkZF9oZWFkZXIoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIHNlbGYuX2ltLmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9J2Rpbmd1c2Zpc2guZ2lmJykKICAgICAgICAgZXEoc2VsZi5faW1bJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSwKQEAgLTk2NSw3ICs5NzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0nZm9vYmFyJykgaXMgbWlzc2luZykKIAogCi0MCisKICMgVGVzdCB0aGUgYmFzaWMgTUlNRUFwcGxpY2F0aW9uIGNsYXNzCiBjbGFzcyBUZXN0TUlNRUFwcGxpY2F0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9oZWFkZXJzKHNlbGYpOgpAQCAtOTgyLDcgKzk5NSw3IEBACiAgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGJ5dGVzKQogCiAKLQwKKwogIyBUZXN0IHRoZSBiYXNpYyBNSU1FVGV4dCBjbGFzcwogY2xhc3MgVGVzdE1JTUVUZXh0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC05OTAsNyArMTAwMyw3IEBACiAKICAgICBkZWYgdGVzdF90eXBlcyhzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgZXEoc2VsZi5fbXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQogICAgICAgICBlcShzZWxmLl9tc2cuZ2V0X3BhcmFtKCdjaGFyc2V0JyksICd1cy1hc2NpaScpCiAgICAgICAgIG1pc3NpbmcgPSBbXQpAQCAtMTAwMCw3ICsxMDEzLDcgQEAKIAogICAgIGRlZiB0ZXN0X3BheWxvYWQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbXNnLmdldF9wYXlsb2FkKCksICdoZWxsbyB0aGVyZScpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3Qgc2VsZi5fbXNnLmlzX211bHRpcGFydCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuX21zZy5pc19tdWx0aXBhcnQoKSkKIAogICAgIGRlZiB0ZXN0X2NoYXJzZXQoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMTAwOSw3ICsxMDIyLDcgQEAKICAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIicpCiAKIAotDAorCiAjIFRlc3QgY29tcGxpY2F0ZWQgbXVsdGlwYXJ0LyogbWVzc2FnZXMKIGNsYXNzIFRlc3RNdWx0aXBhcnQoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTA1NSw3ICsxMDY4LDcgQEAKICAgICBkZWYgdGVzdF9oaWVyYXJjaHkoc2VsZik6CiAgICAgICAgICMgY29udmVuaWVuY2UKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKICAgICAgICAgIyB0ZXN0cwogICAgICAgICBtID0gc2VsZi5fbXNnCkBAIC0xMzY5LDcgKzEzODIsNyBAQAogCiAtLSAgICBYWFhYLS0KICcnJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5pc19tdWx0aXBhcnQoKSkKICAgICAgICAgZXEobXNnLmdldF9ib3VuZGFyeSgpLCAnICAgIFhYWFgnKQogICAgICAgICBlcShsZW4obXNnLmdldF9wYXlsb2FkKCkpLCAyKQogCkBAIC0xMzg1LDEwICsxMzk4LDEwIEBACiAKIFlYTmtaZz09CiAtLT09PT09PT09PT09PT09PTAwMTIzOTQxNjQ9PS0tIiIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLmdldF9wYXlsb2FkKDApLmdldF9wYXlsb2FkKCksICdZWE5rWmc9PScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgwKS5nZXRfcGF5bG9hZCgpLCAnWVhOa1pnPT0nKQogCiAKLQwKKwogIyBUZXN0IHNvbWUgYmFkbHkgZm9ybWF0dGVkIG1lc3NhZ2VzCiBjbGFzcyBUZXN0Tm9uQ29uZm9ybWFudChUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9wYXJzZV9taXNzaW5nX21pbm9yX3R5cGUoc2VsZik6CkBAIC0xMzk5LDcgKzE0MTIsNyBAQAogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfc3VidHlwZSgpLCAncGxhaW4nKQogCiAgICAgZGVmIHRlc3Rfc2FtZV9ib3VuZGFyeV9pbm5lcl9vdXRlcihzZWxmKToKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18xNS50eHQnKQogICAgICAgICAjIFhYWCBXZSBjYW4gcHJvYmFibHkgZXZlbnR1YWxseSBkbyBiZXR0ZXIKICAgICAgICAgaW5uZXIgPSBtc2cuZ2V0X3BheWxvYWQoMCkKQEAgLTE0MDksNyArMTQyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5TdGFydEJvdW5kYXJ5Tm90Rm91bmREZWZlY3QpKQogCiAgICAgZGVmIHRlc3RfbXVsdGlwYXJ0X25vX2JvdW5kYXJ5KHNlbGYpOgotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzI1LnR4dCcpCiAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKG1zZy5nZXRfcGF5bG9hZCgpLCBzdHIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtc2cuZGVmZWN0cyksIDIpCkBAIC0xNDY3LDcgKzE0ODAsNyBAQAogIiIiKQogCiAgICAgZGVmIHRlc3RfbHlpbmdfbXVsdGlwYXJ0KHNlbGYpOgotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzQxLnR4dCcpCiAgICAgICAgIHVubGVzcyhoYXNhdHRyKG1zZywgJ2RlZmVjdHMnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmRlZmVjdHMpLCAyKQpAQCAtMTQ4Nyw3ICsxNTAwLDcgQEAKICAgICAgICAgIyBbKl0gVGhpcyBtZXNzYWdlIGlzIG1pc3NpbmcgaXRzIHN0YXJ0IGJvdW5kYXJ5CiAgICAgICAgIGJhZCA9IG91dGVyLmdldF9wYXlsb2FkKDEpLmdldF9wYXlsb2FkKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJhZC5kZWZlY3RzKSwgMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoYmFkLmRlZmVjdHNbMF0sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJhZC5kZWZlY3RzWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuU3RhcnRCb3VuZGFyeU5vdEZvdW5kRGVmZWN0KSkKIAogICAgIGRlZiB0ZXN0X2ZpcnN0X2xpbmVfaXNfY29udGludWF0aW9uX2hlYWRlcihzZWxmKToKQEAgLTE0OTcsMTIgKzE1MTAsMTIgQEAKICAgICAgICAgZXEobXNnLmtleXMoKSwgW10pCiAgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAnTGluZSAyXG5MaW5lIDMnKQogICAgICAgICBlcShsZW4obXNnLmRlZmVjdHMpLCAxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShtc2cuZGVmZWN0c1swXSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobXNnLmRlZmVjdHNbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5GaXJzdEhlYWRlckxpbmVJc0NvbnRpbnVhdGlvbkRlZmVjdCkpCiAgICAgICAgIGVxKG1zZy5kZWZlY3RzWzBdLmxpbmUsICcgTGluZSAxXG4nKQogCiAKLQwKKwogIyBUZXN0IFJGQyAyMDQ3IGhlYWRlciBlbmNvZGluZyBhbmQgZGVjb2RpbmcKIGNsYXNzIFRlc3RSRkMyMDQ3KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZmMyMDQ3X211bHRpbGluZShzZWxmKToKQEAgLTE1NDksNyArMTU2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3Nib3JkJywgTm9uZSldKQogCiAKLQwKKwogIyBUZXN0IHRoZSBNSU1FTWVzc2FnZSBjbGFzcwogY2xhc3MgVGVzdE1JTUVNZXNzYWdlKFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE1NjQsNyArMTU3Nyw3IEBACiAKICAgICBkZWYgdGVzdF92YWxpZF9hcmd1bWVudChzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgc3ViamVjdCA9ICdBIHN1Yi1tZXNzYWdlJwogICAgICAgICBtID0gTWVzc2FnZSgpCiAgICAgICAgIG1bJ1N1YmplY3QnXSA9IHN1YmplY3QKQEAgLTE2MDgsMjAgKzE2MjEsMjAgQEAKIAogICAgIGRlZiB0ZXN0X3BhcnNlX21lc3NhZ2VfcmZjODIyKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18xMS50eHQnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQogICAgICAgICBwYXlsb2FkID0gbXNnLmdldF9wYXlsb2FkKCkKICAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCiAgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKICAgICAgICAgc3VibXNnID0gcGF5bG9hZFswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWJtc2csIE1lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdWJtc2csIE1lc3NhZ2UpKQogICAgICAgICBlcShzdWJtc2dbJ3N1YmplY3QnXSwgJ0FuIGVuY2xvc2VkIG1lc3NhZ2UnKQogICAgICAgICBlcShzdWJtc2cuZ2V0X3BheWxvYWQoKSwgJ0hlcmUgaXMgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuXG4nKQogCiAgICAgZGVmIHRlc3RfZHNuKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICAjIG1zZyAxNiBpcyBhIERlbGl2ZXJ5IFN0YXR1cyBOb3RpZmljYXRpb24sIHNlZSBSRkMgMTg5NAogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18xNi50eHQnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L3JlcG9ydCcpCkBAIC0xODU5LDcgKzE4NzIsNyBAQAogICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoMSksIHRleHQyKQogCiAKLQwKKwogIyBBIGdlbmVyYWwgdGVzdCBvZiBwYXJzZXItPm1vZGVsLT5nZW5lcmF0b3IgaWRlbXBvdGVuY3kuICBJT1csIHJlYWQgYSBtZXNzYWdlCiAjIGluLCBwYXJzZSBpdCBpbnRvIGEgbWVzc2FnZSBvYmplY3QgdHJlZSwgdGhlbiB3aXRob3V0IHRvdWNoaW5nIHRoZSB0cmVlLAogIyByZWdlbmVyYXRlIHRoZSBwbGFpbiB0ZXh0LiAgVGhlIG9yaWdpbmFsIHRleHQgYW5kIHRoZSB0cmFuc2Zvcm1lZCB0ZXh0CkBAIC0xODgzLDcgKzE4OTYsNyBAQAogICAgICAgICBlcSh0ZXh0LCBzLmdldHZhbHVlKCkpCiAKICAgICBkZWYgdGVzdF9wYXJzZV90ZXh0X21lc3NhZ2Uoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCiAgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X21haW50eXBlKCksICd0ZXh0JykKQEAgLTE4OTUsNyArMTkwOCw3IEBACiAgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQogCiAgICAgZGVmIHRlc3RfcGFyc2VfdW50eXBlZF9tZXNzYWdlKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wMy50eHQnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCiAgICAgICAgIGVxKG1zZy5nZXRfcGFyYW1zKCksIE5vbmUpCkBAIC0xOTY3LDggKzE5ODAsOCBAQAogICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKIAogICAgIGRlZiB0ZXN0X2NvbnRlbnRfdHlwZShzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscwotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICAjIEdldCBhIG1lc3NhZ2Ugb2JqZWN0IGFuZCByZXNldCB0aGUgc2VlayBwb2ludGVyIGZvciBvdGhlciB0ZXN0cwogICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wNS50eHQnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L3JlcG9ydCcpCkBAIC0xOTkwLDcgKzIwMDMsNyBAQAogICAgICAgICBlcShtc2cyLmdldF9wYXlsb2FkKCksICdZYWRkYSB5YWRkYSB5YWRkYVxuJykKICAgICAgICAgbXNnMyA9IG1zZy5nZXRfcGF5bG9hZCgyKQogICAgICAgICBlcShtc2czLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobXNnMywgTWVzc2FnZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZzMsIE1lc3NhZ2UpKQogICAgICAgICBwYXlsb2FkID0gbXNnMy5nZXRfcGF5bG9hZCgpCiAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHBheWxvYWQsIGxpc3QpKQogICAgICAgICBlcShsZW4ocGF5bG9hZCksIDEpCkBAIC0xOTk5LDggKzIwMTIsOCBAQAogICAgICAgICBlcShtc2c0LmdldF9wYXlsb2FkKCksICdZYWRkYSB5YWRkYSB5YWRkYVxuJykKIAogICAgIGRlZiB0ZXN0X3BhcnNlcihzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscwotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wNi50eHQnKQogICAgICAgICAjIENoZWNrIHNvbWUgb2YgdGhlIG91dGVyIGhlYWRlcnMKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKQEAgLTIwMTAsMTMgKzIwMjMsMTMgQEAKICAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCiAgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKICAgICAgICAgbXNnMSA9IHBheWxvYWRbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobXNnMSwgTWVzc2FnZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZzEsIE1lc3NhZ2UpKQogICAgICAgICBlcShtc2cxLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShtc2cxLmdldF9wYXlsb2FkKCksIHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZzEuZ2V0X3BheWxvYWQoKSwgc3RyKSkKICAgICAgICAgZXEobXNnMS5nZXRfcGF5bG9hZCgpLCAnXG4nKQogCiAKLQwKKwogIyBUZXN0IHZhcmlvdXMgb3RoZXIgYml0cyBvZiB0aGUgcGFja2FnZSdzIGZ1bmN0aW9uYWxpdHkKIGNsYXNzIFRlc3RNaXNjZWxsYW5lb3VzKFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiB0ZXN0X21lc3NhZ2VfZnJvbV9zdHJpbmcoc2VsZik6CkBAIC0yMDQ5LDcgKzIwNjIsNyBAQAogICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfbWVzc2FnZV9mcm9tX3N0cmluZ193aXRoX2NsYXNzKHNlbGYpOgotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18wMS50eHQnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCkBAIC0yMDcyLDcgKzIwODUsNyBAQAogICAgICAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2Uoc3VicGFydCwgTXlNZXNzYWdlKSkKIAogICAgIGRlZiB0ZXN0X21lc3NhZ2VfZnJvbV9maWxlX3dpdGhfY2xhc3Moc2VsZik6Ci0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgIyBDcmVhdGUgYSBzdWJjbGFzcwogICAgICAgICBjbGFzcyBNeU1lc3NhZ2UoTWVzc2FnZSk6CiAgICAgICAgICAgICBwYXNzCkBAIC0yMjE1LDcgKzIyMjgsNyBAQAogCiAgICAgZGVmIHRlc3RfY2hhcnNldF9yaWNoY29tcGFyaXNvbnMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBuZSA9IHNlbGYuZmFpbElmRXF1YWwKKyAgICAgICAgbmUgPSBzZWxmLmFzc2VydE5vdEVxdWFsCiAgICAgICAgIGNzZXQxID0gQ2hhcnNldCgpCiAgICAgICAgIGNzZXQyID0gQ2hhcnNldCgpCiAgICAgICAgIGVxKGNzZXQxLCAndXMtYXNjaWknKQpAQCAtMjM0MSw3ICsyMzU0LDcgQEAKICIiIikKIAogCi0MCisKICMgVGVzdCB0aGUgaXRlcmF0b3IvZ2VuZXJhdG9ycwogY2xhc3MgVGVzdEl0ZXJhdG9ycyhUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9ib2R5X2xpbmVfaXRlcmF0b3Ioc2VsZik6CkBAIC0yNDAxLDcgKzI0MTQsNyBAQAogIiIiKQogCiAKLQwKKwogY2xhc3MgVGVzdFBhcnNlcnMoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHRlc3RfaGVhZGVyX3BhcnNlcihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yNDE0LDggKzI0MjcsOCBAQAogICAgICAgICBlcShtc2dbJ2Zyb20nXSwgJ3BwcC1yZXF1ZXN0QHp6ei5vcmcnKQogICAgICAgICBlcShtc2dbJ3RvJ10sICdwcHBAenp6Lm9yZycpCiAgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdtdWx0aXBhcnQvbWl4ZWQnKQotICAgICAgICBzZWxmLmZhaWxJZihtc2cuaXNfbXVsdGlwYXJ0KCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKG1zZy5nZXRfcGF5bG9hZCgpLCBzdHIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobXNnLmdldF9wYXlsb2FkKCksIHN0cikpCiAKICAgICBkZWYgdGVzdF93aGl0ZXNwYWNlX2NvbnRpbnVhdGlvbihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yNTQ2LDcgKzI1NTksNyBAQAogICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoKSwgJ2JvZHknKQogCiAKLQwKKwogY2xhc3MgVGVzdEJhc2U2NCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI2MTgsNyArMjYzMSw3IEBACiAgPT9pc28tODg1OS0xP2I/ZUhoNGVDQjRlSGg0SUhoNGVIZ2c/PSIiIikKIAogCi0MCisKIGNsYXNzIFRlc3RRdW9wcmkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5obGl0ID0gW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ2EnKSwgb3JkKCd6JykrMSldICsgXApAQCAtMjYzNCwxNSArMjY0NywxNSBAQAogCiAgICAgZGVmIHRlc3RfaGVhZGVyX3F1b3ByaV9jaGVjayhzZWxmKToKICAgICAgICAgZm9yIGMgaW4gc2VsZi5obGl0OgotICAgICAgICAgICAgc2VsZi5mYWlsSWYocXVvcHJpbWltZS5oZWFkZXJfcXVvcHJpX2NoZWNrKGMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxdW9wcmltaW1lLmhlYWRlcl9xdW9wcmlfY2hlY2soYykpCiAgICAgICAgIGZvciBjIGluIHNlbGYuaG5vbjoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhxdW9wcmltaW1lLmhlYWRlcl9xdW9wcmlfY2hlY2soYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpbWltZS5oZWFkZXJfcXVvcHJpX2NoZWNrKGMpKQogCiAgICAgZGVmIHRlc3RfYm9keV9xdW9wcmlfY2hlY2soc2VsZik6CiAgICAgICAgIGZvciBjIGluIHNlbGYuYmxpdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKHF1b3ByaW1pbWUuYm9keV9xdW9wcmlfY2hlY2soYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHF1b3ByaW1pbWUuYm9keV9xdW9wcmlfY2hlY2soYykpCiAgICAgICAgIGZvciBjIGluIHNlbGYuYm5vbjoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhxdW9wcmltaW1lLmJvZHlfcXVvcHJpX2NoZWNrKGMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaW1pbWUuYm9keV9xdW9wcmlfY2hlY2soYykpCiAKICAgICBkZWYgdGVzdF9oZWFkZXJfcXVvcHJpX2xlbihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yNzI4LDcgKzI3NDEsNyBAQAogdHdvIGxpbmUiIiIpCiAKIAotDAorCiAjIFRlc3QgdGhlIENoYXJzZXQgY2xhc3MKIGNsYXNzIFRlc3RDaGFyc2V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC0yNzg2LDcgKzI3OTksNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuQ2hhcnNldEVycm9yLCBDaGFyc2V0LCAnYXNjXHhmZmlpJykKIAogCi0MCisKICMgVGVzdCBtdWx0aWxpbmd1YWwgTUlNRSBoZWFkZXJzLgogY2xhc3MgVGVzdEhlYWRlcihUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CkBAIC0yODExLDcgKzI4MjQsNyBAQAogICAgICAgICBoID0gSGVhZGVyKCJJIGFtIHRoZSB2ZXJ5IG1vZGVsIG9mIGEgbW9kZXJuIE1ham9yLUdlbmVyYWw7IEkndmUgaW5mb3JtYXRpb24gdmVnZXRhYmxlLCBhbmltYWwsIGFuZCBtaW5lcmFsOyBJIGtub3cgdGhlIGtpbmdzIG9mIEVuZ2xhbmQsIGFuZCBJIHF1b3RlIHRoZSBmaWdodHMgaGlzdG9yaWNhbCBmcm9tIE1hcmF0aG9uIHRvIFdhdGVybG9vLCBpbiBvcmRlciBjYXRlZ29yaWNhbDsgSSdtIHZlcnkgd2VsbCBhY3F1YWludGVkLCB0b28sIHdpdGggbWF0dGVycyBtYXRoZW1hdGljYWw7IEkgdW5kZXJzdGFuZCBlcXVhdGlvbnMsIGJvdGggdGhlIHNpbXBsZSBhbmQgcXVhZHJhdGljYWw7IGFib3V0IGJpbm9taWFsIHRoZW9yZW0gSSdtIHRlZW1pbmcgd2l0aCBhIGxvdCBvJyBuZXdzLCB3aXRoIG1hbnkgY2hlZXJmdWwgZmFjdHMgYWJvdXQgdGhlIHNxdWFyZSBvZiB0aGUgaHlwb3RlbnVzZS4iLAogICAgICAgICAgICAgICAgICAgIG1heGxpbmVsZW49NzYpCiAgICAgICAgIGZvciBsIGluIGguZW5jb2RlKHNwbGl0Y2hhcnM9JyAnKS5zcGxpdCgnXG4gJyk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MobGVuKGwpIDw9IDc2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihsKSA8PSA3NikKIAogICAgIGRlZiB0ZXN0X211bHRpbGluZ3VhbChzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKQEAgLTI5NDUsMTEgKzI5NTgsMTEgQEAKIAogICAgIGRlZiB0ZXN0X2Jyb2tlbl9iYXNlNjRfaGVhZGVyKHNlbGYpOgogICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcwotICAgICAgICBzID0gJ1N1YmplY3Q6ID0/RVVDLUtSP0I/Q1NpeHBMRHRLU0MvN0xpdXZzYXg0aUM2dUxtd01jaWpJS0hhSUx6U3dkL0gwU0M4K0xDandMc2d2N1cvK01qM0lRPz0nCisgICAgICAgIHMgPSAnU3ViamVjdDogPT9FVUMtS1I/Qj9DU2l4cExEdEtTQy83TGl1dnNheDRpQzZ1TG13TWNpaklLSGFJTHpTd2QvSDBTQzgrTENqd0xzZ3Y3Vy8rTWozSSA/PScKICAgICAgICAgcmFpc2VzKGVycm9ycy5IZWFkZXJQYXJzZUVycm9yLCBkZWNvZGVfaGVhZGVyLCBzKQogCiAKLQwKKwogIyBUZXN0IFJGQyAyMjMxIGhlYWRlciBwYXJhbWV0ZXJzIChlbi9kZSljb2RpbmcKIGNsYXNzIFRlc3RSRkMyMjMxKFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiB0ZXN0X2dldF9wYXJhbShzZWxmKToKQEAgLTI5NzQsMTEgKzI5ODcsMTEgQEAKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKICAgICAgICAgbXNnLnNldF9wYXJhbSgndGl0bGUnLCAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEnLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9J3VzLWFzY2lpJywgbGFuZ3VhZ2U9J2VuJykKLSAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbChtc2cuYXNfc3RyaW5nKCksICIiIlwKIFJldHVybi1QYXRoOiA8YmJiQHp6ei5vcmc+CiBEZWxpdmVyZWQtVG86IGJiYkB6enoub3JnCiBSZWNlaXZlZDogYnkgbWFpbC56enoub3JnIChQb3N0Zml4LCBmcm9tIHVzZXJpZCA4ODkpCi1cdGlkIDI3Q0VBRDM4Q0M7IEZyaSwgIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAgKEVEVCkKKyBpZCAyN0NFQUQzOENDOyBGcmksICA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwIChFRFQpCiBNSU1FLVZlcnNpb246IDEuMAogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAogTWVzc2FnZS1JRDogPDE1MDkwLjYxMzA0LjExMDkyOS40NTY4NEBhYWEuenp6Lm9yZz4KQEAgLTI5ODcsNyArMzAwMCw3IEBACiBTdWJqZWN0OiBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlCiBEYXRlOiBGcmksIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAKIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaTsKLVx0dGl0bGUqPSJ1cy1hc2NpaSdlbidUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMGlzbiUyN3QlMjBpdCUyMSIKKyB0aXRsZSo9InVzLWFzY2lpJ2VuJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwJTJBJTJBJTJBZnVuJTJBJTJBJTJBJTIwaXNuJTI3dCUyMGl0JTIxIgogCiAKIEhpLApAQCAtMzAwOCw3ICszMDIxLDcgQEAKIFJldHVybi1QYXRoOiA8YmJiQHp6ei5vcmc+CiBEZWxpdmVyZWQtVG86IGJiYkB6enoub3JnCiBSZWNlaXZlZDogYnkgbWFpbC56enoub3JnIChQb3N0Zml4LCBmcm9tIHVzZXJpZCA4ODkpCi1cdGlkIDI3Q0VBRDM4Q0M7IEZyaSwgIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAgKEVEVCkKKyBpZCAyN0NFQUQzOENDOyBGcmksICA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwIChFRFQpCiBNSU1FLVZlcnNpb246IDEuMAogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAogTWVzc2FnZS1JRDogPDE1MDkwLjYxMzA0LjExMDkyOS40NTY4NEBhYWEuenp6Lm9yZz4KQEAgLTMwMTcsNyArMzAzMCw3IEBACiBTdWJqZWN0OiBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlCiBEYXRlOiBGcmksIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAKIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiOwotXHR0aXRsZSo9InVzLWFzY2lpJ2VuJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwJTJBJTJBJTJBZnVuJTJBJTJBJTJBJTIwaXNuJTI3dCUyMGl0JTIxIgorIHRpdGxlKj0idXMtYXNjaWknZW4nVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAlMkElMkElMkFmdW4lMkElMkElMkElMjBpc24lMjd0JTIwaXQlMjEiCiAKIAogSGksCkBAIC0zMDQxLDcgKzMwNTQsNyBAQAogJycnCiAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKICAgICAgICAgcGFyYW0gPSBtc2cuZ2V0X3BhcmFtKCdOQU1FJykKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UocGFyYW0sIHR1cGxlKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHBhcmFtLAogICAgICAgICAgICAgJ2ZpbGVfX19fQ19fRE9DVU1FTlRTXzIwQU5EXzIwU0VUVElOR1NfRkFCSUVOX0xPQ0FMXzIwU0VUVElOR1NfVEVNUF9uc21haWwuaHRtJykKQEAgLTMxOTQsNyArMzIwNyw3IEBACiAiIiIKICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQogICAgICAgICBwYXJhbSA9IG1zZy5nZXRfcGFyYW0oJ25hbWUnKQotICAgICAgICBzZWxmLmZhaWxJZihpc2luc3RhbmNlKHBhcmFtLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtLCAiRnJhbmsncyBEb2N1bWVudCIpCiAKICAgICBkZWYgdGVzdF9yZmMyMjMxX3RpY2tfYXR0YWNrX2V4dGVuZGVkKHNlbGYpOgpAQCAtMzIxOCw3ICszMjMxLDcgQEAKICIiIgogICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCiAgICAgICAgIHBhcmFtID0gbXNnLmdldF9wYXJhbSgnbmFtZScpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzaW5zdGFuY2UocGFyYW0sIHR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKHBhcmFtLCB0dXBsZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW0sICJ1cy1hc2NpaSdlbi11cydGcmFuaydzIERvY3VtZW50IikKIAogICAgIGRlZiB0ZXN0X3JmYzIyMzFfbm9fZXh0ZW5kZWRfdmFsdWVzKHNlbGYpOgpAQCAtMzI2MSw3ICszMjc0LDcgQEAKICAgICAgICAgZXEocywgJ015IERvY3VtZW50IEZvciBZb3UnKQogCiAKLQwKKwogZGVmIF90ZXN0Y2xhc3NlcygpOgogICAgIG1vZCA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXQogICAgIHJldHVybiBbZ2V0YXR0cihtb2QsIG5hbWUpIGZvciBuYW1lIGluIGRpcihtb2QpIGlmIG5hbWUuc3RhcnRzd2l0aCgnVGVzdCcpXQpAQCAtMzI3OSw2ICszMjkyLDYgQEAKICAgICAgICAgcnVuX3VuaXR0ZXN0KHRlc3RjbGFzcykKIAogCi0MCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0nc3VpdGUnKQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3V0aWxzLnB5IGIvTGliL2VtYWlsL3V0aWxzLnB5CmluZGV4IGI5YTc2NDIuLjZkMjJjYTcgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC91dGlscy5weQorKysgYi9MaWIvZW1haWwvdXRpbHMucHkKQEAgLTYwLDE0ICs2MCwxNSBAQAogCiAKIGRlZiBfYmRlY29kZShzKToKLSAgICAjIFdlIGNhbid0IHF1aXRlIHVzZSBiYXNlNjQuZW5jb2Rlc3RyaW5nKCkgc2luY2UgaXQgdGFja3Mgb24gYSAiY291cnRlc3kKLSAgICAjIG5ld2xpbmUiLiAgQmxlY2ghCisgICAgIiIiRGVjb2RlcyBhIGJhc2U2NCBzdHJpbmcuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYmFzZTY0LmRlY29kZXN0cmluZyBhbmQgaXQncyByZXRhaW5lZCBvbmx5CisgICAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIEl0IHVzZWQgdG8gcmVtb3ZlIHRoZSBsYXN0IFxuIG9mIHRoZSBkZWNvZGVkCisgICAgc3RyaW5nLCBpZiBpdCBoYWQgYW55IChzZWUgaXNzdWUgNzE0MykuCisgICAgIiIiCiAgICAgaWYgbm90IHM6CiAgICAgICAgIHJldHVybiBzCi0gICAgdmFsdWUgPSBiYXNlNjQuZGVjb2Rlc3RyaW5nKHMpCi0gICAgaWYgbm90IHMuZW5kc3dpdGgoJ1xuJykgYW5kIHZhbHVlLmVuZHN3aXRoKCdcbicpOgotICAgICAgICByZXR1cm4gdmFsdWVbOi0xXQotICAgIHJldHVybiB2YWx1ZQorICAgIHJldHVybiBiYXNlNjQuZGVjb2Rlc3RyaW5nKHMpCiAKIAogDApkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9fX2luaXRfXy5weSBiL0xpYi9lbmNvZGluZ3MvX19pbml0X18ucHkKaW5kZXggYWVhN2M1ZS4uYjg1Y2E4MiAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9fX2luaXRfXy5weQorKysgYi9MaWIvZW5jb2RpbmdzL19faW5pdF9fLnB5CkBAIC0xMjMsMTIgKzEyMywxMiBAQAogICAgICAgICAgICAgcmFpc2UgQ29kZWNSZWdpc3RyeUVycm9yLFwKICAgICAgICAgICAgICAgICAgJ21vZHVsZSAiJXMiICglcykgZmFpbGVkIHRvIHJlZ2lzdGVyJyAlIFwKICAgICAgICAgICAgICAgICAgIChtb2QuX19uYW1lX18sIG1vZC5fX2ZpbGVfXykKLSAgICAgICAgaWYgbm90IGNhbGxhYmxlKGVudHJ5WzBdKSBvciBcCi0gICAgICAgICAgIG5vdCBjYWxsYWJsZShlbnRyeVsxXSkgb3IgXAotICAgICAgICAgICAoZW50cnlbMl0gaXMgbm90IE5vbmUgYW5kIG5vdCBjYWxsYWJsZShlbnRyeVsyXSkpIG9yIFwKLSAgICAgICAgICAgKGVudHJ5WzNdIGlzIG5vdCBOb25lIGFuZCBub3QgY2FsbGFibGUoZW50cnlbM10pKSBvciBcCi0gICAgICAgICAgIChsZW4oZW50cnkpID4gNCBhbmQgZW50cnlbNF0gaXMgbm90IE5vbmUgYW5kIG5vdCBjYWxsYWJsZShlbnRyeVs0XSkpIG9yIFwKLSAgICAgICAgICAgKGxlbihlbnRyeSkgPiA1IGFuZCBlbnRyeVs1XSBpcyBub3QgTm9uZSBhbmQgbm90IGNhbGxhYmxlKGVudHJ5WzVdKSk6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudHJ5WzBdLCAnX19jYWxsX18nKSBvciBcCisgICAgICAgICAgIG5vdCBoYXNhdHRyKGVudHJ5WzFdLCAnX19jYWxsX18nKSBvciBcCisgICAgICAgICAgIChlbnRyeVsyXSBpcyBub3QgTm9uZSBhbmQgbm90IGhhc2F0dHIoZW50cnlbMl0sICdfX2NhbGxfXycpKSBvciBcCisgICAgICAgICAgIChlbnRyeVszXSBpcyBub3QgTm9uZSBhbmQgbm90IGhhc2F0dHIoZW50cnlbM10sICdfX2NhbGxfXycpKSBvciBcCisgICAgICAgICAgIChsZW4oZW50cnkpID4gNCBhbmQgZW50cnlbNF0gaXMgbm90IE5vbmUgYW5kIG5vdCBoYXNhdHRyKGVudHJ5WzRdLCAnX19jYWxsX18nKSkgb3IgXAorICAgICAgICAgICAobGVuKGVudHJ5KSA+IDUgYW5kIGVudHJ5WzVdIGlzIG5vdCBOb25lIGFuZCBub3QgaGFzYXR0cihlbnRyeVs1XSwgJ19fY2FsbF9fJykpOgogICAgICAgICAgICAgcmFpc2UgQ29kZWNSZWdpc3RyeUVycm9yLFwKICAgICAgICAgICAgICAgICAnaW5jb21wYXRpYmxlIGNvZGVjcyBpbiBtb2R1bGUgIiVzIiAoJXMpJyAlIFwKICAgICAgICAgICAgICAgICAobW9kLl9fbmFtZV9fLCBtb2QuX19maWxlX18pCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgcGFzcwogICAgIGVsc2U6CiAgICAgICAgIGZvciBhbGlhcyBpbiBjb2RlY2FsaWFzZXM6Ci0gICAgICAgICAgICBpZiBub3QgX2FsaWFzZXMuaGFzX2tleShhbGlhcyk6CisgICAgICAgICAgICBpZiBhbGlhcyBub3QgaW4gX2FsaWFzZXM6CiAgICAgICAgICAgICAgICAgX2FsaWFzZXNbYWxpYXNdID0gbW9kbmFtZQogCiAgICAgIyBSZXR1cm4gdGhlIHJlZ2lzdHJ5IGVudHJ5CmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkgYi9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKaW5kZXggYzZmNWFlYi4uYTU0Y2Y3NyAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQpAQCAtMTQ2LDYgKzE0NiwxMSBAQAogICAgICdjc2libTg1NycgICAgICAgICAgIDogJ2NwODU3JywKICAgICAnaWJtODU3JyAgICAgICAgICAgICA6ICdjcDg1NycsCiAKKyAgICAjIGNwODU4IGNvZGVjCisgICAgJzg1OCcgICAgICAgICAgICAgICAgOiAnY3A4NTgnLAorICAgICdjc2libTg1OCcgICAgICAgICAgIDogJ2NwODU4JywKKyAgICAnaWJtODU4JyAgICAgICAgICAgICA6ICdjcDg1OCcsCisKICAgICAjIGNwODYwIGNvZGVjCiAgICAgJzg2MCcgICAgICAgICAgICAgICAgOiAnY3A4NjAnLAogICAgICdjc2libTg2MCcgICAgICAgICAgIDogJ2NwODYwJywKQEAgLTQ0Miw3ICs0NDcsNyBAQAogICAgICdjc3B0Y3AxNTQnICAgICAgICAgIDogJ3B0Y3AxNTQnLAogICAgICdwdDE1NCcgICAgICAgICAgICAgIDogJ3B0Y3AxNTQnLAogICAgICdjcDE1NCcgICAgICAgICAgICAgIDogJ3B0Y3AxNTQnLAotICAgICdjeXJpbGxpYy1hc2lhbicgICAgIDogJ3B0Y3AxNTQnLAorICAgICdjeXJpbGxpY19hc2lhbicgICAgIDogJ3B0Y3AxNTQnLAogCiAgICAgIyBxdW9wcmlfY29kZWMgY29kZWMKICAgICAncXVvcHJpJyAgICAgICAgICAgICA6ICdxdW9wcmlfY29kZWMnLApkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDcyMC5weSBiL0xpYi9lbmNvZGluZ3MvY3A3MjAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5NmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbmNvZGluZ3MvY3A3MjAucHkKQEAgLTAsMCArMSwzMDkgQEAKKyIiIlB5dGhvbiBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyBjcDcyMCBnZW5lcmF0ZWQgb24gV2luZG93czoKK1Zpc3RhIDYuMC42MDAyIFNQMiBNdWx0aXByb2Nlc3NvciBGcmVlIHdpdGggdGhlIGNvbW1hbmQ6CisgIHB5dGhvbiBUb29scy91bmljb2RlL2dlbndpbmNvZGVjLnB5IDcyMAorIiIiIyIKKworCitpbXBvcnQgY29kZWNzCisKKyMjIyBDb2RlYyBBUElzCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisKKyAgICBkZWYgZW5jb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxlcnJvcnMsZW5jb2RpbmdfdGFibGUpCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxlcnJvcnMsZGVjb2RpbmdfdGFibGUpCisKK2NsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZW5jb2RpbmdfdGFibGUpWzBdCisKK2NsYXNzIEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZGVjb2RpbmdfdGFibGUpWzBdCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYyxjb2RlY3MuU3RyZWFtV3JpdGVyKToKKyAgICBwYXNzCisKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYyxjb2RlY3MuU3RyZWFtUmVhZGVyKToKKyAgICBwYXNzCisKKyMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQorCitkZWYgZ2V0cmVnZW50cnkoKToKKyAgICByZXR1cm4gY29kZWNzLkNvZGVjSW5mbygKKyAgICAgICAgbmFtZT0nY3A3MjAnLAorICAgICAgICBlbmNvZGU9Q29kZWMoKS5lbmNvZGUsCisgICAgICAgIGRlY29kZT1Db2RlYygpLmRlY29kZSwKKyAgICAgICAgaW5jcmVtZW50YWxlbmNvZGVyPUluY3JlbWVudGFsRW5jb2RlciwKKyAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKKyAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKKyAgICApCisKKworIyMjIERlY29kaW5nIFRhYmxlCisKK2RlY29kaW5nX3RhYmxlID0gKAorICAgIHUnXHgwMCcgICAgICMgIDB4MDAgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MDEnICAgICAjICAweDAxIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDAyJyAgICAgIyAgMHgwMiAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgwMycgICAgICMgIDB4MDMgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MDQnICAgICAjICAweDA0IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDA1JyAgICAgIyAgMHgwNSAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgwNicgICAgICMgIDB4MDYgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MDcnICAgICAjICAweDA3IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDA4JyAgICAgIyAgMHgwOCAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHQnICAgICAgICMgIDB4MDkgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1xuJyAgICAgICAjICAweDBBIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDBiJyAgICAgIyAgMHgwQiAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgwYycgICAgICMgIDB4MEMgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1xyJyAgICAgICAjICAweDBEIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDBlJyAgICAgIyAgMHgwRSAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgwZicgICAgICMgIDB4MEYgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MTAnICAgICAjICAweDEwIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDExJyAgICAgIyAgMHgxMSAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgxMicgICAgICMgIDB4MTIgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MTMnICAgICAjICAweDEzIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDE0JyAgICAgIyAgMHgxNCAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgxNScgICAgICMgIDB4MTUgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MTYnICAgICAjICAweDE2IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDE3JyAgICAgIyAgMHgxNyAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgxOCcgICAgICMgIDB4MTggLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MTknICAgICAjICAweDE5IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDFhJyAgICAgIyAgMHgxQSAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgxYicgICAgICMgIDB4MUIgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MWMnICAgICAjICAweDFDIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDFkJyAgICAgIyAgMHgxRCAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgxZScgICAgICMgIDB4MUUgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MWYnICAgICAjICAweDFGIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdScgJyAgICAgICAgIyAgMHgyMCAtPiBTUEFDRQorICAgIHUnIScgICAgICAgICMgIDB4MjEgLT4gRVhDTEFNQVRJT04gTUFSSworICAgIHUnIicgICAgICAgICMgIDB4MjIgLT4gUVVPVEFUSU9OIE1BUksKKyAgICB1JyMnICAgICAgICAjICAweDIzIC0+IE5VTUJFUiBTSUdOCisgICAgdSckJyAgICAgICAgIyAgMHgyNCAtPiBET0xMQVIgU0lHTgorICAgIHUnJScgICAgICAgICMgIDB4MjUgLT4gUEVSQ0VOVCBTSUdOCisgICAgdScmJyAgICAgICAgIyAgMHgyNiAtPiBBTVBFUlNBTkQKKyAgICB1IiciICAgICAgICAjICAweDI3IC0+IEFQT1NUUk9QSEUKKyAgICB1JygnICAgICAgICAjICAweDI4IC0+IExFRlQgUEFSRU5USEVTSVMKKyAgICB1JyknICAgICAgICAjICAweDI5IC0+IFJJR0hUIFBBUkVOVEhFU0lTCisgICAgdScqJyAgICAgICAgIyAgMHgyQSAtPiBBU1RFUklTSworICAgIHUnKycgICAgICAgICMgIDB4MkIgLT4gUExVUyBTSUdOCisgICAgdScsJyAgICAgICAgIyAgMHgyQyAtPiBDT01NQQorICAgIHUnLScgICAgICAgICMgIDB4MkQgLT4gSFlQSEVOLU1JTlVTCisgICAgdScuJyAgICAgICAgIyAgMHgyRSAtPiBGVUxMIFNUT1AKKyAgICB1Jy8nICAgICAgICAjICAweDJGIC0+IFNPTElEVVMKKyAgICB1JzAnICAgICAgICAjICAweDMwIC0+IERJR0lUIFpFUk8KKyAgICB1JzEnICAgICAgICAjICAweDMxIC0+IERJR0lUIE9ORQorICAgIHUnMicgICAgICAgICMgIDB4MzIgLT4gRElHSVQgVFdPCisgICAgdSczJyAgICAgICAgIyAgMHgzMyAtPiBESUdJVCBUSFJFRQorICAgIHUnNCcgICAgICAgICMgIDB4MzQgLT4gRElHSVQgRk9VUgorICAgIHUnNScgICAgICAgICMgIDB4MzUgLT4gRElHSVQgRklWRQorICAgIHUnNicgICAgICAgICMgIDB4MzYgLT4gRElHSVQgU0lYCisgICAgdSc3JyAgICAgICAgIyAgMHgzNyAtPiBESUdJVCBTRVZFTgorICAgIHUnOCcgICAgICAgICMgIDB4MzggLT4gRElHSVQgRUlHSFQKKyAgICB1JzknICAgICAgICAjICAweDM5IC0+IERJR0lUIE5JTkUKKyAgICB1JzonICAgICAgICAjICAweDNBIC0+IENPTE9OCisgICAgdSc7JyAgICAgICAgIyAgMHgzQiAtPiBTRU1JQ09MT04KKyAgICB1JzwnICAgICAgICAjICAweDNDIC0+IExFU1MtVEhBTiBTSUdOCisgICAgdSc9JyAgICAgICAgIyAgMHgzRCAtPiBFUVVBTFMgU0lHTgorICAgIHUnPicgICAgICAgICMgIDB4M0UgLT4gR1JFQVRFUi1USEFOIFNJR04KKyAgICB1Jz8nICAgICAgICAjICAweDNGIC0+IFFVRVNUSU9OIE1BUksKKyAgICB1J0AnICAgICAgICAjICAweDQwIC0+IENPTU1FUkNJQUwgQVQKKyAgICB1J0EnICAgICAgICAjICAweDQxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEKKyAgICB1J0InICAgICAgICAjICAweDQyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEIKKyAgICB1J0MnICAgICAgICAjICAweDQzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEMKKyAgICB1J0QnICAgICAgICAjICAweDQ0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEQKKyAgICB1J0UnICAgICAgICAjICAweDQ1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUKKyAgICB1J0YnICAgICAgICAjICAweDQ2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEYKKyAgICB1J0cnICAgICAgICAjICAweDQ3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEcKKyAgICB1J0gnICAgICAgICAjICAweDQ4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEgKKyAgICB1J0knICAgICAgICAjICAweDQ5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkKKyAgICB1J0onICAgICAgICAjICAweDRBIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICB1J0snICAgICAgICAjICAweDRCIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEsKKyAgICB1J0wnICAgICAgICAjICAweDRDIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEwKKyAgICB1J00nICAgICAgICAjICAweDREIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE0KKyAgICB1J04nICAgICAgICAjICAweDRFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE4KKyAgICB1J08nICAgICAgICAjICAweDRGIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8KKyAgICB1J1AnICAgICAgICAjICAweDUwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFAKKyAgICB1J1EnICAgICAgICAjICAweDUxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFEKKyAgICB1J1InICAgICAgICAjICAweDUyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFIKKyAgICB1J1MnICAgICAgICAjICAweDUzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFMKKyAgICB1J1QnICAgICAgICAjICAweDU0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFQKKyAgICB1J1UnICAgICAgICAjICAweDU1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUKKyAgICB1J1YnICAgICAgICAjICAweDU2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFYKKyAgICB1J1cnICAgICAgICAjICAweDU3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFcKKyAgICB1J1gnICAgICAgICAjICAweDU4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFgKKyAgICB1J1knICAgICAgICAjICAweDU5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFkKKyAgICB1J1onICAgICAgICAjICAweDVBIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFoKKyAgICB1J1snICAgICAgICAjICAweDVCIC0+IExFRlQgU1FVQVJFIEJSQUNLRVQKKyAgICB1J1xcJyAgICAgICAjICAweDVDIC0+IFJFVkVSU0UgU09MSURVUworICAgIHUnXScgICAgICAgICMgIDB4NUQgLT4gUklHSFQgU1FVQVJFIEJSQUNLRVQKKyAgICB1J14nICAgICAgICAjICAweDVFIC0+IENJUkNVTUZMRVggQUNDRU5UCisgICAgdSdfJyAgICAgICAgIyAgMHg1RiAtPiBMT1cgTElORQorICAgIHUnYCcgICAgICAgICMgIDB4NjAgLT4gR1JBVkUgQUNDRU5UCisgICAgdSdhJyAgICAgICAgIyAgMHg2MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQQorICAgIHUnYicgICAgICAgICMgIDB4NjIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEIKKyAgICB1J2MnICAgICAgICAjICAweDYzIC0+IExBVElOIFNNQUxMIExFVFRFUiBDCisgICAgdSdkJyAgICAgICAgIyAgMHg2NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRAorICAgIHUnZScgICAgICAgICMgIDB4NjUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUKKyAgICB1J2YnICAgICAgICAjICAweDY2IC0+IExBVElOIFNNQUxMIExFVFRFUiBGCisgICAgdSdnJyAgICAgICAgIyAgMHg2NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRworICAgIHUnaCcgICAgICAgICMgIDB4NjggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEgKKyAgICB1J2knICAgICAgICAjICAweDY5IC0+IExBVElOIFNNQUxMIExFVFRFUiBJCisgICAgdSdqJyAgICAgICAgIyAgMHg2QSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSgorICAgIHUnaycgICAgICAgICMgIDB4NkIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEsKKyAgICB1J2wnICAgICAgICAjICAweDZDIC0+IExBVElOIFNNQUxMIExFVFRFUiBMCisgICAgdSdtJyAgICAgICAgIyAgMHg2RCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTQorICAgIHUnbicgICAgICAgICMgIDB4NkUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE4KKyAgICB1J28nICAgICAgICAjICAweDZGIC0+IExBVElOIFNNQUxMIExFVFRFUiBPCisgICAgdSdwJyAgICAgICAgIyAgMHg3MCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUAorICAgIHUncScgICAgICAgICMgIDB4NzEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFEKKyAgICB1J3InICAgICAgICAjICAweDcyIC0+IExBVElOIFNNQUxMIExFVFRFUiBSCisgICAgdSdzJyAgICAgICAgIyAgMHg3MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUworICAgIHUndCcgICAgICAgICMgIDB4NzQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFQKKyAgICB1J3UnICAgICAgICAjICAweDc1IC0+IExBVElOIFNNQUxMIExFVFRFUiBVCisgICAgdSd2JyAgICAgICAgIyAgMHg3NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVgorICAgIHUndycgICAgICAgICMgIDB4NzcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFcKKyAgICB1J3gnICAgICAgICAjICAweDc4IC0+IExBVElOIFNNQUxMIExFVFRFUiBYCisgICAgdSd5JyAgICAgICAgIyAgMHg3OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWQorICAgIHUneicgICAgICAgICMgIDB4N0EgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFoKKyAgICB1J3snICAgICAgICAjICAweDdCIC0+IExFRlQgQ1VSTFkgQlJBQ0tFVAorICAgIHUnfCcgICAgICAgICMgIDB4N0MgLT4gVkVSVElDQUwgTElORQorICAgIHUnfScgICAgICAgICMgIDB4N0QgLT4gUklHSFQgQ1VSTFkgQlJBQ0tFVAorICAgIHUnficgICAgICAgICMgIDB4N0UgLT4gVElMREUKKyAgICB1J1x4N2YnICAgICAjICAweDdGIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDgwJworICAgIHUnXHg4MScKKyAgICB1J1x4ZTknICAgICAjICAweDgyIC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUKKyAgICB1J1x4ZTInICAgICAjICAweDgzIC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHg4NCcKKyAgICB1J1x4ZTAnICAgICAjICAweDg1IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICB1J1x4ODYnCisgICAgdSdceGU3JyAgICAgIyAgMHg4NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICB1J1x4ZWEnICAgICAjICAweDg4IC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhlYicgICAgICMgIDB4ODkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICB1J1x4ZTgnICAgICAjICAweDhBIC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICB1J1x4ZWYnICAgICAjICAweDhCIC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgdSdceGVlJyAgICAgIyAgMHg4QyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4OGQnCisgICAgdSdceDhlJworICAgIHUnXHg4ZicKKyAgICB1J1x4OTAnCisgICAgdSdcdTA2NTEnICAgIyAgMHg5MSAtPiBBUkFCSUMgU0hBRERBCisgICAgdSdcdTA2NTInICAgIyAgMHg5MiAtPiBBUkFCSUMgU1VLVU4KKyAgICB1J1x4ZjQnICAgICAjICAweDkzIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhhNCcgICAgICMgIDB4OTQgLT4gQ1VSUkVOQ1kgU0lHTgorICAgIHUnXHUwNjQwJyAgICMgIDB4OTUgLT4gQVJBQklDIFRBVFdFRUwKKyAgICB1J1x4ZmInICAgICAjICAweDk2IC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhmOScgICAgICMgIDB4OTcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRQorICAgIHUnXHUwNjIxJyAgICMgIDB4OTggLT4gQVJBQklDIExFVFRFUiBIQU1aQQorICAgIHUnXHUwNjIyJyAgICMgIDB4OTkgLT4gQVJBQklDIExFVFRFUiBBTEVGIFdJVEggTUFEREEgQUJPVkUKKyAgICB1J1x1MDYyMycgICAjICAweDlBIC0+IEFSQUJJQyBMRVRURVIgQUxFRiBXSVRIIEhBTVpBIEFCT1ZFCisgICAgdSdcdTA2MjQnICAgIyAgMHg5QiAtPiBBUkFCSUMgTEVUVEVSIFdBVyBXSVRIIEhBTVpBIEFCT1ZFCisgICAgdSdceGEzJyAgICAgIyAgMHg5QyAtPiBQT1VORCBTSUdOCisgICAgdSdcdTA2MjUnICAgIyAgMHg5RCAtPiBBUkFCSUMgTEVUVEVSIEFMRUYgV0lUSCBIQU1aQSBCRUxPVworICAgIHUnXHUwNjI2JyAgICMgIDB4OUUgLT4gQVJBQklDIExFVFRFUiBZRUggV0lUSCBIQU1aQSBBQk9WRQorICAgIHUnXHUwNjI3JyAgICMgIDB4OUYgLT4gQVJBQklDIExFVFRFUiBBTEVGCisgICAgdSdcdTA2MjgnICAgIyAgMHhBMCAtPiBBUkFCSUMgTEVUVEVSIEJFSAorICAgIHUnXHUwNjI5JyAgICMgIDB4QTEgLT4gQVJBQklDIExFVFRFUiBURUggTUFSQlVUQQorICAgIHUnXHUwNjJhJyAgICMgIDB4QTIgLT4gQVJBQklDIExFVFRFUiBURUgKKyAgICB1J1x1MDYyYicgICAjICAweEEzIC0+IEFSQUJJQyBMRVRURVIgVEhFSAorICAgIHUnXHUwNjJjJyAgICMgIDB4QTQgLT4gQVJBQklDIExFVFRFUiBKRUVNCisgICAgdSdcdTA2MmQnICAgIyAgMHhBNSAtPiBBUkFCSUMgTEVUVEVSIEhBSAorICAgIHUnXHUwNjJlJyAgICMgIDB4QTYgLT4gQVJBQklDIExFVFRFUiBLSEFICisgICAgdSdcdTA2MmYnICAgIyAgMHhBNyAtPiBBUkFCSUMgTEVUVEVSIERBTAorICAgIHUnXHUwNjMwJyAgICMgIDB4QTggLT4gQVJBQklDIExFVFRFUiBUSEFMCisgICAgdSdcdTA2MzEnICAgIyAgMHhBOSAtPiBBUkFCSUMgTEVUVEVSIFJFSAorICAgIHUnXHUwNjMyJyAgICMgIDB4QUEgLT4gQVJBQklDIExFVFRFUiBaQUlOCisgICAgdSdcdTA2MzMnICAgIyAgMHhBQiAtPiBBUkFCSUMgTEVUVEVSIFNFRU4KKyAgICB1J1x1MDYzNCcgICAjICAweEFDIC0+IEFSQUJJQyBMRVRURVIgU0hFRU4KKyAgICB1J1x1MDYzNScgICAjICAweEFEIC0+IEFSQUJJQyBMRVRURVIgU0FECisgICAgdSdceGFiJyAgICAgIyAgMHhBRSAtPiBMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIHUnXHhiYicgICAgICMgIDB4QUYgLT4gUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgdSdcdTI1OTEnICAgIyAgMHhCMCAtPiBMSUdIVCBTSEFERQorICAgIHUnXHUyNTkyJyAgICMgIDB4QjEgLT4gTUVESVVNIFNIQURFCisgICAgdSdcdTI1OTMnICAgIyAgMHhCMiAtPiBEQVJLIFNIQURFCisgICAgdSdcdTI1MDInICAgIyAgMHhCMyAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKyAgICB1J1x1MjUyNCcgICAjICAweEI0IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVAorICAgIHUnXHUyNTYxJyAgICMgIDB4QjUgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICB1J1x1MjU2MicgICAjICAweEI2IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgdSdcdTI1NTYnICAgIyAgMHhCNyAtPiBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgdSdcdTI1NTUnICAgIyAgMHhCOCAtPiBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgdSdcdTI1NjMnICAgIyAgMHhCOSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgdSdcdTI1NTEnICAgIyAgMHhCQSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMCisgICAgdSdcdTI1NTcnICAgIyAgMHhCQiAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIExFRlQKKyAgICB1J1x1MjU1ZCcgICAjICAweEJDIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICB1J1x1MjU1YycgICAjICAweEJEIC0+IEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgdSdcdTI1NWInICAgIyAgMHhCRSAtPiBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIHUnXHUyNTEwJyAgICMgIDB4QkYgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKKyAgICB1J1x1MjUxNCcgICAjICAweEMwIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKyAgICB1J1x1MjUzNCcgICAjICAweEMxIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgIHUnXHUyNTJjJyAgICMgIDB4QzIgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICB1J1x1MjUxYycgICAjICAweEMzIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICB1J1x1MjUwMCcgICAjICAweEM0IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCisgICAgdSdcdTI1M2MnICAgIyAgMHhDNSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICB1J1x1MjU1ZScgICAjICAweEM2IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIHUnXHUyNTVmJyAgICMgIDB4QzcgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgdSdcdTI1NWEnICAgIyAgMHhDOCAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVAorICAgIHUnXHUyNTU0JyAgICMgIDB4QzkgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBSSUdIVAorICAgIHUnXHUyNTY5JyAgICMgIDB4Q0EgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgIHUnXHUyNTY2JyAgICMgIDB4Q0IgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgdSdcdTI1NjAnICAgIyAgMHhDQyAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIHUnXHUyNTUwJyAgICMgIDB4Q0QgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMCisgICAgdSdcdTI1NmMnICAgIyAgMHhDRSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgdSdcdTI1NjcnICAgIyAgMHhDRiAtPiBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIHUnXHUyNTY4JyAgICMgIDB4RDAgLT4gQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICB1J1x1MjU2NCcgICAjICAweEQxIC0+IEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICB1J1x1MjU2NScgICAjICAweEQyIC0+IEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICB1J1x1MjU1OScgICAjICAweEQzIC0+IEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIHUnXHUyNTU4JyAgICMgIDB4RDQgLT4gQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgdSdcdTI1NTInICAgIyAgMHhENSAtPiBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIHUnXHUyNTUzJyAgICMgIDB4RDYgLT4gQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICB1J1x1MjU2YicgICAjICAweEQ3IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgdSdcdTI1NmEnICAgIyAgMHhEOCAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIHUnXHUyNTE4JyAgICMgIDB4RDkgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUCisgICAgdSdcdTI1MGMnICAgIyAgMHhEQSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICB1J1x1MjU4OCcgICAjICAweERCIC0+IEZVTEwgQkxPQ0sKKyAgICB1J1x1MjU4NCcgICAjICAweERDIC0+IExPV0VSIEhBTEYgQkxPQ0sKKyAgICB1J1x1MjU4YycgICAjICAweEREIC0+IExFRlQgSEFMRiBCTE9DSworICAgIHUnXHUyNTkwJyAgICMgIDB4REUgLT4gUklHSFQgSEFMRiBCTE9DSworICAgIHUnXHUyNTgwJyAgICMgIDB4REYgLT4gVVBQRVIgSEFMRiBCTE9DSworICAgIHUnXHUwNjM2JyAgICMgIDB4RTAgLT4gQVJBQklDIExFVFRFUiBEQUQKKyAgICB1J1x1MDYzNycgICAjICAweEUxIC0+IEFSQUJJQyBMRVRURVIgVEFICisgICAgdSdcdTA2MzgnICAgIyAgMHhFMiAtPiBBUkFCSUMgTEVUVEVSIFpBSAorICAgIHUnXHUwNjM5JyAgICMgIDB4RTMgLT4gQVJBQklDIExFVFRFUiBBSU4KKyAgICB1J1x1MDYzYScgICAjICAweEU0IC0+IEFSQUJJQyBMRVRURVIgR0hBSU4KKyAgICB1J1x1MDY0MScgICAjICAweEU1IC0+IEFSQUJJQyBMRVRURVIgRkVICisgICAgdSdceGI1JyAgICAgIyAgMHhFNiAtPiBNSUNSTyBTSUdOCisgICAgdSdcdTA2NDInICAgIyAgMHhFNyAtPiBBUkFCSUMgTEVUVEVSIFFBRgorICAgIHUnXHUwNjQzJyAgICMgIDB4RTggLT4gQVJBQklDIExFVFRFUiBLQUYKKyAgICB1J1x1MDY0NCcgICAjICAweEU5IC0+IEFSQUJJQyBMRVRURVIgTEFNCisgICAgdSdcdTA2NDUnICAgIyAgMHhFQSAtPiBBUkFCSUMgTEVUVEVSIE1FRU0KKyAgICB1J1x1MDY0NicgICAjICAweEVCIC0+IEFSQUJJQyBMRVRURVIgTk9PTgorICAgIHUnXHUwNjQ3JyAgICMgIDB4RUMgLT4gQVJBQklDIExFVFRFUiBIRUgKKyAgICB1J1x1MDY0OCcgICAjICAweEVEIC0+IEFSQUJJQyBMRVRURVIgV0FXCisgICAgdSdcdTA2NDknICAgIyAgMHhFRSAtPiBBUkFCSUMgTEVUVEVSIEFMRUYgTUFLU1VSQQorICAgIHUnXHUwNjRhJyAgICMgIDB4RUYgLT4gQVJBQklDIExFVFRFUiBZRUgKKyAgICB1J1x1MjI2MScgICAjICAweEYwIC0+IElERU5USUNBTCBUTworICAgIHUnXHUwNjRiJyAgICMgIDB4RjEgLT4gQVJBQklDIEZBVEhBVEFOCisgICAgdSdcdTA2NGMnICAgIyAgMHhGMiAtPiBBUkFCSUMgREFNTUFUQU4KKyAgICB1J1x1MDY0ZCcgICAjICAweEYzIC0+IEFSQUJJQyBLQVNSQVRBTgorICAgIHUnXHUwNjRlJyAgICMgIDB4RjQgLT4gQVJBQklDIEZBVEhBCisgICAgdSdcdTA2NGYnICAgIyAgMHhGNSAtPiBBUkFCSUMgREFNTUEKKyAgICB1J1x1MDY1MCcgICAjICAweEY2IC0+IEFSQUJJQyBLQVNSQQorICAgIHUnXHUyMjQ4JyAgICMgIDB4RjcgLT4gQUxNT1NUIEVRVUFMIFRPCisgICAgdSdceGIwJyAgICAgIyAgMHhGOCAtPiBERUdSRUUgU0lHTgorICAgIHUnXHUyMjE5JyAgICMgIDB4RjkgLT4gQlVMTEVUIE9QRVJBVE9SCisgICAgdSdceGI3JyAgICAgIyAgMHhGQSAtPiBNSURETEUgRE9UCisgICAgdSdcdTIyMWEnICAgIyAgMHhGQiAtPiBTUVVBUkUgUk9PVAorICAgIHUnXHUyMDdmJyAgICMgIDB4RkMgLT4gU1VQRVJTQ1JJUFQgTEFUSU4gU01BTEwgTEVUVEVSIE4KKyAgICB1J1x4YjInICAgICAjICAweEZEIC0+IFNVUEVSU0NSSVBUIFRXTworICAgIHUnXHUyNWEwJyAgICMgIDB4RkUgLT4gQkxBQ0sgU1FVQVJFCisgICAgdSdceGEwJyAgICAgIyAgMHhGRiAtPiBOTy1CUkVBSyBTUEFDRQorKQorCisjIyMgRW5jb2RpbmcgdGFibGUKK2VuY29kaW5nX3RhYmxlPWNvZGVjcy5jaGFybWFwX2J1aWxkKGRlY29kaW5nX3RhYmxlKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDg1OC5weSBiL0xpYi9lbmNvZGluZ3MvY3A4NTgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhNzYyMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbmNvZGluZ3MvY3A4NTgucHkKQEAgLTAsMCArMSw2OTggQEAKKyIiIiBQeXRob24gQ2hhcmFjdGVyIE1hcHBpbmcgQ29kZWMgZm9yIENQODU4LCBtb2RpZmllZCBmcm9tIGNwODUwLgorCisiIiIKKworaW1wb3J0IGNvZGVjcworCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorCisgICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsZXJyb3JzLGVuY29kaW5nX21hcCkKKworICAgIGRlZiBkZWNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LGVycm9ycyxkZWNvZGluZ190YWJsZSkKKworY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgorICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxzZWxmLmVycm9ycyxlbmNvZGluZ19tYXApWzBdCisKK2NsYXNzIEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZGVjb2RpbmdfdGFibGUpWzBdCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYyxjb2RlY3MuU3RyZWFtV3JpdGVyKToKKyAgICBwYXNzCisKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYyxjb2RlY3MuU3RyZWFtUmVhZGVyKToKKyAgICBwYXNzCisKKyMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQorCitkZWYgZ2V0cmVnZW50cnkoKToKKyAgICByZXR1cm4gY29kZWNzLkNvZGVjSW5mbygKKyAgICAgICAgbmFtZT0nY3A4NTgnLAorICAgICAgICBlbmNvZGU9Q29kZWMoKS5lbmNvZGUsCisgICAgICAgIGRlY29kZT1Db2RlYygpLmRlY29kZSwKKyAgICAgICAgaW5jcmVtZW50YWxlbmNvZGVyPUluY3JlbWVudGFsRW5jb2RlciwKKyAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKKyAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKKyAgICApCisKKyMjIyBEZWNvZGluZyBNYXAKKworZGVjb2RpbmdfbWFwID0gY29kZWNzLm1ha2VfaWRlbnRpdHlfZGljdChyYW5nZSgyNTYpKQorZGVjb2RpbmdfbWFwLnVwZGF0ZSh7CisgICAgMHgwMDgwOiAweDAwYzcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorICAgIDB4MDA4MTogMHgwMGZjLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwODI6IDB4MDBlOSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUKKyAgICAweDAwODM6IDB4MDBlMiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDA4NDogMHgwMGU0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwODU6IDB4MDBlMCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICAweDAwODY6IDB4MDBlNSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorICAgIDB4MDA4NzogMHgwMGU3LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgMHgwMDg4OiAweDAwZWEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwODk6IDB4MDBlYiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisgICAgMHgwMDhhOiAweDAwZTgsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFCisgICAgMHgwMDhiOiAweDAwZWYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgIDB4MDA4YzogMHgwMGVlLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMDhkOiAweDAwZWMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFCisgICAgMHgwMDhlOiAweDAwYzQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgMHgwMDhmOiAweDAwYzUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorICAgIDB4MDA5MDogMHgwMGM5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFCisgICAgMHgwMDkxOiAweDAwZTYsICAgICAjICBMQVRJTiBTTUFMTCBMSUdBVFVSRSBBRQorICAgIDB4MDA5MjogMHgwMGM2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBBRQorICAgIDB4MDA5MzogMHgwMGY0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMDk0OiAweDAwZjYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworICAgIDB4MDA5NTogMHgwMGYyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgIDB4MDA5NjogMHgwMGZiLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMDk3OiAweDAwZjksICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgMHgwMDk4OiAweDAwZmYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUworICAgIDB4MDA5OTogMHgwMGQ2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworICAgIDB4MDA5YTogMHgwMGRjLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworICAgIDB4MDA5YjogMHgwMGY4LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKyAgICAweDAwOWM6IDB4MDBhMywgICAgICMgIFBPVU5EIFNJR04KKyAgICAweDAwOWQ6IDB4MDBkOCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKyAgICAweDAwOWU6IDB4MDBkNywgICAgICMgIE1VTFRJUExJQ0FUSU9OIFNJR04KKyAgICAweDAwOWY6IDB4MDE5MiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PSworICAgIDB4MDBhMDogMHgwMGUxLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICAgIDB4MDBhMTogMHgwMGVkLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURQorICAgIDB4MDBhMjogMHgwMGYzLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQorICAgIDB4MDBhMzogMHgwMGZhLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURQorICAgIDB4MDBhNDogMHgwMGYxLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgIDB4MDBhNTogMHgwMGQxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFCisgICAgMHgwMGE2OiAweDAwYWEsICAgICAjICBGRU1JTklORSBPUkRJTkFMIElORElDQVRPUgorICAgIDB4MDBhNzogMHgwMGJhLCAgICAgIyAgTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgMHgwMGE4OiAweDAwYmYsICAgICAjICBJTlZFUlRFRCBRVUVTVElPTiBNQVJLCisgICAgMHgwMGE5OiAweDAwYWUsICAgICAjICBSRUdJU1RFUkVEIFNJR04KKyAgICAweDAwYWE6IDB4MDBhYywgICAgICMgIE5PVCBTSUdOCisgICAgMHgwMGFiOiAweDAwYmQsICAgICAjICBWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEYKKyAgICAweDAwYWM6IDB4MDBiYywgICAgICMgIFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgorICAgIDB4MDBhZDogMHgwMGExLCAgICAgIyAgSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSworICAgIDB4MDBhZTogMHgwMGFiLCAgICAgIyAgTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDAwYWY6IDB4MDBiYiwgICAgICMgIFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4MDBiMDogMHgyNTkxLCAgICAgIyAgTElHSFQgU0hBREUKKyAgICAweDAwYjE6IDB4MjU5MiwgICAgICMgIE1FRElVTSBTSEFERQorICAgIDB4MDBiMjogMHgyNTkzLCAgICAgIyAgREFSSyBTSEFERQorICAgIDB4MDBiMzogMHgyNTAyLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgMHgwMGI0OiAweDI1MjQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDAwYjU6IDB4MDBjMSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICAgIDB4MDBiNjogMHgwMGMyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwYjc6IDB4MDBjMCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRQorICAgIDB4MDBiODogMHgwMGE5LCAgICAgIyAgQ09QWVJJR0hUIFNJR04KKyAgICAweDAwYjk6IDB4MjU2MywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDAwYmE6IDB4MjU1MSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICAweDAwYmI6IDB4MjU1NywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgIDB4MDBiYzogMHgyNTVkLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVAorICAgIDB4MDBiZDogMHgwMGEyLCAgICAgIyAgQ0VOVCBTSUdOCisgICAgMHgwMGJlOiAweDAwYTUsICAgICAjICBZRU4gU0lHTgorICAgIDB4MDBiZjogMHgyNTEwLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKKyAgICAweDAwYzA6IDB4MjUxNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKyAgICAweDAwYzE6IDB4MjUzNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjMjogMHgyNTJjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDAwYzM6IDB4MjUxYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDAwYzQ6IDB4MjUwMCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCisgICAgMHgwMGM1OiAweDI1M2MsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDAwYzY6IDB4MDBlMywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREUKKyAgICAweDAwYzc6IDB4MDBjMywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERQorICAgIDB4MDBjODogMHgyNTVhLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICAweDAwYzk6IDB4MjU1NCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICAweDAwY2E6IDB4MjU2OSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDAwY2I6IDB4MjU2NiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjYzogMHgyNTYwLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDAwY2Q6IDB4MjU1MCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorICAgIDB4MDBjZTogMHgyNTZjLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjZjogMHgwMGE0LCAgICAgIyAgQ1VSUkVOQ1kgU0lHTgorICAgIDB4MDBkMDogMHgwMGYwLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEVUSAorICAgIDB4MDBkMTogMHgwMGQwLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRICisgICAgMHgwMGQyOiAweDAwY2EsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBkMzogMHgwMGNiLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworICAgIDB4MDBkNDogMHgwMGM4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFCisgICAgMHgwMGQ1OiAweDIwYWMsICAgICAjICBFVVJPIFNJR04KKyAgICAweDAwZDY6IDB4MDBjZCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURQorICAgIDB4MDBkNzogMHgwMGNlLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwZDg6IDB4MDBjZiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZDk6IDB4MjUxOCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgTEVGVAorICAgIDB4MDBkYTogMHgyNTBjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIFJJR0hUCisgICAgMHgwMGRiOiAweDI1ODgsICAgICAjICBGVUxMIEJMT0NLCisgICAgMHgwMGRjOiAweDI1ODQsICAgICAjICBMT1dFUiBIQUxGIEJMT0NLCisgICAgMHgwMGRkOiAweDAwYTYsICAgICAjICBCUk9LRU4gQkFSCisgICAgMHgwMGRlOiAweDAwY2MsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICAweDAwZGY6IDB4MjU4MCwgICAgICMgIFVQUEVSIEhBTEYgQkxPQ0sKKyAgICAweDAwZTA6IDB4MDBkMywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURQorICAgIDB4MDBlMTogMHgwMGRmLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFMKKyAgICAweDAwZTI6IDB4MDBkNCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMGUzOiAweDAwZDIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkUKKyAgICAweDAwZTQ6IDB4MDBmNSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUKKyAgICAweDAwZTU6IDB4MDBkNSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERQorICAgIDB4MDBlNjogMHgwMGI1LCAgICAgIyAgTUlDUk8gU0lHTgorICAgIDB4MDBlNzogMHgwMGZlLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOCisgICAgMHgwMGU4OiAweDAwZGUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STgorICAgIDB4MDBlOTogMHgwMGRhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgMHgwMGVhOiAweDAwZGIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBlYjogMHgwMGQ5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgMHgwMGVjOiAweDAwZmQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgMHgwMGVkOiAweDAwZGQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEUKKyAgICAweDAwZWU6IDB4MDBhZiwgICAgICMgIE1BQ1JPTgorICAgIDB4MDBlZjogMHgwMGI0LCAgICAgIyAgQUNVVEUgQUNDRU5UCisgICAgMHgwMGYwOiAweDAwYWQsICAgICAjICBTT0ZUIEhZUEhFTgorICAgIDB4MDBmMTogMHgwMGIxLCAgICAgIyAgUExVUy1NSU5VUyBTSUdOCisgICAgMHgwMGYyOiAweDIwMTcsICAgICAjICBET1VCTEUgTE9XIExJTkUKKyAgICAweDAwZjM6IDB4MDBiZSwgICAgICMgIFZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUworICAgIDB4MDBmNDogMHgwMGI2LCAgICAgIyAgUElMQ1JPVyBTSUdOCisgICAgMHgwMGY1OiAweDAwYTcsICAgICAjICBTRUNUSU9OIFNJR04KKyAgICAweDAwZjY6IDB4MDBmNywgICAgICMgIERJVklTSU9OIFNJR04KKyAgICAweDAwZjc6IDB4MDBiOCwgICAgICMgIENFRElMTEEKKyAgICAweDAwZjg6IDB4MDBiMCwgICAgICMgIERFR1JFRSBTSUdOCisgICAgMHgwMGY5OiAweDAwYTgsICAgICAjICBESUFFUkVTSVMKKyAgICAweDAwZmE6IDB4MDBiNywgICAgICMgIE1JRERMRSBET1QKKyAgICAweDAwZmI6IDB4MDBiOSwgICAgICMgIFNVUEVSU0NSSVBUIE9ORQorICAgIDB4MDBmYzogMHgwMGIzLCAgICAgIyAgU1VQRVJTQ1JJUFQgVEhSRUUKKyAgICAweDAwZmQ6IDB4MDBiMiwgICAgICMgIFNVUEVSU0NSSVBUIFRXTworICAgIDB4MDBmZTogMHgyNWEwLCAgICAgIyAgQkxBQ0sgU1FVQVJFCisgICAgMHgwMGZmOiAweDAwYTAsICAgICAjICBOTy1CUkVBSyBTUEFDRQorfSkKKworIyMjIERlY29kaW5nIFRhYmxlCisKK2RlY29kaW5nX3RhYmxlID0gKAorICAgIHUnXHgwMCcgICAgICMgIDB4MDAwMCAtPiBOVUxMCisgICAgdSdceDAxJyAgICAgIyAgMHgwMDAxIC0+IFNUQVJUIE9GIEhFQURJTkcKKyAgICB1J1x4MDInICAgICAjICAweDAwMDIgLT4gU1RBUlQgT0YgVEVYVAorICAgIHUnXHgwMycgICAgICMgIDB4MDAwMyAtPiBFTkQgT0YgVEVYVAorICAgIHUnXHgwNCcgICAgICMgIDB4MDAwNCAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OCisgICAgdSdceDA1JyAgICAgIyAgMHgwMDA1IC0+IEVOUVVJUlkKKyAgICB1J1x4MDYnICAgICAjICAweDAwMDYgLT4gQUNLTk9XTEVER0UKKyAgICB1J1x4MDcnICAgICAjICAweDAwMDcgLT4gQkVMTAorICAgIHUnXHgwOCcgICAgICMgIDB4MDAwOCAtPiBCQUNLU1BBQ0UKKyAgICB1J1x0JyAgICAgICAjICAweDAwMDkgLT4gSE9SSVpPTlRBTCBUQUJVTEFUSU9OCisgICAgdSdcbicgICAgICAgIyAgMHgwMDBhIC0+IExJTkUgRkVFRAorICAgIHUnXHgwYicgICAgICMgIDB4MDAwYiAtPiBWRVJUSUNBTCBUQUJVTEFUSU9OCisgICAgdSdceDBjJyAgICAgIyAgMHgwMDBjIC0+IEZPUk0gRkVFRAorICAgIHUnXHInICAgICAgICMgIDB4MDAwZCAtPiBDQVJSSUFHRSBSRVRVUk4KKyAgICB1J1x4MGUnICAgICAjICAweDAwMGUgLT4gU0hJRlQgT1VUCisgICAgdSdceDBmJyAgICAgIyAgMHgwMDBmIC0+IFNISUZUIElOCisgICAgdSdceDEwJyAgICAgIyAgMHgwMDEwIC0+IERBVEEgTElOSyBFU0NBUEUKKyAgICB1J1x4MTEnICAgICAjICAweDAwMTEgLT4gREVWSUNFIENPTlRST0wgT05FCisgICAgdSdceDEyJyAgICAgIyAgMHgwMDEyIC0+IERFVklDRSBDT05UUk9MIFRXTworICAgIHUnXHgxMycgICAgICMgIDB4MDAxMyAtPiBERVZJQ0UgQ09OVFJPTCBUSFJFRQorICAgIHUnXHgxNCcgICAgICMgIDB4MDAxNCAtPiBERVZJQ0UgQ09OVFJPTCBGT1VSCisgICAgdSdceDE1JyAgICAgIyAgMHgwMDE1IC0+IE5FR0FUSVZFIEFDS05PV0xFREdFCisgICAgdSdceDE2JyAgICAgIyAgMHgwMDE2IC0+IFNZTkNIUk9OT1VTIElETEUKKyAgICB1J1x4MTcnICAgICAjICAweDAwMTcgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSworICAgIHUnXHgxOCcgICAgICMgIDB4MDAxOCAtPiBDQU5DRUwKKyAgICB1J1x4MTknICAgICAjICAweDAwMTkgLT4gRU5EIE9GIE1FRElVTQorICAgIHUnXHgxYScgICAgICMgIDB4MDAxYSAtPiBTVUJTVElUVVRFCisgICAgdSdceDFiJyAgICAgIyAgMHgwMDFiIC0+IEVTQ0FQRQorICAgIHUnXHgxYycgICAgICMgIDB4MDAxYyAtPiBGSUxFIFNFUEFSQVRPUgorICAgIHUnXHgxZCcgICAgICMgIDB4MDAxZCAtPiBHUk9VUCBTRVBBUkFUT1IKKyAgICB1J1x4MWUnICAgICAjICAweDAwMWUgLT4gUkVDT1JEIFNFUEFSQVRPUgorICAgIHUnXHgxZicgICAgICMgIDB4MDAxZiAtPiBVTklUIFNFUEFSQVRPUgorICAgIHUnICcgICAgICAgICMgIDB4MDAyMCAtPiBTUEFDRQorICAgIHUnIScgICAgICAgICMgIDB4MDAyMSAtPiBFWENMQU1BVElPTiBNQVJLCisgICAgdSciJyAgICAgICAgIyAgMHgwMDIyIC0+IFFVT1RBVElPTiBNQVJLCisgICAgdScjJyAgICAgICAgIyAgMHgwMDIzIC0+IE5VTUJFUiBTSUdOCisgICAgdSckJyAgICAgICAgIyAgMHgwMDI0IC0+IERPTExBUiBTSUdOCisgICAgdSclJyAgICAgICAgIyAgMHgwMDI1IC0+IFBFUkNFTlQgU0lHTgorICAgIHUnJicgICAgICAgICMgIDB4MDAyNiAtPiBBTVBFUlNBTkQKKyAgICB1IiciICAgICAgICAjICAweDAwMjcgLT4gQVBPU1RST1BIRQorICAgIHUnKCcgICAgICAgICMgIDB4MDAyOCAtPiBMRUZUIFBBUkVOVEhFU0lTCisgICAgdScpJyAgICAgICAgIyAgMHgwMDI5IC0+IFJJR0hUIFBBUkVOVEhFU0lTCisgICAgdScqJyAgICAgICAgIyAgMHgwMDJhIC0+IEFTVEVSSVNLCisgICAgdScrJyAgICAgICAgIyAgMHgwMDJiIC0+IFBMVVMgU0lHTgorICAgIHUnLCcgICAgICAgICMgIDB4MDAyYyAtPiBDT01NQQorICAgIHUnLScgICAgICAgICMgIDB4MDAyZCAtPiBIWVBIRU4tTUlOVVMKKyAgICB1Jy4nICAgICAgICAjICAweDAwMmUgLT4gRlVMTCBTVE9QCisgICAgdScvJyAgICAgICAgIyAgMHgwMDJmIC0+IFNPTElEVVMKKyAgICB1JzAnICAgICAgICAjICAweDAwMzAgLT4gRElHSVQgWkVSTworICAgIHUnMScgICAgICAgICMgIDB4MDAzMSAtPiBESUdJVCBPTkUKKyAgICB1JzInICAgICAgICAjICAweDAwMzIgLT4gRElHSVQgVFdPCisgICAgdSczJyAgICAgICAgIyAgMHgwMDMzIC0+IERJR0lUIFRIUkVFCisgICAgdSc0JyAgICAgICAgIyAgMHgwMDM0IC0+IERJR0lUIEZPVVIKKyAgICB1JzUnICAgICAgICAjICAweDAwMzUgLT4gRElHSVQgRklWRQorICAgIHUnNicgICAgICAgICMgIDB4MDAzNiAtPiBESUdJVCBTSVgKKyAgICB1JzcnICAgICAgICAjICAweDAwMzcgLT4gRElHSVQgU0VWRU4KKyAgICB1JzgnICAgICAgICAjICAweDAwMzggLT4gRElHSVQgRUlHSFQKKyAgICB1JzknICAgICAgICAjICAweDAwMzkgLT4gRElHSVQgTklORQorICAgIHUnOicgICAgICAgICMgIDB4MDAzYSAtPiBDT0xPTgorICAgIHUnOycgICAgICAgICMgIDB4MDAzYiAtPiBTRU1JQ09MT04KKyAgICB1JzwnICAgICAgICAjICAweDAwM2MgLT4gTEVTUy1USEFOIFNJR04KKyAgICB1Jz0nICAgICAgICAjICAweDAwM2QgLT4gRVFVQUxTIFNJR04KKyAgICB1Jz4nICAgICAgICAjICAweDAwM2UgLT4gR1JFQVRFUi1USEFOIFNJR04KKyAgICB1Jz8nICAgICAgICAjICAweDAwM2YgLT4gUVVFU1RJT04gTUFSSworICAgIHUnQCcgICAgICAgICMgIDB4MDA0MCAtPiBDT01NRVJDSUFMIEFUCisgICAgdSdBJyAgICAgICAgIyAgMHgwMDQxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEKKyAgICB1J0InICAgICAgICAjICAweDAwNDIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorICAgIHUnQycgICAgICAgICMgIDB4MDA0MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgdSdEJyAgICAgICAgIyAgMHgwMDQ0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEQKKyAgICB1J0UnICAgICAgICAjICAweDAwNDUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorICAgIHUnRicgICAgICAgICMgIDB4MDA0NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgdSdHJyAgICAgICAgIyAgMHgwMDQ3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEcKKyAgICB1J0gnICAgICAgICAjICAweDAwNDggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorICAgIHUnSScgICAgICAgICMgIDB4MDA0OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgdSdKJyAgICAgICAgIyAgMHgwMDRhIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICB1J0snICAgICAgICAjICAweDAwNGIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworICAgIHUnTCcgICAgICAgICMgIDB4MDA0YyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgdSdNJyAgICAgICAgIyAgMHgwMDRkIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE0KKyAgICB1J04nICAgICAgICAjICAweDAwNGUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorICAgIHUnTycgICAgICAgICMgIDB4MDA0ZiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgdSdQJyAgICAgICAgIyAgMHgwMDUwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFAKKyAgICB1J1EnICAgICAgICAjICAweDAwNTEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorICAgIHUnUicgICAgICAgICMgIDB4MDA1MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgdSdTJyAgICAgICAgIyAgMHgwMDUzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFMKKyAgICB1J1QnICAgICAgICAjICAweDAwNTQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorICAgIHUnVScgICAgICAgICMgIDB4MDA1NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgdSdWJyAgICAgICAgIyAgMHgwMDU2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFYKKyAgICB1J1cnICAgICAgICAjICAweDAwNTcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworICAgIHUnWCcgICAgICAgICMgIDB4MDA1OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgdSdZJyAgICAgICAgIyAgMHgwMDU5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFkKKyAgICB1J1onICAgICAgICAjICAweDAwNWEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorICAgIHUnWycgICAgICAgICMgIDB4MDA1YiAtPiBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgdSdcXCcgICAgICAgIyAgMHgwMDVjIC0+IFJFVkVSU0UgU09MSURVUworICAgIHUnXScgICAgICAgICMgIDB4MDA1ZCAtPiBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorICAgIHUnXicgICAgICAgICMgIDB4MDA1ZSAtPiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgIHUnXycgICAgICAgICMgIDB4MDA1ZiAtPiBMT1cgTElORQorICAgIHUnYCcgICAgICAgICMgIDB4MDA2MCAtPiBHUkFWRSBBQ0NFTlQKKyAgICB1J2EnICAgICAgICAjICAweDAwNjEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICB1J2InICAgICAgICAjICAweDAwNjIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEIKKyAgICB1J2MnICAgICAgICAjICAweDAwNjMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEMKKyAgICB1J2QnICAgICAgICAjICAweDAwNjQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICB1J2UnICAgICAgICAjICAweDAwNjUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUKKyAgICB1J2YnICAgICAgICAjICAweDAwNjYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAgICB1J2cnICAgICAgICAjICAweDAwNjcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICB1J2gnICAgICAgICAjICAweDAwNjggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEgKKyAgICB1J2knICAgICAgICAjICAweDAwNjkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICB1J2onICAgICAgICAjICAweDAwNmEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICB1J2snICAgICAgICAjICAweDAwNmIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEsKKyAgICB1J2wnICAgICAgICAjICAweDAwNmMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEwKKyAgICB1J20nICAgICAgICAjICAweDAwNmQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICB1J24nICAgICAgICAjICAweDAwNmUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE4KKyAgICB1J28nICAgICAgICAjICAweDAwNmYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8KKyAgICB1J3AnICAgICAgICAjICAweDAwNzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICB1J3EnICAgICAgICAjICAweDAwNzEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFEKKyAgICB1J3InICAgICAgICAjICAweDAwNzIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFIKKyAgICB1J3MnICAgICAgICAjICAweDAwNzMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICB1J3QnICAgICAgICAjICAweDAwNzQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFQKKyAgICB1J3UnICAgICAgICAjICAweDAwNzUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUKKyAgICB1J3YnICAgICAgICAjICAweDAwNzYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICB1J3cnICAgICAgICAjICAweDAwNzcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFcKKyAgICB1J3gnICAgICAgICAjICAweDAwNzggLT4gTEFUSU4gU01BTEwgTEVUVEVSIFgKKyAgICB1J3knICAgICAgICAjICAweDAwNzkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICB1J3onICAgICAgICAjICAweDAwN2EgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFoKKyAgICB1J3snICAgICAgICAjICAweDAwN2IgLT4gTEVGVCBDVVJMWSBCUkFDS0VUCisgICAgdSd8JyAgICAgICAgIyAgMHgwMDdjIC0+IFZFUlRJQ0FMIExJTkUKKyAgICB1J30nICAgICAgICAjICAweDAwN2QgLT4gUklHSFQgQ1VSTFkgQlJBQ0tFVAorICAgIHUnficgICAgICAgICMgIDB4MDA3ZSAtPiBUSUxERQorICAgIHUnXHg3ZicgICAgICMgIDB4MDA3ZiAtPiBERUxFVEUKKyAgICB1J1x4YzcnICAgICAjICAweDAwODAgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICB1J1x4ZmMnICAgICAjICAweDAwODEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKyAgICB1J1x4ZTknICAgICAjICAweDAwODIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgIHUnXHhlMicgICAgICMgIDB4MDA4MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4ZTQnICAgICAjICAweDAwODQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKyAgICB1J1x4ZTAnICAgICAjICAweDAwODUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorICAgIHUnXHhlNScgICAgICMgIDB4MDA4NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICB1J1x4ZTcnICAgICAjICAweDAwODcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgdSdceGVhJyAgICAgIyAgMHgwMDg4IC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhlYicgICAgICMgIDB4MDA4OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworICAgIHUnXHhlOCcgICAgICMgIDB4MDA4YSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFCisgICAgdSdceGVmJyAgICAgIyAgMHgwMDhiIC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgdSdceGVlJyAgICAgIyAgMHgwMDhjIC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhlYycgICAgICMgIDB4MDA4ZCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFCisgICAgdSdceGM0JyAgICAgIyAgMHgwMDhlIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKyAgICB1J1x4YzUnICAgICAjICAweDAwOGYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICB1J1x4YzknICAgICAjICAweDAwOTAgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFCisgICAgdSdceGU2JyAgICAgIyAgMHgwMDkxIC0+IExBVElOIFNNQUxMIExJR0FUVVJFIEFFCisgICAgdSdceGM2JyAgICAgIyAgMHgwMDkyIC0+IExBVElOIENBUElUQUwgTElHQVRVUkUgQUUKKyAgICB1J1x4ZjQnICAgICAjICAweDAwOTMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgdSdceGY2JyAgICAgIyAgMHgwMDk0IC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisgICAgdSdceGYyJyAgICAgIyAgMHgwMDk1IC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkUKKyAgICB1J1x4ZmInICAgICAjICAweDAwOTYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisgICAgdSdceGY5JyAgICAgIyAgMHgwMDk3IC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICB1J1x4ZmYnICAgICAjICAweDAwOTggLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKKyAgICB1J1x4ZDYnICAgICAjICAweDAwOTkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworICAgIHUnXHhkYycgICAgICMgIDB4MDA5YSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgdSdceGY4JyAgICAgIyAgMHgwMDliIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgdSdceGEzJyAgICAgIyAgMHgwMDljIC0+IFBPVU5EIFNJR04KKyAgICB1J1x4ZDgnICAgICAjICAweDAwOWQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorICAgIHUnXHhkNycgICAgICMgIDB4MDA5ZSAtPiBNVUxUSVBMSUNBVElPTiBTSUdOCisgICAgdSdcdTAxOTInICAgIyAgMHgwMDlmIC0+IExBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PSworICAgIHUnXHhlMScgICAgICMgIDB4MDBhMCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgdSdceGVkJyAgICAgIyAgMHgwMGExIC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKyAgICB1J1x4ZjMnICAgICAjICAweDAwYTIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQorICAgIHUnXHhmYScgICAgICMgIDB4MDBhMyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgdSdceGYxJyAgICAgIyAgMHgwMGE0IC0+IExBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICB1J1x4ZDEnICAgICAjICAweDAwYTUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFCisgICAgdSdceGFhJyAgICAgIyAgMHgwMGE2IC0+IEZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgdSdceGJhJyAgICAgIyAgMHgwMGE3IC0+IE1BU0NVTElORSBPUkRJTkFMIElORElDQVRPUgorICAgIHUnXHhiZicgICAgICMgIDB4MDBhOCAtPiBJTlZFUlRFRCBRVUVTVElPTiBNQVJLCisgICAgdSdceGFlJyAgICAgIyAgMHgwMGE5IC0+IFJFR0lTVEVSRUQgU0lHTgorICAgIHUnXHhhYycgICAgICMgIDB4MDBhYSAtPiBOT1QgU0lHTgorICAgIHUnXHhiZCcgICAgICMgIDB4MDBhYiAtPiBWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEYKKyAgICB1J1x4YmMnICAgICAjICAweDAwYWMgLT4gVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSCisgICAgdSdceGExJyAgICAgIyAgMHgwMGFkIC0+IElOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksKKyAgICB1J1x4YWInICAgICAjICAweDAwYWUgLT4gTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICB1J1x4YmInICAgICAjICAweDAwYWYgLT4gUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgdSdcdTI1OTEnICAgIyAgMHgwMGIwIC0+IExJR0hUIFNIQURFCisgICAgdSdcdTI1OTInICAgIyAgMHgwMGIxIC0+IE1FRElVTSBTSEFERQorICAgIHUnXHUyNTkzJyAgICMgIDB4MDBiMiAtPiBEQVJLIFNIQURFCisgICAgdSdcdTI1MDInICAgIyAgMHgwMGIzIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTAorICAgIHUnXHUyNTI0JyAgICMgIDB4MDBiNCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIExFRlQKKyAgICB1J1x4YzEnICAgICAjICAweDAwYjUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgdSdceGMyJyAgICAgIyAgMHgwMGI2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisgICAgdSdceGMwJyAgICAgIyAgMHgwMGI3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRQorICAgIHUnXHhhOScgICAgICMgIDB4MDBiOCAtPiBDT1BZUklHSFQgU0lHTgorICAgIHUnXHUyNTYzJyAgICMgIDB4MDBiOSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgdSdcdTI1NTEnICAgIyAgMHgwMGJhIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICB1J1x1MjU1NycgICAjICAweDAwYmIgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgdSdcdTI1NWQnICAgIyAgMHgwMGJjIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICB1J1x4YTInICAgICAjICAweDAwYmQgLT4gQ0VOVCBTSUdOCisgICAgdSdceGE1JyAgICAgIyAgMHgwMGJlIC0+IFlFTiBTSUdOCisgICAgdSdcdTI1MTAnICAgIyAgMHgwMGJmIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgdSdcdTI1MTQnICAgIyAgMHgwMGMwIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKyAgICB1J1x1MjUzNCcgICAjICAweDAwYzEgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgdSdcdTI1MmMnICAgIyAgMHgwMGMyIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgdSdcdTI1MWMnICAgIyAgMHgwMGMzIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICB1J1x1MjUwMCcgICAjICAweDAwYzQgLT4gQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKyAgICB1J1x1MjUzYycgICAjICAweDAwYzUgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgdSdceGUzJyAgICAgIyAgMHgwMGM2IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREUKKyAgICB1J1x4YzMnICAgICAjICAweDAwYzcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgdSdcdTI1NWEnICAgIyAgMHgwMGM4IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIFJJR0hUCisgICAgdSdcdTI1NTQnICAgIyAgMHgwMGM5IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICB1J1x1MjU2OScgICAjICAweDAwY2EgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgIHUnXHUyNTY2JyAgICMgIDB4MDBjYiAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICB1J1x1MjU2MCcgICAjICAweDAwY2MgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICB1J1x1MjU1MCcgICAjICAweDAwY2QgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMCisgICAgdSdcdTI1NmMnICAgIyAgMHgwMGNlIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICB1J1x4YTQnICAgICAjICAweDAwY2YgLT4gQ1VSUkVOQ1kgU0lHTgorICAgIHUnXHhmMCcgICAgICMgIDB4MDBkMCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRVRICisgICAgdSdceGQwJyAgICAgIyAgMHgwMGQxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEVUSAorICAgIHUnXHhjYScgICAgICMgIDB4MDBkMiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhjYicgICAgICMgIDB4MDBkMyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisgICAgdSdceGM4JyAgICAgIyAgMHgwMGQ0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgIHUnXHUyMGFjJyAgICMgIDB4MDBkNSAtPiBFVVJPIFNJR04KKyAgICB1J1x4Y2QnICAgICAjICAweDAwZDYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgdSdceGNlJyAgICAgIyAgMHgwMGQ3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgdSdceGNmJyAgICAgIyAgMHgwMGQ4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKyAgICB1J1x1MjUxOCcgICAjICAweDAwZDkgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUCisgICAgdSdcdTI1MGMnICAgIyAgMHgwMGRhIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBSSUdIVAorICAgIHUnXHUyNTg4JyAgICMgIDB4MDBkYiAtPiBGVUxMIEJMT0NLCisgICAgdSdcdTI1ODQnICAgIyAgMHgwMGRjIC0+IExPV0VSIEhBTEYgQkxPQ0sKKyAgICB1J1x4YTYnICAgICAjICAweDAwZGQgLT4gQlJPS0VOIEJBUgorICAgIHUnXHhjYycgICAgICMgIDB4MDBkZSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICB1J1x1MjU4MCcgICAjICAweDAwZGYgLT4gVVBQRVIgSEFMRiBCTE9DSworICAgIHUnXHhkMycgICAgICMgIDB4MDBlMCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICB1J1x4ZGYnICAgICAjICAweDAwZTEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFMKKyAgICB1J1x4ZDQnICAgICAjICAweDAwZTIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4ZDInICAgICAjICAweDAwZTMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCisgICAgdSdceGY1JyAgICAgIyAgMHgwMGU0IC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUKKyAgICB1J1x4ZDUnICAgICAjICAweDAwZTUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgdSdceGI1JyAgICAgIyAgMHgwMGU2IC0+IE1JQ1JPIFNJR04KKyAgICB1J1x4ZmUnICAgICAjICAweDAwZTcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOCisgICAgdSdceGRlJyAgICAgIyAgMHgwMGU4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOCisgICAgdSdceGRhJyAgICAgIyAgMHgwMGU5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQorICAgIHUnXHhkYicgICAgICMgIDB4MDBlYSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhkOScgICAgICMgIDB4MDBlYiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICB1J1x4ZmQnICAgICAjICAweDAwZWMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQorICAgIHUnXHhkZCcgICAgICMgIDB4MDBlZCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEUKKyAgICB1J1x4YWYnICAgICAjICAweDAwZWUgLT4gTUFDUk9OCisgICAgdSdceGI0JyAgICAgIyAgMHgwMGVmIC0+IEFDVVRFIEFDQ0VOVAorICAgIHUnXHhhZCcgICAgICMgIDB4MDBmMCAtPiBTT0ZUIEhZUEhFTgorICAgIHUnXHhiMScgICAgICMgIDB4MDBmMSAtPiBQTFVTLU1JTlVTIFNJR04KKyAgICB1J1x1MjAxNycgICAjICAweDAwZjIgLT4gRE9VQkxFIExPVyBMSU5FCisgICAgdSdceGJlJyAgICAgIyAgMHgwMGYzIC0+IFZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUworICAgIHUnXHhiNicgICAgICMgIDB4MDBmNCAtPiBQSUxDUk9XIFNJR04KKyAgICB1J1x4YTcnICAgICAjICAweDAwZjUgLT4gU0VDVElPTiBTSUdOCisgICAgdSdceGY3JyAgICAgIyAgMHgwMGY2IC0+IERJVklTSU9OIFNJR04KKyAgICB1J1x4YjgnICAgICAjICAweDAwZjcgLT4gQ0VESUxMQQorICAgIHUnXHhiMCcgICAgICMgIDB4MDBmOCAtPiBERUdSRUUgU0lHTgorICAgIHUnXHhhOCcgICAgICMgIDB4MDBmOSAtPiBESUFFUkVTSVMKKyAgICB1J1x4YjcnICAgICAjICAweDAwZmEgLT4gTUlERExFIERPVAorICAgIHUnXHhiOScgICAgICMgIDB4MDBmYiAtPiBTVVBFUlNDUklQVCBPTkUKKyAgICB1J1x4YjMnICAgICAjICAweDAwZmMgLT4gU1VQRVJTQ1JJUFQgVEhSRUUKKyAgICB1J1x4YjInICAgICAjICAweDAwZmQgLT4gU1VQRVJTQ1JJUFQgVFdPCisgICAgdSdcdTI1YTAnICAgIyAgMHgwMGZlIC0+IEJMQUNLIFNRVUFSRQorICAgIHUnXHhhMCcgICAgICMgIDB4MDBmZiAtPiBOTy1CUkVBSyBTUEFDRQorKQorCisjIyMgRW5jb2RpbmcgTWFwCisKK2VuY29kaW5nX21hcCA9IHsKKyAgICAweDAwMDA6IDB4MDAwMCwgICAgICMgIE5VTEwKKyAgICAweDAwMDE6IDB4MDAwMSwgICAgICMgIFNUQVJUIE9GIEhFQURJTkcKKyAgICAweDAwMDI6IDB4MDAwMiwgICAgICMgIFNUQVJUIE9GIFRFWFQKKyAgICAweDAwMDM6IDB4MDAwMywgICAgICMgIEVORCBPRiBURVhUCisgICAgMHgwMDA0OiAweDAwMDQsICAgICAjICBFTkQgT0YgVFJBTlNNSVNTSU9OCisgICAgMHgwMDA1OiAweDAwMDUsICAgICAjICBFTlFVSVJZCisgICAgMHgwMDA2OiAweDAwMDYsICAgICAjICBBQ0tOT1dMRURHRQorICAgIDB4MDAwNzogMHgwMDA3LCAgICAgIyAgQkVMTAorICAgIDB4MDAwODogMHgwMDA4LCAgICAgIyAgQkFDS1NQQUNFCisgICAgMHgwMDA5OiAweDAwMDksICAgICAjICBIT1JJWk9OVEFMIFRBQlVMQVRJT04KKyAgICAweDAwMGE6IDB4MDAwYSwgICAgICMgIExJTkUgRkVFRAorICAgIDB4MDAwYjogMHgwMDBiLCAgICAgIyAgVkVSVElDQUwgVEFCVUxBVElPTgorICAgIDB4MDAwYzogMHgwMDBjLCAgICAgIyAgRk9STSBGRUVECisgICAgMHgwMDBkOiAweDAwMGQsICAgICAjICBDQVJSSUFHRSBSRVRVUk4KKyAgICAweDAwMGU6IDB4MDAwZSwgICAgICMgIFNISUZUIE9VVAorICAgIDB4MDAwZjogMHgwMDBmLCAgICAgIyAgU0hJRlQgSU4KKyAgICAweDAwMTA6IDB4MDAxMCwgICAgICMgIERBVEEgTElOSyBFU0NBUEUKKyAgICAweDAwMTE6IDB4MDAxMSwgICAgICMgIERFVklDRSBDT05UUk9MIE9ORQorICAgIDB4MDAxMjogMHgwMDEyLCAgICAgIyAgREVWSUNFIENPTlRST0wgVFdPCisgICAgMHgwMDEzOiAweDAwMTMsICAgICAjICBERVZJQ0UgQ09OVFJPTCBUSFJFRQorICAgIDB4MDAxNDogMHgwMDE0LCAgICAgIyAgREVWSUNFIENPTlRST0wgRk9VUgorICAgIDB4MDAxNTogMHgwMDE1LCAgICAgIyAgTkVHQVRJVkUgQUNLTk9XTEVER0UKKyAgICAweDAwMTY6IDB4MDAxNiwgICAgICMgIFNZTkNIUk9OT1VTIElETEUKKyAgICAweDAwMTc6IDB4MDAxNywgICAgICMgIEVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sKKyAgICAweDAwMTg6IDB4MDAxOCwgICAgICMgIENBTkNFTAorICAgIDB4MDAxOTogMHgwMDE5LCAgICAgIyAgRU5EIE9GIE1FRElVTQorICAgIDB4MDAxYTogMHgwMDFhLCAgICAgIyAgU1VCU1RJVFVURQorICAgIDB4MDAxYjogMHgwMDFiLCAgICAgIyAgRVNDQVBFCisgICAgMHgwMDFjOiAweDAwMWMsICAgICAjICBGSUxFIFNFUEFSQVRPUgorICAgIDB4MDAxZDogMHgwMDFkLCAgICAgIyAgR1JPVVAgU0VQQVJBVE9SCisgICAgMHgwMDFlOiAweDAwMWUsICAgICAjICBSRUNPUkQgU0VQQVJBVE9SCisgICAgMHgwMDFmOiAweDAwMWYsICAgICAjICBVTklUIFNFUEFSQVRPUgorICAgIDB4MDAyMDogMHgwMDIwLCAgICAgIyAgU1BBQ0UKKyAgICAweDAwMjE6IDB4MDAyMSwgICAgICMgIEVYQ0xBTUFUSU9OIE1BUksKKyAgICAweDAwMjI6IDB4MDAyMiwgICAgICMgIFFVT1RBVElPTiBNQVJLCisgICAgMHgwMDIzOiAweDAwMjMsICAgICAjICBOVU1CRVIgU0lHTgorICAgIDB4MDAyNDogMHgwMDI0LCAgICAgIyAgRE9MTEFSIFNJR04KKyAgICAweDAwMjU6IDB4MDAyNSwgICAgICMgIFBFUkNFTlQgU0lHTgorICAgIDB4MDAyNjogMHgwMDI2LCAgICAgIyAgQU1QRVJTQU5ECisgICAgMHgwMDI3OiAweDAwMjcsICAgICAjICBBUE9TVFJPUEhFCisgICAgMHgwMDI4OiAweDAwMjgsICAgICAjICBMRUZUIFBBUkVOVEhFU0lTCisgICAgMHgwMDI5OiAweDAwMjksICAgICAjICBSSUdIVCBQQVJFTlRIRVNJUworICAgIDB4MDAyYTogMHgwMDJhLCAgICAgIyAgQVNURVJJU0sKKyAgICAweDAwMmI6IDB4MDAyYiwgICAgICMgIFBMVVMgU0lHTgorICAgIDB4MDAyYzogMHgwMDJjLCAgICAgIyAgQ09NTUEKKyAgICAweDAwMmQ6IDB4MDAyZCwgICAgICMgIEhZUEhFTi1NSU5VUworICAgIDB4MDAyZTogMHgwMDJlLCAgICAgIyAgRlVMTCBTVE9QCisgICAgMHgwMDJmOiAweDAwMmYsICAgICAjICBTT0xJRFVTCisgICAgMHgwMDMwOiAweDAwMzAsICAgICAjICBESUdJVCBaRVJPCisgICAgMHgwMDMxOiAweDAwMzEsICAgICAjICBESUdJVCBPTkUKKyAgICAweDAwMzI6IDB4MDAzMiwgICAgICMgIERJR0lUIFRXTworICAgIDB4MDAzMzogMHgwMDMzLCAgICAgIyAgRElHSVQgVEhSRUUKKyAgICAweDAwMzQ6IDB4MDAzNCwgICAgICMgIERJR0lUIEZPVVIKKyAgICAweDAwMzU6IDB4MDAzNSwgICAgICMgIERJR0lUIEZJVkUKKyAgICAweDAwMzY6IDB4MDAzNiwgICAgICMgIERJR0lUIFNJWAorICAgIDB4MDAzNzogMHgwMDM3LCAgICAgIyAgRElHSVQgU0VWRU4KKyAgICAweDAwMzg6IDB4MDAzOCwgICAgICMgIERJR0lUIEVJR0hUCisgICAgMHgwMDM5OiAweDAwMzksICAgICAjICBESUdJVCBOSU5FCisgICAgMHgwMDNhOiAweDAwM2EsICAgICAjICBDT0xPTgorICAgIDB4MDAzYjogMHgwMDNiLCAgICAgIyAgU0VNSUNPTE9OCisgICAgMHgwMDNjOiAweDAwM2MsICAgICAjICBMRVNTLVRIQU4gU0lHTgorICAgIDB4MDAzZDogMHgwMDNkLCAgICAgIyAgRVFVQUxTIFNJR04KKyAgICAweDAwM2U6IDB4MDAzZSwgICAgICMgIEdSRUFURVItVEhBTiBTSUdOCisgICAgMHgwMDNmOiAweDAwM2YsICAgICAjICBRVUVTVElPTiBNQVJLCisgICAgMHgwMDQwOiAweDAwNDAsICAgICAjICBDT01NRVJDSUFMIEFUCisgICAgMHgwMDQxOiAweDAwNDEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgMHgwMDQyOiAweDAwNDIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisgICAgMHgwMDQzOiAweDAwNDMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgMHgwMDQ0OiAweDAwNDQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgMHgwMDQ1OiAweDAwNDUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisgICAgMHgwMDQ2OiAweDAwNDYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgMHgwMDQ3OiAweDAwNDcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgMHgwMDQ4OiAweDAwNDgsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBICisgICAgMHgwMDQ5OiAweDAwNDksICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgMHgwMDRhOiAweDAwNGEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgMHgwMDRiOiAweDAwNGIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisgICAgMHgwMDRjOiAweDAwNGMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgMHgwMDRkOiAweDAwNGQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgMHgwMDRlOiAweDAwNGUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisgICAgMHgwMDRmOiAweDAwNGYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgMHgwMDUwOiAweDAwNTAsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgMHgwMDUxOiAweDAwNTEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisgICAgMHgwMDUyOiAweDAwNTIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgMHgwMDUzOiAweDAwNTMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgMHgwMDU0OiAweDAwNTQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisgICAgMHgwMDU1OiAweDAwNTUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgMHgwMDU2OiAweDAwNTYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgMHgwMDU3OiAweDAwNTcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisgICAgMHgwMDU4OiAweDAwNTgsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgMHgwMDU5OiAweDAwNTksICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgMHgwMDVhOiAweDAwNWEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisgICAgMHgwMDViOiAweDAwNWIsICAgICAjICBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgMHgwMDVjOiAweDAwNWMsICAgICAjICBSRVZFUlNFIFNPTElEVVMKKyAgICAweDAwNWQ6IDB4MDA1ZCwgICAgICMgIFJJR0hUIFNRVUFSRSBCUkFDS0VUCisgICAgMHgwMDVlOiAweDAwNWUsICAgICAjICBDSVJDVU1GTEVYIEFDQ0VOVAorICAgIDB4MDA1ZjogMHgwMDVmLCAgICAgIyAgTE9XIExJTkUKKyAgICAweDAwNjA6IDB4MDA2MCwgICAgICMgIEdSQVZFIEFDQ0VOVAorICAgIDB4MDA2MTogMHgwMDYxLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICAweDAwNjI6IDB4MDA2MiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgMHgwMDYzOiAweDAwNjMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQworICAgIDB4MDA2NDogMHgwMDY0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICAweDAwNjU6IDB4MDA2NSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgMHgwMDY2OiAweDAwNjYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRgorICAgIDB4MDA2NzogMHgwMDY3LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICAweDAwNjg6IDB4MDA2OCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBICisgICAgMHgwMDY5OiAweDAwNjksICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSQorICAgIDB4MDA2YTogMHgwMDZhLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAweDAwNmI6IDB4MDA2YiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgMHgwMDZjOiAweDAwNmMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTAorICAgIDB4MDA2ZDogMHgwMDZkLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICAweDAwNmU6IDB4MDA2ZSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgMHgwMDZmOiAweDAwNmYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTworICAgIDB4MDA3MDogMHgwMDcwLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICAweDAwNzE6IDB4MDA3MSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgMHgwMDcyOiAweDAwNzIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUgorICAgIDB4MDA3MzogMHgwMDczLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICAweDAwNzQ6IDB4MDA3NCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgMHgwMDc1OiAweDAwNzUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVQorICAgIDB4MDA3NjogMHgwMDc2LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICAweDAwNzc6IDB4MDA3NywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgMHgwMDc4OiAweDAwNzgsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWAorICAgIDB4MDA3OTogMHgwMDc5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICAweDAwN2E6IDB4MDA3YSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgMHgwMDdiOiAweDAwN2IsICAgICAjICBMRUZUIENVUkxZIEJSQUNLRVQKKyAgICAweDAwN2M6IDB4MDA3YywgICAgICMgIFZFUlRJQ0FMIExJTkUKKyAgICAweDAwN2Q6IDB4MDA3ZCwgICAgICMgIFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICAweDAwN2U6IDB4MDA3ZSwgICAgICMgIFRJTERFCisgICAgMHgwMDdmOiAweDAwN2YsICAgICAjICBERUxFVEUKKyAgICAweDAwYTA6IDB4MDBmZiwgICAgICMgIE5PLUJSRUFLIFNQQUNFCisgICAgMHgwMGExOiAweDAwYWQsICAgICAjICBJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLCisgICAgMHgwMGEyOiAweDAwYmQsICAgICAjICBDRU5UIFNJR04KKyAgICAweDAwYTM6IDB4MDA5YywgICAgICMgIFBPVU5EIFNJR04KKyAgICAweDAwYTQ6IDB4MDBjZiwgICAgICMgIENVUlJFTkNZIFNJR04KKyAgICAweDAwYTU6IDB4MDBiZSwgICAgICMgIFlFTiBTSUdOCisgICAgMHgwMGE2OiAweDAwZGQsICAgICAjICBCUk9LRU4gQkFSCisgICAgMHgwMGE3OiAweDAwZjUsICAgICAjICBTRUNUSU9OIFNJR04KKyAgICAweDAwYTg6IDB4MDBmOSwgICAgICMgIERJQUVSRVNJUworICAgIDB4MDBhOTogMHgwMGI4LCAgICAgIyAgQ09QWVJJR0hUIFNJR04KKyAgICAweDAwYWE6IDB4MDBhNiwgICAgICMgIEZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgMHgwMGFiOiAweDAwYWUsICAgICAjICBMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4MDBhYzogMHgwMGFhLCAgICAgIyAgTk9UIFNJR04KKyAgICAweDAwYWQ6IDB4MDBmMCwgICAgICMgIFNPRlQgSFlQSEVOCisgICAgMHgwMGFlOiAweDAwYTksICAgICAjICBSRUdJU1RFUkVEIFNJR04KKyAgICAweDAwYWY6IDB4MDBlZSwgICAgICMgIE1BQ1JPTgorICAgIDB4MDBiMDogMHgwMGY4LCAgICAgIyAgREVHUkVFIFNJR04KKyAgICAweDAwYjE6IDB4MDBmMSwgICAgICMgIFBMVVMtTUlOVVMgU0lHTgorICAgIDB4MDBiMjogMHgwMGZkLCAgICAgIyAgU1VQRVJTQ1JJUFQgVFdPCisgICAgMHgwMGIzOiAweDAwZmMsICAgICAjICBTVVBFUlNDUklQVCBUSFJFRQorICAgIDB4MDBiNDogMHgwMGVmLCAgICAgIyAgQUNVVEUgQUNDRU5UCisgICAgMHgwMGI1OiAweDAwZTYsICAgICAjICBNSUNSTyBTSUdOCisgICAgMHgwMGI2OiAweDAwZjQsICAgICAjICBQSUxDUk9XIFNJR04KKyAgICAweDAwYjc6IDB4MDBmYSwgICAgICMgIE1JRERMRSBET1QKKyAgICAweDAwYjg6IDB4MDBmNywgICAgICMgIENFRElMTEEKKyAgICAweDAwYjk6IDB4MDBmYiwgICAgICMgIFNVUEVSU0NSSVBUIE9ORQorICAgIDB4MDBiYTogMHgwMGE3LCAgICAgIyAgTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgMHgwMGJiOiAweDAwYWYsICAgICAjICBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDAwYmM6IDB4MDBhYywgICAgICMgIFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgorICAgIDB4MDBiZDogMHgwMGFiLCAgICAgIyAgVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCisgICAgMHgwMGJlOiAweDAwZjMsICAgICAjICBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMKKyAgICAweDAwYmY6IDB4MDBhOCwgICAgICMgIElOVkVSVEVEIFFVRVNUSU9OIE1BUksKKyAgICAweDAwYzA6IDB4MDBiNywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRQorICAgIDB4MDBjMTogMHgwMGI1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgMHgwMGMyOiAweDAwYjYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBjMzogMHgwMGM3LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgMHgwMGM0OiAweDAwOGUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgMHgwMGM1OiAweDAwOGYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorICAgIDB4MDBjNjogMHgwMDkyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBBRQorICAgIDB4MDBjNzogMHgwMDgwLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICAweDAwYzg6IDB4MDBkNCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgIDB4MDBjOTogMHgwMDkwLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFCisgICAgMHgwMGNhOiAweDAwZDIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBjYjogMHgwMGQzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworICAgIDB4MDBjYzogMHgwMGRlLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFCisgICAgMHgwMGNkOiAweDAwZDYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEUKKyAgICAweDAwY2U6IDB4MDBkNywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMGNmOiAweDAwZDgsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgMHgwMGQwOiAweDAwZDEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEgKKyAgICAweDAwZDE6IDB4MDBhNSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgIDB4MDBkMjogMHgwMGUzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCisgICAgMHgwMGQzOiAweDAwZTAsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICAweDAwZDQ6IDB4MDBlMiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMGQ1OiAweDAwZTUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUKKyAgICAweDAwZDY6IDB4MDA5OSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZDc6IDB4MDA5ZSwgICAgICMgIE1VTFRJUExJQ0FUSU9OIFNJR04KKyAgICAweDAwZDg6IDB4MDA5ZCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKyAgICAweDAwZDk6IDB4MDBlYiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQorICAgIDB4MDBkYTogMHgwMGU5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgMHgwMGRiOiAweDAwZWEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBkYzogMHgwMDlhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworICAgIDB4MDBkZDogMHgwMGVkLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgMHgwMGRlOiAweDAwZTgsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STgorICAgIDB4MDBkZjogMHgwMGUxLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFMKKyAgICAweDAwZTA6IDB4MDA4NSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICAweDAwZTE6IDB4MDBhMCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUKKyAgICAweDAwZTI6IDB4MDA4MywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBlMzogMHgwMGM2LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERQorICAgIDB4MDBlNDogMHgwMDg0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZTU6IDB4MDA4NiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorICAgIDB4MDBlNjogMHgwMDkxLCAgICAgIyAgTEFUSU4gU01BTEwgTElHQVRVUkUgQUUKKyAgICAweDAwZTc6IDB4MDA4NywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorICAgIDB4MDBlODogMHgwMDhhLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgIDB4MDBlOTogMHgwMDgyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgIDB4MDBlYTogMHgwMDg4LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMGViOiAweDAwODksICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworICAgIDB4MDBlYzogMHgwMDhkLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgIDB4MDBlZDogMHgwMGExLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURQorICAgIDB4MDBlZTogMHgwMDhjLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMGVmOiAweDAwOGIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgIDB4MDBmMDogMHgwMGQwLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEVUSAorICAgIDB4MDBmMTogMHgwMGE0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgIDB4MDBmMjogMHgwMDk1LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgIDB4MDBmMzogMHgwMGEyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQorICAgIDB4MDBmNDogMHgwMDkzLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMGY1OiAweDAwZTQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgMHgwMGY2OiAweDAwOTQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworICAgIDB4MDBmNzogMHgwMGY2LCAgICAgIyAgRElWSVNJT04gU0lHTgorICAgIDB4MDBmODogMHgwMDliLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKyAgICAweDAwZjk6IDB4MDA5NywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAweDAwZmE6IDB4MDBhMywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEUKKyAgICAweDAwZmI6IDB4MDA5NiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBmYzogMHgwMDgxLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZmQ6IDB4MDBlYywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUKKyAgICAweDAwZmU6IDB4MDBlNywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBUSE9STgorICAgIDB4MDBmZjogMHgwMDk4LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKKyAgICAweDIwYWM6IDB4MDBkNSwgICAgICMgIEVVUk8gU0lHTgorICAgIDB4MDE5MjogMHgwMDlmLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LCisgICAgMHgyMDE3OiAweDAwZjIsICAgICAjICBET1VCTEUgTE9XIExJTkUKKyAgICAweDI1MDA6IDB4MDBjNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCisgICAgMHgyNTAyOiAweDAwYjMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKyAgICAweDI1MGM6IDB4MDBkYSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBSSUdIVAorICAgIDB4MjUxMDogMHgwMGJmLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKKyAgICAweDI1MTQ6IDB4MDBjMCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKyAgICAweDI1MTg6IDB4MDBkOSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgTEVGVAorICAgIDB4MjUxYzogMHgwMGMzLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MjUyNDogMHgwMGI0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgyNTJjOiAweDAwYzIsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjUzNDogMHgwMGMxLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTNjOiAweDAwYzUsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDI1NTA6IDB4MDBjZCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorICAgIDB4MjU1MTogMHgwMGJhLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTAorICAgIDB4MjU1NDogMHgwMGM5LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBSSUdIVAorICAgIDB4MjU1NzogMHgwMGJiLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgMHgyNTVhOiAweDAwYzgsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVAorICAgIDB4MjU1ZDogMHgwMGJjLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVAorICAgIDB4MjU2MDogMHgwMGNjLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDI1NjM6IDB4MDBiOSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDI1NjY6IDB4MDBjYiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU2OTogMHgwMGNhLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU2YzogMHgwMGNlLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU4MDogMHgwMGRmLCAgICAgIyAgVVBQRVIgSEFMRiBCTE9DSworICAgIDB4MjU4NDogMHgwMGRjLCAgICAgIyAgTE9XRVIgSEFMRiBCTE9DSworICAgIDB4MjU4ODogMHgwMGRiLCAgICAgIyAgRlVMTCBCTE9DSworICAgIDB4MjU5MTogMHgwMGIwLCAgICAgIyAgTElHSFQgU0hBREUKKyAgICAweDI1OTI6IDB4MDBiMSwgICAgICMgIE1FRElVTSBTSEFERQorICAgIDB4MjU5MzogMHgwMGIyLCAgICAgIyAgREFSSyBTSEFERQorICAgIDB4MjVhMDogMHgwMGZlLCAgICAgIyAgQkxBQ0sgU1FVQVJFCit9CmRpZmYgLS1naXQgYS9MaWIvZmlsZWNtcC5weSBiL0xpYi9maWxlY21wLnB5CmluZGV4IDBiN2NlMTYuLjg5YTQ4MzUgMTAwNjQ0Ci0tLSBhL0xpYi9maWxlY21wLnB5CisrKyBiL0xpYi9maWxlY21wLnB5CkBAIC02MiwxNSArNjIsMTQgQEAKIAogZGVmIF9kb19jbXAoZjEsIGYyKToKICAgICBidWZzaXplID0gQlVGU0laRQotICAgIGZwMSA9IG9wZW4oZjEsICdyYicpCi0gICAgZnAyID0gb3BlbihmMiwgJ3JiJykKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBiMSA9IGZwMS5yZWFkKGJ1ZnNpemUpCi0gICAgICAgIGIyID0gZnAyLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgaWYgYjEgIT0gYjI6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgbm90IGIxOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICB3aXRoIG9wZW4oZjEsICdyYicpIGFzIGZwMSwgb3BlbihmMiwgJ3JiJykgYXMgZnAyOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYjEgPSBmcDEucmVhZChidWZzaXplKQorICAgICAgICAgICAgYjIgPSBmcDIucmVhZChidWZzaXplKQorICAgICAgICAgICAgaWYgYjEgIT0gYjI6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBpZiBub3QgYjE6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogIyBEaXJlY3RvcnkgY29tcGFyaXNvbiBjbGFzcy4KICMKZGlmZiAtLWdpdCBhL0xpYi9mcmFjdGlvbnMucHkgYi9MaWIvZnJhY3Rpb25zLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggMmQ2ZjY3Mi4uYTBkODZhNAotLS0gYS9MaWIvZnJhY3Rpb25zLnB5CisrKyBiL0xpYi9mcmFjdGlvbnMucHkKQEAgLTQsNiArNCw3IEBACiAiIiJSYXRpb25hbCwgaW5maW5pdGUtcHJlY2lzaW9uLCByZWFsIG51bWJlcnMuIiIiCiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KK2Zyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAogaW1wb3J0IG1hdGgKIGltcG9ydCBudW1iZXJzCiBpbXBvcnQgb3BlcmF0b3IKQEAgLTMwLDc0ICszMSwxMzUgQEAKICAgICAoP1A8c2lnbj5bLStdPykgICAgICAgICAgICAjIGFuIG9wdGlvbmFsIHNpZ24sIHRoZW4KICAgICAoPz1cZHxcLlxkKSAgICAgICAgICAgICAgICAjIGxvb2thaGVhZCBmb3IgZGlnaXQgb3IgLmRpZ2l0CiAgICAgKD9QPG51bT5cZCopICAgICAgICAgICAgICAgIyBudW1lcmF0b3IgKHBvc3NpYmx5IGVtcHR5KQotICAgICg/OiAgICAgICAgICAgICAgICAgICAgICAgICMgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwKLSAgICAgICAvKD9QPGRlbm9tPlxkKykgICAgICAgICAjIC8gYW5kIGRlbm9taW5hdG9yCisgICAgKD86ICAgICAgICAgICAgICAgICAgICAgICAgIyBmb2xsb3dlZCBieQorICAgICAgICg/Oi8oP1A8ZGVub20+XGQrKSk/ICAgICMgYW4gb3B0aW9uYWwgZGVub21pbmF0b3IKICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yCi0gICAgICAgXC4oP1A8ZGVjaW1hbD5cZCopICAgICAgIyBkZWNpbWFsIHBvaW50IGFuZCBmcmFjdGlvbmFsIHBhcnQKLSAgICApPworICAgICAgICg/OlwuKD9QPGRlY2ltYWw+XGQqKSk/ICMgYW4gb3B0aW9uYWwgZnJhY3Rpb25hbCBwYXJ0CisgICAgICAgKD86RSg/UDxleHA+Wy0rXT9cZCspKT8gIyBhbmQgb3B0aW9uYWwgZXhwb25lbnQKKyAgICApCiAgICAgXHMqXFogICAgICAgICAgICAgICAgICAgICAgIyBhbmQgb3B0aW9uYWwgd2hpdGVzcGFjZSB0byBmaW5pc2gKLSIiIiwgcmUuVkVSQk9TRSkKKyIiIiwgcmUuVkVSQk9TRSB8IHJlLklHTk9SRUNBU0UpCiAKIAogY2xhc3MgRnJhY3Rpb24oUmF0aW9uYWwpOgogICAgICIiIlRoaXMgY2xhc3MgaW1wbGVtZW50cyByYXRpb25hbCBudW1iZXJzLgogCi0gICAgRnJhY3Rpb24oOCwgNikgd2lsbCBwcm9kdWNlIGEgcmF0aW9uYWwgbnVtYmVyIGVxdWl2YWxlbnQgdG8KLSAgICA0LzMuIEJvdGggYXJndW1lbnRzIG11c3QgYmUgSW50ZWdyYWwuIFRoZSBudW1lcmF0b3IgZGVmYXVsdHMgdG8gMAotICAgIGFuZCB0aGUgZGVub21pbmF0b3IgZGVmYXVsdHMgdG8gMSBzbyB0aGF0IEZyYWN0aW9uKDMpID09IDMgYW5kCi0gICAgRnJhY3Rpb24oKSA9PSAwLgorICAgIEluIHRoZSB0d28tYXJndW1lbnQgZm9ybSBvZiB0aGUgY29uc3RydWN0b3IsIEZyYWN0aW9uKDgsIDYpIHdpbGwKKyAgICBwcm9kdWNlIGEgcmF0aW9uYWwgbnVtYmVyIGVxdWl2YWxlbnQgdG8gNC8zLiBCb3RoIGFyZ3VtZW50cyBtdXN0CisgICAgYmUgUmF0aW9uYWwuIFRoZSBudW1lcmF0b3IgZGVmYXVsdHMgdG8gMCBhbmQgdGhlIGRlbm9taW5hdG9yCisgICAgZGVmYXVsdHMgdG8gMSBzbyB0aGF0IEZyYWN0aW9uKDMpID09IDMgYW5kIEZyYWN0aW9uKCkgPT0gMC4KIAotICAgIEZyYWN0aW9ucyBjYW4gYWxzbyBiZSBjb25zdHJ1Y3RlZCBmcm9tIHN0cmluZ3Mgb2YgdGhlIGZvcm0KLSAgICAnWy0rXT9bMC05XSsoKC98LilbMC05XSspPycsIG9wdGlvbmFsbHkgc3Vycm91bmRlZCBieSBzcGFjZXMuCisgICAgRnJhY3Rpb25zIGNhbiBhbHNvIGJlIGNvbnN0cnVjdGVkIGZyb206CisKKyAgICAgIC0gbnVtZXJpYyBzdHJpbmdzIHNpbWlsYXIgdG8gdGhvc2UgYWNjZXB0ZWQgYnkgdGhlCisgICAgICAgIGZsb2F0IGNvbnN0cnVjdG9yIChmb3IgZXhhbXBsZSwgJy0yLjMnIG9yICcxZTEwJykKKworICAgICAgLSBzdHJpbmdzIG9mIHRoZSBmb3JtICcxMjMvNDU2JworCisgICAgICAtIGZsb2F0IGFuZCBEZWNpbWFsIGluc3RhbmNlcworCisgICAgICAtIG90aGVyIFJhdGlvbmFsIGluc3RhbmNlcyAoaW5jbHVkaW5nIGludGVnZXJzKQogCiAgICAgIiIiCiAKICAgICBfX3Nsb3RzX18gPSAoJ19udW1lcmF0b3InLCAnX2Rlbm9taW5hdG9yJykKIAogICAgICMgV2UncmUgaW1tdXRhYmxlLCBzbyB1c2UgX19uZXdfXyBub3QgX19pbml0X18KLSAgICBkZWYgX19uZXdfXyhjbHMsIG51bWVyYXRvcj0wLCBkZW5vbWluYXRvcj0xKToKKyAgICBkZWYgX19uZXdfXyhjbHMsIG51bWVyYXRvcj0wLCBkZW5vbWluYXRvcj1Ob25lKToKICAgICAgICAgIiIiQ29uc3RydWN0cyBhIEZyYWN0aW9uLgogCi0gICAgICAgIFRha2VzIGEgc3RyaW5nIGxpa2UgJzMvMicgb3IgJzEuNScsIGFub3RoZXIgRnJhY3Rpb24sIG9yIGEKLSAgICAgICAgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHBhaXIuCisgICAgICAgIFRha2VzIGEgc3RyaW5nIGxpa2UgJzMvMicgb3IgJzEuNScsIGFub3RoZXIgUmF0aW9uYWwgaW5zdGFuY2UsIGEKKyAgICAgICAgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHBhaXIsIG9yIGEgZmxvYXQuCisKKyAgICAgICAgRXhhbXBsZXMKKyAgICAgICAgLS0tLS0tLS0KKworICAgICAgICA+Pj4gRnJhY3Rpb24oMTAsIC04KQorICAgICAgICBGcmFjdGlvbigtNSwgNCkKKyAgICAgICAgPj4+IEZyYWN0aW9uKEZyYWN0aW9uKDEsIDcpLCA1KQorICAgICAgICBGcmFjdGlvbigxLCAzNSkKKyAgICAgICAgPj4+IEZyYWN0aW9uKEZyYWN0aW9uKDEsIDcpLCBGcmFjdGlvbigyLCAzKSkKKyAgICAgICAgRnJhY3Rpb24oMywgMTQpCisgICAgICAgID4+PiBGcmFjdGlvbignMzE0JykKKyAgICAgICAgRnJhY3Rpb24oMzE0LCAxKQorICAgICAgICA+Pj4gRnJhY3Rpb24oJy0zNS80JykKKyAgICAgICAgRnJhY3Rpb24oLTM1LCA0KQorICAgICAgICA+Pj4gRnJhY3Rpb24oJzMuMTQxNScpICMgY29udmVyc2lvbiBmcm9tIG51bWVyaWMgc3RyaW5nCisgICAgICAgIEZyYWN0aW9uKDYyODMsIDIwMDApCisgICAgICAgID4+PiBGcmFjdGlvbignLTQ3ZS0yJykgIyBzdHJpbmcgbWF5IGluY2x1ZGUgYSBkZWNpbWFsIGV4cG9uZW50CisgICAgICAgIEZyYWN0aW9uKC00NywgMTAwKQorICAgICAgICA+Pj4gRnJhY3Rpb24oMS40NykgICMgZGlyZWN0IGNvbnN0cnVjdGlvbiBmcm9tIGZsb2F0IChleGFjdCBjb252ZXJzaW9uKQorICAgICAgICBGcmFjdGlvbig2NjIwMjkxNDUyMjM0NjI5LCA0NTAzNTk5NjI3MzcwNDk2KQorICAgICAgICA+Pj4gRnJhY3Rpb24oMi4yNSkKKyAgICAgICAgRnJhY3Rpb24oOSwgNCkKKyAgICAgICAgPj4+IEZyYWN0aW9uKERlY2ltYWwoJzEuNDcnKSkKKyAgICAgICAgRnJhY3Rpb24oMTQ3LCAxMDApCiAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYgPSBzdXBlcihGcmFjdGlvbiwgY2xzKS5fX25ld19fKGNscykKIAotICAgICAgICBpZiB0eXBlKG51bWVyYXRvcikgbm90IGluIChpbnQsIGxvbmcpIGFuZCBkZW5vbWluYXRvciA9PSAxOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShudW1lcmF0b3IsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgICMgSGFuZGxlIGNvbnN0cnVjdGlvbiBmcm9tIHN0cmluZ3MuCi0gICAgICAgICAgICAgICAgaW5wdXQgPSBudW1lcmF0b3IKLSAgICAgICAgICAgICAgICBtID0gX1JBVElPTkFMX0ZPUk1BVC5tYXRjaChpbnB1dCkKLSAgICAgICAgICAgICAgICBpZiBtIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgbGl0ZXJhbCBmb3IgRnJhY3Rpb246ICVyJyAlIGlucHV0KQotICAgICAgICAgICAgICAgIG51bWVyYXRvciA9IG0uZ3JvdXAoJ251bScpCi0gICAgICAgICAgICAgICAgZGVjaW1hbCA9IG0uZ3JvdXAoJ2RlY2ltYWwnKQotICAgICAgICAgICAgICAgIGlmIGRlY2ltYWw6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhlIGxpdGVyYWwgaXMgYSBkZWNpbWFsIG51bWJlci4KLSAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yID0gaW50KG51bWVyYXRvciArIGRlY2ltYWwpCi0gICAgICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yID0gMTAqKmxlbihkZWNpbWFsKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhlIGxpdGVyYWwgaXMgYW4gaW50ZWdlciBvciBmcmFjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yID0gaW50KG51bWVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgIyBEZWZhdWx0IGRlbm9taW5hdG9yIHRvIDEuCi0gICAgICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yID0gaW50KG0uZ3JvdXAoJ2Rlbm9tJykgb3IgMSkKKyAgICAgICAgaWYgZGVub21pbmF0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobnVtZXJhdG9yLCBSYXRpb25hbCk6CisgICAgICAgICAgICAgICAgc2VsZi5fbnVtZXJhdG9yID0gbnVtZXJhdG9yLm51bWVyYXRvcgorICAgICAgICAgICAgICAgIHNlbGYuX2Rlbm9taW5hdG9yID0gbnVtZXJhdG9yLmRlbm9taW5hdG9yCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKIAorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG51bWVyYXRvciwgZmxvYXQpOgorICAgICAgICAgICAgICAgICMgRXhhY3QgY29udmVyc2lvbiBmcm9tIGZsb2F0CisgICAgICAgICAgICAgICAgdmFsdWUgPSBGcmFjdGlvbi5mcm9tX2Zsb2F0KG51bWVyYXRvcikKKyAgICAgICAgICAgICAgICBzZWxmLl9udW1lcmF0b3IgPSB2YWx1ZS5fbnVtZXJhdG9yCisgICAgICAgICAgICAgICAgc2VsZi5fZGVub21pbmF0b3IgPSB2YWx1ZS5fZGVub21pbmF0b3IKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UobnVtZXJhdG9yLCBEZWNpbWFsKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IEZyYWN0aW9uLmZyb21fZGVjaW1hbChudW1lcmF0b3IpCisgICAgICAgICAgICAgICAgc2VsZi5fbnVtZXJhdG9yID0gdmFsdWUuX251bWVyYXRvcgorICAgICAgICAgICAgICAgIHNlbGYuX2Rlbm9taW5hdG9yID0gdmFsdWUuX2Rlbm9taW5hdG9yCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG51bWVyYXRvciwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgIyBIYW5kbGUgY29uc3RydWN0aW9uIGZyb20gc3RyaW5ncy4KKyAgICAgICAgICAgICAgICBtID0gX1JBVElPTkFMX0ZPUk1BVC5tYXRjaChudW1lcmF0b3IpCisgICAgICAgICAgICAgICAgaWYgbSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAlcicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvcikKKyAgICAgICAgICAgICAgICBudW1lcmF0b3IgPSBpbnQobS5ncm91cCgnbnVtJykgb3IgJzAnKQorICAgICAgICAgICAgICAgIGRlbm9tID0gbS5ncm91cCgnZGVub20nKQorICAgICAgICAgICAgICAgIGlmIGRlbm9tOgorICAgICAgICAgICAgICAgICAgICBkZW5vbWluYXRvciA9IGludChkZW5vbSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkZW5vbWluYXRvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IG0uZ3JvdXAoJ2RlY2ltYWwnKQorICAgICAgICAgICAgICAgICAgICBpZiBkZWNpbWFsOgorICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSAxMCoqbGVuKGRlY2ltYWwpCisgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3IgPSBudW1lcmF0b3IgKiBzY2FsZSArIGludChkZWNpbWFsKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVub21pbmF0b3IgKj0gc2NhbGUKKyAgICAgICAgICAgICAgICAgICAgZXhwID0gbS5ncm91cCgnZXhwJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhwOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwID0gaW50KGV4cCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4cCA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciAqPSAxMCoqZXhwCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yICo9IDEwKiotZXhwCiAgICAgICAgICAgICAgICAgaWYgbS5ncm91cCgnc2lnbicpID09ICctJzoKICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yID0gLW51bWVyYXRvcgogCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UobnVtZXJhdG9yLCBSYXRpb25hbCk6Ci0gICAgICAgICAgICAgICAgIyBIYW5kbGUgY29waWVzIGZyb20gb3RoZXIgcmF0aW9uYWxzLiBJbnRlZ3JhbHMgZ2V0Ci0gICAgICAgICAgICAgICAgIyBjYXVnaHQgaGVyZSB0b28sIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBiZWNhdXNlCi0gICAgICAgICAgICAgICAgIyBkZW5vbWluYXRvciBpcyBhbHJlYWR5IDEuCi0gICAgICAgICAgICAgICAgb3RoZXJfcmF0aW9uYWwgPSBudW1lcmF0b3IKLSAgICAgICAgICAgICAgICBudW1lcmF0b3IgPSBvdGhlcl9yYXRpb25hbC5udW1lcmF0b3IKLSAgICAgICAgICAgICAgICBkZW5vbWluYXRvciA9IG90aGVyX3JhdGlvbmFsLmRlbm9taW5hdG9yCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yIGEgUmF0aW9uYWwgaW5zdGFuY2UiKQorCisgICAgICAgIGVsaWYgKGlzaW5zdGFuY2UobnVtZXJhdG9yLCBSYXRpb25hbCkgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKGRlbm9taW5hdG9yLCBSYXRpb25hbCkpOgorICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciA9ICgKKyAgICAgICAgICAgICAgICBudW1lcmF0b3IubnVtZXJhdG9yICogZGVub21pbmF0b3IuZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgZGVub21pbmF0b3IubnVtZXJhdG9yICogbnVtZXJhdG9yLmRlbm9taW5hdG9yCisgICAgICAgICAgICAgICAgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJib3RoIGFyZ3VtZW50cyBzaG91bGQgYmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYXRpb25hbCBpbnN0YW5jZXMiKQogCiAgICAgICAgIGlmIGRlbm9taW5hdG9yID09IDA6CiAgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcignRnJhY3Rpb24oJXMsIDApJyAlIG51bWVyYXRvcikKLSAgICAgICAgbnVtZXJhdG9yID0gb3BlcmF0b3IuaW5kZXgobnVtZXJhdG9yKQotICAgICAgICBkZW5vbWluYXRvciA9IG9wZXJhdG9yLmluZGV4KGRlbm9taW5hdG9yKQogICAgICAgICBnID0gZ2NkKG51bWVyYXRvciwgZGVub21pbmF0b3IpCiAgICAgICAgIHNlbGYuX251bWVyYXRvciA9IG51bWVyYXRvciAvLyBnCiAgICAgICAgIHNlbGYuX2Rlbm9taW5hdG9yID0gZGVub21pbmF0b3IgLy8gZwpAQCAtNDcwLDU0ICs1MzIsNTggQEAKICAgICAgICAgaWYgaXNpbnN0YW5jZShiLCBudW1iZXJzLkNvbXBsZXgpIGFuZCBiLmltYWcgPT0gMDoKICAgICAgICAgICAgIGIgPSBiLnJlYWwKICAgICAgICAgaWYgaXNpbnN0YW5jZShiLCBmbG9hdCk6Ci0gICAgICAgICAgICByZXR1cm4gYSA9PSBhLmZyb21fZmxvYXQoYikKKyAgICAgICAgICAgIGlmIG1hdGguaXNuYW4oYikgb3IgbWF0aC5pc2luZihiKToKKyAgICAgICAgICAgICAgICAjIGNvbXBhcmlzb25zIHdpdGggYW4gaW5maW5pdHkgb3IgbmFuIHNob3VsZCBiZWhhdmUgaW4KKyAgICAgICAgICAgICAgICAjIHRoZSBzYW1lIHdheSBmb3IgYW55IGZpbml0ZSBhLCBzbyB0cmVhdCBhIGFzIHplcm8uCisgICAgICAgICAgICAgICAgcmV0dXJuIDAuMCA9PSBiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBhID09IGEuZnJvbV9mbG9hdChiKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBYWFg6IElmIGIuX19lcV9fIGlzIGltcGxlbWVudGVkIGxpa2UgdGhpcyBtZXRob2QsIGl0IG1heQotICAgICAgICAgICAgIyBnaXZlIHRoZSB3cm9uZyBhbnN3ZXIgYWZ0ZXIgZmxvYXQoYSkgY2hhbmdlcyBhJ3MKLSAgICAgICAgICAgICMgdmFsdWUuIEJldHRlciB3YXlzIG9mIGRvaW5nIHRoaXMgYXJlIHdlbGNvbWUuCi0gICAgICAgICAgICByZXR1cm4gZmxvYXQoYSkgPT0gYgorICAgICAgICAgICAgIyBTaW5jZSBhIGRvZXNuJ3Qga25vdyBob3cgdG8gY29tcGFyZSB3aXRoIGIsIGxldCdzIGdpdmUgYgorICAgICAgICAgICAgIyBhIGNoYW5jZSB0byBjb21wYXJlIGl0c2VsZiB3aXRoIGEuCisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAotICAgIGRlZiBfc3VidHJhY3RBbmRDb21wYXJlVG9aZXJvKGEsIGIsIG9wKToKLSAgICAgICAgIiIiSGVscGVyIGZ1bmN0aW9uIGZvciBjb21wYXJpc29uIG9wZXJhdG9ycy4KKyAgICBkZWYgX3JpY2hjbXAoc2VsZiwgb3RoZXIsIG9wKToKKyAgICAgICAgIiIiSGVscGVyIGZvciBjb21wYXJpc29uIG9wZXJhdG9ycywgZm9yIGludGVybmFsIHVzZSBvbmx5LgogCi0gICAgICAgIFN1YnRyYWN0cyBiIGZyb20gYSwgZXhhY3RseSBpZiBwb3NzaWJsZSwgYW5kIGNvbXBhcmVzIHRoZQotICAgICAgICByZXN1bHQgd2l0aCAwIHVzaW5nIG9wLCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGNvbXBhcmlzb24KLSAgICAgICAgd29uJ3QgcmVjdXJzZS4gSWYgdGhlIGRpZmZlcmVuY2UgcmFpc2VzIGEgVHlwZUVycm9yLCByZXR1cm5zCi0gICAgICAgIE5vdEltcGxlbWVudGVkIGluc3RlYWQuCisgICAgICAgIEltcGxlbWVudCBjb21wYXJpc29uIGJldHdlZW4gYSBSYXRpb25hbCBpbnN0YW5jZSBgc2VsZmAsIGFuZAorICAgICAgICBlaXRoZXIgYW5vdGhlciBSYXRpb25hbCBpbnN0YW5jZSBvciBhIGZsb2F0IGBvdGhlcmAuICBJZgorICAgICAgICBgb3RoZXJgIGlzIG5vdCBhIFJhdGlvbmFsIGluc3RhbmNlIG9yIGEgZmxvYXQsIHJldHVybgorICAgICAgICBOb3RJbXBsZW1lbnRlZC4gYG9wYCBzaG91bGQgYmUgb25lIG9mIHRoZSBzaXggc3RhbmRhcmQKKyAgICAgICAgY29tcGFyaXNvbiBvcGVyYXRvcnMuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoYiwgbnVtYmVycy5Db21wbGV4KSBhbmQgYi5pbWFnID09IDA6Ci0gICAgICAgICAgICBiID0gYi5yZWFsCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoYiwgZmxvYXQpOgotICAgICAgICAgICAgYiA9IGEuZnJvbV9mbG9hdChiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIFhYWDogSWYgYiA8OiBSZWFsIGJ1dCBub3QgPDogUmF0aW9uYWwsIHRoaXMgaXMgbGlrZWx5Ci0gICAgICAgICAgICAjIHRvIGZhbGwgYmFjayB0byBhIGZsb2F0LiBJZiB0aGUgYWN0dWFsIHZhbHVlcyBkaWZmZXIgYnkKLSAgICAgICAgICAgICMgbGVzcyB0aGFuIE1JTl9GTE9BVCwgdGhpcyBjb3VsZCBmYWxzZWx5IGNhbGwgdGhlbSBlcXVhbCwKLSAgICAgICAgICAgICMgd2hpY2ggd291bGQgbWFrZSA8PSBpbmNvbnNpc3RlbnQgd2l0aCA9PS4gQmV0dGVyIHdheXMgb2YKLSAgICAgICAgICAgICMgZG9pbmcgdGhpcyBhcmUgd2VsY29tZS4KLSAgICAgICAgICAgIGRpZmYgPSBhIC0gYgotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAjIGNvbnZlcnQgb3RoZXIgdG8gYSBSYXRpb25hbCBpbnN0YW5jZSB3aGVyZSByZWFzb25hYmxlLgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBSYXRpb25hbCk6CisgICAgICAgICAgICByZXR1cm4gb3Aoc2VsZi5fbnVtZXJhdG9yICogb3RoZXIuZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVub21pbmF0b3IgKiBvdGhlci5udW1lcmF0b3IpCisgICAgICAgICMgY29tcGFyaXNvbnMgd2l0aCBjb21wbGV4IHNob3VsZCByYWlzZSBhIFR5cGVFcnJvciwgZm9yIGNvbnNpc3RlbmN5CisgICAgICAgICMgd2l0aCBpbnQ8LT5jb21wbGV4LCBmbG9hdDwtPmNvbXBsZXgsIGFuZCBjb21wbGV4PC0+Y29tcGxleCBjb21wYXJpc29ucy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgY29tcGxleCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycyIpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGZsb2F0KToKKyAgICAgICAgICAgIGlmIG1hdGguaXNuYW4ob3RoZXIpIG9yIG1hdGguaXNpbmYob3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBvcCgwLjAsIG90aGVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Aoc2VsZiwgc2VsZi5mcm9tX2Zsb2F0KG90aGVyKSkKKyAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICBpZiBpc2luc3RhbmNlKGRpZmYsIFJhdGlvbmFsKToKLSAgICAgICAgICAgIHJldHVybiBvcChkaWZmLm51bWVyYXRvciwgMCkKLSAgICAgICAgcmV0dXJuIG9wKGRpZmYsIDApCiAKICAgICBkZWYgX19sdF9fKGEsIGIpOgogICAgICAgICAiIiJhIDwgYiIiIgotICAgICAgICByZXR1cm4gYS5fc3VidHJhY3RBbmRDb21wYXJlVG9aZXJvKGIsIG9wZXJhdG9yLmx0KQorICAgICAgICByZXR1cm4gYS5fcmljaGNtcChiLCBvcGVyYXRvci5sdCkKIAogICAgIGRlZiBfX2d0X18oYSwgYik6CiAgICAgICAgICIiImEgPiBiIiIiCi0gICAgICAgIHJldHVybiBhLl9zdWJ0cmFjdEFuZENvbXBhcmVUb1plcm8oYiwgb3BlcmF0b3IuZ3QpCisgICAgICAgIHJldHVybiBhLl9yaWNoY21wKGIsIG9wZXJhdG9yLmd0KQogCiAgICAgZGVmIF9fbGVfXyhhLCBiKToKICAgICAgICAgIiIiYSA8PSBiIiIiCi0gICAgICAgIHJldHVybiBhLl9zdWJ0cmFjdEFuZENvbXBhcmVUb1plcm8oYiwgb3BlcmF0b3IubGUpCisgICAgICAgIHJldHVybiBhLl9yaWNoY21wKGIsIG9wZXJhdG9yLmxlKQogCiAgICAgZGVmIF9fZ2VfXyhhLCBiKToKICAgICAgICAgIiIiYSA+PSBiIiIiCi0gICAgICAgIHJldHVybiBhLl9zdWJ0cmFjdEFuZENvbXBhcmVUb1plcm8oYiwgb3BlcmF0b3IuZ2UpCisgICAgICAgIHJldHVybiBhLl9yaWNoY21wKGIsIG9wZXJhdG9yLmdlKQogCiAgICAgZGVmIF9fbm9uemVyb19fKGEpOgogICAgICAgICAiIiJhICE9IDAiIiIKZGlmZiAtLWdpdCBhL0xpYi9mdHBsaWIucHkgYi9MaWIvZnRwbGliLnB5CmluZGV4IDIyZGVjYjIuLmMxY2VmOGUgMTAwNjQ0Ci0tLSBhL0xpYi9mdHBsaWIucHkKKysrIGIvTGliL2Z0cGxpYi5weQpAQCAtMzMsNiArMzMsNyBAQAogIyBNb2RpZmllZCBieSBKYWNrIHRvIHdvcmsgb24gdGhlIG1hYy4KICMgTW9kaWZpZWQgYnkgU2llYnJlbiB0byBzdXBwb3J0IGRvY3N0cmluZ3MgYW5kIFBBU1YuCiAjIE1vZGlmaWVkIGJ5IFBoaWwgU2Nod2FydHogdG8gYWRkIHN0b3JiaW5hcnkgYW5kIHN0b3JsaW5lcyBjYWxsYmFja3MuCisjIE1vZGlmaWVkIGJ5IEdpYW1wYW9sbyBSb2RvbGEnIHRvIGFkZCBUTFMgc3VwcG9ydC4KICMKIAogaW1wb3J0IG9zCkBAIC00MzQsNyArNDM1LDcgQEAKICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKIAotICAgIGRlZiBzdG9yYmluYXJ5KHNlbGYsIGNtZCwgZnAsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lKToKKyAgICBkZWYgc3RvcmJpbmFyeShzZWxmLCBjbWQsIGZwLCBibG9ja3NpemU9ODE5MiwgY2FsbGJhY2s9Tm9uZSwgcmVzdD1Ob25lKToKICAgICAgICAgIiIiU3RvcmUgYSBmaWxlIGluIGJpbmFyeSBtb2RlLiAgQSBuZXcgcG9ydCBpcyBjcmVhdGVkIGZvciB5b3UuCiAKICAgICAgICAgQXJnczoKQEAgLTQ0NCwxMiArNDQ1LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGlvbiBhdCBvbmNlLiAgW2RlZmF1bHQ6IDgxOTJdCiAgICAgICAgICAgY2FsbGJhY2s6IEFuIG9wdGlvbmFsIHNpbmdsZSBwYXJhbWV0ZXIgY2FsbGFibGUgdGhhdCBpcyBjYWxsZWQgb24KICAgICAgICAgICAgICAgICAgICAgb24gZWFjaCBibG9jayBvZiBkYXRhIGFmdGVyIGl0IGlzIHNlbnQuICBbZGVmYXVsdDogTm9uZV0KKyAgICAgICAgICByZXN0OiBQYXNzZWQgdG8gdHJhbnNmZXJjbWQoKS4gIFtkZWZhdWx0OiBOb25lXQogCiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgVGhlIHJlc3BvbnNlIGNvZGUuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgSScpCi0gICAgICAgIGNvbm4gPSBzZWxmLnRyYW5zZmVyY21kKGNtZCkKKyAgICAgICAgY29ubiA9IHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KQogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgYnVmID0gZnAucmVhZChibG9ja3NpemUpCiAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhawpAQCAtNTc5LDYgKzU4MSwxODEgQEAKICAgICAgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jayA9IE5vbmUKIAogCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgY2xhc3MgRlRQX1RMUyhGVFApOgorICAgICAgICAnJydBIEZUUCBzdWJjbGFzcyB3aGljaCBhZGRzIFRMUyBzdXBwb3J0IHRvIEZUUCBhcyBkZXNjcmliZWQKKyAgICAgICAgaW4gUkZDLTQyMTcuCisKKyAgICAgICAgQ29ubmVjdCBhcyB1c3VhbCB0byBwb3J0IDIxIGltcGxpY2l0bHkgc2VjdXJpbmcgdGhlIEZUUCBjb250cm9sCisgICAgICAgIGNvbm5lY3Rpb24gYmVmb3JlIGF1dGhlbnRpY2F0aW5nLgorCisgICAgICAgIFNlY3VyaW5nIHRoZSBkYXRhIGNvbm5lY3Rpb24gcmVxdWlyZXMgdXNlciB0byBleHBsaWNpdGx5IGFzaworICAgICAgICBmb3IgaXQgYnkgY2FsbGluZyBwcm90X3AoKSBtZXRob2QuCisKKyAgICAgICAgVXNhZ2UgZXhhbXBsZToKKyAgICAgICAgPj4+IGZyb20gZnRwbGliIGltcG9ydCBGVFBfVExTCisgICAgICAgID4+PiBmdHBzID0gRlRQX1RMUygnZnRwLnB5dGhvbi5vcmcnKQorICAgICAgICA+Pj4gZnRwcy5sb2dpbigpICAjIGxvZ2luIGFub25pbW91c2x5IHByZXZpb3VzbHkgc2VjdXJpbmcgY29udHJvbCBjaGFubmVsCisgICAgICAgICcyMzAgR3Vlc3QgbG9naW4gb2ssIGFjY2VzcyByZXN0cmljdGlvbnMgYXBwbHkuJworICAgICAgICA+Pj4gZnRwcy5wcm90X3AoKSAgIyBzd2l0Y2ggdG8gc2VjdXJlIGRhdGEgY29ubmVjdGlvbgorICAgICAgICAnMjAwIFByb3RlY3Rpb24gbGV2ZWwgc2V0IHRvIFAnCisgICAgICAgID4+PiBmdHBzLnJldHJsaW5lcygnTElTVCcpICAjIGxpc3QgZGlyZWN0b3J5IGNvbnRlbnQgc2VjdXJlbHkKKyAgICAgICAgdG90YWwgOQorICAgICAgICBkcnd4ci14ci14ICAgOCByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgLgorICAgICAgICBkcnd4ci14ci14ICAgOCByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgLi4KKyAgICAgICAgZHJ3eHIteHIteCAgIDIgcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IGJpbgorICAgICAgICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgZXRjCisgICAgICAgIGQtd3hyd3hyLXggICAyIGZ0cCAgICAgIHdoZWVsICAgICAgICAxMDI0IFNlcCAgNSAxMzo0MyBpbmNvbWluZworICAgICAgICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBOb3YgMTcgIDE5OTMgbGliCisgICAgICAgIGRyd3hyLXhyLXggICA2IDEwOTQgICAgIHdoZWVsICAgICAgICAxMDI0IFNlcCAxMyAxOTowNyBwdWIKKyAgICAgICAgZHJ3eHIteHIteCAgIDMgcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IHVzcgorICAgICAgICAtcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgIDMxMiBBdWcgIDEgIDE5OTQgd2VsY29tZS5tc2cKKyAgICAgICAgJzIyNiBUcmFuc2ZlciBjb21wbGV0ZS4nCisgICAgICAgID4+PiBmdHBzLnF1aXQoKQorICAgICAgICAnMjIxIEdvb2RieWUuJworICAgICAgICA+Pj4KKyAgICAgICAgJycnCisgICAgICAgIHNzbF92ZXJzaW9uID0gc3NsLlBST1RPQ09MX1RMU3YxCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9JycsIHVzZXI9JycsIHBhc3N3ZD0nJywgYWNjdD0nJywga2V5ZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Tm9uZSwgdGltZW91dD1fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCk6CisgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCisgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RfcCA9IEZhbHNlCisgICAgICAgICAgICBGVFAuX19pbml0X18oc2VsZiwgaG9zdCwgdXNlciwgcGFzc3dkLCBhY2N0LCB0aW1lb3V0KQorCisgICAgICAgIGRlZiBsb2dpbihzZWxmLCB1c2VyPScnLCBwYXNzd2Q9JycsIGFjY3Q9JycsIHNlY3VyZT1UcnVlKToKKyAgICAgICAgICAgIGlmIHNlY3VyZSBhbmQgbm90IGlzaW5zdGFuY2Uoc2VsZi5zb2NrLCBzc2wuU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICBzZWxmLmF1dGgoKQorICAgICAgICAgICAgcmV0dXJuIEZUUC5sb2dpbihzZWxmLCB1c2VyLCBwYXNzd2QsIGFjY3QpCisKKyAgICAgICAgZGVmIGF1dGgoc2VsZik6CisgICAgICAgICAgICAnJydTZXQgdXAgc2VjdXJlIGNvbnRyb2wgY29ubmVjdGlvbiBieSB1c2luZyBUTFMvU1NMLicnJworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnNvY2ssIHNzbC5TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkFscmVhZHkgdXNpbmcgVExTIikKKyAgICAgICAgICAgIGlmIHNlbGYuc3NsX3ZlcnNpb24gPT0gc3NsLlBST1RPQ09MX1RMU3YxOgorICAgICAgICAgICAgICAgIHJlc3AgPSBzZWxmLnZvaWRjbWQoJ0FVVEggVExTJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnQVVUSCBTU0wnKQorICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29jaywgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNlbGYuc3NsX3ZlcnNpb24pCisgICAgICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUobW9kZT0ncmInKQorICAgICAgICAgICAgcmV0dXJuIHJlc3AKKworICAgICAgICBkZWYgcHJvdF9wKHNlbGYpOgorICAgICAgICAgICAgJycnU2V0IHVwIHNlY3VyZSBkYXRhIGNvbm5lY3Rpb24uJycnCisgICAgICAgICAgICAjIFBST1QgZGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgZGF0YSBjaGFubmVsIGlzIHRvIGJlIHByb3RlY3RlZC4KKyAgICAgICAgICAgICMgVGhvdWdoIFJGQy0yMjI4IGRlZmluZXMgZm91ciBwb3NzaWJsZSBwcm90ZWN0aW9uIGxldmVscywKKyAgICAgICAgICAgICMgUkZDLTQyMTcgb25seSByZWNvbW1lbmRzIHR3bywgQ2xlYXIgYW5kIFByaXZhdGUuCisgICAgICAgICAgICAjIENsZWFyIChQUk9UIEMpIG1lYW5zIHRoYXQgbm8gc2VjdXJpdHkgaXMgdG8gYmUgdXNlZCBvbiB0aGUKKyAgICAgICAgICAgICMgZGF0YS1jaGFubmVsLCBQcml2YXRlIChQUk9UIFApIG1lYW5zIHRoYXQgdGhlIGRhdGEtY2hhbm5lbAorICAgICAgICAgICAgIyBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IFRMUy4KKyAgICAgICAgICAgICMgUEJTWiBjb21tYW5kIE1VU1Qgc3RpbGwgYmUgaXNzdWVkLCBidXQgbXVzdCBoYXZlIGEgcGFyYW1ldGVyIG9mCisgICAgICAgICAgICAjICcwJyB0byBpbmRpY2F0ZSB0aGF0IG5vIGJ1ZmZlcmluZyBpcyB0YWtpbmcgcGxhY2UgYW5kIHRoZSBkYXRhCisgICAgICAgICAgICAjIGNvbm5lY3Rpb24gc2hvdWxkIG5vdCBiZSBlbmNhcHN1bGF0ZWQuCisgICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1BCU1ogMCcpCisgICAgICAgICAgICByZXNwID0gc2VsZi52b2lkY21kKCdQUk9UIFAnKQorICAgICAgICAgICAgc2VsZi5fcHJvdF9wID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHJlc3AKKworICAgICAgICBkZWYgcHJvdF9jKHNlbGYpOgorICAgICAgICAgICAgJycnU2V0IHVwIGNsZWFyIHRleHQgZGF0YSBjb25uZWN0aW9uLicnJworICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnUFJPVCBDJykKKyAgICAgICAgICAgIHNlbGYuX3Byb3RfcCA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gcmVzcAorCisgICAgICAgICMgLS0tIE92ZXJyaWRkZW4gRlRQIG1ldGhvZHMKKworICAgICAgICBkZWYgbnRyYW5zZmVyY21kKHNlbGYsIGNtZCwgcmVzdD1Ob25lKToKKyAgICAgICAgICAgIGNvbm4sIHNpemUgPSBGVFAubnRyYW5zZmVyY21kKHNlbGYsIGNtZCwgcmVzdCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb3RfcDoKKyAgICAgICAgICAgICAgICBjb25uID0gc3NsLndyYXBfc29ja2V0KGNvbm4sIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNlbGYuc3NsX3ZlcnNpb24pCisgICAgICAgICAgICByZXR1cm4gY29ubiwgc2l6ZQorCisgICAgICAgIGRlZiByZXRyYmluYXJ5KHNlbGYsIGNtZCwgY2FsbGJhY2ssIGJsb2Nrc2l6ZT04MTkyLCByZXN0PU5vbmUpOgorICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQorICAgICAgICAgICAgY29ubiA9IHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoYmxvY2tzaXplKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpCisgICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQorCisgICAgICAgIGRlZiByZXRybGluZXMoc2VsZiwgY21kLCBjYWxsYmFjayA9IE5vbmUpOgorICAgICAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZTogY2FsbGJhY2sgPSBwcmludF9saW5lCisgICAgICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdUWVBFIEEnKQorICAgICAgICAgICAgY29ubiA9IHNlbGYudHJhbnNmZXJjbWQoY21kKQorICAgICAgICAgICAgZnAgPSBjb25uLm1ha2VmaWxlKCdyYicpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAyOiBwcmludCAnKnJldHIqJywgcmVwcihsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQorICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmVbLTE6XSA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhsaW5lKQorICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCisKKyAgICAgICAgZGVmIHN0b3JiaW5hcnkoc2VsZiwgY21kLCBmcCwgYmxvY2tzaXplPTgxOTIsIGNhbGxiYWNrPU5vbmUsIHJlc3Q9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgSScpCisgICAgICAgICAgICBjb25uID0gc2VsZi50cmFuc2ZlcmNtZChjbWQsIHJlc3QpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZChibG9ja3NpemUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCisgICAgICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQorCisgICAgICAgIGRlZiBzdG9ybGluZXMoc2VsZiwgY21kLCBmcCwgY2FsbGJhY2s9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgQScpCisgICAgICAgICAgICBjb25uID0gc2VsZi50cmFuc2ZlcmNtZChjbWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBidWZbLTI6XSAhPSBDUkxGOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0xXSBpbiBDUkxGOiBidWYgPSBidWZbOi0xXQorICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmICsgQ1JMRgorICAgICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQorICAgICAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKKworICAgIF9fYWxsX18uYXBwZW5kKCdGVFBfVExTJykKKyAgICBhbGxfZXJyb3JzID0gKEVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvciwgc3NsLlNTTEVycm9yKQorCisKIF8xNTBfcmUgPSBOb25lCiAKIGRlZiBwYXJzZTE1MChyZXNwKToKZGlmZiAtLWdpdCBhL0xpYi9mdW5jdG9vbHMucHkgYi9MaWIvZnVuY3Rvb2xzLnB5CmluZGV4IGE1NGYwMzAuLjFhMWYyMmUgMTAwNjQ0Ci0tLSBhL0xpYi9mdW5jdG9vbHMucHkKKysrIGIvTGliL2Z1bmN0b29scy5weQpAQCAtNDksMyArNDksNTEgQEAKICAgICAiIiIKICAgICByZXR1cm4gcGFydGlhbCh1cGRhdGVfd3JhcHBlciwgd3JhcHBlZD13cmFwcGVkLAogICAgICAgICAgICAgICAgICAgIGFzc2lnbmVkPWFzc2lnbmVkLCB1cGRhdGVkPXVwZGF0ZWQpCisKK2RlZiB0b3RhbF9vcmRlcmluZyhjbHMpOgorICAgICIiIkNsYXNzIGRlY29yYXRvciB0aGF0IGZpbGxzIGluIG1pc3Npbmcgb3JkZXJpbmcgbWV0aG9kcyIiIgorICAgIGNvbnZlcnQgPSB7CisgICAgICAgICdfX2x0X18nOiBbKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG90aGVyIDwgc2VsZiksCisgICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBvdGhlciA8IHNlbGYpLAorICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA8IG90aGVyKV0sCisgICAgICAgICdfX2xlX18nOiBbKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG90aGVyIDw9IHNlbGYpLAorICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgb3RoZXIgPD0gc2VsZiksCisgICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDw9IG90aGVyKV0sCisgICAgICAgICdfX2d0X18nOiBbKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG90aGVyID4gc2VsZiksCisgICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBvdGhlciA+IHNlbGYpLAorICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA+IG90aGVyKV0sCisgICAgICAgICdfX2dlX18nOiBbKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG90aGVyID49IHNlbGYpLAorICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgb3RoZXIgPj0gc2VsZiksCisgICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmID49IG90aGVyKV0KKyAgICB9CisgICAgcm9vdHMgPSBzZXQoZGlyKGNscykpICYgc2V0KGNvbnZlcnQpCisgICAgaWYgbm90IHJvb3RzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgb3JkZXJpbmcgb3BlcmF0aW9uOiA8ID4gPD0gPj0nKQorICAgIHJvb3QgPSBtYXgocm9vdHMpICAgICAgICMgcHJlZmVyIF9fbHRfXyB0byBfX2xlX18gdG8gX19ndF9fIHRvIF9fZ2VfXworICAgIGZvciBvcG5hbWUsIG9wZnVuYyBpbiBjb252ZXJ0W3Jvb3RdOgorICAgICAgICBpZiBvcG5hbWUgbm90IGluIHJvb3RzOgorICAgICAgICAgICAgb3BmdW5jLl9fbmFtZV9fID0gb3BuYW1lCisgICAgICAgICAgICBvcGZ1bmMuX19kb2NfXyA9IGdldGF0dHIoaW50LCBvcG5hbWUpLl9fZG9jX18KKyAgICAgICAgICAgIHNldGF0dHIoY2xzLCBvcG5hbWUsIG9wZnVuYykKKyAgICByZXR1cm4gY2xzCisKK2RlZiBjbXBfdG9fa2V5KG15Y21wKToKKyAgICAiIiJDb252ZXJ0IGEgY21wPSBmdW5jdGlvbiBpbnRvIGEga2V5PSBmdW5jdGlvbiIiIgorICAgIGNsYXNzIEsob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgKmFyZ3MpOgorICAgICAgICAgICAgc2VsZi5vYmogPSBvYmoKKyAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgPCAwCisgICAgICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIG15Y21wKHNlbGYub2JqLCBvdGhlci5vYmopID4gMAorICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBteWNtcChzZWxmLm9iaiwgb3RoZXIub2JqKSA9PSAwCisgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIG15Y21wKHNlbGYub2JqLCBvdGhlci5vYmopIDw9IDAKKyAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgPj0gMAorICAgICAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBteWNtcChzZWxmLm9iaiwgb3RoZXIub2JqKSAhPSAwCisgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignaGFzaCBub3QgaW1wbGVtZW50ZWQnKQorICAgIHJldHVybiBLCmRpZmYgLS1naXQgYS9MaWIvZ2VuZXJpY3BhdGgucHkgYi9MaWIvZ2VuZXJpY3BhdGgucHkKaW5kZXggNzNkN2IyNi4uYTBiZjYwMSAxMDA2NDQKLS0tIGEvTGliL2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi9nZW5lcmljcGF0aC5weQpAQCAtMTUsNyArMTUsNyBAQAogZGVmIGV4aXN0cyhwYXRoKToKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgRmFsc2UgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgogICAgIHRyeToKLSAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCisgICAgICAgIG9zLnN0YXQocGF0aCkKICAgICBleGNlcHQgb3MuZXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCmRpZmYgLS1naXQgYS9MaWIvZ2V0b3B0LnB5IGIvTGliL2dldG9wdC5weQppbmRleCBmNzZkM2RlLi4yNTFkODljIDEwMDY0NAotLS0gYS9MaWIvZ2V0b3B0LnB5CisrKyBiL0xpYi9nZXRvcHQucHkKQEAgLTEsNCArMSwzIEBACi0jIC0qLSBjb2Rpbmc6IGlzby04ODU5LTEgLSotCiAiIiJQYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zLgogCiBUaGlzIG1vZHVsZSBoZWxwcyBzY3JpcHRzIHRvIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGluCkBAIC0yMCw3ICsxOSw3IEBACiAjIEdlcnJpdCBIb2xsIDxnZXJyaXRAbmwubGludXgub3JnPiBtb3ZlZCB0aGUgc3RyaW5nLWJhc2VkIGV4Y2VwdGlvbnMKICMgdG8gY2xhc3MtYmFzZWQgZXhjZXB0aW9ucy4KICMKLSMgUGV0ZXIgxXN0cmFuZCA8YXN0cmFuZEBseXNhdG9yLmxpdS5zZT4gYWRkZWQgZ251X2dldG9wdCgpLgorIyBQZXRlciBBc3RyYW5kIDxhc3RyYW5kQGx5c2F0b3IubGl1LnNlPiBhZGRlZCBnbnVfZ2V0b3B0KCkuCiAjCiAjIFRPRE8gZm9yIGdudV9nZXRvcHQoKToKICMKQEAgLTEzMCw3ICsxMjksNyBAQAogCiAgICAgICAgIGlmIGFyZ3NbMF1bOjJdID09ICctLSc6CiAgICAgICAgICAgICBvcHRzLCBhcmdzID0gZG9fbG9uZ3Mob3B0cywgYXJnc1swXVsyOl0sIGxvbmdvcHRzLCBhcmdzWzE6XSkKLSAgICAgICAgZWxpZiBhcmdzWzBdWzoxXSA9PSAnLSc6CisgICAgICAgIGVsaWYgYXJnc1swXVs6MV0gPT0gJy0nIGFuZCBhcmdzWzBdICE9ICctJzoKICAgICAgICAgICAgIG9wdHMsIGFyZ3MgPSBkb19zaG9ydHMob3B0cywgYXJnc1swXVsxOl0sIHNob3J0b3B0cywgYXJnc1sxOl0pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBhbGxfb3B0aW9uc19maXJzdDoKZGlmZiAtLWdpdCBhL0xpYi9nZXRwYXNzLnB5IGIvTGliL2dldHBhc3MucHkKaW5kZXggM2NhN2ZiMi4uNDc0NWVhOSAxMDA2NDQKLS0tIGEvTGliL2dldHBhc3MucHkKKysrIGIvTGliL2dldHBhc3MucHkKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgIyBJZiB0aGF0IGZhaWxzLCBzZWUgaWYgc3RkaW4gY2FuIGJlIGNvbnRyb2xsZWQuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZkID0gc3lzLnN0ZGluLmZpbGVubygpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBwYXNzd2QgPSBmYWxsYmFja19nZXRwYXNzKHByb21wdCwgc3RyZWFtKQogICAgICAgICBpbnB1dCA9IHN5cy5zdGRpbgogICAgICAgICBpZiBub3Qgc3RyZWFtOgpkaWZmIC0tZ2l0IGEvTGliL2dldHRleHQucHkgYi9MaWIvZ2V0dGV4dC5weQppbmRleCA5MGViYzUxLi45OTczNTM1IDEwMDY0NAotLS0gYS9MaWIvZ2V0dGV4dC5weQorKysgYi9MaWIvZ2V0dGV4dC5weQpAQCAtNDY3LDE1ICs0NjcsMTUgQEAKICAgICAgICAgaWYgZmFsbGJhY2s6CiAgICAgICAgICAgICByZXR1cm4gTnVsbFRyYW5zbGF0aW9ucygpCiAgICAgICAgIHJhaXNlIElPRXJyb3IoRU5PRU5ULCAnTm8gdHJhbnNsYXRpb24gZmlsZSBmb3VuZCBmb3IgZG9tYWluJywgZG9tYWluKQotICAgICMgVEJEOiBkbyB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBmaWxlIHBvaW50ZXIgZ2V0dGluZyBjb2xsZWN0ZWQ/CiAgICAgIyBBdm9pZCBvcGVuaW5nLCByZWFkaW5nLCBhbmQgcGFyc2luZyB0aGUgLm1vIGZpbGUgYWZ0ZXIgaXQncyBiZWVuIGRvbmUKICAgICAjIG9uY2UuCiAgICAgcmVzdWx0ID0gTm9uZQogICAgIGZvciBtb2ZpbGUgaW4gbW9maWxlczoKLSAgICAgICAga2V5ID0gb3MucGF0aC5hYnNwYXRoKG1vZmlsZSkKKyAgICAgICAga2V5ID0gKGNsYXNzXywgb3MucGF0aC5hYnNwYXRoKG1vZmlsZSkpCiAgICAgICAgIHQgPSBfdHJhbnNsYXRpb25zLmdldChrZXkpCiAgICAgICAgIGlmIHQgaXMgTm9uZToKLSAgICAgICAgICAgIHQgPSBfdHJhbnNsYXRpb25zLnNldGRlZmF1bHQoa2V5LCBjbGFzc18ob3Blbihtb2ZpbGUsICdyYicpKSkKKyAgICAgICAgICAgIHdpdGggb3Blbihtb2ZpbGUsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgICAgIHQgPSBfdHJhbnNsYXRpb25zLnNldGRlZmF1bHQoa2V5LCBjbGFzc18oZnApKQogICAgICAgICAjIENvcHkgdGhlIHRyYW5zbGF0aW9uIG9iamVjdCB0byBhbGxvdyBzZXR0aW5nIGZhbGxiYWNrcyBhbmQKICAgICAgICAgIyBvdXRwdXQgY2hhcnNldC4gQWxsIG90aGVyIGluc3RhbmNlIGRhdGEgaXMgc2hhcmVkIHdpdGggdGhlCiAgICAgICAgICMgY2FjaGVkIG9iamVjdC4KZGlmZiAtLWdpdCBhL0xpYi9nemlwLnB5IGIvTGliL2d6aXAucHkKaW5kZXggZmMyMWFkNC4uMmJjYjRkYiAxMDA2NDQKLS0tIGEvTGliL2d6aXAucHkKKysrIGIvTGliL2d6aXAucHkKQEAgLTUsOCArNSw5IEBACiAKICMgYmFzZWQgb24gQW5kcmV3IEt1Y2hsaW5nJ3MgbWluaWd6aXAucHkgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgemxpYiBtb2R1bGUKIAotaW1wb3J0IHN0cnVjdCwgc3lzLCB0aW1lCitpbXBvcnQgc3RydWN0LCBzeXMsIHRpbWUsIG9zCiBpbXBvcnQgemxpYgoraW1wb3J0IGlvCiBpbXBvcnQgX19idWlsdGluX18KIAogX19hbGxfXyA9IFsiR3ppcEZpbGUiLCJvcGVuIl0KQEAgLTMyLDcgKzMzLDcgQEAKICAgICAiIiIKICAgICByZXR1cm4gR3ppcEZpbGUoZmlsZW5hbWUsIG1vZGUsIGNvbXByZXNzbGV2ZWwpCiAKLWNsYXNzIEd6aXBGaWxlOgorY2xhc3MgR3ppcEZpbGUoaW8uQnVmZmVyZWRJT0Jhc2UpOgogICAgICIiIlRoZSBHemlwRmlsZSBjbGFzcyBzaW11bGF0ZXMgbW9zdCBvZiB0aGUgbWV0aG9kcyBvZiBhIGZpbGUgb2JqZWN0IHdpdGgKICAgICB0aGUgZXhjZXB0aW9uIG9mIHRoZSByZWFkaW50bygpIGFuZCB0cnVuY2F0ZSgpIG1ldGhvZHMuCiAKQEAgLTQyLDcgKzQzLDcgQEAKICAgICBtYXhfcmVhZF9jaHVuayA9IDEwICogMTAyNCAqIDEwMjQgICAjIDEwTWIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT1Ob25lLCBtb2RlPU5vbmUsCi0gICAgICAgICAgICAgICAgIGNvbXByZXNzbGV2ZWw9OSwgZmlsZW9iaj1Ob25lKToKKyAgICAgICAgICAgICAgICAgY29tcHJlc3NsZXZlbD05LCBmaWxlb2JqPU5vbmUsIG10aW1lPU5vbmUpOgogICAgICAgICAiIiJDb25zdHJ1Y3RvciBmb3IgdGhlIEd6aXBGaWxlIGNsYXNzLgogCiAgICAgICAgIEF0IGxlYXN0IG9uZSBvZiBmaWxlb2JqIGFuZCBmaWxlbmFtZSBtdXN0IGJlIGdpdmVuIGEKQEAgLTY5LDYgKzcwLDE1IEBACiAgICAgICAgIGxldmVsIG9mIGNvbXByZXNzaW9uOyAxIGlzIGZhc3Rlc3QgYW5kIHByb2R1Y2VzIHRoZSBsZWFzdCBjb21wcmVzc2lvbiwKICAgICAgICAgYW5kIDkgaXMgc2xvd2VzdCBhbmQgcHJvZHVjZXMgdGhlIG1vc3QgY29tcHJlc3Npb24uICBUaGUgZGVmYXVsdCBpcyA5LgogCisgICAgICAgIFRoZSBtdGltZSBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBudW1lcmljIHRpbWVzdGFtcCB0byBiZSB3cml0dGVuCisgICAgICAgIHRvIHRoZSBzdHJlYW0gd2hlbiBjb21wcmVzc2luZy4gIEFsbCBnemlwIGNvbXByZXNzZWQgc3RyZWFtcworICAgICAgICBhcmUgcmVxdWlyZWQgdG8gY29udGFpbiBhIHRpbWVzdGFtcC4gIElmIG9taXR0ZWQgb3IgTm9uZSwgdGhlCisgICAgICAgIGN1cnJlbnQgdGltZSBpcyB1c2VkLiAgVGhpcyBtb2R1bGUgaWdub3JlcyB0aGUgdGltZXN0YW1wIHdoZW4KKyAgICAgICAgZGVjb21wcmVzc2luZzsgaG93ZXZlciwgc29tZSBwcm9ncmFtcywgc3VjaCBhcyBndW56aXAsIG1ha2UgdXNlCisgICAgICAgIG9mIGl0LiAgVGhlIGZvcm1hdCBvZiB0aGUgdGltZXN0YW1wIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlCisgICAgICAgIHJldHVybiB2YWx1ZSBvZiB0aW1lLnRpbWUoKSBhbmQgb2YgdGhlIHN0X210aW1lIG1lbWJlciBvZiB0aGUKKyAgICAgICAgb2JqZWN0IHJldHVybmVkIGJ5IG9zLnN0YXQoKS4KKwogICAgICAgICAiIiIKIAogICAgICAgICAjIGd1YXJhbnRlZSB0aGUgZmlsZSBpcyBvcGVuZWQgaW4gYmluYXJ5IG1vZGUgb24gcGxhdGZvcm1zCkBAIC04OCw4ICs5OCwxMiBAQAogICAgICAgICAgICAgc2VsZi5tb2RlID0gUkVBRAogICAgICAgICAgICAgIyBTZXQgZmxhZyBpbmRpY2F0aW5nIHN0YXJ0IG9mIGEgbmV3IG1lbWJlcgogICAgICAgICAgICAgc2VsZi5fbmV3X21lbWJlciA9IFRydWUKKyAgICAgICAgICAgICMgQnVmZmVyIGRhdGEgcmVhZCBmcm9tIGd6aXAgZmlsZS4gZXh0cmFzdGFydCBpcyBvZmZzZXQgaW4KKyAgICAgICAgICAgICMgc3RyZWFtIHdoZXJlIGJ1ZmZlciBzdGFydHMuIGV4dHJhc2l6ZSBpcyBudW1iZXIgb2YKKyAgICAgICAgICAgICMgYnl0ZXMgcmVtYWluaW5nIGluIGJ1ZmZlciBmcm9tIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uLgogICAgICAgICAgICAgc2VsZi5leHRyYWJ1ZiA9ICIiCiAgICAgICAgICAgICBzZWxmLmV4dHJhc2l6ZSA9IDAKKyAgICAgICAgICAgIHNlbGYuZXh0cmFzdGFydCA9IDAKICAgICAgICAgICAgIHNlbGYubmFtZSA9IGZpbGVuYW1lCiAgICAgICAgICAgICAjIFN0YXJ0cyBzbWFsbCwgc2NhbGVzIGV4cG9uZW50aWFsbHkKICAgICAgICAgICAgIHNlbGYubWluX3JlYWRzaXplID0gMTAwCkBAIC0xMDcsNiArMTIxLDcgQEAKIAogICAgICAgICBzZWxmLmZpbGVvYmogPSBmaWxlb2JqCiAgICAgICAgIHNlbGYub2Zmc2V0ID0gMAorICAgICAgICBzZWxmLm10aW1lID0gbXRpbWUKIAogICAgICAgICBpZiBzZWxmLm1vZGUgPT0gV1JJVEU6CiAgICAgICAgICAgICBzZWxmLl93cml0ZV9nemlwX2hlYWRlcigpCkBAIC0xMjMsNiArMTM4LDEzIEBACiAgICAgICAgIHMgPSByZXByKHNlbGYuZmlsZW9iaikKICAgICAgICAgcmV0dXJuICc8Z3ppcCAnICsgc1sxOi0xXSArICcgJyArIGhleChpZChzZWxmKSkgKyAnPicKIAorICAgIGRlZiBfY2hlY2tfY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJSYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHRoZSB1bmRlcmx5aW5nIGZpbGUgb2JqZWN0IGhhcyBiZWVuIGNsb3NlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlLicpCisKICAgICBkZWYgX2luaXRfd3JpdGUoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICBzZWxmLm5hbWUgPSBmaWxlbmFtZQogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoIiIpICYgMHhmZmZmZmZmZkwKQEAgLTEzMywxNCArMTU1LDE3IEBACiAgICAgZGVmIF93cml0ZV9nemlwX2hlYWRlcihzZWxmKToKICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKCdcMDM3XDIxMycpICAgICAgICAgICAgICMgbWFnaWMgaGVhZGVyCiAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZSgnXDAxMCcpICAgICAgICAgICAgICAgICAjIGNvbXByZXNzaW9uIG1ldGhvZAotICAgICAgICBmbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBmbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5uYW1lKQogICAgICAgICBpZiBmbmFtZS5lbmRzd2l0aCgiLmd6Iik6CiAgICAgICAgICAgICBmbmFtZSA9IGZuYW1lWzotM10KICAgICAgICAgZmxhZ3MgPSAwCiAgICAgICAgIGlmIGZuYW1lOgogICAgICAgICAgICAgZmxhZ3MgPSBGTkFNRQogICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoY2hyKGZsYWdzKSkKLSAgICAgICAgd3JpdGUzMnUoc2VsZi5maWxlb2JqLCBsb25nKHRpbWUudGltZSgpKSkKKyAgICAgICAgbXRpbWUgPSBzZWxmLm10aW1lCisgICAgICAgIGlmIG10aW1lIGlzIE5vbmU6CisgICAgICAgICAgICBtdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHdyaXRlMzJ1KHNlbGYuZmlsZW9iaiwgbG9uZyhtdGltZSkpCiAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZSgnXDAwMicpCiAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZSgnXDM3NycpCiAgICAgICAgIGlmIGZuYW1lOgpAQCAtMTU4LDEwICsxODMsMTAgQEAKICAgICAgICAgaWYgbWV0aG9kICE9IDg6CiAgICAgICAgICAgICByYWlzZSBJT0Vycm9yLCAnVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnCiAgICAgICAgIGZsYWcgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKLSAgICAgICAgIyBtb2R0aW1lID0gc2VsZi5maWxlb2JqLnJlYWQoNCkKKyAgICAgICAgc2VsZi5tdGltZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopCiAgICAgICAgICMgZXh0cmFmbGFnID0gc2VsZi5maWxlb2JqLnJlYWQoMSkKICAgICAgICAgIyBvcyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCi0gICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKDYpCisgICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKDIpCiAKICAgICAgICAgaWYgZmxhZyAmIEZFWFRSQToKICAgICAgICAgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIGV4dHJhIGZpZWxkLCBpZiBwcmVzZW50CkBAIC0xODMsMjEgKzIwOCwyOSBAQAogICAgICAgICBpZiBmbGFnICYgRkhDUkM6CiAgICAgICAgICAgICBzZWxmLmZpbGVvYmoucmVhZCgyKSAgICAgIyBSZWFkICYgZGlzY2FyZCB0aGUgMTYtYml0IGhlYWRlciBDUkMKIAotCiAgICAgZGVmIHdyaXRlKHNlbGYsZGF0YSk6CisgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBXUklURToKICAgICAgICAgICAgIGltcG9ydCBlcnJubwogICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgIndyaXRlKCkgb24gcmVhZC1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAid3JpdGUoKSBvbiBjbG9zZWQgR3ppcEZpbGUgb2JqZWN0IgorCisgICAgICAgICMgQ29udmVydCBkYXRhIHR5cGUgaWYgY2FsbGVkIGJ5IGlvLkJ1ZmZlcmVkV3JpdGVyLgorICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIG1lbW9yeXZpZXcpOgorICAgICAgICAgICAgZGF0YSA9IGRhdGEudG9ieXRlcygpCisKICAgICAgICAgaWYgbGVuKGRhdGEpID4gMDoKICAgICAgICAgICAgIHNlbGYuc2l6ZSA9IHNlbGYuc2l6ZSArIGxlbihkYXRhKQogICAgICAgICAgICAgc2VsZi5jcmMgPSB6bGliLmNyYzMyKGRhdGEsIHNlbGYuY3JjKSAmIDB4ZmZmZmZmZmZMCiAgICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoIHNlbGYuY29tcHJlc3MuY29tcHJlc3MoZGF0YSkgKQogICAgICAgICAgICAgc2VsZi5vZmZzZXQgKz0gbGVuKGRhdGEpCiAKKyAgICAgICAgcmV0dXJuIGxlbihkYXRhKQorCiAgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgaW1wb3J0IGVycm5vCiAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVCQURGLCAicmVhZCgpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKQEAgLTIyMiwxNSArMjU1LDE0IEBACiAgICAgICAgICAgICAgICAgaWYgc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgogICAgICAgICAgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKIAotICAgICAgICBjaHVuayA9IHNlbGYuZXh0cmFidWZbOnNpemVdCi0gICAgICAgIHNlbGYuZXh0cmFidWYgPSBzZWxmLmV4dHJhYnVmW3NpemU6XQorICAgICAgICBvZmZzZXQgPSBzZWxmLm9mZnNldCAtIHNlbGYuZXh0cmFzdGFydAorICAgICAgICBjaHVuayA9IHNlbGYuZXh0cmFidWZbb2Zmc2V0OiBvZmZzZXQgKyBzaXplXQogICAgICAgICBzZWxmLmV4dHJhc2l6ZSA9IHNlbGYuZXh0cmFzaXplIC0gc2l6ZQogCiAgICAgICAgIHNlbGYub2Zmc2V0ICs9IHNpemUKICAgICAgICAgcmV0dXJuIGNodW5rCiAKICAgICBkZWYgX3VucmVhZChzZWxmLCBidWYpOgotICAgICAgICBzZWxmLmV4dHJhYnVmID0gYnVmICsgc2VsZi5leHRyYWJ1ZgogICAgICAgICBzZWxmLmV4dHJhc2l6ZSA9IGxlbihidWYpICsgc2VsZi5leHRyYXNpemUKICAgICAgICAgc2VsZi5vZmZzZXQgLT0gbGVuKGJ1ZikKIApAQCAtMjg2LDggKzMxOCwxMCBAQAogCiAgICAgZGVmIF9hZGRfcmVhZF9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoZGF0YSwgc2VsZi5jcmMpICYgMHhmZmZmZmZmZkwKLSAgICAgICAgc2VsZi5leHRyYWJ1ZiA9IHNlbGYuZXh0cmFidWYgKyBkYXRhCisgICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0IC0gc2VsZi5leHRyYXN0YXJ0CisgICAgICAgIHNlbGYuZXh0cmFidWYgPSBzZWxmLmV4dHJhYnVmW29mZnNldDpdICsgZGF0YQogICAgICAgICBzZWxmLmV4dHJhc2l6ZSA9IHNlbGYuZXh0cmFzaXplICsgbGVuKGRhdGEpCisgICAgICAgIHNlbGYuZXh0cmFzdGFydCA9IHNlbGYub2Zmc2V0CiAgICAgICAgIHNlbGYuc2l6ZSA9IHNlbGYuc2l6ZSArIGxlbihkYXRhKQogCiAgICAgZGVmIF9yZWFkX2VvZihzZWxmKToKQEAgLTMwNSw2ICszMzksMTkgQEAKICAgICAgICAgZWxpZiBpc2l6ZSAhPSAoc2VsZi5zaXplICYgMHhmZmZmZmZmZkwpOgogICAgICAgICAgICAgcmFpc2UgSU9FcnJvciwgIkluY29ycmVjdCBsZW5ndGggb2YgZGF0YSBwcm9kdWNlZCIKIAorICAgICAgICAjIEd6aXAgZmlsZXMgY2FuIGJlIHBhZGRlZCB3aXRoIHplcm9lcyBhbmQgc3RpbGwgaGF2ZSBhcmNoaXZlcy4KKyAgICAgICAgIyBDb25zdW1lIGFsbCB6ZXJvIGJ5dGVzIGFuZCBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0CisgICAgICAgICMgbm9uLXplcm8gYnl0ZS4gU2VlIGh0dHA6Ly93d3cuZ3ppcC5vcmcvI2ZhcTgKKyAgICAgICAgYyA9ICJceDAwIgorICAgICAgICB3aGlsZSBjID09ICJceDAwIjoKKyAgICAgICAgICAgIGMgPSBzZWxmLmZpbGVvYmoucmVhZCgxKQorICAgICAgICBpZiBjOgorICAgICAgICAgICAgc2VsZi5maWxlb2JqLnNlZWsoLTEsIDEpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2xvc2VkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5maWxlb2JqIGlzIE5vbmUKKwogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTMyMCwxNiArMzY3LDggQEAKICAgICAgICAgICAgIHNlbGYubXlmaWxlb2JqLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYubXlmaWxlb2JqID0gTm9uZQogCi0gICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIChzZWxmLm15ZmlsZW9iaiBpcyBOb25lIGFuZAotICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iaiBpcyBOb25lKToKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuY2xvc2UoKQotCiAgICAgZGVmIGZsdXNoKHNlbGYsemxpYl9tb2RlPXpsaWIuWl9TWU5DX0ZMVVNIKToKKyAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgaWYgc2VsZi5tb2RlID09IFdSSVRFOgogICAgICAgICAgICAgIyBFbnN1cmUgdGhlIGNvbXByZXNzb3IncyBidWZmZXIgaXMgZmx1c2hlZAogICAgICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKHNlbGYuY29tcHJlc3MuZmx1c2goemxpYl9tb2RlKSkKQEAgLTM0MywxMiArMzgyLDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmZpbGVvYmouZmlsZW5vKCkKIAotICAgIGRlZiBpc2F0dHkoc2VsZik6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIHRlbGwoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLm9mZnNldAotCiAgICAgZGVmIHJld2luZChzZWxmKToKICAgICAgICAgJycnUmV0dXJuIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtIGZpbGUgcG9zaXRpb24gaW5kaWNhdG9yIHRvIHRoZQogICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIGZpbGUnJycKQEAgLTM1OCw4ICszOTEsMTggQEAKICAgICAgICAgc2VsZi5fbmV3X21lbWJlciA9IFRydWUKICAgICAgICAgc2VsZi5leHRyYWJ1ZiA9ICIiCiAgICAgICAgIHNlbGYuZXh0cmFzaXplID0gMAorICAgICAgICBzZWxmLmV4dHJhc3RhcnQgPSAwCiAgICAgICAgIHNlbGYub2Zmc2V0ID0gMAogCisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tb2RlID09IFJFQUQKKworICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kZSA9PSBXUklURQorCisgICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCiAgICAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9MCk6CiAgICAgICAgIGlmIHdoZW5jZToKICAgICAgICAgICAgIGlmIHdoZW5jZSA9PSAxOgpAQCAtMzgyLDggKzQyNSwxOCBAQAogICAgICAgICAgICAgICAgIHNlbGYucmVhZCgxMDI0KQogICAgICAgICAgICAgc2VsZi5yZWFkKGNvdW50ICUgMTAyNCkKIAorICAgICAgICByZXR1cm4gc2VsZi5vZmZzZXQKKwogICAgIGRlZiByZWFkbGluZShzZWxmLCBzaXplPS0xKToKICAgICAgICAgaWYgc2l6ZSA8IDA6CisgICAgICAgICAgICAjIFNob3J0Y3V0IGNvbW1vbiBjYXNlIC0gbmV3bGluZSBmb3VuZCBpbiBidWZmZXIuCisgICAgICAgICAgICBvZmZzZXQgPSBzZWxmLm9mZnNldCAtIHNlbGYuZXh0cmFzdGFydAorICAgICAgICAgICAgaSA9IHNlbGYuZXh0cmFidWYuZmluZCgnXG4nLCBvZmZzZXQpICsgMQorICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgc2VsZi5leHRyYXNpemUgLT0gaSAtIG9mZnNldAorICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IGkgLSBvZmZzZXQKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRyYWJ1ZltvZmZzZXQ6IGldCisKICAgICAgICAgICAgIHNpemUgPSBzeXMubWF4aW50CiAgICAgICAgICAgICByZWFkc2l6ZSA9IHNlbGYubWluX3JlYWRzaXplCiAgICAgICAgIGVsc2U6CkBAIC00MTMsMzQgKzQ2Niw2IEBACiAgICAgICAgICAgICBzZWxmLm1pbl9yZWFkc2l6ZSA9IG1pbihyZWFkc2l6ZSwgc2VsZi5taW5fcmVhZHNpemUgKiAyLCA1MTIpCiAgICAgICAgIHJldHVybiAnJy5qb2luKGJ1ZnMpICMgUmV0dXJuIHJlc3VsdGluZyBsaW5lCiAKLSAgICBkZWYgcmVhZGxpbmVzKHNlbGYsIHNpemVoaW50PTApOgotICAgICAgICAjIE5lZ2F0aXZlIG51bWJlcnMgcmVzdWx0IGluIHJlYWRpbmcgYWxsIHRoZSBsaW5lcwotICAgICAgICBpZiBzaXplaGludCA8PSAwOgotICAgICAgICAgICAgc2l6ZWhpbnQgPSBzeXMubWF4aW50Ci0gICAgICAgIEwgPSBbXQotICAgICAgICB3aGlsZSBzaXplaGludCA+IDA6Ci0gICAgICAgICAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBsaW5lID09ICIiOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBMLmFwcGVuZChsaW5lKQotICAgICAgICAgICAgc2l6ZWhpbnQgPSBzaXplaGludCAtIGxlbihsaW5lKQotCi0gICAgICAgIHJldHVybiBMCi0KLSAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBMKToKLSAgICAgICAgZm9yIGxpbmUgaW4gTDoKLSAgICAgICAgICAgIHNlbGYud3JpdGUobGluZSkKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBuZXh0KHNlbGYpOgotICAgICAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICByZXR1cm4gbGluZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotCiAKIGRlZiBfdGVzdCgpOgogICAgICMgQWN0IGxpa2UgZ3ppcDsgd2l0aCAtZCwgYWN0IGxpa2UgZ3VuemlwLgpkaWZmIC0tZ2l0IGEvTGliL2hhc2hsaWIucHkgYi9MaWIvaGFzaGxpYi5weQppbmRleCBhOTA2OGE1Li40OGYyY2ZkIDEwMDY0NAotLS0gYS9MaWIvaGFzaGxpYi5weQorKysgYi9MaWIvaGFzaGxpYi5weQpAQCAtNTQsNiArNTQsMTQgQEAKIAogIiIiCiAKKyMgVGhpcyB0dXBsZSBhbmQgX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcigpIG11c3QgYmUgbW9kaWZpZWQgaWYgYSBuZXcKKyMgYWx3YXlzIGF2YWlsYWJsZSBhbGdvcml0aG0gaXMgYWRkZWQuCitfX2Fsd2F5c19zdXBwb3J0ZWQgPSAoJ21kNScsICdzaGExJywgJ3NoYTIyNCcsICdzaGEyNTYnLCAnc2hhMzg0JywgJ3NoYTUxMicpCisKK2FsZ29yaXRobXMgPSBfX2Fsd2F5c19zdXBwb3J0ZWQKKworX19hbGxfXyA9IF9fYWx3YXlzX3N1cHBvcnRlZCArICgnbmV3JywgJ2FsZ29yaXRobXMnKQorCiAKIGRlZiBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKG5hbWUpOgogICAgIGlmIG5hbWUgaW4gKCdTSEExJywgJ3NoYTEnKToKQEAgLTc3LDcgKzg1LDE5IEBACiAgICAgICAgIGVsaWYgYnMgPT0gJzM4NCc6CiAgICAgICAgICAgICByZXR1cm4gX3NoYTUxMi5zaGEzODQKIAotICAgIHJhaXNlIFZhbHVlRXJyb3IsICJ1bnN1cHBvcnRlZCBoYXNoIHR5cGUiCisgICAgcmFpc2UgVmFsdWVFcnJvcigndW5zdXBwb3J0ZWQgaGFzaCB0eXBlICVzJyAlIG5hbWUpCisKKworZGVmIF9fZ2V0X29wZW5zc2xfY29uc3RydWN0b3IobmFtZSk6CisgICAgdHJ5OgorICAgICAgICBmID0gZ2V0YXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfJyArIG5hbWUpCisgICAgICAgICMgQWxsb3cgdGhlIEMgbW9kdWxlIHRvIHJhaXNlIFZhbHVlRXJyb3IuICBUaGUgZnVuY3Rpb24gd2lsbCBiZQorICAgICAgICAjIGRlZmluZWQgYnV0IHRoZSBoYXNoIG5vdCBhY3R1YWxseSBhdmFpbGFibGUgdGhhbmtzIHRvIE9wZW5TU0wuCisgICAgICAgIGYoKQorICAgICAgICAjIFVzZSB0aGUgQyBmdW5jdGlvbiBkaXJlY3RseSAodmVyeSBmYXN0KQorICAgICAgICByZXR1cm4gZgorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICByZXR1cm4gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcihuYW1lKQogCiAKIGRlZiBfX3B5X25ldyhuYW1lLCBzdHJpbmc9JycpOgpAQCAtMTAzLDM5ICsxMjMsMjEgQEAKIAogdHJ5OgogICAgIGltcG9ydCBfaGFzaGxpYgotICAgICMgdXNlIHRoZSB3cmFwcGVyIG9mIHRoZSBDIGltcGxlbWVudGF0aW9uCiAgICAgbmV3ID0gX19oYXNoX25ldwotCi0gICAgZm9yIG9wZW5zc2xGdW5jTmFtZSBpbiBmaWx0ZXIobGFtYmRhIG46IG4uc3RhcnRzd2l0aCgnb3BlbnNzbF8nKSwgZGlyKF9oYXNobGliKSk6Ci0gICAgICAgIGZ1bmNOYW1lID0gb3BlbnNzbEZ1bmNOYW1lW2xlbignb3BlbnNzbF8nKTpdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgdHJ5IHRoZW0gYWxsLCBzb21lIG1heSBub3Qgd29yayBkdWUgdG8gdGhlIE9wZW5TU0wKLSAgICAgICAgICAgICMgdmVyc2lvbiBub3Qgc3VwcG9ydGluZyB0aGF0IGFsZ29yaXRobS4KLSAgICAgICAgICAgIGYgPSBnZXRhdHRyKF9oYXNobGliLCBvcGVuc3NsRnVuY05hbWUpCi0gICAgICAgICAgICBmKCkKLSAgICAgICAgICAgICMgVXNlIHRoZSBDIGZ1bmN0aW9uIGRpcmVjdGx5ICh2ZXJ5IGZhc3QpCi0gICAgICAgICAgICBleGVjIGZ1bmNOYW1lICsgJyA9IGYnCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgVXNlIHRoZSBidWlsdGluIGltcGxlbWVudGF0aW9uIGRpcmVjdGx5IChmYXN0KQotICAgICAgICAgICAgICAgIGV4ZWMgZnVuY05hbWUgKyAnID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcihmdW5jTmFtZSknCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAjIHRoaXMgb25lIGhhcyBubyBidWlsdGluIGltcGxlbWVudGF0aW9uLCBkb24ndCBkZWZpbmUgaXQKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgIyBjbGVhbiB1cCBvdXIgbG9jYWxzCi0gICAgZGVsIGYKLSAgICBkZWwgb3BlbnNzbEZ1bmNOYW1lCi0gICAgZGVsIGZ1bmNOYW1lCi0KKyAgICBfX2dldF9oYXNoID0gX19nZXRfb3BlbnNzbF9jb25zdHJ1Y3RvcgogZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgV2UgZG9uJ3QgaGF2ZSB0aGUgX2hhc2hsaWIgT3BlblNTTCBtb2R1bGU/Ci0gICAgIyB1c2UgdGhlIGJ1aWx0IGluIGxlZ2FjeSBpbnRlcmZhY2VzIHZpYSBhIHdyYXBwZXIgZnVuY3Rpb24KICAgICBuZXcgPSBfX3B5X25ldworICAgIF9fZ2V0X2hhc2ggPSBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yCiAKLSAgICAjIGxvb2t1cCB0aGUgQyBmdW5jdGlvbiB0byB1c2UgZGlyZWN0bHkgZm9yIHRoZSBuYW1lZCBjb25zdHJ1Y3RvcnMKLSAgICBtZDUgPSBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKCdtZDUnKQotICAgIHNoYTEgPSBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGExJykKLSAgICBzaGEyMjQgPSBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEyMjQnKQotICAgIHNoYTI1NiA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTI1NicpCi0gICAgc2hhMzg0ID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMzg0JykKLSAgICBzaGE1MTIgPSBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGE1MTInKQorZm9yIF9fZnVuY19uYW1lIGluIF9fYWx3YXlzX3N1cHBvcnRlZDoKKyAgICAjIHRyeSB0aGVtIGFsbCwgc29tZSBtYXkgbm90IHdvcmsgZHVlIHRvIHRoZSBPcGVuU1NMCisgICAgIyB2ZXJzaW9uIG5vdCBzdXBwb3J0aW5nIHRoYXQgYWxnb3JpdGhtLgorICAgIHRyeToKKyAgICAgICAgZ2xvYmFscygpW19fZnVuY19uYW1lXSA9IF9fZ2V0X2hhc2goX19mdW5jX25hbWUpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIGltcG9ydCBsb2dnaW5nCisgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCdjb2RlIGZvciBoYXNoICVzIHdhcyBub3QgZm91bmQuJywgX19mdW5jX25hbWUpCisKKyMgQ2xlYW51cCBsb2NhbHMoKQorZGVsIF9fYWx3YXlzX3N1cHBvcnRlZCwgX19mdW5jX25hbWUsIF9fZ2V0X2hhc2gKK2RlbCBfX3B5X25ldywgX19oYXNoX25ldywgX19nZXRfb3BlbnNzbF9jb25zdHJ1Y3RvcgpkaWZmIC0tZ2l0IGEvTGliL2hlYXBxLnB5IGIvTGliL2hlYXBxLnB5CmluZGV4IDQ4ZjgwNGEuLmE0NGQxYmUgMTAwNjQ0Ci0tLSBhL0xpYi9oZWFwcS5weQorKysgYi9MaWIvaGVhcHEucHkKQEAgLTEyOSw4ICsxMjksOCBAQAogX19hbGxfXyA9IFsnaGVhcHB1c2gnLCAnaGVhcHBvcCcsICdoZWFwaWZ5JywgJ2hlYXByZXBsYWNlJywgJ21lcmdlJywKICAgICAgICAgICAgJ25sYXJnZXN0JywgJ25zbWFsbGVzdCcsICdoZWFwcHVzaHBvcCddCiAKLWZyb20gaXRlcnRvb2xzIGltcG9ydCBpc2xpY2UsIHJlcGVhdCwgY291bnQsIGltYXAsIGl6aXAsIHRlZQotZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlciwgbmVnCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXNsaWNlLCByZXBlYXQsIGNvdW50LCBpbWFwLCBpemlwLCB0ZWUsIGNoYWluCitmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyCiBpbXBvcnQgYmlzZWN0CiAKIGRlZiBoZWFwcHVzaChoZWFwLCBpdGVtKToKQEAgLTMwOCw3ICszMDgsNyBAQAogCiAjIElmIGF2YWlsYWJsZSwgdXNlIEMgaW1wbGVtZW50YXRpb24KIHRyeToKLSAgICBmcm9tIF9oZWFwcSBpbXBvcnQgaGVhcHB1c2gsIGhlYXBwb3AsIGhlYXBpZnksIGhlYXByZXBsYWNlLCBubGFyZ2VzdCwgbnNtYWxsZXN0LCBoZWFwcHVzaHBvcAorICAgIGZyb20gX2hlYXBxIGltcG9ydCAqCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwogCkBAIC0zNTQsMTAgKzM1NCwzMiBAQAogCiAgICAgRXF1aXZhbGVudCB0bzogIHNvcnRlZChpdGVyYWJsZSwga2V5PWtleSlbOm5dCiAgICAgIiIiCisgICAgIyBTaG9ydC1jdXQgZm9yIG49PTEgaXMgdG8gdXNlIG1pbigpIHdoZW4gbGVuKGl0ZXJhYmxlKT4wCisgICAgaWYgbiA9PSAxOgorICAgICAgICBpdCA9IGl0ZXIoaXRlcmFibGUpCisgICAgICAgIGhlYWQgPSBsaXN0KGlzbGljZShpdCwgMSkpCisgICAgICAgIGlmIG5vdCBoZWFkOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGlmIGtleSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFttaW4oY2hhaW4oaGVhZCwgaXQpKV0KKyAgICAgICAgcmV0dXJuIFttaW4oY2hhaW4oaGVhZCwgaXQpLCBrZXk9a2V5KV0KKworICAgICMgV2hlbiBuPj1zaXplLCBpdCdzIGZhc3RlciB0byB1c2Ugc29ydCgpCisgICAgdHJ5OgorICAgICAgICBzaXplID0gbGVuKGl0ZXJhYmxlKQorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBpZiBuID49IHNpemU6CisgICAgICAgICAgICByZXR1cm4gc29ydGVkKGl0ZXJhYmxlLCBrZXk9a2V5KVs6bl0KKworICAgICMgV2hlbiBrZXkgaXMgbm9uZSwgdXNlIHNpbXBsZXIgZGVjb3JhdGlvbgogICAgIGlmIGtleSBpcyBOb25lOgogICAgICAgICBpdCA9IGl6aXAoaXRlcmFibGUsIGNvdW50KCkpICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWNvcmF0ZQogICAgICAgICByZXN1bHQgPSBfbnNtYWxsZXN0KG4sIGl0KQogICAgICAgICByZXR1cm4gbWFwKGl0ZW1nZXR0ZXIoMCksIHJlc3VsdCkgICAgICAgICAgICAgICAgICAgIyB1bmRlY29yYXRlCisKKyAgICAjIEdlbmVyYWwgY2FzZSwgc2xvd2VzdCBtZXRob2QKICAgICBpbjEsIGluMiA9IHRlZShpdGVyYWJsZSkKICAgICBpdCA9IGl6aXAoaW1hcChrZXksIGluMSksIGNvdW50KCksIGluMikgICAgICAgICAgICAgICAgICMgZGVjb3JhdGUKICAgICByZXN1bHQgPSBfbnNtYWxsZXN0KG4sIGl0KQpAQCAtMzY5LDEyICszOTEsMzUgQEAKIAogICAgIEVxdWl2YWxlbnQgdG86ICBzb3J0ZWQoaXRlcmFibGUsIGtleT1rZXksIHJldmVyc2U9VHJ1ZSlbOm5dCiAgICAgIiIiCisKKyAgICAjIFNob3J0LWN1dCBmb3Igbj09MSBpcyB0byB1c2UgbWF4KCkgd2hlbiBsZW4oaXRlcmFibGUpPjAKKyAgICBpZiBuID09IDE6CisgICAgICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKKyAgICAgICAgaGVhZCA9IGxpc3QoaXNsaWNlKGl0LCAxKSkKKyAgICAgICAgaWYgbm90IGhlYWQ6CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgaWYga2V5IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gW21heChjaGFpbihoZWFkLCBpdCkpXQorICAgICAgICByZXR1cm4gW21heChjaGFpbihoZWFkLCBpdCksIGtleT1rZXkpXQorCisgICAgIyBXaGVuIG4+PXNpemUsIGl0J3MgZmFzdGVyIHRvIHVzZSBzb3J0KCkKKyAgICB0cnk6CisgICAgICAgIHNpemUgPSBsZW4oaXRlcmFibGUpCisgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIG4gPj0gc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBzb3J0ZWQoaXRlcmFibGUsIGtleT1rZXksIHJldmVyc2U9VHJ1ZSlbOm5dCisKKyAgICAjIFdoZW4ga2V5IGlzIG5vbmUsIHVzZSBzaW1wbGVyIGRlY29yYXRpb24KICAgICBpZiBrZXkgaXMgTm9uZToKLSAgICAgICAgaXQgPSBpemlwKGl0ZXJhYmxlLCBpbWFwKG5lZywgY291bnQoKSkpICAgICAgICAgICAgICMgZGVjb3JhdGUKKyAgICAgICAgaXQgPSBpemlwKGl0ZXJhYmxlLCBjb3VudCgwLC0xKSkgICAgICAgICAgICAgICAgICAgICMgZGVjb3JhdGUKICAgICAgICAgcmVzdWx0ID0gX25sYXJnZXN0KG4sIGl0KQogICAgICAgICByZXR1cm4gbWFwKGl0ZW1nZXR0ZXIoMCksIHJlc3VsdCkgICAgICAgICAgICAgICAgICAgIyB1bmRlY29yYXRlCisKKyAgICAjIEdlbmVyYWwgY2FzZSwgc2xvd2VzdCBtZXRob2QKICAgICBpbjEsIGluMiA9IHRlZShpdGVyYWJsZSkKLSAgICBpdCA9IGl6aXAoaW1hcChrZXksIGluMSksIGltYXAobmVnLCBjb3VudCgpKSwgaW4yKSAgICAgICMgZGVjb3JhdGUKKyAgICBpdCA9IGl6aXAoaW1hcChrZXksIGluMSksIGNvdW50KDAsLTEpLCBpbjIpICAgICAgICAgICAgICMgZGVjb3JhdGUKICAgICByZXN1bHQgPSBfbmxhcmdlc3QobiwgaXQpCiAgICAgcmV0dXJuIG1hcChpdGVtZ2V0dGVyKDIpLCByZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAjIHVuZGVjb3JhdGUKIApkaWZmIC0tZ2l0IGEvTGliL2h0dHBsaWIucHkgYi9MaWIvaHR0cGxpYi5weQppbmRleCA2ODBlODc1Li41YWYwZDAyIDEwMDY0NAotLS0gYS9MaWIvaHR0cGxpYi5weQorKysgYi9MaWIvaHR0cGxpYi5weQpAQCAtNjcsNiArNjcsNyBAQAogIiIiCiAKIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CitpbXBvcnQgb3MKIGltcG9ydCBzb2NrZXQKIGZyb20gc3lzIGltcG9ydCBweTNrd2FybmluZwogZnJvbSB1cmxwYXJzZSBpbXBvcnQgdXJsc3BsaXQKQEAgLTIxMSw2ICsyMTIsOSBAQAogIyBtYXhpbWFsIGFtb3VudCBvZiBkYXRhIHRvIHJlYWQgYXQgb25lIHRpbWUgaW4gX3NhZmVfcmVhZAogTUFYQU1PVU5UID0gMTA0ODU3NgogCisjIG1heGltYWwgbGluZSBsZW5ndGggd2hlbiBjYWxsaW5nIHJlYWRsaW5lKCkuCitfTUFYTElORSA9IDY1NTM2CisKIGNsYXNzIEhUVFBNZXNzYWdlKG1pbWV0b29scy5NZXNzYWdlKToKIAogICAgIGRlZiBhZGRoZWFkZXIoc2VsZiwga2V5LCB2YWx1ZSk6CkBAIC0yNzMsNyArMjc3LDkgQEAKICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgICAgICAgICAgc3RhcnRvZmxpbmUgPSB0ZWxsID0gTm9uZQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNlZWthYmxlID0gMAotICAgICAgICAgICAgbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoX01BWExJTkUgKyAxKQorICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gX01BWExJTkU6CisgICAgICAgICAgICAgICAgcmFpc2UgTGluZVRvb0xvbmcoImhlYWRlciBsaW5lIikKICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gJ0VPRiBpbiBoZWFkZXJzJwogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0zMjYsOCArMzMyLDE4IEBACiAKICAgICAjIFNlZSBSRkMgMjYxNiBzZWMgMTkuNiBhbmQgUkZDIDE5NDUgc2VjIDYgZm9yIGRldGFpbHMuCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaywgZGVidWdsZXZlbD0wLCBzdHJpY3Q9MCwgbWV0aG9kPU5vbmUpOgotICAgICAgICBzZWxmLmZwID0gc29jay5tYWtlZmlsZSgncmInLCAwKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIHN0cmljdD0wLCBtZXRob2Q9Tm9uZSwgYnVmZmVyaW5nPUZhbHNlKToKKyAgICAgICAgaWYgYnVmZmVyaW5nOgorICAgICAgICAgICAgIyBUaGUgY2FsbGVyIHdvbid0IGJlIHVzaW5nIGFueSBzb2NrLnJlY3YoKSBjYWxscywgc28gYnVmZmVyaW5nCisgICAgICAgICAgICAjIGlzIGZpbmUgYW5kIHJlY29tbWVuZGVkIGZvciBwZXJmb3JtYW5jZS4KKyAgICAgICAgICAgIHNlbGYuZnAgPSBzb2NrLm1ha2VmaWxlKCdyYicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBidWZmZXIgc2l6ZSBpcyBzcGVjaWZpZWQgYXMgemVybywgYmVjYXVzZSB0aGUgaGVhZGVycyBvZgorICAgICAgICAgICAgIyB0aGUgcmVzcG9uc2UgYXJlIHJlYWQgd2l0aCByZWFkbGluZSgpLiAgSWYgdGhlIHJlYWRzIHdlcmUKKyAgICAgICAgICAgICMgYnVmZmVyZWQgdGhlIHJlYWRsaW5lKCkgY2FsbHMgY291bGQgY29uc3VtZSBzb21lIG9mIHRoZQorICAgICAgICAgICAgIyByZXNwb25zZSwgd2hpY2ggbWFrZSBiZSByZWFkIHZpYSBhIHJlY3YoKSBvbiB0aGUgdW5kZXJseWluZworICAgICAgICAgICAgIyBzb2NrZXQuCisgICAgICAgICAgICBzZWxmLmZwID0gc29jay5tYWtlZmlsZSgncmInLCAwKQogICAgICAgICBzZWxmLmRlYnVnbGV2ZWwgPSBkZWJ1Z2xldmVsCiAgICAgICAgIHNlbGYuc3RyaWN0ID0gc3RyaWN0CiAgICAgICAgIHNlbGYuX21ldGhvZCA9IG1ldGhvZApAQCAtMzkzLDcgKzQwOSwxMCBAQAogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAjIHNraXAgdGhlIGhlYWRlciBmcm9tIHRoZSAxMDAgcmVzcG9uc2UKICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgc2tpcCA9IHNlbGYuZnAucmVhZGxpbmUoKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgc2tpcCA9IHNlbGYuZnAucmVhZGxpbmUoX01BWExJTkUgKyAxKQorICAgICAgICAgICAgICAgIGlmIGxlbihza2lwKSA+IF9NQVhMSU5FOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBMaW5lVG9vTG9uZygiaGVhZGVyIGxpbmUiKQorICAgICAgICAgICAgICAgIHNraXAgPSBza2lwLnN0cmlwKCkKICAgICAgICAgICAgICAgICBpZiBub3Qgc2tpcDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgpAQCAtNTUyLDcgKzU3MSw5IEBACiAgICAgICAgIHZhbHVlID0gW10KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGlmIGNodW5rX2xlZnQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5mcC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoX01BWExJTkUgKyAxKQorICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IF9NQVhMSU5FOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBMaW5lVG9vTG9uZygiY2h1bmsgc2l6ZSIpCiAgICAgICAgICAgICAgICAgaSA9IGxpbmUuZmluZCgnOycpCiAgICAgICAgICAgICAgICAgaWYgaSA+PSAwOgogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6aV0gIyBzdHJpcCBjaHVuay1leHRlbnNpb25zCkBAIC01ODcsNyArNjA4LDkgQEAKICAgICAgICAgIyByZWFkIGFuZCBkaXNjYXJkIHRyYWlsZXIgdXAgdG8gdGhlIENSTEYgdGVybWluYXRvcgogICAgICAgICAjIyMgbm90ZTogd2Ugc2hvdWxkbid0IGhhdmUgYW55IHRyYWlsZXJzIQogICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoX01BWExJTkUgKyAxKQorICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gX01BWExJTkU6CisgICAgICAgICAgICAgICAgcmFpc2UgTGluZVRvb0xvbmcoInRyYWlsZXIgbGluZSIpCiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAjIGEgdmFuaXNoaW5nbHkgc21hbGwgbnVtYmVyIG9mIHNpdGVzIEVPRiB3aXRob3V0CiAgICAgICAgICAgICAgICAgIyBzZW5kaW5nIHRoZSB0cmFpbGVyCkBAIC02MTQsNiArNjM3LDExIEBACiAgICAgICAgIHJlYWRpbmcuIElmIHRoZSBieXRlcyBhcmUgdHJ1bHkgbm90IGF2YWlsYWJsZSAoZHVlIHRvIEVPRiksIHRoZW4gdGhlCiAgICAgICAgIEluY29tcGxldGVSZWFkIGV4Y2VwdGlvbiBjYW4gYmUgdXNlZCB0byBkZXRlY3QgdGhlIHByb2JsZW0uCiAgICAgICAgICIiIgorICAgICAgICAjIE5PVEUoZ3BzKTogQXMgb2Ygc3ZuIHI3NDQyNiBzb2NrZXQuX2ZpbGVvYmplY3QucmVhZCh4KSB3aWxsIG5ldmVyCisgICAgICAgICMgcmV0dXJuIGxlc3MgdGhhbiB4IGJ5dGVzIHVubGVzcyBFT0YgaXMgZW5jb3VudGVyZWQuICBJdCBub3cgaGFuZGxlcworICAgICAgICAjIHNpZ25hbCBpbnRlcnJ1cHRpb25zIChzb2NrZXQuZXJyb3IgRUlOVFIpIGludGVybmFsbHkuICBUaGlzIGNvZGUKKyAgICAgICAgIyBuZXZlciBjYXVnaHQgdGhhdCBleGNlcHRpb24gYW55d2F5cy4gIEl0IHNlZW1zIGxhcmdlbHkgcG9pbnRsZXNzLgorICAgICAgICAjIHNlbGYuZnAucmVhZChhbXQpIHdpbGwgd29yayBmaW5lLgogICAgICAgICBzID0gW10KICAgICAgICAgd2hpbGUgYW10ID4gMDoKICAgICAgICAgICAgIGNodW5rID0gc2VsZi5mcC5yZWFkKG1pbihhbXQsIE1BWEFNT1VOVCkpCkBAIC02MjMsNiArNjUxLDkgQEAKICAgICAgICAgICAgIGFtdCAtPSBsZW4oY2h1bmspCiAgICAgICAgIHJldHVybiAnJy5qb2luKHMpCiAKKyAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5mcC5maWxlbm8oKQorCiAgICAgZGVmIGdldGhlYWRlcihzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgogICAgICAgICBpZiBzZWxmLm1zZyBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgUmVzcG9uc2VOb3RSZWFkeSgpCkBAIC02NDcsOCArNjc4LDkgQEAKICAgICBzdHJpY3QgPSAwCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBzdHJpY3Q9Tm9uZSwKLSAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgorICAgICAgICAgICAgICAgICB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwgc291cmNlX2FkZHJlc3M9Tm9uZSk6CiAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5zb3VyY2VfYWRkcmVzcyA9IHNvdXJjZV9hZGRyZXNzCiAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKICAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KICAgICAgICAgc2VsZi5fX3Jlc3BvbnNlID0gTm9uZQpAQCAtNjYyLDcgKzY5NCw3IEBACiAgICAgICAgIGlmIHN0cmljdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuc3RyaWN0ID0gc3RyaWN0CiAKLSAgICBkZWYgX3NldF90dW5uZWwoc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIGRlZiBzZXRfdHVubmVsKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgaGVhZGVycz1Ob25lKToKICAgICAgICAgIiIiIFNldHMgdXAgdGhlIGhvc3QgYW5kIHRoZSBwb3J0IGZvciB0aGUgSFRUUCBDT05ORUNUIFR1bm5lbGxpbmcuCiAKICAgICAgICAgVGhlIGhlYWRlcnMgYXJndW1lbnQgc2hvdWxkIGJlIGEgbWFwcGluZyBvZiBleHRyYSBIVFRQIGhlYWRlcnMKQEAgLTcxMCwxNCArNzQyLDE2IEBACiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoIlR1bm5lbCBjb25uZWN0aW9uIGZhaWxlZDogJWQgJXMiICUgKGNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RyaXAoKSkpCiAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBsaW5lID0gcmVzcG9uc2UuZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgbGluZSA9IHJlc3BvbnNlLmZwLnJlYWRsaW5lKF9NQVhMSU5FICsgMSkKKyAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IF9NQVhMSU5FOgorICAgICAgICAgICAgICAgIHJhaXNlIExpbmVUb29Mb25nKCJoZWFkZXIgbGluZSIpCiAgICAgICAgICAgICBpZiBsaW5lID09ICdcclxuJzogYnJlYWsKIAogCiAgICAgZGVmIGNvbm5lY3Qoc2VsZik6CiAgICAgICAgICIiIkNvbm5lY3QgdG8gdGhlIGhvc3QgYW5kIHBvcnQgc3BlY2lmaWVkIGluIF9faW5pdF9fLiIiIgogICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKHNlbGYuaG9zdCxzZWxmLnBvcnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0LCBzZWxmLnNvdXJjZV9hZGRyZXNzKQogCiAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgogICAgICAgICAgICAgc2VsZi5fdHVubmVsKCkKQEAgLTczMiwzNSArNzY2LDI1IEBACiAgICAgICAgICAgICBzZWxmLl9fcmVzcG9uc2UgPSBOb25lCiAgICAgICAgIHNlbGYuX19zdGF0ZSA9IF9DU19JRExFCiAKLSAgICBkZWYgc2VuZChzZWxmLCBzdHIpOgotICAgICAgICAiIiJTZW5kIGBzdHInIHRvIHRoZSBzZXJ2ZXIuIiIiCisgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIlNlbmQgYGRhdGEnIHRvIHRoZSBzZXJ2ZXIuIiIiCiAgICAgICAgIGlmIHNlbGYuc29jayBpcyBOb25lOgogICAgICAgICAgICAgaWYgc2VsZi5hdXRvX29wZW46CiAgICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0KCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgTm90Q29ubmVjdGVkKCkKIAotICAgICAgICAjIHNlbmQgdGhlIGRhdGEgdG8gdGhlIHNlcnZlci4gaWYgd2UgZ2V0IGEgYnJva2VuIHBpcGUsIHRoZW4gY2xvc2UKLSAgICAgICAgIyB0aGUgc29ja2V0LiB3ZSB3YW50IHRvIHJlY29ubmVjdCB3aGVuIHNvbWVib2R5IHRyaWVzIHRvIHNlbmQgYWdhaW4uCi0gICAgICAgICMKLSAgICAgICAgIyBOT1RFOiB3ZSBETyBwcm9wYWdhdGUgdGhlIGVycm9yLCB0aG91Z2gsIGJlY2F1c2Ugd2UgY2Fubm90IHNpbXBseQotICAgICAgICAjICAgICAgIGlnbm9yZSB0aGUgZXJyb3IuLi4gdGhlIGNhbGxlciB3aWxsIGtub3cgaWYgdGhleSBjYW4gcmV0cnkuCiAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6Ci0gICAgICAgICAgICBwcmludCAic2VuZDoiLCByZXByKHN0cikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYmxvY2tzaXplPTgxOTIKLSAgICAgICAgICAgIGlmIGhhc2F0dHIoc3RyLCdyZWFkJykgYW5kIG5vdCBpc2luc3RhbmNlKHN0ciwgYXJyYXkpOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50ICJzZW5kSW5nIGEgcmVhZCgpYWJsZSIKLSAgICAgICAgICAgICAgICBkYXRhPXN0ci5yZWFkKGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgICAgICB3aGlsZSBkYXRhOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChkYXRhKQotICAgICAgICAgICAgICAgICAgICBkYXRhPXN0ci5yZWFkKGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwoc3RyKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCB2OgotICAgICAgICAgICAgaWYgdi5hcmdzWzBdID09IDMyOiAgICAgICMgQnJva2VuIHBpcGUKLSAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBwcmludCAic2VuZDoiLCByZXByKGRhdGEpCisgICAgICAgIGJsb2Nrc2l6ZSA9IDgxOTIKKyAgICAgICAgaWYgaGFzYXR0cihkYXRhLCdyZWFkJykgYW5kIG5vdCBpc2luc3RhbmNlKGRhdGEsIGFycmF5KToKKyAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50ICJzZW5kSW5nIGEgcmVhZCgpYWJsZSIKKyAgICAgICAgICAgIGRhdGFibG9jayA9IGRhdGEucmVhZChibG9ja3NpemUpCisgICAgICAgICAgICB3aGlsZSBkYXRhYmxvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwoZGF0YWJsb2NrKQorICAgICAgICAgICAgICAgIGRhdGFibG9jayA9IGRhdGEucmVhZChibG9ja3NpemUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChkYXRhKQogCiAgICAgZGVmIF9vdXRwdXQoc2VsZiwgcyk6CiAgICAgICAgICIiIkFkZCBhIGxpbmUgb2Ygb3V0cHV0IHRvIHRoZSBjdXJyZW50IHJlcXVlc3QgYnVmZmVyLgpAQCAtNzY5LDE1ICs3OTMsMjYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQocykKIAotICAgIGRlZiBfc2VuZF9vdXRwdXQoc2VsZik6CisgICAgZGVmIF9zZW5kX291dHB1dChzZWxmLCBtZXNzYWdlX2JvZHk9Tm9uZSk6CiAgICAgICAgICIiIlNlbmQgdGhlIGN1cnJlbnRseSBidWZmZXJlZCByZXF1ZXN0IGFuZCBjbGVhciB0aGUgYnVmZmVyLgogCiAgICAgICAgIEFwcGVuZHMgYW4gZXh0cmEgXFxyXFxuIHRvIHRoZSBidWZmZXIuCisgICAgICAgIEEgbWVzc2FnZV9ib2R5IG1heSBiZSBzcGVjaWZpZWQsIHRvIGJlIGFwcGVuZGVkIHRvIHRoZSByZXF1ZXN0LgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fYnVmZmVyLmV4dGVuZCgoIiIsICIiKSkKICAgICAgICAgbXNnID0gIlxyXG4iLmpvaW4oc2VsZi5fYnVmZmVyKQogICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpdCisgICAgICAgICMgSWYgbXNnIGFuZCBtZXNzYWdlX2JvZHkgYXJlIHNlbnQgaW4gYSBzaW5nbGUgc2VuZCgpIGNhbGwsCisgICAgICAgICMgaXQgd2lsbCBhdm9pZCBwZXJmb3JtYW5jZSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIGludGVyYWN0aW9uCisgICAgICAgICMgYmV0d2VlbiBkZWxheWVkIGFjayBhbmQgdGhlIE5hZ2xlIGFsZ29yaXRoaW0uCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZV9ib2R5LCBzdHIpOgorICAgICAgICAgICAgbXNnICs9IG1lc3NhZ2VfYm9keQorICAgICAgICAgICAgbWVzc2FnZV9ib2R5ID0gTm9uZQogICAgICAgICBzZWxmLnNlbmQobXNnKQorICAgICAgICBpZiBtZXNzYWdlX2JvZHkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjbWVzc2FnZV9ib2R5IHdhcyBub3QgYSBzdHJpbmcgKGkuZS4gaXQgaXMgYSBmaWxlKSBhbmQKKyAgICAgICAgICAgICN3ZSBtdXN0IHJ1biB0aGUgcmlzayBvZiBOYWdsZQorICAgICAgICAgICAgc2VsZi5zZW5kKG1lc3NhZ2VfYm9keSkKIAogICAgIGRlZiBwdXRyZXF1ZXN0KHNlbGYsIG1ldGhvZCwgdXJsLCBza2lwX2hvc3Q9MCwgc2tpcF9hY2NlcHRfZW5jb2Rpbmc9MCk6CiAgICAgICAgICIiIlNlbmQgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuCkBAIC04MjEsOSArODU2LDkgQEAKICAgICAgICAgc2VsZi5fbWV0aG9kID0gbWV0aG9kCiAgICAgICAgIGlmIG5vdCB1cmw6CiAgICAgICAgICAgICB1cmwgPSAnLycKLSAgICAgICAgc3RyID0gJyVzICVzICVzJyAlIChtZXRob2QsIHVybCwgc2VsZi5faHR0cF92c25fc3RyKQorICAgICAgICBoZHIgPSAnJXMgJXMgJXMnICUgKG1ldGhvZCwgdXJsLCBzZWxmLl9odHRwX3Zzbl9zdHIpCiAKLSAgICAgICAgc2VsZi5fb3V0cHV0KHN0cikKKyAgICAgICAgc2VsZi5fb3V0cHV0KGhkcikKIAogICAgICAgICBpZiBzZWxmLl9odHRwX3ZzbiA9PSAxMToKICAgICAgICAgICAgICMgSXNzdWUgc29tZSBzdGFuZGFyZCBoZWFkZXJzIGZvciBiZXR0ZXIgSFRUUC8xLjEgY29tcGxpYW5jZQpAQCAtODU4LDYgKzg5Myw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBob3N0X2VuYyA9IHNlbGYuaG9zdC5lbmNvZGUoImFzY2lpIikKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZW5jID0gc2VsZi5ob3N0LmVuY29kZSgiaWRuYSIpCisgICAgICAgICAgICAgICAgICAgICMgV3JhcCB0aGUgSVB2NiBIb3N0IEhlYWRlciB3aXRoIFtdIChSRkMgMjczMikKKyAgICAgICAgICAgICAgICAgICAgaWYgaG9zdF9lbmMuZmluZCgnOicpID49IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBob3N0X2VuYyA9ICJbIiArIGhvc3RfZW5jICsgIl0iCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucG9ydCA9PSBzZWxmLmRlZmF1bHRfcG9ydDoKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHV0aGVhZGVyKCdIb3N0JywgaG9zdF9lbmMpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CkBAIC04ODYsNyArOTI0LDcgQEAKICAgICAgICAgICAgICMgRm9yIEhUVFAvMS4wLCB0aGUgc2VydmVyIHdpbGwgYXNzdW1lICJub3QgY2h1bmtlZCIKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiBwdXRoZWFkZXIoc2VsZiwgaGVhZGVyLCB2YWx1ZSk6CisgICAgZGVmIHB1dGhlYWRlcihzZWxmLCBoZWFkZXIsICp2YWx1ZXMpOgogICAgICAgICAiIiJTZW5kIGEgcmVxdWVzdCBoZWFkZXIgbGluZSB0byB0aGUgc2VydmVyLgogCiAgICAgICAgIEZvciBleGFtcGxlOiBoLnB1dGhlYWRlcignQWNjZXB0JywgJ3RleHQvaHRtbCcpCkBAIC04OTQsMzMgKzkzMiw0NyBAQAogICAgICAgICBpZiBzZWxmLl9fc3RhdGUgIT0gX0NTX1JFUV9TVEFSVEVEOgogICAgICAgICAgICAgcmFpc2UgQ2Fubm90U2VuZEhlYWRlcigpCiAKLSAgICAgICAgc3RyID0gJyVzOiAlcycgJSAoaGVhZGVyLCB2YWx1ZSkKLSAgICAgICAgc2VsZi5fb3V0cHV0KHN0cikKKyAgICAgICAgaGRyID0gJyVzOiAlcycgJSAoaGVhZGVyLCAnXHJcblx0Jy5qb2luKFtzdHIodikgZm9yIHYgaW4gdmFsdWVzXSkpCisgICAgICAgIHNlbGYuX291dHB1dChoZHIpCiAKLSAgICBkZWYgZW5kaGVhZGVycyhzZWxmKToKLSAgICAgICAgIiIiSW5kaWNhdGUgdGhhdCB0aGUgbGFzdCBoZWFkZXIgbGluZSBoYXMgYmVlbiBzZW50IHRvIHRoZSBzZXJ2ZXIuIiIiCisgICAgZGVmIGVuZGhlYWRlcnMoc2VsZiwgbWVzc2FnZV9ib2R5PU5vbmUpOgorICAgICAgICAiIiJJbmRpY2F0ZSB0aGF0IHRoZSBsYXN0IGhlYWRlciBsaW5lIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHNlcnZlci4KIAorICAgICAgICBUaGlzIG1ldGhvZCBzZW5kcyB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyLiAgVGhlIG9wdGlvbmFsCisgICAgICAgIG1lc3NhZ2VfYm9keSBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBwYXNzIG1lc3NhZ2UgYm9keQorICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuICBUaGUgbWVzc2FnZSBib2R5IHdpbGwgYmUgc2VudCBpbgorICAgICAgICB0aGUgc2FtZSBwYWNrZXQgYXMgdGhlIG1lc3NhZ2UgaGVhZGVycyBpZiBwb3NzaWJsZS4gIFRoZQorICAgICAgICBtZXNzYWdlX2JvZHkgc2hvdWxkIGJlIGEgc3RyaW5nLgorICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5fX3N0YXRlID09IF9DU19SRVFfU1RBUlRFRDoKICAgICAgICAgICAgIHNlbGYuX19zdGF0ZSA9IF9DU19SRVFfU0VOVAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgQ2Fubm90U2VuZEhlYWRlcigpCi0KLSAgICAgICAgc2VsZi5fc2VuZF9vdXRwdXQoKQorICAgICAgICBzZWxmLl9zZW5kX291dHB1dChtZXNzYWdlX2JvZHkpCiAKICAgICBkZWYgcmVxdWVzdChzZWxmLCBtZXRob2QsIHVybCwgYm9keT1Ob25lLCBoZWFkZXJzPXt9KToKICAgICAgICAgIiIiU2VuZCBhIGNvbXBsZXRlIHJlcXVlc3QgdG8gdGhlIHNlcnZlci4iIiIKKyAgICAgICAgc2VsZi5fc2VuZF9yZXF1ZXN0KG1ldGhvZCwgdXJsLCBib2R5LCBoZWFkZXJzKQogCisgICAgZGVmIF9zZXRfY29udGVudF9sZW5ndGgoc2VsZiwgYm9keSk6CisgICAgICAgICMgU2V0IHRoZSBjb250ZW50LWxlbmd0aCBiYXNlZCBvbiB0aGUgYm9keS4KKyAgICAgICAgdGhlbGVuID0gTm9uZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9zZW5kX3JlcXVlc3QobWV0aG9kLCB1cmwsIGJvZHksIGhlYWRlcnMpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHY6Ci0gICAgICAgICAgICAjIHRyYXAgJ0Jyb2tlbiBwaXBlJyBpZiB3ZSdyZSBhbGxvd2VkIHRvIGF1dG9tYXRpY2FsbHkgcmVjb25uZWN0Ci0gICAgICAgICAgICBpZiB2LmFyZ3NbMF0gIT0gMzIgb3Igbm90IHNlbGYuYXV0b19vcGVuOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAjIHRyeSBvbmUgbW9yZSB0aW1lCi0gICAgICAgICAgICBzZWxmLl9zZW5kX3JlcXVlc3QobWV0aG9kLCB1cmwsIGJvZHksIGhlYWRlcnMpCisgICAgICAgICAgICB0aGVsZW4gPSBzdHIobGVuKGJvZHkpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCB0ZToKKyAgICAgICAgICAgICMgSWYgdGhpcyBpcyBhIGZpbGUtbGlrZSBvYmplY3QsIHRyeSB0bworICAgICAgICAgICAgIyBmc3RhdCBpdHMgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGhlbGVuID0gc3RyKG9zLmZzdGF0KGJvZHkuZmlsZW5vKCkpLnN0X3NpemUpCisgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAjIERvbid0IHNlbmQgYSBsZW5ndGggaWYgdGhpcyBmYWlsZWQKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCAiQ2Fubm90IHN0YXQhISIKKworICAgICAgICBpZiB0aGVsZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignQ29udGVudC1MZW5ndGgnLCB0aGVsZW4pCiAKICAgICBkZWYgX3NlbmRfcmVxdWVzdChzZWxmLCBtZXRob2QsIHVybCwgYm9keSwgaGVhZGVycyk6Ci0gICAgICAgICMgaG9ub3VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIEhvc3Q6IGFuZCBBY2NlcHQtRW5jb2RpbmcgaGVhZGVycworICAgICAgICAjIEhvbm9yIGV4cGxpY2l0bHkgcmVxdWVzdGVkIEhvc3Q6IGFuZCBBY2NlcHQtRW5jb2Rpbmc6IGhlYWRlcnMuCiAgICAgICAgIGhlYWRlcl9uYW1lcyA9IGRpY3QuZnJvbWtleXMoW2subG93ZXIoKSBmb3IgayBpbiBoZWFkZXJzXSkKICAgICAgICAgc2tpcHMgPSB7fQogICAgICAgICBpZiAnaG9zdCcgaW4gaGVhZGVyX25hbWVzOgpAQCAtOTMxLDI5ICs5ODMsMTIgQEAKICAgICAgICAgc2VsZi5wdXRyZXF1ZXN0KG1ldGhvZCwgdXJsLCAqKnNraXBzKQogCiAgICAgICAgIGlmIGJvZHkgYW5kICgnY29udGVudC1sZW5ndGgnIG5vdCBpbiBoZWFkZXJfbmFtZXMpOgotICAgICAgICAgICAgdGhlbGVuPU5vbmUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0aGVsZW49c3RyKGxlbihib2R5KSkKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIHRlOgotICAgICAgICAgICAgICAgICMgSWYgdGhpcyBpcyBhIGZpbGUtbGlrZSBvYmplY3QsIHRyeSB0bwotICAgICAgICAgICAgICAgICMgZnN0YXQgaXRzIGZpbGUgZGVzY3JpcHRvcgotICAgICAgICAgICAgICAgIGltcG9ydCBvcwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdGhlbGVuID0gc3RyKG9zLmZzdGF0KGJvZHkuZmlsZW5vKCkpLnN0X3NpemUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgICMgRG9uJ3Qgc2VuZCBhIGxlbmd0aCBpZiB0aGlzIGZhaWxlZAotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCAiQ2Fubm90IHN0YXQhISIKLQotICAgICAgICAgICAgaWYgdGhlbGVuIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYucHV0aGVhZGVyKCdDb250ZW50LUxlbmd0aCcsdGhlbGVuKQorICAgICAgICAgICAgc2VsZi5fc2V0X2NvbnRlbnRfbGVuZ3RoKGJvZHkpCiAgICAgICAgIGZvciBoZHIsIHZhbHVlIGluIGhlYWRlcnMuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcihoZHIsIHZhbHVlKQotICAgICAgICBzZWxmLmVuZGhlYWRlcnMoKQorICAgICAgICBzZWxmLmVuZGhlYWRlcnMoYm9keSkKIAotICAgICAgICBpZiBib2R5OgotICAgICAgICAgICAgc2VsZi5zZW5kKGJvZHkpCi0KLSAgICBkZWYgZ2V0cmVzcG9uc2Uoc2VsZik6CisgICAgZGVmIGdldHJlc3BvbnNlKHNlbGYsIGJ1ZmZlcmluZz1GYWxzZSk6CiAgICAgICAgICJHZXQgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iCiAKICAgICAgICAgIyBpZiBhIHByaW9yIHJlc3BvbnNlIGhhcyBiZWVuIGNvbXBsZXRlZCwgdGhlbiBmb3JnZXQgYWJvdXQgaXQuCkBAIC05NzksMTMgKzEwMTQsMTUgQEAKICAgICAgICAgaWYgc2VsZi5fX3N0YXRlICE9IF9DU19SRVFfU0VOVCBvciBzZWxmLl9fcmVzcG9uc2U6CiAgICAgICAgICAgICByYWlzZSBSZXNwb25zZU5vdFJlYWR5KCkKIAorICAgICAgICBhcmdzID0gKHNlbGYuc29jaywpCisgICAgICAgIGt3ZHMgPSB7InN0cmljdCI6c2VsZi5zdHJpY3QsICJtZXRob2QiOnNlbGYuX21ldGhvZH0KICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKLSAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXNwb25zZV9jbGFzcyhzZWxmLnNvY2ssIHNlbGYuZGVidWdsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9c2VsZi5zdHJpY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPXNlbGYuX21ldGhvZCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXNwb25zZV9jbGFzcyhzZWxmLnNvY2ssIHN0cmljdD1zZWxmLnN0cmljdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9c2VsZi5fbWV0aG9kKQorICAgICAgICAgICAgYXJncyArPSAoc2VsZi5kZWJ1Z2xldmVsLCkKKyAgICAgICAgaWYgYnVmZmVyaW5nOgorICAgICAgICAgICAgI29ubHkgYWRkIHRoaXMga2V5d29yZCBpZiBub24tZGVmYXVsdCwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorICAgICAgICAgICAgI290aGVyIHJlc3BvbnNlX2NsYXNzZXMuCisgICAgICAgICAgICBrd2RzWyJidWZmZXJpbmciXSA9IFRydWU7CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXNwb25zZV9jbGFzcygqYXJncywgKiprd2RzKQogCiAgICAgICAgIHJlc3BvbnNlLmJlZ2luKCkKICAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLndpbGxfY2xvc2UgIT0gX1VOS05PV04KQEAgLTEwMjksNiArMTA2Niw3IEBACiAgICAgICAgICMgc2V0IHVwIGRlbGVnYXRpb24gdG8gZmxlc2ggb3V0IGludGVyZmFjZQogICAgICAgICBzZWxmLnNlbmQgPSBjb25uLnNlbmQKICAgICAgICAgc2VsZi5wdXRyZXF1ZXN0ID0gY29ubi5wdXRyZXF1ZXN0CisgICAgICAgIHNlbGYucHV0aGVhZGVyID0gY29ubi5wdXRoZWFkZXIKICAgICAgICAgc2VsZi5lbmRoZWFkZXJzID0gY29ubi5lbmRoZWFkZXJzCiAgICAgICAgIHNlbGYuc2V0X2RlYnVnbGV2ZWwgPSBjb25uLnNldF9kZWJ1Z2xldmVsCiAKQEAgLTEwNDgsMTEgKzEwODYsNyBAQAogICAgICAgICAiUHJvdmlkZSBhIGdldGZpbGUsIHNpbmNlIHRoZSBzdXBlcmNsYXNzJyBkb2VzIG5vdCB1c2UgdGhpcyBjb25jZXB0LiIKICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZQogCi0gICAgZGVmIHB1dGhlYWRlcihzZWxmLCBoZWFkZXIsICp2YWx1ZXMpOgotICAgICAgICAiVGhlIHN1cGVyY2xhc3MgYWxsb3dzIG9ubHkgb25lIHZhbHVlIGFyZ3VtZW50LiIKLSAgICAgICAgc2VsZi5fY29ubi5wdXRoZWFkZXIoaGVhZGVyLCAnXHJcblx0Jy5qb2luKHZhbHVlcykpCi0KLSAgICBkZWYgZ2V0cmVwbHkoc2VsZik6CisgICAgZGVmIGdldHJlcGx5KHNlbGYsIGJ1ZmZlcmluZz1GYWxzZSk6CiAgICAgICAgICIiIkNvbXBhdCBkZWZpbml0aW9uIHNpbmNlIHN1cGVyY2xhc3MgZG9lcyBub3QgZGVmaW5lIGl0LgogCiAgICAgICAgIFJldHVybnMgYSB0dXBsZSBjb25zaXN0aW5nIG9mOgpAQCAtMTA2MSw3ICsxMDk1LDEyIEBACiAgICAgICAgIC0gYW55IFJGQzgyMiBoZWFkZXJzIGluIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5fY29ubi5nZXRyZXNwb25zZSgpCisgICAgICAgICAgICBpZiBub3QgYnVmZmVyaW5nOgorICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5fY29ubi5nZXRyZXNwb25zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICNvbmx5IGFkZCB0aGlzIGtleXdvcmQgaWYgbm9uLWRlZmF1bHQgZm9yIGNvbXBhdGliaWxpdHkKKyAgICAgICAgICAgICAgICAjd2l0aCBvdGhlciBjb25uZWN0aW9uIGNsYXNzZXMKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYuX2Nvbm4uZ2V0cmVzcG9uc2UoYnVmZmVyaW5nKQogICAgICAgICBleGNlcHQgQmFkU3RhdHVzTGluZSwgZToKICAgICAgICAgICAgICMjIyBobW0uIGlmIGdldHJlc3BvbnNlKCkgZXZlciBjbG9zZXMgdGhlIHNvY2tldCBvbiBhIGJhZCByZXF1ZXN0LAogICAgICAgICAgICAgIyMjIHRoZW4gd2UgYXJlIGdvaW5nIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBzZWxmLnNvY2sKQEAgLTExMDEsMTUgKzExNDAsMTggQEAKICAgICAgICAgZGVmYXVsdF9wb3J0ID0gSFRUUFNfUE9SVAogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIGtleV9maWxlPU5vbmUsIGNlcnRfZmlsZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PU5vbmUsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKLSAgICAgICAgICAgIEhUVFBDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQsIHN0cmljdCwgdGltZW91dCkKKyAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1Ob25lLCB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgorICAgICAgICAgICAgSFRUUENvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgc3RyaWN0LCB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3MpCiAgICAgICAgICAgICBzZWxmLmtleV9maWxlID0ga2V5X2ZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydF9maWxlID0gY2VydF9maWxlCiAKICAgICAgICAgZGVmIGNvbm5lY3Qoc2VsZik6CiAgICAgICAgICAgICAiQ29ubmVjdCB0byBhIGhvc3Qgb24gYSBnaXZlbiAoU1NMKSBwb3J0LiIKIAotICAgICAgICAgICAgc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoc2VsZi5ob3N0LCBzZWxmLnBvcnQpLCBzZWxmLnRpbWVvdXQpCisgICAgICAgICAgICBzb2NrID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChzZWxmLmhvc3QsIHNlbGYucG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZW91dCwgc2VsZi5zb3VyY2VfYWRkcmVzcykKICAgICAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2sKICAgICAgICAgICAgICAgICBzZWxmLl90dW5uZWwoKQpAQCAtMTIwMCw5ICsxMjQyLDE2IEBACiAKIGNsYXNzIEJhZFN0YXR1c0xpbmUoSFRUUEV4Y2VwdGlvbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmUpOgorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIGxpbmUgPSByZXByKGxpbmUpCiAgICAgICAgIHNlbGYuYXJncyA9IGxpbmUsCiAgICAgICAgIHNlbGYubGluZSA9IGxpbmUKIAorY2xhc3MgTGluZVRvb0xvbmcoSFRUUEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmVfdHlwZSk6CisgICAgICAgIEhUVFBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMgd2hlbiByZWFkaW5nICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKF9NQVhMSU5FLCBsaW5lX3R5cGUpKQorCiAjIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogZXJyb3IgPSBIVFRQRXhjZXB0aW9uCiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0JpbmRpbmdzLnB5IGIvTGliL2lkbGVsaWIvQmluZGluZ3MucHkKaW5kZXggNzRhOTNkMy4uZWMyNzIwYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvQmluZGluZ3MucHkKKysrIGIvTGliL2lkbGVsaWIvQmluZGluZ3MucHkKQEAgLTk4LDE0ICs5OCw2IEBACiAgICAgIyBtZW51CiAgICAgZGVsIG1lbnVkZWZzWy0xXVsxXVswOjJdCiAKLSAgICBtZW51ZGVmcy5pbnNlcnQoMCwKLSAgICAgICAgICAgICgnYXBwbGljYXRpb24nLCBbCi0gICAgICAgICAgICAgICAgKCdBYm91dCBJRExFJywgJzw8YWJvdXQtaWRsZT4+JyksCi0gICAgICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgICAgICAoJ19QcmVmZXJlbmNlcy4uLi4nLCAnPDxvcGVuLWNvbmZpZy1kaWFsb2c+PicpLAotICAgICAgICAgICAgXSkpCi0KLQogZGVmYXVsdF9rZXlkZWZzID0gaWRsZUNvbmYuR2V0Q3VycmVudEtleVNldCgpCiAKIGRlbCBzeXMKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0NSRURJVFMudHh0IGIvTGliL2lkbGVsaWIvQ1JFRElUUy50eHQKaW5kZXggNDU2MDc5Yi4uNWZmNTk5ZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvQ1JFRElUUy50eHQKKysrIGIvTGliL2lkbGVsaWIvQ1JFRElUUy50eHQKQEAgLTI1LDggKzI1LDggQEAKIAogU2NvdHQgRGF2aWQgRGFuaWVscywgVGFsIEVpbmF0LCBIZXJuYW4gRm9mZmFuaSwgQ2hyaXN0b3MgR2Vvcmdpb3UsCiBKaW0gSmV3ZXR0LCBNYXJ0aW4gdi4gTPZ3aXMsIEphc29uIE9yZW5kb3JmZiwgR3VpbGhlcm1lIFBvbG8sIEpvc2ggUm9iYiwKLU5pZ2VsIFJvd2UsIEJydWNlIFNoZXJ3b29kLCBhbmQgSmVmZiBTaHV0ZSBoYXZlIHN1Ym1pdHRlZCB1c2VmdWwgcGF0Y2hlcy4KLVRoYW5rcywgZ3V5cyEKK05pZ2VsIFJvd2UsIEJydWNlIFNoZXJ3b29kLCBKZWZmIFNodXRlLCBhbmQgV2VlYmxlIGhhdmUgc3VibWl0dGVkIHVzZWZ1bAorcGF0Y2hlcy4gIFRoYW5rcywgZ3V5cyEKIAogRm9yIGFkZGl0aW9uYWwgZGV0YWlscyByZWZlciB0byBORVdTLnR4dCBhbmQgQ2hhbmdlbG9nLgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKaW5kZXggN2NjNjljYi4uYTQ4NzMwMiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CisrKyBiL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQpAQCAtMiw3ICsyLDYgQEAKIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgaW1wCi1mcm9tIGl0ZXJ0b29scyBpbXBvcnQgY291bnQKIGZyb20gVGtpbnRlciBpbXBvcnQgKgogaW1wb3J0IHRrU2ltcGxlRGlhbG9nCiBpbXBvcnQgdGtNZXNzYWdlQm94CkBAIC0yNyw4ICsyNiwxMCBAQAogICAgIG1ham9yLCBtaW5vciwgbWljcm8sIGxldmVsLCBzZXJpYWwgPSBzeXMudmVyc2lvbl9pbmZvCiAgICAgcmVsZWFzZSA9ICclcyVzJyAlIChtYWpvciwgbWlub3IpCiAgICAgaWYgbWljcm86Ci0gICAgICAgIHJlbGVhc2UgKz0gJyVzJyAlIG1pY3JvCi0gICAgaWYgbGV2ZWwgIT0gJ2ZpbmFsJzoKKyAgICAgICAgcmVsZWFzZSArPSAnJXMnICUgKG1pY3JvLCkKKyAgICBpZiBsZXZlbCA9PSAnY2FuZGlkYXRlJzoKKyAgICAgICAgcmVsZWFzZSArPSAncmMlcycgJSAoc2VyaWFsLCkKKyAgICBlbGlmIGxldmVsICE9ICdmaW5hbCc6CiAgICAgICAgIHJlbGVhc2UgKz0gJyVzJXMnICUgKGxldmVsWzBdLCBzZXJpYWwpCiAgICAgcmV0dXJuIHJlbGVhc2UKIApAQCAtMTM1LDYgKzEzNiwxNCBAQAogICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgogICAgICAgICAgICAgIyBDb21tYW5kLVcgb24gZWRpdG9yd2luZG93cyBkb2Vzbid0IHdvcmsgd2l0aG91dCB0aGlzLgogICAgICAgICAgICAgdGV4dC5iaW5kKCc8PGNsb3NlLXdpbmRvdz4+Jywgc2VsZi5jbG9zZV9ldmVudCkKKyAgICAgICAgICAgICMgU29tZSBPUyBYIHN5c3RlbXMgaGF2ZSBvbmx5IG9uZSBtb3VzZSBidXR0b24sCisgICAgICAgICAgICAjIHNvIHVzZSBjb250cm9sLWNsaWNrIGZvciBwdWxsZG93biBtZW51cyB0aGVyZS4KKyAgICAgICAgICAgICMgIChOb3RlLCBBcXVhVGsgZGVmaW5lcyA8Mj4gYXMgdGhlIHJpZ2h0IGJ1dHRvbiBpZgorICAgICAgICAgICAgIyAgIHByZXNlbnQgYW5kIHRoZSBUayBUZXh0IHdpZGdldCBhbHJlYWR5IGJpbmRzIDwyPi4pCisgICAgICAgICAgICB0ZXh0LmJpbmQoIjxDb250cm9sLUJ1dHRvbi0xPiIsc2VsZi5yaWdodF9tZW51X2V2ZW50KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBFbHNld2hlcmUsIHVzZSByaWdodC1jbGljayBmb3IgcHVsbGRvd24gbWVudXMuCisgICAgICAgICAgICB0ZXh0LmJpbmQoIjwzPiIsc2VsZi5yaWdodF9tZW51X2V2ZW50KQogICAgICAgICB0ZXh0LmJpbmQoIjw8Y3V0Pj4iLCBzZWxmLmN1dCkKICAgICAgICAgdGV4dC5iaW5kKCI8PGNvcHk+PiIsIHNlbGYuY29weSkKICAgICAgICAgdGV4dC5iaW5kKCI8PHBhc3RlPj4iLCBzZWxmLnBhc3RlKQpAQCAtMTUzLDcgKzE2Miw2IEBACiAgICAgICAgIHRleHQuYmluZCgiPDxmaW5kLXNlbGVjdGlvbj4+Iiwgc2VsZi5maW5kX3NlbGVjdGlvbl9ldmVudCkKICAgICAgICAgdGV4dC5iaW5kKCI8PHJlcGxhY2U+PiIsIHNlbGYucmVwbGFjZV9ldmVudCkKICAgICAgICAgdGV4dC5iaW5kKCI8PGdvdG8tbGluZT4+Iiwgc2VsZi5nb3RvX2xpbmVfZXZlbnQpCi0gICAgICAgIHRleHQuYmluZCgiPDM+Iiwgc2VsZi5yaWdodF9tZW51X2V2ZW50KQogICAgICAgICB0ZXh0LmJpbmQoIjw8c21hcnQtYmFja3NwYWNlPj4iLHNlbGYuc21hcnRfYmFja3NwYWNlX2V2ZW50KQogICAgICAgICB0ZXh0LmJpbmQoIjw8bmV3bGluZS1hbmQtaW5kZW50Pj4iLHNlbGYubmV3bGluZV9hbmRfaW5kZW50X2V2ZW50KQogICAgICAgICB0ZXh0LmJpbmQoIjw8c21hcnQtaW5kZW50Pj4iLHNlbGYuc21hcnRfaW5kZW50X2V2ZW50KQpAQCAtMzg0LDcgKzM5Miw3IEBACiAgICAgICAgICAgICBtZW51ZGljdFtuYW1lXSA9IG1lbnUgPSBNZW51KG1iYXIsIG5hbWU9bmFtZSkKICAgICAgICAgICAgIG1iYXIuYWRkX2Nhc2NhZGUobGFiZWw9bGFiZWwsIG1lbnU9bWVudSwgdW5kZXJsaW5lPXVuZGVybGluZSkKIAotICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgorICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LmlzQ2FyYm9uQXF1YVRrKHNlbGYucm9vdCk6CiAgICAgICAgICAgICAjIEluc2VydCB0aGUgYXBwbGljYXRpb24gbWVudQogICAgICAgICAgICAgbWVudWRpY3RbJ2FwcGxpY2F0aW9uJ10gPSBtZW51ID0gTWVudShtYmFyLCBuYW1lPSdhcHBsZScpCiAgICAgICAgICAgICBtYmFyLmFkZF9jYXNjYWRlKGxhYmVsPSdJRExFJywgbWVudT1tZW51KQpAQCAtNDQ0LDcgKzQ1MiwxMSBAQAogCiAgICAgZGVmIHB5dGhvbl9kb2NzKHNlbGYsIGV2ZW50PU5vbmUpOgogICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nOgotICAgICAgICAgICAgb3Muc3RhcnRmaWxlKHNlbGYuaGVscF91cmwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Muc3RhcnRmaWxlKHNlbGYuaGVscF91cmwpCisgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdEb2N1bWVudCBTdGFydCBGYWlsdXJlJywKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1zdHIod2h5KSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHdlYmJyb3dzZXIub3BlbihzZWxmLmhlbHBfdXJsKQogICAgICAgICByZXR1cm4gImJyZWFrIgpAQCAtNzA0LDggKzcxNiw4IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIGFjY2VsOgogICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWUgPSBtZW51LmVudHJ5Y2dldChpbmRleCwgJ2xhYmVsJykKICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50ID0gJycKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1lbnVFdmVudERpY3QuaGFzX2tleShtZW51YmFySXRlbSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWVudUV2ZW50RGljdFttZW51YmFySXRlbV0uaGFzX2tleShpdGVtTmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtZW51YmFySXRlbSBpbiBtZW51RXZlbnREaWN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0ZW1OYW1lIGluIG1lbnVFdmVudERpY3RbbWVudWJhckl0ZW1dOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCA9IG1lbnVFdmVudERpY3RbbWVudWJhckl0ZW1dW2l0ZW1OYW1lXQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZWwgPSBnZXRfYWNjZWxlcmF0b3Ioa2V5ZGVmcywgZXZlbnQpCkBAIC03MzksOSArNzUxLDEzIEBACiAgICAgICAgICJDcmVhdGUgYSBjYWxsYmFjayB3aXRoIHRoZSBoZWxwZmlsZSB2YWx1ZSBmcm96ZW4gYXQgZGVmaW5pdGlvbiB0aW1lIgogICAgICAgICBkZWYgZGlzcGxheV9leHRyYV9oZWxwKGhlbHBmaWxlPWhlbHBmaWxlKToKICAgICAgICAgICAgIGlmIG5vdCBoZWxwZmlsZS5zdGFydHN3aXRoKCgnd3d3JywgJ2h0dHAnKSk6Ci0gICAgICAgICAgICAgICAgdXJsID0gb3MucGF0aC5ub3JtcGF0aChoZWxwZmlsZSkKKyAgICAgICAgICAgICAgICBoZWxwZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoaGVscGZpbGUpCiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nOgotICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShoZWxwZmlsZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShoZWxwZmlsZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcih0aXRsZT0nRG9jdW1lbnQgU3RhcnQgRmFpbHVyZScsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPXN0cih3aHkpLCBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB3ZWJicm93c2VyLm9wZW4oaGVscGZpbGUpCiAgICAgICAgIHJldHVybiBkaXNwbGF5X2V4dHJhX2hlbHAKQEAgLTc3Nyw4ICs3OTMsOCBAQAogICAgICAgICBmb3IgaW5zdGFuY2UgaW4gc2VsZi50b3AuaW5zdGFuY2VfZGljdC5rZXlzKCk6CiAgICAgICAgICAgICBtZW51ID0gaW5zdGFuY2UucmVjZW50X2ZpbGVzX21lbnUKICAgICAgICAgICAgIG1lbnUuZGVsZXRlKDEsIEVORCkgICMgY2xlYXIsIGFuZCByZWJ1aWxkOgotICAgICAgICAgICAgZm9yIGksIGZpbGUgaW4gemlwKGNvdW50KCksIHJmX2xpc3QpOgotICAgICAgICAgICAgICAgIGZpbGVfbmFtZSA9IGZpbGVbMDotMV0gICMgemFwIFxuCisgICAgICAgICAgICBmb3IgaSwgZmlsZV9uYW1lIGluIGVudW1lcmF0ZShyZl9saXN0KToKKyAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBmaWxlX25hbWUucnN0cmlwKCkgICMgemFwIFxuCiAgICAgICAgICAgICAgICAgIyBtYWtlIHVuaWNvZGUgc3RyaW5nIHRvIGRpc3BsYXkgbm9uLUFTQ0lJIGNoYXJzIGNvcnJlY3RseQogICAgICAgICAgICAgICAgIHVmaWxlX25hbWUgPSBzZWxmLl9maWxlbmFtZV90b191bmljb2RlKGZpbGVfbmFtZSkKICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGluc3RhbmNlLl9fcmVjZW50X2ZpbGVfY2FsbGJhY2soZmlsZV9uYW1lKQpAQCAtMTUyNSw3ICsxNTQxLDEyIEBACiAKIGRlZiBnZXRfYWNjZWxlcmF0b3Ioa2V5ZGVmcywgZXZlbnRuYW1lKToKICAgICBrZXlsaXN0ID0ga2V5ZGVmcy5nZXQoZXZlbnRuYW1lKQotICAgIGlmIG5vdCBrZXlsaXN0OgorICAgICMgaXNzdWUxMDk0MDogdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gcHJldmVudCBoYW5nIHdpdGggT1MgWCBDb2NvYSBUayA4LjUKKyAgICAjIGlmIG5vdCBrZXlsaXN0OgorICAgIGlmIChub3Qga2V5bGlzdCkgb3IgKG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCkgYW5kIGV2ZW50bmFtZSBpbiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8b3Blbi1tb2R1bGU+PiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8Z290by1saW5lPj4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8PGNoYW5nZS1pbmRlbnR3aWR0aD4+In0pOgogICAgICAgICByZXR1cm4gIiIKICAgICBzID0ga2V5bGlzdFswXQogICAgIHMgPSByZS5zdWIociItW2Etel1cYiIsIGxhbWJkYSBtOiBtLmdyb3VwKCkudXBwZXIoKSwgcykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0ZpbGVMaXN0LnB5IGIvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKaW5kZXggNTYyMjgwNS4uODMxOGZmMSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKKysrIGIvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgICAgICAgICBtYXN0ZXI9c2VsZi5yb290KQogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAga2V5ID0gb3MucGF0aC5ub3JtY2FzZShmaWxlbmFtZSkKLSAgICAgICAgaWYgc2VsZi5kaWN0Lmhhc19rZXkoa2V5KToKKyAgICAgICAgaWYga2V5IGluIHNlbGYuZGljdDoKICAgICAgICAgICAgIGVkaXQgPSBzZWxmLmRpY3Rba2V5XQogICAgICAgICAgICAgZWRpdC50b3Aud2FrZXVwKCkKICAgICAgICAgICAgIHJldHVybiBlZGl0CkBAIC00Myw3ICs0Myw3IEBACiAgICAgZGVmIG5ldyhzZWxmLCBmaWxlbmFtZT1Ob25lKToKICAgICAgICAgcmV0dXJuIHNlbGYuRWRpdG9yV2luZG93KHNlbGYsIGZpbGVuYW1lKQogCi0gICAgZGVmIGNsb3NlX2FsbF9jYWxsYmFjayhzZWxmLCBldmVudCk6CisgICAgZGVmIGNsb3NlX2FsbF9jYWxsYmFjayhzZWxmLCAqYXJncywgKiprd2RzKToKICAgICAgICAgZm9yIGVkaXQgaW4gc2VsZi5pbnZlcnNlZGljdC5rZXlzKCk6CiAgICAgICAgICAgICByZXBseSA9IGVkaXQuY2xvc2UoKQogICAgICAgICAgICAgaWYgcmVwbHkgPT0gImNhbmNlbCI6CkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgIG5ld2tleSA9IG9zLnBhdGgubm9ybWNhc2UoZmlsZW5hbWUpCiAgICAgICAgIGlmIG5ld2tleSA9PSBrZXk6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgc2VsZi5kaWN0Lmhhc19rZXkobmV3a2V5KToKKyAgICAgICAgaWYgbmV3a2V5IGluIHNlbGYuZGljdDoKICAgICAgICAgICAgIGNvbmZsaWN0ID0gc2VsZi5kaWN0W25ld2tleV0KICAgICAgICAgICAgIHNlbGYuaW52ZXJzZWRpY3RbY29uZmxpY3RdID0gTm9uZQogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0lPQmluZGluZy5weSBiL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQppbmRleCBjYmMxYzMzLi5hNWI2MTBlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKKysrIGIvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CkBAIC01MjEsOCArNTIxLDggQEAKICAgICBzYXZlZGlhbG9nID0gTm9uZQogCiAgICAgZmlsZXR5cGVzID0gWwotICAgICAgICAoIlB5dGhvbiBhbmQgdGV4dCBmaWxlcyIsICIqLnB5ICoucHl3ICoudHh0IiwgIlRFWFQiKSwKLSAgICAgICAgKCJBbGwgdGV4dCBmaWxlcyIsICIqIiwgIlRFWFQiKSwKKyAgICAgICAgKCJQeXRob24gZmlsZXMiLCAiKi5weSAqLnB5dyIsICJURVhUIiksCisgICAgICAgICgiVGV4dCBmaWxlcyIsICIqLnR4dCIsICJURVhUIiksCiAgICAgICAgICgiQWxsIGZpbGVzIiwgIioiKSwKICAgICAgICAgXQogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9NdWx0aUNhbGwucHkgYi9MaWIvaWRsZWxpYi9NdWx0aUNhbGwucHkKaW5kZXggNWI3MzQ4MS4uYjgxYzVlZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvTXVsdGlDYWxsLnB5CisrKyBiL0xpYi9pZGxlbGliL011bHRpQ2FsbC5weQpAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxLCBoYW5kbGVyKSkpCiAKICAgICBkZWYgYmluZChzZWxmLCB0cmlwbGV0LCBmdW5jKToKLSAgICAgICAgaWYgbm90IHNlbGYuYmluZGVkZnVuY3MuaGFzX2tleSh0cmlwbGV0WzJdKToKKyAgICAgICAgaWYgdHJpcGxldFsyXSBub3QgaW4gc2VsZi5iaW5kZWRmdW5jczoKICAgICAgICAgICAgIHNlbGYuYmluZGVkZnVuY3NbdHJpcGxldFsyXV0gPSBbW10gZm9yIHMgaW4gX3N0YXRlc10KICAgICAgICAgICAgIGZvciBzIGluIF9zdGF0ZXM6CiAgICAgICAgICAgICAgICAgbGlzdHMgPSBbIHNlbGYuYmluZGVkZnVuY3NbZGV0YWlsXVtpXQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvTXVsdGlTdGF0dXNCYXIucHkgYi9MaWIvaWRsZWxpYi9NdWx0aVN0YXR1c0Jhci5weQppbmRleCAyZDRjNTQ3Li44ZWUyZDAzIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9NdWx0aVN0YXR1c0Jhci5weQorKysgYi9MaWIvaWRsZWxpYi9NdWx0aVN0YXR1c0Jhci5weQpAQCAtOSw3ICs5LDcgQEAKICAgICAgICAgc2VsZi5sYWJlbHMgPSB7fQogCiAgICAgZGVmIHNldF9sYWJlbChzZWxmLCBuYW1lLCB0ZXh0PScnLCBzaWRlPUxFRlQpOgotICAgICAgICBpZiBub3Qgc2VsZi5sYWJlbHMuaGFzX2tleShuYW1lKToKKyAgICAgICAgaWYgbmFtZSBub3QgaW4gc2VsZi5sYWJlbHM6CiAgICAgICAgICAgICBsYWJlbCA9IExhYmVsKHNlbGYsIGJkPTEsIHJlbGllZj1TVU5LRU4sIGFuY2hvcj1XKQogICAgICAgICAgICAgbGFiZWwucGFjayhzaWRlPXNpZGUpCiAgICAgICAgICAgICBzZWxmLmxhYmVsc1tuYW1lXSA9IGxhYmVsCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ORVdTLnR4dCBiL0xpYi9pZGxlbGliL05FV1MudHh0CmluZGV4IGJiNGMxNDMuLmQzMmRiMWUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL05FV1MudHh0CisrKyBiL0xpYi9pZGxlbGliL05FV1MudHh0CkBAIC0xLDM2ICsxLDMwIEBACi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuNHJjMQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1doYXQncyBOZXcgaW4gSURMRSAyLjc/Cis9PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiAwNy1PY3QtMjAwOSoKKypSZWxlYXNlIGRhdGU6IDA3LTAzLTIwMTAqCisKKy0gaWRsZS5weSBtb2RpZmllZCBhbmQgc2ltcGxpZmllZCB0byBiZXR0ZXIgc3VwcG9ydCBkZXZlbG9waW5nIGV4cGVyaW1lbnRhbAorICB2ZXJzaW9ucyBvZiBJRExFIHdoaWNoIGFyZSBub3QgaW5zdGFsbGVkIGluIHRoZSBzdGFuZGFyZCBsb2NhdGlvbi4KIAogLSBPdXRwdXRXaW5kb3cvUHlTaGVsbCByaWdodCBjbGljayBtZW51ICJHbyB0byBmaWxlL2xpbmUiIHdhc24ndCB3b3JraW5nIHdpdGgKICAgZmlsZSBwYXRocyBjb250YWluaW5nIHNwYWNlcy4gIEJ1ZyA1NTU5LgogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuMwotPT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDItT2N0LTIwMDkqCi0KLVdoYXQncyBOZXcgaW4gSURMRSAyLjYuM3JjMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjgtU2VwLTIwMDkqCi0KLS0gT24gT1MgWCBJRExFIDIuNiBzaG93cyB0d28gUHJlZmVyZW5jZSBtZW51IGl0ZW1zLiAgSXNzdWU2OTUxLgotCiAtIFdpbmRvd3M6IFZlcnNpb24gc3RyaW5nIGZvciB0aGUgLmNobSBoZWxwIGZpbGUgY2hhbmdlZCwgZmlsZSBub3QgYmVpbmcKICAgYWNjZXNzZWQgIFBhdGNoIDU3ODMgR3VpbGhlcm1lIFBvbG8KIAorLSBBbGxvdyBtdWx0aXBsZSBJRExFIEdVSS9zdWJwcm9jZXNzIHBhaXJzIHRvIGV4aXN0IHNpbXVsdGFuZW91c2x5LiBUaGFua3MgdG8KKyAgRGF2aWQgU2NoZXJlciBmb3Igc3VnZ2VzdGluZyB0aGUgdXNlIG9mIGFuIGVwaGVtZXJhbCBwb3J0IGZvciB0aGUgR1VJLgorICBQYXRjaCAxNTI5MTQyIFdlZWJsZS4KKworLSBSZW1vdmUgcG9ydCBzcGVjIGZyb20gcnVuLnB5IGFuZCBmaXggYnVnIHdoZXJlIHN1YnByb2Nlc3MgZmFpbHMgdG8KKyAgZXh0cmFjdCBwb3J0IGZyb20gY29tbWFuZCBsaW5lIHdoZW4gd2FybmluZ3MgYXJlIHByZXNlbnQuCisKIC0gVGsgOC41IFRleHQgd2lkZ2V0IHJlcXVpcmVzICd3b3JkcHJvY2Vzc29yJyB0YWJzdHlsZSBhdHRyIHRvIGhhbmRsZQogICBtaXhlZCBzcGFjZS90YWIgcHJvcGVybHkuIElzc3VlIDUxMjksIHBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgotCi1XaGF0J3MgTmV3IGluIElETEUgMi42LjJyYzE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA2LUFwci0yMDA5KgotCisgIAogLSBJc3N1ZSAjMzU0OTogT24gTWFjT1MgdGhlIHByZWZlcmVuY2VzIG1lbnUgd2FzIG5vdCBwcmVzZW50CiAKKwogV2hhdCdzIE5ldyBpbiBJRExFIDIuNj8KID09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTU2LDcgKzUwLDcgQEAKICAgaW4gdGhlIGNvbmZpZyBkaWFsb2cgd291bGQgY2F1c2Ugbm9uLVB5dGhvbiBmaWxlcyB0byBiZSBjb2xvcmVkIGFzIGlmIHRoZXkKICAgd2VyZSBQeXRob24gc291cmNlOyBpbXByb3ZlIHVzZSBvZiBDb2xvckRlbGFnYXRvci4gIFBhdGNoIDEzMzQuIFRhbCBFaW5hdC4KIAotLSBTY3JpcHRCaW5kaW5nIGV2ZW50IGhhbmRsZXJzIHdlcmVuJ3QgcmV0dXJuaW5nICdicmVhaycuIFBhdGNoIDIwNTAsIFRhbCBFaW5hdAorLSBTY3JpcHRCaW5kaW5nIGV2ZW50IGhhbmRsZXJzIHdlcmVuJ3QgcmV0dXJuaW5nICdicmVhaycuIFBhdGNoIDIwNTAsIFRhbCBFaW5hdC4KIAogLSBUaGVyZSB3YXMgYW4gZXJyb3Igb24gZXhpdCBpZiBubyBzeXMuZXhpdGZ1bmMgd2FzIGRlZmluZWQuIElzc3VlIDE2NDcuCiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL09iamVjdEJyb3dzZXIucHkgYi9MaWIvaWRsZWxpYi9PYmplY3RCcm93c2VyLnB5CmluZGV4IDgzODMwODEuLjdkZTY5ODggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL09iamVjdEJyb3dzZXIucHkKKysrIGIvTGliL2lkbGVsaWIvT2JqZWN0QnJvd3Nlci5weQpAQCAtMTI2LDcgKzEyNiw3IEBACiAKIGRlZiBtYWtlX29iamVjdHRyZWVpdGVtKGxhYmVsdGV4dCwgb2JqZWN0LCBzZXRmdW5jdGlvbj1Ob25lKToKICAgICB0ID0gdHlwZShvYmplY3QpCi0gICAgaWYgZGlzcGF0Y2guaGFzX2tleSh0KToKKyAgICBpZiB0IGluIGRpc3BhdGNoOgogICAgICAgICBjID0gZGlzcGF0Y2hbdF0KICAgICBlbHNlOgogICAgICAgICBjID0gT2JqZWN0VHJlZUl0ZW0KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5IGIvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKaW5kZXggNmIyYzA3MS4uZDg4YTQ4ZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKKysrIGIvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgICAgICBub3JtZWRfbmFtZSA9IG9zLnBhdGgubm9ybWNhc2UobmFtZSkKICAgICAgICAgICAgICAgICBpZiBub3JtZWRfbmFtZVtpOl0gPT0gc3VmZjoKICAgICAgICAgICAgICAgICAgICAgbW9kX25hbWUgPSBuYW1lWzppXQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbW9kdWxlcy5oYXNfa2V5KG1vZF9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbW9kX25hbWUgbm90IGluIG1vZHVsZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzW21vZF9uYW1lXSA9IE5vbmUKICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZC5hcHBlbmQoKG5vcm1lZF9uYW1lLCBuYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG5hbWVzLnJlbW92ZShuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUHlTaGVsbC5weSBiL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKaW5kZXggNjUyNGRmZi4uMGM5NWRmNCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUHlTaGVsbC5weQorKysgYi9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CkBAIC0zNiw3ICszNiw4IEBACiBmcm9tIGlkbGVsaWIgaW1wb3J0IG1hY29zeFN1cHBvcnQKIAogSURFTlRDSEFSUyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArICJfIgotTE9DQUxIT1NUID0gJzEyNy4wLjAuMScKK0hPU1QgPSAnMTI3LjAuMC4xJyAjIHB5dGhvbiBleGVjdXRpb24gc2VydmVyIG9uIGxvY2FsaG9zdCBsb29wYmFjaworUE9SVCA9IDAgICMgc29tZWRheSBwYXNzIGluIGhvc3QsIHBvcnQgZm9yIHJlbW90ZSBkZWJ1ZyBjYXBhYmlsaXR5CiAKIHRyeToKICAgICBmcm9tIHNpZ25hbCBpbXBvcnQgU0lHVEVSTQpAQCAtNTYsMjAgKzU3LDIxIEBACiBlbHNlOgogICAgIGRlZiBpZGxlX3Nob3d3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9Tm9uZSwgbGluZT1Ob25lKToKLSAgICAgICAgZmlsZSA9IHdhcm5pbmdfc3RyZWFtCisgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIGZpbGUgPSB3YXJuaW5nX3N0cmVhbQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKHdhcm5pbmdzLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLFwKKyAgICAgICAgICAgIGZpbGUud3JpdGUod2FybmluZ3MuZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCBmaWxlPWZpbGUsIGxpbmU9bGluZSkpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICAgcGFzcyAgIyMgZmlsZSAocHJvYmFibHkgX19zdGRlcnJfXykgaXMgaW52YWxpZCwgd2FybmluZyBkcm9wcGVkLgogICAgIHdhcm5pbmdzLnNob3d3YXJuaW5nID0gaWRsZV9zaG93d2FybmluZwotICAgIGRlZiBpZGxlX2Zvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPU5vbmUsIGxpbmU9Tm9uZSk6CisgICAgZGVmIGlkbGVfZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgbGluZT1Ob25lKToKICAgICAgICAgIiIiRm9ybWF0IHdhcm5pbmdzIHRoZSBJRExFIHdheSIiIgogICAgICAgICBzID0gIlxuV2FybmluZyAoZnJvbSB3YXJuaW5ncyBtb2R1bGUpOlxuIgogICAgICAgICBzICs9ICcgIEZpbGUgXCIlc1wiLCBsaW5lICVzXG4nICUgKGZpbGVuYW1lLCBsaW5lbm8pCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vKS5zdHJpcCgpIFwKLSAgICAgICAgICAgIGlmIGxpbmUgaXMgTm9uZSBlbHNlIGxpbmUKKyAgICAgICAgaWYgbGluZSBpcyBOb25lOgorICAgICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKICAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgIHMgKz0gIiAgICAlc1xuIiAlIGxpbmUKICAgICAgICAgcyArPSAiJXM6ICVzXG4+Pj4gIiAlIChjYXRlZ29yeS5fX25hbWVfXywgbWVzc2FnZSkKQEAgLTgyLDE4ICs4NCwxNyBAQAogCiAgICAgUmF0aGVyIHRoYW4gcmVwZWF0aW5nIHRoZSBsaW5lY2FjaGUgY29kZSwgcGF0Y2ggaXQgdG8gc2F2ZSB0aGUKICAgICA8cHlzaGVsbCMuLi4+IGVudHJpZXMsIGNhbGwgdGhlIG9yaWdpbmFsIGxpbmVjYWNoZS5jaGVja2NhY2hlKCkKLSAgICAod2hpY2ggZGVzdHJveXMgdGhlbSksIGFuZCB0aGVuIHJlc3RvcmUgdGhlIHNhdmVkIGVudHJpZXMuCisgICAgKHNraXBwaW5nIHRoZW0pLCBhbmQgdGhlbiByZXN0b3JlIHRoZSBzYXZlZCBlbnRyaWVzLgogCiAgICAgb3JpZ19jaGVja2NhY2hlIGlzIGJvdW5kIGF0IGRlZmluaXRpb24gdGltZSB0byB0aGUgb3JpZ2luYWwKICAgICBtZXRob2QsIGFsbG93aW5nIGl0IHRvIGJlIHBhdGNoZWQuCi0KICAgICAiIiIKICAgICBjYWNoZSA9IGxpbmVjYWNoZS5jYWNoZQogICAgIHNhdmUgPSB7fQotICAgIGZvciBmaWxlbmFtZSBpbiBjYWNoZS5rZXlzKCk6Ci0gICAgICAgIGlmIGZpbGVuYW1lWzoxXSArIGZpbGVuYW1lWy0xOl0gPT0gJzw+JzoKLSAgICAgICAgICAgIHNhdmVbZmlsZW5hbWVdID0gY2FjaGVbZmlsZW5hbWVdCi0gICAgb3JpZ19jaGVja2NhY2hlKCkKKyAgICBmb3Iga2V5IGluIGxpc3QoY2FjaGUpOgorICAgICAgICBpZiBrZXlbOjFdICsga2V5Wy0xOl0gPT0gJzw+JzoKKyAgICAgICAgICAgIHNhdmVba2V5XSA9IGNhY2hlLnBvcChrZXkpCisgICAgb3JpZ19jaGVja2NhY2hlKGZpbGVuYW1lKQogICAgIGNhY2hlLnVwZGF0ZShzYXZlKQogCiAjIFBhdGNoIGxpbmVjYWNoZS5jaGVja2NhY2hlKCk6CkBAIC0zNDEsMTcgKzM0MiwyMSBAQAogICAgICAgICBJbnRlcmFjdGl2ZUludGVycHJldGVyLl9faW5pdF9fKHNlbGYsIGxvY2Fscz1sb2NhbHMpCiAgICAgICAgIHNlbGYuc2F2ZV93YXJuaW5nc19maWx0ZXJzID0gTm9uZQogICAgICAgICBzZWxmLnJlc3RhcnRpbmcgPSBGYWxzZQotICAgICAgICBzZWxmLnN1YnByb2Nlc3NfYXJnbGlzdCA9IHNlbGYuYnVpbGRfc3VicHJvY2Vzc19hcmdsaXN0KCkKKyAgICAgICAgc2VsZi5zdWJwcm9jZXNzX2FyZ2xpc3QgPSBOb25lCisgICAgICAgIHNlbGYucG9ydCA9IFBPUlQKIAotICAgIHBvcnQgPSA4ODMzCiAgICAgcnBjY2x0ID0gTm9uZQogICAgIHJwY3BpZCA9IE5vbmUKIAogICAgIGRlZiBzcGF3bl9zdWJwcm9jZXNzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN1YnByb2Nlc3NfYXJnbGlzdCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5zdWJwcm9jZXNzX2FyZ2xpc3QgPSBzZWxmLmJ1aWxkX3N1YnByb2Nlc3NfYXJnbGlzdCgpCiAgICAgICAgIGFyZ3MgPSBzZWxmLnN1YnByb2Nlc3NfYXJnbGlzdAogICAgICAgICBzZWxmLnJwY3BpZCA9IG9zLnNwYXdudihvcy5QX05PV0FJVCwgc3lzLmV4ZWN1dGFibGUsIGFyZ3MpCiAKICAgICBkZWYgYnVpbGRfc3VicHJvY2Vzc19hcmdsaXN0KHNlbGYpOgorICAgICAgICBhc3NlcnQgKHNlbGYucG9ydCE9MCksICgKKyAgICAgICAgICAgICJTb2NrZXQgc2hvdWxkIGhhdmUgYmVlbiBhc3NpZ25lZCBhIHBvcnQgbnVtYmVyLiIpCiAgICAgICAgIHcgPSBbJy1XJyArIHMgZm9yIHMgaW4gc3lzLndhcm5vcHRpb25zXQogICAgICAgICBpZiAxLzIgPiAwOiAjIGFjY291bnQgZm9yIG5ldyBkaXZpc2lvbgogICAgICAgICAgICAgdy5hcHBlbmQoJy1RbmV3JykKQEAgLTM3MiwxMSArMzc3LDggQEAKICAgICAgICAgcmV0dXJuIFtkZWNvcmF0ZWRfZXhlY10gKyB3ICsgWyItYyIsIGNvbW1hbmQsIHN0cihzZWxmLnBvcnQpXQogCiAgICAgZGVmIHN0YXJ0X3N1YnByb2Nlc3Moc2VsZik6Ci0gICAgICAgICMgc3Bhd25pbmcgZmlyc3QgYXZvaWRzIHBhc3NpbmcgYSBsaXN0ZW5pbmcgc29ja2V0IHRvIHRoZSBzdWJwcm9jZXNzCi0gICAgICAgIHNlbGYuc3Bhd25fc3VicHJvY2VzcygpCi0gICAgICAgICN0aW1lLnNsZWVwKDIwKSAjIHRlc3QgdG8gc2ltdWxhdGUgR1VJIG5vdCBhY2NlcHRpbmcgY29ubmVjdGlvbgotICAgICAgICBhZGRyID0gKExPQ0FMSE9TVCwgc2VsZi5wb3J0KQotICAgICAgICAjIElkbGUgc3RhcnRzIGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbiBvbiBsb2NhbGhvc3QKKyAgICAgICAgYWRkciA9IChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgICMgR1VJIG1ha2VzIHNldmVyYWwgYXR0ZW1wdHMgdG8gYWNxdWlyZSBzb2NrZXQsIGxpc3RlbnMgZm9yIGNvbm5lY3Rpb24KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CiAgICAgICAgICAgICB0aW1lLnNsZWVwKGkpCiAgICAgICAgICAgICB0cnk6CkBAIC0zODcsNiArMzg5LDE4IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmRpc3BsYXlfcG9ydF9iaW5kaW5nX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgaWYgUE9SVCB3YXMgMCwgc3lzdGVtIHdpbGwgYXNzaWduIGFuICdlcGhlbWVyYWwnIHBvcnQuIEZpbmQgaXQgb3V0OgorICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnJwY2NsdC5saXN0ZW5pbmdfc29jay5nZXRzb2NrbmFtZSgpWzFdCisgICAgICAgICMgaWYgUE9SVCB3YXMgbm90IDAsIHByb2JhYmx5IHdvcmtpbmcgd2l0aCBhIHJlbW90ZSBleGVjdXRpb24gc2VydmVyCisgICAgICAgIGlmIFBPUlQgIT0gMDoKKyAgICAgICAgICAgICMgVG8gYWxsb3cgcmVjb25uZWN0aW9uIHdpdGhpbiB0aGUgMk1TTCB3YWl0IChjZi4gU3RldmVucyBUQ1AKKyAgICAgICAgICAgICMgVjEsIDE4LjYpLCAgc2V0IFNPX1JFVVNFQUREUi4gIE5vdGUgdGhhdCB0aGlzIGNhbiBiZSBwcm9ibGVtYXRpYworICAgICAgICAgICAgIyBvbiBXaW5kb3dzIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgdHdvIGFjdGl2ZSBzb2NrZXRzIG9uCisgICAgICAgICAgICAjIHRoZSBzYW1lIGFkZHJlc3MhCisgICAgICAgICAgICBzZWxmLnJwY2NsdC5saXN0ZW5pbmdfc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHNlbGYuc3Bhd25fc3VicHJvY2VzcygpCisgICAgICAgICN0aW1lLnNsZWVwKDIwKSAjIHRlc3QgdG8gc2ltdWxhdGUgR1VJIG5vdCBhY2NlcHRpbmcgY29ubmVjdGlvbgogICAgICAgICAjIEFjY2VwdCB0aGUgY29ubmVjdGlvbiBmcm9tIHRoZSBQeXRob24gZXhlY3V0aW9uIHNlcnZlcgogICAgICAgICBzZWxmLnJwY2NsdC5saXN0ZW5pbmdfc29jay5zZXR0aW1lb3V0KDEwKQogICAgICAgICB0cnk6CkBAIC03NTMsMTMgKzc2NywxMiBAQAogICAgIGRlZiBkaXNwbGF5X3BvcnRfYmluZGluZ19lcnJvcihzZWxmKToKICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigKICAgICAgICAgICAgICJQb3J0IEJpbmRpbmcgRXJyb3IiLAotICAgICAgICAgICAgIklETEUgY2FuJ3QgYmluZCBUQ1AvSVAgcG9ydCA4ODMzLCB3aGljaCBpcyBuZWNlc3NhcnkgdG8gIgotICAgICAgICAgICAgImNvbW11bmljYXRlIHdpdGggaXRzIFB5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgRWl0aGVyICIKLSAgICAgICAgICAgICJubyBuZXR3b3JraW5nIGlzIGluc3RhbGxlZCBvbiB0aGlzIGNvbXB1dGVyIG9yIGFub3RoZXIgIgotICAgICAgICAgICAgInByb2Nlc3MgKGFub3RoZXIgSURMRT8pIGlzIHVzaW5nIHRoZSBwb3J0LiAgUnVuIElETEUgd2l0aCB0aGUgLW4gIgotICAgICAgICAgICAgImNvbW1hbmQgbGluZSBzd2l0Y2ggdG8gc3RhcnQgd2l0aG91dCBhIHN1YnByb2Nlc3MgYW5kIHJlZmVyIHRvICIKLSAgICAgICAgICAgICJIZWxwL0lETEUgSGVscCAnUnVubmluZyB3aXRob3V0IGEgc3VicHJvY2VzcycgZm9yIGZ1cnRoZXIgIgotICAgICAgICAgICAgImRldGFpbHMuIiwKKyAgICAgICAgICAgICJJRExFIGNhbid0IGJpbmQgdG8gYSBUQ1AvSVAgcG9ydCwgd2hpY2ggaXMgbmVjZXNzYXJ5IHRvICIKKyAgICAgICAgICAgICJjb21tdW5pY2F0ZSB3aXRoIGl0cyBQeXRob24gZXhlY3V0aW9uIHNlcnZlci4gIFRoaXMgbWlnaHQgYmUgIgorICAgICAgICAgICAgImJlY2F1c2Ugbm8gbmV0d29ya2luZyBpcyBpbnN0YWxsZWQgb24gdGhpcyBjb21wdXRlci4gICIKKyAgICAgICAgICAgICJSdW4gSURMRSB3aXRoIHRoZSAtbiBjb21tYW5kIGxpbmUgc3dpdGNoIHRvIHN0YXJ0IHdpdGhvdXQgYSAiCisgICAgICAgICAgICAic3VicHJvY2VzcyBhbmQgcmVmZXIgdG8gSGVscC9JRExFIEhlbHAgJ1J1bm5pbmcgd2l0aG91dCBhICIKKyAgICAgICAgICAgICJzdWJwcm9jZXNzJyBmb3IgZnVydGhlciBkZXRhaWxzLiIsCiAgICAgICAgICAgICBtYXN0ZXI9c2VsZi50a2NvbnNvbGUudGV4dCkKIAogICAgIGRlZiBkaXNwbGF5X25vX3N1YnByb2Nlc3NfZXJyb3Ioc2VsZik6CkBAIC05NzIsMTUgKzk4NSw2IEBACiAgICAgQ09QWVJJR0hUID0gXAogICAgICAgICAgICdUeXBlICJjb3B5cmlnaHQiLCAiY3JlZGl0cyIgb3IgImxpY2Vuc2UoKSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uJwogCi0gICAgZmlyZXdhbGxtZXNzYWdlID0gIiIiCi0gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgIFBlcnNvbmFsIGZpcmV3YWxsIHNvZnR3YXJlIG1heSB3YXJuIGFib3V0IHRoZSBjb25uZWN0aW9uIElETEUKLSAgICBtYWtlcyB0byBpdHMgc3VicHJvY2VzcyB1c2luZyB0aGlzIGNvbXB1dGVyJ3MgaW50ZXJuYWwgbG9vcGJhY2sKLSAgICBpbnRlcmZhY2UuICBUaGlzIGNvbm5lY3Rpb24gaXMgbm90IHZpc2libGUgb24gYW55IGV4dGVybmFsCi0gICAgaW50ZXJmYWNlIGFuZCBubyBkYXRhIGlzIHNlbnQgdG8gb3IgcmVjZWl2ZWQgZnJvbSB0aGUgSW50ZXJuZXQuCi0gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICIiIgotCiAgICAgZGVmIGJlZ2luKHNlbGYpOgogICAgICAgICBzZWxmLnJlc2V0b3V0cHV0KCkKICAgICAgICAgaWYgdXNlX3N1YnByb2Nlc3M6CkBAIC05OTEsOSArOTk1LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG5vc3ViID0gIj09PT0gTm8gU3VicHJvY2VzcyA9PT09IgotICAgICAgICBzZWxmLndyaXRlKCJQeXRob24gJXMgb24gJXNcbiVzXG4lc1xuSURMRSAlcyAgICAgICVzXG4iICUKLSAgICAgICAgICAgICAgICAgICAoc3lzLnZlcnNpb24sIHN5cy5wbGF0Zm9ybSwgc2VsZi5DT1BZUklHSFQsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmlyZXdhbGxtZXNzYWdlLCBpZGxldmVyLklETEVfVkVSU0lPTiwgbm9zdWIpKQorICAgICAgICBzZWxmLndyaXRlKCJQeXRob24gJXMgb24gJXNcbiVzXG4lcyIgJQorICAgICAgICAgICAgICAgICAgIChzeXMudmVyc2lvbiwgc3lzLnBsYXRmb3JtLCBzZWxmLkNPUFlSSUdIVCwgbm9zdWIpKQogICAgICAgICBzZWxmLnNob3dwcm9tcHQoKQogICAgICAgICBpbXBvcnQgVGtpbnRlcgogICAgICAgICBUa2ludGVyLl9kZWZhdWx0X3Jvb3QgPSBOb25lICMgMDNKYW4wNCBLQksgV2hhdCdzIHRoaXM/CkBAIC0xMzEwLDcgKzEzMTMsNyBAQAogICAgIGdsb2JhbCBmbGlzdCwgcm9vdCwgdXNlX3N1YnByb2Nlc3MKIAogICAgIHVzZV9zdWJwcm9jZXNzID0gVHJ1ZQotICAgIGVuYWJsZV9zaGVsbCA9IEZhbHNlCisgICAgZW5hYmxlX3NoZWxsID0gVHJ1ZQogICAgIGVuYWJsZV9lZGl0ID0gRmFsc2UKICAgICBkZWJ1ZyA9IEZhbHNlCiAgICAgY21kID0gTm9uZQpAQCAtMTMzMSw2ICsxMzM0LDcgQEAKICAgICAgICAgICAgIGVuYWJsZV9zaGVsbCA9IFRydWUKICAgICAgICAgaWYgbyA9PSAnLWUnOgogICAgICAgICAgICAgZW5hYmxlX2VkaXQgPSBUcnVlCisgICAgICAgICAgICBlbmFibGVfc2hlbGwgPSBGYWxzZQogICAgICAgICBpZiBvID09ICctaCc6CiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHVzYWdlX21zZykKICAgICAgICAgICAgIHN5cy5leGl0KCkKQEAgLTEzODEsNyArMTM4NSw2IEBACiAgICAgZWRpdF9zdGFydCA9IGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsICdHZW5lcmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZGl0b3Itb24tc3RhcnR1cCcsIHR5cGU9J2Jvb2wnKQogICAgIGVuYWJsZV9lZGl0ID0gZW5hYmxlX2VkaXQgb3IgZWRpdF9zdGFydAotICAgIGVuYWJsZV9zaGVsbCA9IGVuYWJsZV9zaGVsbCBvciBub3QgZWRpdF9zdGFydAogICAgICMgc3RhcnQgZWRpdG9yIGFuZC9vciBzaGVsbCB3aW5kb3dzOgogICAgIHJvb3QgPSBUayhjbGFzc05hbWU9IklkbGUiKQogCkBAIC0xNDI5LDYgKzE0MzIsMTMgQEAKICAgICAgICAgICAgIHNoZWxsLmludGVycC5wcmVwZW5kX3N5c3BhdGgoc2NyaXB0KQogICAgICAgICAgICAgc2hlbGwuaW50ZXJwLmV4ZWNmaWxlKHNjcmlwdCkKIAorICAgICMgQ2hlY2sgZm9yIHByb2JsZW1hdGljIE9TIFggVGsgdmVyc2lvbnMgYW5kIHByaW50IGEgd2FybmluZyBtZXNzYWdlCisgICAgIyBpbiB0aGUgSURMRSBzaGVsbCB3aW5kb3c7IHRoaXMgaXMgbGVzcyBpbnRydXNpdmUgdGhhbiBhbHdheXMgb3BlbmluZworICAgICMgYSBzZXBhcmF0ZSB3aW5kb3cuCisgICAgdGt2ZXJzaW9ud2FybmluZyA9IG1hY29zeFN1cHBvcnQudGtWZXJzaW9uV2FybmluZyhyb290KQorICAgIGlmIHRrdmVyc2lvbndhcm5pbmc6CisgICAgICAgIHNoZWxsLmludGVycC5ydW5jb21tYW5kKCcnLmpvaW4oKCJwcmludCgnIiwgdGt2ZXJzaW9ud2FybmluZywgIicpIikpKQorCiAgICAgcm9vdC5tYWlubG9vcCgpCiAgICAgcm9vdC5kZXN0cm95KCkKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUmVtb3RlRGVidWdnZXIucHkgYi9MaWIvaWRsZWxpYi9SZW1vdGVEZWJ1Z2dlci5weQppbmRleCBmZmVmZmNlLi42NDcyODVmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9SZW1vdGVEZWJ1Z2dlci5weQorKysgYi9MaWIvaWRsZWxpYi9SZW1vdGVEZWJ1Z2dlci5weQpAQCAtMjMwLDcgKzIzMCw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZGljdF9wcm94eShkaWQpCiAKICAgICBkZWYgX2dldF9kaWN0X3Byb3h5KHNlbGYsIGRpZCk6Ci0gICAgICAgIGlmIHNlbGYuX2RpY3RjYWNoZS5oYXNfa2V5KGRpZCk6CisgICAgICAgIGlmIGRpZCBpbiBzZWxmLl9kaWN0Y2FjaGU6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGljdGNhY2hlW2RpZF0KICAgICAgICAgZHAgPSBEaWN0UHJveHkoc2VsZi5fY29ubiwgc2VsZi5fb2lkLCBkaWQpCiAgICAgICAgIHNlbGYuX2RpY3RjYWNoZVtkaWRdID0gZHAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1JzdHJpcEV4dGVuc2lvbi5weSBiL0xpYi9pZGxlbGliL1JzdHJpcEV4dGVuc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWUzNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvUnN0cmlwRXh0ZW5zaW9uLnB5CkBAIC0wLDAgKzEsMjkgQEAKKydQcm92aWRlcyAiU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZSIgdW5kZXIgdGhlICJGb3JtYXQiIG1lbnUuJworCitfX2F1dGhvcl9fID0gIlJvZ2VyIEQuIFNlcnd5IDxyb2dlci5zZXJ3eSBhdCBnbWFpbC5jb20+IgorCitjbGFzcyBSc3RyaXBFeHRlbnNpb246CisKKyAgICBtZW51ZGVmcyA9IFsKKyAgICAgICAgKCdmb3JtYXQnLCBbTm9uZSwKKyAgICAgICAgICAgICAgICgnU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZScsICc8PGRvLXJzdHJpcD4+JyksCisgICAgICAgXSksXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVkaXR3aW4pOgorICAgICAgICBzZWxmLmVkaXR3aW4gPSBlZGl0d2luCisgICAgICAgIHNlbGYuZWRpdHdpbi50ZXh0LmJpbmQoIjw8ZG8tcnN0cmlwPj4iLCBzZWxmLmRvX3JzdHJpcCkKKworICAgIGRlZiBkb19yc3RyaXAoc2VsZiwgZXZlbnQ9Tm9uZSk6CisKKyAgICAgICAgdGV4dCA9IHNlbGYuZWRpdHdpbi50ZXh0CisgICAgICAgIHVuZG8gPSBzZWxmLmVkaXR3aW4udW5kbworCisgICAgICAgIHVuZG8udW5kb19ibG9ja19zdGFydCgpCisKKyAgICAgICAgZW5kX2xpbmUgPSBpbnQoZmxvYXQodGV4dC5pbmRleCgnZW5kJykpKSArIDEKKyAgICAgICAgZm9yIGN1ciBpbiByYW5nZSgxLCBlbmRfbGluZSk6CisgICAgICAgICAgICB0eHQgPSB0ZXh0LmdldCgnJWkuMCcgJSBjdXIsICclaS4wIGxpbmVlbmQnICUgY3VyKQorICAgICAgICAgICAgY3V0ID0gbGVuKHR4dC5yc3RyaXAoKSkKKyAgICAgICAgICAgIHRleHQuZGVsZXRlKCclaS4laScgJSAoY3VyLCBjdXQpLCAnJWkuMCBsaW5lZW5kJyAlIGN1cikKKworICAgICAgICB1bmRvLnVuZG9fYmxvY2tfc3RvcCgpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5IGIvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weQppbmRleCA3ZDk2MmZlLi4wZmVjYTAxIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5CisrKyBiL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkKQEAgLTQwOSw3ICs0MDksNyBAQAogCiBjbGFzcyBTY3JvbGxlZENhbnZhczoKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyLCAqKm9wdHMpOgotICAgICAgICBpZiBub3Qgb3B0cy5oYXNfa2V5KCd5c2Nyb2xsaW5jcmVtZW50Jyk6CisgICAgICAgIGlmICd5c2Nyb2xsaW5jcmVtZW50JyBub3QgaW4gb3B0czoKICAgICAgICAgICAgIG9wdHNbJ3lzY3JvbGxpbmNyZW1lbnQnXSA9IDE3CiAgICAgICAgIHNlbGYubWFzdGVyID0gbWFzdGVyCiAgICAgICAgIHNlbGYuZnJhbWUgPSBGcmFtZShtYXN0ZXIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWctZXh0ZW5zaW9ucy5kZWYgYi9MaWIvaWRsZWxpYi9jb25maWctZXh0ZW5zaW9ucy5kZWYKaW5kZXggMmQ1Y2Y2OC4uNzhiNjhmNiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnLWV4dGVuc2lvbnMuZGVmCisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZy1leHRlbnNpb25zLmRlZgpAQCAtODYsMyArODYsOSBAQAogZmdjb2xvcj1CbGFjawogW0NvZGVDb250ZXh0X2JpbmRpbmdzXQogdG9nZ2xlLWNvZGUtY29udGV4dD0KKworW1JzdHJpcEV4dGVuc2lvbl0KK2VuYWJsZT0xCitlbmFibGVfc2hlbGw9MAorZW5hYmxlX2VkaXRvcj0xCisKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZy1rZXlzLmRlZiBiL0xpYi9pZGxlbGliL2NvbmZpZy1rZXlzLmRlZgppbmRleCBmYjBhYWY0Li5mZGMzNWJhIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWcta2V5cy5kZWYKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnLWtleXMuZGVmCkBAIC0xNzYsNyArMTc2LDcgQEAKIHJlZG8gPSA8U2hpZnQtQ29tbWFuZC1LZXktWj4KIGNsb3NlLXdpbmRvdyA9IDxDb21tYW5kLUtleS13PgogcmVzdGFydC1zaGVsbCA9IDxDb250cm9sLUtleS1GNj4KLXNhdmUtd2luZG93LWFzLWZpbGUgPSA8Q29tbWFuZC1LZXktUz4KK3NhdmUtd2luZG93LWFzLWZpbGUgPSA8U2hpZnQtQ29tbWFuZC1LZXktUz4KIGNsb3NlLWFsbC13aW5kb3dzID0gPENvbW1hbmQtS2V5LXE+CiB2aWV3LXJlc3RhcnQgPSA8S2V5LUY2PgogdGFiaWZ5LXJlZ2lvbiA9IDxDb250cm9sLUtleS01PgpAQCAtMjA4LDcgKzIwOCw3IEBACiBvcGVuLW1vZHVsZSA9IDxDb21tYW5kLUtleS1tPgogZmluZC1zZWxlY3Rpb24gPSA8U2hpZnQtQ29tbWFuZC1LZXktRjM+CiBweXRob24tY29udGV4dC1oZWxwID0gPFNoaWZ0LUtleS1GMT4KLXNhdmUtY29weS1vZi13aW5kb3ctYXMtZmlsZSA9IDxTaGlmdC1Db21tYW5kLUtleS1zPgorc2F2ZS1jb3B5LW9mLXdpbmRvdy1hcy1maWxlID0gPE9wdGlvbi1Db21tYW5kLUtleS1zPgogb3Blbi13aW5kb3ctZnJvbS1maWxlID0gPENvbW1hbmQtS2V5LW8+CiBweXRob24tZG9jcyA9IDxLZXktRjE+CiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZ0RpYWxvZy5weSBiL0xpYi9pZGxlbGliL2NvbmZpZ0RpYWxvZy5weQppbmRleCA4ZDNhNDlkLi5kYmFlZGM3IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnRGlhbG9nLnB5CkBAIC0yOCw2ICsyOCw3IEBACiAgICAgICAgIHNlbGYud21fd2l0aGRyYXcoKQogCiAgICAgICAgIHNlbGYuY29uZmlndXJlKGJvcmRlcndpZHRoPTUpCisgICAgICAgIHNlbGYudGl0bGUoJ0lETEUgUHJlZmVyZW5jZXMnKQogICAgICAgICBzZWxmLmdlb21ldHJ5KCIrJWQrJWQiICUgKHBhcmVudC53aW5mb19yb290eCgpKzIwLAogICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpKzMwKSkKICAgICAgICAgI1RoZW1lIEVsZW1lbnRzLiBFYWNoIHRoZW1lIGVsZW1lbnQga2V5IGlzIGl0cyBkaXNwbGF5IG5hbWUuCkBAIC01NjEsNyArNTYyLDcgQEAKIAogICAgIGRlZiBBZGRDaGFuZ2VkSXRlbShzZWxmLHR5cGUsc2VjdGlvbixpdGVtLHZhbHVlKToKICAgICAgICAgdmFsdWU9c3RyKHZhbHVlKSAjbWFrZSBzdXJlIHdlIHVzZSBhIHN0cmluZwotICAgICAgICBpZiBub3Qgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwZV0uaGFzX2tleShzZWN0aW9uKToKKyAgICAgICAgaWYgc2VjdGlvbiBub3QgaW4gc2VsZi5jaGFuZ2VkSXRlbXNbdHlwZV06CiAgICAgICAgICAgICBzZWxmLmNoYW5nZWRJdGVtc1t0eXBlXVtzZWN0aW9uXT17fQogICAgICAgICBzZWxmLmNoYW5nZWRJdGVtc1t0eXBlXVtzZWN0aW9uXVtpdGVtXT12YWx1ZQogCkBAIC03MDgsNyArNzA5LDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjcmVtb3ZlIGtleSBzZXQgZnJvbSBjb25maWcKICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1sna2V5cyddLnJlbW92ZV9zZWN0aW9uKGtleVNldE5hbWUpCi0gICAgICAgIGlmIHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ10uaGFzX2tleShrZXlTZXROYW1lKToKKyAgICAgICAgaWYga2V5U2V0TmFtZSBpbiBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddOgogICAgICAgICAgICAgZGVsKHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ11ba2V5U2V0TmFtZV0pCiAgICAgICAgICN3cml0ZSBjaGFuZ2VzCiAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2tleXMnXS5TYXZlKCkKQEAgLTczNSw3ICs3MzYsNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICNyZW1vdmUgdGhlbWUgZnJvbSBjb25maWcKICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10ucmVtb3ZlX3NlY3Rpb24odGhlbWVOYW1lKQotICAgICAgICBpZiBzZWxmLmNoYW5nZWRJdGVtc1snaGlnaGxpZ2h0J10uaGFzX2tleSh0aGVtZU5hbWUpOgorICAgICAgICBpZiB0aGVtZU5hbWUgaW4gc2VsZi5jaGFuZ2VkSXRlbXNbJ2hpZ2hsaWdodCddOgogICAgICAgICAgICAgZGVsKHNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXVt0aGVtZU5hbWVdKQogICAgICAgICAjd3JpdGUgY2hhbmdlcwogICAgICAgICBpZGxlQ29uZi51c2VyQ2ZnWydoaWdobGlnaHQnXS5TYXZlKCkKQEAgLTg3MCw5ICs4NzEsOSBAQAogICAgICAgICAgICAgI2hhbmRsZSBhbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgdGhlbWUKICAgICAgICAgICAgIGlmIHRoZW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXS5rZXlzKCk6CiAgICAgICAgICAgICAgICAgdGhlbWVEaWN0PXNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXVt0aGVtZV0KLSAgICAgICAgICAgICAgICBpZiB0aGVtZURpY3QuaGFzX2tleShlbGVtZW50KyctZm9yZWdyb3VuZCcpOgorICAgICAgICAgICAgICAgIGlmIGVsZW1lbnQrJy1mb3JlZ3JvdW5kJyBpbiB0aGVtZURpY3Q6CiAgICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2ZvcmVncm91bmQnXT10aGVtZURpY3RbZWxlbWVudCsnLWZvcmVncm91bmQnXQotICAgICAgICAgICAgICAgIGlmIHRoZW1lRGljdC5oYXNfa2V5KGVsZW1lbnQrJy1iYWNrZ3JvdW5kJyk6CisgICAgICAgICAgICAgICAgaWYgZWxlbWVudCsnLWJhY2tncm91bmQnIGluIHRoZW1lRGljdDoKICAgICAgICAgICAgICAgICAgICAgY29sb3Vyc1snYmFja2dyb3VuZCddPXRoZW1lRGljdFtlbGVtZW50KyctYmFja2dyb3VuZCddCiAgICAgICAgICAgICBzZWxmLnRleHRIaWdobGlnaHRTYW1wbGUudGFnX2NvbmZpZyhlbGVtZW50LCAqKmNvbG91cnMpCiAgICAgICAgIHNlbGYuU2V0Q29sb3VyU2FtcGxlKCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkgYi9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CmluZGV4IGIwMGJkY2YuLjczNDg3ZDUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQpAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgICAgIGVsc2U6ICNyZXR1cm5pbmcgZGVmYXVsdCwgcHJpbnQgd2FybmluZwogICAgICAgICAgICAgaWYgd2Fybl9vbl9kZWZhdWx0OgogICAgICAgICAgICAgICAgIHdhcm5pbmcgPSAoJ1xuIFdhcm5pbmc6IGNvbmZpZ0hhbmRsZXIucHkgLSBJZGxlQ29uZi5HZXRPcHRpb24gLVxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBwcm9ibGVtIHJldHJpZXZpbmcgY29uZmlncmF0aW9uIG9wdGlvbiAlclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBwcm9ibGVtIHJldHJpZXZpbmcgY29uZmlndXJhdGlvbiBvcHRpb24gJXJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZnJvbSBzZWN0aW9uICVyLlxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJyByZXR1cm5pbmcgZGVmYXVsdCB2YWx1ZTogJXJcbicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbiwgc2VjdGlvbiwgZGVmYXVsdCkpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlLmJhdCBiL0xpYi9pZGxlbGliL2lkbGUuYmF0CmluZGV4IGMxYjVmZDIuLmNjNjUzZGMgMTAwNzU1Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGUuYmF0CisrKyBiL0xpYi9pZGxlbGliL2lkbGUuYmF0CkBAIC0xLDMgKzEsNCBAQAogQGVjaG8gb2ZmCi1yZW0gV29ya2luZyBJRExFIGJhdCBmb3IgV2luZG93cyAtIHVzZXMgc3RhcnQgaW5zdGVhZCBvZiBhYnNvbHV0ZSBwYXRobmFtZQotc3RhcnQgaWRsZS5weXcgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKK3JlbSBTdGFydCBJRExFIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBQeXRob24gaW50ZXJwcmV0ZXIKK3NldCBDVVJSRElSPSV+ZHAwCitzdGFydCAiJUNVUlJESVIlLi5cLi5ccHl0aG9udy5leGUiICIlQ1VSUkRJUiVpZGxlLnB5dyIgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGUucHkgYi9MaWIvaWRsZWxpYi9pZGxlLnB5CmluZGV4IDUzN2RkNWEuLmEyNDk1NTcgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGUucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZS5weQpAQCAtMSwyMSArMSwxMSBAQAotdHJ5OgotICAgIGltcG9ydCBpZGxlbGliLlB5U2hlbGwKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIElETEUgaXMgbm90IGluc3RhbGxlZCwgYnV0IG1heWJlIFB5U2hlbGwgaXMgb24gc3lzLnBhdGg6Ci0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgUHlTaGVsbAotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmFpc2UKLSAgICBlbHNlOgotICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgaWRsZWRpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoUHlTaGVsbC5fX2ZpbGVfXykpCi0gICAgICAgIGlmIGlkbGVkaXIgIT0gb3MuZ2V0Y3dkKCk6Ci0gICAgICAgICAgICAjIFdlJ3JlIG5vdCBpbiB0aGUgSURMRSBkaXJlY3RvcnksIGhlbHAgdGhlIHN1YnByb2Nlc3MgZmluZCBydW4ucHkKLSAgICAgICAgICAgIHB5cGF0aCA9IG9zLmVudmlyb24uZ2V0KCdQWVRIT05QQVRIJywgJycpCi0gICAgICAgICAgICBpZiBweXBhdGg6Ci0gICAgICAgICAgICAgICAgb3MuZW52aXJvblsnUFlUSE9OUEFUSCddID0gcHlwYXRoICsgJzonICsgaWRsZWRpcgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydQWVRIT05QQVRIJ10gPSBpZGxlZGlyCi0gICAgICAgIFB5U2hlbGwubWFpbigpCi1lbHNlOgotICAgIGlkbGVsaWIuUHlTaGVsbC5tYWluKCkKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCisKKyMgSWYgd2UgYXJlIHdvcmtpbmcgb24gYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIElETEUsIHdlIG5lZWQgdG8gcHJlcGVuZCB0aGUKKyMgcGFyZW50IG9mIHRoaXMgaWRsZWxpYiBkaXIgdG8gc3lzLnBhdGguICBPdGhlcndpc2UsIGltcG9ydGluZyBpZGxlbGliIGdldHMKKyMgdGhlIHZlcnNpb24gaW5zdGFsbGVkIHdpdGggdGhlIFB5dGhvbiB1c2VkIHRvIGNhbGwgdGhpcyBtb2R1bGU6CitpZGxlbGliX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpCitzeXMucGF0aC5pbnNlcnQoMCwgaWRsZWxpYl9kaXIpCisKK2ltcG9ydCBpZGxlbGliLlB5U2hlbGwKK2lkbGVsaWIuUHlTaGVsbC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkgYi9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CmluZGV4IDI4ODhhYWYuLmI2ZTFhMWQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZXZlci5weQpAQCAtMSArMSBAQAotSURMRV9WRVJTSU9OID0gIjIuNi42IgorSURMRV9WRVJTSU9OID0gIjIuNy4xIgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvbWFjb3N4U3VwcG9ydC5weSBiL0xpYi9pZGxlbGliL21hY29zeFN1cHBvcnQucHkKaW5kZXggN2VmNTZmMy4uNzIyYWM1NCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvbWFjb3N4U3VwcG9ydC5weQorKysgYi9MaWIvaWRsZWxpYi9tYWNvc3hTdXBwb3J0LnB5CkBAIC00LDE0ICs0LDUyIEBACiAiIiIKIGltcG9ydCBzeXMKIGltcG9ydCBUa2ludGVyCitmcm9tIG9zIGltcG9ydCBwYXRoCisKKworX2FwcGJ1bmRsZSA9IE5vbmUKIAogZGVmIHJ1bm5pbmdBc09TWEFwcCgpOgogICAgICIiIgogICAgIFJldHVybnMgVHJ1ZSBpZiBQeXRob24gaXMgcnVubmluZyBmcm9tIHdpdGhpbiBhbiBhcHAgb24gT1NYLgogICAgIElmIHNvLCBhc3N1bWUgdGhhdCBQeXRob24gd2FzIGJ1aWx0IHdpdGggQXF1YSBUY2wvVGsgcmF0aGVyIHRoYW4KLSAgICBYMTEgVGNrL1RrLgorICAgIFgxMSBUY2wvVGsuCiAgICAgIiIiCi0gICAgcmV0dXJuIChzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicgYW5kICcuYXBwJyBpbiBzeXMuZXhlY3V0YWJsZSkKKyAgICBnbG9iYWwgX2FwcGJ1bmRsZQorICAgIGlmIF9hcHBidW5kbGUgaXMgTm9uZToKKyAgICAgICAgX2FwcGJ1bmRsZSA9IChzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicgYW5kICcuYXBwJyBpbiBzeXMuZXhlY3V0YWJsZSkKKyAgICByZXR1cm4gX2FwcGJ1bmRsZQorCitfY2FyYm9uYXF1YXRrID0gTm9uZQorCitkZWYgaXNDYXJib25BcXVhVGsocm9vdCk6CisgICAgIiIiCisgICAgUmV0dXJucyBUcnVlIGlmIElETEUgaXMgdXNpbmcgYSBDYXJib24gQXF1YSBUayAoaW5zdGVhZCBvZiB0aGUKKyAgICBuZXdlciBDb2NvYSBBcXVhIFRrKS4KKyAgICAiIiIKKyAgICBnbG9iYWwgX2NhcmJvbmFxdWF0aworICAgIGlmIF9jYXJib25hcXVhdGsgaXMgTm9uZToKKyAgICAgICAgX2NhcmJvbmFxdWF0ayA9IChydW5uaW5nQXNPU1hBcHAoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXF1YScgaW4gcm9vdC50ay5jYWxsKCd0aycsICd3aW5kb3dpbmdzeXN0ZW0nKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQXBwS2l0JyBub3QgaW4gcm9vdC50ay5jYWxsKCd3aW5mbycsICdzZXJ2ZXInLCAnLicpKQorICAgIHJldHVybiBfY2FyYm9uYXF1YXRrCisKK2RlZiB0a1ZlcnNpb25XYXJuaW5nKHJvb3QpOgorICAgICIiIgorICAgIFJldHVybnMgYSBzdHJpbmcgd2FybmluZyBtZXNzYWdlIGlmIHRoZSBUayB2ZXJzaW9uIGluIHVzZSBhcHBlYXJzIHRvCisgICAgYmUgb25lIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIHdpdGggSURMRS4gIFRoZSBBcHBsZSBDb2NvYS1iYXNlZCBUayA4LjUKKyAgICB0aGF0IHdhcyBzaGlwcGVkIHdpdGggTWFjIE9TIFggMTAuNi4KKyAgICAiIiIKKworICAgIGlmIChydW5uaW5nQXNPU1hBcHAoKSBhbmQKKyAgICAgICAgICAgICgnQXBwS2l0JyBpbiByb290LnRrLmNhbGwoJ3dpbmZvJywgJ3NlcnZlcicsICcuJykpIGFuZAorICAgICAgICAgICAgKHJvb3QudGsuY2FsbCgnaW5mbycsICdwYXRjaGxldmVsJykgPT0gJzguNS43JykgKToKKyAgICAgICAgcmV0dXJuIChyIldBUk5JTkc6IFRoZSB2ZXJzaW9uIG9mIFRjbC9UayAoOC41LjcpIGluIHVzZSBtYXkiCisgICAgICAgICAgICAgICAgciIgYmUgdW5zdGFibGUuXG4iCisgICAgICAgICAgICAgICAgciJWaXNpdCBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrLyIKKyAgICAgICAgICAgICAgICByIiBmb3IgY3VycmVudCBpbmZvcm1hdGlvbi4iKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBGYWxzZQogCiBkZWYgYWRkT3BlbkV2ZW50U3VwcG9ydChyb290LCBmbGlzdCk6CiAgICAgIiIiCkBAIC03Myw5ICsxMTEsNiBAQAogICAgICAgICBXaW5kb3dMaXN0LmFkZF93aW5kb3dzX3RvX21lbnUobWVudSkKICAgICBXaW5kb3dMaXN0LnJlZ2lzdGVyX2NhbGxiYWNrKHBvc3R3aW5kb3dzbWVudSkKIAotICAgIG1lbnVkaWN0WydhcHBsaWNhdGlvbiddID0gbWVudSA9IE1lbnUobWVudWJhciwgbmFtZT0nYXBwbGUnKQotICAgIG1lbnViYXIuYWRkX2Nhc2NhZGUobGFiZWw9J0lETEUnLCBtZW51PW1lbnUpCi0KICAgICBkZWYgYWJvdXRfZGlhbG9nKGV2ZW50PU5vbmUpOgogICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IGFib3V0RGlhbG9nCiAgICAgICAgIGFib3V0RGlhbG9nLkFib3V0RGlhbG9nKHJvb3QsICdBYm91dCBJRExFJykKQEAgLTg1LDQxICsxMjAsNDUgQEAKICAgICAgICAgcm9vdC5pbnN0YW5jZV9kaWN0ID0gZmxpc3QuaW52ZXJzZWRpY3QKICAgICAgICAgY29uZmlnRGlhbG9nLkNvbmZpZ0RpYWxvZyhyb290LCAnU2V0dGluZ3MnKQogCisgICAgZGVmIGhlbHBfZGlhbG9nKGV2ZW50PU5vbmUpOgorICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IHRleHRWaWV3CisgICAgICAgIGZuID0gcGF0aC5qb2luKHBhdGguYWJzcGF0aChwYXRoLmRpcm5hbWUoX19maWxlX18pKSwgJ2hlbHAudHh0JykKKyAgICAgICAgdGV4dFZpZXcudmlld19maWxlKHJvb3QsICdIZWxwJywgZm4pCiAKICAgICByb290LmJpbmQoJzw8YWJvdXQtaWRsZT4+JywgYWJvdXRfZGlhbG9nKQogICAgIHJvb3QuYmluZCgnPDxvcGVuLWNvbmZpZy1kaWFsb2c+PicsIGNvbmZpZ19kaWFsb2cpCisgICAgcm9vdC5jcmVhdGVjb21tYW5kKCc6OnRrOjptYWM6OlNob3dQcmVmZXJlbmNlcycsIGNvbmZpZ19kaWFsb2cpCiAgICAgaWYgZmxpc3Q6CiAgICAgICAgIHJvb3QuYmluZCgnPDxjbG9zZS1hbGwtd2luZG93cz4+JywgZmxpc3QuY2xvc2VfYWxsX2NhbGxiYWNrKQogCisgICAgICAgICMgVGhlIGJpbmRpbmcgYWJvdmUgZG9lc24ndCByZWxpYWJseSB3b3JrIG9uIGFsbCB2ZXJzaW9ucyBvZiBUaworICAgICAgICAjIG9uIE1hY09TWC4gQWRkaW5nIGNvbW1hbmQgZGVmaW5pdGlvbiBiZWxvdyBkb2VzIHNlZW0gdG8gZG8gdGhlCisgICAgICAgICMgcmlnaHQgdGhpbmcgZm9yIG5vdy4KKyAgICAgICAgcm9vdC5jcmVhdGVjb21tYW5kKCdleGl0JywgZmxpc3QuY2xvc2VfYWxsX2NhbGxiYWNrKQogCi0gICAgIyMjY2hlY2sgaWYgVGsgdmVyc2lvbiA+PSA4LjQuMTQ7IGlmIHNvLCB1c2UgaGFyZC1jb2RlZCBzaG93cHJlZnMgYmluZGluZwotICAgIHRrdmVyc2lvbiA9IHJvb3QudGsuZXZhbCgnaW5mbyBwYXRjaGxldmVsJykKLSAgICAjIE5vdGU6IHdlIGNhbm5vdCBjaGVjayBpZiB0aGUgc3RyaW5nIHRrdmVyc2lvbiA+PSAnOC40LjE0JywgYmVjYXVzZQotICAgICMgdGhlIHN0cmluZyAnOC40LjcnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3RyaW5nICc4LjQuMTQnLgotICAgIGlmIHR1cGxlKG1hcChpbnQsIHRrdmVyc2lvbi5zcGxpdCgnLicpKSkgPj0gKDgsIDQsIDE0KToKLSAgICAgICAgQmluZGluZ3MubWVudWRlZnNbMF0gPSAgKCdhcHBsaWNhdGlvbicsIFsKKyAgICBpZiBpc0NhcmJvbkFxdWFUayhyb290KToKKyAgICAgICAgIyBmb3IgQ2FyYm9uIEFxdWFUaywgcmVwbGFjZSB0aGUgZGVmYXVsdCBUayBhcHBsZSBtZW51CisgICAgICAgIG1lbnVkaWN0WydhcHBsaWNhdGlvbiddID0gbWVudSA9IE1lbnUobWVudWJhciwgbmFtZT0nYXBwbGUnKQorICAgICAgICBtZW51YmFyLmFkZF9jYXNjYWRlKGxhYmVsPSdJRExFJywgbWVudT1tZW51KQorICAgICAgICBCaW5kaW5ncy5tZW51ZGVmcy5pbnNlcnQoMCwKKyAgICAgICAgICAgICgnYXBwbGljYXRpb24nLCBbCiAgICAgICAgICAgICAgICAgKCdBYm91dCBJRExFJywgJzw8YWJvdXQtaWRsZT4+JyksCi0gICAgICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgIF0pCi0gICAgICAgIHJvb3QuY3JlYXRlY29tbWFuZCgnOjp0azo6bWFjOjpTaG93UHJlZmVyZW5jZXMnLCBjb25maWdfZGlhbG9nKQorICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgIF0pKQorICAgICAgICB0a3ZlcnNpb24gPSByb290LnRrLmV2YWwoJ2luZm8gcGF0Y2hsZXZlbCcpCisgICAgICAgIGlmIHR1cGxlKG1hcChpbnQsIHRrdmVyc2lvbi5zcGxpdCgnLicpKSkgPCAoOCwgNCwgMTQpOgorICAgICAgICAgICAgIyBmb3IgZWFybGllciBBcXVhVGsgdmVyc2lvbnMsIHN1cHBseSBhIFByZWZlcmVuY2VzIG1lbnUgaXRlbQorICAgICAgICAgICAgQmluZGluZ3MubWVudWRlZnNbMF1bMV0uYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAoJ19QcmVmZXJlbmNlcy4uLi4nLCAnPDxvcGVuLWNvbmZpZy1kaWFsb2c+PicpLAorICAgICAgICAgICAgICAgICkKICAgICBlbHNlOgotICAgICAgICBmb3IgbW5hbWUsIGVudHJ5bGlzdCBpbiBCaW5kaW5ncy5tZW51ZGVmczoKLSAgICAgICAgICAgIG1lbnUgPSBtZW51ZGljdC5nZXQobW5hbWUpCi0gICAgICAgICAgICBpZiBub3QgbWVudToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3IgZW50cnkgaW4gZW50cnlsaXN0OgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZW50cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW51LmFkZF9zZXBhcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwsIGV2ZW50bmFtZSA9IGVudHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmUsIGxhYmVsID0gcHJlcHN0cihsYWJlbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VsZXJhdG9yID0gZ2V0X2FjY2VsZXJhdG9yKEJpbmRpbmdzLmRlZmF1bHRfa2V5ZGVmcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50bmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBjb21tYW5kKHRleHQ9cm9vdCwgZXZlbnRuYW1lPWV2ZW50bmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5ldmVudF9nZW5lcmF0ZShldmVudG5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW51LmFkZF9jb21tYW5kKGxhYmVsPWxhYmVsLCB1bmRlcmxpbmU9dW5kZXJsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1jb21tYW5kLCBhY2NlbGVyYXRvcj1hY2NlbGVyYXRvcikKKyAgICAgICAgIyBhc3N1bWUgQ29jb2EgQXF1YVRrCisgICAgICAgICMgcmVwbGFjZSBkZWZhdWx0IEFib3V0IGRpYWxvZyB3aXRoIEFib3V0IElETEUgb25lCisgICAgICAgIHJvb3QuY3JlYXRlY29tbWFuZCgndGtBYm91dERpYWxvZycsIGFib3V0X2RpYWxvZykKKyAgICAgICAgIyByZXBsYWNlIGRlZmF1bHQgIkhlbHAiIGl0ZW0gaW4gSGVscCBtZW51CisgICAgICAgIHJvb3QuY3JlYXRlY29tbWFuZCgnOjp0azo6bWFjOjpTaG93SGVscCcsIGhlbHBfZGlhbG9nKQorICAgICAgICAjIHJlbW92ZSByZWR1bmRhbnQgIklETEUgSGVscCIgZnJvbSBtZW51CisgICAgICAgIGRlbCBCaW5kaW5ncy5tZW51ZGVmc1stMV1bMV1bMF0KIAogZGVmIHNldHVwQXBwKHJvb3QsIGZsaXN0KToKICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3JwYy5weSBiL0xpYi9pZGxlbGliL3JwYy5weQppbmRleCAzYmFjNmEzLi4xMzk1MDU4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ycGMucHkKKysrIGIvTGliL2lkbGVsaWIvcnBjLnB5CkBAIC0xNjksNyArMTY5LDcgQEAKICAgICAgICAgICAgIGhvdywgKG9pZCwgbWV0aG9kbmFtZSwgYXJncywga3dhcmdzKSA9IHJlcXVlc3QKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHJldHVybiAoIkVSUk9SIiwgIkJhZCByZXF1ZXN0IGZvcm1hdCIpCi0gICAgICAgIGlmIG5vdCBzZWxmLm9ianRhYmxlLmhhc19rZXkob2lkKToKKyAgICAgICAgaWYgb2lkIG5vdCBpbiBzZWxmLm9ianRhYmxlOgogICAgICAgICAgICAgcmV0dXJuICgiRVJST1IiLCAiVW5rbm93biBvYmplY3QgaWQ6ICVyIiAlIChvaWQsKSkKICAgICAgICAgb2JqID0gc2VsZi5vYmp0YWJsZVtvaWRdCiAgICAgICAgIGlmIG1ldGhvZG5hbWUgPT0gIl9fbWV0aG9kc19fIjoKQEAgLTMwNCw3ICszMDQsNyBAQAogICAgICAgICAgICAgIyB3YWl0IGZvciBub3RpZmljYXRpb24gZnJvbSBzb2NrZXQgaGFuZGxpbmcgdGhyZWFkCiAgICAgICAgICAgICBjdmFyID0gc2VsZi5jdmFyc1tteXNlcV0KICAgICAgICAgICAgIGN2YXIuYWNxdWlyZSgpCi0gICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5yZXNwb25zZXMuaGFzX2tleShteXNlcSk6CisgICAgICAgICAgICB3aGlsZSBteXNlcSBub3QgaW4gc2VsZi5yZXNwb25zZXM6CiAgICAgICAgICAgICAgICAgY3Zhci53YWl0KCkKICAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXNwb25zZXNbbXlzZXFdCiAgICAgICAgICAgICBzZWxmLmRlYnVnKCJfZ2V0cmVzcG9uc2U6JXM6IHRocmVhZCB3b2tlIHVwOiByZXNwb25zZTogJXMiICUKQEAgLTUxOCw4ICs1MTgsNiBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0pOgogICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUpCi0gICAgICAgIHNlbGYubGlzdGVuaW5nX3NvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCiAgICAgICAgIHNlbGYubGlzdGVuaW5nX3NvY2suYmluZChhZGRyZXNzKQogICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrLmxpc3RlbigxKQogCkBAIC01NTIsNyArNTUwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBNZXRob2RQcm94eShzZWxmLnNvY2tpbywgc2VsZi5vaWQsIG5hbWUpCiAgICAgICAgIGlmIHNlbGYuX19hdHRyaWJ1dGVzIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLl9fZ2V0YXR0cmlidXRlcygpCi0gICAgICAgIGlmIHNlbGYuX19hdHRyaWJ1dGVzLmhhc19rZXkobmFtZSk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5fX2F0dHJpYnV0ZXM6CiAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuc29ja2lvLnJlbW90ZWNhbGwoc2VsZi5vaWQsICdfX2dldGF0dHJpYnV0ZV9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwpLCB7fSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZQpAQCAtNTcyLDcgKzU3MCw3IEBACiAgICAgIyBBZGRzIG5hbWVzIHRvIGRpY3Rpb25hcnkgYXJndW1lbnQgJ21ldGhvZHMnCiAgICAgZm9yIG5hbWUgaW4gZGlyKG9iaik6CiAgICAgICAgIGF0dHIgPSBnZXRhdHRyKG9iaiwgbmFtZSkKLSAgICAgICAgaWYgY2FsbGFibGUoYXR0cik6CisgICAgICAgIGlmIGhhc2F0dHIoYXR0ciwgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICBtZXRob2RzW25hbWVdID0gMQogICAgIGlmIHR5cGUob2JqKSA9PSB0eXBlcy5JbnN0YW5jZVR5cGU6CiAgICAgICAgIF9nZXRtZXRob2RzKG9iai5fX2NsYXNzX18sIG1ldGhvZHMpCkBAIC01ODMsNyArNTgxLDcgQEAKIGRlZiBfZ2V0YXR0cmlidXRlcyhvYmosIGF0dHJpYnV0ZXMpOgogICAgIGZvciBuYW1lIGluIGRpcihvYmopOgogICAgICAgICBhdHRyID0gZ2V0YXR0cihvYmosIG5hbWUpCi0gICAgICAgIGlmIG5vdCBjYWxsYWJsZShhdHRyKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoYXR0ciwgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICBhdHRyaWJ1dGVzW25hbWVdID0gMQogCiBjbGFzcyBNZXRob2RQcm94eShvYmplY3QpOgpAQCAtNTk5LDQgKzU5Nyw0IEBACiAKIAogIyBYWFggS0JLIDA5U2VwMDMgIFdlIG5lZWQgYSBwcm9wZXIgdW5pdCB0ZXN0IGZvciB0aGlzIG1vZHVsZS4gIFByZXZpb3VzbHkKLSMgICAgICAgICAgICAgICAgICBleGlzdGluZyB0ZXN0IGNvZGUgd2FzIHJlbW92ZWQgYXQgUmV2IDEuMjcuCisjICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgdGVzdCBjb2RlIHdhcyByZW1vdmVkIGF0IFJldiAxLjI3IChyMzQwOTgpLgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvcnVuLnB5IGIvTGliL2lkbGVsaWIvcnVuLnB5CmluZGV4IDI3MGVhMTUuLjY0MmI5NzkgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3J1bi5weQorKysgYi9MaWIvaWRsZWxpYi9ydW4ucHkKQEAgLTI1LDEyICsyNSwxMyBAQAogICAgIHBhc3MKIGVsc2U6CiAgICAgZGVmIGlkbGVfZm9ybWF0d2FybmluZ19zdWJwcm9jKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPU5vbmUsIGxpbmU9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU9Tm9uZSk6CiAgICAgICAgICIiIkZvcm1hdCB3YXJuaW5ncyB0aGUgSURMRSB3YXkiIiIKICAgICAgICAgcyA9ICJcbldhcm5pbmcgKGZyb20gd2FybmluZ3MgbW9kdWxlKTpcbiIKICAgICAgICAgcyArPSAnICBGaWxlIFwiJXNcIiwgbGluZSAlc1xuJyAlIChmaWxlbmFtZSwgbGluZW5vKQotICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubykuc3RyaXAoKSBcCi0gICAgICAgICAgICBpZiBsaW5lIGlzIE5vbmUgZWxzZSBsaW5lCisgICAgICAgIGlmIGxpbmUgaXMgTm9uZToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCiAgICAgICAgIGlmIGxpbmU6CiAgICAgICAgICAgICBzICs9ICIgICAgJXNcbiIgJSBsaW5lCiAgICAgICAgIHMgKz0gIiVzOiAlc1xuIiAlIChjYXRlZ29yeS5fX25hbWVfXywgbWVzc2FnZSkKQEAgLTY3LDEwICs2OCwxMyBAQAogICAgIGdsb2JhbCBxdWl0dGluZwogICAgIGdsb2JhbCBub19leGl0ZnVuYwogICAgIG5vX2V4aXRmdW5jID0gZGVsX2V4aXRmdW5jCi0gICAgcG9ydCA9IDg4MzMKICAgICAjdGltZS5zbGVlcCgxNSkgIyB0ZXN0IHN1YnByb2Nlc3Mgbm90IHJlc3BvbmRpbmcKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIHBvcnQgPSBpbnQoc3lzLmFyZ3ZbMV0pCisgICAgdHJ5OgorICAgICAgICBhc3NlcnQobGVuKHN5cy5hcmd2KSA+IDEpCisgICAgICAgIHBvcnQgPSBpbnQoc3lzLmFyZ3ZbLTFdKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcHJpbnQ+PnN5cy5zdGRlcnIsICJJRExFIFN1YnByb2Nlc3M6IG5vIElQIHBvcnQgcGFzc2VkIGluIHN5cy5hcmd2LiIKKyAgICAgICAgcmV0dXJuCiAgICAgc3lzLmFyZ3ZbOl0gPSBbIiJdCiAgICAgc29ja3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PW1hbmFnZV9zb2NrZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0nU29ja1RocmVhZCcsCmRpZmYgLS1naXQgYS9MaWIvaWhvb2tzLnB5IGIvTGliL2lob29rcy5weQppbmRleCA4NmIwZjY1Li44NzYxZGFjIDEwMDY0NAotLS0gYS9MaWIvaWhvb2tzLnB5CisrKyBiL0xpYi9paG9va3MucHkKQEAgLTQ5LDcgKzQ5LDcgQEAKIHdvdWxkIGFsc28gZG8gd2lzZSB0byBpbnN0YWxsIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgcmVsb2FkKCkuCiAKICIiIgotZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybnB5M2sKK2Zyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrLCB3YXJuCiB3YXJucHkzaygidGhlIGlob29rcyBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCBpbiBQeXRob24gMy4wIiwgc3RhY2tsZXZlbD0yKQogZGVsIHdhcm5weTNrCiAKQEAgLTQwMSw4ICs0MDEsOSBAQAogCiAgICAgIiIiQSBtb2R1bGUgaW1wb3J0ZXIgdGhhdCBzdXBwb3J0cyBwYWNrYWdlcy4iIiIKIAotICAgIGRlZiBpbXBvcnRfbW9kdWxlKHNlbGYsIG5hbWUsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUsIGZyb21saXN0PU5vbmUpOgotICAgICAgICBwYXJlbnQgPSBzZWxmLmRldGVybWluZV9wYXJlbnQoZ2xvYmFscykKKyAgICBkZWYgaW1wb3J0X21vZHVsZShzZWxmLCBuYW1lLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lLCBmcm9tbGlzdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGxldmVsPS0xKToKKyAgICAgICAgcGFyZW50ID0gc2VsZi5kZXRlcm1pbmVfcGFyZW50KGdsb2JhbHMsIGxldmVsKQogICAgICAgICBxLCB0YWlsID0gc2VsZi5maW5kX2hlYWRfcGFja2FnZShwYXJlbnQsIHN0cihuYW1lKSkKICAgICAgICAgbSA9IHNlbGYubG9hZF90YWlsKHEsIHRhaWwpCiAgICAgICAgIGlmIG5vdCBmcm9tbGlzdDoKQEAgLTQxMSwyMSArNDEyLDUwIEBACiAgICAgICAgICAgICBzZWxmLmVuc3VyZV9mcm9tbGlzdChtLCBmcm9tbGlzdCkKICAgICAgICAgcmV0dXJuIG0KIAotICAgIGRlZiBkZXRlcm1pbmVfcGFyZW50KHNlbGYsIGdsb2JhbHMpOgotICAgICAgICBpZiBub3QgZ2xvYmFscyBvciBub3QgIl9fbmFtZV9fIiBpbiBnbG9iYWxzOgorICAgIGRlZiBkZXRlcm1pbmVfcGFyZW50KHNlbGYsIGdsb2JhbHMsIGxldmVsPS0xKToKKyAgICAgICAgaWYgbm90IGdsb2JhbHMgb3Igbm90IGxldmVsOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcG5hbWUgPSBnbG9iYWxzWydfX25hbWVfXyddCi0gICAgICAgIGlmICJfX3BhdGhfXyIgaW4gZ2xvYmFsczoKLSAgICAgICAgICAgIHBhcmVudCA9IHNlbGYubW9kdWxlc1twbmFtZV0KLSAgICAgICAgICAgIGFzc2VydCBnbG9iYWxzIGlzIHBhcmVudC5fX2RpY3RfXwotICAgICAgICAgICAgcmV0dXJuIHBhcmVudAotICAgICAgICBpZiAnLicgaW4gcG5hbWU6Ci0gICAgICAgICAgICBpID0gcG5hbWUucmZpbmQoJy4nKQotICAgICAgICAgICAgcG5hbWUgPSBwbmFtZVs6aV0KLSAgICAgICAgICAgIHBhcmVudCA9IHNlbGYubW9kdWxlc1twbmFtZV0KLSAgICAgICAgICAgIGFzc2VydCBwYXJlbnQuX19uYW1lX18gPT0gcG5hbWUKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnQKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcGtnbmFtZSA9IGdsb2JhbHMuZ2V0KCdfX3BhY2thZ2VfXycpCisgICAgICAgIGlmIHBrZ25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3QgcGtnbmFtZSBhbmQgbGV2ZWwgPiAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICdBdHRlbXB0ZWQgcmVsYXRpdmUgaW1wb3J0IGluIG5vbi1wYWNrYWdlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBfX3BhY2thZ2VfXyBub3Qgc2V0LCBmaWd1cmUgaXQgb3V0IGFuZCBzZXQgaXQKKyAgICAgICAgICAgIG1vZG5hbWUgPSBnbG9iYWxzLmdldCgnX19uYW1lX18nKQorICAgICAgICAgICAgaWYgbW9kbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBpZiAiX19wYXRoX18iIGluIGdsb2JhbHM6CisgICAgICAgICAgICAgICAgIyBfX3BhdGhfXyBpcyBzZXQgc28gbW9kbmFtZSBpcyBhbHJlYWR5IHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICBwa2duYW1lID0gbW9kbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIG5vcm1hbCBtb2R1bGUsIHdvcmsgb3V0IHBhY2thZ2UgbmFtZSBpZiBhbnkKKyAgICAgICAgICAgICAgICBpZiAnLicgbm90IGluIG1vZG5hbWU6CisgICAgICAgICAgICAgICAgICAgIGlmIGxldmVsID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICgnQXR0ZW1wdGVkIHJlbGF0aXZlIGltcG9ydCBpbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbi1wYWNrYWdlJykKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsc1snX19wYWNrYWdlX18nXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICBwa2duYW1lID0gbW9kbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgICAgIGdsb2JhbHNbJ19fcGFja2FnZV9fJ10gPSBwa2duYW1lCisgICAgICAgIGlmIGxldmVsID4gMDoKKyAgICAgICAgICAgIGRvdCA9IGxlbihwa2duYW1lKQorICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UobGV2ZWwsIDEsIC0xKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRvdCA9IHBrZ25hbWUucmluZGV4KCcuJywgMCwgZG90KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdhdHRlbXB0ZWQgcmVsYXRpdmUgaW1wb3J0IGJleW9uZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvcC1sZXZlbCBwYWNrYWdlJykKKyAgICAgICAgICAgIHBrZ25hbWUgPSBwa2duYW1lWzpkb3RdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1twa2duYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpZiBsZXZlbCA8IDE6CisgICAgICAgICAgICAgICAgd2FybigiUGFyZW50IG1vZHVsZSAnJXMnIG5vdCBmb3VuZCB3aGlsZSBoYW5kbGluZyAiCisgICAgICAgICAgICAgICAgICAgICAiYWJzb2x1dGUgaW1wb3J0IiAlIHBrZ25hbWUsIFJ1bnRpbWVXYXJuaW5nLCAxKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUVycm9yLCAoIlBhcmVudCBtb2R1bGUgJyVzJyBub3QgbG9hZGVkLCBjYW5ub3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcmZvcm0gcmVsYXRpdmUgaW1wb3J0IiAlIHBrZ25hbWUpCiAKICAgICBkZWYgZmluZF9oZWFkX3BhY2thZ2Uoc2VsZiwgcGFyZW50LCBuYW1lKToKICAgICAgICAgaWYgJy4nIGluIG5hbWU6CkBAIC00NDYsNyArNDc2LDcgQEAKICAgICAgICAgICAgIHBhcmVudCA9IE5vbmUKICAgICAgICAgICAgIHEgPSBzZWxmLmltcG9ydF9pdChoZWFkLCBxbmFtZSwgcGFyZW50KQogICAgICAgICAgICAgaWYgcTogcmV0dXJuIHEsIHRhaWwKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IsICJObyBtb2R1bGUgbmFtZWQgIiArIHFuYW1lCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yLCAiTm8gbW9kdWxlIG5hbWVkICclcyciICUgcW5hbWUKIAogICAgIGRlZiBsb2FkX3RhaWwoc2VsZiwgcSwgdGFpbCk6CiAgICAgICAgIG0gPSBxCkBAIC00NTcsNyArNDg3LDcgQEAKICAgICAgICAgICAgIG1uYW1lID0gIiVzLiVzIiAlIChtLl9fbmFtZV9fLCBoZWFkKQogICAgICAgICAgICAgbSA9IHNlbGYuaW1wb3J0X2l0KGhlYWQsIG1uYW1lLCBtKQogICAgICAgICAgICAgaWYgbm90IG06Ci0gICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IsICJObyBtb2R1bGUgbmFtZWQgIiArIG1uYW1lCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IsICJObyBtb2R1bGUgbmFtZWQgJyVzJyIgJSBtbmFtZQogICAgICAgICByZXR1cm4gbQogCiAgICAgZGVmIGVuc3VyZV9mcm9tbGlzdChzZWxmLCBtLCBmcm9tbGlzdCwgcmVjdXJzaXZlPTApOgpAQCAtNDc1LDExICs1MDUsMTMgQEAKICAgICAgICAgICAgICAgICBzdWJuYW1lID0gIiVzLiVzIiAlIChtLl9fbmFtZV9fLCBzdWIpCiAgICAgICAgICAgICAgICAgc3VibW9kID0gc2VsZi5pbXBvcnRfaXQoc3ViLCBzdWJuYW1lLCBtKQogICAgICAgICAgICAgICAgIGlmIG5vdCBzdWJtb2Q6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yLCAiTm8gbW9kdWxlIG5hbWVkICIgKyBzdWJuYW1lCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yLCAiTm8gbW9kdWxlIG5hbWVkICclcyciICUgc3VibmFtZQogCiAgICAgZGVmIGltcG9ydF9pdChzZWxmLCBwYXJ0bmFtZSwgZnFuYW1lLCBwYXJlbnQsIGZvcmNlX2xvYWQ9MCk6CiAgICAgICAgIGlmIG5vdCBwYXJ0bmFtZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJFbXB0eSBtb2R1bGUgbmFtZSIKKyAgICAgICAgICAgICMgY29tcGxldGVseSBlbXB0eSBtb2R1bGUgbmFtZSBzaG91bGQgb25seSBoYXBwZW4gaW4KKyAgICAgICAgICAgICMgJ2Zyb20gLiBpbXBvcnQnIG9yIF9faW1wb3J0X18oIiIpCisgICAgICAgICAgICByZXR1cm4gcGFyZW50CiAgICAgICAgIGlmIG5vdCBmb3JjZV9sb2FkOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZXNbZnFuYW1lXQpkaWZmIC0tZ2l0IGEvTGliL2ltYXBsaWIucHkgYi9MaWIvaW1hcGxpYi5weQppbmRleCA4NzM0YTg0Li5mZGFlNDQ1IDEwMDY0NAotLS0gYS9MaWIvaW1hcGxpYi5weQorKysgYi9MaWIvaW1hcGxpYi5weQpAQCAtMjIsNyArMjIsNyBAQAogCiBfX3ZlcnNpb25fXyA9ICIyLjU4IgogCi1pbXBvcnQgYmluYXNjaWksIHJhbmRvbSwgcmUsIHNvY2tldCwgc3VicHJvY2Vzcywgc3lzLCB0aW1lCitpbXBvcnQgYmluYXNjaWksIGVycm5vLCByYW5kb20sIHJlLCBzb2NrZXQsIHN1YnByb2Nlc3MsIHN5cywgdGltZQogCiBfX2FsbF9fID0gWyJJTUFQNCIsICJJTUFQNF9zdHJlYW0iLCAiSW50ZXJuYWxkYXRlMnR1cGxlIiwKICAgICAgICAgICAgIkludDJBUCIsICJQYXJzZUZsYWdzIiwgIlRpbWUySW50ZXJuYWxkYXRlIl0KQEAgLTI0OCw3ICsyNDgsMTQgQEAKICAgICBkZWYgc2h1dGRvd24oc2VsZik6CiAgICAgICAgICIiIkNsb3NlIEkvTyBlc3RhYmxpc2hlZCBpbiAib3BlbiIuIiIiCiAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCi0gICAgICAgIHNlbGYuc29jay5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICAjIFRoZSBzZXJ2ZXIgbWlnaHQgYWxyZWFkeSBoYXZlIGNsb3NlZCB0aGUgY29ubmVjdGlvbgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKIAogCiAgICAgZGVmIHNvY2tldChzZWxmKToKQEAgLTg4MywxNCArODkwLDE3IEBACiAKIAogICAgIGRlZiBfY29tbWFuZF9jb21wbGV0ZShzZWxmLCBuYW1lLCB0YWcpOgotICAgICAgICBzZWxmLl9jaGVja19ieWUoKQorICAgICAgICAjIEJZRSBpcyBleHBlY3RlZCBhZnRlciBMT0dPVVQKKyAgICAgICAgaWYgbmFtZSAhPSAnTE9HT1VUJzoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2J5ZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHR5cCwgZGF0YSA9IHNlbGYuX2dldF90YWdnZWRfcmVzcG9uc2UodGFnKQogICAgICAgICBleGNlcHQgc2VsZi5hYm9ydCwgdmFsOgogICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnY29tbWFuZDogJXMgPT4gJXMnICUgKG5hbWUsIHZhbCkpCiAgICAgICAgIGV4Y2VwdCBzZWxmLmVycm9yLCB2YWw6CiAgICAgICAgICAgICByYWlzZSBzZWxmLmVycm9yKCdjb21tYW5kOiAlcyA9PiAlcycgJSAobmFtZSwgdmFsKSkKLSAgICAgICAgc2VsZi5fY2hlY2tfYnllKCkKKyAgICAgICAgaWYgbmFtZSAhPSAnTE9HT1VUJzoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2J5ZSgpCiAgICAgICAgIGlmIHR5cCA9PSAnQkFEJzoKICAgICAgICAgICAgIHJhaXNlIHNlbGYuZXJyb3IoJyVzIGNvbW1hbmQgZXJyb3I6ICVzICVzJyAlIChuYW1lLCB0eXAsIGRhdGEpKQogICAgICAgICByZXR1cm4gdHlwLCBkYXRhCkBAIC0xMzExLDkgKzEzMjEsMTAgQEAKICAgICAgICAgJ0p1bCc6IDcsICdBdWcnOiA4LCAnU2VwJzogOSwgJ09jdCc6IDEwLCAnTm92JzogMTEsICdEZWMnOiAxMn0KIAogZGVmIEludGVybmFsZGF0ZTJ0dXBsZShyZXNwKToKLSAgICAiIiJDb252ZXJ0IElNQVA0IElOVEVSTkFMREFURSB0byBVVC4KKyAgICAiIiJQYXJzZSBhbiBJTUFQNCBJTlRFUk5BTERBVEUgc3RyaW5nLgogCi0gICAgUmV0dXJucyBQeXRob24gdGltZSBtb2R1bGUgdHVwbGUuCisgICAgUmV0dXJuIGNvcnJlc3BvbmRpbmcgbG9jYWwgdGltZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYQorICAgIHRpbWUuc3RydWN0X3RpbWUgaW5zdGFuY2Ugb3IgTm9uZSBpZiB0aGUgc3RyaW5nIGhhcyB3cm9uZyBmb3JtYXQuCiAgICAgIiIiCiAKICAgICBtbyA9IEludGVybmFsRGF0ZS5tYXRjaChyZXNwKQpAQCAtMTM4MCw5ICsxMzkxLDE0IEBACiAKIGRlZiBUaW1lMkludGVybmFsZGF0ZShkYXRlX3RpbWUpOgogCi0gICAgIiIiQ29udmVydCAnZGF0ZV90aW1lJyB0byBJTUFQNCBJTlRFUk5BTERBVEUgcmVwcmVzZW50YXRpb24uCisgICAgIiIiQ29udmVydCBkYXRlX3RpbWUgdG8gSU1BUDQgSU5URVJOQUxEQVRFIHJlcHJlc2VudGF0aW9uLgogCi0gICAgUmV0dXJuIHN0cmluZyBpbiBmb3JtOiAnIkRELU1tbS1ZWVlZIEhIOk1NOlNTICtISE1NIicKKyAgICBSZXR1cm4gc3RyaW5nIGluIGZvcm06ICciREQtTW1tLVlZWVkgSEg6TU06U1MgK0hITU0iJy4gIFRoZQorICAgIGRhdGVfdGltZSBhcmd1bWVudCBjYW4gYmUgYSBudW1iZXIgKGludCBvciBmbG9hdCkgcmVwcmVzZW5pbmcKKyAgICBzZWNvbmRzIHNpbmNlIGVwb2NoIChhcyByZXR1cm5lZCBieSB0aW1lLnRpbWUoKSksIGEgOS10dXBsZQorICAgIHJlcHJlc2VudGluZyBsb2NhbCB0aW1lIChhcyByZXR1cm5lZCBieSB0aW1lLmxvY2FsdGltZSgpKSwgb3IgYQorICAgIGRvdWJsZS1xdW90ZWQgc3RyaW5nLiAgSW4gdGhlIGxhc3QgY2FzZSwgaXQgaXMgYXNzdW1lZCB0byBhbHJlYWR5CisgICAgYmUgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LgogICAgICIiIgogCiAgICAgaWYgaXNpbnN0YW5jZShkYXRlX3RpbWUsIChpbnQsIGZsb2F0KSk6CmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5IGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDMxYTFhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQpAQCAtMCwwICsxLDM4IEBACisiIiJCYWNrcG9ydCBvZiBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSBmcm9tIDMueC4iIiIKKyMgV2hpbGUgbm90IGNyaXRpY2FsIChhbmQgaW4gbm8gd2F5IGd1YXJhbnRlZWQhKSwgaXQgd291bGQgYmUgbmljZSB0byBrZWVwIHRoaXMKKyMgY29kZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMy4KK2ltcG9ydCBzeXMKKworZGVmIF9yZXNvbHZlX25hbWUobmFtZSwgcGFja2FnZSwgbGV2ZWwpOgorICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIGltcG9ydGVkLiIiIgorICAgIGlmIG5vdCBoYXNhdHRyKHBhY2thZ2UsICdyaW5kZXgnKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJ3BhY2thZ2UnIG5vdCBzZXQgdG8gYSBzdHJpbmciKQorICAgIGRvdCA9IGxlbihwYWNrYWdlKQorICAgIGZvciB4IGluIHhyYW5nZShsZXZlbCwgMSwgLTEpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkb3QgPSBwYWNrYWdlLnJpbmRleCgnLicsIDAsIGRvdCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhdHRlbXB0ZWQgcmVsYXRpdmUgaW1wb3J0IGJleW9uZCB0b3AtbGV2ZWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UiKQorICAgIHJldHVybiAiJXMuJXMiICUgKHBhY2thZ2VbOmRvdF0sIG5hbWUpCisKKworZGVmIGltcG9ydF9tb2R1bGUobmFtZSwgcGFja2FnZT1Ob25lKToKKyAgICAiIiJJbXBvcnQgYSBtb2R1bGUuCisKKyAgICBUaGUgJ3BhY2thZ2UnIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gcGVyZm9ybWluZyBhIHJlbGF0aXZlIGltcG9ydC4gSXQKKyAgICBzcGVjaWZpZXMgdGhlIHBhY2thZ2UgdG8gdXNlIGFzIHRoZSBhbmNob3IgcG9pbnQgZnJvbSB3aGljaCB0byByZXNvbHZlIHRoZQorICAgIHJlbGF0aXZlIGltcG9ydCB0byBhbiBhYnNvbHV0ZSBpbXBvcnQuCisKKyAgICAiIiIKKyAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJy4nKToKKyAgICAgICAgaWYgbm90IHBhY2thZ2U6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInJlbGF0aXZlIGltcG9ydHMgcmVxdWlyZSB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IikKKyAgICAgICAgbGV2ZWwgPSAwCisgICAgICAgIGZvciBjaGFyYWN0ZXIgaW4gbmFtZToKKyAgICAgICAgICAgIGlmIGNoYXJhY3RlciAhPSAnLic6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGxldmVsICs9IDEKKyAgICAgICAgbmFtZSA9IF9yZXNvbHZlX25hbWUobmFtZVtsZXZlbDpdLCBwYWNrYWdlLCBsZXZlbCkKKyAgICBfX2ltcG9ydF9fKG5hbWUpCisgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCmRpZmYgLS1naXQgYS9MaWIvaW1wdXRpbC5weSBiL0xpYi9pbXB1dGlsLnB5CmluZGV4IGUxZDBhODIuLmE1ZmE2ZWEgMTAwNjQ0Ci0tLSBhL0xpYi9pbXB1dGlsLnB5CisrKyBiL0xpYi9pbXB1dGlsLnB5CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIHNlbGYubmFtZXNwYWNlWydfX2ltcG9ydF9fJ10gPSBzZWxmLnByZXZpb3VzX2ltcG9ydGVyCiAKICAgICBkZWYgYWRkX3N1ZmZpeChzZWxmLCBzdWZmaXgsIGltcG9ydEZ1bmMpOgotICAgICAgICBhc3NlcnQgY2FsbGFibGUoaW1wb3J0RnVuYykKKyAgICAgICAgYXNzZXJ0IGhhc2F0dHIoaW1wb3J0RnVuYywgJ19fY2FsbF9fJykKICAgICAgICAgc2VsZi5mc19pbXAuYWRkX3N1ZmZpeChzdWZmaXgsIGltcG9ydEZ1bmMpCiAKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC00NjIsMTYgKzQ2Miw2IEBACiAgICAgZWxpZiAnb3MyJyBpbiBuYW1lczoKICAgICAgICAgc2VwID0gJ1xcJwogICAgICAgICBmcm9tIG9zMiBpbXBvcnQgc3RhdAotICAgIGVsaWYgJ21hYycgaW4gbmFtZXM6Ci0gICAgICAgIGZyb20gbWFjIGltcG9ydCBzdGF0Ci0gICAgICAgIGRlZiBqb2luKGEsIGIpOgotICAgICAgICAgICAgaWYgYSA9PSAnJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gYgotICAgICAgICAgICAgaWYgJzonIG5vdCBpbiBhOgotICAgICAgICAgICAgICAgIGEgPSAnOicgKyBhCi0gICAgICAgICAgICBpZiBhWy0xOl0gIT0gJzonOgotICAgICAgICAgICAgICAgIGEgPSBhICsgJzonCi0gICAgICAgICAgICByZXR1cm4gYSArIGIKICAgICBlbHNlOgogICAgICAgICByYWlzZSBJbXBvcnRFcnJvciwgJ25vIG9zIHNwZWNpZmljIG1vZHVsZSBmb3VuZCcKIApAQCAtNTQwLDcgKzUzMCw3IEBACiAgICAgICAgIHNlbGYuc3VmZml4ZXMgPSBbIF0KIAogICAgIGRlZiBhZGRfc3VmZml4KHNlbGYsIHN1ZmZpeCwgaW1wb3J0RnVuYyk6Ci0gICAgICAgIGFzc2VydCBjYWxsYWJsZShpbXBvcnRGdW5jKQorICAgICAgICBhc3NlcnQgaGFzYXR0cihpbXBvcnRGdW5jLCAnX19jYWxsX18nKQogICAgICAgICBzZWxmLnN1ZmZpeGVzLmFwcGVuZCgoc3VmZml4LCBpbXBvcnRGdW5jKSkKIAogICAgIGRlZiBpbXBvcnRfZnJvbV9kaXIoc2VsZiwgZGlyLCBmcW5hbWUpOgpkaWZmIC0tZ2l0IGEvTGliL2luc3BlY3QucHkgYi9MaWIvaW5zcGVjdC5weQppbmRleCAyZWM5OTFmLi4zMzA2NWY1IDEwMDY0NAotLS0gYS9MaWIvaW5zcGVjdC5weQorKysgYi9MaWIvaW5zcGVjdC5weQpAQCAtMTcsNyArMTcsNyBAQAogICAgIGdldG1vZHVsZSgpIC0gZGV0ZXJtaW5lIHRoZSBtb2R1bGUgdGhhdCBhbiBvYmplY3QgY2FtZSBmcm9tCiAgICAgZ2V0Y2xhc3N0cmVlKCkgLSBhcnJhbmdlIGNsYXNzZXMgc28gYXMgdG8gcmVwcmVzZW50IHRoZWlyIGhpZXJhcmNoeQogCi0gICAgZ2V0YXJnc3BlYygpLCBnZXRhcmd2YWx1ZXMoKSAtIGdldCBpbmZvIGFib3V0IGZ1bmN0aW9uIGFyZ3VtZW50cworICAgIGdldGFyZ3NwZWMoKSwgZ2V0YXJndmFsdWVzKCksIGdldGNhbGxhcmdzKCkgLSBnZXQgaW5mbyBhYm91dCBmdW5jdGlvbiBhcmd1bWVudHMKICAgICBmb3JtYXRhcmdzcGVjKCksIGZvcm1hdGFyZ3ZhbHVlcygpIC0gZm9ybWF0IGFuIGFyZ3VtZW50IHNwZWMKICAgICBnZXRvdXRlcmZyYW1lcygpLCBnZXRpbm5lcmZyYW1lcygpIC0gZ2V0IGluZm8gYWJvdXQgZnJhbWVzCiAgICAgY3VycmVudGZyYW1lKCkgLSBnZXQgdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWUKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBDbGFzcyBvYmplY3RzIHByb3ZpZGUgdGhlc2UgYXR0cmlidXRlczoKICAgICAgICAgX19kb2NfXyAgICAgICAgIGRvY3VtZW50YXRpb24gc3RyaW5nCiAgICAgICAgIF9fbW9kdWxlX18gICAgICBuYW1lIG9mIG1vZHVsZSBpbiB3aGljaCB0aGlzIGNsYXNzIHdhcyBkZWZpbmVkIiIiCi0gICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqZWN0LCB0eXBlcy5DbGFzc1R5cGUpIG9yIGhhc2F0dHIob2JqZWN0LCAnX19iYXNlc19fJykKKyAgICByZXR1cm4gaXNpbnN0YW5jZShvYmplY3QsICh0eXBlLCB0eXBlcy5DbGFzc1R5cGUpKQogCiBkZWYgaXNtZXRob2Qob2JqZWN0KToKICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGluc3RhbmNlIG1ldGhvZC4KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAgICAgR2VuZXJhdG9yIGZ1bmN0aW9uIG9iamVjdHMgcHJvdmlkZXMgc2FtZSBhdHRyaWJ1dGVzIGFzIGZ1bmN0aW9ucy4KIAotICAgIFNlZSBpc2Z1bmN0aW9uLl9fZG9jX18gZm9yIGF0dHJpYnV0ZXMgbGlzdGluZy4iIiIKKyAgICBTZWUgaGVscChpc2Z1bmN0aW9uKSBmb3IgYXR0cmlidXRlcyBsaXN0aW5nLiIiIgogICAgIHJldHVybiBib29sKChpc2Z1bmN0aW9uKG9iamVjdCkgb3IgaXNtZXRob2Qob2JqZWN0KSkgYW5kCiAgICAgICAgICAgICAgICAgb2JqZWN0LmZ1bmNfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUikKIApAQCAtMjQyLDE0ICsyNDIsMTcgQEAKIAogZGVmIGlzYWJzdHJhY3Qob2JqZWN0KToKICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgKEFCQykuIiIiCi0gICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqZWN0LCB0eXBlKSBhbmQgb2JqZWN0Ll9fZmxhZ3NfXyAmIFRQRkxBR1NfSVNfQUJTVFJBQ1QKKyAgICByZXR1cm4gYm9vbChpc2luc3RhbmNlKG9iamVjdCwgdHlwZSkgYW5kIG9iamVjdC5fX2ZsYWdzX18gJiBUUEZMQUdTX0lTX0FCU1RSQUNUKQogCiBkZWYgZ2V0bWVtYmVycyhvYmplY3QsIHByZWRpY2F0ZT1Ob25lKToKICAgICAiIiJSZXR1cm4gYWxsIG1lbWJlcnMgb2YgYW4gb2JqZWN0IGFzIChuYW1lLCB2YWx1ZSkgcGFpcnMgc29ydGVkIGJ5IG5hbWUuCiAgICAgT3B0aW9uYWxseSwgb25seSByZXR1cm4gbWVtYmVycyB0aGF0IHNhdGlzZnkgYSBnaXZlbiBwcmVkaWNhdGUuIiIiCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgZm9yIGtleSBpbiBkaXIob2JqZWN0KToKLSAgICAgICAgdmFsdWUgPSBnZXRhdHRyKG9iamVjdCwga2V5KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob2JqZWN0LCBrZXkpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIG5vdCBwcmVkaWNhdGUgb3IgcHJlZGljYXRlKHZhbHVlKToKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKChrZXksIHZhbHVlKSkKICAgICByZXN1bHRzLnNvcnQoKQpAQCAtMzk5LDEyICs0MDIsMTIgQEAKICAgICBpZiBpc21vZHVsZShvYmplY3QpOgogICAgICAgICBpZiBoYXNhdHRyKG9iamVjdCwgJ19fZmlsZV9fJyk6CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZmlsZV9fCi0gICAgICAgIHJhaXNlIFR5cGVFcnJvcignYXJnIGlzIGEgYnVpbHQtaW4gbW9kdWxlJykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIGEgYnVpbHQtaW4gbW9kdWxlJy5mb3JtYXQob2JqZWN0KSkKICAgICBpZiBpc2NsYXNzKG9iamVjdCk6CiAgICAgICAgIG9iamVjdCA9IHN5cy5tb2R1bGVzLmdldChvYmplY3QuX19tb2R1bGVfXykKICAgICAgICAgaWYgaGFzYXR0cihvYmplY3QsICdfX2ZpbGVfXycpOgogICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2ZpbGVfXwotICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2FyZyBpcyBhIGJ1aWx0LWluIGNsYXNzJykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIGEgYnVpbHQtaW4gY2xhc3MnLmZvcm1hdChvYmplY3QpKQogICAgIGlmIGlzbWV0aG9kKG9iamVjdCk6CiAgICAgICAgIG9iamVjdCA9IG9iamVjdC5pbV9mdW5jCiAgICAgaWYgaXNmdW5jdGlvbihvYmplY3QpOgpAQCAtNDE1LDggKzQxOCw4IEBACiAgICAgICAgIG9iamVjdCA9IG9iamVjdC5mX2NvZGUKICAgICBpZiBpc2NvZGUob2JqZWN0KToKICAgICAgICAgcmV0dXJuIG9iamVjdC5jb19maWxlbmFtZQotICAgIHJhaXNlIFR5cGVFcnJvcignYXJnIGlzIG5vdCBhIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgJwotICAgICAgICAgICAgICAgICAgICAnZnVuY3Rpb24sIHRyYWNlYmFjaywgZnJhbWUsIG9yIGNvZGUgb2JqZWN0JykKKyAgICByYWlzZSBUeXBlRXJyb3IoJ3shcn0gaXMgbm90IGEgbW9kdWxlLCBjbGFzcywgbWV0aG9kLCAnCisgICAgICAgICAgICAgICAgICAgICdmdW5jdGlvbiwgdHJhY2ViYWNrLCBmcmFtZSwgb3IgY29kZSBvYmplY3QnLmZvcm1hdChvYmplY3QpKQogCiBNb2R1bGVJbmZvID0gbmFtZWR0dXBsZSgnTW9kdWxlSW5mbycsICduYW1lIHN1ZmZpeCBtb2RlIG1vZHVsZV90eXBlJykKIApAQCAtNDM3LDcgKzQ0MCw5IEBACiAgICAgaWYgaW5mbzogcmV0dXJuIGluZm9bMF0KIAogZGVmIGdldHNvdXJjZWZpbGUob2JqZWN0KToKLSAgICAiIiJSZXR1cm4gdGhlIFB5dGhvbiBzb3VyY2UgZmlsZSBhbiBvYmplY3Qgd2FzIGRlZmluZWQgaW4sIGlmIGl0IGV4aXN0cy4iIiIKKyAgICAiIiJSZXR1cm4gdGhlIGZpbGVuYW1lIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9jYXRlIGFuIG9iamVjdCdzIHNvdXJjZS4KKyAgICBSZXR1cm4gTm9uZSBpZiBubyB3YXkgY2FuIGJlIGlkZW50aWZpZWQgdG8gZ2V0IHRoZSBzb3VyY2UuCisgICAgIiIiCiAgICAgZmlsZW5hbWUgPSBnZXRmaWxlKG9iamVjdCkKICAgICBpZiBzdHJpbmcubG93ZXIoZmlsZW5hbWVbLTQ6XSkgaW4gKCcucHljJywgJy5weW8nKToKICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVs6LTRdICsgJy5weScKQEAgLTQ1MCw2ICs0NTUsOSBAQAogICAgICMgb25seSByZXR1cm4gYSBub24tZXhpc3RlbnQgZmlsZW5hbWUgaWYgdGhlIG1vZHVsZSBoYXMgYSBQRVAgMzAyIGxvYWRlcgogICAgIGlmIGhhc2F0dHIoZ2V0bW9kdWxlKG9iamVjdCwgZmlsZW5hbWUpLCAnX19sb2FkZXJfXycpOgogICAgICAgICByZXR1cm4gZmlsZW5hbWUKKyAgICAjIG9yIGl0IGlzIGluIHRoZSBsaW5lY2FjaGUKKyAgICBpZiBmaWxlbmFtZSBpbiBsaW5lY2FjaGUuY2FjaGU6CisgICAgICAgIHJldHVybiBmaWxlbmFtZQogCiBkZWYgZ2V0YWJzZmlsZShvYmplY3QsIF9maWxlbmFtZT1Ob25lKToKICAgICAiIiJSZXR1cm4gYW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgc291cmNlIG9yIGNvbXBpbGVkIGZpbGUgZm9yIGFuIG9iamVjdC4KQEAgLTUxNiw3ICs1MjQsOSBAQAogICAgIG9yIGNvZGUgb2JqZWN0LiAgVGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgbGlzdCBvZiBhbGwgdGhlIGxpbmVzCiAgICAgaW4gdGhlIGZpbGUgYW5kIHRoZSBsaW5lIG51bWJlciBpbmRleGVzIGEgbGluZSBpbiB0aGF0IGxpc3QuICBBbiBJT0Vycm9yCiAgICAgaXMgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgotICAgIGZpbGUgPSBnZXRzb3VyY2VmaWxlKG9iamVjdCkgb3IgZ2V0ZmlsZShvYmplY3QpCisgICAgZmlsZSA9IGdldHNvdXJjZWZpbGUob2JqZWN0KQorICAgIGlmIG5vdCBmaWxlOgorICAgICAgICByYWlzZSBJT0Vycm9yKCdzb3VyY2UgY29kZSBub3QgYXZhaWxhYmxlJykKICAgICBtb2R1bGUgPSBnZXRtb2R1bGUob2JqZWN0LCBmaWxlKQogICAgIGlmIG1vZHVsZToKICAgICAgICAgbGluZXMgPSBsaW5lY2FjaGUuZ2V0bGluZXMoZmlsZSwgbW9kdWxlLl9fZGljdF9fKQpAQCAtNzM2LDcgKzc0Niw3IEBACiAgICAgJ3ZhcmFyZ3MnIGFuZCAndmFya3cnIGFyZSB0aGUgbmFtZXMgb2YgdGhlICogYW5kICoqIGFyZ3VtZW50cyBvciBOb25lLiIiIgogCiAgICAgaWYgbm90IGlzY29kZShjbyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcignYXJnIGlzIG5vdCBhIGNvZGUgb2JqZWN0JykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIGNvZGUgb2JqZWN0Jy5mb3JtYXQoY28pKQogCiAgICAgbmFyZ3MgPSBjby5jb19hcmdjb3VudAogICAgIG5hbWVzID0gY28uY29fdmFybmFtZXMKQEAgLTgwMCw3ICs4MTAsNyBAQAogICAgIGlmIGlzbWV0aG9kKGZ1bmMpOgogICAgICAgICBmdW5jID0gZnVuYy5pbV9mdW5jCiAgICAgaWYgbm90IGlzZnVuY3Rpb24oZnVuYyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcignYXJnIGlzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nLmZvcm1hdChmdW5jKSkKICAgICBhcmdzLCB2YXJhcmdzLCB2YXJrdyA9IGdldGFyZ3MoZnVuYy5mdW5jX2NvZGUpCiAgICAgcmV0dXJuIEFyZ1NwZWMoYXJncywgdmFyYXJncywgdmFya3csIGZ1bmMuZnVuY19kZWZhdWx0cykKIApAQCAtODQ0LDggKzg1NCw4IEBACiAgICAgc3BlY3MgPSBbXQogICAgIGlmIGRlZmF1bHRzOgogICAgICAgICBmaXJzdGRlZmF1bHQgPSBsZW4oYXJncykgLSBsZW4oZGVmYXVsdHMpCi0gICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyZ3MpKToKLSAgICAgICAgc3BlYyA9IHN0cnNlcShhcmdzW2ldLCBmb3JtYXRhcmcsIGpvaW4pCisgICAgZm9yIGksIGFyZyBpbiBlbnVtZXJhdGUoYXJncyk6CisgICAgICAgIHNwZWMgPSBzdHJzZXEoYXJnLCBmb3JtYXRhcmcsIGpvaW4pCiAgICAgICAgIGlmIGRlZmF1bHRzIGFuZCBpID49IGZpcnN0ZGVmYXVsdDoKICAgICAgICAgICAgIHNwZWMgPSBzcGVjICsgZm9ybWF0dmFsdWUoZGVmYXVsdHNbaSAtIGZpcnN0ZGVmYXVsdF0pCiAgICAgICAgIHNwZWNzLmFwcGVuZChzcGVjKQpAQCAtODc5LDYgKzg4OSw4OSBAQAogICAgICAgICBzcGVjcy5hcHBlbmQoZm9ybWF0dmFya3codmFya3cpICsgZm9ybWF0dmFsdWUobG9jYWxzW3Zhcmt3XSkpCiAgICAgcmV0dXJuICcoJyArIHN0cmluZy5qb2luKHNwZWNzLCAnLCAnKSArICcpJwogCitkZWYgZ2V0Y2FsbGFyZ3MoZnVuYywgKnBvc2l0aW9uYWwsICoqbmFtZWQpOgorICAgICIiIkdldCB0aGUgbWFwcGluZyBvZiBhcmd1bWVudHMgdG8gdmFsdWVzLgorCisgICAgQSBkaWN0IGlzIHJldHVybmVkLCB3aXRoIGtleXMgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50IG5hbWVzIChpbmNsdWRpbmcgdGhlCisgICAgbmFtZXMgb2YgdGhlICogYW5kICoqIGFyZ3VtZW50cywgaWYgYW55KSwgYW5kIHZhbHVlcyB0aGUgcmVzcGVjdGl2ZSBib3VuZAorICAgIHZhbHVlcyBmcm9tICdwb3NpdGlvbmFsJyBhbmQgJ25hbWVkJy4iIiIKKyAgICBhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMgPSBnZXRhcmdzcGVjKGZ1bmMpCisgICAgZl9uYW1lID0gZnVuYy5fX25hbWVfXworICAgIGFyZzJ2YWx1ZSA9IHt9CisKKyAgICAjIFRoZSBmb2xsb3dpbmcgY2xvc3VyZXMgYXJlIGJhc2ljYWxseSBiZWNhdXNlIG9mIHR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcuCisgICAgYXNzaWduZWRfdHVwbGVfcGFyYW1zID0gW10KKyAgICBkZWYgYXNzaWduKGFyZywgdmFsdWUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgc3RyKToKKyAgICAgICAgICAgIGFyZzJ2YWx1ZVthcmddID0gdmFsdWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2lnbmVkX3R1cGxlX3BhcmFtcy5hcHBlbmQoYXJnKQorICAgICAgICAgICAgdmFsdWUgPSBpdGVyKHZhbHVlKQorICAgICAgICAgICAgZm9yIGksIHN1YmFyZyBpbiBlbnVtZXJhdGUoYXJnKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN1YnZhbHVlID0gbmV4dCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbmVlZCBtb3JlIHRoYW4gJWQgJXMgdG8gdW5wYWNrJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGksICd2YWx1ZXMnIGlmIGkgPiAxIGVsc2UgJ3ZhbHVlJykpCisgICAgICAgICAgICAgICAgYXNzaWduKHN1YmFyZyxzdWJ2YWx1ZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0b28gbWFueSB2YWx1ZXMgdG8gdW5wYWNrJykKKyAgICBkZWYgaXNfYXNzaWduZWQoYXJnKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsc3RyKToKKyAgICAgICAgICAgIHJldHVybiBhcmcgaW4gYXJnMnZhbHVlCisgICAgICAgIHJldHVybiBhcmcgaW4gYXNzaWduZWRfdHVwbGVfcGFyYW1zCisgICAgaWYgaXNtZXRob2QoZnVuYykgYW5kIGZ1bmMuaW1fc2VsZiBpcyBub3QgTm9uZToKKyAgICAgICAgIyBpbXBsaWNpdCAnc2VsZicgKG9yICdjbHMnIGZvciBjbGFzc21ldGhvZHMpIGFyZ3VtZW50CisgICAgICAgIHBvc2l0aW9uYWwgPSAoZnVuYy5pbV9zZWxmLCkgKyBwb3NpdGlvbmFsCisgICAgbnVtX3BvcyA9IGxlbihwb3NpdGlvbmFsKQorICAgIG51bV90b3RhbCA9IG51bV9wb3MgKyBsZW4obmFtZWQpCisgICAgbnVtX2FyZ3MgPSBsZW4oYXJncykKKyAgICBudW1fZGVmYXVsdHMgPSBsZW4oZGVmYXVsdHMpIGlmIGRlZmF1bHRzIGVsc2UgMAorICAgIGZvciBhcmcsIHZhbHVlIGluIHppcChhcmdzLCBwb3NpdGlvbmFsKToKKyAgICAgICAgYXNzaWduKGFyZywgdmFsdWUpCisgICAgaWYgdmFyYXJnczoKKyAgICAgICAgaWYgbnVtX3BvcyA+IG51bV9hcmdzOgorICAgICAgICAgICAgYXNzaWduKHZhcmFyZ3MsIHBvc2l0aW9uYWxbLShudW1fcG9zLW51bV9hcmdzKTpdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzaWduKHZhcmFyZ3MsICgpKQorICAgIGVsaWYgMCA8IG51bV9hcmdzIDwgbnVtX3BvczoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclcygpIHRha2VzICVzICVkICVzICglZCBnaXZlbiknICUgKAorICAgICAgICAgICAgZl9uYW1lLCAnYXQgbW9zdCcgaWYgZGVmYXVsdHMgZWxzZSAnZXhhY3RseScsIG51bV9hcmdzLAorICAgICAgICAgICAgJ2FyZ3VtZW50cycgaWYgbnVtX2FyZ3MgPiAxIGVsc2UgJ2FyZ3VtZW50JywgbnVtX3RvdGFsKSkKKyAgICBlbGlmIG51bV9hcmdzID09IDAgYW5kIG51bV90b3RhbDoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclcygpIHRha2VzIG5vIGFyZ3VtZW50cyAoJWQgZ2l2ZW4pJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoZl9uYW1lLCBudW1fdG90YWwpKQorICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIHN0cikgYW5kIGFyZyBpbiBuYW1lZDoKKyAgICAgICAgICAgIGlmIGlzX2Fzc2lnbmVkKGFyZyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIlcygpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgJyVzJyIgJSAoZl9uYW1lLCBhcmcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NpZ24oYXJnLCBuYW1lZC5wb3AoYXJnKSkKKyAgICBpZiBkZWZhdWx0czogICAgIyBmaWxsIGluIGFueSBtaXNzaW5nIHZhbHVlcyB3aXRoIHRoZSBkZWZhdWx0cworICAgICAgICBmb3IgYXJnLCB2YWx1ZSBpbiB6aXAoYXJnc1stbnVtX2RlZmF1bHRzOl0sIGRlZmF1bHRzKToKKyAgICAgICAgICAgIGlmIG5vdCBpc19hc3NpZ25lZChhcmcpOgorICAgICAgICAgICAgICAgIGFzc2lnbihhcmcsIHZhbHVlKQorICAgIGlmIHZhcmt3OgorICAgICAgICBhc3NpZ24odmFya3csIG5hbWVkKQorICAgIGVsaWYgbmFtZWQ6CisgICAgICAgIHVuZXhwZWN0ZWQgPSBuZXh0KGl0ZXIobmFtZWQpKQorICAgICAgICBpZiBpc2luc3RhbmNlKHVuZXhwZWN0ZWQsIHVuaWNvZGUpOgorICAgICAgICAgICAgdW5leHBlY3RlZCA9IHVuZXhwZWN0ZWQuZW5jb2RlKHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKSwgJ3JlcGxhY2UnKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzKCkgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoZl9uYW1lLCB1bmV4cGVjdGVkKSkKKyAgICB1bmFzc2lnbmVkID0gbnVtX2FyZ3MgLSBsZW4oW2FyZyBmb3IgYXJnIGluIGFyZ3MgaWYgaXNfYXNzaWduZWQoYXJnKV0pCisgICAgaWYgdW5hc3NpZ25lZDoKKyAgICAgICAgbnVtX3JlcXVpcmVkID0gbnVtX2FyZ3MgLSBudW1fZGVmYXVsdHMKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclcygpIHRha2VzICVzICVkICVzICglZCBnaXZlbiknICUgKAorICAgICAgICAgICAgZl9uYW1lLCAnYXQgbGVhc3QnIGlmIGRlZmF1bHRzIGVsc2UgJ2V4YWN0bHknLCBudW1fcmVxdWlyZWQsCisgICAgICAgICAgICAnYXJndW1lbnRzJyBpZiBudW1fcmVxdWlyZWQgPiAxIGVsc2UgJ2FyZ3VtZW50JywgbnVtX3RvdGFsKSkKKyAgICByZXR1cm4gYXJnMnZhbHVlCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhY2sgZnJhbWUgZXh0cmFjdGlvbgogCiBUcmFjZWJhY2sgPSBuYW1lZHR1cGxlKCdUcmFjZWJhY2snLCAnZmlsZW5hbWUgbGluZW5vIGZ1bmN0aW9uIGNvZGVfY29udGV4dCBpbmRleCcpCkBAIC04OTcsNyArOTkwLDcgQEAKICAgICBlbHNlOgogICAgICAgICBsaW5lbm8gPSBmcmFtZS5mX2xpbmVubwogICAgIGlmIG5vdCBpc2ZyYW1lKGZyYW1lKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdhcmcgaXMgbm90IGEgZnJhbWUgb3IgdHJhY2ViYWNrIG9iamVjdCcpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBub3QgYSBmcmFtZSBvciB0cmFjZWJhY2sgb2JqZWN0Jy5mb3JtYXQoZnJhbWUpKQogCiAgICAgZmlsZW5hbWUgPSBnZXRzb3VyY2VmaWxlKGZyYW1lKSBvciBnZXRmaWxlKGZyYW1lKQogICAgIGlmIGNvbnRleHQgPiAwOgpkaWZmIC0tZ2l0IGEvTGliL2lvLnB5IGIvTGliL2lvLnB5CmluZGV4IDQwNjIzZDYuLjVjNDI5YzYgMTAwNjQ0Ci0tLSBhL0xpYi9pby5weQorKysgYi9MaWIvaW8ucHkKQEAgLTEsNSArMSw0IEBACi0iIiIKLVRoZSBpbyBtb2R1bGUgcHJvdmlkZXMgdGhlIFB5dGhvbiBpbnRlcmZhY2VzIHRvIHN0cmVhbSBoYW5kbGluZy4gVGhlCisiIiJUaGUgaW8gbW9kdWxlIHByb3ZpZGVzIHRoZSBQeXRob24gaW50ZXJmYWNlcyB0byBzdHJlYW0gaGFuZGxpbmcuIFRoZQogYnVpbHRpbiBvcGVuIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUuCiAKIEF0IHRoZSB0b3Agb2YgdGhlIEkvTyBoaWVyYXJjaHkgaXMgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgSU9CYXNlLiBJdApAQCAtMzUsOSArMzQsNiBAQAogIiIiCiAjIE5ldyBJL08gbGlicmFyeSBjb25mb3JtaW5nIHRvIFBFUCAzMTE2LgogCi0jIFRoaXMgaXMgYSBwcm90b3R5cGU7IGhvcGVmdWxseSBldmVudHVhbGx5IHNvbWUgb2YgdGhpcyB3aWxsIGJlCi0jIHJlaW1wbGVtZW50ZWQgaW4gQy4KLQogIyBYWFggZWRnZSBjYXNlcyB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIHJlYWRpbmcvd3JpdGluZwogIyBYWFggbmVlZCB0byBzdXBwb3J0IDEgbWVhbmluZyBsaW5lLWJ1ZmZlcmVkCiAjIFhYWCB3aGVuZXZlciBhbiBhcmd1bWVudCBpcyBOb25lLCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUKQEAgLTQ1LDE4NjEgKzQxLDU4IEBACiAjIFhYWCBidWZmZXJlZCByZWFkaW50byBzaG91bGQgd29yayB3aXRoIGFyYml0cmFyeSBidWZmZXIgb2JqZWN0cwogIyBYWFggdXNlIGluY3JlbWVudGFsIGVuY29kZXIgZm9yIHRleHQgb3V0cHV0LCBhdCBsZWFzdCBmb3IgVVRGLTE2IGFuZCBVVEYtOC1TSUcKICMgWFhYIGNoZWNrIHdyaXRhYmxlLCByZWFkYWJsZSBhbmQgc2Vla2FibGUgaW4gYXBwcm9wcmlhdGUgcGxhY2VzCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKwogCiBfX2F1dGhvcl9fID0gKCJHdWlkbyB2YW4gUm9zc3VtIDxndWlkb0BweXRob24ub3JnPiwgIgogICAgICAgICAgICAgICAiTWlrZSBWZXJkb25lIDxtaWtlLnZlcmRvbmVAZ21haWwuY29tPiwgIgotICAgICAgICAgICAgICAiTWFyayBSdXNzZWxsIDxtYXJrLnJ1c3NlbGxAemVuLmNvLnVrPiIpCisgICAgICAgICAgICAgICJNYXJrIFJ1c3NlbGwgPG1hcmsucnVzc2VsbEB6ZW4uY28udWs+LCAiCisgICAgICAgICAgICAgICJBbnRvaW5lIFBpdHJvdSA8c29saXBzaXNAcGl0cm91Lm5ldD4sICIKKyAgICAgICAgICAgICAgIkFtYXVyeSBGb3JnZW90IGQnQXJjIDxhbWF1cnlmYUBnbWFpbC5jb20+LCAiCisgICAgICAgICAgICAgICJCZW5qYW1pbiBQZXRlcnNvbiA8YmVuamFtaW5AcHl0aG9uLm9yZz4iKQogCiBfX2FsbF9fID0gWyJCbG9ja2luZ0lPRXJyb3IiLCAib3BlbiIsICJJT0Jhc2UiLCAiUmF3SU9CYXNlIiwgIkZpbGVJTyIsCiAgICAgICAgICAgICJCeXRlc0lPIiwgIlN0cmluZ0lPIiwgIkJ1ZmZlcmVkSU9CYXNlIiwKICAgICAgICAgICAgIkJ1ZmZlcmVkUmVhZGVyIiwgIkJ1ZmZlcmVkV3JpdGVyIiwgIkJ1ZmZlcmVkUldQYWlyIiwKLSAgICAgICAgICAgIkJ1ZmZlcmVkUmFuZG9tIiwgIlRleHRJT0Jhc2UiLCAiVGV4dElPV3JhcHBlciJdCisgICAgICAgICAgICJCdWZmZXJlZFJhbmRvbSIsICJUZXh0SU9CYXNlIiwgIlRleHRJT1dyYXBwZXIiLAorICAgICAgICAgICAiVW5zdXBwb3J0ZWRPcGVyYXRpb24iLCAiU0VFS19TRVQiLCAiU0VFS19DVVIiLCAiU0VFS19FTkQiXQogCi1pbXBvcnQgb3MKKworaW1wb3J0IF9pbwogaW1wb3J0IGFiYwotaW1wb3J0IGNvZGVjcwotaW1wb3J0IF9maWxlaW8KLWltcG9ydCB0aHJlYWRpbmcKIAotIyBvcGVuKCkgdXNlcyBzdF9ibGtzaXplIHdoZW5ldmVyIHdlIGNhbgotREVGQVVMVF9CVUZGRVJfU0laRSA9IDggKiAxMDI0ICAjIGJ5dGVzCitmcm9tIF9pbyBpbXBvcnQgKERFRkFVTFRfQlVGRkVSX1NJWkUsIEJsb2NraW5nSU9FcnJvciwgVW5zdXBwb3J0ZWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgIG9wZW4sIEZpbGVJTywgQnl0ZXNJTywgU3RyaW5nSU8sIEJ1ZmZlcmVkUmVhZGVyLAorICAgICAgICAgICAgICAgICBCdWZmZXJlZFdyaXRlciwgQnVmZmVyZWRSV1BhaXIsIEJ1ZmZlcmVkUmFuZG9tLAorICAgICAgICAgICAgICAgICBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyLCBUZXh0SU9XcmFwcGVyKQogCi0jIHB5M2sgaGFzIG9ubHkgbmV3IHN0eWxlIGNsYXNzZXMKLV9fbWV0YWNsYXNzX18gPSB0eXBlCitPcGVuV3JhcHBlciA9IF9pby5vcGVuICMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBfcHlpbwogCi1jbGFzcyBCbG9ja2luZ0lPRXJyb3IoSU9FcnJvcik6CisjIGZvciBzZWVrKCkKK1NFRUtfU0VUID0gMAorU0VFS19DVVIgPSAxCitTRUVLX0VORCA9IDIKIAotICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBJL08gd291bGQgYmxvY2sgb24gYSBub24tYmxvY2tpbmcgSS9PIHN0cmVhbS4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlcnJubywgc3RyZXJyb3IsIGNoYXJhY3RlcnNfd3JpdHRlbj0wKToKLSAgICAgICAgSU9FcnJvci5fX2luaXRfXyhzZWxmLCBlcnJubywgc3RyZXJyb3IpCi0gICAgICAgIHNlbGYuY2hhcmFjdGVyc193cml0dGVuID0gY2hhcmFjdGVyc193cml0dGVuCi0KLQotZGVmIG9wZW4oZmlsZSwgbW9kZT0iciIsIGJ1ZmZlcmluZz1Ob25lLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwKLSAgICAgICAgIG5ld2xpbmU9Tm9uZSwgY2xvc2VmZD1UcnVlKToKLSAgICByIiIiT3BlbiBmaWxlIGFuZCByZXR1cm4gYSBzdHJlYW0uIElmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQsIGFuIElPRXJyb3IgaXMKLSAgICByYWlzZWQuCi0KLSAgICBmaWxlIGlzIGVpdGhlciBhIHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgKGFuZCB0aGUgcGF0aCBpZiB0aGUgZmlsZQotICAgIGlzbid0IGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KSBvZiB0aGUgZmlsZSB0byBiZSBvcGVuZWQgb3IgYW4KLSAgICBpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZmlsZSB0byBiZSB3cmFwcGVkLiAoSWYgYSBmaWxlCi0gICAgZGVzY3JpcHRvciBpcyBnaXZlbiwgaXQgaXMgY2xvc2VkIHdoZW4gdGhlIHJldHVybmVkIEkvTyBvYmplY3QgaXMKLSAgICBjbG9zZWQsIHVubGVzcyBjbG9zZWZkIGlzIHNldCB0byBGYWxzZS4pCi0KLSAgICBtb2RlIGlzIGFuIG9wdGlvbmFsIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgbW9kZSBpbiB3aGljaCB0aGUgZmlsZQotICAgIGlzIG9wZW5lZC4gSXQgZGVmYXVsdHMgdG8gJ3InIHdoaWNoIG1lYW5zIG9wZW4gZm9yIHJlYWRpbmcgaW4gdGV4dAotICAgIG1vZGUuICBPdGhlciBjb21tb24gdmFsdWVzIGFyZSAndycgZm9yIHdyaXRpbmcgKHRydW5jYXRpbmcgdGhlIGZpbGUgaWYKLSAgICBpdCBhbHJlYWR5IGV4aXN0cyksIGFuZCAnYScgZm9yIGFwcGVuZGluZyAod2hpY2ggb24gc29tZSBVbml4IHN5c3RlbXMsCi0gICAgbWVhbnMgdGhhdCBhbGwgd3JpdGVzIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIHJlZ2FyZGxlc3Mgb2YgdGhlCi0gICAgY3VycmVudCBzZWVrIHBvc2l0aW9uKS4gSW4gdGV4dCBtb2RlLCBpZiBlbmNvZGluZyBpcyBub3Qgc3BlY2lmaWVkIHRoZQotICAgIGVuY29kaW5nIHVzZWQgaXMgcGxhdGZvcm0gZGVwZW5kZW50LiAoRm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgcmF3Ci0gICAgYnl0ZXMgdXNlIGJpbmFyeSBtb2RlIGFuZCBsZWF2ZSBlbmNvZGluZyB1bnNwZWNpZmllZC4pIFRoZSBhdmFpbGFibGUKLSAgICBtb2RlcyBhcmU6Ci0KLSAgICA9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgQ2hhcmFjdGVyIE1lYW5pbmcKLSAgICAtLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgJ3InICAgICAgIG9wZW4gZm9yIHJlYWRpbmcgKGRlZmF1bHQpCi0gICAgJ3cnICAgICAgIG9wZW4gZm9yIHdyaXRpbmcsIHRydW5jYXRpbmcgdGhlIGZpbGUgZmlyc3QKLSAgICAnYScgICAgICAgb3BlbiBmb3Igd3JpdGluZywgYXBwZW5kaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgaWYgaXQgZXhpc3RzCi0gICAgJ2InICAgICAgIGJpbmFyeSBtb2RlCi0gICAgJ3QnICAgICAgIHRleHQgbW9kZSAoZGVmYXVsdCkKLSAgICAnKycgICAgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpCi0gICAgJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgdW5uZWVkZWQKLSAgICAgICAgICAgICAgZm9yIG5ldyBjb2RlKQotICAgID09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb20KLSAgICBhY2Nlc3MsIHRoZSBtb2RlICd3K2InIG9wZW5zIGFuZCB0cnVuY2F0ZXMgdGhlIGZpbGUgdG8gMCBieXRlcywgd2hpbGUKLSAgICAncitiJyBvcGVucyB0aGUgZmlsZSB3aXRob3V0IHRydW5jYXRpb24uCi0KLSAgICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGZpbGVzIG9wZW5lZCBpbiBiaW5hcnkgYW5kIHRleHQgbW9kZXMsCi0gICAgZXZlbiB3aGVuIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0gZG9lc24ndC4gRmlsZXMgb3BlbmVkIGluCi0gICAgYmluYXJ5IG1vZGUgKGFwcGVuZGluZyAnYicgdG8gdGhlIG1vZGUgYXJndW1lbnQpIHJldHVybiBjb250ZW50cyBhcwotICAgIGJ5dGVzIG9iamVjdHMgd2l0aG91dCBhbnkgZGVjb2RpbmcuIEluIHRleHQgbW9kZSAodGhlIGRlZmF1bHQsIG9yIHdoZW4KLSAgICAndCcgaXMgYXBwZW5kZWQgdG8gdGhlIG1vZGUgYXJndW1lbnQpLCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXJlCi0gICAgcmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYQotICAgIHBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLgotCi0gICAgYnVmZmVyaW5nIGlzIGFuIG9wdGlvbmFsIGludGVnZXIgdXNlZCB0byBzZXQgdGhlIGJ1ZmZlcmluZyBwb2xpY3kuCi0gICAgUGFzcyAwIHRvIHN3aXRjaCBidWZmZXJpbmcgb2ZmIChvbmx5IGFsbG93ZWQgaW4gYmluYXJ5IG1vZGUpLCAxIHRvIHNlbGVjdAotICAgIGxpbmUgYnVmZmVyaW5nIChvbmx5IHVzYWJsZSBpbiB0ZXh0IG1vZGUpLCBhbmQgYW4gaW50ZWdlciA+IDEgdG8gaW5kaWNhdGUKLSAgICB0aGUgc2l6ZSBvZiBhIGZpeGVkLXNpemUgY2h1bmsgYnVmZmVyLiAgV2hlbiBubyBidWZmZXJpbmcgYXJndW1lbnQgaXMKLSAgICBnaXZlbiwgdGhlIGRlZmF1bHQgYnVmZmVyaW5nIHBvbGljeSB3b3JrcyBhcyBmb2xsb3dzOgotCi0gICAgKiBCaW5hcnkgZmlsZXMgYXJlIGJ1ZmZlcmVkIGluIGZpeGVkLXNpemUgY2h1bmtzOyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyCi0gICAgICBpcyBjaG9zZW4gdXNpbmcgYSBoZXVyaXN0aWMgdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgdW5kZXJseWluZyBkZXZpY2UncwotICAgICAgImJsb2NrIHNpemUiIGFuZCBmYWxsaW5nIGJhY2sgb24gYGlvLkRFRkFVTFRfQlVGRkVSX1NJWkVgLgotICAgICAgT24gbWFueSBzeXN0ZW1zLCB0aGUgYnVmZmVyIHdpbGwgdHlwaWNhbGx5IGJlIDQwOTYgb3IgODE5MiBieXRlcyBsb25nLgotCi0gICAgKiAiSW50ZXJhY3RpdmUiIHRleHQgZmlsZXMgKGZpbGVzIGZvciB3aGljaCBpc2F0dHkoKSByZXR1cm5zIFRydWUpCi0gICAgICB1c2UgbGluZSBidWZmZXJpbmcuICBPdGhlciB0ZXh0IGZpbGVzIHVzZSB0aGUgcG9saWN5IGRlc2NyaWJlZCBhYm92ZQotICAgICAgZm9yIGJpbmFyeSBmaWxlcy4KLQotICAgIGVuY29kaW5nIGlzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB1c2VkIHRvIGRlY29kZSBvciBlbmNvZGUgdGhlCi0gICAgZmlsZS4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgZW5jb2RpbmcgaXMKLSAgICBwbGF0Zm9ybSBkZXBlbmRlbnQsIGJ1dCBhbnkgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IFB5dGhvbiBjYW4gYmUKLSAgICBwYXNzZWQuICBTZWUgdGhlIGNvZGVjcyBtb2R1bGUgZm9yIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBlbmNvZGluZ3MuCi0KLSAgICBlcnJvcnMgaXMgYW4gb3B0aW9uYWwgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIGhvdyBlbmNvZGluZyBlcnJvcnMgYXJlIHRvCi0gICAgYmUgaGFuZGxlZC0tLXRoaXMgYXJndW1lbnQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGJpbmFyeSBtb2RlLiBQYXNzCi0gICAgJ3N0cmljdCcgdG8gcmFpc2UgYSBWYWx1ZUVycm9yIGV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhbiBlbmNvZGluZyBlcnJvcgotICAgICh0aGUgZGVmYXVsdCBvZiBOb25lIGhhcyB0aGUgc2FtZSBlZmZlY3QpLCBvciBwYXNzICdpZ25vcmUnIHRvIGlnbm9yZQotICAgIGVycm9ycy4gKE5vdGUgdGhhdCBpZ25vcmluZyBlbmNvZGluZyBlcnJvcnMgY2FuIGxlYWQgdG8gZGF0YSBsb3NzLikKLSAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGNvZGVjcy5yZWdpc3RlciBmb3IgYSBsaXN0IG9mIHRoZSBwZXJtaXR0ZWQKLSAgICBlbmNvZGluZyBlcnJvciBzdHJpbmdzLgotCi0gICAgbmV3bGluZSBjb250cm9scyBob3cgdW5pdmVyc2FsIG5ld2xpbmVzIHdvcmtzIChpdCBvbmx5IGFwcGxpZXMgdG8gdGV4dAotICAgIG1vZGUpLiBJdCBjYW4gYmUgTm9uZSwgJycsICdcbicsICdccicsIGFuZCAnXHJcbicuICBJdCB3b3JrcyBhcwotICAgIGZvbGxvd3M6Ci0KLSAgICAqIE9uIGlucHV0LCBpZiBuZXdsaW5lIGlzIE5vbmUsIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzCi0gICAgICBlbmFibGVkLiBMaW5lcyBpbiB0aGUgaW5wdXQgY2FuIGVuZCBpbiAnXG4nLCAnXHInLCBvciAnXHJcbicsIGFuZAotICAgICAgdGhlc2UgYXJlIHRyYW5zbGF0ZWQgaW50byAnXG4nIGJlZm9yZSBiZWluZyByZXR1cm5lZCB0byB0aGUKLSAgICAgIGNhbGxlci4gSWYgaXQgaXMgJycsIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgaXMgZW5hYmxlZCwgYnV0IGxpbmUKLSAgICAgIGVuZGluZ3MgYXJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdW50cmFuc2xhdGVkLiBJZiBpdCBoYXMgYW55IG9mCi0gICAgICB0aGUgb3RoZXIgbGVnYWwgdmFsdWVzLCBpbnB1dCBsaW5lcyBhcmUgb25seSB0ZXJtaW5hdGVkIGJ5IHRoZSBnaXZlbgotICAgICAgc3RyaW5nLCBhbmQgdGhlIGxpbmUgZW5kaW5nIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdW50cmFuc2xhdGVkLgotCi0gICAgKiBPbiBvdXRwdXQsIGlmIG5ld2xpbmUgaXMgTm9uZSwgYW55ICdcbicgY2hhcmFjdGVycyB3cml0dGVuIGFyZQotICAgICAgdHJhbnNsYXRlZCB0byB0aGUgc3lzdGVtIGRlZmF1bHQgbGluZSBzZXBhcmF0b3IsIG9zLmxpbmVzZXAuIElmCi0gICAgICBuZXdsaW5lIGlzICcnLCBubyB0cmFuc2xhdGlvbiB0YWtlcyBwbGFjZS4gSWYgbmV3bGluZSBpcyBhbnkgb2YgdGhlCi0gICAgICBvdGhlciBsZWdhbCB2YWx1ZXMsIGFueSAnXG4nIGNoYXJhY3RlcnMgd3JpdHRlbiBhcmUgdHJhbnNsYXRlZCB0bwotICAgICAgdGhlIGdpdmVuIHN0cmluZy4KLQotICAgIElmIGNsb3NlZmQgaXMgRmFsc2UsIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGtlcHQgb3BlbgotICAgIHdoZW4gdGhlIGZpbGUgaXMgY2xvc2VkLiBUaGlzIGRvZXMgbm90IHdvcmsgd2hlbiBhIGZpbGUgbmFtZSBpcyBnaXZlbgotICAgIGFuZCBtdXN0IGJlIFRydWUgaW4gdGhhdCBjYXNlLgotCi0gICAgb3BlbigpIHJldHVybnMgYSBmaWxlIG9iamVjdCB3aG9zZSB0eXBlIGRlcGVuZHMgb24gdGhlIG1vZGUsIGFuZAotICAgIHRocm91Z2ggd2hpY2ggdGhlIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucyBzdWNoIGFzIHJlYWRpbmcgYW5kIHdyaXRpbmcKLSAgICBhcmUgcGVyZm9ybWVkLiBXaGVuIG9wZW4oKSBpcyB1c2VkIHRvIG9wZW4gYSBmaWxlIGluIGEgdGV4dCBtb2RlICgndycsCi0gICAgJ3InLCAnd3QnLCAncnQnLCBldGMuKSwgaXQgcmV0dXJucyBhIFRleHRJT1dyYXBwZXIuIFdoZW4gdXNlZCB0byBvcGVuCi0gICAgYSBmaWxlIGluIGEgYmluYXJ5IG1vZGUsIHRoZSByZXR1cm5lZCBjbGFzcyB2YXJpZXM6IGluIHJlYWQgYmluYXJ5Ci0gICAgbW9kZSwgaXQgcmV0dXJucyBhIEJ1ZmZlcmVkUmVhZGVyOyBpbiB3cml0ZSBiaW5hcnkgYW5kIGFwcGVuZCBiaW5hcnkKLSAgICBtb2RlcywgaXQgcmV0dXJucyBhIEJ1ZmZlcmVkV3JpdGVyLCBhbmQgaW4gcmVhZC93cml0ZSBtb2RlLCBpdCByZXR1cm5zCi0gICAgYSBCdWZmZXJlZFJhbmRvbS4KLQotICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGEgc3RyaW5nIG9yIGJ5dGVhcnJheSBhcyBhIGZpbGUgZm9yIGJvdGgKLSAgICByZWFkaW5nIGFuZCB3cml0aW5nLiBGb3Igc3RyaW5ncyBTdHJpbmdJTyBjYW4gYmUgdXNlZCBsaWtlIGEgZmlsZQotICAgIG9wZW5lZCBpbiBhIHRleHQgbW9kZSwgYW5kIGZvciBieXRlcyBhIEJ5dGVzSU8gY2FuIGJlIHVzZWQgbGlrZSBhIGZpbGUKLSAgICBvcGVuZWQgaW4gYSBiaW5hcnkgbW9kZS4KLSAgICAiIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxlLCAoYmFzZXN0cmluZywgaW50KSk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW52YWxpZCBmaWxlOiAlciIgJSBmaWxlKQotICAgIGlmIG5vdCBpc2luc3RhbmNlKG1vZGUsIGJhc2VzdHJpbmcpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludmFsaWQgbW9kZTogJXIiICUgbW9kZSkKLSAgICBpZiBidWZmZXJpbmcgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKGJ1ZmZlcmluZywgaW50KToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbnZhbGlkIGJ1ZmZlcmluZzogJXIiICUgYnVmZmVyaW5nKQotICAgIGlmIGVuY29kaW5nIGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShlbmNvZGluZywgYmFzZXN0cmluZyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW52YWxpZCBlbmNvZGluZzogJXIiICUgZW5jb2RpbmcpCi0gICAgaWYgZXJyb3JzIGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShlcnJvcnMsIGJhc2VzdHJpbmcpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludmFsaWQgZXJyb3JzOiAlciIgJSBlcnJvcnMpCi0gICAgbW9kZXMgPSBzZXQobW9kZSkKLSAgICBpZiBtb2RlcyAtIHNldCgiYXJ3Yit0VSIpIG9yIGxlbihtb2RlKSA+IGxlbihtb2Rlcyk6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgbW9kZTogJXIiICUgbW9kZSkKLSAgICByZWFkaW5nID0gInIiIGluIG1vZGVzCi0gICAgd3JpdGluZyA9ICJ3IiBpbiBtb2RlcwotICAgIGFwcGVuZGluZyA9ICJhIiBpbiBtb2RlcwotICAgIHVwZGF0aW5nID0gIisiIGluIG1vZGVzCi0gICAgdGV4dCA9ICJ0IiBpbiBtb2RlcwotICAgIGJpbmFyeSA9ICJiIiBpbiBtb2RlcwotICAgIGlmICJVIiBpbiBtb2RlczoKLSAgICAgICAgaWYgd3JpdGluZyBvciBhcHBlbmRpbmc6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCB1c2UgVSBhbmQgd3JpdGluZyBtb2RlIGF0IG9uY2UiKQotICAgICAgICByZWFkaW5nID0gVHJ1ZQotICAgIGlmIHRleHQgYW5kIGJpbmFyeToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgaGF2ZSB0ZXh0IGFuZCBiaW5hcnkgbW9kZSBhdCBvbmNlIikKLSAgICBpZiByZWFkaW5nICsgd3JpdGluZyArIGFwcGVuZGluZyA+IDE6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgcmVhZC93cml0ZS9hcHBlbmQgbW9kZSBhdCBvbmNlIikKLSAgICBpZiBub3QgKHJlYWRpbmcgb3Igd3JpdGluZyBvciBhcHBlbmRpbmcpOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtdXN0IGhhdmUgZXhhY3RseSBvbmUgb2YgcmVhZC93cml0ZS9hcHBlbmQgbW9kZSIpCi0gICAgaWYgYmluYXJ5IGFuZCBlbmNvZGluZyBpcyBub3QgTm9uZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYmluYXJ5IG1vZGUgZG9lc24ndCB0YWtlIGFuIGVuY29kaW5nIGFyZ3VtZW50IikKLSAgICBpZiBiaW5hcnkgYW5kIGVycm9ycyBpcyBub3QgTm9uZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYmluYXJ5IG1vZGUgZG9lc24ndCB0YWtlIGFuIGVycm9ycyBhcmd1bWVudCIpCi0gICAgaWYgYmluYXJ5IGFuZCBuZXdsaW5lIGlzIG5vdCBOb25lOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJiaW5hcnkgbW9kZSBkb2Vzbid0IHRha2UgYSBuZXdsaW5lIGFyZ3VtZW50IikKLSAgICByYXcgPSBGaWxlSU8oZmlsZSwKLSAgICAgICAgICAgICAgICAgKHJlYWRpbmcgYW5kICJyIiBvciAiIikgKwotICAgICAgICAgICAgICAgICAod3JpdGluZyBhbmQgInciIG9yICIiKSArCi0gICAgICAgICAgICAgICAgIChhcHBlbmRpbmcgYW5kICJhIiBvciAiIikgKwotICAgICAgICAgICAgICAgICAodXBkYXRpbmcgYW5kICIrIiBvciAiIiksCi0gICAgICAgICAgICAgICAgIGNsb3NlZmQpCi0gICAgaWYgYnVmZmVyaW5nIGlzIE5vbmU6Ci0gICAgICAgIGJ1ZmZlcmluZyA9IC0xCi0gICAgbGluZV9idWZmZXJpbmcgPSBGYWxzZQotICAgIGlmIGJ1ZmZlcmluZyA9PSAxIG9yIGJ1ZmZlcmluZyA8IDAgYW5kIHJhdy5pc2F0dHkoKToKLSAgICAgICAgYnVmZmVyaW5nID0gLTEKLSAgICAgICAgbGluZV9idWZmZXJpbmcgPSBUcnVlCi0gICAgaWYgYnVmZmVyaW5nIDwgMDoKLSAgICAgICAgYnVmZmVyaW5nID0gREVGQVVMVF9CVUZGRVJfU0laRQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBicyA9IG9zLmZzdGF0KHJhdy5maWxlbm8oKSkuc3RfYmxrc2l6ZQotICAgICAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBicyA+IDE6Ci0gICAgICAgICAgICAgICAgYnVmZmVyaW5nID0gYnMKLSAgICBpZiBidWZmZXJpbmcgPCAwOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGJ1ZmZlcmluZyBzaXplIikKLSAgICBpZiBidWZmZXJpbmcgPT0gMDoKLSAgICAgICAgaWYgYmluYXJ5OgotICAgICAgICAgICAgcmV0dXJuIHJhdwotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCBoYXZlIHVuYnVmZmVyZWQgdGV4dCBJL08iKQotICAgIGlmIHVwZGF0aW5nOgotICAgICAgICBidWZmZXIgPSBCdWZmZXJlZFJhbmRvbShyYXcsIGJ1ZmZlcmluZykKLSAgICBlbGlmIHdyaXRpbmcgb3IgYXBwZW5kaW5nOgotICAgICAgICBidWZmZXIgPSBCdWZmZXJlZFdyaXRlcihyYXcsIGJ1ZmZlcmluZykKLSAgICBlbGlmIHJlYWRpbmc6Ci0gICAgICAgIGJ1ZmZlciA9IEJ1ZmZlcmVkUmVhZGVyKHJhdywgYnVmZmVyaW5nKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gbW9kZTogJXIiICUgbW9kZSkKLSAgICBpZiBiaW5hcnk6Ci0gICAgICAgIHJldHVybiBidWZmZXIKLSAgICB0ZXh0ID0gVGV4dElPV3JhcHBlcihidWZmZXIsIGVuY29kaW5nLCBlcnJvcnMsIG5ld2xpbmUsIGxpbmVfYnVmZmVyaW5nKQotICAgIHRleHQubW9kZSA9IG1vZGUKLSAgICByZXR1cm4gdGV4dAotCi1jbGFzcyBfRG9jRGVzY3JpcHRvcjoKLSAgICAiIiJIZWxwZXIgZm9yIGJ1aWx0aW5zLm9wZW4uX19kb2NfXwotICAgICIiIgotICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iaiwgdHlwKToKLSAgICAgICAgcmV0dXJuICgKLSAgICAgICAgICAgICJvcGVuKGZpbGUsIG1vZGU9J3InLCBidWZmZXJpbmc9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSwgIgotICAgICAgICAgICAgICAgICAiZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSwgY2xvc2VmZD1UcnVlKVxuXG4iICsKLSAgICAgICAgICAgIG9wZW4uX19kb2NfXykKLQotY2xhc3MgT3BlbldyYXBwZXI6Ci0gICAgIiIiV3JhcHBlciBmb3IgYnVpbHRpbnMub3BlbgotCi0gICAgVHJpY2sgc28gdGhhdCBvcGVuIHdvbid0IGJlY29tZSBhIGJvdW5kIG1ldGhvZCB3aGVuIHN0b3JlZAotICAgIGFzIGEgY2xhc3MgdmFyaWFibGUgKGFzIGR1bWJkYm0gZG9lcykuCi0KLSAgICBTZWUgaW5pdHN0ZGlvKCkgaW4gUHl0aG9uL3B5dGhvbnJ1bi5jLgotICAgICIiIgotICAgIF9fZG9jX18gPSBfRG9jRGVzY3JpcHRvcigpCi0KLSAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHJldHVybiBvcGVuKCphcmdzLCAqKmt3YXJncykKLQotCi1jbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBJT0Vycm9yKToKLSAgICBwYXNzCi0KLQotY2xhc3MgSU9CYXNlKG9iamVjdCk6Ci0KLSAgICAiIiJUaGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYWxsIEkvTyBjbGFzc2VzLCBhY3Rpbmcgb24gc3RyZWFtcyBvZgotICAgIGJ5dGVzLiBUaGVyZSBpcyBubyBwdWJsaWMgY29uc3RydWN0b3IuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGR1bW15IGltcGxlbWVudGF0aW9ucyBmb3IgbWFueSBtZXRob2RzIHRoYXQKLSAgICBkZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIHNlbGVjdGl2ZWx5OyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMKLSAgICByZXByZXNlbnQgYSBmaWxlIHRoYXQgY2Fubm90IGJlIHJlYWQsIHdyaXR0ZW4gb3Igc2Vla2VkLgotCi0gICAgRXZlbiB0aG91Z2ggSU9CYXNlIGRvZXMgbm90IGRlY2xhcmUgcmVhZCwgcmVhZGludG8sIG9yIHdyaXRlIGJlY2F1c2UKLSAgICB0aGVpciBzaWduYXR1cmVzIHdpbGwgdmFyeSwgaW1wbGVtZW50YXRpb25zIGFuZCBjbGllbnRzIHNob3VsZAotICAgIGNvbnNpZGVyIHRob3NlIG1ldGhvZHMgcGFydCBvZiB0aGUgaW50ZXJmYWNlLiBBbHNvLCBpbXBsZW1lbnRhdGlvbnMKLSAgICBtYXkgcmFpc2UgYSBJT0Vycm9yIHdoZW4gb3BlcmF0aW9ucyB0aGV5IGRvIG5vdCBzdXBwb3J0IGFyZSBjYWxsZWQuCi0KLSAgICBUaGUgYmFzaWMgdHlwZSB1c2VkIGZvciBiaW5hcnkgZGF0YSByZWFkIGZyb20gb3Igd3JpdHRlbiB0byBhIGZpbGUgaXMKLSAgICBieXRlcy4gYnl0ZWFycmF5cyBhcmUgYWNjZXB0ZWQgdG9vLCBhbmQgaW4gc29tZSBjYXNlcyAoc3VjaCBhcwotICAgIHJlYWRpbnRvKSBuZWVkZWQuIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoIHN0ciBkYXRhLgotCi0gICAgTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXZlbiBpbnF1aXJpZXMpIG9uIGEgY2xvc2VkIHN0cmVhbSBpcwotICAgIHVuZGVmaW5lZC4gSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSBJT0Vycm9yIGluIHRoaXMgY2FzZS4KLQotICAgIElPQmFzZSAoYW5kIGl0cyBzdWJjbGFzc2VzKSBzdXBwb3J0IHRoZSBpdGVyYXRvciBwcm90b2NvbCwgbWVhbmluZwotICAgIHRoYXQgYW4gSU9CYXNlIG9iamVjdCBjYW4gYmUgaXRlcmF0ZWQgb3ZlciB5aWVsZGluZyB0aGUgbGluZXMgaW4gYQotICAgIHN0cmVhbS4KLQotICAgIElPQmFzZSBhbHNvIHN1cHBvcnRzIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiBJbiB0aGlzIGV4YW1wbGUsCi0gICAgZnAgaXMgY2xvc2VkIGFmdGVyIHRoZSBzdWl0ZSBvZiB0aGUgd2l0aCBzdGF0bWVudCBpcyBjb21wbGV0ZToKLQotICAgIHdpdGggb3Blbignc3BhbS50eHQnLCAncicpIGFzIGZwOgotICAgICAgICBmcC53cml0ZSgnU3BhbSBhbmQgZWdncyEnKQotICAgICIiIgotCisjIERlY2xhcmluZyBBQkNzIGluIEMgaXMgdHJpY2t5IHNvIHdlIGRvIGl0IGhlcmUuCisjIE1ldGhvZCBkZXNjcmlwdGlvbnMgYW5kIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgQworIyB2ZXJzaW9uIGhvd2V2ZXIuCitjbGFzcyBJT0Jhc2UoX2lvLl9JT0Jhc2UpOgogICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQogCi0gICAgIyMjIEludGVybmFsICMjIworY2xhc3MgUmF3SU9CYXNlKF9pby5fUmF3SU9CYXNlLCBJT0Jhc2UpOgorICAgIHBhc3MKIAotICAgIGRlZiBfdW5zdXBwb3J0ZWQoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBleGNlcHRpb24gZm9yIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMuIiIiCi0gICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCIlcy4lcygpIG5vdCBzdXBwb3J0ZWQiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBuYW1lKSkKK2NsYXNzIEJ1ZmZlcmVkSU9CYXNlKF9pby5fQnVmZmVyZWRJT0Jhc2UsIElPQmFzZSk6CisgICAgcGFzcwogCi0gICAgIyMjIFBvc2l0aW9uaW5nICMjIworY2xhc3MgVGV4dElPQmFzZShfaW8uX1RleHRJT0Jhc2UsIElPQmFzZSk6CisgICAgcGFzcwogCi0gICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2UgPSAwKToKLSAgICAgICAgIiIiQ2hhbmdlIHN0cmVhbSBwb3NpdGlvbi4KK1Jhd0lPQmFzZS5yZWdpc3RlcihGaWxlSU8pCiAKLSAgICAgICAgQ2hhbmdlIHRoZSBzdHJlYW0gcG9zaXRpb24gdG8gYnl0ZSBvZmZzZXQgb2Zmc2V0LiBvZmZzZXQgaXMKLSAgICAgICAgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIGluZGljYXRlZCBieSB3aGVuY2UuICBWYWx1ZXMKLSAgICAgICAgZm9yIHdoZW5jZSBhcmU6Citmb3Iga2xhc3MgaW4gKEJ5dGVzSU8sIEJ1ZmZlcmVkUmVhZGVyLCBCdWZmZXJlZFdyaXRlciwgQnVmZmVyZWRSYW5kb20sCisgICAgICAgICAgICAgIEJ1ZmZlcmVkUldQYWlyKToKKyAgICBCdWZmZXJlZElPQmFzZS5yZWdpc3RlcihrbGFzcykKIAotICAgICAgICAqIDAgLS0gc3RhcnQgb2Ygc3RyZWFtICh0aGUgZGVmYXVsdCk7IG9mZnNldCBzaG91bGQgYmUgemVybyBvciBwb3NpdGl2ZQotICAgICAgICAqIDEgLS0gY3VycmVudCBzdHJlYW0gcG9zaXRpb247IG9mZnNldCBtYXkgYmUgbmVnYXRpdmUKLSAgICAgICAgKiAyIC0tIGVuZCBvZiBzdHJlYW07IG9mZnNldCBpcyB1c3VhbGx5IG5lZ2F0aXZlCi0KLSAgICAgICAgUmV0dXJuIHRoZSBuZXcgYWJzb2x1dGUgcG9zaXRpb24uCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgic2VlayIpCi0KLSAgICBkZWYgdGVsbChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5zZWVrKDAsIDEpCi0KLSAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zID0gTm9uZSk6Ci0gICAgICAgICIiIlRydW5jYXRlIGZpbGUgdG8gc2l6ZSBieXRlcy4KLQotICAgICAgICBTaXplIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IElPIHBvc2l0aW9uIGFzIHJlcG9ydGVkIGJ5IHRlbGwoKS4gIFJldHVybgotICAgICAgICB0aGUgbmV3IHNpemUuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgidHJ1bmNhdGUiKQotCi0gICAgIyMjIEZsdXNoIGFuZCBjbG9zZSAjIyMKLQotICAgIGRlZiBmbHVzaChzZWxmKToKLSAgICAgICAgIiIiRmx1c2ggd3JpdGUgYnVmZmVycywgaWYgYXBwbGljYWJsZS4KLQotICAgICAgICBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgcmVhZC1vbmx5IGFuZCBub24tYmxvY2tpbmcgc3RyZWFtcy4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuX19jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmbHVzaCBvZiBjbG9zZWQgZmlsZSIpCi0gICAgICAgICNzZWxmLl9jaGVja0Nsb3NlZCgpCi0gICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4/Pz8KLQotICAgIF9fY2xvc2VkID0gRmFsc2UKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgIiIiRmx1c2ggYW5kIGNsb3NlIHRoZSBJTyBvYmplY3QuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGNsb3NlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9fY2xvc2VkOgotICAgICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgICAgICBzZWxmLl9fY2xvc2VkID0gVHJ1ZQotCi0gICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgICIiIkRlc3RydWN0b3IuICBDYWxscyBjbG9zZSgpLiIiIgotICAgICAgICAjIFRoZSB0cnkvZXhjZXB0IGJsb2NrIGlzIGluIGNhc2UgdGhpcyBpcyBjYWxsZWQgYXQgcHJvZ3JhbQotICAgICAgICAjIGV4aXQgdGltZSwgd2hlbiBpdCdzIHBvc3NpYmxlIHRoYXQgZ2xvYmFscyBoYXZlIGFscmVhZHkgYmVlbgotICAgICAgICAjIGRlbGV0ZWQsIGFuZCB0aGVuIHRoZSBjbG9zZSgpIGNhbGwgbWlnaHQgZmFpbC4gIFNpbmNlCi0gICAgICAgICMgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBzdWNoIGZhaWx1cmVzIGFuZCB0aGV5IGFubm95Ci0gICAgICAgICMgdGhlIGVuZCB1c2Vycywgd2Ugc3VwcHJlc3MgdGhlIHRyYWNlYmFjay4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICMjIyBJbnF1aXJpZXMgIyMjCi0KLSAgICBkZWYgc2Vla2FibGUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB3aGV0aGVyIG9iamVjdCBzdXBwb3J0cyByYW5kb20gYWNjZXNzLgotCi0gICAgICAgIElmIEZhbHNlLCBzZWVrKCksIHRlbGwoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIElPRXJyb3IuCi0gICAgICAgIFRoaXMgbWV0aG9kIG1heSBuZWVkIHRvIGRvIGEgdGVzdCBzZWVrKCkuCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfY2hlY2tTZWVrYWJsZShzZWxmLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGlmIGZpbGUgaXMgbm90IHNlZWthYmxlCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5zZWVrYWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiRmlsZSBvciBzdHJlYW0gaXMgbm90IHNlZWthYmxlLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmUgZWxzZSBtc2cpCi0KLQotICAgIGRlZiByZWFkYWJsZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgb2JqZWN0IHdhcyBvcGVuZWQgZm9yIHJlYWRpbmcuCi0KLSAgICAgICAgSWYgRmFsc2UsIHJlYWQoKSB3aWxsIHJhaXNlIElPRXJyb3IuCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfY2hlY2tSZWFkYWJsZShzZWxmLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGlmIGZpbGUgaXMgbm90IHJlYWRhYmxlCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5yZWFkYWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiRmlsZSBvciBzdHJlYW0gaXMgbm90IHJlYWRhYmxlLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmUgZWxzZSBtc2cpCi0KLSAgICBkZWYgd3JpdGFibGUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB3aGV0aGVyIG9iamVjdCB3YXMgb3BlbmVkIGZvciB3cml0aW5nLgotCi0gICAgICAgIElmIEZhbHNlLCB3cml0ZSgpIGFuZCB0cnVuY2F0ZSgpIHdpbGwgcmFpc2UgSU9FcnJvci4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9jaGVja1dyaXRhYmxlKHNlbGYsIG1zZz1Ob25lKToKLSAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIElPRXJyb3IgaWYgZmlsZSBpcyBub3Qgd3JpdGFibGUKLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLndyaXRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJGaWxlIG9yIHN0cmVhbSBpcyBub3Qgd3JpdGFibGUuIgotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtc2cgaXMgTm9uZSBlbHNlIG1zZykKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBjbG9zZWQoc2VsZik6Ci0gICAgICAgICIiImNsb3NlZDogYm9vbC4gIFRydWUgaWZmIHRoZSBmaWxlIGhhcyBiZWVuIGNsb3NlZC4KLQotICAgICAgICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoaXMgaXMgYSBwcm9wZXJ0eSwgbm90IGEgcHJlZGljYXRlLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX19jbG9zZWQKLQotICAgIGRlZiBfY2hlY2tDbG9zZWQoc2VsZiwgbXNnPU5vbmUpOgotICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gVmFsdWVFcnJvciBpZiBmaWxlIGlzIGNsb3NlZAotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmUgZWxzZSBtc2cpCi0KLSAgICAjIyMgQ29udGV4dCBtYW5hZ2VyICMjIwotCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgIiIiQ29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgUmV0dXJucyBzZWxmLiIiIgotICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICAiIiJDb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuICBDYWxscyBjbG9zZSgpIiIiCi0gICAgICAgIHNlbGYuY2xvc2UoKQotCi0gICAgIyMjIExvd2VyLWxldmVsIEFQSXMgIyMjCi0KLSAgICAjIFhYWCBTaG91bGQgdGhlc2UgYmUgcHJlc2VudCBldmVuIGlmIHVuaW1wbGVtZW50ZWQ/Ci0KLSAgICBkZWYgZmlsZW5vKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGlmIG9uZSBleGlzdHMuCi0KLSAgICAgICAgQW4gSU9FcnJvciBpcyByYWlzZWQgaWYgdGhlIElPIG9iamVjdCBkb2VzIG5vdCB1c2UgYSBmaWxlIGRlc2NyaXB0b3IuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgiZmlsZW5vIikKLQotICAgIGRlZiBpc2F0dHkoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoaXMgaXMgYW4gJ2ludGVyYWN0aXZlJyBzdHJlYW0uCi0KLSAgICAgICAgUmV0dXJuIEZhbHNlIGlmIGl0IGNhbid0IGJlIGRldGVybWluZWQuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgIyMjIFJlYWRsaW5lW3NdIGFuZCB3cml0ZWxpbmVzICMjIwotCi0gICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxpbWl0ID0gLTEpOgotICAgICAgICByIiIiUmVhZCBhbmQgcmV0dXJuIGEgbGluZSBmcm9tIHRoZSBzdHJlYW0uCi0KLSAgICAgICAgSWYgbGltaXQgaXMgc3BlY2lmaWVkLCBhdCBtb3N0IGxpbWl0IGJ5dGVzIHdpbGwgYmUgcmVhZC4KLQotICAgICAgICBUaGUgbGluZSB0ZXJtaW5hdG9yIGlzIGFsd2F5cyBiJ1xuJyBmb3IgYmluYXJ5IGZpbGVzOyBmb3IgdGV4dAotICAgICAgICBmaWxlcywgdGhlIG5ld2xpbmVzIGFyZ3VtZW50IHRvIG9wZW4gY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCi0gICAgICAgIHRlcm1pbmF0b3IocykgcmVjb2duaXplZC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAicGVlayIpOgotICAgICAgICAgICAgZGVmIG5yZWFkYWhlYWQoKToKLSAgICAgICAgICAgICAgICByZWFkYWhlYWQgPSBzZWxmLnBlZWsoMSkKLSAgICAgICAgICAgICAgICBpZiBub3QgcmVhZGFoZWFkOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgICAgIG4gPSAocmVhZGFoZWFkLmZpbmQoYiJcbiIpICsgMSkgb3IgbGVuKHJlYWRhaGVhZCkKLSAgICAgICAgICAgICAgICBpZiBsaW1pdCA+PSAwOgotICAgICAgICAgICAgICAgICAgICBuID0gbWluKG4sIGxpbWl0KQotICAgICAgICAgICAgICAgIHJldHVybiBuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWYgbnJlYWRhaGVhZCgpOgotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgICAgICBsaW1pdCA9IC0xCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCAoaW50LCBsb25nKSk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciIpCi0gICAgICAgIHJlcyA9IGJ5dGVhcnJheSgpCi0gICAgICAgIHdoaWxlIGxpbWl0IDwgMCBvciBsZW4ocmVzKSA8IGxpbWl0OgotICAgICAgICAgICAgYiA9IHNlbGYucmVhZChucmVhZGFoZWFkKCkpCi0gICAgICAgICAgICBpZiBub3QgYjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgcmVzICs9IGIKLSAgICAgICAgICAgIGlmIHJlcy5lbmRzd2l0aChiIlxuIik6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgcmV0dXJuIGJ5dGVzKHJlcykKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIG5leHQoc2VsZik6Ci0gICAgICAgIGxpbmUgPSBzZWxmLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgIHJldHVybiBsaW5lCi0KLSAgICBkZWYgcmVhZGxpbmVzKHNlbGYsIGhpbnQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgbGluZXMgZnJvbSB0aGUgc3RyZWFtLgotCi0gICAgICAgIGhpbnQgY2FuIGJlIHNwZWNpZmllZCB0byBjb250cm9sIHRoZSBudW1iZXIgb2YgbGluZXMgcmVhZDogbm8gbW9yZQotICAgICAgICBsaW5lcyB3aWxsIGJlIHJlYWQgaWYgdGhlIHRvdGFsIHNpemUgKGluIGJ5dGVzL2NoYXJhY3RlcnMpIG9mIGFsbAotICAgICAgICBsaW5lcyBzbyBmYXIgZXhjZWVkcyBoaW50LgotICAgICAgICAiIiIKLSAgICAgICAgaWYgaGludCBpcyBOb25lOgotICAgICAgICAgICAgaGludCA9IC0xCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGhpbnQsIChpbnQsIGxvbmcpKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaGludCBtdXN0IGJlIGFuIGludGVnZXIiKQotICAgICAgICBpZiBoaW50IDw9IDA6Ci0gICAgICAgICAgICByZXR1cm4gbGlzdChzZWxmKQotICAgICAgICBuID0gMAotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBsaW5lIGluIHNlbGY6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKLSAgICAgICAgICAgIG4gKz0gbGVuKGxpbmUpCi0gICAgICAgICAgICBpZiBuID49IGhpbnQ6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgcmV0dXJuIGxpbmVzCi0KLSAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBsaW5lcyk6Ci0gICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKGxpbmUpCi0KLQotY2xhc3MgUmF3SU9CYXNlKElPQmFzZSk6Ci0KLSAgICAiIiJCYXNlIGNsYXNzIGZvciByYXcgYmluYXJ5IEkvTy4iIiIKLQotICAgICMgVGhlIHJlYWQoKSBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyByZWFkaW50bygpOyBkZXJpdmVkCi0gICAgIyBjbGFzc2VzIHRoYXQgd2FudCB0byBzdXBwb3J0IHJlYWQoKSBvbmx5IG5lZWQgdG8gaW1wbGVtZW50Ci0gICAgIyByZWFkaW50bygpIGFzIGEgcHJpbWl0aXZlIG9wZXJhdGlvbi4gIEluIGdlbmVyYWwsIHJlYWRpbnRvKCkgY2FuIGJlCi0gICAgIyBtb3JlIGVmZmljaWVudCB0aGFuIHJlYWQoKS4KLQotICAgICMgKEl0IHdvdWxkIGJlIHRlbXB0aW5nIHRvIGFsc28gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgotICAgICMgcmVhZGludG8oKSBpbiB0ZXJtcyBvZiByZWFkKCksIGluIGNhc2UgdGhlIGxhdHRlciBpcyBhIG1vcmUgc3VpdGFibGUKLSAgICAjIHByaW1pdGl2ZSBvcGVyYXRpb24sIGJ1dCB0aGF0IHdvdWxkIGxlYWQgdG8gbmFzdHkgcmVjdXJzaW9uIGluIGNhc2UKLSAgICAjIGEgc3ViY2xhc3MgZG9lc24ndCBpbXBsZW1lbnQgZWl0aGVyLikKLQotICAgIGRlZiByZWFkKHNlbGYsIG4gPSAtMSk6Ci0gICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBuIGJ5dGVzLgotCi0gICAgICAgIFJldHVybnMgYW4gZW1wdHkgYnl0ZXMgYXJyYXkgb24gRU9GLCBvciBOb25lIGlmIHRoZSBvYmplY3QgaXMKLSAgICAgICAgc2V0IG5vdCB0byBibG9jayBhbmQgaGFzIG5vIGRhdGEgdG8gcmVhZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQotICAgICAgICBpZiBuIDwgMDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJlYWRhbGwoKQotICAgICAgICBiID0gYnl0ZWFycmF5KG4uX19pbmRleF9fKCkpCi0gICAgICAgIG4gPSBzZWxmLnJlYWRpbnRvKGIpCi0gICAgICAgIGRlbCBiW246XQotICAgICAgICByZXR1cm4gYnl0ZXMoYikKLQotICAgIGRlZiByZWFkYWxsKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHVudGlsIEVPRiwgdXNpbmcgbXVsdGlwbGUgcmVhZCgpIGNhbGwuIiIiCi0gICAgICAgIHJlcyA9IGJ5dGVhcnJheSgpCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5yZWFkKERFRkFVTFRfQlVGRkVSX1NJWkUpCi0gICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgcmVzICs9IGRhdGEKLSAgICAgICAgcmV0dXJuIGJ5dGVzKHJlcykKLQotICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKLSAgICAgICAgIiIiUmVhZCB1cCB0byBsZW4oYikgYnl0ZXMgaW50byBiLgotCi0gICAgICAgIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKDAgZm9yIEVPRiksIG9yIE5vbmUgaWYgdGhlIG9iamVjdAotICAgICAgICBpcyBzZXQgbm90IHRvIGJsb2NrIGFzIGhhcyBubyBkYXRhIHRvIHJlYWQuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZGludG8iKQotCi0gICAgZGVmIHdyaXRlKHNlbGYsIGIpOgotICAgICAgICAiIiJXcml0ZSB0aGUgZ2l2ZW4gYnVmZmVyIHRvIHRoZSBJTyBzdHJlYW0uCi0KLSAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIHdoaWNoIG1heSBiZSBsZXNzIHRoYW4gbGVuKGIpLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoIndyaXRlIikKLQotCi1jbGFzcyBGaWxlSU8oX2ZpbGVpby5fRmlsZUlPLCBSYXdJT0Jhc2UpOgotCi0gICAgIiIiUmF3IEkvTyBpbXBsZW1lbnRhdGlvbiBmb3IgT1MgZmlsZXMuIiIiCi0KLSAgICAjIFRoaXMgbXVsdGlwbHkgaW5oZXJpdHMgZnJvbSBfRmlsZUlPIGFuZCBSYXdJT0Jhc2UgdG8gbWFrZQotICAgICMgaXNpbnN0YW5jZShpby5GaWxlSU8oKSwgaW8uUmF3SU9CYXNlKSByZXR1cm4gVHJ1ZSB3aXRob3V0IHJlcXVpcmluZwotICAgICMgdGhhdCBfZmlsZWlvLl9GaWxlSU8gaW5oZXJpdHMgZnJvbSBpby5SYXdJT0Jhc2UgKHdoaWNoIHdvdWxkIGJlIGhhcmQKLSAgICAjIHRvIGRvIHNpbmNlIF9maWxlaW8uYyBpcyB3cml0dGVuIGluIEMpLgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIG1vZGU9InIiLCBjbG9zZWZkPVRydWUpOgotICAgICAgICBfZmlsZWlvLl9GaWxlSU8uX19pbml0X18oc2VsZiwgbmFtZSwgbW9kZSwgY2xvc2VmZCkKLSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgX2ZpbGVpby5fRmlsZUlPLmNsb3NlKHNlbGYpCi0gICAgICAgIFJhd0lPQmFzZS5jbG9zZShzZWxmKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIG5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9uYW1lCi0KLQotY2xhc3MgQnVmZmVyZWRJT0Jhc2UoSU9CYXNlKToKLQotICAgICIiIkJhc2UgY2xhc3MgZm9yIGJ1ZmZlcmVkIElPIG9iamVjdHMuCi0KLSAgICBUaGUgbWFpbiBkaWZmZXJlbmNlIHdpdGggUmF3SU9CYXNlIGlzIHRoYXQgdGhlIHJlYWQoKSBtZXRob2QKLSAgICBzdXBwb3J0cyBvbWl0dGluZyB0aGUgc2l6ZSBhcmd1bWVudCwgYW5kIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0Ci0gICAgaW1wbGVtZW50YXRpb24gdGhhdCBkZWZlcnMgdG8gcmVhZGludG8oKS4KLQotICAgIEluIGFkZGl0aW9uLCByZWFkKCksIHJlYWRpbnRvKCkgYW5kIHdyaXRlKCkgbWF5IHJhaXNlCi0gICAgQmxvY2tpbmdJT0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgaW4gbm9uLWJsb2NraW5nCi0gICAgbW9kZSBhbmQgbm90IHJlYWR5OyB1bmxpa2UgdGhlaXIgcmF3IGNvdW50ZXJwYXJ0cywgdGhleSB3aWxsIG5ldmVyCi0gICAgcmV0dXJuIE5vbmUuCi0KLSAgICBBIHR5cGljYWwgaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBpbmhlcml0IGZyb20gYSBSYXdJT0Jhc2UKLSAgICBpbXBsZW1lbnRhdGlvbiwgYnV0IHdyYXAgb25lLgotICAgICIiIgotCi0gICAgZGVmIHJlYWQoc2VsZiwgbiA9IE5vbmUpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcy4KLQotICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgTm9uZSwgb3IgbmVnYXRpdmUsIHJlYWRzIGFuZAotICAgICAgICByZXR1cm5zIGFsbCBkYXRhIHVudGlsIEVPRi4KLQotICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgcG9zaXRpdmUsIGFuZCB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzCi0gICAgICAgIG5vdCAnaW50ZXJhY3RpdmUnLCBtdWx0aXBsZSByYXcgcmVhZHMgbWF5IGJlIGlzc3VlZCB0byBzYXRpc2Z5Ci0gICAgICAgIHRoZSBieXRlIGNvdW50ICh1bmxlc3MgRU9GIGlzIHJlYWNoZWQgZmlyc3QpLiAgQnV0IGZvcgotICAgICAgICBpbnRlcmFjdGl2ZSByYXcgc3RyZWFtcyAoWFhYIGFuZCBmb3IgcGlwZXM/KSwgYXQgbW9zdCBvbmUgcmF3Ci0gICAgICAgIHJlYWQgd2lsbCBiZSBpc3N1ZWQsIGFuZCBhIHNob3J0IHJlc3VsdCBkb2VzIG5vdCBpbXBseSB0aGF0Ci0gICAgICAgIEVPRiBpcyBpbW1pbmVudC4KLQotICAgICAgICBSZXR1cm5zIGFuIGVtcHR5IGJ5dGVzIGFycmF5IG9uIEVPRi4KLQotICAgICAgICBSYWlzZXMgQmxvY2tpbmdJT0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaGFzIG5vCi0gICAgICAgIGRhdGEgYXQgdGhlIG1vbWVudC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJyZWFkIikKLQotICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKLSAgICAgICAgIiIiUmVhZCB1cCB0byBsZW4oYikgYnl0ZXMgaW50byBiLgotCi0gICAgICAgIExpa2UgcmVhZCgpLCB0aGlzIG1heSBpc3N1ZSBtdWx0aXBsZSByZWFkcyB0byB0aGUgdW5kZXJseWluZyByYXcKLSAgICAgICAgc3RyZWFtLCB1bmxlc3MgdGhlIGxhdHRlciBpcyAnaW50ZXJhY3RpdmUnLgotCi0gICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkICgwIGZvciBFT0YpLgotCi0gICAgICAgIFJhaXNlcyBCbG9ja2luZ0lPRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBoYXMgbm8KLSAgICAgICAgZGF0YSBhdCB0aGUgbW9tZW50LgotICAgICAgICAiIiIKLSAgICAgICAgIyBYWFggVGhpcyBvdWdodCB0byB3b3JrIHdpdGggYW55dGhpbmcgdGhhdCBzdXBwb3J0cyB0aGUgYnVmZmVyIEFQSQotICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbihiKSkKLSAgICAgICAgbiA9IGxlbihkYXRhKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBiWzpuXSA9IGRhdGEKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICBpbXBvcnQgYXJyYXkKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGIsIGFycmF5LmFycmF5KToKLSAgICAgICAgICAgICAgICByYWlzZSBlcnIKLSAgICAgICAgICAgIGJbOm5dID0gYXJyYXkuYXJyYXkoYidiJywgZGF0YSkKLSAgICAgICAgcmV0dXJuIG4KLQotICAgIGRlZiB3cml0ZShzZWxmLCBiKToKLSAgICAgICAgIiIiV3JpdGUgdGhlIGdpdmVuIGJ1ZmZlciB0byB0aGUgSU8gc3RyZWFtLgotCi0gICAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIHdoaWNoIGlzIG5ldmVyIGxlc3MgdGhhbgotICAgICAgICBsZW4oYikuCi0KLSAgICAgICAgUmFpc2VzIEJsb2NraW5nSU9FcnJvciBpZiB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHRoZQotICAgICAgICB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gY2Fubm90IGFjY2VwdCBtb3JlIGRhdGEgYXQgdGhlIG1vbWVudC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJ3cml0ZSIpCi0KLQotY2xhc3MgX0J1ZmZlcmVkSU9NaXhpbihCdWZmZXJlZElPQmFzZSk6Ci0KLSAgICAiIiJBIG1peGluIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlcmVkSU9CYXNlIHdpdGggYW4gdW5kZXJseWluZyByYXcgc3RyZWFtLgotCi0gICAgVGhpcyBwYXNzZXMgbW9zdCByZXF1ZXN0cyBvbiB0byB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtLiAgSXQKLSAgICBkb2VzICpub3QqIHByb3ZpZGUgaW1wbGVtZW50YXRpb25zIG9mIHJlYWQoKSwgcmVhZGludG8oKSBvcgotICAgIHdyaXRlKCkuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3KToKLSAgICAgICAgc2VsZi5yYXcgPSByYXcKLQotICAgICMjIyBQb3NpdGlvbmluZyAjIyMKLQotICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgotICAgICAgICByZXR1cm4gc2VsZi5yYXcuc2Vlayhwb3MsIHdoZW5jZSkKLQotICAgIGRlZiB0ZWxsKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXcudGVsbCgpCi0KLSAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zPU5vbmUpOgotICAgICAgICAjIEZsdXNoIHRoZSBzdHJlYW0uICBXZSdyZSBtaXhpbmcgYnVmZmVyZWQgSS9PIHdpdGggbG93ZXItbGV2ZWwgSS9PLAotICAgICAgICAjIGFuZCBhIGZsdXNoIG1heSBiZSBuZWNlc3NhcnkgdG8gc3luY2ggYm90aCB2aWV3cyBvZiB0aGUgY3VycmVudAotICAgICAgICAjIGZpbGUgc3RhdGUuCi0gICAgICAgIHNlbGYuZmx1c2goKQotCi0gICAgICAgIGlmIHBvcyBpcyBOb25lOgotICAgICAgICAgICAgcG9zID0gc2VsZi50ZWxsKCkKLSAgICAgICAgIyBYWFg6IFNob3VsZCBzZWVrKCkgYmUgdXNlZCwgaW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBwb3NpdGlvbgotICAgICAgICAjIFhYWCAgZGlyZWN0bHkgdG8gdHJ1bmNhdGU/Ci0gICAgICAgIHJldHVybiBzZWxmLnJhdy50cnVuY2F0ZShwb3MpCi0KLSAgICAjIyMgRmx1c2ggYW5kIGNsb3NlICMjIwotCi0gICAgZGVmIGZsdXNoKHNlbGYpOgotICAgICAgICBzZWxmLnJhdy5mbHVzaCgpCi0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICAgICAgc2VsZi5yYXcuY2xvc2UoKQotCi0gICAgIyMjIElucXVpcmllcyAjIyMKLQotICAgIGRlZiBzZWVrYWJsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3LnNlZWthYmxlKCkKLQotICAgIGRlZiByZWFkYWJsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3LnJlYWRhYmxlKCkKLQotICAgIGRlZiB3cml0YWJsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3LndyaXRhYmxlKCkKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBjbG9zZWQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJhdy5jbG9zZWQKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXcubmFtZQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIG1vZGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJhdy5tb2RlCi0KLSAgICAjIyMgTG93ZXItbGV2ZWwgQVBJcyAjIyMKLQotICAgIGRlZiBmaWxlbm8oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJhdy5maWxlbm8oKQotCi0gICAgZGVmIGlzYXR0eShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3LmlzYXR0eSgpCi0KLQotY2xhc3MgX0J5dGVzSU8oQnVmZmVyZWRJT0Jhc2UpOgotCi0gICAgIiIiQnVmZmVyZWQgSS9PIGltcGxlbWVudGF0aW9uIHVzaW5nIGFuIGluLW1lbW9yeSBieXRlcyBidWZmZXIuIiIiCi0KLSAgICAjIFhYWCBNb3JlIGRvY3MKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbml0aWFsX2J5dGVzPU5vbmUpOgotICAgICAgICBidWYgPSBieXRlYXJyYXkoKQotICAgICAgICBpZiBpbml0aWFsX2J5dGVzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgYnVmICs9IGJ5dGVhcnJheShpbml0aWFsX2J5dGVzKQotICAgICAgICBzZWxmLl9idWZmZXIgPSBidWYKLSAgICAgICAgc2VsZi5fcG9zID0gMAotCi0gICAgZGVmIGdldHZhbHVlKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGJ5dGVzIHZhbHVlIChjb250ZW50cykgb2YgdGhlIGJ1ZmZlcgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJnZXR2YWx1ZSBvbiBjbG9zZWQgZmlsZSIpCi0gICAgICAgIHJldHVybiBieXRlcyhzZWxmLl9idWZmZXIpCi0KLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJlYWQgZnJvbSBjbG9zZWQgZmlsZSIpCi0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShuLCAoaW50LCBsb25nKSk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFyZ3VtZW50IG11c3QgYmUgYW4gaW50ZWdlciIpCi0gICAgICAgIGlmIG4gPCAwOgotICAgICAgICAgICAgbiA9IGxlbihzZWxmLl9idWZmZXIpCi0gICAgICAgIGlmIGxlbihzZWxmLl9idWZmZXIpIDw9IHNlbGYuX3BvczoKLSAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgbmV3cG9zID0gbWluKGxlbihzZWxmLl9idWZmZXIpLCBzZWxmLl9wb3MgKyBuKQotICAgICAgICBiID0gc2VsZi5fYnVmZmVyW3NlbGYuX3BvcyA6IG5ld3Bvc10KLSAgICAgICAgc2VsZi5fcG9zID0gbmV3cG9zCi0gICAgICAgIHJldHVybiBieXRlcyhiKQotCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgotICAgICAgICAiIiJ0aGlzIGlzIHRoZSBzYW1lIGFzIHJlYWQuCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkKG4pCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgYik6Ci0gICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigid3JpdGUgdG8gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBpc2luc3RhbmNlKGIsIHVuaWNvZGUpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYW4ndCB3cml0ZSB1bmljb2RlIHRvIGJpbmFyeSBzdHJlYW0iKQotICAgICAgICBuID0gbGVuKGIpCi0gICAgICAgIGlmIG4gPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIHBvcyA9IHNlbGYuX3BvcwotICAgICAgICBpZiBwb3MgPiBsZW4oc2VsZi5fYnVmZmVyKToKLSAgICAgICAgICAgICMgSW5zZXJ0cyBudWxsIGJ5dGVzIGJldHdlZW4gdGhlIGN1cnJlbnQgZW5kIG9mIHRoZSBmaWxlCi0gICAgICAgICAgICAjIGFuZCB0aGUgbmV3IHdyaXRlIHBvc2l0aW9uLgotICAgICAgICAgICAgcGFkZGluZyA9IGInXHgwMCcgKiAocG9zIC0gbGVuKHNlbGYuX2J1ZmZlcikpCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgKz0gcGFkZGluZwotICAgICAgICBzZWxmLl9idWZmZXJbcG9zOnBvcyArIG5dID0gYgotICAgICAgICBzZWxmLl9wb3MgKz0gbgotICAgICAgICByZXR1cm4gbgotCi0gICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6Ci0gICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2VlayBvbiBjbG9zZWQgZmlsZSIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBvcy5fX2luZGV4X18KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikgIyBmcm9tIGVycgotICAgICAgICBpZiB3aGVuY2UgPT0gMDoKLSAgICAgICAgICAgIGlmIHBvcyA8IDA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmVnYXRpdmUgc2VlayBwb3NpdGlvbiAlciIgJSAocG9zLCkpCi0gICAgICAgICAgICBzZWxmLl9wb3MgPSBwb3MKLSAgICAgICAgZWxpZiB3aGVuY2UgPT0gMToKLSAgICAgICAgICAgIHNlbGYuX3BvcyA9IG1heCgwLCBzZWxmLl9wb3MgKyBwb3MpCi0gICAgICAgIGVsaWYgd2hlbmNlID09IDI6Ci0gICAgICAgICAgICBzZWxmLl9wb3MgPSBtYXgoMCwgbGVuKHNlbGYuX2J1ZmZlcikgKyBwb3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHdoZW5jZSB2YWx1ZSIpCi0gICAgICAgIHJldHVybiBzZWxmLl9wb3MKLQotICAgIGRlZiB0ZWxsKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRlbGwgb24gY2xvc2VkIGZpbGUiKQotICAgICAgICByZXR1cm4gc2VsZi5fcG9zCi0KLSAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zPU5vbmUpOgotICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRydW5jYXRlIG9uIGNsb3NlZCBmaWxlIikKLSAgICAgICAgaWYgcG9zIGlzIE5vbmU6Ci0gICAgICAgICAgICBwb3MgPSBzZWxmLl9wb3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwb3MuX19pbmRleF9fCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikKLSAgICAgICAgICAgIGlmIHBvcyA8IDA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmVnYXRpdmUgdHJ1bmNhdGUgcG9zaXRpb24gJXIiICUgKHBvcywpKQotICAgICAgICBkZWwgc2VsZi5fYnVmZmVyW3BvczpdCi0gICAgICAgIHJldHVybiBwb3MKLQotICAgIGRlZiByZWFkYWJsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiB3cml0YWJsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBzZWVrYWJsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotIyBVc2UgdGhlIGZhc3RlciBpbXBsZW1lbnRhdGlvbiBvZiBCeXRlc0lPIGlmIGF2YWlsYWJsZQotdHJ5OgotICAgIGltcG9ydCBfYnl0ZXNpbwotCi0gICAgY2xhc3MgQnl0ZXNJTyhfYnl0ZXNpby5fQnl0ZXNJTywgQnVmZmVyZWRJT0Jhc2UpOgotICAgICAgICBfX2RvY19fID0gX2J5dGVzaW8uX0J5dGVzSU8uX19kb2NfXwotCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgQnl0ZXNJTyA9IF9CeXRlc0lPCi0KLQotY2xhc3MgQnVmZmVyZWRSZWFkZXIoX0J1ZmZlcmVkSU9NaXhpbik6Ci0KLSAgICAiIiJCdWZmZXJlZFJlYWRlcihyYXdbLCBidWZmZXJfc2l6ZV0pCi0KLSAgICBBIGJ1ZmZlciBmb3IgYSByZWFkYWJsZSwgc2VxdWVudGlhbCBCYXNlUmF3SU8gb2JqZWN0LgotCi0gICAgVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBCdWZmZXJlZFJlYWRlciBmb3IgdGhlIGdpdmVuIHJlYWRhYmxlIHJhdwotICAgIHN0cmVhbSBhbmQgYnVmZmVyX3NpemUuIElmIGJ1ZmZlcl9zaXplIGlzIG9taXR0ZWQsIERFRkFVTFRfQlVGRkVSX1NJWkUKLSAgICBpcyB1c2VkLgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdywgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSk6Ci0gICAgICAgICIiIkNyZWF0ZSBhIG5ldyBidWZmZXJlZCByZWFkZXIgdXNpbmcgdGhlIGdpdmVuIHJlYWRhYmxlIHJhdyBJTyBvYmplY3QuCi0gICAgICAgICIiIgotICAgICAgICByYXcuX2NoZWNrUmVhZGFibGUoKQotICAgICAgICBfQnVmZmVyZWRJT01peGluLl9faW5pdF9fKHNlbGYsIHJhdykKLSAgICAgICAgc2VsZi5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCi0gICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKLSAgICAgICAgc2VsZi5fcmVhZF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotCi0gICAgZGVmIF9yZXNldF9yZWFkX2J1ZihzZWxmKToKLSAgICAgICAgc2VsZi5fcmVhZF9idWYgPSBiIiIKLSAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCi0KLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICAiIiJSZWFkIG4gYnl0ZXMuCi0KLSAgICAgICAgUmV0dXJucyBleGFjdGx5IG4gYnl0ZXMgb2YgZGF0YSB1bmxlc3MgdGhlIHVuZGVybHlpbmcgcmF3IElPCi0gICAgICAgIHN0cmVhbSByZWFjaGVzIEVPRiBvciBpZiB0aGUgY2FsbCB3b3VsZCBibG9jayBpbiBub24tYmxvY2tpbmcKLSAgICAgICAgbW9kZS4gSWYgbiBpcyBuZWdhdGl2ZSwgcmVhZCB1bnRpbCBFT0Ygb3IgdW50aWwgcmVhZCgpIHdvdWxkCi0gICAgICAgIGJsb2NrLgotICAgICAgICAiIiIKLSAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZChuKQotCi0gICAgZGVmIF9yZWFkX3VubG9ja2VkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgIG5vZGF0YV92YWwgPSBiIiIKLSAgICAgICAgZW1wdHlfdmFsdWVzID0gKGIiIiwgTm9uZSkKLSAgICAgICAgYnVmID0gc2VsZi5fcmVhZF9idWYKLSAgICAgICAgcG9zID0gc2VsZi5fcmVhZF9wb3MKLQotICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgaXMgdW5zcGVjaWZpZWQuCi0gICAgICAgIGlmIG4gaXMgTm9uZSBvciBuID09IC0xOgotICAgICAgICAgICAgc2VsZi5fcmVzZXRfcmVhZF9idWYoKQotICAgICAgICAgICAgY2h1bmtzID0gW2J1Zltwb3M6XV0gICMgU3RyaXAgdGhlIGNvbnN1bWVkIGJ5dGVzLgotICAgICAgICAgICAgY3VycmVudF9zaXplID0gMAotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAjIFJlYWQgdW50aWwgRU9GIG9yIHVudGlsIHJlYWQoKSB3b3VsZCBibG9jay4KLSAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYucmF3LnJlYWQoKQotICAgICAgICAgICAgICAgIGlmIGNodW5rIGluIGVtcHR5X3ZhbHVlczoKLSAgICAgICAgICAgICAgICAgICAgbm9kYXRhX3ZhbCA9IGNodW5rCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgY3VycmVudF9zaXplICs9IGxlbihjaHVuaykKLSAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGNodW5rKQotICAgICAgICAgICAgcmV0dXJuIGIiIi5qb2luKGNodW5rcykgb3Igbm9kYXRhX3ZhbAotCi0gICAgICAgICMgVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIGlzIHNwZWNpZmllZCwgcmV0dXJuIGF0IG1vc3QgbiBieXRlcy4KLSAgICAgICAgYXZhaWwgPSBsZW4oYnVmKSAtIHBvcyAgIyBMZW5ndGggb2YgdGhlIGF2YWlsYWJsZSBidWZmZXJlZCBkYXRhLgotICAgICAgICBpZiBuIDw9IGF2YWlsOgotICAgICAgICAgICAgIyBGYXN0IHBhdGg6IHRoZSBkYXRhIHRvIHJlYWQgaXMgZnVsbHkgYnVmZmVyZWQuCi0gICAgICAgICAgICBzZWxmLl9yZWFkX3BvcyArPSBuCi0gICAgICAgICAgICByZXR1cm4gYnVmW3Bvczpwb3Mrbl0KLSAgICAgICAgIyBTbG93IHBhdGg6IHJlYWQgZnJvbSB0aGUgc3RyZWFtIHVudGlsIGVub3VnaCBieXRlcyBhcmUgcmVhZCwKLSAgICAgICAgIyBvciB1bnRpbCBhbiBFT0Ygb2NjdXJzIG9yIHVudGlsIHJlYWQoKSB3b3VsZCBibG9jay4KLSAgICAgICAgY2h1bmtzID0gW2J1Zltwb3M6XV0KLSAgICAgICAgd2FudGVkID0gbWF4KHNlbGYuYnVmZmVyX3NpemUsIG4pCi0gICAgICAgIHdoaWxlIGF2YWlsIDwgbjoKLSAgICAgICAgICAgIGNodW5rID0gc2VsZi5yYXcucmVhZCh3YW50ZWQpCi0gICAgICAgICAgICBpZiBjaHVuayBpbiBlbXB0eV92YWx1ZXM6Ci0gICAgICAgICAgICAgICAgbm9kYXRhX3ZhbCA9IGNodW5rCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGF2YWlsICs9IGxlbihjaHVuaykKLSAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoY2h1bmspCi0gICAgICAgICMgbiBpcyBtb3JlIHRoZW4gYXZhaWwgb25seSB3aGVuIGFuIEVPRiBvY2N1cnJlZCBvciB3aGVuCi0gICAgICAgICMgcmVhZCgpIHdvdWxkIGhhdmUgYmxvY2tlZC4KLSAgICAgICAgbiA9IG1pbihuLCBhdmFpbCkKLSAgICAgICAgb3V0ID0gYiIiLmpvaW4oY2h1bmtzKQotICAgICAgICBzZWxmLl9yZWFkX2J1ZiA9IG91dFtuOl0gICMgU2F2ZSB0aGUgZXh0cmEgZGF0YSBpbiB0aGUgYnVmZmVyLgotICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKLSAgICAgICAgcmV0dXJuIG91dFs6bl0gaWYgb3V0IGVsc2Ugbm9kYXRhX3ZhbAotCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKLSAgICAgICAgIiIiUmV0dXJucyBidWZmZXJlZCBieXRlcyB3aXRob3V0IGFkdmFuY2luZyB0aGUgcG9zaXRpb24uCi0KLSAgICAgICAgVGhlIGFyZ3VtZW50IGluZGljYXRlcyBhIGRlc2lyZWQgbWluaW1hbCBudW1iZXIgb2YgYnl0ZXM7IHdlCi0gICAgICAgIGRvIGF0IG1vc3Qgb25lIHJhdyByZWFkIHRvIHNhdGlzZnkgaXQuICBXZSBuZXZlciByZXR1cm4gbW9yZQotICAgICAgICB0aGFuIHNlbGYuYnVmZmVyX3NpemUuCi0gICAgICAgICIiIgotICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wZWVrX3VubG9ja2VkKG4pCi0KLSAgICBkZWYgX3BlZWtfdW5sb2NrZWQoc2VsZiwgbj0wKToKLSAgICAgICAgd2FudCA9IG1pbihuLCBzZWxmLmJ1ZmZlcl9zaXplKQotICAgICAgICBoYXZlID0gbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zCi0gICAgICAgIGlmIGhhdmUgPCB3YW50OgotICAgICAgICAgICAgdG9fcmVhZCA9IHNlbGYuYnVmZmVyX3NpemUgLSBoYXZlCi0gICAgICAgICAgICBjdXJyZW50ID0gc2VsZi5yYXcucmVhZCh0b19yZWFkKQotICAgICAgICAgICAgaWYgY3VycmVudDoKLSAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2J1ZiA9IHNlbGYuX3JlYWRfYnVmW3NlbGYuX3JlYWRfcG9zOl0gKyBjdXJyZW50Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCi0gICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2J1ZltzZWxmLl9yZWFkX3BvczpdCi0KLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6Ci0gICAgICAgICIiIlJlYWRzIHVwIHRvIG4gYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgotICAgICAgICAjIFJldHVybnMgdXAgdG8gbiBieXRlcy4gIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCB3ZQotICAgICAgICAjIG9ubHkgcmV0dXJuIGJ1ZmZlcmVkIGJ5dGVzLiAgT3RoZXJ3aXNlLCB3ZSBkbyBvbmUgcmF3IHJlYWQuCi0gICAgICAgIGlmIG4gPD0gMDoKLSAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICBzZWxmLl9wZWVrX3VubG9ja2VkKDEpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZCgKLSAgICAgICAgICAgICAgICBtaW4obiwgbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zKSkKLQotICAgIGRlZiB0ZWxsKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXcudGVsbCgpIC0gbGVuKHNlbGYuX3JlYWRfYnVmKSArIHNlbGYuX3JlYWRfcG9zCi0KLSAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZT0wKToKLSAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICBpZiB3aGVuY2UgPT0gMToKLSAgICAgICAgICAgICAgICBwb3MgLT0gbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zCi0gICAgICAgICAgICBwb3MgPSBzZWxmLnJhdy5zZWVrKHBvcywgd2hlbmNlKQotICAgICAgICAgICAgc2VsZi5fcmVzZXRfcmVhZF9idWYoKQotICAgICAgICAgICAgcmV0dXJuIHBvcwotCi0KLWNsYXNzIEJ1ZmZlcmVkV3JpdGVyKF9CdWZmZXJlZElPTWl4aW4pOgotCi0gICAgIiIiQSBidWZmZXIgZm9yIGEgd3JpdGVhYmxlIHNlcXVlbnRpYWwgUmF3SU8gb2JqZWN0LgotCi0gICAgVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBCdWZmZXJlZFdyaXRlciBmb3IgdGhlIGdpdmVuIHdyaXRlYWJsZSByYXcKLSAgICBzdHJlYW0uIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvCi0gICAgREVBRlVMVF9CVUZGRVJfU0laRS4gSWYgbWF4X2J1ZmZlcl9zaXplIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvCi0gICAgdHdpY2UgdGhlIGJ1ZmZlciBzaXplLgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdywKLSAgICAgICAgICAgICAgICAgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSwgbWF4X2J1ZmZlcl9zaXplPU5vbmUpOgotICAgICAgICByYXcuX2NoZWNrV3JpdGFibGUoKQotICAgICAgICBfQnVmZmVyZWRJT01peGluLl9faW5pdF9fKHNlbGYsIHJhdykKLSAgICAgICAgc2VsZi5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCi0gICAgICAgIHNlbGYubWF4X2J1ZmZlcl9zaXplID0gKDIqYnVmZmVyX3NpemUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWF4X2J1ZmZlcl9zaXplIGlzIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBtYXhfYnVmZmVyX3NpemUpCi0gICAgICAgIHNlbGYuX3dyaXRlX2J1ZiA9IGJ5dGVhcnJheSgpCi0gICAgICAgIHNlbGYuX3dyaXRlX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgYik6Ci0gICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigid3JpdGUgdG8gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBpc2luc3RhbmNlKGIsIHVuaWNvZGUpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYW4ndCB3cml0ZSB1bmljb2RlIHRvIGJpbmFyeSBzdHJlYW0iKQotICAgICAgICB3aXRoIHNlbGYuX3dyaXRlX2xvY2s6Ci0gICAgICAgICAgICAjIFhYWCB3ZSBjYW4gaW1wbGVtZW50IHNvbWUgbW9yZSB0cmlja3MgdG8gdHJ5IGFuZCBhdm9pZAotICAgICAgICAgICAgIyBwYXJ0aWFsIHdyaXRlcwotICAgICAgICAgICAgaWYgbGVuKHNlbGYuX3dyaXRlX2J1ZikgPiBzZWxmLmJ1ZmZlcl9zaXplOgotICAgICAgICAgICAgICAgICMgV2UncmUgZnVsbCwgc28gbGV0J3MgcHJlLWZsdXNoIHRoZSBidWZmZXIKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZsdXNoX3VubG9ja2VkKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgQmxvY2tpbmdJT0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgICMgV2UgY2FuJ3QgYWNjZXB0IGFueXRoaW5nIGVsc2UuCi0gICAgICAgICAgICAgICAgICAgICMgWFhYIFdoeSBub3QganVzdCBsZXQgdGhlIGV4Y2VwdGlvbiBwYXNzIHRocm91Z2g/Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEJsb2NraW5nSU9FcnJvcihlLmVycm5vLCBlLnN0cmVycm9yLCAwKQotICAgICAgICAgICAgYmVmb3JlID0gbGVuKHNlbGYuX3dyaXRlX2J1ZikKLSAgICAgICAgICAgIHNlbGYuX3dyaXRlX2J1Zi5leHRlbmQoYikKLSAgICAgICAgICAgIHdyaXR0ZW4gPSBsZW4oc2VsZi5fd3JpdGVfYnVmKSAtIGJlZm9yZQotICAgICAgICAgICAgaWYgbGVuKHNlbGYuX3dyaXRlX2J1ZikgPiBzZWxmLmJ1ZmZlcl9zaXplOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmx1c2hfdW5sb2NrZWQoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYuX3dyaXRlX2J1ZikgPiBzZWxmLm1heF9idWZmZXJfc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgV2UndmUgaGl0IG1heF9idWZmZXJfc2l6ZS4gV2UgaGF2ZSB0byBhY2NlcHQgYQotICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXJ0aWFsIHdyaXRlIGFuZCBjdXQgYmFjayBvdXIgYnVmZmVyLgotICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmFnZSA9IGxlbihzZWxmLl93cml0ZV9idWYpIC0gc2VsZi5tYXhfYnVmZmVyX3NpemUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2J1ZiA9IHNlbGYuX3dyaXRlX2J1Zls6c2VsZi5tYXhfYnVmZmVyX3NpemVdCi0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBCbG9ja2luZ0lPRXJyb3IoZS5lcnJubywgZS5zdHJlcnJvciwgb3ZlcmFnZSkKLSAgICAgICAgICAgIHJldHVybiB3cml0dGVuCi0KLSAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zPU5vbmUpOgotICAgICAgICB3aXRoIHNlbGYuX3dyaXRlX2xvY2s6Ci0gICAgICAgICAgICBzZWxmLl9mbHVzaF91bmxvY2tlZCgpCi0gICAgICAgICAgICBpZiBwb3MgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwb3MgPSBzZWxmLnJhdy50ZWxsKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJhdy50cnVuY2F0ZShwb3MpCi0KLSAgICBkZWYgZmx1c2goc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZmx1c2ggb2YgY2xvc2VkIGZpbGUiKQotICAgICAgICB3aXRoIHNlbGYuX3dyaXRlX2xvY2s6Ci0gICAgICAgICAgICBzZWxmLl9mbHVzaF91bmxvY2tlZCgpCi0KLSAgICBkZWYgX2ZsdXNoX3VubG9ja2VkKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZsdXNoIG9mIGNsb3NlZCBmaWxlIikKLSAgICAgICAgd3JpdHRlbiA9IDAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgc2VsZi5fd3JpdGVfYnVmOgotICAgICAgICAgICAgICAgIG4gPSBzZWxmLnJhdy53cml0ZShzZWxmLl93cml0ZV9idWYpCi0gICAgICAgICAgICAgICAgZGVsIHNlbGYuX3dyaXRlX2J1Zls6bl0KLSAgICAgICAgICAgICAgICB3cml0dGVuICs9IG4KLSAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvciBhcyBlOgotICAgICAgICAgICAgbiA9IGUuY2hhcmFjdGVyc193cml0dGVuCi0gICAgICAgICAgICBkZWwgc2VsZi5fd3JpdGVfYnVmWzpuXQotICAgICAgICAgICAgd3JpdHRlbiArPSBuCi0gICAgICAgICAgICByYWlzZSBCbG9ja2luZ0lPRXJyb3IoZS5lcnJubywgZS5zdHJlcnJvciwgd3JpdHRlbikKLQotICAgIGRlZiB0ZWxsKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXcudGVsbCgpICsgbGVuKHNlbGYuX3dyaXRlX2J1ZikKLQotICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgotICAgICAgICB3aXRoIHNlbGYuX3dyaXRlX2xvY2s6Ci0gICAgICAgICAgICBzZWxmLl9mbHVzaF91bmxvY2tlZCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yYXcuc2Vlayhwb3MsIHdoZW5jZSkKLQotCi1jbGFzcyBCdWZmZXJlZFJXUGFpcihCdWZmZXJlZElPQmFzZSk6Ci0KLSAgICAiIiJBIGJ1ZmZlcmVkIHJlYWRlciBhbmQgd3JpdGVyIG9iamVjdCB0b2dldGhlci4KLQotICAgIEEgYnVmZmVyZWQgcmVhZGVyIG9iamVjdCBhbmQgYnVmZmVyZWQgd3JpdGVyIG9iamVjdCBwdXQgdG9nZXRoZXIgdG8KLSAgICBmb3JtIGEgc2VxdWVudGlhbCBJTyBvYmplY3QgdGhhdCBjYW4gcmVhZCBhbmQgd3JpdGUuIFRoaXMgaXMgdHlwaWNhbGx5Ci0gICAgdXNlZCB3aXRoIGEgc29ja2V0IG9yIHR3by13YXkgcGlwZS4KLQotICAgIHJlYWRlciBhbmQgd3JpdGVyIGFyZSBSYXdJT0Jhc2Ugb2JqZWN0cyB0aGF0IGFyZSByZWFkYWJsZSBhbmQKLSAgICB3cml0ZWFibGUgcmVzcGVjdGl2ZWx5LiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0bwotICAgIERFRkFVTFRfQlVGRkVSX1NJWkUuIFRoZSBtYXhfYnVmZmVyX3NpemUgKGZvciB0aGUgYnVmZmVyZWQgd3JpdGVyKQotICAgIGRlZmF1bHRzIHRvIHR3aWNlIHRoZSBidWZmZXIgc2l6ZS4KLSAgICAiIiIKLQotICAgICMgWFhYIFRoZSB1c2VmdWxuZXNzIG9mIHRoaXMgKGNvbXBhcmVkIHRvIGhhdmluZyB0d28gc2VwYXJhdGUgSU8KLSAgICAjIG9iamVjdHMpIGlzIHF1ZXN0aW9uYWJsZS4KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFkZXIsIHdyaXRlciwKLSAgICAgICAgICAgICAgICAgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSwgbWF4X2J1ZmZlcl9zaXplPU5vbmUpOgotICAgICAgICAiIiJDb25zdHJ1Y3Rvci4KLQotICAgICAgICBUaGUgYXJndW1lbnRzIGFyZSB0d28gUmF3SU8gaW5zdGFuY2VzLgotICAgICAgICAiIiIKLSAgICAgICAgcmVhZGVyLl9jaGVja1JlYWRhYmxlKCkKLSAgICAgICAgd3JpdGVyLl9jaGVja1dyaXRhYmxlKCkKLSAgICAgICAgc2VsZi5yZWFkZXIgPSBCdWZmZXJlZFJlYWRlcihyZWFkZXIsIGJ1ZmZlcl9zaXplKQotICAgICAgICBzZWxmLndyaXRlciA9IEJ1ZmZlcmVkV3JpdGVyKHdyaXRlciwgYnVmZmVyX3NpemUsIG1heF9idWZmZXJfc2l6ZSkKLQotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZChuKQotCi0gICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZGludG8oYikKLQotICAgIGRlZiB3cml0ZShzZWxmLCBiKToKLSAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLndyaXRlKGIpCi0KLSAgICBkZWYgcGVlayhzZWxmLCBuPTApOgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucGVlayhuKQotCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZDEobikKLQotICAgIGRlZiByZWFkYWJsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRhYmxlKCkKLQotICAgIGRlZiB3cml0YWJsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLndyaXRhYmxlKCkKLQotICAgIGRlZiBmbHVzaChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLmZsdXNoKCkKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi53cml0ZXIuY2xvc2UoKQotICAgICAgICBzZWxmLnJlYWRlci5jbG9zZSgpCi0KLSAgICBkZWYgaXNhdHR5KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIuaXNhdHR5KCkgb3Igc2VsZi53cml0ZXIuaXNhdHR5KCkKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBjbG9zZWQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLndyaXRlci5jbG9zZWQKLQotCi1jbGFzcyBCdWZmZXJlZFJhbmRvbShCdWZmZXJlZFdyaXRlciwgQnVmZmVyZWRSZWFkZXIpOgotCi0gICAgIiIiQSBidWZmZXJlZCBpbnRlcmZhY2UgdG8gcmFuZG9tIGFjY2VzcyBzdHJlYW1zLgotCi0gICAgVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSByZWFkZXIgYW5kIHdyaXRlciBmb3IgYSBzZWVrYWJsZSBzdHJlYW0sCi0gICAgcmF3LCBnaXZlbiBpbiB0aGUgZmlyc3QgYXJndW1lbnQuIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBvbWl0dGVkIGl0Ci0gICAgZGVmYXVsdHMgdG8gREVGQVVMVF9CVUZGRVJfU0laRS4gVGhlIG1heF9idWZmZXJfc2l6ZSAoZm9yIHRoZSBidWZmZXJlZAotICAgIHdyaXRlcikgZGVmYXVsdHMgdG8gdHdpY2UgdGhlIGJ1ZmZlciBzaXplLgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdywKLSAgICAgICAgICAgICAgICAgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSwgbWF4X2J1ZmZlcl9zaXplPU5vbmUpOgotICAgICAgICByYXcuX2NoZWNrU2Vla2FibGUoKQotICAgICAgICBCdWZmZXJlZFJlYWRlci5fX2luaXRfXyhzZWxmLCByYXcsIGJ1ZmZlcl9zaXplKQotICAgICAgICBCdWZmZXJlZFdyaXRlci5fX2luaXRfXyhzZWxmLCByYXcsIGJ1ZmZlcl9zaXplLCBtYXhfYnVmZmVyX3NpemUpCi0KLSAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZT0wKToKLSAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgICMgRmlyc3QgZG8gdGhlIHJhdyBzZWVrLCB0aGVuIGVtcHR5IHRoZSByZWFkIGJ1ZmZlciwgc28gdGhhdAotICAgICAgICAjIGlmIHRoZSByYXcgc2VlayBmYWlscywgd2UgZG9uJ3QgbG9zZSBidWZmZXJlZCBkYXRhIGZvcmV2ZXIuCi0gICAgICAgIGlmIHNlbGYuX3JlYWRfYnVmIGFuZCB3aGVuY2UgPT0gMToKLSAgICAgICAgICAgICMgVW5kbyByZWFkIGFoZWFkLgotICAgICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICAgICAgc2VsZi5yYXcuc2VlayhzZWxmLl9yZWFkX3BvcyAtIGxlbihzZWxmLl9yZWFkX2J1ZiksIDEpCi0gICAgICAgIHBvcyA9IHNlbGYucmF3LnNlZWsocG9zLCB3aGVuY2UpCi0gICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgotICAgICAgICAgICAgc2VsZi5fcmVzZXRfcmVhZF9idWYoKQotICAgICAgICByZXR1cm4gcG9zCi0KLSAgICBkZWYgdGVsbChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fd3JpdGVfYnVmOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYucmF3LnRlbGwoKSArIGxlbihzZWxmLl93cml0ZV9idWYpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIudGVsbChzZWxmKQotCi0gICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKLSAgICAgICAgaWYgcG9zIGlzIE5vbmU6Ci0gICAgICAgICAgICBwb3MgPSBzZWxmLnRlbGwoKQotICAgICAgICAjIFVzZSBzZWVrIHRvIGZsdXNoIHRoZSByZWFkIGJ1ZmZlci4KLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkV3JpdGVyLnRydW5jYXRlKHNlbGYsIHBvcykKLQotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQotICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQoc2VsZiwgbikKLQotICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKLSAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkaW50byhzZWxmLCBiKQotCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKLSAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5wZWVrKHNlbGYsIG4pCi0KLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6Ci0gICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZDEoc2VsZiwgbikKLQotICAgIGRlZiB3cml0ZShzZWxmLCBiKToKLSAgICAgICAgaWYgc2VsZi5fcmVhZF9idWY6Ci0gICAgICAgICAgICAjIFVuZG8gcmVhZGFoZWFkCi0gICAgICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKLSAgICAgICAgICAgICAgICBzZWxmLnJhdy5zZWVrKHNlbGYuX3JlYWRfcG9zIC0gbGVuKHNlbGYuX3JlYWRfYnVmKSwgMSkKLSAgICAgICAgICAgICAgICBzZWxmLl9yZXNldF9yZWFkX2J1ZigpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFdyaXRlci53cml0ZShzZWxmLCBiKQotCi0KLWNsYXNzIFRleHRJT0Jhc2UoSU9CYXNlKToKLQotICAgICIiIkJhc2UgY2xhc3MgZm9yIHRleHQgSS9PLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhIGNoYXJhY3RlciBhbmQgbGluZSBiYXNlZCBpbnRlcmZhY2UgdG8gc3RyZWFtCi0gICAgSS9PLiBUaGVyZSBpcyBubyByZWFkaW50byBtZXRob2QgYmVjYXVzZSBQeXRob24ncyBjaGFyYWN0ZXIgc3RyaW5ncwotICAgIGFyZSBpbW11dGFibGUuIFRoZXJlIGlzIG5vIHB1YmxpYyBjb25zdHJ1Y3Rvci4KLSAgICAiIiIKLQotICAgIGRlZiByZWFkKHNlbGYsIG4gPSAtMSk6Ci0gICAgICAgICIiIlJlYWQgYXQgbW9zdCBuIGNoYXJhY3RlcnMgZnJvbSBzdHJlYW0uCi0KLSAgICAgICAgUmVhZCBmcm9tIHVuZGVybHlpbmcgYnVmZmVyIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIG9yIHdlIGhpdCBFT0YuCi0gICAgICAgIElmIG4gaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0YuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZCIpCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgcyk6Ci0gICAgICAgICIiIldyaXRlIHN0cmluZyBzIHRvIHN0cmVhbS4iIiIKLSAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoIndyaXRlIikKLQotICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3MgPSBOb25lKToKLSAgICAgICAgIiIiVHJ1bmNhdGUgc2l6ZSB0byBwb3MuIiIiCi0gICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJ0cnVuY2F0ZSIpCi0KLSAgICBkZWYgcmVhZGxpbmUoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgbmV3bGluZSBvciBFT0YuCi0KLSAgICAgICAgUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgRU9GIGlzIGhpdCBpbW1lZGlhdGVseS4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJyZWFkbGluZSIpCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgZW5jb2Rpbmcoc2VsZik6Ci0gICAgICAgICIiIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlLiIiIgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIG5ld2xpbmVzKHNlbGYpOgotICAgICAgICAiIiJMaW5lIGVuZGluZ3MgdHJhbnNsYXRlZCBzbyBmYXIuCi0KLSAgICAgICAgT25seSBsaW5lIGVuZGluZ3MgdHJhbnNsYXRlZCBkdXJpbmcgcmVhZGluZyBhcmUgY29uc2lkZXJlZC4KLQotICAgICAgICBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBOb25lCi0KLQotY2xhc3MgSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKLSAgICAiIiJDb2RlYyB1c2VkIHdoZW4gcmVhZGluZyBhIGZpbGUgaW4gdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUuCi0gICAgSXQgd3JhcHMgYW5vdGhlciBpbmNyZW1lbnRhbCBkZWNvZGVyLCB0cmFuc2xhdGluZyBcXHJcXG4gYW5kIFxcciBpbnRvIFxcbi4KLSAgICBJdCBhbHNvIHJlY29yZHMgdGhlIHR5cGVzIG9mIG5ld2xpbmVzIGVuY291bnRlcmVkLgotICAgIFdoZW4gdXNlZCB3aXRoIHRyYW5zbGF0ZT1GYWxzZSwgaXQgZW5zdXJlcyB0aGF0IHRoZSBuZXdsaW5lIHNlcXVlbmNlIGlzCi0gICAgcmV0dXJuZWQgaW4gb25lIHBpZWNlLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWNvZGVyLCB0cmFuc2xhdGUsIGVycm9ycz0nc3RyaWN0Jyk6Ci0gICAgICAgIGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIuX19pbml0X18oc2VsZiwgZXJyb3JzPWVycm9ycykKLSAgICAgICAgc2VsZi50cmFuc2xhdGUgPSB0cmFuc2xhdGUKLSAgICAgICAgc2VsZi5kZWNvZGVyID0gZGVjb2RlcgotICAgICAgICBzZWxmLnNlZW5ubCA9IDAKLSAgICAgICAgc2VsZi5wZW5kaW5nY3IgPSBGYWxzZQotCi0gICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgotICAgICAgICAjIGRlY29kZSBpbnB1dCAod2l0aCB0aGUgZXZlbnR1YWwgXHIgZnJvbSBhIHByZXZpb3VzIHBhc3MpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZGVjb2Rlci5kZWNvZGUoaW5wdXQsIGZpbmFsPWZpbmFsKQotICAgICAgICBpZiBzZWxmLnBlbmRpbmdjciBhbmQgKG91dHB1dCBvciBmaW5hbCk6Ci0gICAgICAgICAgICBvdXRwdXQgPSAiXHIiICsgb3V0cHV0Ci0gICAgICAgICAgICBzZWxmLnBlbmRpbmdjciA9IEZhbHNlCi0KLSAgICAgICAgIyByZXRhaW4gbGFzdCBcciBldmVuIHdoZW4gbm90IHRyYW5zbGF0aW5nIGRhdGE6Ci0gICAgICAgICMgdGhlbiByZWFkbGluZSgpIGlzIHN1cmUgdG8gZ2V0IFxyXG4gaW4gb25lIHBhc3MKLSAgICAgICAgaWYgb3V0cHV0LmVuZHN3aXRoKCJcciIpIGFuZCBub3QgZmluYWw6Ci0gICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXRbOi0xXQotICAgICAgICAgICAgc2VsZi5wZW5kaW5nY3IgPSBUcnVlCi0KLSAgICAgICAgIyBSZWNvcmQgd2hpY2ggbmV3bGluZXMgYXJlIHJlYWQKLSAgICAgICAgY3JsZiA9IG91dHB1dC5jb3VudCgnXHJcbicpCi0gICAgICAgIGNyID0gb3V0cHV0LmNvdW50KCdccicpIC0gY3JsZgotICAgICAgICBsZiA9IG91dHB1dC5jb3VudCgnXG4nKSAtIGNybGYKLSAgICAgICAgc2VsZi5zZWVubmwgfD0gKGxmIGFuZCBzZWxmLl9MRikgfCAoY3IgYW5kIHNlbGYuX0NSKSBcCi0gICAgICAgICAgICAgICAgICAgIHwgKGNybGYgYW5kIHNlbGYuX0NSTEYpCi0KLSAgICAgICAgaWYgc2VsZi50cmFuc2xhdGU6Ci0gICAgICAgICAgICBpZiBjcmxmOgotICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKCJcclxuIiwgIlxuIikKLSAgICAgICAgICAgIGlmIGNyOgotICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKCJcciIsICJcbiIpCi0KLSAgICAgICAgcmV0dXJuIG91dHB1dAotCi0gICAgZGVmIGdldHN0YXRlKHNlbGYpOgotICAgICAgICBidWYsIGZsYWcgPSBzZWxmLmRlY29kZXIuZ2V0c3RhdGUoKQotICAgICAgICBmbGFnIDw8PSAxCi0gICAgICAgIGlmIHNlbGYucGVuZGluZ2NyOgotICAgICAgICAgICAgZmxhZyB8PSAxCi0gICAgICAgIHJldHVybiBidWYsIGZsYWcKLQotICAgIGRlZiBzZXRzdGF0ZShzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGJ1ZiwgZmxhZyA9IHN0YXRlCi0gICAgICAgIHNlbGYucGVuZGluZ2NyID0gYm9vbChmbGFnICYgMSkKLSAgICAgICAgc2VsZi5kZWNvZGVyLnNldHN0YXRlKChidWYsIGZsYWcgPj4gMSkpCi0KLSAgICBkZWYgcmVzZXQoc2VsZik6Ci0gICAgICAgIHNlbGYuc2Vlbm5sID0gMAotICAgICAgICBzZWxmLnBlbmRpbmdjciA9IEZhbHNlCi0gICAgICAgIHNlbGYuZGVjb2Rlci5yZXNldCgpCi0KLSAgICBfTEYgPSAxCi0gICAgX0NSID0gMgotICAgIF9DUkxGID0gNAotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIG5ld2xpbmVzKHNlbGYpOgotICAgICAgICByZXR1cm4gKE5vbmUsCi0gICAgICAgICAgICAgICAgIlxuIiwKLSAgICAgICAgICAgICAgICAiXHIiLAotICAgICAgICAgICAgICAgICgiXHIiLCAiXG4iKSwKLSAgICAgICAgICAgICAgICAiXHJcbiIsCi0gICAgICAgICAgICAgICAgKCJcbiIsICJcclxuIiksCi0gICAgICAgICAgICAgICAgKCJcciIsICJcclxuIiksCi0gICAgICAgICAgICAgICAgKCJcciIsICJcbiIsICJcclxuIikKLSAgICAgICAgICAgICAgIClbc2VsZi5zZWVubmxdCi0KLQotY2xhc3MgVGV4dElPV3JhcHBlcihUZXh0SU9CYXNlKToKLQotICAgIHIiIiJDaGFyYWN0ZXIgYW5kIGxpbmUgYmFzZWQgbGF5ZXIgb3ZlciBhIEJ1ZmZlcmVkSU9CYXNlIG9iamVjdCwgYnVmZmVyLgotCi0gICAgZW5jb2RpbmcgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIHRoYXQgdGhlIHN0cmVhbSB3aWxsIGJlCi0gICAgZGVjb2RlZCBvciBlbmNvZGVkIHdpdGguIEl0IGRlZmF1bHRzIHRvIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZy4KLQotICAgIGVycm9ycyBkZXRlcm1pbmVzIHRoZSBzdHJpY3RuZXNzIG9mIGVuY29kaW5nIGFuZCBkZWNvZGluZyAoc2VlIHRoZQotICAgIGNvZGVjcy5yZWdpc3RlcikgYW5kIGRlZmF1bHRzIHRvICJzdHJpY3QiLgotCi0gICAgbmV3bGluZSBjYW4gYmUgTm9uZSwgJycsICdcbicsICdccicsIG9yICdcclxuJy4gIEl0IGNvbnRyb2xzIHRoZQotICAgIGhhbmRsaW5nIG9mIGxpbmUgZW5kaW5ncy4gSWYgaXQgaXMgTm9uZSwgdW5pdmVyc2FsIG5ld2xpbmVzIGlzCi0gICAgZW5hYmxlZC4gIFdpdGggdGhpcyBlbmFibGVkLCBvbiBpbnB1dCwgdGhlIGxpbmVzIGVuZGluZ3MgJ1xuJywgJ1xyJywKLSAgICBvciAnXHJcbicgYXJlIHRyYW5zbGF0ZWQgdG8gJ1xuJyBiZWZvcmUgYmVpbmcgcmV0dXJuZWQgdG8gdGhlCi0gICAgY2FsbGVyLiBDb252ZXJzZWx5LCBvbiBvdXRwdXQsICdcbicgaXMgdHJhbnNsYXRlZCB0byB0aGUgc3lzdGVtCi0gICAgZGVmYXVsdCBsaW5lIHNlcGFyYXRvciwgb3MubGluZXNlcC4gSWYgbmV3bGluZSBpcyBhbnkgb3RoZXIgb2YgaXRzCi0gICAgbGVnYWwgdmFsdWVzLCB0aGF0IG5ld2xpbmUgYmVjb21lcyB0aGUgbmV3bGluZSB3aGVuIHRoZSBmaWxlIGlzIHJlYWQKLSAgICBhbmQgaXQgaXMgcmV0dXJuZWQgdW50cmFuc2xhdGVkLiBPbiBvdXRwdXQsICdcbicgaXMgY29udmVydGVkIHRvIHRoZQotICAgIG5ld2xpbmUuCi0KLSAgICBJZiBsaW5lX2J1ZmZlcmluZyBpcyBUcnVlLCBhIGNhbGwgdG8gZmx1c2ggaXMgaW1wbGllZCB3aGVuIGEgY2FsbCB0bwotICAgIHdyaXRlIGNvbnRhaW5zIGEgbmV3bGluZSBjaGFyYWN0ZXIuCi0gICAgIiIiCi0KLSAgICBfQ0hVTktfU0laRSA9IDEyOAotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1ZmZlciwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgbGluZV9idWZmZXJpbmc9RmFsc2UpOgotICAgICAgICBpZiBuZXdsaW5lIG5vdCBpbiAoTm9uZSwgIiIsICJcbiIsICJcciIsICJcclxuIik6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbGxlZ2FsIG5ld2xpbmUgdmFsdWU6ICVyIiAlIChuZXdsaW5lLCkpCi0gICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBvcy5kZXZpY2VfZW5jb2RpbmcoYnVmZmVyLmZpbGVubygpKQotICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVW5zdXBwb3J0ZWRPcGVyYXRpb24pOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpbXBvcnQgbG9jYWxlCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgICAgICAjIEltcG9ydGluZyBsb2NhbGUgbWF5IGZhaWwgaWYgUHl0aG9uIGlzIGJlaW5nIGJ1aWx0Ci0gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gImFzY2lpIgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkKLQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlbmNvZGluZywgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGVuY29kaW5nOiAlciIgJSBlbmNvZGluZykKLQotICAgICAgICBpZiBlcnJvcnMgaXMgTm9uZToKLSAgICAgICAgICAgIGVycm9ycyA9ICJzdHJpY3QiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlcnJvcnMsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgZXJyb3JzOiAlciIgJSBlcnJvcnMpCi0KLSAgICAgICAgc2VsZi5idWZmZXIgPSBidWZmZXIKLSAgICAgICAgc2VsZi5fbGluZV9idWZmZXJpbmcgPSBsaW5lX2J1ZmZlcmluZwotICAgICAgICBzZWxmLl9lbmNvZGluZyA9IGVuY29kaW5nCi0gICAgICAgIHNlbGYuX2Vycm9ycyA9IGVycm9ycwotICAgICAgICBzZWxmLl9yZWFkdW5pdmVyc2FsID0gbm90IG5ld2xpbmUKLSAgICAgICAgc2VsZi5fcmVhZHRyYW5zbGF0ZSA9IG5ld2xpbmUgaXMgTm9uZQotICAgICAgICBzZWxmLl9yZWFkbmwgPSBuZXdsaW5lCi0gICAgICAgIHNlbGYuX3dyaXRldHJhbnNsYXRlID0gbmV3bGluZSAhPSAnJwotICAgICAgICBzZWxmLl93cml0ZW5sID0gbmV3bGluZSBvciBvcy5saW5lc2VwCi0gICAgICAgIHNlbGYuX2VuY29kZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2RlY29kZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2RlY29kZWRfY2hhcnMgPSAnJyAgIyBidWZmZXIgZm9yIHRleHQgcmV0dXJuZWQgZnJvbSBkZWNvZGVyCi0gICAgICAgIHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZCA9IDAgICMgb2Zmc2V0IGludG8gX2RlY29kZWRfY2hhcnMgZm9yIHJlYWQoKQotICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUgICMgaW5mbyBmb3IgcmVjb25zdHJ1Y3RpbmcgZGVjb2RlciBzdGF0ZQotICAgICAgICBzZWxmLl9zZWVrYWJsZSA9IHNlbGYuX3RlbGxpbmcgPSBzZWxmLmJ1ZmZlci5zZWVrYWJsZSgpCi0KLSAgICAgICAgaWYgc2VsZi5fc2Vla2FibGUgYW5kIHNlbGYud3JpdGFibGUoKToKLSAgICAgICAgICAgIHBvc2l0aW9uID0gc2VsZi5idWZmZXIudGVsbCgpCi0gICAgICAgICAgICBpZiBwb3NpdGlvbiAhPSAwOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2VuY29kZXIoKS5zZXRzdGF0ZSgwKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgIyBTb21ldGltZXMgdGhlIGVuY29kZXIgZG9lc24ndCBleGlzdAotICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAjIHNlbGYuX3NuYXBzaG90IGlzIGVpdGhlciBOb25lLCBvciBhIHR1cGxlIChkZWNfZmxhZ3MsIG5leHRfaW5wdXQpCi0gICAgIyB3aGVyZSBkZWNfZmxhZ3MgaXMgdGhlIHNlY29uZCAoaW50ZWdlcikgaXRlbSBvZiB0aGUgZGVjb2RlciBzdGF0ZQotICAgICMgYW5kIG5leHRfaW5wdXQgaXMgdGhlIGNodW5rIG9mIGlucHV0IGJ5dGVzIHRoYXQgY29tZXMgbmV4dCBhZnRlciB0aGUKLSAgICAjIHNuYXBzaG90IHBvaW50LiAgV2UgdXNlIHRoaXMgdG8gcmVjb25zdHJ1Y3QgZGVjb2RlciBzdGF0ZXMgaW4gdGVsbCgpLgotCi0gICAgIyBOYW1pbmcgY29udmVudGlvbjoKLSAgICAjICAgLSAiYnl0ZXNfLi4uIiBmb3IgaW50ZWdlciB2YXJpYWJsZXMgdGhhdCBjb3VudCBpbnB1dCBieXRlcwotICAgICMgICAtICJjaGFyc18uLi4iIGZvciBpbnRlZ2VyIHZhcmlhYmxlcyB0aGF0IGNvdW50IGRlY29kZWQgY2hhcmFjdGVycwotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIGVuY29kaW5nKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZW5jb2RpbmcKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBlcnJvcnMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9lcnJvcnMKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBsaW5lX2J1ZmZlcmluZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2xpbmVfYnVmZmVyaW5nCi0KLSAgICBkZWYgc2Vla2FibGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9zZWVrYWJsZQotCi0gICAgZGVmIHJlYWRhYmxlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIucmVhZGFibGUoKQotCi0gICAgZGVmIHdyaXRhYmxlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIud3JpdGFibGUoKQotCi0gICAgZGVmIGZsdXNoKHNlbGYpOgotICAgICAgICBzZWxmLmJ1ZmZlci5mbHVzaCgpCi0gICAgICAgIHNlbGYuX3RlbGxpbmcgPSBzZWxmLl9zZWVrYWJsZQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyLmNsb3NlKCkKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBjbG9zZWQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlci5jbG9zZWQKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIubmFtZQotCi0gICAgZGVmIGZpbGVubyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLmZpbGVubygpCi0KLSAgICBkZWYgaXNhdHR5KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIuaXNhdHR5KCkKLQotICAgIGRlZiB3cml0ZShzZWxmLCBzKToKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ3cml0ZSB0byBjbG9zZWQgZmlsZSIpCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIHVuaWNvZGUpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYW4ndCB3cml0ZSAlcyB0byB0ZXh0IHN0cmVhbSIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuX19jbGFzc19fLl9fbmFtZV9fKQotICAgICAgICBsZW5ndGggPSBsZW4ocykKLSAgICAgICAgaGFzbGYgPSAoc2VsZi5fd3JpdGV0cmFuc2xhdGUgb3Igc2VsZi5fbGluZV9idWZmZXJpbmcpIGFuZCAiXG4iIGluIHMKLSAgICAgICAgaWYgaGFzbGYgYW5kIHNlbGYuX3dyaXRldHJhbnNsYXRlIGFuZCBzZWxmLl93cml0ZW5sICE9ICJcbiI6Ci0gICAgICAgICAgICBzID0gcy5yZXBsYWNlKCJcbiIsIHNlbGYuX3dyaXRlbmwpCi0gICAgICAgIGVuY29kZXIgPSBzZWxmLl9lbmNvZGVyIG9yIHNlbGYuX2dldF9lbmNvZGVyKCkKLSAgICAgICAgIyBYWFggV2hhdCBpZiB3ZSB3ZXJlIGp1c3QgcmVhZGluZz8KLSAgICAgICAgYiA9IGVuY29kZXIuZW5jb2RlKHMpCi0gICAgICAgIHNlbGYuYnVmZmVyLndyaXRlKGIpCi0gICAgICAgIGlmIHNlbGYuX2xpbmVfYnVmZmVyaW5nIGFuZCAoaGFzbGYgb3IgIlxyIiBpbiBzKToKLSAgICAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKLSAgICAgICAgaWYgc2VsZi5fZGVjb2RlcjoKLSAgICAgICAgICAgIHNlbGYuX2RlY29kZXIucmVzZXQoKQotICAgICAgICByZXR1cm4gbGVuZ3RoCi0KLSAgICBkZWYgX2dldF9lbmNvZGVyKHNlbGYpOgotICAgICAgICBtYWtlX2VuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKHNlbGYuX2VuY29kaW5nKQotICAgICAgICBzZWxmLl9lbmNvZGVyID0gbWFrZV9lbmNvZGVyKHNlbGYuX2Vycm9ycykKLSAgICAgICAgcmV0dXJuIHNlbGYuX2VuY29kZXIKLQotICAgIGRlZiBfZ2V0X2RlY29kZXIoc2VsZik6Ci0gICAgICAgIG1ha2VfZGVjb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoc2VsZi5fZW5jb2RpbmcpCi0gICAgICAgIGRlY29kZXIgPSBtYWtlX2RlY29kZXIoc2VsZi5fZXJyb3JzKQotICAgICAgICBpZiBzZWxmLl9yZWFkdW5pdmVyc2FsOgotICAgICAgICAgICAgZGVjb2RlciA9IEluY3JlbWVudGFsTmV3bGluZURlY29kZXIoZGVjb2Rlciwgc2VsZi5fcmVhZHRyYW5zbGF0ZSkKLSAgICAgICAgc2VsZi5fZGVjb2RlciA9IGRlY29kZXIKLSAgICAgICAgcmV0dXJuIGRlY29kZXIKLQotICAgICMgVGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIGltcGxlbWVudCBhbiBBRFQgZm9yIF9kZWNvZGVkX2NoYXJzLgotICAgICMgVGV4dCByZXR1cm5lZCBmcm9tIHRoZSBkZWNvZGVyIGlzIGJ1ZmZlcmVkIGhlcmUgdW50aWwgdGhlIGNsaWVudAotICAgICMgcmVxdWVzdHMgaXQgYnkgY2FsbGluZyBvdXIgcmVhZCgpIG9yIHJlYWRsaW5lKCkgbWV0aG9kLgotICAgIGRlZiBfc2V0X2RlY29kZWRfY2hhcnMoc2VsZiwgY2hhcnMpOgotICAgICAgICAiIiJTZXQgdGhlIF9kZWNvZGVkX2NoYXJzIGJ1ZmZlci4iIiIKLSAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFycyA9IGNoYXJzCi0gICAgICAgIHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZCA9IDAKLQotICAgIGRlZiBfZ2V0X2RlY29kZWRfY2hhcnMoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgIiIiQWR2YW5jZSBpbnRvIHRoZSBfZGVjb2RlZF9jaGFycyBidWZmZXIuIiIiCi0gICAgICAgIG9mZnNldCA9IHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZAotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBjaGFycyA9IHNlbGYuX2RlY29kZWRfY2hhcnNbb2Zmc2V0Ol0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNoYXJzID0gc2VsZi5fZGVjb2RlZF9jaGFyc1tvZmZzZXQ6b2Zmc2V0ICsgbl0KLSAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkICs9IGxlbihjaGFycykKLSAgICAgICAgcmV0dXJuIGNoYXJzCi0KLSAgICBkZWYgX3Jld2luZF9kZWNvZGVkX2NoYXJzKHNlbGYsIG4pOgotICAgICAgICAiIiJSZXdpbmQgdGhlIF9kZWNvZGVkX2NoYXJzIGJ1ZmZlci4iIiIKLSAgICAgICAgaWYgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkIDwgbjoKLSAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJyZXdpbmQgZGVjb2RlZF9jaGFycyBvdXQgb2YgYm91bmRzIikKLSAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkIC09IG4KLQotICAgIGRlZiBfcmVhZF9jaHVuayhzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJlYWQgYW5kIGRlY29kZSB0aGUgbmV4dCBjaHVuayBvZiBkYXRhIGZyb20gdGhlIEJ1ZmZlcmVkUmVhZGVyLgotCi0gICAgICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgVHJ1ZSB1bmxlc3MgRU9GIHdhcyByZWFjaGVkLiAgVGhlIGRlY29kZWQgc3RyaW5nCi0gICAgICAgIGlzIHBsYWNlZCBpbiBzZWxmLl9kZWNvZGVkX2NoYXJzIChyZXBsYWNpbmcgaXRzIHByZXZpb3VzIHZhbHVlKS4KLSAgICAgICAgVGhlIGVudGlyZSBpbnB1dCBjaHVuayBpcyBzZW50IHRvIHRoZSBkZWNvZGVyLCB0aG91Z2ggc29tZSBvZiBpdAotICAgICAgICBtYXkgcmVtYWluIGJ1ZmZlcmVkIGluIHRoZSBkZWNvZGVyLCB5ZXQgdG8gYmUgY29udmVydGVkLgotICAgICAgICAiIiIKLQotICAgICAgICBpZiBzZWxmLl9kZWNvZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBkZWNvZGVyIikKLQotICAgICAgICBpZiBzZWxmLl90ZWxsaW5nOgotICAgICAgICAgICAgIyBUbyBwcmVwYXJlIGZvciB0ZWxsKCksIHdlIG5lZWQgdG8gc25hcHNob3QgYSBwb2ludCBpbiB0aGUKLSAgICAgICAgICAgICMgZmlsZSB3aGVyZSB0aGUgZGVjb2RlcidzIGlucHV0IGJ1ZmZlciBpcyBlbXB0eS4KLQotICAgICAgICAgICAgZGVjX2J1ZmZlciwgZGVjX2ZsYWdzID0gc2VsZi5fZGVjb2Rlci5nZXRzdGF0ZSgpCi0gICAgICAgICAgICAjIEdpdmVuIHRoaXMsIHdlIGtub3cgdGhlcmUgd2FzIGEgdmFsaWQgc25hcHNob3QgcG9pbnQKLSAgICAgICAgICAgICMgbGVuKGRlY19idWZmZXIpIGJ5dGVzIGFnbyB3aXRoIGRlY29kZXIgc3RhdGUgKGInJywgZGVjX2ZsYWdzKS4KLQotICAgICAgICAjIFJlYWQgYSBjaHVuaywgZGVjb2RlIGl0LCBhbmQgcHV0IHRoZSByZXN1bHQgaW4gc2VsZi5fZGVjb2RlZF9jaGFycy4KLSAgICAgICAgaW5wdXRfY2h1bmsgPSBzZWxmLmJ1ZmZlci5yZWFkMShzZWxmLl9DSFVOS19TSVpFKQotICAgICAgICBlb2YgPSBub3QgaW5wdXRfY2h1bmsKLSAgICAgICAgc2VsZi5fc2V0X2RlY29kZWRfY2hhcnMoc2VsZi5fZGVjb2Rlci5kZWNvZGUoaW5wdXRfY2h1bmssIGVvZikpCi0KLSAgICAgICAgaWYgc2VsZi5fdGVsbGluZzoKLSAgICAgICAgICAgICMgQXQgdGhlIHNuYXBzaG90IHBvaW50LCBsZW4oZGVjX2J1ZmZlcikgYnl0ZXMgYmVmb3JlIHRoZSByZWFkLAotICAgICAgICAgICAgIyB0aGUgbmV4dCBpbnB1dCB0byBiZSBkZWNvZGVkIGlzIGRlY19idWZmZXIgKyBpbnB1dF9jaHVuay4KLSAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gKGRlY19mbGFncywgZGVjX2J1ZmZlciArIGlucHV0X2NodW5rKQotCi0gICAgICAgIHJldHVybiBub3QgZW9mCi0KLSAgICBkZWYgX3BhY2tfY29va2llKHNlbGYsIHBvc2l0aW9uLCBkZWNfZmxhZ3M9MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3RvX2ZlZWQ9MCwgbmVlZF9lb2Y9MCwgY2hhcnNfdG9fc2tpcD0wKToKLSAgICAgICAgIyBUaGUgbWVhbmluZyBvZiBhIHRlbGwoKSBjb29raWUgaXM6IHNlZWsgdG8gcG9zaXRpb24sIHNldCB0aGUKLSAgICAgICAgIyBkZWNvZGVyIGZsYWdzIHRvIGRlY19mbGFncywgcmVhZCBieXRlc190b19mZWVkIGJ5dGVzLCBmZWVkIHRoZW0KLSAgICAgICAgIyBpbnRvIHRoZSBkZWNvZGVyIHdpdGggbmVlZF9lb2YgYXMgdGhlIEVPRiBmbGFnLCB0aGVuIHNraXAKLSAgICAgICAgIyBjaGFyc190b19za2lwIGNoYXJhY3RlcnMgb2YgdGhlIGRlY29kZWQgcmVzdWx0LiAgRm9yIG1vc3Qgc2ltcGxlCi0gICAgICAgICMgZGVjb2RlcnMsIHRlbGwoKSB3aWxsIG9mdGVuIGp1c3QgZ2l2ZSBhIGJ5dGUgb2Zmc2V0IGluIHRoZSBmaWxlLgotICAgICAgICByZXR1cm4gKHBvc2l0aW9uIHwgKGRlY19mbGFnczw8NjQpIHwgKGJ5dGVzX3RvX2ZlZWQ8PDEyOCkgfAotICAgICAgICAgICAgICAgKGNoYXJzX3RvX3NraXA8PDE5MikgfCBib29sKG5lZWRfZW9mKTw8MjU2KQotCi0gICAgZGVmIF91bnBhY2tfY29va2llKHNlbGYsIGJpZ2ludCk6Ci0gICAgICAgIHJlc3QsIHBvc2l0aW9uID0gZGl2bW9kKGJpZ2ludCwgMTw8NjQpCi0gICAgICAgIHJlc3QsIGRlY19mbGFncyA9IGRpdm1vZChyZXN0LCAxPDw2NCkKLSAgICAgICAgcmVzdCwgYnl0ZXNfdG9fZmVlZCA9IGRpdm1vZChyZXN0LCAxPDw2NCkKLSAgICAgICAgbmVlZF9lb2YsIGNoYXJzX3RvX3NraXAgPSBkaXZtb2QocmVzdCwgMTw8NjQpCi0gICAgICAgIHJldHVybiBwb3NpdGlvbiwgZGVjX2ZsYWdzLCBieXRlc190b19mZWVkLCBuZWVkX2VvZiwgY2hhcnNfdG9fc2tpcAotCi0gICAgZGVmIHRlbGwoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9zZWVrYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInVuZGVybHlpbmcgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSIpCi0gICAgICAgIGlmIG5vdCBzZWxmLl90ZWxsaW5nOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigidGVsbGluZyBwb3NpdGlvbiBkaXNhYmxlZCBieSBuZXh0KCkgY2FsbCIpCi0gICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICBwb3NpdGlvbiA9IHNlbGYuYnVmZmVyLnRlbGwoKQotICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlcgotICAgICAgICBpZiBkZWNvZGVyIGlzIE5vbmUgb3Igc2VsZi5fc25hcHNob3QgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2RlY29kZWRfY2hhcnM6Ci0gICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uCi0gICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInBlbmRpbmcgZGVjb2RlZCB0ZXh0IikKLSAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbgotCi0gICAgICAgICMgU2tpcCBiYWNrd2FyZCB0byB0aGUgc25hcHNob3QgcG9pbnQgKHNlZSBfcmVhZF9jaHVuaykuCi0gICAgICAgIGRlY19mbGFncywgbmV4dF9pbnB1dCA9IHNlbGYuX3NuYXBzaG90Ci0gICAgICAgIHBvc2l0aW9uIC09IGxlbihuZXh0X2lucHV0KQotCi0gICAgICAgICMgSG93IG1hbnkgZGVjb2RlZCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiB1c2VkIHVwIHNpbmNlIHRoZSBzbmFwc2hvdD8KLSAgICAgICAgY2hhcnNfdG9fc2tpcCA9IHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZAotICAgICAgICBpZiBjaGFyc190b19za2lwID09IDA6Ci0gICAgICAgICAgICAjIFdlIGhhdmVuJ3QgbW92ZWQgZnJvbSB0aGUgc25hcHNob3QgcG9pbnQuCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFja19jb29raWUocG9zaXRpb24sIGRlY19mbGFncykKLQotICAgICAgICAjIFN0YXJ0aW5nIGZyb20gdGhlIHNuYXBzaG90IHBvc2l0aW9uLCB3ZSB3aWxsIHdhbGsgdGhlIGRlY29kZXIKLSAgICAgICAgIyBmb3J3YXJkIHVudGlsIGl0IGdpdmVzIHVzIGVub3VnaCBkZWNvZGVkIGNoYXJhY3RlcnMuCi0gICAgICAgIHNhdmVkX3N0YXRlID0gZGVjb2Rlci5nZXRzdGF0ZSgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgTm90ZSBvdXIgaW5pdGlhbCBzdGFydCBwb2ludC4KLSAgICAgICAgICAgIGRlY29kZXIuc2V0c3RhdGUoKGInJywgZGVjX2ZsYWdzKSkKLSAgICAgICAgICAgIHN0YXJ0X3BvcyA9IHBvc2l0aW9uCi0gICAgICAgICAgICBzdGFydF9mbGFncywgYnl0ZXNfZmVkLCBjaGFyc19kZWNvZGVkID0gZGVjX2ZsYWdzLCAwLCAwCi0gICAgICAgICAgICBuZWVkX2VvZiA9IDAKLQotICAgICAgICAgICAgIyBGZWVkIHRoZSBkZWNvZGVyIG9uZSBieXRlIGF0IGEgdGltZS4gIEFzIHdlIGdvLCBub3RlIHRoZQotICAgICAgICAgICAgIyBuZWFyZXN0ICJzYWZlIHN0YXJ0IHBvaW50IiBiZWZvcmUgdGhlIGN1cnJlbnQgbG9jYXRpb24KLSAgICAgICAgICAgICMgKGEgcG9pbnQgd2hlcmUgdGhlIGRlY29kZXIgaGFzIG5vdGhpbmcgYnVmZmVyZWQsIHNvIHNlZWsoKQotICAgICAgICAgICAgIyBjYW4gc2FmZWx5IHN0YXJ0IGZyb20gdGhlcmUgYW5kIGFkdmFuY2UgdG8gdGhpcyBsb2NhdGlvbikuCi0gICAgICAgICAgICBmb3IgbmV4dF9ieXRlIGluIG5leHRfaW5wdXQ6Ci0gICAgICAgICAgICAgICAgYnl0ZXNfZmVkICs9IDEKLSAgICAgICAgICAgICAgICBjaGFyc19kZWNvZGVkICs9IGxlbihkZWNvZGVyLmRlY29kZShuZXh0X2J5dGUpKQotICAgICAgICAgICAgICAgIGRlY19idWZmZXIsIGRlY19mbGFncyA9IGRlY29kZXIuZ2V0c3RhdGUoKQotICAgICAgICAgICAgICAgIGlmIG5vdCBkZWNfYnVmZmVyIGFuZCBjaGFyc19kZWNvZGVkIDw9IGNoYXJzX3RvX3NraXA6Ci0gICAgICAgICAgICAgICAgICAgICMgRGVjb2RlciBidWZmZXIgaXMgZW1wdHksIHNvIHRoaXMgaXMgYSBzYWZlIHN0YXJ0IHBvaW50LgotICAgICAgICAgICAgICAgICAgICBzdGFydF9wb3MgKz0gYnl0ZXNfZmVkCi0gICAgICAgICAgICAgICAgICAgIGNoYXJzX3RvX3NraXAgLT0gY2hhcnNfZGVjb2RlZAotICAgICAgICAgICAgICAgICAgICBzdGFydF9mbGFncywgYnl0ZXNfZmVkLCBjaGFyc19kZWNvZGVkID0gZGVjX2ZsYWdzLCAwLCAwCi0gICAgICAgICAgICAgICAgaWYgY2hhcnNfZGVjb2RlZCA+PSBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIFdlIGRpZG4ndCBnZXQgZW5vdWdoIGRlY29kZWQgZGF0YTsgc2lnbmFsIEVPRiB0byBnZXQgbW9yZS4KLSAgICAgICAgICAgICAgICBjaGFyc19kZWNvZGVkICs9IGxlbihkZWNvZGVyLmRlY29kZShiJycsIGZpbmFsPVRydWUpKQotICAgICAgICAgICAgICAgIG5lZWRfZW9mID0gMQotICAgICAgICAgICAgICAgIGlmIGNoYXJzX2RlY29kZWQgPCBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCByZWNvbnN0cnVjdCBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQotCi0gICAgICAgICAgICAjIFRoZSByZXR1cm5lZCBjb29raWUgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3Qgc2FmZSBzdGFydCBwb2ludC4KLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYWNrX2Nvb2tpZSgKLSAgICAgICAgICAgICAgICBzdGFydF9wb3MsIHN0YXJ0X2ZsYWdzLCBieXRlc19mZWQsIG5lZWRfZW9mLCBjaGFyc190b19za2lwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZGVjb2Rlci5zZXRzdGF0ZShzYXZlZF9zdGF0ZSkKLQotICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6Ci0gICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICBpZiBwb3MgaXMgTm9uZToKLSAgICAgICAgICAgIHBvcyA9IHNlbGYudGVsbCgpCi0gICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlci50cnVuY2F0ZShwb3MpCi0KLSAgICBkZWYgc2VlayhzZWxmLCBjb29raWUsIHdoZW5jZT0wKToKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0ZWxsIG9uIGNsb3NlZCBmaWxlIikKLSAgICAgICAgaWYgbm90IHNlbGYuX3NlZWthYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIikKLSAgICAgICAgaWYgd2hlbmNlID09IDE6ICMgc2VlayByZWxhdGl2ZSB0byBjdXJyZW50IHBvc2l0aW9uCi0gICAgICAgICAgICBpZiBjb29raWUgIT0gMDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCBkbyBub256ZXJvIGN1ci1yZWxhdGl2ZSBzZWVrcyIpCi0gICAgICAgICAgICAjIFNlZWtpbmcgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gc2hvdWxkIGF0dGVtcHQgdG8KLSAgICAgICAgICAgICMgc3luYyB0aGUgdW5kZXJseWluZyBidWZmZXIgd2l0aCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAgICAgICAgICAgIHdoZW5jZSA9IDAKLSAgICAgICAgICAgIGNvb2tpZSA9IHNlbGYudGVsbCgpCi0gICAgICAgIGlmIHdoZW5jZSA9PSAyOiAjIHNlZWsgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUKLSAgICAgICAgICAgIGlmIGNvb2tpZSAhPSAwOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbid0IGRvIG5vbnplcm8gZW5kLXJlbGF0aXZlIHNlZWtzIikKLSAgICAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICAgICAgcG9zaXRpb24gPSBzZWxmLmJ1ZmZlci5zZWVrKDAsIDIpCi0gICAgICAgICAgICBzZWxmLl9zZXRfZGVjb2RlZF9jaGFycygnJykKLSAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQotICAgICAgICAgICAgaWYgc2VsZi5fZGVjb2RlcjoKLSAgICAgICAgICAgICAgICBzZWxmLl9kZWNvZGVyLnJlc2V0KCkKLSAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbgotICAgICAgICBpZiB3aGVuY2UgIT0gMDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgd2hlbmNlICglciwgc2hvdWxkIGJlIDAsIDEgb3IgMikiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW5jZSwpKQotICAgICAgICBpZiBjb29raWUgPCAwOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmVnYXRpdmUgc2VlayBwb3NpdGlvbiAlciIgJSAoY29va2llLCkpCi0gICAgICAgIHNlbGYuZmx1c2goKQotCi0gICAgICAgICMgVGhlIHN0cmF0ZWd5IG9mIHNlZWsoKSBpcyB0byBnbyBiYWNrIHRvIHRoZSBzYWZlIHN0YXJ0IHBvaW50Ci0gICAgICAgICMgYW5kIHJlcGxheSB0aGUgZWZmZWN0IG9mIHJlYWQoY2hhcnNfdG9fc2tpcCkgZnJvbSB0aGVyZS4KLSAgICAgICAgc3RhcnRfcG9zLCBkZWNfZmxhZ3MsIGJ5dGVzX3RvX2ZlZWQsIG5lZWRfZW9mLCBjaGFyc190b19za2lwID0gXAotICAgICAgICAgICAgc2VsZi5fdW5wYWNrX2Nvb2tpZShjb29raWUpCi0KLSAgICAgICAgIyBTZWVrIGJhY2sgdG8gdGhlIHNhZmUgc3RhcnQgcG9pbnQuCi0gICAgICAgIHNlbGYuYnVmZmVyLnNlZWsoc3RhcnRfcG9zKQotICAgICAgICBzZWxmLl9zZXRfZGVjb2RlZF9jaGFycygnJykKLSAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lCi0KLSAgICAgICAgIyBSZXN0b3JlIHRoZSBkZWNvZGVyIHRvIGl0cyBzdGF0ZSBmcm9tIHRoZSBzYWZlIHN0YXJ0IHBvaW50LgotICAgICAgICBpZiBzZWxmLl9kZWNvZGVyIG9yIGRlY19mbGFncyBvciBjaGFyc190b19za2lwOgotICAgICAgICAgICAgc2VsZi5fZGVjb2RlciA9IHNlbGYuX2RlY29kZXIgb3Igc2VsZi5fZ2V0X2RlY29kZXIoKQotICAgICAgICAgICAgc2VsZi5fZGVjb2Rlci5zZXRzdGF0ZSgoYicnLCBkZWNfZmxhZ3MpKQotICAgICAgICAgICAgc2VsZi5fc25hcHNob3QgPSAoZGVjX2ZsYWdzLCBiJycpCi0KLSAgICAgICAgaWYgY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgICMgSnVzdCBsaWtlIF9yZWFkX2NodW5rLCBmZWVkIHRoZSBkZWNvZGVyIGFuZCBzYXZlIGEgc25hcHNob3QuCi0gICAgICAgICAgICBpbnB1dF9jaHVuayA9IHNlbGYuYnVmZmVyLnJlYWQoYnl0ZXNfdG9fZmVlZCkKLSAgICAgICAgICAgIHNlbGYuX3NldF9kZWNvZGVkX2NoYXJzKAotICAgICAgICAgICAgICAgIHNlbGYuX2RlY29kZXIuZGVjb2RlKGlucHV0X2NodW5rLCBuZWVkX2VvZikpCi0gICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IChkZWNfZmxhZ3MsIGlucHV0X2NodW5rKQotCi0gICAgICAgICAgICAjIFNraXAgY2hhcnNfdG9fc2tpcCBvZiB0aGUgZGVjb2RlZCBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2RlY29kZWRfY2hhcnMpIDwgY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCByZXN0b3JlIGxvZ2ljYWwgZmlsZSBwb3NpdGlvbiIpCi0gICAgICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgPSBjaGFyc190b19za2lwCi0KLSAgICAgICAgIyBGaW5hbGx5LCByZXNldCB0aGUgZW5jb2RlciAobWVyZWx5IHVzZWZ1bCBmb3IgcHJvcGVyIEJPTSBoYW5kbGluZykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZW5jb2RlciA9IHNlbGYuX2VuY29kZXIgb3Igc2VsZi5fZ2V0X2VuY29kZXIoKQotICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6Ci0gICAgICAgICAgICAjIFNvbWV0aW1lcyB0aGUgZW5jb2RlciBkb2Vzbid0IGV4aXN0Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBjb29raWUgIT0gMDoKLSAgICAgICAgICAgICAgICBlbmNvZGVyLnNldHN0YXRlKDApCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGVuY29kZXIucmVzZXQoKQotICAgICAgICByZXR1cm4gY29va2llCi0KLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIgb3Igc2VsZi5fZ2V0X2RlY29kZXIoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBuLl9faW5kZXhfXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFuIGludGVnZXIgaXMgcmVxdWlyZWQiKQotICAgICAgICBpZiBuIDwgMDoKLSAgICAgICAgICAgICMgUmVhZCBldmVyeXRoaW5nLgotICAgICAgICAgICAgcmVzdWx0ID0gKHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKCkgKwotICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIuZGVjb2RlKHNlbGYuYnVmZmVyLnJlYWQoKSwgZmluYWw9VHJ1ZSkpCi0gICAgICAgICAgICBzZWxmLl9zZXRfZGVjb2RlZF9jaGFycygnJykKLSAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBLZWVwIHJlYWRpbmcgY2h1bmtzIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIHRvIHJldHVybi4KLSAgICAgICAgICAgIGVvZiA9IEZhbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhuKQotICAgICAgICAgICAgd2hpbGUgbGVuKHJlc3VsdCkgPCBuIGFuZCBub3QgZW9mOgotICAgICAgICAgICAgICAgIGVvZiA9IG5vdCBzZWxmLl9yZWFkX2NodW5rKCkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobiAtIGxlbihyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIG5leHQoc2VsZik6Ci0gICAgICAgIHNlbGYuX3RlbGxpbmcgPSBGYWxzZQotICAgICAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lCi0gICAgICAgICAgICBzZWxmLl90ZWxsaW5nID0gc2VsZi5fc2Vla2FibGUKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgcmV0dXJuIGxpbmUKLQotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD1Ob25lKToKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShsaW1pdCwgKGludCwgbG9uZykpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQotCi0gICAgICAgICMgR3JhYiBhbGwgdGhlIGRlY29kZWQgdGV4dCAod2Ugd2lsbCByZXdpbmQgYW55IGV4dHJhIGJpdHMgbGF0ZXIpLgotICAgICAgICBsaW5lID0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKQotCi0gICAgICAgIHN0YXJ0ID0gMAotICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlciBvciBzZWxmLl9nZXRfZGVjb2RlcigpCi0KLSAgICAgICAgcG9zID0gZW5kcG9zID0gTm9uZQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgaWYgc2VsZi5fcmVhZHRyYW5zbGF0ZToKLSAgICAgICAgICAgICAgICAjIE5ld2xpbmVzIGFyZSBhbHJlYWR5IHRyYW5zbGF0ZWQsIG9ubHkgc2VhcmNoIGZvciBcbgotICAgICAgICAgICAgICAgIHBvcyA9IGxpbmUuZmluZCgnXG4nLCBzdGFydCkKLSAgICAgICAgICAgICAgICBpZiBwb3MgPj0gMDoKLSAgICAgICAgICAgICAgICAgICAgZW5kcG9zID0gcG9zICsgMQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGVuKGxpbmUpCi0KLSAgICAgICAgICAgIGVsaWYgc2VsZi5fcmVhZHVuaXZlcnNhbDoKLSAgICAgICAgICAgICAgICAjIFVuaXZlcnNhbCBuZXdsaW5lIHNlYXJjaC4gRmluZCBhbnkgb2YgXHIsIFxyXG4sIFxuCi0gICAgICAgICAgICAgICAgIyBUaGUgZGVjb2RlciBlbnN1cmVzIHRoYXQgXHJcbiBhcmUgbm90IHNwbGl0IGluIHR3byBwaWVjZXMKLQotICAgICAgICAgICAgICAgICMgSW4gQyB3ZSdkIGxvb2sgZm9yIHRoZXNlIGluIHBhcmFsbGVsIG9mIGNvdXJzZS4KLSAgICAgICAgICAgICAgICBubHBvcyA9IGxpbmUuZmluZCgiXG4iLCBzdGFydCkKLSAgICAgICAgICAgICAgICBjcnBvcyA9IGxpbmUuZmluZCgiXHIiLCBzdGFydCkKLSAgICAgICAgICAgICAgICBpZiBjcnBvcyA9PSAtMToKLSAgICAgICAgICAgICAgICAgICAgaWYgbmxwb3MgPT0gLTE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIE5vdGhpbmcgZm91bmQKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGVuKGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIEZvdW5kIFxuCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBubHBvcyArIDEKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZWxpZiBubHBvcyA9PSAtMToKLSAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCBsb25lIFxyCi0gICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IGNycG9zICsgMQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGVsaWYgbmxwb3MgPCBjcnBvczoKLSAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCBcbgotICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBubHBvcyArIDEKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbGlmIG5scG9zID09IGNycG9zICsgMToKLSAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCBcclxuCi0gICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IGNycG9zICsgMgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgRm91bmQgXHIKLSAgICAgICAgICAgICAgICAgICAgZW5kcG9zID0gY3Jwb3MgKyAxCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgbm9uLXVuaXZlcnNhbAotICAgICAgICAgICAgICAgIHBvcyA9IGxpbmUuZmluZChzZWxmLl9yZWFkbmwpCi0gICAgICAgICAgICAgICAgaWYgcG9zID49IDA6Ci0gICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IHBvcyArIGxlbihzZWxmLl9yZWFkbmwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgIGlmIGxpbWl0ID49IDAgYW5kIGxlbihsaW5lKSA+PSBsaW1pdDoKLSAgICAgICAgICAgICAgICBlbmRwb3MgPSBsaW1pdCAgIyByZWFjaGVkIGxlbmd0aCBsaW1pdAotICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgICMgTm8gbGluZSBlbmRpbmcgc2VlbiB5ZXQgLSBnZXQgbW9yZSBkYXRhCi0gICAgICAgICAgICBtb3JlX2xpbmUgPSAnJwotICAgICAgICAgICAgd2hpbGUgc2VsZi5fcmVhZF9jaHVuaygpOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2RlY29kZWRfY2hhcnM6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiBzZWxmLl9kZWNvZGVkX2NoYXJzOgotICAgICAgICAgICAgICAgIGxpbmUgKz0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIGVuZCBvZiBmaWxlCi0gICAgICAgICAgICAgICAgc2VsZi5fc2V0X2RlY29kZWRfY2hhcnMoJycpCi0gICAgICAgICAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKLQotICAgICAgICBpZiBsaW1pdCA+PSAwIGFuZCBlbmRwb3MgPiBsaW1pdDoKLSAgICAgICAgICAgIGVuZHBvcyA9IGxpbWl0ICAjIGRvbid0IGV4Y2VlZCBsaW1pdAotCi0gICAgICAgICMgUmV3aW5kIF9kZWNvZGVkX2NoYXJzIHRvIGp1c3QgYWZ0ZXIgdGhlIGxpbmUgZW5kaW5nIHdlIGZvdW5kLgotICAgICAgICBzZWxmLl9yZXdpbmRfZGVjb2RlZF9jaGFycyhsZW4obGluZSkgLSBlbmRwb3MpCi0gICAgICAgIHJldHVybiBsaW5lWzplbmRwb3NdCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgbmV3bGluZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9kZWNvZGVyLm5ld2xpbmVzIGlmIHNlbGYuX2RlY29kZXIgZWxzZSBOb25lCi0KLWNsYXNzIFN0cmluZ0lPKFRleHRJT1dyYXBwZXIpOgotCi0gICAgIiIiQW4gaW4tbWVtb3J5IHN0cmVhbSBmb3IgdGV4dC4gVGhlIGluaXRpYWxfdmFsdWUgYXJndW1lbnQgc2V0cyB0aGUKLSAgICB2YWx1ZSBvZiBvYmplY3QuIFRoZSBvdGhlciBhcmd1bWVudHMgYXJlIGxpa2UgdGhvc2Ugb2YgVGV4dElPV3JhcHBlcidzCi0gICAgY29uc3RydWN0b3IuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaW5pdGlhbF92YWx1ZT0iIiwgZW5jb2Rpbmc9InV0Zi04IiwKLSAgICAgICAgICAgICAgICAgZXJyb3JzPSJzdHJpY3QiLCBuZXdsaW5lPSJcbiIpOgotICAgICAgICBzdXBlcihTdHJpbmdJTywgc2VsZikuX19pbml0X18oQnl0ZXNJTygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9ZXJyb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZT1uZXdsaW5lKQotICAgICAgICAjIElzc3VlICM1NjQ1OiBtYWtlIHVuaXZlcnNhbCBuZXdsaW5lcyBzZW1hbnRpY3MgdGhlIHNhbWUgYXMgaW4gdGhlCi0gICAgICAgICMgQyB2ZXJzaW9uLCBldmVuIHVuZGVyIFdpbmRvd3MuCi0gICAgICAgIGlmIG5ld2xpbmUgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3dyaXRldHJhbnNsYXRlID0gRmFsc2UKLSAgICAgICAgaWYgaW5pdGlhbF92YWx1ZToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGluaXRpYWxfdmFsdWUsIHVuaWNvZGUpOgotICAgICAgICAgICAgICAgIGluaXRpYWxfdmFsdWUgPSB1bmljb2RlKGluaXRpYWxfdmFsdWUpCi0gICAgICAgICAgICBzZWxmLndyaXRlKGluaXRpYWxfdmFsdWUpCi0gICAgICAgICAgICBzZWxmLnNlZWsoMCkKLQotICAgIGRlZiBnZXR2YWx1ZShzZWxmKToKLSAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlci5nZXR2YWx1ZSgpLmRlY29kZShzZWxmLl9lbmNvZGluZywgc2VsZi5fZXJyb3JzKQorZm9yIGtsYXNzIGluIChTdHJpbmdJTywgVGV4dElPV3JhcHBlcik6CisgICAgVGV4dElPQmFzZS5yZWdpc3RlcihrbGFzcykKK2RlbCBrbGFzcwpkaWZmIC0tZ2l0IGEvTGliL2pzb24vX19pbml0X18ucHkgYi9MaWIvanNvbi9fX2luaXRfXy5weQppbmRleCA1NjExNmY0Li40MTRjNzAyIDEwMDY0NAotLS0gYS9MaWIvanNvbi9fX2luaXRfXy5weQorKysgYi9MaWIvanNvbi9fX2luaXRfXy5weQpAQCAtMSwxMSArMSwxMyBAQAotciIiIkEgc2ltcGxlLCBmYXN0LCBleHRlbnNpYmxlIEpTT04gZW5jb2RlciBhbmQgZGVjb2RlcgotCi1KU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz4gaXMgYSBzdWJzZXQgb2YKK3IiIiJKU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz4gaXMgYSBzdWJzZXQgb2YKIEphdmFTY3JpcHQgc3ludGF4IChFQ01BLTI2MiAzcmQgZWRpdGlvbikgdXNlZCBhcyBhIGxpZ2h0d2VpZ2h0IGRhdGEKIGludGVyY2hhbmdlIGZvcm1hdC4KIAotanNvbiBleHBvc2VzIGFuIEFQSSBmYW1pbGlhciB0byB1c2VzIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5Ci1tYXJzaGFsIGFuZCBwaWNrbGUgbW9kdWxlcy4KKzptb2Q6YGpzb25gIGV4cG9zZXMgYW4gQVBJIGZhbWlsaWFyIHRvIHVzZXJzIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5Cis6bW9kOmBtYXJzaGFsYCBhbmQgOm1vZDpgcGlja2xlYCBtb2R1bGVzLiBJdCBpcyB0aGUgZXh0ZXJuYWxseSBtYWludGFpbmVkCit2ZXJzaW9uIG9mIHRoZSA6bW9kOmBqc29uYCBsaWJyYXJ5IGNvbnRhaW5lZCBpbiBQeXRob24gMi42LCBidXQgbWFpbnRhaW5zCitjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNCBhbmQgUHl0aG9uIDIuNSBhbmQgKGN1cnJlbnRseSkgaGFzCitzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBhZHZhbnRhZ2VzLCBldmVuIHdpdGhvdXQgdXNpbmcgdGhlIG9wdGlvbmFsIEMKK2V4dGVuc2lvbiBmb3Igc3BlZWR1cHMuCiAKIEVuY29kaW5nIGJhc2ljIFB5dGhvbiBvYmplY3QgaGllcmFyY2hpZXM6OgogCkBAIC0zMiwyMyArMzQsMjggQEAKICAgICA+Pj4ganNvbi5kdW1wcyhbMSwyLDMseyc0JzogNSwgJzYnOiA3fV0sIHNlcGFyYXRvcnM9KCcsJywnOicpKQogICAgICdbMSwyLDMseyI0Ijo1LCI2Ijo3fV0nCiAKLVByZXR0eSBwcmludGluZyAodXNpbmcgcmVwcigpIGJlY2F1c2Ugb2YgZXh0cmFuZW91cyB3aGl0ZXNwYWNlIGluIHRoZSBvdXRwdXQpOjoKK1ByZXR0eSBwcmludGluZzo6CiAKICAgICA+Pj4gaW1wb3J0IGpzb24KLSAgICA+Pj4gcHJpbnQgcmVwcihqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkpCi0gICAgJ3tcbiAgICAiNCI6IDUsIFxuICAgICI2IjogN1xufScKKyAgICA+Pj4gcyA9IGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsIGluZGVudD00KQorICAgID4+PiBwcmludCAnXG4nLmpvaW4oW2wucnN0cmlwKCkgZm9yIGwgaW4gIHMuc3BsaXRsaW5lcygpXSkKKyAgICB7CisgICAgICAgICI0IjogNSwKKyAgICAgICAgIjYiOiA3CisgICAgfQogCiBEZWNvZGluZyBKU09OOjoKIAogICAgID4+PiBpbXBvcnQganNvbgotICAgID4+PiBqc29uLmxvYWRzKCdbImZvbyIsIHsiYmFyIjpbImJheiIsIG51bGwsIDEuMCwgMl19XScpCi0gICAgW3UnZm9vJywge3UnYmFyJzogW3UnYmF6JywgTm9uZSwgMS4wLCAyXX1dCi0gICAgPj4+IGpzb24ubG9hZHMoJyJcXCJmb29cXGJhciInKQotICAgIHUnImZvb1x4MDhhcicKKyAgICA+Pj4gb2JqID0gW3UnZm9vJywge3UnYmFyJzogW3UnYmF6JywgTm9uZSwgMS4wLCAyXX1dCisgICAgPj4+IGpzb24ubG9hZHMoJ1siZm9vIiwgeyJiYXIiOlsiYmF6IiwgbnVsbCwgMS4wLCAyXX1dJykgPT0gb2JqCisgICAgVHJ1ZQorICAgID4+PiBqc29uLmxvYWRzKCciXFwiZm9vXFxiYXIiJykgPT0gdSciZm9vXHgwOGFyJworICAgIFRydWUKICAgICA+Pj4gZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KICAgICA+Pj4gaW8gPSBTdHJpbmdJTygnWyJzdHJlYW1pbmcgQVBJIl0nKQotICAgID4+PiBqc29uLmxvYWQoaW8pCi0gICAgW3Unc3RyZWFtaW5nIEFQSSddCisgICAgPj4+IGpzb24ubG9hZChpbylbMF0gPT0gJ3N0cmVhbWluZyBBUEknCisgICAgVHJ1ZQogCiBTcGVjaWFsaXppbmcgSlNPTiBvYmplY3QgZGVjb2Rpbmc6OgogCkBAIC02MSw0MyArNjgsMzYgQEAKICAgICA+Pj4ganNvbi5sb2FkcygneyJfX2NvbXBsZXhfXyI6IHRydWUsICJyZWFsIjogMSwgImltYWciOiAyfScsCiAgICAgLi4uICAgICBvYmplY3RfaG9vaz1hc19jb21wbGV4KQogICAgICgxKzJqKQotICAgID4+PiBpbXBvcnQgZGVjaW1hbAotICAgID4+PiBqc29uLmxvYWRzKCcxLjEnLCBwYXJzZV9mbG9hdD1kZWNpbWFsLkRlY2ltYWwpCi0gICAgRGVjaW1hbCgnMS4xJykKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisgICAgPj4+IGpzb24ubG9hZHMoJzEuMScsIHBhcnNlX2Zsb2F0PURlY2ltYWwpID09IERlY2ltYWwoJzEuMScpCisgICAgVHJ1ZQogCi1FeHRlbmRpbmcgSlNPTkVuY29kZXI6OgorU3BlY2lhbGl6aW5nIEpTT04gb2JqZWN0IGVuY29kaW5nOjoKIAogICAgID4+PiBpbXBvcnQganNvbgotICAgID4+PiBjbGFzcyBDb21wbGV4RW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKLSAgICAuLi4gICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9iaik6Ci0gICAgLi4uICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGNvbXBsZXgpOgotICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gW29iai5yZWFsLCBvYmouaW1hZ10KLSAgICAuLi4gICAgICAgICByZXR1cm4ganNvbi5KU09ORW5jb2Rlci5kZWZhdWx0KHNlbGYsIG9iaikKKyAgICA+Pj4gZGVmIGVuY29kZV9jb21wbGV4KG9iaik6CisgICAgLi4uICAgICBpZiBpc2luc3RhbmNlKG9iaiwgY29tcGxleCk6CisgICAgLi4uICAgICAgICAgcmV0dXJuIFtvYmoucmVhbCwgb2JqLmltYWddCisgICAgLi4uICAgICByYWlzZSBUeXBlRXJyb3IocmVwcihvKSArICIgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlIikKICAgICAuLi4KLSAgICA+Pj4gZHVtcHMoMiArIDFqLCBjbHM9Q29tcGxleEVuY29kZXIpCisgICAgPj4+IGpzb24uZHVtcHMoMiArIDFqLCBkZWZhdWx0PWVuY29kZV9jb21wbGV4KQogICAgICdbMi4wLCAxLjBdJwotICAgID4+PiBDb21wbGV4RW5jb2RlcigpLmVuY29kZSgyICsgMWopCisgICAgPj4+IGpzb24uSlNPTkVuY29kZXIoZGVmYXVsdD1lbmNvZGVfY29tcGxleCkuZW5jb2RlKDIgKyAxaikKICAgICAnWzIuMCwgMS4wXScKLSAgICA+Pj4gbGlzdChDb21wbGV4RW5jb2RlcigpLml0ZXJlbmNvZGUoMiArIDFqKSkKLSAgICBbJ1snLCAnMi4wJywgJywgJywgJzEuMCcsICddJ10KKyAgICA+Pj4gJycuam9pbihqc29uLkpTT05FbmNvZGVyKGRlZmF1bHQ9ZW5jb2RlX2NvbXBsZXgpLml0ZXJlbmNvZGUoMiArIDFqKSkKKyAgICAnWzIuMCwgMS4wXScKIAogCi1Vc2luZyBqc29uLnRvb2wgZnJvbSB0aGUgc2hlbGwgdG8gdmFsaWRhdGUgYW5kCi1wcmV0dHktcHJpbnQ6OgorVXNpbmcganNvbi50b29sIGZyb20gdGhlIHNoZWxsIHRvIHZhbGlkYXRlIGFuZCBwcmV0dHktcHJpbnQ6OgogCi0gICAgJCBlY2hvICd7Impzb24iOiJvYmoifScgfCBweXRob24gLW1qc29uLnRvb2wKKyAgICAkIGVjaG8gJ3sianNvbiI6Im9iaiJ9JyB8IHB5dGhvbiAtbSBqc29uLnRvb2wKICAgICB7CiAgICAgICAgICJqc29uIjogIm9iaiIKICAgICB9Ci0gICAgJCBlY2hvICd7IDEuMjozLjR9JyB8IHB5dGhvbiAtbWpzb24udG9vbAorICAgICQgZWNobyAneyAxLjI6My40fScgfCBweXRob24gLW0ganNvbi50b29sCiAgICAgRXhwZWN0aW5nIHByb3BlcnR5IG5hbWU6IGxpbmUgMSBjb2x1bW4gMiAoY2hhciAyKQotCi1Ob3RlIHRoYXQgdGhlIEpTT04gcHJvZHVjZWQgYnkgdGhpcyBtb2R1bGUncyBkZWZhdWx0IHNldHRpbmdzCi1pcyBhIHN1YnNldCBvZiBZQU1MLCBzbyBpdCBtYXkgYmUgdXNlZCBhcyBhIHNlcmlhbGl6ZXIgZm9yIHRoYXQgYXMgd2VsbC4KLQogIiIiCi0KLV9fdmVyc2lvbl9fID0gJzEuOScKK19fdmVyc2lvbl9fID0gJzIuMC45JwogX19hbGxfXyA9IFsKICAgICAnZHVtcCcsICdkdW1wcycsICdsb2FkJywgJ2xvYWRzJywKICAgICAnSlNPTkRlY29kZXInLCAnSlNPTkVuY29kZXInLApAQCAtMTI1LDI4ICsxMjUsMjkgQEAKICAgICAiIiJTZXJpYWxpemUgYGBvYmpgYCBhcyBhIEpTT04gZm9ybWF0dGVkIHN0cmVhbSB0byBgYGZwYGAgKGEKICAgICBgYC53cml0ZSgpYGAtc3VwcG9ydGluZyBmaWxlLWxpa2Ugb2JqZWN0KS4KIAotICAgIElmIGBgc2tpcGtleXNgYCBpcyBgYFRydWVgYCB0aGVuIGBgZGljdGBgIGtleXMgdGhhdCBhcmUgbm90IGJhc2ljIHR5cGVzCisgICAgSWYgYGBza2lwa2V5c2BgIGlzIHRydWUgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcwogICAgIChgYHN0cmBgLCBgYHVuaWNvZGVgYCwgYGBpbnRgYCwgYGBsb25nYGAsIGBgZmxvYXRgYCwgYGBib29sYGAsIGBgTm9uZWBgKQogICAgIHdpbGwgYmUgc2tpcHBlZCBpbnN0ZWFkIG9mIHJhaXNpbmcgYSBgYFR5cGVFcnJvcmBgLgogCi0gICAgSWYgYGBlbnN1cmVfYXNjaWlgYCBpcyBgYEZhbHNlYGAsIHRoZW4gdGhlIHNvbWUgY2h1bmtzIHdyaXR0ZW4gdG8gYGBmcGBgCisgICAgSWYgYGBlbnN1cmVfYXNjaWlgYCBpcyBmYWxzZSwgdGhlbiB0aGUgc29tZSBjaHVua3Mgd3JpdHRlbiB0byBgYGZwYGAKICAgICBtYXkgYmUgYGB1bmljb2RlYGAgaW5zdGFuY2VzLCBzdWJqZWN0IHRvIG5vcm1hbCBQeXRob24gYGBzdHJgYCB0bwogICAgIGBgdW5pY29kZWBgIGNvZXJjaW9uIHJ1bGVzLiBVbmxlc3MgYGBmcC53cml0ZSgpYGAgZXhwbGljaXRseQogICAgIHVuZGVyc3RhbmRzIGBgdW5pY29kZWBgIChhcyBpbiBgYGNvZGVjcy5nZXR3cml0ZXIoKWBgKSB0aGlzIGlzIGxpa2VseQogICAgIHRvIGNhdXNlIGFuIGVycm9yLgogCi0gICAgSWYgYGBjaGVja19jaXJjdWxhcmBgIGlzIGBgRmFsc2VgYCwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCisgICAgSWYgYGBjaGVja19jaXJjdWxhcmBgIGlzIGZhbHNlLCB0aGVuIHRoZSBjaXJjdWxhciByZWZlcmVuY2UgY2hlY2sKICAgICBmb3IgY29udGFpbmVyIHR5cGVzIHdpbGwgYmUgc2tpcHBlZCBhbmQgYSBjaXJjdWxhciByZWZlcmVuY2Ugd2lsbAogICAgIHJlc3VsdCBpbiBhbiBgYE92ZXJmbG93RXJyb3JgYCAob3Igd29yc2UpLgogCi0gICAgSWYgYGBhbGxvd19uYW5gYCBpcyBgYEZhbHNlYGAsIHRoZW4gaXQgd2lsbCBiZSBhIGBgVmFsdWVFcnJvcmBgIHRvCisgICAgSWYgYGBhbGxvd19uYW5gYCBpcyBmYWxzZSwgdGhlbiBpdCB3aWxsIGJlIGEgYGBWYWx1ZUVycm9yYGAgdG8KICAgICBzZXJpYWxpemUgb3V0IG9mIHJhbmdlIGBgZmxvYXRgYCB2YWx1ZXMgKGBgbmFuYGAsIGBgaW5mYGAsIGBgLWluZmBgKQogICAgIGluIHN0cmljdCBjb21wbGlhbmNlIG9mIHRoZSBKU09OIHNwZWNpZmljYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgdGhlCiAgICAgSmF2YVNjcmlwdCBlcXVpdmFsZW50cyAoYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBgYC1JbmZpbml0eWBgKS4KIAotICAgIElmIGBgaW5kZW50YGAgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5IGVsZW1lbnRzIGFuZCBvYmplY3QKLSAgICBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0IGluZGVudCBsZXZlbC4gQW4gaW5kZW50IGxldmVsCi0gICAgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBgYE5vbmVgYCBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLgorICAgIElmIGBgaW5kZW50YGAgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5IGVsZW1lbnRzIGFuZAorICAgIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0IGluZGVudCBsZXZlbC4gQW4gaW5kZW50CisgICAgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBgYE5vbmVgYCBpcyB0aGUgbW9zdCBjb21wYWN0CisgICAgcmVwcmVzZW50YXRpb24uCiAKICAgICBJZiBgYHNlcGFyYXRvcnNgYCBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKICAgICB0aGVuIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4KQEAgLTE1OSwxMiArMTYwLDEyIEBACiAKICAgICBUbyB1c2UgYSBjdXN0b20gYGBKU09ORW5jb2RlcmBgIHN1YmNsYXNzIChlLmcuIG9uZSB0aGF0IG92ZXJyaWRlcyB0aGUKICAgICBgYC5kZWZhdWx0KClgYCBtZXRob2QgdG8gc2VyaWFsaXplIGFkZGl0aW9uYWwgdHlwZXMpLCBzcGVjaWZ5IGl0IHdpdGgKLSAgICB0aGUgYGBjbHNgYCBrd2FyZy4KKyAgICB0aGUgYGBjbHNgYCBrd2FyZzsgb3RoZXJ3aXNlIGBgSlNPTkVuY29kZXJgYCBpcyB1c2VkLgogCiAgICAgIiIiCiAgICAgIyBjYWNoZWQgZW5jb2RlcgotICAgIGlmIChza2lwa2V5cyBpcyBGYWxzZSBhbmQgZW5zdXJlX2FzY2lpIGlzIFRydWUgYW5kCi0gICAgICAgIGNoZWNrX2NpcmN1bGFyIGlzIFRydWUgYW5kIGFsbG93X25hbiBpcyBUcnVlIGFuZAorICAgIGlmIChub3Qgc2tpcGtleXMgYW5kIGVuc3VyZV9hc2NpaSBhbmQKKyAgICAgICAgY2hlY2tfY2lyY3VsYXIgYW5kIGFsbG93X25hbiBhbmQKICAgICAgICAgY2xzIGlzIE5vbmUgYW5kIGluZGVudCBpcyBOb25lIGFuZCBzZXBhcmF0b3JzIGlzIE5vbmUgYW5kCiAgICAgICAgIGVuY29kaW5nID09ICd1dGYtOCcgYW5kIGRlZmF1bHQgaXMgTm9uZSBhbmQgbm90IGt3KToKICAgICAgICAgaXRlcmFibGUgPSBfZGVmYXVsdF9lbmNvZGVyLml0ZXJlbmNvZGUob2JqKQpAQCAtMTg2LDE5ICsxODcsMTkgQEAKICAgICAgICAgZW5jb2Rpbmc9J3V0Zi04JywgZGVmYXVsdD1Ob25lLCAqKmt3KToKICAgICAiIiJTZXJpYWxpemUgYGBvYmpgYCB0byBhIEpTT04gZm9ybWF0dGVkIGBgc3RyYGAuCiAKLSAgICBJZiBgYHNraXBrZXlzYGAgaXMgYGBUcnVlYGAgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcworICAgIElmIGBgc2tpcGtleXNgYCBpcyBmYWxzZSB0aGVuIGBgZGljdGBgIGtleXMgdGhhdCBhcmUgbm90IGJhc2ljIHR5cGVzCiAgICAgKGBgc3RyYGAsIGBgdW5pY29kZWBgLCBgYGludGBgLCBgYGxvbmdgYCwgYGBmbG9hdGBgLCBgYGJvb2xgYCwgYGBOb25lYGApCiAgICAgd2lsbCBiZSBza2lwcGVkIGluc3RlYWQgb2YgcmFpc2luZyBhIGBgVHlwZUVycm9yYGAuCiAKLSAgICBJZiBgYGVuc3VyZV9hc2NpaWBgIGlzIGBgRmFsc2VgYCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYQorICAgIElmIGBgZW5zdXJlX2FzY2lpYGAgaXMgZmFsc2UsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEKICAgICBgYHVuaWNvZGVgYCBpbnN0YW5jZSBzdWJqZWN0IHRvIG5vcm1hbCBQeXRob24gYGBzdHJgYCB0byBgYHVuaWNvZGVgYAogICAgIGNvZXJjaW9uIHJ1bGVzIGluc3RlYWQgb2YgYmVpbmcgZXNjYXBlZCB0byBhbiBBU0NJSSBgYHN0cmBgLgogCi0gICAgSWYgYGBjaGVja19jaXJjdWxhcmBgIGlzIGBgRmFsc2VgYCwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCisgICAgSWYgYGBjaGVja19jaXJjdWxhcmBgIGlzIGZhbHNlLCB0aGVuIHRoZSBjaXJjdWxhciByZWZlcmVuY2UgY2hlY2sKICAgICBmb3IgY29udGFpbmVyIHR5cGVzIHdpbGwgYmUgc2tpcHBlZCBhbmQgYSBjaXJjdWxhciByZWZlcmVuY2Ugd2lsbAogICAgIHJlc3VsdCBpbiBhbiBgYE92ZXJmbG93RXJyb3JgYCAob3Igd29yc2UpLgogCi0gICAgSWYgYGBhbGxvd19uYW5gYCBpcyBgYEZhbHNlYGAsIHRoZW4gaXQgd2lsbCBiZSBhIGBgVmFsdWVFcnJvcmBgIHRvCisgICAgSWYgYGBhbGxvd19uYW5gYCBpcyBmYWxzZSwgdGhlbiBpdCB3aWxsIGJlIGEgYGBWYWx1ZUVycm9yYGAgdG8KICAgICBzZXJpYWxpemUgb3V0IG9mIHJhbmdlIGBgZmxvYXRgYCB2YWx1ZXMgKGBgbmFuYGAsIGBgaW5mYGAsIGBgLWluZmBgKSBpbgogICAgIHN0cmljdCBjb21wbGlhbmNlIG9mIHRoZSBKU09OIHNwZWNpZmljYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgdGhlCiAgICAgSmF2YVNjcmlwdCBlcXVpdmFsZW50cyAoYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBgYC1JbmZpbml0eWBgKS4KQEAgLTIxOSwxMiArMjIwLDEyIEBACiAKICAgICBUbyB1c2UgYSBjdXN0b20gYGBKU09ORW5jb2RlcmBgIHN1YmNsYXNzIChlLmcuIG9uZSB0aGF0IG92ZXJyaWRlcyB0aGUKICAgICBgYC5kZWZhdWx0KClgYCBtZXRob2QgdG8gc2VyaWFsaXplIGFkZGl0aW9uYWwgdHlwZXMpLCBzcGVjaWZ5IGl0IHdpdGgKLSAgICB0aGUgYGBjbHNgYCBrd2FyZy4KKyAgICB0aGUgYGBjbHNgYCBrd2FyZzsgb3RoZXJ3aXNlIGBgSlNPTkVuY29kZXJgYCBpcyB1c2VkLgogCiAgICAgIiIiCiAgICAgIyBjYWNoZWQgZW5jb2RlcgotICAgIGlmIChza2lwa2V5cyBpcyBGYWxzZSBhbmQgZW5zdXJlX2FzY2lpIGlzIFRydWUgYW5kCi0gICAgICAgIGNoZWNrX2NpcmN1bGFyIGlzIFRydWUgYW5kIGFsbG93X25hbiBpcyBUcnVlIGFuZAorICAgIGlmIChub3Qgc2tpcGtleXMgYW5kIGVuc3VyZV9hc2NpaSBhbmQKKyAgICAgICAgY2hlY2tfY2lyY3VsYXIgYW5kIGFsbG93X25hbiBhbmQKICAgICAgICAgY2xzIGlzIE5vbmUgYW5kIGluZGVudCBpcyBOb25lIGFuZCBzZXBhcmF0b3JzIGlzIE5vbmUgYW5kCiAgICAgICAgIGVuY29kaW5nID09ICd1dGYtOCcgYW5kIGRlZmF1bHQgaXMgTm9uZSBhbmQgbm90IGt3KToKICAgICAgICAgcmV0dXJuIF9kZWZhdWx0X2VuY29kZXIuZW5jb2RlKG9iaikKQEAgLTIzNywxMyArMjM4LDE0IEBACiAgICAgICAgICoqa3cpLmVuY29kZShvYmopCiAKIAotX2RlZmF1bHRfZGVjb2RlciA9IEpTT05EZWNvZGVyKGVuY29kaW5nPU5vbmUsIG9iamVjdF9ob29rPU5vbmUpCitfZGVmYXVsdF9kZWNvZGVyID0gSlNPTkRlY29kZXIoZW5jb2Rpbmc9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfcGFpcnNfaG9vaz1Ob25lKQogCiAKIGRlZiBsb2FkKGZwLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9uZSwKLSAgICAgICAgcGFyc2VfaW50PU5vbmUsIHBhcnNlX2NvbnN0YW50PU5vbmUsICoqa3cpOgotICAgICIiIkRlc2VyaWFsaXplIGBgZnBgYCAoYSBgYC5yZWFkKClgYC1zdXBwb3J0aW5nIGZpbGUtbGlrZSBvYmplY3QKLSAgICBjb250YWluaW5nIGEgSlNPTiBkb2N1bWVudCkgdG8gYSBQeXRob24gb2JqZWN0LgorICAgICAgICBwYXJzZV9pbnQ9Tm9uZSwgcGFyc2VfY29uc3RhbnQ9Tm9uZSwgb2JqZWN0X3BhaXJzX2hvb2s9Tm9uZSwgKiprdyk6CisgICAgIiIiRGVzZXJpYWxpemUgYGBmcGBgIChhIGBgLnJlYWQoKWBgLXN1cHBvcnRpbmcgZmlsZS1saWtlIG9iamVjdCBjb250YWluaW5nCisgICAgYSBKU09OIGRvY3VtZW50KSB0byBhIFB5dGhvbiBvYmplY3QuCiAKICAgICBJZiB0aGUgY29udGVudHMgb2YgYGBmcGBgIGlzIGVuY29kZWQgd2l0aCBhbiBBU0NJSSBiYXNlZCBlbmNvZGluZyBvdGhlcgogICAgIHRoYW4gdXRmLTggKGUuZy4gbGF0aW4tMSksIHRoZW4gYW4gYXBwcm9wcmlhdGUgYGBlbmNvZGluZ2BgIG5hbWUgbXVzdApAQCAtMjU3LDE4ICsyNTksMjcgQEAKICAgICBgYG9iamVjdF9ob29rYGAgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGBgZGljdGBgLiBUaGlzIGZlYXR1cmUKICAgICBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzIChlLmcuIEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgogCisgICAgYGBvYmplY3RfcGFpcnNfaG9va2BgIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUKKyAgICByZXN1bHQgb2YgYW55IG9iamVjdCBsaXRlcmFsIGRlY29kZWQgd2l0aCBhbiBvcmRlcmVkIGxpc3Qgb2YgcGFpcnMuICBUaGUKKyAgICByZXR1cm4gdmFsdWUgb2YgYGBvYmplY3RfcGFpcnNfaG9va2BgIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgYGRpY3RgYC4KKyAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycyB0aGF0IHJlbHkgb24gdGhlCisgICAgb3JkZXIgdGhhdCB0aGUga2V5IGFuZCB2YWx1ZSBwYWlycyBhcmUgZGVjb2RlZCAoZm9yIGV4YW1wbGUsCisgICAgY29sbGVjdGlvbnMuT3JkZXJlZERpY3Qgd2lsbCByZW1lbWJlciB0aGUgb3JkZXIgb2YgaW5zZXJ0aW9uKS4gSWYKKyAgICBgYG9iamVjdF9ob29rYGAgaXMgYWxzbyBkZWZpbmVkLCB0aGUgYGBvYmplY3RfcGFpcnNfaG9va2BgIHRha2VzIHByaW9yaXR5LgorCiAgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBzdWJjbGFzcywgc3BlY2lmeSBpdCB3aXRoIHRoZSBgYGNsc2BgCi0gICAga3dhcmcuCisgICAga3dhcmc7IG90aGVyd2lzZSBgYEpTT05EZWNvZGVyYGAgaXMgdXNlZC4KIAogICAgICIiIgogICAgIHJldHVybiBsb2FkcyhmcC5yZWFkKCksCiAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLCBjbHM9Y2xzLCBvYmplY3RfaG9vaz1vYmplY3RfaG9vaywKICAgICAgICAgcGFyc2VfZmxvYXQ9cGFyc2VfZmxvYXQsIHBhcnNlX2ludD1wYXJzZV9pbnQsCi0gICAgICAgIHBhcnNlX2NvbnN0YW50PXBhcnNlX2NvbnN0YW50LCAqKmt3KQorICAgICAgICBwYXJzZV9jb25zdGFudD1wYXJzZV9jb25zdGFudCwgb2JqZWN0X3BhaXJzX2hvb2s9b2JqZWN0X3BhaXJzX2hvb2ssCisgICAgICAgICoqa3cpCiAKIAogZGVmIGxvYWRzKHMsIGVuY29kaW5nPU5vbmUsIGNscz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lLCBwYXJzZV9mbG9hdD1Ob25lLAotICAgICAgICBwYXJzZV9pbnQ9Tm9uZSwgcGFyc2VfY29uc3RhbnQ9Tm9uZSwgKiprdyk6CisgICAgICAgIHBhcnNlX2ludD1Ob25lLCBwYXJzZV9jb25zdGFudD1Ob25lLCBvYmplY3RfcGFpcnNfaG9vaz1Ob25lLCAqKmt3KToKICAgICAiIiJEZXNlcmlhbGl6ZSBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29kZWBgIGluc3RhbmNlIGNvbnRhaW5pbmcgYSBKU09OCiAgICAgZG9jdW1lbnQpIHRvIGEgUHl0aG9uIG9iamVjdC4KIApAQCAtMjgyLDYgKzI5MywxNCBAQAogICAgIGBgb2JqZWN0X2hvb2tgYCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgYGBkaWN0YGAuIFRoaXMgZmVhdHVyZQogICAgIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjdXN0b20gZGVjb2RlcnMgKGUuZy4gSlNPTi1SUEMgY2xhc3MgaGludGluZykuCiAKKyAgICBgYG9iamVjdF9wYWlyc19ob29rYGAgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZQorICAgIHJlc3VsdCBvZiBhbnkgb2JqZWN0IGxpdGVyYWwgZGVjb2RlZCB3aXRoIGFuIG9yZGVyZWQgbGlzdCBvZiBwYWlycy4gIFRoZQorICAgIHJldHVybiB2YWx1ZSBvZiBgYG9iamVjdF9wYWlyc19ob29rYGAgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGBgZGljdGBgLgorICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzIHRoYXQgcmVseSBvbiB0aGUKKyAgICBvcmRlciB0aGF0IHRoZSBrZXkgYW5kIHZhbHVlIHBhaXJzIGFyZSBkZWNvZGVkIChmb3IgZXhhbXBsZSwKKyAgICBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCB3aWxsIHJlbWVtYmVyIHRoZSBvcmRlciBvZiBpbnNlcnRpb24pLiBJZgorICAgIGBgb2JqZWN0X2hvb2tgYCBpcyBhbHNvIGRlZmluZWQsIHRoZSBgYG9iamVjdF9wYWlyc19ob29rYGAgdGFrZXMgcHJpb3JpdHkuCisKICAgICBgYHBhcnNlX2Zsb2F0YGAsIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc3RyaW5nCiAgICAgb2YgZXZlcnkgSlNPTiBmbG9hdCB0byBiZSBkZWNvZGVkLiBCeSBkZWZhdWx0IHRoaXMgaXMgZXF1aXZhbGVudCB0bwogICAgIGZsb2F0KG51bV9zdHIpLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHVzZSBhbm90aGVyIGRhdGF0eXBlIG9yIHBhcnNlcgpAQCAtMjk4LDE3ICszMTcsMTkgQEAKICAgICBhcmUgZW5jb3VudGVyZWQuCiAKICAgICBUbyB1c2UgYSBjdXN0b20gYGBKU09ORGVjb2RlcmBgIHN1YmNsYXNzLCBzcGVjaWZ5IGl0IHdpdGggdGhlIGBgY2xzYGAKLSAgICBrd2FyZy4KKyAgICBrd2FyZzsgb3RoZXJ3aXNlIGBgSlNPTkRlY29kZXJgYCBpcyB1c2VkLgogCiAgICAgIiIiCiAgICAgaWYgKGNscyBpcyBOb25lIGFuZCBlbmNvZGluZyBpcyBOb25lIGFuZCBvYmplY3RfaG9vayBpcyBOb25lIGFuZAogICAgICAgICAgICAgcGFyc2VfaW50IGlzIE5vbmUgYW5kIHBhcnNlX2Zsb2F0IGlzIE5vbmUgYW5kCi0gICAgICAgICAgICBwYXJzZV9jb25zdGFudCBpcyBOb25lIGFuZCBub3Qga3cpOgorICAgICAgICAgICAgcGFyc2VfY29uc3RhbnQgaXMgTm9uZSBhbmQgb2JqZWN0X3BhaXJzX2hvb2sgaXMgTm9uZSBhbmQgbm90IGt3KToKICAgICAgICAgcmV0dXJuIF9kZWZhdWx0X2RlY29kZXIuZGVjb2RlKHMpCiAgICAgaWYgY2xzIGlzIE5vbmU6CiAgICAgICAgIGNscyA9IEpTT05EZWNvZGVyCiAgICAgaWYgb2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6CiAgICAgICAgIGt3WydvYmplY3RfaG9vayddID0gb2JqZWN0X2hvb2sKKyAgICBpZiBvYmplY3RfcGFpcnNfaG9vayBpcyBub3QgTm9uZToKKyAgICAgICAga3dbJ29iamVjdF9wYWlyc19ob29rJ10gPSBvYmplY3RfcGFpcnNfaG9vawogICAgIGlmIHBhcnNlX2Zsb2F0IGlzIG5vdCBOb25lOgogICAgICAgICBrd1sncGFyc2VfZmxvYXQnXSA9IHBhcnNlX2Zsb2F0CiAgICAgaWYgcGFyc2VfaW50IGlzIG5vdCBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vZGVjb2Rlci5weSBiL0xpYi9qc29uL2RlY29kZXIucHkKaW5kZXggZTgwYjkzNS4uYjk3NDVmNyAxMDA2NDQKLS0tIGEvTGliL2pzb24vZGVjb2Rlci5weQorKysgYi9MaWIvanNvbi9kZWNvZGVyLnB5CkBAIC0xLDEwICsxLDEwIEBACiAiIiJJbXBsZW1lbnRhdGlvbiBvZiBKU09ORGVjb2RlcgogIiIiCi0KIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHN0cnVjdAogCi1mcm9tIGpzb24uc2Nhbm5lciBpbXBvcnQgU2Nhbm5lciwgcGF0dGVybgorZnJvbSBqc29uLnNjYW5uZXIgaW1wb3J0IG1ha2Vfc2Nhbm5lcgogdHJ5OgogICAgIGZyb20gX2pzb24gaW1wb3J0IHNjYW5zdHJpbmcgYXMgY19zY2Fuc3RyaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0xNCw3ICsxNCwxNCBAQAogCiBGTEFHUyA9IHJlLlZFUkJPU0UgfCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwKIAotTmFOLCBQb3NJbmYsIE5lZ0luZiA9IGZsb2F0KCduYW4nKSwgZmxvYXQoJ2luZicpLCBmbG9hdCgnLWluZicpCitkZWYgX2Zsb2F0Y29uc3RhbnRzKCk6CisgICAgX0JZVEVTID0gJzdGRjgwMDAwMDAwMDAwMDA3RkYwMDAwMDAwMDAwMDAwJy5kZWNvZGUoJ2hleCcpCisgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKKyAgICAgICAgX0JZVEVTID0gX0JZVEVTWzo4XVs6Oi0xXSArIF9CWVRFU1s4Ol1bOjotMV0KKyAgICBuYW4sIGluZiA9IHN0cnVjdC51bnBhY2soJ2RkJywgX0JZVEVTKQorICAgIHJldHVybiBuYW4sIGluZiwgLWluZgorCitOYU4sIFBvc0luZiwgTmVnSW5mID0gX2Zsb2F0Y29uc3RhbnRzKCkKIAogCiBkZWYgbGluZWNvbChkb2MsIHBvcyk6CkBAIC0yNyw0OSArMzQsMjYgQEAKIAogCiBkZWYgZXJybXNnKG1zZywgZG9jLCBwb3MsIGVuZD1Ob25lKToKKyAgICAjIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIF9qc29uCiAgICAgbGluZW5vLCBjb2xubyA9IGxpbmVjb2woZG9jLCBwb3MpCiAgICAgaWYgZW5kIGlzIE5vbmU6CiAgICAgICAgIGZtdCA9ICd7MH06IGxpbmUgezF9IGNvbHVtbiB7Mn0gKGNoYXIgezN9KScKICAgICAgICAgcmV0dXJuIGZtdC5mb3JtYXQobXNnLCBsaW5lbm8sIGNvbG5vLCBwb3MpCisgICAgICAgICNmbXQgPSAnJXM6IGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVkKScKKyAgICAgICAgI3JldHVybiBmbXQgJSAobXNnLCBsaW5lbm8sIGNvbG5vLCBwb3MpCiAgICAgZW5kbGluZW5vLCBlbmRjb2xubyA9IGxpbmVjb2woZG9jLCBlbmQpCiAgICAgZm10ID0gJ3swfTogbGluZSB7MX0gY29sdW1uIHsyfSAtIGxpbmUgezN9IGNvbHVtbiB7NH0gKGNoYXIgezV9IC0gezZ9KScKICAgICByZXR1cm4gZm10LmZvcm1hdChtc2csIGxpbmVubywgY29sbm8sIGVuZGxpbmVubywgZW5kY29sbm8sIHBvcywgZW5kKQorICAgICNmbXQgPSAnJXM6IGxpbmUgJWQgY29sdW1uICVkIC0gbGluZSAlZCBjb2x1bW4gJWQgKGNoYXIgJWQgLSAlZCknCisgICAgI3JldHVybiBmbXQgJSAobXNnLCBsaW5lbm8sIGNvbG5vLCBlbmRsaW5lbm8sIGVuZGNvbG5vLCBwb3MsIGVuZCkKIAogCiBfQ09OU1RBTlRTID0gewogICAgICctSW5maW5pdHknOiBOZWdJbmYsCiAgICAgJ0luZmluaXR5JzogUG9zSW5mLAogICAgICdOYU4nOiBOYU4sCi0gICAgJ3RydWUnOiBUcnVlLAotICAgICdmYWxzZSc6IEZhbHNlLAotICAgICdudWxsJzogTm9uZSwKIH0KIAotCi1kZWYgSlNPTkNvbnN0YW50KG1hdGNoLCBjb250ZXh0LCBjPV9DT05TVEFOVFMpOgotICAgIHMgPSBtYXRjaC5ncm91cCgwKQotICAgIGZuID0gZ2V0YXR0cihjb250ZXh0LCAncGFyc2VfY29uc3RhbnQnLCBOb25lKQotICAgIGlmIGZuIGlzIE5vbmU6Ci0gICAgICAgIHJ2YWwgPSBjW3NdCi0gICAgZWxzZToKLSAgICAgICAgcnZhbCA9IGZuKHMpCi0gICAgcmV0dXJuIHJ2YWwsIE5vbmUKLXBhdHRlcm4oJygtP0luZmluaXR5fE5hTnx0cnVlfGZhbHNlfG51bGwpJykoSlNPTkNvbnN0YW50KQotCi0KLWRlZiBKU09OTnVtYmVyKG1hdGNoLCBjb250ZXh0KToKLSAgICBtYXRjaCA9IEpTT05OdW1iZXIucmVnZXgubWF0Y2gobWF0Y2guc3RyaW5nLCAqbWF0Y2guc3BhbigpKQotICAgIGludGVnZXIsIGZyYWMsIGV4cCA9IG1hdGNoLmdyb3VwcygpCi0gICAgaWYgZnJhYyBvciBleHA6Ci0gICAgICAgIGZuID0gZ2V0YXR0cihjb250ZXh0LCAncGFyc2VfZmxvYXQnLCBOb25lKSBvciBmbG9hdAotICAgICAgICByZXMgPSBmbihpbnRlZ2VyICsgKGZyYWMgb3IgJycpICsgKGV4cCBvciAnJykpCi0gICAgZWxzZToKLSAgICAgICAgZm4gPSBnZXRhdHRyKGNvbnRleHQsICdwYXJzZV9pbnQnLCBOb25lKSBvciBpbnQKLSAgICAgICAgcmVzID0gZm4oaW50ZWdlcikKLSAgICByZXR1cm4gcmVzLCBOb25lCi1wYXR0ZXJuKHInKC0/KD86MHxbMS05XVxkKikpKFwuXGQrKT8oW2VFXVstK10/XGQrKT8nKShKU09OTnVtYmVyKQotCi0KIFNUUklOR0NIVU5LID0gcmUuY29tcGlsZShyJyguKj8pKFsiXFxceDAwLVx4MWZdKScsIEZMQUdTKQogQkFDS1NMQVNIID0gewogICAgICciJzogdSciJywgJ1xcJzogdSdcXCcsICcvJzogdScvJywKQEAgLTc4LDggKzYyLDE2IEBACiAKIERFRkFVTFRfRU5DT0RJTkcgPSAidXRmLTgiCiAKK2RlZiBweV9zY2Fuc3RyaW5nKHMsIGVuZCwgZW5jb2Rpbmc9Tm9uZSwgc3RyaWN0PVRydWUsCisgICAgICAgIF9iPUJBQ0tTTEFTSCwgX209U1RSSU5HQ0hVTksubWF0Y2gpOgorICAgICIiIlNjYW4gdGhlIHN0cmluZyBzIGZvciBhIEpTT04gc3RyaW5nLiBFbmQgaXMgdGhlIGluZGV4IG9mIHRoZQorICAgIGNoYXJhY3RlciBpbiBzIGFmdGVyIHRoZSBxdW90ZSB0aGF0IHN0YXJ0ZWQgdGhlIEpTT04gc3RyaW5nLgorICAgIFVuZXNjYXBlcyBhbGwgdmFsaWQgSlNPTiBzdHJpbmcgZXNjYXBlIHNlcXVlbmNlcyBhbmQgcmFpc2VzIFZhbHVlRXJyb3IKKyAgICBvbiBhdHRlbXB0IHRvIGRlY29kZSBhbiBpbnZhbGlkIHN0cmluZy4gSWYgc3RyaWN0IGlzIEZhbHNlIHRoZW4gbGl0ZXJhbAorICAgIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCBpbiB0aGUgc3RyaW5nLgogCi1kZWYgcHlfc2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nPU5vbmUsIHN0cmljdD1UcnVlLCBfYj1CQUNLU0xBU0gsIF9tPVNUUklOR0NIVU5LLm1hdGNoKToKKyAgICBSZXR1cm5zIGEgdHVwbGUgb2YgdGhlIGRlY29kZWQgc3RyaW5nIGFuZCB0aGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciBpbiBzCisgICAgYWZ0ZXIgdGhlIGVuZCBxdW90ZS4iIiIKICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgogICAgICAgICBlbmNvZGluZyA9IERFRkFVTFRfRU5DT0RJTkcKICAgICBjaHVua3MgPSBbXQpAQCAtOTIsMTQgKzg0LDE4IEBACiAgICAgICAgICAgICAgICAgZXJybXNnKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0IiwgcywgYmVnaW4pKQogICAgICAgICBlbmQgPSBjaHVuay5lbmQoKQogICAgICAgICBjb250ZW50LCB0ZXJtaW5hdG9yID0gY2h1bmsuZ3JvdXBzKCkKKyAgICAgICAgIyBDb250ZW50IGlzIGNvbnRhaW5zIHplcm8gb3IgbW9yZSB1bmVzY2FwZWQgc3RyaW5nIGNoYXJhY3RlcnMKICAgICAgICAgaWYgY29udGVudDoKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvbnRlbnQsIHVuaWNvZGUpOgogICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB1bmljb2RlKGNvbnRlbnQsIGVuY29kaW5nKQogICAgICAgICAgICAgX2FwcGVuZChjb250ZW50KQorICAgICAgICAjIFRlcm1pbmF0b3IgaXMgdGhlIGVuZCBvZiBzdHJpbmcsIGEgbGl0ZXJhbCBjb250cm9sIGNoYXJhY3RlciwKKyAgICAgICAgIyBvciBhIGJhY2tzbGFzaCBkZW5vdGluZyB0aGF0IGFuIGVzY2FwZSBzZXF1ZW5jZSBmb2xsb3dzCiAgICAgICAgIGlmIHRlcm1pbmF0b3IgPT0gJyInOgogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxpZiB0ZXJtaW5hdG9yICE9ICdcXCc6CiAgICAgICAgICAgICBpZiBzdHJpY3Q6CisgICAgICAgICAgICAgICAgI21zZyA9ICJJbnZhbGlkIGNvbnRyb2wgY2hhcmFjdGVyICVyIGF0IiAlICh0ZXJtaW5hdG9yLCkKICAgICAgICAgICAgICAgICBtc2cgPSAiSW52YWxpZCBjb250cm9sIGNoYXJhY3RlciB7MCFyfSBhdCIuZm9ybWF0KHRlcm1pbmF0b3IpCiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2cobXNnLCBzLCBlbmQpKQogICAgICAgICAgICAgZWxzZToKQEAgLTExMCwxMzYgKzEwNiwxNjQgQEAKICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgIGVycm1zZygiVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCIsIHMsIGJlZ2luKSkKKyAgICAgICAgIyBJZiBub3QgYSB1bmljb2RlIGVzY2FwZSBzZXF1ZW5jZSwgbXVzdCBiZSBpbiB0aGUgbG9va3VwIHRhYmxlCiAgICAgICAgIGlmIGVzYyAhPSAndSc6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbSA9IF9iW2VzY10KKyAgICAgICAgICAgICAgICBjaGFyID0gX2JbZXNjXQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIG1zZyA9ICJJbnZhbGlkIFxcZXNjYXBlOiB7MCFyfSIuZm9ybWF0KGVzYykKKyAgICAgICAgICAgICAgICBtc2cgPSAiSW52YWxpZCBcXGVzY2FwZTogIiArIHJlcHIoZXNjKQogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKG1zZywgcywgZW5kKSkKICAgICAgICAgICAgIGVuZCArPSAxCiAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlCiAgICAgICAgICAgICBlc2MgPSBzW2VuZCArIDE6ZW5kICsgNV0KICAgICAgICAgICAgIG5leHRfZW5kID0gZW5kICsgNQotICAgICAgICAgICAgbXNnID0gIkludmFsaWQgXFx1WFhYWCBlc2NhcGUiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgbGVuKGVzYykgIT0gNDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgotICAgICAgICAgICAgICAgIHVuaSA9IGludChlc2MsIDE2KQotICAgICAgICAgICAgICAgIGlmIDB4ZDgwMCA8PSB1bmkgPD0gMHhkYmZmIGFuZCBzeXMubWF4dW5pY29kZSA+IDY1NTM1OgotICAgICAgICAgICAgICAgICAgICBtc2cgPSAiSW52YWxpZCBcXHVYWFhYXFx1WFhYWCBzdXJyb2dhdGUgcGFpciIKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNbZW5kICsgNTplbmQgKyA3XSA9PSAnXFx1JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKLSAgICAgICAgICAgICAgICAgICAgZXNjMiA9IHNbZW5kICsgNzplbmQgKyAxMV0KLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGVzYzIpICE9IDQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCi0gICAgICAgICAgICAgICAgICAgIHVuaTIgPSBpbnQoZXNjMiwgMTYpCi0gICAgICAgICAgICAgICAgICAgIHVuaSA9IDB4MTAwMDAgKyAoKCh1bmkgLSAweGQ4MDApIDw8IDEwKSB8ICh1bmkyIC0gMHhkYzAwKSkKLSAgICAgICAgICAgICAgICAgICAgbmV4dF9lbmQgKz0gNgotICAgICAgICAgICAgICAgIG0gPSB1bmljaHIodW5pKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBpZiBsZW4oZXNjKSAhPSA0OgorICAgICAgICAgICAgICAgIG1zZyA9ICJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKG1zZywgcywgZW5kKSkKKyAgICAgICAgICAgIHVuaSA9IGludChlc2MsIDE2KQorICAgICAgICAgICAgIyBDaGVjayBmb3Igc3Vycm9nYXRlIHBhaXIgb24gVUNTLTQgc3lzdGVtcworICAgICAgICAgICAgaWYgMHhkODAwIDw9IHVuaSA8PSAweGRiZmYgYW5kIHN5cy5tYXh1bmljb2RlID4gNjU1MzU6CisgICAgICAgICAgICAgICAgbXNnID0gIkludmFsaWQgXFx1WFhYWFxcdVhYWFggc3Vycm9nYXRlIHBhaXIiCisgICAgICAgICAgICAgICAgaWYgbm90IHNbZW5kICsgNTplbmQgKyA3XSA9PSAnXFx1JzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2cobXNnLCBzLCBlbmQpKQorICAgICAgICAgICAgICAgIGVzYzIgPSBzW2VuZCArIDc6ZW5kICsgMTFdCisgICAgICAgICAgICAgICAgaWYgbGVuKGVzYzIpICE9IDQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKG1zZywgcywgZW5kKSkKKyAgICAgICAgICAgICAgICB1bmkyID0gaW50KGVzYzIsIDE2KQorICAgICAgICAgICAgICAgIHVuaSA9IDB4MTAwMDAgKyAoKCh1bmkgLSAweGQ4MDApIDw8IDEwKSB8ICh1bmkyIC0gMHhkYzAwKSkKKyAgICAgICAgICAgICAgICBuZXh0X2VuZCArPSA2CisgICAgICAgICAgICBjaGFyID0gdW5pY2hyKHVuaSkKICAgICAgICAgICAgIGVuZCA9IG5leHRfZW5kCi0gICAgICAgIF9hcHBlbmQobSkKKyAgICAgICAgIyBBcHBlbmQgdGhlIHVuZXNjYXBlZCBjaGFyYWN0ZXIKKyAgICAgICAgX2FwcGVuZChjaGFyKQogICAgIHJldHVybiB1Jycuam9pbihjaHVua3MpLCBlbmQKIAogCi0jIFVzZSBzcGVlZHVwCi1pZiBjX3NjYW5zdHJpbmcgaXMgbm90IE5vbmU6Ci0gICAgc2NhbnN0cmluZyA9IGNfc2NhbnN0cmluZwotZWxzZToKLSAgICBzY2Fuc3RyaW5nID0gcHlfc2NhbnN0cmluZworIyBVc2Ugc3BlZWR1cCBpZiBhdmFpbGFibGUKK3NjYW5zdHJpbmcgPSBjX3NjYW5zdHJpbmcgb3IgcHlfc2NhbnN0cmluZwogCi1kZWYgSlNPTlN0cmluZyhtYXRjaCwgY29udGV4dCk6Ci0gICAgZW5jb2RpbmcgPSBnZXRhdHRyKGNvbnRleHQsICdlbmNvZGluZycsIE5vbmUpCi0gICAgc3RyaWN0ID0gZ2V0YXR0cihjb250ZXh0LCAnc3RyaWN0JywgVHJ1ZSkKLSAgICByZXR1cm4gc2NhbnN0cmluZyhtYXRjaC5zdHJpbmcsIG1hdGNoLmVuZCgpLCBlbmNvZGluZywgc3RyaWN0KQotcGF0dGVybihyJyInKShKU09OU3RyaW5nKQorV0hJVEVTUEFDRSA9IHJlLmNvbXBpbGUocidbIFx0XG5ccl0qJywgRkxBR1MpCitXSElURVNQQUNFX1NUUiA9ICcgXHRcblxyJwogCi0KLVdISVRFU1BBQ0UgPSByZS5jb21waWxlKHInXHMqJywgRkxBR1MpCi0KLQotZGVmIEpTT05PYmplY3QobWF0Y2gsIGNvbnRleHQsIF93PVdISVRFU1BBQ0UubWF0Y2gpOgotICAgIHBhaXJzID0ge30KLSAgICBzID0gbWF0Y2guc3RyaW5nCi0gICAgZW5kID0gX3cocywgbWF0Y2guZW5kKCkpLmVuZCgpCitkZWYgSlNPTk9iamVjdChzX2FuZF9lbmQsIGVuY29kaW5nLCBzdHJpY3QsIHNjYW5fb25jZSwgb2JqZWN0X2hvb2ssCisgICAgICAgICAgICAgICBvYmplY3RfcGFpcnNfaG9vaywgX3c9V0hJVEVTUEFDRS5tYXRjaCwgX3dzPVdISVRFU1BBQ0VfU1RSKToKKyAgICBzLCBlbmQgPSBzX2FuZF9lbmQKKyAgICBwYWlycyA9IFtdCisgICAgcGFpcnNfYXBwZW5kID0gcGFpcnMuYXBwZW5kCisgICAgIyBVc2UgYSBzbGljZSB0byBwcmV2ZW50IEluZGV4RXJyb3IgZnJvbSBiZWluZyByYWlzZWQsIHRoZSBmb2xsb3dpbmcKKyAgICAjIGNoZWNrIHdpbGwgcmFpc2UgYSBtb3JlIHNwZWNpZmljIFZhbHVlRXJyb3IgaWYgdGhlIHN0cmluZyBpcyBlbXB0eQogICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KLSAgICAjIFRyaXZpYWwgZW1wdHkgb2JqZWN0Ci0gICAgaWYgbmV4dGNoYXIgPT0gJ30nOgotICAgICAgICByZXR1cm4gcGFpcnMsIGVuZCArIDEKKyAgICAjIE5vcm1hbGx5IHdlIGV4cGVjdCBuZXh0Y2hhciA9PSAnIicKICAgICBpZiBuZXh0Y2hhciAhPSAnIic6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSIsIHMsIGVuZCkpCisgICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKKyAgICAgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKyAgICAgICAgIyBUcml2aWFsIGVtcHR5IG9iamVjdAorICAgICAgICBpZiBuZXh0Y2hhciA9PSAnfSc6CisgICAgICAgICAgICByZXR1cm4gcGFpcnMsIGVuZCArIDEKKyAgICAgICAgZWxpZiBuZXh0Y2hhciAhPSAnIic6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBzLCBlbmQpKQogICAgIGVuZCArPSAxCi0gICAgZW5jb2RpbmcgPSBnZXRhdHRyKGNvbnRleHQsICdlbmNvZGluZycsIE5vbmUpCi0gICAgc3RyaWN0ID0gZ2V0YXR0cihjb250ZXh0LCAnc3RyaWN0JywgVHJ1ZSkKLSAgICBpdGVyc2NhbiA9IEpTT05TY2FubmVyLml0ZXJzY2FuCiAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAga2V5LCBlbmQgPSBzY2Fuc3RyaW5nKHMsIGVuZCwgZW5jb2RpbmcsIHN0cmljdCkKLSAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQorCisgICAgICAgICMgVG8gc2tpcCBzb21lIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQgd2Ugb3B0aW1pemUgdGhlIGZhc3QgcGF0aHMgd2hlcmUKKyAgICAgICAgIyB0aGUgSlNPTiBrZXkgc2VwYXJhdG9yIGlzICI6ICIgb3IganVzdCAiOiIuCiAgICAgICAgIGlmIHNbZW5kOmVuZCArIDFdICE9ICc6JzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgOiBkZWxpbWl0ZXIiLCBzLCBlbmQpKQotICAgICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5lbmQoKQorICAgICAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQorICAgICAgICAgICAgaWYgc1tlbmQ6ZW5kICsgMV0gIT0gJzonOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgOiBkZWxpbWl0ZXIiLCBzLCBlbmQpKQorCisgICAgICAgIGVuZCArPSAxCisKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUsIGVuZCA9IGl0ZXJzY2FuKHMsIGlkeD1lbmQsIGNvbnRleHQ9Y29udGV4dCkubmV4dCgpCisgICAgICAgICAgICBpZiBzW2VuZF0gaW4gX3dzOgorICAgICAgICAgICAgICAgIGVuZCArPSAxCisgICAgICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUsIGVuZCA9IHNjYW5fb25jZShzLCBlbmQpCiAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpKQotICAgICAgICBwYWlyc1trZXldID0gdmFsdWUKLSAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQotICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgICAgIHBhaXJzX2FwcGVuZCgoa2V5LCB2YWx1ZSkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KKyAgICAgICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKKyAgICAgICAgICAgICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5lbmQoKQorICAgICAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmRdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgbmV4dGNoYXIgPSAnJwogICAgICAgICBlbmQgKz0gMQorCiAgICAgICAgIGlmIG5leHRjaGFyID09ICd9JzoKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIG5leHRjaGFyICE9ICcsJzoKKyAgICAgICAgZWxpZiBuZXh0Y2hhciAhPSAnLCc6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICwgZGVsaW1pdGVyIiwgcywgZW5kIC0gMSkpCi0gICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKLSAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmRdCisgICAgICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6CisgICAgICAgICAgICAgICAgZW5kICs9IDEKKyAgICAgICAgICAgICAgICBuZXh0Y2hhciA9IHNbZW5kXQorICAgICAgICAgICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKKyAgICAgICAgICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBuZXh0Y2hhciA9ICcnCisKICAgICAgICAgZW5kICs9IDEKICAgICAgICAgaWYgbmV4dGNoYXIgIT0gJyInOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcywgZW5kIC0gMSkpCi0gICAgb2JqZWN0X2hvb2sgPSBnZXRhdHRyKGNvbnRleHQsICdvYmplY3RfaG9vaycsIE5vbmUpCisKKyAgICBpZiBvYmplY3RfcGFpcnNfaG9vayBpcyBub3QgTm9uZToKKyAgICAgICAgcmVzdWx0ID0gb2JqZWN0X3BhaXJzX2hvb2socGFpcnMpCisgICAgICAgIHJldHVybiByZXN1bHQsIGVuZAorICAgIHBhaXJzID0gZGljdChwYWlycykKICAgICBpZiBvYmplY3RfaG9vayBpcyBub3QgTm9uZToKICAgICAgICAgcGFpcnMgPSBvYmplY3RfaG9vayhwYWlycykKICAgICByZXR1cm4gcGFpcnMsIGVuZAotcGF0dGVybihyJ3snKShKU09OT2JqZWN0KQogCi0KLWRlZiBKU09OQXJyYXkobWF0Y2gsIGNvbnRleHQsIF93PVdISVRFU1BBQ0UubWF0Y2gpOgorZGVmIEpTT05BcnJheShzX2FuZF9lbmQsIHNjYW5fb25jZSwgX3c9V0hJVEVTUEFDRS5tYXRjaCwgX3dzPVdISVRFU1BBQ0VfU1RSKToKKyAgICBzLCBlbmQgPSBzX2FuZF9lbmQKICAgICB2YWx1ZXMgPSBbXQotICAgIHMgPSBtYXRjaC5zdHJpbmcKLSAgICBlbmQgPSBfdyhzLCBtYXRjaC5lbmQoKSkuZW5kKCkKLSAgICAjIExvb2stYWhlYWQgZm9yIHRyaXZpYWwgZW1wdHkgYXJyYXkKICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgaWYgbmV4dGNoYXIgaW4gX3dzOgorICAgICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5lbmQoKQorICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgIyBMb29rLWFoZWFkIGZvciB0cml2aWFsIGVtcHR5IGFycmF5CiAgICAgaWYgbmV4dGNoYXIgPT0gJ10nOgogICAgICAgICByZXR1cm4gdmFsdWVzLCBlbmQgKyAxCi0gICAgaXRlcnNjYW4gPSBKU09OU2Nhbm5lci5pdGVyc2NhbgorICAgIF9hcHBlbmQgPSB2YWx1ZXMuYXBwZW5kCiAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUsIGVuZCA9IGl0ZXJzY2FuKHMsIGlkeD1lbmQsIGNvbnRleHQ9Y29udGV4dCkubmV4dCgpCisgICAgICAgICAgICB2YWx1ZSwgZW5kID0gc2Nhbl9vbmNlKHMsIGVuZCkKICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHMsIGVuZCkpCi0gICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCi0gICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgX2FwcGVuZCh2YWx1ZSkKICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6CisgICAgICAgICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5lbmQoKQorICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQogICAgICAgICBlbmQgKz0gMQogICAgICAgICBpZiBuZXh0Y2hhciA9PSAnXSc6CiAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBuZXh0Y2hhciAhPSAnLCc6CisgICAgICAgIGVsaWYgbmV4dGNoYXIgIT0gJywnOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHMsIGVuZCkpCi0gICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzW2VuZF0gaW4gX3dzOgorICAgICAgICAgICAgICAgIGVuZCArPSAxCisgICAgICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKICAgICByZXR1cm4gdmFsdWVzLCBlbmQKLXBhdHRlcm4ocidcWycpKEpTT05BcnJheSkKLQotCi1BTllUSElORyA9IFsKLSAgICBKU09OT2JqZWN0LAotICAgIEpTT05BcnJheSwKLSAgICBKU09OU3RyaW5nLAotICAgIEpTT05Db25zdGFudCwKLSAgICBKU09OTnVtYmVyLAotXQotCi1KU09OU2Nhbm5lciA9IFNjYW5uZXIoQU5ZVEhJTkcpCi0KIAogY2xhc3MgSlNPTkRlY29kZXIob2JqZWN0KToKICAgICAiIiJTaW1wbGUgSlNPTiA8aHR0cDovL2pzb24ub3JnPiBkZWNvZGVyCkBAIC0yNjgsMTMgKzI5MiwxMiBAQAogCiAgICAgSXQgYWxzbyB1bmRlcnN0YW5kcyBgYE5hTmBgLCBgYEluZmluaXR5YGAsIGFuZCBgYC1JbmZpbml0eWBgIGFzCiAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBgYGZsb2F0YGAgdmFsdWVzLCB3aGljaCBpcyBvdXRzaWRlIHRoZSBKU09OIHNwZWMuCisKICAgICAiIiIKIAotICAgIF9zY2FubmVyID0gU2Nhbm5lcihBTllUSElORykKLSAgICBfX2FsbF9fID0gWydfX2luaXRfXycsICdkZWNvZGUnLCAncmF3X2RlY29kZSddCi0KICAgICBkZWYgX19pbml0X18oc2VsZiwgZW5jb2Rpbmc9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9uZSwKLSAgICAgICAgICAgIHBhcnNlX2ludD1Ob25lLCBwYXJzZV9jb25zdGFudD1Ob25lLCBzdHJpY3Q9VHJ1ZSk6CisgICAgICAgICAgICBwYXJzZV9pbnQ9Tm9uZSwgcGFyc2VfY29uc3RhbnQ9Tm9uZSwgc3RyaWN0PVRydWUsCisgICAgICAgICAgICBvYmplY3RfcGFpcnNfaG9vaz1Ob25lKToKICAgICAgICAgIiIiYGBlbmNvZGluZ2BgIGRldGVybWluZXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gaW50ZXJwcmV0IGFueSBgYHN0cmBgCiAgICAgICAgIG9iamVjdHMgZGVjb2RlZCBieSB0aGlzIGluc3RhbmNlICh1dGYtOCBieSBkZWZhdWx0KS4gIEl0IGhhcyBubwogICAgICAgICBlZmZlY3Qgd2hlbiBkZWNvZGluZyBgYHVuaWNvZGVgYCBvYmplY3RzLgpAQCAtMjgyLDExICszMDUsMjAgQEAKICAgICAgICAgTm90ZSB0aGF0IGN1cnJlbnRseSBvbmx5IGVuY29kaW5ncyB0aGF0IGFyZSBhIHN1cGVyc2V0IG9mIEFTQ0lJIHdvcmssCiAgICAgICAgIHN0cmluZ3Mgb2Ygb3RoZXIgZW5jb2RpbmdzIHNob3VsZCBiZSBwYXNzZWQgaW4gYXMgYGB1bmljb2RlYGAuCiAKLSAgICAgICAgYGBvYmplY3RfaG9va2BgLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZgotICAgICAgICBldmVyeSBKU09OIG9iamVjdCBkZWNvZGVkIGFuZCBpdHMgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZCBpbgorICAgICAgICBgYG9iamVjdF9ob29rYGAsIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0CisgICAgICAgIG9mIGV2ZXJ5IEpTT04gb2JqZWN0IGRlY29kZWQgYW5kIGl0cyByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkIGluCiAgICAgICAgIHBsYWNlIG9mIHRoZSBnaXZlbiBgYGRpY3RgYC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBjdXN0b20KICAgICAgICAgZGVzZXJpYWxpemF0aW9ucyAoZS5nLiB0byBzdXBwb3J0IEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgogCisgICAgICAgIGBgb2JqZWN0X3BhaXJzX2hvb2tgYCwgaWYgc3BlY2lmaWVkIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZgorICAgICAgICBldmVyeSBKU09OIG9iamVjdCBkZWNvZGVkIHdpdGggYW4gb3JkZXJlZCBsaXN0IG9mIHBhaXJzLiAgVGhlIHJldHVybgorICAgICAgICB2YWx1ZSBvZiBgYG9iamVjdF9wYWlyc19ob29rYGAgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGBgZGljdGBgLgorICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycyB0aGF0IHJlbHkgb24gdGhlCisgICAgICAgIG9yZGVyIHRoYXQgdGhlIGtleSBhbmQgdmFsdWUgcGFpcnMgYXJlIGRlY29kZWQgKGZvciBleGFtcGxlLAorICAgICAgICBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCB3aWxsIHJlbWVtYmVyIHRoZSBvcmRlciBvZiBpbnNlcnRpb24pLiBJZgorICAgICAgICBgYG9iamVjdF9ob29rYGAgaXMgYWxzbyBkZWZpbmVkLCB0aGUgYGBvYmplY3RfcGFpcnNfaG9va2BgIHRha2VzCisgICAgICAgIHByaW9yaXR5LgorCiAgICAgICAgIGBgcGFyc2VfZmxvYXRgYCwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBzdHJpbmcKICAgICAgICAgb2YgZXZlcnkgSlNPTiBmbG9hdCB0byBiZSBkZWNvZGVkLiBCeSBkZWZhdWx0IHRoaXMgaXMgZXF1aXZhbGVudCB0bwogICAgICAgICBmbG9hdChudW1fc3RyKS4gVGhpcyBjYW4gYmUgdXNlZCB0byB1c2UgYW5vdGhlciBkYXRhdHlwZSBvciBwYXJzZXIKQEAgLTI5OCwyMSArMzMwLDMwIEBACiAgICAgICAgIGZvciBKU09OIGludGVnZXJzIChlLmcuIGZsb2F0KS4KIAogICAgICAgICBgYHBhcnNlX2NvbnN0YW50YGAsIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgb2YgdGhlCi0gICAgICAgIGZvbGxvd2luZyBzdHJpbmdzOiAtSW5maW5pdHksIEluZmluaXR5LCBOYU4sIG51bGwsIHRydWUsIGZhbHNlLgorICAgICAgICBmb2xsb3dpbmcgc3RyaW5nczogLUluZmluaXR5LCBJbmZpbml0eSwgTmFOLgogICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpbnZhbGlkIEpTT04gbnVtYmVycwogICAgICAgICBhcmUgZW5jb3VudGVyZWQuCiAKKyAgICAgICAgSWYgYGBzdHJpY3RgYCBpcyBmYWxzZSAodHJ1ZSBpcyB0aGUgZGVmYXVsdCksIHRoZW4gY29udHJvbAorICAgICAgICBjaGFyYWN0ZXJzIHdpbGwgYmUgYWxsb3dlZCBpbnNpZGUgc3RyaW5ncy4gIENvbnRyb2wgY2hhcmFjdGVycyBpbgorICAgICAgICB0aGlzIGNvbnRleHQgYXJlIHRob3NlIHdpdGggY2hhcmFjdGVyIGNvZGVzIGluIHRoZSAwLTMxIHJhbmdlLAorICAgICAgICBpbmNsdWRpbmcgYGAnXFx0J2BgICh0YWIpLCBgYCdcXG4nYGAsIGBgJ1xccidgYCBhbmQgYGAnXFwwJ2BgLgorCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKICAgICAgICAgc2VsZi5vYmplY3RfaG9vayA9IG9iamVjdF9ob29rCi0gICAgICAgIHNlbGYucGFyc2VfZmxvYXQgPSBwYXJzZV9mbG9hdAotICAgICAgICBzZWxmLnBhcnNlX2ludCA9IHBhcnNlX2ludAotICAgICAgICBzZWxmLnBhcnNlX2NvbnN0YW50ID0gcGFyc2VfY29uc3RhbnQKKyAgICAgICAgc2VsZi5vYmplY3RfcGFpcnNfaG9vayA9IG9iamVjdF9wYWlyc19ob29rCisgICAgICAgIHNlbGYucGFyc2VfZmxvYXQgPSBwYXJzZV9mbG9hdCBvciBmbG9hdAorICAgICAgICBzZWxmLnBhcnNlX2ludCA9IHBhcnNlX2ludCBvciBpbnQKKyAgICAgICAgc2VsZi5wYXJzZV9jb25zdGFudCA9IHBhcnNlX2NvbnN0YW50IG9yIF9DT05TVEFOVFMuX19nZXRpdGVtX18KICAgICAgICAgc2VsZi5zdHJpY3QgPSBzdHJpY3QKKyAgICAgICAgc2VsZi5wYXJzZV9vYmplY3QgPSBKU09OT2JqZWN0CisgICAgICAgIHNlbGYucGFyc2VfYXJyYXkgPSBKU09OQXJyYXkKKyAgICAgICAgc2VsZi5wYXJzZV9zdHJpbmcgPSBzY2Fuc3RyaW5nCisgICAgICAgIHNlbGYuc2Nhbl9vbmNlID0gbWFrZV9zY2FubmVyKHNlbGYpCiAKICAgICBkZWYgZGVjb2RlKHNlbGYsIHMsIF93PVdISVRFU1BBQ0UubWF0Y2gpOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJuIHRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYAorICAgICAgICAiIiJSZXR1cm4gdGhlIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29kZWBgCiAgICAgICAgIGluc3RhbmNlIGNvbnRhaW5pbmcgYSBKU09OIGRvY3VtZW50KQogCiAgICAgICAgICIiIgpAQCAtMzIyLDE4ICszNjMsMTcgQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHRyYSBkYXRhIiwgcywgZW5kLCBsZW4ocykpKQogICAgICAgICByZXR1cm4gb2JqCiAKLSAgICBkZWYgcmF3X2RlY29kZShzZWxmLCBzLCAqKmt3KToKLSAgICAgICAgIiIiRGVjb2RlIGEgSlNPTiBkb2N1bWVudCBmcm9tIGBgc2BgIChhIGBgc3RyYGAgb3IgYGB1bmljb2RlYGAgYmVnaW5uaW5nCi0gICAgICAgIHdpdGggYSBKU09OIGRvY3VtZW50KSBhbmQgcmV0dXJuIGEgMi10dXBsZSBvZiB0aGUgUHl0aG9uCisgICAgZGVmIHJhd19kZWNvZGUoc2VsZiwgcywgaWR4PTApOgorICAgICAgICAiIiJEZWNvZGUgYSBKU09OIGRvY3VtZW50IGZyb20gYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYAorICAgICAgICBiZWdpbm5pbmcgd2l0aCBhIEpTT04gZG9jdW1lbnQpIGFuZCByZXR1cm4gYSAyLXR1cGxlIG9mIHRoZSBQeXRob24KICAgICAgICAgcmVwcmVzZW50YXRpb24gYW5kIHRoZSBpbmRleCBpbiBgYHNgYCB3aGVyZSB0aGUgZG9jdW1lbnQgZW5kZWQuCiAKICAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBkZWNvZGUgYSBKU09OIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgdGhhdCBtYXkKICAgICAgICAgaGF2ZSBleHRyYW5lb3VzIGRhdGEgYXQgdGhlIGVuZC4KIAogICAgICAgICAiIiIKLSAgICAgICAga3cuc2V0ZGVmYXVsdCgnY29udGV4dCcsIHNlbGYpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG9iaiwgZW5kID0gc2VsZi5fc2Nhbm5lci5pdGVyc2NhbihzLCAqKmt3KS5uZXh0KCkKKyAgICAgICAgICAgIG9iaiwgZW5kID0gc2VsZi5zY2FuX29uY2UocywgaWR4KQogICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vIEpTT04gb2JqZWN0IGNvdWxkIGJlIGRlY29kZWQiKQogICAgICAgICByZXR1cm4gb2JqLCBlbmQKZGlmZiAtLWdpdCBhL0xpYi9qc29uL2VuY29kZXIucHkgYi9MaWIvanNvbi9lbmNvZGVyLnB5CmluZGV4IGIxZGQ1NzAuLmQ4NjkyYzQgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL2VuY29kZXIucHkKKysrIGIvTGliL2pzb24vZW5jb2Rlci5weQpAQCAtMSwxNSArMSwxNSBAQAogIiIiSW1wbGVtZW50YXRpb24gb2YgSlNPTkVuY29kZXIKICIiIgotCiBpbXBvcnQgcmUKLWltcG9ydCBtYXRoCiAKIHRyeToKICAgICBmcm9tIF9qc29uIGltcG9ydCBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaSBhcyBjX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSA9IE5vbmUKLQotX19hbGxfXyA9IFsnSlNPTkVuY29kZXInXQordHJ5OgorICAgIGZyb20gX2pzb24gaW1wb3J0IG1ha2VfZW5jb2RlciBhcyBjX21ha2VfZW5jb2RlcgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGNfbWFrZV9lbmNvZGVyID0gTm9uZQogCiBFU0NBUEUgPSByZS5jb21waWxlKHInW1x4MDAtXHgxZlxcIlxiXGZcblxyXHRdJykKIEVTQ0FQRV9BU0NJSSA9IHJlLmNvbXBpbGUocicoW1xcIl18W15cIC1+XSknKQpAQCAtMjUsMzAgKzI1LDEyIEBACiB9CiBmb3IgaSBpbiByYW5nZSgweDIwKToKICAgICBFU0NBUEVfRENULnNldGRlZmF1bHQoY2hyKGkpLCAnXFx1ezA6MDR4fScuZm9ybWF0KGkpKQorICAgICNFU0NBUEVfRENULnNldGRlZmF1bHQoY2hyKGkpLCAnXFx1JTA0eCcgJSAoaSwpKQogCisjIEFzc3VtZSB0aGlzIHByb2R1Y2VzIGFuIGluZmluaXR5IG9uIGFsbCBtYWNoaW5lcyAocHJvYmFibHkgbm90IGd1YXJhbnRlZWQpCitJTkZJTklUWSA9IGZsb2F0KCcxZTY2NjY2JykKIEZMT0FUX1JFUFIgPSByZXByCiAKLWRlZiBmbG9hdHN0cihvLCBhbGxvd19uYW49VHJ1ZSk6Ci0gICAgIyBDaGVjayBmb3Igc3BlY2lhbHMuICBOb3RlIHRoYXQgdGhpcyB0eXBlIG9mIHRlc3QgaXMgcHJvY2Vzc29yLSBhbmQvb3IKLSAgICAjIHBsYXRmb3JtLXNwZWNpZmljLCBzbyBkbyB0ZXN0cyB3aGljaCBkb24ndCBkZXBlbmQgb24gdGhlIGludGVybmFscy4KLQotICAgIGlmIG1hdGguaXNuYW4obyk6Ci0gICAgICAgIHRleHQgPSAnTmFOJwotICAgIGVsaWYgbWF0aC5pc2luZihvKToKLSAgICAgICAgaWYgbWF0aC5jb3B5c2lnbigxLiwgbykgPT0gMS46Ci0gICAgICAgICAgICB0ZXh0ID0gJ0luZmluaXR5JwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdGV4dCA9ICctSW5maW5pdHknCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIEZMT0FUX1JFUFIobykKLQotICAgIGlmIG5vdCBhbGxvd19uYW46Ci0gICAgICAgIG1zZyA9ICJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQ6ICIgKyByZXByKG8pCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKQotCi0gICAgcmV0dXJuIHRleHQKLQotCiBkZWYgZW5jb2RlX2Jhc2VzdHJpbmcocyk6CiAgICAgIiIiUmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBzdHJpbmcKIApAQCAtNTksNiArNDEsOSBAQAogCiAKIGRlZiBweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShzKToKKyAgICAiIiJSZXR1cm4gYW4gQVNDSUktb25seSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIHN0cmluZworCisgICAgIiIiCiAgICAgaWYgaXNpbnN0YW5jZShzLCBzdHIpIGFuZCBIQVNfVVRGOC5zZWFyY2gocykgaXMgbm90IE5vbmU6CiAgICAgICAgIHMgPSBzLmRlY29kZSgndXRmLTgnKQogICAgIGRlZiByZXBsYWNlKG1hdGNoKToKQEAgLTY5LDIwICs1NCwxOSBAQAogICAgICAgICAgICAgbiA9IG9yZChzKQogICAgICAgICAgICAgaWYgbiA8IDB4MTAwMDA6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHV7MDowNHh9Jy5mb3JtYXQobikKKyAgICAgICAgICAgICAgICAjcmV0dXJuICdcXHUlMDR4JyAlIChuLCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBzdXJyb2dhdGUgcGFpcgogICAgICAgICAgICAgICAgIG4gLT0gMHgxMDAwMAogICAgICAgICAgICAgICAgIHMxID0gMHhkODAwIHwgKChuID4+IDEwKSAmIDB4M2ZmKQogICAgICAgICAgICAgICAgIHMyID0gMHhkYzAwIHwgKG4gJiAweDNmZikKICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdXswOjA0eH1cXHV7MTowNHh9Jy5mb3JtYXQoczEsIHMyKQorICAgICAgICAgICAgICAgICNyZXR1cm4gJ1xcdSUwNHhcXHUlMDR4JyAlIChzMSwgczIpCiAgICAgcmV0dXJuICciJyArIHN0cihFU0NBUEVfQVNDSUkuc3ViKHJlcGxhY2UsIHMpKSArICciJwogCiAKLWlmIGNfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgaXMgbm90IE5vbmU6Ci0gICAgZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgPSBjX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpCi1lbHNlOgotICAgIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpID0gcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkKLQorZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgPSAoCisgICAgY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSBvciBweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSkKIAogY2xhc3MgSlNPTkVuY29kZXIob2JqZWN0KToKICAgICAiIiJFeHRlbnNpYmxlIEpTT04gPGh0dHA6Ly9qc29uLm9yZz4gZW5jb2RlciBmb3IgUHl0aG9uIGRhdGEgc3RydWN0dXJlcy4KQEAgLTExMyw3ICs5Nyw2IEBACiAgICAgaW1wbGVtZW50YXRpb24gKHRvIHJhaXNlIGBgVHlwZUVycm9yYGApLgogCiAgICAgIiIiCi0gICAgX19hbGxfXyA9IFsnX19pbml0X18nLCAnZGVmYXVsdCcsICdlbmNvZGUnLCAnaXRlcmVuY29kZSddCiAgICAgaXRlbV9zZXBhcmF0b3IgPSAnLCAnCiAgICAga2V5X3NlcGFyYXRvciA9ICc6ICcKICAgICBkZWYgX19pbml0X18oc2VsZiwgc2tpcGtleXM9RmFsc2UsIGVuc3VyZV9hc2NpaT1UcnVlLApAQCAtMTIxLDI1ICsxMDQsMjUgQEAKICAgICAgICAgICAgIGluZGVudD1Ob25lLCBzZXBhcmF0b3JzPU5vbmUsIGVuY29kaW5nPSd1dGYtOCcsIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgICIiIkNvbnN0cnVjdG9yIGZvciBKU09ORW5jb2Rlciwgd2l0aCBzZW5zaWJsZSBkZWZhdWx0cy4KIAotICAgICAgICBJZiBza2lwa2V5cyBpcyBGYWxzZSwgdGhlbiBpdCBpcyBhIFR5cGVFcnJvciB0byBhdHRlbXB0CisgICAgICAgIElmIHNraXBrZXlzIGlzIGZhbHNlLCB0aGVuIGl0IGlzIGEgVHlwZUVycm9yIHRvIGF0dGVtcHQKICAgICAgICAgZW5jb2Rpbmcgb2Yga2V5cyB0aGF0IGFyZSBub3Qgc3RyLCBpbnQsIGxvbmcsIGZsb2F0IG9yIE5vbmUuICBJZgogICAgICAgICBza2lwa2V5cyBpcyBUcnVlLCBzdWNoIGl0ZW1zIGFyZSBzaW1wbHkgc2tpcHBlZC4KIAotICAgICAgICBJZiBlbnN1cmVfYXNjaWkgaXMgVHJ1ZSwgdGhlIG91dHB1dCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cgorICAgICAgICBJZiBlbnN1cmVfYXNjaWkgaXMgdHJ1ZSwgdGhlIG91dHB1dCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cgogICAgICAgICBvYmplY3RzIHdpdGggYWxsIGluY29taW5nIHVuaWNvZGUgY2hhcmFjdGVycyBlc2NhcGVkLiAgSWYKICAgICAgICAgZW5zdXJlX2FzY2lpIGlzIGZhbHNlLCB0aGUgb3V0cHV0IHdpbGwgYmUgdW5pY29kZSBvYmplY3QuCiAKLSAgICAgICAgSWYgY2hlY2tfY2lyY3VsYXIgaXMgVHJ1ZSwgdGhlbiBsaXN0cywgZGljdHMsIGFuZCBjdXN0b20gZW5jb2RlZAorICAgICAgICBJZiBjaGVja19jaXJjdWxhciBpcyB0cnVlLCB0aGVuIGxpc3RzLCBkaWN0cywgYW5kIGN1c3RvbSBlbmNvZGVkCiAgICAgICAgIG9iamVjdHMgd2lsbCBiZSBjaGVja2VkIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGR1cmluZyBlbmNvZGluZyB0bwogICAgICAgICBwcmV2ZW50IGFuIGluZmluaXRlIHJlY3Vyc2lvbiAod2hpY2ggd291bGQgY2F1c2UgYW4gT3ZlcmZsb3dFcnJvcikuCiAgICAgICAgIE90aGVyd2lzZSwgbm8gc3VjaCBjaGVjayB0YWtlcyBwbGFjZS4KIAotICAgICAgICBJZiBhbGxvd19uYW4gaXMgVHJ1ZSwgdGhlbiBOYU4sIEluZmluaXR5LCBhbmQgLUluZmluaXR5IHdpbGwgYmUKKyAgICAgICAgSWYgYWxsb3dfbmFuIGlzIHRydWUsIHRoZW4gTmFOLCBJbmZpbml0eSwgYW5kIC1JbmZpbml0eSB3aWxsIGJlCiAgICAgICAgIGVuY29kZWQgYXMgc3VjaC4gIFRoaXMgYmVoYXZpb3IgaXMgbm90IEpTT04gc3BlY2lmaWNhdGlvbiBjb21wbGlhbnQsCiAgICAgICAgIGJ1dCBpcyBjb25zaXN0ZW50IHdpdGggbW9zdCBKYXZhU2NyaXB0IGJhc2VkIGVuY29kZXJzIGFuZCBkZWNvZGVycy4KICAgICAgICAgT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGEgVmFsdWVFcnJvciB0byBlbmNvZGUgc3VjaCBmbG9hdHMuCiAKLSAgICAgICAgSWYgc29ydF9rZXlzIGlzIFRydWUsIHRoZW4gdGhlIG91dHB1dCBvZiBkaWN0aW9uYXJpZXMgd2lsbCBiZQorICAgICAgICBJZiBzb3J0X2tleXMgaXMgdHJ1ZSwgdGhlbiB0aGUgb3V0cHV0IG9mIGRpY3Rpb25hcmllcyB3aWxsIGJlCiAgICAgICAgIHNvcnRlZCBieSBrZXk7IHRoaXMgaXMgdXNlZnVsIGZvciByZWdyZXNzaW9uIHRlc3RzIHRvIGVuc3VyZQogICAgICAgICB0aGF0IEpTT04gc2VyaWFsaXphdGlvbnMgY2FuIGJlIGNvbXBhcmVkIG9uIGEgZGF5LXRvLWRheSBiYXNpcy4KIApAQCAtMTYxLDE3NSArMTQ0LDI2IEBACiAgICAgICAgIFRoZSBkZWZhdWx0IGlzIFVURi04LgogCiAgICAgICAgICIiIgorCiAgICAgICAgIHNlbGYuc2tpcGtleXMgPSBza2lwa2V5cwogICAgICAgICBzZWxmLmVuc3VyZV9hc2NpaSA9IGVuc3VyZV9hc2NpaQogICAgICAgICBzZWxmLmNoZWNrX2NpcmN1bGFyID0gY2hlY2tfY2lyY3VsYXIKICAgICAgICAgc2VsZi5hbGxvd19uYW4gPSBhbGxvd19uYW4KICAgICAgICAgc2VsZi5zb3J0X2tleXMgPSBzb3J0X2tleXMKICAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKLSAgICAgICAgc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCA9IDAKICAgICAgICAgaWYgc2VwYXJhdG9ycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuaXRlbV9zZXBhcmF0b3IsIHNlbGYua2V5X3NlcGFyYXRvciA9IHNlcGFyYXRvcnMKICAgICAgICAgaWYgZGVmYXVsdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKICAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCiAKLSAgICBkZWYgX25ld2xpbmVfaW5kZW50KHNlbGYpOgotICAgICAgICByZXR1cm4gJ1xuJyArICgnICcgKiAoc2VsZi5pbmRlbnQgKiBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsKSkKLQotICAgIGRlZiBfaXRlcmVuY29kZV9saXN0KHNlbGYsIGxzdCwgbWFya2Vycz1Ob25lKToKLSAgICAgICAgaWYgbm90IGxzdDoKLSAgICAgICAgICAgIHlpZWxkICdbXScKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgbWFya2VyaWQgPSBpZChsc3QpCi0gICAgICAgICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCi0gICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IGxzdAotICAgICAgICB5aWVsZCAnWycKLSAgICAgICAgaWYgc2VsZi5pbmRlbnQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsICs9IDEKLSAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gc2VsZi5fbmV3bGluZV9pbmRlbnQoKQotICAgICAgICAgICAgc2VwYXJhdG9yID0gc2VsZi5pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50Ci0gICAgICAgICAgICB5aWVsZCBuZXdsaW5lX2luZGVudAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSBOb25lCi0gICAgICAgICAgICBzZXBhcmF0b3IgPSBzZWxmLml0ZW1fc2VwYXJhdG9yCi0gICAgICAgIGZpcnN0ID0gVHJ1ZQotICAgICAgICBmb3IgdmFsdWUgaW4gbHN0OgotICAgICAgICAgICAgaWYgZmlyc3Q6Ci0gICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB5aWVsZCBzZXBhcmF0b3IKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBzZWxmLl9pdGVyZW5jb2RlKHZhbHVlLCBtYXJrZXJzKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuawotICAgICAgICBpZiBuZXdsaW5lX2luZGVudCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQotICAgICAgICAgICAgeWllbGQgc2VsZi5fbmV3bGluZV9pbmRlbnQoKQotICAgICAgICB5aWVsZCAnXScKLSAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQotCi0gICAgZGVmIF9pdGVyZW5jb2RlX2RpY3Qoc2VsZiwgZGN0LCBtYXJrZXJzPU5vbmUpOgotICAgICAgICBpZiBub3QgZGN0OgotICAgICAgICAgICAgeWllbGQgJ3t9JwotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBtYXJrZXJpZCA9IGlkKGRjdCkKLSAgICAgICAgICAgIGlmIG1hcmtlcmlkIGluIG1hcmtlcnM6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIikKLSAgICAgICAgICAgIG1hcmtlcnNbbWFya2VyaWRdID0gZGN0Ci0gICAgICAgIHlpZWxkICd7JwotICAgICAgICBrZXlfc2VwYXJhdG9yID0gc2VsZi5rZXlfc2VwYXJhdG9yCi0gICAgICAgIGlmIHNlbGYuaW5kZW50IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCArPSAxCi0gICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9IHNlbGYuX25ld2xpbmVfaW5kZW50KCkKLSAgICAgICAgICAgIGl0ZW1fc2VwYXJhdG9yID0gc2VsZi5pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50Ci0gICAgICAgICAgICB5aWVsZCBuZXdsaW5lX2luZGVudAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSBOb25lCi0gICAgICAgICAgICBpdGVtX3NlcGFyYXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IKLSAgICAgICAgZmlyc3QgPSBUcnVlCi0gICAgICAgIGlmIHNlbGYuZW5zdXJlX2FzY2lpOgotICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBlbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmcKLSAgICAgICAgYWxsb3dfbmFuID0gc2VsZi5hbGxvd19uYW4KLSAgICAgICAgaWYgc2VsZi5zb3J0X2tleXM6Ci0gICAgICAgICAgICBrZXlzID0gZGN0LmtleXMoKQotICAgICAgICAgICAga2V5cy5zb3J0KCkKLSAgICAgICAgICAgIGl0ZW1zID0gWyhrLCBkY3Rba10pIGZvciBrIGluIGtleXNdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpdGVtcyA9IGRjdC5pdGVyaXRlbXMoKQotICAgICAgICBfZW5jb2RpbmcgPSBzZWxmLmVuY29kaW5nCi0gICAgICAgIF9kb19kZWNvZGUgPSAoX2VuY29kaW5nIGlzIG5vdCBOb25lCi0gICAgICAgICAgICBhbmQgbm90IChfZW5jb2RpbmcgPT0gJ3V0Zi04JykpCi0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6Ci0gICAgICAgICAgICAgICAgaWYgX2RvX2RlY29kZToKLSAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LmRlY29kZShfZW5jb2RpbmcpCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAjIEphdmFTY3JpcHQgaXMgd2Vha2x5IHR5cGVkIGZvciB0aGVzZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8KLSAgICAgICAgICAgICMgYWxzbyBhbGxvdyB0aGVtLiAgTWFueSBlbmNvZGVycyBzZWVtIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMuCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAga2V5ID0gZmxvYXRzdHIoa2V5LCBhbGxvd19uYW4pCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCAoaW50LCBsb25nKSk6Ci0gICAgICAgICAgICAgICAga2V5ID0gc3RyKGtleSkKLSAgICAgICAgICAgIGVsaWYga2V5IGlzIFRydWU6Ci0gICAgICAgICAgICAgICAga2V5ID0gJ3RydWUnCi0gICAgICAgICAgICBlbGlmIGtleSBpcyBGYWxzZToKLSAgICAgICAgICAgICAgICBrZXkgPSAnZmFsc2UnCi0gICAgICAgICAgICBlbGlmIGtleSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGtleSA9ICdudWxsJwotICAgICAgICAgICAgZWxpZiBzZWxmLnNraXBrZXlzOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5IHswIXJ9IGlzIG5vdCBhIHN0cmluZyIuZm9ybWF0KGtleSkpCi0gICAgICAgICAgICBpZiBmaXJzdDoKLSAgICAgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHlpZWxkIGl0ZW1fc2VwYXJhdG9yCi0gICAgICAgICAgICB5aWVsZCBlbmNvZGVyKGtleSkKLSAgICAgICAgICAgIHlpZWxkIGtleV9zZXBhcmF0b3IKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBzZWxmLl9pdGVyZW5jb2RlKHZhbHVlLCBtYXJrZXJzKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuawotICAgICAgICBpZiBuZXdsaW5lX2luZGVudCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQotICAgICAgICAgICAgeWllbGQgc2VsZi5fbmV3bGluZV9pbmRlbnQoKQotICAgICAgICB5aWVsZCAnfScKLSAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQotCi0gICAgZGVmIF9pdGVyZW5jb2RlKHNlbGYsIG8sIG1hcmtlcnM9Tm9uZSk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UobywgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKLSAgICAgICAgICAgICAgICBlbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nCi0gICAgICAgICAgICBfZW5jb2RpbmcgPSBzZWxmLmVuY29kaW5nCi0gICAgICAgICAgICBpZiAoX2VuY29kaW5nIGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKG8sIHN0cikKLSAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCAoX2VuY29kaW5nID09ICd1dGYtOCcpKToKLSAgICAgICAgICAgICAgICBvID0gby5kZWNvZGUoX2VuY29kaW5nKQotICAgICAgICAgICAgeWllbGQgZW5jb2RlcihvKQotICAgICAgICBlbGlmIG8gaXMgTm9uZToKLSAgICAgICAgICAgIHlpZWxkICdudWxsJwotICAgICAgICBlbGlmIG8gaXMgVHJ1ZToKLSAgICAgICAgICAgIHlpZWxkICd0cnVlJwotICAgICAgICBlbGlmIG8gaXMgRmFsc2U6Ci0gICAgICAgICAgICB5aWVsZCAnZmFsc2UnCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCAoaW50LCBsb25nKSk6Ci0gICAgICAgICAgICB5aWVsZCBzdHIobykKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGZsb2F0KToKLSAgICAgICAgICAgIHlpZWxkIGZsb2F0c3RyKG8sIHNlbGYuYWxsb3dfbmFuKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGxpc3QsIHR1cGxlKSk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZV9saXN0KG8sIG1hcmtlcnMpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBkaWN0KToKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBzZWxmLl9pdGVyZW5jb2RlX2RpY3QobywgbWFya2Vycyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgbWFya2VyaWQgPSBpZChvKQotICAgICAgICAgICAgICAgIGlmIG1hcmtlcmlkIGluIG1hcmtlcnM6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCi0gICAgICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBvCi0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZV9kZWZhdWx0KG8sIG1hcmtlcnMpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCi0gICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQotCi0gICAgZGVmIF9pdGVyZW5jb2RlX2RlZmF1bHQoc2VsZiwgbywgbWFya2Vycz1Ob25lKToKLSAgICAgICAgbmV3b2JqID0gc2VsZi5kZWZhdWx0KG8pCi0gICAgICAgIHJldHVybiBzZWxmLl9pdGVyZW5jb2RlKG5ld29iaiwgbWFya2VycykKLQogICAgIGRlZiBkZWZhdWx0KHNlbGYsIG8pOgotICAgICAgICAiIiJJbXBsZW1lbnQgdGhpcyBtZXRob2QgaW4gYSBzdWJjbGFzcyBzdWNoIHRoYXQgaXQgcmV0dXJucyBhIHNlcmlhbGl6YWJsZQotICAgICAgICBvYmplY3QgZm9yIGBgb2BgLCBvciBjYWxscyB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiAodG8gcmFpc2UgYQotICAgICAgICBgYFR5cGVFcnJvcmBgKS4KKyAgICAgICAgIiIiSW1wbGVtZW50IHRoaXMgbWV0aG9kIGluIGEgc3ViY2xhc3Mgc3VjaCB0aGF0IGl0IHJldHVybnMKKyAgICAgICAgYSBzZXJpYWxpemFibGUgb2JqZWN0IGZvciBgYG9gYCwgb3IgY2FsbHMgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24KKyAgICAgICAgKHRvIHJhaXNlIGEgYGBUeXBlRXJyb3JgYCkuCiAKLSAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHN1cHBvcnQgYXJiaXRyYXJ5IGl0ZXJhdG9ycywgeW91IGNvdWxkIGltcGxlbWVudAotICAgICAgICBkZWZhdWx0IGxpa2UgdGhpczo6CisgICAgICAgIEZvciBleGFtcGxlLCB0byBzdXBwb3J0IGFyYml0cmFyeSBpdGVyYXRvcnMsIHlvdSBjb3VsZAorICAgICAgICBpbXBsZW1lbnQgZGVmYXVsdCBsaWtlIHRoaXM6OgogCiAgICAgICAgICAgICBkZWYgZGVmYXVsdChzZWxmLCBvKToKICAgICAgICAgICAgICAgICB0cnk6CkBAIC0zNjQsMTIgKzE5OCwxNCBAQAogICAgICAgICAjIFRoaXMgZG9lc24ndCBwYXNzIHRoZSBpdGVyYXRvciBkaXJlY3RseSB0byAnJy5qb2luKCkgYmVjYXVzZSB0aGUKICAgICAgICAgIyBleGNlcHRpb25zIGFyZW4ndCBhcyBkZXRhaWxlZC4gIFRoZSBsaXN0IGNhbGwgc2hvdWxkIGJlIHJvdWdobHkKICAgICAgICAgIyBlcXVpdmFsZW50IHRvIHRoZSBQeVNlcXVlbmNlX0Zhc3QgdGhhdCAnJy5qb2luKCkgd291bGQgZG8uCi0gICAgICAgIGNodW5rcyA9IGxpc3Qoc2VsZi5pdGVyZW5jb2RlKG8pKQorICAgICAgICBjaHVua3MgPSBzZWxmLml0ZXJlbmNvZGUobywgX29uZV9zaG90PVRydWUpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNodW5rcywgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBjaHVua3MgPSBsaXN0KGNodW5rcykKICAgICAgICAgcmV0dXJuICcnLmpvaW4oY2h1bmtzKQogCi0gICAgZGVmIGl0ZXJlbmNvZGUoc2VsZiwgbyk6Ci0gICAgICAgICIiIkVuY29kZSB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCB5aWVsZCBlYWNoIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcwotICAgICAgICBhdmFpbGFibGUuCisgICAgZGVmIGl0ZXJlbmNvZGUoc2VsZiwgbywgX29uZV9zaG90PUZhbHNlKToKKyAgICAgICAgIiIiRW5jb2RlIHRoZSBnaXZlbiBvYmplY3QgYW5kIHlpZWxkIGVhY2ggc3RyaW5nCisgICAgICAgIHJlcHJlc2VudGF0aW9uIGFzIGF2YWlsYWJsZS4KIAogICAgICAgICBGb3IgZXhhbXBsZTo6CiAKQEAgLTM4MSw0ICsyMTcsMjI2IEBACiAgICAgICAgICAgICBtYXJrZXJzID0ge30KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1hcmtlcnMgPSBOb25lCi0gICAgICAgIHJldHVybiBzZWxmLl9pdGVyZW5jb2RlKG8sIG1hcmtlcnMpCisgICAgICAgIGlmIHNlbGYuZW5zdXJlX2FzY2lpOgorICAgICAgICAgICAgX2VuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2VuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZworICAgICAgICBpZiBzZWxmLmVuY29kaW5nICE9ICd1dGYtOCc6CisgICAgICAgICAgICBkZWYgX2VuY29kZXIobywgX29yaWdfZW5jb2Rlcj1fZW5jb2RlciwgX2VuY29kaW5nPXNlbGYuZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobywgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgbyA9IG8uZGVjb2RlKF9lbmNvZGluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gX29yaWdfZW5jb2RlcihvKQorCisgICAgICAgIGRlZiBmbG9hdHN0cihvLCBhbGxvd19uYW49c2VsZi5hbGxvd19uYW4sCisgICAgICAgICAgICAgICAgX3JlcHI9RkxPQVRfUkVQUiwgX2luZj1JTkZJTklUWSwgX25lZ2luZj0tSU5GSU5JVFkpOgorICAgICAgICAgICAgIyBDaGVjayBmb3Igc3BlY2lhbHMuICBOb3RlIHRoYXQgdGhpcyB0eXBlIG9mIHRlc3QgaXMgcHJvY2Vzc29yCisgICAgICAgICAgICAjIGFuZC9vciBwbGF0Zm9ybS1zcGVjaWZpYywgc28gZG8gdGVzdHMgd2hpY2ggZG9uJ3QgZGVwZW5kIG9uIHRoZQorICAgICAgICAgICAgIyBpbnRlcm5hbHMuCisKKyAgICAgICAgICAgIGlmIG8gIT0gbzoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gJ05hTicKKyAgICAgICAgICAgIGVsaWYgbyA9PSBfaW5mOgorICAgICAgICAgICAgICAgIHRleHQgPSAnSW5maW5pdHknCisgICAgICAgICAgICBlbGlmIG8gPT0gX25lZ2luZjoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gJy1JbmZpbml0eScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXByKG8pCisKKyAgICAgICAgICAgIGlmIG5vdCBhbGxvd19uYW46CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIk91dCBvZiByYW5nZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudDogIiArCisgICAgICAgICAgICAgICAgICAgIHJlcHIobykpCisKKyAgICAgICAgICAgIHJldHVybiB0ZXh0CisKKworICAgICAgICBpZiAoX29uZV9zaG90IGFuZCBjX21ha2VfZW5jb2RlciBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBub3Qgc2VsZi5pbmRlbnQgYW5kIG5vdCBzZWxmLnNvcnRfa2V5cyk6CisgICAgICAgICAgICBfaXRlcmVuY29kZSA9IGNfbWFrZV9lbmNvZGVyKAorICAgICAgICAgICAgICAgIG1hcmtlcnMsIHNlbGYuZGVmYXVsdCwgX2VuY29kZXIsIHNlbGYuaW5kZW50LAorICAgICAgICAgICAgICAgIHNlbGYua2V5X3NlcGFyYXRvciwgc2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5zb3J0X2tleXMsCisgICAgICAgICAgICAgICAgc2VsZi5za2lwa2V5cywgc2VsZi5hbGxvd19uYW4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfaXRlcmVuY29kZSA9IF9tYWtlX2l0ZXJlbmNvZGUoCisgICAgICAgICAgICAgICAgbWFya2Vycywgc2VsZi5kZWZhdWx0LCBfZW5jb2Rlciwgc2VsZi5pbmRlbnQsIGZsb2F0c3RyLAorICAgICAgICAgICAgICAgIHNlbGYua2V5X3NlcGFyYXRvciwgc2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5zb3J0X2tleXMsCisgICAgICAgICAgICAgICAgc2VsZi5za2lwa2V5cywgX29uZV9zaG90KQorICAgICAgICByZXR1cm4gX2l0ZXJlbmNvZGUobywgMCkKKworZGVmIF9tYWtlX2l0ZXJlbmNvZGUobWFya2VycywgX2RlZmF1bHQsIF9lbmNvZGVyLCBfaW5kZW50LCBfZmxvYXRzdHIsCisgICAgICAgIF9rZXlfc2VwYXJhdG9yLCBfaXRlbV9zZXBhcmF0b3IsIF9zb3J0X2tleXMsIF9za2lwa2V5cywgX29uZV9zaG90LAorICAgICAgICAjIyBIQUNLOiBoYW5kLW9wdGltaXplZCBieXRlY29kZTsgdHVybiBnbG9iYWxzIGludG8gbG9jYWxzCisgICAgICAgIFZhbHVlRXJyb3I9VmFsdWVFcnJvciwKKyAgICAgICAgYmFzZXN0cmluZz1iYXNlc3RyaW5nLAorICAgICAgICBkaWN0PWRpY3QsCisgICAgICAgIGZsb2F0PWZsb2F0LAorICAgICAgICBpZD1pZCwKKyAgICAgICAgaW50PWludCwKKyAgICAgICAgaXNpbnN0YW5jZT1pc2luc3RhbmNlLAorICAgICAgICBsaXN0PWxpc3QsCisgICAgICAgIGxvbmc9bG9uZywKKyAgICAgICAgc3RyPXN0ciwKKyAgICAgICAgdHVwbGU9dHVwbGUsCisgICAgKToKKworICAgIGRlZiBfaXRlcmVuY29kZV9saXN0KGxzdCwgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKKyAgICAgICAgaWYgbm90IGxzdDoKKyAgICAgICAgICAgIHlpZWxkICdbXScKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbWFya2VyaWQgPSBpZChsc3QpCisgICAgICAgICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCisgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IGxzdAorICAgICAgICBidWYgPSAnWycKKyAgICAgICAgaWYgX2luZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCArPSAxCisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9ICdcbicgKyAoJyAnICogKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpKQorICAgICAgICAgICAgc2VwYXJhdG9yID0gX2l0ZW1fc2VwYXJhdG9yICsgbmV3bGluZV9pbmRlbnQKKyAgICAgICAgICAgIGJ1ZiArPSBuZXdsaW5lX2luZGVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSBOb25lCisgICAgICAgICAgICBzZXBhcmF0b3IgPSBfaXRlbV9zZXBhcmF0b3IKKyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIGZvciB2YWx1ZSBpbiBsc3Q6CisgICAgICAgICAgICBpZiBmaXJzdDoKKyAgICAgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJ1ZiA9IHNlcGFyYXRvcgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgeWllbGQgYnVmICsgX2VuY29kZXIodmFsdWUpCisgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgeWllbGQgYnVmICsgJ251bGwnCisgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIFRydWU6CisgICAgICAgICAgICAgICAgeWllbGQgYnVmICsgJ3RydWUnCisgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArICdmYWxzZScKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGludCwgbG9uZykpOgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIHN0cih2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIF9mbG9hdHN0cih2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgYnVmCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2xpc3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKKyAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9kaWN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGUodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKKyAgICAgICAgICAgICAgICBmb3IgY2h1bmsgaW4gY2h1bmtzOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICBpZiBuZXdsaW5lX2luZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCAtPSAxCisgICAgICAgICAgICB5aWVsZCAnXG4nICsgKCcgJyAqIChfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsKSkKKyAgICAgICAgeWllbGQgJ10nCisgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KKworICAgIGRlZiBfaXRlcmVuY29kZV9kaWN0KGRjdCwgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKKyAgICAgICAgaWYgbm90IGRjdDoKKyAgICAgICAgICAgIHlpZWxkICd7fScKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbWFya2VyaWQgPSBpZChkY3QpCisgICAgICAgICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCisgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IGRjdAorICAgICAgICB5aWVsZCAneycKKyAgICAgICAgaWYgX2luZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCArPSAxCisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9ICdcbicgKyAoJyAnICogKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpKQorICAgICAgICAgICAgaXRlbV9zZXBhcmF0b3IgPSBfaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAorICAgICAgICAgICAgeWllbGQgbmV3bGluZV9pbmRlbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9uZQorICAgICAgICAgICAgaXRlbV9zZXBhcmF0b3IgPSBfaXRlbV9zZXBhcmF0b3IKKyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIGlmIF9zb3J0X2tleXM6CisgICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChkY3QuaXRlbXMoKSwga2V5PWxhbWJkYSBrdjoga3ZbMF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpdGVtcyA9IGRjdC5pdGVyaXRlbXMoKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjIEphdmFTY3JpcHQgaXMgd2Vha2x5IHR5cGVkIGZvciB0aGVzZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8KKyAgICAgICAgICAgICMgYWxzbyBhbGxvdyB0aGVtLiAgTWFueSBlbmNvZGVycyBzZWVtIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMuCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBmbG9hdCk6CisgICAgICAgICAgICAgICAga2V5ID0gX2Zsb2F0c3RyKGtleSkKKyAgICAgICAgICAgIGVsaWYga2V5IGlzIFRydWU6CisgICAgICAgICAgICAgICAga2V5ID0gJ3RydWUnCisgICAgICAgICAgICBlbGlmIGtleSBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICBrZXkgPSAnZmFsc2UnCisgICAgICAgICAgICBlbGlmIGtleSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGtleSA9ICdudWxsJworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgKGludCwgbG9uZykpOgorICAgICAgICAgICAgICAgIGtleSA9IHN0cihrZXkpCisgICAgICAgICAgICBlbGlmIF9za2lwa2V5czoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleSAiICsgcmVwcihrZXkpICsgIiBpcyBub3QgYSBzdHJpbmciKQorICAgICAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBpdGVtX3NlcGFyYXRvcgorICAgICAgICAgICAgeWllbGQgX2VuY29kZXIoa2V5KQorICAgICAgICAgICAgeWllbGQgX2tleV9zZXBhcmF0b3IKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIHlpZWxkIF9lbmNvZGVyKHZhbHVlKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHlpZWxkICdudWxsJworICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBUcnVlOgorICAgICAgICAgICAgICAgIHlpZWxkICd0cnVlJworICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgICAgICB5aWVsZCBzdHIodmFsdWUpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIodmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9saXN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfZGljdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlKHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCisgICAgICAgICAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQorICAgICAgICAgICAgeWllbGQgJ1xuJyArICgnICcgKiAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkpCisgICAgICAgIHlpZWxkICd9JworICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGVsIG1hcmtlcnNbbWFya2VyaWRdCisKKyAgICBkZWYgX2l0ZXJlbmNvZGUobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHlpZWxkIF9lbmNvZGVyKG8pCisgICAgICAgIGVsaWYgbyBpcyBOb25lOgorICAgICAgICAgICAgeWllbGQgJ251bGwnCisgICAgICAgIGVsaWYgbyBpcyBUcnVlOgorICAgICAgICAgICAgeWllbGQgJ3RydWUnCisgICAgICAgIGVsaWYgbyBpcyBGYWxzZToKKyAgICAgICAgICAgIHlpZWxkICdmYWxzZScKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgIHlpZWxkIHN0cihvKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZmxvYXQpOgorICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKG8pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZV9saXN0KG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6CisgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGRpY3QpOgorICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlX2RpY3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKKyAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBtYXJrZXJpZCA9IGlkKG8pCisgICAgICAgICAgICAgICAgaWYgbWFya2VyaWQgaW4gbWFya2VyczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIikKKyAgICAgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IG8KKyAgICAgICAgICAgIG8gPSBfZGVmYXVsdChvKQorICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlKG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6CisgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZGVsIG1hcmtlcnNbbWFya2VyaWRdCisKKyAgICByZXR1cm4gX2l0ZXJlbmNvZGUKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3NjYW5uZXIucHkgYi9MaWIvanNvbi9zY2FubmVyLnB5CmluZGV4IDRiMDY1YWIuLjc0ZTY4MDUgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3NjYW5uZXIucHkKKysrIGIvTGliL2pzb24vc2Nhbm5lci5weQpAQCAtMSw2OSArMSw2NyBAQAotIiIiSXRlcmF0b3IgYmFzZWQgc3JlIHRva2VuIHNjYW5uZXIKLQorIiIiSlNPTiB0b2tlbiBzY2FubmVyCiAiIiIKLQogaW1wb3J0IHJlCi1pbXBvcnQgc3JlX3BhcnNlCi1pbXBvcnQgc3JlX2NvbXBpbGUKLWltcG9ydCBzcmVfY29uc3RhbnRzCit0cnk6CisgICAgZnJvbSBfanNvbiBpbXBvcnQgbWFrZV9zY2FubmVyIGFzIGNfbWFrZV9zY2FubmVyCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgY19tYWtlX3NjYW5uZXIgPSBOb25lCiAKLWZyb20gcmUgaW1wb3J0IFZFUkJPU0UsIE1VTFRJTElORSwgRE9UQUxMCi1mcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0IEJSQU5DSCwgU1VCUEFUVEVSTgorX19hbGxfXyA9IFsnbWFrZV9zY2FubmVyJ10KIAotX19hbGxfXyA9IFsnU2Nhbm5lcicsICdwYXR0ZXJuJ10KK05VTUJFUl9SRSA9IHJlLmNvbXBpbGUoCisgICAgcicoLT8oPzowfFsxLTldXGQqKSkoXC5cZCspPyhbZUVdWy0rXT9cZCspPycsCisgICAgKHJlLlZFUkJPU0UgfCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpKQogCi1GTEFHUyA9IChWRVJCT1NFIHwgTVVMVElMSU5FIHwgRE9UQUxMKQorZGVmIHB5X21ha2Vfc2Nhbm5lcihjb250ZXh0KToKKyAgICBwYXJzZV9vYmplY3QgPSBjb250ZXh0LnBhcnNlX29iamVjdAorICAgIHBhcnNlX2FycmF5ID0gY29udGV4dC5wYXJzZV9hcnJheQorICAgIHBhcnNlX3N0cmluZyA9IGNvbnRleHQucGFyc2Vfc3RyaW5nCisgICAgbWF0Y2hfbnVtYmVyID0gTlVNQkVSX1JFLm1hdGNoCisgICAgZW5jb2RpbmcgPSBjb250ZXh0LmVuY29kaW5nCisgICAgc3RyaWN0ID0gY29udGV4dC5zdHJpY3QKKyAgICBwYXJzZV9mbG9hdCA9IGNvbnRleHQucGFyc2VfZmxvYXQKKyAgICBwYXJzZV9pbnQgPSBjb250ZXh0LnBhcnNlX2ludAorICAgIHBhcnNlX2NvbnN0YW50ID0gY29udGV4dC5wYXJzZV9jb25zdGFudAorICAgIG9iamVjdF9ob29rID0gY29udGV4dC5vYmplY3RfaG9vaworICAgIG9iamVjdF9wYWlyc19ob29rID0gY29udGV4dC5vYmplY3RfcGFpcnNfaG9vawogCi1jbGFzcyBTY2FubmVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGxleGljb24sIGZsYWdzPUZMQUdTKToKLSAgICAgICAgc2VsZi5hY3Rpb25zID0gW05vbmVdCi0gICAgICAgICMgQ29tYmluZSBwaHJhc2VzIGludG8gYSBjb21wb3VuZCBwYXR0ZXJuCi0gICAgICAgIHMgPSBzcmVfcGFyc2UuUGF0dGVybigpCi0gICAgICAgIHMuZmxhZ3MgPSBmbGFncwotICAgICAgICBwID0gW10KLSAgICAgICAgZm9yIGlkeCwgdG9rZW4gaW4gZW51bWVyYXRlKGxleGljb24pOgotICAgICAgICAgICAgcGhyYXNlID0gdG9rZW4ucGF0dGVybgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN1YnBhdHRlcm4gPSBzcmVfcGFyc2UuU3ViUGF0dGVybihzLAotICAgICAgICAgICAgICAgICAgICBbKFNVQlBBVFRFUk4sIChpZHggKyAxLCBzcmVfcGFyc2UucGFyc2UocGhyYXNlLCBmbGFncykpKV0pCi0gICAgICAgICAgICBleGNlcHQgc3JlX2NvbnN0YW50cy5lcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgcC5hcHBlbmQoc3VicGF0dGVybikKLSAgICAgICAgICAgIHNlbGYuYWN0aW9ucy5hcHBlbmQodG9rZW4pCisgICAgZGVmIF9zY2FuX29uY2Uoc3RyaW5nLCBpZHgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0Y2hhciA9IHN0cmluZ1tpZHhdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogCi0gICAgICAgIHMuZ3JvdXBzID0gbGVuKHApICsgMSAjIE5PVEUoZ3VpZG8pOiBBZGRlZCB0byBtYWtlIFNSRSB2YWxpZGF0aW9uIHdvcmsKLSAgICAgICAgcCA9IHNyZV9wYXJzZS5TdWJQYXR0ZXJuKHMsIFsoQlJBTkNILCAoTm9uZSwgcCkpXSkKLSAgICAgICAgc2VsZi5zY2FubmVyID0gc3JlX2NvbXBpbGUuY29tcGlsZShwKQorICAgICAgICBpZiBuZXh0Y2hhciA9PSAnIic6CisgICAgICAgICAgICByZXR1cm4gcGFyc2Vfc3RyaW5nKHN0cmluZywgaWR4ICsgMSwgZW5jb2RpbmcsIHN0cmljdCkKKyAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAneyc6CisgICAgICAgICAgICByZXR1cm4gcGFyc2Vfb2JqZWN0KChzdHJpbmcsIGlkeCArIDEpLCBlbmNvZGluZywgc3RyaWN0LAorICAgICAgICAgICAgICAgIF9zY2FuX29uY2UsIG9iamVjdF9ob29rLCBvYmplY3RfcGFpcnNfaG9vaykKKyAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnWyc6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VfYXJyYXkoKHN0cmluZywgaWR4ICsgMSksIF9zY2FuX29uY2UpCisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ24nIGFuZCBzdHJpbmdbaWR4OmlkeCArIDRdID09ICdudWxsJzoKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBpZHggKyA0CisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ3QnIGFuZCBzdHJpbmdbaWR4OmlkeCArIDRdID09ICd0cnVlJzoKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBpZHggKyA0CisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ2YnIGFuZCBzdHJpbmdbaWR4OmlkeCArIDVdID09ICdmYWxzZSc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIGlkeCArIDUKIAotICAgIGRlZiBpdGVyc2NhbihzZWxmLCBzdHJpbmcsIGlkeD0wLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJZaWVsZCBtYXRjaCwgZW5kX2lkeCBmb3IgZWFjaCBtYXRjaAorICAgICAgICBtID0gbWF0Y2hfbnVtYmVyKHN0cmluZywgaWR4KQorICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW50ZWdlciwgZnJhYywgZXhwID0gbS5ncm91cHMoKQorICAgICAgICAgICAgaWYgZnJhYyBvciBleHA6CisgICAgICAgICAgICAgICAgcmVzID0gcGFyc2VfZmxvYXQoaW50ZWdlciArIChmcmFjIG9yICcnKSArIChleHAgb3IgJycpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgPSBwYXJzZV9pbnQoaW50ZWdlcikKKyAgICAgICAgICAgIHJldHVybiByZXMsIG0uZW5kKCkKKyAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnTicgYW5kIHN0cmluZ1tpZHg6aWR4ICsgM10gPT0gJ05hTic6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJ05hTicpLCBpZHggKyAzCisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ0knIGFuZCBzdHJpbmdbaWR4OmlkeCArIDhdID09ICdJbmZpbml0eSc6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJ0luZmluaXR5JyksIGlkeCArIDgKKyAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnLScgYW5kIHN0cmluZ1tpZHg6aWR4ICsgOV0gPT0gJy1JbmZpbml0eSc6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJy1JbmZpbml0eScpLCBpZHggKyA5CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAKLSAgICAgICAgIiIiCi0gICAgICAgIG1hdGNoID0gc2VsZi5zY2FubmVyLnNjYW5uZXIoc3RyaW5nLCBpZHgpLm1hdGNoCi0gICAgICAgIGFjdGlvbnMgPSBzZWxmLmFjdGlvbnMKLSAgICAgICAgbGFzdGVuZCA9IGlkeAotICAgICAgICBlbmQgPSBsZW4oc3RyaW5nKQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgbSA9IG1hdGNoKCkKLSAgICAgICAgICAgIGlmIG0gaXMgTm9uZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgbWF0Y2hiZWdpbiwgbWF0Y2hlbmQgPSBtLnNwYW4oKQotICAgICAgICAgICAgaWYgbGFzdGVuZCA9PSBtYXRjaGVuZDoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgYWN0aW9uID0gYWN0aW9uc1ttLmxhc3RpbmRleF0KLSAgICAgICAgICAgIGlmIGFjdGlvbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBydmFsLCBuZXh0X3BvcyA9IGFjdGlvbihtLCBjb250ZXh0KQotICAgICAgICAgICAgICAgIGlmIG5leHRfcG9zIGlzIG5vdCBOb25lIGFuZCBuZXh0X3BvcyAhPSBtYXRjaGVuZDoKLSAgICAgICAgICAgICAgICAgICAgIyAiZmFzdCBmb3J3YXJkIiB0aGUgc2Nhbm5lcgotICAgICAgICAgICAgICAgICAgICBtYXRjaGVuZCA9IG5leHRfcG9zCi0gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5zY2FubmVyLnNjYW5uZXIoc3RyaW5nLCBtYXRjaGVuZCkubWF0Y2gKLSAgICAgICAgICAgICAgICB5aWVsZCBydmFsLCBtYXRjaGVuZAotICAgICAgICAgICAgbGFzdGVuZCA9IG1hdGNoZW5kCisgICAgcmV0dXJuIF9zY2FuX29uY2UKIAotCi1kZWYgcGF0dGVybihwYXR0ZXJuLCBmbGFncz1GTEFHUyk6Ci0gICAgZGVmIGRlY29yYXRvcihmbik6Ci0gICAgICAgIGZuLnBhdHRlcm4gPSBwYXR0ZXJuCi0gICAgICAgIGZuLnJlZ2V4ID0gcmUuY29tcGlsZShwYXR0ZXJuLCBmbGFncykKLSAgICAgICAgcmV0dXJuIGZuCi0gICAgcmV0dXJuIGRlY29yYXRvcgorbWFrZV9zY2FubmVyID0gY19tYWtlX3NjYW5uZXIgb3IgcHlfbWFrZV9zY2FubmVyCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X2NoZWNrX2NpcmN1bGFyLnB5IGIvTGliL2pzb24vdGVzdHMvdGVzdF9jaGVja19jaXJjdWxhci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzNmOTZhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2pzb24vdGVzdHMvdGVzdF9jaGVja19jaXJjdWxhci5weQpAQCAtMCwwICsxLDMwIEBACitmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQoraW1wb3J0IGpzb24KKworZGVmIGRlZmF1bHRfaXRlcmFibGUob2JqKToKKyAgICByZXR1cm4gbGlzdChvYmopCisKK2NsYXNzIFRlc3RDaGVja0NpcmN1bGFyKFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jaXJjdWxhcl9kaWN0KHNlbGYpOgorICAgICAgICBkY3QgPSB7fQorICAgICAgICBkY3RbJ2EnXSA9IGRjdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBqc29uLmR1bXBzLCBkY3QpCisKKyAgICBkZWYgdGVzdF9jaXJjdWxhcl9saXN0KHNlbGYpOgorICAgICAgICBsc3QgPSBbXQorICAgICAgICBsc3QuYXBwZW5kKGxzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwganNvbi5kdW1wcywgbHN0KQorCisgICAgZGVmIHRlc3RfY2lyY3VsYXJfY29tcG9zaXRlKHNlbGYpOgorICAgICAgICBkY3QyID0ge30KKyAgICAgICAgZGN0MlsnYSddID0gW10KKyAgICAgICAgZGN0MlsnYSddLmFwcGVuZChkY3QyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBqc29uLmR1bXBzLCBkY3QyKQorCisgICAgZGVmIHRlc3RfY2lyY3VsYXJfZGVmYXVsdChzZWxmKToKKyAgICAgICAganNvbi5kdW1wcyhbc2V0KCldLCBkZWZhdWx0PWRlZmF1bHRfaXRlcmFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwganNvbi5kdW1wcywgW3NldCgpXSkKKworICAgIGRlZiB0ZXN0X2NpcmN1bGFyX29mZl9kZWZhdWx0KHNlbGYpOgorICAgICAgICBqc29uLmR1bXBzKFtzZXQoKV0sIGRlZmF1bHQ9ZGVmYXVsdF9pdGVyYWJsZSwgY2hlY2tfY2lyY3VsYXI9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwganNvbi5kdW1wcywgW3NldCgpXSwgY2hlY2tfY2lyY3VsYXI9RmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X2RlY29kZS5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZGVjb2RlLnB5CmluZGV4IDYwOWY2MjIuLjZhZmFmZTYgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZGVjb2RlLnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZGVjb2RlLnB5CkBAIC0xLDE1ICsxLDQxIEBACiBpbXBvcnQgZGVjaW1hbAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiAKIGltcG9ydCBqc29uCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAogCiBjbGFzcyBUZXN0RGVjb2RlKFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9kZWNpbWFsKHNlbGYpOgogICAgICAgICBydmFsID0ganNvbi5sb2FkcygnMS4xJywgcGFyc2VfZmxvYXQ9ZGVjaW1hbC5EZWNpbWFsKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShydmFsLCBkZWNpbWFsLkRlY2ltYWwpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhydmFsLCBkZWNpbWFsLkRlY2ltYWwoJzEuMScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShydmFsLCBkZWNpbWFsLkRlY2ltYWwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2YWwsIGRlY2ltYWwuRGVjaW1hbCgnMS4xJykpCiAKICAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKICAgICAgICAgcnZhbCA9IGpzb24ubG9hZHMoJzEnLCBwYXJzZV9pbnQ9ZmxvYXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHJ2YWwsIGZsb2F0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocnZhbCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShydmFsLCBmbG9hdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnZhbCwgMS4wKQorCisgICAgZGVmIHRlc3RfZGVjb2Rlcl9vcHRpbWl6YXRpb25zKHNlbGYpOgorICAgICAgICAjIFNldmVyYWwgb3B0aW1pemF0aW9ucyB3ZXJlIG1hZGUgdGhhdCBza2lwIG92ZXIgY2FsbHMgdG8KKyAgICAgICAgIyB0aGUgd2hpdGVzcGFjZSByZWdleCwgc28gdGhpcyB0ZXN0IGlzIGRlc2lnbmVkIHRvIHRyeSBhbmQKKyAgICAgICAgIyBleGVyY2lzZSB0aGUgdW5jb21tb24gY2FzZXMuIFRoZSBhcnJheSBjYXNlcyBhcmUgYWxyZWFkeSBjb3ZlcmVkLgorICAgICAgICBydmFsID0ganNvbi5sb2FkcygneyAgICJrZXkiICAgIDogICAgInZhbHVlIiAgICAsICAiayI6InYiICAgIH0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2YWwsIHsia2V5IjoidmFsdWUiLCAiayI6InYifSkKKworICAgIGRlZiB0ZXN0X29iamVjdF9wYWlyc19ob29rKHNlbGYpOgorICAgICAgICBzID0gJ3sieGtkIjoxLCAia2N3IjoyLCAiYXJ0IjozLCAiaHhtIjo0LCAicXJ0Ijo1LCAicGFkIjo2LCAiaG95Ijo3fScKKyAgICAgICAgcCA9IFsoInhrZCIsIDEpLCAoImtjdyIsIDIpLCAoImFydCIsIDMpLCAoImh4bSIsIDQpLAorICAgICAgICAgICAgICgicXJ0IiwgNSksICgicGFkIiwgNiksICgiaG95IiwgNyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhzKSwgZXZhbChzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHMsIG9iamVjdF9wYWlyc19ob29rPWxhbWJkYSB4OiB4KSwgcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWQoU3RyaW5nSU8ocyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9wYWlyc19ob29rPWxhbWJkYSB4OiB4KSwgcCkKKyAgICAgICAgb2QgPSBqc29uLmxvYWRzKHMsIG9iamVjdF9wYWlyc19ob29rPU9yZGVyZWREaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLCBPcmRlcmVkRGljdChwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG9kKSwgT3JkZXJlZERpY3QpCisgICAgICAgICMgdGhlIG9iamVjdF9wYWlyc19ob29rIHRha2VzIHByaW9yaXR5IG92ZXIgdGhlIG9iamVjdF9ob29rCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3BhaXJzX2hvb2s9T3JkZXJlZERpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfaG9vaz1sYW1iZGEgeDogTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXJlZERpY3QocCkpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X2RlZmF1bHQucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2RlZmF1bHQucHkKaW5kZXggNDlmMDVhZC4uNmEwM2VlYiAxMDA2NDQKLS0tIGEvTGliL2pzb24vdGVzdHMvdGVzdF9kZWZhdWx0LnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZGVmYXVsdC5weQpAQCAtNCw2ICs0LDYgQEAKIAogY2xhc3MgVGVzdERlZmF1bHQoVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAganNvbi5kdW1wcyh0eXBlLCBkZWZhdWx0PXJlcHIpLAogICAgICAgICAgICAganNvbi5kdW1wcyhyZXByKHR5cGUpKSkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZHVtcC5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZHVtcC5weQppbmRleCBkMjg4YzBkLi44OTk3OGUwIDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X2R1bXAucHkKKysrIGIvTGliL2pzb24vdGVzdHMvdGVzdF9kdW1wLnB5CkBAIC03LDcgKzcsMTUgQEAKICAgICBkZWYgdGVzdF9kdW1wKHNlbGYpOgogICAgICAgICBzaW8gPSBTdHJpbmdJTygpCiAgICAgICAgIGpzb24uZHVtcCh7fSwgc2lvKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaW8uZ2V0dmFsdWUoKSwgJ3t9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW8uZ2V0dmFsdWUoKSwgJ3t9JykKIAogICAgIGRlZiB0ZXN0X2R1bXBzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhqc29uLmR1bXBzKHt9KSwgJ3t9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmR1bXBzKHt9KSwgJ3t9JykKKworICAgIGRlZiB0ZXN0X2VuY29kZV90cnVlZmFsc2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5kdW1wcygKKyAgICAgICAgICAgICAgICAge1RydWU6IEZhbHNlLCBGYWxzZTogVHJ1ZX0sIHNvcnRfa2V5cz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgJ3siZmFsc2UiOiB0cnVlLCAidHJ1ZSI6IGZhbHNlfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5kdW1wcygKKyAgICAgICAgICAgICAgICB7MjogMy4wLCA0LjA6IDVMLCBGYWxzZTogMSwgNkw6IFRydWV9LCBzb3J0X2tleXM9VHJ1ZSksCisgICAgICAgICAgICAgICAgJ3siZmFsc2UiOiAxLCAiMiI6IDMuMCwgIjQuMCI6IDUsICI2IjogdHJ1ZX0nKQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaS5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkucHkKaW5kZXggMzUyNDIzZS4uMGU1MDExMCAxMDA2NDQKLS0tIGEvTGliL2pzb24vdGVzdHMvdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaS5weQorKysgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLnB5CkBAIC0xLDYgKzEsOCBAQAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIAogaW1wb3J0IGpzb24uZW5jb2RlcgorZnJvbSBqc29uIGltcG9ydCBkdW1wcworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKIAogQ0FTRVMgPSBbCiAgICAgKHUnL1xcIlx1Y2FmZVx1YmFiZVx1YWI5OFx1ZmNkZVx1YmNkYVx1ZWY0YVx4MDhceDBjXG5cclx0YDF+IUAjJCVeJiooKV8rLT1bXXt9fDs6XCcsLi88Pj8nLCAnIi9cXFxcXFwiXFx1Y2FmZVxcdWJhYmVcXHVhYjk4XFx1ZmNkZVxcdWJjZGFcXHVlZjRhXFxiXFxmXFxuXFxyXFx0YDF+IUAjJCVeJiooKV8rLT1bXXt9fDs6XCcsLi88Pj8iJyksCkBAIC0yNiwxMCArMjgsMjAgQEAKICAgICAgICAgc2VsZi5fdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShqc29uLmVuY29kZXIucHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkpCiAKICAgICBkZWYgdGVzdF9jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKHNlbGYpOgorICAgICAgICBpZiBub3QganNvbi5lbmNvZGVyLmNfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWk6CisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5fdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShqc29uLmVuY29kZXIuY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSkKIAogICAgIGRlZiBfdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShzZWxmLCBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaSk6CiAgICAgICAgIGZuYW1lID0gZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkuX19uYW1lX18KICAgICAgICAgZm9yIGlucHV0X3N0cmluZywgZXhwZWN0IGluIENBU0VTOgogICAgICAgICAgICAgcmVzdWx0ID0gZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoaW5wdXRfc3RyaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LCBleHBlY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0LAorICAgICAgICAgICAgICAgICd7MCFyfSAhPSB7MSFyfSBmb3IgezJ9KHszIXJ9KScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZXN1bHQsIGV4cGVjdCwgZm5hbWUsIGlucHV0X3N0cmluZykpCisKKyAgICBkZWYgdGVzdF9vcmRlcmVkX2RpY3Qoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDYxMDUKKyAgICAgICAgaXRlbXMgPSBbKCdvbmUnLCAxKSwgKCd0d28nLCAyKSwgKCd0aHJlZScsIDMpLCAoJ2ZvdXInLCA0KSwgKCdmaXZlJywgNSldCisgICAgICAgIHMgPSBqc29uLmR1bXBzKE9yZGVyZWREaWN0KGl0ZW1zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAneyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogMywgImZvdXIiOiA0LCAiZml2ZSI6IDV9JykKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZmFpbC5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZmFpbC5weQppbmRleCBlZTMxYmZhLi5kZDllYzQxIDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X2ZhaWwucHkKKysrIGIvTGliL2pzb24vdGVzdHMvdGVzdF9mYWlsLnB5CkBAIC03Myw0ICs3MywxMyBAQAogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIGZhaWx1cmUgZm9yIGZhaWwlZC5qc29uOiAlciIgJSAoaWR4LCBkb2MpKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgZmFpbHVyZSBmb3IgZmFpbHswfS5qc29uOiB7MSFyfSIuZm9ybWF0KGlkeCwgZG9jKSkKKworICAgIGRlZiB0ZXN0X25vbl9zdHJpbmdfa2V5c19kaWN0KHNlbGYpOgorICAgICAgICBkYXRhID0geydhJyA6IDEsICgxLCAyKSA6IDJ9CisKKyAgICAgICAgI1RoaXMgaXMgZm9yIGMgZW5jb2RlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGpzb24uZHVtcHMsIGRhdGEpCisKKyAgICAgICAgI1RoaXMgaXMgZm9yIHB5dGhvbiBlbmNvZGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwganNvbi5kdW1wcywgZGF0YSwgaW5kZW50PVRydWUpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X2Zsb2F0LnB5IGIvTGliL2pzb24vdGVzdHMvdGVzdF9mbG9hdC5weQppbmRleCA5ZGY2ZDFlLi5lYzBjYWQxIDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X2Zsb2F0LnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZmxvYXQucHkKQEAgLTUsNSArNSwxNSBAQAogCiBjbGFzcyBUZXN0RmxvYXQoVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKLSAgICAgICAgZm9yIG51bSBpbiBbMTYxNzE2MTc3MS43NjUwMDAxLCBtYXRoLnBpLCBtYXRoLnBpKioxMDAsIG1hdGgucGkqKi0xMDBdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmxvYXQoanNvbi5kdW1wcyhudW0pKSwgbnVtKQorICAgICAgICBmb3IgbnVtIGluIFsxNjE3MTYxNzcxLjc2NTAwMDEsIG1hdGgucGksIG1hdGgucGkqKjEwMCwKKyAgICAgICAgICAgICAgICAgICAgbWF0aC5waSoqLTEwMCwgMy4xXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoanNvbi5kdW1wcyhudW0pKSwgbnVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKGpzb24uZHVtcHMobnVtKSksIG51bSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2Fkcyh1bmljb2RlKGpzb24uZHVtcHMobnVtKSkpLCBudW0pCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBmb3IgbnVtIGluIFsxLCAxTCwgMTw8MzIsIDE8PDY0XToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5kdW1wcyhudW0pLCBzdHIobnVtKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGpzb24uZHVtcHMobnVtKSksIG51bSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2Fkcyhqc29uLmR1bXBzKG51bSkpLCBudW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHModW5pY29kZShqc29uLmR1bXBzKG51bSkpKSwgbnVtKQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9pbmRlbnQucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2luZGVudC5weQppbmRleCA2MDU1MTYyLi5jZDYwOGQ5IDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X2luZGVudC5weQorKysgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2luZGVudC5weQpAQCAtMzYsNiArMzYsNiBAQAogICAgICAgICBoMSA9IGpzb24ubG9hZHMoZDEpCiAgICAgICAgIGgyID0ganNvbi5sb2FkcyhkMikKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhoMSwgaCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaDIsIGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGQyLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDEsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGV4cGVjdCkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczEucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3Bhc3MxLnB5CmluZGV4IDIxNmUyNTIuLjcxOWMxMTMgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczEucHkKKysrIGIvTGliL2pzb24vdGVzdHMvdGVzdF9wYXNzMS5weQpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAjIHRlc3QgaW4vb3V0IGVxdWl2YWxlbmNlIGFuZCBwYXJzaW5nCiAgICAgICAgIHJlcyA9IGpzb24ubG9hZHMoSlNPTikKICAgICAgICAgb3V0ID0ganNvbi5kdW1wcyhyZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcywganNvbi5sb2FkcyhvdXQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywganNvbi5sb2FkcyhvdXQpKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBqc29uLmR1bXBzKHJlcywgYWxsb3dfbmFuPUZhbHNlKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczIucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3Bhc3MyLnB5CmluZGV4IDgwZDg0MzMuLjM3OTExN2UgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczIucHkKKysrIGIvTGliL2pzb24vdGVzdHMvdGVzdF9wYXNzMi5weQpAQCAtMTEsNCArMTEsNCBAQAogICAgICAgICAjIHRlc3QgaW4vb3V0IGVxdWl2YWxlbmNlIGFuZCBwYXJzaW5nCiAgICAgICAgIHJlcyA9IGpzb24ubG9hZHMoSlNPTikKICAgICAgICAgb3V0ID0ganNvbi5kdW1wcyhyZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcywganNvbi5sb2FkcyhvdXQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywganNvbi5sb2FkcyhvdXQpKQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9wYXNzMy5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczMucHkKaW5kZXggNzdkODdiMi4uOTE1MWM0MyAxMDA2NDQKLS0tIGEvTGliL2pzb24vdGVzdHMvdGVzdF9wYXNzMy5weQorKysgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3Bhc3MzLnB5CkBAIC0xNyw0ICsxNyw0IEBACiAgICAgICAgICMgdGVzdCBpbi9vdXQgZXF1aXZhbGVuY2UgYW5kIHBhcnNpbmcKICAgICAgICAgcmVzID0ganNvbi5sb2FkcyhKU09OKQogICAgICAgICBvdXQgPSBqc29uLmR1bXBzKHJlcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLCBqc29uLmxvYWRzKG91dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBqc29uLmxvYWRzKG91dCkpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X3JlY3Vyc2lvbi5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcmVjdXJzaW9uLnB5CmluZGV4IDA3M2QzYzEuLjFlOWI4YWIgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcmVjdXJzaW9uLnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcmVjdXJzaW9uLnB5CkBAIC01Nyw3ICs1Nyw3IEBACiAKICAgICBkZWYgdGVzdF9kZWZhdWx0cmVjdXJzaW9uKHNlbGYpOgogICAgICAgICBlbmMgPSBSZWN1cnNpdmVKU09ORW5jb2RlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVuYy5lbmNvZGUoSlNPTlRlc3RPYmplY3QpLCAnIkpTT05UZXN0T2JqZWN0IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jLmVuY29kZShKU09OVGVzdE9iamVjdCksICciSlNPTlRlc3RPYmplY3QiJykKICAgICAgICAgZW5jLnJlY3Vyc2UgPSBUcnVlCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGVuYy5lbmNvZGUoSlNPTlRlc3RPYmplY3QpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X3NjYW5zdHJpbmcucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3NjYW5zdHJpbmcucHkKaW5kZXggNmI2MDBkYi4uYmYzY2NkNSAxMDA2NDQKLS0tIGEvTGliL2pzb24vdGVzdHMvdGVzdF9zY2Fuc3RyaW5nLnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3Rfc2NhbnN0cmluZy5weQpAQCAtMTMsOTIgKzEzLDkyIEBACiAgICAgICAgIHNlbGYuX3Rlc3Rfc2NhbnN0cmluZyhqc29uLmRlY29kZXIuY19zY2Fuc3RyaW5nKQogCiAgICAgZGVmIF90ZXN0X3NjYW5zdHJpbmcoc2VsZiwgc2NhbnN0cmluZyk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygnInpcXHVkODM0XFx1ZGQyMHgiJywgMSwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSd6XFUwMDAxZDEyMHgnLCAxNikpCiAKICAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPT0gNjU1MzU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICAgc2NhbnN0cmluZyh1JyJ6XFUwMDAxZDEyMHgiJywgMSwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAgICAgKHUnelxVMDAwMWQxMjB4JywgNikpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICAgc2NhbnN0cmluZyh1JyJ6XFUwMDAxZDEyMHgiJywgMSwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAgICAgKHUnelxVMDAwMWQxMjB4JywgNSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCciXFx1MDA3YiInLCAxLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J3snLCA4KSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJyJBIEpTT04gcGF5bG9hZCBzaG91bGQgYmUgYW4gb2JqZWN0IG9yIGFycmF5LCBub3QgYSBzdHJpbmcuIicsIDEsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnQSBKU09OIHBheWxvYWQgc2hvdWxkIGJlIGFuIG9iamVjdCBvciBhcnJheSwgbm90IGEgc3RyaW5nLicsIDYwKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ1siVW5jbG9zZWQgYXJyYXkiJywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdVbmNsb3NlZCBhcnJheScsIDE3KSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ1siZXh0cmEgY29tbWEiLF0nLCAyLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J2V4dHJhIGNvbW1hJywgMTQpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygnWyJkb3VibGUgZXh0cmEgY29tbWEiLCxdJywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdkb3VibGUgZXh0cmEgY29tbWEnLCAyMSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCdbIkNvbW1hIGFmdGVyIHRoZSBjbG9zZSJdLCcsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnQ29tbWEgYWZ0ZXIgdGhlIGNsb3NlJywgMjQpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygnWyJFeHRyYSBjbG9zZSJdXScsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnRXh0cmEgY2xvc2UnLCAxNCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCd7IkV4dHJhIGNvbW1hIjogdHJ1ZSx9JywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdFeHRyYSBjb21tYScsIDE0KSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ3siRXh0cmEgdmFsdWUgYWZ0ZXIgY2xvc2UiOiB0cnVlfSAibWlzcGxhY2VkIHF1b3RlZCB2YWx1ZSInLCAyLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J0V4dHJhIHZhbHVlIGFmdGVyIGNsb3NlJywgMjYpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygneyJJbGxlZ2FsIGV4cHJlc3Npb24iOiAxICsgMn0nLCAyLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J0lsbGVnYWwgZXhwcmVzc2lvbicsIDIxKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ3siSWxsZWdhbCBpbnZvY2F0aW9uIjogYWxlcnQoKX0nLCAyLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J0lsbGVnYWwgaW52b2NhdGlvbicsIDIxKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ3siTnVtYmVycyBjYW5ub3QgaGF2ZSBsZWFkaW5nIHplcm9lcyI6IDAxM30nLCAyLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J051bWJlcnMgY2Fubm90IGhhdmUgbGVhZGluZyB6ZXJvZXMnLCAzNykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCd7Ik51bWJlcnMgY2Fubm90IGJlIGhleCI6IDB4MTR9JywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdOdW1iZXJzIGNhbm5vdCBiZSBoZXgnLCAyNCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCdbW1tbW1tbW1tbW1tbW1tbW1tbWyJUb28gZGVlcCJdXV1dXV1dXV1dXV1dXV1dXV1dXScsIDIxLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J1RvbyBkZWVwJywgMzApKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygneyJNaXNzaW5nIGNvbG9uIiBudWxsfScsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnTWlzc2luZyBjb2xvbicsIDE2KSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ3siRG91YmxlIGNvbG9uIjo6IG51bGx9JywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdEb3VibGUgY29sb24nLCAxNSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCd7IkNvbW1hIGluc3RlYWQgb2YgY29sb24iLCBudWxsfScsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnQ29tbWEgaW5zdGVhZCBvZiBjb2xvbicsIDI1KSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ1siQ29sb24gaW5zdGVhZCBvZiBjb21tYSI6IGZhbHNlXScsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnQ29sb24gaW5zdGVhZCBvZiBjb21tYScsIDI1KSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ1siQmFkIHZhbHVlIiwgdHJ1dGhdJywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdCYWQgdmFsdWUnLCAxMikpCiAKQEAgLTEwNywzICsxMDcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAieHh4IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmVuY29kZXIuZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWksIGIieHhceGZmIikKKworICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBqc29uLmRlY29kZXIuc2NhbnN0cmluZywgYiJ4eHgiLCBzeXMubWF4c2l6ZSsxKQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9zZXBhcmF0b3JzLnB5IGIvTGliL2pzb24vdGVzdHMvdGVzdF9zZXBhcmF0b3JzLnB5CmluZGV4IDMyZGIzNDEuLmQ1YjkyYmQgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rlc3RzL3Rlc3Rfc2VwYXJhdG9ycy5weQorKysgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3NlcGFyYXRvcnMucHkKQEAgLTM3LDYgKzM3LDYgQEAKICAgICAgICAgaDEgPSBqc29uLmxvYWRzKGQxKQogICAgICAgICBoMiA9IGpzb24ubG9hZHMoZDIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaDEsIGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGgyLCBoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkMiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgxLCBoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgyLCBoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBleHBlY3QpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X3NwZWVkdXBzLnB5IGIvTGliL2pzb24vdGVzdHMvdGVzdF9zcGVlZHVwcy5weQppbmRleCA4ZmY5YTM4Li4zYjRjY2IzIDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X3NwZWVkdXBzLnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3Rfc3BlZWR1cHMucHkKQEAgLTEsMTUgKzEsMjQgQEAKIGltcG9ydCBkZWNpbWFsCiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQogCi1mcm9tIGpzb24gaW1wb3J0IGRlY29kZXIKLWZyb20ganNvbiBpbXBvcnQgZW5jb2RlcgorZnJvbSBqc29uIGltcG9ydCBkZWNvZGVyLCBlbmNvZGVyLCBzY2FubmVyCiAKIGNsYXNzIFRlc3RTcGVlZHVwcyhUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc2NhbnN0cmluZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5zY2Fuc3RyaW5nLl9fbW9kdWxlX18sICJfanNvbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkZWNvZGVyLnNjYW5zdHJpbmcgaXMgZGVjb2Rlci5jX3NjYW5zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5zY2Fuc3RyaW5nLl9fbW9kdWxlX18sICJfanNvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZWNvZGVyLnNjYW5zdHJpbmcgaXMgZGVjb2Rlci5jX3NjYW5zdHJpbmcpCiAKICAgICBkZWYgdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZW5jb2Rlci5lbmNvZGVfYmFzZXN0cmluZ19hc2NpaS5fX21vZHVsZV9fLCAiX2pzb24iKQotICAgICAgICBzZWxmLmFzc2VydF8oZW5jb2Rlci5lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSBpcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkuX19tb2R1bGVfXywgIl9qc29uIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVuY29kZXIuZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rlci5jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKQorCitjbGFzcyBUZXN0RGVjb2RlKFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9tYWtlX3NjYW5uZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzY2FubmVyLmNfbWFrZV9zY2FubmVyLCAxKQorCisgICAgZGVmIHRlc3RfbWFrZV9lbmNvZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGVuY29kZXIuY19tYWtlX2VuY29kZXIsCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgIlx4Q0RceDdEXHgzRFx4NEVceDEyXHg0Q1x4RjlceDc5XHhEN1x4NTJceEJBXHg4Mlx4RjJceDI3XHg0QVx4N0RceEEwXHhDQVx4NzUiLAorICAgICAgICAgICAgTm9uZSkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfdW5pY29kZS5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfdW5pY29kZS5weQppbmRleCAzYWM0NTQxLi5hZDdmZTI0IDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X3VuaWNvZGUucHkKKysrIGIvTGliL2pzb24vdGVzdHMvdGVzdF91bmljb2RlLnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIAogaW1wb3J0IGpzb24KK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiAKIGNsYXNzIFRlc3RVbmljb2RlKFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9lbmNvZGluZzEoc2VsZik6CkBAIC05LDQ3ICsxMCw3MyBAQAogICAgICAgICBzID0gdS5lbmNvZGUoJ3V0Zi04JykKICAgICAgICAganUgPSBlbmNvZGVyLmVuY29kZSh1KQogICAgICAgICBqcyA9IGVuY29kZXIuZW5jb2RlKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGp1LCBqcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqdSwganMpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZzIoc2VsZik6CiAgICAgICAgIHUgPSB1J1xOe0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQX1cTntHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQX0nCiAgICAgICAgIHMgPSB1LmVuY29kZSgndXRmLTgnKQogICAgICAgICBqdSA9IGpzb24uZHVtcHModSwgZW5jb2Rpbmc9J3V0Zi04JykKICAgICAgICAganMgPSBqc29uLmR1bXBzKHMsIGVuY29kaW5nPSd1dGYtOCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGp1LCBqcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqdSwganMpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZzMoc2VsZik6CiAgICAgICAgIHUgPSB1J1xOe0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQX1cTntHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQX0nCiAgICAgICAgIGogPSBqc29uLmR1bXBzKHUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGosICciXFx1MDNiMVxcdTAzYTkiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqLCAnIlxcdTAzYjFcXHUwM2E5IicpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZzQoc2VsZik6CiAgICAgICAgIHUgPSB1J1xOe0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQX1cTntHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQX0nCiAgICAgICAgIGogPSBqc29uLmR1bXBzKFt1XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaiwgJ1siXFx1MDNiMVxcdTAzYTkiXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaiwgJ1siXFx1MDNiMVxcdTAzYTkiXScpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZzUoc2VsZik6CiAgICAgICAgIHUgPSB1J1xOe0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQX1cTntHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQX0nCiAgICAgICAgIGogPSBqc29uLmR1bXBzKHUsIGVuc3VyZV9hc2NpaT1GYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaiwgdSciezB9IicuZm9ybWF0KHUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGosIHUnInswfSInLmZvcm1hdCh1KSkKIAogICAgIGRlZiB0ZXN0X2VuY29kaW5nNihzZWxmKToKICAgICAgICAgdSA9IHUnXE57R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBfVxOe0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBfScKICAgICAgICAgaiA9IGpzb24uZHVtcHMoW3VdLCBlbnN1cmVfYXNjaWk9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGosIHUnWyJ7MH0iXScuZm9ybWF0KHUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGosIHUnWyJ7MH0iXScuZm9ybWF0KHUpKQogCiAgICAgZGVmIHRlc3RfYmlnX3VuaWNvZGVfZW5jb2RlKHNlbGYpOgogICAgICAgICB1ID0gdSdcVTAwMDFkMTIwJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhqc29uLmR1bXBzKHUpLCAnIlxcdWQ4MzRcXHVkZDIwIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGpzb24uZHVtcHModSwgZW5zdXJlX2FzY2lpPUZhbHNlKSwgdSciXFUwMDAxZDEyMCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24uZHVtcHModSksICciXFx1ZDgzNFxcdWRkMjAiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmR1bXBzKHUsIGVuc3VyZV9hc2NpaT1GYWxzZSksIHUnIlxVMDAwMWQxMjAiJykKIAogICAgIGRlZiB0ZXN0X2JpZ191bmljb2RlX2RlY29kZShzZWxmKToKICAgICAgICAgdSA9IHUnelxVMDAwMWQxMjB4JwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhqc29uLmxvYWRzKCciJyArIHUgKyAnIicpLCB1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhqc29uLmxvYWRzKCcielxcdWQ4MzRcXHVkZDIweCInKSwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKCciJyArIHUgKyAnIicpLCB1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHMoJyJ6XFx1ZDgzNFxcdWRkMjB4IicpLCB1KQogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9kZWNvZGUoc2VsZik6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDB4ZDdmZik6CiAgICAgICAgICAgICB1ID0gdW5pY2hyKGkpCi0gICAgICAgICAgICBqcyA9ICciXFx1ezA6MDR4fSInLmZvcm1hdChpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoanNvbi5sb2FkcyhqcyksIHUpCisgICAgICAgICAgICBzID0gJyJcXHV7MDowNHh9IicuZm9ybWF0KGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHMocyksIHUpCisKKyAgICBkZWYgdGVzdF9vYmplY3RfcGFpcnNfaG9va193aXRoX3VuaWNvZGUoc2VsZik6CisgICAgICAgIHMgPSB1J3sieGtkIjoxLCAia2N3IjoyLCAiYXJ0IjozLCAiaHhtIjo0LCAicXJ0Ijo1LCAicGFkIjo2LCAiaG95Ijo3fScKKyAgICAgICAgcCA9IFsodSJ4a2QiLCAxKSwgKHUia2N3IiwgMiksICh1ImFydCIsIDMpLCAodSJoeG0iLCA0KSwKKyAgICAgICAgICAgICAodSJxcnQiLCA1KSwgKHUicGFkIiwgNiksICh1ImhveSIsIDcpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHMocyksIGV2YWwocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhzLCBvYmplY3RfcGFpcnNfaG9vayA9IGxhbWJkYSB4OiB4KSwgcCkKKyAgICAgICAgb2QgPSBqc29uLmxvYWRzKHMsIG9iamVjdF9wYWlyc19ob29rID0gT3JkZXJlZERpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QsIE9yZGVyZWREaWN0KHApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUob2QpLCBPcmRlcmVkRGljdCkKKyAgICAgICAgIyB0aGUgb2JqZWN0X3BhaXJzX2hvb2sgdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGUgb2JqZWN0X2hvb2sKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfcGFpcnNfaG9vayA9IE9yZGVyZWREaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2hvb2sgPSBsYW1iZGEgeDogTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXJlZERpY3QocCkpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHModSd7ImEiOiAiXHhlOSJ9Jy5lbmNvZGUoJ3V0Zi04JykpLAorICAgICAgICAgICAgeydhJzogdSdceGU5J30pCisKKyAgICBkZWYgdGVzdF91bmljb2RlX3ByZXNlcnZhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGpzb24ubG9hZHModSciIicpKSwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGpzb24ubG9hZHModSciYSInKSksIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShqc29uLmxvYWRzKHUnWyJhIl0nKVswXSksIHVuaWNvZGUpCisgICAgICAgICMgSXNzdWUgMTAwMzguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShqc29uLmxvYWRzKCciZm9vIicpKSwgdW5pY29kZSkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rvb2wucHkgYi9MaWIvanNvbi90b29sLnB5CmluZGV4IGRhZWRiYjUuLmMzN2JiNzcgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rvb2wucHkKKysrIGIvTGliL2pzb24vdG9vbC5weQpAQCAtMiwxMSArMiwxMSBAQAogCiBVc2FnZTo6CiAKLSAgICAkIGVjaG8gJ3sianNvbiI6Im9iaiJ9JyB8IHB5dGhvbiAtbWpzb24udG9vbAorICAgICQgZWNobyAneyJqc29uIjoib2JqIn0nIHwgcHl0aG9uIC1tIGpzb24udG9vbAogICAgIHsKICAgICAgICAgImpzb24iOiAib2JqIgogICAgIH0KLSAgICAkIGVjaG8gJ3sgMS4yOjMuNH0nIHwgcHl0aG9uIC1tanNvbi50b29sCisgICAgJCBlY2hvICd7IDEuMjozLjR9JyB8IHB5dGhvbiAtbSBqc29uLnRvb2wKICAgICBFeHBlY3RpbmcgcHJvcGVydHkgbmFtZTogbGluZSAxIGNvbHVtbiAyIChjaGFyIDIpCiAKICIiIgpAQCAtMjQsNyArMjQsNyBAQAogICAgICAgICBpbmZpbGUgPSBvcGVuKHN5cy5hcmd2WzFdLCAncmInKQogICAgICAgICBvdXRmaWxlID0gb3BlbihzeXMuYXJndlsyXSwgJ3diJykKICAgICBlbHNlOgotICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCJ7MH0gW2luZmlsZSBbb3V0ZmlsZV1dIi5mb3JtYXQoc3lzLmFyZ3ZbMF0pKQorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KHN5cy5hcmd2WzBdICsgIiBbaW5maWxlIFtvdXRmaWxlXV0iKQogICAgIHRyeToKICAgICAgICAgb2JqID0ganNvbi5sb2FkKGluZmlsZSkKICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvRmlsZURpYWxvZy5weSBiL0xpYi9saWItdGsvRmlsZURpYWxvZy5weQppbmRleCBiMDhkM2E4Li4wNmNlMmI5IDEwMDY0NAotLS0gYS9MaWIvbGliLXRrL0ZpbGVEaWFsb2cucHkKKysrIGIvTGliL2xpYi10ay9GaWxlRGlhbG9nLnB5CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgc2VsZi50b3AuYmluZCgnPEFsdC1XPicsIHNlbGYuY2FuY2VsX2NvbW1hbmQpCiAKICAgICBkZWYgZ28oc2VsZiwgZGlyX29yX2ZpbGU9b3MuY3VyZGlyLCBwYXR0ZXJuPSIqIiwgZGVmYXVsdD0iIiwga2V5PU5vbmUpOgotICAgICAgICBpZiBrZXkgYW5kIGRpYWxvZ3N0YXRlcy5oYXNfa2V5KGtleSk6CisgICAgICAgIGlmIGtleSBhbmQga2V5IGluIGRpYWxvZ3N0YXRlczoKICAgICAgICAgICAgIHNlbGYuZGlyZWN0b3J5LCBwYXR0ZXJuID0gZGlhbG9nc3RhdGVzW2tleV0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRpcl9vcl9maWxlID0gb3MucGF0aC5leHBhbmR1c2VyKGRpcl9vcl9maWxlKQpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay9GaXhUay5weSBiL0xpYi9saWItdGsvRml4VGsucHkKaW5kZXggMzc1YzM0Yy4uNDk5NjBjNyAxMDA2NDQKLS0tIGEvTGliL2xpYi10ay9GaXhUay5weQorKysgYi9MaWIvbGliLXRrL0ZpeFRrLnB5CkBAIC01NCw3ICs1NCw3IEBACiAjIGlmIHRoaXMgZG9lcyBub3QgZXhpc3QsIG5vIGZ1cnRoZXIgc2VhcmNoIGlzIG5lZWRlZAogaWYgb3MucGF0aC5leGlzdHMocHJlZml4KToKICAgICBwcmVmaXggPSBjb252ZXJ0X3BhdGgocHJlZml4KQotICAgIGlmIG5vdCBvcy5lbnZpcm9uLmhhc19rZXkoIlRDTF9MSUJSQVJZIik6CisgICAgaWYgIlRDTF9MSUJSQVJZIiBub3QgaW4gb3MuZW52aXJvbjoKICAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihwcmVmaXgpOgogICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJ0Y2wiKToKICAgICAgICAgICAgICAgICB0Y2xkaXIgPSBvcy5wYXRoLmpvaW4ocHJlZml4LG5hbWUpCkBAIC02NCwxMyArNjQsMTMgQEAKICAgICAjIGFzIFRjbAogICAgIGltcG9ydCBfdGtpbnRlcgogICAgIHZlciA9IHN0cihfdGtpbnRlci5UQ0xfVkVSU0lPTikKLSAgICBpZiBub3Qgb3MuZW52aXJvbi5oYXNfa2V5KCJUS19MSUJSQVJZIik6CisgICAgaWYgIlRLX0xJQlJBUlkiIG5vdCBpbiBvcy5lbnZpcm9uOgogICAgICAgICB2ID0gb3MucGF0aC5qb2luKHByZWZpeCwgJ3RrJyt2ZXIpCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih2LCAidGNsSW5kZXgiKSk6CiAgICAgICAgICAgICBvcy5lbnZpcm9uWydUS19MSUJSQVJZJ10gPSB2CiAgICAgIyBXZSBkb24ndCBrbm93IHRoZSBUaXggdmVyc2lvbiwgc28gd2UgbXVzdCBzZWFyY2ggdGhlIGVudGlyZQogICAgICMgZGlyZWN0b3J5Ci0gICAgaWYgbm90IG9zLmVudmlyb24uaGFzX2tleSgiVElYX0xJQlJBUlkiKToKKyAgICBpZiAiVElYX0xJQlJBUlkiIG5vdCBpbiBvcy5lbnZpcm9uOgogICAgICAgICBmb3IgbmFtZSBpbiBvcy5saXN0ZGlyKHByZWZpeCk6CiAgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoInRpeCIpOgogICAgICAgICAgICAgICAgIHRpeGRpciA9IG9zLnBhdGguam9pbihwcmVmaXgsbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvU2Nyb2xsZWRUZXh0LnB5IGIvTGliL2xpYi10ay9TY3JvbGxlZFRleHQucHkKaW5kZXggODA3NmJjNC4uYTFlZjc5YyAxMDA2NDQKLS0tIGEvTGliL2xpYi10ay9TY3JvbGxlZFRleHQucHkKKysrIGIvTGliL2xpYi10ay9TY3JvbGxlZFRleHQucHkKQEAgLTI3LDggKzI3LDExIEBACiAgICAgICAgIHNlbGYucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCwgZXhwYW5kPVRydWUpCiAgICAgICAgIHNlbGYudmJhclsnY29tbWFuZCddID0gc2VsZi55dmlldwogCi0gICAgICAgICMgQ29weSBnZW9tZXRyeSBtZXRob2RzIG9mIHNlbGYuZnJhbWUgLS0gaGFjayEKKyAgICAgICAgIyBDb3B5IGdlb21ldHJ5IG1ldGhvZHMgb2Ygc2VsZi5mcmFtZSB3aXRob3V0IG92ZXJyaWRpbmcgVGV4dAorICAgICAgICAjIG1ldGhvZHMgLS0gaGFjayEKKyAgICAgICAgdGV4dF9tZXRocyA9IHZhcnMoVGV4dCkua2V5cygpCiAgICAgICAgIG1ldGhvZHMgPSB2YXJzKFBhY2spLmtleXMoKSArIHZhcnMoR3JpZCkua2V5cygpICsgdmFycyhQbGFjZSkua2V5cygpCisgICAgICAgIG1ldGhvZHMgPSBzZXQobWV0aG9kcykuZGlmZmVyZW5jZSh0ZXh0X21ldGhzKQogCiAgICAgICAgIGZvciBtIGluIG1ldGhvZHM6CiAgICAgICAgICAgICBpZiBtWzBdICE9ICdfJyBhbmQgbSAhPSAnY29uZmlnJyBhbmQgbSAhPSAnY29uZmlndXJlJzoKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvVGl4LnB5IGIvTGliL2xpYi10ay9UaXgucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA3Mzc1ODY0Li5jODFjYzgzCi0tLSBhL0xpYi9saWItdGsvVGl4LnB5CisrKyBiL0xpYi9saWItdGsvVGl4LnB5CkBAIC00Niw2ICs0NiwyMSBAQAogQVVUTyA9ICdhdXRvJwogQUNST1NTVE9QID0gJ2Fjcm9zc3RvcCcKIAorIyBBIGZldyB1c2VmdWwgY29uc3RhbnRzIGZvciB0aGUgR3JpZCB3aWRnZXQKK0FTQ0lJID0gJ2FzY2lpJworQ0VMTCA9ICdjZWxsJworQ09MVU1OID0gJ2NvbHVtbicKK0RFQ1JFQVNJTkcgPSAnZGVjcmVhc2luZycKK0lOQ1JFQVNJTkcgPSAnaW5jcmVhc2luZycKK0lOVEVHRVIgPSAnaW50ZWdlcicKK01BSU4gPSAnbWFpbicKK01BWCA9ICdtYXgnCitSRUFMID0gJ3JlYWwnCitST1cgPSAncm93JworU19SRUdJT04gPSAncy1yZWdpb24nCitYX1JFR0lPTiA9ICd4LXJlZ2lvbicKK1lfUkVHSU9OID0gJ3ktcmVnaW9uJworCiAjIFNvbWUgY29uc3RhbnRzIHVzZWQgYnkgVGtpbnRlciBkb29uZWV2ZW50KCkKIFRDTF9ET05UX1dBSVQgICAgID0gMSA8PCAxCiBUQ0xfV0lORE9XX0VWRU5UUyA9IDEgPDwgMgpAQCAtMzIxLDcgKzMzNiw3IEBACiAgICAgIyBXZSBjYW4gZXZlbiBkbyB3Lm9rLmludm9rZSgpIGJlY2F1c2Ugdy5vayBpcyBzdWJjbGFzc2VkIGZyb20gdGhlCiAgICAgIyBCdXR0b24gY2xhc3MgaWYgeW91IGdvIHRocm91Z2ggdGhlIHByb3BlciBjb25zdHJ1Y3RvcnMKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIHNlbGYuc3Vid2lkZ2V0X2xpc3QuaGFzX2tleShuYW1lKToKKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLnN1YndpZGdldF9saXN0OgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3Vid2lkZ2V0X2xpc3RbbmFtZV0KICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsIG5hbWUKIApAQCAtMzkwLDcgKzQwNSw3IEBACiAgICAgICAgIGVsaWYga3c6IGNuZiA9IGt3CiAgICAgICAgIG9wdGlvbnMgPSAoKQogICAgICAgICBmb3IgaywgdiBpbiBjbmYuaXRlbXMoKToKLSAgICAgICAgICAgIGlmIGNhbGxhYmxlKHYpOgorICAgICAgICAgICAgaWYgaGFzYXR0cih2LCAnX19jYWxsX18nKToKICAgICAgICAgICAgICAgICB2ID0gc2VsZi5fcmVnaXN0ZXIodikKICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zICsgKCctJytrLCB2KQogICAgICAgICByZXR1cm4gbWFzdGVyLnRrLmNhbGwoKCdpbWFnZScsICdjcmVhdGUnLCBpbWd0eXBlLCkgKyBvcHRpb25zKQpAQCAtNDQ5LDkgKzQ2NCw5IEBACiAgICAgICAgICMgYWxzbyBkZXN0cm95cyB0aGUgcGFyZW50IE5vdGVCb29rIHRodXMgbGVhZGluZyB0byBhbiBleGNlcHRpb24KICAgICAgICAgIyBpbiBUa2ludGVyIHdoZW4gaXQgZmluYWxseSBjYWxscyBUY2wgdG8gZGVzdHJveSB0aGUgTm90ZUJvb2sKICAgICAgICAgZm9yIGMgaW4gc2VsZi5jaGlsZHJlbi52YWx1ZXMoKTogYy5kZXN0cm95KCkKLSAgICAgICAgaWYgc2VsZi5tYXN0ZXIuY2hpbGRyZW4uaGFzX2tleShzZWxmLl9uYW1lKToKKyAgICAgICAgaWYgc2VsZi5fbmFtZSBpbiBzZWxmLm1hc3Rlci5jaGlsZHJlbjoKICAgICAgICAgICAgIGRlbCBzZWxmLm1hc3Rlci5jaGlsZHJlbltzZWxmLl9uYW1lXQotICAgICAgICBpZiBzZWxmLm1hc3Rlci5zdWJ3aWRnZXRfbGlzdC5oYXNfa2V5KHNlbGYuX25hbWUpOgorICAgICAgICBpZiBzZWxmLl9uYW1lIGluIHNlbGYubWFzdGVyLnN1YndpZGdldF9saXN0OgogICAgICAgICAgICAgZGVsIHNlbGYubWFzdGVyLnN1YndpZGdldF9saXN0W3NlbGYuX25hbWVdCiAgICAgICAgIGlmIHNlbGYuZGVzdHJveV9waHlzaWNhbGx5OgogICAgICAgICAgICAgIyBUaGlzIGlzIGJ5cGFzc2VkIG9ubHkgZm9yIGEgZmV3IHdpZGdldHMKQEAgLTQ3Myw4ICs0ODgsOCBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW10eXBlLCBjbmY9e30sICoqa3cpOgogICAgICAgICBtYXN0ZXIgPSBfZGVmYXVsdF9yb290ICAgICAgICAgICAgICAjIGdsb2JhbCBmcm9tIFRraW50ZXIKLSAgICAgICAgaWYgbm90IG1hc3RlciBhbmQgY25mLmhhc19rZXkoJ3JlZndpbmRvdycpOiBtYXN0ZXI9Y25mWydyZWZ3aW5kb3cnXQotICAgICAgICBlbGlmIG5vdCBtYXN0ZXIgYW5kIGt3Lmhhc19rZXkoJ3JlZndpbmRvdycpOiAgbWFzdGVyPSBrd1sncmVmd2luZG93J10KKyAgICAgICAgaWYgbm90IG1hc3RlciBhbmQgJ3JlZndpbmRvdycgaW4gY25mOiBtYXN0ZXI9Y25mWydyZWZ3aW5kb3cnXQorICAgICAgICBlbGlmIG5vdCBtYXN0ZXIgYW5kICdyZWZ3aW5kb3cnIGluIGt3OiAgbWFzdGVyPSBrd1sncmVmd2luZG93J10KICAgICAgICAgZWxpZiBub3QgbWFzdGVyOiByYWlzZSBSdW50aW1lRXJyb3IsICJUb28gZWFybHkgdG8gY3JlYXRlIGRpc3BsYXkgc3R5bGU6IG5vIHJvb3Qgd2luZG93IgogICAgICAgICBzZWxmLnRrID0gbWFzdGVyLnRrCiAgICAgICAgIHNlbGYuc3R5bGVuYW1lID0gc2VsZi50ay5jYWxsKCd0aXhEaXNwbGF5U3R5bGUnLCBpdGVtdHlwZSwKQEAgLTU1Niw3ICs1NzEsNyBAQAogICAgICAgICByZXR1cm4gYnRuCiAKICAgICBkZWYgaW52b2tlKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBzZWxmLnN1YndpZGdldF9saXN0Lmhhc19rZXkobmFtZSk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5zdWJ3aWRnZXRfbGlzdDoKICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW52b2tlJywgbmFtZSkKIAogY2xhc3MgQ29tYm9Cb3goVGl4V2lkZ2V0KToKQEAgLTg1MCw3ICs4NjUsNyBAQAogICAgICAgICAjIEZJWE1FOiByZXR1cm4gcHl0aG9uIG9iamVjdAogICAgICAgICBwYXNzCiAKLWNsYXNzIEhMaXN0KFRpeFdpZGdldCk6CitjbGFzcyBITGlzdChUaXhXaWRnZXQsIFhWaWV3LCBZVmlldyk6CiAgICAgIiIiSExpc3QgLSBIaWVyYXJjaHkgZGlzcGxheSAgd2lkZ2V0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgYW55IGRhdGEKICAgICB0aGF0IGhhdmUgYSBoaWVyYXJjaGljYWwgc3RydWN0dXJlLCBmb3IgZXhhbXBsZSwgZmlsZSBzeXN0ZW0gZGlyZWN0b3J5CiAgICAgdHJlZXMuIFRoZSBsaXN0IGVudHJpZXMgYXJlIGluZGVudGVkIGFuZCBjb25uZWN0ZWQgYnkgYnJhbmNoIGxpbmVzCkBAIC05NjEsNiArOTc2LDEwIEBACiAgICAgZGVmIGluZm9fYW5jaG9yKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdpbmZvJywgJ2FuY2hvcicpCiAKKyAgICBkZWYgaW5mb19iYm94KHNlbGYsIGVudHJ5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldGludHMoCisgICAgICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdpbmZvJywgJ2Jib3gnLCBlbnRyeSkpIG9yIE5vbmUKKwogICAgIGRlZiBpbmZvX2NoaWxkcmVuKHNlbGYsIGVudHJ5PU5vbmUpOgogICAgICAgICBjID0gc2VsZi50ay5jYWxsKHNlbGYuX3csICdpbmZvJywgJ2NoaWxkcmVuJywgZW50cnkpCiAgICAgICAgIHJldHVybiBzZWxmLnRrLnNwbGl0bGlzdChjKQpAQCAtOTY4LDYgKzk4NywxMiBAQAogICAgIGRlZiBpbmZvX2RhdGEoc2VsZiwgZW50cnkpOgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdpbmZvJywgJ2RhdGEnLCBlbnRyeSkKIAorICAgIGRlZiBpbmZvX2RyYWdzaXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdpbmZvJywgJ2RyYWdzaXRlJykKKworICAgIGRlZiBpbmZvX2Ryb3BzaXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdpbmZvJywgJ2Ryb3BzaXRlJykKKwogICAgIGRlZiBpbmZvX2V4aXN0cyhzZWxmLCBlbnRyeSk6CiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2luZm8nLCAnZXhpc3RzJywgZW50cnkpCiAKQEAgLTEwMzcsMTIgKzEwNjIsNiBAQAogICAgIGRlZiBzaG93X2VudHJ5KHNlbGYsIGVudHJ5KToKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAnc2hvdycsICdlbnRyeScsIGVudHJ5KQogCi0gICAgZGVmIHh2aWV3KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICphcmdzKQotCi0gICAgZGVmIHl2aWV3KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycsICphcmdzKQotCiBjbGFzcyBJbnB1dE9ubHkoVGl4V2lkZ2V0KToKICAgICAiIiJJbnB1dE9ubHkgLSBJbnZpc2libGUgd2lkZ2V0LiBVbml4IG9ubHkuCiAKQEAgLTExODIsNyArMTIwMSw4IEBACiAgICAgbWVudSAgICAgICAgICAgIE1lbnUiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXIsIGNuZj17fSwgKiprdyk6Ci0gICAgICAgIFRpeFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICd0aXhPcHRpb25NZW51JywgWydvcHRpb25zJ10sIGNuZiwga3cpCisgICAgICAgIFRpeFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICd0aXhPcHRpb25NZW51JywKKyAgICAgICAgICAgICAgICBbJ2xhYmVsc2lkZScsICdvcHRpb25zJ10sIGNuZiwga3cpCiAgICAgICAgIHNlbGYuc3Vid2lkZ2V0X2xpc3RbJ21lbnVidXR0b24nXSA9IF9kdW1teU1lbnVidXR0b24oc2VsZiwgJ21lbnVidXR0b24nKQogICAgICAgICBzZWxmLnN1YndpZGdldF9saXN0WydtZW51J10gPSBfZHVtbXlNZW51KHNlbGYsICdtZW51JykKIApAQCAtMTI0MSwxMSArMTI2MSw4IEBACiAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAncGFuZWNvbmZpZ3VyZScsIGVudHJ5LCAqc2VsZi5fb3B0aW9ucyhjbmYsIGt3KSkKIAogICAgIGRlZiBwYW5lcyhzZWxmKToKLSAgICAgICAgbmFtZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3BhbmVzJykKLSAgICAgICAgcmV0ID0gW10KLSAgICAgICAgZm9yIHggaW4gbmFtZXM6Ci0gICAgICAgICAgICByZXQuYXBwZW5kKHNlbGYuc3Vid2lkZ2V0KHgpKQotICAgICAgICByZXR1cm4gcmV0CisgICAgICAgIG5hbWVzID0gc2VsZi50ay5zcGxpdGxpc3Qoc2VsZi50ay5jYWxsKHNlbGYuX3csICdwYW5lcycpKQorICAgICAgICByZXR1cm4gW3NlbGYuc3Vid2lkZ2V0KHgpIGZvciB4IGluIG5hbWVzXQogCiBjbGFzcyBQb3B1cE1lbnUoVGl4V2lkZ2V0KToKICAgICAiIiJQb3B1cE1lbnUgd2lkZ2V0IGNhbiBiZSB1c2VkIGFzIGEgcmVwbGFjZW1lbnQgb2YgdGhlIHRrX3BvcHVwIGNvbW1hbmQuCkBAIC0xNDE2LDEwICsxNDMzLDEwIEBACiAgICAgICAgIHNlbGYuc3Vid2lkZ2V0X2xpc3RbJ2hlbHAnXSA9IF9kdW1teUJ1dHRvbihzZWxmLCAnaGVscCcpCiAKICAgICBkZWYgaW52b2tlKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBzZWxmLnN1YndpZGdldF9saXN0Lmhhc19rZXkobmFtZSk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5zdWJ3aWRnZXRfbGlzdDoKICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW52b2tlJywgbmFtZSkKIAotY2xhc3MgVExpc3QoVGl4V2lkZ2V0KToKK2NsYXNzIFRMaXN0KFRpeFdpZGdldCwgWFZpZXcsIFlWaWV3KToKICAgICAiIiJUTGlzdCAtIEhpZXJhcmNoeSBkaXNwbGF5IHdpZGdldCB3aGljaCBjYW4gYmUKICAgICB1c2VkIHRvIGRpc3BsYXkgZGF0YSBpbiBhIHRhYnVsYXIgZm9ybWF0LiBUaGUgbGlzdCBlbnRyaWVzIG9mIGEgVExpc3QKICAgICB3aWRnZXQgYXJlIHNpbWlsYXIgdG8gdGhlIGVudHJpZXMgaW4gdGhlIFRrIGxpc3Rib3ggd2lkZ2V0LiBUaGUgbWFpbgpAQCAtMTUwMiwxMiArMTUxOSw2IEBACiAgICAgZGVmIHNlbGVjdGlvbl9zZXQoc2VsZiwgZmlyc3QsIGxhc3Q9Tm9uZSk6CiAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnc2VsZWN0aW9uJywgJ3NldCcsIGZpcnN0LCBsYXN0KQogCi0gICAgZGVmIHh2aWV3KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICphcmdzKQotCi0gICAgZGVmIHl2aWV3KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycsICphcmdzKQotCiBjbGFzcyBUcmVlKFRpeFdpZGdldCk6CiAgICAgIiIiVHJlZSAtIFRoZSB0aXhUcmVlIHdpZGdldCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGhpZXJhY2hpY2FsCiAgICAgZGF0YSBpbiBhIHRyZWUgZm9ybS4gVGhlIHVzZXIgY2FuIGFkanVzdApAQCAtMTU2Myw3ICsxNTc0LDcgQEAKICAgICAjIEZJWE1FOiBJdCBzaG91bGQgaW5oZXJpdCAtc3VwZXJjbGFzcyB0aXhUcmVlCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgogICAgICAgICBUaXhXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAndGl4Q2hlY2tMaXN0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnb3B0aW9ucyddLCBjbmYsIGt3KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgWydvcHRpb25zJywgJ3JhZGlvJ10sIGNuZiwga3cpCiAgICAgICAgIHNlbGYuc3Vid2lkZ2V0X2xpc3RbJ2hsaXN0J10gPSBfZHVtbXlITGlzdChzZWxmLCAnaGxpc3QnKQogICAgICAgICBzZWxmLnN1YndpZGdldF9saXN0Wyd2c2InXSA9IF9kdW1teVNjcm9sbGJhcihzZWxmLCAndnNiJykKICAgICAgICAgc2VsZi5zdWJ3aWRnZXRfbGlzdFsnaHNiJ10gPSBfZHVtbXlTY3JvbGxiYXIoc2VsZiwgJ2hzYicpCkBAIC0xNzc3LDcgKzE3ODgsNyBAQAogICAgIHBhc3MKIAogCi1jbGFzcyBHcmlkKFRpeFdpZGdldCk6CitjbGFzcyBHcmlkKFRpeFdpZGdldCwgWFZpZXcsIFlWaWV3KToKICAgICAnJydUaGUgVGl4IEdyaWQgY29tbWFuZCBjcmVhdGVzIGEgbmV3IHdpbmRvdyAgYW5kIG1ha2VzIGl0IGludG8gYQogICAgIHRpeEdyaWQgd2lkZ2V0LiBBZGRpdGlvbmFsIG9wdGlvbnMsIG1heSBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQKICAgICBsaW5lIG9yIGluIHRoZSBvcHRpb24gZGF0YWJhc2UgdG8gY29uZmlndXJlIGFzcGVjdHMgc3VjaCBhcyBpdHMgY3Vyc29yCkBAIC0xODAxLDE2ICsxODEyLDIxIEBACiAgICAgICAgIFRpeFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICd0aXhHcmlkJywgc3RhdGljLCBjbmYsIGt3KQogCiAgICAgIyB2YWxpZCBvcHRpb25zIGFzIG9mIFRrIDguNAotICAgICMgYW5jaG9yLCBiZHR5cGUsIGNnZXQsIGNvbmZpZ3VyZSwgZGVsZXRlLCBkcmFnc2l0ZSwgZHJvcHNpdGUsIGVudHJ5Y2dldCwgZWRpdAotICAgICMgZW50cnljb25maWd1cmUsIGZvcm1hdCwgZ2VvbWV0cnlpbmZvLCBpbmZvLCBpbmRleCwgbW92ZSwgbmVhcmVzdCwgc2VsZWN0aW9uCi0gICAgIyBzZXQsIHNpemUsIHVuc2V0LCB4dmlldywgeXZpZXcKLSAgICAjIGRlZiBhbmNob3Igb3B0aW9uID9hcmdzIC4uLj8KKyAgICAjIGFuY2hvciwgYmR0eXBlLCBjZ2V0LCBjb25maWd1cmUsIGRlbGV0ZSwgZHJhZ3NpdGUsIGRyb3BzaXRlLCBlbnRyeWNnZXQsCisgICAgIyBlZGl0LCBlbnRyeWNvbmZpZ3VyZSwgZm9ybWF0LCBnZW9tZXRyeWluZm8sIGluZm8sIGluZGV4LCBtb3ZlLCBuZWFyZXN0LAorICAgICMgc2VsZWN0aW9uLCBzZXQsIHNpemUsIHVuc2V0LCB4dmlldywgeXZpZXcKKyAgICBkZWYgYW5jaG9yX2NsZWFyKHNlbGYpOgorICAgICAgICAiIiJSZW1vdmVzIHRoZSBzZWxlY3Rpb24gYW5jaG9yLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ2FuY2hvcicsICdjbGVhcicpCisKICAgICBkZWYgYW5jaG9yX2dldChzZWxmKToKICAgICAgICAgIkdldCB0aGUgKHgseSkgY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBhbmNob3IgY2VsbCIKICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGludHMoc2VsZi50ay5jYWxsKHNlbGYsICdhbmNob3InLCAnZ2V0JykpCiAKLSAgICAjIGRlZiBiZHR5cGUKLSAgICAjIGRlZiBkZWxldGUgZGltIGZyb20gP3RvPworICAgIGRlZiBhbmNob3Jfc2V0KHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJTZXQgdGhlIHNlbGVjdGlvbiBhbmNob3IgdG8gdGhlIGNlbGwgYXQgKHgsIHkpLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ2FuY2hvcicsICdzZXQnLCB4LCB5KQorCiAgICAgZGVmIGRlbGV0ZV9yb3coc2VsZiwgZnJvbV8sIHRvPU5vbmUpOgogICAgICAgICAiIiJEZWxldGUgcm93cyBiZXR3ZWVuIGZyb21fIGFuZCB0byBpbmNsdXNpdmUuCiAgICAgICAgIElmIHRvIGlzIG5vdCBwcm92aWRlZCwgIGRlbGV0ZSBvbmx5IHJvdyBhdCBmcm9tXyIiIgpAQCAtMTgxOCw2ICsxODM0LDcgQEAKICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnZGVsZXRlJywgJ3JvdycsIGZyb21fKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdkZWxldGUnLCAncm93JywgZnJvbV8sIHRvKQorCiAgICAgZGVmIGRlbGV0ZV9jb2x1bW4oc2VsZiwgZnJvbV8sIHRvPU5vbmUpOgogICAgICAgICAiIiJEZWxldGUgY29sdW1ucyBiZXR3ZWVuIGZyb21fIGFuZCB0byBpbmNsdXNpdmUuCiAgICAgICAgIElmIHRvIGlzIG5vdCBwcm92aWRlZCwgIGRlbGV0ZSBvbmx5IGNvbHVtbiBhdCBmcm9tXyIiIgpAQCAtMTgyNSwyNiArMTg0Miw0OSBAQAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdkZWxldGUnLCAnY29sdW1uJywgZnJvbV8pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ2RlbGV0ZScsICdjb2x1bW4nLCBmcm9tXywgdG8pCi0gICAgIyBkZWYgZWRpdCBhcHBseQotICAgICMgZGVmIGVkaXQgc2V0IHggeQorCisgICAgZGVmIGVkaXRfYXBwbHkoc2VsZik6CisgICAgICAgICIiIklmIGFueSBjZWxsIGlzIGJlaW5nIGVkaXRlZCwgZGUtaGlnaGxpZ2h0IHRoZSBjZWxsICBhbmQgIGFwcGxpZXMKKyAgICAgICAgdGhlIGNoYW5nZXMuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnZWRpdCcsICdhcHBseScpCisKKyAgICBkZWYgZWRpdF9zZXQoc2VsZiwgeCwgeSk6CisgICAgICAgICIiIkhpZ2hsaWdodHMgIHRoZSAgY2VsbCAgYXQgICh4LCB5KSBmb3IgZWRpdGluZywgaWYgdGhlIC1lZGl0bm90aWZ5CisgICAgICAgIGNvbW1hbmQgcmV0dXJucyBUcnVlIGZvciB0aGlzIGNlbGwuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnZWRpdCcsICdzZXQnLCB4LCB5KQogCiAgICAgZGVmIGVudHJ5Y2dldChzZWxmLCB4LCB5LCBvcHRpb24pOgogICAgICAgICAiR2V0IHRoZSBvcHRpb24gdmFsdWUgZm9yIGNlbGwgYXQgKHgseSkiCisgICAgICAgIGlmIG9wdGlvbiBhbmQgb3B0aW9uWzBdICE9ICctJzoKKyAgICAgICAgICAgIG9wdGlvbiA9ICctJyArIG9wdGlvbgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYsICdlbnRyeWNnZXQnLCB4LCB5LCBvcHRpb24pCiAKLSAgICBkZWYgZW50cnljb25maWd1cmUoc2VsZiwgeCwgeSwgKiprdyk6Ci0gICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZiwgJ2VudHJ5Y29uZmlndXJlJywgeCwgeSwgKnNlbGYuX29wdGlvbnMoTm9uZSwga3cpKQorICAgIGRlZiBlbnRyeWNvbmZpZ3VyZShzZWxmLCB4LCB5LCBjbmY9Tm9uZSwgKiprdyk6CisgICAgICAgIHJldHVybiBzZWxmLl9jb25maWd1cmUoKCdlbnRyeWNvbmZpZ3VyZScsIHgsIHkpLCBjbmYsIGt3KQorCiAgICAgIyBkZWYgZm9ybWF0CiAgICAgIyBkZWYgaW5kZXgKIAogICAgIGRlZiBpbmZvX2V4aXN0cyhzZWxmLCB4LCB5KToKICAgICAgICAgIlJldHVybiBUcnVlIGlmIGRpc3BsYXkgaXRlbSBleGlzdHMgYXQgKHgseSkiCi0gICAgICAgIHJldHVybiBib29sKGludChzZWxmLnRrLmNhbGwoc2VsZiwgJ2luZm8nLCAnZXhpc3RzJywgeCwgeSkpKQorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0Ym9vbGVhbihzZWxmLnRrLmNhbGwoc2VsZiwgJ2luZm8nLCAnZXhpc3RzJywgeCwgeSkpCiAKICAgICBkZWYgaW5mb19iYm94KHNlbGYsIHgsIHkpOgogICAgICAgICAjIFRoaXMgc2VlbXMgdG8gYWx3YXlzIHJldHVybiAnJywgYXQgbGVhc3QgZm9yICd0ZXh0JyBkaXNwbGF5aXRlbXMKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLCAnaW5mbycsICdiYm94JywgeCwgeSkKIAorICAgIGRlZiBtb3ZlX2NvbHVtbihzZWxmLCBmcm9tXywgdG8sIG9mZnNldCk6CisgICAgICAgICIiIk1vdmVzIHRoZSB0aGUgcmFuZ2Ugb2YgY29sdW1ucyBmcm9tIHBvc2l0aW9uIEZST00gdGhyb3VnaCBUTyBieQorICAgICAgICB0aGUgZGlzdGFuY2UgaW5kaWNhdGVkIGJ5IE9GRlNFVC4gRm9yIGV4YW1wbGUsIG1vdmVfY29sdW1uKDIsIDQsIDEpCisgICAgICAgIG1vdmVzIHRoZSBjb2x1bW5zIDIsMyw0IHRvIGNvbHVtbnMgMyw0LDUuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnbW92ZScsICdjb2x1bW4nLCBmcm9tXywgdG8sIG9mZnNldCkKKworICAgIGRlZiBtb3ZlX3JvdyhzZWxmLCBmcm9tXywgdG8sIG9mZnNldCk6CisgICAgICAgICIiIk1vdmVzIHRoZSB0aGUgcmFuZ2Ugb2Ygcm93cyBmcm9tIHBvc2l0aW9uIEZST00gdGhyb3VnaCBUTyBieQorICAgICAgICB0aGUgZGlzdGFuY2UgaW5kaWNhdGVkIGJ5IE9GRlNFVC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIG1vdmVfcm93KDIsIDQsIDEpIG1vdmVzIHRoZSByb3dzIDIsMyw0IHRvIHJvd3MgMyw0LDUuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnbW92ZScsICdyb3cnLCBmcm9tXywgdG8sIG9mZnNldCkKKwogICAgIGRlZiBuZWFyZXN0KHNlbGYsIHgsIHkpOgogICAgICAgICAiUmV0dXJuIGNvb3JkaW5hdGUgb2YgY2VsbCBuZWFyZXN0IHBpeGVsIGNvb3JkaW5hdGUgKHgseSkiCiAgICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKHNlbGYudGsuY2FsbChzZWxmLCAnbmVhcmVzdCcsIHgsIHkpKQpAQCAtMTg1NCw3ICsxODk0LDYgQEAKICAgICAjIGRlZiBzZWxlY3Rpb24gaW5jbHVkZXMKICAgICAjIGRlZiBzZWxlY3Rpb24gc2V0CiAgICAgIyBkZWYgc2VsZWN0aW9uIHRvZ2dsZQotICAgICMgZGVmIG1vdmUgZGltIGZyb20gdG8gb2Zmc2V0CiAKICAgICBkZWYgc2V0KHNlbGYsIHgsIHksIGl0ZW10eXBlPU5vbmUsICoqa3cpOgogICAgICAgICBhcmdzPSBzZWxmLl9vcHRpb25zKHNlbGYuY25mLCBrdykKQEAgLTE4NjIsMjQgKzE5MDEsNTkgQEAKICAgICAgICAgICAgIGFyZ3M9ICgnLWl0ZW10eXBlJywgaXRlbXR5cGUpICsgYXJncwogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ3NldCcsIHgsIHksICphcmdzKQogCi0gICAgIyBkZWYgc2l6ZSBkaW0gaW5kZXggP29wdGlvbiB2YWx1ZSAuLi4/Ci0gICAgIyBkZWYgdW5zZXQgeCB5CisgICAgZGVmIHNpemVfY29sdW1uKHNlbGYsIGluZGV4LCAqKmt3KToKKyAgICAgICAgIiIiUXVlcmllcyAgb3IgIHNldHMgdGhlIHNpemUgb2YgdGhlIGNvbHVtbiBnaXZlbiBieQorICAgICAgICBJTkRFWC4gIElOREVYIG1heSBiZSBhbnkgIG5vbi1uZWdhdGl2ZQorICAgICAgICBpbnRlZ2VyICB0aGF0ICBnaXZlcyAgdGhlICBwb3NpdGlvbiAgb2YgYSBnaXZlbiBjb2x1bW4uCisgICAgICAgIElOREVYIGNhbiBhbHNvIGJlIHRoZSBzdHJpbmcgImRlZmF1bHQiOyBpbiB0aGlzIGNhc2UsIHRoaXMgY29tbWFuZAorICAgICAgICBxdWVyaWVzIG9yIHNldHMgdGhlIGRlZmF1bHQgc2l6ZSBvZiBhbGwgY29sdW1ucy4KKyAgICAgICAgV2hlbiAgbm8gIG9wdGlvbi12YWx1ZSAgcGFpciBpcyBnaXZlbiwgdGhpcyBjb21tYW5kIHJldHVybnMgYSB0dXBsZQorICAgICAgICBjb250YWluaW5nIHRoZSBjdXJyZW50IHNpemUgc2V0dGluZyBvZiB0aGUgZ2l2ZW4gIGNvbHVtbi4gIFdoZW4KKyAgICAgICAgb3B0aW9uLXZhbHVlICBwYWlycyAgYXJlICBnaXZlbiwgIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbnMgb2YgdGhlCisgICAgICAgIHNpemUgc2V0dGluZyBvZiB0aGUgZ2l2ZW4gY29sdW1uIGFyZSBjaGFuZ2VkLiBPcHRpb25zIG1heSBiZSBvbmUKKyAgICAgICAgb2YgIHRoZSAgZm9sbHdpbmc6CisgICAgICAgICAgICAgIHBhZDAgcGl4ZWxzCisgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhZGRpbmdzIHRvIHRoZSBsZWZ0IG9mIGEgY29sdW1uLgorICAgICAgICAgICAgICBwYWQxIHBpeGVscworICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYWRkaW5ncyB0byB0aGUgcmlnaHQgb2YgYSAgY29sdW1uLgorICAgICAgICAgICAgICBzaXplIHZhbAorICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzICB0aGUgIHdpZHRoIG9mIGEgY29sdW1uIC4KKyAgICAgICAgICAgICAgICAgICAgIFZhbCBtYXkgYmU6ICJhdXRvIiAtLSB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBpcyBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICB0aGUgd2lkZXN0IGNlbGwgaW4gdGhlIGNvbHVtbjsgYSB2YWxpZCBUayBzY3JlZW4gZGlzdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgIHVuaXQ7IG9yIGEgcmVhbCBudW1iZXIgZm9sbG93aW5nIGJ5IHRoZSB3b3JkIGNoYXJzCisgICAgICAgICAgICAgICAgICAgICAoZS5nLiAzLjRjaGFycykgdGhhdCBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLnNwbGl0KHNlbGYudGsuY2FsbChzZWxmLl93LCAnc2l6ZScsICdjb2x1bW4nLCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNlbGYuX29wdGlvbnMoe30sIGt3KSkpCiAKLSAgICBkZWYgeHZpZXcoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9nZXRkb3VibGVzKHNlbGYudGsuY2FsbChzZWxmLCAneHZpZXcnKSkKLSAgICBkZWYgeHZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsJ3h2aWV3JywgJ21vdmV0bycsIGZyYWN0aW9uKQotICAgIGRlZiB4dmlld19zY3JvbGwoc2VsZiwgY291bnQsIHdoYXQ9InVuaXRzIik6Ci0gICAgICAgICJTY3JvbGwgcmlnaHQgKGNvdW50PjApIG9yIGxlZnQgPGNvdW50PiBvZiB1bml0c3xwYWdlcyIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICd4dmlldycsICdzY3JvbGwnLCBjb3VudCwgd2hhdCkKKyAgICBkZWYgc2l6ZV9yb3coc2VsZiwgaW5kZXgsICoqa3cpOgorICAgICAgICAiIiJRdWVyaWVzICBvciAgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgcm93IGdpdmVuIGJ5CisgICAgICAgIElOREVYLiBJTkRFWCBtYXkgYmUgYW55ICBub24tbmVnYXRpdmUKKyAgICAgICAgaW50ZWdlciAgdGhhdCAgZ2l2ZXMgIHRoZSAgcG9zaXRpb24gIG9mIGEgZ2l2ZW4gcm93IC4KKyAgICAgICAgSU5ERVggY2FuIGFsc28gYmUgdGhlIHN0cmluZyAiZGVmYXVsdCI7IGluIHRoaXMgY2FzZSwgdGhpcyBjb21tYW5kCisgICAgICAgIHF1ZXJpZXMgb3Igc2V0cyB0aGUgZGVmYXVsdCBzaXplIG9mIGFsbCByb3dzLgorICAgICAgICBXaGVuICBubyBvcHRpb24tdmFsdWUgcGFpciBpcyBnaXZlbiwgdGhpcyBjb21tYW5kIHJldHVybnMgYSBsaXN0IGNvbi0KKyAgICAgICAgdGFpbmluZyB0aGUgY3VycmVudCBzaXplIHNldHRpbmcgb2YgdGhlIGdpdmVuICByb3cgLiBXaGVuIG9wdGlvbi12YWx1ZQorICAgICAgICBwYWlycyBhcmUgZ2l2ZW4sIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbnMgb2YgdGhlIHNpemUgc2V0dGluZyBvZiB0aGUKKyAgICAgICAgZ2l2ZW4gcm93IGFyZSBjaGFuZ2VkLiBPcHRpb25zIG1heSBiZSBvbmUgb2YgdGhlIGZvbGx3aW5nOgorICAgICAgICAgICAgICBwYWQwIHBpeGVscworICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYWRkaW5ncyB0byB0aGUgdG9wIG9mIGEgcm93LgorICAgICAgICAgICAgICBwYWQxIHBpeGVscworICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYWRkaW5ncyB0byB0aGUgdGhlIGJvdHRvbSBvZiBhIHJvdy4KKyAgICAgICAgICAgICAgc2l6ZSB2YWwKKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyAgdGhlIGhlaWdodCBvZiBhIHJvdy4KKyAgICAgICAgICAgICAgICAgICAgIFZhbCBtYXkgYmU6ICJhdXRvIiAtLSB0aGUgaGVpZ2h0IG9mIHRoZSByb3cgIGlzICBzZXQgIHRoZQorICAgICAgICAgICAgICAgICAgICAgdGhlIGhpZ2hlc3QgY2VsbCBpbiB0aGUgcm93OyBhIHZhbGlkIFRrIHNjcmVlbiBkaXN0YW5jZQorICAgICAgICAgICAgICAgICAgICAgdW5pdDsgb3IgYSByZWFsIG51bWJlciBmb2xsb3dpbmcgYnkgdGhlIHdvcmQgY2hhcnMKKyAgICAgICAgICAgICAgICAgICAgIChlLmcuIDMuNGNoYXJzKSB0aGF0IHNldHMgdGhlIGhlaWdodCBvZiB0aGUgcm93IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLnNwbGl0KHNlbGYudGsuY2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZiwgJ3NpemUnLCAncm93JywgaW5kZXgsICpzZWxmLl9vcHRpb25zKHt9LCBrdykpKQogCi0gICAgZGVmIHl2aWV3KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZ2V0ZG91YmxlcyhzZWxmLnRrLmNhbGwoc2VsZiwgJ3l2aWV3JykpCi0gICAgZGVmIHl2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6Ci0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCd5c3ZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCi0gICAgZGVmIHl2aWV3X3Njcm9sbChzZWxmLCBjb3VudCwgd2hhdD0idW5pdHMiKToKLSAgICAgICAgIlNjcm9sbCBkb3duIChjb3VudD4wKSBvciB1cCA8Y291bnQ+IG9mIHVuaXRzfHBhZ2VzIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ3l2aWV3JywgJ3Njcm9sbCcsIGNvdW50LCB3aGF0KQorICAgIGRlZiB1bnNldChzZWxmLCB4LCB5KToKKyAgICAgICAgIiIiQ2xlYXJzIHRoZSBjZWxsIGF0ICh4LCB5KSBieSByZW1vdmluZyBpdHMgZGlzcGxheSBpdGVtLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3Vuc2V0JywgeCwgeSkKKwogCiBjbGFzcyBTY3JvbGxlZEdyaWQoR3JpZCk6CiAgICAgJycnU2Nyb2xsZWQgR3JpZCB3aWRnZXRzJycnCmRpZmYgLS1naXQgYS9MaWIvbGliLXRrL1RraW50ZXIucHkgYi9MaWIvbGliLXRrL1RraW50ZXIucHkKaW5kZXggM2NjZTI3Ni4uMTUxNmQ3OSAxMDA2NDQKLS0tIGEvTGliL2xpYi10ay9Ua2ludGVyLnB5CisrKyBiL0xpYi9saWItdGsvVGtpbnRlci5weQpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAKICAgICAgICAgQSB3aWRnZXQgc3BlY2lmaWVkIGZvciB0aGUgb3B0aW9uYWwgZGlzcGxheW9mIGtleXdvcmQKICAgICAgICAgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSB0YXJnZXQgZGlzcGxheS4iIiIKLSAgICAgICAgaWYgbm90IGt3Lmhhc19rZXkoJ2Rpc3BsYXlvZicpOiBrd1snZGlzcGxheW9mJ10gPSBzZWxmLl93CisgICAgICAgIGlmICdkaXNwbGF5b2YnIG5vdCBpbiBrdzoga3dbJ2Rpc3BsYXlvZiddID0gc2VsZi5fdwogICAgICAgICBzZWxmLnRrLmNhbGwoKCdjbGlwYm9hcmQnLCAnY2xlYXInKSArIHNlbGYuX29wdGlvbnMoa3cpKQogICAgIGRlZiBjbGlwYm9hcmRfYXBwZW5kKHNlbGYsIHN0cmluZywgKiprdyk6CiAgICAgICAgICIiIkFwcGVuZCBTVFJJTkcgdG8gdGhlIFRrIGNsaXBib2FyZC4KQEAgLTU1NSw3ICs1NTUsNyBAQAogICAgICAgICBBIHdpZGdldCBzcGVjaWZpZWQgYXQgdGhlIG9wdGlvbmFsIGRpc3BsYXlvZiBrZXl3b3JkCiAgICAgICAgIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgdGFyZ2V0IGRpc3BsYXkuIFRoZSBjbGlwYm9hcmQKICAgICAgICAgY2FuIGJlIHJldHJpZXZlZCB3aXRoIHNlbGVjdGlvbl9nZXQuIiIiCi0gICAgICAgIGlmIG5vdCBrdy5oYXNfa2V5KCdkaXNwbGF5b2YnKToga3dbJ2Rpc3BsYXlvZiddID0gc2VsZi5fdworICAgICAgICBpZiAnZGlzcGxheW9mJyBub3QgaW4ga3c6IGt3WydkaXNwbGF5b2YnXSA9IHNlbGYuX3cKICAgICAgICAgc2VsZi50ay5jYWxsKCgnY2xpcGJvYXJkJywgJ2FwcGVuZCcpICsgc2VsZi5fb3B0aW9ucyhrdykKICAgICAgICAgICAgICAgKyAoJy0tJywgc3RyaW5nKSkKICAgICAjIFhYWCBncmFiIGN1cnJlbnQgdy9vIHdpbmRvdyBhcmd1bWVudApAQCAtNjEzLDcgKzYxMyw3IEBACiAgICAgICAgIHNlbGYudGsuY2FsbCgnb3B0aW9uJywgJ3JlYWRmaWxlJywgZmlsZU5hbWUsIHByaW9yaXR5KQogICAgIGRlZiBzZWxlY3Rpb25fY2xlYXIoc2VsZiwgKiprdyk6CiAgICAgICAgICIiIkNsZWFyIHRoZSBjdXJyZW50IFggc2VsZWN0aW9uLiIiIgotICAgICAgICBpZiBub3Qga3cuaGFzX2tleSgnZGlzcGxheW9mJyk6IGt3WydkaXNwbGF5b2YnXSA9IHNlbGYuX3cKKyAgICAgICAgaWYgJ2Rpc3BsYXlvZicgbm90IGluIGt3OiBrd1snZGlzcGxheW9mJ10gPSBzZWxmLl93CiAgICAgICAgIHNlbGYudGsuY2FsbCgoJ3NlbGVjdGlvbicsICdjbGVhcicpICsgc2VsZi5fb3B0aW9ucyhrdykpCiAgICAgZGVmIHNlbGVjdGlvbl9nZXQoc2VsZiwgKiprdyk6CiAgICAgICAgICIiIlJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgWCBzZWxlY3Rpb24uCkBAIC02MjIsNyArNjIyLDcgQEAKICAgICAgICAgdGhlIHNlbGVjdGlvbiBhbmQgZGVmYXVsdHMgdG8gUFJJTUFSWS4gIEEga2V5d29yZAogICAgICAgICBwYXJhbWV0ZXIgZGlzcGxheW9mIHNwZWNpZmllcyBhIHdpZGdldCBvbiB0aGUgZGlzcGxheQogICAgICAgICB0byB1c2UuIiIiCi0gICAgICAgIGlmIG5vdCBrdy5oYXNfa2V5KCdkaXNwbGF5b2YnKToga3dbJ2Rpc3BsYXlvZiddID0gc2VsZi5fdworICAgICAgICBpZiAnZGlzcGxheW9mJyBub3QgaW4ga3c6IGt3WydkaXNwbGF5b2YnXSA9IHNlbGYuX3cKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbCgoJ3NlbGVjdGlvbicsICdnZXQnKSArIHNlbGYuX29wdGlvbnMoa3cpKQogICAgIGRlZiBzZWxlY3Rpb25faGFuZGxlKHNlbGYsIGNvbW1hbmQsICoqa3cpOgogICAgICAgICAiIiJTcGVjaWZ5IGEgZnVuY3Rpb24gQ09NTUFORCB0byBjYWxsIGlmIHRoZSBYCkBAIC02NTMsNyArNjUzLDcgQEAKICAgICAgICAgYmUgcHJvdmlkZWQ6CiAgICAgICAgIHNlbGVjdGlvbiAtIG5hbWUgb2YgdGhlIHNlbGVjdGlvbiAoZGVmYXVsdCBQUklNQVJZKSwKICAgICAgICAgdHlwZSAtIHR5cGUgb2YgdGhlIHNlbGVjdGlvbiAoZS5nLiBTVFJJTkcsIEZJTEVfTkFNRSkuIiIiCi0gICAgICAgIGlmIG5vdCBrdy5oYXNfa2V5KCdkaXNwbGF5b2YnKToga3dbJ2Rpc3BsYXlvZiddID0gc2VsZi5fdworICAgICAgICBpZiAnZGlzcGxheW9mJyBub3QgaW4ga3c6IGt3WydkaXNwbGF5b2YnXSA9IHNlbGYuX3cKICAgICAgICAgbmFtZSA9IHNlbGYudGsuY2FsbCgoJ3NlbGVjdGlvbicsICdvd24nKSArIHNlbGYuX29wdGlvbnMoa3cpKQogICAgICAgICBpZiBub3QgbmFtZTogcmV0dXJuIE5vbmUKICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWV0b3dpZGdldChuYW1lKQpAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAKICAgICAgICAgZm9yIGssIHYgaW4gY25mLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGlmIGtbLTFdID09ICdfJzogayA9IGtbOi0xXQotICAgICAgICAgICAgICAgIGlmIGNhbGxhYmxlKHYpOgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIodiwgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9yZWdpc3Rlcih2KQogICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2LCAodHVwbGUsIGxpc3QpKToKICAgICAgICAgICAgICAgICAgICAgbnYgPSBbXQpAQCAtMTQxNCw2ICsxNDE0LDQ4IEBACiAgICAgICAgICAgICBzZWxmLndpZGdldC5fcmVwb3J0X2V4Y2VwdGlvbigpCiAKIAorY2xhc3MgWFZpZXc6CisgICAgIiIiTWl4LWluIGNsYXNzIGZvciBxdWVyeWluZyBhbmQgY2hhbmdpbmcgdGhlIGhvcml6b250YWwgcG9zaXRpb24KKyAgICBvZiBhIHdpZGdldCdzIHdpbmRvdy4iIiIKKworICAgIGRlZiB4dmlldyhzZWxmLCAqYXJncyk6CisgICAgICAgICIiIlF1ZXJ5IGFuZCBjaGFuZ2UgdGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHZpZXcuIiIiCisgICAgICAgIHJlcyA9IHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAqYXJncykKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0ZG91YmxlcyhyZXMpCisKKyAgICBkZWYgeHZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKKyAgICAgICAgIiIiQWRqdXN0cyB0aGUgdmlldyBpbiB0aGUgd2luZG93IHNvIHRoYXQgRlJBQ1RJT04gb2YgdGhlCisgICAgICAgIHRvdGFsIHdpZHRoIG9mIHRoZSBjYW52YXMgaXMgb2ZmLXNjcmVlbiB0byB0aGUgbGVmdC4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKKworICAgIGRlZiB4dmlld19zY3JvbGwoc2VsZiwgbnVtYmVyLCB3aGF0KToKKyAgICAgICAgIiIiU2hpZnQgdGhlIHgtdmlldyBhY2NvcmRpbmcgdG8gTlVNQkVSIHdoaWNoIGlzIG1lYXN1cmVkIGluICJ1bml0cyIKKyAgICAgICAgb3IgInBhZ2VzIiAoV0hBVCkuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnc2Nyb2xsJywgbnVtYmVyLCB3aGF0KQorCisKK2NsYXNzIFlWaWV3OgorICAgICIiIk1peC1pbiBjbGFzcyBmb3IgcXVlcnlpbmcgYW5kIGNoYW5naW5nIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbgorICAgIG9mIGEgd2lkZ2V0J3Mgd2luZG93LiIiIgorCisgICAgZGVmIHl2aWV3KHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiUXVlcnkgYW5kIGNoYW5nZSB0aGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHZpZXcuIiIiCisgICAgICAgIHJlcyA9IHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAqYXJncykKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0ZG91YmxlcyhyZXMpCisKKyAgICBkZWYgeXZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKKyAgICAgICAgIiIiQWRqdXN0cyB0aGUgdmlldyBpbiB0aGUgd2luZG93IHNvIHRoYXQgRlJBQ1RJT04gb2YgdGhlCisgICAgICAgIHRvdGFsIGhlaWdodCBvZiB0aGUgY2FudmFzIGlzIG9mZi1zY3JlZW4gdG8gdGhlIHRvcC4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKKworICAgIGRlZiB5dmlld19zY3JvbGwoc2VsZiwgbnVtYmVyLCB3aGF0KToKKyAgICAgICAgIiIiU2hpZnQgdGhlIHktdmlldyBhY2NvcmRpbmcgdG8gTlVNQkVSIHdoaWNoIGlzIG1lYXN1cmVkIGluCisgICAgICAgICJ1bml0cyIgb3IgInBhZ2VzIiAoV0hBVCkuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAnc2Nyb2xsJywgbnVtYmVyLCB3aGF0KQorCisKIGNsYXNzIFdtOgogICAgICIiIlByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgd2luZG93IG1hbmFnZXIuIiIiCiAKQEAgLTE2OTMsNyArMTczNSw3IEBACiAgICAgICAgIHRoZSBUY2wgSW50ZXJwcmV0ZXIgYW5kIGNhbGxzIGV4ZWNmaWxlIG9uIEJBU0VOQU1FLnB5IGFuZCBDTEFTU05BTUUucHkgaWYKICAgICAgICAgc3VjaCBhIGZpbGUgZXhpc3RzIGluIHRoZSBob21lIGRpcmVjdG9yeS4iIiIKICAgICAgICAgaW1wb3J0IG9zCi0gICAgICAgIGlmIG9zLmVudmlyb24uaGFzX2tleSgnSE9NRScpOiBob21lID0gb3MuZW52aXJvblsnSE9NRSddCisgICAgICAgIGlmICdIT01FJyBpbiBvcy5lbnZpcm9uOiBob21lID0gb3MuZW52aXJvblsnSE9NRSddCiAgICAgICAgIGVsc2U6IGhvbWUgPSBvcy5jdXJkaXIKICAgICAgICAgY2xhc3NfdGNsID0gb3MucGF0aC5qb2luKGhvbWUsICcuJXMudGNsJyAlIGNsYXNzTmFtZSkKICAgICAgICAgY2xhc3NfcHkgPSBvcy5wYXRoLmpvaW4oaG9tZSwgJy4lcy5weScgJSBjbGFzc05hbWUpCkBAIC0xOTAwLDcgKzE5NDIsNyBAQAogICAgICAgICBzZWxmLm1hc3RlciA9IG1hc3RlcgogICAgICAgICBzZWxmLnRrID0gbWFzdGVyLnRrCiAgICAgICAgIG5hbWUgPSBOb25lCi0gICAgICAgIGlmIGNuZi5oYXNfa2V5KCduYW1lJyk6CisgICAgICAgIGlmICduYW1lJyBpbiBjbmY6CiAgICAgICAgICAgICBuYW1lID0gY25mWyduYW1lJ10KICAgICAgICAgICAgIGRlbCBjbmZbJ25hbWUnXQogICAgICAgICBpZiBub3QgbmFtZToKQEAgLTE5MTEsNyArMTk1Myw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl93ID0gbWFzdGVyLl93ICsgJy4nICsgbmFtZQogICAgICAgICBzZWxmLmNoaWxkcmVuID0ge30KLSAgICAgICAgaWYgc2VsZi5tYXN0ZXIuY2hpbGRyZW4uaGFzX2tleShzZWxmLl9uYW1lKToKKyAgICAgICAgaWYgc2VsZi5fbmFtZSBpbiBzZWxmLm1hc3Rlci5jaGlsZHJlbjoKICAgICAgICAgICAgIHNlbGYubWFzdGVyLmNoaWxkcmVuW3NlbGYuX25hbWVdLmRlc3Ryb3koKQogICAgICAgICBzZWxmLm1hc3Rlci5jaGlsZHJlbltzZWxmLl9uYW1lXSA9IHNlbGYKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyLCB3aWRnZXROYW1lLCBjbmY9e30sIGt3PXt9LCBleHRyYT0oKSk6CkBAIC0xOTM2LDcgKzE5NzgsNyBAQAogICAgICAgICAiIiJEZXN0cm95IHRoaXMgYW5kIGFsbCBkZXNjZW5kYW50cyB3aWRnZXRzLiIiIgogICAgICAgICBmb3IgYyBpbiBzZWxmLmNoaWxkcmVuLnZhbHVlcygpOiBjLmRlc3Ryb3koKQogICAgICAgICBzZWxmLnRrLmNhbGwoJ2Rlc3Ryb3knLCBzZWxmLl93KQotICAgICAgICBpZiBzZWxmLm1hc3Rlci5jaGlsZHJlbi5oYXNfa2V5KHNlbGYuX25hbWUpOgorICAgICAgICBpZiBzZWxmLl9uYW1lIGluIHNlbGYubWFzdGVyLmNoaWxkcmVuOgogICAgICAgICAgICAgZGVsIHNlbGYubWFzdGVyLmNoaWxkcmVuW3NlbGYuX25hbWVdCiAgICAgICAgIE1pc2MuZGVzdHJveShzZWxmKQogICAgIGRlZiBfZG8oc2VsZiwgbmFtZSwgYXJncz0oKSk6CkBAIC0xOTY0LDcgKzIwMDYsNyBAQAogICAgICAgICBleHRyYSA9ICgpCiAgICAgICAgIGZvciB3bWtleSBpbiBbJ3NjcmVlbicsICdjbGFzc18nLCAnY2xhc3MnLCAndmlzdWFsJywKICAgICAgICAgICAgICAgICAgICdjb2xvcm1hcCddOgotICAgICAgICAgICAgaWYgY25mLmhhc19rZXkod21rZXkpOgorICAgICAgICAgICAgaWYgd21rZXkgaW4gY25mOgogICAgICAgICAgICAgICAgIHZhbCA9IGNuZlt3bWtleV0KICAgICAgICAgICAgICAgICAjIFRCRDogYSBoYWNrIG5lZWRlZCBiZWNhdXNlIHNvbWUga2V5cwogICAgICAgICAgICAgICAgICMgYXJlIG5vdCB2YWxpZCBhcyBrZXl3b3JkIGFyZ3VtZW50cwpAQCAtMjA1Nyw3ICsyMDk5LDcgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gJ0AlciwlcicgJSAoeCwgeSkKIAotY2xhc3MgQ2FudmFzKFdpZGdldCk6CitjbGFzcyBDYW52YXMoV2lkZ2V0LCBYVmlldywgWVZpZXcpOgogICAgICIiIkNhbnZhcyB3aWRnZXQgdG8gZGlzcGxheSBncmFwaGljYWwgZWxlbWVudHMgbGlrZSBsaW5lcyBvciB0ZXh0LiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9LCAqKmt3KToKICAgICAgICAgIiIiQ29uc3RydWN0IGEgY2FudmFzIHdpZGdldCB3aXRoIHRoZSBwYXJlbnQgTUFTVEVSLgpAQCAtMjI5NywzMCArMjMzOSw2IEBACiAgICAgZGVmIHR5cGUoc2VsZiwgdGFnT3JJZCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgdHlwZSBvZiB0aGUgaXRlbSBUQUdPUklELiIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICd0eXBlJywgdGFnT3JJZCkgb3IgTm9uZQotICAgIGRlZiB4dmlldyhzZWxmLCAqYXJncyk6Ci0gICAgICAgICIiIlF1ZXJ5IGFuZCBjaGFuZ2UgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgdmlldy4iIiIKLSAgICAgICAgaWYgbm90IGFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0ZG91YmxlcyhzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JykpCi0gICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ3h2aWV3JykgKyBhcmdzKQotICAgIGRlZiB4dmlld19tb3ZldG8oc2VsZiwgZnJhY3Rpb24pOgotICAgICAgICAiIiJBZGp1c3RzIHRoZSB2aWV3IGluIHRoZSB3aW5kb3cgc28gdGhhdCBGUkFDVElPTiBvZiB0aGUKLSAgICAgICAgdG90YWwgd2lkdGggb2YgdGhlIGNhbnZhcyBpcyBvZmYtc2NyZWVuIHRvIHRoZSBsZWZ0LiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgJ21vdmV0bycsIGZyYWN0aW9uKQotICAgIGRlZiB4dmlld19zY3JvbGwoc2VsZiwgbnVtYmVyLCB3aGF0KToKLSAgICAgICAgIiIiU2hpZnQgdGhlIHgtdmlldyBhY2NvcmRpbmcgdG8gTlVNQkVSIHdoaWNoIGlzIG1lYXN1cmVkIGluICJ1bml0cyIgb3IgInBhZ2VzIiAoV0hBVCkuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnc2Nyb2xsJywgbnVtYmVyLCB3aGF0KQotICAgIGRlZiB5dmlldyhzZWxmLCAqYXJncyk6Ci0gICAgICAgICIiIlF1ZXJ5IGFuZCBjaGFuZ2UgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHZpZXcuIiIiCi0gICAgICAgIGlmIG5vdCBhcmdzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMoc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycpKQotICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICd5dmlldycpICsgYXJncykKLSAgICBkZWYgeXZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKLSAgICAgICAgIiIiQWRqdXN0cyB0aGUgdmlldyBpbiB0aGUgd2luZG93IHNvIHRoYXQgRlJBQ1RJT04gb2YgdGhlCi0gICAgICAgIHRvdGFsIGhlaWdodCBvZiB0aGUgY2FudmFzIGlzIG9mZi1zY3JlZW4gdG8gdGhlIHRvcC4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKLSAgICBkZWYgeXZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6Ci0gICAgICAgICIiIlNoaWZ0IHRoZSB5LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZCBpbiAidW5pdHMiIG9yICJwYWdlcyIgKFdIQVQpLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKIAogY2xhc3MgQ2hlY2tidXR0b24oV2lkZ2V0KToKICAgICAiIiJDaGVja2J1dHRvbiB3aWRnZXQgd2hpY2ggaXMgZWl0aGVyIGluIG9uLSBvciBvZmYtc3RhdGUuIiIiCkBAIC0yMzUxLDcgKzIzNjksNyBAQAogICAgICAgICAiIiJUb2dnbGUgdGhlIGJ1dHRvbi4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd0b2dnbGUnKQogCi1jbGFzcyBFbnRyeShXaWRnZXQpOgorY2xhc3MgRW50cnkoV2lkZ2V0LCBYVmlldyk6CiAgICAgIiIiRW50cnkgd2lkZ2V0IHdoaWNoIGFsbG93cyB0byBkaXNwbGF5IHNpbXBsZSB0ZXh0LiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9LCAqKmt3KToKICAgICAgICAgIiIiQ29uc3RydWN0IGFuIGVudHJ5IHdpZGdldCB3aXRoIHRoZSBwYXJlbnQgTUFTVEVSLgpAQCAtMjQwMiw3ICsyNDIwLDggQEAKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdzZWxlY3Rpb24nLCAnZnJvbScsIGluZGV4KQogICAgIHNlbGVjdF9mcm9tID0gc2VsZWN0aW9uX2Zyb20KICAgICBkZWYgc2VsZWN0aW9uX3ByZXNlbnQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSB3aWRnZXQgaGFzIHRoZSBzZWxlY3Rpb24uIiIiCisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIHNlbGVjdGVkIGluIHRoZSBlbnRyeSwgRmFsc2UKKyAgICAgICAgb3RoZXJ3aXNlLiIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRib29sZWFuKAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdzZWxlY3Rpb24nLCAncHJlc2VudCcpKQogICAgIHNlbGVjdF9wcmVzZW50ID0gc2VsZWN0aW9uX3ByZXNlbnQKQEAgLTI0MTQsMTYgKzI0MzMsNiBAQAogICAgICAgICAiIiJTZXQgdGhlIHZhcmlhYmxlIGVuZCBvZiBhIHNlbGVjdGlvbiB0byBJTkRFWC4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdzZWxlY3Rpb24nLCAndG8nLCBpbmRleCkKICAgICBzZWxlY3RfdG8gPSBzZWxlY3Rpb25fdG8KLSAgICBkZWYgeHZpZXcoc2VsZiwgaW5kZXgpOgotICAgICAgICAiIiJRdWVyeSBhbmQgY2hhbmdlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHZpZXcuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCBpbmRleCkKLSAgICBkZWYgeHZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKLSAgICAgICAgIiIiQWRqdXN0IHRoZSB2aWV3IGluIHRoZSB3aW5kb3cgc28gdGhhdCBGUkFDVElPTiBvZiB0aGUKLSAgICAgICAgdG90YWwgd2lkdGggb2YgdGhlIGVudHJ5IGlzIG9mZi1zY3JlZW4gdG8gdGhlIGxlZnQuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCi0gICAgZGVmIHh2aWV3X3Njcm9sbChzZWxmLCBudW1iZXIsIHdoYXQpOgotICAgICAgICAiIiJTaGlmdCB0aGUgeC12aWV3IGFjY29yZGluZyB0byBOVU1CRVIgd2hpY2ggaXMgbWVhc3VyZWQgaW4gInVuaXRzIiBvciAicGFnZXMiIChXSEFUKS4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICdzY3JvbGwnLCBudW1iZXIsIHdoYXQpCiAKIGNsYXNzIEZyYW1lKFdpZGdldCk6CiAgICAgIiIiRnJhbWUgd2lkZ2V0IHdoaWNoIG1heSBjb250YWluIG90aGVyIHdpZGdldHMgYW5kIGNhbiBoYXZlIGEgM0QgYm9yZGVyLiIiIgpAQCAtMjQzNSwxMCArMjQ0NCwxMCBAQAogICAgICAgICBoaWdobGlnaHRjb2xvciwgaGlnaGxpZ2h0dGhpY2tuZXNzLCByZWxpZWYsIHRha2Vmb2N1cywgdmlzdWFsLCB3aWR0aC4iIiIKICAgICAgICAgY25mID0gX2NuZm1lcmdlKChjbmYsIGt3KSkKICAgICAgICAgZXh0cmEgPSAoKQotICAgICAgICBpZiBjbmYuaGFzX2tleSgnY2xhc3NfJyk6CisgICAgICAgIGlmICdjbGFzc18nIGluIGNuZjoKICAgICAgICAgICAgIGV4dHJhID0gKCctY2xhc3MnLCBjbmZbJ2NsYXNzXyddKQogICAgICAgICAgICAgZGVsIGNuZlsnY2xhc3NfJ10KLSAgICAgICAgZWxpZiBjbmYuaGFzX2tleSgnY2xhc3MnKToKKyAgICAgICAgZWxpZiAnY2xhc3MnIGluIGNuZjoKICAgICAgICAgICAgIGV4dHJhID0gKCctY2xhc3MnLCBjbmZbJ2NsYXNzJ10pCiAgICAgICAgICAgICBkZWwgY25mWydjbGFzcyddCiAgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICdmcmFtZScsIGNuZiwge30sIGV4dHJhKQpAQCAtMjQ2NSw3ICsyNDc0LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICdsYWJlbCcsIGNuZiwga3cpCiAKLWNsYXNzIExpc3Rib3goV2lkZ2V0KToKK2NsYXNzIExpc3Rib3goV2lkZ2V0LCBYVmlldywgWVZpZXcpOgogICAgICIiIkxpc3Rib3ggd2lkZ2V0IHdoaWNoIGNhbiBkaXNwbGF5IGEgbGlzdCBvZiBzdHJpbmdzLiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9LCAqKmt3KToKICAgICAgICAgIiIiQ29uc3RydWN0IGEgbGlzdGJveCB3aWRnZXQgd2l0aCB0aGUgcGFyZW50IE1BU1RFUi4KQEAgLTI1NDQsMzAgKzI1NTMsNiBAQAogICAgIGRlZiBzaXplKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdGJveC4iIiIKICAgICAgICAgcmV0dXJuIGdldGludChzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NpemUnKSkKLSAgICBkZWYgeHZpZXcoc2VsZiwgKndoYXQpOgotICAgICAgICAiIiJRdWVyeSBhbmQgY2hhbmdlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHZpZXcuIiIiCi0gICAgICAgIGlmIG5vdCB3aGF0OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMoc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycpKQotICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICd4dmlldycpICsgd2hhdCkKLSAgICBkZWYgeHZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKLSAgICAgICAgIiIiQWRqdXN0IHRoZSB2aWV3IGluIHRoZSB3aW5kb3cgc28gdGhhdCBGUkFDVElPTiBvZiB0aGUKLSAgICAgICAgdG90YWwgd2lkdGggb2YgdGhlIGVudHJ5IGlzIG9mZi1zY3JlZW4gdG8gdGhlIGxlZnQuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCi0gICAgZGVmIHh2aWV3X3Njcm9sbChzZWxmLCBudW1iZXIsIHdoYXQpOgotICAgICAgICAiIiJTaGlmdCB0aGUgeC12aWV3IGFjY29yZGluZyB0byBOVU1CRVIgd2hpY2ggaXMgbWVhc3VyZWQgaW4gInVuaXRzIiBvciAicGFnZXMiIChXSEFUKS4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICdzY3JvbGwnLCBudW1iZXIsIHdoYXQpCi0gICAgZGVmIHl2aWV3KHNlbGYsICp3aGF0KToKLSAgICAgICAgIiIiUXVlcnkgYW5kIGNoYW5nZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgdmlldy4iIiIKLSAgICAgICAgaWYgbm90IHdoYXQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0ZG91YmxlcyhzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JykpCi0gICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ3l2aWV3JykgKyB3aGF0KQotICAgIGRlZiB5dmlld19tb3ZldG8oc2VsZiwgZnJhY3Rpb24pOgotICAgICAgICAiIiJBZGp1c3QgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQotICAgICAgICB0b3RhbCB3aWR0aCBvZiB0aGUgZW50cnkgaXMgb2ZmLXNjcmVlbiB0byB0aGUgdG9wLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgJ21vdmV0bycsIGZyYWN0aW9uKQotICAgIGRlZiB5dmlld19zY3JvbGwoc2VsZiwgbnVtYmVyLCB3aGF0KToKLSAgICAgICAgIiIiU2hpZnQgdGhlIHktdmlldyBhY2NvcmRpbmcgdG8gTlVNQkVSIHdoaWNoIGlzIG1lYXN1cmVkIGluICJ1bml0cyIgb3IgInBhZ2VzIiAoV0hBVCkuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAnc2Nyb2xsJywgbnVtYmVyLCB3aGF0KQogICAgIGRlZiBpdGVtY2dldChzZWxmLCBpbmRleCwgb3B0aW9uKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSByZXNvdXJjZSB2YWx1ZSBmb3IgYW4gSVRFTSBhbmQgYW4gT1BUSU9OLiIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKApAQCAtMjgxNCw3ICsyNzk5LDcgQEAKIAogCiAKLWNsYXNzIFRleHQoV2lkZ2V0KToKK2NsYXNzIFRleHQoV2lkZ2V0LCBYVmlldywgWVZpZXcpOgogICAgICIiIlRleHQgd2lkZ2V0IHdoaWNoIGNhbiBkaXNwbGF5IHRleHQgaW4gdmFyaW91cyBmb3Jtcy4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIGNuZj17fSwgKiprdyk6CiAgICAgICAgICIiIkNvbnN0cnVjdCBhIHRleHQgd2lkZ2V0IHdpdGggdGhlIHBhcmVudCBNQVNURVIuCkBAIC0zMTM2LDMyICszMTIxLDYgQEAKICAgICAgICAgIiIiUmV0dXJuIGFsbCBuYW1lcyBvZiBlbWJlZGRlZCB3aW5kb3dzIGluIHRoaXMgd2lkZ2V0LiIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5zcGxpdGxpc3QoCiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3dpbmRvdycsICduYW1lcycpKQotICAgIGRlZiB4dmlldyhzZWxmLCAqd2hhdCk6Ci0gICAgICAgICIiIlF1ZXJ5IGFuZCBjaGFuZ2UgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgdmlldy4iIiIKLSAgICAgICAgaWYgbm90IHdoYXQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0ZG91YmxlcyhzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JykpCi0gICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ3h2aWV3JykgKyB3aGF0KQotICAgIGRlZiB4dmlld19tb3ZldG8oc2VsZiwgZnJhY3Rpb24pOgotICAgICAgICAiIiJBZGp1c3RzIHRoZSB2aWV3IGluIHRoZSB3aW5kb3cgc28gdGhhdCBGUkFDVElPTiBvZiB0aGUKLSAgICAgICAgdG90YWwgd2lkdGggb2YgdGhlIGNhbnZhcyBpcyBvZmYtc2NyZWVuIHRvIHRoZSBsZWZ0LiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgJ21vdmV0bycsIGZyYWN0aW9uKQotICAgIGRlZiB4dmlld19zY3JvbGwoc2VsZiwgbnVtYmVyLCB3aGF0KToKLSAgICAgICAgIiIiU2hpZnQgdGhlIHgtdmlldyBhY2NvcmRpbmcgdG8gTlVNQkVSIHdoaWNoIGlzIG1lYXN1cmVkCi0gICAgICAgIGluICJ1bml0cyIgb3IgInBhZ2VzIiAoV0hBVCkuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnc2Nyb2xsJywgbnVtYmVyLCB3aGF0KQotICAgIGRlZiB5dmlldyhzZWxmLCAqd2hhdCk6Ci0gICAgICAgICIiIlF1ZXJ5IGFuZCBjaGFuZ2UgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHZpZXcuIiIiCi0gICAgICAgIGlmIG5vdCB3aGF0OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMoc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycpKQotICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICd5dmlldycpICsgd2hhdCkKLSAgICBkZWYgeXZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKLSAgICAgICAgIiIiQWRqdXN0cyB0aGUgdmlldyBpbiB0aGUgd2luZG93IHNvIHRoYXQgRlJBQ1RJT04gb2YgdGhlCi0gICAgICAgIHRvdGFsIGhlaWdodCBvZiB0aGUgY2FudmFzIGlzIG9mZi1zY3JlZW4gdG8gdGhlIHRvcC4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKLSAgICBkZWYgeXZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6Ci0gICAgICAgICIiIlNoaWZ0IHRoZSB5LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZAotICAgICAgICBpbiAidW5pdHMiIG9yICJwYWdlcyIgKFdIQVQpLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKICAgICBkZWYgeXZpZXdfcGlja3BsYWNlKHNlbGYsICp3aGF0KToKICAgICAgICAgIiIiT2Jzb2xldGUgZnVuY3Rpb24sIHVzZSBzZWUuIiIiCiAgICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ3l2aWV3JywgJy1waWNrcGxhY2UnKSArIHdoYXQpCkBAIC0zMTk0LDcgKzMxNTMsNyBAQAogICAgICAgICBzZWxmLm1lbnVuYW1lID0gbWVudS5fdwogICAgICAgICAjICdjb21tYW5kJyBpcyB0aGUgb25seSBzdXBwb3J0ZWQga2V5d29yZAogICAgICAgICBjYWxsYmFjayA9IGt3YXJncy5nZXQoJ2NvbW1hbmQnKQotICAgICAgICBpZiBrd2FyZ3MuaGFzX2tleSgnY29tbWFuZCcpOgorICAgICAgICBpZiAnY29tbWFuZCcgaW4ga3dhcmdzOgogICAgICAgICAgICAgZGVsIGt3YXJnc1snY29tbWFuZCddCiAgICAgICAgIGlmIGt3YXJnczoKICAgICAgICAgICAgIHJhaXNlIFRjbEVycm9yLCAndW5rbm93biBvcHRpb24gLScra3dhcmdzLmtleXMoKVswXQpAQCAtMzIzNSw3ICszMTk0LDcgQEAKICAgICAgICAgZWxpZiBrdzogY25mID0ga3cKICAgICAgICAgb3B0aW9ucyA9ICgpCiAgICAgICAgIGZvciBrLCB2IGluIGNuZi5pdGVtcygpOgotICAgICAgICAgICAgaWYgY2FsbGFibGUodik6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHYsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9yZWdpc3Rlcih2KQogICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgKyAoJy0nK2ssIHYpCiAgICAgICAgIHNlbGYudGsuY2FsbCgoJ2ltYWdlJywgJ2NyZWF0ZScsIGltZ3R5cGUsIG5hbWUsKSArIG9wdGlvbnMpCkBAIC0zMjU4LDcgKzMyMTcsNyBAQAogICAgICAgICBmb3IgaywgdiBpbiBfY25mbWVyZ2Uoa3cpLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGlmIGtbLTFdID09ICdfJzogayA9IGtbOi0xXQotICAgICAgICAgICAgICAgIGlmIGNhbGxhYmxlKHYpOgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIodiwgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9yZWdpc3Rlcih2KQogICAgICAgICAgICAgICAgIHJlcyA9IHJlcyArICgnLScraywgdikKICAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLm5hbWUsICdjb25maWcnKSArIHJlcykKQEAgLTMzNDcsNyArMzMwNiw3IEBACiBkZWYgaW1hZ2VfdHlwZXMoKTogcmV0dXJuIF9kZWZhdWx0X3Jvb3QudGsuY2FsbCgnaW1hZ2UnLCAndHlwZXMnKQogCiAKLWNsYXNzIFNwaW5ib3goV2lkZ2V0KToKK2NsYXNzIFNwaW5ib3goV2lkZ2V0LCBYVmlldyk6CiAgICAgIiIic3BpbmJveCB3aWRnZXQuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBzcGluYm94IHdpZGdldCB3aXRoIHRoZSBwYXJlbnQgTUFTVEVSLgpAQCAtMzU1MCw4ICszNTA5LDggQEAKIAogICAgICAgICBUaGUgY2hpbGQgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGNoaWxkIHdpZGdldAogICAgICAgICBmb2xsb3dlZCBieSBwYWlycyBvZiBhcmd1bWVudHMgdGhhdCBzcGVjaWZ5IGhvdyB0bwotICAgICAgICBtYW5hZ2UgdGhlIHdpbmRvd3MuIE9wdGlvbnMgbWF5IGhhdmUgYW55IG9mIHRoZSB2YWx1ZXMKLSAgICAgICAgYWNjZXB0ZWQgYnkgdGhlIGNvbmZpZ3VyZSBzdWJjb21tYW5kLgorICAgICAgICBtYW5hZ2UgdGhlIHdpbmRvd3MuIFRoZSBwb3NzaWJsZSBvcHRpb25zIGFuZCB2YWx1ZXMKKyAgICAgICAgYXJlIHRoZSBvbmVzIGFjY2VwdGVkIGJ5IHRoZSBwYW5lY29uZmlndXJlIG1ldGhvZC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ2FkZCcsIGNoaWxkKSArIHNlbGYuX29wdGlvbnMoa3cpKQogCmRpZmYgLS1naXQgYS9MaWIvbGliLXRrL3Rlc3QvUkVBRE1FIGIvTGliL2xpYi10ay90ZXN0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWNkMTZjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYi10ay90ZXN0L1JFQURNRQpAQCAtMCwwICsxLDE0IEBACitXcml0aW5nIG5ldyB0ZXN0cworPT09PT09PT09PT09PT09PT0KKworUHJlY2F1dGlvbgorLS0tLS0tLS0tLQorCisgICAgTmV3IHRlc3RzIHNob3VsZCBhbHdheXMgdXNlIG9ubHkgb25lIFRrIHdpbmRvdyBhdCBvbmNlLCBsaWtlIGFsbCB0aGUKKyAgICBjdXJyZW50IHRlc3RzIGRvLiBUaGlzIG1lYW5zIHRoYXQgeW91IGhhdmUgdG8gZGVzdHJveSB0aGUgY3VycmVudCB3aW5kb3cKKyAgICBiZWZvcmUgY3JlYXRpbmcgYW5vdGhlciBvbmUsIGFuZCBjbGVhbiB1cCBhZnRlciB0aGUgdGVzdC4gVGhlIG1vdGl2YXRpb24KKyAgICBiZWhpbmQgdGhpcyBpcyB0aGF0IHNvbWUgdGVzdHMgbWF5IGRlcGVuZCBvbiBoYXZpbmcgaXRzIHdpbmRvdyBmb2N1c2VkCisgICAgd2hpbGUgaXQgaXMgcnVubmluZyB0byB3b3JrIHByb3Blcmx5LCBhbmQgaXQgbWF5IGJlIGhhcmQgdG8gZm9yY2UgZm9jdXMKKyAgICBvbiB5b3VyIHdpbmRvdyBhY3Jvc3MgcGxhdGZvcm1zIChyaWdodCBub3cgb25seSB0ZXN0X3RyYXZlcnNhbCBhdAorICAgIHRlc3RfdHRrLnRlc3Rfd2lkZ2V0cy5Ob3RlYm9va1Rlc3QgZGVwZW5kcyBvbiB0aGlzKS4KKwpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90ZXN0L3J1bnRrdGVzdHMucHkgYi9MaWIvbGliLXRrL3Rlc3QvcnVudGt0ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDJjMzQyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYi10ay90ZXN0L3J1bnRrdGVzdHMucHkKQEAgLTAsMCArMSw3MSBAQAorIiIiCitVc2UgdGhpcyBtb2R1bGUgdG8gZ2V0IGFuZCBydW4gYWxsIHRrIHRlc3RzLgorCitUa2ludGVyIHRlc3RzIHNob3VsZCBsaXZlIGluIGEgcGFja2FnZSBpbnNpZGUgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGlzIGZpbGUKK2xpdmVzLCBsaWtlIHRlc3RfdGtpbnRlci4KK0V4dGVuc2lvbnMgYWxzbyBzaG91bGQgbGl2ZSBpbiBwYWNrYWdlcyBmb2xsb3dpbmcgdGhlIHNhbWUgcnVsZSBhcyBhYm92ZS4KKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CisKK3RoaXNfZGlyX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKKworZGVmIGlzX3BhY2thZ2UocGF0aCk6CisgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgaWYgbmFtZSBpbiAoJ19faW5pdF9fLnB5JywgJ19faW5pdF9fLnB5YycsICdfX2luaXQucHlvJyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgZ2V0X3Rlc3RzX21vZHVsZXMoYmFzZXBhdGg9dGhpc19kaXJfcGF0aCwgZ3VpPVRydWUsIHBhY2thZ2VzPU5vbmUpOgorICAgICIiIlRoaXMgd2lsbCBpbXBvcnQgYW5kIHlpZWxkIG1vZHVsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCB0ZXN0XworICAgIGFuZCBhcmUgaW5zaWRlIHBhY2thZ2VzIGZvdW5kIGluIHRoZSBwYXRoIHN0YXJ0aW5nIGF0IGJhc2VwYXRoLgorCisgICAgSWYgcGFja2FnZXMgaXMgc3BlY2lmaWVkIGl0IHNob3VsZCBjb250YWluIHBhY2thZ2UgbmFtZXMgdGhhdCB3YW50CisgICAgdGhlaXIgdGVzdHMgY29sbGV0ZWQuCisgICAgIiIiCisgICAgcHlfZXh0ID0gJy5weScKKworICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoYmFzZXBhdGgpOgorICAgICAgICBmb3IgZGlybmFtZSBpbiBsaXN0KGRpcm5hbWVzKToKKyAgICAgICAgICAgIGlmIGRpcm5hbWVbMF0gPT0gJy4nOgorICAgICAgICAgICAgICAgIGRpcm5hbWVzLnJlbW92ZShkaXJuYW1lKQorCisgICAgICAgIGlmIGlzX3BhY2thZ2UoZGlycGF0aCkgYW5kIGZpbGVuYW1lczoKKyAgICAgICAgICAgIHBrZ19uYW1lID0gZGlycGF0aFtsZW4oYmFzZXBhdGgpICsgbGVuKG9zLnNlcCk6XS5yZXBsYWNlKCcvJywgJy4nKQorICAgICAgICAgICAgaWYgcGFja2FnZXMgYW5kIHBrZ19uYW1lIG5vdCBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmaWxlbmFtZXMgPSBmaWx0ZXIoCisgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4LnN0YXJ0c3dpdGgoJ3Rlc3RfJykgYW5kIHguZW5kc3dpdGgocHlfZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVzKQorCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiVzIiAlIG5hbWVbOi1sZW4ocHlfZXh0KV0sIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCB0ZXN0LnRlc3Rfc3VwcG9ydC5SZXNvdXJjZURlbmllZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZ3VpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIGdldF90ZXN0cyh0ZXh0PVRydWUsIGd1aT1UcnVlLCBwYWNrYWdlcz1Ob25lKToKKyAgICAiIiJZaWVsZCBhbGwgdGhlIHRlc3RzIGluIHRoZSBtb2R1bGVzIGZvdW5kIGJ5IGdldF90ZXN0c19tb2R1bGVzLgorCisgICAgSWYgbm9ndWkgaXMgVHJ1ZSwgb25seSB0ZXN0cyB0aGF0IGRvIG5vdCByZXF1aXJlIGEgR1VJIHdpbGwgYmUKKyAgICByZXR1cm5lZC4iIiIKKyAgICBhdHRycyA9IFtdCisgICAgaWYgdGV4dDoKKyAgICAgICAgYXR0cnMuYXBwZW5kKCd0ZXN0c19ub2d1aScpCisgICAgaWYgZ3VpOgorICAgICAgICBhdHRycy5hcHBlbmQoJ3Rlc3RzX2d1aScpCisgICAgZm9yIG1vZHVsZSBpbiBnZXRfdGVzdHNfbW9kdWxlcyhndWk9Z3VpLCBwYWNrYWdlcz1wYWNrYWdlcyk6CisgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gZ2V0YXR0cihtb2R1bGUsIGF0dHIsICgpKToKKyAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnZ3VpJ10KKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKmdldF90ZXN0cygpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9jb3B5cmlnaHQgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90a2ludGVyL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUb29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL2NvcHlyaWdodApyZW5hbWUgdG8gTGliL2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2xvYWR0ay5weSBiL0xpYi9saWItdGsvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9sb2FkdGsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjNjQwZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWItdGsvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9sb2FkdGsucHkKQEAgLTAsMCArMSw0NSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIFRraW50ZXIgaW1wb3J0IFRjbCwgVGNsRXJyb3IKKwordGVzdF9zdXBwb3J0LnJlcXVpcmVzKCdndWknKQorCitjbGFzcyBUa0xvYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYoJ0RJU1BMQVknIG5vdCBpbiBvcy5lbnZpcm9uLCAnTm8gJERJU1BMQVkgc2V0LicpCisgICAgZGVmIHRlc3RMb2FkVGsoc2VsZik6CisgICAgICAgIHRjbCA9IFRjbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLHRjbC53aW5mb19nZW9tZXRyeSkKKyAgICAgICAgdGNsLmxvYWR0aygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzF4MSswKzAnLCB0Y2wud2luZm9fZ2VvbWV0cnkoKSkKKyAgICAgICAgdGNsLmRlc3Ryb3koKQorCisgICAgZGVmIHRlc3RMb2FkVGtGYWlsdXJlKHNlbGYpOgorICAgICAgICBvbGRfZGlzcGxheSA9IE5vbmUKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoKCd3aW4nLCAnZGFyd2luJywgJ2N5Z3dpbicpKToKKyAgICAgICAgICAgICMgbm8gZmFpbHVyZSBwb3NzaWJsZSBvbiB3aW5kb3dzPworCisgICAgICAgICAgICAjIFhYWCBNYXliZSBvbiB0ayBvbGRlciB0aGFuIDguNC4xMyBpdCB3b3VsZCBiZSBwb3NzaWJsZSwKKyAgICAgICAgICAgICMgc2VlIHRraW50ZXIuaC4KKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgaWYgJ0RJU1BMQVknIGluIG9zLmVudmlyb246CisgICAgICAgICAgICAgICAgZGVsIGVudlsnRElTUExBWSddCisgICAgICAgICAgICAgICAgIyBvbiBzb21lIHBsYXRmb3JtcywgZGVsZXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgIyBkb2Vzbid0IGFjdHVhbGx5IGNhcnJ5IHRocm91Z2ggdG8gdGhlIHByb2Nlc3MgbGV2ZWwKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2UgdGhleSBkb24ndCBzdXBwb3J0IHVuc2V0ZW52CisgICAgICAgICAgICAgICAgIyBJZiB0aGF0J3MgdGhlIGNhc2UsIGFib3J0LgorICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBvcy5wb3BlbignZWNobyAkRElTUExBWScpLnJlYWQoKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgZGlzcGxheToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHRjbCA9IFRjbCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLndpbmZvX2dlb21ldHJ5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHRjbC5sb2FkdGspCisKK3Rlc3RzX2d1aSA9IChUa0xvYWRUZXN0LCApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHNfZ3VpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3RleHQucHkgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfdGV4dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmMwOGJlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3RleHQucHkKQEAgLTAsMCArMSwzOSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgVGtpbnRlcgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIHJ1bl91bml0dGVzdAorZnJvbSB0dGsgaW1wb3J0IHNldHVwX21hc3RlcgorCityZXF1aXJlcygnZ3VpJykKKworY2xhc3MgVGV4dFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnJvb3QgPSBzZXR1cF9tYXN0ZXIoKQorICAgICAgICBzZWxmLnRleHQgPSBUa2ludGVyLlRleHQoc2VsZi5yb290KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRleHQuZGVzdHJveSgpCisKKworICAgIGRlZiB0ZXN0X3NlYXJjaChzZWxmKToKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorCisgICAgICAgICMgcGF0dGVybiBhbmQgaW5kZXggYXJlIG9ibGlnYXRvcnkgYXJndW1lbnRzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCB0ZXh0LnNlYXJjaCwgTm9uZSwgJzEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHRleHQuc2VhcmNoLCAnYScsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHRleHQuc2VhcmNoLCBOb25lLCBOb25lKQorCisgICAgICAgICMgSW52YWxpZCB0ZXh0IGluZGV4LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCB0ZXh0LnNlYXJjaCwgJycsIDApCisKKyAgICAgICAgIyBDaGVjayBpZiB3ZSBhcmUgZ2V0dGluZyB0aGUgaW5kaWNlcyBhcyBzdHJpbmdzIC0tIHlvdSBhcmUgbGlrZWx5CisgICAgICAgICMgdG8gZ2V0IFRjbF9PYmogdW5kZXIgVGsgOC41IGlmIFRraW50ZXIgZG9lc24ndCBjb252ZXJ0IGl0LgorICAgICAgICB0ZXh0Lmluc2VydCgnMS4wJywgJ2hpLXRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuc2VhcmNoKCctdGVzdCcsICcxLjAnLCAnZW5kJyksICcxLjInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuc2VhcmNoKCd0ZXN0JywgJzEuMCcsICdlbmQnKSwgJzEuMycpCisKKwordGVzdHNfZ3VpID0gKFRleHRUZXN0LCApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0c19ndWkpCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL2NvcHlyaWdodCBiL0xpYi9saWItdGsvdGVzdC90ZXN0X3R0ay9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvY29weXJpZ2h0CmNvcHkgdG8gTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvc3VwcG9ydC5weSBiL0xpYi9saWItdGsvdGVzdC90ZXN0X3R0ay9zdXBwb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZTc4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvc3VwcG9ydC5weQpAQCAtMCwwICsxLDMzIEBACitpbXBvcnQgVGtpbnRlcgorCitkZWYgZ2V0X3RrX3Jvb3QoKToKKyAgICB0cnk6CisgICAgICAgIHJvb3QgPSBUa2ludGVyLl9kZWZhdWx0X3Jvb3QKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICMgaXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSBkZWZhdWx0IHJvb3QgaW4gVGtpbnRlciwgYWx0aG91Z2gKKyAgICAgICAgIyBJIGhhdmVuJ3Qgc2VlbiBwZW9wbGUgZG9pbmcgaXQgKGJ1dCBhcHBhcmVudGx5IHNvbWVvbmUgZGlkIGl0CisgICAgICAgICMgaGVyZSkuCisgICAgICAgIHJvb3QgPSBOb25lCisKKyAgICBpZiByb290IGlzIE5vbmU6CisgICAgICAgICMgY3JlYXRlIGEgbmV3IG1hc3RlciBvbmx5IGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5CisgICAgICAgIHJvb3QgPSBUa2ludGVyLlRrKCkKKworICAgIHJldHVybiByb290CisKK2RlZiByb290X2RlaWNvbmlmeSgpOgorICAgIHJvb3QgPSBnZXRfdGtfcm9vdCgpCisgICAgcm9vdC5kZWljb25pZnkoKQorCitkZWYgcm9vdF93aXRoZHJhdygpOgorICAgIHJvb3QgPSBnZXRfdGtfcm9vdCgpCisgICAgcm9vdC53aXRoZHJhdygpCisKKworZGVmIHNpbXVsYXRlX21vdXNlX2NsaWNrKHdpZGdldCwgeCwgeSk6CisgICAgIiIiR2VuZXJhdGUgcHJvcGVyIGV2ZW50cyB0byBjbGljayBhdCB0aGUgeCwgeSBwb3NpdGlvbiAodHJpZXMgdG8gYWN0CisgICAgbGlrZSBhbiBYIHNlcnZlcikuIiIiCisgICAgd2lkZ2V0LmV2ZW50X2dlbmVyYXRlKCc8RW50ZXI+JywgeD0wLCB5PTApCisgICAgd2lkZ2V0LmV2ZW50X2dlbmVyYXRlKCc8TW90aW9uPicsIHg9eCwgeT15KQorICAgIHdpZGdldC5ldmVudF9nZW5lcmF0ZSgnPEJ1dHRvblByZXNzLTE+JywgeD14LCB5PXkpCisgICAgd2lkZ2V0LmV2ZW50X2dlbmVyYXRlKCc8QnV0dG9uUmVsZWFzZS0xPicsIHg9eCwgeT15KQpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL3Rlc3RfZXh0ZW5zaW9ucy5weSBiL0xpYi9saWItdGsvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0NmNiYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWItdGsvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKQEAgLTAsMCArMSwyNzQgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFRraW50ZXIKK2ltcG9ydCB0dGsKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKKworaW1wb3J0IHN1cHBvcnQKKworcmVxdWlyZXMoJ2d1aScpCisKK2NsYXNzIExhYmVsZWRTY2FsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKKworCisgICAgZGVmIHRlc3Rfd2lkZ2V0X2Rlc3Ryb3koc2VsZik6CisgICAgICAgICMgYXV0b21hdGljYWxseSBjcmVhdGVkIHZhcmlhYmxlCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkKKyAgICAgICAgdmFyID0geC5fdmFyaWFibGUuX25hbWUKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgeC50ay5nbG9iYWxnZXR2YXIsIHZhcikKKworICAgICAgICAjIG1hbnVhbGx5IGNyZWF0ZWQgdmFyaWFibGUKKyAgICAgICAgbXl2YXIgPSBUa2ludGVyLkRvdWJsZVZhcigpCisgICAgICAgIG5hbWUgPSBteXZhci5fbmFtZQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSh2YXJpYWJsZT1teXZhcikKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnRrLmdsb2JhbGdldHZhcihuYW1lKSwgbXl2YXIuZ2V0KCkpCisgICAgICAgIGRlbCBteXZhcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCB4LnRrLmdsb2JhbGdldHZhciwgbmFtZSkKKworICAgICAgICAjIGNoZWNraW5nIHRoYXQgdGhlIHRyYWNpbmcgY2FsbGJhY2sgaXMgcHJvcGVybHkgcmVtb3ZlZAorICAgICAgICBteXZhciA9IFRraW50ZXIuSW50VmFyKCkKKyAgICAgICAgIyBMYWJlbGVkU2NhbGUgd2lsbCBzdGFydCB0cmFjaW5nIG15dmFyCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHZhcmlhYmxlPW15dmFyKQorICAgICAgICB4LmRlc3Ryb3koKQorICAgICAgICAjIFVubGVzcyB0aGUgdHJhY2luZyBjYWxsYmFjayB3YXMgcmVtb3ZlZCwgY3JlYXRpbmcgYSBuZXcKKyAgICAgICAgIyBMYWJlbGVkU2NhbGUgd2l0aCB0aGUgc2FtZSB2YXIgd2lsbCBjYXVzZSBhbiBlcnJvciBub3cuIFRoaXMKKyAgICAgICAgIyBoYXBwZW5zIGJlY2F1c2UgdGhlIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIChwb3NzaWJseSkgYSBuZXcKKyAgICAgICAgIyB2YWx1ZSB3aGljaCBjYXVzZXMgdGhlIHRyYWNpbmcgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFuZCB0aGVuCisgICAgICAgICMgaXQgdHJpZXMgY2FsbGluZyBpbnN0YW5jZSBhdHRyaWJ1dGVzIG5vdCB5ZXQgZGVmaW5lZC4KKyAgICAgICAgdHRrLkxhYmVsZWRTY2FsZSh2YXJpYWJsZT1teXZhcikKKyAgICAgICAgaWYgaGFzYXR0cihzeXMsICdsYXN0X3R5cGUnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3lzLmxhc3RfdHlwZSA9PSBUa2ludGVyLlRjbEVycm9yKQorCisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgIyBtYXN0ZXIgcGFzc2luZworICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5tYXN0ZXIsIFRraW50ZXIuX2RlZmF1bHRfcm9vdCkKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgbWFzdGVyID0gVGtpbnRlci5GcmFtZSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKG1hc3RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm1hc3RlciwgbWFzdGVyKQorICAgICAgICB4LmRlc3Ryb3koKQorCisgICAgICAgICMgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24vcGFzc2luZworICAgICAgICBwYXNzZWRfZXhwZWN0ZWQgPSAoKDIuNSwgMiksICgnMCcsIDApLCAoMCwgMCksICgxMCwgMTApLAorICAgICAgICAgICAgKC0xLCAtMSksIChzeXMubWF4aW50ICsgMSwgc3lzLm1heGludCArIDEpKQorICAgICAgICBmb3IgcGFpciBpbiBwYXNzZWRfZXhwZWN0ZWQ6CisgICAgICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShmcm9tXz1wYWlyWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbHVlLCBwYWlyWzFdKQorICAgICAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoZnJvbV89JzIuNScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHguX3ZhcmlhYmxlLmdldCkKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoZnJvbV89Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgeC5fdmFyaWFibGUuZ2V0KQorICAgICAgICB4LmRlc3Ryb3koKQorICAgICAgICAjIHZhcmlhYmxlIHNob3VsZCBoYXZlIGl0cyBkZWZhdWx0IHZhbHVlIHNldCB0byB0aGUgZnJvbV8gdmFsdWUKKyAgICAgICAgbXl2YXIgPSBUa2ludGVyLkRvdWJsZVZhcih2YWx1ZT0yMCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWx1ZSwgMCkKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgIyBjaGVjayB0aGF0IGl0IGlzIHJlYWxseSB1c2luZyBhIERvdWJsZVZhcgorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSh2YXJpYWJsZT1teXZhciwgZnJvbV89MC41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsdWUsIDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll92YXJpYWJsZS5fbmFtZSwgbXl2YXIuX25hbWUpCisgICAgICAgIHguZGVzdHJveSgpCisKKyAgICAgICAgIyB3aWRnZXQgcG9zaXRpb25tZW50CisgICAgICAgIGRlZiBjaGVja19wb3NpdGlvbnMoc2NhbGUsIHNjYWxlX3BvcywgbGFiZWwsIGxhYmVsX3Bvcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYWxlLnBhY2tfaW5mbygpWydzaWRlJ10sIHNjYWxlX3BvcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGFiZWwucGxhY2VfaW5mbygpWydhbmNob3InXSwgbGFiZWxfcG9zKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShjb21wb3VuZD0ndG9wJykKKyAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICdib3R0b20nLCB4LmxhYmVsLCAnbicpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGNvbXBvdW5kPSdib3R0b20nKQorICAgICAgICBjaGVja19wb3NpdGlvbnMoeC5zY2FsZSwgJ3RvcCcsIHgubGFiZWwsICdzJykKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoY29tcG91bmQ9J3Vua25vd24nKSAjIGludmVydCBkZWZhdWx0IHBvc2l0aW9ucworICAgICAgICBjaGVja19wb3NpdGlvbnMoeC5zY2FsZSwgJ3RvcCcsIHgubGFiZWwsICdzJykKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKSAjIHRha2UgZGVmYXVsdCBwb3NpdGlvbnMKKyAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICdib3R0b20nLCB4LmxhYmVsLCAnbicpCisgICAgICAgIHguZGVzdHJveSgpCisKKyAgICAgICAgIyBleHRyYSwgYW5kIGludmFsaWQsIGt3YXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCB0dGsuTGFiZWxlZFNjYWxlLCBhPSdiJykKKworCisgICAgZGVmIHRlc3RfaG9yaXpvbnRhbF9yYW5nZShzZWxmKToKKyAgICAgICAgbHNjYWxlID0gdHRrLkxhYmVsZWRTY2FsZShmcm9tXz0wLCB0bz0xMCkKKyAgICAgICAgbHNjYWxlLnBhY2soKQorICAgICAgICBsc2NhbGUud2FpdF92aXNpYmlsaXR5KCkKKyAgICAgICAgbHNjYWxlLnVwZGF0ZSgpCisKKyAgICAgICAgbGluZm9fMSA9IGxzY2FsZS5sYWJlbC5wbGFjZV9pbmZvKCkKKyAgICAgICAgcHJldl94Y29vcmQgPSBsc2NhbGUuc2NhbGUuY29vcmRzKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcmV2X3hjb29yZCwgaW50KGxpbmZvXzFbJ3gnXSkpCisgICAgICAgICMgY2hhbmdlIHJhbmdlIHRvOiBmcm9tIC01IHRvIDUuIFRoaXMgc2hvdWxkIGNoYW5nZSB0aGUgeCBjb29yZCBvZgorICAgICAgICAjIHRoZSBzY2FsZSB3aWRnZXQsIHNpbmNlIDAgaXMgYXQgdGhlIG1pZGRsZSBvZiB0aGUgbmV3CisgICAgICAgICMgcmFuZ2UuCisgICAgICAgIGxzY2FsZS5zY2FsZS5jb25maWd1cmUoZnJvbV89LTUsIHRvPTUpCisgICAgICAgICMgVGhlIGZvbGxvd2luZyB1cGRhdGUgaXMgbmVlZGVkIHNpbmNlIHRoZSB0ZXN0IGRvZXNuJ3QgdXNlIG1haW5sb29wLAorICAgICAgICAjIGF0IHRoZSBzYW1lIHRpbWUgdGhpcyBzaG91bGRuJ3QgYWZmZWN0IHRlc3Qgb3V0Y29tZQorICAgICAgICBsc2NhbGUudXBkYXRlKCkKKyAgICAgICAgY3Vycl94Y29vcmQgPSBsc2NhbGUuc2NhbGUuY29vcmRzKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByZXZfeGNvb3JkICE9IGN1cnJfeGNvb3JkKQorICAgICAgICAjIHRoZSBsYWJlbCB3aWRnZXQgc2hvdWxkIGhhdmUgYmVlbiByZXBvc2l0aW9uZWQgdG9vCisgICAgICAgIGxpbmZvXzIgPSBsc2NhbGUubGFiZWwucGxhY2VfaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHNjYWxlLmxhYmVsWyd0ZXh0J10sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3Vycl94Y29vcmQsIGludChsaW5mb18yWyd4J10pKQorICAgICAgICAjIGNoYW5nZSB0aGUgcmFuZ2UgYmFjaworICAgICAgICBsc2NhbGUuc2NhbGUuY29uZmlndXJlKGZyb21fPTAsIHRvPTEwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJldl94Y29vcmQgIT0gY3Vycl94Y29vcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJldl94Y29vcmQsIGludChsaW5mb18xWyd4J10pKQorCisgICAgICAgIGxzY2FsZS5kZXN0cm95KCkKKworCisgICAgZGVmIHRlc3RfdmFyaWFibGVfY2hhbmdlKHNlbGYpOgorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSgpCisgICAgICAgIHgucGFjaygpCisgICAgICAgIHgud2FpdF92aXNpYmlsaXR5KCkKKyAgICAgICAgeC51cGRhdGUoKQorCisgICAgICAgIGN1cnJfeGNvb3JkID0geC5zY2FsZS5jb29yZHMoKVswXQorICAgICAgICBuZXd2YWwgPSB4LnZhbHVlICsgMQorICAgICAgICB4LnZhbHVlID0gbmV3dmFsCisgICAgICAgICMgVGhlIGZvbGxvd2luZyB1cGRhdGUgaXMgbmVlZGVkIHNpbmNlIHRoZSB0ZXN0IGRvZXNuJ3QgdXNlIG1haW5sb29wLAorICAgICAgICAjIGF0IHRoZSBzYW1lIHRpbWUgdGhpcyBzaG91bGRuJ3QgYWZmZWN0IHRlc3Qgb3V0Y29tZQorICAgICAgICB4LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5sYWJlbFsndGV4dCddLCBuZXd2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LnNjYWxlLmNvb3JkcygpWzBdID4gY3Vycl94Y29vcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5zY2FsZS5jb29yZHMoKVswXSwKKyAgICAgICAgICAgIGludCh4LmxhYmVsLnBsYWNlX2luZm8oKVsneCddKSkKKworICAgICAgICAjIHZhbHVlIG91dHNpZGUgcmFuZ2UKKyAgICAgICAgeC52YWx1ZSA9IHguc2NhbGVbJ3RvJ10gKyAxICMgbm8gY2hhbmdlcyBzaG91bGRuJ3QgaGFwcGVuCisgICAgICAgIHgudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmxhYmVsWyd0ZXh0J10sIG5ld3ZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnNjYWxlLmNvb3JkcygpWzBdLAorICAgICAgICAgICAgaW50KHgubGFiZWwucGxhY2VfaW5mbygpWyd4J10pKQorCisgICAgICAgIHguZGVzdHJveSgpCisKKworICAgIGRlZiB0ZXN0X3Jlc2l6ZShzZWxmKToKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKQorICAgICAgICB4LnBhY2soZXhwYW5kPVRydWUsIGZpbGw9J2JvdGgnKQorICAgICAgICB4LndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIHgudXBkYXRlKCkKKworICAgICAgICB3aWR0aCwgaGVpZ2h0ID0geC5tYXN0ZXIud2luZm9fd2lkdGgoKSwgeC5tYXN0ZXIud2luZm9faGVpZ2h0KCkKKyAgICAgICAgd2lkdGhfbmV3LCBoZWlnaHRfbmV3ID0gd2lkdGggKiAyLCBoZWlnaHQgKiAyCisKKyAgICAgICAgeC52YWx1ZSA9IDMKKyAgICAgICAgeC51cGRhdGUoKQorICAgICAgICB4Lm1hc3Rlci53bV9nZW9tZXRyeSgiJWR4JWQiICUgKHdpZHRoX25ldywgaGVpZ2h0X25ldykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHgubGFiZWwucGxhY2VfaW5mbygpWyd4J10pLAorICAgICAgICAgICAgeC5zY2FsZS5jb29yZHMoKVswXSkKKworICAgICAgICAjIFJlc2V0IGdlb21ldHJ5CisgICAgICAgIHgubWFzdGVyLndtX2dlb21ldHJ5KCIlZHglZCIgJSAod2lkdGgsIGhlaWdodCkpCisgICAgICAgIHguZGVzdHJveSgpCisKKworY2xhc3MgT3B0aW9uTWVudVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKKyAgICAgICAgc2VsZi50ZXh0dmFyID0gVGtpbnRlci5TdHJpbmdWYXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi50ZXh0dmFyCisgICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCisKKworICAgIGRlZiB0ZXN0X3dpZGdldF9kZXN0cm95KHNlbGYpOgorICAgICAgICB2YXIgPSBUa2ludGVyLlN0cmluZ1ZhcigpCisgICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShOb25lLCB2YXIpCisgICAgICAgIG5hbWUgPSB2YXIuX25hbWUKKyAgICAgICAgb3B0bWVudS51cGRhdGVfaWRsZXRhc2tzKCkKKyAgICAgICAgb3B0bWVudS5kZXN0cm95KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRtZW51LnRrLmdsb2JhbGdldHZhcihuYW1lKSwgdmFyLmdldCgpKQorICAgICAgICBkZWwgdmFyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIG9wdG1lbnUudGsuZ2xvYmFsZ2V0dmFyLCBuYW1lKQorCisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwKKyAgICAgICAgICAgIHR0ay5PcHRpb25NZW51LCBOb25lLCBzZWxmLnRleHR2YXIsIGludmFsaWQ9J3RoaW5nJykKKworICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgc2VsZi50ZXh0dmFyLCAnYicsICdhJywgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdG1lbnUuX3ZhcmlhYmxlLmdldCgpLCAnYicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdG1lbnVbJ21lbnUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdG1lbnVbJ3RleHR2YXJpYWJsZSddKQorCisgICAgICAgIG9wdG1lbnUuZGVzdHJveSgpCisKKworICAgIGRlZiB0ZXN0X21lbnUoc2VsZik6CisgICAgICAgIGl0ZW1zID0gKCdhJywgJ2InLCAnYycpCisgICAgICAgIGRlZmF1bHQgPSAnYScKKyAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHNlbGYudGV4dHZhciwgZGVmYXVsdCwgKml0ZW1zKQorICAgICAgICBmb3VuZF9kZWZhdWx0ID0gRmFsc2UKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGl0ZW1zKSk6CisgICAgICAgICAgICB2YWx1ZSA9IG9wdG1lbnVbJ21lbnUnXS5lbnRyeWNnZXQoaSwgJ3ZhbHVlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIGl0ZW1zW2ldKQorICAgICAgICAgICAgaWYgdmFsdWUgPT0gZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmb3VuZF9kZWZhdWx0ID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmRfZGVmYXVsdCkKKyAgICAgICAgb3B0bWVudS5kZXN0cm95KCkKKworICAgICAgICAjIGRlZmF1bHQgc2hvdWxkbid0IGJlIGluIG1lbnUgaWYgaXQgaXMgbm90IHBhcnQgb2YgdmFsdWVzCisgICAgICAgIGRlZmF1bHQgPSAnZCcKKyAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHNlbGYudGV4dHZhciwgZGVmYXVsdCwgKml0ZW1zKQorICAgICAgICBjdXJyID0gTm9uZQorICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgbGFzdCwgY3VyciA9IGN1cnIsIG9wdG1lbnVbJ21lbnUnXS5lbnRyeWNvbmZpZ3VyZShpLCAndmFsdWUnKQorICAgICAgICAgICAgaWYgbGFzdCA9PSBjdXJyOgorICAgICAgICAgICAgICAgICMgbm8gbW9yZSBtZW51IGVudHJpZXMKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdXJyID09IGRlZmF1bHQpCisgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBsZW4oaXRlbXMpKQorCisgICAgICAgICMgY2hlY2sgdGhhdCB2YXJpYWJsZSBpcyB1cGRhdGVkIGNvcnJlY3RseQorICAgICAgICBvcHRtZW51LnBhY2soKQorICAgICAgICBvcHRtZW51LndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIG9wdG1lbnVbJ21lbnUnXS5pbnZva2UoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRtZW51Ll92YXJpYWJsZS5nZXQoKSwgaXRlbXNbMF0pCisKKyAgICAgICAgIyBjaGFuZ2luZyB0byBhbiBpbnZhbGlkIGluZGV4IHNob3VsZG4ndCBjaGFuZ2UgdGhlIHZhcmlhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIG9wdG1lbnVbJ21lbnUnXS5pbnZva2UsIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdG1lbnUuX3ZhcmlhYmxlLmdldCgpLCBpdGVtc1swXSkKKworICAgICAgICBvcHRtZW51LmRlc3Ryb3koKQorCisgICAgICAgICMgc3BlY2lmeWluZyBhIGNhbGxiYWNrCisgICAgICAgIHN1Y2Nlc3MgPSBbXQorICAgICAgICBkZWYgY2JfdGVzdChpdGVtKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbSwgaXRlbXNbMV0pCisgICAgICAgICAgICBzdWNjZXNzLmFwcGVuZChUcnVlKQorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgc2VsZi50ZXh0dmFyLCAnYScsIGNvbW1hbmQ9Y2JfdGVzdCwKKyAgICAgICAgICAgICppdGVtcykKKyAgICAgICAgb3B0bWVudVsnbWVudSddLmludm9rZSgxKQorICAgICAgICBpZiBub3Qgc3VjY2VzczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiTWVudSBjYWxsYmFjayBub3QgaW52b2tlZCIpCisKKyAgICAgICAgb3B0bWVudS5kZXN0cm95KCkKKworCit0ZXN0c19ndWkgPSAoTGFiZWxlZFNjYWxlVGVzdCwgT3B0aW9uTWVudVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0c19ndWkpCmRpZmYgLS1naXQgYS9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9mdW5jdGlvbnMucHkgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9mdW5jdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4MDBjZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWItdGsvdGVzdC90ZXN0X3R0ay90ZXN0X2Z1bmN0aW9ucy5weQpAQCAtMCwwICsxLDQyNiBAQAorIyAtKi0gZW5jb2Rpbmc6IHV0Zi04IC0qLQoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdHRrCisKK2NsYXNzIE1vY2tUY2xPYmoob2JqZWN0KToKKyAgICB0eXBlbmFtZSA9ICd0ZXN0JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCk6CisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHVuaWNvZGUoc2VsZi52YWwpCisKKworY2xhc3MgTW9ja1N0YXRlU3BlYyhvYmplY3QpOgorICAgIHR5cGVuYW1lID0gJ1N0YXRlU3BlYycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYudmFsID0gYXJncworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnICcuam9pbihzZWxmLnZhbCkKKworCitjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZm9ybWF0X29wdGRpY3Qoc2VsZik6CisgICAgICAgIGRlZiBjaGVja19hZ2FpbnN0KGZtdF9vcHRzLCByZXN1bHQpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGZtdF9vcHRzKSwgMik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQucG9wKGZtdF9vcHRzW2ldKSwgZm10X29wdHNbaSArIDFdKQorICAgICAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVzdWx0IHN0aWxsIGdvdCBlbGVtZW50czogJXMiICUgcmVzdWx0KQorCisgICAgICAgICMgcGFzc2luZyBhbiBlbXB0eSBkaWN0IHNob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0ICh0dXBsZSBoZXJlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR0ay5fZm9ybWF0X29wdGRpY3Qoe30pKQorCisgICAgICAgICMgY2hlY2sgbGlzdCBmb3JtYXR0aW5nCisgICAgICAgIGNoZWNrX2FnYWluc3QoCisgICAgICAgICAgICB0dGsuX2Zvcm1hdF9vcHRkaWN0KHsnZmcnOiAnYmx1ZScsICdwYWRkaW5nJzogWzEsIDIsIDMsIDRdfSksCisgICAgICAgICAgICB7Jy1mZyc6ICdibHVlJywgJy1wYWRkaW5nJzogJzEgMiAzIDQnfSkKKworICAgICAgICAjIGNoZWNrIHR1cGxlIGZvcm1hdHRpbmcgKHNhbWUgYXMgbGlzdCkKKyAgICAgICAgY2hlY2tfYWdhaW5zdCgKKyAgICAgICAgICAgIHR0ay5fZm9ybWF0X29wdGRpY3Qoeyd0ZXN0JzogKDEsIDIsICcnLCAwKX0pLAorICAgICAgICAgICAgeyctdGVzdCc6ICcxIDIge30gMCd9KQorCisgICAgICAgICMgY2hlY2sgdW50b3VjaGVkIHZhbHVlcworICAgICAgICBjaGVja19hZ2FpbnN0KAorICAgICAgICAgICAgdHRrLl9mb3JtYXRfb3B0ZGljdCh7J3Rlc3QnOiB7J2xlZnQnOiAnYXMgaXMnfX0pLAorICAgICAgICAgICAgeyctdGVzdCc6IHsnbGVmdCc6ICdhcyBpcyd9fSkKKworICAgICAgICAjIGNoZWNrIHNjcmlwdCBmb3JtYXR0aW5nIGFuZCB1bnRvdWNoZWQgdmFsdWUocykKKyAgICAgICAgY2hlY2tfYWdhaW5zdCgKKyAgICAgICAgICAgIHR0ay5fZm9ybWF0X29wdGRpY3QoCisgICAgICAgICAgICAgICAgeyd0ZXN0JzogWzEsIC0xLCAnJywgJzJtJywgMF0sICdub2NoYW5nZTEnOiAzLAorICAgICAgICAgICAgICAgICAnbm9jaGFuZ2UyJzogJ2FiYyBkZWYnfSwgc2NyaXB0PVRydWUpLAorICAgICAgICAgICAgeyctdGVzdCc6ICd7MSAtMSB7fSAybSAwfScsICctbm9jaGFuZ2UxJzogMywKKyAgICAgICAgICAgICAnLW5vY2hhbmdlMic6ICdhYmMgZGVmJyB9KQorCisgICAgICAgIG9wdHMgPSB7dSfOsc6yzrMnOiBUcnVlLCB1J8OhJzogRmFsc2V9CisgICAgICAgIG9yaWdfb3B0cyA9IG9wdHMuY29weSgpCisgICAgICAgICMgY2hlY2sgaWYgZ2l2aW5nIHVuaWNvZGUga2V5cyBpcyBmaW5lCisgICAgICAgIGNoZWNrX2FnYWluc3QodHRrLl9mb3JtYXRfb3B0ZGljdChvcHRzKSwge3UnLc6xzrLOsyc6IFRydWUsIHUnLcOhJzogRmFsc2V9KQorICAgICAgICAjIG9wdHMgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBvcmlnX29wdHMpCisKKyAgICAgICAgIyBwYXNzaW5nIHZhbHVlcyB3aXRoIHNwYWNlcyBpbnNpZGUgYSB0dXBsZS9saXN0CisgICAgICAgIGNoZWNrX2FnYWluc3QoCisgICAgICAgICAgICB0dGsuX2Zvcm1hdF9vcHRkaWN0KAorICAgICAgICAgICAgICAgIHsnb3B0aW9uJzogKCdvbmUgdHdvJywgJ3RocmVlJyl9KSwKKyAgICAgICAgICAgIHsnLW9wdGlvbic6ICd7b25lIHR3b30gdGhyZWUnfSkKKworICAgICAgICAjIGlnbm9yZSBhbiBvcHRpb24KKyAgICAgICAgYW1vdW50X29wdHMgPSBsZW4odHRrLl9mb3JtYXRfb3B0ZGljdChvcHRzLCBpZ25vcmU9KHUnw6EnKSkpIC8vIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbW91bnRfb3B0cywgbGVuKG9wdHMpIC0gMSkKKworICAgICAgICAjIGlnbm9yZSBub24tZXhpc3Rpbmcgb3B0aW9ucworICAgICAgICBhbW91bnRfb3B0cyA9IGxlbih0dGsuX2Zvcm1hdF9vcHRkaWN0KG9wdHMsIGlnbm9yZT0odSfDoScsICdiJykpKSAvLyAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW1vdW50X29wdHMsIGxlbihvcHRzKSAtIDEpCisKKyAgICAgICAgIyBpZ25vcmUgZXZlcnkgb3B0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHRrLl9mb3JtYXRfb3B0ZGljdChvcHRzLCBpZ25vcmU9b3B0cy5rZXlzKCkpKQorCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfbWFwZGljdChzZWxmKToKKyAgICAgICAgb3B0cyA9IHsnYSc6IFsoJ2InLCAnYycsICd2YWwnKSwgKCdkJywgJ290aGVydmFsJyksICgnJywgJ3NpbmdsZScpXX0KKyAgICAgICAgcmVzdWx0ID0gdHRrLl9mb3JtYXRfbWFwZGljdChvcHRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCBsZW4ob3B0cy5rZXlzKCkpICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICgnLWEnLCAne2IgY30gdmFsIGQgb3RoZXJ2YWwge30gc2luZ2xlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfbWFwZGljdChvcHRzLCBzY3JpcHQ9VHJ1ZSksCisgICAgICAgICAgICAoJy1hJywgJ3t7YiBjfSB2YWwgZCBvdGhlcnZhbCB7fSBzaW5nbGV9JykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9tYXBkaWN0KHsyOiBbXX0pLCAoJy0yJywgJycpKQorCisgICAgICAgIG9wdHMgPSB7dSfDvMOxw63Eh8OzZMOoJzogWyh1J8OhJywgdSd2w6NsJyldfQorICAgICAgICByZXN1bHQgPSB0dGsuX2Zvcm1hdF9tYXBkaWN0KG9wdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAodSctw7zDscOtxIfDs2TDqCcsIHUnw6EgdsOjbCcpKQorCisgICAgICAgICMgZW1wdHkgc3RhdGVzCisgICAgICAgIHZhbGlkID0geydvcHQnOiBbKCcnLCB1JycsICdoaScpXX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9tYXBkaWN0KHZhbGlkKSwgKCctb3B0JywgJ3sgfSBoaScpKQorCisgICAgICAgICMgd2hlbiBwYXNzaW5nIG11bHRpcGxlIHN0YXRlcywgdGhleSBhbGwgbXVzdCBiZSBzdHJpbmdzCisgICAgICAgIGludmFsaWQgPSB7J29wdCc6IFsoMSwgMiwgJ3ZhbGlkIHZhbCcpXX0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0dGsuX2Zvcm1hdF9tYXBkaWN0LCBpbnZhbGlkKQorICAgICAgICBpbnZhbGlkID0geydvcHQnOiBbKFsxXSwgJzInLCAndmFsaWQgdmFsJyldfQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHR0ay5fZm9ybWF0X21hcGRpY3QsIGludmFsaWQpCisgICAgICAgICMgYnV0IHdoZW4gcGFzc2luZyBhIHNpbmdsZSBzdGF0ZSwgaXQgY2FuIGJlIGFueXRoaW5nCisgICAgICAgIHZhbGlkID0geydvcHQnOiBbWzEsICd2YWx1ZSddXX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9tYXBkaWN0KHZhbGlkKSwgKCctb3B0JywgJzEgdmFsdWUnKSkKKyAgICAgICAgIyBzcGVjaWFsIGF0dGVudGlvbiB0byBzaW5nbGUgc3RhdGVzIHdoaWNoIGV2YWx1dGUgdG8gRmFsc2UKKyAgICAgICAgZm9yIHN0YXRldmFsIGluIChOb25lLCAwLCBGYWxzZSwgJycsIHNldCgpKTogIyBqdXN0IHNvbWUgc2FtcGxlcworICAgICAgICAgICAgdmFsaWQgPSB7J29wdCc6IFsoc3RhdGV2YWwsICd2YWx1ZScpXX0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfbWFwZGljdCh2YWxpZCksCisgICAgICAgICAgICAgICAgKCctb3B0JywgJ3t9IHZhbHVlJykpCisKKyAgICAgICAgIyB2YWx1ZXMgbXVzdCBiZSBpdGVyYWJsZQorICAgICAgICBvcHRzID0geydhJzogTm9uZX0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0dGsuX2Zvcm1hdF9tYXBkaWN0LCBvcHRzKQorCisgICAgICAgICMgaXRlbXMgaW4gdGhlIHZhbHVlIG11c3QgaGF2ZSBzaXplID49IDIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdHRrLl9mb3JtYXRfbWFwZGljdCwKKyAgICAgICAgICAgIHsnYSc6IFsoJ2ludmFsaWQnLCApXX0pCisKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbGVtY3JlYXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZShOb25lKSwgKE5vbmUsICgpKSkKKworICAgICAgICAjIyBUZXN0aW5nIHR5cGUgPSBpbWFnZQorICAgICAgICAjIGltYWdlIHR5cGUgZXhwZWN0cyBhdCBsZWFzdCBhbiBpbWFnZSBuYW1lLCBzbyB0aGlzIHNob3VsZCByYWlzZQorICAgICAgICAjIEluZGV4RXJyb3Igc2luY2UgaXQgdHJpZXMgdG8gYWNjZXNzIHRoZSBpbmRleCAwIG9mIGFuIGVtcHR5IHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUsICdpbWFnZScpCisKKyAgICAgICAgIyBkb24ndCBmb3JtYXQgcmV0dXJuZWQgdmFsdWVzIGFzIGEgdGNsIHNjcmlwdAorICAgICAgICAjIG1pbmltdW0gYWNjZXB0YWJsZSBmb3IgaW1hZ2UgdHlwZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoJ2ltYWdlJywgRmFsc2UsICd0ZXN0JyksCisgICAgICAgICAgICAoInRlc3QgIiwgKCkpKQorICAgICAgICAjIHNwZWNpZml5bmcgYSBzdGF0ZSBzcGVjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgnaW1hZ2UnLCBGYWxzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgKCcnLCAnYScpKSwgKCJ0ZXN0IHt9IGEiLCAoKSkpCisgICAgICAgICMgc3RhdGUgc3BlYyB3aXRoIG11bHRpcGxlIHN0YXRlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoJ2ltYWdlJywgRmFsc2UsICd0ZXN0JywKKyAgICAgICAgICAgICgnYScsICdiJywgJ2MnKSksICgidGVzdCB7YSBifSBjIiwgKCkpKQorICAgICAgICAjIHN0YXRlIHNwZWMgYW5kIG9wdGlvbnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCdpbWFnZScsIEZhbHNlLCAndGVzdCcsCisgICAgICAgICAgICAoJ2EnLCAnYicpLCBhPSd4JywgYj0neScpLCAoInRlc3QgYSBiIiwgKCItYSIsICJ4IiwgIi1iIiwgInkiKSkpCisgICAgICAgICMgZm9ybWF0IHJldHVybmVkIHZhbHVlcyBhcyBhIHRjbCBzY3JpcHQKKyAgICAgICAgIyBzdGF0ZSBzcGVjIHdpdGggbXVsdGlwbGUgc3RhdGVzIGFuZCBhbiBvcHRpb24gd2l0aCBhIG11bHRpdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCdpbWFnZScsIFRydWUsICd0ZXN0JywKKyAgICAgICAgICAgICgnYScsICdiJywgJ2MnLCAnZCcpLCB4PVsyLCAzXSksICgie3Rlc3Qge2EgYiBjfSBkfSIsICIteCB7MiAzfSIpKQorCisgICAgICAgICMjIFRlc3RpbmcgdHlwZSA9IHZzYXBpCisgICAgICAgICMgdnNhcGkgdHlwZSBleHBlY3RzIGF0IGxlYXN0IGEgY2xhc3MgbmFtZSBhbmQgYSBwYXJ0X2lkLCBzbyB0aGlzCisgICAgICAgICMgc2hvdWxkIHJhaXNlIGFuIFZhbHVlRXJyb3Igc2luY2UgaXQgdHJpZXMgdG8gZ2V0IHR3byBlbGVtZW50cyBmcm9tCisgICAgICAgICMgYW4gZW1wdHkgdHVwbGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSwgJ3ZzYXBpJykKKworICAgICAgICAjIGRvbid0IGZvcm1hdCByZXR1cm5lZCB2YWx1ZXMgYXMgYSB0Y2wgc2NyaXB0CisgICAgICAgICMgbWluaW11bSBhY2NlcHRhYmxlIGZvciB2c2FwaQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoJ3ZzYXBpJywgRmFsc2UsICdhJywgJ2InKSwKKyAgICAgICAgICAgICgiYSBiICIsICgpKSkKKyAgICAgICAgIyBub3cgd2l0aCBhIHN0YXRlIHNwZWMgd2l0aCBtdWx0aXBsZSBzdGF0ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCd2c2FwaScsIEZhbHNlLCAnYScsICdiJywKKyAgICAgICAgICAgICgnYScsICdiJywgJ2MnKSksICgiYSBiIHthIGJ9IGMiLCAoKSkpCisgICAgICAgICMgc3RhdGUgc3BlYyBhbmQgb3B0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgndnNhcGknLCBGYWxzZSwgJ2EnLCAnYicsCisgICAgICAgICAgICAoJ2EnLCAnYicpLCBvcHQ9J3gnKSwgKCJhIGIgYSBiIiwgKCItb3B0IiwgIngiKSkpCisgICAgICAgICMgZm9ybWF0IHJldHVybmVkIHZhbHVlcyBhcyBhIHRjbCBzY3JpcHQKKyAgICAgICAgIyBzdGF0ZSBzcGVjIHdpdGggYSBtdWx0aXZhbHVlIGFuZCBhbiBvcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCd2c2FwaScsIFRydWUsICdhJywgJ2InLAorICAgICAgICAgICAgKCdhJywgJ2InLCBbMSwgMl0pLCBvcHQ9J3gnKSwgKCJ7YSBiIHthIGJ9IHsxIDJ9fSIsICItb3B0IHgiKSkKKworICAgICAgICAjIFRlc3RpbmcgdHlwZSA9IGZyb20KKyAgICAgICAgIyBmcm9tIHR5cGUgZXhwZWN0cyBhdCBsZWFzdCBhIHR5cGUgbmFtZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlLCAnZnJvbScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCdmcm9tJywgRmFsc2UsICdhJyksCisgICAgICAgICAgICAoJ2EnLCAoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgnZnJvbScsIEZhbHNlLCAnYScsICdiJyksCisgICAgICAgICAgICAoJ2EnLCAoJ2InLCApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCdmcm9tJywgVHJ1ZSwgJ2EnLCAnYicpLAorICAgICAgICAgICAgKCd7YX0nLCAnYicpKQorCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfbGF5b3V0bGlzdChzZWxmKToKKyAgICAgICAgZGVmIHNhbXBsZShpbmRlbnQ9MCwgaW5kZW50X3NpemU9Mik6CisgICAgICAgICAgICByZXR1cm4gdHRrLl9mb3JtYXRfbGF5b3V0bGlzdCgKKyAgICAgICAgICAgIFsoJ2EnLCB7J290aGVyJzogWzEsIDIsIDNdLCAnY2hpbGRyZW4nOgorICAgICAgICAgICAgICAgIFsoJ2InLCB7J2NoaWxkcmVuJzoKKyAgICAgICAgICAgICAgICAgICAgWygnYycsIHsnY2hpbGRyZW4nOgorICAgICAgICAgICAgICAgICAgICAgICAgWygnZCcsIHsnbmljZSc6ICdvcHQnfSldLCAnc29tZXRoaW5nJzogKDEsIDIpCisgICAgICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgfSldLCBpbmRlbnQ9aW5kZW50LCBpbmRlbnRfc2l6ZT1pbmRlbnRfc2l6ZSlbMF0KKworICAgICAgICBkZWYgc2FtcGxlX2V4cGVjdGVkKGluZGVudD0wLCBpbmRlbnRfc2l6ZT0yKToKKyAgICAgICAgICAgIHNwYWNlcyA9IGxhbWJkYSBhbW91bnQ9MDogJyAnICogKGFtb3VudCArIGluZGVudCkKKyAgICAgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICAgICAgIiVzYSAtb3RoZXIgezEgMiAzfSAtY2hpbGRyZW4ge1xuIgorICAgICAgICAgICAgICAgICIlc2IgLWNoaWxkcmVuIHtcbiIKKyAgICAgICAgICAgICAgICAiJXNjIC1zb21ldGhpbmcgezEgMn0gLWNoaWxkcmVuIHtcbiIKKyAgICAgICAgICAgICAgICAiJXNkIC1uaWNlIG9wdFxuIgorICAgICAgICAgICAgICAgICIlc31cbiIKKyAgICAgICAgICAgICAgICAiJXN9XG4iCisgICAgICAgICAgICAgICAgIiVzfSIgJSAoc3BhY2VzKCksIHNwYWNlcyhpbmRlbnRfc2l6ZSksCisgICAgICAgICAgICAgICAgICAgIHNwYWNlcygyICogaW5kZW50X3NpemUpLCBzcGFjZXMoMyAqIGluZGVudF9zaXplKSwKKyAgICAgICAgICAgICAgICAgICAgc3BhY2VzKDIgKiBpbmRlbnRfc2l6ZSksIHNwYWNlcyhpbmRlbnRfc2l6ZSksIHNwYWNlcygpKSkKKworICAgICAgICAjIGVtcHR5IGxheW91dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X2xheW91dGxpc3QoW10pWzBdLCAnJykKKworICAgICAgICAjIHNtYWxsZXN0IChhZnRlciBhbiBlbXB0eSBvbmUpIGFjY2VwdGFibGUgbGF5b3V0CisgICAgICAgIHNtYWxsZXN0ID0gdHRrLl9mb3JtYXRfbGF5b3V0bGlzdChbKCdhJywgTm9uZSldLCBpbmRlbnQ9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbWFsbGVzdCwKKyAgICAgICAgICAgIHR0ay5fZm9ybWF0X2xheW91dGxpc3QoWygnYScsICcnKV0sIGluZGVudD0wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbWFsbGVzdFswXSwgJ2EnKQorCisgICAgICAgICMgdGVzdGluZyBpbmRlbnRhdGlvbiBsZXZlbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzYW1wbGUoKSwgc2FtcGxlX2V4cGVjdGVkKCkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzYW1wbGUoaSksIHNhbXBsZV9leHBlY3RlZChpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcGxlKGksIGkpLCBzYW1wbGVfZXhwZWN0ZWQoaSwgaSkpCisKKyAgICAgICAgIyBpbnZhbGlkIGxheW91dCBmb3JtYXQsIGRpZmZlcmVudCBraW5kIG9mIGV4Y2VwdGlvbnMgd2lsbCBiZQorICAgICAgICAjIHJhaXNlZAorCisgICAgICAgICMgcGxhaW4gd3JvbmcgZm9ybWF0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fZm9ybWF0X2xheW91dGxpc3QsCisgICAgICAgICAgICBbJ2JhZCcsICdmb3JtYXQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0dGsuX2Zvcm1hdF9sYXlvdXRsaXN0LCBOb25lKQorICAgICAgICAjIF9mb3JtYXRfbGF5b3V0bGlzdCBhbHdheXMgZXhwZWN0cyB0aGUgc2Vjb25kIGl0ZW0gKGluIGV2ZXJ5IGl0ZW0pCisgICAgICAgICMgdG8gYWN0IGxpa2UgYSBkaWN0IChleGNlcHQgd2hlbiB0aGUgdmFsdWUgZXZhbHV0ZXMgdG8gRmFsc2UpLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgIHR0ay5fZm9ybWF0X2xheW91dGxpc3QsIFsoJ2EnLCAnYicpXSkKKyAgICAgICAgIyBiYWQgY2hpbGRyZW4gZm9ybWF0dGluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2Zvcm1hdF9sYXlvdXRsaXN0LAorICAgICAgICAgICAgWygnbmFtZScsIHsnY2hpbGRyZW4nOiB7J2EnOiBOb25lfX0pXSkKKworCisgICAgZGVmIHRlc3Rfc2NyaXB0X2Zyb21fc2V0dGluZ3Moc2VsZik6CisgICAgICAgICMgZW1wdHkgb3B0aW9ucworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR0ay5fc2NyaXB0X2Zyb21fc2V0dGluZ3MoeyduYW1lJzoKKyAgICAgICAgICAgIHsnY29uZmlndXJlJzogTm9uZSwgJ21hcCc6IE5vbmUsICdlbGVtZW50IGNyZWF0ZSc6IE5vbmV9fSkpCisKKyAgICAgICAgIyBlbXB0eSBsYXlvdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHR0ay5fc2NyaXB0X2Zyb21fc2V0dGluZ3MoeyduYW1lJzogeydsYXlvdXQnOiBOb25lfX0pLAorICAgICAgICAgICAgInR0azo6c3R5bGUgbGF5b3V0IG5hbWUge1xubnVsbFxufSIpCisKKyAgICAgICAgY29uZmlnZGljdCA9IHt1J86xzrLOsyc6IFRydWUsIHUnw6EnOiBGYWxzZX0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgdHRrLl9zY3JpcHRfZnJvbV9zZXR0aW5ncyh7J25hbWUnOiB7J2NvbmZpZ3VyZSc6IGNvbmZpZ2RpY3R9fSkpCisKKyAgICAgICAgbWFwZGljdCA9IHt1J8O8w7HDrcSHw7Nkw6gnOiBbKHUnw6EnLCB1J3bDo2wnKV19CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHR0ay5fc2NyaXB0X2Zyb21fc2V0dGluZ3MoeyduYW1lJzogeydtYXAnOiBtYXBkaWN0fX0pKQorCisgICAgICAgICMgaW52YWxpZCBpbWFnZSBlbGVtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsCisgICAgICAgICAgICB0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzLCB7J25hbWUnOiB7J2VsZW1lbnQgY3JlYXRlJzogWydpbWFnZSddfX0pCisKKyAgICAgICAgIyBtaW5pbWFsIHZhbGlkIGltYWdlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzKHsnbmFtZSc6CisgICAgICAgICAgICB7J2VsZW1lbnQgY3JlYXRlJzogWydpbWFnZScsICduYW1lJ119fSkpCisKKyAgICAgICAgaW1hZ2UgPSB7J3RoaW5nJzogeydlbGVtZW50IGNyZWF0ZSc6CisgICAgICAgICAgICBbJ2ltYWdlJywgJ25hbWUnLCAoJ3N0YXRlMScsICdzdGF0ZTInLCAndmFsJyldfX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzKGltYWdlKSwKKyAgICAgICAgICAgICJ0dGs6OnN0eWxlIGVsZW1lbnQgY3JlYXRlIHRoaW5nIGltYWdlIHtuYW1lIHtzdGF0ZTEgc3RhdGUyfSB2YWx9ICIpCisKKyAgICAgICAgaW1hZ2VbJ3RoaW5nJ11bJ2VsZW1lbnQgY3JlYXRlJ10uYXBwZW5kKHsnb3B0JzogMzB9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fc2NyaXB0X2Zyb21fc2V0dGluZ3MoaW1hZ2UpLAorICAgICAgICAgICAgInR0azo6c3R5bGUgZWxlbWVudCBjcmVhdGUgdGhpbmcgaW1hZ2Uge25hbWUge3N0YXRlMSBzdGF0ZTJ9IHZhbH0gIgorICAgICAgICAgICAgIi1vcHQgMzAiKQorCisgICAgICAgIGltYWdlWyd0aGluZyddWydlbGVtZW50IGNyZWF0ZSddWy0xXVsnb3B0J10gPSBbTW9ja1RjbE9iaigzKSwKKyAgICAgICAgICAgIE1vY2tUY2xPYmooJzJtJyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9zY3JpcHRfZnJvbV9zZXR0aW5ncyhpbWFnZSksCisgICAgICAgICAgICAidHRrOjpzdHlsZSBlbGVtZW50IGNyZWF0ZSB0aGluZyBpbWFnZSB7bmFtZSB7c3RhdGUxIHN0YXRlMn0gdmFsfSAiCisgICAgICAgICAgICAiLW9wdCB7MyAybX0iKQorCisKKyAgICBkZWYgdGVzdF9kaWN0X2Zyb21fdGNsdHVwbGUoc2VsZik6CisgICAgICAgIGZha2V0dHVwbGUgPSAoJy1hJywgJ3sxIDIgM30nLCAnLXNvbWV0aGluZycsICdmb28nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoZmFrZXR0dXBsZSwgRmFsc2UpLAorICAgICAgICAgICAgeyctYSc6ICd7MSAyIDN9JywgJy1zb21ldGhpbmcnOiAnZm9vJ30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2RpY3RfZnJvbV90Y2x0dXBsZShmYWtldHR1cGxlKSwKKyAgICAgICAgICAgIHsnYSc6ICd7MSAyIDN9JywgJ3NvbWV0aGluZyc6ICdmb28nfSkKKworICAgICAgICAjIHBhc3NpbmcgYSB0dXBsZSB3aXRoIGEgc2luZ2xlIGl0ZW0gc2hvdWxkIHJldHVybiBhbiBlbXB0eSBkaWN0LAorICAgICAgICAjIHNpbmNlIGl0IHRyaWVzIHRvIGJyZWFrIHRoZSB0dXBsZSBieSBwYWlycy4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0dGsuX2RpY3RfZnJvbV90Y2x0dXBsZSgoJ3NpbmdsZScsICkpKQorCisgICAgICAgIHNzcGVjID0gTW9ja1N0YXRlU3BlYygnYScsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2RpY3RfZnJvbV90Y2x0dXBsZSgoJy1hJywgKHNzcGVjLCAndmFsJykpKSwKKyAgICAgICAgICAgIHsnYSc6IFsoJ2EnLCAnYicsICd2YWwnKV19KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoKE1vY2tUY2xPYmooJy1wYWRkaW5nJyksCisgICAgICAgICAgICBbTW9ja1RjbE9iaignMScpLCAyLCBNb2NrVGNsT2JqKCczbScpXSkpLAorICAgICAgICAgICAgeydwYWRkaW5nJzogWzEsIDIsICczbSddfSkKKworCisgICAgZGVmIHRlc3RfbGlzdF9mcm9tX3N0YXRlc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIHRlc3RfaXQoc3NwZWMsIHZhbHVlLCByZXNfdmFsdWUsIHN0YXRlcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX3N0YXRlc3BlYygKKyAgICAgICAgICAgICAgICAoc3NwZWMsIHZhbHVlKSksIFtzdGF0ZXMgKyAocmVzX3ZhbHVlLCApXSkKKworICAgICAgICBzdGF0ZXNfZXZlbiA9IHR1cGxlKCdzdGF0ZSVkJyAlIGkgZm9yIGkgaW4gcmFuZ2UoNikpCisgICAgICAgIHN0YXRlc3BlYyA9IE1vY2tTdGF0ZVNwZWMoKnN0YXRlc19ldmVuKQorICAgICAgICB0ZXN0X2l0KHN0YXRlc3BlYywgJ3ZhbCcsICd2YWwnLCBzdGF0ZXNfZXZlbikKKyAgICAgICAgdGVzdF9pdChzdGF0ZXNwZWMsIE1vY2tUY2xPYmooJ3ZhbCcpLCAndmFsJywgc3RhdGVzX2V2ZW4pCisKKyAgICAgICAgc3RhdGVzX29kZCA9IHR1cGxlKCdzdGF0ZSVkJyAlIGkgZm9yIGkgaW4gcmFuZ2UoNSkpCisgICAgICAgIHN0YXRlc3BlYyA9IE1vY2tTdGF0ZVNwZWMoKnN0YXRlc19vZGQpCisgICAgICAgIHRlc3RfaXQoc3RhdGVzcGVjLCAndmFsJywgJ3ZhbCcsIHN0YXRlc19vZGQpCisKKyAgICAgICAgdGVzdF9pdCgoJ2EnLCAnYicsICdjJyksIE1vY2tUY2xPYmooJ3ZhbCcpLCAndmFsJywgKCdhJywgJ2InLCAnYycpKQorCisKKyAgICBkZWYgdGVzdF9saXN0X2Zyb21fbGF5b3V0dHVwbGUoc2VsZik6CisgICAgICAgICMgZW1wdHkgbGF5b3V0IHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUoKCkpKQorCisgICAgICAgICMgc2hvcnRlc3QgbGF5b3V0IHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUoKCduYW1lJywgKSksCisgICAgICAgICAgICBbKCduYW1lJywge30pXSkKKworICAgICAgICAjIG5vdCBzbyBpbnRlcmVzdGluZyBsdHVwbGUKKyAgICAgICAgc2FtcGxlX2x0dXBsZSA9ICgnbmFtZScsICctb3B0aW9uJywgJ3ZhbHVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZShzYW1wbGVfbHR1cGxlKSwKKyAgICAgICAgICAgIFsoJ25hbWUnLCB7J29wdGlvbic6ICd2YWx1ZSd9KV0pCisKKyAgICAgICAgIyBlbXB0eSBjaGlsZHJlbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKAorICAgICAgICAgICAgKCdzb21ldGhpbmcnLCAnLWNoaWxkcmVuJywgKCkpKSwKKyAgICAgICAgICAgIFsoJ3NvbWV0aGluZycsIHsnY2hpbGRyZW4nOiBbXX0pXQorICAgICAgICApCisKKyAgICAgICAgIyBtb3JlIGludGVyZXN0aW5nIGx0dXBsZQorICAgICAgICBsdHVwbGUgPSAoCisgICAgICAgICAgICAnbmFtZScsICctb3B0aW9uJywgJ25pY2VvbmUnLCAnLWNoaWxkcmVuJywgKAorICAgICAgICAgICAgICAgICgnb3RoZXJvbmUnLCAnLWNoaWxkcmVuJywgKAorICAgICAgICAgICAgICAgICAgICAoJ2NoaWxkJywgKSksICctb3RoZXJvcHQnLCAnb3RoZXJ2YWx1ZScKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZShsdHVwbGUpLAorICAgICAgICAgICAgWygnbmFtZScsIHsnb3B0aW9uJzogJ25pY2VvbmUnLCAnY2hpbGRyZW4nOgorICAgICAgICAgICAgICAgIFsoJ290aGVyb25lJywgeydvdGhlcm9wdCc6ICdvdGhlcnZhbHVlJywgJ2NoaWxkcmVuJzoKKyAgICAgICAgICAgICAgICAgICAgWygnY2hpbGQnLCB7fSldCisgICAgICAgICAgICAgICAgfSldCisgICAgICAgICAgICB9KV0KKyAgICAgICAgKQorCisgICAgICAgICMgYmFkIHR1cGxlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwKKyAgICAgICAgICAgICgnbmFtZScsICdub19taW51cycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwKKyAgICAgICAgICAgICgnbmFtZScsICdub19taW51cycsICd2YWx1ZScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwKKyAgICAgICAgICAgICgnc29tZXRoaW5nJywgJy1jaGlsZHJlbicpKSAjIG5vIGNoaWxkcmVuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlLAorICAgICAgICAgICAgKCdzb21ldGhpbmcnLCAnLWNoaWxkcmVuJywgJ3ZhbHVlJykpICMgaW52YWxpZCBjaGlsZHJlbgorCisKKyAgICBkZWYgdGVzdF92YWxfb3JfZGljdChzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMob3B0LCB2YWw9Tm9uZSk6CisgICAgICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gInRlc3QgdmFsIgorICAgICAgICAgICAgcmV0dXJuIChvcHQsIHZhbCkKKworICAgICAgICBvcHRpb25zID0geyd0ZXN0JzogTm9uZX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3ZhbF9vcl9kaWN0KG9wdGlvbnMsIGZ1bmMpLCAidGVzdCB2YWwiKQorCisgICAgICAgIG9wdGlvbnMgPSB7J3Rlc3QnOiAzfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fdmFsX29yX2RpY3Qob3B0aW9ucywgZnVuYyksIG9wdGlvbnMpCisKKworICAgIGRlZiB0ZXN0X2NvbnZlcnRfc3RyaW5ndmFsKHNlbGYpOgorICAgICAgICB0ZXN0cyA9ICgKKyAgICAgICAgICAgICgwLCAwKSwgKCcwOScsIDkpLCAoJ2EnLCAnYScpLCAodSfDocOaJywgdSfDocOaJyksIChbXSwgJ1tdJyksCisgICAgICAgICAgICAoTm9uZSwgJ05vbmUnKQorICAgICAgICApCisgICAgICAgIGZvciBvcmlnLCBleHBlY3RlZCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9jb252ZXJ0X3N0cmluZ3ZhbChvcmlnKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgaWYgc3lzLmdldGRlZmF1bHRlbmNvZGluZygpID09ICdhc2NpaSc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgdHRrLl9jb252ZXJ0X3N0cmluZ3ZhbCwgJ8OhJykKKworCitjbGFzcyBUY2xPYmpzVG9QeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgYWRpY3QgPSB7J29wdCc6IHUndsOkbMO6w6gnfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay50Y2xvYmpzX3RvX3B5KGFkaWN0KSwgeydvcHQnOiB1J3bDpGzDusOoJ30pCisKKyAgICAgICAgYWRpY3RbJ29wdCddID0gTW9ja1RjbE9iaihhZGljdFsnb3B0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLnRjbG9ianNfdG9fcHkoYWRpY3QpLCB7J29wdCc6IHUndsOkbMO6w6gnfSkKKworICAgIGRlZiB0ZXN0X211bHRpdmFsdWVzKHNlbGYpOgorICAgICAgICBhZGljdCA9IHsnb3B0JzogWzEsIDIsIDMsIDRdfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay50Y2xvYmpzX3RvX3B5KGFkaWN0KSwgeydvcHQnOiBbMSwgMiwgMywgNF19KQorCisgICAgICAgIGFkaWN0WydvcHQnXSA9IFsxLCAneG0nLCAzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay50Y2xvYmpzX3RvX3B5KGFkaWN0KSwgeydvcHQnOiBbMSwgJ3htJywgM119KQorCisgICAgICAgIGFkaWN0WydvcHQnXSA9IChNb2NrU3RhdGVTcGVjKCdhJywgJ2InKSwgdSd2w6FsxanDqCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLnRjbG9ianNfdG9fcHkoYWRpY3QpLAorICAgICAgICAgICAgeydvcHQnOiBbKCdhJywgJ2InLCB1J3bDoWzFqcOoJyldfSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay50Y2xvYmpzX3RvX3B5KHsneCc6IFsneSB6J119KSwKKyAgICAgICAgICAgIHsneCc6IFsneSB6J119KQorCisgICAgZGVmIHRlc3Rfbm9zcGxpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsudGNsb2Jqc190b19weSh7J3RleHQnOiAnc29tZSB0ZXh0J30pLAorICAgICAgICAgICAgeyd0ZXh0JzogJ3NvbWUgdGV4dCd9KQorCit0ZXN0c19ub2d1aSA9IChJbnRlcm5hbEZ1bmN0aW9uc1Rlc3QsIFRjbE9ianNUb1B5VGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKyAgICBydW5fdW5pdHRlc3QoKnRlc3RzX25vZ3VpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL3Rlc3Rfc3R5bGUucHkgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9zdHlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzBlMDc1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL3Rlc3Rfc3R5bGUucHkKQEAgLTAsMCArMSw5MSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgVGtpbnRlcgoraW1wb3J0IHR0aworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIHJ1bl91bml0dGVzdAorCitpbXBvcnQgc3VwcG9ydAorCityZXF1aXJlcygnZ3VpJykKKworY2xhc3MgU3R5bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zdHlsZSA9IHR0ay5TdHlsZSgpCisKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZShzZWxmKToKKyAgICAgICAgc3R5bGUgPSBzZWxmLnN0eWxlCisgICAgICAgIHN0eWxlLmNvbmZpZ3VyZSgnVEJ1dHRvbicsIGJhY2tncm91bmQ9J3llbGxvdycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R5bGUuY29uZmlndXJlKCdUQnV0dG9uJywgJ2JhY2tncm91bmQnKSwKKyAgICAgICAgICAgICd5ZWxsb3cnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdHlsZS5jb25maWd1cmUoJ1RCdXR0b24nKSwgZGljdCkpCisKKworICAgIGRlZiB0ZXN0X21hcChzZWxmKToKKyAgICAgICAgc3R5bGUgPSBzZWxmLnN0eWxlCisgICAgICAgIHN0eWxlLm1hcCgnVEJ1dHRvbicsIGJhY2tncm91bmQ9WygnYWN0aXZlJywgJ2JhY2tncm91bmQnLCAnYmx1ZScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHlsZS5tYXAoJ1RCdXR0b24nLCAnYmFja2dyb3VuZCcpLAorICAgICAgICAgICAgWygnYWN0aXZlJywgJ2JhY2tncm91bmQnLCAnYmx1ZScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3R5bGUubWFwKCdUQnV0dG9uJyksIGRpY3QpKQorCisKKyAgICBkZWYgdGVzdF9sb29rdXAoc2VsZik6CisgICAgICAgIHN0eWxlID0gc2VsZi5zdHlsZQorICAgICAgICBzdHlsZS5jb25maWd1cmUoJ1RCdXR0b24nLCBiYWNrZ3JvdW5kPSd5ZWxsb3cnKQorICAgICAgICBzdHlsZS5tYXAoJ1RCdXR0b24nLCBiYWNrZ3JvdW5kPVsoJ2FjdGl2ZScsICdiYWNrZ3JvdW5kJywgJ2JsdWUnKV0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHlsZS5sb29rdXAoJ1RCdXR0b24nLCAnYmFja2dyb3VuZCcpLCAneWVsbG93JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHlsZS5sb29rdXAoJ1RCdXR0b24nLCAnYmFja2dyb3VuZCcsCisgICAgICAgICAgICBbJ2FjdGl2ZScsICdiYWNrZ3JvdW5kJ10pLCAnYmx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R5bGUubG9va3VwKCdUQnV0dG9uJywgJ29wdGlvbm5vdGRlZmluZWQnLAorICAgICAgICAgICAgZGVmYXVsdD0naWtuZXdpdCcpLCAnaWtuZXdpdCcpCisKKworICAgIGRlZiB0ZXN0X2xheW91dChzZWxmKToKKyAgICAgICAgc3R5bGUgPSBzZWxmLnN0eWxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHN0eWxlLmxheW91dCwgJ05vdEFMYXlvdXQnKQorICAgICAgICB0dl9zdHlsZSA9IHN0eWxlLmxheW91dCgnVHJlZXZpZXcnKQorCisgICAgICAgICMgImVyYXNlIiBUcmVldmlldyBsYXlvdXQKKyAgICAgICAgc3R5bGUubGF5b3V0KCdUcmVldmlldycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0eWxlLmxheW91dCgnVHJlZXZpZXcnKSwKKyAgICAgICAgICAgIFsoJ251bGwnLCB7J3N0aWNreSc6ICduc3dlJ30pXQorICAgICAgICApCisKKyAgICAgICAgIyByZXN0b3JlIGxheW91dAorICAgICAgICBzdHlsZS5sYXlvdXQoJ1RyZWV2aWV3JywgdHZfc3R5bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R5bGUubGF5b3V0KCdUcmVldmlldycpLCB0dl9zdHlsZSkKKworICAgICAgICAjIHNob3VsZCByZXR1cm4gYSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN0eWxlLmxheW91dCgnVEJ1dHRvbicpLCBsaXN0KSkKKworICAgICAgICAjIGNvcnJlY3QgbGF5b3V0LCBidXQgIm9wdGlvbiIgZG9lc24ndCBleGlzdCBhcyBvcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc3R5bGUubGF5b3V0LCAnVHJlZXZpZXcnLAorICAgICAgICAgICAgWygnbmFtZScsIHsnb3B0aW9uJzogJ2luZXhpc3RlbnQnfSldKQorCisKKyAgICBkZWYgdGVzdF90aGVtZV91c2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuc3R5bGUudGhlbWVfdXNlLAorICAgICAgICAgICAgJ25vbmV4aXN0aW5nbmFtZScpCisKKyAgICAgICAgY3Vycl90aGVtZSA9IHNlbGYuc3R5bGUudGhlbWVfdXNlKCkKKyAgICAgICAgbmV3X3RoZW1lID0gTm9uZQorICAgICAgICBmb3IgdGhlbWUgaW4gc2VsZi5zdHlsZS50aGVtZV9uYW1lcygpOgorICAgICAgICAgICAgaWYgdGhlbWUgIT0gY3Vycl90aGVtZToKKyAgICAgICAgICAgICAgICBuZXdfdGhlbWUgPSB0aGVtZQorICAgICAgICAgICAgICAgIHNlbGYuc3R5bGUudGhlbWVfdXNlKHRoZW1lKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGp1c3Qgb25lIHRoZW1lIGF2YWlsYWJsZSwgY2FuJ3QgZ28gb24gd2l0aCB0ZXN0cworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdXJyX3RoZW1lID09IG5ld190aGVtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdfdGhlbWUgIT0gc2VsZi5zdHlsZS50aGVtZV91c2UoKSkKKworICAgICAgICBzZWxmLnN0eWxlLnRoZW1lX3VzZShjdXJyX3RoZW1lKQorCisKK3Rlc3RzX2d1aSA9IChTdHlsZVRlc3QsICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QoKnRlc3RzX2d1aSkKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF93aWRnZXRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjMyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF93aWRnZXRzLnB5CkBAIC0wLDAgKzEsMTEzNyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgVGtpbnRlcgoraW1wb3J0IHR0aworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIHJ1bl91bml0dGVzdAorCitpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0X2Z1bmN0aW9ucyBpbXBvcnQgTW9ja1RjbE9iaiwgTW9ja1N0YXRlU3BlYworCityZXF1aXJlcygnZ3VpJykKKworY2xhc3MgV2lkZ2V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgbWV0aG9kcyBhdmFpbGFibGUgaW4gZXZlcnkgdHRrIHdpZGdldC4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYud2lkZ2V0ID0gdHRrLkJ1dHRvbih3aWR0aD0wLCB0ZXh0PSJUZXh0IikKKyAgICAgICAgc2VsZi53aWRnZXQucGFjaygpCisgICAgICAgIHNlbGYud2lkZ2V0LndhaXRfdmlzaWJpbGl0eSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYud2lkZ2V0LmRlc3Ryb3koKQorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisKKyAgICBkZWYgdGVzdF9pZGVudGlmeShzZWxmKToKKyAgICAgICAgc2VsZi53aWRnZXQudXBkYXRlX2lkbGV0YXNrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuaWRlbnRpZnkoCisgICAgICAgICAgICBpbnQoc2VsZi53aWRnZXQud2luZm9fd2lkdGgoKSAvIDIpLAorICAgICAgICAgICAgaW50KHNlbGYud2lkZ2V0LndpbmZvX2hlaWdodCgpIC8gMikKKyAgICAgICAgICAgICksICJsYWJlbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuaWRlbnRpZnkoLTEsIC0xKSwgIiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi53aWRnZXQuaWRlbnRpZnksIE5vbmUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYud2lkZ2V0LmlkZW50aWZ5LCA1LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLndpZGdldC5pZGVudGlmeSwgNSwgJycpCisKKworICAgIGRlZiB0ZXN0X3dpZGdldF9zdGF0ZShzZWxmKToKKyAgICAgICAgIyBYWFggbm90IHN1cmUgYWJvdXQgdGhlIHBvcnRhYmlsaXR5IG9mIGFsbCB0aGVzZSB0ZXN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnN0YXRlKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0Lmluc3RhdGUoWychZGlzYWJsZWQnXSksIFRydWUpCisKKyAgICAgICAgIyBjaGFuZ2luZyBmcm9tICFkaXNhYmxlZCB0byBkaXNhYmxlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnN0YXRlKFsnZGlzYWJsZWQnXSksICgnIWRpc2FibGVkJywgKSkKKyAgICAgICAgIyBubyBzdGF0ZSBjaGFuZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5zdGF0ZShbJ2Rpc2FibGVkJ10pLCAoKSkKKyAgICAgICAgIyBjaGFuZ2UgYmFjayB0byAhZGlzYWJsZSBidXQgYWxzbyBhY3RpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5zdGF0ZShbJyFkaXNhYmxlZCcsICdhY3RpdmUnXSksCisgICAgICAgICAgICAoJyFhY3RpdmUnLCAnZGlzYWJsZWQnKSkKKyAgICAgICAgIyBubyBzdGF0ZSBjaGFuZ2VzLCBhZ2FpbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnN0YXRlKFsnIWRpc2FibGVkJywgJ2FjdGl2ZSddKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuc3RhdGUoWydhY3RpdmUnLCAnIWRpc2FibGVkJ10pLCAoKSkKKworICAgICAgICBkZWYgdGVzdF9jYihhcmcxLCAqKmt3KToKKyAgICAgICAgICAgIHJldHVybiBhcmcxLCBrdworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0Lmluc3RhdGUoWychZGlzYWJsZWQnXSwKKyAgICAgICAgICAgIHRlc3RfY2IsICJoaSIsICoqeyJtc2ciOiAidGhlcmUifSksCisgICAgICAgICAgICAoJ2hpJywgeydtc2cnOiAndGhlcmUnfSkpCisKKyAgICAgICAgIyBhdHRlbXB0IHRvIHNldCBpbnZhbGlkIHN0YXRlc3BlYworICAgICAgICBjdXJyc3RhdGUgPSBzZWxmLndpZGdldC5zdGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYud2lkZ2V0Lmluc3RhdGUsCisgICAgICAgICAgICBbJ2JhZHN0YXRlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYud2lkZ2V0Lmluc3RhdGUsCisgICAgICAgICAgICBbJ2Rpc2FibGVkJywgJ2JhZHN0YXRlJ10pCisgICAgICAgICMgdmVyaWZ5IHRoYXQgd2lkZ2V0IGRpZG4ndCBjaGFuZ2UgaXRzIHN0YXRlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycnN0YXRlLCBzZWxmLndpZGdldC5zdGF0ZSgpKQorCisgICAgICAgICMgZW5zdXJpbmcgdGhhdCBwYXNzaW5nIE5vbmUgYXMgc3RhdGUgZG9lc24ndCBtb2RpZnkgY3VycmVudCBzdGF0ZQorICAgICAgICBzZWxmLndpZGdldC5zdGF0ZShbJ2FjdGl2ZScsICchZGlzYWJsZWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5zdGF0ZSgpLCAoJ2FjdGl2ZScsICkpCisKKworY2xhc3MgQnV0dG9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbnZva2Uoc2VsZik6CisgICAgICAgIHN1Y2Nlc3MgPSBbXQorICAgICAgICBidG4gPSB0dGsuQnV0dG9uKGNvbW1hbmQ9bGFtYmRhOiBzdWNjZXNzLmFwcGVuZCgxKSkKKyAgICAgICAgYnRuLmludm9rZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQorCisKK2NsYXNzIENoZWNrYnV0dG9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbnZva2Uoc2VsZik6CisgICAgICAgIHN1Y2Nlc3MgPSBbXQorICAgICAgICBkZWYgY2JfdGVzdCgpOgorICAgICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiAiY2IgdGVzdCBjYWxsZWQiCisKKyAgICAgICAgY2J0biA9IHR0ay5DaGVja2J1dHRvbihjb21tYW5kPWNiX3Rlc3QpCisgICAgICAgICMgdGhlIHZhcmlhYmxlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSB0dGsuQ2hlY2tidXR0b24gaXMgYWN0dWFsbHkKKyAgICAgICAgIyB1bmRlZmluZWQgdGlsbCB3ZSBpbnZva2UgdGhlIENoZWNrYnV0dG9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2J0bi5zdGF0ZSgpLCAoJ2FsdGVybmF0ZScsICkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIGNidG4udGsuZ2xvYmFsZ2V0dmFyLAorICAgICAgICAgICAgY2J0blsndmFyaWFibGUnXSkKKworICAgICAgICByZXMgPSBjYnRuLmludm9rZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAiY2IgdGVzdCBjYWxsZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNidG5bJ29udmFsdWUnXSwKKyAgICAgICAgICAgIGNidG4udGsuZ2xvYmFsZ2V0dmFyKGNidG5bJ3ZhcmlhYmxlJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3VjY2VzcykKKworICAgICAgICBjYnRuWydjb21tYW5kJ10gPSAnJworICAgICAgICByZXMgPSBjYnRuLmludm9rZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oc3VjY2VzcykgPiAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNidG5bJ29mZnZhbHVlJ10sCisgICAgICAgICAgICBjYnRuLnRrLmdsb2JhbGdldHZhcihjYnRuWyd2YXJpYWJsZSddKSkKKworCitjbGFzcyBDb21ib2JveFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKKyAgICAgICAgc2VsZi5jb21ibyA9IHR0ay5Db21ib2JveCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY29tYm8uZGVzdHJveSgpCisgICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCisKKyAgICBkZWYgX3Nob3dfZHJvcF9kb3duX2xpc3Rib3goc2VsZik6CisgICAgICAgIHdpZHRoID0gc2VsZi5jb21iby53aW5mb193aWR0aCgpCisgICAgICAgIHNlbGYuY29tYm8uZXZlbnRfZ2VuZXJhdGUoJzxCdXR0b25QcmVzcy0xPicsIHg9d2lkdGggLSA1LCB5PTUpCisgICAgICAgIHNlbGYuY29tYm8uZXZlbnRfZ2VuZXJhdGUoJzxCdXR0b25SZWxlYXNlLTE+JywgeD13aWR0aCAtIDUsIHk9NSkKKyAgICAgICAgc2VsZi5jb21iby51cGRhdGVfaWRsZXRhc2tzKCkKKworCisgICAgZGVmIHRlc3RfdmlydHVhbF9ldmVudChzZWxmKToKKyAgICAgICAgc3VjY2VzcyA9IFtdCisKKyAgICAgICAgc2VsZi5jb21ib1sndmFsdWVzJ10gPSBbMV0KKyAgICAgICAgc2VsZi5jb21iby5iaW5kKCc8PENvbWJvYm94U2VsZWN0ZWQ+PicsCisgICAgICAgICAgICBsYW1iZGEgZXZ0OiBzdWNjZXNzLmFwcGVuZChUcnVlKSkKKyAgICAgICAgc2VsZi5jb21iby5wYWNrKCkKKyAgICAgICAgc2VsZi5jb21iby53YWl0X3Zpc2liaWxpdHkoKQorCisgICAgICAgIGhlaWdodCA9IHNlbGYuY29tYm8ud2luZm9faGVpZ2h0KCkKKyAgICAgICAgc2VsZi5fc2hvd19kcm9wX2Rvd25fbGlzdGJveCgpCisgICAgICAgIHNlbGYuY29tYm8udXBkYXRlKCkKKyAgICAgICAgc2VsZi5jb21iby5ldmVudF9nZW5lcmF0ZSgnPFJldHVybj4nKQorICAgICAgICBzZWxmLmNvbWJvLnVwZGF0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCisKKworICAgIGRlZiB0ZXN0X3Bvc3Rjb21tYW5kKHNlbGYpOgorICAgICAgICBzdWNjZXNzID0gW10KKworICAgICAgICBzZWxmLmNvbWJvWydwb3N0Y29tbWFuZCddID0gbGFtYmRhOiBzdWNjZXNzLmFwcGVuZChUcnVlKQorICAgICAgICBzZWxmLmNvbWJvLnBhY2soKQorICAgICAgICBzZWxmLmNvbWJvLndhaXRfdmlzaWJpbGl0eSgpCisKKyAgICAgICAgc2VsZi5fc2hvd19kcm9wX2Rvd25fbGlzdGJveCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQorCisgICAgICAgICMgdGVzdGluZyBwb3N0Y29tbWFuZCByZW1vdmFsCisgICAgICAgIHNlbGYuY29tYm9bJ3Bvc3Rjb21tYW5kJ10gPSAnJworICAgICAgICBzZWxmLl9zaG93X2Ryb3BfZG93bl9saXN0Ym94KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3VjY2VzcyksIDEpCisKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZGVmIGNoZWNrX2dldF9jdXJyZW50KGdldHZhbCwgY3VycnZhbCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tYm8uZ2V0KCksIGdldHZhbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21iby5jdXJyZW50KCksIGN1cnJ2YWwpCisKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJycsIC0xKQorCisgICAgICAgIHNlbGYuY29tYm9bJ3ZhbHVlcyddID0gWydhJywgMSwgJ2MnXQorCisgICAgICAgIHNlbGYuY29tYm8uc2V0KCdjJykKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJ2MnLCAyKQorCisgICAgICAgIHNlbGYuY29tYm8uY3VycmVudCgwKQorICAgICAgICBjaGVja19nZXRfY3VycmVudCgnYScsIDApCisKKyAgICAgICAgc2VsZi5jb21iby5zZXQoJ2QnKQorICAgICAgICBjaGVja19nZXRfY3VycmVudCgnZCcsIC0xKQorCisgICAgICAgICMgdGVzdGluZyB2YWx1ZXMgd2l0aCBlbXB0eSBzdHJpbmcKKyAgICAgICAgc2VsZi5jb21iby5zZXQoJycpCisgICAgICAgIHNlbGYuY29tYm9bJ3ZhbHVlcyddID0gKDEsIDIsICcnLCAzKQorICAgICAgICBjaGVja19nZXRfY3VycmVudCgnJywgMikKKworICAgICAgICAjIHRlc3RpbmcgdmFsdWVzIHdpdGggZW1wdHkgc3RyaW5nIHNldCB0aHJvdWdoIGNvbmZpZ3VyZQorICAgICAgICBzZWxmLmNvbWJvLmNvbmZpZ3VyZSh2YWx1ZXM9WzEsICcnLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbWJvWyd2YWx1ZXMnXSwgKCcxJywgJycsICcyJykpCisKKyAgICAgICAgIyBvdXQgb2YgcmFuZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5jb21iby5jdXJyZW50LAorICAgICAgICAgICAgbGVuKHNlbGYuY29tYm9bJ3ZhbHVlcyddKSkKKyAgICAgICAgIyBpdCBleHBlY3RzIGFuIGludGVnZXIgKG9yIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gaW50KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLmNvbWJvLmN1cnJlbnQsICcnKQorCisgICAgICAgICMgdGVzdGluZyBjcmVhdGluZyBjb21ib2JveCB3aXRoIGVtcHR5IHN0cmluZyBpbiB2YWx1ZXMKKyAgICAgICAgY29tYm8yID0gdHRrLkNvbWJvYm94KHZhbHVlcz1bMSwgMiwgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWJvMlsndmFsdWVzJ10sICgnMScsICcyJywgJycpKQorICAgICAgICBjb21ibzIuZGVzdHJveSgpCisKKworY2xhc3MgRW50cnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYuZW50cnkgPSB0dGsuRW50cnkoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmVudHJ5LmRlc3Ryb3koKQorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisKKyAgICBkZWYgdGVzdF9iYm94KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmVudHJ5LmJib3goMCkpLCA0KQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLmVudHJ5LmJib3goMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShpdGVtLCBpbnQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuZW50cnkuYmJveCwgJ25vaW5kZXgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLmVudHJ5LmJib3gsIE5vbmUpCisKKworICAgIGRlZiB0ZXN0X2lkZW50aWZ5KHNlbGYpOgorICAgICAgICBzZWxmLmVudHJ5LnBhY2soKQorICAgICAgICBzZWxmLmVudHJ5LndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIHNlbGYuZW50cnkudXBkYXRlX2lkbGV0YXNrcygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LmlkZW50aWZ5KDUsIDUpLCAidGV4dGFyZWEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW50cnkuaWRlbnRpZnkoLTEsIC0xKSwgIiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5lbnRyeS5pZGVudGlmeSwgTm9uZSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5lbnRyeS5pZGVudGlmeSwgNSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5lbnRyeS5pZGVudGlmeSwgNSwgJycpCisKKworICAgIGRlZiB0ZXN0X3ZhbGlkYXRpb25fb3B0aW9ucyhzZWxmKToKKyAgICAgICAgc3VjY2VzcyA9IFtdCisgICAgICAgIHRlc3RfaW52YWxpZCA9IGxhbWJkYTogc3VjY2Vzcy5hcHBlbmQoVHJ1ZSkKKworICAgICAgICBzZWxmLmVudHJ5Wyd2YWxpZGF0ZSddID0gJ25vbmUnCisgICAgICAgIHNlbGYuZW50cnlbJ3ZhbGlkYXRlY29tbWFuZCddID0gbGFtYmRhOiBGYWxzZQorCisgICAgICAgIHNlbGYuZW50cnlbJ2ludmFsaWRjb21tYW5kJ10gPSB0ZXN0X2ludmFsaWQKKyAgICAgICAgc2VsZi5lbnRyeS52YWxpZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQorCisgICAgICAgIHNlbGYuZW50cnlbJ2ludmFsaWRjb21tYW5kJ10gPSAnJworICAgICAgICBzZWxmLmVudHJ5LnZhbGlkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3VjY2VzcyksIDEpCisKKyAgICAgICAgc2VsZi5lbnRyeVsnaW52YWxpZGNvbW1hbmQnXSA9IHRlc3RfaW52YWxpZAorICAgICAgICBzZWxmLmVudHJ5Wyd2YWxpZGF0ZWNvbW1hbmQnXSA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmVudHJ5LnZhbGlkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3VjY2VzcyksIDEpCisKKyAgICAgICAgc2VsZi5lbnRyeVsndmFsaWRhdGVjb21tYW5kJ10gPSAnJworICAgICAgICBzZWxmLmVudHJ5LnZhbGlkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3VjY2VzcyksIDEpCisKKyAgICAgICAgc2VsZi5lbnRyeVsndmFsaWRhdGVjb21tYW5kJ10gPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuZW50cnkudmFsaWRhdGUpCisKKworICAgIGRlZiB0ZXN0X3ZhbGlkYXRpb24oc2VsZik6CisgICAgICAgIHZhbGlkYXRpb24gPSBbXQorICAgICAgICBkZWYgdmFsaWRhdGUodG9faW5zZXJ0KToKKyAgICAgICAgICAgIGlmIG5vdCAnYScgPD0gdG9faW5zZXJ0Lmxvd2VyKCkgPD0gJ3onOgorICAgICAgICAgICAgICAgIHZhbGlkYXRpb24uYXBwZW5kKEZhbHNlKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgdmFsaWRhdGlvbi5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgc2VsZi5lbnRyeVsndmFsaWRhdGUnXSA9ICdrZXknCisgICAgICAgIHNlbGYuZW50cnlbJ3ZhbGlkYXRlY29tbWFuZCddID0gc2VsZi5lbnRyeS5yZWdpc3Rlcih2YWxpZGF0ZSksICclUycKKworICAgICAgICBzZWxmLmVudHJ5Lmluc2VydCgnZW5kJywgMSkKKyAgICAgICAgc2VsZi5lbnRyeS5pbnNlcnQoJ2VuZCcsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxpZGF0aW9uLCBbRmFsc2UsIFRydWVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW50cnkuZ2V0KCksICdhJykKKworCisgICAgZGVmIHRlc3RfcmV2YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICBkZWYgdmFsaWRhdGUoY29udGVudCk6CisgICAgICAgICAgICBmb3IgbGV0dGVyIGluIGNvbnRlbnQ6CisgICAgICAgICAgICAgICAgaWYgbm90ICdhJyA8PSBsZXR0ZXIubG93ZXIoKSA8PSAneic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBzZWxmLmVudHJ5Wyd2YWxpZGF0ZWNvbW1hbmQnXSA9IHNlbGYuZW50cnkucmVnaXN0ZXIodmFsaWRhdGUpLCAnJVAnCisKKyAgICAgICAgc2VsZi5lbnRyeS5pbnNlcnQoJ2VuZCcsICdhdm9jYWRvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LnZhbGlkYXRlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS5zdGF0ZSgpLCAoKSkKKworICAgICAgICBzZWxmLmVudHJ5LmRlbGV0ZSgwLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LmdldCgpLCAnJykKKworICAgICAgICBzZWxmLmVudHJ5Lmluc2VydCgnZW5kJywgJ2ExYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS52YWxpZGF0ZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LnN0YXRlKCksICgnaW52YWxpZCcsICkpCisKKyAgICAgICAgc2VsZi5lbnRyeS5kZWxldGUoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LnZhbGlkYXRlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS5zdGF0ZSgpLCAoKSkKKworCitjbGFzcyBQYW5lZHdpbmRvd1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKKyAgICAgICAgc2VsZi5wYW5lZCA9IHR0ay5QYW5lZHdpbmRvdygpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYucGFuZWQuZGVzdHJveSgpCisgICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCisKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgIyBhdHRlbXB0IHRvIGFkZCBhIGNoaWxkIHRoYXQgaXMgbm90IGEgZGlyZWN0IGNoaWxkIG9mIHRoZSBwYW5lZCB3aW5kb3cKKyAgICAgICAgbGFiZWwgPSB0dGsuTGFiZWwoc2VsZi5wYW5lZCkKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwobGFiZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuYWRkLCBjaGlsZCkKKyAgICAgICAgbGFiZWwuZGVzdHJveSgpCisgICAgICAgIGNoaWxkLmRlc3Ryb3koKQorICAgICAgICAjIGFub3RoZXIgYXR0ZW1wdAorICAgICAgICBsYWJlbCA9IHR0ay5MYWJlbCgpCisgICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKGxhYmVsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmFkZCwgY2hpbGQpCisgICAgICAgIGNoaWxkLmRlc3Ryb3koKQorICAgICAgICBsYWJlbC5kZXN0cm95KCkKKworICAgICAgICBnb29kX2NoaWxkID0gdHRrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQoZ29vZF9jaGlsZCkKKyAgICAgICAgIyByZS1hZGRpbmcgYSBjaGlsZCBpcyBub3QgYWNjZXB0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5hZGQsIGdvb2RfY2hpbGQpCisKKyAgICAgICAgb3RoZXJfY2hpbGQgPSB0dGsuTGFiZWwoc2VsZi5wYW5lZCkKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQob3RoZXJfY2hpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYW5lZC5wYW5lKDApLCBzZWxmLnBhbmVkLnBhbmUoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQucGFuZSwgMikKKyAgICAgICAgZ29vZF9jaGlsZC5kZXN0cm95KCkKKyAgICAgICAgb3RoZXJfY2hpbGQuZGVzdHJveSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQucGFuZSwgMCkKKworCisgICAgZGVmIHRlc3RfZm9yZ2V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmZvcmdldCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5mb3JnZXQsIDApCisKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQodHRrLkxhYmVsKCkpCisgICAgICAgIHNlbGYucGFuZWQuZm9yZ2V0KDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuZm9yZ2V0LCAwKQorCisKKyAgICBkZWYgdGVzdF9pbnNlcnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuaW5zZXJ0LCBOb25lLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmluc2VydCwgMCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5pbnNlcnQsIDAsIDApCisKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoKQorICAgICAgICBjaGlsZDIgPSB0dGsuTGFiZWwoKQorICAgICAgICBjaGlsZDMgPSB0dGsuTGFiZWwoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuaW5zZXJ0LCAwLCBjaGlsZCkKKworICAgICAgICBzZWxmLnBhbmVkLmluc2VydCgnZW5kJywgY2hpbGQyKQorICAgICAgICBzZWxmLnBhbmVkLmluc2VydCgwLCBjaGlsZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhbmVkLnBhbmVzKCksIChzdHIoY2hpbGQpLCBzdHIoY2hpbGQyKSkpCisKKyAgICAgICAgc2VsZi5wYW5lZC5pbnNlcnQoMCwgY2hpbGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZXMoKSwgKHN0cihjaGlsZDIpLCBzdHIoY2hpbGQpKSkKKworICAgICAgICBzZWxmLnBhbmVkLmluc2VydCgnZW5kJywgY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZXMoKSwKKyAgICAgICAgICAgIChzdHIoY2hpbGQyKSwgc3RyKGNoaWxkKSwgc3RyKGNoaWxkMykpKQorCisgICAgICAgICMgcmVpbnNlcnRpbmcgYSBjaGlsZCBzaG91bGQgbW92ZSBpdCB0byBpdHMgY3VycmVudCBwb3NpdGlvbgorICAgICAgICBwYW5lcyA9IHNlbGYucGFuZWQucGFuZXMoKQorICAgICAgICBzZWxmLnBhbmVkLmluc2VydCgnZW5kJywgY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhbmVzLCBzZWxmLnBhbmVkLnBhbmVzKCkpCisKKyAgICAgICAgIyBtb3ZpbmcgY2hpbGQzIHRvIGNoaWxkMiBwb3NpdGlvbiBzaG91bGQgcmVzdWx0IGluIGNoaWxkMiBlbmRpbmcgdXAKKyAgICAgICAgIyBpbiBwcmV2aW91cyBjaGlsZCBwb3NpdGlvbiBhbmQgY2hpbGQgZW5kaW5nIHVwIGluIHByZXZpb3VzIGNoaWxkMworICAgICAgICAjIHBvc2l0aW9uCisgICAgICAgIHNlbGYucGFuZWQuaW5zZXJ0KGNoaWxkMiwgY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZXMoKSwKKyAgICAgICAgICAgIChzdHIoY2hpbGQzKSwgc3RyKGNoaWxkMiksIHN0cihjaGlsZCkpKQorCisKKyAgICBkZWYgdGVzdF9wYW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnBhbmUsIDApCisKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoKQorICAgICAgICBzZWxmLnBhbmVkLmFkZChjaGlsZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5wYW5lZC5wYW5lKDApLCBkaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhbmVkLnBhbmUoMCwgd2VpZ2h0PU5vbmUpLCAwKQorICAgICAgICAjIG5ld2VyIGZvcm0gZm9yIHF1ZXJ5aW5nIGEgc2luZ2xlIG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZSgwLCAnd2VpZ2h0JyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYW5lZC5wYW5lKDApLCBzZWxmLnBhbmVkLnBhbmUoc3RyKGNoaWxkKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5wYW5lLCAwLAorICAgICAgICAgICAgYmFkb3B0aW9uPSdzb21ldmFsdWUnKQorCisKKyAgICBkZWYgdGVzdF9zYXNocG9zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnNhc2hwb3MsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuc2FzaHBvcywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuc2FzaHBvcywgMCkKKworICAgICAgICBjaGlsZCA9IHR0ay5MYWJlbChzZWxmLnBhbmVkLCB0ZXh0PSdhJykKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQoY2hpbGQsIHdlaWdodD0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnNhc2hwb3MsIDApCisgICAgICAgIGNoaWxkMiA9IHR0ay5MYWJlbChzZWxmLnBhbmVkLCB0ZXh0PSdiJykKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQoY2hpbGQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnNhc2hwb3MsIDEpCisKKyAgICAgICAgc2VsZi5wYW5lZC5wYWNrKGV4cGFuZD1UcnVlLCBmaWxsPSdib3RoJykKKyAgICAgICAgc2VsZi5wYW5lZC53YWl0X3Zpc2liaWxpdHkoKQorCisgICAgICAgIGN1cnJfcG9zID0gc2VsZi5wYW5lZC5zYXNocG9zKDApCisgICAgICAgIHNlbGYucGFuZWQuc2FzaHBvcygwLCAxMDAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3Vycl9wb3MgIT0gc2VsZi5wYW5lZC5zYXNocG9zKDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnBhbmVkLnNhc2hwb3MoMCksIGludCkpCisKKworY2xhc3MgUmFkaW9idXR0b25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ludm9rZShzZWxmKToKKyAgICAgICAgc3VjY2VzcyA9IFtdCisgICAgICAgIGRlZiBjYl90ZXN0KCk6CisgICAgICAgICAgICBzdWNjZXNzLmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuICJjYiB0ZXN0IGNhbGxlZCIKKworICAgICAgICBteXZhciA9IFRraW50ZXIuSW50VmFyKCkKKyAgICAgICAgY2J0biA9IHR0ay5SYWRpb2J1dHRvbihjb21tYW5kPWNiX3Rlc3QsIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0wKQorICAgICAgICBjYnRuMiA9IHR0ay5SYWRpb2J1dHRvbihjb21tYW5kPWNiX3Rlc3QsIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0xKQorCisgICAgICAgIHJlcyA9IGNidG4uaW52b2tlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICJjYiB0ZXN0IGNhbGxlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2J0blsndmFsdWUnXSwgbXl2YXIuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXl2YXIuZ2V0KCksCisgICAgICAgICAgICBjYnRuLnRrLmdsb2JhbGdldHZhcihjYnRuWyd2YXJpYWJsZSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCisKKyAgICAgICAgY2J0bjJbJ2NvbW1hbmQnXSA9ICcnCisgICAgICAgIHJlcyA9IGNidG4yLmludm9rZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oc3VjY2VzcykgPiAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNidG4yWyd2YWx1ZSddLCBteXZhci5nZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteXZhci5nZXQoKSwKKyAgICAgICAgICAgIGNidG4udGsuZ2xvYmFsZ2V0dmFyKGNidG5bJ3ZhcmlhYmxlJ10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNidG5bJ3ZhcmlhYmxlJ10pLCBzdHIoY2J0bjJbJ3ZhcmlhYmxlJ10pKQorCisKKworY2xhc3MgU2NhbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYuc2NhbGUgPSB0dGsuU2NhbGUoKQorICAgICAgICBzZWxmLnNjYWxlLnBhY2soKQorICAgICAgICBzZWxmLnNjYWxlLnVwZGF0ZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc2NhbGUuZGVzdHJveSgpCisgICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCisKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9ldmVudChzZWxmKToKKyAgICAgICAgZmFpbHVyZSA9IFsxLCAxLCAxXSAjIHdpbGwgbmVlZCB0byBiZSBlbXB0eQorCisgICAgICAgIGZ1bmNpZCA9IHNlbGYuc2NhbGUuYmluZCgnPDxSYW5nZUNoYW5nZWQ+PicsIGxhbWJkYSBldnQ6IGZhaWx1cmUucG9wKCkpCisKKyAgICAgICAgc2VsZi5zY2FsZVsnZnJvbSddID0gMTAKKyAgICAgICAgc2VsZi5zY2FsZVsnZnJvbV8nXSA9IDEwCisgICAgICAgIHNlbGYuc2NhbGVbJ3RvJ10gPSAzCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsdXJlKQorCisgICAgICAgIGZhaWx1cmUgPSBbMSwgMSwgMV0KKyAgICAgICAgc2VsZi5zY2FsZS5jb25maWd1cmUoZnJvbV89MiwgdG89NSkKKyAgICAgICAgc2VsZi5zY2FsZS5jb25maWd1cmUoZnJvbV89MCwgdG89LTIpCisgICAgICAgIHNlbGYuc2NhbGUuY29uZmlndXJlKHRvPTEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmFpbHVyZSkKKworCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBzY2FsZV93aWR0aCA9IHNlbGYuc2NhbGUud2luZm9fd2lkdGgoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KHNjYWxlX3dpZHRoLCAwKSwgc2VsZi5zY2FsZVsndG8nXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KDAsIDApLCBzZWxmLnNjYWxlWydmcm9tJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgc2VsZi5zY2FsZVsndmFsdWUnXSkKKyAgICAgICAgc2VsZi5zY2FsZVsndmFsdWUnXSA9IDMwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgc2VsZi5zY2FsZVsndmFsdWUnXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnNjYWxlLmdldCwgJycsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuc2NhbGUuZ2V0LCAwLCAnJykKKworCisgICAgZGVmIHRlc3Rfc2V0KHNlbGYpOgorICAgICAgICAjIHNldCByZXN0cmljdHMgdGhlIG1heC9taW4gdmFsdWVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCByYW5nZQorICAgICAgICBtYXggPSBzZWxmLnNjYWxlWyd0byddCisgICAgICAgIG5ld19tYXggPSBtYXggKyAxMAorICAgICAgICBzZWxmLnNjYWxlLnNldChuZXdfbWF4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KCksIG1heCkKKyAgICAgICAgbWluID0gc2VsZi5zY2FsZVsnZnJvbSddCisgICAgICAgIHNlbGYuc2NhbGUuc2V0KG1pbiAtIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgbWluKQorCisgICAgICAgICMgY2hhbmdpbmcgZGlyZWN0bHkgdGhlIHZhcmlhYmxlIGRvZXNuJ3QgaW1wb3NlIHRoaXMgbGltaXRhdGlvbiB0aG8KKyAgICAgICAgdmFyID0gVGtpbnRlci5Eb3VibGVWYXIoKQorICAgICAgICBzZWxmLnNjYWxlWyd2YXJpYWJsZSddID0gdmFyCisgICAgICAgIHZhci5zZXQobWF4ICsgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjYWxlLmdldCgpLCB2YXIuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgbWF4ICsgNSkKKyAgICAgICAgZGVsIHZhcgorCisgICAgICAgICMgdGhlIHNhbWUgaGFwcGVucyB3aXRoIHRoZSB2YWx1ZSBvcHRpb24KKyAgICAgICAgc2VsZi5zY2FsZVsndmFsdWUnXSA9IG1heCArIDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgbWF4ICsgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgc2VsZi5zY2FsZVsndmFsdWUnXSkKKworICAgICAgICAjIG5ldmVydGhlbGVzcywgbm90ZSB0aGF0IHRoZSBtYXgvbWluIHZhbHVlcyB3ZSBjYW4gZ2V0IHNwZWNpZnlpbmcKKyAgICAgICAgIyB4LCB5IGNvb3JkcyBhcmUgdGhlIG9uZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHJhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoMCwgMCksIG1pbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjYWxlLmdldChzZWxmLnNjYWxlLndpbmZvX3dpZHRoKCksIDApLCBtYXgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5zY2FsZS5zZXQsIE5vbmUpCisKKworY2xhc3MgTm90ZWJvb2tUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYubmIgPSB0dGsuTm90ZWJvb2socGFkZGluZz0wKQorICAgICAgICBzZWxmLmNoaWxkMSA9IHR0ay5MYWJlbCgpCisgICAgICAgIHNlbGYuY2hpbGQyID0gdHRrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDEsIHRleHQ9J2EnKQorICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMiwgdGV4dD0nYicpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2hpbGQxLmRlc3Ryb3koKQorICAgICAgICBzZWxmLmNoaWxkMi5kZXN0cm95KCkKKyAgICAgICAgc2VsZi5uYi5kZXN0cm95KCkKKyAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKKworCisgICAgZGVmIHRlc3RfdGFiX2lkZW50aWZpZXJzKHNlbGYpOgorICAgICAgICBzZWxmLm5iLmZvcmdldCgwKQorICAgICAgICBzZWxmLm5iLmhpZGUoc2VsZi5jaGlsZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIudGFiLCBzZWxmLmNoaWxkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLmluZGV4KCdlbmQnKSwgMSkKKyAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5pbmRleCgnZW5kJyksIDEpCisgICAgICAgIHNlbGYubmIuc2VsZWN0KHNlbGYuY2hpbGQyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5iLnRhYignY3VycmVudCcpKQorICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMSwgdGV4dD0nYScpCisKKyAgICAgICAgc2VsZi5uYi5wYWNrKCkKKyAgICAgICAgc2VsZi5uYi53YWl0X3Zpc2liaWxpdHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFiKCdANSw1JyksIHNlbGYubmIudGFiKCdjdXJyZW50JykpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSwgMTAwLCA1KToKKyAgICAgICAgICAgIGlmIHNlbGYubmIudGFiKCdAJWQsIDUnICUgaSwgdGV4dD1Ob25lKSA9PSAnYSc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGFiIHdpdGggdGV4dCAnYScgbm90IGZvdW5kIikKKworCisgICAgZGVmIHRlc3RfYWRkX2FuZF9oaWRkZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaGlkZSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaGlkZSwgJ2hpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5oaWRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmFkZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5hZGQsIHR0ay5MYWJlbCgpLAorICAgICAgICAgICAgdW5rbm93bj0nb3B0aW9uJykKKworICAgICAgICB0YWJzID0gc2VsZi5uYi50YWJzKCkKKyAgICAgICAgc2VsZi5uYi5oaWRlKHNlbGYuY2hpbGQxKQorICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgdGFicykKKworICAgICAgICBjaGlsZCA9IHR0ay5MYWJlbCgpCisgICAgICAgIHNlbGYubmIuYWRkKGNoaWxkLCB0ZXh0PSdjJykKKyAgICAgICAgdGFicyA9IHNlbGYubmIudGFicygpCisKKyAgICAgICAgY3VyciA9IHNlbGYubmIuaW5kZXgoJ2N1cnJlbnQnKQorICAgICAgICAjIHZlcmlmeSB0aGF0IHRoZSB0YWIgZ2V0cyByZWFkZGVkIGF0IGl0cyBwcmV2aW91cyBwb3NpdGlvbgorICAgICAgICBjaGlsZDJfaW5kZXggPSBzZWxmLm5iLmluZGV4KHNlbGYuY2hpbGQyKQorICAgICAgICBzZWxmLm5iLmhpZGUoc2VsZi5jaGlsZDIpCisgICAgICAgIHNlbGYubmIuYWRkKHNlbGYuY2hpbGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCB0YWJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuaW5kZXgoc2VsZi5jaGlsZDIpLCBjaGlsZDJfaW5kZXgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoc2VsZi5jaGlsZDIpID09IHNlbGYubmIudGFicygpW2NoaWxkMl9pbmRleF0pCisgICAgICAgICMgYnV0IHRoZSB0YWIgbmV4dCB0byBpdCAobm90IGhpZGRlbikgaXMgdGhlIG9uZSBzZWxlY3RlZCBub3cKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLmluZGV4KCdjdXJyZW50JyksIGN1cnIgKyAxKQorCisKKyAgICBkZWYgdGVzdF9mb3JnZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuZm9yZ2V0LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5mb3JnZXQsICdoaScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuZm9yZ2V0LCBOb25lKQorCisgICAgICAgIHRhYnMgPSBzZWxmLm5iLnRhYnMoKQorICAgICAgICBjaGlsZDFfaW5kZXggPSBzZWxmLm5iLmluZGV4KHNlbGYuY2hpbGQxKQorICAgICAgICBzZWxmLm5iLmZvcmdldChzZWxmLmNoaWxkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHIoc2VsZi5jaGlsZDEpIGluIHNlbGYubmIudGFicygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0YWJzKSAtIDEsIGxlbihzZWxmLm5iLnRhYnMoKSkpCisKKyAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5pbmRleChzZWxmLmNoaWxkMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hpbGQxX2luZGV4ID09IHNlbGYubmIuaW5kZXgoc2VsZi5jaGlsZDEpKQorCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbmRleCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaW5kZXgsIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5uYi5pbmRleCgnZW5kJyksIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5pbmRleChzZWxmLmNoaWxkMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5pbmRleChzZWxmLmNoaWxkMiksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5pbmRleCgnZW5kJyksIDIpCisKKworICAgIGRlZiB0ZXN0X2luc2VydChzZWxmKToKKyAgICAgICAgIyBtb3ZpbmcgdGFicworICAgICAgICB0YWJzID0gc2VsZi5uYi50YWJzKCkKKyAgICAgICAgc2VsZi5uYi5pbnNlcnQoMSwgdGFic1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgKHRhYnNbMV0sIHRhYnNbMF0pKQorICAgICAgICBzZWxmLm5iLmluc2VydChzZWxmLmNoaWxkMSwgc2VsZi5jaGlsZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksIHRhYnMpCisgICAgICAgIHNlbGYubmIuaW5zZXJ0KCdlbmQnLCBzZWxmLmNoaWxkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgKHRhYnNbMV0sIHRhYnNbMF0pKQorICAgICAgICBzZWxmLm5iLmluc2VydCgnZW5kJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgdGFicykKKyAgICAgICAgIyBiYWQgbW92ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbnNlcnQsIDIsIHRhYnNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaW5zZXJ0LCAtMSwgdGFic1swXSkKKworICAgICAgICAjIG5ldyB0YWIKKyAgICAgICAgY2hpbGQzID0gdHRrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5uYi5pbnNlcnQoMSwgY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCAodGFic1swXSwgc3RyKGNoaWxkMyksIHRhYnNbMV0pKQorICAgICAgICBzZWxmLm5iLmZvcmdldChjaGlsZDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksIHRhYnMpCisgICAgICAgIHNlbGYubmIuaW5zZXJ0KHNlbGYuY2hpbGQxLCBjaGlsZDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksIChzdHIoY2hpbGQzKSwgKSArIHRhYnMpCisgICAgICAgIHNlbGYubmIuZm9yZ2V0KGNoaWxkMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbnNlcnQsIDIsIGNoaWxkMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbnNlcnQsIC0xLCBjaGlsZDMpCisKKyAgICAgICAgIyBiYWQgaW5zZXJ0cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmluc2VydCwgJ2VuZCcsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaW5zZXJ0LCBOb25lLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmluc2VydCwgTm9uZSwgTm9uZSkKKworCisgICAgZGVmIHRlc3Rfc2VsZWN0KHNlbGYpOgorICAgICAgICBzZWxmLm5iLnBhY2soKQorICAgICAgICBzZWxmLm5iLndhaXRfdmlzaWJpbGl0eSgpCisKKyAgICAgICAgc3VjY2VzcyA9IFtdCisgICAgICAgIHRhYl9jaGFuZ2VkID0gW10KKworICAgICAgICBzZWxmLmNoaWxkMS5iaW5kKCc8VW5tYXA+JywgbGFtYmRhIGV2dDogc3VjY2Vzcy5hcHBlbmQoVHJ1ZSkpCisgICAgICAgIHNlbGYubmIuYmluZCgnPDxOb3RlYm9va1RhYkNoYW5nZWQ+PicsCisgICAgICAgICAgICBsYW1iZGEgZXZ0OiB0YWJfY2hhbmdlZC5hcHBlbmQoVHJ1ZSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnNlbGVjdCgpLCBzdHIoc2VsZi5jaGlsZDEpKQorICAgICAgICBzZWxmLm5iLnNlbGVjdChzZWxmLmNoaWxkMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5zZWxlY3QoKSwgc3RyKHNlbGYuY2hpbGQyKSkKKworICAgICAgICBzZWxmLm5iLnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YWJfY2hhbmdlZCkKKworCisgICAgZGVmIHRlc3RfdGFiKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLnRhYiwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIudGFiLCAnbm90YWInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLnRhYiwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLm5iLnRhYihzZWxmLmNoaWxkMSksIGRpY3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFiKHNlbGYuY2hpbGQxLCB0ZXh0PU5vbmUpLCAnYScpCisgICAgICAgICMgbmV3ZXIgZm9ybSBmb3IgcXVlcnlpbmcgYSBzaW5nbGUgb3B0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWIoc2VsZi5jaGlsZDEsICd0ZXh0JyksICdhJykKKyAgICAgICAgc2VsZi5uYi50YWIoc2VsZi5jaGlsZDEsIHRleHQ9J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWIoc2VsZi5jaGlsZDEsIHRleHQ9Tm9uZSksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFiKHNlbGYuY2hpbGQxLCAndGV4dCcpLCAnYWJjJykKKworCisgICAgZGVmIHRlc3RfdGFicyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5uYi50YWJzKCkpLCAyKQorCisgICAgICAgIHNlbGYubmIuZm9yZ2V0KHNlbGYuY2hpbGQxKQorICAgICAgICBzZWxmLm5iLmZvcmdldChzZWxmLmNoaWxkMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCAoKSkKKworCisgICAgZGVmIHRlc3RfdHJhdmVyc2FsKHNlbGYpOgorICAgICAgICBzZWxmLm5iLnBhY2soKQorICAgICAgICBzZWxmLm5iLndhaXRfdmlzaWJpbGl0eSgpCisKKyAgICAgICAgc2VsZi5uYi5zZWxlY3QoMCkKKworICAgICAgICBzdXBwb3J0LnNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYubmIsIDUsIDUpCisgICAgICAgIHNlbGYubmIuZm9jdXNfZm9yY2UoKQorICAgICAgICBzZWxmLm5iLmV2ZW50X2dlbmVyYXRlKCc8Q29udHJvbC1UYWI+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnNlbGVjdCgpLCBzdHIoc2VsZi5jaGlsZDIpKQorICAgICAgICBzZWxmLm5iLmZvY3VzX2ZvcmNlKCkKKyAgICAgICAgc2VsZi5uYi5ldmVudF9nZW5lcmF0ZSgnPFNoaWZ0LUNvbnRyb2wtVGFiPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5zZWxlY3QoKSwgc3RyKHNlbGYuY2hpbGQxKSkKKyAgICAgICAgc2VsZi5uYi5mb2N1c19mb3JjZSgpCisgICAgICAgIHNlbGYubmIuZXZlbnRfZ2VuZXJhdGUoJzxTaGlmdC1Db250cm9sLVRhYj4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuc2VsZWN0KCksIHN0cihzZWxmLmNoaWxkMikpCisKKyAgICAgICAgc2VsZi5uYi50YWIoc2VsZi5jaGlsZDEsIHRleHQ9J2EnLCB1bmRlcmxpbmU9MCkKKyAgICAgICAgc2VsZi5uYi5lbmFibGVfdHJhdmVyc2FsKCkKKyAgICAgICAgc2VsZi5uYi5mb2N1c19mb3JjZSgpCisgICAgICAgIHN1cHBvcnQuc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi5uYiwgNSwgNSkKKyAgICAgICAgc2VsZi5uYi5ldmVudF9nZW5lcmF0ZSgnPEFsdC1hPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5zZWxlY3QoKSwgc3RyKHNlbGYuY2hpbGQxKSkKKworCitjbGFzcyBUcmVldmlld1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKKyAgICAgICAgc2VsZi50diA9IHR0ay5UcmVldmlldyhwYWRkaW5nPTApCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudHYuZGVzdHJveSgpCisgICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCisKKworICAgIGRlZiB0ZXN0X2Jib3goc2VsZik6CisgICAgICAgIHNlbGYudHYucGFjaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5iYm94KCcnKSwgJycpCisgICAgICAgIHNlbGYudHYud2FpdF92aXNpYmlsaXR5KCkKKyAgICAgICAgc2VsZi50di51cGRhdGUoKQorCisgICAgICAgIGl0ZW1faWQgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi50di5nZXRfY2hpbGRyZW4oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGRyZW4pCisKKyAgICAgICAgYmJveCA9IHNlbGYudHYuYmJveChjaGlsZHJlblswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYmJveCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJib3gsIHR1cGxlKSkKKyAgICAgICAgZm9yIGl0ZW0gaW4gYmJveDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0ZW0sIGludCk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnZhbGlkIGJvdW5kaW5nIGJveDogJXMiICUgYmJveCkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgY29tcGFyZSB3aWR0aCBpbiBiYm94ZXMKKyAgICAgICAgc2VsZi50dlsnY29sdW1ucyddID0gWyd0ZXN0J10KKyAgICAgICAgc2VsZi50di5jb2x1bW4oJ3Rlc3QnLCB3aWR0aD01MCkKKyAgICAgICAgYmJveF9jb2x1bW4wID0gc2VsZi50di5iYm94KGNoaWxkcmVuWzBdLCAwKQorICAgICAgICByb290X3dpZHRoID0gc2VsZi50di5jb2x1bW4oJyMwJywgd2lkdGg9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYm94X2NvbHVtbjBbMF0sIGJib3hbMF0gKyByb290X3dpZHRoKQorCisgICAgICAgICMgdmVyaWZ5IHRoYXQgYmJveCBvZiBhIGNsb3NlZCBpdGVtIGlzIHRoZSBlbXB0eSBzdHJpbmcKKyAgICAgICAgY2hpbGQxID0gc2VsZi50di5pbnNlcnQoaXRlbV9pZCwgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5iYm94KGNoaWxkMSksICcnKQorCisKKyAgICBkZWYgdGVzdF9jaGlsZHJlbihzZWxmKToKKyAgICAgICAgIyBubyBjaGlsZHJlbiB5ZXQsIHNob3VsZCBnZXQgYW4gZW1wdHkgdHVwbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmdldF9jaGlsZHJlbigpLCAoKSkKKworICAgICAgICBpdGVtX2lkID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnR2LmdldF9jaGlsZHJlbigpLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKVswXSwgaXRlbV9pZCkKKworICAgICAgICAjIGFkZCBpdGVtX2lkIGFuZCBjaGlsZDMgYXMgY2hpbGRyZW4gb2YgY2hpbGQyCisgICAgICAgIGNoaWxkMiA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJykKKyAgICAgICAgY2hpbGQzID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBzZWxmLnR2LnNldF9jaGlsZHJlbihjaGlsZDIsIGl0ZW1faWQsIGNoaWxkMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmdldF9jaGlsZHJlbihjaGlsZDIpLCAoaXRlbV9pZCwgY2hpbGQzKSkKKworICAgICAgICAjIGNoaWxkMyBoYXMgY2hpbGQyIGFzIHBhcmVudCwgdGh1cyB0cnlpbmcgdG8gc2V0IGNoaWxkMiBhcyBhIGNoaWxkcmVuCisgICAgICAgICMgb2YgY2hpbGQzIHNob3VsZCByZXN1bHQgaW4gYW4gZXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwKKyAgICAgICAgICAgIHNlbGYudHYuc2V0X2NoaWxkcmVuLCBjaGlsZDMsIGNoaWxkMikKKworICAgICAgICAjIHJlbW92ZSBjaGlsZDIgY2hpbGRyZW4KKyAgICAgICAgc2VsZi50di5zZXRfY2hpbGRyZW4oY2hpbGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKGNoaWxkMiksICgpKQorCisgICAgICAgICMgcmVtb3ZlIHJvb3QncyBjaGlsZHJlbgorICAgICAgICBzZWxmLnR2LnNldF9jaGlsZHJlbignJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmdldF9jaGlsZHJlbigpLCAoKSkKKworCisgICAgZGVmIHRlc3RfY29sdW1uKHNlbGYpOgorICAgICAgICAjIHJldHVybiBhIGRpY3Qgd2l0aCBhbGwgb3B0aW9ucy92YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi50di5jb2x1bW4oJyMwJyksIGRpY3QpKQorICAgICAgICAjIHJldHVybiBhIHNpbmdsZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gb3B0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYudHYuY29sdW1uKCcjMCcsIHdpZHRoPU5vbmUpLCBpbnQpKQorICAgICAgICAjIHNldCBhIG5ldyB2YWx1ZSBmb3IgYW4gb3B0aW9uCisgICAgICAgIHNlbGYudHYuY29sdW1uKCcjMCcsIHdpZHRoPTEwKQorICAgICAgICAjIHRlc3RpbmcgbmV3IHdheSB0byBnZXQgb3B0aW9uIHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5jb2x1bW4oJyMwJywgJ3dpZHRoJyksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuY29sdW1uKCcjMCcsIHdpZHRoPU5vbmUpLCAxMCkKKyAgICAgICAgIyBjaGVjayByZWFkLW9ubHkgb3B0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuY29sdW1uLCAnIzAnLCBpZD0nWCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5jb2x1bW4sICdpbnZhbGlkJykKKyAgICAgICAgaW52YWxpZF9rd3MgPSBbCisgICAgICAgICAgICB7J3Vua25vd25fb3B0aW9uJzogJ3NvbWUgdmFsdWUnfSwgIHsnc3RyZXRjaCc6ICd3cm9uZyd9LAorICAgICAgICAgICAgeydhbmNob3InOiAnd3JvbmcnfSwgeyd3aWR0aCc6ICd3cm9uZyd9LCB7J21pbndpZHRoJzogJ3dyb25nJ30KKyAgICAgICAgXQorICAgICAgICBmb3Iga3cgaW4gaW52YWxpZF9rd3M6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmNvbHVtbiwgJyMwJywKKyAgICAgICAgICAgICAgICAqKmt3KQorCisKKyAgICBkZWYgdGVzdF9kZWxldGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuZGVsZXRlLCAnIzAnKQorCisgICAgICAgIGl0ZW1faWQgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGl0ZW0yID0gc2VsZi50di5pbnNlcnQoaXRlbV9pZCwgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKGl0ZW1faWQsICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oaXRlbV9pZCksIChpdGVtMiwgKSkKKworICAgICAgICBzZWxmLnR2LmRlbGV0ZShpdGVtX2lkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCkpCisKKyAgICAgICAgIyByZWF0dGFjaCBzaG91bGQgZmFpbAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLAorICAgICAgICAgICAgc2VsZi50di5yZWF0dGFjaCwgaXRlbV9pZCwgJycsICdlbmQnKQorCisgICAgICAgICMgdGVzdCBtdWx0aXBsZSBpdGVtIGRlbGV0ZQorICAgICAgICBpdGVtMSA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJykKKyAgICAgICAgaXRlbTIgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKGl0ZW0xLCBpdGVtMikpCisKKyAgICAgICAgc2VsZi50di5kZWxldGUoaXRlbTEsIGl0ZW0yKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCkpCisKKworICAgIGRlZiB0ZXN0X2RldGFjaF9yZWF0dGFjaChzZWxmKToKKyAgICAgICAgaXRlbV9pZCA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJykKKyAgICAgICAgaXRlbTIgPSBzZWxmLnR2Lmluc2VydChpdGVtX2lkLCAnZW5kJykKKworICAgICAgICAjIGNhbGxpbmcgZGV0YWNoIHdpdGhvdXQgaXRlbXMgaXMgdmFsaWQsIGFsdGhvdWdoIGl0IGRvZXMgbm90aGluZworICAgICAgICBwcmV2ID0gc2VsZi50di5nZXRfY2hpbGRyZW4oKQorICAgICAgICBzZWxmLnR2LmRldGFjaCgpICMgdGhpcyBzaG91bGQgZG8gbm90aGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByZXYsIHNlbGYudHYuZ2V0X2NoaWxkcmVuKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmdldF9jaGlsZHJlbigpLCAoaXRlbV9pZCwgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmdldF9jaGlsZHJlbihpdGVtX2lkKSwgKGl0ZW0yLCApKQorCisgICAgICAgICMgZGV0YWNoIGl0ZW0gd2l0aCBjaGlsZHJlbgorICAgICAgICBzZWxmLnR2LmRldGFjaChpdGVtX2lkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCkpCisKKyAgICAgICAgIyByZWF0dGFjaCBpdGVtIHdpdGggY2hpbGRyZW4KKyAgICAgICAgc2VsZi50di5yZWF0dGFjaChpdGVtX2lkLCAnJywgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKGl0ZW1faWQsICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oaXRlbV9pZCksIChpdGVtMiwgKSkKKworICAgICAgICAjIG1vdmUgYSBjaGlsZHJlbiB0byB0aGUgcm9vdAorICAgICAgICBzZWxmLnR2Lm1vdmUoaXRlbTIsICcnLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmdldF9jaGlsZHJlbigpLCAoaXRlbV9pZCwgaXRlbTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKGl0ZW1faWQpLCAoKSkKKworICAgICAgICAjIGJhZCB2YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwKKyAgICAgICAgICAgIHNlbGYudHYucmVhdHRhY2gsICdub25leGlzdGVudCcsICcnLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwKKyAgICAgICAgICAgIHNlbGYudHYuZGV0YWNoLCAnbm9uZXhpc3RlbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLAorICAgICAgICAgICAgc2VsZi50di5yZWF0dGFjaCwgaXRlbTIsICdvdGhlcnBhcmVudCcsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLAorICAgICAgICAgICAgc2VsZi50di5yZWF0dGFjaCwgaXRlbTIsICcnLCAnaW52YWxpZCcpCisKKyAgICAgICAgIyBtdWx0aXBsZSBkZXRhY2gKKyAgICAgICAgc2VsZi50di5kZXRhY2goaXRlbV9pZCwgaXRlbTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oaXRlbV9pZCksICgpKQorCisKKyAgICBkZWYgdGVzdF9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5leGlzdHMoJ3NvbWV0aGluZycpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmV4aXN0cygnJyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5leGlzdHMoe30pLCBGYWxzZSkKKworICAgICAgICAjIHRoZSBmb2xsb3dpbmcgd2lsbCBtYWtlIGEgdGsuY2FsbCBlcXVpdmFsZW50IHRvCisgICAgICAgICMgdGsuY2FsbCh0cmVldmlldywgImV4aXN0cyIpIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gYW4gZXJyb3IKKyAgICAgICAgIyBpbiB0aGUgdGNsIGludGVycHJldGVyIHNpbmNlIHRrIHJlcXVpcmVzIGFuIGl0ZW0uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuZXhpc3RzLCBOb25lKQorCisKKyAgICBkZWYgdGVzdF9mb2N1cyhzZWxmKToKKyAgICAgICAgIyBub3RoaW5nIGlzIGZvY3VzZWQgcmlnaHQgbm93CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5mb2N1cygpLCAnJykKKworICAgICAgICBpdGVtMSA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJykKKyAgICAgICAgc2VsZi50di5mb2N1cyhpdGVtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmZvY3VzKCksIGl0ZW0xKQorCisgICAgICAgIHNlbGYudHYuZGVsZXRlKGl0ZW0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZm9jdXMoKSwgJycpCisKKyAgICAgICAgIyB0cnkgZm9jdXNpbmcgaW5leGlzdGVudCBpdGVtCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuZm9jdXMsICdoaScpCisKKworICAgIGRlZiB0ZXN0X2hlYWRpbmcoc2VsZik6CisgICAgICAgICMgY2hlY2sgYSBkaWN0IGlzIHJldHVybmVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYudHYuaGVhZGluZygnIzAnKSwgZGljdCkpCisKKyAgICAgICAgIyBjaGVjayBhIHZhbHVlIGlzIHJldHVybmVkCisgICAgICAgIHNlbGYudHYuaGVhZGluZygnIzAnLCB0ZXh0PSdoaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5oZWFkaW5nKCcjMCcsICd0ZXh0JyksICdoaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5oZWFkaW5nKCcjMCcsIHRleHQ9Tm9uZSksICdoaScpCisKKyAgICAgICAgIyBpbnZhbGlkIG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmhlYWRpbmcsICcjMCcsCisgICAgICAgICAgICBiYWNrZ3JvdW5kPU5vbmUpCisgICAgICAgICMgaW52YWxpZCB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmhlYWRpbmcsICcjMCcsCisgICAgICAgICAgICBhbmNob3I9MSkKKworCisgICAgZGVmIHRlc3RfaGVhZGluZ19jYWxsYmFjayhzZWxmKToKKyAgICAgICAgZGVmIHNpbXVsYXRlX2hlYWRpbmdfY2xpY2soeCwgeSk6CisgICAgICAgICAgICBzdXBwb3J0LnNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYudHYsIHgsIHkpCisgICAgICAgICAgICBzZWxmLnR2LnVwZGF0ZV9pZGxldGFza3MoKQorCisgICAgICAgIHN1Y2Nlc3MgPSBbXSAjIG5vIHN1Y2Nlc3MgZm9yIG5vdworCisgICAgICAgIHNlbGYudHYucGFjaygpCisgICAgICAgIHNlbGYudHYud2FpdF92aXNpYmlsaXR5KCkKKyAgICAgICAgc2VsZi50di5oZWFkaW5nKCcjMCcsIGNvbW1hbmQ9bGFtYmRhOiBzdWNjZXNzLmFwcGVuZChUcnVlKSkKKyAgICAgICAgc2VsZi50di5jb2x1bW4oJyMwJywgd2lkdGg9MTAwKQorICAgICAgICBzZWxmLnR2LnVwZGF0ZSgpCisKKyAgICAgICAgIyBhc3N1bWluZyB0aGF0IHRoZSBjb29yZHMgKDUsIDUpIGZhbGwgaW50byBoZWFkaW5nICMwCisgICAgICAgIHNpbXVsYXRlX2hlYWRpbmdfY2xpY2soNSwgNSkKKyAgICAgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRoZSBjb21tYW5kIGFzc29jaWF0ZWQgdG8gdGhlIHRyZWV2aWV3IGhlYWRpbmcgd2Fzbid0ICIKKyAgICAgICAgICAgICAgICAiaW52b2tlZC4iKQorCisgICAgICAgIHN1Y2Nlc3MgPSBbXQorICAgICAgICBjb21tYW5kcyA9IHNlbGYudHYubWFzdGVyLl90Y2xDb21tYW5kcworICAgICAgICBzZWxmLnR2LmhlYWRpbmcoJyMwJywgY29tbWFuZD1zdHIoc2VsZi50di5oZWFkaW5nKCcjMCcsIGNvbW1hbmQ9Tm9uZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1hbmRzLCBzZWxmLnR2Lm1hc3Rlci5fdGNsQ29tbWFuZHMpCisgICAgICAgIHNpbXVsYXRlX2hlYWRpbmdfY2xpY2soNSwgNSkKKyAgICAgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRoZSBjb21tYW5kIGFzc29jaWF0ZWQgdG8gdGhlIHRyZWV2aWV3IGhlYWRpbmcgd2Fzbid0ICIKKyAgICAgICAgICAgICAgICAiaW52b2tlZC4iKQorCisgICAgICAgICMgWFhYIFRoZSBmb2xsb3dpbmcgcmFpc2VzIGFuIGVycm9yIGluIGEgdGNsIGludGVycHJldGVyLCBidXQgbm90IGluCisgICAgICAgICMgUHl0aG9uCisgICAgICAgICNzZWxmLnR2LmhlYWRpbmcoJyMwJywgY29tbWFuZD0nSSBkb250IGV4aXN0JykKKyAgICAgICAgI3NpbXVsYXRlX2hlYWRpbmdfY2xpY2soNSwgNSkKKworCisgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CisgICAgICAgICMgaXRlbSAnd2hhdCcgZG9lc24ndCBleGlzdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmluZGV4LCAnd2hhdCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmluZGV4KCcnKSwgMCkKKworICAgICAgICBpdGVtMSA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJykKKyAgICAgICAgaXRlbTIgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGMxID0gc2VsZi50di5pbnNlcnQoaXRlbTEsICdlbmQnKQorICAgICAgICBjMiA9IHNlbGYudHYuaW5zZXJ0KGl0ZW0xLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmluZGV4KGl0ZW0xKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmluZGV4KGMxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmluZGV4KGMyKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmluZGV4KGl0ZW0yKSwgMSkKKworICAgICAgICBzZWxmLnR2Lm1vdmUoaXRlbTIsICcnLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaW5kZXgoaXRlbTIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaW5kZXgoaXRlbTEpLCAxKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBpbmRleCBzdGlsbCB3b3JrcyBldmVuIGFmdGVyIGl0cyBwYXJlbnQgYW5kIHNpYmxpbmdzCisgICAgICAgICMgaGF2ZSBiZWVuIGRldGFjaGVkCisgICAgICAgIHNlbGYudHYuZGV0YWNoKGl0ZW0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaW5kZXgoYzIpLCAxKQorICAgICAgICBzZWxmLnR2LmRldGFjaChjMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmluZGV4KGMyKSwgMCkKKworICAgICAgICAjIGJ1dCBpdCBmYWlscyBhZnRlciBpdGVtIGhhcyBiZWVuIGRlbGV0ZWQKKyAgICAgICAgc2VsZi50di5kZWxldGUoaXRlbTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuaW5kZXgsIGMyKQorCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfaXRlbShzZWxmKToKKyAgICAgICAgIyBwYXJlbnQgJ25vbmUnIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5pbnNlcnQsICdub25lJywgJ2VuZCcpCisKKyAgICAgICAgIyBvcGVuIHZhbHVlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2Lmluc2VydCwgJycsICdlbmQnLAorICAgICAgICAgICAgb3Blbj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5pbnNlcnQsICcnLCAnZW5kJywKKyAgICAgICAgICAgIG9wZW49J3BsZWFzZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50di5kZWxldGUoc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCBvcGVuPVRydWUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2LmRlbGV0ZShzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIG9wZW49RmFsc2UpKSkKKworICAgICAgICAjIGludmFsaWQgaW5kZXgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5pbnNlcnQsICcnLCAnbWlkZGxlJykKKworICAgICAgICAjIHRyeWluZyB0byBkdXBsaWNhdGUgaXRlbSBpZCBpcyBpbnZhbGlkCisgICAgICAgIGl0ZW1pZCA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgJ2ZpcnN0LWl0ZW0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1pZCwgJ2ZpcnN0LWl0ZW0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2Lmluc2VydCwgJycsICdlbmQnLAorICAgICAgICAgICAgJ2ZpcnN0LWl0ZW0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2Lmluc2VydCwgJycsICdlbmQnLAorICAgICAgICAgICAgTW9ja1RjbE9iaignZmlyc3QtaXRlbScpKQorCisgICAgICAgICMgdW5pY29kZSB2YWx1ZXMKKyAgICAgICAgdmFsdWUgPSB1J1x4ZTFiYScKKyAgICAgICAgaXRlbSA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgdmFsdWVzPSh2YWx1ZSwgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oaXRlbSwgJ3ZhbHVlcycpLCAodmFsdWUsICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKGl0ZW0sIHZhbHVlcz1Ob25lKSwgKHZhbHVlLCApKQorCisgICAgICAgIHNlbGYudHYuaXRlbShpdGVtLCB2YWx1ZXM9bGlzdChzZWxmLnR2Lml0ZW0oaXRlbSwgdmFsdWVzPU5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oaXRlbSwgdmFsdWVzPU5vbmUpLCAodmFsdWUsICkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi50di5pdGVtKGl0ZW0pLCBkaWN0KSkKKworICAgICAgICAjIGVyYXNlIGl0ZW0gdmFsdWVzCisgICAgICAgIHNlbGYudHYuaXRlbShpdGVtLCB2YWx1ZXM9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50di5pdGVtKGl0ZW0sIHZhbHVlcz1Ob25lKSkKKworICAgICAgICAjIGl0ZW0gdGFncworICAgICAgICBpdGVtID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCB0YWdzPVsxLCAyLCB2YWx1ZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKGl0ZW0sIHRhZ3M9Tm9uZSksICgnMScsICcyJywgdmFsdWUpKQorICAgICAgICBzZWxmLnR2Lml0ZW0oaXRlbSwgdGFncz1bXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2Lml0ZW0oaXRlbSwgdGFncz1Ob25lKSkKKyAgICAgICAgc2VsZi50di5pdGVtKGl0ZW0sIHRhZ3M9KDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbShpdGVtLCB0YWdzPU5vbmUpLCAoJzEnLCAnMicpKQorCisgICAgICAgICMgdmFsdWVzIHdpdGggc3BhY2VzCisgICAgICAgIGl0ZW0gPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHZhbHVlcz0oJ2EgYiBjJywKKyAgICAgICAgICAgICclcyAlcycgJSAodmFsdWUsIHZhbHVlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKGl0ZW0sIHZhbHVlcz1Ob25lKSwKKyAgICAgICAgICAgICgnYSBiIGMnLCAnJXMgJXMnICUgKHZhbHVlLCB2YWx1ZSkpKQorCisgICAgICAgICMgdGV4dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbSgKKyAgICAgICAgICAgIHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgdGV4dD0iTGFiZWwgaGVyZSIpLCB0ZXh0PU5vbmUpLAorICAgICAgICAgICAgIkxhYmVsIGhlcmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbSgKKyAgICAgICAgICAgIHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgdGV4dD12YWx1ZSksIHRleHQ9Tm9uZSksCisgICAgICAgICAgICB2YWx1ZSkKKworCisgICAgZGVmIHRlc3Rfc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnR2Wydjb2x1bW5zJ10gPSBbJ0EnLCAnQiddCisgICAgICAgIGl0ZW0gPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHZhbHVlcz1bJ2EnLCAnYiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2V0KGl0ZW0pLCB7J0EnOiAnYScsICdCJzogJ2InfSkKKworICAgICAgICBzZWxmLnR2LnNldChpdGVtLCAnQicsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oaXRlbSwgdmFsdWVzPU5vbmUpLCAoJ2EnLCAnYScpKQorCisgICAgICAgIHNlbGYudHZbJ2NvbHVtbnMnXSA9IFsnQiddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5zZXQoaXRlbSksIHsnQic6ICdhJ30pCisKKyAgICAgICAgc2VsZi50di5zZXQoaXRlbSwgJ0InLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5zZXQoaXRlbSwgY29sdW1uPSdCJyksICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oaXRlbSwgdmFsdWVzPU5vbmUpLCAoJ2InLCAnYScpKQorCisgICAgICAgIHNlbGYudHYuc2V0KGl0ZW0sICdCJywgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2V0KGl0ZW0sICdCJyksIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oaXRlbSwgdmFsdWVzPU5vbmUpLCAoMTIzLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2V0KGl0ZW0pLCB7J0InOiAxMjN9KQorCisgICAgICAgICMgaW5leGlzdGVudCBjb2x1bW4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5zZXQsIGl0ZW0sICdBJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5zZXQsIGl0ZW0sICdBJywgJ2InKQorCisgICAgICAgICMgaW5leGlzdGVudCBpdGVtCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuc2V0LCAnbm90bWUnKQorCisKKyAgICBkZWYgdGVzdF90YWdfYmluZChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgaXRlbTEgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHRhZ3M9WydjYWxsJ10pCisgICAgICAgIGl0ZW0yID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCB0YWdzPVsnY2FsbCddKQorICAgICAgICBzZWxmLnR2LnRhZ19iaW5kKCdjYWxsJywgJzxCdXR0b25QcmVzcy0xPicsCisgICAgICAgICAgICBsYW1iZGEgZXZ0OiBldmVudHMuYXBwZW5kKDEpKQorICAgICAgICBzZWxmLnR2LnRhZ19iaW5kKCdjYWxsJywgJzxCdXR0b25SZWxlYXNlLTE+JywKKyAgICAgICAgICAgIGxhbWJkYSBldnQ6IGV2ZW50cy5hcHBlbmQoMikpCisKKyAgICAgICAgc2VsZi50di5wYWNrKCkKKyAgICAgICAgc2VsZi50di53YWl0X3Zpc2liaWxpdHkoKQorICAgICAgICBzZWxmLnR2LnVwZGF0ZSgpCisKKyAgICAgICAgcG9zX3kgPSBzZXQoKQorICAgICAgICBmb3VuZCA9IHNldCgpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDEwMCwgMTApOgorICAgICAgICAgICAgaWYgbGVuKGZvdW5kKSA9PSAyOiAjIGl0ZW0xIGFuZCBpdGVtMiBhbHJlYWR5IGZvdW5kCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGl0ZW1faWQgPSBzZWxmLnR2LmlkZW50aWZ5X3JvdyhpKQorICAgICAgICAgICAgaWYgaXRlbV9pZCBhbmQgaXRlbV9pZCBub3QgaW4gZm91bmQ6CisgICAgICAgICAgICAgICAgcG9zX3kuYWRkKGkpCisgICAgICAgICAgICAgICAgZm91bmQuYWRkKGl0ZW1faWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocG9zX3kpLCAyKSAjIGl0ZW0xIGFuZCBpdGVtMiB5IHBvcworICAgICAgICBmb3IgeSBpbiBwb3NfeToKKyAgICAgICAgICAgIHN1cHBvcnQuc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi50diwgMCwgeSkKKworICAgICAgICAjIGJ5IG5vdyB0aGVyZSBzaG91bGQgYmUgNCB0aGluZ3MgaW4gdGhlIGV2ZW50cyBsaXN0LCBzaW5jZSBlYWNoCisgICAgICAgICMgaXRlbSBoYWQgYSBiaW5kIGZvciB0d28gZXZlbnRzIHRoYXQgd2VyZSBzaW11bGF0ZWQgYWJvdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXZlbnRzKSwgNCkKKyAgICAgICAgZm9yIGV2dCBpbiB6aXAoZXZlbnRzWzo6Ml0sIGV2ZW50c1sxOjoyXSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2dCwgKDEsIDIpKQorCisKKyAgICBkZWYgdGVzdF90YWdfY29uZmlndXJlKHNlbGYpOgorICAgICAgICAjIEp1c3QgdGVzdGluZyBwYXJhbWV0ZXIgcGFzc2luZyBmb3Igbm93CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50di50YWdfY29uZmlndXJlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LnRhZ19jb25maWd1cmUsCisgICAgICAgICAgICAndGVzdCcsIHNreT0nYmx1ZScpCisgICAgICAgIHNlbGYudHYudGFnX2NvbmZpZ3VyZSgndGVzdCcsIGZvcmVncm91bmQ9J2JsdWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnR2LnRhZ19jb25maWd1cmUoJ3Rlc3QnLCAnZm9yZWdyb3VuZCcpKSwKKyAgICAgICAgICAgICdibHVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50di50YWdfY29uZmlndXJlKCd0ZXN0JywgZm9yZWdyb3VuZD1Ob25lKSksCisgICAgICAgICAgICAnYmx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYudHYudGFnX2NvbmZpZ3VyZSgndGVzdCcpLCBkaWN0KSkKKworCit0ZXN0c19ndWkgPSAoCisgICAgICAgIFdpZGdldFRlc3QsIEJ1dHRvblRlc3QsIENoZWNrYnV0dG9uVGVzdCwgUmFkaW9idXR0b25UZXN0LAorICAgICAgICBDb21ib2JveFRlc3QsIEVudHJ5VGVzdCwgUGFuZWR3aW5kb3dUZXN0LCBTY2FsZVRlc3QsIE5vdGVib29rVGVzdCwKKyAgICAgICAgVHJlZXZpZXdUZXN0CisgICAgICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QoKnRlc3RzX2d1aSkKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvdGtTaW1wbGVEaWFsb2cucHkgYi9MaWIvbGliLXRrL3RrU2ltcGxlRGlhbG9nLnB5CmluZGV4IDY5NDhhNDkuLjI0Mzg4YTUgMTAwNjQ0Ci0tLSBhL0xpYi9saWItdGsvdGtTaW1wbGVEaWFsb2cucHkKKysrIGIvTGliL2xpYi10ay90a1NpbXBsZURpYWxvZy5weQpAQCAtNDYsNiArNDYsNyBAQAogICAgICAgICAnJycKICAgICAgICAgVG9wbGV2ZWwuX19pbml0X18oc2VsZiwgcGFyZW50KQogCisgICAgICAgIHNlbGYud2l0aGRyYXcoKSAjIHJlbWFpbiBpbnZpc2libGUgZm9yIG5vdwogICAgICAgICAjIElmIHRoZSBtYXN0ZXIgaXMgbm90IHZpZXdhYmxlLCBkb24ndAogICAgICAgICAjIG1ha2UgdGhlIGNoaWxkIHRyYW5zaWVudCwgb3IgZWxzZSBpdAogICAgICAgICAjIHdvdWxkIGJlIG9wZW5lZCB3aXRoZHJhd24KQEAgLTY1LDggKzY2LDYgQEAKIAogICAgICAgICBzZWxmLmJ1dHRvbmJveCgpCiAKLSAgICAgICAgc2VsZi53YWl0X3Zpc2liaWxpdHkoKSAjIHdpbmRvdyBuZWVkcyB0byBiZSB2aXNpYmxlIGZvciB0aGUgZ3JhYgotICAgICAgICBzZWxmLmdyYWJfc2V0KCkKIAogICAgICAgICBpZiBub3Qgc2VsZi5pbml0aWFsX2ZvY3VzOgogICAgICAgICAgICAgc2VsZi5pbml0aWFsX2ZvY3VzID0gc2VsZgpAQCAtNzcsOCArNzYsMTMgQEAKICAgICAgICAgICAgIHNlbGYuZ2VvbWV0cnkoIislZCslZCIgJSAocGFyZW50LndpbmZvX3Jvb3R4KCkrNTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpKzUwKSkKIAorICAgICAgICBzZWxmLmRlaWNvbmlmeSgpICMgYmVjb21lIHZpc2liaWxlIG5vdworCiAgICAgICAgIHNlbGYuaW5pdGlhbF9mb2N1cy5mb2N1c19zZXQoKQogCisgICAgICAgICMgd2FpdCBmb3Igd2luZG93IHRvIGFwcGVhciBvbiBzY3JlZW4gYmVmb3JlIGNhbGxpbmcgZ3JhYl9zZXQKKyAgICAgICAgc2VsZi53YWl0X3Zpc2liaWxpdHkoKQorICAgICAgICBzZWxmLmdyYWJfc2V0KCkKICAgICAgICAgc2VsZi53YWl0X3dpbmRvdyhzZWxmKQogCiAgICAgZGVmIGRlc3Ryb3koc2VsZik6CkBAIC0yNzksNyArMjgzLDcgQEAKIAogY2xhc3MgX1F1ZXJ5U3RyaW5nKF9RdWVyeURpYWxvZyk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKLSAgICAgICAgaWYga3cuaGFzX2tleSgic2hvdyIpOgorICAgICAgICBpZiAic2hvdyIgaW4ga3c6CiAgICAgICAgICAgICBzZWxmLl9fc2hvdyA9IGt3WyJzaG93Il0KICAgICAgICAgICAgIGRlbCBrd1sic2hvdyJdCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvbGliLXRrL3R0ay5weSBiL0xpYi9saWItdGsvdHRrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzg3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliLXRrL3R0ay5weQpAQCAtMCwwICsxLDE2MzUgQEAKKyIiIlR0ayB3cmFwcGVyLgorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIHRvIGFsbG93IHVzaW5nIFRrIHRoZW1lZCB3aWRnZXQgc2V0LgorCitUdGsgaXMgYmFzZWQgb24gYSByZXZpc2VkIGFuZCBlbmhhbmNlZCB2ZXJzaW9uIG9mCitUSVAgIzQ4IChodHRwOi8vdGlwLnRjbC50ay80OCkgc3BlY2lmaWVkIHN0eWxlIGVuZ2luZS4KKworSXRzIGJhc2ljIGlkZWEgaXMgdG8gc2VwYXJhdGUsIHRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZSBjb2RlCitpbXBsZW1lbnRpbmcgYSB3aWRnZXQncyBiZWhhdmlvciBmcm9tIHRoZSBjb2RlIGltcGxlbWVudGluZyBpdHMKK2FwcGVhcmFuY2UuIFdpZGdldCBjbGFzcyBiaW5kaW5ncyBhcmUgcHJpbWFyaWx5IHJlc3BvbnNpYmxlIGZvcgorbWFpbnRhaW5pbmcgdGhlIHdpZGdldCBzdGF0ZSBhbmQgaW52b2tpbmcgY2FsbGJhY2tzLCBhbGwgYXNwZWN0cworb2YgdGhlIHdpZGdldHMgYXBwZWFyYW5jZSBsaWVzIGF0IFRoZW1lcy4KKyIiIgorCitfX3ZlcnNpb25fXyA9ICIwLjMuMSIKKworX19hdXRob3JfXyA9ICJHdWlsaGVybWUgUG9sbyA8Z2dwb2xvQGdtYWlsLmNvbT4iCisKK19fYWxsX18gPSBbIkJ1dHRvbiIsICJDaGVja2J1dHRvbiIsICJDb21ib2JveCIsICJFbnRyeSIsICJGcmFtZSIsICJMYWJlbCIsCisgICAgICAgICAgICJMYWJlbGZyYW1lIiwgIkxhYmVsRnJhbWUiLCAiTWVudWJ1dHRvbiIsICJOb3RlYm9vayIsICJQYW5lZHdpbmRvdyIsCisgICAgICAgICAgICJQYW5lZFdpbmRvdyIsICJQcm9ncmVzc2JhciIsICJSYWRpb2J1dHRvbiIsICJTY2FsZSIsICJTY3JvbGxiYXIiLAorICAgICAgICAgICAiU2VwYXJhdG9yIiwgIlNpemVncmlwIiwgIlN0eWxlIiwgIlRyZWV2aWV3IiwKKyAgICAgICAgICAgIyBFeHRlbnNpb25zCisgICAgICAgICAgICJMYWJlbGVkU2NhbGUiLCAiT3B0aW9uTWVudSIsCisgICAgICAgICAgICMgZnVuY3Rpb25zCisgICAgICAgICAgICJ0Y2xvYmpzX3RvX3B5IiwgInNldHVwX21hc3RlciJdCisKK2ltcG9ydCBUa2ludGVyCisKK19mbGF0dGVuID0gVGtpbnRlci5fZmxhdHRlbgorCisjIFZlcmlmeSBpZiBUayBpcyBuZXcgZW5vdWdoIHRvIG5vdCBuZWVkIHRoZSBUaWxlIHBhY2thZ2UKK19SRVFVSVJFX1RJTEUgPSBUcnVlIGlmIFRraW50ZXIuVGtWZXJzaW9uIDwgOC41IGVsc2UgRmFsc2UKKworZGVmIF9sb2FkX3RpbGUobWFzdGVyKToKKyAgICBpZiBfUkVRVUlSRV9USUxFOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgdGlsZWxpYiA9IG9zLmVudmlyb24uZ2V0KCdUSUxFX0xJQlJBUlknKQorICAgICAgICBpZiB0aWxlbGliOgorICAgICAgICAgICAgIyBhcHBlbmQgY3VzdG9tIHRpbGUgcGF0aCB0byB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0aGF0CisgICAgICAgICAgICAjIFRjbCB1c2VzIHdoZW4gYXR0ZW1wdGluZyB0byByZXNvbHZlIHBhY2thZ2VzIHdpdGggdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICMgY29tbWFuZAorICAgICAgICAgICAgbWFzdGVyLnRrLmV2YWwoCisgICAgICAgICAgICAgICAgICAgICdnbG9iYWwgYXV0b19wYXRoOyAnCisgICAgICAgICAgICAgICAgICAgICdsYXBwZW5kIGF1dG9fcGF0aCB7JXN9JyAlIHRpbGVsaWIpCisKKyAgICAgICAgbWFzdGVyLnRrLmV2YWwoJ3BhY2thZ2UgcmVxdWlyZSB0aWxlJykgIyBUY2xFcnJvciBtYXkgYmUgcmFpc2VkIGhlcmUKKyAgICAgICAgbWFzdGVyLl90aWxlX2xvYWRlZCA9IFRydWUKKworZGVmIF9mb3JtYXRfb3B0ZGljdChvcHRkaWN0LCBzY3JpcHQ9RmFsc2UsIGlnbm9yZT1Ob25lKToKKyAgICAiIiJGb3JtYXRzIG9wdGRpY3QgdG8gYSB0dXBsZSB0byBwYXNzIGl0IHRvIHRrLmNhbGwuCisKKyAgICBFLmcuIChzY3JpcHQ9RmFsc2UpOgorICAgICAgeydmb3JlZ3JvdW5kJzogJ2JsdWUnLCAncGFkZGluZyc6IFsxLCAyLCAzLCA0XX0gcmV0dXJuczoKKyAgICAgICgnLWZvcmVncm91bmQnLCAnYmx1ZScsICctcGFkZGluZycsICcxIDIgMyA0JykiIiIKKyAgICBmb3JtYXQgPSAiJXMiIGlmIG5vdCBzY3JpcHQgZWxzZSAieyVzfSIKKworICAgIG9wdHMgPSBbXQorICAgIGZvciBvcHQsIHZhbHVlIGluIG9wdGRpY3QuaXRlcml0ZW1zKCk6CisgICAgICAgIGlmIGlnbm9yZSBhbmQgb3B0IGluIGlnbm9yZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICB2ID0gW10KKyAgICAgICAgICAgIGZvciB2YWwgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICAgICB2LmFwcGVuZCh1bmljb2RlKHZhbCkgaWYgdmFsIGVsc2UgJ3t9JykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2LmFwcGVuZChzdHIodmFsKSkKKworICAgICAgICAgICAgIyBmb3JtYXQgdiBhY2NvcmRpbmcgdG8gdGhlIHNjcmlwdCBvcHRpb24sIGJ1dCBhbHNvIGNoZWNrIGZvcgorICAgICAgICAgICAgIyBzcGFjZSBpbiBhbnkgdmFsdWUgaW4gdiBpbiBvcmRlciB0byBncm91cCB0aGVtIGNvcnJlY3RseQorICAgICAgICAgICAgdmFsdWUgPSBmb3JtYXQgJSAnICcuam9pbigKKyAgICAgICAgICAgICAgICAoJ3slc30nIGlmICcgJyBpbiB2YWwgZWxzZSAnJXMnKSAlIHZhbCBmb3IgdmFsIGluIHYpCisKKyAgICAgICAgaWYgc2NyaXB0IGFuZCB2YWx1ZSA9PSAnJzoKKyAgICAgICAgICAgIHZhbHVlID0gJ3t9JyAjIGVtcHR5IHN0cmluZyBpbiBQeXRob24gaXMgZXF1aXZhbGVudCB0byB7fSBpbiBUY2wKKworICAgICAgICBvcHRzLmFwcGVuZCgoIi0lcyIgJSBvcHQsIHZhbHVlKSkKKworICAgICMgUmVtZW1iZXI6IF9mbGF0dGVuIHNraXBzIG92ZXIgTm9uZQorICAgIHJldHVybiBfZmxhdHRlbihvcHRzKQorCitkZWYgX2Zvcm1hdF9tYXBkaWN0KG1hcGRpY3QsIHNjcmlwdD1GYWxzZSk6CisgICAgIiIiRm9ybWF0cyBtYXBkaWN0IHRvIHBhc3MgaXQgdG8gdGsuY2FsbC4KKworICAgIEUuZy4gKHNjcmlwdD1GYWxzZSk6CisgICAgICB7J2V4cGFuZCc6IFsoJ2FjdGl2ZScsICdzZWxlY3RlZCcsICdncmV5JyksICgnZm9jdXMnLCBbMSwgMiwgMywgNF0pXX0KKworICAgICAgcmV0dXJuczoKKworICAgICAgKCctZXhwYW5kJywgJ3thY3RpdmUgc2VsZWN0ZWR9IGdyZXkgZm9jdXMgezEsIDIsIDMsIDR9JykiIiIKKyAgICAjIGlmIGNhbGxlciBwYXNzZXMgYSBUY2wgc2NyaXB0IHRvIHRrLmNhbGwsIGFsbCB0aGUgdmFsdWVzIG5lZWQgdG8KKyAgICAjIGJlIGdyb3VwZWQgaW50byB3b3JkcyAoYXJndW1lbnRzIHRvIGEgY29tbWFuZCBpbiBUY2wgZGlhbGVjdCkKKyAgICBmb3JtYXQgPSAiJXMiIGlmIG5vdCBzY3JpcHQgZWxzZSAieyVzfSIKKworICAgIG9wdHMgPSBbXQorICAgIGZvciBvcHQsIHZhbHVlIGluIG1hcGRpY3QuaXRlcml0ZW1zKCk6CisKKyAgICAgICAgb3B0X3ZhbCA9IFtdCisgICAgICAgICMgZWFjaCB2YWx1ZSBpbiBtYXBkaWN0IGlzIGV4cGVjdGVkIHRvIGJlIGEgc2VxdWVuY2UsIHdoZXJlIGVhY2ggaXRlbQorICAgICAgICAjIGlzIGFub3RoZXIgc2VxdWVuY2UgY29udGFpbmluZyBhIHN0YXRlIChvciBzZXZlcmFsKSBhbmQgYSB2YWx1ZQorICAgICAgICBmb3Igc3RhdGVzcGVjIGluIHZhbHVlOgorICAgICAgICAgICAgc3RhdGUsIHZhbCA9IHN0YXRlc3BlY1s6LTFdLCBzdGF0ZXNwZWNbLTFdCisKKyAgICAgICAgICAgIGlmIGxlbihzdGF0ZSkgPiAxOiAjIGdyb3VwIG11bHRpcGxlIHN0YXRlcworICAgICAgICAgICAgICAgIHN0YXRlID0gInslc30iICUgJyAnLmpvaW4oc3RhdGUpCisgICAgICAgICAgICBlbHNlOiAjIHNpbmdsZSBzdGF0ZQorICAgICAgICAgICAgICAgICMgaWYgaXQgaXMgZW1wdHkgKHNvbWV0aGluZyB0aGF0IGV2YWx1YXRlcyB0byBGYWxzZSksIHRoZW4KKyAgICAgICAgICAgICAgICAjIGZvcm1hdCBpdCB0byBUY2wgY29kZSB0byBkZW5vdGUgdGhlICJub3JtYWwiIHN0YXRlCisgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVswXSBvciAne30nCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCAobGlzdCwgdHVwbGUpKTogIyB2YWwgbmVlZHMgdG8gYmUgZ3JvdXBlZAorICAgICAgICAgICAgICAgIHZhbCA9ICJ7JXN9IiAlICcgJy5qb2luKG1hcChzdHIsIHZhbCkpCisKKyAgICAgICAgICAgIG9wdF92YWwuYXBwZW5kKCIlcyAlcyIgJSAoc3RhdGUsIHZhbCkpCisKKyAgICAgICAgb3B0cy5hcHBlbmQoKCItJXMiICUgb3B0LCBmb3JtYXQgJSAnICcuam9pbihvcHRfdmFsKSkpCisKKyAgICByZXR1cm4gX2ZsYXR0ZW4ob3B0cykKKworZGVmIF9mb3JtYXRfZWxlbWNyZWF0ZShldHlwZSwgc2NyaXB0PUZhbHNlLCAqYXJncywgKiprdyk6CisgICAgIiIiRm9ybWF0cyBhcmdzIGFuZCBrdyBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGVsZW1lbnQgZmFjdG9yeSBldHlwZS4iIiIKKyAgICBzcGVjID0gTm9uZQorICAgIG9wdHMgPSAoKQorICAgIGlmIGV0eXBlIGluICgiaW1hZ2UiLCAidnNhcGkiKToKKyAgICAgICAgaWYgZXR5cGUgPT0gImltYWdlIjogIyBkZWZpbmUgYW4gZWxlbWVudCBiYXNlZCBvbiBhbiBpbWFnZQorICAgICAgICAgICAgIyBmaXJzdCBhcmcgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGltYWdlIG5hbWUKKyAgICAgICAgICAgIGluYW1lID0gYXJnc1swXQorICAgICAgICAgICAgIyBuZXh0IGFyZ3MsIGlmIGFueSwgYXJlIHN0YXRlc3BlYy92YWx1ZSBwYWlycyB3aGljaCBpcyBhbG1vc3QKKyAgICAgICAgICAgICMgYSBtYXBkaWN0LCBidXQgd2UganVzdCBuZWVkIHRoZSB2YWx1ZQorICAgICAgICAgICAgaW1hZ2VzcGVjID0gX2Zvcm1hdF9tYXBkaWN0KHtOb25lOiBhcmdzWzE6XX0pWzFdCisgICAgICAgICAgICBzcGVjID0gIiVzICVzIiAlIChpbmFtZSwgaW1hZ2VzcGVjKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGRlZmluZSBhbiBlbGVtZW50IHdob3NlIHZpc3VhbCBhcHBlYXJhbmNlIGlzIGRyYXduIHVzaW5nIHRoZQorICAgICAgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIFN0eWxlcyBBUEkgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRoZQorICAgICAgICAgICAgIyB0aGVtZWQgc3R5bGVzIG9uIFdpbmRvd3MgWFAgYW5kIFZpc3RhLgorICAgICAgICAgICAgIyBBdmFpbGFiaWxpdHk6IFRrIDguNiwgV2luZG93cyBYUCBhbmQgVmlzdGEuCisgICAgICAgICAgICBjbGFzc19uYW1lLCBwYXJ0X2lkID0gYXJnc1s6Ml0KKyAgICAgICAgICAgIHN0YXRlbWFwID0gX2Zvcm1hdF9tYXBkaWN0KHtOb25lOiBhcmdzWzI6XX0pWzFdCisgICAgICAgICAgICBzcGVjID0gIiVzICVzICVzIiAlIChjbGFzc19uYW1lLCBwYXJ0X2lkLCBzdGF0ZW1hcCkKKworICAgICAgICBvcHRzID0gX2Zvcm1hdF9vcHRkaWN0KGt3LCBzY3JpcHQpCisKKyAgICBlbGlmIGV0eXBlID09ICJmcm9tIjogIyBjbG9uZSBhbiBlbGVtZW50CisgICAgICAgICMgaXQgZXhwZWN0cyBhIHRoZW1lbmFtZSBhbmQgb3B0aW9uYWxseSBhbiBlbGVtZW50IHRvIGNsb25lIGZyb20sCisgICAgICAgICMgb3RoZXJ3aXNlIGl0IHdpbGwgY2xvbmUge30gKGVtcHR5IGVsZW1lbnQpCisgICAgICAgIHNwZWMgPSBhcmdzWzBdICMgdGhlbWUgbmFtZQorICAgICAgICBpZiBsZW4oYXJncykgPiAxOiAjIGVsZW1lbnRmcm9tIHNwZWNpZmllZAorICAgICAgICAgICAgb3B0cyA9IChhcmdzWzFdLCApCisKKyAgICBpZiBzY3JpcHQ6CisgICAgICAgIHNwZWMgPSAneyVzfScgJSBzcGVjCisgICAgICAgIG9wdHMgPSAnICcuam9pbihtYXAoc3RyLCBvcHRzKSkKKworICAgIHJldHVybiBzcGVjLCBvcHRzCisKK2RlZiBfZm9ybWF0X2xheW91dGxpc3QobGF5b3V0LCBpbmRlbnQ9MCwgaW5kZW50X3NpemU9Mik6CisgICAgIiIiRm9ybWF0cyBhIGxheW91dCBsaXN0IHNvIHdlIGNhbiBwYXNzIHRoZSByZXN1bHQgdG8gdHRrOjpzdHlsZQorICAgIGxheW91dCBhbmQgdHRrOjpzdHlsZSBzZXR0aW5ncy4gTm90ZSB0aGF0IHRoZSBsYXlvdXQgZG9lc24ndCBoYXMgdG8KKyAgICBiZSBhIGxpc3QgbmVjZXNzYXJpbHkuCisKKyAgICBFLmcuOgorICAgICAgWygiTWVudWJ1dHRvbi5iYWNrZ3JvdW5kIiwgTm9uZSksCisgICAgICAgKCJNZW51YnV0dG9uLmJ1dHRvbiIsIHsiY2hpbGRyZW4iOgorICAgICAgICAgICBbKCJNZW51YnV0dG9uLmZvY3VzIiwgeyJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICBbKCJNZW51YnV0dG9uLnBhZGRpbmciLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICBbKCJNZW51YnV0dG9uLmxhYmVsIiwgeyJzaWRlIjogImxlZnQiLCAiZXhwYW5kIjogMX0pXQorICAgICAgICAgICAgICAgfSldCisgICAgICAgICAgIH0pXQorICAgICAgIH0pLAorICAgICAgICgiTWVudWJ1dHRvbi5pbmRpY2F0b3IiLCB7InNpZGUiOiAicmlnaHQifSkKKyAgICAgIF0KKworICAgICAgcmV0dXJuczoKKworICAgICAgTWVudWJ1dHRvbi5iYWNrZ3JvdW5kCisgICAgICBNZW51YnV0dG9uLmJ1dHRvbiAtY2hpbGRyZW4geworICAgICAgICBNZW51YnV0dG9uLmZvY3VzIC1jaGlsZHJlbiB7CisgICAgICAgICAgTWVudWJ1dHRvbi5wYWRkaW5nIC1jaGlsZHJlbiB7CisgICAgICAgICAgICBNZW51YnV0dG9uLmxhYmVsIC1zaWRlIGxlZnQgLWV4cGFuZCAxCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBNZW51YnV0dG9uLmluZGljYXRvciAtc2lkZSByaWdodCIiIgorICAgIHNjcmlwdCA9IFtdCisKKyAgICBmb3IgbGF5b3V0X2VsZW0gaW4gbGF5b3V0OgorICAgICAgICBlbGVtLCBvcHRzID0gbGF5b3V0X2VsZW0KKyAgICAgICAgb3B0cyA9IG9wdHMgb3Ige30KKyAgICAgICAgZm9wdHMgPSAnICcuam9pbihtYXAoc3RyLCBfZm9ybWF0X29wdGRpY3Qob3B0cywgVHJ1ZSwgImNoaWxkcmVuIikpKQorICAgICAgICBoZWFkID0gIiVzJXMlcyIgJSAoJyAnICogaW5kZW50LCBlbGVtLCAoIiAlcyIgJSBmb3B0cykgaWYgZm9wdHMgZWxzZSAnJykKKworICAgICAgICBpZiAiY2hpbGRyZW4iIGluIG9wdHM6CisgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKGhlYWQgKyAiIC1jaGlsZHJlbiB7IikKKyAgICAgICAgICAgIGluZGVudCArPSBpbmRlbnRfc2l6ZQorICAgICAgICAgICAgbmV3c2NyaXB0LCBpbmRlbnQgPSBfZm9ybWF0X2xheW91dGxpc3Qob3B0c1snY2hpbGRyZW4nXSwgaW5kZW50LAorICAgICAgICAgICAgICAgIGluZGVudF9zaXplKQorICAgICAgICAgICAgc2NyaXB0LmFwcGVuZChuZXdzY3JpcHQpCisgICAgICAgICAgICBpbmRlbnQgLT0gaW5kZW50X3NpemUKKyAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoJyVzfScgJSAoJyAnICogaW5kZW50KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoaGVhZCkKKworICAgIHJldHVybiAnXG4nLmpvaW4oc2NyaXB0KSwgaW5kZW50CisKK2RlZiBfc2NyaXB0X2Zyb21fc2V0dGluZ3Moc2V0dGluZ3MpOgorICAgICIiIlJldHVybnMgYW4gYXBwcm9wcmlhdGUgc2NyaXB0LCBiYXNlZCBvbiBzZXR0aW5ncywgYWNjb3JkaW5nIHRvCisgICAgdGhlbWVfc2V0dGluZ3MgZGVmaW5pdGlvbiB0byBiZSB1c2VkIGJ5IHRoZW1lX3NldHRpbmdzIGFuZAorICAgIHRoZW1lX2NyZWF0ZS4iIiIKKyAgICBzY3JpcHQgPSBbXQorICAgICMgYSBzY3JpcHQgd2lsbCBiZSBnZW5lcmF0ZWQgYWNjb3JkaW5nIHRvIHNldHRpbmdzIHBhc3NlZCwgd2hpY2gKKyAgICAjIHdpbGwgdGhlbiBiZSBldmFsdWF0ZWQgYnkgVGNsCisgICAgZm9yIG5hbWUsIG9wdHMgaW4gc2V0dGluZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICMgd2lsbCBmb3JtYXQgc3BlY2lmaWMga2V5cyBhY2NvcmRpbmcgdG8gVGNsIGNvZGUKKyAgICAgICAgaWYgb3B0cy5nZXQoJ2NvbmZpZ3VyZScpOiAjIGZvcm1hdCAnY29uZmlndXJlJworICAgICAgICAgICAgcyA9ICcgJy5qb2luKG1hcCh1bmljb2RlLCBfZm9ybWF0X29wdGRpY3Qob3B0c1snY29uZmlndXJlJ10sIFRydWUpKSkKKyAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoInR0azo6c3R5bGUgY29uZmlndXJlICVzICVzOyIgJSAobmFtZSwgcykpCisKKyAgICAgICAgaWYgb3B0cy5nZXQoJ21hcCcpOiAjIGZvcm1hdCAnbWFwJworICAgICAgICAgICAgcyA9ICcgJy5qb2luKG1hcCh1bmljb2RlLCBfZm9ybWF0X21hcGRpY3Qob3B0c1snbWFwJ10sIFRydWUpKSkKKyAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoInR0azo6c3R5bGUgbWFwICVzICVzOyIgJSAobmFtZSwgcykpCisKKyAgICAgICAgaWYgJ2xheW91dCcgaW4gb3B0czogIyBmb3JtYXQgJ2xheW91dCcgd2hpY2ggbWF5IGJlIGVtcHR5CisgICAgICAgICAgICBpZiBub3Qgb3B0c1snbGF5b3V0J106CisgICAgICAgICAgICAgICAgcyA9ICdudWxsJyAjIGNvdWxkIGJlIGFueSBvdGhlciB3b3JkLCBidXQgdGhpcyBvbmUgbWFrZXMgc2Vuc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcywgXyA9IF9mb3JtYXRfbGF5b3V0bGlzdChvcHRzWydsYXlvdXQnXSkKKyAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoInR0azo6c3R5bGUgbGF5b3V0ICVzIHtcbiVzXG59IiAlIChuYW1lLCBzKSkKKworICAgICAgICBpZiBvcHRzLmdldCgnZWxlbWVudCBjcmVhdGUnKTogIyBmb3JtYXQgJ2VsZW1lbnQgY3JlYXRlJworICAgICAgICAgICAgZW9wdHMgPSBvcHRzWydlbGVtZW50IGNyZWF0ZSddCisgICAgICAgICAgICBldHlwZSA9IGVvcHRzWzBdCisKKyAgICAgICAgICAgICMgZmluZCB3aGVyZSBhcmdzIGVuZCwgYW5kIHdoZXJlIGt3YXJncyBzdGFydAorICAgICAgICAgICAgYXJnYyA9IDEgIyBldHlwZSB3YXMgdGhlIGZpcnN0IG9uZQorICAgICAgICAgICAgd2hpbGUgYXJnYyA8IGxlbihlb3B0cykgYW5kIG5vdCBoYXNhdHRyKGVvcHRzW2FyZ2NdLCAnaXRlcml0ZW1zJyk6CisgICAgICAgICAgICAgICAgYXJnYyArPSAxCisKKyAgICAgICAgICAgIGVsZW1hcmdzID0gZW9wdHNbMTphcmdjXQorICAgICAgICAgICAgZWxlbWt3ID0gZW9wdHNbYXJnY10gaWYgYXJnYyA8IGxlbihlb3B0cykgYW5kIGVvcHRzW2FyZ2NdIGVsc2Uge30KKyAgICAgICAgICAgIHNwZWMsIG9wdHMgPSBfZm9ybWF0X2VsZW1jcmVhdGUoZXR5cGUsIFRydWUsICplbGVtYXJncywgKiplbGVta3cpCisKKyAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoInR0azo6c3R5bGUgZWxlbWVudCBjcmVhdGUgJXMgJXMgJXMgJXMiICUgKAorICAgICAgICAgICAgICAgIG5hbWUsIGV0eXBlLCBzcGVjLCBvcHRzKSkKKworICAgIHJldHVybiAnXG4nLmpvaW4oc2NyaXB0KQorCitkZWYgX2RpY3RfZnJvbV90Y2x0dXBsZSh0dHVwbGUsIGN1dF9taW51cz1UcnVlKToKKyAgICAiIiJCcmVhayB0dXBsZSBpbiBwYWlycywgZm9ybWF0IGl0IHByb3Blcmx5LCB0aGVuIGJ1aWxkIHRoZSByZXR1cm4KKyAgICBkaWN0LiBJZiBjdXRfbWludXMgaXMgVHJ1ZSwgdGhlIHN1cHBvc2VkICctJyBwcmVmaXhpbmcgb3B0aW9ucyB3aWxsCisgICAgYmUgcmVtb3ZlZC4KKworICAgIHR0dXBsZSBpcyBleHBlY3RlZCB0byBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGVsZW1lbnRzLiIiIgorICAgIG9wdF9zdGFydCA9IDEgaWYgY3V0X21pbnVzIGVsc2UgMAorCisgICAgcmV0ZGljdCA9IHt9CisgICAgaXQgPSBpdGVyKHR0dXBsZSkKKyAgICBmb3Igb3B0LCB2YWwgaW4gemlwKGl0LCBpdCk6CisgICAgICAgIHJldGRpY3Rbc3RyKG9wdClbb3B0X3N0YXJ0Ol1dID0gdmFsCisKKyAgICByZXR1cm4gdGNsb2Jqc190b19weShyZXRkaWN0KQorCitkZWYgX2xpc3RfZnJvbV9zdGF0ZXNwZWMoc3R1cGxlKToKKyAgICAiIiJDb25zdHJ1Y3QgYSBsaXN0IGZyb20gdGhlIGdpdmVuIHN0YXRlc3BlYyB0dXBsZSBhY2NvcmRpbmcgdG8gdGhlCisgICAgYWNjZXB0ZWQgc3RhdGVzcGVjIGFjY2VwdGVkIGJ5IF9mb3JtYXRfbWFwZGljdC4iIiIKKyAgICBudmFsID0gW10KKyAgICBmb3IgdmFsIGluIHN0dXBsZToKKyAgICAgICAgdHlwZW5hbWUgPSBnZXRhdHRyKHZhbCwgJ3R5cGVuYW1lJywgTm9uZSkKKyAgICAgICAgaWYgdHlwZW5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIG52YWwuYXBwZW5kKHZhbCkKKyAgICAgICAgZWxzZTogIyB0aGlzIGlzIGEgVGNsIG9iamVjdAorICAgICAgICAgICAgdmFsID0gc3RyKHZhbCkKKyAgICAgICAgICAgIGlmIHR5cGVuYW1lID09ICdTdGF0ZVNwZWMnOgorICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5zcGxpdCgpCisgICAgICAgICAgICBudmFsLmFwcGVuZCh2YWwpCisKKyAgICBpdCA9IGl0ZXIobnZhbCkKKyAgICByZXR1cm4gW19mbGF0dGVuKHNwZWMpIGZvciBzcGVjIGluIHppcChpdCwgaXQpXQorCitkZWYgX2xpc3RfZnJvbV9sYXlvdXR0dXBsZShsdHVwbGUpOgorICAgICIiIkNvbnN0cnVjdCBhIGxpc3QgZnJvbSB0aGUgdHVwbGUgcmV0dXJuZWQgYnkgdHRrOjpsYXlvdXQsIHRoaXMgaXMKKyAgICBzb21ld2hhdCB0aGUgcmV2ZXJzZSBvZiBfZm9ybWF0X2xheW91dGxpc3QuIiIiCisgICAgcmVzID0gW10KKworICAgIGluZHggPSAwCisgICAgd2hpbGUgaW5keCA8IGxlbihsdHVwbGUpOgorICAgICAgICBuYW1lID0gbHR1cGxlW2luZHhdCisgICAgICAgIG9wdHMgPSB7fQorICAgICAgICByZXMuYXBwZW5kKChuYW1lLCBvcHRzKSkKKyAgICAgICAgaW5keCArPSAxCisKKyAgICAgICAgd2hpbGUgaW5keCA8IGxlbihsdHVwbGUpOiAjIGdyYWIgbmFtZSdzIG9wdGlvbnMKKyAgICAgICAgICAgIG9wdCwgdmFsID0gbHR1cGxlW2luZHg6aW5keCArIDJdCisgICAgICAgICAgICBpZiBub3Qgb3B0LnN0YXJ0c3dpdGgoJy0nKTogIyBmb3VuZCBuZXh0IG5hbWUKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBvcHQgPSBvcHRbMTpdICMgcmVtb3ZlIHRoZSAnLScgZnJvbSB0aGUgb3B0aW9uCisgICAgICAgICAgICBpbmR4ICs9IDIKKworICAgICAgICAgICAgaWYgb3B0ID09ICdjaGlsZHJlbic6CisgICAgICAgICAgICAgICAgdmFsID0gX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSh2YWwpCisKKyAgICAgICAgICAgIG9wdHNbb3B0XSA9IHZhbAorCisgICAgcmV0dXJuIHJlcworCitkZWYgX3ZhbF9vcl9kaWN0KG9wdGlvbnMsIGZ1bmMsICphcmdzKToKKyAgICAiIiJGb3JtYXQgb3B0aW9ucyB0aGVuIGNhbGwgZnVuYyB3aXRoIGFyZ3MgYW5kIG9wdGlvbnMgYW5kIHJldHVybgorICAgIHRoZSBhcHByb3ByaWF0ZSByZXN1bHQuCisKKyAgICBJZiBubyBvcHRpb24gaXMgc3BlY2lmaWVkLCBhIGRpY3QgaXMgcmV0dXJuZWQuIElmIGEgb3B0aW9uIGlzCisgICAgc3BlY2lmaWVkIHdpdGggdGhlIE5vbmUgdmFsdWUsIHRoZSB2YWx1ZSBmb3IgdGhhdCBvcHRpb24gaXMgcmV0dXJuZWQuCisgICAgT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24ganVzdCBzZXRzIHRoZSBwYXNzZWQgb3B0aW9ucyBhbmQgdGhlIGNhbGxlcgorICAgIHNob3VsZG4ndCBiZSBleHBlY3RpbmcgYSByZXR1cm4gdmFsdWUgYW55d2F5LiIiIgorICAgIG9wdGlvbnMgPSBfZm9ybWF0X29wdGRpY3Qob3B0aW9ucykKKyAgICByZXMgPSBmdW5jKCooYXJncyArIG9wdGlvbnMpKQorCisgICAgaWYgbGVuKG9wdGlvbnMpICUgMjogIyBvcHRpb24gc3BlY2lmaWVkIHdpdGhvdXQgYSB2YWx1ZSwgcmV0dXJuIGl0cyB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzCisKKyAgICByZXR1cm4gX2RpY3RfZnJvbV90Y2x0dXBsZShyZXMpCisKK2RlZiBfY29udmVydF9zdHJpbmd2YWwodmFsdWUpOgorICAgICIiIkNvbnZlcnRzIGEgdmFsdWUgdG8sIGhvcGVmdWxseSwgYSBtb3JlIGFwcHJvcHJpYXRlIFB5dGhvbiBvYmplY3QuIiIiCisgICAgdmFsdWUgPSB1bmljb2RlKHZhbHVlKQorICAgIHRyeToKKyAgICAgICAgdmFsdWUgPSBpbnQodmFsdWUpCisgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gdmFsdWUKKworZGVmIHRjbG9ianNfdG9fcHkoYWRpY3QpOgorICAgICIiIlJldHVybnMgYWRpY3Qgd2l0aCBpdHMgdmFsdWVzIGNvbnZlcnRlZCBmcm9tIFRjbCBvYmplY3RzIHRvIFB5dGhvbgorICAgIG9iamVjdHMuIiIiCisgICAgZm9yIG9wdCwgdmFsIGluIGFkaWN0Lml0ZXJpdGVtcygpOgorICAgICAgICBpZiB2YWwgYW5kIGhhc2F0dHIodmFsLCAnX19sZW5fXycpIGFuZCBub3QgaXNpbnN0YW5jZSh2YWwsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgZ2V0YXR0cih2YWxbMF0sICd0eXBlbmFtZScsIE5vbmUpID09ICdTdGF0ZVNwZWMnOgorICAgICAgICAgICAgICAgIHZhbCA9IF9saXN0X2Zyb21fc3RhdGVzcGVjKHZhbCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsID0gbWFwKF9jb252ZXJ0X3N0cmluZ3ZhbCwgdmFsKQorCisgICAgICAgIGVsaWYgaGFzYXR0cih2YWwsICd0eXBlbmFtZScpOiAjIHNvbWUgb3RoZXIgKHNpbmdsZSkgVGNsIG9iamVjdAorICAgICAgICAgICAgdmFsID0gX2NvbnZlcnRfc3RyaW5ndmFsKHZhbCkKKworICAgICAgICBhZGljdFtvcHRdID0gdmFsCisKKyAgICByZXR1cm4gYWRpY3QKKworZGVmIHNldHVwX21hc3RlcihtYXN0ZXI9Tm9uZSk6CisgICAgIiIiSWYgbWFzdGVyIGlzIG5vdCBOb25lLCBpdHNlbGYgaXMgcmV0dXJuZWQuIElmIG1hc3RlciBpcyBOb25lLAorICAgIHRoZSBkZWZhdWx0IG1hc3RlciBpcyByZXR1cm5lZCBpZiB0aGVyZSBpcyBvbmUsIG90aGVyd2lzZSBhIG5ldworICAgIG1hc3RlciBpcyBjcmVhdGVkIGFuZCByZXR1cm5lZC4KKworICAgIElmIGl0IGlzIG5vdCBhbGxvd2VkIHRvIHVzZSB0aGUgZGVmYXVsdCByb290IGFuZCBtYXN0ZXIgaXMgTm9uZSwKKyAgICBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLiIiIgorICAgIGlmIG1hc3RlciBpcyBOb25lOgorICAgICAgICBpZiBUa2ludGVyLl9zdXBwb3J0X2RlZmF1bHRfcm9vdDoKKyAgICAgICAgICAgIG1hc3RlciA9IFRraW50ZXIuX2RlZmF1bHRfcm9vdCBvciBUa2ludGVyLlRrKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIk5vIG1hc3RlciBzcGVjaWZpZWQgYW5kIFRraW50ZXIgaXMgIgorICAgICAgICAgICAgICAgICAgICAiY29uZmlndXJlZCB0byBub3Qgc3VwcG9ydCBkZWZhdWx0IHJvb3QiKQorICAgIHJldHVybiBtYXN0ZXIKKworCitjbGFzcyBTdHlsZShvYmplY3QpOgorICAgICIiIk1hbmlwdWxhdGUgc3R5bGUgZGF0YWJhc2UuIiIiCisKKyAgICBfbmFtZSA9ICJ0dGs6OnN0eWxlIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKKyAgICAgICAgbWFzdGVyID0gc2V0dXBfbWFzdGVyKG1hc3RlcikKKworICAgICAgICBpZiBub3QgZ2V0YXR0cihtYXN0ZXIsICdfdGlsZV9sb2FkZWQnLCBGYWxzZSk6CisgICAgICAgICAgICAjIExvYWQgdGlsZSBub3csIGlmIG5lZWRlZAorICAgICAgICAgICAgX2xvYWRfdGlsZShtYXN0ZXIpCisKKyAgICAgICAgc2VsZi5tYXN0ZXIgPSBtYXN0ZXIKKyAgICAgICAgc2VsZi50ayA9IHNlbGYubWFzdGVyLnRrCisKKworICAgIGRlZiBjb25maWd1cmUoc2VsZiwgc3R5bGUsIHF1ZXJ5X29wdD1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiUXVlcnkgb3Igc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbihzKSBpbgorICAgICAgICBzdHlsZS4KKworICAgICAgICBFYWNoIGtleSBpbiBrdyBpcyBhbiBvcHRpb24gYW5kIGVhY2ggdmFsdWUgaXMgZWl0aGVyIGEgc3RyaW5nIG9yCisgICAgICAgIGEgc2VxdWVuY2UgaWRlbnRpZnlpbmcgdGhlIHZhbHVlIGZvciB0aGF0IG9wdGlvbi4iIiIKKyAgICAgICAgaWYgcXVlcnlfb3B0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAga3dbcXVlcnlfb3B0XSA9IE5vbmUKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl9uYW1lLCAiY29uZmlndXJlIiwgc3R5bGUpCisKKworICAgIGRlZiBtYXAoc2VsZiwgc3R5bGUsIHF1ZXJ5X29wdD1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiUXVlcnkgb3Igc2V0cyBkeW5hbWljIHZhbHVlcyBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbihzKSBpbgorICAgICAgICBzdHlsZS4KKworICAgICAgICBFYWNoIGtleSBpbiBrdyBpcyBhbiBvcHRpb24gYW5kIGVhY2ggdmFsdWUgc2hvdWxkIGJlIGEgbGlzdCBvciBhCisgICAgICAgIHR1cGxlICh1c3VhbGx5KSBjb250YWluaW5nIHN0YXRlc3BlY3MgZ3JvdXBlZCBpbiB0dXBsZXMsIG9yIGxpc3QsCisgICAgICAgIG9yIHNvbWV0aGluZyBlbHNlIG9mIHlvdXIgcHJlZmVyZW5jZS4gQSBzdGF0ZXNwZWMgaXMgY29tcG91bmQgb2YKKyAgICAgICAgb25lIG9yIG1vcmUgc3RhdGVzIGFuZCB0aGVuIGEgdmFsdWUuIiIiCisgICAgICAgIGlmIHF1ZXJ5X29wdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBfbGlzdF9mcm9tX3N0YXRlc3BlYygKKyAgICAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgIm1hcCIsIHN0eWxlLCAnLSVzJyAlIHF1ZXJ5X29wdCkpCisKKyAgICAgICAgcmV0dXJuIF9kaWN0X2Zyb21fdGNsdHVwbGUoCisgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgIm1hcCIsIHN0eWxlLCAqKF9mb3JtYXRfbWFwZGljdChrdykpKSkKKworCisgICAgZGVmIGxvb2t1cChzZWxmLCBzdHlsZSwgb3B0aW9uLCBzdGF0ZT1Ob25lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yIG9wdGlvbiBpbiBzdHlsZS4KKworICAgICAgICBJZiBzdGF0ZSBpcyBzcGVjaWZpZWQgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgYSBzZXF1ZW5jZSBvZiBvbmUKKyAgICAgICAgb3IgbW9yZSBzdGF0ZXMuIElmIHRoZSBkZWZhdWx0IGFyZ3VtZW50IGlzIHNldCwgaXQgaXMgdXNlZCBhcworICAgICAgICBhIGZhbGxiYWNrIHZhbHVlIGluIGNhc2Ugbm8gc3BlY2lmaWNhdGlvbiBmb3Igb3B0aW9uIGlzIGZvdW5kLiIiIgorICAgICAgICBzdGF0ZSA9ICcgJy5qb2luKHN0YXRlKSBpZiBzdGF0ZSBlbHNlICcnCisKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl9uYW1lLCAibG9va3VwIiwgc3R5bGUsICctJXMnICUgb3B0aW9uLAorICAgICAgICAgICAgc3RhdGUsIGRlZmF1bHQpCisKKworICAgIGRlZiBsYXlvdXQoc2VsZiwgc3R5bGUsIGxheW91dHNwZWM9Tm9uZSk6CisgICAgICAgICIiIkRlZmluZSB0aGUgd2lkZ2V0IGxheW91dCBmb3IgZ2l2ZW4gc3R5bGUuIElmIGxheW91dHNwZWMgaXMKKyAgICAgICAgb21pdHRlZCwgcmV0dXJuIHRoZSBsYXlvdXQgc3BlY2lmaWNhdGlvbiBmb3IgZ2l2ZW4gc3R5bGUuCisKKyAgICAgICAgbGF5b3V0c3BlYyBpcyBleHBlY3RlZCB0byBiZSBhIGxpc3Qgb3IgYW4gb2JqZWN0IGRpZmZlcmVudCB0aGFuCisgICAgICAgIE5vbmUgdGhhdCBldmFsdWF0ZXMgdG8gRmFsc2UgaWYgeW91IHdhbnQgdG8gInR1cm4gb2ZmIiB0aGF0IHN0eWxlLgorICAgICAgICBJZiBpdCBpcyBhIGxpc3QgKG9yIHR1cGxlLCBvciBzb21ldGhpbmcgZWxzZSksIGVhY2ggaXRlbSBzaG91bGQgYmUKKyAgICAgICAgYSB0dXBsZSB3aGVyZSB0aGUgZmlyc3QgaXRlbSBpcyB0aGUgbGF5b3V0IG5hbWUgYW5kIHRoZSBzZWNvbmQgaXRlbQorICAgICAgICBzaG91bGQgaGF2ZSB0aGUgZm9ybWF0IGRlc2NyaWJlZCBiZWxvdzoKKworICAgICAgICBMQVlPVVRTCisKKyAgICAgICAgICAgIEEgbGF5b3V0IGNhbiBjb250YWluIHRoZSB2YWx1ZSBOb25lLCBpZiB0YWtlcyBubyBvcHRpb25zLCBvcgorICAgICAgICAgICAgYSBkaWN0IG9mIG9wdGlvbnMgc3BlY2lmeWluZyBob3cgdG8gYXJyYW5nZSB0aGUgZWxlbWVudC4KKyAgICAgICAgICAgIFRoZSBsYXlvdXQgbWVjaGFuaXNtIHVzZXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIHBhY2sKKyAgICAgICAgICAgIGdlb21ldHJ5IG1hbmFnZXI6IGdpdmVuIGFuIGluaXRpYWwgY2F2aXR5LCBlYWNoIGVsZW1lbnQgaXMKKyAgICAgICAgICAgIGFsbG9jYXRlZCBhIHBhcmNlbC4gVmFsaWQgb3B0aW9ucy92YWx1ZXMgYXJlOgorCisgICAgICAgICAgICAgICAgc2lkZTogd2hpY2hzaWRlCisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB3aGljaCBzaWRlIG9mIHRoZSBjYXZpdHkgdG8gcGxhY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ7IG9uZSBvZiB0b3AsIHJpZ2h0LCBib3R0b20gb3IgbGVmdC4gSWYKKyAgICAgICAgICAgICAgICAgICAgb21pdHRlZCwgdGhlIGVsZW1lbnQgb2NjdXBpZXMgdGhlIGVudGlyZSBjYXZpdHkuCisKKyAgICAgICAgICAgICAgICBzdGlja3k6IG5zd2UKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHdoZXJlIHRoZSBlbGVtZW50IGlzIHBsYWNlZCBpbnNpZGUgaXRzCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCBwYXJjZWwuCisKKyAgICAgICAgICAgICAgICBjaGlsZHJlbjogW3N1YmxheW91dC4uLiBdCisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZWxlbWVudHMgdG8gcGxhY2UgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50LiBFYWNoIGVsZW1lbnQgaXMgYSB0dXBsZSAob3Igb3RoZXIgc2VxdWVuY2UpCisgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRoZSBmaXJzdCBpdGVtIGlzIHRoZSBsYXlvdXQgbmFtZSwgYW5kIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICBpcyBhIExBWU9VVC4iIiIKKyAgICAgICAgbHNwZWMgPSBOb25lCisgICAgICAgIGlmIGxheW91dHNwZWM6CisgICAgICAgICAgICBsc3BlYyA9IF9mb3JtYXRfbGF5b3V0bGlzdChsYXlvdXRzcGVjKVswXQorICAgICAgICBlbGlmIGxheW91dHNwZWMgaXMgbm90IE5vbmU6ICMgd2lsbCBkaXNhYmxlIHRoZSBsYXlvdXQgKHt9LCAnJywgZXRjKQorICAgICAgICAgICAgbHNwZWMgPSAibnVsbCIgIyBjb3VsZCBiZSBhbnkgb3RoZXIgd29yZCwgYnV0IHRoaXMgbWF5IG1ha2Ugc2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2hlbiBjYWxsaW5nIGxheW91dChzdHlsZSkgbGF0ZXIKKworICAgICAgICByZXR1cm4gX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSgKKyAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl9uYW1lLCAibGF5b3V0Iiwgc3R5bGUsIGxzcGVjKSkKKworCisgICAgZGVmIGVsZW1lbnRfY3JlYXRlKHNlbGYsIGVsZW1lbnRuYW1lLCBldHlwZSwgKmFyZ3MsICoqa3cpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgZWxlbWVudCBpbiB0aGUgY3VycmVudCB0aGVtZSBvZiBnaXZlbiBldHlwZS4iIiIKKyAgICAgICAgc3BlYywgb3B0cyA9IF9mb3JtYXRfZWxlbWNyZWF0ZShldHlwZSwgRmFsc2UsICphcmdzLCAqKmt3KQorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgImVsZW1lbnQiLCAiY3JlYXRlIiwgZWxlbWVudG5hbWUsIGV0eXBlLAorICAgICAgICAgICAgc3BlYywgKm9wdHMpCisKKworICAgIGRlZiBlbGVtZW50X25hbWVzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGVsZW1lbnRzIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgdGhlbWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgImVsZW1lbnQiLCAibmFtZXMiKQorCisKKyAgICBkZWYgZWxlbWVudF9vcHRpb25zKHNlbGYsIGVsZW1lbnRuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGVsZW1lbnRuYW1lJ3Mgb3B0aW9ucy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl9uYW1lLCAiZWxlbWVudCIsICJvcHRpb25zIiwgZWxlbWVudG5hbWUpCisKKworICAgIGRlZiB0aGVtZV9jcmVhdGUoc2VsZiwgdGhlbWVuYW1lLCBwYXJlbnQ9Tm9uZSwgc2V0dGluZ3M9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZXMgYSBuZXcgdGhlbWUuCisKKyAgICAgICAgSXQgaXMgYW4gZXJyb3IgaWYgdGhlbWVuYW1lIGFscmVhZHkgZXhpc3RzLiBJZiBwYXJlbnQgaXMKKyAgICAgICAgc3BlY2lmaWVkLCB0aGUgbmV3IHRoZW1lIHdpbGwgaW5oZXJpdCBzdHlsZXMsIGVsZW1lbnRzIGFuZAorICAgICAgICBsYXlvdXRzIGZyb20gdGhlIHNwZWNpZmllZCBwYXJlbnQgdGhlbWUuIElmIHNldHRpbmdzIGFyZSBwcmVzZW50LAorICAgICAgICB0aGV5IGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lIHN5bnRheCB1c2VkIGZvciB0aGVtZV9zZXR0aW5ncy4iIiIKKyAgICAgICAgc2NyaXB0ID0gX3NjcmlwdF9mcm9tX3NldHRpbmdzKHNldHRpbmdzKSBpZiBzZXR0aW5ncyBlbHNlICcnCisKKyAgICAgICAgaWYgcGFyZW50OgorICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJ0aGVtZSIsICJjcmVhdGUiLCB0aGVtZW5hbWUsCisgICAgICAgICAgICAgICAgIi1wYXJlbnQiLCBwYXJlbnQsICItc2V0dGluZ3MiLCBzY3JpcHQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgInRoZW1lIiwgImNyZWF0ZSIsIHRoZW1lbmFtZSwKKyAgICAgICAgICAgICAgICAiLXNldHRpbmdzIiwgc2NyaXB0KQorCisKKyAgICBkZWYgdGhlbWVfc2V0dGluZ3Moc2VsZiwgdGhlbWVuYW1lLCBzZXR0aW5ncyk6CisgICAgICAgICIiIlRlbXBvcmFyaWx5IHNldHMgdGhlIGN1cnJlbnQgdGhlbWUgdG8gdGhlbWVuYW1lLCBhcHBseSBzcGVjaWZpZWQKKyAgICAgICAgc2V0dGluZ3MgYW5kIHRoZW4gcmVzdG9yZSB0aGUgcHJldmlvdXMgdGhlbWUuCisKKyAgICAgICAgRWFjaCBrZXkgaW4gc2V0dGluZ3MgaXMgYSBzdHlsZSBhbmQgZWFjaCB2YWx1ZSBtYXkgY29udGFpbiB0aGUKKyAgICAgICAga2V5cyAnY29uZmlndXJlJywgJ21hcCcsICdsYXlvdXQnIGFuZCAnZWxlbWVudCBjcmVhdGUnIGFuZCB0aGV5CisgICAgICAgIGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lIGZvcm1hdCBhcyBzcGVjaWZpZWQgYnkgdGhlIG1ldGhvZHMKKyAgICAgICAgY29uZmlndXJlLCBtYXAsIGxheW91dCBhbmQgZWxlbWVudF9jcmVhdGUgcmVzcGVjdGl2ZWx5LiIiIgorICAgICAgICBzY3JpcHQgPSBfc2NyaXB0X2Zyb21fc2V0dGluZ3Moc2V0dGluZ3MpCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl9uYW1lLCAidGhlbWUiLCAic2V0dGluZ3MiLCB0aGVtZW5hbWUsIHNjcmlwdCkKKworCisgICAgZGVmIHRoZW1lX25hbWVzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBhbGwga25vd24gdGhlbWVzLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJ0aGVtZSIsICJuYW1lcyIpCisKKworICAgIGRlZiB0aGVtZV91c2Uoc2VsZiwgdGhlbWVuYW1lPU5vbmUpOgorICAgICAgICAiIiJJZiB0aGVtZW5hbWUgaXMgTm9uZSwgcmV0dXJucyB0aGUgdGhlbWUgaW4gdXNlLCBvdGhlcndpc2UsIHNldAorICAgICAgICB0aGUgY3VycmVudCB0aGVtZSB0byB0aGVtZW5hbWUsIHJlZnJlc2hlcyBhbGwgd2lkZ2V0cyBhbmQgZW1pdHMKKyAgICAgICAgYSA8PFRoZW1lQ2hhbmdlZD4+IGV2ZW50LiIiIgorICAgICAgICBpZiB0aGVtZW5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICMgU3RhcnRpbmcgb24gVGsgOC42LCBjaGVja2luZyB0aGlzIGdsb2JhbCBpcyBubyBsb25nZXIgbmVlZGVkCisgICAgICAgICAgICAjIHNpbmNlIGl0IGFsbG93cyBkb2luZyBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgInRoZW1lIiwgInVzZSIpCisgICAgICAgICAgICByZXR1cm4gc2VsZi50ay5ldmFsKCJyZXR1cm4gJHR0azo6Y3VycmVudFRoZW1lIikKKworICAgICAgICAjIHVzaW5nICJ0dGs6OnNldFRoZW1lIiBpbnN0ZWFkIG9mICJ0dGs6OnN0eWxlIHRoZW1lIHVzZSIgY2F1c2VzCisgICAgICAgICMgdGhlIHZhcmlhYmxlIGN1cnJlbnRUaGVtZSB0byBiZSB1cGRhdGVkLCBhbHNvLCB0dGs6OnNldFRoZW1lIGNhbGxzCisgICAgICAgICMgInR0azo6c3R5bGUgdGhlbWUgdXNlIiBpbiBvcmRlciB0byBjaGFuZ2UgdGhlbWUuCisgICAgICAgIHNlbGYudGsuY2FsbCgidHRrOjpzZXRUaGVtZSIsIHRoZW1lbmFtZSkKKworCitjbGFzcyBXaWRnZXQoVGtpbnRlci5XaWRnZXQpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIFRrIHRoZW1lZCB3aWRnZXRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlciwgd2lkZ2V0bmFtZSwga3c9Tm9uZSk6CisgICAgICAgICIiIkNvbnN0cnVjdHMgYSBUdGsgV2lkZ2V0IHdpdGggdGhlIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY3Vyc29yLCB0YWtlZm9jdXMsIHN0eWxlCisKKyAgICAgICAgU0NST0xMQUJMRSBXSURHRVQgT1BUSU9OUworCisgICAgICAgICAgICB4c2Nyb2xsY29tbWFuZCwgeXNjcm9sbGNvbW1hbmQKKworICAgICAgICBMQUJFTCBXSURHRVQgT1BUSU9OUworCisgICAgICAgICAgICB0ZXh0LCB0ZXh0dmFyaWFibGUsIHVuZGVybGluZSwgaW1hZ2UsIGNvbXBvdW5kLCB3aWR0aAorCisgICAgICAgIFdJREdFVCBTVEFURVMKKworICAgICAgICAgICAgYWN0aXZlLCBkaXNhYmxlZCwgZm9jdXMsIHByZXNzZWQsIHNlbGVjdGVkLCBiYWNrZ3JvdW5kLAorICAgICAgICAgICAgcmVhZG9ubHksIGFsdGVybmF0ZSwgaW52YWxpZAorICAgICAgICAiIiIKKyAgICAgICAgbWFzdGVyID0gc2V0dXBfbWFzdGVyKG1hc3RlcikKKyAgICAgICAgaWYgbm90IGdldGF0dHIobWFzdGVyLCAnX3RpbGVfbG9hZGVkJywgRmFsc2UpOgorICAgICAgICAgICAgIyBMb2FkIHRpbGUgbm93LCBpZiBuZWVkZWQKKyAgICAgICAgICAgIF9sb2FkX3RpbGUobWFzdGVyKQorICAgICAgICBUa2ludGVyLldpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsIHdpZGdldG5hbWUsIGt3PWt3KQorCisKKyAgICBkZWYgaWRlbnRpZnkoc2VsZiwgeCwgeSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgYXQgcG9zaXRpb24geCwgeSwgb3IgdGhlIGVtcHR5CisgICAgICAgIHN0cmluZyBpZiB0aGUgcG9pbnQgZG9lcyBub3QgbGllIHdpdGhpbiBhbnkgZWxlbWVudC4KKworICAgICAgICB4IGFuZCB5IGFyZSBwaXhlbCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgd2lkZ2V0LiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJpZGVudGlmeSIsIHgsIHkpCisKKworICAgIGRlZiBpbnN0YXRlKHNlbGYsIHN0YXRlc3BlYywgY2FsbGJhY2s9Tm9uZSwgKmFyZ3MsICoqa3cpOgorICAgICAgICAiIiJUZXN0IHRoZSB3aWRnZXQncyBzdGF0ZS4KKworICAgICAgICBJZiBjYWxsYmFjayBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIFRydWUgaWYgdGhlIHdpZGdldCBzdGF0ZQorICAgICAgICBtYXRjaGVzIHN0YXRlc3BlYyBhbmQgRmFsc2Ugb3RoZXJ3aXNlLiBJZiBjYWxsYmFjayBpcyBzcGVjaWZpZWQsCisgICAgICAgIHRoZW4gaXQgd2lsbCBiZSBpbnZva2VkIHdpdGggKmFyZ3MsICoqa3cgaWYgdGhlIHdpZGdldCBzdGF0ZQorICAgICAgICBtYXRjaGVzIHN0YXRlc3BlYy4gc3RhdGVzcGVjIGlzIGV4cGVjdGVkIHRvIGJlIGEgc2VxdWVuY2UuIiIiCisgICAgICAgIHJldCA9IHNlbGYudGsuY2FsbChzZWxmLl93LCAiaW5zdGF0ZSIsICcgJy5qb2luKHN0YXRlc3BlYykpCisgICAgICAgIGlmIHJldCBhbmQgY2FsbGJhY2s6CisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKmFyZ3MsICoqa3cpCisKKyAgICAgICAgcmV0dXJuIGJvb2wocmV0KQorCisKKyAgICBkZWYgc3RhdGUoc2VsZiwgc3RhdGVzcGVjPU5vbmUpOgorICAgICAgICAiIiJNb2RpZnkgb3IgaW5xdWlyZSB3aWRnZXQgc3RhdGUuCisKKyAgICAgICAgV2lkZ2V0IHN0YXRlIGlzIHJldHVybmVkIGlmIHN0YXRlc3BlYyBpcyBOb25lLCBvdGhlcndpc2UgaXQgaXMKKyAgICAgICAgc2V0IGFjY29yZGluZyB0byB0aGUgc3RhdGVzcGVjIGZsYWdzIGFuZCB0aGVuIGEgbmV3IHN0YXRlIHNwZWMKKyAgICAgICAgaXMgcmV0dXJuZWQgaW5kaWNhdGluZyB3aGljaCBmbGFncyB3ZXJlIGNoYW5nZWQuIHN0YXRlc3BlYyBpcworICAgICAgICBleHBlY3RlZCB0byBiZSBhIHNlcXVlbmNlLiIiIgorICAgICAgICBpZiBzdGF0ZXNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGF0ZXNwZWMgPSAnICcuam9pbihzdGF0ZXNwZWMpCisKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuc3BsaXRsaXN0KHN0cihzZWxmLnRrLmNhbGwoc2VsZi5fdywgInN0YXRlIiwgc3RhdGVzcGVjKSkpCisKKworY2xhc3MgQnV0dG9uKFdpZGdldCk6CisgICAgIiIiVHRrIEJ1dHRvbiB3aWRnZXQsIGRpc3BsYXlzIGEgdGV4dHVhbCBsYWJlbCBhbmQvb3IgaW1hZ2UsIGFuZAorICAgIGV2YWx1YXRlcyBhIGNvbW1hbmQgd2hlbiBwcmVzc2VkLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIEJ1dHRvbiB3aWRnZXQgd2l0aCB0aGUgcGFyZW50IG1hc3Rlci4KKworICAgICAgICBTVEFOREFSRCBPUFRJT05TCisKKyAgICAgICAgICAgIGNsYXNzLCBjb21wb3VuZCwgY3Vyc29yLCBpbWFnZSwgc3RhdGUsIHN0eWxlLCB0YWtlZm9jdXMsCisgICAgICAgICAgICB0ZXh0LCB0ZXh0dmFyaWFibGUsIHVuZGVybGluZSwgd2lkdGgKKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBjb21tYW5kLCBkZWZhdWx0LCB3aWR0aAorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6YnV0dG9uIiwga3cpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZik6CisgICAgICAgICIiIkludm9rZXMgdGhlIGNvbW1hbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBidXR0b24uIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImludm9rZSIpCisKKworY2xhc3MgQ2hlY2tidXR0b24oV2lkZ2V0KToKKyAgICAiIiJUdGsgQ2hlY2tidXR0b24gd2lkZ2V0IHdoaWNoIGlzIGVpdGhlciBpbiBvbi0gb3Igb2ZmLXN0YXRlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIENoZWNrYnV0dG9uIHdpZGdldCB3aXRoIHRoZSBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGNvbXBvdW5kLCBjdXJzb3IsIGltYWdlLCBzdGF0ZSwgc3R5bGUsIHRha2Vmb2N1cywKKyAgICAgICAgICAgIHRleHQsIHRleHR2YXJpYWJsZSwgdW5kZXJsaW5lLCB3aWR0aAorCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIGNvbW1hbmQsIG9mZnZhbHVlLCBvbnZhbHVlLCB2YXJpYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6Y2hlY2tidXR0b24iLCBrdykKKworCisgICAgZGVmIGludm9rZShzZWxmKToKKyAgICAgICAgIiIiVG9nZ2xlcyBiZXR3ZWVuIHRoZSBzZWxlY3RlZCBhbmQgZGVzZWxlY3RlZCBzdGF0ZXMgYW5kCisgICAgICAgIGludm9rZXMgdGhlIGFzc29jaWF0ZWQgY29tbWFuZC4gSWYgdGhlIHdpZGdldCBpcyBjdXJyZW50bHkKKyAgICAgICAgc2VsZWN0ZWQsIHNldHMgdGhlIG9wdGlvbiB2YXJpYWJsZSB0byB0aGUgb2ZmdmFsdWUgb3B0aW9uCisgICAgICAgIGFuZCBkZXNlbGVjdHMgdGhlIHdpZGdldDsgb3RoZXJ3aXNlLCBzZXRzIHRoZSBvcHRpb24gdmFyaWFibGUKKyAgICAgICAgdG8gdGhlIG9wdGlvbiBvbnZhbHVlLgorCisgICAgICAgIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgYXNzb2NpYXRlZCBjb21tYW5kLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJpbnZva2UiKQorCisKK2NsYXNzIEVudHJ5KFdpZGdldCwgVGtpbnRlci5FbnRyeSk6CisgICAgIiIiVHRrIEVudHJ5IHdpZGdldCBkaXNwbGF5cyBhIG9uZS1saW5lIHRleHQgc3RyaW5nIGFuZCBhbGxvd3MgdGhhdAorICAgIHN0cmluZyB0byBiZSBlZGl0ZWQgYnkgdGhlIHVzZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIHdpZGdldD1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0cyBhIFR0ayBFbnRyeSB3aWRnZXQgd2l0aCB0aGUgcGFyZW50IG1hc3Rlci4KKworICAgICAgICBTVEFOREFSRCBPUFRJT05TCisKKyAgICAgICAgICAgIGNsYXNzLCBjdXJzb3IsIHN0eWxlLCB0YWtlZm9jdXMsIHhzY3JvbGxjb21tYW5kCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgZXhwb3J0c2VsZWN0aW9uLCBpbnZhbGlkY29tbWFuZCwganVzdGlmeSwgc2hvdywgc3RhdGUsCisgICAgICAgICAgICB0ZXh0dmFyaWFibGUsIHZhbGlkYXRlLCB2YWxpZGF0ZWNvbW1hbmQsIHdpZHRoCisKKyAgICAgICAgVkFMSURBVElPTiBNT0RFUworCisgICAgICAgICAgICBub25lLCBrZXksIGZvY3VzLCBmb2N1c2luLCBmb2N1c291dCwgYWxsCisgICAgICAgICIiIgorICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCB3aWRnZXQgb3IgInR0azo6ZW50cnkiLCBrdykKKworCisgICAgZGVmIGJib3goc2VsZiwgaW5kZXgpOgorICAgICAgICAiIiJSZXR1cm4gYSB0dXBsZSBvZiAoeCwgeSwgd2lkdGgsIGhlaWdodCkgd2hpY2ggZGVzY3JpYmVzIHRoZQorICAgICAgICBib3VuZGluZyBib3ggb2YgdGhlIGNoYXJhY3RlciBnaXZlbiBieSBpbmRleC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiYmJveCIsIGluZGV4KQorCisKKyAgICBkZWYgaWRlbnRpZnkoc2VsZiwgeCwgeSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgYXQgcG9zaXRpb24geCwgeSwgb3IgdGhlCisgICAgICAgIGVtcHR5IHN0cmluZyBpZiB0aGUgY29vcmRpbmF0ZXMgYXJlIG91dHNpZGUgdGhlIHdpbmRvdy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiaWRlbnRpZnkiLCB4LCB5KQorCisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAgICIiIkZvcmNlIHJldmFsaWRhdGlvbiwgaW5kZXBlbmRlbnQgb2YgdGhlIGNvbmRpdGlvbnMgc3BlY2lmaWVkCisgICAgICAgIGJ5IHRoZSB2YWxpZGF0ZSBvcHRpb24uIFJldHVybnMgRmFsc2UgaWYgdmFsaWRhdGlvbiBmYWlscywgVHJ1ZQorICAgICAgICBpZiBpdCBzdWNjZWVkcy4gU2V0cyBvciBjbGVhcnMgdGhlIGludmFsaWQgc3RhdGUgYWNjb3JkaW5nbHkuIiIiCisgICAgICAgIHJldHVybiBib29sKHNlbGYudGsuY2FsbChzZWxmLl93LCAidmFsaWRhdGUiKSkKKworCitjbGFzcyBDb21ib2JveChFbnRyeSk6CisgICAgIiIiVHRrIENvbWJvYm94IHdpZGdldCBjb21iaW5lcyBhIHRleHQgZmllbGQgd2l0aCBhIHBvcC1kb3duIGxpc3Qgb2YKKyAgICB2YWx1ZXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUdGsgQ29tYm9ib3ggd2lkZ2V0IHdpdGggdGhlIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY3Vyc29yLCBzdHlsZSwgdGFrZWZvY3VzCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgZXhwb3J0c2VsZWN0aW9uLCBqdXN0aWZ5LCBoZWlnaHQsIHBvc3Rjb21tYW5kLCBzdGF0ZSwKKyAgICAgICAgICAgIHRleHR2YXJpYWJsZSwgdmFsdWVzLCB3aWR0aAorICAgICAgICAiIiIKKyAgICAgICAgIyBUaGUgInZhbHVlcyIgb3B0aW9uIG1heSBuZWVkIHNwZWNpYWwgZm9ybWF0dGluZywgc28gbGVhdmUgdG8KKyAgICAgICAgIyBfZm9ybWF0X29wdGRpY3QgdGhlIHJlc3BvbnNhYmlsaXR5IHRvIGZvcm1hdCBpdAorICAgICAgICBpZiAidmFsdWVzIiBpbiBrdzoKKyAgICAgICAgICAgIGt3WyJ2YWx1ZXMiXSA9IF9mb3JtYXRfb3B0ZGljdCh7J3YnOiBrd1sidmFsdWVzIl19KVsxXQorCisgICAgICAgIEVudHJ5Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6Y29tYm9ib3giLCAqKmt3KQorCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaXRlbSwgdmFsdWUpOgorICAgICAgICBpZiBpdGVtID09ICJ2YWx1ZXMiOgorICAgICAgICAgICAgdmFsdWUgPSBfZm9ybWF0X29wdGRpY3Qoe2l0ZW06IHZhbHVlfSlbMV0KKworICAgICAgICBFbnRyeS5fX3NldGl0ZW1fXyhzZWxmLCBpdGVtLCB2YWx1ZSkKKworCisgICAgZGVmIGNvbmZpZ3VyZShzZWxmLCBjbmY9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkN1c3RvbSBDb21ib2JveCBjb25maWd1cmUsIGNyZWF0ZWQgdG8gcHJvcGVybHkgZm9ybWF0IHRoZSB2YWx1ZXMKKyAgICAgICAgb3B0aW9uLiIiIgorICAgICAgICBpZiAidmFsdWVzIiBpbiBrdzoKKyAgICAgICAgICAgIGt3WyJ2YWx1ZXMiXSA9IF9mb3JtYXRfb3B0ZGljdCh7J3YnOiBrd1sidmFsdWVzIl19KVsxXQorCisgICAgICAgIHJldHVybiBFbnRyeS5jb25maWd1cmUoc2VsZiwgY25mLCAqKmt3KQorCisKKyAgICBkZWYgY3VycmVudChzZWxmLCBuZXdpbmRleD1Ob25lKToKKyAgICAgICAgIiIiSWYgbmV3aW5kZXggaXMgc3VwcGxpZWQsIHNldHMgdGhlIGNvbWJvYm94IHZhbHVlIHRvIHRoZQorICAgICAgICBlbGVtZW50IGF0IHBvc2l0aW9uIG5ld2luZGV4IGluIHRoZSBsaXN0IG9mIHZhbHVlcy4gT3RoZXJ3aXNlLAorICAgICAgICByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgbGlzdCBvZiB2YWx1ZXMKKyAgICAgICAgb3IgLTEgaWYgdGhlIGN1cnJlbnQgdmFsdWUgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBsaXN0LiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJjdXJyZW50IiwgbmV3aW5kZXgpCisKKworICAgIGRlZiBzZXQoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgY29tYm9ib3ggdG8gdmFsdWUuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAic2V0IiwgdmFsdWUpCisKKworY2xhc3MgRnJhbWUoV2lkZ2V0KToKKyAgICAiIiJUdGsgRnJhbWUgd2lkZ2V0IGlzIGEgY29udGFpbmVyLCB1c2VkIHRvIGdyb3VwIG90aGVyIHdpZGdldHMKKyAgICB0b2dldGhlci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBGcmFtZSB3aXRoIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY3Vyc29yLCBzdHlsZSwgdGFrZWZvY3VzCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgYm9yZGVyd2lkdGgsIHJlbGllZiwgcGFkZGluZywgd2lkdGgsIGhlaWdodAorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6ZnJhbWUiLCBrdykKKworCitjbGFzcyBMYWJlbChXaWRnZXQpOgorICAgICIiIlR0ayBMYWJlbCB3aWRnZXQgZGlzcGxheXMgYSB0ZXh0dWFsIGxhYmVsIGFuZC9vciBpbWFnZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBMYWJlbCB3aXRoIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY29tcG91bmQsIGN1cnNvciwgaW1hZ2UsIHN0eWxlLCB0YWtlZm9jdXMsIHRleHQsCisgICAgICAgICAgICB0ZXh0dmFyaWFibGUsIHVuZGVybGluZSwgd2lkdGgKKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBhbmNob3IsIGJhY2tncm91bmQsIGZvbnQsIGZvcmVncm91bmQsIGp1c3RpZnksIHBhZGRpbmcsCisgICAgICAgICAgICByZWxpZWYsIHRleHQsIHdyYXBsZW5ndGgKKyAgICAgICAgIiIiCisgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6OmxhYmVsIiwga3cpCisKKworY2xhc3MgTGFiZWxmcmFtZShXaWRnZXQpOgorICAgICIiIlR0ayBMYWJlbGZyYW1lIHdpZGdldCBpcyBhIGNvbnRhaW5lciB1c2VkIHRvIGdyb3VwIG90aGVyIHdpZGdldHMKKyAgICB0b2dldGhlci4gSXQgaGFzIGFuIG9wdGlvbmFsIGxhYmVsLCB3aGljaCBtYXkgYmUgYSBwbGFpbiB0ZXh0IHN0cmluZworICAgIG9yIGFub3RoZXIgd2lkZ2V0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIExhYmVsZnJhbWUgd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgc3R5bGUsIHRha2Vmb2N1cworCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisgICAgICAgICAgICBsYWJlbGFuY2hvciwgdGV4dCwgdW5kZXJsaW5lLCBwYWRkaW5nLCBsYWJlbHdpZGdldCwgd2lkdGgsCisgICAgICAgICAgICBoZWlnaHQKKyAgICAgICAgIiIiCisgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6OmxhYmVsZnJhbWUiLCBrdykKKworTGFiZWxGcmFtZSA9IExhYmVsZnJhbWUgIyBUa2ludGVyIG5hbWUgY29tcGF0aWJpbGl0eQorCisKK2NsYXNzIE1lbnVidXR0b24oV2lkZ2V0KToKKyAgICAiIiJUdGsgTWVudWJ1dHRvbiB3aWRnZXQgZGlzcGxheXMgYSB0ZXh0dWFsIGxhYmVsIGFuZC9vciBpbWFnZSwgYW5kCisgICAgZGlzcGxheXMgYSBtZW51IHdoZW4gcHJlc3NlZC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBNZW51YnV0dG9uIHdpdGggcGFyZW50IG1hc3Rlci4KKworICAgICAgICBTVEFOREFSRCBPUFRJT05TCisKKyAgICAgICAgICAgIGNsYXNzLCBjb21wb3VuZCwgY3Vyc29yLCBpbWFnZSwgc3RhdGUsIHN0eWxlLCB0YWtlZm9jdXMsCisgICAgICAgICAgICB0ZXh0LCB0ZXh0dmFyaWFibGUsIHVuZGVybGluZSwgd2lkdGgKKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBkaXJlY3Rpb24sIG1lbnUKKyAgICAgICAgIiIiCisgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6Om1lbnVidXR0b24iLCBrdykKKworCitjbGFzcyBOb3RlYm9vayhXaWRnZXQpOgorICAgICIiIlR0ayBOb3RlYm9vayB3aWRnZXQgbWFuYWdlcyBhIGNvbGxlY3Rpb24gb2Ygd2luZG93cyBhbmQgZGlzcGxheXMKKyAgICBhIHNpbmdsZSBvbmUgYXQgYSB0aW1lLiBFYWNoIGNoaWxkIHdpbmRvdyBpcyBhc3NvY2lhdGVkIHdpdGggYSB0YWIsCisgICAgd2hpY2ggdGhlIHVzZXIgbWF5IHNlbGVjdCB0byBjaGFuZ2UgdGhlIGN1cnJlbnRseS1kaXNwbGF5ZWQgd2luZG93LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIE5vdGVib29rIHdpdGggcGFyZW50IG1hc3Rlci4KKworICAgICAgICBTVEFOREFSRCBPUFRJT05TCisKKyAgICAgICAgICAgIGNsYXNzLCBjdXJzb3IsIHN0eWxlLCB0YWtlZm9jdXMKKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBoZWlnaHQsIHBhZGRpbmcsIHdpZHRoCisKKyAgICAgICAgVEFCIE9QVElPTlMKKworICAgICAgICAgICAgc3RhdGUsIHN0aWNreSwgcGFkZGluZywgdGV4dCwgaW1hZ2UsIGNvbXBvdW5kLCB1bmRlcmxpbmUKKworICAgICAgICBUQUIgSURFTlRJRklFUlMgKHRhYl9pZCkKKworICAgICAgICAgICAgVGhlIHRhYl9pZCBhcmd1bWVudCBmb3VuZCBpbiBzZXZlcmFsIG1ldGhvZHMgbWF5IHRha2UgYW55IG9mCisgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGZvcm1zOgorCisgICAgICAgICAgICAgICAgKiBBbiBpbnRlZ2VyIGJldHdlZW4gemVybyBhbmQgdGhlIG51bWJlciBvZiB0YWJzCisgICAgICAgICAgICAgICAgKiBUaGUgbmFtZSBvZiBhIGNoaWxkIHdpbmRvdworICAgICAgICAgICAgICAgICogQSBwb3NpdGlvbmFsIHNwZWNpZmljYXRpb24gb2YgdGhlIGZvcm0gIkB4LHkiLCB3aGljaAorICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgdGFiCisgICAgICAgICAgICAgICAgKiBUaGUgc3RyaW5nICJjdXJyZW50Iiwgd2hpY2ggaWRlbnRpZmllcyB0aGUKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnRseS1zZWxlY3RlZCB0YWIKKyAgICAgICAgICAgICAgICAqIFRoZSBzdHJpbmcgImVuZCIsIHdoaWNoIHJldHVybnMgdGhlIG51bWJlciBvZiB0YWJzIChvbmx5CisgICAgICAgICAgICAgICAgICB2YWxpZCBmb3IgbWV0aG9kIGluZGV4KQorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6bm90ZWJvb2siLCBrdykKKworCisgICAgZGVmIGFkZChzZWxmLCBjaGlsZCwgKiprdyk6CisgICAgICAgICIiIkFkZHMgYSBuZXcgdGFiIHRvIHRoZSBub3RlYm9vay4KKworICAgICAgICBJZiB3aW5kb3cgaXMgY3VycmVudGx5IG1hbmFnZWQgYnkgdGhlIG5vdGVib29rIGJ1dCBoaWRkZW4sIGl0IGlzCisgICAgICAgIHJlc3RvcmVkIHRvIGl0cyBwcmV2aW91cyBwb3NpdGlvbi4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJhZGQiLCBjaGlsZCwgKihfZm9ybWF0X29wdGRpY3Qoa3cpKSkKKworCisgICAgZGVmIGZvcmdldChzZWxmLCB0YWJfaWQpOgorICAgICAgICAiIiJSZW1vdmVzIHRoZSB0YWIgc3BlY2lmaWVkIGJ5IHRhYl9pZCwgdW5tYXBzIGFuZCB1bm1hbmFnZXMgdGhlCisgICAgICAgIGFzc29jaWF0ZWQgd2luZG93LiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImZvcmdldCIsIHRhYl9pZCkKKworCisgICAgZGVmIGhpZGUoc2VsZiwgdGFiX2lkKToKKyAgICAgICAgIiIiSGlkZXMgdGhlIHRhYiBzcGVjaWZpZWQgYnkgdGFiX2lkLgorCisgICAgICAgIFRoZSB0YWIgd2lsbCBub3QgYmUgZGlzcGxheWVkLCBidXQgdGhlIGFzc29jaWF0ZWQgd2luZG93IHJlbWFpbnMKKyAgICAgICAgbWFuYWdlZCBieSB0aGUgbm90ZWJvb2sgYW5kIGl0cyBjb25maWd1cmF0aW9uIHJlbWVtYmVyZWQuIEhpZGRlbgorICAgICAgICB0YWJzIG1heSBiZSByZXN0b3JlZCB3aXRoIHRoZSBhZGQgY29tbWFuZC4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJoaWRlIiwgdGFiX2lkKQorCisKKyAgICBkZWYgaWRlbnRpZnkoc2VsZiwgeCwgeSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRhYiBlbGVtZW50IGF0IHBvc2l0aW9uIHgsIHksIG9yIHRoZQorICAgICAgICBlbXB0eSBzdHJpbmcgaWYgbm9uZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiaWRlbnRpZnkiLCB4LCB5KQorCisKKyAgICBkZWYgaW5kZXgoc2VsZiwgdGFiX2lkKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgbnVtZXJpYyBpbmRleCBvZiB0aGUgdGFiIHNwZWNpZmllZCBieSB0YWJfaWQsIG9yCisgICAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFicyBpZiB0YWJfaWQgaXMgdGhlIHN0cmluZyAiZW5kIi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiaW5kZXgiLCB0YWJfaWQpCisKKworICAgIGRlZiBpbnNlcnQoc2VsZiwgcG9zLCBjaGlsZCwgKiprdyk6CisgICAgICAgICIiIkluc2VydHMgYSBwYW5lIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCisKKyAgICAgICAgcG9zIGlzIGVpdGhlciB0aGUgc3RyaW5nIGVuZCwgYW4gaW50ZWdlciBpbmRleCwgb3IgdGhlIG5hbWUgb2YKKyAgICAgICAgYSBtYW5hZ2VkIGNoaWxkLiBJZiBjaGlsZCBpcyBhbHJlYWR5IG1hbmFnZWQgYnkgdGhlIG5vdGVib29rLAorICAgICAgICBtb3ZlcyBpdCB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImluc2VydCIsIHBvcywgY2hpbGQsICooX2Zvcm1hdF9vcHRkaWN0KGt3KSkpCisKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGFiX2lkPU5vbmUpOgorICAgICAgICAiIiJTZWxlY3RzIHRoZSBzcGVjaWZpZWQgdGFiLgorCisgICAgICAgIFRoZSBhc3NvY2lhdGVkIGNoaWxkIHdpbmRvdyB3aWxsIGJlIGRpc3BsYXllZCwgYW5kIHRoZQorICAgICAgICBwcmV2aW91c2x5LXNlbGVjdGVkIHdpbmRvdyAoaWYgZGlmZmVyZW50KSBpcyB1bm1hcHBlZC4gSWYgdGFiX2lkCisgICAgICAgIGlzIG9taXR0ZWQsIHJldHVybnMgdGhlIHdpZGdldCBuYW1lIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKKyAgICAgICAgcGFuZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAic2VsZWN0IiwgdGFiX2lkKQorCisKKyAgICBkZWYgdGFiKHNlbGYsIHRhYl9pZCwgb3B0aW9uPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJRdWVyeSBvciBtb2RpZnkgdGhlIG9wdGlvbnMgb2YgdGhlIHNwZWNpZmljIHRhYl9pZC4KKworICAgICAgICBJZiBrdyBpcyBub3QgZ2l2ZW4sIHJldHVybnMgYSBkaWN0IG9mIHRoZSB0YWIgb3B0aW9uIHZhbHVlcy4gSWYgb3B0aW9uCisgICAgICAgIGlzIHNwZWNpZmllZCwgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhhdCBvcHRpb24uIE90aGVyd2lzZSwgc2V0cyB0aGUKKyAgICAgICAgb3B0aW9ucyB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIiIiCisgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgInRhYiIsIHRhYl9pZCkKKworCisgICAgZGVmIHRhYnMoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgYSBsaXN0IG9mIHdpbmRvd3MgbWFuYWdlZCBieSB0aGUgbm90ZWJvb2suIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInRhYnMiKSBvciAoKQorCisKKyAgICBkZWYgZW5hYmxlX3RyYXZlcnNhbChzZWxmKToKKyAgICAgICAgIiIiRW5hYmxlIGtleWJvYXJkIHRyYXZlcnNhbCBmb3IgYSB0b3BsZXZlbCB3aW5kb3cgY29udGFpbmluZworICAgICAgICB0aGlzIG5vdGVib29rLgorCisgICAgICAgIFRoaXMgd2lsbCBleHRlbmQgdGhlIGJpbmRpbmdzIGZvciB0aGUgdG9wbGV2ZWwgd2luZG93IGNvbnRhaW5pbmcKKyAgICAgICAgdGhpcyBub3RlYm9vayBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICBDb250cm9sLVRhYjogc2VsZWN0cyB0aGUgdGFiIGZvbGxvd2luZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgb25lCisKKyAgICAgICAgICAgIFNoaWZ0LUNvbnRyb2wtVGFiOiBzZWxlY3RzIHRoZSB0YWIgcHJlY2VkaW5nIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBvbmUKKworICAgICAgICAgICAgQWx0LUs6IHdoZXJlIEsgaXMgdGhlIG1uZW1vbmljICh1bmRlcmxpbmVkKSBjaGFyYWN0ZXIgb2YgYW55CisgICAgICAgICAgICAgICAgICAgdGFiLCB3aWxsIHNlbGVjdCB0aGF0IHRhYi4KKworICAgICAgICBNdWx0aXBsZSBub3RlYm9va3MgaW4gYSBzaW5nbGUgdG9wbGV2ZWwgbWF5IGJlIGVuYWJsZWQgZm9yCisgICAgICAgIHRyYXZlcnNhbCwgaW5jbHVkaW5nIG5lc3RlZCBub3RlYm9va3MuIEhvd2V2ZXIsIG5vdGVib29rIHRyYXZlcnNhbAorICAgICAgICBvbmx5IHdvcmtzIHByb3Blcmx5IGlmIGFsbCBwYW5lcyBhcmUgZGlyZWN0IGNoaWxkcmVuIG9mIHRoZQorICAgICAgICBub3RlYm9vay4iIiIKKyAgICAgICAgIyBUaGUgb25seSwgYW5kIGdvb2QsIGRpZmZlcmVuY2UgSSBzZWUgaXMgYWJvdXQgbW5lbW9uaWNzLCB3aGljaCB3b3JrcworICAgICAgICAjIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QuIENvbnRyb2wtVGFiIGFuZCBTaGlmdC1Db250cm9sLVRhYiBhbHdheXMKKyAgICAgICAgIyB3b3JrcyAoaGVyZSBhdCBsZWFzdCkuCisgICAgICAgIHNlbGYudGsuY2FsbCgidHRrOjpub3RlYm9vazo6ZW5hYmxlVHJhdmVyc2FsIiwgc2VsZi5fdykKKworCitjbGFzcyBQYW5lZHdpbmRvdyhXaWRnZXQsIFRraW50ZXIuUGFuZWRXaW5kb3cpOgorICAgICIiIlR0ayBQYW5lZHdpbmRvdyB3aWRnZXQgZGlzcGxheXMgYSBudW1iZXIgb2Ygc3Vid2luZG93cywgc3RhY2tlZAorICAgIGVpdGhlciB2ZXJ0aWNhbGx5IG9yIGhvcml6b250YWxseS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBQYW5lZHdpbmRvdyB3aXRoIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY3Vyc29yLCBzdHlsZSwgdGFrZWZvY3VzCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgb3JpZW50LCB3aWR0aCwgaGVpZ2h0CisKKyAgICAgICAgUEFORSBPUFRJT05TCisKKyAgICAgICAgICAgIHdlaWdodAorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6cGFuZWR3aW5kb3ciLCBrdykKKworCisgICAgZm9yZ2V0ID0gVGtpbnRlci5QYW5lZFdpbmRvdy5mb3JnZXQgIyBvdmVycmlkZXMgUGFjay5mb3JnZXQKKworCisgICAgZGVmIGluc2VydChzZWxmLCBwb3MsIGNoaWxkLCAqKmt3KToKKyAgICAgICAgIiIiSW5zZXJ0cyBhIHBhbmUgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbnMuCisKKyAgICAgICAgcG9zIGlzIGVpdGhlciB0aGUgc3RyaW5nIGVuZCwgYW5kIGludGVnZXIgaW5kZXgsIG9yIHRoZSBuYW1lCisgICAgICAgIG9mIGEgY2hpbGQuIElmIGNoaWxkIGlzIGFscmVhZHkgbWFuYWdlZCBieSB0aGUgcGFuZWQgd2luZG93LAorICAgICAgICBtb3ZlcyBpdCB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImluc2VydCIsIHBvcywgY2hpbGQsICooX2Zvcm1hdF9vcHRkaWN0KGt3KSkpCisKKworICAgIGRlZiBwYW5lKHNlbGYsIHBhbmUsIG9wdGlvbj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiUXVlcnkgb3IgbW9kaWZ5IHRoZSBvcHRpb25zIG9mIHRoZSBzcGVjaWZpZWQgcGFuZS4KKworICAgICAgICBwYW5lIGlzIGVpdGhlciBhbiBpbnRlZ2VyIGluZGV4IG9yIHRoZSBuYW1lIG9mIGEgbWFuYWdlZCBzdWJ3aW5kb3cuCisgICAgICAgIElmIGt3IGlzIG5vdCBnaXZlbiwgcmV0dXJucyBhIGRpY3Qgb2YgdGhlIHBhbmUgb3B0aW9uIHZhbHVlcy4gSWYKKyAgICAgICAgb3B0aW9uIGlzIHNwZWNpZmllZCB0aGVuIHRoZSB2YWx1ZSBmb3IgdGhhdCBvcHRpb24gaXMgcmV0dXJuZWQuCisgICAgICAgIE90aGVyd2lzZSwgc2V0cyB0aGUgb3B0aW9ucyB0byB0aGUgY29ycmVzcG9kaW5nIHZhbHVlcy4iIiIKKyAgICAgICAgaWYgb3B0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAga3dbb3B0aW9uXSA9IE5vbmUKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl93LCAicGFuZSIsIHBhbmUpCisKKworICAgIGRlZiBzYXNocG9zKHNlbGYsIGluZGV4LCBuZXdwb3M9Tm9uZSk6CisgICAgICAgICIiIklmIG5ld3BvcyBpcyBzcGVjaWZpZWQsIHNldHMgdGhlIHBvc2l0aW9uIG9mIHNhc2ggbnVtYmVyIGluZGV4LgorCisgICAgICAgIE1heSBhZGp1c3QgdGhlIHBvc2l0aW9ucyBvZiBhZGphY2VudCBzYXNoZXMgdG8gZW5zdXJlIHRoYXQKKyAgICAgICAgcG9zaXRpb25zIGFyZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuIFNhc2ggcG9zaXRpb25zIGFyZSBmdXJ0aGVyCisgICAgICAgIGNvbnN0cmFpbmVkIHRvIGJlIGJldHdlZW4gMCBhbmQgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHdpZGdldC4KKworICAgICAgICBSZXR1cm5zIHRoZSBuZXcgcG9zaXRpb24gb2Ygc2FzaCBudW1iZXIgaW5kZXguIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInNhc2hwb3MiLCBpbmRleCwgbmV3cG9zKQorCitQYW5lZFdpbmRvdyA9IFBhbmVkd2luZG93ICMgVGtpbnRlciBuYW1lIGNvbXBhdGliaWxpdHkKKworCitjbGFzcyBQcm9ncmVzc2JhcihXaWRnZXQpOgorICAgICIiIlR0ayBQcm9ncmVzc2JhciB3aWRnZXQgc2hvd3MgdGhlIHN0YXR1cyBvZiBhIGxvbmctcnVubmluZworICAgIG9wZXJhdGlvbi4gVGhleSBjYW4gb3BlcmF0ZSBpbiB0d28gbW9kZXM6IGRldGVybWluYXRlIG1vZGUgc2hvd3MgdGhlCisgICAgYW1vdW50IGNvbXBsZXRlZCByZWxhdGl2ZSB0byB0aGUgdG90YWwgYW1vdW50IG9mIHdvcmsgdG8gYmUgZG9uZSwgYW5kCisgICAgaW5kZXRlcm1pbmF0ZSBtb2RlIHByb3ZpZGVzIGFuIGFuaW1hdGVkIGRpc3BsYXkgdG8gbGV0IHRoZSB1c2VyIGtub3cKKyAgICB0aGF0IHNvbWV0aGluZyBpcyBoYXBwZW5pbmcuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUdGsgUHJvZ3Jlc3NiYXIgd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgc3R5bGUsIHRha2Vmb2N1cworCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIG9yaWVudCwgbGVuZ3RoLCBtb2RlLCBtYXhpbXVtLCB2YWx1ZSwgdmFyaWFibGUsIHBoYXNlCisgICAgICAgICIiIgorICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAidHRrOjpwcm9ncmVzc2JhciIsIGt3KQorCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgaW50ZXJ2YWw9Tm9uZSk6CisgICAgICAgICIiIkJlZ2luIGF1dG9pbmNyZW1lbnQgbW9kZTogc2NoZWR1bGVzIGEgcmVjdXJyaW5nIHRpbWVyIGV2ZW50CisgICAgICAgIHRoYXQgY2FsbHMgbWV0aG9kIHN0ZXAgZXZlcnkgaW50ZXJ2YWwgbWlsbGlzZWNvbmRzLgorCisgICAgICAgIGludGVydmFsIGRlZmF1bHRzIHRvIDUwIG1pbGxpc2Vjb25kcyAoMjAgc3RlcHMvc2Vjb25kKSBpZiBvbW1pdGVkLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInN0YXJ0IiwgaW50ZXJ2YWwpCisKKworICAgIGRlZiBzdGVwKHNlbGYsIGFtb3VudD1Ob25lKToKKyAgICAgICAgIiIiSW5jcmVtZW50cyB0aGUgdmFsdWUgb3B0aW9uIGJ5IGFtb3VudC4KKworICAgICAgICBhbW91bnQgZGVmYXVsdHMgdG8gMS4wIGlmIG9taXR0ZWQuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAic3RlcCIsIGFtb3VudCkKKworCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgYXV0b2luY3JlbWVudCBtb2RlOiBjYW5jZWxzIGFueSByZWN1cnJpbmcgdGltZXIgZXZlbnQKKyAgICAgICAgaW5pdGlhdGVkIGJ5IHN0YXJ0LiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInN0b3AiKQorCisKK2NsYXNzIFJhZGlvYnV0dG9uKFdpZGdldCk6CisgICAgIiIiVHRrIFJhZGlvYnV0dG9uIHdpZGdldHMgYXJlIHVzZWQgaW4gZ3JvdXBzIHRvIHNob3cgb3IgY2hhbmdlIGEKKyAgICBzZXQgb2YgbXV0dWFsbHktZXhjbHVzaXZlIG9wdGlvbnMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUdGsgUmFkaW9idXR0b24gd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGNvbXBvdW5kLCBjdXJzb3IsIGltYWdlLCBzdGF0ZSwgc3R5bGUsIHRha2Vmb2N1cywKKyAgICAgICAgICAgIHRleHQsIHRleHR2YXJpYWJsZSwgdW5kZXJsaW5lLCB3aWR0aAorCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIGNvbW1hbmQsIHZhbHVlLCB2YXJpYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6cmFkaW9idXR0b24iLCBrdykKKworCisgICAgZGVmIGludm9rZShzZWxmKToKKyAgICAgICAgIiIiU2V0cyB0aGUgb3B0aW9uIHZhcmlhYmxlIHRvIHRoZSBvcHRpb24gdmFsdWUsIHNlbGVjdHMgdGhlCisgICAgICAgIHdpZGdldCwgYW5kIGludm9rZXMgdGhlIGFzc29jaWF0ZWQgY29tbWFuZC4KKworICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQsIG9yIGFuIGVtcHR5IHN0cmluZyBpZgorICAgICAgICBubyBjb21tYW5kIGlzIHNwZWNpZmllZC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiaW52b2tlIikKKworCitjbGFzcyBTY2FsZShXaWRnZXQsIFRraW50ZXIuU2NhbGUpOgorICAgICIiIlR0ayBTY2FsZSB3aWRnZXQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gY29udHJvbCB0aGUgbnVtZXJpYyB2YWx1ZSBvZgorICAgIGEgbGlua2VkIHZhcmlhYmxlIHRoYXQgdmFyaWVzIHVuaWZvcm1seSBvdmVyIHNvbWUgcmFuZ2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUdGsgU2NhbGUgd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgc3R5bGUsIHRha2Vmb2N1cworCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIGNvbW1hbmQsIGZyb20sIGxlbmd0aCwgb3JpZW50LCB0bywgdmFsdWUsIHZhcmlhYmxlCisgICAgICAgICIiIgorICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAidHRrOjpzY2FsZSIsIGt3KQorCisKKyAgICBkZWYgY29uZmlndXJlKHNlbGYsIGNuZj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiTW9kaWZ5IG9yIHF1ZXJ5IHNjYWxlIG9wdGlvbnMuCisKKyAgICAgICAgU2V0dGluZyBhIHZhbHVlIGZvciBhbnkgb2YgdGhlICJmcm9tIiwgImZyb21fIiBvciAidG8iIG9wdGlvbnMKKyAgICAgICAgZ2VuZXJhdGVzIGEgPDxSYW5nZUNoYW5nZWQ+PiBldmVudC4iIiIKKyAgICAgICAgaWYgY25mOgorICAgICAgICAgICAga3cudXBkYXRlKGNuZikKKyAgICAgICAgV2lkZ2V0LmNvbmZpZ3VyZShzZWxmLCAqKmt3KQorICAgICAgICBpZiBhbnkoWydmcm9tJyBpbiBrdywgJ2Zyb21fJyBpbiBrdywgJ3RvJyBpbiBrd10pOgorICAgICAgICAgICAgc2VsZi5ldmVudF9nZW5lcmF0ZSgnPDxSYW5nZUNoYW5nZWQ+PicpCisKKworICAgIGRlZiBnZXQoc2VsZiwgeD1Ob25lLCB5PU5vbmUpOgorICAgICAgICAiIiJHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHZhbHVlIG9wdGlvbiwgb3IgdGhlIHZhbHVlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvb3JkaW5hdGVzIHgsIHkgaWYgdGhleSBhcmUgc3BlY2lmaWVkLgorCisgICAgICAgIHggYW5kIHkgYXJlIHBpeGVsIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSB3aWRnZXQKKyAgICAgICAgb3JpZ2luLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdnZXQnLCB4LCB5KQorCisKK2NsYXNzIFNjcm9sbGJhcihXaWRnZXQsIFRraW50ZXIuU2Nyb2xsYmFyKToKKyAgICAiIiJUdGsgU2Nyb2xsYmFyIGNvbnRyb2xzIHRoZSB2aWV3cG9ydCBvZiBhIHNjcm9sbGFibGUgd2lkZ2V0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIFNjcm9sbGJhciB3aXRoIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY3Vyc29yLCBzdHlsZSwgdGFrZWZvY3VzCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgY29tbWFuZCwgb3JpZW50CisgICAgICAgICIiIgorICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAidHRrOjpzY3JvbGxiYXIiLCBrdykKKworCitjbGFzcyBTZXBhcmF0b3IoV2lkZ2V0KToKKyAgICAiIiJUdGsgU2VwYXJhdG9yIHdpZGdldCBkaXNwbGF5cyBhIGhvcml6b250YWwgb3IgdmVydGljYWwgc2VwYXJhdG9yCisgICAgYmFyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIFNlcGFyYXRvciB3aXRoIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY3Vyc29yLCBzdHlsZSwgdGFrZWZvY3VzCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgb3JpZW50CisgICAgICAgICIiIgorICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAidHRrOjpzZXBhcmF0b3IiLCBrdykKKworCitjbGFzcyBTaXplZ3JpcChXaWRnZXQpOgorICAgICIiIlR0ayBTaXplZ3JpcCBhbGxvd3MgdGhlIHVzZXIgdG8gcmVzaXplIHRoZSBjb250YWluaW5nIHRvcGxldmVsCisgICAgd2luZG93IGJ5IHByZXNzaW5nIGFuZCBkcmFnZ2luZyB0aGUgZ3JpcC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBTaXplZ3JpcCB3aXRoIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY3Vyc29yLCBzdGF0ZSwgc3R5bGUsIHRha2Vmb2N1cworICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6c2l6ZWdyaXAiLCBrdykKKworCitjbGFzcyBUcmVldmlldyhXaWRnZXQsIFRraW50ZXIuWFZpZXcsIFRraW50ZXIuWVZpZXcpOgorICAgICIiIlR0ayBUcmVldmlldyB3aWRnZXQgZGlzcGxheXMgYSBoaWVyYXJjaGljYWwgY29sbGVjdGlvbiBvZiBpdGVtcy4KKworICAgIEVhY2ggaXRlbSBoYXMgYSB0ZXh0dWFsIGxhYmVsLCBhbiBvcHRpb25hbCBpbWFnZSwgYW5kIGFuIG9wdGlvbmFsIGxpc3QKKyAgICBvZiBkYXRhIHZhbHVlcy4gVGhlIGRhdGEgdmFsdWVzIGFyZSBkaXNwbGF5ZWQgaW4gc3VjY2Vzc2l2ZSBjb2x1bW5zCisgICAgYWZ0ZXIgdGhlIHRyZWUgbGFiZWwuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUdGsgVHJlZXZpZXcgd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgc3R5bGUsIHRha2Vmb2N1cywgeHNjcm9sbGNvbW1hbmQsCisgICAgICAgICAgICB5c2Nyb2xsY29tbWFuZAorCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIGNvbHVtbnMsIGRpc3BsYXljb2x1bW5zLCBoZWlnaHQsIHBhZGRpbmcsIHNlbGVjdG1vZGUsIHNob3cKKworICAgICAgICBJVEVNIE9QVElPTlMKKworICAgICAgICAgICAgdGV4dCwgaW1hZ2UsIHZhbHVlcywgb3BlbiwgdGFncworCisgICAgICAgIFRBRyBPUFRJT05TCisKKyAgICAgICAgICAgIGZvcmVncm91bmQsIGJhY2tncm91bmQsIGZvbnQsIGltYWdlCisgICAgICAgICIiIgorICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAidHRrOjp0cmVldmlldyIsIGt3KQorCisKKyAgICBkZWYgYmJveChzZWxmLCBpdGVtLCBjb2x1bW49Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGJvdW5kaW5nIGJveCAocmVsYXRpdmUgdG8gdGhlIHRyZWV2aWV3IHdpZGdldCdzCisgICAgICAgIHdpbmRvdykgb2YgdGhlIHNwZWNpZmllZCBpdGVtIGluIHRoZSBmb3JtIHggeSB3aWR0aCBoZWlnaHQuCisKKyAgICAgICAgSWYgY29sdW1uIGlzIHNwZWNpZmllZCwgcmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG9mIHRoYXQgY2VsbC4KKyAgICAgICAgSWYgdGhlIGl0ZW0gaXMgbm90IHZpc2libGUgKGkuZS4sIGlmIGl0IGlzIGEgZGVzY2VuZGFudCBvZiBhCisgICAgICAgIGNsb3NlZCBpdGVtIG9yIGlzIHNjcm9sbGVkIG9mZnNjcmVlbiksIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJiYm94IiwgaXRlbSwgY29sdW1uKQorCisKKyAgICBkZWYgZ2V0X2NoaWxkcmVuKHNlbGYsIGl0ZW09Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgYSB0dXBsZSBvZiBjaGlsZHJlbiBiZWxvbmdpbmcgdG8gaXRlbS4KKworICAgICAgICBJZiBpdGVtIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgcm9vdCBjaGlsZHJlbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiY2hpbGRyZW4iLCBpdGVtIG9yICcnKSBvciAoKQorCisKKyAgICBkZWYgc2V0X2NoaWxkcmVuKHNlbGYsIGl0ZW0sICpuZXdjaGlsZHJlbik6CisgICAgICAgICIiIlJlcGxhY2VzIGl0ZW0ncyBjaGlsZCB3aXRoIG5ld2NoaWxkcmVuLgorCisgICAgICAgIENoaWxkcmVuIHByZXNlbnQgaW4gaXRlbSB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiBuZXdjaGlsZHJlbgorICAgICAgICBhcmUgZGV0YWNoZWQgZnJvbSB0cmVlLiBObyBpdGVtcyBpbiBuZXdjaGlsZHJlbiBtYXkgYmUgYW4KKyAgICAgICAgYW5jZXN0b3Igb2YgaXRlbS4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJjaGlsZHJlbiIsIGl0ZW0sIG5ld2NoaWxkcmVuKQorCisKKyAgICBkZWYgY29sdW1uKHNlbGYsIGNvbHVtbiwgb3B0aW9uPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJRdWVyeSBvciBtb2RpZnkgdGhlIG9wdGlvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29sdW1uLgorCisgICAgICAgIElmIGt3IGlzIG5vdCBnaXZlbiwgcmV0dXJucyBhIGRpY3Qgb2YgdGhlIGNvbHVtbiBvcHRpb24gdmFsdWVzLiBJZgorICAgICAgICBvcHRpb24gaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHZhbHVlIGZvciB0aGF0IG9wdGlvbiBpcyByZXR1cm5lZC4KKyAgICAgICAgT3RoZXJ3aXNlLCBzZXRzIHRoZSBvcHRpb25zIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4iIiIKKyAgICAgICAgaWYgb3B0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAga3dbb3B0aW9uXSA9IE5vbmUKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl93LCAiY29sdW1uIiwgY29sdW1uKQorCisKKyAgICBkZWYgZGVsZXRlKHNlbGYsICppdGVtcyk6CisgICAgICAgICIiIkRlbGV0ZSBhbGwgc3BlY2lmaWVkIGl0ZW1zIGFuZCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIFRoZSByb290CisgICAgICAgIGl0ZW0gbWF5IG5vdCBiZSBkZWxldGVkLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImRlbGV0ZSIsIGl0ZW1zKQorCisKKyAgICBkZWYgZGV0YWNoKHNlbGYsICppdGVtcyk6CisgICAgICAgICIiIlVubGlua3MgYWxsIG9mIHRoZSBzcGVjaWZpZWQgaXRlbXMgZnJvbSB0aGUgdHJlZS4KKworICAgICAgICBUaGUgaXRlbXMgYW5kIGFsbCBvZiB0aGVpciBkZXNjZW5kYW50cyBhcmUgc3RpbGwgcHJlc2VudCwgYW5kIG1heQorICAgICAgICBiZSByZWluc2VydGVkIGF0IGFub3RoZXIgcG9pbnQgaW4gdGhlIHRyZWUsIGJ1dCB3aWxsIG5vdCBiZQorICAgICAgICBkaXNwbGF5ZWQuIFRoZSByb290IGl0ZW0gbWF5IG5vdCBiZSBkZXRhY2hlZC4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJkZXRhY2giLCBpdGVtcykKKworCisgICAgZGVmIGV4aXN0cyhzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgaXRlbSBpcyBwcmVzZW50IGluIHRoZSB0aHJlZSwKKyAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgICAgICByZXR1cm4gYm9vbChzZWxmLnRrLmNhbGwoc2VsZi5fdywgImV4aXN0cyIsIGl0ZW0pKQorCisKKyAgICBkZWYgZm9jdXMoc2VsZiwgaXRlbT1Ob25lKToKKyAgICAgICAgIiIiSWYgaXRlbSBpcyBzcGVjaWZpZWQsIHNldHMgdGhlIGZvY3VzIGl0ZW0gdG8gaXRlbS4gT3RoZXJ3aXNlLAorICAgICAgICByZXR1cm5zIHRoZSBjdXJyZW50IGZvY3VzIGl0ZW0sIG9yICcnIGlmIHRoZXJlIGlzIG5vbmUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImZvY3VzIiwgaXRlbSkKKworCisgICAgZGVmIGhlYWRpbmcoc2VsZiwgY29sdW1uLCBvcHRpb249Tm9uZSwgKiprdyk6CisgICAgICAgICIiIlF1ZXJ5IG9yIG1vZGlmeSB0aGUgaGVhZGluZyBvcHRpb25zIGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbi4KKworICAgICAgICBJZiBrdyBpcyBub3QgZ2l2ZW4sIHJldHVybnMgYSBkaWN0IG9mIHRoZSBoZWFkaW5nIG9wdGlvbiB2YWx1ZXMuIElmCisgICAgICAgIG9wdGlvbiBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgdmFsdWUgZm9yIHRoYXQgb3B0aW9uIGlzIHJldHVybmVkLgorICAgICAgICBPdGhlcndpc2UsIHNldHMgdGhlIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLgorCisgICAgICAgIFZhbGlkIG9wdGlvbnMvdmFsdWVzIGFyZToKKyAgICAgICAgICAgIHRleHQ6IHRleHQKKyAgICAgICAgICAgICAgICBUaGUgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBjb2x1bW4gaGVhZGluZworICAgICAgICAgICAgaW1hZ2U6IGltYWdlX25hbWUKKyAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYW4gaW1hZ2UgdG8gZGlzcGxheSB0byB0aGUgcmlnaHQgb2YgdGhlIGNvbHVtbgorICAgICAgICAgICAgICAgIGhlYWRpbmcKKyAgICAgICAgICAgIGFuY2hvcjogYW5jaG9yCisgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGhvdyB0aGUgaGVhZGluZyB0ZXh0IHNob3VsZCBiZSBhbGlnbmVkLiBPbmUgb2YKKyAgICAgICAgICAgICAgICB0aGUgc3RhbmRhcmQgVGsgYW5jaG9yIHZhbHVlcworICAgICAgICAgICAgY29tbWFuZDogY2FsbGJhY2sKKyAgICAgICAgICAgICAgICBBIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgaGVhZGluZyBsYWJlbCBpcworICAgICAgICAgICAgICAgIHByZXNzZWQuCisKKyAgICAgICAgVG8gY29uZmlndXJlIHRoZSB0cmVlIGNvbHVtbiBoZWFkaW5nLCBjYWxsIHRoaXMgd2l0aCBjb2x1bW4gPSAiIzAiICIiIgorICAgICAgICBjbWQgPSBrdy5nZXQoJ2NvbW1hbmQnKQorICAgICAgICBpZiBjbWQgYW5kIG5vdCBpc2luc3RhbmNlKGNtZCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAjIGNhbGxiYWNrIG5vdCByZWdpc3RlcmVkIHlldCwgZG8gaXQgbm93CisgICAgICAgICAgICBrd1snY29tbWFuZCddID0gc2VsZi5tYXN0ZXIucmVnaXN0ZXIoY21kLCBzZWxmLl9zdWJzdGl0dXRlKQorCisgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCisKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl93LCAnaGVhZGluZycsIGNvbHVtbikKKworCisgICAgZGVmIGlkZW50aWZ5KHNlbGYsIGNvbXBvbmVudCwgeCwgeSk6CisgICAgICAgICIiIlJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCB1bmRlciB0aGUKKyAgICAgICAgcG9pbnQgZ2l2ZW4gYnkgeCBhbmQgeSwgb3IgdGhlIGVtcHR5IHN0cmluZyBpZiBubyBzdWNoIGNvbXBvbmVudAorICAgICAgICBpcyBwcmVzZW50IGF0IHRoYXQgcG9zaXRpb24uIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImlkZW50aWZ5IiwgY29tcG9uZW50LCB4LCB5KQorCisKKyAgICBkZWYgaWRlbnRpZnlfcm93KHNlbGYsIHkpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBpdGVtIElEIG9mIHRoZSBpdGVtIGF0IHBvc2l0aW9uIHkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmlkZW50aWZ5KCJyb3ciLCAwLCB5KQorCisKKyAgICBkZWYgaWRlbnRpZnlfY29sdW1uKHNlbGYsIHgpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBkYXRhIGNvbHVtbiBpZGVudGlmaWVyIG9mIHRoZSBjZWxsIGF0IHBvc2l0aW9uIHguCisKKyAgICAgICAgVGhlIHRyZWUgY29sdW1uIGhhcyBJRCAjMC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuaWRlbnRpZnkoImNvbHVtbiIsIHgsIDApCisKKworICAgIGRlZiBpZGVudGlmeV9yZWdpb24oc2VsZiwgeCwgeSk6CisgICAgICAgICIiIlJldHVybnMgb25lIG9mOgorCisgICAgICAgIGhlYWRpbmc6IFRyZWUgaGVhZGluZyBhcmVhLgorICAgICAgICBzZXBhcmF0b3I6IFNwYWNlIGJldHdlZW4gdHdvIGNvbHVtbnMgaGVhZGluZ3M7CisgICAgICAgIHRyZWU6IFRoZSB0cmVlIGFyZWEuCisgICAgICAgIGNlbGw6IEEgZGF0YSBjZWxsLgorCisgICAgICAgICogQXZhaWxhYmlsaXR5OiBUayA4LjYiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuaWRlbnRpZnkoInJlZ2lvbiIsIHgsIHkpCisKKworICAgIGRlZiBpZGVudGlmeV9lbGVtZW50KHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBlbGVtZW50IGF0IHBvc2l0aW9uIHgsIHkuCisKKyAgICAgICAgKiBBdmFpbGFiaWxpdHk6IFRrIDguNiIiIgorICAgICAgICByZXR1cm4gc2VsZi5pZGVudGlmeSgiZWxlbWVudCIsIHgsIHkpCisKKworICAgIGRlZiBpbmRleChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgaW50ZWdlciBpbmRleCBvZiBpdGVtIHdpdGhpbiBpdHMgcGFyZW50J3MgbGlzdAorICAgICAgICBvZiBjaGlsZHJlbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiaW5kZXgiLCBpdGVtKQorCisKKyAgICBkZWYgaW5zZXJ0KHNlbGYsIHBhcmVudCwgaW5kZXgsIGlpZD1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ3JlYXRlcyBhIG5ldyBpdGVtIGFuZCByZXR1cm4gdGhlIGl0ZW0gaWRlbnRpZmllciBvZiB0aGUgbmV3bHkKKyAgICAgICAgY3JlYXRlZCBpdGVtLgorCisgICAgICAgIHBhcmVudCBpcyB0aGUgaXRlbSBJRCBvZiB0aGUgcGFyZW50IGl0ZW0sIG9yIHRoZSBlbXB0eSBzdHJpbmcKKyAgICAgICAgdG8gY3JlYXRlIGEgbmV3IHRvcC1sZXZlbCBpdGVtLiBpbmRleCBpcyBhbiBpbnRlZ2VyLCBvciB0aGUgdmFsdWUKKyAgICAgICAgZW5kLCBzcGVjaWZ5aW5nIHdoZXJlIGluIHRoZSBsaXN0IG9mIHBhcmVudCdzIGNoaWxkcmVuIHRvIGluc2VydAorICAgICAgICB0aGUgbmV3IGl0ZW0uIElmIGluZGV4IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCB0aGUgbmV3IG5vZGUKKyAgICAgICAgaXMgaW5zZXJ0ZWQgYXQgdGhlIGJlZ2lubmluZywgaWYgaW5kZXggaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvCisgICAgICAgIHRoZSBjdXJyZW50IG51bWJlciBvZiBjaGlsZHJlbiwgaXQgaXMgaW5zZXJ0ZWQgYXQgdGhlIGVuZC4gSWYgaWlkCisgICAgICAgIGlzIHNwZWNpZmllZCwgaXQgaXMgdXNlZCBhcyB0aGUgaXRlbSBpZGVudGlmaWVyLCBpaWQgbXVzdCBub3QKKyAgICAgICAgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJlZS4gT3RoZXJ3aXNlLCBhIG5ldyB1bmlxdWUgaWRlbnRpZmllcgorICAgICAgICBpcyBnZW5lcmF0ZWQuIiIiCisgICAgICAgIG9wdHMgPSBfZm9ybWF0X29wdGRpY3Qoa3cpCisgICAgICAgIGlmIGlpZDoKKyAgICAgICAgICAgIHJlcyA9IHNlbGYudGsuY2FsbChzZWxmLl93LCAiaW5zZXJ0IiwgcGFyZW50LCBpbmRleCwKKyAgICAgICAgICAgICAgICAiLWlkIiwgaWlkLCAqb3B0cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcyA9IHNlbGYudGsuY2FsbChzZWxmLl93LCAiaW5zZXJ0IiwgcGFyZW50LCBpbmRleCwgKm9wdHMpCisKKyAgICAgICAgcmV0dXJuIHJlcworCisKKyAgICBkZWYgaXRlbShzZWxmLCBpdGVtLCBvcHRpb249Tm9uZSwgKiprdyk6CisgICAgICAgICIiIlF1ZXJ5IG9yIG1vZGlmeSB0aGUgb3B0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCBpdGVtLgorCisgICAgICAgIElmIG5vIG9wdGlvbnMgYXJlIGdpdmVuLCBhIGRpY3Qgd2l0aCBvcHRpb25zL3ZhbHVlcyBmb3IgdGhlIGl0ZW0KKyAgICAgICAgaXMgcmV0dXJuZWQuIElmIG9wdGlvbiBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgdmFsdWUgZm9yIHRoYXQgb3B0aW9uCisgICAgICAgIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIHNldHMgdGhlIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgdmFsdWVzIGFzIGdpdmVuIGJ5IGt3LiIiIgorICAgICAgICBpZiBvcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBrd1tvcHRpb25dID0gTm9uZQorICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KGt3LCBzZWxmLnRrLmNhbGwsIHNlbGYuX3csICJpdGVtIiwgaXRlbSkKKworCisgICAgZGVmIG1vdmUoc2VsZiwgaXRlbSwgcGFyZW50LCBpbmRleCk6CisgICAgICAgICIiIk1vdmVzIGl0ZW0gdG8gcG9zaXRpb24gaW5kZXggaW4gcGFyZW50J3MgbGlzdCBvZiBjaGlsZHJlbi4KKworICAgICAgICBJdCBpcyBpbGxlZ2FsIHRvIG1vdmUgYW4gaXRlbSB1bmRlciBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzLiBJZgorICAgICAgICBpbmRleCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXRlbSBpcyBtb3ZlZCB0byB0aGUKKyAgICAgICAgYmVnaW5uaW5nLCBpZiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBjaGlsZHJlbiwKKyAgICAgICAgaXQgaXMgbW92ZWQgdG8gdGhlIGVuZC4gSWYgaXRlbSB3YXMgZGV0YWNoZWQgaXQgaXMgcmVhdHRhY2hlZC4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJtb3ZlIiwgaXRlbSwgcGFyZW50LCBpbmRleCkKKworICAgIHJlYXR0YWNoID0gbW92ZSAjIEEgc2Vuc2libGUgbWV0aG9kIG5hbWUgZm9yIHJlYXR0YWNoaW5nIGRldGFjaGVkIGl0ZW1zCisKKworICAgIGRlZiBuZXh0KHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBpZGVudGlmaWVyIG9mIGl0ZW0ncyBuZXh0IHNpYmxpbmcsIG9yICcnIGlmIGl0ZW0KKyAgICAgICAgaXMgdGhlIGxhc3QgY2hpbGQgb2YgaXRzIHBhcmVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAibmV4dCIsIGl0ZW0pCisKKworICAgIGRlZiBwYXJlbnQoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIElEIG9mIHRoZSBwYXJlbnQgb2YgaXRlbSwgb3IgJycgaWYgaXRlbSBpcyBhdCB0aGUKKyAgICAgICAgdG9wIGxldmVsIG9mIHRoZSBoaWVyYXJjaHkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInBhcmVudCIsIGl0ZW0pCisKKworICAgIGRlZiBwcmV2KHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBpZGVudGlmaWVyIG9mIGl0ZW0ncyBwcmV2aW91cyBzaWJsaW5nLCBvciAnJyBpZgorICAgICAgICBpdGVtIGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFyZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJwcmV2IiwgaXRlbSkKKworCisgICAgZGVmIHNlZShzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiRW5zdXJlIHRoYXQgaXRlbSBpcyB2aXNpYmxlLgorCisgICAgICAgIFNldHMgYWxsIG9mIGl0ZW0ncyBhbmNlc3RvcnMgb3BlbiBvcHRpb24gdG8gVHJ1ZSwgYW5kIHNjcm9sbHMKKyAgICAgICAgdGhlIHdpZGdldCBpZiBuZWNlc3Nhcnkgc28gdGhhdCBpdGVtIGlzIHdpdGhpbiB0aGUgdmlzaWJsZQorICAgICAgICBwb3J0aW9uIG9mIHRoZSB0cmVlLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInNlZSIsIGl0ZW0pCisKKworICAgIGRlZiBzZWxlY3Rpb24oc2VsZiwgc2Vsb3A9Tm9uZSwgaXRlbXM9Tm9uZSk6CisgICAgICAgICIiIklmIHNlbG9wIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgc2VsZWN0ZWQgaXRlbXMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInNlbGVjdGlvbiIsIHNlbG9wLCBpdGVtcykKKworCisgICAgZGVmIHNlbGVjdGlvbl9zZXQoc2VsZiwgaXRlbXMpOgorICAgICAgICAiIiJpdGVtcyBiZWNvbWVzIHRoZSBuZXcgc2VsZWN0aW9uLiIiIgorICAgICAgICBzZWxmLnNlbGVjdGlvbigic2V0IiwgaXRlbXMpCisKKworICAgIGRlZiBzZWxlY3Rpb25fYWRkKHNlbGYsIGl0ZW1zKToKKyAgICAgICAgIiIiQWRkIGl0ZW1zIHRvIHRoZSBzZWxlY3Rpb24uIiIiCisgICAgICAgIHNlbGYuc2VsZWN0aW9uKCJhZGQiLCBpdGVtcykKKworCisgICAgZGVmIHNlbGVjdGlvbl9yZW1vdmUoc2VsZiwgaXRlbXMpOgorICAgICAgICAiIiJSZW1vdmUgaXRlbXMgZnJvbSB0aGUgc2VsZWN0aW9uLiIiIgorICAgICAgICBzZWxmLnNlbGVjdGlvbigicmVtb3ZlIiwgaXRlbXMpCisKKworICAgIGRlZiBzZWxlY3Rpb25fdG9nZ2xlKHNlbGYsIGl0ZW1zKToKKyAgICAgICAgIiIiVG9nZ2xlIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgZWFjaCBpdGVtIGluIGl0ZW1zLiIiIgorICAgICAgICBzZWxmLnNlbGVjdGlvbigidG9nZ2xlIiwgaXRlbXMpCisKKworICAgIGRlZiBzZXQoc2VsZiwgaXRlbSwgY29sdW1uPU5vbmUsIHZhbHVlPU5vbmUpOgorICAgICAgICAiIiJXaXRoIG9uZSBhcmd1bWVudCwgcmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgY29sdW1uL3ZhbHVlIHBhaXJzCisgICAgICAgIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0uIFdpdGggdHdvIGFyZ3VtZW50cywgcmV0dXJucyB0aGUgY3VycmVudAorICAgICAgICB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGNvbHVtbi4gV2l0aCB0aHJlZSBhcmd1bWVudHMsIHNldHMgdGhlCisgICAgICAgIHZhbHVlIG9mIGdpdmVuIGNvbHVtbiBpbiBnaXZlbiBpdGVtIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuIiIiCisgICAgICAgIHJlcyA9IHNlbGYudGsuY2FsbChzZWxmLl93LCAic2V0IiwgaXRlbSwgY29sdW1uLCB2YWx1ZSkKKyAgICAgICAgaWYgY29sdW1uIGlzIE5vbmUgYW5kIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gX2RpY3RfZnJvbV90Y2x0dXBsZShyZXMsIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHJlcworCisKKyAgICBkZWYgdGFnX2JpbmQoc2VsZiwgdGFnbmFtZSwgc2VxdWVuY2U9Tm9uZSwgY2FsbGJhY2s9Tm9uZSk6CisgICAgICAgICIiIkJpbmQgYSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIGV2ZW50IHNlcXVlbmNlIHRvIHRoZSB0YWcgdGFnbmFtZS4KKyAgICAgICAgV2hlbiBhbiBldmVudCBpcyBkZWxpdmVyZWQgdG8gYW4gaXRlbSwgdGhlIGNhbGxiYWNrcyBmb3IgZWFjaAorICAgICAgICBvZiB0aGUgaXRlbSdzIHRhZ3Mgb3B0aW9uIGFyZSBjYWxsZWQuIiIiCisgICAgICAgIHNlbGYuX2JpbmQoKHNlbGYuX3csICJ0YWciLCAiYmluZCIsIHRhZ25hbWUpLCBzZXF1ZW5jZSwgY2FsbGJhY2ssIGFkZD0wKQorCisKKyAgICBkZWYgdGFnX2NvbmZpZ3VyZShzZWxmLCB0YWduYW1lLCBvcHRpb249Tm9uZSwgKiprdyk6CisgICAgICAgICIiIlF1ZXJ5IG9yIG1vZGlmeSB0aGUgb3B0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCB0YWduYW1lLgorCisgICAgICAgIElmIGt3IGlzIG5vdCBnaXZlbiwgcmV0dXJucyBhIGRpY3Qgb2YgdGhlIG9wdGlvbiBzZXR0aW5ncyBmb3IgdGFnbmFtZS4KKyAgICAgICAgSWYgb3B0aW9uIGlzIHNwZWNpZmllZCwgcmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoYXQgb3B0aW9uIGZvciB0aGUKKyAgICAgICAgc3BlY2lmaWVkIHRhZ25hbWUuIE90aGVyd2lzZSwgc2V0cyB0aGUgb3B0aW9ucyB0byB0aGUgY29ycmVzcG9uZGluZworICAgICAgICB2YWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWduYW1lLiIiIgorICAgICAgICBpZiBvcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBrd1tvcHRpb25dID0gTm9uZQorICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KGt3LCBzZWxmLnRrLmNhbGwsIHNlbGYuX3csICJ0YWciLCAiY29uZmlndXJlIiwKKyAgICAgICAgICAgIHRhZ25hbWUpCisKKworICAgIGRlZiB0YWdfaGFzKHNlbGYsIHRhZ25hbWUsIGl0ZW09Tm9uZSk6CisgICAgICAgICIiIklmIGl0ZW0gaXMgc3BlY2lmaWVkLCByZXR1cm5zIDEgb3IgMCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKKyAgICAgICAgc3BlY2lmaWVkIGl0ZW0gaGFzIHRoZSBnaXZlbiB0YWduYW1lLiBPdGhlcndpc2UsIHJldHVybnMgYSBsaXN0IG9mCisgICAgICAgIGFsbCBpdGVtcyB3aGljaCBoYXZlIHRoZSBzcGVjaWZpZWQgdGFnLgorCisgICAgICAgICogQXZhaWxhYmlsaXR5OiBUayA4LjYiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAidGFnIiwgImhhcyIsIHRhZ25hbWUsIGl0ZW0pCisKKworIyBFeHRlbnNpb25zCisKK2NsYXNzIExhYmVsZWRTY2FsZShGcmFtZSwgb2JqZWN0KToKKyAgICAiIiJBIFR0ayBTY2FsZSB3aWRnZXQgd2l0aCBhIFR0ayBMYWJlbCB3aWRnZXQgaW5kaWNhdGluZyBpdHMKKyAgICBjdXJyZW50IHZhbHVlLgorCisgICAgVGhlIFR0ayBTY2FsZSBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBpbnN0YW5jZS5zY2FsZSwgYW5kIFR0ayBMYWJlbAorICAgIGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIGluc3RhbmNlLmxhYmVsIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIHZhcmlhYmxlPU5vbmUsIGZyb21fPTAsIHRvPTEwLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGhvcml6b250YWwgTGFiZWxlZFNjYWxlIHdpdGggcGFyZW50IG1hc3RlciwgYQorICAgICAgICB2YXJpYWJsZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFR0ayBTY2FsZSB3aWRnZXQgYW5kIGl0cyByYW5nZS4KKyAgICAgICAgSWYgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgYSBUa2ludGVyLkludFZhciBpcyBjcmVhdGVkLgorCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIGNvbXBvdW5kOiAndG9wJyBvciAnYm90dG9tJworICAgICAgICAgICAgICAgIFNwZWNpZmllcyBob3cgdG8gZGlzcGxheSB0aGUgbGFiZWwgcmVsYXRpdmUgdG8gdGhlIHNjYWxlLgorICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvICd0b3AnLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fbGFiZWxfdG9wID0ga3cucG9wKCdjb21wb3VuZCcsICd0b3AnKSA9PSAndG9wJworCisgICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlciwgKiprdykKKyAgICAgICAgc2VsZi5fdmFyaWFibGUgPSB2YXJpYWJsZSBvciBUa2ludGVyLkludFZhcihtYXN0ZXIpCisgICAgICAgIHNlbGYuX3ZhcmlhYmxlLnNldChmcm9tXykKKyAgICAgICAgc2VsZi5fbGFzdF92YWxpZCA9IGZyb21fCisKKyAgICAgICAgc2VsZi5sYWJlbCA9IExhYmVsKHNlbGYpCisgICAgICAgIHNlbGYuc2NhbGUgPSBTY2FsZShzZWxmLCB2YXJpYWJsZT1zZWxmLl92YXJpYWJsZSwgZnJvbV89ZnJvbV8sIHRvPXRvKQorICAgICAgICBzZWxmLnNjYWxlLmJpbmQoJzw8UmFuZ2VDaGFuZ2VkPj4nLCBzZWxmLl9hZGp1c3QpCisKKyAgICAgICAgIyBwb3NpdGlvbiBzY2FsZSBhbmQgbGFiZWwgYWNjb3JkaW5nIHRvIHRoZSBjb21wb3VuZCBvcHRpb24KKyAgICAgICAgc2NhbGVfc2lkZSA9ICdib3R0b20nIGlmIHNlbGYuX2xhYmVsX3RvcCBlbHNlICd0b3AnCisgICAgICAgIGxhYmVsX3NpZGUgPSAndG9wJyBpZiBzY2FsZV9zaWRlID09ICdib3R0b20nIGVsc2UgJ2JvdHRvbScKKyAgICAgICAgc2VsZi5zY2FsZS5wYWNrKHNpZGU9c2NhbGVfc2lkZSwgZmlsbD0neCcpCisgICAgICAgIHRtcCA9IExhYmVsKHNlbGYpLnBhY2soc2lkZT1sYWJlbF9zaWRlKSAjIHBsYWNlIGhvbGRlcgorICAgICAgICBzZWxmLmxhYmVsLnBsYWNlKGFuY2hvcj0nbicgaWYgbGFiZWxfc2lkZSA9PSAndG9wJyBlbHNlICdzJykKKworICAgICAgICAjIHVwZGF0ZSB0aGUgbGFiZWwgYXMgc2NhbGUgb3IgdmFyaWFibGUgY2hhbmdlcworICAgICAgICBzZWxmLl9fdHJhY2VjYiA9IHNlbGYuX3ZhcmlhYmxlLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5fYWRqdXN0KQorICAgICAgICBzZWxmLmJpbmQoJzxDb25maWd1cmU+Jywgc2VsZi5fYWRqdXN0KQorICAgICAgICBzZWxmLmJpbmQoJzxNYXA+Jywgc2VsZi5fYWRqdXN0KQorCisKKyAgICBkZWYgZGVzdHJveShzZWxmKToKKyAgICAgICAgIiIiRGVzdHJveSB0aGlzIHdpZGdldCBhbmQgcG9zc2libHkgaXRzIGFzc29jaWF0ZWQgdmFyaWFibGUuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3ZhcmlhYmxlLnRyYWNlX3ZkZWxldGUoJ3cnLCBzZWxmLl9fdHJhY2VjYikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyB3aWRnZXQgaGFzIGJlZW4gZGVzdHJveWVkIGFscmVhZHkKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlbCBzZWxmLl92YXJpYWJsZQorICAgICAgICAgICAgRnJhbWUuZGVzdHJveShzZWxmKQorCisKKyAgICBkZWYgX2FkanVzdChzZWxmLCAqYXJncyk6CisgICAgICAgICIiIkFkanVzdCB0aGUgbGFiZWwgcG9zaXRpb24gYWNjb3JkaW5nIHRvIHRoZSBzY2FsZS4iIiIKKyAgICAgICAgZGVmIGFkanVzdF9sYWJlbCgpOgorICAgICAgICAgICAgc2VsZi51cGRhdGVfaWRsZXRhc2tzKCkgIyAiZm9yY2UiIHNjYWxlIHJlZHJhdworCisgICAgICAgICAgICB4LCB5ID0gc2VsZi5zY2FsZS5jb29yZHMoKQorICAgICAgICAgICAgaWYgc2VsZi5fbGFiZWxfdG9wOgorICAgICAgICAgICAgICAgIHkgPSBzZWxmLnNjYWxlLndpbmZvX3koKSAtIHNlbGYubGFiZWwud2luZm9fcmVxaGVpZ2h0KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeSA9IHNlbGYuc2NhbGUud2luZm9fcmVxaGVpZ2h0KCkgKyBzZWxmLmxhYmVsLndpbmZvX3JlcWhlaWdodCgpCisKKyAgICAgICAgICAgIHNlbGYubGFiZWwucGxhY2VfY29uZmlndXJlKHg9eCwgeT15KQorCisgICAgICAgIGZyb21fLCB0byA9IHNlbGYuc2NhbGVbJ2Zyb20nXSwgc2VsZi5zY2FsZVsndG8nXQorICAgICAgICBpZiB0byA8IGZyb21fOgorICAgICAgICAgICAgZnJvbV8sIHRvID0gdG8sIGZyb21fCisgICAgICAgIG5ld3ZhbCA9IHNlbGYuX3ZhcmlhYmxlLmdldCgpCisgICAgICAgIGlmIG5vdCBmcm9tXyA8PSBuZXd2YWwgPD0gdG86CisgICAgICAgICAgICAjIHZhbHVlIG91dHNpZGUgcmFuZ2UsIHNldCB2YWx1ZSBiYWNrIHRvIHRoZSBsYXN0IHZhbGlkIG9uZQorICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHNlbGYuX2xhc3RfdmFsaWQKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2xhc3RfdmFsaWQgPSBuZXd2YWwKKyAgICAgICAgc2VsZi5sYWJlbFsndGV4dCddID0gbmV3dmFsCisgICAgICAgIHNlbGYuYWZ0ZXJfaWRsZShhZGp1c3RfbGFiZWwpCisKKworICAgIGRlZiBfZ2V0X3ZhbHVlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gY3VycmVudCBzY2FsZSB2YWx1ZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZhcmlhYmxlLmdldCgpCisKKworICAgIGRlZiBfc2V0X3ZhbHVlKHNlbGYsIHZhbCk6CisgICAgICAgICIiIlNldCBuZXcgc2NhbGUgdmFsdWUuIiIiCisgICAgICAgIHNlbGYuX3ZhcmlhYmxlLnNldCh2YWwpCisKKworICAgIHZhbHVlID0gcHJvcGVydHkoX2dldF92YWx1ZSwgX3NldF92YWx1ZSkKKworCitjbGFzcyBPcHRpb25NZW51KE1lbnVidXR0b24pOgorICAgICIiIlRoZW1lZCBPcHRpb25NZW51LCBiYXNlZCBhZnRlciBUa2ludGVyJ3MgT3B0aW9uTWVudSwgd2hpY2ggYWxsb3dzCisgICAgdGhlIHVzZXIgdG8gc2VsZWN0IGEgdmFsdWUgZnJvbSBhIG1lbnUuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyLCB2YXJpYWJsZSwgZGVmYXVsdD1Ob25lLCAqdmFsdWVzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIHRoZW1lZCBPcHRpb25NZW51IHdpZGdldCB3aXRoIG1hc3RlciBhcyB0aGUgcGFyZW50LAorICAgICAgICB0aGUgcmVzb3VyY2UgdGV4dHZhcmlhYmxlIHNldCB0byB2YXJpYWJsZSwgdGhlIGluaXRpYWxseSBzZWxlY3RlZAorICAgICAgICB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGRlZmF1bHQgcGFyYW1ldGVyLCB0aGUgbWVudSB2YWx1ZXMgZ2l2ZW4gYnkKKyAgICAgICAgKnZhbHVlcyBhbmQgYWRkaXRpb25hbCBrZXl3b3Jkcy4KKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBzdHlsZTogc3R5bGVuYW1lCisgICAgICAgICAgICAgICAgTWVudWJ1dHRvbiBzdHlsZS4KKyAgICAgICAgICAgIGRpcmVjdGlvbjogJ2Fib3ZlJywgJ2JlbG93JywgJ2xlZnQnLCAncmlnaHQnLCBvciAnZmx1c2gnCisgICAgICAgICAgICAgICAgTWVudWJ1dHRvbiBkaXJlY3Rpb24uCisgICAgICAgICAgICBjb21tYW5kOiBjYWxsYmFjaworICAgICAgICAgICAgICAgIEEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGludm9rZWQgYWZ0ZXIgc2VsZWN0aW5nIGFuIGl0ZW0uCisgICAgICAgICIiIgorICAgICAgICBrdyA9IHsndGV4dHZhcmlhYmxlJzogdmFyaWFibGUsICdzdHlsZSc6IGt3YXJncy5wb3AoJ3N0eWxlJywgTm9uZSksCisgICAgICAgICAgICAgICdkaXJlY3Rpb24nOiBrd2FyZ3MucG9wKCdkaXJlY3Rpb24nLCBOb25lKX0KKyAgICAgICAgTWVudWJ1dHRvbi5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICoqa3cpCisgICAgICAgIHNlbGZbJ21lbnUnXSA9IFRraW50ZXIuTWVudShzZWxmLCB0ZWFyb2ZmPUZhbHNlKQorCisgICAgICAgIHNlbGYuX3ZhcmlhYmxlID0gdmFyaWFibGUKKyAgICAgICAgc2VsZi5fY2FsbGJhY2sgPSBrd2FyZ3MucG9wKCdjb21tYW5kJywgTm9uZSkKKyAgICAgICAgaWYga3dhcmdzOgorICAgICAgICAgICAgcmFpc2UgVGtpbnRlci5UY2xFcnJvcigndW5rbm93biBvcHRpb24gLSVzJyAlICgKKyAgICAgICAgICAgICAgICBrd2FyZ3MuaXRlcmtleXMoKS5uZXh0KCkpKQorCisgICAgICAgIHNlbGYuc2V0X21lbnUoZGVmYXVsdCwgKnZhbHVlcykKKworCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGl0ZW0pOgorICAgICAgICBpZiBpdGVtID09ICdtZW51JzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWV0b3dpZGdldChNZW51YnV0dG9uLl9fZ2V0aXRlbV9fKHNlbGYsIGl0ZW0pKQorCisgICAgICAgIHJldHVybiBNZW51YnV0dG9uLl9fZ2V0aXRlbV9fKHNlbGYsIGl0ZW0pCisKKworICAgIGRlZiBzZXRfbWVudShzZWxmLCBkZWZhdWx0PU5vbmUsICp2YWx1ZXMpOgorICAgICAgICAiIiJCdWlsZCBhIG5ldyBtZW51IG9mIHJhZGlvYnV0dG9ucyB3aXRoICp2YWx1ZXMgYW5kIG9wdGlvbmFsbHkKKyAgICAgICAgYSBkZWZhdWx0IHZhbHVlLiIiIgorICAgICAgICBtZW51ID0gc2VsZlsnbWVudSddCisgICAgICAgIG1lbnUuZGVsZXRlKDAsICdlbmQnKQorICAgICAgICBmb3IgdmFsIGluIHZhbHVlczoKKyAgICAgICAgICAgIG1lbnUuYWRkX3JhZGlvYnV0dG9uKGxhYmVsPXZhbCwKKyAgICAgICAgICAgICAgICBjb21tYW5kPVRraW50ZXIuX3NldGl0KHNlbGYuX3ZhcmlhYmxlLCB2YWwsIHNlbGYuX2NhbGxiYWNrKSkKKworICAgICAgICBpZiBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi5fdmFyaWFibGUuc2V0KGRlZmF1bHQpCisKKworICAgIGRlZiBkZXN0cm95KHNlbGYpOgorICAgICAgICAiIiJEZXN0cm95IHRoaXMgd2lkZ2V0IGFuZCBpdHMgYXNzb2NpYXRlZCB2YXJpYWJsZS4iIiIKKyAgICAgICAgZGVsIHNlbGYuX3ZhcmlhYmxlCisgICAgICAgIE1lbnVidXR0b24uZGVzdHJveShzZWxmKQpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90dXJ0bGUucHkgYi9MaWIvbGliLXRrL3R1cnRsZS5weQppbmRleCA3NjcwMTIwLi4yM2U0MDdkIDEwMDY0NAotLS0gYS9MaWIvbGliLXRrL3R1cnRsZS5weQorKysgYi9MaWIvbGliLXRrL3R1cnRsZS5weQpAQCAtMzM1LDEwICszMzUsMTAgQEAKICAgICAgICAgaWYgZXhbOjFdID09ICdfJyBvciBleFstMTpdID09ICdfJzoKICAgICAgICAgICAgIGRlbCBfZGljdFtleF0KICAgICBmb3IgZXggaW4gZXhjbHVkZToKLSAgICAgICAgaWYgX2RpY3QuaGFzX2tleShleCk6CisgICAgICAgIGlmIGV4IGluIF9kaWN0OgogICAgICAgICAgICAgZGVsIF9kaWN0W2V4XQogICAgIGZvciBleCBpbiBfX21ldGhvZHMoZnJvbUNsYXNzKToKLSAgICAgICAgaWYgX2RpY3QuaGFzX2tleShleCk6CisgICAgICAgIGlmIGV4IGluIF9kaWN0OgogICAgICAgICAgICAgZGVsIF9kaWN0W2V4XQogCiAgICAgZm9yIG1ldGhvZCwgZnVuYyBpbiBfZGljdC5pdGVtcygpOgpAQCAtMTQ5NSw3ICsxNDk1LDEwIEBACiAgICAgICAgID4+PiB0dXJ0bGUubGVmdCg5MCkKICAgICAgICAgPj4+IHR1cnRsZS5oZWFkaW5nKCkKICAgICAgICAgOTAKLSAgICAgICAgPj4+IHR1cnRsZS5kZWdyZWVzKDQwMC4wKSAgIyBhbmdsZSBtZWFzdXJlbWVudCBpbiBnb24KKworICAgICAgICBDaGFuZ2UgYW5nbGUgbWVhc3VyZW1lbnQgdW5pdCB0byBncmFkIChhbHNvIGtub3duIGFzIGdvbiwKKyAgICAgICAgZ3JhZGUsIG9yIGdyYWRpYW4gYW5kIGVxdWFscyAxLzEwMC10aCBvZiB0aGUgcmlnaHQgYW5nbGUuKQorICAgICAgICA+Pj4gdHVydGxlLmRlZ3JlZXMoNDAwLjApCiAgICAgICAgID4+PiB0dXJ0bGUuaGVhZGluZygpCiAgICAgICAgIDEwMAogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9HcmFtbWFyLnR4dCBiL0xpYi9saWIydG8zL0dyYW1tYXIudHh0CmluZGV4IGJlMDM0ZTEuLjhhOTY3MjYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL0dyYW1tYXIudHh0CisrKyBiL0xpYi9saWIydG8zL0dyYW1tYXIudHh0CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAnYCcgdGVzdGxpc3QxICdgJyB8CiAgICAgICAgTkFNRSB8IE5VTUJFUiB8IFNUUklORysgfCAnLicgJy4nICcuJykKIGxpc3RtYWtlcjogKHRlc3R8c3Rhcl9leHByKSAoIGNvbXBfZm9yIHwgKCcsJyAodGVzdHxzdGFyX2V4cHIpKSogWycsJ10gKQotdGVzdGxpc3RfZ2V4cDogdGVzdCAoIGNvbXBfZm9yIHwgKCcsJyAodGVzdHxzdGFyX2V4cHIpKSogWycsJ10gKQordGVzdGxpc3RfZ2V4cDogKHRlc3R8c3Rhcl9leHByKSAoIGNvbXBfZm9yIHwgKCcsJyAodGVzdHxzdGFyX2V4cHIpKSogWycsJ10gKQogbGFtYmRlZjogJ2xhbWJkYScgW3ZhcmFyZ3NsaXN0XSAnOicgdGVzdAogdHJhaWxlcjogJygnIFthcmdsaXN0XSAnKScgfCAnWycgc3Vic2NyaXB0bGlzdCAnXScgfCAnLicgTkFNRQogc3Vic2NyaXB0bGlzdDogc3Vic2NyaXB0ICgnLCcgc3Vic2NyaXB0KSogWycsJ10KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL19fbWFpbl9fLnB5IGIvTGliL2xpYjJ0bzMvX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA2ODhiYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWIydG8zL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAoraW1wb3J0IHN5cworZnJvbSAubWFpbiBpbXBvcnQgbWFpbgorCitzeXMuZXhpdChtYWluKCJsaWIydG8zLmZpeGVzIikpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9idG1fbWF0Y2hlci5weSBiL0xpYi9saWIydG8zL2J0bV9tYXRjaGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNmJhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9idG1fbWF0Y2hlci5weQpAQCAtMCwwICsxLDE2OCBAQAorIiIiQSBib3R0b20tdXAgdHJlZSBtYXRjaGluZyBhbGdvcml0aG0gaW1wbGVtZW50YXRpb24gbWVhbnQgdG8gc3BlZWQKK3VwIDJ0bzMncyBtYXRjaGluZyBwcm9jZXNzLiBBZnRlciB0aGUgdHJlZSBwYXR0ZXJucyBhcmUgcmVkdWNlZCB0bwordGhlaXIgcmFyZXN0IGxpbmVhciBwYXRoLCBhIGxpbmVhciBBaG8tQ29yYXNpY2sgYXV0b21hdG9uIGlzCitjcmVhdGVkLiBUaGUgbGluZWFyIGF1dG9tYXRvbiB0cmF2ZXJzZXMgdGhlIGxpbmVhciBwYXRocyBmcm9tIHRoZQorbGVhdmVzIHRvIHRoZSByb290IG9mIHRoZSBBU1QgYW5kIHJldHVybnMgYSBzZXQgb2Ygbm9kZXMgZm9yIGZ1cnRoZXIKK21hdGNoaW5nLiBUaGlzIHJlZHVjZXMgc2lnbmlmaWNhbnRseSB0aGUgbnVtYmVyIG9mIGNhbmRpZGF0ZSBub2Rlcy4iIiIKKworX19hdXRob3JfXyA9ICJHZW9yZ2UgQm91dHNpb3VraXMgPGdib3V0c2lvdWtpc0BnbWFpbC5jb20+IgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGl0ZXJ0b29scworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKKworZnJvbSAuIGltcG9ydCBweXRyZWUKK2Zyb20gLmJ0bV91dGlscyBpbXBvcnQgcmVkdWNlX3RyZWUKKworY2xhc3MgQk1Ob2RlKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgZm9yIGEgbm9kZSBvZiB0aGUgQWhvLUNvcmFzaWNrIGF1dG9tYXRvbiB1c2VkIGluIG1hdGNoaW5nIiIiCisgICAgY291bnQgPSBpdGVydG9vbHMuY291bnQoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi50cmFuc2l0aW9uX3RhYmxlID0ge30KKyAgICAgICAgc2VsZi5maXhlcnMgPSBbXQorICAgICAgICBzZWxmLmlkID0gbmV4dChCTU5vZGUuY291bnQpCisgICAgICAgIHNlbGYuY29udGVudCA9ICcnCisKK2NsYXNzIEJvdHRvbU1hdGNoZXIob2JqZWN0KToKKyAgICAiIiJUaGUgbWFpbiBtYXRjaGVyIGNsYXNzLiBBZnRlciBpbnN0YW50aWF0aW5nIHRoZSBwYXR0ZXJucyBzaG91bGQKKyAgICBiZSBhZGRlZCB1c2luZyB0aGUgYWRkX2ZpeGVyIG1ldGhvZCIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLm1hdGNoID0gc2V0KCkKKyAgICAgICAgc2VsZi5yb290ID0gQk1Ob2RlKCkKKyAgICAgICAgc2VsZi5ub2RlcyA9IFtzZWxmLnJvb3RdCisgICAgICAgIHNlbGYuZml4ZXJzID0gW10KKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiUmVmYWN0b3JpbmdUb29sIikKKworICAgIGRlZiBhZGRfZml4ZXIoc2VsZiwgZml4ZXIpOgorICAgICAgICAiIiJSZWR1Y2VzIGEgZml4ZXIncyBwYXR0ZXJuIHRyZWUgdG8gYSBsaW5lYXIgcGF0aCBhbmQgYWRkcyBpdAorICAgICAgICB0byB0aGUgbWF0Y2hlcihhIGNvbW1vbiBBaG8tQ29yYXNpY2sgYXV0b21hdG9uKS4gVGhlIGZpeGVyIGlzCisgICAgICAgIGFwcGVuZGVkIG9uIHRoZSBtYXRjaGluZyBzdGF0ZXMgYW5kIGNhbGxlZCB3aGVuIHRoZXkgYXJlCisgICAgICAgIHJlYWNoZWQiIiIKKyAgICAgICAgc2VsZi5maXhlcnMuYXBwZW5kKGZpeGVyKQorICAgICAgICB0cmVlID0gcmVkdWNlX3RyZWUoZml4ZXIucGF0dGVybl90cmVlKQorICAgICAgICBsaW5lYXIgPSB0cmVlLmdldF9saW5lYXJfc3VicGF0dGVybigpCisgICAgICAgIG1hdGNoX25vZGVzID0gc2VsZi5hZGQobGluZWFyLCBzdGFydD1zZWxmLnJvb3QpCisgICAgICAgIGZvciBtYXRjaF9ub2RlIGluIG1hdGNoX25vZGVzOgorICAgICAgICAgICAgbWF0Y2hfbm9kZS5maXhlcnMuYXBwZW5kKGZpeGVyKQorCisgICAgZGVmIGFkZChzZWxmLCBwYXR0ZXJuLCBzdGFydCk6CisgICAgICAgICJSZWN1cnNpdmVseSBhZGRzIGEgbGluZWFyIHBhdHRlcm4gdG8gdGhlIEFDIGF1dG9tYXRvbiIKKyAgICAgICAgI3ByaW50KCJhZGRpbmcgcGF0dGVybiIsIHBhdHRlcm4sICJ0byIsIHN0YXJ0KQorICAgICAgICBpZiBub3QgcGF0dGVybjoKKyAgICAgICAgICAgICNwcmludCgiZW1wdHkgcGF0dGVybiIpCisgICAgICAgICAgICByZXR1cm4gW3N0YXJ0XQorICAgICAgICBpZiBpc2luc3RhbmNlKHBhdHRlcm5bMF0sIHR1cGxlKToKKyAgICAgICAgICAgICNhbHRlcm5hdGl2ZXMKKyAgICAgICAgICAgICNwcmludCgiYWx0ZXJuYXRpdmVzIikKKyAgICAgICAgICAgIG1hdGNoX25vZGVzID0gW10KKyAgICAgICAgICAgIGZvciBhbHRlcm5hdGl2ZSBpbiBwYXR0ZXJuWzBdOgorICAgICAgICAgICAgICAgICNhZGQgYWxsIGFsdGVybmF0aXZlcywgYW5kIGFkZCB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybgorICAgICAgICAgICAgICAgICN0byBlYWNoIGVuZCBub2RlCisgICAgICAgICAgICAgICAgZW5kX25vZGVzID0gc2VsZi5hZGQoYWx0ZXJuYXRpdmUsIHN0YXJ0PXN0YXJ0KQorICAgICAgICAgICAgICAgIGZvciBlbmQgaW4gZW5kX25vZGVzOgorICAgICAgICAgICAgICAgICAgICBtYXRjaF9ub2Rlcy5leHRlbmQoc2VsZi5hZGQocGF0dGVyblsxOl0sIGVuZCkpCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hfbm9kZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNzaW5nbGUgdG9rZW4KKyAgICAgICAgICAgICNub3QgbGFzdAorICAgICAgICAgICAgaWYgcGF0dGVyblswXSBub3QgaW4gc3RhcnQudHJhbnNpdGlvbl90YWJsZToKKyAgICAgICAgICAgICAgICAjdHJhbnNpdGlvbiBkaWQgbm90IGV4aXN0LCBjcmVhdGUgbmV3CisgICAgICAgICAgICAgICAgbmV4dF9ub2RlID0gQk1Ob2RlKCkKKyAgICAgICAgICAgICAgICBzdGFydC50cmFuc2l0aW9uX3RhYmxlW3BhdHRlcm5bMF1dID0gbmV4dF9ub2RlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICN0cmFuc2l0aW9uIGV4aXN0cyBhbHJlYWR5LCBmb2xsb3cKKyAgICAgICAgICAgICAgICBuZXh0X25vZGUgPSBzdGFydC50cmFuc2l0aW9uX3RhYmxlW3BhdHRlcm5bMF1dCisKKyAgICAgICAgICAgIGlmIHBhdHRlcm5bMTpdOgorICAgICAgICAgICAgICAgIGVuZF9ub2RlcyA9IHNlbGYuYWRkKHBhdHRlcm5bMTpdLCBzdGFydD1uZXh0X25vZGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVuZF9ub2RlcyA9IFtuZXh0X25vZGVdCisgICAgICAgICAgICByZXR1cm4gZW5kX25vZGVzCisKKyAgICBkZWYgcnVuKHNlbGYsIGxlYXZlcyk6CisgICAgICAgICIiIlRoZSBtYWluIGludGVyZmFjZSB3aXRoIHRoZSBib3R0b20gbWF0Y2hlci4gVGhlIHRyZWUgaXMKKyAgICAgICAgdHJhdmVyc2VkIGZyb20gdGhlIGJvdHRvbSB1c2luZyB0aGUgY29uc3RydWN0ZWQKKyAgICAgICAgYXV0b21hdG9uLiBOb2RlcyBhcmUgb25seSBjaGVja2VkIG9uY2UgYXMgdGhlIHRyZWUgaXMKKyAgICAgICAgcmV0cmF2ZXJzZWQuIFdoZW4gdGhlIGF1dG9tYXRvbiBmYWlscywgd2UgZ2l2ZSBpdCBvbmUgbW9yZQorICAgICAgICBzaG90KGluIGNhc2UgdGhlIGFib3ZlIHRyZWUgbWF0Y2hlcyBhcyBhIHdob2xlIHdpdGggdGhlCisgICAgICAgIHJlamVjdGVkIGxlYWYpLCB0aGVuIHdlIGJyZWFrIGZvciB0aGUgbmV4dCBsZWFmLiBUaGVyZSBpcyB0aGUKKyAgICAgICAgc3BlY2lhbCBjYXNlIG9mIG11bHRpcGxlIGFyZ3VtZW50cyhzZWUgY29kZSBjb21tZW50cykgd2hlcmUgd2UKKyAgICAgICAgcmVjaGVjayB0aGUgbm9kZXMKKworICAgICAgICBBcmdzOgorICAgICAgICAgICBUaGUgbGVhdmVzIG9mIHRoZSBBU1QgdHJlZSB0byBiZSBtYXRjaGVkCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgQSBkaWN0aW9uYXJ5IG9mIG5vZGUgbWF0Y2hlcyB3aXRoIGZpeGVycyBhcyB0aGUga2V5cworICAgICAgICAiIiIKKyAgICAgICAgY3VycmVudF9hY19ub2RlID0gc2VsZi5yb290CisgICAgICAgIHJlc3VsdHMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBmb3IgbGVhZiBpbiBsZWF2ZXM6CisgICAgICAgICAgICBjdXJyZW50X2FzdF9ub2RlID0gbGVhZgorICAgICAgICAgICAgd2hpbGUgY3VycmVudF9hc3Rfbm9kZToKKyAgICAgICAgICAgICAgICBjdXJyZW50X2FzdF9ub2RlLndhc19jaGVja2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiBjdXJyZW50X2FzdF9ub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgICAgICAgICAjIG11bHRpcGxlIHN0YXRlbWVudHMsIHJlY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgcHl0cmVlLkxlYWYpIGFuZCBjaGlsZC52YWx1ZSA9PSB1IjsiOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9hc3Rfbm9kZS53YXNfY2hlY2tlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGN1cnJlbnRfYXN0X25vZGUudHlwZSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAjbmFtZQorICAgICAgICAgICAgICAgICAgICBub2RlX3Rva2VuID0gY3VycmVudF9hc3Rfbm9kZS52YWx1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5vZGVfdG9rZW4gPSBjdXJyZW50X2FzdF9ub2RlLnR5cGUKKworICAgICAgICAgICAgICAgIGlmIG5vZGVfdG9rZW4gaW4gY3VycmVudF9hY19ub2RlLnRyYW5zaXRpb25fdGFibGU6CisgICAgICAgICAgICAgICAgICAgICN0b2tlbiBtYXRjaGVzCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfYWNfbm9kZSA9IGN1cnJlbnRfYWNfbm9kZS50cmFuc2l0aW9uX3RhYmxlW25vZGVfdG9rZW5dCisgICAgICAgICAgICAgICAgICAgIGZvciBmaXhlciBpbiBjdXJyZW50X2FjX25vZGUuZml4ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpeGVyIGluIHJlc3VsdHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1tmaXhlcl0gPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1tmaXhlcl0uYXBwZW5kKGN1cnJlbnRfYXN0X25vZGUpCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjbWF0Y2hpbmcgZmFpbGVkLCByZXNldCBhdXRvbWF0b24KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF9hY19ub2RlID0gc2VsZi5yb290CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50X2FzdF9ub2RlLnBhcmVudCBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGN1cnJlbnRfYXN0X25vZGUucGFyZW50Lndhc19jaGVja2VkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICN0aGUgcmVzdCBvZiB0aGUgdHJlZSB1cHdhcmRzIGhhcyBiZWVuIGNoZWNrZWQsIG5leHQgbGVhZgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICAgICAjcmVjaGVjayB0aGUgcmVqZWN0ZWQgbm9kZSBvbmNlIGZyb20gdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgaWYgbm9kZV90b2tlbiBpbiBjdXJyZW50X2FjX25vZGUudHJhbnNpdGlvbl90YWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICN0b2tlbiBtYXRjaGVzCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2FjX25vZGUgPSBjdXJyZW50X2FjX25vZGUudHJhbnNpdGlvbl90YWJsZVtub2RlX3Rva2VuXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpeGVyIGluIGN1cnJlbnRfYWNfbm9kZS5maXhlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpeGVyIGluIHJlc3VsdHMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2ZpeGVyXSA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1tmaXhlcl0uYXBwZW5kKGN1cnJlbnRfYXN0X25vZGUpCisKKyAgICAgICAgICAgICAgICBjdXJyZW50X2FzdF9ub2RlID0gY3VycmVudF9hc3Rfbm9kZS5wYXJlbnQKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgIGRlZiBwcmludF9hYyhzZWxmKToKKyAgICAgICAgIlByaW50cyBhIGdyYXBodml6IGRpYWdyYW0gb2YgdGhlIEJNIGF1dG9tYXRvbihmb3IgZGVidWdnaW5nKSIKKyAgICAgICAgcHJpbnQoImRpZ3JhcGggZ3siKQorICAgICAgICBkZWYgcHJpbnRfbm9kZShub2RlKToKKyAgICAgICAgICAgIGZvciBzdWJub2RlX2tleSBpbiBub2RlLnRyYW5zaXRpb25fdGFibGUua2V5cygpOgorICAgICAgICAgICAgICAgIHN1Ym5vZGUgPSBub2RlLnRyYW5zaXRpb25fdGFibGVbc3Vibm9kZV9rZXldCisgICAgICAgICAgICAgICAgcHJpbnQoIiVkIC0+ICVkIFtsYWJlbD0lc10gLy8lcyIgJQorICAgICAgICAgICAgICAgICAgICAgIChub2RlLmlkLCBzdWJub2RlLmlkLCB0eXBlX3JlcHIoc3Vibm9kZV9rZXkpLCBzdHIoc3Vibm9kZS5maXhlcnMpKSkKKyAgICAgICAgICAgICAgICBpZiBzdWJub2RlX2tleSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBwcmludChzdWJub2RlLmNvbnRlbnQpCisgICAgICAgICAgICAgICAgcHJpbnRfbm9kZShzdWJub2RlKQorICAgICAgICBwcmludF9ub2RlKHNlbGYucm9vdCkKKyAgICAgICAgcHJpbnQoIn0iKQorCisjIHRha2VuIGZyb20gcHl0cmVlLnB5IGZvciBkZWJ1Z2dpbmc7IG9ubHkgdXNlZCBieSBwcmludF9hYworX3R5cGVfcmVwcnMgPSB7fQorZGVmIHR5cGVfcmVwcih0eXBlX251bSk6CisgICAgZ2xvYmFsIF90eXBlX3JlcHJzCisgICAgaWYgbm90IF90eXBlX3JlcHJzOgorICAgICAgICBmcm9tIC5weWdyYW0gaW1wb3J0IHB5dGhvbl9zeW1ib2xzCisgICAgICAgICMgcHJpbnRpbmcgdG9rZW5zIGlzIHBvc3NpYmxlIGJ1dCBub3QgYXMgdXNlZnVsCisgICAgICAgICMgZnJvbSAucGdlbjIgaW1wb3J0IHRva2VuIC8vIHRva2VuLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgIGZvciBuYW1lLCB2YWwgaW4gcHl0aG9uX3N5bWJvbHMuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHR5cGUodmFsKSA9PSBpbnQ6IF90eXBlX3JlcHJzW3ZhbF0gPSBuYW1lCisgICAgcmV0dXJuIF90eXBlX3JlcHJzLnNldGRlZmF1bHQodHlwZV9udW0sIHR5cGVfbnVtKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5IGIvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNzZkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkKQEAgLTAsMCArMSwyODMgQEAKKyJVdGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBidG1fbWF0Y2hlciBtb2R1bGUiCisKK2Zyb20gLiBpbXBvcnQgcHl0cmVlCitmcm9tIC5wZ2VuMiBpbXBvcnQgZ3JhbW1hciwgdG9rZW4KK2Zyb20gLnB5Z3JhbSBpbXBvcnQgcGF0dGVybl9zeW1ib2xzLCBweXRob25fc3ltYm9scworCitzeW1zID0gcGF0dGVybl9zeW1ib2xzCitweXN5bXMgPSBweXRob25fc3ltYm9scwordG9rZW5zID0gZ3JhbW1hci5vcG1hcAordG9rZW5fbGFiZWxzID0gdG9rZW4KKworVFlQRV9BTlkgPSAtMQorVFlQRV9BTFRFUk5BVElWRVMgPSAtMgorVFlQRV9HUk9VUCA9IC0zCisKK2NsYXNzIE1pbk5vZGUob2JqZWN0KToKKyAgICAiIiJUaGlzIGNsYXNzIHNlcnZlcyBhcyBhbiBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlCisgICAgcGF0dGVybiB0cmVlIGR1cmluZyB0aGUgY29udmVyc2lvbiB0byBzZXRzIG9mIGxlYWYtdG8tcm9vdAorICAgIHN1YnBhdHRlcm5zIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZT1Ob25lLCBuYW1lPU5vbmUpOgorICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5jaGlsZHJlbiA9IFtdCisgICAgICAgIHNlbGYubGVhZiA9IEZhbHNlCisgICAgICAgIHNlbGYucGFyZW50ID0gTm9uZQorICAgICAgICBzZWxmLmFsdGVybmF0aXZlcyA9IFtdCisgICAgICAgIHNlbGYuZ3JvdXAgPSBbXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYudHlwZSkgKyAnICcgKyBzdHIoc2VsZi5uYW1lKQorCisgICAgZGVmIGxlYWZfdG9fcm9vdChzZWxmKToKKyAgICAgICAgIiIiSW50ZXJuYWwgbWV0aG9kLiBSZXR1cm5zIGEgY2hhcmFjdGVyaXN0aWMgcGF0aCBvZiB0aGUKKyAgICAgICAgcGF0dGVybiB0cmVlLiBUaGlzIG1ldGhvZCBtdXN0IGJlIHJ1biBmb3IgYWxsIGxlYXZlcyB1bnRpbCB0aGUKKyAgICAgICAgbGluZWFyIHN1YnBhdHRlcm5zIGFyZSBtZXJnZWQgaW50byBhIHNpbmdsZSIiIgorICAgICAgICBub2RlID0gc2VsZgorICAgICAgICBzdWJwID0gW10KKyAgICAgICAgd2hpbGUgbm9kZToKKyAgICAgICAgICAgIGlmIG5vZGUudHlwZSA9PSBUWVBFX0FMVEVSTkFUSVZFUzoKKyAgICAgICAgICAgICAgICBub2RlLmFsdGVybmF0aXZlcy5hcHBlbmQoc3VicCkKKyAgICAgICAgICAgICAgICBpZiBsZW4obm9kZS5hbHRlcm5hdGl2ZXMpID09IGxlbihub2RlLmNoaWxkcmVuKToKKyAgICAgICAgICAgICAgICAgICAgI2xhc3QgYWx0ZXJuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgc3VicCA9IFt0dXBsZShub2RlLmFsdGVybmF0aXZlcyldCisgICAgICAgICAgICAgICAgICAgIG5vZGUuYWx0ZXJuYXRpdmVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50CisgICAgICAgICAgICAgICAgICAgIHN1YnAgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vZGUudHlwZSA9PSBUWVBFX0dST1VQOgorICAgICAgICAgICAgICAgIG5vZGUuZ3JvdXAuYXBwZW5kKHN1YnApCisgICAgICAgICAgICAgICAgI3Byb2JhYmx5IHNob3VsZCBjaGVjayB0aGUgbnVtYmVyIG9mIGxlYXZlcworICAgICAgICAgICAgICAgIGlmIGxlbihub2RlLmdyb3VwKSA9PSBsZW4obm9kZS5jaGlsZHJlbik6CisgICAgICAgICAgICAgICAgICAgIHN1YnAgPSBnZXRfY2hhcmFjdGVyaXN0aWNfc3VicGF0dGVybihub2RlLmdyb3VwKQorICAgICAgICAgICAgICAgICAgICBub2RlLmdyb3VwID0gW10KKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50CisgICAgICAgICAgICAgICAgICAgIHN1YnAgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vZGUudHlwZSA9PSB0b2tlbl9sYWJlbHMuTkFNRSBhbmQgbm9kZS5uYW1lOgorICAgICAgICAgICAgICAgICNpbiBjYXNlIG9mIHR5cGU9bmFtZSwgdXNlIHRoZSBuYW1lIGluc3RlYWQKKyAgICAgICAgICAgICAgICBzdWJwLmFwcGVuZChub2RlLm5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1YnAuYXBwZW5kKG5vZGUudHlwZSkKKworICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50CisgICAgICAgIHJldHVybiBzdWJwCisKKyAgICBkZWYgZ2V0X2xpbmVhcl9zdWJwYXR0ZXJuKHNlbGYpOgorICAgICAgICAiIiJEcml2ZXMgdGhlIGxlYWZfdG9fcm9vdCBtZXRob2QuIFRoZSByZWFzb24gdGhhdAorICAgICAgICBsZWFmX3RvX3Jvb3QgbXVzdCBiZSBydW4gbXVsdGlwbGUgdGltZXMgaXMgYmVjYXVzZSB3ZSBuZWVkIHRvCisgICAgICAgIHJlamVjdCAnZ3JvdXAnIG1hdGNoZXM7IGZvciBleGFtcGxlIHRoZSBhbHRlcm5hdGl2ZSBmb3JtCisgICAgICAgIChhIHwgYiBjKSBjcmVhdGVzIGEgZ3JvdXAgW2IgY10gdGhhdCBuZWVkcyB0byBiZSBtYXRjaGVkLiBTaW5jZQorICAgICAgICBtYXRjaGluZyBtdWx0aXBsZSBsaW5lYXIgcGF0dGVybnMgb3ZlcmNvbWVzIHRoZSBhdXRvbWF0b24ncworICAgICAgICBjYXBhYmlsaXRpZXMsIGxlYWZfdG9fcm9vdCBtZXJnZXMgZWFjaCBncm91cCBpbnRvIGEgc2luZ2xlCisgICAgICAgIGNob2ljZSBiYXNlZCBvbiAnY2hhcmFjdGVyaXN0aWMnaXR5LAorCisgICAgICAgIGkuZS4gKGF8YiBjKSAtPiAoYXxiKSBpZiBiIG1vcmUgY2hhcmFjdGVyaXN0aWMgdGhhbiBjCisKKyAgICAgICAgUmV0dXJuczogVGhlIG1vc3QgJ2NoYXJhY3RlcmlzdGljJyhhcyBkZWZpbmVkIGJ5CisgICAgICAgICAgZ2V0X2NoYXJhY3RlcmlzdGljX3N1YnBhdHRlcm4pIHBhdGggZm9yIHRoZSBjb21waWxlZCBwYXR0ZXJuCisgICAgICAgICAgdHJlZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIGwgaW4gc2VsZi5sZWF2ZXMoKToKKyAgICAgICAgICAgIHN1YnAgPSBsLmxlYWZfdG9fcm9vdCgpCisgICAgICAgICAgICBpZiBzdWJwOgorICAgICAgICAgICAgICAgIHJldHVybiBzdWJwCisKKyAgICBkZWYgbGVhdmVzKHNlbGYpOgorICAgICAgICAiR2VuZXJhdG9yIHRoYXQgcmV0dXJucyB0aGUgbGVhdmVzIG9mIHRoZSB0cmVlIgorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKKyAgICAgICAgICAgIGZvciB4IGluIGNoaWxkLmxlYXZlcygpOgorICAgICAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgaWYgbm90IHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICB5aWVsZCBzZWxmCisKK2RlZiByZWR1Y2VfdHJlZShub2RlLCBwYXJlbnQ9Tm9uZSk6CisgICAgIiIiCisgICAgSW50ZXJuYWwgZnVuY3Rpb24uIFJlZHVjZXMgYSBjb21waWxlZCBwYXR0ZXJuIHRyZWUgdG8gYW4KKyAgICBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gc3VpdGFibGUgZm9yIGZlZWRpbmcgdGhlCisgICAgYXV0b21hdG9uLiBUaGlzIGFsc28gdHJpbXMgb2ZmIGFueSBvcHRpb25hbCBwYXR0ZXJuIGVsZW1lbnRzKGxpa2UKKyAgICBbYV0sIGEqKS4KKyAgICAiIiIKKworICAgIG5ld19ub2RlID0gTm9uZQorICAgICNzd2l0Y2ggb24gdGhlIG5vZGUgdHlwZQorICAgIGlmIG5vZGUudHlwZSA9PSBzeW1zLk1hdGNoZXI6CisgICAgICAgICNza2lwCisgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkcmVuWzBdCisKKyAgICBpZiBub2RlLnR5cGUgPT0gc3ltcy5BbHRlcm5hdGl2ZXMgIDoKKyAgICAgICAgIzIgY2FzZXMKKyAgICAgICAgaWYgbGVuKG5vZGUuY2hpbGRyZW4pIDw9IDI6CisgICAgICAgICAgICAjanVzdCBhIHNpbmdsZSAnQWx0ZXJuYXRpdmUnLCBza2lwIHRoaXMgbm9kZQorICAgICAgICAgICAgbmV3X25vZGUgPSByZWR1Y2VfdHJlZShub2RlLmNoaWxkcmVuWzBdLCBwYXJlbnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjcmVhbCBhbHRlcm5hdGl2ZXMKKyAgICAgICAgICAgIG5ld19ub2RlID0gTWluTm9kZSh0eXBlPVRZUEVfQUxURVJOQVRJVkVTKQorICAgICAgICAgICAgI3NraXAgb2RkIGNoaWxkcmVuKCd8JyB0b2tlbnMpCisgICAgICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJlbjoKKyAgICAgICAgICAgICAgICBpZiBub2RlLmNoaWxkcmVuLmluZGV4KGNoaWxkKSUyOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJlZHVjZWQgPSByZWR1Y2VfdHJlZShjaGlsZCwgbmV3X25vZGUpCisgICAgICAgICAgICAgICAgaWYgcmVkdWNlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbmV3X25vZGUuY2hpbGRyZW4uYXBwZW5kKHJlZHVjZWQpCisgICAgZWxpZiBub2RlLnR5cGUgPT0gc3ltcy5BbHRlcm5hdGl2ZToKKyAgICAgICAgaWYgbGVuKG5vZGUuY2hpbGRyZW4pID4gMToKKworICAgICAgICAgICAgbmV3X25vZGUgPSBNaW5Ob2RlKHR5cGU9VFlQRV9HUk9VUCkKKyAgICAgICAgICAgIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgICAgIHJlZHVjZWQgPSByZWR1Y2VfdHJlZShjaGlsZCwgbmV3X25vZGUpCisgICAgICAgICAgICAgICAgaWYgcmVkdWNlZDoKKyAgICAgICAgICAgICAgICAgICAgbmV3X25vZGUuY2hpbGRyZW4uYXBwZW5kKHJlZHVjZWQpCisgICAgICAgICAgICBpZiBub3QgbmV3X25vZGUuY2hpbGRyZW46CisgICAgICAgICAgICAgICAgIyBkZWxldGUgdGhlIGdyb3VwIGlmIGFsbCBvZiB0aGUgY2hpbGRyZW4gd2VyZSByZWR1Y2VkIHRvIE5vbmUKKyAgICAgICAgICAgICAgICBuZXdfbm9kZSA9IE5vbmUKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV3X25vZGUgPSByZWR1Y2VfdHJlZShub2RlLmNoaWxkcmVuWzBdLCBwYXJlbnQpCisKKyAgICBlbGlmIG5vZGUudHlwZSA9PSBzeW1zLlVuaXQ6CisgICAgICAgIGlmIChpc2luc3RhbmNlKG5vZGUuY2hpbGRyZW5bMF0sIHB5dHJlZS5MZWFmKSBhbmQKKyAgICAgICAgICAgIG5vZGUuY2hpbGRyZW5bMF0udmFsdWUgPT0gJygnKToKKyAgICAgICAgICAgICNza2lwIHBhcmVudGhlc2VzCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlX3RyZWUobm9kZS5jaGlsZHJlblsxXSwgcGFyZW50KQorICAgICAgICBpZiAoKGlzaW5zdGFuY2Uobm9kZS5jaGlsZHJlblswXSwgcHl0cmVlLkxlYWYpIGFuZAorICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlblswXS52YWx1ZSA9PSAnWycpCisgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgKGxlbihub2RlLmNoaWxkcmVuKT4xIGFuZAorICAgICAgICAgICAgICAgaGFzYXR0cihub2RlLmNoaWxkcmVuWzFdLCAidmFsdWUiKSBhbmQKKyAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW5bMV0udmFsdWUgPT0gJ1snKSk6CisgICAgICAgICAgICAjc2tpcCB3aG9sZSB1bml0IGlmIGl0cyBvcHRpb25hbAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBsZWFmID0gVHJ1ZQorICAgICAgICBkZXRhaWxzX25vZGUgPSBOb25lCisgICAgICAgIGFsdGVybmF0aXZlc19ub2RlID0gTm9uZQorICAgICAgICBoYXNfcmVwZWF0ZXIgPSBGYWxzZQorICAgICAgICByZXBlYXRlcl9ub2RlID0gTm9uZQorICAgICAgICBoYXNfdmFyaWFibGVfbmFtZSA9IEZhbHNlCisKKyAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CisgICAgICAgICAgICBpZiBjaGlsZC50eXBlID09IHN5bXMuRGV0YWlsczoKKyAgICAgICAgICAgICAgICBsZWFmID0gRmFsc2UKKyAgICAgICAgICAgICAgICBkZXRhaWxzX25vZGUgPSBjaGlsZAorICAgICAgICAgICAgZWxpZiBjaGlsZC50eXBlID09IHN5bXMuUmVwZWF0ZXI6CisgICAgICAgICAgICAgICAgaGFzX3JlcGVhdGVyID0gVHJ1ZQorICAgICAgICAgICAgICAgIHJlcGVhdGVyX25vZGUgPSBjaGlsZAorICAgICAgICAgICAgZWxpZiBjaGlsZC50eXBlID09IHN5bXMuQWx0ZXJuYXRpdmVzOgorICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlc19ub2RlID0gY2hpbGQKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoY2hpbGQsICd2YWx1ZScpIGFuZCBjaGlsZC52YWx1ZSA9PSAnPSc6ICMgdmFyaWFibGUgbmFtZQorICAgICAgICAgICAgICAgIGhhc192YXJpYWJsZV9uYW1lID0gVHJ1ZQorCisgICAgICAgICNza2lwIHZhcmlhYmxlIG5hbWUKKyAgICAgICAgaWYgaGFzX3ZhcmlhYmxlX25hbWU6CisgICAgICAgICAgICAjc2tpcCB2YXJpYWJsZSBuYW1lLCAnPScKKyAgICAgICAgICAgIG5hbWVfbGVhZiA9IG5vZGUuY2hpbGRyZW5bMl0KKyAgICAgICAgICAgIGlmIGhhc2F0dHIobmFtZV9sZWFmLCAndmFsdWUnKSBhbmQgbmFtZV9sZWFmLnZhbHVlID09ICcoJzoKKyAgICAgICAgICAgICAgICAjIHNraXAgcGFyZW50aGVzaXMKKyAgICAgICAgICAgICAgICBuYW1lX2xlYWYgPSBub2RlLmNoaWxkcmVuWzNdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lX2xlYWYgPSBub2RlLmNoaWxkcmVuWzBdCisKKyAgICAgICAgI3NldCBub2RlIHR5cGUKKyAgICAgICAgaWYgbmFtZV9sZWFmLnR5cGUgPT0gdG9rZW5fbGFiZWxzLk5BTUU6CisgICAgICAgICAgICAjKHB5dGhvbikgbm9uLW5hbWUgb3Igd2lsZGNhcmQKKyAgICAgICAgICAgIGlmIG5hbWVfbGVhZi52YWx1ZSA9PSAnYW55JzoKKyAgICAgICAgICAgICAgICBuZXdfbm9kZSA9IE1pbk5vZGUodHlwZT1UWVBFX0FOWSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cih0b2tlbl9sYWJlbHMsIG5hbWVfbGVhZi52YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgIG5ld19ub2RlID0gTWluTm9kZSh0eXBlPWdldGF0dHIodG9rZW5fbGFiZWxzLCBuYW1lX2xlYWYudmFsdWUpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld19ub2RlID0gTWluTm9kZSh0eXBlPWdldGF0dHIocHlzeW1zLCBuYW1lX2xlYWYudmFsdWUpKQorCisgICAgICAgIGVsaWYgbmFtZV9sZWFmLnR5cGUgPT0gdG9rZW5fbGFiZWxzLlNUUklORzoKKyAgICAgICAgICAgICMocHl0aG9uKSBuYW1lIG9yIGNoYXJhY3RlcjsgcmVtb3ZlIHRoZSBhcG9zdHJvcGhlcyBmcm9tCisgICAgICAgICAgICAjdGhlIHN0cmluZyB2YWx1ZQorICAgICAgICAgICAgbmFtZSA9IG5hbWVfbGVhZi52YWx1ZS5zdHJpcCgiJyIpCisgICAgICAgICAgICBpZiBuYW1lIGluIHRva2VuczoKKyAgICAgICAgICAgICAgICBuZXdfbm9kZSA9IE1pbk5vZGUodHlwZT10b2tlbnNbbmFtZV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld19ub2RlID0gTWluTm9kZSh0eXBlPXRva2VuX2xhYmVscy5OQU1FLCBuYW1lPW5hbWUpCisgICAgICAgIGVsaWYgbmFtZV9sZWFmLnR5cGUgPT0gc3ltcy5BbHRlcm5hdGl2ZXM6CisgICAgICAgICAgICBuZXdfbm9kZSA9IHJlZHVjZV90cmVlKGFsdGVybmF0aXZlc19ub2RlLCBwYXJlbnQpCisKKyAgICAgICAgI2hhbmRsZSByZXBlYXRlcnMKKyAgICAgICAgaWYgaGFzX3JlcGVhdGVyOgorICAgICAgICAgICAgaWYgcmVwZWF0ZXJfbm9kZS5jaGlsZHJlblswXS52YWx1ZSA9PSAnKic6CisgICAgICAgICAgICAgICAgI3JlZHVjZSB0byBOb25lCisgICAgICAgICAgICAgICAgbmV3X25vZGUgPSBOb25lCisgICAgICAgICAgICBlbGlmIHJlcGVhdGVyX25vZGUuY2hpbGRyZW5bMF0udmFsdWUgPT0gJysnOgorICAgICAgICAgICAgICAgICNyZWR1Y2UgdG8gYSBzaW5nbGUgb2NjdXJlbmNlIGkuZS4gZG8gbm90aGluZworICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgI1RPRE86IGhhbmRsZSB7bWluLCBtYXh9IHJlcGVhdGVycworICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgI2FkZCBjaGlsZHJlbgorICAgICAgICBpZiBkZXRhaWxzX25vZGUgYW5kIG5ld19ub2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGNoaWxkIGluIGRldGFpbHNfbm9kZS5jaGlsZHJlblsxOi0xXToKKyAgICAgICAgICAgICAgICAjc2tpcCAnPCcsICc+JyBtYXJrZXJzCisgICAgICAgICAgICAgICAgcmVkdWNlZCA9IHJlZHVjZV90cmVlKGNoaWxkLCBuZXdfbm9kZSkKKyAgICAgICAgICAgICAgICBpZiByZWR1Y2VkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBuZXdfbm9kZS5jaGlsZHJlbi5hcHBlbmQocmVkdWNlZCkKKyAgICBpZiBuZXdfbm9kZToKKyAgICAgICAgbmV3X25vZGUucGFyZW50ID0gcGFyZW50CisgICAgcmV0dXJuIG5ld19ub2RlCisKKworZGVmIGdldF9jaGFyYWN0ZXJpc3RpY19zdWJwYXR0ZXJuKHN1YnBhdHRlcm5zKToKKyAgICAiIiJQaWNrcyB0aGUgbW9zdCBjaGFyYWN0ZXJpc3RpYyBmcm9tIGEgbGlzdCBvZiBsaW5lYXIgcGF0dGVybnMKKyAgICBDdXJyZW50IG9yZGVyIHVzZWQgaXM6CisgICAgbmFtZXMgPiBjb21tb25fbmFtZXMgPiBjb21tb25fY2hhcnMKKyAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzdWJwYXR0ZXJucywgbGlzdCk6CisgICAgICAgIHJldHVybiBzdWJwYXR0ZXJucworICAgIGlmIGxlbihzdWJwYXR0ZXJucyk9PTE6CisgICAgICAgIHJldHVybiBzdWJwYXR0ZXJuc1swXQorCisgICAgIyBmaXJzdCBwaWNrIG91dCB0aGUgb25lcyBjb250YWluaW5nIHZhcmlhYmxlIG5hbWVzCisgICAgc3VicGF0dGVybnNfd2l0aF9uYW1lcyA9IFtdCisgICAgc3VicGF0dGVybnNfd2l0aF9jb21tb25fbmFtZXMgPSBbXQorICAgIGNvbW1vbl9uYW1lcyA9IFsnaW4nLCAnZm9yJywgJ2lmJyAsICdub3QnLCAnTm9uZSddCisgICAgc3VicGF0dGVybnNfd2l0aF9jb21tb25fY2hhcnMgPSBbXQorICAgIGNvbW1vbl9jaGFycyA9ICJbXSgpLiw6IgorICAgIGZvciBzdWJwYXR0ZXJuIGluIHN1YnBhdHRlcm5zOgorICAgICAgICBpZiBhbnkocmVjX3Rlc3Qoc3VicGF0dGVybiwgbGFtYmRhIHg6IHR5cGUoeCkgaXMgc3RyKSk6CisgICAgICAgICAgICBpZiBhbnkocmVjX3Rlc3Qoc3VicGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogaXNpbnN0YW5jZSh4LCBzdHIpIGFuZCB4IGluIGNvbW1vbl9jaGFycykpOgorICAgICAgICAgICAgICAgIHN1YnBhdHRlcm5zX3dpdGhfY29tbW9uX2NoYXJzLmFwcGVuZChzdWJwYXR0ZXJuKQorICAgICAgICAgICAgZWxpZiBhbnkocmVjX3Rlc3Qoc3VicGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiBpc2luc3RhbmNlKHgsIHN0cikgYW5kIHggaW4gY29tbW9uX25hbWVzKSk6CisgICAgICAgICAgICAgICAgc3VicGF0dGVybnNfd2l0aF9jb21tb25fbmFtZXMuYXBwZW5kKHN1YnBhdHRlcm4pCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3VicGF0dGVybnNfd2l0aF9uYW1lcy5hcHBlbmQoc3VicGF0dGVybikKKworICAgIGlmIHN1YnBhdHRlcm5zX3dpdGhfbmFtZXM6CisgICAgICAgIHN1YnBhdHRlcm5zID0gc3VicGF0dGVybnNfd2l0aF9uYW1lcworICAgIGVsaWYgc3VicGF0dGVybnNfd2l0aF9jb21tb25fbmFtZXM6CisgICAgICAgIHN1YnBhdHRlcm5zID0gc3VicGF0dGVybnNfd2l0aF9jb21tb25fbmFtZXMKKyAgICBlbGlmIHN1YnBhdHRlcm5zX3dpdGhfY29tbW9uX2NoYXJzOgorICAgICAgICBzdWJwYXR0ZXJucyA9IHN1YnBhdHRlcm5zX3dpdGhfY29tbW9uX2NoYXJzCisgICAgIyBvZiB0aGUgcmVtYWluaW5nIHN1YnBhdHRlcm5zIHBpY2sgb3V0IHRoZSBsb25nZXN0IG9uZQorICAgIHJldHVybiBtYXgoc3VicGF0dGVybnMsIGtleT1sZW4pCisKK2RlZiByZWNfdGVzdChzZXF1ZW5jZSwgdGVzdF9mdW5jKToKKyAgICAiIiJUZXN0cyB0ZXN0X2Z1bmMgb24gYWxsIGl0ZW1zIG9mIHNlcXVlbmNlIGFuZCBpdGVtcyBvZiBpbmNsdWRlZAorICAgIHN1Yi1pdGVyYWJsZXMiIiIKKyAgICBmb3IgeCBpbiBzZXF1ZW5jZToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIGZvciB5IGluIHJlY190ZXN0KHgsIHRlc3RfZnVuYyk6CisgICAgICAgICAgICAgICAgeWllbGQgeQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQgdGVzdF9mdW5jKHgpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcl9iYXNlLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXJfYmFzZS5weQppbmRleCAxNjg4N2FhLi5mNjQyMWJhIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcl9iYXNlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVyX2Jhc2UucHkKQEAgLTI0LDYgKzI0LDcgQEAKIAogICAgIFBBVFRFUk4gPSBOb25lICAjIE1vc3Qgc3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgd2l0aCBhIHN0cmluZyBsaXRlcmFsCiAgICAgcGF0dGVybiA9IE5vbmUgICMgQ29tcGlsZWQgcGF0dGVybiwgc2V0IGJ5IGNvbXBpbGVfcGF0dGVybigpCisgICAgcGF0dGVybl90cmVlID0gTm9uZSAjIFRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhdHRlcm4KICAgICBvcHRpb25zID0gTm9uZSAgIyBPcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gaW5pdGlhbGl6ZXIKICAgICBmaWxlbmFtZSA9IE5vbmUgIyBUaGUgZmlsZW5hbWUgKHNldCBieSBzZXRfZmlsZW5hbWUpCiAgICAgbG9nZ2VyID0gTm9uZSAgICMgQSBsb2dnZXIgKHNldCBieSBzZXRfZmlsZW5hbWUpCkBAIC0zNiw2ICszNywxMiBAQAogICAgIF9hY2NlcHRfdHlwZSA9IE5vbmUgIyBbQWR2YW5jZWQgYW5kIG5vdCBwdWJsaWNdIFRoaXMgdGVsbHMgUmVmYWN0b3JpbmdUb29sCiAgICAgICAgICAgICAgICAgICAgICAgICAjIHdoaWNoIG5vZGUgdHlwZSB0byBhY2NlcHQgd2hlbiB0aGVyZSdzIG5vdCBhIHBhdHRlcm4uCiAKKyAgICBrZWVwX2xpbmVfb3JkZXIgPSBGYWxzZSAjIEZvciB0aGUgYm90dG9tIG1hdGNoZXI6IG1hdGNoIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcmlnaW5hbCBsaW5lIG9yZGVyCisgICAgQk1fY29tcGF0aWJsZSA9IEZhbHNlICMgQ29tcGF0aWJpbGl0eSB3aXRoIHRoZSBib3R0b20gbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtb2R1bGU7IGV2ZXJ5IGZpeGVyIHNob3VsZCBzZXQgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1hbnVhbGx5CisKICAgICAjIFNob3J0Y3V0IGZvciBhY2Nlc3MgdG8gUHl0aG9uIGdyYW1tYXIgc3ltYm9scwogICAgIHN5bXMgPSBweWdyYW0ucHl0aG9uX3N5bWJvbHMKIApAQCAtNTgsNyArNjUsOSBAQAogICAgICAgICBzZWxmLntwYXR0ZXJuLFBBVFRFUk59IGluIC5tYXRjaCgpLgogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5QQVRURVJOIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5wYXR0ZXJuID0gUGF0dGVybkNvbXBpbGVyKCkuY29tcGlsZV9wYXR0ZXJuKHNlbGYuUEFUVEVSTikKKyAgICAgICAgICAgIFBDID0gUGF0dGVybkNvbXBpbGVyKCkKKyAgICAgICAgICAgIHNlbGYucGF0dGVybiwgc2VsZi5wYXR0ZXJuX3RyZWUgPSBQQy5jb21waWxlX3BhdHRlcm4oc2VsZi5QQVRURVJOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoX3RyZWU9VHJ1ZSkKIAogICAgIGRlZiBzZXRfZmlsZW5hbWUoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiJTZXQgdGhlIGZpbGVuYW1lLCBhbmQgYSBsb2dnZXIgZGVyaXZlZCBmcm9tIGl0LgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weSBiL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKaW5kZXggM2IxMzY2OS4uMzBkYTg5MyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CkBAIC0xLDYgKzEsOCBAQAogIiIiVXRpbGl0eSBmdW5jdGlvbnMsIG5vZGUgY29uc3RydWN0aW9uIG1hY3JvcywgZXRjLiIiIgogIyBBdXRob3I6IENvbGxpbiBXaW50ZXIKIAorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZQorCiAjIExvY2FsIGltcG9ydHMKIGZyb20gLnBnZW4yIGltcG9ydCB0b2tlbgogZnJvbSAucHl0cmVlIGltcG9ydCBMZWFmLCBOb2RlCkBAIC0xNCw3ICsxNiw3IEBACiAKIGRlZiBLZXl3b3JkQXJnKGtleXdvcmQsIHZhbHVlKToKICAgICByZXR1cm4gTm9kZShzeW1zLmFyZ3VtZW50LAotICAgICAgICAgICAgICAgIFtrZXl3b3JkLCBMZWFmKHRva2VuLkVRVUFMLCB1Jz0nKSwgdmFsdWVdKQorICAgICAgICAgICAgICAgIFtrZXl3b3JkLCBMZWFmKHRva2VuLkVRVUFMLCB1Ij0iKSwgdmFsdWVdKQogCiBkZWYgTFBhcmVuKCk6CiAgICAgcmV0dXJuIExlYWYodG9rZW4uTFBBUiwgdSIoIikKQEAgLTc2LDkgKzc4LDkgQEAKIAogZGVmIFN1YnNjcmlwdChpbmRleF9ub2RlKToKICAgICAiIiJBIG51bWVyaWMgb3Igc3RyaW5nIHN1YnNjcmlwdCIiIgotICAgIHJldHVybiBOb2RlKHN5bXMudHJhaWxlciwgW0xlYWYodG9rZW4uTEJSQUNFLCB1J1snKSwKKyAgICByZXR1cm4gTm9kZShzeW1zLnRyYWlsZXIsIFtMZWFmKHRva2VuLkxCUkFDRSwgdSJbIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWFmKHRva2VuLlJCUkFDRSwgdSddJyldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlYWYodG9rZW4uUkJSQUNFLCB1Il0iKV0pCiAKIGRlZiBTdHJpbmcoc3RyaW5nLCBwcmVmaXg9Tm9uZSk6CiAgICAgIiIiQSBzdHJpbmcgbGVhZiIiIgpAQCAtMTIwLDkgKzEyMiw5IEBACiAgICAgICAgICMgUHVsbCB0aGUgbGVhdmVzIG91dCBvZiB0aGVpciBvbGQgdHJlZQogICAgICAgICBsZWFmLnJlbW92ZSgpCiAKLSAgICBjaGlsZHJlbiA9IFtMZWFmKHRva2VuLk5BTUUsIHUnZnJvbScpLAorICAgIGNoaWxkcmVuID0gW0xlYWYodG9rZW4uTkFNRSwgdSJmcm9tIiksCiAgICAgICAgICAgICAgICAgTGVhZih0b2tlbi5OQU1FLCBwYWNrYWdlX25hbWUsIHByZWZpeD11IiAiKSwKLSAgICAgICAgICAgICAgICBMZWFmKHRva2VuLk5BTUUsIHUnaW1wb3J0JywgcHJlZml4PXUiICIpLAorICAgICAgICAgICAgICAgIExlYWYodG9rZW4uTkFNRSwgdSJpbXBvcnQiLCBwcmVmaXg9dSIgIiksCiAgICAgICAgICAgICAgICAgTm9kZShzeW1zLmltcG9ydF9hc19uYW1lcywgbmFtZV9sZWFmcyldCiAgICAgaW1wID0gTm9kZShzeW1zLmltcG9ydF9mcm9tLCBjaGlsZHJlbikKICAgICByZXR1cm4gaW1wCkBAIC0yNDUsNiArMjQ3LDE2IEBACiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCiAKK2RlZiBmaW5kX2luZGVudGF0aW9uKG5vZGUpOgorICAgICIiIkZpbmQgdGhlIGluZGVudGF0aW9uIG9mICpub2RlKi4iIiIKKyAgICB3aGlsZSBub2RlIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBub2RlLnR5cGUgPT0gc3ltcy5zdWl0ZSBhbmQgbGVuKG5vZGUuY2hpbGRyZW4pID4gMjoKKyAgICAgICAgICAgIGluZGVudCA9IG5vZGUuY2hpbGRyZW5bMV0KKyAgICAgICAgICAgIGlmIGluZGVudC50eXBlID09IHRva2VuLklOREVOVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZW50LnZhbHVlCisgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudAorICAgIHJldHVybiB1IiIKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdG8gZmluZCBiaW5kaW5ncyBpbiBhIHN1aXRlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMjgzLDggKzI5NSw4IEBACiAgICAgIiIiIFdvcmtzIGxpa2UgYGRvZXNfdHJlZV9pbXBvcnRgIGJ1dCBhZGRzIGFuIGltcG9ydCBzdGF0ZW1lbnQKICAgICAgICAgaWYgaXQgd2FzIG5vdCBpbXBvcnRlZC4gIiIiCiAgICAgZGVmIGlzX2ltcG9ydF9zdG10KG5vZGUpOgotICAgICAgICByZXR1cm4gbm9kZS50eXBlID09IHN5bXMuc2ltcGxlX3N0bXQgYW5kIG5vZGUuY2hpbGRyZW4gYW5kIFwKLSAgICAgICAgICAgICAgIGlzX2ltcG9ydChub2RlLmNoaWxkcmVuWzBdKQorICAgICAgICByZXR1cm4gKG5vZGUudHlwZSA9PSBzeW1zLnNpbXBsZV9zdG10IGFuZCBub2RlLmNoaWxkcmVuIGFuZAorICAgICAgICAgICAgICAgIGlzX2ltcG9ydChub2RlLmNoaWxkcmVuWzBdKSkKIAogICAgIHJvb3QgPSBmaW5kX3Jvb3Qobm9kZSkKIApAQCAtMzA3LDE4ICszMTksMTggQEAKICAgICAjIGlmIHRoYXQgYWxzbyBmYWlscywgd2Ugc3RpY2sgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZQogICAgIGlmIGluc2VydF9wb3MgPT0gMDoKICAgICAgICAgZm9yIGlkeCwgbm9kZSBpbiBlbnVtZXJhdGUocm9vdC5jaGlsZHJlbik6Ci0gICAgICAgICAgICBpZiBub2RlLnR5cGUgPT0gc3ltcy5zaW1wbGVfc3RtdCBhbmQgbm9kZS5jaGlsZHJlbiBhbmQgXAotICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlblswXS50eXBlID09IHRva2VuLlNUUklORzoKKyAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT0gc3ltcy5zaW1wbGVfc3RtdCBhbmQgbm9kZS5jaGlsZHJlbiBhbmQKKyAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW5bMF0udHlwZSA9PSB0b2tlbi5TVFJJTkcpOgogICAgICAgICAgICAgICAgIGluc2VydF9wb3MgPSBpZHggKyAxCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgIGlmIHBhY2thZ2UgaXMgTm9uZToKICAgICAgICAgaW1wb3J0XyA9IE5vZGUoc3ltcy5pbXBvcnRfbmFtZSwgWwotICAgICAgICAgICAgTGVhZih0b2tlbi5OQU1FLCB1J2ltcG9ydCcpLAotICAgICAgICAgICAgTGVhZih0b2tlbi5OQU1FLCBuYW1lLCBwcmVmaXg9dScgJykKKyAgICAgICAgICAgIExlYWYodG9rZW4uTkFNRSwgdSJpbXBvcnQiKSwKKyAgICAgICAgICAgIExlYWYodG9rZW4uTkFNRSwgbmFtZSwgcHJlZml4PXUiICIpCiAgICAgICAgIF0pCiAgICAgZWxzZToKLSAgICAgICAgaW1wb3J0XyA9IEZyb21JbXBvcnQocGFja2FnZSwgW0xlYWYodG9rZW4uTkFNRSwgbmFtZSwgcHJlZml4PXUnICcpXSkKKyAgICAgICAgaW1wb3J0XyA9IEZyb21JbXBvcnQocGFja2FnZSwgW0xlYWYodG9rZW4uTkFNRSwgbmFtZSwgcHJlZml4PXUiICIpXSkKIAogICAgIGNoaWxkcmVuID0gW2ltcG9ydF8sIE5ld2xpbmUoKV0KICAgICByb290Lmluc2VydF9jaGlsZChpbnNlcnRfcG9zLCBOb2RlKHN5bXMuc2ltcGxlX3N0bXQsIGNoaWxkcmVuKSkKQEAgLTQwNCw3ICs0MTYsNyBAQAogICAgICAgICBpZiBwYWNrYWdlIGFuZCB1bmljb2RlKG5vZGUuY2hpbGRyZW5bMV0pLnN0cmlwKCkgIT0gcGFja2FnZToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIG4gPSBub2RlLmNoaWxkcmVuWzNdCi0gICAgICAgIGlmIHBhY2thZ2UgYW5kIF9maW5kKHUnYXMnLCBuKToKKyAgICAgICAgaWYgcGFja2FnZSBhbmQgX2ZpbmQodSJhcyIsIG4pOgogICAgICAgICAgICAgIyBTZWUgdGVzdF9mcm9tX2ltcG9ydF9hcyBmb3IgZXhwbGFuYXRpb24KICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGVsaWYgbi50eXBlID09IHN5bXMuaW1wb3J0X2FzX25hbWVzIGFuZCBfZmluZChuYW1lLCBuKToKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hcHBseS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hcHBseS5weQppbmRleCA2ZDFjNWQ5Li5hN2RjM2EwIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYXBwbHkucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2FwcGx5LnB5CkBAIC0xMiw2ICsxMiw3IEBACiBmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgQ2FsbCwgQ29tbWEsIHBhcmVudGhlc2l6ZQogCiBjbGFzcyBGaXhBcHBseShmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAKICAgICBQQVRURVJOID0gIiIiCiAgICAgcG93ZXI8ICdhcHBseScKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9iYXNlc3RyaW5nLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Jhc2VzdHJpbmcucHkKaW5kZXggMGRlNmMyNi4uYTNjOWE0MyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Jhc2VzdHJpbmcucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Jhc2VzdHJpbmcucHkKQEAgLTYsNiArNiw3IEBACiBmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgTmFtZQogCiBjbGFzcyBGaXhCYXNlc3RyaW5nKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKIAogICAgIFBBVFRFUk4gPSAiJ2Jhc2VzdHJpbmcnIgogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYnVmZmVyLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2J1ZmZlci5weQppbmRleCAxYzFjNGExLi5jNmIwOTI4IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYnVmZmVyLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9idWZmZXIucHkKQEAgLTksNiArOSw3IEBACiAKIAogY2xhc3MgRml4QnVmZmVyKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKIAogICAgIGV4cGxpY2l0ID0gVHJ1ZSAjIFRoZSB1c2VyIG11c3QgYXNrIGZvciB0aGlzIGZpeGVyCiAKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9jYWxsYWJsZS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9jYWxsYWJsZS5weQppbmRleCBjYTVkMjBiLi5kZjMzZDYxIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfY2FsbGFibGUucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2NhbGxhYmxlLnB5CkBAIC0xMSw2ICsxMSw5IEBACiBmcm9tIGxpYjJ0bzMuZml4ZXJfdXRpbCBpbXBvcnQgQ2FsbCwgTmFtZSwgU3RyaW5nLCBBdHRyLCB0b3VjaF9pbXBvcnQKIAogY2xhc3MgRml4Q2FsbGFibGUoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorCisgICAgb3JkZXIgPSAicHJlIgogCiAgICAgIyBJZ25vcmUgY2FsbGFibGUoKmFyZ3MpIG9yIHVzZSBvZiBrZXl3b3Jkcy4KICAgICAjIEVpdGhlciBjb3VsZCBiZSBhIGhpbnQgdGhhdCB0aGUgYnVpbHRpbiBjYWxsYWJsZSgpIGlzIG5vdCBiZWluZyB1c2VkLgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZGljdC5weQppbmRleCA1OTEyY2JmLi5mNjgxZTRkIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZGljdC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZGljdC5weQpAQCAtNDAsNiArNDAsOCBAQAogCiAKIGNsYXNzIEZpeERpY3QoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHBvd2VyPCBoZWFkPWFueSsKICAgICAgICAgIHRyYWlsZXI8ICcuJyBtZXRob2Q9KCdrZXlzJ3wnaXRlbXMnfCd2YWx1ZXMnfApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4Y2VwdC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGNlcHQucHkKaW5kZXggODExODA1OC4uZTMyNDcxOCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4Y2VwdC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhjZXB0LnB5CkBAIC0zNCw2ICszNCw3IEBACiAgICAgICAgICAgICAgICAgeWllbGQgKG4sIG5vZGVzW2krMl0pCiAKIGNsYXNzIEZpeEV4Y2VwdChmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAKICAgICBQQVRURVJOID0gIiIiCiAgICAgdHJ5X3N0bXQ8ICd0cnknICc6JyAoc2ltcGxlX3N0bXQgfCBzdWl0ZSkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4ZWMucHkKaW5kZXggMTIxNDMxYy4uNTBlMTg1NCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4ZWMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4ZWMucHkKQEAgLTE2LDYgKzE2LDcgQEAKIAogCiBjbGFzcyBGaXhFeGVjKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKIAogICAgIFBBVFRFUk4gPSAiIiIKICAgICBleGVjX3N0bXQ8ICdleGVjJyBhPWFueSAnaW4nIGI9YW55IFsnLCcgYz1hbnldID4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjZmlsZS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjZmlsZS5weQppbmRleCAzOGQ2YWJjLi4yZjI5ZDNiIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhlY2ZpbGUucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4ZWNmaWxlLnB5CkBAIC0xMyw2ICsxMyw3IEBACiAKIAogY2xhc3MgRml4RXhlY2ZpbGUoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHBvd2VyPCAnZXhlY2ZpbGUnIHRyYWlsZXI8ICcoJyBhcmdsaXN0PCBmaWxlbmFtZT1hbnkgWycsJyBnbG9iYWxzPWFueSBbJywnIGxvY2Fscz1hbnkgXSBdID4gJyknID4gPgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4aXRmdW5jLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4aXRmdW5jLnB5CmluZGV4IDI4ZDMwYjguLjg5ZmIzZGIgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGl0ZnVuYy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhpdGZ1bmMucHkKQEAgLTksNiArOSw4IEBACiAKIAogY2xhc3MgRml4RXhpdGZ1bmMoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBrZWVwX2xpbmVfb3JkZXIgPSBUcnVlCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKIAogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgICAgICAgKApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ZpbHRlci5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9maWx0ZXIucHkKaW5kZXggMGU5MmIxNC4uMThlZTJmZiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ZpbHRlci5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZmlsdGVyLnB5CkBAIC0xOSw2ICsxOSw3IEBACiBmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgTmFtZSwgQ2FsbCwgTGlzdENvbXAsIGluX3NwZWNpYWxfY29udGV4dAogCiBjbGFzcyBGaXhGaWx0ZXIoZml4ZXJfYmFzZS5Db25kaXRpb25hbEZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKIAogICAgIFBBVFRFUk4gPSAiIiIKICAgICBmaWx0ZXJfbGFtYmRhPXBvd2VyPApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Z1bmNhdHRycy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9mdW5jYXR0cnMucHkKaW5kZXggNWQxYmE4Yy4uOWU0NWMwMiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Z1bmNhdHRycy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZnVuY2F0dHJzLnB5CkBAIC03LDYgKzcsOCBAQAogCiAKIGNsYXNzIEZpeEZ1bmNhdHRycyhmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCisKICAgICBQQVRURVJOID0gIiIiCiAgICAgcG93ZXI8IGFueSsgdHJhaWxlcjwgJy4nIGF0dHI9KCdmdW5jX2Nsb3N1cmUnIHwgJ2Z1bmNfZG9jJyB8ICdmdW5jX2dsb2JhbHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAnZnVuY19uYW1lJyB8ICdmdW5jX2RlZmF1bHRzJyB8ICdmdW5jX2NvZGUnCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZnV0dXJlLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Z1dHVyZS5weQppbmRleCA4NjFlMTNjLi5mYmNiODZhIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZnV0dXJlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9mdXR1cmUucHkKQEAgLTksNiArOSw4IEBACiBmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgQmxhbmtMaW5lCiAKIGNsYXNzIEZpeEZ1dHVyZShmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCisKICAgICBQQVRURVJOID0gIiIiaW1wb3J0X2Zyb208ICdmcm9tJyBtb2R1bGVfbmFtZT0iX19mdXR1cmVfXyIgJ2ltcG9ydCcgYW55ID4iIiIKIAogICAgICMgVGhpcyBzaG91bGQgYmUgcnVuIGxhc3QgLS0gc29tZSB0aGluZ3MgY2hlY2sgZm9yIHRoZSBpbXBvcnQKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9nZXRjd2R1LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2dldGN3ZHUucHkKaW5kZXggYTViNWFhMy4uODIyMzNjOCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2dldGN3ZHUucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2dldGN3ZHUucHkKQEAgLTgsNiArOCw3IEBACiBmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgTmFtZQogCiBjbGFzcyBGaXhHZXRjd2R1KGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKIAogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgICAgICAgcG93ZXI8ICdvcycgdHJhaWxlcjwgZG90PScuJyBuYW1lPSdnZXRjd2R1JyA+IGFueSogPgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2hhc19rZXkucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaGFzX2tleS5weQppbmRleCAwOTE1YTM2Li5iZWFkNGNiIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaGFzX2tleS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaGFzX2tleS5weQpAQCAtMzcsNiArMzcsNyBAQAogCiAKIGNsYXNzIEZpeEhhc0tleShmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAKICAgICBQQVRURVJOID0gIiIiCiAgICAgYW5jaG9yPXBvd2VyPApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lkaW9tcy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pZGlvbXMucHkKaW5kZXggYzA3Yjc3ZS4uMzdiNmVlZiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lkaW9tcy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaWRpb21zLnB5CkBAIC0zNSw3ICszNSw2IEBACiBUWVBFID0gInBvd2VyPCAndHlwZScgdHJhaWxlcjwgJygnIHg9YW55ICcpJyA+ID4iCiAKIGNsYXNzIEZpeElkaW9tcyhmaXhlcl9iYXNlLkJhc2VGaXgpOgotCiAgICAgZXhwbGljaXQgPSBUcnVlICMgVGhlIHVzZXIgbXVzdCBhc2sgZm9yIHRoaXMgZml4ZXIKIAogICAgIFBBVFRFUk4gPSByIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW1wb3J0LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ltcG9ydC5weQppbmRleCBkMzVmYTBjLi4yMDFlODExIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW1wb3J0LnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbXBvcnQucHkKQEAgLTM2LDYgKzM2LDcgQEAKIAogCiBjbGFzcyBGaXhJbXBvcnQoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIGltcG9ydF9mcm9tPCAnZnJvbScgaW1wPWFueSAnaW1wb3J0JyBbJygnXSBhbnkgWycpJ10gPgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ltcG9ydHMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW1wb3J0cy5weQppbmRleCBlMWFkNjY3Li45M2M5ZTY3IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW1wb3J0cy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW1wb3J0cy5weQpAQCAtODQsNiArODQsOCBAQAogCiBjbGFzcyBGaXhJbXBvcnRzKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CiAKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorICAgIGtlZXBfbGluZV9vcmRlciA9IFRydWUKICAgICAjIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBmaXhfaW1wb3J0czIuCiAgICAgbWFwcGluZyA9IE1BUFBJTkcKIApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lucHV0LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lucHV0LnB5CmluZGV4IDI5MWNhZGYuLmZiZjRjNzIgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnB1dC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW5wdXQucHkKQEAgLTExLDcgKzExLDcgQEAKIAogCiBjbGFzcyBGaXhJbnB1dChmaXhlcl9iYXNlLkJhc2VGaXgpOgotCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIiIiCiAgICAgICAgICAgICAgIHBvd2VyPCAnaW5wdXQnIGFyZ3M9dHJhaWxlcjwgJygnIFthbnldICcpJyA+ID4KICAgICAgICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQppbmRleCA2N2Y5OGVmLi5lN2JiNTA1IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKQEAgLTEyLDYgKzEyLDggQEAKIAogCiBjbGFzcyBGaXhJbnRlcm4oZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorICAgIG9yZGVyID0gInByZSIKIAogICAgIFBBVFRFUk4gPSAiIiIKICAgICBwb3dlcjwgJ2ludGVybicKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pc2luc3RhbmNlLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lzaW5zdGFuY2UucHkKaW5kZXggYzcyMGE4My4uNGIwNGM4ZiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lzaW5zdGFuY2UucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lzaW5zdGFuY2UucHkKQEAgLTE0LDcgKzE0LDcgQEAKIAogCiBjbGFzcyBGaXhJc2luc3RhbmNlKGZpeGVyX2Jhc2UuQmFzZUZpeCk6Ci0KKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiIiIKICAgICBwb3dlcjwKICAgICAgICAgJ2lzaW5zdGFuY2UnCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaXRlcnRvb2xzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2l0ZXJ0b29scy5weQppbmRleCA3N2IzYTAxLi41MzkxYTM3IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaXRlcnRvb2xzLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pdGVydG9vbHMucHkKQEAgLTEyLDYgKzEyLDcgQEAKIGZyb20gLi5maXhlcl91dGlsIGltcG9ydCBOYW1lCiAKIGNsYXNzIEZpeEl0ZXJ0b29scyhmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgaXRfZnVuY3MgPSAiKCdpbWFwJ3wnaWZpbHRlcid8J2l6aXAnfCdpZmlsdGVyZmFsc2UnKSIKICAgICBQQVRURVJOID0gIiIiCiAgICAgICAgICAgICAgIHBvd2VyPCBpdD0naXRlcnRvb2xzJwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2l0ZXJ0b29sc19pbXBvcnRzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2l0ZXJ0b29sc19pbXBvcnRzLnB5CmluZGV4IGM3MjIzZGUuLmMxZGViMDMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pdGVydG9vbHNfaW1wb3J0cy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaXRlcnRvb2xzX2ltcG9ydHMucHkKQEAgLTYsNiArNiw3IEBACiAKIAogY2xhc3MgRml4SXRlcnRvb2xzSW1wb3J0cyhmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICIiIgogICAgICAgICAgICAgICBpbXBvcnRfZnJvbTwgJ2Zyb20nICdpdGVydG9vbHMnICdpbXBvcnQnIGltcG9ydHM9YW55ID4KICAgICAgICAgICAgICAgIiIiICUobG9jYWxzKCkpCkBAIC0yMCw2ICsyMSw5IEBACiAgICAgICAgICAgICBpZiBjaGlsZC50eXBlID09IHRva2VuLk5BTUU6CiAgICAgICAgICAgICAgICAgbWVtYmVyID0gY2hpbGQudmFsdWUKICAgICAgICAgICAgICAgICBuYW1lX25vZGUgPSBjaGlsZAorICAgICAgICAgICAgZWxpZiBjaGlsZC50eXBlID09IHRva2VuLlNUQVI6CisgICAgICAgICAgICAgICAgIyBKdXN0IGxlYXZlIHRoZSBpbXBvcnQgYXMgaXMuCisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGFzc2VydCBjaGlsZC50eXBlID09IHN5bXMuaW1wb3J0X2FzX25hbWUKICAgICAgICAgICAgICAgICBuYW1lX25vZGUgPSBjaGlsZC5jaGlsZHJlblswXQpAQCAtNDAsMTIgKzQ0LDEyIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlbW92ZV9jb21tYSBePSBUcnVlCiAKLSAgICAgICAgaWYgY2hpbGRyZW5bLTFdLnR5cGUgPT0gdG9rZW4uQ09NTUE6Ci0gICAgICAgICAgICBjaGlsZHJlblstMV0ucmVtb3ZlKCkKKyAgICAgICAgd2hpbGUgY2hpbGRyZW4gYW5kIGNoaWxkcmVuWy0xXS50eXBlID09IHRva2VuLkNPTU1BOgorICAgICAgICAgICAgY2hpbGRyZW4ucG9wKCkucmVtb3ZlKCkKIAogICAgICAgICAjIElmIHRoZXJlIGFyZSBubyBpbXBvcnRzIGxlZnQsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgZW50aXJlIHN0YXRlbWVudAotICAgICAgICBpZiBub3QgKGltcG9ydHMuY2hpbGRyZW4gb3IgZ2V0YXR0cihpbXBvcnRzLCAndmFsdWUnLCBOb25lKSkgb3IgXAotICAgICAgICAgICAgICAgIGltcG9ydHMucGFyZW50IGlzIE5vbmU6CisgICAgICAgIGlmIChub3QgKGltcG9ydHMuY2hpbGRyZW4gb3IgZ2V0YXR0cihpbXBvcnRzLCAndmFsdWUnLCBOb25lKSkgb3IKKyAgICAgICAgICAgIGltcG9ydHMucGFyZW50IGlzIE5vbmUpOgogICAgICAgICAgICAgcCA9IG5vZGUucHJlZml4CiAgICAgICAgICAgICBub2RlID0gQmxhbmtMaW5lKCkKICAgICAgICAgICAgIG5vZGUucHJlZml4ID0gcApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2xvbmcucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbG9uZy5weQppbmRleCA2ZjM2NjFjLi41ZGRkZGUwIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfbG9uZy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbG9uZy5weQpAQCAtMTAsNyArMTAsNyBAQAogCiAKIGNsYXNzIEZpeExvbmcoZml4ZXJfYmFzZS5CYXNlRml4KToKLQorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICInbG9uZyciCiAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21hcC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tYXAucHkKaW5kZXggNmQyNjk1Ny4uN2E3ZDBkYiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21hcC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWFwLnB5CkBAIC0yNiw2ICsyNiw3IEBACiBmcm9tIC4ucHlncmFtIGltcG9ydCBweXRob25fc3ltYm9scyBhcyBzeW1zCiAKIGNsYXNzIEZpeE1hcChmaXhlcl9iYXNlLkNvbmRpdGlvbmFsRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIG1hcF9ub25lPXBvd2VyPApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGFjbGFzcy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRhY2xhc3MucHkKaW5kZXggNzg5Y2IxNi4uZjQwM2ZkNiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGFjbGFzcy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0YWNsYXNzLnB5CkBAIC0xNDMsNiArMTQzLDcgQEAKIAogCiBjbGFzcyBGaXhNZXRhY2xhc3MoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIGNsYXNzZGVmPGFueSo+CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0aG9kYXR0cnMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0aG9kYXR0cnMucHkKaW5kZXggNWU5NGE5Yy4uZjNjMWVjZiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGhvZGF0dHJzLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRob2RhdHRycy5weQpAQCAtMTMsNiArMTMsNyBAQAogICAgIH0KIAogY2xhc3MgRml4TWV0aG9kYXR0cnMoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiIiIKICAgICBwb3dlcjwgYW55KyB0cmFpbGVyPCAnLicgYXR0cj0oJ2ltX2Z1bmMnIHwgJ2ltX3NlbGYnIHwgJ2ltX2NsYXNzJykgPiBhbnkqID4KICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9uZXh0LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25leHQucHkKaW5kZXggOTUxNDc5OC4uZjAyMWE5YiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25leHQucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25leHQucHkKQEAgLTE1LDYgKzE1LDcgQEAKIAogCiBjbGFzcyBGaXhOZXh0KGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIiIiCiAgICAgcG93ZXI8IGJhc2U9YW55KyB0cmFpbGVyPCAnLicgYXR0cj0nbmV4dCcgPiB0cmFpbGVyPCAnKCcgJyknID4gPgogICAgIHwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9ub256ZXJvLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25vbnplcm8ucHkKaW5kZXggMTdiZTM3Ny4uYmE4MzQ3OCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25vbnplcm8ucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25vbnplcm8ucHkKQEAgLTYsNiArNiw3IEBACiBmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgTmFtZSwgc3ltcwogCiBjbGFzcyBGaXhOb256ZXJvKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIiIiCiAgICAgY2xhc3NkZWY8ICdjbGFzcycgYW55KyAnOicKICAgICAgICAgICAgICAgc3VpdGU8IGFueSoKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9vcGVyYXRvci5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9vcGVyYXRvci5weQppbmRleCBkOWJmMTYwLi43YmYyYzBkIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfb3BlcmF0b3IucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X29wZXJhdG9yLnB5CkBAIC0xLDQwICsxLDk2IEBACi0iIiJGaXhlciBmb3Igb3BlcmF0b3Iue2lzQ2FsbGFibGUsc2VxdWVuY2VJbmNsdWRlc30KKyIiIkZpeGVyIGZvciBvcGVyYXRvciBmdW5jdGlvbnMuCiAKLW9wZXJhdG9yLmlzQ2FsbGFibGUob2JqKSAtPiBoYXNhdHRyKG9iaiwgJ19fY2FsbF9fJykKK29wZXJhdG9yLmlzQ2FsbGFibGUob2JqKSAgICAgICAtPiBoYXNhdHRyKG9iaiwgJ19fY2FsbF9fJykKIG9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXMob2JqKSAtPiBvcGVyYXRvci5jb250YWlucyhvYmopCitvcGVyYXRvci5pc1NlcXVlbmNlVHlwZShvYmopICAgLT4gaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLlNlcXVlbmNlKQorb3BlcmF0b3IuaXNNYXBwaW5nVHlwZShvYmopICAgIC0+IGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5NYXBwaW5nKQorb3BlcmF0b3IuaXNOdW1iZXJUeXBlKG9iaikgICAgIC0+IGlzaW5zdGFuY2Uob2JqLCBudW1iZXJzLk51bWJlcikKK29wZXJhdG9yLnJlcGVhdChvYmosIG4pICAgICAgICAtPiBvcGVyYXRvci5tdWwob2JqLCBuKQorb3BlcmF0b3IuaXJlcGVhdChvYmosIG4pICAgICAgIC0+IG9wZXJhdG9yLmltdWwob2JqLCBuKQogIiIiCiAKICMgTG9jYWwgaW1wb3J0cwotZnJvbSAuLiBpbXBvcnQgZml4ZXJfYmFzZQotZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IENhbGwsIE5hbWUsIFN0cmluZworZnJvbSBsaWIydG8zIGltcG9ydCBmaXhlcl9iYXNlCitmcm9tIGxpYjJ0bzMuZml4ZXJfdXRpbCBpbXBvcnQgQ2FsbCwgTmFtZSwgU3RyaW5nLCB0b3VjaF9pbXBvcnQKKworCitkZWYgaW52b2NhdGlvbihzKToKKyAgICBkZWYgZGVjKGYpOgorICAgICAgICBmLmludm9jYXRpb24gPSBzCisgICAgICAgIHJldHVybiBmCisgICAgcmV0dXJuIGRlYworCiAKIGNsYXNzIEZpeE9wZXJhdG9yKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKyAgICBvcmRlciA9ICJwcmUiCiAKLSAgICBtZXRob2RzID0gIm1ldGhvZD0oJ2lzQ2FsbGFibGUnfCdzZXF1ZW5jZUluY2x1ZGVzJykiCi0gICAgZnVuYyA9ICInKCcgZnVuYz1hbnkgJyknIgorICAgIG1ldGhvZHMgPSAiIiIKKyAgICAgICAgICAgICAgbWV0aG9kPSgnaXNDYWxsYWJsZSd8J3NlcXVlbmNlSW5jbHVkZXMnCisgICAgICAgICAgICAgICAgICAgICB8J2lzU2VxdWVuY2VUeXBlJ3wnaXNNYXBwaW5nVHlwZSd8J2lzTnVtYmVyVHlwZScKKyAgICAgICAgICAgICAgICAgICAgIHwncmVwZWF0J3wnaXJlcGVhdCcpCisgICAgICAgICAgICAgICIiIgorICAgIG9iaiA9ICInKCcgb2JqPWFueSAnKSciCiAgICAgUEFUVEVSTiA9ICIiIgogICAgICAgICAgICAgICBwb3dlcjwgbW9kdWxlPSdvcGVyYXRvcicKLSAgICAgICAgICAgICAgICB0cmFpbGVyPCAnLicgJShtZXRob2RzKXMgPiB0cmFpbGVyPCAlKGZ1bmMpcyA+ID4KKyAgICAgICAgICAgICAgICB0cmFpbGVyPCAnLicgJShtZXRob2RzKXMgPiB0cmFpbGVyPCAlKG9iailzID4gPgogICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgIHBvd2VyPCAlKG1ldGhvZHMpcyB0cmFpbGVyPCAlKGZ1bmMpcyA+ID4KLSAgICAgICAgICAgICAgIiIiICUgZGljdChtZXRob2RzPW1ldGhvZHMsIGZ1bmM9ZnVuYykKKyAgICAgICAgICAgICAgcG93ZXI8ICUobWV0aG9kcylzIHRyYWlsZXI8ICUob2JqKXMgPiA+CisgICAgICAgICAgICAgICIiIiAlIGRpY3QobWV0aG9kcz1tZXRob2RzLCBvYmo9b2JqKQogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKLSAgICAgICAgbWV0aG9kID0gcmVzdWx0c1sibWV0aG9kIl1bMF0KKyAgICAgICAgbWV0aG9kID0gc2VsZi5fY2hlY2tfbWV0aG9kKG5vZGUsIHJlc3VsdHMpCisgICAgICAgIGlmIG1ldGhvZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBtZXRob2Qobm9kZSwgcmVzdWx0cykKIAotICAgICAgICBpZiBtZXRob2QudmFsdWUgPT0gdSJzZXF1ZW5jZUluY2x1ZGVzIjoKLSAgICAgICAgICAgIGlmICJtb2R1bGUiIG5vdCBpbiByZXN1bHRzOgotICAgICAgICAgICAgICAgICMgb3BlcmF0b3IgbWF5IG5vdCBiZSBpbiBzY29wZSwgc28gd2UgY2FuJ3QgbWFrZSBhIGNoYW5nZS4KLSAgICAgICAgICAgICAgICBzZWxmLndhcm5pbmcobm9kZSwgIllvdSBzaG91bGQgdXNlIG9wZXJhdG9yLmNvbnRhaW5zIGhlcmUuIikKKyAgICBAaW52b2NhdGlvbigib3BlcmF0b3IuY29udGFpbnMoJXMpIikKKyAgICBkZWYgX3NlcXVlbmNlSW5jbHVkZXMoc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfcmVuYW1lKG5vZGUsIHJlc3VsdHMsIHUiY29udGFpbnMiKQorCisgICAgQGludm9jYXRpb24oImhhc2F0dHIoJXMsICdfX2NhbGxfXycpIikKKyAgICBkZWYgX2lzQ2FsbGFibGUoc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIG9iaiA9IHJlc3VsdHNbIm9iaiJdCisgICAgICAgIGFyZ3MgPSBbb2JqLmNsb25lKCksIFN0cmluZyh1IiwgIiksIFN0cmluZyh1IidfX2NhbGxfXyciKV0KKyAgICAgICAgcmV0dXJuIENhbGwoTmFtZSh1Imhhc2F0dHIiKSwgYXJncywgcHJlZml4PW5vZGUucHJlZml4KQorCisgICAgQGludm9jYXRpb24oIm9wZXJhdG9yLm11bCglcykiKQorICAgIGRlZiBfcmVwZWF0KHNlbGYsIG5vZGUsIHJlc3VsdHMpOgorICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlX3JlbmFtZShub2RlLCByZXN1bHRzLCB1Im11bCIpCisKKyAgICBAaW52b2NhdGlvbigib3BlcmF0b3IuaW11bCglcykiKQorICAgIGRlZiBfaXJlcGVhdChzZWxmLCBub2RlLCByZXN1bHRzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZV9yZW5hbWUobm9kZSwgcmVzdWx0cywgdSJpbXVsIikKKworICAgIEBpbnZvY2F0aW9uKCJpc2luc3RhbmNlKCVzLCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSkiKQorICAgIGRlZiBfaXNTZXF1ZW5jZVR5cGUoc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfdHlwZTJhYmMobm9kZSwgcmVzdWx0cywgdSJjb2xsZWN0aW9ucyIsIHUiU2VxdWVuY2UiKQorCisgICAgQGludm9jYXRpb24oImlzaW5zdGFuY2UoJXMsIGNvbGxlY3Rpb25zLk1hcHBpbmcpIikKKyAgICBkZWYgX2lzTWFwcGluZ1R5cGUoc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfdHlwZTJhYmMobm9kZSwgcmVzdWx0cywgdSJjb2xsZWN0aW9ucyIsIHUiTWFwcGluZyIpCisKKyAgICBAaW52b2NhdGlvbigiaXNpbnN0YW5jZSglcywgbnVtYmVycy5OdW1iZXIpIikKKyAgICBkZWYgX2lzTnVtYmVyVHlwZShzZWxmLCBub2RlLCByZXN1bHRzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZV90eXBlMmFiYyhub2RlLCByZXN1bHRzLCB1Im51bWJlcnMiLCB1Ik51bWJlciIpCisKKyAgICBkZWYgX2hhbmRsZV9yZW5hbWUoc2VsZiwgbm9kZSwgcmVzdWx0cywgbmFtZSk6CisgICAgICAgIG1ldGhvZCA9IHJlc3VsdHNbIm1ldGhvZCJdWzBdCisgICAgICAgIG1ldGhvZC52YWx1ZSA9IG5hbWUKKyAgICAgICAgbWV0aG9kLmNoYW5nZWQoKQorCisgICAgZGVmIF9oYW5kbGVfdHlwZTJhYmMoc2VsZiwgbm9kZSwgcmVzdWx0cywgbW9kdWxlLCBhYmMpOgorICAgICAgICB0b3VjaF9pbXBvcnQoTm9uZSwgbW9kdWxlLCBub2RlKQorICAgICAgICBvYmogPSByZXN1bHRzWyJvYmoiXQorICAgICAgICBhcmdzID0gW29iai5jbG9uZSgpLCBTdHJpbmcodSIsICIgKyB1Ii4iLmpvaW4oW21vZHVsZSwgYWJjXSkpXQorICAgICAgICByZXR1cm4gQ2FsbChOYW1lKHUiaXNpbnN0YW5jZSIpLCBhcmdzLCBwcmVmaXg9bm9kZS5wcmVmaXgpCisKKyAgICBkZWYgX2NoZWNrX21ldGhvZChzZWxmLCBub2RlLCByZXN1bHRzKToKKyAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAiXyIgKyByZXN1bHRzWyJtZXRob2QiXVswXS52YWx1ZS5lbmNvZGUoImFzY2lpIikpCisgICAgICAgIGlmIGNhbGxhYmxlKG1ldGhvZCk6CisgICAgICAgICAgICBpZiAibW9kdWxlIiBpbiByZXN1bHRzOgorICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2QKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbWV0aG9kLnZhbHVlID0gdSJjb250YWlucyIKLSAgICAgICAgICAgICAgICBtZXRob2QuY2hhbmdlZCgpCi0gICAgICAgIGVsaWYgbWV0aG9kLnZhbHVlID09IHUiaXNDYWxsYWJsZSI6Ci0gICAgICAgICAgICBpZiAibW9kdWxlIiBub3QgaW4gcmVzdWx0czoKLSAgICAgICAgICAgICAgICBzZWxmLndhcm5pbmcobm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdSBzaG91bGQgdXNlIGhhc2F0dHIoJXMsICdfX2NhbGxfXycpIGhlcmUuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbImZ1bmMiXS52YWx1ZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZnVuYyA9IHJlc3VsdHNbImZ1bmMiXQotICAgICAgICAgICAgICAgIGFyZ3MgPSBbZnVuYy5jbG9uZSgpLCBTdHJpbmcodSIsICIpLCBTdHJpbmcodSInX19jYWxsX18nIildCi0gICAgICAgICAgICAgICAgcmV0dXJuIENhbGwoTmFtZSh1Imhhc2F0dHIiKSwgYXJncywgcHJlZml4PW5vZGUucHJlZml4KQorICAgICAgICAgICAgICAgIHN1YiA9ICh1bmljb2RlKHJlc3VsdHNbIm9iaiJdKSwpCisgICAgICAgICAgICAgICAgaW52b2NhdGlvbl9zdHIgPSB1bmljb2RlKG1ldGhvZC5pbnZvY2F0aW9uKSAlIHN1YgorICAgICAgICAgICAgICAgIHNlbGYud2FybmluZyhub2RlLCB1IllvdSBzaG91bGQgdXNlICclcycgaGVyZS4iICUgaW52b2NhdGlvbl9zdHIpCisgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcGFyZW4ucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcGFyZW4ucHkKaW5kZXggZWViMGQ0MC4uODY1MGNkOSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3BhcmVuLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9wYXJlbi5weQpAQCAtMTAsNiArMTAsOCBAQAogCiAjIFhYWCBUaGlzIGRvZXNuJ3Qgc3VwcG9ydCBuZXN0ZWQgZm9yIGxvb3BzIGxpa2UgW3ggZm9yIHggaW4gMSwgMiBmb3IgeCBpbiAxLCAyXQogY2xhc3MgRml4UGFyZW4oZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorCiAgICAgUEFUVEVSTiA9ICIiIgogICAgICAgICBhdG9tPCAoJ1snIHwgJygnKQogICAgICAgICAgICAgKGxpc3RtYWtlcjwgYW55CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcHJpbnQucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcHJpbnQucHkKaW5kZXggNmNhZDhjZS4uOTg3ODZiMyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3ByaW50LnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9wcmludC5weQpAQCAtMjgsNiArMjgsOCBAQAogCiBjbGFzcyBGaXhQcmludChmaXhlcl9iYXNlLkJhc2VGaXgpOgogCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKwogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgICAgICAgc2ltcGxlX3N0bXQ8IGFueSogYmFyZT0ncHJpbnQnIGFueSogPiB8IHByaW50X3N0bXQKICAgICAgICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcmFpc2UucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmFpc2UucHkKaW5kZXggMjRlMTIzYy4uYjk1OGJhMCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JhaXNlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yYWlzZS5weQpAQCAtNCw2ICs0LDcgQEAKIHJhaXNlIEUgICAgICAgLT4gcmFpc2UgRQogcmFpc2UgRSwgViAgICAtPiByYWlzZSBFKFYpCiByYWlzZSBFLCBWLCBUIC0+IHJhaXNlIEUoVikud2l0aF90cmFjZWJhY2soVCkKK3JhaXNlIEUsIE5vbmUsIFQgLT4gcmFpc2UgRS53aXRoX3RyYWNlYmFjayhUKQogCiByYWlzZSAoKChFLCBFJyksIEUnJyksIEUnJycpLCBWIC0+IHJhaXNlIEUoVikKIHJhaXNlICJmb28iLCBWLCBUICAgICAgICAgICAgICAgLT4gd2FybnMgYWJvdXQgc3RyaW5nIGV4Y2VwdGlvbnMKQEAgLTI5LDYgKzMwLDcgQEAKIAogY2xhc3MgRml4UmFpc2UoZml4ZXJfYmFzZS5CYXNlRml4KToKIAorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHJhaXNlX3N0bXQ8ICdyYWlzZScgZXhjPWFueSBbJywnIHZhbD1hbnkgWycsJyB0Yj1hbnldXSA+CiAgICAgIiIiCkBAIC0zNyw4ICszOSw5IEBACiAgICAgICAgIHN5bXMgPSBzZWxmLnN5bXMKIAogICAgICAgICBleGMgPSByZXN1bHRzWyJleGMiXS5jbG9uZSgpCi0gICAgICAgIGlmIGV4Yy50eXBlIGlzIHRva2VuLlNUUklORzoKLSAgICAgICAgICAgIHNlbGYuY2Fubm90X2NvbnZlcnQobm9kZSwgIlB5dGhvbiAzIGRvZXMgbm90IHN1cHBvcnQgc3RyaW5nIGV4Y2VwdGlvbnMiKQorICAgICAgICBpZiBleGMudHlwZSA9PSB0b2tlbi5TVFJJTkc6CisgICAgICAgICAgICBtc2cgPSAiUHl0aG9uIDMgZG9lcyBub3Qgc3VwcG9ydCBzdHJpbmcgZXhjZXB0aW9ucyIKKyAgICAgICAgICAgIHNlbGYuY2Fubm90X2NvbnZlcnQobm9kZSwgbXNnKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBQeXRob24gMiBzdXBwb3J0cwpAQCAtNTIsNyArNTUsNyBAQAogICAgICAgICAgICAgICAgICMgZXhjLmNoaWxkcmVuWzE6LTFdIGlzIHRoZSB1bnBhcmVudGhlc2l6ZWQgdHVwbGUKICAgICAgICAgICAgICAgICAjIGV4Yy5jaGlsZHJlblsxXS5jaGlsZHJlblswXSBpcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHVwbGUKICAgICAgICAgICAgICAgICBleGMgPSBleGMuY2hpbGRyZW5bMV0uY2hpbGRyZW5bMF0uY2xvbmUoKQotICAgICAgICAgICAgZXhjLnByZWZpeCA9ICIgIgorICAgICAgICAgICAgZXhjLnByZWZpeCA9IHUiICIKIAogICAgICAgICBpZiAidmFsIiBub3QgaW4gcmVzdWx0czoKICAgICAgICAgICAgICMgT25lLWFyZ3VtZW50IHJhaXNlCkBAIC03MSw3ICs3NCwxMiBAQAogICAgICAgICAgICAgdGIgPSByZXN1bHRzWyJ0YiJdLmNsb25lKCkKICAgICAgICAgICAgIHRiLnByZWZpeCA9IHUiIgogCi0gICAgICAgICAgICBlID0gQ2FsbChleGMsIGFyZ3MpCisgICAgICAgICAgICBlID0gZXhjCisgICAgICAgICAgICAjIElmIHRoZXJlJ3MgYSB0cmFjZWJhY2sgYW5kIE5vbmUgaXMgcGFzc2VkIGFzIHRoZSB2YWx1ZSwgdGhlbiBkb24ndAorICAgICAgICAgICAgIyBhZGQgYSBjYWxsLCBzaW5jZSB0aGUgdXNlciBwcm9iYWJseSBqdXN0IHdhbnRzIHRvIGFkZCBhCisgICAgICAgICAgICAjIHRyYWNlYmFjay4gU2VlIGlzc3VlICM5NjYxLgorICAgICAgICAgICAgaWYgdmFsLnR5cGUgIT0gdG9rZW4uTkFNRSBvciB2YWwudmFsdWUgIT0gdSJOb25lIjoKKyAgICAgICAgICAgICAgICBlID0gQ2FsbChleGMsIGFyZ3MpCiAgICAgICAgICAgICB3aXRoX3RiID0gQXR0cihlLCBOYW1lKHUnd2l0aF90cmFjZWJhY2snKSkgKyBbQXJnTGlzdChbdGJdKV0KICAgICAgICAgICAgIG5ldyA9IHB5dHJlZS5Ob2RlKHN5bXMuc2ltcGxlX3N0bXQsIFtOYW1lKHUicmFpc2UiKV0gKyB3aXRoX3RiKQogICAgICAgICAgICAgbmV3LnByZWZpeCA9IG5vZGUucHJlZml4CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcmF3X2lucHV0LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3Jhd19pbnB1dC5weQppbmRleCBiYTA0NWQ2Li4zYTczYjgxIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcmF3X2lucHV0LnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yYXdfaW5wdXQucHkKQEAgLTcsNiArNyw3IEBACiAKIGNsYXNzIEZpeFJhd0lucHV0KGZpeGVyX2Jhc2UuQmFzZUZpeCk6CiAKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgICAgICAgcG93ZXI8IG5hbWU9J3Jhd19pbnB1dCcgdHJhaWxlcjwgJygnIFthbnldICcpJyA+IGFueSogPgogICAgICAgICAgICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWR1Y2UucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVkdWNlLnB5CmluZGV4IDE5NDg2NmQuLjZiZDc4NWMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWR1Y2UucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlZHVjZS5weQpAQCAtMTQsNiArMTQsOSBAQAogCiBjbGFzcyBGaXhSZWR1Y2UoZml4ZXJfYmFzZS5CYXNlRml4KToKIAorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCisgICAgb3JkZXIgPSAicHJlIgorCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHBvd2VyPCAncmVkdWNlJwogICAgICAgICB0cmFpbGVyPCAnKCcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZW5hbWVzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlbmFtZXMucHkKaW5kZXggYTQ1MzQ1YS4uNGJjY2U4YyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlbmFtZXMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlbmFtZXMucHkKQEAgLTQwLDYgKzQwLDcgQEAKIAogCiBjbGFzcyBGaXhSZW5hbWVzKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gInwiLmpvaW4oYnVpbGRfcGF0dGVybigpKQogCiAgICAgb3JkZXIgPSAicHJlIiAjIFByZS1vcmRlciB0cmVlIHRyYXZlcnNhbApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlcHIucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVwci5weQppbmRleCA0YjM3ZTczLi5mMzQzNjU2IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVwci5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVwci5weQpAQCAtMTAsNiArMTAsNyBAQAogCiBjbGFzcyBGaXhSZXByKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CiAKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgICAgICAgYXRvbSA8ICdgJyBleHByPWFueSAnYCcgPgogICAgICAgICAgICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9zZXRfbGl0ZXJhbC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9zZXRfbGl0ZXJhbC5weQppbmRleCBjZmM1MjJjLi5kM2QzOGVjIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfc2V0X2xpdGVyYWwucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3NldF9saXRlcmFsLnB5CkBAIC0xMSw2ICsxMSw3IEBACiAKIGNsYXNzIEZpeFNldExpdGVyYWwoZml4ZXJfYmFzZS5CYXNlRml4KToKIAorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgZXhwbGljaXQgPSBUcnVlCiAKICAgICBQQVRURVJOID0gIiIicG93ZXI8ICdzZXQnIHRyYWlsZXI8ICcoJwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N0YW5kYXJkZXJyb3IucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfc3RhbmRhcmRlcnJvci5weQppbmRleCBhNTc4OWJhLi42Y2FkNTExIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfc3RhbmRhcmRlcnJvci5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfc3RhbmRhcmRlcnJvci5weQpAQCAtOSw3ICs5LDcgQEAKIAogCiBjbGFzcyBGaXhTdGFuZGFyZGVycm9yKGZpeGVyX2Jhc2UuQmFzZUZpeCk6Ci0KKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgICAgICAgJ1N0YW5kYXJkRXJyb3InCiAgICAgICAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N5c19leGMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfc3lzX2V4Yy5weQppbmRleCAzNDg5MjliLi4yZWNjYTJiIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfc3lzX2V4Yy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfc3lzX2V4Yy5weQpAQCAtMTQsNiArMTQsNyBAQAogY2xhc3MgRml4U3lzRXhjKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CiAgICAgIyBUaGlzIG9yZGVyIG1hdGNoZXMgdGhlIG9yZGVyaW5nIG9mIHN5cy5leGNfaW5mbygpLgogICAgIGV4Y19pbmZvID0gW3UiZXhjX3R5cGUiLCB1ImV4Y192YWx1ZSIsIHUiZXhjX3RyYWNlYmFjayJdCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIiIiCiAgICAgICAgICAgICAgIHBvd2VyPCAnc3lzJyB0cmFpbGVyPCBkb3Q9Jy4nIGF0dHJpYnV0ZT0oJXMpID4gPgogICAgICAgICAgICAgICAiIiIgJSAnfCcuam9pbigiJyVzJyIgJSBlIGZvciBlIGluIGV4Y19pbmZvKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3Rocm93LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3Rocm93LnB5CmluZGV4IDYzMjcxY2YuLjE0NjhkODkgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90aHJvdy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfdGhyb3cucHkKQEAgLTE0LDcgKzE0LDcgQEAKIGZyb20gLi5maXhlcl91dGlsIGltcG9ydCBOYW1lLCBDYWxsLCBBcmdMaXN0LCBBdHRyLCBpc190dXBsZQogCiBjbGFzcyBGaXhUaHJvdyhmaXhlcl9iYXNlLkJhc2VGaXgpOgotCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIiIiCiAgICAgcG93ZXI8IGFueSB0cmFpbGVyPCAnLicgJ3Rocm93JyA+CiAgICAgICAgICAgIHRyYWlsZXI8ICcoJyBhcmdzPWFyZ2xpc3Q8IGV4Yz1hbnkgJywnIHZhbD1hbnkgWycsJyB0Yj1hbnldID4gJyknID4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90dXBsZV9wYXJhbXMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfdHVwbGVfcGFyYW1zLnB5CmluZGV4IDY0N2VlYzAuLjYzNjE3MTcgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90dXBsZV9wYXJhbXMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3R1cGxlX3BhcmFtcy5weQpAQCAtMjksNiArMjksMTAgQEAKICAgICAgICAgICAgc3RtdC5jaGlsZHJlblswXS50eXBlID09IHRva2VuLlNUUklORwogCiBjbGFzcyBGaXhUdXBsZVBhcmFtcyhmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIHJ1bl9vcmRlciA9IDQgI3VzZSBhIGxvd2VyIG9yZGVyIHNpbmNlIGxhbWJkYSBpcyBwYXJ0IG9mIG90aGVyCisgICAgICAgICAgICAgICAgICAjcGF0dGVybnMKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorCiAgICAgUEFUVEVSTiA9ICIiIgogICAgICAgICAgICAgICBmdW5jZGVmPCAnZGVmJyBhbnkgcGFyYW1ldGVyczwgJygnIGFyZ3M9YW55ICcpJyA+CiAgICAgICAgICAgICAgICAgICAgICAgIFsnLT4nIGFueV0gJzonIHN1aXRlPWFueSsgPgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3R5cGVzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3R5cGVzLnB5CmluZGV4IDJmYmJhYjguLmZjOWQ0OTUgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90eXBlcy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfdHlwZXMucHkKQEAgLTUyLDcgKzUyLDcgQEAKIF9wYXRzID0gWyJwb3dlcjwgJ3R5cGVzJyB0cmFpbGVyPCAnLicgbmFtZT0nJXMnID4gPiIgJSB0IGZvciB0IGluIF9UWVBFX01BUFBJTkddCiAKIGNsYXNzIEZpeFR5cGVzKGZpeGVyX2Jhc2UuQmFzZUZpeCk6Ci0KKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAnfCcuam9pbihfcGF0cykKIAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfdW5pY29kZS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF91bmljb2RlLnB5CmluZGV4IGNkM2I4OWMuLjZjODk1NzYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF91bmljb2RlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF91bmljb2RlLnB5CkBAIC0xMCw3ICsxMCw3IEBACiBfbGl0ZXJhbF9yZSA9IHJlLmNvbXBpbGUodXIiW3VVXVtyUl0/W1wnXCJdIikKIAogY2xhc3MgRml4VW5pY29kZShmaXhlcl9iYXNlLkJhc2VGaXgpOgotCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIlNUUklORyB8ICd1bmljb2RlJyB8ICd1bmljaHInIgogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF91cmxsaWIucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfdXJsbGliLnB5CmluZGV4IGRiMThjYTguLjM0ZTFiMjcgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF91cmxsaWIucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3VybGxpYi5weQpAQCAtNSwzOSArNSw0MCBAQAogIyBBdXRob3I6IE5pY2sgRWRkcwogCiAjIExvY2FsIGltcG9ydHMKLWZyb20gLmZpeF9pbXBvcnRzIGltcG9ydCBhbHRlcm5hdGVzLCBGaXhJbXBvcnRzCi1mcm9tIC4uIGltcG9ydCBmaXhlcl9iYXNlCi1mcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgTmFtZSwgQ29tbWEsIEZyb21JbXBvcnQsIE5ld2xpbmUsIGF0dHJfY2hhaW4KK2Zyb20gbGliMnRvMy5maXhlcy5maXhfaW1wb3J0cyBpbXBvcnQgYWx0ZXJuYXRlcywgRml4SW1wb3J0cworZnJvbSBsaWIydG8zIGltcG9ydCBmaXhlcl9iYXNlCitmcm9tIGxpYjJ0bzMuZml4ZXJfdXRpbCBpbXBvcnQgKE5hbWUsIENvbW1hLCBGcm9tSW1wb3J0LCBOZXdsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX2luZGVudGF0aW9uLCBOb2RlLCBzeW1zKQogCi1NQVBQSU5HID0geyd1cmxsaWInOiAgWwotICAgICAgICAgICAgICAgICgndXJsbGliLnJlcXVlc3QnLAotICAgICAgICAgICAgICAgICAgICBbJ1VSTE9wZW5lcicsICdGYW5jeVVSTE9wZW5lcicsICd1cmxyZXRyaWV2ZScsCi0gICAgICAgICAgICAgICAgICAgICAnX3VybG9wZW5lcicsICd1cmxvcGVuJywgJ3VybGNsZWFudXAnLAotICAgICAgICAgICAgICAgICAgICAgJ3BhdGhuYW1lMnVybCcsICd1cmwycGF0aG5hbWUnXSksCi0gICAgICAgICAgICAgICAgKCd1cmxsaWIucGFyc2UnLAotICAgICAgICAgICAgICAgICAgICBbJ3F1b3RlJywgJ3F1b3RlX3BsdXMnLCAndW5xdW90ZScsICd1bnF1b3RlX3BsdXMnLAotICAgICAgICAgICAgICAgICAgICAgJ3VybGVuY29kZScsICdzcGxpdGF0dHInLCAnc3BsaXRob3N0JywgJ3NwbGl0bnBvcnQnLAotICAgICAgICAgICAgICAgICAgICAgJ3NwbGl0cGFzc3dkJywgJ3NwbGl0cG9ydCcsICdzcGxpdHF1ZXJ5JywgJ3NwbGl0dGFnJywKLSAgICAgICAgICAgICAgICAgICAgICdzcGxpdHR5cGUnLCAnc3BsaXR1c2VyJywgJ3NwbGl0dmFsdWUnLCBdKSwKLSAgICAgICAgICAgICAgICAoJ3VybGxpYi5lcnJvcicsCi0gICAgICAgICAgICAgICAgICAgIFsnQ29udGVudFRvb1Nob3J0RXJyb3InXSldLAotICAgICAgICAgICAndXJsbGliMicgOiBbCi0gICAgICAgICAgICAgICAgKCd1cmxsaWIucmVxdWVzdCcsCi0gICAgICAgICAgICAgICAgICAgIFsndXJsb3BlbicsICdpbnN0YWxsX29wZW5lcicsICdidWlsZF9vcGVuZXInLAotICAgICAgICAgICAgICAgICAgICAgJ1JlcXVlc3QnLCAnT3BlbmVyRGlyZWN0b3InLCAnQmFzZUhhbmRsZXInLAotICAgICAgICAgICAgICAgICAgICAgJ0hUVFBEZWZhdWx0RXJyb3JIYW5kbGVyJywgJ0hUVFBSZWRpcmVjdEhhbmRsZXInLAotICAgICAgICAgICAgICAgICAgICAgJ0hUVFBDb29raWVQcm9jZXNzb3InLCAnUHJveHlIYW5kbGVyJywKLSAgICAgICAgICAgICAgICAgICAgICdIVFRQUGFzc3dvcmRNZ3InLAotICAgICAgICAgICAgICAgICAgICAgJ0hUVFBQYXNzd29yZE1ncldpdGhEZWZhdWx0UmVhbG0nLAotICAgICAgICAgICAgICAgICAgICAgJ0Fic3RyYWN0QmFzaWNBdXRoSGFuZGxlcicsCi0gICAgICAgICAgICAgICAgICAgICAnSFRUUEJhc2ljQXV0aEhhbmRsZXInLCAnUHJveHlCYXNpY0F1dGhIYW5kbGVyJywKLSAgICAgICAgICAgICAgICAgICAgICdBYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVyJywKLSAgICAgICAgICAgICAgICAgICAgICdIVFRQRGlnZXN0QXV0aEhhbmRsZXInLCAnUHJveHlEaWdlc3RBdXRoSGFuZGxlcicsCi0gICAgICAgICAgICAgICAgICAgICAnSFRUUEhhbmRsZXInLCAnSFRUUFNIYW5kbGVyJywgJ0ZpbGVIYW5kbGVyJywKLSAgICAgICAgICAgICAgICAgICAgICdGVFBIYW5kbGVyJywgJ0NhY2hlRlRQSGFuZGxlcicsCi0gICAgICAgICAgICAgICAgICAgICAnVW5rbm93bkhhbmRsZXInXSksCi0gICAgICAgICAgICAgICAgKCd1cmxsaWIuZXJyb3InLAotICAgICAgICAgICAgICAgICAgICBbJ1VSTEVycm9yJywgJ0hUVFBFcnJvciddKSwKK01BUFBJTkcgPSB7InVybGxpYiI6ICBbCisgICAgICAgICAgICAgICAgKCJ1cmxsaWIucmVxdWVzdCIsCisgICAgICAgICAgICAgICAgICAgIFsiVVJMb3BlbmVyIiwgIkZhbmN5VVJMb3BlbmVyIiwgInVybHJldHJpZXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICJfdXJsb3BlbmVyIiwgInVybG9wZW4iLCAidXJsY2xlYW51cCIsCisgICAgICAgICAgICAgICAgICAgICAicGF0aG5hbWUydXJsIiwgInVybDJwYXRobmFtZSJdKSwKKyAgICAgICAgICAgICAgICAoInVybGxpYi5wYXJzZSIsCisgICAgICAgICAgICAgICAgICAgIFsicXVvdGUiLCAicXVvdGVfcGx1cyIsICJ1bnF1b3RlIiwgInVucXVvdGVfcGx1cyIsCisgICAgICAgICAgICAgICAgICAgICAidXJsZW5jb2RlIiwgInNwbGl0YXR0ciIsICJzcGxpdGhvc3QiLCAic3BsaXRucG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAic3BsaXRwYXNzd2QiLCAic3BsaXRwb3J0IiwgInNwbGl0cXVlcnkiLCAic3BsaXR0YWciLAorICAgICAgICAgICAgICAgICAgICAgInNwbGl0dHlwZSIsICJzcGxpdHVzZXIiLCAic3BsaXR2YWx1ZSIsIF0pLAorICAgICAgICAgICAgICAgICgidXJsbGliLmVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgWyJDb250ZW50VG9vU2hvcnRFcnJvciJdKV0sCisgICAgICAgICAgICJ1cmxsaWIyIiA6IFsKKyAgICAgICAgICAgICAgICAoInVybGxpYi5yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgWyJ1cmxvcGVuIiwgImluc3RhbGxfb3BlbmVyIiwgImJ1aWxkX29wZW5lciIsCisgICAgICAgICAgICAgICAgICAgICAiUmVxdWVzdCIsICJPcGVuZXJEaXJlY3RvciIsICJCYXNlSGFuZGxlciIsCisgICAgICAgICAgICAgICAgICAgICAiSFRUUERlZmF1bHRFcnJvckhhbmRsZXIiLCAiSFRUUFJlZGlyZWN0SGFuZGxlciIsCisgICAgICAgICAgICAgICAgICAgICAiSFRUUENvb2tpZVByb2Nlc3NvciIsICJQcm94eUhhbmRsZXIiLAorICAgICAgICAgICAgICAgICAgICAgIkhUVFBQYXNzd29yZE1nciIsCisgICAgICAgICAgICAgICAgICAgICAiSFRUUFBhc3N3b3JkTWdyV2l0aERlZmF1bHRSZWFsbSIsCisgICAgICAgICAgICAgICAgICAgICAiQWJzdHJhY3RCYXNpY0F1dGhIYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICJIVFRQQmFzaWNBdXRoSGFuZGxlciIsICJQcm94eUJhc2ljQXV0aEhhbmRsZXIiLAorICAgICAgICAgICAgICAgICAgICAgIkFic3RyYWN0RGlnZXN0QXV0aEhhbmRsZXIiLAorICAgICAgICAgICAgICAgICAgICAgIkhUVFBEaWdlc3RBdXRoSGFuZGxlciIsICJQcm94eURpZ2VzdEF1dGhIYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICJIVFRQSGFuZGxlciIsICJIVFRQU0hhbmRsZXIiLCAiRmlsZUhhbmRsZXIiLAorICAgICAgICAgICAgICAgICAgICAgIkZUUEhhbmRsZXIiLCAiQ2FjaGVGVFBIYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICJVbmtub3duSGFuZGxlciJdKSwKKyAgICAgICAgICAgICAgICAoInVybGxpYi5lcnJvciIsCisgICAgICAgICAgICAgICAgICAgIFsiVVJMRXJyb3IiLCAiSFRUUEVycm9yIl0pLAogICAgICAgICAgICBdCiB9CiAKQEAgLTc4LDcgKzc5LDcgQEAKICAgICAgICAgICAgaW1wb3J0IG5hbWUgd2l0aCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGl0cwogICAgICAgICAgICByZXBsYWNlbWVudHMuCiAgICAgICAgICIiIgotICAgICAgICBpbXBvcnRfbW9kID0gcmVzdWx0cy5nZXQoJ21vZHVsZScpCisgICAgICAgIGltcG9ydF9tb2QgPSByZXN1bHRzLmdldCgibW9kdWxlIikKICAgICAgICAgcHJlZiA9IGltcG9ydF9tb2QucHJlZml4CiAKICAgICAgICAgbmFtZXMgPSBbXQpAQCAtOTQsOSArOTUsOSBAQAogICAgICAgICAgICB0aGUgbW9kdWxlIHRvIGJlIGltcG9ydGVkIGZyb20gd2l0aCB0aGUgYXBwcm9wcmlhdGUgbmV3CiAgICAgICAgICAgIG1vZHVsZS4KICAgICAgICAgIiIiCi0gICAgICAgIG1vZF9tZW1iZXIgPSByZXN1bHRzLmdldCgnbW9kX21lbWJlcicpCisgICAgICAgIG1vZF9tZW1iZXIgPSByZXN1bHRzLmdldCgibW9kX21lbWJlciIpCiAgICAgICAgIHByZWYgPSBtb2RfbWVtYmVyLnByZWZpeAotICAgICAgICBtZW1iZXIgPSByZXN1bHRzLmdldCgnbWVtYmVyJykKKyAgICAgICAgbWVtYmVyID0gcmVzdWx0cy5nZXQoIm1lbWJlciIpCiAKICAgICAgICAgIyBTaW1wbGUgY2FzZSB3aXRoIG9ubHkgYSBzaW5nbGUgbWVtYmVyIGJlaW5nIGltcG9ydGVkCiAgICAgICAgIGlmIG1lbWJlcjoKQEAgLTExMSwzNSArMTEyLDUxIEBACiAgICAgICAgICAgICBpZiBuZXdfbmFtZToKICAgICAgICAgICAgICAgICBtb2RfbWVtYmVyLnJlcGxhY2UoTmFtZShuZXdfbmFtZSwgcHJlZml4PXByZWYpKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmNhbm5vdF9jb252ZXJ0KG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBpcyBhbiBpbnZhbGlkIG1vZHVsZSBlbGVtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNhbm5vdF9jb252ZXJ0KG5vZGUsICJUaGlzIGlzIGFuIGludmFsaWQgbW9kdWxlIGVsZW1lbnQiKQogCiAgICAgICAgICMgTXVsdGlwbGUgbWVtYmVycyBiZWluZyBpbXBvcnRlZAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBhIGRpY3Rpb25hcnkgZm9yIHJlcGxhY2VtZW50cywgb3JkZXIgbWF0dGVycwogICAgICAgICAgICAgbW9kdWxlcyA9IFtdCiAgICAgICAgICAgICBtb2RfZGljdCA9IHt9Ci0gICAgICAgICAgICBtZW1iZXJzID0gcmVzdWx0cy5nZXQoJ21lbWJlcnMnKQorICAgICAgICAgICAgbWVtYmVycyA9IHJlc3VsdHNbIm1lbWJlcnMiXQogICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBtZW1iZXJzOgotICAgICAgICAgICAgICAgIG1lbWJlciA9IG1lbWJlci52YWx1ZQogICAgICAgICAgICAgICAgICMgd2Ugb25seSBjYXJlIGFib3V0IHRoZSBhY3R1YWwgbWVtYmVycwotICAgICAgICAgICAgICAgIGlmIG1lbWJlciAhPSAnLCc6CisgICAgICAgICAgICAgICAgaWYgbWVtYmVyLnR5cGUgPT0gc3ltcy5pbXBvcnRfYXNfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgYXNfbmFtZSA9IG1lbWJlci5jaGlsZHJlblsyXS52YWx1ZQorICAgICAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSA9IG1lbWJlci5jaGlsZHJlblswXS52YWx1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1lbWJlcl9uYW1lID0gbWVtYmVyLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGFzX25hbWUgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgbWVtYmVyX25hbWUgIT0gdSIsIjoKICAgICAgICAgICAgICAgICAgICAgZm9yIGNoYW5nZSBpbiBNQVBQSU5HW21vZF9tZW1iZXIudmFsdWVdOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWVtYmVyIGluIGNoYW5nZVsxXToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFuZ2VbMF0gaW4gbW9kX2RpY3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9kaWN0W2NoYW5nZVswXV0uYXBwZW5kKG1lbWJlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfZGljdFtjaGFuZ2VbMF1dID0gW21lbWJlcl0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1lbWJlcl9uYW1lIGluIGNoYW5nZVsxXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFuZ2VbMF0gbm90IGluIG1vZF9kaWN0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzLmFwcGVuZChjaGFuZ2VbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX2RpY3Quc2V0ZGVmYXVsdChjaGFuZ2VbMF0sIFtdKS5hcHBlbmQobWVtYmVyKQogCiAgICAgICAgICAgICBuZXdfbm9kZXMgPSBbXQorICAgICAgICAgICAgaW5kZW50YXRpb24gPSBmaW5kX2luZGVudGF0aW9uKG5vZGUpCisgICAgICAgICAgICBmaXJzdCA9IFRydWUKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfbmFtZShuYW1lLCBwcmVmaXgpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUudHlwZSA9PSBzeW1zLmltcG9ydF9hc19uYW1lOgorICAgICAgICAgICAgICAgICAgICBraWRzID0gW05hbWUobmFtZS5jaGlsZHJlblswXS52YWx1ZSwgcHJlZml4PXByZWZpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5jaGlsZHJlblsxXS5jbG9uZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuY2hpbGRyZW5bMl0uY2xvbmUoKV0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtOb2RlKHN5bXMuaW1wb3J0X2FzX25hbWUsIGtpZHMpXQorICAgICAgICAgICAgICAgIHJldHVybiBbTmFtZShuYW1lLnZhbHVlLCBwcmVmaXg9cHJlZml4KV0KICAgICAgICAgICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKICAgICAgICAgICAgICAgICBlbHRzID0gbW9kX2RpY3RbbW9kdWxlXQogICAgICAgICAgICAgICAgIG5hbWVzID0gW10KICAgICAgICAgICAgICAgICBmb3IgZWx0IGluIGVsdHNbOi0xXToKLSAgICAgICAgICAgICAgICAgICAgbmFtZXMuZXh0ZW5kKFtOYW1lKGVsdCwgcHJlZml4PXByZWYpLCBDb21tYSgpXSkKLSAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoTmFtZShlbHRzWy0xXSwgcHJlZml4PXByZWYpKQotICAgICAgICAgICAgICAgIG5ld19ub2Rlcy5hcHBlbmQoRnJvbUltcG9ydChtb2R1bGUsIG5hbWVzKSkKKyAgICAgICAgICAgICAgICAgICAgbmFtZXMuZXh0ZW5kKGhhbmRsZV9uYW1lKGVsdCwgcHJlZikpCisgICAgICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChDb21tYSgpKQorICAgICAgICAgICAgICAgIG5hbWVzLmV4dGVuZChoYW5kbGVfbmFtZShlbHRzWy0xXSwgcHJlZikpCisgICAgICAgICAgICAgICAgbmV3ID0gRnJvbUltcG9ydChtb2R1bGUsIG5hbWVzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBmaXJzdCBvciBub2RlLnBhcmVudC5wcmVmaXguZW5kc3dpdGgoaW5kZW50YXRpb24pOgorICAgICAgICAgICAgICAgICAgICBuZXcucHJlZml4ID0gaW5kZW50YXRpb24KKyAgICAgICAgICAgICAgICBuZXdfbm9kZXMuYXBwZW5kKG5ldykKKyAgICAgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCiAgICAgICAgICAgICBpZiBuZXdfbm9kZXM6CiAgICAgICAgICAgICAgICAgbm9kZXMgPSBbXQogICAgICAgICAgICAgICAgIGZvciBuZXdfbm9kZSBpbiBuZXdfbm9kZXNbOi0xXToKQEAgLTE0NywxMiArMTY0LDEyIEBACiAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG5ld19ub2Rlc1stMV0pCiAgICAgICAgICAgICAgICAgbm9kZS5yZXBsYWNlKG5vZGVzKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmNhbm5vdF9jb252ZXJ0KG5vZGUsICdBbGwgbW9kdWxlIGVsZW1lbnRzIGFyZSBpbnZhbGlkJykKKyAgICAgICAgICAgICAgICBzZWxmLmNhbm5vdF9jb252ZXJ0KG5vZGUsICJBbGwgbW9kdWxlIGVsZW1lbnRzIGFyZSBpbnZhbGlkIikKIAogICAgIGRlZiB0cmFuc2Zvcm1fZG90KHNlbGYsIG5vZGUsIHJlc3VsdHMpOgogICAgICAgICAiIiJUcmFuc2Zvcm0gZm9yIGNhbGxzIHRvIG1vZHVsZSBtZW1iZXJzIGluIGNvZGUuIiIiCi0gICAgICAgIG1vZHVsZV9kb3QgPSByZXN1bHRzLmdldCgnYmFyZV93aXRoX2F0dHInKQotICAgICAgICBtZW1iZXIgPSByZXN1bHRzLmdldCgnbWVtYmVyJykKKyAgICAgICAgbW9kdWxlX2RvdCA9IHJlc3VsdHMuZ2V0KCJiYXJlX3dpdGhfYXR0ciIpCisgICAgICAgIG1lbWJlciA9IHJlc3VsdHMuZ2V0KCJtZW1iZXIiKQogICAgICAgICBuZXdfbmFtZSA9IE5vbmUKICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXIsIGxpc3QpOgogICAgICAgICAgICAgbWVtYmVyID0gbWVtYmVyWzBdCkBAIC0xNjQsMTcgKzE4MSwxNyBAQAogICAgICAgICAgICAgbW9kdWxlX2RvdC5yZXBsYWNlKE5hbWUobmV3X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9bW9kdWxlX2RvdC5wcmVmaXgpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5jYW5ub3RfY29udmVydChub2RlLCAnVGhpcyBpcyBhbiBpbnZhbGlkIG1vZHVsZSBlbGVtZW50JykKKyAgICAgICAgICAgIHNlbGYuY2Fubm90X2NvbnZlcnQobm9kZSwgIlRoaXMgaXMgYW4gaW52YWxpZCBtb2R1bGUgZWxlbWVudCIpCiAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgotICAgICAgICBpZiByZXN1bHRzLmdldCgnbW9kdWxlJyk6CisgICAgICAgIGlmIHJlc3VsdHMuZ2V0KCJtb2R1bGUiKToKICAgICAgICAgICAgIHNlbGYudHJhbnNmb3JtX2ltcG9ydChub2RlLCByZXN1bHRzKQotICAgICAgICBlbGlmIHJlc3VsdHMuZ2V0KCdtb2RfbWVtYmVyJyk6CisgICAgICAgIGVsaWYgcmVzdWx0cy5nZXQoIm1vZF9tZW1iZXIiKToKICAgICAgICAgICAgIHNlbGYudHJhbnNmb3JtX21lbWJlcihub2RlLCByZXN1bHRzKQotICAgICAgICBlbGlmIHJlc3VsdHMuZ2V0KCdiYXJlX3dpdGhfYXR0cicpOgorICAgICAgICBlbGlmIHJlc3VsdHMuZ2V0KCJiYXJlX3dpdGhfYXR0ciIpOgogICAgICAgICAgICAgc2VsZi50cmFuc2Zvcm1fZG90KG5vZGUsIHJlc3VsdHMpCiAgICAgICAgICMgUmVuYW1pbmcgYW5kIHN0YXIgaW1wb3J0cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdGhlc2UgbW9kdWxlcy4KLSAgICAgICAgZWxpZiByZXN1bHRzLmdldCgnbW9kdWxlX3N0YXInKToKLSAgICAgICAgICAgIHNlbGYuY2Fubm90X2NvbnZlcnQobm9kZSwgJ0Nhbm5vdCBoYW5kbGUgc3RhciBpbXBvcnRzLicpCi0gICAgICAgIGVsaWYgcmVzdWx0cy5nZXQoJ21vZHVsZV9hcycpOgotICAgICAgICAgICAgc2VsZi5jYW5ub3RfY29udmVydChub2RlLCAnVGhpcyBtb2R1bGUgaXMgbm93IG11bHRpcGxlIG1vZHVsZXMnKQorICAgICAgICBlbGlmIHJlc3VsdHMuZ2V0KCJtb2R1bGVfc3RhciIpOgorICAgICAgICAgICAgc2VsZi5jYW5ub3RfY29udmVydChub2RlLCAiQ2Fubm90IGhhbmRsZSBzdGFyIGltcG9ydHMuIikKKyAgICAgICAgZWxpZiByZXN1bHRzLmdldCgibW9kdWxlX2FzIik6CisgICAgICAgICAgICBzZWxmLmNhbm5vdF9jb252ZXJ0KG5vZGUsICJUaGlzIG1vZHVsZSBpcyBub3cgbXVsdGlwbGUgbW9kdWxlcyIpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfeHJhbmdlLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3hyYW5nZS5weQppbmRleCAyZWIxMDY1Li5mMTQzNjcyIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfeHJhbmdlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF94cmFuZ2UucHkKQEAgLTEwLDcgKzEwLDcgQEAKIAogCiBjbGFzcyBGaXhYcmFuZ2UoZml4ZXJfYmFzZS5CYXNlRml4KToKLQorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICIiIgogICAgICAgICAgICAgICBwb3dlcjwKICAgICAgICAgICAgICAgICAgKG5hbWU9J3JhbmdlJ3xuYW1lPSd4cmFuZ2UnKSB0cmFpbGVyPCAnKCcgYXJncz1hbnkgJyknID4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF94cmVhZGxpbmVzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3hyZWFkbGluZXMucHkKaW5kZXggZWU0YjM1Ni4uZjUwYjlhMiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3hyZWFkbGluZXMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3hyZWFkbGluZXMucHkKQEAgLTksNiArOSw3IEBACiAKIAogY2xhc3MgRml4WHJlYWRsaW5lcyhmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHBvd2VyPCBjYWxsPWFueSsgdHJhaWxlcjwgJy4nICd4cmVhZGxpbmVzJyA+IHRyYWlsZXI8ICcoJyAnKScgPiA+CiAgICAgfApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3ppcC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF96aXAucHkKaW5kZXggNjczNmE3ZS4uYzVkN2I2NiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3ppcC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfemlwLnB5CkBAIC0xMyw2ICsxMyw3IEBACiAKIGNsYXNzIEZpeFppcChmaXhlcl9iYXNlLkNvbmRpdGlvbmFsRml4KToKIAorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHBvd2VyPCAnemlwJyBhcmdzPXRyYWlsZXI8ICcoJyBbYW55XSAnKScgPgogICAgID4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL21haW4ucHkgYi9MaWIvbGliMnRvMy9tYWluLnB5CmluZGV4IGZmYTQyYWIuLjM5MjlkYjcgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL21haW4ucHkKKysrIGIvTGliL2xpYjJ0bzMvbWFpbi5weQpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1qIiwgIi0tcHJvY2Vzc2VzIiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9MSwKICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJpbnQiLCBoZWxwPSJSdW4gMnRvMyBjb25jdXJyZW50bHkiKQogICAgIHBhcnNlci5hZGRfb3B0aW9uKCIteCIsICItLW5vZml4IiwgYWN0aW9uPSJhcHBlbmQiLCBkZWZhdWx0PVtdLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlByZXZlbnQgYSBmaXhlciBmcm9tIGJlaW5nIHJ1bi4iKQorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlByZXZlbnQgYSB0cmFuc2Zvcm1hdGlvbiBmcm9tIGJlaW5nIHJ1biIpCiAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1sIiwgIi0tbGlzdC1maXhlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iTGlzdCBhdmFpbGFibGUgdHJhbnNmb3JtYXRpb25zIikKICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXAiLCAiLS1wcmludC1mdW5jdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXciLCAiLS13cml0ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iV3JpdGUgYmFjayBtb2RpZmllZCBmaWxlcyIpCiAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tbm9iYWNrdXBzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEb24ndCB3cml0ZSBiYWNrdXBzIGZvciBtb2RpZmllZCBmaWxlcy4iKQorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRvbid0IHdyaXRlIGJhY2t1cHMgZm9yIG1vZGlmaWVkIGZpbGVzIikKIAogICAgICMgUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgIHJlZmFjdG9yX3N0ZGluID0gRmFsc2UKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BhdGNvbXAucHkgYi9MaWIvbGliMnRvMy9wYXRjb21wLnB5CmluZGV4IGRhYTY3ZmEuLjA5M2U1ZjkgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BhdGNvbXAucHkKKysrIGIvTGliL2xpYjJ0bzMvcGF0Y29tcC5weQpAQCAtMTIsNiArMTIsNyBAQAogCiAjIFB5dGhvbiBpbXBvcnRzCiBpbXBvcnQgb3MKK2ltcG9ydCBTdHJpbmdJTwogCiAjIEZhaXJseSBsb2NhbCBpbXBvcnRzCiBmcm9tIC5wZ2VuMiBpbXBvcnQgZHJpdmVyLCBsaXRlcmFscywgdG9rZW4sIHRva2VuaXplLCBwYXJzZSwgZ3JhbW1hcgpAQCAtMzIsNyArMzMsNyBAQAogZGVmIHRva2VuaXplX3dyYXBwZXIoaW5wdXQpOgogICAgICIiIlRva2VuaXplcyBhIHN0cmluZyBzdXBwcmVzc2luZyBzaWduaWZpY2FudCB3aGl0ZXNwYWNlLiIiIgogICAgIHNraXAgPSBzZXQoKHRva2VuLk5FV0xJTkUsIHRva2VuLklOREVOVCwgdG9rZW4uREVERU5UKSkKLSAgICB0b2tlbnMgPSB0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnMoZHJpdmVyLmdlbmVyYXRlX2xpbmVzKGlucHV0KS5uZXh0KQorICAgIHRva2VucyA9IHRva2VuaXplLmdlbmVyYXRlX3Rva2VucyhTdHJpbmdJTy5TdHJpbmdJTyhpbnB1dCkucmVhZGxpbmUpCiAgICAgZm9yIHF1aW50dXBsZSBpbiB0b2tlbnM6CiAgICAgICAgIHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsaW5lX3RleHQgPSBxdWludHVwbGUKICAgICAgICAgaWYgdHlwZSBub3QgaW4gc2tpcDoKQEAgLTUyLDE0ICs1MywxNyBAQAogICAgICAgICBzZWxmLnB5c3ltcyA9IHB5Z3JhbS5weXRob25fc3ltYm9scwogICAgICAgICBzZWxmLmRyaXZlciA9IGRyaXZlci5Ecml2ZXIoc2VsZi5ncmFtbWFyLCBjb252ZXJ0PXBhdHRlcm5fY29udmVydCkKIAotICAgIGRlZiBjb21waWxlX3BhdHRlcm4oc2VsZiwgaW5wdXQsIGRlYnVnPUZhbHNlKToKKyAgICBkZWYgY29tcGlsZV9wYXR0ZXJuKHNlbGYsIGlucHV0LCBkZWJ1Zz1GYWxzZSwgd2l0aF90cmVlPUZhbHNlKToKICAgICAgICAgIiIiQ29tcGlsZXMgYSBwYXR0ZXJuIHN0cmluZyB0byBhIG5lc3RlZCBweXRyZWUuKlBhdHRlcm4gb2JqZWN0LiIiIgogICAgICAgICB0b2tlbnMgPSB0b2tlbml6ZV93cmFwcGVyKGlucHV0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByb290ID0gc2VsZi5kcml2ZXIucGFyc2VfdG9rZW5zKHRva2VucywgZGVidWc9ZGVidWcpCi0gICAgICAgIGV4Y2VwdCBwYXJzZS5QYXJzZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgcGFyc2UuUGFyc2VFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgUGF0dGVyblN5bnRheEVycm9yKHN0cihlKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuY29tcGlsZV9ub2RlKHJvb3QpCisgICAgICAgIGlmIHdpdGhfdHJlZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbXBpbGVfbm9kZShyb290KSwgcm9vdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tcGlsZV9ub2RlKHJvb3QpCiAKICAgICBkZWYgY29tcGlsZV9ub2RlKHNlbGYsIG5vZGUpOgogICAgICAgICAiIiJDb21waWxlcyBhIG5vZGUsIHJlY3Vyc2l2ZWx5LgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5CmluZGV4IDZiMzgyNWUuLjE2YWRlYzAgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkKQEAgLTE5LDYgKzE5LDcgQEAKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBvcwogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHN5cwogCiAjIFBnZW4gaW1wb3J0cwpAQCAtMTAxLDE4ICsxMDIsMTAgQEAKIAogICAgIGRlZiBwYXJzZV9zdHJpbmcoc2VsZiwgdGV4dCwgZGVidWc9RmFsc2UpOgogICAgICAgICAiIiJQYXJzZSBhIHN0cmluZyBhbmQgcmV0dXJuIHRoZSBzeW50YXggdHJlZS4iIiIKLSAgICAgICAgdG9rZW5zID0gdG9rZW5pemUuZ2VuZXJhdGVfdG9rZW5zKGdlbmVyYXRlX2xpbmVzKHRleHQpLm5leHQpCisgICAgICAgIHRva2VucyA9IHRva2VuaXplLmdlbmVyYXRlX3Rva2VucyhTdHJpbmdJTy5TdHJpbmdJTyh0ZXh0KS5yZWFkbGluZSkKICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfdG9rZW5zKHRva2VucywgZGVidWcpCiAKIAotZGVmIGdlbmVyYXRlX2xpbmVzKHRleHQpOgotICAgICIiIkdlbmVyYXRvciB0aGF0IGJlaGF2ZXMgbGlrZSByZWFkbGluZSB3aXRob3V0IHVzaW5nIFN0cmluZ0lPLiIiIgotICAgIGZvciBsaW5lIGluIHRleHQuc3BsaXRsaW5lcyhUcnVlKToKLSAgICAgICAgeWllbGQgbGluZQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIHlpZWxkICIiCi0KLQogZGVmIGxvYWRfZ3JhbW1hcihndD0iR3JhbW1hci50eHQiLCBncD1Ob25lLAogICAgICAgICAgICAgICAgICBzYXZlPVRydWUsIGZvcmNlPUZhbHNlLCBsb2dnZXI9Tm9uZSk6CiAgICAgIiIiTG9hZCB0aGUgZ3JhbW1hciAobWF5YmUgZnJvbSBhIHBpY2tsZSkuIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9weWdyYW0ucHkgYi9MaWIvbGliMnRvMy9weWdyYW0ucHkKaW5kZXggNmNkYjNhNC4uNjIxZmYyNCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcHlncmFtLnB5CisrKyBiL0xpYi9saWIydG8zL3B5Z3JhbS5weQpAQCAtMTMsNiArMTMsOCBAQAogCiAjIFRoZSBncmFtbWFyIGZpbGUKIF9HUkFNTUFSX0ZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgIkdyYW1tYXIudHh0IikKK19QQVRURVJOX0dSQU1NQVJfRklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXR0ZXJuR3JhbW1hci50eHQiKQogCiAKIGNsYXNzIFN5bWJvbHMob2JqZWN0KToKQEAgLTMzLDMgKzM1LDYgQEAKIAogcHl0aG9uX2dyYW1tYXJfbm9fcHJpbnRfc3RhdGVtZW50ID0gcHl0aG9uX2dyYW1tYXIuY29weSgpCiBkZWwgcHl0aG9uX2dyYW1tYXJfbm9fcHJpbnRfc3RhdGVtZW50LmtleXdvcmRzWyJwcmludCJdCisKK3BhdHRlcm5fZ3JhbW1hciA9IGRyaXZlci5sb2FkX2dyYW1tYXIoX1BBVFRFUk5fR1JBTU1BUl9GSUxFKQorcGF0dGVybl9zeW1ib2xzID0gU3ltYm9scyhwYXR0ZXJuX2dyYW1tYXIpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9weXRyZWUucHkgYi9MaWIvbGliMnRvMy9weXRyZWUucHkKaW5kZXggNjI0NWM4Yy4uYjI0MjgzZSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CisrKyBiL0xpYi9saWIydG8zL3B5dHJlZS5weQpAQCAtMTYsNyArMTYsNiBAQAogaW1wb3J0IHdhcm5pbmdzCiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCi0KIEhVR0UgPSAweDdGRkZGRkZGICAjIG1heGltdW0gcmVwZWF0IGNvdW50LCBkZWZhdWx0IG1heAogCiBfdHlwZV9yZXBycyA9IHt9CkBAIC0zMCw3ICsyOSw2IEBACiAgICAgICAgICAgICBpZiB0eXBlKHZhbCkgPT0gaW50OiBfdHlwZV9yZXByc1t2YWxdID0gbmFtZQogICAgIHJldHVybiBfdHlwZV9yZXBycy5zZXRkZWZhdWx0KHR5cGVfbnVtLCB0eXBlX251bSkKIAotCiBjbGFzcyBCYXNlKG9iamVjdCk6CiAKICAgICAiIiIKQEAgLTQ3LDYgKzQ1LDcgQEAKICAgICBwYXJlbnQgPSBOb25lICAjIFBhcmVudCBub2RlIHBvaW50ZXIsIG9yIE5vbmUKICAgICBjaGlsZHJlbiA9ICgpICAjIFR1cGxlIG9mIHN1Ym5vZGVzCiAgICAgd2FzX2NoYW5nZWQgPSBGYWxzZQorICAgIHdhc19jaGVja2VkID0gRmFsc2UKIAogICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgICIiIkNvbnN0cnVjdG9yIHRoYXQgcHJldmVudHMgQmFzZSBmcm9tIGJlaW5nIGluc3RhbnRpYXRlZC4iIiIKQEAgLTIxMyw2ICsyMTIsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnQuY2hpbGRyZW5baS0xXQogCisgICAgZGVmIGxlYXZlcyhzZWxmKToKKyAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBmb3IgeCBpbiBjaGlsZC5sZWF2ZXMoKToKKyAgICAgICAgICAgICAgICB5aWVsZCB4CisKKyAgICBkZWYgZGVwdGgoc2VsZik6CisgICAgICAgIGlmIHNlbGYucGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gMSArIHNlbGYucGFyZW50LmRlcHRoKCkKKwogICAgIGRlZiBnZXRfc3VmZml4KHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgUmV0dXJuIHRoZSBzdHJpbmcgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBpbnZvY2FudCBub2RlLiBUaGlzIGlzCkBAIC0yMjcsMTIgKzIzNiwxNCBAQAogICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgICAgIHJldHVybiB1bmljb2RlKHNlbGYpLmVuY29kZSgiYXNjaWkiKQogCi0KIGNsYXNzIE5vZGUoQmFzZSk6CiAKICAgICAiIiJDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgaW50ZXJpb3Igbm9kZXMuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZSwgY2hpbGRyZW4sIGNvbnRleHQ9Tm9uZSwgcHJlZml4PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHR5cGUsIGNoaWxkcmVuLAorICAgICAgICAgICAgICAgICBjb250ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgIHByZWZpeD1Ob25lLAorICAgICAgICAgICAgICAgICBmaXhlcnNfYXBwbGllZD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIEluaXRpYWxpemVyLgogCkBAIC0yNDksNiArMjYwLDEwIEBACiAgICAgICAgICAgICBjaC5wYXJlbnQgPSBzZWxmCiAgICAgICAgIGlmIHByZWZpeCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYucHJlZml4ID0gcHJlZml4CisgICAgICAgIGlmIGZpeGVyc19hcHBsaWVkOgorICAgICAgICAgICAgc2VsZi5maXhlcnNfYXBwbGllZCA9IGZpeGVyc19hcHBsaWVkWzpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZpeGVyc19hcHBsaWVkID0gTm9uZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiIiIgpAQCAtMjczLDcgKzI4OCw4IEBACiAKICAgICBkZWYgY2xvbmUoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGNsb25lZCAoZGVlcCkgY29weSBvZiBzZWxmLiIiIgotICAgICAgICByZXR1cm4gTm9kZShzZWxmLnR5cGUsIFtjaC5jbG9uZSgpIGZvciBjaCBpbiBzZWxmLmNoaWxkcmVuXSkKKyAgICAgICAgcmV0dXJuIE5vZGUoc2VsZi50eXBlLCBbY2guY2xvbmUoKSBmb3IgY2ggaW4gc2VsZi5jaGlsZHJlbl0sCisgICAgICAgICAgICAgICAgICAgIGZpeGVyc19hcHBsaWVkPXNlbGYuZml4ZXJzX2FwcGxpZWQpCiAKICAgICBkZWYgcG9zdF9vcmRlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcG9zdC1vcmRlciBpdGVyYXRvciBmb3IgdGhlIHRyZWUuIiIiCkBAIC0yODYsNyArMzAyLDcgQEAKICAgICAgICAgIiIiUmV0dXJuIGEgcHJlLW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKICAgICAgICAgeWllbGQgc2VsZgogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciBub2RlIGluIGNoaWxkLnBvc3Rfb3JkZXIoKToKKyAgICAgICAgICAgIGZvciBub2RlIGluIGNoaWxkLnByZV9vcmRlcigpOgogICAgICAgICAgICAgICAgIHlpZWxkIG5vZGUKIAogICAgIGRlZiBfcHJlZml4X2dldHRlcihzZWxmKToKQEAgLTM0MSw3ICszNTcsMTAgQEAKICAgICBsaW5lbm8gPSAwICAgICMgTGluZSB3aGVyZSB0aGlzIHRva2VuIHN0YXJ0cyBpbiB0aGUgaW5wdXQKICAgICBjb2x1bW4gPSAwICAgICMgQ29sdW1uIHdoZXJlIHRoaXMgdG9rZW4gdGFydHMgaW4gdGhlIGlucHV0CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZSwgdmFsdWUsIGNvbnRleHQ9Tm9uZSwgcHJlZml4PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgY29udGV4dD1Ob25lLAorICAgICAgICAgICAgICAgICBwcmVmaXg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZml4ZXJzX2FwcGxpZWQ9W10pOgogICAgICAgICAiIiIKICAgICAgICAgSW5pdGlhbGl6ZXIuCiAKQEAgLTM1NSw2ICszNzQsNyBAQAogICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICAgaWYgcHJlZml4IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5fcHJlZml4ID0gcHJlZml4CisgICAgICAgIHNlbGYuZml4ZXJzX2FwcGxpZWQgPSBmaXhlcnNfYXBwbGllZFs6XQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiIiIgpAQCAtMzgwLDcgKzQwMCwxMSBAQAogICAgIGRlZiBjbG9uZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgY2xvbmVkIChkZWVwKSBjb3B5IG9mIHNlbGYuIiIiCiAgICAgICAgIHJldHVybiBMZWFmKHNlbGYudHlwZSwgc2VsZi52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgKHNlbGYucHJlZml4LCAoc2VsZi5saW5lbm8sIHNlbGYuY29sdW1uKSkpCisgICAgICAgICAgICAgICAgICAgIChzZWxmLnByZWZpeCwgKHNlbGYubGluZW5vLCBzZWxmLmNvbHVtbikpLAorICAgICAgICAgICAgICAgICAgICBmaXhlcnNfYXBwbGllZD1zZWxmLmZpeGVyc19hcHBsaWVkKQorCisgICAgZGVmIGxlYXZlcyhzZWxmKToKKyAgICAgICAgeWllbGQgc2VsZgogCiAgICAgZGVmIHBvc3Rfb3JkZXIoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHBvc3Qtb3JkZXIgaXRlcmF0b3IgZm9yIHRoZSB0cmVlLiIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkgYi9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQppbmRleCAzZTk0Njk5Li43ZDAwZDEyIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQorKysgYi9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQpAQCAtMjQsNyArMjQsMTAgQEAKIAogIyBMb2NhbCBpbXBvcnRzCiBmcm9tIC5wZ2VuMiBpbXBvcnQgZHJpdmVyLCB0b2tlbml6ZSwgdG9rZW4KK2Zyb20gLmZpeGVyX3V0aWwgaW1wb3J0IGZpbmRfcm9vdAogZnJvbSAuIGltcG9ydCBweXRyZWUsIHB5Z3JhbQorZnJvbSAuIGltcG9ydCBidG1fdXRpbHMgYXMgYnUKK2Zyb20gLiBpbXBvcnQgYnRtX21hdGNoZXIgYXMgYm0KIAogCiBkZWYgZ2V0X2FsbF9maXhfbmFtZXMoZml4ZXJfcGtnLCByZW1vdmVfcHJlZml4PVRydWUpOgpAQCAtMjAxLDExICsyMDQsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlcj1zZWxmLmxvZ2dlcikKICAgICAgICAgc2VsZi5wcmVfb3JkZXIsIHNlbGYucG9zdF9vcmRlciA9IHNlbGYuZ2V0X2ZpeGVycygpCiAKLSAgICAgICAgc2VsZi5wcmVfb3JkZXJfaGVhZHMgPSBfZ2V0X2hlYWRub2RlX2RpY3Qoc2VsZi5wcmVfb3JkZXIpCi0gICAgICAgIHNlbGYucG9zdF9vcmRlcl9oZWFkcyA9IF9nZXRfaGVhZG5vZGVfZGljdChzZWxmLnBvc3Rfb3JkZXIpCiAKICAgICAgICAgc2VsZi5maWxlcyA9IFtdICAjIExpc3Qgb2YgZmlsZXMgdGhhdCB3ZXJlIG9yIHNob3VsZCBiZSBtb2RpZmllZAogCisgICAgICAgIHNlbGYuQk0gPSBibS5Cb3R0b21NYXRjaGVyKCkKKyAgICAgICAgc2VsZi5ibWlfcHJlX29yZGVyID0gW10gIyBCb3R0b20gTWF0Y2hlciBpbmNvbXBhdGlibGUgZml4ZXJzCisgICAgICAgIHNlbGYuYm1pX3Bvc3Rfb3JkZXIgPSBbXQorCisgICAgICAgIGZvciBmaXhlciBpbiBjaGFpbihzZWxmLnBvc3Rfb3JkZXIsIHNlbGYucHJlX29yZGVyKToKKyAgICAgICAgICAgIGlmIGZpeGVyLkJNX2NvbXBhdGlibGU6CisgICAgICAgICAgICAgICAgc2VsZi5CTS5hZGRfZml4ZXIoZml4ZXIpCisgICAgICAgICAgICAgICAgIyByZW1vdmUgZml4ZXJzIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBib3R0b20tdXAKKyAgICAgICAgICAgICAgICAjIG1hdGNoZXIKKyAgICAgICAgICAgIGVsaWYgZml4ZXIgaW4gc2VsZi5wcmVfb3JkZXI6CisgICAgICAgICAgICAgICAgc2VsZi5ibWlfcHJlX29yZGVyLmFwcGVuZChmaXhlcikKKyAgICAgICAgICAgIGVsaWYgZml4ZXIgaW4gc2VsZi5wb3N0X29yZGVyOgorICAgICAgICAgICAgICAgIHNlbGYuYm1pX3Bvc3Rfb3JkZXIuYXBwZW5kKGZpeGVyKQorCisgICAgICAgIHNlbGYuYm1pX3ByZV9vcmRlcl9oZWFkcyA9IF9nZXRfaGVhZG5vZGVfZGljdChzZWxmLmJtaV9wcmVfb3JkZXIpCisgICAgICAgIHNlbGYuYm1pX3Bvc3Rfb3JkZXJfaGVhZHMgPSBfZ2V0X2hlYWRub2RlX2RpY3Qoc2VsZi5ibWlfcG9zdF9vcmRlcikKKworCisKICAgICBkZWYgZ2V0X2ZpeGVycyhzZWxmKToKICAgICAgICAgIiIiSW5zcGVjdHMgdGhlIG9wdGlvbnMgdG8gbG9hZCB0aGUgcmVxdWVzdGVkIHBhdHRlcm5zIGFuZCBoYW5kbGVycy4KIApAQCAtMjY4LDYgKzI4OCw3IEBACiAKICAgICBkZWYgcmVmYWN0b3Ioc2VsZiwgaXRlbXMsIHdyaXRlPUZhbHNlLCBkb2N0ZXN0c19vbmx5PUZhbHNlKToKICAgICAgICAgIiIiUmVmYWN0b3IgYSBsaXN0IG9mIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4iIiIKKwogICAgICAgICBmb3IgZGlyX29yX2ZpbGUgaW4gaXRlbXM6CiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRpcl9vcl9maWxlKToKICAgICAgICAgICAgICAgICBzZWxmLnJlZmFjdG9yX2RpcihkaXJfb3JfZmlsZSwgd3JpdGUsIGRvY3Rlc3RzX29ubHkpCkBAIC0yODEsMTMgKzMwMiwxNCBAQAogCiAgICAgICAgIEZpbGVzIGFuZCBzdWJkaXJlY3RvcmllcyBzdGFydGluZyB3aXRoICcuJyBhcmUgc2tpcHBlZC4KICAgICAgICAgIiIiCisgICAgICAgIHB5X2V4dCA9IG9zLmV4dHNlcCArICJweSIKICAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhkaXJfbmFtZSk6CiAgICAgICAgICAgICBzZWxmLmxvZ19kZWJ1ZygiRGVzY2VuZGluZyBpbnRvICVzIiwgZGlycGF0aCkKICAgICAgICAgICAgIGRpcm5hbWVzLnNvcnQoKQogICAgICAgICAgICAgZmlsZW5hbWVzLnNvcnQoKQogICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgotICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoIi4iKSBhbmQgXAotICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5zcGxpdGV4dChuYW1lKVsxXS5lbmRzd2l0aCgicHkiKToKKyAgICAgICAgICAgICAgICBpZiAobm90IG5hbWUuc3RhcnRzd2l0aCgiLiIpIGFuZAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnNwbGl0ZXh0KG5hbWUpWzFdID09IHB5X2V4dCk6CiAgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIG5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVmYWN0b3JfZmlsZShmdWxsbmFtZSwgd3JpdGUsIGRvY3Rlc3RzX29ubHkpCiAgICAgICAgICAgICAjIE1vZGlmeSBkaXJuYW1lcyBpbi1wbGFjZSB0byByZW1vdmUgc3ViZGlycyB3aXRoIGxlYWRpbmcgZG90cwpAQCAtMjk5LDcgKzMyMSw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIkNhbid0IG9wZW4gJXM6ICVzIiwgZmlsZW5hbWUsIGVycikKICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCiAgICAgICAgIHRyeToKQEAgLTM0OCw3ICszNzAsNyBAQAogICAgICAgICAgICAgc2VsZi5kcml2ZXIuZ3JhbW1hciA9IHB5Z3JhbS5weXRob25fZ3JhbW1hcl9ub19wcmludF9zdGF0ZW1lbnQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdHJlZSA9IHNlbGYuZHJpdmVyLnBhcnNlX3N0cmluZyhkYXRhKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIkNhbid0IHBhcnNlICVzOiAlczogJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgZXJyLl9fY2xhc3NfXy5fX25hbWVfXywgZXJyKQogICAgICAgICAgICAgcmV0dXJuCkBAIC0zNzgsNiArNDAwLDEwIEBACiAgICAgZGVmIHJlZmFjdG9yX3RyZWUoc2VsZiwgdHJlZSwgbmFtZSk6CiAgICAgICAgICIiIlJlZmFjdG9ycyBhIHBhcnNlIHRyZWUgKG1vZGlmeWluZyB0aGUgdHJlZSBpbiBwbGFjZSkuCiAKKyAgICAgICAgRm9yIGNvbXBhdGlibGUgcGF0dGVybnMgdGhlIGJvdHRvbSBtYXRjaGVyIG1vZHVsZSBpcworICAgICAgICB1c2VkLiBPdGhlcndpc2UgdGhlIHRyZWUgaXMgdHJhdmVyc2VkIG5vZGUtdG8tbm9kZSBmb3IKKyAgICAgICAgbWF0Y2hlcy4KKwogICAgICAgICBBcmdzOgogICAgICAgICAgICAgdHJlZTogYSBweXRyZWUuTm9kZSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIHJvb3Qgb2YgdGhlIHRyZWUKICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlZmFjdG9yZWQuCkBAIC0zODYsMTEgKzQxMiw2NSBAQAogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgdHJlZSB3YXMgbW9kaWZpZWQsIEZhbHNlIG90aGVyd2lzZS4KICAgICAgICAgIiIiCisKICAgICAgICAgZm9yIGZpeGVyIGluIGNoYWluKHNlbGYucHJlX29yZGVyLCBzZWxmLnBvc3Rfb3JkZXIpOgogICAgICAgICAgICAgZml4ZXIuc3RhcnRfdHJlZSh0cmVlLCBuYW1lKQogCi0gICAgICAgIHNlbGYudHJhdmVyc2VfYnkoc2VsZi5wcmVfb3JkZXJfaGVhZHMsIHRyZWUucHJlX29yZGVyKCkpCi0gICAgICAgIHNlbGYudHJhdmVyc2VfYnkoc2VsZi5wb3N0X29yZGVyX2hlYWRzLCB0cmVlLnBvc3Rfb3JkZXIoKSkKKyAgICAgICAgI3VzZSB0cmFkaXRpb25hbCBtYXRjaGluZyBmb3IgdGhlIGluY29tcGF0aWJsZSBmaXhlcnMKKyAgICAgICAgc2VsZi50cmF2ZXJzZV9ieShzZWxmLmJtaV9wcmVfb3JkZXJfaGVhZHMsIHRyZWUucHJlX29yZGVyKCkpCisgICAgICAgIHNlbGYudHJhdmVyc2VfYnkoc2VsZi5ibWlfcG9zdF9vcmRlcl9oZWFkcywgdHJlZS5wb3N0X29yZGVyKCkpCisKKyAgICAgICAgIyBvYnRhaW4gYSBzZXQgb2YgY2FuZGlkYXRlIG5vZGVzCisgICAgICAgIG1hdGNoX3NldCA9IHNlbGYuQk0ucnVuKHRyZWUubGVhdmVzKCkpCisKKyAgICAgICAgd2hpbGUgYW55KG1hdGNoX3NldC52YWx1ZXMoKSk6CisgICAgICAgICAgICBmb3IgZml4ZXIgaW4gc2VsZi5CTS5maXhlcnM6CisgICAgICAgICAgICAgICAgaWYgZml4ZXIgaW4gbWF0Y2hfc2V0IGFuZCBtYXRjaF9zZXRbZml4ZXJdOgorICAgICAgICAgICAgICAgICAgICAjc29ydCBieSBkZXB0aDsgYXBwbHkgZml4ZXJzIGZyb20gYm90dG9tKG9mIHRoZSBBU1QpIHRvIHRvcAorICAgICAgICAgICAgICAgICAgICBtYXRjaF9zZXRbZml4ZXJdLnNvcnQoa2V5PXB5dHJlZS5CYXNlLmRlcHRoLCByZXZlcnNlPVRydWUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgZml4ZXIua2VlcF9saW5lX29yZGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgI3NvbWUgZml4ZXJzKGVnIGZpeF9pbXBvcnRzKSBtdXN0IGJlIGFwcGxpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICN3aXRoIHRoZSBvcmlnaW5hbCBmaWxlJ3MgbGluZSBvcmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfc2V0W2ZpeGVyXS5zb3J0KGtleT1weXRyZWUuQmFzZS5nZXRfbGluZW5vKQorCisgICAgICAgICAgICAgICAgICAgIGZvciBub2RlIGluIGxpc3QobWF0Y2hfc2V0W2ZpeGVyXSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub2RlIGluIG1hdGNoX3NldFtmaXhlcl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfc2V0W2ZpeGVyXS5yZW1vdmUobm9kZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRfcm9vdChub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBub2RlIGhhcyBiZWVuIGN1dCBvZmYgZnJvbSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmV2aW91cyB0cmFuc2Zvcm1hdGlvbiA7IHNraXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub2RlLmZpeGVyc19hcHBsaWVkIGFuZCBmaXhlciBpbiBub2RlLmZpeGVyc19hcHBsaWVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG8gbm90IGFwcGx5IHRoZSBzYW1lIGZpeGVyIGFnYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGZpeGVyLm1hdGNoKG5vZGUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ID0gZml4ZXIudHJhbnNmb3JtKG5vZGUsIHJlc3VsdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmV3IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnJlcGxhY2UobmV3KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbmV3LmZpeGVyc19hcHBsaWVkLmFwcGVuZChmaXhlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gbmV3LnBvc3Rfb3JkZXIoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG8gbm90IGFwcGx5IHRoZSBmaXhlciBhZ2FpbiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIG9yIGFueSBzdWJub2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgbm9kZS5maXhlcnNfYXBwbGllZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmZpeGVyc19hcHBsaWVkID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZml4ZXJzX2FwcGxpZWQuYXBwZW5kKGZpeGVyKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIHRoZSBvcmlnaW5hbCBtYXRjaCBzZXQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGFkZGVkIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X21hdGNoZXMgPSBzZWxmLkJNLnJ1bihuZXcubGVhdmVzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmeHIgaW4gbmV3X21hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZnhyIGluIG1hdGNoX3NldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF9zZXRbZnhyXT1bXQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF9zZXRbZnhyXS5leHRlbmQobmV3X21hdGNoZXNbZnhyXSkKIAogICAgICAgICBmb3IgZml4ZXIgaW4gY2hhaW4oc2VsZi5wcmVfb3JkZXIsIHNlbGYucG9zdF9vcmRlcik6CiAgICAgICAgICAgICBmaXhlci5maW5pc2hfdHJlZSh0cmVlLCBuYW1lKQpAQCAtNDQ4LDEyICs1MjgsMTIgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBfb3Blbl93aXRoX2VuY29kaW5nKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJDYW4ndCBjcmVhdGUgJXM6ICVzIiwgZmlsZW5hbWUsIGVycikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmLndyaXRlKF90b19zeXN0ZW1fbmV3bGluZXMobmV3X3RleHQpKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJDYW4ndCB3cml0ZSAlczogJXMiLCBmaWxlbmFtZSwgZXJyKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCkBAIC01MTYsOCArNTk2LDggQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRyZWUgPSBzZWxmLnBhcnNlX2Jsb2NrKGJsb2NrLCBsaW5lbm8sIGluZGVudCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgotICAgICAgICAgICAgaWYgc2VsZi5sb2cuaXNFbmFibGVkRm9yKGxvZ2dpbmcuREVCVUcpOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyLmlzRW5hYmxlZEZvcihsb2dnaW5nLkRFQlVHKToKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBibG9jazoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dfZGVidWcoIlNvdXJjZTogJXMiLCBsaW5lLnJzdHJpcCh1IlxuIikpCiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3QgcGFyc2UgZG9jc3RyaW5nIGluICVzIGxpbmUgJXM6ICVzOiAlcyIsCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL2JvbS5weSBiL0xpYi9saWIydG8zL3Rlc3RzL2RhdGEvYm9tLnB5CmluZGV4IGVjYjc4MmEuLjliYzM5NzUgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL2RhdGEvYm9tLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL2RhdGEvYm9tLnB5CkBAIC0xLDMgKzEsMiBAQAog77u/IyBjb2Rpbmc6IHV0Zi04CiBwcmludCAiQk9NIEJPT00hIgotCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CmluZGV4IGU4ZThlMTIuLjE4NTg5ZDMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CkBAIC04NjgsNiArODY4LDExIEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbig1KS53aXRoX3RyYWNlYmFjayg2KSAjIGZvbyIiIgogICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCiAKKyAgICBkZWYgdGVzdF9Ob25lX3ZhbHVlKHNlbGYpOgorICAgICAgICBiID0gIiIicmFpc2UgRXhjZXB0aW9uKDUpLCBOb25lLCB0YiIiIgorICAgICAgICBhID0gIiIicmFpc2UgRXhjZXB0aW9uKDUpLndpdGhfdHJhY2ViYWNrKHRiKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKICAgICBkZWYgdGVzdF90dXBsZV92YWx1ZShzZWxmKToKICAgICAgICAgYiA9ICIiInJhaXNlIEV4Y2VwdGlvbiwgKDUsIDYsIDcpIiIiCiAgICAgICAgIGEgPSAiIiJyYWlzZSBFeGNlcHRpb24oNSwgNiwgNykiIiIKQEAgLTE4MTIsMTIgKzE4MTcsNDIgQEAKICAgICAgICAgICAgICAgICAgICAgYiA9ICJmcm9tICVzIGltcG9ydCAlcyBhcyBmb29fYmFyIiAlIChvbGQsIG1lbWJlcikKICAgICAgICAgICAgICAgICAgICAgYSA9ICJmcm9tICVzIGltcG9ydCAlcyBhcyBmb29fYmFyIiAlIChuZXcsIG1lbWJlcikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICAgICAgICAgICAgICBiID0gImZyb20gJXMgaW1wb3J0ICVzIGFzIGJsYWgsICVzIiAlIChvbGQsIG1lbWJlciwgbWVtYmVyKQorICAgICAgICAgICAgICAgICAgICBhID0gImZyb20gJXMgaW1wb3J0ICVzIGFzIGJsYWgsICVzIiAlIChuZXcsIG1lbWJlciwgbWVtYmVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCiAKICAgICBkZWYgdGVzdF9zdGFyKHNlbGYpOgogICAgICAgICBmb3Igb2xkIGluIHNlbGYubW9kdWxlczoKICAgICAgICAgICAgIHMgPSAiZnJvbSAlcyBpbXBvcnQgKiIgJSBvbGQKICAgICAgICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJDYW5ub3QgaGFuZGxlIHN0YXIgaW1wb3J0cyIpCiAKKyAgICBkZWYgdGVzdF9pbmRlbnRlZChzZWxmKToKKyAgICAgICAgYiA9ICIiIgorZGVmIGZvbygpOgorICAgIGZyb20gdXJsbGliIGltcG9ydCB1cmxlbmNvZGUsIHVybG9wZW4KKyIiIgorICAgICAgICBhID0gIiIiCitkZWYgZm9vKCk6CisgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybGVuY29kZQorICAgIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KKyIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgYiA9ICIiIgorZGVmIGZvbygpOgorICAgIG90aGVyKCkKKyAgICBmcm9tIHVybGxpYiBpbXBvcnQgdXJsZW5jb2RlLCB1cmxvcGVuCisiIiIKKyAgICAgICAgYSA9ICIiIgorZGVmIGZvbygpOgorICAgIG90aGVyKCkKKyAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJsZW5jb2RlCisgICAgZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgorIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworCisKICAgICBkZWYgdGVzdF9pbXBvcnRfbW9kdWxlX3VzYWdlKHNlbGYpOgogICAgICAgICBmb3Igb2xkLCBjaGFuZ2VzIGluIHNlbGYubW9kdWxlcy5pdGVtcygpOgogICAgICAgICAgICAgZm9yIG5ldywgbWVtYmVycyBpbiBjaGFuZ2VzOgpAQCAtMzYyMyw2ICszNjU4LDEwIEBACiAgICAgICAgIGEgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGJhciwgZm9vIgogICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCiAKKyAgICAgICAgYiA9ICJmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4sIGltYXAsIGl6aXAiCisgICAgICAgIGEgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKICAgICBkZWYgdGVzdF9jb21tZW50cyhzZWxmKToKICAgICAgICAgYiA9ICIjZm9vXG5mcm9tIGl0ZXJ0b29scyBpbXBvcnQgaW1hcCwgaXppcCIKICAgICAgICAgYSA9ICIjZm9vXG4iCkBAIC0zNjcwLDYgKzM3MDksMTAgQEAKICAgICAgICAgYSA9ICJmcm9tIGl0ZXJ0b29scyBpbXBvcnQgYmFyLCBmaWx0ZXJmYWxzZSwgZm9vIgogICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCiAKKyAgICBkZWYgdGVzdF9pbXBvcnRfc3RhcihzZWxmKToKKyAgICAgICAgcyA9ICJmcm9tIGl0ZXJ0b29scyBpbXBvcnQgKiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKwogCiAgICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgogICAgICAgICBzID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBmb28iCkBAIC00Mjk5LDEzICs0MzQyLDg5IEBACiAgICAgICAgIGEgPSAib3BlcmF0b3IuY29udGFpbnMoeCwgeSkiCiAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKIAorICAgICAgICBiID0gIm9wZXJhdG9yIC5zZXF1ZW5jZUluY2x1ZGVzKHgsIHkpIgorICAgICAgICBhID0gIm9wZXJhdG9yIC5jb250YWlucyh4LCB5KSIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAib3BlcmF0b3IuICBzZXF1ZW5jZUluY2x1ZGVzKHgsIHkpIgorICAgICAgICBhID0gIm9wZXJhdG9yLiAgY29udGFpbnMoeCwgeSkiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X29wZXJhdG9yX2lzU2VxdWVuY2VUeXBlKHNlbGYpOgorICAgICAgICBiID0gIm9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKHgpIgorICAgICAgICBhID0gImltcG9ydCBjb2xsZWN0aW9uc1xuaXNpbnN0YW5jZSh4LCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSkiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X29wZXJhdG9yX2lzTWFwcGluZ1R5cGUoc2VsZik6CisgICAgICAgIGIgPSAib3BlcmF0b3IuaXNNYXBwaW5nVHlwZSh4KSIKKyAgICAgICAgYSA9ICJpbXBvcnQgY29sbGVjdGlvbnNcbmlzaW5zdGFuY2UoeCwgY29sbGVjdGlvbnMuTWFwcGluZykiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X29wZXJhdG9yX2lzTnVtYmVyVHlwZShzZWxmKToKKyAgICAgICAgYiA9ICJvcGVyYXRvci5pc051bWJlclR5cGUoeCkiCisgICAgICAgIGEgPSAiaW1wb3J0IG51bWJlcnNcbmlzaW5zdGFuY2UoeCwgbnVtYmVycy5OdW1iZXIpIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF9vcGVyYXRvcl9yZXBlYXQoc2VsZik6CisgICAgICAgIGIgPSAib3BlcmF0b3IucmVwZWF0KHgsIG4pIgorICAgICAgICBhID0gIm9wZXJhdG9yLm11bCh4LCBuKSIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAib3BlcmF0b3IgLnJlcGVhdCh4LCBuKSIKKyAgICAgICAgYSA9ICJvcGVyYXRvciAubXVsKHgsIG4pIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgYiA9ICJvcGVyYXRvci4gIHJlcGVhdCh4LCBuKSIKKyAgICAgICAgYSA9ICJvcGVyYXRvci4gIG11bCh4LCBuKSIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3Rfb3BlcmF0b3JfaXJlcGVhdChzZWxmKToKKyAgICAgICAgYiA9ICJvcGVyYXRvci5pcmVwZWF0KHgsIG4pIgorICAgICAgICBhID0gIm9wZXJhdG9yLmltdWwoeCwgbikiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICBiID0gIm9wZXJhdG9yIC5pcmVwZWF0KHgsIG4pIgorICAgICAgICBhID0gIm9wZXJhdG9yIC5pbXVsKHgsIG4pIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgYiA9ICJvcGVyYXRvci4gIGlyZXBlYXQoeCwgbikiCisgICAgICAgIGEgPSAib3BlcmF0b3IuICBpbXVsKHgsIG4pIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKICAgICBkZWYgdGVzdF9iYXJlX2lzQ2FsbGFibGUoc2VsZik6CiAgICAgICAgIHMgPSAiaXNDYWxsYWJsZSh4KSIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgIllvdSBzaG91bGQgdXNlIGhhc2F0dHIoeCwgJ19fY2FsbF9fJykgaGVyZS4iKQorICAgICAgICB0ID0gIllvdSBzaG91bGQgdXNlICdoYXNhdHRyKHgsICdfX2NhbGxfXycpJyBoZXJlLiIKKyAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgdCkKIAogICAgIGRlZiB0ZXN0X2JhcmVfc2VxdWVuY2VJbmNsdWRlcyhzZWxmKToKICAgICAgICAgcyA9ICJzZXF1ZW5jZUluY2x1ZGVzKHgsIHkpIgotICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiWW91IHNob3VsZCB1c2Ugb3BlcmF0b3IuY29udGFpbnMgaGVyZS4iKQorICAgICAgICB0ID0gIllvdSBzaG91bGQgdXNlICdvcGVyYXRvci5jb250YWlucyh4LCB5KScgaGVyZS4iCisgICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCisKKyAgICBkZWYgdGVzdF9iYXJlX29wZXJhdG9yX2lzU2VxdWVuY2VUeXBlKHNlbGYpOgorICAgICAgICBzID0gImlzU2VxdWVuY2VUeXBlKHopIgorICAgICAgICB0ID0gIllvdSBzaG91bGQgdXNlICdpc2luc3RhbmNlKHosIGNvbGxlY3Rpb25zLlNlcXVlbmNlKScgaGVyZS4iCisgICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCisKKyAgICBkZWYgdGVzdF9iYXJlX29wZXJhdG9yX2lzTWFwcGluZ1R5cGUoc2VsZik6CisgICAgICAgIHMgPSAiaXNNYXBwaW5nVHlwZSh4KSIKKyAgICAgICAgdCA9ICJZb3Ugc2hvdWxkIHVzZSAnaXNpbnN0YW5jZSh4LCBjb2xsZWN0aW9ucy5NYXBwaW5nKScgaGVyZS4iCisgICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCisKKyAgICBkZWYgdGVzdF9iYXJlX29wZXJhdG9yX2lzTnVtYmVyVHlwZShzZWxmKToKKyAgICAgICAgcyA9ICJpc051bWJlclR5cGUoeSkiCisgICAgICAgIHQgPSAiWW91IHNob3VsZCB1c2UgJ2lzaW5zdGFuY2UoeSwgbnVtYmVycy5OdW1iZXIpJyBoZXJlLiIKKyAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgdCkKKworICAgIGRlZiB0ZXN0X2JhcmVfb3BlcmF0b3JfcmVwZWF0KHNlbGYpOgorICAgICAgICBzID0gInJlcGVhdCh4LCBuKSIKKyAgICAgICAgdCA9ICJZb3Ugc2hvdWxkIHVzZSAnb3BlcmF0b3IubXVsKHgsIG4pJyBoZXJlLiIKKyAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgdCkKKworICAgIGRlZiB0ZXN0X2JhcmVfb3BlcmF0b3JfaXJlcGVhdChzZWxmKToKKyAgICAgICAgcyA9ICJpcmVwZWF0KHksIDE4NykiCisgICAgICAgIHQgPSAiWW91IHNob3VsZCB1c2UgJ29wZXJhdG9yLmltdWwoeSwgMTg3KScgaGVyZS4iCisgICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCiAKIAogY2xhc3MgVGVzdF9leGl0ZnVuYyhGaXhlclRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcGFyc2VyLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9wYXJzZXIucHkKaW5kZXggNzAzZDg3OS4uMjYwMjM4MSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9wYXJzZXIucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9wYXJzZXIucHkKQEAgLTE5LDYgKzE5LDE2IEBACiAjIExvY2FsIGltcG9ydHMKIGZyb20gbGliMnRvMy5wZ2VuMiBpbXBvcnQgdG9rZW5pemUKIGZyb20gLi5wZ2VuMi5wYXJzZSBpbXBvcnQgUGFyc2VFcnJvcgorZnJvbSBsaWIydG8zLnB5Z3JhbSBpbXBvcnQgcHl0aG9uX3N5bWJvbHMgYXMgc3ltcworCisKK2NsYXNzIFRlc3REcml2ZXIoc3VwcG9ydC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mb3JtZmVlZChzZWxmKToKKyAgICAgICAgcyA9ICIiInByaW50IDFcblx4MENwcmludCAyXG4iIiIKKyAgICAgICAgdCA9IGRyaXZlci5wYXJzZV9zdHJpbmcocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLnR5cGUsIHN5bXMucHJpbnRfc3RtdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmNoaWxkcmVuWzFdLmNoaWxkcmVuWzBdLnR5cGUsIHN5bXMucHJpbnRfc3RtdCkKIAogCiBjbGFzcyBHcmFtbWFyVGVzdChzdXBwb3J0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcHl0cmVlLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9weXRyZWUucHkKaW5kZXggZDMxZjY3ZC4uYWM3ZDkwMCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9weXRyZWUucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9weXRyZWUucHkKQEAgLTE3OCwxNyArMTc4LDQyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG4xKSwgImZvbyoqYmFyIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobjEuY2hpbGRyZW4sIGxpc3QpKQogCisgICAgZGVmIHRlc3RfbGVhdmVzKHNlbGYpOgorICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCisgICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIikKKyAgICAgICAgbDMgPSBweXRyZWUuTGVhZigxMDAsICJmb29leSIpCisgICAgICAgIG4yID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMl0pCisgICAgICAgIG4zID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wzXSkKKyAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbjIsIG4zXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobjEubGVhdmVzKCkpLCBbbDEsIGwyLCBsM10pCisKKyAgICBkZWYgdGVzdF9kZXB0aChzZWxmKToKKyAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQorICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIpCisgICAgICAgIG4yID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMl0pCisgICAgICAgIG4zID0gcHl0cmVlLk5vZGUoMTAwMCwgW10pCisgICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW24yLCBuM10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMS5kZXB0aCgpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4zLmRlcHRoKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEuZGVwdGgoKSwgMCkKKwogICAgIGRlZiB0ZXN0X3Bvc3Rfb3JkZXIoc2VsZik6CiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKICAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQotICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobjEucG9zdF9vcmRlcigpKSwgW2wxLCBsMiwgbjFdKQorICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMCwgImZvb2V5IikKKyAgICAgICAgYzEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKKyAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbYzEsIGwzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG4xLnBvc3Rfb3JkZXIoKSksIFtsMSwgbDIsIGMxLCBsMywgbjFdKQogCiAgICAgZGVmIHRlc3RfcHJlX29yZGVyKHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCiAgICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIikKLSAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG4xLnByZV9vcmRlcigpKSwgW24xLCBsMSwgbDJdKQorICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMCwgImZvb2V5IikKKyAgICAgICAgYzEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKKyAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbYzEsIGwzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG4xLnByZV9vcmRlcigpKSwgW24xLCBjMSwgbDEsIGwyLCBsM10pCiAKICAgICBkZWYgdGVzdF9jaGFuZ2VkKHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImYiKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9yZWZhY3Rvci5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcmVmYWN0b3IucHkKaW5kZXggNTllNWE3NC4uM2VlY2RlOCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9yZWZhY3Rvci5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3JlZmFjdG9yLnB5CkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICAgICAgICAgICAgICAiaGkucHkiLAogICAgICAgICAgICAgICAgICIuZHVtYiIsCiAgICAgICAgICAgICAgICAgIi5hZnRlci5weSIsCisgICAgICAgICAgICAgICAgIm5vdHB5Lm5weSIsCiAgICAgICAgICAgICAgICAgInNhcHB5Il0KICAgICAgICAgZXhwZWN0ZWQgPSBbImhpLnB5Il0KICAgICAgICAgY2hlY2sodHJlZSwgZXhwZWN0ZWQpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3V0aWwucHkgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3V0aWwucHkKaW5kZXggNjE4NmI0Zi4uMmZhYjhiOSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF91dGlsLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfdXRpbC5weQpAQCAtNTY4LDEwICs1NjgsMjcgQEAKIAogICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0KHNlbGYpOgogICAgICAgICBub2RlID0gcGFyc2UoJ2JhcigpJykKLSAgICAgICAgZml4ZXJfdXRpbC50b3VjaF9pbXBvcnQoImNnaSIsICJlc2NhcGUiLCBub2RlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihub2RlKSwgJ2Zyb20gY2dpIGltcG9ydCBlc2NhcGVcbmJhcigpXG5cbicpCisgICAgICAgIGZpeGVyX3V0aWwudG91Y2hfaW1wb3J0KCJodG1sIiwgImVzY2FwZSIsIG5vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG5vZGUpLCAnZnJvbSBodG1sIGltcG9ydCBlc2NhcGVcbmJhcigpXG5cbicpCiAKICAgICBkZWYgdGVzdF9uYW1lX2ltcG9ydChzZWxmKToKICAgICAgICAgbm9kZSA9IHBhcnNlKCdiYXIoKScpCiAgICAgICAgIGZpeGVyX3V0aWwudG91Y2hfaW1wb3J0KE5vbmUsICJjZ2kiLCBub2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihub2RlKSwgJ2ltcG9ydCBjZ2lcbmJhcigpXG5cbicpCisKK2NsYXNzIFRlc3RfZmluZF9pbmRlbnRhdGlvbihzdXBwb3J0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25vdGhpbmcoc2VsZik6CisgICAgICAgIGZpID0gZml4ZXJfdXRpbC5maW5kX2luZGVudGF0aW9uCisgICAgICAgIG5vZGUgPSBwYXJzZSgibm9kZSgpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaShub2RlKSwgdSIiKQorICAgICAgICBub2RlID0gcGFyc2UoIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkobm9kZSksIHUiIikKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgZmkgPSBmaXhlcl91dGlsLmZpbmRfaW5kZW50YXRpb24KKyAgICAgICAgbm9kZSA9IHBhcnNlKCJkZWYgZigpOlxuICAgIHgoKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkobm9kZSksIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaShub2RlLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzRdLmNoaWxkcmVuWzJdKSwgdSIgICAgIikKKyAgICAgICAgbm9kZSA9IHBhcnNlKCJkZWYgZigpOlxuICAgIHgoKVxuICAgIHkoKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkobm9kZS5jaGlsZHJlblswXS5jaGlsZHJlbls0XS5jaGlsZHJlbls0XSksIHUiICAgICIpCmRpZmYgLS1naXQgYS9MaWIvbGluZWNhY2hlLnB5IGIvTGliL2xpbmVjYWNoZS5weQppbmRleCBjOTk5ODUxLi44MTFmMjdmIDEwMDY0NAotLS0gYS9MaWIvbGluZWNhY2hlLnB5CisrKyBiL0xpYi9saW5lY2FjaGUucHkKQEAgLTcyLDEzICs3MiwxMyBAQAogCiAgICAgaWYgZmlsZW5hbWUgaW4gY2FjaGU6CiAgICAgICAgIGRlbCBjYWNoZVtmaWxlbmFtZV0KLSAgICBpZiBub3QgZmlsZW5hbWUgb3IgZmlsZW5hbWVbMF0gKyBmaWxlbmFtZVstMV0gPT0gJzw+JzoKKyAgICBpZiBub3QgZmlsZW5hbWUgb3IgKGZpbGVuYW1lLnN0YXJ0c3dpdGgoJzwnKSBhbmQgZmlsZW5hbWUuZW5kc3dpdGgoJz4nKSk6CiAgICAgICAgIHJldHVybiBbXQogCiAgICAgZnVsbG5hbWUgPSBmaWxlbmFtZQogICAgIHRyeToKICAgICAgICAgc3RhdCA9IG9zLnN0YXQoZnVsbG5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGJhc2VuYW1lID0gZmlsZW5hbWUKIAogICAgICAgICAjIFRyeSBmb3IgYSBfX2xvYWRlcl9fLCBpZiBhdmFpbGFibGUKQEAgLTExNSwyMyArMTE1LDE4IEBACiAgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgYmFzZW5hbWUpCiAgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgICAgICMgTm90IHN1ZmZpY2llbnRseSBzdHJpbmctbGlrZSB0byBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aC4KKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0YXQgPSBvcy5zdGF0KGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN0YXQgPSBvcy5zdGF0KGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBObyBsdWNrCi0jIyAgICAgICAgICBwcmludCAnKioqIENhbm5vdCBzdGF0JywgZmlsZW5hbWUsICc6JywgbXNnCiAgICAgICAgICAgICByZXR1cm4gW10KICAgICB0cnk6Ci0gICAgICAgIGZwID0gb3BlbihmdWxsbmFtZSwgJ3JVJykKLSAgICAgICAgbGluZXMgPSBmcC5yZWFkbGluZXMoKQotICAgICAgICBmcC5jbG9zZSgpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKLSMjICAgICAgcHJpbnQgJyoqKiBDYW5ub3Qgb3BlbicsIGZ1bGxuYW1lLCAnOicsIG1zZworICAgICAgICB3aXRoIG9wZW4oZnVsbG5hbWUsICdyVScpIGFzIGZwOgorICAgICAgICAgICAgbGluZXMgPSBmcC5yZWFkbGluZXMoKQorICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICByZXR1cm4gW10KICAgICBpZiBsaW5lcyBhbmQgbm90IGxpbmVzWy0xXS5lbmRzd2l0aCgnXG4nKToKICAgICAgICAgbGluZXNbLTFdICs9ICdcbicKZGlmZiAtLWdpdCBhL0xpYi9sb2NhbGUucHkgYi9MaWIvbG9jYWxlLnB5CmluZGV4IGRmNWFiMzkuLjkyMWY0ZjYgMTAwNjQ0Ci0tLSBhL0xpYi9sb2NhbGUucHkKKysrIGIvTGliL2xvY2FsZS5weQpAQCAtMTEsNyArMTEsMTEgQEAKIAogIiIiCiAKLWltcG9ydCBzeXMsIGVuY29kaW5ncywgZW5jb2RpbmdzLmFsaWFzZXMKK2ltcG9ydCBzeXMKK2ltcG9ydCBlbmNvZGluZ3MKK2ltcG9ydCBlbmNvZGluZ3MuYWxpYXNlcworaW1wb3J0IHJlCitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBmdW5jdG9vbHMKIAogIyBUcnkgaW1wb3J0aW5nIHRoZSBfbG9jYWxlIG1vZHVsZS4KQEAgLTExMCwxMiArMTE0LDE1IEBACiAKICMgSXRlcmF0ZSBvdmVyIGdyb3VwaW5nIGludGVydmFscwogZGVmIF9ncm91cGluZ19pbnRlcnZhbHMoZ3JvdXBpbmcpOgorICAgIGxhc3RfaW50ZXJ2YWwgPSBOb25lCiAgICAgZm9yIGludGVydmFsIGluIGdyb3VwaW5nOgogICAgICAgICAjIGlmIGdyb3VwaW5nIGlzIC0xLCB3ZSBhcmUgZG9uZQogICAgICAgICBpZiBpbnRlcnZhbCA9PSBDSEFSX01BWDoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIDA6IHJlLXVzZSBsYXN0IGdyb3VwIGFkIGluZmluaXR1bQogICAgICAgICBpZiBpbnRlcnZhbCA9PSAwOgorICAgICAgICAgICAgaWYgbGFzdF9pbnRlcnZhbCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgZ3JvdXBpbmciKQogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICB5aWVsZCBsYXN0X2ludGVydmFsCiAgICAgICAgIHlpZWxkIGludGVydmFsCkBAIC0xNjYsNiArMTczLDkgQEAKICAgICAgICAgYW1vdW50IC09IDEKICAgICByZXR1cm4gc1tscG9zOnJwb3MrMV0KIAorX3BlcmNlbnRfcmUgPSByZS5jb21waWxlKHInJSg/OlwoKD9QPGtleT4uKj8pXCkpPycKKyAgICAgICAgICAgICAgICAgICAgICAgICByJyg/UDxtb2RpZmllcnM+Wy0jMC05ICsqLmhsTF0qPylbZUVmRmdHZGlvdXhYY3JzJV0nKQorCiBkZWYgZm9ybWF0KHBlcmNlbnQsIHZhbHVlLCBncm91cGluZz1GYWxzZSwgbW9uZXRhcnk9RmFsc2UsICphZGRpdGlvbmFsKToKICAgICAiIiJSZXR1cm5zIHRoZSBsb2NhbGUtYXdhcmUgc3Vic3RpdHV0aW9uIG9mIGEgJT8gc3BlY2lmaWVyCiAgICAgKHBlcmNlbnQpLgpAQCAtMTczLDkgKzE4MywxMyBAQAogICAgIGFkZGl0aW9uYWwgaXMgZm9yIGZvcm1hdCBzdHJpbmdzIHdoaWNoIGNvbnRhaW4gb25lIG9yIG1vcmUKICAgICAnKicgbW9kaWZpZXJzLiIiIgogICAgICMgdGhpcyBpcyBvbmx5IGZvciBvbmUtcGVyY2VudC1zcGVjaWZpZXIgc3RyaW5ncyBhbmQgdGhpcyBzaG91bGQgYmUgY2hlY2tlZAotICAgIGlmIHBlcmNlbnRbMF0gIT0gJyUnOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmb3JtYXQoKSBtdXN0IGJlIGdpdmVuIGV4YWN0bHkgb25lICVjaGFyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IHNwZWNpZmllciIpCisgICAgbWF0Y2ggPSBfcGVyY2VudF9yZS5tYXRjaChwZXJjZW50KQorICAgIGlmIG5vdCBtYXRjaCBvciBsZW4obWF0Y2guZ3JvdXAoKSkhPSBsZW4ocGVyY2VudCk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKCJmb3JtYXQoKSBtdXN0IGJlIGdpdmVuIGV4YWN0bHkgb25lICUlY2hhciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCBzcGVjaWZpZXIsICVzIG5vdCB2YWxpZCIpICUgcmVwcihwZXJjZW50KSkKKyAgICByZXR1cm4gX2Zvcm1hdChwZXJjZW50LCB2YWx1ZSwgZ3JvdXBpbmcsIG1vbmV0YXJ5LCAqYWRkaXRpb25hbCkKKworZGVmIF9mb3JtYXQocGVyY2VudCwgdmFsdWUsIGdyb3VwaW5nPUZhbHNlLCBtb25ldGFyeT1GYWxzZSwgKmFkZGl0aW9uYWwpOgogICAgIGlmIGFkZGl0aW9uYWw6CiAgICAgICAgIGZvcm1hdHRlZCA9IHBlcmNlbnQgJSAoKHZhbHVlLCkgKyBhZGRpdGlvbmFsKQogICAgIGVsc2U6CkBAIC0xOTksMTAgKzIxMyw2IEBACiAgICAgICAgICAgICBmb3JtYXR0ZWQgPSBfc3RyaXBfcGFkZGluZyhmb3JtYXR0ZWQsIHNlcHMpCiAgICAgcmV0dXJuIGZvcm1hdHRlZAogCi1pbXBvcnQgcmUsIG9wZXJhdG9yCi1fcGVyY2VudF9yZSA9IHJlLmNvbXBpbGUociclKD86XCgoP1A8a2V5Pi4qPylcKSk/JwotICAgICAgICAgICAgICAgICAgICAgICAgIHInKD9QPG1vZGlmaWVycz5bLSMwLTkgKyouaGxMXSo/KVtlRWZGZ0dkaW91eFhjcnMlXScpCi0KIGRlZiBmb3JtYXRfc3RyaW5nKGYsIHZhbCwgZ3JvdXBpbmc9RmFsc2UpOgogICAgICIiIkZvcm1hdHMgYSBzdHJpbmcgaW4gdGhlIHNhbWUgd2F5IHRoYXQgdGhlICUgZm9ybWF0dGluZyB3b3VsZCB1c2UsCiAgICAgYnV0IHRha2VzIHRoZSBjdXJyZW50IGxvY2FsZSBpbnRvIGFjY291bnQuCkBAIC0yMTAsMjIgKzIyMCwzMCBAQAogICAgIHBlcmNlbnRzID0gbGlzdChfcGVyY2VudF9yZS5maW5kaXRlcihmKSkKICAgICBuZXdfZiA9IF9wZXJjZW50X3JlLnN1YignJXMnLCBmKQogCi0gICAgaWYgaXNpbnN0YW5jZSh2YWwsIHR1cGxlKToKLSAgICAgICAgbmV3X3ZhbCA9IGxpc3QodmFsKQorICAgIGlmIG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUodmFsKToKKyAgICAgICAgbmV3X3ZhbCA9IFtdCisgICAgICAgIGZvciBwZXJjIGluIHBlcmNlbnRzOgorICAgICAgICAgICAgaWYgcGVyYy5ncm91cCgpWy0xXT09JyUnOgorICAgICAgICAgICAgICAgIG5ld192YWwuYXBwZW5kKCclJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3X3ZhbC5hcHBlbmQoZm9ybWF0KHBlcmMuZ3JvdXAoKSwgdmFsLCBncm91cGluZykpCisgICAgZWxzZToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsLCB0dXBsZSk6CisgICAgICAgICAgICB2YWwgPSAodmFsLCkKKyAgICAgICAgbmV3X3ZhbCA9IFtdCiAgICAgICAgIGkgPSAwCiAgICAgICAgIGZvciBwZXJjIGluIHBlcmNlbnRzOgotICAgICAgICAgICAgc3RhcmNvdW50ID0gcGVyYy5ncm91cCgnbW9kaWZpZXJzJykuY291bnQoJyonKQotICAgICAgICAgICAgbmV3X3ZhbFtpXSA9IGZvcm1hdChwZXJjLmdyb3VwKCksIG5ld192YWxbaV0sIGdyb3VwaW5nLCBGYWxzZSwgKm5ld192YWxbaSsxOmkrMStzdGFyY291bnRdKQotICAgICAgICAgICAgZGVsIG5ld192YWxbaSsxOmkrMStzdGFyY291bnRdCi0gICAgICAgICAgICBpICs9ICgxICsgc3RhcmNvdW50KQotICAgICAgICB2YWwgPSB0dXBsZShuZXdfdmFsKQotICAgIGVsaWYgb3BlcmF0b3IuaXNNYXBwaW5nVHlwZSh2YWwpOgotICAgICAgICBmb3IgcGVyYyBpbiBwZXJjZW50czoKLSAgICAgICAgICAgIGtleSA9IHBlcmMuZ3JvdXAoImtleSIpCi0gICAgICAgICAgICB2YWxba2V5XSA9IGZvcm1hdChwZXJjLmdyb3VwKCksIHZhbFtrZXldLCBncm91cGluZykKLSAgICBlbHNlOgotICAgICAgICAjIHZhbCBpcyBhIHNpbmdsZSB2YWx1ZQotICAgICAgICB2YWwgPSBmb3JtYXQocGVyY2VudHNbMF0uZ3JvdXAoKSwgdmFsLCBncm91cGluZykKKyAgICAgICAgICAgIGlmIHBlcmMuZ3JvdXAoKVstMV09PSclJzoKKyAgICAgICAgICAgICAgICBuZXdfdmFsLmFwcGVuZCgnJScpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXJjb3VudCA9IHBlcmMuZ3JvdXAoJ21vZGlmaWVycycpLmNvdW50KCcqJykKKyAgICAgICAgICAgICAgICBuZXdfdmFsLmFwcGVuZChfZm9ybWF0KHBlcmMuZ3JvdXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YWxbaSsxOmkrMStzdGFyY291bnRdKSkKKyAgICAgICAgICAgICAgICBpICs9ICgxICsgc3RhcmNvdW50KQorICAgIHZhbCA9IHR1cGxlKG5ld192YWwpCiAKICAgICByZXR1cm4gbmV3X2YgJSB2YWwKIApAQCAtNTIyLDEwICs1NDAsOCBAQAogICAgICIiIgogICAgIF9zZXRsb2NhbGUoY2F0ZWdvcnksIF9idWlsZF9sb2NhbGVuYW1lKGdldGRlZmF1bHRsb2NhbGUoKSkpCiAKLWlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ2RhcndpbicsICdtYWMnKToKK2lmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToKICAgICAjIE9uIFdpbjMyLCB0aGlzIHdpbGwgcmV0dXJuIHRoZSBBTlNJIGNvZGUgcGFnZQotICAgICMgT24gdGhlIE1hYywgaXQgc2hvdWxkIHJldHVybiB0aGUgc3lzdGVtIGVuY29kaW5nOwotICAgICMgaXQgbWlnaHQgcmV0dXJuICJhc2NpaSIgaW5zdGVhZAogICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUgPSBUcnVlKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjaGFyc2V0IHRoYXQgdGhlIHVzZXIgaXMgbGlrZWx5IHVzaW5nLiIiIgogICAgICAgICBpbXBvcnQgX2xvY2FsZQpAQCAtNTkxLDYgKzYwNyw3IEBACiAgICAgJ2lzbzg4NTlfMTMnOiAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xMycsCiAgICAgJ2lzbzg4NTlfMTQnOiAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xNCcsCiAgICAgJ2lzbzg4NTlfMTUnOiAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xNScsCisgICAgJ2lzbzg4NTlfMTYnOiAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xNicsCiAgICAgJ2lzbzg4NTlfMic6ICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0yJywKICAgICAnaXNvODg1OV8zJzogICAgICAgICAgICAgICAgICAgICdJU084ODU5LTMnLAogICAgICdpc284ODU5XzQnOiAgICAgICAgICAgICAgICAgICAgJ0lTTzg4NTktNCcsCkBAIC02NzksNiArNjk2LDI4IEBACiAjICAgIHVwZGF0ZWQgJ3NyX3l1Lm1pY3Jvc29mdGNwMTI1MUBjeXJpbGxpYycgLT4gJ3NyX1lVLkNQMTI1MScgdG8gJ3NyX0NTLkNQMTI1MScKICMgICAgdXBkYXRlZCAnc3JfeXUudXRmOEBjeXJpbGxpYycgLT4gJ3NyX1lVLlVURi04JyB0byAnc3JfQ1MuVVRGLTgnCiAjICAgIHVwZGF0ZWQgJ3NyX3l1QGN5cmlsbGljJyAtPiAnc3JfWVUuSVNPODg1OS01JyB0byAnc3JfQ1MuSVNPODg1OS01JworIworIyBBUCAyMDEwLTA0LTEyOgorIyBVcGRhdGVkIGFsaWFzIG1hcHBpbmcgdG8gbW9zdCByZWNlbnQgbG9jYWxlLmFsaWFzIGZpbGUKKyMgZnJvbSBYLm9yZyBkaXN0cmlidXRpb24gdXNpbmcgbWFrZWxvY2FsZWFsaWFzLnB5LgorIworIyBUaGVzZSBhcmUgdGhlIGRpZmZlcmVuY2VzIGNvbXBhcmVkIHRvIHRoZSBvbGQgbWFwcGluZyAoUHl0aG9uIDIuNi41CisjIGFuZCBvbGRlcik6CisjCisjICAgIHVwZGF0ZWQgJ3J1JyAtPiAncnVfUlUuSVNPODg1OS01JyB0byAncnVfUlUuVVRGLTgnCisjICAgIHVwZGF0ZWQgJ3J1X3J1JyAtPiAncnVfUlUuSVNPODg1OS01JyB0byAncnVfUlUuVVRGLTgnCisjICAgIHVwZGF0ZWQgJ3NlcmJvY3JvYXRpYW4nIC0+ICdzcl9DUy5JU084ODU5LTInIHRvICdzcl9SUy5VVEYtOEBsYXRpbicKKyMgICAgdXBkYXRlZCAnc2gnIC0+ICdzcl9DUy5JU084ODU5LTInIHRvICdzcl9SUy5VVEYtOEBsYXRpbicKKyMgICAgdXBkYXRlZCAnc2hfeXUnIC0+ICdzcl9DUy5JU084ODU5LTInIHRvICdzcl9SUy5VVEYtOEBsYXRpbicKKyMgICAgdXBkYXRlZCAnc3InIC0+ICdzcl9DUy5JU084ODU5LTUnIHRvICdzcl9SUy5VVEYtOCcKKyMgICAgdXBkYXRlZCAnc3JAY3lyaWxsaWMnIC0+ICdzcl9DUy5JU084ODU5LTUnIHRvICdzcl9SUy5VVEYtOCcKKyMgICAgdXBkYXRlZCAnc3JAbGF0bicgLT4gJ3NyX0NTLklTTzg4NTktMicgdG8gJ3NyX1JTLlVURi04QGxhdGluJworIyAgICB1cGRhdGVkICdzcl9jcy51dGY4QGxhdG4nIC0+ICdzcl9DUy5VVEYtOCcgdG8gJ3NyX1JTLlVURi04QGxhdGluJworIyAgICB1cGRhdGVkICdzcl9jc0BsYXRuJyAtPiAnc3JfQ1MuSVNPODg1OS0yJyB0byAnc3JfUlMuVVRGLThAbGF0aW4nCisjICAgIHVwZGF0ZWQgJ3NyX3l1JyAtPiAnc3JfQ1MuSVNPODg1OS01JyB0byAnc3JfUlMuVVRGLThAbGF0aW4nCisjICAgIHVwZGF0ZWQgJ3NyX3l1LnV0ZjhAY3lyaWxsaWMnIC0+ICdzcl9DUy5VVEYtOCcgdG8gJ3NyX1JTLlVURi04JworIyAgICB1cGRhdGVkICdzcl95dUBjeXJpbGxpYycgLT4gJ3NyX0NTLklTTzg4NTktNScgdG8gJ3NyX1JTLlVURi04JworIwogCiBsb2NhbGVfYWxpYXMgPSB7CiAgICAgJ2EzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhM19BWi5LT0k4LUMnLApAQCAtNzMwLDEzICs3NjksMTcgQEAKICAgICAnYXJfeWUuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1lFLklTTzg4NTktNicsCiAgICAgJ2FyYWJpYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9BQS5JU084ODU5LTYnLAogICAgICdhcmFiaWMuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAnYXJfQUEuSVNPODg1OS02JywKKyAgICAnYXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzX0lOLlVURi04JywKICAgICAnYXonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLklTTzg4NTktOUUnLAogICAgICdhel9heic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouSVNPODg1OS05RScsCiAgICAgJ2F6X2F6Lmlzbzg4NTk5ZSc6ICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5JU084ODU5LTlFJywKICAgICAnYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlX0JZLkNQMTI1MScsCisgICAgJ2JlQGxhdGluJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5VVEYtOEBsYXRpbicsCiAgICAgJ2JlX2J5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAogICAgICdiZV9ieS5jcDEyNTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuQ1AxMjUxJywKICAgICAnYmVfYnkubWljcm9zb2Z0Y3AxMjUxJzogICAgICAgICAgICAgICAgJ2JlX0JZLkNQMTI1MScsCisgICAgJ2JlX2J5LnV0ZjhAbGF0aW4nOiAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5VVEYtOEBsYXRpbicsCisgICAgJ2JlX2J5QGxhdGluJzogICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5VVEYtOEBsYXRpbicsCiAgICAgJ2JnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLAogICAgICdiZ19iZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuQ1AxMjUxJywKICAgICAnYmdfYmcuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLkNQMTI1MScsCkBAIC03NjYsMTIgKzgwOSwzMCBAQAogICAgICdjX2MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ2NfYy5jJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnY2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCisgICAgJ2NhX2FkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTEnLAorICAgICdjYV9hZC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xJywKKyAgICAnY2FfYWQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMTUnLAorICAgICdjYV9hZC5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xNScsCisgICAgJ2NhX2FkLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5VVEYtOCcsCisgICAgJ2NhX2FkQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTE1JywKICAgICAnY2FfZXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCiAgICAgJ2NhX2VzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAogICAgICdjYV9lcy5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xNScsCiAgICAgJ2NhX2VzLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTE1JywKICAgICAnY2FfZXMudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLlVURi04JywKICAgICAnY2FfZXNAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMTUnLAorICAgICdjYV9mcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuSVNPODg1OS0xJywKKyAgICAnY2FfZnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMScsCisgICAgJ2NhX2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTE1JywKKyAgICAnY2FfZnIuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMTUnLAorICAgICdjYV9mci51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuVVRGLTgnLAorICAgICdjYV9mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuSVNPODg1OS0xNScsCisgICAgJ2NhX2l0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5JU084ODU5LTEnLAorICAgICdjYV9pdC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xJywKKyAgICAnY2FfaXQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMTUnLAorICAgICdjYV9pdC5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xNScsCisgICAgJ2NhX2l0LnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5VVEYtOCcsCisgICAgJ2NhX2l0QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5JU084ODU5LTE1JywKICAgICAnY2F0YWxhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCiAgICAgJ2NleHRlbmQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAogICAgICdjZXh0ZW5kLmVuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKQEAgLTc5Myw2ICs4NTQsNyBAQAogICAgICdjel9jeic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKICAgICAnY3plY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2RhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAorICAgICdkYS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xNScsCiAgICAgJ2RhX2RrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAogICAgICdkYV9kay44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKICAgICAnZGFfZGsuODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMTUnLApAQCAtODAzLDYgKzg2NSw3IEBACiAgICAgJ2RhbmlzaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAogICAgICdkYW5zayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKICAgICAnZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCisgICAgJ2RlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTE1JywKICAgICAnZGVfYXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULklTTzg4NTktMScsCiAgICAgJ2RlX2F0Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTEnLAogICAgICdkZV9hdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfQVQuSVNPODg1OS0xNScsCkBAIC05ODQsNiArMTA0Nyw3IEBACiAgICAgJ2ZhX2lyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYV9JUi5VVEYtOCcsCiAgICAgJ2ZhX2lyLmlzaXJpMzM0Mic6ICAgICAgICAgICAgICAgICAgICAgICdmYV9JUi5JU0lSSS0zMzQyJywKICAgICAnZmknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAorICAgICdmaS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCiAgICAgJ2ZpX2ZpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKICAgICAnZmlfZmkuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMScsCiAgICAgJ2ZpX2ZpLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTEnLApAQCAtOTk5LDYgKzEwNjMsNyBAQAogICAgICdmb19mby5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZm9fRk8uSVNPODg1OS0xNScsCiAgICAgJ2ZvX2ZvQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb19GTy5JU084ODU5LTE1JywKICAgICAnZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCisgICAgJ2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTE1JywKICAgICAnZnJfYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMScsCiAgICAgJ2ZyX2JlLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTEnLAogICAgICdmcl9iZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xJywKQEAgLTEwODUsNiArMTE1MCw3IEBACiAgICAgJ2hpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaV9JTi5JU0NJSS1ERVYnLAogICAgICdoaV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGlfSU4uSVNDSUktREVWJywKICAgICAnaGlfaW4uaXNjaWlkZXYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2hpX0lOLklTQ0lJLURFVicsCisgICAgJ2huZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdobmVfSU4uVVRGLTgnLAogICAgICdocic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKICAgICAnaHJfaHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCiAgICAgJ2hyX2hyLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLApAQCAtMTExMSw2ICsxMTc3LDcgQEAKICAgICAnaXNvXzg4NTlfMSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCiAgICAgJ2lzb184ODU5XzE1JzogICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTE1JywKICAgICAnaXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMScsCisgICAgJ2l0Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTE1JywKICAgICAnaXRfY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0NILklTTzg4NTktMScsCiAgICAgJ2l0X2NoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdpdF9DSC5JU084ODU5LTEnLAogICAgICdpdF9jaC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnaXRfQ0guSVNPODg1OS0xNScsCkBAIC0xMTQyLDYgKzEyMDksNyBAQAogICAgICdqYV9qcC5qaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuSklTNycsCiAgICAgJ2phX2pwLmppczcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5KSVM3JywKICAgICAnamFfanAubXNjb2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLlNKSVMnLAorICAgICdqYV9qcC5wY2snOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuU0pJUycsCiAgICAgJ2phX2pwLnNqaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5TSklTJywKICAgICAnamFfanAudWppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKICAgICAnamFwYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKQEAgLTExNjEsNiArMTIyOSw3IEBACiAgICAgJ2tsX2dsLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdrbF9HTC5JU084ODU5LTE1JywKICAgICAna2xfZ2xAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tsX0dMLklTTzg4NTktMTUnLAogICAgICdrbV9raCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna21fS0guVVRGLTgnLAorICAgICdrbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna25fSU4uVVRGLTgnLAogICAgICdrbl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna25fSU4uVVRGLTgnLAogICAgICdrbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrb19rcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLApAQCAtMTE2OCw2ICsxMjM3LDggQEAKICAgICAna29fa3IuZXVja3InOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKICAgICAna29yZWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKICAgICAna29yZWFuLmV1Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKKyAgICAna3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tzX0lOLlVURi04JywKKyAgICAna3NfaW5AZGV2YW5hZ2FyaSc6ICAgICAgICAgICAgICAgICAgICAgJ2tzX0lOQGRldmFuYWdhcmkuVVRGLTgnLAogICAgICdrdyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xJywKICAgICAna3dfZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMScsCiAgICAgJ2t3X2diLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTEnLApAQCAtMTE5MCw2ICsxMjYxLDcgQEAKICAgICAnbHZfbHYnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2x2X0xWLklTTzg4NTktMTMnLAogICAgICdsdl9sdi5pc284ODU5MTMnOiAgICAgICAgICAgICAgICAgICAgICAnbHZfTFYuSVNPODg1OS0xMycsCiAgICAgJ2x2X2x2Lmlzbzg4NTk0JzogICAgICAgICAgICAgICAgICAgICAgICdsdl9MVi5JU084ODU5LTQnLAorICAgICdtYWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFpX0lOLlVURi04JywKICAgICAnbWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pX05aLklTTzg4NTktMScsCiAgICAgJ21pX256JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaV9OWi5JU084ODU5LTEnLAogICAgICdtaV9uei5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbWlfTlouSVNPODg1OS0xJywKQEAgLTExOTgsNiArMTI3MCw4IEBACiAgICAgJ21rX21rLmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdta19NSy5DUDEyNTEnLAogICAgICdta19tay5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAnbWtfTUsuSVNPODg1OS01JywKICAgICAnbWtfbWsubWljcm9zb2Z0Y3AxMjUxJzogICAgICAgICAgICAgICAgJ21rX01LLkNQMTI1MScsCisgICAgJ21sJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtbF9JTi5VVEYtOCcsCisgICAgJ21yJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtcl9JTi5VVEYtOCcsCiAgICAgJ21yX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtcl9JTi5VVEYtOCcsCiAgICAgJ21zJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc19NWS5JU084ODU5LTEnLAogICAgICdtc19teSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXNfTVkuSVNPODg1OS0xJywKQEAgLTEyMTIsNiArMTI4Niw3IEBACiAgICAgJ25iX25vLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICduYl9OTy5JU084ODU5LTE1JywKICAgICAnbmJfbm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMTUnLAogICAgICdubCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xJywKKyAgICAnbmwuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMTUnLAogICAgICdubF9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xJywKICAgICAnbmxfYmUuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMScsCiAgICAgJ25sX2JlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTEnLApAQCAtMTIzOCw2ICsxMzEzLDggQEAKICAgICAnbm9fbm8uODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCiAgICAgJ25vX25vLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAogICAgICdub19uby5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xNScsCisgICAgJ25vX25vLmlzbzg4NTkxQGJva21hbCc6ICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAorICAgICdub19uby5pc284ODU5MUBueW5vcnNrJzogICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKICAgICAnbm9fbm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMTUnLAogICAgICdub3J3ZWdpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKICAgICAnbm9yd2VnaWFuLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCkBAIC0xMjU5LDYgKzEzMzYsOCBAQAogICAgICdvY19mci5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnb2NfRlIuSVNPODg1OS0xJywKICAgICAnb2NfZnIuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ29jX0ZSLklTTzg4NTktMTUnLAogICAgICdvY19mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnb2NfRlIuSVNPODg1OS0xNScsCisgICAgJ29yJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcl9JTi5VVEYtOCcsCisgICAgJ3BhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYV9JTi5VVEYtOCcsCiAgICAgJ3BhX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYV9JTi5VVEYtOCcsCiAgICAgJ3BkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZF9VUy5JU084ODU5LTEnLAogICAgICdwZF9kZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGRfREUuSVNPODg1OS0xJywKQEAgLTEyODYsNiArMTM2NSw3IEBACiAgICAgJ3BwX2FuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcF9BTi5JU084ODU5LTEnLAogICAgICdwcF9hbi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncHBfQU4uSVNPODg1OS0xJywKICAgICAncHQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMScsCisgICAgJ3B0Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTE1JywKICAgICAncHRfYnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMScsCiAgICAgJ3B0X2JyLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLAogICAgICdwdF9ici5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xJywKQEAgLTEzMDIsOCArMTM4Miw5IEBACiAgICAgJ3JvX3JvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyb19STy5JU084ODU5LTInLAogICAgICdyb19yby5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKICAgICAncm9tYW5pYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvX1JPLklTTzg4NTktMicsCi0gICAgJ3J1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5JU084ODU5LTUnLAotICAgICdydV9ydSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuSVNPODg1OS01JywKKyAgICAncnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLlVURi04JywKKyAgICAncnUua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLktPSTgtUicsCisgICAgJ3J1X3J1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5VVEYtOCcsCiAgICAgJ3J1X3J1LmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5DUDEyNTEnLAogICAgICdydV9ydS5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuSVNPODg1OS01JywKICAgICAncnVfcnUua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLktPSTgtUicsCkBAIC0xMzE3LDEzICsxMzk4LDE1IEBACiAgICAgJ3J3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyd19SVy5JU084ODU5LTEnLAogICAgICdyd19ydyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncndfUlcuSVNPODg1OS0xJywKICAgICAncndfcncuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3J3X1JXLklTTzg4NTktMScsCisgICAgJ3NkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZF9JTkBkZXZhbmFnYXJpLlVURi04JywKICAgICAnc2Vfbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlX05PLlVURi04JywKLSAgICAnc2VyYm9jcm9hdGlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCi0gICAgJ3NoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAorICAgICdzZXJib2Nyb2F0aWFuJzogICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAorICAgICdzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAorICAgICdzaF9iYS5pc284ODU5MkBib3NuaWEnOiAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKICAgICAnc2hfaHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoX0hSLklTTzg4NTktMicsCiAgICAgJ3NoX2hyLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLAogICAgICdzaF9zcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKLSAgICAnc2hfeXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCisgICAgJ3NoX3l1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCiAgICAgJ3NpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaV9MSy5VVEYtOCcsCiAgICAgJ3NpX2xrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaV9MSy5VVEYtOCcsCiAgICAgJ3NpbmhhbGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaV9MSy5VVEYtOCcsCkBAIC0xMzQ2LDIzICsxNDI5LDMwIEBACiAgICAgJ3NxJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcV9BTC5JU084ODU5LTInLAogICAgICdzcV9hbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3FfQUwuSVNPODg1OS0yJywKICAgICAnc3FfYWwuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3NxX0FMLklTTzg4NTktMicsCi0gICAgJ3NyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAotICAgICdzckBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKLSAgICAnc3JAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCisgICAgJ3NyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCisgICAgJ3NyQGN5cmlsbGljJzogICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCisgICAgJ3NyQGxhdGluJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCisgICAgJ3NyQGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCisgICAgJ3NyX2NzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCiAgICAgJ3NyX2NzLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAogICAgICdzcl9jcy5pc284ODU5MkBsYXRuJzogICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKICAgICAnc3JfY3MuaXNvODg1OTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCi0gICAgJ3NyX2NzLnV0ZjhAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5VVEYtOCcsCi0gICAgJ3NyX2NzQGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAorICAgICdzcl9jcy51dGY4QGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAorICAgICdzcl9jc0BsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAorICAgICdzcl9tZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfTUUuVVRGLTgnLAorICAgICdzcl9ycyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAorICAgICdzcl9ycy51dGY4QGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAorICAgICdzcl9yc0BsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAorICAgICdzcl9yc0BsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAogICAgICdzcl9zcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKLSAgICAnc3JfeXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCisgICAgJ3NyX3l1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCiAgICAgJ3NyX3l1LmNwMTI1MUBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICdzcl9DUy5DUDEyNTEnLAogICAgICdzcl95dS5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKICAgICAnc3JfeXUuaXNvODg1OTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCiAgICAgJ3NyX3l1Lmlzbzg4NTk1QGN5cmlsbGljJzogICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAogICAgICdzcl95dS5taWNyb3NvZnRjcDEyNTFAY3lyaWxsaWMnOiAgICAgICAnc3JfQ1MuQ1AxMjUxJywKLSAgICAnc3JfeXUudXRmOEBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgJ3NyX0NTLlVURi04JywKLSAgICAnc3JfeXVAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCisgICAgJ3NyX3l1LnV0ZjhAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCisgICAgJ3NyX3l1QGN5cmlsbGljJzogICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCiAgICAgJ3NzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc19aQS5JU084ODU5LTEnLAogICAgICdzc196YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NfWkEuSVNPODg1OS0xJywKICAgICAnc3NfemEuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NzX1pBLklTTzg4NTktMScsCkBAIC0xMzcwLDYgKzE0NjAsNyBAQAogICAgICdzdF96YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RfWkEuSVNPODg1OS0xJywKICAgICAnc3RfemEuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3N0X1pBLklTTzg4NTktMScsCiAgICAgJ3N2JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTEnLAorICAgICdzdi5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xNScsCiAgICAgJ3N2X2ZpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9GSS5JU084ODU5LTEnLAogICAgICdzdl9maS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3ZfRkkuSVNPODg1OS0xJywKICAgICAnc3ZfZmkuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLklTTzg4NTktMTUnLApAQCAtMTM4Nyw2ICsxNDc4LDcgQEAKICAgICAndGFfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhX0lOLlRTQ0lJLTAnLAogICAgICd0YV9pbi50c2NpaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAndGFfSU4uVFNDSUktMCcsCiAgICAgJ3RhX2luLnRzY2lpMCc6ICAgICAgICAgICAgICAgICAgICAgICAgICd0YV9JTi5UU0NJSS0wJywKKyAgICAndGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RlX0lOLlVURi04JywKICAgICAndGcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RnX1RKLktPSTgtQycsCiAgICAgJ3RnX3RqJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0Z19USi5LT0k4LUMnLAogICAgICd0Z190ai5rb2k4Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAndGdfVEouS09JOC1DJywKQEAgLTE0NjIsNiArMTU1NCw3IEBACiAgICAgJ3poX2NuLmdiayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5nYmsnLAogICAgICd6aF9oayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfSEsuYmlnNWhrc2NzJywKICAgICAnemhfaGsuYmlnNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzUnLAorICAgICd6aF9oay5iaWc1aGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAnemhfSEsuYmlnNWhrc2NzJywKICAgICAnemhfaGsuYmlnNWhrc2NzJzogICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzVoa3NjcycsCiAgICAgJ3poX3R3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9UVy5iaWc1JywKICAgICAnemhfdHcuYmlnNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmJpZzUnLApAQCAtMTQ3Nyw3ICsxNTcwLDcgQEAKICMKICMgVGhpcyBsaXN0IGhhcyBiZWVuIHVwZGF0ZWQgZnJvbQogIyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL2ludGwvbmxzXzIzOHouYXNwCi0jIHRvIGluY2x1ZGUgZXZlcnkgbG9jYWxlIHVwIHRvIFdpbmRvd3MgWFAuCisjIHRvIGluY2x1ZGUgZXZlcnkgbG9jYWxlIHVwIHRvIFdpbmRvd3MgVmlzdGEuCiAjCiAjIE5PVEU6IHRoaXMgbWFwcGluZyBpcyBpbmNvbXBsZXRlLiAgSWYgeW91ciBsYW5ndWFnZSBpcyBtaXNzaW5nLCBwbGVhc2UKICMgc3VibWl0IGEgYnVnIHJlcG9ydCB0byBQeXRob24gYnVnIG1hbmFnZXIsIHdoaWNoIHlvdSBjYW4gZmluZCB2aWE6CkBAIC0xNDg5LDYgKzE1ODIsOCBAQAogd2luZG93c19sb2NhbGUgPSB7CiAgICAgMHgwNDM2OiAiYWZfWkEiLCAjIEFmcmlrYWFucwogICAgIDB4MDQxYzogInNxX0FMIiwgIyBBbGJhbmlhbgorICAgIDB4MDQ4NDogImdzd19GUiIsIyBBbHNhdGlhbiAtIEZyYW5jZQorICAgIDB4MDQ1ZTogImFtX0VUIiwgIyBBbWhhcmljIC0gRXRoaW9waWEKICAgICAweDA0MDE6ICJhcl9TQSIsICMgQXJhYmljIC0gU2F1ZGkgQXJhYmlhCiAgICAgMHgwODAxOiAiYXJfSVEiLCAjIEFyYWJpYyAtIElyYXEKICAgICAweDBjMDE6ICJhcl9FRyIsICMgQXJhYmljIC0gRWd5cHQKQEAgLTE1MDYsMTUgKzE2MDEsMTggQEAKICAgICAweDNjMDE6ICJhcl9CSCIsICMgQXJhYmljIC0gQmFocmFpbgogICAgIDB4NDAwMTogImFyX1FBIiwgIyBBcmFiaWMgLSBRYXRhcgogICAgIDB4MDQyYjogImh5X0FNIiwgIyBBcm1lbmlhbgotICAgIDB4MDQyYzogImF6X0FaIiwgIyBBemVyaSBMYXRpbgorICAgIDB4MDQ0ZDogImFzX0lOIiwgIyBBc3NhbWVzZSAtIEluZGlhCisgICAgMHgwNDJjOiAiYXpfQVoiLCAjIEF6ZXJpIC0gTGF0aW4KICAgICAweDA4MmM6ICJhel9BWiIsICMgQXplcmkgLSBDeXJpbGxpYwotICAgIDB4MDQyZDogImV1X0VTIiwgIyBCYXNxdWUKKyAgICAweDA0NmQ6ICJiYV9SVSIsICMgQmFzaGtpcgorICAgIDB4MDQyZDogImV1X0VTIiwgIyBCYXNxdWUgLSBSdXNzaWEKICAgICAweDA0MjM6ICJiZV9CWSIsICMgQmVsYXJ1c2lhbgogICAgIDB4MDQ0NTogImJuX0lOIiwgIyBCZWdhbGkKLSAgICAweDIwMWE6ICJic19CQSIsICMgQm9zbmlhbgotICAgIDB4MTQxYTogImJzX0JBIiwgIyBCb3NuaWFuIC0gQ3lyaWxsaWMKKyAgICAweDIwMWE6ICJic19CQSIsICMgQm9zbmlhbiAtIEN5cmlsbGljCisgICAgMHgxNDFhOiAiYnNfQkEiLCAjIEJvc25pYW4gLSBMYXRpbgogICAgIDB4MDQ3ZTogImJyX0ZSIiwgIyBCcmV0b24gLSBGcmFuY2UKICAgICAweDA0MDI6ICJiZ19CRyIsICMgQnVsZ2FyaWFuCisjICAgIDB4MDQ1NTogIm15X01NIiwgIyBCdXJtZXNlIC0gTm90IHN1cHBvcnRlZAogICAgIDB4MDQwMzogImNhX0VTIiwgIyBDYXRhbGFuCiAgICAgMHgwMDA0OiAiemhfQ0hTIiwjIENoaW5lc2UgLSBTaW1wbGlmaWVkCiAgICAgMHgwNDA0OiAiemhfVFciLCAjIENoaW5lc2UgLSBUYWl3YW4KQEAgLTE1MjMsNiArMTYyMSw3IEBACiAgICAgMHgxMDA0OiAiemhfU0ciLCAjIENoaW5lc2UgLSBTaW5nYXBvcmUKICAgICAweDE0MDQ6ICJ6aF9NTyIsICMgQ2hpbmVzZSAtIE1hY2FvIFMuQS5SLgogICAgIDB4N2MwNDogInpoX0NIVCIsIyBDaGluZXNlIC0gVHJhZGl0aW9uYWwKKyAgICAweDA0ODM6ICJjb19GUiIsICMgQ29yc2ljYW4gLSBGcmFuY2UKICAgICAweDA0MWE6ICJocl9IUiIsICMgQ3JvYXRpYW4KICAgICAweDEwMWE6ICJocl9CQSIsICMgQ3JvYXRpYW4gLSBCb3NuaWEKICAgICAweDA0MDU6ICJjc19DWiIsICMgQ3plY2gKQEAgLTE1NDMsNyArMTY0MiwxMCBAQAogICAgIDB4MjgwOTogImVuX0JaIiwgIyBFbmdsaXNoIC0gQmVsaXplCiAgICAgMHgyYzA5OiAiZW5fVFQiLCAjIEVuZ2xpc2ggLSBUcmluaWRhZAogICAgIDB4MzAwOTogImVuX1pXIiwgIyBFbmdsaXNoIC0gWmltYmFid2UKLSAgICAweDM0MDk6ICJlbl9QSCIsICMgRW5nbGlzaCAtIFBoaWxsaXBwaW5lcworICAgIDB4MzQwOTogImVuX1BIIiwgIyBFbmdsaXNoIC0gUGhpbGlwcGluZXMKKyAgICAweDQwMDk6ICJlbl9JTiIsICMgRW5nbGlzaCAtIEluZGlhCisgICAgMHg0NDA5OiAiZW5fTVkiLCAjIEVuZ2xpc2ggLSBNYWxheXNpYQorICAgIDB4NDgwOTogImVuX0lOIiwgIyBFbmdsaXNoIC0gU2luZ2Fwb3JlCiAgICAgMHgwNDI1OiAiZXRfRUUiLCAjIEVzdG9uaWFuCiAgICAgMHgwNDM4OiAiZm9fRk8iLCAjIEZhcm9lc2UKICAgICAweDA0NjQ6ICJmaWxfUEgiLCMgRmlsaXBpbm8KQEAgLTE1NjMsMzggKzE2NjUsNDQgQEAKICAgICAweDEwMDc6ICJkZV9MVSIsICMgR2VybWFuIC0gTHV4ZW1ib3VyZwogICAgIDB4MTQwNzogImRlX0xJIiwgIyBHZXJtYW4gLSBMaWVjaHRlbnN0ZWluCiAgICAgMHgwNDA4OiAiZWxfR1IiLCAjIEdyZWVrCisgICAgMHgwNDZmOiAia2xfR0wiLCAjIEdyZWVubGFuZGljIC0gR3JlZW5sYW5kCiAgICAgMHgwNDQ3OiAiZ3VfSU4iLCAjIEd1amFyYXRpCisgICAgMHgwNDY4OiAiaGFfTkciLCAjIEhhdXNhIC0gTGF0aW4KICAgICAweDA0MGQ6ICJoZV9JTCIsICMgSGVicmV3CiAgICAgMHgwNDM5OiAiaGlfSU4iLCAjIEhpbmRpCiAgICAgMHgwNDBlOiAiaHVfSFUiLCAjIEh1bmdhcmlhbgogICAgIDB4MDQwZjogImlzX0lTIiwgIyBJY2VsYW5kaWMKICAgICAweDA0MjE6ICJpZF9JRCIsICMgSW5kb25lc2lhbgotICAgIDB4MDQ1ZDogIml1X0NBIiwgIyBJbnVrdGl0dXQKKyAgICAweDA0NWQ6ICJpdV9DQSIsICMgSW51a3RpdHV0IC0gU3lsbGFiaWNzCiAgICAgMHgwODVkOiAiaXVfQ0EiLCAjIEludWt0aXR1dCAtIExhdGluCiAgICAgMHgwODNjOiAiZ2FfSUUiLCAjIElyaXNoIC0gSXJlbGFuZAotICAgIDB4MDQzNDogInhoX1pBIiwgIyBYaG9zYSAtIFNvdXRoIEFmcmljYQotICAgIDB4MDQzNTogInp1X1pBIiwgIyBadWx1CiAgICAgMHgwNDEwOiAiaXRfSVQiLCAjIEl0YWxpYW4gLSBJdGFseQogICAgIDB4MDgxMDogIml0X0NIIiwgIyBJdGFsaWFuIC0gU3dpdHplcmxhbmQKICAgICAweDA0MTE6ICJqYV9KUCIsICMgSmFwYW5lc2UKICAgICAweDA0NGI6ICJrbl9JTiIsICMgS2FubmFkYSAtIEluZGlhCiAgICAgMHgwNDNmOiAia2tfS1oiLCAjIEthemFraAorICAgIDB4MDQ1MzogImtoX0tIIiwgIyBLaG1lciAtIENhbWJvZGlhCisgICAgMHgwNDg2OiAicXV0X0dUIiwjIEsnaWNoZSAtIEd1YXRlbWFsYQorICAgIDB4MDQ4NzogInJ3X1JXIiwgIyBLaW55YXJ3YW5kYSAtIFJ3YW5kYQogICAgIDB4MDQ1NzogImtva19JTiIsIyBLb25rYW5pCiAgICAgMHgwNDEyOiAia29fS1IiLCAjIEtvcmVhbgogICAgIDB4MDQ0MDogImt5X0tHIiwgIyBLeXJneXoKKyAgICAweDA0NTQ6ICJsb19MQSIsICMgTGFvIC0gTGFvIFBEUgogICAgIDB4MDQyNjogImx2X0xWIiwgIyBMYXR2aWFuCiAgICAgMHgwNDI3OiAibHRfTFQiLCAjIExpdGh1YW5pYW4KKyAgICAweDA4MmU6ICJkc2JfREUiLCMgTG93ZXIgU29yYmlhbiAtIEdlcm1hbnkKICAgICAweDA0NmU6ICJsYl9MVSIsICMgTHV4ZW1ib3VyZ2lzaAotICAgIDB4MDQyZjogIm1rX01LIiwgIyBGWVJPIE1hY2Vkb25pYW4KKyAgICAweDA0MmY6ICJta19NSyIsICMgRllST00gTWFjZWRvbmlhbgogICAgIDB4MDQzZTogIm1zX01ZIiwgIyBNYWxheSAtIE1hbGF5c2lhCi0gICAgMHgwODNlOiAibXNfQk4iLCAjIE1hbGF5IC0gQnJ1bmVpCisgICAgMHgwODNlOiAibXNfQk4iLCAjIE1hbGF5IC0gQnJ1bmVpIERhcnVzc2FsYW0KICAgICAweDA0NGM6ICJtbF9JTiIsICMgTWFsYXlhbGFtIC0gSW5kaWEKICAgICAweDA0M2E6ICJtdF9NVCIsICMgTWFsdGVzZQogICAgIDB4MDQ4MTogIm1pX05aIiwgIyBNYW9yaQogICAgIDB4MDQ3YTogImFybl9DTCIsIyBNYXB1ZHVuZ3VuCiAgICAgMHgwNDRlOiAibXJfSU4iLCAjIE1hcmF0aGkKICAgICAweDA0N2M6ICJtb2hfQ0EiLCMgTW9oYXdrIC0gQ2FuYWRhCi0gICAgMHgwNDUwOiAibW5fTU4iLCAjIE1vbmdvbGlhbgorICAgIDB4MDQ1MDogIm1uX01OIiwgIyBNb25nb2xpYW4gLSBDeXJpbGxpYworICAgIDB4MDg1MDogIm1uX0NOIiwgIyBNb25nb2xpYW4gLSBQUkMKICAgICAweDA0NjE6ICJuZV9OUCIsICMgTmVwYWxpCiAgICAgMHgwNDE0OiAibmJfTk8iLCAjIE5vcndlZ2lhbiAtIEJva21hbAogICAgIDB4MDgxNDogIm5uX05PIiwgIyBOb3J3ZWdpYW4gLSBOeW5vcnNrCkBAIC0xNjEwLDcgKzE3MTgsNyBAQAogICAgIDB4MDg2YjogInF1el9FQyIsIyBRdWVjaHVhIChFY3VhZG9yKQogICAgIDB4MGM2YjogInF1el9QRSIsIyBRdWVjaHVhIChQZXJ1KQogICAgIDB4MDQxODogInJvX1JPIiwgIyBSb21hbmlhbiAtIFJvbWFuaWEKLSAgICAweDA0MTc6ICJybV9DSCIsICMgUmFldG8tUm9tYW5lc2UKKyAgICAweDA0MTc6ICJybV9DSCIsICMgUm9tYW5zaAogICAgIDB4MDQxOTogInJ1X1JVIiwgIyBSdXNzaWFuCiAgICAgMHgyNDNiOiAic21uX0ZJIiwjIFNhbWkgRmlubGFuZAogICAgIDB4MTAzYjogInNtal9OTyIsIyBTYW1pIE5vcndheQpAQCAtMTYyNiw2ICsxNzM0LDcgQEAKICAgICAweDFjMWE6ICJzcl9CQSIsICMgU2VyYmlhbiAtIEJvc25pYSBDeXJpbGxpYwogICAgIDB4MDgxYTogInNyX1NQIiwgIyBTZXJiaWFuIC0gTGF0aW4KICAgICAweDE4MWE6ICJzcl9CQSIsICMgU2VyYmlhbiAtIEJvc25pYSBMYXRpbgorICAgIDB4MDQ1YjogInNpX0xLIiwgIyBTaW5oYWxhIC0gU3JpIExhbmthCiAgICAgMHgwNDZjOiAibnNfWkEiLCAjIE5vcnRoZXJuIFNvdGhvCiAgICAgMHgwNDMyOiAidG5fWkEiLCAjIFNldHN3YW5hIC0gU291dGhlcm4gQWZyaWNhCiAgICAgMHgwNDFiOiAic2tfU0siLCAjIFNsb3ZhawpAQCAtMTY1MCwyMiArMTc1OSwzNyBAQAogICAgIDB4NDgwYTogImVzX0hOIiwgIyBTcGFuaXNoIC0gSG9uZHVyYXMKICAgICAweDRjMGE6ICJlc19OSSIsICMgU3BhbmlzaCAtIE5pY2FyYWd1YQogICAgIDB4NTAwYTogImVzX1BSIiwgIyBTcGFuaXNoIC0gUHVlcnRvIFJpY28KKyAgICAweDU0MGE6ICJlc19VUyIsICMgU3BhbmlzaCAtIFVuaXRlZCBTdGF0ZXMKKyMgICAgMHgwNDMwOiAiIiwgIyBTdXR1IC0gTm90IHN1cHBvcnRlZAogICAgIDB4MDQ0MTogInN3X0tFIiwgIyBTd2FoaWxpCiAgICAgMHgwNDFkOiAic3ZfU0UiLCAjIFN3ZWRpc2ggLSBTd2VkZW4KICAgICAweDA4MWQ6ICJzdl9GSSIsICMgU3dlZGlzaCAtIEZpbmxhbmQKICAgICAweDA0NWE6ICJzeXJfU1kiLCMgU3lyaWFjCisgICAgMHgwNDI4OiAidGdfVEoiLCAjIFRhamlrIC0gQ3lyaWxsaWMKKyAgICAweDA4NWY6ICJ0bXpfRFoiLCMgVGFtYXppZ2h0IC0gTGF0aW4KICAgICAweDA0NDk6ICJ0YV9JTiIsICMgVGFtaWwKICAgICAweDA0NDQ6ICJ0dF9SVSIsICMgVGF0YXIKICAgICAweDA0NGE6ICJ0ZV9JTiIsICMgVGVsdWd1CiAgICAgMHgwNDFlOiAidGhfVEgiLCAjIFRoYWkKKyAgICAweDA4NTE6ICJib19CVCIsICMgVGliZXRhbiAtIEJodXRhbgorICAgIDB4MDQ1MTogImJvX0NOIiwgIyBUaWJldGFuIC0gUFJDCiAgICAgMHgwNDFmOiAidHJfVFIiLCAjIFR1cmtpc2gKKyAgICAweDA0NDI6ICJ0a19UTSIsICMgVHVya21lbiAtIEN5cmlsbGljCisgICAgMHgwNDgwOiAidWdfQ04iLCAjIFVpZ2h1ciAtIEFyYWJpYwogICAgIDB4MDQyMjogInVrX1VBIiwgIyBVa3JhaW5pYW4KKyAgICAweDA0MmU6ICJ3ZW5fREUiLCMgVXBwZXIgU29yYmlhbiAtIEdlcm1hbnkKICAgICAweDA0MjA6ICJ1cl9QSyIsICMgVXJkdQogICAgIDB4MDgyMDogInVyX0lOIiwgIyBVcmR1IC0gSW5kaWEKICAgICAweDA0NDM6ICJ1el9VWiIsICMgVXpiZWsgLSBMYXRpbgogICAgIDB4MDg0MzogInV6X1VaIiwgIyBVemJlayAtIEN5cmlsbGljCiAgICAgMHgwNDJhOiAidmlfVk4iLCAjIFZpZXRuYW1lc2UKICAgICAweDA0NTI6ICJjeV9HQiIsICMgV2Vsc2gKKyAgICAweDA0ODg6ICJ3b19TTiIsICMgV29sb2YgLSBTZW5lZ2FsCisgICAgMHgwNDM0OiAieGhfWkEiLCAjIFhob3NhIC0gU291dGggQWZyaWNhCisgICAgMHgwNDg1OiAic2FoX1JVIiwjIFlha3V0IC0gQ3lyaWxsaWMKKyAgICAweDA0Nzg6ICJpaV9DTiIsICMgWWkgLSBQUkMKKyAgICAweDA0NmE6ICJ5b19ORyIsICMgWW9ydWJhIC0gTmlnZXJpYQorICAgIDB4MDQzNTogInp1X1pBIiwgIyBadWx1CiB9CiAKIGRlZiBfcHJpbnRfbG9jYWxlKCk6CmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9fX2luaXRfXy5weSBiL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CmluZGV4IGI0OGJlZTguLjJmMDgxYTAgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CisrKyBiL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgMjAwMS0yMDA5IGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgMjAwMS0yMDEwIGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKICMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLApAQCAtMjMsMTYgKzIzLDE2IEBACiBUbyB1c2UsIHNpbXBseSAnaW1wb3J0IGxvZ2dpbmcnIGFuZCBsb2cgYXdheSEKICIiIgogCitpbXBvcnQgc3lzLCBvcywgdGltZSwgY1N0cmluZ0lPLCB0cmFjZWJhY2ssIHdhcm5pbmdzLCB3ZWFrcmVmCisKIF9fYWxsX18gPSBbJ0JBU0lDX0ZPUk1BVCcsICdCdWZmZXJpbmdGb3JtYXR0ZXInLCAnQ1JJVElDQUwnLCAnREVCVUcnLCAnRVJST1InLAogICAgICAgICAgICAnRkFUQUwnLCAnRmlsZUhhbmRsZXInLCAnRmlsdGVyJywgJ0Zvcm1hdHRlcicsICdIYW5kbGVyJywgJ0lORk8nLAotICAgICAgICAgICAnTG9nUmVjb3JkJywgJ0xvZ2dlcicsICdMb2dnZXJBZGFwdGVyJywgJ05PVFNFVCcsCisgICAgICAgICAgICdMb2dSZWNvcmQnLCAnTG9nZ2VyJywgJ0xvZ2dlckFkYXB0ZXInLCAnTk9UU0VUJywgJ051bGxIYW5kbGVyJywKICAgICAgICAgICAgJ1N0cmVhbUhhbmRsZXInLCAnV0FSTicsICdXQVJOSU5HJywgJ2FkZExldmVsTmFtZScsICdiYXNpY0NvbmZpZycsCi0gICAgICAgICAgICdjcml0aWNhbCcsICdkZWJ1ZycsICdkaXNhYmxlJywgJ2Vycm9yJywKKyAgICAgICAgICAgJ2NhcHR1cmVXYXJuaW5ncycsICdjcml0aWNhbCcsICdkZWJ1ZycsICdkaXNhYmxlJywgJ2Vycm9yJywKICAgICAgICAgICAgJ2V4Y2VwdGlvbicsICdmYXRhbCcsICdnZXRMZXZlbE5hbWUnLCAnZ2V0TG9nZ2VyJywgJ2dldExvZ2dlckNsYXNzJywKICAgICAgICAgICAgJ2luZm8nLCAnbG9nJywgJ21ha2VMb2dSZWNvcmQnLCAnc2V0TG9nZ2VyQ2xhc3MnLCAnd2FybicsICd3YXJuaW5nJ10KIAotaW1wb3J0IHN5cywgb3MsIHR5cGVzLCB0aW1lLCBzdHJpbmcsIGNTdHJpbmdJTywgdHJhY2ViYWNrCi0KIHRyeToKICAgICBpbXBvcnQgY29kZWNzCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC00NiwxMiArNDYsMTcgQEAKIAogX19hdXRob3JfXyAgPSAiVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4iCiBfX3N0YXR1c19fICA9ICJwcm9kdWN0aW9uIgotX192ZXJzaW9uX18gPSAiMC41LjAuNSIKLV9fZGF0ZV9fICAgID0gIjE3IEZlYnJ1YXJ5IDIwMDkiCitfX3ZlcnNpb25fXyA9ICIwLjUuMS4yIgorX19kYXRlX18gICAgPSAiMDcgRmVicnVhcnkgMjAxMCIKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAgIE1pc2NlbGxhbmVvdXMgbW9kdWxlIGRhdGEKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RyeToKKyAgICB1bmljb2RlCisgICAgX3VuaWNvZGUgPSBUcnVlCitleGNlcHQgTmFtZUVycm9yOgorICAgIF91bmljb2RlID0gRmFsc2UKIAogIwogIyBfc3JjZmlsZSBpcyB1c2VkIHdoZW4gd2Fsa2luZyB0aGUgc3RhY2sgdG8gY2hlY2sgd2hlbiB3ZSd2ZSBnb3QgdGhlIGZpcnN0CkBAIC01OSw3ICs2NCw3IEBACiAjCiBpZiBoYXNhdHRyKHN5cywgJ2Zyb3plbicpOiAjc3VwcG9ydCBmb3IgcHkyZXhlCiAgICAgX3NyY2ZpbGUgPSAibG9nZ2luZyVzX19pbml0X18lcyIgJSAob3Muc2VwLCBfX2ZpbGVfX1stNDpdKQotZWxpZiBzdHJpbmcubG93ZXIoX19maWxlX19bLTQ6XSkgaW4gWycucHljJywgJy5weW8nXToKK2VsaWYgX19maWxlX19bLTQ6XS5sb3dlcigpIGluIFsnLnB5YycsICcucHlvJ106CiAgICAgX3NyY2ZpbGUgPSBfX2ZpbGVfX1s6LTRdICsgJy5weScKIGVsc2U6CiAgICAgX3NyY2ZpbGUgPSBfX2ZpbGVfXwpAQCAtNzEsNyArNzYsNyBAQAogICAgIHRyeToKICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCiAgICAgZXhjZXB0OgotICAgICAgICByZXR1cm4gc3lzLmV4Y190cmFjZWJhY2sudGJfZnJhbWUuZl9iYWNrCisgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKIAogaWYgaGFzYXR0cihzeXMsICdfZ2V0ZnJhbWUnKTogY3VycmVudGZyYW1lID0gbGFtYmRhOiBzeXMuX2dldGZyYW1lKDMpCiAjIGRvbmUgZmlsY2hpbmcKQEAgLTE3NCwxNSArMTc5LDI2IEBACiAgICAgZmluYWxseToKICAgICAgICAgX3JlbGVhc2VMb2NrKCkKIAorZGVmIF9jaGVja0xldmVsKGxldmVsKToKKyAgICBpZiBpc2luc3RhbmNlKGxldmVsLCBpbnQpOgorICAgICAgICBydiA9IGxldmVsCisgICAgZWxpZiBzdHIobGV2ZWwpID09IGxldmVsOgorICAgICAgICBpZiBsZXZlbCBub3QgaW4gX2xldmVsTmFtZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGxldmVsOiAlciIgJSBsZXZlbCkKKyAgICAgICAgcnYgPSBfbGV2ZWxOYW1lc1tsZXZlbF0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkxldmVsIG5vdCBhbiBpbnRlZ2VyIG9yIGEgdmFsaWQgc3RyaW5nOiAlciIgJSBsZXZlbCkKKyAgICByZXR1cm4gcnYKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAgIFRocmVhZC1yZWxhdGVkIHN0dWZmCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMKICNfbG9jayBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcyBpbiB0aGlzIG1vZHVsZS4KLSNUaGlzIG5lZWRzIHRvIGJlIGFuIFJMb2NrIGJlY2F1c2UgZmlsZUNvbmZpZygpIGNyZWF0ZXMgSGFuZGxlcnMgYW5kIHNvCi0jbWlnaHQgYXJiaXRyYXJ5IHVzZXIgdGhyZWFkcy4gU2luY2UgSGFuZGxlci5fX2luaXRfXygpIHVwZGF0ZXMgdGhlIHNoYXJlZAotI2RpY3Rpb25hcnkgX2hhbmRsZXJzLCBpdCBuZWVkcyB0byBhY3F1aXJlIHRoZSBsb2NrLiBCdXQgaWYgY29uZmlndXJpbmcsCisjVGhpcyBuZWVkcyB0byBiZSBhbiBSTG9jayBiZWNhdXNlIGZpbGVDb25maWcoKSBjcmVhdGVzIGFuZCBjb25maWd1cmVzCisjSGFuZGxlcnMsIGFuZCBzbyBtaWdodCBhcmJpdHJhcnkgdXNlciB0aHJlYWRzLiBTaW5jZSBIYW5kbGVyIGNvZGUgdXBkYXRlcyB0aGUKKyNzaGFyZWQgZGljdGlvbmFyeSBfaGFuZGxlcnMsIGl0IG5lZWRzIHRvIGFjcXVpcmUgdGhlIGxvY2suIEJ1dCBpZiBjb25maWd1cmluZywKICN0aGUgbG9jayB3b3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBhY3F1aXJlZCAtIHNvIHdlIG5lZWQgYW4gUkxvY2suCiAjVGhlIHNhbWUgYXJndW1lbnQgYXBwbGllcyB0byBMb2dnZXJzIGFuZCBNYW5hZ2VyLmxvZ2dlckRpY3QuCiAjCkBAIC0yMTEsNyArMjI3LDcgQEAKICMgICBUaGUgbG9nZ2luZyByZWNvcmQKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgTG9nUmVjb3JkOgorY2xhc3MgTG9nUmVjb3JkKG9iamVjdCk6CiAgICAgIiIiCiAgICAgQSBMb2dSZWNvcmQgaW5zdGFuY2UgcmVwcmVzZW50cyBhbiBldmVudCBiZWluZyBsb2dnZWQuCiAKQEAgLTI0NCw5ICsyNjAsNyBAQAogICAgICAgICAjICdWYWx1ZSBpcyAlZCcgaW5zdGVhZCBvZiAnVmFsdWUgaXMgMCcuCiAgICAgICAgICMgRm9yIHRoZSB1c2UgY2FzZSBvZiBwYXNzaW5nIGEgZGljdGlvbmFyeSwgdGhpcyBzaG91bGQgbm90IGJlIGEKICAgICAgICAgIyBwcm9ibGVtLgotICAgICAgICBpZiBhcmdzIGFuZCBsZW4oYXJncykgPT0gMSBhbmQgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoYXJnc1swXSkgPT0gdHlwZXMuRGljdFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYW5kIGFyZ3NbMF06CisgICAgICAgIGlmIGFyZ3MgYW5kIGxlbihhcmdzKSA9PSAxIGFuZCBpc2luc3RhbmNlKGFyZ3NbMF0sIGRpY3QpIGFuZCBhcmdzWzBdOgogICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF0KICAgICAgICAgc2VsZi5hcmdzID0gYXJncwogICAgICAgICBzZWxmLmxldmVsbmFtZSA9IGdldExldmVsTmFtZShsZXZlbCkKQEAgLTI3MywxMCArMjg3LDE4IEBACiAgICAgICAgICAgICBzZWxmLnRocmVhZE5hbWUgPSBOb25lCiAgICAgICAgIGlmIG5vdCBsb2dNdWx0aXByb2Nlc3Npbmc6CiAgICAgICAgICAgICBzZWxmLnByb2Nlc3NOYW1lID0gTm9uZQotICAgICAgICBlbGlmICdtdWx0aXByb2Nlc3NpbmcnIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgIHNlbGYucHJvY2Vzc05hbWUgPSAnTWFpblByb2Nlc3MnCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnByb2Nlc3NOYW1lID0gc3lzLm1vZHVsZXNbJ211bHRpcHJvY2Vzc2luZyddLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzc05hbWUgPSAnTWFpblByb2Nlc3MnCisgICAgICAgICAgICBtcCA9IHN5cy5tb2R1bGVzLmdldCgnbXVsdGlwcm9jZXNzaW5nJykKKyAgICAgICAgICAgIGlmIG1wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgRXJyb3JzIG1heSBvY2N1ciBpZiBtdWx0aXByb2Nlc3NpbmcgaGFzIG5vdCBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgICAgICAgICAgIyB5ZXQgLSBlLmcuIGlmIGEgY3VzdG9tIGltcG9ydCBob29rIGNhdXNlcyB0aGlyZC1wYXJ0eSBjb2RlCisgICAgICAgICAgICAgICAgIyB0byBydW4gd2hlbiBtdWx0aXByb2Nlc3NpbmcgY2FsbHMgaW1wb3J0LiBTZWUgaXNzdWUgODIwMAorICAgICAgICAgICAgICAgICMgZm9yIGFuIGV4YW1wbGUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc05hbWUgPSBtcC5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgbG9nUHJvY2Vzc2VzIGFuZCBoYXNhdHRyKG9zLCAnZ2V0cGlkJyk6CiAgICAgICAgICAgICBzZWxmLnByb2Nlc3MgPSBvcy5nZXRwaWQoKQogICAgICAgICBlbHNlOgpAQCAtMjkzLDExICszMTUsMTEgQEAKICAgICAgICAgUmV0dXJuIHRoZSBtZXNzYWdlIGZvciB0aGlzIExvZ1JlY29yZCBhZnRlciBtZXJnaW5nIGFueSB1c2VyLXN1cHBsaWVkCiAgICAgICAgIGFyZ3VtZW50cyB3aXRoIHRoZSBtZXNzYWdlLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IGhhc2F0dHIodHlwZXMsICJVbmljb2RlVHlwZSIpOiAjaWYgbm8gdW5pY29kZSBzdXBwb3J0Li4uCisgICAgICAgIGlmIG5vdCBfdW5pY29kZTogI2lmIG5vIHVuaWNvZGUgc3VwcG9ydC4uLgogICAgICAgICAgICAgbXNnID0gc3RyKHNlbGYubXNnKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbXNnID0gc2VsZi5tc2cKLSAgICAgICAgICAgIGlmIHR5cGUobXNnKSBub3QgaW4gKHR5cGVzLlVuaWNvZGVUeXBlLCB0eXBlcy5TdHJpbmdUeXBlKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG1zZywgYmFzZXN0cmluZyk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBtc2cgPSBzdHIoc2VsZi5tc2cpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKQEAgLTMyMSw3ICszNDMsNyBAQAogIyAgIEZvcm1hdHRlciBjbGFzc2VzIGFuZCBmdW5jdGlvbnMKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgRm9ybWF0dGVyOgorY2xhc3MgRm9ybWF0dGVyKG9iamVjdCk6CiAgICAgIiIiCiAgICAgRm9ybWF0dGVyIGluc3RhbmNlcyBhcmUgdXNlZCB0byBjb252ZXJ0IGEgTG9nUmVjb3JkIHRvIHRleHQuCiAKQEAgLTQyMCw2ICs0NDIsMTIgQEAKICAgICAgICAgICAgIHMgPSBzWzotMV0KICAgICAgICAgcmV0dXJuIHMKIAorICAgIGRlZiB1c2VzVGltZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIGlmIHRoZSBmb3JtYXQgdXNlcyB0aGUgY3JlYXRpb24gdGltZSBvZiB0aGUgcmVjb3JkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZtdC5maW5kKCIlKGFzY3RpbWUpIikgPj0gMAorCiAgICAgZGVmIGZvcm1hdChzZWxmLCByZWNvcmQpOgogICAgICAgICAiIiIKICAgICAgICAgRm9ybWF0IHRoZSBzcGVjaWZpZWQgcmVjb3JkIGFzIHRleHQuCkBAIC00MjgsMTMgKzQ1NiwxMyBAQAogICAgICAgICBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24gd2hpY2ggeWllbGRzIHRoZSByZXR1cm5lZCBzdHJpbmcuCiAgICAgICAgIEJlZm9yZSBmb3JtYXR0aW5nIHRoZSBkaWN0aW9uYXJ5LCBhIGNvdXBsZSBvZiBwcmVwYXJhdG9yeSBzdGVwcwogICAgICAgICBhcmUgY2FycmllZCBvdXQuIFRoZSBtZXNzYWdlIGF0dHJpYnV0ZSBvZiB0aGUgcmVjb3JkIGlzIGNvbXB1dGVkCi0gICAgICAgIHVzaW5nIExvZ1JlY29yZC5nZXRNZXNzYWdlKCkuIElmIHRoZSBmb3JtYXR0aW5nIHN0cmluZyBjb250YWlucwotICAgICAgICAiJShhc2N0aW1lKSIsIGZvcm1hdFRpbWUoKSBpcyBjYWxsZWQgdG8gZm9ybWF0IHRoZSBldmVudCB0aW1lLgotICAgICAgICBJZiB0aGVyZSBpcyBleGNlcHRpb24gaW5mb3JtYXRpb24sIGl0IGlzIGZvcm1hdHRlZCB1c2luZwotICAgICAgICBmb3JtYXRFeGNlcHRpb24oKSBhbmQgYXBwZW5kZWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICAgIHVzaW5nIExvZ1JlY29yZC5nZXRNZXNzYWdlKCkuIElmIHRoZSBmb3JtYXR0aW5nIHN0cmluZyB1c2VzIHRoZQorICAgICAgICB0aW1lIChhcyBkZXRlcm1pbmVkIGJ5IGEgY2FsbCB0byB1c2VzVGltZSgpLCBmb3JtYXRUaW1lKCkgaXMKKyAgICAgICAgY2FsbGVkIHRvIGZvcm1hdCB0aGUgZXZlbnQgdGltZS4gSWYgdGhlcmUgaXMgZXhjZXB0aW9uIGluZm9ybWF0aW9uLAorICAgICAgICBpdCBpcyBmb3JtYXR0ZWQgdXNpbmcgZm9ybWF0RXhjZXB0aW9uKCkgYW5kIGFwcGVuZGVkIHRvIHRoZSBtZXNzYWdlLgogICAgICAgICAiIiIKICAgICAgICAgcmVjb3JkLm1lc3NhZ2UgPSByZWNvcmQuZ2V0TWVzc2FnZSgpCi0gICAgICAgIGlmIHN0cmluZy5maW5kKHNlbGYuX2ZtdCwiJShhc2N0aW1lKSIpID49IDA6CisgICAgICAgIGlmIHNlbGYudXNlc1RpbWUoKToKICAgICAgICAgICAgIHJlY29yZC5hc2N0aW1lID0gc2VsZi5mb3JtYXRUaW1lKHJlY29yZCwgc2VsZi5kYXRlZm10KQogICAgICAgICBzID0gc2VsZi5fZm10ICUgcmVjb3JkLl9fZGljdF9fCiAgICAgICAgIGlmIHJlY29yZC5leGNfaW5mbzoKQEAgLTQ1OSw3ICs0ODcsNyBAQAogIwogX2RlZmF1bHRGb3JtYXR0ZXIgPSBGb3JtYXR0ZXIoKQogCi1jbGFzcyBCdWZmZXJpbmdGb3JtYXR0ZXI6CitjbGFzcyBCdWZmZXJpbmdGb3JtYXR0ZXIob2JqZWN0KToKICAgICAiIiIKICAgICBBIGZvcm1hdHRlciBzdWl0YWJsZSBmb3IgZm9ybWF0dGluZyBhIG51bWJlciBvZiByZWNvcmRzLgogICAgICIiIgpAQCAtNTAxLDcgKzUyOSw3IEBACiAjICAgRmlsdGVyIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBGaWx0ZXI6CitjbGFzcyBGaWx0ZXIob2JqZWN0KToKICAgICAiIiIKICAgICBGaWx0ZXIgaW5zdGFuY2VzIGFyZSB1c2VkIHRvIHBlcmZvcm0gYXJiaXRyYXJ5IGZpbHRlcmluZyBvZiBMb2dSZWNvcmRzLgogCkBAIC01MzQsMTEgKzU2MiwxMSBAQAogICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgZWxpZiBzZWxmLm5hbWUgPT0gcmVjb3JkLm5hbWU6CiAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBlbGlmIHN0cmluZy5maW5kKHJlY29yZC5uYW1lLCBzZWxmLm5hbWUsIDAsIHNlbGYubmxlbikgIT0gMDoKKyAgICAgICAgZWxpZiByZWNvcmQubmFtZS5maW5kKHNlbGYubmFtZSwgMCwgc2VsZi5ubGVuKSAhPSAwOgogICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgcmV0dXJuIChyZWNvcmQubmFtZVtzZWxmLm5sZW5dID09ICIuIikKIAotY2xhc3MgRmlsdGVyZXI6CitjbGFzcyBGaWx0ZXJlcihvYmplY3QpOgogICAgICIiIgogICAgIEEgYmFzZSBjbGFzcyBmb3IgbG9nZ2VycyBhbmQgaGFuZGxlcnMgd2hpY2ggYWxsb3dzIHRoZW0gdG8gc2hhcmUKICAgICBjb21tb24gY29kZS4KQEAgLTU4Miw5ICs2MTAsMzQgQEAKICMgICBIYW5kbGVyIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1faGFuZGxlcnMgPSB7fSAgI3JlcG9zaXRvcnkgb2YgaGFuZGxlcnMgKGZvciBmbHVzaGluZyB3aGVuIHNodXRkb3duIGNhbGxlZCkKK19oYW5kbGVycyA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSgpICAjbWFwIG9mIGhhbmRsZXIgbmFtZXMgdG8gaGFuZGxlcnMKIF9oYW5kbGVyTGlzdCA9IFtdICMgYWRkZWQgdG8gYWxsb3cgaGFuZGxlcnMgdG8gYmUgcmVtb3ZlZCBpbiByZXZlcnNlIG9mIG9yZGVyIGluaXRpYWxpemVkCiAKK2RlZiBfcmVtb3ZlSGFuZGxlclJlZih3cik6CisgICAgIiIiCisgICAgUmVtb3ZlIGEgaGFuZGxlciByZWZlcmVuY2UgZnJvbSB0aGUgaW50ZXJuYWwgY2xlYW51cCBsaXN0LgorICAgICIiIgorICAgICMgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGR1cmluZyBtb2R1bGUgdGVhcmRvd24sIHdoZW4gZ2xvYmFscyBhcmUKKyAgICAjIHNldCB0byBOb25lLiBJZiBfYWNxdWlyZUxvY2sgaXMgTm9uZSwgYXNzdW1lIHRoaXMgaXMgdGhlIGNhc2UgYW5kIGRvCisgICAgIyBub3RoaW5nLgorICAgIGlmIF9hY3F1aXJlTG9jayBpcyBub3QgTm9uZToKKyAgICAgICAgX2FjcXVpcmVMb2NrKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgd3IgaW4gX2hhbmRsZXJMaXN0OgorICAgICAgICAgICAgICAgIF9oYW5kbGVyTGlzdC5yZW1vdmUod3IpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfcmVsZWFzZUxvY2soKQorCitkZWYgX2FkZEhhbmRsZXJSZWYoaGFuZGxlcik6CisgICAgIiIiCisgICAgQWRkIGEgaGFuZGxlciB0byB0aGUgaW50ZXJuYWwgY2xlYW51cCBsaXN0IHVzaW5nIGEgd2VhayByZWZlcmVuY2UuCisgICAgIiIiCisgICAgX2FjcXVpcmVMb2NrKCkKKyAgICB0cnk6CisgICAgICAgIF9oYW5kbGVyTGlzdC5hcHBlbmQod2Vha3JlZi5yZWYoaGFuZGxlciwgX3JlbW92ZUhhbmRsZXJSZWYpKQorICAgIGZpbmFsbHk6CisgICAgICAgIF9yZWxlYXNlTG9jaygpCisKIGNsYXNzIEhhbmRsZXIoRmlsdGVyZXIpOgogICAgICIiIgogICAgIEhhbmRsZXIgaW5zdGFuY2VzIGRpc3BhdGNoIGxvZ2dpbmcgZXZlbnRzIHRvIHNwZWNpZmljIGRlc3RpbmF0aW9ucy4KQEAgLTYwMCwxNiArNjUzLDI4IEBACiAgICAgICAgIGFuZCB0aGUgZmlsdGVyIGxpc3QgdG8gZW1wdHkuCiAgICAgICAgICIiIgogICAgICAgICBGaWx0ZXJlci5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLmxldmVsID0gbGV2ZWwKKyAgICAgICAgc2VsZi5fbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sZXZlbCA9IF9jaGVja0xldmVsKGxldmVsKQogICAgICAgICBzZWxmLmZvcm1hdHRlciA9IE5vbmUKLSAgICAgICAgI2dldCB0aGUgbW9kdWxlIGRhdGEgbG9jaywgYXMgd2UncmUgdXBkYXRpbmcgYSBzaGFyZWQgc3RydWN0dXJlLgorICAgICAgICAjIEFkZCB0aGUgaGFuZGxlciB0byB0aGUgZ2xvYmFsIF9oYW5kbGVyTGlzdCAoZm9yIGNsZWFudXAgb24gc2h1dGRvd24pCisgICAgICAgIF9hZGRIYW5kbGVyUmVmKHNlbGYpCisgICAgICAgIHNlbGYuY3JlYXRlTG9jaygpCisKKyAgICBkZWYgZ2V0X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgc2V0X25hbWUoc2VsZiwgbmFtZSk6CiAgICAgICAgIF9hY3F1aXJlTG9jaygpCi0gICAgICAgIHRyeTogICAgI3VubGlrZWx5IHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiwgYnV0IHlvdSBuZXZlciBrbm93Li4uCi0gICAgICAgICAgICBfaGFuZGxlcnNbc2VsZl0gPSAxCi0gICAgICAgICAgICBfaGFuZGxlckxpc3QuaW5zZXJ0KDAsIHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX25hbWUgaW4gX2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIGRlbCBfaGFuZGxlcnNbc2VsZi5fbmFtZV0KKyAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgICAgICBpZiBuYW1lOgorICAgICAgICAgICAgICAgIF9oYW5kbGVyc1tuYW1lXSA9IHNlbGYKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIF9yZWxlYXNlTG9jaygpCi0gICAgICAgIHNlbGYuY3JlYXRlTG9jaygpCisKKyAgICBuYW1lID0gcHJvcGVydHkoZ2V0X25hbWUsIHNldF9uYW1lKQogCiAgICAgZGVmIGNyZWF0ZUxvY2soc2VsZik6CiAgICAgICAgICIiIgpAQCAtNjM4LDcgKzcwMyw3IEBACiAgICAgICAgICIiIgogICAgICAgICBTZXQgdGhlIGxvZ2dpbmcgbGV2ZWwgb2YgdGhpcyBoYW5kbGVyLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5sZXZlbCA9IGxldmVsCisgICAgICAgIHNlbGYubGV2ZWwgPSBfY2hlY2tMZXZlbChsZXZlbCkKIAogICAgIGRlZiBmb3JtYXQoc2VsZiwgcmVjb3JkKToKICAgICAgICAgIiIiCkBAIC02NjAsOCArNzI1LDggQEAKICAgICAgICAgVGhpcyB2ZXJzaW9uIGlzIGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgYW5kIHNvCiAgICAgICAgIHJhaXNlcyBhIE5vdEltcGxlbWVudGVkRXJyb3IuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAnZW1pdCBtdXN0IGJlIGltcGxlbWVudGVkICdcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnkgSGFuZGxlciBzdWJjbGFzc2VzJworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdlbWl0IG11c3QgYmUgaW1wbGVtZW50ZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdieSBIYW5kbGVyIHN1YmNsYXNzZXMnKQogCiAgICAgZGVmIGhhbmRsZShzZWxmLCByZWNvcmQpOgogICAgICAgICAiIiIKQEAgLTcwMCwxOCArNzY1LDE2IEBACiAgICAgICAgICIiIgogICAgICAgICBUaWR5IHVwIGFueSByZXNvdXJjZXMgdXNlZCBieSB0aGUgaGFuZGxlci4KIAotICAgICAgICBUaGlzIHZlcnNpb24gZG9lcyByZW1vdmVzIHRoZSBoYW5kbGVyIGZyb20gYW4gaW50ZXJuYWwgbGlzdAotICAgICAgICBvZiBoYW5kbGVycyB3aGljaCBpcyBjbG9zZWQgd2hlbiBzaHV0ZG93bigpIGlzIGNhbGxlZC4gU3ViY2xhc3NlcworICAgICAgICBUaGlzIHZlcnNpb24gcmVtb3ZlcyB0aGUgaGFuZGxlciBmcm9tIGFuIGludGVybmFsIG1hcCBvZiBoYW5kbGVycywKKyAgICAgICAgX2hhbmRsZXJzLCB3aGljaCBpcyB1c2VkIGZvciBoYW5kbGVyIGxvb2t1cCBieSBuYW1lLiBTdWJjbGFzc2VzCiAgICAgICAgIHNob3VsZCBlbnN1cmUgdGhhdCB0aGlzIGdldHMgY2FsbGVkIGZyb20gb3ZlcnJpZGRlbiBjbG9zZSgpCiAgICAgICAgIG1ldGhvZHMuCiAgICAgICAgICIiIgogICAgICAgICAjZ2V0IHRoZSBtb2R1bGUgZGF0YSBsb2NrLCBhcyB3ZSdyZSB1cGRhdGluZyBhIHNoYXJlZCBzdHJ1Y3R1cmUuCiAgICAgICAgIF9hY3F1aXJlTG9jaygpCiAgICAgICAgIHRyeTogICAgI3VubGlrZWx5IHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiwgYnV0IHlvdSBuZXZlciBrbm93Li4uCi0gICAgICAgICAgICBpZiBzZWxmIGluIF9oYW5kbGVyczoKLSAgICAgICAgICAgICAgICBkZWwgX2hhbmRsZXJzW3NlbGZdCi0gICAgICAgICAgICBpZiBzZWxmIGluIF9oYW5kbGVyTGlzdDoKLSAgICAgICAgICAgICAgICBfaGFuZGxlckxpc3QucmVtb3ZlKHNlbGYpCisgICAgICAgICAgICBpZiBzZWxmLl9uYW1lIGFuZCBzZWxmLl9uYW1lIGluIF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICBkZWwgX2hhbmRsZXJzW3NlbGYuX25hbWVdCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBfcmVsZWFzZUxvY2soKQogCkBAIC03MzAsNyArNzkzLDEwIEBACiAgICAgICAgIGlmIHJhaXNlRXhjZXB0aW9uczoKICAgICAgICAgICAgIGVpID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKGVpWzBdLCBlaVsxXSwgZWlbMl0sIE5vbmUsIHN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbihlaVswXSwgZWlbMV0sIGVpWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgc3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdMb2dnZWQgZnJvbSBmaWxlICVzLCBsaW5lICVzXG4nICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmZpbGVuYW1lLCByZWNvcmQubGluZW5vKSkKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MgICAgIyBzZWUgaXNzdWUgNTk3MQogICAgICAgICAgICAgZmluYWxseToKQEAgLTc0MywxNiArODA5LDE2IEBACiAgICAgc3lzLnN0ZG91dCBvciBzeXMuc3RkZXJyIG1heSBiZSB1c2VkLgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cm09Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbT1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIEluaXRpYWxpemUgdGhlIGhhbmRsZXIuCiAKLSAgICAgICAgSWYgc3RybSBpcyBub3Qgc3BlY2lmaWVkLCBzeXMuc3RkZXJyIGlzIHVzZWQuCisgICAgICAgIElmIHN0cmVhbSBpcyBub3Qgc3BlY2lmaWVkLCBzeXMuc3RkZXJyIGlzIHVzZWQuCiAgICAgICAgICIiIgogICAgICAgICBIYW5kbGVyLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIGlmIHN0cm0gaXMgTm9uZToKLSAgICAgICAgICAgIHN0cm0gPSBzeXMuc3RkZXJyCi0gICAgICAgIHNlbGYuc3RyZWFtID0gc3RybQorICAgICAgICBpZiBzdHJlYW0gaXMgTm9uZToKKyAgICAgICAgICAgIHN0cmVhbSA9IHN5cy5zdGRlcnIKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KIAogICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgIiIiCkBAIC03NjksMjIgKzgzNSwyMiBAQAogICAgICAgICBUaGUgcmVjb3JkIGlzIHRoZW4gd3JpdHRlbiB0byB0aGUgc3RyZWFtIHdpdGggYSB0cmFpbGluZyBuZXdsaW5lLiAgSWYKICAgICAgICAgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIHByZXNlbnQsIGl0IGlzIGZvcm1hdHRlZCB1c2luZwogICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uIGFuZCBhcHBlbmRlZCB0byB0aGUgc3RyZWFtLiAgSWYgdGhlIHN0cmVhbQotICAgICAgICBoYXMgYW4gJ2VuY29kaW5nJyBhdHRyaWJ1dGUsIGl0IGlzIHVzZWQgdG8gZW5jb2RlIHRoZSBtZXNzYWdlIGJlZm9yZQorICAgICAgICBoYXMgYW4gJ2VuY29kaW5nJyBhdHRyaWJ1dGUsIGl0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyB0byBkbyB0aGUKICAgICAgICAgb3V0cHV0IHRvIHRoZSBzdHJlYW0uCiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpCiAgICAgICAgICAgICBzdHJlYW0gPSBzZWxmLnN0cmVhbQogICAgICAgICAgICAgZnMgPSAiJXNcbiIKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHR5cGVzLCAiVW5pY29kZVR5cGUiKTogI2lmIG5vIHVuaWNvZGUgc3VwcG9ydC4uLgorICAgICAgICAgICAgaWYgbm90IF91bmljb2RlOiAjaWYgbm8gdW5pY29kZSBzdXBwb3J0Li4uCiAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlKGZzICUgbXNnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKG1zZywgdW5pY29kZSkgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHN0cmVhbSwgJ2VuY29kaW5nJywgTm9uZSkpOgotICAgICAgICAgICAgICAgICAgICAgICAgZnMgPSBmcy5kZWNvZGUoc3RyZWFtLmVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgdWZzID0gZnMuZGVjb2RlKHN0cmVhbS5lbmNvZGluZykKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoZnMgJSBtc2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlKHVmcyAlIG1zZykKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1ByaW50aW5nIHRvIHRlcm1pbmFscyBzb21ldGltZXMgZmFpbHMuIEZvciBleGFtcGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICN3aXRoIGFuIGVuY29kaW5nIG9mICdjcDEyNTEnLCB0aGUgYWJvdmUgd3JpdGUgd2lsbApAQCAtNzkyLDcgKzg1OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RoZSBjb2RlY3MgbW9kdWxlLCBidXQgZmFpbCB3aGVuIHdyaXRpbmcgdG8gYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXJtaW5hbCBldmVuIHdoZW4gdGhlIGNvZGVwYWdlIGlzIHNldCB0byBjcDEyNTEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0FuIGV4dHJhIGVuY29kaW5nIHN0ZXAgc2VlbXMgdG8gYmUgbmVlZGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZSgoZnMgJSBtc2cpLmVuY29kZShzdHJlYW0uZW5jb2RpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZSgodWZzICUgbXNnKS5lbmNvZGUoc3RyZWFtLmVuY29kaW5nKSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZShmcyAlIG1zZykKICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgpAQCAtODYzLDcgKzkyOSw3IEBACiAjICAgTWFuYWdlciBjbGFzc2VzIGFuZCBmdW5jdGlvbnMKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgUGxhY2VIb2xkZXI6CitjbGFzcyBQbGFjZUhvbGRlcihvYmplY3QpOgogICAgICIiIgogICAgIFBsYWNlSG9sZGVyIGluc3RhbmNlcyBhcmUgdXNlZCBpbiB0aGUgTWFuYWdlciBsb2dnZXIgaGllcmFyY2h5IHRvIHRha2UKICAgICB0aGUgcGxhY2Ugb2Ygbm9kZXMgZm9yIHdoaWNoIG5vIGxvZ2dlcnMgaGF2ZSBiZWVuIGRlZmluZWQuIFRoaXMgY2xhc3MgaXMKQEAgLTg5OCw4ICs5NjQsOCBAQAogICAgICIiIgogICAgIGlmIGtsYXNzICE9IExvZ2dlcjoKICAgICAgICAgaWYgbm90IGlzc3ViY2xhc3Moa2xhc3MsIExvZ2dlcik6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJsb2dnZXIgbm90IGRlcml2ZWQgZnJvbSBsb2dnaW5nLkxvZ2dlcjogIiArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbGFzcy5fX25hbWVfXworICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsb2dnZXIgbm90IGRlcml2ZWQgZnJvbSBsb2dnaW5nLkxvZ2dlcjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsga2xhc3MuX19uYW1lX18pCiAgICAgZ2xvYmFsIF9sb2dnZXJDbGFzcwogICAgIF9sb2dnZXJDbGFzcyA9IGtsYXNzCiAKQEAgLTkxMCw3ICs5NzYsNyBAQAogCiAgICAgcmV0dXJuIF9sb2dnZXJDbGFzcwogCi1jbGFzcyBNYW5hZ2VyOgorY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICIiIgogICAgIFRoZXJlIGlzIFt1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlc10ganVzdCBvbmUgTWFuYWdlciBpbnN0YW5jZSwgd2hpY2gKICAgICBob2xkcyB0aGUgaGllcmFyY2h5IG9mIGxvZ2dlcnMuCkBAIC05MjMsNiArOTg5LDcgQEAKICAgICAgICAgc2VsZi5kaXNhYmxlID0gMAogICAgICAgICBzZWxmLmVtaXR0ZWROb0hhbmRsZXJXYXJuaW5nID0gMAogICAgICAgICBzZWxmLmxvZ2dlckRpY3QgPSB7fQorICAgICAgICBzZWxmLmxvZ2dlckNsYXNzID0gTm9uZQogCiAgICAgZGVmIGdldExvZ2dlcihzZWxmLCBuYW1lKToKICAgICAgICAgIiIiCkBAIC05NDIsMTMgKzEwMDksMTMgQEAKICAgICAgICAgICAgICAgICBydiA9IHNlbGYubG9nZ2VyRGljdFtuYW1lXQogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocnYsIFBsYWNlSG9sZGVyKToKICAgICAgICAgICAgICAgICAgICAgcGggPSBydgotICAgICAgICAgICAgICAgICAgICBydiA9IF9sb2dnZXJDbGFzcyhuYW1lKQorICAgICAgICAgICAgICAgICAgICBydiA9IChzZWxmLmxvZ2dlckNsYXNzIG9yIF9sb2dnZXJDbGFzcykobmFtZSkKICAgICAgICAgICAgICAgICAgICAgcnYubWFuYWdlciA9IHNlbGYKICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXJEaWN0W25hbWVdID0gcnYKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZml4dXBDaGlsZHJlbihwaCwgcnYpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpeHVwUGFyZW50cyhydikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcnYgPSBfbG9nZ2VyQ2xhc3MobmFtZSkKKyAgICAgICAgICAgICAgICBydiA9IChzZWxmLmxvZ2dlckNsYXNzIG9yIF9sb2dnZXJDbGFzcykobmFtZSkKICAgICAgICAgICAgICAgICBydi5tYW5hZ2VyID0gc2VsZgogICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyRGljdFtuYW1lXSA9IHJ2CiAgICAgICAgICAgICAgICAgc2VsZi5fZml4dXBQYXJlbnRzKHJ2KQpAQCAtOTU2LDEzICsxMDIzLDIzIEBACiAgICAgICAgICAgICBfcmVsZWFzZUxvY2soKQogICAgICAgICByZXR1cm4gcnYKIAorICAgIGRlZiBzZXRMb2dnZXJDbGFzcyhzZWxmLCBrbGFzcyk6CisgICAgICAgICIiIgorICAgICAgICBTZXQgdGhlIGNsYXNzIHRvIGJlIHVzZWQgd2hlbiBpbnN0YW50aWF0aW5nIGEgbG9nZ2VyIHdpdGggdGhpcyBNYW5hZ2VyLgorICAgICAgICAiIiIKKyAgICAgICAgaWYga2xhc3MgIT0gTG9nZ2VyOgorICAgICAgICAgICAgaWYgbm90IGlzc3ViY2xhc3Moa2xhc3MsIExvZ2dlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsb2dnZXIgbm90IGRlcml2ZWQgZnJvbSBsb2dnaW5nLkxvZ2dlcjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGtsYXNzLl9fbmFtZV9fKQorICAgICAgICBzZWxmLmxvZ2dlckNsYXNzID0ga2xhc3MKKwogICAgIGRlZiBfZml4dXBQYXJlbnRzKHNlbGYsIGFsb2dnZXIpOgogICAgICAgICAiIiIKICAgICAgICAgRW5zdXJlIHRoYXQgdGhlcmUgYXJlIGVpdGhlciBsb2dnZXJzIG9yIHBsYWNlaG9sZGVycyBhbGwgdGhlIHdheQogICAgICAgICBmcm9tIHRoZSBzcGVjaWZpZWQgbG9nZ2VyIHRvIHRoZSByb290IG9mIHRoZSBsb2dnZXIgaGllcmFyY2h5LgogICAgICAgICAiIiIKICAgICAgICAgbmFtZSA9IGFsb2dnZXIubmFtZQotICAgICAgICBpID0gc3RyaW5nLnJmaW5kKG5hbWUsICIuIikKKyAgICAgICAgaSA9IG5hbWUucmZpbmQoIi4iKQogICAgICAgICBydiA9IE5vbmUKICAgICAgICAgd2hpbGUgKGkgPiAwKSBhbmQgbm90IHJ2OgogICAgICAgICAgICAgc3Vic3RyID0gbmFtZVs6aV0KQEAgLTk3NSw3ICsxMDUyLDcgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvYmosIFBsYWNlSG9sZGVyKQogICAgICAgICAgICAgICAgICAgICBvYmouYXBwZW5kKGFsb2dnZXIpCi0gICAgICAgICAgICBpID0gc3RyaW5nLnJmaW5kKG5hbWUsICIuIiwgMCwgaSAtIDEpCisgICAgICAgICAgICBpID0gbmFtZS5yZmluZCgiLiIsIDAsIGkgLSAxKQogICAgICAgICBpZiBub3QgcnY6CiAgICAgICAgICAgICBydiA9IHNlbGYucm9vdAogICAgICAgICBhbG9nZ2VyLnBhcmVudCA9IHJ2CkBAIC05ODksNyArMTA2Niw2IEBACiAgICAgICAgIG5hbWVsZW4gPSBsZW4obmFtZSkKICAgICAgICAgZm9yIGMgaW4gcGgubG9nZ2VyTWFwLmtleXMoKToKICAgICAgICAgICAgICNUaGUgaWYgbWVhbnMgLi4uIGlmIG5vdCBjLnBhcmVudC5uYW1lLnN0YXJ0c3dpdGgobm0pCi0gICAgICAgICAgICAjaWYgc3RyaW5nLmZpbmQoYy5wYXJlbnQubmFtZSwgbm0pIDw+IDA6CiAgICAgICAgICAgICBpZiBjLnBhcmVudC5uYW1lWzpuYW1lbGVuXSAhPSBuYW1lOgogICAgICAgICAgICAgICAgIGFsb2dnZXIucGFyZW50ID0gYy5wYXJlbnQKICAgICAgICAgICAgICAgICBjLnBhcmVudCA9IGFsb2dnZXIKQEAgLTEwMTksNyArMTA5NSw3IEBACiAgICAgICAgICIiIgogICAgICAgICBGaWx0ZXJlci5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYubGV2ZWwgPSBsZXZlbAorICAgICAgICBzZWxmLmxldmVsID0gX2NoZWNrTGV2ZWwobGV2ZWwpCiAgICAgICAgIHNlbGYucGFyZW50ID0gTm9uZQogICAgICAgICBzZWxmLnByb3BhZ2F0ZSA9IDEKICAgICAgICAgc2VsZi5oYW5kbGVycyA9IFtdCkBAIC0xMDI5LDcgKzExMDUsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgU2V0IHRoZSBsb2dnaW5nIGxldmVsIG9mIHRoaXMgbG9nZ2VyLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5sZXZlbCA9IGxldmVsCisgICAgICAgIHNlbGYubGV2ZWwgPSBfY2hlY2tMZXZlbChsZXZlbCkKIAogICAgIGRlZiBkZWJ1ZyhzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiIgpAQCAtMTA4NSw3ICsxMTYxLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgbG9nZ2luZyBhbiBFUlJPUiB3aXRoIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZXJyb3IoKigobXNnLCkgKyBhcmdzKSwgKip7J2V4Y19pbmZvJzogMX0pCisgICAgICAgIHNlbGYuZXJyb3IobXNnLCBleGNfaW5mbz0xLCAqYXJncykKIAogICAgIGRlZiBjcml0aWNhbChzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiIgpAQCAtMTExMCw5ICsxMTg2LDkgQEAKIAogICAgICAgICBsb2dnZXIubG9nKGxldmVsLCAiV2UgaGF2ZSBhICVzIiwgIm15c3RlcmlvdXMgcHJvYmxlbSIsIGV4Y19pbmZvPTEpCiAgICAgICAgICIiIgotICAgICAgICBpZiB0eXBlKGxldmVsKSAhPSB0eXBlcy5JbnRUeXBlOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShsZXZlbCwgaW50KToKICAgICAgICAgICAgIGlmIHJhaXNlRXhjZXB0aW9uczoKLSAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJsZXZlbCBtdXN0IGJlIGFuIGludGVnZXIiCisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsZXZlbCBtdXN0IGJlIGFuIGludGVnZXIiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi5pc0VuYWJsZWRGb3IobGV2ZWwpOgpAQCAtMTEzNSw3ICsxMjExLDcgQEAKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09IF9zcmNmaWxlOgogICAgICAgICAgICAgICAgIGYgPSBmLmZfYmFjawogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBydiA9IChmaWxlbmFtZSwgZi5mX2xpbmVubywgY28uY29fbmFtZSkKKyAgICAgICAgICAgIHJ2ID0gKGNvLmNvX2ZpbGVuYW1lLCBmLmZfbGluZW5vLCBjby5jb19uYW1lKQogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgcmV0dXJuIHJ2CiAKQEAgLTExNTksNyArMTIzNSw4IEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBfc3JjZmlsZToKICAgICAgICAgICAgICNJcm9uUHl0aG9uIGRvZXNuJ3QgdHJhY2sgUHl0aG9uIGZyYW1lcywgc28gZmluZENhbGxlciB0aHJvd3MgYW4KLSAgICAgICAgICAgICNleGNlcHRpb24uIFdlIHRyYXAgaXQgaGVyZSBzbyB0aGF0IElyb25QeXRob24gY2FuIHVzZSBsb2dnaW5nLgorICAgICAgICAgICAgI2V4Y2VwdGlvbiBvbiBzb21lIHZlcnNpb25zIG9mIElyb25QeXRob24uIFdlIHRyYXAgaXQgaGVyZSBzbyB0aGF0CisgICAgICAgICAgICAjSXJvblB5dGhvbiBjYW4gdXNlIGxvZ2dpbmcuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZm4sIGxubywgZnVuYyA9IHNlbGYuZmluZENhbGxlcigpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKQEAgLTExNjcsNyArMTI0NCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmbiwgbG5vLCBmdW5jID0gIih1bmtub3duIGZpbGUpIiwgMCwgIih1bmtub3duIGZ1bmN0aW9uKSIKICAgICAgICAgaWYgZXhjX2luZm86Ci0gICAgICAgICAgICBpZiB0eXBlKGV4Y19pbmZvKSAhPSB0eXBlcy5UdXBsZVR5cGU6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleGNfaW5mbywgdHVwbGUpOgogICAgICAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgcmVjb3JkID0gc2VsZi5tYWtlUmVjb3JkKHNlbGYubmFtZSwgbGV2ZWwsIGZuLCBsbm8sIG1zZywgYXJncywgZXhjX2luZm8sIGZ1bmMsIGV4dHJhKQogICAgICAgICBzZWxmLmhhbmRsZShyZWNvcmQpCkBAIC0xMTg2LDIwICsxMjYzLDIzIEBACiAgICAgICAgICIiIgogICAgICAgICBBZGQgdGhlIHNwZWNpZmllZCBoYW5kbGVyIHRvIHRoaXMgbG9nZ2VyLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IChoZGxyIGluIHNlbGYuaGFuZGxlcnMpOgotICAgICAgICAgICAgc2VsZi5oYW5kbGVycy5hcHBlbmQoaGRscikKKyAgICAgICAgX2FjcXVpcmVMb2NrKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IChoZGxyIGluIHNlbGYuaGFuZGxlcnMpOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlcnMuYXBwZW5kKGhkbHIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfcmVsZWFzZUxvY2soKQogCiAgICAgZGVmIHJlbW92ZUhhbmRsZXIoc2VsZiwgaGRscik6CiAgICAgICAgICIiIgogICAgICAgICBSZW1vdmUgdGhlIHNwZWNpZmllZCBoYW5kbGVyIGZyb20gdGhpcyBsb2dnZXIuCiAgICAgICAgICIiIgotICAgICAgICBpZiBoZGxyIGluIHNlbGYuaGFuZGxlcnM6Ci0gICAgICAgICAgICAjaGRsci5jbG9zZSgpCi0gICAgICAgICAgICBoZGxyLmFjcXVpcmUoKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICBfYWNxdWlyZUxvY2soKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBoZGxyIGluIHNlbGYuaGFuZGxlcnM6CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVycy5yZW1vdmUoaGRscikKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaGRsci5yZWxlYXNlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9yZWxlYXNlTG9jaygpCiAKICAgICBkZWYgY2FsbEhhbmRsZXJzKHNlbGYsIHJlY29yZCk6CiAgICAgICAgICIiIgpAQCAtMTI0OSw2ICsxMzI5LDI1IEBACiAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICByZXR1cm4gbGV2ZWwgPj0gc2VsZi5nZXRFZmZlY3RpdmVMZXZlbCgpCiAKKyAgICBkZWYgZ2V0Q2hpbGQoc2VsZiwgc3VmZml4KToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCBhIGxvZ2dlciB3aGljaCBpcyBhIGRlc2NlbmRhbnQgdG8gdGhpcyBvbmUuCisKKyAgICAgICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCwgc3VjaCB0aGF0CisKKyAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYycpLmdldENoaWxkKCdkZWYuZ2hpJykKKworICAgICAgICBpcyB0aGUgc2FtZSBhcworCisgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmLmdoaScpCisKKyAgICAgICAgSXQncyB1c2VmdWwsIGZvciBleGFtcGxlLCB3aGVuIHRoZSBwYXJlbnQgbG9nZ2VyIGlzIG5hbWVkIHVzaW5nCisgICAgICAgIF9fbmFtZV9fIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnJvb3QgaXMgbm90IHNlbGY6CisgICAgICAgICAgICBzdWZmaXggPSAnLicuam9pbigoc2VsZi5uYW1lLCBzdWZmaXgpKQorICAgICAgICByZXR1cm4gc2VsZi5tYW5hZ2VyLmdldExvZ2dlcihzdWZmaXgpCisKIGNsYXNzIFJvb3RMb2dnZXIoTG9nZ2VyKToKICAgICAiIiIKICAgICBBIHJvb3QgbG9nZ2VyIGlzIG5vdCB0aGF0IGRpZmZlcmVudCB0byBhbnkgb3RoZXIgbG9nZ2VyLCBleGNlcHQgdGhhdApAQCAtMTI2Myw3ICsxMzYyLDcgQEAKIAogX2xvZ2dlckNsYXNzID0gTG9nZ2VyCiAKLWNsYXNzIExvZ2dlckFkYXB0ZXI6CitjbGFzcyBMb2dnZXJBZGFwdGVyKG9iamVjdCk6CiAgICAgIiIiCiAgICAgQW4gYWRhcHRlciBmb3IgbG9nZ2VycyB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gc3BlY2lmeSBjb250ZXh0dWFsCiAgICAgaW5mb3JtYXRpb24gaW4gbG9nZ2luZyBvdXRwdXQuCkBAIC0xMzUzLDYgKzE0NTIsMTIgQEAKICAgICAgICAgbXNnLCBrd2FyZ3MgPSBzZWxmLnByb2Nlc3MobXNnLCBrd2FyZ3MpCiAgICAgICAgIHNlbGYubG9nZ2VyLmxvZyhsZXZlbCwgbXNnLCAqYXJncywgKiprd2FyZ3MpCiAKKyAgICBkZWYgaXNFbmFibGVkRm9yKHNlbGYsIGxldmVsKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlZSBpZiB0aGUgdW5kZXJseWluZyBsb2dnZXIgaXMgZW5hYmxlZCBmb3IgdGhlIHNwZWNpZmllZCBsZXZlbC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmxvZ2dlci5pc0VuYWJsZWRGb3IobGV2ZWwpCisKIHJvb3QgPSBSb290TG9nZ2VyKFdBUk5JTkcpCiBMb2dnZXIucm9vdCA9IHJvb3QKIExvZ2dlci5tYW5hZ2VyID0gTWFuYWdlcihMb2dnZXIucm9vdCkKQEAgLTEzOTUsMjIgKzE1MDAsMjggQEAKICAgICB1c2luZyBzeXMuc3Rkb3V0IG9yIHN5cy5zdGRlcnIpLCB3aGVyZWFzIEZpbGVIYW5kbGVyIGNsb3NlcyBpdHMgc3RyZWFtCiAgICAgd2hlbiB0aGUgaGFuZGxlciBpcyBjbG9zZWQuCiAgICAgIiIiCi0gICAgaWYgbGVuKHJvb3QuaGFuZGxlcnMpID09IDA6Ci0gICAgICAgIGZpbGVuYW1lID0ga3dhcmdzLmdldCgiZmlsZW5hbWUiKQotICAgICAgICBpZiBmaWxlbmFtZToKLSAgICAgICAgICAgIG1vZGUgPSBrd2FyZ3MuZ2V0KCJmaWxlbW9kZSIsICdhJykKLSAgICAgICAgICAgIGhkbHIgPSBGaWxlSGFuZGxlcihmaWxlbmFtZSwgbW9kZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHN0cmVhbSA9IGt3YXJncy5nZXQoInN0cmVhbSIpCi0gICAgICAgICAgICBoZGxyID0gU3RyZWFtSGFuZGxlcihzdHJlYW0pCi0gICAgICAgIGZzID0ga3dhcmdzLmdldCgiZm9ybWF0IiwgQkFTSUNfRk9STUFUKQotICAgICAgICBkZnMgPSBrd2FyZ3MuZ2V0KCJkYXRlZm10IiwgTm9uZSkKLSAgICAgICAgZm10ID0gRm9ybWF0dGVyKGZzLCBkZnMpCi0gICAgICAgIGhkbHIuc2V0Rm9ybWF0dGVyKGZtdCkKLSAgICAgICAgcm9vdC5hZGRIYW5kbGVyKGhkbHIpCi0gICAgICAgIGxldmVsID0ga3dhcmdzLmdldCgibGV2ZWwiKQotICAgICAgICBpZiBsZXZlbCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJvb3Quc2V0TGV2ZWwobGV2ZWwpCisgICAgIyBBZGQgdGhyZWFkIHNhZmV0eSBpbiBjYXNlIHNvbWVvbmUgbWlzdGFrZW5seSBjYWxscworICAgICMgYmFzaWNDb25maWcoKSBmcm9tIG11bHRpcGxlIHRocmVhZHMKKyAgICBfYWNxdWlyZUxvY2soKQorICAgIHRyeToKKyAgICAgICAgaWYgbGVuKHJvb3QuaGFuZGxlcnMpID09IDA6CisgICAgICAgICAgICBmaWxlbmFtZSA9IGt3YXJncy5nZXQoImZpbGVuYW1lIikKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lOgorICAgICAgICAgICAgICAgIG1vZGUgPSBrd2FyZ3MuZ2V0KCJmaWxlbW9kZSIsICdhJykKKyAgICAgICAgICAgICAgICBoZGxyID0gRmlsZUhhbmRsZXIoZmlsZW5hbWUsIG1vZGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0cmVhbSA9IGt3YXJncy5nZXQoInN0cmVhbSIpCisgICAgICAgICAgICAgICAgaGRsciA9IFN0cmVhbUhhbmRsZXIoc3RyZWFtKQorICAgICAgICAgICAgZnMgPSBrd2FyZ3MuZ2V0KCJmb3JtYXQiLCBCQVNJQ19GT1JNQVQpCisgICAgICAgICAgICBkZnMgPSBrd2FyZ3MuZ2V0KCJkYXRlZm10IiwgTm9uZSkKKyAgICAgICAgICAgIGZtdCA9IEZvcm1hdHRlcihmcywgZGZzKQorICAgICAgICAgICAgaGRsci5zZXRGb3JtYXR0ZXIoZm10KQorICAgICAgICAgICAgcm9vdC5hZGRIYW5kbGVyKGhkbHIpCisgICAgICAgICAgICBsZXZlbCA9IGt3YXJncy5nZXQoImxldmVsIikKKyAgICAgICAgICAgIGlmIGxldmVsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJvb3Quc2V0TGV2ZWwobGV2ZWwpCisgICAgZmluYWxseToKKyAgICAgICAgX3JlbGVhc2VMb2NrKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBVdGlsaXR5IGZ1bmN0aW9ucyBhdCBtb2R1bGUgbGV2ZWwuCkBAIC0xNDQzLDcgKzE1NTQsNyBAQAogICAgICIiIgogICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgogICAgICAgICBiYXNpY0NvbmZpZygpCi0gICAgcm9vdC5jcml0aWNhbCgqKChtc2csKSthcmdzKSwgKiprd2FyZ3MpCisgICAgcm9vdC5jcml0aWNhbChtc2csICphcmdzLCAqKmt3YXJncykKIAogZmF0YWwgPSBjcml0aWNhbAogCkBAIC0xNDUzLDE0ICsxNTY0LDE0IEBACiAgICAgIiIiCiAgICAgaWYgbGVuKHJvb3QuaGFuZGxlcnMpID09IDA6CiAgICAgICAgIGJhc2ljQ29uZmlnKCkKLSAgICByb290LmVycm9yKCooKG1zZywpK2FyZ3MpLCAqKmt3YXJncykKKyAgICByb290LmVycm9yKG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCiBkZWYgZXhjZXB0aW9uKG1zZywgKmFyZ3MpOgogICAgICIiIgogICAgIExvZyBhIG1lc3NhZ2Ugd2l0aCBzZXZlcml0eSAnRVJST1InIG9uIHRoZSByb290IGxvZ2dlciwKICAgICB3aXRoIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KICAgICAiIiIKLSAgICBlcnJvcigqKChtc2csKSthcmdzKSwgKip7J2V4Y19pbmZvJzogMX0pCisgICAgZXJyb3IobXNnLCBleGNfaW5mbz0xLCAqYXJncykKIAogZGVmIHdhcm5pbmcobXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICIiIgpAQCAtMTQ2OCw3ICsxNTc5LDcgQEAKICAgICAiIiIKICAgICBpZiBsZW4ocm9vdC5oYW5kbGVycykgPT0gMDoKICAgICAgICAgYmFzaWNDb25maWcoKQotICAgIHJvb3Qud2FybmluZygqKChtc2csKSthcmdzKSwgKiprd2FyZ3MpCisgICAgcm9vdC53YXJuaW5nKG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCiB3YXJuID0gd2FybmluZwogCkBAIC0xNDc4LDcgKzE1ODksNyBAQAogICAgICIiIgogICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgogICAgICAgICBiYXNpY0NvbmZpZygpCi0gICAgcm9vdC5pbmZvKCooKG1zZywpK2FyZ3MpLCAqKmt3YXJncykKKyAgICByb290LmluZm8obXNnLCAqYXJncywgKiprd2FyZ3MpCiAKIGRlZiBkZWJ1Zyhtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgIiIiCkBAIC0xNDg2LDcgKzE1OTcsNyBAQAogICAgICIiIgogICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgogICAgICAgICBiYXNpY0NvbmZpZygpCi0gICAgcm9vdC5kZWJ1ZygqKChtc2csKSthcmdzKSwgKiprd2FyZ3MpCisgICAgcm9vdC5kZWJ1Zyhtc2csICphcmdzLCAqKmt3YXJncykKIAogZGVmIGxvZyhsZXZlbCwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICIiIgpAQCAtMTQ5NCwxMSArMTYwNSwxMSBAQAogICAgICIiIgogICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgogICAgICAgICBiYXNpY0NvbmZpZygpCi0gICAgcm9vdC5sb2coKigobGV2ZWwsIG1zZykrYXJncyksICoqa3dhcmdzKQorICAgIHJvb3QubG9nKGxldmVsLCBtc2csICphcmdzLCAqKmt3YXJncykKIAogZGVmIGRpc2FibGUobGV2ZWwpOgogICAgICIiIgotICAgIERpc2FibGUgYWxsIGxvZ2dpbmcgY2FsbHMgbGVzcyBzZXZlcmUgdGhhbiAnbGV2ZWwnLgorICAgIERpc2FibGUgYWxsIGxvZ2dpbmcgY2FsbHMgb2Ygc2V2ZXJpdHkgJ2xldmVsJyBhbmQgYmVsb3cuCiAgICAgIiIiCiAgICAgcm9vdC5tYW5hZ2VyLmRpc2FibGUgPSBsZXZlbAogCkBAIC0xNTA5LDI2ICsxNjIwLDg1IEBACiAKICAgICBTaG91bGQgYmUgY2FsbGVkIGF0IGFwcGxpY2F0aW9uIGV4aXQuCiAgICAgIiIiCi0gICAgZm9yIGggaW4gaGFuZGxlckxpc3RbOl06CisgICAgZm9yIHdyIGluIHJldmVyc2VkKGhhbmRsZXJMaXN0WzpdKToKICAgICAgICAgI2Vycm9ycyBtaWdodCBvY2N1ciwgZm9yIGV4YW1wbGUsIGlmIGZpbGVzIGFyZSBsb2NrZWQKICAgICAgICAgI3dlIGp1c3QgaWdub3JlIHRoZW0gaWYgcmFpc2VFeGNlcHRpb25zIGlzIG5vdCBzZXQKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaC5mbHVzaCgpCi0gICAgICAgICAgICBoLmNsb3NlKCkKKyAgICAgICAgICAgIGggPSB3cigpCisgICAgICAgICAgICBpZiBoOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaC5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIGVycm9ycyB3aGljaCBtaWdodCBiZSBjYXVzZWQKKyAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGhhbmRsZXJzIGhhdmUgYmVlbiBjbG9zZWQgYnV0CisgICAgICAgICAgICAgICAgICAgICMgcmVmZXJlbmNlcyB0byB0aGVtIGFyZSBzdGlsbCBhcm91bmQgYXQKKyAgICAgICAgICAgICAgICAgICAgIyBhcHBsaWNhdGlvbiBleGl0LgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIGlmIHJhaXNlRXhjZXB0aW9uczoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgI2Vsc2UsIHN3YWxsb3cKIAogI0xldCdzIHRyeSBhbmQgc2h1dGRvd24gYXV0b21hdGljYWxseSBvbiBhcHBsaWNhdGlvbiBleGl0Li4uCi10cnk6Ci0gICAgaW1wb3J0IGF0ZXhpdAotICAgIGF0ZXhpdC5yZWdpc3RlcihzaHV0ZG93bikKLWV4Y2VwdCBJbXBvcnRFcnJvcjogIyBmb3IgUHl0aG9uIHZlcnNpb25zIDwgMi4wCi0gICAgZGVmIGV4aXRob29rKHN0YXR1cywgb2xkX2V4aXQ9c3lzLmV4aXQpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzaHV0ZG93bigpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvbGRfZXhpdChzdGF0dXMpCitpbXBvcnQgYXRleGl0CithdGV4aXQucmVnaXN0ZXIoc2h1dGRvd24pCiAKLSAgICBzeXMuZXhpdCA9IGV4aXRob29rCisjIE51bGwgaGFuZGxlcgorCitjbGFzcyBOdWxsSGFuZGxlcihIYW5kbGVyKToKKyAgICAiIiIKKyAgICBUaGlzIGhhbmRsZXIgZG9lcyBub3RoaW5nLiBJdCdzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gYXZvaWQgdGhlCisgICAgIk5vIGhhbmRsZXJzIGNvdWxkIGJlIGZvdW5kIGZvciBsb2dnZXIgWFhYIiBvbmUtb2ZmIHdhcm5pbmcuIFRoaXMgaXMKKyAgICBpbXBvcnRhbnQgZm9yIGxpYnJhcnkgY29kZSwgd2hpY2ggbWF5IGNvbnRhaW4gY29kZSB0byBsb2cgZXZlbnRzLiBJZiBhIHVzZXIKKyAgICBvZiB0aGUgbGlicmFyeSBkb2VzIG5vdCBjb25maWd1cmUgbG9nZ2luZywgdGhlIG9uZS1vZmYgd2FybmluZyBtaWdodCBiZQorICAgIHByb2R1Y2VkOyB0byBhdm9pZCB0aGlzLCB0aGUgbGlicmFyeSBkZXZlbG9wZXIgc2ltcGx5IG5lZWRzIHRvIGluc3RhbnRpYXRlCisgICAgYSBOdWxsSGFuZGxlciBhbmQgYWRkIGl0IHRvIHRoZSB0b3AtbGV2ZWwgbG9nZ2VyIG9mIHRoZSBsaWJyYXJ5IG1vZHVsZSBvcgorICAgIHBhY2thZ2UuCisgICAgIiIiCisgICAgZGVmIGhhbmRsZShzZWxmLCByZWNvcmQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlTG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5sb2NrID0gTm9uZQorCisjIFdhcm5pbmdzIGludGVncmF0aW9uCisKK193YXJuaW5nc19zaG93d2FybmluZyA9IE5vbmUKKworZGVmIF9zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZT1Ob25lLCBsaW5lPU5vbmUpOgorICAgICIiIgorICAgIEltcGxlbWVudGF0aW9uIG9mIHNob3d3YXJuaW5ncyB3aGljaCByZWRpcmVjdHMgdG8gbG9nZ2luZywgd2hpY2ggd2lsbCBmaXJzdAorICAgIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmlsZSBwYXJhbWV0ZXIgaXMgTm9uZS4gSWYgYSBmaWxlIGlzIHNwZWNpZmllZCwgaXQgd2lsbAorICAgIGRlbGVnYXRlIHRvIHRoZSBvcmlnaW5hbCB3YXJuaW5ncyBpbXBsZW1lbnRhdGlvbiBvZiBzaG93d2FybmluZy4gT3RoZXJ3aXNlLAorICAgIGl0IHdpbGwgY2FsbCB3YXJuaW5ncy5mb3JtYXR3YXJuaW5nIGFuZCB3aWxsIGxvZyB0aGUgcmVzdWx0aW5nIHN0cmluZyB0byBhCisgICAgd2FybmluZ3MgbG9nZ2VyIG5hbWVkICJweS53YXJuaW5ncyIgd2l0aCBsZXZlbCBsb2dnaW5nLldBUk5JTkcuCisgICAgIiIiCisgICAgaWYgZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgX3dhcm5pbmdzX3Nob3d3YXJuaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dhcm5pbmdzX3Nob3d3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBmaWxlLCBsaW5lKQorICAgIGVsc2U6CisgICAgICAgIHMgPSB3YXJuaW5ncy5mb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBsaW5lKQorICAgICAgICBsb2dnZXIgPSBnZXRMb2dnZXIoInB5Lndhcm5pbmdzIikKKyAgICAgICAgaWYgbm90IGxvZ2dlci5oYW5kbGVyczoKKyAgICAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKE51bGxIYW5kbGVyKCkpCisgICAgICAgIGxvZ2dlci53YXJuaW5nKCIlcyIsIHMpCisKK2RlZiBjYXB0dXJlV2FybmluZ3MoY2FwdHVyZSk6CisgICAgIiIiCisgICAgSWYgY2FwdHVyZSBpcyB0cnVlLCByZWRpcmVjdCBhbGwgd2FybmluZ3MgdG8gdGhlIGxvZ2dpbmcgcGFja2FnZS4KKyAgICBJZiBjYXB0dXJlIGlzIEZhbHNlLCBlbnN1cmUgdGhhdCB3YXJuaW5ncyBhcmUgbm90IHJlZGlyZWN0ZWQgdG8gbG9nZ2luZworICAgIGJ1dCB0byB0aGVpciBvcmlnaW5hbCBkZXN0aW5hdGlvbnMuCisgICAgIiIiCisgICAgZ2xvYmFsIF93YXJuaW5nc19zaG93d2FybmluZworICAgIGlmIGNhcHR1cmU6CisgICAgICAgIGlmIF93YXJuaW5nc19zaG93d2FybmluZyBpcyBOb25lOgorICAgICAgICAgICAgX3dhcm5pbmdzX3Nob3d3YXJuaW5nID0gd2FybmluZ3Muc2hvd3dhcm5pbmcKKyAgICAgICAgICAgIHdhcm5pbmdzLnNob3d3YXJuaW5nID0gX3Nob3d3YXJuaW5nCisgICAgZWxzZToKKyAgICAgICAgaWYgX3dhcm5pbmdzX3Nob3d3YXJuaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2FybmluZ3Muc2hvd3dhcm5pbmcgPSBfd2FybmluZ3Nfc2hvd3dhcm5pbmcKKyAgICAgICAgICAgIF93YXJuaW5nc19zaG93d2FybmluZyA9IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9sb2dnaW5nL2NvbmZpZy5weSBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQppbmRleCBlYjJjMjQ4Li44ZTRmYTgwIDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9jb25maWcucHkKKysrIGIvTGliL2xvZ2dpbmcvY29uZmlnLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgMjAwMS0yMDA3IGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgMjAwMS0yMDEwIGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKICMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLApAQCAtMTksMTUgKzE5LDEzIEBACiBpcyBiYXNlZCBvbiBQRVAgMjgyIGFuZCBjb21tZW50cyB0aGVyZXRvIGluIGNvbXAubGFuZy5weXRob24sIGFuZCBpbmZsdWVuY2VkCiBieSBBcGFjaGUncyBsb2c0aiBzeXN0ZW0uCiAKLVNob3VsZCB3b3JrIHVuZGVyIFB5dGhvbiB2ZXJzaW9ucyA+PSAxLjUuMiwgZXhjZXB0IHRoYXQgc291cmNlIGxpbmUKLWluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdW5sZXNzICdzeXMuX2dldGZyYW1lKCknIGlzLgotCi1Db3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvcHlyaWdodCAoQykgMjAwMS0yMDEwIFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogCiBUbyB1c2UsIHNpbXBseSAnaW1wb3J0IGxvZ2dpbmcnIGFuZCBsb2cgYXdheSEKICIiIgogCi1pbXBvcnQgc3lzLCBsb2dnaW5nLCBsb2dnaW5nLmhhbmRsZXJzLCBzdHJpbmcsIHNvY2tldCwgc3RydWN0LCBvcywgdHJhY2ViYWNrLCB0eXBlcworaW1wb3J0IHN5cywgbG9nZ2luZywgbG9nZ2luZy5oYW5kbGVycywgc29ja2V0LCBzdHJ1Y3QsIG9zLCB0cmFjZWJhY2ssIHJlCitpbXBvcnQgdHlwZXMsIGNTdHJpbmdJTwogCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZApAQCAtNTIsNyArNTAsNyBAQAogIyAgIF9saXN0ZW5lciBob2xkcyB0aGUgc2VydmVyIG9iamVjdCBkb2luZyB0aGUgbGlzdGVuaW5nCiBfbGlzdGVuZXIgPSBOb25lCiAKLWRlZiBmaWxlQ29uZmlnKGZuYW1lLCBkZWZhdWx0cz1Ob25lLCBkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM9MSk6CitkZWYgZmlsZUNvbmZpZyhmbmFtZSwgZGVmYXVsdHM9Tm9uZSwgZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzPVRydWUpOgogICAgICIiIgogICAgIFJlYWQgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgQ29uZmlnUGFyc2VyLWZvcm1hdCBmaWxlLgogCkBAIC02MCwxNSArNTgsMTEgQEAKICAgICB0aGUgYWJpbGl0eSB0byBzZWxlY3QgZnJvbSB2YXJpb3VzIHByZS1jYW5uZWQgY29uZmlndXJhdGlvbnMgKGlmIHRoZQogICAgIGRldmVsb3BlciBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzIGFuZCBsb2FkIHRoZSBjaG9zZW4KICAgICBjb25maWd1cmF0aW9uKS4KLSAgICBJbiB2ZXJzaW9ucyBvZiBDb25maWdQYXJzZXIgd2hpY2ggaGF2ZSB0aGUgcmVhZGZwIG1ldGhvZCBbdHlwaWNhbGx5Ci0gICAgc2hpcHBlZCBpbiAyLnggdmVyc2lvbnMgb2YgUHl0aG9uXSwgeW91IGNhbiBwYXNzIGluIGEgZmlsZS1saWtlIG9iamVjdAotICAgIHJhdGhlciB0aGFuIGEgZmlsZW5hbWUsIGluIHdoaWNoIGNhc2UgdGhlIGZpbGUtbGlrZSBvYmplY3Qgd2lsbCBiZSByZWFkCi0gICAgdXNpbmcgcmVhZGZwLgogICAgICIiIgogICAgIGltcG9ydCBDb25maWdQYXJzZXIKIAogICAgIGNwID0gQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcihkZWZhdWx0cykKLSAgICBpZiBoYXNhdHRyKGNwLCAncmVhZGZwJykgYW5kIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgorICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgogICAgICAgICBjcC5yZWFkZnAoZm5hbWUpCiAgICAgZWxzZToKICAgICAgICAgY3AucmVhZChmbmFtZSkKQEAgLTg5LDcgKzgzLDcgQEAKIAogZGVmIF9yZXNvbHZlKG5hbWUpOgogICAgICIiIlJlc29sdmUgYSBkb3R0ZWQgbmFtZSB0byBhIGdsb2JhbCBvYmplY3QuIiIiCi0gICAgbmFtZSA9IHN0cmluZy5zcGxpdChuYW1lLCAnLicpCisgICAgbmFtZSA9IG5hbWUuc3BsaXQoJy4nKQogICAgIHVzZWQgPSBuYW1lLnBvcCgwKQogICAgIGZvdW5kID0gX19pbXBvcnRfXyh1c2VkKQogICAgIGZvciBuIGluIG5hbWU6CkBAIC0xMDIsNyArOTYsNyBAQAogICAgIHJldHVybiBmb3VuZAogCiBkZWYgX3N0cmlwX3NwYWNlcyhhbGlzdCk6Ci0gICAgcmV0dXJuIG1hcChsYW1iZGEgeDogc3RyaW5nLnN0cmlwKHgpLCBhbGlzdCkKKyAgICByZXR1cm4gbWFwKGxhbWJkYSB4OiB4LnN0cmlwKCksIGFsaXN0KQogCiBkZWYgX2VuY29kZWQocyk6CiAgICAgcmV0dXJuIHMgaWYgaXNpbnN0YW5jZShzLCBzdHIpIGVsc2Ugcy5lbmNvZGUoJ3V0Zi04JykKQEAgLTExMiw3ICsxMDYsNyBAQAogICAgIGZsaXN0ID0gY3AuZ2V0KCJmb3JtYXR0ZXJzIiwgImtleXMiKQogICAgIGlmIG5vdCBsZW4oZmxpc3QpOgogICAgICAgICByZXR1cm4ge30KLSAgICBmbGlzdCA9IHN0cmluZy5zcGxpdChmbGlzdCwgIiwiKQorICAgIGZsaXN0ID0gZmxpc3Quc3BsaXQoIiwiKQogICAgIGZsaXN0ID0gX3N0cmlwX3NwYWNlcyhmbGlzdCkKICAgICBmb3JtYXR0ZXJzID0ge30KICAgICBmb3IgZm9ybSBpbiBmbGlzdDoKQEAgLTE0MSw3ICsxMzUsNyBAQAogICAgIGhsaXN0ID0gY3AuZ2V0KCJoYW5kbGVycyIsICJrZXlzIikKICAgICBpZiBub3QgbGVuKGhsaXN0KToKICAgICAgICAgcmV0dXJuIHt9Ci0gICAgaGxpc3QgPSBzdHJpbmcuc3BsaXQoaGxpc3QsICIsIikKKyAgICBobGlzdCA9IGhsaXN0LnNwbGl0KCIsIikKICAgICBobGlzdCA9IF9zdHJpcF9zcGFjZXMoaGxpc3QpCiAgICAgaGFuZGxlcnMgPSB7fQogICAgIGZpeHVwcyA9IFtdICNmb3IgaW50ZXItaGFuZGxlciByZWZlcmVuY2VzCkBAIC0xODQsOCArMTc4LDggQEAKIAogICAgICMgY29uZmlndXJlIHRoZSByb290IGZpcnN0CiAgICAgbGxpc3QgPSBjcC5nZXQoImxvZ2dlcnMiLCAia2V5cyIpCi0gICAgbGxpc3QgPSBzdHJpbmcuc3BsaXQobGxpc3QsICIsIikKLSAgICBsbGlzdCA9IG1hcChsYW1iZGEgeDogc3RyaW5nLnN0cmlwKHgpLCBsbGlzdCkKKyAgICBsbGlzdCA9IGxsaXN0LnNwbGl0KCIsIikKKyAgICBsbGlzdCA9IGxpc3QobWFwKGxhbWJkYSB4OiB4LnN0cmlwKCksIGxsaXN0KSkKICAgICBsbGlzdC5yZW1vdmUoInJvb3QiKQogICAgIHNlY3RuYW1lID0gImxvZ2dlcl9yb290IgogICAgIHJvb3QgPSBsb2dnaW5nLnJvb3QKQEAgLTE5OCw3ICsxOTIsNyBAQAogICAgICAgICByb290LnJlbW92ZUhhbmRsZXIoaCkKICAgICBobGlzdCA9IGNwLmdldChzZWN0bmFtZSwgImhhbmRsZXJzIikKICAgICBpZiBsZW4oaGxpc3QpOgotICAgICAgICBobGlzdCA9IHN0cmluZy5zcGxpdChobGlzdCwgIiwiKQorICAgICAgICBobGlzdCA9IGhsaXN0LnNwbGl0KCIsIikKICAgICAgICAgaGxpc3QgPSBfc3RyaXBfc3BhY2VzKGhsaXN0KQogICAgICAgICBmb3IgaGFuZCBpbiBobGlzdDoKICAgICAgICAgICAgIGxvZy5hZGRIYW5kbGVyKGhhbmRsZXJzW2hhbmRdKQpAQCAtMjEyLDcgKzIwNiw3IEBACiAgICAgI3doYXQncyBsZWZ0IGluIGV4aXN0aW5nIGlzIHRoZSBzZXQgb2YgbG9nZ2VycwogICAgICN3aGljaCB3ZXJlIGluIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGJ1dAogICAgICN3aGljaCBhcmUgbm90IGluIHRoZSBuZXcgY29uZmlndXJhdGlvbi4KLSAgICBleGlzdGluZyA9IHJvb3QubWFuYWdlci5sb2dnZXJEaWN0LmtleXMoKQorICAgIGV4aXN0aW5nID0gbGlzdChyb290Lm1hbmFnZXIubG9nZ2VyRGljdC5rZXlzKCkpCiAgICAgI1RoZSBsaXN0IG5lZWRzIHRvIGJlIHNvcnRlZCBzbyB0aGF0IHdlIGNhbgogICAgICNhdm9pZCBkaXNhYmxpbmcgY2hpbGQgbG9nZ2VycyBvZiBleHBsaWNpdGx5CiAgICAgI25hbWVkIGxvZ2dlcnMuIFdpdGggYSBzb3J0ZWQgbGlzdCBpdCBpcyBlYXNpZXIKQEAgLTI1MCw3ICsyNDQsNyBAQAogICAgICAgICBsb2dnZXIuZGlzYWJsZWQgPSAwCiAgICAgICAgIGhsaXN0ID0gY3AuZ2V0KHNlY3RuYW1lLCAiaGFuZGxlcnMiKQogICAgICAgICBpZiBsZW4oaGxpc3QpOgotICAgICAgICAgICAgaGxpc3QgPSBzdHJpbmcuc3BsaXQoaGxpc3QsICIsIikKKyAgICAgICAgICAgIGhsaXN0ID0gaGxpc3Quc3BsaXQoIiwiKQogICAgICAgICAgICAgaGxpc3QgPSBfc3RyaXBfc3BhY2VzKGhsaXN0KQogICAgICAgICAgICAgZm9yIGhhbmQgaW4gaGxpc3Q6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcnNbaGFuZF0pCkBAIC0yNzAsNiArMjY0LDUxOCBAQAogICAgICAgICAgICAgbG9nZ2VyLmRpc2FibGVkID0gMQogCiAKKworSURFTlRJRklFUiA9IHJlLmNvbXBpbGUoJ15bYS16X11bYS16MC05X10qJCcsIHJlLkkpCisKKworZGVmIHZhbGlkX2lkZW50KHMpOgorICAgIG0gPSBJREVOVElGSUVSLm1hdGNoKHMpCisgICAgaWYgbm90IG06CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vdCBhIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVyOiAlcicgJSBzKQorICAgIHJldHVybiBUcnVlCisKKworIyBUaGUgQ29udmVydGluZ1hYWCBjbGFzc2VzIGFyZSB3cmFwcGVycyBhcm91bmQgc3RhbmRhcmQgUHl0aG9uIGNvbnRhaW5lcnMsCisjIGFuZCB0aGV5IHNlcnZlIHRvIGNvbnZlcnQgYW55IHN1aXRhYmxlIHZhbHVlcyBpbiB0aGUgY29udGFpbmVyLiBUaGUKKyMgY29udmVyc2lvbiBjb252ZXJ0cyBiYXNlIGRpY3RzLCBsaXN0cyBhbmQgdHVwbGVzIHRvIHRoZWlyIHdyYXBwZWQKKyMgZXF1aXZhbGVudHMsIHdoZXJlYXMgc3RyaW5ncyB3aGljaCBtYXRjaCBhIGNvbnZlcnNpb24gZm9ybWF0IGFyZSBjb252ZXJ0ZWQKKyMgYXBwcm9wcmlhdGVseS4KKyMKKyMgRWFjaCB3cmFwcGVyIHNob3VsZCBoYXZlIGEgY29uZmlndXJhdG9yIGF0dHJpYnV0ZSBob2xkaW5nIHRoZSBhY3R1YWwKKyMgY29uZmlndXJhdG9yIHRvIHVzZSBmb3IgY29udmVyc2lvbi4KKworY2xhc3MgQ29udmVydGluZ0RpY3QoZGljdCk6CisgICAgIiIiQSBjb252ZXJ0aW5nIGRpY3Rpb25hcnkgd3JhcHBlci4iIiIKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB2YWx1ZSA9IGRpY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KQorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICAjSWYgdGhlIGNvbnZlcnRlZCB2YWx1ZSBpcyBkaWZmZXJlbnQsIHNhdmUgZm9yIG5leHQgdGltZQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgc2VsZltrZXldID0gcmVzdWx0CisgICAgICAgICAgICBpZiB0eXBlKHJlc3VsdCkgaW4gKENvbnZlcnRpbmdEaWN0LCBDb252ZXJ0aW5nTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHZhbHVlID0gZGljdC5nZXQoc2VsZiwga2V5LCBkZWZhdWx0KQorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICAjSWYgdGhlIGNvbnZlcnRlZCB2YWx1ZSBpcyBkaWZmZXJlbnQsIHNhdmUgZm9yIG5leHQgdGltZQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgc2VsZltrZXldID0gcmVzdWx0CisgICAgICAgICAgICBpZiB0eXBlKHJlc3VsdCkgaW4gKENvbnZlcnRpbmdEaWN0LCBDb252ZXJ0aW5nTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHZhbHVlID0gZGljdC5wb3Aoc2VsZiwga2V5LCBkZWZhdWx0KQorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5CisgICAgICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgQ29udmVydGluZ0xpc3QobGlzdCk6CisgICAgIiIiQSBjb252ZXJ0aW5nIGxpc3Qgd3JhcHBlci4iIiIKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgdmFsdWUgPSBsaXN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKKyAgICAgICAgI0lmIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgZGlmZmVyZW50LCBzYXZlIGZvciBuZXh0IHRpbWUKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBwb3Aoc2VsZiwgaWR4PS0xKToKKyAgICAgICAgdmFsdWUgPSBsaXN0LnBvcChzZWxmLCBpZHgpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBpZiB0eXBlKHJlc3VsdCkgaW4gKENvbnZlcnRpbmdEaWN0LCBDb252ZXJ0aW5nTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICByZXR1cm4gcmVzdWx0CisKK2NsYXNzIENvbnZlcnRpbmdUdXBsZSh0dXBsZSk6CisgICAgIiIiQSBjb252ZXJ0aW5nIHR1cGxlIHdyYXBwZXIuIiIiCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHZhbHVlID0gdHVwbGUuX19nZXRpdGVtX18oc2VsZiwga2V5KQorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5CisgICAgICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgQmFzZUNvbmZpZ3VyYXRvcihvYmplY3QpOgorICAgICIiIgorICAgIFRoZSBjb25maWd1cmF0b3IgYmFzZSBjbGFzcyB3aGljaCBkZWZpbmVzIHNvbWUgdXNlZnVsIGRlZmF1bHRzLgorICAgICIiIgorCisgICAgQ09OVkVSVF9QQVRURVJOID0gcmUuY29tcGlsZShyJ14oP1A8cHJlZml4PlthLXpdKyk6Ly8oP1A8c3VmZml4Pi4qKSQnKQorCisgICAgV09SRF9QQVRURVJOID0gcmUuY29tcGlsZShyJ15ccyooXHcrKVxzKicpCisgICAgRE9UX1BBVFRFUk4gPSByZS5jb21waWxlKHInXlwuXHMqKFx3KylccyonKQorICAgIElOREVYX1BBVFRFUk4gPSByZS5jb21waWxlKHInXlxbXHMqKFx3KylccypcXVxzKicpCisgICAgRElHSVRfUEFUVEVSTiA9IHJlLmNvbXBpbGUocideXGQrJCcpCisKKyAgICB2YWx1ZV9jb252ZXJ0ZXJzID0geworICAgICAgICAnZXh0JyA6ICdleHRfY29udmVydCcsCisgICAgICAgICdjZmcnIDogJ2NmZ19jb252ZXJ0JywKKyAgICB9CisKKyAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IG9uZSwgZS5nLiBpbXBvcnRsaWIKKyAgICBpbXBvcnRlciA9IF9faW1wb3J0X18KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcpOgorICAgICAgICBzZWxmLmNvbmZpZyA9IENvbnZlcnRpbmdEaWN0KGNvbmZpZykKKyAgICAgICAgc2VsZi5jb25maWcuY29uZmlndXJhdG9yID0gc2VsZgorCisgICAgZGVmIHJlc29sdmUoc2VsZiwgcyk6CisgICAgICAgICIiIgorICAgICAgICBSZXNvbHZlIHN0cmluZ3MgdG8gb2JqZWN0cyB1c2luZyBzdGFuZGFyZCBpbXBvcnQgYW5kIGF0dHJpYnV0ZQorICAgICAgICBzeW50YXguCisgICAgICAgICIiIgorICAgICAgICBuYW1lID0gcy5zcGxpdCgnLicpCisgICAgICAgIHVzZWQgPSBuYW1lLnBvcCgwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3VuZCA9IHNlbGYuaW1wb3J0ZXIodXNlZCkKKyAgICAgICAgICAgIGZvciBmcmFnIGluIG5hbWU6CisgICAgICAgICAgICAgICAgdXNlZCArPSAnLicgKyBmcmFnCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGdldGF0dHIoZm91bmQsIGZyYWcpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmltcG9ydGVyKHVzZWQpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZ2V0YXR0cihmb3VuZCwgZnJhZykKKyAgICAgICAgICAgIHJldHVybiBmb3VuZAorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBlLCB0YiA9IHN5cy5leGNfaW5mbygpWzE6XQorICAgICAgICAgICAgdiA9IFZhbHVlRXJyb3IoJ0Nhbm5vdCByZXNvbHZlICVyOiAlcycgJSAocywgZSkpCisgICAgICAgICAgICB2Ll9fY2F1c2VfXywgdi5fX3RyYWNlYmFja19fID0gZSwgdGIKKyAgICAgICAgICAgIHJhaXNlIHYKKworICAgIGRlZiBleHRfY29udmVydChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIkRlZmF1bHQgY29udmVydGVyIGZvciB0aGUgZXh0Oi8vIHByb3RvY29sLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5yZXNvbHZlKHZhbHVlKQorCisgICAgZGVmIGNmZ19jb252ZXJ0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiRGVmYXVsdCBjb252ZXJ0ZXIgZm9yIHRoZSBjZmc6Ly8gcHJvdG9jb2wuIiIiCisgICAgICAgIHJlc3QgPSB2YWx1ZQorICAgICAgICBtID0gc2VsZi5XT1JEX1BBVFRFUk4ubWF0Y2gocmVzdCkKKyAgICAgICAgaWYgbSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXIiICUgdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN0ID0gcmVzdFttLmVuZCgpOl0KKyAgICAgICAgICAgIGQgPSBzZWxmLmNvbmZpZ1ttLmdyb3VwcygpWzBdXQorICAgICAgICAgICAgI3ByaW50IGQsIHJlc3QKKyAgICAgICAgICAgIHdoaWxlIHJlc3Q6CisgICAgICAgICAgICAgICAgbSA9IHNlbGYuRE9UX1BBVFRFUk4ubWF0Y2gocmVzdCkKKyAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICBkID0gZFttLmdyb3VwcygpWzBdXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG0gPSBzZWxmLklOREVYX1BBVFRFUk4ubWF0Y2gocmVzdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IG0uZ3JvdXBzKClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLkRJR0lUX1BBVFRFUk4ubWF0Y2goaWR4KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gZFtpZHhdCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGludChpZHgpICMgdHJ5IGFzIG51bWJlciBmaXJzdCAobW9zdCBsaWtlbHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBkW25dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGRbaWR4XQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIHJlc3QgPSByZXN0W20uZW5kKCk6XQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjb252ZXJ0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXIgYXQgJXInICUgKHZhbHVlLCByZXN0KSkKKyAgICAgICAgI3Jlc3Qgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgY29udmVydChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIgorICAgICAgICBDb252ZXJ0IHZhbHVlcyB0byBhbiBhcHByb3ByaWF0ZSB0eXBlLiBkaWN0cywgbGlzdHMgYW5kIHR1cGxlcyBhcmUKKyAgICAgICAgcmVwbGFjZWQgYnkgdGhlaXIgY29udmVydGluZyBhbHRlcm5hdGl2ZXMuIFN0cmluZ3MgYXJlIGNoZWNrZWQgdG8KKyAgICAgICAgc2VlIGlmIHRoZXkgaGF2ZSBhIGNvbnZlcnNpb24gZm9ybWF0IGFuZCBhcmUgY29udmVydGVkIGlmIHRoZXkgZG8uCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgQ29udmVydGluZ0RpY3QpIGFuZCBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgIHZhbHVlID0gQ29udmVydGluZ0RpY3QodmFsdWUpCisgICAgICAgICAgICB2YWx1ZS5jb25maWd1cmF0b3IgPSBzZWxmCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIENvbnZlcnRpbmdMaXN0KSBhbmQgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICB2YWx1ZSA9IENvbnZlcnRpbmdMaXN0KHZhbHVlKQorICAgICAgICAgICAgdmFsdWUuY29uZmlndXJhdG9yID0gc2VsZgorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDb252ZXJ0aW5nVHVwbGUpIGFuZFwKKyAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZSh2YWx1ZSwgdHVwbGUpOgorICAgICAgICAgICAgdmFsdWUgPSBDb252ZXJ0aW5nVHVwbGUodmFsdWUpCisgICAgICAgICAgICB2YWx1ZS5jb25maWd1cmF0b3IgPSBzZWxmCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6ICMgc3RyIGZvciBweTNrCisgICAgICAgICAgICBtID0gc2VsZi5DT05WRVJUX1BBVFRFUk4ubWF0Y2godmFsdWUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGQgPSBtLmdyb3VwZGljdCgpCisgICAgICAgICAgICAgICAgcHJlZml4ID0gZFsncHJlZml4J10KKyAgICAgICAgICAgICAgICBjb252ZXJ0ZXIgPSBzZWxmLnZhbHVlX2NvbnZlcnRlcnMuZ2V0KHByZWZpeCwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBjb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9IGRbJ3N1ZmZpeCddCisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlciA9IGdldGF0dHIoc2VsZiwgY29udmVydGVyKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbnZlcnRlcihzdWZmaXgpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIGNvbmZpZ3VyZV9jdXN0b20oc2VsZiwgY29uZmlnKToKKyAgICAgICAgIiIiQ29uZmlndXJlIGFuIG9iamVjdCB3aXRoIGEgdXNlci1zdXBwbGllZCBmYWN0b3J5LiIiIgorICAgICAgICBjID0gY29uZmlnLnBvcCgnKCknKQorICAgICAgICBpZiBub3QgaGFzYXR0cihjLCAnX19jYWxsX18nKSBhbmQgaGFzYXR0cih0eXBlcywgJ0NsYXNzVHlwZScpIGFuZCB0eXBlKGMpICE9IHR5cGVzLkNsYXNzVHlwZToKKyAgICAgICAgICAgIGMgPSBzZWxmLnJlc29sdmUoYykKKyAgICAgICAgcHJvcHMgPSBjb25maWcucG9wKCcuJywgTm9uZSkKKyAgICAgICAgIyBDaGVjayBmb3IgdmFsaWQgaWRlbnRpZmllcnMKKyAgICAgICAga3dhcmdzID0gZGljdChbKGssIGNvbmZpZ1trXSkgZm9yIGsgaW4gY29uZmlnIGlmIHZhbGlkX2lkZW50KGspXSkKKyAgICAgICAgcmVzdWx0ID0gYygqKmt3YXJncykKKyAgICAgICAgaWYgcHJvcHM6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcHJvcHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHJlc3VsdCwgbmFtZSwgdmFsdWUpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBhc190dXBsZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY29udmVydHMgbGlzdHMgdG8gdHVwbGVzLiIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgIHZhbHVlID0gdHVwbGUodmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZQorCitjbGFzcyBEaWN0Q29uZmlndXJhdG9yKEJhc2VDb25maWd1cmF0b3IpOgorICAgICIiIgorICAgIENvbmZpZ3VyZSBsb2dnaW5nIHVzaW5nIGEgZGljdGlvbmFyeS1saWtlIG9iamVjdCB0byBkZXNjcmliZSB0aGUKKyAgICBjb25maWd1cmF0aW9uLgorICAgICIiIgorCisgICAgZGVmIGNvbmZpZ3VyZShzZWxmKToKKyAgICAgICAgIiIiRG8gdGhlIGNvbmZpZ3VyYXRpb24uIiIiCisKKyAgICAgICAgY29uZmlnID0gc2VsZi5jb25maWcKKyAgICAgICAgaWYgJ3ZlcnNpb24nIG5vdCBpbiBjb25maWc6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJkaWN0aW9uYXJ5IGRvZXNuJ3Qgc3BlY2lmeSBhIHZlcnNpb24iKQorICAgICAgICBpZiBjb25maWdbJ3ZlcnNpb24nXSAhPSAxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgdmVyc2lvbjogJXMiICUgY29uZmlnWyd2ZXJzaW9uJ10pCisgICAgICAgIGluY3JlbWVudGFsID0gY29uZmlnLnBvcCgnaW5jcmVtZW50YWwnLCBGYWxzZSkKKyAgICAgICAgRU1QVFlfRElDVCA9IHt9CisgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgaW5jcmVtZW50YWw6CisgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBjb25maWcuZ2V0KCdoYW5kbGVycycsIEVNUFRZX0RJQ1QpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIGxvZ2dpbmcuX2hhbmRsZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm8gaGFuZGxlciBmb3VuZCB3aXRoICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUgJXInICAlIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGxvZ2dpbmcuX2hhbmRsZXJzW25hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9jb25maWcgPSBoYW5kbGVyc1tuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gaGFuZGxlcl9jb25maWcuZ2V0KCdsZXZlbCcsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGV2ZWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5fY2hlY2tMZXZlbChsZXZlbCkpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RhbmRhcmRFcnJvciwgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY29uZmlndXJlIGhhbmRsZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVyOiAlcycgJSAobmFtZSwgZSkpCisgICAgICAgICAgICAgICAgbG9nZ2VycyA9IGNvbmZpZy5nZXQoJ2xvZ2dlcnMnLCBFTVBUWV9ESUNUKQorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGxvZ2dlcnM6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJlX2xvZ2dlcihuYW1lLCBsb2dnZXJzW25hbWVdLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RhbmRhcmRFcnJvciwgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjb25maWd1cmUgbG9nZ2VyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVyOiAlcycgJSAobmFtZSwgZSkpCisgICAgICAgICAgICAgICAgcm9vdCA9IGNvbmZpZy5nZXQoJ3Jvb3QnLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHJvb3Q6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJlX3Jvb3Qocm9vdCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY29uZmlndXJlIHJvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9nZ2VyOiAlcycgJSBlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkaXNhYmxlX2V4aXN0aW5nID0gY29uZmlnLnBvcCgnZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzJywgVHJ1ZSkKKworICAgICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBkZWwgbG9nZ2luZy5faGFuZGxlckxpc3RbOl0KKworICAgICAgICAgICAgICAgICMgRG8gZm9ybWF0dGVycyBmaXJzdCAtIHRoZXkgZG9uJ3QgcmVmZXIgdG8gYW55dGhpbmcgZWxzZQorICAgICAgICAgICAgICAgIGZvcm1hdHRlcnMgPSBjb25maWcuZ2V0KCdmb3JtYXR0ZXJzJywgRU1QVFlfRElDVCkKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBmb3JtYXR0ZXJzOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJzW25hbWVdID0gc2VsZi5jb25maWd1cmVfZm9ybWF0dGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyc1tuYW1lXSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY29uZmlndXJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlciAlcjogJXMnICUgKG5hbWUsIGUpKQorICAgICAgICAgICAgICAgICMgTmV4dCwgZG8gZmlsdGVycyAtIHRoZXkgZG9uJ3QgcmVmZXIgdG8gYW55dGhpbmcgZWxzZSwgZWl0aGVyCisgICAgICAgICAgICAgICAgZmlsdGVycyA9IGNvbmZpZy5nZXQoJ2ZpbHRlcnMnLCBFTVBUWV9ESUNUKQorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbHRlcnM6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnNbbmFtZV0gPSBzZWxmLmNvbmZpZ3VyZV9maWx0ZXIoZmlsdGVyc1tuYW1lXSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY29uZmlndXJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlciAlcjogJXMnICUgKG5hbWUsIGUpKQorCisgICAgICAgICAgICAgICAgIyBOZXh0LCBkbyBoYW5kbGVycyAtIHRoZXkgcmVmZXIgdG8gZm9ybWF0dGVycyBhbmQgZmlsdGVycworICAgICAgICAgICAgICAgICMgQXMgaGFuZGxlcnMgY2FuIHJlZmVyIHRvIG90aGVyIGhhbmRsZXJzLCBzb3J0IHRoZSBrZXlzCisgICAgICAgICAgICAgICAgIyB0byBhbGxvdyBhIGRldGVybWluaXN0aWMgb3JkZXIgb2YgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gY29uZmlnLmdldCgnaGFuZGxlcnMnLCBFTVBUWV9ESUNUKQorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChoYW5kbGVycyk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBzZWxmLmNvbmZpZ3VyZV9oYW5kbGVyKGhhbmRsZXJzW25hbWVdKQorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5uYW1lID0gbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBoYW5kbGVyCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNvbmZpZ3VyZSBoYW5kbGVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVyOiAlcycgJSAobmFtZSwgZSkpCisgICAgICAgICAgICAgICAgIyBOZXh0LCBkbyBsb2dnZXJzIC0gdGhleSByZWZlciB0byBoYW5kbGVycyBhbmQgZmlsdGVycworCisgICAgICAgICAgICAgICAgI3dlIGRvbid0IHdhbnQgdG8gbG9zZSB0aGUgZXhpc3RpbmcgbG9nZ2VycywKKyAgICAgICAgICAgICAgICAjc2luY2Ugb3RoZXIgdGhyZWFkcyBtYXkgaGF2ZSBwb2ludGVycyB0byB0aGVtLgorICAgICAgICAgICAgICAgICNleGlzdGluZyBpcyBzZXQgdG8gY29udGFpbiBhbGwgZXhpc3RpbmcgbG9nZ2VycywKKyAgICAgICAgICAgICAgICAjYW5kIGFzIHdlIGdvIHRocm91Z2ggdGhlIG5ldyBjb25maWd1cmF0aW9uIHdlCisgICAgICAgICAgICAgICAgI3JlbW92ZSBhbnkgd2hpY2ggYXJlIGNvbmZpZ3VyZWQuIEF0IHRoZSBlbmQsCisgICAgICAgICAgICAgICAgI3doYXQncyBsZWZ0IGluIGV4aXN0aW5nIGlzIHRoZSBzZXQgb2YgbG9nZ2VycworICAgICAgICAgICAgICAgICN3aGljaCB3ZXJlIGluIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGJ1dAorICAgICAgICAgICAgICAgICN3aGljaCBhcmUgbm90IGluIHRoZSBuZXcgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICByb290ID0gbG9nZ2luZy5yb290CisgICAgICAgICAgICAgICAgZXhpc3RpbmcgPSByb290Lm1hbmFnZXIubG9nZ2VyRGljdC5rZXlzKCkKKyAgICAgICAgICAgICAgICAjVGhlIGxpc3QgbmVlZHMgdG8gYmUgc29ydGVkIHNvIHRoYXQgd2UgY2FuCisgICAgICAgICAgICAgICAgI2F2b2lkIGRpc2FibGluZyBjaGlsZCBsb2dnZXJzIG9mIGV4cGxpY2l0bHkKKyAgICAgICAgICAgICAgICAjbmFtZWQgbG9nZ2Vycy4gV2l0aCBhIHNvcnRlZCBsaXN0IGl0IGlzIGVhc2llcgorICAgICAgICAgICAgICAgICN0byBmaW5kIHRoZSBjaGlsZCBsb2dnZXJzLgorICAgICAgICAgICAgICAgIGV4aXN0aW5nLnNvcnQoa2V5PV9lbmNvZGVkKQorICAgICAgICAgICAgICAgICNXZSdsbCBrZWVwIHRoZSBsaXN0IG9mIGV4aXN0aW5nIGxvZ2dlcnMKKyAgICAgICAgICAgICAgICAjd2hpY2ggYXJlIGNoaWxkcmVuIG9mIG5hbWVkIGxvZ2dlcnMgaGVyZS4uLgorICAgICAgICAgICAgICAgIGNoaWxkX2xvZ2dlcnMgPSBbXQorICAgICAgICAgICAgICAgICNub3cgc2V0IHVwIHRoZSBuZXcgb25lcy4uLgorICAgICAgICAgICAgICAgIGxvZ2dlcnMgPSBjb25maWcuZ2V0KCdsb2dnZXJzJywgRU1QVFlfRElDVCkKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBsb2dnZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIGV4aXN0aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGV4aXN0aW5nLmluZGV4KG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhlZCA9IG5hbWUgKyAiLiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBmbGVuID0gbGVuKHByZWZpeGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2V4aXN0aW5nID0gbGVuKGV4aXN0aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxICMgbG9vayBhdCB0aGUgZW50cnkgYWZ0ZXIgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBudW1fZXhpc3RpbmcpIGFuZFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleGlzdGluZ1tpXVs6cGZsZW5dID09IHByZWZpeGVkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZF9sb2dnZXJzLmFwcGVuZChleGlzdGluZ1tpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9sb2dnZXIobmFtZSwgbG9nZ2Vyc1tuYW1lXSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY29uZmlndXJlIGxvZ2dlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcjogJXMnICUgKG5hbWUsIGUpKQorCisgICAgICAgICAgICAgICAgI0Rpc2FibGUgYW55IG9sZCBsb2dnZXJzLiBUaGVyZSdzIG5vIHBvaW50IGRlbGV0aW5nCisgICAgICAgICAgICAgICAgI3RoZW0gYXMgb3RoZXIgdGhyZWFkcyBtYXkgY29udGludWUgdG8gaG9sZCByZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgI2FuZCBieSBkaXNhYmxpbmcgdGhlbSwgeW91IHN0b3AgdGhlbSBkb2luZyBhbnkgbG9nZ2luZy4KKyAgICAgICAgICAgICAgICAjSG93ZXZlciwgZG9uJ3QgZGlzYWJsZSBjaGlsZHJlbiBvZiBuYW1lZCBsb2dnZXJzLCBhcyB0aGF0J3MKKyAgICAgICAgICAgICAgICAjcHJvYmFibHkgbm90IHdoYXQgd2FzIGludGVuZGVkIGJ5IHRoZSB1c2VyLgorICAgICAgICAgICAgICAgIGZvciBsb2cgaW4gZXhpc3Rpbmc6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlciA9IHJvb3QubWFuYWdlci5sb2dnZXJEaWN0W2xvZ10KKyAgICAgICAgICAgICAgICAgICAgaWYgbG9nIGluIGNoaWxkX2xvZ2dlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIubGV2ZWwgPSBsb2dnaW5nLk5PVFNFVAorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZXJzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGVsaWYgZGlzYWJsZV9leGlzdGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kaXNhYmxlZCA9IFRydWUKKworICAgICAgICAgICAgICAgICMgQW5kIGZpbmFsbHksIGRvIHRoZSByb290IGxvZ2dlcgorICAgICAgICAgICAgICAgIHJvb3QgPSBjb25maWcuZ2V0KCdyb290JywgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiByb290OgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9yb290KHJvb3QpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNvbmZpZ3VyZSByb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ2dlcjogJXMnICUgZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKKworICAgIGRlZiBjb25maWd1cmVfZm9ybWF0dGVyKHNlbGYsIGNvbmZpZyk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBhIGZvcm1hdHRlciBmcm9tIGEgZGljdGlvbmFyeS4iIiIKKyAgICAgICAgaWYgJygpJyBpbiBjb25maWc6CisgICAgICAgICAgICBmYWN0b3J5ID0gY29uZmlnWycoKSddICMgZm9yIHVzZSBpbiBleGNlcHRpb24gaGFuZGxlcgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJlX2N1c3RvbShjb25maWcpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCB0ZToKKyAgICAgICAgICAgICAgICBpZiAiJ2Zvcm1hdCciIG5vdCBpbiBzdHIodGUpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICNOYW1lIG9mIHBhcmFtZXRlciBjaGFuZ2VkIGZyb20gZm10IHRvIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAjUmV0cnkgd2l0aCBvbGQgbmFtZS4KKyAgICAgICAgICAgICAgICAjVGhpcyBpcyBzbyB0aGF0IGNvZGUgY2FuIGJlIHVzZWQgd2l0aCBvbGRlciBQeXRob24gdmVyc2lvbnMKKyAgICAgICAgICAgICAgICAjKGUuZy4gYnkgRGphbmdvKQorICAgICAgICAgICAgICAgIGNvbmZpZ1snZm10J10gPSBjb25maWcucG9wKCdmb3JtYXQnKQorICAgICAgICAgICAgICAgIGNvbmZpZ1snKCknXSA9IGZhY3RvcnkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyZV9jdXN0b20oY29uZmlnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm10ID0gY29uZmlnLmdldCgnZm9ybWF0JywgTm9uZSkKKyAgICAgICAgICAgIGRmbXQgPSBjb25maWcuZ2V0KCdkYXRlZm10JywgTm9uZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGxvZ2dpbmcuRm9ybWF0dGVyKGZtdCwgZGZtdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGNvbmZpZ3VyZV9maWx0ZXIoc2VsZiwgY29uZmlnKToKKyAgICAgICAgIiIiQ29uZmlndXJlIGEgZmlsdGVyIGZyb20gYSBkaWN0aW9uYXJ5LiIiIgorICAgICAgICBpZiAnKCknIGluIGNvbmZpZzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJlX2N1c3RvbShjb25maWcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gY29uZmlnLmdldCgnbmFtZScsICcnKQorICAgICAgICAgICAgcmVzdWx0ID0gbG9nZ2luZy5GaWx0ZXIobmFtZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGFkZF9maWx0ZXJzKHNlbGYsIGZpbHRlcmVyLCBmaWx0ZXJzKToKKyAgICAgICAgIiIiQWRkIGZpbHRlcnMgdG8gYSBmaWx0ZXJlciBmcm9tIGEgbGlzdCBvZiBuYW1lcy4iIiIKKyAgICAgICAgZm9yIGYgaW4gZmlsdGVyczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaWx0ZXJlci5hZGRGaWx0ZXIoc2VsZi5jb25maWdbJ2ZpbHRlcnMnXVtmXSkKKyAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBhZGQgZmlsdGVyICVyOiAlcycgJSAoZiwgZSkpCisKKyAgICBkZWYgY29uZmlndXJlX2hhbmRsZXIoc2VsZiwgY29uZmlnKToKKyAgICAgICAgIiIiQ29uZmlndXJlIGEgaGFuZGxlciBmcm9tIGEgZGljdGlvbmFyeS4iIiIKKyAgICAgICAgZm9ybWF0dGVyID0gY29uZmlnLnBvcCgnZm9ybWF0dGVyJywgTm9uZSkKKyAgICAgICAgaWYgZm9ybWF0dGVyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvcm1hdHRlciA9IHNlbGYuY29uZmlnWydmb3JtYXR0ZXJzJ11bZm9ybWF0dGVyXQorICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIHNldCBmb3JtYXR0ZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVyOiAlcycgJSAoZm9ybWF0dGVyLCBlKSkKKyAgICAgICAgbGV2ZWwgPSBjb25maWcucG9wKCdsZXZlbCcsIE5vbmUpCisgICAgICAgIGZpbHRlcnMgPSBjb25maWcucG9wKCdmaWx0ZXJzJywgTm9uZSkKKyAgICAgICAgaWYgJygpJyBpbiBjb25maWc6CisgICAgICAgICAgICBjID0gY29uZmlnLnBvcCgnKCknKQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoYywgJ19fY2FsbF9fJykgYW5kIGhhc2F0dHIodHlwZXMsICdDbGFzc1R5cGUnKSBhbmQgdHlwZShjKSAhPSB0eXBlcy5DbGFzc1R5cGU6CisgICAgICAgICAgICAgICAgYyA9IHNlbGYucmVzb2x2ZShjKQorICAgICAgICAgICAgZmFjdG9yeSA9IGMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtsYXNzID0gc2VsZi5yZXNvbHZlKGNvbmZpZy5wb3AoJ2NsYXNzJykpCisgICAgICAgICAgICAjU3BlY2lhbCBjYXNlIGZvciBoYW5kbGVyIHdoaWNoIHJlZmVycyB0byBhbm90aGVyIGhhbmRsZXIKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3Moa2xhc3MsIGxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlcikgYW5kXAorICAgICAgICAgICAgICAgICd0YXJnZXQnIGluIGNvbmZpZzoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1sndGFyZ2V0J10gPSBzZWxmLmNvbmZpZ1snaGFuZGxlcnMnXVtjb25maWdbJ3RhcmdldCddXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gc2V0IHRhcmdldCBoYW5kbGVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXI6ICVzJyAlIChjb25maWdbJ3RhcmdldCddLCBlKSkKKyAgICAgICAgICAgIGVsaWYgaXNzdWJjbGFzcyhrbGFzcywgbG9nZ2luZy5oYW5kbGVycy5TTVRQSGFuZGxlcikgYW5kXAorICAgICAgICAgICAgICAgICdtYWlsaG9zdCcgaW4gY29uZmlnOgorICAgICAgICAgICAgICAgIGNvbmZpZ1snbWFpbGhvc3QnXSA9IHNlbGYuYXNfdHVwbGUoY29uZmlnWydtYWlsaG9zdCddKQorICAgICAgICAgICAgZWxpZiBpc3N1YmNsYXNzKGtsYXNzLCBsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIpIGFuZFwKKyAgICAgICAgICAgICAgICAnYWRkcmVzcycgaW4gY29uZmlnOgorICAgICAgICAgICAgICAgIGNvbmZpZ1snYWRkcmVzcyddID0gc2VsZi5hc190dXBsZShjb25maWdbJ2FkZHJlc3MnXSkKKyAgICAgICAgICAgIGZhY3RvcnkgPSBrbGFzcworICAgICAgICBrd2FyZ3MgPSBkaWN0KFsoaywgY29uZmlnW2tdKSBmb3IgayBpbiBjb25maWcgaWYgdmFsaWRfaWRlbnQoayldKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBmYWN0b3J5KCoqa3dhcmdzKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCB0ZToKKyAgICAgICAgICAgIGlmICInc3RyZWFtJyIgbm90IGluIHN0cih0ZSk6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICNUaGUgYXJndW1lbnQgbmFtZSBjaGFuZ2VkIGZyb20gc3RybSB0byBzdHJlYW0KKyAgICAgICAgICAgICNSZXRyeSB3aXRoIG9sZCBuYW1lLgorICAgICAgICAgICAgI1RoaXMgaXMgc28gdGhhdCBjb2RlIGNhbiBiZSB1c2VkIHdpdGggb2xkZXIgUHl0aG9uIHZlcnNpb25zCisgICAgICAgICAgICAjKGUuZy4gYnkgRGphbmdvKQorICAgICAgICAgICAga3dhcmdzWydzdHJtJ10gPSBrd2FyZ3MucG9wKCdzdHJlYW0nKQorICAgICAgICAgICAgcmVzdWx0ID0gZmFjdG9yeSgqKmt3YXJncykKKyAgICAgICAgaWYgZm9ybWF0dGVyOgorICAgICAgICAgICAgcmVzdWx0LnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgICAgIGlmIGxldmVsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzdWx0LnNldExldmVsKGxvZ2dpbmcuX2NoZWNrTGV2ZWwobGV2ZWwpKQorICAgICAgICBpZiBmaWx0ZXJzOgorICAgICAgICAgICAgc2VsZi5hZGRfZmlsdGVycyhyZXN1bHQsIGZpbHRlcnMpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBhZGRfaGFuZGxlcnMoc2VsZiwgbG9nZ2VyLCBoYW5kbGVycyk6CisgICAgICAgICIiIkFkZCBoYW5kbGVycyB0byBhIGxvZ2dlciBmcm9tIGEgbGlzdCBvZiBuYW1lcy4iIiIKKyAgICAgICAgZm9yIGggaW4gaGFuZGxlcnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5jb25maWdbJ2hhbmRsZXJzJ11baF0pCisgICAgICAgICAgICBleGNlcHQgU3RhbmRhcmRFcnJvciwgZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gYWRkIGhhbmRsZXIgJXI6ICVzJyAlIChoLCBlKSkKKworICAgIGRlZiBjb21tb25fbG9nZ2VyX2NvbmZpZyhzZWxmLCBsb2dnZXIsIGNvbmZpZywgaW5jcmVtZW50YWw9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgUGVyZm9ybSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIGNvbW1vbiB0byByb290IGFuZCBub24tcm9vdCBsb2dnZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgbGV2ZWwgPSBjb25maWcuZ2V0KCdsZXZlbCcsIE5vbmUpCisgICAgICAgIGlmIGxldmVsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuX2NoZWNrTGV2ZWwobGV2ZWwpKQorICAgICAgICBpZiBub3QgaW5jcmVtZW50YWw6CisgICAgICAgICAgICAjUmVtb3ZlIGFueSBleGlzdGluZyBoYW5kbGVycworICAgICAgICAgICAgZm9yIGggaW4gbG9nZ2VyLmhhbmRsZXJzWzpdOgorICAgICAgICAgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCisgICAgICAgICAgICBoYW5kbGVycyA9IGNvbmZpZy5nZXQoJ2hhbmRsZXJzJywgTm9uZSkKKyAgICAgICAgICAgIGlmIGhhbmRsZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2hhbmRsZXJzKGxvZ2dlciwgaGFuZGxlcnMpCisgICAgICAgICAgICBmaWx0ZXJzID0gY29uZmlnLmdldCgnZmlsdGVycycsIE5vbmUpCisgICAgICAgICAgICBpZiBmaWx0ZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2ZpbHRlcnMobG9nZ2VyLCBmaWx0ZXJzKQorCisgICAgZGVmIGNvbmZpZ3VyZV9sb2dnZXIoc2VsZiwgbmFtZSwgY29uZmlnLCBpbmNyZW1lbnRhbD1GYWxzZSk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBhIG5vbi1yb290IGxvZ2dlciBmcm9tIGEgZGljdGlvbmFyeS4iIiIKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIobmFtZSkKKyAgICAgICAgc2VsZi5jb21tb25fbG9nZ2VyX2NvbmZpZyhsb2dnZXIsIGNvbmZpZywgaW5jcmVtZW50YWwpCisgICAgICAgIHByb3BhZ2F0ZSA9IGNvbmZpZy5nZXQoJ3Byb3BhZ2F0ZScsIE5vbmUpCisgICAgICAgIGlmIHByb3BhZ2F0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBwcm9wYWdhdGUKKworICAgIGRlZiBjb25maWd1cmVfcm9vdChzZWxmLCBjb25maWcsIGluY3JlbWVudGFsPUZhbHNlKToKKyAgICAgICAgIiIiQ29uZmlndXJlIGEgcm9vdCBsb2dnZXIgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCisgICAgICAgIHJvb3QgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgIHNlbGYuY29tbW9uX2xvZ2dlcl9jb25maWcocm9vdCwgY29uZmlnLCBpbmNyZW1lbnRhbCkKKworZGljdENvbmZpZ0NsYXNzID0gRGljdENvbmZpZ3VyYXRvcgorCitkZWYgZGljdENvbmZpZyhjb25maWcpOgorICAgICIiIkNvbmZpZ3VyZSBsb2dnaW5nIHVzaW5nIGEgZGljdGlvbmFyeS4iIiIKKyAgICBkaWN0Q29uZmlnQ2xhc3MoY29uZmlnKS5jb25maWd1cmUoKQorCisKIGRlZiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQpOgogICAgICIiIgogICAgIFN0YXJ0IHVwIGEgc29ja2V0IHNlcnZlciBvbiB0aGUgc3BlY2lmaWVkIHBvcnQsIGFuZCBsaXN0ZW4gZm9yIG5ldwpAQCAtMjgxLDcgKzc4Nyw3IEBACiAgICAgc3RvcExpc3RlbmluZygpLgogICAgICIiIgogICAgIGlmIG5vdCB0aHJlYWQ6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJsaXN0ZW4oKSBuZWVkcyB0aHJlYWRpbmcgdG8gd29yayIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigibGlzdGVuKCkgbmVlZHMgdGhyZWFkaW5nIHRvIHdvcmsiKQogCiAgICAgY2xhc3MgQ29uZmlnU3RyZWFtSGFuZGxlcihTdHJlYW1SZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgICIiIgpAQCAtMzA3LDI0ICs4MTMsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLmNvbm5lY3Rpb24ucmVjdihzbGVuKQogICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZW4oY2h1bmspIDwgc2xlbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsgKyBjb25uLnJlY3Yoc2xlbiAtIGxlbihjaHVuaykpCi0gICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4gV2UnZCBsaWtlIHRvIGJlIGFibGUgdG8KLSAgICAgICAgICAgICAgICAgICAgI2NyZWF0ZSBhIFN0cmluZ0lPIGFuZCBwYXNzIHRoYXQgaW4sIGJ1dCB1bmZvcnR1bmF0ZWx5Ci0gICAgICAgICAgICAgICAgICAgICMxLjUuMiBDb25maWdQYXJzZXIgZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgI29iamVjdHMsIG9ubHkgYWN0dWFsIGZpbGVzLiBTbyB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkKLSAgICAgICAgICAgICAgICAgICAgI2ZpbGUgYW5kIHJlbW92ZSBpdCBsYXRlci4KLSAgICAgICAgICAgICAgICAgICAgZmlsZSA9IHRlbXBmaWxlLm1rdGVtcCgiLmluaSIpCi0gICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGUsICJ3IikKLSAgICAgICAgICAgICAgICAgICAgZi53cml0ZShjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDb25maWcoZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGpzb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGQgPWpzb24ubG9hZHMoY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkLCBkaWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgZGljdENvbmZpZyhkKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKLSAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAjQXBwbHkgbmV3IGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBjU3RyaW5nSU8uU3RyaW5nSU8oY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbmZpZyhmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIucmVhZHk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5yZWFkeS5zZXQoKQogICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKLSAgICAgICAgICAgICAgICBpZiB0eXBlKGUuYXJncykgIT0gdHlwZXMuVHVwbGVUeXBlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUuYXJncywgdHVwbGUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGVycmNvZGUgPSBlLmFyZ3NbMF0KQEAgLTMzOSwxMiArODQ2LDEzIEBACiAgICAgICAgIGFsbG93X3JldXNlX2FkZHJlc3MgPSAxCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JULAotICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcj1Ob25lKToKKyAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI9Tm9uZSwgcmVhZHk9Tm9uZSk6CiAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIuX19pbml0X18oc2VsZiwgKGhvc3QsIHBvcnQpLCBoYW5kbGVyKQogICAgICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICAgICAgc2VsZi5hYm9ydCA9IDAKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKICAgICAgICAgICAgIHNlbGYudGltZW91dCA9IDEKKyAgICAgICAgICAgIHNlbGYucmVhZHkgPSByZWFkeQogCiAgICAgICAgIGRlZiBzZXJ2ZV91bnRpbF9zdG9wcGVkKHNlbGYpOgogICAgICAgICAgICAgaW1wb3J0IHNlbGVjdApAQCAtMzU4LDI2ICs4NjYsNDAgQEAKICAgICAgICAgICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCiAgICAgICAgICAgICAgICAgYWJvcnQgPSBzZWxmLmFib3J0CiAgICAgICAgICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQorICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogCi0gICAgZGVmIHNlcnZlKHJjdnIsIGhkbHIsIHBvcnQpOgotICAgICAgICBzZXJ2ZXIgPSByY3ZyKHBvcnQ9cG9ydCwgaGFuZGxlcj1oZGxyKQotICAgICAgICBnbG9iYWwgX2xpc3RlbmVyCi0gICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKLSAgICAgICAgX2xpc3RlbmVyID0gc2VydmVyCi0gICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKLSAgICAgICAgc2VydmVyLnNlcnZlX3VudGlsX3N0b3BwZWQoKQorICAgIGNsYXNzIFNlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKIAotICAgIHJldHVybiB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShDb25maWdTb2NrZXRSZWNlaXZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdTdHJlYW1IYW5kbGVyLCBwb3J0KSkKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJjdnIsIGhkbHIsIHBvcnQpOgorICAgICAgICAgICAgc3VwZXIoU2VydmVyLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgICAgICBzZWxmLnJjdnIgPSByY3ZyCisgICAgICAgICAgICBzZWxmLmhkbHIgPSBoZGxyCisgICAgICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgICAgICBzZWxmLnJlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKKworICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgc2VydmVyID0gc2VsZi5yY3ZyKHBvcnQ9c2VsZi5wb3J0LCBoYW5kbGVyPXNlbGYuaGRsciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeT1zZWxmLnJlYWR5KQorICAgICAgICAgICAgaWYgc2VsZi5wb3J0ID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VydmVyLnNlcnZlcl9hZGRyZXNzWzFdCisgICAgICAgICAgICBzZWxmLnJlYWR5LnNldCgpCisgICAgICAgICAgICBnbG9iYWwgX2xpc3RlbmVyCisgICAgICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCisgICAgICAgICAgICBfbGlzdGVuZXIgPSBzZXJ2ZXIKKyAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKKyAgICAgICAgICAgIHNlcnZlci5zZXJ2ZV91bnRpbF9zdG9wcGVkKCkKKworICAgIHJldHVybiBTZXJ2ZXIoQ29uZmlnU29ja2V0UmVjZWl2ZXIsIENvbmZpZ1N0cmVhbUhhbmRsZXIsIHBvcnQpCiAKIGRlZiBzdG9wTGlzdGVuaW5nKCk6CiAgICAgIiIiCiAgICAgU3RvcCB0aGUgbGlzdGVuaW5nIHNlcnZlciB3aGljaCB3YXMgY3JlYXRlZCB3aXRoIGEgY2FsbCB0byBsaXN0ZW4oKS4KICAgICAiIiIKICAgICBnbG9iYWwgX2xpc3RlbmVyCi0gICAgaWYgX2xpc3RlbmVyOgotICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCi0gICAgICAgIF9saXN0ZW5lci5hYm9ydCA9IDEKLSAgICAgICAgX2xpc3RlbmVyID0gTm9uZQorICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKKyAgICB0cnk6CisgICAgICAgIGlmIF9saXN0ZW5lcjoKKyAgICAgICAgICAgIF9saXN0ZW5lci5hYm9ydCA9IDEKKyAgICAgICAgICAgIF9saXN0ZW5lciA9IE5vbmUKKyAgICBmaW5hbGx5OgogICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9oYW5kbGVycy5weSBiL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CmluZGV4IDc1NmJhZjAuLmY4YzcxNjQgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CisrKyBiL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgMjAwMS0yMDA3IGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgMjAwMS0yMDEwIGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKICMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLApAQCAtMTksMTMgKzE5LDEzIEBACiBiYXNlZCBvbiBQRVAgMjgyIGFuZCBjb21tZW50cyB0aGVyZXRvIGluIGNvbXAubGFuZy5weXRob24sIGFuZCBpbmZsdWVuY2VkIGJ5CiBBcGFjaGUncyBsb2c0aiBzeXN0ZW0uCiAKLUNvcHlyaWdodCAoQykgMjAwMS0yMDA5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29weXJpZ2h0IChDKSAyMDAxLTIwMTAgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKIFRvIHVzZSwgc2ltcGx5ICdpbXBvcnQgbG9nZ2luZy5oYW5kbGVycycgYW5kIGxvZyBhd2F5IQogIiIiCiAKLWltcG9ydCBsb2dnaW5nLCBzb2NrZXQsIHR5cGVzLCBvcywgc3RyaW5nLCBjUGlja2xlLCBzdHJ1Y3QsIHRpbWUsIHJlCi1mcm9tIHN0YXQgaW1wb3J0IFNUX0RFViwgU1RfSU5PCitpbXBvcnQgbG9nZ2luZywgc29ja2V0LCBvcywgY1BpY2tsZSwgc3RydWN0LCB0aW1lLCByZQorZnJvbSBzdGF0IGltcG9ydCBTVF9ERVYsIFNUX0lOTywgU1RfTVRJTUUKIAogdHJ5OgogICAgIGltcG9ydCBjb2RlY3MKQEAgLTQ2LDYgKzQ2LDcgQEAKIERFRkFVTFRfSFRUUF9MT0dHSU5HX1BPUlQgICA9IDkwMjIKIERFRkFVTFRfU09BUF9MT0dHSU5HX1BPUlQgICA9IDkwMjMKIFNZU0xPR19VRFBfUE9SVCAgICAgICAgICAgICA9IDUxNAorU1lTTE9HX1RDUF9QT1JUICAgICAgICAgICAgID0gNTE0CiAKIF9NSUROSUdIVCA9IDI0ICogNjAgKiA2MCAgIyBudW1iZXIgb2Ygc2Vjb25kcyBpbiBhIGRheQogCkBAIC0xMDcsOCArMTA4LDEzIEBACiAKICAgICAgICAgSWYgbWF4Qnl0ZXMgaXMgemVybywgcm9sbG92ZXIgbmV2ZXIgb2NjdXJzLgogICAgICAgICAiIiIKKyAgICAgICAgIyBJZiByb3RhdGlvbi9yb2xsb3ZlciBpcyB3YW50ZWQsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB1c2UgYW5vdGhlcgorICAgICAgICAjIG1vZGUuIElmIGZvciBleGFtcGxlICd3JyB3ZXJlIHNwZWNpZmllZCwgdGhlbiBpZiB0aGVyZSB3ZXJlIG11bHRpcGxlCisgICAgICAgICMgcnVucyBvZiB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiwgdGhlIGxvZ3MgZnJvbSBwcmV2aW91cyBydW5zIHdvdWxkIGJlCisgICAgICAgICMgbG9zdCBpZiB0aGUgJ3cnIGlzIHJlc3BlY3RlZCwgYmVjYXVzZSB0aGUgbG9nIGZpbGUgd291bGQgYmUgdHJ1bmNhdGVkCisgICAgICAgICMgb24gZWFjaCBydW4uCiAgICAgICAgIGlmIG1heEJ5dGVzID4gMDoKLSAgICAgICAgICAgIG1vZGUgPSAnYScgIyBkb2Vzbid0IG1ha2Ugc2Vuc2Ugb3RoZXJ3aXNlIQorICAgICAgICAgICAgbW9kZSA9ICdhJwogICAgICAgICBCYXNlUm90YXRpbmdIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBtb2RlLCBlbmNvZGluZywgZGVsYXkpCiAgICAgICAgIHNlbGYubWF4Qnl0ZXMgPSBtYXhCeXRlcwogICAgICAgICBzZWxmLmJhY2t1cENvdW50ID0gYmFja3VwQ291bnQKQEAgLTExNyw4ICsxMjMsOSBAQAogICAgICAgICAiIiIKICAgICAgICAgRG8gYSByb2xsb3ZlciwgYXMgZGVzY3JpYmVkIGluIF9faW5pdF9fKCkuCiAgICAgICAgICIiIgotCi0gICAgICAgIHNlbGYuc3RyZWFtLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5zdHJlYW06CisgICAgICAgICAgICBzZWxmLnN0cmVhbS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLnN0cmVhbSA9IE5vbmUKICAgICAgICAgaWYgc2VsZi5iYWNrdXBDb3VudCA+IDA6CiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLmJhY2t1cENvdW50IC0gMSwgMCwgLTEpOgogICAgICAgICAgICAgICAgIHNmbiA9ICIlcy4lZCIgJSAoc2VsZi5iYXNlRmlsZW5hbWUsIGkpCkBAIC0xNjAsOSArMTY3LDkgQEAKICAgICBJZiBiYWNrdXBDb3VudCBpcyA+IDAsIHdoZW4gcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cENvdW50CiAgICAgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQuCiAgICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9MCwgdXRjPTApOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UpOgogICAgICAgICBCYXNlUm90YXRpbmdIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCAnYScsIGVuY29kaW5nLCBkZWxheSkKLSAgICAgICAgc2VsZi53aGVuID0gc3RyaW5nLnVwcGVyKHdoZW4pCisgICAgICAgIHNlbGYud2hlbiA9IHdoZW4udXBwZXIoKQogICAgICAgICBzZWxmLmJhY2t1cENvdW50ID0gYmFja3VwQ291bnQKICAgICAgICAgc2VsZi51dGMgPSB1dGMKICAgICAgICAgIyBDYWxjdWxhdGUgdGhlIHJlYWwgcm9sbG92ZXIgaW50ZXJ2YWwsIHdoaWNoIGlzIGp1c3QgdGhlIG51bWJlciBvZgpAQCAtMTc3LDcgKzE4NCw2IEBACiAgICAgICAgICMKICAgICAgICAgIyBDYXNlIG9mIHRoZSAnd2hlbicgc3BlY2lmaWVyIGlzIG5vdCBpbXBvcnRhbnQ7IGxvd2VyIG9yIHVwcGVyIGNhc2UKICAgICAgICAgIyB3aWxsIHdvcmsuCi0gICAgICAgIGN1cnJlbnRUaW1lID0gaW50KHRpbWUudGltZSgpKQogICAgICAgICBpZiBzZWxmLndoZW4gPT0gJ1MnOgogICAgICAgICAgICAgc2VsZi5pbnRlcnZhbCA9IDEgIyBvbmUgc2Vjb25kCiAgICAgICAgICAgICBzZWxmLnN1ZmZpeCA9ICIlWS0lbS0lZF8lSC0lTS0lUyIKQEAgLTIwOCw5ICsyMTQsMTEgQEAKIAogICAgICAgICBzZWxmLmV4dE1hdGNoID0gcmUuY29tcGlsZShzZWxmLmV4dE1hdGNoKQogICAgICAgICBzZWxmLmludGVydmFsID0gc2VsZi5pbnRlcnZhbCAqIGludGVydmFsICMgbXVsdGlwbHkgYnkgdW5pdHMgcmVxdWVzdGVkCi0gICAgICAgIHNlbGYucm9sbG92ZXJBdCA9IHNlbGYuY29tcHV0ZVJvbGxvdmVyKGludCh0aW1lLnRpbWUoKSkpCi0KLSAgICAgICAgI3ByaW50ICJXaWxsIHJvbGxvdmVyIGF0ICVkLCAlZCBzZWNvbmRzIGZyb20gbm93IiAlIChzZWxmLnJvbGxvdmVyQXQsIHNlbGYucm9sbG92ZXJBdCAtIGN1cnJlbnRUaW1lKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CisgICAgICAgICAgICB0ID0gb3Muc3RhdChmaWxlbmFtZSlbU1RfTVRJTUVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ID0gaW50KHRpbWUudGltZSgpKQorICAgICAgICBzZWxmLnJvbGxvdmVyQXQgPSBzZWxmLmNvbXB1dGVSb2xsb3Zlcih0KQogCiAgICAgZGVmIGNvbXB1dGVSb2xsb3ZlcihzZWxmLCBjdXJyZW50VGltZSk6CiAgICAgICAgICIiIgpAQCAtMzE3LDYgKzMyNSw3IEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLnN0cmVhbToKICAgICAgICAgICAgIHNlbGYuc3RyZWFtLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtID0gTm9uZQogICAgICAgICAjIGdldCB0aGUgdGltZSB0aGF0IHRoaXMgc2VxdWVuY2Ugc3RhcnRlZCBhdCBhbmQgbWFrZSBpdCBhIFRpbWVUdXBsZQogICAgICAgICB0ID0gc2VsZi5yb2xsb3ZlckF0IC0gc2VsZi5pbnRlcnZhbAogICAgICAgICBpZiBzZWxmLnV0YzoKQEAgLTYzNiw3ICs2NDUsOCBAQAogICAgIExPR19ORVdTICAgICAgPSA3ICAgICAgICMgIG5ldHdvcmsgbmV3cyBzdWJzeXN0ZW0KICAgICBMT0dfVVVDUCAgICAgID0gOCAgICAgICAjICBVVUNQIHN1YnN5c3RlbQogICAgIExPR19DUk9OICAgICAgPSA5ICAgICAgICMgIGNsb2NrIGRhZW1vbgotICAgIExPR19BVVRIUFJJViAgPSAxMCAgIyAgc2VjdXJpdHkvYXV0aG9yaXphdGlvbiBtZXNzYWdlcyAocHJpdmF0ZSkKKyAgICBMT0dfQVVUSFBSSVYgID0gMTAgICAgICAjICBzZWN1cml0eS9hdXRob3JpemF0aW9uIG1lc3NhZ2VzIChwcml2YXRlKQorICAgIExPR19GVFAgICAgICAgPSAxMSAgICAgICMgIEZUUCBkYWVtb24KIAogICAgICMgIG90aGVyIGNvZGVzIHRocm91Z2ggMTUgcmVzZXJ2ZWQgZm9yIHN5c3RlbSB1c2UKICAgICBMT0dfTE9DQUwwICAgID0gMTYgICAgICAjICByZXNlcnZlZCBmb3IgbG9jYWwgdXNlCkBAIC02NjgsNiArNjc4LDcgQEAKICAgICAgICAgImF1dGhwcml2IjogTE9HX0FVVEhQUklWLAogICAgICAgICAiY3JvbiI6ICAgICBMT0dfQ1JPTiwKICAgICAgICAgImRhZW1vbiI6ICAgTE9HX0RBRU1PTiwKKyAgICAgICAgImZ0cCI6ICAgICAgTE9HX0ZUUCwKICAgICAgICAgImtlcm4iOiAgICAgTE9HX0tFUk4sCiAgICAgICAgICJscHIiOiAgICAgIExPR19MUFIsCiAgICAgICAgICJtYWlsIjogICAgIExPR19NQUlMLApAQCAtNjk4LDcgKzcwOSw4IEBACiAgICAgICAgICJDUklUSUNBTCIgOiAiY3JpdGljYWwiCiAgICAgfQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3M9KCdsb2NhbGhvc3QnLCBTWVNMT0dfVURQX1BPUlQpLCBmYWNpbGl0eT1MT0dfVVNFUik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3M9KCdsb2NhbGhvc3QnLCBTWVNMT0dfVURQX1BPUlQpLAorICAgICAgICAgICAgICAgICBmYWNpbGl0eT1MT0dfVVNFUiwgc29ja3R5cGU9c29ja2V0LlNPQ0tfREdSQU0pOgogICAgICAgICAiIiIKICAgICAgICAgSW5pdGlhbGl6ZSBhIGhhbmRsZXIuCiAKQEAgLTcxMCwxMyArNzIyLDE2IEBACiAKICAgICAgICAgc2VsZi5hZGRyZXNzID0gYWRkcmVzcwogICAgICAgICBzZWxmLmZhY2lsaXR5ID0gZmFjaWxpdHkKLSAgICAgICAgaWYgdHlwZShhZGRyZXNzKSA9PSB0eXBlcy5TdHJpbmdUeXBlOgorICAgICAgICBzZWxmLnNvY2t0eXBlID0gc29ja3R5cGUKKworICAgICAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3MsIGJhc2VzdHJpbmcpOgogICAgICAgICAgICAgc2VsZi51bml4c29ja2V0ID0gMQogICAgICAgICAgICAgc2VsZi5fY29ubmVjdF91bml4c29ja2V0KGFkZHJlc3MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnVuaXhzb2NrZXQgPSAwCi0gICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQotCisgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2t0eXBlKQorICAgICAgICAgICAgaWYgc29ja3R5cGUgPT0gc29ja2V0LlNPQ0tfU1RSRUFNOgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNvbm5lY3QoYWRkcmVzcykKICAgICAgICAgc2VsZi5mb3JtYXR0ZXIgPSBOb25lCiAKICAgICBkZWYgX2Nvbm5lY3RfdW5peHNvY2tldChzZWxmLCBhZGRyZXNzKToKQEAgLTc0Miw5ICs3NTcsOSBAQAogICAgICAgICBwcmlvcml0eV9uYW1lcyBtYXBwaW5nIGRpY3Rpb25hcmllcyBhcmUgdXNlZCB0byBjb252ZXJ0IHRoZW0gdG8KICAgICAgICAgaW50ZWdlcnMuCiAgICAgICAgICIiIgotICAgICAgICBpZiB0eXBlKGZhY2lsaXR5KSA9PSB0eXBlcy5TdHJpbmdUeXBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKGZhY2lsaXR5LCBiYXNlc3RyaW5nKToKICAgICAgICAgICAgIGZhY2lsaXR5ID0gc2VsZi5mYWNpbGl0eV9uYW1lc1tmYWNpbGl0eV0KLSAgICAgICAgaWYgdHlwZShwcmlvcml0eSkgPT0gdHlwZXMuU3RyaW5nVHlwZToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwcmlvcml0eSwgYmFzZXN0cmluZyk6CiAgICAgICAgICAgICBwcmlvcml0eSA9IHNlbGYucHJpb3JpdHlfbmFtZXNbcHJpb3JpdHldCiAgICAgICAgIHJldHVybiAoZmFjaWxpdHkgPDwgMykgfCBwcmlvcml0eQogCkBAIC03NzMsMjAgKzc4OCwxOSBAQAogICAgICAgICBUaGUgcmVjb3JkIGlzIGZvcm1hdHRlZCwgYW5kIHRoZW4gc2VudCB0byB0aGUgc3lzbG9nIHNlcnZlci4gSWYKICAgICAgICAgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIHByZXNlbnQsIGl0IGlzIE5PVCBzZW50IHRvIHRoZSBzZXJ2ZXIuCiAgICAgICAgICIiIgotICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpCisgICAgICAgIG1zZyA9IHNlbGYuZm9ybWF0KHJlY29yZCkgKyAnXDAwMCcKICAgICAgICAgIiIiCiAgICAgICAgIFdlIG5lZWQgdG8gY29udmVydCByZWNvcmQgbGV2ZWwgdG8gbG93ZXJjYXNlLCBtYXliZSB0aGlzIHdpbGwKICAgICAgICAgY2hhbmdlIGluIHRoZSBmdXR1cmUuCiAgICAgICAgICIiIgotICAgICAgICBtc2cgPSBzZWxmLmxvZ19mb3JtYXRfc3RyaW5nICUgKAotICAgICAgICAgICAgc2VsZi5lbmNvZGVQcmlvcml0eShzZWxmLmZhY2lsaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcFByaW9yaXR5KHJlY29yZC5sZXZlbG5hbWUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKQotICAgICAgICAjIFRyZWF0IHVuaWNvZGUgbWVzc2FnZXMgYXMgcmVxdWlyZWQgYnkgUkZDIDU0MjQKLSAgICAgICAgaWYgX3VuaWNvZGUgYW5kIHR5cGUobXNnKSBpcyB1bmljb2RlOgorICAgICAgICBwcmlvID0gJzwlZD4nICUgc2VsZi5lbmNvZGVQcmlvcml0eShzZWxmLmZhY2lsaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcFByaW9yaXR5KHJlY29yZC5sZXZlbG5hbWUpKQorICAgICAgICAjIE1lc3NhZ2UgaXMgYSBzdHJpbmcuIENvbnZlcnQgdG8gYnl0ZXMgYXMgcmVxdWlyZWQgYnkgUkZDIDU0MjQKKyAgICAgICAgaWYgdHlwZShtc2cpIGlzIHVuaWNvZGU6CiAgICAgICAgICAgICBtc2cgPSBtc2cuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgICAgICBpZiBjb2RlY3M6CiAgICAgICAgICAgICAgICAgbXNnID0gY29kZWNzLkJPTV9VVEY4ICsgbXNnCisgICAgICAgIG1zZyA9IHByaW8gKyBtc2cKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi51bml4c29ja2V0OgogICAgICAgICAgICAgICAgIHRyeToKQEAgLTc5NCw4ICs4MDgsMTAgQEAKICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0X3VuaXhzb2NrZXQoc2VsZi5hZGRyZXNzKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kKG1zZykKLSAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbGlmIHNlbGYuc29ja3R5cGUgPT0gc29ja2V0LlNPQ0tfREdSQU06CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZHRvKG1zZywgc2VsZi5hZGRyZXNzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kYWxsKG1zZykKICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQ6CkBAIC04MDUsNyArODIxLDggQEAKICAgICAiIiIKICAgICBBIGhhbmRsZXIgY2xhc3Mgd2hpY2ggc2VuZHMgYW4gU01UUCBlbWFpbCBmb3IgZWFjaCBsb2dnaW5nIGV2ZW50LgogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWlsaG9zdCwgZnJvbWFkZHIsIHRvYWRkcnMsIHN1YmplY3QsIGNyZWRlbnRpYWxzPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWlsaG9zdCwgZnJvbWFkZHIsIHRvYWRkcnMsIHN1YmplY3QsCisgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzPU5vbmUsIHNlY3VyZT1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIEluaXRpYWxpemUgdGhlIGhhbmRsZXIuCiAKQEAgLTgxMywyMiArODMwLDI4IEBACiAgICAgICAgIGxpbmUgb2YgdGhlIGVtYWlsLiBUbyBzcGVjaWZ5IGEgbm9uLXN0YW5kYXJkIFNNVFAgcG9ydCwgdXNlIHRoZQogICAgICAgICAoaG9zdCwgcG9ydCkgdHVwbGUgZm9ybWF0IGZvciB0aGUgbWFpbGhvc3QgYXJndW1lbnQuIFRvIHNwZWNpZnkKICAgICAgICAgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMsIHN1cHBseSBhICh1c2VybmFtZSwgcGFzc3dvcmQpIHR1cGxlCi0gICAgICAgIGZvciB0aGUgY3JlZGVudGlhbHMgYXJndW1lbnQuCisgICAgICAgIGZvciB0aGUgY3JlZGVudGlhbHMgYXJndW1lbnQuIFRvIHNwZWNpZnkgdGhlIHVzZSBvZiBhIHNlY3VyZQorICAgICAgICBwcm90b2NvbCAoVExTKSwgcGFzcyBpbiBhIHR1cGxlIGZvciB0aGUgc2VjdXJlIGFyZ3VtZW50LiBUaGlzIHdpbGwKKyAgICAgICAgb25seSBiZSB1c2VkIHdoZW4gYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgYXJlIHN1cHBsaWVkLiBUaGUgdHVwbGUKKyAgICAgICAgd2lsbCBiZSBlaXRoZXIgYW4gZW1wdHkgdHVwbGUsIG9yIGEgc2luZ2xlLXZhbHVlIHR1cGxlIHdpdGggdGhlIG5hbWUKKyAgICAgICAgb2YgYSBrZXlmaWxlLCBvciBhIDItdmFsdWUgdHVwbGUgd2l0aCB0aGUgbmFtZXMgb2YgdGhlIGtleWZpbGUgYW5kCisgICAgICAgIGNlcnRpZmljYXRlIGZpbGUuIChUaGlzIHR1cGxlIGlzIHBhc3NlZCB0byB0aGUgYHN0YXJ0dGxzYCBtZXRob2QpLgogICAgICAgICAiIiIKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIGlmIHR5cGUobWFpbGhvc3QpID09IHR5cGVzLlR1cGxlVHlwZToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYWlsaG9zdCwgdHVwbGUpOgogICAgICAgICAgICAgc2VsZi5tYWlsaG9zdCwgc2VsZi5tYWlscG9ydCA9IG1haWxob3N0CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLm1haWxob3N0LCBzZWxmLm1haWxwb3J0ID0gbWFpbGhvc3QsIE5vbmUKLSAgICAgICAgaWYgdHlwZShjcmVkZW50aWFscykgPT0gdHlwZXMuVHVwbGVUeXBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKGNyZWRlbnRpYWxzLCB0dXBsZSk6CiAgICAgICAgICAgICBzZWxmLnVzZXJuYW1lLCBzZWxmLnBhc3N3b3JkID0gY3JlZGVudGlhbHMKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYudXNlcm5hbWUgPSBOb25lCiAgICAgICAgIHNlbGYuZnJvbWFkZHIgPSBmcm9tYWRkcgotICAgICAgICBpZiB0eXBlKHRvYWRkcnMpID09IHR5cGVzLlN0cmluZ1R5cGU6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodG9hZGRycywgYmFzZXN0cmluZyk6CiAgICAgICAgICAgICB0b2FkZHJzID0gW3RvYWRkcnNdCiAgICAgICAgIHNlbGYudG9hZGRycyA9IHRvYWRkcnMKICAgICAgICAgc2VsZi5zdWJqZWN0ID0gc3ViamVjdAorICAgICAgICBzZWxmLnNlY3VyZSA9IHNlY3VyZQogCiAgICAgZGVmIGdldFN1YmplY3Qoc2VsZiwgcmVjb3JkKToKICAgICAgICAgIiIiCkBAIC04MzksMjQgKzg2Miw2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5zdWJqZWN0CiAKLSAgICB3ZWVrZGF5bmFtZSA9IFsnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnLCAnU3VuJ10KLQotICAgIG1vbnRobmFtZSA9IFtOb25lLAotICAgICAgICAgICAgICAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLAotICAgICAgICAgICAgICAgICAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXQotCi0gICAgZGVmIGRhdGVfdGltZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIGZvcm1hdHRlZCBmb3IgYSBNSU1FIGhlYWRlci4KLSAgICAgICAgTmVlZGVkIGZvciBQeXRob24gMS41LjIgKG5vIGVtYWlsIHBhY2thZ2UgYXZhaWxhYmxlKQotICAgICAgICAiIiIKLSAgICAgICAgeWVhciwgbW9udGgsIGRheSwgaGgsIG1tLCBzcywgd2QsIHksIHogPSB0aW1lLmdtdGltZSh0aW1lLnRpbWUoKSkKLSAgICAgICAgcyA9ICIlcywgJTAyZCAlM3MgJTRkICUwMmQ6JTAyZDolMDJkIEdNVCIgJSAoCi0gICAgICAgICAgICAgICAgc2VsZi53ZWVrZGF5bmFtZVt3ZF0sCi0gICAgICAgICAgICAgICAgZGF5LCBzZWxmLm1vbnRobmFtZVttb250aF0sIHllYXIsCi0gICAgICAgICAgICAgICAgaGgsIG1tLCBzcykKLSAgICAgICAgcmV0dXJuIHMKLQogICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CiAgICAgICAgICIiIgogICAgICAgICBFbWl0IGEgcmVjb3JkLgpAQCAtODY1LDEwICs4NzAsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IHNtdHBsaWIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBmb3JtYXRkYXRlCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgZm9ybWF0ZGF0ZSA9IHNlbGYuZGF0ZV90aW1lCisgICAgICAgICAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBmb3JtYXRkYXRlCiAgICAgICAgICAgICBwb3J0ID0gc2VsZi5tYWlscG9ydAogICAgICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAgICAgICAgcG9ydCA9IHNtdHBsaWIuU01UUF9QT1JUCkBAIC04NzYsMTAgKzg3OCwxNCBAQAogICAgICAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQogICAgICAgICAgICAgbXNnID0gIkZyb206ICVzXHJcblRvOiAlc1xyXG5TdWJqZWN0OiAlc1xyXG5EYXRlOiAlc1xyXG5cclxuJXMiICUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnJvbWFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmpvaW4oc2VsZi50b2FkZHJzLCAiLCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIi5qb2luKHNlbGYudG9hZGRycyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRTdWJqZWN0KHJlY29yZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ZGF0ZSgpLCBtc2cpCiAgICAgICAgICAgICBpZiBzZWxmLnVzZXJuYW1lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VjdXJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzbXRwLmVobG8oKQorICAgICAgICAgICAgICAgICAgICBzbXRwLnN0YXJ0dGxzKCpzZWxmLnNlY3VyZSkKKyAgICAgICAgICAgICAgICAgICAgc210cC5laGxvKCkKICAgICAgICAgICAgICAgICBzbXRwLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCiAgICAgICAgICAgICBzbXRwLnNlbmRtYWlsKHNlbGYuZnJvbWFkZHIsIHNlbGYudG9hZGRycywgbXNnKQogICAgICAgICAgICAgc210cC5xdWl0KCkKQEAgLTkyMCw4ICs5MjYsOCBAQAogICAgICAgICAgICAgICAgIGxvZ2dpbmcuQ1JJVElDQUw6IHdpbjMyZXZ0bG9nLkVWRU5UTE9HX0VSUk9SX1RZUEUsCiAgICAgICAgICB9CiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHByaW50ICJUaGUgUHl0aG9uIFdpbjMyIGV4dGVuc2lvbnMgZm9yIE5UIChzZXJ2aWNlLCBldmVudCAiXAotICAgICAgICAgICAgICAgICAgICAgICAgImxvZ2dpbmcpIGFwcGVhciBub3QgdG8gYmUgYXZhaWxhYmxlLiIKKyAgICAgICAgICAgIHByaW50KCJUaGUgUHl0aG9uIFdpbjMyIGV4dGVuc2lvbnMgZm9yIE5UIChzZXJ2aWNlLCBldmVudCAiXAorICAgICAgICAgICAgICAgICAgICAgICAgImxvZ2dpbmcpIGFwcGVhciBub3QgdG8gYmUgYXZhaWxhYmxlLiIpCiAgICAgICAgICAgICBzZWxmLl93ZWx1ID0gTm9uZQogCiAgICAgZGVmIGdldE1lc3NhZ2VJRChzZWxmLCByZWNvcmQpOgpAQCAtOTk5LDkgKzEwMDUsOSBAQAogICAgICAgICAoIkdFVCIgb3IgIlBPU1QiKQogICAgICAgICAiIiIKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIG1ldGhvZCA9IHN0cmluZy51cHBlcihtZXRob2QpCisgICAgICAgIG1ldGhvZCA9IG1ldGhvZC51cHBlcigpCiAgICAgICAgIGlmIG1ldGhvZCBub3QgaW4gWyJHRVQiLCAiUE9TVCJdOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIm1ldGhvZCBtdXN0IGJlIEdFVCBvciBQT1NUIgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibWV0aG9kIG11c3QgYmUgR0VUIG9yIFBPU1QiKQogICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgIHNlbGYudXJsID0gdXJsCiAgICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCkBAIC0xMDE4LDcgKzEwMjQsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgRW1pdCBhIHJlY29yZC4KIAotICAgICAgICBTZW5kIHRoZSByZWNvcmQgdG8gdGhlIFdlYiBzZXJ2ZXIgYXMgYW4gVVJMLWVuY29kZWQgZGljdGlvbmFyeQorICAgICAgICBTZW5kIHRoZSByZWNvcmQgdG8gdGhlIFdlYiBzZXJ2ZXIgYXMgYSBwZXJjZW50LWVuY29kZWQgZGljdGlvbmFyeQogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IGh0dHBsaWIsIHVybGxpYgpAQCAtMTAyNyw3ICsxMDMzLDcgQEAKICAgICAgICAgICAgIHVybCA9IHNlbGYudXJsCiAgICAgICAgICAgICBkYXRhID0gdXJsbGliLnVybGVuY29kZShzZWxmLm1hcExvZ1JlY29yZChyZWNvcmQpKQogICAgICAgICAgICAgaWYgc2VsZi5tZXRob2QgPT0gIkdFVCI6Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmluZy5maW5kKHVybCwgJz8nKSA+PSAwKToKKyAgICAgICAgICAgICAgICBpZiAodXJsLmZpbmQoJz8nKSA+PSAwKToKICAgICAgICAgICAgICAgICAgICAgc2VwID0gJyYnCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgc2VwID0gJz8nCkBAIC0xMDM1LDcgKzEwNDEsNyBAQAogICAgICAgICAgICAgaC5wdXRyZXF1ZXN0KHNlbGYubWV0aG9kLCB1cmwpCiAgICAgICAgICAgICAjIHN1cHBvcnQgbXVsdGlwbGUgaG9zdHMgb24gb25lIElQIGFkZHJlc3MuLi4KICAgICAgICAgICAgICMgbmVlZCB0byBzdHJpcCBvcHRpb25hbCA6cG9ydCBmcm9tIGhvc3QsIGlmIHByZXNlbnQKLSAgICAgICAgICAgIGkgPSBzdHJpbmcuZmluZChob3N0LCAiOiIpCisgICAgICAgICAgICBpID0gaG9zdC5maW5kKCI6IikKICAgICAgICAgICAgIGlmIGkgPj0gMDoKICAgICAgICAgICAgICAgICBob3N0ID0gaG9zdFs6aV0KICAgICAgICAgICAgIGgucHV0aGVhZGVyKCJIb3N0IiwgaG9zdCkKQEAgLTEwNDMsOSArMTA0OSw3IEBACiAgICAgICAgICAgICAgICAgaC5wdXRoZWFkZXIoIkNvbnRlbnQtdHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpCiAgICAgICAgICAgICAgICAgaC5wdXRoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgc3RyKGxlbihkYXRhKSkpCi0gICAgICAgICAgICBoLmVuZGhlYWRlcnMoKQotICAgICAgICAgICAgaWYgc2VsZi5tZXRob2QgPT0gIlBPU1QiOgotICAgICAgICAgICAgICAgIGguc2VuZChkYXRhKQorICAgICAgICAgICAgaC5lbmRoZWFkZXJzKGRhdGEgaWYgc2VsZi5tZXRob2QgPT0gIlBPU1QiIGVsc2UgTm9uZSkKICAgICAgICAgICAgIGguZ2V0cmVwbHkoKSAgICAjY2FuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0CiAgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOgogICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL0xpYi9tYWNwYXRoLnB5IGIvTGliL21hY3BhdGgucHkKaW5kZXggYjIyNzU5ZS4uY2Q0Y2I4NSAxMDA2NDQKLS0tIGEvTGliL21hY3BhdGgucHkKKysrIGIvTGliL21hY3BhdGgucHkKQEAgLTIxMiw0ICsyMTIsNCBAQAogICAgICAgICAgICAgcGFzcwogICAgIHJldHVybiBwYXRoCiAKLXN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzID0gRmFsc2UKK3N1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvTGliL21haWxib3gucHkgYi9MaWIvbWFpbGJveC5weQppbmRleCA4YjE4MDEwLi5iNzRlZWI1IDEwMDY0NAotLS0gYS9MaWIvbWFpbGJveC5weQorKysgYi9MaWIvbWFpbGJveC5weQpAQCAtMjQzLDE0ICsyNDMsMjEgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgTm9TdWNoTWFpbGJveEVycm9yKHNlbGYuX3BhdGgpCiAgICAgICAgIHNlbGYuX3RvYyA9IHt9CisgICAgICAgIHNlbGYuX2xhc3RfcmVhZCA9IE5vbmUgICAgICAgICAgIyBSZWNvcmRzIGxhc3QgdGltZSB3ZSByZWFkIGN1ci9uZXcKKyAgICAgICAgIyBOT1RFOiB3ZSBtYW51YWxseSBpbnZhbGlkYXRlIF9sYXN0X3JlYWQgZWFjaCB0aW1lIHdlIGRvIGFueQorICAgICAgICAjIG1vZGlmaWNhdGlvbnMgb3Vyc2VsdmVzLCBvdGhlcndpc2Ugd2UgbWlnaHQgZ2V0IHRyaXBwZWQgdXAgYnkKKyAgICAgICAgIyBib2d1cyBtdGltZSBiZWhhdmlvdXIgb24gc29tZSBzeXN0ZW1zIChzZWUgaXNzdWUgIzY4OTYpLgogCiAgICAgZGVmIGFkZChzZWxmLCBtZXNzYWdlKToKICAgICAgICAgIiIiQWRkIG1lc3NhZ2UgYW5kIHJldHVybiBhc3NpZ25lZCBrZXkuIiIiCiAgICAgICAgIHRtcF9maWxlID0gc2VsZi5fY3JlYXRlX3RtcCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX2R1bXBfbWVzc2FnZShtZXNzYWdlLCB0bXBfZmlsZSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIF9zeW5jX2Nsb3NlKHRtcF9maWxlKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRtcF9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0bXBfZmlsZS5uYW1lKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgX3N5bmNfY2xvc2UodG1wX2ZpbGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgTWFpbGRpck1lc3NhZ2UpOgogICAgICAgICAgICAgc3ViZGlyID0gbWVzc2FnZS5nZXRfc3ViZGlyKCkKICAgICAgICAgICAgIHN1ZmZpeCA9IHNlbGYuY29sb24gKyBtZXNzYWdlLmdldF9pbmZvKCkKQEAgLTI3NiwxMSArMjgzLDE1IEBACiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBNYWlsZGlyTWVzc2FnZSk6CiAgICAgICAgICAgICBvcy51dGltZShkZXN0LCAob3MucGF0aC5nZXRhdGltZShkZXN0KSwgbWVzc2FnZS5nZXRfZGF0ZSgpKSkKKyAgICAgICAgIyBJbnZhbGlkYXRlIGNhY2hlZCB0b2MKKyAgICAgICAgc2VsZi5fbGFzdF9yZWFkID0gTm9uZQogICAgICAgICByZXR1cm4gdW5pcQogCiAgICAgZGVmIHJlbW92ZShzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZW1vdmUgdGhlIGtleWVkIG1lc3NhZ2U7IHJhaXNlIEtleUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhpc3QuIiIiCiAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc2VsZi5fbG9va3VwKGtleSkpKQorICAgICAgICAjIEludmFsaWRhdGUgY2FjaGVkIHRvYyAob25seSBvbiBzdWNjZXNzKQorICAgICAgICBzZWxmLl9sYXN0X3JlYWQgPSBOb25lCiAKICAgICBkZWYgZGlzY2FyZChzZWxmLCBrZXkpOgogICAgICAgICAiIiJJZiB0aGUga2V5ZWQgbWVzc2FnZSBleGlzdHMsIHJlbW92ZSBpdC4iIiIKQEAgLTMxNSw2ICszMjYsOCBAQAogICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIE1haWxkaXJNZXNzYWdlKToKICAgICAgICAgICAgIG9zLnV0aW1lKG5ld19wYXRoLCAob3MucGF0aC5nZXRhdGltZShuZXdfcGF0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0X2RhdGUoKSkpCisgICAgICAgICMgSW52YWxpZGF0ZSBjYWNoZWQgdG9jCisgICAgICAgIHNlbGYuX2xhc3RfcmVhZCA9IE5vbmUKIAogICAgIGRlZiBnZXRfbWVzc2FnZShzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBNZXNzYWdlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCkBAIC0zNjksNyArMzgyLDkgQEAKIAogICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgIiIiV3JpdGUgYW55IHBlbmRpbmcgY2hhbmdlcyB0byBkaXNrLiIiIgotICAgICAgICByZXR1cm4gICMgTWFpbGRpciBjaGFuZ2VzIGFyZSBhbHdheXMgd3JpdHRlbiBpbW1lZGlhdGVseS4KKyAgICAgICAgIyBNYWlsZGlyIGNoYW5nZXMgYXJlIGFsd2F5cyB3cml0dGVuIGltbWVkaWF0ZWx5LCBzbyB0aGVyZSdzIG5vdGhpbmcKKyAgICAgICAgIyB0byBkbyBleGNlcHQgaW52YWxpZGF0ZSBvdXIgY2FjaGVkIHRvYy4KKyAgICAgICAgc2VsZi5fbGFzdF9yZWFkID0gTm9uZQogCiAgICAgZGVmIGxvY2soc2VsZik6CiAgICAgICAgICIiIkxvY2sgdGhlIG1haWxib3guIiIiCkBAIC00NjcsMTYgKzQ4MiwzNyBAQAogCiAgICAgZGVmIF9yZWZyZXNoKHNlbGYpOgogICAgICAgICAiIiJVcGRhdGUgdGFibGUgb2YgY29udGVudHMgbWFwcGluZy4iIiIKKyAgICAgICAgaWYgc2VsZi5fbGFzdF9yZWFkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIHN1YmRpciBpbiAoJ25ldycsICdjdXInKToKKyAgICAgICAgICAgICAgICBtdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN1YmRpcikpCisgICAgICAgICAgICAgICAgaWYgbXRpbWUgPiBzZWxmLl9sYXN0X3JlYWQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgV2UgcmVjb3JkIHRoZSBjdXJyZW50IHRpbWUgLSAxc2VjIHNvIHRoYXQsIGlmIF9yZWZyZXNoKCkgaXMgY2FsbGVkCisgICAgICAgICMgYWdhaW4gaW4gdGhlIHNhbWUgc2Vjb25kLCB3ZSB3aWxsIGFsd2F5cyByZS1yZWFkIHRoZSBtYWlsYm94CisgICAgICAgICMganVzdCBpbiBjYXNlIGl0J3MgYmVlbiBtb2RpZmllZC4gIChvcy5wYXRoLm10aW1lKCkgb25seSBoYXMKKyAgICAgICAgIyAxc2VjIHJlc29sdXRpb24uKSAgVGhpcyByZXN1bHRzIGluIGEgZmV3IHVubmVjZXNzYXJ5IHJlLXJlYWRzCisgICAgICAgICMgd2hlbiBfcmVmcmVzaCgpIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSBzZWNvbmQsCisgICAgICAgICMgYnV0IG9uY2UgdGhlIGNsb2NrIHRpY2tzIG92ZXIsIHdlIHdpbGwgb25seSByZS1yZWFkIGFzIG5lZWRlZC4KKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkgLSAxCisKICAgICAgICAgc2VsZi5fdG9jID0ge30KLSAgICAgICAgZm9yIHN1YmRpciBpbiAoJ25ldycsICdjdXInKToKLSAgICAgICAgICAgIHN1YmRpcl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN1YmRpcikKLSAgICAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKHN1YmRpcl9wYXRoKToKLSAgICAgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKHN1YmRpcl9wYXRoLCBlbnRyeSkKKyAgICAgICAgZGVmIHVwZGF0ZV9kaXIgKHN1YmRpcik6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN1YmRpcikKKyAgICAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4ocGF0aCwgZW50cnkpCiAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwKToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICB1bmlxID0gZW50cnkuc3BsaXQoc2VsZi5jb2xvbilbMF0KICAgICAgICAgICAgICAgICBzZWxmLl90b2NbdW5pcV0gPSBvcy5wYXRoLmpvaW4oc3ViZGlyLCBlbnRyeSkKIAorICAgICAgICB1cGRhdGVfZGlyKCduZXcnKQorICAgICAgICB1cGRhdGVfZGlyKCdjdXInKQorCisgICAgICAgIHNlbGYuX2xhc3RfcmVhZCA9IG5vdworCiAgICAgZGVmIF9sb29rdXAoc2VsZiwga2V5KToKICAgICAgICAgIiIiVXNlIFRPQyB0byByZXR1cm4gc3VicGF0aCBmb3IgZ2l2ZW4ga2V5LCBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICB0cnk6CkBAIC01MTgsNyArNTU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3diKycpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm9TdWNoTWFpbGJveEVycm9yKHNlbGYuX3BhdGgpCi0gICAgICAgICAgICBlbGlmIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTOgorICAgICAgICAgICAgZWxpZiBlLmVycm5vIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAncmInKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZQpAQCAtNjY3LDkgKzcwMywxNCBAQAogICAgIGRlZiBfYXBwZW5kX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgICIiIkFwcGVuZCBtZXNzYWdlIHRvIG1haWxib3ggYW5kIHJldHVybiAoc3RhcnQsIHN0b3ApIG9mZnNldHMuIiIiCiAgICAgICAgIHNlbGYuX2ZpbGUuc2VlaygwLCAyKQotICAgICAgICBzZWxmLl9wcmVfbWVzc2FnZV9ob29rKHNlbGYuX2ZpbGUpCi0gICAgICAgIG9mZnNldHMgPSBzZWxmLl9pbnN0YWxsX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgc2VsZi5fcG9zdF9tZXNzYWdlX2hvb2soc2VsZi5fZmlsZSkKKyAgICAgICAgYmVmb3JlID0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJlX21lc3NhZ2VfaG9vayhzZWxmLl9maWxlKQorICAgICAgICAgICAgb2Zmc2V0cyA9IHNlbGYuX2luc3RhbGxfbWVzc2FnZShtZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5fcG9zdF9tZXNzYWdlX2hvb2soc2VsZi5fZmlsZSkKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLl9maWxlLnRydW5jYXRlKGJlZm9yZSkKKyAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIHNlbGYuX2ZpbGUuZmx1c2goKQogICAgICAgICBzZWxmLl9maWxlX2xlbmd0aCA9IHNlbGYuX2ZpbGUudGVsbCgpICAjIFJlY29yZCBjdXJyZW50IGxlbmd0aCBvZiBtYWlsYm94CiAgICAgICAgIHJldHVybiBvZmZzZXRzCkBAIC04MzUsMTggKzg3NiwyOSBAQAogICAgICAgICAgICAgbmV3X2tleSA9IG1heChrZXlzKSArIDEKICAgICAgICAgbmV3X3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKG5ld19rZXkpKQogICAgICAgICBmID0gX2NyZWF0ZV9jYXJlZnVsbHkobmV3X3BhdGgpCisgICAgICAgIGNsb3NlZCA9IEZhbHNlCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICBfbG9ja19maWxlKGYpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9tZXNzYWdlKG1lc3NhZ2UsIGYpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX21lc3NhZ2UobWVzc2FnZSwgZikKKyAgICAgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgIyBVbmxvY2sgYW5kIGNsb3NlIHNvIGl0IGNhbiBiZSBkZWxldGVkIG9uIFdpbmRvd3MKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgICAgICAgICAgICAgX3VubG9ja19maWxlKGYpCisgICAgICAgICAgICAgICAgICAgIF9zeW5jX2Nsb3NlKGYpCisgICAgICAgICAgICAgICAgICAgIGNsb3NlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG5ld19wYXRoKQorICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgTUhNZXNzYWdlKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9zZXF1ZW5jZXMobWVzc2FnZSwgbmV3X2tleSkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgICAgICBfdW5sb2NrX2ZpbGUoZikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIF9zeW5jX2Nsb3NlKGYpCisgICAgICAgICAgICBpZiBub3QgY2xvc2VkOgorICAgICAgICAgICAgICAgIF9zeW5jX2Nsb3NlKGYpCiAgICAgICAgIHJldHVybiBuZXdfa2V5CiAKICAgICBkZWYgcmVtb3ZlKHNlbGYsIGtleSk6CkBAIC04NTksMTcgKzkxMSw5IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgotICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgotICAgICAgICAgICAgICAgICAgICBfdW5sb2NrX2ZpbGUoZikKLSAgICAgICAgZmluYWxseToKKyAgICAgICAgZWxzZToKICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCiAKICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCBtZXNzYWdlKToKICAgICAgICAgIiIiUmVwbGFjZSB0aGUga2V5ZWQgbWVzc2FnZTsgcmFpc2UgS2V5RXJyb3IgaWYgaXQgZG9lc24ndCBleGlzdC4iIiIKQEAgLTE4NjEsNyArMTkwNSw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19FWCB8IGZjbnRsLkxPQ0tfTkIpCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUdBSU4sIGVycm5vLkVBQ0NFUyk6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFHQUlOLCBlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdsb2NrZjogbG9jayB1bmF2YWlsYWJsZTogJXMnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYubmFtZSkKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTg3MSw3ICsxOTE1LDcgQEAKICAgICAgICAgICAgICAgICBwcmVfbG9jayA9IF9jcmVhdGVfdGVtcG9yYXJ5KGYubmFtZSArICcubG9jaycpCiAgICAgICAgICAgICAgICAgcHJlX2xvY2suY2xvc2UoKQogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUNDRVM6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FUk9GUyk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgIyBXaXRob3V0IHdyaXRlIGFjY2VzcywganVzdCBza2lwIGRvdGxvY2tpbmcuCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL0xpYi9taW1ldHlwZXMucHkgYi9MaWIvbWltZXR5cGVzLnB5CmluZGV4IGYwYTVlY2YuLjRjMDU0YzkgMTAwNjQ0Ci0tLSBhL0xpYi9taW1ldHlwZXMucHkKKysrIGIvTGliL21pbWV0eXBlcy5weQpAQCAtMTgsMTMgKzE4LDE5IEBACiAKIEZ1bmN0aW9uczoKIAotaW5pdChbZmlsZXNdKSAtLSBwYXJzZSBhIGxpc3Qgb2YgZmlsZXMsIGRlZmF1bHQga25vd25maWxlcworaW5pdChbZmlsZXNdKSAtLSBwYXJzZSBhIGxpc3Qgb2YgZmlsZXMsIGRlZmF1bHQga25vd25maWxlcyAob24gV2luZG93cywgdGhlCisgIGRlZmF1bHQgdmFsdWVzIGFyZSB0YWtlbiBmcm9tIHRoZSByZWdpc3RyeSkKIHJlYWRfbWltZV90eXBlcyhmaWxlKSAtLSBwYXJzZSBvbmUgZmlsZSwgcmV0dXJuIGEgZGljdGlvbmFyeSBvciBOb25lCiAiIiIKIAogaW1wb3J0IG9zCitpbXBvcnQgc3lzCiBpbXBvcnQgcG9zaXhwYXRoCiBpbXBvcnQgdXJsbGliCit0cnk6CisgICAgaW1wb3J0IF93aW5yZWcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfd2lucmVnID0gTm9uZQogCiBfX2FsbF9fID0gWwogICAgICJndWVzc190eXBlIiwiZ3Vlc3NfZXh0ZW5zaW9uIiwiZ3Vlc3NfYWxsX2V4dGVuc2lvbnMiLApAQCAtMTkzLDkgKzE5OSw4IEBACiAgICAgICAgIGxpc3Qgb2Ygc3RhbmRhcmQgdHlwZXMsIGVsc2UgdG8gdGhlIGxpc3Qgb2Ygbm9uLXN0YW5kYXJkCiAgICAgICAgIHR5cGVzLgogICAgICAgICAiIiIKLSAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICBzZWxmLnJlYWRmcChmcCwgc3RyaWN0KQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLnJlYWRmcChmcCwgc3RyaWN0KQogCiAgICAgZGVmIHJlYWRmcChzZWxmLCBmcCwgc3RyaWN0PVRydWUpOgogICAgICAgICAiIiIKQEAgLTIyMCw2ICsyMjUsNTMgQEAKICAgICAgICAgICAgIGZvciBzdWZmIGluIHN1ZmZpeGVzOgogICAgICAgICAgICAgICAgIHNlbGYuYWRkX3R5cGUodHlwZSwgJy4nICsgc3VmZiwgc3RyaWN0KQogCisgICAgZGVmIHJlYWRfd2luZG93c19yZWdpc3RyeShzZWxmLCBzdHJpY3Q9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBMb2FkIHRoZSBNSU1FIHR5cGVzIGRhdGFiYXNlIGZyb20gV2luZG93cyByZWdpc3RyeS4KKworICAgICAgICBJZiBzdHJpY3QgaXMgdHJ1ZSwgaW5mb3JtYXRpb24gd2lsbCBiZSBhZGRlZCB0bworICAgICAgICBsaXN0IG9mIHN0YW5kYXJkIHR5cGVzLCBlbHNlIHRvIHRoZSBsaXN0IG9mIG5vbi1zdGFuZGFyZAorICAgICAgICB0eXBlcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXaW5kb3dzIG9ubHkKKyAgICAgICAgaWYgbm90IF93aW5yZWc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkZWYgZW51bV90eXBlcyhtaW1lZGIpOgorICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjdHlwZSA9IF93aW5yZWcuRW51bUtleShtaW1lZGIsIGkpCisgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjdHlwZSA9IGN0eXBlLmVuY29kZShkZWZhdWx0X2VuY29kaW5nKSAjIG9taXQgaW4gMy54IQorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBjdHlwZQorICAgICAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgIGRlZmF1bHRfZW5jb2RpbmcgPSBzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nKCkKKyAgICAgICAgd2l0aCBfd2lucmVnLk9wZW5LZXkoX3dpbnJlZy5IS0VZX0NMQVNTRVNfUk9PVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidNSU1FXERhdGFiYXNlXENvbnRlbnQgVHlwZScpIGFzIG1pbWVkYjoKKyAgICAgICAgICAgIGZvciBjdHlwZSBpbiBlbnVtX3R5cGVzKG1pbWVkYik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIF93aW5yZWcuT3BlbktleShtaW1lZGIsIGN0eXBlKSBhcyBrZXk6CisgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXgsIGRhdGF0eXBlID0gX3dpbnJlZy5RdWVyeVZhbHVlRXgoa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHRlbnNpb24nKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGRhdGF0eXBlICE9IF93aW5yZWcuUkVHX1NaOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3VmZml4ID0gc3VmZml4LmVuY29kZShkZWZhdWx0X2VuY29kaW5nKSAjIG9taXQgaW4gMy54IQorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5hZGRfdHlwZShjdHlwZSwgc3VmZml4LCBzdHJpY3QpCisKKwogZGVmIGd1ZXNzX3R5cGUodXJsLCBzdHJpY3Q9VHJ1ZSk6CiAgICAgIiIiR3Vlc3MgdGhlIHR5cGUgb2YgYSBmaWxlIGJhc2VkIG9uIGl0cyBVUkwuCiAKQEAgLTI5OSwxMCArMzUxLDEyIEBACiAgICAgaW5pdGVkID0gVHJ1ZSAgICAjIHNvIHRoYXQgTWltZVR5cGVzLl9faW5pdF9fKCkgZG9lc24ndCBjYWxsIHVzIGFnYWluCiAgICAgZGIgPSBNaW1lVHlwZXMoKQogICAgIGlmIGZpbGVzIGlzIE5vbmU6CisgICAgICAgIGlmIF93aW5yZWc6CisgICAgICAgICAgICBkYi5yZWFkX3dpbmRvd3NfcmVnaXN0cnkoKQogICAgICAgICBmaWxlcyA9IGtub3duZmlsZXMKICAgICBmb3IgZmlsZSBpbiBmaWxlczoKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZSk6Ci0gICAgICAgICAgICBkYi5yZWFkZnAob3BlbihmaWxlKSkKKyAgICAgICAgICAgIGRiLnJlYWQoZmlsZSkKICAgICBlbmNvZGluZ3NfbWFwID0gZGIuZW5jb2RpbmdzX21hcAogICAgIHN1ZmZpeF9tYXAgPSBkYi5zdWZmaXhfbWFwCiAgICAgdHlwZXNfbWFwID0gZGIudHlwZXNfbWFwW1RydWVdCkBAIC00OTIsNyArNTQ2LDYgQEAKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBzeXMKICAgICBpbXBvcnQgZ2V0b3B0CiAKICAgICBVU0FHRSA9ICIiIlwKZGlmZiAtLWdpdCBhL0xpYi9tc2lsaWIvX19pbml0X18ucHkgYi9MaWIvbXNpbGliL19faW5pdF9fLnB5CmluZGV4IDcxY2NlZDIuLjFhYTA2MzcgMTAwNjQ0Ci0tLSBhL0xpYi9tc2lsaWIvX19pbml0X18ucHkKKysrIGIvTGliL21zaWxpYi9fX2luaXRfXy5weQpAQCAtMzMwLDcgKzMzMCw3IEBACiAgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5iYXNlbmFtZShmaWxlKQogICAgICAgICBhYnNvbHV0ZSA9IG9zLnBhdGguam9pbihzZWxmLmFic29sdXRlLCBzcmMpCiAgICAgICAgIGFzc2VydCBub3QgcmUuc2VhcmNoKHInW1w/fD48Oi8qXSInLCBmaWxlKSAjIHJlc3RyaWN0aW9ucyBvbiBsb25nIG5hbWVzCi0gICAgICAgIGlmIHNlbGYua2V5ZmlsZXMuaGFzX2tleShmaWxlKToKKyAgICAgICAgaWYgZmlsZSBpbiBzZWxmLmtleWZpbGVzOgogICAgICAgICAgICAgbG9naWNhbCA9IHNlbGYua2V5ZmlsZXNbZmlsZV0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxvZ2ljYWwgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQppbmRleCA0ZmIwYmQwLi40ZTFiNmFlIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKQEAgLTM4LDYgKzM4LDcgQEAKICMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKICMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBfX3ZlcnNpb25fXyA9ICcwLjcwYTEnCkBAIC0xMTYsNyArMTE3LDggQEAKICAgICAgICAgICAgIG51bSA9IDAKICAgICBlbGlmICdic2QnIGluIHN5cy5wbGF0Zm9ybSBvciBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IGludChvcy5wb3Blbignc3lzY3RsIC1uIGh3Lm5jcHUnKS5yZWFkKCkpCisgICAgICAgICAgICB3aXRoIG9zLnBvcGVuKCdzeXNjdGwgLW4gaHcubmNwdScpIGFzIHA6CisgICAgICAgICAgICAgICAgbnVtID0gaW50KHAucmVhZCgpKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgIG51bSA9IDAKICAgICBlbHNlOgpAQCAtMjE5LDEyICsyMjEsMTIgQEAKICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IEpvaW5hYmxlUXVldWUKICAgICByZXR1cm4gSm9pbmFibGVRdWV1ZShtYXhzaXplKQogCi1kZWYgUG9vbChwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCkpOgorZGVmIFBvb2wocHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrc3BlcmNoaWxkPU5vbmUpOgogICAgICcnJwogICAgIFJldHVybnMgYSBwcm9jZXNzIHBvb2wgb2JqZWN0CiAgICAgJycnCiAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgUG9vbAotICAgIHJldHVybiBQb29sKHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzKQorICAgIHJldHVybiBQb29sKHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzLCBtYXh0YXNrc3BlcmNoaWxkKQogCiBkZWYgUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpOgogICAgICcnJwpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CmluZGV4IDk5YjMzOGUuLjA5MDc5NmUgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKQEAgLTMsNyArMywzMyBAQAogIwogIyBtdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrIC0tLSBzZWUgQ09QWUlORy50eHQKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyaworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCisjICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KICMKIAogX19hbGxfXyA9IFsgJ0NsaWVudCcsICdMaXN0ZW5lcicsICdQaXBlJyBdCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQppbmRleCAzMGIxYjIwLi4xOWEzYjY5IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKQEAgLTMsNyArMywzMyBAQAogIwogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKICMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyayAtLS0gc2VlIENPUFlJTkcudHh0CisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQorIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCiAjCiAKIF9fYWxsX18gPSBbCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKaW5kZXggNGYwYTY4MC4uNTBkYzlmZiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQpAQCAtMyw3ICszLDMzIEBACiAjCiAjIG11bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CiAjCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsgLS0tIHNlZSBDT1BZSU5HLnR4dAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBfX2FsbF9fID0gWyAnQ2xpZW50JywgJ0xpc3RlbmVyJywgJ1BpcGUnIF0KZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weQppbmRleCBjZWMxODRjLi5kNWYzYjI2IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CkBAIC0zLDcgKzMsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkKICMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyayAtLS0gc2VlIENPUFlJTkcudHh0CisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQorIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCiAjCiAKIGltcG9ydCBvcwpAQCAtMTAzLDcgKzEyOSwxMiBAQAogCiAgICAgICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6CiAgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoc2VsZi5waWQsIGZsYWcpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoc2VsZi5waWQsIGZsYWcpCisgICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgbm90IHlldCBjcmVhdGVkLiBTZWUgIzE3MzE3MTcKKyAgICAgICAgICAgICAgICAgICAgIyBlLmVycm5vID09IGVycm5vLkVDSElMRCA9PSAxMAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKICAgICAgICAgICAgICAgICAgICAgaWYgb3MuV0lGU0lHTkFMRUQoc3RzKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IC1vcy5XVEVSTVNJRyhzdHMpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKaW5kZXggNjk3YTVmNS4uNTJlZTQ5ZCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQpAQCAtMyw3ICszLDMzIEBACiAjCiAjIG11bHRpcHJvY2Vzc2luZy9oZWFwLnB5CiAjCi0jIENvcHlyaWdodCAoYykgMjAwNy0yMDA4LCBSIE91ZGtlcmsgLS0tIHNlZSBDT1BZSU5HLnR4dAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBpbXBvcnQgYmlzZWN0CmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQppbmRleCBlMzMxMTE2Li43ODUxOGZkIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKQEAgLTQsNyArNCwzMyBAQAogIwogIyBtdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKICMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyayAtLS0gc2VlIENPUFlJTkcudHh0CisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQorIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCiAjCiAKIF9fYWxsX18gPSBbICdCYXNlTWFuYWdlcicsICdTeW5jTWFuYWdlcicsICdCYXNlUHJveHknLCAnVG9rZW4nIF0KQEAgLTEzNiw3ICsxNjIsNyBAQAogICAgICAgICBzZWxmLmxpc3RlbmVyID0gTGlzdGVuZXIoYWRkcmVzcz1hZGRyZXNzLCBiYWNrbG9nPTUpCiAgICAgICAgIHNlbGYuYWRkcmVzcyA9IHNlbGYubGlzdGVuZXIuYWRkcmVzcwogCi0gICAgICAgIHNlbGYuaWRfdG9fb2JqID0gezA6IChOb25lLCAoKSl9CisgICAgICAgIHNlbGYuaWRfdG9fb2JqID0geycwJzogKE5vbmUsICgpKX0KICAgICAgICAgc2VsZi5pZF90b19yZWZjb3VudCA9IHt9CiAgICAgICAgIHNlbGYubXV0ZXggPSB0aHJlYWRpbmcuUkxvY2soKQogICAgICAgICBzZWxmLnN0b3AgPSAwCkBAIC0yOTgsNyArMzI0LDcgQEAKICAgICAgICAgICAgIGtleXMgPSBzZWxmLmlkX3RvX29iai5rZXlzKCkKICAgICAgICAgICAgIGtleXMuc29ydCgpCiAgICAgICAgICAgICBmb3IgaWRlbnQgaW4ga2V5czoKLSAgICAgICAgICAgICAgICBpZiBpZGVudCAhPSAwOgorICAgICAgICAgICAgICAgIGlmIGlkZW50ICE9ICcwJzoKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAlczogICAgICAgcmVmY291bnQ9JXNcbiAgICAlcycgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZGVudCwgc2VsZi5pZF90b19yZWZjb3VudFtpZGVudF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLmlkX3RvX29ialtpZGVudF1bMF0pWzo3NV0pKQpAQCAtMzEwLDcgKzMzNiw3IEBACiAgICAgICAgICcnJwogICAgICAgICBOdW1iZXIgb2Ygc2hhcmVkIG9iamVjdHMKICAgICAgICAgJycnCi0gICAgICAgIHJldHVybiBsZW4oc2VsZi5pZF90b19vYmopIC0gMSAgICAgICMgZG9uJ3QgY291bnQgaWRlbnQ9MAorICAgICAgICByZXR1cm4gbGVuKHNlbGYuaWRfdG9fb2JqKSAtIDEgICAgICAjIGRvbid0IGNvdW50IGlkZW50PScwJwogCiAgICAgZGVmIHNodXRkb3duKHNlbGYsIGMpOgogICAgICAgICAnJycKQEAgLTQ3NSwxMiArNTAxLDE1IEBACiAgICAgICAgIGRpc3BhdGNoKGNvbm4sIE5vbmUsICdkdW1teScpCiAgICAgICAgIHNlbGYuX3N0YXRlLnZhbHVlID0gU3RhdGUuU1RBUlRFRAogCi0gICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgIGRlZiBzdGFydChzZWxmLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6CiAgICAgICAgICcnJwogICAgICAgICBTcGF3biBhIHNlcnZlciBwcm9jZXNzIGZvciB0aGlzIG1hbmFnZXIgb2JqZWN0CiAgICAgICAgICcnJwogICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGUudmFsdWUgPT0gU3RhdGUuSU5JVElBTAogCisgICAgICAgIGlmIGluaXRpYWxpemVyIGlzIG5vdCBOb25lIGFuZCBub3QgaGFzYXR0cihpbml0aWFsaXplciwgJ19fY2FsbF9fJyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2luaXRpYWxpemVyIG11c3QgYmUgYSBjYWxsYWJsZScpCisKICAgICAgICAgIyBwaXBlIG92ZXIgd2hpY2ggd2Ugd2lsbCByZXRyaWV2ZSBhZGRyZXNzIG9mIHNlcnZlcgogICAgICAgICByZWFkZXIsIHdyaXRlciA9IGNvbm5lY3Rpb24uUGlwZShkdXBsZXg9RmFsc2UpCiAKQEAgLTQ4OCw3ICs1MTcsNyBAQAogICAgICAgICBzZWxmLl9wcm9jZXNzID0gUHJvY2VzcygKICAgICAgICAgICAgIHRhcmdldD10eXBlKHNlbGYpLl9ydW5fc2VydmVyLAogICAgICAgICAgICAgYXJncz0oc2VsZi5fcmVnaXN0cnksIHNlbGYuX2FkZHJlc3MsIHNlbGYuX2F1dGhrZXksCi0gICAgICAgICAgICAgICAgICBzZWxmLl9zZXJpYWxpemVyLCB3cml0ZXIpLAorICAgICAgICAgICAgICAgICAgc2VsZi5fc2VyaWFsaXplciwgd3JpdGVyLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpLAogICAgICAgICAgICAgKQogICAgICAgICBpZGVudCA9ICc6Jy5qb2luKHN0cihpKSBmb3IgaSBpbiBzZWxmLl9wcm9jZXNzLl9pZGVudGl0eSkKICAgICAgICAgc2VsZi5fcHJvY2Vzcy5uYW1lID0gdHlwZShzZWxmKS5fX25hbWVfXyAgKyAnLScgKyBpZGVudApAQCAtNTA5LDEwICs1MzgsMTQgQEAKICAgICAgICAgICAgICkKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfcnVuX3NlcnZlcihjbHMsIHJlZ2lzdHJ5LCBhZGRyZXNzLCBhdXRoa2V5LCBzZXJpYWxpemVyLCB3cml0ZXIpOgorICAgIGRlZiBfcnVuX3NlcnZlcihjbHMsIHJlZ2lzdHJ5LCBhZGRyZXNzLCBhdXRoa2V5LCBzZXJpYWxpemVyLCB3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpKToKICAgICAgICAgJycnCiAgICAgICAgIENyZWF0ZSBhIHNlcnZlciwgcmVwb3J0IGl0cyBhZGRyZXNzIGFuZCBydW4gaXQKICAgICAgICAgJycnCisgICAgICAgIGlmIGluaXRpYWxpemVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5pdGlhbGl6ZXIoKmluaXRhcmdzKQorCiAgICAgICAgICMgY3JlYXRlIHNlcnZlcgogICAgICAgICBzZXJ2ZXIgPSBjbHMuX1NlcnZlcihyZWdpc3RyeSwgYWRkcmVzcywgYXV0aGtleSwgc2VyaWFsaXplcikKIApkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CmluZGV4IDlkYTI3ZDQuLjFmMzY2ZjAgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKQEAgLTMsNyArMywzMyBAQAogIwogIyBtdWx0aXByb2Nlc3NpbmcvcG9vbC5weQogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCwgUiBPdWRrZXJrIC0tLSBzZWUgQ09QWUlORy50eHQKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyaworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCisjICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KICMKIAogX19hbGxfXyA9IFsnUG9vbCddCkBAIC00Miw3ICs2OCw4IEBACiAjIENvZGUgcnVuIGJ5IHdvcmtlciBwcm9jZXNzZXMKICMKIAotZGVmIHdvcmtlcihpbnF1ZXVlLCBvdXRxdWV1ZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCkpOgorZGVmIHdvcmtlcihpbnF1ZXVlLCBvdXRxdWV1ZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksIG1heHRhc2tzPU5vbmUpOgorICAgIGFzc2VydCBtYXh0YXNrcyBpcyBOb25lIG9yICh0eXBlKG1heHRhc2tzKSA9PSBpbnQgYW5kIG1heHRhc2tzID4gMCkKICAgICBwdXQgPSBvdXRxdWV1ZS5wdXQKICAgICBnZXQgPSBpbnF1ZXVlLmdldAogICAgIGlmIGhhc2F0dHIoaW5xdWV1ZSwgJ193cml0ZXInKToKQEAgLTUyLDcgKzc5LDggQEAKICAgICBpZiBpbml0aWFsaXplciBpcyBub3QgTm9uZToKICAgICAgICAgaW5pdGlhbGl6ZXIoKmluaXRhcmdzKQogCi0gICAgd2hpbGUgMToKKyAgICBjb21wbGV0ZWQgPSAwCisgICAgd2hpbGUgbWF4dGFza3MgaXMgTm9uZSBvciAobWF4dGFza3MgYW5kIGNvbXBsZXRlZCA8IG1heHRhc2tzKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGFzayA9IGdldCgpCiAgICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIElPRXJyb3IpOgpAQCAtNjksNiArOTcsOCBAQAogICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgogICAgICAgICAgICAgcmVzdWx0ID0gKEZhbHNlLCBlKQogICAgICAgICBwdXQoKGpvYiwgaSwgcmVzdWx0KSkKKyAgICAgICAgY29tcGxldGVkICs9IDEKKyAgICBkZWJ1Zygnd29ya2VyIGV4aXRpbmcgYWZ0ZXIgJWQgdGFza3MnICUgY29tcGxldGVkKQogCiAjCiAjIENsYXNzIHJlcHJlc2VudGluZyBhIHByb2Nlc3MgcG9vbApAQCAtODAsMTEgKzExMCwxNSBAQAogICAgICcnJwogICAgIFByb2Nlc3MgPSBQcm9jZXNzCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLAorICAgICAgICAgICAgICAgICBtYXh0YXNrc3BlcmNoaWxkPU5vbmUpOgogICAgICAgICBzZWxmLl9zZXR1cF9xdWV1ZXMoKQogICAgICAgICBzZWxmLl90YXNrcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHNlbGYuX2NhY2hlID0ge30KICAgICAgICAgc2VsZi5fc3RhdGUgPSBSVU4KKyAgICAgICAgc2VsZi5fbWF4dGFza3NwZXJjaGlsZCA9IG1heHRhc2tzcGVyY2hpbGQKKyAgICAgICAgc2VsZi5faW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcgorICAgICAgICBzZWxmLl9pbml0YXJncyA9IGluaXRhcmdzCiAKICAgICAgICAgaWYgcHJvY2Vzc2VzIGlzIE5vbmU6CiAgICAgICAgICAgICB0cnk6CkBAIC05MiwxNiArMTI2LDIxIEBACiAgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKICAgICAgICAgICAgICAgICBwcm9jZXNzZXMgPSAxCiAKKyAgICAgICAgaWYgaW5pdGlhbGl6ZXIgaXMgbm90IE5vbmUgYW5kIG5vdCBoYXNhdHRyKGluaXRpYWxpemVyLCAnX19jYWxsX18nKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignaW5pdGlhbGl6ZXIgbXVzdCBiZSBhIGNhbGxhYmxlJykKKworICAgICAgICBzZWxmLl9wcm9jZXNzZXMgPSBwcm9jZXNzZXMKICAgICAgICAgc2VsZi5fcG9vbCA9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKHByb2Nlc3Nlcyk6Ci0gICAgICAgICAgICB3ID0gc2VsZi5Qcm9jZXNzKAotICAgICAgICAgICAgICAgIHRhcmdldD13b3JrZXIsCi0gICAgICAgICAgICAgICAgYXJncz0oc2VsZi5faW5xdWV1ZSwgc2VsZi5fb3V0cXVldWUsIGluaXRpYWxpemVyLCBpbml0YXJncykKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBzZWxmLl9wb29sLmFwcGVuZCh3KQotICAgICAgICAgICAgdy5uYW1lID0gdy5uYW1lLnJlcGxhY2UoJ1Byb2Nlc3MnLCAnUG9vbFdvcmtlcicpCi0gICAgICAgICAgICB3LmRhZW1vbiA9IFRydWUKLSAgICAgICAgICAgIHcuc3RhcnQoKQorICAgICAgICBzZWxmLl9yZXBvcHVsYXRlX3Bvb2woKQorCisgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyID0gdGhyZWFkaW5nLlRocmVhZCgKKyAgICAgICAgICAgIHRhcmdldD1Qb29sLl9oYW5kbGVfd29ya2VycywKKyAgICAgICAgICAgIGFyZ3M9KHNlbGYsICkKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuZGFlbW9uID0gVHJ1ZQorICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBSVU4KKyAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuc3RhcnQoKQorCiAKICAgICAgICAgc2VsZi5fdGFza19oYW5kbGVyID0gdGhyZWFkaW5nLlRocmVhZCgKICAgICAgICAgICAgIHRhcmdldD1Qb29sLl9oYW5kbGVfdGFza3MsCkBAIC0xMjIsMTAgKzE2MSw0OCBAQAogICAgICAgICBzZWxmLl90ZXJtaW5hdGUgPSBGaW5hbGl6ZSgKICAgICAgICAgICAgIHNlbGYsIHNlbGYuX3Rlcm1pbmF0ZV9wb29sLAogICAgICAgICAgICAgYXJncz0oc2VsZi5fdGFza3F1ZXVlLCBzZWxmLl9pbnF1ZXVlLCBzZWxmLl9vdXRxdWV1ZSwgc2VsZi5fcG9vbCwKLSAgICAgICAgICAgICAgICAgIHNlbGYuX3Rhc2tfaGFuZGxlciwgc2VsZi5fcmVzdWx0X2hhbmRsZXIsIHNlbGYuX2NhY2hlKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLCBzZWxmLl90YXNrX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRfaGFuZGxlciwgc2VsZi5fY2FjaGUpLAogICAgICAgICAgICAgZXhpdHByaW9yaXR5PTE1CiAgICAgICAgICAgICApCiAKKyAgICBkZWYgX2pvaW5fZXhpdGVkX3dvcmtlcnMoc2VsZik6CisgICAgICAgICIiIkNsZWFudXAgYWZ0ZXIgYW55IHdvcmtlciBwcm9jZXNzZXMgd2hpY2ggaGF2ZSBleGl0ZWQgZHVlIHRvIHJlYWNoaW5nCisgICAgICAgIHRoZWlyIHNwZWNpZmllZCBsaWZldGltZS4gIFJldHVybnMgVHJ1ZSBpZiBhbnkgd29ya2VycyB3ZXJlIGNsZWFuZWQgdXAuCisgICAgICAgICIiIgorICAgICAgICBjbGVhbmVkID0gRmFsc2UKKyAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYuX3Bvb2wpKSk6CisgICAgICAgICAgICB3b3JrZXIgPSBzZWxmLl9wb29sW2ldCisgICAgICAgICAgICBpZiB3b3JrZXIuZXhpdGNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyB3b3JrZXIgZXhpdGVkCisgICAgICAgICAgICAgICAgZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBpKQorICAgICAgICAgICAgICAgIHdvcmtlci5qb2luKCkKKyAgICAgICAgICAgICAgICBjbGVhbmVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9wb29sW2ldCisgICAgICAgIHJldHVybiBjbGVhbmVkCisKKyAgICBkZWYgX3JlcG9wdWxhdGVfcG9vbChzZWxmKToKKyAgICAgICAgIiIiQnJpbmcgdGhlIG51bWJlciBvZiBwb29sIHByb2Nlc3NlcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciwKKyAgICAgICAgZm9yIHVzZSBhZnRlciByZWFwaW5nIHdvcmtlcnMgd2hpY2ggaGF2ZSBleGl0ZWQuCisgICAgICAgICIiIgorICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLl9wcm9jZXNzZXMgLSBsZW4oc2VsZi5fcG9vbCkpOgorICAgICAgICAgICAgdyA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9d29ya2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShzZWxmLl9pbnF1ZXVlLCBzZWxmLl9vdXRxdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5pdGlhbGl6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2luaXRhcmdzLCBzZWxmLl9tYXh0YXNrc3BlcmNoaWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuX3Bvb2wuYXBwZW5kKHcpCisgICAgICAgICAgICB3Lm5hbWUgPSB3Lm5hbWUucmVwbGFjZSgnUHJvY2VzcycsICdQb29sV29ya2VyJykKKyAgICAgICAgICAgIHcuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgdy5zdGFydCgpCisgICAgICAgICAgICBkZWJ1ZygnYWRkZWQgd29ya2VyJykKKworICAgIGRlZiBfbWFpbnRhaW5fcG9vbChzZWxmKToKKyAgICAgICAgIiIiQ2xlYW4gdXAgYW55IGV4aXRlZCB3b3JrZXJzIGFuZCBzdGFydCByZXBsYWNlbWVudHMgZm9yIHRoZW0uCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9qb2luX2V4aXRlZF93b3JrZXJzKCk6CisgICAgICAgICAgICBzZWxmLl9yZXBvcHVsYXRlX3Bvb2woKQorCiAgICAgZGVmIF9zZXR1cF9xdWV1ZXMoc2VsZik6CiAgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgU2ltcGxlUXVldWUKICAgICAgICAgc2VsZi5faW5xdWV1ZSA9IFNpbXBsZVF1ZXVlKCkKQEAgLTIwNCw2ICsyODEsOCBAQAogICAgICAgICAgICAgY2h1bmtzaXplLCBleHRyYSA9IGRpdm1vZChsZW4oaXRlcmFibGUpLCBsZW4oc2VsZi5fcG9vbCkgKiA0KQogICAgICAgICAgICAgaWYgZXh0cmE6CiAgICAgICAgICAgICAgICAgY2h1bmtzaXplICs9IDEKKyAgICAgICAgaWYgbGVuKGl0ZXJhYmxlKSA9PSAwOgorICAgICAgICAgICAgY2h1bmtzaXplID0gMAogCiAgICAgICAgIHRhc2tfYmF0Y2hlcyA9IFBvb2wuX2dldF90YXNrcyhmdW5jLCBpdGVyYWJsZSwgY2h1bmtzaXplKQogICAgICAgICByZXN1bHQgPSBNYXBSZXN1bHQoc2VsZi5fY2FjaGUsIGNodW5rc2l6ZSwgbGVuKGl0ZXJhYmxlKSwgY2FsbGJhY2spCkBAIC0yMTIsNiArMjkxLDEzIEBACiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2hhbmRsZV93b3JrZXJzKHBvb2wpOgorICAgICAgICB3aGlsZSBwb29sLl93b3JrZXJfaGFuZGxlci5fc3RhdGUgPT0gUlVOIGFuZCBwb29sLl9zdGF0ZSA9PSBSVU46CisgICAgICAgICAgICBwb29sLl9tYWludGFpbl9wb29sKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICBkZWJ1Zygnd29ya2VyIGhhbmRsZXIgZXhpdGluZycpCisKKyAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfdGFza3ModGFza3F1ZXVlLCBwdXQsIG91dHF1ZXVlLCBwb29sKToKICAgICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkKIApAQCAtMzI2LDE2ICs0MTIsMTkgQEAKICAgICAgICAgZGVidWcoJ2Nsb3NpbmcgcG9vbCcpCiAgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IFJVTjoKICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gQ0xPU0UKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9IENMT1NFCiAgICAgICAgICAgICBzZWxmLl90YXNrcXVldWUucHV0KE5vbmUpCiAKICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgogICAgICAgICBkZWJ1ZygndGVybWluYXRpbmcgcG9vbCcpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gVEVSTUlOQVRFCisgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICBzZWxmLl90ZXJtaW5hdGUoKQogCiAgICAgZGVmIGpvaW4oc2VsZik6CiAgICAgICAgIGRlYnVnKCdqb2luaW5nIHBvb2wnKQogICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGUgaW4gKENMT1NFLCBURVJNSU5BVEUpCisgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLmpvaW4oKQogICAgICAgICBzZWxmLl90YXNrX2hhbmRsZXIuam9pbigpCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9oYW5kbGVyLmpvaW4oKQogICAgICAgICBmb3IgcCBpbiBzZWxmLl9wb29sOgpAQCAtMzUyLDEwICs0NDEsMTEgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBfdGVybWluYXRlX3Bvb2woY2xzLCB0YXNrcXVldWUsIGlucXVldWUsIG91dHF1ZXVlLCBwb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgdGFza19oYW5kbGVyLCByZXN1bHRfaGFuZGxlciwgY2FjaGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2hhbmRsZXIsIHRhc2tfaGFuZGxlciwgcmVzdWx0X2hhbmRsZXIsIGNhY2hlKToKICAgICAgICAgIyB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gb25seSBiZSBjYWxsZWQgb25jZQogICAgICAgICBkZWJ1ZygnZmluYWxpemluZyBwb29sJykKIAorICAgICAgICB3b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgdGFza19oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICB0YXNrcXVldWUucHV0KE5vbmUpICAgICAgICAgICAgICAgICAjIHNlbnRpbmVsCiAKQEAgLTM2NywxMCArNDU3LDEyIEBACiAgICAgICAgIHJlc3VsdF9oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICBvdXRxdWV1ZS5wdXQoTm9uZSkgICAgICAgICAgICAgICAgICAjIHNlbnRpbmVsCiAKKyAgICAgICAgIyBUZXJtaW5hdGUgd29ya2VycyB3aGljaCBoYXZlbid0IGFscmVhZHkgZmluaXNoZWQuCiAgICAgICAgIGlmIHBvb2wgYW5kIGhhc2F0dHIocG9vbFswXSwgJ3Rlcm1pbmF0ZScpOgogICAgICAgICAgICAgZGVidWcoJ3Rlcm1pbmF0aW5nIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKLSAgICAgICAgICAgICAgICBwLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICAgICAgaWYgcC5leGl0Y29kZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBwLnRlcm1pbmF0ZSgpCiAKICAgICAgICAgZGVidWcoJ2pvaW5pbmcgdGFzayBoYW5kbGVyJykKICAgICAgICAgdGFza19oYW5kbGVyLmpvaW4oMWUxMDApCkBAIC0zODEsNyArNDczLDEwIEBACiAgICAgICAgIGlmIHBvb2wgYW5kIGhhc2F0dHIocG9vbFswXSwgJ3Rlcm1pbmF0ZScpOgogICAgICAgICAgICAgZGVidWcoJ2pvaW5pbmcgcG9vbCB3b3JrZXJzJykKICAgICAgICAgICAgIGZvciBwIGluIHBvb2w6Ci0gICAgICAgICAgICAgICAgcC5qb2luKCkKKyAgICAgICAgICAgICAgICBpZiBwLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgICMgd29ya2VyIGhhcyBub3QgeWV0IGV4aXRlZAorICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIHAucGlkKQorICAgICAgICAgICAgICAgICAgICBwLmpvaW4oKQogCiAjCiAjIENsYXNzIHdob3NlIGluc3RhbmNlcyBhcmUgcmV0dXJuZWQgYnkgYFBvb2wuYXBwbHlfYXN5bmMoKWAKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQppbmRleCA1NjcxOWQ5Li4wNjk3ZTc0IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CkBAIC0zLDcgKzMsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKICMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyayAtLS0gc2VlIENPUFlJTkcudHh0CisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQorIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCiAjCiAKIF9fYWxsX18gPSBbJ1Byb2Nlc3MnLCAnY3VycmVudF9wcm9jZXNzJywgJ2FjdGl2ZV9jaGlsZHJlbiddCkBAIC0xNzksNyArMjA1LDcgQEAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaWRlbnQoc2VsZik6CiAgICAgICAgICcnJwotICAgICAgICBSZXR1cm4gaW5kZW50aWZpZXIgKFBJRCkgb2YgcHJvY2VzcyBvciBgTm9uZWAgaWYgaXQgaGFzIHlldCB0byBzdGFydAorICAgICAgICBSZXR1cm4gaWRlbnRpZmllciAoUElEKSBvZiBwcm9jZXNzIG9yIGBOb25lYCBpZiBpdCBoYXMgeWV0IHRvIHN0YXJ0CiAgICAgICAgICcnJwogICAgICAgICBpZiBzZWxmIGlzIF9jdXJyZW50X3Byb2Nlc3M6CiAgICAgICAgICAgICByZXR1cm4gb3MuZ2V0cGlkKCkKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKaW5kZXggZWEyNzk5MS4uODU4NDQwOCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKQEAgLTMsNyArMywzMyBAQAogIwogIyBtdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CiAjCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsgLS0tIHNlZSBDT1BZSU5HLnR4dAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBfX2FsbF9fID0gWydRdWV1ZScsICdTaW1wbGVRdWV1ZScsICdKb2luYWJsZVF1ZXVlJ10KZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKaW5kZXggNjBlNzE1MS4uNmU1ZTViYyAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKQEAgLTQsNyArNCwzMyBAQAogIwogIyBtdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CiAjCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsgLS0tIHNlZSBDT1BZSU5HLnR4dAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBfX2FsbF9fID0gW10KZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKaW5kZXggNzZiNWU5NC4uYjU2OWZiMiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKQEAgLTMsNyArMywzMyBAQAogIwogIyBtdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5CiAjCi0jIENvcHlyaWdodCAoYykgMjAwNy0yMDA4LCBSIE91ZGtlcmsgLS0tIHNlZSBDT1BZSU5HLnR4dAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQppbmRleCBkYWNmNDVhLi40YjA3N2U1IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKQEAgLTMsNyArMywzMyBAQAogIwogIyBtdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKICMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyayAtLS0gc2VlIENPUFlJTkcudHh0CisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQorIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCiAjCiAKIF9fYWxsX18gPSBbCkBAIC01OCw4ICs4NCwxMiBAQAogICAgIGRlZiBfbWFrZV9tZXRob2RzKHNlbGYpOgogICAgICAgICBzZWxmLmFjcXVpcmUgPSBzZWxmLl9zZW1sb2NrLmFjcXVpcmUKICAgICAgICAgc2VsZi5yZWxlYXNlID0gc2VsZi5fc2VtbG9jay5yZWxlYXNlCi0gICAgICAgIHNlbGYuX19lbnRlcl9fID0gc2VsZi5fc2VtbG9jay5fX2VudGVyX18KLSAgICAgICAgc2VsZi5fX2V4aXRfXyA9IHNlbGYuX3NlbWxvY2suX19leGl0X18KKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZW1sb2NrLl9fZW50ZXJfXygpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2VtbG9jay5fX2V4aXRfXygqYXJncykKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CiAgICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQpAQCAtMTgxLDExICsyMTEsMTUgQEAKICAgICAgICAgIHNlbGYuX3dva2VuX2NvdW50LCBzZWxmLl93YWl0X3NlbWFwaG9yZSkgPSBzdGF0ZQogICAgICAgICBzZWxmLl9tYWtlX21ldGhvZHMoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2suX19lbnRlcl9fKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLl9sb2NrLl9fZXhpdF9fKCphcmdzKQorCiAgICAgZGVmIF9tYWtlX21ldGhvZHMoc2VsZik6CiAgICAgICAgIHNlbGYuYWNxdWlyZSA9IHNlbGYuX2xvY2suYWNxdWlyZQogICAgICAgICBzZWxmLnJlbGVhc2UgPSBzZWxmLl9sb2NrLnJlbGVhc2UKLSAgICAgICAgc2VsZi5fX2VudGVyX18gPSBzZWxmLl9sb2NrLl9fZW50ZXJfXwotICAgICAgICBzZWxmLl9fZXhpdF9fID0gc2VsZi5fbG9jay5fX2V4aXRfXwogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0zMDEsNSArMzM1LDEwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5fZmxhZy5yZWxlYXNlKCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5fY29uZC53YWl0KHRpbWVvdXQpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZsYWcuYWNxdWlyZShGYWxzZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fZmxhZy5yZWxlYXNlKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9jb25kLnJlbGVhc2UoKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CmluZGV4IDYzMmFkYjEuLmM2NWRkOTkgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKQEAgLTMsNyArMywzMyBAQAogIwogIyBtdWx0aXByb2Nlc3NpbmcvdXRpbC5weQogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrIC0tLSBzZWUgQ09QWUlORy50eHQKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyaworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCisjICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KICMKIAogaW1wb3J0IGl0ZXJ0b29scwpkaWZmIC0tZ2l0IGEvTGliL211dGV4LnB5IGIvTGliL211dGV4LnB5CmluZGV4IDllNmI4ZDQuLmY4YWNiYTQgMTAwNjQ0Ci0tLSBhL0xpYi9tdXRleC5weQorKysgYi9MaWIvbXV0ZXgucHkKQEAgLTIwLDcgKzIwLDcgQEAKIGNsYXNzIG11dGV4OgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IG11dGV4IC0tIGluaXRpYWxseSB1bmxvY2tlZC4iIiIKLSAgICAgICAgc2VsZi5sb2NrZWQgPSAwCisgICAgICAgIHNlbGYubG9ja2VkID0gRmFsc2UKICAgICAgICAgc2VsZi5xdWV1ZSA9IGRlcXVlKCkKIAogICAgIGRlZiB0ZXN0KHNlbGYpOgpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICAiIiJBdG9taWMgdGVzdC1hbmQtc2V0IC0tIGdyYWIgdGhlIGxvY2sgaWYgaXQgaXMgbm90IHNldCwKICAgICAgICAgcmV0dXJuIFRydWUgaWYgaXQgc3VjY2VlZGVkLiIiIgogICAgICAgICBpZiBub3Qgc2VsZi5sb2NrZWQ6Ci0gICAgICAgICAgICBzZWxmLmxvY2tlZCA9IDEKKyAgICAgICAgICAgIHNlbGYubG9ja2VkID0gVHJ1ZQogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtNTIsNCArNTIsNCBAQAogICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3VtZW50ID0gc2VsZi5xdWV1ZS5wb3BsZWZ0KCkKICAgICAgICAgICAgIGZ1bmN0aW9uKGFyZ3VtZW50KQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5sb2NrZWQgPSAwCisgICAgICAgICAgICBzZWxmLmxvY2tlZCA9IEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvbmV0cmMucHkgYi9MaWIvbmV0cmMucHkKaW5kZXggNTQ5M2Q3Ny4uNGNhZWI5NiAxMDA2NDQKLS0tIGEvTGliL25ldHJjLnB5CisrKyBiL0xpYi9uZXRyYy5weQpAQCAtMjYsMTYgKzI2LDIzIEBACiAgICAgICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydIT01FJ10sICIubmV0cmMiKQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkNvdWxkIG5vdCBmaW5kIC5uZXRyYzogJEhPTUUgaXMgbm90IHNldCIpCi0gICAgICAgIGZwID0gb3BlbihmaWxlKQogICAgICAgICBzZWxmLmhvc3RzID0ge30KICAgICAgICAgc2VsZi5tYWNyb3MgPSB7fQorICAgICAgICB3aXRoIG9wZW4oZmlsZSkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLl9wYXJzZShmaWxlLCBmcCkKKworICAgIGRlZiBfcGFyc2Uoc2VsZiwgZmlsZSwgZnApOgogICAgICAgICBsZXhlciA9IHNobGV4LnNobGV4KGZwKQogICAgICAgICBsZXhlci53b3JkY2hhcnMgKz0gciIiIiEiIyQlJicoKSorLC0uLzo7PD0+P0BbXF1eX2B7fH1+IiIiCisgICAgICAgIGxleGVyLmNvbW1lbnRlcnMgPSBsZXhlci5jb21tZW50ZXJzLnJlcGxhY2UoJyMnLCAnJykKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICMgTG9vayBmb3IgYSBtYWNoaW5lLCBkZWZhdWx0LCBvciBtYWNkZWYgdG9wLWxldmVsIGtleXdvcmQKICAgICAgICAgICAgIHRvcGxldmVsID0gdHQgPSBsZXhlci5nZXRfdG9rZW4oKQogICAgICAgICAgICAgaWYgbm90IHR0OgogICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIHR0WzBdID09ICcjJzoKKyAgICAgICAgICAgICAgICBmcC5yZWFkbGluZSgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZWxpZiB0dCA9PSAnbWFjaGluZSc6CiAgICAgICAgICAgICAgICAgZW50cnluYW1lID0gbGV4ZXIuZ2V0X3Rva2VuKCkKICAgICAgICAgICAgIGVsaWYgdHQgPT0gJ2RlZmF1bHQnOgpkaWZmIC0tZ2l0IGEvTGliL25ldy5weSBiL0xpYi9uZXcucHkKaW5kZXggZTVmOTY0Zi4uMmE2ZTYzMSAxMDA2NDQKLS0tIGEvTGliL25ldy5weQorKysgYi9MaWIvbmV3LnB5CkBAIC0xNCw4ICsxNCw0IEBACiBmcm9tIHR5cGVzIGltcG9ydCBNZXRob2RUeXBlIGFzIGluc3RhbmNlbWV0aG9kCiBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlIGFzIG1vZHVsZQogCi0jIENvZGVUeXBlIGlzIG5vdCBhY2Nlc3NpYmxlIGluIHJlc3RyaWN0ZWQgZXhlY3V0aW9uIG1vZGUKLXRyeToKLSAgICBmcm9tIHR5cGVzIGltcG9ydCBDb2RlVHlwZSBhcyBjb2RlCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcworZnJvbSB0eXBlcyBpbXBvcnQgQ29kZVR5cGUgYXMgY29kZQpkaWZmIC0tZ2l0IGEvTGliL250cGF0aC5weSBiL0xpYi9udHBhdGgucHkKaW5kZXggMTFhMGEzZS4uMTQ5MTFkMCAxMDA2NDQKLS0tIGEvTGliL250cGF0aC5weQorKysgYi9MaWIvbnRwYXRoLnB5CkBAIC00ODMsMjcgKzQ4MywzOCBAQAogc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMgPSAoaGFzYXR0cihzeXMsICJnZXR3aW5kb3dzdmVyc2lvbiIpIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmdldHdpbmRvd3N2ZXJzaW9uKClbM10gPj0gMikKIAorZGVmIF9hYnNwYXRoX3NwbGl0KHBhdGgpOgorICAgIGFicyA9IGFic3BhdGgobm9ybXBhdGgocGF0aCkpCisgICAgcHJlZml4LCByZXN0ID0gc3BsaXR1bmMoYWJzKQorICAgIGlzX3VuYyA9IGJvb2wocHJlZml4KQorICAgIGlmIG5vdCBpc191bmM6CisgICAgICAgIHByZWZpeCwgcmVzdCA9IHNwbGl0ZHJpdmUoYWJzKQorICAgIHJldHVybiBpc191bmMsIHByZWZpeCwgW3ggZm9yIHggaW4gcmVzdC5zcGxpdChzZXApIGlmIHhdCisKIGRlZiByZWxwYXRoKHBhdGgsIHN0YXJ0PWN1cmRpcik6CiAgICAgIiIiUmV0dXJuIGEgcmVsYXRpdmUgdmVyc2lvbiBvZiBhIHBhdGgiIiIKIAogICAgIGlmIG5vdCBwYXRoOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBwYXRoIHNwZWNpZmllZCIpCi0gICAgc3RhcnRfbGlzdCA9IGFic3BhdGgoc3RhcnQpLnNwbGl0KHNlcCkKLSAgICBwYXRoX2xpc3QgPSBhYnNwYXRoKHBhdGgpLnNwbGl0KHNlcCkKLSAgICBpZiBzdGFydF9saXN0WzBdLmxvd2VyKCkgIT0gcGF0aF9saXN0WzBdLmxvd2VyKCk6Ci0gICAgICAgIHVuY19wYXRoLCByZXN0ID0gc3BsaXR1bmMocGF0aCkKLSAgICAgICAgdW5jX3N0YXJ0LCByZXN0ID0gc3BsaXR1bmMoc3RhcnQpCi0gICAgICAgIGlmIGJvb2wodW5jX3BhdGgpIF4gYm9vbCh1bmNfc3RhcnQpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IG1peCBVTkMgYW5kIG5vbi1VTkMgcGF0aHMgKCVzIGFuZCAlcykiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGF0aCwgc3RhcnQpKQorCisgICAgc3RhcnRfaXNfdW5jLCBzdGFydF9wcmVmaXgsIHN0YXJ0X2xpc3QgPSBfYWJzcGF0aF9zcGxpdChzdGFydCkKKyAgICBwYXRoX2lzX3VuYywgcGF0aF9wcmVmaXgsIHBhdGhfbGlzdCA9IF9hYnNwYXRoX3NwbGl0KHBhdGgpCisKKyAgICBpZiBwYXRoX2lzX3VuYyBeIHN0YXJ0X2lzX3VuYzoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IG1peCBVTkMgYW5kIG5vbi1VTkMgcGF0aHMgKCVzIGFuZCAlcykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXRoLCBzdGFydCkpCisgICAgaWYgcGF0aF9wcmVmaXgubG93ZXIoKSAhPSBzdGFydF9wcmVmaXgubG93ZXIoKToKKyAgICAgICAgaWYgcGF0aF9pc191bmM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwYXRoIGlzIG9uIFVOQyByb290ICVzLCBzdGFydCBvbiBVTkMgcm9vdCAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhdGhfcHJlZml4LCBzdGFydF9wcmVmaXgpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGF0aCBpcyBvbiBkcml2ZSAlcywgc3RhcnQgb24gZHJpdmUgJXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXRoX2xpc3RbMF0sIHN0YXJ0X2xpc3RbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGF0aF9wcmVmaXgsIHN0YXJ0X3ByZWZpeCkpCiAgICAgIyBXb3JrIG91dCBob3cgbXVjaCBvZiB0aGUgZmlsZXBhdGggaXMgc2hhcmVkIGJ5IHN0YXJ0IGFuZCBwYXRoLgotICAgIGZvciBpIGluIHJhbmdlKG1pbihsZW4oc3RhcnRfbGlzdCksIGxlbihwYXRoX2xpc3QpKSk6Ci0gICAgICAgIGlmIHN0YXJ0X2xpc3RbaV0ubG93ZXIoKSAhPSBwYXRoX2xpc3RbaV0ubG93ZXIoKToKKyAgICBpID0gMAorICAgIGZvciBlMSwgZTIgaW4gemlwKHN0YXJ0X2xpc3QsIHBhdGhfbGlzdCk6CisgICAgICAgIGlmIGUxLmxvd2VyKCkgIT0gZTIubG93ZXIoKToKICAgICAgICAgICAgIGJyZWFrCi0gICAgZWxzZToKICAgICAgICAgaSArPSAxCiAKICAgICByZWxfbGlzdCA9IFtwYXJkaXJdICogKGxlbihzdGFydF9saXN0KS1pKSArIHBhdGhfbGlzdFtpOl0KZGlmZiAtLWdpdCBhL0xpYi9udW1iZXJzLnB5IGIvTGliL251bWJlcnMucHkKaW5kZXggNTQwZTdkNS4uMjU5MjY0MyAxMDA2NDQKLS0tIGEvTGliL251bWJlcnMucHkKKysrIGIvTGliL251bWJlcnMucHkKQEAgLTYzLDcgKzYzLDcgQEAKIAogICAgIEBhYnN0cmFjdHByb3BlcnR5CiAgICAgZGVmIGltYWcoc2VsZik6Ci0gICAgICAgICIiIlJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCBvZiB0aGlzIG51bWJlci4KKyAgICAgICAgIiIiUmV0cmlldmUgdGhlIGltYWdpbmFyeSBjb21wb25lbnQgb2YgdGhpcyBudW1iZXIuCiAKICAgICAgICAgVGhpcyBzaG91bGQgc3ViY2xhc3MgUmVhbC4KICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvb3Bjb2RlLnB5IGIvTGliL29wY29kZS5weQppbmRleCBjZWU1MDU3Li5lNDAzMzY1IDEwMDY0NAotLS0gYS9MaWIvb3Bjb2RlLnB5CisrKyBiL0xpYi9vcGNvZGUucHkKQEAgLTU4LDcgKzU4LDYgQEAKIAogZGVmX29wKCdVTkFSWV9JTlZFUlQnLCAxNSkKIAotZGVmX29wKCdMSVNUX0FQUEVORCcsIDE4KQogZGVmX29wKCdCSU5BUllfUE9XRVInLCAxOSkKIGRlZl9vcCgnQklOQVJZX01VTFRJUExZJywgMjApCiBkZWZfb3AoJ0JJTkFSWV9ESVZJREUnLCAyMSkKQEAgLTEyOCw3ICsxMjcsNyBAQAogbmFtZV9vcCgnREVMRVRFX05BTUUnLCA5MSkgICAgICAjICIiCiBkZWZfb3AoJ1VOUEFDS19TRVFVRU5DRScsIDkyKSAgICMgTnVtYmVyIG9mIHR1cGxlIGl0ZW1zCiBqcmVsX29wKCdGT1JfSVRFUicsIDkzKQotCitkZWZfb3AoJ0xJU1RfQVBQRU5EJywgOTQpCiBuYW1lX29wKCdTVE9SRV9BVFRSJywgOTUpICAgICAgICMgSW5kZXggaW4gbmFtZSBsaXN0CiBuYW1lX29wKCdERUxFVEVfQVRUUicsIDk2KSAgICAgICMgIiIKIG5hbWVfb3AoJ1NUT1JFX0dMT0JBTCcsIDk3KSAgICAgIyAiIgpAQCAtMTM5LDE3ICsxMzgsMTkgQEAKIG5hbWVfb3AoJ0xPQURfTkFNRScsIDEwMSkgICAgICAgIyBJbmRleCBpbiBuYW1lIGxpc3QKIGRlZl9vcCgnQlVJTERfVFVQTEUnLCAxMDIpICAgICAgIyBOdW1iZXIgb2YgdHVwbGUgaXRlbXMKIGRlZl9vcCgnQlVJTERfTElTVCcsIDEwMykgICAgICAgIyBOdW1iZXIgb2YgbGlzdCBpdGVtcwotZGVmX29wKCdCVUlMRF9NQVAnLCAxMDQpICAgICAgICAjIE51bWJlciBvZiBkaWN0IGVudHJpZXMgKHVwdG8gMjU1KQotbmFtZV9vcCgnTE9BRF9BVFRSJywgMTA1KSAgICAgICAjIEluZGV4IGluIG5hbWUgbGlzdAotZGVmX29wKCdDT01QQVJFX09QJywgMTA2KSAgICAgICAjIENvbXBhcmlzb24gb3BlcmF0b3IKLWhhc2NvbXBhcmUuYXBwZW5kKDEwNikKLW5hbWVfb3AoJ0lNUE9SVF9OQU1FJywgMTA3KSAgICAgIyBJbmRleCBpbiBuYW1lIGxpc3QKLW5hbWVfb3AoJ0lNUE9SVF9GUk9NJywgMTA4KSAgICAgIyBJbmRleCBpbiBuYW1lIGxpc3QKLQorZGVmX29wKCdCVUlMRF9TRVQnLCAxMDQpICAgICAgICAjIE51bWJlciBvZiBzZXQgaXRlbXMKK2RlZl9vcCgnQlVJTERfTUFQJywgMTA1KSAgICAgICAgIyBOdW1iZXIgb2YgZGljdCBlbnRyaWVzICh1cHRvIDI1NSkKK25hbWVfb3AoJ0xPQURfQVRUUicsIDEwNikgICAgICAgIyBJbmRleCBpbiBuYW1lIGxpc3QKK2RlZl9vcCgnQ09NUEFSRV9PUCcsIDEwNykgICAgICAgIyBDb21wYXJpc29uIG9wZXJhdG9yCitoYXNjb21wYXJlLmFwcGVuZCgxMDcpCituYW1lX29wKCdJTVBPUlRfTkFNRScsIDEwOCkgICAgICMgSW5kZXggaW4gbmFtZSBsaXN0CituYW1lX29wKCdJTVBPUlRfRlJPTScsIDEwOSkgICAgICMgSW5kZXggaW4gbmFtZSBsaXN0CiBqcmVsX29wKCdKVU1QX0ZPUldBUkQnLCAxMTApICAgICMgTnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAKLWpyZWxfb3AoJ0pVTVBfSUZfRkFMU0UnLCAxMTEpICAgIyAiIgotanJlbF9vcCgnSlVNUF9JRl9UUlVFJywgMTEyKSAgICAjICIiCi1qYWJzX29wKCdKVU1QX0FCU09MVVRFJywgMTEzKSAgICMgVGFyZ2V0IGJ5dGUgb2Zmc2V0IGZyb20gYmVnaW5uaW5nIG9mIGNvZGUKK2phYnNfb3AoJ0pVTVBfSUZfRkFMU0VfT1JfUE9QJywgMTExKSAjIFRhcmdldCBieXRlIG9mZnNldCBmcm9tIGJlZ2lubmluZyBvZiBjb2RlCitqYWJzX29wKCdKVU1QX0lGX1RSVUVfT1JfUE9QJywgMTEyKSAgIyAiIgoramFic19vcCgnSlVNUF9BQlNPTFVURScsIDExMykgICAgICAgICMgIiIKK2phYnNfb3AoJ1BPUF9KVU1QX0lGX0ZBTFNFJywgMTE0KSAgICAjICIiCitqYWJzX29wKCdQT1BfSlVNUF9JRl9UUlVFJywgMTE1KSAgICAgIyAiIgogCiBuYW1lX29wKCdMT0FEX0dMT0JBTCcsIDExNikgICAgICMgSW5kZXggaW4gbmFtZSBsaXN0CiAKQEAgLTE4MCw3ICsxODEsMTIgQEAKIGRlZl9vcCgnQ0FMTF9GVU5DVElPTl9WQVInLCAxNDApICAgICAjICNhcmdzICsgKCNrd2FyZ3MgPDwgOCkKIGRlZl9vcCgnQ0FMTF9GVU5DVElPTl9LVycsIDE0MSkgICAgICAjICNhcmdzICsgKCNrd2FyZ3MgPDwgOCkKIGRlZl9vcCgnQ0FMTF9GVU5DVElPTl9WQVJfS1cnLCAxNDIpICAjICNhcmdzICsgKCNrd2FyZ3MgPDwgOCkKLWRlZl9vcCgnRVhURU5ERURfQVJHJywgMTQzKQotRVhURU5ERURfQVJHID0gMTQzCisKK2pyZWxfb3AoJ1NFVFVQX1dJVEgnLCAxNDMpCisKK2RlZl9vcCgnRVhURU5ERURfQVJHJywgMTQ1KQorRVhURU5ERURfQVJHID0gMTQ1CitkZWZfb3AoJ1NFVF9BREQnLCAxNDYpCitkZWZfb3AoJ01BUF9BREQnLCAxNDcpCiAKIGRlbCBkZWZfb3AsIG5hbWVfb3AsIGpyZWxfb3AsIGphYnNfb3AKZGlmZiAtLWdpdCBhL0xpYi9vcHRwYXJzZS5weSBiL0xpYi9vcHRwYXJzZS5weQppbmRleCBkMGQ1OTYxLi44N2Q3NzM3IDEwMDY0NAotLS0gYS9MaWIvb3B0cGFyc2UucHkKKysrIGIvTGliL29wdHBhcnNlLnB5CkBAIC04MTMsNyArODEzLDcgQEAKICAgICAgICAgICAgIHBhcnNlci5wcmludF92ZXJzaW9uKCkKICAgICAgICAgICAgIHBhcnNlci5leGl0KCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgInVua25vd24gYWN0aW9uICVyIiAlIHNlbGYuYWN0aW9uCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGFjdGlvbiAlciIgJSBzZWxmLmFjdGlvbikKIAogICAgICAgICByZXR1cm4gMQogCmRpZmYgLS1naXQgYS9MaWIvb3MucHkgYi9MaWIvb3MucHkKaW5kZXggODhhZGMxNS4uYzYxMmUxNyAxMDA2NDQKLS0tIGEvTGliL29zLnB5CisrKyBiL0xpYi9vcy5weQpAQCAtMjYzLDcgKzI2Myw3IEBACiAgICAgICAgICAgICBkaXJzLnJlbW92ZSgnQ1ZTJykgICMgZG9uJ3QgdmlzaXQgQ1ZTIGRpcmVjdG9yaWVzCiAgICAgIiIiCiAKLSAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4sIGlzZGlyLCBpc2xpbmsKKyAgICBpc2xpbmssIGpvaW4sIGlzZGlyID0gcGF0aC5pc2xpbmssIHBhdGguam9pbiwgcGF0aC5pc2RpcgogCiAgICAgIyBXZSBtYXkgbm90IGhhdmUgcmVhZCBwZXJtaXNzaW9uIGZvciB0b3AsIGluIHdoaWNoIGNhc2Ugd2UgY2FuJ3QKICAgICAjIGdldCBhIGxpc3Qgb2YgdGhlIGZpbGVzIHRoZSBkaXJlY3RvcnkgY29udGFpbnMuICBvcy5wYXRoLndhbGsKQEAgLTI4OSw5ICsyODksOSBAQAogICAgIGlmIHRvcGRvd246CiAgICAgICAgIHlpZWxkIHRvcCwgZGlycywgbm9uZGlycwogICAgIGZvciBuYW1lIGluIGRpcnM6Ci0gICAgICAgIHBhdGggPSBqb2luKHRvcCwgbmFtZSkKLSAgICAgICAgaWYgZm9sbG93bGlua3Mgb3Igbm90IGlzbGluayhwYXRoKToKLSAgICAgICAgICAgIGZvciB4IGluIHdhbGsocGF0aCwgdG9wZG93biwgb25lcnJvciwgZm9sbG93bGlua3MpOgorICAgICAgICBuZXdfcGF0aCA9IGpvaW4odG9wLCBuYW1lKQorICAgICAgICBpZiBmb2xsb3dsaW5rcyBvciBub3QgaXNsaW5rKG5ld19wYXRoKToKKyAgICAgICAgICAgIGZvciB4IGluIHdhbGsobmV3X3BhdGgsIHRvcGRvd24sIG9uZXJyb3IsIGZvbGxvd2xpbmtzKToKICAgICAgICAgICAgICAgICB5aWVsZCB4CiAgICAgaWYgbm90IHRvcGRvd246CiAgICAgICAgIHlpZWxkIHRvcCwgZGlycywgbm9uZGlycwpAQCAtNTE0LDExICs1MTQsNyBAQAogX19hbGxfXy5hcHBlbmQoImdldGVudiIpCiAKIGRlZiBfZXhpc3RzKG5hbWUpOgotICAgIHRyeToKLSAgICAgICAgZXZhbChuYW1lKQotICAgICAgICByZXR1cm4gVHJ1ZQotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBuYW1lIGluIGdsb2JhbHMoKQogCiAjIFN1cHBseSBzcGF3biooKSAocHJvYmFibHkgb25seSBmb3IgVW5peCkKIGlmIF9leGlzdHMoImZvcmsiKSBhbmQgbm90IF9leGlzdHMoInNwYXdudiIpIGFuZCBfZXhpc3RzKCJleGVjdiIpOgpAQCAtNzU2LDcgKzc1Miw3IEBACiAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCIvZGV2L3VyYW5kb20gKG9yIGVxdWl2YWxlbnQpIG5vdCBmb3VuZCIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGJzID0gYiIiCi0gICAgICAgICAgICB3aGlsZSBuIC0gbGVuKGJzKSA+PSAxOgorICAgICAgICAgICAgd2hpbGUgbiA+IGxlbihicyk6CiAgICAgICAgICAgICAgICAgYnMgKz0gcmVhZChfdXJhbmRvbWZkLCBuIC0gbGVuKGJzKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGNsb3NlKF91cmFuZG9tZmQpCmRpZmYgLS1naXQgYS9MaWIvcGRiLmRvYyBiL0xpYi9wZGIuZG9jCmluZGV4IDBkMzI4MDAuLjM3NWJlMmYgMTAwNjQ0Ci0tLSBhL0xpYi9wZGIuZG9jCisrKyBiL0xpYi9wZGIuZG9jCkBAIC0xMzgsOCArMTM4LDggQEAKIHJ1biBbYXJncy4uLl0KICAgICAgICAgUmVzdGFydCB0aGUgZGVidWdnZWQgcHl0aG9uIHByb2dyYW0uIElmIGEgc3RyaW5nIGlzIHN1cHBsaWVkIGl0IGlzCiAgICAgICAgIHNwbGl0dGVkIHdpdGggInNobGV4IiwgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3IHN5cy5hcmd2LgotCUhpc3RvcnksIGJyZWFrcG9pbnRzLCBhY3Rpb25zIGFuZCBkZWJ1Z2dlciBvcHRpb25zIGFyZSBwcmVzZXJ2ZWQuCi0JInJlc3RhcnQiIGlzIGFuIGFsaWFzIGZvciAicnVuIi4KKyAgICAgICAgSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnMgYXJlIHByZXNlcnZlZC4KKyAgICAgICAgInJlc3RhcnQiIGlzIGFuIGFsaWFzIGZvciAicnVuIi4KIAogYyhvbnQoaW51ZSkpCiAgICAgICAgIENvbnRpbnVlIGV4ZWN1dGlvbiwgb25seSBzdG9wIHdoZW4gYSBicmVha3BvaW50IGlzIGVuY291bnRlcmVkLgpkaWZmIC0tZ2l0IGEvTGliL3BkYi5weSBiL0xpYi9wZGIucHkKaW5kZXggNjgzYWJiOS4uYTYxMDlkNCAxMDA3NTUKLS0tIGEvTGliL3BkYi5weQorKysgYi9MaWIvcGRiLnB5CkBAIC01OCw4ICs1OCw4IEBACiAKIGNsYXNzIFBkYihiZGIuQmRiLCBjbWQuQ21kKToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21wbGV0ZWtleT0ndGFiJywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUpOgotICAgICAgICBiZGIuQmRiLl9faW5pdF9fKHNlbGYpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbXBsZXRla2V5PSd0YWInLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lKToKKyAgICAgICAgYmRiLkJkYi5fX2luaXRfXyhzZWxmLCBza2lwPXNraXApCiAgICAgICAgIGNtZC5DbWQuX19pbml0X18oc2VsZiwgY29tcGxldGVrZXksIHN0ZGluLCBzdGRvdXQpCiAgICAgICAgIGlmIHN0ZG91dDoKICAgICAgICAgICAgIHNlbGYudXNlX3Jhd2lucHV0ID0gMApAQCAtOTUsMTAgKzk1LDE0IEBACiAgICAgICAgICAgICByY0ZpbGUuY2xvc2UoKQogCiAgICAgICAgIHNlbGYuY29tbWFuZHMgPSB7fSAjIGFzc29jaWF0ZXMgYSBjb21tYW5kIGxpc3QgdG8gYnJlYWtwb2ludCBudW1iZXJzCi0gICAgICAgIHNlbGYuY29tbWFuZHNfZG9wcm9tcHQgPSB7fSAjIGZvciBlYWNoIGJwIG51bSwgdGVsbHMgaWYgdGhlIHByb21wdCBtdXN0IGJlIGRpc3AuIGFmdGVyIGV4ZWNpbmcgdGhlIGNtZCBsaXN0Ci0gICAgICAgIHNlbGYuY29tbWFuZHNfc2lsZW50ID0ge30gIyBmb3IgZWFjaCBicCBudW0sIHRlbGxzIGlmIHRoZSBzdGFjayB0cmFjZSBtdXN0IGJlIGRpc3AuIGFmdGVyIGV4ZWNpbmcgdGhlIGNtZCBsaXN0Ci0gICAgICAgIHNlbGYuY29tbWFuZHNfZGVmaW5pbmcgPSBGYWxzZSAjIFRydWUgd2hpbGUgaW4gdGhlIHByb2Nlc3Mgb2YgZGVmaW5pbmcgYSBjb21tYW5kIGxpc3QKLSAgICAgICAgc2VsZi5jb21tYW5kc19ibnVtID0gTm9uZSAjIFRoZSBicmVha3BvaW50IG51bWJlciBmb3Igd2hpY2ggd2UgYXJlIGRlZmluaW5nIGEgbGlzdAorICAgICAgICBzZWxmLmNvbW1hbmRzX2RvcHJvbXB0ID0ge30gIyBmb3IgZWFjaCBicCBudW0sIHRlbGxzIGlmIHRoZSBwcm9tcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbXVzdCBiZSBkaXNwLiBhZnRlciBleGVjaW5nIHRoZSBjbWQgbGlzdAorICAgICAgICBzZWxmLmNvbW1hbmRzX3NpbGVudCA9IHt9ICMgZm9yIGVhY2ggYnAgbnVtLCB0ZWxscyBpZiB0aGUgc3RhY2sgdHJhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG11c3QgYmUgZGlzcC4gYWZ0ZXIgZXhlY2luZyB0aGUgY21kIGxpc3QKKyAgICAgICAgc2VsZi5jb21tYW5kc19kZWZpbmluZyA9IEZhbHNlICMgVHJ1ZSB3aGlsZSBpbiB0aGUgcHJvY2VzcyBvZiBkZWZpbmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhIGNvbW1hbmQgbGlzdAorICAgICAgICBzZWxmLmNvbW1hbmRzX2JudW0gPSBOb25lICMgVGhlIGJyZWFrcG9pbnQgbnVtYmVyIGZvciB3aGljaCB3ZSBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlZmluaW5nIGEgbGlzdAogCiAgICAgZGVmIHJlc2V0KHNlbGYpOgogICAgICAgICBiZGIuQmRiLnJlc2V0KHNlbGYpCkBAIC0xMTQsNiArMTE4LDEwIEBACiAgICAgICAgIHNlbGYuZm9yZ2V0KCkKICAgICAgICAgc2VsZi5zdGFjaywgc2VsZi5jdXJpbmRleCA9IHNlbGYuZ2V0X3N0YWNrKGYsIHQpCiAgICAgICAgIHNlbGYuY3VyZnJhbWUgPSBzZWxmLnN0YWNrW3NlbGYuY3VyaW5kZXhdWzBdCisgICAgICAgICMgVGhlIGZfbG9jYWxzIGRpY3Rpb25hcnkgaXMgdXBkYXRlZCBmcm9tIHRoZSBhY3R1YWwgZnJhbWUKKyAgICAgICAgIyBsb2NhbHMgd2hlbmV2ZXIgdGhlIC5mX2xvY2FscyBhY2Nlc3NvciBpcyBjYWxsZWQsIHNvIHdlCisgICAgICAgICMgY2FjaGUgaXQgaGVyZSB0byBlbnN1cmUgdGhhdCBtb2RpZmljYXRpb25zIGFyZSBub3Qgb3ZlcndyaXR0ZW4uCisgICAgICAgIHNlbGYuY3VyZnJhbWVfbG9jYWxzID0gc2VsZi5jdXJmcmFtZS5mX2xvY2FscwogICAgICAgICBzZWxmLmV4ZWNSY0xpbmVzKCkKIAogICAgICMgQ2FuIGJlIGV4ZWN1dGVkIGVhcmxpZXIgdGhhbiAnc2V0dXAnIGlmIGRlc2lyZWQKQEAgLTE1MCwxMCArMTU4LDE0IEBACiAgICAgICAgICAgICBzZWxmLmludGVyYWN0aW9uKGZyYW1lLCBOb25lKQogCiAgICAgZGVmIGJwX2NvbW1hbmRzKHNlbGYsZnJhbWUpOgotICAgICAgICAiIiIgQ2FsbCBldmVyeSBjb21tYW5kIHRoYXQgd2FzIHNldCBmb3IgdGhlIGN1cnJlbnQgYWN0aXZlIGJyZWFrcG9pbnQgKGlmIHRoZXJlIGlzIG9uZSkKLSAgICAgICAgUmV0dXJucyBUcnVlIGlmIHRoZSBub3JtYWwgaW50ZXJhY3Rpb24gZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQsIEZhbHNlIG90aGVyd2lzZSAiIiIKLSAgICAgICAgI3NlbGYuY3VycmVudGJwIGlzIHNldCBpbiBiZGIucHkgaW4gYmRiLmJyZWFrX2hlcmUgaWYgYSBicmVha3BvaW50IHdhcyBoaXQKLSAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCJjdXJyZW50YnAiLEZhbHNlKSBhbmQgc2VsZi5jdXJyZW50YnAgaW4gc2VsZi5jb21tYW5kczoKKyAgICAgICAgIiIiQ2FsbCBldmVyeSBjb21tYW5kIHRoYXQgd2FzIHNldCBmb3IgdGhlIGN1cnJlbnQgYWN0aXZlIGJyZWFrcG9pbnQKKyAgICAgICAgKGlmIHRoZXJlIGlzIG9uZSkuCisKKyAgICAgICAgUmV0dXJucyBUcnVlIGlmIHRoZSBub3JtYWwgaW50ZXJhY3Rpb24gZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQsCisgICAgICAgIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICAgICAgIyBzZWxmLmN1cnJlbnRicCBpcyBzZXQgaW4gYmRiIGluIEJkYi5icmVha19oZXJlIGlmIGEgYnJlYWtwb2ludCB3YXMgaGl0CisgICAgICAgIGlmIGdldGF0dHIoc2VsZiwgImN1cnJlbnRicCIsIEZhbHNlKSBhbmQgXAorICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50YnAgaW4gc2VsZi5jb21tYW5kczoKICAgICAgICAgICAgIGN1cnJlbnRicCA9IHNlbGYuY3VycmVudGJwCiAgICAgICAgICAgICBzZWxmLmN1cnJlbnRicCA9IDAKICAgICAgICAgICAgIGxhc3RjbWRfYmFjayA9IHNlbGYubGFzdGNtZApAQCAtMjA4LDcgKzIyMCw3IEBACiAKICAgICBkZWYgZGVmYXVsdChzZWxmLCBsaW5lKToKICAgICAgICAgaWYgbGluZVs6MV0gPT0gJyEnOiBsaW5lID0gbGluZVsxOl0KLSAgICAgICAgbG9jYWxzID0gc2VsZi5jdXJmcmFtZS5mX2xvY2FscworICAgICAgICBsb2NhbHMgPSBzZWxmLmN1cmZyYW1lX2xvY2FscwogICAgICAgICBnbG9iYWxzID0gc2VsZi5jdXJmcmFtZS5mX2dsb2JhbHMKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSArICdcbicsICc8c3RkaW4+JywgJ3NpbmdsZScpCkBAIC0yODksNyArMzAxLDggQEAKICAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHNlbGYsICdkb18nICsgY21kKQogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBmdW5jID0gc2VsZi5kZWZhdWx0Ci0gICAgICAgIGlmIGZ1bmMuZnVuY19uYW1lIGluIHNlbGYuY29tbWFuZHNfcmVzdW1pbmcgOiAjIG9uZSBvZiB0aGUgcmVzdW1pbmcgY29tbWFuZHMuCisgICAgICAgICMgb25lIG9mIHRoZSByZXN1bWluZyBjb21tYW5kcworICAgICAgICBpZiBmdW5jLmZ1bmNfbmFtZSBpbiBzZWxmLmNvbW1hbmRzX3Jlc3VtaW5nOgogICAgICAgICAgICAgc2VsZi5jb21tYW5kc19kb3Byb21wdFtzZWxmLmNvbW1hbmRzX2JudW1dID0gRmFsc2UKICAgICAgICAgICAgIHNlbGYuY21kcXVldWUgPSBbXQogICAgICAgICAgICAgcmV0dXJuIDEKQEAgLTMwMiwxNSArMzE1LDE4IEBACiAgICAgZG9faCA9IGNtZC5DbWQuZG9faGVscAogCiAgICAgZGVmIGRvX2NvbW1hbmRzKHNlbGYsIGFyZyk6Ci0gICAgICAgICIiIkRlZmluZXMgYSBsaXN0IG9mIGNvbW1hbmRzIGFzc29jaWF0ZWQgdG8gYSBicmVha3BvaW50Ci0gICAgICAgIFRob3NlIGNvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhlIGJyZWFrcG9pbnQgY2F1c2VzIHRoZSBwcm9ncmFtIHRvIHN0b3AgZXhlY3V0aW9uLiIiIgorICAgICAgICAiIiJEZWZpbmVzIGEgbGlzdCBvZiBjb21tYW5kcyBhc3NvY2lhdGVkIHRvIGEgYnJlYWtwb2ludC4KKworICAgICAgICBUaG9zZSBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkIHdoZW5ldmVyIHRoZSBicmVha3BvaW50IGNhdXNlcworICAgICAgICB0aGUgcHJvZ3JhbSB0byBzdG9wIGV4ZWN1dGlvbi4iIiIKICAgICAgICAgaWYgbm90IGFyZzoKICAgICAgICAgICAgIGJudW0gPSBsZW4oYmRiLkJyZWFrcG9pbnQuYnBieW51bWJlciktMQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJudW0gPSBpbnQoYXJnKQogICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHByaW50ID4+c2VsZi5zdGRvdXQsICJVc2FnZSA6IGNvbW1hbmRzIFtibnVtXVxuICAgICAgICAuLi5cbiAgICAgICAgZW5kIgorICAgICAgICAgICAgICAgIHByaW50ID4+c2VsZi5zdGRvdXQsICJVc2FnZSA6IGNvbW1hbmRzIFtibnVtXVxuICAgICAgICAuLi4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4gICAgICAgIGVuZCIKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5jb21tYW5kc19ibnVtID0gYm51bQogICAgICAgICBzZWxmLmNvbW1hbmRzW2JudW1dID0gW10KQEAgLTM3MCw3ICszODYsNyBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZnVuYyA9IGV2YWwoYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cmZyYW1lLmZfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJmcmFtZS5mX2xvY2FscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJmcmFtZV9sb2NhbHMpCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICBmdW5jID0gYXJnCiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtNjIxLDYgKzYzNyw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmN1cmluZGV4ID0gc2VsZi5jdXJpbmRleCAtIDEKICAgICAgICAgICAgIHNlbGYuY3VyZnJhbWUgPSBzZWxmLnN0YWNrW3NlbGYuY3VyaW5kZXhdWzBdCisgICAgICAgICAgICBzZWxmLmN1cmZyYW1lX2xvY2FscyA9IHNlbGYuY3VyZnJhbWUuZl9sb2NhbHMKICAgICAgICAgICAgIHNlbGYucHJpbnRfc3RhY2tfZW50cnkoc2VsZi5zdGFja1tzZWxmLmN1cmluZGV4XSkKICAgICAgICAgICAgIHNlbGYubGluZW5vID0gTm9uZQogICAgIGRvX3UgPSBkb191cApAQCAtNjMxLDYgKzY0OCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmN1cmluZGV4ID0gc2VsZi5jdXJpbmRleCArIDEKICAgICAgICAgICAgIHNlbGYuY3VyZnJhbWUgPSBzZWxmLnN0YWNrW3NlbGYuY3VyaW5kZXhdWzBdCisgICAgICAgICAgICBzZWxmLmN1cmZyYW1lX2xvY2FscyA9IHNlbGYuY3VyZnJhbWUuZl9sb2NhbHMKICAgICAgICAgICAgIHNlbGYucHJpbnRfc3RhY2tfZW50cnkoc2VsZi5zdGFja1tzZWxmLmN1cmluZGV4XSkKICAgICAgICAgICAgIHNlbGYubGluZW5vID0gTm9uZQogICAgIGRvX2QgPSBkb19kb3duCkBAIC02NTEsOCArNjY5LDggQEAKICAgICBkb19uID0gZG9fbmV4dAogCiAgICAgZGVmIGRvX3J1bihzZWxmLCBhcmcpOgotICAgICAgICAiIiJSZXN0YXJ0IHByb2dyYW0gYnkgcmFpc2luZyBhbiBleGNlcHRpb24gdG8gYmUgY2F1Z2h0IGluIHRoZSBtYWluIGRlYnVnZ2VyCi0gICAgICAgIGxvb3AuIElmIGFyZ3VtZW50cyB3ZXJlIGdpdmVuLCBzZXQgdGhlbSBpbiBzeXMuYXJndi4iIiIKKyAgICAgICAgIiIiUmVzdGFydCBwcm9ncmFtIGJ5IHJhaXNpbmcgYW4gZXhjZXB0aW9uIHRvIGJlIGNhdWdodCBpbiB0aGUgbWFpbgorICAgICAgICBkZWJ1Z2dlciBsb29wLiAgSWYgYXJndW1lbnRzIHdlcmUgZ2l2ZW4sIHNldCB0aGVtIGluIHN5cy5hcmd2LiIiIgogICAgICAgICBpZiBhcmc6CiAgICAgICAgICAgICBpbXBvcnQgc2hsZXgKICAgICAgICAgICAgIGFyZ3YwID0gc3lzLmFyZ3ZbMDoxXQpAQCAtNjk0LDcgKzcxMiw3IEBACiAgICAgZGVmIGRvX2RlYnVnKHNlbGYsIGFyZyk6CiAgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQogICAgICAgICBnbG9iYWxzID0gc2VsZi5jdXJmcmFtZS5mX2dsb2JhbHMKLSAgICAgICAgbG9jYWxzID0gc2VsZi5jdXJmcmFtZS5mX2xvY2FscworICAgICAgICBsb2NhbHMgPSBzZWxmLmN1cmZyYW1lX2xvY2FscwogICAgICAgICBwID0gUGRiKHNlbGYuY29tcGxldGVrZXksIHNlbGYuc3RkaW4sIHNlbGYuc3Rkb3V0KQogICAgICAgICBwLnByb21wdCA9ICIoJXMpICIgJSBzZWxmLnByb21wdC5zdHJpcCgpCiAgICAgICAgIHByaW50ID4+c2VsZi5zdGRvdXQsICJFTlRFUklORyBSRUNVUlNJVkUgREVCVUdHRVIiCkBAIC03MTgsOSArNzM2LDggQEAKICAgICAgICAgcmV0dXJuIDEKIAogICAgIGRlZiBkb19hcmdzKHNlbGYsIGFyZyk6Ci0gICAgICAgIGYgPSBzZWxmLmN1cmZyYW1lCi0gICAgICAgIGNvID0gZi5mX2NvZGUKLSAgICAgICAgZGljdCA9IGYuZl9sb2NhbHMKKyAgICAgICAgY28gPSBzZWxmLmN1cmZyYW1lLmZfY29kZQorICAgICAgICBkaWN0ID0gc2VsZi5jdXJmcmFtZV9sb2NhbHMKICAgICAgICAgbiA9IGNvLmNvX2FyZ2NvdW50CiAgICAgICAgIGlmIGNvLmNvX2ZsYWdzICYgNDogbiA9IG4rMQogICAgICAgICBpZiBjby5jb19mbGFncyAmIDg6IG4gPSBuKzEKQEAgLTczMiw4ICs3NDksOCBAQAogICAgIGRvX2EgPSBkb19hcmdzCiAKICAgICBkZWYgZG9fcmV0dmFsKHNlbGYsIGFyZyk6Ci0gICAgICAgIGlmICdfX3JldHVybl9fJyBpbiBzZWxmLmN1cmZyYW1lLmZfbG9jYWxzOgotICAgICAgICAgICAgcHJpbnQgPj5zZWxmLnN0ZG91dCwgc2VsZi5jdXJmcmFtZS5mX2xvY2Fsc1snX19yZXR1cm5fXyddCisgICAgICAgIGlmICdfX3JldHVybl9fJyBpbiBzZWxmLmN1cmZyYW1lX2xvY2FsczoKKyAgICAgICAgICAgIHByaW50ID4+c2VsZi5zdGRvdXQsIHNlbGYuY3VyZnJhbWVfbG9jYWxzWydfX3JldHVybl9fJ10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHByaW50ID4+c2VsZi5zdGRvdXQsICcqKiogTm90IHlldCByZXR1cm5lZCEnCiAgICAgZG9fcnYgPSBkb19yZXR2YWwKQEAgLTc0MSw3ICs3NTgsNyBAQAogICAgIGRlZiBfZ2V0dmFsKHNlbGYsIGFyZyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBldmFsKGFyZywgc2VsZi5jdXJmcmFtZS5mX2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cmZyYW1lLmZfbG9jYWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJmcmFtZV9sb2NhbHMpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHQsIHYgPSBzeXMuZXhjX2luZm8oKVs6Ml0KICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodCwgc3RyKToKQEAgLTc5MCw3ICs4MDcsOCBAQAogICAgICAgICBicmVha2xpc3QgPSBzZWxmLmdldF9maWxlX2JyZWFrcyhmaWxlbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIGxpbmVubyBpbiByYW5nZShmaXJzdCwgbGFzdCsxKToKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgc2VsZi5jdXJmcmFtZS5mX2dsb2JhbHMpCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VyZnJhbWUuZl9nbG9iYWxzKQogICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCAnW0VPRl0nCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCkBAIC04MTAsNyArODI4LDcgQEAKICAgICBkZWYgZG9fd2hhdGlzKHNlbGYsIGFyZyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlID0gZXZhbChhcmcsIHNlbGYuY3VyZnJhbWUuZl9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VyZnJhbWUuZl9sb2NhbHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJmcmFtZV9sb2NhbHMpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHQsIHYgPSBzeXMuZXhjX2luZm8oKVs6Ml0KICAgICAgICAgICAgIGlmIHR5cGUodCkgPT0gdHlwZSgnJyk6CkBAIC05NTQsOCArOTcyLDggQEAKIGJyZWFrcG9pbnQgbnVtYmVycy4iIiIKIAogICAgIGRlZiBoZWxwX3RicmVhayhzZWxmKToKLSAgICAgICAgcHJpbnQgPj5zZWxmLnN0ZG91dCwgIiIidGJyZWFrICBzYW1lIGFyZ3VtZW50cyBhcyBicmVhaywgYnV0IGJyZWFrcG9pbnQgaXMKLXJlbW92ZWQgd2hlbiBmaXJzdCBoaXQuIiIiCisgICAgICAgIHByaW50ID4+c2VsZi5zdGRvdXQsICIiInRicmVhayAgc2FtZSBhcmd1bWVudHMgYXMgYnJlYWssIGJ1dCBicmVha3BvaW50CitpcyByZW1vdmVkIHdoZW4gZmlyc3QgaGl0LiIiIgogCiAgICAgZGVmIGhlbHBfZW5hYmxlKHNlbGYpOgogICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCAiIiJlbmFibGUgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl0KQEAgLTExMDEsNyArMTExOSw3IEBACiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIEVPRiBhcyBhIGNvbW1hbmQuIiIiCiAKICAgICBkZWYgaGVscF9hbGlhcyhzZWxmKToKLSAgICAgICAgcHJpbnQgPj5zZWxmLnN0ZG91dCwgIiIiYWxpYXMgW25hbWUgW2NvbW1hbmQgW3BhcmFtZXRlciBwYXJhbWV0ZXIgLi4uXSBdXQorICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCAiIiJhbGlhcyBbbmFtZSBbY29tbWFuZCBbcGFyYW1ldGVyIHBhcmFtZXRlciAuLi5dXV0KIENyZWF0ZXMgYW4gYWxpYXMgY2FsbGVkICduYW1lJyB0aGUgZXhlY3V0ZXMgJ2NvbW1hbmQnLiAgVGhlIGNvbW1hbmQKIG11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUgcGFyYW1ldGVycyBhcmUKIGluZGljYXRlZCBieSAlMSwgJTIsIGFuZCBzbyBvbiwgd2hpbGUgJSogaXMgcmVwbGFjZWQgYnkgYWxsIHRoZQpAQCAtMTI4OCw4ICsxMzA2LDggQEAKIAogICAgICMgTm90ZSBvbiBzYXZpbmcvcmVzdG9yaW5nIHN5cy5hcmd2OiBpdCdzIGEgZ29vZCBpZGVhIHdoZW4gc3lzLmFyZ3Ygd2FzCiAgICAgIyBtb2RpZmllZCBieSB0aGUgc2NyaXB0IGJlaW5nIGRlYnVnZ2VkLiBJdCdzIGEgYmFkIGlkZWEgd2hlbiBpdCB3YXMKLSAgICAjIGNoYW5nZWQgYnkgdGhlIHVzZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiBUaGVyZSBpcyBhICJyZXN0YXJ0IiBjb21tYW5kIHdoaWNoCi0gICAgIyBhbGxvd3MgZXhwbGljaXQgc3BlY2lmaWNhdGlvbiBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgY2hhbmdlZCBieSB0aGUgdXNlciBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIFRoZXJlIGlzIGEgInJlc3RhcnQiIGNvbW1hbmQKKyAgICAjIHdoaWNoIGFsbG93cyBleHBsaWNpdCBzcGVjaWZpY2F0aW9uIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCiAgICAgcGRiID0gUGRiKCkKICAgICB3aGlsZSBUcnVlOgogICAgICAgICB0cnk6CkBAIC0xMzEwLDcgKzEzMjgsOCBAQAogICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJ2NvbnQnIG9yICdzdGVwJyB3aWxsIHJlc3RhcnQgdGhlIHByb2dyYW0iCiAgICAgICAgICAgICB0ID0gc3lzLmV4Y19pbmZvKClbMl0KICAgICAgICAgICAgIHBkYi5pbnRlcmFjdGlvbihOb25lLCB0KQotICAgICAgICAgICAgcHJpbnQgIlBvc3QgbW9ydGVtIGRlYnVnZ2VyIGZpbmlzaGVkLiBUaGUgIittYWlucHlmaWxlKyIgd2lsbCBiZSByZXN0YXJ0ZWQiCisgICAgICAgICAgICBwcmludCAiUG9zdCBtb3J0ZW0gZGVidWdnZXIgZmluaXNoZWQuIFRoZSAiICsgbWFpbnB5ZmlsZSArIFwKKyAgICAgICAgICAgICAgICAgICIgd2lsbCBiZSByZXN0YXJ0ZWQiCiAKIAogIyBXaGVuIGludm9rZWQgYXMgbWFpbiBwcm9ncmFtLCBpbnZva2UgdGhlIGRlYnVnZ2VyIG9uIGEgc2NyaXB0CmRpZmYgLS1naXQgYS9MaWIvcGlja2xlLnB5IGIvTGliL3BpY2tsZS5weQppbmRleCA5NjY3NzgxLi44YzVkNTFmIDEwMDY0NAotLS0gYS9MaWIvcGlja2xlLnB5CisrKyBiL0xpYi9waWNrbGUucHkKQEAgLTUwMSw3ICs1MDEsNyBAQAogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgIGRpc3BhdGNoW1VuaWNvZGVUeXBlXSA9IHNhdmVfdW5pY29kZQogCi0gICAgaWYgU3RyaW5nVHlwZSA9PSBVbmljb2RlVHlwZToKKyAgICBpZiBTdHJpbmdUeXBlIGlzIFVuaWNvZGVUeXBlOgogICAgICAgICAjIFRoaXMgaXMgdHJ1ZSBmb3IgSnl0aG9uCiAgICAgICAgIGRlZiBzYXZlX3N0cmluZyhzZWxmLCBvYmosIHBhY2s9c3RydWN0LnBhY2spOgogICAgICAgICAgICAgdW5pY29kZSA9IG9iai5pc3VuaWNvZGUoKQpAQCAtMTIyMSw3ICsxMjIxLDE1IEBACiAgICAgICAgICAgICBzdGF0ZSwgc2xvdHN0YXRlID0gc3RhdGUKICAgICAgICAgaWYgc3RhdGU6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW5zdC5fX2RpY3RfXy51cGRhdGUoc3RhdGUpCisgICAgICAgICAgICAgICAgZCA9IGluc3QuX19kaWN0X18KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHN0YXRlLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgZFtpbnRlcm4oayldID0gdgorICAgICAgICAgICAgICAgICMga2V5cyBpbiBzdGF0ZSBkb24ndCBoYXZlIHRvIGJlIHN0cmluZ3MKKyAgICAgICAgICAgICAgICAjIGRvbid0IGJsb3cgdXAsIGJ1dCBkb24ndCBnbyBvdXQgb2Ygb3VyIHdheQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGQudXBkYXRlKHN0YXRlKQorCiAgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgogICAgICAgICAgICAgICAgICMgWFhYIEluIHJlc3RyaWN0ZWQgZXhlY3V0aW9uLCB0aGUgaW5zdGFuY2UncyBfX2RpY3RfXwogICAgICAgICAgICAgICAgICMgaXMgbm90IGFjY2Vzc2libGUuICBVc2UgdGhlIG9sZCB3YXkgb2YgdW5waWNrbGluZwpkaWZmIC0tZ2l0IGEvTGliL3BpY2tsZXRvb2xzLnB5IGIvTGliL3BpY2tsZXRvb2xzLnB5CmluZGV4IDA2NTQ5OGMuLmNmZWVlY2IgMTAwNjQ0Ci0tLSBhL0xpYi9waWNrbGV0b29scy5weQorKysgYi9MaWIvcGlja2xldG9vbHMucHkKQEAgLTEyMTQsMTAgKzEyMTQsMTEgQEAKICAgICAgIHN0YWNrX2JlZm9yZT1bYW55b2JqZWN0XSwKICAgICAgIHN0YWNrX2FmdGVyPVtweXR1cGxlXSwKICAgICAgIHByb3RvPTIsCi0gICAgICBkb2M9IiIiT25lLXR1cGxlLgorICAgICAgZG9jPSIiIkJ1aWxkIGEgb25lLXR1cGxlIG91dCBvZiB0aGUgdG9wbW9zdCBpdGVtIG9uIHRoZSBzdGFjay4KIAogICAgICAgVGhpcyBjb2RlIHBvcHMgb25lIHZhbHVlIG9mZiB0aGUgc3RhY2sgYW5kIHB1c2hlcyBhIHR1cGxlIG9mCi0gICAgICBsZW5ndGggMSB3aG9zZSBvbmUgaXRlbSBpcyB0aGF0IHZhbHVlIGJhY2sgb250byBpdC4gIElPVzoKKyAgICAgIGxlbmd0aCAxIHdob3NlIG9uZSBpdGVtIGlzIHRoYXQgdmFsdWUgYmFjayBvbnRvIGl0LiAgSW4gb3RoZXIKKyAgICAgIHdvcmRzOgogCiAgICAgICAgICAgc3RhY2tbLTFdID0gdHVwbGUoc3RhY2tbLTE6XSkKICAgICAgICIiIiksCkBAIC0xMjI4LDEwICsxMjI5LDExIEBACiAgICAgICBzdGFja19iZWZvcmU9W2FueW9iamVjdCwgYW55b2JqZWN0XSwKICAgICAgIHN0YWNrX2FmdGVyPVtweXR1cGxlXSwKICAgICAgIHByb3RvPTIsCi0gICAgICBkb2M9IiIiT25lLXR1cGxlLgorICAgICAgZG9jPSIiIkJ1aWxkIGEgdHdvLXR1cGxlIG91dCBvZiB0aGUgdG9wIHR3byBpdGVtcyBvbiB0aGUgc3RhY2suCiAKLSAgICAgIFRoaXMgY29kZSBwb3BzIHR3byB2YWx1ZXMgb2ZmIHRoZSBzdGFjayBhbmQgcHVzaGVzIGEgdHVwbGUKLSAgICAgIG9mIGxlbmd0aCAyIHdob3NlIGl0ZW1zIGFyZSB0aG9zZSB2YWx1ZXMgYmFjayBvbnRvIGl0LiAgSU9XOgorICAgICAgVGhpcyBjb2RlIHBvcHMgdHdvIHZhbHVlcyBvZmYgdGhlIHN0YWNrIGFuZCBwdXNoZXMgYSB0dXBsZSBvZgorICAgICAgbGVuZ3RoIDIgd2hvc2UgaXRlbXMgYXJlIHRob3NlIHZhbHVlcyBiYWNrIG9udG8gaXQuICBJbiBvdGhlcgorICAgICAgd29yZHM6CiAKICAgICAgICAgICBzdGFja1stMjpdID0gW3R1cGxlKHN0YWNrWy0yOl0pXQogICAgICAgIiIiKSwKQEAgLTEyNDIsMTAgKzEyNDQsMTEgQEAKICAgICAgIHN0YWNrX2JlZm9yZT1bYW55b2JqZWN0LCBhbnlvYmplY3QsIGFueW9iamVjdF0sCiAgICAgICBzdGFja19hZnRlcj1bcHl0dXBsZV0sCiAgICAgICBwcm90bz0yLAotICAgICAgZG9jPSIiIk9uZS10dXBsZS4KKyAgICAgIGRvYz0iIiJCdWlsZCBhIHRocmVlLXR1cGxlIG91dCBvZiB0aGUgdG9wIHRocmVlIGl0ZW1zIG9uIHRoZSBzdGFjay4KIAotICAgICAgVGhpcyBjb2RlIHBvcHMgdGhyZWUgdmFsdWVzIG9mZiB0aGUgc3RhY2sgYW5kIHB1c2hlcyBhIHR1cGxlCi0gICAgICBvZiBsZW5ndGggMyB3aG9zZSBpdGVtcyBhcmUgdGhvc2UgdmFsdWVzIGJhY2sgb250byBpdC4gIElPVzoKKyAgICAgIFRoaXMgY29kZSBwb3BzIHRocmVlIHZhbHVlcyBvZmYgdGhlIHN0YWNrIGFuZCBwdXNoZXMgYSB0dXBsZSBvZgorICAgICAgbGVuZ3RoIDMgd2hvc2UgaXRlbXMgYXJlIHRob3NlIHZhbHVlcyBiYWNrIG9udG8gaXQuICBJbiBvdGhlcgorICAgICAgd29yZHM6CiAKICAgICAgICAgICBzdGFja1stMzpdID0gW3R1cGxlKHN0YWNrWy0zOl0pXQogICAgICAgIiIiKSwKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWF0aGVvcy9yZWdlbiBiL0xpYi9wbGF0LWF0aGVvcy9yZWdlbgpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1mcmVlYnNkNC9yZWdlbiBiL0xpYi9wbGF0LWZyZWVic2Q0L3JlZ2VuCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWZyZWVic2Q1L3JlZ2VuIGIvTGliL3BsYXQtZnJlZWJzZDUvcmVnZW4Kb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtZnJlZWJzZDYvcmVnZW4gYi9MaWIvcGxhdC1mcmVlYnNkNi9yZWdlbgpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1mcmVlYnNkNy9yZWdlbiBiL0xpYi9wbGF0LWZyZWVic2Q3L3JlZ2VuCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWZyZWVic2Q4L3JlZ2VuIGIvTGliL3BsYXQtZnJlZWJzZDgvcmVnZW4Kb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvQUwucHkgYi9MaWIvcGxhdC1pcml4NS9BTC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9DRC5weSBiL0xpYi9wbGF0LWlyaXg1L0NELnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L0NMLnB5IGIvTGliL3BsYXQtaXJpeDUvQ0wucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvQ0xfb2xkLnB5IGIvTGliL3BsYXQtaXJpeDUvQ0xfb2xkLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L0RFVklDRS5weSBiL0xpYi9wbGF0LWlyaXg1L0RFVklDRS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9FUlJOTy5weSBiL0xpYi9wbGF0LWlyaXg1L0VSUk5PLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L0ZJTEUucHkgYi9MaWIvcGxhdC1pcml4NS9GSUxFLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L0ZMLnB5IGIvTGliL3BsYXQtaXJpeDUvRkwucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvR0VULnB5IGIvTGliL3BsYXQtaXJpeDUvR0VULnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L0dMLnB5IGIvTGliL3BsYXQtaXJpeDUvR0wucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvR0xXUy5weSBiL0xpYi9wbGF0LWlyaXg1L0dMV1MucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvSU4ucHkgYi9MaWIvcGxhdC1pcml4NS9JTi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9JT0NUTC5weSBiL0xpYi9wbGF0LWlyaXg1L0lPQ1RMLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L1NWLnB5IGIvTGliL3BsYXQtaXJpeDUvU1YucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvV0FJVC5weSBiL0xpYi9wbGF0LWlyaXg1L1dBSVQucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvY2RkYi5weSBiL0xpYi9wbGF0LWlyaXg1L2NkZGIucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvY2RwbGF5ZXIucHkgYi9MaWIvcGxhdC1pcml4NS9jZHBsYXllci5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9mbHAuZG9jIGIvTGliL3BsYXQtaXJpeDUvZmxwLmRvYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9mbHAucHkgYi9MaWIvcGxhdC1pcml4NS9mbHAucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvanBlZy5weSBiL0xpYi9wbGF0LWlyaXg1L2pwZWcucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvcGFuZWwucHkgYi9MaWIvcGxhdC1pcml4NS9wYW5lbC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9wYW5lbHBhcnNlci5weSBiL0xpYi9wbGF0LWlyaXg1L3BhbmVscGFyc2VyLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L3JlYWRjZC5kb2MgYi9MaWIvcGxhdC1pcml4NS9yZWFkY2QuZG9jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L3JlYWRjZC5weSBiL0xpYi9wbGF0LWlyaXg1L3JlYWRjZC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS90b3JnYi5weSBiL0xpYi9wbGF0LWlyaXg1L3RvcmdiLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9DYXJib24vQ0cucHkgYi9MaWIvcGxhdC1tYWMvQ2FyYm9uL0NHLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9DYXJib24vQ2FyYm9uRXZlbnRzLnB5IGIvTGliL3BsYXQtbWFjL0NhcmJvbi9DYXJib25FdmVudHMucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL0NhcmJvbi9DYXJib25FdnQucHkgYi9MaWIvcGxhdC1tYWMvQ2FyYm9uL0NhcmJvbkV2dC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvQ2FyYm9uL0NvcmVHcmFwaGljcy5weSBiL0xpYi9wbGF0LW1hYy9DYXJib24vQ29yZUdyYXBoaWNzLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9DYXJib24vX19pbml0X18ucHkgYi9MaWIvcGxhdC1tYWMvQ2FyYm9uL19faW5pdF9fLnB5CmluZGV4IDY3MzliYmQuLjM3YTlhZTMgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9DYXJib24vX19pbml0X18ucHkKKysrIGIvTGliL3BsYXQtbWFjL0NhcmJvbi9fX2luaXRfXy5weQpAQCAtNCw0ICs0LDQgQEAKIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiIiwgRnV0dXJlV2FybmluZywgIi4qTWFjVGV4dEVkaXRvciIpCiAKIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrCi13YXJucHkzaygiSW4gMy54LCBDYXJib24gaXMgcmVtb3ZlZC4iLCBzdGFja2xldmVsPTIpCit3YXJucHkzaygiSW4gMy54LCB0aGUgQ2FyYm9uIHBhY2thZ2UgaXMgcmVtb3ZlZC4iLCBzdGFja2xldmVsPTIpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvRWFzeURpYWxvZ3MucHkgYi9MaWIvcGxhdC1tYWMvRWFzeURpYWxvZ3MucHkKaW5kZXggYmQwOTdiZC4uMTI5Y2YyYyAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL0Vhc3lEaWFsb2dzLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9FYXN5RGlhbG9ncy5weQpAQCAtNTgwLDkgKzU4MCw5IEBACiAgICAgICAgIGlmIGFyZ3Nba10gaXMgTm9uZToKICAgICAgICAgICAgIGRlbCBhcmdzW2tdCiAgICAgIyBTZXQgc29tZSBkZWZhdWx0cywgYW5kIG1vZGlmeSBzb21lIGFyZ3VtZW50cwotICAgIGlmIG5vdCBhcmdzLmhhc19rZXkoJ2RpYWxvZ09wdGlvbkZsYWdzJyk6CisgICAgaWYgJ2RpYWxvZ09wdGlvbkZsYWdzJyBub3QgaW4gYXJnczoKICAgICAgICAgYXJnc1snZGlhbG9nT3B0aW9uRmxhZ3MnXSA9IGRmdGZsYWdzCi0gICAgaWYgYXJncy5oYXNfa2V5KCdkZWZhdWx0TG9jYXRpb24nKSBhbmQgXAorICAgIGlmICdkZWZhdWx0TG9jYXRpb24nIGluIGFyZ3MgYW5kIFwKICAgICAgICAgICAgIG5vdCBpc2luc3RhbmNlKGFyZ3NbJ2RlZmF1bHRMb2NhdGlvbiddLCBDYXJib24uQUUuQUVEZXNjKToKICAgICAgICAgZGVmYXVsdExvY2F0aW9uID0gYXJnc1snZGVmYXVsdExvY2F0aW9uJ10KICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWZhdWx0TG9jYXRpb24sIENhcmJvbi5GaWxlLkZTU3BlYyk6CkBAIC01OTMsNyArNTkzLDcgQEAKICAgICAgICAgICAgICAgICBkZWZhdWx0TG9jYXRpb24gPSBDYXJib24uRmlsZS5GU1JlZihkZWZhdWx0TG9jYXRpb24pCiAgICAgICAgICAgICBhcmdzWydkZWZhdWx0TG9jYXRpb24nXSA9IENhcmJvbi5BRS5BRUNyZWF0ZURlc2MoCiAgICAgICAgICAgICAgICAgICAgIENhcmJvbi5BcHBsZUV2ZW50cy50eXBlRlNSZWYsIGRlZmF1bHRMb2NhdGlvbi5kYXRhKQotICAgIGlmIGFyZ3MuaGFzX2tleSgndHlwZUxpc3QnKSBhbmQgbm90IGlzaW5zdGFuY2UoYXJnc1sndHlwZUxpc3QnXSwgQ2FyYm9uLlJlcy5SZXNvdXJjZVR5cGUpOgorICAgIGlmICd0eXBlTGlzdCcgaW4gYXJncyBhbmQgbm90IGlzaW5zdGFuY2UoYXJnc1sndHlwZUxpc3QnXSwgQ2FyYm9uLlJlcy5SZXNvdXJjZVR5cGUpOgogICAgICAgICB0eXBlTGlzdCA9IGFyZ3NbJ3R5cGVMaXN0J11bOl0KICAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBPU1ggdHlwZWxlc3MgZmlsZXM6CiAgICAgICAgIGlmICdURVhUJyBpbiB0eXBlTGlzdCBhbmQgbm90ICdcMFwwXDBcMCcgaW4gdHlwZUxpc3Q6CkBAIC02MDMsNyArNjAzLDcgQEAKICAgICAgICAgICAgIGRhdGEgPSBkYXRhK3R5cGUKICAgICAgICAgYXJnc1sndHlwZUxpc3QnXSA9IENhcmJvbi5SZXMuSGFuZGxlKGRhdGEpCiAgICAgdHB3YW50ZWQgPSBzdHIKLSAgICBpZiBhcmdzLmhhc19rZXkoJ3dhbnRlZCcpOgorICAgIGlmICd3YW50ZWQnIGluIGFyZ3M6CiAgICAgICAgIHRwd2FudGVkID0gYXJnc1snd2FudGVkJ10KICAgICAgICAgZGVsIGFyZ3NbJ3dhbnRlZCddCiAgICAgcmV0dXJuIGFyZ3MsIHRwd2FudGVkCkBAIC03MjEsMTYgKzcyMSwxMyBAQAogICAgIGlmIGlzc3ViY2xhc3ModHB3YW50ZWQsIENhcmJvbi5GaWxlLkZTU3BlYyk6CiAgICAgICAgIHJldHVybiB0cHdhbnRlZChyci5zZWxlY3Rpb25bMF0pCiAgICAgaWYgaXNzdWJjbGFzcyh0cHdhbnRlZCwgKHN0ciwgdW5pY29kZSkpOgotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ21hYyc6Ci0gICAgICAgICAgICBmdWxscGF0aCA9IHJyLnNlbGVjdGlvblswXS5hc19wYXRobmFtZSgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgZ3Jvc3MsIGFuZCBwcm9iYWJseSBpbmNvcnJlY3QgdG9vCi0gICAgICAgICAgICB2cmVmbnVtLCBkaXJpZCwgbmFtZSA9IHJyLnNlbGVjdGlvblswXS5hc190dXBsZSgpCi0gICAgICAgICAgICBwYXJkaXJfZnNzID0gQ2FyYm9uLkZpbGUuRlNTcGVjKCh2cmVmbnVtLCBkaXJpZCwgJycpKQotICAgICAgICAgICAgcGFyZGlyX2ZzciA9IENhcmJvbi5GaWxlLkZTUmVmKHBhcmRpcl9mc3MpCi0gICAgICAgICAgICBwYXJkaXJfcGF0aCA9IHBhcmRpcl9mc3IuRlNSZWZNYWtlUGF0aCgpICAjIFRoaXMgaXMgdXRmLTgKLSAgICAgICAgICAgIG5hbWVfdXRmOCA9IHVuaWNvZGUobmFtZSwgJ21hY3JvbWFuJykuZW5jb2RlKCd1dGY4JykKLSAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKHBhcmRpcl9wYXRoLCBuYW1lX3V0ZjgpCisgICAgICAgICMgVGhpcyBpcyBncm9zcywgYW5kIHByb2JhYmx5IGluY29ycmVjdCB0b28KKyAgICAgICAgdnJlZm51bSwgZGlyaWQsIG5hbWUgPSByci5zZWxlY3Rpb25bMF0uYXNfdHVwbGUoKQorICAgICAgICBwYXJkaXJfZnNzID0gQ2FyYm9uLkZpbGUuRlNTcGVjKCh2cmVmbnVtLCBkaXJpZCwgJycpKQorICAgICAgICBwYXJkaXJfZnNyID0gQ2FyYm9uLkZpbGUuRlNSZWYocGFyZGlyX2ZzcykKKyAgICAgICAgcGFyZGlyX3BhdGggPSBwYXJkaXJfZnNyLkZTUmVmTWFrZVBhdGgoKSAgIyBUaGlzIGlzIHV0Zi04CisgICAgICAgIG5hbWVfdXRmOCA9IHVuaWNvZGUobmFtZSwgJ21hY3JvbWFuJykuZW5jb2RlKCd1dGY4JykKKyAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4ocGFyZGlyX3BhdGgsIG5hbWVfdXRmOCkKICAgICAgICAgaWYgaXNzdWJjbGFzcyh0cHdhbnRlZCwgdW5pY29kZSk6CiAgICAgICAgICAgICByZXR1cm4gdW5pY29kZShmdWxscGF0aCwgJ3V0ZjgnKQogICAgICAgICByZXR1cm4gdHB3YW50ZWQoZnVsbHBhdGgpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvRnJhbWVXb3JrLnB5IGIvTGliL3BsYXQtbWFjL0ZyYW1lV29yay5weQppbmRleCA2OTQwMWRkLi5jYThhYWE2IDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvRnJhbWVXb3JrLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9GcmFtZVdvcmsucHkKQEAgLTIxOSw3ICsyMTksNyBAQAogICAgICAgICAgICAgaWYgc2VsZi5kb19kaWFsb2dldmVudChldmVudCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICh3aGF0LCBtZXNzYWdlLCB3aGVuLCB3aGVyZSwgbW9kaWZpZXJzKSA9IGV2ZW50Ci0gICAgICAgIGlmIGV2ZW50bmFtZS5oYXNfa2V5KHdoYXQpOgorICAgICAgICBpZiB3aGF0IGluIGV2ZW50bmFtZToKICAgICAgICAgICAgIG5hbWUgPSAiZG9fIiArIGV2ZW50bmFtZVt3aGF0XQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbmFtZSA9ICJkb18lZCIgJSB3aGF0CkBAIC0yNTAsNyArMjUwLDcgQEAKICAgICAgICAgZ290b25lLCBkbGcsIGl0ZW0gPSBEaWFsb2dTZWxlY3QoZXZlbnQpCiAgICAgICAgIGlmIGdvdG9uZToKICAgICAgICAgICAgIHdpbmRvdyA9IGRsZy5HZXREaWFsb2dXaW5kb3coKQotICAgICAgICAgICAgaWYgc2VsZi5fd2luZG93cy5oYXNfa2V5KHdpbmRvdyk6CisgICAgICAgICAgICBpZiB3aW5kb3cgaW4gc2VsZi5fd2luZG93czoKICAgICAgICAgICAgICAgICBzZWxmLl93aW5kb3dzW3dpbmRvd10uZG9faXRlbWhpdChpdGVtLCBldmVudCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQgJ0RpYWxvZyBldmVudCBmb3IgdW5rbm93biBkaWFsb2cnCkBAIC0yNjQsNyArMjY0LDcgQEAKICAgICAgICAgIwogICAgICAgICAjIEZpbmQgdGhlIGNvcnJlY3QgbmFtZS4KICAgICAgICAgIwotICAgICAgICBpZiBwYXJ0bmFtZS5oYXNfa2V5KHBhcnRjb2RlKToKKyAgICAgICAgaWYgcGFydGNvZGUgaW4gcGFydG5hbWU6CiAgICAgICAgICAgICBuYW1lID0gImRvXyIgKyBwYXJ0bmFtZVtwYXJ0Y29kZV0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG5hbWUgPSAiZG9fJWQiICUgcGFydGNvZGUKQEAgLTI3OSw3ICsyNzksNyBAQAogICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoTWFjT1MsICdIYW5kbGVFdmVudCcpOgogICAgICAgICAgICAgICAgICAgICBNYWNPUy5IYW5kbGVFdmVudChldmVudCkKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZWxpZiBzZWxmLl93aW5kb3dzLmhhc19rZXkod2lkKToKKyAgICAgICAgZWxpZiB3aWQgaW4gc2VsZi5fd2luZG93czoKICAgICAgICAgICAgICMgSXQgaXMgYSB3aW5kb3cuIEhhbmQgb2ZmIHRvIGNvcnJlY3Qgd2luZG93LgogICAgICAgICAgICAgd2luZG93ID0gc2VsZi5fd2luZG93c1t3aWRdCiAgICAgICAgICAgICB0cnk6CkBAIC0zNjYsNyArMzY2LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgU2VlIHdoZXRoZXIgdGhlIGZyb250IHdpbmRvdyB3YW50cyBpdAogICAgICAgICAgICAgdyA9IE15RnJvbnRXaW5kb3coKQotICAgICAgICAgICAgaWYgdyBhbmQgc2VsZi5fd2luZG93cy5oYXNfa2V5KHcpOgorICAgICAgICAgICAgaWYgdyBhbmQgdyBpbiBzZWxmLl93aW5kb3dzOgogICAgICAgICAgICAgICAgIHdpbmRvdyA9IHNlbGYuX3dpbmRvd3Nbd10KICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGRvX2NoYXIgPSB3aW5kb3cuZG9fY2hhcgpAQCAtMzgxLDcgKzM4MSw3IEBACiAgICAgZGVmIGRvX3VwZGF0ZUV2dChzZWxmLCBldmVudCk6CiAgICAgICAgICh3aGF0LCBtZXNzYWdlLCB3aGVuLCB3aGVyZSwgbW9kaWZpZXJzKSA9IGV2ZW50CiAgICAgICAgIHdpZCA9IFdoaWNoV2luZG93KG1lc3NhZ2UpCi0gICAgICAgIGlmIHdpZCBhbmQgc2VsZi5fd2luZG93cy5oYXNfa2V5KHdpZCk6CisgICAgICAgIGlmIHdpZCBhbmQgd2lkIGluIHNlbGYuX3dpbmRvd3M6CiAgICAgICAgICAgICB3aW5kb3cgPSBzZWxmLl93aW5kb3dzW3dpZF0KICAgICAgICAgICAgIHdpbmRvdy5kb19yYXd1cGRhdGUod2lkLCBldmVudCkKICAgICAgICAgZWxzZToKQEAgLTM5MSw3ICszOTEsNyBAQAogICAgIGRlZiBkb19hY3RpdmF0ZUV2dChzZWxmLCBldmVudCk6CiAgICAgICAgICh3aGF0LCBtZXNzYWdlLCB3aGVuLCB3aGVyZSwgbW9kaWZpZXJzKSA9IGV2ZW50CiAgICAgICAgIHdpZCA9IFdoaWNoV2luZG93KG1lc3NhZ2UpCi0gICAgICAgIGlmIHdpZCBhbmQgc2VsZi5fd2luZG93cy5oYXNfa2V5KHdpZCk6CisgICAgICAgIGlmIHdpZCBhbmQgd2lkIGluIHNlbGYuX3dpbmRvd3M6CiAgICAgICAgICAgICB3aW5kb3cgPSBzZWxmLl93aW5kb3dzW3dpZF0KICAgICAgICAgICAgIHdpbmRvdy5kb19hY3RpdmF0ZShtb2RpZmllcnMgJiAxLCBldmVudCkKICAgICAgICAgZWxzZToKQEAgLTQxMSw3ICs0MTEsNyBAQAogICAgIGRlZiBkb19zdXNwZW5kcmVzdW1lKHNlbGYsIGV2ZW50KToKICAgICAgICAgKHdoYXQsIG1lc3NhZ2UsIHdoZW4sIHdoZXJlLCBtb2RpZmllcnMpID0gZXZlbnQKICAgICAgICAgd2lkID0gTXlGcm9udFdpbmRvdygpCi0gICAgICAgIGlmIHdpZCBhbmQgc2VsZi5fd2luZG93cy5oYXNfa2V5KHdpZCk6CisgICAgICAgIGlmIHdpZCBhbmQgd2lkIGluIHNlbGYuX3dpbmRvd3M6CiAgICAgICAgICAgICB3aW5kb3cgPSBzZWxmLl93aW5kb3dzW3dpZF0KICAgICAgICAgICAgIHdpbmRvdy5kb19hY3RpdmF0ZShtZXNzYWdlICYgMSwgZXZlbnQpCiAKQEAgLTQzNSw3ICs0MzUsNyBAQAogICAgIGRlZiBwcmludGV2ZW50KHNlbGYsIGV2ZW50KToKICAgICAgICAgKHdoYXQsIG1lc3NhZ2UsIHdoZW4sIHdoZXJlLCBtb2RpZmllcnMpID0gZXZlbnQKICAgICAgICAgbmljZXdoYXQgPSByZXByKHdoYXQpCi0gICAgICAgIGlmIGV2ZW50bmFtZS5oYXNfa2V5KHdoYXQpOgorICAgICAgICBpZiB3aGF0IGluIGV2ZW50bmFtZToKICAgICAgICAgICAgIG5pY2V3aGF0ID0gZXZlbnRuYW1lW3doYXRdCiAgICAgICAgIHByaW50IG5pY2V3aGF0LAogICAgICAgICBpZiB3aGF0ID09IGtIaWdoTGV2ZWxFdmVudDoKQEAgLTUxNSw3ICs1MTUsNyBAQAogICAgICAgICAgICAgICAgIGxhYmVsLCBzaG9ydGN1dCwgY2FsbGJhY2ssIGtpbmQgPSBtZW51Lml0ZW1zW2ldCiAgICAgICAgICAgICAgICAgaWYgdHlwZShjYWxsYmFjaykgPT0gdHlwZXMuU3RyaW5nVHlwZToKICAgICAgICAgICAgICAgICAgICAgd2lkID0gTXlGcm9udFdpbmRvdygpCi0gICAgICAgICAgICAgICAgICAgIGlmIHdpZCBhbmQgc2VsZi5wYXJlbnQuX3dpbmRvd3MuaGFzX2tleSh3aWQpOgorICAgICAgICAgICAgICAgICAgICBpZiB3aWQgYW5kIHdpZCBpbiBzZWxmLnBhcmVudC5fd2luZG93czoKICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdyA9IHNlbGYucGFyZW50Ll93aW5kb3dzW3dpZF0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIod2luZG93LCAiZG9tZW51XyIgKyBjYWxsYmFjayk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudS5tZW51LkVuYWJsZU1lbnVJdGVtKGkgKyAxKQpAQCAtNTMxLDcgKzUzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBkaXNwYXRjaChzZWxmLCBpZCwgaXRlbSwgd2luZG93LCBldmVudCk6Ci0gICAgICAgIGlmIHNlbGYubWVudXMuaGFzX2tleShpZCk6CisgICAgICAgIGlmIGlkIGluIHNlbGYubWVudXM6CiAgICAgICAgICAgICBzZWxmLm1lbnVzW2lkXS5kaXNwYXRjaChpZCwgaXRlbSwgd2luZG93LCBldmVudCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIERFQlVHOiBwcmludCAiTWVudUJhci5kaXNwYXRjaCglZCwgJWQsICVzLCAlcykiICUgXApAQCAtNjA1LDEyICs2MDUsMTIgQEAKICAgICBkZWYgZGlzcGF0Y2goc2VsZiwgaWQsIGl0ZW0sIHdpbmRvdywgZXZlbnQpOgogICAgICAgICB0aXRsZSwgc2hvcnRjdXQsIGNhbGxiYWNrLCBtdHlwZSA9IHNlbGYuaXRlbXNbaXRlbS0xXQogICAgICAgICBpZiBjYWxsYmFjazoKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmJhci5wYXJlbnQgb3IgdHlwZShjYWxsYmFjaykgPD4gdHlwZXMuU3RyaW5nVHlwZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmJhci5wYXJlbnQgb3IgdHlwZShjYWxsYmFjaykgIT0gdHlwZXMuU3RyaW5nVHlwZToKICAgICAgICAgICAgICAgICBtZW51aGFuZGxlciA9IGNhbGxiYWNrCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgY2FsbGJhY2sgaXMgc3RyaW5nCiAgICAgICAgICAgICAgICAgd2lkID0gTXlGcm9udFdpbmRvdygpCi0gICAgICAgICAgICAgICAgaWYgd2lkIGFuZCBzZWxmLmJhci5wYXJlbnQuX3dpbmRvd3MuaGFzX2tleSh3aWQpOgorICAgICAgICAgICAgICAgIGlmIHdpZCBhbmQgd2lkIGluIHNlbGYuYmFyLnBhcmVudC5fd2luZG93czoKICAgICAgICAgICAgICAgICAgICAgd2luZG93ID0gc2VsZi5iYXIucGFyZW50Ll93aW5kb3dzW3dpZF0KICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cih3aW5kb3csICJkb21lbnVfIiArIGNhbGxiYWNrKToKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVoYW5kbGVyID0gZ2V0YXR0cih3aW5kb3csICJkb21lbnVfIiArIGNhbGxiYWNrKQpAQCAtNzUxLDcgKzc1MSw3IEBACiAgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CiAKICAgICBkZWYgb3BlbihzZWxmLCBib3VuZHM9KDQwLCA0MCwgNDAwLCA0MDApLCByZXNpZD1Ob25lKToKLSAgICAgICAgaWYgcmVzaWQgPD4gTm9uZToKKyAgICAgICAgaWYgcmVzaWQgIT0gTm9uZToKICAgICAgICAgICAgIHNlbGYud2lkID0gR2V0TmV3V2luZG93KHJlc2lkLCAtMSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYud2lkID0gTmV3V2luZG93KGJvdW5kcywgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIDEsCkBAIC04MjksNyArODI5LDcgQEAKICAgICAgICAgIyBJZiB3ZSdyZSBub3QgZnJvbnRtb3N0LCBzZWxlY3Qgb3Vyc2VsdmVzIGFuZCB3YWl0IGZvcgogICAgICAgICAjIHRoZSBhY3RpdmF0ZSBldmVudC4KICAgICAgICAgIwotICAgICAgICBpZiBNeUZyb250V2luZG93KCkgPD4gd2luZG93OgorICAgICAgICBpZiBNeUZyb250V2luZG93KCkgIT0gd2luZG93OgogICAgICAgICAgICAgd2luZG93LlNlbGVjdFdpbmRvdygpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgIyBXZSBhcmUuIEhhbmRsZSB0aGUgZXZlbnQuCkBAIC04NzgsNyArODc4LDcgQEAKICAgICAgICAgaWYgREVCVUc6IHByaW50ICJjb250cm9sIGhpdCBpbiIsIHdpbmRvdywgIm9uIiwgY29udHJvbCwgIjsgcGNvZGUgPSIsIHBjb2RlCiAKICAgICBkZWYgZG9faW5Db250ZW50KHNlbGYsIHBhcnRjb2RlLCB3aW5kb3csIGV2ZW50KToKLSAgICAgICAgaWYgTXlGcm9udFdpbmRvdygpIDw+IHdpbmRvdzoKKyAgICAgICAgaWYgTXlGcm9udFdpbmRvdygpICE9IHdpbmRvdzoKICAgICAgICAgICAgIHdpbmRvdy5TZWxlY3RXaW5kb3coKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICh3aGF0LCBtZXNzYWdlLCB3aGVuLCB3aGVyZSwgbW9kaWZpZXJzKSA9IGV2ZW50CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvTWluaUFFRnJhbWUucHkgYi9MaWIvcGxhdC1tYWMvTWluaUFFRnJhbWUucHkKaW5kZXggOGQ3NThjMy4uZDYxMjZiYiAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL01pbmlBRUZyYW1lLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9NaW5pQUVGcmFtZS5weQpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgICAgICAgX2NsYXNzID0gX2F0dHJpYnV0ZXNbJ2V2Y2wnXS50eXBlCiAgICAgICAgIF90eXBlID0gX2F0dHJpYnV0ZXNbJ2V2aWQnXS50eXBlCiAKLSAgICAgICAgaWYgc2VsZi5hZV9oYW5kbGVycy5oYXNfa2V5KChfY2xhc3MsIF90eXBlKSk6CisgICAgICAgIGlmIChfY2xhc3MsIF90eXBlKSBpbiBzZWxmLmFlX2hhbmRsZXJzOgogICAgICAgICAgICAgX2Z1bmN0aW9uID0gc2VsZi5hZV9oYW5kbGVyc1soX2NsYXNzLCBfdHlwZSldCi0gICAgICAgIGVsaWYgc2VsZi5hZV9oYW5kbGVycy5oYXNfa2V5KChfY2xhc3MsICcqKioqJykpOgorICAgICAgICBlbGlmIChfY2xhc3MsICcqKioqJykgaW4gc2VsZi5hZV9oYW5kbGVyczoKICAgICAgICAgICAgIF9mdW5jdGlvbiA9IHNlbGYuYWVfaGFuZGxlcnNbKF9jbGFzcywgJyoqKionKV0KLSAgICAgICAgZWxpZiBzZWxmLmFlX2hhbmRsZXJzLmhhc19rZXkoKCcqKioqJywgJyoqKionKSk6CisgICAgICAgIGVsaWYgKCcqKioqJywgJyoqKionKSBpbiBzZWxmLmFlX2hhbmRsZXJzOgogICAgICAgICAgICAgX2Z1bmN0aW9uID0gc2VsZi5hZV9oYW5kbGVyc1soJyoqKionLCAnKioqKicpXQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgJ0Nhbm5vdCBoYXBwZW46IEFFIGNhbGxiYWNrIHdpdGhvdXQgaGFuZGxlcicsIChfY2xhc3MsIF90eXBlKQpAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgIF9wYXJhbWV0ZXJzWydfYXR0cmlidXRlcyddID0gX2F0dHJpYnV0ZXMKICAgICAgICAgX3BhcmFtZXRlcnNbJ19jbGFzcyddID0gX2NsYXNzCiAgICAgICAgIF9wYXJhbWV0ZXJzWydfdHlwZSddID0gX3R5cGUKLSAgICAgICAgaWYgX3BhcmFtZXRlcnMuaGFzX2tleSgnLS0tLScpOgorICAgICAgICBpZiAnLS0tLScgaW4gX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBfb2JqZWN0ID0gX3BhcmFtZXRlcnNbJy0tLS0nXQogICAgICAgICAgICAgZGVsIF9wYXJhbWV0ZXJzWyctLS0tJ10KICAgICAgICAgICAgICMgVGhlIHRyeS9leGNlcHQgdGhhdCB1c2VkIHRvIGJlIGhlcmUgY2FuIG1hc2sgcHJvZ3JhbW1lciBlcnJvcnMuCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvYWVwYWNrLnB5IGIvTGliL3BsYXQtbWFjL2FlcGFjay5weQppbmRleCA2MDIxMjgzLi5iYjJhMzdmIDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvYWVwYWNrLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9hZXBhY2sucHkKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgICIiIlVucGFjayBhbiBBRSBkZXNjcmlwdG9yIHRvIGEgcHl0aG9uIG9iamVjdCIiIgogICAgIHQgPSBkZXNjLnR5cGUKIAotICAgIGlmIHVucGFja2VyX2NvZXJjaW9ucy5oYXNfa2V5KHQpOgorICAgIGlmIHQgaW4gdW5wYWNrZXJfY29lcmNpb25zOgogICAgICAgICBkZXNjID0gZGVzYy5BRUNvZXJjZURlc2ModW5wYWNrZXJfY29lcmNpb25zW3RdKQogICAgICAgICB0ID0gZGVzYy50eXBlICMgVGhpcyBpcyBhIGd1ZXNzIGJ5IEphY2suLi4uCiAKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9hZXRvb2xzLnB5IGIvTGliL3BsYXQtbWFjL2FldG9vbHMucHkKaW5kZXggYmYyNzY2My4uNDFkN2EyMSAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL2FldG9vbHMucHkKKysrIGIvTGliL3BsYXQtbWFjL2FldG9vbHMucHkKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICIiIlJlcGxhY2UgbG9uZyBuYW1lIGtleXMgYnkgdGhlaXIgNC1jaGFyIGNvdW50ZXJwYXJ0cywgYW5kIGNoZWNrIiIiCiAgICAgb2sgPSBrZXlkaWN0LnZhbHVlcygpCiAgICAgZm9yIGsgaW4gYXJndW1lbnRzLmtleXMoKToKLSAgICAgICAgaWYga2V5ZGljdC5oYXNfa2V5KGspOgorICAgICAgICBpZiBrIGluIGtleWRpY3Q6CiAgICAgICAgICAgICB2ID0gYXJndW1lbnRzW2tdCiAgICAgICAgICAgICBkZWwgYXJndW1lbnRzW2tdCiAgICAgICAgICAgICBhcmd1bWVudHNba2V5ZGljdFtrXV0gPSB2CkBAIC0xMTksMTEgKzExOSwxMSBAQAogCiBkZWYgZW51bXN1YnN0KGFyZ3VtZW50cywga2V5LCBlZGljdCk6CiAgICAgIiIiU3Vic3RpdHV0ZSBhIHNpbmdsZSBlbnVtIGtleXdvcmQgYXJndW1lbnQsIGlmIGl0IG9jY3VycyIiIgotICAgIGlmIG5vdCBhcmd1bWVudHMuaGFzX2tleShrZXkpIG9yIGVkaWN0IGlzIE5vbmU6CisgICAgaWYga2V5IG5vdCBpbiBhcmd1bWVudHMgb3IgZWRpY3QgaXMgTm9uZToKICAgICAgICAgcmV0dXJuCiAgICAgdiA9IGFyZ3VtZW50c1trZXldCiAgICAgb2sgPSBlZGljdC52YWx1ZXMoKQotICAgIGlmIGVkaWN0Lmhhc19rZXkodik6CisgICAgaWYgdiBpbiBlZGljdDoKICAgICAgICAgYXJndW1lbnRzW2tleV0gPSBFbnVtKGVkaWN0W3ZdKQogICAgIGVsaWYgbm90IHYgaW4gb2s6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgJ1Vua25vd24gZW51bWVyYXRvcjogJXMnJXYKQEAgLTEzMiwxMSArMTMyLDExIEBACiAgICAgIiIiQ3JlYXRlIHRoZSAnYmVzdCcgYXJndW1lbnQgZm9yIGEgcmFpc2UgTWFjT1MuRXJyb3IiIiIKICAgICBlcnJuID0gYXJndW1lbnRzWydlcnJuJ10KICAgICBlcnJfYTEgPSBlcnJuCi0gICAgaWYgYXJndW1lbnRzLmhhc19rZXkoJ2VycnMnKToKKyAgICBpZiAnZXJycycgaW4gYXJndW1lbnRzOgogICAgICAgICBlcnJfYTIgPSBhcmd1bWVudHNbJ2VycnMnXQogICAgIGVsc2U6CiAgICAgICAgIGVycl9hMiA9IE1hY09TLkdldEVycm9yU3RyaW5nKGVycm4pCi0gICAgaWYgYXJndW1lbnRzLmhhc19rZXkoJ2Vyb2InKToKKyAgICBpZiAnZXJvYicgaW4gYXJndW1lbnRzOgogICAgICAgICBlcnJfYTMgPSBhcmd1bWVudHNbJ2Vyb2InXQogICAgIGVsc2U6CiAgICAgICAgIGVycl9hMyA9IE5vbmUKQEAgLTI1MSwxMCArMjUxLDEwIEBACiAKICAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAgICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorICAgICAgICBpZiAnZXJybicgaW4gX2FyZ3VtZW50czoKICAgICAgICAgICAgIHJhaXNlIEVycm9yLCBkZWNvZGVlcnJvcihfYXJndW1lbnRzKQogCi0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorICAgICAgICBpZiAnLS0tLScgaW4gX2FyZ3VtZW50czoKICAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KICAgICAgICAgICAgIGlmIGFzZmlsZToKICAgICAgICAgICAgICAgICBpdGVtLl9fY2xhc3NfXyA9IGFzZmlsZQpAQCAtMjg0LDcgKzI4NCw3IEBACiAgICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6CiAgICAgICAgICAgICByYWlzZSBFcnJvciwgZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKICAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKyAgICAgICAgaWYgJy0tLS0nIGluIF9hcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCiAKICAgICBzZXQgPSBfc2V0CkBAIC0yOTMsMTAgKzI5MywxMCBAQAogICAgICMgbGlrZSB0aGUgImFwcGxpY2F0aW9uIiBjbGFzcyBpbiBPU0EuCiAKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIHNlbGYuX2VsZW1kaWN0Lmhhc19rZXkobmFtZSk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5fZWxlbWRpY3Q6CiAgICAgICAgICAgICBjbHMgPSBzZWxmLl9lbGVtZGljdFtuYW1lXQogICAgICAgICAgICAgcmV0dXJuIERlbGF5ZWRDb21wb25lbnRJdGVtKGNscywgTm9uZSkKLSAgICAgICAgaWYgc2VsZi5fcHJvcGRpY3QuaGFzX2tleShuYW1lKToKKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLl9wcm9wZGljdDoKICAgICAgICAgICAgIGNscyA9IHNlbGYuX3Byb3BkaWN0W25hbWVdCiAgICAgICAgICAgICByZXR1cm4gY2xzKCkKICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsIG5hbWUKQEAgLTMxOCwxMCArMzE4LDEwIEBACiAKICAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAgICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorICAgICAgICBpZiAnZXJybicgaW4gX2FyZ3VtZW50czoKICAgICAgICAgICAgIHJhaXNlIEVycm9yLCBkZWNvZGVlcnJvcihfYXJndW1lbnRzKQogICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorICAgICAgICBpZiAnLS0tLScgaW4gX2FyZ3VtZW50czoKICAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KICNwYXNzCiAKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9hZXR5cGVzLnB5IGIvTGliL3BsYXQtbWFjL2FldHlwZXMucHkKaW5kZXggNWUzNTU1ZS4uZjMzMzE1NiAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL2FldHlwZXMucHkKKysrIGIvTGliL3BsYXQtbWFjL2FldHlwZXMucHkKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgICBzZWxmLmtleXdvcmQgPSAiJS00LjRzIiAlIHN0cihrZXl3b3JkKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIktleXdvcmQoJXIpIiAlIGBzZWxmLmtleXdvcmRgCisgICAgICAgIHJldHVybiAiS2V5d29yZCglcikiICUgcmVwcihzZWxmLmtleXdvcmQpCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHN0cmluZy5zdHJpcChzZWxmLmtleXdvcmQpCkBAIC01MzMsMTAgKzUzMywxMCBAQAogICAgICAgICByZXR1cm4gcwogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBzZWxmLl9lbGVtZGljdC5oYXNfa2V5KG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuX2VsZW1kaWN0OgogICAgICAgICAgICAgY2xzID0gc2VsZi5fZWxlbWRpY3RbbmFtZV0KICAgICAgICAgICAgIHJldHVybiBEZWxheWVkQ29tcG9uZW50SXRlbShjbHMsIHNlbGYpCi0gICAgICAgIGlmIHNlbGYuX3Byb3BkaWN0Lmhhc19rZXkobmFtZSk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5fcHJvcGRpY3Q6CiAgICAgICAgICAgICBjbHMgPSBzZWxmLl9wcm9wZGljdFtuYW1lXQogICAgICAgICAgICAgcmV0dXJuIGNscyhzZWxmKQogICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgbmFtZQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL2FwcGxldHJ1bm5lci5weSBiL0xpYi9wbGF0LW1hYy9hcHBsZXRydW5uZXIucHkKaW5kZXggYTIzNzNhYS4uY2RmZDQxNyAxMDA3NTUKLS0tIGEvTGliL3BsYXQtbWFjL2FwcGxldHJ1bm5lci5weQorKysgYi9MaWIvcGxhdC1tYWMvYXBwbGV0cnVubmVyLnB5CkBAIC00LDcgKzQsNyBAQAogIyB3ZSBhcmUgbm90IHJ1bm5pbmcgaW4gYSBmcmFtZXdvcmsgYnVpbGQuCiAKIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrCi13YXJucHkzaygiSW4gMy54LCBhcHBsZXRydW5uZXIgaXMgcmVtb3ZlZC4iLCBzdGFja2xldmVsPTIpCit3YXJucHkzaygiSW4gMy54LCB0aGUgYXBwbGV0cnVubmVyIG1vZHVsZSBpcyByZW1vdmVkLiIsIHN0YWNrbGV2ZWw9MikKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvYnVpbGR0b29scy5weSBiL0xpYi9wbGF0LW1hYy9idWlsZHRvb2xzLnB5CmluZGV4IGYxMzc0MTEuLmJiYjM3YWIgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9idWlsZHRvb2xzLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9idWlsZHRvb2xzLnB5CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAgICAgICdpY2w4JywgJ2ljczQnLCAnaWNzOCcsICdJQ04jJywgJ2ljcyMnXQogICAgIGlmIG5vdCBjb3B5X2NvZGVmcmFnbWVudDoKICAgICAgICAgc2tpcHR5cGVzLmFwcGVuZCgnY2ZyZycpCi0jIyAgc2tpcG93bmVyID0gKG93bmVydHlwZSA8PiBOb25lKQorIyMgIHNraXBvd25lciA9IChvd25lcnR5cGUgIT0gTm9uZSkKIAogICAgICMgQ29weSB0aGUgcmVzb3VyY2VzIGZyb20gdGhlIHRlbXBsYXRlCiAKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9idW5kbGVidWlsZGVyLnB5IGIvTGliL3BsYXQtbWFjL2J1bmRsZWJ1aWxkZXIucHkKaW5kZXggNDJiYTFlZS4uNDMzOTkxMyAxMDA3NTUKLS0tIGEvTGliL3BsYXQtbWFjL2J1bmRsZWJ1aWxkZXIucHkKKysrIGIvTGliL3BsYXQtbWFjL2J1bmRsZWJ1aWxkZXIucHkKQEAgLTI0NSwxNCArMjQ1LDE0IEBACiAgICAgZGVsIHN5cy5wYXRoWzE6XSAgIyBzeXMucGF0aFswXSBpcyBDb250ZW50cy9SZXNvdXJjZXMvCiAiIiIKIAotaWYgVVNFX1pJUElNUE9SVDoKLSAgICBaSVBfQVJDSElWRSA9ICJNb2R1bGVzLnppcCIKLSAgICBTSVRFX1BZICs9ICJzeXMucGF0aC5hcHBlbmQoc3lzLnBhdGhbMF0gKyAnLyVzJylcbiIgJSBaSVBfQVJDSElWRQotICAgIGRlZiBnZXRQeWNEYXRhKGZ1bGxuYW1lLCBjb2RlLCBpc3BrZyk6Ci0gICAgICAgIGlmIGlzcGtnOgotICAgICAgICAgICAgZnVsbG5hbWUgKz0gIi5fX2luaXRfXyIKLSAgICAgICAgcGF0aCA9IGZ1bGxuYW1lLnJlcGxhY2UoIi4iLCBvcy5zZXApICsgUFlDX0VYVAotICAgICAgICByZXR1cm4gcGF0aCwgTUFHSUMgKyAnXDBcMFwwXDAnICsgbWFyc2hhbC5kdW1wcyhjb2RlKQorWklQX0FSQ0hJVkUgPSAiTW9kdWxlcy56aXAiCitTSVRFX1BZX1pJUCA9IFNJVEVfUFkgKyAoInN5cy5wYXRoLmFwcGVuZChzeXMucGF0aFswXSArICcvJXMnKVxuIiAlIFpJUF9BUkNISVZFKQorCitkZWYgZ2V0UHljRGF0YShmdWxsbmFtZSwgY29kZSwgaXNwa2cpOgorICAgIGlmIGlzcGtnOgorICAgICAgICBmdWxsbmFtZSArPSAiLl9faW5pdF9fIgorICAgIHBhdGggPSBmdWxsbmFtZS5yZXBsYWNlKCIuIiwgb3Muc2VwKSArIFBZQ19FWFQKKyAgICByZXR1cm4gcGF0aCwgTUFHSUMgKyAnXDBcMFwwXDAnICsgbWFyc2hhbC5kdW1wcyhjb2RlKQogCiAjCiAjIEV4dGVuc2lvbiBtb2R1bGVzIGNhbid0IGJlIGluIHRoZSBtb2R1bGVzIHppcCBhcmNoaXZlLCBzbyBhIHBsYWNlaG9sZGVyCkBAIC0yNzMsNyArMjczLDcgQEAKIGRlbCBfX2xvYWQKICIiIgogCi1NQVlNSVNTX01PRFVMRVMgPSBbJ21hYycsICdvczInLCAnbnQnLCAnbnRwYXRoJywgJ2RvcycsICdkb3NwYXRoJywKK01BWU1JU1NfTU9EVUxFUyA9IFsnb3MyJywgJ250JywgJ250cGF0aCcsICdkb3MnLCAnZG9zcGF0aCcsCiAgICAgJ3dpbjMyYXBpJywgJ2NlJywgJ193aW5yZWcnLCAnbnR1cmwycGF0aCcsICdzaXRlY3VzdG9taXplJywKICAgICAnb3JnLnB5dGhvbi5jb3JlJywgJ3Jpc2NvcycsICdyaXNjb3NlbnZpcm9uJywgJ3Jpc2Nvc3BhdGgnCiBdCkBAIC0zMDEsNiArMzAxLDkgQEAKIGxpYmRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoZXhlY2RpciksICJGcmFtZXdvcmtzIikKIG1haW5wcm9ncmFtID0gb3MucGF0aC5qb2luKHJlc2RpciwgIiUobWFpbnByb2dyYW0pcyIpCiAKK2lmICUob3B0aW1pemUpczoKKyAgICBzeXMuYXJndi5pbnNlcnQoMSwgJy1PJykKKwogc3lzLmFyZ3YuaW5zZXJ0KDEsIG1haW5wcm9ncmFtKQogaWYgJShzdGFuZGFsb25lKXMgb3IgJShzZW1pX3N0YW5kYWxvbmUpczoKICAgICBvcy5lbnZpcm9uWyJQWVRIT05QQVRIIl0gPSByZXNkaXIKQEAgLTMxMSw2ICszMTQsNyBAQAogICAgIGlmIHB5cGF0aDoKICAgICAgICAgcHlwYXRoID0gIjoiICsgcHlwYXRoCiAgICAgb3MuZW52aXJvblsiUFlUSE9OUEFUSCJdID0gcmVzZGlyICsgcHlwYXRoCisKIG9zLmVudmlyb25bIlBZVEhPTkVYRUNVVEFCTEUiXSA9IGV4ZWN1dGFibGUKIG9zLmVudmlyb25bIkRZTERfTElCUkFSWV9QQVRIIl0gPSBsaWJkaXIKIG9zLmVudmlyb25bIkRZTERfRlJBTUVXT1JLX1BBVEgiXSA9IGxpYmRpcgpAQCAtMzQ5LDYgKzM1Myw4IEBACiAKIGNsYXNzIEFwcEJ1aWxkZXIoQnVuZGxlQnVpbGRlcik6CiAKKyAgICB1c2VfemlwaW1wb3J0ID0gVVNFX1pJUElNUE9SVAorCiAgICAgIyBPdmVycmlkZSB0eXBlIG9mIHRoZSBidW5kbGUuCiAgICAgdHlwZSA9ICJBUFBMIgogCkBAIC00ODMsNyArNDg5LDcgQEAKICAgICAgICAgICAgICAgICBpZiBzZWxmLnN0YW5kYWxvbmUgb3Igc2VsZi5zZW1pX3N0YW5kYWxvbmU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZU1vZHVsZXMuYXBwZW5kKCJhcmd2ZW11bGF0b3IiKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVNb2R1bGVzLmFwcGVuZCgib3MiKQotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnBsaXN0Lmhhc19rZXkoIkNGQnVuZGxlRG9jdW1lbnRUeXBlcyIpOgorICAgICAgICAgICAgICAgIGlmICJDRkJ1bmRsZURvY3VtZW50VHlwZXMiIG5vdCBpbiBzZWxmLnBsaXN0OgogICAgICAgICAgICAgICAgICAgICBzZWxmLnBsaXN0WyJDRkJ1bmRsZURvY3VtZW50VHlwZXMiXSA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgIHsgIkNGQnVuZGxlVHlwZU9TVHlwZXMiIDogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqKioqIiwKQEAgLTUwNSw2ICs1MTEsNyBAQAogICAgICAgICAgICAgICAgIGhhc2hiYW5nID0gb3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkKICAgICAgICAgICAgIHN0YW5kYWxvbmUgPSBzZWxmLnN0YW5kYWxvbmUKICAgICAgICAgICAgIHNlbWlfc3RhbmRhbG9uZSA9IHNlbGYuc2VtaV9zdGFuZGFsb25lCisgICAgICAgICAgICBvcHRpbWl6ZSA9IHN5cy5mbGFncy5vcHRpbWl6ZQogICAgICAgICAgICAgb3Blbihib290c3RyYXBwYXRoLCAidyIpLndyaXRlKEJPT1RTVFJBUF9TQ1JJUFQgJSBsb2NhbHMoKSkKICAgICAgICAgICAgIG9zLmNobW9kKGJvb3RzdHJhcHBhdGgsIDA3NzUpCiAKQEAgLTU1MSwxMyArNTU4LDE0IEBACiAgICAgICAgICAgICBzZWxmLmZpbGVzLmFwcGVuZCgoc3JjLCBkc3QpKQogCiAgICAgZGVmIF9nZXRTaXRlQ29kZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGNvbXBpbGUoU0lURV9QWSAlIHsic2VtaV9zdGFuZGFsb25lIjogc2VsZi5zZW1pX3N0YW5kYWxvbmV9LAorICAgICAgICBpZiBzZWxmLnVzZV96aXBpbXBvcnQ6CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZShTSVRFX1BZICUgeyJzZW1pX3N0YW5kYWxvbmUiOiBzZWxmLnNlbWlfc3RhbmRhbG9uZX0sCiAgICAgICAgICAgICAgICAgICAgICAiPC1idW5kbGVidWlsZGVyLnB5LT4iLCAiZXhlYyIpCiAKICAgICBkZWYgYWRkUHl0aG9uTW9kdWxlcyhzZWxmKToKICAgICAgICAgc2VsZi5tZXNzYWdlKCJBZGRpbmcgUHl0aG9uIG1vZHVsZXMiLCAxKQogCi0gICAgICAgIGlmIFVTRV9aSVBJTVBPUlQ6CisgICAgICAgIGlmIHNlbGYudXNlX3ppcGltcG9ydDoKICAgICAgICAgICAgICMgQ3JlYXRlIGEgemlwIGZpbGUgY29udGFpbmluZyBhbGwgbW9kdWxlcyBhcyBweWMuCiAgICAgICAgICAgICBpbXBvcnQgemlwZmlsZQogICAgICAgICAgICAgcmVscGF0aCA9IHBhdGhqb2luKCJDb250ZW50cyIsICJSZXNvdXJjZXMiLCBaSVBfQVJDSElWRSkKQEAgLTYyMyw3ICs2MzEsNyBAQAogICAgICAgICBzZWxmLm1lc3NhZ2UoIkZpbmRpbmcgbW9kdWxlIGRlcGVuZGVuY2llcyIsIDEpCiAgICAgICAgIGltcG9ydCBtb2R1bGVmaW5kZXIKICAgICAgICAgbWYgPSBtb2R1bGVmaW5kZXIuTW9kdWxlRmluZGVyKGV4Y2x1ZGVzPXNlbGYuZXhjbHVkZU1vZHVsZXMpCi0gICAgICAgIGlmIFVTRV9aSVBJTVBPUlQ6CisgICAgICAgIGlmIHNlbGYudXNlX3ppcGltcG9ydDoKICAgICAgICAgICAgICMgemlwaW1wb3J0IGltcG9ydHMgemxpYiwgbXVzdCBhZGQgaXQgbWFudWFsbHkKICAgICAgICAgICAgIG1mLmltcG9ydF9ob29rKCJ6bGliIikKICAgICAgICAgIyBtYW51YWxseSBhZGQgb3VyIG93biBzaXRlLnB5CkBAIC02NTcsNyArNjY1LDcgQEAKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKICAgICAgICAgICAgICAgICBwYXRoaXRlbXMgPSBuYW1lLnNwbGl0KCIuIilbOi0xXSArIFtmaWxlbmFtZV0KICAgICAgICAgICAgICAgICBkc3RwYXRoID0gcGF0aGpvaW4oKnBhdGhpdGVtcykKLSAgICAgICAgICAgICAgICBpZiBVU0VfWklQSU1QT1JUOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudXNlX3ppcGltcG9ydDoKICAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSAhPSAiemxpYiI6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIG5lYXRseSBwYWNrIGFsbCBleHRlbnNpb24gbW9kdWxlcyBpbiBhIHN1YmRpcmVjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICMgZXhjZXB0IHpsaWIsIHNpbmNlIGl0J3MgbmVjZXNzYXJ5IGZvciBib290c3RyYXBwaW5nLgpAQCAtNjcxLDkgKzY3OSw5IEBACiAgICAgICAgICAgICAgICAgc2VsZi5maWxlcy5hcHBlbmQoKHBhdGgsIHBhdGhqb2luKCJDb250ZW50cyIsICJSZXNvdXJjZXMiLCBkc3RwYXRoKSkpCiAgICAgICAgICAgICBpZiBtb2QuX19jb2RlX18gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgaXNwa2cgPSBtb2QuX19wYXRoX18gaXMgbm90IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBub3QgVVNFX1pJUElNUE9SVCBvciBuYW1lICE9ICJzaXRlIjoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi51c2VfemlwaW1wb3J0IG9yIG5hbWUgIT0gInNpdGUiOgogICAgICAgICAgICAgICAgICAgICAjIE91ciBzaXRlLnB5IGlzIGRvaW5nIHRoZSBib290c3RyYXBwaW5nLCBzbyB3ZSBtdXN0Ci0gICAgICAgICAgICAgICAgICAgICMgaW5jbHVkZSBhIHJlYWwgLnB5YyBmaWxlIGlmIFVTRV9aSVBJTVBPUlQgaXMgVHJ1ZS4KKyAgICAgICAgICAgICAgICAgICAgIyBpbmNsdWRlIGEgcmVhbCAucHljIGZpbGUgaWYgc2VsZi51c2VfemlwaW1wb3J0IGlzIFRydWUuCiAgICAgICAgICAgICAgICAgICAgIHNlbGYucHltb2R1bGVzLmFwcGVuZCgobmFtZSwgbW9kLl9fY29kZV9fLCBpc3BrZykpCiAKICAgICAgICAgaWYgaGFzYXR0cihtZiwgImFueV9taXNzaW5nX21heWJlIik6CkBAIC04MTksNiArODI3LDcgQEAKICAgICAgIC0tc2VtaS1zdGFuZGFsb25lICBidWlsZCBhIHN0YW5kYWxvbmUgYXBwbGljYXRpb24sIHdoaWNoIGRlcGVuZHMgb24KICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBpbnN0YWxsZWQgUHl0aG9uLCB5ZXQgaW5jbHVkZXMgYWxsIHRoaXJkLXBhcnR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcy4KKyAgICAgIC0tbm8temlwaW1wb3J0ICAgICBEbyBub3QgY29weSBjb2RlIGludG8gYSB6aXAgZmlsZQogICAgICAgLS1weXRob249RklMRSAgICAgIFB5dGhvbiB0byB1c2UgaW4gIyEgbGluZSBpbiBzdGVhZCBvZiBjdXJyZW50IFB5dGhvbgogICAgICAgLS1saWI9RklMRSAgICAgICAgIHNoYXJlZCBsaWJyYXJ5IG9yIGZyYW1ld29yayB0byBiZSBjb3BpZWQgaW50bwogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidW5kbGUKQEAgLTg0Niw3ICs4NTUsOSBAQAogICAgICAgICAibWFpbnByb2dyYW09IiwgImNyZWF0b3I9IiwgIm5pYj0iLCAicGxpc3Q9IiwgImxpbmsiLAogICAgICAgICAibGluay1leGVjIiwgImhlbHAiLCAidmVyYm9zZSIsICJxdWlldCIsICJhcmd2IiwgInN0YW5kYWxvbmUiLAogICAgICAgICAiZXhjbHVkZT0iLCAiaW5jbHVkZT0iLCAicGFja2FnZT0iLCAic3RyaXAiLCAiaWNvbmZpbGU9IiwKLSAgICAgICAgImxpYj0iLCAicHl0aG9uPSIsICJzZW1pLXN0YW5kYWxvbmUiLCAiYnVuZGxlLWlkPSIsICJkZXN0cm9vdD0iKQorICAgICAgICAibGliPSIsICJweXRob249IiwgInNlbWktc3RhbmRhbG9uZSIsICJidW5kbGUtaWQ9IiwgImRlc3Ryb290PSIKKyAgICAgICAgIm5vLXppcGltcG9ydCIKKyAgICAgICAgKQogCiAgICAgdHJ5OgogICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sIHNob3J0b3B0cywgbG9uZ29wdHMpCkBAIC05MTAsNiArOTIxLDggQEAKICAgICAgICAgICAgIGJ1aWxkZXIuc3RyaXAgPSAxCiAgICAgICAgIGVsaWYgb3B0ID09ICctLWRlc3Ryb290JzoKICAgICAgICAgICAgIGJ1aWxkZXIuZGVzdHJvb3QgPSBhcmcKKyAgICAgICAgZWxpZiBvcHQgPT0gJy0tbm8temlwaW1wb3J0JzoKKyAgICAgICAgICAgIGJ1aWxkZXIudXNlX3ppcGltcG9ydCA9IEZhbHNlCiAKICAgICBpZiBsZW4oYXJncykgIT0gMToKICAgICAgICAgdXNhZ2UoIk11c3Qgc3BlY2lmeSBvbmUgY29tbWFuZCAoJ2J1aWxkJywgJ3JlcG9ydCcgb3IgJ2hlbHAnKSIpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvY2ZtZmlsZS5weSBiL0xpYi9wbGF0LW1hYy9jZm1maWxlLnB5CmluZGV4IGRkYmQ0NjguLjI2MjM4ZTkgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9jZm1maWxlLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9jZm1maWxlLnB5CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICAgICAgUmVzLkNsb3NlUmVzRmlsZShyZXNyZWYpCiAgICAgICAgICAgICAgICAgUmVzLlVzZVJlc0ZpbGUoY3VycmVudHJlc3JlZikKICAgICAgICAgICAgIHNlbGYucGFyc2UoZGF0YSkKLSAgICAgICAgICAgIGlmIHNlbGYudmVyc2lvbiA8PiAxOgorICAgICAgICAgICAgaWYgc2VsZi52ZXJzaW9uICE9IDE6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IsICJ1bmtub3duICdjZnJnJyByZXNvdXJjZSBmb3JtYXQiCiAKICAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSk6CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgcmV0dXJuIGRhdGEKIAogICAgIGRlZiBnZXRmcmFnbWVudChzZWxmKToKLSAgICAgICAgaWYgc2VsZi53aGVyZSA8PiAxOgorICAgICAgICBpZiBzZWxmLndoZXJlICE9IDE6CiAgICAgICAgICAgICByYWlzZSBlcnJvciwgImNhbid0IHJlYWQgZnJhZ21lbnQsIHVuc3VwcG9ydGVkIGxvY2F0aW9uIgogICAgICAgICBmID0gb3BlbihzZWxmLnBhdGgsICJyYiIpCiAgICAgICAgIGYuc2VlayhzZWxmLm9mZnNldCkKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgICAgICByZXR1cm4gZnJhZwogCiAgICAgZGVmIGNvcHlkYXRhKHNlbGYsIG91dGZpbGUpOgotICAgICAgICBpZiBzZWxmLndoZXJlIDw+IDE6CisgICAgICAgIGlmIHNlbGYud2hlcmUgIT0gMToKICAgICAgICAgICAgIHJhaXNlIGVycm9yLCAiY2FuJ3QgcmVhZCBmcmFnbWVudCwgdW5zdXBwb3J0ZWQgbG9jYXRpb24iCiAgICAgICAgIGluZmlsZSA9IG9wZW4oc2VsZi5wYXRoLCAicmIiKQogICAgICAgICBpZiBzZWxmLmxlbmd0aCA9PSAwOgpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL2ZpbmRlcnRvb2xzLnB5IGIvTGliL3BsYXQtbWFjL2ZpbmRlcnRvb2xzLnB5CmluZGV4IDU2ZTc5ODAuLjEzNjM1NjIgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9maW5kZXJ0b29scy5weQorKysgYi9MaWIvcGxhdC1tYWMvZmluZGVydG9vbHMucHkKQEAgLTE0Myw5ICsxNDMsOSBAQAogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzAxCiAgICAgYXJnc1siZGF0YSJdID0gY29tbWVudAogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgiY29yZSIsICJzZXRkIiwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiBhcmdzWyctLS0tJ10KIAogZGVmIF9nZXRjb21tZW50KG9iamVjdF9hbGlhcyk6CkBAIC0xNTYsOSArMTU2LDkgQEAKICAgICBhZW9ial8wMSA9IGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyKHdhbnQ9YWV0eXBlcy5UeXBlKCdwcm9wJyksIGZvcm09InByb3AiLCBzZWxkPWFldHlwZXMuVHlwZSgnY29tdCcpLCBmcj1hZW9ial8wMCkKICAgICBhcmdzWyctLS0tJ10gPSBhZW9ial8wMQogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgiY29yZSIsICJnZXRkIiwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiBhcmdzWyctLS0tJ10KIAogCkBAIC0xNzgsMTAgKzE3OCwxMCBAQAogICAgICMjIGdldCB0aGUgcHJvY2Vzc25hbWVzIG9yIGVsc2UgdGhlIHByb2Nlc3NudW1iZXJzCiAgICAgYXJnc1snLS0tLSddID0gYWV0eXBlcy5PYmplY3RTcGVjaWZpZXIod2FudD1hZXR5cGVzLlR5cGUoJ3ByY3MnKSwgZm9ybT0iaW5keCIsIHNlbGQ9YWV0eXBlcy5Vbmtub3duKCdhYnNvJywgImFsbCAiKSwgZnI9Tm9uZSkKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoJ2NvcmUnLCAnZ2V0ZCcsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQogICAgIHAgPSBbXQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICBwID0gIGFyZ3NbJy0tLS0nXQogICAgICAgICBmb3IgcHJvYyBpbiBwOgogICAgICAgICAgICAgaWYgaGFzYXR0cihwcm9jLCAnc2VsZCcpOgpAQCAtMTk3LDkgKzE5Nyw5IEBACiAgICAgYWVvYmpfMCA9IGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyKHdhbnQ9YWV0eXBlcy5UeXBlKCdwcmNzJyksIGZvcm09ImluZHgiLCBzZWxkPWFldHlwZXMuVW5rbm93bignYWJzbycsICJhbGwgIiksIGZyPU5vbmUpCiAgICAgYXJnc1snLS0tLSddID0gIGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyKHdhbnQ9YWV0eXBlcy5UeXBlKCdwcm9wJyksIGZvcm09InByb3AiLCBzZWxkPWFldHlwZXMuVHlwZSgnZmNydCcpLCBmcj1hZW9ial8wKQogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgnY29yZScsICdnZXRkJywgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmcpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHAgPSAgYXJnc1snLS0tLSddCiAgICAgICAgIGNyZWF0b3JzID0gcFs6XQogICAgICMjIGNvbmNhdGVuYXRlIGluIG9uZSBkaWN0CkBAIC0yNTIsOSArMjUyLDkgQEAKICAgICBhZW9ial8wMSA9IGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyKHdhbnQ9YWV0eXBlcy5UeXBlKCdwcm9wJyksIGZvcm09InByb3AiLCBzZWxkPWFldHlwZXMuVHlwZShwcm9wZXJ0eSksIGZyPWFlb2JqXzAwKQogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzAxCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJjb3JlIiwgImdldGQiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcmV0dXJuIGFyZ3NbJy0tLS0nXQogCiAKQEAgLTI3Myw3ICsyNzMsNyBAQAogICAgIGFlb2JqXzAgPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgnY2ZvbCcpLCBmb3JtPSJhbGlzIiwgc2VsZD1vYmplY3RfYWxpYXMsIGZyPU5vbmUpCiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMAogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZChfY29kZSwgX3N1YmNvZGUsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQogCiBkZWYgY2xvc2V3aW5kb3cob2JqZWN0KToKQEAgLTI4OCw3ICsyODgsNyBAQAogICAgIGFlb2JqXzAgPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgnY2ZvbCcpLCBmb3JtPSJhbGlzIiwgc2VsZD1vYmplY3RfYWxpYXMsIGZyPU5vbmUpCiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMAogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZChfY29kZSwgX3N1YmNvZGUsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQogCiBkZWYgbG9jYXRpb24ob2JqZWN0LCBwb3M9Tm9uZSk6CkBAIC0zMTAsNyArMzEwLDcgQEAKICAgICBhcmdzWyctLS0tJ10gPSBhZW9ial8wMQogICAgIGFyZ3NbImRhdGEiXSA9IFt4LCB5XQogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgiY29yZSIsICJzZXRkIiwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCiAgICAgcmV0dXJuICh4LHkpCiAKQEAgLTMyMyw5ICszMjMsOSBAQAogICAgIGFlb2JqXzAxID0gYWV0eXBlcy5PYmplY3RTcGVjaWZpZXIod2FudD1hZXR5cGVzLlR5cGUoJ3Byb3AnKSwgZm9ybT0icHJvcCIsIHNlbGQ9YWV0eXBlcy5UeXBlKCdwb3NuJyksIGZyPWFlb2JqXzAwKQogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzAxCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJjb3JlIiwgImdldGQiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcG9zID0gYXJnc1snLS0tLSddCiAgICAgICAgIHJldHVybiBwb3MuaCwgcG9zLnYKIApAQCAtMzQ4LDkgKzM0OCw5IEBACiAgICAgYWVvYmpfMDEgPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgncHJvcCcpLCBmb3JtPSJwcm9wIiwgc2VsZD1hZXR5cGVzLlR5cGUoJ2xhYmknKSwgZnI9YWVvYmpfMDApCiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMDEKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoImNvcmUiLCAiZ2V0ZCIsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICByZXR1cm4gYXJnc1snLS0tLSddCiAKIGRlZiBfc2V0bGFiZWwob2JqZWN0X2FsaWFzLCBpbmRleCk6CkBAIC0zNjcsNyArMzY3LDcgQEAKICAgICBhcmdzWyctLS0tJ10gPSBhZW9ial8xCiAgICAgYXJnc1siZGF0YSJdID0gaW5kZXgKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoX2NvZGUsIF9zdWJjb2RlLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKICAgICByZXR1cm4gaW5kZXgKIApAQCAtNDA3LDkgKzQwNyw5IEBACiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMgogICAgIGFyZ3NbJ2RhdGEnXSA9IGFlb2JqXzMKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoX2NvZGUsIF9zdWJjb2RlLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcmV0dXJuIGFyZ3NbJy0tLS0nXQogCiBkZWYgX2dldHdpbmRvd3ZpZXcoZm9sZGVyX2FsaWFzKToKQEAgLTQyNCwxMCArNDI0LDEwIEBACiAgICAgYWVvYmpfMDIgPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgncHJvcCcpLCBmb3JtPSJwcm9wIiwgc2VsZD1hZXR5cGVzLlR5cGUoJ3B2ZXcnKSwgZnI9YWVvYmpfMDEpCiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMDIKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoImNvcmUiLCAiZ2V0ZCIsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQogICAgIHZpZXdzID0geydpaW1nJzowLCAncG5hbSc6MSwgJ2xnYnUnOjJ9Ci0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiB2aWV3c1thcmdzWyctLS0tJ10uZW51bV0KIAogZGVmIHdpbmRvd3NpemUoZm9sZGVyLCBzaXplPU5vbmUpOgpAQCAtNDU5LDcgKzQ1OSw3IEBACiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMgogICAgIGFyZ3NbImRhdGEiXSA9IGFldmFyMDAKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoX2NvZGUsIF9zdWJjb2RlLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKICAgICByZXR1cm4gKHcsIGgpCiAKQEAgLTQ3Niw5ICs0NzYsOSBAQAogICAgICAgICAgICAgZm9ybT0icHJvcCIsIHNlbGQ9YWV0eXBlcy5UeXBlKCdwb3NuJyksIGZyPWFlb2JqXzEpCiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMgogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgnY29yZScsICdnZXRkJywgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiBhcmdzWyctLS0tJ10KIAogZGVmIHdpbmRvd3Bvc2l0aW9uKGZvbGRlciwgcG9zPU5vbmUpOgpAQCAtNTA3LDkgKzUwNyw5IEBACiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMgogICAgIGFyZ3NbImRhdGEiXSA9IFt4LCB5XQogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgnY29yZScsICdzZXRkJywgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiBhcmdzWyctLS0tJ10KIAogZGVmIF9nZXR3aW5kb3dwb3NpdGlvbihmb2xkZXJfYWxpYXMpOgpAQCAtNTI1LDkgKzUyNSw5IEBACiAgICAgICAgICAgICBmb3JtPSJwcm9wIiwgc2VsZD1hZXR5cGVzLlR5cGUoJ3B0c3onKSwgZnI9YWVvYmpfMSkKICAgICBhcmdzWyctLS0tJ10gPSBhZW9ial8yCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCdjb3JlJywgJ2dldGQnLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcmV0dXJuIGFyZ3NbJy0tLS0nXQogCiBkZWYgaWNvbihvYmplY3QsIGljb25kYXRhPU5vbmUpOgpAQCAtNTUyLDkgKzU1Miw5IEBACiAgICAgICAgICAgICBmb3JtPSJwcm9wIiwgc2VsZD1hZXR5cGVzLlR5cGUoJ2lpbWcnKSwgZnI9YWVvYmpfMDApCiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMDEKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoImNvcmUiLCAiZ2V0ZCIsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICByZXR1cm4gYXJnc1snLS0tLSddCiAKIGRlZiBfc2V0aWNvbihvYmplY3RfYWxpYXMsIGljb25kYXRhKToKQEAgLTU2OSw5ICs1NjksOSBAQAogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzAxCiAgICAgYXJnc1siZGF0YSJdID0gaWNvbmRhdGEKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoImNvcmUiLCAic2V0ZCIsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICByZXR1cm4gYXJnc1snLS0tLSddLmRhdGEKIAogCkBAIC01OTQsOSArNTk0LDkgQEAKICAgICAgICAgYXJnc1siU1JWUiJdID0gc2VydmVyCiAgICAgYXJnc1snLS0tLSddID0gdm9sdW1lCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJhZXZ0IiwgIm12b2wiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcmV0dXJuIGFyZ3NbJy0tLS0nXQogCiBkZWYgdW5tb3VudHZvbHVtZSh2b2x1bWUpOgpAQCAtNjEwLDkgKzYxMCw5IEBACiAgICAgYXR0cnMgPSB7fQogICAgIGFyZ3NbJy0tLS0nXSA9IGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyKHdhbnQ9YWV0eXBlcy5UeXBlKCdjZGlzJyksIGZvcm09Im5hbWUiLCBzZWxkPW9iamVjdCwgZnI9Tm9uZSkKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gdGFsa2VyLnNlbmQoImZuZHIiLCAicHR3eSIsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICByZXR1cm4gYXJnc1snLS0tLSddCiAKIApAQCAtNjMxLDkgKzYzMSw5IEBACiAgICAgICAgIGxldmVsID0gNwogICAgIGFyZ3NbJy0tLS0nXSA9IGxldmVsCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJhZXZ0IiwgInN0dmwiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcmV0dXJuIGFyZ3NbJy0tLS0nXQogCiBkZWYgT1N2ZXJzaW9uKCk6CkBAIC02NDQsOSArNjQ0LDkgQEAKICAgICBhZW9ial8wMCA9IGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyKHdhbnQ9YWV0eXBlcy5UeXBlKCdwcm9wJyksIGZvcm09InByb3AiLCBzZWxkPWFldHlwZXMuVHlwZSgndmVyMicpLCBmcj1Ob25lKQogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzAwCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJjb3JlIiwgImdldGQiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcmV0dXJuIGFyZ3NbJy0tLS0nXQogCiBkZWYgZmlsZXNoYXJpbmcoKToKQEAgLTY2MSw5ICs2NjEsOSBAQAogICAgIGF0dHJzID0ge30KICAgICBhcmdzWyctLS0tJ10gPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgncHJvcCcpLCBmb3JtPSJwcm9wIiwgc2VsZD1hZXR5cGVzLlR5cGUoJ2ZzaHInKSwgZnI9Tm9uZSkKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoImNvcmUiLCAiZ2V0ZCIsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICBpZiBhcmdzWyctLS0tJ10gPT0gMDoKICAgICAgICAgICAgIHN0YXR1cyA9IC0xCiAgICAgICAgIGVsc2U6CkBAIC02NzMsOSArNjczLDkgQEAKICAgICBhdHRycyA9IHt9CiAgICAgYXJnc1snLS0tLSddID0gYWV0eXBlcy5PYmplY3RTcGVjaWZpZXIod2FudD1hZXR5cGVzLlR5cGUoJ3Byb3AnKSwgZm9ybT0icHJvcCIsIHNlbGQ9YWV0eXBlcy5UeXBlKCdmc3VwJyksIGZyPU5vbmUpCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJjb3JlIiwgImdldGQiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgaWYgYXJnc1snLS0tLSddID09IDE6CiAgICAgICAgICAgICBzdGF0dXMgPSAwCiAgICAgcmV0dXJuIHN0YXR1cwpAQCAtNjkzLDcgKzY5Myw3IEBACiAgICAgYXR0cnMgPSB7fQogICAgIGFyZ3NbJy0tLS0nXSA9IGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyKHdhbnQ9YWV0eXBlcy5UeXBlKCdwcm9wJyksIGZvcm09InByb3AiLCBzZWxkPWFldHlwZXMuVHlwZSgndHJzaCcpLCBmcj1Ob25lKQogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgiZm5kciIsICJlbXB0IiwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKIAogCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvZ2Vuc3VpdGVtb2R1bGUucHkgYi9MaWIvcGxhdC1tYWMvZ2Vuc3VpdGVtb2R1bGUucHkKaW5kZXggMjhlYmVhNi4uMmJhZTA4YSAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL2dlbnN1aXRlbW9kdWxlLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9nZW5zdWl0ZW1vZHVsZS5weQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgICBhZXRlID0gZGVjb2RlKGRhdGEsIHZlcmJvc2UpCiAgICAgICAgICAgICBhZXRlbGlzdC5hcHBlbmQoKGFldGUsIHJlcy5HZXRSZXNJbmZvKCkpKQogICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIHJmIDw+IGN1cjoKKyAgICAgICAgaWYgcmYgIT0gY3VyOgogICAgICAgICAgICAgQ2xvc2VSZXNGaWxlKHJmKQogICAgICAgICAgICAgVXNlUmVzRmlsZShjdXIpCiAgICAgIyBzd2l0Y2ggYmFjayAobmVlZGVkIGZvciBkaWFsb2dzIGluIFB5dGhvbikKQEAgLTMzNSw3ICszMzUsNyBAQAogZGVmIGdldGFsaWduKGYpOgogICAgIGlmIGYudGVsbCgpICYgMToKICAgICAgICAgYyA9IGYucmVhZCgxKQotICAgICAgICAjI2lmIGMgPD4gJ1wwJzoKKyAgICAgICAgIyNpZiBjICE9ICdcMCc6CiAgICAgICAgICMjICBwcmludCBhbGlnbjonLCByZXByKGMpCiAKIGRlZiBnZXRsaXN0KGYsIGRlc2NyaXB0aW9uLCBnZXRpdGVtKToKQEAgLTU5Miw3ICs1OTIsNyBAQAogCiAgICAgICAgIHNlbGYubW9kbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5zcGxpdChzZWxmLnBhdGhuYW1lKVsxXSlbMF0KIAotICAgICAgICBpZiBzZWxmLmJhc2VwYWNrYWdlIGFuZCBzZWxmLmJhc2VwYWNrYWdlLl9jb2RlX3RvX21vZHVsZS5oYXNfa2V5KGNvZGUpOgorICAgICAgICBpZiBzZWxmLmJhc2VwYWNrYWdlIGFuZCBjb2RlIGluIHNlbGYuYmFzZXBhY2thZ2UuX2NvZGVfdG9fbW9kdWxlOgogICAgICAgICAgICAgIyBXZSBhcmUgYW4gZXh0ZW5zaW9uIG9mIGEgYmFzZWNsYXNzICh1c3VhbGx5IGFuIGFwcGxpY2F0aW9uIGV4dGVuZGluZwogICAgICAgICAgICAgIyBTdGFuZGFyZF9TdWl0ZSBvciBzbykuIEltcG9ydCBldmVyeXRoaW5nIGZyb20gb3VyIGJhc2UgbW9kdWxlCiAgICAgICAgICAgICBiYXNlbW9kdWxlID0gc2VsZi5iYXNlcGFja2FnZS5fY29kZV90b19tb2R1bGVbY29kZV0KQEAgLTY1OSwxMiArNjU5LDEyIEBACiAgICAgICAgIGZwLndyaXRlKCdpbXBvcnQgYWV0b29sc1xuJykKICAgICAgICAgZnAud3JpdGUoJ2ltcG9ydCBNYWNPU1xuXG4nKQogICAgICAgICBmcC53cml0ZSgiX2NvZGUgPSAlclxuXG4iJSAoY29kZSwpKQotICAgICAgICBpZiBzZWxmLmJhc2VwYWNrYWdlIGFuZCBzZWxmLmJhc2VwYWNrYWdlLl9jb2RlX3RvX21vZHVsZS5oYXNfa2V5KGNvZGUpOgorICAgICAgICBpZiBzZWxmLmJhc2VwYWNrYWdlIGFuZCBjb2RlIGluIHNlbGYuYmFzZXBhY2thZ2UuX2NvZGVfdG9fbW9kdWxlOgogICAgICAgICAgICAgIyBXZSBhcmUgYW4gZXh0ZW5zaW9uIG9mIGEgYmFzZWNsYXNzICh1c3VhbGx5IGFuIGFwcGxpY2F0aW9uIGV4dGVuZGluZwogICAgICAgICAgICAgIyBTdGFuZGFyZF9TdWl0ZSBvciBzbykuIEltcG9ydCBldmVyeXRoaW5nIGZyb20gb3VyIGJhc2UgbW9kdWxlCiAgICAgICAgICAgICBmcC53cml0ZSgnZnJvbSAlcyBpbXBvcnQgKlxuJyVzZWxmLmJhc2VwYWNrYWdlLl9jb2RlX3RvX2Z1bGxuYW1lW2NvZGVdWzBdKQogICAgICAgICAgICAgYmFzZW1vZHVsZSA9IHNlbGYuYmFzZXBhY2thZ2UuX2NvZGVfdG9fbW9kdWxlW2NvZGVdCi0gICAgICAgIGVsaWYgc2VsZi5iYXNlcGFja2FnZSBhbmQgc2VsZi5iYXNlcGFja2FnZS5fY29kZV90b19tb2R1bGUuaGFzX2tleShjb2RlLmxvd2VyKCkpOgorICAgICAgICBlbGlmIHNlbGYuYmFzZXBhY2thZ2UgYW5kIGNvZGUubG93ZXIoKSBpbiBzZWxmLmJhc2VwYWNrYWdlLl9jb2RlX3RvX21vZHVsZToKICAgICAgICAgICAgICMgVGhpcyBpcyBuZWVkZWQgYnkgQ29kZVdhcnJpb3IgYW5kIHNvbWUgb3RoZXJzLgogICAgICAgICAgICAgZnAud3JpdGUoJ2Zyb20gJXMgaW1wb3J0ICpcbiclc2VsZi5iYXNlcGFja2FnZS5fY29kZV90b19mdWxsbmFtZVtjb2RlLmxvd2VyKCldWzBdKQogICAgICAgICAgICAgYmFzZW1vZHVsZSA9IHNlbGYuYmFzZXBhY2thZ2UuX2NvZGVfdG9fbW9kdWxlW2NvZGUubG93ZXIoKV0KQEAgLTc4Miw3ICs3ODIsNyBAQAogICAgICAgICAgICAgaWYgaXNfZW51bShhWzJdKToKICAgICAgICAgICAgICAgICBrbmFtZSA9IGFbMV0KICAgICAgICAgICAgICAgICBlbmFtZSA9IGFbMl1bMF0KLSAgICAgICAgICAgICAgICBpZiBlbmFtZSA8PiAnKioqKic6CisgICAgICAgICAgICAgICAgaWYgZW5hbWUgIT0gJyoqKionOgogICAgICAgICAgICAgICAgICAgICBmcC53cml0ZSgiICAgICAgICBhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAlciwgX0VudW1fJXMpXG4iICUKICAgICAgICAgICAgICAgICAgICAgICAgIChrbmFtZSwgaWRlbnRpZnkoZW5hbWUpKSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnVtc25lZWRlZFtlbmFtZV0gPSAxCkBAIC04MDEsNyArODAxLDcgQEAKICAgICAgICAgIwogICAgICAgICAjIERlY29kZSByZXN1bHQKICAgICAgICAgIwotICAgICAgICBmcC53cml0ZSgiICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKTpcbiIpCisgICAgICAgIGZwLndyaXRlKCIgICAgICAgIGlmICctLS0tJyBpbiBfYXJndW1lbnRzOlxuIikKICAgICAgICAgaWYgaXNfZW51bShyZXR1cm5zKToKICAgICAgICAgICAgIGZwLndyaXRlKCIgICAgICAgICAgICAjIFhYWFggU2hvdWxkIGRvIGVudW0gcmVtYXBwaW5nIGhlcmUuLi5cbiIpCiAgICAgICAgIGZwLndyaXRlKCIgICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddXG4iKQpAQCAtODEzLDcgKzgxMyw3IEBACiAgICAgICAgIGZvciBhIGluIGFyZ3VtZW50czoKICAgICAgICAgICAgIGlmIGlzX2VudW0oYVsyXSk6CiAgICAgICAgICAgICAgICAgZW5hbWUgPSBhWzJdWzBdCi0gICAgICAgICAgICAgICAgaWYgZW5hbWUgPD4gJyoqKionOgorICAgICAgICAgICAgICAgIGlmIGVuYW1lICE9ICcqKioqJzoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnVtc25lZWRlZFtlbmFtZV0gPSAxCiAKICMKQEAgLTg0NSwxNyArODQ1LDE3IEBACiAKICAgICBkZWYgYWRkbmFtZWNvZGUoc2VsZiwgdHlwZSwgbmFtZSwgY29kZSk6CiAgICAgICAgIHNlbGYubmFtZTJjb2RlW3R5cGVdW25hbWVdID0gY29kZQotICAgICAgICBpZiBub3Qgc2VsZi5jb2RlMm5hbWVbdHlwZV0uaGFzX2tleShjb2RlKToKKyAgICAgICAgaWYgY29kZSBub3QgaW4gc2VsZi5jb2RlMm5hbWVbdHlwZV06CiAgICAgICAgICAgICBzZWxmLmNvZGUybmFtZVt0eXBlXVtjb2RlXSA9IG5hbWUKIAogICAgIGRlZiBoYXNuYW1lKHNlbGYsIG5hbWUpOgogICAgICAgICBmb3IgZGljdCBpbiBzZWxmLm5hbWUyY29kZS52YWx1ZXMoKToKLSAgICAgICAgICAgIGlmIGRpY3QuaGFzX2tleShuYW1lKToKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gZGljdDoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRlZiBoYXNjb2RlKHNlbGYsIHR5cGUsIGNvZGUpOgotICAgICAgICByZXR1cm4gc2VsZi5jb2RlMm5hbWVbdHlwZV0uaGFzX2tleShjb2RlKQorICAgICAgICByZXR1cm4gY29kZSBpbiBzZWxmLmNvZGUybmFtZVt0eXBlXQogCiAgICAgZGVmIGZpbmRjb2RlbmFtZShzZWxmLCB0eXBlLCBjb2RlKToKICAgICAgICAgaWYgbm90IHNlbGYuaGFzY29kZSh0eXBlLCBjb2RlKToKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9pYy5weSBiL0xpYi9wbGF0LW1hYy9pYy5weQppbmRleCA4MzM3ZjJkLi4zMjFlYmE4IDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvaWMucHkKKysrIGIvTGliL3BsYXQtbWFjL2ljLnB5CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAga2V5MiA9IGtleVs6c3RyaW5nLmluZGV4KGtleSwgJ1wyNDUnKSsxXQogICAgIGVsc2U6CiAgICAgICAgIGtleTIgPSBrZXkKLSAgICBpZiBfZGVjb2Rlcl90YWJsZS5oYXNfa2V5KGtleTIpOgorICAgIGlmIGtleTIgaW4gX2RlY29kZXJfdGFibGU6CiAgICAgICAgIGRlY29kZXIgPSBfZGVjb2Rlcl90YWJsZVtrZXkyXVswXQogICAgIGVsc2U6CiAgICAgICAgIGRlY29kZXIgPSBfZGVjb2RlX2RlZmF1bHQKQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgICAgICBrZXkyID0ga2V5WzpzdHJpbmcuaW5kZXgoa2V5LCAnXDI0NScpKzFdCiAgICAgZWxzZToKICAgICAgICAga2V5MiA9IGtleQotICAgIGlmIF9kZWNvZGVyX3RhYmxlLmhhc19rZXkoa2V5Mik6CisgICAgaWYga2V5MiBpbiBfZGVjb2Rlcl90YWJsZToKICAgICAgICAgY29kZXIgPSBfZGVjb2Rlcl90YWJsZVtrZXkyXVsxXQogICAgIGVsc2U6CiAgICAgICAgIGNvZGVyID0gX2NvZGVfZGVmYXVsdApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL21hY2Vycm9ycy5weSBiL0xpYi9wbGF0LW1hYy9tYWNlcnJvcnMucHkKaW5kZXggZGUxYzFlMi4uNThkNzlkNiAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL21hY2Vycm9ycy5weQorKysgYi9MaWIvcGxhdC1tYWMvbWFjZXJyb3JzLnB5CkBAIC0xNTc5LDcgKzE1NzksNyBAQAogc21GSEJsb2NrUmRFcnIgID0gICAtMzEwICAgICNFcnJvciBvY2N1cnJlZCBkdXJpbmcgX3NHZXRGSGVhZGVyLgogc21CTEZpZWxkQmFkICAgID0gICAtMzA5ICAgICNCeXRlTGFuZXMgZmllbGQgd2FzIGJhZC4KIHNtVW5FeEJ1c0VyciAgICA9ICAgLTMwOCAgICAjVW5leHBlY3RlZCBCdXNFcnJvcgotc21SZXNydkVyciAgPSAgIC0zMDcgICAgI0ZhdGFsIHJlc2VydmVkIGVycm9yLiBSZXNyZXZlZCBmaWVsZCA8PiAwLgorc21SZXNydkVyciAgPSAgIC0zMDcgICAgI0ZhdGFsIHJlc2VydmVkIGVycm9yLiBSZXNlcnZlZCBmaWVsZCAhPSAwLgogc21Ob3NJbmZvQXJyYXkgID0gICAtMzA2ICAgICNObyBzSW5mb0FycmF5LiBNZW1vcnkgTWdyIGVycm9yLgogc21EaXNhYmxlZFNsb3QgID0gICAtMzA1ICAgICNUaGlzIHNsb3QgaXMgZGlzYWJsZWQgKC0zMDUgdXNlIHRvIGJlIHNtTFdUc3RCYWQpCiBzbU5vRGlyID0gICAtMzA0ICAgICNEaXJlY3Rvcnkgb2Zmc2V0IGlzIE5pbApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL21hY3Jlc291cmNlLnB5IGIvTGliL3BsYXQtbWFjL21hY3Jlc291cmNlLnB5CmluZGV4IGJiOWUyZDkuLjNiNDhkNGIgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9tYWNyZXNvdXJjZS5weQorKysgYi9MaWIvcGxhdC1tYWMvbWFjcmVzb3VyY2UucHkKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBpZiBtb2RuYW1lID09ICdfX21haW5fXyc6CiAgICAgICAgICMgSWYgd2UncmUgbWFpbiB3ZSBsb29rIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQogICAgICAgICBzZWFyY2hkaXJzID0gW29zLmN1cmRpcl0KLSAgICBpZiBzeXMubW9kdWxlcy5oYXNfa2V5KG1vZG5hbWUpOgorICAgIGlmIG1vZG5hbWUgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW21vZG5hbWVdCiAgICAgICAgIGlmIGhhc2F0dHIobW9kLCAnX19maWxlX18nKToKICAgICAgICAgICAgIHNlYXJjaGRpcnMgPSBbb3MucGF0aC5kaXJuYW1lKG1vZC5fX2ZpbGVfXyldCkBAIC03Nyw1MiArNzcsMzggQEAKIGRlZiBvcGVuX3BhdGhuYW1lKHBhdGhuYW1lLCB2ZXJib3NlPTApOgogICAgICIiIk9wZW4gYSByZXNvdXJjZSBmaWxlIGdpdmVuIGJ5IHBhdGhuYW1lLCBwb3NzaWJseSBkZWNvZGluZyBhbgogICAgIEFwcGxlU2luZ2xlIGZpbGUiIiIKKyAgICAjIE5vIHJlc291cmNlIGZvcmsuIFdlIG1heSBiZSBvbiBPU1gsIGFuZCB0aGlzIG1heSBiZSBlaXRoZXIKKyAgICAjIGEgZGF0YS1mb3JrIGJhc2VkIHJlc291cmNlIGZpbGUgb3IgYSBBcHBsZVNpbmdsZSBmaWxlCisgICAgIyBmcm9tIHRoZSBDVlMgcmVwb3NpdG9yeS4KICAgICB0cnk6Ci0gICAgICAgIHJlZm5vID0gUmVzLkZTcE9wZW5SZXNGaWxlKHBhdGhuYW1lLCAxKQotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFJlcy5FcnJvciksIGFyZzoKLSAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIEF0dHJpYnV0ZUVycm9yKSBvciBhcmdbMF0gaW4gKC0zNywgLTM5KToKLSAgICAgICAgICAgICMgTm8gcmVzb3VyY2UgZm9yay4gV2UgbWF5IGJlIG9uIE9TWCwgYW5kIHRoaXMgbWF5IGJlIGVpdGhlcgotICAgICAgICAgICAgIyBhIGRhdGEtZm9yayBiYXNlZCByZXNvdXJjZSBmaWxlIG9yIGEgQXBwbGVTaW5nbGUgZmlsZQotICAgICAgICAgICAgIyBmcm9tIHRoZSBDVlMgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZWZubyA9IFJlcy5GU09wZW5SZXNvdXJjZUZpbGUocGF0aG5hbWUsIHUnJywgMSkKLSAgICAgICAgICAgIGV4Y2VwdCBSZXMuRXJyb3IsIGFyZzoKLSAgICAgICAgICAgICAgICBpZiBhcmdbMF0gIT0gLTE5OToKLSAgICAgICAgICAgICAgICAgICAgIyAtMTk5IGlzICJiYWQgcmVzb3VyY2UgbWFwIgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVmbm8KLSAgICAgICAgICAgICMgRmluYWxseSB0cnkgZGVjb2RpbmcgYW4gQXBwbGVTaW5nbGUgZmlsZQotICAgICAgICAgICAgcGF0aG5hbWUgPSBfZGVjb2RlKHBhdGhuYW1lLCB2ZXJib3NlPXZlcmJvc2UpCi0gICAgICAgICAgICByZWZubyA9IFJlcy5GU09wZW5SZXNvdXJjZUZpbGUocGF0aG5hbWUsIHUnJywgMSkKLSAgICAgICAgZWxzZToKKyAgICAgICAgcmVmbm8gPSBSZXMuRlNPcGVuUmVzb3VyY2VGaWxlKHBhdGhuYW1lLCB1JycsIDEpCisgICAgZXhjZXB0IFJlcy5FcnJvciwgYXJnOgorICAgICAgICBpZiBhcmdbMF0gIT0gLTE5OToKKyAgICAgICAgICAgICMgLTE5OSBpcyAiYmFkIHJlc291cmNlIG1hcCIKICAgICAgICAgICAgIHJhaXNlCi0gICAgcmV0dXJuIHJlZm5vCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHJlZm5vCisgICAgIyBGaW5hbGx5IHRyeSBkZWNvZGluZyBhbiBBcHBsZVNpbmdsZSBmaWxlCisgICAgcGF0aG5hbWUgPSBfZGVjb2RlKHBhdGhuYW1lLCB2ZXJib3NlPXZlcmJvc2UpCisgICAgcmVmbm8gPSBSZXMuRlNPcGVuUmVzb3VyY2VGaWxlKHBhdGhuYW1lLCB1JycsIDEpCiAKIGRlZiByZXNvdXJjZV9wYXRobmFtZShwYXRobmFtZSwgdmVyYm9zZT0wKToKICAgICAiIiJSZXR1cm4gdGhlIHBhdGhuYW1lIGZvciBhIHJlc291cmNlIGZpbGUgKGVpdGhlciBERiBvciBSRiBiYXNlZCkuCiAgICAgSWYgdGhlIHBhdGhuYW1lIGdpdmVuIGFscmVhZHkgcmVmZXJzIHRvIHN1Y2ggYSBmaWxlIHNpbXBseSByZXR1cm4gaXQsCiAgICAgb3RoZXJ3aXNlIGZpcnN0IGRlY29kZSBpdC4iIiIKKyAgICAjIE5vIHJlc291cmNlIGZvcmsuIFdlIG1heSBiZSBvbiBPU1gsIGFuZCB0aGlzIG1heSBiZSBlaXRoZXIKKyAgICAjIGEgZGF0YS1mb3JrIGJhc2VkIHJlc291cmNlIGZpbGUgb3IgYSBBcHBsZVNpbmdsZSBmaWxlCisgICAgIyBmcm9tIHRoZSBDVlMgcmVwb3NpdG9yeS4KICAgICB0cnk6Ci0gICAgICAgIHJlZm5vID0gUmVzLkZTcE9wZW5SZXNGaWxlKHBhdGhuYW1lLCAxKQotICAgICAgICBSZXMuQ2xvc2VSZXNGaWxlKHJlZm5vKQotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFJlcy5FcnJvciksIGFyZzoKLSAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIEF0dHJpYnV0ZUVycm9yKSBvciBhcmdbMF0gaW4gKC0zNywgLTM5KToKLSAgICAgICAgICAgICMgTm8gcmVzb3VyY2UgZm9yay4gV2UgbWF5IGJlIG9uIE9TWCwgYW5kIHRoaXMgbWF5IGJlIGVpdGhlcgotICAgICAgICAgICAgIyBhIGRhdGEtZm9yayBiYXNlZCByZXNvdXJjZSBmaWxlIG9yIGEgQXBwbGVTaW5nbGUgZmlsZQotICAgICAgICAgICAgIyBmcm9tIHRoZSBDVlMgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZWZubyA9IFJlcy5GU09wZW5SZXNvdXJjZUZpbGUocGF0aG5hbWUsIHUnJywgMSkKLSAgICAgICAgICAgIGV4Y2VwdCBSZXMuRXJyb3IsIGFyZzoKLSAgICAgICAgICAgICAgICBpZiBhcmdbMF0gIT0gLTE5OToKLSAgICAgICAgICAgICAgICAgICAgIyAtMTk5IGlzICJiYWQgcmVzb3VyY2UgbWFwIgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVmbm8KLSAgICAgICAgICAgICMgRmluYWxseSB0cnkgZGVjb2RpbmcgYW4gQXBwbGVTaW5nbGUgZmlsZQotICAgICAgICAgICAgcGF0aG5hbWUgPSBfZGVjb2RlKHBhdGhuYW1lLCB2ZXJib3NlPXZlcmJvc2UpCi0gICAgICAgIGVsc2U6CisgICAgICAgIHJlZm5vID0gUmVzLkZTT3BlblJlc291cmNlRmlsZShwYXRobmFtZSwgdScnLCAxKQorICAgIGV4Y2VwdCBSZXMuRXJyb3IsIGFyZzoKKyAgICAgICAgaWYgYXJnWzBdICE9IC0xOTk6CisgICAgICAgICAgICAjIC0xOTkgaXMgImJhZCByZXNvdXJjZSBtYXAiCiAgICAgICAgICAgICByYWlzZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiByZWZubworICAgICMgRmluYWxseSB0cnkgZGVjb2RpbmcgYW4gQXBwbGVTaW5nbGUgZmlsZQorICAgIHBhdGhuYW1lID0gX2RlY29kZShwYXRobmFtZSwgdmVyYm9zZT12ZXJib3NlKQogICAgIHJldHVybiBwYXRobmFtZQogCiBkZWYgb3Blbl9lcnJvcl9yZXNvdXJjZSgpOgpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL3BpbXAucHkgYi9MaWIvcGxhdC1tYWMvcGltcC5weQppbmRleCA1ZmMxNmYwLi45YTNlODJlIDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvcGltcC5weQorKysgYi9MaWIvcGxhdC1tYWMvcGltcC5weQpAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgICAgIHNlbGYudXBkYXRlKCJEb3dubG9hZGluZyAlczogb3BlbmluZyBjb25uZWN0aW9uIiAlIHVybCkKICAgICAgICAga2VlcGdvaW5nID0gVHJ1ZQogICAgICAgICBkb3dubG9hZCA9IHVybGxpYjIudXJsb3Blbih1cmwpCi0gICAgICAgIGlmIGRvd25sb2FkLmhlYWRlcnMuaGFzX2tleSgiY29udGVudC1sZW5ndGgiKToKKyAgICAgICAgaWYgJ2NvbnRlbnQtbGVuZ3RoJyBpbiBkb3dubG9hZC5oZWFkZXJzOgogICAgICAgICAgICAgbGVuZ3RoID0gbG9uZyhkb3dubG9hZC5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGVuZ3RoID0gLTEKQEAgLTQyMCw3ICs0MjAsNyBAQAogCiAgICAgICAgIGZvciBwIGluIHBhY2thZ2VzOgogICAgICAgICAgICAgcCA9IGRpY3QocCkKLSAgICAgICAgICAgIGlmIHAuaGFzX2tleSgnRG93bmxvYWQtVVJMJyk6CisgICAgICAgICAgICBpZiAnRG93bmxvYWQtVVJMJyBpbiBwOgogICAgICAgICAgICAgICAgIHBbJ0Rvd25sb2FkLVVSTCddID0gdXJsbGliLmJhc2Vqb2luKHVybCwgcFsnRG93bmxvYWQtVVJMJ10pCiAgICAgICAgICAgICBmbGF2b3IgPSBwLmdldCgnRmxhdm9yJykKICAgICAgICAgICAgIGlmIGZsYXZvciA9PSAnc291cmNlJzoKQEAgLTU1Miw5ICs1NTIsOSBAQAogICAgICAgICBpbnN0YWxsZWQgdGhyb3VnaCBwaW1wLCByZXR1cm4gdGhlIG5hbWUgaW4gKHBhcmVudGhlc2VzKS4iIiIKIAogICAgICAgICBydiA9IHNlbGYuX2RpY3RbJ05hbWUnXQotICAgICAgICBpZiBzZWxmLl9kaWN0Lmhhc19rZXkoJ1ZlcnNpb24nKToKKyAgICAgICAgaWYgJ1ZlcnNpb24nIGluIHNlbGYuX2RpY3Q6CiAgICAgICAgICAgICBydiA9IHJ2ICsgJy0lcycgJSBzZWxmLl9kaWN0WydWZXJzaW9uJ10KLSAgICAgICAgaWYgc2VsZi5fZGljdC5oYXNfa2V5KCdGbGF2b3InKToKKyAgICAgICAgaWYgJ0ZsYXZvcicgaW4gc2VsZi5fZGljdDoKICAgICAgICAgICAgIHJ2ID0gcnYgKyAnLSVzJyAlIHNlbGYuX2RpY3RbJ0ZsYXZvciddCiAgICAgICAgIGlmIHNlbGYuX2RpY3QuZ2V0KCdGbGF2b3InKSA9PSAnaGlkZGVuJzoKICAgICAgICAgICAgICMgUHNldWRvLXBhY2thZ2UsIHNob3cgaW4gcGFyZW50aGVzZXMKQEAgLTY0Nyw5ICs2NDcsOSBAQAogICAgICAgICAgICAgICAgIGRlc2NyID0gc3RyKGl0ZW0pCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG5hbWUgPSBpdGVtWydOYW1lJ10KLSAgICAgICAgICAgICAgICBpZiBpdGVtLmhhc19rZXkoJ1ZlcnNpb24nKToKKyAgICAgICAgICAgICAgICBpZiAnVmVyc2lvbicgaW4gaXRlbToKICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUgKyAnLScgKyBpdGVtWydWZXJzaW9uJ10KLSAgICAgICAgICAgICAgICBpZiBpdGVtLmhhc19rZXkoJ0ZsYXZvcicpOgorICAgICAgICAgICAgICAgIGlmICdGbGF2b3InIGluIGl0ZW06CiAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgJy0nICsgaXRlbVsnRmxhdm9yJ10KICAgICAgICAgICAgICAgICBwa2cgPSBzZWxmLl9kYi5maW5kKG5hbWUpCiAgICAgICAgICAgICAgICAgaWYgbm90IHBrZzoKQEAgLTgwMCwxMCArODAwLDEwIEBACiAgICAgICAgIElmIG91dHB1dCBpcyBnaXZlbiBpdCBzaG91bGQgYmUgYSBmaWxlLWxpa2Ugb2JqZWN0IGFuZCBpdAogICAgICAgICB3aWxsIHJlY2VpdmUgYSBsb2cgb2Ygd2hhdCBoYXBwZW5lZC4iIiIKIAotICAgICAgICBpZiBzZWxmLl9kaWN0Lmhhc19rZXkoJ0luc3RhbGwtY29tbWFuZCcpOgorICAgICAgICBpZiAnSW5zdGFsbC1jb21tYW5kJyBpbiBzZWxmLl9kaWN0OgogICAgICAgICAgICAgcmV0dXJuICIlczogQmluYXJ5IHBhY2thZ2UgY2Fubm90IGhhdmUgSW5zdGFsbC1jb21tYW5kIiAlIHNlbGYuZnVsbG5hbWUoKQogCi0gICAgICAgIGlmIHNlbGYuX2RpY3QuaGFzX2tleSgnUHJlLWluc3RhbGwtY29tbWFuZCcpOgorICAgICAgICBpZiAnUHJlLWluc3RhbGwtY29tbWFuZCcgaW4gc2VsZi5fZGljdDoKICAgICAgICAgICAgIGlmIF9jbWQob3V0cHV0LCAnL3RtcCcsIHNlbGYuX2RpY3RbJ1ByZS1pbnN0YWxsLWNvbW1hbmQnXSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJwcmUtaW5zdGFsbCAlczogcnVubmluZyBcIiVzXCIgZmFpbGVkIiAlIFwKICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZnVsbG5hbWUoKSwgc2VsZi5fZGljdFsnUHJlLWluc3RhbGwtY29tbWFuZCddKQpAQCAtODM2LDcgKzgzNiw3IEBACiAKICAgICAgICAgc2VsZi5hZnRlckluc3RhbGwoKQogCi0gICAgICAgIGlmIHNlbGYuX2RpY3QuaGFzX2tleSgnUG9zdC1pbnN0YWxsLWNvbW1hbmQnKToKKyAgICAgICAgaWYgJ1Bvc3QtaW5zdGFsbC1jb21tYW5kJyBpbiBzZWxmLl9kaWN0OgogICAgICAgICAgICAgaWYgX2NtZChvdXRwdXQsICcvdG1wJywgc2VsZi5fZGljdFsnUG9zdC1pbnN0YWxsLWNvbW1hbmQnXSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuICIlczogcG9zdC1pbnN0YWxsOiBydW5uaW5nIFwiJXNcIiBmYWlsZWQiICUgXAogICAgICAgICAgICAgICAgICAgICAoc2VsZi5mdWxsbmFtZSgpLCBzZWxmLl9kaWN0WydQb3N0LWluc3RhbGwtY29tbWFuZCddKQpAQCAtODYxLDcgKzg2MSw3IEBACiAgICAgICAgIElmIG91dHB1dCBpcyBnaXZlbiBpdCBzaG91bGQgYmUgYSBmaWxlLWxpa2Ugb2JqZWN0IGFuZCBpdAogICAgICAgICB3aWxsIHJlY2VpdmUgYSBsb2cgb2Ygd2hhdCBoYXBwZW5lZC4iIiIKIAotICAgICAgICBpZiBzZWxmLl9kaWN0Lmhhc19rZXkoJ1ByZS1pbnN0YWxsLWNvbW1hbmQnKToKKyAgICAgICAgaWYgJ1ByZS1pbnN0YWxsLWNvbW1hbmQnIGluIHNlbGYuX2RpY3Q6CiAgICAgICAgICAgICBpZiBfY21kKG91dHB1dCwgc2VsZi5fYnVpbGREaXJuYW1lLCBzZWxmLl9kaWN0WydQcmUtaW5zdGFsbC1jb21tYW5kJ10pOgogICAgICAgICAgICAgICAgIHJldHVybiAicHJlLWluc3RhbGwgJXM6IHJ1bm5pbmcgXCIlc1wiIGZhaWxlZCIgJSBcCiAgICAgICAgICAgICAgICAgICAgIChzZWxmLmZ1bGxuYW1lKCksIHNlbGYuX2RpY3RbJ1ByZS1pbnN0YWxsLWNvbW1hbmQnXSkKQEAgLTg5OCw3ICs4OTgsNyBAQAogCiAgICAgICAgIHNlbGYuYWZ0ZXJJbnN0YWxsKCkKIAotICAgICAgICBpZiBzZWxmLl9kaWN0Lmhhc19rZXkoJ1Bvc3QtaW5zdGFsbC1jb21tYW5kJyk6CisgICAgICAgIGlmICdQb3N0LWluc3RhbGwtY29tbWFuZCcgaW4gc2VsZi5fZGljdDoKICAgICAgICAgICAgIGlmIF9jbWQob3V0cHV0LCBzZWxmLl9idWlsZERpcm5hbWUsIHNlbGYuX2RpY3RbJ1Bvc3QtaW5zdGFsbC1jb21tYW5kJ10pOgogICAgICAgICAgICAgICAgIHJldHVybiAicG9zdC1pbnN0YWxsICVzOiBydW5uaW5nIFwiJXNcIiBmYWlsZWQiICUgXAogICAgICAgICAgICAgICAgICAgICAoc2VsZi5mdWxsbmFtZSgpLCBzZWxmLl9kaWN0WydQb3N0LWluc3RhbGwtY29tbWFuZCddKQpAQCAtOTE2LDEwICs5MTYsMTAgQEAKICAgICAgICAgSWYgb3V0cHV0IGlzIGdpdmVuIGl0IHNob3VsZCBiZSBhIGZpbGUtbGlrZSBvYmplY3QgYW5kIGl0CiAgICAgICAgIHdpbGwgcmVjZWl2ZSBhIGxvZyBvZiB3aGF0IGhhcHBlbmVkLiIiIgogCi0gICAgICAgIGlmIHNlbGYuX2RpY3QuaGFzX2tleSgnUG9zdC1pbnN0YWxsLWNvbW1hbmQnKToKKyAgICAgICAgaWYgJ1Bvc3QtaW5zdGFsbC1jb21tYW5kJyBpbiBzZWxmLl9kaWN0OgogICAgICAgICAgICAgcmV0dXJuICIlczogSW5zdGFsbGVyIHBhY2thZ2UgY2Fubm90IGhhdmUgUG9zdC1pbnN0YWxsLWNvbW1hbmQiICUgc2VsZi5mdWxsbmFtZSgpCiAKLSAgICAgICAgaWYgc2VsZi5fZGljdC5oYXNfa2V5KCdQcmUtaW5zdGFsbC1jb21tYW5kJyk6CisgICAgICAgIGlmICdQcmUtaW5zdGFsbC1jb21tYW5kJyBpbiBzZWxmLl9kaWN0OgogICAgICAgICAgICAgaWYgX2NtZChvdXRwdXQsICcvdG1wJywgc2VsZi5fZGljdFsnUHJlLWluc3RhbGwtY29tbWFuZCddKToKICAgICAgICAgICAgICAgICByZXR1cm4gInByZS1pbnN0YWxsICVzOiBydW5uaW5nIFwiJXNcIiBmYWlsZWQiICUgXAogICAgICAgICAgICAgICAgICAgICAoc2VsZi5mdWxsbmFtZSgpLCBzZWxmLl9kaWN0WydQcmUtaW5zdGFsbC1jb21tYW5kJ10pCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvdmlkZW9yZWFkZXIucHkgYi9MaWIvcGxhdC1tYWMvdmlkZW9yZWFkZXIucHkKaW5kZXggNGZlOTkzZS4uOWRkN2Q2NyAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL3ZpZGVvcmVhZGVyLnB5CisrKyBiL0xpYi9wbGF0LW1hYy92aWRlb3JlYWRlci5weQpAQCAtMjM4LDEyICsyMzgsMTIgQEAKICAgICAgICAgd2lkdGggPSBzZWxmLnZpZGVvZGVzY3JbJ3dpZHRoJ10KICAgICAgICAgaGVpZ2h0ID0gc2VsZi52aWRlb2Rlc2NyWydoZWlnaHQnXQogICAgICAgICBzdGFydCA9IDAKLSAgICAgICAgcnYgPSAnJworICAgICAgICBydiA9IFtdCiAgICAgICAgIGZvciBpIGluIHJhbmdlKGhlaWdodCk6CiAgICAgICAgICAgICBuZXh0bGluZSA9IFFkb2Zmcy5HZXRQaXhNYXBCeXRlcyhzZWxmLnBpeG1hcCwgc3RhcnQsIHdpZHRoKjQpCiAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0ICsgcm93Ynl0ZXMKLSAgICAgICAgICAgIHJ2ID0gcnYgKyBuZXh0bGluZQotICAgICAgICByZXR1cm4gcnYKKyAgICAgICAgICAgIHJ2LmFwcGVuZChuZXh0bGluZSkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4ocnYpCiAKIGRlZiByZWFkZXIodXJsKToKICAgICB0cnk6CkBAIC0yNTUsOSArMjU1LDkgQEAKIGRlZiBfdGVzdCgpOgogICAgIGltcG9ydCBFYXN5RGlhbG9ncwogICAgIHRyeToKLSAgICAgICAgaW1wb3J0IGltZworICAgICAgICBmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIGltZyA9IE5vbmUKKyAgICAgICAgSW1hZ2UgPSBOb25lCiAgICAgaW1wb3J0IE1hY09TCiAgICAgUXQuRW50ZXJNb3ZpZXMoKQogICAgIHBhdGggPSBFYXN5RGlhbG9ncy5Bc2tGaWxlRm9yT3BlbihtZXNzYWdlPSdWaWRlbyB0byBjb252ZXJ0JykKQEAgLTI3NywxMyArMjc3LDExIEBACiAgICAgICAgIGZuYW1lID0gJ2ZyYW1lJTA0LjRkLmpwZyclbnVtCiAgICAgICAgIG51bSA9IG51bSsxCiAgICAgICAgIHBuYW1lID0gb3MucGF0aC5qb2luKGRzdGRpciwgZm5hbWUpCi0gICAgICAgIGlmIG5vdCBpbWc6IHByaW50ICdOb3QnLAorICAgICAgICBpZiBub3QgSW1hZ2U6IHByaW50ICdOb3QnLAogICAgICAgICBwcmludCAnV3JpdGluZyAlcywgc2l6ZSAlZHglZCwgJWQgYnl0ZXMnJShmbmFtZSwgaW1ndywgaW1naCwgbGVuKGRhdGEpKQotICAgICAgICBpZiBpbWc6Ci0gICAgICAgICAgICB3cnQgPSBpbWcud3JpdGVyKGltZ2ZtdCwgcG5hbWUpCi0gICAgICAgICAgICB3cnQud2lkdGggPSBpbWd3Ci0gICAgICAgICAgICB3cnQuaGVpZ2h0ID0gaW1naAotICAgICAgICAgICAgd3J0LndyaXRlKGRhdGEpCisgICAgICAgIGlmIEltYWdlOgorICAgICAgICAgICAgaW1nID0gSW1hZ2UuZnJvbXN0cmluZygiUkdCQSIsIChpbWd3LCBpbWdoKSwgZGF0YSkKKyAgICAgICAgICAgIGltZy5zYXZlKHBuYW1lLCAnSlBFRycpCiAgICAgICAgICAgICB0aW1lc3RhbXAsIGRhdGEgPSByZHIuUmVhZFZpZGVvKCkKICAgICAgICAgICAgIE1hY09TLlNldENyZWF0b3JBbmRUeXBlKHBuYW1lLCAnb2dsZScsICdKUEVHJykKICAgICAgICAgICAgIGlmIG51bSA+IDIwOgpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L3JlZ2VuIGIvTGliL3BsYXQtb3MyZW14L3JlZ2VuCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LXN1bm9zNS9JTi5weSBiL0xpYi9wbGF0LXN1bm9zNS9JTi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1zdW5vczUvU1VOQVVESU9ERVYucHkgYi9MaWIvcGxhdC1zdW5vczUvU1VOQVVESU9ERVYucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXRmb3JtLnB5IGIvTGliL3BsYXRmb3JtLnB5CmluZGV4IGM1MDE0NTYuLjBmMjQ1NTMgMTAwNzU1Ci0tLSBhL0xpYi9wbGF0Zm9ybS5weQorKysgYi9MaWIvcGxhdGZvcm0ucHkKQEAgLTM0LDYgKzM0LDcgQEAKICMKICMgICAgPHNlZSBDVlMgYW5kIFNWTiBjaGVja2luIG1lc3NhZ2VzIGZvciBoaXN0b3J5PgogIworIyAgICAxLjAuNyAtIGFkZGVkIERFVl9OVUxMCiAjICAgIDEuMC42IC0gYWRkZWQgbGludXhfZGlzdHJpYnV0aW9uKCkKICMgICAgMS4wLjUgLSBmaXhlZCBKYXZhIHN1cHBvcnQgdG8gYWxsb3cgcnVubmluZyB0aGUgbW9kdWxlIG9uIEp5dGhvbgogIyAgICAxLjAuNCAtIGFkZGVkIElyb25QeXRob24gc3VwcG9ydApAQCAtMTEwLDEwICsxMTEsMjUgQEAKIAogIiIiCiAKLV9fdmVyc2lvbl9fID0gJzEuMC42JworX192ZXJzaW9uX18gPSAnMS4wLjcnCiAKIGltcG9ydCBzeXMsc3RyaW5nLG9zLHJlCiAKKyMjIyBHbG9iYWxzICYgQ29uc3RhbnRzCisKKyMgRGV0ZXJtaW5lIHRoZSBwbGF0Zm9ybSdzIC9kZXYvbnVsbCBkZXZpY2UKK3RyeToKKyAgICBERVZfTlVMTCA9IG9zLmRldm51bGwKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAjIG9zLmRldm51bGwgd2FzIGFkZGVkIGluIFB5dGhvbiAyLjQsIHNvIGVtdWxhdGUgaXQgZm9yIGVhcmxpZXIKKyAgICAjIFB5dGhvbiB2ZXJzaW9ucworICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnLCdvczInKToKKyAgICAgICAgIyBVc2UgdGhlIG9sZCBDUC9NIE5VTCBhcyBkZXZpY2UgbmFtZQorICAgICAgICBERVZfTlVMTCA9ICdOVUwnCisgICAgZWxzZToKKyAgICAgICAgIyBTdGFuZGFyZCBVbml4IHVzZXMgL2Rldi9udWxsCisgICAgICAgIERFVl9OVUxMID0gJy9kZXYvbnVsbCcKKwogIyMjIFBsYXRmb3JtIHNwZWNpZmljIEFQSXMKIAogX2xpYmNfc2VhcmNoID0gcmUuY29tcGlsZShyJyhfX2xpYmNfaW5pdCknCkBAIC0yNzIsMjQgKzI4OCw2IEBACiAgICAgICAgICAgICBpZCA9IGxbMV0KICAgICByZXR1cm4gJycsIHZlcnNpb24sIGlkCiAKLWRlZiBfdGVzdF9wYXJzZV9yZWxlYXNlX2ZpbGUoKToKLQotICAgIGZvciBpbnB1dCwgb3V0cHV0IGluICgKLSAgICAgICAgIyBFeGFtcGxlcyBvZiByZWxlYXNlIGZpbGUgY29udGVudHM6Ci0gICAgICAgICgnU3VTRSBMaW51eCA5LjMgKHg4Ni02NCknLCAoJ1N1U0UgTGludXggJywgJzkuMycsICd4ODYtNjQnKSkKLSAgICAgICAgKCdTVVNFIExJTlVYIDEwLjEgKFg4Ni02NCknLCAoJ1NVU0UgTElOVVggJywgJzEwLjEnLCAnWDg2LTY0JykpCi0gICAgICAgICgnU1VTRSBMSU5VWCAxMC4xIChpNTg2KScsICgnU1VTRSBMSU5VWCAnLCAnMTAuMScsICdpNTg2JykpCi0gICAgICAgICgnRmVkb3JhIENvcmUgcmVsZWFzZSA1IChCb3JkZWF1eCknLCAoJ0ZlZG9yYSBDb3JlJywgJzUnLCAnQm9yZGVhdXgnKSkKLSAgICAgICAgKCdSZWQgSGF0IExpbnV4IHJlbGVhc2UgOC4wIChQc3ljaGUpJywgKCdSZWQgSGF0IExpbnV4JywgJzguMCcsICdQc3ljaGUnKSkKLSAgICAgICAgKCdSZWQgSGF0IExpbnV4IHJlbGVhc2UgOSAoU2hyaWtlKScsICgnUmVkIEhhdCBMaW51eCcsICc5JywgJ1NocmlrZScpKQotICAgICAgICAoJ1JlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCByZWxlYXNlIDQgKE5haGFudCknLCAoJ1JlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCcsICc0JywgJ05haGFudCcpKQotICAgICAgICAoJ0NlbnRPUyByZWxlYXNlIDQnLCAoJ0NlbnRPUycsICc0JywgTm9uZSkpCi0gICAgICAgICgnUm9ja3MgcmVsZWFzZSA0LjIuMSAoQ3lkb25pYSknLCAoJ1JvY2tzJywgJzQuMi4xJywgJ0N5ZG9uaWEnKSkKLSAgICAgICAgKToKLSAgICAgICAgcGFyc2VkID0gX3BhcnNlX3JlbGVhc2VfZmlsZShpbnB1dCkKLSAgICAgICAgaWYgcGFyc2VkICE9IG91dHB1dDoKLSAgICAgICAgICAgIHByaW50IChpbnB1dCwgcGFyc2VkKQotCiBkZWYgbGludXhfZGlzdHJpYnV0aW9uKGRpc3RuYW1lPScnLCB2ZXJzaW9uPScnLCBpZD0nJywKIAogICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRfZGlzdHM9X3N1cHBvcnRlZF9kaXN0cywKQEAgLTQ3MCw3ICs0NjgsMTYgQEAKIAogX3Zlcl9vdXRwdXQgPSByZS5jb21waWxlKHInKD86KFtcdyBdKykgKFtcdy5dKykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICcuKicKLSAgICAgICAgICAgICAgICAgICAgICAgICAnVmVyc2lvbiAoW1xkLl0rKSknKQorICAgICAgICAgICAgICAgICAgICAgICAgICdcWy4qIChbXGQuXSspXF0pJykKKworIyBFeGFtcGxlcyBvZiBWRVIgY29tbWFuZCBvdXRwdXQ6CisjCisjICAgV2luZG93cyAyMDAwOiAgTWljcm9zb2Z0IFdpbmRvd3MgMjAwMCBbVmVyc2lvbiA1LjAwLjIxOTVdCisjICAgV2luZG93cyBYUDogICAgTWljcm9zb2Z0IFdpbmRvd3MgWFAgW1ZlcnNpb24gNS4xLjI2MDBdCisjICAgV2luZG93cyBWaXN0YTogTWljcm9zb2Z0IFdpbmRvd3MgW1ZlcnNpb24gNi4wLjYwMDJdCisjCisjIE5vdGUgdGhhdCB0aGUgIlZlcnNpb24iIHN0cmluZyBnZXRzIGxvY2FsaXplZCBvbiBkaWZmZXJlbnQKKyMgV2luZG93cyB2ZXJzaW9ucy4KIAogZGVmIF9zeXNjbWRfdmVyKHN5c3RlbT0nJywgcmVsZWFzZT0nJywgdmVyc2lvbj0nJywKIApAQCAtNjA5LDYgKzYxNiw3IEBACiAgICAgZWxzZToKICAgICAgICAgaWYgY3NkWzoxM10gPT0gJ1NlcnZpY2UgUGFjayAnOgogICAgICAgICAgICAgY3NkID0gJ1NQJyArIGNzZFsxMzpdCisKICAgICBpZiBwbGF0ID09IFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTOgogICAgICAgICByZWdrZXkgPSAnU09GVFdBUkVcXE1pY3Jvc29mdFxcV2luZG93c1xcQ3VycmVudFZlcnNpb24nCiAgICAgICAgICMgVHJ5IHRvIGd1ZXNzIHRoZSByZWxlYXNlIG5hbWUKQEAgLTYyMyw2ICs2MzEsNyBAQAogICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAncG9zdE1lJwogICAgICAgICBlbGlmIG1haiA9PSA1OgogICAgICAgICAgICAgcmVsZWFzZSA9ICcyMDAwJworCiAgICAgZWxpZiBwbGF0ID09IFZFUl9QTEFURk9STV9XSU4zMl9OVDoKICAgICAgICAgcmVna2V5ID0gJ1NPRlRXQVJFXFxNaWNyb3NvZnRcXFdpbmRvd3MgTlRcXEN1cnJlbnRWZXJzaW9uJwogICAgICAgICBpZiBtYWogPD0gNDoKQEAgLTY2Niw2ICs2NzUsNyBAQAogICAgICAgICAgICAgICAgICAgICByZWxlYXNlID0gJzIwMDhTZXJ2ZXJSMicKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmVsZWFzZSA9ICdwb3N0MjAwOFNlcnZlcicKKwogICAgIGVsc2U6CiAgICAgICAgIGlmIG5vdCByZWxlYXNlOgogICAgICAgICAgICAgIyBFLmcuIFdpbjMuMSB3aXRoIHdpbjMycwpAQCAtOTg5LDcgKzk5OSw3IEBACiAgICAgICAgICMgWFhYIE90aGVycyB0b28gPwogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIHRyeToKLSAgICAgICAgZiA9IG9zLnBvcGVuKCd1bmFtZSAlcyAyPiAvZGV2L251bGwnICUgb3B0aW9uKQorICAgICAgICBmID0gb3MucG9wZW4oJ3VuYW1lICVzIDI+ICVzJyAlIChvcHRpb24sIERFVl9OVUxMKSkKICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLG9zLmVycm9yKToKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICBvdXRwdXQgPSBzdHJpbmcuc3RyaXAoZi5yZWFkKCkpCkBAIC0xMDE0LDcgKzEwMjQsNyBAQAogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIHRhcmdldCA9IF9mb2xsb3dfc3ltbGlua3ModGFyZ2V0KS5yZXBsYWNlKCciJywgJ1xcIicpCiAgICAgdHJ5OgotICAgICAgICBmID0gb3MucG9wZW4oJ2ZpbGUgIiVzIiAyPiAvZGV2L251bGwnICUgdGFyZ2V0KQorICAgICAgICBmID0gb3MucG9wZW4oJ2ZpbGUgIiVzIiAyPiAlcycgJSAodGFyZ2V0LCBERVZfTlVMTCkpCiAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvcixvcy5lcnJvcik6CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgb3V0cHV0ID0gc3RyaW5nLnN0cmlwKGYucmVhZCgpKQpAQCAtMTE2MSw3ICsxMTcxLDcgQEAKICAgICAgICAgICAgIG5vZGUgPSBfbm9kZSgpCiAgICAgICAgICAgICBtYWNoaW5lID0gJycKIAotICAgICAgICB1c2Vfc3lzY21kX3ZlciA9IDAxCisgICAgICAgIHVzZV9zeXNjbWRfdmVyID0gMQogCiAgICAgICAgICMgVHJ5IHdpbjMyX3ZlcigpIG9uIHdpbjMyIHBsYXRmb3JtcwogICAgICAgICBpZiBzeXN0ZW0gPT0gJ3dpbjMyJzoKQEAgLTExNzMsNyArMTE4MywxMSBAQAogICAgICAgICAgICAgIyBodHRwOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzg4ODczMSBhbmQKICAgICAgICAgICAgICMgaHR0cDovL3d3dy5nZW9jaXRpZXMuY29tL3JpY2tfbGl2ZWx5L01BTlVBTFMvRU5WL01TV0lOL1BST0NFU1NJLkhUTQogICAgICAgICAgICAgaWYgbm90IG1hY2hpbmU6Ci0gICAgICAgICAgICAgICAgbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCdQUk9DRVNTT1JfQVJDSElURUNUVVJFJywgJycpCisgICAgICAgICAgICAgICAgIyBXT1c2NCBwcm9jZXNzZXMgbWFzayB0aGUgbmF0aXZlIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgIGlmICJQUk9DRVNTT1JfQVJDSElURVc2NDMyIiBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gb3MuZW52aXJvbi5nZXQoIlBST0NFU1NPUl9BUkNISVRFVzY0MzIiLCAnJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gb3MuZW52aXJvbi5nZXQoJ1BST0NFU1NPUl9BUkNISVRFQ1RVUkUnLCAnJykKICAgICAgICAgICAgIGlmIG5vdCBwcm9jZXNzb3I6CiAgICAgICAgICAgICAgICAgcHJvY2Vzc29yID0gb3MuZW52aXJvbi5nZXQoJ1BST0NFU1NPUl9JREVOVElGSUVSJywgbWFjaGluZSkKIApAQCAtMTIxMywxMCArMTIyNyw2IEBACiAgICAgICAgICAgICBpZiBub3QgdmVyc2lvbjoKICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gdmVuZG9yCiAKLSAgICAgICAgZWxpZiBvcy5uYW1lID09ICdtYWMnOgotICAgICAgICAgICAgcmVsZWFzZSwodmVyc2lvbixzdGFnZSxub25yZWwpLG1hY2hpbmUgPSBtYWNfdmVyKCkKLSAgICAgICAgICAgIHN5c3RlbSA9ICdNYWNPUycKLQogICAgICMgU3lzdGVtIHNwZWNpZmljIGV4dGVuc2lvbnMKICAgICBpZiBzeXN0ZW0gPT0gJ09wZW5WTVMnOgogICAgICAgICAjIE9wZW5WTVMgc2VlbXMgdG8gaGF2ZSByZWxlYXNlIGFuZCB2ZXJzaW9uIG1peGVkIHVwCkBAIC0xMzI3LDE1ICsxMzM3LDE3IEBACiAgICAgJ1woIz8oW14sXSspLFxzKihbXHcgXSspLFxzKihbXHcgOl0rKVwpXHMqJwogICAgICdcWyhbXlxdXSspXF0/JykKIAotX2p5dGhvbl9zeXNfdmVyc2lvbl9wYXJzZXIgPSByZS5jb21waWxlKAotICAgIHInKFtcZFwuXSspJykKLQogX2lyb25weXRob25fc3lzX3ZlcnNpb25fcGFyc2VyID0gcmUuY29tcGlsZSgKICAgICByJ0lyb25QeXRob25ccyonCiAgICAgJyhbXGRcLl0rKScKICAgICAnKD86IFwoKFtcZFwuXSspXCkpPycKICAgICAnIG9uICguTkVUIFtcZFwuXSspJykKIAorX3B5cHlfc3lzX3ZlcnNpb25fcGFyc2VyID0gcmUuY29tcGlsZSgKKyAgICByJyhbXHcuK10rKVxzKicKKyAgICAnXCgjPyhbXixdKyksXHMqKFtcdyBdKyksXHMqKFtcdyA6XSspXClccyonCisgICAgJ1xbUHlQeSBbXlxdXStcXT8nKQorCiBfc3lzX3ZlcnNpb25fY2FjaGUgPSB7fQogCiBkZWYgX3N5c192ZXJzaW9uKHN5c192ZXJzaW9uPU5vbmUpOgpAQCAtMTM3NywyNSArMTM4OSwyOSBAQAogICAgICAgICAgICAgICAgICdmYWlsZWQgdG8gcGFyc2UgSXJvblB5dGhvbiBzeXMudmVyc2lvbjogJXMnICUKICAgICAgICAgICAgICAgICByZXByKHN5c192ZXJzaW9uKSkKICAgICAgICAgdmVyc2lvbiwgYWx0X3ZlcnNpb24sIGNvbXBpbGVyID0gbWF0Y2guZ3JvdXBzKCkKLSAgICAgICAgYnJhbmNoID0gJycKLSAgICAgICAgcmV2aXNpb24gPSAnJwogICAgICAgICBidWlsZG5vID0gJycKICAgICAgICAgYnVpbGRkYXRlID0gJycKIAogICAgIGVsaWYgc3lzLnBsYXRmb3JtWzo0XSA9PSAnamF2YSc6CiAgICAgICAgICMgSnl0aG9uCiAgICAgICAgIG5hbWUgPSAnSnl0aG9uJwotICAgICAgICBtYXRjaCA9IF9qeXRob25fc3lzX3ZlcnNpb25fcGFyc2VyLm1hdGNoKHN5c192ZXJzaW9uKQorICAgICAgICBtYXRjaCA9IF9zeXNfdmVyc2lvbl9wYXJzZXIubWF0Y2goc3lzX3ZlcnNpb24pCiAgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgICdmYWlsZWQgdG8gcGFyc2UgSnl0aG9uIHN5cy52ZXJzaW9uOiAlcycgJQogICAgICAgICAgICAgICAgIHJlcHIoc3lzX3ZlcnNpb24pKQotICAgICAgICB2ZXJzaW9uLCA9IG1hdGNoLmdyb3VwcygpCi0gICAgICAgIGJyYW5jaCA9ICcnCi0gICAgICAgIHJldmlzaW9uID0gJycKKyAgICAgICAgdmVyc2lvbiwgYnVpbGRubywgYnVpbGRkYXRlLCBidWlsZHRpbWUsIF8gPSBtYXRjaC5ncm91cHMoKQogICAgICAgICBjb21waWxlciA9IHN5cy5wbGF0Zm9ybQotICAgICAgICBidWlsZG5vID0gJycKLSAgICAgICAgYnVpbGRkYXRlID0gJycKKworICAgIGVsaWYgIlB5UHkiIGluIHN5c192ZXJzaW9uOgorICAgICAgICAjIFB5UHkKKyAgICAgICAgbmFtZSA9ICJQeVB5IgorICAgICAgICBtYXRjaCA9IF9weXB5X3N5c192ZXJzaW9uX3BhcnNlci5tYXRjaChzeXNfdmVyc2lvbikKKyAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZhaWxlZCB0byBwYXJzZSBQeVB5IHN5cy52ZXJzaW9uOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKHN5c192ZXJzaW9uKSkKKyAgICAgICAgdmVyc2lvbiwgYnVpbGRubywgYnVpbGRkYXRlLCBidWlsZHRpbWUgPSBtYXRjaC5ncm91cHMoKQorICAgICAgICBjb21waWxlciA9ICIiCiAKICAgICBlbHNlOgogICAgICAgICAjIENQeXRob24KQEAgLTE0MDYsMTUgKzE0MjIsMTYgQEAKICAgICAgICAgICAgICAgICByZXByKHN5c192ZXJzaW9uKSkKICAgICAgICAgdmVyc2lvbiwgYnVpbGRubywgYnVpbGRkYXRlLCBidWlsZHRpbWUsIGNvbXBpbGVyID0gXAogICAgICAgICAgICAgICBtYXRjaC5ncm91cHMoKQotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3N1YnZlcnNpb24nKToKLSAgICAgICAgICAgICMgc3lzLnN1YnZlcnNpb24gd2FzIGFkZGVkIGluIFB5dGhvbiAyLjUKLSAgICAgICAgICAgIG5hbWUsIGJyYW5jaCwgcmV2aXNpb24gPSBzeXMuc3VidmVyc2lvbgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmFtZSA9ICdDUHl0aG9uJwotICAgICAgICAgICAgYnJhbmNoID0gJycKLSAgICAgICAgICAgIHJldmlzaW9uID0gJycKKyAgICAgICAgbmFtZSA9ICdDUHl0aG9uJwogICAgICAgICBidWlsZGRhdGUgPSBidWlsZGRhdGUgKyAnICcgKyBidWlsZHRpbWUKIAorICAgIGlmIGhhc2F0dHIoc3lzLCAnc3VidmVyc2lvbicpOgorICAgICAgICAjIHN5cy5zdWJ2ZXJzaW9uIHdhcyBhZGRlZCBpbiBQeXRob24gMi41CisgICAgICAgIF8sIGJyYW5jaCwgcmV2aXNpb24gPSBzeXMuc3VidmVyc2lvbgorICAgIGVsc2U6CisgICAgICAgIGJyYW5jaCA9ICcnCisgICAgICAgIHJldmlzaW9uID0gJycKKwogICAgICMgQWRkIHRoZSBwYXRjaGxldmVsIHZlcnNpb24gaWYgbWlzc2luZwogICAgIGwgPSBzdHJpbmcuc3BsaXQodmVyc2lvbiwgJy4nKQogICAgIGlmIGxlbihsKSA9PSAyOgpAQCAtMTQyNiwyMSArMTQ0Myw2IEBACiAgICAgX3N5c192ZXJzaW9uX2NhY2hlW3N5c192ZXJzaW9uXSA9IHJlc3VsdAogICAgIHJldHVybiByZXN1bHQKIAotZGVmIF90ZXN0X3N5c192ZXJzaW9uKCk6Ci0KLSAgICBfc3lzX3ZlcnNpb25fY2FjaGUuY2xlYXIoKQotICAgIGZvciBpbnB1dCwgb3V0cHV0IGluICgKLSAgICAgICAgKCcyLjQuMyAoIzEsIEp1biAyMSAyMDA2LCAxMzo1NDoyMSkgXG5bR0NDIDMuMy40IChwcmUgMy4zLjUgMjAwNDA4MDkpXScsCi0gICAgICAgICAoJ0NQeXRob24nLCAnMi40LjMnLCAnJywgJycsICcxJywgJ0p1biAyMSAyMDA2IDEzOjU0OjIxJywgJ0dDQyAzLjMuNCAocHJlIDMuMy41IDIwMDQwODA5KScpKSwKLSAgICAgICAgKCdJcm9uUHl0aG9uIDEuMC42MDgxNiBvbiAuTkVUIDIuMC41MDcyNy40MicsCi0gICAgICAgICAoJ0lyb25QeXRob24nLCAnMS4wLjYwODE2JywgJycsICcnLCAnJywgJycsICcuTkVUIDIuMC41MDcyNy40MicpKSwKLSAgICAgICAgKCdJcm9uUHl0aG9uIDEuMCAoMS4wLjYxMDA1LjE5NzcpIG9uIC5ORVQgMi4wLjUwNzI3LjQyJywKLSAgICAgICAgICgnSXJvblB5dGhvbicsICcxLjAuMCcsICcnLCAnJywgJycsICcnLCAnLk5FVCAyLjAuNTA3MjcuNDInKSksCi0gICAgICAgICk6Ci0gICAgICAgIHBhcnNlZCA9IF9zeXNfdmVyc2lvbihpbnB1dCkKLSAgICAgICAgaWYgcGFyc2VkICE9IG91dHB1dDoKLSAgICAgICAgICAgIHByaW50IChpbnB1dCwgcGFyc2VkKQotCiBkZWYgcHl0aG9uX2ltcGxlbWVudGF0aW9uKCk6CiAKICAgICAiIiIgUmV0dXJucyBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvTGliL3BsaXN0bGliLnB5IGIvTGliL3BsaXN0bGliLnB5CmluZGV4IDBiMTc0OGMuLjUxOTQ0ZWUgMTAwNjQ0Ci0tLSBhL0xpYi9wbGlzdGxpYi5weQorKysgYi9MaWIvcGxpc3RsaWIucHkKQEAgLTIyNCw3ICsyMjQsNyBAQAogCiBQTElTVEhFQURFUiA9ICIiIlwKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21wdXRlci8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogIiIiCiAKIGNsYXNzIFBsaXN0V3JpdGVyKER1bWJYTUxXcml0ZXIpOgpkaWZmIC0tZ2l0IGEvTGliL3Bvc2l4cGF0aC5weSBiL0xpYi9wb3NpeHBhdGgucHkKaW5kZXggNmUyZWUxNzUuLmFhZTM4ZDUgMTAwNjQ0Ci0tLSBhL0xpYi9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Bvc2l4cGF0aC5weQpAQCAtMTEsNiArMTEsNyBAQAogIiIiCiAKIGltcG9ydCBvcworaW1wb3J0IHN5cwogaW1wb3J0IHN0YXQKIGltcG9ydCBnZW5lcmljcGF0aAogaW1wb3J0IHdhcm5pbmdzCkBAIC0xMzksNyArMTQwLDcgQEAKIGRlZiBsZXhpc3RzKHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBUcnVlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKICAgICB0cnk6Ci0gICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKKyAgICAgICAgb3MubHN0YXQocGF0aCkKICAgICBleGNlcHQgb3MuZXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCkBAIC0zNzksMTIgKzM4MCwxMiBAQAogICAgIHVudGlsIHdlIGVpdGhlciBhcnJpdmUgYXQgc29tZXRoaW5nIHRoYXQgaXNuJ3QgYSBzeW1saW5rLCBvcgogICAgIGVuY291bnRlciBhIHBhdGggd2UndmUgc2VlbiBiZWZvcmUgKG1lYW5pbmcgdGhhdCB0aGVyZSdzIGEgbG9vcCkuCiAgICAgIiIiCi0gICAgcGF0aHNfc2VlbiA9IFtdCisgICAgcGF0aHNfc2VlbiA9IHNldCgpCiAgICAgd2hpbGUgaXNsaW5rKHBhdGgpOgogICAgICAgICBpZiBwYXRoIGluIHBhdGhzX3NlZW46CiAgICAgICAgICAgICAjIEFscmVhZHkgc2VlbiB0aGlzIHBhdGgsIHNvIHdlIG11c3QgaGF2ZSBhIHN5bWxpbmsgbG9vcAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcGF0aHNfc2Vlbi5hcHBlbmQocGF0aCkKKyAgICAgICAgcGF0aHNfc2Vlbi5hZGQocGF0aCkKICAgICAgICAgIyBSZXNvbHZlIHdoZXJlIHRoZSBsaW5rIHBvaW50cyB0bwogICAgICAgICByZXNvbHZlZCA9IG9zLnJlYWRsaW5rKHBhdGgpCiAgICAgICAgIGlmIG5vdCBpc2FicyhyZXNvbHZlZCk6CkBAIC0zOTQsNyArMzk1LDcgQEAKICAgICAgICAgICAgIHBhdGggPSBub3JtcGF0aChyZXNvbHZlZCkKICAgICByZXR1cm4gcGF0aAogCi1zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IEZhbHNlCitzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IChzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicpCiAKIGRlZiByZWxwYXRoKHBhdGgsIHN0YXJ0PWN1cmRpcik6CiAgICAgIiIiUmV0dXJuIGEgcmVsYXRpdmUgdmVyc2lvbiBvZiBhIHBhdGgiIiIKQEAgLTQwMiw4ICs0MDMsOCBAQAogICAgIGlmIG5vdCBwYXRoOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBwYXRoIHNwZWNpZmllZCIpCiAKLSAgICBzdGFydF9saXN0ID0gYWJzcGF0aChzdGFydCkuc3BsaXQoc2VwKQotICAgIHBhdGhfbGlzdCA9IGFic3BhdGgocGF0aCkuc3BsaXQoc2VwKQorICAgIHN0YXJ0X2xpc3QgPSBbeCBmb3IgeCBpbiBhYnNwYXRoKHN0YXJ0KS5zcGxpdChzZXApIGlmIHhdCisgICAgcGF0aF9saXN0ID0gW3ggZm9yIHggaW4gYWJzcGF0aChwYXRoKS5zcGxpdChzZXApIGlmIHhdCiAKICAgICAjIFdvcmsgb3V0IGhvdyBtdWNoIG9mIHRoZSBmaWxlcGF0aCBpcyBzaGFyZWQgYnkgc3RhcnQgYW5kIHBhdGguCiAgICAgaSA9IGxlbihjb21tb25wcmVmaXgoW3N0YXJ0X2xpc3QsIHBhdGhfbGlzdF0pKQpkaWZmIC0tZ2l0IGEvTGliL3Byb2ZpbGUucHkgYi9MaWIvcHJvZmlsZS5weQppbmRleCAzYWY4NDI3Li4yZDFmNDg2IDEwMDc1NQotLS0gYS9MaWIvcHJvZmlsZS5weQorKysgYi9MaWIvcHJvZmlsZS5weQpAQCAtNzUsNyArNzUsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBwcm9mLnByaW50X3N0YXRzKHNvcnQpCiAKLWRlZiBydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lPU5vbmUpOgorZGVmIHJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywgZmlsZW5hbWU9Tm9uZSwgc29ydD0tMSk6CiAgICAgIiIiUnVuIHN0YXRlbWVudCB1bmRlciBwcm9maWxlciwgc3VwcGx5aW5nIHlvdXIgb3duIGdsb2JhbHMgYW5kIGxvY2FscywKICAgICBvcHRpb25hbGx5IHNhdmluZyByZXN1bHRzIGluIGZpbGVuYW1lLgogCkBAIC05MCwxOCArOTAsMTMgQEAKICAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQogICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBwcm9mLnByaW50X3N0YXRzKCkKKyAgICAgICAgcmV0dXJuIHByb2YucHJpbnRfc3RhdHMoc29ydCkKIAogIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KIGRlZiBoZWxwKCk6CiAgICAgcHJpbnQgIkRvY3VtZW50YXRpb24gZm9yIHRoZSBwcm9maWxlIG1vZHVsZSBjYW4gYmUgZm91bmQgIgogICAgIHByaW50ICJpbiB0aGUgUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlLCBzZWN0aW9uICdUaGUgUHl0aG9uIFByb2ZpbGVyJy4iCiAKLWlmIG9zLm5hbWUgPT0gIm1hYyI6Ci0gICAgaW1wb3J0IE1hY09TCi0gICAgZGVmIF9nZXRfdGltZV9tYWModGltZXI9TWFjT1MuR2V0VGlja3MpOgotICAgICAgICByZXR1cm4gdGltZXIoKSAvIDYwLjAKLQogaWYgaGFzYXR0cihvcywgInRpbWVzIik6CiAgICAgZGVmIF9nZXRfdGltZV90aW1lcyh0aW1lcj1vcy50aW1lcyk6CiAgICAgICAgIHQgPSB0aW1lcigpCkBAIC0xNzgsMTAgKzE3Myw2IEBACiAgICAgICAgICAgICAgICAgc2VsZi50aW1lciA9IHJlc2dldHJ1c2FnZQogICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2hlciA9IHNlbGYudHJhY2VfZGlzcGF0Y2gKICAgICAgICAgICAgICAgICBzZWxmLmdldF90aW1lID0gX2dldF90aW1lX3Jlc291cmNlCi0gICAgICAgICAgICBlbGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgICAgICAgICAgc2VsZi50aW1lciA9IE1hY09TLkdldFRpY2tzCi0gICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaGVyID0gc2VsZi50cmFjZV9kaXNwYXRjaF9tYWMKLSAgICAgICAgICAgICAgICBzZWxmLmdldF90aW1lID0gX2dldF90aW1lX21hYwogICAgICAgICAgICAgZWxpZiBoYXNhdHRyKHRpbWUsICdjbG9jaycpOgogICAgICAgICAgICAgICAgIHNlbGYudGltZXIgPSBzZWxmLmdldF90aW1lID0gdGltZS5jbG9jawogICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2hlciA9IHNlbGYudHJhY2VfZGlzcGF0Y2hfaQpAQCAtNTk4LDE4ICs1ODksMjcgQEAKICAgICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vdXRmaWxlJywgZGVzdD0ib3V0ZmlsZSIsCiAgICAgICAgIGhlbHA9IlNhdmUgc3RhdHMgdG8gPG91dGZpbGU+IiwgZGVmYXVsdD1Ob25lKQogICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNvcnQnLCBkZXN0PSJzb3J0IiwKLSAgICAgICAgaGVscD0iU29ydCBvcmRlciB3aGVuIHByaW50aW5nIHRvIHN0ZG91dCwgYmFzZWQgb24gcHN0YXRzLlN0YXRzIGNsYXNzIiwgZGVmYXVsdD0tMSkKKyAgICAgICAgaGVscD0iU29ydCBvcmRlciB3aGVuIHByaW50aW5nIHRvIHN0ZG91dCwgYmFzZWQgb24gcHN0YXRzLlN0YXRzIGNsYXNzIiwKKyAgICAgICAgZGVmYXVsdD0tMSkKIAogICAgIGlmIG5vdCBzeXMuYXJndlsxOl06CiAgICAgICAgIHBhcnNlci5wcmludF91c2FnZSgpCiAgICAgICAgIHN5cy5leGl0KDIpCiAKICAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgc3lzLmFyZ3ZbOl0gPSBhcmdzCiAKLSAgICBpZiAobGVuKGFyZ3MpID4gMCk6Ci0gICAgICAgIHN5cy5hcmd2WzpdID0gYXJncwotICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSkKLSAgICAgICAgcnVuKCdleGVjZmlsZSglciknICUgKHN5cy5hcmd2WzBdLCksIG9wdGlvbnMub3V0ZmlsZSwgb3B0aW9ucy5zb3J0KQorICAgIGlmIGxlbihhcmdzKSA+IDA6CisgICAgICAgIHByb2duYW1lID0gYXJnc1swXQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5kaXJuYW1lKHByb2duYW1lKSkKKyAgICAgICAgd2l0aCBvcGVuKHByb2duYW1lLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGZwLnJlYWQoKSwgcHJvZ25hbWUsICdleGVjJykKKyAgICAgICAgZ2xvYnMgPSB7CisgICAgICAgICAgICAnX19maWxlX18nOiBwcm9nbmFtZSwKKyAgICAgICAgICAgICdfX25hbWVfXyc6ICdfX21haW5fXycsCisgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBOb25lLAorICAgICAgICB9CisgICAgICAgIHJ1bmN0eChjb2RlLCBnbG9icywgTm9uZSwgb3B0aW9ucy5vdXRmaWxlLCBvcHRpb25zLnNvcnQpCiAgICAgZWxzZToKICAgICAgICAgcGFyc2VyLnByaW50X3VzYWdlKCkKICAgICByZXR1cm4gcGFyc2VyCmRpZmYgLS1naXQgYS9MaWIvcHN0YXRzLnB5IGIvTGliL3BzdGF0cy5weQppbmRleCA2MTlmMWNmLi45Y2NkNzViIDEwMDY0NAotLS0gYS9MaWIvcHN0YXRzLnB5CisrKyBiL0xpYi9wc3RhdHMucHkKQEAgLTUsNyArNSw3IEBACiAjIEJhc2VkIG9uIHByaW9yIHByb2ZpbGUgbW9kdWxlIGJ5IFNqb2VyZCBNdWxsZW5kZXIuLi4KICMgICB3aGljaCB3YXMgaGFja2VkIHNvbWV3aGF0IGJ5OiBHdWlkbyB2YW4gUm9zc3VtCiAjCi0jIHNlZSBwcm9maWxlLmRvYyBhbmQgcHJvZmlsZS5weSBmb3IgbW9yZSBpbmZvLgorIyBzZWUgcHJvZmlsZS5weSBmb3IgbW9yZSBpbmZvLgogCiAjIENvcHlyaWdodCAxOTk0LCBieSBJbmZvU2VlayBDb3Jwb3JhdGlvbiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgV3JpdHRlbiBieSBKYW1lcyBSb3NraW5kCkBAIC0zNyw2ICszNyw3IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IG1hcnNoYWwKIGltcG9ydCByZQorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGNtcF90b19rZXkKIAogX19hbGxfXyA9IFsiU3RhdHMiXQogCkBAIC02NSw3ICs2Niw3IEBACiAgICAgbWlub3Iga2V5IG9mICd0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24nLiAgTG9vayBhdCB0aGUgdHdvIHRhYmxlcyBpbgogICAgIHNvcnRfc3RhdHMoKSBhbmQgZ2V0X3NvcnRfYXJnX2RlZnMoc2VsZikgZm9yIG1vcmUgZXhhbXBsZXMuCiAKLSAgICBBbGwgbWV0aG9kcyByZXR1cm4gc2VsZiwgIHNvIHlvdSBjYW4gc3RyaW5nIHRvZ2V0aGVyIGNvbW1hbmRzIGxpa2U6CisgICAgQWxsIG1ldGhvZHMgcmV0dXJuIHNlbGYsIHNvIHlvdSBjYW4gc3RyaW5nIHRvZ2V0aGVyIGNvbW1hbmRzIGxpa2U6CiAgICAgICAgIFN0YXRzKCdmb28nLCAnZ29vJykuc3RyaXBfZGlycygpLnNvcnRfc3RhdHMoJ2NhbGxzJykuXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X3N0YXRzKDUpLnByaW50X2NhbGxlcnMoNSkKICAgICAiIiIKQEAgLTIxNywxMiArMjE4LDEyIEBACiAgICAgICAgIGlmIG5vdCBmaWVsZDoKICAgICAgICAgICAgIHNlbGYuZmNuX2xpc3QgPSAwCiAgICAgICAgICAgICByZXR1cm4gc2VsZgotICAgICAgICBpZiBsZW4oZmllbGQpID09IDEgYW5kIHR5cGUoZmllbGRbMF0pID09IHR5cGUoMSk6CisgICAgICAgIGlmIGxlbihmaWVsZCkgPT0gMSBhbmQgaXNpbnN0YW5jZShmaWVsZFswXSwgKGludCwgbG9uZykpOgogICAgICAgICAgICAgIyBCZSBjb21wYXRpYmxlIHdpdGggb2xkIHByb2ZpbGVyCiAgICAgICAgICAgICBmaWVsZCA9IFsgey0xOiAic3RkbmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAgMDoiY2FsbHMiLAotICAgICAgICAgICAgICAgICAgICAgIDE6InRpbWUiLAotICAgICAgICAgICAgICAgICAgICAgIDI6ICJjdW11bGF0aXZlIiB9ICBbIGZpZWxkWzBdIF0gXQorICAgICAgICAgICAgICAgICAgICAgICAwOiAgImNhbGxzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgMTogICJ0aW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgMjogICJjdW11bGF0aXZlIn1bZmllbGRbMF1dIF0KIAogICAgICAgICBzb3J0X2FyZ19kZWZzID0gc2VsZi5nZXRfc29ydF9hcmdfZGVmcygpCiAgICAgICAgIHNvcnRfdHVwbGUgPSAoKQpAQCAtMjM4LDcgKzIzOSw3IEBACiAgICAgICAgICAgICBzdGF0c19saXN0LmFwcGVuZCgoY2MsIG5jLCB0dCwgY3QpICsgZnVuYyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY19zdGRfc3RyaW5nKGZ1bmMpLCBmdW5jKSkKIAotICAgICAgICBzdGF0c19saXN0LnNvcnQoa2V5PUNtcFRvS2V5KFR1cGxlQ29tcChzb3J0X3R1cGxlKS5jb21wYXJlKSkKKyAgICAgICAgc3RhdHNfbGlzdC5zb3J0KGtleT1jbXBfdG9fa2V5KFR1cGxlQ29tcChzb3J0X3R1cGxlKS5jb21wYXJlKSkKIAogICAgICAgICBzZWxmLmZjbl9saXN0ID0gZmNuX2xpc3QgPSBbXQogICAgICAgICBmb3IgdHVwbGUgaW4gc3RhdHNfbGlzdDoKQEAgLTI5OSw0OCArMzAwLDUzIEBACiAKICAgICBkZWYgZXZhbF9wcmludF9hbW91bnQoc2VsZiwgc2VsLCBsaXN0LCBtc2cpOgogICAgICAgICBuZXdfbGlzdCA9IGxpc3QKLSAgICAgICAgaWYgdHlwZShzZWwpID09IHR5cGUoIiIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV4ID0gcmUuY29tcGlsZShzZWwpCisgICAgICAgICAgICBleGNlcHQgcmUuZXJyb3I6CisgICAgICAgICAgICAgICAgbXNnICs9ICIgICA8SW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gJXI+XG4iICUgc2VsCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ld19saXN0LCBtc2cKICAgICAgICAgICAgIG5ld19saXN0ID0gW10KICAgICAgICAgICAgIGZvciBmdW5jIGluIGxpc3Q6Ci0gICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHNlbCwgZnVuY19zdGRfc3RyaW5nKGZ1bmMpKToKKyAgICAgICAgICAgICAgICBpZiByZXguc2VhcmNoKGZ1bmNfc3RkX3N0cmluZyhmdW5jKSk6CiAgICAgICAgICAgICAgICAgICAgIG5ld19saXN0LmFwcGVuZChmdW5jKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY291bnQgPSBsZW4obGlzdCkKLSAgICAgICAgICAgIGlmIHR5cGUoc2VsKSA9PSB0eXBlKDEuMCkgYW5kIDAuMCA8PSBzZWwgPCAxLjA6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbCwgZmxvYXQpIGFuZCAwLjAgPD0gc2VsIDwgMS4wOgogICAgICAgICAgICAgICAgIGNvdW50ID0gaW50KGNvdW50ICogc2VsICsgLjUpCiAgICAgICAgICAgICAgICAgbmV3X2xpc3QgPSBsaXN0Wzpjb3VudF0KLSAgICAgICAgICAgIGVsaWYgdHlwZShzZWwpID09IHR5cGUoMSkgYW5kIDAgPD0gc2VsIDwgY291bnQ6CisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsLCAoaW50LCBsb25nKSkgYW5kIDAgPD0gc2VsIDwgY291bnQ6CiAgICAgICAgICAgICAgICAgY291bnQgPSBzZWwKICAgICAgICAgICAgICAgICBuZXdfbGlzdCA9IGxpc3RbOmNvdW50XQogICAgICAgICBpZiBsZW4obGlzdCkgIT0gbGVuKG5ld19saXN0KToKLSAgICAgICAgICAgIG1zZyA9IG1zZyArICIgICBMaXN0IHJlZHVjZWQgZnJvbSAlciB0byAlciBkdWUgdG8gcmVzdHJpY3Rpb24gPCVyPlxuIiAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgICBsZW4obGlzdCksIGxlbihuZXdfbGlzdCksIHNlbCkKKyAgICAgICAgICAgIG1zZyArPSAiICAgTGlzdCByZWR1Y2VkIGZyb20gJXIgdG8gJXIgZHVlIHRvIHJlc3RyaWN0aW9uIDwlcj5cbiIgJSAoCisgICAgICAgICAgICAgICAgbGVuKGxpc3QpLCBsZW4obmV3X2xpc3QpLCBzZWwpCiAKICAgICAgICAgcmV0dXJuIG5ld19saXN0LCBtc2cKIAogICAgIGRlZiBnZXRfcHJpbnRfbGlzdChzZWxmLCBzZWxfbGlzdCk6CiAgICAgICAgIHdpZHRoID0gc2VsZi5tYXhfbmFtZV9sZW4KICAgICAgICAgaWYgc2VsZi5mY25fbGlzdDoKLSAgICAgICAgICAgIGxpc3QgPSBzZWxmLmZjbl9saXN0WzpdCisgICAgICAgICAgICBzdGF0X2xpc3QgPSBzZWxmLmZjbl9saXN0WzpdCiAgICAgICAgICAgICBtc2cgPSAiICAgT3JkZXJlZCBieTogIiArIHNlbGYuc29ydF90eXBlICsgJ1xuJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGlzdCA9IHNlbGYuc3RhdHMua2V5cygpCisgICAgICAgICAgICBzdGF0X2xpc3QgPSBzZWxmLnN0YXRzLmtleXMoKQogICAgICAgICAgICAgbXNnID0gIiAgIFJhbmRvbSBsaXN0aW5nIG9yZGVyIHdhcyB1c2VkXG4iCiAKICAgICAgICAgZm9yIHNlbGVjdGlvbiBpbiBzZWxfbGlzdDoKLSAgICAgICAgICAgIGxpc3QsIG1zZyA9IHNlbGYuZXZhbF9wcmludF9hbW91bnQoc2VsZWN0aW9uLCBsaXN0LCBtc2cpCisgICAgICAgICAgICBzdGF0X2xpc3QsIG1zZyA9IHNlbGYuZXZhbF9wcmludF9hbW91bnQoc2VsZWN0aW9uLCBzdGF0X2xpc3QsIG1zZykKIAotICAgICAgICBjb3VudCA9IGxlbihsaXN0KQorICAgICAgICBjb3VudCA9IGxlbihzdGF0X2xpc3QpCiAKLSAgICAgICAgaWYgbm90IGxpc3Q6Ci0gICAgICAgICAgICByZXR1cm4gMCwgbGlzdAorICAgICAgICBpZiBub3Qgc3RhdF9saXN0OgorICAgICAgICAgICAgcmV0dXJuIDAsIHN0YXRfbGlzdAogICAgICAgICBwcmludCA+PiBzZWxmLnN0cmVhbSwgbXNnCiAgICAgICAgIGlmIGNvdW50IDwgbGVuKHNlbGYuc3RhdHMpOgogICAgICAgICAgICAgd2lkdGggPSAwCi0gICAgICAgICAgICBmb3IgZnVuYyBpbiBsaXN0OgorICAgICAgICAgICAgZm9yIGZ1bmMgaW4gc3RhdF9saXN0OgogICAgICAgICAgICAgICAgIGlmICBsZW4oZnVuY19zdGRfc3RyaW5nKGZ1bmMpKSA+IHdpZHRoOgogICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGxlbihmdW5jX3N0ZF9zdHJpbmcoZnVuYykpCi0gICAgICAgIHJldHVybiB3aWR0aCsyLCBsaXN0CisgICAgICAgIHJldHVybiB3aWR0aCsyLCBzdGF0X2xpc3QKIAogICAgIGRlZiBwcmludF9zdGF0cyhzZWxmLCAqYW1vdW50KToKICAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuZmlsZXM6CkBAIC0zNTMsNyArMzU5LDcgQEAKICAgICAgICAgcHJpbnQgPj4gc2VsZi5zdHJlYW0sIGluZGVudCwgc2VsZi50b3RhbF9jYWxscywgImZ1bmN0aW9uIGNhbGxzIiwKICAgICAgICAgaWYgc2VsZi50b3RhbF9jYWxscyAhPSBzZWxmLnByaW1fY2FsbHM6CiAgICAgICAgICAgICBwcmludCA+PiBzZWxmLnN0cmVhbSwgIiglZCBwcmltaXRpdmUgY2FsbHMpIiAlIHNlbGYucHJpbV9jYWxscywKLSAgICAgICAgcHJpbnQgPj4gc2VsZi5zdHJlYW0sICJpbiAlLjNmIENQVSBzZWNvbmRzIiAlIHNlbGYudG90YWxfdHQKKyAgICAgICAgcHJpbnQgPj4gc2VsZi5zdHJlYW0sICJpbiAlLjNmIHNlY29uZHMiICUgc2VsZi50b3RhbF90dAogICAgICAgICBwcmludCA+PiBzZWxmLnN0cmVhbQogICAgICAgICB3aWR0aCwgbGlzdCA9IHNlbGYuZ2V0X3ByaW50X2xpc3QoYW1vdW50KQogICAgICAgICBpZiBsaXN0OgpAQCAtNDcxLDE2ICs0NzcsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBkaXJlY3Rpb24KICAgICAgICAgcmV0dXJuIDAKIAotZGVmIENtcFRvS2V5KG15Y21wKToKLSAgICAiIiJDb252ZXJ0IGEgY21wPSBmdW5jdGlvbiBpbnRvIGEga2V5PSBmdW5jdGlvbiIiIgotICAgIGNsYXNzIEsob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaik6Ci0gICAgICAgICAgICBzZWxmLm9iaiA9IG9iagotICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgICAgIHJldHVybiBteWNtcChzZWxmLm9iaiwgb3RoZXIub2JqKSA9PSAtMQotICAgIHJldHVybiBLCi0KLQogIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAjIGZ1bmNfbmFtZSBpcyBhIHRyaXBsZSAoZmlsZTpzdHJpbmcsIGxpbmU6aW50LCBuYW1lOnN0cmluZykKIApAQCAtNTYyLDEyICs1NTgsMTAgQEAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2ZpbGU9Tm9uZSk6CiAgICAgICAgICAgICBjbWQuQ21kLl9faW5pdF9fKHNlbGYpCiAgICAgICAgICAgICBzZWxmLnByb21wdCA9ICIlICIKKyAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBOb25lCisgICAgICAgICAgICBzZWxmLnN0cmVhbSA9IHN5cy5zdGRvdXQKICAgICAgICAgICAgIGlmIHByb2ZpbGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdGF0cyA9IFN0YXRzKHByb2ZpbGUpCi0gICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0gPSBzZWxmLnN0YXRzLnN0cmVhbQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnN0YXRzID0gTm9uZQotICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtID0gc3lzLnN0ZG91dAorICAgICAgICAgICAgICAgIHNlbGYuZG9fcmVhZChwcm9maWxlKQogCiAgICAgICAgIGRlZiBnZW5lcmljKHNlbGYsIGZuLCBsaW5lKToKICAgICAgICAgICAgIGFyZ3MgPSBsaW5lLnNwbGl0KCkKQEAgLTY2OCw3ICs2NjIsNyBAQAogICAgICAgICAgICAgICAgIHByaW50ID4+IHNlbGYuc3RyZWFtLCAiTm8gc3RhdGlzdGljcyBvYmplY3QgaXMgbG9hZGVkLiIKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIGFiYnJldnMgPSBzZWxmLnN0YXRzLmdldF9zb3J0X2FyZ19kZWZzKCkKLSAgICAgICAgICAgIGlmIGxpbmUgYW5kIG5vdCBmaWx0ZXIobGFtYmRhIHgsYT1hYmJyZXZzOiB4IG5vdCBpbiBhLGxpbmUuc3BsaXQoKSk6CisgICAgICAgICAgICBpZiBsaW5lIGFuZCBhbGwoKHggaW4gYWJicmV2cykgZm9yIHggaW4gbGluZS5zcGxpdCgpKToKICAgICAgICAgICAgICAgICBzZWxmLnN0YXRzLnNvcnRfc3RhdHMoKmxpbmUuc3BsaXQoKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQgPj4gc2VsZi5zdHJlYW0sICJWYWxpZCBzb3J0IGtleXMgKHVuaXF1ZSBwcmVmaXhlcyBhcmUgYWNjZXB0ZWQpOiIKZGlmZiAtLWdpdCBhL0xpYi9weV9jb21waWxlLnB5IGIvTGliL3B5X2NvbXBpbGUucHkKaW5kZXggODllODBmOC4uZGMxY2FlOSAxMDA2NDQKLS0tIGEvTGliL3B5X2NvbXBpbGUucHkKKysrIGIvTGliL3B5X2NvbXBpbGUucHkKQEAgLTYxLDE1ICs2MSw2IEBACiAgICAgICAgIHJldHVybiBzZWxmLm1zZwogCiAKLSMgRGVmaW5lIGFuIGludGVybmFsIGhlbHBlciBhY2NvcmRpbmcgdG8gdGhlIHBsYXRmb3JtCi1pZiBvcy5uYW1lID09ICJtYWMiOgotICAgIGltcG9ydCBNYWNPUwotICAgIGRlZiBzZXRfY3JlYXRvcl90eXBlKGZpbGUpOgotICAgICAgICBNYWNPUy5TZXRDcmVhdG9yQW5kVHlwZShmaWxlLCAnUHl0aCcsICdQWUMgJykKLWVsc2U6Ci0gICAgZGVmIHNldF9jcmVhdG9yX3R5cGUoZmlsZSk6Ci0gICAgICAgIHBhc3MKLQogZGVmIHdyX2xvbmcoZiwgeCk6CiAgICAgIiIiSW50ZXJuYWw7IHdyaXRlIGEgMzItYml0IGludCB0byBhIGZpbGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlci4iIiIKICAgICBmLndyaXRlKGNociggeCAgICAgICAgJiAweGZmKSkKQEAgLTExMiwxNSArMTAzLDEyIEBACiAgICAgZGlyZWN0b3JpZXMpLgogCiAgICAgIiIiCi0gICAgZiA9IG9wZW4oZmlsZSwgJ1UnKQotICAgIHRyeToKLSAgICAgICAgdGltZXN0YW1wID0gbG9uZyhvcy5mc3RhdChmLmZpbGVubygpKS5zdF9tdGltZSkKLSAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgIHRpbWVzdGFtcCA9IGxvbmcob3Muc3RhdChmaWxlKS5zdF9tdGltZSkKLSAgICBjb2Rlc3RyaW5nID0gZi5yZWFkKCkKLSAgICBmLmNsb3NlKCkKLSAgICBpZiBjb2Rlc3RyaW5nIGFuZCBjb2Rlc3RyaW5nWy0xXSAhPSAnXG4nOgotICAgICAgICBjb2Rlc3RyaW5nID0gY29kZXN0cmluZyArICdcbicKKyAgICB3aXRoIG9wZW4oZmlsZSwgJ1UnKSBhcyBmOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0aW1lc3RhbXAgPSBsb25nKG9zLmZzdGF0KGYuZmlsZW5vKCkpLnN0X210aW1lKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB0aW1lc3RhbXAgPSBsb25nKG9zLnN0YXQoZmlsZSkuc3RfbXRpbWUpCisgICAgICAgIGNvZGVzdHJpbmcgPSBmLnJlYWQoKQogICAgIHRyeToKICAgICAgICAgY29kZW9iamVjdCA9IF9fYnVpbHRpbl9fLmNvbXBpbGUoY29kZXN0cmluZywgZGZpbGUgb3IgZmlsZSwnZXhlYycpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbixlcnI6CkBAIC0xMzIsMTUgKzEyMCwxMyBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgaWYgY2ZpbGUgaXMgTm9uZToKICAgICAgICAgY2ZpbGUgPSBmaWxlICsgKF9fZGVidWdfXyBhbmQgJ2MnIG9yICdvJykKLSAgICBmYyA9IG9wZW4oY2ZpbGUsICd3YicpCi0gICAgZmMud3JpdGUoJ1wwXDBcMFwwJykKLSAgICB3cl9sb25nKGZjLCB0aW1lc3RhbXApCi0gICAgbWFyc2hhbC5kdW1wKGNvZGVvYmplY3QsIGZjKQotICAgIGZjLmZsdXNoKCkKLSAgICBmYy5zZWVrKDAsIDApCi0gICAgZmMud3JpdGUoTUFHSUMpCi0gICAgZmMuY2xvc2UoKQotICAgIHNldF9jcmVhdG9yX3R5cGUoY2ZpbGUpCisgICAgd2l0aCBvcGVuKGNmaWxlLCAnd2InKSBhcyBmYzoKKyAgICAgICAgZmMud3JpdGUoJ1wwXDBcMFwwJykKKyAgICAgICAgd3JfbG9uZyhmYywgdGltZXN0YW1wKQorICAgICAgICBtYXJzaGFsLmR1bXAoY29kZW9iamVjdCwgZmMpCisgICAgICAgIGZjLmZsdXNoKCkKKyAgICAgICAgZmMuc2VlaygwLCAwKQorICAgICAgICBmYy53cml0ZShNQUdJQykKIAogZGVmIG1haW4oYXJncz1Ob25lKToKICAgICAiIiJDb21waWxlIHNldmVyYWwgc291cmNlIGZpbGVzLgpAQCAtMTQ5LDE5ICsxMzUsMzUgQEAKICAgICBub3Qgc3BlY2lmaWVkKSBhcmUgY29tcGlsZWQgYW5kIHRoZSByZXN1bHRpbmcgYnl0ZWNvZGUgaXMgY2FjaGVkCiAgICAgaW4gdGhlIG5vcm1hbCBtYW5uZXIuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNlYXJjaCBhIGRpcmVjdG9yeQogICAgIHN0cnVjdHVyZSB0byBsb2NhdGUgc291cmNlIGZpbGVzOyBpdCBvbmx5IGNvbXBpbGVzIGZpbGVzIG5hbWVkCi0gICAgZXhwbGljaXRseS4KKyAgICBleHBsaWNpdGx5LiAgSWYgJy0nIGlzIHRoZSBvbmx5IHBhcmFtZXRlciBpbiBhcmdzLCB0aGUgbGlzdCBvZgorICAgIGZpbGVzIGlzIHRha2VuIGZyb20gc3RhbmRhcmQgaW5wdXQuCiAKICAgICAiIiIKICAgICBpZiBhcmdzIGlzIE5vbmU6CiAgICAgICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KICAgICBydiA9IDAKLSAgICBmb3IgZmlsZW5hbWUgaW4gYXJnczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29tcGlsZShmaWxlbmFtZSwgZG9yYWlzZT1UcnVlKQotICAgICAgICBleGNlcHQgUHlDb21waWxlRXJyb3IsIGVycjoKLSAgICAgICAgICAgICMgcmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIGF0IGxlYXN0IG9uZSBmYWlsdXJlCi0gICAgICAgICAgICBydiA9IDEKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZXJyLm1zZykKKyAgICBpZiBhcmdzID09IFsnLSddOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGZpbGVuYW1lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJzdHJpcCgnXG4nKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbXBpbGUoZmlsZW5hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBQeUNvbXBpbGVFcnJvciBhcyBlcnJvcjoKKyAgICAgICAgICAgICAgICBydiA9IDEKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGVycm9yLm1zZykKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycm9yOgorICAgICAgICAgICAgICAgIHJ2ID0gMQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgZXJyb3IpCisgICAgZWxzZToKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGFyZ3M6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29tcGlsZShmaWxlbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICAgICAgZXhjZXB0IFB5Q29tcGlsZUVycm9yIGFzIGVycm9yOgorICAgICAgICAgICAgICAgICMgcmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIGF0IGxlYXN0IG9uZSBmYWlsdXJlCisgICAgICAgICAgICAgICAgcnYgPSAxCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShlcnJvci5tc2cpCiAgICAgcmV0dXJuIHJ2CiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvcHlkb2MucHkgYi9MaWIvcHlkb2MucHkKaW5kZXggODZhNmFhMC4uZmY5YTVmNCAxMDA3NTUKLS0tIGEvTGliL3B5ZG9jLnB5CisrKyBiL0xpYi9weWRvYy5weQpAQCAtMTExMyw3ICsxMTEzLDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHNlbGYuc2VjdGlvbignQ1JFRElUUycsIHN0cihvYmplY3QuX19jcmVkaXRzX18pKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgZG9jY2xhc3Moc2VsZiwgb2JqZWN0LCBuYW1lPU5vbmUsIG1vZD1Ob25lKToKKyAgICBkZWYgZG9jY2xhc3Moc2VsZiwgb2JqZWN0LCBuYW1lPU5vbmUsIG1vZD1Ob25lLCAqaWdub3JlZCk6CiAgICAgICAgICIiIlByb2R1Y2UgdGV4dCBkb2N1bWVudGF0aW9uIGZvciBhIGdpdmVuIGNsYXNzIG9iamVjdC4iIiIKICAgICAgICAgcmVhbG5hbWUgPSBvYmplY3QuX19uYW1lX18KICAgICAgICAgbmFtZSA9IG5hbWUgb3IgcmVhbG5hbWUKQEAgLTE1MzMsMTEgKzE1MzMsMTEgQEAKICAgICAjIFRoZXNlIGRpY3Rpb25hcmllcyBtYXAgYSB0b3BpYyBuYW1lIHRvIGVpdGhlciBhbiBhbGlhcywgb3IgYSB0dXBsZQogICAgICMgKGxhYmVsLCBzZWVhbHNvLWl0ZW1zKS4gIFRoZSAibGFiZWwiIGlzIHRoZSBsYWJlbCBvZiB0aGUgY29ycmVzcG9uZGluZwogICAgICMgc2VjdGlvbiBpbiB0aGUgLnJzdCBmaWxlIHVuZGVyIERvYy8gYW5kIGFuIGluZGV4IGludG8gdGhlIGRpY3Rpb25hcnkKLSAgICAjIGluIHB5ZG9jX3RvcGljcy5weS4KKyAgICAjIGluIHB5ZG9jX2RhdGEvdG9waWNzLnB5LgogICAgICMKICAgICAjIENBVVRJT046IGlmIHlvdSBjaGFuZ2Ugb25lIG9mIHRoZXNlIGRpY3Rpb25hcmllcywgYmUgc3VyZSB0byBhZGFwdCB0aGUKICAgICAjICAgICAgICAgIGxpc3Qgb2YgbmVlZGVkIGxhYmVscyBpbiBEb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkgYW5kCi0gICAgIyAgICAgICAgICByZWdlbmVyYXRlIHRoZSBweWRvY190b3BpY3MucHkgZmlsZSBieSBydW5uaW5nCisgICAgIyAgICAgICAgICByZWdlbmVyYXRlIHRoZSBweWRvY19kYXRhL3RvcGljcy5weSBmaWxlIGJ5IHJ1bm5pbmcKICAgICAjICAgICAgICAgICAgICBtYWtlIHB5ZG9jLXRvcGljcwogICAgICMgICAgICAgICAgaW4gRG9jLyBhbmQgY29weWluZyB0aGUgb3V0cHV0IGZpbGUgaW50byB0aGUgTGliLyBkaXJlY3RvcnkuCiAKQEAgLTE3MTgsOCArMTcxOCw5IEBACiAgICAgICAgICAgICByZXR1cm4gJycKICAgICAgICAgcmV0dXJuICc8cHlkb2MuSGVscGVyIGluc3RhbmNlPicKIAotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCByZXF1ZXN0PU5vbmUpOgotICAgICAgICBpZiByZXF1ZXN0IGlzIG5vdCBOb25lOgorICAgIF9Hb0ludGVyYWN0aXZlID0gb2JqZWN0KCkKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcmVxdWVzdD1fR29JbnRlcmFjdGl2ZSk6CisgICAgICAgIGlmIHJlcXVlc3QgaXMgbm90IHNlbGYuX0dvSW50ZXJhY3RpdmU6CiAgICAgICAgICAgICBzZWxmLmhlbHAocmVxdWVzdCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuaW50cm8oKQpAQCAtMTgyNSwxMSArMTgyNiwxMSBAQAogCiAgICAgZGVmIHNob3d0b3BpYyhzZWxmLCB0b3BpYywgbW9yZV94cmVmcz0nJyk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGltcG9ydCBweWRvY190b3BpY3MKKyAgICAgICAgICAgIGltcG9ydCBweWRvY19kYXRhLnRvcGljcwogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnJycKIFNvcnJ5LCB0b3BpYyBhbmQga2V5d29yZCBkb2N1bWVudGF0aW9uIGlzIG5vdCBhdmFpbGFibGUgYmVjYXVzZSB0aGUKLW1vZHVsZSAicHlkb2NfdG9waWNzIiBjb3VsZCBub3QgYmUgZm91bmQuCittb2R1bGUgInB5ZG9jX2RhdGEudG9waWNzIiBjb3VsZCBub3QgYmUgZm91bmQuCiAnJycpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdGFyZ2V0ID0gc2VsZi50b3BpY3MuZ2V0KHRvcGljLCBzZWxmLmtleXdvcmRzLmdldCh0b3BpYykpCkBAIC0xODQxLDcgKzE4NDIsNyBAQAogCiAgICAgICAgIGxhYmVsLCB4cmVmcyA9IHRhcmdldAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkb2MgPSBweWRvY190b3BpY3MudG9waWNzW2xhYmVsXQorICAgICAgICAgICAgZG9jID0gcHlkb2NfZGF0YS50b3BpY3MudG9waWNzW2xhYmVsXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnbm8gZG9jdW1lbnRhdGlvbiBmb3VuZCBmb3IgJXNcbicgJSByZXByKHRvcGljKSkKICAgICAgICAgICAgIHJldHVybgpAQCAtMjAzMSw4ICsyMDMyLDggQEAKIAogICAgIGNsYXNzIERvY1NlcnZlcihCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyKToKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGNhbGxiYWNrKToKLSAgICAgICAgICAgIGhvc3QgPSAoc3lzLnBsYXRmb3JtID09ICdtYWMnKSBhbmQgJzEyNy4wLjAuMScgb3IgJ2xvY2FsaG9zdCcKLSAgICAgICAgICAgIHNlbGYuYWRkcmVzcyA9ICgnJywgcG9ydCkKKyAgICAgICAgICAgIGhvc3QgPSAnbG9jYWxob3N0JworICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gKGhvc3QsIHBvcnQpCiAgICAgICAgICAgICBzZWxmLnVybCA9ICdodHRwOi8vJXM6JWQvJyAlIChob3N0LCBwb3J0KQogICAgICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCiAgICAgICAgICAgICBzZWxmLmJhc2UuX19pbml0X18oc2VsZiwgc2VsZi5hZGRyZXNzLCBzZWxmLmhhbmRsZXIpCkBAIC0yMTQ4LDEwICsyMTQ5LDYgQEAKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjogIyBwcmUtd2ViYnJvd3Nlci5weSBjb21wYXRpYmlsaXR5CiAgICAgICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICAgICAgICAgIG9zLnN5c3RlbSgnc3RhcnQgIiVzIicgJSB1cmwpCi0gICAgICAgICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ21hYyc6Ci0gICAgICAgICAgICAgICAgICAgIHRyeTogaW1wb3J0IGljCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjogcGFzcwotICAgICAgICAgICAgICAgICAgICBlbHNlOiBpYy5sYXVuY2h1cmwodXJsKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJjID0gb3Muc3lzdGVtKCduZXRzY2FwZSAtcmVtb3RlICJvcGVuVVJMKCVzKSIgJicgJSB1cmwpCiAgICAgICAgICAgICAgICAgICAgIGlmIHJjOiBvcy5zeXN0ZW0oJ25ldHNjYXBlICIlcyIgJicgJSB1cmwpCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL2NvcHlyaWdodCBiL0xpYi9weWRvY19kYXRhL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9jb3B5cmlnaHQKY29weSB0byBMaWIvcHlkb2NfZGF0YS9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvTGliL3B5ZG9jX3RvcGljcy5weSBiL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQpzaW1pbGFyaXR5IGluZGV4IDY2JQpyZW5hbWUgZnJvbSBMaWIvcHlkb2NfdG9waWNzLnB5CnJlbmFtZSB0byBMaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKaW5kZXggNTcyODc5Zi4uODQ5Y2QyNSAxMDA2NDQKLS0tIGEvTGliL3B5ZG9jX3RvcGljcy5weQorKysgYi9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKQEAgLTEsNCArMSw0IEBACi0jIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uIE1vbiBBdWcgMjMgMTk6MzM6NDYgMjAxMAorIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiBTYXQgSnVsICAzIDA4OjUyOjA0IDIwMTAKIHRvcGljcyA9IHsnYXNzZXJ0JzogdSdcblRoZSBgYGFzc2VydGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkFzc2VydCBzdGF0ZW1lbnRzIGFyZSBhIGNvbnZlbmllbnQgd2F5IHRvIGluc2VydCBkZWJ1Z2dpbmcgYXNzZXJ0aW9uc1xuaW50byBhIHByb2dyYW06XG5cbiAgIGFzc2VydF9zdG10IDo6PSAiYXNzZXJ0IiBleHByZXNzaW9uIFsiLCIgZXhwcmVzc2lvbl1cblxuVGhlIHNpbXBsZSBmb3JtLCBgYGFzc2VydCBleHByZXNzaW9uYGAsIGlzIGVxdWl2YWxlbnQgdG9cblxuICAgaWYgX19kZWJ1Z19fOlxuICAgICAgaWYgbm90IGV4cHJlc3Npb246IHJhaXNlIEFzc2VydGlvbkVycm9yXG5cblRoZSBleHRlbmRlZCBmb3JtLCBgYGFzc2VydCBleHByZXNzaW9uMSwgZXhwcmVzc2lvbjJgYCwgaXMgZXF1aXZhbGVudFxudG9cblxuICAgaWYgX19kZWJ1Z19fOlxuICAgICAgaWYgbm90IGV4cHJlc3Npb24xOiByYWlzZSBBc3NlcnRpb25FcnJvcihleHByZXNzaW9uMilcblxuVGhlc2UgZXF1aXZhbGVuY2VzIGFzc3VtZSB0aGF0IGBgX19kZWJ1Z19fYGAgYW5kIGBgQXNzZXJ0aW9uRXJyb3JgYFxucmVmZXIgdG8gdGhlIGJ1aWx0LWluIHZhcmlhYmxlcyB3aXRoIHRob3NlIG5hbWVzLiAgSW4gdGhlIGN1cnJlbnRcbmltcGxlbWVudGF0aW9uLCB0aGUgYnVpbHQtaW4gdmFyaWFibGUgYGBfX2RlYnVnX19gYCBpcyBgYFRydWVgYCB1bmRlclxubm9ybWFsIGNpcmN1bXN0YW5jZXMsIGBgRmFsc2VgYCB3aGVuIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWRcbihjb21tYW5kIGxpbmUgb3B0aW9uIC1PKS4gIFRoZSBjdXJyZW50IGNvZGUgZ2VuZXJhdG9yIGVtaXRzIG5vIGNvZGVcbmZvciBhbiBhc3NlcnQgc3RhdGVtZW50IHdoZW4gb3B0aW1pemF0aW9uIGlzIHJlcXVlc3RlZCBhdCBjb21waWxlXG50aW1lLiAgTm90ZSB0aGF0IGl0IGlzIHVubmVjZXNzYXJ5IHRvIGluY2x1ZGUgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGVcbmV4cHJlc3Npb24gdGhhdCBmYWlsZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2U7IGl0IHdpbGwgYmUgZGlzcGxheWVkIGFzXG5wYXJ0IG9mIHRoZSBzdGFjayB0cmFjZS5cblxuQXNzaWdubWVudHMgdG8gYGBfX2RlYnVnX19gYCBhcmUgaWxsZWdhbC4gIFRoZSB2YWx1ZSBmb3IgdGhlIGJ1aWx0LWluXG52YXJpYWJsZSBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIGludGVycHJldGVyIHN0YXJ0cy5cbicsCiAgJ2Fzc2lnbm1lbnQnOiB1J1xuQXNzaWdubWVudCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqKipcblxuQXNzaWdubWVudCBzdGF0ZW1lbnRzIGFyZSB1c2VkIHRvIChyZSliaW5kIG5hbWVzIHRvIHZhbHVlcyBhbmQgdG9cbm1vZGlmeSBhdHRyaWJ1dGVzIG9yIGl0ZW1zIG9mIG11dGFibGUgb2JqZWN0czpcblxuICAgYXNzaWdubWVudF9zdG10IDo6PSAodGFyZ2V0X2xpc3QgIj0iKSsgKGV4cHJlc3Npb25fbGlzdCB8IHlpZWxkX2V4cHJlc3Npb24pXG4gICB0YXJnZXRfbGlzdCAgICAgOjo9IHRhcmdldCAoIiwiIHRhcmdldCkqIFsiLCJdXG4gICB0YXJnZXQgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgfCAiKCIgdGFyZ2V0X2xpc3QgIikiXG4gICAgICAgICAgICAgIHwgIlsiIHRhcmdldF9saXN0ICJdIlxuICAgICAgICAgICAgICB8IGF0dHJpYnV0ZXJlZlxuICAgICAgICAgICAgICB8IHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICB8IHNsaWNpbmdcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciB0aGUgbGFzdCB0aHJlZVxuc3ltYm9scy4pXG5cbkFuIGFzc2lnbm1lbnQgc3RhdGVtZW50IGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBsaXN0IChyZW1lbWJlciB0aGF0XG50aGlzIGNhbiBiZSBhIHNpbmdsZSBleHByZXNzaW9uIG9yIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHRoZSBsYXR0ZXJcbnlpZWxkaW5nIGEgdHVwbGUpIGFuZCBhc3NpZ25zIHRoZSBzaW5nbGUgcmVzdWx0aW5nIG9iamVjdCB0byBlYWNoIG9mXG50aGUgdGFyZ2V0IGxpc3RzLCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cbkFzc2lnbm1lbnQgaXMgZGVmaW5lZCByZWN1cnNpdmVseSBkZXBlbmRpbmcgb24gdGhlIGZvcm0gb2YgdGhlIHRhcmdldFxuKGxpc3QpLiBXaGVuIGEgdGFyZ2V0IGlzIHBhcnQgb2YgYSBtdXRhYmxlIG9iamVjdCAoYW4gYXR0cmlidXRlXG5yZWZlcmVuY2UsIHN1YnNjcmlwdGlvbiBvciBzbGljaW5nKSwgdGhlIG11dGFibGUgb2JqZWN0IG11c3RcbnVsdGltYXRlbHkgcGVyZm9ybSB0aGUgYXNzaWdubWVudCBhbmQgZGVjaWRlIGFib3V0IGl0cyB2YWxpZGl0eSwgYW5kXG5tYXkgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBhc3NpZ25tZW50IGlzIHVuYWNjZXB0YWJsZS4gIFRoZSBydWxlc1xub2JzZXJ2ZWQgYnkgdmFyaW91cyB0eXBlcyBhbmQgdGhlIGV4Y2VwdGlvbnMgcmFpc2VkIGFyZSBnaXZlbiB3aXRoIHRoZVxuZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0IHR5cGVzIChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGVcbmhpZXJhcmNoeSopLlxuXG5Bc3NpZ25tZW50IG9mIGFuIG9iamVjdCB0byBhIHRhcmdldCBsaXN0IGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgYXNcbmZvbGxvd3MuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgc2luZ2xlIHRhcmdldDogVGhlIG9iamVjdCBpcyBhc3NpZ25lZCB0b1xuICB0aGF0IHRhcmdldC5cblxuKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0YXJnZXRzOiBUaGUgb2JqZWN0XG4gIG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXMgYXMgdGhlcmUgYXJlXG4gIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgdGhlIGl0ZW1zIGFyZSBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvXG4gIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLiAoVGhpcyBydWxlIGlzIHJlbGF4ZWQgYXMgb2ZcbiAgUHl0aG9uIDEuNTsgaW4gZWFybGllciB2ZXJzaW9ucywgdGhlIG9iamVjdCBoYWQgdG8gYmUgYSB0dXBsZS5cbiAgU2luY2Ugc3RyaW5ncyBhcmUgc2VxdWVuY2VzLCBhbiBhc3NpZ25tZW50IGxpa2UgYGBhLCBiID0gInh5ImBgIGlzXG4gIG5vdyBsZWdhbCBhcyBsb25nIGFzIHRoZSBzdHJpbmcgaGFzIHRoZSByaWdodCBsZW5ndGguKVxuXG5Bc3NpZ25tZW50IG9mIGFuIG9iamVjdCB0byBhIHNpbmdsZSB0YXJnZXQgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhc1xuZm9sbG93cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGFuIGlkZW50aWZpZXIgKG5hbWUpOlxuXG4gICogSWYgdGhlIG5hbWUgZG9lcyBub3Qgb2NjdXIgaW4gYSBgYGdsb2JhbGBgIHN0YXRlbWVudCBpbiB0aGVcbiAgICBjdXJyZW50IGNvZGUgYmxvY2s6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlIGN1cnJlbnRcbiAgICBsb2NhbCBuYW1lc3BhY2UuXG5cbiAgKiBPdGhlcndpc2U6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgbmFtZXNwYWNlLlxuXG4gIFRoZSBuYW1lIGlzIHJlYm91bmQgaWYgaXQgd2FzIGFscmVhZHkgYm91bmQuICBUaGlzIG1heSBjYXVzZSB0aGVcbiAgcmVmZXJlbmNlIGNvdW50IGZvciB0aGUgb2JqZWN0IHByZXZpb3VzbHkgYm91bmQgdG8gdGhlIG5hbWUgdG8gcmVhY2hcbiAgemVybywgY2F1c2luZyB0aGUgb2JqZWN0IHRvIGJlIGRlYWxsb2NhdGVkIGFuZCBpdHMgZGVzdHJ1Y3RvciAoaWYgaXRcbiAgaGFzIG9uZSkgdG8gYmUgY2FsbGVkLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYSB0YXJnZXQgbGlzdCBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcyBvciBpbiBzcXVhcmVcbiAgYnJhY2tldHM6IFRoZSBvYmplY3QgbXVzdCBiZSBhbiBpdGVyYWJsZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICBpdGVtcyBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCBpdHMgaXRlbXMgYXJlXG4gIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhbiBhdHRyaWJ1dGUgcmVmZXJlbmNlOiBUaGUgcHJpbWFyeSBleHByZXNzaW9uIGluXG4gIHRoZSByZWZlcmVuY2UgaXMgZXZhbHVhdGVkLiAgSXQgc2hvdWxkIHlpZWxkIGFuIG9iamVjdCB3aXRoXG4gIGFzc2lnbmFibGUgYXR0cmlidXRlczsgaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIGBgVHlwZUVycm9yYGAgaXNcbiAgcmFpc2VkLiAgVGhhdCBvYmplY3QgaXMgdGhlbiBhc2tlZCB0byBhc3NpZ24gdGhlIGFzc2lnbmVkIG9iamVjdCB0b1xuICB0aGUgZ2l2ZW4gYXR0cmlidXRlOyBpZiBpdCBjYW5ub3QgcGVyZm9ybSB0aGUgYXNzaWdubWVudCwgaXQgcmFpc2VzXG4gIGFuIGV4Y2VwdGlvbiAodXN1YWxseSBidXQgbm90IG5lY2Vzc2FyaWx5IGBgQXR0cmlidXRlRXJyb3JgYCkuXG5cbiAgTm90ZTogSWYgdGhlIG9iamVjdCBpcyBhIGNsYXNzIGluc3RhbmNlIGFuZCB0aGUgYXR0cmlidXRlIHJlZmVyZW5jZVxuICBvY2N1cnMgb24gYm90aCBzaWRlcyBvZiB0aGUgYXNzaWdubWVudCBvcGVyYXRvciwgdGhlIFJIUyBleHByZXNzaW9uLFxuICBgYGEueGBgIGNhbiBhY2Nlc3MgZWl0aGVyIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBvciAoaWYgbm8gaW5zdGFuY2VcbiAgYXR0cmlidXRlIGV4aXN0cykgYSBjbGFzcyBhdHRyaWJ1dGUuICBUaGUgTEhTIHRhcmdldCBgYGEueGBgIGlzXG4gIGFsd2F5cyBzZXQgYXMgYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gIFRodXMsIHRoZSB0d28gb2NjdXJyZW5jZXMgb2YgYGBhLnhgYCBkbyBub3QgbmVjZXNzYXJpbHkgcmVmZXIgdG8gdGhlXG4gIHNhbWUgYXR0cmlidXRlOiBpZiB0aGUgUkhTIGV4cHJlc3Npb24gcmVmZXJzIHRvIGEgY2xhc3MgYXR0cmlidXRlLFxuICB0aGUgTEhTIGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgYXR0cmlidXRlIGFzIHRoZSB0YXJnZXQgb2YgdGhlXG4gIGFzc2lnbm1lbnQ6XG5cbiAgICAgY2xhc3MgQ2xzOlxuICAgICAgICAgeCA9IDMgICAgICAgICAgICAgIyBjbGFzcyB2YXJpYWJsZVxuICAgICBpbnN0ID0gQ2xzKClcbiAgICAgaW5zdC54ID0gaW5zdC54ICsgMSAgICMgd3JpdGVzIGluc3QueCBhcyA0IGxlYXZpbmcgQ2xzLnggYXMgM1xuXG4gIFRoaXMgZGVzY3JpcHRpb24gZG9lcyBub3QgbmVjZXNzYXJpbHkgYXBwbHkgdG8gZGVzY3JpcHRvclxuICBhdHRyaWJ1dGVzLCBzdWNoIGFzIHByb3BlcnRpZXMgY3JlYXRlZCB3aXRoIGBgcHJvcGVydHkoKWBgLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYSBzdWJzY3JpcHRpb246IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW4gdGhlXG4gIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgZWl0aGVyIGEgbXV0YWJsZSBzZXF1ZW5jZVxuICBvYmplY3QgKHN1Y2ggYXMgYSBsaXN0KSBvciBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSkuXG4gIE5leHQsIHRoZSBzdWJzY3JpcHQgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQuXG5cbiAgSWYgdGhlIHByaW1hcnkgaXMgYSBtdXRhYmxlIHNlcXVlbmNlIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpLCB0aGVcbiAgc3Vic2NyaXB0IG11c3QgeWllbGQgYSBwbGFpbiBpbnRlZ2VyLiAgSWYgaXQgaXMgbmVnYXRpdmUsIHRoZVxuICBzZXF1ZW5jZVwncyBsZW5ndGggaXMgYWRkZWQgdG8gaXQuIFRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhXG4gIG5vbm5lZ2F0aXZlIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGgsIGFuZCB0aGVcbiAgc2VxdWVuY2UgaXMgYXNrZWQgdG8gYXNzaWduIHRoZSBhc3NpZ25lZCBvYmplY3QgdG8gaXRzIGl0ZW0gd2l0aFxuICB0aGF0IGluZGV4LiAgSWYgdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZSwgYGBJbmRleEVycm9yYGAgaXMgcmFpc2VkXG4gIChhc3NpZ25tZW50IHRvIGEgc3Vic2NyaXB0ZWQgc2VxdWVuY2UgY2Fubm90IGFkZCBuZXcgaXRlbXMgdG8gYVxuICBsaXN0KS5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCBoYXZlIGEgdHlwZSBjb21wYXRpYmxlIHdpdGggdGhlIG1hcHBpbmdcJ3Mga2V5IHR5cGUsXG4gIGFuZCB0aGUgbWFwcGluZyBpcyB0aGVuIGFza2VkIHRvIGNyZWF0ZSBhIGtleS9kYXR1bSBwYWlyIHdoaWNoIG1hcHNcbiAgdGhlIHN1YnNjcmlwdCB0byB0aGUgYXNzaWduZWQgb2JqZWN0LiAgVGhpcyBjYW4gZWl0aGVyIHJlcGxhY2UgYW5cbiAgZXhpc3Rpbmcga2V5L3ZhbHVlIHBhaXIgd2l0aCB0aGUgc2FtZSBrZXkgdmFsdWUsIG9yIGluc2VydCBhIG5ld1xuICBrZXkvdmFsdWUgcGFpciAoaWYgbm8ga2V5IHdpdGggdGhlIHNhbWUgdmFsdWUgZXhpc3RlZCkuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHNsaWNpbmc6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW4gdGhlIHJlZmVyZW5jZVxuICBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYSBtdXRhYmxlIHNlcXVlbmNlIG9iamVjdCAoc3VjaCBhcyBhXG4gIGxpc3QpLiAgVGhlIGFzc2lnbmVkIG9iamVjdCBzaG91bGQgYmUgYSBzZXF1ZW5jZSBvYmplY3Qgb2YgdGhlIHNhbWVcbiAgdHlwZS4gIE5leHQsIHRoZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCxcbiAgaW5zb2ZhciB0aGV5IGFyZSBwcmVzZW50OyBkZWZhdWx0cyBhcmUgemVybyBhbmQgdGhlIHNlcXVlbmNlXCdzXG4gIGxlbmd0aC4gIFRoZSBib3VuZHMgc2hvdWxkIGV2YWx1YXRlIHRvIChzbWFsbCkgaW50ZWdlcnMuICBJZiBlaXRoZXJcbiAgYm91bmQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGggaXMgYWRkZWQgdG8gaXQuIFRoZVxuICByZXN1bHRpbmcgYm91bmRzIGFyZSBjbGlwcGVkIHRvIGxpZSBiZXR3ZWVuIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGgsIGluY2x1c2l2ZS4gIEZpbmFsbHksIHRoZSBzZXF1ZW5jZSBvYmplY3QgaXMgYXNrZWQgdG8gcmVwbGFjZVxuICB0aGUgc2xpY2Ugd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLiAgVGhlIGxlbmd0aCBvZlxuICB0aGUgc2xpY2UgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLFxuICB0aHVzIGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIG9iamVjdFxuICBhbGxvd3MgaXQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZVxuc3ludGF4IGZvciB0YXJnZXRzIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIGZvciBleHByZXNzaW9ucywgYW5kXG5pbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwaGFzZSwgY2F1c2luZ1xubGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy5cblxuV0FSTklORzogQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHNcbmJldHdlZW4gdGhlIGxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSBcJ3NhZmVcJyAoZm9yXG5leGFtcGxlIGBgYSwgYiA9IGIsIGFgYCBzd2FwcyB0d28gdmFyaWFibGVzKSwgb3ZlcmxhcHMgKndpdGhpbiogdGhlXG5jb2xsZWN0aW9uIG9mIGFzc2lnbmVkLXRvIHZhcmlhYmxlcyBhcmUgbm90IHNhZmUhICBGb3IgaW5zdGFuY2UsIHRoZVxuZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzIGBgWzAsIDJdYGA6XG5cbiAgIHggPSBbMCwgMV1cbiAgIGkgPSAwXG4gICBpLCB4W2ldID0gMSwgMlxuICAgcHJpbnQgeFxuXG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IHN0YXRlbWVudHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIGNvbWJpbmF0aW9uLCBpbiBhIHNpbmdsZSBzdGF0ZW1lbnQsIG9mIGFcbmJpbmFyeSBvcGVyYXRpb24gYW5kIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50OlxuXG4gICBhdWdtZW50ZWRfYXNzaWdubWVudF9zdG10IDo6PSBhdWd0YXJnZXQgYXVnb3AgKGV4cHJlc3Npb25fbGlzdCB8IHlpZWxkX2V4cHJlc3Npb24pXG4gICBhdWd0YXJnZXQgICAgICAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyIHwgYXR0cmlidXRlcmVmIHwgc3Vic2NyaXB0aW9uIHwgc2xpY2luZ1xuICAgYXVnb3AgICAgICAgICAgICAgICAgICAgICA6Oj0gIis9IiB8ICItPSIgfCAiKj0iIHwgIi89IiB8ICIvLz0iIHwgIiU9IiB8ICIqKj0iXG4gICAgICAgICAgICAgfCAiPj49IiB8ICI8PD0iIHwgIiY9IiB8ICJePSIgfCAifD0iXG5cbihTZWUgc2VjdGlvbiAqUHJpbWFyaWVzKiBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWxcbmFzc2lnbm1lbnQgc3RhdGVtZW50cywgY2Fubm90IGJlIGFuIHVucGFja2luZykgYW5kIHRoZSBleHByZXNzaW9uXG5saXN0LCBwZXJmb3JtcyB0aGUgYmluYXJ5IG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiBhc3NpZ25tZW50XG5vbiB0aGUgdHdvIG9wZXJhbmRzLCBhbmQgYXNzaWducyB0aGUgcmVzdWx0IHRvIHRoZSBvcmlnaW5hbCB0YXJnZXQuXG5UaGUgdGFyZ2V0IGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV4cHJlc3Npb24gbGlrZSBgYHggKz0gMWBgIGNhbiBiZSByZXdyaXR0ZW4gYXNcbmBgeCA9IHggKyAxYGAgdG8gYWNoaWV2ZSBhIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSBlcXVhbCBlZmZlY3QuIEluXG50aGUgYXVnbWVudGVkIHZlcnNpb24sIGBgeGBgIGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuIEFsc28sIHdoZW5cbnBvc3NpYmxlLCB0aGUgYWN0dWFsIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgKmluLXBsYWNlKiwgbWVhbmluZyB0aGF0XG5yYXRoZXIgdGhhbiBjcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIGFzc2lnbmluZyB0aGF0IHRvIHRoZSB0YXJnZXQsXG50aGUgb2xkIG9iamVjdCBpcyBtb2RpZmllZCBpbnN0ZWFkLlxuXG5XaXRoIHRoZSBleGNlcHRpb24gb2YgYXNzaWduaW5nIHRvIHR1cGxlcyBhbmQgbXVsdGlwbGUgdGFyZ2V0cyBpbiBhXG5zaW5nbGUgc3RhdGVtZW50LCB0aGUgYXNzaWdubWVudCBkb25lIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50XG5zdGF0ZW1lbnRzIGlzIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIG5vcm1hbCBhc3NpZ25tZW50cy4gU2ltaWxhcmx5LFxud2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBwb3NzaWJsZSAqaW4tcGxhY2UqIGJlaGF2aW9yLCB0aGUgYmluYXJ5XG5vcGVyYXRpb24gcGVyZm9ybWVkIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxcbmJpbmFyeSBvcGVyYXRpb25zLlxuXG5Gb3IgdGFyZ2V0cyB3aGljaCBhcmUgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHRoZSBzYW1lICpjYXZlYXQgYWJvdXRcbmNsYXNzIGFuZCBpbnN0YW5jZSBhdHRyaWJ1dGVzKiBhcHBsaWVzIGFzIGZvciByZWd1bGFyIGFzc2lnbm1lbnRzLlxuJywKICAnYXRvbS1pZGVudGlmaWVycyc6IHUnXG5JZGVudGlmaWVycyAoTmFtZXMpXG4qKioqKioqKioqKioqKioqKioqXG5cbkFuIGlkZW50aWZpZXIgb2NjdXJyaW5nIGFzIGFuIGF0b20gaXMgYSBuYW1lLiAgU2VlIHNlY3Rpb25cbipJZGVudGlmaWVycyBhbmQga2V5d29yZHMqIGZvciBsZXhpY2FsIGRlZmluaXRpb24gYW5kIHNlY3Rpb24gKk5hbWluZ1xuYW5kIGJpbmRpbmcqIGZvciBkb2N1bWVudGF0aW9uIG9mIG5hbWluZyBhbmQgYmluZGluZy5cblxuV2hlbiB0aGUgbmFtZSBpcyBib3VuZCB0byBhbiBvYmplY3QsIGV2YWx1YXRpb24gb2YgdGhlIGF0b20geWllbGRzXG50aGF0IG9iamVjdC4gV2hlbiBhIG5hbWUgaXMgbm90IGJvdW5kLCBhbiBhdHRlbXB0IHRvIGV2YWx1YXRlIGl0XG5yYWlzZXMgYSBgYE5hbWVFcnJvcmBgIGV4Y2VwdGlvbi5cblxuKipQcml2YXRlIG5hbWUgbWFuZ2xpbmc6KiogV2hlbiBhbiBpZGVudGlmaWVyIHRoYXQgdGV4dHVhbGx5IG9jY3VycyBpblxuYSBjbGFzcyBkZWZpbml0aW9uIGJlZ2lucyB3aXRoIHR3byBvciBtb3JlIHVuZGVyc2NvcmUgY2hhcmFjdGVycyBhbmRcbmRvZXMgbm90IGVuZCBpbiB0d28gb3IgbW9yZSB1bmRlcnNjb3JlcywgaXQgaXMgY29uc2lkZXJlZCBhICpwcml2YXRlXG5uYW1lKiBvZiB0aGF0IGNsYXNzLiBQcml2YXRlIG5hbWVzIGFyZSB0cmFuc2Zvcm1lZCB0byBhIGxvbmdlciBmb3JtXG5iZWZvcmUgY29kZSBpcyBnZW5lcmF0ZWQgZm9yIHRoZW0uICBUaGUgdHJhbnNmb3JtYXRpb24gaW5zZXJ0cyB0aGVcbmNsYXNzIG5hbWUgaW4gZnJvbnQgb2YgdGhlIG5hbWUsIHdpdGggbGVhZGluZyB1bmRlcnNjb3JlcyByZW1vdmVkLCBhbmRcbmEgc2luZ2xlIHVuZGVyc2NvcmUgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgdGhlIGNsYXNzIG5hbWUuICBGb3IgZXhhbXBsZSxcbnRoZSBpZGVudGlmaWVyIGBgX19zcGFtYGAgb2NjdXJyaW5nIGluIGEgY2xhc3MgbmFtZWQgYGBIYW1gYCB3aWxsIGJlXG50cmFuc2Zvcm1lZCB0byBgYF9IYW1fX3NwYW1gYC4gIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgaW5kZXBlbmRlbnQgb2ZcbnRoZSBzeW50YWN0aWNhbCBjb250ZXh0IGluIHdoaWNoIHRoZSBpZGVudGlmaWVyIGlzIHVzZWQuICBJZiB0aGVcbnRyYW5zZm9ybWVkIG5hbWUgaXMgZXh0cmVtZWx5IGxvbmcgKGxvbmdlciB0aGFuIDI1NSBjaGFyYWN0ZXJzKSxcbmltcGxlbWVudGF0aW9uIGRlZmluZWQgdHJ1bmNhdGlvbiBtYXkgaGFwcGVuLiAgSWYgdGhlIGNsYXNzIG5hbWVcbmNvbnNpc3RzIG9ubHkgb2YgdW5kZXJzY29yZXMsIG5vIHRyYW5zZm9ybWF0aW9uIGlzIGRvbmUuXG4nLApAQCAtMTAsNyArMTAsNyBAQAogICdiaXR3aXNlJzogdSdcbkJpbmFyeSBiaXR3aXNlIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuRWFjaCBvZiB0aGUgdGhyZWUgYml0d2lzZSBvcGVyYXRpb25zIGhhcyBhIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbDpcblxuICAgYW5kX2V4cHIgOjo9IHNoaWZ0X2V4cHIgfCBhbmRfZXhwciAiJiIgc2hpZnRfZXhwclxuICAgeG9yX2V4cHIgOjo9IGFuZF9leHByIHwgeG9yX2V4cHIgIl4iIGFuZF9leHByXG4gICBvcl9leHByICA6Oj0geG9yX2V4cHIgfCBvcl9leHByICJ8IiB4b3JfZXhwclxuXG5UaGUgYGAmYGAgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIEFORCBvZiBpdHMgYXJndW1lbnRzLCB3aGljaCBtdXN0XG5iZSBwbGFpbiBvciBsb25nIGludGVnZXJzLiAgVGhlIGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uXG50eXBlLlxuXG5UaGUgYGBeYGAgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIFhPUiAoZXhjbHVzaXZlIE9SKSBvZiBpdHNcbmFyZ3VtZW50cywgd2hpY2ggbXVzdCBiZSBwbGFpbiBvciBsb25nIGludGVnZXJzLiAgVGhlIGFyZ3VtZW50cyBhcmVcbmNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLlxuXG5UaGUgYGB8YGAgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIChpbmNsdXNpdmUpIE9SIG9mIGl0cyBhcmd1bWVudHMsXG53aGljaCBtdXN0IGJlIHBsYWluIG9yIGxvbmcgaW50ZWdlcnMuICBUaGUgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG9cbmEgY29tbW9uIHR5cGUuXG4nLAogICdibHRpbi1jb2RlLW9iamVjdHMnOiB1J1xuQ29kZSBPYmplY3RzXG4qKioqKioqKioqKipcblxuQ29kZSBvYmplY3RzIGFyZSB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0byByZXByZXNlbnQgInBzZXVkby1cbmNvbXBpbGVkIiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlIHN1Y2ggYXMgYSBmdW5jdGlvbiBib2R5LiBUaGV5IGRpZmZlclxuZnJvbSBmdW5jdGlvbiBvYmplY3RzIGJlY2F1c2UgdGhleSBkb25cJ3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGVpclxuZ2xvYmFsIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gIENvZGUgb2JqZWN0cyBhcmUgcmV0dXJuZWQgYnkgdGhlIGJ1aWx0LVxuaW4gYGBjb21waWxlKClgYCBmdW5jdGlvbiBhbmQgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIGZ1bmN0aW9uIG9iamVjdHNcbnRocm91Z2ggdGhlaXIgYGBmdW5jX2NvZGVgYCBhdHRyaWJ1dGUuIFNlZSBhbHNvIHRoZSBgYGNvZGVgYCBtb2R1bGUuXG5cbkEgY29kZSBvYmplY3QgY2FuIGJlIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCBieSBwYXNzaW5nIGl0IChpbnN0ZWFkIG9mIGFcbnNvdXJjZSBzdHJpbmcpIHRvIHRoZSBgYGV4ZWNgYCBzdGF0ZW1lbnQgb3IgdGhlIGJ1aWx0LWluIGBgZXZhbCgpYGBcbmZ1bmN0aW9uLlxuXG5TZWUgKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAogICdibHRpbi1lbGxpcHNpcy1vYmplY3QnOiB1J1xuVGhlIEVsbGlwc2lzIE9iamVjdFxuKioqKioqKioqKioqKioqKioqKlxuXG5UaGlzIG9iamVjdCBpcyB1c2VkIGJ5IGV4dGVuZGVkIHNsaWNlIG5vdGF0aW9uIChzZWUgKlNsaWNpbmdzKikuICBJdFxuc3VwcG9ydHMgbm8gc3BlY2lhbCBvcGVyYXRpb25zLiAgVGhlcmUgaXMgZXhhY3RseSBvbmUgZWxsaXBzaXMgb2JqZWN0LFxubmFtZWQgYGBFbGxpcHNpc2BgIChhIGJ1aWx0LWluIG5hbWUpLlxuXG5JdCBpcyB3cml0dGVuIGFzIGBgRWxsaXBzaXNgYC5cbicsCi0gJ2JsdGluLWZpbGUtb2JqZWN0cyc6IHUnXG5GaWxlIE9iamVjdHNcbioqKioqKioqKioqKlxuXG5GaWxlIG9iamVjdHMgYXJlIGltcGxlbWVudGVkIHVzaW5nIENcJ3MgYGBzdGRpb2BgIHBhY2thZ2UgYW5kIGNhbiBiZVxuY3JlYXRlZCB3aXRoIHRoZSBidWlsdC1pbiBgYG9wZW4oKWBgIGZ1bmN0aW9uLiAgRmlsZSBvYmplY3RzIGFyZSBhbHNvXG5yZXR1cm5lZCBieSBzb21lIG90aGVyIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcywgc3VjaCBhc1xuYGBvcy5wb3BlbigpYGAgYW5kIGBgb3MuZmRvcGVuKClgYCBhbmQgdGhlIGBgbWFrZWZpbGUoKWBgIG1ldGhvZCBvZlxuc29ja2V0IG9iamVjdHMuIFRlbXBvcmFyeSBmaWxlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgYGB0ZW1wZmlsZWBgXG5tb2R1bGUsIGFuZCBoaWdoLWxldmVsIGZpbGUgb3BlcmF0aW9ucyBzdWNoIGFzIGNvcHlpbmcsIG1vdmluZywgYW5kXG5kZWxldGluZyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgY2FuIGJlIGFjaGlldmVkIHdpdGggdGhlIGBgc2h1dGlsYGBcbm1vZHVsZS5cblxuV2hlbiBhIGZpbGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbiBJL08tcmVsYXRlZCByZWFzb24sIHRoZSBleGNlcHRpb25cbmBgSU9FcnJvcmBgIGlzIHJhaXNlZC4gIFRoaXMgaW5jbHVkZXMgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb3BlcmF0aW9uXG5pcyBub3QgZGVmaW5lZCBmb3Igc29tZSByZWFzb24sIGxpa2UgYGBzZWVrKClgYCBvbiBhIHR0eSBkZXZpY2Ugb3JcbndyaXRpbmcgYSBmaWxlIG9wZW5lZCBmb3IgcmVhZGluZy5cblxuRmlsZXMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XG5cbmZpbGUuY2xvc2UoKVxuXG4gICBDbG9zZSB0aGUgZmlsZS4gIEEgY2xvc2VkIGZpbGUgY2Fubm90IGJlIHJlYWQgb3Igd3JpdHRlbiBhbnkgbW9yZS5cbiAgIEFueSBvcGVyYXRpb24gd2hpY2ggcmVxdWlyZXMgdGhhdCB0aGUgZmlsZSBiZSBvcGVuIHdpbGwgcmFpc2UgYVxuICAgYGBWYWx1ZUVycm9yYGAgYWZ0ZXIgdGhlIGZpbGUgaGFzIGJlZW4gY2xvc2VkLiAgQ2FsbGluZyBgYGNsb3NlKClgYFxuICAgbW9yZSB0aGFuIG9uY2UgaXMgYWxsb3dlZC5cblxuICAgQXMgb2YgUHl0aG9uIDIuNSwgeW91IGNhbiBhdm9pZCBoYXZpbmcgdG8gY2FsbCB0aGlzIG1ldGhvZFxuICAgZXhwbGljaXRseSBpZiB5b3UgdXNlIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQuICBGb3IgZXhhbXBsZSwgdGhlXG4gICBmb2xsb3dpbmcgY29kZSB3aWxsIGF1dG9tYXRpY2FsbHkgY2xvc2UgKmYqIHdoZW4gdGhlIGBgd2l0aGBgIGJsb2NrXG4gICBpcyBleGl0ZWQ6XG5cbiAgICAgIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQgIyBUaGlzIGlzblwndCByZXF1aXJlZCBpbiBQeXRob24gMi42XG5cbiAgICAgIHdpdGggb3BlbigiaGVsbG8udHh0IikgYXMgZjpcbiAgICAgICAgICBmb3IgbGluZSBpbiBmOlxuICAgICAgICAgICAgICBwcmludCBsaW5lXG5cbiAgIEluIG9sZGVyIHZlcnNpb25zIG9mIFB5dGhvbiwgeW91IHdvdWxkIGhhdmUgbmVlZGVkIHRvIGRvIHRoaXMgdG9cbiAgIGdldCB0aGUgc2FtZSBlZmZlY3Q6XG5cbiAgICAgIGYgPSBvcGVuKCJoZWxsby50eHQiKVxuICAgICAgdHJ5OlxuICAgICAgICAgIGZvciBsaW5lIGluIGY6XG4gICAgICAgICAgICAgIHByaW50IGxpbmVcbiAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgZi5jbG9zZSgpXG5cbiAgIE5vdGU6IE5vdCBhbGwgImZpbGUtbGlrZSIgdHlwZXMgaW4gUHl0aG9uIHN1cHBvcnQgdXNlIGFzIGEgY29udGV4dFxuICAgICBtYW5hZ2VyIGZvciB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LiAgSWYgeW91ciBjb2RlIGlzIGludGVuZGVkIHRvXG4gICAgIHdvcmsgd2l0aCBhbnkgZmlsZS1saWtlIG9iamVjdCwgeW91IGNhbiB1c2UgdGhlIGZ1bmN0aW9uXG4gICAgIGBgY29udGV4dGxpYi5jbG9zaW5nKClgYCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvYmplY3QgZGlyZWN0bHkuXG5cbmZpbGUuZmx1c2goKVxuXG4gICBGbHVzaCB0aGUgaW50ZXJuYWwgYnVmZmVyLCBsaWtlIGBgc3RkaW9gYFwncyBgYGZmbHVzaCgpYGAuICBUaGlzIG1heVxuICAgYmUgYSBuby1vcCBvbiBzb21lIGZpbGUtbGlrZSBvYmplY3RzLlxuXG4gICBOb3RlOiBgYGZsdXNoKClgYCBkb2VzIG5vdCBuZWNlc3NhcmlseSB3cml0ZSB0aGUgZmlsZVwncyBkYXRhIHRvIGRpc2suXG4gICAgIFVzZSBgYGZsdXNoKClgYCBmb2xsb3dlZCBieSBgYG9zLmZzeW5jKClgYCB0byBlbnN1cmUgdGhpc1xuICAgICBiZWhhdmlvci5cblxuZmlsZS5maWxlbm8oKVxuXG4gICBSZXR1cm4gdGhlIGludGVnZXIgImZpbGUgZGVzY3JpcHRvciIgdGhhdCBpcyB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nXG4gICBpbXBsZW1lbnRhdGlvbiB0byByZXF1ZXN0IEkvTyBvcGVyYXRpb25zIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uXG4gICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIG90aGVyLCBsb3dlciBsZXZlbCBpbnRlcmZhY2VzIHRoYXQgdXNlIGZpbGVcbiAgIGRlc2NyaXB0b3JzLCBzdWNoIGFzIHRoZSBgYGZjbnRsYGAgbW9kdWxlIG9yIGBgb3MucmVhZCgpYGAgYW5kXG4gICBmcmllbmRzLlxuXG4gICBOb3RlOiBGaWxlLWxpa2Ugb2JqZWN0cyB3aGljaCBkbyBub3QgaGF2ZSBhIHJlYWwgZmlsZSBkZXNjcmlwdG9yIHNob3VsZFxuICAgICAqbm90KiBwcm92aWRlIHRoaXMgbWV0aG9kIVxuXG5maWxlLmlzYXR0eSgpXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgZmlsZSBpcyBjb25uZWN0ZWQgdG8gYSB0dHkoLWxpa2UpIGRldmljZSxcbiAgIGVsc2UgYGBGYWxzZWBgLlxuXG4gICBOb3RlOiBJZiBhIGZpbGUtbGlrZSBvYmplY3QgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHJlYWwgZmlsZSwgdGhpc1xuICAgICBtZXRob2Qgc2hvdWxkICpub3QqIGJlIGltcGxlbWVudGVkLlxuXG5maWxlLm5leHQoKVxuXG4gICBBIGZpbGUgb2JqZWN0IGlzIGl0cyBvd24gaXRlcmF0b3IsIGZvciBleGFtcGxlIGBgaXRlcihmKWBgIHJldHVybnNcbiAgICpmKiAodW5sZXNzICpmKiBpcyBjbG9zZWQpLiAgV2hlbiBhIGZpbGUgaXMgdXNlZCBhcyBhbiBpdGVyYXRvcixcbiAgIHR5cGljYWxseSBpbiBhIGBgZm9yYGAgbG9vcCAoZm9yIGV4YW1wbGUsIGBgZm9yIGxpbmUgaW4gZjogcHJpbnRcbiAgIGxpbmVgYCksIHRoZSBgYG5leHQoKWBgIG1ldGhvZCBpcyBjYWxsZWQgcmVwZWF0ZWRseS4gIFRoaXMgbWV0aG9kXG4gICByZXR1cm5zIHRoZSBuZXh0IGlucHV0IGxpbmUsIG9yIHJhaXNlcyBgYFN0b3BJdGVyYXRpb25gYCB3aGVuIEVPRlxuICAgaXMgaGl0IHdoZW4gdGhlIGZpbGUgaXMgb3BlbiBmb3IgcmVhZGluZyAoYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG4gICB3aGVuIHRoZSBmaWxlIGlzIG9wZW4gZm9yIHdyaXRpbmcpLiAgSW4gb3JkZXIgdG8gbWFrZSBhIGBgZm9yYGBcbiAgIGxvb3AgdGhlIG1vc3QgZWZmaWNpZW50IHdheSBvZiBsb29waW5nIG92ZXIgdGhlIGxpbmVzIG9mIGEgZmlsZSAoYVxuICAgdmVyeSBjb21tb24gb3BlcmF0aW9uKSwgdGhlIGBgbmV4dCgpYGAgbWV0aG9kIHVzZXMgYSBoaWRkZW4gcmVhZC1cbiAgIGFoZWFkIGJ1ZmZlci4gIEFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgYSByZWFkLWFoZWFkIGJ1ZmZlcixcbiAgIGNvbWJpbmluZyBgYG5leHQoKWBgIHdpdGggb3RoZXIgZmlsZSBtZXRob2RzIChsaWtlIGBgcmVhZGxpbmUoKWBgKVxuICAgZG9lcyBub3Qgd29yayByaWdodC4gIEhvd2V2ZXIsIHVzaW5nIGBgc2VlaygpYGAgdG8gcmVwb3NpdGlvbiB0aGVcbiAgIGZpbGUgdG8gYW4gYWJzb2x1dGUgcG9zaXRpb24gd2lsbCBmbHVzaCB0aGUgcmVhZC1haGVhZCBidWZmZXIuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMy5cblxuZmlsZS5yZWFkKFtzaXplXSlcblxuICAgUmVhZCBhdCBtb3N0ICpzaXplKiBieXRlcyBmcm9tIHRoZSBmaWxlIChsZXNzIGlmIHRoZSByZWFkIGhpdHMgRU9GXG4gICBiZWZvcmUgb2J0YWluaW5nICpzaXplKiBieXRlcykuICBJZiB0aGUgKnNpemUqIGFyZ3VtZW50IGlzIG5lZ2F0aXZlXG4gICBvciBvbWl0dGVkLCByZWFkIGFsbCBkYXRhIHVudGlsIEVPRiBpcyByZWFjaGVkLiAgVGhlIGJ5dGVzIGFyZVxuICAgcmV0dXJuZWQgYXMgYSBzdHJpbmcgb2JqZWN0LiAgQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIHdoZW4gRU9GXG4gICBpcyBlbmNvdW50ZXJlZCBpbW1lZGlhdGVseS4gIChGb3IgY2VydGFpbiBmaWxlcywgbGlrZSB0dHlzLCBpdFxuICAgbWFrZXMgc2Vuc2UgdG8gY29udGludWUgcmVhZGluZyBhZnRlciBhbiBFT0YgaXMgaGl0LikgIE5vdGUgdGhhdFxuICAgdGhpcyBtZXRob2QgbWF5IGNhbGwgdGhlIHVuZGVybHlpbmcgQyBmdW5jdGlvbiBgYGZyZWFkKClgYCBtb3JlXG4gICB0aGFuIG9uY2UgaW4gYW4gZWZmb3J0IHRvIGFjcXVpcmUgYXMgY2xvc2UgdG8gKnNpemUqIGJ5dGVzIGFzXG4gICBwb3NzaWJsZS4gQWxzbyBub3RlIHRoYXQgd2hlbiBpbiBub24tYmxvY2tpbmcgbW9kZSwgbGVzcyBkYXRhIHRoYW5cbiAgIHdhcyByZXF1ZXN0ZWQgbWF5IGJlIHJldHVybmVkLCBldmVuIGlmIG5vICpzaXplKiBwYXJhbWV0ZXIgd2FzXG4gICBnaXZlbi5cblxuICAgTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBzaW1wbHkgYSB3cmFwcGVyIGZvciB0aGUgdW5kZXJseWluZyBgYGZyZWFkKClgYFxuICAgICBDIGZ1bmN0aW9uLCBhbmQgd2lsbCBiZWhhdmUgdGhlIHNhbWUgaW4gY29ybmVyIGNhc2VzLCBzdWNoIGFzXG4gICAgIHdoZXRoZXIgdGhlIEVPRiB2YWx1ZSBpcyBjYWNoZWQuXG5cbmZpbGUucmVhZGxpbmUoW3NpemVdKVxuXG4gICBSZWFkIG9uZSBlbnRpcmUgbGluZSBmcm9tIHRoZSBmaWxlLiAgQSB0cmFpbGluZyBuZXdsaW5lIGNoYXJhY3RlclxuICAgaXMga2VwdCBpbiB0aGUgc3RyaW5nIChidXQgbWF5IGJlIGFic2VudCB3aGVuIGEgZmlsZSBlbmRzIHdpdGggYW5cbiAgIGluY29tcGxldGUgbGluZSkuIFs2XSAgSWYgdGhlICpzaXplKiBhcmd1bWVudCBpcyBwcmVzZW50IGFuZCBub24tXG4gICBuZWdhdGl2ZSwgaXQgaXMgYSBtYXhpbXVtIGJ5dGUgY291bnQgKGluY2x1ZGluZyB0aGUgdHJhaWxpbmdcbiAgIG5ld2xpbmUpIGFuZCBhbiBpbmNvbXBsZXRlIGxpbmUgbWF5IGJlIHJldHVybmVkLiBBbiBlbXB0eSBzdHJpbmcgaXNcbiAgIHJldHVybmVkICpvbmx5KiB3aGVuIEVPRiBpcyBlbmNvdW50ZXJlZCBpbW1lZGlhdGVseS5cblxuICAgTm90ZTogVW5saWtlIGBgc3RkaW9gYFwncyBgYGZnZXRzKClgYCwgdGhlIHJldHVybmVkIHN0cmluZyBjb250YWlucyBudWxsXG4gICAgIGNoYXJhY3RlcnMgKGBgXCdcXDBcJ2BgKSBpZiB0aGV5IG9jY3VycmVkIGluIHRoZSBpbnB1dC5cblxuZmlsZS5yZWFkbGluZXMoW3NpemVoaW50XSlcblxuICAgUmVhZCB1bnRpbCBFT0YgdXNpbmcgYGByZWFkbGluZSgpYGAgYW5kIHJldHVybiBhIGxpc3QgY29udGFpbmluZ1xuICAgdGhlIGxpbmVzIHRodXMgcmVhZC4gIElmIHRoZSBvcHRpb25hbCAqc2l6ZWhpbnQqIGFyZ3VtZW50IGlzXG4gICBwcmVzZW50LCBpbnN0ZWFkIG9mIHJlYWRpbmcgdXAgdG8gRU9GLCB3aG9sZSBsaW5lcyB0b3RhbGxpbmdcbiAgIGFwcHJveGltYXRlbHkgKnNpemVoaW50KiBieXRlcyAocG9zc2libHkgYWZ0ZXIgcm91bmRpbmcgdXAgdG8gYW5cbiAgIGludGVybmFsIGJ1ZmZlciBzaXplKSBhcmUgcmVhZC4gIE9iamVjdHMgaW1wbGVtZW50aW5nIGEgZmlsZS1saWtlXG4gICBpbnRlcmZhY2UgbWF5IGNob29zZSB0byBpZ25vcmUgKnNpemVoaW50KiBpZiBpdCBjYW5ub3QgYmVcbiAgIGltcGxlbWVudGVkLCBvciBjYW5ub3QgYmUgaW1wbGVtZW50ZWQgZWZmaWNpZW50bHkuXG5cbmZpbGUueHJlYWRsaW5lcygpXG5cbiAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNhbWUgdGhpbmcgYXMgYGBpdGVyKGYpYGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMS5cblxuICAgRGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuMzogVXNlIGBgZm9yIGxpbmUgaW4gZmlsZWBgIGluc3RlYWQuXG5cbmZpbGUuc2VlayhvZmZzZXRbLCB3aGVuY2VdKVxuXG4gICBTZXQgdGhlIGZpbGVcJ3MgY3VycmVudCBwb3NpdGlvbiwgbGlrZSBgYHN0ZGlvYGBcJ3MgYGBmc2VlaygpYGAuIFRoZVxuICAgKndoZW5jZSogYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvICBgYG9zLlNFRUtfU0VUYGAgb3JcbiAgIGBgMGBgIChhYnNvbHV0ZSBmaWxlIHBvc2l0aW9uaW5nKTsgb3RoZXIgdmFsdWVzIGFyZSBgYG9zLlNFRUtfQ1VSYGBcbiAgIG9yIGBgMWBgIChzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uKSBhbmRcbiAgIGBgb3MuU0VFS19FTkRgYCBvciBgYDJgYCAgKHNlZWsgcmVsYXRpdmUgdG8gdGhlIGZpbGVcJ3MgZW5kKS4gIFRoZXJlXG4gICBpcyBubyByZXR1cm4gdmFsdWUuXG5cbiAgIEZvciBleGFtcGxlLCBgYGYuc2VlaygyLCBvcy5TRUVLX0NVUilgYCBhZHZhbmNlcyB0aGUgcG9zaXRpb24gYnlcbiAgIHR3byBhbmQgYGBmLnNlZWsoLTMsIG9zLlNFRUtfRU5EKWBgIHNldHMgdGhlIHBvc2l0aW9uIHRvIHRoZSB0aGlyZFxuICAgdG8gbGFzdC5cblxuICAgTm90ZSB0aGF0IGlmIHRoZSBmaWxlIGlzIG9wZW5lZCBmb3IgYXBwZW5kaW5nIChtb2RlIGBgXCdhXCdgYCBvclxuICAgYGBcJ2ErXCdgYCksIGFueSBgYHNlZWsoKWBgIG9wZXJhdGlvbnMgd2lsbCBiZSB1bmRvbmUgYXQgdGhlIG5leHRcbiAgIHdyaXRlLiAgSWYgdGhlIGZpbGUgaXMgb25seSBvcGVuZWQgZm9yIHdyaXRpbmcgaW4gYXBwZW5kIG1vZGUgKG1vZGVcbiAgIGBgXCdhXCdgYCksIHRoaXMgbWV0aG9kIGlzIGVzc2VudGlhbGx5IGEgbm8tb3AsIGJ1dCBpdCByZW1haW5zIHVzZWZ1bFxuICAgZm9yIGZpbGVzIG9wZW5lZCBpbiBhcHBlbmQgbW9kZSB3aXRoIHJlYWRpbmcgZW5hYmxlZCAobW9kZVxuICAgYGBcJ2ErXCdgYCkuICBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgaW4gdGV4dCBtb2RlICh3aXRob3V0IGBgXCdiXCdgYCksXG4gICBvbmx5IG9mZnNldHMgcmV0dXJuZWQgYnkgYGB0ZWxsKClgYCBhcmUgbGVnYWwuICBVc2Ugb2Ygb3RoZXJcbiAgIG9mZnNldHMgY2F1c2VzIHVuZGVmaW5lZCBiZWhhdmlvci5cblxuICAgTm90ZSB0aGF0IG5vdCBhbGwgZmlsZSBvYmplY3RzIGFyZSBzZWVrYWJsZS5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNjogUGFzc2luZyBmbG9hdCB2YWx1ZXMgYXMgb2Zmc2V0IGhhcyBiZWVuXG4gICBkZXByZWNhdGVkLlxuXG5maWxlLnRlbGwoKVxuXG4gICBSZXR1cm4gdGhlIGZpbGVcJ3MgY3VycmVudCBwb3NpdGlvbiwgbGlrZSBgYHN0ZGlvYGBcJ3MgYGBmdGVsbCgpYGAuXG5cbiAgIE5vdGU6IE9uIFdpbmRvd3MsIGBgdGVsbCgpYGAgY2FuIHJldHVybiBpbGxlZ2FsIHZhbHVlcyAoYWZ0ZXIgYW5cbiAgICAgYGBmZ2V0cygpYGApIHdoZW4gcmVhZGluZyBmaWxlcyB3aXRoIFVuaXgtc3R5bGUgbGluZS1lbmRpbmdzLiBVc2VcbiAgICAgYmluYXJ5IG1vZGUgKGBgXCdyYlwnYGApIHRvIGNpcmN1bXZlbnQgdGhpcyBwcm9ibGVtLlxuXG5maWxlLnRydW5jYXRlKFtzaXplXSlcblxuICAgVHJ1bmNhdGUgdGhlIGZpbGVcJ3Mgc2l6ZS4gIElmIHRoZSBvcHRpb25hbCAqc2l6ZSogYXJndW1lbnQgaXNcbiAgIHByZXNlbnQsIHRoZSBmaWxlIGlzIHRydW5jYXRlZCB0byAoYXQgbW9zdCkgdGhhdCBzaXplLiAgVGhlIHNpemVcbiAgIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBUaGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGlzIG5vdFxuICAgY2hhbmdlZC4gIE5vdGUgdGhhdCBpZiBhIHNwZWNpZmllZCBzaXplIGV4Y2VlZHMgdGhlIGZpbGVcJ3MgY3VycmVudFxuICAgc2l6ZSwgdGhlIHJlc3VsdCBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQ6ICBwb3NzaWJpbGl0aWVzIGluY2x1ZGUgdGhhdFxuICAgdGhlIGZpbGUgbWF5IHJlbWFpbiB1bmNoYW5nZWQsIGluY3JlYXNlIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZSBhcyBpZlxuICAgemVyby1maWxsZWQsIG9yIGluY3JlYXNlIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZSB3aXRoIHVuZGVmaW5lZCBuZXdcbiAgIGNvbnRlbnQuIEF2YWlsYWJpbGl0eTogIFdpbmRvd3MsIG1hbnkgVW5peCB2YXJpYW50cy5cblxuZmlsZS53cml0ZShzdHIpXG5cbiAgIFdyaXRlIGEgc3RyaW5nIHRvIHRoZSBmaWxlLiAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLiAgRHVlIHRvXG4gICBidWZmZXJpbmcsIHRoZSBzdHJpbmcgbWF5IG5vdCBhY3R1YWxseSBzaG93IHVwIGluIHRoZSBmaWxlIHVudGlsXG4gICB0aGUgYGBmbHVzaCgpYGAgb3IgYGBjbG9zZSgpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxuZmlsZS53cml0ZWxpbmVzKHNlcXVlbmNlKVxuXG4gICBXcml0ZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3MgdG8gdGhlIGZpbGUuICBUaGUgc2VxdWVuY2UgY2FuIGJlIGFueVxuICAgaXRlcmFibGUgb2JqZWN0IHByb2R1Y2luZyBzdHJpbmdzLCB0eXBpY2FsbHkgYSBsaXN0IG9mIHN0cmluZ3MuXG4gICBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuIChUaGUgbmFtZSBpcyBpbnRlbmRlZCB0byBtYXRjaFxuICAgYGByZWFkbGluZXMoKWBgOyBgYHdyaXRlbGluZXMoKWBgIGRvZXMgbm90IGFkZCBsaW5lIHNlcGFyYXRvcnMuKVxuXG5GaWxlcyBzdXBwb3J0IHRoZSBpdGVyYXRvciBwcm90b2NvbC4gIEVhY2ggaXRlcmF0aW9uIHJldHVybnMgdGhlIHNhbWVcbnJlc3VsdCBhcyBgYGZpbGUucmVhZGxpbmUoKWBgLCBhbmQgaXRlcmF0aW9uIGVuZHMgd2hlbiB0aGVcbmBgcmVhZGxpbmUoKWBgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy5cblxuRmlsZSBvYmplY3RzIGFsc28gb2ZmZXIgYSBudW1iZXIgb2Ygb3RoZXIgaW50ZXJlc3RpbmcgYXR0cmlidXRlcy5cblRoZXNlIGFyZSBub3QgcmVxdWlyZWQgZm9yIGZpbGUtbGlrZSBvYmplY3RzLCBidXQgc2hvdWxkIGJlXG5pbXBsZW1lbnRlZCBpZiB0aGV5IG1ha2Ugc2Vuc2UgZm9yIHRoZSBwYXJ0aWN1bGFyIG9iamVjdC5cblxuZmlsZS5jbG9zZWRcblxuICAgYm9vbCBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBmaWxlIG9iamVjdC4gIFRoaXMgaXMgYVxuICAgcmVhZC1vbmx5IGF0dHJpYnV0ZTsgdGhlIGBgY2xvc2UoKWBgIG1ldGhvZCBjaGFuZ2VzIHRoZSB2YWx1ZS4gSXRcbiAgIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIGFsbCBmaWxlLWxpa2Ugb2JqZWN0cy5cblxuZmlsZS5lbmNvZGluZ1xuXG4gICBUaGUgZW5jb2RpbmcgdGhhdCB0aGlzIGZpbGUgdXNlcy4gV2hlbiBVbmljb2RlIHN0cmluZ3MgYXJlIHdyaXR0ZW5cbiAgIHRvIGEgZmlsZSwgdGhleSB3aWxsIGJlIGNvbnZlcnRlZCB0byBieXRlIHN0cmluZ3MgdXNpbmcgdGhpc1xuICAgZW5jb2RpbmcuIEluIGFkZGl0aW9uLCB3aGVuIHRoZSBmaWxlIGlzIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLFxuICAgdGhlIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZW5jb2RpbmcgdGhhdCB0aGUgdGVybWluYWwgaXMgbGlrZWx5IHRvIHVzZVxuICAgKHRoYXQgIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGluY29ycmVjdCBpZiB0aGUgdXNlciBoYXMgbWlzY29uZmlndXJlZFxuICAgdGhlICB0ZXJtaW5hbCkuIFRoZSBhdHRyaWJ1dGUgaXMgcmVhZC1vbmx5IGFuZCBtYXkgbm90IGJlIHByZXNlbnRcbiAgIG9uIGFsbCBmaWxlLWxpa2Ugb2JqZWN0cy4gSXQgbWF5IGFsc28gYmUgYGBOb25lYGAsIGluIHdoaWNoIGNhc2VcbiAgIHRoZSBmaWxlIHVzZXMgdGhlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nIGZvciBjb252ZXJ0aW5nIFVuaWNvZGVcbiAgIHN0cmluZ3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMy5cblxuZmlsZS5lcnJvcnNcblxuICAgVGhlIFVuaWNvZGUgZXJyb3IgaGFuZGxlciB1c2VkIGFsb25nIHdpdGggdGhlIGVuY29kaW5nLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjYuXG5cbmZpbGUubW9kZVxuXG4gICBUaGUgSS9PIG1vZGUgZm9yIHRoZSBmaWxlLiAgSWYgdGhlIGZpbGUgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlXG4gICBgYG9wZW4oKWBgIGJ1aWx0LWluIGZ1bmN0aW9uLCB0aGlzIHdpbGwgYmUgdGhlIHZhbHVlIG9mIHRoZSAqbW9kZSpcbiAgIHBhcmFtZXRlci4gIFRoaXMgaXMgYSByZWFkLW9ubHkgYXR0cmlidXRlIGFuZCBtYXkgbm90IGJlIHByZXNlbnQgb25cbiAgIGFsbCBmaWxlLWxpa2Ugb2JqZWN0cy5cblxuZmlsZS5uYW1lXG5cbiAgIElmIHRoZSBmaWxlIG9iamVjdCB3YXMgY3JlYXRlZCB1c2luZyBgYG9wZW4oKWBgLCB0aGUgbmFtZSBvZiB0aGVcbiAgIGZpbGUuIE90aGVyd2lzZSwgc29tZSBzdHJpbmcgdGhhdCBpbmRpY2F0ZXMgdGhlIHNvdXJjZSBvZiB0aGUgZmlsZVxuICAgb2JqZWN0LCBvZiB0aGUgZm9ybSBgYDwuLi4+YGAuICBUaGlzIGlzIGEgcmVhZC1vbmx5IGF0dHJpYnV0ZSBhbmRcbiAgIG1heSBub3QgYmUgcHJlc2VudCBvbiBhbGwgZmlsZS1saWtlIG9iamVjdHMuXG5cbmZpbGUubmV3bGluZXNcblxuICAgSWYgUHl0aG9uIHdhcyBidWlsdCB3aXRoIHRoZSAqLS13aXRoLXVuaXZlcnNhbC1uZXdsaW5lcyogb3B0aW9uIHRvXG4gICAqKmNvbmZpZ3VyZSoqICh0aGUgZGVmYXVsdCkgdGhpcyByZWFkLW9ubHkgYXR0cmlidXRlIGV4aXN0cywgYW5kXG4gICBmb3IgZmlsZXMgb3BlbmVkIGluIHVuaXZlcnNhbCBuZXdsaW5lIHJlYWQgbW9kZSBpdCBrZWVwcyB0cmFjayBvZlxuICAgdGhlIHR5cGVzIG9mIG5ld2xpbmVzIGVuY291bnRlcmVkIHdoaWxlIHJlYWRpbmcgdGhlIGZpbGUuIFRoZVxuICAgdmFsdWVzIGl0IGNhbiB0YWtlIGFyZSBgYFwnXFxyXCdgYCwgYGBcJ1xcblwnYGAsIGBgXCdcXHJcXG5cJ2BgLCBgYE5vbmVgYFxuICAgKHVua25vd24sIG5vIG5ld2xpbmVzIHJlYWQgeWV0KSBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYWxsIHRoZVxuICAgbmV3bGluZSB0eXBlcyBzZWVuLCB0byBpbmRpY2F0ZSB0aGF0IG11bHRpcGxlIG5ld2xpbmUgY29udmVudGlvbnNcbiAgIHdlcmUgZW5jb3VudGVyZWQuIEZvciBmaWxlcyBub3Qgb3BlbmVkIGluIHVuaXZlcnNhbCBuZXdsaW5lIHJlYWRcbiAgIG1vZGUgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHdpbGwgYmUgYGBOb25lYGAuXG5cbmZpbGUuc29mdHNwYWNlXG5cbiAgIEJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBhIHNwYWNlIGNoYXJhY3RlciBuZWVkcyB0byBiZVxuICAgcHJpbnRlZCBiZWZvcmUgYW5vdGhlciB2YWx1ZSB3aGVuIHVzaW5nIHRoZSBgYHByaW50YGAgc3RhdGVtZW50LlxuICAgQ2xhc3NlcyB0aGF0IGFyZSB0cnlpbmcgdG8gc2ltdWxhdGUgYSBmaWxlIG9iamVjdCBzaG91bGQgYWxzbyBoYXZlXG4gICBhIHdyaXRhYmxlIGBgc29mdHNwYWNlYGAgYXR0cmlidXRlLCB3aGljaCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG9cbiAgIHplcm8uICBUaGlzIHdpbGwgYmUgYXV0b21hdGljIGZvciBtb3N0IGNsYXNzZXMgaW1wbGVtZW50ZWQgaW5cbiAgIFB5dGhvbiAoY2FyZSBtYXkgYmUgbmVlZGVkIGZvciBvYmplY3RzIHRoYXQgb3ZlcnJpZGUgYXR0cmlidXRlXG4gICBhY2Nlc3MpOyB0eXBlcyBpbXBsZW1lbnRlZCBpbiBDIHdpbGwgaGF2ZSB0byBwcm92aWRlIGEgd3JpdGFibGVcbiAgIGBgc29mdHNwYWNlYGAgYXR0cmlidXRlLlxuXG4gICBOb3RlOiBUaGlzIGF0dHJpYnV0ZSBpcyBub3QgdXNlZCB0byBjb250cm9sIHRoZSBgYHByaW50YGAgc3RhdGVtZW50LFxuICAgICBidXQgdG8gYWxsb3cgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBgcHJpbnRgYCB0byBrZWVwIHRyYWNrIG9mIGl0c1xuICAgICBpbnRlcm5hbCBzdGF0ZS5cbicsCisgJ2JsdGluLWZpbGUtb2JqZWN0cyc6IHUnXG5GaWxlIE9iamVjdHNcbioqKioqKioqKioqKlxuXG5GaWxlIG9iamVjdHMgYXJlIGltcGxlbWVudGVkIHVzaW5nIENcJ3MgYGBzdGRpb2BgIHBhY2thZ2UgYW5kIGNhbiBiZVxuY3JlYXRlZCB3aXRoIHRoZSBidWlsdC1pbiBgYG9wZW4oKWBgIGZ1bmN0aW9uLiAgRmlsZSBvYmplY3RzIGFyZSBhbHNvXG5yZXR1cm5lZCBieSBzb21lIG90aGVyIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcywgc3VjaCBhc1xuYGBvcy5wb3BlbigpYGAgYW5kIGBgb3MuZmRvcGVuKClgYCBhbmQgdGhlIGBgbWFrZWZpbGUoKWBgIG1ldGhvZCBvZlxuc29ja2V0IG9iamVjdHMuIFRlbXBvcmFyeSBmaWxlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgYGB0ZW1wZmlsZWBgXG5tb2R1bGUsIGFuZCBoaWdoLWxldmVsIGZpbGUgb3BlcmF0aW9ucyBzdWNoIGFzIGNvcHlpbmcsIG1vdmluZywgYW5kXG5kZWxldGluZyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgY2FuIGJlIGFjaGlldmVkIHdpdGggdGhlIGBgc2h1dGlsYGBcbm1vZHVsZS5cblxuV2hlbiBhIGZpbGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbiBJL08tcmVsYXRlZCByZWFzb24sIHRoZSBleGNlcHRpb25cbmBgSU9FcnJvcmBgIGlzIHJhaXNlZC4gIFRoaXMgaW5jbHVkZXMgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb3BlcmF0aW9uXG5pcyBub3QgZGVmaW5lZCBmb3Igc29tZSByZWFzb24sIGxpa2UgYGBzZWVrKClgYCBvbiBhIHR0eSBkZXZpY2Ugb3JcbndyaXRpbmcgYSBmaWxlIG9wZW5lZCBmb3IgcmVhZGluZy5cblxuRmlsZXMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XG5cbmZpbGUuY2xvc2UoKVxuXG4gICBDbG9zZSB0aGUgZmlsZS4gIEEgY2xvc2VkIGZpbGUgY2Fubm90IGJlIHJlYWQgb3Igd3JpdHRlbiBhbnkgbW9yZS5cbiAgIEFueSBvcGVyYXRpb24gd2hpY2ggcmVxdWlyZXMgdGhhdCB0aGUgZmlsZSBiZSBvcGVuIHdpbGwgcmFpc2UgYVxuICAgYGBWYWx1ZUVycm9yYGAgYWZ0ZXIgdGhlIGZpbGUgaGFzIGJlZW4gY2xvc2VkLiAgQ2FsbGluZyBgYGNsb3NlKClgYFxuICAgbW9yZSB0aGFuIG9uY2UgaXMgYWxsb3dlZC5cblxuICAgQXMgb2YgUHl0aG9uIDIuNSwgeW91IGNhbiBhdm9pZCBoYXZpbmcgdG8gY2FsbCB0aGlzIG1ldGhvZFxuICAgZXhwbGljaXRseSBpZiB5b3UgdXNlIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQuICBGb3IgZXhhbXBsZSwgdGhlXG4gICBmb2xsb3dpbmcgY29kZSB3aWxsIGF1dG9tYXRpY2FsbHkgY2xvc2UgKmYqIHdoZW4gdGhlIGBgd2l0aGBgIGJsb2NrXG4gICBpcyBleGl0ZWQ6XG5cbiAgICAgIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQgIyBUaGlzIGlzblwndCByZXF1aXJlZCBpbiBQeXRob24gMi42XG5cbiAgICAgIHdpdGggb3BlbigiaGVsbG8udHh0IikgYXMgZjpcbiAgICAgICAgICBmb3IgbGluZSBpbiBmOlxuICAgICAgICAgICAgICBwcmludCBsaW5lXG5cbiAgIEluIG9sZGVyIHZlcnNpb25zIG9mIFB5dGhvbiwgeW91IHdvdWxkIGhhdmUgbmVlZGVkIHRvIGRvIHRoaXMgdG9cbiAgIGdldCB0aGUgc2FtZSBlZmZlY3Q6XG5cbiAgICAgIGYgPSBvcGVuKCJoZWxsby50eHQiKVxuICAgICAgdHJ5OlxuICAgICAgICAgIGZvciBsaW5lIGluIGY6XG4gICAgICAgICAgICAgIHByaW50IGxpbmVcbiAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgZi5jbG9zZSgpXG5cbiAgIE5vdGU6IE5vdCBhbGwgImZpbGUtbGlrZSIgdHlwZXMgaW4gUHl0aG9uIHN1cHBvcnQgdXNlIGFzIGEgY29udGV4dFxuICAgICBtYW5hZ2VyIGZvciB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LiAgSWYgeW91ciBjb2RlIGlzIGludGVuZGVkIHRvXG4gICAgIHdvcmsgd2l0aCBhbnkgZmlsZS1saWtlIG9iamVjdCwgeW91IGNhbiB1c2UgdGhlIGZ1bmN0aW9uXG4gICAgIGBgY29udGV4dGxpYi5jbG9zaW5nKClgYCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvYmplY3QgZGlyZWN0bHkuXG5cbmZpbGUuZmx1c2goKVxuXG4gICBGbHVzaCB0aGUgaW50ZXJuYWwgYnVmZmVyLCBsaWtlIGBgc3RkaW9gYFwncyBgYGZmbHVzaCgpYGAuICBUaGlzIG1heVxuICAgYmUgYSBuby1vcCBvbiBzb21lIGZpbGUtbGlrZSBvYmplY3RzLlxuXG4gICBOb3RlOiBgYGZsdXNoKClgYCBkb2VzIG5vdCBuZWNlc3NhcmlseSB3cml0ZSB0aGUgZmlsZVwncyBkYXRhIHRvIGRpc2suXG4gICAgIFVzZSBgYGZsdXNoKClgYCBmb2xsb3dlZCBieSBgYG9zLmZzeW5jKClgYCB0byBlbnN1cmUgdGhpc1xuICAgICBiZWhhdmlvci5cblxuZmlsZS5maWxlbm8oKVxuXG4gICBSZXR1cm4gdGhlIGludGVnZXIgImZpbGUgZGVzY3JpcHRvciIgdGhhdCBpcyB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nXG4gICBpbXBsZW1lbnRhdGlvbiB0byByZXF1ZXN0IEkvTyBvcGVyYXRpb25zIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uXG4gICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIG90aGVyLCBsb3dlciBsZXZlbCBpbnRlcmZhY2VzIHRoYXQgdXNlIGZpbGVcbiAgIGRlc2NyaXB0b3JzLCBzdWNoIGFzIHRoZSBgYGZjbnRsYGAgbW9kdWxlIG9yIGBgb3MucmVhZCgpYGAgYW5kXG4gICBmcmllbmRzLlxuXG4gICBOb3RlOiBGaWxlLWxpa2Ugb2JqZWN0cyB3aGljaCBkbyBub3QgaGF2ZSBhIHJlYWwgZmlsZSBkZXNjcmlwdG9yIHNob3VsZFxuICAgICAqbm90KiBwcm92aWRlIHRoaXMgbWV0aG9kIVxuXG5maWxlLmlzYXR0eSgpXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgZmlsZSBpcyBjb25uZWN0ZWQgdG8gYSB0dHkoLWxpa2UpIGRldmljZSxcbiAgIGVsc2UgYGBGYWxzZWBgLlxuXG4gICBOb3RlOiBJZiBhIGZpbGUtbGlrZSBvYmplY3QgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHJlYWwgZmlsZSwgdGhpc1xuICAgICBtZXRob2Qgc2hvdWxkICpub3QqIGJlIGltcGxlbWVudGVkLlxuXG5maWxlLm5leHQoKVxuXG4gICBBIGZpbGUgb2JqZWN0IGlzIGl0cyBvd24gaXRlcmF0b3IsIGZvciBleGFtcGxlIGBgaXRlcihmKWBgIHJldHVybnNcbiAgICpmKiAodW5sZXNzICpmKiBpcyBjbG9zZWQpLiAgV2hlbiBhIGZpbGUgaXMgdXNlZCBhcyBhbiBpdGVyYXRvcixcbiAgIHR5cGljYWxseSBpbiBhIGBgZm9yYGAgbG9vcCAoZm9yIGV4YW1wbGUsIGBgZm9yIGxpbmUgaW4gZjogcHJpbnRcbiAgIGxpbmVgYCksIHRoZSBgYG5leHQoKWBgIG1ldGhvZCBpcyBjYWxsZWQgcmVwZWF0ZWRseS4gIFRoaXMgbWV0aG9kXG4gICByZXR1cm5zIHRoZSBuZXh0IGlucHV0IGxpbmUsIG9yIHJhaXNlcyBgYFN0b3BJdGVyYXRpb25gYCB3aGVuIEVPRlxuICAgaXMgaGl0IHdoZW4gdGhlIGZpbGUgaXMgb3BlbiBmb3IgcmVhZGluZyAoYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG4gICB3aGVuIHRoZSBmaWxlIGlzIG9wZW4gZm9yIHdyaXRpbmcpLiAgSW4gb3JkZXIgdG8gbWFrZSBhIGBgZm9yYGBcbiAgIGxvb3AgdGhlIG1vc3QgZWZmaWNpZW50IHdheSBvZiBsb29waW5nIG92ZXIgdGhlIGxpbmVzIG9mIGEgZmlsZSAoYVxuICAgdmVyeSBjb21tb24gb3BlcmF0aW9uKSwgdGhlIGBgbmV4dCgpYGAgbWV0aG9kIHVzZXMgYSBoaWRkZW4gcmVhZC1cbiAgIGFoZWFkIGJ1ZmZlci4gIEFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgYSByZWFkLWFoZWFkIGJ1ZmZlcixcbiAgIGNvbWJpbmluZyBgYG5leHQoKWBgIHdpdGggb3RoZXIgZmlsZSBtZXRob2RzIChsaWtlIGBgcmVhZGxpbmUoKWBgKVxuICAgZG9lcyBub3Qgd29yayByaWdodC4gIEhvd2V2ZXIsIHVzaW5nIGBgc2VlaygpYGAgdG8gcmVwb3NpdGlvbiB0aGVcbiAgIGZpbGUgdG8gYW4gYWJzb2x1dGUgcG9zaXRpb24gd2lsbCBmbHVzaCB0aGUgcmVhZC1haGVhZCBidWZmZXIuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMy5cblxuZmlsZS5yZWFkKFtzaXplXSlcblxuICAgUmVhZCBhdCBtb3N0ICpzaXplKiBieXRlcyBmcm9tIHRoZSBmaWxlIChsZXNzIGlmIHRoZSByZWFkIGhpdHMgRU9GXG4gICBiZWZvcmUgb2J0YWluaW5nICpzaXplKiBieXRlcykuICBJZiB0aGUgKnNpemUqIGFyZ3VtZW50IGlzIG5lZ2F0aXZlXG4gICBvciBvbWl0dGVkLCByZWFkIGFsbCBkYXRhIHVudGlsIEVPRiBpcyByZWFjaGVkLiAgVGhlIGJ5dGVzIGFyZVxuICAgcmV0dXJuZWQgYXMgYSBzdHJpbmcgb2JqZWN0LiAgQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIHdoZW4gRU9GXG4gICBpcyBlbmNvdW50ZXJlZCBpbW1lZGlhdGVseS4gIChGb3IgY2VydGFpbiBmaWxlcywgbGlrZSB0dHlzLCBpdFxuICAgbWFrZXMgc2Vuc2UgdG8gY29udGludWUgcmVhZGluZyBhZnRlciBhbiBFT0YgaXMgaGl0LikgIE5vdGUgdGhhdFxuICAgdGhpcyBtZXRob2QgbWF5IGNhbGwgdGhlIHVuZGVybHlpbmcgQyBmdW5jdGlvbiBgYGZyZWFkKClgYCBtb3JlXG4gICB0aGFuIG9uY2UgaW4gYW4gZWZmb3J0IHRvIGFjcXVpcmUgYXMgY2xvc2UgdG8gKnNpemUqIGJ5dGVzIGFzXG4gICBwb3NzaWJsZS4gQWxzbyBub3RlIHRoYXQgd2hlbiBpbiBub24tYmxvY2tpbmcgbW9kZSwgbGVzcyBkYXRhIHRoYW5cbiAgIHdhcyByZXF1ZXN0ZWQgbWF5IGJlIHJldHVybmVkLCBldmVuIGlmIG5vICpzaXplKiBwYXJhbWV0ZXIgd2FzXG4gICBnaXZlbi5cblxuICAgTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBzaW1wbHkgYSB3cmFwcGVyIGZvciB0aGUgdW5kZXJseWluZyBgYGZyZWFkKClgYFxuICAgICBDIGZ1bmN0aW9uLCBhbmQgd2lsbCBiZWhhdmUgdGhlIHNhbWUgaW4gY29ybmVyIGNhc2VzLCBzdWNoIGFzXG4gICAgIHdoZXRoZXIgdGhlIEVPRiB2YWx1ZSBpcyBjYWNoZWQuXG5cbmZpbGUucmVhZGxpbmUoW3NpemVdKVxuXG4gICBSZWFkIG9uZSBlbnRpcmUgbGluZSBmcm9tIHRoZSBmaWxlLiAgQSB0cmFpbGluZyBuZXdsaW5lIGNoYXJhY3RlclxuICAgaXMga2VwdCBpbiB0aGUgc3RyaW5nIChidXQgbWF5IGJlIGFic2VudCB3aGVuIGEgZmlsZSBlbmRzIHdpdGggYW5cbiAgIGluY29tcGxldGUgbGluZSkuIFs1XSAgSWYgdGhlICpzaXplKiBhcmd1bWVudCBpcyBwcmVzZW50IGFuZCBub24tXG4gICBuZWdhdGl2ZSwgaXQgaXMgYSBtYXhpbXVtIGJ5dGUgY291bnQgKGluY2x1ZGluZyB0aGUgdHJhaWxpbmdcbiAgIG5ld2xpbmUpIGFuZCBhbiBpbmNvbXBsZXRlIGxpbmUgbWF5IGJlIHJldHVybmVkLiBBbiBlbXB0eSBzdHJpbmcgaXNcbiAgIHJldHVybmVkICpvbmx5KiB3aGVuIEVPRiBpcyBlbmNvdW50ZXJlZCBpbW1lZGlhdGVseS5cblxuICAgTm90ZTogVW5saWtlIGBgc3RkaW9gYFwncyBgYGZnZXRzKClgYCwgdGhlIHJldHVybmVkIHN0cmluZyBjb250YWlucyBudWxsXG4gICAgIGNoYXJhY3RlcnMgKGBgXCdcXDBcJ2BgKSBpZiB0aGV5IG9jY3VycmVkIGluIHRoZSBpbnB1dC5cblxuZmlsZS5yZWFkbGluZXMoW3NpemVoaW50XSlcblxuICAgUmVhZCB1bnRpbCBFT0YgdXNpbmcgYGByZWFkbGluZSgpYGAgYW5kIHJldHVybiBhIGxpc3QgY29udGFpbmluZ1xuICAgdGhlIGxpbmVzIHRodXMgcmVhZC4gIElmIHRoZSBvcHRpb25hbCAqc2l6ZWhpbnQqIGFyZ3VtZW50IGlzXG4gICBwcmVzZW50LCBpbnN0ZWFkIG9mIHJlYWRpbmcgdXAgdG8gRU9GLCB3aG9sZSBsaW5lcyB0b3RhbGxpbmdcbiAgIGFwcHJveGltYXRlbHkgKnNpemVoaW50KiBieXRlcyAocG9zc2libHkgYWZ0ZXIgcm91bmRpbmcgdXAgdG8gYW5cbiAgIGludGVybmFsIGJ1ZmZlciBzaXplKSBhcmUgcmVhZC4gIE9iamVjdHMgaW1wbGVtZW50aW5nIGEgZmlsZS1saWtlXG4gICBpbnRlcmZhY2UgbWF5IGNob29zZSB0byBpZ25vcmUgKnNpemVoaW50KiBpZiBpdCBjYW5ub3QgYmVcbiAgIGltcGxlbWVudGVkLCBvciBjYW5ub3QgYmUgaW1wbGVtZW50ZWQgZWZmaWNpZW50bHkuXG5cbmZpbGUueHJlYWRsaW5lcygpXG5cbiAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNhbWUgdGhpbmcgYXMgYGBpdGVyKGYpYGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMS5cblxuICAgRGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuMzogVXNlIGBgZm9yIGxpbmUgaW4gZmlsZWBgIGluc3RlYWQuXG5cbmZpbGUuc2VlayhvZmZzZXRbLCB3aGVuY2VdKVxuXG4gICBTZXQgdGhlIGZpbGVcJ3MgY3VycmVudCBwb3NpdGlvbiwgbGlrZSBgYHN0ZGlvYGBcJ3MgYGBmc2VlaygpYGAuIFRoZVxuICAgKndoZW5jZSogYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvICBgYG9zLlNFRUtfU0VUYGAgb3JcbiAgIGBgMGBgIChhYnNvbHV0ZSBmaWxlIHBvc2l0aW9uaW5nKTsgb3RoZXIgdmFsdWVzIGFyZSBgYG9zLlNFRUtfQ1VSYGBcbiAgIG9yIGBgMWBgIChzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uKSBhbmRcbiAgIGBgb3MuU0VFS19FTkRgYCBvciBgYDJgYCAgKHNlZWsgcmVsYXRpdmUgdG8gdGhlIGZpbGVcJ3MgZW5kKS4gIFRoZXJlXG4gICBpcyBubyByZXR1cm4gdmFsdWUuXG5cbiAgIEZvciBleGFtcGxlLCBgYGYuc2VlaygyLCBvcy5TRUVLX0NVUilgYCBhZHZhbmNlcyB0aGUgcG9zaXRpb24gYnlcbiAgIHR3byBhbmQgYGBmLnNlZWsoLTMsIG9zLlNFRUtfRU5EKWBgIHNldHMgdGhlIHBvc2l0aW9uIHRvIHRoZSB0aGlyZFxuICAgdG8gbGFzdC5cblxuICAgTm90ZSB0aGF0IGlmIHRoZSBmaWxlIGlzIG9wZW5lZCBmb3IgYXBwZW5kaW5nIChtb2RlIGBgXCdhXCdgYCBvclxuICAgYGBcJ2ErXCdgYCksIGFueSBgYHNlZWsoKWBgIG9wZXJhdGlvbnMgd2lsbCBiZSB1bmRvbmUgYXQgdGhlIG5leHRcbiAgIHdyaXRlLiAgSWYgdGhlIGZpbGUgaXMgb25seSBvcGVuZWQgZm9yIHdyaXRpbmcgaW4gYXBwZW5kIG1vZGUgKG1vZGVcbiAgIGBgXCdhXCdgYCksIHRoaXMgbWV0aG9kIGlzIGVzc2VudGlhbGx5IGEgbm8tb3AsIGJ1dCBpdCByZW1haW5zIHVzZWZ1bFxuICAgZm9yIGZpbGVzIG9wZW5lZCBpbiBhcHBlbmQgbW9kZSB3aXRoIHJlYWRpbmcgZW5hYmxlZCAobW9kZVxuICAgYGBcJ2ErXCdgYCkuICBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgaW4gdGV4dCBtb2RlICh3aXRob3V0IGBgXCdiXCdgYCksXG4gICBvbmx5IG9mZnNldHMgcmV0dXJuZWQgYnkgYGB0ZWxsKClgYCBhcmUgbGVnYWwuICBVc2Ugb2Ygb3RoZXJcbiAgIG9mZnNldHMgY2F1c2VzIHVuZGVmaW5lZCBiZWhhdmlvci5cblxuICAgTm90ZSB0aGF0IG5vdCBhbGwgZmlsZSBvYmplY3RzIGFyZSBzZWVrYWJsZS5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNjogUGFzc2luZyBmbG9hdCB2YWx1ZXMgYXMgb2Zmc2V0IGhhcyBiZWVuXG4gICBkZXByZWNhdGVkLlxuXG5maWxlLnRlbGwoKVxuXG4gICBSZXR1cm4gdGhlIGZpbGVcJ3MgY3VycmVudCBwb3NpdGlvbiwgbGlrZSBgYHN0ZGlvYGBcJ3MgYGBmdGVsbCgpYGAuXG5cbiAgIE5vdGU6IE9uIFdpbmRvd3MsIGBgdGVsbCgpYGAgY2FuIHJldHVybiBpbGxlZ2FsIHZhbHVlcyAoYWZ0ZXIgYW5cbiAgICAgYGBmZ2V0cygpYGApIHdoZW4gcmVhZGluZyBmaWxlcyB3aXRoIFVuaXgtc3R5bGUgbGluZS1lbmRpbmdzLiBVc2VcbiAgICAgYmluYXJ5IG1vZGUgKGBgXCdyYlwnYGApIHRvIGNpcmN1bXZlbnQgdGhpcyBwcm9ibGVtLlxuXG5maWxlLnRydW5jYXRlKFtzaXplXSlcblxuICAgVHJ1bmNhdGUgdGhlIGZpbGVcJ3Mgc2l6ZS4gIElmIHRoZSBvcHRpb25hbCAqc2l6ZSogYXJndW1lbnQgaXNcbiAgIHByZXNlbnQsIHRoZSBmaWxlIGlzIHRydW5jYXRlZCB0byAoYXQgbW9zdCkgdGhhdCBzaXplLiAgVGhlIHNpemVcbiAgIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBUaGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGlzIG5vdFxuICAgY2hhbmdlZC4gIE5vdGUgdGhhdCBpZiBhIHNwZWNpZmllZCBzaXplIGV4Y2VlZHMgdGhlIGZpbGVcJ3MgY3VycmVudFxuICAgc2l6ZSwgdGhlIHJlc3VsdCBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQ6ICBwb3NzaWJpbGl0aWVzIGluY2x1ZGUgdGhhdFxuICAgdGhlIGZpbGUgbWF5IHJlbWFpbiB1bmNoYW5nZWQsIGluY3JlYXNlIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZSBhcyBpZlxuICAgemVyby1maWxsZWQsIG9yIGluY3JlYXNlIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZSB3aXRoIHVuZGVmaW5lZCBuZXdcbiAgIGNvbnRlbnQuIEF2YWlsYWJpbGl0eTogIFdpbmRvd3MsIG1hbnkgVW5peCB2YXJpYW50cy5cblxuZmlsZS53cml0ZShzdHIpXG5cbiAgIFdyaXRlIGEgc3RyaW5nIHRvIHRoZSBmaWxlLiAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLiAgRHVlIHRvXG4gICBidWZmZXJpbmcsIHRoZSBzdHJpbmcgbWF5IG5vdCBhY3R1YWxseSBzaG93IHVwIGluIHRoZSBmaWxlIHVudGlsXG4gICB0aGUgYGBmbHVzaCgpYGAgb3IgYGBjbG9zZSgpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxuZmlsZS53cml0ZWxpbmVzKHNlcXVlbmNlKVxuXG4gICBXcml0ZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3MgdG8gdGhlIGZpbGUuICBUaGUgc2VxdWVuY2UgY2FuIGJlIGFueVxuICAgaXRlcmFibGUgb2JqZWN0IHByb2R1Y2luZyBzdHJpbmdzLCB0eXBpY2FsbHkgYSBsaXN0IG9mIHN0cmluZ3MuXG4gICBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuIChUaGUgbmFtZSBpcyBpbnRlbmRlZCB0byBtYXRjaFxuICAgYGByZWFkbGluZXMoKWBgOyBgYHdyaXRlbGluZXMoKWBgIGRvZXMgbm90IGFkZCBsaW5lIHNlcGFyYXRvcnMuKVxuXG5GaWxlcyBzdXBwb3J0IHRoZSBpdGVyYXRvciBwcm90b2NvbC4gIEVhY2ggaXRlcmF0aW9uIHJldHVybnMgdGhlIHNhbWVcbnJlc3VsdCBhcyBgYGZpbGUucmVhZGxpbmUoKWBgLCBhbmQgaXRlcmF0aW9uIGVuZHMgd2hlbiB0aGVcbmBgcmVhZGxpbmUoKWBgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy5cblxuRmlsZSBvYmplY3RzIGFsc28gb2ZmZXIgYSBudW1iZXIgb2Ygb3RoZXIgaW50ZXJlc3RpbmcgYXR0cmlidXRlcy5cblRoZXNlIGFyZSBub3QgcmVxdWlyZWQgZm9yIGZpbGUtbGlrZSBvYmplY3RzLCBidXQgc2hvdWxkIGJlXG5pbXBsZW1lbnRlZCBpZiB0aGV5IG1ha2Ugc2Vuc2UgZm9yIHRoZSBwYXJ0aWN1bGFyIG9iamVjdC5cblxuZmlsZS5jbG9zZWRcblxuICAgYm9vbCBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBmaWxlIG9iamVjdC4gIFRoaXMgaXMgYVxuICAgcmVhZC1vbmx5IGF0dHJpYnV0ZTsgdGhlIGBgY2xvc2UoKWBgIG1ldGhvZCBjaGFuZ2VzIHRoZSB2YWx1ZS4gSXRcbiAgIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIGFsbCBmaWxlLWxpa2Ugb2JqZWN0cy5cblxuZmlsZS5lbmNvZGluZ1xuXG4gICBUaGUgZW5jb2RpbmcgdGhhdCB0aGlzIGZpbGUgdXNlcy4gV2hlbiBVbmljb2RlIHN0cmluZ3MgYXJlIHdyaXR0ZW5cbiAgIHRvIGEgZmlsZSwgdGhleSB3aWxsIGJlIGNvbnZlcnRlZCB0byBieXRlIHN0cmluZ3MgdXNpbmcgdGhpc1xuICAgZW5jb2RpbmcuIEluIGFkZGl0aW9uLCB3aGVuIHRoZSBmaWxlIGlzIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLFxuICAgdGhlIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZW5jb2RpbmcgdGhhdCB0aGUgdGVybWluYWwgaXMgbGlrZWx5IHRvIHVzZVxuICAgKHRoYXQgIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGluY29ycmVjdCBpZiB0aGUgdXNlciBoYXMgbWlzY29uZmlndXJlZFxuICAgdGhlICB0ZXJtaW5hbCkuIFRoZSBhdHRyaWJ1dGUgaXMgcmVhZC1vbmx5IGFuZCBtYXkgbm90IGJlIHByZXNlbnRcbiAgIG9uIGFsbCBmaWxlLWxpa2Ugb2JqZWN0cy4gSXQgbWF5IGFsc28gYmUgYGBOb25lYGAsIGluIHdoaWNoIGNhc2VcbiAgIHRoZSBmaWxlIHVzZXMgdGhlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nIGZvciBjb252ZXJ0aW5nIFVuaWNvZGVcbiAgIHN0cmluZ3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMy5cblxuZmlsZS5lcnJvcnNcblxuICAgVGhlIFVuaWNvZGUgZXJyb3IgaGFuZGxlciB1c2VkIGFsb25nIHdpdGggdGhlIGVuY29kaW5nLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjYuXG5cbmZpbGUubW9kZVxuXG4gICBUaGUgSS9PIG1vZGUgZm9yIHRoZSBmaWxlLiAgSWYgdGhlIGZpbGUgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlXG4gICBgYG9wZW4oKWBgIGJ1aWx0LWluIGZ1bmN0aW9uLCB0aGlzIHdpbGwgYmUgdGhlIHZhbHVlIG9mIHRoZSAqbW9kZSpcbiAgIHBhcmFtZXRlci4gIFRoaXMgaXMgYSByZWFkLW9ubHkgYXR0cmlidXRlIGFuZCBtYXkgbm90IGJlIHByZXNlbnQgb25cbiAgIGFsbCBmaWxlLWxpa2Ugb2JqZWN0cy5cblxuZmlsZS5uYW1lXG5cbiAgIElmIHRoZSBmaWxlIG9iamVjdCB3YXMgY3JlYXRlZCB1c2luZyBgYG9wZW4oKWBgLCB0aGUgbmFtZSBvZiB0aGVcbiAgIGZpbGUuIE90aGVyd2lzZSwgc29tZSBzdHJpbmcgdGhhdCBpbmRpY2F0ZXMgdGhlIHNvdXJjZSBvZiB0aGUgZmlsZVxuICAgb2JqZWN0LCBvZiB0aGUgZm9ybSBgYDwuLi4+YGAuICBUaGlzIGlzIGEgcmVhZC1vbmx5IGF0dHJpYnV0ZSBhbmRcbiAgIG1heSBub3QgYmUgcHJlc2VudCBvbiBhbGwgZmlsZS1saWtlIG9iamVjdHMuXG5cbmZpbGUubmV3bGluZXNcblxuICAgSWYgUHl0aG9uIHdhcyBidWlsdCB3aXRoIHRoZSAqLS13aXRoLXVuaXZlcnNhbC1uZXdsaW5lcyogb3B0aW9uIHRvXG4gICAqKmNvbmZpZ3VyZSoqICh0aGUgZGVmYXVsdCkgdGhpcyByZWFkLW9ubHkgYXR0cmlidXRlIGV4aXN0cywgYW5kXG4gICBmb3IgZmlsZXMgb3BlbmVkIGluIHVuaXZlcnNhbCBuZXdsaW5lIHJlYWQgbW9kZSBpdCBrZWVwcyB0cmFjayBvZlxuICAgdGhlIHR5cGVzIG9mIG5ld2xpbmVzIGVuY291bnRlcmVkIHdoaWxlIHJlYWRpbmcgdGhlIGZpbGUuIFRoZVxuICAgdmFsdWVzIGl0IGNhbiB0YWtlIGFyZSBgYFwnXFxyXCdgYCwgYGBcJ1xcblwnYGAsIGBgXCdcXHJcXG5cJ2BgLCBgYE5vbmVgYFxuICAgKHVua25vd24sIG5vIG5ld2xpbmVzIHJlYWQgeWV0KSBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYWxsIHRoZVxuICAgbmV3bGluZSB0eXBlcyBzZWVuLCB0byBpbmRpY2F0ZSB0aGF0IG11bHRpcGxlIG5ld2xpbmUgY29udmVudGlvbnNcbiAgIHdlcmUgZW5jb3VudGVyZWQuIEZvciBmaWxlcyBub3Qgb3BlbmVkIGluIHVuaXZlcnNhbCBuZXdsaW5lIHJlYWRcbiAgIG1vZGUgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHdpbGwgYmUgYGBOb25lYGAuXG5cbmZpbGUuc29mdHNwYWNlXG5cbiAgIEJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBhIHNwYWNlIGNoYXJhY3RlciBuZWVkcyB0byBiZVxuICAgcHJpbnRlZCBiZWZvcmUgYW5vdGhlciB2YWx1ZSB3aGVuIHVzaW5nIHRoZSBgYHByaW50YGAgc3RhdGVtZW50LlxuICAgQ2xhc3NlcyB0aGF0IGFyZSB0cnlpbmcgdG8gc2ltdWxhdGUgYSBmaWxlIG9iamVjdCBzaG91bGQgYWxzbyBoYXZlXG4gICBhIHdyaXRhYmxlIGBgc29mdHNwYWNlYGAgYXR0cmlidXRlLCB3aGljaCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG9cbiAgIHplcm8uICBUaGlzIHdpbGwgYmUgYXV0b21hdGljIGZvciBtb3N0IGNsYXNzZXMgaW1wbGVtZW50ZWQgaW5cbiAgIFB5dGhvbiAoY2FyZSBtYXkgYmUgbmVlZGVkIGZvciBvYmplY3RzIHRoYXQgb3ZlcnJpZGUgYXR0cmlidXRlXG4gICBhY2Nlc3MpOyB0eXBlcyBpbXBsZW1lbnRlZCBpbiBDIHdpbGwgaGF2ZSB0byBwcm92aWRlIGEgd3JpdGFibGVcbiAgIGBgc29mdHNwYWNlYGAgYXR0cmlidXRlLlxuXG4gICBOb3RlOiBUaGlzIGF0dHJpYnV0ZSBpcyBub3QgdXNlZCB0byBjb250cm9sIHRoZSBgYHByaW50YGAgc3RhdGVtZW50LFxuICAgICBidXQgdG8gYWxsb3cgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBgcHJpbnRgYCB0byBrZWVwIHRyYWNrIG9mIGl0c1xuICAgICBpbnRlcm5hbCBzdGF0ZS5cbicsCiAgJ2JsdGluLW51bGwtb2JqZWN0JzogdSJcblRoZSBOdWxsIE9iamVjdFxuKioqKioqKioqKioqKioqXG5cblRoaXMgb2JqZWN0IGlzIHJldHVybmVkIGJ5IGZ1bmN0aW9ucyB0aGF0IGRvbid0IGV4cGxpY2l0bHkgcmV0dXJuIGFcbnZhbHVlLiAgSXQgc3VwcG9ydHMgbm8gc3BlY2lhbCBvcGVyYXRpb25zLiAgVGhlcmUgaXMgZXhhY3RseSBvbmUgbnVsbFxub2JqZWN0LCBuYW1lZCBgYE5vbmVgYCAoYSBidWlsdC1pbiBuYW1lKS5cblxuSXQgaXMgd3JpdHRlbiBhcyBgYE5vbmVgYC5cbiIsCiAgJ2JsdGluLXR5cGUtb2JqZWN0cyc6IHUiXG5UeXBlIE9iamVjdHNcbioqKioqKioqKioqKlxuXG5UeXBlIG9iamVjdHMgcmVwcmVzZW50IHRoZSB2YXJpb3VzIG9iamVjdCB0eXBlcy4gIEFuIG9iamVjdCdzIHR5cGUgaXNcbmFjY2Vzc2VkIGJ5IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYHR5cGUoKWBgLiAgVGhlcmUgYXJlIG5vIHNwZWNpYWxcbm9wZXJhdGlvbnMgb24gdHlwZXMuICBUaGUgc3RhbmRhcmQgbW9kdWxlIGBgdHlwZXNgYCBkZWZpbmVzIG5hbWVzIGZvclxuYWxsIHN0YW5kYXJkIGJ1aWx0LWluIHR5cGVzLlxuXG5UeXBlcyBhcmUgd3JpdHRlbiBsaWtlIHRoaXM6IGBgPHR5cGUgJ2ludCc+YGAuXG4iLAogICdib29sZWFucyc6IHUnXG5Cb29sZWFuIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKlxuXG4gICBvcl90ZXN0ICA6Oj0gYW5kX3Rlc3QgfCBvcl90ZXN0ICJvciIgYW5kX3Rlc3RcbiAgIGFuZF90ZXN0IDo6PSBub3RfdGVzdCB8IGFuZF90ZXN0ICJhbmQiIG5vdF90ZXN0XG4gICBub3RfdGVzdCA6Oj0gY29tcGFyaXNvbiB8ICJub3QiIG5vdF90ZXN0XG5cbkluIHRoZSBjb250ZXh0IG9mIEJvb2xlYW4gb3BlcmF0aW9ucywgYW5kIGFsc28gd2hlbiBleHByZXNzaW9ucyBhcmVcbnVzZWQgYnkgY29udHJvbCBmbG93IHN0YXRlbWVudHMsIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBpbnRlcnByZXRlZFxuYXMgZmFsc2U6IGBgRmFsc2VgYCwgYGBOb25lYGAsIG51bWVyaWMgemVybyBvZiBhbGwgdHlwZXMsIGFuZCBlbXB0eVxuc3RyaW5ncyBhbmQgY29udGFpbmVycyAoaW5jbHVkaW5nIHN0cmluZ3MsIHR1cGxlcywgbGlzdHMsXG5kaWN0aW9uYXJpZXMsIHNldHMgYW5kIGZyb3plbnNldHMpLiAgQWxsIG90aGVyIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWRcbmFzIHRydWUuICAoU2VlIHRoZSBgYF9fbm9uemVyb19fKClgYCBzcGVjaWFsIG1ldGhvZCBmb3IgYSB3YXkgdG9cbmNoYW5nZSB0aGlzLilcblxuVGhlIG9wZXJhdG9yIGBgbm90YGAgeWllbGRzIGBgVHJ1ZWBgIGlmIGl0cyBhcmd1bWVudCBpcyBmYWxzZSxcbmBgRmFsc2VgYCBvdGhlcndpc2UuXG5cblRoZSBleHByZXNzaW9uIGBgeCBhbmQgeWBgIGZpcnN0IGV2YWx1YXRlcyAqeCo7IGlmICp4KiBpcyBmYWxzZSwgaXRzXG52YWx1ZSBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCAqeSogaXMgZXZhbHVhdGVkIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlXG5pcyByZXR1cm5lZC5cblxuVGhlIGV4cHJlc3Npb24gYGB4IG9yIHlgYCBmaXJzdCBldmFsdWF0ZXMgKngqOyBpZiAqeCogaXMgdHJ1ZSwgaXRzXG52YWx1ZSBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCAqeSogaXMgZXZhbHVhdGVkIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlXG5pcyByZXR1cm5lZC5cblxuKE5vdGUgdGhhdCBuZWl0aGVyIGBgYW5kYGAgbm9yIGBgb3JgYCByZXN0cmljdCB0aGUgdmFsdWUgYW5kIHR5cGUgdGhleVxucmV0dXJuIHRvIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAsIGJ1dCByYXRoZXIgcmV0dXJuIHRoZSBsYXN0IGV2YWx1YXRlZFxuYXJndW1lbnQuIFRoaXMgaXMgc29tZXRpbWVzIHVzZWZ1bCwgZS5nLiwgaWYgYGBzYGAgaXMgYSBzdHJpbmcgdGhhdFxuc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgZGVmYXVsdCB2YWx1ZSBpZiBpdCBpcyBlbXB0eSwgdGhlIGV4cHJlc3Npb25cbmBgcyBvciBcJ2Zvb1wnYGAgeWllbGRzIHRoZSBkZXNpcmVkIHZhbHVlLiAgQmVjYXVzZSBgYG5vdGBgIGhhcyB0b1xuaW52ZW50IGEgdmFsdWUgYW55d2F5LCBpdCBkb2VzIG5vdCBib3RoZXIgdG8gcmV0dXJuIGEgdmFsdWUgb2YgdGhlXG5zYW1lIHR5cGUgYXMgaXRzIGFyZ3VtZW50LCBzbyBlLmcuLCBgYG5vdCBcJ2Zvb1wnYGAgeWllbGRzIGBgRmFsc2VgYCxcbm5vdCBgYFwnXCdgYC4pXG4nLApAQCAtMTgsMTYgKzE4LDE2IEBACiAgJ2NhbGxhYmxlLXR5cGVzJzogdSdcbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsIGBgeChhcmcxLCBhcmcyLCAuLi4pYGAgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICBgYHguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKWBgLlxuJywKICAnY2FsbHMnOiB1J1xuQ2FsbHNcbioqKioqXG5cbkEgY2FsbCBjYWxscyBhIGNhbGxhYmxlIG9iamVjdCAoZS5nLiwgYSBmdW5jdGlvbikgd2l0aCBhIHBvc3NpYmx5XG5lbXB0eSBzZXJpZXMgb2YgYXJndW1lbnRzOlxuXG4gICBjYWxsICAgICAgICAgICAgICAgICA6Oj0gcHJpbWFyeSAiKCIgW2FyZ3VtZW50X2xpc3QgWyIsIl1cbiAgICAgICAgICAgIHwgZXhwcmVzc2lvbiBnZW5leHByX2Zvcl0gIikiXG4gICBhcmd1bWVudF9saXN0ICAgICAgICA6Oj0gcG9zaXRpb25hbF9hcmd1bWVudHMgWyIsIiBrZXl3b3JkX2FyZ3VtZW50c11cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiAiKiIgZXhwcmVzc2lvbl0gWyIsIiBrZXl3b3JkX2FyZ3VtZW50c11cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8IGtleXdvcmRfYXJndW1lbnRzIFsiLCIgIioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCAiKiIgZXhwcmVzc2lvbiBbIiwiICIqIiBleHByZXNzaW9uXSBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBleHByZXNzaW9uXG4gICBwb3NpdGlvbmFsX2FyZ3VtZW50cyA6Oj0gZXhwcmVzc2lvbiAoIiwiIGV4cHJlc3Npb24pKlxuICAga2V5d29yZF9hcmd1bWVudHMgICAgOjo9IGtleXdvcmRfaXRlbSAoIiwiIGtleXdvcmRfaXRlbSkqXG4gICBrZXl3b3JkX2l0ZW0gICAgICAgICA6Oj0gaWRlbnRpZmllciAiPSIgZXhwcmVzc2lvblxuXG5BIHRyYWlsaW5nIGNvbW1hIG1heSBiZSBwcmVzZW50IGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkXG5hcmd1bWVudHMgYnV0IGRvZXMgbm90IGFmZmVjdCB0aGUgc2VtYW50aWNzLlxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGEgY2FsbGFibGUgb2JqZWN0ICh1c2VyLWRlZmluZWRcbmZ1bmN0aW9ucywgYnVpbHQtaW4gZnVuY3Rpb25zLCBtZXRob2RzIG9mIGJ1aWx0LWluIG9iamVjdHMsIGNsYXNzXG5vYmplY3RzLCBtZXRob2RzIG9mIGNsYXNzIGluc3RhbmNlcywgYW5kIGNlcnRhaW4gY2xhc3MgaW5zdGFuY2VzXG50aGVtc2VsdmVzIGFyZSBjYWxsYWJsZTsgZXh0ZW5zaW9ucyBtYXkgZGVmaW5lIGFkZGl0aW9uYWwgY2FsbGFibGVcbm9iamVjdCB0eXBlcykuICBBbGwgYXJndW1lbnQgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBiZWZvcmUgdGhlIGNhbGxcbmlzIGF0dGVtcHRlZC4gIFBsZWFzZSByZWZlciB0byBzZWN0aW9uICpGdW5jdGlvbiBkZWZpbml0aW9ucyogZm9yIHRoZVxuc3ludGF4IG9mIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdHMuXG5cbklmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBwcmVzZW50LCB0aGV5IGFyZSBmaXJzdCBjb252ZXJ0ZWQgdG9cbnBvc2l0aW9uYWwgYXJndW1lbnRzLCBhcyBmb2xsb3dzLiAgRmlyc3QsIGEgbGlzdCBvZiB1bmZpbGxlZCBzbG90cyBpc1xuY3JlYXRlZCBmb3IgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzLiAgSWYgdGhlcmUgYXJlIE4gcG9zaXRpb25hbFxuYXJndW1lbnRzLCB0aGV5IGFyZSBwbGFjZWQgaW4gdGhlIGZpcnN0IE4gc2xvdHMuICBOZXh0LCBmb3IgZWFjaFxua2V5d29yZCBhcmd1bWVudCwgdGhlIGlkZW50aWZpZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3QgKGlmIHRoZSBpZGVudGlmaWVyIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBmb3JtYWxcbnBhcmFtZXRlciBuYW1lLCB0aGUgZmlyc3Qgc2xvdCBpcyB1c2VkLCBhbmQgc28gb24pLiAgSWYgdGhlIHNsb3QgaXNcbmFscmVhZHkgZmlsbGVkLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCB0aGVcbnZhbHVlIG9mIHRoZSBhcmd1bWVudCBpcyBwbGFjZWQgaW4gdGhlIHNsb3QsIGZpbGxpbmcgaXQgKGV2ZW4gaWYgdGhlXG5leHByZXNzaW9uIGlzIGBgTm9uZWBgLCBpdCBmaWxscyB0aGUgc2xvdCkuICBXaGVuIGFsbCBhcmd1bWVudHMgaGF2ZVxuYmVlbiBwcm9jZXNzZWQsIHRoZSBzbG90cyB0aGF0IGFyZSBzdGlsbCB1bmZpbGxlZCBhcmUgZmlsbGVkIHdpdGggdGhlXG5jb3JyZXNwb25kaW5nIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIChEZWZhdWx0XG52YWx1ZXMgYXJlIGNhbGN1bGF0ZWQsIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQ7IHRodXMsIGFcbm11dGFibGUgb2JqZWN0IHN1Y2ggYXMgYSBsaXN0IG9yIGRpY3Rpb25hcnkgdXNlZCBhcyBkZWZhdWx0IHZhbHVlIHdpbGxcbmJlIHNoYXJlZCBieSBhbGwgY2FsbHMgdGhhdCBkb25cJ3Qgc3BlY2lmeSBhbiBhcmd1bWVudCB2YWx1ZSBmb3IgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3Q7IHRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYXZvaWRlZC4pICBJZiB0aGVyZSBhcmUgYW55XG51bmZpbGxlZCBzbG90cyBmb3Igd2hpY2ggbm8gZGVmYXVsdCB2YWx1ZSBpcyBzcGVjaWZpZWQsIGFcbmBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIE90aGVyd2lzZSwgdGhlIGxpc3Qgb2YgZmlsbGVkXG5zbG90cyBpcyB1c2VkIGFzIHRoZSBhcmd1bWVudCBsaXN0IGZvciB0aGUgY2FsbC5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgcHJvdmlkZVxuYnVpbHQtaW4gZnVuY3Rpb25zIHdob3NlIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBkbyBub3QgaGF2ZSBuYW1lcywgZXZlblxuaWYgdGhleSBhcmUgXCduYW1lZFwnIGZvciB0aGUgcHVycG9zZSBvZiBkb2N1bWVudGF0aW9uLCBhbmQgd2hpY2hcbnRoZXJlZm9yZSBjYW5ub3QgYmUgc3VwcGxpZWQgYnkga2V5d29yZC4gIEluIENQeXRob24sIHRoaXMgaXMgdGhlIGNhc2VcbmZvciBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQyB0aGF0IHVzZSBgYFB5QXJnX1BhcnNlVHVwbGUoKWBgIHRvXG5wYXJzZSB0aGVpciBhcmd1bWVudHMuXG5cbklmIHRoZXJlIGFyZSBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhlcmUgYXJlIGZvcm1hbCBwYXJhbWV0ZXJcbnNsb3RzLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5sZXNzIGEgZm9ybWFsIHBhcmFtZXRlclxudXNpbmcgdGhlIHN5bnRheCBgYCppZGVudGlmaWVyYGAgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0IGZvcm1hbFxucGFyYW1ldGVyIHJlY2VpdmVzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgZXhjZXNzIHBvc2l0aW9uYWwgYXJndW1lbnRzXG4ob3IgYW4gZW1wdHkgdHVwbGUgaWYgdGhlcmUgd2VyZSBubyBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHMpLlxuXG5JZiBhbnkga2V5d29yZCBhcmd1bWVudCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgZm9ybWFsIHBhcmFtZXRlclxubmFtZSwgYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggYGAqKmlkZW50aWZpZXJgYCBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXRcbmZvcm1hbCBwYXJhbWV0ZXIgcmVjZWl2ZXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGV4Y2VzcyBrZXl3b3JkXG5hcmd1bWVudHMgKHVzaW5nIHRoZSBrZXl3b3JkcyBhcyBrZXlzIGFuZCB0aGUgYXJndW1lbnQgdmFsdWVzIGFzXG5jb3JyZXNwb25kaW5nIHZhbHVlcyksIG9yIGEgKG5ldykgZW1wdHkgZGljdGlvbmFyeSBpZiB0aGVyZSB3ZXJlIG5vXG5leGNlc3Mga2V5d29yZCBhcmd1bWVudHMuXG5cbklmIHRoZSBzeW50YXggYGAqZXhwcmVzc2lvbmBgIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG5gYGV4cHJlc3Npb25gYCBtdXN0IGV2YWx1YXRlIHRvIGEgc2VxdWVuY2UuICBFbGVtZW50cyBmcm9tIHRoaXNcbnNlcXVlbmNlIGFyZSB0cmVhdGVkIGFzIGlmIHRoZXkgd2VyZSBhZGRpdGlvbmFsIHBvc2l0aW9uYWwgYXJndW1lbnRzO1xuaWYgdGhlcmUgYXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosLi4uLCAqeE4qLCBhbmQgYGBleHByZXNzaW9uYGBcbmV2YWx1YXRlcyB0byBhIHNlcXVlbmNlICp5MSosIC4uLiwgKnlNKiwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgY2FsbFxud2l0aCBNK04gcG9zaXRpb25hbCBhcmd1bWVudHMgKngxKiwgLi4uLCAqeE4qLCAqeTEqLCAuLi4sICp5TSouXG5cbkEgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IGFsdGhvdWdoIHRoZSBgYCpleHByZXNzaW9uYGAgc3ludGF4IG1heVxuYXBwZWFyICphZnRlciogc29tZSBrZXl3b3JkIGFyZ3VtZW50cywgaXQgaXMgcHJvY2Vzc2VkICpiZWZvcmUqIHRoZVxua2V5d29yZCBhcmd1bWVudHMgKGFuZCB0aGUgYGAqKmV4cHJlc3Npb25gYCBhcmd1bWVudCwgaWYgYW55IC0tIHNlZVxuYmVsb3cpLiAgU286XG5cbiAgID4+PiBkZWYgZihhLCBiKTpcbiAgIC4uLiAgcHJpbnQgYSwgYlxuICAgLi4uXG4gICA+Pj4gZihiPTEsICooMiwpKVxuICAgMiAxXG4gICA+Pj4gZihhPTEsICooMiwpKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50IFwnYVwnXG4gICA+Pj4gZigxLCAqKDIsKSlcbiAgIDEgMlxuXG5JdCBpcyB1bnVzdWFsIGZvciBib3RoIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGUgYGAqZXhwcmVzc2lvbmBgXG5zeW50YXggdG8gYmUgdXNlZCBpbiB0aGUgc2FtZSBjYWxsLCBzbyBpbiBwcmFjdGljZSB0aGlzIGNvbmZ1c2lvbiBkb2VzXG5ub3QgYXJpc2UuXG5cbklmIHRoZSBzeW50YXggYGAqKmV4cHJlc3Npb25gYCBhcHBlYXJzIGluIHRoZSBmdW5jdGlvbiBjYWxsLFxuYGBleHByZXNzaW9uYGAgbXVzdCBldmFsdWF0ZSB0byBhIG1hcHBpbmcsIHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmVcbnRyZWF0ZWQgYXMgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cy4gIEluIHRoZSBjYXNlIG9mIGEga2V5d29yZFxuYXBwZWFyaW5nIGluIGJvdGggYGBleHByZXNzaW9uYGAgYW5kIGFzIGFuIGV4cGxpY2l0IGtleXdvcmQgYXJndW1lbnQsXG5hIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC5cblxuRm9ybWFsIHBhcmFtZXRlcnMgdXNpbmcgdGhlIHN5bnRheCBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYFxuY2Fubm90IGJlIHVzZWQgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBzbG90cyBvciBhcyBrZXl3b3JkIGFyZ3VtZW50XG5uYW1lcy4gIEZvcm1hbCBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBzeW50YXggYGAoc3VibGlzdClgYCBjYW5ub3QgYmVcbnVzZWQgYXMga2V5d29yZCBhcmd1bWVudCBuYW1lczsgdGhlIG91dGVybW9zdCBzdWJsaXN0IGNvcnJlc3BvbmRzIHRvIGFcbnNpbmdsZSB1bm5hbWVkIGFyZ3VtZW50IHNsb3QsIGFuZCB0aGUgYXJndW1lbnQgdmFsdWUgaXMgYXNzaWduZWQgdG9cbnRoZSBzdWJsaXN0IHVzaW5nIHRoZSB1c3VhbCB0dXBsZSBhc3NpZ25tZW50IHJ1bGVzIGFmdGVyIGFsbCBvdGhlclxucGFyYW1ldGVyIHByb2Nlc3NpbmcgaXMgZG9uZS5cblxuQSBjYWxsIGFsd2F5cyByZXR1cm5zIHNvbWUgdmFsdWUsIHBvc3NpYmx5IGBgTm9uZWBgLCB1bmxlc3MgaXQgcmFpc2VzXG5hbiBleGNlcHRpb24uICBIb3cgdGhpcyB2YWx1ZSBpcyBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIHRoZVxuY2FsbGFibGUgb2JqZWN0LlxuXG5JZiBpdCBpcy0tLVxuXG5hIHVzZXItZGVmaW5lZCBmdW5jdGlvbjpcbiAgIFRoZSBjb2RlIGJsb2NrIGZvciB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQsIHBhc3NpbmcgaXQgdGhlXG4gICBhcmd1bWVudCBsaXN0LiAgVGhlIGZpcnN0IHRoaW5nIHRoZSBjb2RlIGJsb2NrIHdpbGwgZG8gaXMgYmluZCB0aGVcbiAgIGZvcm1hbCBwYXJhbWV0ZXJzIHRvIHRoZSBhcmd1bWVudHM7IHRoaXMgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb25cbiAgICpGdW5jdGlvbiBkZWZpbml0aW9ucyouICBXaGVuIHRoZSBjb2RlIGJsb2NrIGV4ZWN1dGVzIGEgYGByZXR1cm5gYFxuICAgc3RhdGVtZW50LCB0aGlzIHNwZWNpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLlxuXG5hIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIG1ldGhvZDpcbiAgIFRoZSByZXN1bHQgaXMgdXAgdG8gdGhlIGludGVycHJldGVyOyBzZWUgKkJ1aWx0LWluIEZ1bmN0aW9ucyogZm9yXG4gICB0aGUgZGVzY3JpcHRpb25zIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy5cblxuYSBjbGFzcyBvYmplY3Q6XG4gICBBIG5ldyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIGlzIHJldHVybmVkLlxuXG5hIGNsYXNzIGluc3RhbmNlIG1ldGhvZDpcbiAgIFRoZSBjb3JyZXNwb25kaW5nIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdpdGggYW4gYXJndW1lbnRcbiAgIGxpc3QgdGhhdCBpcyBvbmUgbG9uZ2VyIHRoYW4gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGNhbGw6IHRoZVxuICAgaW5zdGFuY2UgYmVjb21lcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cbmEgY2xhc3MgaW5zdGFuY2U6XG4gICBUaGUgY2xhc3MgbXVzdCBkZWZpbmUgYSBgYF9fY2FsbF9fKClgYCBtZXRob2Q7IHRoZSBlZmZlY3QgaXMgdGhlblxuICAgdGhlIHNhbWUgYXMgaWYgdGhhdCBtZXRob2Qgd2FzIGNhbGxlZC5cbicsCiAgJ2NsYXNzJzogdSdcbkNsYXNzIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9ICJjbGFzcyIgY2xhc3NuYW1lIFtpbmhlcml0YW5jZV0gIjoiIHN1aXRlXG4gICBpbmhlcml0YW5jZSA6Oj0gIigiIFtleHByZXNzaW9uX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXQgZmlyc3QgZXZhbHVhdGVzIHRoZVxuaW5oZXJpdGFuY2UgbGlzdCwgaWYgcHJlc2VudC4gIEVhY2ggaXRlbSBpbiB0aGUgaW5oZXJpdGFuY2UgbGlzdFxuc2hvdWxkIGV2YWx1YXRlIHRvIGEgY2xhc3Mgb2JqZWN0IG9yIGNsYXNzIHR5cGUgd2hpY2ggYWxsb3dzXG5zdWJjbGFzc2luZy4gIFRoZSBjbGFzc1wncyBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIGluIGEgbmV3IGV4ZWN1dGlvblxuZnJhbWUgKHNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsXG5uYW1lc3BhY2UgYW5kIHRoZSBvcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlXG5jb250YWlucyBvbmx5IGZ1bmN0aW9uIGRlZmluaXRpb25zLikgIFdoZW4gdGhlIGNsYXNzXCdzIHN1aXRlIGZpbmlzaGVzXG5leGVjdXRpb24sIGl0cyBleGVjdXRpb24gZnJhbWUgaXMgZGlzY2FyZGVkIGJ1dCBpdHMgbG9jYWwgbmFtZXNwYWNlIGlzXG5zYXZlZC4gWzRdIEEgY2xhc3Mgb2JqZWN0IGlzIHRoZW4gY3JlYXRlZCB1c2luZyB0aGUgaW5oZXJpdGFuY2UgbGlzdFxuZm9yIHRoZSBiYXNlIGNsYXNzZXMgYW5kIHRoZSBzYXZlZCBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBhdHRyaWJ1dGVcbmRpY3Rpb25hcnkuICBUaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGVcbm9yaWdpbmFsIGxvY2FsIG5hbWVzcGFjZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyB2YXJpYWJsZXM7IHRoZXkgYXJlIHNoYXJlZCBieSBhbGwgaW5zdGFuY2VzLiAgVG8gY3JlYXRlIGluc3RhbmNlXG52YXJpYWJsZXMsIHRoZXkgY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoIGBgc2VsZi5uYW1lID0gdmFsdWVgYC5cbkJvdGggY2xhc3MgYW5kIGluc3RhbmNlIHZhcmlhYmxlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvblxuImBgc2VsZi5uYW1lYGAiLCBhbmQgYW4gaW5zdGFuY2UgdmFyaWFibGUgaGlkZXMgYSBjbGFzcyB2YXJpYWJsZSB3aXRoXG50aGUgc2FtZSBuYW1lIHdoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuIENsYXNzIHZhcmlhYmxlcyBjYW4gYmUgdXNlZFxuYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhblxubGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMuICBGb3IgKm5ldy1zdHlsZSBjbGFzcyplcywgZGVzY3JpcHRvcnMgY2FuXG5iZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZSB2YXJpYWJsZXMgd2l0aCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25cbmRldGFpbHMuXG5cbkNsYXNzIGRlZmluaXRpb25zLCBsaWtlIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3Jcbm1vcmUgKmRlY29yYXRvciogZXhwcmVzc2lvbnMuICBUaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvclxuZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBmdW5jdGlvbnMuICBUaGUgcmVzdWx0IG11c3QgYmUgYSBjbGFzc1xub2JqZWN0LCB3aGljaCBpcyB0aGVuIGJvdW5kIHRvIHRoZSBjbGFzcyBuYW1lLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayBvbmx5IGlmIHRoZXJlXG4gICAgaXMgbm8gYGBmaW5hbGx5YGAgY2xhdXNlIHRoYXQgbmVnYXRlcyB0aGUgZXhjZXB0aW9uLlxuXG5bMl0gQ3VycmVudGx5LCBjb250cm9sICJmbG93cyBvZmYgdGhlIGVuZCIgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgZXhjZXB0aW9uIG9yIHRoZSBleGVjdXRpb24gb2YgYSBgYHJldHVybmBgLCBgYGNvbnRpbnVlYGAsIG9yXG4gICAgYGBicmVha2BgIHN0YXRlbWVudC5cblxuWzNdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGZ1bmN0aW9uXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBmdW5jdGlvblwncyBgYF9fZG9jX19gYCBhdHRyaWJ1dGUgYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgYGBfX2RvY19fYGAgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKLSAnY29lcmNpb24tcnVsZXMnOiB1IlxuQ29lcmNpb24gcnVsZXNcbioqKioqKioqKioqKioqXG5cblRoaXMgc2VjdGlvbiB1c2VkIHRvIGRvY3VtZW50IHRoZSBydWxlcyBmb3IgY29lcmNpb24uICBBcyB0aGUgbGFuZ3VhZ2VcbmhhcyBldm9sdmVkLCB0aGUgY29lcmNpb24gcnVsZXMgaGF2ZSBiZWNvbWUgaGFyZCB0byBkb2N1bWVudFxucHJlY2lzZWx5OyBkb2N1bWVudGluZyB3aGF0IG9uZSB2ZXJzaW9uIG9mIG9uZSBwYXJ0aWN1bGFyXG5pbXBsZW1lbnRhdGlvbiBkb2VzIGlzIHVuZGVzaXJhYmxlLiAgSW5zdGVhZCwgaGVyZSBhcmUgc29tZSBpbmZvcm1hbFxuZ3VpZGVsaW5lcyByZWdhcmRpbmcgY29lcmNpb24uICBJbiBQeXRob24gMy4wLCBjb2VyY2lvbiB3aWxsIG5vdCBiZVxuc3VwcG9ydGVkLlxuXG4qIElmIHRoZSBsZWZ0IG9wZXJhbmQgb2YgYSAlIG9wZXJhdG9yIGlzIGEgc3RyaW5nIG9yIFVuaWNvZGUgb2JqZWN0LFxuICBubyBjb2VyY2lvbiB0YWtlcyBwbGFjZSBhbmQgdGhlIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbiBpc1xuICBpbnZva2VkIGluc3RlYWQuXG5cbiogSXQgaXMgbm8gbG9uZ2VyIHJlY29tbWVuZGVkIHRvIGRlZmluZSBhIGNvZXJjaW9uIG9wZXJhdGlvbi4gTWl4ZWQtXG4gIG1vZGUgb3BlcmF0aW9ucyBvbiB0eXBlcyB0aGF0IGRvbid0IGRlZmluZSBjb2VyY2lvbiBwYXNzIHRoZVxuICBvcmlnaW5hbCBhcmd1bWVudHMgdG8gdGhlIG9wZXJhdGlvbi5cblxuKiBOZXctc3R5bGUgY2xhc3NlcyAodGhvc2UgZGVyaXZlZCBmcm9tIGBgb2JqZWN0YGApIG5ldmVyIGludm9rZSB0aGVcbiAgYGBfX2NvZXJjZV9fKClgYCBtZXRob2QgaW4gcmVzcG9uc2UgdG8gYSBiaW5hcnkgb3BlcmF0b3I7IHRoZSBvbmx5XG4gIHRpbWUgYGBfX2NvZXJjZV9fKClgYCBpcyBpbnZva2VkIGlzIHdoZW4gdGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gIGBgY29lcmNlKClgYCBpcyBjYWxsZWQuXG5cbiogRm9yIG1vc3QgaW50ZW50cyBhbmQgcHVycG9zZXMsIGFuIG9wZXJhdG9yIHRoYXQgcmV0dXJuc1xuICBgYE5vdEltcGxlbWVudGVkYGAgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyBvbmUgdGhhdCBpcyBub3RcbiAgaW1wbGVtZW50ZWQgYXQgYWxsLlxuXG4qIEJlbG93LCBgYF9fb3BfXygpYGAgYW5kIGBgX19yb3BfXygpYGAgYXJlIHVzZWQgdG8gc2lnbmlmeSB0aGVcbiAgZ2VuZXJpYyBtZXRob2QgbmFtZXMgY29ycmVzcG9uZGluZyB0byBhbiBvcGVyYXRvcjsgYGBfX2lvcF9fKClgYCBpc1xuICB1c2VkIGZvciB0aGUgY29ycmVzcG9uZGluZyBpbi1wbGFjZSBvcGVyYXRvci4gIEZvciBleGFtcGxlLCBmb3IgdGhlXG4gIG9wZXJhdG9yICdgYCtgYCcsIGBgX19hZGRfXygpYGAgYW5kIGBgX19yYWRkX18oKWBgIGFyZSB1c2VkIGZvciB0aGVcbiAgbGVmdCBhbmQgcmlnaHQgdmFyaWFudCBvZiB0aGUgYmluYXJ5IG9wZXJhdG9yLCBhbmQgYGBfX2lhZGRfXygpYGBcbiAgZm9yIHRoZSBpbi1wbGFjZSB2YXJpYW50LlxuXG4qIEZvciBvYmplY3RzICp4KiBhbmQgKnkqLCBmaXJzdCBgYHguX19vcF9fKHkpYGAgaXMgdHJpZWQuICBJZiB0aGlzIGlzXG4gIG5vdCBpbXBsZW1lbnRlZCBvciByZXR1cm5zIGBgTm90SW1wbGVtZW50ZWRgYCwgYGB5Ll9fcm9wX18oeClgYCBpc1xuICB0cmllZC4gIElmIHRoaXMgaXMgYWxzbyBub3QgaW1wbGVtZW50ZWQgb3IgcmV0dXJuc1xuICBgYE5vdEltcGxlbWVudGVkYGAsIGEgYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLiAgQnV0IHNlZVxuICB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcblxuKiBFeGNlcHRpb24gdG8gdGhlIHByZXZpb3VzIGl0ZW06IGlmIHRoZSBsZWZ0IG9wZXJhbmQgaXMgYW4gaW5zdGFuY2VcbiAgb2YgYSBidWlsdC1pbiB0eXBlIG9yIGEgbmV3LXN0eWxlIGNsYXNzLCBhbmQgdGhlIHJpZ2h0IG9wZXJhbmQgaXMgYW5cbiAgaW5zdGFuY2Ugb2YgYSBwcm9wZXIgc3ViY2xhc3Mgb2YgdGhhdCB0eXBlIG9yIGNsYXNzIGFuZCBvdmVycmlkZXNcbiAgdGhlIGJhc2UncyBgYF9fcm9wX18oKWBgIG1ldGhvZCwgdGhlIHJpZ2h0IG9wZXJhbmQncyBgYF9fcm9wX18oKWBgXG4gIG1ldGhvZCBpcyB0cmllZCAqYmVmb3JlKiB0aGUgbGVmdCBvcGVyYW5kJ3MgYGBfX29wX18oKWBgIG1ldGhvZC5cblxuICBUaGlzIGlzIGRvbmUgc28gdGhhdCBhIHN1YmNsYXNzIGNhbiBjb21wbGV0ZWx5IG92ZXJyaWRlIGJpbmFyeVxuICBvcGVyYXRvcnMuIE90aGVyd2lzZSwgdGhlIGxlZnQgb3BlcmFuZCdzIGBgX19vcF9fKClgYCBtZXRob2Qgd291bGRcbiAgYWx3YXlzIGFjY2VwdCB0aGUgcmlnaHQgb3BlcmFuZDogd2hlbiBhbiBpbnN0YW5jZSBvZiBhIGdpdmVuIGNsYXNzXG4gIGlzIGV4cGVjdGVkLCBhbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIHRoYXQgY2xhc3MgaXMgYWx3YXlzXG4gIGFjY2VwdGFibGUuXG5cbiogV2hlbiBlaXRoZXIgb3BlcmFuZCB0eXBlIGRlZmluZXMgYSBjb2VyY2lvbiwgdGhpcyBjb2VyY2lvbiBpcyBjYWxsZWRcbiAgYmVmb3JlIHRoYXQgdHlwZSdzIGBgX19vcF9fKClgYCBvciBgYF9fcm9wX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQsXG4gIGJ1dCBubyBzb29uZXIuICBJZiB0aGUgY29lcmNpb24gcmV0dXJucyBhbiBvYmplY3Qgb2YgYSBkaWZmZXJlbnRcbiAgdHlwZSBmb3IgdGhlIG9wZXJhbmQgd2hvc2UgY29lcmNpb24gaXMgaW52b2tlZCwgcGFydCBvZiB0aGUgcHJvY2Vzc1xuICBpcyByZWRvbmUgdXNpbmcgdGhlIG5ldyBvYmplY3QuXG5cbiogV2hlbiBhbiBpbi1wbGFjZSBvcGVyYXRvciAobGlrZSAnYGArPWBgJykgaXMgdXNlZCwgaWYgdGhlIGxlZnRcbiAgb3BlcmFuZCBpbXBsZW1lbnRzIGBgX19pb3BfXygpYGAsIGl0IGlzIGludm9rZWQgd2l0aG91dCBhbnlcbiAgY29lcmNpb24uICBXaGVuIHRoZSBvcGVyYXRpb24gZmFsbHMgYmFjayB0byBgYF9fb3BfXygpYGAgYW5kL29yXG4gIGBgX19yb3BfXygpYGAsIHRoZSBub3JtYWwgY29lcmNpb24gcnVsZXMgYXBwbHkuXG5cbiogSW4gYGB4ICsgeWBgLCBpZiAqeCogaXMgYSBzZXF1ZW5jZSB0aGF0IGltcGxlbWVudHMgc2VxdWVuY2VcbiAgY29uY2F0ZW5hdGlvbiwgc2VxdWVuY2UgY29uY2F0ZW5hdGlvbiBpcyBpbnZva2VkLlxuXG4qIEluIGBgeCAqIHlgYCwgaWYgb25lIG9wZXJhdG9yIGlzIGEgc2VxdWVuY2UgdGhhdCBpbXBsZW1lbnRzIHNlcXVlbmNlXG4gIHJlcGV0aXRpb24sIGFuZCB0aGUgb3RoZXIgaXMgYW4gaW50ZWdlciAoYGBpbnRgYCBvciBgYGxvbmdgYCksXG4gIHNlcXVlbmNlIHJlcGV0aXRpb24gaXMgaW52b2tlZC5cblxuKiBSaWNoIGNvbXBhcmlzb25zIChpbXBsZW1lbnRlZCBieSBtZXRob2RzIGBgX19lcV9fKClgYCBhbmQgc28gb24pXG4gIG5ldmVyIHVzZSBjb2VyY2lvbi4gIFRocmVlLXdheSBjb21wYXJpc29uIChpbXBsZW1lbnRlZCBieVxuICBgYF9fY21wX18oKWBgKSBkb2VzIHVzZSBjb2VyY2lvbiB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIGFzIG90aGVyXG4gIGJpbmFyeSBvcGVyYXRpb25zIHVzZSBpdC5cblxuKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIG51bWVyaWMgdHlwZXMgYGBpbnRgYCxcbiAgYGBsb25nYGAgYW5kIGBgZmxvYXRgYCBkbyBub3QgdXNlIGNvZXJjaW9uOyB0aGUgdHlwZSBgYGNvbXBsZXhgYFxuICBob3dldmVyIGRvZXMgdXNlIGNvZXJjaW9uIGZvciBiaW5hcnkgb3BlcmF0b3JzIGFuZCByaWNoIGNvbXBhcmlzb25zLFxuICBkZXNwaXRlIHRoZSBhYm92ZSBydWxlcy4gIFRoZSBkaWZmZXJlbmNlIGNhbiBiZWNvbWUgYXBwYXJlbnQgd2hlblxuICBzdWJjbGFzc2luZyB0aGVzZSB0eXBlcy4gIE92ZXIgdGltZSwgdGhlIHR5cGUgYGBjb21wbGV4YGAgbWF5IGJlXG4gIGZpeGVkIHRvIGF2b2lkIGNvZXJjaW9uLiBBbGwgdGhlc2UgdHlwZXMgaW1wbGVtZW50IGFcbiAgYGBfX2NvZXJjZV9fKClgYCBtZXRob2QsIGZvciB1c2UgYnkgdGhlIGJ1aWx0LWluIGBgY29lcmNlKClgYFxuICBmdW5jdGlvbi5cbiIsCisgJ2NvZXJjaW9uLXJ1bGVzJzogdSJcbkNvZXJjaW9uIHJ1bGVzXG4qKioqKioqKioqKioqKlxuXG5UaGlzIHNlY3Rpb24gdXNlZCB0byBkb2N1bWVudCB0aGUgcnVsZXMgZm9yIGNvZXJjaW9uLiAgQXMgdGhlIGxhbmd1YWdlXG5oYXMgZXZvbHZlZCwgdGhlIGNvZXJjaW9uIHJ1bGVzIGhhdmUgYmVjb21lIGhhcmQgdG8gZG9jdW1lbnRcbnByZWNpc2VseTsgZG9jdW1lbnRpbmcgd2hhdCBvbmUgdmVyc2lvbiBvZiBvbmUgcGFydGljdWxhclxuaW1wbGVtZW50YXRpb24gZG9lcyBpcyB1bmRlc2lyYWJsZS4gIEluc3RlYWQsIGhlcmUgYXJlIHNvbWUgaW5mb3JtYWxcbmd1aWRlbGluZXMgcmVnYXJkaW5nIGNvZXJjaW9uLiAgSW4gUHl0aG9uIDMuMCwgY29lcmNpb24gd2lsbCBub3QgYmVcbnN1cHBvcnRlZC5cblxuKiBJZiB0aGUgbGVmdCBvcGVyYW5kIG9mIGEgJSBvcGVyYXRvciBpcyBhIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCxcbiAgbm8gY29lcmNpb24gdGFrZXMgcGxhY2UgYW5kIHRoZSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24gaXNcbiAgaW52b2tlZCBpbnN0ZWFkLlxuXG4qIEl0IGlzIG5vIGxvbmdlciByZWNvbW1lbmRlZCB0byBkZWZpbmUgYSBjb2VyY2lvbiBvcGVyYXRpb24uIE1peGVkLVxuICBtb2RlIG9wZXJhdGlvbnMgb24gdHlwZXMgdGhhdCBkb24ndCBkZWZpbmUgY29lcmNpb24gcGFzcyB0aGVcbiAgb3JpZ2luYWwgYXJndW1lbnRzIHRvIHRoZSBvcGVyYXRpb24uXG5cbiogTmV3LXN0eWxlIGNsYXNzZXMgKHRob3NlIGRlcml2ZWQgZnJvbSBgYG9iamVjdGBgKSBuZXZlciBpbnZva2UgdGhlXG4gIGBgX19jb2VyY2VfXygpYGAgbWV0aG9kIGluIHJlc3BvbnNlIHRvIGEgYmluYXJ5IG9wZXJhdG9yOyB0aGUgb25seVxuICB0aW1lIGBgX19jb2VyY2VfXygpYGAgaXMgaW52b2tlZCBpcyB3aGVuIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICBgYGNvZXJjZSgpYGAgaXMgY2FsbGVkLlxuXG4qIEZvciBtb3N0IGludGVudHMgYW5kIHB1cnBvc2VzLCBhbiBvcGVyYXRvciB0aGF0IHJldHVybnNcbiAgYGBOb3RJbXBsZW1lbnRlZGBgIGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMgb25lIHRoYXQgaXMgbm90XG4gIGltcGxlbWVudGVkIGF0IGFsbC5cblxuKiBCZWxvdywgYGBfX29wX18oKWBgIGFuZCBgYF9fcm9wX18oKWBgIGFyZSB1c2VkIHRvIHNpZ25pZnkgdGhlXG4gIGdlbmVyaWMgbWV0aG9kIG5hbWVzIGNvcnJlc3BvbmRpbmcgdG8gYW4gb3BlcmF0b3I7IGBgX19pb3BfXygpYGAgaXNcbiAgdXNlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgaW4tcGxhY2Ugb3BlcmF0b3IuICBGb3IgZXhhbXBsZSwgZm9yIHRoZVxuICBvcGVyYXRvciAnYGArYGAnLCBgYF9fYWRkX18oKWBgIGFuZCBgYF9fcmFkZF9fKClgYCBhcmUgdXNlZCBmb3IgdGhlXG4gIGxlZnQgYW5kIHJpZ2h0IHZhcmlhbnQgb2YgdGhlIGJpbmFyeSBvcGVyYXRvciwgYW5kIGBgX19pYWRkX18oKWBgXG4gIGZvciB0aGUgaW4tcGxhY2UgdmFyaWFudC5cblxuKiBGb3Igb2JqZWN0cyAqeCogYW5kICp5KiwgZmlyc3QgYGB4Ll9fb3BfXyh5KWBgIGlzIHRyaWVkLiAgSWYgdGhpcyBpc1xuICBub3QgaW1wbGVtZW50ZWQgb3IgcmV0dXJucyBgYE5vdEltcGxlbWVudGVkYGAsIGBgeS5fX3JvcF9fKHgpYGAgaXNcbiAgdHJpZWQuICBJZiB0aGlzIGlzIGFsc28gbm90IGltcGxlbWVudGVkIG9yIHJldHVybnNcbiAgYGBOb3RJbXBsZW1lbnRlZGBgLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIEJ1dCBzZWVcbiAgdGhlIGZvbGxvd2luZyBleGNlcHRpb246XG5cbiogRXhjZXB0aW9uIHRvIHRoZSBwcmV2aW91cyBpdGVtOiBpZiB0aGUgbGVmdCBvcGVyYW5kIGlzIGFuIGluc3RhbmNlXG4gIG9mIGEgYnVpbHQtaW4gdHlwZSBvciBhIG5ldy1zdHlsZSBjbGFzcywgYW5kIHRoZSByaWdodCBvcGVyYW5kIGlzIGFuXG4gIGluc3RhbmNlIG9mIGEgcHJvcGVyIHN1YmNsYXNzIG9mIHRoYXQgdHlwZSBvciBjbGFzcyBhbmQgb3ZlcnJpZGVzXG4gIHRoZSBiYXNlJ3MgYGBfX3JvcF9fKClgYCBtZXRob2QsIHRoZSByaWdodCBvcGVyYW5kJ3MgYGBfX3JvcF9fKClgYFxuICBtZXRob2QgaXMgdHJpZWQgKmJlZm9yZSogdGhlIGxlZnQgb3BlcmFuZCdzIGBgX19vcF9fKClgYCBtZXRob2QuXG5cbiAgVGhpcyBpcyBkb25lIHNvIHRoYXQgYSBzdWJjbGFzcyBjYW4gY29tcGxldGVseSBvdmVycmlkZSBiaW5hcnlcbiAgb3BlcmF0b3JzLiBPdGhlcndpc2UsIHRoZSBsZWZ0IG9wZXJhbmQncyBgYF9fb3BfXygpYGAgbWV0aG9kIHdvdWxkXG4gIGFsd2F5cyBhY2NlcHQgdGhlIHJpZ2h0IG9wZXJhbmQ6IHdoZW4gYW4gaW5zdGFuY2Ugb2YgYSBnaXZlbiBjbGFzc1xuICBpcyBleHBlY3RlZCwgYW4gaW5zdGFuY2Ugb2YgYSBzdWJjbGFzcyBvZiB0aGF0IGNsYXNzIGlzIGFsd2F5c1xuICBhY2NlcHRhYmxlLlxuXG4qIFdoZW4gZWl0aGVyIG9wZXJhbmQgdHlwZSBkZWZpbmVzIGEgY29lcmNpb24sIHRoaXMgY29lcmNpb24gaXMgY2FsbGVkXG4gIGJlZm9yZSB0aGF0IHR5cGUncyBgYF9fb3BfXygpYGAgb3IgYGBfX3JvcF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLFxuICBidXQgbm8gc29vbmVyLiAgSWYgdGhlIGNvZXJjaW9uIHJldHVybnMgYW4gb2JqZWN0IG9mIGEgZGlmZmVyZW50XG4gIHR5cGUgZm9yIHRoZSBvcGVyYW5kIHdob3NlIGNvZXJjaW9uIGlzIGludm9rZWQsIHBhcnQgb2YgdGhlIHByb2Nlc3NcbiAgaXMgcmVkb25lIHVzaW5nIHRoZSBuZXcgb2JqZWN0LlxuXG4qIFdoZW4gYW4gaW4tcGxhY2Ugb3BlcmF0b3IgKGxpa2UgJ2BgKz1gYCcpIGlzIHVzZWQsIGlmIHRoZSBsZWZ0XG4gIG9wZXJhbmQgaW1wbGVtZW50cyBgYF9faW9wX18oKWBgLCBpdCBpcyBpbnZva2VkIHdpdGhvdXQgYW55XG4gIGNvZXJjaW9uLiAgV2hlbiB0aGUgb3BlcmF0aW9uIGZhbGxzIGJhY2sgdG8gYGBfX29wX18oKWBgIGFuZC9vclxuICBgYF9fcm9wX18oKWBgLCB0aGUgbm9ybWFsIGNvZXJjaW9uIHJ1bGVzIGFwcGx5LlxuXG4qIEluIGBgeCArIHlgYCwgaWYgKngqIGlzIGEgc2VxdWVuY2UgdGhhdCBpbXBsZW1lbnRzIHNlcXVlbmNlXG4gIGNvbmNhdGVuYXRpb24sIHNlcXVlbmNlIGNvbmNhdGVuYXRpb24gaXMgaW52b2tlZC5cblxuKiBJbiBgYHggKiB5YGAsIGlmIG9uZSBvcGVyYXRvciBpcyBhIHNlcXVlbmNlIHRoYXQgaW1wbGVtZW50cyBzZXF1ZW5jZVxuICByZXBldGl0aW9uLCBhbmQgdGhlIG90aGVyIGlzIGFuIGludGVnZXIgKGBgaW50YGAgb3IgYGBsb25nYGApLFxuICBzZXF1ZW5jZSByZXBldGl0aW9uIGlzIGludm9rZWQuXG5cbiogUmljaCBjb21wYXJpc29ucyAoaW1wbGVtZW50ZWQgYnkgbWV0aG9kcyBgYF9fZXFfXygpYGAgYW5kIHNvIG9uKVxuICBuZXZlciB1c2UgY29lcmNpb24uICBUaHJlZS13YXkgY29tcGFyaXNvbiAoaW1wbGVtZW50ZWQgYnlcbiAgYGBfX2NtcF9fKClgYCkgZG9lcyB1c2UgY29lcmNpb24gdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBhcyBvdGhlclxuICBiaW5hcnkgb3BlcmF0aW9ucyB1c2UgaXQuXG5cbiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSBidWlsdC1pbiBudW1lcmljIHR5cGVzIGBgaW50YGAsXG4gIGBgbG9uZ2BgLCBgYGZsb2F0YGAsIGFuZCBgYGNvbXBsZXhgYCBkbyBub3QgdXNlIGNvZXJjaW9uLiBBbGwgdGhlc2VcbiAgdHlwZXMgaW1wbGVtZW50IGEgYGBfX2NvZXJjZV9fKClgYCBtZXRob2QsIGZvciB1c2UgYnkgdGhlIGJ1aWx0LWluXG4gIGBgY29lcmNlKClgYCBmdW5jdGlvbi5cblxuICBDaGFuZ2VkIGluIHZlcnNpb24gMi43LlxuIiwKICAnY29tcGFyaXNvbnMnOiB1J1xuQ29tcGFyaXNvbnNcbioqKioqKioqKioqXG5cblVubGlrZSBDLCBhbGwgY29tcGFyaXNvbiBvcGVyYXRpb25zIGluIFB5dGhvbiBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LFxud2hpY2ggaXMgbG93ZXIgdGhhbiB0aGF0IG9mIGFueSBhcml0aG1ldGljLCBzaGlmdGluZyBvciBiaXR3aXNlXG5vcGVyYXRpb24uICBBbHNvIHVubGlrZSBDLCBleHByZXNzaW9ucyBsaWtlIGBgYSA8IGIgPCBjYGAgaGF2ZSB0aGVcbmludGVycHJldGF0aW9uIHRoYXQgaXMgY29udmVudGlvbmFsIGluIG1hdGhlbWF0aWNzOlxuXG4gICBjb21wYXJpc29uICAgIDo6PSBvcl9leHByICggY29tcF9vcGVyYXRvciBvcl9leHByICkqXG4gICBjb21wX29wZXJhdG9yIDo6PSAiPCIgfCAiPiIgfCAiPT0iIHwgIj49IiB8ICI8PSIgfCAiPD4iIHwgIiE9IlxuICAgICAgICAgICAgICAgICAgICAgfCAiaXMiIFsibm90Il0gfCBbIm5vdCJdICJpbiJcblxuQ29tcGFyaXNvbnMgeWllbGQgYm9vbGVhbiB2YWx1ZXM6IGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYC5cblxuQ29tcGFyaXNvbnMgY2FuIGJlIGNoYWluZWQgYXJiaXRyYXJpbHksIGUuZy4sIGBgeCA8IHkgPD0gemBgIGlzXG5lcXVpdmFsZW50IHRvIGBgeCA8IHkgYW5kIHkgPD0gemBgLCBleGNlcHQgdGhhdCBgYHlgYCBpcyBldmFsdWF0ZWRcbm9ubHkgb25jZSAoYnV0IGluIGJvdGggY2FzZXMgYGB6YGAgaXMgbm90IGV2YWx1YXRlZCBhdCBhbGwgd2hlbiBgYHggPFxueWBgIGlzIGZvdW5kIHRvIGJlIGZhbHNlKS5cblxuRm9ybWFsbHksIGlmICphKiwgKmIqLCAqYyosIC4uLiwgKnkqLCAqeiogYXJlIGV4cHJlc3Npb25zIGFuZCAqb3AxKixcbipvcDIqLCAuLi4sICpvcE4qIGFyZSBjb21wYXJpc29uIG9wZXJhdG9ycywgdGhlbiBgYGEgb3AxIGIgb3AyIGMgLi4uIHlcbm9wTiB6YGAgaXMgZXF1aXZhbGVudCB0byBgYGEgb3AxIGIgYW5kIGIgb3AyIGMgYW5kIC4uLiB5IG9wTiB6YGAsXG5leGNlcHQgdGhhdCBlYWNoIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGF0IG1vc3Qgb25jZS5cblxuTm90ZSB0aGF0IGBgYSBvcDEgYiBvcDIgY2BgIGRvZXNuXCd0IGltcGx5IGFueSBraW5kIG9mIGNvbXBhcmlzb25cbmJldHdlZW4gKmEqIGFuZCAqYyosIHNvIHRoYXQsIGUuZy4sIGBgeCA8IHkgPiB6YGAgaXMgcGVyZmVjdGx5IGxlZ2FsXG4odGhvdWdoIHBlcmhhcHMgbm90IHByZXR0eSkuXG5cblRoZSBmb3JtcyBgYDw+YGAgYW5kIGBgIT1gYCBhcmUgZXF1aXZhbGVudDsgZm9yIGNvbnNpc3RlbmN5IHdpdGggQyxcbmBgIT1gYCBpcyBwcmVmZXJyZWQ7IHdoZXJlIGBgIT1gYCBpcyBtZW50aW9uZWQgYmVsb3cgYGA8PmBgIGlzIGFsc29cbmFjY2VwdGVkLiAgVGhlIGBgPD5gYCBzcGVsbGluZyBpcyBjb25zaWRlcmVkIG9ic29sZXNjZW50LlxuXG5UaGUgb3BlcmF0b3JzIGBgPGBgLCBgYD5gYCwgYGA9PWBgLCBgYD49YGAsIGBgPD1gYCwgYW5kIGBgIT1gYCBjb21wYXJlXG50aGUgdmFsdWVzIG9mIHR3byBvYmplY3RzLiAgVGhlIG9iamVjdHMgbmVlZCBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlLlxuSWYgYm90aCBhcmUgbnVtYmVycywgdGhleSBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBPdGhlcndpc2UsXG5vYmplY3RzIG9mIGRpZmZlcmVudCB0eXBlcyAqYWx3YXlzKiBjb21wYXJlIHVuZXF1YWwsIGFuZCBhcmUgb3JkZXJlZFxuY29uc2lzdGVudGx5IGJ1dCBhcmJpdHJhcmlseS4gWW91IGNhbiBjb250cm9sIGNvbXBhcmlzb24gYmVoYXZpb3Igb2Zcbm9iamVjdHMgb2Ygbm9uLWJ1aWx0LWluIHR5cGVzIGJ5IGRlZmluaW5nIGEgYGBfX2NtcF9fYGAgbWV0aG9kIG9yIHJpY2hcbmNvbXBhcmlzb24gbWV0aG9kcyBsaWtlIGBgX19ndF9fYGAsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpTcGVjaWFsXG5tZXRob2QgbmFtZXMqLlxuXG4oVGhpcyB1bnVzdWFsIGRlZmluaXRpb24gb2YgY29tcGFyaXNvbiB3YXMgdXNlZCB0byBzaW1wbGlmeSB0aGVcbmRlZmluaXRpb24gb2Ygb3BlcmF0aW9ucyBsaWtlIHNvcnRpbmcgYW5kIHRoZSBgYGluYGAgYW5kIGBgbm90IGluYGBcbm9wZXJhdG9ycy4gSW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBhcmlzb24gcnVsZXMgZm9yIG9iamVjdHMgb2ZcbmRpZmZlcmVudCB0eXBlcyBhcmUgbGlrZWx5IHRvIGNoYW5nZS4pXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGRlcGVuZHMgb24gdGhlIHR5cGU6XG5cbiogTnVtYmVycyBhcmUgY29tcGFyZWQgYXJpdGhtZXRpY2FsbHkuXG5cbiogU3RyaW5ncyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWMgZXF1aXZhbGVudHNcbiAgKHRoZSByZXN1bHQgb2YgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgb3JkKClgYCkgb2YgdGhlaXIgY2hhcmFjdGVycy5cbiAgVW5pY29kZSBhbmQgOC1iaXQgc3RyaW5ncyBhcmUgZnVsbHkgaW50ZXJvcGVyYWJsZSBpbiB0aGlzIGJlaGF2aW9yLlxuICBbNF1cblxuKiBUdXBsZXMgYW5kIGxpc3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyBjb21wYXJpc29uIG9mXG4gIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMuICBUaGlzIG1lYW5zIHRoYXQgdG8gY29tcGFyZSBlcXVhbCwgZWFjaFxuICBlbGVtZW50IG11c3QgY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZVxuICB0eXBlIGFuZCBoYXZlIHRoZSBzYW1lIGxlbmd0aC5cblxuICBJZiBub3QgZXF1YWwsIHRoZSBzZXF1ZW5jZXMgYXJlIG9yZGVyZWQgdGhlIHNhbWUgYXMgdGhlaXIgZmlyc3RcbiAgZGlmZmVyaW5nIGVsZW1lbnRzLiAgRm9yIGV4YW1wbGUsIGBgY21wKFsxLDIseF0sIFsxLDIseV0pYGAgcmV0dXJuc1xuICB0aGUgc2FtZSBhcyBgYGNtcCh4LHkpYGAuICBJZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGRvZXMgbm90XG4gIGV4aXN0LCB0aGUgc2hvcnRlciBzZXF1ZW5jZSBpcyBvcmRlcmVkIGZpcnN0IChmb3IgZXhhbXBsZSwgYGBbMSwyXSA8XG4gIFsxLDIsM11gYCkuXG5cbiogTWFwcGluZ3MgKGRpY3Rpb25hcmllcykgY29tcGFyZSBlcXVhbCBpZiBhbmQgb25seSBpZiB0aGVpciBzb3J0ZWRcbiAgKGtleSwgdmFsdWUpIGxpc3RzIGNvbXBhcmUgZXF1YWwuIFs1XSBPdXRjb21lcyBvdGhlciB0aGFuIGVxdWFsaXR5XG4gIGFyZSByZXNvbHZlZCBjb25zaXN0ZW50bHksIGJ1dCBhcmUgbm90IG90aGVyd2lzZSBkZWZpbmVkLiBbNl1cblxuKiBNb3N0IG90aGVyIG9iamVjdHMgb2YgYnVpbHQtaW4gdHlwZXMgY29tcGFyZSB1bmVxdWFsIHVubGVzcyB0aGV5IGFyZVxuICB0aGUgc2FtZSBvYmplY3Q7IHRoZSBjaG9pY2Ugd2hldGhlciBvbmUgb2JqZWN0IGlzIGNvbnNpZGVyZWQgc21hbGxlclxuICBvciBsYXJnZXIgdGhhbiBhbm90aGVyIG9uZSBpcyBtYWRlIGFyYml0cmFyaWx5IGJ1dCBjb25zaXN0ZW50bHlcbiAgd2l0aGluIG9uZSBleGVjdXRpb24gb2YgYSBwcm9ncmFtLlxuXG5UaGUgb3BlcmF0b3JzIGBgaW5gYCBhbmQgYGBub3QgaW5gYCB0ZXN0IGZvciBjb2xsZWN0aW9uIG1lbWJlcnNoaXAuXG5gYHggaW4gc2BgIGV2YWx1YXRlcyB0byB0cnVlIGlmICp4KiBpcyBhIG1lbWJlciBvZiB0aGUgY29sbGVjdGlvbiAqcyosXG5hbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgYGB4IG5vdCBpbiBzYGAgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgYGB4IGluXG5zYGAuIFRoZSBjb2xsZWN0aW9uIG1lbWJlcnNoaXAgdGVzdCBoYXMgdHJhZGl0aW9uYWxseSBiZWVuIGJvdW5kIHRvXG5zZXF1ZW5jZXM7IGFuIG9iamVjdCBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpb24gaWYgdGhlIGNvbGxlY3Rpb24gaXNcbmEgc2VxdWVuY2UgYW5kIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8gdGhhdCBvYmplY3QuICBIb3dldmVyLCBpdFxubWFrZSBzZW5zZSBmb3IgbWFueSBvdGhlciBvYmplY3QgdHlwZXMgdG8gc3VwcG9ydCBtZW1iZXJzaGlwIHRlc3RzXG53aXRob3V0IGJlaW5nIGEgc2VxdWVuY2UuICBJbiBwYXJ0aWN1bGFyLCBkaWN0aW9uYXJpZXMgKGZvciBrZXlzKSBhbmRcbnNldHMgc3VwcG9ydCBtZW1iZXJzaGlwIHRlc3RpbmcuXG5cbkZvciB0aGUgbGlzdCBhbmQgdHVwbGUgdHlwZXMsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZVxuZXhpc3RzIGFuIGluZGV4ICppKiBzdWNoIHRoYXQgYGB4ID09IHlbaV1gYCBpcyB0cnVlLlxuXG5Gb3IgdGhlIFVuaWNvZGUgYW5kIHN0cmluZyB0eXBlcywgYGB4IGluIHlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmXG4qeCogaXMgYSBzdWJzdHJpbmcgb2YgKnkqLiAgQW4gZXF1aXZhbGVudCB0ZXN0IGlzIGBgeS5maW5kKHgpICE9IC0xYGAuXG5Ob3RlLCAqeCogYW5kICp5KiBuZWVkIG5vdCBiZSB0aGUgc2FtZSB0eXBlOyBjb25zZXF1ZW50bHksIGBgdVwnYWJcJyBpblxuXCdhYmNcJ2BgIHdpbGwgcmV0dXJuIGBgVHJ1ZWBgLiBFbXB0eSBzdHJpbmdzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0b1xuYmUgYSBzdWJzdHJpbmcgb2YgYW55IG90aGVyIHN0cmluZywgc28gYGAiIiBpbiAiYWJjImBgIHdpbGwgcmV0dXJuXG5gYFRydWVgYC5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogUHJldmlvdXNseSwgKngqIHdhcyByZXF1aXJlZCB0byBiZSBhIHN0cmluZyBvZlxubGVuZ3RoIGBgMWBgLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZGVmaW5lIHRoZSBgYF9fY29udGFpbnNfXygpYGAgbWV0aG9kLFxuYGB4IGluIHlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIGBgeS5fX2NvbnRhaW5zX18oeClgYCBpcyB0cnVlLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZG8gbm90IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAgYnV0IGRvXG5kZWZpbmUgYGBfX2l0ZXJfXygpYGAsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBzb21lIHZhbHVlIGBgemBgIHdpdGggYGB4XG49PSB6YGAgaXMgcHJvZHVjZWQgd2hpbGUgaXRlcmF0aW5nIG92ZXIgYGB5YGAuICBJZiBhbiBleGNlcHRpb24gaXNcbnJhaXNlZCBkdXJpbmcgdGhlIGl0ZXJhdGlvbiwgaXQgaXMgYXMgaWYgYGBpbmBgIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbi5cblxuTGFzdGx5LCB0aGUgb2xkLXN0eWxlIGl0ZXJhdGlvbiBwcm90b2NvbCBpcyB0cmllZDogaWYgYSBjbGFzcyBkZWZpbmVzXG5gYF9fZ2V0aXRlbV9fKClgYCwgYGB4IGluIHlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZXJlIGlzIGEgbm9uLVxubmVnYXRpdmUgaW50ZWdlciBpbmRleCAqaSogc3VjaCB0aGF0IGBgeCA9PSB5W2ldYGAsIGFuZCBhbGwgbG93ZXJcbmludGVnZXIgaW5kaWNlcyBkbyBub3QgcmFpc2UgYGBJbmRleEVycm9yYGAgZXhjZXB0aW9uLiAoSWYgYW55IG90aGVyXG5leGNlcHRpb24gaXMgcmFpc2VkLCBpdCBpcyBhcyBpZiBgYGluYGAgcmFpc2VkIHRoYXQgZXhjZXB0aW9uKS5cblxuVGhlIG9wZXJhdG9yIGBgbm90IGluYGAgaXMgZGVmaW5lZCB0byBoYXZlIHRoZSBpbnZlcnNlIHRydWUgdmFsdWUgb2ZcbmBgaW5gYC5cblxuVGhlIG9wZXJhdG9ycyBgYGlzYGAgYW5kIGBgaXMgbm90YGAgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiBgYHggaXNcbnlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBhbmQgKnkqIGFyZSB0aGUgc2FtZSBvYmplY3QuICBgYHggaXNcbm5vdCB5YGAgeWllbGRzIHRoZSBpbnZlcnNlIHRydXRoIHZhbHVlLiBbN11cbicsCi0gJ2NvbXBvdW5kJzogdSdcbkNvbXBvdW5kIHN0YXRlbWVudHNcbioqKioqKioqKioqKioqKioqKipcblxuQ29tcG91bmQgc3RhdGVtZW50cyBjb250YWluIChncm91cHMgb2YpIG90aGVyIHN0YXRlbWVudHM7IHRoZXkgYWZmZWN0XG5vciBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhvc2Ugb3RoZXIgc3RhdGVtZW50cyBpbiBzb21lIHdheS4gIEluXG5nZW5lcmFsLCBjb21wb3VuZCBzdGF0ZW1lbnRzIHNwYW4gbXVsdGlwbGUgbGluZXMsIGFsdGhvdWdoIGluIHNpbXBsZVxuaW5jYXJuYXRpb25zIGEgd2hvbGUgY29tcG91bmQgc3RhdGVtZW50IG1heSBiZSBjb250YWluZWQgaW4gb25lIGxpbmUuXG5cblRoZSBgYGlmYGAsIGBgd2hpbGVgYCBhbmQgYGBmb3JgYCBzdGF0ZW1lbnRzIGltcGxlbWVudCB0cmFkaXRpb25hbFxuY29udHJvbCBmbG93IGNvbnN0cnVjdHMuICBgYHRyeWBgIHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yXG5jbGVhbnVwIGNvZGUgZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cy4gIEZ1bmN0aW9uIGFuZCBjbGFzc1xuZGVmaW5pdGlvbnMgYXJlIGFsc28gc3ludGFjdGljYWxseSBjb21wb3VuZCBzdGF0ZW1lbnRzLlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgXCdjbGF1c2VzLlwnICBBIGNsYXVzZVxuY29uc2lzdHMgb2YgYSBoZWFkZXIgYW5kIGEgXCdzdWl0ZS5cJyAgVGhlIGNsYXVzZSBoZWFkZXJzIG9mIGFcbnBhcnRpY3VsYXIgY29tcG91bmQgc3RhdGVtZW50IGFyZSBhbGwgYXQgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwuXG5FYWNoIGNsYXVzZSBoZWFkZXIgYmVnaW5zIHdpdGggYSB1bmlxdWVseSBpZGVudGlmeWluZyBrZXl3b3JkIGFuZCBlbmRzXG53aXRoIGEgY29sb24uICBBIHN1aXRlIGlzIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cyBjb250cm9sbGVkIGJ5IGFcbmNsYXVzZS4gIEEgc3VpdGUgY2FuIGJlIG9uZSBvciBtb3JlIHNlbWljb2xvbi1zZXBhcmF0ZWQgc2ltcGxlXG5zdGF0ZW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGhlYWRlciwgZm9sbG93aW5nIHRoZSBoZWFkZXJcJ3NcbmNvbG9uLCBvciBpdCBjYW4gYmUgb25lIG9yIG1vcmUgaW5kZW50ZWQgc3RhdGVtZW50cyBvbiBzdWJzZXF1ZW50XG5saW5lcy4gIE9ubHkgdGhlIGxhdHRlciBmb3JtIG9mIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZFxuc3RhdGVtZW50czsgdGhlIGZvbGxvd2luZyBpcyBpbGxlZ2FsLCBtb3N0bHkgYmVjYXVzZSBpdCB3b3VsZG5cJ3QgYmVcbmNsZWFyIHRvIHdoaWNoIGBgaWZgYCBjbGF1c2UgYSBmb2xsb3dpbmcgYGBlbHNlYGAgY2xhdXNlIHdvdWxkIGJlbG9uZzpcblxuICAgaWYgdGVzdDE6IGlmIHRlc3QyOiBwcmludCB4XG5cbkFsc28gbm90ZSB0aGF0IHRoZSBzZW1pY29sb24gYmluZHMgdGlnaHRlciB0aGFuIHRoZSBjb2xvbiBpbiB0aGlzXG5jb250ZXh0LCBzbyB0aGF0IGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgZWl0aGVyIGFsbCBvciBub25lIG9mIHRoZVxuYGBwcmludGBgIHN0YXRlbWVudHMgYXJlIGV4ZWN1dGVkOlxuXG4gICBpZiB4IDwgeSA8IHo6IHByaW50IHg7IHByaW50IHk7IHByaW50IHpcblxuU3VtbWFyaXppbmc6XG5cbiAgIGNvbXBvdW5kX3N0bXQgOjo9IGlmX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2hpbGVfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmb3Jfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB0cnlfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aXRoX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBjbGFzc2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBkZWNvcmF0ZWRcbiAgIHN1aXRlICAgICAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgTkVXTElORSBJTkRFTlQgc3RhdGVtZW50KyBERURFTlRcbiAgIHN0YXRlbWVudCAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgY29tcG91bmRfc3RtdFxuICAgc3RtdF9saXN0ICAgICA6Oj0gc2ltcGxlX3N0bXQgKCI7IiBzaW1wbGVfc3RtdCkqIFsiOyJdXG5cbk5vdGUgdGhhdCBzdGF0ZW1lbnRzIGFsd2F5cyBlbmQgaW4gYSBgYE5FV0xJTkVgYCBwb3NzaWJseSBmb2xsb3dlZCBieVxuYSBgYERFREVOVGBgLiBBbHNvIG5vdGUgdGhhdCBvcHRpb25hbCBjb250aW51YXRpb24gY2xhdXNlcyBhbHdheXNcbmJlZ2luIHdpdGggYSBrZXl3b3JkIHRoYXQgY2Fubm90IHN0YXJ0IGEgc3RhdGVtZW50LCB0aHVzIHRoZXJlIGFyZSBub1xuYW1iaWd1aXRpZXMgKHRoZSBcJ2RhbmdsaW5nIGBgZWxzZWBgXCcgcHJvYmxlbSBpcyBzb2x2ZWQgaW4gUHl0aG9uIGJ5XG5yZXF1aXJpbmcgbmVzdGVkIGBgaWZgYCBzdGF0ZW1lbnRzIHRvIGJlIGluZGVudGVkKS5cblxuVGhlIGZvcm1hdHRpbmcgb2YgdGhlIGdyYW1tYXIgcnVsZXMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucyBwbGFjZXNcbmVhY2ggY2xhdXNlIG9uIGEgc2VwYXJhdGUgbGluZSBmb3IgY2xhcml0eS5cblxuXG5UaGUgYGBpZmBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuXG5cblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXNcbmV4ZWN1dGVkIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5nb2VzIGJhY2sgdG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cblxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGFcbnNlcXVlbmNlIChzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuYGBleHByZXNzaW9uX2xpc3RgYC4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXMgZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmVcbmV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgZW1wdHkpLCB0aGUgc3VpdGVcbmluIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlIGBgZWxzZWBgIGNsYXVzZSBpZiB0aGVyZSB3YXNcbm5vIG5leHQgaXRlbS5cblxuVGhlIHN1aXRlIG1heSBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlKHMpIGluIHRoZSB0YXJnZXQgbGlzdDsgdGhpcyBkb2VzXG5ub3QgYWZmZWN0IHRoZSBuZXh0IGl0ZW0gYXNzaWduZWQgdG8gaXQuXG5cblRoZSB0YXJnZXQgbGlzdCBpcyBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLCBidXQgaWYgdGhlXG5zZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbCBieSB0aGVcbmxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGByYW5nZSgpYGAgcmV0dXJucyBhIHNlcXVlbmNlIG9mXG5pbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzIGBgZm9yIGkgOj0gYSB0byBiXG5kb2BgOyBlLmcuLCBgYHJhbmdlKDMpYGAgcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLCAyXWBgLlxuXG5Ob3RlOiBUaGVyZSBpcyBhIHN1YnRsZXR5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBsb29wXG4gICh0aGlzIGNhbiBvbmx5IG9jY3VyIGZvciBtdXRhYmxlIHNlcXVlbmNlcywgaS5lLiBsaXN0cykuIEFuIGludGVybmFsXG4gIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LCBhbmQgdGhpc1xuICBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhcyByZWFjaGVkIHRoZVxuICBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlXG4gIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGUgc2VxdWVuY2UsXG4gIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZiB0aGVcbiAgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuXG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vciBjbGVhbnVwIGNvZGVcbmZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHM6XG5cbiAgIHRyeV9zdG10ICA6Oj0gdHJ5MV9zdG10IHwgdHJ5Ml9zdG10XG4gICB0cnkxX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAoImV4Y2VwdCIgW2V4cHJlc3Npb24gWygiYXMiIHwgIiwiKSB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEluIHByZXZpb3VzIHZlcnNpb25zIG9mIFB5dGhvbixcbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgZGlkIG5vdCB3b3JrLiBgYHRyeWBgLi4uYGBleGNlcHRgYFxuaGFkIHRvIGJlIG5lc3RlZCBpbiBgYHRyeWBgLi4uYGBmaW5hbGx5YGAuXG5cblRoZSBgYGV4Y2VwdGBgIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlblxubm8gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIHN1aXRlLCBhIHNlYXJjaCBmb3JcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0XG5jbGF1c2VzIGluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW5cbmV4cHJlc3Npb24tbGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXNcbmFueSBleGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXRcbmV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlXG5yZXN1bHRpbmcgb2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXNcbmNvbXBhdGlibGUgd2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGVcbmV4Y2VwdGlvbiBvYmplY3QsIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGVcbmV4Y2VwdGlvbiwgb3IsIGluIHRoZSAoZGVwcmVjYXRlZCkgY2FzZSBvZiBzdHJpbmcgZXhjZXB0aW9ucywgaXMgdGhlXG5yYWlzZWQgc3RyaW5nIGl0c2VsZiAobm90ZSB0aGF0IHRoZSBvYmplY3QgaWRlbnRpdGllcyBtdXN0IG1hdGNoLCBpLmUuXG5pdCBtdXN0IGJlIHRoZSBzYW1lIHN0cmluZyBvYmplY3QsIG5vdCBqdXN0IGEgc3RyaW5nIHdpdGggdGhlIHNhbWVcbnZhbHVlKS5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSBgYHRyeWBgIHN0YXRlbWVudFxucmFpc2VkIHRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBhbmQgdGhlIGV4Y2VwdFxuY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdCBjbGF1c2VzIG11c3QgaGF2ZSBhblxuZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzIHJlYWNoZWQsIGV4ZWN1dGlvblxuY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC4gIChUaGlzIG1lYW5zIHRoYXRcbmlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbiwgYW5kIHRoZSBleGNlcHRpb25cbm9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlIG91dGVyIGhhbmRsZXIgd2lsbFxubm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIGFzc2lnbmVkIHRvIHRocmVlIHZhcmlhYmxlcyBpbiB0aGUgYGBzeXNgYCBtb2R1bGU6XG5gYHN5cy5leGNfdHlwZWBgIHJlY2VpdmVzIHRoZSBvYmplY3QgaWRlbnRpZnlpbmcgdGhlIGV4Y2VwdGlvbjtcbmBgc3lzLmV4Y192YWx1ZWBgIHJlY2VpdmVzIHRoZSBleGNlcHRpb25cJ3MgcGFyYW1ldGVyO1xuYGBzeXMuZXhjX3RyYWNlYmFja2BgIHJlY2VpdmVzIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZVxuc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmVcbnRoZSBleGNlcHRpb24gb2NjdXJyZWQuIFRoZXNlIGRldGFpbHMgYXJlIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlXG5gYHN5cy5leGNfaW5mbygpYGAgZnVuY3Rpb24sIHdoaWNoIHJldHVybnMgYSB0dXBsZSBgYChleGNfdHlwZSxcbmV4Y192YWx1ZSwgZXhjX3RyYWNlYmFjaylgYC4gIFVzZSBvZiB0aGUgY29ycmVzcG9uZGluZyB2YXJpYWJsZXMgaXNcbmRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhpcyBmdW5jdGlvbiwgc2luY2UgdGhlaXIgdXNlIGlzIHVuc2FmZSBpbiBhXG50aHJlYWRlZCBwcm9ncmFtLiAgQXMgb2YgUHl0aG9uIDEuNSwgdGhlIHZhcmlhYmxlcyBhcmUgcmVzdG9yZWQgdG9cbnRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb25cbnRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCBgYGVsc2VgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlIGBgdHJ5YGAgY2xhdXNlLiBbMl0gRXhjZXB0aW9ucyBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlXG5hcmUgbm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyBgYGV4Y2VwdGBgIGNsYXVzZXMuXG5cbklmIGBgZmluYWxseWBgIGlzIHByZXNlbnQsIGl0IHNwZWNpZmllcyBhIFwnY2xlYW51cFwnIGhhbmRsZXIuICBUaGVcbmBgdHJ5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55IGBgZXhjZXB0YGAgYW5kIGBgZWxzZWBgXG5jbGF1c2VzLiAgSWYgYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBhbnkgb2YgdGhlIGNsYXVzZXMgYW5kIGlzIG5vdFxuaGFuZGxlZCwgdGhlIGV4Y2VwdGlvbiBpcyB0ZW1wb3JhcmlseSBzYXZlZC4gVGhlIGBgZmluYWxseWBgIGNsYXVzZSBpc1xuZXhlY3V0ZWQuICBJZiB0aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiwgaXQgaXMgcmUtcmFpc2VkIGF0IHRoZSBlbmRcbm9mIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgcmFpc2VzIGFub3RoZXJcbmV4Y2VwdGlvbiBvciBleGVjdXRlcyBhIGBgcmV0dXJuYGAgb3IgYGBicmVha2BgIHN0YXRlbWVudCwgdGhlIHNhdmVkXG5leGNlcHRpb24gaXMgbG9zdC4gIFRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGVcbnByb2dyYW0gZHVyaW5nIGV4ZWN1dGlvbiBvZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5XaGVuIGEgYGByZXR1cm5gYCwgYGBicmVha2BgIG9yIGBgY29udGludWVgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgaW5cbnRoZSBgYHRyeWBgIHN1aXRlIG9mIGEgYGB0cnlgYC4uLmBgZmluYWxseWBgIHN0YXRlbWVudCwgdGhlXG5gYGZpbmFsbHlgYCBjbGF1c2UgaXMgYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgaXMgaWxsZWdhbCBpbiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAoVGhlIHJlYXNvbiBpcyBhXG5wcm9ibGVtIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gLS0tIHRoaXMgcmVzdHJpY3Rpb24gbWF5IGJlXG5saWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIGBgcmFpc2VgYCBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PT1cblxuTmV3IGluIHZlcnNpb24gMi41LlxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uXG5gYHRyeWBgLi4uYGBleGNlcHRgYC4uLmBgZmluYWxseWBgIHVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZFxuZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XSAiOiIgc3VpdGVcblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IHByb2NlZWRzIGFzIGZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZW50ZXJfXygpYGAgbWV0aG9kIGlzIGludm9rZWQuXG5cbjMuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tIGBgX19lbnRlcl9fKClgYCBpcyBhc3NpZ25lZCB0byBpdC5cblxuICAgTm90ZTogVGhlIGBgd2l0aGBgIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlIGBgX19lbnRlcl9fKClgYFxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuIGBgX19leGl0X18oKWBgIHdpbGwgYWx3YXlzXG4gICAgIGJlIGNhbGxlZC4gVGh1cywgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXNzaWdubWVudCB0byB0aGVcbiAgICAgdGFyZ2V0IGxpc3QsIGl0IHdpbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBhbiBlcnJvciBvY2N1cnJpbmdcbiAgICAgd2l0aGluIHRoZSBzdWl0ZSB3b3VsZCBiZS4gU2VlIHN0ZXAgNSBiZWxvdy5cblxuNC4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLlxuXG41LiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLiBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGBgX19leGl0X18oKWBgLiBPdGhlcndpc2UsXG4gICB0aHJlZSBgYE5vbmVgYCBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgYGBfX2V4aXRfXygpYGAgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgcmVyYWlzZWQuIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXNcbiAgIHN1cHByZXNzZWQsIGFuZCBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmdcbiAgIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gZXhjZXB0aW9uLCB0aGVcbiAgIHJldHVybiB2YWx1ZSBmcm9tIGBgX19leGl0X18oKWBgIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbk5vdGU6IEluIFB5dGhvbiAyLjUsIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgb25seSBhbGxvd2VkIHdoZW4gdGhlXG4gIGBgd2l0aF9zdGF0ZW1lbnRgYCBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQuICBJdCBpcyBhbHdheXMgZW5hYmxlZFxuICBpbiBQeXRob24gMi42LlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT09PT1cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBkZWNvcmF0ZWQgICAgICA6Oj0gZGVjb3JhdG9ycyAoY2xhc3NkZWYgfCBmdW5jZGVmKVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBmdW5jZGVmICAgICAgICA6Oj0gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiICI6IiBzdWl0ZVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAgIioiIGlkZW50aWZpZXIgWywgIioqIiBpZGVudGlmaWVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBzdWJsaXN0ICAgICAgICA6Oj0gcGFyYW1ldGVyICgiLCIgcGFyYW1ldGVyKSogWyIsIl1cbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIHwgIigiIHN1Ymxpc3QgIikiXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZTpcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvOlxuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSB0b3AtbGV2ZWwgcGFyYW1ldGVycyBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqIGBgPWBgXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tIHRoaXMgaXMgYSBzeW50YWN0aWNcbnJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uXG5pcyBleGVjdXRlZC4qKiAgVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuXG50aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhhdCBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzXG51c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhXG5kZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6XG5pZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhXG5saXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBub3RcbndoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgIGlzIHRvIHVzZSBgYE5vbmVgYCBhcyB0aGVcbmRlZmF1bHQsIGFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iYGAqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZ1xuYW55IGV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWZcbnRoZSBmb3JtICJgYCoqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhIGZvcm1zLFxuZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGEgZm9ybSBpcyBtZXJlbHkgYVxuc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjsgYSBmdW5jdGlvbiBkZWZpbmVkIGluXG5hICJgYGRlZmBgIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3IgYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lXG5qdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhIGZvcm0uICBUaGUgImBgZGVmYGAiIGZvcm0gaXNcbmFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXQgYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGVcbnN0YXRlbWVudHMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgImBgZGVmYGAiXG5mb3JtIGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsIGZ1bmN0aW9uXG50aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZCBpbiB0aGVcbm5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuXG5DbGFzcyBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT1cblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbZXhwcmVzc2lvbl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0IGZpcnN0IGV2YWx1YXRlcyB0aGVcbmluaGVyaXRhbmNlIGxpc3QsIGlmIHByZXNlbnQuICBFYWNoIGl0ZW0gaW4gdGhlIGluaGVyaXRhbmNlIGxpc3RcbnNob3VsZCBldmFsdWF0ZSB0byBhIGNsYXNzIG9iamVjdCBvciBjbGFzcyB0eXBlIHdoaWNoIGFsbG93c1xuc3ViY2xhc3NpbmcuICBUaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb25cbmZyYW1lIChzZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiksIHVzaW5nIGEgbmV3bHkgY3JlYXRlZCBsb2NhbFxubmFtZXNwYWNlIGFuZCB0aGUgb3JpZ2luYWwgZ2xvYmFsIG5hbWVzcGFjZS4gKFVzdWFsbHksIHRoZSBzdWl0ZVxuY29udGFpbnMgb25seSBmdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlc1xuZXhlY3V0aW9uLCBpdHMgZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpc1xuc2F2ZWQuIFs0XSBBIGNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3RcbmZvciB0aGUgYmFzZSBjbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlXG5kaWN0aW9uYXJ5LiAgVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlXG5vcmlnaW5hbCBsb2NhbCBuYW1lc3BhY2UuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgdmFyaWFibGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgYWxsIGluc3RhbmNlcy4gIFRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzLCB0aGV5IGNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCBgYHNlbGYubmFtZSA9IHZhbHVlYGAuXG5Cb3RoIGNsYXNzIGFuZCBpbnN0YW5jZSB2YXJpYWJsZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb25cbiJgYHNlbGYubmFtZWBgIiwgYW5kIGFuIGluc3RhbmNlIHZhcmlhYmxlIGhpZGVzIGEgY2xhc3MgdmFyaWFibGUgd2l0aFxudGhlIHNhbWUgbmFtZSB3aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiBDbGFzcyB2YXJpYWJsZXMgY2FuIGJlIHVzZWRcbmFzIGRlZmF1bHRzIGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlcyB0aGVyZSBjYW5cbmxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiAgRm9yICpuZXctc3R5bGUgY2xhc3MqZXMsIGRlc2NyaXB0b3JzIGNhblxuYmUgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2UgdmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uXG5kZXRhaWxzLlxuXG5DbGFzcyBkZWZpbml0aW9ucywgbGlrZSBmdW5jdGlvbiBkZWZpbml0aW9ucywgbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yXG5tb3JlICpkZWNvcmF0b3IqIGV4cHJlc3Npb25zLiAgVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3JcbmV4cHJlc3Npb25zIGFyZSB0aGUgc2FtZSBhcyBmb3IgZnVuY3Rpb25zLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Ncbm9iamVjdCwgd2hpY2ggaXMgdGhlbiBib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGUgZXhjZXB0aW9uIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGludm9jYXRpb24gc3RhY2sgb25seSBpZiB0aGVyZVxuICAgIGlzIG5vIGBgZmluYWxseWBgIGNsYXVzZSB0aGF0IG5lZ2F0ZXMgdGhlIGV4Y2VwdGlvbi5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhblxuICAgIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgYGByZXR1cm5gYCwgYGBjb250aW51ZWBgLCBvclxuICAgIGBgYnJlYWtgYCBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBmdW5jdGlvblxuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgYGBfX2RvY19fYGAgYXR0cmlidXRlIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgZnVuY3Rpb25cJ3MgKmRvY3N0cmluZyouXG5cbls0XSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBjbGFzc1xuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgbmFtZXNwYWNlXCdzIGBgX19kb2NfX2BgIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCisgJ2NvbXBvdW5kJzogdSdcbkNvbXBvdW5kIHN0YXRlbWVudHNcbioqKioqKioqKioqKioqKioqKipcblxuQ29tcG91bmQgc3RhdGVtZW50cyBjb250YWluIChncm91cHMgb2YpIG90aGVyIHN0YXRlbWVudHM7IHRoZXkgYWZmZWN0XG5vciBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhvc2Ugb3RoZXIgc3RhdGVtZW50cyBpbiBzb21lIHdheS4gIEluXG5nZW5lcmFsLCBjb21wb3VuZCBzdGF0ZW1lbnRzIHNwYW4gbXVsdGlwbGUgbGluZXMsIGFsdGhvdWdoIGluIHNpbXBsZVxuaW5jYXJuYXRpb25zIGEgd2hvbGUgY29tcG91bmQgc3RhdGVtZW50IG1heSBiZSBjb250YWluZWQgaW4gb25lIGxpbmUuXG5cblRoZSBgYGlmYGAsIGBgd2hpbGVgYCBhbmQgYGBmb3JgYCBzdGF0ZW1lbnRzIGltcGxlbWVudCB0cmFkaXRpb25hbFxuY29udHJvbCBmbG93IGNvbnN0cnVjdHMuICBgYHRyeWBgIHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yXG5jbGVhbnVwIGNvZGUgZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cy4gIEZ1bmN0aW9uIGFuZCBjbGFzc1xuZGVmaW5pdGlvbnMgYXJlIGFsc28gc3ludGFjdGljYWxseSBjb21wb3VuZCBzdGF0ZW1lbnRzLlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgXCdjbGF1c2VzLlwnICBBIGNsYXVzZVxuY29uc2lzdHMgb2YgYSBoZWFkZXIgYW5kIGEgXCdzdWl0ZS5cJyAgVGhlIGNsYXVzZSBoZWFkZXJzIG9mIGFcbnBhcnRpY3VsYXIgY29tcG91bmQgc3RhdGVtZW50IGFyZSBhbGwgYXQgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwuXG5FYWNoIGNsYXVzZSBoZWFkZXIgYmVnaW5zIHdpdGggYSB1bmlxdWVseSBpZGVudGlmeWluZyBrZXl3b3JkIGFuZCBlbmRzXG53aXRoIGEgY29sb24uICBBIHN1aXRlIGlzIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cyBjb250cm9sbGVkIGJ5IGFcbmNsYXVzZS4gIEEgc3VpdGUgY2FuIGJlIG9uZSBvciBtb3JlIHNlbWljb2xvbi1zZXBhcmF0ZWQgc2ltcGxlXG5zdGF0ZW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGhlYWRlciwgZm9sbG93aW5nIHRoZSBoZWFkZXJcJ3NcbmNvbG9uLCBvciBpdCBjYW4gYmUgb25lIG9yIG1vcmUgaW5kZW50ZWQgc3RhdGVtZW50cyBvbiBzdWJzZXF1ZW50XG5saW5lcy4gIE9ubHkgdGhlIGxhdHRlciBmb3JtIG9mIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZFxuc3RhdGVtZW50czsgdGhlIGZvbGxvd2luZyBpcyBpbGxlZ2FsLCBtb3N0bHkgYmVjYXVzZSBpdCB3b3VsZG5cJ3QgYmVcbmNsZWFyIHRvIHdoaWNoIGBgaWZgYCBjbGF1c2UgYSBmb2xsb3dpbmcgYGBlbHNlYGAgY2xhdXNlIHdvdWxkIGJlbG9uZzpcblxuICAgaWYgdGVzdDE6IGlmIHRlc3QyOiBwcmludCB4XG5cbkFsc28gbm90ZSB0aGF0IHRoZSBzZW1pY29sb24gYmluZHMgdGlnaHRlciB0aGFuIHRoZSBjb2xvbiBpbiB0aGlzXG5jb250ZXh0LCBzbyB0aGF0IGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgZWl0aGVyIGFsbCBvciBub25lIG9mIHRoZVxuYGBwcmludGBgIHN0YXRlbWVudHMgYXJlIGV4ZWN1dGVkOlxuXG4gICBpZiB4IDwgeSA8IHo6IHByaW50IHg7IHByaW50IHk7IHByaW50IHpcblxuU3VtbWFyaXppbmc6XG5cbiAgIGNvbXBvdW5kX3N0bXQgOjo9IGlmX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2hpbGVfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmb3Jfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB0cnlfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aXRoX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBjbGFzc2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBkZWNvcmF0ZWRcbiAgIHN1aXRlICAgICAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgTkVXTElORSBJTkRFTlQgc3RhdGVtZW50KyBERURFTlRcbiAgIHN0YXRlbWVudCAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgY29tcG91bmRfc3RtdFxuICAgc3RtdF9saXN0ICAgICA6Oj0gc2ltcGxlX3N0bXQgKCI7IiBzaW1wbGVfc3RtdCkqIFsiOyJdXG5cbk5vdGUgdGhhdCBzdGF0ZW1lbnRzIGFsd2F5cyBlbmQgaW4gYSBgYE5FV0xJTkVgYCBwb3NzaWJseSBmb2xsb3dlZCBieVxuYSBgYERFREVOVGBgLiBBbHNvIG5vdGUgdGhhdCBvcHRpb25hbCBjb250aW51YXRpb24gY2xhdXNlcyBhbHdheXNcbmJlZ2luIHdpdGggYSBrZXl3b3JkIHRoYXQgY2Fubm90IHN0YXJ0IGEgc3RhdGVtZW50LCB0aHVzIHRoZXJlIGFyZSBub1xuYW1iaWd1aXRpZXMgKHRoZSBcJ2RhbmdsaW5nIGBgZWxzZWBgXCcgcHJvYmxlbSBpcyBzb2x2ZWQgaW4gUHl0aG9uIGJ5XG5yZXF1aXJpbmcgbmVzdGVkIGBgaWZgYCBzdGF0ZW1lbnRzIHRvIGJlIGluZGVudGVkKS5cblxuVGhlIGZvcm1hdHRpbmcgb2YgdGhlIGdyYW1tYXIgcnVsZXMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucyBwbGFjZXNcbmVhY2ggY2xhdXNlIG9uIGEgc2VwYXJhdGUgbGluZSBmb3IgY2xhcml0eS5cblxuXG5UaGUgYGBpZmBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuXG5cblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXNcbmV4ZWN1dGVkIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5nb2VzIGJhY2sgdG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cblxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGFcbnNlcXVlbmNlIChzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuYGBleHByZXNzaW9uX2xpc3RgYC4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXMgZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmVcbmV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgZW1wdHkpLCB0aGUgc3VpdGVcbmluIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlIGBgZWxzZWBgIGNsYXVzZSBpZiB0aGVyZSB3YXNcbm5vIG5leHQgaXRlbS5cblxuVGhlIHN1aXRlIG1heSBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlKHMpIGluIHRoZSB0YXJnZXQgbGlzdDsgdGhpcyBkb2VzXG5ub3QgYWZmZWN0IHRoZSBuZXh0IGl0ZW0gYXNzaWduZWQgdG8gaXQuXG5cblRoZSB0YXJnZXQgbGlzdCBpcyBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLCBidXQgaWYgdGhlXG5zZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbCBieSB0aGVcbmxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGByYW5nZSgpYGAgcmV0dXJucyBhIHNlcXVlbmNlIG9mXG5pbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzIGBgZm9yIGkgOj0gYSB0byBiXG5kb2BgOyBlLmcuLCBgYHJhbmdlKDMpYGAgcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLCAyXWBgLlxuXG5Ob3RlOiBUaGVyZSBpcyBhIHN1YnRsZXR5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBsb29wXG4gICh0aGlzIGNhbiBvbmx5IG9jY3VyIGZvciBtdXRhYmxlIHNlcXVlbmNlcywgaS5lLiBsaXN0cykuIEFuIGludGVybmFsXG4gIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LCBhbmQgdGhpc1xuICBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhcyByZWFjaGVkIHRoZVxuICBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlXG4gIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGUgc2VxdWVuY2UsXG4gIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZiB0aGVcbiAgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuXG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vciBjbGVhbnVwIGNvZGVcbmZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHM6XG5cbiAgIHRyeV9zdG10ICA6Oj0gdHJ5MV9zdG10IHwgdHJ5Ml9zdG10XG4gICB0cnkxX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAoImV4Y2VwdCIgW2V4cHJlc3Npb24gWygiYXMiIHwgIiwiKSB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEluIHByZXZpb3VzIHZlcnNpb25zIG9mIFB5dGhvbixcbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgZGlkIG5vdCB3b3JrLiBgYHRyeWBgLi4uYGBleGNlcHRgYFxuaGFkIHRvIGJlIG5lc3RlZCBpbiBgYHRyeWBgLi4uYGBmaW5hbGx5YGAuXG5cblRoZSBgYGV4Y2VwdGBgIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlblxubm8gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIHN1aXRlLCBhIHNlYXJjaCBmb3JcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0XG5jbGF1c2VzIGluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW5cbmV4cHJlc3Npb24tbGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXNcbmFueSBleGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXRcbmV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlXG5yZXN1bHRpbmcgb2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXNcbmNvbXBhdGlibGUgd2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGVcbmV4Y2VwdGlvbiBvYmplY3QsIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGVcbmV4Y2VwdGlvbiwgb3IsIGluIHRoZSAoZGVwcmVjYXRlZCkgY2FzZSBvZiBzdHJpbmcgZXhjZXB0aW9ucywgaXMgdGhlXG5yYWlzZWQgc3RyaW5nIGl0c2VsZiAobm90ZSB0aGF0IHRoZSBvYmplY3QgaWRlbnRpdGllcyBtdXN0IG1hdGNoLCBpLmUuXG5pdCBtdXN0IGJlIHRoZSBzYW1lIHN0cmluZyBvYmplY3QsIG5vdCBqdXN0IGEgc3RyaW5nIHdpdGggdGhlIHNhbWVcbnZhbHVlKS5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSBgYHRyeWBgIHN0YXRlbWVudFxucmFpc2VkIHRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBhbmQgdGhlIGV4Y2VwdFxuY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdCBjbGF1c2VzIG11c3QgaGF2ZSBhblxuZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzIHJlYWNoZWQsIGV4ZWN1dGlvblxuY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC4gIChUaGlzIG1lYW5zIHRoYXRcbmlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbiwgYW5kIHRoZSBleGNlcHRpb25cbm9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlIG91dGVyIGhhbmRsZXIgd2lsbFxubm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIGFzc2lnbmVkIHRvIHRocmVlIHZhcmlhYmxlcyBpbiB0aGUgYGBzeXNgYCBtb2R1bGU6XG5gYHN5cy5leGNfdHlwZWBgIHJlY2VpdmVzIHRoZSBvYmplY3QgaWRlbnRpZnlpbmcgdGhlIGV4Y2VwdGlvbjtcbmBgc3lzLmV4Y192YWx1ZWBgIHJlY2VpdmVzIHRoZSBleGNlcHRpb25cJ3MgcGFyYW1ldGVyO1xuYGBzeXMuZXhjX3RyYWNlYmFja2BgIHJlY2VpdmVzIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZVxuc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmVcbnRoZSBleGNlcHRpb24gb2NjdXJyZWQuIFRoZXNlIGRldGFpbHMgYXJlIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlXG5gYHN5cy5leGNfaW5mbygpYGAgZnVuY3Rpb24sIHdoaWNoIHJldHVybnMgYSB0dXBsZSBgYChleGNfdHlwZSxcbmV4Y192YWx1ZSwgZXhjX3RyYWNlYmFjaylgYC4gIFVzZSBvZiB0aGUgY29ycmVzcG9uZGluZyB2YXJpYWJsZXMgaXNcbmRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhpcyBmdW5jdGlvbiwgc2luY2UgdGhlaXIgdXNlIGlzIHVuc2FmZSBpbiBhXG50aHJlYWRlZCBwcm9ncmFtLiAgQXMgb2YgUHl0aG9uIDEuNSwgdGhlIHZhcmlhYmxlcyBhcmUgcmVzdG9yZWQgdG9cbnRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb25cbnRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCBgYGVsc2VgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlIGBgdHJ5YGAgY2xhdXNlLiBbMl0gRXhjZXB0aW9ucyBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlXG5hcmUgbm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyBgYGV4Y2VwdGBgIGNsYXVzZXMuXG5cbklmIGBgZmluYWxseWBgIGlzIHByZXNlbnQsIGl0IHNwZWNpZmllcyBhIFwnY2xlYW51cFwnIGhhbmRsZXIuICBUaGVcbmBgdHJ5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55IGBgZXhjZXB0YGAgYW5kIGBgZWxzZWBgXG5jbGF1c2VzLiAgSWYgYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBhbnkgb2YgdGhlIGNsYXVzZXMgYW5kIGlzIG5vdFxuaGFuZGxlZCwgdGhlIGV4Y2VwdGlvbiBpcyB0ZW1wb3JhcmlseSBzYXZlZC4gVGhlIGBgZmluYWxseWBgIGNsYXVzZSBpc1xuZXhlY3V0ZWQuICBJZiB0aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiwgaXQgaXMgcmUtcmFpc2VkIGF0IHRoZSBlbmRcbm9mIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgcmFpc2VzIGFub3RoZXJcbmV4Y2VwdGlvbiBvciBleGVjdXRlcyBhIGBgcmV0dXJuYGAgb3IgYGBicmVha2BgIHN0YXRlbWVudCwgdGhlIHNhdmVkXG5leGNlcHRpb24gaXMgbG9zdC4gIFRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGVcbnByb2dyYW0gZHVyaW5nIGV4ZWN1dGlvbiBvZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5XaGVuIGEgYGByZXR1cm5gYCwgYGBicmVha2BgIG9yIGBgY29udGludWVgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgaW5cbnRoZSBgYHRyeWBgIHN1aXRlIG9mIGEgYGB0cnlgYC4uLmBgZmluYWxseWBgIHN0YXRlbWVudCwgdGhlXG5gYGZpbmFsbHlgYCBjbGF1c2UgaXMgYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgaXMgaWxsZWdhbCBpbiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAoVGhlIHJlYXNvbiBpcyBhXG5wcm9ibGVtIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gLS0tIHRoaXMgcmVzdHJpY3Rpb24gbWF5IGJlXG5saWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIGBgcmFpc2VgYCBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PT1cblxuTmV3IGluIHZlcnNpb24gMi41LlxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uXG5gYHRyeWBgLi4uYGBleGNlcHRgYC4uLmBgZmluYWxseWBgIHVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZFxuZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIGEgY29udGV4dCBtYW5hZ2VyLlxuXG4yLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19lbnRlcl9fKClgYCBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQsIHRoZSByZXR1cm5cbiAgIHZhbHVlIGZyb20gYGBfX2VudGVyX18oKWBgIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgYGB3aXRoYGAgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgYGBfX2VudGVyX18oKWBgXG4gICAgIG1ldGhvZCByZXR1cm5zIHdpdGhvdXQgYW4gZXJyb3IsIHRoZW4gYGBfX2V4aXRfXygpYGAgd2lsbCBhbHdheXNcbiAgICAgYmUgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgbWV0aG9kIGlzIGludm9rZWQuIElmIGFuXG4gICBleGNlcHRpb24gY2F1c2VkIHRoZSBzdWl0ZSB0byBiZSBleGl0ZWQsIGl0cyB0eXBlLCB2YWx1ZSwgYW5kXG4gICB0cmFjZWJhY2sgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYGBfX2V4aXRfXygpYGAuIE90aGVyd2lzZSxcbiAgIHRocmVlIGBgTm9uZWBgIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSBgYF9fZXhpdF9fKClgYCBtZXRob2Qgd2FzIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICByZXJhaXNlZC4gSWYgdGhlIHJldHVybiB2YWx1ZSB3YXMgdHJ1ZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgc3VwcHJlc3NlZCwgYW5kIGV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aCB0aGUgc3RhdGVtZW50IGZvbGxvd2luZ1xuICAgdGhlIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gYGBfX2V4aXRfXygpYGAgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlIGBgd2l0aGBgIHN0YXRlbWVudHMgd2VyZSBuZXN0ZWQ6XG5cbiAgIHdpdGggQSgpIGFzIGEsIEIoKSBhcyBiOlxuICAgICAgIHN1aXRlXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgd2l0aCBBKCkgYXMgYTpcbiAgICAgICB3aXRoIEIoKSBhcyBiOlxuICAgICAgICAgICBzdWl0ZVxuXG5Ob3RlOiBJbiBQeXRob24gMi41LCB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIG9ubHkgYWxsb3dlZCB3aGVuIHRoZVxuICBgYHdpdGhfc3RhdGVtZW50YGAgZmVhdHVyZSBoYXMgYmVlbiBlbmFibGVkLiAgSXQgaXMgYWx3YXlzIGVuYWJsZWRcbiAgaW4gUHl0aG9uIDIuNi5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNzogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09PT09XG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZGVjb3JhdGVkICAgICAgOjo9IGRlY29yYXRvcnMgKGNsYXNzZGVmIHwgZnVuY2RlZilcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW2FyZ3VtZW50X2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZnVuY2RlZiAgICAgICAgOjo9ICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiAiOiIgc3VpdGVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggICIqIiBpZGVudGlmaWVyIFssICIqKiIgaWRlbnRpZmllcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgc3VibGlzdCAgICAgICAgOjo9IHBhcmFtZXRlciAoIiwiIHBhcmFtZXRlcikqIFsiLCJdXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciB8ICIoIiBzdWJsaXN0ICIpIlxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGU6XG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0bzpcblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgdG9wLWxldmVsIHBhcmFtZXRlcnMgaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLSB0aGlzIGlzIGEgc3ludGFjdGljXG5yZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlblxudGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoYXQgc2FtZSAicHJlLWNvbXB1dGVkIiB2YWx1ZSBpc1xudXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gYVxuZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhIGxpc3Qgb3IgYSBkaWN0aW9uYXJ5OlxuaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnkgYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYVxubGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC4gVGhpcyBpcyBnZW5lcmFsbHkgbm90XG53aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzICBpcyB0byB1c2UgYGBOb25lYGAgYXMgdGhlXG5kZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuImBgKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmdcbmFueSBleGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmXG50aGUgZm9ybSAiYGAqKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYSBmb3JtcyxcbmRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhIGZvcm0gaXMgbWVyZWx5IGFcbnNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247IGEgZnVuY3Rpb24gZGVmaW5lZCBpblxuYSAiYGBkZWZgYCIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yIGFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZVxuanVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYSBmb3JtLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzXG5hY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0IGFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlXG5zdGF0ZW1lbnRzLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICJgYGRlZmBgIlxuZm9ybSBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbCBmdW5jdGlvblxudGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWQgaW4gdGhlXG5uZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblxuQ2xhc3MgZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09XG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBkZWZpbmVzIGEgY2xhc3Mgb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkXG50eXBlIGhpZXJhcmNoeSopOlxuXG4gICBjbGFzc2RlZiAgICA6Oj0gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW2V4cHJlc3Npb25fbGlzdF0gIikiXG4gICBjbGFzc25hbWUgICA6Oj0gaWRlbnRpZmllclxuXG5BIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdCBmaXJzdCBldmFsdWF0ZXMgdGhlXG5pbmhlcml0YW5jZSBsaXN0LCBpZiBwcmVzZW50LiAgRWFjaCBpdGVtIGluIHRoZSBpbmhlcml0YW5jZSBsaXN0XG5zaG91bGQgZXZhbHVhdGUgdG8gYSBjbGFzcyBvYmplY3Qgb3IgY2xhc3MgdHlwZSB3aGljaCBhbGxvd3NcbnN1YmNsYXNzaW5nLiAgVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uXG5mcmFtZSAoc2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWxcbm5hbWVzcGFjZSBhbmQgdGhlIG9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGVcbmNvbnRhaW5zIG9ubHkgZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXNcbmV4ZWN1dGlvbiwgaXRzIGV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXNcbnNhdmVkLiBbNF0gQSBjbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0XG5mb3IgdGhlIGJhc2UgY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZVxuZGljdGlvbmFyeS4gIFRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIHRvIHRoaXMgY2xhc3Mgb2JqZWN0IGluIHRoZVxub3JpZ2luYWwgbG9jYWwgbmFtZXNwYWNlLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBWYXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBhcmVcbmNsYXNzIHZhcmlhYmxlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGFsbCBpbnN0YW5jZXMuICBUbyBjcmVhdGUgaW5zdGFuY2VcbnZhcmlhYmxlcywgdGhleSBjYW4gYmUgc2V0IGluIGEgbWV0aG9kIHdpdGggYGBzZWxmLm5hbWUgPSB2YWx1ZWBgLlxuQm90aCBjbGFzcyBhbmQgaW5zdGFuY2UgdmFyaWFibGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uXG4iYGBzZWxmLm5hbWVgYCIsIGFuZCBhbiBpbnN0YW5jZSB2YXJpYWJsZSBoaWRlcyBhIGNsYXNzIHZhcmlhYmxlIHdpdGhcbnRoZSBzYW1lIG5hbWUgd2hlbiBhY2Nlc3NlZCBpbiB0aGlzIHdheS4gQ2xhc3MgdmFyaWFibGVzIGNhbiBiZSB1c2VkXG5hcyBkZWZhdWx0cyBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLCBidXQgdXNpbmcgbXV0YWJsZSB2YWx1ZXMgdGhlcmUgY2FuXG5sZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cy4gIEZvciAqbmV3LXN0eWxlIGNsYXNzKmVzLCBkZXNjcmlwdG9ycyBjYW5cbmJlIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlIHZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvblxuZGV0YWlscy5cblxuQ2xhc3MgZGVmaW5pdGlvbnMsIGxpa2UgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvclxubW9yZSAqZGVjb3JhdG9yKiBleHByZXNzaW9ucy4gIFRoZSBldmFsdWF0aW9uIHJ1bGVzIGZvciB0aGUgZGVjb3JhdG9yXG5leHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIGZ1bmN0aW9ucy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzXG5vYmplY3QsIHdoaWNoIGlzIHRoZW4gYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIG9ubHkgaWYgdGhlcmVcbiAgICBpcyBubyBgYGZpbmFsbHlgYCBjbGF1c2UgdGhhdCBuZWdhdGVzIHRoZSBleGNlcHRpb24uXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhIGBgcmV0dXJuYGAsIGBgY29udGludWVgYCwgb3JcbiAgICBgYGJyZWFrYGAgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb25cbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzIGBgX19kb2NfX2BgIGF0dHJpYnV0ZSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyBgYF9fZG9jX19gYCBpdGVtIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgY2xhc3NcJ3MgKmRvY3N0cmluZyouXG4nLAogICdjb250ZXh0LW1hbmFnZXJzJzogdSdcbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuTmV3IGluIHZlcnNpb24gMi41LlxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSBgYHdpdGhgYCBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0XG5tYW5hZ2VyIGhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lXG5jb250ZXh0IGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmVcbm5vcm1hbGx5IGludm9rZWQgdXNpbmcgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb25cbipUaGUgd2l0aCBzdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXJcbm1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIGBgd2l0aGBgXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlIGBgYXNgYCBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSBgYE5vbmVgYC5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgYGBfX2V4aXRfXygpYGAgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuJywKICAnY29udGludWUnOiB1J1xuVGhlIGBgY29udGludWVgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGNvbnRpbnVlX3N0bXQgOjo9ICJjb250aW51ZSJcblxuYGBjb250aW51ZWBgIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgYGBmb3JgYCBvclxuYGB3aGlsZWBgIGxvb3AsIGJ1dCBub3QgbmVzdGVkIGluIGEgZnVuY3Rpb24gb3IgY2xhc3MgZGVmaW5pdGlvbiBvclxuYGBmaW5hbGx5YGAgY2xhdXNlIHdpdGhpbiB0aGF0IGxvb3AuICBJdCBjb250aW51ZXMgd2l0aCB0aGUgbmV4dCBjeWNsZVxub2YgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxvb3AuXG5cbldoZW4gYGBjb250aW51ZWBgIHBhc3NlcyBjb250cm9sIG91dCBvZiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggYVxuYGBmaW5hbGx5YGAgY2xhdXNlLCB0aGF0IGBgZmluYWxseWBgIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5XG5zdGFydGluZyB0aGUgbmV4dCBsb29wIGN5Y2xlLlxuJywKICAnY29udmVyc2lvbnMnOiB1J1xuQXJpdGhtZXRpYyBjb252ZXJzaW9uc1xuKioqKioqKioqKioqKioqKioqKioqKlxuXG5XaGVuIGEgZGVzY3JpcHRpb24gb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRvciBiZWxvdyB1c2VzIHRoZSBwaHJhc2VcbiJ0aGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCIgdGhlIGFyZ3VtZW50c1xuYXJlIGNvZXJjZWQgdXNpbmcgdGhlIGNvZXJjaW9uIHJ1bGVzIGxpc3RlZCBhdCAgKkNvZXJjaW9uIHJ1bGVzKi4gIElmXG5ib3RoIGFyZ3VtZW50cyBhcmUgc3RhbmRhcmQgbnVtZXJpYyB0eXBlcywgdGhlIGZvbGxvd2luZyBjb2VyY2lvbnMgYXJlXG5hcHBsaWVkOlxuXG4qIElmIGVpdGhlciBhcmd1bWVudCBpcyBhIGNvbXBsZXggbnVtYmVyLCB0aGUgb3RoZXIgaXMgY29udmVydGVkIHRvXG4gIGNvbXBsZXg7XG5cbiogb3RoZXJ3aXNlLCBpZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIHRoZSBvdGhlclxuICBpcyBjb252ZXJ0ZWQgdG8gZmxvYXRpbmcgcG9pbnQ7XG5cbiogb3RoZXJ3aXNlLCBpZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBsb25nIGludGVnZXIsIHRoZSBvdGhlciBpc1xuICBjb252ZXJ0ZWQgdG8gbG9uZyBpbnRlZ2VyO1xuXG4qIG90aGVyd2lzZSwgYm90aCBtdXN0IGJlIHBsYWluIGludGVnZXJzIGFuZCBubyBjb252ZXJzaW9uIGlzXG4gIG5lY2Vzc2FyeS5cblxuU29tZSBhZGRpdGlvbmFsIHJ1bGVzIGFwcGx5IGZvciBjZXJ0YWluIG9wZXJhdG9ycyAoZS5nLiwgYSBzdHJpbmcgbGVmdFxuYXJndW1lbnQgdG8gdGhlIFwnJVwnIG9wZXJhdG9yKS4gRXh0ZW5zaW9ucyBjYW4gZGVmaW5lIHRoZWlyIG93blxuY29lcmNpb25zLlxuJywKLSAnY3VzdG9taXphdGlvbic6IHUnXG5CYXNpYyBjdXN0b21pemF0aW9uXG4qKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICBgYF9fbmV3X18oKWBgIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mIGBgX19uZXdfXygpYGAgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5XG4gICBhbiBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIHVzaW5nXG4gICBgYHN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pYGAgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgIGBgX19pbml0X18oc2VsZlssIC4uLl0pYGAsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICBgYF9fbmV3X18oKWBgIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgIGBgX19pbml0X18oKWBgIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mXG4gICB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICBgYEJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pYGAuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludFxuICAgb24gY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgYGBUeXBlRXJyb3JgYCB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSBgYF9fZGVsX18oKWBgIG1ldGhvZCxcbiAgIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19kZWxfXygpYGAgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseVxuICAgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlXG4gICBpbnN0YW5jZS4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvclxuICAgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiBgYGRlbCB4YGAgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCBgYHguX19kZWxfXygpYGAgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBgYHhgYCBieSBvbmUsIGFuZCB0aGUgbGF0dGVyXG4gICAgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGB4YGBcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWVcbiAgICAgY29tbW9uIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuXG4gICAgIG9iamVjdCBmcm9tIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuXG4gICAgIG9iamVjdHMgKGUuZy4sIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoXG4gICAgIHBhcmVudCBhbmQgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZVxuICAgICBzdGFjayBmcmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFja1xuICAgICBzdG9yZWQgaW4gYGBzeXMuZXhjX3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yXG4gICAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuXG4gICAgIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW5cbiAgICAgYGBzeXMuZXhjX3RyYWNlYmFja2BgIG9yIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuICBDaXJjdWxhclxuICAgICByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGVcbiAgICAgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkXG4gICAgIHVwIGlmIHRoZXJlIGFyZSBubyBQeXRob24tbGV2ZWwgYGBfX2RlbF9fKClgYCBtZXRob2RzIGludm9sdmVkLlxuICAgICBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGBgZ2NgYCBtb2R1bGUgZm9yIG1vcmVcbiAgICAgaW5mb3JtYXRpb24gYWJvdXQgaG93IGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgaGFuZGxlZCBieSB0aGVcbiAgICAgY3ljbGUgZGV0ZWN0b3IsIHBhcnRpY3VsYXJseSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgXG4gICAgIHZhbHVlLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uXG4gICAgIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG8gYGBzeXMuc3RkZXJyYGAgaW5zdGVhZC5cbiAgICAgQWxzbywgd2hlbiBgYF9fZGVsX18oKWBgIGlzIGludm9rZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmdcbiAgICAgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gaXMgZG9uZSksIG90aGVyXG4gICAgIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZVxuICAgICBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duIChlLmcuIHRoZVxuICAgICBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXMgcmVhc29uLCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZCB0byBtYWludGFpblxuICAgICBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSwgUHl0aG9uXG4gICAgIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHJlcHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIGFuZCBieSBzdHJpbmdcbiAgIGNvbnZlcnNpb25zIChyZXZlcnNlIHF1b3RlcykgdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIiBzdHJpbmdcbiAgIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpcyBzaG91bGQgbG9va1xuICAgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0byByZWNyZWF0ZSBhblxuICAgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlIGVudmlyb25tZW50KS4gIElmXG4gICB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm0gYGA8Li4uc29tZSB1c2VmdWxcbiAgIGRlc2NyaXB0aW9uLi4uPmBgIHNob3VsZCBiZSByZXR1cm5lZC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgYGBfX3JlcHJfXygpYGAgYnV0IG5vdFxuICAgYGBfX3N0cl9fKClgYCwgdGhlbiBgYF9fcmVwcl9fKClgYCBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHN0cigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gYW5kIGJ5IHRoZSBgYHByaW50YGBcbiAgIHN0YXRlbWVudCB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiAgVGhpcyBkaWZmZXJzIGZyb20gYGBfX3JlcHJfXygpYGAgaW4gdGhhdCBpdCBkb2VzIG5vdCBoYXZlXG4gICB0byBiZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlXG4gICByZXByZXNlbnRhdGlvbiBtYXkgYmUgdXNlZCBpbnN0ZWFkLiBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYVxuICAgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjEuXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMsIGFuZCBhcmUgY2FsbGVkXG4gICBmb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgaW4gcHJlZmVyZW5jZSB0byBgYF9fY21wX18oKWBgIGJlbG93LiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBhbmRcbiAgIGBgeDw+eWBgIGNhbGwgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kXG4gICBgYHg+PXlgYCBjYWxscyBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgdGhlIFRvdGFsIE9yZGVyaW5nIHJlY2lwZSBpbiB0aGUgQVNQTiBjb29rYm9vay5cblxub2JqZWN0Ll9fY21wX18oc2VsZiwgb3RoZXIpXG5cbiAgIENhbGxlZCBieSBjb21wYXJpc29uIG9wZXJhdGlvbnMgaWYgcmljaCBjb21wYXJpc29uIChzZWUgYWJvdmUpIGlzXG4gICBub3QgZGVmaW5lZC4gIFNob3VsZCByZXR1cm4gYSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIGBgc2VsZiA8IG90aGVyYGAsXG4gICB6ZXJvIGlmIGBgc2VsZiA9PSBvdGhlcmBgLCBhIHBvc2l0aXZlIGludGVnZXIgaWYgYGBzZWxmID4gb3RoZXJgYC5cbiAgIElmIG5vIGBgX19jbXBfXygpYGAsIGBgX19lcV9fKClgYCBvciBgYF9fbmVfXygpYGAgb3BlcmF0aW9uIGlzXG4gICBkZWZpbmVkLCBjbGFzcyBpbnN0YW5jZXMgYXJlIGNvbXBhcmVkIGJ5IG9iamVjdCBpZGVudGl0eVxuICAgKCJhZGRyZXNzIikuICBTZWUgYWxzbyB0aGUgZGVzY3JpcHRpb24gb2YgYGBfX2hhc2hfXygpYGAgZm9yIHNvbWVcbiAgIGltcG9ydGFudCBub3RlcyBvbiBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b21cbiAgIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuIChOb3RlOiB0aGVcbiAgIHJlc3RyaWN0aW9uIHRoYXQgZXhjZXB0aW9ucyBhcmUgbm90IHByb3BhZ2F0ZWQgYnkgYGBfX2NtcF9fKClgYCBoYXNcbiAgIGJlZW4gcmVtb3ZlZCBzaW5jZSBQeXRob24gMS41Lilcblxub2JqZWN0Ll9fcmNtcF9fKHNlbGYsIG90aGVyKVxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4xOiBObyBsb25nZXIgc3VwcG9ydGVkLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYSBgYF9fY21wX18oKWBgIG9yIGBgX19lcV9fKClgYCBtZXRob2RcbiAgIGl0IHNob3VsZCBub3QgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXRcbiAgIGRlZmluZXMgYGBfX2NtcF9fKClgYCBvciBgYF9fZXFfXygpYGAgYnV0IG5vdCBgYF9faGFzaF9fKClgYCwgaXRzXG4gICBpbnN0YW5jZXMgd2lsbCBub3QgYmUgdXNhYmxlIGluIGhhc2hlZCBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3NcbiAgIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGEgYGBfX2NtcF9fKClgYCBvclxuICAgYGBfX2VxX18oKWBgIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnQgYGBfX2hhc2hfXygpYGAsIHNpbmNlXG4gICBoYXNoYWJsZSBjb2xsZWN0aW9uIGltcGxlbWVudGF0aW9ucyByZXF1aXJlIHRoYXQgYSBvYmplY3RcJ3MgaGFzaFxuICAgdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2ggdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZVxuICAgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fY21wX18oKWBgIGFuZCBgYF9faGFzaF9fKClgYCBtZXRob2RzXG4gICBieSBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCBgYHguX19oYXNoX18oKWBgIHJldHVybnMgYGBpZCh4KWBgLlxuXG4gICBDbGFzc2VzIHdoaWNoIGluaGVyaXQgYSBgYF9faGFzaF9fKClgYCBtZXRob2QgZnJvbSBhIHBhcmVudCBjbGFzc1xuICAgYnV0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiBgYF9fY21wX18oKWBgIG9yIGBgX19lcV9fKClgYCBzdWNoIHRoYXRcbiAgIHRoZSBoYXNoIHZhbHVlIHJldHVybmVkIGlzIG5vIGxvbmdlciBhcHByb3ByaWF0ZSAoZS5nLiBieSBzd2l0Y2hpbmdcbiAgIHRvIGEgdmFsdWUtYmFzZWQgY29uY2VwdCBvZiBlcXVhbGl0eSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0XG4gICBpZGVudGl0eSBiYXNlZCBlcXVhbGl0eSkgY2FuIGV4cGxpY2l0bHkgZmxhZyB0aGVtc2VsdmVzIGFzIGJlaW5nXG4gICB1bmhhc2hhYmxlIGJ5IHNldHRpbmcgYGBfX2hhc2hfXyA9IE5vbmVgYCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi5cbiAgIERvaW5nIHNvIG1lYW5zIHRoYXQgbm90IG9ubHkgd2lsbCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHJhaXNlIGFuXG4gICBhcHByb3ByaWF0ZSBgYFR5cGVFcnJvcmBgIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZWlyXG4gICBoYXNoIHZhbHVlLCBidXQgdGhleSB3aWxsIGFsc28gYmUgY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyBgYGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSlgYFxuICAgKHVubGlrZSBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGVpciBvd24gYGBfX2hhc2hfXygpYGAgdG8gZXhwbGljaXRseVxuICAgcmFpc2UgYGBUeXBlRXJyb3JgYCkuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IGBgX19oYXNoX18oKWBgIG1heSBub3cgYWxzbyByZXR1cm4gYSBsb25nXG4gICBpbnRlZ2VyIG9iamVjdDsgdGhlIDMyLWJpdCBpbnRlZ2VyIGlzIHRoZW4gZGVyaXZlZCBmcm9tIHRoZSBoYXNoIG9mXG4gICB0aGF0IG9iamVjdC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNjogYGBfX2hhc2hfX2BgIG1heSBub3cgYmUgc2V0IHRvIGBgTm9uZWBgIHRvXG4gICBleHBsaWNpdGx5IGZsYWcgaW5zdGFuY2VzIG9mIGEgY2xhc3MgYXMgdW5oYXNoYWJsZS5cblxub2JqZWN0Ll9fbm9uemVyb19fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAsIG9yIHRoZWlyIGludGVnZXJcbiAgIGVxdWl2YWxlbnRzIGBgMGBgIG9yIGBgMWBgLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3QgZGVmaW5lZCxcbiAgIGBgX19sZW5fXygpYGAgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlIG9iamVjdCBpc1xuICAgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ub256ZXJvX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlcyBhcmVcbiAgIGNvbnNpZGVyZWQgdHJ1ZS5cblxub2JqZWN0Ll9fdW5pY29kZV9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYGB1bmljb2RlKClgYCBidWlsdC1pbjsgc2hvdWxkIHJldHVybiBhIFVuaWNvZGVcbiAgIG9iamVjdC4gV2hlbiB0aGlzIG1ldGhvZCBpcyBub3QgZGVmaW5lZCwgc3RyaW5nIGNvbnZlcnNpb24gaXNcbiAgIGF0dGVtcHRlZCwgYW5kIHRoZSByZXN1bHQgb2Ygc3RyaW5nIGNvbnZlcnNpb24gaXMgY29udmVydGVkIHRvXG4gICBVbmljb2RlIHVzaW5nIHRoZSBzeXN0ZW0gZGVmYXVsdCBlbmNvZGluZy5cbicsCi0gJ2RlYnVnZ2VyJzogdSdcbmBgcGRiYGAgLS0tIFRoZSBQeXRob24gRGVidWdnZXJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIG1vZHVsZSBgYHBkYmBgIGRlZmluZXMgYW4gaW50ZXJhY3RpdmUgc291cmNlIGNvZGUgZGVidWdnZXIgZm9yXG5QeXRob24gcHJvZ3JhbXMuICBJdCBzdXBwb3J0cyBzZXR0aW5nIChjb25kaXRpb25hbCkgYnJlYWtwb2ludHMgYW5kXG5zaW5nbGUgc3RlcHBpbmcgYXQgdGhlIHNvdXJjZSBsaW5lIGxldmVsLCBpbnNwZWN0aW9uIG9mIHN0YWNrIGZyYW1lcyxcbnNvdXJjZSBjb2RlIGxpc3RpbmcsIGFuZCBldmFsdWF0aW9uIG9mIGFyYml0cmFyeSBQeXRob24gY29kZSBpbiB0aGVcbmNvbnRleHQgb2YgYW55IHN0YWNrIGZyYW1lLiAgSXQgYWxzbyBzdXBwb3J0cyBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmdcbmFuZCBjYW4gYmUgY2FsbGVkIHVuZGVyIHByb2dyYW0gY29udHJvbC5cblxuVGhlIGRlYnVnZ2VyIGlzIGV4dGVuc2libGUgLS0tIGl0IGlzIGFjdHVhbGx5IGRlZmluZWQgYXMgdGhlIGNsYXNzXG5gYFBkYmBgLiBUaGlzIGlzIGN1cnJlbnRseSB1bmRvY3VtZW50ZWQgYnV0IGVhc2lseSB1bmRlcnN0b29kIGJ5XG5yZWFkaW5nIHRoZSBzb3VyY2UuICBUaGUgZXh0ZW5zaW9uIGludGVyZmFjZSB1c2VzIHRoZSBtb2R1bGVzIGBgYmRiYGBcbmFuZCBgYGNtZGBgLlxuXG5UaGUgZGVidWdnZXJcJ3MgcHJvbXB0IGlzIGBgKFBkYilgYC4gVHlwaWNhbCB1c2FnZSB0byBydW4gYSBwcm9ncmFtXG51bmRlciBjb250cm9sIG9mIHRoZSBkZWJ1Z2dlciBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBwZGIucnVuKFwnbXltb2R1bGUudGVzdCgpXCcpXG4gICA+IDxzdHJpbmc+KDApPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgIE5hbWVFcnJvcjogXCdzcGFtXCdcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpXG5cbmBgcGRiLnB5YGAgY2FuIGFsc28gYmUgaW52b2tlZCBhcyBhIHNjcmlwdCB0byBkZWJ1ZyBvdGhlciBzY3JpcHRzLlxuRm9yIGV4YW1wbGU6XG5cbiAgIHB5dGhvbiAtbSBwZGIgbXlzY3JpcHQucHlcblxuV2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LCBwZGIgd2lsbCBhdXRvbWF0aWNhbGx5IGVudGVyIHBvc3QtbW9ydGVtXG5kZWJ1Z2dpbmcgaWYgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gQWZ0ZXIgcG9zdC1cbm1vcnRlbSBkZWJ1Z2dpbmcgKG9yIGFmdGVyIG5vcm1hbCBleGl0IG9mIHRoZSBwcm9ncmFtKSwgcGRiIHdpbGxcbnJlc3RhcnQgdGhlIHByb2dyYW0uIEF1dG9tYXRpYyByZXN0YXJ0aW5nIHByZXNlcnZlcyBwZGJcJ3Mgc3RhdGUgKHN1Y2hcbmFzIGJyZWFrcG9pbnRzKSBhbmQgaW4gbW9zdCBjYXNlcyBpcyBtb3JlIHVzZWZ1bCB0aGFuIHF1aXR0aW5nIHRoZVxuZGVidWdnZXIgdXBvbiBwcm9ncmFtXCdzIGV4aXQuXG5cbk5ldyBpbiB2ZXJzaW9uIDIuNDogUmVzdGFydGluZyBwb3N0LW1vcnRlbSBiZWhhdmlvciBhZGRlZC5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIgZnJvbSBhIHJ1bm5pbmcgcHJvZ3JhbSBpc1xudG8gaW5zZXJ0XG5cbiAgIGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKVxuXG5hdCB0aGUgbG9jYXRpb24geW91IHdhbnQgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIuICBZb3UgY2FuIHRoZW5cbnN0ZXAgdGhyb3VnaCB0aGUgY29kZSBmb2xsb3dpbmcgdGhpcyBzdGF0ZW1lbnQsIGFuZCBjb250aW51ZSBydW5uaW5nXG53aXRob3V0IHRoZSBkZWJ1Z2dlciB1c2luZyB0aGUgYGBjYGAgY29tbWFuZC5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gaW5zcGVjdCBhIGNyYXNoZWQgcHJvZ3JhbSBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBteW1vZHVsZS50ZXN0KClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSA0LCBpbiB0ZXN0XG4gICAgICAgdGVzdDIoKVxuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSAzLCBpbiB0ZXN0MlxuICAgICAgIHByaW50IHNwYW1cbiAgIE5hbWVFcnJvcjogc3BhbVxuICAgPj4+IHBkYi5wbSgpXG4gICA+IC4vbXltb2R1bGUucHkoMyl0ZXN0MigpXG4gICAtPiBwcmludCBzcGFtXG4gICAoUGRiKVxuXG5UaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM7IGVhY2ggZW50ZXJzIHRoZSBkZWJ1Z2dlclxuaW4gYSBzbGlnaHRseSBkaWZmZXJlbnQgd2F5OlxuXG5wZGIucnVuKHN0YXRlbWVudFssIGdsb2JhbHNbLCBsb2NhbHNdXSlcblxuICAgRXhlY3V0ZSB0aGUgKnN0YXRlbWVudCogKGdpdmVuIGFzIGEgc3RyaW5nKSB1bmRlciBkZWJ1Z2dlciBjb250cm9sLlxuICAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzIGJlZm9yZSBhbnkgY29kZSBpcyBleGVjdXRlZDsgeW91IGNhblxuICAgc2V0IGJyZWFrcG9pbnRzIGFuZCB0eXBlIGBgY29udGludWVgYCwgb3IgeW91IGNhbiBzdGVwIHRocm91Z2ggdGhlXG4gICBzdGF0ZW1lbnQgdXNpbmcgYGBzdGVwYGAgb3IgYGBuZXh0YGAgKGFsbCB0aGVzZSBjb21tYW5kcyBhcmVcbiAgIGV4cGxhaW5lZCBiZWxvdykuICBUaGUgb3B0aW9uYWwgKmdsb2JhbHMqIGFuZCAqbG9jYWxzKiBhcmd1bWVudHNcbiAgIHNwZWNpZnkgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBjb2RlIGlzIGV4ZWN1dGVkOyBieSBkZWZhdWx0XG4gICB0aGUgZGljdGlvbmFyeSBvZiB0aGUgbW9kdWxlIGBgX19tYWluX19gYCBpcyB1c2VkLiAgKFNlZSB0aGVcbiAgIGV4cGxhbmF0aW9uIG9mIHRoZSBgYGV4ZWNgYCBzdGF0ZW1lbnQgb3IgdGhlIGBgZXZhbCgpYGAgYnVpbHQtaW5cbiAgIGZ1bmN0aW9uLilcblxucGRiLnJ1bmV2YWwoZXhwcmVzc2lvblssIGdsb2JhbHNbLCBsb2NhbHNdXSlcblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiAoZ2l2ZW4gYXMgYSBzdHJpbmcpIHVuZGVyIGRlYnVnZ2VyXG4gICBjb250cm9sLiAgV2hlbiBgYHJ1bmV2YWwoKWBgIHJldHVybnMsIGl0IHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZVxuICAgZXhwcmVzc2lvbi4gIE90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gYGBydW4oKWBgLlxuXG5wZGIucnVuY2FsbChmdW5jdGlvblssIGFyZ3VtZW50LCAuLi5dKVxuXG4gICBDYWxsIHRoZSAqZnVuY3Rpb24qIChhIGZ1bmN0aW9uIG9yIG1ldGhvZCBvYmplY3QsIG5vdCBhIHN0cmluZylcbiAgIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gIFdoZW4gYGBydW5jYWxsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbShbdHJhY2ViYWNrXSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuXG4nLAorICdjdXN0b21pemF0aW9uJzogdSdcbkJhc2ljIGN1c3RvbWl6YXRpb25cbioqKioqKioqKioqKioqKioqKipcblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gIGBgX19uZXdfXygpYGAgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgYGBfX25ld19fKClgYCBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHlcbiAgIGFuIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgdXNpbmdcbiAgIGBgc3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSlgYCB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgYGBfX25ld19fKClgYCByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgYGBfX2luaXRfXyhzZWxmWywgLi4uXSlgYCwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYC5cblxuICAgSWYgYGBfX25ld19fKClgYCBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgIGBgX19uZXdfXygpYGAgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2ZcbiAgIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgIGBgQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSlgYC4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50XG4gICBvbiBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICBgYFR5cGVFcnJvcmBgIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhIGBgX19kZWxfXygpYGAgbWV0aG9kLFxuICAgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2RlbF9fKClgYCBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5XG4gICBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGVcbiAgIGluc3RhbmNlLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yXG4gICB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6IGBgZGVsIHhgYCBkb2VzblwndCBkaXJlY3RseSBjYWxsIGBgeC5fX2RlbF9fKClgYCAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGBgeGBgIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXJcbiAgICAgaXMgb25seSBjYWxsZWQgd2hlbiBgYHhgYFwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZVxuICAgICBjb21tb24gc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW5cbiAgICAgb2JqZWN0IGZyb20gZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW5cbiAgICAgb2JqZWN0cyAoZS5nLiwgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGhcbiAgICAgcGFyZW50IGFuZCBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlXG4gICAgIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrXG4gICAgIHN0b3JlZCBpbiBgYHN5cy5leGNfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3JcbiAgICAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW5cbiAgICAgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpblxuICAgICBgYHN5cy5leGNfdHJhY2ViYWNrYGAgb3IgYGBzeXMubGFzdF90cmFjZWJhY2tgYC4gIENpcmN1bGFyXG4gICAgIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlIGRldGVjdGVkIHdoZW4gdGhlIG9wdGlvbiBjeWNsZVxuICAgICBkZXRlY3RvciBpcyBlbmFibGVkIChpdFwncyBvbiBieSBkZWZhdWx0KSwgYnV0IGNhbiBvbmx5IGJlIGNsZWFuZWRcbiAgICAgdXAgaWYgdGhlcmUgYXJlIG5vIFB5dGhvbi1sZXZlbCBgYF9fZGVsX18oKWBgIG1ldGhvZHMgaW52b2x2ZWQuXG4gICAgIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYGBnY2BgIG1vZHVsZSBmb3IgbW9yZVxuICAgICBpbmZvcm1hdGlvbiBhYm91dCBob3cgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZVxuICAgICBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGBnYXJiYWdlYGBcbiAgICAgdmFsdWUuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZyB0aGVpciBleGVjdXRpb25cbiAgICAgYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBgYHN5cy5zdGRlcnJgYCBpbnN0ZWFkLlxuICAgICBBbHNvLCB3aGVuIGBgX19kZWxfXygpYGAgaXMgaW52b2tlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZ1xuICAgICBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXJcbiAgICAgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlXG4gICAgIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB0b3JuIGRvd24gKGUuZy4gdGhlXG4gICAgIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpcyByZWFzb24sIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkIHRvIG1haW50YWluXG4gICAgIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LCBQeXRob25cbiAgICAgZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgcmVwcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gYW5kIGJ5IHN0cmluZ1xuICAgY29udmVyc2lvbnMgKHJldmVyc2UgcXVvdGVzKSB0byBjb21wdXRlIHRoZSAib2ZmaWNpYWwiIHN0cmluZ1xuICAgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLCB0aGlzIHNob3VsZCBsb29rXG4gICBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlY3JlYXRlIGFuXG4gICBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGUgZW52aXJvbm1lbnQpLiAgSWZcbiAgIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybSBgYDwuLi5zb21lIHVzZWZ1bFxuICAgZGVzY3JpcHRpb24uLi4+YGAgc2hvdWxkIGJlIHJldHVybmVkLiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyBgYF9fcmVwcl9fKClgYCBidXQgbm90XG4gICBgYF9fc3RyX18oKWBgLCB0aGVuIGBgX19yZXByX18oKWBgIGlzIGFsc28gdXNlZCB3aGVuIGFuICJpbmZvcm1hbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpcyByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgc3RyKClgYCBidWlsdC1pbiBmdW5jdGlvbiBhbmQgYnkgdGhlIGBgcHJpbnRgYFxuICAgc3RhdGVtZW50IHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuICBUaGlzIGRpZmZlcnMgZnJvbSBgYF9fcmVwcl9fKClgYCBpbiB0aGF0IGl0IGRvZXMgbm90IGhhdmVcbiAgIHRvIGJlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGEgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2VcbiAgIHJlcHJlc2VudGF0aW9uIG1heSBiZSB1c2VkIGluc3RlYWQuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMS5cblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcywgYW5kIGFyZSBjYWxsZWRcbiAgIGZvciBjb21wYXJpc29uIG9wZXJhdG9ycyBpbiBwcmVmZXJlbmNlIHRvIGBgX19jbXBfXygpYGAgYmVsb3cuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6IGBgeDx5YGAgY2FsbHMgYGB4Ll9fbHRfXyh5KWBgLCBgYHg8PXlgYCBjYWxsc1xuICAgYGB4Ll9fbGVfXyh5KWBgLCBgYHg9PXlgYCBjYWxscyBgYHguX19lcV9fKHkpYGAsIGBgeCE9eWBgIGFuZFxuICAgYGB4PD55YGAgY2FsbCBgYHguX19uZV9fKHkpYGAsIGBgeD55YGAgY2FsbHMgYGB4Ll9fZ3RfXyh5KWBgLCBhbmRcbiAgIGBgeD49eWBgIGNhbGxzIGBgeC5fX2dlX18oeSlgYC5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvblxuICAgYGBOb3RJbXBsZW1lbnRlZGBgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhXG4gICBnaXZlbiBwYWlyIG9mIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgYGBGYWxzZWBgIGFuZCBgYFRydWVgYCBhcmVcbiAgIHJldHVybmVkIGZvciBhIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW5cbiAgIHJldHVybiBhbnkgdmFsdWUsIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYVxuICAgQm9vbGVhbiBjb250ZXh0IChlLmcuLCBpbiB0aGUgY29uZGl0aW9uIG9mIGFuIGBgaWZgYCBzdGF0ZW1lbnQpLFxuICAgUHl0aG9uIHdpbGwgY2FsbCBgYGJvb2woKWBgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdFxuICAgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gICBUaGUgdHJ1dGggb2YgYGB4PT15YGAgZG9lcyBub3QgaW1wbHkgdGhhdCBgYHghPXlgYCBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nIGBgX19lcV9fKClgYCwgb25lIHNob3VsZCBhbHNvIGRlZmluZVxuICAgYGBfX25lX18oKWBgIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZVxuICAgdGhlIHBhcmFncmFwaCBvbiBgYF9faGFzaF9fKClgYCBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb25cbiAgIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uXG4gICBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgYGBfX2x0X18oKWBgIGFuZCBgYF9fZ3RfXygpYGAgYXJlIGVhY2hcbiAgIG90aGVyXCdzIHJlZmxlY3Rpb24sIGBgX19sZV9fKClgYCBhbmQgYGBfX2dlX18oKWBgIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCBhbmQgYGBfX2VxX18oKWBgIGFuZCBgYF9fbmVfXygpYGAgYXJlIHRoZWlyIG93blxuICAgcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSBgYGZ1bmN0b29scy50b3RhbF9vcmRlcmluZygpYGAuXG5cbm9iamVjdC5fX2NtcF9fKHNlbGYsIG90aGVyKVxuXG4gICBDYWxsZWQgYnkgY29tcGFyaXNvbiBvcGVyYXRpb25zIGlmIHJpY2ggY29tcGFyaXNvbiAoc2VlIGFib3ZlKSBpc1xuICAgbm90IGRlZmluZWQuICBTaG91bGQgcmV0dXJuIGEgbmVnYXRpdmUgaW50ZWdlciBpZiBgYHNlbGYgPCBvdGhlcmBgLFxuICAgemVybyBpZiBgYHNlbGYgPT0gb3RoZXJgYCwgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIGBgc2VsZiA+IG90aGVyYGAuXG4gICBJZiBubyBgYF9fY21wX18oKWBgLCBgYF9fZXFfXygpYGAgb3IgYGBfX25lX18oKWBgIG9wZXJhdGlvbiBpc1xuICAgZGVmaW5lZCwgY2xhc3MgaW5zdGFuY2VzIGFyZSBjb21wYXJlZCBieSBvYmplY3QgaWRlbnRpdHlcbiAgICgiYWRkcmVzcyIpLiAgU2VlIGFsc28gdGhlIGRlc2NyaXB0aW9uIG9mIGBgX19oYXNoX18oKWBgIGZvciBzb21lXG4gICBpbXBvcnRhbnQgbm90ZXMgb24gY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tXG4gICBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLiAoTm90ZTogdGhlXG4gICByZXN0cmljdGlvbiB0aGF0IGV4Y2VwdGlvbnMgYXJlIG5vdCBwcm9wYWdhdGVkIGJ5IGBgX19jbXBfXygpYGAgaGFzXG4gICBiZWVuIHJlbW92ZWQgc2luY2UgUHl0aG9uIDEuNS4pXG5cbm9iamVjdC5fX3JjbXBfXyhzZWxmLCBvdGhlcilcblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMTogTm8gbG9uZ2VyIHN1cHBvcnRlZC5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiBgYGhhc2goKWBgIGFuZCBmb3Igb3BlcmF0aW9ucyBvblxuICAgbWVtYmVycyBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nIGBgc2V0YGAsIGBgZnJvemVuc2V0YGAsIGFuZFxuICAgYGBkaWN0YGAuICBgYF9faGFzaF9fKClgYCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seVxuICAgcmVxdWlyZWQgcHJvcGVydHkgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZVxuICAgaGFzaCB2YWx1ZTsgaXQgaXMgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZ1xuICAgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaCB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdFxuICAgYWxzbyBwbGF5IGEgcGFydCBpbiBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGEgYGBfX2NtcF9fKClgYCBvciBgYF9fZXFfXygpYGAgbWV0aG9kXG4gICBpdCBzaG91bGQgbm90IGRlZmluZSBhIGBgX19oYXNoX18oKWBgIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0XG4gICBkZWZpbmVzIGBgX19jbXBfXygpYGAgb3IgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0c1xuICAgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBpbiBoYXNoZWQgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzXG4gICBkZWZpbmVzIG11dGFibGUgb2JqZWN0cyBhbmQgaW1wbGVtZW50cyBhIGBgX19jbXBfXygpYGAgb3JcbiAgIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZCBub3QgaW1wbGVtZW50IGBgX19oYXNoX18oKWBgLCBzaW5jZVxuICAgaGFzaGFibGUgY29sbGVjdGlvbiBpbXBsZW1lbnRhdGlvbnMgcmVxdWlyZSB0aGF0IGEgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmVcbiAgIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgYGBfX2NtcF9fKClgYCBhbmQgYGBfX2hhc2hfXygpYGAgbWV0aG9kc1xuICAgYnkgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgYGB4Ll9faGFzaF9fKClgYCByZXR1cm5zIGBgaWQoeClgYC5cblxuICAgQ2xhc3NlcyB3aGljaCBpbmhlcml0IGEgYGBfX2hhc2hfXygpYGAgbWV0aG9kIGZyb20gYSBwYXJlbnQgY2xhc3NcbiAgIGJ1dCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYGBfX2NtcF9fKClgYCBvciBgYF9fZXFfXygpYGAgc3VjaCB0aGF0XG4gICB0aGUgaGFzaCB2YWx1ZSByZXR1cm5lZCBpcyBubyBsb25nZXIgYXBwcm9wcmlhdGUgKGUuZy4gYnkgc3dpdGNoaW5nXG4gICB0byBhIHZhbHVlLWJhc2VkIGNvbmNlcHQgb2YgZXF1YWxpdHkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdFxuICAgaWRlbnRpdHkgYmFzZWQgZXF1YWxpdHkpIGNhbiBleHBsaWNpdGx5IGZsYWcgdGhlbXNlbHZlcyBhcyBiZWluZ1xuICAgdW5oYXNoYWJsZSBieSBzZXR0aW5nIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uXG4gICBEb2luZyBzbyBtZWFucyB0aGF0IG5vdCBvbmx5IHdpbGwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyByYWlzZSBhblxuICAgYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0byByZXRyaWV2ZSB0aGVpclxuICAgaGFzaCB2YWx1ZSwgYnV0IHRoZXkgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGBcbiAgICh1bmxpa2UgY2xhc3NlcyB3aGljaCBkZWZpbmUgdGhlaXIgb3duIGBgX19oYXNoX18oKWBgIHRvIGV4cGxpY2l0bHlcbiAgIHJhaXNlIGBgVHlwZUVycm9yYGApLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi41OiBgYF9faGFzaF9fKClgYCBtYXkgbm93IGFsc28gcmV0dXJuIGEgbG9uZ1xuICAgaW50ZWdlciBvYmplY3Q7IHRoZSAzMi1iaXQgaW50ZWdlciBpcyB0aGVuIGRlcml2ZWQgZnJvbSB0aGUgaGFzaCBvZlxuICAgdGhhdCBvYmplY3QuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjY6IGBgX19oYXNoX19gYCBtYXkgbm93IGJlIHNldCB0byBgYE5vbmVgYCB0b1xuICAgZXhwbGljaXRseSBmbGFnIGluc3RhbmNlcyBvZiBhIGNsYXNzIGFzIHVuaGFzaGFibGUuXG5cbm9iamVjdC5fX25vbnplcm9fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgIGBgYm9vbCgpYGA7IHNob3VsZCByZXR1cm4gYGBGYWxzZWBgIG9yIGBgVHJ1ZWBgLCBvciB0aGVpciBpbnRlZ2VyXG4gICBlcXVpdmFsZW50cyBgYDBgYCBvciBgYDFgYC4gIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90IGRlZmluZWQsXG4gICBgYF9fbGVuX18oKWBgIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbmVpdGhlciBgYF9fbGVuX18oKWBgIG5vciBgYF9fbm9uemVyb19fKClgYCwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG5cbm9iamVjdC5fX3VuaWNvZGVfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgdW5pY29kZSgpYGAgYnVpbHQtaW47IHNob3VsZCByZXR1cm4gYSBVbmljb2RlXG4gICBvYmplY3QuIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90IGRlZmluZWQsIHN0cmluZyBjb252ZXJzaW9uIGlzXG4gICBhdHRlbXB0ZWQsIGFuZCB0aGUgcmVzdWx0IG9mIHN0cmluZyBjb252ZXJzaW9uIGlzIGNvbnZlcnRlZCB0b1xuICAgVW5pY29kZSB1c2luZyB0aGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcuXG4nLAorICdkZWJ1Z2dlcic6IHUnXG5gYHBkYmBgIC0tLSBUaGUgUHl0aG9uIERlYnVnZ2VyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBtb2R1bGUgYGBwZGJgYCBkZWZpbmVzIGFuIGludGVyYWN0aXZlIHNvdXJjZSBjb2RlIGRlYnVnZ2VyIGZvclxuUHl0aG9uIHByb2dyYW1zLiAgSXQgc3VwcG9ydHMgc2V0dGluZyAoY29uZGl0aW9uYWwpIGJyZWFrcG9pbnRzIGFuZFxuc2luZ2xlIHN0ZXBwaW5nIGF0IHRoZSBzb3VyY2UgbGluZSBsZXZlbCwgaW5zcGVjdGlvbiBvZiBzdGFjayBmcmFtZXMsXG5zb3VyY2UgY29kZSBsaXN0aW5nLCBhbmQgZXZhbHVhdGlvbiBvZiBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgaW4gdGhlXG5jb250ZXh0IG9mIGFueSBzdGFjayBmcmFtZS4gIEl0IGFsc28gc3VwcG9ydHMgcG9zdC1tb3J0ZW0gZGVidWdnaW5nXG5hbmQgY2FuIGJlIGNhbGxlZCB1bmRlciBwcm9ncmFtIGNvbnRyb2wuXG5cblRoZSBkZWJ1Z2dlciBpcyBleHRlbnNpYmxlIC0tLSBpdCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIHRoZSBjbGFzc1xuYGBQZGJgYC4gVGhpcyBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkIGJ1dCBlYXNpbHkgdW5kZXJzdG9vZCBieVxucmVhZGluZyB0aGUgc291cmNlLiAgVGhlIGV4dGVuc2lvbiBpbnRlcmZhY2UgdXNlcyB0aGUgbW9kdWxlcyBgYGJkYmBgXG5hbmQgYGBjbWRgYC5cblxuVGhlIGRlYnVnZ2VyXCdzIHByb21wdCBpcyBgYChQZGIpYGAuIFR5cGljYWwgdXNhZ2UgdG8gcnVuIGEgcHJvZ3JhbVxudW5kZXIgY29udHJvbCBvZiB0aGUgZGVidWdnZXIgaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gcGRiLnJ1bihcJ215bW9kdWxlLnRlc3QoKVwnKVxuICAgPiA8c3RyaW5nPigwKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICBOYW1lRXJyb3I6IFwnc3BhbVwnXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKVxuXG5gYHBkYi5weWBgIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy5cbkZvciBleGFtcGxlOlxuXG4gICBweXRob24gLW0gcGRiIG15c2NyaXB0LnB5XG5cbldoZW4gaW52b2tlZCBhcyBhIHNjcmlwdCwgcGRiIHdpbGwgYXV0b21hdGljYWxseSBlbnRlciBwb3N0LW1vcnRlbVxuZGVidWdnaW5nIGlmIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIGV4aXRzIGFibm9ybWFsbHkuIEFmdGVyIHBvc3QtXG5tb3J0ZW0gZGVidWdnaW5nIChvciBhZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsXG5yZXN0YXJ0IHRoZSBwcm9ncmFtLiBBdXRvbWF0aWMgcmVzdGFydGluZyBwcmVzZXJ2ZXMgcGRiXCdzIHN0YXRlIChzdWNoXG5hcyBicmVha3BvaW50cykgYW5kIGluIG1vc3QgY2FzZXMgaXMgbW9yZSB1c2VmdWwgdGhhbiBxdWl0dGluZyB0aGVcbmRlYnVnZ2VyIHVwb24gcHJvZ3JhbVwncyBleGl0LlxuXG5OZXcgaW4gdmVyc2lvbiAyLjQ6IFJlc3RhcnRpbmcgcG9zdC1tb3J0ZW0gYmVoYXZpb3IgYWRkZWQuXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlIGBgY2BgIGNvbW1hbmQuXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGluc3BlY3QgYSBjcmFzaGVkIHByb2dyYW0gaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gbXltb2R1bGUudGVzdCgpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID9cbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgNCwgaW4gdGVzdFxuICAgICAgIHRlc3QyKClcbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgMywgaW4gdGVzdDJcbiAgICAgICBwcmludCBzcGFtXG4gICBOYW1lRXJyb3I6IHNwYW1cbiAgID4+PiBwZGIucG0oKVxuICAgPiAuL215bW9kdWxlLnB5KDMpdGVzdDIoKVxuICAgLT4gcHJpbnQgc3BhbVxuICAgKFBkYilcblxuVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOyBlYWNoIGVudGVycyB0aGUgZGVidWdnZXJcbmluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdheTpcblxucGRiLnJ1bihzdGF0ZW1lbnRbLCBnbG9iYWxzWywgbG9jYWxzXV0pXG5cbiAgIEV4ZWN1dGUgdGhlICpzdGF0ZW1lbnQqIChnaXZlbiBhcyBhIHN0cmluZykgdW5kZXIgZGVidWdnZXIgY29udHJvbC5cbiAgIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFycyBiZWZvcmUgYW55IGNvZGUgaXMgZXhlY3V0ZWQ7IHlvdSBjYW5cbiAgIHNldCBicmVha3BvaW50cyBhbmQgdHlwZSBgYGNvbnRpbnVlYGAsIG9yIHlvdSBjYW4gc3RlcCB0aHJvdWdoIHRoZVxuICAgc3RhdGVtZW50IHVzaW5nIGBgc3RlcGBgIG9yIGBgbmV4dGBgIChhbGwgdGhlc2UgY29tbWFuZHMgYXJlXG4gICBleHBsYWluZWQgYmVsb3cpLiAgVGhlIG9wdGlvbmFsICpnbG9iYWxzKiBhbmQgKmxvY2FscyogYXJndW1lbnRzXG4gICBzcGVjaWZ5IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY29kZSBpcyBleGVjdXRlZDsgYnkgZGVmYXVsdFxuICAgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIG1vZHVsZSBgYF9fbWFpbl9fYGAgaXMgdXNlZC4gIChTZWUgdGhlXG4gICBleHBsYW5hdGlvbiBvZiB0aGUgYGBleGVjYGAgc3RhdGVtZW50IG9yIHRoZSBgYGV2YWwoKWBgIGJ1aWx0LWluXG4gICBmdW5jdGlvbi4pXG5cbnBkYi5ydW5ldmFsKGV4cHJlc3Npb25bLCBnbG9iYWxzWywgbG9jYWxzXV0pXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogKGdpdmVuIGFzIGEgc3RyaW5nKSB1bmRlciBkZWJ1Z2dlclxuICAgY29udHJvbC4gIFdoZW4gYGBydW5ldmFsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGVcbiAgIGV4cHJlc3Npb24uICBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGBgcnVuKClgYC5cblxucGRiLnJ1bmNhbGwoZnVuY3Rpb25bLCBhcmd1bWVudCwgLi4uXSlcblxuICAgQ2FsbCB0aGUgKmZ1bmN0aW9uKiAoYSBmdW5jdGlvbiBvciBtZXRob2Qgb2JqZWN0LCBub3QgYSBzdHJpbmcpXG4gICB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuICBXaGVuIGBgcnVuY2FsbCgpYGAgcmV0dXJucywgaXQgcmV0dXJuc1xuICAgd2hhdGV2ZXIgdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJuZWQuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnNcbiAgIGFzIHNvb24gYXMgdGhlIGZ1bmN0aW9uIGlzIGVudGVyZWQuXG5cbnBkYi5zZXRfdHJhY2UoKVxuXG4gICBFbnRlciB0aGUgZGVidWdnZXIgYXQgdGhlIGNhbGxpbmcgc3RhY2sgZnJhbWUuICBUaGlzIGlzIHVzZWZ1bCB0b1xuICAgaGFyZC1jb2RlIGEgYnJlYWtwb2ludCBhdCBhIGdpdmVuIHBvaW50IGluIGEgcHJvZ3JhbSwgZXZlbiBpZiB0aGVcbiAgIGNvZGUgaXMgbm90IG90aGVyd2lzZSBiZWluZyBkZWJ1Z2dlZCAoZS5nLiB3aGVuIGFuIGFzc2VydGlvblxuICAgZmFpbHMpLlxuXG5wZGIucG9zdF9tb3J0ZW0oW3RyYWNlYmFja10pXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgZ2l2ZW4gKnRyYWNlYmFjayogb2JqZWN0LiAgSWYgbm9cbiAgICp0cmFjZWJhY2sqIGlzIGdpdmVuLCBpdCB1c2VzIHRoZSBvbmUgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IGlzXG4gICBjdXJyZW50bHkgYmVpbmcgaGFuZGxlZCAoYW4gZXhjZXB0aW9uIG11c3QgYmUgYmVpbmcgaGFuZGxlZCBpZiB0aGVcbiAgIGRlZmF1bHQgaXMgdG8gYmUgdXNlZCkuXG5cbnBkYi5wbSgpXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgdHJhY2ViYWNrIGZvdW5kIGluXG4gICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLlxuXG5UaGUgYGBydW5fKmBgIGZ1bmN0aW9ucyBhbmQgYGBzZXRfdHJhY2UoKWBgIGFyZSBhbGlhc2VzIGZvclxuaW5zdGFudGlhdGluZyB0aGUgYGBQZGJgYCBjbGFzcyBhbmQgY2FsbGluZyB0aGUgbWV0aG9kIG9mIHRoZSBzYW1lXG5uYW1lLiAgSWYgeW91IHdhbnQgdG8gYWNjZXNzIGZ1cnRoZXIgZmVhdHVyZXMsIHlvdSBoYXZlIHRvIGRvIHRoaXNcbnlvdXJzZWxmOlxuXG5jbGFzcyBjbGFzcyBwZGIuUGRiKGNvbXBsZXRla2V5PVwndGFiXCcsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBza2lwPU5vbmUpXG5cbiAgIGBgUGRiYGAgaXMgdGhlIGRlYnVnZ2VyIGNsYXNzLlxuXG4gICBUaGUgKmNvbXBsZXRla2V5KiwgKnN0ZGluKiBhbmQgKnN0ZG91dCogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlXG4gICB1bmRlcmx5aW5nIGBgY21kLkNtZGBgIGNsYXNzOyBzZWUgdGhlIGRlc2NyaXB0aW9uIHRoZXJlLlxuXG4gICBUaGUgKnNraXAqIGFyZ3VtZW50LCBpZiBnaXZlbiwgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBnbG9iLXN0eWxlXG4gICBtb2R1bGUgbmFtZSBwYXR0ZXJucy4gIFRoZSBkZWJ1Z2dlciB3aWxsIG5vdCBzdGVwIGludG8gZnJhbWVzIHRoYXRcbiAgIG9yaWdpbmF0ZSBpbiBhIG1vZHVsZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZXNlIHBhdHRlcm5zLiBbMV1cblxuICAgRXhhbXBsZSBjYWxsIHRvIGVuYWJsZSB0cmFjaW5nIHdpdGggKnNraXAqOlxuXG4gICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9W1wnZGphbmdvLipcJ10pLnNldF90cmFjZSgpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNzogVGhlICpza2lwKiBhcmd1bWVudC5cblxuICAgcnVuKHN0YXRlbWVudFssIGdsb2JhbHNbLCBsb2NhbHNdXSlcbiAgIHJ1bmV2YWwoZXhwcmVzc2lvblssIGdsb2JhbHNbLCBsb2NhbHNdXSlcbiAgIHJ1bmNhbGwoZnVuY3Rpb25bLCBhcmd1bWVudCwgLi4uXSlcbiAgIHNldF90cmFjZSgpXG5cbiAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucyBleHBsYWluZWQgYWJvdmUuXG4nLAogICdkZWwnOiB1J1xuVGhlIGBgZGVsYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgZGVsX3N0bXQgOjo9ICJkZWwiIHRhcmdldF9saXN0XG5cbkRlbGV0aW9uIGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgdmVyeSBzaW1pbGFyIHRvIHRoZSB3YXkgYXNzaWdubWVudCBpc1xuZGVmaW5lZC4gUmF0aGVyIHRoYXQgc3BlbGxpbmcgaXQgb3V0IGluIGZ1bGwgZGV0YWlscywgaGVyZSBhcmUgc29tZVxuaGludHMuXG5cbkRlbGV0aW9uIG9mIGEgdGFyZ2V0IGxpc3QgcmVjdXJzaXZlbHkgZGVsZXRlcyBlYWNoIHRhcmdldCwgZnJvbSBsZWZ0XG50byByaWdodC5cblxuRGVsZXRpb24gb2YgYSBuYW1lIHJlbW92ZXMgdGhlIGJpbmRpbmcgb2YgdGhhdCBuYW1lICBmcm9tIHRoZSBsb2NhbCBvclxuZ2xvYmFsIG5hbWVzcGFjZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5hbWUgb2NjdXJzIGluIGEgYGBnbG9iYWxgYFxuc3RhdGVtZW50IGluIHRoZSBzYW1lIGNvZGUgYmxvY2suICBJZiB0aGUgbmFtZSBpcyB1bmJvdW5kLCBhXG5gYE5hbWVFcnJvcmBgIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC5cblxuSXQgaXMgaWxsZWdhbCB0byBkZWxldGUgYSBuYW1lIGZyb20gdGhlIGxvY2FsIG5hbWVzcGFjZSBpZiBpdCBvY2N1cnNcbmFzIGEgZnJlZSB2YXJpYWJsZSBpbiBhIG5lc3RlZCBibG9jay5cblxuRGVsZXRpb24gb2YgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHN1YnNjcmlwdGlvbnMgYW5kIHNsaWNpbmdzIGlzIHBhc3NlZFxudG8gdGhlIHByaW1hcnkgb2JqZWN0IGludm9sdmVkOyBkZWxldGlvbiBvZiBhIHNsaWNpbmcgaXMgaW4gZ2VuZXJhbFxuZXF1aXZhbGVudCB0byBhc3NpZ25tZW50IG9mIGFuIGVtcHR5IHNsaWNlIG9mIHRoZSByaWdodCB0eXBlIChidXQgZXZlblxudGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzbGljZWQgb2JqZWN0KS5cbicsCi0gJ2RpY3QnOiB1J1xuRGljdGlvbmFyeSBkaXNwbGF5c1xuKioqKioqKioqKioqKioqKioqKlxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBrZXkvZGF0dW0gcGFpcnNcbmVuY2xvc2VkIGluIGN1cmx5IGJyYWNlczpcblxuICAgZGljdF9kaXNwbGF5ICAgOjo9ICJ7IiBba2V5X2RhdHVtX2xpc3RdICJ9IlxuICAga2V5X2RhdHVtX2xpc3QgOjo9IGtleV9kYXR1bSAoIiwiIGtleV9kYXR1bSkqIFsiLCJdXG4gICBrZXlfZGF0dW0gICAgICA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvblxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSB5aWVsZHMgYSBuZXcgZGljdGlvbmFyeSBvYmplY3QuXG5cblRoZSBrZXkvZGF0dW0gcGFpcnMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgdG8gZGVmaW5lIHRoZVxuZW50cmllcyBvZiB0aGUgZGljdGlvbmFyeTogZWFjaCBrZXkgb2JqZWN0IGlzIHVzZWQgYXMgYSBrZXkgaW50byB0aGVcbmRpY3Rpb25hcnkgdG8gc3RvcmUgdGhlIGNvcnJlc3BvbmRpbmcgZGF0dW0uXG5cblJlc3RyaWN0aW9ucyBvbiB0aGUgdHlwZXMgb2YgdGhlIGtleSB2YWx1ZXMgYXJlIGxpc3RlZCBlYXJsaWVyIGluXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqLiAgKFRvIHN1bW1hcml6ZSwgdGhlIGtleSB0eXBlXG5zaG91bGQgYmUgKmhhc2hhYmxlKiwgd2hpY2ggZXhjbHVkZXMgYWxsIG11dGFibGUgb2JqZWN0cy4pICBDbGFzaGVzXG5iZXR3ZWVuIGR1cGxpY2F0ZSBrZXlzIGFyZSBub3QgZGV0ZWN0ZWQ7IHRoZSBsYXN0IGRhdHVtICh0ZXh0dWFsbHlcbnJpZ2h0bW9zdCBpbiB0aGUgZGlzcGxheSkgc3RvcmVkIGZvciBhIGdpdmVuIGtleSB2YWx1ZSBwcmV2YWlscy5cbicsCisgJ2RpY3QnOiB1J1xuRGljdGlvbmFyeSBkaXNwbGF5c1xuKioqKioqKioqKioqKioqKioqKlxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBrZXkvZGF0dW0gcGFpcnNcbmVuY2xvc2VkIGluIGN1cmx5IGJyYWNlczpcblxuICAgZGljdF9kaXNwbGF5ICAgICAgIDo6PSAieyIgW2tleV9kYXR1bV9saXN0IHwgZGljdF9jb21wcmVoZW5zaW9uXSAifSJcbiAgIGtleV9kYXR1bV9saXN0ICAgICA6Oj0ga2V5X2RhdHVtICgiLCIga2V5X2RhdHVtKSogWyIsIl1cbiAgIGtleV9kYXR1bSAgICAgICAgICA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvblxuICAgZGljdF9jb21wcmVoZW5zaW9uIDo6PSBleHByZXNzaW9uICI6IiBleHByZXNzaW9uIGNvbXBfZm9yXG5cbkEgZGljdGlvbmFyeSBkaXNwbGF5IHlpZWxkcyBhIG5ldyBkaWN0aW9uYXJ5IG9iamVjdC5cblxuSWYgYSBjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2Ugb2Yga2V5L2RhdHVtIHBhaXJzIGlzIGdpdmVuLCB0aGV5IGFyZVxuZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB0byBkZWZpbmUgdGhlIGVudHJpZXMgb2YgdGhlIGRpY3Rpb25hcnk6XG5lYWNoIGtleSBvYmplY3QgaXMgdXNlZCBhcyBhIGtleSBpbnRvIHRoZSBkaWN0aW9uYXJ5IHRvIHN0b3JlIHRoZVxuY29ycmVzcG9uZGluZyBkYXR1bS4gIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHNwZWNpZnkgdGhlIHNhbWUga2V5XG5tdWx0aXBsZSB0aW1lcyBpbiB0aGUga2V5L2RhdHVtIGxpc3QsIGFuZCB0aGUgZmluYWwgZGljdGlvbmFyeVwncyB2YWx1ZVxuZm9yIHRoYXQga2V5IHdpbGwgYmUgdGhlIGxhc3Qgb25lIGdpdmVuLlxuXG5BIGRpY3QgY29tcHJlaGVuc2lvbiwgaW4gY29udHJhc3QgdG8gbGlzdCBhbmQgc2V0IGNvbXByZWhlbnNpb25zLFxubmVlZHMgdHdvIGV4cHJlc3Npb25zIHNlcGFyYXRlZCB3aXRoIGEgY29sb24gZm9sbG93ZWQgYnkgdGhlIHVzdWFsXG4iZm9yIiBhbmQgImlmIiBjbGF1c2VzLiBXaGVuIHRoZSBjb21wcmVoZW5zaW9uIGlzIHJ1biwgdGhlIHJlc3VsdGluZ1xua2V5IGFuZCB2YWx1ZSBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5IGluIHRoZSBvcmRlclxudGhleSBhcmUgcHJvZHVjZWQuXG5cblJlc3RyaWN0aW9ucyBvbiB0aGUgdHlwZXMgb2YgdGhlIGtleSB2YWx1ZXMgYXJlIGxpc3RlZCBlYXJsaWVyIGluXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqLiAgKFRvIHN1bW1hcml6ZSwgdGhlIGtleSB0eXBlXG5zaG91bGQgYmUgKmhhc2hhYmxlKiwgd2hpY2ggZXhjbHVkZXMgYWxsIG11dGFibGUgb2JqZWN0cy4pICBDbGFzaGVzXG5iZXR3ZWVuIGR1cGxpY2F0ZSBrZXlzIGFyZSBub3QgZGV0ZWN0ZWQ7IHRoZSBsYXN0IGRhdHVtICh0ZXh0dWFsbHlcbnJpZ2h0bW9zdCBpbiB0aGUgZGlzcGxheSkgc3RvcmVkIGZvciBhIGdpdmVuIGtleSB2YWx1ZSBwcmV2YWlscy5cbicsCiAgJ2R5bmFtaWMtZmVhdHVyZXMnOiB1J1xuSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlcmUgUHl0aG9uIHN0YXRlbWVudHMgYXJlIGlsbGVnYWwgd2hlbiB1c2VkXG5pbiBjb25qdW5jdGlvbiB3aXRoIG5lc3RlZCBzY29wZXMgdGhhdCBjb250YWluIGZyZWUgdmFyaWFibGVzLlxuXG5JZiBhIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQgaW4gYW4gZW5jbG9zaW5nIHNjb3BlLCBpdCBpcyBpbGxlZ2FsIHRvXG5kZWxldGUgdGhlIG5hbWUuICBBbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGF0IGNvbXBpbGUgdGltZS5cblxuSWYgdGhlIHdpbGQgY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gYGBpbXBvcnQgKmBgIC0tLSBpcyB1c2VkIGluIGFcbmZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gY29udGFpbnMgb3IgaXMgYSBuZXN0ZWQgYmxvY2sgd2l0aCBmcmVlXG52YXJpYWJsZXMsIHRoZSBjb21waWxlciB3aWxsIHJhaXNlIGEgYGBTeW50YXhFcnJvcmBgLlxuXG5JZiBgYGV4ZWNgYCBpcyB1c2VkIGluIGEgZnVuY3Rpb24gYW5kIHRoZSBmdW5jdGlvbiBjb250YWlucyBvciBpcyBhXG5uZXN0ZWQgYmxvY2sgd2l0aCBmcmVlIHZhcmlhYmxlcywgdGhlIGNvbXBpbGVyIHdpbGwgcmFpc2UgYVxuYGBTeW50YXhFcnJvcmBgIHVubGVzcyB0aGUgZXhlYyBleHBsaWNpdGx5IHNwZWNpZmllcyB0aGUgbG9jYWxcbm5hbWVzcGFjZSBmb3IgdGhlIGBgZXhlY2BgLiAgKEluIG90aGVyIHdvcmRzLCBgYGV4ZWMgb2JqYGAgd291bGQgYmVcbmlsbGVnYWwsIGJ1dCBgYGV4ZWMgb2JqIGluIG5zYGAgd291bGQgYmUgbGVnYWwuKVxuXG5UaGUgYGBldmFsKClgYCwgYGBleGVjZmlsZSgpYGAsIGFuZCBgYGlucHV0KClgYCBmdW5jdGlvbnMgYW5kIHRoZVxuYGBleGVjYGAgc3RhdGVtZW50IGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbCBlbnZpcm9ubWVudCBmb3JcbnJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWwgYW5kIGdsb2JhbFxubmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZCBpbiB0aGVcbm5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiBbMV0gVGhlXG5gYGV4ZWNgYCBzdGF0ZW1lbnQgYW5kIHRoZSBgYGV2YWwoKWBgIGFuZCBgYGV4ZWNmaWxlKClgYCBmdW5jdGlvbnNcbmhhdmUgb3B0aW9uYWwgYXJndW1lbnRzIHRvIG92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS5cbklmIG9ubHkgb25lIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGguXG4nLAogICdlbHNlJzogdSdcblRoZSBgYGlmYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBpZmBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG4nLAogICdleGNlcHRpb25zJzogdSdcbkV4Y2VwdGlvbnNcbioqKioqKioqKipcblxuRXhjZXB0aW9ucyBhcmUgYSBtZWFucyBvZiBicmVha2luZyBvdXQgb2YgdGhlIG5vcm1hbCBmbG93IG9mIGNvbnRyb2xcbm9mIGEgY29kZSBibG9jayBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIG9yIG90aGVyIGV4Y2VwdGlvbmFsXG5jb25kaXRpb25zLiAgQW4gZXhjZXB0aW9uIGlzICpyYWlzZWQqIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZXJyb3IgaXNcbmRldGVjdGVkOyBpdCBtYXkgYmUgKmhhbmRsZWQqIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2NrIG9yIGJ5IGFueVxuY29kZSBibG9jayB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW52b2tlZCB0aGUgY29kZSBibG9jayB3aGVyZVxudGhlIGVycm9yIG9jY3VycmVkLlxuXG5UaGUgUHl0aG9uIGludGVycHJldGVyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBkZXRlY3RzIGEgcnVuLXRpbWVcbmVycm9yIChzdWNoIGFzIGRpdmlzaW9uIGJ5IHplcm8pLiAgQSBQeXRob24gcHJvZ3JhbSBjYW4gYWxzb1xuZXhwbGljaXRseSByYWlzZSBhbiBleGNlcHRpb24gd2l0aCB0aGUgYGByYWlzZWBgIHN0YXRlbWVudC4gRXhjZXB0aW9uXG5oYW5kbGVycyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlIGBgdHJ5YGAgLi4uIGBgZXhjZXB0YGAgc3RhdGVtZW50LiAgVGhlXG5gYGZpbmFsbHlgYCBjbGF1c2Ugb2Ygc3VjaCBhIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGNsZWFudXBcbmNvZGUgd2hpY2ggZG9lcyBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24sIGJ1dCBpcyBleGVjdXRlZCB3aGV0aGVyIGFuXG5leGNlcHRpb24gb2NjdXJyZWQgb3Igbm90IGluIHRoZSBwcmVjZWRpbmcgY29kZS5cblxuUHl0aG9uIHVzZXMgdGhlICJ0ZXJtaW5hdGlvbiIgbW9kZWwgb2YgZXJyb3IgaGFuZGxpbmc6IGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjYW4gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCBhbmQgY29udGludWUgZXhlY3V0aW9uIGF0IGFuIG91dGVyXG5sZXZlbCwgYnV0IGl0IGNhbm5vdCByZXBhaXIgdGhlIGNhdXNlIG9mIHRoZSBlcnJvciBhbmQgcmV0cnkgdGhlXG5mYWlsaW5nIG9wZXJhdGlvbiAoZXhjZXB0IGJ5IHJlLWVudGVyaW5nIHRoZSBvZmZlbmRpbmcgcGllY2Ugb2YgY29kZVxuZnJvbSB0aGUgdG9wKS5cblxuV2hlbiBhbiBleGNlcHRpb24gaXMgbm90IGhhbmRsZWQgYXQgYWxsLCB0aGUgaW50ZXJwcmV0ZXIgdGVybWluYXRlc1xuZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBvciByZXR1cm5zIHRvIGl0cyBpbnRlcmFjdGl2ZSBtYWluIGxvb3AuICBJblxuZWl0aGVyIGNhc2UsIGl0IHByaW50cyBhIHN0YWNrIGJhY2t0cmFjZSwgZXhjZXB0IHdoZW4gdGhlIGV4Y2VwdGlvbiBpc1xuYGBTeXN0ZW1FeGl0YGAuXG5cbkV4Y2VwdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgY2xhc3MgaW5zdGFuY2VzLiAgVGhlIGBgZXhjZXB0YGAgY2xhdXNlXG5pcyBzZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIGNsYXNzIG9mIHRoZSBpbnN0YW5jZTogaXQgbXVzdCByZWZlcmVuY2VcbnRoZSBjbGFzcyBvZiB0aGUgaW5zdGFuY2Ugb3IgYSBiYXNlIGNsYXNzIHRoZXJlb2YuICBUaGUgaW5zdGFuY2UgY2FuXG5iZSByZWNlaXZlZCBieSB0aGUgaGFuZGxlciBhbmQgY2FuIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXRcbnRoZSBleGNlcHRpb25hbCBjb25kaXRpb24uXG5cbkV4Y2VwdGlvbnMgY2FuIGFsc28gYmUgaWRlbnRpZmllZCBieSBzdHJpbmdzLCBpbiB3aGljaCBjYXNlIHRoZVxuYGBleGNlcHRgYCBjbGF1c2UgaXMgc2VsZWN0ZWQgYnkgb2JqZWN0IGlkZW50aXR5LiAgQW4gYXJiaXRyYXJ5IHZhbHVlXG5jYW4gYmUgcmFpc2VkIGFsb25nIHdpdGggdGhlIGlkZW50aWZ5aW5nIHN0cmluZyB3aGljaCBjYW4gYmUgcGFzc2VkIHRvXG50aGUgaGFuZGxlci5cblxuTm90ZTogTWVzc2FnZXMgdG8gZXhjZXB0aW9ucyBhcmUgbm90IHBhcnQgb2YgdGhlIFB5dGhvbiBBUEkuICBUaGVpclxuICBjb250ZW50cyBtYXkgY2hhbmdlIGZyb20gb25lIHZlcnNpb24gb2YgUHl0aG9uIHRvIHRoZSBuZXh0IHdpdGhvdXRcbiAgd2FybmluZyBhbmQgc2hvdWxkIG5vdCBiZSByZWxpZWQgb24gYnkgY29kZSB3aGljaCB3aWxsIHJ1biB1bmRlclxuICBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuXG5cblNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGB0cnlgYCBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHRyeVxuc3RhdGVtZW50KiBhbmQgYGByYWlzZWBgIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGlzIGxpbWl0YXRpb24gb2NjdXJzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBieSB0aGVzZVxuICAgIG9wZXJhdGlvbnMgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkLlxuJywKQEAgLTM2LDE0ICszNiwxNCBAQAogICdleHBybGlzdHMnOiB1J1xuRXhwcmVzc2lvbiBsaXN0c1xuKioqKioqKioqKioqKioqKlxuXG4gICBleHByZXNzaW9uX2xpc3QgOjo9IGV4cHJlc3Npb24gKCAiLCIgZXhwcmVzc2lvbiApKiBbIiwiXVxuXG5BbiBleHByZXNzaW9uIGxpc3QgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgY29tbWEgeWllbGRzIGEgdHVwbGUuICBUaGVcbmxlbmd0aCBvZiB0aGUgdHVwbGUgaXMgdGhlIG51bWJlciBvZiBleHByZXNzaW9ucyBpbiB0aGUgbGlzdC4gIFRoZVxuZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cblRoZSB0cmFpbGluZyBjb21tYSBpcyByZXF1aXJlZCBvbmx5IHRvIGNyZWF0ZSBhIHNpbmdsZSB0dXBsZSAoYS5rLmEuIGFcbipzaW5nbGV0b24qKTsgaXQgaXMgb3B0aW9uYWwgaW4gYWxsIG90aGVyIGNhc2VzLiAgQSBzaW5nbGUgZXhwcmVzc2lvblxud2l0aG91dCBhIHRyYWlsaW5nIGNvbW1hIGRvZXNuXCd0IGNyZWF0ZSBhIHR1cGxlLCBidXQgcmF0aGVyIHlpZWxkcyB0aGVcbnZhbHVlIG9mIHRoYXQgZXhwcmVzc2lvbi4gKFRvIGNyZWF0ZSBhbiBlbXB0eSB0dXBsZSwgdXNlIGFuIGVtcHR5IHBhaXJcbm9mIHBhcmVudGhlc2VzOiBgYCgpYGAuKVxuJywKICAnZmxvYXRpbmcnOiB1J1xuRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKioqKioqXG5cbkZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsXG5kZWZpbml0aW9uczpcblxuICAgZmxvYXRudW1iZXIgICA6Oj0gcG9pbnRmbG9hdCB8IGV4cG9uZW50ZmxvYXRcbiAgIHBvaW50ZmxvYXQgICAgOjo9IFtpbnRwYXJ0XSBmcmFjdGlvbiB8IGludHBhcnQgIi4iXG4gICBleHBvbmVudGZsb2F0IDo6PSAoaW50cGFydCB8IHBvaW50ZmxvYXQpIGV4cG9uZW50XG4gICBpbnRwYXJ0ICAgICAgIDo6PSBkaWdpdCtcbiAgIGZyYWN0aW9uICAgICAgOjo9ICIuIiBkaWdpdCtcbiAgIGV4cG9uZW50ICAgICAgOjo9ICgiZSIgfCAiRSIpIFsiKyIgfCAiLSJdIGRpZ2l0K1xuXG5Ob3RlIHRoYXQgdGhlIGludGVnZXIgYW5kIGV4cG9uZW50IHBhcnRzIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgY2FuXG5sb29rIGxpa2Ugb2N0YWwgaW50ZWdlcnMsIGJ1dCBhcmUgaW50ZXJwcmV0ZWQgdXNpbmcgcmFkaXggMTAuICBGb3JcbmV4YW1wbGUsIGBgMDc3ZTAxMGBgIGlzIGxlZ2FsLCBhbmQgZGVub3RlcyB0aGUgc2FtZSBudW1iZXIgYXNcbmBgNzdlMTBgYC4gVGhlIGFsbG93ZWQgcmFuZ2Ugb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgaXNcbmltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4gU29tZSBleGFtcGxlcyBvZiBmbG9hdGluZyBwb2ludCBsaXRlcmFsczpcblxuICAgMy4xNCAgICAxMC4gICAgLjAwMSAgICAxZTEwMCAgICAzLjE0ZS0xMCAgICAwZTBcblxuTm90ZSB0aGF0IG51bWVyaWMgbGl0ZXJhbHMgZG8gbm90IGluY2x1ZGUgYSBzaWduOyBhIHBocmFzZSBsaWtlIGBgLTFgYFxuaXMgYWN0dWFsbHkgYW4gZXhwcmVzc2lvbiBjb21wb3NlZCBvZiB0aGUgdW5hcnkgb3BlcmF0b3IgYGAtYGAgYW5kIHRoZVxubGl0ZXJhbCBgYDFgYC5cbicsCiAgJ2Zvcic6IHUnXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGFcbnNlcXVlbmNlIChzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuYGBleHByZXNzaW9uX2xpc3RgYC4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXMgZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmVcbmV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgZW1wdHkpLCB0aGUgc3VpdGVcbmluIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlIGBgZWxzZWBgIGNsYXVzZSBpZiB0aGVyZSB3YXNcbm5vIG5leHQgaXRlbS5cblxuVGhlIHN1aXRlIG1heSBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlKHMpIGluIHRoZSB0YXJnZXQgbGlzdDsgdGhpcyBkb2VzXG5ub3QgYWZmZWN0IHRoZSBuZXh0IGl0ZW0gYXNzaWduZWQgdG8gaXQuXG5cblRoZSB0YXJnZXQgbGlzdCBpcyBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLCBidXQgaWYgdGhlXG5zZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbCBieSB0aGVcbmxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGByYW5nZSgpYGAgcmV0dXJucyBhIHNlcXVlbmNlIG9mXG5pbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzIGBgZm9yIGkgOj0gYSB0byBiXG5kb2BgOyBlLmcuLCBgYHJhbmdlKDMpYGAgcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLCAyXWBgLlxuXG5Ob3RlOiBUaGVyZSBpcyBhIHN1YnRsZXR5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBsb29wXG4gICh0aGlzIGNhbiBvbmx5IG9jY3VyIGZvciBtdXRhYmxlIHNlcXVlbmNlcywgaS5lLiBsaXN0cykuIEFuIGludGVybmFsXG4gIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LCBhbmQgdGhpc1xuICBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhcyByZWFjaGVkIHRoZVxuICBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlXG4gIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGUgc2VxdWVuY2UsXG4gIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZiB0aGVcbiAgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuJywKLSAnZm9ybWF0c3RyaW5ncyc6IHUnXG5Gb3JtYXQgU3RyaW5nIFN5bnRheFxuKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgc3RyLmZvcm1hdCgpYGAgbWV0aG9kIGFuZCB0aGUgYGBGb3JtYXR0ZXJgYCBjbGFzcyBzaGFyZSB0aGUgc2FtZVxuc3ludGF4IGZvciBmb3JtYXQgc3RyaW5ncyAoYWx0aG91Z2ggaW4gdGhlIGNhc2Ugb2YgYGBGb3JtYXR0ZXJgYCxcbnN1YmNsYXNzZXMgY2FuIGRlZmluZSB0aGVpciBvd24gZm9ybWF0IHN0cmluZyBzeW50YXgpLlxuXG5Gb3JtYXQgc3RyaW5ncyBjb250YWluICJyZXBsYWNlbWVudCBmaWVsZHMiIHN1cnJvdW5kZWQgYnkgY3VybHkgYnJhY2VzXG5gYHt9YGAuIEFueXRoaW5nIHRoYXQgaXMgbm90IGNvbnRhaW5lZCBpbiBicmFjZXMgaXMgY29uc2lkZXJlZCBsaXRlcmFsXG50ZXh0LCB3aGljaCBpcyBjb3BpZWQgdW5jaGFuZ2VkIHRvIHRoZSBvdXRwdXQuICBJZiB5b3UgbmVlZCB0byBpbmNsdWRlXG5hIGJyYWNlIGNoYXJhY3RlciBpbiB0aGUgbGl0ZXJhbCB0ZXh0LCBpdCBjYW4gYmUgZXNjYXBlZCBieSBkb3VibGluZzpcbmBge3tgYCBhbmQgYGB9fWBgLlxuXG5UaGUgZ3JhbW1hciBmb3IgYSByZXBsYWNlbWVudCBmaWVsZCBpcyBhcyBmb2xsb3dzOlxuXG4gICAgICByZXBsYWNlbWVudF9maWVsZCA6Oj0gInsiIGZpZWxkX25hbWUgWyIhIiBjb252ZXJzaW9uXSBbIjoiIGZvcm1hdF9zcGVjXSAifSJcbiAgICAgIGZpZWxkX25hbWUgICAgICAgIDo6PSAoaWRlbnRpZmllciB8IGludGVnZXIpICgiLiIgYXR0cmlidXRlX25hbWUgfCAiWyIgZWxlbWVudF9pbmRleCAiXSIpKlxuICAgICAgYXR0cmlidXRlX25hbWUgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgIGVsZW1lbnRfaW5kZXggICAgIDo6PSBpbnRlZ2VyIHwgaW5kZXhfc3RyaW5nXG4gICAgICBpbmRleF9zdHJpbmcgICAgICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXSI+ICtcbiAgICAgIGNvbnZlcnNpb24gICAgICAgIDo6PSAiciIgfCAicyJcbiAgICAgIGZvcm1hdF9zcGVjICAgICAgIDo6PSA8ZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24+XG5cbkluIGxlc3MgZm9ybWFsIHRlcm1zLCB0aGUgcmVwbGFjZW1lbnQgZmllbGQgc3RhcnRzIHdpdGggYVxuKmZpZWxkX25hbWUqLCB3aGljaCBjYW4gZWl0aGVyIGJlIGEgbnVtYmVyIChmb3IgYSBwb3NpdGlvbmFsXG5hcmd1bWVudCksIG9yIGFuIGlkZW50aWZpZXIgKGZvciBrZXl3b3JkIGFyZ3VtZW50cykuICBGb2xsb3dpbmcgdGhpc1xuaXMgYW4gb3B0aW9uYWwgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpcyBwcmVjZWRlZCBieSBhbiBleGNsYW1hdGlvblxucG9pbnQgYGBcJyFcJ2BgLCBhbmQgYSAqZm9ybWF0X3NwZWMqLCB3aGljaCBpcyBwcmVjZWRlZCBieSBhIGNvbG9uXG5gYFwnOlwnYGAuXG5cblNlZSBhbHNvIHRoZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogc2VjdGlvbi5cblxuVGhlICpmaWVsZF9uYW1lKiBpdHNlbGYgYmVnaW5zIHdpdGggZWl0aGVyIGEgbnVtYmVyIG9yIGEga2V5d29yZC4gIElmXG5pdFwncyBhIG51bWJlciwgaXQgcmVmZXJzIHRvIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgYW5kIGlmIGl0XCdzIGFcbmtleXdvcmQgaXQgcmVmZXJzIHRvIGEgbmFtZWQga2V5d29yZCBhcmd1bWVudC4gIFRoaXMgY2FuIGJlIGZvbGxvd2VkXG5ieSBhbnkgbnVtYmVyIG9mIGluZGV4IG9yIGF0dHJpYnV0ZSBleHByZXNzaW9ucy4gQW4gZXhwcmVzc2lvbiBvZiB0aGVcbmZvcm0gYGBcJy5uYW1lXCdgYCBzZWxlY3RzIHRoZSBuYW1lZCBhdHRyaWJ1dGUgdXNpbmcgYGBnZXRhdHRyKClgYCxcbndoaWxlIGFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYGBcJ1tpbmRleF1cJ2BgIGRvZXMgYW4gaW5kZXggbG9va3VwXG51c2luZyBgYF9fZ2V0aXRlbV9fKClgYC5cblxuU29tZSBzaW1wbGUgZm9ybWF0IHN0cmluZyBleGFtcGxlczpcblxuICAgIkZpcnN0LCB0aG91IHNoYWx0IGNvdW50IHRvIHswfSIgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJNeSBxdWVzdCBpcyB7bmFtZX0iICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50IFwnbmFtZVwnXG4gICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAjIFwnd2VpZ2h0XCcgYXR0cmlidXRlIG9mIGZpcnN0IHBvc2l0aW9uYWwgYXJnXG4gICAiVW5pdHMgZGVzdHJveWVkOiB7cGxheWVyc1swXX0iICAjIEZpcnN0IGVsZW1lbnQgb2Yga2V5d29yZCBhcmd1bWVudCBcJ3BsYXllcnNcJy5cblxuVGhlICpjb252ZXJzaW9uKiBmaWVsZCBjYXVzZXMgYSB0eXBlIGNvZXJjaW9uIGJlZm9yZSBmb3JtYXR0aW5nLlxuTm9ybWFsbHksIHRoZSBqb2Igb2YgZm9ybWF0dGluZyBhIHZhbHVlIGlzIGRvbmUgYnkgdGhlXG5gYF9fZm9ybWF0X18oKWBgIG1ldGhvZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiAgSG93ZXZlciwgaW4gc29tZSBjYXNlc1xuaXQgaXMgZGVzaXJhYmxlIHRvIGZvcmNlIGEgdHlwZSB0byBiZSBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcsXG5vdmVycmlkaW5nIGl0cyBvd24gZGVmaW5pdGlvbiBvZiBmb3JtYXR0aW5nLiAgQnkgY29udmVydGluZyB0aGUgdmFsdWVcbnRvIGEgc3RyaW5nIGJlZm9yZSBjYWxsaW5nIGBgX19mb3JtYXRfXygpYGAsIHRoZSBub3JtYWwgZm9ybWF0dGluZ1xubG9naWMgaXMgYnlwYXNzZWQuXG5cblR3byBjb252ZXJzaW9uIGZsYWdzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOiBgYFwnIXNcJ2BgIHdoaWNoIGNhbGxzXG5gYHN0cigpYGAgb24gdGhlIHZhbHVlLCBhbmQgYGBcJyFyXCdgYCB3aGljaCBjYWxscyBgYHJlcHIoKWBgLlxuXG5Tb21lIGV4YW1wbGVzOlxuXG4gICAiSGFyb2xkXCdzIGEgY2xldmVyIHswIXN9IiAgICAgICAgIyBDYWxscyBzdHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJCcmluZyBvdXQgdGhlIGhvbHkge25hbWUhcn0iICAgICMgQ2FsbHMgcmVwcigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuXG5UaGUgKmZvcm1hdF9zcGVjKiBmaWVsZCBjb250YWlucyBhIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZSB2YWx1ZVxuc2hvdWxkIGJlIHByZXNlbnRlZCwgaW5jbHVkaW5nIHN1Y2ggZGV0YWlscyBhcyBmaWVsZCB3aWR0aCwgYWxpZ25tZW50LFxucGFkZGluZywgZGVjaW1hbCBwcmVjaXNpb24gYW5kIHNvIG9uLiAgRWFjaCB2YWx1ZSB0eXBlIGNhbiBkZWZpbmUgaXRzXG5vd24gImZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSIgb3IgaW50ZXJwcmV0YXRpb24gb2YgdGhlICpmb3JtYXRfc3BlYyouXG5cbk1vc3QgYnVpbHQtaW4gdHlwZXMgc3VwcG9ydCBhIGNvbW1vbiBmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UsIHdoaWNoXG5pcyBkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbi5cblxuQSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNhbiBhbHNvIGluY2x1ZGUgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkc1xud2l0aGluIGl0LiBUaGVzZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzIGNhbiBjb250YWluIG9ubHkgYSBmaWVsZFxubmFtZTsgY29udmVyc2lvbiBmbGFncyBhbmQgZm9ybWF0IHNwZWNpZmljYXRpb25zIGFyZSBub3QgYWxsb3dlZC4gIFRoZVxucmVwbGFjZW1lbnQgZmllbGRzIHdpdGhpbiB0aGUgZm9ybWF0X3NwZWMgYXJlIHN1YnN0aXR1dGVkIGJlZm9yZSB0aGVcbipmb3JtYXRfc3BlYyogc3RyaW5nIGlzIGludGVycHJldGVkLiBUaGlzIGFsbG93cyB0aGUgZm9ybWF0dGluZyBvZiBhXG52YWx1ZSB0byBiZSBkeW5hbWljYWxseSBzcGVjaWZpZWQuXG5cblNlZSB0aGUgKkZvcm1hdCBleGFtcGxlcyogc2VjdGlvbiBmb3Igc29tZSBleGFtcGxlcy5cblxuXG5Gb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiJGb3JtYXQgc3BlY2lmaWNhdGlvbnMiIGFyZSB1c2VkIHdpdGhpbiByZXBsYWNlbWVudCBmaWVsZHMgY29udGFpbmVkXG53aXRoaW4gYSBmb3JtYXQgc3RyaW5nIHRvIGRlZmluZSBob3cgaW5kaXZpZHVhbCB2YWx1ZXMgYXJlIHByZXNlbnRlZFxuKHNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqKS4gIFRoZXkgY2FuIGFsc28gYmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZVxuYnVpbHQtaW4gYGBmb3JtYXQoKWBgIGZ1bmN0aW9uLiAgRWFjaCBmb3JtYXR0YWJsZSB0eXBlIG1heSBkZWZpbmUgaG93XG50aGUgZm9ybWF0IHNwZWNpZmljYXRpb24gaXMgdG8gYmUgaW50ZXJwcmV0ZWQuXG5cbk1vc3QgYnVpbHQtaW4gdHlwZXMgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBmb3IgZm9ybWF0XG5zcGVjaWZpY2F0aW9ucywgYWx0aG91Z2ggc29tZSBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zIGFyZSBvbmx5XG5zdXBwb3J0ZWQgYnkgdGhlIG51bWVyaWMgdHlwZXMuXG5cbkEgZ2VuZXJhbCBjb252ZW50aW9uIGlzIHRoYXQgYW4gZW1wdHkgZm9ybWF0IHN0cmluZyAoYGAiImBgKSBwcm9kdWNlc1xudGhlIHNhbWUgcmVzdWx0IGFzIGlmIHlvdSBoYWQgY2FsbGVkIGBgc3RyKClgYCBvbiB0aGUgdmFsdWUuIEEgbm9uLVxuZW1wdHkgZm9ybWF0IHN0cmluZyB0eXBpY2FsbHkgbW9kaWZpZXMgdGhlIHJlc3VsdC5cblxuVGhlIGdlbmVyYWwgZm9ybSBvZiBhICpzdGFuZGFyZCBmb3JtYXQgc3BlY2lmaWVyKiBpczpcblxuICAgZm9ybWF0X3NwZWMgOjo9IFtbZmlsbF1hbGlnbl1bc2lnbl1bI11bMF1bd2lkdGhdWy5wcmVjaXNpb25dW3R5cGVdXG4gICBmaWxsICAgICAgICA6Oj0gPGEgY2hhcmFjdGVyIG90aGVyIHRoYW4gXCd9XCc+XG4gICBhbGlnbiAgICAgICA6Oj0gIjwiIHwgIj4iIHwgIj0iIHwgIl4iXG4gICBzaWduICAgICAgICA6Oj0gIisiIHwgIi0iIHwgIiAiXG4gICB3aWR0aCAgICAgICA6Oj0gaW50ZWdlclxuICAgcHJlY2lzaW9uICAgOjo9IGludGVnZXJcbiAgIHR5cGUgICAgICAgIDo6PSAiYiIgfCAiYyIgfCAiZCIgfCAiZSIgfCAiRSIgfCAiZiIgfCAiRiIgfCAiZyIgfCAiRyIgfCAibiIgfCAibyIgfCAicyIgfCAieCIgfCAiWCIgfCAiJSJcblxuVGhlICpmaWxsKiBjaGFyYWN0ZXIgY2FuIGJlIGFueSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiBcJ31cJyAod2hpY2hcbnNpZ25pZmllcyB0aGUgZW5kIG9mIHRoZSBmaWVsZCkuICBUaGUgcHJlc2VuY2Ugb2YgYSBmaWxsIGNoYXJhY3RlciBpc1xuc2lnbmFsZWQgYnkgdGhlICpuZXh0KiBjaGFyYWN0ZXIsIHdoaWNoIG11c3QgYmUgb25lIG9mIHRoZSBhbGlnbm1lbnRcbm9wdGlvbnMuIElmIHRoZSBzZWNvbmQgY2hhcmFjdGVyIG9mICpmb3JtYXRfc3BlYyogaXMgbm90IGEgdmFsaWRcbmFsaWdubWVudCBvcHRpb24sIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGF0IGJvdGggdGhlIGZpbGwgY2hhcmFjdGVyIGFuZFxudGhlIGFsaWdubWVudCBvcHRpb24gYXJlIGFic2VudC5cblxuVGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYWxpZ25tZW50IG9wdGlvbnMgaXMgYXMgZm9sbG93czpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnPFwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgbGVmdC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZSAodGhpcyBpcyB0aGUgZGVmYXVsdCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCc+XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSByaWdodC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz1cJ2BgICAgfCBGb3JjZXMgdGhlIHBhZGRpbmcgdG8gYmUgcGxhY2VkIGFmdGVyIHRoZSBzaWduIChpZiBhbnkpICAgIHxcbiAgIHwgICAgICAgICAgIHwgYnV0IGJlZm9yZSB0aGUgZGlnaXRzLiAgVGhpcyBpcyB1c2VkIGZvciBwcmludGluZyBmaWVsZHMgICB8XG4gICB8ICAgICAgICAgICB8IGluIHRoZSBmb3JtIFwnKzAwMDAwMDEyMFwnLiBUaGlzIGFsaWdubWVudCBvcHRpb24gaXMgb25seSAgICB8XG4gICB8ICAgICAgICAgICB8IHZhbGlkIGZvciBudW1lcmljIHR5cGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ15cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlIHRoYXQgdW5sZXNzIGEgbWluaW11bSBmaWVsZCB3aWR0aCBpcyBkZWZpbmVkLCB0aGUgZmllbGQgd2lkdGhcbndpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIGRhdGEgdG8gZmlsbCBpdCwgc28gdGhhdCB0aGVcbmFsaWdubWVudCBvcHRpb24gaGFzIG5vIG1lYW5pbmcgaW4gdGhpcyBjYXNlLlxuXG5UaGUgKnNpZ24qIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBudW1iZXIgdHlwZXMsIGFuZCBjYW4gYmUgb25lIG9mXG50aGUgZm9sbG93aW5nOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCcrXCdgYCAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIGZvciBib3RoIHBvc2l0aXZlIGFzICB8XG4gICB8ICAgICAgICAgICB8IHdlbGwgYXMgbmVnYXRpdmUgbnVtYmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJy1cJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgbmVnYXRpdmUgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVycyAodGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvcikuICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBzcGFjZSAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIGxlYWRpbmcgc3BhY2Ugc2hvdWxkIGJlIHVzZWQgb24gcG9zaXRpdmUgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVycywgYW5kIGEgbWludXMgc2lnbiBvbiBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgYGBcJyNcJ2BgIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBpbnRlZ2VycywgYW5kIG9ubHkgZm9yIGJpbmFyeSxcbm9jdGFsLCBvciBoZXhhZGVjaW1hbCBvdXRwdXQuICBJZiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGVcbm91dHB1dCB3aWxsIGJlIHByZWZpeGVkIGJ5IGBgXCcwYlwnYGAsIGBgXCcwb1wnYGAsIG9yIGBgXCcweFwnYGAsXG5yZXNwZWN0aXZlbHkuXG5cbip3aWR0aCogaXMgYSBkZWNpbWFsIGludGVnZXIgZGVmaW5pbmcgdGhlIG1pbmltdW0gZmllbGQgd2lkdGguICBJZiBub3RcbnNwZWNpZmllZCwgdGhlbiB0aGUgZmllbGQgd2lkdGggd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjb250ZW50LlxuXG5JZiB0aGUgKndpZHRoKiBmaWVsZCBpcyBwcmVjZWRlZCBieSBhIHplcm8gKGBgXCcwXCdgYCkgY2hhcmFjdGVyLCB0aGlzXG5lbmFibGVzIHplcm8tcGFkZGluZy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhbiAqYWxpZ25tZW50KiB0eXBlIG9mXG5gYFwnPVwnYGAgYW5kIGEgKmZpbGwqIGNoYXJhY3RlciBvZiBgYFwnMFwnYGAuXG5cblRoZSAqcHJlY2lzaW9uKiBpcyBhIGRlY2ltYWwgbnVtYmVyIGluZGljYXRpbmcgaG93IG1hbnkgZGlnaXRzIHNob3VsZFxuYmUgZGlzcGxheWVkIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlXG5mb3JtYXR0ZWQgd2l0aCBgYFwnZlwnYGAgYW5kIGBgXCdGXCdgYCwgb3IgYmVmb3JlIGFuZCBhZnRlciB0aGUgZGVjaW1hbFxucG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgZm9ybWF0dGVkIHdpdGggYGBcJ2dcJ2BgIG9yIGBgXCdHXCdgYC5cbkZvciBub24tbnVtYmVyIHR5cGVzIHRoZSBmaWVsZCBpbmRpY2F0ZXMgdGhlIG1heGltdW0gZmllbGQgc2l6ZSAtIGluXG5vdGhlciB3b3JkcywgaG93IG1hbnkgY2hhcmFjdGVycyB3aWxsIGJlIHVzZWQgZnJvbSB0aGUgZmllbGQgY29udGVudC5cblRoZSAqcHJlY2lzaW9uKiBpcyBub3QgYWxsb3dlZCBmb3IgaW50ZWdlciB2YWx1ZXMuXG5cbkZpbmFsbHksIHRoZSAqdHlwZSogZGV0ZXJtaW5lcyBob3cgdGhlIGRhdGEgc2hvdWxkIGJlIHByZXNlbnRlZC5cblxuVGhlIGF2YWlsYWJsZSBzdHJpbmcgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnc1wnYGAgICB8IFN0cmluZyBmb3JtYXQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdHlwZSBmb3Igc3RyaW5ncyBhbmQgICAgfFxuICAgfCAgICAgICAgICAgfCBtYXkgYmUgb21pdHRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzIGBgXCdzXCdgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgYXZhaWxhYmxlIGludGVnZXIgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnYlwnYGAgICB8IEJpbmFyeSBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDIuICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2NcJ2BgICAgfCBDaGFyYWN0ZXIuIENvbnZlcnRzIHRoZSBpbnRlZ2VyIHRvIHRoZSBjb3JyZXNwb25kaW5nICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgdW5pY29kZSBjaGFyYWN0ZXIgYmVmb3JlIHByaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnZFwnYGAgICB8IERlY2ltYWwgSW50ZWdlci4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTAuICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ29cJ2BgICAgfCBPY3RhbCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDguICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCd4XCdgYCAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIGxvd2VyLSAgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgbGV0dGVycyBmb3IgdGhlIGRpZ2l0cyBhYm92ZSA5LiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ1hcJ2BgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgdXBwZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnblwnYGAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFwnZFwnYGAsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXIgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzIGBgXCdkXCdgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5JbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgcHJlc2VudGF0aW9uIHR5cGVzLCBpbnRlZ2VycyBjYW4gYmUgZm9ybWF0dGVkXG53aXRoIHRoZSBmbG9hdGluZyBwb2ludCBwcmVzZW50YXRpb24gdHlwZXMgbGlzdGVkIGJlbG93IChleGNlcHRcbmBgXCduXCdgYCBhbmQgTm9uZSkuIFdoZW4gZG9pbmcgc28sIGBgZmxvYXQoKWBgIGlzIHVzZWQgdG8gY29udmVydCB0aGVcbmludGVnZXIgdG8gYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYmVmb3JlIGZvcm1hdHRpbmcuXG5cblRoZSBhdmFpbGFibGUgcHJlc2VudGF0aW9uIHR5cGVzIGZvciBmbG9hdGluZyBwb2ludCBhbmQgZGVjaW1hbCB2YWx1ZXNcbmFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnZVwnYGAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBQcmludHMgdGhlIG51bWJlciBpbiBzY2llbnRpZmljICAgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBub3RhdGlvbiB1c2luZyB0aGUgbGV0dGVyIFwnZVwnIHRvIGluZGljYXRlIHRoZSBleHBvbmVudC4gICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gU2FtZSBhcyBgYFwnZVwnYGAgZXhjZXB0IGl0IHVzZXMgYW4gdXBwZXIgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIFwnRVwnIGFzIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2ZcJ2BgICAgfCBGaXhlZCBwb2ludC4gRGlzcGxheXMgdGhlIG51bWJlciBhcyBhIGZpeGVkLXBvaW50IG51bWJlci4gIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdGXCdgYCAgIHwgRml4ZWQgcG9pbnQuIFNhbWUgYXMgYGBcJ2ZcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdnXCdgYCAgIHwgR2VuZXJhbCBmb3JtYXQuICBGb3IgYSBnaXZlbiBwcmVjaXNpb24gYGBwID49IDFgYCwgdGhpcyAgICB8XG4gICB8ICAgICAgICAgICB8IHJvdW5kcyB0aGUgbnVtYmVyIHRvIGBgcGBgIHNpZ25pZmljYW50IGRpZ2l0cyBhbmQgdGhlbiAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXRzIHRoZSByZXN1bHQgaW4gZWl0aGVyIGZpeGVkLXBvaW50IGZvcm1hdCBvciBpbiAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2NpZW50aWZpYyBub3RhdGlvbiwgZGVwZW5kaW5nIG9uIGl0cyBtYWduaXR1ZGUuICBUaGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2UgcnVsZXMgYXJlIGFzIGZvbGxvd3M6IHN1cHBvc2UgdGhhdCB0aGUgcmVzdWx0ICAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSBgYFwnZVwnYGAgYW5kIHByZWNpc2lvbiAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYHAtMWBgIHdvdWxkIGhhdmUgZXhwb25lbnQgYGBleHBgYC4gIFRoZW4gaWYgYGAtNCA8PSBleHAgIHxcbiAgIHwgICAgICAgICAgIHwgPCBwYGAsIHRoZSBudW1iZXIgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgXCdmXCdgYCBhbmQgcHJlY2lzaW9uIGBgcC0xLWV4cGBgLiBPdGhlcndpc2UsIHRoZSBudW1iZXIgICB8XG4gICB8ICAgICAgICAgICB8IGlzIGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAuIEluIGJvdGggY2FzZXMgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyBhcmUgICAgfFxuICAgfCAgICAgICAgICAgfCByZW1vdmVkIGZyb20gdGhlIHNpZ25pZmljYW5kLCBhbmQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYWxzbyByZW1vdmVkIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgZGlnaXRzIGZvbGxvd2luZyAgICB8XG4gICB8ICAgICAgICAgICB8IGl0LiAgUG9zdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSAgfFxuICAgfCAgICAgICAgICAgfCB6ZXJvLCBhbmQgbmFucywgYXJlIGZvcm1hdHRlZCBhcyBgYGluZmBgLCBgYC1pbmZgYCwgYGAwYGAsIHxcbiAgIHwgICAgICAgICAgIHwgYGAtMGBgIGFuZCBgYG5hbmBgIHJlc3BlY3RpdmVseSwgcmVnYXJkbGVzcyBvZiB0aGUgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2lvbi4gIEEgcHJlY2lzaW9uIG9mIGBgMGBgIGlzIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCAgfFxuICAgfCAgICAgICAgICAgfCB0byBhIHByZWNpc2lvbiBvZiBgYDFgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdHXCdgYCAgIHwgR2VuZXJhbCBmb3JtYXQuIFNhbWUgYXMgYGBcJ2dcJ2BgIGV4Y2VwdCBzd2l0Y2hlcyB0byBgYFwnRVwnYGAgfFxuICAgfCAgICAgICAgICAgfCBpZiB0aGUgbnVtYmVyIGdldHMgdG9vIGxhcmdlLiBUaGUgcmVwcmVzZW50YXRpb25zIG9mICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgaW5maW5pdHkgYW5kIE5hTiBhcmUgdXBwZXJjYXNlZCwgdG9vLiAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnblwnYGAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFwnZ1wnYGAsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXIgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCclXCdgYCAgIHwgUGVyY2VudGFnZS4gTXVsdGlwbGllcyB0aGUgbnVtYmVyIGJ5IDEwMCBhbmQgZGlzcGxheXMgaW4gICB8XG4gICB8ICAgICAgICAgICB8IGZpeGVkIChgYFwnZlwnYGApIGZvcm1hdCwgZm9sbG93ZWQgYnkgYSBwZXJjZW50IHNpZ24uICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyBgYFwnZ1wnYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuXG5Gb3JtYXQgZXhhbXBsZXNcbj09PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gY29udGFpbnMgZXhhbXBsZXMgb2YgdGhlIG5ldyBmb3JtYXQgc3ludGF4IGFuZCBjb21wYXJpc29uXG53aXRoIHRoZSBvbGQgYGAlYGAtZm9ybWF0dGluZy5cblxuSW4gbW9zdCBvZiB0aGUgY2FzZXMgdGhlIHN5bnRheCBpcyBzaW1pbGFyIHRvIHRoZSBvbGRcbmBgJWBgLWZvcm1hdHRpbmcsIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBgYHt9YGAgYW5kIHdpdGggYGA6YGAgdXNlZFxuaW5zdGVhZCBvZiBgYCVgYC4gRm9yIGV4YW1wbGUsIGBgXCclMDMuMmZcJ2BgIGNhbiBiZSB0cmFuc2xhdGVkIHRvXG5gYFwnezA6MDMuMmZ9XCdgYC5cblxuVGhlIG5ldyBmb3JtYXQgc3ludGF4IGFsc28gc3VwcG9ydHMgbmV3IGFuZCBkaWZmZXJlbnQgb3B0aW9ucywgc2hvd25cbmluIHRoZSBmb2xsb3cgZXhhbXBsZXMuXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgcG9zaXRpb246XG5cbiAgID4+PiBcJ3swfSwgezF9LCB7Mn1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdCgqXCdhYmNcJykgICAgICAjIHVucGFja2luZyBhcmd1bWVudCBzZXF1ZW5jZVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3swfXsxfXswfVwnLmZvcm1hdChcJ2FicmFcJywgXCdjYWRcJykgICAjIGFyZ3VtZW50c1wnIGluZGljZXMgY2FuIGJlIHJlcGVhdGVkXG4gICBcJ2FicmFjYWRhYnJhXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBuYW1lOlxuXG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQobGF0aXR1ZGU9XCczNy4yNE5cJywgbG9uZ2l0dWRlPVwnLTExNS44MVdcJylcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuICAgPj4+IGNvb3JkID0ge1wnbGF0aXR1ZGVcJzogXCczNy4yNE5cJywgXCdsb25naXR1ZGVcJzogXCctMTE1LjgxV1wnfVxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KCoqY29vcmQpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGF0dHJpYnV0ZXM6XG5cbiAgID4+PiBjID0gMy01alxuICAgPj4+IChcJ1RoZSBjb21wbGV4IG51bWJlciB7MH0gaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCB7MC5yZWFsfSBcJ1xuICAgLi4uICBcJ2FuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgezAuaW1hZ30uXCcpLmZvcm1hdChjKVxuICAgXCdUaGUgY29tcGxleCBudW1iZXIgKDMtNWopIGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgMy4wIGFuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgLTUuMC5cJ1xuICAgPj4+IGNsYXNzIFBvaW50KG9iamVjdCk6XG4gICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KTpcbiAgIC4uLiAgICAgICAgIHNlbGYueCwgc2VsZi55ID0geCwgeVxuICAgLi4uICAgICBkZWYgX19zdHJfXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBcJ1BvaW50KHtzZWxmLnh9LCB7c2VsZi55fSlcJy5mb3JtYXQoc2VsZj1zZWxmKVxuICAgLi4uXG4gICA+Pj4gc3RyKFBvaW50KDQsIDIpKVxuICAgXCdQb2ludCg0LCAyKVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBpdGVtczpcblxuICAgPj4+IGNvb3JkID0gKDMsIDUpXG4gICA+Pj4gXCdYOiB7MFswXX07ICBZOiB7MFsxXX1cJy5mb3JtYXQoY29vcmQpXG4gICBcJ1g6IDM7ICBZOiA1XCdcblxuUmVwbGFjaW5nIGBgJXNgYCBhbmQgYGAlcmBgOlxuXG4gICA+Pj4gInJlcHIoKSBzaG93cyBxdW90ZXM6IHswIXJ9OyBzdHIoKSBkb2VzblwndDogezEhc30iLmZvcm1hdChcJ3Rlc3QxXCcsIFwndGVzdDJcJylcbiAgICJyZXByKCkgc2hvd3MgcXVvdGVzOiBcJ3Rlc3QxXCc7IHN0cigpIGRvZXNuXCd0OiB0ZXN0MiJcblxuQWxpZ25pbmcgdGhlIHRleHQgYW5kIHNwZWNpZnlpbmcgYSB3aWR0aDpcblxuICAgPj4+IFwnezA6PDMwfVwnLmZvcm1hdChcJ2xlZnQgYWxpZ25lZFwnKVxuICAgXCdsZWZ0IGFsaWduZWQgICAgICAgICAgICAgICAgICBcJ1xuICAgPj4+IFwnezA6PjMwfVwnLmZvcm1hdChcJ3JpZ2h0IGFsaWduZWRcJylcbiAgIFwnICAgICAgICAgICAgICAgICByaWdodCBhbGlnbmVkXCdcbiAgID4+PiBcJ3swOl4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKVxuICAgXCcgICAgICAgICAgIGNlbnRlcmVkICAgICAgICAgICBcJ1xuICAgPj4+IFwnezA6Kl4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKSAgIyB1c2UgXCcqXCcgYXMgYSBmaWxsIGNoYXJcbiAgIFwnKioqKioqKioqKipjZW50ZXJlZCoqKioqKioqKioqXCdcblxuUmVwbGFjaW5nIGBgJStmYGAsIGBgJS1mYGAsIGFuZCBgYCUgZmBgIGFuZCBzcGVjaWZ5aW5nIGEgc2lnbjpcblxuICAgPj4+IFwnezA6K2Z9OyB7MDorZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgaXQgYWx3YXlzXG4gICBcJyszLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3swOiBmfTsgezA6IGZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnNcbiAgIFwnIDMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezA6LWZ9OyB7MDotZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgb25seSB0aGUgbWludXMgLS0gc2FtZSBhcyBcJ3swOmZ9OyB7MDpmfVwnXG4gICBcJzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuXG5SZXBsYWNpbmcgYGAleGBgIGFuZCBgYCVvYGAgYW5kIGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGRpZmZlcmVudFxuYmFzZXM6XG5cbiAgID4+PiAjIGZvcm1hdCBhbHNvIHN1cHBvcnRzIGJpbmFyeSBudW1iZXJzXG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOnh9OyAgb2N0OiB7MDpvfTsgIGJpbjogezA6Yn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMmE7ICBvY3Q6IDUyOyAgYmluOiAxMDEwMTBcJ1xuICAgPj4+ICMgd2l0aCAweCwgMG8sIG9yIDBiIGFzIHByZWZpeDpcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6I3h9OyAgb2N0OiB7MDojb307ICBiaW46IHswOiNifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAweDJhOyAgb2N0OiAwbzUyOyAgYmluOiAwYjEwMTAxMFwnXG5cbkV4cHJlc3NpbmcgYSBwZXJjZW50YWdlOlxuXG4gICA+Pj4gcG9pbnRzID0gMTkuNVxuICAgPj4+IHRvdGFsID0gMjJcbiAgID4+PiBcJ0NvcnJlY3QgYW5zd2VyczogezA6LjIlfS5cJy5mb3JtYXQocG9pbnRzL3RvdGFsKVxuICAgXCdDb3JyZWN0IGFuc3dlcnM6IDg4LjY0JVwnXG5cblVzaW5nIHR5cGUtc3BlY2lmaWMgZm9ybWF0dGluZzpcblxuICAgPj4+IGltcG9ydCBkYXRldGltZVxuICAgPj4+IGQgPSBkYXRldGltZS5kYXRldGltZSgyMDEwLCA3LCA0LCAxMiwgMTUsIDU4KVxuICAgPj4+IFwnezA6JVktJW0tJWQgJUg6JU06JVN9XCcuZm9ybWF0KGQpXG4gICBcJzIwMTAtMDctMDQgMTI6MTU6NThcJ1xuXG5OZXN0aW5nIGFyZ3VtZW50cyBhbmQgbW9yZSBjb21wbGV4IGV4YW1wbGVzOlxuXG4gICA+Pj4gZm9yIGFsaWduLCB0ZXh0IGluIHppcChcJzxePlwnLCBbXCdsZWZ0XCcsIFwnY2VudGVyXCcsIFwncmlnaHRcJ10pOlxuICAgLi4uICAgICBcJ3swOnthbGlnbn17ZmlsbH0xNn1cJy5mb3JtYXQodGV4dCwgZmlsbD1hbGlnbiwgYWxpZ249YWxpZ24pXG4gICAuLi5cbiAgIFwnbGVmdDw8PDw8PDw8PDw8PFwnXG4gICBcJ15eXl5eY2VudGVyXl5eXl5cJ1xuICAgXCc+Pj4+Pj4+Pj4+PnJpZ2h0XCdcbiAgID4+PlxuICAgPj4+IG9jdGV0cyA9IFsxOTIsIDE2OCwgMCwgMV1cbiAgID4+PiBcJ3swOjAyWH17MTowMlh9ezI6MDJYfXszOjAyWH1cJy5mb3JtYXQoKm9jdGV0cylcbiAgIFwnQzBBODAwMDFcJ1xuICAgPj4+IGludChfLCAxNilcbiAgIDMyMzIyMzU1MjFcbiAgID4+PlxuICAgPj4+IHdpZHRoID0gNVxuICAgPj4+IGZvciBudW0gaW4gcmFuZ2UoNSwxMik6XG4gICAuLi4gICAgIGZvciBiYXNlIGluIFwnZFhvYlwnOlxuICAgLi4uICAgICAgICAgcHJpbnQgXCd7MDp7d2lkdGh9e2Jhc2V9fVwnLmZvcm1hdChudW0sIGJhc2U9YmFzZSwgd2lkdGg9d2lkdGgpLFxuICAgLi4uICAgICBwcmludFxuICAgLi4uXG4gICAgICAgNSAgICAgNSAgICAgNSAgIDEwMVxuICAgICAgIDYgICAgIDYgICAgIDYgICAxMTBcbiAgICAgICA3ICAgICA3ICAgICA3ICAgMTExXG4gICAgICAgOCAgICAgOCAgICAxMCAgMTAwMFxuICAgICAgIDkgICAgIDkgICAgMTEgIDEwMDFcbiAgICAgIDEwICAgICBBICAgIDEyICAxMDEwXG4gICAgICAxMSAgICAgQiAgICAxMyAgMTAxMVxuJywKKyAnZm9ybWF0c3RyaW5ncyc6IHUnXG5Gb3JtYXQgU3RyaW5nIFN5bnRheFxuKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgc3RyLmZvcm1hdCgpYGAgbWV0aG9kIGFuZCB0aGUgYGBGb3JtYXR0ZXJgYCBjbGFzcyBzaGFyZSB0aGUgc2FtZVxuc3ludGF4IGZvciBmb3JtYXQgc3RyaW5ncyAoYWx0aG91Z2ggaW4gdGhlIGNhc2Ugb2YgYGBGb3JtYXR0ZXJgYCxcbnN1YmNsYXNzZXMgY2FuIGRlZmluZSB0aGVpciBvd24gZm9ybWF0IHN0cmluZyBzeW50YXgpLlxuXG5Gb3JtYXQgc3RyaW5ncyBjb250YWluICJyZXBsYWNlbWVudCBmaWVsZHMiIHN1cnJvdW5kZWQgYnkgY3VybHkgYnJhY2VzXG5gYHt9YGAuIEFueXRoaW5nIHRoYXQgaXMgbm90IGNvbnRhaW5lZCBpbiBicmFjZXMgaXMgY29uc2lkZXJlZCBsaXRlcmFsXG50ZXh0LCB3aGljaCBpcyBjb3BpZWQgdW5jaGFuZ2VkIHRvIHRoZSBvdXRwdXQuICBJZiB5b3UgbmVlZCB0byBpbmNsdWRlXG5hIGJyYWNlIGNoYXJhY3RlciBpbiB0aGUgbGl0ZXJhbCB0ZXh0LCBpdCBjYW4gYmUgZXNjYXBlZCBieSBkb3VibGluZzpcbmBge3tgYCBhbmQgYGB9fWBgLlxuXG5UaGUgZ3JhbW1hciBmb3IgYSByZXBsYWNlbWVudCBmaWVsZCBpcyBhcyBmb2xsb3dzOlxuXG4gICAgICByZXBsYWNlbWVudF9maWVsZCA6Oj0gInsiIFtmaWVsZF9uYW1lXSBbIiEiIGNvbnZlcnNpb25dIFsiOiIgZm9ybWF0X3NwZWNdICJ9IlxuICAgICAgZmllbGRfbmFtZSAgICAgICAgOjo9IGFyZ19uYW1lICgiLiIgYXR0cmlidXRlX25hbWUgfCAiWyIgZWxlbWVudF9pbmRleCAiXSIpKlxuICAgICAgYXJnX25hbWUgICAgICAgICAgOjo9IFtpZGVudGlmaWVyIHwgaW50ZWdlcl1cbiAgICAgIGF0dHJpYnV0ZV9uYW1lICAgIDo6PSBpZGVudGlmaWVyXG4gICAgICBlbGVtZW50X2luZGV4ICAgICA6Oj0gaW50ZWdlciB8IGluZGV4X3N0cmluZ1xuICAgICAgaW5kZXhfc3RyaW5nICAgICAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIl0iPiArXG4gICAgICBjb252ZXJzaW9uICAgICAgICA6Oj0gInIiIHwgInMiXG4gICAgICBmb3JtYXRfc3BlYyAgICAgICA6Oj0gPGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uPlxuXG5JbiBsZXNzIGZvcm1hbCB0ZXJtcywgdGhlIHJlcGxhY2VtZW50IGZpZWxkIGNhbiBzdGFydCB3aXRoIGFcbipmaWVsZF9uYW1lKiB0aGF0IHNwZWNpZmllcyB0aGUgb2JqZWN0IHdob3NlIHZhbHVlIGlzIHRvIGJlIGZvcm1hdHRlZFxuYW5kIGluc2VydGVkIGludG8gdGhlIG91dHB1dCBpbnN0ZWFkIG9mIHRoZSByZXBsYWNlbWVudCBmaWVsZC4gVGhlXG4qZmllbGRfbmFtZSogaXMgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhICAqY29udmVyc2lvbiogZmllbGQsIHdoaWNoIGlzXG5wcmVjZWRlZCBieSBhbiBleGNsYW1hdGlvbiBwb2ludCBgYFwnIVwnYGAsIGFuZCBhICpmb3JtYXRfc3BlYyosIHdoaWNoXG5pcyBwcmVjZWRlZCBieSBhIGNvbG9uIGBgXCc6XCdgYC4gIFRoZXNlIHNwZWNpZnkgYSBub24tZGVmYXVsdCBmb3JtYXRcbmZvciB0aGUgcmVwbGFjZW1lbnQgdmFsdWUuXG5cblNlZSBhbHNvIHRoZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogc2VjdGlvbi5cblxuVGhlICpmaWVsZF9uYW1lKiBpdHNlbGYgYmVnaW5zIHdpdGggYW4gKmFyZ19uYW1lKiB0aGF0IGlzIGVpdGhlclxuZWl0aGVyIGEgbnVtYmVyIG9yIGEga2V5d29yZC4gIElmIGl0XCdzIGEgbnVtYmVyLCBpdCByZWZlcnMgdG8gYVxucG9zaXRpb25hbCBhcmd1bWVudCwgYW5kIGlmIGl0XCdzIGEga2V5d29yZCwgaXQgcmVmZXJzIHRvIGEgbmFtZWRcbmtleXdvcmQgYXJndW1lbnQuICBJZiB0aGUgbnVtZXJpY2FsIGFyZ19uYW1lcyBpbiBhIGZvcm1hdCBzdHJpbmcgYXJlXG4wLCAxLCAyLCAuLi4gaW4gc2VxdWVuY2UsIHRoZXkgY2FuIGFsbCBiZSBvbWl0dGVkIChub3QganVzdCBzb21lKSBhbmRcbnRoZSBudW1iZXJzIDAsIDEsIDIsIC4uLiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhhdCBvcmRlci5cblRoZSAqYXJnX25hbWUqIGNhbiBiZSBmb2xsb3dlZCBieSBhbnkgbnVtYmVyIG9mIGluZGV4IG9yIGF0dHJpYnV0ZVxuZXhwcmVzc2lvbnMuIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYGBcJy5uYW1lXCdgYCBzZWxlY3RzIHRoZSBuYW1lZFxuYXR0cmlidXRlIHVzaW5nIGBgZ2V0YXR0cigpYGAsIHdoaWxlIGFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm1cbmBgXCdbaW5kZXhdXCdgYCBkb2VzIGFuIGluZGV4IGxvb2t1cCB1c2luZyBgYF9fZ2V0aXRlbV9fKClgYC5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNzogVGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVycyBjYW4gYmVcbm9taXR0ZWQsIHNvIGBgXCd7fSB7fVwnYGAgaXMgZXF1aXZhbGVudCB0byBgYFwnezB9IHsxfVwnYGAuXG5cblNvbWUgc2ltcGxlIGZvcm1hdCBzdHJpbmcgZXhhbXBsZXM6XG5cbiAgICJGaXJzdCwgdGhvdSBzaGFsdCBjb3VudCB0byB7MH0iICMgUmVmZXJlbmNlcyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiQnJpbmcgbWUgYSB7fSIgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0bHkgcmVmZXJlbmNlcyB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkZyb20ge30gdG8ge30iICAgICAgICAgICAgICAgICAgIyBTYW1lIGFzICJGcm9tIHswfSB0byB7MX0iXG4gICAiTXkgcXVlc3QgaXMge25hbWV9IiAgICAgICAgICAgICAjIFJlZmVyZW5jZXMga2V5d29yZCBhcmd1bWVudCBcJ25hbWVcJ1xuICAgIldlaWdodCBpbiB0b25zIHswLndlaWdodH0iICAgICAgIyBcJ3dlaWdodFwnIGF0dHJpYnV0ZSBvZiBmaXJzdCBwb3NpdGlvbmFsIGFyZ1xuICAgIlVuaXRzIGRlc3Ryb3llZDoge3BsYXllcnNbMF19IiAgIyBGaXJzdCBlbGVtZW50IG9mIGtleXdvcmQgYXJndW1lbnQgXCdwbGF5ZXJzXCcuXG5cblRoZSAqY29udmVyc2lvbiogZmllbGQgY2F1c2VzIGEgdHlwZSBjb2VyY2lvbiBiZWZvcmUgZm9ybWF0dGluZy5cbk5vcm1hbGx5LCB0aGUgam9iIG9mIGZvcm1hdHRpbmcgYSB2YWx1ZSBpcyBkb25lIGJ5IHRoZVxuYGBfX2Zvcm1hdF9fKClgYCBtZXRob2Qgb2YgdGhlIHZhbHVlIGl0c2VsZi4gIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXNcbml0IGlzIGRlc2lyYWJsZSB0byBmb3JjZSBhIHR5cGUgdG8gYmUgZm9ybWF0dGVkIGFzIGEgc3RyaW5nLFxub3ZlcnJpZGluZyBpdHMgb3duIGRlZmluaXRpb24gb2YgZm9ybWF0dGluZy4gIEJ5IGNvbnZlcnRpbmcgdGhlIHZhbHVlXG50byBhIHN0cmluZyBiZWZvcmUgY2FsbGluZyBgYF9fZm9ybWF0X18oKWBgLCB0aGUgbm9ybWFsIGZvcm1hdHRpbmdcbmxvZ2ljIGlzIGJ5cGFzc2VkLlxuXG5Ud28gY29udmVyc2lvbiBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDogYGBcJyFzXCdgYCB3aGljaCBjYWxsc1xuYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZSwgYW5kIGBgXCchclwnYGAgd2hpY2ggY2FsbHMgYGByZXByKClgYC5cblxuU29tZSBleGFtcGxlczpcblxuICAgIkhhcm9sZFwncyBhIGNsZXZlciB7MCFzfSIgICAgICAgICMgQ2FsbHMgc3RyKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiQnJpbmcgb3V0IHRoZSBob2x5IHtuYW1lIXJ9IiAgICAjIENhbGxzIHJlcHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcblxuVGhlICpmb3JtYXRfc3BlYyogZmllbGQgY29udGFpbnMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGUgdmFsdWVcbnNob3VsZCBiZSBwcmVzZW50ZWQsIGluY2x1ZGluZyBzdWNoIGRldGFpbHMgYXMgZmllbGQgd2lkdGgsIGFsaWdubWVudCxcbnBhZGRpbmcsIGRlY2ltYWwgcHJlY2lzaW9uIGFuZCBzbyBvbi4gIEVhY2ggdmFsdWUgdHlwZSBjYW4gZGVmaW5lIGl0c1xub3duICJmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UiIG9yIGludGVycHJldGF0aW9uIG9mIHRoZSAqZm9ybWF0X3NwZWMqLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIHN1cHBvcnQgYSBjb21tb24gZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlLCB3aGljaFxuaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uXG5cbkEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHNcbndpdGhpbiBpdC4gVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGRcbm5hbWU7IGNvbnZlcnNpb24gZmxhZ3MgYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGVcbnJlcGxhY2VtZW50IGZpZWxkcyB3aXRoaW4gdGhlIGZvcm1hdF9zcGVjIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgdGhlXG4qZm9ybWF0X3NwZWMqIHN0cmluZyBpcyBpbnRlcnByZXRlZC4gVGhpcyBhbGxvd3MgdGhlIGZvcm1hdHRpbmcgb2YgYVxudmFsdWUgdG8gYmUgZHluYW1pY2FsbHkgc3BlY2lmaWVkLlxuXG5TZWUgdGhlICpGb3JtYXQgZXhhbXBsZXMqIHNlY3Rpb24gZm9yIHNvbWUgZXhhbXBsZXMuXG5cblxuRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iRm9ybWF0IHNwZWNpZmljYXRpb25zIiBhcmUgdXNlZCB3aXRoaW4gcmVwbGFjZW1lbnQgZmllbGRzIGNvbnRhaW5lZFxud2l0aGluIGEgZm9ybWF0IHN0cmluZyB0byBkZWZpbmUgaG93IGluZGl2aWR1YWwgdmFsdWVzIGFyZSBwcmVzZW50ZWRcbihzZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KikuICBUaGV5IGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGVcbmJ1aWx0LWluIGBgZm9ybWF0KClgYCBmdW5jdGlvbi4gIEVhY2ggZm9ybWF0dGFibGUgdHlwZSBtYXkgZGVmaW5lIGhvd1xudGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGlzIHRvIGJlIGludGVycHJldGVkLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIGZvcm1hdFxuc3BlY2lmaWNhdGlvbnMsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhcmUgb25seVxuc3VwcG9ydGVkIGJ5IHRoZSBudW1lcmljIHR5cGVzLlxuXG5BIGdlbmVyYWwgY29udmVudGlvbiBpcyB0aGF0IGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgKGBgIiJgYCkgcHJvZHVjZXNcbnRoZSBzYW1lIHJlc3VsdCBhcyBpZiB5b3UgaGFkIGNhbGxlZCBgYHN0cigpYGAgb24gdGhlIHZhbHVlLiBBIG5vbi1cbmVtcHR5IGZvcm1hdCBzdHJpbmcgdHlwaWNhbGx5IG1vZGlmaWVzIHRoZSByZXN1bHQuXG5cblRoZSBnZW5lcmFsIGZvcm0gb2YgYSAqc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciogaXM6XG5cbiAgIGZvcm1hdF9zcGVjIDo6PSBbW2ZpbGxdYWxpZ25dW3NpZ25dWyNdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICAgZmlsbCAgICAgICAgOjo9IDxhIGNoYXJhY3RlciBvdGhlciB0aGFuIFwnfVwnPlxuICAgYWxpZ24gICAgICAgOjo9ICI8IiB8ICI+IiB8ICI9IiB8ICJeIlxuICAgc2lnbiAgICAgICAgOjo9ICIrIiB8ICItIiB8ICIgIlxuICAgd2lkdGggICAgICAgOjo9IGludGVnZXJcbiAgIHByZWNpc2lvbiAgIDo6PSBpbnRlZ2VyXG4gICB0eXBlICAgICAgICA6Oj0gImIiIHwgImMiIHwgImQiIHwgImUiIHwgIkUiIHwgImYiIHwgIkYiIHwgImciIHwgIkciIHwgIm4iIHwgIm8iIHwgInMiIHwgIngiIHwgIlgiIHwgIiUiXG5cblRoZSAqZmlsbCogY2hhcmFjdGVyIGNhbiBiZSBhbnkgY2hhcmFjdGVyIG90aGVyIHRoYW4gXCd9XCcgKHdoaWNoXG5zaWduaWZpZXMgdGhlIGVuZCBvZiB0aGUgZmllbGQpLiAgVGhlIHByZXNlbmNlIG9mIGEgZmlsbCBjaGFyYWN0ZXIgaXNcbnNpZ25hbGVkIGJ5IHRoZSAqbmV4dCogY2hhcmFjdGVyLCB3aGljaCBtdXN0IGJlIG9uZSBvZiB0aGUgYWxpZ25tZW50XG5vcHRpb25zLiBJZiB0aGUgc2Vjb25kIGNoYXJhY3RlciBvZiAqZm9ybWF0X3NwZWMqIGlzIG5vdCBhIHZhbGlkXG5hbGlnbm1lbnQgb3B0aW9uLCB0aGVuIGl0IGlzIGFzc3VtZWQgdGhhdCBib3RoIHRoZSBmaWxsIGNoYXJhY3RlciBhbmRcbnRoZSBhbGlnbm1lbnQgb3B0aW9uIGFyZSBhYnNlbnQuXG5cblRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGFsaWdubWVudCBvcHRpb25zIGlzIGFzIGZvbGxvd3M6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJzxcJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGxlZnQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnPlwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgcmlnaHQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCc9XCdgYCAgIHwgRm9yY2VzIHRoZSBwYWRkaW5nIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgc2lnbiAoaWYgYW55KSAgICB8XG4gICB8ICAgICAgICAgICB8IGJ1dCBiZWZvcmUgdGhlIGRpZ2l0cy4gIFRoaXMgaXMgdXNlZCBmb3IgcHJpbnRpbmcgZmllbGRzICAgfFxuICAgfCAgICAgICAgICAgfCBpbiB0aGUgZm9ybSBcJyswMDAwMDAxMjBcJy4gVGhpcyBhbGlnbm1lbnQgb3B0aW9uIGlzIG9ubHkgICAgfFxuICAgfCAgICAgICAgICAgfCB2YWxpZCBmb3IgbnVtZXJpYyB0eXBlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdeXCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBjZW50ZXJlZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZSB0aGF0IHVubGVzcyBhIG1pbmltdW0gZmllbGQgd2lkdGggaXMgZGVmaW5lZCwgdGhlIGZpZWxkIHdpZHRoXG53aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBkYXRhIHRvIGZpbGwgaXQsIHNvIHRoYXQgdGhlXG5hbGlnbm1lbnQgb3B0aW9uIGhhcyBubyBtZWFuaW5nIGluIHRoaXMgY2FzZS5cblxuVGhlICpzaWduKiBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgbnVtYmVyIHR5cGVzLCBhbmQgY2FuIGJlIG9uZSBvZlxudGhlIGZvbGxvd2luZzpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnK1wnYGAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBmb3IgYm90aCBwb3NpdGl2ZSBhcyAgfFxuICAgfCAgICAgICAgICAgfCB3ZWxsIGFzIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCctXCdgYCAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIG5lZ2F0aXZlICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlcnMgKHRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IpLiAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgc3BhY2UgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBsZWFkaW5nIHNwYWNlIHNob3VsZCBiZSB1c2VkIG9uIHBvc2l0aXZlICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlcnMsIGFuZCBhIG1pbnVzIHNpZ24gb24gbmVnYXRpdmUgbnVtYmVycy4gICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlIGBgXCcjXCdgYCBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgaW50ZWdlcnMsIGFuZCBvbmx5IGZvciBiaW5hcnksXG5vY3RhbCwgb3IgaGV4YWRlY2ltYWwgb3V0cHV0LiAgSWYgcHJlc2VudCwgaXQgc3BlY2lmaWVzIHRoYXQgdGhlXG5vdXRwdXQgd2lsbCBiZSBwcmVmaXhlZCBieSBgYFwnMGJcJ2BgLCBgYFwnMG9cJ2BgLCBvciBgYFwnMHhcJ2BgLFxucmVzcGVjdGl2ZWx5LlxuXG5UaGUgYGBcJyxcJ2BgIG9wdGlvbiBzaWduYWxzIHRoZSB1c2Ugb2YgYSBjb21tYSBmb3IgYSB0aG91c2FuZHNcbnNlcGFyYXRvci4gRm9yIGEgbG9jYWxlIGF3YXJlIHNlcGFyYXRvciwgdXNlIHRoZSBgYFwnblwnYGAgaW50ZWdlclxucHJlc2VudGF0aW9uIHR5cGUgaW5zdGVhZC5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNzogQWRkZWQgdGhlIGBgXCcsXCdgYCBvcHRpb24gKHNlZSBhbHNvICoqUEVQXG4zNzgqKikuXG5cbip3aWR0aCogaXMgYSBkZWNpbWFsIGludGVnZXIgZGVmaW5pbmcgdGhlIG1pbmltdW0gZmllbGQgd2lkdGguICBJZiBub3RcbnNwZWNpZmllZCwgdGhlbiB0aGUgZmllbGQgd2lkdGggd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjb250ZW50LlxuXG5JZiB0aGUgKndpZHRoKiBmaWVsZCBpcyBwcmVjZWRlZCBieSBhIHplcm8gKGBgXCcwXCdgYCkgY2hhcmFjdGVyLCB0aGlzXG5lbmFibGVzIHplcm8tcGFkZGluZy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhbiAqYWxpZ25tZW50KiB0eXBlIG9mXG5gYFwnPVwnYGAgYW5kIGEgKmZpbGwqIGNoYXJhY3RlciBvZiBgYFwnMFwnYGAuXG5cblRoZSAqcHJlY2lzaW9uKiBpcyBhIGRlY2ltYWwgbnVtYmVyIGluZGljYXRpbmcgaG93IG1hbnkgZGlnaXRzIHNob3VsZFxuYmUgZGlzcGxheWVkIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlXG5mb3JtYXR0ZWQgd2l0aCBgYFwnZlwnYGAgYW5kIGBgXCdGXCdgYCwgb3IgYmVmb3JlIGFuZCBhZnRlciB0aGUgZGVjaW1hbFxucG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgZm9ybWF0dGVkIHdpdGggYGBcJ2dcJ2BgIG9yIGBgXCdHXCdgYC5cbkZvciBub24tbnVtYmVyIHR5cGVzIHRoZSBmaWVsZCBpbmRpY2F0ZXMgdGhlIG1heGltdW0gZmllbGQgc2l6ZSAtIGluXG5vdGhlciB3b3JkcywgaG93IG1hbnkgY2hhcmFjdGVycyB3aWxsIGJlIHVzZWQgZnJvbSB0aGUgZmllbGQgY29udGVudC5cblRoZSAqcHJlY2lzaW9uKiBpcyBub3QgYWxsb3dlZCBmb3IgaW50ZWdlciB2YWx1ZXMuXG5cbkZpbmFsbHksIHRoZSAqdHlwZSogZGV0ZXJtaW5lcyBob3cgdGhlIGRhdGEgc2hvdWxkIGJlIHByZXNlbnRlZC5cblxuVGhlIGF2YWlsYWJsZSBzdHJpbmcgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnc1wnYGAgICB8IFN0cmluZyBmb3JtYXQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdHlwZSBmb3Igc3RyaW5ncyBhbmQgICAgfFxuICAgfCAgICAgICAgICAgfCBtYXkgYmUgb21pdHRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzIGBgXCdzXCdgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgYXZhaWxhYmxlIGludGVnZXIgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnYlwnYGAgICB8IEJpbmFyeSBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDIuICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2NcJ2BgICAgfCBDaGFyYWN0ZXIuIENvbnZlcnRzIHRoZSBpbnRlZ2VyIHRvIHRoZSBjb3JyZXNwb25kaW5nICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgdW5pY29kZSBjaGFyYWN0ZXIgYmVmb3JlIHByaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnZFwnYGAgICB8IERlY2ltYWwgSW50ZWdlci4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTAuICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ29cJ2BgICAgfCBPY3RhbCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDguICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCd4XCdgYCAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIGxvd2VyLSAgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgbGV0dGVycyBmb3IgdGhlIGRpZ2l0cyBhYm92ZSA5LiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ1hcJ2BgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgdXBwZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnblwnYGAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFwnZFwnYGAsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXIgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzIGBgXCdkXCdgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5JbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgcHJlc2VudGF0aW9uIHR5cGVzLCBpbnRlZ2VycyBjYW4gYmUgZm9ybWF0dGVkXG53aXRoIHRoZSBmbG9hdGluZyBwb2ludCBwcmVzZW50YXRpb24gdHlwZXMgbGlzdGVkIGJlbG93IChleGNlcHRcbmBgXCduXCdgYCBhbmQgTm9uZSkuIFdoZW4gZG9pbmcgc28sIGBgZmxvYXQoKWBgIGlzIHVzZWQgdG8gY29udmVydCB0aGVcbmludGVnZXIgdG8gYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYmVmb3JlIGZvcm1hdHRpbmcuXG5cblRoZSBhdmFpbGFibGUgcHJlc2VudGF0aW9uIHR5cGVzIGZvciBmbG9hdGluZyBwb2ludCBhbmQgZGVjaW1hbCB2YWx1ZXNcbmFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnZVwnYGAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBQcmludHMgdGhlIG51bWJlciBpbiBzY2llbnRpZmljICAgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBub3RhdGlvbiB1c2luZyB0aGUgbGV0dGVyIFwnZVwnIHRvIGluZGljYXRlIHRoZSBleHBvbmVudC4gICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gU2FtZSBhcyBgYFwnZVwnYGAgZXhjZXB0IGl0IHVzZXMgYW4gdXBwZXIgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIFwnRVwnIGFzIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2ZcJ2BgICAgfCBGaXhlZCBwb2ludC4gRGlzcGxheXMgdGhlIG51bWJlciBhcyBhIGZpeGVkLXBvaW50IG51bWJlci4gIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdGXCdgYCAgIHwgRml4ZWQgcG9pbnQuIFNhbWUgYXMgYGBcJ2ZcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdnXCdgYCAgIHwgR2VuZXJhbCBmb3JtYXQuICBGb3IgYSBnaXZlbiBwcmVjaXNpb24gYGBwID49IDFgYCwgdGhpcyAgICB8XG4gICB8ICAgICAgICAgICB8IHJvdW5kcyB0aGUgbnVtYmVyIHRvIGBgcGBgIHNpZ25pZmljYW50IGRpZ2l0cyBhbmQgdGhlbiAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXRzIHRoZSByZXN1bHQgaW4gZWl0aGVyIGZpeGVkLXBvaW50IGZvcm1hdCBvciBpbiAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2NpZW50aWZpYyBub3RhdGlvbiwgZGVwZW5kaW5nIG9uIGl0cyBtYWduaXR1ZGUuICBUaGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2UgcnVsZXMgYXJlIGFzIGZvbGxvd3M6IHN1cHBvc2UgdGhhdCB0aGUgcmVzdWx0ICAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSBgYFwnZVwnYGAgYW5kIHByZWNpc2lvbiAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYHAtMWBgIHdvdWxkIGhhdmUgZXhwb25lbnQgYGBleHBgYC4gIFRoZW4gaWYgYGAtNCA8PSBleHAgIHxcbiAgIHwgICAgICAgICAgIHwgPCBwYGAsIHRoZSBudW1iZXIgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgXCdmXCdgYCBhbmQgcHJlY2lzaW9uIGBgcC0xLWV4cGBgLiBPdGhlcndpc2UsIHRoZSBudW1iZXIgICB8XG4gICB8ICAgICAgICAgICB8IGlzIGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAuIEluIGJvdGggY2FzZXMgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyBhcmUgICAgfFxuICAgfCAgICAgICAgICAgfCByZW1vdmVkIGZyb20gdGhlIHNpZ25pZmljYW5kLCBhbmQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYWxzbyByZW1vdmVkIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgZGlnaXRzIGZvbGxvd2luZyAgICB8XG4gICB8ICAgICAgICAgICB8IGl0LiAgUG9zdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSAgfFxuICAgfCAgICAgICAgICAgfCB6ZXJvLCBhbmQgbmFucywgYXJlIGZvcm1hdHRlZCBhcyBgYGluZmBgLCBgYC1pbmZgYCwgYGAwYGAsIHxcbiAgIHwgICAgICAgICAgIHwgYGAtMGBgIGFuZCBgYG5hbmBgIHJlc3BlY3RpdmVseSwgcmVnYXJkbGVzcyBvZiB0aGUgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2lvbi4gIEEgcHJlY2lzaW9uIG9mIGBgMGBgIGlzIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCAgfFxuICAgfCAgICAgICAgICAgfCB0byBhIHByZWNpc2lvbiBvZiBgYDFgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdHXCdgYCAgIHwgR2VuZXJhbCBmb3JtYXQuIFNhbWUgYXMgYGBcJ2dcJ2BgIGV4Y2VwdCBzd2l0Y2hlcyB0byBgYFwnRVwnYGAgfFxuICAgfCAgICAgICAgICAgfCBpZiB0aGUgbnVtYmVyIGdldHMgdG9vIGxhcmdlLiBUaGUgcmVwcmVzZW50YXRpb25zIG9mICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgaW5maW5pdHkgYW5kIE5hTiBhcmUgdXBwZXJjYXNlZCwgdG9vLiAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnblwnYGAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFwnZ1wnYGAsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXIgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCclXCdgYCAgIHwgUGVyY2VudGFnZS4gTXVsdGlwbGllcyB0aGUgbnVtYmVyIGJ5IDEwMCBhbmQgZGlzcGxheXMgaW4gICB8XG4gICB8ICAgICAgICAgICB8IGZpeGVkIChgYFwnZlwnYGApIGZvcm1hdCwgZm9sbG93ZWQgYnkgYSBwZXJjZW50IHNpZ24uICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyBgYFwnZ1wnYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuXG5Gb3JtYXQgZXhhbXBsZXNcbj09PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gY29udGFpbnMgZXhhbXBsZXMgb2YgdGhlIG5ldyBmb3JtYXQgc3ludGF4IGFuZCBjb21wYXJpc29uXG53aXRoIHRoZSBvbGQgYGAlYGAtZm9ybWF0dGluZy5cblxuSW4gbW9zdCBvZiB0aGUgY2FzZXMgdGhlIHN5bnRheCBpcyBzaW1pbGFyIHRvIHRoZSBvbGRcbmBgJWBgLWZvcm1hdHRpbmcsIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBgYHt9YGAgYW5kIHdpdGggYGA6YGAgdXNlZFxuaW5zdGVhZCBvZiBgYCVgYC4gRm9yIGV4YW1wbGUsIGBgXCclMDMuMmZcJ2BgIGNhbiBiZSB0cmFuc2xhdGVkIHRvXG5gYFwnezowMy4yZn1cJ2BgLlxuXG5UaGUgbmV3IGZvcm1hdCBzeW50YXggYWxzbyBzdXBwb3J0cyBuZXcgYW5kIGRpZmZlcmVudCBvcHRpb25zLCBzaG93blxuaW4gdGhlIGZvbGxvdyBleGFtcGxlcy5cblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBwb3NpdGlvbjpcblxuICAgPj4+IFwnezB9LCB7MX0sIHsyfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3t9LCB7fSwge31cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJykgICMgMi43KyBvbmx5XG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoKlwnYWJjXCcpICAgICAgIyB1bnBhY2tpbmcgYXJndW1lbnQgc2VxdWVuY2VcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7MH17MX17MH1cJy5mb3JtYXQoXCdhYnJhXCcsIFwnY2FkXCcpICAgIyBhcmd1bWVudHNcJyBpbmRpY2VzIGNhbiBiZSByZXBlYXRlZFxuICAgXCdhYnJhY2FkYWJyYVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgbmFtZTpcblxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KGxhdGl0dWRlPVwnMzcuMjROXCcsIGxvbmdpdHVkZT1cJy0xMTUuODFXXCcpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcbiAgID4+PiBjb29yZCA9IHtcJ2xhdGl0dWRlXCc6IFwnMzcuMjROXCcsIFwnbG9uZ2l0dWRlXCc6IFwnLTExNS44MVdcJ31cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdCgqKmNvb3JkKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBhdHRyaWJ1dGVzOlxuXG4gICA+Pj4gYyA9IDMtNWpcbiAgID4+PiAoXCdUaGUgY29tcGxleCBudW1iZXIgezB9IGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgezAucmVhbH0gXCdcbiAgIC4uLiAgXCdhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IHswLmltYWd9LlwnKS5mb3JtYXQoYylcbiAgIFwnVGhlIGNvbXBsZXggbnVtYmVyICgzLTVqKSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IDMuMCBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IC01LjAuXCdcbiAgID4+PiBjbGFzcyBQb2ludChvYmplY3QpOlxuICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6XG4gICAuLi4gICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHlcbiAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdQb2ludCh7c2VsZi54fSwge3NlbGYueX0pXCcuZm9ybWF0KHNlbGY9c2VsZilcbiAgIC4uLlxuICAgPj4+IHN0cihQb2ludCg0LCAyKSlcbiAgIFwnUG9pbnQoNCwgMilcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgaXRlbXM6XG5cbiAgID4+PiBjb29yZCA9ICgzLCA1KVxuICAgPj4+IFwnWDogezBbMF19OyAgWTogezBbMV19XCcuZm9ybWF0KGNvb3JkKVxuICAgXCdYOiAzOyAgWTogNVwnXG5cblJlcGxhY2luZyBgYCVzYGAgYW5kIGBgJXJgYDpcblxuICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7IXJ9OyBzdHIoKSBkb2VzblwndDogeyFzfSIuZm9ybWF0KFwndGVzdDFcJywgXCd0ZXN0MlwnKVxuICAgInJlcHIoKSBzaG93cyBxdW90ZXM6IFwndGVzdDFcJzsgc3RyKCkgZG9lc25cJ3Q6IHRlc3QyIlxuXG5BbGlnbmluZyB0aGUgdGV4dCBhbmQgc3BlY2lmeWluZyBhIHdpZHRoOlxuXG4gICA+Pj4gXCd7OjwzMH1cJy5mb3JtYXQoXCdsZWZ0IGFsaWduZWRcJylcbiAgIFwnbGVmdCBhbGlnbmVkICAgICAgICAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6PjMwfVwnLmZvcm1hdChcJ3JpZ2h0IGFsaWduZWRcJylcbiAgIFwnICAgICAgICAgICAgICAgICByaWdodCBhbGlnbmVkXCdcbiAgID4+PiBcJ3s6XjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpXG4gICBcJyAgICAgICAgICAgY2VudGVyZWQgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7OipeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJykgICMgdXNlIFwnKlwnIGFzIGEgZmlsbCBjaGFyXG4gICBcJyoqKioqKioqKioqY2VudGVyZWQqKioqKioqKioqKlwnXG5cblJlcGxhY2luZyBgYCUrZmBgLCBgYCUtZmBgLCBhbmQgYGAlIGZgYCBhbmQgc3BlY2lmeWluZyBhIHNpZ246XG5cbiAgID4+PiBcJ3s6K2Z9OyB7OitmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBpdCBhbHdheXNcbiAgIFwnKzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezogZn07IHs6IGZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnNcbiAgIFwnIDMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezotZn07IHs6LWZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgXCd7OmZ9OyB7OmZ9XCdcbiAgIFwnMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG5cblJlcGxhY2luZyBgYCV4YGAgYW5kIGBgJW9gYCBhbmQgY29udmVydGluZyB0aGUgdmFsdWUgdG8gZGlmZmVyZW50XG5iYXNlczpcblxuICAgPj4+ICMgZm9ybWF0IGFsc28gc3VwcG9ydHMgYmluYXJ5IG51bWJlcnNcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6eH07ICBvY3Q6IHswOm99OyAgYmluOiB7MDpifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAyYTsgIG9jdDogNTI7ICBiaW46IDEwMTAxMFwnXG4gICA+Pj4gIyB3aXRoIDB4LCAwbywgb3IgMGIgYXMgcHJlZml4OlxuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDojeH07ICBvY3Q6IHswOiNvfTsgIGJpbjogezA6I2J9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDB4MmE7ICBvY3Q6IDBvNTI7ICBiaW46IDBiMTAxMDEwXCdcblxuVXNpbmcgdGhlIGNvbW1hIGFzIGEgdGhvdXNhbmRzIHNlcGFyYXRvcjpcblxuICAgPj4+IFwnezosfVwnLmZvcm1hdCgxMjM0NTY3ODkwKVxuICAgXCcxLDIzNCw1NjcsODkwXCdcblxuRXhwcmVzc2luZyBhIHBlcmNlbnRhZ2U6XG5cbiAgID4+PiBwb2ludHMgPSAxOS41XG4gICA+Pj4gdG90YWwgPSAyMlxuICAgPj4+IFwnQ29ycmVjdCBhbnN3ZXJzOiB7Oi4yJX0uXCcuZm9ybWF0KHBvaW50cy90b3RhbClcbiAgIFwnQ29ycmVjdCBhbnN3ZXJzOiA4OC42NCVcJ1xuXG5Vc2luZyB0eXBlLXNwZWNpZmljIGZvcm1hdHRpbmc6XG5cbiAgID4+PiBpbXBvcnQgZGF0ZXRpbWVcbiAgID4+PiBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgNywgNCwgMTIsIDE1LCA1OClcbiAgID4+PiBcJ3s6JVktJW0tJWQgJUg6JU06JVN9XCcuZm9ybWF0KGQpXG4gICBcJzIwMTAtMDctMDQgMTI6MTU6NThcJ1xuXG5OZXN0aW5nIGFyZ3VtZW50cyBhbmQgbW9yZSBjb21wbGV4IGV4YW1wbGVzOlxuXG4gICA+Pj4gZm9yIGFsaWduLCB0ZXh0IGluIHppcChcJzxePlwnLCBbXCdsZWZ0XCcsIFwnY2VudGVyXCcsIFwncmlnaHRcJ10pOlxuICAgLi4uICAgICBcJ3swOnthbGlnbn17ZmlsbH0xNn1cJy5mb3JtYXQodGV4dCwgZmlsbD1hbGlnbiwgYWxpZ249YWxpZ24pXG4gICAuLi5cbiAgIFwnbGVmdDw8PDw8PDw8PDw8PFwnXG4gICBcJ15eXl5eY2VudGVyXl5eXl5cJ1xuICAgXCc+Pj4+Pj4+Pj4+PnJpZ2h0XCdcbiAgID4+PlxuICAgPj4+IG9jdGV0cyA9IFsxOTIsIDE2OCwgMCwgMV1cbiAgID4+PiBcJ3s6MDJYfXs6MDJYfXs6MDJYfXs6MDJYfVwnLmZvcm1hdCgqb2N0ZXRzKVxuICAgXCdDMEE4MDAwMVwnXG4gICA+Pj4gaW50KF8sIDE2KVxuICAgMzIzMjIzNTUyMVxuICAgPj4+XG4gICA+Pj4gd2lkdGggPSA1XG4gICA+Pj4gZm9yIG51bSBpbiByYW5nZSg1LDEyKTpcbiAgIC4uLiAgICAgZm9yIGJhc2UgaW4gXCdkWG9iXCc6XG4gICAuLi4gICAgICAgICBwcmludCBcJ3swOnt3aWR0aH17YmFzZX19XCcuZm9ybWF0KG51bSwgYmFzZT1iYXNlLCB3aWR0aD13aWR0aCksXG4gICAuLi4gICAgIHByaW50XG4gICAuLi5cbiAgICAgICA1ICAgICA1ICAgICA1ICAgMTAxXG4gICAgICAgNiAgICAgNiAgICAgNiAgIDExMFxuICAgICAgIDcgICAgIDcgICAgIDcgICAxMTFcbiAgICAgICA4ICAgICA4ICAgIDEwICAxMDAwXG4gICAgICAgOSAgICAgOSAgICAxMSAgMTAwMVxuICAgICAgMTAgICAgIEEgICAgMTIgIDEwMTBcbiAgICAgIDExICAgICBCICAgIDEzICAxMDExXG4nLAogICdmdW5jdGlvbic6IHUnXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBkZWNvcmF0ZWQgICAgICA6Oj0gZGVjb3JhdG9ycyAoY2xhc3NkZWYgfCBmdW5jZGVmKVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBmdW5jZGVmICAgICAgICA6Oj0gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiICI6IiBzdWl0ZVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAgIioiIGlkZW50aWZpZXIgWywgIioqIiBpZGVudGlmaWVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBzdWJsaXN0ICAgICAgICA6Oj0gcGFyYW1ldGVyICgiLCIgcGFyYW1ldGVyKSogWyIsIl1cbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIHwgIigiIHN1Ymxpc3QgIikiXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZTpcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvOlxuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSB0b3AtbGV2ZWwgcGFyYW1ldGVycyBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqIGBgPWBgXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tIHRoaXMgaXMgYSBzeW50YWN0aWNcbnJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uXG5pcyBleGVjdXRlZC4qKiAgVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuXG50aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhhdCBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzXG51c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhXG5kZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6XG5pZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhXG5saXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBub3RcbndoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgIGlzIHRvIHVzZSBgYE5vbmVgYCBhcyB0aGVcbmRlZmF1bHQsIGFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iYGAqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZ1xuYW55IGV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWZcbnRoZSBmb3JtICJgYCoqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhIGZvcm1zLFxuZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGEgZm9ybSBpcyBtZXJlbHkgYVxuc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjsgYSBmdW5jdGlvbiBkZWZpbmVkIGluXG5hICJgYGRlZmBgIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3IgYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lXG5qdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhIGZvcm0uICBUaGUgImBgZGVmYGAiIGZvcm0gaXNcbmFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXQgYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGVcbnN0YXRlbWVudHMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgImBgZGVmYGAiXG5mb3JtIGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsIGZ1bmN0aW9uXG50aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZCBpbiB0aGVcbm5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cbicsCiAgJ2dsb2JhbCc6IHUnXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBnbG9iYWxfc3RtdCA6Oj0gImdsb2JhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgaXMgYSBkZWNsYXJhdGlvbiB3aGljaCBob2xkcyBmb3IgdGhlIGVudGlyZVxuY3VycmVudCBjb2RlIGJsb2NrLiAgSXQgbWVhbnMgdGhhdCB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIGFyZSB0byBiZVxuaW50ZXJwcmV0ZWQgYXMgZ2xvYmFscy4gIEl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gYXNzaWduIHRvIGEgZ2xvYmFsXG52YXJpYWJsZSB3aXRob3V0IGBgZ2xvYmFsYGAsIGFsdGhvdWdoIGZyZWUgdmFyaWFibGVzIG1heSByZWZlciB0b1xuZ2xvYmFscyB3aXRob3V0IGJlaW5nIGRlY2xhcmVkIGdsb2JhbC5cblxuTmFtZXMgbGlzdGVkIGluIGEgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgdXNlZCBpbiB0aGUgc2FtZVxuY29kZSBibG9jayB0ZXh0dWFsbHkgcHJlY2VkaW5nIHRoYXQgYGBnbG9iYWxgYCBzdGF0ZW1lbnQuXG5cbk5hbWVzIGxpc3RlZCBpbiBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IG11c3Qgbm90IGJlIGRlZmluZWQgYXMgZm9ybWFsXG5wYXJhbWV0ZXJzIG9yIGluIGEgYGBmb3JgYCBsb29wIGNvbnRyb2wgdGFyZ2V0LCBgYGNsYXNzYGAgZGVmaW5pdGlvbixcbmZ1bmN0aW9uIGRlZmluaXRpb24sIG9yIGBgaW1wb3J0YGAgc3RhdGVtZW50LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90XG5lbmZvcmNlIHRoZSBsYXR0ZXIgdHdvIHJlc3RyaWN0aW9ucywgYnV0IHByb2dyYW1zIHNob3VsZCBub3QgYWJ1c2VcbnRoaXMgZnJlZWRvbSwgYXMgZnV0dXJlIGltcGxlbWVudGF0aW9ucyBtYXkgZW5mb3JjZSB0aGVtIG9yIHNpbGVudGx5XG5jaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0uXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIHRoZSBgYGdsb2JhbGBgIGlzIGEgZGlyZWN0aXZlIHRvIHRoZSBwYXJzZXIuXG5JdCBhcHBsaWVzIG9ubHkgdG8gY29kZSBwYXJzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgYGBnbG9iYWxgYFxuc3RhdGVtZW50LiBJbiBwYXJ0aWN1bGFyLCBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IGNvbnRhaW5lZCBpbiBhblxuYGBleGVjYGAgc3RhdGVtZW50IGRvZXMgbm90IGFmZmVjdCB0aGUgY29kZSBibG9jayAqY29udGFpbmluZyogdGhlXG5gYGV4ZWNgYCBzdGF0ZW1lbnQsIGFuZCBjb2RlIGNvbnRhaW5lZCBpbiBhbiBgYGV4ZWNgYCBzdGF0ZW1lbnQgaXNcbnVuYWZmZWN0ZWQgYnkgYGBnbG9iYWxgYCBzdGF0ZW1lbnRzIGluIHRoZSBjb2RlIGNvbnRhaW5pbmcgdGhlXG5gYGV4ZWNgYCBzdGF0ZW1lbnQuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBgYGV2YWwoKWBgLFxuYGBleGVjZmlsZSgpYGAgYW5kIGBgY29tcGlsZSgpYGAgZnVuY3Rpb25zLlxuJywKLSAnaWQtY2xhc3Nlcyc6IHUnXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbmBgXypgYFxuICAgTm90IGltcG9ydGVkIGJ5IGBgZnJvbSBtb2R1bGUgaW1wb3J0ICpgYC4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXJcbiAgIGBgX2BgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2ZcbiAgIHRoZSBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgYGBfX2J1aWx0aW5fX2BgIG1vZHVsZS5cbiAgIFdoZW4gbm90IGluIGludGVyYWN0aXZlIG1vZGUsIGBgX2BgIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgYW5kIGlzXG4gICBub3QgZGVmaW5lZC4gU2VlIHNlY3Rpb24gKlRoZSBpbXBvcnQgc3RhdGVtZW50Ki5cblxuICAgTm90ZTogVGhlIG5hbWUgYGBfYGAgaXMgb2Z0ZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoXG4gICAgIGludGVybmF0aW9uYWxpemF0aW9uOyByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gICAgIGBgZ2V0dGV4dGBgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnZlbnRpb24uXG5cbmBgX18qX19gYFxuICAgU3lzdGVtLWRlZmluZWQgbmFtZXMuIFRoZXNlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnByZXRlclxuICAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiAoaW5jbHVkaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KS4gIEN1cnJlbnRcbiAgIHN5c3RlbSBuYW1lcyBhcmUgZGlzY3Vzc2VkIGluIHRoZSAqU3BlY2lhbCBtZXRob2QgbmFtZXMqIHNlY3Rpb25cbiAgIGFuZCBlbHNld2hlcmUuICBNb3JlIHdpbGwgbGlrZWx5IGJlIGRlZmluZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mXG4gICBQeXRob24uICAqQW55KiB1c2Ugb2YgYGBfXypfX2BgIG5hbWVzLCBpbiBhbnkgY29udGV4dCwgdGhhdCBkb2VzXG4gICBub3QgZm9sbG93IGV4cGxpY2l0bHkgZG9jdW1lbnRlZCB1c2UsIGlzIHN1YmplY3QgdG8gYnJlYWthZ2VcbiAgIHdpdGhvdXQgd2FybmluZy5cblxuYGBfXypgYFxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCi0gJ2lkZW50aWZpZXJzJzogdSdcbklkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbklkZW50aWZpZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzICpuYW1lcyopIGFyZSBkZXNjcmliZWQgYnkgdGhlXG5mb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgaWRlbnRpZmllciA6Oj0gKGxldHRlcnwiXyIpIChsZXR0ZXIgfCBkaWdpdCB8ICJfIikqXG4gICBsZXR0ZXIgICAgIDo6PSBsb3dlcmNhc2UgfCB1cHBlcmNhc2VcbiAgIGxvd2VyY2FzZSAgOjo9ICJhIi4uLiJ6IlxuICAgdXBwZXJjYXNlICA6Oj0gIkEiLi4uIloiXG4gICBkaWdpdCAgICAgIDo6PSAiMCIuLi4iOSJcblxuSWRlbnRpZmllcnMgYXJlIHVubGltaXRlZCBpbiBsZW5ndGguICBDYXNlIGlzIHNpZ25pZmljYW50LlxuXG5cbktleXdvcmRzXG49PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkIGFzIHJlc2VydmVkIHdvcmRzLCBvciAqa2V5d29yZHMqIG9mXG50aGUgbGFuZ3VhZ2UsIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBvcmRpbmFyeSBpZGVudGlmaWVycy4gIFRoZXkgbXVzdFxuYmUgc3BlbGxlZCBleGFjdGx5IGFzIHdyaXR0ZW4gaGVyZTpcblxuICAgYW5kICAgICAgIGRlbCAgICAgICBmcm9tICAgICAgbm90ICAgICAgIHdoaWxlXG4gICBhcyAgICAgICAgZWxpZiAgICAgIGdsb2JhbCAgICBvciAgICAgICAgd2l0aFxuICAgYXNzZXJ0ICAgIGVsc2UgICAgICBpZiAgICAgICAgcGFzcyAgICAgIHlpZWxkXG4gICBicmVhayAgICAgZXhjZXB0ICAgIGltcG9ydCAgICBwcmludFxuICAgY2xhc3MgICAgIGV4ZWMgICAgICBpbiAgICAgICAgcmFpc2VcbiAgIGNvbnRpbnVlICBmaW5hbGx5ICAgaXMgICAgICAgIHJldHVyblxuICAgZGVmICAgICAgIGZvciAgICAgICBsYW1iZGEgICAgdHJ5XG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IGBgTm9uZWBgIGJlY2FtZSBhIGNvbnN0YW50IGFuZCBpcyBub3dcbnJlY29nbml6ZWQgYnkgdGhlIGNvbXBpbGVyIGFzIGEgbmFtZSBmb3IgdGhlIGJ1aWx0LWluIG9iamVjdCBgYE5vbmVgYC5cbkFsdGhvdWdoIGl0IGlzIG5vdCBhIGtleXdvcmQsIHlvdSBjYW5ub3QgYXNzaWduIGEgZGlmZmVyZW50IG9iamVjdCB0b1xuaXQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEJvdGggYGBhc2BgIGFuZCBgYHdpdGhgYCBhcmUgb25seSByZWNvZ25pemVkXG53aGVuIHRoZSBgYHdpdGhfc3RhdGVtZW50YGAgZnV0dXJlIGZlYXR1cmUgaGFzIGJlZW4gZW5hYmxlZC4gSXQgd2lsbFxuYWx3YXlzIGJlIGVuYWJsZWQgaW4gUHl0aG9uIDIuNi4gIFNlZSBzZWN0aW9uICpUaGUgd2l0aCBzdGF0ZW1lbnQqIGZvclxuZGV0YWlscy4gIE5vdGUgdGhhdCB1c2luZyBgYGFzYGAgYW5kIGBgd2l0aGBgIGFzIGlkZW50aWZpZXJzIHdpbGxcbmFsd2F5cyBpc3N1ZSBhIHdhcm5pbmcsIGV2ZW4gd2hlbiB0aGUgYGB3aXRoX3N0YXRlbWVudGBgIGZ1dHVyZVxuZGlyZWN0aXZlIGlzIG5vdCBpbiBlZmZlY3QuXG5cblxuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG5gYF8qYGBcbiAgIE5vdCBpbXBvcnRlZCBieSBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAuICBUaGUgc3BlY2lhbCBpZGVudGlmaWVyXG4gICBgYF9gYCBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mXG4gICB0aGUgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlIGBgX19idWlsdGluX19gYCBtb2R1bGUuXG4gICBXaGVuIG5vdCBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBgYF9gYCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpc1xuICAgbm90IGRlZmluZWQuIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lIGBgX2BgIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICBgYGdldHRleHRgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG5gYF9fKl9fYGBcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mIGBgX18qX19gYCBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lc1xuICAgbm90IGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlXG4gICB3aXRob3V0IHdhcm5pbmcuXG5cbmBgX18qYGBcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLAorICdpZC1jbGFzc2VzJzogdSdcblJlc2VydmVkIGNsYXNzZXMgb2YgaWRlbnRpZmllcnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQ2VydGFpbiBjbGFzc2VzIG9mIGlkZW50aWZpZXJzIChiZXNpZGVzIGtleXdvcmRzKSBoYXZlIHNwZWNpYWxcbm1lYW5pbmdzLiAgVGhlc2UgY2xhc3NlcyBhcmUgaWRlbnRpZmllZCBieSB0aGUgcGF0dGVybnMgb2YgbGVhZGluZyBhbmRcbnRyYWlsaW5nIHVuZGVyc2NvcmUgY2hhcmFjdGVyczpcblxuYGBfKmBgXG4gICBOb3QgaW1wb3J0ZWQgYnkgYGBmcm9tIG1vZHVsZSBpbXBvcnQgKmBgLiAgVGhlIHNwZWNpYWwgaWRlbnRpZmllclxuICAgYGBfYGAgaXMgdXNlZCBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZlxuICAgdGhlIGxhc3QgZXZhbHVhdGlvbjsgaXQgaXMgc3RvcmVkIGluIHRoZSBgYF9fYnVpbHRpbl9fYGAgbW9kdWxlLlxuICAgV2hlbiBub3QgaW4gaW50ZXJhY3RpdmUgbW9kZSwgYGBfYGAgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhbmQgaXNcbiAgIG5vdCBkZWZpbmVkLiBTZWUgc2VjdGlvbiAqVGhlIGltcG9ydCBzdGF0ZW1lbnQqLlxuXG4gICBOb3RlOiBUaGUgbmFtZSBgYF9gYCBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgYGBnZXR0ZXh0YGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuYGBfXypfX2BgXG4gICBTeXN0ZW0tZGVmaW5lZCBuYW1lcy4gIFRoZXNlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnByZXRlclxuICAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiAoaW5jbHVkaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KTtcbiAgIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IGV4cGVjdCB0byBkZWZpbmUgYWRkaXRpb25hbCBuYW1lcyB1c2luZ1xuICAgdGhpcyBjb252ZW50aW9uLiAgVGhlIHNldCBvZiBuYW1lcyBvZiB0aGlzIGNsYXNzIGRlZmluZWQgYnkgUHl0aG9uXG4gICBtYXkgYmUgZXh0ZW5kZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBTZWUgc2VjdGlvbiAqU3BlY2lhbCBtZXRob2RcbiAgIG5hbWVzKi5cblxuYGBfXypgYFxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCisgJ2lkZW50aWZpZXJzJzogdSdcbklkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbklkZW50aWZpZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzICpuYW1lcyopIGFyZSBkZXNjcmliZWQgYnkgdGhlXG5mb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgaWRlbnRpZmllciA6Oj0gKGxldHRlcnwiXyIpIChsZXR0ZXIgfCBkaWdpdCB8ICJfIikqXG4gICBsZXR0ZXIgICAgIDo6PSBsb3dlcmNhc2UgfCB1cHBlcmNhc2VcbiAgIGxvd2VyY2FzZSAgOjo9ICJhIi4uLiJ6IlxuICAgdXBwZXJjYXNlICA6Oj0gIkEiLi4uIloiXG4gICBkaWdpdCAgICAgIDo6PSAiMCIuLi4iOSJcblxuSWRlbnRpZmllcnMgYXJlIHVubGltaXRlZCBpbiBsZW5ndGguICBDYXNlIGlzIHNpZ25pZmljYW50LlxuXG5cbktleXdvcmRzXG49PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkIGFzIHJlc2VydmVkIHdvcmRzLCBvciAqa2V5d29yZHMqIG9mXG50aGUgbGFuZ3VhZ2UsIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBvcmRpbmFyeSBpZGVudGlmaWVycy4gIFRoZXkgbXVzdFxuYmUgc3BlbGxlZCBleGFjdGx5IGFzIHdyaXR0ZW4gaGVyZTpcblxuICAgYW5kICAgICAgIGRlbCAgICAgICBmcm9tICAgICAgbm90ICAgICAgIHdoaWxlXG4gICBhcyAgICAgICAgZWxpZiAgICAgIGdsb2JhbCAgICBvciAgICAgICAgd2l0aFxuICAgYXNzZXJ0ICAgIGVsc2UgICAgICBpZiAgICAgICAgcGFzcyAgICAgIHlpZWxkXG4gICBicmVhayAgICAgZXhjZXB0ICAgIGltcG9ydCAgICBwcmludFxuICAgY2xhc3MgICAgIGV4ZWMgICAgICBpbiAgICAgICAgcmFpc2VcbiAgIGNvbnRpbnVlICBmaW5hbGx5ICAgaXMgICAgICAgIHJldHVyblxuICAgZGVmICAgICAgIGZvciAgICAgICBsYW1iZGEgICAgdHJ5XG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IGBgTm9uZWBgIGJlY2FtZSBhIGNvbnN0YW50IGFuZCBpcyBub3dcbnJlY29nbml6ZWQgYnkgdGhlIGNvbXBpbGVyIGFzIGEgbmFtZSBmb3IgdGhlIGJ1aWx0LWluIG9iamVjdCBgYE5vbmVgYC5cbkFsdGhvdWdoIGl0IGlzIG5vdCBhIGtleXdvcmQsIHlvdSBjYW5ub3QgYXNzaWduIGEgZGlmZmVyZW50IG9iamVjdCB0b1xuaXQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEJvdGggYGBhc2BgIGFuZCBgYHdpdGhgYCBhcmUgb25seSByZWNvZ25pemVkXG53aGVuIHRoZSBgYHdpdGhfc3RhdGVtZW50YGAgZnV0dXJlIGZlYXR1cmUgaGFzIGJlZW4gZW5hYmxlZC4gSXQgd2lsbFxuYWx3YXlzIGJlIGVuYWJsZWQgaW4gUHl0aG9uIDIuNi4gIFNlZSBzZWN0aW9uICpUaGUgd2l0aCBzdGF0ZW1lbnQqIGZvclxuZGV0YWlscy4gIE5vdGUgdGhhdCB1c2luZyBgYGFzYGAgYW5kIGBgd2l0aGBgIGFzIGlkZW50aWZpZXJzIHdpbGxcbmFsd2F5cyBpc3N1ZSBhIHdhcm5pbmcsIGV2ZW4gd2hlbiB0aGUgYGB3aXRoX3N0YXRlbWVudGBgIGZ1dHVyZVxuZGlyZWN0aXZlIGlzIG5vdCBpbiBlZmZlY3QuXG5cblxuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG5gYF8qYGBcbiAgIE5vdCBpbXBvcnRlZCBieSBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAuICBUaGUgc3BlY2lhbCBpZGVudGlmaWVyXG4gICBgYF9gYCBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mXG4gICB0aGUgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlIGBgX19idWlsdGluX19gYCBtb2R1bGUuXG4gICBXaGVuIG5vdCBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBgYF9gYCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpc1xuICAgbm90IGRlZmluZWQuIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lIGBgX2BgIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICBgYGdldHRleHRgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG5gYF9fKl9fYGBcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiAgVGhlc2UgbmFtZXMgYXJlIGRlZmluZWQgYnkgdGhlIGludGVycHJldGVyXG4gICBhbmQgaXRzIGltcGxlbWVudGF0aW9uIChpbmNsdWRpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcnkpO1xuICAgYXBwbGljYXRpb25zIHNob3VsZCBub3QgZXhwZWN0IHRvIGRlZmluZSBhZGRpdGlvbmFsIG5hbWVzIHVzaW5nXG4gICB0aGlzIGNvbnZlbnRpb24uICBUaGUgc2V0IG9mIG5hbWVzIG9mIHRoaXMgY2xhc3MgZGVmaW5lZCBieSBQeXRob25cbiAgIG1heSBiZSBleHRlbmRlZCBpbiBmdXR1cmUgdmVyc2lvbnMuIFNlZSBzZWN0aW9uICpTcGVjaWFsIG1ldGhvZFxuICAgbmFtZXMqLlxuXG5gYF9fKmBgXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKICAnaWYnOiB1J1xuVGhlIGBgaWZgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgYGBpZmBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cbicsCiAgJ2ltYWdpbmFyeSc6IHUnXG5JbWFnaW5hcnkgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKlxuXG5JbWFnaW5hcnkgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWwgZGVmaW5pdGlvbnM6XG5cbiAgIGltYWdudW1iZXIgOjo9IChmbG9hdG51bWJlciB8IGludHBhcnQpICgiaiIgfCAiSiIpXG5cbkFuIGltYWdpbmFyeSBsaXRlcmFsIHlpZWxkcyBhIGNvbXBsZXggbnVtYmVyIHdpdGggYSByZWFsIHBhcnQgb2YgMC4wLlxuQ29tcGxleCBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBhcyBhIHBhaXIgb2YgZmxvYXRpbmcgcG9pbnQgbnVtYmVyc1xuYW5kIGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIG9uIHRoZWlyIHJhbmdlLiAgVG8gY3JlYXRlIGEgY29tcGxleFxubnVtYmVyIHdpdGggYSBub256ZXJvIHJlYWwgcGFydCwgYWRkIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvIGl0LFxuZS5nLiwgYGAoMys0ailgYC4gIFNvbWUgZXhhbXBsZXMgb2YgaW1hZ2luYXJ5IGxpdGVyYWxzOlxuXG4gICAzLjE0aiAgIDEwLmogICAgMTBqICAgICAuMDAxaiAgIDFlMTAwaiAgMy4xNGUtMTBqXG4nLAotICdpbXBvcnQnOiB1J1xuVGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgaW1wb3J0X3N0bXQgICAgIDo6PSAiaW1wb3J0IiBtb2R1bGUgWyJhcyIgbmFtZV0gKCAiLCIgbW9kdWxlIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAoICIsIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiICIoIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgKCAiLCIgaWRlbnRpZmllciBbImFzIiBuYW1lXSApKiBbIiwiXSAiKSJcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiBtb2R1bGUgImltcG9ydCIgIioiXG4gICBtb2R1bGUgICAgICAgICAgOjo9IChpZGVudGlmaWVyICIuIikqIGlkZW50aWZpZXJcbiAgIHJlbGF0aXZlX21vZHVsZSA6Oj0gIi4iKiBtb2R1bGUgfCAiLiIrXG4gICBuYW1lICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuSW1wb3J0IHN0YXRlbWVudHMgYXJlIGV4ZWN1dGVkIGluIHR3byBzdGVwczogKDEpIGZpbmQgYSBtb2R1bGUsIGFuZFxuaW5pdGlhbGl6ZSBpdCBpZiBuZWNlc3Nhcnk7ICgyKSBkZWZpbmUgYSBuYW1lIG9yIG5hbWVzIGluIHRoZSBsb2NhbFxubmFtZXNwYWNlIChvZiB0aGUgc2NvcGUgd2hlcmUgdGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50IG9jY3VycykuIFRoZVxuc3RhdGVtZW50IGNvbWVzIGluIHR3byBmb3JtcyBkaWZmZXJpbmcgb24gd2hldGhlciBpdCB1c2VzIHRoZSBgYGZyb21gYFxua2V5d29yZC4gVGhlIGZpcnN0IGZvcm0gKHdpdGhvdXQgYGBmcm9tYGApIHJlcGVhdHMgdGhlc2Ugc3RlcHMgZm9yXG5lYWNoIGlkZW50aWZpZXIgaW4gdGhlIGxpc3QuIFRoZSBmb3JtIHdpdGggYGBmcm9tYGAgcGVyZm9ybXMgc3RlcCAoMSlcbm9uY2UsIGFuZCB0aGVuIHBlcmZvcm1zIHN0ZXAgKDIpIHJlcGVhdGVkbHkuXG5cblRvIHVuZGVyc3RhbmQgaG93IHN0ZXAgKDEpIG9jY3Vycywgb25lIG11c3QgZmlyc3QgdW5kZXJzdGFuZCBob3dcblB5dGhvbiBoYW5kbGVzIGhpZXJhcmNoaWNhbCBuYW1pbmcgb2YgbW9kdWxlcy4gVG8gaGVscCBvcmdhbml6ZVxubW9kdWxlcyBhbmQgcHJvdmlkZSBhIGhpZXJhcmNoeSBpbiBuYW1pbmcsIFB5dGhvbiBoYXMgYSBjb25jZXB0IG9mXG5wYWNrYWdlcy4gQSBwYWNrYWdlIGNhbiBjb250YWluIG90aGVyIHBhY2thZ2VzIGFuZCBtb2R1bGVzIHdoaWxlXG5tb2R1bGVzIGNhbm5vdCBjb250YWluIG90aGVyIG1vZHVsZXMgb3IgcGFja2FnZXMuIEZyb20gYSBmaWxlIHN5c3RlbVxucGVyc3BlY3RpdmUsIHBhY2thZ2VzIGFyZSBkaXJlY3RvcmllcyBhbmQgbW9kdWxlcyBhcmUgZmlsZXMuIFRoZVxub3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgcGFja2FnZXMgaXMgc3RpbGwgYXZhaWxhYmxlIHRvIHJlYWQsXG5hbHRob3VnaCBtaW5vciBkZXRhaWxzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgd3JpdGluZyBvZiB0aGF0XG5kb2N1bWVudC5cblxuT25jZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGlzIGtub3duICh1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgdGhlXG50ZXJtICJtb2R1bGUiIHdpbGwgcmVmZXIgdG8gYm90aCBwYWNrYWdlcyBhbmQgbW9kdWxlcyksIHNlYXJjaGluZyBmb3JcbnRoZSBtb2R1bGUgb3IgcGFja2FnZSBjYW4gYmVnaW4uIFRoZSBmaXJzdCBwbGFjZSBjaGVja2VkIGlzXG5gYHN5cy5tb2R1bGVzYGAsIHRoZSBjYWNoZSBvZiBhbGwgbW9kdWxlcyB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZFxucHJldmlvdXNseS4gSWYgdGhlIG1vZHVsZSBpcyBmb3VuZCB0aGVyZSB0aGVuIGl0IGlzIHVzZWQgaW4gc3RlcCAoMilcbm9mIGltcG9ydC5cblxuSWYgdGhlIG1vZHVsZSBpcyBub3QgZm91bmQgaW4gdGhlIGNhY2hlLCB0aGVuIGBgc3lzLm1ldGFfcGF0aGBgIGlzXG5zZWFyY2hlZCAodGhlIHNwZWNpZmljYXRpb24gZm9yIGBgc3lzLm1ldGFfcGF0aGBgIGNhbiBiZSBmb3VuZCBpblxuKipQRVAgMzAyKiopLiBUaGUgb2JqZWN0IGlzIGEgbGlzdCBvZiAqZmluZGVyKiBvYmplY3RzIHdoaWNoIGFyZVxucXVlcmllZCBpbiBvcmRlciBhcyB0byB3aGV0aGVyIHRoZXkga25vdyBob3cgdG8gbG9hZCB0aGUgbW9kdWxlIGJ5XG5jYWxsaW5nIHRoZWlyIGBgZmluZF9tb2R1bGUoKWBgIG1ldGhvZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuIElmXG50aGUgbW9kdWxlIGhhcHBlbnMgdG8gYmUgY29udGFpbmVkIHdpdGhpbiBhIHBhY2thZ2UgKGFzIGRlbm90ZWQgYnkgdGhlXG5leGlzdGVuY2Ugb2YgYSBkb3QgaW4gdGhlIG5hbWUpLCB0aGVuIGEgc2Vjb25kIGFyZ3VtZW50IHRvXG5gYGZpbmRfbW9kdWxlKClgYCBpcyBnaXZlbiBhcyB0aGUgdmFsdWUgb2YgdGhlIGBgX19wYXRoX19gYCBhdHRyaWJ1dGVcbmZyb20gdGhlIHBhcmVudCBwYWNrYWdlIChldmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0IGRvdCBpbiB0aGUgbmFtZSBvZlxudGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCkuIElmIGEgZmluZGVyIGNhbiBmaW5kIHRoZSBtb2R1bGUgaXQgcmV0dXJuc1xuYSAqbG9hZGVyKiAoZGlzY3Vzc2VkIGxhdGVyKSBvciByZXR1cm5zIGBgTm9uZWBgLlxuXG5JZiBub25lIG9mIHRoZSBmaW5kZXJzIG9uIGBgc3lzLm1ldGFfcGF0aGBgIGFyZSBhYmxlIHRvIGZpbmQgdGhlXG5tb2R1bGUgdGhlbiBzb21lIGltcGxpY2l0bHkgZGVmaW5lZCBmaW5kZXJzIGFyZSBxdWVyaWVkLlxuSW1wbGVtZW50YXRpb25zIG9mIFB5dGhvbiB2YXJ5IGluIHdoYXQgaW1wbGljaXQgbWV0YSBwYXRoIGZpbmRlcnMgYXJlXG5kZWZpbmVkLiBUaGUgb25lIHRoZXkgYWxsIGRvIGRlZmluZSwgdGhvdWdoLCBpcyBvbmUgdGhhdCBoYW5kbGVzXG5gYHN5cy5wYXRoX2hvb2tzYGAsIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCwgYW5kIGBgc3lzLnBhdGhgYC5cblxuVGhlIGltcGxpY2l0IGZpbmRlciBzZWFyY2hlcyBmb3IgdGhlIHJlcXVlc3RlZCBtb2R1bGUgaW4gdGhlICJwYXRocyJcbnNwZWNpZmllZCBpbiBvbmUgb2YgdHdvIHBsYWNlcyAoInBhdGhzIiBkbyBub3QgaGF2ZSB0byBiZSBmaWxlIHN5c3RlbVxucGF0aHMpLiBJZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkIGlzIHN1cHBvc2VkIHRvIGJlIGNvbnRhaW5lZFxud2l0aGluIGEgcGFja2FnZSB0aGVuIHRoZSBzZWNvbmQgYXJndW1lbnQgcGFzc2VkIHRvIGBgZmluZF9tb2R1bGUoKWBgLFxuYGBfX3BhdGhfX2BgIG9uIHRoZSBwYXJlbnQgcGFja2FnZSwgaXMgdXNlZCBhcyB0aGUgc291cmNlIG9mIHBhdGhzLiBJZlxudGhlIG1vZHVsZSBpcyBub3QgY29udGFpbmVkIGluIGEgcGFja2FnZSB0aGVuIGBgc3lzLnBhdGhgYCBpcyB1c2VkIGFzXG50aGUgc291cmNlIG9mIHBhdGhzLlxuXG5PbmNlIHRoZSBzb3VyY2Ugb2YgcGF0aHMgaXMgY2hvc2VuIGl0IGlzIGl0ZXJhdGVkIG92ZXIgdG8gZmluZCBhXG5maW5kZXIgdGhhdCBjYW4gaGFuZGxlIHRoYXQgcGF0aC4gVGhlIGRpY3QgYXRcbmBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBjYWNoZXMgZmluZGVycyBmb3IgcGF0aHMgYW5kIGlzIGNoZWNrZWRcbmZvciBhIGZpbmRlci4gSWYgdGhlIHBhdGggZG9lcyBub3QgaGF2ZSBhIGZpbmRlciBjYWNoZWQgdGhlblxuYGBzeXMucGF0aF9ob29rc2BgIGlzIHNlYXJjaGVkIGJ5IGNhbGxpbmcgZWFjaCBvYmplY3QgaW4gdGhlIGxpc3Qgd2l0aFxuYSBzaW5nbGUgYXJndW1lbnQgb2YgdGhlIHBhdGgsIHJldHVybmluZyBhIGZpbmRlciBvciByYWlzZXNcbmBgSW1wb3J0RXJyb3JgYC4gSWYgYSBmaW5kZXIgaXMgcmV0dXJuZWQgdGhlbiBpdCBpcyBjYWNoZWQgaW5cbmBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBhbmQgdGhlbiB1c2VkIGZvciB0aGF0IHBhdGggZW50cnkuIElmIG5vXG5maW5kZXIgY2FuIGJlIGZvdW5kIGJ1dCB0aGUgcGF0aCBleGlzdHMgdGhlbiBhIHZhbHVlIG9mIGBgTm9uZWBgIGlzXG5zdG9yZWQgaW4gYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgIHRvIHNpZ25pZnkgdGhhdCBhbiBpbXBsaWNpdCxcbmZpbGUtYmFzZWQgZmluZGVyIHRoYXQgaGFuZGxlcyBtb2R1bGVzIHN0b3JlZCBhcyBpbmRpdmlkdWFsIGZpbGVzXG5zaG91bGQgYmUgdXNlZCBmb3IgdGhhdCBwYXRoLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBleGlzdCB0aGVuIGEgZmluZGVyXG53aGljaCBhbHdheXMgcmV0dXJucyBgYE5vbmVgYCBpcyBwbGFjZWQgaW4gdGhlIGNhY2hlIGZvciB0aGUgcGF0aC5cblxuSWYgbm8gZmluZGVyIGNhbiBmaW5kIHRoZSBtb2R1bGUgdGhlbiBgYEltcG9ydEVycm9yYGAgaXMgcmFpc2VkLlxuT3RoZXJ3aXNlIHNvbWUgZmluZGVyIHJldHVybmVkIGEgbG9hZGVyIHdob3NlIGBgbG9hZF9tb2R1bGUoKWBgIG1ldGhvZFxuaXMgY2FsbGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBsb2FkIChzZWUgKipQRVAgMzAyKiogZm9yIHRoZVxub3JpZ2luYWwgZGVmaW5pdGlvbiBvZiBsb2FkZXJzKS4gQSBsb2FkZXIgaGFzIHNldmVyYWwgcmVzcG9uc2liaWxpdGllc1xudG8gcGVyZm9ybSBvbiBhIG1vZHVsZSBpdCBsb2Fkcy4gRmlyc3QsIGlmIHRoZSBtb2R1bGUgYWxyZWFkeSBleGlzdHNcbmluIGBgc3lzLm1vZHVsZXNgYCAoYSBwb3NzaWJpbGl0eSBpZiB0aGUgbG9hZGVyIGlzIGNhbGxlZCBvdXRzaWRlIG9mXG50aGUgaW1wb3J0IG1hY2hpbmVyeSkgdGhlbiBpdCBpcyB0byB1c2UgdGhhdCBtb2R1bGUgZm9yIGluaXRpYWxpemF0aW9uXG5hbmQgbm90IGEgbmV3IG1vZHVsZS4gQnV0IGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgZXhpc3QgaW5cbmBgc3lzLm1vZHVsZXNgYCB0aGVuIGl0IGlzIHRvIGJlIGFkZGVkIHRvIHRoYXQgZGljdCBiZWZvcmVcbmluaXRpYWxpemF0aW9uIGJlZ2lucy4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBsb2FkaW5nIG9mIHRoZSBtb2R1bGVcbmFuZCBpdCB3YXMgYWRkZWQgdG8gYGBzeXMubW9kdWxlc2BgIGl0IGlzIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgZGljdC5cbklmIGFuIGVycm9yIG9jY3VycyBidXQgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeSBpbiBgYHN5cy5tb2R1bGVzYGAgaXQgaXNcbmxlZnQgaW4gdGhlIGRpY3QuXG5cblRoZSBsb2FkZXIgbXVzdCBzZXQgc2V2ZXJhbCBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUuIGBgX19uYW1lX19gYCBpc1xudG8gYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuIGBgX19maWxlX19gYCBpcyB0byBiZSB0aGUgInBhdGgiXG50byB0aGUgZmlsZSB1bmxlc3MgdGhlIG1vZHVsZSBpcyBidWlsdC1pbiAoYW5kIHRodXMgbGlzdGVkIGluXG5gYHN5cy5idWlsdGluX21vZHVsZV9uYW1lc2BgKSBpbiB3aGljaCBjYXNlIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNldC5cbklmIHdoYXQgaXMgYmVpbmcgaW1wb3J0ZWQgaXMgYSBwYWNrYWdlIHRoZW4gYGBfX3BhdGhfX2BgIGlzIHRvIGJlIHNldFxudG8gYSBsaXN0IG9mIHBhdGhzIHRvIGJlIHNlYXJjaGVkIHdoZW4gbG9va2luZyBmb3IgbW9kdWxlcyBhbmRcbnBhY2thZ2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHBhY2thZ2UgYmVpbmcgaW1wb3J0ZWQuIGBgX19wYWNrYWdlX19gYFxuaXMgb3B0aW9uYWwgYnV0IHNob3VsZCBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZVxubW9kdWxlIG9yIHBhY2thZ2UgKHRoZSBlbXB0eSBzdHJpbmcgaXMgdXNlZCBmb3IgbW9kdWxlIG5vdCBjb250YWluZWRcbmluIGEgcGFja2FnZSkuIGBgX19sb2FkZXJfX2BgIGlzIGFsc28gb3B0aW9uYWwgYnV0IHNob3VsZCBiZSBzZXQgdG9cbnRoZSBsb2FkZXIgb2JqZWN0IHRoYXQgaXMgbG9hZGluZyB0aGUgbW9kdWxlLlxuXG5JZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGxvYWRpbmcgdGhlbiB0aGUgbG9hZGVyIHJhaXNlc1xuYGBJbXBvcnRFcnJvcmBgIGlmIHNvbWUgb3RoZXIgZXhjZXB0aW9uIGlzIG5vdCBhbHJlYWR5IGJlaW5nXG5wcm9wYWdhdGVkLiBPdGhlcndpc2UgdGhlIGxvYWRlciByZXR1cm5zIHRoZSBtb2R1bGUgdGhhdCB3YXMgbG9hZGVkXG5hbmQgaW5pdGlhbGl6ZWQuXG5cbldoZW4gc3RlcCAoMSkgZmluaXNoZXMgd2l0aG91dCByYWlzaW5nIGFuIGV4Y2VwdGlvbiwgc3RlcCAoMikgY2FuXG5iZWdpbi5cblxuVGhlIGZpcnN0IGZvcm0gb2YgYGBpbXBvcnRgYCBzdGF0ZW1lbnQgYmluZHMgdGhlIG1vZHVsZSBuYW1lIGluIHRoZVxubG9jYWwgbmFtZXNwYWNlIHRvIHRoZSBtb2R1bGUgb2JqZWN0LCBhbmQgdGhlbiBnb2VzIG9uIHRvIGltcG9ydCB0aGVcbm5leHQgaWRlbnRpZmllciwgaWYgYW55LiAgSWYgdGhlIG1vZHVsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5IGBgYXNgYCxcbnRoZSBuYW1lIGZvbGxvd2luZyBgYGFzYGAgaXMgdXNlZCBhcyB0aGUgbG9jYWwgbmFtZSBmb3IgdGhlIG1vZHVsZS5cblxuVGhlIGBgZnJvbWBgIGZvcm0gZG9lcyBub3QgYmluZCB0aGUgbW9kdWxlIG5hbWU6IGl0IGdvZXMgdGhyb3VnaCB0aGVcbmxpc3Qgb2YgaWRlbnRpZmllcnMsIGxvb2tzIGVhY2ggb25lIG9mIHRoZW0gdXAgaW4gdGhlIG1vZHVsZSBmb3VuZCBpblxuc3RlcCAoMSksIGFuZCBiaW5kcyB0aGUgbmFtZSBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIHRvIHRoZSBvYmplY3QgdGh1c1xuZm91bmQuICBBcyB3aXRoIHRoZSBmaXJzdCBmb3JtIG9mIGBgaW1wb3J0YGAsIGFuIGFsdGVybmF0ZSBsb2NhbCBuYW1lXG5jYW4gYmUgc3VwcGxpZWQgYnkgc3BlY2lmeWluZyAiYGBhc2BgIGxvY2FsbmFtZSIuICBJZiBhIG5hbWUgaXMgbm90XG5mb3VuZCwgYGBJbXBvcnRFcnJvcmBgIGlzIHJhaXNlZC4gIElmIHRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIGlzXG5yZXBsYWNlZCBieSBhIHN0YXIgKGBgXCcqXCdgYCksIGFsbCBwdWJsaWMgbmFtZXMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlXG5hcmUgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBvZiB0aGUgYGBpbXBvcnRgYCBzdGF0ZW1lbnQuLlxuXG5UaGUgKnB1YmxpYyBuYW1lcyogZGVmaW5lZCBieSBhIG1vZHVsZSBhcmUgZGV0ZXJtaW5lZCBieSBjaGVja2luZyB0aGVcbm1vZHVsZVwncyBuYW1lc3BhY2UgZm9yIGEgdmFyaWFibGUgbmFtZWQgYGBfX2FsbF9fYGA7IGlmIGRlZmluZWQsIGl0XG5tdXN0IGJlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyB3aGljaCBhcmUgbmFtZXMgZGVmaW5lZCBvciBpbXBvcnRlZCBieVxudGhhdCBtb2R1bGUuICBUaGUgbmFtZXMgZ2l2ZW4gaW4gYGBfX2FsbF9fYGAgYXJlIGFsbCBjb25zaWRlcmVkIHB1YmxpY1xuYW5kIGFyZSByZXF1aXJlZCB0byBleGlzdC4gIElmIGBgX19hbGxfX2BgIGlzIG5vdCBkZWZpbmVkLCB0aGUgc2V0IG9mXG5wdWJsaWMgbmFtZXMgaW5jbHVkZXMgYWxsIG5hbWVzIGZvdW5kIGluIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIHdoaWNoXG5kbyBub3QgYmVnaW4gd2l0aCBhbiB1bmRlcnNjb3JlIGNoYXJhY3RlciAoYGBcJ19cJ2BgKS4gYGBfX2FsbF9fYGBcbnNob3VsZCBjb250YWluIHRoZSBlbnRpcmUgcHVibGljIEFQSS4gSXQgaXMgaW50ZW5kZWQgdG8gYXZvaWRcbmFjY2lkZW50YWxseSBleHBvcnRpbmcgaXRlbXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIEFQSSAoc3VjaCBhc1xubGlicmFyeSBtb2R1bGVzIHdoaWNoIHdlcmUgaW1wb3J0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUpLlxuXG5UaGUgYGBmcm9tYGAgZm9ybSB3aXRoIGBgKmBgIG1heSBvbmx5IG9jY3VyIGluIGEgbW9kdWxlIHNjb3BlLiAgSWYgdGhlXG53aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgdXNlZCBpbiBhIGZ1bmN0aW9uXG5hbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZSB2YXJpYWJsZXMsXG50aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhIGBgU3ludGF4RXJyb3JgYC5cblxuV2hlbiBzcGVjaWZ5aW5nIHdoYXQgbW9kdWxlIHRvIGltcG9ydCB5b3UgZG8gbm90IGhhdmUgdG8gc3BlY2lmeSB0aGVcbmFic29sdXRlIG5hbWUgb2YgdGhlIG1vZHVsZS4gV2hlbiBhIG1vZHVsZSBvciBwYWNrYWdlIGlzIGNvbnRhaW5lZFxud2l0aGluIGFub3RoZXIgcGFja2FnZSBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIGEgcmVsYXRpdmUgaW1wb3J0IHdpdGhpblxudGhlIHNhbWUgdG9wIHBhY2thZ2Ugd2l0aG91dCBoYXZpbmcgdG8gbWVudGlvbiB0aGUgcGFja2FnZSBuYW1lLiBCeVxudXNpbmcgbGVhZGluZyBkb3RzIGluIHRoZSBzcGVjaWZpZWQgbW9kdWxlIG9yIHBhY2thZ2UgYWZ0ZXIgYGBmcm9tYGBcbnlvdSBjYW4gc3BlY2lmeSBob3cgaGlnaCB0byB0cmF2ZXJzZSB1cCB0aGUgY3VycmVudCBwYWNrYWdlIGhpZXJhcmNoeVxud2l0aG91dCBzcGVjaWZ5aW5nIGV4YWN0IG5hbWVzLiBPbmUgbGVhZGluZyBkb3QgbWVhbnMgdGhlIGN1cnJlbnRcbnBhY2thZ2Ugd2hlcmUgdGhlIG1vZHVsZSBtYWtpbmcgdGhlIGltcG9ydCBleGlzdHMuIFR3byBkb3RzIG1lYW5zIHVwXG5vbmUgcGFja2FnZSBsZXZlbC4gVGhyZWUgZG90cyBpcyB1cCB0d28gbGV2ZWxzLCBldGMuIFNvIGlmIHlvdSBleGVjdXRlXG5gYGZyb20gLiBpbXBvcnQgbW9kYGAgZnJvbSBhIG1vZHVsZSBpbiB0aGUgYGBwa2dgYCBwYWNrYWdlIHRoZW4geW91XG53aWxsIGVuZCB1cCBpbXBvcnRpbmcgYGBwa2cubW9kYGAuIElmIHlvdSBleGVjdXRlIGBgZnJvbSAuLnN1YnBrZzJcbmltcHJ0IG1vZGBgIGZyb20gd2l0aGluIGBgcGtnLnN1YnBrZzFgYCB5b3Ugd2lsbCBpbXBvcnRcbmBgcGtnLnN1YnBrZzIubW9kYGAuIFRoZSBzcGVjaWZpY2F0aW9uIGZvciByZWxhdGl2ZSBpbXBvcnRzIGlzXG5jb250YWluZWQgd2l0aGluICoqUEVQIDMyOCoqLlxuXG5UaGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBfX2ltcG9ydF9fKClgYCBpcyBwcm92aWRlZCB0byBzdXBwb3J0XG5hcHBsaWNhdGlvbnMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggbW9kdWxlcyBuZWVkIHRvIGJlIGxvYWRlZFxuZHluYW1pY2FsbHk7IHJlZmVyIHRvICpCdWlsdC1pbiBGdW5jdGlvbnMqIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuXG5cbkZ1dHVyZSBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PVxuXG5BICpmdXR1cmUgc3RhdGVtZW50KiBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgY29tcGlsZXIgdGhhdCBhIHBhcnRpY3VsYXJcbm1vZHVsZSBzaG91bGQgYmUgY29tcGlsZWQgdXNpbmcgc3ludGF4IG9yIHNlbWFudGljcyB0aGF0IHdpbGwgYmVcbmF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBmdXR1cmUgcmVsZWFzZSBvZiBQeXRob24uICBUaGUgZnV0dXJlXG5zdGF0ZW1lbnQgaXMgaW50ZW5kZWQgdG8gZWFzZSBtaWdyYXRpb24gdG8gZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvblxudGhhdCBpbnRyb2R1Y2UgaW5jb21wYXRpYmxlIGNoYW5nZXMgdG8gdGhlIGxhbmd1YWdlLiAgSXQgYWxsb3dzIHVzZSBvZlxudGhlIG5ldyBmZWF0dXJlcyBvbiBhIHBlci1tb2R1bGUgYmFzaXMgYmVmb3JlIHRoZSByZWxlYXNlIGluIHdoaWNoIHRoZVxuZmVhdHVyZSBiZWNvbWVzIHN0YW5kYXJkLlxuXG4gICBmdXR1cmVfc3RhdGVtZW50IDo6PSAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiIGZlYXR1cmUgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgZmVhdHVyZSBbImFzIiBuYW1lXSkqXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiAiX19mdXR1cmVfXyIgImltcG9ydCIgIigiIGZlYXR1cmUgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgZmVhdHVyZSBbImFzIiBuYW1lXSkqIFsiLCJdICIpIlxuICAgZmVhdHVyZSAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgbmFtZSAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgbXVzdCBhcHBlYXIgbmVhciB0aGUgdG9wIG9mIHRoZSBtb2R1bGUuICBUaGUgb25seVxubGluZXMgdGhhdCBjYW4gYXBwZWFyIGJlZm9yZSBhIGZ1dHVyZSBzdGF0ZW1lbnQgYXJlOlxuXG4qIHRoZSBtb2R1bGUgZG9jc3RyaW5nIChpZiBhbnkpLFxuXG4qIGNvbW1lbnRzLFxuXG4qIGJsYW5rIGxpbmVzLCBhbmRcblxuKiBvdGhlciBmdXR1cmUgc3RhdGVtZW50cy5cblxuVGhlIGZlYXR1cmVzIHJlY29nbml6ZWQgYnkgUHl0aG9uIDIuNiBhcmUgYGB1bmljb2RlX2xpdGVyYWxzYGAsXG5gYHByaW50X2Z1bmN0aW9uYGAsIGBgYWJzb2x1dGVfaW1wb3J0YGAsIGBgZGl2aXNpb25gYCwgYGBnZW5lcmF0b3JzYGAsXG5gYG5lc3RlZF9zY29wZXNgYCBhbmQgYGB3aXRoX3N0YXRlbWVudGBgLiAgYGBnZW5lcmF0b3JzYGAsXG5gYHdpdGhfc3RhdGVtZW50YGAsIGBgbmVzdGVkX3Njb3Blc2BgIGFyZSByZWR1bmRhbnQgaW4gUHl0aG9uIHZlcnNpb25cbjIuNiBhbmQgYWJvdmUgYmVjYXVzZSB0aGV5IGFyZSBhbHdheXMgZW5hYmxlZC5cblxuQSBmdXR1cmUgc3RhdGVtZW50IGlzIHJlY29nbml6ZWQgYW5kIHRyZWF0ZWQgc3BlY2lhbGx5IGF0IGNvbXBpbGVcbnRpbWU6IENoYW5nZXMgdG8gdGhlIHNlbWFudGljcyBvZiBjb3JlIGNvbnN0cnVjdHMgYXJlIG9mdGVuXG5pbXBsZW1lbnRlZCBieSBnZW5lcmF0aW5nIGRpZmZlcmVudCBjb2RlLiAgSXQgbWF5IGV2ZW4gYmUgdGhlIGNhc2VcbnRoYXQgYSBuZXcgZmVhdHVyZSBpbnRyb2R1Y2VzIG5ldyBpbmNvbXBhdGlibGUgc3ludGF4IChzdWNoIGFzIGEgbmV3XG5yZXNlcnZlZCB3b3JkKSwgaW4gd2hpY2ggY2FzZSB0aGUgY29tcGlsZXIgbWF5IG5lZWQgdG8gcGFyc2UgdGhlXG5tb2R1bGUgZGlmZmVyZW50bHkuICBTdWNoIGRlY2lzaW9ucyBjYW5ub3QgYmUgcHVzaGVkIG9mZiB1bnRpbFxucnVudGltZS5cblxuRm9yIGFueSBnaXZlbiByZWxlYXNlLCB0aGUgY29tcGlsZXIga25vd3Mgd2hpY2ggZmVhdHVyZSBuYW1lcyBoYXZlXG5iZWVuIGRlZmluZWQsIGFuZCByYWlzZXMgYSBjb21waWxlLXRpbWUgZXJyb3IgaWYgYSBmdXR1cmUgc3RhdGVtZW50XG5jb250YWlucyBhIGZlYXR1cmUgbm90IGtub3duIHRvIGl0LlxuXG5UaGUgZGlyZWN0IHJ1bnRpbWUgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYW55IGltcG9ydCBzdGF0ZW1lbnQ6XG50aGVyZSBpcyBhIHN0YW5kYXJkIG1vZHVsZSBgYF9fZnV0dXJlX19gYCwgZGVzY3JpYmVkIGxhdGVyLCBhbmQgaXRcbndpbGwgYmUgaW1wb3J0ZWQgaW4gdGhlIHVzdWFsIHdheSBhdCB0aGUgdGltZSB0aGUgZnV0dXJlIHN0YXRlbWVudCBpc1xuZXhlY3V0ZWQuXG5cblRoZSBpbnRlcmVzdGluZyBydW50aW1lIHNlbWFudGljcyBkZXBlbmQgb24gdGhlIHNwZWNpZmljIGZlYXR1cmVcbmVuYWJsZWQgYnkgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQuXG5cbk5vdGUgdGhhdCB0aGVyZSBpcyBub3RoaW5nIHNwZWNpYWwgYWJvdXQgdGhlIHN0YXRlbWVudDpcblxuICAgaW1wb3J0IF9fZnV0dXJlX18gW2FzIG5hbWVdXG5cblRoYXQgaXMgbm90IGEgZnV0dXJlIHN0YXRlbWVudDsgaXRcJ3MgYW4gb3JkaW5hcnkgaW1wb3J0IHN0YXRlbWVudCB3aXRoXG5ubyBzcGVjaWFsIHNlbWFudGljcyBvciBzeW50YXggcmVzdHJpY3Rpb25zLlxuXG5Db2RlIGNvbXBpbGVkIGJ5IGFuIGBgZXhlY2BgIHN0YXRlbWVudCBvciBjYWxscyB0byB0aGUgYnVpbHQtaW5cbmZ1bmN0aW9ucyBgYGNvbXBpbGUoKWBgIGFuZCBgYGV4ZWNmaWxlKClgYCB0aGF0IG9jY3VyIGluIGEgbW9kdWxlXG5gYE1gYCBjb250YWluaW5nIGEgZnV0dXJlIHN0YXRlbWVudCB3aWxsLCBieSBkZWZhdWx0LCB1c2UgdGhlIG5ld1xuc3ludGF4IG9yIHNlbWFudGljcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZ1dHVyZSBzdGF0ZW1lbnQuICBUaGlzIGNhbixcbnN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMiBiZSBjb250cm9sbGVkIGJ5IG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xuYGBjb21waWxlKClgYCAtLS0gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24gZm9yIGRldGFpbHMuXG5cbkEgZnV0dXJlIHN0YXRlbWVudCB0eXBlZCBhdCBhbiBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBwcm9tcHQgd2lsbFxudGFrZSBlZmZlY3QgZm9yIHRoZSByZXN0IG9mIHRoZSBpbnRlcnByZXRlciBzZXNzaW9uLiAgSWYgYW5cbmludGVycHJldGVyIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgKi1pKiBvcHRpb24sIGlzIHBhc3NlZCBhIHNjcmlwdCBuYW1lXG50byBleGVjdXRlLCBhbmQgdGhlIHNjcmlwdCBpbmNsdWRlcyBhIGZ1dHVyZSBzdGF0ZW1lbnQsIGl0IHdpbGwgYmUgaW5cbmVmZmVjdCBpbiB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbiBzdGFydGVkIGFmdGVyIHRoZSBzY3JpcHQgaXNcbmV4ZWN1dGVkLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMjM2KiogLSBCYWNrIHRvIHRoZSBfX2Z1dHVyZV9fXG4gICAgICBUaGUgb3JpZ2luYWwgcHJvcG9zYWwgZm9yIHRoZSBfX2Z1dHVyZV9fIG1lY2hhbmlzbS5cbicsCisgJ2ltcG9ydCc6IHUnXG5UaGUgYGBpbXBvcnRgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBpbXBvcnRfc3RtdCAgICAgOjo9ICJpbXBvcnQiIG1vZHVsZSBbImFzIiBuYW1lXSAoICIsIiBtb2R1bGUgWyJhcyIgbmFtZV0gKSpcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiByZWxhdGl2ZV9tb2R1bGUgImltcG9ydCIgaWRlbnRpZmllciBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICggIiwiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV0gKSpcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiByZWxhdGl2ZV9tb2R1bGUgImltcG9ydCIgIigiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAoICIsIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdICkqIFsiLCJdICIpIlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIG1vZHVsZSAiaW1wb3J0IiAiKiJcbiAgIG1vZHVsZSAgICAgICAgICA6Oj0gKGlkZW50aWZpZXIgIi4iKSogaWRlbnRpZmllclxuICAgcmVsYXRpdmVfbW9kdWxlIDo6PSAiLiIqIG1vZHVsZSB8ICIuIitcbiAgIG5hbWUgICAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5JbXBvcnQgc3RhdGVtZW50cyBhcmUgZXhlY3V0ZWQgaW4gdHdvIHN0ZXBzOiAoMSkgZmluZCBhIG1vZHVsZSwgYW5kXG5pbml0aWFsaXplIGl0IGlmIG5lY2Vzc2FyeTsgKDIpIGRlZmluZSBhIG5hbWUgb3IgbmFtZXMgaW4gdGhlIGxvY2FsXG5uYW1lc3BhY2UgKG9mIHRoZSBzY29wZSB3aGVyZSB0aGUgYGBpbXBvcnRgYCBzdGF0ZW1lbnQgb2NjdXJzKS4gVGhlXG5zdGF0ZW1lbnQgY29tZXMgaW4gdHdvIGZvcm1zIGRpZmZlcmluZyBvbiB3aGV0aGVyIGl0IHVzZXMgdGhlIGBgZnJvbWBgXG5rZXl3b3JkLiBUaGUgZmlyc3QgZm9ybSAod2l0aG91dCBgYGZyb21gYCkgcmVwZWF0cyB0aGVzZSBzdGVwcyBmb3JcbmVhY2ggaWRlbnRpZmllciBpbiB0aGUgbGlzdC4gVGhlIGZvcm0gd2l0aCBgYGZyb21gYCBwZXJmb3JtcyBzdGVwICgxKVxub25jZSwgYW5kIHRoZW4gcGVyZm9ybXMgc3RlcCAoMikgcmVwZWF0ZWRseS5cblxuVG8gdW5kZXJzdGFuZCBob3cgc3RlcCAoMSkgb2NjdXJzLCBvbmUgbXVzdCBmaXJzdCB1bmRlcnN0YW5kIGhvd1xuUHl0aG9uIGhhbmRsZXMgaGllcmFyY2hpY2FsIG5hbWluZyBvZiBtb2R1bGVzLiBUbyBoZWxwIG9yZ2FuaXplXG5tb2R1bGVzIGFuZCBwcm92aWRlIGEgaGllcmFyY2h5IGluIG5hbWluZywgUHl0aG9uIGhhcyBhIGNvbmNlcHQgb2ZcbnBhY2thZ2VzLiBBIHBhY2thZ2UgY2FuIGNvbnRhaW4gb3RoZXIgcGFja2FnZXMgYW5kIG1vZHVsZXMgd2hpbGVcbm1vZHVsZXMgY2Fubm90IGNvbnRhaW4gb3RoZXIgbW9kdWxlcyBvciBwYWNrYWdlcy4gRnJvbSBhIGZpbGUgc3lzdGVtXG5wZXJzcGVjdGl2ZSwgcGFja2FnZXMgYXJlIGRpcmVjdG9yaWVzIGFuZCBtb2R1bGVzIGFyZSBmaWxlcy4gVGhlXG5vcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBwYWNrYWdlcyBpcyBzdGlsbCBhdmFpbGFibGUgdG8gcmVhZCxcbmFsdGhvdWdoIG1pbm9yIGRldGFpbHMgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSB3cml0aW5nIG9mIHRoYXRcbmRvY3VtZW50LlxuXG5PbmNlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgaXMga25vd24gKHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCB0aGVcbnRlcm0gIm1vZHVsZSIgd2lsbCByZWZlciB0byBib3RoIHBhY2thZ2VzIGFuZCBtb2R1bGVzKSwgc2VhcmNoaW5nIGZvclxudGhlIG1vZHVsZSBvciBwYWNrYWdlIGNhbiBiZWdpbi4gVGhlIGZpcnN0IHBsYWNlIGNoZWNrZWQgaXNcbmBgc3lzLm1vZHVsZXNgYCwgdGhlIGNhY2hlIG9mIGFsbCBtb2R1bGVzIHRoYXQgaGF2ZSBiZWVuIGltcG9ydGVkXG5wcmV2aW91c2x5LiBJZiB0aGUgbW9kdWxlIGlzIGZvdW5kIHRoZXJlIHRoZW4gaXQgaXMgdXNlZCBpbiBzdGVwICgyKVxub2YgaW1wb3J0LlxuXG5JZiB0aGUgbW9kdWxlIGlzIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGUsIHRoZW4gYGBzeXMubWV0YV9wYXRoYGAgaXNcbnNlYXJjaGVkICh0aGUgc3BlY2lmaWNhdGlvbiBmb3IgYGBzeXMubWV0YV9wYXRoYGAgY2FuIGJlIGZvdW5kIGluXG4qKlBFUCAzMDIqKikuIFRoZSBvYmplY3QgaXMgYSBsaXN0IG9mICpmaW5kZXIqIG9iamVjdHMgd2hpY2ggYXJlXG5xdWVyaWVkIGluIG9yZGVyIGFzIHRvIHdoZXRoZXIgdGhleSBrbm93IGhvdyB0byBsb2FkIHRoZSBtb2R1bGUgYnlcbmNhbGxpbmcgdGhlaXIgYGBmaW5kX21vZHVsZSgpYGAgbWV0aG9kIHdpdGggdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gSWZcbnRoZSBtb2R1bGUgaGFwcGVucyB0byBiZSBjb250YWluZWQgd2l0aGluIGEgcGFja2FnZSAoYXMgZGVub3RlZCBieSB0aGVcbmV4aXN0ZW5jZSBvZiBhIGRvdCBpbiB0aGUgbmFtZSksIHRoZW4gYSBzZWNvbmQgYXJndW1lbnQgdG9cbmBgZmluZF9tb2R1bGUoKWBgIGlzIGdpdmVuIGFzIHRoZSB2YWx1ZSBvZiB0aGUgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZVxuZnJvbSB0aGUgcGFyZW50IHBhY2thZ2UgKGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGxhc3QgZG90IGluIHRoZSBuYW1lIG9mXG50aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkKS4gSWYgYSBmaW5kZXIgY2FuIGZpbmQgdGhlIG1vZHVsZSBpdCByZXR1cm5zXG5hICpsb2FkZXIqIChkaXNjdXNzZWQgbGF0ZXIpIG9yIHJldHVybnMgYGBOb25lYGAuXG5cbklmIG5vbmUgb2YgdGhlIGZpbmRlcnMgb24gYGBzeXMubWV0YV9wYXRoYGAgYXJlIGFibGUgdG8gZmluZCB0aGVcbm1vZHVsZSB0aGVuIHNvbWUgaW1wbGljaXRseSBkZWZpbmVkIGZpbmRlcnMgYXJlIHF1ZXJpZWQuXG5JbXBsZW1lbnRhdGlvbnMgb2YgUHl0aG9uIHZhcnkgaW4gd2hhdCBpbXBsaWNpdCBtZXRhIHBhdGggZmluZGVycyBhcmVcbmRlZmluZWQuIFRoZSBvbmUgdGhleSBhbGwgZG8gZGVmaW5lLCB0aG91Z2gsIGlzIG9uZSB0aGF0IGhhbmRsZXNcbmBgc3lzLnBhdGhfaG9va3NgYCwgYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgLCBhbmQgYGBzeXMucGF0aGBgLlxuXG5UaGUgaW1wbGljaXQgZmluZGVyIHNlYXJjaGVzIGZvciB0aGUgcmVxdWVzdGVkIG1vZHVsZSBpbiB0aGUgInBhdGhzIlxuc3BlY2lmaWVkIGluIG9uZSBvZiB0d28gcGxhY2VzICgicGF0aHMiIGRvIG5vdCBoYXZlIHRvIGJlIGZpbGUgc3lzdGVtXG5wYXRocykuIElmIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQgaXMgc3VwcG9zZWQgdG8gYmUgY29udGFpbmVkXG53aXRoaW4gYSBwYWNrYWdlIHRoZW4gdGhlIHNlY29uZCBhcmd1bWVudCBwYXNzZWQgdG8gYGBmaW5kX21vZHVsZSgpYGAsXG5gYF9fcGF0aF9fYGAgb24gdGhlIHBhcmVudCBwYWNrYWdlLCBpcyB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgcGF0aHMuIElmXG50aGUgbW9kdWxlIGlzIG5vdCBjb250YWluZWQgaW4gYSBwYWNrYWdlIHRoZW4gYGBzeXMucGF0aGBgIGlzIHVzZWQgYXNcbnRoZSBzb3VyY2Ugb2YgcGF0aHMuXG5cbk9uY2UgdGhlIHNvdXJjZSBvZiBwYXRocyBpcyBjaG9zZW4gaXQgaXMgaXRlcmF0ZWQgb3ZlciB0byBmaW5kIGFcbmZpbmRlciB0aGF0IGNhbiBoYW5kbGUgdGhhdCBwYXRoLiBUaGUgZGljdCBhdFxuYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgIGNhY2hlcyBmaW5kZXJzIGZvciBwYXRocyBhbmQgaXMgY2hlY2tlZFxuZm9yIGEgZmluZGVyLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBoYXZlIGEgZmluZGVyIGNhY2hlZCB0aGVuXG5gYHN5cy5wYXRoX2hvb2tzYGAgaXMgc2VhcmNoZWQgYnkgY2FsbGluZyBlYWNoIG9iamVjdCBpbiB0aGUgbGlzdCB3aXRoXG5hIHNpbmdsZSBhcmd1bWVudCBvZiB0aGUgcGF0aCwgcmV0dXJuaW5nIGEgZmluZGVyIG9yIHJhaXNlc1xuYGBJbXBvcnRFcnJvcmBgLiBJZiBhIGZpbmRlciBpcyByZXR1cm5lZCB0aGVuIGl0IGlzIGNhY2hlZCBpblxuYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgIGFuZCB0aGVuIHVzZWQgZm9yIHRoYXQgcGF0aCBlbnRyeS4gSWYgbm9cbmZpbmRlciBjYW4gYmUgZm91bmQgYnV0IHRoZSBwYXRoIGV4aXN0cyB0aGVuIGEgdmFsdWUgb2YgYGBOb25lYGAgaXNcbnN0b3JlZCBpbiBgYHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYGAgdG8gc2lnbmlmeSB0aGF0IGFuIGltcGxpY2l0LFxuZmlsZS1iYXNlZCBmaW5kZXIgdGhhdCBoYW5kbGVzIG1vZHVsZXMgc3RvcmVkIGFzIGluZGl2aWR1YWwgZmlsZXNcbnNob3VsZCBiZSB1c2VkIGZvciB0aGF0IHBhdGguIElmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0IHRoZW4gYSBmaW5kZXJcbndoaWNoIGFsd2F5cyByZXR1cm5zIGBgTm9uZWBgIGlzIHBsYWNlZCBpbiB0aGUgY2FjaGUgZm9yIHRoZSBwYXRoLlxuXG5JZiBubyBmaW5kZXIgY2FuIGZpbmQgdGhlIG1vZHVsZSB0aGVuIGBgSW1wb3J0RXJyb3JgYCBpcyByYWlzZWQuXG5PdGhlcndpc2Ugc29tZSBmaW5kZXIgcmV0dXJuZWQgYSBsb2FkZXIgd2hvc2UgYGBsb2FkX21vZHVsZSgpYGAgbWV0aG9kXG5pcyBjYWxsZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIGxvYWQgKHNlZSAqKlBFUCAzMDIqKiBmb3IgdGhlXG5vcmlnaW5hbCBkZWZpbml0aW9uIG9mIGxvYWRlcnMpLiBBIGxvYWRlciBoYXMgc2V2ZXJhbCByZXNwb25zaWJpbGl0aWVzXG50byBwZXJmb3JtIG9uIGEgbW9kdWxlIGl0IGxvYWRzLiBGaXJzdCwgaWYgdGhlIG1vZHVsZSBhbHJlYWR5IGV4aXN0c1xuaW4gYGBzeXMubW9kdWxlc2BgIChhIHBvc3NpYmlsaXR5IGlmIHRoZSBsb2FkZXIgaXMgY2FsbGVkIG91dHNpZGUgb2ZcbnRoZSBpbXBvcnQgbWFjaGluZXJ5KSB0aGVuIGl0IGlzIHRvIHVzZSB0aGF0IG1vZHVsZSBmb3IgaW5pdGlhbGl6YXRpb25cbmFuZCBub3QgYSBuZXcgbW9kdWxlLiBCdXQgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBleGlzdCBpblxuYGBzeXMubW9kdWxlc2BgIHRoZW4gaXQgaXMgdG8gYmUgYWRkZWQgdG8gdGhhdCBkaWN0IGJlZm9yZVxuaW5pdGlhbGl6YXRpb24gYmVnaW5zLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGxvYWRpbmcgb2YgdGhlIG1vZHVsZVxuYW5kIGl0IHdhcyBhZGRlZCB0byBgYHN5cy5tb2R1bGVzYGAgaXQgaXMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBkaWN0LlxuSWYgYW4gZXJyb3Igb2NjdXJzIGJ1dCB0aGUgbW9kdWxlIHdhcyBhbHJlYWR5IGluIGBgc3lzLm1vZHVsZXNgYCBpdCBpc1xubGVmdCBpbiB0aGUgZGljdC5cblxuVGhlIGxvYWRlciBtdXN0IHNldCBzZXZlcmFsIGF0dHJpYnV0ZXMgb24gdGhlIG1vZHVsZS4gYGBfX25hbWVfX2BgIGlzXG50byBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gYGBfX2ZpbGVfX2BgIGlzIHRvIGJlIHRoZSAicGF0aCJcbnRvIHRoZSBmaWxlIHVubGVzcyB0aGUgbW9kdWxlIGlzIGJ1aWx0LWluIChhbmQgdGh1cyBsaXN0ZWQgaW5cbmBgc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzYGApIGluIHdoaWNoIGNhc2UgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LlxuSWYgd2hhdCBpcyBiZWluZyBpbXBvcnRlZCBpcyBhIHBhY2thZ2UgdGhlbiBgYF9fcGF0aF9fYGAgaXMgdG8gYmUgc2V0XG50byBhIGxpc3Qgb2YgcGF0aHMgdG8gYmUgc2VhcmNoZWQgd2hlbiBsb29raW5nIGZvciBtb2R1bGVzIGFuZFxucGFja2FnZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgcGFja2FnZSBiZWluZyBpbXBvcnRlZC4gYGBfX3BhY2thZ2VfX2BgXG5pcyBvcHRpb25hbCBidXQgc2hvdWxkIGJlIHNldCB0byB0aGUgbmFtZSBvZiBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlXG5tb2R1bGUgb3IgcGFja2FnZSAodGhlIGVtcHR5IHN0cmluZyBpcyB1c2VkIGZvciBtb2R1bGUgbm90IGNvbnRhaW5lZFxuaW4gYSBwYWNrYWdlKS4gYGBfX2xvYWRlcl9fYGAgaXMgYWxzbyBvcHRpb25hbCBidXQgc2hvdWxkIGJlIHNldCB0b1xudGhlIGxvYWRlciBvYmplY3QgdGhhdCBpcyBsb2FkaW5nIHRoZSBtb2R1bGUuXG5cbklmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgbG9hZGluZyB0aGVuIHRoZSBsb2FkZXIgcmFpc2VzXG5gYEltcG9ydEVycm9yYGAgaWYgc29tZSBvdGhlciBleGNlcHRpb24gaXMgbm90IGFscmVhZHkgYmVpbmdcbnByb3BhZ2F0ZWQuIE90aGVyd2lzZSB0aGUgbG9hZGVyIHJldHVybnMgdGhlIG1vZHVsZSB0aGF0IHdhcyBsb2FkZWRcbmFuZCBpbml0aWFsaXplZC5cblxuV2hlbiBzdGVwICgxKSBmaW5pc2hlcyB3aXRob3V0IHJhaXNpbmcgYW4gZXhjZXB0aW9uLCBzdGVwICgyKSBjYW5cbmJlZ2luLlxuXG5UaGUgZmlyc3QgZm9ybSBvZiBgYGltcG9ydGBgIHN0YXRlbWVudCBiaW5kcyB0aGUgbW9kdWxlIG5hbWUgaW4gdGhlXG5sb2NhbCBuYW1lc3BhY2UgdG8gdGhlIG1vZHVsZSBvYmplY3QsIGFuZCB0aGVuIGdvZXMgb24gdG8gaW1wb3J0IHRoZVxubmV4dCBpZGVudGlmaWVyLCBpZiBhbnkuICBJZiB0aGUgbW9kdWxlIG5hbWUgaXMgZm9sbG93ZWQgYnkgYGBhc2BgLFxudGhlIG5hbWUgZm9sbG93aW5nIGBgYXNgYCBpcyB1c2VkIGFzIHRoZSBsb2NhbCBuYW1lIGZvciB0aGUgbW9kdWxlLlxuXG5UaGUgYGBmcm9tYGAgZm9ybSBkb2VzIG5vdCBiaW5kIHRoZSBtb2R1bGUgbmFtZTogaXQgZ29lcyB0aHJvdWdoIHRoZVxubGlzdCBvZiBpZGVudGlmaWVycywgbG9va3MgZWFjaCBvbmUgb2YgdGhlbSB1cCBpbiB0aGUgbW9kdWxlIGZvdW5kIGluXG5zdGVwICgxKSwgYW5kIGJpbmRzIHRoZSBuYW1lIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgdG8gdGhlIG9iamVjdCB0aHVzXG5mb3VuZC4gIEFzIHdpdGggdGhlIGZpcnN0IGZvcm0gb2YgYGBpbXBvcnRgYCwgYW4gYWx0ZXJuYXRlIGxvY2FsIG5hbWVcbmNhbiBiZSBzdXBwbGllZCBieSBzcGVjaWZ5aW5nICJgYGFzYGAgbG9jYWxuYW1lIi4gIElmIGEgbmFtZSBpcyBub3RcbmZvdW5kLCBgYEltcG9ydEVycm9yYGAgaXMgcmFpc2VkLiAgSWYgdGhlIGxpc3Qgb2YgaWRlbnRpZmllcnMgaXNcbnJlcGxhY2VkIGJ5IGEgc3RhciAoYGBcJypcJ2BgKSwgYWxsIHB1YmxpYyBuYW1lcyBkZWZpbmVkIGluIHRoZSBtb2R1bGVcbmFyZSBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIG9mIHRoZSBgYGltcG9ydGBgIHN0YXRlbWVudC4uXG5cblRoZSAqcHVibGljIG5hbWVzKiBkZWZpbmVkIGJ5IGEgbW9kdWxlIGFyZSBkZXRlcm1pbmVkIGJ5IGNoZWNraW5nIHRoZVxubW9kdWxlXCdzIG5hbWVzcGFjZSBmb3IgYSB2YXJpYWJsZSBuYW1lZCBgYF9fYWxsX19gYDsgaWYgZGVmaW5lZCwgaXRcbm11c3QgYmUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBuYW1lcyBkZWZpbmVkIG9yIGltcG9ydGVkIGJ5XG50aGF0IG1vZHVsZS4gIFRoZSBuYW1lcyBnaXZlbiBpbiBgYF9fYWxsX19gYCBhcmUgYWxsIGNvbnNpZGVyZWQgcHVibGljXG5hbmQgYXJlIHJlcXVpcmVkIHRvIGV4aXN0LiAgSWYgYGBfX2FsbF9fYGAgaXMgbm90IGRlZmluZWQsIHRoZSBzZXQgb2ZcbnB1YmxpYyBuYW1lcyBpbmNsdWRlcyBhbGwgbmFtZXMgZm91bmQgaW4gdGhlIG1vZHVsZVwncyBuYW1lc3BhY2Ugd2hpY2hcbmRvIG5vdCBiZWdpbiB3aXRoIGFuIHVuZGVyc2NvcmUgY2hhcmFjdGVyIChgYFwnX1wnYGApLiBgYF9fYWxsX19gYFxuc2hvdWxkIGNvbnRhaW4gdGhlIGVudGlyZSBwdWJsaWMgQVBJLiBJdCBpcyBpbnRlbmRlZCB0byBhdm9pZFxuYWNjaWRlbnRhbGx5IGV4cG9ydGluZyBpdGVtcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgQVBJIChzdWNoIGFzXG5saWJyYXJ5IG1vZHVsZXMgd2hpY2ggd2VyZSBpbXBvcnRlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZSkuXG5cblRoZSBgYGZyb21gYCBmb3JtIHdpdGggYGAqYGAgbWF5IG9ubHkgb2NjdXIgaW4gYSBtb2R1bGUgc2NvcGUuICBJZiB0aGVcbndpbGQgY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gYGBpbXBvcnQgKmBgIC0tLSBpcyB1c2VkIGluIGEgZnVuY3Rpb25cbmFuZCB0aGUgZnVuY3Rpb24gY29udGFpbnMgb3IgaXMgYSBuZXN0ZWQgYmxvY2sgd2l0aCBmcmVlIHZhcmlhYmxlcyxcbnRoZSBjb21waWxlciB3aWxsIHJhaXNlIGEgYGBTeW50YXhFcnJvcmBgLlxuXG5XaGVuIHNwZWNpZnlpbmcgd2hhdCBtb2R1bGUgdG8gaW1wb3J0IHlvdSBkbyBub3QgaGF2ZSB0byBzcGVjaWZ5IHRoZVxuYWJzb2x1dGUgbmFtZSBvZiB0aGUgbW9kdWxlLiBXaGVuIGEgbW9kdWxlIG9yIHBhY2thZ2UgaXMgY29udGFpbmVkXG53aXRoaW4gYW5vdGhlciBwYWNrYWdlIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgYSByZWxhdGl2ZSBpbXBvcnQgd2l0aGluXG50aGUgc2FtZSB0b3AgcGFja2FnZSB3aXRob3V0IGhhdmluZyB0byBtZW50aW9uIHRoZSBwYWNrYWdlIG5hbWUuIEJ5XG51c2luZyBsZWFkaW5nIGRvdHMgaW4gdGhlIHNwZWNpZmllZCBtb2R1bGUgb3IgcGFja2FnZSBhZnRlciBgYGZyb21gYFxueW91IGNhbiBzcGVjaWZ5IGhvdyBoaWdoIHRvIHRyYXZlcnNlIHVwIHRoZSBjdXJyZW50IHBhY2thZ2UgaGllcmFyY2h5XG53aXRob3V0IHNwZWNpZnlpbmcgZXhhY3QgbmFtZXMuIE9uZSBsZWFkaW5nIGRvdCBtZWFucyB0aGUgY3VycmVudFxucGFja2FnZSB3aGVyZSB0aGUgbW9kdWxlIG1ha2luZyB0aGUgaW1wb3J0IGV4aXN0cy4gVHdvIGRvdHMgbWVhbnMgdXBcbm9uZSBwYWNrYWdlIGxldmVsLiBUaHJlZSBkb3RzIGlzIHVwIHR3byBsZXZlbHMsIGV0Yy4gU28gaWYgeW91IGV4ZWN1dGVcbmBgZnJvbSAuIGltcG9ydCBtb2RgYCBmcm9tIGEgbW9kdWxlIGluIHRoZSBgYHBrZ2BgIHBhY2thZ2UgdGhlbiB5b3VcbndpbGwgZW5kIHVwIGltcG9ydGluZyBgYHBrZy5tb2RgYC4gSWYgeW91IGV4ZWN1dGUgYGBmcm9tIC4uc3VicGtnMlxuaW1wcnQgbW9kYGAgZnJvbSB3aXRoaW4gYGBwa2cuc3VicGtnMWBgIHlvdSB3aWxsIGltcG9ydFxuYGBwa2cuc3VicGtnMi5tb2RgYC4gVGhlIHNwZWNpZmljYXRpb24gZm9yIHJlbGF0aXZlIGltcG9ydHMgaXNcbmNvbnRhaW5lZCB3aXRoaW4gKipQRVAgMzI4KiouXG5cbmBgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKWBgIGlzIHByb3ZpZGVkIHRvIHN1cHBvcnQgYXBwbGljYXRpb25zIHRoYXRcbmRldGVybWluZSB3aGljaCBtb2R1bGVzIG5lZWQgdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5LlxuXG5cbkZ1dHVyZSBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PVxuXG5BICpmdXR1cmUgc3RhdGVtZW50KiBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgY29tcGlsZXIgdGhhdCBhIHBhcnRpY3VsYXJcbm1vZHVsZSBzaG91bGQgYmUgY29tcGlsZWQgdXNpbmcgc3ludGF4IG9yIHNlbWFudGljcyB0aGF0IHdpbGwgYmVcbmF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBmdXR1cmUgcmVsZWFzZSBvZiBQeXRob24uICBUaGUgZnV0dXJlXG5zdGF0ZW1lbnQgaXMgaW50ZW5kZWQgdG8gZWFzZSBtaWdyYXRpb24gdG8gZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvblxudGhhdCBpbnRyb2R1Y2UgaW5jb21wYXRpYmxlIGNoYW5nZXMgdG8gdGhlIGxhbmd1YWdlLiAgSXQgYWxsb3dzIHVzZSBvZlxudGhlIG5ldyBmZWF0dXJlcyBvbiBhIHBlci1tb2R1bGUgYmFzaXMgYmVmb3JlIHRoZSByZWxlYXNlIGluIHdoaWNoIHRoZVxuZmVhdHVyZSBiZWNvbWVzIHN0YW5kYXJkLlxuXG4gICBmdXR1cmVfc3RhdGVtZW50IDo6PSAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiIGZlYXR1cmUgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgZmVhdHVyZSBbImFzIiBuYW1lXSkqXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiAiX19mdXR1cmVfXyIgImltcG9ydCIgIigiIGZlYXR1cmUgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgZmVhdHVyZSBbImFzIiBuYW1lXSkqIFsiLCJdICIpIlxuICAgZmVhdHVyZSAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgbmFtZSAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgbXVzdCBhcHBlYXIgbmVhciB0aGUgdG9wIG9mIHRoZSBtb2R1bGUuICBUaGUgb25seVxubGluZXMgdGhhdCBjYW4gYXBwZWFyIGJlZm9yZSBhIGZ1dHVyZSBzdGF0ZW1lbnQgYXJlOlxuXG4qIHRoZSBtb2R1bGUgZG9jc3RyaW5nIChpZiBhbnkpLFxuXG4qIGNvbW1lbnRzLFxuXG4qIGJsYW5rIGxpbmVzLCBhbmRcblxuKiBvdGhlciBmdXR1cmUgc3RhdGVtZW50cy5cblxuVGhlIGZlYXR1cmVzIHJlY29nbml6ZWQgYnkgUHl0aG9uIDIuNiBhcmUgYGB1bmljb2RlX2xpdGVyYWxzYGAsXG5gYHByaW50X2Z1bmN0aW9uYGAsIGBgYWJzb2x1dGVfaW1wb3J0YGAsIGBgZGl2aXNpb25gYCwgYGBnZW5lcmF0b3JzYGAsXG5gYG5lc3RlZF9zY29wZXNgYCBhbmQgYGB3aXRoX3N0YXRlbWVudGBgLiAgYGBnZW5lcmF0b3JzYGAsXG5gYHdpdGhfc3RhdGVtZW50YGAsIGBgbmVzdGVkX3Njb3Blc2BgIGFyZSByZWR1bmRhbnQgaW4gUHl0aG9uIHZlcnNpb25cbjIuNiBhbmQgYWJvdmUgYmVjYXVzZSB0aGV5IGFyZSBhbHdheXMgZW5hYmxlZC5cblxuQSBmdXR1cmUgc3RhdGVtZW50IGlzIHJlY29nbml6ZWQgYW5kIHRyZWF0ZWQgc3BlY2lhbGx5IGF0IGNvbXBpbGVcbnRpbWU6IENoYW5nZXMgdG8gdGhlIHNlbWFudGljcyBvZiBjb3JlIGNvbnN0cnVjdHMgYXJlIG9mdGVuXG5pbXBsZW1lbnRlZCBieSBnZW5lcmF0aW5nIGRpZmZlcmVudCBjb2RlLiAgSXQgbWF5IGV2ZW4gYmUgdGhlIGNhc2VcbnRoYXQgYSBuZXcgZmVhdHVyZSBpbnRyb2R1Y2VzIG5ldyBpbmNvbXBhdGlibGUgc3ludGF4IChzdWNoIGFzIGEgbmV3XG5yZXNlcnZlZCB3b3JkKSwgaW4gd2hpY2ggY2FzZSB0aGUgY29tcGlsZXIgbWF5IG5lZWQgdG8gcGFyc2UgdGhlXG5tb2R1bGUgZGlmZmVyZW50bHkuICBTdWNoIGRlY2lzaW9ucyBjYW5ub3QgYmUgcHVzaGVkIG9mZiB1bnRpbFxucnVudGltZS5cblxuRm9yIGFueSBnaXZlbiByZWxlYXNlLCB0aGUgY29tcGlsZXIga25vd3Mgd2hpY2ggZmVhdHVyZSBuYW1lcyBoYXZlXG5iZWVuIGRlZmluZWQsIGFuZCByYWlzZXMgYSBjb21waWxlLXRpbWUgZXJyb3IgaWYgYSBmdXR1cmUgc3RhdGVtZW50XG5jb250YWlucyBhIGZlYXR1cmUgbm90IGtub3duIHRvIGl0LlxuXG5UaGUgZGlyZWN0IHJ1bnRpbWUgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYW55IGltcG9ydCBzdGF0ZW1lbnQ6XG50aGVyZSBpcyBhIHN0YW5kYXJkIG1vZHVsZSBgYF9fZnV0dXJlX19gYCwgZGVzY3JpYmVkIGxhdGVyLCBhbmQgaXRcbndpbGwgYmUgaW1wb3J0ZWQgaW4gdGhlIHVzdWFsIHdheSBhdCB0aGUgdGltZSB0aGUgZnV0dXJlIHN0YXRlbWVudCBpc1xuZXhlY3V0ZWQuXG5cblRoZSBpbnRlcmVzdGluZyBydW50aW1lIHNlbWFudGljcyBkZXBlbmQgb24gdGhlIHNwZWNpZmljIGZlYXR1cmVcbmVuYWJsZWQgYnkgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQuXG5cbk5vdGUgdGhhdCB0aGVyZSBpcyBub3RoaW5nIHNwZWNpYWwgYWJvdXQgdGhlIHN0YXRlbWVudDpcblxuICAgaW1wb3J0IF9fZnV0dXJlX18gW2FzIG5hbWVdXG5cblRoYXQgaXMgbm90IGEgZnV0dXJlIHN0YXRlbWVudDsgaXRcJ3MgYW4gb3JkaW5hcnkgaW1wb3J0IHN0YXRlbWVudCB3aXRoXG5ubyBzcGVjaWFsIHNlbWFudGljcyBvciBzeW50YXggcmVzdHJpY3Rpb25zLlxuXG5Db2RlIGNvbXBpbGVkIGJ5IGFuIGBgZXhlY2BgIHN0YXRlbWVudCBvciBjYWxscyB0byB0aGUgYnVpbHQtaW5cbmZ1bmN0aW9ucyBgYGNvbXBpbGUoKWBgIGFuZCBgYGV4ZWNmaWxlKClgYCB0aGF0IG9jY3VyIGluIGEgbW9kdWxlXG5gYE1gYCBjb250YWluaW5nIGEgZnV0dXJlIHN0YXRlbWVudCB3aWxsLCBieSBkZWZhdWx0LCB1c2UgdGhlIG5ld1xuc3ludGF4IG9yIHNlbWFudGljcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZ1dHVyZSBzdGF0ZW1lbnQuICBUaGlzIGNhbixcbnN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMiBiZSBjb250cm9sbGVkIGJ5IG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xuYGBjb21waWxlKClgYCAtLS0gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24gZm9yIGRldGFpbHMuXG5cbkEgZnV0dXJlIHN0YXRlbWVudCB0eXBlZCBhdCBhbiBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBwcm9tcHQgd2lsbFxudGFrZSBlZmZlY3QgZm9yIHRoZSByZXN0IG9mIHRoZSBpbnRlcnByZXRlciBzZXNzaW9uLiAgSWYgYW5cbmludGVycHJldGVyIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgKi1pKiBvcHRpb24sIGlzIHBhc3NlZCBhIHNjcmlwdCBuYW1lXG50byBleGVjdXRlLCBhbmQgdGhlIHNjcmlwdCBpbmNsdWRlcyBhIGZ1dHVyZSBzdGF0ZW1lbnQsIGl0IHdpbGwgYmUgaW5cbmVmZmVjdCBpbiB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbiBzdGFydGVkIGFmdGVyIHRoZSBzY3JpcHQgaXNcbmV4ZWN1dGVkLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMjM2KiogLSBCYWNrIHRvIHRoZSBfX2Z1dHVyZV9fXG4gICAgICBUaGUgb3JpZ2luYWwgcHJvcG9zYWwgZm9yIHRoZSBfX2Z1dHVyZV9fIG1lY2hhbmlzbS5cbicsCiAgJ2luJzogdSdcbkNvbXBhcmlzb25zXG4qKioqKioqKioqKlxuXG5Vbmxpa2UgQywgYWxsIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpbiBQeXRob24gaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSxcbndoaWNoIGlzIGxvd2VyIHRoYW4gdGhhdCBvZiBhbnkgYXJpdGhtZXRpYywgc2hpZnRpbmcgb3IgYml0d2lzZVxub3BlcmF0aW9uLiAgQWxzbyB1bmxpa2UgQywgZXhwcmVzc2lvbnMgbGlrZSBgYGEgPCBiIDwgY2BgIGhhdmUgdGhlXG5pbnRlcnByZXRhdGlvbiB0aGF0IGlzIGNvbnZlbnRpb25hbCBpbiBtYXRoZW1hdGljczpcblxuICAgY29tcGFyaXNvbiAgICA6Oj0gb3JfZXhwciAoIGNvbXBfb3BlcmF0b3Igb3JfZXhwciApKlxuICAgY29tcF9vcGVyYXRvciA6Oj0gIjwiIHwgIj4iIHwgIj09IiB8ICI+PSIgfCAiPD0iIHwgIjw+IiB8ICIhPSJcbiAgICAgICAgICAgICAgICAgICAgIHwgImlzIiBbIm5vdCJdIHwgWyJub3QiXSAiaW4iXG5cbkNvbXBhcmlzb25zIHlpZWxkIGJvb2xlYW4gdmFsdWVzOiBgYFRydWVgYCBvciBgYEZhbHNlYGAuXG5cbkNvbXBhcmlzb25zIGNhbiBiZSBjaGFpbmVkIGFyYml0cmFyaWx5LCBlLmcuLCBgYHggPCB5IDw9IHpgYCBpc1xuZXF1aXZhbGVudCB0byBgYHggPCB5IGFuZCB5IDw9IHpgYCwgZXhjZXB0IHRoYXQgYGB5YGAgaXMgZXZhbHVhdGVkXG5vbmx5IG9uY2UgKGJ1dCBpbiBib3RoIGNhc2VzIGBgemBgIGlzIG5vdCBldmFsdWF0ZWQgYXQgYWxsIHdoZW4gYGB4IDxcbnlgYCBpcyBmb3VuZCB0byBiZSBmYWxzZSkuXG5cbkZvcm1hbGx5LCBpZiAqYSosICpiKiwgKmMqLCAuLi4sICp5KiwgKnoqIGFyZSBleHByZXNzaW9ucyBhbmQgKm9wMSosXG4qb3AyKiwgLi4uLCAqb3BOKiBhcmUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIHRoZW4gYGBhIG9wMSBiIG9wMiBjIC4uLiB5XG5vcE4gemBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhIG9wMSBiIGFuZCBiIG9wMiBjIGFuZCAuLi4geSBvcE4gemBgLFxuZXhjZXB0IHRoYXQgZWFjaCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBhdCBtb3N0IG9uY2UuXG5cbk5vdGUgdGhhdCBgYGEgb3AxIGIgb3AyIGNgYCBkb2VzblwndCBpbXBseSBhbnkga2luZCBvZiBjb21wYXJpc29uXG5iZXR3ZWVuICphKiBhbmQgKmMqLCBzbyB0aGF0LCBlLmcuLCBgYHggPCB5ID4gemBgIGlzIHBlcmZlY3RseSBsZWdhbFxuKHRob3VnaCBwZXJoYXBzIG5vdCBwcmV0dHkpLlxuXG5UaGUgZm9ybXMgYGA8PmBgIGFuZCBgYCE9YGAgYXJlIGVxdWl2YWxlbnQ7IGZvciBjb25zaXN0ZW5jeSB3aXRoIEMsXG5gYCE9YGAgaXMgcHJlZmVycmVkOyB3aGVyZSBgYCE9YGAgaXMgbWVudGlvbmVkIGJlbG93IGBgPD5gYCBpcyBhbHNvXG5hY2NlcHRlZC4gIFRoZSBgYDw+YGAgc3BlbGxpbmcgaXMgY29uc2lkZXJlZCBvYnNvbGVzY2VudC5cblxuVGhlIG9wZXJhdG9ycyBgYDxgYCwgYGA+YGAsIGBgPT1gYCwgYGA+PWBgLCBgYDw9YGAsIGFuZCBgYCE9YGAgY29tcGFyZVxudGhlIHZhbHVlcyBvZiB0d28gb2JqZWN0cy4gIFRoZSBvYmplY3RzIG5lZWQgbm90IGhhdmUgdGhlIHNhbWUgdHlwZS5cbklmIGJvdGggYXJlIG51bWJlcnMsIHRoZXkgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiAgT3RoZXJ3aXNlLFxub2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgKmFsd2F5cyogY29tcGFyZSB1bmVxdWFsLCBhbmQgYXJlIG9yZGVyZWRcbmNvbnNpc3RlbnRseSBidXQgYXJiaXRyYXJpbHkuIFlvdSBjYW4gY29udHJvbCBjb21wYXJpc29uIGJlaGF2aW9yIG9mXG5vYmplY3RzIG9mIG5vbi1idWlsdC1pbiB0eXBlcyBieSBkZWZpbmluZyBhIGBgX19jbXBfX2BgIG1ldGhvZCBvciByaWNoXG5jb21wYXJpc29uIG1ldGhvZHMgbGlrZSBgYF9fZ3RfX2BgLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqU3BlY2lhbFxubWV0aG9kIG5hbWVzKi5cblxuKFRoaXMgdW51c3VhbCBkZWZpbml0aW9uIG9mIGNvbXBhcmlzb24gd2FzIHVzZWQgdG8gc2ltcGxpZnkgdGhlXG5kZWZpbml0aW9uIG9mIG9wZXJhdGlvbnMgbGlrZSBzb3J0aW5nIGFuZCB0aGUgYGBpbmBgIGFuZCBgYG5vdCBpbmBgXG5vcGVyYXRvcnMuIEluIHRoZSBmdXR1cmUsIHRoZSBjb21wYXJpc29uIHJ1bGVzIGZvciBvYmplY3RzIG9mXG5kaWZmZXJlbnQgdHlwZXMgYXJlIGxpa2VseSB0byBjaGFuZ2UuKVxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBkZXBlbmRzIG9uIHRoZSB0eXBlOlxuXG4qIE51bWJlcnMgYXJlIGNvbXBhcmVkIGFyaXRobWV0aWNhbGx5LlxuXG4qIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljIGVxdWl2YWxlbnRzXG4gICh0aGUgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYG9yZCgpYGApIG9mIHRoZWlyIGNoYXJhY3RlcnMuXG4gIFVuaWNvZGUgYW5kIDgtYml0IHN0cmluZ3MgYXJlIGZ1bGx5IGludGVyb3BlcmFibGUgaW4gdGhpcyBiZWhhdmlvci5cbiAgWzRdXG5cbiogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvbiBvZlxuICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2hcbiAgZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0XG4gIGRpZmZlcmluZyBlbGVtZW50cy4gIEZvciBleGFtcGxlLCBgYGNtcChbMSwyLHhdLCBbMSwyLHldKWBgIHJldHVybnNcbiAgdGhlIHNhbWUgYXMgYGBjbXAoeCx5KWBgLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBkb2VzIG5vdFxuICBleGlzdCwgdGhlIHNob3J0ZXIgc2VxdWVuY2UgaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsIGBgWzEsMl0gPFxuICBbMSwyLDNdYGApLlxuXG4qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhlaXIgc29ydGVkXG4gIChrZXksIHZhbHVlKSBsaXN0cyBjb21wYXJlIGVxdWFsLiBbNV0gT3V0Y29tZXMgb3RoZXIgdGhhbiBlcXVhbGl0eVxuICBhcmUgcmVzb2x2ZWQgY29uc2lzdGVudGx5LCBidXQgYXJlIG5vdCBvdGhlcndpc2UgZGVmaW5lZC4gWzZdXG5cbiogTW9zdCBvdGhlciBvYmplY3RzIG9mIGJ1aWx0LWluIHR5cGVzIGNvbXBhcmUgdW5lcXVhbCB1bmxlc3MgdGhleSBhcmVcbiAgdGhlIHNhbWUgb2JqZWN0OyB0aGUgY2hvaWNlIHdoZXRoZXIgb25lIG9iamVjdCBpcyBjb25zaWRlcmVkIHNtYWxsZXJcbiAgb3IgbGFyZ2VyIHRoYW4gYW5vdGhlciBvbmUgaXMgbWFkZSBhcmJpdHJhcmlseSBidXQgY29uc2lzdGVudGx5XG4gIHdpdGhpbiBvbmUgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS5cblxuVGhlIG9wZXJhdG9ycyBgYGluYGAgYW5kIGBgbm90IGluYGAgdGVzdCBmb3IgY29sbGVjdGlvbiBtZW1iZXJzaGlwLlxuYGB4IGluIHNgYCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgdGhlIGNvbGxlY3Rpb24gKnMqLFxuYW5kIGZhbHNlIG90aGVyd2lzZS4gIGBgeCBub3QgaW4gc2BgIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIGBgeCBpblxuc2BgLiBUaGUgY29sbGVjdGlvbiBtZW1iZXJzaGlwIHRlc3QgaGFzIHRyYWRpdGlvbmFsbHkgYmVlbiBib3VuZCB0b1xuc2VxdWVuY2VzOyBhbiBvYmplY3QgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW9uIGlmIHRoZSBjb2xsZWN0aW9uIGlzXG5hIHNlcXVlbmNlIGFuZCBjb250YWlucyBhbiBlbGVtZW50IGVxdWFsIHRvIHRoYXQgb2JqZWN0LiAgSG93ZXZlciwgaXRcbm1ha2Ugc2Vuc2UgZm9yIG1hbnkgb3RoZXIgb2JqZWN0IHR5cGVzIHRvIHN1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0c1xud2l0aG91dCBiZWluZyBhIHNlcXVlbmNlLiAgSW4gcGFydGljdWxhciwgZGljdGlvbmFyaWVzIChmb3Iga2V5cykgYW5kXG5zZXRzIHN1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0aW5nLlxuXG5Gb3IgdGhlIGxpc3QgYW5kIHR1cGxlIHR5cGVzLCBgYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlcmVcbmV4aXN0cyBhbiBpbmRleCAqaSogc3VjaCB0aGF0IGBgeCA9PSB5W2ldYGAgaXMgdHJ1ZS5cblxuRm9yIHRoZSBVbmljb2RlIGFuZCBzdHJpbmcgdHlwZXMsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZlxuKngqIGlzIGEgc3Vic3RyaW5nIG9mICp5Ki4gIEFuIGVxdWl2YWxlbnQgdGVzdCBpcyBgYHkuZmluZCh4KSAhPSAtMWBgLlxuTm90ZSwgKngqIGFuZCAqeSogbmVlZCBub3QgYmUgdGhlIHNhbWUgdHlwZTsgY29uc2VxdWVudGx5LCBgYHVcJ2FiXCcgaW5cblwnYWJjXCdgYCB3aWxsIHJldHVybiBgYFRydWVgYC4gRW1wdHkgc3RyaW5ncyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG9cbmJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlciBzdHJpbmcsIHNvIGBgIiIgaW4gImFiYyJgYCB3aWxsIHJldHVyblxuYGBUcnVlYGAuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksICp4KiB3YXMgcmVxdWlyZWQgdG8gYmUgYSBzdHJpbmcgb2Zcbmxlbmd0aCBgYDFgYC5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCxcbmBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiBgYHkuX19jb250YWluc19fKHgpYGAgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgIGJ1dCBkb1xuZGVmaW5lIGBgX19pdGVyX18oKWBgLCBgYHggaW4geWBgIGlzIHRydWUgaWYgc29tZSB2YWx1ZSBgYHpgYCB3aXRoIGBgeFxuPT0gemBgIGlzIHByb2R1Y2VkIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGBgeWBgLiAgSWYgYW4gZXhjZXB0aW9uIGlzXG5yYWlzZWQgZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmIGBgaW5gYCByYWlzZWQgdGhhdCBleGNlcHRpb24uXG5cbkxhc3RseSwgdGhlIG9sZC1zdHlsZSBpdGVyYXRpb24gcHJvdG9jb2wgaXMgdHJpZWQ6IGlmIGEgY2xhc3MgZGVmaW5lc1xuYGBfX2dldGl0ZW1fXygpYGAsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCBgYHggPT0geVtpXWBgLCBhbmQgYWxsIGxvd2VyXG5pbnRlZ2VyIGluZGljZXMgZG8gbm90IHJhaXNlIGBgSW5kZXhFcnJvcmBgIGV4Y2VwdGlvbi4gKElmIGFueSBvdGhlclxuZXhjZXB0aW9uIGlzIHJhaXNlZCwgaXQgaXMgYXMgaWYgYGBpbmBgIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbikuXG5cblRoZSBvcGVyYXRvciBgYG5vdCBpbmBgIGlzIGRlZmluZWQgdG8gaGF2ZSB0aGUgaW52ZXJzZSB0cnVlIHZhbHVlIG9mXG5gYGluYGAuXG5cblRoZSBvcGVyYXRvcnMgYGBpc2BgIGFuZCBgYGlzIG5vdGBgIHRlc3QgZm9yIG9iamVjdCBpZGVudGl0eTogYGB4IGlzXG55YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogYW5kICp5KiBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgYGB4IGlzXG5ub3QgeWBgIHlpZWxkcyB0aGUgaW52ZXJzZSB0cnV0aCB2YWx1ZS4gWzddXG4nLAogICdpbnRlZ2Vycyc6IHUnXG5JbnRlZ2VyIGFuZCBsb25nIGludGVnZXIgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5JbnRlZ2VyIGFuZCBsb25nIGludGVnZXIgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nXG5sZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBsb25naW50ZWdlciAgICA6Oj0gaW50ZWdlciAoImwiIHwgIkwiKVxuICAgaW50ZWdlciAgICAgICAgOjo9IGRlY2ltYWxpbnRlZ2VyIHwgb2N0aW50ZWdlciB8IGhleGludGVnZXIgfCBiaW5pbnRlZ2VyXG4gICBkZWNpbWFsaW50ZWdlciA6Oj0gbm9uemVyb2RpZ2l0IGRpZ2l0KiB8ICIwIlxuICAgb2N0aW50ZWdlciAgICAgOjo9ICIwIiAoIm8iIHwgIk8iKSBvY3RkaWdpdCsgfCAiMCIgb2N0ZGlnaXQrXG4gICBoZXhpbnRlZ2VyICAgICA6Oj0gIjAiICgieCIgfCAiWCIpIGhleGRpZ2l0K1xuICAgYmluaW50ZWdlciAgICAgOjo9ICIwIiAoImIiIHwgIkIiKSBiaW5kaWdpdCtcbiAgIG5vbnplcm9kaWdpdCAgIDo6PSAiMSIuLi4iOSJcbiAgIG9jdGRpZ2l0ICAgICAgIDo6PSAiMCIuLi4iNyJcbiAgIGJpbmRpZ2l0ICAgICAgIDo6PSAiMCIgfCAiMSJcbiAgIGhleGRpZ2l0ICAgICAgIDo6PSBkaWdpdCB8ICJhIi4uLiJmIiB8ICJBIi4uLiJGIlxuXG5BbHRob3VnaCBib3RoIGxvd2VyIGNhc2UgYGBcJ2xcJ2BgIGFuZCB1cHBlciBjYXNlIGBgXCdMXCdgYCBhcmUgYWxsb3dlZCBhc1xuc3VmZml4IGZvciBsb25nIGludGVnZXJzLCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBhbHdheXMgdXNlXG5gYFwnTFwnYGAsIHNpbmNlIHRoZSBsZXR0ZXIgYGBcJ2xcJ2BgIGxvb2tzIHRvbyBtdWNoIGxpa2UgdGhlIGRpZ2l0XG5gYFwnMVwnYGAuXG5cblBsYWluIGludGVnZXIgbGl0ZXJhbHMgdGhhdCBhcmUgYWJvdmUgdGhlIGxhcmdlc3QgcmVwcmVzZW50YWJsZSBwbGFpblxuaW50ZWdlciAoZS5nLiwgMjE0NzQ4MzY0NyB3aGVuIHVzaW5nIDMyLWJpdCBhcml0aG1ldGljKSBhcmUgYWNjZXB0ZWRcbmFzIGlmIHRoZXkgd2VyZSBsb25nIGludGVnZXJzIGluc3RlYWQuIFsxXSAgVGhlcmUgaXMgbm8gbGltaXQgZm9yIGxvbmdcbmludGVnZXIgbGl0ZXJhbHMgYXBhcnQgZnJvbSB3aGF0IGNhbiBiZSBzdG9yZWQgaW4gYXZhaWxhYmxlIG1lbW9yeS5cblxuU29tZSBleGFtcGxlcyBvZiBwbGFpbiBpbnRlZ2VyIGxpdGVyYWxzIChmaXJzdCByb3cpIGFuZCBsb25nIGludGVnZXJcbmxpdGVyYWxzIChzZWNvbmQgYW5kIHRoaXJkIHJvd3MpOlxuXG4gICA3ICAgICAyMTQ3NDgzNjQ3ICAgICAgICAgICAgICAgICAgICAgICAgMDE3N1xuICAgM0wgICAgNzkyMjgxNjI1MTQyNjQzMzc1OTM1NDM5NTAzMzZMICAgIDAzNzdMICAgMHgxMDAwMDAwMDBMXG4gICAgICAgICA3OTIyODE2MjUxNDI2NDMzNzU5MzU0Mzk1MDMzNiAgICAgICAgICAgICAweGRlYWRiZWVmXG4nLAogICdsYW1iZGEnOiB1J1xuTGFtYmRhc1xuKioqKioqKlxuXG4gICBsYW1iZGFfZm9ybSAgICAgOjo9ICJsYW1iZGEiIFtwYXJhbWV0ZXJfbGlzdF06IGV4cHJlc3Npb25cbiAgIG9sZF9sYW1iZGFfZm9ybSA6Oj0gImxhbWJkYSIgW3BhcmFtZXRlcl9saXN0XTogb2xkX2V4cHJlc3Npb25cblxuTGFtYmRhIGZvcm1zIChsYW1iZGEgZXhwcmVzc2lvbnMpIGhhdmUgdGhlIHNhbWUgc3ludGFjdGljIHBvc2l0aW9uIGFzXG5leHByZXNzaW9ucy4gIFRoZXkgYXJlIGEgc2hvcnRoYW5kIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zOyB0aGVcbmV4cHJlc3Npb24gYGBsYW1iZGEgYXJndW1lbnRzOiBleHByZXNzaW9uYGAgeWllbGRzIGEgZnVuY3Rpb24gb2JqZWN0LlxuVGhlIHVubmFtZWQgb2JqZWN0IGJlaGF2ZXMgbGlrZSBhIGZ1bmN0aW9uIG9iamVjdCBkZWZpbmVkIHdpdGhcblxuICAgZGVmIG5hbWUoYXJndW1lbnRzKTpcbiAgICAgICByZXR1cm4gZXhwcmVzc2lvblxuXG5TZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIHBhcmFtZXRlciBsaXN0cy5cbk5vdGUgdGhhdCBmdW5jdGlvbnMgY3JlYXRlZCB3aXRoIGxhbWJkYSBmb3JtcyBjYW5ub3QgY29udGFpblxuc3RhdGVtZW50cy5cbicsCkBAIC02MCwyNCArNjAsMjQgQEAKICAncmV0dXJuJzogdSdcblRoZSBgYHJldHVybmBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHJldHVybl9zdG10IDo6PSAicmV0dXJuIiBbZXhwcmVzc2lvbl9saXN0XVxuXG5gYHJldHVybmBgIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgZnVuY3Rpb25cbmRlZmluaXRpb24sIG5vdCB3aXRoaW4gYSBuZXN0ZWQgY2xhc3MgZGVmaW5pdGlvbi5cblxuSWYgYW4gZXhwcmVzc2lvbiBsaXN0IGlzIHByZXNlbnQsIGl0IGlzIGV2YWx1YXRlZCwgZWxzZSBgYE5vbmVgYCBpc1xuc3Vic3RpdHV0ZWQuXG5cbmBgcmV0dXJuYGAgbGVhdmVzIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwgd2l0aCB0aGUgZXhwcmVzc2lvbiBsaXN0XG4ob3IgYGBOb25lYGApIGFzIHJldHVybiB2YWx1ZS5cblxuV2hlbiBgYHJldHVybmBgIHBhc3NlcyBjb250cm9sIG91dCBvZiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggYVxuYGBmaW5hbGx5YGAgY2xhdXNlLCB0aGF0IGBgZmluYWxseWBgIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5XG5sZWF2aW5nIHRoZSBmdW5jdGlvbi5cblxuSW4gYSBnZW5lcmF0b3IgZnVuY3Rpb24sIHRoZSBgYHJldHVybmBgIHN0YXRlbWVudCBpcyBub3QgYWxsb3dlZCB0b1xuaW5jbHVkZSBhbiAqKmV4cHJlc3Npb25fbGlzdCoqLiAgSW4gdGhhdCBjb250ZXh0LCBhIGJhcmUgYGByZXR1cm5gYFxuaW5kaWNhdGVzIHRoYXQgdGhlIGdlbmVyYXRvciBpcyBkb25lIGFuZCB3aWxsIGNhdXNlIGBgU3RvcEl0ZXJhdGlvbmBgXG50byBiZSByYWlzZWQuXG4nLAogICdzZXF1ZW5jZS1tZXRob2RzJzogdSdcbkFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgZW11bGF0aW9uIG9mIHNlcXVlbmNlIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG9wdGlvbmFsIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gZnVydGhlciBlbXVsYXRlXG5zZXF1ZW5jZSBvYmplY3RzLiAgSW1tdXRhYmxlIHNlcXVlbmNlcyBtZXRob2RzIHNob3VsZCBhdCBtb3N0IG9ubHlcbmRlZmluZSBgYF9fZ2V0c2xpY2VfXygpYGA7IG11dGFibGUgc2VxdWVuY2VzIG1pZ2h0IGRlZmluZSBhbGwgdGhyZWVcbm1ldGhvZHMuXG5cbm9iamVjdC5fX2dldHNsaWNlX18oc2VsZiwgaSwgailcblxuICAgRGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuMDogU3VwcG9ydCBzbGljZSBvYmplY3RzIGFzIHBhcmFtZXRlcnNcbiAgIHRvIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuIChIb3dldmVyLCBidWlsdC1pbiB0eXBlcyBpblxuICAgQ1B5dGhvbiBjdXJyZW50bHkgc3RpbGwgaW1wbGVtZW50IGBgX19nZXRzbGljZV9fKClgYC4gIFRoZXJlZm9yZSxcbiAgIHlvdSBoYXZlIHRvIG92ZXJyaWRlIGl0IGluIGRlcml2ZWQgY2xhc3NlcyB3aGVuIGltcGxlbWVudGluZ1xuICAgc2xpY2luZy4pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiBgYHNlbGZbaTpqXWBgLiBUaGUgcmV0dXJuZWRcbiAgIG9iamVjdCBzaG91bGQgYmUgb2YgdGhlIHNhbWUgdHlwZSBhcyAqc2VsZiouICBOb3RlIHRoYXQgbWlzc2luZyAqaSpcbiAgIG9yICpqKiBpbiB0aGUgc2xpY2UgZXhwcmVzc2lvbiBhcmUgcmVwbGFjZWQgYnkgemVybyBvclxuICAgYGBzeXMubWF4aW50YGAsIHJlc3BlY3RpdmVseS4gIElmIG5lZ2F0aXZlIGluZGV4ZXMgYXJlIHVzZWQgaW4gdGhlXG4gICBzbGljZSwgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgaXMgYWRkZWQgdG8gdGhhdCBpbmRleC4gSWYgdGhlXG4gICBpbnN0YW5jZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGBgX19sZW5fXygpYGAgbWV0aG9kLCBhblxuICAgYGBBdHRyaWJ1dGVFcnJvcmBgIGlzIHJhaXNlZC4gTm8gZ3VhcmFudGVlIGlzIG1hZGUgdGhhdCBpbmRleGVzXG4gICBhZGp1c3RlZCB0aGlzIHdheSBhcmUgbm90IHN0aWxsIG5lZ2F0aXZlLiAgSW5kZXhlcyB3aGljaCBhcmVcbiAgIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSBhcmUgbm90IG1vZGlmaWVkLiBJZiBub1xuICAgYGBfX2dldHNsaWNlX18oKWBgIGlzIGZvdW5kLCBhIHNsaWNlIG9iamVjdCBpcyBjcmVhdGVkIGluc3RlYWQsIGFuZFxuICAgcGFzc2VkIHRvIGBgX19nZXRpdGVtX18oKWBgIGluc3RlYWQuXG5cbm9iamVjdC5fX3NldHNsaWNlX18oc2VsZiwgaSwgaiwgc2VxdWVuY2UpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byBgYHNlbGZbaTpqXWBgLiBTYW1lIG5vdGVzIGZvciAqaSpcbiAgIGFuZCAqaiogYXMgZm9yIGBgX19nZXRzbGljZV9fKClgYC5cblxuICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gSWYgbm8gYGBfX3NldHNsaWNlX18oKWBgIGlzIGZvdW5kLCBvclxuICAgZm9yIGV4dGVuZGVkIHNsaWNpbmcgb2YgdGhlIGZvcm0gYGBzZWxmW2k6ajprXWBgLCBhIHNsaWNlIG9iamVjdCBpc1xuICAgY3JlYXRlZCwgYW5kIHBhc3NlZCB0byBgYF9fc2V0aXRlbV9fKClgYCwgaW5zdGVhZCBvZlxuICAgYGBfX3NldHNsaWNlX18oKWBgIGJlaW5nIGNhbGxlZC5cblxub2JqZWN0Ll9fZGVsc2xpY2VfXyhzZWxmLCBpLCBqKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mIGBgc2VsZltpOmpdYGAuIFNhbWUgbm90ZXMgZm9yICppKlxuICAgYW5kICpqKiBhcyBmb3IgYGBfX2dldHNsaWNlX18oKWBgLiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJZiBub1xuICAgYGBfX2RlbHNsaWNlX18oKWBgIGlzIGZvdW5kLCBvciBmb3IgZXh0ZW5kZWQgc2xpY2luZyBvZiB0aGUgZm9ybVxuICAgYGBzZWxmW2k6ajprXWBgLCBhIHNsaWNlIG9iamVjdCBpcyBjcmVhdGVkLCBhbmQgcGFzc2VkIHRvXG4gICBgYF9fZGVsaXRlbV9fKClgYCwgaW5zdGVhZCBvZiBgYF9fZGVsc2xpY2VfXygpYGAgYmVpbmcgY2FsbGVkLlxuXG5Ob3RpY2UgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSBvbmx5IGludm9rZWQgd2hlbiBhIHNpbmdsZSBzbGljZSB3aXRoIGFcbnNpbmdsZSBjb2xvbiBpcyB1c2VkLCBhbmQgdGhlIHNsaWNlIG1ldGhvZCBpcyBhdmFpbGFibGUuICBGb3Igc2xpY2Vcbm9wZXJhdGlvbnMgaW52b2x2aW5nIGV4dGVuZGVkIHNsaWNlIG5vdGF0aW9uLCBvciBpbiBhYnNlbmNlIG9mIHRoZVxuc2xpY2UgbWV0aG9kcywgYGBfX2dldGl0ZW1fXygpYGAsIGBgX19zZXRpdGVtX18oKWBgIG9yXG5gYF9fZGVsaXRlbV9fKClgYCBpcyBjYWxsZWQgd2l0aCBhIHNsaWNlIG9iamVjdCBhcyBhcmd1bWVudC5cblxuVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlIGhvdyB0byBtYWtlIHlvdXIgcHJvZ3JhbSBvciBtb2R1bGVcbmNvbXBhdGlibGUgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbiAoYXNzdW1pbmcgdGhhdCBtZXRob2RzXG5gYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAgYW5kIGBgX19kZWxpdGVtX18oKWBgIHN1cHBvcnRcbnNsaWNlIG9iamVjdHMgYXMgYXJndW1lbnRzKTpcblxuICAgY2xhc3MgTXlDbGFzczpcbiAgICAgICAuLi5cbiAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOlxuICAgICAgICAgICAuLi5cbiAgICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIHZhbHVlKTpcbiAgICAgICAgICAgLi4uXG4gICAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KTpcbiAgICAgICAgICAgLi4uXG5cbiAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDApOlxuICAgICAgICAgICAjIFRoZXkgd29uXCd0IGJlIGRlZmluZWQgaWYgdmVyc2lvbiBpcyBhdCBsZWFzdCAyLjAgZmluYWxcblxuICAgICAgICAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIGksIGopOlxuICAgICAgICAgICAgICAgcmV0dXJuIHNlbGZbbWF4KDAsIGkpOm1heCgwLCBqKTpdXG4gICAgICAgICAgIGRlZiBfX3NldHNsaWNlX18oc2VsZiwgaSwgaiwgc2VxKTpcbiAgICAgICAgICAgICAgIHNlbGZbbWF4KDAsIGkpOm1heCgwLCBqKTpdID0gc2VxXG4gICAgICAgICAgIGRlZiBfX2RlbHNsaWNlX18oc2VsZiwgaSwgaik6XG4gICAgICAgICAgICAgICBkZWwgc2VsZlttYXgoMCwgaSk6bWF4KDAsIGopOl1cbiAgICAgICAuLi5cblxuTm90ZSB0aGUgY2FsbHMgdG8gYGBtYXgoKWBgOyB0aGVzZSBhcmUgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlXG5oYW5kbGluZyBvZiBuZWdhdGl2ZSBpbmRpY2VzIGJlZm9yZSB0aGUgYGBfXypzbGljZV9fKClgYCBtZXRob2RzIGFyZVxuY2FsbGVkLiAgV2hlbiBuZWdhdGl2ZSBpbmRleGVzIGFyZSB1c2VkLCB0aGUgYGBfXyppdGVtX18oKWBgIG1ldGhvZHNcbnJlY2VpdmUgdGhlbSBhcyBwcm92aWRlZCwgYnV0IHRoZSBgYF9fKnNsaWNlX18oKWBgIG1ldGhvZHMgZ2V0IGFcbiJjb29rZWQiIGZvcm0gb2YgdGhlIGluZGV4IHZhbHVlcy4gIEZvciBlYWNoIG5lZ2F0aXZlIGluZGV4IHZhbHVlLCB0aGVcbmxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgaXMgYWRkZWQgdG8gdGhlIGluZGV4IGJlZm9yZSBjYWxsaW5nIHRoZSBtZXRob2Rcbih3aGljaCBtYXkgc3RpbGwgcmVzdWx0IGluIGEgbmVnYXRpdmUgaW5kZXgpOyB0aGlzIGlzIHRoZSBjdXN0b21hcnlcbmhhbmRsaW5nIG9mIG5lZ2F0aXZlIGluZGV4ZXMgYnkgdGhlIGJ1aWx0LWluIHNlcXVlbmNlIHR5cGVzLCBhbmQgdGhlXG5gYF9fKml0ZW1fXygpYGAgbWV0aG9kcyBhcmUgZXhwZWN0ZWQgdG8gZG8gdGhpcyBhcyB3ZWxsLiAgSG93ZXZlcixcbnNpbmNlIHRoZXkgc2hvdWxkIGFscmVhZHkgYmUgZG9pbmcgdGhhdCwgbmVnYXRpdmUgaW5kZXhlcyBjYW5ub3QgYmVcbnBhc3NlZCBpbjsgdGhleSBtdXN0IGJlIGNvbnN0cmFpbmVkIHRvIHRoZSBib3VuZHMgb2YgdGhlIHNlcXVlbmNlXG5iZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBgYF9fKml0ZW1fXygpYGAgbWV0aG9kcy4gQ2FsbGluZyBgYG1heCgwLFxuaSlgYCBjb252ZW5pZW50bHkgcmV0dXJucyB0aGUgcHJvcGVyIHZhbHVlLlxuJywKICAnc2VxdWVuY2UtdHlwZXMnOiB1IlxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuIChGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSBtZXRob2RcbmBgX19nZXRzbGljZV9fKClgYCAoc2VlIGJlbG93KSBjYW4gYWxzbyBiZSBkZWZpbmVkIHRvIGhhbmRsZSBzaW1wbGUsXG5idXQgbm90IGV4dGVuZGVkIHNsaWNlcy4pIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlXG50aGUgbWV0aG9kcyBgYGtleXMoKWBgLCBgYHZhbHVlcygpYGAsIGBgaXRlbXMoKWBgLCBgYGhhc19rZXkoKWBgLFxuYGBnZXQoKWBgLCBgYGNsZWFyKClgYCwgYGBzZXRkZWZhdWx0KClgYCwgYGBpdGVya2V5cygpYGAsXG5gYGl0ZXJ2YWx1ZXMoKWBgLCBgYGl0ZXJpdGVtcygpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCxcbmBgY29weSgpYGAsIGFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uJ3NcbnN0YW5kYXJkIGRpY3Rpb25hcnkgb2JqZWN0cy4gIFRoZSBgYFVzZXJEaWN0YGAgbW9kdWxlIHByb3ZpZGVzIGFcbmBgRGljdE1peGluYGAgY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kcyBmcm9tIGEgYmFzZSBzZXQgb2ZcbmBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCwgYGBfX2RlbGl0ZW1fXygpYGAsIGFuZFxuYGBrZXlzKClgYC4gTXV0YWJsZSBzZXF1ZW5jZXMgc2hvdWxkIHByb3ZpZGUgbWV0aG9kcyBgYGFwcGVuZCgpYGAsXG5gYGNvdW50KClgYCwgYGBpbmRleCgpYGAsIGBgZXh0ZW5kKClgYCwgYGBpbnNlcnQoKWBgLCBgYHBvcCgpYGAsXG5gYHJlbW92ZSgpYGAsIGBgcmV2ZXJzZSgpYGAgYW5kIGBgc29ydCgpYGAsIGxpa2UgUHl0aG9uIHN0YW5kYXJkIGxpc3Rcbm9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGQgaW1wbGVtZW50IGFkZGl0aW9uIChtZWFuaW5nXG5jb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmcgcmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlXG5tZXRob2RzIGBgX19hZGRfXygpYGAsIGBgX19yYWRkX18oKWBgLCBgYF9faWFkZF9fKClgYCwgYGBfX211bF9fKClgYCxcbmBgX19ybXVsX18oKWBgIGFuZCBgYF9faW11bF9fKClgYCBkZXNjcmliZWQgYmVsb3c7IHRoZXkgc2hvdWxkIG5vdFxuZGVmaW5lIGBgX19jb2VyY2VfXygpYGAgb3Igb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0IGlzXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9fY29udGFpbnNfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlIGBgaW5gYFxub3BlcmF0b3I7IGZvciBtYXBwaW5ncywgYGBpbmBgIHNob3VsZCBiZSBlcXVpdmFsZW50IG9mIGBgaGFzX2tleSgpYGA7XG5mb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXJcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19pdGVyX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlXG5jb250YWluZXI7IGZvciBtYXBwaW5ncywgYGBfX2l0ZXJfXygpYGAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzXG5gYGl0ZXJrZXlzKClgYDsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGxlbigpYGAuICBTaG91bGQgcmV0dXJuXG4gICB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QsIGFuIGludGVnZXIgYGA+PWBgIDAuICBBbHNvLCBhbiBvYmplY3RcbiAgIHRoYXQgZG9lc24ndCBkZWZpbmUgYSBgYF9fbm9uemVyb19fKClgYCBtZXRob2QgYW5kIHdob3NlXG4gICBgYF9fbGVuX18oKWBgIG1ldGhvZCByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiBgYHNlbGZba2V5XWBgLiBGb3Igc2VxdWVuY2VcbiAgIHR5cGVzLCB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuXG4gICBOb3RlIHRoYXQgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlXG4gICBjbGFzcyB3aXNoZXMgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZVxuICAgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLiBJZiAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsXG4gICBgYFR5cGVFcnJvcmBgIG1heSBiZSByYWlzZWQ7IGlmIG9mIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mXG4gICBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mXG4gICBuZWdhdGl2ZSB2YWx1ZXMpLCBgYEluZGV4RXJyb3JgYCBzaG91bGQgYmUgcmFpc2VkLiBGb3IgbWFwcGluZ1xuICAgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGUgY29udGFpbmVyKSwgYGBLZXlFcnJvcmBgXG4gICBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiBgYGZvcmBgIGxvb3BzIGV4cGVjdCB0aGF0IGFuIGBgSW5kZXhFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvclxuICAgYGBfX2dldGl0ZW1fXygpYGAuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvclxuICAgYGBfX2dldGl0ZW1fXygpYGAuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgYGBfX2dldGl0ZW1fXygpYGBcbiAgIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIsIGFuZCBzaG91bGQgYWxzbyBiZSBtYWRlXG4gICBhdmFpbGFibGUgYXMgdGhlIG1ldGhvZCBgYGl0ZXJrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjYuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzIChgYGluYGAgYW5kIGBgbm90IGluYGApIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uJ3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCwgdGhlIG1lbWJlcnNoaXBcbiAgIHRlc3QgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSBgYF9faXRlcl9fKClgYCwgdGhlbiB0aGUgb2xkXG4gICBzZXF1ZW5jZSBpdGVyYXRpb24gcHJvdG9jb2wgdmlhIGBgX19nZXRpdGVtX18oKWBgLCBzZWUgKnRoaXNcbiAgIHNlY3Rpb24gaW4gdGhlIGxhbmd1YWdlIHJlZmVyZW5jZSouXG4iLAotICdzaGlmdGluZyc6IHUnXG5TaGlmdGluZyBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBzaGlmdGluZyBvcGVyYXRpb25zIGhhdmUgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgYXJpdGhtZXRpY1xub3BlcmF0aW9uczpcblxuICAgc2hpZnRfZXhwciA6Oj0gYV9leHByIHwgc2hpZnRfZXhwciAoICI8PCIgfCAiPj4iICkgYV9leHByXG5cblRoZXNlIG9wZXJhdG9ycyBhY2NlcHQgcGxhaW4gb3IgbG9uZyBpbnRlZ2VycyBhcyBhcmd1bWVudHMuICBUaGVcbmFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBUaGV5IHNoaWZ0IHRoZSBmaXJzdFxuYXJndW1lbnQgdG8gdGhlIGxlZnQgb3IgcmlnaHQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGdpdmVuIGJ5IHRoZVxuc2Vjb25kIGFyZ3VtZW50LlxuXG5BIHJpZ2h0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgZGl2aXNpb24gYnkgYGBwb3coMiwgbilgYC4gIEFcbmxlZnQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBtdWx0aXBsaWNhdGlvbiB3aXRoIGBgcG93KDIsXG5uKWBgLiAgTmVnYXRpdmUgc2hpZnQgY291bnRzIHJhaXNlIGEgYGBWYWx1ZUVycm9yYGAgZXhjZXB0aW9uLlxuJywKKyAnc2hpZnRpbmcnOiB1J1xuU2hpZnRpbmcgb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgc2hpZnRpbmcgb3BlcmF0aW9ucyBoYXZlIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIGFyaXRobWV0aWNcbm9wZXJhdGlvbnM6XG5cbiAgIHNoaWZ0X2V4cHIgOjo9IGFfZXhwciB8IHNoaWZ0X2V4cHIgKCAiPDwiIHwgIj4+IiApIGFfZXhwclxuXG5UaGVzZSBvcGVyYXRvcnMgYWNjZXB0IHBsYWluIG9yIGxvbmcgaW50ZWdlcnMgYXMgYXJndW1lbnRzLiAgVGhlXG5hcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiAgVGhleSBzaGlmdCB0aGUgZmlyc3RcbmFyZ3VtZW50IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBieSB0aGVcbnNlY29uZCBhcmd1bWVudC5cblxuQSByaWdodCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIGRpdmlzaW9uIGJ5IGBgcG93KDIsIG4pYGAuICBBXG5sZWZ0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgbXVsdGlwbGljYXRpb24gd2l0aCBgYHBvdygyLFxubilgYC4gIE5lZ2F0aXZlIHNoaWZ0IGNvdW50cyByYWlzZSBhIGBgVmFsdWVFcnJvcmBgIGV4Y2VwdGlvbi5cblxuTm90ZTogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgaXMgcmVxdWlyZWQgdG9cbiAgYmUgYXQgbW9zdCBgYHN5cy5tYXhzaXplYGAuICBJZiB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzIGxhcmdlclxuICB0aGFuIGBgc3lzLm1heHNpemVgYCBhbiBgYE92ZXJmbG93RXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKICAnc2xpY2luZ3MnOiB1J1xuU2xpY2luZ3NcbioqKioqKioqXG5cbkEgc2xpY2luZyBzZWxlY3RzIGEgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBzZXF1ZW5jZSBvYmplY3QgKGUuZy4sIGFcbnN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBTbGljaW5ncyBtYXkgYmUgdXNlZCBhcyBleHByZXNzaW9ucyBvciBhc1xudGFyZ2V0cyBpbiBhc3NpZ25tZW50IG9yIGBgZGVsYGAgc3RhdGVtZW50cy4gIFRoZSBzeW50YXggZm9yIGFcbnNsaWNpbmc6XG5cbiAgIHNsaWNpbmcgICAgICAgICAgOjo9IHNpbXBsZV9zbGljaW5nIHwgZXh0ZW5kZWRfc2xpY2luZ1xuICAgc2ltcGxlX3NsaWNpbmcgICA6Oj0gcHJpbWFyeSAiWyIgc2hvcnRfc2xpY2UgIl0iXG4gICBleHRlbmRlZF9zbGljaW5nIDo6PSBwcmltYXJ5ICJbIiBzbGljZV9saXN0ICJdIlxuICAgc2xpY2VfbGlzdCAgICAgICA6Oj0gc2xpY2VfaXRlbSAoIiwiIHNsaWNlX2l0ZW0pKiBbIiwiXVxuICAgc2xpY2VfaXRlbSAgICAgICA6Oj0gZXhwcmVzc2lvbiB8IHByb3Blcl9zbGljZSB8IGVsbGlwc2lzXG4gICBwcm9wZXJfc2xpY2UgICAgIDo6PSBzaG9ydF9zbGljZSB8IGxvbmdfc2xpY2VcbiAgIHNob3J0X3NsaWNlICAgICAgOjo9IFtsb3dlcl9ib3VuZF0gIjoiIFt1cHBlcl9ib3VuZF1cbiAgIGxvbmdfc2xpY2UgICAgICAgOjo9IHNob3J0X3NsaWNlICI6IiBbc3RyaWRlXVxuICAgbG93ZXJfYm91bmQgICAgICA6Oj0gZXhwcmVzc2lvblxuICAgdXBwZXJfYm91bmQgICAgICA6Oj0gZXhwcmVzc2lvblxuICAgc3RyaWRlICAgICAgICAgICA6Oj0gZXhwcmVzc2lvblxuICAgZWxsaXBzaXMgICAgICAgICA6Oj0gIi4uLiJcblxuVGhlcmUgaXMgYW1iaWd1aXR5IGluIHRoZSBmb3JtYWwgc3ludGF4IGhlcmU6IGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZVxuYW4gZXhwcmVzc2lvbiBsaXN0IGFsc28gbG9va3MgbGlrZSBhIHNsaWNlIGxpc3QsIHNvIGFueSBzdWJzY3JpcHRpb25cbmNhbiBiZSBpbnRlcnByZXRlZCBhcyBhIHNsaWNpbmcuICBSYXRoZXIgdGhhbiBmdXJ0aGVyIGNvbXBsaWNhdGluZyB0aGVcbnN5bnRheCwgdGhpcyBpcyBkaXNhbWJpZ3VhdGVkIGJ5IGRlZmluaW5nIHRoYXQgaW4gdGhpcyBjYXNlIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzdWJzY3JpcHRpb24gdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGVcbmludGVycHJldGF0aW9uIGFzIGEgc2xpY2luZyAodGhpcyBpcyB0aGUgY2FzZSBpZiB0aGUgc2xpY2UgbGlzdFxuY29udGFpbnMgbm8gcHJvcGVyIHNsaWNlIG5vciBlbGxpcHNlcykuICBTaW1pbGFybHksIHdoZW4gdGhlIHNsaWNlXG5saXN0IGhhcyBleGFjdGx5IG9uZSBzaG9ydCBzbGljZSBhbmQgbm8gdHJhaWxpbmcgY29tbWEsIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzaW1wbGUgc2xpY2luZyB0YWtlcyBwcmlvcml0eSBvdmVyIHRoYXQgYXMgYW5cbmV4dGVuZGVkIHNsaWNpbmcuXG5cblRoZSBzZW1hbnRpY3MgZm9yIGEgc2ltcGxlIHNsaWNpbmcgYXJlIGFzIGZvbGxvd3MuICBUaGUgcHJpbWFyeSBtdXN0XG5ldmFsdWF0ZSB0byBhIHNlcXVlbmNlIG9iamVjdC4gIFRoZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZXhwcmVzc2lvbnMsXG5pZiBwcmVzZW50LCBtdXN0IGV2YWx1YXRlIHRvIHBsYWluIGludGVnZXJzOyBkZWZhdWx0cyBhcmUgemVybyBhbmQgdGhlXG5gYHN5cy5tYXhpbnRgYCwgcmVzcGVjdGl2ZWx5LiAgSWYgZWl0aGVyIGJvdW5kIGlzIG5lZ2F0aXZlLCB0aGVcbnNlcXVlbmNlXCdzIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZSBzbGljaW5nIG5vdyBzZWxlY3RzIGFsbCBpdGVtc1xud2l0aCBpbmRleCAqayogc3VjaCB0aGF0IGBgaSA8PSBrIDwgamBgIHdoZXJlICppKiBhbmQgKmoqIGFyZSB0aGVcbnNwZWNpZmllZCBsb3dlciBhbmQgdXBwZXIgYm91bmRzLiAgVGhpcyBtYXkgYmUgYW4gZW1wdHkgc2VxdWVuY2UuICBJdFxuaXMgbm90IGFuIGVycm9yIGlmICppKiBvciAqaiogbGllIG91dHNpZGUgdGhlIHJhbmdlIG9mIHZhbGlkIGluZGV4ZXNcbihzdWNoIGl0ZW1zIGRvblwndCBleGlzdCBzbyB0aGV5IGFyZW5cJ3Qgc2VsZWN0ZWQpLlxuXG5UaGUgc2VtYW50aWNzIGZvciBhbiBleHRlbmRlZCBzbGljaW5nIGFyZSBhcyBmb2xsb3dzLiAgVGhlIHByaW1hcnlcbm11c3QgZXZhbHVhdGUgdG8gYSBtYXBwaW5nIG9iamVjdCwgYW5kIGl0IGlzIGluZGV4ZWQgd2l0aCBhIGtleSB0aGF0XG5pcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBzbGljZSBsaXN0LCBhcyBmb2xsb3dzLiAgSWYgdGhlIHNsaWNlIGxpc3RcbmNvbnRhaW5zIGF0IGxlYXN0IG9uZSBjb21tYSwgdGhlIGtleSBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlXG5jb252ZXJzaW9uIG9mIHRoZSBzbGljZSBpdGVtczsgb3RoZXJ3aXNlLCB0aGUgY29udmVyc2lvbiBvZiB0aGUgbG9uZVxuc2xpY2UgaXRlbSBpcyB0aGUga2V5LiAgVGhlIGNvbnZlcnNpb24gb2YgYSBzbGljZSBpdGVtIHRoYXQgaXMgYW5cbmV4cHJlc3Npb24gaXMgdGhhdCBleHByZXNzaW9uLiAgVGhlIGNvbnZlcnNpb24gb2YgYW4gZWxsaXBzaXMgc2xpY2Vcbml0ZW0gaXMgdGhlIGJ1aWx0LWluIGBgRWxsaXBzaXNgYCBvYmplY3QuICBUaGUgY29udmVyc2lvbiBvZiBhIHByb3Blclxuc2xpY2UgaXMgYSBzbGljZSBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKVxud2hvc2UgYGBzdGFydGBgLCBgYHN0b3BgYCBhbmQgYGBzdGVwYGAgYXR0cmlidXRlcyBhcmUgdGhlIHZhbHVlcyBvZlxudGhlIGV4cHJlc3Npb25zIGdpdmVuIGFzIGxvd2VyIGJvdW5kLCB1cHBlciBib3VuZCBhbmQgc3RyaWRlLFxucmVzcGVjdGl2ZWx5LCBzdWJzdGl0dXRpbmcgYGBOb25lYGAgZm9yIG1pc3NpbmcgZXhwcmVzc2lvbnMuXG4nLAotICdzcGVjaWFsYXR0cnMnOiB1IlxuU3BlY2lhbCBBdHRyaWJ1dGVzXG4qKioqKioqKioqKioqKioqKipcblxuVGhlIGltcGxlbWVudGF0aW9uIGFkZHMgYSBmZXcgc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlcyB0byBzZXZlcmFsXG5vYmplY3QgdHlwZXMsIHdoZXJlIHRoZXkgYXJlIHJlbGV2YW50LiAgU29tZSBvZiB0aGVzZSBhcmUgbm90IHJlcG9ydGVkXG5ieSB0aGUgYGBkaXIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uLlxuXG5vYmplY3QuX19kaWN0X19cblxuICAgQSBkaWN0aW9uYXJ5IG9yIG90aGVyIG1hcHBpbmcgb2JqZWN0IHVzZWQgdG8gc3RvcmUgYW4gb2JqZWN0J3NcbiAgICh3cml0YWJsZSkgYXR0cmlidXRlcy5cblxub2JqZWN0Ll9fbWV0aG9kc19fXG5cbiAgIERlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjI6IFVzZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBkaXIoKWBgXG4gICB0byBnZXQgYSBsaXN0IG9mIGFuIG9iamVjdCdzIGF0dHJpYnV0ZXMuIFRoaXMgYXR0cmlidXRlIGlzIG5vXG4gICBsb25nZXIgYXZhaWxhYmxlLlxuXG5vYmplY3QuX19tZW1iZXJzX19cblxuICAgRGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuMjogVXNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGRpcigpYGBcbiAgIHRvIGdldCBhIGxpc3Qgb2YgYW4gb2JqZWN0J3MgYXR0cmlidXRlcy4gVGhpcyBhdHRyaWJ1dGUgaXMgbm9cbiAgIGxvbmdlciBhdmFpbGFibGUuXG5cbmluc3RhbmNlLl9fY2xhc3NfX1xuXG4gICBUaGUgY2xhc3MgdG8gd2hpY2ggYSBjbGFzcyBpbnN0YW5jZSBiZWxvbmdzLlxuXG5jbGFzcy5fX2Jhc2VzX19cblxuICAgVGhlIHR1cGxlIG9mIGJhc2UgY2xhc3NlcyBvZiBhIGNsYXNzIG9iamVjdC5cblxuY2xhc3MuX19uYW1lX19cblxuICAgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIG9yIHR5cGUuXG5cblRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgb25seSBzdXBwb3J0ZWQgYnkgKm5ldy1zdHlsZSBjbGFzcyplcy5cblxuY2xhc3MuX19tcm9fX1xuXG4gICBUaGlzIGF0dHJpYnV0ZSBpcyBhIHR1cGxlIG9mIGNsYXNzZXMgdGhhdCBhcmUgY29uc2lkZXJlZCB3aGVuXG4gICBsb29raW5nIGZvciBiYXNlIGNsYXNzZXMgZHVyaW5nIG1ldGhvZCByZXNvbHV0aW9uLlxuXG5jbGFzcy5tcm8oKVxuXG4gICBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIG1ldGFjbGFzcyB0byBjdXN0b21pemUgdGhlXG4gICBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgaXRzIGluc3RhbmNlcy4gIEl0IGlzIGNhbGxlZCBhdCBjbGFzc1xuICAgaW5zdGFudGlhdGlvbiwgYW5kIGl0cyByZXN1bHQgaXMgc3RvcmVkIGluIGBgX19tcm9fX2BgLlxuXG5jbGFzcy5fX3N1YmNsYXNzZXNfXygpXG5cbiAgIEVhY2ggbmV3LXN0eWxlIGNsYXNzIGtlZXBzIGEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzXG4gICBpbW1lZGlhdGUgc3ViY2xhc3Nlcy4gIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aG9zZVxuICAgcmVmZXJlbmNlcyBzdGlsbCBhbGl2ZS4gRXhhbXBsZTpcblxuICAgICAgPj4+IGludC5fX3N1YmNsYXNzZXNfXygpXG4gICAgICBbPHR5cGUgJ2Jvb2wnPl1cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZXNlIHNwZWNpYWwgbWV0aG9kcyBtYXkgYmUgZm91bmQgaW5cbiAgICB0aGUgUHl0aG9uIFJlZmVyZW5jZSBNYW51YWwgKCpCYXNpYyBjdXN0b21pemF0aW9uKikuXG5cblsyXSBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgbGlzdCBgYFsxLCAyXWBgIGlzIGNvbnNpZGVyZWQgZXF1YWwgdG9cbiAgICBgYFsxLjAsIDIuMF1gYCwgYW5kIHNpbWlsYXJseSBmb3IgdHVwbGVzLlxuXG5bM10gVGhleSBtdXN0IGhhdmUgc2luY2UgdGhlIHBhcnNlciBjYW4ndCB0ZWxsIHRoZSB0eXBlIG9mIHRoZVxuICAgIG9wZXJhbmRzLlxuXG5bNF0gVG8gZm9ybWF0IG9ubHkgYSB0dXBsZSB5b3Ugc2hvdWxkIHRoZXJlZm9yZSBwcm92aWRlIGEgc2luZ2xldG9uXG4gICAgdHVwbGUgd2hvc2Ugb25seSBlbGVtZW50IGlzIHRoZSB0dXBsZSB0byBiZSBmb3JtYXR0ZWQuXG5cbls1XSBUaGVzZSBudW1iZXJzIGFyZSBmYWlybHkgYXJiaXRyYXJ5LiAgVGhleSBhcmUgaW50ZW5kZWQgdG8gYXZvaWRcbiAgICBwcmludGluZyBlbmRsZXNzIHN0cmluZ3Mgb2YgbWVhbmluZ2xlc3MgZGlnaXRzIHdpdGhvdXQgaGFtcGVyaW5nXG4gICAgY29ycmVjdCB1c2UgYW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgdGhlIGV4YWN0IHByZWNpc2lvbiBvZlxuICAgIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBvbiBhIHBhcnRpY3VsYXIgbWFjaGluZS5cblxuWzZdIFRoZSBhZHZhbnRhZ2Ugb2YgbGVhdmluZyB0aGUgbmV3bGluZSBvbiBpcyB0aGF0IHJldHVybmluZyBhbiBlbXB0eVxuICAgIHN0cmluZyBpcyB0aGVuIGFuIHVuYW1iaWd1b3VzIEVPRiBpbmRpY2F0aW9uLiAgSXQgaXMgYWxzbyBwb3NzaWJsZVxuICAgIChpbiBjYXNlcyB3aGVyZSBpdCBtaWdodCBtYXR0ZXIsIGZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBtYWtlXG4gICAgYW4gZXhhY3QgY29weSBvZiBhIGZpbGUgd2hpbGUgc2Nhbm5pbmcgaXRzIGxpbmVzKSB0byB0ZWxsIHdoZXRoZXJcbiAgICB0aGUgbGFzdCBsaW5lIG9mIGEgZmlsZSBlbmRlZCBpbiBhIG5ld2xpbmUgb3Igbm90ICh5ZXMgdGhpc1xuICAgIGhhcHBlbnMhKS5cbiIsCi0gJ3NwZWNpYWxuYW1lcyc6IHUnXG5TcGVjaWFsIG1ldGhvZCBuYW1lc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBjYW4gaW1wbGVtZW50IGNlcnRhaW4gb3BlcmF0aW9ucyB0aGF0IGFyZSBpbnZva2VkIGJ5IHNwZWNpYWxcbnN5bnRheCAoc3VjaCBhcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgb3Igc3Vic2NyaXB0aW5nIGFuZCBzbGljaW5nKSBieVxuZGVmaW5pbmcgbWV0aG9kcyB3aXRoIHNwZWNpYWwgbmFtZXMuIFRoaXMgaXMgUHl0aG9uXCdzIGFwcHJvYWNoIHRvXG4qb3BlcmF0b3Igb3ZlcmxvYWRpbmcqLCBhbGxvd2luZyBjbGFzc2VzIHRvIGRlZmluZSB0aGVpciBvd24gYmVoYXZpb3JcbndpdGggcmVzcGVjdCB0byBsYW5ndWFnZSBvcGVyYXRvcnMuICBGb3IgaW5zdGFuY2UsIGlmIGEgY2xhc3MgZGVmaW5lc1xuYSBtZXRob2QgbmFtZWQgYGBfX2dldGl0ZW1fXygpYGAsIGFuZCBgYHhgYCBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzXG5jbGFzcywgdGhlbiBgYHhbaV1gYCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYGB4Ll9fZ2V0aXRlbV9fKGkpYGAgZm9yXG5vbGQtc3R5bGUgY2xhc3NlcyBhbmQgYGB0eXBlKHgpLl9fZ2V0aXRlbV9fKHgsIGkpYGAgZm9yIG5ldy1zdHlsZVxuY2xhc3Nlcy4gIEV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uXG5yYWlzZSBhbiBleGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG5gYEF0dHJpYnV0ZUVycm9yYGAgb3IgYGBUeXBlRXJyb3JgYCkuXG5cbldoZW4gaW1wbGVtZW50aW5nIGEgY2xhc3MgdGhhdCBlbXVsYXRlcyBhbnkgYnVpbHQtaW4gdHlwZSwgaXQgaXNcbmltcG9ydGFudCB0aGF0IHRoZSBlbXVsYXRpb24gb25seSBiZSBpbXBsZW1lbnRlZCB0byB0aGUgZGVncmVlIHRoYXQgaXRcbm1ha2VzIHNlbnNlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1vZGVsbGVkLiAgRm9yIGV4YW1wbGUsIHNvbWVcbnNlcXVlbmNlcyBtYXkgd29yayB3ZWxsIHdpdGggcmV0cmlldmFsIG9mIGluZGl2aWR1YWwgZWxlbWVudHMsIGJ1dFxuZXh0cmFjdGluZyBhIHNsaWNlIG1heSBub3QgbWFrZSBzZW5zZS4gIChPbmUgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZVxuYGBOb2RlTGlzdGBgIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgYGBfX25ld19fKClgYCBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiBgYF9fbmV3X18oKWBgIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseVxuICAgYW4gaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCB1c2luZ1xuICAgYGBzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKWBgIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICBgYF9faW5pdF9fKHNlbGZbLCAuLi5dKWBgLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byBgYF9fbmV3X18oKWBgLlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgYGBfX25ld19fKClgYCBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICBgYF9faW5pdF9fKClgYCBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCxcbiAgIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZlxuICAgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgYGBCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKWBgLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnRcbiAgIG9uIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgIGBgVHlwZUVycm9yYGAgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgYGBfX2RlbF9fKClgYCBtZXRob2QsXG4gICB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9fZGVsX18oKWBgIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHlcbiAgIGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZVxuICAgaW5zdGFuY2UuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3JcbiAgIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogYGBkZWwgeGBgIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgYGB4Ll9fZGVsX18oKWBgIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYGB4YGAgYnkgb25lLCBhbmQgdGhlIGxhdHRlclxuICAgICBpcyBvbmx5IGNhbGxlZCB3aGVuIGBgeGBgXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lXG4gICAgIGNvbW1vbiBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhblxuICAgICBvYmplY3QgZnJvbSBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlblxuICAgICBvYmplY3RzIChlLmcuLCBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aFxuICAgICBwYXJlbnQgYW5kIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGVcbiAgICAgc3RhY2sgZnJhbWUgb2YgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2tcbiAgICAgc3RvcmVkIGluIGBgc3lzLmV4Y190cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvclxuICAgICBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhblxuICAgICB1bmhhbmRsZWQgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluXG4gICAgIGBgc3lzLmV4Y190cmFjZWJhY2tgYCBvciBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiAgQ2lyY3VsYXJcbiAgICAgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlXG4gICAgIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5IGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZFxuICAgICB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLWxldmVsIGBgX19kZWxfXygpYGAgbWV0aG9kcyBpbnZvbHZlZC5cbiAgICAgUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgYGdjYGAgbW9kdWxlIGZvciBtb3JlXG4gICAgIGluZm9ybWF0aW9uIGFib3V0IGhvdyBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlXG4gICAgIGN5Y2xlIGRldGVjdG9yLCBwYXJ0aWN1bGFybHkgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGdhcmJhZ2VgYFxuICAgICB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiBhbmQgYnkgc3RyaW5nXG4gICBjb252ZXJzaW9ucyAocmV2ZXJzZSBxdW90ZXMpIHRvIGNvbXB1dGUgdGhlICJvZmZpY2lhbCIgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsIHRoaXMgc2hvdWxkIGxvb2tcbiAgIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWQgdG8gcmVjcmVhdGUgYW5cbiAgIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZSBlbnZpcm9ubWVudCkuICBJZlxuICAgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGBgPC4uLnNvbWUgdXNlZnVsXG4gICBkZXNjcmlwdGlvbi4uLj5gYCBzaG91bGQgYmUgcmV0dXJuZWQuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYVxuICAgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgIGJ1dCBub3RcbiAgIGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW4gImluZm9ybWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGBzdHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIGFuZCBieSB0aGUgYGBwcmludGBgXG4gICBzdGF0ZW1lbnQgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gIFRoaXMgZGlmZmVycyBmcm9tIGBgX19yZXByX18oKWBgIGluIHRoYXQgaXQgZG9lcyBub3QgaGF2ZVxuICAgdG8gYmUgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYSBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZVxuICAgcmVwcmVzZW50YXRpb24gbWF5IGJlIHVzZWQgaW5zdGVhZC4gVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgTmV3IGluIHZlcnNpb24gMi4xLlxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLCBhbmQgYXJlIGNhbGxlZFxuICAgZm9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGluIHByZWZlcmVuY2UgdG8gYGBfX2NtcF9fKClgYCBiZWxvdy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogYGB4PHlgYCBjYWxscyBgYHguX19sdF9fKHkpYGAsIGBgeDw9eWBgIGNhbGxzXG4gICBgYHguX19sZV9fKHkpYGAsIGBgeD09eWBgIGNhbGxzIGBgeC5fX2VxX18oeSlgYCwgYGB4IT15YGAgYW5kXG4gICBgYHg8PnlgYCBjYWxsIGBgeC5fX25lX18oeSlgYCwgYGB4PnlgYCBjYWxscyBgYHguX19ndF9fKHkpYGAsIGFuZFxuICAgYGB4Pj15YGAgY2FsbHMgYGB4Ll9fZ2VfXyh5KWBgLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uXG4gICBgYE5vdEltcGxlbWVudGVkYGAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGFcbiAgIGdpdmVuIHBhaXIgb2YgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgIGFyZVxuICAgcmV0dXJuZWQgZm9yIGEgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhblxuICAgcmV0dXJuIGFueSB2YWx1ZSwgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQgKGUuZy4sIGluIHRoZSBjb25kaXRpb24gb2YgYW4gYGBpZmBgIHN0YXRlbWVudCksXG4gICBQeXRob24gd2lsbCBjYWxsIGBgYm9vbCgpYGAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0XG4gICBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiBgYHg9PXlgYCBkb2VzIG5vdCBpbXBseSB0aGF0IGBgeCE9eWBgIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgYGBfX2VxX18oKWBgLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICBgYF9fbmVfXygpYGAgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlXG4gICB0aGUgcGFyYWdyYXBoIG9uIGBgX19oYXNoX18oKWBgIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCBgYF9fbHRfXygpYGAgYW5kIGBgX19ndF9fKClgYCBhcmUgZWFjaFxuICAgb3RoZXJcJ3MgcmVmbGVjdGlvbiwgYGBfX2xlX18oKWBgIGFuZCBgYF9fZ2VfXygpYGAgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sIGFuZCBgYF9fZXFfXygpYGAgYW5kIGBgX19uZV9fKClgYCBhcmUgdGhlaXIgb3duXG4gICByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlIHRoZSBUb3RhbCBPcmRlcmluZyByZWNpcGUgaW4gdGhlIEFTUE4gY29va2Jvb2suXG5cbm9iamVjdC5fX2NtcF9fKHNlbGYsIG90aGVyKVxuXG4gICBDYWxsZWQgYnkgY29tcGFyaXNvbiBvcGVyYXRpb25zIGlmIHJpY2ggY29tcGFyaXNvbiAoc2VlIGFib3ZlKSBpc1xuICAgbm90IGRlZmluZWQuICBTaG91bGQgcmV0dXJuIGEgbmVnYXRpdmUgaW50ZWdlciBpZiBgYHNlbGYgPCBvdGhlcmBgLFxuICAgemVybyBpZiBgYHNlbGYgPT0gb3RoZXJgYCwgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIGBgc2VsZiA+IG90aGVyYGAuXG4gICBJZiBubyBgYF9fY21wX18oKWBgLCBgYF9fZXFfXygpYGAgb3IgYGBfX25lX18oKWBgIG9wZXJhdGlvbiBpc1xuICAgZGVmaW5lZCwgY2xhc3MgaW5zdGFuY2VzIGFyZSBjb21wYXJlZCBieSBvYmplY3QgaWRlbnRpdHlcbiAgICgiYWRkcmVzcyIpLiAgU2VlIGFsc28gdGhlIGRlc2NyaXB0aW9uIG9mIGBgX19oYXNoX18oKWBgIGZvciBzb21lXG4gICBpbXBvcnRhbnQgbm90ZXMgb24gY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tXG4gICBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLiAoTm90ZTogdGhlXG4gICByZXN0cmljdGlvbiB0aGF0IGV4Y2VwdGlvbnMgYXJlIG5vdCBwcm9wYWdhdGVkIGJ5IGBgX19jbXBfXygpYGAgaGFzXG4gICBiZWVuIHJlbW92ZWQgc2luY2UgUHl0aG9uIDEuNS4pXG5cbm9iamVjdC5fX3JjbXBfXyhzZWxmLCBvdGhlcilcblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMTogTm8gbG9uZ2VyIHN1cHBvcnRlZC5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiBgYGhhc2goKWBgIGFuZCBmb3Igb3BlcmF0aW9ucyBvblxuICAgbWVtYmVycyBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nIGBgc2V0YGAsIGBgZnJvemVuc2V0YGAsIGFuZFxuICAgYGBkaWN0YGAuICBgYF9faGFzaF9fKClgYCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seVxuICAgcmVxdWlyZWQgcHJvcGVydHkgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZVxuICAgaGFzaCB2YWx1ZTsgaXQgaXMgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZ1xuICAgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaCB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdFxuICAgYWxzbyBwbGF5IGEgcGFydCBpbiBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGEgYGBfX2NtcF9fKClgYCBvciBgYF9fZXFfXygpYGAgbWV0aG9kXG4gICBpdCBzaG91bGQgbm90IGRlZmluZSBhIGBgX19oYXNoX18oKWBgIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0XG4gICBkZWZpbmVzIGBgX19jbXBfXygpYGAgb3IgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0c1xuICAgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBpbiBoYXNoZWQgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzXG4gICBkZWZpbmVzIG11dGFibGUgb2JqZWN0cyBhbmQgaW1wbGVtZW50cyBhIGBgX19jbXBfXygpYGAgb3JcbiAgIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZCBub3QgaW1wbGVtZW50IGBgX19oYXNoX18oKWBgLCBzaW5jZVxuICAgaGFzaGFibGUgY29sbGVjdGlvbiBpbXBsZW1lbnRhdGlvbnMgcmVxdWlyZSB0aGF0IGEgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmVcbiAgIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgYGBfX2NtcF9fKClgYCBhbmQgYGBfX2hhc2hfXygpYGAgbWV0aG9kc1xuICAgYnkgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgYGB4Ll9faGFzaF9fKClgYCByZXR1cm5zIGBgaWQoeClgYC5cblxuICAgQ2xhc3NlcyB3aGljaCBpbmhlcml0IGEgYGBfX2hhc2hfXygpYGAgbWV0aG9kIGZyb20gYSBwYXJlbnQgY2xhc3NcbiAgIGJ1dCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYGBfX2NtcF9fKClgYCBvciBgYF9fZXFfXygpYGAgc3VjaCB0aGF0XG4gICB0aGUgaGFzaCB2YWx1ZSByZXR1cm5lZCBpcyBubyBsb25nZXIgYXBwcm9wcmlhdGUgKGUuZy4gYnkgc3dpdGNoaW5nXG4gICB0byBhIHZhbHVlLWJhc2VkIGNvbmNlcHQgb2YgZXF1YWxpdHkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdFxuICAgaWRlbnRpdHkgYmFzZWQgZXF1YWxpdHkpIGNhbiBleHBsaWNpdGx5IGZsYWcgdGhlbXNlbHZlcyBhcyBiZWluZ1xuICAgdW5oYXNoYWJsZSBieSBzZXR0aW5nIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uXG4gICBEb2luZyBzbyBtZWFucyB0aGF0IG5vdCBvbmx5IHdpbGwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyByYWlzZSBhblxuICAgYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0byByZXRyaWV2ZSB0aGVpclxuICAgaGFzaCB2YWx1ZSwgYnV0IHRoZXkgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGBcbiAgICh1bmxpa2UgY2xhc3NlcyB3aGljaCBkZWZpbmUgdGhlaXIgb3duIGBgX19oYXNoX18oKWBgIHRvIGV4cGxpY2l0bHlcbiAgIHJhaXNlIGBgVHlwZUVycm9yYGApLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi41OiBgYF9faGFzaF9fKClgYCBtYXkgbm93IGFsc28gcmV0dXJuIGEgbG9uZ1xuICAgaW50ZWdlciBvYmplY3Q7IHRoZSAzMi1iaXQgaW50ZWdlciBpcyB0aGVuIGRlcml2ZWQgZnJvbSB0aGUgaGFzaCBvZlxuICAgdGhhdCBvYmplY3QuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjY6IGBgX19oYXNoX19gYCBtYXkgbm93IGJlIHNldCB0byBgYE5vbmVgYCB0b1xuICAgZXhwbGljaXRseSBmbGFnIGluc3RhbmNlcyBvZiBhIGNsYXNzIGFzIHVuaGFzaGFibGUuXG5cbm9iamVjdC5fX25vbnplcm9fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgIGBgYm9vbCgpYGA7IHNob3VsZCByZXR1cm4gYGBGYWxzZWBgIG9yIGBgVHJ1ZWBgLCBvciB0aGVpciBpbnRlZ2VyXG4gICBlcXVpdmFsZW50cyBgYDBgYCBvciBgYDFgYC4gIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90IGRlZmluZWQsXG4gICBgYF9fbGVuX18oKWBgIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbmVpdGhlciBgYF9fbGVuX18oKWBgIG5vciBgYF9fbm9uemVyb19fKClgYCwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG5cbm9iamVjdC5fX3VuaWNvZGVfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgdW5pY29kZSgpYGAgYnVpbHQtaW47IHNob3VsZCByZXR1cm4gYSBVbmljb2RlXG4gICBvYmplY3QuIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90IGRlZmluZWQsIHN0cmluZyBjb252ZXJzaW9uIGlzXG4gICBhdHRlbXB0ZWQsIGFuZCB0aGUgcmVzdWx0IG9mIHN0cmluZyBjb252ZXJzaW9uIGlzIGNvbnZlcnRlZCB0b1xuICAgVW5pY29kZSB1c2luZyB0aGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcuXG5cblxuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mIGBgeC5uYW1lYGApXG5mb3IgY2xhc3MgaW5zdGFuY2VzLlxuXG5vYmplY3QuX19nZXRhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGxvb2t1cCBoYXMgbm90IGZvdW5kIHRoZSBhdHRyaWJ1dGUgaW4gdGhlXG4gICB1c3VhbCBwbGFjZXMgKGkuZS4gaXQgaXMgbm90IGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBub3IgaXMgaXQgZm91bmRcbiAgIGluIHRoZSBjbGFzcyB0cmVlIGZvciBgYHNlbGZgYCkuICBgYG5hbWVgYCBpcyB0aGUgYXR0cmlidXRlIG5hbWUuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZVxuICAgYW4gYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi5cblxuICAgTm90ZSB0aGF0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgZm91bmQgdGhyb3VnaCB0aGUgbm9ybWFsIG1lY2hhbmlzbSxcbiAgIGBgX19nZXRhdHRyX18oKWBgIGlzIG5vdCBjYWxsZWQuICAoVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBhc3ltbWV0cnlcbiAgIGJldHdlZW4gYGBfX2dldGF0dHJfXygpYGAgYW5kIGBgX19zZXRhdHRyX18oKWBgLikgVGhpcyBpcyBkb25lIGJvdGhcbiAgIGZvciBlZmZpY2llbmN5IHJlYXNvbnMgYW5kIGJlY2F1c2Ugb3RoZXJ3aXNlIGBgX19nZXRhdHRyX18oKWBgXG4gICB3b3VsZCBoYXZlIG5vIHdheSB0byBhY2Nlc3Mgb3RoZXIgYXR0cmlidXRlcyBvZiB0aGUgaW5zdGFuY2UuICBOb3RlXG4gICB0aGF0IGF0IGxlYXN0IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIHlvdSBjYW4gZmFrZSB0b3RhbCBjb250cm9sIGJ5XG4gICBub3QgaW5zZXJ0aW5nIGFueSB2YWx1ZXMgaW4gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IChidXRcbiAgIGluc3RlYWQgaW5zZXJ0aW5nIHRoZW0gaW4gYW5vdGhlciBvYmplY3QpLiAgU2VlIHRoZVxuICAgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBpbiBuZXctc3R5bGUgY2xhc3Nlcy5cblxub2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgYXNzaWdubWVudCBpcyBhdHRlbXB0ZWQuICBUaGlzIGlzIGNhbGxlZFxuICAgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIG1lY2hhbmlzbSAoaS5lLiBzdG9yZSB0aGUgdmFsdWUgaW4gdGhlXG4gICBpbnN0YW5jZSBkaWN0aW9uYXJ5KS4gICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgYGBfX3NldGF0dHJfXygpYGAgd2FudHMgdG8gYXNzaWduIHRvIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgaXRcbiAgIHNob3VsZCBub3Qgc2ltcGx5IGV4ZWN1dGUgYGBzZWxmLm5hbWUgPSB2YWx1ZWBgIC0tLSB0aGlzIHdvdWxkXG4gICBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsIHRvIGl0c2VsZi4gIEluc3RlYWQsIGl0IHNob3VsZCBpbnNlcnQgdGhlXG4gICB2YWx1ZSBpbiB0aGUgZGljdGlvbmFyeSBvZiBpbnN0YW5jZSBhdHRyaWJ1dGVzLCBlLmcuLFxuICAgYGBzZWxmLl9fZGljdF9fW25hbWVdID0gdmFsdWVgYC4gIEZvciBuZXctc3R5bGUgY2xhc3NlcywgcmF0aGVyXG4gICB0aGFuIGFjY2Vzc2luZyB0aGUgaW5zdGFuY2UgZGljdGlvbmFyeSwgaXQgc2hvdWxkIGNhbGwgdGhlIGJhc2VcbiAgIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUsIGZvciBleGFtcGxlLFxuICAgYGBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpYGAuXG5cbm9iamVjdC5fX2RlbGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBMaWtlIGBgX19zZXRhdHRyX18oKWBgIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmIGBgZGVsIG9iai5uYW1lYGAgaXNcbiAgIG1lYW5pbmdmdWwgZm9yIHRoZSBvYmplY3QuXG5cblxuTW9yZSBhdHRyaWJ1dGUgYWNjZXNzIGZvciBuZXctc3R5bGUgY2xhc3Nlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB0byBuZXctc3R5bGUgY2xhc3Nlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHVuY29uZGl0aW9uYWxseSB0byBpbXBsZW1lbnQgYXR0cmlidXRlIGFjY2Vzc2VzIGZvclxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4gSWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lc1xuICAgYGBfX2dldGF0dHJfXygpYGAsIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzc1xuICAgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBlaXRoZXIgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYC4gVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKVxuICAgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uIEluIG9yZGVyXG4gICB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW4gdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvblxuICAgc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG9cbiAgIGFjY2VzcyBhbnkgYXR0cmlidXRlcyBpdCBuZWVkcywgZm9yIGV4YW1wbGUsXG4gICBgYG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpYGAuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzXG4gICAgIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4IG9yXG4gICAgIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAgZm9yIG5ldy1zdHlsZVxuICAgICBjbGFzc2VzKi5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gdGhlXG5jbGFzcyBkaWN0aW9uYXJ5IG9mIGFub3RoZXIgbmV3LXN0eWxlIGNsYXNzLCBrbm93biBhcyB0aGUgKm93bmVyKlxuY2xhc3MuIEluIHRoZSBleGFtcGxlcyBiZWxvdywgInRoZSBhdHRyaWJ1dGUiIHJlZmVycyB0byB0aGUgYXR0cmlidXRlXG53aG9zZSBuYW1lIGlzIHRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBvd25lciBjbGFzc1wnXG5gYF9fZGljdF9fYGAuICBEZXNjcmlwdG9ycyBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBhcyBuZXctc3R5bGVcbmNsYXNzZXMgdGhlbXNlbHZlcy5cblxub2JqZWN0Ll9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKVxuXG4gICBDYWxsZWQgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG93bmVyIGNsYXNzIChjbGFzcyBhdHRyaWJ1dGVcbiAgIGFjY2Vzcykgb3Igb2YgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyAoaW5zdGFuY2UgYXR0cmlidXRlXG4gICBhY2Nlc3MpLiAqb3duZXIqIGlzIGFsd2F5cyB0aGUgb3duZXIgY2xhc3MsIHdoaWxlICppbnN0YW5jZSogaXMgdGhlXG4gICBpbnN0YW5jZSB0aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFjY2Vzc2VkIHRocm91Z2gsIG9yIGBgTm9uZWBgIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi5cblxub2JqZWN0Ll9fc2V0X18oc2VsZiwgaW5zdGFuY2UsIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGUgb3duZXJcbiAgIGNsYXNzIHRvIGEgbmV3IHZhbHVlLCAqdmFsdWUqLlxuXG5vYmplY3QuX19kZWxldGVfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgQ2FsbGVkIHRvIGRlbGV0ZSB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlXG4gICBvd25lciBjbGFzcy5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgYGBfX2dldF9fKClgYCwgYGBfX3NldF9fKClgYCwgYW5kXG5gYF9fZGVsZXRlX18oKWBgLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LFxuaXQgaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCBgYGEueGBgIGhhcyBhXG5sb29rdXAgY2hhaW4gc3RhcnRpbmcgd2l0aCBgYGEuX19kaWN0X19bXCd4XCddYGAsIHRoZW5cbmBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ11gYCwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG5gYHR5cGUoYSlgYCBleGNsdWRpbmcgbWV0YWNsYXNzZXMuXG5cbkhvd2V2ZXIsIGlmIHRoZSBsb29rZWQtdXAgdmFsdWUgaXMgYW4gb2JqZWN0IGRlZmluaW5nIG9uZSBvZiB0aGVcbmRlc2NyaXB0b3IgbWV0aG9kcywgdGhlbiBQeXRob24gbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZFxuaW52b2tlIHRoZSBkZXNjcmlwdG9yIG1ldGhvZCBpbnN0ZWFkLiAgV2hlcmUgdGhpcyBvY2N1cnMgaW4gdGhlXG5wcmVjZWRlbmNlIGNoYWluIGRlcGVuZHMgb24gd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIHdlcmUgZGVmaW5lZCBhbmRcbmhvdyB0aGV5IHdlcmUgY2FsbGVkLiAgTm90ZSB0aGF0IGRlc2NyaXB0b3JzIGFyZSBvbmx5IGludm9rZWQgZm9yIG5ld1xuc3R5bGUgb2JqZWN0cyBvciBjbGFzc2VzIChvbmVzIHRoYXQgc3ViY2xhc3MgYGBvYmplY3QoKWBgIG9yXG5gYHR5cGUoKWBgKS5cblxuVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkZXNjcmlwdG9yIGludm9jYXRpb24gaXMgYSBiaW5kaW5nLCBgYGEueGBgLlxuSG93IHRoZSBhcmd1bWVudHMgYXJlIGFzc2VtYmxlZCBkZXBlbmRzIG9uIGBgYWBgOlxuXG5EaXJlY3QgQ2FsbFxuICAgVGhlIHNpbXBsZXN0IGFuZCBsZWFzdCBjb21tb24gY2FsbCBpcyB3aGVuIHVzZXIgY29kZSBkaXJlY3RseVxuICAgaW52b2tlcyBhIGRlc2NyaXB0b3IgbWV0aG9kOiAgICBgYHguX19nZXRfXyhhKWBgLlxuXG5JbnN0YW5jZSBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgbmV3LXN0eWxlIG9iamVjdCBpbnN0YW5jZSwgYGBhLnhgYCBpcyB0cmFuc2Zvcm1lZFxuICAgaW50byB0aGUgY2FsbDogYGB0eXBlKGEpLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKGEsIHR5cGUoYSkpYGAuXG5cbkNsYXNzIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYSBuZXctc3R5bGUgY2xhc3MsIGBgQS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6IGBgQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKWBgLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiBgYGFgYCBpcyBhbiBpbnN0YW5jZSBvZiBgYHN1cGVyYGAsIHRoZW4gdGhlIGJpbmRpbmcgYGBzdXBlcihCLFxuICAgb2JqKS5tKClgYCBzZWFyY2hlcyBgYG9iai5fX2NsYXNzX18uX19tcm9fX2BgIGZvciB0aGUgYmFzZSBjbGFzc1xuICAgYGBBYGAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGBgQmBgIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3JcbiAgIHdpdGggdGhlIGNhbGw6IGBgQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIEEpYGAuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mIGBgX19nZXRfXygpYGAsIGBgX19zZXRfXygpYGAgYW5kIGBgX19kZWxldGVfXygpYGAuXG5JZiBpdCBkb2VzIG5vdCBkZWZpbmUgYGBfX2dldF9fKClgYCwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsXG5yZXR1cm4gdGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGVcbm9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyBgYF9fc2V0X18oKWBgXG5hbmQvb3IgYGBfX2RlbGV0ZV9fKClgYCwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXNcbm5laXRoZXIsIGl0IGlzIGEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzXG5kZWZpbmUgYm90aCBgYF9fZ2V0X18oKWBgIGFuZCBgYF9fc2V0X18oKWBgLCB3aGlsZSBub24tZGF0YVxuZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZSBgYF9fZ2V0X18oKWBgIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aFxuYGBfX3NldF9fKClgYCBhbmQgYGBfX2dldF9fKClgYCBkZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvblxuaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluIGNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmVcbm92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nIGBgc3RhdGljbWV0aG9kKClgYCBhbmQgYGBjbGFzc21ldGhvZCgpYGApXG5hcmUgaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSBgYHByb3BlcnR5KClgYCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuLS0tLS0tLS0tXG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBib3RoIG9sZCBhbmQgbmV3LXN0eWxlIGNsYXNzZXMgaGF2ZSBhXG5kaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGUgc3RvcmFnZS4gIFRoaXMgd2FzdGVzIHNwYWNlIGZvciBvYmplY3RzXG5oYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2UgdmFyaWFibGVzLiAgVGhlIHNwYWNlIGNvbnN1bXB0aW9uIGNhbiBiZWNvbWVcbmFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2UgbnVtYmVycyBvZiBpbnN0YW5jZXMuXG5cblRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nICpfX3Nsb3RzX18qIGluIGEgbmV3LXN0eWxlXG5jbGFzcyBkZWZpbml0aW9uLiAgVGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHRha2VzIGEgc2VxdWVuY2Ugb2Zcbmluc3RhbmNlIHZhcmlhYmxlcyBhbmQgcmVzZXJ2ZXMganVzdCBlbm91Z2ggc3BhY2UgaW4gZWFjaCBpbnN0YW5jZSB0b1xuaG9sZCBhIHZhbHVlIGZvciBlYWNoIHZhcmlhYmxlLiAgU3BhY2UgaXMgc2F2ZWQgYmVjYXVzZSAqX19kaWN0X18qIGlzXG5ub3QgY3JlYXRlZCBmb3IgZWFjaCBpbnN0YW5jZS5cblxuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gIElmIGRlZmluZWQgaW4gYVxuICAgbmV3LXN0eWxlIGNsYXNzLCAqX19zbG90c19fKiByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkXG4gICB2YXJpYWJsZXMgYW5kIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmRcbiAgICpfX3dlYWtyZWZfXyogZm9yIGVhY2ggaW5zdGFuY2UuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzIGBgQXR0cmlidXRlRXJyb3JgYC4gSWZcbiAgZHluYW1pYyBhc3NpZ25tZW50IG9mIG5ldyB2YXJpYWJsZXMgaXMgZGVzaXJlZCwgdGhlbiBhZGRcbiAgYGBcJ19fZGljdF9fXCdgYCB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogUHJldmlvdXNseSwgYWRkaW5nIGBgXCdfX2RpY3RfX1wnYGAgdG8gdGhlXG4gICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHdvdWxkIG5vdCBlbmFibGUgdGhlIGFzc2lnbm1lbnQgb2YgbmV3XG4gIGF0dHJpYnV0ZXMgbm90IHNwZWNpZmljYWxseSBsaXN0ZWQgaW4gdGhlIHNlcXVlbmNlIG9mIGluc3RhbmNlXG4gIHZhcmlhYmxlIG5hbWVzLlxuXG4qIFdpdGhvdXQgYSAqX193ZWFrcmVmX18qIHZhcmlhYmxlIGZvciBlYWNoIGluc3RhbmNlLCBjbGFzc2VzIGRlZmluaW5nXG4gICpfX3Nsb3RzX18qIGRvIG5vdCBzdXBwb3J0IHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgaW5zdGFuY2VzLiBJZiB3ZWFrXG4gIHJlZmVyZW5jZSBzdXBwb3J0IGlzIG5lZWRlZCwgdGhlbiBhZGQgYGBcJ19fd2Vha3JlZl9fXCdgYCB0byB0aGVcbiAgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24uXG5cbiAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogUHJldmlvdXNseSwgYWRkaW5nIGBgXCdfX3dlYWtyZWZfX1wnYGAgdG8gdGhlXG4gICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHdvdWxkIG5vdCBlbmFibGUgc3VwcG9ydCBmb3Igd2Vha1xuICByZWZlcmVuY2VzLlxuXG4qICpfX3Nsb3RzX18qIGFyZSBpbXBsZW1lbnRlZCBhdCB0aGUgY2xhc3MgbGV2ZWwgYnkgY3JlYXRpbmdcbiAgZGVzY3JpcHRvcnMgKCpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqKSBmb3IgZWFjaCB2YXJpYWJsZSBuYW1lLiAgQXNcbiAgYSByZXN1bHQsIGNsYXNzIGF0dHJpYnV0ZXMgY2Fubm90IGJlIHVzZWQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvclxuICBpbnN0YW5jZSB2YXJpYWJsZXMgZGVmaW5lZCBieSAqX19zbG90c19fKjsgb3RoZXJ3aXNlLCB0aGUgY2xhc3NcbiAgYXR0cmlidXRlIHdvdWxkIG92ZXJ3cml0ZSB0aGUgZGVzY3JpcHRvciBhc3NpZ25tZW50LlxuXG4qIFRoZSBhY3Rpb24gb2YgYSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzc1xuICB3aGVyZSBpdCBpcyBkZWZpbmVkLiAgQXMgYSByZXN1bHQsIHN1YmNsYXNzZXMgd2lsbCBoYXZlIGEgKl9fZGljdF9fKlxuICB1bmxlc3MgdGhleSBhbHNvIGRlZmluZSAqX19zbG90c19fKiAod2hpY2ggbXVzdCBvbmx5IGNvbnRhaW4gbmFtZXNcbiAgb2YgYW55ICphZGRpdGlvbmFsKiBzbG90cykuXG5cbiogSWYgYSBjbGFzcyBkZWZpbmVzIGEgc2xvdCBhbHNvIGRlZmluZWQgaW4gYSBiYXNlIGNsYXNzLCB0aGUgaW5zdGFuY2VcbiAgdmFyaWFibGUgZGVmaW5lZCBieSB0aGUgYmFzZSBjbGFzcyBzbG90IGlzIGluYWNjZXNzaWJsZSAoZXhjZXB0IGJ5XG4gIHJldHJpZXZpbmcgaXRzIGRlc2NyaXB0b3IgZGlyZWN0bHkgZnJvbSB0aGUgYmFzZSBjbGFzcykuIFRoaXNcbiAgcmVuZGVycyB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbSB1bmRlZmluZWQuICBJbiB0aGUgZnV0dXJlLCBhXG4gIGNoZWNrIG1heSBiZSBhZGRlZCB0byBwcmV2ZW50IHRoaXMuXG5cbiogTm9uZW1wdHkgKl9fc2xvdHNfXyogZG9lcyBub3Qgd29yayBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb21cbiAgInZhcmlhYmxlLWxlbmd0aCIgYnVpbHQtaW4gdHlwZXMgc3VjaCBhcyBgYGxvbmdgYCwgYGBzdHJgYCBhbmRcbiAgYGB0dXBsZWBgLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3MgbWF5XG4gIGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuXG4gIENoYW5nZWQgaW4gdmVyc2lvbiAyLjY6IFByZXZpb3VzbHksICpfX2NsYXNzX18qIGFzc2lnbm1lbnQgcmFpc2VkIGFuXG4gIGVycm9yIGlmIGVpdGhlciBuZXcgb3Igb2xkIGNsYXNzIGhhZCAqX19zbG90c19fKi5cblxuXG5DdXN0b21pemluZyBjbGFzcyBjcmVhdGlvblxuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQnkgZGVmYXVsdCwgbmV3LXN0eWxlIGNsYXNzZXMgYXJlIGNvbnN0cnVjdGVkIHVzaW5nIGBgdHlwZSgpYGAuIEFcbmNsYXNzIGRlZmluaXRpb24gaXMgcmVhZCBpbnRvIGEgc2VwYXJhdGUgbmFtZXNwYWNlIGFuZCB0aGUgdmFsdWUgb2ZcbmNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhlIHJlc3VsdCBvZiBgYHR5cGUobmFtZSwgYmFzZXMsIGRpY3QpYGAuXG5cbldoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgcmVhZCwgaWYgKl9fbWV0YWNsYXNzX18qIGlzIGRlZmluZWQgdGhlblxudGhlIGNhbGxhYmxlIGFzc2lnbmVkIHRvIGl0IHdpbGwgYmUgY2FsbGVkIGluc3RlYWQgb2YgYGB0eXBlKClgYC4gVGhpc1xuYWxsb3dzIGNsYXNzZXMgb3IgZnVuY3Rpb25zIHRvIGJlIHdyaXR0ZW4gd2hpY2ggbW9uaXRvciBvciBhbHRlciB0aGVcbmNsYXNzIGNyZWF0aW9uIHByb2Nlc3M6XG5cbiogTW9kaWZ5aW5nIHRoZSBjbGFzcyBkaWN0aW9uYXJ5IHByaW9yIHRvIHRoZSBjbGFzcyBiZWluZyBjcmVhdGVkLlxuXG4qIFJldHVybmluZyBhbiBpbnN0YW5jZSBvZiBhbm90aGVyIGNsYXNzIC0tIGVzc2VudGlhbGx5IHBlcmZvcm1pbmcgdGhlXG4gIHJvbGUgb2YgYSBmYWN0b3J5IGZ1bmN0aW9uLlxuXG5UaGVzZSBzdGVwcyB3aWxsIGhhdmUgdG8gYmUgcGVyZm9ybWVkIGluIHRoZSBtZXRhY2xhc3NcJ3MgYGBfX25ld19fKClgYFxubWV0aG9kIC0tIGBgdHlwZS5fX25ld19fKClgYCBjYW4gdGhlbiBiZSBjYWxsZWQgZnJvbSB0aGlzIG1ldGhvZCB0b1xuY3JlYXRlIGEgY2xhc3Mgd2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcy4gIFRoaXMgZXhhbXBsZSBhZGRzIGEgbmV3XG5lbGVtZW50IHRvIHRoZSBjbGFzcyBkaWN0aW9uYXJ5IGJlZm9yZSBjcmVhdGluZyB0aGUgY2xhc3M6XG5cbiAgIGNsYXNzIG1ldGFjbHModHlwZSk6XG4gICAgICAgZGVmIF9fbmV3X18obWNzLCBuYW1lLCBiYXNlcywgZGljdCk6XG4gICAgICAgICAgIGRpY3RbXCdmb29cJ10gPSBcJ21ldGFjbHMgd2FzIGhlcmVcJ1xuICAgICAgICAgICByZXR1cm4gdHlwZS5fX25ld19fKG1jcywgbmFtZSwgYmFzZXMsIGRpY3QpXG5cbllvdSBjYW4gb2YgY291cnNlIGFsc28gb3ZlcnJpZGUgb3RoZXIgY2xhc3MgbWV0aG9kcyAob3IgYWRkIG5ld1xubWV0aG9kcyk7IGZvciBleGFtcGxlIGRlZmluaW5nIGEgY3VzdG9tIGBgX19jYWxsX18oKWBgIG1ldGhvZCBpbiB0aGVcbm1ldGFjbGFzcyBhbGxvd3MgY3VzdG9tIGJlaGF2aW9yIHdoZW4gdGhlIGNsYXNzIGlzIGNhbGxlZCwgZS5nLiBub3RcbmFsd2F5cyBjcmVhdGluZyBhIG5ldyBpbnN0YW5jZS5cblxuX19tZXRhY2xhc3NfX1xuXG4gICBUaGlzIHZhcmlhYmxlIGNhbiBiZSBhbnkgY2FsbGFibGUgYWNjZXB0aW5nIGFyZ3VtZW50cyBmb3IgYGBuYW1lYGAsXG4gICBgYGJhc2VzYGAsIGFuZCBgYGRpY3RgYC4gIFVwb24gY2xhc3MgY3JlYXRpb24sIHRoZSBjYWxsYWJsZSBpcyB1c2VkXG4gICBpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbiBgYHR5cGUoKWBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cblRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIHByZWNlZGVuY2VcbnJ1bGVzOlxuXG4qIElmIGBgZGljdFtcJ19fbWV0YWNsYXNzX19cJ11gYCBleGlzdHMsIGl0IGlzIHVzZWQuXG5cbiogT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgYmFzZSBjbGFzcywgaXRzIG1ldGFjbGFzcyBpc1xuICB1c2VkICh0aGlzIGxvb2tzIGZvciBhICpfX2NsYXNzX18qIGF0dHJpYnV0ZSBmaXJzdCBhbmQgaWYgbm90IGZvdW5kLFxuICB1c2VzIGl0cyB0eXBlKS5cblxuKiBPdGhlcndpc2UsIGlmIGEgZ2xvYmFsIHZhcmlhYmxlIG5hbWVkIF9fbWV0YWNsYXNzX18gZXhpc3RzLCBpdCBpc1xuICB1c2VkLlxuXG4qIE90aGVyd2lzZSwgdGhlIG9sZC1zdHlsZSwgY2xhc3NpYyBtZXRhY2xhc3MgKHR5cGVzLkNsYXNzVHlwZSkgaXNcbiAgdXNlZC5cblxuVGhlIHBvdGVudGlhbCB1c2VzIGZvciBtZXRhY2xhc3NlcyBhcmUgYm91bmRsZXNzLiBTb21lIGlkZWFzIHRoYXQgaGF2ZVxuYmVlbiBleHBsb3JlZCBpbmNsdWRpbmcgbG9nZ2luZywgaW50ZXJmYWNlIGNoZWNraW5nLCBhdXRvbWF0aWNcbmRlbGVnYXRpb24sIGF1dG9tYXRpYyBwcm9wZXJ0eSBjcmVhdGlvbiwgcHJveGllcywgZnJhbWV3b3JrcywgYW5kXG5hdXRvbWF0aWMgcmVzb3VyY2UgbG9ja2luZy9zeW5jaHJvbml6YXRpb24uXG5cblxuQ3VzdG9taXppbmcgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5OZXcgaW4gdmVyc2lvbiAyLjYuXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGVcbmBgaXNpbnN0YW5jZSgpYGAgYW5kIGBgaXNzdWJjbGFzcygpYGAgYnVpbHQtaW4gZnVuY3Rpb25zLlxuXG5JbiBwYXJ0aWN1bGFyLCB0aGUgbWV0YWNsYXNzIGBgYWJjLkFCQ01ldGFgYCBpbXBsZW1lbnRzIHRoZXNlIG1ldGhvZHNcbmluIG9yZGVyIHRvIGFsbG93IHRoZSBhZGRpdGlvbiBvZiBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGFzXG4idmlydHVhbCBiYXNlIGNsYXNzZXMiIHRvIGFueSBjbGFzcyBvciB0eXBlIChpbmNsdWRpbmcgYnVpbHQtaW5cbnR5cGVzKSwgYW5kIGluY2x1ZGluZyB0byBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICBgYGlzaW5zdGFuY2UoaW5zdGFuY2UsIGNsYXNzKWBgLlxuXG5jbGFzcy5fX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBzdWJjbGFzcylcblxuICAgUmV0dXJuIHRydWUgaWYgKnN1YmNsYXNzKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBzdWJjbGFzcyBvZiAqY2xhc3MqLiAgSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcylgYC5cblxuTm90ZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgdHlwZSAobWV0YWNsYXNzKSBvZiBhXG5jbGFzcy4gIFRoZXkgY2Fubm90IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcyBpbiB0aGUgYWN0dWFsIGNsYXNzLlxuVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkXG5vbiBpbnN0YW5jZXMsIG9ubHkgdGhhdCBpbiB0aGlzIGNhc2UgdGhlIGluc3RhbmNlIGlzIGl0c2VsZiBhIGNsYXNzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExOSoqIC0gSW50cm9kdWNpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzXG4gICAgICBJbmNsdWRlcyB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgY3VzdG9taXppbmcgYGBpc2luc3RhbmNlKClgYCBhbmRcbiAgICAgIGBgaXNzdWJjbGFzcygpYGAgYmVoYXZpb3IgdGhyb3VnaCBgYF9faW5zdGFuY2VjaGVja19fKClgYCBhbmRcbiAgICAgIGBgX19zdWJjbGFzc2NoZWNrX18oKWBgLCB3aXRoIG1vdGl2YXRpb24gZm9yIHRoaXMgZnVuY3Rpb25hbGl0eVxuICAgICAgaW4gdGhlIGNvbnRleHQgb2YgYWRkaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoc2VlIHRoZSBgYGFiY2BgXG4gICAgICBtb2R1bGUpIHRvIHRoZSBsYW5ndWFnZS5cblxuXG5FbXVsYXRpbmcgY2FsbGFibGUgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fY2FsbF9fKHNlbGZbLCBhcmdzLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzICJjYWxsZWQiIGFzIGEgZnVuY3Rpb247IGlmIHRoaXMgbWV0aG9kXG4gICBpcyBkZWZpbmVkLCBgYHgoYXJnMSwgYXJnMiwgLi4uKWBgIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgYGB4Ll9fY2FsbF9fKGFyZzEsIGFyZzIsIC4uLilgYC5cblxuXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoIGBgMCA8PSBrIDwgTmBgXG53aGVyZSAqTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoXG5kZWZpbmUgYSByYW5nZSBvZiBpdGVtcy4gKEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdGhlIG1ldGhvZFxuYGBfX2dldHNsaWNlX18oKWBgIChzZWUgYmVsb3cpIGNhbiBhbHNvIGJlIGRlZmluZWQgdG8gaGFuZGxlIHNpbXBsZSxcbmJ1dCBub3QgZXh0ZW5kZWQgc2xpY2VzLikgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGVcbnRoZSBtZXRob2RzIGBga2V5cygpYGAsIGBgdmFsdWVzKClgYCwgYGBpdGVtcygpYGAsIGBgaGFzX2tleSgpYGAsXG5gYGdldCgpYGAsIGBgY2xlYXIoKWBgLCBgYHNldGRlZmF1bHQoKWBgLCBgYGl0ZXJrZXlzKClgYCxcbmBgaXRlcnZhbHVlcygpYGAsIGBgaXRlcml0ZW1zKClgYCwgYGBwb3AoKWBgLCBgYHBvcGl0ZW0oKWBgLFxuYGBjb3B5KClgYCwgYW5kIGBgdXBkYXRlKClgYCBiZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob25cJ3NcbnN0YW5kYXJkIGRpY3Rpb25hcnkgb2JqZWN0cy4gIFRoZSBgYFVzZXJEaWN0YGAgbW9kdWxlIHByb3ZpZGVzIGFcbmBgRGljdE1peGluYGAgY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kcyBmcm9tIGEgYmFzZSBzZXQgb2ZcbmBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCwgYGBfX2RlbGl0ZW1fXygpYGAsIGFuZFxuYGBrZXlzKClgYC4gTXV0YWJsZSBzZXF1ZW5jZXMgc2hvdWxkIHByb3ZpZGUgbWV0aG9kcyBgYGFwcGVuZCgpYGAsXG5gYGNvdW50KClgYCwgYGBpbmRleCgpYGAsIGBgZXh0ZW5kKClgYCwgYGBpbnNlcnQoKWBgLCBgYHBvcCgpYGAsXG5gYHJlbW92ZSgpYGAsIGBgcmV2ZXJzZSgpYGAgYW5kIGBgc29ydCgpYGAsIGxpa2UgUHl0aG9uIHN0YW5kYXJkIGxpc3Rcbm9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGQgaW1wbGVtZW50IGFkZGl0aW9uIChtZWFuaW5nXG5jb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmcgcmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlXG5tZXRob2RzIGBgX19hZGRfXygpYGAsIGBgX19yYWRkX18oKWBgLCBgYF9faWFkZF9fKClgYCwgYGBfX211bF9fKClgYCxcbmBgX19ybXVsX18oKWBgIGFuZCBgYF9faW11bF9fKClgYCBkZXNjcmliZWQgYmVsb3c7IHRoZXkgc2hvdWxkIG5vdFxuZGVmaW5lIGBgX19jb2VyY2VfXygpYGAgb3Igb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0IGlzXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9fY29udGFpbnNfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlIGBgaW5gYFxub3BlcmF0b3I7IGZvciBtYXBwaW5ncywgYGBpbmBgIHNob3VsZCBiZSBlcXVpdmFsZW50IG9mIGBgaGFzX2tleSgpYGA7XG5mb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXJcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19pdGVyX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlXG5jb250YWluZXI7IGZvciBtYXBwaW5ncywgYGBfX2l0ZXJfXygpYGAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzXG5gYGl0ZXJrZXlzKClgYDsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGxlbigpYGAuICBTaG91bGQgcmV0dXJuXG4gICB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QsIGFuIGludGVnZXIgYGA+PWBgIDAuICBBbHNvLCBhbiBvYmplY3RcbiAgIHRoYXQgZG9lc25cJ3QgZGVmaW5lIGEgYGBfX25vbnplcm9fXygpYGAgbWV0aG9kIGFuZCB3aG9zZVxuICAgYGBfX2xlbl9fKClgYCBtZXRob2QgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYVxuICAgQm9vbGVhbiBjb250ZXh0LlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBpdGVya2V5cygpYGAuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSBgYF9fcmV2ZXJzZWRfXygpYGAgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlXG4gICBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2VcbiAgIHByb3RvY29sIChgYF9fbGVuX18oKWBgIGFuZCBgYF9fZ2V0aXRlbV9fKClgYCkuICBPYmplY3RzIHRoYXRcbiAgIHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sIHNob3VsZCBvbmx5IHByb3ZpZGVcbiAgIGBgX19yZXZlcnNlZF9fKClgYCBpZiB0aGV5IGNhbiBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgaXNcbiAgIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieSBgYHJldmVyc2VkKClgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMi42LlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgLCB0aGUgbWVtYmVyc2hpcFxuICAgdGVzdCBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhIGBgX19pdGVyX18oKWBgLCB0aGVuIHRoZSBvbGRcbiAgIHNlcXVlbmNlIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgYGBfX2dldGl0ZW1fXygpYGAsIHNlZSAqdGhpc1xuICAgc2VjdGlvbiBpbiB0aGUgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5BZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGVtdWxhdGlvbiBvZiBzZXF1ZW5jZSB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBvcHRpb25hbCBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGZ1cnRoZXIgZW11bGF0ZVxuc2VxdWVuY2Ugb2JqZWN0cy4gIEltbXV0YWJsZSBzZXF1ZW5jZXMgbWV0aG9kcyBzaG91bGQgYXQgbW9zdCBvbmx5XG5kZWZpbmUgYGBfX2dldHNsaWNlX18oKWBgOyBtdXRhYmxlIHNlcXVlbmNlcyBtaWdodCBkZWZpbmUgYWxsIHRocmVlXG5tZXRob2RzLlxuXG5vYmplY3QuX19nZXRzbGljZV9fKHNlbGYsIGksIGopXG5cbiAgIERlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjA6IFN1cHBvcnQgc2xpY2Ugb2JqZWN0cyBhcyBwYXJhbWV0ZXJzXG4gICB0byB0aGUgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLiAoSG93ZXZlciwgYnVpbHQtaW4gdHlwZXMgaW5cbiAgIENQeXRob24gY3VycmVudGx5IHN0aWxsIGltcGxlbWVudCBgYF9fZ2V0c2xpY2VfXygpYGAuICBUaGVyZWZvcmUsXG4gICB5b3UgaGF2ZSB0byBvdmVycmlkZSBpdCBpbiBkZXJpdmVkIGNsYXNzZXMgd2hlbiBpbXBsZW1lbnRpbmdcbiAgIHNsaWNpbmcuKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2k6al1gYC4gVGhlIHJldHVybmVkXG4gICBvYmplY3Qgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgKnNlbGYqLiAgTm90ZSB0aGF0IG1pc3NpbmcgKmkqXG4gICBvciAqaiogaW4gdGhlIHNsaWNlIGV4cHJlc3Npb24gYXJlIHJlcGxhY2VkIGJ5IHplcm8gb3JcbiAgIGBgc3lzLm1heGludGBgLCByZXNwZWN0aXZlbHkuICBJZiBuZWdhdGl2ZSBpbmRleGVzIGFyZSB1c2VkIGluIHRoZVxuICAgc2xpY2UsIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIGlzIGFkZGVkIHRvIHRoYXQgaW5kZXguIElmIHRoZVxuICAgaW5zdGFuY2UgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYF9fbGVuX18oKWBgIG1ldGhvZCwgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYCBpcyByYWlzZWQuIE5vIGd1YXJhbnRlZSBpcyBtYWRlIHRoYXQgaW5kZXhlc1xuICAgYWRqdXN0ZWQgdGhpcyB3YXkgYXJlIG5vdCBzdGlsbCBuZWdhdGl2ZS4gIEluZGV4ZXMgd2hpY2ggYXJlXG4gICBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgYXJlIG5vdCBtb2RpZmllZC4gSWYgbm9cbiAgIGBgX19nZXRzbGljZV9fKClgYCBpcyBmb3VuZCwgYSBzbGljZSBvYmplY3QgaXMgY3JlYXRlZCBpbnN0ZWFkLCBhbmRcbiAgIHBhc3NlZCB0byBgYF9fZ2V0aXRlbV9fKClgYCBpbnN0ZWFkLlxuXG5vYmplY3QuX19zZXRzbGljZV9fKHNlbGYsIGksIGosIHNlcXVlbmNlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2k6al1gYC4gU2FtZSBub3RlcyBmb3IgKmkqXG4gICBhbmQgKmoqIGFzIGZvciBgYF9fZ2V0c2xpY2VfXygpYGAuXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIElmIG5vIGBgX19zZXRzbGljZV9fKClgYCBpcyBmb3VuZCwgb3JcbiAgIGZvciBleHRlbmRlZCBzbGljaW5nIG9mIHRoZSBmb3JtIGBgc2VsZltpOmo6a11gYCwgYSBzbGljZSBvYmplY3QgaXNcbiAgIGNyZWF0ZWQsIGFuZCBwYXNzZWQgdG8gYGBfX3NldGl0ZW1fXygpYGAsIGluc3RlYWQgb2ZcbiAgIGBgX19zZXRzbGljZV9fKClgYCBiZWluZyBjYWxsZWQuXG5cbm9iamVjdC5fX2RlbHNsaWNlX18oc2VsZiwgaSwgailcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiBgYHNlbGZbaTpqXWBgLiBTYW1lIG5vdGVzIGZvciAqaSpcbiAgIGFuZCAqaiogYXMgZm9yIGBgX19nZXRzbGljZV9fKClgYC4gVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gSWYgbm9cbiAgIGBgX19kZWxzbGljZV9fKClgYCBpcyBmb3VuZCwgb3IgZm9yIGV4dGVuZGVkIHNsaWNpbmcgb2YgdGhlIGZvcm1cbiAgIGBgc2VsZltpOmo6a11gYCwgYSBzbGljZSBvYmplY3QgaXMgY3JlYXRlZCwgYW5kIHBhc3NlZCB0b1xuICAgYGBfX2RlbGl0ZW1fXygpYGAsIGluc3RlYWQgb2YgYGBfX2RlbHNsaWNlX18oKWBgIGJlaW5nIGNhbGxlZC5cblxuTm90aWNlIHRoYXQgdGhlc2UgbWV0aG9kcyBhcmUgb25seSBpbnZva2VkIHdoZW4gYSBzaW5nbGUgc2xpY2Ugd2l0aCBhXG5zaW5nbGUgY29sb24gaXMgdXNlZCwgYW5kIHRoZSBzbGljZSBtZXRob2QgaXMgYXZhaWxhYmxlLiAgRm9yIHNsaWNlXG5vcGVyYXRpb25zIGludm9sdmluZyBleHRlbmRlZCBzbGljZSBub3RhdGlvbiwgb3IgaW4gYWJzZW5jZSBvZiB0aGVcbnNsaWNlIG1ldGhvZHMsIGBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCBvclxuYGBfX2RlbGl0ZW1fXygpYGAgaXMgY2FsbGVkIHdpdGggYSBzbGljZSBvYmplY3QgYXMgYXJndW1lbnQuXG5cblRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZSBob3cgdG8gbWFrZSB5b3VyIHByb2dyYW0gb3IgbW9kdWxlXG5jb21wYXRpYmxlIHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24gKGFzc3VtaW5nIHRoYXQgbWV0aG9kc1xuYGBfX2dldGl0ZW1fXygpYGAsIGBgX19zZXRpdGVtX18oKWBgIGFuZCBgYF9fZGVsaXRlbV9fKClgYCBzdXBwb3J0XG5zbGljZSBvYmplY3RzIGFzIGFyZ3VtZW50cyk6XG5cbiAgIGNsYXNzIE15Q2xhc3M6XG4gICAgICAgLi4uXG4gICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KTpcbiAgICAgICAgICAgLi4uXG4gICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCB2YWx1ZSk6XG4gICAgICAgICAgIC4uLlxuICAgICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBpbmRleCk6XG4gICAgICAgICAgIC4uLlxuXG4gICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCAwKTpcbiAgICAgICAgICAgIyBUaGV5IHdvblwndCBiZSBkZWZpbmVkIGlmIHZlcnNpb24gaXMgYXQgbGVhc3QgMi4wIGZpbmFsXG5cbiAgICAgICAgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKTpcbiAgICAgICAgICAgICAgIHJldHVybiBzZWxmW21heCgwLCBpKTptYXgoMCwgaik6XVxuICAgICAgICAgICBkZWYgX19zZXRzbGljZV9fKHNlbGYsIGksIGosIHNlcSk6XG4gICAgICAgICAgICAgICBzZWxmW21heCgwLCBpKTptYXgoMCwgaik6XSA9IHNlcVxuICAgICAgICAgICBkZWYgX19kZWxzbGljZV9fKHNlbGYsIGksIGopOlxuICAgICAgICAgICAgICAgZGVsIHNlbGZbbWF4KDAsIGkpOm1heCgwLCBqKTpdXG4gICAgICAgLi4uXG5cbk5vdGUgdGhlIGNhbGxzIHRvIGBgbWF4KClgYDsgdGhlc2UgYXJlIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIHRoZVxuaGFuZGxpbmcgb2YgbmVnYXRpdmUgaW5kaWNlcyBiZWZvcmUgdGhlIGBgX18qc2xpY2VfXygpYGAgbWV0aG9kcyBhcmVcbmNhbGxlZC4gIFdoZW4gbmVnYXRpdmUgaW5kZXhlcyBhcmUgdXNlZCwgdGhlIGBgX18qaXRlbV9fKClgYCBtZXRob2RzXG5yZWNlaXZlIHRoZW0gYXMgcHJvdmlkZWQsIGJ1dCB0aGUgYGBfXypzbGljZV9fKClgYCBtZXRob2RzIGdldCBhXG4iY29va2VkIiBmb3JtIG9mIHRoZSBpbmRleCB2YWx1ZXMuICBGb3IgZWFjaCBuZWdhdGl2ZSBpbmRleCB2YWx1ZSwgdGhlXG5sZW5ndGggb2YgdGhlIHNlcXVlbmNlIGlzIGFkZGVkIHRvIHRoZSBpbmRleCBiZWZvcmUgY2FsbGluZyB0aGUgbWV0aG9kXG4od2hpY2ggbWF5IHN0aWxsIHJlc3VsdCBpbiBhIG5lZ2F0aXZlIGluZGV4KTsgdGhpcyBpcyB0aGUgY3VzdG9tYXJ5XG5oYW5kbGluZyBvZiBuZWdhdGl2ZSBpbmRleGVzIGJ5IHRoZSBidWlsdC1pbiBzZXF1ZW5jZSB0eXBlcywgYW5kIHRoZVxuYGBfXyppdGVtX18oKWBgIG1ldGhvZHMgYXJlIGV4cGVjdGVkIHRvIGRvIHRoaXMgYXMgd2VsbC4gIEhvd2V2ZXIsXG5zaW5jZSB0aGV5IHNob3VsZCBhbHJlYWR5IGJlIGRvaW5nIHRoYXQsIG5lZ2F0aXZlIGluZGV4ZXMgY2Fubm90IGJlXG5wYXNzZWQgaW47IHRoZXkgbXVzdCBiZSBjb25zdHJhaW5lZCB0byB0aGUgYm91bmRzIG9mIHRoZSBzZXF1ZW5jZVxuYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgYGBfXyppdGVtX18oKWBgIG1ldGhvZHMuIENhbGxpbmcgYGBtYXgoMCxcbmkpYGAgY29udmVuaWVudGx5IHJldHVybnMgdGhlIHByb3BlciB2YWx1ZS5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvL2BgLCBgYCVgYCwgYGBkaXZtb2QoKWBgLFxuICAgYGBwb3coKWBgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsIGBgfGBgKS4gIEZvclxuICAgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGBgeCArIHlgYCwgd2hlcmUgKngqIGlzIGFuXG4gICBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19hZGRfXygpYGAgbWV0aG9kLFxuICAgYGB4Ll9fYWRkX18oeSlgYCBpcyBjYWxsZWQuICBUaGUgYGBfX2Rpdm1vZF9fKClgYCBtZXRob2Qgc2hvdWxkIGJlXG4gICB0aGUgZXF1aXZhbGVudCB0byB1c2luZyBgYF9fZmxvb3JkaXZfXygpYGAgYW5kIGBgX19tb2RfXygpYGA7IGl0XG4gICBzaG91bGQgbm90IGJlIHJlbGF0ZWQgdG8gYGBfX3RydWVkaXZfXygpYGAgKGRlc2NyaWJlZCBiZWxvdykuICBOb3RlXG4gICB0aGF0IGBgX19wb3dfXygpYGAgc2hvdWxkIGJlIGRlZmluZWQgdG8gYWNjZXB0IGFuIG9wdGlvbmFsIHRoaXJkXG4gICBhcmd1bWVudCBpZiB0aGUgdGVybmFyeSB2ZXJzaW9uIG9mIHRoZSBidWlsdC1pbiBgYHBvdygpYGAgZnVuY3Rpb25cbiAgIGlzIHRvIGJlIHN1cHBvcnRlZC5cblxuICAgSWYgb25lIG9mIHRob3NlIG1ldGhvZHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIHdpdGggdGhlXG4gICBzdXBwbGllZCBhcmd1bWVudHMsIGl0IHNob3VsZCByZXR1cm4gYGBOb3RJbXBsZW1lbnRlZGBgLlxuXG5vYmplY3QuX19kaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlIGRpdmlzaW9uIG9wZXJhdG9yIChgYC9gYCkgaXMgaW1wbGVtZW50ZWQgYnkgdGhlc2UgbWV0aG9kcy4gIFRoZVxuICAgYGBfX3RydWVkaXZfXygpYGAgbWV0aG9kIGlzIHVzZWQgd2hlbiBgYF9fZnV0dXJlX18uZGl2aXNpb25gYCBpcyBpblxuICAgZWZmZWN0LCBvdGhlcndpc2UgYGBfX2Rpdl9fKClgYCBpcyB1c2VkLiAgSWYgb25seSBvbmUgb2YgdGhlc2UgdHdvXG4gICBtZXRob2RzIGlzIGRlZmluZWQsIHRoZSBvYmplY3Qgd2lsbCBub3Qgc3VwcG9ydCBkaXZpc2lvbiBpbiB0aGVcbiAgIGFsdGVybmF0ZSBjb250ZXh0OyBgYFR5cGVFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGluc3RlYWQuXG5cbm9iamVjdC5fX3JhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JtdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JkaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jwb3dfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgJWBgLCBgYGRpdm1vZCgpYGAsXG4gICBgYHBvdygpYGAsIGBgKipgYCwgYGA8PGBgLCBgYD4+YGAsIGBgJmBgLCBgYF5gYCwgYGB8YGApIHdpdGhcbiAgIHJlZmxlY3RlZCAoc3dhcHBlZCkgb3BlcmFuZHMuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIGlmXG4gICB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIGFuZFxuICAgdGhlIG9wZXJhbmRzIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMuIFsyXSBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlXG4gICB0aGUgZXhwcmVzc2lvbiBgYHggLSB5YGAsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXRcbiAgIGhhcyBhbiBgYF9fcnN1Yl9fKClgYCBtZXRob2QsIGBgeS5fX3JzdWJfXyh4KWBgIGlzIGNhbGxlZCBpZlxuICAgYGB4Ll9fc3ViX18oeSlgYCByZXR1cm5zICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5IGBgcG93KClgYCB3aWxsIG5vdCB0cnkgY2FsbGluZyBgYF9fcnBvd19fKClgYFxuICAgKHRoZSBjb2VyY2lvbiBydWxlcyB3b3VsZCBiZWNvbWUgdG9vIGNvbXBsaWNhdGVkKS5cblxuICAgTm90ZTogSWYgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0IG9wZXJhbmRcJ3NcbiAgICAgdHlwZSBhbmQgdGhhdCBzdWJjbGFzcyBwcm92aWRlcyB0aGUgcmVmbGVjdGVkIG1ldGhvZCBmb3IgdGhlXG4gICAgIG9wZXJhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsZWZ0IG9wZXJhbmRcJ3NcbiAgICAgbm9uLXJlZmxlY3RlZCBtZXRob2QuICBUaGlzIGJlaGF2aW9yIGFsbG93cyBzdWJjbGFzc2VzIHRvXG4gICAgIG92ZXJyaWRlIHRoZWlyIGFuY2VzdG9yc1wnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzIChgYCs9YGAsIGBgLT1gYCwgYGAqPWBgLCBgYC89YGAsIGBgLy89YGAsIGBgJT1gYCxcbiAgIGBgKio9YGAsIGBgPDw9YGAsIGBgPj49YGAsIGBgJj1gYCwgYGBePWBgLCBgYHw9YGApLiAgVGhlc2UgbWV0aG9kc1xuICAgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kXG4gICByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2ggY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLFxuICAgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkXG4gICBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbCBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCB0b1xuICAgZXhlY3V0ZSB0aGUgc3RhdGVtZW50IGBgeCArPSB5YGAsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhXG4gICBjbGFzcyB0aGF0IGhhcyBhbiBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2lhZGRfXyh5KWBgIGlzXG4gICBjYWxsZWQuICBJZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGRvZXMgbm90IGRlZmluZSBhXG4gICBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2FkZF9fKHkpYGAgYW5kIGBgeS5fX3JhZGRfXyh4KWBgIGFyZVxuICAgY29uc2lkZXJlZCwgYXMgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiBgYHggKyB5YGAuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoYGAtYGAsIGBgK2BgLFxuICAgYGBhYnMoKWBgIGFuZCBgYH5gYCkuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2xvbmdfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBjb21wbGV4KClgYCxcbiAgIGBgaW50KClgYCwgYGBsb25nKClgYCwgYW5kIGBgZmxvYXQoKWBgLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mXG4gICB0aGUgYXBwcm9wcmlhdGUgdHlwZS5cblxub2JqZWN0Ll9fb2N0X18oc2VsZilcbm9iamVjdC5fX2hleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYG9jdCgpYGAgYW5kIGBgaGV4KClgYC5cbiAgIFNob3VsZCByZXR1cm4gYSBzdHJpbmcgdmFsdWUuXG5cbm9iamVjdC5fX2luZGV4X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBgYG9wZXJhdG9yLmluZGV4KClgYC4gIEFsc28gY2FsbGVkIHdoZW5ldmVyXG4gICBQeXRob24gbmVlZHMgYW4gaW50ZWdlciBvYmplY3QgKHN1Y2ggYXMgaW4gc2xpY2luZykuICBNdXN0IHJldHVyblxuICAgYW4gaW50ZWdlciAoaW50IG9yIGxvbmcpLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjUuXG5cbm9iamVjdC5fX2NvZXJjZV9fKHNlbGYsIG90aGVyKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJtaXhlZC1tb2RlIiBudW1lcmljIGFyaXRobWV0aWMuICBTaG91bGQgZWl0aGVyXG4gICByZXR1cm4gYSAyLXR1cGxlIGNvbnRhaW5pbmcgKnNlbGYqIGFuZCAqb3RoZXIqIGNvbnZlcnRlZCB0byBhXG4gICBjb21tb24gbnVtZXJpYyB0eXBlLCBvciBgYE5vbmVgYCBpZiBjb252ZXJzaW9uIGlzIGltcG9zc2libGUuICBXaGVuXG4gICB0aGUgY29tbW9uIHR5cGUgd291bGQgYmUgdGhlIHR5cGUgb2YgYGBvdGhlcmBgLCBpdCBpcyBzdWZmaWNpZW50IHRvXG4gICByZXR1cm4gYGBOb25lYGAsIHNpbmNlIHRoZSBpbnRlcnByZXRlciB3aWxsIGFsc28gYXNrIHRoZSBvdGhlclxuICAgb2JqZWN0IHRvIGF0dGVtcHQgYSBjb2VyY2lvbiAoYnV0IHNvbWV0aW1lcywgaWYgdGhlIGltcGxlbWVudGF0aW9uXG4gICBvZiB0aGUgb3RoZXIgdHlwZSBjYW5ub3QgYmUgY2hhbmdlZCwgaXQgaXMgdXNlZnVsIHRvIGRvIHRoZVxuICAgY29udmVyc2lvbiB0byB0aGUgb3RoZXIgdHlwZSBoZXJlKS4gIEEgcmV0dXJuIHZhbHVlIG9mXG4gICBgYE5vdEltcGxlbWVudGVkYGAgaXMgZXF1aXZhbGVudCB0byByZXR1cm5pbmcgYGBOb25lYGAuXG5cblxuQ29lcmNpb24gcnVsZXNcbj09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiB1c2VkIHRvIGRvY3VtZW50IHRoZSBydWxlcyBmb3IgY29lcmNpb24uICBBcyB0aGUgbGFuZ3VhZ2VcbmhhcyBldm9sdmVkLCB0aGUgY29lcmNpb24gcnVsZXMgaGF2ZSBiZWNvbWUgaGFyZCB0byBkb2N1bWVudFxucHJlY2lzZWx5OyBkb2N1bWVudGluZyB3aGF0IG9uZSB2ZXJzaW9uIG9mIG9uZSBwYXJ0aWN1bGFyXG5pbXBsZW1lbnRhdGlvbiBkb2VzIGlzIHVuZGVzaXJhYmxlLiAgSW5zdGVhZCwgaGVyZSBhcmUgc29tZSBpbmZvcm1hbFxuZ3VpZGVsaW5lcyByZWdhcmRpbmcgY29lcmNpb24uICBJbiBQeXRob24gMy4wLCBjb2VyY2lvbiB3aWxsIG5vdCBiZVxuc3VwcG9ydGVkLlxuXG4qIElmIHRoZSBsZWZ0IG9wZXJhbmQgb2YgYSAlIG9wZXJhdG9yIGlzIGEgc3RyaW5nIG9yIFVuaWNvZGUgb2JqZWN0LFxuICBubyBjb2VyY2lvbiB0YWtlcyBwbGFjZSBhbmQgdGhlIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbiBpc1xuICBpbnZva2VkIGluc3RlYWQuXG5cbiogSXQgaXMgbm8gbG9uZ2VyIHJlY29tbWVuZGVkIHRvIGRlZmluZSBhIGNvZXJjaW9uIG9wZXJhdGlvbi4gTWl4ZWQtXG4gIG1vZGUgb3BlcmF0aW9ucyBvbiB0eXBlcyB0aGF0IGRvblwndCBkZWZpbmUgY29lcmNpb24gcGFzcyB0aGVcbiAgb3JpZ2luYWwgYXJndW1lbnRzIHRvIHRoZSBvcGVyYXRpb24uXG5cbiogTmV3LXN0eWxlIGNsYXNzZXMgKHRob3NlIGRlcml2ZWQgZnJvbSBgYG9iamVjdGBgKSBuZXZlciBpbnZva2UgdGhlXG4gIGBgX19jb2VyY2VfXygpYGAgbWV0aG9kIGluIHJlc3BvbnNlIHRvIGEgYmluYXJ5IG9wZXJhdG9yOyB0aGUgb25seVxuICB0aW1lIGBgX19jb2VyY2VfXygpYGAgaXMgaW52b2tlZCBpcyB3aGVuIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICBgYGNvZXJjZSgpYGAgaXMgY2FsbGVkLlxuXG4qIEZvciBtb3N0IGludGVudHMgYW5kIHB1cnBvc2VzLCBhbiBvcGVyYXRvciB0aGF0IHJldHVybnNcbiAgYGBOb3RJbXBsZW1lbnRlZGBgIGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMgb25lIHRoYXQgaXMgbm90XG4gIGltcGxlbWVudGVkIGF0IGFsbC5cblxuKiBCZWxvdywgYGBfX29wX18oKWBgIGFuZCBgYF9fcm9wX18oKWBgIGFyZSB1c2VkIHRvIHNpZ25pZnkgdGhlXG4gIGdlbmVyaWMgbWV0aG9kIG5hbWVzIGNvcnJlc3BvbmRpbmcgdG8gYW4gb3BlcmF0b3I7IGBgX19pb3BfXygpYGAgaXNcbiAgdXNlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgaW4tcGxhY2Ugb3BlcmF0b3IuICBGb3IgZXhhbXBsZSwgZm9yIHRoZVxuICBvcGVyYXRvciBcJ2BgK2BgXCcsIGBgX19hZGRfXygpYGAgYW5kIGBgX19yYWRkX18oKWBgIGFyZSB1c2VkIGZvciB0aGVcbiAgbGVmdCBhbmQgcmlnaHQgdmFyaWFudCBvZiB0aGUgYmluYXJ5IG9wZXJhdG9yLCBhbmQgYGBfX2lhZGRfXygpYGBcbiAgZm9yIHRoZSBpbi1wbGFjZSB2YXJpYW50LlxuXG4qIEZvciBvYmplY3RzICp4KiBhbmQgKnkqLCBmaXJzdCBgYHguX19vcF9fKHkpYGAgaXMgdHJpZWQuICBJZiB0aGlzIGlzXG4gIG5vdCBpbXBsZW1lbnRlZCBvciByZXR1cm5zIGBgTm90SW1wbGVtZW50ZWRgYCwgYGB5Ll9fcm9wX18oeClgYCBpc1xuICB0cmllZC4gIElmIHRoaXMgaXMgYWxzbyBub3QgaW1wbGVtZW50ZWQgb3IgcmV0dXJuc1xuICBgYE5vdEltcGxlbWVudGVkYGAsIGEgYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLiAgQnV0IHNlZVxuICB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcblxuKiBFeGNlcHRpb24gdG8gdGhlIHByZXZpb3VzIGl0ZW06IGlmIHRoZSBsZWZ0IG9wZXJhbmQgaXMgYW4gaW5zdGFuY2VcbiAgb2YgYSBidWlsdC1pbiB0eXBlIG9yIGEgbmV3LXN0eWxlIGNsYXNzLCBhbmQgdGhlIHJpZ2h0IG9wZXJhbmQgaXMgYW5cbiAgaW5zdGFuY2Ugb2YgYSBwcm9wZXIgc3ViY2xhc3Mgb2YgdGhhdCB0eXBlIG9yIGNsYXNzIGFuZCBvdmVycmlkZXNcbiAgdGhlIGJhc2VcJ3MgYGBfX3JvcF9fKClgYCBtZXRob2QsIHRoZSByaWdodCBvcGVyYW5kXCdzIGBgX19yb3BfXygpYGBcbiAgbWV0aG9kIGlzIHRyaWVkICpiZWZvcmUqIHRoZSBsZWZ0IG9wZXJhbmRcJ3MgYGBfX29wX18oKWBgIG1ldGhvZC5cblxuICBUaGlzIGlzIGRvbmUgc28gdGhhdCBhIHN1YmNsYXNzIGNhbiBjb21wbGV0ZWx5IG92ZXJyaWRlIGJpbmFyeVxuICBvcGVyYXRvcnMuIE90aGVyd2lzZSwgdGhlIGxlZnQgb3BlcmFuZFwncyBgYF9fb3BfXygpYGAgbWV0aG9kIHdvdWxkXG4gIGFsd2F5cyBhY2NlcHQgdGhlIHJpZ2h0IG9wZXJhbmQ6IHdoZW4gYW4gaW5zdGFuY2Ugb2YgYSBnaXZlbiBjbGFzc1xuICBpcyBleHBlY3RlZCwgYW4gaW5zdGFuY2Ugb2YgYSBzdWJjbGFzcyBvZiB0aGF0IGNsYXNzIGlzIGFsd2F5c1xuICBhY2NlcHRhYmxlLlxuXG4qIFdoZW4gZWl0aGVyIG9wZXJhbmQgdHlwZSBkZWZpbmVzIGEgY29lcmNpb24sIHRoaXMgY29lcmNpb24gaXMgY2FsbGVkXG4gIGJlZm9yZSB0aGF0IHR5cGVcJ3MgYGBfX29wX18oKWBgIG9yIGBgX19yb3BfXygpYGAgbWV0aG9kIGlzIGNhbGxlZCxcbiAgYnV0IG5vIHNvb25lci4gIElmIHRoZSBjb2VyY2lvbiByZXR1cm5zIGFuIG9iamVjdCBvZiBhIGRpZmZlcmVudFxuICB0eXBlIGZvciB0aGUgb3BlcmFuZCB3aG9zZSBjb2VyY2lvbiBpcyBpbnZva2VkLCBwYXJ0IG9mIHRoZSBwcm9jZXNzXG4gIGlzIHJlZG9uZSB1c2luZyB0aGUgbmV3IG9iamVjdC5cblxuKiBXaGVuIGFuIGluLXBsYWNlIG9wZXJhdG9yIChsaWtlIFwnYGArPWBgXCcpIGlzIHVzZWQsIGlmIHRoZSBsZWZ0XG4gIG9wZXJhbmQgaW1wbGVtZW50cyBgYF9faW9wX18oKWBgLCBpdCBpcyBpbnZva2VkIHdpdGhvdXQgYW55XG4gIGNvZXJjaW9uLiAgV2hlbiB0aGUgb3BlcmF0aW9uIGZhbGxzIGJhY2sgdG8gYGBfX29wX18oKWBgIGFuZC9vclxuICBgYF9fcm9wX18oKWBgLCB0aGUgbm9ybWFsIGNvZXJjaW9uIHJ1bGVzIGFwcGx5LlxuXG4qIEluIGBgeCArIHlgYCwgaWYgKngqIGlzIGEgc2VxdWVuY2UgdGhhdCBpbXBsZW1lbnRzIHNlcXVlbmNlXG4gIGNvbmNhdGVuYXRpb24sIHNlcXVlbmNlIGNvbmNhdGVuYXRpb24gaXMgaW52b2tlZC5cblxuKiBJbiBgYHggKiB5YGAsIGlmIG9uZSBvcGVyYXRvciBpcyBhIHNlcXVlbmNlIHRoYXQgaW1wbGVtZW50cyBzZXF1ZW5jZVxuICByZXBldGl0aW9uLCBhbmQgdGhlIG90aGVyIGlzIGFuIGludGVnZXIgKGBgaW50YGAgb3IgYGBsb25nYGApLFxuICBzZXF1ZW5jZSByZXBldGl0aW9uIGlzIGludm9rZWQuXG5cbiogUmljaCBjb21wYXJpc29ucyAoaW1wbGVtZW50ZWQgYnkgbWV0aG9kcyBgYF9fZXFfXygpYGAgYW5kIHNvIG9uKVxuICBuZXZlciB1c2UgY29lcmNpb24uICBUaHJlZS13YXkgY29tcGFyaXNvbiAoaW1wbGVtZW50ZWQgYnlcbiAgYGBfX2NtcF9fKClgYCkgZG9lcyB1c2UgY29lcmNpb24gdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBhcyBvdGhlclxuICBiaW5hcnkgb3BlcmF0aW9ucyB1c2UgaXQuXG5cbiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSBidWlsdC1pbiBudW1lcmljIHR5cGVzIGBgaW50YGAsXG4gIGBgbG9uZ2BgIGFuZCBgYGZsb2F0YGAgZG8gbm90IHVzZSBjb2VyY2lvbjsgdGhlIHR5cGUgYGBjb21wbGV4YGBcbiAgaG93ZXZlciBkb2VzIHVzZSBjb2VyY2lvbiBmb3IgYmluYXJ5IG9wZXJhdG9ycyBhbmQgcmljaCBjb21wYXJpc29ucyxcbiAgZGVzcGl0ZSB0aGUgYWJvdmUgcnVsZXMuICBUaGUgZGlmZmVyZW5jZSBjYW4gYmVjb21lIGFwcGFyZW50IHdoZW5cbiAgc3ViY2xhc3NpbmcgdGhlc2UgdHlwZXMuICBPdmVyIHRpbWUsIHRoZSB0eXBlIGBgY29tcGxleGBgIG1heSBiZVxuICBmaXhlZCB0byBhdm9pZCBjb2VyY2lvbi4gQWxsIHRoZXNlIHR5cGVzIGltcGxlbWVudCBhXG4gIGBgX19jb2VyY2VfXygpYGAgbWV0aG9kLCBmb3IgdXNlIGJ5IHRoZSBidWlsdC1pbiBgYGNvZXJjZSgpYGBcbiAgZnVuY3Rpb24uXG5cblxuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5OZXcgaW4gdmVyc2lvbiAyLjUuXG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhIGBgd2l0aGBgIHN0YXRlbWVudC4gVGhlIGNvbnRleHRcbm1hbmFnZXIgaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWVcbmNvbnRleHQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZVxubm9ybWFsbHkgaW52b2tlZCB1c2luZyB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvblxuKlRoZSB3aXRoIHN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpclxubWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgYGB3aXRoYGBcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgYGBhc2BgIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlIGBgTm9uZWBgLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCBgYF9fZXhpdF9fKClgYCBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwIGZvciBvbGQtc3R5bGUgY2xhc3Nlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5Gb3Igb2xkLXN0eWxlIGNsYXNzZXMsIHNwZWNpYWwgbWV0aG9kcyBhcmUgYWx3YXlzIGxvb2tlZCB1cCBpbiBleGFjdGx5XG50aGUgc2FtZSB3YXkgYXMgYW55IG90aGVyIG1ldGhvZCBvciBhdHRyaWJ1dGUuIFRoaXMgaXMgdGhlIGNhc2VcbnJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWV0aG9kIGlzIGJlaW5nIGxvb2tlZCB1cCBleHBsaWNpdGx5IGFzIGluXG5gYHguX19nZXRpdGVtX18oaSlgYCBvciBpbXBsaWNpdGx5IGFzIGluIGBgeFtpXWBgLlxuXG5UaGlzIGJlaGF2aW91ciBtZWFucyB0aGF0IHNwZWNpYWwgbWV0aG9kcyBtYXkgZXhoaWJpdCBkaWZmZXJlbnRcbmJlaGF2aW91ciBmb3IgZGlmZmVyZW50IGluc3RhbmNlcyBvZiBhIHNpbmdsZSBvbGQtc3R5bGUgY2xhc3MgaWYgdGhlXG5hcHByb3ByaWF0ZSBzcGVjaWFsIGF0dHJpYnV0ZXMgYXJlIHNldCBkaWZmZXJlbnRseTpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMxID0gQygpXG4gICA+Pj4gYzIgPSBDKClcbiAgID4+PiBjMS5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gYzIuX19sZW5fXyA9IGxhbWJkYTogOVxuICAgPj4+IGxlbihjMSlcbiAgIDVcbiAgID4+PiBsZW4oYzIpXG4gICA5XG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwIGZvciBuZXctc3R5bGUgY2xhc3Nlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5Gb3IgbmV3LXN0eWxlIGNsYXNzZXMsIGltcGxpY2l0IGludm9jYXRpb25zIG9mIHNwZWNpYWwgbWV0aG9kcyBhcmVcbm9ubHkgZ3VhcmFudGVlZCB0byB3b3JrIGNvcnJlY3RseSBpZiBkZWZpbmVkIG9uIGFuIG9iamVjdFwncyB0eXBlLCBub3RcbmluIHRoZSBvYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIFRoYXQgYmVoYXZpb3VyIGlzIHRoZSByZWFzb24gd2h5XG50aGUgZm9sbG93aW5nIGNvZGUgcmFpc2VzIGFuIGV4Y2VwdGlvbiAodW5saWtlIHRoZSBlcXVpdmFsZW50IGV4YW1wbGVcbndpdGggb2xkLXN0eWxlIGNsYXNzZXMpOlxuXG4gICA+Pj4gY2xhc3MgQyhvYmplY3QpOlxuICAgLi4uICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gbGVuKGMpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IG9iamVjdCBvZiB0eXBlIFwnQ1wnIGhhcyBubyBsZW4oKVxuXG5UaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGJlaGF2aW91ciBsaWVzIHdpdGggYSBudW1iZXIgb2Ygc3BlY2lhbFxubWV0aG9kcyBzdWNoIGFzIGBgX19oYXNoX18oKWBgIGFuZCBgYF9fcmVwcl9fKClgYCB0aGF0IGFyZSBpbXBsZW1lbnRlZFxuYnkgYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2ZcbnRoZXNlIG1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWxcbndoZW4gaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgZXZlbiBvZiB0aGUgb2JqZWN0XCdzIG1ldGFjbGFzczpcblxuICAgPj4+IGNsYXNzIE1ldGEodHlwZSk6XG4gICAuLi4gICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgIHByaW50ICJNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiXG4gICAuLi4gICAgICAgcmV0dXJuIHR5cGUuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGNsYXNzIEMob2JqZWN0KTpcbiAgIC4uLiAgICAgX19tZXRhY2xhc3NfXyA9IE1ldGFcbiAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gMTBcbiAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgICAgcHJpbnQgIkNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIlxuICAgLi4uICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXygpICAgICAgICAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgaW5zdGFuY2VcbiAgIENsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IHR5cGUoYykuX19sZW5fXyhjKSAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgdHlwZVxuICAgTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IGxlbihjKSAgICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IGxvb2t1cFxuICAgMTBcblxuQnlwYXNzaW5nIHRoZSBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb25cbnByb3ZpZGVzIHNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGVcbmludGVycHJldGVyLCBhdCB0aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZlxuc3BlY2lhbCBtZXRob2RzICh0aGUgc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0XG5pdHNlbGYgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLCB1bmRlclxuICAgIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZCBpZGVhXG4gICAgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWYgaXQgaXNcbiAgICBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgYGBfX2FkZF9fKClgYCkgZmFpbHMgdGhlIG9wZXJhdGlvbiBpc1xuICAgIG5vdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeSB0aGUgcmVmbGVjdGVkIG1ldGhvZCBpcyBub3QgY2FsbGVkLlxuJywKKyAnc3BlY2lhbGF0dHJzJzogdSJcblNwZWNpYWwgQXR0cmlidXRlc1xuKioqKioqKioqKioqKioqKioqXG5cblRoZSBpbXBsZW1lbnRhdGlvbiBhZGRzIGEgZmV3IHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgdG8gc2V2ZXJhbFxub2JqZWN0IHR5cGVzLCB3aGVyZSB0aGV5IGFyZSByZWxldmFudC4gIFNvbWUgb2YgdGhlc2UgYXJlIG5vdCByZXBvcnRlZFxuYnkgdGhlIGBgZGlyKClgYCBidWlsdC1pbiBmdW5jdGlvbi5cblxub2JqZWN0Ll9fZGljdF9fXG5cbiAgIEEgZGljdGlvbmFyeSBvciBvdGhlciBtYXBwaW5nIG9iamVjdCB1c2VkIHRvIHN0b3JlIGFuIG9iamVjdCdzXG4gICAod3JpdGFibGUpIGF0dHJpYnV0ZXMuXG5cbm9iamVjdC5fX21ldGhvZHNfX1xuXG4gICBEZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi4yOiBVc2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgZGlyKClgYFxuICAgdG8gZ2V0IGEgbGlzdCBvZiBhbiBvYmplY3QncyBhdHRyaWJ1dGVzLiBUaGlzIGF0dHJpYnV0ZSBpcyBub1xuICAgbG9uZ2VyIGF2YWlsYWJsZS5cblxub2JqZWN0Ll9fbWVtYmVyc19fXG5cbiAgIERlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjI6IFVzZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBkaXIoKWBgXG4gICB0byBnZXQgYSBsaXN0IG9mIGFuIG9iamVjdCdzIGF0dHJpYnV0ZXMuIFRoaXMgYXR0cmlidXRlIGlzIG5vXG4gICBsb25nZXIgYXZhaWxhYmxlLlxuXG5pbnN0YW5jZS5fX2NsYXNzX19cblxuICAgVGhlIGNsYXNzIHRvIHdoaWNoIGEgY2xhc3MgaW5zdGFuY2UgYmVsb25ncy5cblxuY2xhc3MuX19iYXNlc19fXG5cbiAgIFRoZSB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgb2YgYSBjbGFzcyBvYmplY3QuXG5cbmNsYXNzLl9fbmFtZV9fXG5cbiAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG5UaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGJ5ICpuZXctc3R5bGUgY2xhc3MqZXMuXG5cbmNsYXNzLl9fbXJvX19cblxuICAgVGhpcyBhdHRyaWJ1dGUgaXMgYSB0dXBsZSBvZiBjbGFzc2VzIHRoYXQgYXJlIGNvbnNpZGVyZWQgd2hlblxuICAgbG9va2luZyBmb3IgYmFzZSBjbGFzc2VzIGR1cmluZyBtZXRob2QgcmVzb2x1dGlvbi5cblxuY2xhc3MubXJvKClcblxuICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBtZXRhY2xhc3MgdG8gY3VzdG9taXplIHRoZVxuICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgZm9yIGl0cyBpbnN0YW5jZXMuICBJdCBpcyBjYWxsZWQgYXQgY2xhc3NcbiAgIGluc3RhbnRpYXRpb24sIGFuZCBpdHMgcmVzdWx0IGlzIHN0b3JlZCBpbiBgYF9fbXJvX19gYC5cblxuY2xhc3MuX19zdWJjbGFzc2VzX18oKVxuXG4gICBFYWNoIG5ldy1zdHlsZSBjbGFzcyBrZWVwcyBhIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIGl0c1xuICAgaW1tZWRpYXRlIHN1YmNsYXNzZXMuICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhvc2VcbiAgIHJlZmVyZW5jZXMgc3RpbGwgYWxpdmUuIEV4YW1wbGU6XG5cbiAgICAgID4+PiBpbnQuX19zdWJjbGFzc2VzX18oKVxuICAgICAgWzx0eXBlICdib29sJz5dXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGVzZSBzcGVjaWFsIG1ldGhvZHMgbWF5IGJlIGZvdW5kIGluXG4gICAgdGhlIFB5dGhvbiBSZWZlcmVuY2UgTWFudWFsICgqQmFzaWMgY3VzdG9taXphdGlvbiopLlxuXG5bMl0gQXMgYSBjb25zZXF1ZW5jZSwgdGhlIGxpc3QgYGBbMSwgMl1gYCBpcyBjb25zaWRlcmVkIGVxdWFsIHRvXG4gICAgYGBbMS4wLCAyLjBdYGAsIGFuZCBzaW1pbGFybHkgZm9yIHR1cGxlcy5cblxuWzNdIFRoZXkgbXVzdCBoYXZlIHNpbmNlIHRoZSBwYXJzZXIgY2FuJ3QgdGVsbCB0aGUgdHlwZSBvZiB0aGVcbiAgICBvcGVyYW5kcy5cblxuWzRdIFRvIGZvcm1hdCBvbmx5IGEgdHVwbGUgeW91IHNob3VsZCB0aGVyZWZvcmUgcHJvdmlkZSBhIHNpbmdsZXRvblxuICAgIHR1cGxlIHdob3NlIG9ubHkgZWxlbWVudCBpcyB0aGUgdHVwbGUgdG8gYmUgZm9ybWF0dGVkLlxuXG5bNV0gVGhlIGFkdmFudGFnZSBvZiBsZWF2aW5nIHRoZSBuZXdsaW5lIG9uIGlzIHRoYXQgcmV0dXJuaW5nIGFuIGVtcHR5XG4gICAgc3RyaW5nIGlzIHRoZW4gYW4gdW5hbWJpZ3VvdXMgRU9GIGluZGljYXRpb24uICBJdCBpcyBhbHNvIHBvc3NpYmxlXG4gICAgKGluIGNhc2VzIHdoZXJlIGl0IG1pZ2h0IG1hdHRlciwgZm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIG1ha2VcbiAgICBhbiBleGFjdCBjb3B5IG9mIGEgZmlsZSB3aGlsZSBzY2FubmluZyBpdHMgbGluZXMpIHRvIHRlbGwgd2hldGhlclxuICAgIHRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIGVuZGVkIGluIGEgbmV3bGluZSBvciBub3QgKHllcyB0aGlzXG4gICAgaGFwcGVucyEpLlxuIiwKKyAnc3BlY2lhbG5hbWVzJzogdSdcblNwZWNpYWwgbWV0aG9kIG5hbWVzXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGNhbiBpbXBsZW1lbnQgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIGludm9rZWQgYnkgc3BlY2lhbFxuc3ludGF4IChzdWNoIGFzIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBvciBzdWJzY3JpcHRpbmcgYW5kIHNsaWNpbmcpIGJ5XG5kZWZpbmluZyBtZXRob2RzIHdpdGggc3BlY2lhbCBuYW1lcy4gVGhpcyBpcyBQeXRob25cJ3MgYXBwcm9hY2ggdG9cbipvcGVyYXRvciBvdmVybG9hZGluZyosIGFsbG93aW5nIGNsYXNzZXMgdG8gZGVmaW5lIHRoZWlyIG93biBiZWhhdmlvclxud2l0aCByZXNwZWN0IHRvIGxhbmd1YWdlIG9wZXJhdG9ycy4gIEZvciBpbnN0YW5jZSwgaWYgYSBjbGFzcyBkZWZpbmVzXG5hIG1ldGhvZCBuYW1lZCBgYF9fZ2V0aXRlbV9fKClgYCwgYW5kIGBgeGBgIGlzIGFuIGluc3RhbmNlIG9mIHRoaXNcbmNsYXNzLCB0aGVuIGBgeFtpXWBgIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBgYHguX19nZXRpdGVtX18oaSlgYCBmb3Jcbm9sZC1zdHlsZSBjbGFzc2VzIGFuZCBgYHR5cGUoeCkuX19nZXRpdGVtX18oeCwgaSlgYCBmb3IgbmV3LXN0eWxlXG5jbGFzc2VzLiAgRXhjZXB0IHdoZXJlIG1lbnRpb25lZCwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBhbiBvcGVyYXRpb25cbnJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIG5vIGFwcHJvcHJpYXRlIG1ldGhvZCBpcyBkZWZpbmVkICh0eXBpY2FsbHlcbmBgQXR0cmlidXRlRXJyb3JgYCBvciBgYFR5cGVFcnJvcmBgKS5cblxuV2hlbiBpbXBsZW1lbnRpbmcgYSBjbGFzcyB0aGF0IGVtdWxhdGVzIGFueSBidWlsdC1pbiB0eXBlLCBpdCBpc1xuaW1wb3J0YW50IHRoYXQgdGhlIGVtdWxhdGlvbiBvbmx5IGJlIGltcGxlbWVudGVkIHRvIHRoZSBkZWdyZWUgdGhhdCBpdFxubWFrZXMgc2Vuc2UgZm9yIHRoZSBvYmplY3QgYmVpbmcgbW9kZWxsZWQuICBGb3IgZXhhbXBsZSwgc29tZVxuc2VxdWVuY2VzIG1heSB3b3JrIHdlbGwgd2l0aCByZXRyaWV2YWwgb2YgaW5kaXZpZHVhbCBlbGVtZW50cywgYnV0XG5leHRyYWN0aW5nIGEgc2xpY2UgbWF5IG5vdCBtYWtlIHNlbnNlLiAgKE9uZSBleGFtcGxlIG9mIHRoaXMgaXMgdGhlXG5gYE5vZGVMaXN0YGAgaW50ZXJmYWNlIGluIHRoZSBXM0NcJ3MgRG9jdW1lbnQgT2JqZWN0IE1vZGVsLilcblxuXG5CYXNpYyBjdXN0b21pemF0aW9uXG49PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICBgYF9fbmV3X18oKWBgIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mIGBgX19uZXdfXygpYGAgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5XG4gICBhbiBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIHVzaW5nXG4gICBgYHN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pYGAgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgIGBgX19pbml0X18oc2VsZlssIC4uLl0pYGAsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICBgYF9fbmV3X18oKWBgIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgIGBgX19pbml0X18oKWBgIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mXG4gICB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICBgYEJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pYGAuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludFxuICAgb24gY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgYGBUeXBlRXJyb3JgYCB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSBgYF9fZGVsX18oKWBgIG1ldGhvZCxcbiAgIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19kZWxfXygpYGAgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseVxuICAgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlXG4gICBpbnN0YW5jZS4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvclxuICAgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiBgYGRlbCB4YGAgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCBgYHguX19kZWxfXygpYGAgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBgYHhgYCBieSBvbmUsIGFuZCB0aGUgbGF0dGVyXG4gICAgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGB4YGBcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWVcbiAgICAgY29tbW9uIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuXG4gICAgIG9iamVjdCBmcm9tIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuXG4gICAgIG9iamVjdHMgKGUuZy4sIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoXG4gICAgIHBhcmVudCBhbmQgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZVxuICAgICBzdGFjayBmcmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFja1xuICAgICBzdG9yZWQgaW4gYGBzeXMuZXhjX3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yXG4gICAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuXG4gICAgIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW5cbiAgICAgYGBzeXMuZXhjX3RyYWNlYmFja2BgIG9yIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuICBDaXJjdWxhclxuICAgICByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGVcbiAgICAgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkXG4gICAgIHVwIGlmIHRoZXJlIGFyZSBubyBQeXRob24tbGV2ZWwgYGBfX2RlbF9fKClgYCBtZXRob2RzIGludm9sdmVkLlxuICAgICBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGBgZ2NgYCBtb2R1bGUgZm9yIG1vcmVcbiAgICAgaW5mb3JtYXRpb24gYWJvdXQgaG93IGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgaGFuZGxlZCBieSB0aGVcbiAgICAgY3ljbGUgZGV0ZWN0b3IsIHBhcnRpY3VsYXJseSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgXG4gICAgIHZhbHVlLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uXG4gICAgIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG8gYGBzeXMuc3RkZXJyYGAgaW5zdGVhZC5cbiAgICAgQWxzbywgd2hlbiBgYF9fZGVsX18oKWBgIGlzIGludm9rZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmdcbiAgICAgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gaXMgZG9uZSksIG90aGVyXG4gICAgIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZVxuICAgICBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duIChlLmcuIHRoZVxuICAgICBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXMgcmVhc29uLCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZCB0byBtYWludGFpblxuICAgICBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSwgUHl0aG9uXG4gICAgIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHJlcHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIGFuZCBieSBzdHJpbmdcbiAgIGNvbnZlcnNpb25zIChyZXZlcnNlIHF1b3RlcykgdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIiBzdHJpbmdcbiAgIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpcyBzaG91bGQgbG9va1xuICAgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0byByZWNyZWF0ZSBhblxuICAgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlIGVudmlyb25tZW50KS4gIElmXG4gICB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm0gYGA8Li4uc29tZSB1c2VmdWxcbiAgIGRlc2NyaXB0aW9uLi4uPmBgIHNob3VsZCBiZSByZXR1cm5lZC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgYGBfX3JlcHJfXygpYGAgYnV0IG5vdFxuICAgYGBfX3N0cl9fKClgYCwgdGhlbiBgYF9fcmVwcl9fKClgYCBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHN0cigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gYW5kIGJ5IHRoZSBgYHByaW50YGBcbiAgIHN0YXRlbWVudCB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiAgVGhpcyBkaWZmZXJzIGZyb20gYGBfX3JlcHJfXygpYGAgaW4gdGhhdCBpdCBkb2VzIG5vdCBoYXZlXG4gICB0byBiZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlXG4gICByZXByZXNlbnRhdGlvbiBtYXkgYmUgdXNlZCBpbnN0ZWFkLiBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYVxuICAgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjEuXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMsIGFuZCBhcmUgY2FsbGVkXG4gICBmb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgaW4gcHJlZmVyZW5jZSB0byBgYF9fY21wX18oKWBgIGJlbG93LiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBhbmRcbiAgIGBgeDw+eWBgIGNhbGwgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kXG4gICBgYHg+PXlgYCBjYWxscyBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgYGBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKWBgLlxuXG5vYmplY3QuX19jbXBfXyhzZWxmLCBvdGhlcilcblxuICAgQ2FsbGVkIGJ5IGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpZiByaWNoIGNvbXBhcmlzb24gKHNlZSBhYm92ZSkgaXNcbiAgIG5vdCBkZWZpbmVkLiAgU2hvdWxkIHJldHVybiBhIG5lZ2F0aXZlIGludGVnZXIgaWYgYGBzZWxmIDwgb3RoZXJgYCxcbiAgIHplcm8gaWYgYGBzZWxmID09IG90aGVyYGAsIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBgYHNlbGYgPiBvdGhlcmBgLlxuICAgSWYgbm8gYGBfX2NtcF9fKClgYCwgYGBfX2VxX18oKWBgIG9yIGBgX19uZV9fKClgYCBvcGVyYXRpb24gaXNcbiAgIGRlZmluZWQsIGNsYXNzIGluc3RhbmNlcyBhcmUgY29tcGFyZWQgYnkgb2JqZWN0IGlkZW50aXR5XG4gICAoImFkZHJlc3MiKS4gIFNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiBgYF9faGFzaF9fKClgYCBmb3Igc29tZVxuICAgaW1wb3J0YW50IG5vdGVzIG9uIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbVxuICAgY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy4gKE5vdGU6IHRoZVxuICAgcmVzdHJpY3Rpb24gdGhhdCBleGNlcHRpb25zIGFyZSBub3QgcHJvcGFnYXRlZCBieSBgYF9fY21wX18oKWBgIGhhc1xuICAgYmVlbiByZW1vdmVkIHNpbmNlIFB5dGhvbiAxLjUuKVxuXG5vYmplY3QuX19yY21wX18oc2VsZiwgb3RoZXIpXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjE6IE5vIGxvbmdlciBzdXBwb3J0ZWQuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gYGBoYXNoKClgYCBhbmQgZm9yIG9wZXJhdGlvbnMgb25cbiAgIG1lbWJlcnMgb2YgaGFzaGVkIGNvbGxlY3Rpb25zIGluY2x1ZGluZyBgYHNldGBgLCBgYGZyb3plbnNldGBgLCBhbmRcbiAgIGBgZGljdGBgLiAgYGBfX2hhc2hfXygpYGAgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyLiAgVGhlIG9ubHlcbiAgIHJlcXVpcmVkIHByb3BlcnR5IGlzIHRoYXQgb2JqZWN0cyB3aGljaCBjb21wYXJlIGVxdWFsIGhhdmUgdGhlIHNhbWVcbiAgIGhhc2ggdmFsdWU7IGl0IGlzIGFkdmlzZWQgdG8gc29tZWhvdyBtaXggdG9nZXRoZXIgKGUuZy4gdXNpbmdcbiAgIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2ggdmFsdWVzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgb2JqZWN0IHRoYXRcbiAgIGFsc28gcGxheSBhIHBhcnQgaW4gY29tcGFyaXNvbiBvZiBvYmplY3RzLlxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhIGBgX19jbXBfXygpYGAgb3IgYGBfX2VxX18oKWBgIG1ldGhvZFxuICAgaXQgc2hvdWxkIG5vdCBkZWZpbmUgYSBgYF9faGFzaF9fKClgYCBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdFxuICAgZGVmaW5lcyBgYF9fY21wX18oKWBgIG9yIGBgX19lcV9fKClgYCBidXQgbm90IGBgX19oYXNoX18oKWBgLCBpdHNcbiAgIGluc3RhbmNlcyB3aWxsIG5vdCBiZSB1c2FibGUgaW4gaGFzaGVkIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBtdXRhYmxlIG9iamVjdHMgYW5kIGltcGxlbWVudHMgYSBgYF9fY21wX18oKWBgIG9yXG4gICBgYF9fZXFfXygpYGAgbWV0aG9kLCBpdCBzaG91bGQgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2VcbiAgIGhhc2hhYmxlIGNvbGxlY3Rpb24gaW1wbGVtZW50YXRpb25zIHJlcXVpcmUgdGhhdCBhIG9iamVjdFwncyBoYXNoXG4gICB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZSBvYmplY3RcJ3MgaGFzaCB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlXG4gICBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlIGBgX19jbXBfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBgYGlkKHgpYGAuXG5cbiAgIENsYXNzZXMgd2hpY2ggaW5oZXJpdCBhIGBgX19oYXNoX18oKWBgIG1ldGhvZCBmcm9tIGEgcGFyZW50IGNsYXNzXG4gICBidXQgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIGBgX19jbXBfXygpYGAgb3IgYGBfX2VxX18oKWBgIHN1Y2ggdGhhdFxuICAgdGhlIGhhc2ggdmFsdWUgcmV0dXJuZWQgaXMgbm8gbG9uZ2VyIGFwcHJvcHJpYXRlIChlLmcuIGJ5IHN3aXRjaGluZ1xuICAgdG8gYSB2YWx1ZS1iYXNlZCBjb25jZXB0IG9mIGVxdWFsaXR5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHRcbiAgIGlkZW50aXR5IGJhc2VkIGVxdWFsaXR5KSBjYW4gZXhwbGljaXRseSBmbGFnIHRoZW1zZWx2ZXMgYXMgYmVpbmdcbiAgIHVuaGFzaGFibGUgYnkgc2V0dGluZyBgYF9faGFzaF9fID0gTm9uZWBgIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLlxuICAgRG9pbmcgc28gbWVhbnMgdGhhdCBub3Qgb25seSB3aWxsIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MgcmFpc2UgYW5cbiAgIGFwcHJvcHJpYXRlIGBgVHlwZUVycm9yYGAgd2hlbiBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXJcbiAgIGhhc2ggdmFsdWUsIGJ1dCB0aGV5IHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKWBgXG4gICAodW5saWtlIGNsYXNzZXMgd2hpY2ggZGVmaW5lIHRoZWlyIG93biBgYF9faGFzaF9fKClgYCB0byBleHBsaWNpdGx5XG4gICByYWlzZSBgYFR5cGVFcnJvcmBgKS5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNTogYGBfX2hhc2hfXygpYGAgbWF5IG5vdyBhbHNvIHJldHVybiBhIGxvbmdcbiAgIGludGVnZXIgb2JqZWN0OyB0aGUgMzItYml0IGludGVnZXIgaXMgdGhlbiBkZXJpdmVkIGZyb20gdGhlIGhhc2ggb2ZcbiAgIHRoYXQgb2JqZWN0LlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi42OiBgYF9faGFzaF9fYGAgbWF5IG5vdyBiZSBzZXQgdG8gYGBOb25lYGAgdG9cbiAgIGV4cGxpY2l0bHkgZmxhZyBpbnN0YW5jZXMgb2YgYSBjbGFzcyBhcyB1bmhhc2hhYmxlLlxuXG5vYmplY3QuX19ub256ZXJvX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICBgYGJvb2woKWBgOyBzaG91bGQgcmV0dXJuIGBgRmFsc2VgYCBvciBgYFRydWVgYCwgb3IgdGhlaXIgaW50ZWdlclxuICAgZXF1aXZhbGVudHMgYGAwYGAgb3IgYGAxYGAuICBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLFxuICAgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGUgb2JqZWN0IGlzXG4gICBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgYGBfX2xlbl9fKClgYCBub3IgYGBfX25vbnplcm9fXygpYGAsIGFsbCBpdHMgaW5zdGFuY2VzIGFyZVxuICAgY29uc2lkZXJlZCB0cnVlLlxuXG5vYmplY3QuX191bmljb2RlX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBgYHVuaWNvZGUoKWBgIGJ1aWx0LWluOyBzaG91bGQgcmV0dXJuIGEgVW5pY29kZVxuICAgb2JqZWN0LiBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLCBzdHJpbmcgY29udmVyc2lvbiBpc1xuICAgYXR0ZW1wdGVkLCBhbmQgdGhlIHJlc3VsdCBvZiBzdHJpbmcgY29udmVyc2lvbiBpcyBjb252ZXJ0ZWQgdG9cbiAgIFVuaWNvZGUgdXNpbmcgdGhlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nLlxuXG5cbkN1c3RvbWl6aW5nIGF0dHJpYnV0ZSBhY2Nlc3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGN1c3RvbWl6ZSB0aGUgbWVhbmluZyBvZlxuYXR0cmlidXRlIGFjY2VzcyAodXNlIG9mLCBhc3NpZ25tZW50IHRvLCBvciBkZWxldGlvbiBvZiBgYHgubmFtZWBgKVxuZm9yIGNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgYGBzZWxmYGApLiAgYGBuYW1lYGAgaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2VcbiAgIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICBgYF9fZ2V0YXR0cl9fKClgYCBpcyBub3QgY2FsbGVkLiAgKFRoaXMgaXMgYW4gaW50ZW50aW9uYWwgYXN5bW1ldHJ5XG4gICBiZXR3ZWVuIGBgX19nZXRhdHRyX18oKWBgIGFuZCBgYF9fc2V0YXR0cl9fKClgYC4pIFRoaXMgaXMgZG9uZSBib3RoXG4gICBmb3IgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSBgYF9fZ2V0YXR0cl9fKClgYFxuICAgd291bGQgaGF2ZSBubyB3YXkgdG8gYWNjZXNzIG90aGVyIGF0dHJpYnV0ZXMgb2YgdGhlIGluc3RhbmNlLiAgTm90ZVxuICAgdGhhdCBhdCBsZWFzdCBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLCB5b3UgY2FuIGZha2UgdG90YWwgY29udHJvbCBieVxuICAgbm90IGluc2VydGluZyBhbnkgdmFsdWVzIGluIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSAoYnV0XG4gICBpbnN0ZWFkIGluc2VydGluZyB0aGVtIGluIGFub3RoZXIgb2JqZWN0KS4gIFNlZSB0aGVcbiAgIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWV0aG9kIGJlbG93IGZvciBhIHdheSB0byBhY3R1YWxseSBnZXQgdG90YWxcbiAgIGNvbnRyb2wgaW4gbmV3LXN0eWxlIGNsYXNzZXMuXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmIGBgX19zZXRhdHRyX18oKWBgIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgbm90IHNpbXBseSBleGVjdXRlIGBgc2VsZi5uYW1lID0gdmFsdWVgYCAtLS0gdGhpcyB3b3VsZFxuICAgY2F1c2UgYSByZWN1cnNpdmUgY2FsbCB0byBpdHNlbGYuICBJbnN0ZWFkLCBpdCBzaG91bGQgaW5zZXJ0IHRoZVxuICAgdmFsdWUgaW4gdGhlIGRpY3Rpb25hcnkgb2YgaW5zdGFuY2UgYXR0cmlidXRlcywgZS5nLixcbiAgIGBgc2VsZi5fX2RpY3RfX1tuYW1lXSA9IHZhbHVlYGAuICBGb3IgbmV3LXN0eWxlIGNsYXNzZXMsIHJhdGhlclxuICAgdGhhbiBhY2Nlc3NpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnksIGl0IHNob3VsZCBjYWxsIHRoZSBiYXNlXG4gICBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgIGBgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKWBgLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSBgYF9fc2V0YXR0cl9fKClgYCBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiBgYGRlbCBvYmoubmFtZWBgIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5cbk1vcmUgYXR0cmlidXRlIGFjY2VzcyBmb3IgbmV3LXN0eWxlIGNsYXNzZXNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgdG8gbmV3LXN0eWxlIGNsYXNzZXMuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXNcbiAgIGBgX19nZXRhdHRyX18oKWBgLCB0aGUgbGF0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3NcbiAgIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgZWl0aGVyIGNhbGxzIGl0IGV4cGxpY2l0bHkgb3IgcmFpc2VzIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAuIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZClcbiAgIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLiBJbiBvcmRlclxuICAgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluIHRoaXMgbWV0aG9kLCBpdHMgaW1wbGVtZW50YXRpb25cbiAgIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIHRvXG4gICBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvciBleGFtcGxlLFxuICAgYGBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKWBgLlxuXG4gICBOb3RlOiBUaGlzIG1ldGhvZCBtYXkgc3RpbGwgYmUgYnlwYXNzZWQgd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kc1xuICAgICBhcyB0aGUgcmVzdWx0IG9mIGltcGxpY2l0IGludm9jYXRpb24gdmlhIGxhbmd1YWdlIHN5bnRheCBvclxuICAgICBidWlsdC1pbiBmdW5jdGlvbnMuIFNlZSAqU3BlY2lhbCBtZXRob2QgbG9va3VwIGZvciBuZXctc3R5bGVcbiAgICAgY2xhc3NlcyouXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIHRoZVxuY2xhc3MgZGljdGlvbmFyeSBvZiBhbm90aGVyIG5ldy1zdHlsZSBjbGFzcywga25vd24gYXMgdGhlICpvd25lcipcbmNsYXNzLiBJbiB0aGUgZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZVxud2hvc2UgbmFtZSBpcyB0aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJ1xuYGBfX2RpY3RfX2BgLiAgRGVzY3JpcHRvcnMgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgYXMgbmV3LXN0eWxlXG5jbGFzc2VzIHRoZW1zZWx2ZXMuXG5cbm9iamVjdC5fX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcilcblxuICAgQ2FsbGVkIHRvIGdldCB0aGUgYXR0cmlidXRlIG9mIHRoZSBvd25lciBjbGFzcyAoY2xhc3MgYXR0cmlidXRlXG4gICBhY2Nlc3MpIG9yIG9mIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgKGluc3RhbmNlIGF0dHJpYnV0ZVxuICAgYWNjZXNzKS4gKm93bmVyKiBpcyBhbHdheXMgdGhlIG93bmVyIGNsYXNzLCB3aGlsZSAqaW5zdGFuY2UqIGlzIHRoZVxuICAgaW5zdGFuY2UgdGhhdCB0aGUgYXR0cmlidXRlIHdhcyBhY2Nlc3NlZCB0aHJvdWdoLCBvciBgYE5vbmVgYCB3aGVuXG4gICB0aGUgYXR0cmlidXRlIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlICpvd25lciouICBUaGlzIG1ldGhvZCBzaG91bGRcbiAgIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblxuSW52b2tpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkluIGdlbmVyYWwsIGEgZGVzY3JpcHRvciBpcyBhbiBvYmplY3QgYXR0cmlidXRlIHdpdGggImJpbmRpbmdcbmJlaGF2aW9yIiwgb25lIHdob3NlIGF0dHJpYnV0ZSBhY2Nlc3MgaGFzIGJlZW4gb3ZlcnJpZGRlbiBieSBtZXRob2RzXG5pbiB0aGUgZGVzY3JpcHRvciBwcm90b2NvbDogIGBgX19nZXRfXygpYGAsIGBgX19zZXRfXygpYGAsIGFuZFxuYGBfX2RlbGV0ZV9fKClgYC4gSWYgYW55IG9mIHRob3NlIG1ldGhvZHMgYXJlIGRlZmluZWQgZm9yIGFuIG9iamVjdCxcbml0IGlzIHNhaWQgdG8gYmUgYSBkZXNjcmlwdG9yLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYXR0cmlidXRlIGFjY2VzcyBpcyB0byBnZXQsIHNldCwgb3IgZGVsZXRlXG50aGUgYXR0cmlidXRlIGZyb20gYW4gb2JqZWN0XCdzIGRpY3Rpb25hcnkuIEZvciBpbnN0YW5jZSwgYGBhLnhgYCBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggYGBhLl9fZGljdF9fW1wneFwnXWBgLCB0aGVuXG5gYHR5cGUoYSkuX19kaWN0X19bXCd4XCddYGAsIGFuZCBjb250aW51aW5nIHRocm91Z2ggdGhlIGJhc2UgY2xhc3NlcyBvZlxuYGB0eXBlKGEpYGAgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC4gIE5vdGUgdGhhdCBkZXNjcmlwdG9ycyBhcmUgb25seSBpbnZva2VkIGZvciBuZXdcbnN0eWxlIG9iamVjdHMgb3IgY2xhc3NlcyAob25lcyB0aGF0IHN1YmNsYXNzIGBgb2JqZWN0KClgYCBvclxuYGB0eXBlKClgYCkuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgYGBhLnhgYC5cbkhvdyB0aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiBgYGFgYDpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgYGB4Ll9fZ2V0X18oYSlgYC5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIG5ldy1zdHlsZSBvYmplY3QgaW5zdGFuY2UsIGBgYS54YGAgaXMgdHJhbnNmb3JtZWRcbiAgIGludG8gdGhlIGNhbGw6IGBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKWBgLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgbmV3LXN0eWxlIGNsYXNzLCBgYEEueGBgIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlXG4gICBjYWxsOiBgYEEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSlgYC5cblxuU3VwZXIgQmluZGluZ1xuICAgSWYgYGBhYGAgaXMgYW4gaW5zdGFuY2Ugb2YgYGBzdXBlcmBgLCB0aGVuIHRoZSBiaW5kaW5nIGBgc3VwZXIoQixcbiAgIG9iaikubSgpYGAgc2VhcmNoZXMgYGBvYmouX19jbGFzc19fLl9fbXJvX19gYCBmb3IgdGhlIGJhc2UgY2xhc3NcbiAgIGBgQWBgIGltbWVkaWF0ZWx5IHByZWNlZGluZyBgYEJgYCBhbmQgdGhlbiBpbnZva2VzIHRoZSBkZXNjcmlwdG9yXG4gICB3aXRoIHRoZSBjYWxsOiBgYEEuX19kaWN0X19bXCdtXCddLl9fZ2V0X18ob2JqLCBBKWBgLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgIGFuZCBgYF9fZGVsZXRlX18oKWBgLlxuSWYgaXQgZG9lcyBub3QgZGVmaW5lIGBgX19nZXRfXygpYGAsIHRoZW4gYWNjZXNzaW5nIHRoZSBhdHRyaWJ1dGUgd2lsbFxucmV0dXJuIHRoZSBkZXNjcmlwdG9yIG9iamVjdCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlXG5vYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIElmIHRoZSBkZXNjcmlwdG9yIGRlZmluZXMgYGBfX3NldF9fKClgYFxuYW5kL29yIGBgX19kZWxldGVfXygpYGAsIGl0IGlzIGEgZGF0YSBkZXNjcmlwdG9yOyBpZiBpdCBkZWZpbmVzXG5uZWl0aGVyLCBpdCBpcyBhIG5vbi1kYXRhIGRlc2NyaXB0b3IuICBOb3JtYWxseSwgZGF0YSBkZXNjcmlwdG9yc1xuZGVmaW5lIGJvdGggYGBfX2dldF9fKClgYCBhbmQgYGBfX3NldF9fKClgYCwgd2hpbGUgbm9uLWRhdGFcbmRlc2NyaXB0b3JzIGhhdmUganVzdCB0aGUgYGBfX2dldF9fKClgYCBtZXRob2QuICBEYXRhIGRlc2NyaXB0b3JzIHdpdGhcbmBgX19zZXRfXygpYGAgYW5kIGBgX19nZXRfXygpYGAgZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb25cbmluIGFuIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJbiBjb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlXG5vdmVycmlkZGVuIGJ5IGluc3RhbmNlcy5cblxuUHl0aG9uIG1ldGhvZHMgKGluY2x1ZGluZyBgYHN0YXRpY21ldGhvZCgpYGAgYW5kIGBgY2xhc3NtZXRob2QoKWBgKVxuYXJlIGltcGxlbWVudGVkIGFzIG5vbi1kYXRhIGRlc2NyaXB0b3JzLiAgQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5cbnJlZGVmaW5lIGFuZCBvdmVycmlkZSBtZXRob2RzLiAgVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBpbnN0YW5jZXMgdG9cbmFjcXVpcmUgYmVoYXZpb3JzIHRoYXQgZGlmZmVyIGZyb20gb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLlxuXG5UaGUgYGBwcm9wZXJ0eSgpYGAgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBkYXRhIGRlc2NyaXB0b3IuXG5BY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhbm5vdCBvdmVycmlkZSB0aGUgYmVoYXZpb3Igb2YgYSBwcm9wZXJ0eS5cblxuXG5fX3Nsb3RzX19cbi0tLS0tLS0tLVxuXG5CeSBkZWZhdWx0LCBpbnN0YW5jZXMgb2YgYm90aCBvbGQgYW5kIG5ldy1zdHlsZSBjbGFzc2VzIGhhdmUgYVxuZGljdGlvbmFyeSBmb3IgYXR0cmlidXRlIHN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0c1xuaGF2aW5nIHZlcnkgZmV3IGluc3RhbmNlIHZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lXG5hY3V0ZSB3aGVuIGNyZWF0aW5nIGxhcmdlIG51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIG5ldy1zdHlsZVxuY2xhc3MgZGVmaW5pdGlvbi4gIFRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB0YWtlcyBhIHNlcXVlbmNlIG9mXG5pbnN0YW5jZSB2YXJpYWJsZXMgYW5kIHJlc2VydmVzIGp1c3QgZW5vdWdoIHNwYWNlIGluIGVhY2ggaW5zdGFuY2UgdG9cbmhvbGQgYSB2YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gIFNwYWNlIGlzIHNhdmVkIGJlY2F1c2UgKl9fZGljdF9fKiBpc1xubm90IGNyZWF0ZWQgZm9yIGVhY2ggaW5zdGFuY2UuXG5cbl9fc2xvdHNfX1xuXG4gICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlXG4gICBvZiBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICBJZiBkZWZpbmVkIGluIGFcbiAgIG5ldy1zdHlsZSBjbGFzcywgKl9fc2xvdHNfXyogcmVzZXJ2ZXMgc3BhY2UgZm9yIHRoZSBkZWNsYXJlZFxuICAgdmFyaWFibGVzIGFuZCBwcmV2ZW50cyB0aGUgYXV0b21hdGljIGNyZWF0aW9uIG9mICpfX2RpY3RfXyogYW5kXG4gICAqX193ZWFrcmVmX18qIGZvciBlYWNoIGluc3RhbmNlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbk5vdGVzIG9uIHVzaW5nICpfX3Nsb3RzX18qXG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyBgYEF0dHJpYnV0ZUVycm9yYGAuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gIGBgXCdfX2RpY3RfX1wnYGAgdG8gdGhlIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qXG4gIGRlY2xhcmF0aW9uLlxuXG4gIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksIGFkZGluZyBgYFwnX19kaWN0X19cJ2BgIHRvIHRoZVxuICAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB3b3VsZCBub3QgZW5hYmxlIHRoZSBhc3NpZ25tZW50IG9mIG5ld1xuICBhdHRyaWJ1dGVzIG5vdCBzcGVjaWZpY2FsbHkgbGlzdGVkIGluIHRoZSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxuICB2YXJpYWJsZSBuYW1lcy5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3NlcyBkZWZpbmluZ1xuICAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGluc3RhbmNlcy4gSWYgd2Vha1xuICByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkIGBgXCdfX3dlYWtyZWZfX1wnYGAgdG8gdGhlXG4gIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uLlxuXG4gIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksIGFkZGluZyBgYFwnX193ZWFrcmVmX19cJ2BgIHRvIHRoZVxuICAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB3b3VsZCBub3QgZW5hYmxlIHN1cHBvcnQgZm9yIHdlYWtcbiAgcmVmZXJlbmNlcy5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlIGluc3RhbmNlXG4gIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGUgKGV4Y2VwdCBieVxuICByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLiBUaGlzXG4gIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgYGBsb25nYGAsIGBgc3RyYGAgYW5kXG4gIGBgdHVwbGVgYC5cblxuKiBBbnkgbm9uLXN0cmluZyBpdGVyYWJsZSBtYXkgYmUgYXNzaWduZWQgdG8gKl9fc2xvdHNfXyouIE1hcHBpbmdzIG1heVxuICBhbHNvIGJlIHVzZWQ7IGhvd2V2ZXIsIGluIHRoZSBmdXR1cmUsIHNwZWNpYWwgbWVhbmluZyBtYXkgYmVcbiAgYXNzaWduZWQgdG8gdGhlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gga2V5LlxuXG4qICpfX2NsYXNzX18qIGFzc2lnbm1lbnQgd29ya3Mgb25seSBpZiBib3RoIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZVxuICAqX19zbG90c19fKi5cblxuICBDaGFuZ2VkIGluIHZlcnNpb24gMi42OiBQcmV2aW91c2x5LCAqX19jbGFzc19fKiBhc3NpZ25tZW50IHJhaXNlZCBhblxuICBlcnJvciBpZiBlaXRoZXIgbmV3IG9yIG9sZCBjbGFzcyBoYWQgKl9fc2xvdHNfXyouXG5cblxuQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb25cbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkJ5IGRlZmF1bHQsIG5ldy1zdHlsZSBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyBgYHR5cGUoKWBgLiBBXG5jbGFzcyBkZWZpbml0aW9uIGlzIHJlYWQgaW50byBhIHNlcGFyYXRlIG5hbWVzcGFjZSBhbmQgdGhlIHZhbHVlIG9mXG5jbGFzcyBuYW1lIGlzIGJvdW5kIHRvIHRoZSByZXN1bHQgb2YgYGB0eXBlKG5hbWUsIGJhc2VzLCBkaWN0KWBgLlxuXG5XaGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIGlzIHJlYWQsIGlmICpfX21ldGFjbGFzc19fKiBpcyBkZWZpbmVkIHRoZW5cbnRoZSBjYWxsYWJsZSBhc3NpZ25lZCB0byBpdCB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIGBgdHlwZSgpYGAuIFRoaXNcbmFsbG93cyBjbGFzc2VzIG9yIGZ1bmN0aW9ucyB0byBiZSB3cml0dGVuIHdoaWNoIG1vbml0b3Igb3IgYWx0ZXIgdGhlXG5jbGFzcyBjcmVhdGlvbiBwcm9jZXNzOlxuXG4qIE1vZGlmeWluZyB0aGUgY2xhc3MgZGljdGlvbmFyeSBwcmlvciB0byB0aGUgY2xhc3MgYmVpbmcgY3JlYXRlZC5cblxuKiBSZXR1cm5pbmcgYW4gaW5zdGFuY2Ugb2YgYW5vdGhlciBjbGFzcyAtLSBlc3NlbnRpYWxseSBwZXJmb3JtaW5nIHRoZVxuICByb2xlIG9mIGEgZmFjdG9yeSBmdW5jdGlvbi5cblxuVGhlc2Ugc3RlcHMgd2lsbCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGUgbWV0YWNsYXNzXCdzIGBgX19uZXdfXygpYGBcbm1ldGhvZCAtLSBgYHR5cGUuX19uZXdfXygpYGAgY2FuIHRoZW4gYmUgY2FsbGVkIGZyb20gdGhpcyBtZXRob2QgdG9cbmNyZWF0ZSBhIGNsYXNzIHdpdGggZGlmZmVyZW50IHByb3BlcnRpZXMuICBUaGlzIGV4YW1wbGUgYWRkcyBhIG5ld1xuZWxlbWVudCB0byB0aGUgY2xhc3MgZGljdGlvbmFyeSBiZWZvcmUgY3JlYXRpbmcgdGhlIGNsYXNzOlxuXG4gICBjbGFzcyBtZXRhY2xzKHR5cGUpOlxuICAgICAgIGRlZiBfX25ld19fKG1jcywgbmFtZSwgYmFzZXMsIGRpY3QpOlxuICAgICAgICAgICBkaWN0W1wnZm9vXCddID0gXCdtZXRhY2xzIHdhcyBoZXJlXCdcbiAgICAgICAgICAgcmV0dXJuIHR5cGUuX19uZXdfXyhtY3MsIG5hbWUsIGJhc2VzLCBkaWN0KVxuXG5Zb3UgY2FuIG9mIGNvdXJzZSBhbHNvIG92ZXJyaWRlIG90aGVyIGNsYXNzIG1ldGhvZHMgKG9yIGFkZCBuZXdcbm1ldGhvZHMpOyBmb3IgZXhhbXBsZSBkZWZpbmluZyBhIGN1c3RvbSBgYF9fY2FsbF9fKClgYCBtZXRob2QgaW4gdGhlXG5tZXRhY2xhc3MgYWxsb3dzIGN1c3RvbSBiZWhhdmlvciB3aGVuIHRoZSBjbGFzcyBpcyBjYWxsZWQsIGUuZy4gbm90XG5hbHdheXMgY3JlYXRpbmcgYSBuZXcgaW5zdGFuY2UuXG5cbl9fbWV0YWNsYXNzX19cblxuICAgVGhpcyB2YXJpYWJsZSBjYW4gYmUgYW55IGNhbGxhYmxlIGFjY2VwdGluZyBhcmd1bWVudHMgZm9yIGBgbmFtZWBgLFxuICAgYGBiYXNlc2BgLCBhbmQgYGBkaWN0YGAuICBVcG9uIGNsYXNzIGNyZWF0aW9uLCB0aGUgY2FsbGFibGUgaXMgdXNlZFxuICAgaW5zdGVhZCBvZiB0aGUgYnVpbHQtaW4gYGB0eXBlKClgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG5UaGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBwcmVjZWRlbmNlXG5ydWxlczpcblxuKiBJZiBgYGRpY3RbXCdfX21ldGFjbGFzc19fXCddYGAgZXhpc3RzLCBpdCBpcyB1c2VkLlxuXG4qIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGJhc2UgY2xhc3MsIGl0cyBtZXRhY2xhc3MgaXNcbiAgdXNlZCAodGhpcyBsb29rcyBmb3IgYSAqX19jbGFzc19fKiBhdHRyaWJ1dGUgZmlyc3QgYW5kIGlmIG5vdCBmb3VuZCxcbiAgdXNlcyBpdHMgdHlwZSkuXG5cbiogT3RoZXJ3aXNlLCBpZiBhIGdsb2JhbCB2YXJpYWJsZSBuYW1lZCBfX21ldGFjbGFzc19fIGV4aXN0cywgaXQgaXNcbiAgdXNlZC5cblxuKiBPdGhlcndpc2UsIHRoZSBvbGQtc3R5bGUsIGNsYXNzaWMgbWV0YWNsYXNzICh0eXBlcy5DbGFzc1R5cGUpIGlzXG4gIHVzZWQuXG5cblRoZSBwb3RlbnRpYWwgdXNlcyBmb3IgbWV0YWNsYXNzZXMgYXJlIGJvdW5kbGVzcy4gU29tZSBpZGVhcyB0aGF0IGhhdmVcbmJlZW4gZXhwbG9yZWQgaW5jbHVkaW5nIGxvZ2dpbmcsIGludGVyZmFjZSBjaGVja2luZywgYXV0b21hdGljXG5kZWxlZ2F0aW9uLCBhdXRvbWF0aWMgcHJvcGVydHkgY3JlYXRpb24sIHByb3hpZXMsIGZyYW1ld29ya3MsIGFuZFxuYXV0b21hdGljIHJlc291cmNlIGxvY2tpbmcvc3luY2hyb25pemF0aW9uLlxuXG5cbkN1c3RvbWl6aW5nIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuTmV3IGluIHZlcnNpb24gMi42LlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG5gYGlzaW5zdGFuY2UoKWBgIGFuZCBgYGlzc3ViY2xhc3MoKWBgIGJ1aWx0LWluIGZ1bmN0aW9ucy5cblxuSW4gcGFydGljdWxhciwgdGhlIG1ldGFjbGFzcyBgYGFiYy5BQkNNZXRhYGAgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzXG5pbiBvcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGluY2x1ZGluZyBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICBgYGlzaW5zdGFuY2UoaW5zdGFuY2UsIGNsYXNzKWBgLlxuXG5jbGFzcy5fX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBzdWJjbGFzcylcblxuICAgUmV0dXJuIHRydWUgaWYgKnN1YmNsYXNzKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBzdWJjbGFzcyBvZiAqY2xhc3MqLiAgSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcylgYC5cblxuTm90ZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgdHlwZSAobWV0YWNsYXNzKSBvZiBhXG5jbGFzcy4gIFRoZXkgY2Fubm90IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcyBpbiB0aGUgYWN0dWFsIGNsYXNzLlxuVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkXG5vbiBpbnN0YW5jZXMsIG9ubHkgaW4gdGhpcyBjYXNlIHRoZSBpbnN0YW5jZSBpcyBpdHNlbGYgYSBjbGFzcy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTkqKiAtIEludHJvZHVjaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3Nlc1xuICAgICAgSW5jbHVkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbWl6aW5nIGBgaXNpbnN0YW5jZSgpYGAgYW5kXG4gICAgICBgYGlzc3ViY2xhc3MoKWBgIGJlaGF2aW9yIHRocm91Z2ggYGBfX2luc3RhbmNlY2hlY2tfXygpYGAgYW5kXG4gICAgICBgYF9fc3ViY2xhc3NjaGVja19fKClgYCwgd2l0aCBtb3RpdmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGluIHRoZSBjb250ZXh0IG9mIGFkZGluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKHNlZSB0aGUgYGBhYmNgYFxuICAgICAgbW9kdWxlKSB0byB0aGUgbGFuZ3VhZ2UuXG5cblxuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgYGB4KGFyZzEsIGFyZzIsIC4uLilgYCBpcyBhIHNob3J0aGFuZCBmb3JcbiAgIGBgeC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pYGAuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuIChGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSBtZXRob2RcbmBgX19nZXRzbGljZV9fKClgYCAoc2VlIGJlbG93KSBjYW4gYWxzbyBiZSBkZWZpbmVkIHRvIGhhbmRsZSBzaW1wbGUsXG5idXQgbm90IGV4dGVuZGVkIHNsaWNlcy4pIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlXG50aGUgbWV0aG9kcyBgYGtleXMoKWBgLCBgYHZhbHVlcygpYGAsIGBgaXRlbXMoKWBgLCBgYGhhc19rZXkoKWBgLFxuYGBnZXQoKWBgLCBgYGNsZWFyKClgYCwgYGBzZXRkZWZhdWx0KClgYCwgYGBpdGVya2V5cygpYGAsXG5gYGl0ZXJ2YWx1ZXMoKWBgLCBgYGl0ZXJpdGVtcygpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCxcbmBgY29weSgpYGAsIGFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzXG5zdGFuZGFyZCBkaWN0aW9uYXJ5IG9iamVjdHMuICBUaGUgYGBVc2VyRGljdGBgIG1vZHVsZSBwcm92aWRlcyBhXG5gYERpY3RNaXhpbmBgIGNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHMgZnJvbSBhIGJhc2Ugc2V0IG9mXG5gYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAsIGBgX19kZWxpdGVtX18oKWBgLCBhbmRcbmBga2V5cygpYGAuIE11dGFibGUgc2VxdWVuY2VzIHNob3VsZCBwcm92aWRlIG1ldGhvZHMgYGBhcHBlbmQoKWBgLFxuYGBjb3VudCgpYGAsIGBgaW5kZXgoKWBgLCBgYGV4dGVuZCgpYGAsIGBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLFxuYGByZW1vdmUoKWBgLCBgYHJldmVyc2UoKWBgIGFuZCBgYHNvcnQoKWBgLCBsaWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0XG5vYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkIGltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZ1xuY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nIHJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZVxubWV0aG9kcyBgYF9fYWRkX18oKWBgLCBgYF9fcmFkZF9fKClgYCwgYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsXG5gYF9fcm11bF9fKClgYCBhbmQgYGBfX2ltdWxfXygpYGAgZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3RcbmRlZmluZSBgYF9fY29lcmNlX18oKWBgIG9yIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdCBpc1xucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgYmUgZXF1aXZhbGVudCBvZiBgYGhhc19rZXkoKWBgO1xuZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9faXRlcl9fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZVxuY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsIGBgX19pdGVyX18oKWBgIHNob3VsZCBiZSB0aGUgc2FtZSBhc1xuYGBpdGVya2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuXCd0IGRlZmluZSBhIGBgX19ub256ZXJvX18oKWBgIG1ldGhvZCBhbmQgd2hvc2VcbiAgIGBgX19sZW5fXygpYGAgbWV0aG9kIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dC5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mIGBgc2VsZltrZXldYGAuIEZvciBzZXF1ZW5jZVxuICAgdHlwZXMsIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy5cbiAgIE5vdGUgdGhhdCB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGVcbiAgIGNsYXNzIHdpc2hlcyB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlXG4gICBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuIElmICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSxcbiAgIGBgVHlwZUVycm9yYGAgbWF5IGJlIHJhaXNlZDsgaWYgb2YgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2ZcbiAgIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55IHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2ZcbiAgIG5lZ2F0aXZlIHZhbHVlcyksIGBgSW5kZXhFcnJvcmBgIHNob3VsZCBiZSByYWlzZWQuIEZvciBtYXBwaW5nXG4gICB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZSBjb250YWluZXIpLCBgYEtleUVycm9yYGBcbiAgIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6IGBgZm9yYGAgbG9vcHMgZXhwZWN0IHRoYXQgYW4gYGBJbmRleEVycm9yYGAgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSBgYF9fZ2V0aXRlbV9fKClgYFxuICAgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHNob3VsZCBhbHNvIGJlIG1hZGVcbiAgIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kIGBgaXRlcmtleXMoKWBgLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgYGBfX3JldmVyc2VkX18oKWBgIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZVxuICAgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlXG4gICBwcm90b2NvbCAoYGBfX2xlbl9fKClgYCBhbmQgYGBfX2dldGl0ZW1fXygpYGApLiAgT2JqZWN0cyB0aGF0XG4gICBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbCBzaG91bGQgb25seSBwcm92aWRlXG4gICBgYF9fcmV2ZXJzZWRfXygpYGAgaWYgdGhleSBjYW4gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzXG4gICBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnkgYGByZXZlcnNlZCgpYGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNi5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKGBgaW5gYCBhbmQgYGBub3QgaW5gYCkgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCwgdGhlIG1lbWJlcnNoaXBcbiAgIHRlc3QgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSBgYF9faXRlcl9fKClgYCwgdGhlbiB0aGUgb2xkXG4gICBzZXF1ZW5jZSBpdGVyYXRpb24gcHJvdG9jb2wgdmlhIGBgX19nZXRpdGVtX18oKWBgLCBzZWUgKnRoaXNcbiAgIHNlY3Rpb24gaW4gdGhlIGxhbmd1YWdlIHJlZmVyZW5jZSouXG5cblxuQWRkaXRpb25hbCBtZXRob2RzIGZvciBlbXVsYXRpb24gb2Ygc2VxdWVuY2UgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBmdXJ0aGVyIGVtdWxhdGVcbnNlcXVlbmNlIG9iamVjdHMuICBJbW11dGFibGUgc2VxdWVuY2VzIG1ldGhvZHMgc2hvdWxkIGF0IG1vc3Qgb25seVxuZGVmaW5lIGBgX19nZXRzbGljZV9fKClgYDsgbXV0YWJsZSBzZXF1ZW5jZXMgbWlnaHQgZGVmaW5lIGFsbCB0aHJlZVxubWV0aG9kcy5cblxub2JqZWN0Ll9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKVxuXG4gICBEZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi4wOiBTdXBwb3J0IHNsaWNlIG9iamVjdHMgYXMgcGFyYW1ldGVyc1xuICAgdG8gdGhlIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gKEhvd2V2ZXIsIGJ1aWx0LWluIHR5cGVzIGluXG4gICBDUHl0aG9uIGN1cnJlbnRseSBzdGlsbCBpbXBsZW1lbnQgYGBfX2dldHNsaWNlX18oKWBgLiAgVGhlcmVmb3JlLFxuICAgeW91IGhhdmUgdG8gb3ZlcnJpZGUgaXQgaW4gZGVyaXZlZCBjbGFzc2VzIHdoZW4gaW1wbGVtZW50aW5nXG4gICBzbGljaW5nLilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mIGBgc2VsZltpOmpdYGAuIFRoZSByZXR1cm5lZFxuICAgb2JqZWN0IHNob3VsZCBiZSBvZiB0aGUgc2FtZSB0eXBlIGFzICpzZWxmKi4gIE5vdGUgdGhhdCBtaXNzaW5nICppKlxuICAgb3IgKmoqIGluIHRoZSBzbGljZSBleHByZXNzaW9uIGFyZSByZXBsYWNlZCBieSB6ZXJvIG9yXG4gICBgYHN5cy5tYXhpbnRgYCwgcmVzcGVjdGl2ZWx5LiAgSWYgbmVnYXRpdmUgaW5kZXhlcyBhcmUgdXNlZCBpbiB0aGVcbiAgIHNsaWNlLCB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSBpcyBhZGRlZCB0byB0aGF0IGluZGV4LiBJZiB0aGVcbiAgIGluc3RhbmNlIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBfX2xlbl9fKClgYCBtZXRob2QsIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAgaXMgcmFpc2VkLiBObyBndWFyYW50ZWUgaXMgbWFkZSB0aGF0IGluZGV4ZXNcbiAgIGFkanVzdGVkIHRoaXMgd2F5IGFyZSBub3Qgc3RpbGwgbmVnYXRpdmUuICBJbmRleGVzIHdoaWNoIGFyZVxuICAgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIGFyZSBub3QgbW9kaWZpZWQuIElmIG5vXG4gICBgYF9fZ2V0c2xpY2VfXygpYGAgaXMgZm91bmQsIGEgc2xpY2Ugb2JqZWN0IGlzIGNyZWF0ZWQgaW5zdGVhZCwgYW5kXG4gICBwYXNzZWQgdG8gYGBfX2dldGl0ZW1fXygpYGAgaW5zdGVhZC5cblxub2JqZWN0Ll9fc2V0c2xpY2VfXyhzZWxmLCBpLCBqLCBzZXF1ZW5jZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvIGBgc2VsZltpOmpdYGAuIFNhbWUgbm90ZXMgZm9yICppKlxuICAgYW5kICpqKiBhcyBmb3IgYGBfX2dldHNsaWNlX18oKWBgLlxuXG4gICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJZiBubyBgYF9fc2V0c2xpY2VfXygpYGAgaXMgZm91bmQsIG9yXG4gICBmb3IgZXh0ZW5kZWQgc2xpY2luZyBvZiB0aGUgZm9ybSBgYHNlbGZbaTpqOmtdYGAsIGEgc2xpY2Ugb2JqZWN0IGlzXG4gICBjcmVhdGVkLCBhbmQgcGFzc2VkIHRvIGBgX19zZXRpdGVtX18oKWBgLCBpbnN0ZWFkIG9mXG4gICBgYF9fc2V0c2xpY2VfXygpYGAgYmVpbmcgY2FsbGVkLlxuXG5vYmplY3QuX19kZWxzbGljZV9fKHNlbGYsIGksIGopXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2k6al1gYC4gU2FtZSBub3RlcyBmb3IgKmkqXG4gICBhbmQgKmoqIGFzIGZvciBgYF9fZ2V0c2xpY2VfXygpYGAuIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIElmIG5vXG4gICBgYF9fZGVsc2xpY2VfXygpYGAgaXMgZm91bmQsIG9yIGZvciBleHRlbmRlZCBzbGljaW5nIG9mIHRoZSBmb3JtXG4gICBgYHNlbGZbaTpqOmtdYGAsIGEgc2xpY2Ugb2JqZWN0IGlzIGNyZWF0ZWQsIGFuZCBwYXNzZWQgdG9cbiAgIGBgX19kZWxpdGVtX18oKWBgLCBpbnN0ZWFkIG9mIGBgX19kZWxzbGljZV9fKClgYCBiZWluZyBjYWxsZWQuXG5cbk5vdGljZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIG9ubHkgaW52b2tlZCB3aGVuIGEgc2luZ2xlIHNsaWNlIHdpdGggYVxuc2luZ2xlIGNvbG9uIGlzIHVzZWQsIGFuZCB0aGUgc2xpY2UgbWV0aG9kIGlzIGF2YWlsYWJsZS4gIEZvciBzbGljZVxub3BlcmF0aW9ucyBpbnZvbHZpbmcgZXh0ZW5kZWQgc2xpY2Ugbm90YXRpb24sIG9yIGluIGFic2VuY2Ugb2YgdGhlXG5zbGljZSBtZXRob2RzLCBgYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAgb3JcbmBgX19kZWxpdGVtX18oKWBgIGlzIGNhbGxlZCB3aXRoIGEgc2xpY2Ugb2JqZWN0IGFzIGFyZ3VtZW50LlxuXG5UaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGUgaG93IHRvIG1ha2UgeW91ciBwcm9ncmFtIG9yIG1vZHVsZVxuY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uIChhc3N1bWluZyB0aGF0IG1ldGhvZHNcbmBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCBhbmQgYGBfX2RlbGl0ZW1fXygpYGAgc3VwcG9ydFxuc2xpY2Ugb2JqZWN0cyBhcyBhcmd1bWVudHMpOlxuXG4gICBjbGFzcyBNeUNsYXNzOlxuICAgICAgIC4uLlxuICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6XG4gICAgICAgICAgIC4uLlxuICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgdmFsdWUpOlxuICAgICAgICAgICAuLi5cbiAgICAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgaW5kZXgpOlxuICAgICAgICAgICAuLi5cblxuICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgMCk6XG4gICAgICAgICAgICMgVGhleSB3b25cJ3QgYmUgZGVmaW5lZCBpZiB2ZXJzaW9uIGlzIGF0IGxlYXN0IDIuMCBmaW5hbFxuXG4gICAgICAgICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgaSwgaik6XG4gICAgICAgICAgICAgICByZXR1cm4gc2VsZlttYXgoMCwgaSk6bWF4KDAsIGopOl1cbiAgICAgICAgICAgZGVmIF9fc2V0c2xpY2VfXyhzZWxmLCBpLCBqLCBzZXEpOlxuICAgICAgICAgICAgICAgc2VsZlttYXgoMCwgaSk6bWF4KDAsIGopOl0gPSBzZXFcbiAgICAgICAgICAgZGVmIF9fZGVsc2xpY2VfXyhzZWxmLCBpLCBqKTpcbiAgICAgICAgICAgICAgIGRlbCBzZWxmW21heCgwLCBpKTptYXgoMCwgaik6XVxuICAgICAgIC4uLlxuXG5Ob3RlIHRoZSBjYWxscyB0byBgYG1heCgpYGA7IHRoZXNlIGFyZSBuZWNlc3NhcnkgYmVjYXVzZSBvZiB0aGVcbmhhbmRsaW5nIG9mIG5lZ2F0aXZlIGluZGljZXMgYmVmb3JlIHRoZSBgYF9fKnNsaWNlX18oKWBgIG1ldGhvZHMgYXJlXG5jYWxsZWQuICBXaGVuIG5lZ2F0aXZlIGluZGV4ZXMgYXJlIHVzZWQsIHRoZSBgYF9fKml0ZW1fXygpYGAgbWV0aG9kc1xucmVjZWl2ZSB0aGVtIGFzIHByb3ZpZGVkLCBidXQgdGhlIGBgX18qc2xpY2VfXygpYGAgbWV0aG9kcyBnZXQgYVxuImNvb2tlZCIgZm9ybSBvZiB0aGUgaW5kZXggdmFsdWVzLiAgRm9yIGVhY2ggbmVnYXRpdmUgaW5kZXggdmFsdWUsIHRoZVxubGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSBpcyBhZGRlZCB0byB0aGUgaW5kZXggYmVmb3JlIGNhbGxpbmcgdGhlIG1ldGhvZFxuKHdoaWNoIG1heSBzdGlsbCByZXN1bHQgaW4gYSBuZWdhdGl2ZSBpbmRleCk7IHRoaXMgaXMgdGhlIGN1c3RvbWFyeVxuaGFuZGxpbmcgb2YgbmVnYXRpdmUgaW5kZXhlcyBieSB0aGUgYnVpbHQtaW4gc2VxdWVuY2UgdHlwZXMsIGFuZCB0aGVcbmBgX18qaXRlbV9fKClgYCBtZXRob2RzIGFyZSBleHBlY3RlZCB0byBkbyB0aGlzIGFzIHdlbGwuICBIb3dldmVyLFxuc2luY2UgdGhleSBzaG91bGQgYWxyZWFkeSBiZSBkb2luZyB0aGF0LCBuZWdhdGl2ZSBpbmRleGVzIGNhbm5vdCBiZVxucGFzc2VkIGluOyB0aGV5IG11c3QgYmUgY29uc3RyYWluZWQgdG8gdGhlIGJvdW5kcyBvZiB0aGUgc2VxdWVuY2VcbmJlZm9yZSBiZWluZyBwYXNzZWQgdG8gdGhlIGBgX18qaXRlbV9fKClgYCBtZXRob2RzLiBDYWxsaW5nIGBgbWF4KDAsXG5pKWBgIGNvbnZlbmllbnRseSByZXR1cm5zIHRoZSBwcm9wZXIgdmFsdWUuXG5cblxuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKGBgK2BgLCBgYC1gYCwgYGAqYGAsIGBgLy9gYCwgYGAlYGAsIGBgZGl2bW9kKClgYCxcbiAgIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLCBgYHxgYCkuICBGb3JcbiAgIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggKyB5YGAsIHdoZXJlICp4KiBpcyBhblxuICAgaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiBgYF9fYWRkX18oKWBgIG1ldGhvZCxcbiAgIGBgeC5fX2FkZF9fKHkpYGAgaXMgY2FsbGVkLiAgVGhlIGBgX19kaXZtb2RfXygpYGAgbWV0aG9kIHNob3VsZCBiZVxuICAgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBfX2Zsb29yZGl2X18oKWBgIGFuZCBgYF9fbW9kX18oKWBgOyBpdFxuICAgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvIGBgX190cnVlZGl2X18oKWBgIChkZXNjcmliZWQgYmVsb3cpLiAgTm90ZVxuICAgdGhhdCBgYF9fcG93X18oKWBgIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gYGBwb3coKWBgIGZ1bmN0aW9uXG4gICBpcyB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuIGBgTm90SW1wbGVtZW50ZWRgYC5cblxub2JqZWN0Ll9fZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZSBkaXZpc2lvbiBvcGVyYXRvciAoYGAvYGApIGlzIGltcGxlbWVudGVkIGJ5IHRoZXNlIG1ldGhvZHMuICBUaGVcbiAgIGBgX190cnVlZGl2X18oKWBgIG1ldGhvZCBpcyB1c2VkIHdoZW4gYGBfX2Z1dHVyZV9fLmRpdmlzaW9uYGAgaXMgaW5cbiAgIGVmZmVjdCwgb3RoZXJ3aXNlIGBgX19kaXZfXygpYGAgaXMgdXNlZC4gIElmIG9ubHkgb25lIG9mIHRoZXNlIHR3b1xuICAgbWV0aG9kcyBpcyBkZWZpbmVkLCB0aGUgb2JqZWN0IHdpbGwgbm90IHN1cHBvcnQgZGl2aXNpb24gaW4gdGhlXG4gICBhbHRlcm5hdGUgY29udGV4dDsgYGBUeXBlRXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBpbnN0ZWFkLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKGBgK2BgLCBgYC1gYCwgYGAqYGAsIGBgL2BgLCBgYCVgYCwgYGBkaXZtb2QoKWBgLFxuICAgYGBwb3coKWBgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsIGBgfGBgKSB3aXRoXG4gICByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZlxuICAgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmRcbiAgIHRoZSBvcGVyYW5kcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLiBbMl0gRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZVxuICAgdGhlIGV4cHJlc3Npb24gYGB4IC0geWBgLCB3aGVyZSAqeSogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0XG4gICBoYXMgYW4gYGBfX3JzdWJfXygpYGAgbWV0aG9kLCBgYHkuX19yc3ViX18oeClgYCBpcyBjYWxsZWQgaWZcbiAgIGBgeC5fX3N1Yl9fKHkpYGAgcmV0dXJucyAqTm90SW1wbGVtZW50ZWQqLlxuXG4gICBOb3RlIHRoYXQgdGVybmFyeSBgYHBvdygpYGAgd2lsbCBub3QgdHJ5IGNhbGxpbmcgYGBfX3Jwb3dfXygpYGBcbiAgICh0aGUgY29lcmNpb24gcnVsZXMgd291bGQgYmVjb21lIHRvbyBjb21wbGljYXRlZCkuXG5cbiAgIE5vdGU6IElmIHRoZSByaWdodCBvcGVyYW5kXCdzIHR5cGUgaXMgYSBzdWJjbGFzcyBvZiB0aGUgbGVmdCBvcGVyYW5kXCdzXG4gICAgIHR5cGUgYW5kIHRoYXQgc3ViY2xhc3MgcHJvdmlkZXMgdGhlIHJlZmxlY3RlZCBtZXRob2QgZm9yIHRoZVxuICAgICBvcGVyYXRpb24sIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgbGVmdCBvcGVyYW5kXCdzXG4gICAgIG5vbi1yZWZsZWN0ZWQgbWV0aG9kLiAgVGhpcyBiZWhhdmlvciBhbGxvd3Mgc3ViY2xhc3NlcyB0b1xuICAgICBvdmVycmlkZSB0aGVpciBhbmNlc3RvcnNcJyBvcGVyYXRpb25zLlxuXG5vYmplY3QuX19pYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9faWxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGF1Z21lbnRlZCBhcml0aG1ldGljXG4gICBhc3NpZ25tZW50cyAoYGArPWBgLCBgYC09YGAsIGBgKj1gYCwgYGAvPWBgLCBgYC8vPWBgLCBgYCU9YGAsXG4gICBgYCoqPWBgLCBgYDw8PWBgLCBgYD4+PWBgLCBgYCY9YGAsIGBgXj1gYCwgYGB8PWBgKS4gIFRoZXNlIG1ldGhvZHNcbiAgIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZSBvcGVyYXRpb24gaW4tcGxhY2UgKG1vZGlmeWluZyAqc2VsZiopIGFuZFxuICAgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoIGNvdWxkIGJlLCBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSxcbiAgICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZCBpcyBub3QgZGVmaW5lZCwgdGhlIGF1Z21lbnRlZFxuICAgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWwgbWV0aG9kcy4gIEZvciBpbnN0YW5jZSwgdG9cbiAgIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCBgYHggKz0geWBgLCB3aGVyZSAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYVxuICAgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX2lhZGRfXygpYGAgbWV0aG9kLCBgYHguX19pYWRkX18oeSlgYCBpc1xuICAgY2FsbGVkLiAgSWYgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBkZWZpbmUgYVxuICAgYGBfX2lhZGRfXygpYGAgbWV0aG9kLCBgYHguX19hZGRfXyh5KWBgIGFuZCBgYHkuX19yYWRkX18oeClgYCBhcmVcbiAgIGNvbnNpZGVyZWQsIGFzIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgYGB4ICsgeWBgLlxuXG5vYmplY3QuX19uZWdfXyhzZWxmKVxub2JqZWN0Ll9fcG9zX18oc2VsZilcbm9iamVjdC5fX2Fic19fKHNlbGYpXG5vYmplY3QuX19pbnZlcnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKGBgLWBgLCBgYCtgYCxcbiAgIGBgYWJzKClgYCBhbmQgYGB+YGApLlxuXG5vYmplY3QuX19jb21wbGV4X18oc2VsZilcbm9iamVjdC5fX2ludF9fKHNlbGYpXG5vYmplY3QuX19sb25nX18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgY29tcGxleCgpYGAsXG4gICBgYGludCgpYGAsIGBgbG9uZygpYGAsIGFuZCBgYGZsb2F0KClgYC4gIFNob3VsZCByZXR1cm4gYSB2YWx1ZSBvZlxuICAgdGhlIGFwcHJvcHJpYXRlIHR5cGUuXG5cbm9iamVjdC5fX29jdF9fKHNlbGYpXG5vYmplY3QuX19oZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBvY3QoKWBgIGFuZCBgYGhleCgpYGAuXG4gICBTaG91bGQgcmV0dXJuIGEgc3RyaW5nIHZhbHVlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYGBvcGVyYXRvci5pbmRleCgpYGAuICBBbHNvIGNhbGxlZCB3aGVuZXZlclxuICAgUHl0aG9uIG5lZWRzIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcpLiAgTXVzdCByZXR1cm5cbiAgIGFuIGludGVnZXIgKGludCBvciBsb25nKS5cblxuICAgTmV3IGluIHZlcnNpb24gMi41LlxuXG5vYmplY3QuX19jb2VyY2VfXyhzZWxmLCBvdGhlcilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAibWl4ZWQtbW9kZSIgbnVtZXJpYyBhcml0aG1ldGljLiAgU2hvdWxkIGVpdGhlclxuICAgcmV0dXJuIGEgMi10dXBsZSBjb250YWluaW5nICpzZWxmKiBhbmQgKm90aGVyKiBjb252ZXJ0ZWQgdG8gYVxuICAgY29tbW9uIG51bWVyaWMgdHlwZSwgb3IgYGBOb25lYGAgaWYgY29udmVyc2lvbiBpcyBpbXBvc3NpYmxlLiAgV2hlblxuICAgdGhlIGNvbW1vbiB0eXBlIHdvdWxkIGJlIHRoZSB0eXBlIG9mIGBgb3RoZXJgYCwgaXQgaXMgc3VmZmljaWVudCB0b1xuICAgcmV0dXJuIGBgTm9uZWBgLCBzaW5jZSB0aGUgaW50ZXJwcmV0ZXIgd2lsbCBhbHNvIGFzayB0aGUgb3RoZXJcbiAgIG9iamVjdCB0byBhdHRlbXB0IGEgY29lcmNpb24gKGJ1dCBzb21ldGltZXMsIGlmIHRoZSBpbXBsZW1lbnRhdGlvblxuICAgb2YgdGhlIG90aGVyIHR5cGUgY2Fubm90IGJlIGNoYW5nZWQsIGl0IGlzIHVzZWZ1bCB0byBkbyB0aGVcbiAgIGNvbnZlcnNpb24gdG8gdGhlIG90aGVyIHR5cGUgaGVyZSkuICBBIHJldHVybiB2YWx1ZSBvZlxuICAgYGBOb3RJbXBsZW1lbnRlZGBgIGlzIGVxdWl2YWxlbnQgdG8gcmV0dXJuaW5nIGBgTm9uZWBgLlxuXG5cbkNvZXJjaW9uIHJ1bGVzXG49PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gdXNlZCB0byBkb2N1bWVudCB0aGUgcnVsZXMgZm9yIGNvZXJjaW9uLiAgQXMgdGhlIGxhbmd1YWdlXG5oYXMgZXZvbHZlZCwgdGhlIGNvZXJjaW9uIHJ1bGVzIGhhdmUgYmVjb21lIGhhcmQgdG8gZG9jdW1lbnRcbnByZWNpc2VseTsgZG9jdW1lbnRpbmcgd2hhdCBvbmUgdmVyc2lvbiBvZiBvbmUgcGFydGljdWxhclxuaW1wbGVtZW50YXRpb24gZG9lcyBpcyB1bmRlc2lyYWJsZS4gIEluc3RlYWQsIGhlcmUgYXJlIHNvbWUgaW5mb3JtYWxcbmd1aWRlbGluZXMgcmVnYXJkaW5nIGNvZXJjaW9uLiAgSW4gUHl0aG9uIDMuMCwgY29lcmNpb24gd2lsbCBub3QgYmVcbnN1cHBvcnRlZC5cblxuKiBJZiB0aGUgbGVmdCBvcGVyYW5kIG9mIGEgJSBvcGVyYXRvciBpcyBhIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCxcbiAgbm8gY29lcmNpb24gdGFrZXMgcGxhY2UgYW5kIHRoZSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24gaXNcbiAgaW52b2tlZCBpbnN0ZWFkLlxuXG4qIEl0IGlzIG5vIGxvbmdlciByZWNvbW1lbmRlZCB0byBkZWZpbmUgYSBjb2VyY2lvbiBvcGVyYXRpb24uIE1peGVkLVxuICBtb2RlIG9wZXJhdGlvbnMgb24gdHlwZXMgdGhhdCBkb25cJ3QgZGVmaW5lIGNvZXJjaW9uIHBhc3MgdGhlXG4gIG9yaWdpbmFsIGFyZ3VtZW50cyB0byB0aGUgb3BlcmF0aW9uLlxuXG4qIE5ldy1zdHlsZSBjbGFzc2VzICh0aG9zZSBkZXJpdmVkIGZyb20gYGBvYmplY3RgYCkgbmV2ZXIgaW52b2tlIHRoZVxuICBgYF9fY29lcmNlX18oKWBgIG1ldGhvZCBpbiByZXNwb25zZSB0byBhIGJpbmFyeSBvcGVyYXRvcjsgdGhlIG9ubHlcbiAgdGltZSBgYF9fY29lcmNlX18oKWBgIGlzIGludm9rZWQgaXMgd2hlbiB0aGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgYGBjb2VyY2UoKWBgIGlzIGNhbGxlZC5cblxuKiBGb3IgbW9zdCBpbnRlbnRzIGFuZCBwdXJwb3NlcywgYW4gb3BlcmF0b3IgdGhhdCByZXR1cm5zXG4gIGBgTm90SW1wbGVtZW50ZWRgYCBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIG9uZSB0aGF0IGlzIG5vdFxuICBpbXBsZW1lbnRlZCBhdCBhbGwuXG5cbiogQmVsb3csIGBgX19vcF9fKClgYCBhbmQgYGBfX3JvcF9fKClgYCBhcmUgdXNlZCB0byBzaWduaWZ5IHRoZVxuICBnZW5lcmljIG1ldGhvZCBuYW1lcyBjb3JyZXNwb25kaW5nIHRvIGFuIG9wZXJhdG9yOyBgYF9faW9wX18oKWBgIGlzXG4gIHVzZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGluLXBsYWNlIG9wZXJhdG9yLiAgRm9yIGV4YW1wbGUsIGZvciB0aGVcbiAgb3BlcmF0b3IgXCdgYCtgYFwnLCBgYF9fYWRkX18oKWBgIGFuZCBgYF9fcmFkZF9fKClgYCBhcmUgdXNlZCBmb3IgdGhlXG4gIGxlZnQgYW5kIHJpZ2h0IHZhcmlhbnQgb2YgdGhlIGJpbmFyeSBvcGVyYXRvciwgYW5kIGBgX19pYWRkX18oKWBgXG4gIGZvciB0aGUgaW4tcGxhY2UgdmFyaWFudC5cblxuKiBGb3Igb2JqZWN0cyAqeCogYW5kICp5KiwgZmlyc3QgYGB4Ll9fb3BfXyh5KWBgIGlzIHRyaWVkLiAgSWYgdGhpcyBpc1xuICBub3QgaW1wbGVtZW50ZWQgb3IgcmV0dXJucyBgYE5vdEltcGxlbWVudGVkYGAsIGBgeS5fX3JvcF9fKHgpYGAgaXNcbiAgdHJpZWQuICBJZiB0aGlzIGlzIGFsc28gbm90IGltcGxlbWVudGVkIG9yIHJldHVybnNcbiAgYGBOb3RJbXBsZW1lbnRlZGBgLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIEJ1dCBzZWVcbiAgdGhlIGZvbGxvd2luZyBleGNlcHRpb246XG5cbiogRXhjZXB0aW9uIHRvIHRoZSBwcmV2aW91cyBpdGVtOiBpZiB0aGUgbGVmdCBvcGVyYW5kIGlzIGFuIGluc3RhbmNlXG4gIG9mIGEgYnVpbHQtaW4gdHlwZSBvciBhIG5ldy1zdHlsZSBjbGFzcywgYW5kIHRoZSByaWdodCBvcGVyYW5kIGlzIGFuXG4gIGluc3RhbmNlIG9mIGEgcHJvcGVyIHN1YmNsYXNzIG9mIHRoYXQgdHlwZSBvciBjbGFzcyBhbmQgb3ZlcnJpZGVzXG4gIHRoZSBiYXNlXCdzIGBgX19yb3BfXygpYGAgbWV0aG9kLCB0aGUgcmlnaHQgb3BlcmFuZFwncyBgYF9fcm9wX18oKWBgXG4gIG1ldGhvZCBpcyB0cmllZCAqYmVmb3JlKiB0aGUgbGVmdCBvcGVyYW5kXCdzIGBgX19vcF9fKClgYCBtZXRob2QuXG5cbiAgVGhpcyBpcyBkb25lIHNvIHRoYXQgYSBzdWJjbGFzcyBjYW4gY29tcGxldGVseSBvdmVycmlkZSBiaW5hcnlcbiAgb3BlcmF0b3JzLiBPdGhlcndpc2UsIHRoZSBsZWZ0IG9wZXJhbmRcJ3MgYGBfX29wX18oKWBgIG1ldGhvZCB3b3VsZFxuICBhbHdheXMgYWNjZXB0IHRoZSByaWdodCBvcGVyYW5kOiB3aGVuIGFuIGluc3RhbmNlIG9mIGEgZ2l2ZW4gY2xhc3NcbiAgaXMgZXhwZWN0ZWQsIGFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3Mgb2YgdGhhdCBjbGFzcyBpcyBhbHdheXNcbiAgYWNjZXB0YWJsZS5cblxuKiBXaGVuIGVpdGhlciBvcGVyYW5kIHR5cGUgZGVmaW5lcyBhIGNvZXJjaW9uLCB0aGlzIGNvZXJjaW9uIGlzIGNhbGxlZFxuICBiZWZvcmUgdGhhdCB0eXBlXCdzIGBgX19vcF9fKClgYCBvciBgYF9fcm9wX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQsXG4gIGJ1dCBubyBzb29uZXIuICBJZiB0aGUgY29lcmNpb24gcmV0dXJucyBhbiBvYmplY3Qgb2YgYSBkaWZmZXJlbnRcbiAgdHlwZSBmb3IgdGhlIG9wZXJhbmQgd2hvc2UgY29lcmNpb24gaXMgaW52b2tlZCwgcGFydCBvZiB0aGUgcHJvY2Vzc1xuICBpcyByZWRvbmUgdXNpbmcgdGhlIG5ldyBvYmplY3QuXG5cbiogV2hlbiBhbiBpbi1wbGFjZSBvcGVyYXRvciAobGlrZSBcJ2BgKz1gYFwnKSBpcyB1c2VkLCBpZiB0aGUgbGVmdFxuICBvcGVyYW5kIGltcGxlbWVudHMgYGBfX2lvcF9fKClgYCwgaXQgaXMgaW52b2tlZCB3aXRob3V0IGFueVxuICBjb2VyY2lvbi4gIFdoZW4gdGhlIG9wZXJhdGlvbiBmYWxscyBiYWNrIHRvIGBgX19vcF9fKClgYCBhbmQvb3JcbiAgYGBfX3JvcF9fKClgYCwgdGhlIG5vcm1hbCBjb2VyY2lvbiBydWxlcyBhcHBseS5cblxuKiBJbiBgYHggKyB5YGAsIGlmICp4KiBpcyBhIHNlcXVlbmNlIHRoYXQgaW1wbGVtZW50cyBzZXF1ZW5jZVxuICBjb25jYXRlbmF0aW9uLCBzZXF1ZW5jZSBjb25jYXRlbmF0aW9uIGlzIGludm9rZWQuXG5cbiogSW4gYGB4ICogeWBgLCBpZiBvbmUgb3BlcmF0b3IgaXMgYSBzZXF1ZW5jZSB0aGF0IGltcGxlbWVudHMgc2VxdWVuY2VcbiAgcmVwZXRpdGlvbiwgYW5kIHRoZSBvdGhlciBpcyBhbiBpbnRlZ2VyIChgYGludGBgIG9yIGBgbG9uZ2BgKSxcbiAgc2VxdWVuY2UgcmVwZXRpdGlvbiBpcyBpbnZva2VkLlxuXG4qIFJpY2ggY29tcGFyaXNvbnMgKGltcGxlbWVudGVkIGJ5IG1ldGhvZHMgYGBfX2VxX18oKWBgIGFuZCBzbyBvbilcbiAgbmV2ZXIgdXNlIGNvZXJjaW9uLiAgVGhyZWUtd2F5IGNvbXBhcmlzb24gKGltcGxlbWVudGVkIGJ5XG4gIGBgX19jbXBfXygpYGApIGRvZXMgdXNlIGNvZXJjaW9uIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgYXMgb3RoZXJcbiAgYmluYXJ5IG9wZXJhdGlvbnMgdXNlIGl0LlxuXG4qIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgYnVpbHQtaW4gbnVtZXJpYyB0eXBlcyBgYGludGBgLFxuICBgYGxvbmdgYCwgYGBmbG9hdGBgLCBhbmQgYGBjb21wbGV4YGAgZG8gbm90IHVzZSBjb2VyY2lvbi4gQWxsIHRoZXNlXG4gIHR5cGVzIGltcGxlbWVudCBhIGBgX19jb2VyY2VfXygpYGAgbWV0aG9kLCBmb3IgdXNlIGJ5IHRoZSBidWlsdC1pblxuICBgYGNvZXJjZSgpYGAgZnVuY3Rpb24uXG5cbiAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNy5cblxuXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbk5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgYGB3aXRoYGAgc3RhdGVtZW50LiBUaGUgY29udGV4dFxubWFuYWdlciBoYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZVxuY29udGV4dCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlXG5ub3JtYWxseSBpbnZva2VkIHVzaW5nIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgKGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4qVGhlIHdpdGggc3RhdGVtZW50KiksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGRpcmVjdGx5IGludm9raW5nIHRoZWlyXG5tZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBgYHdpdGhgYFxuICAgc3RhdGVtZW50IHdpbGwgYmluZCB0aGlzIG1ldGhvZFwncyByZXR1cm4gdmFsdWUgdG8gdGhlIHRhcmdldChzKVxuICAgc3BlY2lmaWVkIGluIHRoZSBgYGFzYGAgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgYGBOb25lYGAuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0IGBgX19leGl0X18oKWBgIG1ldGhvZHMgc2hvdWxkIG5vdCByZXJhaXNlIHRoZSBwYXNzZWQtaW5cbiAgIGV4Y2VwdGlvbjsgdGhpcyBpcyB0aGUgY2FsbGVyXCdzIHJlc3BvbnNpYmlsaXR5LlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuXG5TcGVjaWFsIG1ldGhvZCBsb29rdXAgZm9yIG9sZC1zdHlsZSBjbGFzc2VzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkZvciBvbGQtc3R5bGUgY2xhc3Nlcywgc3BlY2lhbCBtZXRob2RzIGFyZSBhbHdheXMgbG9va2VkIHVwIGluIGV4YWN0bHlcbnRoZSBzYW1lIHdheSBhcyBhbnkgb3RoZXIgbWV0aG9kIG9yIGF0dHJpYnV0ZS4gVGhpcyBpcyB0aGUgY2FzZVxucmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtZXRob2QgaXMgYmVpbmcgbG9va2VkIHVwIGV4cGxpY2l0bHkgYXMgaW5cbmBgeC5fX2dldGl0ZW1fXyhpKWBgIG9yIGltcGxpY2l0bHkgYXMgaW4gYGB4W2ldYGAuXG5cblRoaXMgYmVoYXZpb3VyIG1lYW5zIHRoYXQgc3BlY2lhbCBtZXRob2RzIG1heSBleGhpYml0IGRpZmZlcmVudFxuYmVoYXZpb3VyIGZvciBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIGEgc2luZ2xlIG9sZC1zdHlsZSBjbGFzcyBpZiB0aGVcbmFwcHJvcHJpYXRlIHNwZWNpYWwgYXR0cmlidXRlcyBhcmUgc2V0IGRpZmZlcmVudGx5OlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYzEgPSBDKClcbiAgID4+PiBjMiA9IEMoKVxuICAgPj4+IGMxLl9fbGVuX18gPSBsYW1iZGE6IDVcbiAgID4+PiBjMi5fX2xlbl9fID0gbGFtYmRhOiA5XG4gICA+Pj4gbGVuKGMxKVxuICAgNVxuICAgPj4+IGxlbihjMilcbiAgIDlcblxuXG5TcGVjaWFsIG1ldGhvZCBsb29rdXAgZm9yIG5ldy1zdHlsZSBjbGFzc2VzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkZvciBuZXctc3R5bGUgY2xhc3NlcywgaW1wbGljaXQgaW52b2NhdGlvbnMgb2Ygc3BlY2lhbCBtZXRob2RzIGFyZVxub25seSBndWFyYW50ZWVkIHRvIHdvcmsgY29ycmVjdGx5IGlmIGRlZmluZWQgb24gYW4gb2JqZWN0XCdzIHR5cGUsIG5vdFxuaW4gdGhlIG9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgVGhhdCBiZWhhdmlvdXIgaXMgdGhlIHJlYXNvbiB3aHlcbnRoZSBmb2xsb3dpbmcgY29kZSByYWlzZXMgYW4gZXhjZXB0aW9uICh1bmxpa2UgdGhlIGVxdWl2YWxlbnQgZXhhbXBsZVxud2l0aCBvbGQtc3R5bGUgY2xhc3Nlcyk6XG5cbiAgID4+PiBjbGFzcyBDKG9iamVjdCk6XG4gICAuLi4gICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18gPSBsYW1iZGE6IDVcbiAgID4+PiBsZW4oYylcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIFR5cGVFcnJvcjogb2JqZWN0IG9mIHR5cGUgXCdDXCcgaGFzIG5vIGxlbigpXG5cblRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYmVoYXZpb3VyIGxpZXMgd2l0aCBhIG51bWJlciBvZiBzcGVjaWFsXG5tZXRob2RzIHN1Y2ggYXMgYGBfX2hhc2hfXygpYGAgYW5kIGBgX19yZXByX18oKWBgIHRoYXQgYXJlIGltcGxlbWVudGVkXG5ieSBhbGwgb2JqZWN0cywgaW5jbHVkaW5nIHR5cGUgb2JqZWN0cy4gSWYgdGhlIGltcGxpY2l0IGxvb2t1cCBvZlxudGhlc2UgbWV0aG9kcyB1c2VkIHRoZSBjb252ZW50aW9uYWwgbG9va3VwIHByb2Nlc3MsIHRoZXkgd291bGQgZmFpbFxud2hlbiBpbnZva2VkIG9uIHRoZSB0eXBlIG9iamVjdCBpdHNlbGY6XG5cbiAgID4+PiAxIC5fX2hhc2hfXygpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiBpbnQuX19oYXNoX18oKSA9PSBoYXNoKGludClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIFR5cGVFcnJvcjogZGVzY3JpcHRvciBcJ19faGFzaF9fXCcgb2YgXCdpbnRcJyBvYmplY3QgbmVlZHMgYW4gYXJndW1lbnRcblxuSW5jb3JyZWN0bHkgYXR0ZW1wdGluZyB0byBpbnZva2UgYW4gdW5ib3VuZCBtZXRob2Qgb2YgYSBjbGFzcyBpbiB0aGlzXG53YXkgaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIFwnbWV0YWNsYXNzIGNvbmZ1c2lvblwnLCBhbmQgaXMgYXZvaWRlZFxuYnkgYnlwYXNzaW5nIHRoZSBpbnN0YW5jZSB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzOlxuXG4gICA+Pj4gdHlwZSgxKS5fX2hhc2hfXygxKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gdHlwZShpbnQpLl9faGFzaF9fKGludCkgPT0gaGFzaChpbnQpXG4gICBUcnVlXG5cbkluIGFkZGl0aW9uIHRvIGJ5cGFzc2luZyBhbnkgaW5zdGFuY2UgYXR0cmlidXRlcyBpbiB0aGUgaW50ZXJlc3Qgb2ZcbmNvcnJlY3RuZXNzLCBpbXBsaWNpdCBzcGVjaWFsIG1ldGhvZCBsb29rdXAgZ2VuZXJhbGx5IGFsc28gYnlwYXNzZXNcbnRoZSBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1ldGhvZCBldmVuIG9mIHRoZSBvYmplY3RcJ3MgbWV0YWNsYXNzOlxuXG4gICA+Pj4gY2xhc3MgTWV0YSh0eXBlKTpcbiAgIC4uLiAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgcHJpbnQgIk1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCJcbiAgIC4uLiAgICAgICByZXR1cm4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gY2xhc3MgQyhvYmplY3QpOlxuICAgLi4uICAgICBfX21ldGFjbGFzc19fID0gTWV0YVxuICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiAxMFxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCAiQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiXG4gICAuLi4gICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fKCkgICAgICAgICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSBpbnN0YW5jZVxuICAgQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gdHlwZShjKS5fX2xlbl9fKGMpICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSB0eXBlXG4gICBNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gbGVuKGMpICAgICAgICAgICAgICAgICAgICAgICMgSW1wbGljaXQgbG9va3VwXG4gICAxMFxuXG5CeXBhc3NpbmcgdGhlIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWFjaGluZXJ5IGluIHRoaXMgZmFzaGlvblxucHJvdmlkZXMgc2lnbmlmaWNhbnQgc2NvcGUgZm9yIHNwZWVkIG9wdGltaXNhdGlvbnMgd2l0aGluIHRoZVxuaW50ZXJwcmV0ZXIsIGF0IHRoZSBjb3N0IG9mIHNvbWUgZmxleGliaWxpdHkgaW4gdGhlIGhhbmRsaW5nIG9mXG5zcGVjaWFsIG1ldGhvZHMgKHRoZSBzcGVjaWFsIG1ldGhvZCAqbXVzdCogYmUgc2V0IG9uIHRoZSBjbGFzcyBvYmplY3Rcbml0c2VsZiBpbiBvcmRlciB0byBiZSBjb25zaXN0ZW50bHkgaW52b2tlZCBieSB0aGUgaW50ZXJwcmV0ZXIpLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIEl0ICppcyogcG9zc2libGUgaW4gc29tZSBjYXNlcyB0byBjaGFuZ2UgYW4gb2JqZWN0XCdzIHR5cGUsIHVuZGVyXG4gICAgY2VydGFpbiBjb250cm9sbGVkIGNvbmRpdGlvbnMuIEl0IGdlbmVyYWxseSBpc25cJ3QgYSBnb29kIGlkZWFcbiAgICB0aG91Z2gsIHNpbmNlIGl0IGNhbiBsZWFkIHRvIHNvbWUgdmVyeSBzdHJhbmdlIGJlaGF2aW91ciBpZiBpdCBpc1xuICAgIGhhbmRsZWQgaW5jb3JyZWN0bHkuXG5cblsyXSBGb3Igb3BlcmFuZHMgb2YgdGhlIHNhbWUgdHlwZSwgaXQgaXMgYXNzdW1lZCB0aGF0IGlmIHRoZSBub24tXG4gICAgcmVmbGVjdGVkIG1ldGhvZCAoc3VjaCBhcyBgYF9fYWRkX18oKWBgKSBmYWlscyB0aGUgb3BlcmF0aW9uIGlzXG4gICAgbm90IHN1cHBvcnRlZCwgd2hpY2ggaXMgd2h5IHRoZSByZWZsZWN0ZWQgbWV0aG9kIGlzIG5vdCBjYWxsZWQuXG4nLAogICdzdHJpbmctY29udmVyc2lvbnMnOiB1J1xuU3RyaW5nIGNvbnZlcnNpb25zXG4qKioqKioqKioqKioqKioqKipcblxuQSBzdHJpbmcgY29udmVyc2lvbiBpcyBhbiBleHByZXNzaW9uIGxpc3QgZW5jbG9zZWQgaW4gcmV2ZXJzZSAoYS5rLmEuXG5iYWNrd2FyZCkgcXVvdGVzOlxuXG4gICBzdHJpbmdfY29udmVyc2lvbiA6Oj0gIlwnIiBleHByZXNzaW9uX2xpc3QgIlwnIlxuXG5BIHN0cmluZyBjb252ZXJzaW9uIGV2YWx1YXRlcyB0aGUgY29udGFpbmVkIGV4cHJlc3Npb24gbGlzdCBhbmRcbmNvbnZlcnRzIHRoZSByZXN1bHRpbmcgb2JqZWN0IGludG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHJ1bGVzXG5zcGVjaWZpYyB0byBpdHMgdHlwZS5cblxuSWYgdGhlIG9iamVjdCBpcyBhIHN0cmluZywgYSBudW1iZXIsIGBgTm9uZWBgLCBvciBhIHR1cGxlLCBsaXN0IG9yXG5kaWN0aW9uYXJ5IGNvbnRhaW5pbmcgb25seSBvYmplY3RzIHdob3NlIHR5cGUgaXMgb25lIG9mIHRoZXNlLCB0aGVcbnJlc3VsdGluZyBzdHJpbmcgaXMgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB3aGljaCBjYW4gYmUgcGFzc2VkIHRvXG50aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBldmFsKClgYCB0byB5aWVsZCBhbiBleHByZXNzaW9uIHdpdGggdGhlIHNhbWVcbnZhbHVlIChvciBhbiBhcHByb3hpbWF0aW9uLCBpZiBmbG9hdGluZyBwb2ludCBudW1iZXJzIGFyZSBpbnZvbHZlZCkuXG5cbihJbiBwYXJ0aWN1bGFyLCBjb252ZXJ0aW5nIGEgc3RyaW5nIGFkZHMgcXVvdGVzIGFyb3VuZCBpdCBhbmQgY29udmVydHNcbiJmdW5ueSIgY2hhcmFjdGVycyB0byBlc2NhcGUgc2VxdWVuY2VzIHRoYXQgYXJlIHNhZmUgdG8gcHJpbnQuKVxuXG5SZWN1cnNpdmUgb2JqZWN0cyAoZm9yIGV4YW1wbGUsIGxpc3RzIG9yIGRpY3Rpb25hcmllcyB0aGF0IGNvbnRhaW4gYVxucmVmZXJlbmNlIHRvIHRoZW1zZWx2ZXMsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIHVzZSBgYC4uLmBgIHRvXG5pbmRpY2F0ZSBhIHJlY3Vyc2l2ZSByZWZlcmVuY2UsIGFuZCB0aGUgcmVzdWx0IGNhbm5vdCBiZSBwYXNzZWQgdG9cbmBgZXZhbCgpYGAgdG8gZ2V0IGFuIGVxdWFsIHZhbHVlIChgYFN5bnRheEVycm9yYGAgd2lsbCBiZSByYWlzZWRcbmluc3RlYWQpLlxuXG5UaGUgYnVpbHQtaW4gZnVuY3Rpb24gYGByZXByKClgYCBwZXJmb3JtcyBleGFjdGx5IHRoZSBzYW1lIGNvbnZlcnNpb25cbmluIGl0cyBhcmd1bWVudCBhcyBlbmNsb3NpbmcgaXQgaW4gcGFyZW50aGVzZXMgYW5kIHJldmVyc2UgcXVvdGVzXG5kb2VzLiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgc3RyKClgYCBwZXJmb3JtcyBhIHNpbWlsYXIgYnV0IG1vcmVcbnVzZXItZnJpZW5kbHkgY29udmVyc2lvbi5cbicsCi0gJ3N0cmluZy1tZXRob2RzJzogdSdcblN0cmluZyBNZXRob2RzXG4qKioqKioqKioqKioqKlxuXG5CZWxvdyBhcmUgbGlzdGVkIHRoZSBzdHJpbmcgbWV0aG9kcyB3aGljaCBib3RoIDgtYml0IHN0cmluZ3MgYW5kXG5Vbmljb2RlIG9iamVjdHMgc3VwcG9ydC4gTm90ZSB0aGF0IG5vbmUgb2YgdGhlc2UgbWV0aG9kcyB0YWtlIGtleXdvcmRcbmFyZ3VtZW50cy5cblxuSW4gYWRkaXRpb24sIFB5dGhvblwncyBzdHJpbmdzIHN1cHBvcnQgdGhlIHNlcXVlbmNlIHR5cGUgbWV0aG9kc1xuZGVzY3JpYmVkIGluIHRoZSAqU2VxdWVuY2UgVHlwZXMgLS0tIHN0ciwgdW5pY29kZSwgbGlzdCwgdHVwbGUsXG5idWZmZXIsIHhyYW5nZSogc2VjdGlvbi4gVG8gb3V0cHV0IGZvcm1hdHRlZCBzdHJpbmdzIHVzZSB0ZW1wbGF0ZVxuc3RyaW5ncyBvciB0aGUgYGAlYGAgb3BlcmF0b3IgZGVzY3JpYmVkIGluIHRoZSAqU3RyaW5nIEZvcm1hdHRpbmdcbk9wZXJhdGlvbnMqIHNlY3Rpb24uIEFsc28sIHNlZSB0aGUgYGByZWBgIG1vZHVsZSBmb3Igc3RyaW5nIGZ1bmN0aW9uc1xuYmFzZWQgb24gcmVndWxhciBleHByZXNzaW9ucy5cblxuc3RyLmNhcGl0YWxpemUoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBpdHMgZmlyc3QgY2hhcmFjdGVyIGNhcGl0YWxpemVkXG4gICBhbmQgdGhlIHJlc3QgbG93ZXJjYXNlZC5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yIHRoZSAqZmlsbGNoYXIqIGFyZ3VtZW50LlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmRlY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSlcblxuICAgRGVjb2RlcyB0aGUgc3RyaW5nIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciAqZW5jb2RpbmcqLlxuICAgKmVuY29kaW5nKiBkZWZhdWx0cyB0byB0aGUgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXlcbiAgIGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBpc1xuICAgYGBcJ3N0cmljdFwnYGAsIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYGBVbmljb2RlRXJyb3JgYC5cbiAgIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGBcJ2lnbm9yZVwnYGAsIGBgXCdyZXBsYWNlXCdgYCBhbmQgYW55IG90aGVyXG4gICBuYW1lIHJlZ2lzdGVyZWQgdmlhIGBgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKClgYCwgc2VlIHNlY3Rpb24gKkNvZGVjXG4gICBCYXNlIENsYXNzZXMqLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIG90aGVyIGVycm9yIGhhbmRsaW5nIHNjaGVtZXNcbiAgIGFkZGVkLlxuXG5zdHIuZW5jb2RlKFtlbmNvZGluZ1ssIGVycm9yc11dKVxuXG4gICBSZXR1cm4gYW4gZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuICBEZWZhdWx0IGVuY29kaW5nIGlzIHRoZVxuICAgY3VycmVudCBkZWZhdWx0IHN0cmluZyBlbmNvZGluZy4gICplcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgYVxuICAgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gIFRoZSBkZWZhdWx0IGZvciAqZXJyb3JzKiBpc1xuICAgYGBcJ3N0cmljdFwnYGAsIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYVxuICAgYGBVbmljb2RlRXJyb3JgYC4gIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGBcJ2lnbm9yZVwnYGAsXG4gICBgYFwncmVwbGFjZVwnYGAsIGBgXCd4bWxjaGFycmVmcmVwbGFjZVwnYGAsIGBgXCdiYWNrc2xhc2hyZXBsYWNlXCdgYCBhbmRcbiAgIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgdmlhIGBgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKClgYCwgc2VlXG4gICBzZWN0aW9uICpDb2RlYyBCYXNlIENsYXNzZXMqLiBGb3IgYSBsaXN0IG9mIHBvc3NpYmxlIGVuY29kaW5ncywgc2VlXG4gICBzZWN0aW9uICpTdGFuZGFyZCBFbmNvZGluZ3MqLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIGBgXCd4bWxjaGFycmVmcmVwbGFjZVwnYGAgYW5kXG4gICBgYFwnYmFja3NsYXNocmVwbGFjZVwnYGAgYW5kIG90aGVyIGVycm9yIGhhbmRsaW5nIHNjaGVtZXMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZlxuICAgc3VmZml4ZXMgdG8gbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0XG4gICB0aGF0IHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEFjY2VwdCB0dXBsZXMgYXMgKnN1ZmZpeCouXG5cbnN0ci5leHBhbmR0YWJzKFt0YWJzaXplXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRoZSBjb2x1bW4gbnVtYmVyIGlzIHJlc2V0IHRvIHplcm8gYWZ0ZXIgZWFjaFxuICAgbmV3bGluZSBvY2N1cnJpbmcgaW4gdGhlIHN0cmluZy4gSWYgKnRhYnNpemUqIGlzIG5vdCBnaXZlbiwgYSB0YWJcbiAgIHNpemUgb2YgYGA4YGAgY2hhcmFjdGVycyBpcyBhc3N1bWVkLiAgVGhpcyBkb2VzblwndCB1bmRlcnN0YW5kIG90aGVyXG4gICBub24tcHJpbnRpbmcgY2hhcmFjdGVycyBvciBlc2NhcGUgc2VxdWVuY2VzLlxuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzIGBge31gYC4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG4gICBUaGlzIG1ldGhvZCBvZiBzdHJpbmcgZm9ybWF0dGluZyBpcyB0aGUgbmV3IHN0YW5kYXJkIGluIFB5dGhvbiAzLjAsXG4gICBhbmQgc2hvdWxkIGJlIHByZWZlcnJlZCB0byB0aGUgYGAlYGAgZm9ybWF0dGluZyBkZXNjcmliZWQgaW5cbiAgICpTdHJpbmcgRm9ybWF0dGluZyBPcGVyYXRpb25zKiBpbiBuZXcgY29kZS5cblxuICAgTmV3IGluIHZlcnNpb24gMi42LlxuXG5zdHIuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSBgYGZpbmQoKWBgLCBidXQgcmFpc2UgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdFxuICAgZm91bmQuXG5cbnN0ci5pc2FsbnVtKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFudW1lcmljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzZGlnaXQoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkaWdpdHMgYW5kIHRoZXJlIGlzXG4gICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZSBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc3NwYWNlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmdcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXN0aXRsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB0aXRsZWNhc2VkIHN0cmluZyBhbmQgdGhlcmUgaXMgYXRcbiAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZvciBleGFtcGxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5XG4gICBmb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuXG4gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2UgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZVxuICAgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiAgVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhblxuICAgYGBsZW4ocylgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgdGhlICpmaWxsY2hhciogYXJndW1lbnQuXG5cbnN0ci5sb3dlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICBcJ3NwYWNpb3VzICAgXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlLmNvbVwnXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjIuMjogU3VwcG9ydCBmb3IgdGhlICpjaGFycyogYXJndW1lbnQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgb24gZmFpbHVyZS5cblxuc3RyLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgcmZpbmQoKWBgIGJ1dCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nICpzdWIqXG4gICBpcyBub3QgZm91bmQuXG5cbnN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW5cbiAgIGBgbGVuKHMpYGAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yIHRoZSAqZmlsbGNoYXIqIGFyZ3VtZW50LlxuXG5zdHIucnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgc3RyaW5ncywgZm9sbG93ZWQgYnlcbiAgIHRoZSBzdHJpbmcgaXRzZWxmLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjUuXG5cbnN0ci5yc3BsaXQoW3NlcFssIG1heHNwbGl0XV0pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgYGBOb25lYGAsIGFueSB3aGl0ZXNwYWNlIHN0cmluZyBpcyBhIHNlcGFyYXRvci4gIEV4Y2VwdCBmb3JcbiAgIHNwbGl0dGluZyBmcm9tIHRoZSByaWdodCwgYGByc3BsaXQoKWBgIGJlaGF2ZXMgbGlrZSBgYHNwbGl0KClgYFxuICAgd2hpY2ggaXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuICAgTmV3IGluIHZlcnNpb24gMi40LlxuXG5zdHIucnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRyYWlsaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICBcJyAgIHNwYWNpb3VzXCdcbiAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICBcJ21pc3Npc3NcJ1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4yLjI6IFN1cHBvcnQgZm9yIHRoZSAqY2hhcnMqIGFyZ3VtZW50LlxuXG5zdHIuc3BsaXQoW3NlcFssIG1heHNwbGl0XV0pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCBgYG1heHNwbGl0KzFgYFxuICAgZWxlbWVudHMpLiAgSWYgKm1heHNwbGl0KiBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZXJlIGlzIG5vIGxpbWl0XG4gICBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxLCwyXCcuc3BsaXQoXCcsXCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCdcJywgXCcyXCddYGApLiAgVGhlICpzZXAqXG4gICBhcmd1bWVudCBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxPD4yPD4zXCcuc3BsaXQoXCc8PlwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCkuIFNwbGl0dGluZ1xuICAgYW4gZW1wdHkgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgc2VwYXJhdG9yIHJldHVybnMgYGBbXCdcJ11gYC5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyBgYE5vbmVgYCwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgYGBOb25lYGAgc2VwYXJhdG9yIHJldHVybnNcbiAgIGBgW11gYC5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCcgMSAgMiAgIDMgIFwnLnNwbGl0KClgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGAsXG4gICBhbmQgYGBcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyICAgMyAgXCddYGAuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuICBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbnN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2VcbiAgIHJldHVybiBgYEZhbHNlYGAuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9va1xuICAgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEFjY2VwdCB0dXBsZXMgYXMgKnByZWZpeCouXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKlxuICAgYXJndW1lbnQgaXMgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0c1xuICAgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5zdHJpcCgpXG4gICBcJ3NwYWNpb3VzXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLnN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGVcJ1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4yLjI6IFN1cHBvcnQgZm9yIHRoZSAqY2hhcnMqIGFyZ3VtZW50LlxuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci50aXRsZSgpXG5cbiAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW5cbiAgIHVwcGVyY2FzZSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLlxuXG4gICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhXG4gICB3b3JkIGFzIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW5cbiAgIG1hbnkgY29udGV4dHMgYnV0IGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZFxuICAgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWRcbiAgIHJlc3VsdDpcblxuICAgICAgPj4+ICJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMgZnJvbSB0aGUgVUsiLnRpdGxlKClcbiAgICAgICJUaGV5XCdSZSBCaWxsXCdTIEZyaWVuZHMgRnJvbSBUaGUgVWsiXG5cbiAgIEEgd29ya2Fyb3VuZCBmb3IgYXBvc3Ryb3BoZXMgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHJlZ3VsYXJcbiAgIGV4cHJlc3Npb25zOlxuXG4gICAgICA+Pj4gaW1wb3J0IHJlXG4gICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKTpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlLnN1YihyIltBLVphLXpdKyhcJ1tBLVphLXpdKyk/IixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgbW86IG1vLmdyb3VwKDApWzBdLnVwcGVyKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8uZ3JvdXAoMClbMTpdLmxvd2VyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcylcblxuICAgICAgPj4+IHRpdGxlY2FzZSgidGhleVwncmUgYmlsbFwncyBmcmllbmRzLiIpXG4gICAgICAiVGhleVwncmUgQmlsbFwncyBGcmllbmRzLiJcblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci50cmFuc2xhdGUodGFibGVbLCBkZWxldGVjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgY2hhcmFjdGVycyBvY2N1cnJpbmcgaW4gdGhlXG4gICBvcHRpb25hbCBhcmd1bWVudCAqZGVsZXRlY2hhcnMqIGFyZSByZW1vdmVkLCBhbmQgdGhlIHJlbWFpbmluZ1xuICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLFxuICAgd2hpY2ggbXVzdCBiZSBhIHN0cmluZyBvZiBsZW5ndGggMjU2LlxuXG4gICBZb3UgY2FuIHVzZSB0aGUgYGBtYWtldHJhbnMoKWBgIGhlbHBlciBmdW5jdGlvbiBpbiB0aGUgYGBzdHJpbmdgYFxuICAgbW9kdWxlIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIHRhYmxlLiBGb3Igc3RyaW5nIG9iamVjdHMsIHNldCB0aGVcbiAgICp0YWJsZSogYXJndW1lbnQgdG8gYGBOb25lYGAgZm9yIHRyYW5zbGF0aW9ucyB0aGF0IG9ubHkgZGVsZXRlXG4gICBjaGFyYWN0ZXJzOlxuXG4gICA+Pj4gXCdyZWFkIHRoaXMgc2hvcnQgdGV4dFwnLnRyYW5zbGF0ZShOb25lLCBcJ2FlaW91XCcpXG4gICBcJ3JkIHRocyBzaHJ0IHR4dFwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNjogU3VwcG9ydCBmb3IgYSBgYE5vbmVgYCAqdGFibGUqIGFyZ3VtZW50LlxuXG4gICBGb3IgVW5pY29kZSBvYmplY3RzLCB0aGUgYGB0cmFuc2xhdGUoKWBgIG1ldGhvZCBkb2VzIG5vdCBhY2NlcHQgdGhlXG4gICBvcHRpb25hbCAqZGVsZXRlY2hhcnMqIGFyZ3VtZW50LiAgSW5zdGVhZCwgaXQgcmV0dXJucyBhIGNvcHkgb2YgdGhlXG4gICAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlblxuICAgdHJhbnNsYXRpb24gdGFibGUgd2hpY2ggbXVzdCBiZSBhIG1hcHBpbmcgb2YgVW5pY29kZSBvcmRpbmFscyB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgVW5pY29kZSBzdHJpbmdzIG9yIGBgTm9uZWBgLiBVbm1hcHBlZCBjaGFyYWN0ZXJzXG4gICBhcmUgbGVmdCB1bnRvdWNoZWQuIENoYXJhY3RlcnMgbWFwcGVkIHRvIGBgTm9uZWBgIGFyZSBkZWxldGVkLlxuICAgTm90ZSwgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbSBjaGFyYWN0ZXJcbiAgIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlIGBgY29kZWNzYGAgbW9kdWxlIChzZWUgYGBlbmNvZGluZ3MuY3AxMjUxYGBcbiAgIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuemZpbGwod2lkdGgpXG5cbiAgIFJldHVybiB0aGUgbnVtZXJpYyBzdHJpbmcgbGVmdCBmaWxsZWQgd2l0aCB6ZXJvcyBpbiBhIHN0cmluZyBvZlxuICAgbGVuZ3RoICp3aWR0aCouICBBIHNpZ24gcHJlZml4IGlzIGhhbmRsZWQgY29ycmVjdGx5LiAgVGhlIG9yaWdpbmFsXG4gICBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gYGBsZW4ocylgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLjIuXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgcHJlc2VudCBvbmx5IG9uIHVuaWNvZGUgb2JqZWN0czpcblxudW5pY29kZS5pc251bWVyaWMoKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlcmUgYXJlIG9ubHkgbnVtZXJpYyBjaGFyYWN0ZXJzIGluIFMsXG4gICBgYEZhbHNlYGAgb3RoZXJ3aXNlLiBOdW1lcmljIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLFxuICAgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSB0aGUgVW5pY29kZSBudW1lcmljIHZhbHVlIHByb3BlcnR5LFxuICAgZS5nLiBVKzIxNTUsIFZVTEdBUiBGUkFDVElPTiBPTkUgRklGVEguXG5cbnVuaWNvZGUuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZXJlIGFyZSBvbmx5IGRlY2ltYWwgY2hhcmFjdGVycyBpbiBTLFxuICAgYGBGYWxzZWBgIG90aGVyd2lzZS4gRGVjaW1hbCBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycyxcbiAgIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZm9ybSBkZWNpbWFsLXJhZGl4XG4gICBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUIFpFUk8uXG4nLAorICdzdHJpbmctbWV0aG9kcyc6IHUnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuQmVsb3cgYXJlIGxpc3RlZCB0aGUgc3RyaW5nIG1ldGhvZHMgd2hpY2ggYm90aCA4LWJpdCBzdHJpbmdzIGFuZFxuVW5pY29kZSBvYmplY3RzIHN1cHBvcnQuXG5cbkluIGFkZGl0aW9uLCBQeXRob25cJ3Mgc3RyaW5ncyBzdXBwb3J0IHRoZSBzZXF1ZW5jZSB0eXBlIG1ldGhvZHNcbmRlc2NyaWJlZCBpbiB0aGUgKlNlcXVlbmNlIFR5cGVzIC0tLSBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlLFxuYnVmZmVyLCB4cmFuZ2UqIHNlY3Rpb24uIFRvIG91dHB1dCBmb3JtYXR0ZWQgc3RyaW5ncyB1c2UgdGVtcGxhdGVcbnN0cmluZ3Mgb3IgdGhlIGBgJWBgIG9wZXJhdG9yIGRlc2NyaWJlZCBpbiB0aGUgKlN0cmluZyBGb3JtYXR0aW5nXG5PcGVyYXRpb25zKiBzZWN0aW9uLiBBbHNvLCBzZWUgdGhlIGBgcmVgYCBtb2R1bGUgZm9yIHN0cmluZyBmdW5jdGlvbnNcbmJhc2VkIG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggb25seSBpdHMgZmlyc3QgY2hhcmFjdGVyXG4gICBjYXBpdGFsaXplZC5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yIHRoZSAqZmlsbGNoYXIqIGFyZ3VtZW50LlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmRlY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSlcblxuICAgRGVjb2RlcyB0aGUgc3RyaW5nIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciAqZW5jb2RpbmcqLlxuICAgKmVuY29kaW5nKiBkZWZhdWx0cyB0byB0aGUgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXlcbiAgIGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBpc1xuICAgYGBcJ3N0cmljdFwnYGAsIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYGBVbmljb2RlRXJyb3JgYC5cbiAgIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGBcJ2lnbm9yZVwnYGAsIGBgXCdyZXBsYWNlXCdgYCBhbmQgYW55IG90aGVyXG4gICBuYW1lIHJlZ2lzdGVyZWQgdmlhIGBgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKClgYCwgc2VlIHNlY3Rpb24gKkNvZGVjXG4gICBCYXNlIENsYXNzZXMqLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIG90aGVyIGVycm9yIGhhbmRsaW5nIHNjaGVtZXNcbiAgIGFkZGVkLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi43OiBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuc3RyLmVuY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSlcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLiAgRGVmYXVsdCBlbmNvZGluZyBpcyB0aGVcbiAgIGN1cnJlbnQgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGFcbiAgIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXNcbiAgIGBgXCdzdHJpY3RcJ2BgLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGFcbiAgIGBgVW5pY29kZUVycm9yYGAuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLFxuICAgYGBcJ3JlcGxhY2VcJ2BgLCBgYFwneG1sY2hhcnJlZnJlcGxhY2VcJ2BgLCBgYFwnYmFja3NsYXNocmVwbGFjZVwnYGAgYW5kXG4gICBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZVxuICAgc2VjdGlvbiAqQ29kZWMgQmFzZSBDbGFzc2VzKi4gRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZVxuICAgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuICAgTmV3IGluIHZlcnNpb24gMi4wLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBTdXBwb3J0IGZvciBgYFwneG1sY2hhcnJlZnJlcGxhY2VcJ2BgIGFuZFxuICAgYGBcJ2JhY2tzbGFzaHJlcGxhY2VcJ2BgIGFuZCBvdGhlciBlcnJvciBoYW5kbGluZyBzY2hlbWVzIGFkZGVkLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi43OiBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuc3RyLmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkICpzdWZmaXgqLFxuICAgb3RoZXJ3aXNlIHJldHVybiBgYEZhbHNlYGAuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mXG4gICBzdWZmaXhlcyB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXRcbiAgIHRoYXQgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNTogQWNjZXB0IHR1cGxlcyBhcyAqc3VmZml4Ki5cblxuc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZFxuICAgYnkgb25lIG9yIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGVcbiAgIGdpdmVuIHRhYiBzaXplLiAgVGhlIGNvbHVtbiBudW1iZXIgaXMgcmVzZXQgdG8gemVybyBhZnRlciBlYWNoXG4gICBuZXdsaW5lIG9jY3VycmluZyBpbiB0aGUgc3RyaW5nLiBJZiAqdGFic2l6ZSogaXMgbm90IGdpdmVuLCBhIHRhYlxuICAgc2l6ZSBvZiBgYDhgYCBjaGFyYWN0ZXJzIGlzIGFzc3VtZWQuICBUaGlzIGRvZXNuXCd0IHVuZGVyc3RhbmQgb3RoZXJcbiAgIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzIG9yIGVzY2FwZSBzZXF1ZW5jZXMuXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBpZiAqc3ViKiBpcyBub3QgZm91bmQuXG5cbnN0ci5mb3JtYXQoKmFyZ3MsICoqa3dhcmdzKVxuXG4gICBQZXJmb3JtIGEgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0aW9uLiAgVGhlIHN0cmluZyBvbiB3aGljaCB0aGlzXG4gICBtZXRob2QgaXMgY2FsbGVkIGNhbiBjb250YWluIGxpdGVyYWwgdGV4dCBvciByZXBsYWNlbWVudCBmaWVsZHNcbiAgIGRlbGltaXRlZCBieSBicmFjZXMgYGB7fWBgLiAgRWFjaCByZXBsYWNlbWVudCBmaWVsZCBjb250YWlucyBlaXRoZXJcbiAgIHRoZSBudW1lcmljIGluZGV4IG9mIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgb3IgdGhlIG5hbWUgb2YgYVxuICAga2V5d29yZCBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgZWFjaFxuICAgcmVwbGFjZW1lbnQgZmllbGQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZVxuICAgY29ycmVzcG9uZGluZyBhcmd1bWVudC5cblxuICAgPj4+ICJUaGUgc3VtIG9mIDEgKyAyIGlzIHswfSIuZm9ybWF0KDErMilcbiAgIFwnVGhlIHN1bSBvZiAxICsgMiBpcyAzXCdcblxuICAgU2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlvdXNcbiAgIGZvcm1hdHRpbmcgb3B0aW9ucyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaW4gZm9ybWF0IHN0cmluZ3MuXG5cbiAgIFRoaXMgbWV0aG9kIG9mIHN0cmluZyBmb3JtYXR0aW5nIGlzIHRoZSBuZXcgc3RhbmRhcmQgaW4gUHl0aG9uIDMuMCxcbiAgIGFuZCBzaG91bGQgYmUgcHJlZmVycmVkIHRvIHRoZSBgYCVgYCBmb3JtYXR0aW5nIGRlc2NyaWJlZCBpblxuICAgKlN0cmluZyBGb3JtYXR0aW5nIE9wZXJhdGlvbnMqIGluIG5ldyBjb2RlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjYuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgZmluZCgpYGAsIGJ1dCByYWlzZSBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90XG4gICBmb3VuZC5cblxuc3RyLmlzYWxudW0oKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYW51bWVyaWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNkaWdpdCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRpZ2l0cyBhbmQgdGhlcmUgaXNcbiAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc2xvd2VyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbG93ZXJjYXNlIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc3RpdGxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHRpdGxlY2FzZWQgc3RyaW5nIGFuZCB0aGVyZSBpcyBhdFxuICAgbGVhc3Qgb25lIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgbWF5IG9ubHlcbiAgIGZvbGxvdyB1bmNhc2VkIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIG9ubHkgY2FzZWQgb25lcy5cbiAgIFJldHVybiBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXN1cHBlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHVwcGVyY2FzZSBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5qb2luKGl0ZXJhYmxlKVxuXG4gICBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3MgaW4gdGhlXG4gICAqaXRlcmFibGUqICppdGVyYWJsZSouICBUaGUgc2VwYXJhdG9yIGJldHdlZW4gZWxlbWVudHMgaXMgdGhlXG4gICBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuXG4gICBgYGxlbihzKWBgLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBTdXBwb3J0IGZvciB0aGUgKmZpbGxjaGFyKiBhcmd1bWVudC5cblxuc3RyLmxvd2VyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIubHN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcubHN0cmlwKClcbiAgIFwnc3BhY2lvdXMgICBcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcubHN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGUuY29tXCdcblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMi4yOiBTdXBwb3J0IGZvciB0aGUgKmNoYXJzKiBhcmd1bWVudC5cblxuc3RyLnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYsIGZvbGxvd2VkIGJ5XG4gICB0d28gZW1wdHkgc3RyaW5ncy5cblxuICAgTmV3IGluIHZlcnNpb24gMi41LlxuXG5zdHIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqb2xkKlxuICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seVxuICAgdGhlIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLlxuXG5zdHIucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGByZmluZCgpYGAgYnV0IHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgKnN1YipcbiAgIGlzIG5vdCBmb3VuZC5cblxuc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhblxuICAgYGBsZW4ocylgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgdGhlICpmaWxsY2hhciogYXJndW1lbnQuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuc3RyLnJzcGxpdChbc2VwWywgbWF4c3BsaXRdXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCogc3BsaXRzXG4gICBhcmUgZG9uZSwgdGhlICpyaWdodG1vc3QqIG9uZXMuICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yXG4gICBgYE5vbmVgYCwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLiAgRXhjZXB0IGZvclxuICAgc3BsaXR0aW5nIGZyb20gdGhlIHJpZ2h0LCBgYHJzcGxpdCgpYGAgYmVoYXZlcyBsaWtlIGBgc3BsaXQoKWBgXG4gICB3aGljaCBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjQuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjIuMjogU3VwcG9ydCBmb3IgdGhlICpjaGFycyogYXJndW1lbnQuXG5cbnN0ci5zcGxpdChbc2VwWywgbWF4c3BsaXRdXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiAgSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqXG4gICBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0IGBgbWF4c3BsaXQrMWBgXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlcmUgaXMgbm8gbGltaXRcbiAgIG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIChhbGwgcG9zc2libGUgc3BsaXRzIGFyZSBtYWRlKS5cblxuICAgSWYgKnNlcCogaXMgZ2l2ZW4sIGNvbnNlY3V0aXZlIGRlbGltaXRlcnMgYXJlIG5vdCBncm91cGVkIHRvZ2V0aGVyXG4gICBhbmQgYXJlIGRlZW1lZCB0byBkZWxpbWl0IGVtcHR5IHN0cmluZ3MgKGZvciBleGFtcGxlLFxuICAgYGBcJzEsLDJcJy5zcGxpdChcJyxcJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJ1wnLCBcJzJcJ11gYCkuICBUaGUgKnNlcCpcbiAgIGFyZ3VtZW50IG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgYGBcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgKS4gU3BsaXR0aW5nXG4gICBhbiBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyBgYFtcJ1wnXWBgLlxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgTm9uZWBgLCBhIGRpZmZlcmVudCBzcGxpdHRpbmdcbiAgIGFsZ29yaXRobSBpcyBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkXG4gICBhcyBhIHNpbmdsZSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzXG4gICBhdCB0aGUgc3RhcnQgb3IgZW5kIGlmIHRoZSBzdHJpbmcgaGFzIGxlYWRpbmcgb3IgdHJhaWxpbmdcbiAgIHdoaXRlc3BhY2UuICBDb25zZXF1ZW50bHksIHNwbGl0dGluZyBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmdcbiAgIGNvbnNpc3Rpbmcgb2YganVzdCB3aGl0ZXNwYWNlIHdpdGggYSBgYE5vbmVgYCBzZXBhcmF0b3IgcmV0dXJuc1xuICAgYGBbXWBgLlxuXG4gICBGb3IgZXhhbXBsZSwgYGBcJyAxICAyICAgMyAgXCcuc3BsaXQoKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCxcbiAgIGFuZCBgYFwnICAxICAyICAgMyAgXCcuc3BsaXQoTm9uZSwgMSlgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzIgICAzICBcJ11gYC5cblxuc3RyLnNwbGl0bGluZXMoW2tlZXBlbmRzXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZVxuICAgYm91bmRhcmllcy4gIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuc3RyLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZVxuICAgcmV0dXJuIGBgRmFsc2VgYC4gKnByZWZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBwcmVmaXhlcyB0byBsb29rXG4gICBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNTogQWNjZXB0IHR1cGxlcyBhcyAqcHJlZml4Ki5cblxuc3RyLnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgY2hhcmFjdGVycyByZW1vdmVkLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZVxuICAgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqXG4gICBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzXG4gICB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnN0cmlwKClcbiAgIFwnc3BhY2lvdXNcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcuc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZVwnXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjIuMjogU3VwcG9ydCBmb3IgdGhlICpjaGFycyogYXJndW1lbnQuXG5cbnN0ci5zd2FwY2FzZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIGNvbnZlcnRlZCB0b1xuICAgbG93ZXJjYXNlIGFuZCB2aWNlIHZlcnNhLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLnRpdGxlKClcblxuICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhblxuICAgdXBwZXJjYXNlIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuXG5cbiAgIFRoZSBhbGdvcml0aG0gdXNlcyBhIHNpbXBsZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGFcbiAgIHdvcmQgYXMgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGxldHRlcnMuICBUaGUgZGVmaW5pdGlvbiB3b3JrcyBpblxuICAgbWFueSBjb250ZXh0cyBidXQgaXQgbWVhbnMgdGhhdCBhcG9zdHJvcGhlcyBpbiBjb250cmFjdGlvbnMgYW5kXG4gICBwb3NzZXNzaXZlcyBmb3JtIHdvcmQgYm91bmRhcmllcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgZGVzaXJlZFxuICAgcmVzdWx0OlxuXG4gICAgICA+Pj4gInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKVxuICAgICAgIlRoZXlcJ1JlIEJpbGxcJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayJcblxuICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhclxuICAgZXhwcmVzc2lvbnM6XG5cbiAgICAgID4+PiBpbXBvcnQgcmVcbiAgICAgID4+PiBkZWYgdGl0bGVjYXNlKHMpOlxuICAgICAgICAgICAgICByZXR1cm4gcmUuc3ViKHIiW0EtWmEtel0rKFwnW0EtWmEtel0rKT8iLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMF0udXBwZXIoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKVxuXG4gICAgICA+Pj4gdGl0bGVjYXNlKCJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMuIilcbiAgICAgICJUaGV5XCdyZSBCaWxsXCdzIEZyaWVuZHMuIlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLnRyYW5zbGF0ZSh0YWJsZVssIGRlbGV0ZWNoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIG9jY3VycmluZyBpbiB0aGVcbiAgIG9wdGlvbmFsIGFyZ3VtZW50ICpkZWxldGVjaGFycyogYXJlIHJlbW92ZWQsIGFuZCB0aGUgcmVtYWluaW5nXG4gICBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUsXG4gICB3aGljaCBtdXN0IGJlIGEgc3RyaW5nIG9mIGxlbmd0aCAyNTYuXG5cbiAgIFlvdSBjYW4gdXNlIHRoZSBgYG1ha2V0cmFucygpYGAgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBgYHN0cmluZ2BgXG4gICBtb2R1bGUgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gdGFibGUuIEZvciBzdHJpbmcgb2JqZWN0cywgc2V0IHRoZVxuICAgKnRhYmxlKiBhcmd1bWVudCB0byBgYE5vbmVgYCBmb3IgdHJhbnNsYXRpb25zIHRoYXQgb25seSBkZWxldGVcbiAgIGNoYXJhY3RlcnM6XG5cbiAgID4+PiBcJ3JlYWQgdGhpcyBzaG9ydCB0ZXh0XCcudHJhbnNsYXRlKE5vbmUsIFwnYWVpb3VcJylcbiAgIFwncmQgdGhzIHNocnQgdHh0XCdcblxuICAgTmV3IGluIHZlcnNpb24gMi42OiBTdXBwb3J0IGZvciBhIGBgTm9uZWBgICp0YWJsZSogYXJndW1lbnQuXG5cbiAgIEZvciBVbmljb2RlIG9iamVjdHMsIHRoZSBgYHRyYW5zbGF0ZSgpYGAgbWV0aG9kIGRvZXMgbm90IGFjY2VwdCB0aGVcbiAgIG9wdGlvbmFsICpkZWxldGVjaGFycyogYXJndW1lbnQuICBJbnN0ZWFkLCBpdCByZXR1cm5zIGEgY29weSBvZiB0aGVcbiAgICpzKiB3aGVyZSBhbGwgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuXG4gICB0cmFuc2xhdGlvbiB0YWJsZSB3aGljaCBtdXN0IGJlIGEgbWFwcGluZyBvZiBVbmljb2RlIG9yZGluYWxzIHRvXG4gICBVbmljb2RlIG9yZGluYWxzLCBVbmljb2RlIHN0cmluZ3Mgb3IgYGBOb25lYGAuIFVubWFwcGVkIGNoYXJhY3RlcnNcbiAgIGFyZSBsZWZ0IHVudG91Y2hlZC4gQ2hhcmFjdGVycyBtYXBwZWQgdG8gYGBOb25lYGAgYXJlIGRlbGV0ZWQuXG4gICBOb3RlLCBhIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgY3VzdG9tIGNoYXJhY3RlclxuICAgbWFwcGluZyBjb2RlYyB1c2luZyB0aGUgYGBjb2RlY3NgYCBtb2R1bGUgKHNlZSBgYGVuY29kaW5ncy5jcDEyNTFgYFxuICAgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgY29udmVydGVkIHRvIHVwcGVyY2FzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mXG4gICBsZW5ndGggKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWxcbiAgIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBgYGxlbihzKWBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuMi5cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSBwcmVzZW50IG9ubHkgb24gdW5pY29kZSBvYmplY3RzOlxuXG51bmljb2RlLmlzbnVtZXJpYygpXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGVyZSBhcmUgb25seSBudW1lcmljIGNoYXJhY3RlcnMgaW4gUyxcbiAgIGBgRmFsc2VgYCBvdGhlcndpc2UuIE51bWVyaWMgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsXG4gICBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksXG4gICBlLmcuIFUrMjE1NSwgVlVMR0FSIEZSQUNUSU9OIE9ORSBGSUZUSC5cblxudW5pY29kZS5pc2RlY2ltYWwoKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlcmUgYXJlIG9ubHkgZGVjaW1hbCBjaGFyYWN0ZXJzIGluIFMsXG4gICBgYEZhbHNlYGAgb3RoZXJ3aXNlLiBEZWNpbWFsIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLFxuICAgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgdGhhdCBjYW4gYmUgdXNlZCB0byBmb3JtIGRlY2ltYWwtcmFkaXhcbiAgIG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTy5cbicsCiAgJ3N0cmluZ3MnOiB1J1xuU3RyaW5nIGxpdGVyYWxzXG4qKioqKioqKioqKioqKipcblxuU3RyaW5nIGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBzdHJpbmdsaXRlcmFsICAgOjo9IFtzdHJpbmdwcmVmaXhdKHNob3J0c3RyaW5nIHwgbG9uZ3N0cmluZylcbiAgIHN0cmluZ3ByZWZpeCAgICA6Oj0gInIiIHwgInUiIHwgInVyIiB8ICJSIiB8ICJVIiB8ICJVUiIgfCAiVXIiIHwgInVSIlxuICAgc2hvcnRzdHJpbmcgICAgIDo6PSAiXCciIHNob3J0c3RyaW5naXRlbSogIlwnIiB8IFwnIlwnIHNob3J0c3RyaW5naXRlbSogXCciXCdcbiAgIGxvbmdzdHJpbmcgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ3N0cmluZ2l0ZW0qICJcJ1wnXCciXG4gICAgICAgICAgICAgICAgICB8IFwnIiIiXCcgbG9uZ3N0cmluZ2l0ZW0qIFwnIiIiXCdcbiAgIHNob3J0c3RyaW5naXRlbSA6Oj0gc2hvcnRzdHJpbmdjaGFyIHwgZXNjYXBlc2VxXG4gICBsb25nc3RyaW5naXRlbSAgOjo9IGxvbmdzdHJpbmdjaGFyIHwgZXNjYXBlc2VxXG4gICBzaG9ydHN0cmluZ2NoYXIgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdzdHJpbmdjaGFyICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiPlxuICAgZXNjYXBlc2VxICAgICAgIDo6PSAiXFwiIDxhbnkgQVNDSUkgY2hhcmFjdGVyPlxuXG5PbmUgc3ludGFjdGljIHJlc3RyaWN0aW9uIG5vdCBpbmRpY2F0ZWQgYnkgdGhlc2UgcHJvZHVjdGlvbnMgaXMgdGhhdFxud2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZCBiZXR3ZWVuIHRoZSAqKnN0cmluZ3ByZWZpeCoqIGFuZCB0aGUgcmVzdCBvZlxudGhlIHN0cmluZyBsaXRlcmFsLiBUaGUgc291cmNlIGNoYXJhY3RlciBzZXQgaXMgZGVmaW5lZCBieSB0aGVcbmVuY29kaW5nIGRlY2xhcmF0aW9uOyBpdCBpcyBBU0NJSSBpZiBubyBlbmNvZGluZyBkZWNsYXJhdGlvbiBpcyBnaXZlblxuaW4gdGhlIHNvdXJjZSBmaWxlOyBzZWUgc2VjdGlvbiAqRW5jb2RpbmcgZGVjbGFyYXRpb25zKi5cblxuSW4gcGxhaW4gRW5nbGlzaDogU3RyaW5nIGxpdGVyYWxzIGNhbiBiZSBlbmNsb3NlZCBpbiBtYXRjaGluZyBzaW5nbGVcbnF1b3RlcyAoYGBcJ2BgKSBvciBkb3VibGUgcXVvdGVzIChgYCJgYCkuICBUaGV5IGNhbiBhbHNvIGJlIGVuY2xvc2VkIGluXG5tYXRjaGluZyBncm91cHMgb2YgdGhyZWUgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMgKHRoZXNlIGFyZSBnZW5lcmFsbHlcbnJlZmVycmVkIHRvIGFzICp0cmlwbGUtcXVvdGVkIHN0cmluZ3MqKS4gIFRoZSBiYWNrc2xhc2ggKGBgXFxgYClcbmNoYXJhY3RlciBpcyB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgb3RoZXJ3aXNlIGhhdmUgYSBzcGVjaWFsXG5tZWFuaW5nLCBzdWNoIGFzIG5ld2xpbmUsIGJhY2tzbGFzaCBpdHNlbGYsIG9yIHRoZSBxdW90ZSBjaGFyYWN0ZXIuXG5TdHJpbmcgbGl0ZXJhbHMgbWF5IG9wdGlvbmFsbHkgYmUgcHJlZml4ZWQgd2l0aCBhIGxldHRlciBgYFwnclwnYGAgb3JcbmBgXCdSXCdgYDsgc3VjaCBzdHJpbmdzIGFyZSBjYWxsZWQgKnJhdyBzdHJpbmdzKiBhbmQgdXNlIGRpZmZlcmVudCBydWxlc1xuZm9yIGludGVycHJldGluZyBiYWNrc2xhc2ggZXNjYXBlIHNlcXVlbmNlcy4gIEEgcHJlZml4IG9mIGBgXCd1XCdgYCBvclxuYGBcJ1VcJ2BgIG1ha2VzIHRoZSBzdHJpbmcgYSBVbmljb2RlIHN0cmluZy4gIFVuaWNvZGUgc3RyaW5ncyB1c2UgdGhlXG5Vbmljb2RlIGNoYXJhY3RlciBzZXQgYXMgZGVmaW5lZCBieSB0aGUgVW5pY29kZSBDb25zb3J0aXVtIGFuZCBJU09cbjEwNjQ2LiAgU29tZSBhZGRpdGlvbmFsIGVzY2FwZSBzZXF1ZW5jZXMsIGRlc2NyaWJlZCBiZWxvdywgYXJlXG5hdmFpbGFibGUgaW4gVW5pY29kZSBzdHJpbmdzLiBUaGUgdHdvIHByZWZpeCBjaGFyYWN0ZXJzIG1heSBiZVxuY29tYmluZWQ7IGluIHRoaXMgY2FzZSwgYGBcJ3VcJ2BgIG11c3QgYXBwZWFyIGJlZm9yZSBgYFwnclwnYGAuXG5cbkluIHRyaXBsZS1xdW90ZWQgc3RyaW5ncywgdW5lc2NhcGVkIG5ld2xpbmVzIGFuZCBxdW90ZXMgYXJlIGFsbG93ZWRcbihhbmQgYXJlIHJldGFpbmVkKSwgZXhjZXB0IHRoYXQgdGhyZWUgdW5lc2NhcGVkIHF1b3RlcyBpbiBhIHJvd1xudGVybWluYXRlIHRoZSBzdHJpbmcuICAoQSAicXVvdGUiIGlzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBvcGVuIHRoZVxuc3RyaW5nLCBpLmUuIGVpdGhlciBgYFwnYGAgb3IgYGAiYGAuKVxuXG5Vbmxlc3MgYW4gYGBcJ3JcJ2BgIG9yIGBgXCdSXCdgYCBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpblxuc3RyaW5ncyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieVxuU3RhbmRhcmQgQy4gIFRoZSByZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG58IGBgXFxuZXdsaW5lYGAgICAgICB8IElnbm9yZWQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcXFxgYCAgICAgICAgICAgIHwgQmFja3NsYXNoIChgYFxcYGApICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcXCdgYCAgICAgICAgICAgIHwgU2luZ2xlIHF1b3RlIChgYFwnYGApICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcImBgICAgICAgICAgICAgfCBEb3VibGUgcXVvdGUgKGBgImBgKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXGFgYCAgICAgICAgICAgIHwgQVNDSUkgQmVsbCAoQkVMKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxiYGAgICAgICAgICAgICB8IEFTQ0lJIEJhY2tzcGFjZSAoQlMpICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcZmBgICAgICAgICAgICAgfCBBU0NJSSBGb3JtZmVlZCAoRkYpICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXG5gYCAgICAgICAgICAgIHwgQVNDSUkgTGluZWZlZWQgKExGKSAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxOe25hbWV9YGAgICAgICB8IENoYXJhY3RlciBuYW1lZCAqbmFtZSogaW4gdGhlICAgICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8IFVuaWNvZGUgZGF0YWJhc2UgKFVuaWNvZGUgb25seSkgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxccmBgICAgICAgICAgICAgfCBBU0NJSSBDYXJyaWFnZSBSZXR1cm4gKENSKSAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHRgYCAgICAgICAgICAgIHwgQVNDSUkgSG9yaXpvbnRhbCBUYWIgKFRBQikgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFx1eHh4eGBgICAgICAgICB8IENoYXJhY3RlciB3aXRoIDE2LWJpdCBoZXggdmFsdWUgICB8ICgxKSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8ICp4eHh4KiAoVW5pY29kZSBvbmx5KSAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcVXh4eHh4eHh4YGAgICAgfCBDaGFyYWN0ZXIgd2l0aCAzMi1iaXQgaGV4IHZhbHVlICAgfCAoMikgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCAqeHh4eHh4eHgqIChVbmljb2RlIG9ubHkpICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHZgYCAgICAgICAgICAgIHwgQVNDSUkgVmVydGljYWwgVGFiIChWVCkgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxvb29gYCAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIG9jdGFsIHZhbHVlICpvb28qICB8ICgzLDUpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxceGhoYGAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBoZXggdmFsdWUgKmhoKiAgICAgfCAoNCw1KSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuIEluZGl2aWR1YWwgY29kZSB1bml0cyB3aGljaCBmb3JtIHBhcnRzIG9mIGEgc3Vycm9nYXRlIHBhaXIgY2FuIGJlXG4gICBlbmNvZGVkIHVzaW5nIHRoaXMgZXNjYXBlIHNlcXVlbmNlLlxuXG4yLiBBbnkgVW5pY29kZSBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdGhpcyB3YXksIGJ1dCBjaGFyYWN0ZXJzXG4gICBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCkgd2lsbCBiZSBlbmNvZGVkIHVzaW5nIGFcbiAgIHN1cnJvZ2F0ZSBwYWlyIGlmIFB5dGhvbiBpcyBjb21waWxlZCB0byB1c2UgMTYtYml0IGNvZGUgdW5pdHMgKHRoZVxuICAgZGVmYXVsdCkuICBJbmRpdmlkdWFsIGNvZGUgdW5pdHMgd2hpY2ggZm9ybSBwYXJ0cyBvZiBhIHN1cnJvZ2F0ZVxuICAgcGFpciBjYW4gYmUgZW5jb2RlZCB1c2luZyB0aGlzIGVzY2FwZSBzZXF1ZW5jZS5cblxuMy4gQXMgaW4gU3RhbmRhcmQgQywgdXAgdG8gdGhyZWUgb2N0YWwgZGlnaXRzIGFyZSBhY2NlcHRlZC5cblxuNC4gVW5saWtlIGluIFN0YW5kYXJkIEMsIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG41LiBJbiBhIHN0cmluZyBsaXRlcmFsLCBoZXhhZGVjaW1hbCBhbmQgb2N0YWwgZXNjYXBlcyBkZW5vdGUgdGhlIGJ5dGVcbiAgIHdpdGggdGhlIGdpdmVuIHZhbHVlOyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRoYXQgdGhlIGJ5dGUgZW5jb2RlcyBhXG4gICBjaGFyYWN0ZXIgaW4gdGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0LiBJbiBhIFVuaWNvZGUgbGl0ZXJhbCwgdGhlc2VcbiAgIGVzY2FwZXMgZGVub3RlIGEgVW5pY29kZSBjaGFyYWN0ZXIgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuXG5cblVubGlrZSBTdGFuZGFyZCBDLCBhbGwgdW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIGxlZnQgaW4gdGhlXG5zdHJpbmcgdW5jaGFuZ2VkLCBpLmUuLCAqdGhlIGJhY2tzbGFzaCBpcyBsZWZ0IGluIHRoZSBzdHJpbmcqLiAgKFRoaXNcbmJlaGF2aW9yIGlzIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZzogaWYgYW4gZXNjYXBlIHNlcXVlbmNlIGlzIG1pc3R5cGVkLFxudGhlIHJlc3VsdGluZyBvdXRwdXQgaXMgbW9yZSBlYXNpbHkgcmVjb2duaXplZCBhcyBicm9rZW4uKSAgSXQgaXMgYWxzb1xuaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgZXNjYXBlIHNlcXVlbmNlcyBtYXJrZWQgYXMgIihVbmljb2RlIG9ubHkpIlxuaW4gdGhlIHRhYmxlIGFib3ZlIGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgdW5yZWNvZ25pemVkIGVzY2FwZXMgZm9yXG5ub24tVW5pY29kZSBzdHJpbmcgbGl0ZXJhbHMuXG5cbldoZW4gYW4gYGBcJ3JcJ2BgIG9yIGBgXCdSXCdgYCBwcmVmaXggaXMgcHJlc2VudCwgYSBjaGFyYWN0ZXIgZm9sbG93aW5nIGFcbmJhY2tzbGFzaCBpcyBpbmNsdWRlZCBpbiB0aGUgc3RyaW5nIHdpdGhvdXQgY2hhbmdlLCBhbmQgKmFsbFxuYmFja3NsYXNoZXMgYXJlIGxlZnQgaW4gdGhlIHN0cmluZyouICBGb3IgZXhhbXBsZSwgdGhlIHN0cmluZyBsaXRlcmFsXG5gYHIiXFxuImBgIGNvbnNpc3RzIG9mIHR3byBjaGFyYWN0ZXJzOiBhIGJhY2tzbGFzaCBhbmQgYSBsb3dlcmNhc2VcbmBgXCduXCdgYC4gIFN0cmluZyBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCwgYnV0IHRoZVxuYmFja3NsYXNoIHJlbWFpbnMgaW4gdGhlIHN0cmluZzsgZm9yIGV4YW1wbGUsIGBgciJcXCIiYGAgaXMgYSB2YWxpZFxuc3RyaW5nIGxpdGVyYWwgY29uc2lzdGluZyBvZiB0d28gY2hhcmFjdGVyczogYSBiYWNrc2xhc2ggYW5kIGEgZG91YmxlXG5xdW90ZTsgYGByIlxcImBgIGlzIG5vdCBhIHZhbGlkIHN0cmluZyBsaXRlcmFsIChldmVuIGEgcmF3IHN0cmluZ1xuY2Fubm90IGVuZCBpbiBhbiBvZGQgbnVtYmVyIG9mIGJhY2tzbGFzaGVzKS4gIFNwZWNpZmljYWxseSwgKmEgcmF3XG5zdHJpbmcgY2Fubm90IGVuZCBpbiBhIHNpbmdsZSBiYWNrc2xhc2gqIChzaW5jZSB0aGUgYmFja3NsYXNoIHdvdWxkXG5lc2NhcGUgdGhlIGZvbGxvd2luZyBxdW90ZSBjaGFyYWN0ZXIpLiAgTm90ZSBhbHNvIHRoYXQgYSBzaW5nbGVcbmJhY2tzbGFzaCBmb2xsb3dlZCBieSBhIG5ld2xpbmUgaXMgaW50ZXJwcmV0ZWQgYXMgdGhvc2UgdHdvIGNoYXJhY3RlcnNcbmFzIHBhcnQgb2YgdGhlIHN0cmluZywgKm5vdCogYXMgYSBsaW5lIGNvbnRpbnVhdGlvbi5cblxuV2hlbiBhbiBgYFwnclwnYGAgb3IgYGBcJ1JcJ2BgIHByZWZpeCBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYVxuYGBcJ3VcJ2BgIG9yIGBgXCdVXCdgYCBwcmVmaXgsIHRoZW4gdGhlIGBgXFx1WFhYWGBgIGFuZCBgYFxcVVhYWFhYWFhYYGBcbmVzY2FwZSBzZXF1ZW5jZXMgYXJlIHByb2Nlc3NlZCB3aGlsZSAgKmFsbCBvdGhlciBiYWNrc2xhc2hlcyBhcmUgbGVmdFxuaW4gdGhlIHN0cmluZyouIEZvciBleGFtcGxlLCB0aGUgc3RyaW5nIGxpdGVyYWwgYGB1ciJcXHUwMDYyXFxuImBgXG5jb25zaXN0cyBvZiB0aHJlZSBVbmljb2RlIGNoYXJhY3RlcnM6IFwnTEFUSU4gU01BTEwgTEVUVEVSIEJcJywgXCdSRVZFUlNFXG5TT0xJRFVTXCcsIGFuZCBcJ0xBVElOIFNNQUxMIExFVFRFUiBOXCcuIEJhY2tzbGFzaGVzIGNhbiBiZSBlc2NhcGVkIHdpdGhcbmEgcHJlY2VkaW5nIGJhY2tzbGFzaDsgaG93ZXZlciwgYm90aCByZW1haW4gaW4gdGhlIHN0cmluZy4gIEFzIGFcbnJlc3VsdCwgYGBcXHVYWFhYYGAgZXNjYXBlIHNlcXVlbmNlcyBhcmUgb25seSByZWNvZ25pemVkIHdoZW4gdGhlcmUgYXJlXG5hbiBvZGQgbnVtYmVyIG9mIGJhY2tzbGFzaGVzLlxuJywKICAnc3Vic2NyaXB0aW9ucyc6IHUnXG5TdWJzY3JpcHRpb25zXG4qKioqKioqKioqKioqXG5cbkEgc3Vic2NyaXB0aW9uIHNlbGVjdHMgYW4gaXRlbSBvZiBhIHNlcXVlbmNlIChzdHJpbmcsIHR1cGxlIG9yIGxpc3QpXG5vciBtYXBwaW5nIChkaWN0aW9uYXJ5KSBvYmplY3Q6XG5cbiAgIHN1YnNjcmlwdGlvbiA6Oj0gcHJpbWFyeSAiWyIgZXhwcmVzc2lvbl9saXN0ICJdIlxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGFuIG9iamVjdCBvZiBhIHNlcXVlbmNlIG9yIG1hcHBpbmcgdHlwZS5cblxuSWYgdGhlIHByaW1hcnkgaXMgYSBtYXBwaW5nLCB0aGUgZXhwcmVzc2lvbiBsaXN0IG11c3QgZXZhbHVhdGUgdG8gYW5cbm9iamVjdCB3aG9zZSB2YWx1ZSBpcyBvbmUgb2YgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcsIGFuZCB0aGVcbnN1YnNjcmlwdGlvbiBzZWxlY3RzIHRoZSB2YWx1ZSBpbiB0aGUgbWFwcGluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoYXRcbmtleS4gIChUaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGEgdHVwbGUgZXhjZXB0IGlmIGl0IGhhcyBleGFjdGx5IG9uZVxuaXRlbS4pXG5cbklmIHRoZSBwcmltYXJ5IGlzIGEgc2VxdWVuY2UsIHRoZSBleHByZXNzaW9uIChsaXN0KSBtdXN0IGV2YWx1YXRlIHRvIGFcbnBsYWluIGludGVnZXIuICBJZiB0aGlzIHZhbHVlIGlzIG5lZ2F0aXZlLCB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZVxuaXMgYWRkZWQgdG8gaXQgKHNvIHRoYXQsIGUuZy4sIGBgeFstMV1gYCBzZWxlY3RzIHRoZSBsYXN0IGl0ZW0gb2ZcbmBgeGBgLikgIFRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIgbGVzcyB0aGFuXG50aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSwgYW5kIHRoZSBzdWJzY3JpcHRpb24gc2VsZWN0cyB0aGVcbml0ZW0gd2hvc2UgaW5kZXggaXMgdGhhdCB2YWx1ZSAoY291bnRpbmcgZnJvbSB6ZXJvKS5cblxuQSBzdHJpbmdcJ3MgaXRlbXMgYXJlIGNoYXJhY3RlcnMuICBBIGNoYXJhY3RlciBpcyBub3QgYSBzZXBhcmF0ZSBkYXRhXG50eXBlIGJ1dCBhIHN0cmluZyBvZiBleGFjdGx5IG9uZSBjaGFyYWN0ZXIuXG4nLAogICd0cnV0aCc6IHUiXG5UcnV0aCBWYWx1ZSBUZXN0aW5nXG4qKioqKioqKioqKioqKioqKioqXG5cbkFueSBvYmplY3QgY2FuIGJlIHRlc3RlZCBmb3IgdHJ1dGggdmFsdWUsIGZvciB1c2UgaW4gYW4gYGBpZmBgIG9yXG5gYHdoaWxlYGAgY29uZGl0aW9uIG9yIGFzIG9wZXJhbmQgb2YgdGhlIEJvb2xlYW4gb3BlcmF0aW9ucyBiZWxvdy4gVGhlXG5mb2xsb3dpbmcgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGZhbHNlOlxuXG4qIGBgTm9uZWBgXG5cbiogYGBGYWxzZWBgXG5cbiogemVybyBvZiBhbnkgbnVtZXJpYyB0eXBlLCBmb3IgZXhhbXBsZSwgYGAwYGAsIGBgMExgYCwgYGAwLjBgYCxcbiAgYGAwamBgLlxuXG4qIGFueSBlbXB0eSBzZXF1ZW5jZSwgZm9yIGV4YW1wbGUsIGBgJydgYCwgYGAoKWBgLCBgYFtdYGAuXG5cbiogYW55IGVtcHR5IG1hcHBpbmcsIGZvciBleGFtcGxlLCBgYHt9YGAuXG5cbiogaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzLCBpZiB0aGUgY2xhc3MgZGVmaW5lcyBhXG4gIGBgX19ub256ZXJvX18oKWBgIG9yIGBgX19sZW5fXygpYGAgbWV0aG9kLCB3aGVuIHRoYXQgbWV0aG9kIHJldHVybnNcbiAgdGhlIGludGVnZXIgemVybyBvciBgYGJvb2xgYCB2YWx1ZSBgYEZhbHNlYGAuIFsxXVxuXG5BbGwgb3RoZXIgdmFsdWVzIGFyZSBjb25zaWRlcmVkIHRydWUgLS0tIHNvIG9iamVjdHMgb2YgbWFueSB0eXBlcyBhcmVcbmFsd2F5cyB0cnVlLlxuXG5PcGVyYXRpb25zIGFuZCBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgQm9vbGVhbiByZXN1bHQgYWx3YXlzXG5yZXR1cm4gYGAwYGAgb3IgYGBGYWxzZWBgIGZvciBmYWxzZSBhbmQgYGAxYGAgb3IgYGBUcnVlYGAgZm9yIHRydWUsXG51bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZC4gKEltcG9ydGFudCBleGNlcHRpb246IHRoZSBCb29sZWFuIG9wZXJhdGlvbnNcbmBgb3JgYCBhbmQgYGBhbmRgYCBhbHdheXMgcmV0dXJuIG9uZSBvZiB0aGVpciBvcGVyYW5kcy4pXG4iLAogICd0cnknOiB1J1xuVGhlIGBgdHJ5YGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbKCJhcyIgfCAiLCIpIHRhcmdldF1dICI6IiBzdWl0ZSkrXG4gICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuICAgICAgICAgICAgICAgICBbImZpbmFsbHkiICI6IiBzdWl0ZV1cbiAgIHRyeTJfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICJmaW5hbGx5IiAiOiIgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNTogSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgUHl0aG9uLFxuYGB0cnlgYC4uLmBgZXhjZXB0YGAuLi5gYGZpbmFsbHlgYCBkaWQgbm90IHdvcmsuIGBgdHJ5YGAuLi5gYGV4Y2VwdGBgXG5oYWQgdG8gYmUgbmVzdGVkIGluIGBgdHJ5YGAuLi5gYGZpbmFsbHlgYC5cblxuVGhlIGBgZXhjZXB0YGAgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuXG5ubyBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgc3VpdGUsIGEgc2VhcmNoIGZvclxuYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgc3RhcnRlZC4gIFRoaXMgc2VhcmNoIGluc3BlY3RzIHRoZSBleGNlcHRcbmNsYXVzZXMgaW4gdHVybiB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBleGNlcHRpb24uICBBblxuZXhwcmVzc2lvbi1sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlc1xuYW55IGV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdFxuZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGVcbnJlc3VsdGluZyBvYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpc1xuY29tcGF0aWJsZSB3aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZVxuZXhjZXB0aW9uIG9iamVjdCwgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZVxuZXhjZXB0aW9uLCBvciwgaW4gdGhlIChkZXByZWNhdGVkKSBjYXNlIG9mIHN0cmluZyBleGNlcHRpb25zLCBpcyB0aGVcbnJhaXNlZCBzdHJpbmcgaXRzZWxmIChub3RlIHRoYXQgdGhlIG9iamVjdCBpZGVudGl0aWVzIG11c3QgbWF0Y2gsIGkuZS5cbml0IG11c3QgYmUgdGhlIHNhbWUgc3RyaW5nIG9iamVjdCwgbm90IGp1c3QgYSBzdHJpbmcgd2l0aCB0aGUgc2FtZVxudmFsdWUpLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlIGBgdHJ5YGAgc3RhdGVtZW50XG5yYWlzZWQgdGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIGFuZCB0aGUgZXhjZXB0XG5jbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0IGNsYXVzZXMgbXVzdCBoYXZlIGFuXG5leGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXMgcmVhY2hlZCwgZXhlY3V0aW9uXG5jb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LiAgKFRoaXMgbWVhbnMgdGhhdFxuaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLCBhbmQgdGhlIGV4Y2VwdGlvblxub2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGUgb3V0ZXIgaGFuZGxlciB3aWxsXG5ub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgYXNzaWduZWQgdG8gdGhyZWUgdmFyaWFibGVzIGluIHRoZSBgYHN5c2BgIG1vZHVsZTpcbmBgc3lzLmV4Y190eXBlYGAgcmVjZWl2ZXMgdGhlIG9iamVjdCBpZGVudGlmeWluZyB0aGUgZXhjZXB0aW9uO1xuYGBzeXMuZXhjX3ZhbHVlYGAgcmVjZWl2ZXMgdGhlIGV4Y2VwdGlvblwncyBwYXJhbWV0ZXI7XG5gYHN5cy5leGNfdHJhY2ViYWNrYGAgcmVjZWl2ZXMgYSB0cmFjZWJhY2sgb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlXG5zdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZVxudGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gVGhlc2UgZGV0YWlscyBhcmUgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGVcbmBgc3lzLmV4Y19pbmZvKClgYCBmdW5jdGlvbiwgd2hpY2ggcmV0dXJucyBhIHR1cGxlIGBgKGV4Y190eXBlLFxuZXhjX3ZhbHVlLCBleGNfdHJhY2ViYWNrKWBgLiAgVXNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIHZhcmlhYmxlcyBpc1xuZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGlzIGZ1bmN0aW9uLCBzaW5jZSB0aGVpciB1c2UgaXMgdW5zYWZlIGluIGFcbnRocmVhZGVkIHByb2dyYW0uICBBcyBvZiBQeXRob24gMS41LCB0aGUgdmFyaWFibGVzIGFyZSByZXN0b3JlZCB0b1xudGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nIGZyb20gYSBmdW5jdGlvblxudGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsIGBgZWxzZWBgIGNsYXVzZSBpcyBleGVjdXRlZCBpZiBhbmQgd2hlbiBjb250cm9sIGZsb3dzIG9mZlxudGhlIGVuZCBvZiB0aGUgYGB0cnlgYCBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSBgYGVsc2VgYCBjbGF1c2VcbmFyZSBub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nIGBgZXhjZXB0YGAgY2xhdXNlcy5cblxuSWYgYGBmaW5hbGx5YGAgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZVxuYGB0cnlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgYGBleGNlcHRgYCBhbmQgYGBlbHNlYGBcbmNsYXVzZXMuICBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90XG5oYW5kbGVkLCB0aGUgZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgYGBmaW5hbGx5YGAgY2xhdXNlIGlzXG5leGVjdXRlZC4gIElmIHRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uLCBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZFxub2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gSWYgdGhlIGBgZmluYWxseWBgIGNsYXVzZSByYWlzZXMgYW5vdGhlclxuZXhjZXB0aW9uIG9yIGV4ZWN1dGVzIGEgYGByZXR1cm5gYCBvciBgYGJyZWFrYGAgc3RhdGVtZW50LCB0aGUgc2F2ZWRcbmV4Y2VwdGlvbiBpcyBsb3N0LiAgVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZVxucHJvZ3JhbSBkdXJpbmcgZXhlY3V0aW9uIG9mIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuXG5cbldoZW4gYSBgYHJldHVybmBgLCBgYGJyZWFrYGAgb3IgYGBjb250aW51ZWBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpblxudGhlIGBgdHJ5YGAgc3VpdGUgb2YgYSBgYHRyeWBgLi4uYGBmaW5hbGx5YGAgc3RhdGVtZW50LCB0aGVcbmBgZmluYWxseWBgIGNsYXVzZSBpcyBhbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBpcyBpbGxlZ2FsIGluIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGFcbnByb2JsZW0gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmVcbmxpZnRlZCBpbiB0aGUgZnV0dXJlKS5cblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgYGByYWlzZWBgIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG4nLAogICd0eXBlcyc6IHUnXG5UaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHlcbioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5CZWxvdyBpcyBhIGxpc3Qgb2YgdGhlIHR5cGVzIHRoYXQgYXJlIGJ1aWx0IGludG8gUHl0aG9uLiAgRXh0ZW5zaW9uXG5tb2R1bGVzICh3cml0dGVuIGluIEMsIEphdmEsIG9yIG90aGVyIGxhbmd1YWdlcywgZGVwZW5kaW5nIG9uIHRoZVxuaW1wbGVtZW50YXRpb24pIGNhbiBkZWZpbmUgYWRkaXRpb25hbCB0eXBlcy4gIEZ1dHVyZSB2ZXJzaW9ucyBvZlxuUHl0aG9uIG1heSBhZGQgdHlwZXMgdG8gdGhlIHR5cGUgaGllcmFyY2h5IChlLmcuLCByYXRpb25hbCBudW1iZXJzLFxuZWZmaWNpZW50bHkgc3RvcmVkIGFycmF5cyBvZiBpbnRlZ2VycywgZXRjLikuXG5cblNvbWUgb2YgdGhlIHR5cGUgZGVzY3JpcHRpb25zIGJlbG93IGNvbnRhaW4gYSBwYXJhZ3JhcGggbGlzdGluZ1xuXCdzcGVjaWFsIGF0dHJpYnV0ZXMuXCcgIFRoZXNlIGFyZSBhdHRyaWJ1dGVzIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlXG5pbXBsZW1lbnRhdGlvbiBhbmQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2UuICBUaGVpciBkZWZpbml0aW9uXG5tYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbk5vbmVcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZSBgYE5vbmVgYC5cbiAgIEl0IGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIG1hbnkgc2l0dWF0aW9ucyxcbiAgIGUuZy4sIGl0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuXG4gICBhbnl0aGluZy4gSXRzIHRydXRoIHZhbHVlIGlzIGZhbHNlLlxuXG5Ob3RJbXBsZW1lbnRlZFxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICBgYE5vdEltcGxlbWVudGVkYGAuIE51bWVyaWMgbWV0aG9kcyBhbmQgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbWF5XG4gICByZXR1cm4gdGhpcyB2YWx1ZSBpZiB0aGV5IGRvIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgdGhlXG4gICBvcGVyYW5kcyBwcm92aWRlZC4gIChUaGUgaW50ZXJwcmV0ZXIgd2lsbCB0aGVuIHRyeSB0aGUgcmVmbGVjdGVkXG4gICBvcGVyYXRpb24sIG9yIHNvbWUgb3RoZXIgZmFsbGJhY2ssIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0b3IuKSAgSXRzXG4gICB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG5FbGxpcHNpc1xuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICBgYEVsbGlwc2lzYGAuIEl0IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHByZXNlbmNlIG9mIHRoZSBgYC4uLmBgXG4gICBzeW50YXggaW4gYSBzbGljZS4gIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG5gYG51bWJlcnMuTnVtYmVyYGBcbiAgIFRoZXNlIGFyZSBjcmVhdGVkIGJ5IG51bWVyaWMgbGl0ZXJhbHMgYW5kIHJldHVybmVkIGFzIHJlc3VsdHMgYnlcbiAgIGFyaXRobWV0aWMgb3BlcmF0b3JzIGFuZCBhcml0aG1ldGljIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIE51bWVyaWNcbiAgIG9iamVjdHMgYXJlIGltbXV0YWJsZTsgb25jZSBjcmVhdGVkIHRoZWlyIHZhbHVlIG5ldmVyIGNoYW5nZXMuXG4gICBQeXRob24gbnVtYmVycyBhcmUgb2YgY291cnNlIHN0cm9uZ2x5IHJlbGF0ZWQgdG8gbWF0aGVtYXRpY2FsXG4gICBudW1iZXJzLCBidXQgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgb2YgbnVtZXJpY2FsIHJlcHJlc2VudGF0aW9uXG4gICBpbiBjb21wdXRlcnMuXG5cbiAgIFB5dGhvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGFuZFxuICAgY29tcGxleCBudW1iZXJzOlxuXG4gICBgYG51bWJlcnMuSW50ZWdyYWxgYFxuICAgICAgVGhlc2UgcmVwcmVzZW50IGVsZW1lbnRzIGZyb20gdGhlIG1hdGhlbWF0aWNhbCBzZXQgb2YgaW50ZWdlcnNcbiAgICAgIChwb3NpdGl2ZSBhbmQgbmVnYXRpdmUpLlxuXG4gICAgICBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgaW50ZWdlcnM6XG5cbiAgICAgIFBsYWluIGludGVnZXJzXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgbnVtYmVycyBpbiB0aGUgcmFuZ2UgLTIxNDc0ODM2NDggdGhyb3VnaFxuICAgICAgICAgMjE0NzQ4MzY0Ny4gKFRoZSByYW5nZSBtYXkgYmUgbGFyZ2VyIG9uIG1hY2hpbmVzIHdpdGggYVxuICAgICAgICAgbGFyZ2VyIG5hdHVyYWwgd29yZCBzaXplLCBidXQgbm90IHNtYWxsZXIuKSAgV2hlbiB0aGUgcmVzdWx0XG4gICAgICAgICBvZiBhbiBvcGVyYXRpb24gd291bGQgZmFsbCBvdXRzaWRlIHRoaXMgcmFuZ2UsIHRoZSByZXN1bHQgaXNcbiAgICAgICAgIG5vcm1hbGx5IHJldHVybmVkIGFzIGEgbG9uZyBpbnRlZ2VyIChpbiBzb21lIGNhc2VzLCB0aGVcbiAgICAgICAgIGV4Y2VwdGlvbiBgYE92ZXJmbG93RXJyb3JgYCBpcyByYWlzZWQgaW5zdGVhZCkuICBGb3IgdGhlXG4gICAgICAgICBwdXJwb3NlIG9mIHNoaWZ0IGFuZCBtYXNrIG9wZXJhdGlvbnMsIGludGVnZXJzIGFyZSBhc3N1bWVkIHRvXG4gICAgICAgICBoYXZlIGEgYmluYXJ5LCAyXCdzIGNvbXBsZW1lbnQgbm90YXRpb24gdXNpbmcgMzIgb3IgbW9yZSBiaXRzLFxuICAgICAgICAgYW5kIGhpZGluZyBubyBiaXRzIGZyb20gdGhlIHVzZXIgKGkuZS4sIGFsbCA0Mjk0OTY3Mjk2XG4gICAgICAgICBkaWZmZXJlbnQgYml0IHBhdHRlcm5zIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50IHZhbHVlcykuXG5cbiAgICAgIExvbmcgaW50ZWdlcnNcbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCBudW1iZXJzIGluIGFuIHVubGltaXRlZCByYW5nZSwgc3ViamVjdCB0b1xuICAgICAgICAgYXZhaWxhYmxlICh2aXJ0dWFsKSBtZW1vcnkgb25seS4gIEZvciB0aGUgcHVycG9zZSBvZiBzaGlmdFxuICAgICAgICAgYW5kIG1hc2sgb3BlcmF0aW9ucywgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgYXNzdW1lZCwgYW5kXG4gICAgICAgICBuZWdhdGl2ZSBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBpbiBhIHZhcmlhbnQgb2YgMlwnc1xuICAgICAgICAgY29tcGxlbWVudCB3aGljaCBnaXZlcyB0aGUgaWxsdXNpb24gb2YgYW4gaW5maW5pdGUgc3RyaW5nIG9mXG4gICAgICAgICBzaWduIGJpdHMgZXh0ZW5kaW5nIHRvIHRoZSBsZWZ0LlxuXG4gICAgICBCb29sZWFuc1xuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IHRoZSB0cnV0aCB2YWx1ZXMgRmFsc2UgYW5kIFRydWUuICBUaGUgdHdvXG4gICAgICAgICBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgdmFsdWVzIEZhbHNlIGFuZCBUcnVlIGFyZSB0aGUgb25seVxuICAgICAgICAgQm9vbGVhbiBvYmplY3RzLiBUaGUgQm9vbGVhbiB0eXBlIGlzIGEgc3VidHlwZSBvZiBwbGFpblxuICAgICAgICAgaW50ZWdlcnMsIGFuZCBCb29sZWFuIHZhbHVlcyBiZWhhdmUgbGlrZSB0aGUgdmFsdWVzIDAgYW5kIDEsXG4gICAgICAgICByZXNwZWN0aXZlbHksIGluIGFsbW9zdCBhbGwgY29udGV4dHMsIHRoZSBleGNlcHRpb24gYmVpbmdcbiAgICAgICAgIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmdzIGBgIkZhbHNlImBgIG9yXG4gICAgICAgICBgYCJUcnVlImBgIGFyZSByZXR1cm5lZCwgcmVzcGVjdGl2ZWx5LlxuXG4gICAgICBUaGUgcnVsZXMgZm9yIGludGVnZXIgcmVwcmVzZW50YXRpb24gYXJlIGludGVuZGVkIHRvIGdpdmUgdGhlXG4gICAgICBtb3N0IG1lYW5pbmdmdWwgaW50ZXJwcmV0YXRpb24gb2Ygc2hpZnQgYW5kIG1hc2sgb3BlcmF0aW9uc1xuICAgICAgaW52b2x2aW5nIG5lZ2F0aXZlIGludGVnZXJzIGFuZCB0aGUgbGVhc3Qgc3VycHJpc2VzIHdoZW5cbiAgICAgIHN3aXRjaGluZyBiZXR3ZWVuIHRoZSBwbGFpbiBhbmQgbG9uZyBpbnRlZ2VyIGRvbWFpbnMuICBBbnlcbiAgICAgIG9wZXJhdGlvbiwgaWYgaXQgeWllbGRzIGEgcmVzdWx0IGluIHRoZSBwbGFpbiBpbnRlZ2VyIGRvbWFpbixcbiAgICAgIHdpbGwgeWllbGQgdGhlIHNhbWUgcmVzdWx0IGluIHRoZSBsb25nIGludGVnZXIgZG9tYWluIG9yIHdoZW5cbiAgICAgIHVzaW5nIG1peGVkIG9wZXJhbmRzLiAgVGhlIHN3aXRjaCBiZXR3ZWVuIGRvbWFpbnMgaXMgdHJhbnNwYXJlbnRcbiAgICAgIHRvIHRoZSBwcm9ncmFtbWVyLlxuXG4gICBgYG51bWJlcnMuUmVhbGBgIChgYGZsb2F0YGApXG4gICAgICBUaGVzZSByZXByZXNlbnQgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50XG4gICAgICBudW1iZXJzLiBZb3UgYXJlIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lXG4gICAgICBhcmNoaXRlY3R1cmUgKGFuZCBDIG9yIEphdmEgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWRcbiAgICAgIHJhbmdlIGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdy4gUHl0aG9uIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlLVxuICAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmRcbiAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGlzXG4gICAgICBkd2FyZmVkIGJ5IHRoZSBvdmVyaGVhZCBvZiB1c2luZyBvYmplY3RzIGluIFB5dGhvbiwgc28gdGhlcmUgaXNcbiAgICAgIG5vIHJlYXNvbiB0byBjb21wbGljYXRlIHRoZSBsYW5ndWFnZSB3aXRoIHR3byBraW5kcyBvZiBmbG9hdGluZ1xuICAgICAgcG9pbnQgbnVtYmVycy5cblxuICAgYGBudW1iZXJzLkNvbXBsZXhgYFxuICAgICAgVGhlc2UgcmVwcmVzZW50IGNvbXBsZXggbnVtYmVycyBhcyBhIHBhaXIgb2YgbWFjaGluZS1sZXZlbFxuICAgICAgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAgVGhlIHNhbWUgY2F2ZWF0cyBhcHBseVxuICAgICAgYXMgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIFRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgb2YgYVxuICAgICAgY29tcGxleCBudW1iZXIgYGB6YGAgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSByZWFkLW9ubHlcbiAgICAgIGF0dHJpYnV0ZXMgYGB6LnJlYWxgYCBhbmQgYGB6LmltYWdgYC5cblxuU2VxdWVuY2VzXG4gICBUaGVzZSByZXByZXNlbnQgZmluaXRlIG9yZGVyZWQgc2V0cyBpbmRleGVkIGJ5IG5vbi1uZWdhdGl2ZVxuICAgbnVtYmVycy4gVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYCByZXR1cm5zIHRoZSBudW1iZXIgb2ZcbiAgIGl0ZW1zIG9mIGEgc2VxdWVuY2UuIFdoZW4gdGhlIGxlbmd0aCBvZiBhIHNlcXVlbmNlIGlzICpuKiwgdGhlXG4gICBpbmRleCBzZXQgY29udGFpbnMgdGhlIG51bWJlcnMgMCwgMSwgLi4uLCAqbiotMS4gIEl0ZW0gKmkqIG9mXG4gICBzZXF1ZW5jZSAqYSogaXMgc2VsZWN0ZWQgYnkgYGBhW2ldYGAuXG5cbiAgIFNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgc2xpY2luZzogYGBhW2k6al1gYCBzZWxlY3RzIGFsbCBpdGVtcyB3aXRoXG4gICBpbmRleCAqayogc3VjaCB0aGF0ICppKiBgYDw9YGAgKmsqIGBgPGBgICpqKi4gIFdoZW4gdXNlZCBhcyBhblxuICAgZXhwcmVzc2lvbiwgYSBzbGljZSBpcyBhIHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUuICBUaGlzIGltcGxpZXNcbiAgIHRoYXQgdGhlIGluZGV4IHNldCBpcyByZW51bWJlcmVkIHNvIHRoYXQgaXQgc3RhcnRzIGF0IDAuXG5cbiAgIFNvbWUgc2VxdWVuY2VzIGFsc28gc3VwcG9ydCAiZXh0ZW5kZWQgc2xpY2luZyIgd2l0aCBhIHRoaXJkICJzdGVwIlxuICAgcGFyYW1ldGVyOiBgYGFbaTpqOmtdYGAgc2VsZWN0cyBhbGwgaXRlbXMgb2YgKmEqIHdpdGggaW5kZXggKngqXG4gICB3aGVyZSBgYHggPSBpICsgbiprYGAsICpuKiBgYD49YGAgYGAwYGAgYW5kICppKiBgYDw9YGAgKngqIGBgPGBgXG4gICAqaiouXG5cbiAgIFNlcXVlbmNlcyBhcmUgZGlzdGluZ3Vpc2hlZCBhY2NvcmRpbmcgdG8gdGhlaXIgbXV0YWJpbGl0eTpcblxuICAgSW1tdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgQW4gb2JqZWN0IG9mIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlIGNhbm5vdCBjaGFuZ2Ugb25jZSBpdCBpc1xuICAgICAgY3JlYXRlZC4gIChJZiB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyxcbiAgICAgIHRoZXNlIG90aGVyIG9iamVjdHMgbWF5IGJlIG11dGFibGUgYW5kIG1heSBiZSBjaGFuZ2VkOyBob3dldmVyLFxuICAgICAgdGhlIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuIGltbXV0YWJsZVxuICAgICAgb2JqZWN0IGNhbm5vdCBjaGFuZ2UuKVxuXG4gICAgICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzOlxuXG4gICAgICBTdHJpbmdzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBzdHJpbmcgYXJlIGNoYXJhY3RlcnMuICBUaGVyZSBpcyBubyBzZXBhcmF0ZVxuICAgICAgICAgY2hhcmFjdGVyIHR5cGU7IGEgY2hhcmFjdGVyIGlzIHJlcHJlc2VudGVkIGJ5IGEgc3RyaW5nIG9mIG9uZVxuICAgICAgICAgaXRlbS4gQ2hhcmFjdGVycyByZXByZXNlbnQgKGF0IGxlYXN0KSA4LWJpdCBieXRlcy4gIFRoZVxuICAgICAgICAgYnVpbHQtaW4gZnVuY3Rpb25zIGBgY2hyKClgYCBhbmQgYGBvcmQoKWBgIGNvbnZlcnQgYmV0d2VlblxuICAgICAgICAgY2hhcmFjdGVycyBhbmQgbm9ubmVnYXRpdmUgaW50ZWdlcnMgcmVwcmVzZW50aW5nIHRoZSBieXRlXG4gICAgICAgICB2YWx1ZXMuICBCeXRlcyB3aXRoIHRoZSB2YWx1ZXMgMC0xMjcgdXN1YWxseSByZXByZXNlbnQgdGhlXG4gICAgICAgICBjb3JyZXNwb25kaW5nIEFTQ0lJIHZhbHVlcywgYnV0IHRoZSBpbnRlcnByZXRhdGlvbiBvZiB2YWx1ZXNcbiAgICAgICAgIGlzIHVwIHRvIHRoZSBwcm9ncmFtLiAgVGhlIHN0cmluZyBkYXRhIHR5cGUgaXMgYWxzbyB1c2VkIHRvXG4gICAgICAgICByZXByZXNlbnQgYXJyYXlzIG9mIGJ5dGVzLCBlLmcuLCB0byBob2xkIGRhdGEgcmVhZCBmcm9tIGFcbiAgICAgICAgIGZpbGUuXG5cbiAgICAgICAgIChPbiBzeXN0ZW1zIHdob3NlIG5hdGl2ZSBjaGFyYWN0ZXIgc2V0IGlzIG5vdCBBU0NJSSwgc3RyaW5nc1xuICAgICAgICAgbWF5IHVzZSBFQkNESUMgaW4gdGhlaXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIHByb3ZpZGVkIHRoZVxuICAgICAgICAgZnVuY3Rpb25zIGBgY2hyKClgYCBhbmQgYGBvcmQoKWBgIGltcGxlbWVudCBhIG1hcHBpbmcgYmV0d2VlblxuICAgICAgICAgQVNDSUkgYW5kIEVCQ0RJQywgYW5kIHN0cmluZyBjb21wYXJpc29uIHByZXNlcnZlcyB0aGUgQVNDSUlcbiAgICAgICAgIG9yZGVyLiBPciBwZXJoYXBzIHNvbWVvbmUgY2FuIHByb3Bvc2UgYSBiZXR0ZXIgcnVsZT8pXG5cbiAgICAgIFVuaWNvZGVcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIFVuaWNvZGUgb2JqZWN0IGFyZSBVbmljb2RlIGNvZGUgdW5pdHMuICBBXG4gICAgICAgICBVbmljb2RlIGNvZGUgdW5pdCBpcyByZXByZXNlbnRlZCBieSBhIFVuaWNvZGUgb2JqZWN0IG9mIG9uZVxuICAgICAgICAgaXRlbSBhbmQgY2FuIGhvbGQgZWl0aGVyIGEgMTYtYml0IG9yIDMyLWJpdCB2YWx1ZVxuICAgICAgICAgcmVwcmVzZW50aW5nIGEgVW5pY29kZSBvcmRpbmFsICh0aGUgbWF4aW11bSB2YWx1ZSBmb3IgdGhlXG4gICAgICAgICBvcmRpbmFsIGlzIGdpdmVuIGluIGBgc3lzLm1heHVuaWNvZGVgYCwgYW5kIGRlcGVuZHMgb24gaG93XG4gICAgICAgICBQeXRob24gaXMgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUpLiAgU3Vycm9nYXRlIHBhaXJzIG1heVxuICAgICAgICAgYmUgcHJlc2VudCBpbiB0aGUgVW5pY29kZSBvYmplY3QsIGFuZCB3aWxsIGJlIHJlcG9ydGVkIGFzIHR3b1xuICAgICAgICAgc2VwYXJhdGUgaXRlbXMuICBUaGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgdW5pY2hyKClgYCBhbmRcbiAgICAgICAgIGBgb3JkKClgYCBjb252ZXJ0IGJldHdlZW4gY29kZSB1bml0cyBhbmQgbm9ubmVnYXRpdmUgaW50ZWdlcnNcbiAgICAgICAgIHJlcHJlc2VudGluZyB0aGUgVW5pY29kZSBvcmRpbmFscyBhcyBkZWZpbmVkIGluIHRoZSBVbmljb2RlXG4gICAgICAgICBTdGFuZGFyZCAzLjAuIENvbnZlcnNpb24gZnJvbSBhbmQgdG8gb3RoZXIgZW5jb2RpbmdzIGFyZVxuICAgICAgICAgcG9zc2libGUgdGhyb3VnaCB0aGUgVW5pY29kZSBtZXRob2QgYGBlbmNvZGUoKWBgIGFuZCB0aGVcbiAgICAgICAgIGJ1aWx0LWluIGZ1bmN0aW9uIGBgdW5pY29kZSgpYGAuXG5cbiAgICAgIFR1cGxlc1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgdHVwbGUgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gVHVwbGVzIG9mXG4gICAgICAgICB0d28gb3IgbW9yZSBpdGVtcyBhcmUgZm9ybWVkIGJ5IGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBvZlxuICAgICAgICAgZXhwcmVzc2lvbnMuICBBIHR1cGxlIG9mIG9uZSBpdGVtIChhIFwnc2luZ2xldG9uXCcpIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFmZml4aW5nIGEgY29tbWEgdG8gYW4gZXhwcmVzc2lvbiAoYW4gZXhwcmVzc2lvbiBieVxuICAgICAgICAgaXRzZWxmIGRvZXMgbm90IGNyZWF0ZSBhIHR1cGxlLCBzaW5jZSBwYXJlbnRoZXNlcyBtdXN0IGJlXG4gICAgICAgICB1c2FibGUgZm9yIGdyb3VwaW5nIG9mIGV4cHJlc3Npb25zKS4gIEFuIGVtcHR5IHR1cGxlIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFuIGVtcHR5IHBhaXIgb2YgcGFyZW50aGVzZXMuXG5cbiAgIE11dGFibGUgc2VxdWVuY2VzXG4gICAgICBNdXRhYmxlIHNlcXVlbmNlcyBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAgVGhlXG4gICAgICBzdWJzY3JpcHRpb24gYW5kIHNsaWNpbmcgbm90YXRpb25zIGNhbiBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2ZcbiAgICAgIGFzc2lnbm1lbnQgYW5kIGBgZGVsYGAgKGRlbGV0ZSkgc3RhdGVtZW50cy5cblxuICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIG11dGFibGUgc2VxdWVuY2UgdHlwZXM6XG5cbiAgICAgIExpc3RzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBsaXN0IGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuICBMaXN0cyBhcmVcbiAgICAgICAgIGZvcm1lZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaW5cbiAgICAgICAgIHNxdWFyZSBicmFja2V0cy4gKE5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjYXNlcyBuZWVkZWRcbiAgICAgICAgIHRvIGZvcm0gbGlzdHMgb2YgbGVuZ3RoIDAgb3IgMS4pXG5cbiAgICAgIEJ5dGUgQXJyYXlzXG4gICAgICAgICBBIGJ5dGVhcnJheSBvYmplY3QgaXMgYSBtdXRhYmxlIGFycmF5LiBUaGV5IGFyZSBjcmVhdGVkIGJ5XG4gICAgICAgICB0aGUgYnVpbHQtaW4gYGBieXRlYXJyYXkoKWBgIGNvbnN0cnVjdG9yLiAgQXNpZGUgZnJvbSBiZWluZ1xuICAgICAgICAgbXV0YWJsZSAoYW5kIGhlbmNlIHVuaGFzaGFibGUpLCBieXRlIGFycmF5cyBvdGhlcndpc2UgcHJvdmlkZVxuICAgICAgICAgdGhlIHNhbWUgaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsaXR5IGFzIGltbXV0YWJsZSBieXRlc1xuICAgICAgICAgb2JqZWN0cy5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGUgYGBhcnJheWBgIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgZXhhbXBsZSBvZlxuICAgICAgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUuXG5cblNldCB0eXBlc1xuICAgVGhlc2UgcmVwcmVzZW50IHVub3JkZXJlZCwgZmluaXRlIHNldHMgb2YgdW5pcXVlLCBpbW11dGFibGVcbiAgIG9iamVjdHMuIEFzIHN1Y2gsIHRoZXkgY2Fubm90IGJlIGluZGV4ZWQgYnkgYW55IHN1YnNjcmlwdC4gSG93ZXZlcixcbiAgIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgXG4gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBzZXQuIENvbW1vbiB1c2VzIGZvciBzZXRzIGFyZSBmYXN0XG4gICBtZW1iZXJzaGlwIHRlc3RpbmcsIHJlbW92aW5nIGR1cGxpY2F0ZXMgZnJvbSBhIHNlcXVlbmNlLCBhbmRcbiAgIGNvbXB1dGluZyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBzdWNoIGFzIGludGVyc2VjdGlvbiwgdW5pb24sXG4gICBkaWZmZXJlbmNlLCBhbmQgc3ltbWV0cmljIGRpZmZlcmVuY2UuXG5cbiAgIEZvciBzZXQgZWxlbWVudHMsIHRoZSBzYW1lIGltbXV0YWJpbGl0eSBydWxlcyBhcHBseSBhcyBmb3JcbiAgIGRpY3Rpb25hcnkga2V5cy4gTm90ZSB0aGF0IG51bWVyaWMgdHlwZXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvclxuICAgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCBgYDFgYCBhbmRcbiAgIGBgMS4wYGApLCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSBjb250YWluZWQgaW4gYSBzZXQuXG5cbiAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBzZXQgdHlwZXM6XG5cbiAgIFNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhIG11dGFibGUgc2V0LiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgYGBzZXQoKWBgIGNvbnN0cnVjdG9yIGFuZCBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyBieSBzZXZlcmFsXG4gICAgICBtZXRob2RzLCBzdWNoIGFzIGBgYWRkKClgYC5cblxuICAgRnJvemVuIHNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhbiBpbW11dGFibGUgc2V0LiAgVGhleSBhcmUgY3JlYXRlZCBieSB0aGVcbiAgICAgIGJ1aWx0LWluIGBgZnJvemVuc2V0KClgYCBjb25zdHJ1Y3Rvci4gIEFzIGEgZnJvemVuc2V0IGlzXG4gICAgICBpbW11dGFibGUgYW5kICpoYXNoYWJsZSosIGl0IGNhbiBiZSB1c2VkIGFnYWluIGFzIGFuIGVsZW1lbnQgb2ZcbiAgICAgIGFub3RoZXIgc2V0LCBvciBhcyBhIGRpY3Rpb25hcnkga2V5LlxuXG5NYXBwaW5nc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBhcmJpdHJhcnkgaW5kZXhcbiAgIHNldHMuIFRoZSBzdWJzY3JpcHQgbm90YXRpb24gYGBhW2tdYGAgc2VsZWN0cyB0aGUgaXRlbSBpbmRleGVkIGJ5XG4gICBgYGtgYCBmcm9tIHRoZSBtYXBwaW5nIGBgYWBgOyB0aGlzIGNhbiBiZSB1c2VkIGluIGV4cHJlc3Npb25zIGFuZFxuICAgYXMgdGhlIHRhcmdldCBvZiBhc3NpZ25tZW50cyBvciBgYGRlbGBgIHN0YXRlbWVudHMuIFRoZSBidWlsdC1pblxuICAgZnVuY3Rpb24gYGBsZW4oKWBgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcHBpbmcuXG5cbiAgIFRoZXJlIGlzIGN1cnJlbnRseSBhIHNpbmdsZSBpbnRyaW5zaWMgbWFwcGluZyB0eXBlOlxuXG4gICBEaWN0aW9uYXJpZXNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgbmVhcmx5XG4gICAgICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhlIG9ubHkgdHlwZXMgb2YgdmFsdWVzIG5vdCBhY2NlcHRhYmxlIGFzXG4gICAgICBrZXlzIGFyZSB2YWx1ZXMgY29udGFpbmluZyBsaXN0cyBvciBkaWN0aW9uYXJpZXMgb3Igb3RoZXJcbiAgICAgIG11dGFibGUgdHlwZXMgdGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG4gICAgICBpZGVudGl0eSwgdGhlIHJlYXNvbiBiZWluZyB0aGF0IHRoZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAgIGRpY3Rpb25hcmllcyByZXF1aXJlcyBhIGtleVwncyBoYXNoIHZhbHVlIHRvIHJlbWFpbiBjb25zdGFudC5cbiAgICAgIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWNcbiAgICAgIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sIGBgMWBgIGFuZFxuICAgICAgYGAxLjBgYCkgdGhlbiB0aGV5IGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB0byBpbmRleCB0aGUgc2FtZVxuICAgICAgZGljdGlvbmFyeSBlbnRyeS5cblxuICAgICAgRGljdGlvbmFyaWVzIGFyZSBtdXRhYmxlOyB0aGV5IGNhbiBiZSBjcmVhdGVkIGJ5IHRoZSBgYHsuLi59YGBcbiAgICAgIG5vdGF0aW9uIChzZWUgc2VjdGlvbiAqRGljdGlvbmFyeSBkaXNwbGF5cyopLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZXMgYGBkYm1gYCwgYGBnZGJtYGAsIGFuZCBgYGJzZGRiYGAgcHJvdmlkZVxuICAgICAgYWRkaXRpb25hbCBleGFtcGxlcyBvZiBtYXBwaW5nIHR5cGVzLlxuXG5DYWxsYWJsZSB0eXBlc1xuICAgVGhlc2UgYXJlIHRoZSB0eXBlcyB0byB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRpb24gKHNlZVxuICAgc2VjdGlvbiAqQ2FsbHMqKSBjYW4gYmUgYXBwbGllZDpcblxuICAgVXNlci1kZWZpbmVkIGZ1bmN0aW9uc1xuICAgICAgQSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGlzIGNyZWF0ZWQgYnkgYSBmdW5jdGlvblxuICAgICAgZGVmaW5pdGlvbiAoc2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKikuICBJdCBzaG91bGQgYmVcbiAgICAgIGNhbGxlZCB3aXRoIGFuIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgIGFzIHRoZSBmdW5jdGlvblwncyBmb3JtYWwgcGFyYW1ldGVyIGxpc3QuXG5cbiAgICAgIFNwZWNpYWwgYXR0cmlidXRlczpcblxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IEF0dHJpYnV0ZSAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09K1xuICAgICAgfCBgYGZ1bmNfZG9jYGAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0cmluZywgb3IgYGBOb25lYGAgaWYgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdW5hdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fZG9jX19gYCAgICAgICAgICAgICB8IEFub3RoZXIgd2F5IG9mIHNwZWxsaW5nICAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBmdW5jX2RvY2BgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYGZ1bmNfbmFtZWBgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBuYW1lICAgICAgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19uYW1lX19gYCAgICAgICAgICAgIHwgQW5vdGhlciB3YXkgb2Ygc3BlbGxpbmcgICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGZ1bmNfbmFtZWBgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19tb2R1bGVfX2BgICAgICAgICAgIHwgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdW5jdGlvbiB3YXMgZGVmaW5lZCBpbiwgb3IgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBmdW5jX2RlZmF1bHRzYGAgICAgICAgfCBBIHR1cGxlIGNvbnRhaW5pbmcgZGVmYXVsdCAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50IHZhbHVlcyBmb3IgdGhvc2UgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJndW1lbnRzIHRoYXQgaGF2ZSBkZWZhdWx0cywgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciBgYE5vbmVgYCBpZiBubyBhcmd1bWVudHMgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGhhdmUgYSBkZWZhdWx0IHZhbHVlICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBmdW5jX2NvZGVgYCAgICAgICAgICAgfCBUaGUgY29kZSBvYmplY3QgcmVwcmVzZW50aW5nICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBjb21waWxlZCBmdW5jdGlvbiBib2R5LiAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBmdW5jX2dsb2JhbHNgYCAgICAgICAgfCBBIHJlZmVyZW5jZSB0byB0aGUgZGljdGlvbmFyeSAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgaG9sZHMgdGhlIGZ1bmN0aW9uXCdzICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGdsb2JhbCB2YXJpYWJsZXMgLS0tIHRoZSBnbG9iYWwgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGUgaW4gICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGljaCB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWQuIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgZnVuY19kaWN0YGAgICAgICAgICAgIHwgVGhlIG5hbWVzcGFjZSBzdXBwb3J0aW5nICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmJpdHJhcnkgZnVuY3Rpb24gYXR0cmlidXRlcy4gIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgZnVuY19jbG9zdXJlYGAgICAgICAgIHwgYGBOb25lYGAgb3IgYSB0dXBsZSBvZiBjZWxscyAgICB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGF0IGNvbnRhaW4gYmluZGluZ3MgZm9yIHRoZSAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1bmN0aW9uXCdzIGZyZWUgdmFyaWFibGVzLiAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG5cbiAgICAgIE1vc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgbGFiZWxsZWQgIldyaXRhYmxlIiBjaGVjayB0aGUgdHlwZSBvZiB0aGVcbiAgICAgIGFzc2lnbmVkIHZhbHVlLlxuXG4gICAgICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBgYGZ1bmNfbmFtZWBgIGlzIG5vdyB3cml0YWJsZS5cblxuICAgICAgRnVuY3Rpb24gb2JqZWN0cyBhbHNvIHN1cHBvcnQgZ2V0dGluZyBhbmQgc2V0dGluZyBhcmJpdHJhcnlcbiAgICAgIGF0dHJpYnV0ZXMsIHdoaWNoIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gYXR0YWNoIG1ldGFkYXRhXG4gICAgICB0byBmdW5jdGlvbnMuICBSZWd1bGFyIGF0dHJpYnV0ZSBkb3Qtbm90YXRpb24gaXMgdXNlZCB0byBnZXQgYW5kXG4gICAgICBzZXQgc3VjaCBhdHRyaWJ1dGVzLiAqTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHlcbiAgICAgIHN1cHBvcnRzIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gRnVuY3Rpb25cbiAgICAgIGF0dHJpYnV0ZXMgb24gYnVpbHQtaW4gZnVuY3Rpb25zIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlXG4gICAgICBmdXR1cmUuKlxuXG4gICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZnVuY3Rpb25cJ3MgZGVmaW5pdGlvbiBjYW4gYmVcbiAgICAgIHJldHJpZXZlZCBmcm9tIGl0cyBjb2RlIG9iamVjdDsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlcm5hbFxuICAgICAgdHlwZXMgYmVsb3cuXG5cbiAgIFVzZXItZGVmaW5lZCBtZXRob2RzXG4gICAgICBBIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGNvbWJpbmVzIGEgY2xhc3MsIGEgY2xhc3MgaW5zdGFuY2VcbiAgICAgIChvciBgYE5vbmVgYCkgYW5kIGFueSBjYWxsYWJsZSBvYmplY3QgKG5vcm1hbGx5IGEgdXNlci1kZWZpbmVkXG4gICAgICBmdW5jdGlvbikuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgaW1fc2VsZmBgIGlzIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgb2JqZWN0LCBgYGltX2Z1bmNgYCBpcyB0aGUgZnVuY3Rpb24gb2JqZWN0OyBgYGltX2NsYXNzYGAgaXMgdGhlXG4gICAgICBjbGFzcyBvZiBgYGltX3NlbGZgYCBmb3IgYm91bmQgbWV0aG9kcyBvciB0aGUgY2xhc3MgdGhhdCBhc2tlZFxuICAgICAgZm9yIHRoZSBtZXRob2QgZm9yIHVuYm91bmQgbWV0aG9kczsgYGBfX2RvY19fYGAgaXMgdGhlIG1ldGhvZFwnc1xuICAgICAgZG9jdW1lbnRhdGlvbiAoc2FtZSBhcyBgYGltX2Z1bmMuX19kb2NfX2BgKTsgYGBfX25hbWVfX2BgIGlzIHRoZVxuICAgICAgbWV0aG9kIG5hbWUgKHNhbWUgYXMgYGBpbV9mdW5jLl9fbmFtZV9fYGApOyBgYF9fbW9kdWxlX19gYCBpc1xuICAgICAgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgbWV0aG9kIHdhcyBkZWZpbmVkIGluLCBvciBgYE5vbmVgYCBpZlxuICAgICAgdW5hdmFpbGFibGUuXG5cbiAgICAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjI6IGBgaW1fc2VsZmBgIHVzZWQgdG8gcmVmZXIgdG8gdGhlIGNsYXNzXG4gICAgICB0aGF0IGRlZmluZWQgdGhlIG1ldGhvZC5cblxuICAgICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNjogRm9yIDMuMCBmb3J3YXJkLWNvbXBhdGliaWxpdHksXG4gICAgICBgYGltX2Z1bmNgYCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBgYF9fZnVuY19fYGAsIGFuZCBgYGltX3NlbGZgYFxuICAgICAgYXMgYGBfX3NlbGZfX2BgLlxuXG4gICAgICBNZXRob2RzIGFsc28gc3VwcG9ydCBhY2Nlc3NpbmcgKGJ1dCBub3Qgc2V0dGluZykgdGhlIGFyYml0cmFyeVxuICAgICAgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0cyBtYXkgYmUgY3JlYXRlZCB3aGVuIGdldHRpbmcgYW5cbiAgICAgIGF0dHJpYnV0ZSBvZiBhIGNsYXNzIChwZXJoYXBzIHZpYSBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzKSwgaWZcbiAgICAgIHRoYXQgYXR0cmlidXRlIGlzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCwgYW4gdW5ib3VuZFxuICAgICAgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QsIG9yIGEgY2xhc3MgbWV0aG9kIG9iamVjdC4gV2hlbiB0aGVcbiAgICAgIGF0dHJpYnV0ZSBpcyBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0LCBhIG5ldyBtZXRob2Qgb2JqZWN0XG4gICAgICBpcyBvbmx5IGNyZWF0ZWQgaWYgdGhlIGNsYXNzIGZyb20gd2hpY2ggaXQgaXMgYmVpbmcgcmV0cmlldmVkIGlzXG4gICAgICB0aGUgc2FtZSBhcywgb3IgYSBkZXJpdmVkIGNsYXNzIG9mLCB0aGUgY2xhc3Mgc3RvcmVkIGluIHRoZVxuICAgICAgb3JpZ2luYWwgbWV0aG9kIG9iamVjdDsgb3RoZXJ3aXNlLCB0aGUgb3JpZ2luYWwgbWV0aG9kIG9iamVjdCBpc1xuICAgICAgdXNlZCBhcyBpdCBpcy5cblxuICAgICAgV2hlbiBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhXG4gICAgICB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGZyb20gYSBjbGFzcywgaXRzIGBgaW1fc2VsZmBgXG4gICAgICBhdHRyaWJ1dGUgaXMgYGBOb25lYGAgYW5kIHRoZSBtZXRob2Qgb2JqZWN0IGlzIHNhaWQgdG8gYmVcbiAgICAgIHVuYm91bmQuIFdoZW4gb25lIGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhIHVzZXItZGVmaW5lZFxuICAgICAgZnVuY3Rpb24gb2JqZWN0IGZyb20gYSBjbGFzcyB2aWEgb25lIG9mIGl0cyBpbnN0YW5jZXMsIGl0c1xuICAgICAgYGBpbV9zZWxmYGAgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZSwgYW5kIHRoZSBtZXRob2Qgb2JqZWN0IGlzXG4gICAgICBzYWlkIHRvIGJlIGJvdW5kLiBJbiBlaXRoZXIgY2FzZSwgdGhlIG5ldyBtZXRob2RcJ3MgYGBpbV9jbGFzc2BgXG4gICAgICBhdHRyaWJ1dGUgaXMgdGhlIGNsYXNzIGZyb20gd2hpY2ggdGhlIHJldHJpZXZhbCB0YWtlcyBwbGFjZSwgYW5kXG4gICAgICBpdHMgYGBpbV9mdW5jYGAgYXR0cmlidXRlIGlzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFdoZW4gYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmdcbiAgICAgIGFub3RoZXIgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIHRoZSBiZWhhdmlvdXIgaXNcbiAgICAgIHRoZSBzYW1lIGFzIGZvciBhIGZ1bmN0aW9uIG9iamVjdCwgZXhjZXB0IHRoYXQgdGhlIGBgaW1fZnVuY2BgXG4gICAgICBhdHRyaWJ1dGUgb2YgdGhlIG5ldyBpbnN0YW5jZSBpcyBub3QgdGhlIG9yaWdpbmFsIG1ldGhvZCBvYmplY3RcbiAgICAgIGJ1dCBpdHMgYGBpbV9mdW5jYGAgYXR0cmlidXRlLlxuXG4gICAgICBXaGVuIGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGFcbiAgICAgIGNsYXNzIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCBpdHMgYGBpbV9zZWxmYGBcbiAgICAgIGF0dHJpYnV0ZSBpcyB0aGUgY2xhc3MgaXRzZWxmICh0aGUgc2FtZSBhcyB0aGUgYGBpbV9jbGFzc2BgXG4gICAgICBhdHRyaWJ1dGUpLCBhbmQgaXRzIGBgaW1fZnVuY2BgIGF0dHJpYnV0ZSBpcyB0aGUgZnVuY3Rpb24gb2JqZWN0XG4gICAgICB1bmRlcmx5aW5nIHRoZSBjbGFzcyBtZXRob2QuXG5cbiAgICAgIFdoZW4gYW4gdW5ib3VuZCB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCBpcyBjYWxsZWQsIHRoZVxuICAgICAgdW5kZXJseWluZyBmdW5jdGlvbiAoYGBpbV9mdW5jYGApIGlzIGNhbGxlZCwgd2l0aCB0aGVcbiAgICAgIHJlc3RyaWN0aW9uIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgdGhlXG4gICAgICBwcm9wZXIgY2xhc3MgKGBgaW1fY2xhc3NgYCkgb3Igb2YgYSBkZXJpdmVkIGNsYXNzIHRoZXJlb2YuXG5cbiAgICAgIFdoZW4gYSBib3VuZCB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCBpcyBjYWxsZWQsIHRoZVxuICAgICAgdW5kZXJseWluZyBmdW5jdGlvbiAoYGBpbV9mdW5jYGApIGlzIGNhbGxlZCwgaW5zZXJ0aW5nIHRoZSBjbGFzc1xuICAgICAgaW5zdGFuY2UgKGBgaW1fc2VsZmBgKSBpbiBmcm9udCBvZiB0aGUgYXJndW1lbnQgbGlzdC4gIEZvclxuICAgICAgaW5zdGFuY2UsIHdoZW4gYGBDYGAgaXMgYSBjbGFzcyB3aGljaCBjb250YWlucyBhIGRlZmluaXRpb24gZm9yXG4gICAgICBhIGZ1bmN0aW9uIGBgZigpYGAsIGFuZCBgYHhgYCBpcyBhbiBpbnN0YW5jZSBvZiBgYENgYCwgY2FsbGluZ1xuICAgICAgYGB4LmYoMSlgYCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBDLmYoeCwgMSlgYC5cblxuICAgICAgV2hlbiBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGlzIGRlcml2ZWQgZnJvbSBhIGNsYXNzIG1ldGhvZFxuICAgICAgb2JqZWN0LCB0aGUgImNsYXNzIGluc3RhbmNlIiBzdG9yZWQgaW4gYGBpbV9zZWxmYGAgd2lsbCBhY3R1YWxseVxuICAgICAgYmUgdGhlIGNsYXNzIGl0c2VsZiwgc28gdGhhdCBjYWxsaW5nIGVpdGhlciBgYHguZigxKWBgIG9yXG4gICAgICBgYEMuZigxKWBgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYGYoQywxKWBgIHdoZXJlIGBgZmBgIGlzXG4gICAgICB0aGUgdW5kZXJseWluZyBmdW5jdGlvbi5cblxuICAgICAgTm90ZSB0aGF0IHRoZSB0cmFuc2Zvcm1hdGlvbiBmcm9tIGZ1bmN0aW9uIG9iamVjdCB0byAodW5ib3VuZCBvclxuICAgICAgYm91bmQpIG1ldGhvZCBvYmplY3QgaGFwcGVucyBlYWNoIHRpbWUgdGhlIGF0dHJpYnV0ZSBpc1xuICAgICAgcmV0cmlldmVkIGZyb20gdGhlIGNsYXNzIG9yIGluc3RhbmNlLiBJbiBzb21lIGNhc2VzLCBhIGZydWl0ZnVsXG4gICAgICBvcHRpbWl6YXRpb24gaXMgdG8gYXNzaWduIHRoZSBhdHRyaWJ1dGUgdG8gYSBsb2NhbCB2YXJpYWJsZSBhbmRcbiAgICAgIGNhbGwgdGhhdCBsb2NhbCB2YXJpYWJsZS4gQWxzbyBub3RpY2UgdGhhdCB0aGlzIHRyYW5zZm9ybWF0aW9uXG4gICAgICBvbmx5IGhhcHBlbnMgZm9yIHVzZXItZGVmaW5lZCBmdW5jdGlvbnM7IG90aGVyIGNhbGxhYmxlIG9iamVjdHNcbiAgICAgIChhbmQgYWxsIG5vbi1jYWxsYWJsZSBvYmplY3RzKSBhcmUgcmV0cmlldmVkIHdpdGhvdXRcbiAgICAgIHRyYW5zZm9ybWF0aW9uLiAgSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHVzZXItZGVmaW5lZFxuICAgICAgZnVuY3Rpb25zIHdoaWNoIGFyZSBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgaW5zdGFuY2UgYXJlIG5vdFxuICAgICAgY29udmVydGVkIHRvIGJvdW5kIG1ldGhvZHM7IHRoaXMgKm9ubHkqIGhhcHBlbnMgd2hlbiB0aGVcbiAgICAgIGZ1bmN0aW9uIGlzIGFuIGF0dHJpYnV0ZSBvZiB0aGUgY2xhc3MuXG5cbiAgIEdlbmVyYXRvciBmdW5jdGlvbnNcbiAgICAgIEEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIHVzZXMgdGhlIGBgeWllbGRgYCBzdGF0ZW1lbnQgKHNlZVxuICAgICAgc2VjdGlvbiAqVGhlIHlpZWxkIHN0YXRlbWVudCopIGlzIGNhbGxlZCBhICpnZW5lcmF0b3IgZnVuY3Rpb24qLlxuICAgICAgU3VjaCBhIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgYWx3YXlzIHJldHVybnMgYW4gaXRlcmF0b3Igb2JqZWN0XG4gICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbjogIGNhbGxpbmdcbiAgICAgIHRoZSBpdGVyYXRvclwncyBgYG5leHQoKWBgIG1ldGhvZCB3aWxsIGNhdXNlIHRoZSBmdW5jdGlvbiB0b1xuICAgICAgZXhlY3V0ZSB1bnRpbCBpdCBwcm92aWRlcyBhIHZhbHVlIHVzaW5nIHRoZSBgYHlpZWxkYGAgc3RhdGVtZW50LlxuICAgICAgV2hlbiB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMgYSBgYHJldHVybmBgIHN0YXRlbWVudCBvciBmYWxscyBvZmZcbiAgICAgIHRoZSBlbmQsIGEgYGBTdG9wSXRlcmF0aW9uYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlXG4gICAgICBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2YgdmFsdWVzIHRvIGJlXG4gICAgICByZXR1cm5lZC5cblxuICAgQnVpbHQtaW4gZnVuY3Rpb25zXG4gICAgICBBIGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgQyBmdW5jdGlvbi5cbiAgICAgIEV4YW1wbGVzIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYGBsZW4oKWBgIGFuZCBgYG1hdGguc2luKClgYFxuICAgICAgKGBgbWF0aGBgIGlzIGEgc3RhbmRhcmQgYnVpbHQtaW4gbW9kdWxlKS4gVGhlIG51bWJlciBhbmQgdHlwZSBvZlxuICAgICAgdGhlIGFyZ3VtZW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgQyBmdW5jdGlvbi4gU3BlY2lhbCByZWFkLVxuICAgICAgb25seSBhdHRyaWJ1dGVzOiBgYF9fZG9jX19gYCBpcyB0aGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvblxuICAgICAgc3RyaW5nLCBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZTsgYGBfX25hbWVfX2BgIGlzIHRoZVxuICAgICAgZnVuY3Rpb25cJ3MgbmFtZTsgYGBfX3NlbGZfX2BgIGlzIHNldCB0byBgYE5vbmVgYCAoYnV0IHNlZSB0aGVcbiAgICAgIG5leHQgaXRlbSk7IGBgX19tb2R1bGVfX2BgIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlXG4gICAgICBmdW5jdGlvbiB3YXMgZGVmaW5lZCBpbiBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS5cblxuICAgQnVpbHQtaW4gbWV0aG9kc1xuICAgICAgVGhpcyBpcyByZWFsbHkgYSBkaWZmZXJlbnQgZGlzZ3Vpc2Ugb2YgYSBidWlsdC1pbiBmdW5jdGlvbiwgdGhpc1xuICAgICAgdGltZSBjb250YWluaW5nIGFuIG9iamVjdCBwYXNzZWQgdG8gdGhlIEMgZnVuY3Rpb24gYXMgYW5cbiAgICAgIGltcGxpY2l0IGV4dHJhIGFyZ3VtZW50LiAgQW4gZXhhbXBsZSBvZiBhIGJ1aWx0LWluIG1ldGhvZCBpc1xuICAgICAgYGBhbGlzdC5hcHBlbmQoKWBgLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluIHRoaXNcbiAgICAgIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgYGBfX3NlbGZfX2BgIGlzIHNldCB0byB0aGVcbiAgICAgIG9iamVjdCBkZW5vdGVkIGJ5ICpsaXN0Ki5cblxuICAgQ2xhc3MgVHlwZXNcbiAgICAgIENsYXNzIHR5cGVzLCBvciAibmV3LXN0eWxlIGNsYXNzZXMsIiBhcmUgY2FsbGFibGUuICBUaGVzZVxuICAgICAgb2JqZWN0cyBub3JtYWxseSBhY3QgYXMgZmFjdG9yaWVzIGZvciBuZXcgaW5zdGFuY2VzIG9mXG4gICAgICB0aGVtc2VsdmVzLCBidXQgdmFyaWF0aW9ucyBhcmUgcG9zc2libGUgZm9yIGNsYXNzIHR5cGVzIHRoYXRcbiAgICAgIG92ZXJyaWRlIGBgX19uZXdfXygpYGAuICBUaGUgYXJndW1lbnRzIG9mIHRoZSBjYWxsIGFyZSBwYXNzZWQgdG9cbiAgICAgIGBgX19uZXdfXygpYGAgYW5kLCBpbiB0aGUgdHlwaWNhbCBjYXNlLCB0byBgYF9faW5pdF9fKClgYCB0b1xuICAgICAgaW5pdGlhbGl6ZSB0aGUgbmV3IGluc3RhbmNlLlxuXG4gICBDbGFzc2ljIENsYXNzZXNcbiAgICAgIENsYXNzIG9iamVjdHMgYXJlIGRlc2NyaWJlZCBiZWxvdy4gIFdoZW4gYSBjbGFzcyBvYmplY3QgaXNcbiAgICAgIGNhbGxlZCwgYSBuZXcgY2xhc3MgaW5zdGFuY2UgKGFsc28gZGVzY3JpYmVkIGJlbG93KSBpcyBjcmVhdGVkXG4gICAgICBhbmQgcmV0dXJuZWQuICBUaGlzIGltcGxpZXMgYSBjYWxsIHRvIHRoZSBjbGFzc1wncyBgYF9faW5pdF9fKClgYFxuICAgICAgbWV0aG9kIGlmIGl0IGhhcyBvbmUuICBBbnkgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24gdG8gdGhlXG4gICAgICBgYF9faW5pdF9fKClgYCBtZXRob2QuICBJZiB0aGVyZSBpcyBubyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICAgICB0aGUgY2xhc3MgbXVzdCBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMuXG5cbiAgIENsYXNzIGluc3RhbmNlc1xuICAgICAgQ2xhc3MgaW5zdGFuY2VzIGFyZSBkZXNjcmliZWQgYmVsb3cuICBDbGFzcyBpbnN0YW5jZXMgYXJlXG4gICAgICBjYWxsYWJsZSBvbmx5IHdoZW4gdGhlIGNsYXNzIGhhcyBhIGBgX19jYWxsX18oKWBgIG1ldGhvZDtcbiAgICAgIGBgeChhcmd1bWVudHMpYGAgaXMgYSBzaG9ydGhhbmQgZm9yIGBgeC5fX2NhbGxfXyhhcmd1bWVudHMpYGAuXG5cbk1vZHVsZXNcbiAgIE1vZHVsZXMgYXJlIGltcG9ydGVkIGJ5IHRoZSBgYGltcG9ydGBgIHN0YXRlbWVudCAoc2VlIHNlY3Rpb24gKlRoZVxuICAgaW1wb3J0IHN0YXRlbWVudCopLiBBIG1vZHVsZSBvYmplY3QgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGJ5XG4gICBhIGRpY3Rpb25hcnkgb2JqZWN0ICh0aGlzIGlzIHRoZSBkaWN0aW9uYXJ5IHJlZmVyZW5jZWQgYnkgdGhlXG4gICBmdW5jX2dsb2JhbHMgYXR0cmlidXRlIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBtb2R1bGUpLlxuICAgQXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHRyYW5zbGF0ZWQgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksXG4gICBlLmcuLCBgYG0ueGBgIGlzIGVxdWl2YWxlbnQgdG8gYGBtLl9fZGljdF9fWyJ4Il1gYC4gQSBtb2R1bGUgb2JqZWN0XG4gICBkb2VzIG5vdCBjb250YWluIHRoZSBjb2RlIG9iamVjdCB1c2VkIHRvIGluaXRpYWxpemUgdGhlIG1vZHVsZVxuICAgKHNpbmNlIGl0IGlzblwndCBuZWVkZWQgb25jZSB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSkuXG5cbiAgIEF0dHJpYnV0ZSBhc3NpZ25tZW50IHVwZGF0ZXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2UgZGljdGlvbmFyeSxcbiAgIGUuZy4sIGBgbS54ID0gMWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBtLl9fZGljdF9fWyJ4Il0gPSAxYGAuXG5cbiAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogYGBfX2RpY3RfX2BgIGlzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlXG4gICBhcyBhIGRpY3Rpb25hcnkgb2JqZWN0LlxuXG4gICBQcmVkZWZpbmVkICh3cml0YWJsZSkgYXR0cmlidXRlczogYGBfX25hbWVfX2BgIGlzIHRoZSBtb2R1bGVcJ3NcbiAgIG5hbWU7IGBgX19kb2NfX2BgIGlzIHRoZSBtb2R1bGVcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIGBgTm9uZWBgXG4gICBpZiB1bmF2YWlsYWJsZTsgYGBfX2ZpbGVfX2BgIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoXG4gICB0aGUgbW9kdWxlIHdhcyBsb2FkZWQsIGlmIGl0IHdhcyBsb2FkZWQgZnJvbSBhIGZpbGUuIFRoZVxuICAgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudCBmb3IgQyBtb2R1bGVzIHRoYXQgYXJlXG4gICBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBpbnRlcnByZXRlcjsgZm9yIGV4dGVuc2lvbiBtb2R1bGVzXG4gICBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCBpdCBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlXG4gICBzaGFyZWQgbGlicmFyeSBmaWxlLlxuXG5DbGFzc2VzXG4gICBCb3RoIGNsYXNzIHR5cGVzIChuZXctc3R5bGUgY2xhc3NlcykgYW5kIGNsYXNzIG9iamVjdHMgKG9sZC1cbiAgIHN0eWxlL2NsYXNzaWMgY2xhc3NlcykgYXJlIHR5cGljYWxseSBjcmVhdGVkIGJ5IGNsYXNzIGRlZmluaXRpb25zXG4gICAoc2VlIHNlY3Rpb24gKkNsYXNzIGRlZmluaXRpb25zKikuICBBIGNsYXNzIGhhcyBhIG5hbWVzcGFjZVxuICAgaW1wbGVtZW50ZWQgYnkgYSBkaWN0aW9uYXJ5IG9iamVjdC4gQ2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlXG4gICB0cmFuc2xhdGVkIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCBgYEMueGBgIGlzXG4gICB0cmFuc2xhdGVkIHRvIGBgQy5fX2RpY3RfX1sieCJdYGAgKGFsdGhvdWdoIGZvciBuZXctc3R5bGUgY2xhc3Nlc1xuICAgaW4gcGFydGljdWxhciB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaG9va3Mgd2hpY2ggYWxsb3cgZm9yIG90aGVyXG4gICBtZWFucyBvZiBsb2NhdGluZyBhdHRyaWJ1dGVzKS4gV2hlbiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgbm90IGZvdW5kXG4gICB0aGVyZSwgdGhlIGF0dHJpYnV0ZSBzZWFyY2ggY29udGludWVzIGluIHRoZSBiYXNlIGNsYXNzZXMuICBGb3JcbiAgIG9sZC1zdHlsZSBjbGFzc2VzLCB0aGUgc2VhcmNoIGlzIGRlcHRoLWZpcnN0LCBsZWZ0LXRvLXJpZ2h0IGluIHRoZVxuICAgb3JkZXIgb2Ygb2NjdXJyZW5jZSBpbiB0aGUgYmFzZSBjbGFzcyBsaXN0LiBOZXctc3R5bGUgY2xhc3NlcyB1c2VcbiAgIHRoZSBtb3JlIGNvbXBsZXggQzMgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgd2hpY2ggYmVoYXZlcyBjb3JyZWN0bHlcbiAgIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIFwnZGlhbW9uZFwnIGluaGVyaXRhbmNlIHN0cnVjdHVyZXMgd2hlcmVcbiAgIHRoZXJlIGFyZSBtdWx0aXBsZSBpbmhlcml0YW5jZSBwYXRocyBsZWFkaW5nIGJhY2sgdG8gYSBjb21tb25cbiAgIGFuY2VzdG9yLiBBZGRpdGlvbmFsIGRldGFpbHMgb24gdGhlIEMzIE1STyB1c2VkIGJ5IG5ldy1zdHlsZVxuICAgY2xhc3NlcyBjYW4gYmUgZm91bmQgaW4gdGhlIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoZSAyLjNcbiAgIHJlbGVhc2UgYXQgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLlxuXG4gICBXaGVuIGEgY2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZSAoZm9yIGNsYXNzIGBgQ2BgLCBzYXkpIHdvdWxkIHlpZWxkXG4gICBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3Qgb3IgYW4gdW5ib3VuZCB1c2VyLWRlZmluZWQgbWV0aG9kXG4gICBvYmplY3Qgd2hvc2UgYXNzb2NpYXRlZCBjbGFzcyBpcyBlaXRoZXIgYGBDYGAgb3Igb25lIG9mIGl0cyBiYXNlXG4gICBjbGFzc2VzLCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIHVuYm91bmQgdXNlci1kZWZpbmVkIG1ldGhvZFxuICAgb2JqZWN0IHdob3NlIGBgaW1fY2xhc3NgYCBhdHRyaWJ1dGUgaXMgYGBDYGAuIFdoZW4gaXQgd291bGQgeWllbGQgYVxuICAgY2xhc3MgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhIGJvdW5kIHVzZXItZGVmaW5lZFxuICAgbWV0aG9kIG9iamVjdCB3aG9zZSBgYGltX2NsYXNzYGAgYW5kIGBgaW1fc2VsZmBgIGF0dHJpYnV0ZXMgYXJlXG4gICBib3RoIGBgQ2BgLiAgV2hlbiBpdCB3b3VsZCB5aWVsZCBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpdCBpc1xuICAgdHJhbnNmb3JtZWQgaW50byB0aGUgb2JqZWN0IHdyYXBwZWQgYnkgdGhlIHN0YXRpYyBtZXRob2Qgb2JqZWN0LlxuICAgU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyogZm9yIGFub3RoZXIgd2F5IGluIHdoaWNoXG4gICBhdHRyaWJ1dGVzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3MgbWF5IGRpZmZlciBmcm9tIHRob3NlIGFjdHVhbGx5XG4gICBjb250YWluZWQgaW4gaXRzIGBgX19kaWN0X19gYCAobm90ZSB0aGF0IG9ubHkgbmV3LXN0eWxlIGNsYXNzZXNcbiAgIHN1cHBvcnQgZGVzY3JpcHRvcnMpLlxuXG4gICBDbGFzcyBhdHRyaWJ1dGUgYXNzaWdubWVudHMgdXBkYXRlIHRoZSBjbGFzc1wncyBkaWN0aW9uYXJ5LCBuZXZlclxuICAgdGhlIGRpY3Rpb25hcnkgb2YgYSBiYXNlIGNsYXNzLlxuXG4gICBBIGNsYXNzIG9iamVjdCBjYW4gYmUgY2FsbGVkIChzZWUgYWJvdmUpIHRvIHlpZWxkIGEgY2xhc3MgaW5zdGFuY2VcbiAgIChzZWUgYmVsb3cpLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6IGBgX19uYW1lX19gYCBpcyB0aGUgY2xhc3MgbmFtZTsgYGBfX21vZHVsZV9fYGBcbiAgIGlzIHRoZSBtb2R1bGUgbmFtZSBpbiB3aGljaCB0aGUgY2xhc3Mgd2FzIGRlZmluZWQ7IGBgX19kaWN0X19gYCBpc1xuICAgdGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY2xhc3NcJ3MgbmFtZXNwYWNlOyBgYF9fYmFzZXNfX2BgIGlzIGFcbiAgIHR1cGxlIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLFxuICAgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDtcbiAgIGBgX19kb2NfX2BgIGlzIHRoZSBjbGFzc1wncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgTm9uZSBpZlxuICAgdW5kZWZpbmVkLlxuXG5DbGFzcyBpbnN0YW5jZXNcbiAgIEEgY2xhc3MgaW5zdGFuY2UgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGEgY2xhc3Mgb2JqZWN0IChzZWUgYWJvdmUpLlxuICAgQSBjbGFzcyBpbnN0YW5jZSBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYXMgYSBkaWN0aW9uYXJ5IHdoaWNoXG4gICBpcyB0aGUgZmlyc3QgcGxhY2UgaW4gd2hpY2ggYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHNlYXJjaGVkLlxuICAgV2hlbiBhbiBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIHRoZXJlLCBhbmQgdGhlIGluc3RhbmNlXCdzIGNsYXNzIGhhc1xuICAgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZSwgdGhlIHNlYXJjaCBjb250aW51ZXMgd2l0aCB0aGUgY2xhc3NcbiAgIGF0dHJpYnV0ZXMuICBJZiBhIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aGF0IGlzIGEgdXNlci1kZWZpbmVkXG4gICBmdW5jdGlvbiBvYmplY3Qgb3IgYW4gdW5ib3VuZCB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCB3aG9zZVxuICAgYXNzb2NpYXRlZCBjbGFzcyBpcyB0aGUgY2xhc3MgKGNhbGwgaXQgYGBDYGApIG9mIHRoZSBpbnN0YW5jZSBmb3JcbiAgIHdoaWNoIHRoZSBhdHRyaWJ1dGUgcmVmZXJlbmNlIHdhcyBpbml0aWF0ZWQgb3Igb25lIG9mIGl0cyBiYXNlcywgaXRcbiAgIGlzIHRyYW5zZm9ybWVkIGludG8gYSBib3VuZCB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCB3aG9zZVxuICAgYGBpbV9jbGFzc2BgIGF0dHJpYnV0ZSBpcyBgYENgYCBhbmQgd2hvc2UgYGBpbV9zZWxmYGAgYXR0cmlidXRlIGlzXG4gICB0aGUgaW5zdGFuY2UuIFN0YXRpYyBtZXRob2QgYW5kIGNsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBhbHNvXG4gICB0cmFuc2Zvcm1lZCwgYXMgaWYgdGhleSBoYWQgYmVlbiByZXRyaWV2ZWQgZnJvbSBjbGFzcyBgYENgYDsgc2VlXG4gICBhYm92ZSB1bmRlciAiQ2xhc3NlcyIuIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqIGZvclxuICAgYW5vdGhlciB3YXkgaW4gd2hpY2ggYXR0cmlidXRlcyBvZiBhIGNsYXNzIHJldHJpZXZlZCB2aWEgaXRzXG4gICBpbnN0YW5jZXMgbWF5IGRpZmZlciBmcm9tIHRoZSBvYmplY3RzIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGVcbiAgIGNsYXNzXCdzIGBgX19kaWN0X19gYC4gSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kLCBhbmQgdGhlXG4gICBvYmplY3RcJ3MgY2xhc3MgaGFzIGEgYGBfX2dldGF0dHJfXygpYGAgbWV0aG9kLCB0aGF0IGlzIGNhbGxlZCB0b1xuICAgc2F0aXNmeSB0aGUgbG9va3VwLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudHMgYW5kIGRlbGV0aW9ucyB1cGRhdGUgdGhlIGluc3RhbmNlXCdzXG4gICBkaWN0aW9uYXJ5LCBuZXZlciBhIGNsYXNzXCdzIGRpY3Rpb25hcnkuICBJZiB0aGUgY2xhc3MgaGFzIGFcbiAgIGBgX19zZXRhdHRyX18oKWBgIG9yIGBgX19kZWxhdHRyX18oKWBgIG1ldGhvZCwgdGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIENsYXNzIGluc3RhbmNlcyBjYW4gcHJldGVuZCB0byBiZSBudW1iZXJzLCBzZXF1ZW5jZXMsIG9yIG1hcHBpbmdzXG4gICBpZiB0aGV5IGhhdmUgbWV0aG9kcyB3aXRoIGNlcnRhaW4gc3BlY2lhbCBuYW1lcy4gIFNlZSBzZWN0aW9uXG4gICAqU3BlY2lhbCBtZXRob2QgbmFtZXMqLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6IGBgX19kaWN0X19gYCBpcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnk7XG4gICBgYF9fY2xhc3NfX2BgIGlzIHRoZSBpbnN0YW5jZVwncyBjbGFzcy5cblxuRmlsZXNcbiAgIEEgZmlsZSBvYmplY3QgcmVwcmVzZW50cyBhbiBvcGVuIGZpbGUuICBGaWxlIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnlcbiAgIHRoZSBgYG9wZW4oKWBgIGJ1aWx0LWluIGZ1bmN0aW9uLCBhbmQgYWxzbyBieSBgYG9zLnBvcGVuKClgYCxcbiAgIGBgb3MuZmRvcGVuKClgYCwgYW5kIHRoZSBgYG1ha2VmaWxlKClgYCBtZXRob2Qgb2Ygc29ja2V0IG9iamVjdHNcbiAgIChhbmQgcGVyaGFwcyBieSBvdGhlciBmdW5jdGlvbnMgb3IgbWV0aG9kcyBwcm92aWRlZCBieSBleHRlbnNpb25cbiAgIG1vZHVsZXMpLiAgVGhlIG9iamVjdHMgYGBzeXMuc3RkaW5gYCwgYGBzeXMuc3Rkb3V0YGAgYW5kXG4gICBgYHN5cy5zdGRlcnJgYCBhcmUgaW5pdGlhbGl6ZWQgdG8gZmlsZSBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gdGhlXG4gICBpbnRlcnByZXRlclwncyBzdGFuZGFyZCBpbnB1dCwgb3V0cHV0IGFuZCBlcnJvciBzdHJlYW1zLiAgU2VlICpGaWxlXG4gICBPYmplY3RzKiBmb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiBvZiBmaWxlIG9iamVjdHMuXG5cbkludGVybmFsIHR5cGVzXG4gICBBIGZldyB0eXBlcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGludGVycHJldGVyIGFyZSBleHBvc2VkIHRvIHRoZVxuICAgdXNlci4gVGhlaXIgZGVmaW5pdGlvbnMgbWF5IGNoYW5nZSB3aXRoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGVcbiAgIGludGVycHJldGVyLCBidXQgdGhleSBhcmUgbWVudGlvbmVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy5cblxuICAgQ29kZSBvYmplY3RzXG4gICAgICBDb2RlIG9iamVjdHMgcmVwcmVzZW50ICpieXRlLWNvbXBpbGVkKiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlLFxuICAgICAgb3IgKmJ5dGVjb2RlKi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNvZGUgb2JqZWN0IGFuZCBhXG4gICAgICBmdW5jdGlvbiBvYmplY3QgaXMgdGhhdCB0aGUgZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGFuIGV4cGxpY2l0XG4gICAgICByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uXCdzIGdsb2JhbHMgKHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQgd2FzXG4gICAgICBkZWZpbmVkKSwgd2hpbGUgYSBjb2RlIG9iamVjdCBjb250YWlucyBubyBjb250ZXh0OyBhbHNvIHRoZVxuICAgICAgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgZnVuY3Rpb24gb2JqZWN0LCBub3RcbiAgICAgIGluIHRoZSBjb2RlIG9iamVjdCAoYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB2YWx1ZXMgY2FsY3VsYXRlZCBhdFxuICAgICAgcnVuLXRpbWUpLiAgVW5saWtlIGZ1bmN0aW9uIG9iamVjdHMsIGNvZGUgb2JqZWN0cyBhcmUgaW1tdXRhYmxlXG4gICAgICBhbmQgY29udGFpbiBubyByZWZlcmVuY2VzIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB0byBtdXRhYmxlXG4gICAgICBvYmplY3RzLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYGNvX25hbWVgYCBnaXZlcyB0aGUgZnVuY3Rpb25cbiAgICAgIG5hbWU7IGBgY29fYXJnY291bnRgYCBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzXG4gICAgICAoaW5jbHVkaW5nIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzKTsgYGBjb19ubG9jYWxzYGAgaXMgdGhlXG4gICAgICBudW1iZXIgb2YgbG9jYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIChpbmNsdWRpbmdcbiAgICAgIGFyZ3VtZW50cyk7IGBgY29fdmFybmFtZXNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mXG4gICAgICB0aGUgbG9jYWwgdmFyaWFibGVzIChzdGFydGluZyB3aXRoIHRoZSBhcmd1bWVudCBuYW1lcyk7XG4gICAgICBgYGNvX2NlbGx2YXJzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBsb2NhbFxuICAgICAgdmFyaWFibGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgbmVzdGVkIGZ1bmN0aW9ucztcbiAgICAgIGBgY29fZnJlZXZhcnNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGZyZWVcbiAgICAgIHZhcmlhYmxlczsgYGBjb19jb2RlYGAgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzZXF1ZW5jZSBvZlxuICAgICAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zOyBgYGNvX2NvbnN0c2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGVcbiAgICAgIGxpdGVyYWxzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlOyBgYGNvX25hbWVzYGAgaXMgYSB0dXBsZVxuICAgICAgY29udGFpbmluZyB0aGUgbmFtZXMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7IGBgY29fZmlsZW5hbWVgYCBpc1xuICAgICAgdGhlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhlIGNvZGUgd2FzIGNvbXBpbGVkO1xuICAgICAgYGBjb19maXJzdGxpbmVub2BgIGlzIHRoZSBmaXJzdCBsaW5lIG51bWJlciBvZiB0aGUgZnVuY3Rpb247XG4gICAgICBgYGNvX2xub3RhYmBgIGlzIGEgc3RyaW5nIGVuY29kaW5nIHRoZSBtYXBwaW5nIGZyb20gYnl0ZWNvZGVcbiAgICAgIG9mZnNldHMgdG8gbGluZSBudW1iZXJzIChmb3IgZGV0YWlscyBzZWUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZVxuICAgICAgaW50ZXJwcmV0ZXIpOyBgYGNvX3N0YWNrc2l6ZWBgIGlzIHRoZSByZXF1aXJlZCBzdGFjayBzaXplXG4gICAgICAoaW5jbHVkaW5nIGxvY2FsIHZhcmlhYmxlcyk7IGBgY29fZmxhZ3NgYCBpcyBhbiBpbnRlZ2VyIGVuY29kaW5nXG4gICAgICBhIG51bWJlciBvZiBmbGFncyBmb3IgdGhlIGludGVycHJldGVyLlxuXG4gICAgICBUaGUgZm9sbG93aW5nIGZsYWcgYml0cyBhcmUgZGVmaW5lZCBmb3IgYGBjb19mbGFnc2BgOiBiaXRcbiAgICAgIGBgMHgwNGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYGAqYXJndW1lbnRzYGAgc3ludGF4XG4gICAgICB0byBhY2NlcHQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50czsgYml0XG4gICAgICBgYDB4MDhgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGBgKiprZXl3b3Jkc2BgIHN5bnRheFxuICAgICAgdG8gYWNjZXB0IGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50czsgYml0IGBgMHgyMGBgIGlzIHNldCBpZlxuICAgICAgdGhlIGZ1bmN0aW9uIGlzIGEgZ2VuZXJhdG9yLlxuXG4gICAgICBGdXR1cmUgZmVhdHVyZSBkZWNsYXJhdGlvbnMgKGBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydFxuICAgICAgZGl2aXNpb25gYCkgYWxzbyB1c2UgYml0cyBpbiBgYGNvX2ZsYWdzYGAgdG8gaW5kaWNhdGUgd2hldGhlciBhXG4gICAgICBjb2RlIG9iamVjdCB3YXMgY29tcGlsZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkOiBiaXRcbiAgICAgIGBgMHgyMDAwYGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB3YXMgY29tcGlsZWQgd2l0aCBmdXR1cmVcbiAgICAgIGRpdmlzaW9uIGVuYWJsZWQ7IGJpdHMgYGAweDEwYGAgYW5kIGBgMHgxMDAwYGAgd2VyZSB1c2VkIGluXG4gICAgICBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbi5cblxuICAgICAgT3RoZXIgYml0cyBpbiBgYGNvX2ZsYWdzYGAgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UuXG5cbiAgICAgIElmIGEgY29kZSBvYmplY3QgcmVwcmVzZW50cyBhIGZ1bmN0aW9uLCB0aGUgZmlyc3QgaXRlbSBpblxuICAgICAgYGBjb19jb25zdHNgYCBpcyB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgb2YgdGhlIGZ1bmN0aW9uLCBvclxuICAgICAgYGBOb25lYGAgaWYgdW5kZWZpbmVkLlxuXG4gICBGcmFtZSBvYmplY3RzXG4gICAgICBGcmFtZSBvYmplY3RzIHJlcHJlc2VudCBleGVjdXRpb24gZnJhbWVzLiAgVGhleSBtYXkgb2NjdXIgaW5cbiAgICAgIHRyYWNlYmFjayBvYmplY3RzIChzZWUgYmVsb3cpLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYGZfYmFja2BgIGlzIHRvIHRoZSBwcmV2aW91c1xuICAgICAgc3RhY2sgZnJhbWUgKHRvd2FyZHMgdGhlIGNhbGxlciksIG9yIGBgTm9uZWBgIGlmIHRoaXMgaXMgdGhlXG4gICAgICBib3R0b20gc3RhY2sgZnJhbWU7IGBgZl9jb2RlYGAgaXMgdGhlIGNvZGUgb2JqZWN0IGJlaW5nIGV4ZWN1dGVkXG4gICAgICBpbiB0aGlzIGZyYW1lOyBgYGZfbG9jYWxzYGAgaXMgdGhlIGRpY3Rpb25hcnkgdXNlZCB0byBsb29rIHVwXG4gICAgICBsb2NhbCB2YXJpYWJsZXM7IGBgZl9nbG9iYWxzYGAgaXMgdXNlZCBmb3IgZ2xvYmFsIHZhcmlhYmxlcztcbiAgICAgIGBgZl9idWlsdGluc2BgIGlzIHVzZWQgZm9yIGJ1aWx0LWluIChpbnRyaW5zaWMpIG5hbWVzO1xuICAgICAgYGBmX3Jlc3RyaWN0ZWRgYCBpcyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpc1xuICAgICAgZXhlY3V0aW5nIGluIHJlc3RyaWN0ZWQgZXhlY3V0aW9uIG1vZGU7IGBgZl9sYXN0aWBgIGdpdmVzIHRoZVxuICAgICAgcHJlY2lzZSBpbnN0cnVjdGlvbiAodGhpcyBpcyBhbiBpbmRleCBpbnRvIHRoZSBieXRlY29kZSBzdHJpbmdcbiAgICAgIG9mIHRoZSBjb2RlIG9iamVjdCkuXG5cbiAgICAgIFNwZWNpYWwgd3JpdGFibGUgYXR0cmlidXRlczogYGBmX3RyYWNlYGAsIGlmIG5vdCBgYE5vbmVgYCwgaXMgYVxuICAgICAgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBjb2RlIGxpbmUgKHRoaXMgaXNcbiAgICAgIHVzZWQgYnkgdGhlIGRlYnVnZ2VyKTsgYGBmX2V4Y190eXBlYGAsIGBgZl9leGNfdmFsdWVgYCxcbiAgICAgIGBgZl9leGNfdHJhY2ViYWNrYGAgcmVwcmVzZW50IHRoZSBsYXN0IGV4Y2VwdGlvbiByYWlzZWQgaW4gdGhlXG4gICAgICBwYXJlbnQgZnJhbWUgcHJvdmlkZWQgYW5vdGhlciBleGNlcHRpb24gd2FzIGV2ZXIgcmFpc2VkIGluIHRoZVxuICAgICAgY3VycmVudCBmcmFtZSAoaW4gYWxsIG90aGVyIGNhc2VzIHRoZXkgYXJlIE5vbmUpOyBgYGZfbGluZW5vYGBcbiAgICAgIGlzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyIG9mIHRoZSBmcmFtZSAtLS0gd3JpdGluZyB0byB0aGlzIGZyb21cbiAgICAgIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uIGp1bXBzIHRvIHRoZSBnaXZlbiBsaW5lIChvbmx5IGZvciB0aGVcbiAgICAgIGJvdHRvbS1tb3N0IGZyYW1lKS4gIEEgZGVidWdnZXIgY2FuIGltcGxlbWVudCBhIEp1bXAgY29tbWFuZFxuICAgICAgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpIGJ5IHdyaXRpbmcgdG8gZl9saW5lbm8uXG5cbiAgIFRyYWNlYmFjayBvYmplY3RzXG4gICAgICBUcmFjZWJhY2sgb2JqZWN0cyByZXByZXNlbnQgYSBzdGFjayB0cmFjZSBvZiBhbiBleGNlcHRpb24uICBBXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0IGlzIGNyZWF0ZWQgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLiAgV2hlbiB0aGVcbiAgICAgIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdW53aW5kcyB0aGUgZXhlY3V0aW9uIHN0YWNrLCBhdFxuICAgICAgZWFjaCB1bndvdW5kIGxldmVsIGEgdHJhY2ViYWNrIG9iamVjdCBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZlxuICAgICAgdGhlIGN1cnJlbnQgdHJhY2ViYWNrLiAgV2hlbiBhbiBleGNlcHRpb24gaGFuZGxlciBpcyBlbnRlcmVkLFxuICAgICAgdGhlIHN0YWNrIHRyYWNlIGlzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtLiAoU2VlIHNlY3Rpb25cbiAgICAgICpUaGUgdHJ5IHN0YXRlbWVudCouKSBJdCBpcyBhY2Nlc3NpYmxlIGFzIGBgc3lzLmV4Y190cmFjZWJhY2tgYCxcbiAgICAgIGFuZCBhbHNvIGFzIHRoZSB0aGlyZCBpdGVtIG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieVxuICAgICAgYGBzeXMuZXhjX2luZm8oKWBgLiAgVGhlIGxhdHRlciBpcyB0aGUgcHJlZmVycmVkIGludGVyZmFjZSxcbiAgICAgIHNpbmNlIGl0IHdvcmtzIGNvcnJlY3RseSB3aGVuIHRoZSBwcm9ncmFtIGlzIHVzaW5nIG11bHRpcGxlXG4gICAgICB0aHJlYWRzLiBXaGVuIHRoZSBwcm9ncmFtIGNvbnRhaW5zIG5vIHN1aXRhYmxlIGhhbmRsZXIsIHRoZVxuICAgICAgc3RhY2sgdHJhY2UgaXMgd3JpdHRlbiAobmljZWx5IGZvcm1hdHRlZCkgdG8gdGhlIHN0YW5kYXJkIGVycm9yXG4gICAgICBzdHJlYW07IGlmIHRoZSBpbnRlcnByZXRlciBpcyBpbnRlcmFjdGl2ZSwgaXQgaXMgYWxzbyBtYWRlXG4gICAgICBhdmFpbGFibGUgdG8gdGhlIHVzZXIgYXMgYGBzeXMubGFzdF90cmFjZWJhY2tgYC5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGB0Yl9uZXh0YGAgaXMgdGhlIG5leHQgbGV2ZWwgaW5cbiAgICAgIHRoZSBzdGFjayB0cmFjZSAodG93YXJkcyB0aGUgZnJhbWUgd2hlcmUgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQpLCBvciBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBuZXh0IGxldmVsOyBgYHRiX2ZyYW1lYGBcbiAgICAgIHBvaW50cyB0byB0aGUgZXhlY3V0aW9uIGZyYW1lIG9mIHRoZSBjdXJyZW50IGxldmVsO1xuICAgICAgYGB0Yl9saW5lbm9gYCBnaXZlcyB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQ7IGBgdGJfbGFzdGlgYCBpbmRpY2F0ZXMgdGhlIHByZWNpc2UgaW5zdHJ1Y3Rpb24uICBUaGVcbiAgICAgIGxpbmUgbnVtYmVyIGFuZCBsYXN0IGluc3RydWN0aW9uIGluIHRoZSB0cmFjZWJhY2sgbWF5IGRpZmZlclxuICAgICAgZnJvbSB0aGUgbGluZSBudW1iZXIgb2YgaXRzIGZyYW1lIG9iamVjdCBpZiB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZCBpbiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggbm8gbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZVxuICAgICAgb3Igd2l0aCBhIGZpbmFsbHkgY2xhdXNlLlxuXG4gICBTbGljZSBvYmplY3RzXG4gICAgICBTbGljZSBvYmplY3RzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBzbGljZXMgd2hlbiAqZXh0ZW5kZWQgc2xpY2VcbiAgICAgIHN5bnRheCogaXMgdXNlZC4gVGhpcyBpcyBhIHNsaWNlIHVzaW5nIHR3byBjb2xvbnMsIG9yIG11bHRpcGxlXG4gICAgICBzbGljZXMgb3IgZWxsaXBzZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcywgZS5nLiwgYGBhW2k6ajpzdGVwXWBgLFxuICAgICAgYGBhW2k6aiwgazpsXWBgLCBvciBgYGFbLi4uLCBpOmpdYGAuICBUaGV5IGFyZSBhbHNvIGNyZWF0ZWQgYnlcbiAgICAgIHRoZSBidWlsdC1pbiBgYHNsaWNlKClgYCBmdW5jdGlvbi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBzdGFydGBgIGlzIHRoZSBsb3dlciBib3VuZDtcbiAgICAgIGBgc3RvcGBgIGlzIHRoZSB1cHBlciBib3VuZDsgYGBzdGVwYGAgaXMgdGhlIHN0ZXAgdmFsdWU7IGVhY2ggaXNcbiAgICAgIGBgTm9uZWBgIGlmIG9taXR0ZWQuIFRoZXNlIGF0dHJpYnV0ZXMgY2FuIGhhdmUgYW55IHR5cGUuXG5cbiAgICAgIFNsaWNlIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBzbGljZS5pbmRpY2VzKHNlbGYsIGxlbmd0aClcblxuICAgICAgICAgVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgaW50ZWdlciBhcmd1bWVudCAqbGVuZ3RoKiBhbmRcbiAgICAgICAgIGNvbXB1dGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBleHRlbmRlZCBzbGljZSB0aGF0IHRoZSBzbGljZVxuICAgICAgICAgb2JqZWN0IHdvdWxkIGRlc2NyaWJlIGlmIGFwcGxpZWQgdG8gYSBzZXF1ZW5jZSBvZiAqbGVuZ3RoKlxuICAgICAgICAgaXRlbXMuICBJdCByZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgaW50ZWdlcnM7IHJlc3BlY3RpdmVseVxuICAgICAgICAgdGhlc2UgYXJlIHRoZSAqc3RhcnQqIGFuZCAqc3RvcCogaW5kaWNlcyBhbmQgdGhlICpzdGVwKiBvclxuICAgICAgICAgc3RyaWRlIGxlbmd0aCBvZiB0aGUgc2xpY2UuIE1pc3Npbmcgb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzXG4gICAgICAgICBhcmUgaGFuZGxlZCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggcmVndWxhciBzbGljZXMuXG5cbiAgICAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuMy5cblxuICAgU3RhdGljIG1ldGhvZCBvYmplY3RzXG4gICAgICBTdGF0aWMgbWV0aG9kIG9iamVjdHMgcHJvdmlkZSBhIHdheSBvZiBkZWZlYXRpbmcgdGhlXG4gICAgICB0cmFuc2Zvcm1hdGlvbiBvZiBmdW5jdGlvbiBvYmplY3RzIHRvIG1ldGhvZCBvYmplY3RzIGRlc2NyaWJlZFxuICAgICAgYWJvdmUuIEEgc3RhdGljIG1ldGhvZCBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbnkgb3RoZXJcbiAgICAgIG9iamVjdCwgdXN1YWxseSBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0LiBXaGVuIGEgc3RhdGljXG4gICAgICBtZXRob2Qgb2JqZWN0IGlzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3Mgb3IgYSBjbGFzcyBpbnN0YW5jZSwgdGhlXG4gICAgICBvYmplY3QgYWN0dWFsbHkgcmV0dXJuZWQgaXMgdGhlIHdyYXBwZWQgb2JqZWN0LCB3aGljaCBpcyBub3RcbiAgICAgIHN1YmplY3QgdG8gYW55IGZ1cnRoZXIgdHJhbnNmb3JtYXRpb24uIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmVcbiAgICAgIG5vdCB0aGVtc2VsdmVzIGNhbGxhYmxlLCBhbHRob3VnaCB0aGUgb2JqZWN0cyB0aGV5IHdyYXAgdXN1YWxseVxuICAgICAgYXJlLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICBgYHN0YXRpY21ldGhvZCgpYGAgY29uc3RydWN0b3IuXG5cbiAgIENsYXNzIG1ldGhvZCBvYmplY3RzXG4gICAgICBBIGNsYXNzIG1ldGhvZCBvYmplY3QsIGxpa2UgYSBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXMgYSB3cmFwcGVyXG4gICAgICBhcm91bmQgYW5vdGhlciBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIHdheSBpbiB3aGljaCB0aGF0IG9iamVjdFxuICAgICAgaXMgcmV0cmlldmVkIGZyb20gY2xhc3NlcyBhbmQgY2xhc3MgaW5zdGFuY2VzLiBUaGUgYmVoYXZpb3VyIG9mXG4gICAgICBjbGFzcyBtZXRob2Qgb2JqZWN0cyB1cG9uIHN1Y2ggcmV0cmlldmFsIGlzIGRlc2NyaWJlZCBhYm92ZSxcbiAgICAgIHVuZGVyICJVc2VyLWRlZmluZWQgbWV0aG9kcyIuIENsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkXG4gICAgICBieSB0aGUgYnVpbHQtaW4gYGBjbGFzc21ldGhvZCgpYGAgY29uc3RydWN0b3IuXG4nLAogICd0eXBlc2Z1bmN0aW9ucyc6IHUnXG5GdW5jdGlvbnNcbioqKioqKioqKlxuXG5GdW5jdGlvbiBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IGZ1bmN0aW9uIGRlZmluaXRpb25zLiAgVGhlIG9ubHlcbm9wZXJhdGlvbiBvbiBhIGZ1bmN0aW9uIG9iamVjdCBpcyB0byBjYWxsIGl0OiBgYGZ1bmMoYXJndW1lbnQtbGlzdClgYC5cblxuVGhlcmUgYXJlIHJlYWxseSB0d28gZmxhdm9ycyBvZiBmdW5jdGlvbiBvYmplY3RzOiBidWlsdC1pbiBmdW5jdGlvbnNcbmFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiAgQm90aCBzdXBwb3J0IHRoZSBzYW1lIG9wZXJhdGlvbiAodG8gY2FsbFxudGhlIGZ1bmN0aW9uKSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBkaWZmZXJlbnQsIGhlbmNlIHRoZVxuZGlmZmVyZW50IG9iamVjdCB0eXBlcy5cblxuU2VlICpGdW5jdGlvbiBkZWZpbml0aW9ucyogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAotICd0eXBlc21hcHBpbmcnOiB1J1xuTWFwcGluZyBUeXBlcyAtLS0gYGBkaWN0YGBcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkEgKm1hcHBpbmcqIG9iamVjdCBtYXBzICpoYXNoYWJsZSogdmFsdWVzIHRvIGFyYml0cmFyeSBvYmplY3RzLlxuTWFwcGluZ3MgYXJlIG11dGFibGUgb2JqZWN0cy4gIFRoZXJlIGlzIGN1cnJlbnRseSBvbmx5IG9uZSBzdGFuZGFyZFxubWFwcGluZyB0eXBlLCB0aGUgKmRpY3Rpb25hcnkqLiAgKEZvciBvdGhlciBjb250YWluZXJzIHNlZSB0aGUgYnVpbHRcbmluIGBgbGlzdGBgLCBgYHNldGBgLCBhbmQgYGB0dXBsZWBgIGNsYXNzZXMsIGFuZCB0aGUgYGBjb2xsZWN0aW9uc2BgXG5tb2R1bGUuKVxuXG5BIGRpY3Rpb25hcnlcJ3Mga2V5cyBhcmUgKmFsbW9zdCogYXJiaXRyYXJ5IHZhbHVlcy4gIFZhbHVlcyB0aGF0IGFyZVxubm90ICpoYXNoYWJsZSosIHRoYXQgaXMsIHZhbHVlcyBjb250YWluaW5nIGxpc3RzLCBkaWN0aW9uYXJpZXMgb3Jcbm90aGVyIG11dGFibGUgdHlwZXMgKHRoYXQgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuIGJ5IG9iamVjdFxuaWRlbnRpdHkpIG1heSBub3QgYmUgdXNlZCBhcyBrZXlzLiAgTnVtZXJpYyB0eXBlcyB1c2VkIGZvciBrZXlzIG9iZXlcbnRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbFxuKHN1Y2ggYXMgYGAxYGAgYW5kIGBgMS4wYGApIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG9cbmluZGV4IHRoZSBzYW1lIGRpY3Rpb25hcnkgZW50cnkuICAoTm90ZSBob3dldmVyLCB0aGF0IHNpbmNlIGNvbXB1dGVyc1xuc3RvcmUgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcyBhcHByb3hpbWF0aW9ucyBpdCBpcyB1c3VhbGx5IHVud2lzZSB0b1xudXNlIHRoZW0gYXMgZGljdGlvbmFyeSBrZXlzLilcblxuRGljdGlvbmFyaWVzIGNhbiBiZSBjcmVhdGVkIGJ5IHBsYWNpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZlxuYGBrZXk6IHZhbHVlYGAgcGFpcnMgd2l0aGluIGJyYWNlcywgZm9yIGV4YW1wbGU6IGBge1wnamFja1wnOiA0MDk4LFxuXCdzam9lcmRcJzogNDEyN31gYCBvciBgYHs0MDk4OiBcJ2phY2tcJywgNDEyNzogXCdzam9lcmRcJ31gYCwgb3IgYnkgdGhlXG5gYGRpY3RgYCBjb25zdHJ1Y3Rvci5cblxuY2xhc3MgY2xhc3MgZGljdChbYXJnXSlcblxuICAgUmV0dXJuIGEgbmV3IGRpY3Rpb25hcnkgaW5pdGlhbGl6ZWQgZnJvbSBhbiBvcHRpb25hbCBwb3NpdGlvbmFsXG4gICBhcmd1bWVudCBvciBmcm9tIGEgc2V0IG9mIGtleXdvcmQgYXJndW1lbnRzLiBJZiBubyBhcmd1bWVudHMgYXJlXG4gICBnaXZlbiwgcmV0dXJuIGEgbmV3IGVtcHR5IGRpY3Rpb25hcnkuIElmIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAqYXJnKiBpcyBhIG1hcHBpbmcgb2JqZWN0LCByZXR1cm4gYSBkaWN0aW9uYXJ5IG1hcHBpbmcgdGhlIHNhbWVcbiAgIGtleXMgdG8gdGhlIHNhbWUgdmFsdWVzIGFzIGRvZXMgdGhlIG1hcHBpbmcgb2JqZWN0LiBPdGhlcndpc2UgdGhlXG4gICBwb3NpdGlvbmFsIGFyZ3VtZW50IG11c3QgYmUgYSBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0c1xuICAgaXRlcmF0aW9uLCBvciBhbiBpdGVyYXRvciBvYmplY3QuICBUaGUgZWxlbWVudHMgb2YgdGhlIGFyZ3VtZW50XG4gICBtdXN0IGVhY2ggYWxzbyBiZSBvZiBvbmUgb2YgdGhvc2Uga2luZHMsIGFuZCBlYWNoIG11c3QgaW4gdHVyblxuICAgY29udGFpbiBleGFjdGx5IHR3byBvYmplY3RzLiBUaGUgZmlyc3QgaXMgdXNlZCBhcyBhIGtleSBpbiB0aGUgbmV3XG4gICBkaWN0aW9uYXJ5LCBhbmQgdGhlIHNlY29uZCBhcyB0aGUga2V5XCdzIHZhbHVlLiAgSWYgYSBnaXZlbiBrZXkgaXNcbiAgIHNlZW4gbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdCBpcyByZXRhaW5lZFxuICAgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5LlxuXG4gICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHRoZSBrZXl3b3JkcyB0aGVtc2VsdmVzIHdpdGggdGhlaXJcbiAgIGFzc29jaWF0ZWQgdmFsdWVzIGFyZSBhZGRlZCBhcyBpdGVtcyB0byB0aGUgZGljdGlvbmFyeS4gSWYgYSBrZXkgaXNcbiAgIHNwZWNpZmllZCBib3RoIGluIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGFuZCBhcyBhIGtleXdvcmRcbiAgIGFyZ3VtZW50LCB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXl3b3JkIGlzIHJldGFpbmVkIGluIHRoZVxuICAgZGljdGlvbmFyeS4gRm9yIGV4YW1wbGUsIHRoZXNlIGFsbCByZXR1cm4gYSBkaWN0aW9uYXJ5IGVxdWFsIHRvXG4gICBgYHsib25lIjogMiwgInR3byI6IDN9YGA6XG5cbiAgICogYGBkaWN0KG9uZT0yLCB0d289MylgYFxuXG4gICAqIGBgZGljdCh7XCdvbmVcJzogMiwgXCd0d29cJzogM30pYGBcblxuICAgKiBgYGRpY3QoemlwKChcJ29uZVwnLCBcJ3R3b1wnKSwgKDIsIDMpKSlgYFxuXG4gICAqIGBgZGljdChbW1wndHdvXCcsIDNdLCBbXCdvbmVcJywgMl1dKWBgXG5cbiAgIFRoZSBmaXJzdCBleGFtcGxlIG9ubHkgd29ya3MgZm9yIGtleXMgdGhhdCBhcmUgdmFsaWQgUHl0aG9uXG4gICBpZGVudGlmaWVyczsgdGhlIG90aGVycyB3b3JrIHdpdGggYW55IHZhbGlkIGtleXMuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogU3VwcG9ydCBmb3IgYnVpbGRpbmcgYSBkaWN0aW9uYXJ5IGZyb21cbiAgIGtleXdvcmQgYXJndW1lbnRzIGFkZGVkLlxuXG4gICBUaGVzZSBhcmUgdGhlIG9wZXJhdGlvbnMgdGhhdCBkaWN0aW9uYXJpZXMgc3VwcG9ydCAoYW5kIHRoZXJlZm9yZSxcbiAgIGN1c3RvbSBtYXBwaW5nIHR5cGVzIHNob3VsZCBzdXBwb3J0IHRvbyk6XG5cbiAgIGxlbihkKVxuXG4gICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZGljdGlvbmFyeSAqZCouXG5cbiAgIGRba2V5XVxuXG4gICAgICBSZXR1cm4gdGhlIGl0ZW0gb2YgKmQqIHdpdGgga2V5ICprZXkqLiAgUmFpc2VzIGEgYGBLZXlFcnJvcmBgIGlmXG4gICAgICAqa2V5KiBpcyBub3QgaW4gdGhlIG1hcC5cblxuICAgICAgTmV3IGluIHZlcnNpb24gMi41OiBJZiBhIHN1YmNsYXNzIG9mIGRpY3QgZGVmaW5lcyBhIG1ldGhvZFxuICAgICAgYGBfX21pc3NpbmdfXygpYGAsIGlmIHRoZSBrZXkgKmtleSogaXMgbm90IHByZXNlbnQsIHRoZVxuICAgICAgYGBkW2tleV1gYCBvcGVyYXRpb24gY2FsbHMgdGhhdCBtZXRob2Qgd2l0aCB0aGUga2V5ICprZXkqIGFzXG4gICAgICBhcmd1bWVudC4gIFRoZSBgYGRba2V5XWBgIG9wZXJhdGlvbiB0aGVuIHJldHVybnMgb3IgcmFpc2VzXG4gICAgICB3aGF0ZXZlciBpcyByZXR1cm5lZCBvciByYWlzZWQgYnkgdGhlIGBgX19taXNzaW5nX18oa2V5KWBgIGNhbGxcbiAgICAgIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQuIE5vIG90aGVyIG9wZXJhdGlvbnMgb3IgbWV0aG9kcyBpbnZva2VcbiAgICAgIGBgX19taXNzaW5nX18oKWBgLiBJZiBgYF9fbWlzc2luZ19fKClgYCBpcyBub3QgZGVmaW5lZCxcbiAgICAgIGBgS2V5RXJyb3JgYCBpcyByYWlzZWQuICBgYF9fbWlzc2luZ19fKClgYCBtdXN0IGJlIGEgbWV0aG9kOyBpdFxuICAgICAgY2Fubm90IGJlIGFuIGluc3RhbmNlIHZhcmlhYmxlLiBGb3IgYW4gZXhhbXBsZSwgc2VlXG4gICAgICBgYGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0YGAuXG5cbiAgIGRba2V5XSA9IHZhbHVlXG5cbiAgICAgIFNldCBgYGRba2V5XWBgIHRvICp2YWx1ZSouXG5cbiAgIGRlbCBkW2tleV1cblxuICAgICAgUmVtb3ZlIGBgZFtrZXldYGAgZnJvbSAqZCouICBSYWlzZXMgYSBgYEtleUVycm9yYGAgaWYgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgbWFwLlxuXG4gICBrZXkgaW4gZFxuXG4gICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgKmQqIGhhcyBhIGtleSAqa2V5KiwgZWxzZSBgYEZhbHNlYGAuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuICAga2V5IG5vdCBpbiBkXG5cbiAgICAgIEVxdWl2YWxlbnQgdG8gYGBub3Qga2V5IGluIGRgYC5cblxuICAgICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG4gICBpdGVyKGQpXG5cbiAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzIG9mIHRoZSBkaWN0aW9uYXJ5LiAgVGhpcyBpcyBhXG4gICAgICBzaG9ydGN1dCBmb3IgYGBpdGVya2V5cygpYGAuXG5cbiAgIGNsZWFyKClcblxuICAgICAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjb3B5KClcblxuICAgICAgUmV0dXJuIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBmcm9ta2V5cyhzZXFbLCB2YWx1ZV0pXG5cbiAgICAgIENyZWF0ZSBhIG5ldyBkaWN0aW9uYXJ5IHdpdGgga2V5cyBmcm9tICpzZXEqIGFuZCB2YWx1ZXMgc2V0IHRvXG4gICAgICAqdmFsdWUqLlxuXG4gICAgICBgYGZyb21rZXlzKClgYCBpcyBhIGNsYXNzIG1ldGhvZCB0aGF0IHJldHVybnMgYSBuZXcgZGljdGlvbmFyeS5cbiAgICAgICp2YWx1ZSogZGVmYXVsdHMgdG8gYGBOb25lYGAuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuMy5cblxuICAgZ2V0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBSZXR1cm4gdGhlIHZhbHVlIGZvciAqa2V5KiBpZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgZWxzZVxuICAgICAgKmRlZmF1bHQqLiBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byBgYE5vbmVgYCxcbiAgICAgIHNvIHRoYXQgdGhpcyBtZXRob2QgbmV2ZXIgcmFpc2VzIGEgYGBLZXlFcnJvcmBgLlxuXG4gICBoYXNfa2V5KGtleSlcblxuICAgICAgVGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mICprZXkqIGluIHRoZSBkaWN0aW9uYXJ5LiAgYGBoYXNfa2V5KClgYFxuICAgICAgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgYGtleSBpbiBkYGAuXG5cbiAgIGl0ZW1zKClcblxuICAgICAgUmV0dXJuIGEgY29weSBvZiB0aGUgZGljdGlvbmFyeVwncyBsaXN0IG9mIGBgKGtleSwgdmFsdWUpYGBcbiAgICAgIHBhaXJzLlxuXG4gICAgICAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEtleXMgYW5kIHZhbHVlcyBhcmUgbGlzdGVkIGluXG4gICAgICBhbiBhcmJpdHJhcnkgb3JkZXIgd2hpY2ggaXMgbm9uLXJhbmRvbSwgdmFyaWVzIGFjcm9zcyBQeXRob25cbiAgICAgIGltcGxlbWVudGF0aW9ucywgYW5kIGRlcGVuZHMgb24gdGhlIGRpY3Rpb25hcnlcJ3MgaGlzdG9yeSBvZlxuICAgICAgaW5zZXJ0aW9ucyBhbmQgZGVsZXRpb25zLlxuXG4gICAgICBJZiBgYGl0ZW1zKClgYCwgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZXJpdGVtcygpYGAsXG4gICAgICBgYGl0ZXJrZXlzKClgYCwgYW5kIGBgaXRlcnZhbHVlcygpYGAgYXJlIGNhbGxlZCB3aXRoIG5vXG4gICAgICBpbnRlcnZlbmluZyBtb2RpZmljYXRpb25zIHRvIHRoZSBkaWN0aW9uYXJ5LCB0aGUgbGlzdHMgd2lsbFxuICAgICAgZGlyZWN0bHkgY29ycmVzcG9uZC4gIFRoaXMgYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBgYCh2YWx1ZSxcbiAgICAgIGtleSlgYCBwYWlycyB1c2luZyBgYHppcCgpYGA6IGBgcGFpcnMgPSB6aXAoZC52YWx1ZXMoKSxcbiAgICAgIGQua2V5cygpKWBgLiAgVGhlIHNhbWUgcmVsYXRpb25zaGlwIGhvbGRzIGZvciB0aGUgYGBpdGVya2V5cygpYGBcbiAgICAgIGFuZCBgYGl0ZXJ2YWx1ZXMoKWBgIG1ldGhvZHM6IGBgcGFpcnMgPSB6aXAoZC5pdGVydmFsdWVzKCksXG4gICAgICBkLml0ZXJrZXlzKCkpYGAgcHJvdmlkZXMgdGhlIHNhbWUgdmFsdWUgZm9yIGBgcGFpcnNgYC4gQW5vdGhlclxuICAgICAgd2F5IHRvIGNyZWF0ZSB0aGUgc2FtZSBsaXN0IGlzIGBgcGFpcnMgPSBbKHYsIGspIGZvciAoaywgdikgaW5cbiAgICAgIGQuaXRlcml0ZW1zKCldYGAuXG5cbiAgIGl0ZXJpdGVtcygpXG5cbiAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBkaWN0aW9uYXJ5XCdzIGBgKGtleSwgdmFsdWUpYGAgcGFpcnMuXG4gICAgICBTZWUgdGhlIG5vdGUgZm9yIGBgZGljdC5pdGVtcygpYGAuXG5cbiAgICAgIFVzaW5nIGBgaXRlcml0ZW1zKClgYCB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGVcbiAgICAgIGRpY3Rpb25hcnkgbWF5IHJhaXNlIGEgYGBSdW50aW1lRXJyb3JgYCBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlclxuICAgICAgYWxsIGVudHJpZXMuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuICAgaXRlcmtleXMoKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgZGljdGlvbmFyeVwncyBrZXlzLiAgU2VlIHRoZSBub3RlIGZvclxuICAgICAgYGBkaWN0Lml0ZW1zKClgYC5cblxuICAgICAgVXNpbmcgYGBpdGVya2V5cygpYGAgd2hpbGUgYWRkaW5nIG9yIGRlbGV0aW5nIGVudHJpZXMgaW4gdGhlXG4gICAgICBkaWN0aW9uYXJ5IG1heSByYWlzZSBhIGBgUnVudGltZUVycm9yYGAgb3IgZmFpbCB0byBpdGVyYXRlIG92ZXJcbiAgICAgIGFsbCBlbnRyaWVzLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIGl0ZXJ2YWx1ZXMoKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgZGljdGlvbmFyeVwncyB2YWx1ZXMuICBTZWUgdGhlIG5vdGVcbiAgICAgIGZvciBgYGRpY3QuaXRlbXMoKWBgLlxuXG4gICAgICBVc2luZyBgYGl0ZXJ2YWx1ZXMoKWBgIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZVxuICAgICAgZGljdGlvbmFyeSBtYXkgcmFpc2UgYSBgYFJ1bnRpbWVFcnJvcmBgIG9yIGZhaWwgdG8gaXRlcmF0ZSBvdmVyXG4gICAgICBhbGwgZW50cmllcy5cblxuICAgICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG4gICBrZXlzKClcblxuICAgICAgUmV0dXJuIGEgY29weSBvZiB0aGUgZGljdGlvbmFyeVwncyBsaXN0IG9mIGtleXMuICBTZWUgdGhlIG5vdGVcbiAgICAgIGZvciBgYGRpY3QuaXRlbXMoKWBgLlxuXG4gICBwb3Aoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZW1vdmUgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUsXG4gICAgICBlbHNlIHJldHVybiAqZGVmYXVsdCouICBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuIGFuZCAqa2V5KiBpc1xuICAgICAgbm90IGluIHRoZSBkaWN0aW9uYXJ5LCBhIGBgS2V5RXJyb3JgYCBpcyByYWlzZWQuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuMy5cblxuICAgcG9waXRlbSgpXG5cbiAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGFyYml0cmFyeSBgYChrZXksIHZhbHVlKWBgIHBhaXIgZnJvbSB0aGVcbiAgICAgIGRpY3Rpb25hcnkuXG5cbiAgICAgIGBgcG9waXRlbSgpYGAgaXMgdXNlZnVsIHRvIGRlc3RydWN0aXZlbHkgaXRlcmF0ZSBvdmVyIGFcbiAgICAgIGRpY3Rpb25hcnksIGFzIG9mdGVuIHVzZWQgaW4gc2V0IGFsZ29yaXRobXMuICBJZiB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgZW1wdHksIGNhbGxpbmcgYGBwb3BpdGVtKClgYCByYWlzZXMgYSBgYEtleUVycm9yYGAuXG5cbiAgIHNldGRlZmF1bHQoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZXR1cm4gaXRzIHZhbHVlLiAgSWYgbm90LCBpbnNlcnRcbiAgICAgICprZXkqIHdpdGggYSB2YWx1ZSBvZiAqZGVmYXVsdCogYW5kIHJldHVybiAqZGVmYXVsdCouICAqZGVmYXVsdCpcbiAgICAgIGRlZmF1bHRzIHRvIGBgTm9uZWBgLlxuXG4gICB1cGRhdGUoW290aGVyXSlcblxuICAgICAgVXBkYXRlIHRoZSBkaWN0aW9uYXJ5IHdpdGggdGhlIGtleS92YWx1ZSBwYWlycyBmcm9tICpvdGhlciosXG4gICAgICBvdmVyd3JpdGluZyBleGlzdGluZyBrZXlzLiAgUmV0dXJuIGBgTm9uZWBgLlxuXG4gICAgICBgYHVwZGF0ZSgpYGAgYWNjZXB0cyBlaXRoZXIgYW5vdGhlciBkaWN0aW9uYXJ5IG9iamVjdCBvciBhblxuICAgICAgaXRlcmFibGUgb2Yga2V5L3ZhbHVlIHBhaXJzIChhcyBhIHR1cGxlIG9yIG90aGVyIGl0ZXJhYmxlIG9mXG4gICAgICBsZW5ndGggdHdvKS4gIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQsIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyB0aGVuIHVwZGF0ZWQgd2l0aCB0aG9zZSBrZXkvdmFsdWUgcGFpcnM6IGBgZC51cGRhdGUocmVkPTEsXG4gICAgICBibHVlPTIpYGAuXG5cbiAgICAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IEFsbG93ZWQgdGhlIGFyZ3VtZW50IHRvIGJlIGFuIGl0ZXJhYmxlXG4gICAgICBvZiBrZXkvdmFsdWUgcGFpcnMgYW5kIGFsbG93ZWQga2V5d29yZCBhcmd1bWVudHMuXG5cbiAgIHZhbHVlcygpXG5cbiAgICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgbGlzdCBvZiB2YWx1ZXMuICBTZWUgdGhlIG5vdGVcbiAgICAgIGZvciBgYGRpY3QuaXRlbXMoKWBgLlxuJywKKyAndHlwZXNtYXBwaW5nJzogdSdcbk1hcHBpbmcgVHlwZXMgLS0tIGBgZGljdGBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICptYXBwaW5nKiBvYmplY3QgbWFwcyAqaGFzaGFibGUqIHZhbHVlcyB0byBhcmJpdHJhcnkgb2JqZWN0cy5cbk1hcHBpbmdzIGFyZSBtdXRhYmxlIG9iamVjdHMuICBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgc3RhbmRhcmRcbm1hcHBpbmcgdHlwZSwgdGhlICpkaWN0aW9uYXJ5Ki4gIChGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0XG5pbiBgYGxpc3RgYCwgYGBzZXRgYCwgYW5kIGBgdHVwbGVgYCBjbGFzc2VzLCBhbmQgdGhlIGBgY29sbGVjdGlvbnNgYFxubW9kdWxlLilcblxuQSBkaWN0aW9uYXJ5XCdzIGtleXMgYXJlICphbG1vc3QqIGFyYml0cmFyeSB2YWx1ZXMuICBWYWx1ZXMgdGhhdCBhcmVcbm5vdCAqaGFzaGFibGUqLCB0aGF0IGlzLCB2YWx1ZXMgY29udGFpbmluZyBsaXN0cywgZGljdGlvbmFyaWVzIG9yXG5vdGhlciBtdXRhYmxlIHR5cGVzICh0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbmlkZW50aXR5KSBtYXkgbm90IGJlIHVzZWQgYXMga2V5cy4gIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5XG50aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWxcbihzdWNoIGFzIGBgMWBgIGFuZCBgYDEuMGBgKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvXG5pbmRleCB0aGUgc2FtZSBkaWN0aW9uYXJ5IGVudHJ5LiAgKE5vdGUgaG93ZXZlciwgdGhhdCBzaW5jZSBjb21wdXRlcnNcbnN0b3JlIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXBwcm94aW1hdGlvbnMgaXQgaXMgdXN1YWxseSB1bndpc2UgdG9cbnVzZSB0aGVtIGFzIGRpY3Rpb25hcnkga2V5cy4pXG5cbkRpY3Rpb25hcmllcyBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2ZcbmBga2V5OiB2YWx1ZWBgIHBhaXJzIHdpdGhpbiBicmFjZXMsIGZvciBleGFtcGxlOiBgYHtcJ2phY2tcJzogNDA5OCxcblwnc2pvZXJkXCc6IDQxMjd9YGAgb3IgYGB7NDA5ODogXCdqYWNrXCcsIDQxMjc6IFwnc2pvZXJkXCd9YGAsIG9yIGJ5IHRoZVxuYGBkaWN0YGAgY29uc3RydWN0b3IuXG5cbmNsYXNzIGNsYXNzIGRpY3QoW2FyZ10pXG5cbiAgIFJldHVybiBhIG5ldyBkaWN0aW9uYXJ5IGluaXRpYWxpemVkIGZyb20gYW4gb3B0aW9uYWwgcG9zaXRpb25hbFxuICAgYXJndW1lbnQgb3IgZnJvbSBhIHNldCBvZiBrZXl3b3JkIGFyZ3VtZW50cy4gSWYgbm8gYXJndW1lbnRzIGFyZVxuICAgZ2l2ZW4sIHJldHVybiBhIG5ldyBlbXB0eSBkaWN0aW9uYXJ5LiBJZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgKmFyZyogaXMgYSBtYXBwaW5nIG9iamVjdCwgcmV0dXJuIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRoZSBzYW1lXG4gICBrZXlzIHRvIHRoZSBzYW1lIHZhbHVlcyBhcyBkb2VzIHRoZSBtYXBwaW5nIG9iamVjdC4gT3RoZXJ3aXNlIHRoZVxuICAgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGEgc2VxdWVuY2UsIGEgY29udGFpbmVyIHRoYXQgc3VwcG9ydHNcbiAgIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3Igb2JqZWN0LiAgVGhlIGVsZW1lbnRzIG9mIHRoZSBhcmd1bWVudFxuICAgbXVzdCBlYWNoIGFsc28gYmUgb2Ygb25lIG9mIHRob3NlIGtpbmRzLCBhbmQgZWFjaCBtdXN0IGluIHR1cm5cbiAgIGNvbnRhaW4gZXhhY3RseSB0d28gb2JqZWN0cy4gVGhlIGZpcnN0IGlzIHVzZWQgYXMgYSBrZXkgaW4gdGhlIG5ld1xuICAgZGljdGlvbmFyeSwgYW5kIHRoZSBzZWNvbmQgYXMgdGhlIGtleVwncyB2YWx1ZS4gIElmIGEgZ2l2ZW4ga2V5IGlzXG4gICBzZWVuIG1vcmUgdGhhbiBvbmNlLCB0aGUgbGFzdCB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXQgaXMgcmV0YWluZWRcbiAgIGluIHRoZSBuZXcgZGljdGlvbmFyeS5cblxuICAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIGdpdmVuLCB0aGUga2V5d29yZHMgdGhlbXNlbHZlcyB3aXRoIHRoZWlyXG4gICBhc3NvY2lhdGVkIHZhbHVlcyBhcmUgYWRkZWQgYXMgaXRlbXMgdG8gdGhlIGRpY3Rpb25hcnkuIElmIGEga2V5IGlzXG4gICBzcGVjaWZpZWQgYm90aCBpbiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBhbmQgYXMgYSBrZXl3b3JkXG4gICBhcmd1bWVudCwgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5d29yZCBpcyByZXRhaW5lZCBpbiB0aGVcbiAgIGRpY3Rpb25hcnkuIEZvciBleGFtcGxlLCB0aGVzZSBhbGwgcmV0dXJuIGEgZGljdGlvbmFyeSBlcXVhbCB0b1xuICAgYGB7Im9uZSI6IDIsICJ0d28iOiAzfWBgOlxuXG4gICAqIGBgZGljdChvbmU9MiwgdHdvPTMpYGBcblxuICAgKiBgYGRpY3Qoe1wnb25lXCc6IDIsIFwndHdvXCc6IDN9KWBgXG5cbiAgICogYGBkaWN0KHppcCgoXCdvbmVcJywgXCd0d29cJyksICgyLCAzKSkpYGBcblxuICAgKiBgYGRpY3QoW1tcJ3R3b1wnLCAzXSwgW1wnb25lXCcsIDJdXSlgYFxuXG4gICBUaGUgZmlyc3QgZXhhbXBsZSBvbmx5IHdvcmtzIGZvciBrZXlzIHRoYXQgYXJlIHZhbGlkIFB5dGhvblxuICAgaWRlbnRpZmllcnM7IHRoZSBvdGhlcnMgd29yayB3aXRoIGFueSB2YWxpZCBrZXlzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIGJ1aWxkaW5nIGEgZGljdGlvbmFyeSBmcm9tXG4gICBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuICAgVGhlc2UgYXJlIHRoZSBvcGVyYXRpb25zIHRoYXQgZGljdGlvbmFyaWVzIHN1cHBvcnQgKGFuZCB0aGVyZWZvcmUsXG4gICBjdXN0b20gbWFwcGluZyB0eXBlcyBzaG91bGQgc3VwcG9ydCB0b28pOlxuXG4gICBsZW4oZClcblxuICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGRpY3Rpb25hcnkgKmQqLlxuXG4gICBkW2tleV1cblxuICAgICAgUmV0dXJuIHRoZSBpdGVtIG9mICpkKiB3aXRoIGtleSAqa2V5Ki4gIFJhaXNlcyBhIGBgS2V5RXJyb3JgYCBpZlxuICAgICAgKmtleSogaXMgbm90IGluIHRoZSBtYXAuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuNTogSWYgYSBzdWJjbGFzcyBvZiBkaWN0IGRlZmluZXMgYSBtZXRob2RcbiAgICAgIGBgX19taXNzaW5nX18oKWBgLCBpZiB0aGUga2V5ICprZXkqIGlzIG5vdCBwcmVzZW50LCB0aGVcbiAgICAgIGBgZFtrZXldYGAgb3BlcmF0aW9uIGNhbGxzIHRoYXQgbWV0aG9kIHdpdGggdGhlIGtleSAqa2V5KiBhc1xuICAgICAgYXJndW1lbnQuICBUaGUgYGBkW2tleV1gYCBvcGVyYXRpb24gdGhlbiByZXR1cm5zIG9yIHJhaXNlc1xuICAgICAgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgb3IgcmFpc2VkIGJ5IHRoZSBgYF9fbWlzc2luZ19fKGtleSlgYCBjYWxsXG4gICAgICBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LiBObyBvdGhlciBvcGVyYXRpb25zIG9yIG1ldGhvZHMgaW52b2tlXG4gICAgICBgYF9fbWlzc2luZ19fKClgYC4gSWYgYGBfX21pc3NpbmdfXygpYGAgaXMgbm90IGRlZmluZWQsXG4gICAgICBgYEtleUVycm9yYGAgaXMgcmFpc2VkLiAgYGBfX21pc3NpbmdfXygpYGAgbXVzdCBiZSBhIG1ldGhvZDsgaXRcbiAgICAgIGNhbm5vdCBiZSBhbiBpbnN0YW5jZSB2YXJpYWJsZS4gRm9yIGFuIGV4YW1wbGUsIHNlZVxuICAgICAgYGBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdGBgLlxuXG4gICBkW2tleV0gPSB2YWx1ZVxuXG4gICAgICBTZXQgYGBkW2tleV1gYCB0byAqdmFsdWUqLlxuXG4gICBkZWwgZFtrZXldXG5cbiAgICAgIFJlbW92ZSBgYGRba2V5XWBgIGZyb20gKmQqLiAgUmFpc2VzIGEgYGBLZXlFcnJvcmBgIGlmICprZXkqIGlzXG4gICAgICBub3QgaW4gdGhlIG1hcC5cblxuICAga2V5IGluIGRcblxuICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICpkKiBoYXMgYSBrZXkgKmtleSosIGVsc2UgYGBGYWxzZWBgLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIGtleSBub3QgaW4gZFxuXG4gICAgICBFcXVpdmFsZW50IHRvIGBgbm90IGtleSBpbiBkYGAuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuICAgaXRlcihkKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cyBvZiB0aGUgZGljdGlvbmFyeS4gIFRoaXMgaXMgYVxuICAgICAgc2hvcnRjdXQgZm9yIGBgaXRlcmtleXMoKWBgLlxuXG4gICBjbGVhcigpXG5cbiAgICAgIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSB0aGUgZGljdGlvbmFyeS5cblxuICAgY29weSgpXG5cbiAgICAgIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGljdGlvbmFyeS5cblxuICAgZnJvbWtleXMoc2VxWywgdmFsdWVdKVxuXG4gICAgICBDcmVhdGUgYSBuZXcgZGljdGlvbmFyeSB3aXRoIGtleXMgZnJvbSAqc2VxKiBhbmQgdmFsdWVzIHNldCB0b1xuICAgICAgKnZhbHVlKi5cblxuICAgICAgYGBmcm9ta2V5cygpYGAgaXMgYSBjbGFzcyBtZXRob2QgdGhhdCByZXR1cm5zIGEgbmV3IGRpY3Rpb25hcnkuXG4gICAgICAqdmFsdWUqIGRlZmF1bHRzIHRvIGBgTm9uZWBgLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjMuXG5cbiAgIGdldChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBmb3IgKmtleSogaWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIGVsc2VcbiAgICAgICpkZWZhdWx0Ki4gSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gYGBOb25lYGAsXG4gICAgICBzbyB0aGF0IHRoaXMgbWV0aG9kIG5ldmVyIHJhaXNlcyBhIGBgS2V5RXJyb3JgYC5cblxuICAgaGFzX2tleShrZXkpXG5cbiAgICAgIFRlc3QgZm9yIHRoZSBwcmVzZW5jZSBvZiAqa2V5KiBpbiB0aGUgZGljdGlvbmFyeS4gIGBgaGFzX2tleSgpYGBcbiAgICAgIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYGBrZXkgaW4gZGBgLlxuXG4gICBpdGVtcygpXG5cbiAgICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgbGlzdCBvZiBgYChrZXksIHZhbHVlKWBgXG4gICAgICBwYWlycy5cblxuICAgICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBLZXlzIGFuZCB2YWx1ZXMgYXJlIGxpc3RlZCBpblxuICAgICAgYW4gYXJiaXRyYXJ5IG9yZGVyIHdoaWNoIGlzIG5vbi1yYW5kb20sIHZhcmllcyBhY3Jvc3MgUHl0aG9uXG4gICAgICBpbXBsZW1lbnRhdGlvbnMsIGFuZCBkZXBlbmRzIG9uIHRoZSBkaWN0aW9uYXJ5XCdzIGhpc3Rvcnkgb2ZcbiAgICAgIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy5cblxuICAgICAgSWYgYGBpdGVtcygpYGAsIGBga2V5cygpYGAsIGBgdmFsdWVzKClgYCwgYGBpdGVyaXRlbXMoKWBgLFxuICAgICAgYGBpdGVya2V5cygpYGAsIGFuZCBgYGl0ZXJ2YWx1ZXMoKWBgIGFyZSBjYWxsZWQgd2l0aCBub1xuICAgICAgaW50ZXJ2ZW5pbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGljdGlvbmFyeSwgdGhlIGxpc3RzIHdpbGxcbiAgICAgIGRpcmVjdGx5IGNvcnJlc3BvbmQuICBUaGlzIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgYGAodmFsdWUsXG4gICAgICBrZXkpYGAgcGFpcnMgdXNpbmcgYGB6aXAoKWBgOiBgYHBhaXJzID0gemlwKGQudmFsdWVzKCksXG4gICAgICBkLmtleXMoKSlgYC4gIFRoZSBzYW1lIHJlbGF0aW9uc2hpcCBob2xkcyBmb3IgdGhlIGBgaXRlcmtleXMoKWBgXG4gICAgICBhbmQgYGBpdGVydmFsdWVzKClgYCBtZXRob2RzOiBgYHBhaXJzID0gemlwKGQuaXRlcnZhbHVlcygpLFxuICAgICAgZC5pdGVya2V5cygpKWBgIHByb3ZpZGVzIHRoZSBzYW1lIHZhbHVlIGZvciBgYHBhaXJzYGAuIEFub3RoZXJcbiAgICAgIHdheSB0byBjcmVhdGUgdGhlIHNhbWUgbGlzdCBpcyBgYHBhaXJzID0gWyh2LCBrKSBmb3IgKGssIHYpIGluXG4gICAgICBkLml0ZXJpdGVtcygpXWBgLlxuXG4gICBpdGVyaXRlbXMoKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgZGljdGlvbmFyeVwncyBgYChrZXksIHZhbHVlKWBgIHBhaXJzLlxuICAgICAgU2VlIHRoZSBub3RlIGZvciBgYGRpY3QuaXRlbXMoKWBgLlxuXG4gICAgICBVc2luZyBgYGl0ZXJpdGVtcygpYGAgd2hpbGUgYWRkaW5nIG9yIGRlbGV0aW5nIGVudHJpZXMgaW4gdGhlXG4gICAgICBkaWN0aW9uYXJ5IG1heSByYWlzZSBhIGBgUnVudGltZUVycm9yYGAgb3IgZmFpbCB0byBpdGVyYXRlIG92ZXJcbiAgICAgIGFsbCBlbnRyaWVzLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIGl0ZXJrZXlzKClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGRpY3Rpb25hcnlcJ3Mga2V5cy4gIFNlZSB0aGUgbm90ZSBmb3JcbiAgICAgIGBgZGljdC5pdGVtcygpYGAuXG5cbiAgICAgIFVzaW5nIGBgaXRlcmtleXMoKWBgIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZVxuICAgICAgZGljdGlvbmFyeSBtYXkgcmFpc2UgYSBgYFJ1bnRpbWVFcnJvcmBgIG9yIGZhaWwgdG8gaXRlcmF0ZSBvdmVyXG4gICAgICBhbGwgZW50cmllcy5cblxuICAgICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG4gICBpdGVydmFsdWVzKClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGRpY3Rpb25hcnlcJ3MgdmFsdWVzLiAgU2VlIHRoZSBub3RlXG4gICAgICBmb3IgYGBkaWN0Lml0ZW1zKClgYC5cblxuICAgICAgVXNpbmcgYGBpdGVydmFsdWVzKClgYCB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGVcbiAgICAgIGRpY3Rpb25hcnkgbWF5IHJhaXNlIGEgYGBSdW50aW1lRXJyb3JgYCBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlclxuICAgICAgYWxsIGVudHJpZXMuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuICAga2V5cygpXG5cbiAgICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgbGlzdCBvZiBrZXlzLiAgU2VlIHRoZSBub3RlXG4gICAgICBmb3IgYGBkaWN0Lml0ZW1zKClgYC5cblxuICAgcG9wKGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmVtb3ZlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlLFxuICAgICAgZWxzZSByZXR1cm4gKmRlZmF1bHQqLiAgSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiBhbmQgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgZGljdGlvbmFyeSwgYSBgYEtleUVycm9yYGAgaXMgcmFpc2VkLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjMuXG5cbiAgIHBvcGl0ZW0oKVxuXG4gICAgICBSZW1vdmUgYW5kIHJldHVybiBhbiBhcmJpdHJhcnkgYGAoa2V5LCB2YWx1ZSlgYCBwYWlyIGZyb20gdGhlXG4gICAgICBkaWN0aW9uYXJ5LlxuXG4gICAgICBgYHBvcGl0ZW0oKWBgIGlzIHVzZWZ1bCB0byBkZXN0cnVjdGl2ZWx5IGl0ZXJhdGUgb3ZlciBhXG4gICAgICBkaWN0aW9uYXJ5LCBhcyBvZnRlbiB1c2VkIGluIHNldCBhbGdvcml0aG1zLiAgSWYgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIGVtcHR5LCBjYWxsaW5nIGBgcG9waXRlbSgpYGAgcmFpc2VzIGEgYGBLZXlFcnJvcmBgLlxuXG4gICBzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmV0dXJuIGl0cyB2YWx1ZS4gIElmIG5vdCwgaW5zZXJ0XG4gICAgICAqa2V5KiB3aXRoIGEgdmFsdWUgb2YgKmRlZmF1bHQqIGFuZCByZXR1cm4gKmRlZmF1bHQqLiAgKmRlZmF1bHQqXG4gICAgICBkZWZhdWx0cyB0byBgYE5vbmVgYC5cblxuICAgdXBkYXRlKFtvdGhlcl0pXG5cbiAgICAgIFVwZGF0ZSB0aGUgZGljdGlvbmFyeSB3aXRoIHRoZSBrZXkvdmFsdWUgcGFpcnMgZnJvbSAqb3RoZXIqLFxuICAgICAgb3ZlcndyaXRpbmcgZXhpc3Rpbmcga2V5cy4gIFJldHVybiBgYE5vbmVgYC5cblxuICAgICAgYGB1cGRhdGUoKWBgIGFjY2VwdHMgZWl0aGVyIGFub3RoZXIgZGljdGlvbmFyeSBvYmplY3Qgb3IgYW5cbiAgICAgIGl0ZXJhYmxlIG9mIGtleS92YWx1ZSBwYWlycyAoYXMgYSB0dXBsZSBvciBvdGhlciBpdGVyYWJsZSBvZlxuICAgICAgbGVuZ3RoIHR3bykuICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgdGhlbiB1cGRhdGVkIHdpdGggdGhvc2Uga2V5L3ZhbHVlIHBhaXJzOiBgYGQudXBkYXRlKHJlZD0xLFxuICAgICAgYmx1ZT0yKWBgLlxuXG4gICAgICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBBbGxvd2VkIHRoZSBhcmd1bWVudCB0byBiZSBhbiBpdGVyYWJsZVxuICAgICAgb2Yga2V5L3ZhbHVlIHBhaXJzIGFuZCBhbGxvd2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG4gICB2YWx1ZXMoKVxuXG4gICAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGxpc3Qgb2YgdmFsdWVzLiAgU2VlIHRoZSBub3RlXG4gICAgICBmb3IgYGBkaWN0Lml0ZW1zKClgYC5cblxuICAgdmlld2l0ZW1zKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgaXRlbXMgKGBgKGtleSwgdmFsdWUpYGBcbiAgICAgIHBhaXJzKS4gIFNlZSBiZWxvdyBmb3IgZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuNy5cblxuICAgdmlld2tleXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyBrZXlzLiAgU2VlIGJlbG93IGZvclxuICAgICAgZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuNy5cblxuICAgdmlld3ZhbHVlcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIHZhbHVlcy4gIFNlZSBiZWxvdyBmb3JcbiAgICAgIGRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjcuXG5cblxuRGljdGlvbmFyeSB2aWV3IG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvYmplY3RzIHJldHVybmVkIGJ5IGBgZGljdC52aWV3a2V5cygpYGAsIGBgZGljdC52aWV3dmFsdWVzKClgYCBhbmRcbmBgZGljdC52aWV3aXRlbXMoKWBgIGFyZSAqdmlldyBvYmplY3RzKi4gIFRoZXkgcHJvdmlkZSBhIGR5bmFtaWMgdmlld1xub24gdGhlIGRpY3Rpb25hcnlcJ3MgZW50cmllcywgd2hpY2ggbWVhbnMgdGhhdCB3aGVuIHRoZSBkaWN0aW9uYXJ5XG5jaGFuZ2VzLCB0aGUgdmlldyByZWZsZWN0cyB0aGVzZSBjaGFuZ2VzLlxuXG5EaWN0aW9uYXJ5IHZpZXdzIGNhbiBiZSBpdGVyYXRlZCBvdmVyIHRvIHlpZWxkIHRoZWlyIHJlc3BlY3RpdmUgZGF0YSxcbmFuZCBzdXBwb3J0IG1lbWJlcnNoaXAgdGVzdHM6XG5cbmxlbihkaWN0dmlldylcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeS5cblxuaXRlcihkaWN0dmlldylcblxuICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMsIHZhbHVlcyBvciBpdGVtcyAocmVwcmVzZW50ZWQgYXNcbiAgIHR1cGxlcyBvZiBgYChrZXksIHZhbHVlKWBgKSBpbiB0aGUgZGljdGlvbmFyeS5cblxuICAgS2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIGFuIGFyYml0cmFyeSBvcmRlciB3aGljaCBpc1xuICAgbm9uLXJhbmRvbSwgdmFyaWVzIGFjcm9zcyBQeXRob24gaW1wbGVtZW50YXRpb25zLCBhbmQgZGVwZW5kcyBvblxuICAgdGhlIGRpY3Rpb25hcnlcJ3MgaGlzdG9yeSBvZiBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMuIElmIGtleXMsXG4gICB2YWx1ZXMgYW5kIGl0ZW1zIHZpZXdzIGFyZSBpdGVyYXRlZCBvdmVyIHdpdGggbm8gaW50ZXJ2ZW5pbmdcbiAgIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGRpY3Rpb25hcnksIHRoZSBvcmRlciBvZiBpdGVtcyB3aWxsIGRpcmVjdGx5XG4gICBjb3JyZXNwb25kLiAgVGhpcyBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGBgKHZhbHVlLCBrZXkpYGAgcGFpcnNcbiAgIHVzaW5nIGBgemlwKClgYDogYGBwYWlycyA9IHppcChkLnZhbHVlcygpLCBkLmtleXMoKSlgYC4gIEFub3RoZXJcbiAgIHdheSB0byBjcmVhdGUgdGhlIHNhbWUgbGlzdCBpcyBgYHBhaXJzID0gWyh2LCBrKSBmb3IgKGssIHYpIGluXG4gICBkLml0ZW1zKCldYGAuXG5cbiAgIEl0ZXJhdGluZyB2aWV3cyB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeVxuICAgbWF5IHJhaXNlIGEgYGBSdW50aW1lRXJyb3JgYCBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcy5cblxueCBpbiBkaWN0dmlld1xuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgKngqIGlzIGluIHRoZSB1bmRlcmx5aW5nIGRpY3Rpb25hcnlcJ3Mga2V5cyxcbiAgIHZhbHVlcyBvciBpdGVtcyAoaW4gdGhlIGxhdHRlciBjYXNlLCAqeCogc2hvdWxkIGJlIGEgYGAoa2V5LFxuICAgdmFsdWUpYGAgdHVwbGUpLlxuXG5LZXlzIHZpZXdzIGFyZSBzZXQtbGlrZSBzaW5jZSB0aGVpciBlbnRyaWVzIGFyZSB1bmlxdWUgYW5kIGhhc2hhYmxlLlxuSWYgYWxsIHZhbHVlcyBhcmUgaGFzaGFibGUsIHNvIHRoYXQgKGtleSwgdmFsdWUpIHBhaXJzIGFyZSB1bmlxdWUgYW5kXG5oYXNoYWJsZSwgdGhlbiB0aGUgaXRlbXMgdmlldyBpcyBhbHNvIHNldC1saWtlLiAgKFZhbHVlcyB2aWV3cyBhcmUgbm90XG50cmVhdGVkIGFzIHNldC1saWtlIHNpbmNlIHRoZSBlbnRyaWVzIGFyZSBnZW5lcmFsbHkgbm90IHVuaXF1ZS4pICBUaGVuXG50aGVzZSBzZXQgb3BlcmF0aW9ucyBhcmUgYXZhaWxhYmxlICgib3RoZXIiIHJlZmVycyBlaXRoZXIgdG8gYW5vdGhlclxudmlldyBvciBhIHNldCk6XG5cbmRpY3R2aWV3ICYgb3RoZXJcblxuICAgUmV0dXJuIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGRpY3R2aWV3IGFuZCB0aGUgb3RoZXIgb2JqZWN0IGFzIGFcbiAgIG5ldyBzZXQuXG5cbmRpY3R2aWV3IHwgb3RoZXJcblxuICAgUmV0dXJuIHRoZSB1bmlvbiBvZiB0aGUgZGljdHZpZXcgYW5kIHRoZSBvdGhlciBvYmplY3QgYXMgYSBuZXcgc2V0LlxuXG5kaWN0dmlldyAtIG90aGVyXG5cbiAgIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkaWN0dmlldyBhbmQgdGhlIG90aGVyIG9iamVjdFxuICAgKGFsbCBlbGVtZW50cyBpbiAqZGljdHZpZXcqIHRoYXQgYXJlblwndCBpbiAqb3RoZXIqKSBhcyBhIG5ldyBzZXQuXG5cbmRpY3R2aWV3IF4gb3RoZXJcblxuICAgUmV0dXJuIHRoZSBzeW1tZXRyaWMgZGlmZmVyZW5jZSAoYWxsIGVsZW1lbnRzIGVpdGhlciBpbiAqZGljdHZpZXcqXG4gICBvciAqb3RoZXIqLCBidXQgbm90IGluIGJvdGgpIG9mIHRoZSBkaWN0dmlldyBhbmQgdGhlIG90aGVyIG9iamVjdFxuICAgYXMgYSBuZXcgc2V0LlxuXG5BbiBleGFtcGxlIG9mIGRpY3Rpb25hcnkgdmlldyB1c2FnZTpcblxuICAgPj4+IGRpc2hlcyA9IHtcJ2VnZ3NcJzogMiwgXCdzYXVzYWdlXCc6IDEsIFwnYmFjb25cJzogMSwgXCdzcGFtXCc6IDUwMH1cbiAgID4+PiBrZXlzID0gZGlzaGVzLnZpZXdrZXlzKClcbiAgID4+PiB2YWx1ZXMgPSBkaXNoZXMudmlld3ZhbHVlcygpXG5cbiAgID4+PiAjIGl0ZXJhdGlvblxuICAgPj4+IG4gPSAwXG4gICA+Pj4gZm9yIHZhbCBpbiB2YWx1ZXM6XG4gICAuLi4gICAgIG4gKz0gdmFsXG4gICA+Pj4gcHJpbnQobilcbiAgIDUwNFxuXG4gICA+Pj4gIyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gdGhlIHNhbWUgb3JkZXJcbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYXVzYWdlXCcsIFwnc3BhbVwnXVxuICAgPj4+IGxpc3QodmFsdWVzKVxuICAgWzIsIDEsIDEsIDUwMF1cblxuICAgPj4+ICMgdmlldyBvYmplY3RzIGFyZSBkeW5hbWljIGFuZCByZWZsZWN0IGRpY3QgY2hhbmdlc1xuICAgPj4+IGRlbCBkaXNoZXNbXCdlZ2dzXCddXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ3NhdXNhZ2VcJ11cbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdzcGFtXCcsIFwnYmFjb25cJ11cblxuICAgPj4+ICMgc2V0IG9wZXJhdGlvbnNcbiAgID4+PiBrZXlzICYge1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2FsYWRcJ31cbiAgIHtcJ2JhY29uXCd9XG4nLAogICd0eXBlc21ldGhvZHMnOiB1IlxuTWV0aG9kc1xuKioqKioqKlxuXG5NZXRob2RzIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIHVzaW5nIHRoZSBhdHRyaWJ1dGUgbm90YXRpb24uXG5UaGVyZSBhcmUgdHdvIGZsYXZvcnM6IGJ1aWx0LWluIG1ldGhvZHMgKHN1Y2ggYXMgYGBhcHBlbmQoKWBgIG9uXG5saXN0cykgYW5kIGNsYXNzIGluc3RhbmNlIG1ldGhvZHMuICBCdWlsdC1pbiBtZXRob2RzIGFyZSBkZXNjcmliZWRcbndpdGggdGhlIHR5cGVzIHRoYXQgc3VwcG9ydCB0aGVtLlxuXG5UaGUgaW1wbGVtZW50YXRpb24gYWRkcyB0d28gc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlcyB0byBjbGFzc1xuaW5zdGFuY2UgbWV0aG9kczogYGBtLmltX3NlbGZgYCBpcyB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2Rcbm9wZXJhdGVzLCBhbmQgYGBtLmltX2Z1bmNgYCBpcyB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBtZXRob2QuXG5DYWxsaW5nIGBgbShhcmctMSwgYXJnLTIsIC4uLiwgYXJnLW4pYGAgaXMgY29tcGxldGVseSBlcXVpdmFsZW50IHRvXG5jYWxsaW5nIGBgbS5pbV9mdW5jKG0uaW1fc2VsZiwgYXJnLTEsIGFyZy0yLCAuLi4sIGFyZy1uKWBgLlxuXG5DbGFzcyBpbnN0YW5jZSBtZXRob2RzIGFyZSBlaXRoZXIgKmJvdW5kKiBvciAqdW5ib3VuZCosIHJlZmVycmluZyB0b1xud2hldGhlciB0aGUgbWV0aG9kIHdhcyBhY2Nlc3NlZCB0aHJvdWdoIGFuIGluc3RhbmNlIG9yIGEgY2xhc3MsXG5yZXNwZWN0aXZlbHkuICBXaGVuIGEgbWV0aG9kIGlzIHVuYm91bmQsIGl0cyBgYGltX3NlbGZgYCBhdHRyaWJ1dGVcbndpbGwgYmUgYGBOb25lYGAgYW5kIGlmIGNhbGxlZCwgYW4gZXhwbGljaXQgYGBzZWxmYGAgb2JqZWN0IG11c3QgYmVcbnBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuICBJbiB0aGlzIGNhc2UsIGBgc2VsZmBgIG11c3QgYmUgYW5cbmluc3RhbmNlIG9mIHRoZSB1bmJvdW5kIG1ldGhvZCdzIGNsYXNzIChvciBhIHN1YmNsYXNzIG9mIHRoYXQgY2xhc3MpLFxub3RoZXJ3aXNlIGEgYGBUeXBlRXJyb3JgYCBpcyByYWlzZWQuXG5cbkxpa2UgZnVuY3Rpb24gb2JqZWN0cywgbWV0aG9kcyBvYmplY3RzIHN1cHBvcnQgZ2V0dGluZyBhcmJpdHJhcnlcbmF0dHJpYnV0ZXMuIEhvd2V2ZXIsIHNpbmNlIG1ldGhvZCBhdHRyaWJ1dGVzIGFyZSBhY3R1YWxseSBzdG9yZWQgb25cbnRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdCAoYGBtZXRoLmltX2Z1bmNgYCksIHNldHRpbmcgbWV0aG9kXG5hdHRyaWJ1dGVzIG9uIGVpdGhlciBib3VuZCBvciB1bmJvdW5kIG1ldGhvZHMgaXMgZGlzYWxsb3dlZC5cbkF0dGVtcHRpbmcgdG8gc2V0IGEgbWV0aG9kIGF0dHJpYnV0ZSByZXN1bHRzIGluIGEgYGBUeXBlRXJyb3JgYCBiZWluZ1xucmFpc2VkLiAgSW4gb3JkZXIgdG8gc2V0IGEgbWV0aG9kIGF0dHJpYnV0ZSwgeW91IG5lZWQgdG8gZXhwbGljaXRseVxuc2V0IGl0IG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdDpcblxuICAgY2xhc3MgQzpcbiAgICAgICBkZWYgbWV0aG9kKHNlbGYpOlxuICAgICAgICAgICBwYXNzXG5cbiAgIGMgPSBDKClcbiAgIGMubWV0aG9kLmltX2Z1bmMud2hvYW1pID0gJ215IG5hbWUgaXMgYydcblxuU2VlICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIiwKICAndHlwZXNtb2R1bGVzJzogdSJcbk1vZHVsZXNcbioqKioqKipcblxuVGhlIG9ubHkgc3BlY2lhbCBvcGVyYXRpb24gb24gYSBtb2R1bGUgaXMgYXR0cmlidXRlIGFjY2VzczpcbmBgbS5uYW1lYGAsIHdoZXJlICptKiBpcyBhIG1vZHVsZSBhbmQgKm5hbWUqIGFjY2Vzc2VzIGEgbmFtZSBkZWZpbmVkXG5pbiAqbSoncyBzeW1ib2wgdGFibGUuIE1vZHVsZSBhdHRyaWJ1dGVzIGNhbiBiZSBhc3NpZ25lZCB0by4gIChOb3RlXG50aGF0IHRoZSBgYGltcG9ydGBgIHN0YXRlbWVudCBpcyBub3QsIHN0cmljdGx5IHNwZWFraW5nLCBhbiBvcGVyYXRpb25cbm9uIGEgbW9kdWxlIG9iamVjdDsgYGBpbXBvcnQgZm9vYGAgZG9lcyBub3QgcmVxdWlyZSBhIG1vZHVsZSBvYmplY3Rcbm5hbWVkICpmb28qIHRvIGV4aXN0LCByYXRoZXIgaXQgcmVxdWlyZXMgYW4gKGV4dGVybmFsKSAqZGVmaW5pdGlvbipcbmZvciBhIG1vZHVsZSBuYW1lZCAqZm9vKiBzb21ld2hlcmUuKVxuXG5BIHNwZWNpYWwgbWVtYmVyIG9mIGV2ZXJ5IG1vZHVsZSBpcyBgYF9fZGljdF9fYGAuIFRoaXMgaXMgdGhlXG5kaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIG1vZHVsZSdzIHN5bWJvbCB0YWJsZS4gTW9kaWZ5aW5nIHRoaXNcbmRpY3Rpb25hcnkgd2lsbCBhY3R1YWxseSBjaGFuZ2UgdGhlIG1vZHVsZSdzIHN5bWJvbCB0YWJsZSwgYnV0IGRpcmVjdFxuYXNzaWdubWVudCB0byB0aGUgYGBfX2RpY3RfX2BgIGF0dHJpYnV0ZSBpcyBub3QgcG9zc2libGUgKHlvdSBjYW5cbndyaXRlIGBgbS5fX2RpY3RfX1snYSddID0gMWBgLCB3aGljaCBkZWZpbmVzIGBgbS5hYGAgdG8gYmUgYGAxYGAsIGJ1dFxueW91IGNhbid0IHdyaXRlIGBgbS5fX2RpY3RfXyA9IHt9YGApLiAgTW9kaWZ5aW5nIGBgX19kaWN0X19gYCBkaXJlY3RseVxuaXMgbm90IHJlY29tbWVuZGVkLlxuXG5Nb2R1bGVzIGJ1aWx0IGludG8gdGhlIGludGVycHJldGVyIGFyZSB3cml0dGVuIGxpa2UgdGhpczogYGA8bW9kdWxlXG4nc3lzJyAoYnVpbHQtaW4pPmBgLiAgSWYgbG9hZGVkIGZyb20gYSBmaWxlLCB0aGV5IGFyZSB3cml0dGVuIGFzXG5gYDxtb2R1bGUgJ29zJyBmcm9tICcvdXNyL2xvY2FsL2xpYi9weXRob25YLlkvb3MucHljJz5gYC5cbiIsCi0gJ3R5cGVzc2VxJzogdSdcblNlcXVlbmNlIFR5cGVzIC0tLSBgYHN0cmBgLCBgYHVuaWNvZGVgYCwgYGBsaXN0YGAsIGBgdHVwbGVgYCwgYGBidWZmZXJgYCwgYGB4cmFuZ2VgYFxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSBzaXggc2VxdWVuY2UgdHlwZXM6IHN0cmluZ3MsIFVuaWNvZGUgc3RyaW5ncywgbGlzdHMsIHR1cGxlcyxcbmJ1ZmZlcnMsIGFuZCB4cmFuZ2Ugb2JqZWN0cy5cblxuRm9yIG90aGVyIGNvbnRhaW5lcnMgc2VlIHRoZSBidWlsdCBpbiBgYGRpY3RgYCBhbmQgYGBzZXRgYCBjbGFzc2VzLFxuYW5kIHRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlLlxuXG5TdHJpbmcgbGl0ZXJhbHMgYXJlIHdyaXR0ZW4gaW4gc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXM6IGBgXCd4eXp6eVwnYGAsXG5gYCJmcm9ib3p6ImBgLiAgU2VlICpTdHJpbmcgbGl0ZXJhbHMqIGZvciBtb3JlIGFib3V0IHN0cmluZyBsaXRlcmFscy5cblVuaWNvZGUgc3RyaW5ncyBhcmUgbXVjaCBsaWtlIHN0cmluZ3MsIGJ1dCBhcmUgc3BlY2lmaWVkIGluIHRoZSBzeW50YXhcbnVzaW5nIGEgcHJlY2VkaW5nIGBgXCd1XCdgYCBjaGFyYWN0ZXI6IGBgdVwnYWJjXCdgYCwgYGB1ImRlZiJgYC4gSW5cbmFkZGl0aW9uIHRvIHRoZSBmdW5jdGlvbmFsaXR5IGRlc2NyaWJlZCBoZXJlLCB0aGVyZSBhcmUgYWxzbyBzdHJpbmctXG5zcGVjaWZpYyBtZXRob2RzIGRlc2NyaWJlZCBpbiB0aGUgKlN0cmluZyBNZXRob2RzKiBzZWN0aW9uLiBMaXN0cyBhcmVcbmNvbnN0cnVjdGVkIHdpdGggc3F1YXJlIGJyYWNrZXRzLCBzZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiBgYFthLFxuYiwgY11gYC4gVHVwbGVzIGFyZSBjb25zdHJ1Y3RlZCBieSB0aGUgY29tbWEgb3BlcmF0b3IgKG5vdCB3aXRoaW5cbnNxdWFyZSBicmFja2V0cyksIHdpdGggb3Igd2l0aG91dCBlbmNsb3NpbmcgcGFyZW50aGVzZXMsIGJ1dCBhbiBlbXB0eVxudHVwbGUgbXVzdCBoYXZlIHRoZSBlbmNsb3NpbmcgcGFyZW50aGVzZXMsIHN1Y2ggYXMgYGBhLCBiLCBjYGAgb3JcbmBgKClgYC4gIEEgc2luZ2xlIGl0ZW0gdHVwbGUgbXVzdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEsIHN1Y2ggYXNcbmBgKGQsKWBgLlxuXG5CdWZmZXIgb2JqZWN0cyBhcmUgbm90IGRpcmVjdGx5IHN1cHBvcnRlZCBieSBQeXRob24gc3ludGF4LCBidXQgY2FuIGJlXG5jcmVhdGVkIGJ5IGNhbGxpbmcgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgYnVmZmVyKClgYC4gIFRoZXkgZG9uXCd0XG5zdXBwb3J0IGNvbmNhdGVuYXRpb24gb3IgcmVwZXRpdGlvbi5cblxuT2JqZWN0cyBvZiB0eXBlIHhyYW5nZSBhcmUgc2ltaWxhciB0byBidWZmZXJzIGluIHRoYXQgdGhlcmUgaXMgbm9cbnNwZWNpZmljIHN5bnRheCB0byBjcmVhdGUgdGhlbSwgYnV0IHRoZXkgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlXG5gYHhyYW5nZSgpYGAgZnVuY3Rpb24uICBUaGV5IGRvblwndCBzdXBwb3J0IHNsaWNpbmcsIGNvbmNhdGVuYXRpb24gb3JcbnJlcGV0aXRpb24sIGFuZCB1c2luZyBgYGluYGAsIGBgbm90IGluYGAsIGBgbWluKClgYCBvciBgYG1heCgpYGAgb25cbnRoZW0gaXMgaW5lZmZpY2llbnQuXG5cbk1vc3Qgc2VxdWVuY2UgdHlwZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMuICBUaGUgYGBpbmBgIGFuZFxuYGBub3QgaW5gYCBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdGllcyBhcyB0aGUgY29tcGFyaXNvblxub3BlcmF0aW9ucy4gIFRoZSBgYCtgYCBhbmQgYGAqYGAgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IGFzXG50aGUgY29ycmVzcG9uZGluZyBudW1lcmljIG9wZXJhdGlvbnMuIFszXSBBZGRpdGlvbmFsIG1ldGhvZHMgYXJlXG5wcm92aWRlZCBmb3IgKk11dGFibGUgU2VxdWVuY2UgVHlwZXMqLlxuXG5UaGlzIHRhYmxlIGxpc3RzIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHlcbihvcGVyYXRpb25zIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5KS4gIEluIHRoZSB0YWJsZSxcbipzKiBhbmQgKnQqIGFyZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZTsgKm4qLCAqaSogYW5kICpqKiBhcmVcbmludGVnZXJzOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rXG58IGBgeCBpbiBzYGAgICAgICAgICB8IGBgVHJ1ZWBgIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgIHwgKDEpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSBgYEZhbHNlYGAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgeCBub3QgaW4gc2BgICAgICB8IGBgRmFsc2VgYCBpZiBhbiBpdGVtIG9mICpzKiBpcyAgIHwgKDEpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSBgYFRydWVgYCAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyArIHRgYCAgICAgICAgICB8IHRoZSBjb25jYXRlbmF0aW9uIG9mICpzKiBhbmQgKnQqIHwgKDYpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyAqIG4sIG4gKiBzYGAgICB8ICpuKiBzaGFsbG93IGNvcGllcyBvZiAqcyogICAgICAgIHwgKDIpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IGNvbmNhdGVuYXRlZCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpXWBgICAgICAgICAgICB8ICppKlwndGggaXRlbSBvZiAqcyosIG9yaWdpbiAwICAgICB8ICgzKSAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXWBgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdYGAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg1KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgfCB3aXRoIHN0ZXAgKmsqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYGxlbihzKWBgICAgICAgICAgfCBsZW5ndGggb2YgKnMqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1pbihzKWBgICAgICAgICAgfCBzbWFsbGVzdCBpdGVtIG9mICpzKiAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1heChzKWBgICAgICAgICAgfCBsYXJnZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuXG5TZXF1ZW5jZSB0eXBlcyBhbHNvIHN1cHBvcnQgY29tcGFyaXNvbnMuIEluIHBhcnRpY3VsYXIsIHR1cGxlcyBhbmRcbmxpc3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSBieSBjb21wYXJpbmcgY29ycmVzcG9uZGluZ1xuZWxlbWVudHMuIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBldmVyeSBlbGVtZW50IG11c3QgY29tcGFyZVxuZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZVxubGVuZ3RoLiAoRm9yIGZ1bGwgZGV0YWlscyBzZWUgKkNvbXBhcmlzb25zKiBpbiB0aGUgbGFuZ3VhZ2VcbnJlZmVyZW5jZS4pXG5cbk5vdGVzOlxuXG4xLiBXaGVuICpzKiBpcyBhIHN0cmluZyBvciBVbmljb2RlIHN0cmluZyBvYmplY3QgdGhlIGBgaW5gYCBhbmQgYGBub3RcbiAgIGluYGAgb3BlcmF0aW9ucyBhY3QgbGlrZSBhIHN1YnN0cmluZyB0ZXN0LiAgSW4gUHl0aG9uIHZlcnNpb25zXG4gICBiZWZvcmUgMi4zLCAqeCogaGFkIHRvIGJlIGEgc3RyaW5nIG9mIGxlbmd0aCAxLiBJbiBQeXRob24gMi4zIGFuZFxuICAgYmV5b25kLCAqeCogbWF5IGJlIGEgc3RyaW5nIG9mIGFueSBsZW5ndGguXG5cbjIuIFZhbHVlcyBvZiAqbiogbGVzcyB0aGFuIGBgMGBgIGFyZSB0cmVhdGVkIGFzIGBgMGBgICh3aGljaCB5aWVsZHMgYW5cbiAgIGVtcHR5IHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUgYXMgKnMqKS4gIE5vdGUgYWxzbyB0aGF0IHRoZSBjb3BpZXNcbiAgIGFyZSBzaGFsbG93OyBuZXN0ZWQgc3RydWN0dXJlcyBhcmUgbm90IGNvcGllZC4gIFRoaXMgb2Z0ZW4gaGF1bnRzXG4gICBuZXcgUHl0aG9uIHByb2dyYW1tZXJzOyBjb25zaWRlcjpcblxuICAgPj4+IGxpc3RzID0gW1tdXSAqIDNcbiAgID4+PiBsaXN0c1xuICAgW1tdLCBbXSwgW11dXG4gICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICA+Pj4gbGlzdHNcbiAgIFtbM10sIFszXSwgWzNdXVxuXG4gICBXaGF0IGhhcyBoYXBwZW5lZCBpcyB0aGF0IGBgW1tdXWBgIGlzIGEgb25lLWVsZW1lbnQgbGlzdCBjb250YWluaW5nXG4gICBhbiBlbXB0eSBsaXN0LCBzbyBhbGwgdGhyZWUgZWxlbWVudHMgb2YgYGBbW11dICogM2BgIGFyZSAocG9pbnRlcnNcbiAgIHRvKSB0aGlzIHNpbmdsZSBlbXB0eSBsaXN0LiAgTW9kaWZ5aW5nIGFueSBvZiB0aGUgZWxlbWVudHMgb2ZcbiAgIGBgbGlzdHNgYCBtb2RpZmllcyB0aGlzIHNpbmdsZSBsaXN0LiBZb3UgY2FuIGNyZWF0ZSBhIGxpc3Qgb2ZcbiAgIGRpZmZlcmVudCBsaXN0cyB0aGlzIHdheTpcblxuICAgPj4+IGxpc3RzID0gW1tdIGZvciBpIGluIHJhbmdlKDMpXVxuICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgPj4+IGxpc3RzWzFdLmFwcGVuZCg1KVxuICAgPj4+IGxpc3RzWzJdLmFwcGVuZCg3KVxuICAgPj4+IGxpc3RzXG4gICBbWzNdLCBbNV0sIFs3XV1cblxuMy4gSWYgKmkqIG9yICpqKiBpcyBuZWdhdGl2ZSwgdGhlIGluZGV4IGlzIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlXG4gICBzdHJpbmc6IGBgbGVuKHMpICsgaWBgIG9yIGBgbGVuKHMpICsgamBgIGlzIHN1YnN0aXR1dGVkLiAgQnV0IG5vdGVcbiAgIHRoYXQgYGAtMGBgIGlzIHN0aWxsIGBgMGBgLlxuXG40LiBUaGUgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyBkZWZpbmVkIGFzIHRoZSBzZXF1ZW5jZSBvZlxuICAgaXRlbXMgd2l0aCBpbmRleCAqayogc3VjaCB0aGF0IGBgaSA8PSBrIDwgamBgLiAgSWYgKmkqIG9yICpqKiBpc1xuICAgZ3JlYXRlciB0aGFuIGBgbGVuKHMpYGAsIHVzZSBgYGxlbihzKWBgLiAgSWYgKmkqIGlzIG9taXR0ZWQgb3JcbiAgIGBgTm9uZWBgLCB1c2UgYGAwYGAuICBJZiAqaiogaXMgb21pdHRlZCBvciBgYE5vbmVgYCwgdXNlXG4gICBgYGxlbihzKWBgLiAgSWYgKmkqIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAqaiosIHRoZSBzbGljZSBpc1xuICAgZW1wdHkuXG5cbjUuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIHdpdGggc3RlcCAqayogaXMgZGVmaW5lZCBhcyB0aGVcbiAgIHNlcXVlbmNlIG9mIGl0ZW1zIHdpdGggaW5kZXggIGBgeCA9IGkgKyBuKmtgYCBzdWNoIHRoYXQgYGAwIDw9IG4gPFxuICAgKGotaSkva2BgLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbmRpY2VzIGFyZSBgYGlgYCwgYGBpK2tgYCxcbiAgIGBgaSsyKmtgYCwgYGBpKzMqa2BgIGFuZCBzbyBvbiwgc3RvcHBpbmcgd2hlbiAqaiogaXMgcmVhY2hlZCAoYnV0XG4gICBuZXZlciBpbmNsdWRpbmcgKmoqKS4gIElmICppKiBvciAqaiogaXMgZ3JlYXRlciB0aGFuIGBgbGVuKHMpYGAsXG4gICB1c2UgYGBsZW4ocylgYC4gIElmICppKiBvciAqaiogYXJlIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZXkgYmVjb21lXG4gICAiZW5kIiB2YWx1ZXMgKHdoaWNoIGVuZCBkZXBlbmRzIG9uIHRoZSBzaWduIG9mICprKikuICBOb3RlLCAqaypcbiAgIGNhbm5vdCBiZSB6ZXJvLiBJZiAqayogaXMgYGBOb25lYGAsIGl0IGlzIHRyZWF0ZWQgbGlrZSBgYDFgYC5cblxuNi4gKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBJZiAqcyogYW5kICp0KiBhcmUgYm90aCBzdHJpbmdzLFxuICAgc29tZSBQeXRob24gaW1wbGVtZW50YXRpb25zIHN1Y2ggYXMgQ1B5dGhvbiBjYW4gdXN1YWxseSBwZXJmb3JtIGFuXG4gICBpbi1wbGFjZSBvcHRpbWl6YXRpb24gZm9yIGFzc2lnbm1lbnRzIG9mIHRoZSBmb3JtIGBgcyA9IHMgKyB0YGAgb3JcbiAgIGBgcyArPSB0YGAuICBXaGVuIGFwcGxpY2FibGUsIHRoaXMgb3B0aW1pemF0aW9uIG1ha2VzIHF1YWRyYXRpY1xuICAgcnVuLXRpbWUgbXVjaCBsZXNzIGxpa2VseS4gIFRoaXMgb3B0aW1pemF0aW9uIGlzIGJvdGggdmVyc2lvbiBhbmRcbiAgIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIEZvciBwZXJmb3JtYW5jZSBzZW5zaXRpdmUgY29kZSwgaXQgaXNcbiAgIHByZWZlcmFibGUgdG8gdXNlIHRoZSBgYHN0ci5qb2luKClgYCBtZXRob2Qgd2hpY2ggYXNzdXJlc1xuICAgY29uc2lzdGVudCBsaW5lYXIgY29uY2F0ZW5hdGlvbiBwZXJmb3JtYW5jZSBhY3Jvc3MgdmVyc2lvbnMgYW5kXG4gICBpbXBsZW1lbnRhdGlvbnMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IEZvcm1lcmx5LCBzdHJpbmcgY29uY2F0ZW5hdGlvbiBuZXZlclxuICAgb2NjdXJyZWQgaW4tcGxhY2UuXG5cblxuU3RyaW5nIE1ldGhvZHNcbj09PT09PT09PT09PT09XG5cbkJlbG93IGFyZSBsaXN0ZWQgdGhlIHN0cmluZyBtZXRob2RzIHdoaWNoIGJvdGggOC1iaXQgc3RyaW5ncyBhbmRcblVuaWNvZGUgb2JqZWN0cyBzdXBwb3J0LiBOb3RlIHRoYXQgbm9uZSBvZiB0aGVzZSBtZXRob2RzIHRha2Uga2V5d29yZFxuYXJndW1lbnRzLlxuXG5JbiBhZGRpdGlvbiwgUHl0aG9uXCdzIHN0cmluZ3Mgc3VwcG9ydCB0aGUgc2VxdWVuY2UgdHlwZSBtZXRob2RzXG5kZXNjcmliZWQgaW4gdGhlICpTZXF1ZW5jZSBUeXBlcyAtLS0gc3RyLCB1bmljb2RlLCBsaXN0LCB0dXBsZSxcbmJ1ZmZlciwgeHJhbmdlKiBzZWN0aW9uLiBUbyBvdXRwdXQgZm9ybWF0dGVkIHN0cmluZ3MgdXNlIHRlbXBsYXRlXG5zdHJpbmdzIG9yIHRoZSBgYCVgYCBvcGVyYXRvciBkZXNjcmliZWQgaW4gdGhlICpTdHJpbmcgRm9ybWF0dGluZ1xuT3BlcmF0aW9ucyogc2VjdGlvbi4gQWxzbywgc2VlIHRoZSBgYHJlYGAgbW9kdWxlIGZvciBzdHJpbmcgZnVuY3Rpb25zXG5iYXNlZCBvbiByZWd1bGFyIGV4cHJlc3Npb25zLlxuXG5zdHIuY2FwaXRhbGl6ZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGl0cyBmaXJzdCBjaGFyYWN0ZXIgY2FwaXRhbGl6ZWRcbiAgIGFuZCB0aGUgcmVzdCBsb3dlcmNhc2VkLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmNlbnRlcih3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIGNlbnRlcmVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzIGRvbmVcbiAgIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhIHNwYWNlKS5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgdGhlICpmaWxsY2hhciogYXJndW1lbnQuXG5cbnN0ci5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpzdWIqXG4gICBpbiB0aGUgcmFuZ2UgWypzdGFydCosICplbmQqXS4gIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZFxuICAgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLlxuXG5zdHIuZGVjb2RlKFtlbmNvZGluZ1ssIGVycm9yc11dKVxuXG4gICBEZWNvZGVzIHRoZSBzdHJpbmcgdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yICplbmNvZGluZyouXG4gICAqZW5jb2RpbmcqIGRlZmF1bHRzIHRvIHRoZSBkZWZhdWx0IHN0cmluZyBlbmNvZGluZy4gICplcnJvcnMqIG1heVxuICAgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gIFRoZSBkZWZhdWx0IGlzXG4gICBgYFwnc3RyaWN0XCdgYCwgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBgYFVuaWNvZGVFcnJvcmBgLlxuICAgT3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZSBgYFwnaWdub3JlXCdgYCwgYGBcJ3JlcGxhY2VcJ2BgIGFuZCBhbnkgb3RoZXJcbiAgIG5hbWUgcmVnaXN0ZXJlZCB2aWEgYGBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKWBgLCBzZWUgc2VjdGlvbiAqQ29kZWNcbiAgIEJhc2UgQ2xhc3NlcyouXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogU3VwcG9ydCBmb3Igb3RoZXIgZXJyb3IgaGFuZGxpbmcgc2NoZW1lc1xuICAgYWRkZWQuXG5cbnN0ci5lbmNvZGUoW2VuY29kaW5nWywgZXJyb3JzXV0pXG5cbiAgIFJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZy4gIERlZmF1bHQgZW5jb2RpbmcgaXMgdGhlXG4gICBjdXJyZW50IGRlZmF1bHQgc3RyaW5nIGVuY29kaW5nLiAgKmVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCBhXG4gICBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiAgVGhlIGRlZmF1bHQgZm9yICplcnJvcnMqIGlzXG4gICBgYFwnc3RyaWN0XCdgYCwgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhXG4gICBgYFVuaWNvZGVFcnJvcmBgLiAgT3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZSBgYFwnaWdub3JlXCdgYCxcbiAgIGBgXCdyZXBsYWNlXCdgYCwgYGBcJ3htbGNoYXJyZWZyZXBsYWNlXCdgYCwgYGBcJ2JhY2tzbGFzaHJlcGxhY2VcJ2BgIGFuZFxuICAgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB2aWEgYGBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKWBgLCBzZWVcbiAgIHNlY3Rpb24gKkNvZGVjIEJhc2UgQ2xhc3NlcyouIEZvciBhIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWVcbiAgIHNlY3Rpb24gKlN0YW5kYXJkIEVuY29kaW5ncyouXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogU3VwcG9ydCBmb3IgYGBcJ3htbGNoYXJyZWZyZXBsYWNlXCdgYCBhbmRcbiAgIGBgXCdiYWNrc2xhc2hyZXBsYWNlXCdgYCBhbmQgb3RoZXIgZXJyb3IgaGFuZGxpbmcgc2NoZW1lcyBhZGRlZC5cblxuc3RyLmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkICpzdWZmaXgqLFxuICAgb3RoZXJ3aXNlIHJldHVybiBgYEZhbHNlYGAuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mXG4gICBzdWZmaXhlcyB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXRcbiAgIHRoYXQgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNTogQWNjZXB0IHR1cGxlcyBhcyAqc3VmZml4Ki5cblxuc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZFxuICAgYnkgb25lIG9yIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGVcbiAgIGdpdmVuIHRhYiBzaXplLiAgVGhlIGNvbHVtbiBudW1iZXIgaXMgcmVzZXQgdG8gemVybyBhZnRlciBlYWNoXG4gICBuZXdsaW5lIG9jY3VycmluZyBpbiB0aGUgc3RyaW5nLiBJZiAqdGFic2l6ZSogaXMgbm90IGdpdmVuLCBhIHRhYlxuICAgc2l6ZSBvZiBgYDhgYCBjaGFyYWN0ZXJzIGlzIGFzc3VtZWQuICBUaGlzIGRvZXNuXCd0IHVuZGVyc3RhbmQgb3RoZXJcbiAgIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzIG9yIGVzY2FwZSBzZXF1ZW5jZXMuXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBpZiAqc3ViKiBpcyBub3QgZm91bmQuXG5cbnN0ci5mb3JtYXQoKmFyZ3MsICoqa3dhcmdzKVxuXG4gICBQZXJmb3JtIGEgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0aW9uLiAgVGhlIHN0cmluZyBvbiB3aGljaCB0aGlzXG4gICBtZXRob2QgaXMgY2FsbGVkIGNhbiBjb250YWluIGxpdGVyYWwgdGV4dCBvciByZXBsYWNlbWVudCBmaWVsZHNcbiAgIGRlbGltaXRlZCBieSBicmFjZXMgYGB7fWBgLiAgRWFjaCByZXBsYWNlbWVudCBmaWVsZCBjb250YWlucyBlaXRoZXJcbiAgIHRoZSBudW1lcmljIGluZGV4IG9mIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgb3IgdGhlIG5hbWUgb2YgYVxuICAga2V5d29yZCBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgZWFjaFxuICAgcmVwbGFjZW1lbnQgZmllbGQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZVxuICAgY29ycmVzcG9uZGluZyBhcmd1bWVudC5cblxuICAgPj4+ICJUaGUgc3VtIG9mIDEgKyAyIGlzIHswfSIuZm9ybWF0KDErMilcbiAgIFwnVGhlIHN1bSBvZiAxICsgMiBpcyAzXCdcblxuICAgU2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlvdXNcbiAgIGZvcm1hdHRpbmcgb3B0aW9ucyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaW4gZm9ybWF0IHN0cmluZ3MuXG5cbiAgIFRoaXMgbWV0aG9kIG9mIHN0cmluZyBmb3JtYXR0aW5nIGlzIHRoZSBuZXcgc3RhbmRhcmQgaW4gUHl0aG9uIDMuMCxcbiAgIGFuZCBzaG91bGQgYmUgcHJlZmVycmVkIHRvIHRoZSBgYCVgYCBmb3JtYXR0aW5nIGRlc2NyaWJlZCBpblxuICAgKlN0cmluZyBGb3JtYXR0aW5nIE9wZXJhdGlvbnMqIGluIG5ldyBjb2RlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjYuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgZmluZCgpYGAsIGJ1dCByYWlzZSBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90XG4gICBmb3VuZC5cblxuc3RyLmlzYWxudW0oKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYW51bWVyaWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNkaWdpdCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRpZ2l0cyBhbmQgdGhlcmUgaXNcbiAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc2xvd2VyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbG93ZXJjYXNlIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc3RpdGxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHRpdGxlY2FzZWQgc3RyaW5nIGFuZCB0aGVyZSBpcyBhdFxuICAgbGVhc3Qgb25lIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgbWF5IG9ubHlcbiAgIGZvbGxvdyB1bmNhc2VkIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIG9ubHkgY2FzZWQgb25lcy5cbiAgIFJldHVybiBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXN1cHBlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHVwcGVyY2FzZSBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5qb2luKGl0ZXJhYmxlKVxuXG4gICBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3MgaW4gdGhlXG4gICAqaXRlcmFibGUqICppdGVyYWJsZSouICBUaGUgc2VwYXJhdG9yIGJldHdlZW4gZWxlbWVudHMgaXMgdGhlXG4gICBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuXG4gICBgYGxlbihzKWBgLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBTdXBwb3J0IGZvciB0aGUgKmZpbGxjaGFyKiBhcmd1bWVudC5cblxuc3RyLmxvd2VyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIubHN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcubHN0cmlwKClcbiAgIFwnc3BhY2lvdXMgICBcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcubHN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGUuY29tXCdcblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMi4yOiBTdXBwb3J0IGZvciB0aGUgKmNoYXJzKiBhcmd1bWVudC5cblxuc3RyLnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYsIGZvbGxvd2VkIGJ5XG4gICB0d28gZW1wdHkgc3RyaW5ncy5cblxuICAgTmV3IGluIHZlcnNpb24gMi41LlxuXG5zdHIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqb2xkKlxuICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seVxuICAgdGhlIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLlxuXG5zdHIucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGByZmluZCgpYGAgYnV0IHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgKnN1YipcbiAgIGlzIG5vdCBmb3VuZC5cblxuc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhblxuICAgYGBsZW4ocylgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgdGhlICpmaWxsY2hhciogYXJndW1lbnQuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuc3RyLnJzcGxpdChbc2VwWywgbWF4c3BsaXRdXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCogc3BsaXRzXG4gICBhcmUgZG9uZSwgdGhlICpyaWdodG1vc3QqIG9uZXMuICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yXG4gICBgYE5vbmVgYCwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLiAgRXhjZXB0IGZvclxuICAgc3BsaXR0aW5nIGZyb20gdGhlIHJpZ2h0LCBgYHJzcGxpdCgpYGAgYmVoYXZlcyBsaWtlIGBgc3BsaXQoKWBgXG4gICB3aGljaCBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjQuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjIuMjogU3VwcG9ydCBmb3IgdGhlICpjaGFycyogYXJndW1lbnQuXG5cbnN0ci5zcGxpdChbc2VwWywgbWF4c3BsaXRdXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiAgSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqXG4gICBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0IGBgbWF4c3BsaXQrMWBgXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlcmUgaXMgbm8gbGltaXRcbiAgIG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIChhbGwgcG9zc2libGUgc3BsaXRzIGFyZSBtYWRlKS5cblxuICAgSWYgKnNlcCogaXMgZ2l2ZW4sIGNvbnNlY3V0aXZlIGRlbGltaXRlcnMgYXJlIG5vdCBncm91cGVkIHRvZ2V0aGVyXG4gICBhbmQgYXJlIGRlZW1lZCB0byBkZWxpbWl0IGVtcHR5IHN0cmluZ3MgKGZvciBleGFtcGxlLFxuICAgYGBcJzEsLDJcJy5zcGxpdChcJyxcJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJ1wnLCBcJzJcJ11gYCkuICBUaGUgKnNlcCpcbiAgIGFyZ3VtZW50IG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgYGBcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgKS4gU3BsaXR0aW5nXG4gICBhbiBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyBgYFtcJ1wnXWBgLlxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgTm9uZWBgLCBhIGRpZmZlcmVudCBzcGxpdHRpbmdcbiAgIGFsZ29yaXRobSBpcyBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkXG4gICBhcyBhIHNpbmdsZSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzXG4gICBhdCB0aGUgc3RhcnQgb3IgZW5kIGlmIHRoZSBzdHJpbmcgaGFzIGxlYWRpbmcgb3IgdHJhaWxpbmdcbiAgIHdoaXRlc3BhY2UuICBDb25zZXF1ZW50bHksIHNwbGl0dGluZyBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmdcbiAgIGNvbnNpc3Rpbmcgb2YganVzdCB3aGl0ZXNwYWNlIHdpdGggYSBgYE5vbmVgYCBzZXBhcmF0b3IgcmV0dXJuc1xuICAgYGBbXWBgLlxuXG4gICBGb3IgZXhhbXBsZSwgYGBcJyAxICAyICAgMyAgXCcuc3BsaXQoKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCxcbiAgIGFuZCBgYFwnICAxICAyICAgMyAgXCcuc3BsaXQoTm9uZSwgMSlgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzIgICAzICBcJ11gYC5cblxuc3RyLnNwbGl0bGluZXMoW2tlZXBlbmRzXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZVxuICAgYm91bmRhcmllcy4gIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuc3RyLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZVxuICAgcmV0dXJuIGBgRmFsc2VgYC4gKnByZWZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBwcmVmaXhlcyB0byBsb29rXG4gICBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNTogQWNjZXB0IHR1cGxlcyBhcyAqcHJlZml4Ki5cblxuc3RyLnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgY2hhcmFjdGVycyByZW1vdmVkLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZVxuICAgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqXG4gICBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzXG4gICB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnN0cmlwKClcbiAgIFwnc3BhY2lvdXNcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcuc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZVwnXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjIuMjogU3VwcG9ydCBmb3IgdGhlICpjaGFycyogYXJndW1lbnQuXG5cbnN0ci5zd2FwY2FzZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIGNvbnZlcnRlZCB0b1xuICAgbG93ZXJjYXNlIGFuZCB2aWNlIHZlcnNhLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLnRpdGxlKClcblxuICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhblxuICAgdXBwZXJjYXNlIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuXG5cbiAgIFRoZSBhbGdvcml0aG0gdXNlcyBhIHNpbXBsZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGFcbiAgIHdvcmQgYXMgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGxldHRlcnMuICBUaGUgZGVmaW5pdGlvbiB3b3JrcyBpblxuICAgbWFueSBjb250ZXh0cyBidXQgaXQgbWVhbnMgdGhhdCBhcG9zdHJvcGhlcyBpbiBjb250cmFjdGlvbnMgYW5kXG4gICBwb3NzZXNzaXZlcyBmb3JtIHdvcmQgYm91bmRhcmllcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgZGVzaXJlZFxuICAgcmVzdWx0OlxuXG4gICAgICA+Pj4gInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKVxuICAgICAgIlRoZXlcJ1JlIEJpbGxcJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayJcblxuICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhclxuICAgZXhwcmVzc2lvbnM6XG5cbiAgICAgID4+PiBpbXBvcnQgcmVcbiAgICAgID4+PiBkZWYgdGl0bGVjYXNlKHMpOlxuICAgICAgICAgICAgICByZXR1cm4gcmUuc3ViKHIiW0EtWmEtel0rKFwnW0EtWmEtel0rKT8iLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMF0udXBwZXIoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKVxuXG4gICAgICA+Pj4gdGl0bGVjYXNlKCJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMuIilcbiAgICAgICJUaGV5XCdyZSBCaWxsXCdzIEZyaWVuZHMuIlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLnRyYW5zbGF0ZSh0YWJsZVssIGRlbGV0ZWNoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIG9jY3VycmluZyBpbiB0aGVcbiAgIG9wdGlvbmFsIGFyZ3VtZW50ICpkZWxldGVjaGFycyogYXJlIHJlbW92ZWQsIGFuZCB0aGUgcmVtYWluaW5nXG4gICBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUsXG4gICB3aGljaCBtdXN0IGJlIGEgc3RyaW5nIG9mIGxlbmd0aCAyNTYuXG5cbiAgIFlvdSBjYW4gdXNlIHRoZSBgYG1ha2V0cmFucygpYGAgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBgYHN0cmluZ2BgXG4gICBtb2R1bGUgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gdGFibGUuIEZvciBzdHJpbmcgb2JqZWN0cywgc2V0IHRoZVxuICAgKnRhYmxlKiBhcmd1bWVudCB0byBgYE5vbmVgYCBmb3IgdHJhbnNsYXRpb25zIHRoYXQgb25seSBkZWxldGVcbiAgIGNoYXJhY3RlcnM6XG5cbiAgID4+PiBcJ3JlYWQgdGhpcyBzaG9ydCB0ZXh0XCcudHJhbnNsYXRlKE5vbmUsIFwnYWVpb3VcJylcbiAgIFwncmQgdGhzIHNocnQgdHh0XCdcblxuICAgTmV3IGluIHZlcnNpb24gMi42OiBTdXBwb3J0IGZvciBhIGBgTm9uZWBgICp0YWJsZSogYXJndW1lbnQuXG5cbiAgIEZvciBVbmljb2RlIG9iamVjdHMsIHRoZSBgYHRyYW5zbGF0ZSgpYGAgbWV0aG9kIGRvZXMgbm90IGFjY2VwdCB0aGVcbiAgIG9wdGlvbmFsICpkZWxldGVjaGFycyogYXJndW1lbnQuICBJbnN0ZWFkLCBpdCByZXR1cm5zIGEgY29weSBvZiB0aGVcbiAgICpzKiB3aGVyZSBhbGwgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuXG4gICB0cmFuc2xhdGlvbiB0YWJsZSB3aGljaCBtdXN0IGJlIGEgbWFwcGluZyBvZiBVbmljb2RlIG9yZGluYWxzIHRvXG4gICBVbmljb2RlIG9yZGluYWxzLCBVbmljb2RlIHN0cmluZ3Mgb3IgYGBOb25lYGAuIFVubWFwcGVkIGNoYXJhY3RlcnNcbiAgIGFyZSBsZWZ0IHVudG91Y2hlZC4gQ2hhcmFjdGVycyBtYXBwZWQgdG8gYGBOb25lYGAgYXJlIGRlbGV0ZWQuXG4gICBOb3RlLCBhIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgY3VzdG9tIGNoYXJhY3RlclxuICAgbWFwcGluZyBjb2RlYyB1c2luZyB0aGUgYGBjb2RlY3NgYCBtb2R1bGUgKHNlZSBgYGVuY29kaW5ncy5jcDEyNTFgYFxuICAgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgY29udmVydGVkIHRvIHVwcGVyY2FzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mXG4gICBsZW5ndGggKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWxcbiAgIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBgYGxlbihzKWBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuMi5cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSBwcmVzZW50IG9ubHkgb24gdW5pY29kZSBvYmplY3RzOlxuXG51bmljb2RlLmlzbnVtZXJpYygpXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGVyZSBhcmUgb25seSBudW1lcmljIGNoYXJhY3RlcnMgaW4gUyxcbiAgIGBgRmFsc2VgYCBvdGhlcndpc2UuIE51bWVyaWMgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsXG4gICBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksXG4gICBlLmcuIFUrMjE1NSwgVlVMR0FSIEZSQUNUSU9OIE9ORSBGSUZUSC5cblxudW5pY29kZS5pc2RlY2ltYWwoKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlcmUgYXJlIG9ubHkgZGVjaW1hbCBjaGFyYWN0ZXJzIGluIFMsXG4gICBgYEZhbHNlYGAgb3RoZXJ3aXNlLiBEZWNpbWFsIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLFxuICAgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgdGhhdCBjYW4gYmUgdXNlZCB0byBmb3JtIGRlY2ltYWwtcmFkaXhcbiAgIG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTy5cblxuXG5TdHJpbmcgRm9ybWF0dGluZyBPcGVyYXRpb25zXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblN0cmluZyBhbmQgVW5pY29kZSBvYmplY3RzIGhhdmUgb25lIHVuaXF1ZSBidWlsdC1pbiBvcGVyYXRpb246IHRoZVxuYGAlYGAgb3BlcmF0b3IgKG1vZHVsbykuICBUaGlzIGlzIGFsc28ga25vd24gYXMgdGhlIHN0cmluZ1xuKmZvcm1hdHRpbmcqIG9yICppbnRlcnBvbGF0aW9uKiBvcGVyYXRvci4gIEdpdmVuIGBgZm9ybWF0ICUgdmFsdWVzYGBcbih3aGVyZSAqZm9ybWF0KiBpcyBhIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCksIGBgJWBgIGNvbnZlcnNpb25cbnNwZWNpZmljYXRpb25zIGluICpmb3JtYXQqIGFyZSByZXBsYWNlZCB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cyBvZlxuKnZhbHVlcyouICBUaGUgZWZmZWN0IGlzIHNpbWlsYXIgdG8gdGhlIHVzaW5nIGBgc3ByaW50ZigpYGAgaW4gdGhlIENcbmxhbmd1YWdlLiAgSWYgKmZvcm1hdCogaXMgYSBVbmljb2RlIG9iamVjdCwgb3IgaWYgYW55IG9mIHRoZSBvYmplY3RzXG5iZWluZyBjb252ZXJ0ZWQgdXNpbmcgdGhlIGBgJXNgYCBjb252ZXJzaW9uIGFyZSBVbmljb2RlIG9iamVjdHMsIHRoZVxucmVzdWx0IHdpbGwgYWxzbyBiZSBhIFVuaWNvZGUgb2JqZWN0LlxuXG5JZiAqZm9ybWF0KiByZXF1aXJlcyBhIHNpbmdsZSBhcmd1bWVudCwgKnZhbHVlcyogbWF5IGJlIGEgc2luZ2xlIG5vbi1cbnR1cGxlIG9iamVjdC4gWzRdICBPdGhlcndpc2UsICp2YWx1ZXMqIG11c3QgYmUgYSB0dXBsZSB3aXRoIGV4YWN0bHlcbnRoZSBudW1iZXIgb2YgaXRlbXMgc3BlY2lmaWVkIGJ5IHRoZSBmb3JtYXQgc3RyaW5nLCBvciBhIHNpbmdsZVxubWFwcGluZyBvYmplY3QgKGZvciBleGFtcGxlLCBhIGRpY3Rpb25hcnkpLlxuXG5BIGNvbnZlcnNpb24gc3BlY2lmaWVyIGNvbnRhaW5zIHR3byBvciBtb3JlIGNoYXJhY3RlcnMgYW5kIGhhcyB0aGVcbmZvbGxvd2luZyBjb21wb25lbnRzLCB3aGljaCBtdXN0IG9jY3VyIGluIHRoaXMgb3JkZXI6XG5cbjEuIFRoZSBgYFwnJVwnYGAgY2hhcmFjdGVyLCB3aGljaCBtYXJrcyB0aGUgc3RhcnQgb2YgdGhlIHNwZWNpZmllci5cblxuMi4gTWFwcGluZyBrZXkgKG9wdGlvbmFsKSwgY29uc2lzdGluZyBvZiBhIHBhcmVudGhlc2lzZWQgc2VxdWVuY2Ugb2ZcbiAgIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLCBgYChzb21lbmFtZSlgYCkuXG5cbjMuIENvbnZlcnNpb24gZmxhZ3MgKG9wdGlvbmFsKSwgd2hpY2ggYWZmZWN0IHRoZSByZXN1bHQgb2Ygc29tZVxuICAgY29udmVyc2lvbiB0eXBlcy5cblxuNC4gTWluaW11bSBmaWVsZCB3aWR0aCAob3B0aW9uYWwpLiAgSWYgc3BlY2lmaWVkIGFzIGFuIGBgXCcqXCdgYFxuICAgKGFzdGVyaXNrKSwgdGhlIGFjdHVhbCB3aWR0aCBpcyByZWFkIGZyb20gdGhlIG5leHQgZWxlbWVudCBvZiB0aGVcbiAgIHR1cGxlIGluICp2YWx1ZXMqLCBhbmQgdGhlIG9iamVjdCB0byBjb252ZXJ0IGNvbWVzIGFmdGVyIHRoZVxuICAgbWluaW11bSBmaWVsZCB3aWR0aCBhbmQgb3B0aW9uYWwgcHJlY2lzaW9uLlxuXG41LiBQcmVjaXNpb24gKG9wdGlvbmFsKSwgZ2l2ZW4gYXMgYSBgYFwnLlwnYGAgKGRvdCkgZm9sbG93ZWQgYnkgdGhlXG4gICBwcmVjaXNpb24uICBJZiBzcGVjaWZpZWQgYXMgYGBcJypcJ2BgIChhbiBhc3RlcmlzayksIHRoZSBhY3R1YWwgd2lkdGhcbiAgIGlzIHJlYWQgZnJvbSB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSB0dXBsZSBpbiAqdmFsdWVzKiwgYW5kIHRoZVxuICAgdmFsdWUgdG8gY29udmVydCBjb21lcyBhZnRlciB0aGUgcHJlY2lzaW9uLlxuXG42LiBMZW5ndGggbW9kaWZpZXIgKG9wdGlvbmFsKS5cblxuNy4gQ29udmVyc2lvbiB0eXBlLlxuXG5XaGVuIHRoZSByaWdodCBhcmd1bWVudCBpcyBhIGRpY3Rpb25hcnkgKG9yIG90aGVyIG1hcHBpbmcgdHlwZSksIHRoZW5cbnRoZSBmb3JtYXRzIGluIHRoZSBzdHJpbmcgKm11c3QqIGluY2x1ZGUgYSBwYXJlbnRoZXNpc2VkIG1hcHBpbmcga2V5XG5pbnRvIHRoYXQgZGljdGlvbmFyeSBpbnNlcnRlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgYGBcJyVcJ2BgIGNoYXJhY3Rlci5cblRoZSBtYXBwaW5nIGtleSBzZWxlY3RzIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWQgZnJvbSB0aGUgbWFwcGluZy5cbkZvciBleGFtcGxlOlxuXG4+Pj4gcHJpbnQgXCclKGxhbmd1YWdlKXMgaGFzICUoIykwM2QgcXVvdGUgdHlwZXMuXCcgJSBcXFxuLi4uICAgICAgIHtcJ2xhbmd1YWdlXCc6ICJQeXRob24iLCAiIyI6IDJ9XG5QeXRob24gaGFzIDAwMiBxdW90ZSB0eXBlcy5cblxuSW4gdGhpcyBjYXNlIG5vIGBgKmBgIHNwZWNpZmllcnMgbWF5IG9jY3VyIGluIGEgZm9ybWF0IChzaW5jZSB0aGV5XG5yZXF1aXJlIGEgc2VxdWVudGlhbCBwYXJhbWV0ZXIgbGlzdCkuXG5cblRoZSBjb252ZXJzaW9uIGZsYWcgY2hhcmFjdGVycyBhcmU6XG5cbistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgRmxhZyAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBcJyNcJ2BgICAgfCBUaGUgdmFsdWUgY29udmVyc2lvbiB3aWxsIHVzZSB0aGUgImFsdGVybmF0ZSBmb3JtIiAod2hlcmUgZGVmaW5lZCAgICAgfFxufCAgICAgICAgICAgfCBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnMFwnYGAgICB8IFRoZSBjb252ZXJzaW9uIHdpbGwgYmUgemVybyBwYWRkZWQgZm9yIG51bWVyaWMgdmFsdWVzLiAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgXCctXCdgYCAgIHwgVGhlIGNvbnZlcnRlZCB2YWx1ZSBpcyBsZWZ0IGFkanVzdGVkIChvdmVycmlkZXMgdGhlIGBgXCcwXCdgYCAgICAgICAgICAgfFxufCAgICAgICAgICAgfCBjb252ZXJzaW9uIGlmIGJvdGggYXJlIGdpdmVuKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnIFwnYGAgICB8IChhIHNwYWNlKSBBIGJsYW5rIHNob3VsZCBiZSBsZWZ0IGJlZm9yZSBhIHBvc2l0aXZlIG51bWJlciAob3IgZW1wdHkgICB8XG58ICAgICAgICAgICB8IHN0cmluZykgcHJvZHVjZWQgYnkgYSBzaWduZWQgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgXCcrXCdgYCAgIHwgQSBzaWduIGNoYXJhY3RlciAoYGBcJytcJ2BgIG9yIGBgXCctXCdgYCkgd2lsbCBwcmVjZWRlIHRoZSBjb252ZXJzaW9uICAgICB8XG58ICAgICAgICAgICB8IChvdmVycmlkZXMgYSAic3BhY2UiIGZsYWcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkEgbGVuZ3RoIG1vZGlmaWVyIChgYGhgYCwgYGBsYGAsIG9yIGBgTGBgKSBtYXkgYmUgcHJlc2VudCwgYnV0IGlzXG5pZ25vcmVkIGFzIGl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIFB5dGhvbiAtLSBzbyBlLmcuIGBgJWxkYGAgaXNcbmlkZW50aWNhbCB0byBgYCVkYGAuXG5cblRoZSBjb252ZXJzaW9uIHR5cGVzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBDb252ZXJzaW9uICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCBgYFwnZFwnYGAgICAgICB8IFNpZ25lZCBpbnRlZ2VyIGRlY2ltYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdpXCdgYCAgICAgIHwgU2lnbmVkIGludGVnZXIgZGVjaW1hbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ29cJ2BgICAgICAgfCBTaWduZWQgb2N0YWwgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgxKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwndVwnYGAgICAgICB8IE9ic29sZXRlIHR5cGUgLS0gaXQgaXMgaWRlbnRpY2FsIHRvIGBgXCdkXCdgYC4gICAgICAgICAgfCAoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3hcJ2BgICAgICAgfCBTaWduZWQgaGV4YWRlY2ltYWwgKGxvd2VyY2FzZSkuICAgICAgICAgICAgICAgICAgICAgICB8ICgyKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnWFwnYGAgICAgICB8IFNpZ25lZCBoZXhhZGVjaW1hbCAodXBwZXJjYXNlKS4gICAgICAgICAgICAgICAgICAgICAgIHwgKDIpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdlXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZXhwb25lbnRpYWwgZm9ybWF0IChsb3dlcmNhc2UpLiAgICAgICAgfCAoMykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ0VcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBleHBvbmVudGlhbCBmb3JtYXQgKHVwcGVyY2FzZSkuICAgICAgICB8ICgzKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnZlwnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGRlY2ltYWwgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgIHwgKDMpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdGXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZGVjaW1hbCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgfCAoMykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ2dcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBmb3JtYXQuIFVzZXMgbG93ZXJjYXNlIGV4cG9uZW50aWFsICAgICB8ICg0KSAgICAgfFxufCAgICAgICAgICAgICAgfCBmb3JtYXQgaWYgZXhwb25lbnQgaXMgbGVzcyB0aGFuIC00IG9yIG5vdCBsZXNzIHRoYW4gICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgfCBwcmVjaXNpb24sIGRlY2ltYWwgZm9ybWF0IG90aGVyd2lzZS4gICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnR1wnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGZvcm1hdC4gVXNlcyB1cHBlcmNhc2UgZXhwb25lbnRpYWwgICAgIHwgKDQpICAgICB8XG58ICAgICAgICAgICAgICB8IGZvcm1hdCBpZiBleHBvbmVudCBpcyBsZXNzIHRoYW4gLTQgb3Igbm90IGxlc3MgdGhhbiAgIHwgICAgICAgICB8XG58ICAgICAgICAgICAgICB8IHByZWNpc2lvbiwgZGVjaW1hbCBmb3JtYXQgb3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdjXCdgYCAgICAgIHwgU2luZ2xlIGNoYXJhY3RlciAoYWNjZXB0cyBpbnRlZ2VyIG9yIHNpbmdsZSBjaGFyYWN0ZXIgfCAgICAgICAgIHxcbnwgICAgICAgICAgICAgIHwgc3RyaW5nKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3JcJ2BgICAgICAgfCBTdHJpbmcgKGNvbnZlcnRzIGFueSBQeXRob24gb2JqZWN0IHVzaW5nIGBgcmVwcigpYGApLiB8ICg1KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnc1wnYGAgICAgICB8IFN0cmluZyAoY29udmVydHMgYW55IFB5dGhvbiBvYmplY3QgdXNpbmcgYGBzdHIoKWBgKS4gIHwgKDYpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCclXCdgYCAgICAgIHwgTm8gYXJndW1lbnQgaXMgY29udmVydGVkLCByZXN1bHRzIGluIGEgYGBcJyVcJ2BgICAgICAgICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgfCBjaGFyYWN0ZXIgaW4gdGhlIHJlc3VsdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gVGhlIGFsdGVybmF0ZSBmb3JtIGNhdXNlcyBhIGxlYWRpbmcgemVybyAoYGBcJzBcJ2BgKSB0byBiZSBpbnNlcnRlZFxuICAgYmV0d2VlbiBsZWZ0LWhhbmQgcGFkZGluZyBhbmQgdGhlIGZvcm1hdHRpbmcgb2YgdGhlIG51bWJlciBpZiB0aGVcbiAgIGxlYWRpbmcgY2hhcmFjdGVyIG9mIHRoZSByZXN1bHQgaXMgbm90IGFscmVhZHkgYSB6ZXJvLlxuXG4yLiBUaGUgYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIGEgbGVhZGluZyBgYFwnMHhcJ2BgIG9yIGBgXCcwWFwnYGAgKGRlcGVuZGluZ1xuICAgb24gd2hldGhlciB0aGUgYGBcJ3hcJ2BgIG9yIGBgXCdYXCdgYCBmb3JtYXQgd2FzIHVzZWQpIHRvIGJlIGluc2VydGVkXG4gICBiZXR3ZWVuIGxlZnQtaGFuZCBwYWRkaW5nIGFuZCB0aGUgZm9ybWF0dGluZyBvZiB0aGUgbnVtYmVyIGlmIHRoZVxuICAgbGVhZGluZyBjaGFyYWN0ZXIgb2YgdGhlIHJlc3VsdCBpcyBub3QgYWxyZWFkeSBhIHplcm8uXG5cbjMuIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCB0byBhbHdheXMgY29udGFpbiBhIGRlY2ltYWxcbiAgIHBvaW50LCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuXG5cbiAgIFRoZSBwcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICAgcG9pbnQgYW5kIGRlZmF1bHRzIHRvIDYuXG5cbjQuIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCB0byBhbHdheXMgY29udGFpbiBhIGRlY2ltYWxcbiAgIHBvaW50LCBhbmQgdHJhaWxpbmcgemVyb2VzIGFyZSBub3QgcmVtb3ZlZCBhcyB0aGV5IHdvdWxkIG90aGVyd2lzZVxuICAgYmUuXG5cbiAgIFRoZSBwcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBiZWZvcmVcbiAgIGFuZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBhbmQgZGVmYXVsdHMgdG8gNi5cblxuNS4gVGhlIGBgJXJgYCBjb252ZXJzaW9uIHdhcyBhZGRlZCBpbiBQeXRob24gMi4wLlxuXG4gICBUaGUgcHJlY2lzaW9uIGRldGVybWluZXMgdGhlIG1heGltYWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdXNlZC5cblxuNi4gSWYgdGhlIG9iamVjdCBvciBmb3JtYXQgcHJvdmlkZWQgaXMgYSBgYHVuaWNvZGVgYCBzdHJpbmcsIHRoZVxuICAgcmVzdWx0aW5nIHN0cmluZyB3aWxsIGFsc28gYmUgYGB1bmljb2RlYGAuXG5cbiAgIFRoZSBwcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbWF4aW1hbCBudW1iZXIgb2YgY2hhcmFjdGVycyB1c2VkLlxuXG43LiBTZWUgKipQRVAgMjM3KiouXG5cblNpbmNlIFB5dGhvbiBzdHJpbmdzIGhhdmUgYW4gZXhwbGljaXQgbGVuZ3RoLCBgYCVzYGAgY29udmVyc2lvbnMgZG9cbm5vdCBhc3N1bWUgdGhhdCBgYFwnXFwwXCdgYCBpcyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG5cbkZvciBzYWZldHkgcmVhc29ucywgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9ucyBhcmUgY2xpcHBlZCB0byA1MDtcbmBgJWZgYCBjb252ZXJzaW9ucyBmb3IgbnVtYmVycyB3aG9zZSBhYnNvbHV0ZSB2YWx1ZSBpcyBvdmVyIDFlNTAgYXJlXG5yZXBsYWNlZCBieSBgYCVnYGAgY29udmVyc2lvbnMuIFs1XSAgQWxsIG90aGVyIGVycm9ycyByYWlzZVxuZXhjZXB0aW9ucy5cblxuQWRkaXRpb25hbCBzdHJpbmcgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBpbiBzdGFuZGFyZCBtb2R1bGVzXG5gYHN0cmluZ2BgIGFuZCBgYHJlYGAuXG5cblxuWFJhbmdlIFR5cGVcbj09PT09PT09PT09XG5cblRoZSBgYHhyYW5nZWBgIHR5cGUgaXMgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHdoaWNoIGlzIGNvbW1vbmx5IHVzZWRcbmZvciBsb29waW5nLiAgVGhlIGFkdmFudGFnZSBvZiB0aGUgYGB4cmFuZ2VgYCB0eXBlIGlzIHRoYXQgYW5cbmBgeHJhbmdlYGAgb2JqZWN0IHdpbGwgYWx3YXlzIHRha2UgdGhlIHNhbWUgYW1vdW50IG9mIG1lbW9yeSwgbm9cbm1hdHRlciB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgaXQgcmVwcmVzZW50cy4gIFRoZXJlIGFyZSBubyBjb25zaXN0ZW50XG5wZXJmb3JtYW5jZSBhZHZhbnRhZ2VzLlxuXG5YUmFuZ2Ugb2JqZWN0cyBoYXZlIHZlcnkgbGl0dGxlIGJlaGF2aW9yOiB0aGV5IG9ubHkgc3VwcG9ydCBpbmRleGluZyxcbml0ZXJhdGlvbiwgYW5kIHRoZSBgYGxlbigpYGAgZnVuY3Rpb24uXG5cblxuTXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuPT09PT09PT09PT09PT09PT09PT09PVxuXG5MaXN0IG9iamVjdHMgc3VwcG9ydCBhZGRpdGlvbmFsIG9wZXJhdGlvbnMgdGhhdCBhbGxvdyBpbi1wbGFjZVxubW9kaWZpY2F0aW9uIG9mIHRoZSBvYmplY3QuIE90aGVyIG11dGFibGUgc2VxdWVuY2UgdHlwZXMgKHdoZW4gYWRkZWRcbnRvIHRoZSBsYW5ndWFnZSkgc2hvdWxkIGFsc28gc3VwcG9ydCB0aGVzZSBvcGVyYXRpb25zLiBTdHJpbmdzIGFuZFxudHVwbGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2UgdHlwZXM6IHN1Y2ggb2JqZWN0cyBjYW5ub3QgYmUgbW9kaWZpZWRcbm9uY2UgY3JlYXRlZC4gVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIG9uIG11dGFibGUgc2VxdWVuY2VcbnR5cGVzICh3aGVyZSAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCk6XG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBzW2ldID0geGBgICAgICAgICAgICAgICAgICAgIHwgaXRlbSAqaSogb2YgKnMqIGlzIHJlcGxhY2VkIGJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al0gPSB0YGAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0ZXJhYmxlICp0KiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmpdID0gW11gYCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXSA9IHRgYCAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mIGBgc1tpOmo6a11gYCBhcmUgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aG9zZSBvZiAqdCogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgcmVtb3ZlcyB0aGUgZWxlbWVudHMgb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTpqOmtdYGAgZnJvbSB0aGUgbGlzdCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmFwcGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gPSAgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbeF1gYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmV4dGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gPSB4YGAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5jb3VudCh4KWBgICAgICAgICAgICAgICAgICB8IHJldHVybiBudW1iZXIgb2YgKmkqXCdzIGZvciB3aGljaCB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpXSA9PSB4YGAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5kZXgoeFssIGlbLCBqXV0pYGAgICAgICAgfCByZXR1cm4gc21hbGxlc3QgKmsqIHN1Y2ggdGhhdCAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1trXSA9PSB4YGAgYW5kIGBgaSA8PSBrIDwgamBgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5zZXJ0KGksIHgpYGAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmldID0gW3hdYGAgICAgICAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHggPSBzW2ldOyBkZWwgc1tpXTsgICAgfCAoNikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXR1cm4geGBgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYGRlbCBzW3MuaW5kZXgoeCldYGAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5yZXZlcnNlKClgYCAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDcpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5zb3J0KFtjbXBbLCBrZXlbLCAgICAgICAgICB8IHNvcnQgdGhlIGl0ZW1zIG9mICpzKiBpbiBwbGFjZSAgIHwgKDcpKDgpKDkpKDEwKSAgICAgICAgIHxcbnwgcmV2ZXJzZV1dXSlgYCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgIHJlcGxhY2luZy5cblxuMi4gVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIGhhcyBoaXN0b3JpY2FsbHkgYWNjZXB0ZWQgbXVsdGlwbGVcbiAgIHBhcmFtZXRlcnMgYW5kIGltcGxpY2l0bHkgam9pbmVkIHRoZW0gaW50byBhIHR1cGxlOyB0aGlzIG5vIGxvbmdlclxuICAgd29ya3MgaW4gUHl0aG9uIDIuMC4gIFVzZSBvZiB0aGlzIG1pc2ZlYXR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZFxuICAgc2luY2UgUHl0aG9uIDEuNC5cblxuMy4gKngqIGNhbiBiZSBhbnkgaXRlcmFibGUgb2JqZWN0LlxuXG40LiBSYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi4gV2hlbiBhIG5lZ2F0aXZlXG4gICBpbmRleCBpcyBwYXNzZWQgYXMgdGhlIHNlY29uZCBvciB0aGlyZCBwYXJhbWV0ZXIgdG8gdGhlIGBgaW5kZXgoKWBgXG4gICBtZXRob2QsIHRoZSBsaXN0IGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlIGluZGljZXMuICBJZiBpdCBpc1xuICAgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3Igc2xpY2UgaW5kaWNlcy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogUHJldmlvdXNseSwgYGBpbmRleCgpYGAgZGlkblwndCBoYXZlXG4gICBhcmd1bWVudHMgZm9yIHNwZWNpZnlpbmcgc3RhcnQgYW5kIHN0b3AgcG9zaXRpb25zLlxuXG41LiBXaGVuIGEgbmVnYXRpdmUgaW5kZXggaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlXG4gICBgYGluc2VydCgpYGAgbWV0aG9kLCB0aGUgbGlzdCBsZW5ndGggaXMgYWRkZWQsIGFzIGZvciBzbGljZVxuICAgaW5kaWNlcy4gIElmIGl0IGlzIHN0aWxsIG5lZ2F0aXZlLCBpdCBpcyB0cnVuY2F0ZWQgdG8gemVybywgYXMgZm9yXG4gICBzbGljZSBpbmRpY2VzLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBQcmV2aW91c2x5LCBhbGwgbmVnYXRpdmUgaW5kaWNlcyB3ZXJlXG4gICB0cnVuY2F0ZWQgdG8gemVyby5cblxuNi4gVGhlIGBgcG9wKClgYCBtZXRob2QgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIGxpc3QgYW5kIGFycmF5IHR5cGVzLlxuICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byBgYC0xYGAsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuNy4gVGhlIGBgc29ydCgpYGAgYW5kIGBgcmV2ZXJzZSgpYGAgbWV0aG9kcyBtb2RpZnkgdGhlIGxpc3QgaW4gcGxhY2VcbiAgIGZvciBlY29ub215IG9mIHNwYWNlIHdoZW4gc29ydGluZyBvciByZXZlcnNpbmcgYSBsYXJnZSBsaXN0LiAgVG9cbiAgIHJlbWluZCB5b3UgdGhhdCB0aGV5IG9wZXJhdGUgYnkgc2lkZSBlZmZlY3QsIHRoZXkgZG9uXCd0IHJldHVybiB0aGVcbiAgIHNvcnRlZCBvciByZXZlcnNlZCBsaXN0LlxuXG44LiBUaGUgYGBzb3J0KClgYCBtZXRob2QgdGFrZXMgb3B0aW9uYWwgYXJndW1lbnRzIGZvciBjb250cm9sbGluZyB0aGVcbiAgIGNvbXBhcmlzb25zLlxuXG4gICAqY21wKiBzcGVjaWZpZXMgYSBjdXN0b20gY29tcGFyaXNvbiBmdW5jdGlvbiBvZiB0d28gYXJndW1lbnRzIChsaXN0XG4gICBpdGVtcykgd2hpY2ggc2hvdWxkIHJldHVybiBhIG5lZ2F0aXZlLCB6ZXJvIG9yIHBvc2l0aXZlIG51bWJlclxuICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGNvbnNpZGVyZWQgc21hbGxlciB0aGFuLFxuICAgZXF1YWwgdG8sIG9yIGxhcmdlciB0aGFuIHRoZSBzZWNvbmQgYXJndW1lbnQ6IGBgY21wPWxhbWJkYSB4LHk6XG4gICBjbXAoeC5sb3dlcigpLCB5Lmxvd2VyKCkpYGAuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYE5vbmVgYC5cblxuICAgKmtleSogc3BlY2lmaWVzIGEgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50IHRoYXQgaXMgdXNlZCB0byBleHRyYWN0XG4gICBhIGNvbXBhcmlzb24ga2V5IGZyb20gZWFjaCBsaXN0IGVsZW1lbnQ6IGBga2V5PXN0ci5sb3dlcmBgLiAgVGhlXG4gICBkZWZhdWx0IHZhbHVlIGlzIGBgTm9uZWBgLlxuXG4gICAqcmV2ZXJzZSogaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvIGBgVHJ1ZWBgLCB0aGVuIHRoZSBsaXN0XG4gICBlbGVtZW50cyBhcmUgc29ydGVkIGFzIGlmIGVhY2ggY29tcGFyaXNvbiB3ZXJlIHJldmVyc2VkLlxuXG4gICBJbiBnZW5lcmFsLCB0aGUgKmtleSogYW5kICpyZXZlcnNlKiBjb252ZXJzaW9uIHByb2Nlc3NlcyBhcmUgbXVjaFxuICAgZmFzdGVyIHRoYW4gc3BlY2lmeWluZyBhbiBlcXVpdmFsZW50ICpjbXAqIGZ1bmN0aW9uLiAgVGhpcyBpc1xuICAgYmVjYXVzZSAqY21wKiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGVhY2ggbGlzdCBlbGVtZW50IHdoaWxlXG4gICAqa2V5KiBhbmQgKnJldmVyc2UqIHRvdWNoIGVhY2ggZWxlbWVudCBvbmx5IG9uY2UuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIGBgTm9uZWBgIGFzIGFuIGVxdWl2YWxlbnQgdG9cbiAgIG9taXR0aW5nICpjbXAqIHdhcyBhZGRlZC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgKmtleSogYW5kICpyZXZlcnNlKiB3YXMgYWRkZWQuXG5cbjkuIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMywgdGhlIGBgc29ydCgpYGAgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmVcbiAgIHN0YWJsZS4gIEEgc29ydCBpcyBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZVxuICAgcmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWxcbiAgIGZvciBzb3J0aW5nIGluIG11bHRpcGxlIHBhc3NlcyAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCxcbiAgIHRoZW4gYnkgc2FsYXJ5IGdyYWRlKS5cblxuMTAuICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogV2hpbGUgYSBsaXN0IGlzIGJlaW5nIHNvcnRlZCxcbiAgICB0aGUgZWZmZWN0IG9mIGF0dGVtcHRpbmcgdG8gbXV0YXRlLCBvciBldmVuIGluc3BlY3QsIHRoZSBsaXN0IGlzXG4gICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIDIuMyBhbmQgbmV3ZXIgbWFrZXMgdGhlXG4gICAgbGlzdCBhcHBlYXIgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCBpZlxuICAgIGl0IGNhbiBkZXRlY3QgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbiBtdXRhdGVkIGR1cmluZyBhIHNvcnQuXG4nLAotICd0eXBlc3NlcS1tdXRhYmxlJzogdSJcbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbioqKioqKioqKioqKioqKioqKioqKipcblxuTGlzdCBvYmplY3RzIHN1cHBvcnQgYWRkaXRpb25hbCBvcGVyYXRpb25zIHRoYXQgYWxsb3cgaW4tcGxhY2Vcbm1vZGlmaWNhdGlvbiBvZiB0aGUgb2JqZWN0LiBPdGhlciBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzICh3aGVuIGFkZGVkXG50byB0aGUgbGFuZ3VhZ2UpIHNob3VsZCBhbHNvIHN1cHBvcnQgdGhlc2Ugb3BlcmF0aW9ucy4gU3RyaW5ncyBhbmRcbnR1cGxlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGVzOiBzdWNoIG9iamVjdHMgY2Fubm90IGJlIG1vZGlmaWVkXG5vbmNlIGNyZWF0ZWQuIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcyAod2hlcmUgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QpOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rXG58IGBgc1tpXSA9IHhgYCAgICAgICAgICAgICAgICAgICB8IGl0ZW0gKmkqIG9mICpzKiBpcyByZXBsYWNlZCBieSAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgc1tpOmpdID0gdGBgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhlIGNvbnRlbnRzIG9mIHRoZSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpdGVyYWJsZSAqdCogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmpdYGAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbaTpqXSA9IFtdYGAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgc1tpOmo6a10gPSB0YGAgICAgICAgICAgICAgICB8IHRoZSBlbGVtZW50cyBvZiBgYHNbaTpqOmtdYGAgYXJlIHwgKDEpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhvc2Ugb2YgKnQqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqOmtdYGAgICAgICAgICAgICAgICB8IHJlbW92ZXMgdGhlIGVsZW1lbnRzIG9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2k6ajprXWBgIGZyb20gdGhlIGxpc3QgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5hcHBlbmQoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2xlbihzKTpsZW4ocyldID0gICAgIHwgKDIpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5leHRlbmQoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2xlbihzKTpsZW4ocyldID0geGBgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY291bnQoeClgYCAgICAgICAgICAgICAgICAgfCByZXR1cm4gbnVtYmVyIG9mICppKidzIGZvciB3aGljaCB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpXSA9PSB4YGAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5kZXgoeFssIGlbLCBqXV0pYGAgICAgICAgfCByZXR1cm4gc21hbGxlc3QgKmsqIHN1Y2ggdGhhdCAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1trXSA9PSB4YGAgYW5kIGBgaSA8PSBrIDwgamBgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5zZXJ0KGksIHgpYGAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmldID0gW3hdYGAgICAgICAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHggPSBzW2ldOyBkZWwgc1tpXTsgICAgfCAoNikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXR1cm4geGBgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYGRlbCBzW3MuaW5kZXgoeCldYGAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5yZXZlcnNlKClgYCAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDcpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5zb3J0KFtjbXBbLCBrZXlbLCAgICAgICAgICB8IHNvcnQgdGhlIGl0ZW1zIG9mICpzKiBpbiBwbGFjZSAgIHwgKDcpKDgpKDkpKDEwKSAgICAgICAgIHxcbnwgcmV2ZXJzZV1dXSlgYCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgIHJlcGxhY2luZy5cblxuMi4gVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIGhhcyBoaXN0b3JpY2FsbHkgYWNjZXB0ZWQgbXVsdGlwbGVcbiAgIHBhcmFtZXRlcnMgYW5kIGltcGxpY2l0bHkgam9pbmVkIHRoZW0gaW50byBhIHR1cGxlOyB0aGlzIG5vIGxvbmdlclxuICAgd29ya3MgaW4gUHl0aG9uIDIuMC4gIFVzZSBvZiB0aGlzIG1pc2ZlYXR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZFxuICAgc2luY2UgUHl0aG9uIDEuNC5cblxuMy4gKngqIGNhbiBiZSBhbnkgaXRlcmFibGUgb2JqZWN0LlxuXG40LiBSYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi4gV2hlbiBhIG5lZ2F0aXZlXG4gICBpbmRleCBpcyBwYXNzZWQgYXMgdGhlIHNlY29uZCBvciB0aGlyZCBwYXJhbWV0ZXIgdG8gdGhlIGBgaW5kZXgoKWBgXG4gICBtZXRob2QsIHRoZSBsaXN0IGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlIGluZGljZXMuICBJZiBpdCBpc1xuICAgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3Igc2xpY2UgaW5kaWNlcy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogUHJldmlvdXNseSwgYGBpbmRleCgpYGAgZGlkbid0IGhhdmVcbiAgIGFyZ3VtZW50cyBmb3Igc3BlY2lmeWluZyBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbnMuXG5cbjUuIFdoZW4gYSBuZWdhdGl2ZSBpbmRleCBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciB0byB0aGVcbiAgIGBgaW5zZXJ0KClgYCBtZXRob2QsIHRoZSBsaXN0IGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlXG4gICBpbmRpY2VzLiAgSWYgaXQgaXMgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3JcbiAgIHNsaWNlIGluZGljZXMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksIGFsbCBuZWdhdGl2ZSBpbmRpY2VzIHdlcmVcbiAgIHRydW5jYXRlZCB0byB6ZXJvLlxuXG42LiBUaGUgYGBwb3AoKWBgIG1ldGhvZCBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgbGlzdCBhbmQgYXJyYXkgdHlwZXMuXG4gICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmkqIGRlZmF1bHRzIHRvIGBgLTFgYCwgc28gdGhhdCBieSBkZWZhdWx0XG4gICB0aGUgbGFzdCBpdGVtIGlzIHJlbW92ZWQgYW5kIHJldHVybmVkLlxuXG43LiBUaGUgYGBzb3J0KClgYCBhbmQgYGByZXZlcnNlKClgYCBtZXRob2RzIG1vZGlmeSB0aGUgbGlzdCBpbiBwbGFjZVxuICAgZm9yIGVjb25vbXkgb2Ygc3BhY2Ugd2hlbiBzb3J0aW5nIG9yIHJldmVyc2luZyBhIGxhcmdlIGxpc3QuICBUb1xuICAgcmVtaW5kIHlvdSB0aGF0IHRoZXkgb3BlcmF0ZSBieSBzaWRlIGVmZmVjdCwgdGhleSBkb24ndCByZXR1cm4gdGhlXG4gICBzb3J0ZWQgb3IgcmV2ZXJzZWQgbGlzdC5cblxuOC4gVGhlIGBgc29ydCgpYGAgbWV0aG9kIHRha2VzIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgY29udHJvbGxpbmcgdGhlXG4gICBjb21wYXJpc29ucy5cblxuICAgKmNtcCogc3BlY2lmaWVzIGEgY3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gb2YgdHdvIGFyZ3VtZW50cyAobGlzdFxuICAgaXRlbXMpIHdoaWNoIHNob3VsZCByZXR1cm4gYSBuZWdhdGl2ZSwgemVybyBvciBwb3NpdGl2ZSBudW1iZXJcbiAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIHNtYWxsZXIgdGhhbixcbiAgIGVxdWFsIHRvLCBvciBsYXJnZXIgdGhhbiB0aGUgc2Vjb25kIGFyZ3VtZW50OiBgYGNtcD1sYW1iZGEgeCx5OlxuICAgY21wKHgubG93ZXIoKSwgeS5sb3dlcigpKWBgLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGBOb25lYGAuXG5cbiAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG8gZXh0cmFjdFxuICAgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50OiBgYGtleT1zdHIubG93ZXJgYC4gIFRoZVxuICAgZGVmYXVsdCB2YWx1ZSBpcyBgYE5vbmVgYC5cblxuICAgKnJldmVyc2UqIGlzIGEgYm9vbGVhbiB2YWx1ZS4gIElmIHNldCB0byBgYFRydWVgYCwgdGhlbiB0aGUgbGlzdFxuICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgSW4gZ2VuZXJhbCwgdGhlICprZXkqIGFuZCAqcmV2ZXJzZSogY29udmVyc2lvbiBwcm9jZXNzZXMgYXJlIG11Y2hcbiAgIGZhc3RlciB0aGFuIHNwZWNpZnlpbmcgYW4gZXF1aXZhbGVudCAqY21wKiBmdW5jdGlvbi4gIFRoaXMgaXNcbiAgIGJlY2F1c2UgKmNtcCogaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBlYWNoIGxpc3QgZWxlbWVudCB3aGlsZVxuICAgKmtleSogYW5kICpyZXZlcnNlKiB0b3VjaCBlYWNoIGVsZW1lbnQgb25seSBvbmNlLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBTdXBwb3J0IGZvciBgYE5vbmVgYCBhcyBhbiBlcXVpdmFsZW50IHRvXG4gICBvbWl0dGluZyAqY21wKiB3YXMgYWRkZWQuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yICprZXkqIGFuZCAqcmV2ZXJzZSogd2FzIGFkZGVkLlxuXG45LiBTdGFydGluZyB3aXRoIFB5dGhvbiAyLjMsIHRoZSBgYHNvcnQoKWBgIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIGJlXG4gICBzdGFibGUuICBBIHNvcnQgaXMgc3RhYmxlIGlmIGl0IGd1YXJhbnRlZXMgbm90IHRvIGNoYW5nZSB0aGVcbiAgIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgY29tcGFyZSBlcXVhbCAtLS0gdGhpcyBpcyBoZWxwZnVsXG4gICBmb3Igc29ydGluZyBpbiBtdWx0aXBsZSBwYXNzZXMgKGZvciBleGFtcGxlLCBzb3J0IGJ5IGRlcGFydG1lbnQsXG4gICB0aGVuIGJ5IHNhbGFyeSBncmFkZSkuXG5cbjEwLiAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFdoaWxlIGEgbGlzdCBpcyBiZWluZyBzb3J0ZWQsXG4gICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgIHVuZGVmaW5lZC4gIFRoZSBDIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiAyLjMgYW5kIG5ld2VyIG1ha2VzIHRoZVxuICAgIGxpc3QgYXBwZWFyIGVtcHR5IGZvciB0aGUgZHVyYXRpb24sIGFuZCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgaWZcbiAgICBpdCBjYW4gZGV0ZWN0IHRoYXQgdGhlIGxpc3QgaGFzIGJlZW4gbXV0YXRlZCBkdXJpbmcgYSBzb3J0LlxuIiwKKyAndHlwZXNzZXEnOiB1J1xuU2VxdWVuY2UgVHlwZXMgLS0tIGBgc3RyYGAsIGBgdW5pY29kZWBgLCBgYGxpc3RgYCwgYGB0dXBsZWBgLCBgYGJ1ZmZlcmBgLCBgYHhyYW5nZWBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHNpeCBzZXF1ZW5jZSB0eXBlczogc3RyaW5ncywgVW5pY29kZSBzdHJpbmdzLCBsaXN0cywgdHVwbGVzLFxuYnVmZmVycywgYW5kIHhyYW5nZSBvYmplY3RzLlxuXG5Gb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0IGluIGBgZGljdGBgIGFuZCBgYHNldGBgIGNsYXNzZXMsXG5hbmQgdGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUuXG5cblN0cmluZyBsaXRlcmFscyBhcmUgd3JpdHRlbiBpbiBzaW5nbGUgb3IgZG91YmxlIHF1b3RlczogYGBcJ3h5enp5XCdgYCxcbmBgImZyb2JvenoiYGAuICBTZWUgKlN0cmluZyBsaXRlcmFscyogZm9yIG1vcmUgYWJvdXQgc3RyaW5nIGxpdGVyYWxzLlxuVW5pY29kZSBzdHJpbmdzIGFyZSBtdWNoIGxpa2Ugc3RyaW5ncywgYnV0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIHN5bnRheFxudXNpbmcgYSBwcmVjZWRpbmcgYGBcJ3VcJ2BgIGNoYXJhY3RlcjogYGB1XCdhYmNcJ2BgLCBgYHUiZGVmImBgLiBJblxuYWRkaXRpb24gdG8gdGhlIGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGhlcmUsIHRoZXJlIGFyZSBhbHNvIHN0cmluZy1cbnNwZWNpZmljIG1ldGhvZHMgZGVzY3JpYmVkIGluIHRoZSAqU3RyaW5nIE1ldGhvZHMqIHNlY3Rpb24uIExpc3RzIGFyZVxuY29uc3RydWN0ZWQgd2l0aCBzcXVhcmUgYnJhY2tldHMsIHNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6IGBgW2EsXG5iLCBjXWBgLiBUdXBsZXMgYXJlIGNvbnN0cnVjdGVkIGJ5IHRoZSBjb21tYSBvcGVyYXRvciAobm90IHdpdGhpblxuc3F1YXJlIGJyYWNrZXRzKSwgd2l0aCBvciB3aXRob3V0IGVuY2xvc2luZyBwYXJlbnRoZXNlcywgYnV0IGFuIGVtcHR5XG50dXBsZSBtdXN0IGhhdmUgdGhlIGVuY2xvc2luZyBwYXJlbnRoZXNlcywgc3VjaCBhcyBgYGEsIGIsIGNgYCBvclxuYGAoKWBgLiAgQSBzaW5nbGUgaXRlbSB0dXBsZSBtdXN0IGhhdmUgYSB0cmFpbGluZyBjb21tYSwgc3VjaCBhc1xuYGAoZCwpYGAuXG5cbkJ1ZmZlciBvYmplY3RzIGFyZSBub3QgZGlyZWN0bHkgc3VwcG9ydGVkIGJ5IFB5dGhvbiBzeW50YXgsIGJ1dCBjYW4gYmVcbmNyZWF0ZWQgYnkgY2FsbGluZyB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBidWZmZXIoKWBgLiAgVGhleSBkb25cJ3RcbnN1cHBvcnQgY29uY2F0ZW5hdGlvbiBvciByZXBldGl0aW9uLlxuXG5PYmplY3RzIG9mIHR5cGUgeHJhbmdlIGFyZSBzaW1pbGFyIHRvIGJ1ZmZlcnMgaW4gdGhhdCB0aGVyZSBpcyBub1xuc3BlY2lmaWMgc3ludGF4IHRvIGNyZWF0ZSB0aGVtLCBidXQgdGhleSBhcmUgY3JlYXRlZCB1c2luZyB0aGVcbmBgeHJhbmdlKClgYCBmdW5jdGlvbi4gIFRoZXkgZG9uXCd0IHN1cHBvcnQgc2xpY2luZywgY29uY2F0ZW5hdGlvbiBvclxucmVwZXRpdGlvbiwgYW5kIHVzaW5nIGBgaW5gYCwgYGBub3QgaW5gYCwgYGBtaW4oKWBgIG9yIGBgbWF4KClgYCBvblxudGhlbSBpcyBpbmVmZmljaWVudC5cblxuTW9zdCBzZXF1ZW5jZSB0eXBlcyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucy4gIFRoZSBgYGluYGAgYW5kXG5gYG5vdCBpbmBgIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0aWVzIGFzIHRoZSBjb21wYXJpc29uXG5vcGVyYXRpb25zLiAgVGhlIGBgK2BgIGFuZCBgYCpgYCBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkgYXNcbnRoZSBjb3JyZXNwb25kaW5nIG51bWVyaWMgb3BlcmF0aW9ucy4gWzNdIEFkZGl0aW9uYWwgbWV0aG9kcyBhcmVcbnByb3ZpZGVkIGZvciAqTXV0YWJsZSBTZXF1ZW5jZSBUeXBlcyouXG5cblRoaXMgdGFibGUgbGlzdHMgdGhlIHNlcXVlbmNlIG9wZXJhdGlvbnMgc29ydGVkIGluIGFzY2VuZGluZyBwcmlvcml0eVxuKG9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkpLiAgSW4gdGhlIHRhYmxlLFxuKnMqIGFuZCAqdCogYXJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlOyAqbiosICppKiBhbmQgKmoqIGFyZVxuaW50ZWdlcnM6XG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PStcbnwgYGB4IGluIHNgYCAgICAgICAgIHwgYGBUcnVlYGAgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgIHwgZXF1YWwgdG8gKngqLCBlbHNlIGBgRmFsc2VgYCAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGB4IG5vdCBpbiBzYGAgICAgIHwgYGBGYWxzZWBgIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgIHwgZXF1YWwgdG8gKngqLCBlbHNlIGBgVHJ1ZWBgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzICsgdGBgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAqdCogfCAoNikgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzICogbiwgbiAqIHNgYCAgIHwgKm4qIHNoYWxsb3cgY29waWVzIG9mICpzKiAgICAgICAgfCAoMikgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgIHwgY29uY2F0ZW5hdGVkICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzW2ldYGAgICAgICAgICAgIHwgKmkqXCd0aCBpdGVtIG9mICpzKiwgb3JpZ2luIDAgICAgIHwgKDMpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpOmpdYGAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDQpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpOmo6a11gYCAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDUpICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IHdpdGggc3RlcCAqayogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbGVuKHMpYGAgICAgICAgICB8IGxlbmd0aCBvZiAqcyogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbWluKHMpYGAgICAgICAgICB8IHNtYWxsZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbWF4KHMpYGAgICAgICAgICB8IGxhcmdlc3QgaXRlbSBvZiAqcyogICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG5cblNlcXVlbmNlIHR5cGVzIGFsc28gc3VwcG9ydCBjb21wYXJpc29ucy4gSW4gcGFydGljdWxhciwgdHVwbGVzIGFuZFxubGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IGJ5IGNvbXBhcmluZyBjb3JyZXNwb25kaW5nXG5lbGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGV2ZXJ5IGVsZW1lbnQgbXVzdCBjb21wYXJlXG5lcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBoYXZlIHRoZSBzYW1lXG5sZW5ndGguIChGb3IgZnVsbCBkZXRhaWxzIHNlZSAqQ29tcGFyaXNvbnMqIGluIHRoZSBsYW5ndWFnZVxucmVmZXJlbmNlLilcblxuTm90ZXM6XG5cbjEuIFdoZW4gKnMqIGlzIGEgc3RyaW5nIG9yIFVuaWNvZGUgc3RyaW5nIG9iamVjdCB0aGUgYGBpbmBgIGFuZCBgYG5vdFxuICAgaW5gYCBvcGVyYXRpb25zIGFjdCBsaWtlIGEgc3Vic3RyaW5nIHRlc3QuICBJbiBQeXRob24gdmVyc2lvbnNcbiAgIGJlZm9yZSAyLjMsICp4KiBoYWQgdG8gYmUgYSBzdHJpbmcgb2YgbGVuZ3RoIDEuIEluIFB5dGhvbiAyLjMgYW5kXG4gICBiZXlvbmQsICp4KiBtYXkgYmUgYSBzdHJpbmcgb2YgYW55IGxlbmd0aC5cblxuMi4gVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gYGAwYGAgYXJlIHRyZWF0ZWQgYXMgYGAwYGAgKHdoaWNoIHlpZWxkcyBhblxuICAgZW1wdHkgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyAqcyopLiAgTm90ZSBhbHNvIHRoYXQgdGhlIGNvcGllc1xuICAgYXJlIHNoYWxsb3c7IG5lc3RlZCBzdHJ1Y3R1cmVzIGFyZSBub3QgY29waWVkLiAgVGhpcyBvZnRlbiBoYXVudHNcbiAgIG5ldyBQeXRob24gcHJvZ3JhbW1lcnM7IGNvbnNpZGVyOlxuXG4gICA+Pj4gbGlzdHMgPSBbW11dICogM1xuICAgPj4+IGxpc3RzXG4gICBbW10sIFtdLCBbXV1cbiAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgID4+PiBsaXN0c1xuICAgW1szXSwgWzNdLCBbM11dXG5cbiAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgYGBbW11dYGAgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmdcbiAgIGFuIGVtcHR5IGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiBgYFtbXV0gKiAzYGAgYXJlIChwb2ludGVyc1xuICAgdG8pIHRoaXMgc2luZ2xlIGVtcHR5IGxpc3QuICBNb2RpZnlpbmcgYW55IG9mIHRoZSBlbGVtZW50cyBvZlxuICAgYGBsaXN0c2BgIG1vZGlmaWVzIHRoaXMgc2luZ2xlIGxpc3QuIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZlxuICAgZGlmZmVyZW50IGxpc3RzIHRoaXMgd2F5OlxuXG4gICA+Pj4gbGlzdHMgPSBbW10gZm9yIGkgaW4gcmFuZ2UoMyldXG4gICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICA+Pj4gbGlzdHNbMV0uYXBwZW5kKDUpXG4gICA+Pj4gbGlzdHNbMl0uYXBwZW5kKDcpXG4gICA+Pj4gbGlzdHNcbiAgIFtbM10sIFs1XSwgWzddXVxuXG4zLiBJZiAqaSogb3IgKmoqIGlzIG5lZ2F0aXZlLCB0aGUgaW5kZXggaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGVcbiAgIHN0cmluZzogYGBsZW4ocykgKyBpYGAgb3IgYGBsZW4ocykgKyBqYGAgaXMgc3Vic3RpdHV0ZWQuICBCdXQgbm90ZVxuICAgdGhhdCBgYC0wYGAgaXMgc3RpbGwgYGAwYGAuXG5cbjQuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzIGRlZmluZWQgYXMgdGhlIHNlcXVlbmNlIG9mXG4gICBpdGVtcyB3aXRoIGluZGV4ICprKiBzdWNoIHRoYXQgYGBpIDw9IGsgPCBqYGAuICBJZiAqaSogb3IgKmoqIGlzXG4gICBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCwgdXNlIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgb21pdHRlZCBvclxuICAgYGBOb25lYGAsIHVzZSBgYDBgYC4gIElmICpqKiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCB1c2VcbiAgIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICpqKiwgdGhlIHNsaWNlIGlzXG4gICBlbXB0eS5cblxuNS4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogd2l0aCBzdGVwICprKiBpcyBkZWZpbmVkIGFzIHRoZVxuICAgc2VxdWVuY2Ugb2YgaXRlbXMgd2l0aCBpbmRleCAgYGB4ID0gaSArIG4qa2BgIHN1Y2ggdGhhdCBgYDAgPD0gbiA8XG4gICAoai1pKS9rYGAuICBJbiBvdGhlciB3b3JkcywgdGhlIGluZGljZXMgYXJlIGBgaWBgLCBgYGkra2BgLFxuICAgYGBpKzIqa2BgLCBgYGkrMyprYGAgYW5kIHNvIG9uLCBzdG9wcGluZyB3aGVuICpqKiBpcyByZWFjaGVkIChidXRcbiAgIG5ldmVyIGluY2x1ZGluZyAqaiopLiAgSWYgKmkqIG9yICpqKiBpcyBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCxcbiAgIHVzZSBgYGxlbihzKWBgLiAgSWYgKmkqIG9yICpqKiBhcmUgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhleSBiZWNvbWVcbiAgICJlbmQiIHZhbHVlcyAod2hpY2ggZW5kIGRlcGVuZHMgb24gdGhlIHNpZ24gb2YgKmsqKS4gIE5vdGUsICprKlxuICAgY2Fubm90IGJlIHplcm8uIElmICprKiBpcyBgYE5vbmVgYCwgaXQgaXMgdHJlYXRlZCBsaWtlIGBgMWBgLlxuXG42LiAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIElmICpzKiBhbmQgKnQqIGFyZSBib3RoIHN0cmluZ3MsXG4gICBzb21lIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMgc3VjaCBhcyBDUHl0aG9uIGNhbiB1c3VhbGx5IHBlcmZvcm0gYW5cbiAgIGluLXBsYWNlIG9wdGltaXphdGlvbiBmb3IgYXNzaWdubWVudHMgb2YgdGhlIGZvcm0gYGBzID0gcyArIHRgYCBvclxuICAgYGBzICs9IHRgYC4gIFdoZW4gYXBwbGljYWJsZSwgdGhpcyBvcHRpbWl6YXRpb24gbWFrZXMgcXVhZHJhdGljXG4gICBydW4tdGltZSBtdWNoIGxlc3MgbGlrZWx5LiAgVGhpcyBvcHRpbWl6YXRpb24gaXMgYm90aCB2ZXJzaW9uIGFuZFxuICAgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LiAgRm9yIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSBjb2RlLCBpdCBpc1xuICAgcHJlZmVyYWJsZSB0byB1c2UgdGhlIGBgc3RyLmpvaW4oKWBgIG1ldGhvZCB3aGljaCBhc3N1cmVzXG4gICBjb25zaXN0ZW50IGxpbmVhciBjb25jYXRlbmF0aW9uIHBlcmZvcm1hbmNlIGFjcm9zcyB2ZXJzaW9ucyBhbmRcbiAgIGltcGxlbWVudGF0aW9ucy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogRm9ybWVybHksIHN0cmluZyBjb25jYXRlbmF0aW9uIG5ldmVyXG4gICBvY2N1cnJlZCBpbi1wbGFjZS5cblxuXG5TdHJpbmcgTWV0aG9kc1xuPT09PT09PT09PT09PT1cblxuQmVsb3cgYXJlIGxpc3RlZCB0aGUgc3RyaW5nIG1ldGhvZHMgd2hpY2ggYm90aCA4LWJpdCBzdHJpbmdzIGFuZFxuVW5pY29kZSBvYmplY3RzIHN1cHBvcnQuXG5cbkluIGFkZGl0aW9uLCBQeXRob25cJ3Mgc3RyaW5ncyBzdXBwb3J0IHRoZSBzZXF1ZW5jZSB0eXBlIG1ldGhvZHNcbmRlc2NyaWJlZCBpbiB0aGUgKlNlcXVlbmNlIFR5cGVzIC0tLSBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlLFxuYnVmZmVyLCB4cmFuZ2UqIHNlY3Rpb24uIFRvIG91dHB1dCBmb3JtYXR0ZWQgc3RyaW5ncyB1c2UgdGVtcGxhdGVcbnN0cmluZ3Mgb3IgdGhlIGBgJWBgIG9wZXJhdG9yIGRlc2NyaWJlZCBpbiB0aGUgKlN0cmluZyBGb3JtYXR0aW5nXG5PcGVyYXRpb25zKiBzZWN0aW9uLiBBbHNvLCBzZWUgdGhlIGBgcmVgYCBtb2R1bGUgZm9yIHN0cmluZyBmdW5jdGlvbnNcbmJhc2VkIG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggb25seSBpdHMgZmlyc3QgY2hhcmFjdGVyXG4gICBjYXBpdGFsaXplZC5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yIHRoZSAqZmlsbGNoYXIqIGFyZ3VtZW50LlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmRlY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSlcblxuICAgRGVjb2RlcyB0aGUgc3RyaW5nIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciAqZW5jb2RpbmcqLlxuICAgKmVuY29kaW5nKiBkZWZhdWx0cyB0byB0aGUgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXlcbiAgIGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBpc1xuICAgYGBcJ3N0cmljdFwnYGAsIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYGBVbmljb2RlRXJyb3JgYC5cbiAgIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGBcJ2lnbm9yZVwnYGAsIGBgXCdyZXBsYWNlXCdgYCBhbmQgYW55IG90aGVyXG4gICBuYW1lIHJlZ2lzdGVyZWQgdmlhIGBgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKClgYCwgc2VlIHNlY3Rpb24gKkNvZGVjXG4gICBCYXNlIENsYXNzZXMqLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIG90aGVyIGVycm9yIGhhbmRsaW5nIHNjaGVtZXNcbiAgIGFkZGVkLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi43OiBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuc3RyLmVuY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSlcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLiAgRGVmYXVsdCBlbmNvZGluZyBpcyB0aGVcbiAgIGN1cnJlbnQgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGFcbiAgIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXNcbiAgIGBgXCdzdHJpY3RcJ2BgLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGFcbiAgIGBgVW5pY29kZUVycm9yYGAuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLFxuICAgYGBcJ3JlcGxhY2VcJ2BgLCBgYFwneG1sY2hhcnJlZnJlcGxhY2VcJ2BgLCBgYFwnYmFja3NsYXNocmVwbGFjZVwnYGAgYW5kXG4gICBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZVxuICAgc2VjdGlvbiAqQ29kZWMgQmFzZSBDbGFzc2VzKi4gRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZVxuICAgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuICAgTmV3IGluIHZlcnNpb24gMi4wLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBTdXBwb3J0IGZvciBgYFwneG1sY2hhcnJlZnJlcGxhY2VcJ2BgIGFuZFxuICAgYGBcJ2JhY2tzbGFzaHJlcGxhY2VcJ2BgIGFuZCBvdGhlciBlcnJvciBoYW5kbGluZyBzY2hlbWVzIGFkZGVkLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi43OiBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuc3RyLmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkICpzdWZmaXgqLFxuICAgb3RoZXJ3aXNlIHJldHVybiBgYEZhbHNlYGAuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mXG4gICBzdWZmaXhlcyB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXRcbiAgIHRoYXQgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNTogQWNjZXB0IHR1cGxlcyBhcyAqc3VmZml4Ki5cblxuc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZFxuICAgYnkgb25lIG9yIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGVcbiAgIGdpdmVuIHRhYiBzaXplLiAgVGhlIGNvbHVtbiBudW1iZXIgaXMgcmVzZXQgdG8gemVybyBhZnRlciBlYWNoXG4gICBuZXdsaW5lIG9jY3VycmluZyBpbiB0aGUgc3RyaW5nLiBJZiAqdGFic2l6ZSogaXMgbm90IGdpdmVuLCBhIHRhYlxuICAgc2l6ZSBvZiBgYDhgYCBjaGFyYWN0ZXJzIGlzIGFzc3VtZWQuICBUaGlzIGRvZXNuXCd0IHVuZGVyc3RhbmQgb3RoZXJcbiAgIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzIG9yIGVzY2FwZSBzZXF1ZW5jZXMuXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBpZiAqc3ViKiBpcyBub3QgZm91bmQuXG5cbnN0ci5mb3JtYXQoKmFyZ3MsICoqa3dhcmdzKVxuXG4gICBQZXJmb3JtIGEgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0aW9uLiAgVGhlIHN0cmluZyBvbiB3aGljaCB0aGlzXG4gICBtZXRob2QgaXMgY2FsbGVkIGNhbiBjb250YWluIGxpdGVyYWwgdGV4dCBvciByZXBsYWNlbWVudCBmaWVsZHNcbiAgIGRlbGltaXRlZCBieSBicmFjZXMgYGB7fWBgLiAgRWFjaCByZXBsYWNlbWVudCBmaWVsZCBjb250YWlucyBlaXRoZXJcbiAgIHRoZSBudW1lcmljIGluZGV4IG9mIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgb3IgdGhlIG5hbWUgb2YgYVxuICAga2V5d29yZCBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgZWFjaFxuICAgcmVwbGFjZW1lbnQgZmllbGQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZVxuICAgY29ycmVzcG9uZGluZyBhcmd1bWVudC5cblxuICAgPj4+ICJUaGUgc3VtIG9mIDEgKyAyIGlzIHswfSIuZm9ybWF0KDErMilcbiAgIFwnVGhlIHN1bSBvZiAxICsgMiBpcyAzXCdcblxuICAgU2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlvdXNcbiAgIGZvcm1hdHRpbmcgb3B0aW9ucyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaW4gZm9ybWF0IHN0cmluZ3MuXG5cbiAgIFRoaXMgbWV0aG9kIG9mIHN0cmluZyBmb3JtYXR0aW5nIGlzIHRoZSBuZXcgc3RhbmRhcmQgaW4gUHl0aG9uIDMuMCxcbiAgIGFuZCBzaG91bGQgYmUgcHJlZmVycmVkIHRvIHRoZSBgYCVgYCBmb3JtYXR0aW5nIGRlc2NyaWJlZCBpblxuICAgKlN0cmluZyBGb3JtYXR0aW5nIE9wZXJhdGlvbnMqIGluIG5ldyBjb2RlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjYuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgZmluZCgpYGAsIGJ1dCByYWlzZSBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90XG4gICBmb3VuZC5cblxuc3RyLmlzYWxudW0oKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYW51bWVyaWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNkaWdpdCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRpZ2l0cyBhbmQgdGhlcmUgaXNcbiAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc2xvd2VyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbG93ZXJjYXNlIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc3RpdGxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHRpdGxlY2FzZWQgc3RyaW5nIGFuZCB0aGVyZSBpcyBhdFxuICAgbGVhc3Qgb25lIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgbWF5IG9ubHlcbiAgIGZvbGxvdyB1bmNhc2VkIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIG9ubHkgY2FzZWQgb25lcy5cbiAgIFJldHVybiBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXN1cHBlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHVwcGVyY2FzZSBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5qb2luKGl0ZXJhYmxlKVxuXG4gICBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3MgaW4gdGhlXG4gICAqaXRlcmFibGUqICppdGVyYWJsZSouICBUaGUgc2VwYXJhdG9yIGJldHdlZW4gZWxlbWVudHMgaXMgdGhlXG4gICBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuXG4gICBgYGxlbihzKWBgLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBTdXBwb3J0IGZvciB0aGUgKmZpbGxjaGFyKiBhcmd1bWVudC5cblxuc3RyLmxvd2VyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIubHN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcubHN0cmlwKClcbiAgIFwnc3BhY2lvdXMgICBcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcubHN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGUuY29tXCdcblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMi4yOiBTdXBwb3J0IGZvciB0aGUgKmNoYXJzKiBhcmd1bWVudC5cblxuc3RyLnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYsIGZvbGxvd2VkIGJ5XG4gICB0d28gZW1wdHkgc3RyaW5ncy5cblxuICAgTmV3IGluIHZlcnNpb24gMi41LlxuXG5zdHIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqb2xkKlxuICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seVxuICAgdGhlIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLlxuXG5zdHIucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGByZmluZCgpYGAgYnV0IHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgKnN1YipcbiAgIGlzIG5vdCBmb3VuZC5cblxuc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhblxuICAgYGBsZW4ocylgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgdGhlICpmaWxsY2hhciogYXJndW1lbnQuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuc3RyLnJzcGxpdChbc2VwWywgbWF4c3BsaXRdXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCogc3BsaXRzXG4gICBhcmUgZG9uZSwgdGhlICpyaWdodG1vc3QqIG9uZXMuICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yXG4gICBgYE5vbmVgYCwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLiAgRXhjZXB0IGZvclxuICAgc3BsaXR0aW5nIGZyb20gdGhlIHJpZ2h0LCBgYHJzcGxpdCgpYGAgYmVoYXZlcyBsaWtlIGBgc3BsaXQoKWBgXG4gICB3aGljaCBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjQuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjIuMjogU3VwcG9ydCBmb3IgdGhlICpjaGFycyogYXJndW1lbnQuXG5cbnN0ci5zcGxpdChbc2VwWywgbWF4c3BsaXRdXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiAgSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqXG4gICBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0IGBgbWF4c3BsaXQrMWBgXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlcmUgaXMgbm8gbGltaXRcbiAgIG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIChhbGwgcG9zc2libGUgc3BsaXRzIGFyZSBtYWRlKS5cblxuICAgSWYgKnNlcCogaXMgZ2l2ZW4sIGNvbnNlY3V0aXZlIGRlbGltaXRlcnMgYXJlIG5vdCBncm91cGVkIHRvZ2V0aGVyXG4gICBhbmQgYXJlIGRlZW1lZCB0byBkZWxpbWl0IGVtcHR5IHN0cmluZ3MgKGZvciBleGFtcGxlLFxuICAgYGBcJzEsLDJcJy5zcGxpdChcJyxcJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJ1wnLCBcJzJcJ11gYCkuICBUaGUgKnNlcCpcbiAgIGFyZ3VtZW50IG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgYGBcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgKS4gU3BsaXR0aW5nXG4gICBhbiBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyBgYFtcJ1wnXWBgLlxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgTm9uZWBgLCBhIGRpZmZlcmVudCBzcGxpdHRpbmdcbiAgIGFsZ29yaXRobSBpcyBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkXG4gICBhcyBhIHNpbmdsZSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzXG4gICBhdCB0aGUgc3RhcnQgb3IgZW5kIGlmIHRoZSBzdHJpbmcgaGFzIGxlYWRpbmcgb3IgdHJhaWxpbmdcbiAgIHdoaXRlc3BhY2UuICBDb25zZXF1ZW50bHksIHNwbGl0dGluZyBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmdcbiAgIGNvbnNpc3Rpbmcgb2YganVzdCB3aGl0ZXNwYWNlIHdpdGggYSBgYE5vbmVgYCBzZXBhcmF0b3IgcmV0dXJuc1xuICAgYGBbXWBgLlxuXG4gICBGb3IgZXhhbXBsZSwgYGBcJyAxICAyICAgMyAgXCcuc3BsaXQoKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCxcbiAgIGFuZCBgYFwnICAxICAyICAgMyAgXCcuc3BsaXQoTm9uZSwgMSlgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzIgICAzICBcJ11gYC5cblxuc3RyLnNwbGl0bGluZXMoW2tlZXBlbmRzXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZVxuICAgYm91bmRhcmllcy4gIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuc3RyLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZVxuICAgcmV0dXJuIGBgRmFsc2VgYC4gKnByZWZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBwcmVmaXhlcyB0byBsb29rXG4gICBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNTogQWNjZXB0IHR1cGxlcyBhcyAqcHJlZml4Ki5cblxuc3RyLnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgY2hhcmFjdGVycyByZW1vdmVkLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZVxuICAgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqXG4gICBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzXG4gICB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnN0cmlwKClcbiAgIFwnc3BhY2lvdXNcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcuc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZVwnXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjIuMjogU3VwcG9ydCBmb3IgdGhlICpjaGFycyogYXJndW1lbnQuXG5cbnN0ci5zd2FwY2FzZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIGNvbnZlcnRlZCB0b1xuICAgbG93ZXJjYXNlIGFuZCB2aWNlIHZlcnNhLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLnRpdGxlKClcblxuICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhblxuICAgdXBwZXJjYXNlIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuXG5cbiAgIFRoZSBhbGdvcml0aG0gdXNlcyBhIHNpbXBsZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGFcbiAgIHdvcmQgYXMgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGxldHRlcnMuICBUaGUgZGVmaW5pdGlvbiB3b3JrcyBpblxuICAgbWFueSBjb250ZXh0cyBidXQgaXQgbWVhbnMgdGhhdCBhcG9zdHJvcGhlcyBpbiBjb250cmFjdGlvbnMgYW5kXG4gICBwb3NzZXNzaXZlcyBmb3JtIHdvcmQgYm91bmRhcmllcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgZGVzaXJlZFxuICAgcmVzdWx0OlxuXG4gICAgICA+Pj4gInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKVxuICAgICAgIlRoZXlcJ1JlIEJpbGxcJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayJcblxuICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhclxuICAgZXhwcmVzc2lvbnM6XG5cbiAgICAgID4+PiBpbXBvcnQgcmVcbiAgICAgID4+PiBkZWYgdGl0bGVjYXNlKHMpOlxuICAgICAgICAgICAgICByZXR1cm4gcmUuc3ViKHIiW0EtWmEtel0rKFwnW0EtWmEtel0rKT8iLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMF0udXBwZXIoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKVxuXG4gICAgICA+Pj4gdGl0bGVjYXNlKCJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMuIilcbiAgICAgICJUaGV5XCdyZSBCaWxsXCdzIEZyaWVuZHMuIlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLnRyYW5zbGF0ZSh0YWJsZVssIGRlbGV0ZWNoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIG9jY3VycmluZyBpbiB0aGVcbiAgIG9wdGlvbmFsIGFyZ3VtZW50ICpkZWxldGVjaGFycyogYXJlIHJlbW92ZWQsIGFuZCB0aGUgcmVtYWluaW5nXG4gICBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUsXG4gICB3aGljaCBtdXN0IGJlIGEgc3RyaW5nIG9mIGxlbmd0aCAyNTYuXG5cbiAgIFlvdSBjYW4gdXNlIHRoZSBgYG1ha2V0cmFucygpYGAgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBgYHN0cmluZ2BgXG4gICBtb2R1bGUgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gdGFibGUuIEZvciBzdHJpbmcgb2JqZWN0cywgc2V0IHRoZVxuICAgKnRhYmxlKiBhcmd1bWVudCB0byBgYE5vbmVgYCBmb3IgdHJhbnNsYXRpb25zIHRoYXQgb25seSBkZWxldGVcbiAgIGNoYXJhY3RlcnM6XG5cbiAgID4+PiBcJ3JlYWQgdGhpcyBzaG9ydCB0ZXh0XCcudHJhbnNsYXRlKE5vbmUsIFwnYWVpb3VcJylcbiAgIFwncmQgdGhzIHNocnQgdHh0XCdcblxuICAgTmV3IGluIHZlcnNpb24gMi42OiBTdXBwb3J0IGZvciBhIGBgTm9uZWBgICp0YWJsZSogYXJndW1lbnQuXG5cbiAgIEZvciBVbmljb2RlIG9iamVjdHMsIHRoZSBgYHRyYW5zbGF0ZSgpYGAgbWV0aG9kIGRvZXMgbm90IGFjY2VwdCB0aGVcbiAgIG9wdGlvbmFsICpkZWxldGVjaGFycyogYXJndW1lbnQuICBJbnN0ZWFkLCBpdCByZXR1cm5zIGEgY29weSBvZiB0aGVcbiAgICpzKiB3aGVyZSBhbGwgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuXG4gICB0cmFuc2xhdGlvbiB0YWJsZSB3aGljaCBtdXN0IGJlIGEgbWFwcGluZyBvZiBVbmljb2RlIG9yZGluYWxzIHRvXG4gICBVbmljb2RlIG9yZGluYWxzLCBVbmljb2RlIHN0cmluZ3Mgb3IgYGBOb25lYGAuIFVubWFwcGVkIGNoYXJhY3RlcnNcbiAgIGFyZSBsZWZ0IHVudG91Y2hlZC4gQ2hhcmFjdGVycyBtYXBwZWQgdG8gYGBOb25lYGAgYXJlIGRlbGV0ZWQuXG4gICBOb3RlLCBhIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgY3VzdG9tIGNoYXJhY3RlclxuICAgbWFwcGluZyBjb2RlYyB1c2luZyB0aGUgYGBjb2RlY3NgYCBtb2R1bGUgKHNlZSBgYGVuY29kaW5ncy5jcDEyNTFgYFxuICAgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgY29udmVydGVkIHRvIHVwcGVyY2FzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mXG4gICBsZW5ndGggKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWxcbiAgIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBgYGxlbihzKWBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuMi5cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSBwcmVzZW50IG9ubHkgb24gdW5pY29kZSBvYmplY3RzOlxuXG51bmljb2RlLmlzbnVtZXJpYygpXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGVyZSBhcmUgb25seSBudW1lcmljIGNoYXJhY3RlcnMgaW4gUyxcbiAgIGBgRmFsc2VgYCBvdGhlcndpc2UuIE51bWVyaWMgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsXG4gICBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksXG4gICBlLmcuIFUrMjE1NSwgVlVMR0FSIEZSQUNUSU9OIE9ORSBGSUZUSC5cblxudW5pY29kZS5pc2RlY2ltYWwoKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlcmUgYXJlIG9ubHkgZGVjaW1hbCBjaGFyYWN0ZXJzIGluIFMsXG4gICBgYEZhbHNlYGAgb3RoZXJ3aXNlLiBEZWNpbWFsIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLFxuICAgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgdGhhdCBjYW4gYmUgdXNlZCB0byBmb3JtIGRlY2ltYWwtcmFkaXhcbiAgIG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTy5cblxuXG5TdHJpbmcgRm9ybWF0dGluZyBPcGVyYXRpb25zXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblN0cmluZyBhbmQgVW5pY29kZSBvYmplY3RzIGhhdmUgb25lIHVuaXF1ZSBidWlsdC1pbiBvcGVyYXRpb246IHRoZVxuYGAlYGAgb3BlcmF0b3IgKG1vZHVsbykuICBUaGlzIGlzIGFsc28ga25vd24gYXMgdGhlIHN0cmluZ1xuKmZvcm1hdHRpbmcqIG9yICppbnRlcnBvbGF0aW9uKiBvcGVyYXRvci4gIEdpdmVuIGBgZm9ybWF0ICUgdmFsdWVzYGBcbih3aGVyZSAqZm9ybWF0KiBpcyBhIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCksIGBgJWBgIGNvbnZlcnNpb25cbnNwZWNpZmljYXRpb25zIGluICpmb3JtYXQqIGFyZSByZXBsYWNlZCB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cyBvZlxuKnZhbHVlcyouICBUaGUgZWZmZWN0IGlzIHNpbWlsYXIgdG8gdGhlIHVzaW5nIGBgc3ByaW50ZigpYGAgaW4gdGhlIENcbmxhbmd1YWdlLiAgSWYgKmZvcm1hdCogaXMgYSBVbmljb2RlIG9iamVjdCwgb3IgaWYgYW55IG9mIHRoZSBvYmplY3RzXG5iZWluZyBjb252ZXJ0ZWQgdXNpbmcgdGhlIGBgJXNgYCBjb252ZXJzaW9uIGFyZSBVbmljb2RlIG9iamVjdHMsIHRoZVxucmVzdWx0IHdpbGwgYWxzbyBiZSBhIFVuaWNvZGUgb2JqZWN0LlxuXG5JZiAqZm9ybWF0KiByZXF1aXJlcyBhIHNpbmdsZSBhcmd1bWVudCwgKnZhbHVlcyogbWF5IGJlIGEgc2luZ2xlIG5vbi1cbnR1cGxlIG9iamVjdC4gWzRdICBPdGhlcndpc2UsICp2YWx1ZXMqIG11c3QgYmUgYSB0dXBsZSB3aXRoIGV4YWN0bHlcbnRoZSBudW1iZXIgb2YgaXRlbXMgc3BlY2lmaWVkIGJ5IHRoZSBmb3JtYXQgc3RyaW5nLCBvciBhIHNpbmdsZVxubWFwcGluZyBvYmplY3QgKGZvciBleGFtcGxlLCBhIGRpY3Rpb25hcnkpLlxuXG5BIGNvbnZlcnNpb24gc3BlY2lmaWVyIGNvbnRhaW5zIHR3byBvciBtb3JlIGNoYXJhY3RlcnMgYW5kIGhhcyB0aGVcbmZvbGxvd2luZyBjb21wb25lbnRzLCB3aGljaCBtdXN0IG9jY3VyIGluIHRoaXMgb3JkZXI6XG5cbjEuIFRoZSBgYFwnJVwnYGAgY2hhcmFjdGVyLCB3aGljaCBtYXJrcyB0aGUgc3RhcnQgb2YgdGhlIHNwZWNpZmllci5cblxuMi4gTWFwcGluZyBrZXkgKG9wdGlvbmFsKSwgY29uc2lzdGluZyBvZiBhIHBhcmVudGhlc2lzZWQgc2VxdWVuY2Ugb2ZcbiAgIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLCBgYChzb21lbmFtZSlgYCkuXG5cbjMuIENvbnZlcnNpb24gZmxhZ3MgKG9wdGlvbmFsKSwgd2hpY2ggYWZmZWN0IHRoZSByZXN1bHQgb2Ygc29tZVxuICAgY29udmVyc2lvbiB0eXBlcy5cblxuNC4gTWluaW11bSBmaWVsZCB3aWR0aCAob3B0aW9uYWwpLiAgSWYgc3BlY2lmaWVkIGFzIGFuIGBgXCcqXCdgYFxuICAgKGFzdGVyaXNrKSwgdGhlIGFjdHVhbCB3aWR0aCBpcyByZWFkIGZyb20gdGhlIG5leHQgZWxlbWVudCBvZiB0aGVcbiAgIHR1cGxlIGluICp2YWx1ZXMqLCBhbmQgdGhlIG9iamVjdCB0byBjb252ZXJ0IGNvbWVzIGFmdGVyIHRoZVxuICAgbWluaW11bSBmaWVsZCB3aWR0aCBhbmQgb3B0aW9uYWwgcHJlY2lzaW9uLlxuXG41LiBQcmVjaXNpb24gKG9wdGlvbmFsKSwgZ2l2ZW4gYXMgYSBgYFwnLlwnYGAgKGRvdCkgZm9sbG93ZWQgYnkgdGhlXG4gICBwcmVjaXNpb24uICBJZiBzcGVjaWZpZWQgYXMgYGBcJypcJ2BgIChhbiBhc3RlcmlzayksIHRoZSBhY3R1YWwgd2lkdGhcbiAgIGlzIHJlYWQgZnJvbSB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSB0dXBsZSBpbiAqdmFsdWVzKiwgYW5kIHRoZVxuICAgdmFsdWUgdG8gY29udmVydCBjb21lcyBhZnRlciB0aGUgcHJlY2lzaW9uLlxuXG42LiBMZW5ndGggbW9kaWZpZXIgKG9wdGlvbmFsKS5cblxuNy4gQ29udmVyc2lvbiB0eXBlLlxuXG5XaGVuIHRoZSByaWdodCBhcmd1bWVudCBpcyBhIGRpY3Rpb25hcnkgKG9yIG90aGVyIG1hcHBpbmcgdHlwZSksIHRoZW5cbnRoZSBmb3JtYXRzIGluIHRoZSBzdHJpbmcgKm11c3QqIGluY2x1ZGUgYSBwYXJlbnRoZXNpc2VkIG1hcHBpbmcga2V5XG5pbnRvIHRoYXQgZGljdGlvbmFyeSBpbnNlcnRlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgYGBcJyVcJ2BgIGNoYXJhY3Rlci5cblRoZSBtYXBwaW5nIGtleSBzZWxlY3RzIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWQgZnJvbSB0aGUgbWFwcGluZy5cbkZvciBleGFtcGxlOlxuXG4+Pj4gcHJpbnQgXCclKGxhbmd1YWdlKXMgaGFzICUoIykwM2QgcXVvdGUgdHlwZXMuXCcgJSBcXFxuLi4uICAgICAgIHtcJ2xhbmd1YWdlXCc6ICJQeXRob24iLCAiIyI6IDJ9XG5QeXRob24gaGFzIDAwMiBxdW90ZSB0eXBlcy5cblxuSW4gdGhpcyBjYXNlIG5vIGBgKmBgIHNwZWNpZmllcnMgbWF5IG9jY3VyIGluIGEgZm9ybWF0IChzaW5jZSB0aGV5XG5yZXF1aXJlIGEgc2VxdWVudGlhbCBwYXJhbWV0ZXIgbGlzdCkuXG5cblRoZSBjb252ZXJzaW9uIGZsYWcgY2hhcmFjdGVycyBhcmU6XG5cbistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgRmxhZyAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBcJyNcJ2BgICAgfCBUaGUgdmFsdWUgY29udmVyc2lvbiB3aWxsIHVzZSB0aGUgImFsdGVybmF0ZSBmb3JtIiAod2hlcmUgZGVmaW5lZCAgICAgfFxufCAgICAgICAgICAgfCBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnMFwnYGAgICB8IFRoZSBjb252ZXJzaW9uIHdpbGwgYmUgemVybyBwYWRkZWQgZm9yIG51bWVyaWMgdmFsdWVzLiAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgXCctXCdgYCAgIHwgVGhlIGNvbnZlcnRlZCB2YWx1ZSBpcyBsZWZ0IGFkanVzdGVkIChvdmVycmlkZXMgdGhlIGBgXCcwXCdgYCAgICAgICAgICAgfFxufCAgICAgICAgICAgfCBjb252ZXJzaW9uIGlmIGJvdGggYXJlIGdpdmVuKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnIFwnYGAgICB8IChhIHNwYWNlKSBBIGJsYW5rIHNob3VsZCBiZSBsZWZ0IGJlZm9yZSBhIHBvc2l0aXZlIG51bWJlciAob3IgZW1wdHkgICB8XG58ICAgICAgICAgICB8IHN0cmluZykgcHJvZHVjZWQgYnkgYSBzaWduZWQgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgXCcrXCdgYCAgIHwgQSBzaWduIGNoYXJhY3RlciAoYGBcJytcJ2BgIG9yIGBgXCctXCdgYCkgd2lsbCBwcmVjZWRlIHRoZSBjb252ZXJzaW9uICAgICB8XG58ICAgICAgICAgICB8IChvdmVycmlkZXMgYSAic3BhY2UiIGZsYWcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkEgbGVuZ3RoIG1vZGlmaWVyIChgYGhgYCwgYGBsYGAsIG9yIGBgTGBgKSBtYXkgYmUgcHJlc2VudCwgYnV0IGlzXG5pZ25vcmVkIGFzIGl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIFB5dGhvbiAtLSBzbyBlLmcuIGBgJWxkYGAgaXNcbmlkZW50aWNhbCB0byBgYCVkYGAuXG5cblRoZSBjb252ZXJzaW9uIHR5cGVzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBDb252ZXJzaW9uICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCBgYFwnZFwnYGAgICAgICB8IFNpZ25lZCBpbnRlZ2VyIGRlY2ltYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdpXCdgYCAgICAgIHwgU2lnbmVkIGludGVnZXIgZGVjaW1hbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ29cJ2BgICAgICAgfCBTaWduZWQgb2N0YWwgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgxKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwndVwnYGAgICAgICB8IE9ic29sZXRlIHR5cGUgLS0gaXQgaXMgaWRlbnRpY2FsIHRvIGBgXCdkXCdgYC4gICAgICAgICAgfCAoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3hcJ2BgICAgICAgfCBTaWduZWQgaGV4YWRlY2ltYWwgKGxvd2VyY2FzZSkuICAgICAgICAgICAgICAgICAgICAgICB8ICgyKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnWFwnYGAgICAgICB8IFNpZ25lZCBoZXhhZGVjaW1hbCAodXBwZXJjYXNlKS4gICAgICAgICAgICAgICAgICAgICAgIHwgKDIpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdlXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZXhwb25lbnRpYWwgZm9ybWF0IChsb3dlcmNhc2UpLiAgICAgICAgfCAoMykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ0VcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBleHBvbmVudGlhbCBmb3JtYXQgKHVwcGVyY2FzZSkuICAgICAgICB8ICgzKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnZlwnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGRlY2ltYWwgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgIHwgKDMpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdGXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZGVjaW1hbCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgfCAoMykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ2dcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBmb3JtYXQuIFVzZXMgbG93ZXJjYXNlIGV4cG9uZW50aWFsICAgICB8ICg0KSAgICAgfFxufCAgICAgICAgICAgICAgfCBmb3JtYXQgaWYgZXhwb25lbnQgaXMgbGVzcyB0aGFuIC00IG9yIG5vdCBsZXNzIHRoYW4gICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgfCBwcmVjaXNpb24sIGRlY2ltYWwgZm9ybWF0IG90aGVyd2lzZS4gICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnR1wnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGZvcm1hdC4gVXNlcyB1cHBlcmNhc2UgZXhwb25lbnRpYWwgICAgIHwgKDQpICAgICB8XG58ICAgICAgICAgICAgICB8IGZvcm1hdCBpZiBleHBvbmVudCBpcyBsZXNzIHRoYW4gLTQgb3Igbm90IGxlc3MgdGhhbiAgIHwgICAgICAgICB8XG58ICAgICAgICAgICAgICB8IHByZWNpc2lvbiwgZGVjaW1hbCBmb3JtYXQgb3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdjXCdgYCAgICAgIHwgU2luZ2xlIGNoYXJhY3RlciAoYWNjZXB0cyBpbnRlZ2VyIG9yIHNpbmdsZSBjaGFyYWN0ZXIgfCAgICAgICAgIHxcbnwgICAgICAgICAgICAgIHwgc3RyaW5nKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3JcJ2BgICAgICAgfCBTdHJpbmcgKGNvbnZlcnRzIGFueSBQeXRob24gb2JqZWN0IHVzaW5nIGBgcmVwcigpYGApLiB8ICg1KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnc1wnYGAgICAgICB8IFN0cmluZyAoY29udmVydHMgYW55IFB5dGhvbiBvYmplY3QgdXNpbmcgYGBzdHIoKWBgKS4gIHwgKDYpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCclXCdgYCAgICAgIHwgTm8gYXJndW1lbnQgaXMgY29udmVydGVkLCByZXN1bHRzIGluIGEgYGBcJyVcJ2BgICAgICAgICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgfCBjaGFyYWN0ZXIgaW4gdGhlIHJlc3VsdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gVGhlIGFsdGVybmF0ZSBmb3JtIGNhdXNlcyBhIGxlYWRpbmcgemVybyAoYGBcJzBcJ2BgKSB0byBiZSBpbnNlcnRlZFxuICAgYmV0d2VlbiBsZWZ0LWhhbmQgcGFkZGluZyBhbmQgdGhlIGZvcm1hdHRpbmcgb2YgdGhlIG51bWJlciBpZiB0aGVcbiAgIGxlYWRpbmcgY2hhcmFjdGVyIG9mIHRoZSByZXN1bHQgaXMgbm90IGFscmVhZHkgYSB6ZXJvLlxuXG4yLiBUaGUgYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIGEgbGVhZGluZyBgYFwnMHhcJ2BgIG9yIGBgXCcwWFwnYGAgKGRlcGVuZGluZ1xuICAgb24gd2hldGhlciB0aGUgYGBcJ3hcJ2BgIG9yIGBgXCdYXCdgYCBmb3JtYXQgd2FzIHVzZWQpIHRvIGJlIGluc2VydGVkXG4gICBiZXR3ZWVuIGxlZnQtaGFuZCBwYWRkaW5nIGFuZCB0aGUgZm9ybWF0dGluZyBvZiB0aGUgbnVtYmVyIGlmIHRoZVxuICAgbGVhZGluZyBjaGFyYWN0ZXIgb2YgdGhlIHJlc3VsdCBpcyBub3QgYWxyZWFkeSBhIHplcm8uXG5cbjMuIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCB0byBhbHdheXMgY29udGFpbiBhIGRlY2ltYWxcbiAgIHBvaW50LCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuXG5cbiAgIFRoZSBwcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICAgcG9pbnQgYW5kIGRlZmF1bHRzIHRvIDYuXG5cbjQuIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCB0byBhbHdheXMgY29udGFpbiBhIGRlY2ltYWxcbiAgIHBvaW50LCBhbmQgdHJhaWxpbmcgemVyb2VzIGFyZSBub3QgcmVtb3ZlZCBhcyB0aGV5IHdvdWxkIG90aGVyd2lzZVxuICAgYmUuXG5cbiAgIFRoZSBwcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBiZWZvcmVcbiAgIGFuZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBhbmQgZGVmYXVsdHMgdG8gNi5cblxuNS4gVGhlIGBgJXJgYCBjb252ZXJzaW9uIHdhcyBhZGRlZCBpbiBQeXRob24gMi4wLlxuXG4gICBUaGUgcHJlY2lzaW9uIGRldGVybWluZXMgdGhlIG1heGltYWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdXNlZC5cblxuNi4gSWYgdGhlIG9iamVjdCBvciBmb3JtYXQgcHJvdmlkZWQgaXMgYSBgYHVuaWNvZGVgYCBzdHJpbmcsIHRoZVxuICAgcmVzdWx0aW5nIHN0cmluZyB3aWxsIGFsc28gYmUgYGB1bmljb2RlYGAuXG5cbiAgIFRoZSBwcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbWF4aW1hbCBudW1iZXIgb2YgY2hhcmFjdGVycyB1c2VkLlxuXG43LiBTZWUgKipQRVAgMjM3KiouXG5cblNpbmNlIFB5dGhvbiBzdHJpbmdzIGhhdmUgYW4gZXhwbGljaXQgbGVuZ3RoLCBgYCVzYGAgY29udmVyc2lvbnMgZG9cbm5vdCBhc3N1bWUgdGhhdCBgYFwnXFwwXCdgYCBpcyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjc6IGBgJWZgYCBjb252ZXJzaW9ucyBmb3IgbnVtYmVycyB3aG9zZSBhYnNvbHV0ZVxudmFsdWUgaXMgb3ZlciAxZTUwIGFyZSBubyBsb25nZXIgcmVwbGFjZWQgYnkgYGAlZ2BgIGNvbnZlcnNpb25zLlxuXG5BZGRpdGlvbmFsIHN0cmluZyBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIGluIHN0YW5kYXJkIG1vZHVsZXNcbmBgc3RyaW5nYGAgYW5kIGBgcmVgYC5cblxuXG5YUmFuZ2UgVHlwZVxuPT09PT09PT09PT1cblxuVGhlIGBgeHJhbmdlYGAgdHlwZSBpcyBhbiBpbW11dGFibGUgc2VxdWVuY2Ugd2hpY2ggaXMgY29tbW9ubHkgdXNlZFxuZm9yIGxvb3BpbmcuICBUaGUgYWR2YW50YWdlIG9mIHRoZSBgYHhyYW5nZWBgIHR5cGUgaXMgdGhhdCBhblxuYGB4cmFuZ2VgYCBvYmplY3Qgd2lsbCBhbHdheXMgdGFrZSB0aGUgc2FtZSBhbW91bnQgb2YgbWVtb3J5LCBub1xubWF0dGVyIHRoZSBzaXplIG9mIHRoZSByYW5nZSBpdCByZXByZXNlbnRzLiAgVGhlcmUgYXJlIG5vIGNvbnNpc3RlbnRcbnBlcmZvcm1hbmNlIGFkdmFudGFnZXMuXG5cblhSYW5nZSBvYmplY3RzIGhhdmUgdmVyeSBsaXR0bGUgYmVoYXZpb3I6IHRoZXkgb25seSBzdXBwb3J0IGluZGV4aW5nLFxuaXRlcmF0aW9uLCBhbmQgdGhlIGBgbGVuKClgYCBmdW5jdGlvbi5cblxuXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09XG5cbkxpc3Qgb2JqZWN0cyBzdXBwb3J0IGFkZGl0aW9uYWwgb3BlcmF0aW9ucyB0aGF0IGFsbG93IGluLXBsYWNlXG5tb2RpZmljYXRpb24gb2YgdGhlIG9iamVjdC4gT3RoZXIgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyAod2hlbiBhZGRlZFxudG8gdGhlIGxhbmd1YWdlKSBzaG91bGQgYWxzbyBzdXBwb3J0IHRoZXNlIG9wZXJhdGlvbnMuIFN0cmluZ3MgYW5kXG50dXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczogc3VjaCBvYmplY3RzIGNhbm5vdCBiZSBtb2RpZmllZFxub25jZSBjcmVhdGVkLiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMgKHdoZXJlICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0KTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCBgYHNbaV0gPSB4YGAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXSA9IHRgYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqXWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6al0gPSBbXWBgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdID0gdGBgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgYGBzW2k6ajprXWBgIGFyZSB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6ajprXWBgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmo6a11gYCBmcm9tIHRoZSBsaXN0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuYXBwZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSA9ICAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSA9IHhgYCB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmNvdW50KHgpYGAgICAgICAgICAgICAgICAgIHwgcmV0dXJuIG51bWJlciBvZiAqaSpcJ3MgZm9yIHdoaWNoIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2ldID09IHhgYCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbmRleCh4WywgaVssIGpdXSlgYCAgICAgICB8IHJldHVybiBzbWFsbGVzdCAqayogc3VjaCB0aGF0ICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2tdID09IHhgYCBhbmQgYGBpIDw9IGsgPCBqYGAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6aV0gPSBbeF1gYCAgICAgICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucG9wKFtpXSlgYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgeCA9IHNbaV07IGRlbCBzW2ldOyAgICB8ICg2KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJldHVybiB4YGAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmVtb3ZlKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgZGVsIHNbcy5pbmRleCh4KV1gYCAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJldmVyc2UoKWBgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNykgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnNvcnQoW2NtcFssIGtleVssICAgICAgICAgIHwgc29ydCB0aGUgaXRlbXMgb2YgKnMqIGluIHBsYWNlICAgfCAoNykoOCkoOSkoMTApICAgICAgICAgfFxufCByZXZlcnNlXV1dKWBgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyAgcmVwbGFjaW5nLlxuXG4yLiBUaGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBQeXRob24gaGFzIGhpc3RvcmljYWxseSBhY2NlcHRlZCBtdWx0aXBsZVxuICAgcGFyYW1ldGVycyBhbmQgaW1wbGljaXRseSBqb2luZWQgdGhlbSBpbnRvIGEgdHVwbGU7IHRoaXMgbm8gbG9uZ2VyXG4gICB3b3JrcyBpbiBQeXRob24gMi4wLiAgVXNlIG9mIHRoaXMgbWlzZmVhdHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkXG4gICBzaW5jZSBQeXRob24gMS40LlxuXG4zLiAqeCogY2FuIGJlIGFueSBpdGVyYWJsZSBvYmplY3QuXG5cbjQuIFJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLiBXaGVuIGEgbmVnYXRpdmVcbiAgIGluZGV4IGlzIHBhc3NlZCBhcyB0aGUgc2Vjb25kIG9yIHRoaXJkIHBhcmFtZXRlciB0byB0aGUgYGBpbmRleCgpYGBcbiAgIG1ldGhvZCwgdGhlIGxpc3QgbGVuZ3RoIGlzIGFkZGVkLCBhcyBmb3Igc2xpY2UgaW5kaWNlcy4gIElmIGl0IGlzXG4gICBzdGlsbCBuZWdhdGl2ZSwgaXQgaXMgdHJ1bmNhdGVkIHRvIHplcm8sIGFzIGZvciBzbGljZSBpbmRpY2VzLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBQcmV2aW91c2x5LCBgYGluZGV4KClgYCBkaWRuXCd0IGhhdmVcbiAgIGFyZ3VtZW50cyBmb3Igc3BlY2lmeWluZyBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbnMuXG5cbjUuIFdoZW4gYSBuZWdhdGl2ZSBpbmRleCBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciB0byB0aGVcbiAgIGBgaW5zZXJ0KClgYCBtZXRob2QsIHRoZSBsaXN0IGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlXG4gICBpbmRpY2VzLiAgSWYgaXQgaXMgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3JcbiAgIHNsaWNlIGluZGljZXMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksIGFsbCBuZWdhdGl2ZSBpbmRpY2VzIHdlcmVcbiAgIHRydW5jYXRlZCB0byB6ZXJvLlxuXG42LiBUaGUgYGBwb3AoKWBgIG1ldGhvZCBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgbGlzdCBhbmQgYXJyYXkgdHlwZXMuXG4gICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmkqIGRlZmF1bHRzIHRvIGBgLTFgYCwgc28gdGhhdCBieSBkZWZhdWx0XG4gICB0aGUgbGFzdCBpdGVtIGlzIHJlbW92ZWQgYW5kIHJldHVybmVkLlxuXG43LiBUaGUgYGBzb3J0KClgYCBhbmQgYGByZXZlcnNlKClgYCBtZXRob2RzIG1vZGlmeSB0aGUgbGlzdCBpbiBwbGFjZVxuICAgZm9yIGVjb25vbXkgb2Ygc3BhY2Ugd2hlbiBzb3J0aW5nIG9yIHJldmVyc2luZyBhIGxhcmdlIGxpc3QuICBUb1xuICAgcmVtaW5kIHlvdSB0aGF0IHRoZXkgb3BlcmF0ZSBieSBzaWRlIGVmZmVjdCwgdGhleSBkb25cJ3QgcmV0dXJuIHRoZVxuICAgc29ydGVkIG9yIHJldmVyc2VkIGxpc3QuXG5cbjguIFRoZSBgYHNvcnQoKWBgIG1ldGhvZCB0YWtlcyBvcHRpb25hbCBhcmd1bWVudHMgZm9yIGNvbnRyb2xsaW5nIHRoZVxuICAgY29tcGFyaXNvbnMuXG5cbiAgICpjbXAqIHNwZWNpZmllcyBhIGN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIG9mIHR3byBhcmd1bWVudHMgKGxpc3RcbiAgIGl0ZW1zKSB3aGljaCBzaG91bGQgcmV0dXJuIGEgbmVnYXRpdmUsIHplcm8gb3IgcG9zaXRpdmUgbnVtYmVyXG4gICBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlyc3QgYXJndW1lbnQgaXMgY29uc2lkZXJlZCBzbWFsbGVyIHRoYW4sXG4gICBlcXVhbCB0bywgb3IgbGFyZ2VyIHRoYW4gdGhlIHNlY29uZCBhcmd1bWVudDogYGBjbXA9bGFtYmRhIHgseTpcbiAgIGNtcCh4Lmxvd2VyKCksIHkubG93ZXIoKSlgYC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgTm9uZWBgLlxuXG4gICAqa2V5KiBzcGVjaWZpZXMgYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHRvIGV4dHJhY3RcbiAgIGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGxpc3QgZWxlbWVudDogYGBrZXk9c3RyLmxvd2VyYGAuICBUaGVcbiAgIGRlZmF1bHQgdmFsdWUgaXMgYGBOb25lYGAuXG5cbiAgICpyZXZlcnNlKiBpcyBhIGJvb2xlYW4gdmFsdWUuICBJZiBzZXQgdG8gYGBUcnVlYGAsIHRoZW4gdGhlIGxpc3RcbiAgIGVsZW1lbnRzIGFyZSBzb3J0ZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuXG5cbiAgIEluIGdlbmVyYWwsIHRoZSAqa2V5KiBhbmQgKnJldmVyc2UqIGNvbnZlcnNpb24gcHJvY2Vzc2VzIGFyZSBtdWNoXG4gICBmYXN0ZXIgdGhhbiBzcGVjaWZ5aW5nIGFuIGVxdWl2YWxlbnQgKmNtcCogZnVuY3Rpb24uICBUaGlzIGlzXG4gICBiZWNhdXNlICpjbXAqIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgZWFjaCBsaXN0IGVsZW1lbnQgd2hpbGVcbiAgICprZXkqIGFuZCAqcmV2ZXJzZSogdG91Y2ggZWFjaCBlbGVtZW50IG9ubHkgb25jZS4gIFVzZVxuICAgYGBmdW5jdG9vbHMuY21wX3RvX2tleSgpYGAgdG8gY29udmVydCBhbiBvbGQtc3R5bGUgKmNtcCogZnVuY3Rpb25cbiAgIHRvIGEgKmtleSogZnVuY3Rpb24uXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIGBgTm9uZWBgIGFzIGFuIGVxdWl2YWxlbnQgdG9cbiAgIG9taXR0aW5nICpjbXAqIHdhcyBhZGRlZC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgKmtleSogYW5kICpyZXZlcnNlKiB3YXMgYWRkZWQuXG5cbjkuIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMywgdGhlIGBgc29ydCgpYGAgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmVcbiAgIHN0YWJsZS4gIEEgc29ydCBpcyBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZVxuICAgcmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWxcbiAgIGZvciBzb3J0aW5nIGluIG11bHRpcGxlIHBhc3NlcyAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCxcbiAgIHRoZW4gYnkgc2FsYXJ5IGdyYWRlKS5cblxuMTAuICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogV2hpbGUgYSBsaXN0IGlzIGJlaW5nIHNvcnRlZCxcbiAgICB0aGUgZWZmZWN0IG9mIGF0dGVtcHRpbmcgdG8gbXV0YXRlLCBvciBldmVuIGluc3BlY3QsIHRoZSBsaXN0IGlzXG4gICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIDIuMyBhbmQgbmV3ZXIgbWFrZXMgdGhlXG4gICAgbGlzdCBhcHBlYXIgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCBpZlxuICAgIGl0IGNhbiBkZXRlY3QgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbiBtdXRhdGVkIGR1cmluZyBhIHNvcnQuXG4nLAorICd0eXBlc3NlcS1tdXRhYmxlJzogdSJcbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbioqKioqKioqKioqKioqKioqKioqKipcblxuTGlzdCBvYmplY3RzIHN1cHBvcnQgYWRkaXRpb25hbCBvcGVyYXRpb25zIHRoYXQgYWxsb3cgaW4tcGxhY2Vcbm1vZGlmaWNhdGlvbiBvZiB0aGUgb2JqZWN0LiBPdGhlciBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzICh3aGVuIGFkZGVkXG50byB0aGUgbGFuZ3VhZ2UpIHNob3VsZCBhbHNvIHN1cHBvcnQgdGhlc2Ugb3BlcmF0aW9ucy4gU3RyaW5ncyBhbmRcbnR1cGxlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGVzOiBzdWNoIG9iamVjdHMgY2Fubm90IGJlIG1vZGlmaWVkXG5vbmNlIGNyZWF0ZWQuIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcyAod2hlcmUgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QpOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rXG58IGBgc1tpXSA9IHhgYCAgICAgICAgICAgICAgICAgICB8IGl0ZW0gKmkqIG9mICpzKiBpcyByZXBsYWNlZCBieSAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgc1tpOmpdID0gdGBgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhlIGNvbnRlbnRzIG9mIHRoZSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpdGVyYWJsZSAqdCogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmpdYGAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbaTpqXSA9IFtdYGAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgc1tpOmo6a10gPSB0YGAgICAgICAgICAgICAgICB8IHRoZSBlbGVtZW50cyBvZiBgYHNbaTpqOmtdYGAgYXJlIHwgKDEpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhvc2Ugb2YgKnQqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqOmtdYGAgICAgICAgICAgICAgICB8IHJlbW92ZXMgdGhlIGVsZW1lbnRzIG9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2k6ajprXWBgIGZyb20gdGhlIGxpc3QgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5hcHBlbmQoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2xlbihzKTpsZW4ocyldID0gICAgIHwgKDIpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5leHRlbmQoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2xlbihzKTpsZW4ocyldID0geGBgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY291bnQoeClgYCAgICAgICAgICAgICAgICAgfCByZXR1cm4gbnVtYmVyIG9mICppKidzIGZvciB3aGljaCB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpXSA9PSB4YGAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5kZXgoeFssIGlbLCBqXV0pYGAgICAgICAgfCByZXR1cm4gc21hbGxlc3QgKmsqIHN1Y2ggdGhhdCAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1trXSA9PSB4YGAgYW5kIGBgaSA8PSBrIDwgamBgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5zZXJ0KGksIHgpYGAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmldID0gW3hdYGAgICAgICAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHggPSBzW2ldOyBkZWwgc1tpXTsgICAgfCAoNikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXR1cm4geGBgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYGRlbCBzW3MuaW5kZXgoeCldYGAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5yZXZlcnNlKClgYCAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDcpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5zb3J0KFtjbXBbLCBrZXlbLCAgICAgICAgICB8IHNvcnQgdGhlIGl0ZW1zIG9mICpzKiBpbiBwbGFjZSAgIHwgKDcpKDgpKDkpKDEwKSAgICAgICAgIHxcbnwgcmV2ZXJzZV1dXSlgYCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgIHJlcGxhY2luZy5cblxuMi4gVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIGhhcyBoaXN0b3JpY2FsbHkgYWNjZXB0ZWQgbXVsdGlwbGVcbiAgIHBhcmFtZXRlcnMgYW5kIGltcGxpY2l0bHkgam9pbmVkIHRoZW0gaW50byBhIHR1cGxlOyB0aGlzIG5vIGxvbmdlclxuICAgd29ya3MgaW4gUHl0aG9uIDIuMC4gIFVzZSBvZiB0aGlzIG1pc2ZlYXR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZFxuICAgc2luY2UgUHl0aG9uIDEuNC5cblxuMy4gKngqIGNhbiBiZSBhbnkgaXRlcmFibGUgb2JqZWN0LlxuXG40LiBSYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi4gV2hlbiBhIG5lZ2F0aXZlXG4gICBpbmRleCBpcyBwYXNzZWQgYXMgdGhlIHNlY29uZCBvciB0aGlyZCBwYXJhbWV0ZXIgdG8gdGhlIGBgaW5kZXgoKWBgXG4gICBtZXRob2QsIHRoZSBsaXN0IGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlIGluZGljZXMuICBJZiBpdCBpc1xuICAgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3Igc2xpY2UgaW5kaWNlcy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogUHJldmlvdXNseSwgYGBpbmRleCgpYGAgZGlkbid0IGhhdmVcbiAgIGFyZ3VtZW50cyBmb3Igc3BlY2lmeWluZyBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbnMuXG5cbjUuIFdoZW4gYSBuZWdhdGl2ZSBpbmRleCBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciB0byB0aGVcbiAgIGBgaW5zZXJ0KClgYCBtZXRob2QsIHRoZSBsaXN0IGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlXG4gICBpbmRpY2VzLiAgSWYgaXQgaXMgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3JcbiAgIHNsaWNlIGluZGljZXMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksIGFsbCBuZWdhdGl2ZSBpbmRpY2VzIHdlcmVcbiAgIHRydW5jYXRlZCB0byB6ZXJvLlxuXG42LiBUaGUgYGBwb3AoKWBgIG1ldGhvZCBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgbGlzdCBhbmQgYXJyYXkgdHlwZXMuXG4gICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmkqIGRlZmF1bHRzIHRvIGBgLTFgYCwgc28gdGhhdCBieSBkZWZhdWx0XG4gICB0aGUgbGFzdCBpdGVtIGlzIHJlbW92ZWQgYW5kIHJldHVybmVkLlxuXG43LiBUaGUgYGBzb3J0KClgYCBhbmQgYGByZXZlcnNlKClgYCBtZXRob2RzIG1vZGlmeSB0aGUgbGlzdCBpbiBwbGFjZVxuICAgZm9yIGVjb25vbXkgb2Ygc3BhY2Ugd2hlbiBzb3J0aW5nIG9yIHJldmVyc2luZyBhIGxhcmdlIGxpc3QuICBUb1xuICAgcmVtaW5kIHlvdSB0aGF0IHRoZXkgb3BlcmF0ZSBieSBzaWRlIGVmZmVjdCwgdGhleSBkb24ndCByZXR1cm4gdGhlXG4gICBzb3J0ZWQgb3IgcmV2ZXJzZWQgbGlzdC5cblxuOC4gVGhlIGBgc29ydCgpYGAgbWV0aG9kIHRha2VzIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgY29udHJvbGxpbmcgdGhlXG4gICBjb21wYXJpc29ucy5cblxuICAgKmNtcCogc3BlY2lmaWVzIGEgY3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gb2YgdHdvIGFyZ3VtZW50cyAobGlzdFxuICAgaXRlbXMpIHdoaWNoIHNob3VsZCByZXR1cm4gYSBuZWdhdGl2ZSwgemVybyBvciBwb3NpdGl2ZSBudW1iZXJcbiAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIHNtYWxsZXIgdGhhbixcbiAgIGVxdWFsIHRvLCBvciBsYXJnZXIgdGhhbiB0aGUgc2Vjb25kIGFyZ3VtZW50OiBgYGNtcD1sYW1iZGEgeCx5OlxuICAgY21wKHgubG93ZXIoKSwgeS5sb3dlcigpKWBgLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGBOb25lYGAuXG5cbiAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG8gZXh0cmFjdFxuICAgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50OiBgYGtleT1zdHIubG93ZXJgYC4gIFRoZVxuICAgZGVmYXVsdCB2YWx1ZSBpcyBgYE5vbmVgYC5cblxuICAgKnJldmVyc2UqIGlzIGEgYm9vbGVhbiB2YWx1ZS4gIElmIHNldCB0byBgYFRydWVgYCwgdGhlbiB0aGUgbGlzdFxuICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgSW4gZ2VuZXJhbCwgdGhlICprZXkqIGFuZCAqcmV2ZXJzZSogY29udmVyc2lvbiBwcm9jZXNzZXMgYXJlIG11Y2hcbiAgIGZhc3RlciB0aGFuIHNwZWNpZnlpbmcgYW4gZXF1aXZhbGVudCAqY21wKiBmdW5jdGlvbi4gIFRoaXMgaXNcbiAgIGJlY2F1c2UgKmNtcCogaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBlYWNoIGxpc3QgZWxlbWVudCB3aGlsZVxuICAgKmtleSogYW5kICpyZXZlcnNlKiB0b3VjaCBlYWNoIGVsZW1lbnQgb25seSBvbmNlLiAgVXNlXG4gICBgYGZ1bmN0b29scy5jbXBfdG9fa2V5KClgYCB0byBjb252ZXJ0IGFuIG9sZC1zdHlsZSAqY21wKiBmdW5jdGlvblxuICAgdG8gYSAqa2V5KiBmdW5jdGlvbi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogU3VwcG9ydCBmb3IgYGBOb25lYGAgYXMgYW4gZXF1aXZhbGVudCB0b1xuICAgb21pdHRpbmcgKmNtcCogd2FzIGFkZGVkLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBTdXBwb3J0IGZvciAqa2V5KiBhbmQgKnJldmVyc2UqIHdhcyBhZGRlZC5cblxuOS4gU3RhcnRpbmcgd2l0aCBQeXRob24gMi4zLCB0aGUgYGBzb3J0KClgYCBtZXRob2QgaXMgZ3VhcmFudGVlZCB0byBiZVxuICAgc3RhYmxlLiAgQSBzb3J0IGlzIHN0YWJsZSBpZiBpdCBndWFyYW50ZWVzIG5vdCB0byBjaGFuZ2UgdGhlXG4gICByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0IGNvbXBhcmUgZXF1YWwgLS0tIHRoaXMgaXMgaGVscGZ1bFxuICAgZm9yIHNvcnRpbmcgaW4gbXVsdGlwbGUgcGFzc2VzIChmb3IgZXhhbXBsZSwgc29ydCBieSBkZXBhcnRtZW50LFxuICAgdGhlbiBieSBzYWxhcnkgZ3JhZGUpLlxuXG4xMC4gKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgIHRoZSBlZmZlY3Qgb2YgYXR0ZW1wdGluZyB0byBtdXRhdGUsIG9yIGV2ZW4gaW5zcGVjdCwgdGhlIGxpc3QgaXNcbiAgICB1bmRlZmluZWQuICBUaGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBQeXRob24gMi4zIGFuZCBuZXdlciBtYWtlcyB0aGVcbiAgICBsaXN0IGFwcGVhciBlbXB0eSBmb3IgdGhlIGR1cmF0aW9uLCBhbmQgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIGlmXG4gICAgaXQgY2FuIGRldGVjdCB0aGF0IHRoZSBsaXN0IGhhcyBiZWVuIG11dGF0ZWQgZHVyaW5nIGEgc29ydC5cbiIsCiAgJ3VuYXJ5JzogdSdcblVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkFsbCB1bmFyeSBhcml0aG1ldGljIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eTpcblxuICAgdV9leHByIDo6PSBwb3dlciB8ICItIiB1X2V4cHIgfCAiKyIgdV9leHByIHwgIn4iIHVfZXhwclxuXG5UaGUgdW5hcnkgYGAtYGAgKG1pbnVzKSBvcGVyYXRvciB5aWVsZHMgdGhlIG5lZ2F0aW9uIG9mIGl0cyBudW1lcmljXG5hcmd1bWVudC5cblxuVGhlIHVuYXJ5IGBgK2BgIChwbHVzKSBvcGVyYXRvciB5aWVsZHMgaXRzIG51bWVyaWMgYXJndW1lbnQgdW5jaGFuZ2VkLlxuXG5UaGUgdW5hcnkgYGB+YGAgKGludmVydCkgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiBpdHNcbnBsYWluIG9yIGxvbmcgaW50ZWdlciBhcmd1bWVudC4gIFRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiBgYHhgYCBpc1xuZGVmaW5lZCBhcyBgYC0oeCsxKWBgLiAgSXQgb25seSBhcHBsaWVzIHRvIGludGVncmFsIG51bWJlcnMuXG5cbkluIGFsbCB0aHJlZSBjYXNlcywgaWYgdGhlIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgdGhlIHByb3BlciB0eXBlLCBhXG5gYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4nLAogICd3aGlsZSc6IHUnXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzXG5leGVjdXRlZCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuZ29lcyBiYWNrIHRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG4nLAotICd3aXRoJzogdSdcblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuTmV3IGluIHZlcnNpb24gMi41LlxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uXG5gYHRyeWBgLi4uYGBleGNlcHRgYC4uLmBgZmluYWxseWBgIHVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZFxuZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XSAiOiIgc3VpdGVcblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IHByb2NlZWRzIGFzIGZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZW50ZXJfXygpYGAgbWV0aG9kIGlzIGludm9rZWQuXG5cbjMuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tIGBgX19lbnRlcl9fKClgYCBpcyBhc3NpZ25lZCB0byBpdC5cblxuICAgTm90ZTogVGhlIGBgd2l0aGBgIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlIGBgX19lbnRlcl9fKClgYFxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuIGBgX19leGl0X18oKWBgIHdpbGwgYWx3YXlzXG4gICAgIGJlIGNhbGxlZC4gVGh1cywgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXNzaWdubWVudCB0byB0aGVcbiAgICAgdGFyZ2V0IGxpc3QsIGl0IHdpbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBhbiBlcnJvciBvY2N1cnJpbmdcbiAgICAgd2l0aGluIHRoZSBzdWl0ZSB3b3VsZCBiZS4gU2VlIHN0ZXAgNSBiZWxvdy5cblxuNC4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLlxuXG41LiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLiBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGBgX19leGl0X18oKWBgLiBPdGhlcndpc2UsXG4gICB0aHJlZSBgYE5vbmVgYCBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgYGBfX2V4aXRfXygpYGAgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgcmVyYWlzZWQuIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXNcbiAgIHN1cHByZXNzZWQsIGFuZCBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmdcbiAgIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gZXhjZXB0aW9uLCB0aGVcbiAgIHJldHVybiB2YWx1ZSBmcm9tIGBgX19leGl0X18oKWBgIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbk5vdGU6IEluIFB5dGhvbiAyLjUsIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgb25seSBhbGxvd2VkIHdoZW4gdGhlXG4gIGBgd2l0aF9zdGF0ZW1lbnRgYCBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQuICBJdCBpcyBhbHdheXMgZW5hYmxlZFxuICBpbiBQeXRob24gMi42LlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cbicsCisgJ3dpdGgnOiB1J1xuVGhlIGBgd2l0aGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG5OZXcgaW4gdmVyc2lvbiAyLjUuXG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoXG5tZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uICpXaXRoIFN0YXRlbWVudFxuQ29udGV4dCBNYW5hZ2VycyopLiBUaGlzIGFsbG93cyBjb21tb25cbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgdXNhZ2UgcGF0dGVybnMgdG8gYmUgZW5jYXBzdWxhdGVkXG5mb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgd2l0aCBvbmUgIml0ZW0iIHByb2NlZWRzIGFzXG5mb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLlxuXG40LiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIGBgd2l0aGBgIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSBgYF9fZW50ZXJfXygpYGAgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSBgYF9fZW50ZXJfXygpYGBcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiBgYF9fZXhpdF9fKClgYCB3aWxsIGFsd2F5c1xuICAgICBiZSBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBtZXRob2QgaXMgaW52b2tlZC4gSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBgYF9fZXhpdF9fKClgYC4gT3RoZXJ3aXNlLFxuICAgdGhyZWUgYGBOb25lYGAgYXJndW1lbnRzIGFyZSBzdXBwbGllZC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSByZXR1cm4gdmFsdWVcbiAgIGZyb20gdGhlIGBgX19leGl0X18oKWBgIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXNcbiAgIHJlcmFpc2VkLiBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICBzdXBwcmVzc2VkLCBhbmQgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nXG4gICB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSBgYF9fZXhpdF9fKClgYCBpcyBpZ25vcmVkLCBhbmQgZXhlY3V0aW9uIHByb2NlZWRzXG4gICBhdCB0aGUgbm9ybWFsIGxvY2F0aW9uIGZvciB0aGUga2luZCBvZiBleGl0IHRoYXQgd2FzIHRha2VuLlxuXG5XaXRoIG1vcmUgdGhhbiBvbmUgaXRlbSwgdGhlIGNvbnRleHQgbWFuYWdlcnMgYXJlIHByb2Nlc3NlZCBhcyBpZlxubXVsdGlwbGUgYGB3aXRoYGAgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbk5vdGU6IEluIFB5dGhvbiAyLjUsIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgb25seSBhbGxvd2VkIHdoZW4gdGhlXG4gIGBgd2l0aF9zdGF0ZW1lbnRgYCBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQuICBJdCBpcyBhbHdheXMgZW5hYmxlZFxuICBpbiBQeXRob24gMi42LlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMi43OiBTdXBwb3J0IGZvciBtdWx0aXBsZSBjb250ZXh0IGV4cHJlc3Npb25zLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cbicsCiAgJ3lpZWxkJzogdSdcblRoZSBgYHlpZWxkYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICB5aWVsZF9zdG10IDo6PSB5aWVsZF9leHByZXNzaW9uXG5cblRoZSBgYHlpZWxkYGAgc3RhdGVtZW50IGlzIG9ubHkgdXNlZCB3aGVuIGRlZmluaW5nIGEgZ2VuZXJhdG9yXG5mdW5jdGlvbiwgYW5kIGlzIG9ubHkgdXNlZCBpbiB0aGUgYm9keSBvZiB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLlxuVXNpbmcgYSBgYHlpZWxkYGAgc3RhdGVtZW50IGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBzdWZmaWNpZW50IHRvXG5jYXVzZSB0aGF0IGRlZmluaXRpb24gdG8gY3JlYXRlIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uIGluc3RlYWQgb2YgYVxubm9ybWFsIGZ1bmN0aW9uLlxuXG5XaGVuIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgcmV0dXJucyBhbiBpdGVyYXRvciBrbm93biBhcyBhXG5nZW5lcmF0b3IgaXRlcmF0b3IsIG9yIG1vcmUgY29tbW9ubHksIGEgZ2VuZXJhdG9yLiAgVGhlIGJvZHkgb2YgdGhlXG5nZW5lcmF0b3IgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYnkgY2FsbGluZyB0aGUgZ2VuZXJhdG9yXCdzIGBgbmV4dCgpYGBcbm1ldGhvZCByZXBlYXRlZGx5IHVudGlsIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uXG5cbldoZW4gYSBgYHlpZWxkYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkLCB0aGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRvciBpc1xuZnJvemVuIGFuZCB0aGUgdmFsdWUgb2YgKipleHByZXNzaW9uX2xpc3QqKiBpcyByZXR1cm5lZCB0b1xuYGBuZXh0KClgYFwncyBjYWxsZXIuICBCeSAiZnJvemVuIiB3ZSBtZWFuIHRoYXQgYWxsIGxvY2FsIHN0YXRlIGlzXG5yZXRhaW5lZCwgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGJpbmRpbmdzIG9mIGxvY2FsIHZhcmlhYmxlcywgdGhlXG5pbnN0cnVjdGlvbiBwb2ludGVyLCBhbmQgdGhlIGludGVybmFsIGV2YWx1YXRpb24gc3RhY2s6IGVub3VnaFxuaW5mb3JtYXRpb24gaXMgc2F2ZWQgc28gdGhhdCB0aGUgbmV4dCB0aW1lIGBgbmV4dCgpYGAgaXMgaW52b2tlZCwgdGhlXG5mdW5jdGlvbiBjYW4gcHJvY2VlZCBleGFjdGx5IGFzIGlmIHRoZSBgYHlpZWxkYGAgc3RhdGVtZW50IHdlcmUganVzdFxuYW5vdGhlciBleHRlcm5hbCBjYWxsLlxuXG5BcyBvZiBQeXRob24gdmVyc2lvbiAyLjUsIHRoZSBgYHlpZWxkYGAgc3RhdGVtZW50IGlzIG5vdyBhbGxvd2VkIGluXG50aGUgYGB0cnlgYCBjbGF1c2Ugb2YgYSBgYHRyeWBgIC4uLiAgYGBmaW5hbGx5YGAgY29uc3RydWN0LiAgSWYgdGhlXG5nZW5lcmF0b3IgaXMgbm90IHJlc3VtZWQgYmVmb3JlIGl0IGlzIGZpbmFsaXplZCAoYnkgcmVhY2hpbmcgYSB6ZXJvXG5yZWZlcmVuY2UgY291bnQgb3IgYnkgYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWQpLCB0aGUgZ2VuZXJhdG9yLVxuaXRlcmF0b3JcJ3MgYGBjbG9zZSgpYGAgbWV0aG9kIHdpbGwgYmUgY2FsbGVkLCBhbGxvd2luZyBhbnkgcGVuZGluZ1xuYGBmaW5hbGx5YGAgY2xhdXNlcyB0byBleGVjdXRlLlxuXG5Ob3RlOiBJbiBQeXRob24gMi4yLCB0aGUgYGB5aWVsZGBgIHN0YXRlbWVudCB3YXMgb25seSBhbGxvd2VkIHdoZW4gdGhlXG4gIGBgZ2VuZXJhdG9yc2BgIGZlYXR1cmUgaGFzIGJlZW4gZW5hYmxlZC4gIFRoaXMgYGBfX2Z1dHVyZV9fYGAgaW1wb3J0XG4gIHN0YXRlbWVudCB3YXMgdXNlZCB0byBlbmFibGUgdGhlIGZlYXR1cmU6XG5cbiAgICAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBnZW5lcmF0b3JzXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMjU1KiogLSBTaW1wbGUgR2VuZXJhdG9yc1xuICAgICAgVGhlIHByb3Bvc2FsIGZvciBhZGRpbmcgZ2VuZXJhdG9ycyBhbmQgdGhlIGBgeWllbGRgYCBzdGF0ZW1lbnRcbiAgICAgIHRvIFB5dGhvbi5cblxuICAgKipQRVAgMDM0MioqIC0gQ29yb3V0aW5lcyB2aWEgRW5oYW5jZWQgR2VuZXJhdG9yc1xuICAgICAgVGhlIHByb3Bvc2FsIHRoYXQsIGFtb25nIG90aGVyIGdlbmVyYXRvciBlbmhhbmNlbWVudHMsIHByb3Bvc2VkXG4gICAgICBhbGxvd2luZyBgYHlpZWxkYGAgdG8gYXBwZWFyIGluc2lkZSBhIGBgdHJ5YGAgLi4uIGBgZmluYWxseWBgXG4gICAgICBibG9jay5cbid9CmRpZmYgLS1naXQgYS9MaWIvcmFuZG9tLnB5IGIvTGliL3JhbmRvbS5weQppbmRleCA1NjhkZTg4Li4wMWUxNDIwIDEwMDY0NAotLS0gYS9MaWIvcmFuZG9tLnB5CisrKyBiL0xpYi9yYW5kb20ucHkKQEAgLTQ2LDYgKzQ2LDcgQEAKIGZyb20gbWF0aCBpbXBvcnQgc3FydCBhcyBfc3FydCwgYWNvcyBhcyBfYWNvcywgY29zIGFzIF9jb3MsIHNpbiBhcyBfc2luCiBmcm9tIG9zIGltcG9ydCB1cmFuZG9tIGFzIF91cmFuZG9tCiBmcm9tIGJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5IGFzIF9oZXhsaWZ5CitpbXBvcnQgaGFzaGxpYiBhcyBfaGFzaGxpYgogCiBfX2FsbF9fID0gWyJSYW5kb20iLCJzZWVkIiwicmFuZG9tIiwidW5pZm9ybSIsInJhbmRpbnQiLCJjaG9pY2UiLCJzYW1wbGUiLAogICAgICAgICAgICAicmFuZHJhbmdlIiwic2h1ZmZsZSIsIm5vcm1hbHZhcmlhdGUiLCJsb2dub3JtdmFyaWF0ZSIsCkBAIC0xNDEsNiArMTQyLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYW5kb20uc2V0c3RhdGUoKSBvZiB2ZXJzaW9uICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBzZWxmLlZFUlNJT04pKQogCisgICAgZGVmIGp1bXBhaGVhZChzZWxmLCBuKToKKyAgICAgICAgIiIiQ2hhbmdlIHRoZSBpbnRlcm5hbCBzdGF0ZSB0byBvbmUgdGhhdCBpcyBsaWtlbHkgZmFyIGF3YXkKKyAgICAgICAgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS4gIFRoaXMgbWV0aG9kIHdpbGwgbm90IGJlIGluIFB5My54LAorICAgICAgICBzbyBpdCBpcyBiZXR0ZXIgdG8gc2ltcGx5IHJlc2VlZC4KKyAgICAgICAgIiIiCisgICAgICAgICMgVGhlIHN1cGVyLmp1bXBhaGVhZCgpIG1ldGhvZCB1c2VzIHNodWZmbGluZyB0byBjaGFuZ2Ugc3RhdGUsCisgICAgICAgICMgc28gaXQgbmVlZHMgYSBsYXJnZSBhbmQgImludGVyZXN0aW5nIiBuIHRvIHdvcmsgd2l0aC4gIEhlcmUsCisgICAgICAgICMgd2UgdXNlIGhhc2hpbmcgdG8gY3JlYXRlIGEgbGFyZ2UgbiBmb3IgdGhlIHNodWZmbGUuCisgICAgICAgIHMgPSByZXByKG4pICsgcmVwcihzZWxmLmdldHN0YXRlKCkpCisgICAgICAgIG4gPSBpbnQoX2hhc2hsaWIubmV3KCdzaGE1MTInLCBzKS5oZXhkaWdlc3QoKSwgMTYpCisgICAgICAgIHN1cGVyKFJhbmRvbSwgc2VsZikuanVtcGFoZWFkKG4pCisKICMjIC0tLS0gTWV0aG9kcyBiZWxvdyB0aGlzIHBvaW50IGRvIG5vdCBuZWVkIHRvIGJlIG92ZXJyaWRkZW4gd2hlbgogIyMgLS0tLSBzdWJjbGFzc2luZyBmb3IgdGhlIHB1cnBvc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgY29yZSBnZW5lcmF0b3IuCiAKQEAgLTI5MiwxNSArMzA1LDYgQEAKICAgICAgICAgbGFyZ2UgcG9wdWxhdGlvbjogICBzYW1wbGUoeHJhbmdlKDEwMDAwMDAwKSwgNjApCiAgICAgICAgICIiIgogCi0gICAgICAgICMgWFhYIEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIHNheXMgYHBvcHVsYXRpb25gIGlzICJhIHNlcXVlbmNlIiwKLSAgICAgICAgIyBYWFggYXR0ZW1wdHMgYXJlIG1hZGUgdG8gY2F0ZXIgdG8gYW55IGl0ZXJhYmxlIHdpdGggYSBfX2xlbl9fCi0gICAgICAgICMgWFhYIG1ldGhvZC4gIFRoaXMgaGFzIGhhZCBtaXhlZCBzdWNjZXNzLiAgRXhhbXBsZXMgZnJvbSBib3RoCi0gICAgICAgICMgWFhYIHNpZGVzOiAgc2V0cyB3b3JrIGZpbmUsIGFuZCBzaG91bGQgYmVjb21lIG9mZmljaWFsbHkgc3VwcG9ydGVkOwotICAgICAgICAjIFhYWCBkaWN0cyBhcmUgbXVjaCBoYXJkZXIsIGFuZCBoYXZlIGZhaWxlZCBpbiB2YXJpb3VzIHN1YnRsZQotICAgICAgICAjIFhYWCB3YXlzIGFjcm9zcyBhdHRlbXB0cy4gIFN1cHBvcnQgZm9yIG1hcHBpbmcgdHlwZXMgc2hvdWxkIHByb2JhYmx5Ci0gICAgICAgICMgWFhYIGJlIGRyb3BwZWQgKGFuZCB1c2VycyBzaG91bGQgcGFzcyBtYXBwaW5nLmtleXMoKSBvciAudmFsdWVzKCkKLSAgICAgICAgIyBYWFggZXhwbGljaXRseSkuCi0KICAgICAgICAgIyBTYW1wbGluZyB3aXRob3V0IHJlcGxhY2VtZW50IGVudGFpbHMgdHJhY2tpbmcgZWl0aGVyIHBvdGVudGlhbAogICAgICAgICAjIHNlbGVjdGlvbnMgKHRoZSBwb29sKSBpbiBhIGxpc3Qgb3IgcHJldmlvdXMgc2VsZWN0aW9ucyBpbiBhIHNldC4KIApkaWZmIC0tZ2l0IGEvTGliL3JlLnB5IGIvTGliL3JlLnB5CmluZGV4IDJjZjcxMzIuLjk1NWI2YjUgMTAwNjQ0Ci0tLSBhL0xpYi9yZS5weQorKysgYi9MaWIvcmUucHkKQEAgLTE0MSwxNiArMTQxLDE2IEBACiAgICAgYSBtYXRjaCBvYmplY3QsIG9yIE5vbmUgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLiIiIgogICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykuc2VhcmNoKHN0cmluZykKIAotZGVmIHN1YihwYXR0ZXJuLCByZXBsLCBzdHJpbmcsIGNvdW50PTApOgorZGVmIHN1YihwYXR0ZXJuLCByZXBsLCBzdHJpbmcsIGNvdW50PTAsIGZsYWdzPTApOgogICAgICIiIlJldHVybiB0aGUgc3RyaW5nIG9idGFpbmVkIGJ5IHJlcGxhY2luZyB0aGUgbGVmdG1vc3QKICAgICBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2YgdGhlIHBhdHRlcm4gaW4gc3RyaW5nIGJ5IHRoZQogICAgIHJlcGxhY2VtZW50IHJlcGwuICByZXBsIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYSBjYWxsYWJsZTsKICAgICBpZiBhIHN0cmluZywgYmFja3NsYXNoIGVzY2FwZXMgaW4gaXQgYXJlIHByb2Nlc3NlZC4gIElmIGl0IGlzCiAgICAgYSBjYWxsYWJsZSwgaXQncyBwYXNzZWQgdGhlIG1hdGNoIG9iamVjdCBhbmQgbXVzdCByZXR1cm4KICAgICBhIHJlcGxhY2VtZW50IHN0cmluZyB0byBiZSB1c2VkLiIiIgotICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCAwKS5zdWIocmVwbCwgc3RyaW5nLCBjb3VudCkKKyAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgZmxhZ3MpLnN1YihyZXBsLCBzdHJpbmcsIGNvdW50KQogCi1kZWYgc3VibihwYXR0ZXJuLCByZXBsLCBzdHJpbmcsIGNvdW50PTApOgorZGVmIHN1Ym4ocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wLCBmbGFncz0wKToKICAgICAiIiJSZXR1cm4gYSAyLXR1cGxlIGNvbnRhaW5pbmcgKG5ld19zdHJpbmcsIG51bWJlcikuCiAgICAgbmV3X3N0cmluZyBpcyB0aGUgc3RyaW5nIG9idGFpbmVkIGJ5IHJlcGxhY2luZyB0aGUgbGVmdG1vc3QKICAgICBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2YgdGhlIHBhdHRlcm4gaW4gdGhlIHNvdXJjZQpAQCAtMTU5LDEyICsxNTksMTIgQEAKICAgICBjYWxsYWJsZTsgaWYgYSBzdHJpbmcsIGJhY2tzbGFzaCBlc2NhcGVzIGluIGl0IGFyZSBwcm9jZXNzZWQuCiAgICAgSWYgaXQgaXMgYSBjYWxsYWJsZSwgaXQncyBwYXNzZWQgdGhlIG1hdGNoIG9iamVjdCBhbmQgbXVzdAogICAgIHJldHVybiBhIHJlcGxhY2VtZW50IHN0cmluZyB0byBiZSB1c2VkLiIiIgotICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCAwKS5zdWJuKHJlcGwsIHN0cmluZywgY291bnQpCisgICAgcmV0dXJuIF9jb21waWxlKHBhdHRlcm4sIGZsYWdzKS5zdWJuKHJlcGwsIHN0cmluZywgY291bnQpCiAKLWRlZiBzcGxpdChwYXR0ZXJuLCBzdHJpbmcsIG1heHNwbGl0PTApOgorZGVmIHNwbGl0KHBhdHRlcm4sIHN0cmluZywgbWF4c3BsaXQ9MCwgZmxhZ3M9MCk6CiAgICAgIiIiU3BsaXQgdGhlIHNvdXJjZSBzdHJpbmcgYnkgdGhlIG9jY3VycmVuY2VzIG9mIHRoZSBwYXR0ZXJuLAogICAgIHJldHVybmluZyBhIGxpc3QgY29udGFpbmluZyB0aGUgcmVzdWx0aW5nIHN1YnN0cmluZ3MuIiIiCi0gICAgcmV0dXJuIF9jb21waWxlKHBhdHRlcm4sIDApLnNwbGl0KHN0cmluZywgbWF4c3BsaXQpCisgICAgcmV0dXJuIF9jb21waWxlKHBhdHRlcm4sIGZsYWdzKS5zcGxpdChzdHJpbmcsIG1heHNwbGl0KQogCiBkZWYgZmluZGFsbChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApOgogICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYWxsIG5vbi1vdmVybGFwcGluZyBtYXRjaGVzIGluIHRoZSBzdHJpbmcuCmRpZmYgLS1naXQgYS9MaWIvcmV4ZWMucHkgYi9MaWIvcmV4ZWMucHkKaW5kZXggMjJiMWJiMi4uNzQ0NjE1MSAxMDA2NDQKLS0tIGEvTGliL3JleGVjLnB5CisrKyBiL0xpYi9yZXhlYy5weQpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgICAgICAgIG0ub3BlbiA9IG0uZmlsZSA9IHNlbGYucl9vcGVuCiAKICAgICBkZWYgbWFrZV9tYWluKHNlbGYpOgotICAgICAgICBtID0gc2VsZi5hZGRfbW9kdWxlKCdfX21haW5fXycpCisgICAgICAgIHNlbGYuYWRkX21vZHVsZSgnX19tYWluX18nKQogCiAgICAgZGVmIG1ha2Vfb3NuYW1lKHNlbGYpOgogICAgICAgICBvc25hbWUgPSBvcy5uYW1lCmRpZmYgLS1naXQgYS9MaWIvcm9ib3RwYXJzZXIucHkgYi9MaWIvcm9ib3RwYXJzZXIucHkKaW5kZXggNzI2ODU0Yi4uMTcyMjg2MyAxMDA2NDQKLS0tIGEvTGliL3JvYm90cGFyc2VyLnB5CisrKyBiL0xpYi9yb2JvdHBhcnNlci5weQpAQCAtMTMzLDcgKzEzMywxMiBAQAogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgIyBzZWFyY2ggZm9yIGdpdmVuIHVzZXIgYWdlbnQgbWF0Y2hlcwogICAgICAgICAjIHRoZSBmaXJzdCBtYXRjaCBjb3VudHMKLSAgICAgICAgdXJsID0gdXJsbGliLnF1b3RlKHVybHBhcnNlLnVybHBhcnNlKHVybGxpYi51bnF1b3RlKHVybCkpWzJdKSBvciAiLyIKKyAgICAgICAgcGFyc2VkX3VybCA9IHVybHBhcnNlLnVybHBhcnNlKHVybGxpYi51bnF1b3RlKHVybCkpCisgICAgICAgIHVybCA9IHVybHBhcnNlLnVybHVucGFyc2UoKCcnLCAnJywgcGFyc2VkX3VybC5wYXRoLAorICAgICAgICAgICAgcGFyc2VkX3VybC5wYXJhbXMsIHBhcnNlZF91cmwucXVlcnksIHBhcnNlZF91cmwuZnJhZ21lbnQpKQorICAgICAgICB1cmwgPSB1cmxsaWIucXVvdGUodXJsKQorICAgICAgICBpZiBub3QgdXJsOgorICAgICAgICAgICAgdXJsID0gIi8iCiAgICAgICAgIGZvciBlbnRyeSBpbiBzZWxmLmVudHJpZXM6CiAgICAgICAgICAgICBpZiBlbnRyeS5hcHBsaWVzX3RvKHVzZXJhZ2VudCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmFsbG93YW5jZSh1cmwpCmRpZmYgLS1naXQgYS9MaWIvcnVucHkucHkgYi9MaWIvcnVucHkucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCBmZWE2MTA0Li5mNjM1YzRiCi0tLSBhL0xpYi9ydW5weS5weQorKysgYi9MaWIvcnVucHkucHkKQEAgLTExLDIwICsxMSw1OCBAQAogCiBpbXBvcnQgc3lzCiBpbXBvcnQgaW1wCitmcm9tIHBrZ3V0aWwgaW1wb3J0IHJlYWRfY29kZQogdHJ5OgogICAgIGZyb20gaW1wIGltcG9ydCBnZXRfbG9hZGVyCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZnJvbSBwa2d1dGlsIGltcG9ydCBnZXRfbG9hZGVyCiAKIF9fYWxsX18gPSBbCi0gICAgInJ1bl9tb2R1bGUiLAorICAgICJydW5fbW9kdWxlIiwgInJ1bl9wYXRoIiwKIF0KIAorY2xhc3MgX1RlbXBNb2R1bGUob2JqZWN0KToKKyAgICAiIiJUZW1wb3JhcmlseSByZXBsYWNlIGEgbW9kdWxlIGluIHN5cy5tb2R1bGVzIHdpdGggYW4gZW1wdHkgbmFtZXNwYWNlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZF9uYW1lKToKKyAgICAgICAgc2VsZi5tb2RfbmFtZSA9IG1vZF9uYW1lCisgICAgICAgIHNlbGYubW9kdWxlID0gaW1wLm5ld19tb2R1bGUobW9kX25hbWUpCisgICAgICAgIHNlbGYuX3NhdmVkX21vZHVsZSA9IFtdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBtb2RfbmFtZSA9IHNlbGYubW9kX25hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc2F2ZWRfbW9kdWxlLmFwcGVuZChzeXMubW9kdWxlc1ttb2RfbmFtZV0pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3lzLm1vZHVsZXNbbW9kX25hbWVdID0gc2VsZi5tb2R1bGUKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIGlmIHNlbGYuX3NhdmVkX21vZHVsZToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYubW9kX25hbWVdID0gc2VsZi5fc2F2ZWRfbW9kdWxlWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc2VsZi5tb2RfbmFtZV0KKyAgICAgICAgc2VsZi5fc2F2ZWRfbW9kdWxlID0gW10KKworY2xhc3MgX01vZGlmaWVkQXJndjAob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgc2VsZi5fc2F2ZWRfdmFsdWUgPSBzZWxmLl9zZW50aW5lbCA9IG9iamVjdCgpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zYXZlZF92YWx1ZSBpcyBub3Qgc2VsZi5fc2VudGluZWw6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkFscmVhZHkgcHJlc2VydmluZyBzYXZlZCB2YWx1ZSIpCisgICAgICAgIHNlbGYuX3NhdmVkX3ZhbHVlID0gc3lzLmFyZ3ZbMF0KKyAgICAgICAgc3lzLmFyZ3ZbMF0gPSBzZWxmLnZhbHVlCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLnZhbHVlID0gc2VsZi5fc2VudGluZWwKKyAgICAgICAgc3lzLmFyZ3ZbMF0gPSBzZWxmLl9zYXZlZF92YWx1ZQogCiBkZWYgX3J1bl9jb2RlKGNvZGUsIHJ1bl9nbG9iYWxzLCBpbml0X2dsb2JhbHM9Tm9uZSwKICAgICAgICAgICAgICAgbW9kX25hbWU9Tm9uZSwgbW9kX2ZuYW1lPU5vbmUsCiAgICAgICAgICAgICAgIG1vZF9sb2FkZXI9Tm9uZSwgcGtnX25hbWU9Tm9uZSk6Ci0gICAgIiIiSGVscGVyIGZvciBfcnVuX21vZHVsZV9jb2RlIiIiCisgICAgIiIiSGVscGVyIHRvIHJ1biBjb2RlIGluIG5vbWluYXRlZCBuYW1lc3BhY2UiIiIKICAgICBpZiBpbml0X2dsb2JhbHMgaXMgbm90IE5vbmU6CiAgICAgICAgIHJ1bl9nbG9iYWxzLnVwZGF0ZShpbml0X2dsb2JhbHMpCiAgICAgcnVuX2dsb2JhbHMudXBkYXRlKF9fbmFtZV9fID0gbW9kX25hbWUsCkBAIC0zNywyNyArNzUsMTEgQEAKIGRlZiBfcnVuX21vZHVsZV9jb2RlKGNvZGUsIGluaXRfZ2xvYmFscz1Ob25lLAogICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZT1Ob25lLCBtb2RfZm5hbWU9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgbW9kX2xvYWRlcj1Ob25lLCBwa2dfbmFtZT1Ob25lKToKLSAgICAiIiJIZWxwZXIgZm9yIHJ1bl9tb2R1bGUiIiIKLSAgICAjIFNldCB1cCB0aGUgdG9wIGxldmVsIG5hbWVzcGFjZSBkaWN0aW9uYXJ5Ci0gICAgdGVtcF9tb2R1bGUgPSBpbXAubmV3X21vZHVsZShtb2RfbmFtZSkKLSAgICBtb2RfZ2xvYmFscyA9IHRlbXBfbW9kdWxlLl9fZGljdF9fCi0gICAgIyBNb2RpZnkgc3lzLmFyZ3ZbMF0gYW5kIHN5cy5tb2R1bGVbbW9kX25hbWVdCi0gICAgc2F2ZWRfYXJndjAgPSBzeXMuYXJndlswXQotICAgIHJlc3RvcmVfbW9kdWxlID0gbW9kX25hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICBpZiByZXN0b3JlX21vZHVsZToKLSAgICAgICAgc2F2ZWRfbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kX25hbWVdCi0gICAgc3lzLmFyZ3ZbMF0gPSBtb2RfZm5hbWUKLSAgICBzeXMubW9kdWxlc1ttb2RfbmFtZV0gPSB0ZW1wX21vZHVsZQotICAgIHRyeToKKyAgICAiIiJIZWxwZXIgdG8gcnVuIGNvZGUgaW4gbmV3IG5hbWVzcGFjZSB3aXRoIHN5cyBtb2RpZmllZCIiIgorICAgIHdpdGggX1RlbXBNb2R1bGUobW9kX25hbWUpIGFzIHRlbXBfbW9kdWxlLCBfTW9kaWZpZWRBcmd2MChtb2RfZm5hbWUpOgorICAgICAgICBtb2RfZ2xvYmFscyA9IHRlbXBfbW9kdWxlLm1vZHVsZS5fX2RpY3RfXwogICAgICAgICBfcnVuX2NvZGUoY29kZSwgbW9kX2dsb2JhbHMsIGluaXRfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgbW9kX25hbWUsIG1vZF9mbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgbW9kX2xvYWRlciwgcGtnX25hbWUpCi0gICAgZmluYWxseToKLSAgICAgICAgc3lzLmFyZ3ZbMF0gPSBzYXZlZF9hcmd2MAotICAgICAgICBpZiByZXN0b3JlX21vZHVsZToKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzW21vZF9uYW1lXSA9IHNhdmVkX21vZHVsZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZF9uYW1lXQorICAgICAgICAgICAgICAgICAgbW9kX25hbWUsIG1vZF9mbmFtZSwgbW9kX2xvYWRlciwgcGtnX25hbWUpCiAgICAgIyBDb3B5IHRoZSBnbG9iYWxzIG9mIHRoZSB0ZW1wb3JhcnkgbW9kdWxlLCBhcyB0aGV5CiAgICAgIyBtYXkgYmUgY2xlYXJlZCB3aGVuIHRoZSB0ZW1wb3JhcnkgbW9kdWxlIGdvZXMgYXdheQogICAgIHJldHVybiBtb2RfZ2xvYmFscy5jb3B5KCkKQEAgLTgwLDQzICsxMDIsNjEgQEAKICAgICBpZiBsb2FkZXIgaXMgTm9uZToKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIk5vIG1vZHVsZSBuYW1lZCAlcyIgJSBtb2RfbmFtZSkKICAgICBpZiBsb2FkZXIuaXNfcGFja2FnZShtb2RfbmFtZSk6Ci0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCgiJXMgaXMgYSBwYWNrYWdlIGFuZCBjYW5ub3QgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBkaXJlY3RseSBleGVjdXRlZCIpICUgbW9kX25hbWUpCisgICAgICAgIGlmIG1vZF9uYW1lID09ICJfX21haW5fXyIgb3IgbW9kX25hbWUuZW5kc3dpdGgoIi5fX21haW5fXyIpOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIkNhbm5vdCB1c2UgcGFja2FnZSBhcyBfX21haW5fXyBtb2R1bGUiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwa2dfbWFpbl9uYW1lID0gbW9kX25hbWUgKyAiLl9fbWFpbl9fIgorICAgICAgICAgICAgcmV0dXJuIF9nZXRfbW9kdWxlX2RldGFpbHMocGtnX21haW5fbmFtZSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoKCIlczsgJXIgaXMgYSBwYWNrYWdlIGFuZCBjYW5ub3QgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGRpcmVjdGx5IGV4ZWN1dGVkIikgJShlLCBtb2RfbmFtZSkpCiAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZShtb2RfbmFtZSkKICAgICBpZiBjb2RlIGlzIE5vbmU6CiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJObyBjb2RlIG9iamVjdCBhdmFpbGFibGUgZm9yICVzIiAlIG1vZF9uYW1lKQogICAgIGZpbGVuYW1lID0gX2dldF9maWxlbmFtZShsb2FkZXIsIG1vZF9uYW1lKQotICAgIHJldHVybiBsb2FkZXIsIGNvZGUsIGZpbGVuYW1lCisgICAgcmV0dXJuIG1vZF9uYW1lLCBsb2FkZXIsIGNvZGUsIGZpbGVuYW1lCiAKIAotIyBYWFggbmNvZ2hsYW46IFNob3VsZCB0aGlzIGJlIGRvY3VtZW50ZWQgYW5kIG1hZGUgcHVibGljPwotIyAoQ3VycmVudCB0aG91Z2h0czogZG9uJ3QgcmVwZWF0IHRoZSBtaXN0YWtlIHRoYXQgbGVhZCB0byBpdHMKLSMgY3JlYXRpb24gd2hlbiBydW5fbW9kdWxlKCkgbm8gbG9uZ2VyIG1ldCB0aGUgbmVlZHMgb2YKLSMgbWFpbm1vZHVsZS5jLCBidXQgY291bGRuJ3QgYmUgY2hhbmdlZCBiZWNhdXNlIGl0IHdhcyBwdWJsaWMpCi1kZWYgX3J1bl9tb2R1bGVfYXNfbWFpbihtb2RfbmFtZSwgc2V0X2FyZ3YwPVRydWUpOgorZGVmIF9nZXRfbWFpbl9tb2R1bGVfZGV0YWlscygpOgorICAgICMgSGVscGVyIHRoYXQgZ2l2ZXMgYSBuaWNlciBlcnJvciBtZXNzYWdlIHdoZW4gYXR0ZW1wdGluZyB0bworICAgICMgZXhlY3V0ZSBhIHppcGZpbGUgb3IgZGlyZWN0b3J5IGJ5IGludm9raW5nIF9fbWFpbl9fLnB5CisgICAgbWFpbl9uYW1lID0gIl9fbWFpbl9fIgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIF9nZXRfbW9kdWxlX2RldGFpbHMobWFpbl9uYW1lKQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6CisgICAgICAgIGlmIG1haW5fbmFtZSBpbiBzdHIoZXhjKToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJjYW4ndCBmaW5kICVyIG1vZHVsZSBpbiAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1haW5fbmFtZSwgc3lzLnBhdGhbMF0pKQorICAgICAgICByYWlzZQorCisjIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgLW0gc3dpdGNoIGFuZCBkaXJlY3QKKyMgZXhlY3V0aW9uIG9mIHppcGZpbGVzIGFuZCBkaXJlY3RvcmllcyBhbmQgaXMgZGVsaWJlcmF0ZWx5IGtlcHQgcHJpdmF0ZS4KKyMgVGhpcyBhdm9pZHMgYSByZXBlYXQgb2YgdGhlIHNpdHVhdGlvbiB3aGVyZSBydW5fbW9kdWxlKCkgbm8gbG9uZ2VyIG1ldCB0aGUKKyMgbmVlZHMgb2YgbWFpbm1vZHVsZS5jLCBidXQgY291bGRuJ3QgYmUgY2hhbmdlZCBiZWNhdXNlIGl0IHdhcyBwdWJsaWMKK2RlZiBfcnVuX21vZHVsZV9hc19tYWluKG1vZF9uYW1lLCBhbHRlcl9hcmd2PVRydWUpOgogICAgICIiIlJ1bnMgdGhlIGRlc2lnbmF0ZWQgbW9kdWxlIGluIHRoZSBfX21haW5fXyBuYW1lc3BhY2UKIAotICAgICAgIFRoZXNlIF9fKl9fIG1hZ2ljIHZhcmlhYmxlcyB3aWxsIGJlIG92ZXJ3cml0dGVuOgorICAgICAgIE5vdGUgdGhhdCB0aGUgZXhlY3V0ZWQgbW9kdWxlIHdpbGwgaGF2ZSBmdWxsIGFjY2VzcyB0byB0aGUKKyAgICAgICBfX21haW5fXyBuYW1lc3BhY2UuIElmIHRoaXMgaXMgbm90IGRlc2lyYWJsZSwgdGhlIHJ1bl9tb2R1bGUoKQorICAgICAgIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHRvIHJ1biB0aGUgbW9kdWxlIGNvZGUgaW4gYSBmcmVzaCBuYW1lc3BhY2UuCisKKyAgICAgICBBdCB0aGUgdmVyeSBsZWFzdCwgdGhlc2UgdmFyaWFibGVzIGluIF9fbWFpbl9fIHdpbGwgYmUgb3ZlcndyaXR0ZW46CisgICAgICAgICAgIF9fbmFtZV9fCiAgICAgICAgICAgIF9fZmlsZV9fCiAgICAgICAgICAgIF9fbG9hZGVyX18KKyAgICAgICAgICAgX19wYWNrYWdlX18KICAgICAiIiIKICAgICB0cnk6Ci0gICAgICAgIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21vZHVsZV9kZXRhaWxzKG1vZF9uYW1lKQorICAgICAgICBpZiBhbHRlcl9hcmd2IG9yIG1vZF9uYW1lICE9ICJfX21haW5fXyI6ICMgaS5lLiAtbSBzd2l0Y2gKKyAgICAgICAgICAgIG1vZF9uYW1lLCBsb2FkZXIsIGNvZGUsIGZuYW1lID0gX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSkKKyAgICAgICAgZWxzZTogICAgICAgICAgIyBpLmUuIGRpcmVjdG9yeSBvciB6aXBmaWxlIGV4ZWN1dGlvbgorICAgICAgICAgICAgbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKQogICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6Ci0gICAgICAgICMgVHJ5IHRvIHByb3ZpZGUgYSBnb29kIGVycm9yIG1lc3NhZ2UKLSAgICAgICAgIyBmb3IgZGlyZWN0b3JpZXMsIHppcCBmaWxlcyBhbmQgdGhlIC1tIHN3aXRjaAotICAgICAgICBpZiBzZXRfYXJndjA6Ci0gICAgICAgICAgICAjIEZvciAtbSBzd2l0Y2gsIGp1c3QgZGlzcGx5IHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgIGluZm8gPSBzdHIoZXhjKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBGb3IgZGlyZWN0b3JpZXMvemlwZmlsZXMsIGxldCB0aGUgdXNlcgotICAgICAgICAgICAgIyBrbm93IHdoYXQgdGhlIGNvZGUgd2FzIGxvb2tpbmcgZm9yCi0gICAgICAgICAgICBpbmZvID0gImNhbid0IGZpbmQgJ19fbWFpbl9fLnB5JyBpbiAlciIgJSBzeXMuYXJndlswXQotICAgICAgICBtc2cgPSAiJXM6ICVzIiAlIChzeXMuZXhlY3V0YWJsZSwgaW5mbykKKyAgICAgICAgbXNnID0gIiVzOiAlcyIgJSAoc3lzLmV4ZWN1dGFibGUsIHN0cihleGMpKQogICAgICAgICBzeXMuZXhpdChtc2cpCiAgICAgcGtnX25hbWUgPSBtb2RfbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KICAgICBtYWluX2dsb2JhbHMgPSBzeXMubW9kdWxlc1siX19tYWluX18iXS5fX2RpY3RfXwotICAgIGlmIHNldF9hcmd2MDoKKyAgICBpZiBhbHRlcl9hcmd2OgogICAgICAgICBzeXMuYXJndlswXSA9IGZuYW1lCiAgICAgcmV0dXJuIF9ydW5fY29kZShjb2RlLCBtYWluX2dsb2JhbHMsIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAiX19tYWluX18iLCBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkKQEAgLTEyNyw3ICsxNjcsNyBAQAogCiAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0aW5nIHRvcCBsZXZlbCBuYW1lc3BhY2UgZGljdGlvbmFyeQogICAgICIiIgotICAgIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21vZHVsZV9kZXRhaWxzKG1vZF9uYW1lKQorICAgIG1vZF9uYW1lLCBsb2FkZXIsIGNvZGUsIGZuYW1lID0gX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSkKICAgICBpZiBydW5fbmFtZSBpcyBOb25lOgogICAgICAgICBydW5fbmFtZSA9IG1vZF9uYW1lCiAgICAgcGtnX25hbWUgPSBtb2RfbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KQEAgLTE0MCw2ICsxODAsOTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkKIAogCisjIFhYWCAobmNvZ2hsYW4pOiBQZXJoYXBzIGV4cG9zZSB0aGUgQyBBUEkgZnVuY3Rpb24KKyMgYXMgaW1wLmdldF9pbXBvcnRlciBpbnN0ZWFkIG9mIHJlaW1wbGVtZW50aW5nIGl0IGluIFB5dGhvbj8KK2RlZiBfZ2V0X2ltcG9ydGVyKHBhdGhfbmFtZSk6CisgICAgIiIiUHl0aG9uIHZlcnNpb24gb2YgUHlJbXBvcnRfR2V0SW1wb3J0ZXIgQyBBUEkgZnVuY3Rpb24iIiIKKyAgICBjYWNoZSA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlCisgICAgdHJ5OgorICAgICAgICBpbXBvcnRlciA9IGNhY2hlW3BhdGhfbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICMgTm90IHlldCBjYWNoZWQuIEZsYWcgYXMgdXNpbmcgdGhlCisgICAgICAgICMgc3RhbmRhcmQgbWFjaGluZXJ5IHVudGlsIHdlIGZpbmlzaAorICAgICAgICAjIGNoZWNraW5nIHRoZSBob29rcworICAgICAgICBjYWNoZVtwYXRoX25hbWVdID0gTm9uZQorICAgICAgICBmb3IgaG9vayBpbiBzeXMucGF0aF9ob29rczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnRlciA9IGhvb2socGF0aF9uYW1lKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNoZWNrIGxvb2tzIGEgYml0IG9kZC4gVGhlIHRyaWNrIGlzIHRoYXQKKyAgICAgICAgICAgICMgTnVsbEltcG9ydGVyIHRocm93cyBJbXBvcnRFcnJvciBpZiB0aGUgc3VwcGxpZWQgcGF0aCBpcyBhCisgICAgICAgICAgICAjICp2YWxpZCogZGlyZWN0b3J5IGVudHJ5IChhbmQgaGVuY2UgYWJsZSB0byBiZSBoYW5kbGVkCisgICAgICAgICAgICAjIGJ5IHRoZSBzdGFuZGFyZCBpbXBvcnQgbWFjaGluZXJ5KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydGVyID0gaW1wLk51bGxJbXBvcnRlcihwYXRoX25hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgY2FjaGVbcGF0aF9uYW1lXSA9IGltcG9ydGVyCisgICAgcmV0dXJuIGltcG9ydGVyCisKK2RlZiBfZ2V0X2NvZGVfZnJvbV9maWxlKGZuYW1lKToKKyAgICAjIENoZWNrIGZvciBhIGNvbXBpbGVkIGZpbGUgZmlyc3QKKyAgICB3aXRoIG9wZW4oZm5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgIGNvZGUgPSByZWFkX2NvZGUoZikKKyAgICBpZiBjb2RlIGlzIE5vbmU6CisgICAgICAgICMgVGhhdCBkaWRuJ3Qgd29yaywgc28gdHJ5IGl0IGFzIG5vcm1hbCBzb3VyY2UgY29kZQorICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJyVSIpIGFzIGY6CisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShmLnJlYWQoKSwgZm5hbWUsICdleGVjJykKKyAgICByZXR1cm4gY29kZQorCitkZWYgcnVuX3BhdGgocGF0aF9uYW1lLCBpbml0X2dsb2JhbHM9Tm9uZSwgcnVuX25hbWU9Tm9uZSk6CisgICAgIiIiRXhlY3V0ZSBjb2RlIGxvY2F0ZWQgYXQgdGhlIHNwZWNpZmllZCBmaWxlc3lzdGVtIGxvY2F0aW9uCisKKyAgICAgICBSZXR1cm5zIHRoZSByZXN1bHRpbmcgdG9wIGxldmVsIG5hbWVzcGFjZSBkaWN0aW9uYXJ5CisKKyAgICAgICBUaGUgZmlsZSBwYXRoIG1heSByZWZlciBkaXJlY3RseSB0byBhIFB5dGhvbiBzY3JpcHQgKGkuZS4KKyAgICAgICBvbmUgdGhhdCBjb3VsZCBiZSBkaXJlY3RseSBleGVjdXRlZCB3aXRoIGV4ZWNmaWxlKSBvciBlbHNlCisgICAgICAgaXQgbWF5IHJlZmVyIHRvIGEgemlwZmlsZSBvciBkaXJlY3RvcnkgY29udGFpbmluZyBhIHRvcAorICAgICAgIGxldmVsIF9fbWFpbl9fLnB5IHNjcmlwdC4KKyAgICAiIiIKKyAgICBpZiBydW5fbmFtZSBpcyBOb25lOgorICAgICAgICBydW5fbmFtZSA9ICI8cnVuX3BhdGg+IgorICAgIGltcG9ydGVyID0gX2dldF9pbXBvcnRlcihwYXRoX25hbWUpCisgICAgaWYgaXNpbnN0YW5jZShpbXBvcnRlciwgaW1wLk51bGxJbXBvcnRlcik6CisgICAgICAgICMgTm90IGEgdmFsaWQgc3lzLnBhdGggZW50cnksIHNvIHJ1biB0aGUgY29kZSBkaXJlY3RseQorICAgICAgICAjIGV4ZWNmaWxlKCkgZG9lc24ndCBoZWxwIGFzIHdlIHdhbnQgdG8gYWxsb3cgY29tcGlsZWQgZmlsZXMKKyAgICAgICAgY29kZSA9IF9nZXRfY29kZV9mcm9tX2ZpbGUocGF0aF9uYW1lKQorICAgICAgICByZXR1cm4gX3J1bl9tb2R1bGVfY29kZShjb2RlLCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lLCBwYXRoX25hbWUpCisgICAgZWxzZToKKyAgICAgICAgIyBJbXBvcnRlciBpcyBkZWZpbmVkIGZvciBwYXRoLCBzbyBhZGQgaXQgdG8KKyAgICAgICAgIyB0aGUgc3RhcnQgb2Ygc3lzLnBhdGgKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHBhdGhfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBIZXJlJ3Mgd2hlcmUgdGhpbmdzIGFyZSBhIGxpdHRsZSBkaWZmZXJlbnQgZnJvbSB0aGUgcnVuX21vZHVsZQorICAgICAgICAgICAgIyBjYXNlLiBUaGVyZSwgd2Ugb25seSBoYWQgdG8gcmVwbGFjZSB0aGUgbW9kdWxlIGluIHN5cyB3aGlsZSB0aGUKKyAgICAgICAgICAgICMgY29kZSB3YXMgcnVubmluZyBhbmQgZG9pbmcgc28gd2FzIHNvbWV3aGF0IG9wdGlvbmFsLiBIZXJlLCB3ZQorICAgICAgICAgICAgIyBoYXZlIG5vIGNob2ljZSBhbmQgd2UgaGF2ZSB0byByZW1vdmUgaXQgZXZlbiB3aGlsZSB3ZSByZWFkIHRoZQorICAgICAgICAgICAgIyBjb2RlLiBJZiB3ZSBkb24ndCBkbyB0aGlzLCBhIF9fbG9hZGVyX18gYXR0cmlidXRlIGluIHRoZQorICAgICAgICAgICAgIyBleGlzdGluZyBfX21haW5fXyBtb2R1bGUgbWF5IHByZXZlbnQgbG9jYXRpb24gb2YgdGhlIG5ldyBtb2R1bGUuCisgICAgICAgICAgICBtYWluX25hbWUgPSAiX19tYWluX18iCisgICAgICAgICAgICBzYXZlZF9tYWluID0gc3lzLm1vZHVsZXNbbWFpbl9uYW1lXQorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21haW5fbmFtZV0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbWFpbl9tb2R1bGVfZGV0YWlscygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW21haW5fbmFtZV0gPSBzYXZlZF9tYWluCisgICAgICAgICAgICBwa2dfbmFtZSA9ICIiCisgICAgICAgICAgICB3aXRoIF9UZW1wTW9kdWxlKHJ1bl9uYW1lKSBhcyB0ZW1wX21vZHVsZSwgXAorICAgICAgICAgICAgICAgICBfTW9kaWZpZWRBcmd2MChwYXRoX25hbWUpOgorICAgICAgICAgICAgICAgIG1vZF9nbG9iYWxzID0gdGVtcF9tb2R1bGUubW9kdWxlLl9fZGljdF9fCisgICAgICAgICAgICAgICAgcmV0dXJuIF9ydW5fY29kZShjb2RlLCBtb2RfZ2xvYmFscywgaW5pdF9nbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX25hbWUsIGZuYW1lLCBsb2FkZXIsIHBrZ19uYW1lKS5jb3B5KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzeXMucGF0aC5yZW1vdmUocGF0aF9uYW1lKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgIyBSdW4gdGhlIG1vZHVsZSBzcGVjaWZpZWQgYXMgdGhlIG5leHQgY29tbWFuZCBsaW5lIGFyZ3VtZW50CiAgICAgaWYgbGVuKHN5cy5hcmd2KSA8IDI6CmRpZmYgLS1naXQgYS9MaWIvc2h1dGlsLnB5IGIvTGliL3NodXRpbC5weQppbmRleCA0YzE4MmFlLi5mMmQyYTkwIDEwMDY0NAotLS0gYS9MaWIvc2h1dGlsLnB5CisrKyBiL0xpYi9zaHV0aWwucHkKQEAgLTEsNCArMSw0IEBACi0iIiJVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgY29weWluZyBmaWxlcyBhbmQgZGlyZWN0b3J5IHRyZWVzLgorIiIiVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGNvcHlpbmcgYW5kIGFyY2hpdmluZyBmaWxlcyBhbmQgZGlyZWN0b3J5IHRyZWVzLgogCiBYWFggVGhlIGZ1bmN0aW9ucyBoZXJlIGRvbid0IGNvcHkgdGhlIHJlc291cmNlIGZvcmsgb3Igb3RoZXIgbWV0YWRhdGEgb24gTWFjLgogCkBAIC05LDE0ICs5LDM0IEBACiBpbXBvcnQgc3RhdAogZnJvbSBvcy5wYXRoIGltcG9ydCBhYnNwYXRoCiBpbXBvcnQgZm5tYXRjaAoraW1wb3J0IGNvbGxlY3Rpb25zCiBpbXBvcnQgZXJybm8KIAotX19hbGxfXyA9IFsiY29weWZpbGVvYmoiLCJjb3B5ZmlsZSIsImNvcHltb2RlIiwiY29weXN0YXQiLCJjb3B5IiwiY29weTIiLAotICAgICAgICAgICAiY29weXRyZWUiLCJtb3ZlIiwicm10cmVlIiwiRXJyb3IiXQordHJ5OgorICAgIGZyb20gcHdkIGltcG9ydCBnZXRwd25hbQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdldHB3bmFtID0gTm9uZQorCit0cnk6CisgICAgZnJvbSBncnAgaW1wb3J0IGdldGdybmFtCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ2V0Z3JuYW0gPSBOb25lCisKK19fYWxsX18gPSBbImNvcHlmaWxlb2JqIiwgImNvcHlmaWxlIiwgImNvcHltb2RlIiwgImNvcHlzdGF0IiwgImNvcHkiLCAiY29weTIiLAorICAgICAgICAgICAiY29weXRyZWUiLCAibW92ZSIsICJybXRyZWUiLCAiRXJyb3IiLCAiU3BlY2lhbEZpbGVFcnJvciIsCisgICAgICAgICAgICJFeGVjRXJyb3IiLCAibWFrZV9hcmNoaXZlIiwgImdldF9hcmNoaXZlX2Zvcm1hdHMiLAorICAgICAgICAgICAicmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQiLCAidW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCJdCiAKIGNsYXNzIEVycm9yKEVudmlyb25tZW50RXJyb3IpOgogICAgIHBhc3MKIAorY2xhc3MgU3BlY2lhbEZpbGVFcnJvcihFbnZpcm9ubWVudEVycm9yKToKKyAgICAiIiJSYWlzZWQgd2hlbiB0cnlpbmcgdG8gZG8gYSBraW5kIG9mIG9wZXJhdGlvbiAoZS5nLiBjb3B5aW5nKSB3aGljaCBpcworICAgIG5vdCBzdXBwb3J0ZWQgb24gYSBzcGVjaWFsIGZpbGUgKGUuZy4gYSBuYW1lZCBwaXBlKSIiIgorCitjbGFzcyBFeGVjRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CisgICAgIiIiUmFpc2VkIHdoZW4gYSBjb21tYW5kIGNvdWxkIG5vdCBiZSBleGVjdXRlZCIiIgorCiB0cnk6CiAgICAgV2luZG93c0Vycm9yCiBleGNlcHQgTmFtZUVycm9yOgpAQCAtMzIsNyArNTIsNyBAQAogCiBkZWYgX3NhbWVmaWxlKHNyYywgZHN0KToKICAgICAjIE1hY2ludG9zaCwgVW5peC4KLSAgICBpZiBoYXNhdHRyKG9zLnBhdGgsJ3NhbWVmaWxlJyk6CisgICAgaWYgaGFzYXR0cihvcy5wYXRoLCAnc2FtZWZpbGUnKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguc2FtZWZpbGUoc3JjLCBkc3QpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgpAQCAtNDcsNiArNjcsMTcgQEAKICAgICBpZiBfc2FtZWZpbGUoc3JjLCBkc3QpOgogICAgICAgICByYWlzZSBFcnJvcigiYCVzYCBhbmQgYCVzYCBhcmUgdGhlIHNhbWUgZmlsZSIgJSAoc3JjLCBkc3QpKQogCisgICAgZm9yIGZuIGluIFtzcmMsIGRzdF06CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ID0gb3Muc3RhdChmbikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAjIEZpbGUgbW9zdCBsaWtlbHkgZG9lcyBub3QgZXhpc3QKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgWFhYIFdoYXQgYWJvdXQgb3RoZXIgc3BlY2lhbCBmaWxlcz8gKHNvY2tldHMsIGRldmljZXMuLi4pCisgICAgICAgICAgICBpZiBzdGF0LlNfSVNGSUZPKHN0LnN0X21vZGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIFNwZWNpYWxGaWxlRXJyb3IoImAlc2AgaXMgYSBuYW1lZCBwaXBlIiAlIGZuKQorCiAgICAgd2l0aCBvcGVuKHNyYywgJ3JiJykgYXMgZnNyYzoKICAgICAgICAgd2l0aCBvcGVuKGRzdCwgJ3diJykgYXMgZmRzdDoKICAgICAgICAgICAgIGNvcHlmaWxlb2JqKGZzcmMsIGZkc3QpCkBAIC03MCw3ICsxMDEsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5jaGZsYWdzKGRzdCwgc3Quc3RfZmxhZ3MpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCB3aHk6Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihlcnJubywgJ0VPUE5PVFNVUFAnKSBvciB3aHkuZXJybm8gIT0gZXJybm8uRU9QTk9UU1VQUDoKKyAgICAgICAgICAgIGlmIChub3QgaGFzYXR0cihlcnJubywgJ0VPUE5PVFNVUFAnKSBvcgorICAgICAgICAgICAgICAgIHdoeS5lcnJubyAhPSBlcnJuby5FT1BOT1RTVVBQKToKICAgICAgICAgICAgICAgICByYWlzZQogCiBkZWYgY29weShzcmMsIGRzdCk6CkBAIC0xNTMsMTQgKzE4NSwxNCBAQAogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHNyY25hbWUpOgogICAgICAgICAgICAgICAgIGNvcHl0cmVlKHNyY25hbWUsIGRzdG5hbWUsIHN5bWxpbmtzLCBpZ25vcmUpCiAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgV2lsbCByYWlzZSBhIFNwZWNpYWxGaWxlRXJyb3IgZm9yIHVuc3VwcG9ydGVkIGZpbGUgdHlwZXMKICAgICAgICAgICAgICAgICBjb3B5MihzcmNuYW1lLCBkc3RuYW1lKQotICAgICAgICAgICAgIyBYWFggV2hhdCBhYm91dCBkZXZpY2VzLCBzb2NrZXRzIGV0Yy4/Ci0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpLCB3aHk6Ci0gICAgICAgICAgICBlcnJvcnMuYXBwZW5kKChzcmNuYW1lLCBkc3RuYW1lLCBzdHIod2h5KSkpCiAgICAgICAgICMgY2F0Y2ggdGhlIEVycm9yIGZyb20gdGhlIHJlY3Vyc2l2ZSBjb3B5dHJlZSBzbyB0aGF0IHdlIGNhbgogICAgICAgICAjIGNvbnRpbnVlIHdpdGggb3RoZXIgZmlsZXMKICAgICAgICAgZXhjZXB0IEVycm9yLCBlcnI6CiAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgd2h5OgorICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjbmFtZSwgZHN0bmFtZSwgc3RyKHdoeSkpKQogICAgIHRyeToKICAgICAgICAgY29weXN0YXQoc3JjLCBkc3QpCiAgICAgZXhjZXB0IE9TRXJyb3IsIHdoeToKQEAgLTI1Miw3ICsyODQsNyBAQAogICAgICAgICBvcy5yZW5hbWUoc3JjLCByZWFsX2RzdCkKICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzcmMpOgotICAgICAgICAgICAgaWYgZGVzdGluc3JjKHNyYywgZHN0KToKKyAgICAgICAgICAgIGlmIF9kZXN0aW5zcmMoc3JjLCBkc3QpOgogICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCAiQ2Fubm90IG1vdmUgYSBkaXJlY3RvcnkgJyVzJyBpbnRvIGl0c2VsZiAnJXMnLiIgJSAoc3JjLCBkc3QpCiAgICAgICAgICAgICBjb3B5dHJlZShzcmMsIHJlYWxfZHN0LCBzeW1saW5rcz1UcnVlKQogICAgICAgICAgICAgcm10cmVlKHNyYykKQEAgLTI2MCw3ICsyOTIsNyBAQAogICAgICAgICAgICAgY29weTIoc3JjLCByZWFsX2RzdCkKICAgICAgICAgICAgIG9zLnVubGluayhzcmMpCiAKLWRlZiBkZXN0aW5zcmMoc3JjLCBkc3QpOgorZGVmIF9kZXN0aW5zcmMoc3JjLCBkc3QpOgogICAgIHNyYyA9IGFic3BhdGgoc3JjKQogICAgIGRzdCA9IGFic3BhdGgoZHN0KQogICAgIGlmIG5vdCBzcmMuZW5kc3dpdGgob3MucGF0aC5zZXApOgpAQCAtMjY4LDMgKzMwMCwyNDcgQEAKICAgICBpZiBub3QgZHN0LmVuZHN3aXRoKG9zLnBhdGguc2VwKToKICAgICAgICAgZHN0ICs9IG9zLnBhdGguc2VwCiAgICAgcmV0dXJuIGRzdC5zdGFydHN3aXRoKHNyYykKKworZGVmIF9nZXRfZ2lkKG5hbWUpOgorICAgICIiIlJldHVybnMgYSBnaWQsIGdpdmVuIGEgZ3JvdXAgbmFtZS4iIiIKKyAgICBpZiBnZXRncm5hbSBpcyBOb25lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGdldGdybmFtKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0WzJdCisgICAgcmV0dXJuIE5vbmUKKworZGVmIF9nZXRfdWlkKG5hbWUpOgorICAgICIiIlJldHVybnMgYW4gdWlkLCBnaXZlbiBhIHVzZXIgbmFtZS4iIiIKKyAgICBpZiBnZXRwd25hbSBpcyBOb25lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGdldHB3bmFtKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0WzJdCisgICAgcmV0dXJuIE5vbmUKKworZGVmIF9tYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCBiYXNlX2RpciwgY29tcHJlc3M9Imd6aXAiLCB2ZXJib3NlPTAsIGRyeV9ydW49MCwKKyAgICAgICAgICAgICAgICAgIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUsIGxvZ2dlcj1Ob25lKToKKyAgICAiIiJDcmVhdGUgYSAocG9zc2libHkgY29tcHJlc3NlZCkgdGFyIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyCisgICAgJ2Jhc2VfZGlyJy4KKworICAgICdjb21wcmVzcycgbXVzdCBiZSAiZ3ppcCIgKHRoZSBkZWZhdWx0KSwgImJ6aXAyIiwgb3IgTm9uZS4KKworICAgICdvd25lcicgYW5kICdncm91cCcgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIG93bmVyIGFuZCBhIGdyb3VwIGZvciB0aGUKKyAgICBhcmNoaXZlIHRoYXQgaXMgYmVpbmcgYnVpbHQuIElmIG5vdCBwcm92aWRlZCwgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwCisgICAgd2lsbCBiZSB1c2VkLgorCisgICAgVGhlIG91dHB1dCB0YXIgZmlsZSB3aWxsIGJlIG5hbWVkICdiYXNlX25hbWUnICsgICIudGFyIiwgcG9zc2libHkgcGx1cworICAgIHRoZSBhcHByb3ByaWF0ZSBjb21wcmVzc2lvbiBleHRlbnNpb24gKCIuZ3oiLCBvciAiLmJ6MiIpLgorCisgICAgUmV0dXJucyB0aGUgb3V0cHV0IGZpbGVuYW1lLgorICAgICIiIgorICAgIHRhcl9jb21wcmVzc2lvbiA9IHsnZ3ppcCc6ICdneicsICdiemlwMic6ICdiejInLCBOb25lOiAnJ30KKyAgICBjb21wcmVzc19leHQgPSB7J2d6aXAnOiAnLmd6JywgJ2J6aXAyJzogJy5iejInfQorCisgICAgIyBmbGFncyBmb3IgY29tcHJlc3Npb24gcHJvZ3JhbSwgZWFjaCBlbGVtZW50IG9mIGxpc3Qgd2lsbCBiZSBhbiBhcmd1bWVudAorICAgIGlmIGNvbXByZXNzIGlzIG5vdCBOb25lIGFuZCBjb21wcmVzcyBub3QgaW4gY29tcHJlc3NfZXh0LmtleXMoKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgICAoImJhZCB2YWx1ZSBmb3IgJ2NvbXByZXNzJzogbXVzdCBiZSBOb25lLCAnZ3ppcCcgb3IgJ2J6aXAyJyIpCisKKyAgICBhcmNoaXZlX25hbWUgPSBiYXNlX25hbWUgKyAnLnRhcicgKyBjb21wcmVzc19leHQuZ2V0KGNvbXByZXNzLCAnJykKKyAgICBhcmNoaXZlX2RpciA9IG9zLnBhdGguZGlybmFtZShhcmNoaXZlX25hbWUpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJjaGl2ZV9kaXIpOgorICAgICAgICBsb2dnZXIuaW5mbygiY3JlYXRpbmcgJXMiICUgYXJjaGl2ZV9kaXIpCisgICAgICAgIGlmIG5vdCBkcnlfcnVuOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoYXJjaGl2ZV9kaXIpCisKKworICAgICMgY3JlYXRpbmcgdGhlIHRhcmJhbGwKKyAgICBpbXBvcnQgdGFyZmlsZSAgIyBsYXRlIGltcG9ydCBzbyBQeXRob24gYnVpbGQgaXRzZWxmIGRvZXNuJ3QgYnJlYWsKKworICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0NyZWF0aW5nIHRhciBhcmNoaXZlJykKKworICAgIHVpZCA9IF9nZXRfdWlkKG93bmVyKQorICAgIGdpZCA9IF9nZXRfZ2lkKGdyb3VwKQorCisgICAgZGVmIF9zZXRfdWlkX2dpZCh0YXJpbmZvKToKKyAgICAgICAgaWYgZ2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby5naWQgPSBnaWQKKyAgICAgICAgICAgIHRhcmluZm8uZ25hbWUgPSBncm91cAorICAgICAgICBpZiB1aWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YXJpbmZvLnVpZCA9IHVpZAorICAgICAgICAgICAgdGFyaW5mby51bmFtZSA9IG93bmVyCisgICAgICAgIHJldHVybiB0YXJpbmZvCisKKyAgICBpZiBub3QgZHJ5X3J1bjoKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSwgJ3d8JXMnICUgdGFyX2NvbXByZXNzaW9uW2NvbXByZXNzXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyLmFkZChiYXNlX2RpciwgZmlsdGVyPV9zZXRfdWlkX2dpZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICByZXR1cm4gYXJjaGl2ZV9uYW1lCisKK2RlZiBfY2FsbF9leHRlcm5hbF96aXAoYmFzZV9kaXIsIHppcF9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSwgZHJ5X3J1bj1GYWxzZSk6CisgICAgIyBYWFggc2VlIGlmIHdlIHdhbnQgdG8ga2VlcCBhbiBleHRlcm5hbCBjYWxsIGhlcmUKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICB6aXBvcHRpb25zID0gIi1yIgorICAgIGVsc2U6CisgICAgICAgIHppcG9wdGlvbnMgPSAiLXJxIgorICAgIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yCisgICAgZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCisgICAgdHJ5OgorICAgICAgICBzcGF3bihbInppcCIsIHppcG9wdGlvbnMsIHppcF9maWxlbmFtZSwgYmFzZV9kaXJdLCBkcnlfcnVuPWRyeV9ydW4pCisgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvcjoKKyAgICAgICAgIyBYWFggcmVhbGx5IHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuICJjb3VsZG4ndCBmaW5kCisgICAgICAgICMgZXh0ZXJuYWwgJ3ppcCcgY29tbWFuZCIgYW5kICJ6aXAgZmFpbGVkIi4KKyAgICAgICAgcmFpc2UgRXhlY0Vycm9yLCBcCisgICAgICAgICAgICAoInVuYWJsZSB0byBjcmVhdGUgemlwIGZpbGUgJyVzJzogIgorICAgICAgICAgICAgImNvdWxkIG5laXRoZXIgaW1wb3J0IHRoZSAnemlwZmlsZScgbW9kdWxlIG5vciAiCisgICAgICAgICAgICAiZmluZCBhIHN0YW5kYWxvbmUgemlwIHV0aWxpdHkiKSAlIHppcF9maWxlbmFtZQorCitkZWYgX21ha2VfemlwZmlsZShiYXNlX25hbWUsIGJhc2VfZGlyLCB2ZXJib3NlPTAsIGRyeV9ydW49MCwgbG9nZ2VyPU5vbmUpOgorICAgICIiIkNyZWF0ZSBhIHppcCBmaWxlIGZyb20gYWxsIHRoZSBmaWxlcyB1bmRlciAnYmFzZV9kaXInLgorCisgICAgVGhlIG91dHB1dCB6aXAgZmlsZSB3aWxsIGJlIG5hbWVkICdiYXNlX25hbWUnICsgIi56aXAiLiAgVXNlcyBlaXRoZXIgdGhlCisgICAgInppcGZpbGUiIFB5dGhvbiBtb2R1bGUgKGlmIGF2YWlsYWJsZSkgb3IgdGhlIEluZm9aSVAgInppcCIgdXRpbGl0eQorICAgIChpZiBpbnN0YWxsZWQgYW5kIGZvdW5kIG9uIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoKS4gIElmIG5laXRoZXIgdG9vbCBpcworICAgIGF2YWlsYWJsZSwgcmFpc2VzIEV4ZWNFcnJvci4gIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCB6aXAKKyAgICBmaWxlLgorICAgICIiIgorICAgIHppcF9maWxlbmFtZSA9IGJhc2VfbmFtZSArICIuemlwIgorICAgIGFyY2hpdmVfZGlyID0gb3MucGF0aC5kaXJuYW1lKGJhc2VfbmFtZSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX2Rpcik6CisgICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJjcmVhdGluZyAlcyIsIGFyY2hpdmVfZGlyKQorICAgICAgICBpZiBub3QgZHJ5X3J1bjoKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGFyY2hpdmVfZGlyKQorCisgICAgIyBJZiB6aXBmaWxlIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlLCB0cnkgc3Bhd25pbmcgYW4gZXh0ZXJuYWwgJ3ppcCcKKyAgICAjIGNvbW1hbmQuCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgemlwZmlsZQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgemlwZmlsZSA9IE5vbmUKKworICAgIGlmIHppcGZpbGUgaXMgTm9uZToKKyAgICAgICAgX2NhbGxfZXh0ZXJuYWxfemlwKGJhc2VfZGlyLCB6aXBfZmlsZW5hbWUsIHZlcmJvc2UsIGRyeV9ydW4pCisgICAgZWxzZToKKyAgICAgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNyZWF0aW5nICclcycgYW5kIGFkZGluZyAnJXMnIHRvIGl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHppcF9maWxlbmFtZSwgYmFzZV9kaXIpCisKKyAgICAgICAgaWYgbm90IGRyeV9ydW46CisgICAgICAgICAgICB6aXAgPSB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGVuYW1lLCAidyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249emlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICAgICAgICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoYmFzZV9kaXIpOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKGRpcnBhdGgsIG5hbWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHppcC53cml0ZShwYXRoLCBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJhZGRpbmcgJyVzJyIsIHBhdGgpCisgICAgICAgICAgICB6aXAuY2xvc2UoKQorCisgICAgcmV0dXJuIHppcF9maWxlbmFtZQorCitfQVJDSElWRV9GT1JNQVRTID0geworICAgICdnenRhcic6IChfbWFrZV90YXJiYWxsLCBbKCdjb21wcmVzcycsICdnemlwJyldLCAiZ3ppcCdlZCB0YXItZmlsZSIpLAorICAgICdienRhcic6IChfbWFrZV90YXJiYWxsLCBbKCdjb21wcmVzcycsICdiemlwMicpXSwgImJ6aXAyJ2VkIHRhci1maWxlIiksCisgICAgJ3Rhcic6ICAgKF9tYWtlX3RhcmJhbGwsIFsoJ2NvbXByZXNzJywgTm9uZSldLCAidW5jb21wcmVzc2VkIHRhciBmaWxlIiksCisgICAgJ3ppcCc6ICAgKF9tYWtlX3ppcGZpbGUsIFtdLCJaSVAgZmlsZSIpCisgICAgfQorCitkZWYgZ2V0X2FyY2hpdmVfZm9ybWF0cygpOgorICAgICIiIlJldHVybnMgYSBsaXN0IG9mIHN1cHBvcnRlZCBmb3JtYXRzIGZvciBhcmNoaXZpbmcgYW5kIHVuYXJjaGl2aW5nLgorCisgICAgRWFjaCBlbGVtZW50IG9mIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSBpcyBhIHR1cGxlIChuYW1lLCBkZXNjcmlwdGlvbikKKyAgICAiIiIKKyAgICBmb3JtYXRzID0gWyhuYW1lLCByZWdpc3RyeVsyXSkgZm9yIG5hbWUsIHJlZ2lzdHJ5IGluCisgICAgICAgICAgICAgICBfQVJDSElWRV9GT1JNQVRTLml0ZW1zKCldCisgICAgZm9ybWF0cy5zb3J0KCkKKyAgICByZXR1cm4gZm9ybWF0cworCitkZWYgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQobmFtZSwgZnVuY3Rpb24sIGV4dHJhX2FyZ3M9Tm9uZSwgZGVzY3JpcHRpb249JycpOgorICAgICIiIlJlZ2lzdGVycyBhbiBhcmNoaXZlIGZvcm1hdC4KKworICAgIG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGZvcm1hdC4gZnVuY3Rpb24gaXMgdGhlIGNhbGxhYmxlIHRoYXQgd2lsbCBiZQorICAgIHVzZWQgdG8gY3JlYXRlIGFyY2hpdmVzLiBJZiBwcm92aWRlZCwgZXh0cmFfYXJncyBpcyBhIHNlcXVlbmNlIG9mCisgICAgKG5hbWUsIHZhbHVlKSB0dXBsZXMgdGhhdCB3aWxsIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlIGNhbGxhYmxlLgorICAgIGRlc2NyaXB0aW9uIGNhbiBiZSBwcm92aWRlZCB0byBkZXNjcmliZSB0aGUgZm9ybWF0LCBhbmQgd2lsbCBiZSByZXR1cm5lZAorICAgIGJ5IHRoZSBnZXRfYXJjaGl2ZV9mb3JtYXRzKCkgZnVuY3Rpb24uCisgICAgIiIiCisgICAgaWYgZXh0cmFfYXJncyBpcyBOb25lOgorICAgICAgICBleHRyYV9hcmdzID0gW10KKyAgICBpZiBub3QgaXNpbnN0YW5jZShmdW5jdGlvbiwgY29sbGVjdGlvbnMuQ2FsbGFibGUpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ1RoZSAlcyBvYmplY3QgaXMgbm90IGNhbGxhYmxlJyAlIGZ1bmN0aW9uKQorICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4dHJhX2FyZ3MsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4dHJhX2FyZ3MgbmVlZHMgdG8gYmUgYSBzZXF1ZW5jZScpCisgICAgZm9yIGVsZW1lbnQgaW4gZXh0cmFfYXJnczoKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZWxlbWVudCwgKHR1cGxlLCBsaXN0KSkgb3IgbGVuKGVsZW1lbnQpICE9MiA6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4dHJhX2FyZ3MgZWxlbWVudHMgYXJlIDogKGFyZ19uYW1lLCB2YWx1ZSknKQorCisgICAgX0FSQ0hJVkVfRk9STUFUU1tuYW1lXSA9IChmdW5jdGlvbiwgZXh0cmFfYXJncywgZGVzY3JpcHRpb24pCisKK2RlZiB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KG5hbWUpOgorICAgIGRlbCBfQVJDSElWRV9GT1JNQVRTW25hbWVdCisKK2RlZiBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmb3JtYXQsIHJvb3RfZGlyPU5vbmUsIGJhc2VfZGlyPU5vbmUsIHZlcmJvc2U9MCwKKyAgICAgICAgICAgICAgICAgZHJ5X3J1bj0wLCBvd25lcj1Ob25lLCBncm91cD1Ob25lLCBsb2dnZXI9Tm9uZSk6CisgICAgIiIiQ3JlYXRlIGFuIGFyY2hpdmUgZmlsZSAoZWcuIHppcCBvciB0YXIpLgorCisgICAgJ2Jhc2VfbmFtZScgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLCBtaW51cyBhbnkgZm9ybWF0LXNwZWNpZmljCisgICAgZXh0ZW5zaW9uOyAnZm9ybWF0JyBpcyB0aGUgYXJjaGl2ZSBmb3JtYXQ6IG9uZSBvZiAiemlwIiwgInRhciIsICJienRhciIKKyAgICBvciAiZ3p0YXIiLgorCisgICAgJ3Jvb3RfZGlyJyBpcyBhIGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZQorICAgIGFyY2hpdmU7IGllLiB3ZSB0eXBpY2FsbHkgY2hkaXIgaW50byAncm9vdF9kaXInIGJlZm9yZSBjcmVhdGluZyB0aGUKKyAgICBhcmNoaXZlLiAgJ2Jhc2VfZGlyJyBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHdlIHN0YXJ0IGFyY2hpdmluZyBmcm9tOworICAgIGllLiAnYmFzZV9kaXInIHdpbGwgYmUgdGhlIGNvbW1vbiBwcmVmaXggb2YgYWxsIGZpbGVzIGFuZAorICAgIGRpcmVjdG9yaWVzIGluIHRoZSBhcmNoaXZlLiAgJ3Jvb3RfZGlyJyBhbmQgJ2Jhc2VfZGlyJyBib3RoIGRlZmF1bHQKKyAgICB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBhcmNoaXZlIGZpbGUuCisKKyAgICAnb3duZXInIGFuZCAnZ3JvdXAnIGFyZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgYXJjaGl2ZS4gQnkgZGVmYXVsdCwKKyAgICB1c2VzIHRoZSBjdXJyZW50IG93bmVyIGFuZCBncm91cC4KKyAgICAiIiIKKyAgICBzYXZlX2N3ZCA9IG9zLmdldGN3ZCgpCisgICAgaWYgcm9vdF9kaXIgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiY2hhbmdpbmcgaW50byAnJXMnIiwgcm9vdF9kaXIpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguYWJzcGF0aChiYXNlX25hbWUpCisgICAgICAgIGlmIG5vdCBkcnlfcnVuOgorICAgICAgICAgICAgb3MuY2hkaXIocm9vdF9kaXIpCisKKyAgICBpZiBiYXNlX2RpciBpcyBOb25lOgorICAgICAgICBiYXNlX2RpciA9IG9zLmN1cmRpcgorCisgICAga3dhcmdzID0geydkcnlfcnVuJzogZHJ5X3J1biwgJ2xvZ2dlcic6IGxvZ2dlcn0KKworICAgIHRyeToKKyAgICAgICAgZm9ybWF0X2luZm8gPSBfQVJDSElWRV9GT1JNQVRTW2Zvcm1hdF0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJ1bmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciICUgZm9ybWF0CisKKyAgICBmdW5jID0gZm9ybWF0X2luZm9bMF0KKyAgICBmb3IgYXJnLCB2YWwgaW4gZm9ybWF0X2luZm9bMV06CisgICAgICAgIGt3YXJnc1thcmddID0gdmFsCisKKyAgICBpZiBmb3JtYXQgIT0gJ3ppcCc6CisgICAgICAgIGt3YXJnc1snb3duZXInXSA9IG93bmVyCisgICAgICAgIGt3YXJnc1snZ3JvdXAnXSA9IGdyb3VwCisKKyAgICB0cnk6CisgICAgICAgIGZpbGVuYW1lID0gZnVuYyhiYXNlX25hbWUsIGJhc2VfZGlyLCAqKmt3YXJncykKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiByb290X2RpciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImNoYW5naW5nIGJhY2sgdG8gJyVzJyIsIHNhdmVfY3dkKQorICAgICAgICAgICAgb3MuY2hkaXIoc2F2ZV9jd2QpCisKKyAgICByZXR1cm4gZmlsZW5hbWUKZGlmZiAtLWdpdCBhL0xpYi9zaXRlLnB5IGIvTGliL3NpdGUucHkKaW5kZXggNjZjNTZjMi4uOTBjZjMzMSAxMDA2NDQKLS0tIGEvTGliL3NpdGUucHkKKysrIGIvTGliL3NpdGUucHkKQEAgLTYxLDE5ICs2MSwyNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgX19idWlsdGluX18KK2ltcG9ydCB0cmFjZWJhY2sKIAogIyBQcmVmaXhlcyBmb3Igc2l0ZS1wYWNrYWdlczsgYWRkIGFkZGl0aW9uYWwgcHJlZml4ZXMgbGlrZSAvdXNyL2xvY2FsIGhlcmUKIFBSRUZJWEVTID0gW3N5cy5wcmVmaXgsIHN5cy5leGVjX3ByZWZpeF0KICMgRW5hYmxlIHBlciB1c2VyIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5CiAjIHNldCBpdCB0byBGYWxzZSB0byBkaXNhYmxlIHRoZSBmZWF0dXJlIG9yIFRydWUgdG8gZm9yY2UgdGhlIGZlYXR1cmUKIEVOQUJMRV9VU0VSX1NJVEUgPSBOb25lCisKICMgZm9yIGRpc3R1dGlscy5jb21tYW5kcy5pbnN0YWxsCisjIFRoZXNlIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhlIGdldHVzZXJiYXNlKCkgYW5kIGdldHVzZXJzaXRlcGFja2FnZXMoKQorIyBmdW5jdGlvbnMsIHRocm91Z2ggdGhlIG1haW4oKSBmdW5jdGlvbiB3aGVuIFB5dGhvbiBzdGFydHMuCiBVU0VSX1NJVEUgPSBOb25lCiBVU0VSX0JBU0UgPSBOb25lCiAKIAogZGVmIG1ha2VwYXRoKCpwYXRocyk6Ci0gICAgZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigqcGF0aHMpKQorICAgIGRpciA9IG9zLnBhdGguam9pbigqcGF0aHMpCisgICAgdHJ5OgorICAgICAgICBkaXIgPSBvcy5wYXRoLmFic3BhdGgoZGlyKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBwYXNzCiAgICAgcmV0dXJuIGRpciwgb3MucGF0aC5ub3JtY2FzZShkaXIpCiAKIApAQCAtODQsOCArOTIsOCBAQAogICAgICAgICAgICAgY29udGludWUgICAjIGRvbid0IG1lc3Mgd2l0aCBhIFBFUCAzMDItc3VwcGxpZWQgX19maWxlX18KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbS5fX2ZpbGVfXyA9IG9zLnBhdGguYWJzcGF0aChtLl9fZmlsZV9fKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBjb250aW51ZQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKIAogCiBkZWYgcmVtb3ZlZHVwcGF0aHMoKToKQEAgLTExMSwxMSArMTE5LDExIEBACiBkZWYgYWRkYnVpbGRkaXIoKToKICAgICAiIiJBcHBlbmQgLi9idWlsZC9saWIuPHBsYXRmb3JtPiBpbiBjYXNlIHdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGJ1aWxkIGRpcgogICAgIChlc3BlY2lhbGx5IGZvciBHdWlkbyA6LSkiIiIKLSAgICBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KKyAgICBmcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X3BsYXRmb3JtCiAgICAgcyA9ICJidWlsZC9saWIuJXMtJS4zcyIgJSAoZ2V0X3BsYXRmb3JtKCksIHN5cy52ZXJzaW9uKQogICAgIGlmIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOgogICAgICAgICBzICs9ICctcHlkZWJ1ZycKLSAgICBzID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMucGF0aFstMV0pLCBzKQorICAgIHMgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHN5cy5wYXRoLnBvcCgpKSwgcykKICAgICBzeXMucGF0aC5hcHBlbmQocykKIAogCkBAIC0xNDgsMTcgKzE1NiwyNiBAQAogICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICByZXR1cm4KICAgICB3aXRoIGY6Ci0gICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgIGZvciBuLCBsaW5lIGluIGVudW1lcmF0ZShmKToKICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiIyIpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoKCJpbXBvcnQgIiwgImltcG9ydFx0IikpOgotICAgICAgICAgICAgICAgIGV4ZWMgbGluZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQotICAgICAgICAgICAgZGlyLCBkaXJjYXNlID0gbWFrZXBhdGgoc2l0ZWRpciwgbGluZSkKLSAgICAgICAgICAgIGlmIG5vdCBkaXJjYXNlIGluIGtub3duX3BhdGhzIGFuZCBvcy5wYXRoLmV4aXN0cyhkaXIpOgotICAgICAgICAgICAgICAgIHN5cy5wYXRoLmFwcGVuZChkaXIpCi0gICAgICAgICAgICAgICAga25vd25fcGF0aHMuYWRkKGRpcmNhc2UpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCgiaW1wb3J0ICIsICJpbXBvcnRcdCIpKToKKyAgICAgICAgICAgICAgICAgICAgZXhlYyBsaW5lCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBkaXIsIGRpcmNhc2UgPSBtYWtlcGF0aChzaXRlZGlyLCBsaW5lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkaXJjYXNlIGluIGtub3duX3BhdGhzIGFuZCBvcy5wYXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgICAgICAgICBzeXMucGF0aC5hcHBlbmQoZGlyKQorICAgICAgICAgICAgICAgICAgICBrbm93bl9wYXRocy5hZGQoZGlyY2FzZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIkVycm9yIHByb2Nlc3NpbmcgbGluZSB7OmR9IG9mIHt9OlxuIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIG4rMSwgZnVsbG5hbWUpCisgICAgICAgICAgICAgICAgZm9yIHJlY29yZCBpbiB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiByZWNvcmQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAnICAnK2xpbmUKKyAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJcblJlbWFpbmRlciBvZiBmaWxlIGlnbm9yZWQiCisgICAgICAgICAgICAgICAgYnJlYWsKICAgICBpZiByZXNldDoKICAgICAgICAga25vd25fcGF0aHMgPSBOb25lCiAgICAgcmV0dXJuIGtub3duX3BhdGhzCkBAIC0yMTIsODQgKzIyOSwxMDMgQEAKIAogICAgIHJldHVybiBUcnVlCiAKK2RlZiBnZXR1c2VyYmFzZSgpOgorICAgICIiIlJldHVybnMgdGhlIGB1c2VyIGJhc2VgIGRpcmVjdG9yeSBwYXRoLgorCisgICAgVGhlIGB1c2VyIGJhc2VgIGRpcmVjdG9yeSBjYW4gYmUgdXNlZCB0byBzdG9yZSBkYXRhLiBJZiB0aGUgZ2xvYmFsCisgICAgdmFyaWFibGUgYGBVU0VSX0JBU0VgYCBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBzZXQKKyAgICBpdC4KKyAgICAiIiIKKyAgICBnbG9iYWwgVVNFUl9CQVNFCisgICAgaWYgVVNFUl9CQVNFIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gVVNFUl9CQVNFCisgICAgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9jb25maWdfdmFyCisgICAgVVNFUl9CQVNFID0gZ2V0X2NvbmZpZ192YXIoJ3VzZXJiYXNlJykKKyAgICByZXR1cm4gVVNFUl9CQVNFCisKK2RlZiBnZXR1c2Vyc2l0ZXBhY2thZ2VzKCk6CisgICAgIiIiUmV0dXJucyB0aGUgdXNlci1zcGVjaWZpYyBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSBwYXRoLgorCisgICAgSWYgdGhlIGdsb2JhbCB2YXJpYWJsZSBgYFVTRVJfU0lURWBgIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQsIHRoaXMKKyAgICBmdW5jdGlvbiB3aWxsIGFsc28gc2V0IGl0LgorICAgICIiIgorICAgIGdsb2JhbCBVU0VSX1NJVEUKKyAgICB1c2VyX2Jhc2UgPSBnZXR1c2VyYmFzZSgpICMgdGhpcyB3aWxsIGFsc28gc2V0IFVTRVJfQkFTRQorCisgICAgaWYgVVNFUl9TSVRFIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gVVNFUl9TSVRFCisKKyAgICBmcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X3BhdGgKKyAgICBpbXBvcnQgb3MKKworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9jb25maWdfdmFyCisgICAgICAgIGlmIGdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgIFVTRVJfU0lURSA9IGdldF9wYXRoKCdwdXJlbGliJywgJ29zeF9mcmFtZXdvcmtfdXNlcicpCisgICAgICAgICAgICByZXR1cm4gVVNFUl9TSVRFCisKKyAgICBVU0VSX1NJVEUgPSBnZXRfcGF0aCgncHVyZWxpYicsICclc191c2VyJyAlIG9zLm5hbWUpCisgICAgcmV0dXJuIFVTRVJfU0lURQogCiBkZWYgYWRkdXNlcnNpdGVwYWNrYWdlcyhrbm93bl9wYXRocyk6CiAgICAgIiIiQWRkIGEgcGVyIHVzZXIgc2l0ZS1wYWNrYWdlIHRvIHN5cy5wYXRoCiAKICAgICBFYWNoIHVzZXIgaGFzIGl0cyBvd24gcHl0aG9uIGRpcmVjdG9yeSB3aXRoIHNpdGUtcGFja2FnZXMgaW4gdGhlCiAgICAgaG9tZSBkaXJlY3RvcnkuCi0KLSAgICBVU0VSX0JBU0UgaXMgdGhlIHJvb3QgZGlyZWN0b3J5IGZvciBhbGwgUHl0aG9uIHZlcnNpb25zCi0KLSAgICBVU0VSX1NJVEUgaXMgdGhlIHVzZXIgc3BlY2lmaWMgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkKLQotICAgIFVTRVJfU0lURS8uLiBjYW4gYmUgdXNlZCBmb3IgZGF0YS4KICAgICAiIiIKLSAgICBnbG9iYWwgVVNFUl9CQVNFLCBVU0VSX1NJVEUsIEVOQUJMRV9VU0VSX1NJVEUKLSAgICBlbnZfYmFzZSA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05VU0VSQkFTRSIsIE5vbmUpCisgICAgIyBnZXQgdGhlIHBlciB1c2VyIHNpdGUtcGFja2FnZSBwYXRoCisgICAgIyB0aGlzIGNhbGwgd2lsbCBhbHNvIG1ha2Ugc3VyZSBVU0VSX0JBU0UgYW5kIFVTRVJfU0lURSBhcmUgc2V0CisgICAgdXNlcl9zaXRlID0gZ2V0dXNlcnNpdGVwYWNrYWdlcygpCiAKLSAgICBkZWYgam9pbnVzZXIoKmFyZ3MpOgotICAgICAgICByZXR1cm4gb3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbigqYXJncykpCi0KLSAgICAjaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgotICAgICMgICAgIyBEb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUKLSAgICAjICAgIFVTRVJfQkFTRSA9ICcnCi0gICAgIyAgICBVU0VSX1NJVEUgPSAnJwotICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgYmFzZSA9IG9zLmVudmlyb24uZ2V0KCJBUFBEQVRBIikgb3IgIn4iCi0gICAgICAgIFVTRVJfQkFTRSA9IGVudl9iYXNlIGlmIGVudl9iYXNlIGVsc2Ugam9pbnVzZXIoYmFzZSwgIlB5dGhvbiIpCi0gICAgICAgIFVTRVJfU0lURSA9IG9zLnBhdGguam9pbihVU0VSX0JBU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIiArIHN5cy52ZXJzaW9uWzBdICsgc3lzLnZlcnNpb25bMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpCi0gICAgZWxzZToKLSAgICAgICAgVVNFUl9CQVNFID0gZW52X2Jhc2UgaWYgZW52X2Jhc2UgZWxzZSBqb2ludXNlcigifiIsICIubG9jYWwiKQotICAgICAgICBVU0VSX1NJVEUgPSBvcy5wYXRoLmpvaW4oVVNFUl9CQVNFLCAibGliIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKQotCi0gICAgaWYgRU5BQkxFX1VTRVJfU0lURSBhbmQgb3MucGF0aC5pc2RpcihVU0VSX1NJVEUpOgotICAgICAgICBhZGRzaXRlZGlyKFVTRVJfU0lURSwga25vd25fcGF0aHMpCisgICAgaWYgRU5BQkxFX1VTRVJfU0lURSBhbmQgb3MucGF0aC5pc2Rpcih1c2VyX3NpdGUpOgorICAgICAgICBhZGRzaXRlZGlyKHVzZXJfc2l0ZSwga25vd25fcGF0aHMpCiAgICAgcmV0dXJuIGtub3duX3BhdGhzCiAKK2RlZiBnZXRzaXRlcGFja2FnZXMoKToKKyAgICAiIiJSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIGFsbCBnbG9iYWwgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcmllcworICAgIChhbmQgcG9zc2libHkgc2l0ZS1weXRob24pLgogCi1kZWYgYWRkc2l0ZXBhY2thZ2VzKGtub3duX3BhdGhzKToKLSAgICAiIiJBZGQgc2l0ZS1wYWNrYWdlcyAoYW5kIHBvc3NpYmx5IHNpdGUtcHl0aG9uKSB0byBzeXMucGF0aCIiIgotICAgIHNpdGVkaXJzID0gW10KLSAgICBzZWVuID0gW10KKyAgICBGb3IgZWFjaCBkaXJlY3RvcnkgcHJlc2VudCBpbiB0aGUgZ2xvYmFsIGBgUFJFRklYRVNgYCwgdGhpcyBmdW5jdGlvbgorICAgIHdpbGwgZmluZCBpdHMgYHNpdGUtcGFja2FnZXNgIHN1YmRpcmVjdG9yeSBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbQorICAgIGVudmlyb25tZW50LCBhbmQgd2lsbCByZXR1cm4gYSBsaXN0IG9mIGZ1bGwgcGF0aHMuCisgICAgIiIiCisgICAgc2l0ZXBhY2thZ2VzID0gW10KKyAgICBzZWVuID0gc2V0KCkKIAogICAgIGZvciBwcmVmaXggaW4gUFJFRklYRVM6CiAgICAgICAgIGlmIG5vdCBwcmVmaXggb3IgcHJlZml4IGluIHNlZW46CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBzZWVuLmFwcGVuZChwcmVmaXgpCisgICAgICAgIHNlZW4uYWRkKHByZWZpeCkKIAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6Ci0gICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQogICAgICAgICBlbGlmIG9zLnNlcCA9PSAnLyc6Ci0gICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCi0gICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQocHJlZml4KQotICAgICAgICAgICAgc2l0ZWRpcnMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQotCisgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKHByZWZpeCkKKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXBhY2thZ2VzIikpCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKICAgICAgICAgICAgICMgZm9yIGZyYW1ld29yayBidWlsZHMgKm9ubHkqIHdlIGFkZCB0aGUgc3RhbmRhcmQgQXBwbGUKLSAgICAgICAgICAgICMgbG9jYXRpb25zLiBDdXJyZW50bHkgb25seSBwZXItdXNlciwgYnV0IC9MaWJyYXJ5IGFuZAotICAgICAgICAgICAgIyAvTmV0d29yay9MaWJyYXJ5IGNvdWxkIGJlIGFkZGVkIHRvbwotICAgICAgICAgICAgaWYgJ1B5dGhvbi5mcmFtZXdvcmsnIGluIHByZWZpeDoKLSAgICAgICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbigifiIsICJMaWJyYXJ5IiwgIlB5dGhvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnZlcnNpb25bOjNdLCAic2l0ZS1wYWNrYWdlcyIpKSkKKyAgICAgICAgICAgICMgbG9jYXRpb25zLgorICAgICAgICAgICAgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9jb25maWdfdmFyCisgICAgICAgICAgICBmcmFtZXdvcmsgPSBnZXRfY29uZmlnX3ZhcigiUFlUSE9ORlJBTUVXT1JLIikKKyAgICAgICAgICAgIGlmIGZyYW1ld29yayBhbmQgIi8lcy5mcmFtZXdvcmsvIiUoZnJhbWV3b3JrLCkgaW4gcHJlZml4OgorICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oIi9MaWJyYXJ5IiwgZnJhbWV3b3JrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy52ZXJzaW9uWzozXSwgInNpdGUtcGFja2FnZXMiKSkKKyAgICByZXR1cm4gc2l0ZXBhY2thZ2VzCiAKLSAgICBmb3Igc2l0ZWRpciBpbiBzaXRlZGlyczoKK2RlZiBhZGRzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpOgorICAgICIiIkFkZCBzaXRlLXBhY2thZ2VzIChhbmQgcG9zc2libHkgc2l0ZS1weXRob24pIHRvIHN5cy5wYXRoIiIiCisgICAgZm9yIHNpdGVkaXIgaW4gZ2V0c2l0ZXBhY2thZ2VzKCk6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2l0ZWRpcik6CiAgICAgICAgICAgICBhZGRzaXRlZGlyKHNpdGVkaXIsIGtub3duX3BhdGhzKQogCiAgICAgcmV0dXJuIGtub3duX3BhdGhzCiAKLQogZGVmIHNldEJFR0lOTElCUEFUSCgpOgogICAgICIiIlRoZSBPUy8yIEVNWCBwb3J0IGhhcyBvcHRpb25hbCBleHRlbnNpb24gbW9kdWxlcyB0aGF0IGRvIGRvdWJsZSBkdXR5CiAgICAgYXMgRExMcyAoYW5kIG11c3QgdXNlIHRoZSAuRExMIGZpbGUgZXh0ZW5zaW9uKSBmb3Igb3RoZXIgZXh0ZW5zaW9ucy4KQEAgLTMwOCw4ICszNDQsMTAgQEAKIAogCiBkZWYgc2V0cXVpdCgpOgotICAgICIiIkRlZmluZSBuZXcgYnVpbHQtaW5zICdxdWl0JyBhbmQgJ2V4aXQnLgotICAgIFRoZXNlIGFyZSBzaW1wbHkgc3RyaW5ncyB0aGF0IGRpc3BsYXkgYSBoaW50IG9uIGhvdyB0byBleGl0LgorICAgICIiIkRlZmluZSBuZXcgYnVpbHRpbnMgJ3F1aXQnIGFuZCAnZXhpdCcuCisKKyAgICBUaGVzZSBhcmUgb2JqZWN0cyB3aGljaCBtYWtlIHRoZSBpbnRlcnByZXRlciBleGl0IHdoZW4gY2FsbGVkLgorICAgIFRoZSByZXByIG9mIGVhY2ggb2JqZWN0IGNvbnRhaW5zIGEgaGludCBhdCBob3cgaXQgd29ya3MuCiAKICAgICAiIiIKICAgICBpZiBvcy5zZXAgPT0gJzonOgpAQCAtNDE2LDcgKzQ1NCw3IEBACiAKIAogY2xhc3MgX0hlbHBlcihvYmplY3QpOgotICAgICIiIkRlZmluZSB0aGUgYnVpbHQtaW4gJ2hlbHAnLgorICAgICIiIkRlZmluZSB0aGUgYnVpbHRpbiAnaGVscCcuCiAgICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHB5ZG9jLmhlbHAgKHdpdGggYSB0d2lzdCkuCiAKICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9zbXRwZC5weSBiL0xpYi9zbXRwZC5weQppbmRleCA5NGJkOGU2Li5lMDU0NGU0IDEwMDc1NQotLS0gYS9MaWIvc210cGQucHkKKysrIGIvTGliL3NtdHBkLnB5CkBAIC0zNSw3ICszNSw2IEBACiBhbmQgaWYgcmVtb3RlcG9ydCBpcyBub3QgZ2l2ZW4sIHRoZW4gMjUgaXMgdXNlZC4KICIiIgogCi0MCiAjIE92ZXJ2aWV3OgogIwogIyBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgbWluaW1hbCBTTVRQIHByb3RvY29sIGFzIGRlZmluZWQgaW4gUkZDIDgyMS4gIEl0CkBAIC05Niw3ICs5NSw2IEBACiBDT01NQVNQQUNFID0gJywgJwogCiAKLQwKIGRlZiB1c2FnZShjb2RlLCBtc2c9JycpOgogICAgIHByaW50ID4+IHN5cy5zdGRlcnIsIF9fZG9jX18gJSBnbG9iYWxzKCkKICAgICBpZiBtc2c6CkBAIC0xMDQsNyArMTAyLDYgQEAKICAgICBzeXMuZXhpdChjb2RlKQogCiAKLQwKIGNsYXNzIFNNVFBDaGFubmVsKGFzeW5jaGF0LmFzeW5jX2NoYXQpOgogICAgIENPTU1BTkQgPSAwCiAgICAgREFUQSA9IDEKQEAgLTEyMywxMSArMTIwLDExIEBACiAgICAgICAgIHNlbGYuX19mcWRuID0gc29ja2V0LmdldGZxZG4oKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9fcGVlciA9IGNvbm4uZ2V0cGVlcm5hbWUoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZXJyOgogICAgICAgICAgICAgIyBhIHJhY2UgY29uZGl0aW9uICBtYXkgb2NjdXIgaWYgdGhlIG90aGVyIGVuZCBpcyBjbG9zaW5nCiAgICAgICAgICAgICAjIGJlZm9yZSB3ZSBjYW4gZ2V0IHRoZSBwZWVybmFtZQogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICBpZiBlcnIuYXJnc1swXSAhPSBlcnJuby5FTk9UQ09OTjoKKyAgICAgICAgICAgIGlmIGVyclswXSAhPSBlcnJuby5FTk9UQ09OTjoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHByaW50ID4+IERFQlVHU1RSRUFNLCAnUGVlcjonLCByZXByKHNlbGYuX19wZWVyKQpAQCAtMjc2LDcgKzI3Myw2IEBACiAgICAgICAgIHNlbGYucHVzaCgnMzU0IEVuZCBkYXRhIHdpdGggPENSPjxMRj4uPENSPjxMRj4nKQogCiAKLQwKIGNsYXNzIFNNVFBTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2FsYWRkciwgcmVtb3RlYWRkcik6CiAgICAgICAgIHNlbGYuX2xvY2FsYWRkciA9IGxvY2FsYWRkcgpAQCAtMjk5LDIyICsyOTUsMTEgQEAKICAgICAgICAgICAgICAgICBsb2NhbGFkZHIsIHJlbW90ZWFkZHIpCiAKICAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuYWNjZXB0KCkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICMgc29tZXRpbWVzIGFjY2VwdCgpIG1pZ2h0IHJldHVybiBOb25lCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAjIEVDT05OQUJPUlRFRCBtaWdodCBiZSB0aHJvd24KLSAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdICE9IGVycm5vLkVDT05OQUJPUlRFRDoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIHNvbWV0aW1lcyBhZGRyID09IE5vbmUgaW5zdGVhZCBvZiAoaXAsIHBvcnQpCi0gICAgICAgICAgICBpZiBhZGRyID09IE5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHByaW50ID4+IERFQlVHU1RSRUFNLCAnSW5jb21pbmcgY29ubmVjdGlvbiBmcm9tICVzJyAlIHJlcHIoYWRkcikKLSAgICAgICAgY2hhbm5lbCA9IFNNVFBDaGFubmVsKHNlbGYsIGNvbm4sIGFkZHIpCisgICAgICAgIHBhaXIgPSBzZWxmLmFjY2VwdCgpCisgICAgICAgIGlmIHBhaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjb25uLCBhZGRyID0gcGFpcgorICAgICAgICAgICAgcHJpbnQgPj4gREVCVUdTVFJFQU0sICdJbmNvbWluZyBjb25uZWN0aW9uIGZyb20gJXMnICUgcmVwcihhZGRyKQorICAgICAgICAgICAgY2hhbm5lbCA9IFNNVFBDaGFubmVsKHNlbGYsIGNvbm4sIGFkZHIpCiAKICAgICAjIEFQSSBmb3IgImRvaW5nIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGUgbWVzc2FnZSIKICAgICBkZWYgcHJvY2Vzc19tZXNzYWdlKHNlbGYsIHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKToKQEAgLTM0Miw3ICszMjcsNiBAQAogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAotDAogY2xhc3MgRGVidWdnaW5nU2VydmVyKFNNVFBTZXJ2ZXIpOgogICAgICMgRG8gc29tZXRoaW5nIHdpdGggdGhlIGdhdGhlcmVkIG1lc3NhZ2UKICAgICBkZWYgcHJvY2Vzc19tZXNzYWdlKHNlbGYsIHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKToKQEAgLTM1OCw3ICszNDIsNiBAQAogICAgICAgICBwcmludCAnLS0tLS0tLS0tLS0tIEVORCBNRVNTQUdFIC0tLS0tLS0tLS0tLScKIAogCi0MCiBjbGFzcyBQdXJlUHJveHkoU01UUFNlcnZlcik6CiAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CiAgICAgICAgIGxpbmVzID0gZGF0YS5zcGxpdCgnXG4nKQpAQCAtMzk5LDcgKzM4Miw2IEBACiAgICAgICAgIHJldHVybiByZWZ1c2VkCiAKIAotDAogY2xhc3MgTWFpbG1hblByb3h5KFB1cmVQcm94eSk6CiAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CiAgICAgICAgIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwpAQCAtNDc4LDEzICs0NjAsMTEgQEAKICAgICAgICAgICAgICAgICBtc2cuRW5xdWV1ZShtbGlzdCwgdG9yZXF1ZXN0PTEpCiAKIAotDAogY2xhc3MgT3B0aW9uczoKICAgICBzZXR1aWQgPSAxCiAgICAgY2xhc3NuYW1lID0gJ1B1cmVQcm94eScKIAogCi0MCiBkZWYgcGFyc2VhcmdzKCk6CiAgICAgZ2xvYmFsIERFQlVHU1RSRUFNCiAgICAgdHJ5OgpAQCAtNTQxLDcgKzUyMSw2IEBACiAgICAgcmV0dXJuIG9wdGlvbnMKIAogCi0MCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG9wdGlvbnMgPSBwYXJzZWFyZ3MoKQogICAgICMgQmVjb21lIG5vYm9keQpkaWZmIC0tZ2l0IGEvTGliL3NtdHBsaWIucHkgYi9MaWIvc210cGxpYi5weQppbmRleCA0MWEzYzk3Li5lN2QzNzg2IDEwMDc1NQotLS0gYS9MaWIvc210cGxpYi5weQorKysgYi9MaWIvc210cGxpYi5weQpAQCAtNDksMTcgKzQ5LDE4IEBACiBmcm9tIGVtYWlsLmJhc2U2NG1pbWUgaW1wb3J0IGVuY29kZSBhcyBlbmNvZGVfYmFzZTY0CiBmcm9tIHN5cyBpbXBvcnQgc3RkZXJyCiAKLV9fYWxsX18gPSBbIlNNVFBFeGNlcHRpb24iLCJTTVRQU2VydmVyRGlzY29ubmVjdGVkIiwiU01UUFJlc3BvbnNlRXhjZXB0aW9uIiwKLSAgICAgICAgICAgIlNNVFBTZW5kZXJSZWZ1c2VkIiwiU01UUFJlY2lwaWVudHNSZWZ1c2VkIiwiU01UUERhdGFFcnJvciIsCi0gICAgICAgICAgICJTTVRQQ29ubmVjdEVycm9yIiwiU01UUEhlbG9FcnJvciIsIlNNVFBBdXRoZW50aWNhdGlvbkVycm9yIiwKLSAgICAgICAgICAgInF1b3RlYWRkciIsInF1b3RlZGF0YSIsIlNNVFAiXQorX19hbGxfXyA9IFsiU01UUEV4Y2VwdGlvbiIsICJTTVRQU2VydmVyRGlzY29ubmVjdGVkIiwgIlNNVFBSZXNwb25zZUV4Y2VwdGlvbiIsCisgICAgICAgICAgICJTTVRQU2VuZGVyUmVmdXNlZCIsICJTTVRQUmVjaXBpZW50c1JlZnVzZWQiLCAiU01UUERhdGFFcnJvciIsCisgICAgICAgICAgICJTTVRQQ29ubmVjdEVycm9yIiwgIlNNVFBIZWxvRXJyb3IiLCAiU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IiLAorICAgICAgICAgICAicXVvdGVhZGRyIiwgInF1b3RlZGF0YSIsICJTTVRQIl0KIAogU01UUF9QT1JUID0gMjUKIFNNVFBfU1NMX1BPUlQgPSA0NjUKLUNSTEY9IlxyXG4iCitDUkxGID0gIlxyXG4iCiAKIE9MRFNUWUxFX0FVVEggPSByZS5jb21waWxlKHIiYXV0aD0oLiopIiwgcmUuSSkKIAorCiAjIEV4Y2VwdGlvbiBjbGFzc2VzIHVzZWQgYnkgdGhpcyBtb2R1bGUuCiBjbGFzcyBTTVRQRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgYWxsIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoaXMgbW9kdWxlLiIiIgpAQCAtMTA5LDcgKzExMCw3IEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjaXBpZW50cyk6CiAgICAgICAgIHNlbGYucmVjaXBpZW50cyA9IHJlY2lwaWVudHMKLSAgICAgICAgc2VsZi5hcmdzID0gKCByZWNpcGllbnRzLCkKKyAgICAgICAgc2VsZi5hcmdzID0gKHJlY2lwaWVudHMsKQogCiAKIGNsYXNzIFNNVFBEYXRhRXJyb3IoU01UUFJlc3BvbnNlRXhjZXB0aW9uKToKQEAgLTEyOCw2ICsxMjksNyBAQAogICAgIGNvbWJpbmF0aW9uIHByb3ZpZGVkLgogICAgICIiIgogCisKIGRlZiBxdW90ZWFkZHIoYWRkcik6CiAgICAgIiIiUXVvdGUgYSBzdWJzZXQgb2YgdGhlIGVtYWlsIGFkZHJlc3NlcyBkZWZpbmVkIGJ5IFJGQyA4MjEuCiAKQEAgLTEzOCw3ICsxNDAsNyBAQAogICAgICAgICBtID0gZW1haWwudXRpbHMucGFyc2VhZGRyKGFkZHIpWzFdCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICBwYXNzCi0gICAgaWYgbSA9PSAoTm9uZSwgTm9uZSk6ICMgSW5kaWNhdGVzIHBhcnNlIGZhaWx1cmUgb3IgQXR0cmlidXRlRXJyb3IKKyAgICBpZiBtID09IChOb25lLCBOb25lKTogICMgSW5kaWNhdGVzIHBhcnNlIGZhaWx1cmUgb3IgQXR0cmlidXRlRXJyb3IKICAgICAgICAgIyBzb21ldGhpbmcgd2VpcmQgaGVyZS4uIHB1bnQgLWRkbQogICAgICAgICByZXR1cm4gIjwlcz4iICUgYWRkcgogICAgIGVsaWYgbSBpcyBOb25lOgpAQCAtMTc1LDcgKzE3Nyw4IEBACiAgICAgICAgICAgICBjaHIgPSBOb25lCiAgICAgICAgICAgICB3aGlsZSBjaHIgIT0gIlxuIjoKICAgICAgICAgICAgICAgICBjaHIgPSBzZWxmLnNzbG9iai5yZWFkKDEpCi0gICAgICAgICAgICAgICAgaWYgbm90IGNocjogYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgY2hyOgorICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHN0ciArPSBjaHIKICAgICAgICAgICAgIHJldHVybiBzdHIKIApAQCAtMjY5LDEwICsyNzIsMTEgQEAKICAgICBkZWYgX2dldF9zb2NrZXQoc2VsZiwgcG9ydCwgaG9zdCwgdGltZW91dCk6CiAgICAgICAgICMgVGhpcyBtYWtlcyBpdCBzaW1wbGVyIGZvciBTTVRQX1NTTCB0byB1c2UgdGhlIFNNVFAgY29ubmVjdCBjb2RlCiAgICAgICAgICMgYW5kIGp1c3QgYWx0ZXIgdGhlIHNvY2tldCBjb25uZWN0aW9uIGJpdC4KLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQ+PnN0ZGVyciwgJ2Nvbm5lY3Q6JywgKGhvc3QsIHBvcnQpCisgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CisgICAgICAgICAgICBwcmludD4+c3RkZXJyLCAnY29ubmVjdDonLCAoaG9zdCwgcG9ydCkKICAgICAgICAgcmV0dXJuIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigocG9ydCwgaG9zdCksIHRpbWVvdXQpCiAKLSAgICBkZWYgY29ubmVjdChzZWxmLCBob3N0PSdsb2NhbGhvc3QnLCBwb3J0ID0gMCk6CisgICAgZGVmIGNvbm5lY3Qoc2VsZiwgaG9zdD0nbG9jYWxob3N0JywgcG9ydD0wKToKICAgICAgICAgIiIiQ29ubmVjdCB0byBhIGhvc3Qgb24gYSBnaXZlbiBwb3J0LgogCiAgICAgICAgIElmIHRoZSBob3N0bmFtZSBlbmRzIHdpdGggYSBjb2xvbiAoYDonKSBmb2xsb3dlZCBieSBhIG51bWJlciwgYW5kCkBAIC0yODYsMjAgKzI5MCwyNSBAQAogICAgICAgICBpZiBub3QgcG9ydCBhbmQgKGhvc3QuZmluZCgnOicpID09IGhvc3QucmZpbmQoJzonKSk6CiAgICAgICAgICAgICBpID0gaG9zdC5yZmluZCgnOicpCiAgICAgICAgICAgICBpZiBpID49IDA6Ci0gICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IGhvc3RbOmldLCBob3N0W2krMTpdCi0gICAgICAgICAgICAgICAgdHJ5OiBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IGhvc3RbOmldLCBob3N0W2kgKyAxOl0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yLCAibm9ubnVtZXJpYyBwb3J0IgotICAgICAgICBpZiBub3QgcG9ydDogcG9ydCA9IHNlbGYuZGVmYXVsdF9wb3J0Ci0gICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50Pj5zdGRlcnIsICdjb25uZWN0OicsIChob3N0LCBwb3J0KQorICAgICAgICBpZiBub3QgcG9ydDoKKyAgICAgICAgICAgIHBvcnQgPSBzZWxmLmRlZmF1bHRfcG9ydAorICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgcHJpbnQ+PnN0ZGVyciwgJ2Nvbm5lY3Q6JywgKGhvc3QsIHBvcnQpCiAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2dldF9zb2NrZXQoaG9zdCwgcG9ydCwgc2VsZi50aW1lb3V0KQogICAgICAgICAoY29kZSwgbXNnKSA9IHNlbGYuZ2V0cmVwbHkoKQotICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludD4+c3RkZXJyLCAiY29ubmVjdDoiLCBtc2cKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgIHByaW50Pj5zdGRlcnIsICJjb25uZWN0OiIsIG1zZwogICAgICAgICByZXR1cm4gKGNvZGUsIG1zZykKIAogICAgIGRlZiBzZW5kKHNlbGYsIHN0cik6CiAgICAgICAgICIiIlNlbmQgYHN0cicgdG8gdGhlIHNlcnZlci4iIiIKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQ+PnN0ZGVyciwgJ3NlbmQ6JywgcmVwcihzdHIpCisgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CisgICAgICAgICAgICBwcmludD4+c3RkZXJyLCAnc2VuZDonLCByZXByKHN0cikKICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnc29jaycpIGFuZCBzZWxmLnNvY2s6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwoc3RyKQpAQCAtMzMwLDE3ICszMzksMjEgQEAKIAogICAgICAgICBSYWlzZXMgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCBpZiBlbmQtb2YtZmlsZSBpcyByZWFjaGVkLgogICAgICAgICAiIiIKLSAgICAgICAgcmVzcD1bXQorICAgICAgICByZXNwID0gW10KICAgICAgICAgaWYgc2VsZi5maWxlIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUoJ3JiJykKICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGxpbmUgPSBzZWxmLmZpbGUucmVhZGxpbmUoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLmZpbGUucmVhZGxpbmUoKQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBsaW5lID0gJycKICAgICAgICAgICAgIGlmIGxpbmUgPT0gJyc6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCgiQ29ubmVjdGlvbiB1bmV4cGVjdGVkbHkgY2xvc2VkIikKLSAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50Pj5zdGRlcnIsICdyZXBseTonLCByZXByKGxpbmUpCisgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgICAgIHByaW50Pj5zdGRlcnIsICdyZXBseTonLCByZXByKGxpbmUpCiAgICAgICAgICAgICByZXNwLmFwcGVuZChsaW5lWzQ6XS5zdHJpcCgpKQotICAgICAgICAgICAgY29kZT1saW5lWzozXQorICAgICAgICAgICAgY29kZSA9IGxpbmVbOjNdCiAgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGVycm9yIGNvZGUgaXMgc3ludGFjdGljYWxseSBjb3JyZWN0LgogICAgICAgICAgICAgIyBEb24ndCBhdHRlbXB0IHRvIHJlYWQgYSBjb250aW51YXRpb24gbGluZSBpZiBpdCBpcyBicm9rZW4uCiAgICAgICAgICAgICB0cnk6CkBAIC0zNDksMTcgKzM2MiwxNyBAQAogICAgICAgICAgICAgICAgIGVycmNvZGUgPSAtMQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAjIENoZWNrIGlmIG11bHRpbGluZSByZXNwb25zZS4KLSAgICAgICAgICAgIGlmIGxpbmVbMzo0XSE9Ii0iOgorICAgICAgICAgICAgaWYgbGluZVszOjRdICE9ICItIjoKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIGVycm1zZyA9ICJcbiIuam9pbihyZXNwKQogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgotICAgICAgICAgICAgcHJpbnQ+PnN0ZGVyciwgJ3JlcGx5OiByZXRjb2RlICglcyk7IE1zZzogJXMnICUgKGVycmNvZGUsZXJybXNnKQorICAgICAgICAgICAgcHJpbnQ+PnN0ZGVyciwgJ3JlcGx5OiByZXRjb2RlICglcyk7IE1zZzogJXMnICUgKGVycmNvZGUsIGVycm1zZykKICAgICAgICAgcmV0dXJuIGVycmNvZGUsIGVycm1zZwogCiAgICAgZGVmIGRvY21kKHNlbGYsIGNtZCwgYXJncz0iIik6CiAgICAgICAgICIiIlNlbmQgYSBjb21tYW5kLCBhbmQgcmV0dXJuIGl0cyByZXNwb25zZSBjb2RlLiIiIgotICAgICAgICBzZWxmLnB1dGNtZChjbWQsYXJncykKKyAgICAgICAgc2VsZi5wdXRjbWQoY21kLCBhcmdzKQogICAgICAgICByZXR1cm4gc2VsZi5nZXRyZXBseSgpCiAKICAgICAjIHN0ZCBzbXRwIGNvbW1hbmRzCkBAIC0zNjksOSArMzgyLDkgQEAKICAgICAgICAgaG9zdC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYucHV0Y21kKCJoZWxvIiwgbmFtZSBvciBzZWxmLmxvY2FsX2hvc3RuYW1lKQotICAgICAgICAoY29kZSxtc2cpPXNlbGYuZ2V0cmVwbHkoKQotICAgICAgICBzZWxmLmhlbG9fcmVzcD1tc2cKLSAgICAgICAgcmV0dXJuIChjb2RlLG1zZykKKyAgICAgICAgKGNvZGUsIG1zZykgPSBzZWxmLmdldHJlcGx5KCkKKyAgICAgICAgc2VsZi5oZWxvX3Jlc3AgPSBtc2cKKyAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCiAKICAgICBkZWYgZWhsbyhzZWxmLCBuYW1lPScnKToKICAgICAgICAgIiIiIFNNVFAgJ2VobG8nIGNvbW1hbmQuCkBAIC0zODAsMTkgKzM5MywxOSBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5lc210cF9mZWF0dXJlcyA9IHt9CiAgICAgICAgIHNlbGYucHV0Y21kKHNlbGYuZWhsb19tc2csIG5hbWUgb3Igc2VsZi5sb2NhbF9ob3N0bmFtZSkKLSAgICAgICAgKGNvZGUsbXNnKT1zZWxmLmdldHJlcGx5KCkKKyAgICAgICAgKGNvZGUsIG1zZykgPSBzZWxmLmdldHJlcGx5KCkKICAgICAgICAgIyBBY2NvcmRpbmcgdG8gUkZDMTg2OSBzb21lIChiYWRseSB3cml0dGVuKQogICAgICAgICAjIE1UQSdzIHdpbGwgZGlzY29ubmVjdCBvbiBhbiBlaGxvLiBUb3NzIGFuIGV4Y2VwdGlvbiBpZgogICAgICAgICAjIHRoYXQgaGFwcGVucyAtZGRtCiAgICAgICAgIGlmIGNvZGUgPT0gLTEgYW5kIGxlbihtc2cpID09IDA6CiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgIHJhaXNlIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQoIlNlcnZlciBub3QgY29ubmVjdGVkIikKLSAgICAgICAgc2VsZi5laGxvX3Jlc3A9bXNnCisgICAgICAgIHNlbGYuZWhsb19yZXNwID0gbXNnCiAgICAgICAgIGlmIGNvZGUgIT0gMjUwOgotICAgICAgICAgICAgcmV0dXJuIChjb2RlLG1zZykKLSAgICAgICAgc2VsZi5kb2VzX2VzbXRwPTEKKyAgICAgICAgICAgIHJldHVybiAoY29kZSwgbXNnKQorICAgICAgICBzZWxmLmRvZXNfZXNtdHAgPSAxCiAgICAgICAgICNwYXJzZSB0aGUgZWhsbyByZXNwb25zZSAtZGRtCi0gICAgICAgIHJlc3A9c2VsZi5laGxvX3Jlc3Auc3BsaXQoJ1xuJykKKyAgICAgICAgcmVzcCA9IHNlbGYuZWhsb19yZXNwLnNwbGl0KCdcbicpCiAgICAgICAgIGRlbCByZXNwWzBdCiAgICAgICAgIGZvciBlYWNoIGluIHJlc3A6CiAgICAgICAgICAgICAjIFRvIGJlIGFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBhcyBtYW55IFNNVFAgc2VydmVycyBhcyBwb3NzaWJsZSwKQEAgLTQxMiwxNiArNDI1LDE2IEBACiAgICAgICAgICAgICAjIEl0J3MgYWN0dWFsbHkgc3RyaWN0ZXIsIGluIHRoYXQgb25seSBzcGFjZXMgYXJlIGFsbG93ZWQgYmV0d2VlbgogICAgICAgICAgICAgIyBwYXJhbWV0ZXJzLCBidXQgd2VyZSBub3QgZ29pbmcgdG8gY2hlY2sgZm9yIHRoYXQgaGVyZS4gIE5vdGUKICAgICAgICAgICAgICMgdGhhdCB0aGUgc3BhY2UgaXNuJ3QgcHJlc2VudCBpZiB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycy4KLSAgICAgICAgICAgIG09cmUubWF0Y2gocicoP1A8ZmVhdHVyZT5bQS1aYS16MC05XVtBLVphLXowLTlcLV0qKSA/JyxlYWNoKQorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHInKD9QPGZlYXR1cmU+W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKikgPycsIGVhY2gpCiAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgIGZlYXR1cmU9bS5ncm91cCgiZmVhdHVyZSIpLmxvd2VyKCkKLSAgICAgICAgICAgICAgICBwYXJhbXM9bS5zdHJpbmdbbS5lbmQoImZlYXR1cmUiKTpdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBmZWF0dXJlID0gbS5ncm91cCgiZmVhdHVyZSIpLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBwYXJhbXMgPSBtLnN0cmluZ1ttLmVuZCgiZmVhdHVyZSIpOl0uc3RyaXAoKQogICAgICAgICAgICAgICAgIGlmIGZlYXR1cmUgPT0gImF1dGgiOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmVzbXRwX2ZlYXR1cmVzW2ZlYXR1cmVdID0gc2VsZi5lc210cF9mZWF0dXJlcy5nZXQoZmVhdHVyZSwgIiIpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgIiArIHBhcmFtcwogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXNbZmVhdHVyZV09cGFyYW1zCi0gICAgICAgIHJldHVybiAoY29kZSxtc2cpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXNbZmVhdHVyZV0gPSBwYXJhbXMKKyAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCiAKICAgICBkZWYgaGFzX2V4dG4oc2VsZiwgb3B0KToKICAgICAgICAgIiIiRG9lcyB0aGUgc2VydmVyIHN1cHBvcnQgYSBnaXZlbiBTTVRQIHNlcnZpY2UgZXh0ZW5zaW9uPyIiIgpAQCAtNDQxLDIzICs0NTQsMjMgQEAKICAgICAgICAgIiIiU01UUCAnbm9vcCcgY29tbWFuZCAtLSBkb2Vzbid0IGRvIGFueXRoaW5nIDo+IiIiCiAgICAgICAgIHJldHVybiBzZWxmLmRvY21kKCJub29wIikKIAotICAgIGRlZiBtYWlsKHNlbGYsc2VuZGVyLG9wdGlvbnM9W10pOgorICAgIGRlZiBtYWlsKHNlbGYsIHNlbmRlciwgb3B0aW9ucz1bXSk6CiAgICAgICAgICIiIlNNVFAgJ21haWwnIGNvbW1hbmQgLS0gYmVnaW5zIG1haWwgeGZlciBzZXNzaW9uLiIiIgogICAgICAgICBvcHRpb25saXN0ID0gJycKICAgICAgICAgaWYgb3B0aW9ucyBhbmQgc2VsZi5kb2VzX2VzbXRwOgogICAgICAgICAgICAgb3B0aW9ubGlzdCA9ICcgJyArICcgJy5qb2luKG9wdGlvbnMpCi0gICAgICAgIHNlbGYucHV0Y21kKCJtYWlsIiwgIkZST006JXMlcyIgJSAocXVvdGVhZGRyKHNlbmRlcikgLG9wdGlvbmxpc3QpKQorICAgICAgICBzZWxmLnB1dGNtZCgibWFpbCIsICJGUk9NOiVzJXMiICUgKHF1b3RlYWRkcihzZW5kZXIpLCBvcHRpb25saXN0KSkKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0cmVwbHkoKQogCi0gICAgZGVmIHJjcHQoc2VsZixyZWNpcCxvcHRpb25zPVtdKToKKyAgICBkZWYgcmNwdChzZWxmLCByZWNpcCwgb3B0aW9ucz1bXSk6CiAgICAgICAgICIiIlNNVFAgJ3JjcHQnIGNvbW1hbmQgLS0gaW5kaWNhdGVzIDEgcmVjaXBpZW50IGZvciB0aGlzIG1haWwuIiIiCiAgICAgICAgIG9wdGlvbmxpc3QgPSAnJwogICAgICAgICBpZiBvcHRpb25zIGFuZCBzZWxmLmRvZXNfZXNtdHA6CiAgICAgICAgICAgICBvcHRpb25saXN0ID0gJyAnICsgJyAnLmpvaW4ob3B0aW9ucykKLSAgICAgICAgc2VsZi5wdXRjbWQoInJjcHQiLCJUTzolcyVzIiAlIChxdW90ZWFkZHIocmVjaXApLG9wdGlvbmxpc3QpKQorICAgICAgICBzZWxmLnB1dGNtZCgicmNwdCIsICJUTzolcyVzIiAlIChxdW90ZWFkZHIocmVjaXApLCBvcHRpb25saXN0KSkKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0cmVwbHkoKQogCi0gICAgZGVmIGRhdGEoc2VsZixtc2cpOgorICAgIGRlZiBkYXRhKHNlbGYsIG1zZyk6CiAgICAgICAgICIiIlNNVFAgJ0RBVEEnIGNvbW1hbmQgLS0gc2VuZHMgbWVzc2FnZSBkYXRhIHRvIHNlcnZlci4KIAogICAgICAgICBBdXRvbWF0aWNhbGx5IHF1b3RlcyBsaW5lcyBiZWdpbm5pbmcgd2l0aCBhIHBlcmlvZCBwZXIgcmZjODIxLgpAQCAtNDY2LDI2ICs0NzksMjggQEAKICAgICAgICAgcmVzcG9uc2UgY29kZSByZWNlaXZlZCB3aGVuIHRoZSBhbGwgZGF0YSBpcyBzZW50LgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5wdXRjbWQoImRhdGEiKQotICAgICAgICAoY29kZSxyZXBsKT1zZWxmLmdldHJlcGx5KCkKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4wIDogcHJpbnQ+PnN0ZGVyciwgImRhdGE6IiwgKGNvZGUscmVwbCkKKyAgICAgICAgKGNvZGUsIHJlcGwpID0gc2VsZi5nZXRyZXBseSgpCisgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CisgICAgICAgICAgICBwcmludD4+c3RkZXJyLCAiZGF0YToiLCAoY29kZSwgcmVwbCkKICAgICAgICAgaWYgY29kZSAhPSAzNTQ6Ci0gICAgICAgICAgICByYWlzZSBTTVRQRGF0YUVycm9yKGNvZGUscmVwbCkKKyAgICAgICAgICAgIHJhaXNlIFNNVFBEYXRhRXJyb3IoY29kZSwgcmVwbCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHEgPSBxdW90ZWRhdGEobXNnKQogICAgICAgICAgICAgaWYgcVstMjpdICE9IENSTEY6CiAgICAgICAgICAgICAgICAgcSA9IHEgKyBDUkxGCiAgICAgICAgICAgICBxID0gcSArICIuIiArIENSTEYKICAgICAgICAgICAgIHNlbGYuc2VuZChxKQotICAgICAgICAgICAgKGNvZGUsbXNnKT1zZWxmLmdldHJlcGx5KCkKLSAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+MCA6IHByaW50Pj5zdGRlcnIsICJkYXRhOiIsIChjb2RlLG1zZykKLSAgICAgICAgICAgIHJldHVybiAoY29kZSxtc2cpCisgICAgICAgICAgICAoY29kZSwgbXNnKSA9IHNlbGYuZ2V0cmVwbHkoKQorICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgICAgICBwcmludD4+c3RkZXJyLCAiZGF0YToiLCAoY29kZSwgbXNnKQorICAgICAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCiAKICAgICBkZWYgdmVyaWZ5KHNlbGYsIGFkZHJlc3MpOgogICAgICAgICAiIiJTTVRQICd2ZXJpZnknIGNvbW1hbmQgLS0gY2hlY2tzIGZvciBhZGRyZXNzIHZhbGlkaXR5LiIiIgogICAgICAgICBzZWxmLnB1dGNtZCgidnJmeSIsIHF1b3RlYWRkcihhZGRyZXNzKSkKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0cmVwbHkoKQogICAgICMgYS5rLmEuCi0gICAgdnJmeT12ZXJpZnkKKyAgICB2cmZ5ID0gdmVyaWZ5CiAKICAgICBkZWYgZXhwbihzZWxmLCBhZGRyZXNzKToKICAgICAgICAgIiIiU01UUCAnZXhwbicgY29tbWFuZCAtLSBleHBhbmRzIGEgbWFpbGluZyBsaXN0LiIiIgpAQCAtNTg5LDcgKzYwNCw3IEBACiAgICAgICAgICAgICByYWlzZSBTTVRQQXV0aGVudGljYXRpb25FcnJvcihjb2RlLCByZXNwKQogICAgICAgICByZXR1cm4gKGNvZGUsIHJlc3ApCiAKLSAgICBkZWYgc3RhcnR0bHMoc2VsZiwga2V5ZmlsZSA9IE5vbmUsIGNlcnRmaWxlID0gTm9uZSk6CisgICAgZGVmIHN0YXJ0dGxzKHNlbGYsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSk6CiAgICAgICAgICIiIlB1dHMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIFNNVFAgc2VydmVyIGludG8gVExTIG1vZGUuCiAKICAgICAgICAgSWYgdGhlcmUgaGFzIGJlZW4gbm8gcHJldmlvdXMgRUhMTyBvciBIRUxPIGNvbW1hbmQgdGhpcyBzZXNzaW9uLCB0aGlzCkBAIC02OTIsMjIgKzcwNywyMiBAQAogICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBtYWlsX29wdGlvbnM6CiAgICAgICAgICAgICAgICAgZXNtdHBfb3B0cy5hcHBlbmQob3B0aW9uKQogCi0gICAgICAgIChjb2RlLHJlc3ApID0gc2VsZi5tYWlsKGZyb21fYWRkciwgZXNtdHBfb3B0cykKKyAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5tYWlsKGZyb21fYWRkciwgZXNtdHBfb3B0cykKICAgICAgICAgaWYgY29kZSAhPSAyNTA6CiAgICAgICAgICAgICBzZWxmLnJzZXQoKQogICAgICAgICAgICAgcmFpc2UgU01UUFNlbmRlclJlZnVzZWQoY29kZSwgcmVzcCwgZnJvbV9hZGRyKQotICAgICAgICBzZW5kZXJycz17fQorICAgICAgICBzZW5kZXJycyA9IHt9CiAgICAgICAgIGlmIGlzaW5zdGFuY2UodG9fYWRkcnMsIGJhc2VzdHJpbmcpOgogICAgICAgICAgICAgdG9fYWRkcnMgPSBbdG9fYWRkcnNdCiAgICAgICAgIGZvciBlYWNoIGluIHRvX2FkZHJzOgotICAgICAgICAgICAgKGNvZGUscmVzcCk9c2VsZi5yY3B0KGVhY2gsIHJjcHRfb3B0aW9ucykKKyAgICAgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYucmNwdChlYWNoLCByY3B0X29wdGlvbnMpCiAgICAgICAgICAgICBpZiAoY29kZSAhPSAyNTApIGFuZCAoY29kZSAhPSAyNTEpOgotICAgICAgICAgICAgICAgIHNlbmRlcnJzW2VhY2hdPShjb2RlLHJlc3ApCi0gICAgICAgIGlmIGxlbihzZW5kZXJycyk9PWxlbih0b19hZGRycyk6CisgICAgICAgICAgICAgICAgc2VuZGVycnNbZWFjaF0gPSAoY29kZSwgcmVzcCkKKyAgICAgICAgaWYgbGVuKHNlbmRlcnJzKSA9PSBsZW4odG9fYWRkcnMpOgogICAgICAgICAgICAgIyB0aGUgc2VydmVyIHJlZnVzZWQgYWxsIG91ciByZWNpcGllbnRzCiAgICAgICAgICAgICBzZWxmLnJzZXQoKQogICAgICAgICAgICAgcmFpc2UgU01UUFJlY2lwaWVudHNSZWZ1c2VkKHNlbmRlcnJzKQotICAgICAgICAoY29kZSxyZXNwKSA9IHNlbGYuZGF0YShtc2cpCisgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYuZGF0YShtc2cpCiAgICAgICAgIGlmIGNvZGUgIT0gMjUwOgogICAgICAgICAgICAgc2VsZi5yc2V0KCkKICAgICAgICAgICAgIHJhaXNlIFNNVFBEYXRhRXJyb3IoY29kZSwgcmVzcCkKQEAgLTc1MCw3ICs3NjUsOCBAQAogICAgICAgICAgICAgc2VsZi5kZWZhdWx0X3BvcnQgPSBTTVRQX1NTTF9QT1JUCiAKICAgICAgICAgZGVmIF9nZXRfc29ja2V0KHNlbGYsIGhvc3QsIHBvcnQsIHRpbWVvdXQpOgotICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQ+PnN0ZGVyciwgJ2Nvbm5lY3Q6JywgKGhvc3QsIHBvcnQpCisgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgICAgIHByaW50Pj5zdGRlcnIsICdjb25uZWN0OicsIChob3N0LCBwb3J0KQogICAgICAgICAgICAgbmV3X3NvY2tldCA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQpCiAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc3NsLndyYXBfc29ja2V0KG5ld19zb2NrZXQsIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSkKICAgICAgICAgICAgIHNlbGYuZmlsZSA9IFNTTEZha2VGaWxlKG5ld19zb2NrZXQpCkBAIC03NzgsMTEgKzc5NCwxMSBAQAogCiAgICAgZWhsb19tc2cgPSAibGhsbyIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0ID0gJycsIHBvcnQgPSBMTVRQX1BPUlQsIGxvY2FsX2hvc3RuYW1lID0gTm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9JycsIHBvcnQ9TE1UUF9QT1JULCBsb2NhbF9ob3N0bmFtZT1Ob25lKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZS4iIiIKICAgICAgICAgU01UUC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCBsb2NhbF9ob3N0bmFtZSkKIAotICAgIGRlZiBjb25uZWN0KHNlbGYsIGhvc3QgPSAnbG9jYWxob3N0JywgcG9ydCA9IDApOgorICAgIGRlZiBjb25uZWN0KHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQ9MCk6CiAgICAgICAgICIiIkNvbm5lY3QgdG8gdGhlIExNVFAgZGFlbW9uLCBvbiBlaXRoZXIgYSBVbml4IG9yIGEgVENQIHNvY2tldC4iIiIKICAgICAgICAgaWYgaG9zdFswXSAhPSAnLyc6CiAgICAgICAgICAgICByZXR1cm4gU01UUC5jb25uZWN0KHNlbGYsIGhvc3QsIHBvcnQpCkBAIC03OTIsMTMgKzgwOCwxNSBAQAogICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3QoaG9zdCkKICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgbXNnOgotICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQ+PnN0ZGVyciwgJ2Nvbm5lY3QgZmFpbDonLCBob3N0CisgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgICAgIHByaW50Pj5zdGRlcnIsICdjb25uZWN0IGZhaWw6JywgaG9zdAogICAgICAgICAgICAgaWYgc2VsZi5zb2NrOgogICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBOb25lCiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IsIG1zZwogICAgICAgICAoY29kZSwgbXNnKSA9IHNlbGYuZ2V0cmVwbHkoKQotICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludD4+c3RkZXJyLCAiY29ubmVjdDoiLCBtc2cKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgIHByaW50Pj5zdGRlcnIsICJjb25uZWN0OiIsIG1zZwogICAgICAgICByZXR1cm4gKGNvZGUsIG1zZykKIAogCkBAIC04MTIsNyArODMwLDcgQEAKICAgICAgICAgcmV0dXJuIHN5cy5zdGRpbi5yZWFkbGluZSgpLnN0cmlwKCkKIAogICAgIGZyb21hZGRyID0gcHJvbXB0KCJGcm9tIikKLSAgICB0b2FkZHJzICA9IHByb21wdCgiVG8iKS5zcGxpdCgnLCcpCisgICAgdG9hZGRycyA9IHByb21wdCgiVG8iKS5zcGxpdCgnLCcpCiAgICAgcHJpbnQgIkVudGVyIG1lc3NhZ2UsIGVuZCB3aXRoIF5EOiIKICAgICBtc2cgPSAnJwogICAgIHdoaWxlIDE6CmRpZmYgLS1naXQgYS9MaWIvc29ja2V0LnB5IGIvTGliL3NvY2tldC5weQppbmRleCBlNGYwYTgxLi5iZDM2NGU3IDEwMDY0NAotLS0gYS9MaWIvc29ja2V0LnB5CisrKyBiL0xpYi9zb2NrZXQucHkKQEAgLTI0LDcgKzI0LDggQEAKIHNzbCgpIC0tIHNlY3VyZSBzb2NrZXQgbGF5ZXIgc3VwcG9ydCAob25seSBhdmFpbGFibGUgaWYgY29uZmlndXJlZCkKIHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIC0tIGdldCB0aGUgZGVmYXVsdCB0aW1lb3V0IHZhbHVlCiBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoKSAtLSBzZXQgdGhlIGRlZmF1bHQgdGltZW91dCB2YWx1ZQotY3JlYXRlX2Nvbm5lY3Rpb24oKSAtLSBjb25uZWN0cyB0byBhbiBhZGRyZXNzLCB3aXRoIGFuIG9wdGlvbmFsIHRpbWVvdXQKK2NyZWF0ZV9jb25uZWN0aW9uKCkgLS0gY29ubmVjdHMgdG8gYW4gYWRkcmVzcywgd2l0aCBhbiBvcHRpb25hbCB0aW1lb3V0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBzb3VyY2UgYWRkcmVzcy4KIAogIFsqXSBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMhCiAKQEAgLTQ1LDYgKzQ2LDggQEAKIAogaW1wb3J0IF9zb2NrZXQKIGZyb20gX3NvY2tldCBpbXBvcnQgKgorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKK2Zyb20gdHlwZXMgaW1wb3J0IE1ldGhvZFR5cGUKIAogdHJ5OgogICAgIGltcG9ydCBfc3NsCkBAIC0xODYsNyArMTg5LDkgQEAKICAgICAgICAgZm9yIG1ldGhvZCBpbiBfZGVsZWdhdGVfbWV0aG9kczoKICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgbWV0aG9kLCBnZXRhdHRyKF9zb2NrLCBtZXRob2QpKQogCi0gICAgZGVmIGNsb3NlKHNlbGYpOgorICAgIGRlZiBjbG9zZShzZWxmLCBfY2xvc2Vkc29ja2V0PV9jbG9zZWRzb2NrZXQsCisgICAgICAgICAgICAgIF9kZWxlZ2F0ZV9tZXRob2RzPV9kZWxlZ2F0ZV9tZXRob2RzLCBzZXRhdHRyPXNldGF0dHIpOgorICAgICAgICAjIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCByZWZlcmVuY2UgYW55IGdsb2JhbHMuIFNlZSBpc3N1ZSAjODA4MTY0LgogICAgICAgICBzZWxmLl9zb2NrID0gX2Nsb3NlZHNvY2tldCgpCiAgICAgICAgIGR1bW15ID0gc2VsZi5fc29jay5fZHVtbXkKICAgICAgICAgZm9yIG1ldGhvZCBpbiBfZGVsZWdhdGVfbWV0aG9kczoKQEAgLTIxNSwxMSArMjIwLDE1IEBACiAgICAgdHlwZSA9IHByb3BlcnR5KGxhbWJkYSBzZWxmOiBzZWxmLl9zb2NrLnR5cGUsIGRvYz0idGhlIHNvY2tldCB0eXBlIikKICAgICBwcm90byA9IHByb3BlcnR5KGxhbWJkYSBzZWxmOiBzZWxmLl9zb2NrLnByb3RvLCBkb2M9InRoZSBzb2NrZXQgcHJvdG9jb2wiKQogCi0gICAgX3MgPSAoImRlZiAlcyhzZWxmLCAqYXJncyk6IHJldHVybiBzZWxmLl9zb2NrLiVzKCphcmdzKVxuXG4iCi0gICAgICAgICAgIiVzLl9fZG9jX18gPSBfcmVhbHNvY2tldC4lcy5fX2RvY19fXG4iKQotICAgIGZvciBfbSBpbiBfc29ja2V0bWV0aG9kczoKLSAgICAgICAgZXhlYyBfcyAlIChfbSwgX20sIF9tLCBfbSkKLSAgICBkZWwgX20sIF9zCitkZWYgbWV0aChuYW1lLHNlbGYsKmFyZ3MpOgorICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX3NvY2ssbmFtZSkoKmFyZ3MpCisKK2ZvciBfbSBpbiBfc29ja2V0bWV0aG9kczoKKyAgICBwID0gcGFydGlhbChtZXRoLF9tKQorICAgIHAuX19uYW1lX18gPSBfbQorICAgIHAuX19kb2NfXyA9IGdldGF0dHIoX3JlYWxzb2NrZXQsX20pLl9fZG9jX18KKyAgICBtID0gTWV0aG9kVHlwZShwLE5vbmUsX3NvY2tldG9iamVjdCkKKyAgICBzZXRhdHRyKF9zb2NrZXRvYmplY3QsX20sbSkKIAogc29ja2V0ID0gU29ja2V0VHlwZSA9IF9zb2NrZXRvYmplY3QKIApAQCAtMjg4LDE4ICsyOTcsMTUgQEAKICAgICAgICAgICAgIGJ1ZmZlcl9zaXplID0gbWF4KHNlbGYuX3JidWZzaXplLCBzZWxmLmRlZmF1bHRfYnVmc2l6ZSkKICAgICAgICAgICAgIGRhdGFfc2l6ZSA9IGxlbihkYXRhKQogICAgICAgICAgICAgd3JpdGVfb2Zmc2V0ID0gMAorICAgICAgICAgICAgdmlldyA9IG1lbW9yeXZpZXcoZGF0YSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB3aGlsZSB3cml0ZV9vZmZzZXQgPCBkYXRhX3NpemU6Ci0gICAgICAgICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN5cy5weTNrd2FybmluZzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4qYnVmZmVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmRhbGwoYnVmZmVyKGRhdGEsIHdyaXRlX29mZnNldCwgYnVmZmVyX3NpemUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmRhbGwodmlld1t3cml0ZV9vZmZzZXQ6d3JpdGVfb2Zmc2V0K2J1ZmZlcl9zaXplXSkKICAgICAgICAgICAgICAgICAgICAgd3JpdGVfb2Zmc2V0ICs9IGJ1ZmZlcl9zaXplCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHdyaXRlX29mZnNldCA8IGRhdGFfc2l6ZToKICAgICAgICAgICAgICAgICAgICAgcmVtYWluZGVyID0gZGF0YVt3cml0ZV9vZmZzZXQ6XQotICAgICAgICAgICAgICAgICAgICBkZWwgZGF0YSAgIyBleHBsaWNpdCBmcmVlCisgICAgICAgICAgICAgICAgICAgIGRlbCB2aWV3LCBkYXRhICAjIGV4cGxpY2l0IGZyZWUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2J1Zi5hcHBlbmQocmVtYWluZGVyKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl93YnVmX2xlbiA9IGxlbihyZW1haW5kZXIpCiAKQEAgLTMyNyw5ICszMzMsNiBAQAogICAgICAgICAgICAgc2VsZi5fd2J1Zl9sZW4gPj0gc2VsZi5fd2J1ZnNpemUpOgogICAgICAgICAgICAgc2VsZi5mbHVzaCgpCiAKLSAgICBkZWYgX2dldF93YnVmX2xlbihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3didWZfbGVuCi0KICAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKICAgICAgICAgIyBVc2UgbWF4LCBkaXNhbGxvdyB0aW55IHJlYWRzIGluIGEgbG9vcCBhcyB0aGV5IGFyZSB2ZXJ5IGluZWZmaWNpZW50LgogICAgICAgICAjIFdlIG5ldmVyIGxlYXZlIHJlYWQoKSB3aXRoIGFueSBsZWZ0b3ZlciBkYXRhIGZyb20gYSBuZXcgcmVjdigpIGNhbGwKQEAgLTUzMSw3ICs1MzQsOCBAQAogCiBfR0xPQkFMX0RFRkFVTFRfVElNRU9VVCA9IG9iamVjdCgpCiAKLWRlZiBjcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzLCB0aW1lb3V0PV9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKK2RlZiBjcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzLCB0aW1lb3V0PV9HTE9CQUxfREVGQVVMVF9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgogICAgICIiIkNvbm5lY3QgdG8gKmFkZHJlc3MqIGFuZCByZXR1cm4gdGhlIHNvY2tldCBvYmplY3QuCiAKICAgICBDb252ZW5pZW5jZSBmdW5jdGlvbi4gIENvbm5lY3QgdG8gKmFkZHJlc3MqIChhIDItdHVwbGUgYGAoaG9zdCwKQEAgLTUzOSwxMSArNTQzLDEzIEBACiAgICAgKnRpbWVvdXQqIHBhcmFtZXRlciB3aWxsIHNldCB0aGUgdGltZW91dCBvbiB0aGUgc29ja2V0IGluc3RhbmNlCiAgICAgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY29ubmVjdC4gIElmIG5vICp0aW1lb3V0KiBpcyBzdXBwbGllZCwgdGhlCiAgICAgZ2xvYmFsIGRlZmF1bHQgdGltZW91dCBzZXR0aW5nIHJldHVybmVkIGJ5IDpmdW5jOmBnZXRkZWZhdWx0dGltZW91dGAKLSAgICBpcyB1c2VkLgorICAgIGlzIHVzZWQuICBJZiAqc291cmNlX2FkZHJlc3MqIGlzIHNldCBpdCBtdXN0IGJlIGEgdHVwbGUgb2YgKGhvc3QsIHBvcnQpCisgICAgZm9yIHRoZSBzb2NrZXQgdG8gYmluZCBhcyBhIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBtYWtpbmcgdGhlIGNvbm5lY3Rpb24uCisgICAgQW4gaG9zdCBvZiAnJyBvciBwb3J0IDAgdGVsbHMgdGhlIE9TIHRvIHVzZSB0aGUgZGVmYXVsdC4KICAgICAiIiIKIAotICAgIG1zZyA9ICJnZXRhZGRyaW5mbyByZXR1cm5zIGFuIGVtcHR5IGxpc3QiCiAgICAgaG9zdCwgcG9ydCA9IGFkZHJlc3MKKyAgICBlcnIgPSBOb25lCiAgICAgZm9yIHJlcyBpbiBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAwLCBTT0NLX1NUUkVBTSk6CiAgICAgICAgIGFmLCBzb2NrdHlwZSwgcHJvdG8sIGNhbm9ubmFtZSwgc2EgPSByZXMKICAgICAgICAgc29jayA9IE5vbmUKQEAgLTU1MSwxMSArNTU3LDE3IEBACiAgICAgICAgICAgICBzb2NrID0gc29ja2V0KGFmLCBzb2NrdHlwZSwgcHJvdG8pCiAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBfR0xPQkFMX0RFRkFVTFRfVElNRU9VVDoKICAgICAgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQodGltZW91dCkKKyAgICAgICAgICAgIGlmIHNvdXJjZV9hZGRyZXNzOgorICAgICAgICAgICAgICAgIHNvY2suYmluZChzb3VyY2VfYWRkcmVzcykKICAgICAgICAgICAgIHNvY2suY29ubmVjdChzYSkKICAgICAgICAgICAgIHJldHVybiBzb2NrCiAKLSAgICAgICAgZXhjZXB0IGVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBlcnJvciBhcyBfOgorICAgICAgICAgICAgZXJyID0gXwogICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKIAotICAgIHJhaXNlIGVycm9yLCBtc2cKKyAgICBpZiBlcnIgaXMgbm90IE5vbmU6CisgICAgICAgIHJhaXNlIGVycgorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIGVycm9yKCJnZXRhZGRyaW5mbyByZXR1cm5zIGFuIGVtcHR5IGxpc3QiKQpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKaW5kZXggMjlhMDRkNy4uNjcwMWMyMiAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CkBAIC0xLDcgKzEsNyBAQAogIy0qLSBjb2Rpbmc6IElTTy04ODU5LTEgLSotCiAjIHB5c3FsaXRlMi90ZXN0L2RiYXBpLnB5OiB0ZXN0cyBmb3IgREItQVBJIGNvbXBsaWFuY2UKICMKLSMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogIwpAQCAtMjMsOCArMjMsMTEgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCi1pbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgc3FsaXRlMyBhcyBzcWxpdGUKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQogCiBjbGFzcyBNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIENoZWNrQVBJTGV2ZWwoc2VsZik6CkBAIC00MSw0MyArNDQsNDMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxpdGUucGFyYW1zdHlsZSkKIAogICAgIGRlZiBDaGVja1dhcm5pbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKHNxbGl0ZS5XYXJuaW5nLCBTdGFuZGFyZEVycm9yKSwKLSAgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nIGlzIG5vdCBhIHN1YmNsYXNzIG9mIFN0YW5kYXJkRXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzcWxpdGUuV2FybmluZywgU3RhbmRhcmRFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAiV2FybmluZyBpcyBub3QgYSBzdWJjbGFzcyBvZiBTdGFuZGFyZEVycm9yIikKIAogICAgIGRlZiBDaGVja0Vycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhzcWxpdGUuRXJyb3IsIFN0YW5kYXJkRXJyb3IpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzcWxpdGUuRXJyb3IsIFN0YW5kYXJkRXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIFN0YW5kYXJkRXJyb3IiKQogCiAgICAgZGVmIENoZWNrSW50ZXJmYWNlRXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNxbGl0ZS5JbnRlcmZhY2VFcnJvciwgc3FsaXRlLkVycm9yKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLkludGVyZmFjZUVycm9yLCBzcWxpdGUuRXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkludGVyZmFjZUVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIEVycm9yIikKIAogICAgIGRlZiBDaGVja0RhdGFiYXNlRXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNxbGl0ZS5EYXRhYmFzZUVycm9yLCBzcWxpdGUuRXJyb3IpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzcWxpdGUuRGF0YWJhc2VFcnJvciwgc3FsaXRlLkVycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJEYXRhYmFzZUVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIEVycm9yIikKIAogICAgIGRlZiBDaGVja0RhdGFFcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3Moc3FsaXRlLkRhdGFFcnJvciwgc3FsaXRlLkRhdGFiYXNlRXJyb3IpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzcWxpdGUuRGF0YUVycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAiRGF0YUVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIERhdGFiYXNlRXJyb3IiKQogCiAgICAgZGVmIENoZWNrT3BlcmF0aW9uYWxFcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3Moc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IsIHNxbGl0ZS5EYXRhYmFzZUVycm9yKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IsIHNxbGl0ZS5EYXRhYmFzZUVycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVyYXRpb25hbEVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIERhdGFiYXNlRXJyb3IiKQogCiAgICAgZGVmIENoZWNrSW50ZWdyaXR5RXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNxbGl0ZS5JbnRlZ3JpdHlFcnJvciwgc3FsaXRlLkRhdGFiYXNlRXJyb3IpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzcWxpdGUuSW50ZWdyaXR5RXJyb3IsIHNxbGl0ZS5EYXRhYmFzZUVycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlZ3JpdHlFcnJvciBpcyBub3QgYSBzdWJjbGFzcyBvZiBEYXRhYmFzZUVycm9yIikKIAogICAgIGRlZiBDaGVja0ludGVybmFsRXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNxbGl0ZS5JbnRlcm5hbEVycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvciksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNxbGl0ZS5JbnRlcm5hbEVycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZXJuYWxFcnJvciBpcyBub3QgYSBzdWJjbGFzcyBvZiBEYXRhYmFzZUVycm9yIikKIAogICAgIGRlZiBDaGVja1Byb2dyYW1taW5nRXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvciksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvZ3JhbW1pbmdFcnJvciBpcyBub3QgYSBzdWJjbGFzcyBvZiBEYXRhYmFzZUVycm9yIikKIAogICAgIGRlZiBDaGVja05vdFN1cHBvcnRlZEVycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhzcWxpdGUuTm90U3VwcG9ydGVkRXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNxbGl0ZS5Ob3RTdXBwb3J0ZWRFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsaXRlLkRhdGFiYXNlRXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgIk5vdFN1cHBvcnRlZEVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIERhdGFiYXNlRXJyb3IiKQogCkBAIC0xMjcsMTYgKzEzMCwxNiBAQAogCiAgICAgZGVmIENoZWNrRXhjZXB0aW9ucyhzZWxmKToKICAgICAgICAgIyBPcHRpb25hbCBEQi1BUEkgZXh0ZW5zaW9uLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN4Lldhcm5pbmcsIHNxbGl0ZS5XYXJuaW5nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN4LkVycm9yLCBzcWxpdGUuRXJyb3IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3guSW50ZXJmYWNlRXJyb3IsIHNxbGl0ZS5JbnRlcmZhY2VFcnJvcikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jeC5EYXRhYmFzZUVycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvcikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jeC5EYXRhRXJyb3IsIHNxbGl0ZS5EYXRhRXJyb3IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3guT3BlcmF0aW9uYWxFcnJvciwgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3guSW50ZWdyaXR5RXJyb3IsIHNxbGl0ZS5JbnRlZ3JpdHlFcnJvcikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jeC5JbnRlcm5hbEVycm9yLCBzcWxpdGUuSW50ZXJuYWxFcnJvcikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jeC5Qcm9ncmFtbWluZ0Vycm9yLCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jeC5Ob3RTdXBwb3J0ZWRFcnJvciwgc3FsaXRlLk5vdFN1cHBvcnRlZEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3guV2FybmluZywgc3FsaXRlLldhcm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5FcnJvciwgc3FsaXRlLkVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3guSW50ZXJmYWNlRXJyb3IsIHNxbGl0ZS5JbnRlcmZhY2VFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4LkRhdGFiYXNlRXJyb3IsIHNxbGl0ZS5EYXRhYmFzZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3guRGF0YUVycm9yLCBzcWxpdGUuRGF0YUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3guT3BlcmF0aW9uYWxFcnJvciwgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5JbnRlZ3JpdHlFcnJvciwgc3FsaXRlLkludGVncml0eUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3guSW50ZXJuYWxFcnJvciwgc3FsaXRlLkludGVybmFsRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5Qcm9ncmFtbWluZ0Vycm9yLCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4Lk5vdFN1cHBvcnRlZEVycm9yLCBzcWxpdGUuTm90U3VwcG9ydGVkRXJyb3IpCiAKIGNsYXNzIEN1cnNvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0yMjgsNyArMjMxLDcgQEAKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3Qgd2hlcmUgbmFtZT0/IiwgWyJmb28iXSkKICAgICAgICAgcm93ID0gc2VsZi5jdS5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCAiZm9vIikKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVQYXJhbVNlcXVlbmNlKHNlbGYpOgogICAgICAgICBjbGFzcyBMKG9iamVjdCk6CkBAIC0yNDEsMTMgKzI0NCwxMyBAQAogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnZm9vJykiKQogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdGVzdCB3aGVyZSBuYW1lPT8iLCBMKCkpCiAgICAgICAgIHJvdyA9IHNlbGYuY3UuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImZvbyIpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlRGljdE1hcHBpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIG5hbWU9Om5hbWUiLCB7Im5hbWUiOiAiZm9vIn0pCiAgICAgICAgIHJvdyA9IHNlbGYuY3UuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImZvbyIpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlRGljdE1hcHBpbmdfTWFwcGluZyhzZWxmKToKICAgICAgICAgIyBUZXN0IG9ubHkgd29ya3Mgd2l0aCBQeXRob24gMi41IG9yIGxhdGVyCkBAIC0yNjEsNyArMjY0LDcgQEAKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3Qgd2hlcmUgbmFtZT06bmFtZSIsIEQoKSkKICAgICAgICAgcm93ID0gc2VsZi5jdS5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCAiZm9vIikKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVEaWN0TWFwcGluZ1Rvb0xpdHRsZUFyZ3Moc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCkBAIC0yOTUsNyArMjk4LDcgQEAKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJ1cGRhdGUgdGVzdCBzZXQgbmFtZT0nYmFyJyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3Uucm93Y291bnQsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jdS5yb3djb3VudCwgMikKIAogICAgIGRlZiBDaGVja1Jvd2NvdW50U2VsZWN0KHNlbGYpOgogICAgICAgICAiIiIKQEAgLTMwNCwxMiArMzA3LDEyIEBACiAgICAgICAgIGhhcyB0aHVzIHRvIGJlIC0xLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgNSB1bmlvbiBzZWxlY3QgNiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3Uucm93Y291bnQsIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3Uucm93Y291bnQsIC0xKQogCiAgICAgZGVmIENoZWNrUm93Y291bnRFeGVjdXRlbWFueShzZWxmKToKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJkZWxldGUgZnJvbSB0ZXN0IikKICAgICAgICAgc2VsZi5jdS5leGVjdXRlbWFueSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKD8pIiwgWygxLCksICgyLCksICgzLCldKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN1LnJvd2NvdW50LCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3Uucm93Y291bnQsIDMpCiAKICAgICBkZWYgQ2hlY2tUb3RhbENoYW5nZXMoc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCkBAIC0zODIsMjQgKzM4NSwyNCBAQAogICAgICAgICBsc3QgPSBbXQogICAgICAgICBmb3Igcm93IGluIHNlbGYuY3U6CiAgICAgICAgICAgICBsc3QuYXBwZW5kKHJvd1swXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobHN0WzBdLCA1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsc3RbMV0sIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0WzBdLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdFsxXSwgNikKIAogICAgIGRlZiBDaGVja0ZldGNob25lKHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3UuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImZvbyIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3UuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3csIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LCBOb25lKQogCiAgICAgZGVmIENoZWNrRmV0Y2hvbmVOb1N0YXRlbWVudChzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jeC5jdXJzb3IoKQogICAgICAgICByb3cgPSBjdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3csIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LCBOb25lKQogCiAgICAgZGVmIENoZWNrQXJyYXlTaXplKHNlbGYpOgogICAgICAgICAjIG11c3QgZGVmYXVsdCBvdCAxCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3UuYXJyYXlzaXplLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3UuYXJyYXlzaXplLCAxKQogCiAgICAgICAgICMgbm93IHNldCB0byAyCiAgICAgICAgIHNlbGYuY3UuYXJyYXlzaXplID0gMgpAQCAtNDEyLDI3ICs0MTUsMjcgQEAKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3QiKQogICAgICAgICByZXMgPSBzZWxmLmN1LmZldGNobWFueSgpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKHJlcyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDIpCiAKICAgICBkZWYgQ2hlY2tGZXRjaG1hbnkoc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IikKICAgICAgICAgcmVzID0gc2VsZi5jdS5mZXRjaG1hbnkoMTAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4ocmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKICAgICAgICAgcmVzID0gc2VsZi5jdS5mZXRjaG1hbnkoMTAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgW10pCiAKICAgICBkZWYgQ2hlY2tGZXRjaG1hbnlLd0FyZyhzZWxmKToKICAgICAgICAgIiIiQ2hlY2tzIGlmIGZldGNobWFueSB3b3JrcyB3aXRoIGtleXdvcmQgYXJndW1lbnRzIiIiCiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IikKICAgICAgICAgcmVzID0gc2VsZi5jdS5mZXRjaG1hbnkoc2l6ZT0xMDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAxKQogCiAgICAgZGVmIENoZWNrRmV0Y2hhbGwoc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IikKICAgICAgICAgcmVzID0gc2VsZi5jdS5mZXRjaGFsbCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAxKQogICAgICAgICByZXMgPSBzZWxmLmN1LmZldGNoYWxsKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFtdKQogCiAgICAgZGVmIENoZWNrU2V0aW5wdXRzaXplcyhzZWxmKToKICAgICAgICAgc2VsZi5jdS5zZXRpbnB1dHNpemVzKFszLCA0LCA1XSkKQEAgLTQ0NSw3ICs0NDgsNyBAQAogCiAgICAgZGVmIENoZWNrQ3Vyc29yQ29ubmVjdGlvbihzZWxmKToKICAgICAgICAgIyBPcHRpb25hbCBEQi1BUEkgZXh0ZW5zaW9uLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN1LmNvbm5lY3Rpb24sIHNlbGYuY3gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jdS5jb25uZWN0aW9uLCBzZWxmLmN4KQogCiAgICAgZGVmIENoZWNrV3JvbmdDdXJzb3JDYWxsYWJsZShzZWxmKToKICAgICAgICAgdHJ5OgpAQCAtNDY1LDYgKzQ2OCw3IEBACiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RoaXMgdGVzdCByZXF1aXJlcyB0aHJlYWRpbmcuJykKIGNsYXNzIFRocmVhZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKQEAgLTY1Niw3ICs2NjAsNyBAQAogICAgICAgICAgICAgIiIiKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSBhIikKICAgICAgICAgcmVzID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNSkKIAogICAgIGRlZiBDaGVja1NjcmlwdFN0cmluZ1VuaWNvZGUoc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCkBAIC02NzAsMTcgKzY3NCwxNyBAQAogICAgICAgICAgICAgIiIiKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSBhIikKICAgICAgICAgcmVzID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNikKIAotICAgIGRlZiBDaGVja1NjcmlwdEVycm9ySW5jb21wbGV0ZShzZWxmKToKKyAgICBkZWYgQ2hlY2tTY3JpcHRTeW50YXhFcnJvcihzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCiAgICAgICAgIHJhaXNlZCA9IEZhbHNlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGN1ci5leGVjdXRlc2NyaXB0KCJjcmVhdGUgdGFibGUgdGVzdChzYWRmc2FkZmRzYSIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIGN1ci5leGVjdXRlc2NyaXB0KCJjcmVhdGUgdGFibGUgdGVzdCh4KTsgYXNkZjsgY3JlYXRlIHRhYmxlIHRlc3QyKHgpIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yOgogICAgICAgICAgICAgcmFpc2VkID0gVHJ1ZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyYWlzZWQsIFRydWUsICJzaG91bGQgaGF2ZSByYWlzZWQgYW4gZXhjZXB0aW9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYWlzZWQsIFRydWUsICJzaG91bGQgaGF2ZSByYWlzZWQgYW4gZXhjZXB0aW9uIikKIAogICAgIGRlZiBDaGVja1NjcmlwdEVycm9yTm9ybWFsKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQpAQCAtNjkwLDI4ICs2OTQsMjggQEAKICAgICAgICAgICAgIGN1ci5leGVjdXRlc2NyaXB0KCJjcmVhdGUgdGFibGUgdGVzdChzYWRmc2FkZmRzYSk7IHNlbGVjdCBmb28gZnJvbSBodXJ6OyIpCiAgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKICAgICAgICAgICAgIHJhaXNlZCA9IFRydWUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmFpc2VkLCBUcnVlLCAic2hvdWxkIGhhdmUgcmFpc2VkIGFuIGV4Y2VwdGlvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFpc2VkLCBUcnVlLCAic2hvdWxkIGhhdmUgcmFpc2VkIGFuIGV4Y2VwdGlvbiIpCiAKICAgICBkZWYgQ2hlY2tDb25uZWN0aW9uRXhlY3V0ZShzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgcmVzdWx0ID0gY29uLmV4ZWN1dGUoInNlbGVjdCA1IikuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIDUsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCA1LCAiQmFzaWMgdGVzdCBvZiBDb25uZWN0aW9uLmV4ZWN1dGUiKQogCiAgICAgZGVmIENoZWNrQ29ubmVjdGlvbkV4ZWN1dGVtYW55KHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjb24uZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoZm9vKSIpCiAgICAgICAgIGNvbi5leGVjdXRlbWFueSgiaW5zZXJ0IGludG8gdGVzdChmb28pIHZhbHVlcyAoPykiLCBbKDMsKSwgKDQsKV0pCiAgICAgICAgIHJlc3VsdCA9IGNvbi5leGVjdXRlKCJzZWxlY3QgZm9vIGZyb20gdGVzdCBvcmRlciBieSBmb28iKS5mZXRjaGFsbCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdFswXVswXSwgMywgIkJhc2ljIHRlc3Qgb2YgQ29ubmVjdGlvbi5leGVjdXRlbWFueSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdFsxXVswXSwgNCwgIkJhc2ljIHRlc3Qgb2YgQ29ubmVjdGlvbi5leGVjdXRlbWFueSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdWzBdLCAzLCAiQmFzaWMgdGVzdCBvZiBDb25uZWN0aW9uLmV4ZWN1dGVtYW55IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbMV1bMF0sIDQsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZW1hbnkiKQogCiAgICAgZGVmIENoZWNrQ29ubmVjdGlvbkV4ZWN1dGVzY3JpcHQoc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGNvbi5leGVjdXRlc2NyaXB0KCJjcmVhdGUgdGFibGUgdGVzdChmb28pOyBpbnNlcnQgaW50byB0ZXN0KGZvbykgdmFsdWVzICg1KTsiKQogICAgICAgICByZXN1bHQgPSBjb24uZXhlY3V0ZSgic2VsZWN0IGZvbyBmcm9tIHRlc3QiKS5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgNSwgIkJhc2ljIHRlc3Qgb2YgQ29ubmVjdGlvbi5leGVjdXRlc2NyaXB0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDUsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZXNjcmlwdCIpCiAKLWNsYXNzIENsb3NlZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIENsb3NlZENvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHBhc3MKIApAQCAtNzYzLDcgKzc2Nyw2IEBACiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCiAKLQogICAgIGRlZiBDaGVja0Nsb3NlZENyZWF0ZUZ1bmN0aW9uKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjb24uY2xvc2UoKQpAQCAtODMwLDYgKzgzMywzNiBAQAogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQogCitjbGFzcyBDbG9zZWRDdXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBDaGVja0Nsb3NlZChzZWxmKToKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5jbG9zZSgpCisKKyAgICAgICAgZm9yIG1ldGhvZF9uYW1lIGluICgiZXhlY3V0ZSIsICJleGVjdXRlbWFueSIsICJleGVjdXRlc2NyaXB0IiwgImZldGNoYWxsIiwgImZldGNobWFueSIsICJmZXRjaG9uZSIpOgorICAgICAgICAgICAgaWYgbWV0aG9kX25hbWUgaW4gKCJleGVjdXRlIiwgImV4ZWN1dGVzY3JpcHQiKToKKyAgICAgICAgICAgICAgICBwYXJhbXMgPSAoInNlbGVjdCA0IHVuaW9uIHNlbGVjdCA1IiwpCisgICAgICAgICAgICBlbGlmIG1ldGhvZF9uYW1lID09ICJleGVjdXRlbWFueSI6CisgICAgICAgICAgICAgICAgcGFyYW1zID0gKCJpbnNlcnQgaW50byBmb28oYmFyKSB2YWx1ZXMgKD8pIiwgWygzLCksICg0LCldKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJhbXMgPSBbXQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihjdXIsIG1ldGhvZF9uYW1lKQorCisgICAgICAgICAgICAgICAgbWV0aG9kKCpwYXJhbXMpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yOiBtZXRob2QgIiArIG1ldGhvZF9uYW1lKQorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3I6ICIgKyBtZXRob2RfbmFtZSkKKwogZGVmIHN1aXRlKCk6CiAgICAgbW9kdWxlX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKE1vZHVsZVRlc3RzLCAiQ2hlY2siKQogICAgIGNvbm5lY3Rpb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ29ubmVjdGlvblRlc3RzLCAiQ2hlY2siKQpAQCAtODM3LDggKzg3MCw5IEBACiAgICAgdGhyZWFkX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKFRocmVhZFRlc3RzLCAiQ2hlY2siKQogICAgIGNvbnN0cnVjdG9yX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKENvbnN0cnVjdG9yVGVzdHMsICJDaGVjayIpCiAgICAgZXh0X3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKEV4dGVuc2lvblRlc3RzLCAiQ2hlY2siKQotICAgIGNsb3NlZF9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShDbG9zZWRUZXN0cywgIkNoZWNrIikKLSAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKChtb2R1bGVfc3VpdGUsIGNvbm5lY3Rpb25fc3VpdGUsIGN1cnNvcl9zdWl0ZSwgdGhyZWFkX3N1aXRlLCBjb25zdHJ1Y3Rvcl9zdWl0ZSwgZXh0X3N1aXRlLCBjbG9zZWRfc3VpdGUpKQorICAgIGNsb3NlZF9jb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ2xvc2VkQ29uVGVzdHMsICJDaGVjayIpCisgICAgY2xvc2VkX2N1cl9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShDbG9zZWRDdXJUZXN0cywgIkNoZWNrIikKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKChtb2R1bGVfc3VpdGUsIGNvbm5lY3Rpb25fc3VpdGUsIGN1cnNvcl9zdWl0ZSwgdGhyZWFkX3N1aXRlLCBjb25zdHJ1Y3Rvcl9zdWl0ZSwgZXh0X3N1aXRlLCBjbG9zZWRfY29uX3N1aXRlLCBjbG9zZWRfY3VyX3N1aXRlKSkKIAogZGVmIHRlc3QoKToKICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkKaW5kZXggZmY0MWE5ZC4uZjA5MDk1NSAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9mYWN0b3J5LnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvZmFjdG9yeS5weQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCiAKICAgICBkZWYgQ2hlY2tJc0luc3RhbmNlKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzZWxmLmNvbiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5jb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15Q29ubmVjdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAiY29ubmVjdGlvbiBpcyBub3QgaW5zdGFuY2Ugb2YgTXlDb25uZWN0aW9uIikKIApAQCAtNjAsNyArNjAsNyBAQAogCiAgICAgZGVmIENoZWNrSXNJbnN0YW5jZShzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKGZhY3Rvcnk9TXlDdXJzb3IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKGN1ciwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoY3VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUN1cnNvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAiY3Vyc29yIGlzIG5vdCBpbnN0YW5jZSBvZiBNeUN1cnNvciIpCiAKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKGZhY3Rvcnk9TXlDdXJzb3IpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgNCs1IGFzIGZvbyIpCiAgICAgICAgIHJvdyA9IGN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHJvdywKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uocm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJyb3cgaXMgbm90IGluc3RhbmNlIG9mIGRpY3QiKQogICAgICAgICBjdXIuY2xvc2UoKQpAQCAtODcsMjggKzg3LDI4IEBACiAgICAgZGVmIENoZWNrQ3VzdG9tRmFjdG9yeShzZWxmKToKICAgICAgICAgc2VsZi5jb24ucm93X2ZhY3RvcnkgPSBsYW1iZGEgY3VyLCByb3c6IGxpc3Qocm93KQogICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgMSwgMiIpLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uocm93LAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShyb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgInJvdyBpcyBub3QgaW5zdGFuY2Ugb2YgbGlzdCIpCiAKICAgICBkZWYgQ2hlY2tTcWxpdGVSb3dJbmRleChzZWxmKToKICAgICAgICAgc2VsZi5jb24ucm93X2ZhY3RvcnkgPSBzcWxpdGUuUm93CiAgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCAxIGFzIGEsIDIgYXMgYiIpLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uocm93LAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShyb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbGl0ZS5Sb3cpLAogICAgICAgICAgICAgICAgICAgICAgICAgInJvdyBpcyBub3QgaW5zdGFuY2Ugb2Ygc3FsaXRlLlJvdyIpCiAKICAgICAgICAgY29sMSwgY29sMiA9IHJvd1siYSJdLCByb3dbImIiXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY29sMSA9PSAxLCAiYnkgbmFtZTogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gJ2EnIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvbDIgPT0gMiwgImJ5IG5hbWU6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uICdhJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2wxID09IDEsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnYSciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sMiA9PSAyLCAiYnkgbmFtZTogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gJ2EnIikKIAogICAgICAgICBjb2wxLCBjb2wyID0gcm93WyJBIl0sIHJvd1siQiJdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjb2wxID09IDEsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnQSciKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY29sMiA9PSAyLCAiYnkgbmFtZTogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gJ0InIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbDEgPT0gMSwgImJ5IG5hbWU6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uICdBJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2wyID09IDIsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnQiciKQogCiAgICAgICAgIGNvbDEsIGNvbDIgPSByb3dbMF0sIHJvd1sxXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY29sMSA9PSAxLCAiYnkgaW5kZXg6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uIDAiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY29sMiA9PSAyLCAiYnkgaW5kZXg6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uIDEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sMSA9PSAxLCAiYnkgaW5kZXg6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uIDAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sMiA9PSAyLCAiYnkgaW5kZXg6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uIDEiKQogCiAgICAgZGVmIENoZWNrU3FsaXRlUm93SXRlcihzZWxmKToKICAgICAgICAgIiIiQ2hlY2tzIGlmIHRoZSByb3cgb2JqZWN0IGlzIGl0ZXJhYmxlIiIiCkBAIC0xMjgsOCArMTI4LDggQEAKICAgICAgICAgc2VsZi5jb24ucm93X2ZhY3RvcnkgPSBzcWxpdGUuUm93CiAgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCAxIGFzIGEsIDIgYXMgYiIpLmZldGNob25lKCkKICAgICAgICAgZCA9IGRpY3Qocm93KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChkWyJhIl0sIHJvd1siYSJdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChkWyJiIl0sIHJvd1siYiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbImEiXSwgcm93WyJhIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsiYiJdLCByb3dbImIiXSkKIAogICAgIGRlZiBDaGVja1NxbGl0ZVJvd0hhc2hDbXAoc2VsZik6CiAgICAgICAgICIiIkNoZWNrcyBpZiB0aGUgcm93IG9iamVjdCBjb21wYXJlcyBhbmQgaGFzaGVzIGNvcnJlY3RseSIiIgpAQCAtMTM4LDE4ICsxMzgsMTggQEAKICAgICAgICAgcm93XzIgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgMSBhcyBhLCAyIGFzIGIiKS5mZXRjaG9uZSgpCiAgICAgICAgIHJvd18zID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IDEgYXMgYSwgMyBhcyBiIikuZmV0Y2hvbmUoKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyb3dfMSA9PSByb3dfMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJvd18xID09IHJvd18yKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocm93XzIgIT0gcm93XzMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3dfMSA9PSByb3dfMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJvd18xID09IHJvd18yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocm93XzIgIT0gcm93XzMpCiAKLSAgICAgICAgc2VsZi5mYWlsSWYocm93XzEgIT0gcm93XzEpCi0gICAgICAgIHNlbGYuZmFpbElmKHJvd18xICE9IHJvd18yKQotICAgICAgICBzZWxmLmZhaWxJZihyb3dfMiA9PSByb3dfMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyb3dfMSAhPSByb3dfMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyb3dfMSAhPSByb3dfMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyb3dfMiA9PSByb3dfMykKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dfMSwgcm93XzIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGhhc2gocm93XzEpLCBoYXNoKHJvd18yKSkKLSAgICAgICAgc2VsZi5mYWlsSWZFcXVhbChyb3dfMSwgcm93XzMpCi0gICAgICAgIHNlbGYuZmFpbElmRXF1YWwoaGFzaChyb3dfMSksIGhhc2gocm93XzMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd18xLCByb3dfMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHJvd18xKSwgaGFzaChyb3dfMikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocm93XzEsIHJvd18zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGhhc2gocm93XzEpLCBoYXNoKHJvd18zKSkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5jb24uY2xvc2UoKQpAQCAtMTYxLDIxICsxNjEsMjEgQEAKICAgICBkZWYgQ2hlY2tVbmljb2RlKHNlbGYpOgogICAgICAgICBhdXN0cmlhID0gdW5pY29kZSgi1nN0ZXJyZWljaCIsICJsYXRpbjEiKQogICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgPyIsIChhdXN0cmlhLCkpLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUocm93WzBdKSA9PSB1bmljb2RlLCAidHlwZSBvZiByb3dbMF0gbXVzdCBiZSB1bmljb2RlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocm93WzBdKSA9PSB1bmljb2RlLCAidHlwZSBvZiByb3dbMF0gbXVzdCBiZSB1bmljb2RlIikKIAogICAgIGRlZiBDaGVja1N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5jb24udGV4dF9mYWN0b3J5ID0gc3RyCiAgICAgICAgIGF1c3RyaWEgPSB1bmljb2RlKCLWc3RlcnJlaWNoIiwgImxhdGluMSIpCiAgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCA/IiwgKGF1c3RyaWEsKSkuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShyb3dbMF0pID09IHN0ciwgInR5cGUgb2Ygcm93WzBdIG11c3QgYmUgc3RyIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJvd1swXSA9PSBhdXN0cmlhLmVuY29kZSgidXRmLTgiKSwgImNvbHVtbiBtdXN0IGVxdWFsIG9yaWdpbmFsIGRhdGEgaW4gVVRGLTgiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShyb3dbMF0pID09IHN0ciwgInR5cGUgb2Ygcm93WzBdIG11c3QgYmUgc3RyIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJvd1swXSA9PSBhdXN0cmlhLmVuY29kZSgidXRmLTgiKSwgImNvbHVtbiBtdXN0IGVxdWFsIG9yaWdpbmFsIGRhdGEgaW4gVVRGLTgiKQogCiAgICAgZGVmIENoZWNrQ3VzdG9tKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBsYW1iZGEgeDogdW5pY29kZSh4LCAidXRmLTgiLCAiaWdub3JlIikKICAgICAgICAgYXVzdHJpYSA9IHVuaWNvZGUoItZzdGVycmVpY2giLCAibGF0aW4xIikKICAgICAgICAgcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0ID8iLCAoYXVzdHJpYS5lbmNvZGUoImxhdGluMSIpLCkpLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUocm93WzBdKSA9PSB1bmljb2RlLCAidHlwZSBvZiByb3dbMF0gbXVzdCBiZSB1bmljb2RlIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJvd1swXS5lbmRzd2l0aCh1InJlaWNoIiksICJjb2x1bW4gbXVzdCBjb250YWluIG9yaWdpbmFsIGRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShyb3dbMF0pID09IHVuaWNvZGUsICJ0eXBlIG9mIHJvd1swXSBtdXN0IGJlIHVuaWNvZGUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocm93WzBdLmVuZHN3aXRoKHUicmVpY2giKSwgImNvbHVtbiBtdXN0IGNvbnRhaW4gb3JpZ2luYWwgZGF0YSIpCiAKICAgICBkZWYgQ2hlY2tPcHRpbWl6ZWRVbmljb2RlKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBzcWxpdGUuT3B0aW1pemVkVW5pY29kZQpAQCAtMTgzLDggKzE4Myw4IEBACiAgICAgICAgIGdlcm1hbnkgPSB1bmljb2RlKCJEZXV0Y2hsYW5kIikKICAgICAgICAgYV9yb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgPyIsIChhdXN0cmlhLCkpLmZldGNob25lKCkKICAgICAgICAgZF9yb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgPyIsIChnZXJtYW55LCkpLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoYV9yb3dbMF0pID09IHVuaWNvZGUsICJ0eXBlIG9mIG5vbi1BU0NJSSByb3cgbXVzdCBiZSB1bmljb2RlIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoZF9yb3dbMF0pID09IHN0ciwgInR5cGUgb2YgQVNDSUktb25seSByb3cgbXVzdCBiZSBzdHIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShhX3Jvd1swXSkgPT0gdW5pY29kZSwgInR5cGUgb2Ygbm9uLUFTQ0lJIHJvdyBtdXN0IGJlIHVuaWNvZGUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShkX3Jvd1swXSkgPT0gc3RyLCAidHlwZSBvZiBBU0NJSS1vbmx5IHJvdyBtdXN0IGJlIHN0ciIpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuY29uLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvaG9va3MucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2hvb2tzLnB5CmluZGV4IDU0N2RjNjUuLjI3NDVjOGIgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvaG9va3MucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9ob29rcy5weQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oIlgiLCA0MikKICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgVHlwZUVycm9yIikKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGUuYXJnc1swXSwgInBhcmFtZXRlciBtdXN0IGJlIGNhbGxhYmxlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAicGFyYW1ldGVyIG11c3QgYmUgY2FsbGFibGUiKQogCiAgICAgZGVmIENoZWNrQ3JlYXRlQ29sbGF0aW9uTm90QXNjaWkoc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSBjb24uZXhlY3V0ZShzcWwpLmZldGNoYWxsKCkKICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQogICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChlLmFyZ3NbMF0ubG93ZXIoKSwgIm5vIHN1Y2ggY29sbGF0aW9uIHNlcXVlbmNlOiBteWNvbGwiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0ubG93ZXIoKSwgIm5vIHN1Y2ggY29sbGF0aW9uIHNlcXVlbmNlOiBteWNvbGwiKQogCiAgICAgZGVmIENoZWNrQ29sbGF0aW9uUmVnaXN0ZXJUd2ljZShzZWxmKToKICAgICAgICAgIiIiCkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgICAgY29uLmV4ZWN1dGUoIiIiCiAgICAgICAgICAgICBjcmVhdGUgdGFibGUgZm9vKGEsIGIpCiAgICAgICAgICAgICAiIiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhwcm9ncmVzc19jYWxscykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2dyZXNzX2NhbGxzKQogCiAKICAgICBkZWYgQ2hlY2tPcGNvZGVDb3VudChzZWxmKToKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgICAgICAgICAgY3JlYXRlIHRhYmxlIGJhciAoYSwgYikKICAgICAgICAgICAgICIiIikKICAgICAgICAgc2Vjb25kX2NvdW50ID0gbGVuKHByb2dyZXNzX2NhbGxzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZmlyc3RfY291bnQgPiBzZWNvbmRfY291bnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaXJzdF9jb3VudCA+IHNlY29uZF9jb3VudCkKIAogICAgIGRlZiBDaGVja0NhbmNlbE9wZXJhdGlvbihzZWxmKToKICAgICAgICAgIiIiCkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgICAgY29uLnNldF9wcm9ncmVzc19oYW5kbGVyKHByb2dyZXNzLCAxKQogICAgICAgICBjb24uc2V0X3Byb2dyZXNzX2hhbmRsZXIoTm9uZSwgMSkKICAgICAgICAgY29uLmV4ZWN1dGUoInNlbGVjdCAxIHVuaW9uIHNlbGVjdCAyIHVuaW9uIHNlbGVjdCAzIikuZmV0Y2hhbGwoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhY3Rpb24sIDAsICJwcm9ncmVzcyBoYW5kbGVyIHdhcyBub3QgY2xlYXJlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLCAwLCAicHJvZ3Jlc3MgaGFuZGxlciB3YXMgbm90IGNsZWFyZWQiKQogCiBkZWYgc3VpdGUoKToKICAgICBjb2xsYXRpb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ29sbGF0aW9uVGVzdHMsICJDaGVjayIpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L3B5MjV0ZXN0cy5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvcHkyNXRlc3RzLnB5CmluZGV4IGJjZTI2YjkuLjdmZDNjMGUgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvcHkyNXRlc3RzLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvcHkyNXRlc3RzLnB5CkBAIC01NCwxOSArNTQsMTkgQEAKICAgICAgICAgICAgIHNlbGYuY29uLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoYykgdmFsdWVzICgnZm9vJykiKQogICAgICAgICBzZWxmLmNvbi5yb2xsYmFjaygpCiAgICAgICAgIGNvdW50ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IGNvdW50KCopIGZyb20gdGVzdCIpLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY291bnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIDEpCiAKICAgICBkZWYgQ2hlY2tDb250ZXh0TWFuYWdlclJvbGxiYWNrKHNlbGYpOgogICAgICAgICAiIiJJcyBhIHJvbGxiYWNrIGNhbGxlZCBpbiB0aGUgY29udGV4dCBtYW5hZ2VyPyIiIgogICAgICAgICBnbG9iYWwgZGlkX3JvbGxiYWNrCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGRpZF9yb2xsYmFjaywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlkX3JvbGxiYWNrLCBGYWxzZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBzZWxmLmNvbjoKICAgICAgICAgICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGMpIHZhbHVlcyAoNCkiKQogICAgICAgICAgICAgICAgIHNlbGYuY29uLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoYykgdmFsdWVzICg0KSIpCiAgICAgICAgIGV4Y2VwdCBzcWxpdGUuSW50ZWdyaXR5RXJyb3I6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGRpZF9yb2xsYmFjaywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWRfcm9sbGJhY2ssIFRydWUpCiAKIGRlZiBzdWl0ZSgpOgogICAgIGN0eF9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShDb250ZXh0VGVzdHMsICJDaGVjayIpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L3JlZ3Jlc3Npb24ucHkgYi9MaWIvc3FsaXRlMy90ZXN0L3JlZ3Jlc3Npb24ucHkKaW5kZXggMmE1MTlkYy4uMTAzMDA2MSAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weQpAQCAtNjUsMjAgKzY1LDEwIEBACiAgICAgZGVmIENoZWNrQ29sdW1uTmFtZVdpdGhTcGFjZXMoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCdzZWxlY3QgMSBhcyAiZm9vIGJhciBbZGF0ZXRpbWVdIicpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGN1ci5kZXNjcmlwdGlvblswXVswXSwgImZvbyBiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ci5kZXNjcmlwdGlvblswXVswXSwgImZvbyBiYXIiKQogCiAgICAgICAgIGN1ci5leGVjdXRlKCdzZWxlY3QgMSBhcyAiZm9vIGJheiInKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjdXIuZGVzY3JpcHRpb25bMF1bMF0sICJmb28gYmF6IikKLQotICAgIGRlZiBDaGVja1N0YXRlbWVudEF2YWlsYWJsZShzZWxmKToKLSAgICAgICAgIyBweXNxbGl0ZSB1cCB0byAyLjMuMiBjcmFzaGVkIG9uIHRoaXMsIGJlY2F1c2UgdGhlIGFjdGl2ZSBzdGF0ZW1lbnQgaGFuZGxlIHdhcyBub3QgY2hlY2tlZAotICAgICAgICAjIGJlZm9yZSB0cnlpbmcgdG8gZmV0Y2ggZGF0YSBmcm9tIGl0LiBjbG9zZSgpIGRlc3Ryb3lzIHRoZSBhY3RpdmUgc3RhdGVtZW50IC4uLgotICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiLCBkZXRlY3RfdHlwZXM9c3FsaXRlLlBBUlNFX0RFQ0xUWVBFUykKLSAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCi0gICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgNCB1bmlvbiBzZWxlY3QgNSIpCi0gICAgICAgIGN1ci5jbG9zZSgpCi0gICAgICAgIGN1ci5mZXRjaG9uZSgpCi0gICAgICAgIGN1ci5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLmRlc2NyaXB0aW9uWzBdWzBdLCAiZm9vIGJheiIpCiAKICAgICBkZWYgQ2hlY2tTdGF0ZW1lbnRGaW5hbGl6YXRpb25PbkNsb3NlRGIoc2VsZik6CiAgICAgICAgICMgcHlzcWxpdGUgdmVyc2lvbnMgPD0gMi4zLjMgb25seSBmaW5hbGl6ZWQgc3RhdGVtZW50cyBpbiB0aGUgc3RhdGVtZW50CkBAIC0xNjcsNiArMTU3LDEwNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIHNldGF0dHIsIGNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzb2xhdGlvbl9sZXZlbCIsIHUiXHhlOSIpCiAKKyAgICBkZWYgQ2hlY2tDdXJzb3JDb25zdHJ1Y3RvckNhbGxDaGVjayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFZlcmlmaWVzIHRoYXQgY3Vyc29yIG1ldGhvZHMgY2hlY2sgd2V0aGVyIGJhc2UgY2xhc3MgX19pbml0X18gd2FzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIEN1cnNvcihzcWxpdGUuQ3Vyc29yKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb24pOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBjdXIgPSBDdXJzb3IoY29uKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IDQrNSIpLmZldGNoYWxsKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorCisgICAgZGVmIENoZWNrQ29ubmVjdGlvbkNvbnN0cnVjdG9yQ2FsbENoZWNrKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVmVyaWZpZXMgdGhhdCBjb25uZWN0aW9uIG1ldGhvZHMgY2hlY2sgd2V0aGVyIGJhc2UgY2xhc3MgX19pbml0X18gd2FzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIENvbm5lY3Rpb24oc3FsaXRlLkNvbm5lY3Rpb24pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjb24gPSBDb25uZWN0aW9uKCI6bWVtb3J5OiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCisKKyAgICBkZWYgQ2hlY2tDdXJzb3JSZWdpc3RyYXRpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBWZXJpZmllcyB0aGF0IHN1YmNsYXNzZWQgY3Vyc29yIGNsYXNzZXMgYXJlIGNvcnJlY3RseSByZWdpc3RlcmVkIHdpdGgKKyAgICAgICAgdGhlIGNvbm5lY3Rpb24gb2JqZWN0LCB0b28uICAoZmV0Y2gtYWNyb3NzLXJvbGxiYWNrIHByb2JsZW0pCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBDb25uZWN0aW9uKHNxbGl0ZS5Db25uZWN0aW9uKToKKyAgICAgICAgICAgIGRlZiBjdXJzb3Ioc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIEN1cnNvcihzZWxmKQorCisgICAgICAgIGNsYXNzIEN1cnNvcihzcWxpdGUuQ3Vyc29yKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb24pOgorICAgICAgICAgICAgICAgIHNxbGl0ZS5DdXJzb3IuX19pbml0X18oc2VsZiwgY29uKQorCisgICAgICAgIGNvbiA9IENvbm5lY3Rpb24oIjptZW1vcnk6IikKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgZm9vKHgpIikKKyAgICAgICAgY3VyLmV4ZWN1dGVtYW55KCJpbnNlcnQgaW50byBmb28oeCkgdmFsdWVzICg/KSIsIFsoMywpLCAoNCwpLCAoNSwpXSkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCB4IGZyb20gZm9vIikKKyAgICAgICAgY29uLnJvbGxiYWNrKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyLmZldGNoYWxsKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIEludGVyZmFjZUVycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5JbnRlcmZhY2VFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgSW50ZXJmYWNlRXJyb3IiKQorCisgICAgZGVmIENoZWNrQXV0b0NvbW1pdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFZlcmlmaWVzIHRoYXQgY3JlYXRpbmcgYSBjb25uZWN0aW9uIGluIGF1dG9jb21taXQgbW9kZSB3b3Jrcy4KKyAgICAgICAgMi41LjMgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gc28gdGhhdCB0aGVzZSBjb3VsZCBubyBsb25nZXIKKyAgICAgICAgYmUgY3JlYXRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIsIGlzb2xhdGlvbl9sZXZlbD1Ob25lKQorCisgICAgZGVmIENoZWNrUHJhZ21hQXV0b2NvbW1pdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFZlcmlmaWVzIHRoYXQgcnVubmluZyBhIFBSQUdNQSBzdGF0ZW1lbnQgdGhhdCBkb2VzIGFuIGF1dG9jb21taXQgZG9lcworICAgICAgICB3b3JrLiBUaGlzIGRpZCBub3Qgd29yayBpbiAyLjUuMy8yLjUuNC4KKyAgICAgICAgIiIiCisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgZm9vKGJhcikiKQorICAgICAgICBjdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gZm9vKGJhcikgdmFsdWVzICg1KSIpCisKKyAgICAgICAgY3VyLmV4ZWN1dGUoInByYWdtYSBwYWdlX3NpemUiKQorICAgICAgICByb3cgPSBjdXIuZmV0Y2hvbmUoKQorCisgICAgZGVmIENoZWNrU2V0RGljdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNzQ3OAorCisgICAgICAgIEl0IHdhcyBwb3NzaWJsZSB0byBzdWNjZXNzZnVsbHkgcmVnaXN0ZXIgY2FsbGJhY2tzIHRoYXQgY291bGQgbm90IGJlCisgICAgICAgIGhhc2hlZC4gUmV0dXJuIGNvZGVzIG9mIFB5RGljdF9TZXRJdGVtIHdlcmUgbm90IGNoZWNrZWQgcHJvcGVybHkuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBOb3RIYXNoYWJsZToKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigpCisgICAgICAgIHZhciA9IE5vdEhhc2hhYmxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmNvbi5jcmVhdGVfZnVuY3Rpb24sIHZhcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmNvbi5jcmVhdGVfYWdncmVnYXRlLCB2YXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5jb24uc2V0X2F1dGhvcml6ZXIsIHZhcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmNvbi5zZXRfcHJvZ3Jlc3NfaGFuZGxlciwgdmFyKQorCiAgICAgZGVmIENoZWNrQ29ubmVjdGlvbkNhbGwoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBDYWxsIGEgY29ubmVjdGlvbiB3aXRoIGEgbm9uLXN0cmluZyBTUUwgcmVxdWVzdDogY2hlY2sgZXJyb3IgaGFuZGxpbmcKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvdHJhbnNhY3Rpb25zLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC90cmFuc2FjdGlvbnMucHkKaW5kZXggOWNjNmUxMC4uYTczMjI1MSAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC90cmFuc2FjdGlvbnMucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC90cmFuc2FjdGlvbnMucHkKQEAgLTU5LDE0ICs1OSwxNCBAQAogICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QyKGopIikKICAgICAgICAgc2VsZi5jdXIyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gdGVzdCIpCiAgICAgICAgIHJlcyA9IHNlbGYuY3VyMi5mZXRjaGFsbCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAxKQogCiAgICAgZGVmIENoZWNrSW5zZXJ0U3RhcnRzVHJhbnNhY3Rpb24oc2VsZik6CiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQogICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKICAgICAgICAgcmVzID0gc2VsZi5jdXIyLmZldGNoYWxsKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKHJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDApCiAKICAgICBkZWYgQ2hlY2tVcGRhdGVTdGFydHNUcmFuc2FjdGlvbihzZWxmKToKICAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0KGkpIikKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoInVwZGF0ZSB0ZXN0IHNldCBpPTYiKQogICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKICAgICAgICAgcmVzID0gc2VsZi5jdXIyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNSkKIAogICAgIGRlZiBDaGVja0RlbGV0ZVN0YXJ0c1RyYW5zYWN0aW9uKHNlbGYpOgogICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoaSkiKQpAQCAtODQsNyArODQsNyBAQAogICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiZGVsZXRlIGZyb20gdGVzdCIpCiAgICAgICAgIHNlbGYuY3VyMi5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQogICAgICAgICByZXMgPSBzZWxmLmN1cjIuZmV0Y2hhbGwoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4ocmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKIAogICAgIGRlZiBDaGVja1JlcGxhY2VTdGFydHNUcmFuc2FjdGlvbihzZWxmKToKICAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0KGkpIikKQEAgLTkzLDI0ICs5MywyNCBAQAogICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgicmVwbGFjZSBpbnRvIHRlc3QoaSkgdmFsdWVzICg2KSIpCiAgICAgICAgIHNlbGYuY3VyMi5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQogICAgICAgICByZXMgPSBzZWxmLmN1cjIuZmV0Y2hhbGwoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4ocmVzKSwgMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzWzBdWzBdLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1swXVswXSwgNSkKIAogICAgIGRlZiBDaGVja1RvZ2dsZUF1dG9Db21taXQoc2VsZik6CiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQogICAgICAgICBzZWxmLmNvbjEuaXNvbGF0aW9uX2xldmVsID0gTm9uZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmNvbjEuaXNvbGF0aW9uX2xldmVsLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29uMS5pc29sYXRpb25fbGV2ZWwsIE5vbmUpCiAgICAgICAgIHNlbGYuY3VyMi5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQogICAgICAgICByZXMgPSBzZWxmLmN1cjIuZmV0Y2hhbGwoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4ocmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKIAogICAgICAgICBzZWxmLmNvbjEuaXNvbGF0aW9uX2xldmVsID0gIkRFRkVSUkVEIgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmNvbjEuaXNvbGF0aW9uX2xldmVsICwgIkRFRkVSUkVEIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbjEuaXNvbGF0aW9uX2xldmVsICwgIkRFRkVSUkVEIikKICAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg1KSIpCiAgICAgICAgIHNlbGYuY3VyMi5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQogICAgICAgICByZXMgPSBzZWxmLmN1cjIuZmV0Y2hhbGwoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4ocmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKIAogICAgIGRlZiBDaGVja1JhaXNlVGltZW91dChzZWxmKToKICAgICAgICAgaWYgc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgMiwgMik6CkBAIC0xNDgsNiArMTQ4LDI2IEBACiAgICAgICAgICMgTk8gc2VsZi5jb24yLnJvbGxiYWNrKCkgSEVSRSEhIQogICAgICAgICBzZWxmLmNvbjEuY29tbWl0KCkKIAorICAgIGRlZiBDaGVja1JvbGxiYWNrQ3Vyc29yQ29uc2lzdGVuY3koc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVja3MgaWYgY3Vyc29ycyBvbiB0aGUgY29ubmVjdGlvbiBhcmUgc2V0IGludG8gYSAicmVzZXQiIHN0YXRlCisgICAgICAgIHdoZW4gYSByb2xsYmFjayBpcyBkb25lIG9uIHRoZSBjb25uZWN0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdCh4KSIpCisgICAgICAgIGN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KHgpIHZhbHVlcyAoNSkiKQorICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IDEgdW5pb24gc2VsZWN0IDIgdW5pb24gc2VsZWN0IDMiKQorCisgICAgICAgIGNvbi5yb2xsYmFjaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ci5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkludGVyZmFjZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5JbnRlcmZhY2VFcnJvciwgZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnRlcmZhY2VFcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCisKIGNsYXNzIFNwZWNpYWxDb21tYW5kVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5jb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkKaW5kZXggNGE0NjllNy4uYzVhYjM5YiAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L3R5cGVzLnB5CkBAIC0yMSw5ICsyMSwxNCBAQAogIyAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCiAjIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAKLWltcG9ydCB6bGliLCBkYXRldGltZQoraW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzcWxpdGUzIGFzIHNxbGl0ZQordHJ5OgorICAgIGltcG9ydCB6bGliCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgemxpYiA9IE5vbmUKKwogCiBjbGFzcyBTcWxpdGVUeXBlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTM5LDM5ICs0NCw2NiBAQAogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KHMpIHZhbHVlcyAoPykiLCAodSLWc3RlcnJlaWNoIiwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgcyBmcm9tIHRlc3QiKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgdSLWc3RlcnJlaWNoIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIHUi1nN0ZXJyZWljaCIpCiAKICAgICBkZWYgQ2hlY2tTbWFsbEludChzZWxmKToKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKD8pIiwgKDQyLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIDQyKQogCiAgICAgZGVmIENoZWNrTGFyZ2VJbnQoc2VsZik6CiAgICAgICAgIG51bSA9IDIqKjQwCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg/KSIsIChudW0sKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKICAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIG51bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIG51bSkKIAogICAgIGRlZiBDaGVja0Zsb2F0KHNlbGYpOgogICAgICAgICB2YWwgPSAzLjE0CiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoZikgdmFsdWVzICg/KSIsICh2YWwsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGYgZnJvbSB0ZXN0IikKICAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIHZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIHZhbCkKIAogICAgIGRlZiBDaGVja0Jsb2Ioc2VsZik6CiAgICAgICAgIHZhbCA9IGJ1ZmZlcigiR3VnbGh1cGYiKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGIpIHZhbHVlcyAoPykiLCAodmFsLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBiIGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCB2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCB2YWwpCiAKICAgICBkZWYgQ2hlY2tVbmljb2RlRXhlY3V0ZShzZWxmKToKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSh1InNlbGVjdCAn1nN0ZXJyZWljaCciKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgdSLWc3RlcnJlaWNoIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIHUi1nN0ZXJyZWljaCIpCisKKyAgICBkZWYgQ2hlY2tOb25VdGY4X0RlZmF1bHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCA/IiwgKGNocigxNTApLCkpCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgQ2hlY2tOb25VdGY4X1RleHRGYWN0b3J5U3RyaW5nKHNlbGYpOgorICAgICAgICBvcmlnX3RleHRfZmFjdG9yeSA9IHNlbGYuY29uLnRleHRfZmFjdG9yeQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBzdHIKKyAgICAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCA/IiwgKGNocigxNTApLCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBvcmlnX3RleHRfZmFjdG9yeQorCisgICAgZGVmIENoZWNrTm9uVXRmOF9UZXh0RmFjdG9yeU9wdGltaXplZFVuaWNvZGUoc2VsZik6CisgICAgICAgIG9yaWdfdGV4dF9mYWN0b3J5ID0gc2VsZi5jb24udGV4dF9mYWN0b3J5CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBzcWxpdGUuT3B0aW1pemVkVW5pY29kZQorICAgICAgICAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCA/IiwgKGNocigxNTApLCkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBvcmlnX3RleHRfZmFjdG9yeQogCiBjbGFzcyBEZWNsVHlwZXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY2xhc3MgRm9vOgpAQCAtMTIyLDE0ICsxNTQsMTQgQEAKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChzKSB2YWx1ZXMgKD8pIiwgKCJmb28iLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoJ3NlbGVjdCBzIGFzICJzIFtXUk9OR10iIGZyb20gdGVzdCcpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sICJmb28iKQogCiAgICAgZGVmIENoZWNrU21hbGxJbnQoc2VsZik6CiAgICAgICAgICMgZGVmYXVsdAogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoPykiLCAoNDIsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKICAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgNDIpCiAKICAgICBkZWYgQ2hlY2tMYXJnZUludChzZWxmKToKICAgICAgICAgIyBkZWZhdWx0CkBAIC0xMzcsNyArMTY5LDcgQEAKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKD8pIiwgKG51bSwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgbnVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgbnVtKQogCiAgICAgZGVmIENoZWNrRmxvYXQoc2VsZik6CiAgICAgICAgICMgY3VzdG9tCkBAIC0xNDUsMjAgKzE3NywyMCBAQAogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGYpIHZhbHVlcyAoPykiLCAodmFsLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBmIGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCA0Ny4yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgNDcuMikKIAogICAgIGRlZiBDaGVja0Jvb2woc2VsZik6CiAgICAgICAgICMgY3VzdG9tCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoYikgdmFsdWVzICg/KSIsIChGYWxzZSwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgYiBmcm9tIHRlc3QiKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCBGYWxzZSkKIAogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJkZWxldGUgZnJvbSB0ZXN0IikKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChiKSB2YWx1ZXMgKD8pIiwgKFRydWUsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGIgZnJvbSB0ZXN0IikKICAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCBUcnVlKQogCiAgICAgZGVmIENoZWNrVW5pY29kZShzZWxmKToKICAgICAgICAgIyBkZWZhdWx0CkBAIC0xNjYsMTQgKzE5OCwxNCBAQAogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KHUpIHZhbHVlcyAoPykiLCAodmFsLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCB1IGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCB2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCB2YWwpCiAKICAgICBkZWYgQ2hlY2tGb28oc2VsZik6CiAgICAgICAgIHZhbCA9IERlY2xUeXBlc1Rlc3RzLkZvbygiYmxhIikKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChmb28pIHZhbHVlcyAoPykiLCAodmFsLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBmb28gZnJvbSB0ZXN0IikKICAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIHZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIHZhbCkKIAogICAgIGRlZiBDaGVja1Vuc3VwcG9ydGVkU2VxKHNlbGYpOgogICAgICAgICBjbGFzcyBCYXI6IHBhc3MKQEAgLTIwMywyMCArMjM1LDIwIEBACiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoYmluKSB2YWx1ZXMgKD8pIiwgKHZhbCwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgYmluIGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCB2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCB2YWwpCiAKICAgICBkZWYgQ2hlY2tOdW1iZXIxKHNlbGYpOgogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG4xKSB2YWx1ZXMgKDUpIikKICAgICAgICAgdmFsdWUgPSBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgbjEgZnJvbSB0ZXN0IikuZmV0Y2hvbmUoKVswXQogICAgICAgICAjIGlmIHRoZSBjb252ZXJ0ZXIgaXMgbm90IHVzZWQsIGl0J3MgYW4gaW50IGluc3RlYWQgb2YgYSBmbG9hdAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHZhbHVlKSwgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWx1ZSksIGZsb2F0KQogCiAgICAgZGVmIENoZWNrTnVtYmVyMihzZWxmKToKICAgICAgICAgIiIiQ2hlY2tzIHdldGhlciBjb252ZXJ0ZXIgbmFtZXMgYXJlIGN1dCBvZmYgYXQgJygnIGNoYXJhY3RlcnMiIiIKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuMikgdmFsdWVzICg1KSIpCiAgICAgICAgIHZhbHVlID0gc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IG4yIGZyb20gdGVzdCIpLmZldGNob25lKClbMF0KICAgICAgICAgIyBpZiB0aGUgY29udmVydGVyIGlzIG5vdCB1c2VkLCBpdCdzIGFuIGludCBpbnN0ZWFkIG9mIGEgZmxvYXQKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZSh2YWx1ZSksIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsdWUpLCBmbG9hdCkKIAogY2xhc3MgQ29sTmFtZXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMjQ1LDI4ICsyNzcsMjggQEAKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh4KSB2YWx1ZXMgKD8pIiwgKCJ4eHgiLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCB4IGZyb20gdGVzdCIpCiAgICAgICAgIHZhbCA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCAieHh4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICJ4eHgiKQogCiAgICAgZGVmIENoZWNrTm9uZShzZWxmKToKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh4KSB2YWx1ZXMgKD8pIiwgKE5vbmUsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IHggZnJvbSB0ZXN0IikKICAgICAgICAgdmFsID0gc2VsZi5jdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBOb25lKQogCiAgICAgZGVmIENoZWNrQ29sTmFtZShzZWxmKToKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh4KSB2YWx1ZXMgKD8pIiwgKCJ4eHgiLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoJ3NlbGVjdCB4IGFzICJ4IFtiYXJdIiBmcm9tIHRlc3QnKQogICAgICAgICB2YWwgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgIjx4eHg+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICI8eHh4PiIpCiAKICAgICAgICAgIyBDaGVjayBpZiB0aGUgc3RyaXBwaW5nIG9mIGNvbG5hbWVzIHdvcmtzLiBFdmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdAogICAgICAgICAjIHdoaXRlc3BhY2Ugc2hvdWxkIGJlIHN0cmlwcGVkLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN1ci5kZXNjcmlwdGlvblswXVswXSwgIngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3VyLmRlc2NyaXB0aW9uWzBdWzBdLCAieCIpCiAKICAgICBkZWYgQ2hlY2tDYXNlSW5Db252ZXJ0ZXJOYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCIiInNlbGVjdCAnb3RoZXInIGFzICJ4IFtiMWIxXVwiIiIiKQogICAgICAgICB2YWwgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgIk1BUktFUiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAiTUFSS0VSIikKIAogICAgIGRlZiBDaGVja0N1cnNvckRlc2NyaXB0aW9uTm9Sb3coc2VsZik6CiAgICAgICAgICIiIgpAQCAtMjc0LDcgKzMwNiw3IEBACiAgICAgICAgIG5vIHJvdyByZXR1cm5lZC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCAqIGZyb20gdGVzdCB3aGVyZSAwID0gMSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmN1ci5kZXNjcmlwdGlvblswXVswXSA9PSAieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jdXIuZGVzY3JpcHRpb25bMF1bMF0sICJ4IikKIAogY2xhc3MgT2JqZWN0QWRhcHRhdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgY2FzdChvYmopOgpAQCAtMjk4LDggKzMzMCw5IEBACiAgICAgZGVmIENoZWNrQ2FzdGVySXNVc2VkKHNlbGYpOgogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgPyIsICg0LCkpCiAgICAgICAgIHZhbCA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZSh2YWwpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbCksIGZsb2F0KQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCiBjbGFzcyBCaW5hcnlDb252ZXJ0ZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGNvbnZlcnQocyk6CiAgICAgICAgIHJldHVybiB6bGliLmRlY29tcHJlc3MocykKQEAgLTMxNSw3ICszNDgsNyBAQAogICAgIGRlZiBDaGVja0JpbmFyeUlucHV0Rm9yQ29udmVydGVyKHNlbGYpOgogICAgICAgICB0ZXN0ZGF0YSA9ICJhYmNkZWZnIiAqIDEwCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuY29uLmV4ZWN1dGUoJ3NlbGVjdCA/IGFzICJ4IFtiaW5dIicsIChidWZmZXIoemxpYi5jb21wcmVzcyh0ZXN0ZGF0YSkpLCkpLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodGVzdGRhdGEsIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YSwgcmVzdWx0KQogCiBjbGFzcyBEYXRlVGltZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0zMzIsMTQgKzM2NSwxNCBAQAogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGQpIHZhbHVlcyAoPykiLCAoZCwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgZCBmcm9tIHRlc3QiKQogICAgICAgICBkMiA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZCwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZDIpCiAKICAgICBkZWYgQ2hlY2tTcWxpdGVUaW1lc3RhbXAoc2VsZik6CiAgICAgICAgIHRzID0gc3FsaXRlLlRpbWVzdGFtcCgyMDA0LCAyLCAxNCwgNywgMTUsIDApCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QodHMpIHZhbHVlcyAoPykiLCAodHMsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IHRzIGZyb20gdGVzdCIpCiAgICAgICAgIHRzMiA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHMsIHRzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cywgdHMyKQogCiAgICAgZGVmIENoZWNrU3FsVGltZXN0YW1wKHNlbGYpOgogICAgICAgICAjIFRoZSBkYXRlIGZ1bmN0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgaW4gU1FMaXRlIHZlcnNpb24gMy4xIG9yIGxhdGVyCkBAIC0zNTEsMjIgKzM4NCwyMiBAQAogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KHRzKSB2YWx1ZXMgKGN1cnJlbnRfdGltZXN0YW1wKSIpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCB0cyBmcm9tIHRlc3QiKQogICAgICAgICB0cyA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZSh0cyksIGRhdGV0aW1lLmRhdGV0aW1lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0cy55ZWFyLCBub3cueWVhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHRzKSwgZGF0ZXRpbWUuZGF0ZXRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMueWVhciwgbm93LnllYXIpCiAKICAgICBkZWYgQ2hlY2tEYXRlVGltZVN1YlNlY29uZHMoc2VsZik6CiAgICAgICAgIHRzID0gc3FsaXRlLlRpbWVzdGFtcCgyMDA0LCAyLCAxNCwgNywgMTUsIDAsIDUwMDAwMCkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh0cykgdmFsdWVzICg/KSIsICh0cywpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgdHMgZnJvbSB0ZXN0IikKICAgICAgICAgdHMyID0gc2VsZi5jdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0cywgdHMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLCB0czIpCiAKICAgICBkZWYgQ2hlY2tEYXRlVGltZVN1YlNlY29uZHNGbG9hdGluZ1BvaW50KHNlbGYpOgogICAgICAgICB0cyA9IHNxbGl0ZS5UaW1lc3RhbXAoMjAwNCwgMiwgMTQsIDcsIDE1LCAwLCA1MTAyNDEpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QodHMpIHZhbHVlcyAoPykiLCAodHMsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IHRzIGZyb20gdGVzdCIpCiAgICAgICAgIHRzMiA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHMsIHRzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cywgdHMyKQogCiBkZWYgc3VpdGUoKToKICAgICBzcWxpdGVfdHlwZV9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShTcWxpdGVUeXBlVGVzdHMsICJDaGVjayIpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L3VzZXJmdW5jdGlvbnMucHkgYi9MaWIvc3FsaXRlMy90ZXN0L3VzZXJmdW5jdGlvbnMucHkKaW5kZXggNDI1NTllMy4uODBiNmYwYyAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC91c2VyZnVuY3Rpb25zLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvdXNlcmZ1bmN0aW9ucy5weQpAQCAtMTYwLDI4ICsxNjAsMjggQEAKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCByZXR1cm50ZXh0KCkiKQogICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHZhbCksIHVuaWNvZGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWwpLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgImZvbyIpCiAKICAgICBkZWYgQ2hlY2tGdW5jUmV0dXJuVW5pY29kZShzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCByZXR1cm51bmljb2RlKCkiKQogICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHZhbCksIHVuaWNvZGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgdSJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsKSwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIHUiYmFyIikKIAogICAgIGRlZiBDaGVja0Z1bmNSZXR1cm5JbnQoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgcmV0dXJuaW50KCkiKQogICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHZhbCksIGludCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDQyKQogCiAgICAgZGVmIENoZWNrRnVuY1JldHVybkZsb2F0KHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IHJldHVybmZsb2F0KCkiKQogICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHZhbCksIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsKSwgZmxvYXQpCiAgICAgICAgIGlmIHZhbCA8IDMuMTM5IG9yIHZhbCA+IDMuMTQxOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyB2YWx1ZSIpCiAKQEAgLTE4OSwxNSArMTg5LDE1IEBACiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgcmV0dXJubnVsbCgpIikKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZSh2YWwpLCB0eXBlKE5vbmUpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWwpLCB0eXBlKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgTm9uZSkKIAogICAgIGRlZiBDaGVja0Z1bmNSZXR1cm5CbG9iKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IHJldHVybmJsb2IoKSIpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUodmFsKSwgYnVmZmVyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsIGJ1ZmZlcigiYmxvYiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsKSwgYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgYnVmZmVyKCJibG9iIikpCiAKICAgICBkZWYgQ2hlY2tGdW5jRXhjZXB0aW9uKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQpAQCAtMjA2LDM3ICsyMDYsMzcgQEAKICAgICAgICAgICAgIGN1ci5mZXRjaG9uZSgpCiAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBPcGVyYXRpb25hbEVycm9yIikKICAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZS5hcmdzWzBdLCAndXNlci1kZWZpbmVkIGZ1bmN0aW9uIHJhaXNlZCBleGNlcHRpb24nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICd1c2VyLWRlZmluZWQgZnVuY3Rpb24gcmFpc2VkIGV4Y2VwdGlvbicpCiAKICAgICBkZWYgQ2hlY2tQYXJhbVN0cmluZyhzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBpc3N0cmluZyg/KSIsICgiZm9vIiwpKQogICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAxKQogCiAgICAgZGVmIENoZWNrUGFyYW1JbnQoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgaXNpbnQoPykiLCAoNDIsKSkKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKIAogICAgIGRlZiBDaGVja1BhcmFtRmxvYXQoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgaXNmbG9hdCg/KSIsICgzLjE0LCkpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCiAKICAgICBkZWYgQ2hlY2tQYXJhbU5vbmUoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgaXNub25lKD8pIiwgKE5vbmUsKSkKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKIAogICAgIGRlZiBDaGVja1BhcmFtQmxvYihzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBpc2Jsb2IoPykiLCAoYnVmZmVyKCJibG9iIiksKSkKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKIAogY2xhc3MgQWdncmVnYXRlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTI4MCw3ICsyODAsNyBAQAogICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBub3N0ZXAodCkgZnJvbSB0ZXN0IikKICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIEF0dHJpYnV0ZUVycm9yIikKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZS5hcmdzWzBdLCAiQWdnck5vU3RlcCBpbnN0YW5jZSBoYXMgbm8gYXR0cmlidXRlICdzdGVwJyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgIkFnZ3JOb1N0ZXAgaW5zdGFuY2UgaGFzIG5vIGF0dHJpYnV0ZSAnc3RlcCciKQogCiAgICAgZGVmIENoZWNrQWdnck5vRmluYWxpemUoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCkBAIC0yODksNyArMjg5LDcgQEAKICAgICAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCiAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKICAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZS5hcmdzWzBdLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdmaW5hbGl6ZScgbWV0aG9kIHJhaXNlZCBlcnJvciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQogCiAgICAgZGVmIENoZWNrQWdnckV4Y2VwdGlvbkluSW5pdChzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKQEAgLTI5OCw3ICsyOTgsNyBAQAogICAgICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQogICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ19faW5pdF9fJyBtZXRob2QgcmFpc2VkIGVycm9yIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdfX2luaXRfXycgbWV0aG9kIHJhaXNlZCBlcnJvciIpCiAKICAgICBkZWYgQ2hlY2tBZ2dyRXhjZXB0aW9uSW5TdGVwKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQpAQCAtMzA3LDcgKzMwNyw3IEBACiAgICAgICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCiAgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnc3RlcCcgbWV0aG9kIHJhaXNlZCBlcnJvciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnc3RlcCcgbWV0aG9kIHJhaXNlZCBlcnJvciIpCiAKICAgICBkZWYgQ2hlY2tBZ2dyRXhjZXB0aW9uSW5GaW5hbGl6ZShzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKQEAgLTMxNiwzNyArMzE2LDM3IEBACiAgICAgICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCiAgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ2ZpbmFsaXplJyBtZXRob2QgcmFpc2VkIGVycm9yIikKIAogICAgIGRlZiBDaGVja0FnZ3JDaGVja1BhcmFtU3RyKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGNoZWNrVHlwZSgnc3RyJywgPykiLCAoImZvbyIsKSkKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKIAogICAgIGRlZiBDaGVja0FnZ3JDaGVja1BhcmFtSW50KHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGNoZWNrVHlwZSgnaW50JywgPykiLCAoNDIsKSkKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKIAogICAgIGRlZiBDaGVja0FnZ3JDaGVja1BhcmFtRmxvYXQoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgY2hlY2tUeXBlKCdmbG9hdCcsID8pIiwgKDMuMTQsKSkKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKIAogICAgIGRlZiBDaGVja0FnZ3JDaGVja1BhcmFtTm9uZShzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBjaGVja1R5cGUoJ05vbmUnLCA/KSIsIChOb25lLCkpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCiAKICAgICBkZWYgQ2hlY2tBZ2dyQ2hlY2tQYXJhbUJsb2Ioc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgY2hlY2tUeXBlKCdibG9iJywgPykiLCAoYnVmZmVyKCJibG9iIiksKSkKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKIAogICAgIGRlZiBDaGVja0FnZ3JDaGVja0FnZ3JTdW0oc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCkBAIC0zNTQsNyArMzU0LDcgQEAKICAgICAgICAgY3VyLmV4ZWN1dGVtYW55KCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoPykiLCBbKDEwLCksICgyMCwpLCAoMzAsKV0pCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgbXlzdW0oaSkgZnJvbSB0ZXN0IikKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCA2MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDYwKQogCiBkZWYgYXV0aG9yaXplcl9jYihhY3Rpb24sIGFyZzEsIGFyZzIsIGRibmFtZSwgc291cmNlKToKICAgICBpZiBhY3Rpb24gIT0gc3FsaXRlLlNRTElURV9TRUxFQ1Q6CmRpZmYgLS1naXQgYS9MaWIvc3JlX2NvbXBpbGUucHkgYi9MaWIvc3JlX2NvbXBpbGUucHkKaW5kZXggNjVkMmNjZi4uMmEwYzc0NSAxMDA2NDQKLS0tIGEvTGliL3NyZV9jb21waWxlLnB5CisrKyBiL0xpYi9zcmVfY29tcGlsZS5weQpAQCAtMjQsMTIgKzI0LDYgQEAKIGRlZiBfaWRlbnRpdHlmdW5jdGlvbih4KToKICAgICByZXR1cm4geAogCi1kZWYgc2V0KHNlcSk6Ci0gICAgcyA9IHt9Ci0gICAgZm9yIGVsZW0gaW4gc2VxOgotICAgICAgICBzW2VsZW1dID0gMQotICAgIHJldHVybiBzCi0KIF9MSVRFUkFMX0NPREVTID0gc2V0KFtMSVRFUkFMLCBOT1RfTElURVJBTF0pCiBfUkVQRUFUSU5HX0NPREVTID0gc2V0KFtSRVBFQVQsIE1JTl9SRVBFQVQsIE1BWF9SRVBFQVRdKQogX1NVQ0NFU1NfQ09ERVMgPSBzZXQoW1NVQ0NFU1MsIEZBSUxVUkVdKQpkaWZmIC0tZ2l0IGEvTGliL3NyZV9wYXJzZS5weSBiL0xpYi9zcmVfcGFyc2UucHkKaW5kZXggNDc4MTAxOS4uMTgyZDFlYiAxMDA2NDQKLS0tIGEvTGliL3NyZV9wYXJzZS5weQorKysgYi9MaWIvc3JlX3BhcnNlLnB5CkBAIC0xNiwxMiArMTYsNiBAQAogCiBmcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0ICoKIAotZGVmIHNldChzZXEpOgotICAgIHMgPSB7fQotICAgIGZvciBlbGVtIGluIHNlcToKLSAgICAgICAgc1tlbGVtXSA9IDEKLSAgICByZXR1cm4gcwotCiBTUEVDSUFMX0NIQVJTID0gIi5cXFt7KCkqKz9eJHwiCiBSRVBFQVRfQ0hBUlMgPSAiKis/eyIKIApkaWZmIC0tZ2l0IGEvTGliL3NzbC5weSBiL0xpYi9zc2wucHkKaW5kZXggM2MwNzgzZi4uNzJmYmFlNSAxMDA2NDQKLS0tIGEvTGliL3NzbC5weQorKysgYi9MaWIvc3NsLnB5CkBAIC01OSw2ICs1OSw3IEBACiAKIGltcG9ydCBfc3NsICAgICAgICAgICAgICMgaWYgd2UgY2FuJ3QgaW1wb3J0IGl0LCBsZXQgdGhlIGVycm9yIHByb3BhZ2F0ZQogCitmcm9tIF9zc2wgaW1wb3J0IE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIsIE9QRU5TU0xfVkVSU0lPTl9JTkZPLCBPUEVOU1NMX1ZFUlNJT04KIGZyb20gX3NzbCBpbXBvcnQgU1NMRXJyb3IKIGZyb20gX3NzbCBpbXBvcnQgQ0VSVF9OT05FLCBDRVJUX09QVElPTkFMLCBDRVJUX1JFUVVJUkVECiBmcm9tIF9zc2wgaW1wb3J0IFBST1RPQ09MX1NTTHYyLCBQUk9UT0NPTF9TU0x2MywgUFJPVE9DT0xfU1NMdjIzLCBQUk9UT0NPTF9UTFN2MQpAQCAtNzQsOCArNzUsNyBAQAogICAgICBTU0xfRVJST1JfRU9GLCBcCiAgICAgIFNTTF9FUlJPUl9JTlZBTElEX0VSUk9SX0NPREUKIAotZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldCwgX2ZpbGVvYmplY3QsIF9kZWxlZ2F0ZV9tZXRob2RzCi1mcm9tIHNvY2tldCBpbXBvcnQgZXJyb3IgYXMgc29ja2V0X2Vycm9yCitmcm9tIHNvY2tldCBpbXBvcnQgc29ja2V0LCBfZmlsZW9iamVjdCwgX2RlbGVnYXRlX21ldGhvZHMsIGVycm9yIGFzIHNvY2tldF9lcnJvcgogZnJvbSBzb2NrZXQgaW1wb3J0IGdldG5hbWVpbmZvIGFzIF9nZXRuYW1laW5mbwogaW1wb3J0IGJhc2U2NCAgICAgICAgIyBmb3IgREVSLXRvLVBFTSB0cmFuc2xhdGlvbgogaW1wb3J0IGVycm5vCkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBjZXJ0X3JlcXM9Q0VSVF9OT05FLAogICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1QUk9UT0NPTF9TU0x2MjMsIGNhX2NlcnRzPU5vbmUsCiAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PVRydWUsCi0gICAgICAgICAgICAgICAgIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPVRydWUpOgorICAgICAgICAgICAgICAgICBzdXBwcmVzc19yYWdnZWRfZW9mcz1UcnVlLCBjaXBoZXJzPU5vbmUpOgogICAgICAgICBzb2NrZXQuX19pbml0X18oc2VsZiwgX3NvY2s9c29jay5fc29jaykKICAgICAgICAgIyBUaGUgaW5pdGlhbGl6ZXIgZm9yIHNvY2tldCBvdmVycmlkZXMgdGhlIG1ldGhvZHMgc2VuZCgpLCByZWN2KCksIGV0Yy4KICAgICAgICAgIyBpbiB0aGUgaW5zdGFuY2NlLCB3aGljaCB3ZSBkb24ndCBuZWVkIC0tIGJ1dCB3ZSB3YW50IHRvIHByb3ZpZGUgdGhlCkBAIC0xMTAsMTIgKzExMCwxNSBAQAogICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgIyBubywgbm8gY29ubmVjdGlvbiB5ZXQKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IEZhbHNlCiAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIHllcywgY3JlYXRlIHRoZSBTU0wgb2JqZWN0CisgICAgICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBfc3NsLnNzbHdyYXAoc2VsZi5fc29jaywgc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZSwgY2VydGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzLCBzc2xfdmVyc2lvbiwgY2FfY2VydHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzLCBzc2xfdmVyc2lvbiwgY2FfY2VydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycykKICAgICAgICAgICAgIGlmIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0OgogICAgICAgICAgICAgICAgIHNlbGYuZG9faGFuZHNoYWtlKCkKICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQpAQCAtMTIzLDYgKzEyNiw3IEBACiAgICAgICAgIHNlbGYuY2VydF9yZXFzID0gY2VydF9yZXFzCiAgICAgICAgIHNlbGYuc3NsX3ZlcnNpb24gPSBzc2xfdmVyc2lvbgogICAgICAgICBzZWxmLmNhX2NlcnRzID0gY2FfY2VydHMKKyAgICAgICAgc2VsZi5jaXBoZXJzID0gY2lwaGVycwogICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZV9vbl9jb25uZWN0ID0gZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QKICAgICAgICAgc2VsZi5zdXBwcmVzc19yYWdnZWRfZW9mcyA9IHN1cHByZXNzX3JhZ2dlZF9lb2ZzCiAgICAgICAgIHNlbGYuX21ha2VmaWxlX3JlZnMgPSAwCkBAIC0xODIsMTQgKzE4NiwxNiBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmQoc2VsZiwgZGF0YSwgZmxhZ3MpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc29jay5zZW5kKGRhdGEsIGZsYWdzKQogCi0gICAgZGVmIHNlbmR0byhzZWxmLCBkYXRhLCBhZGRyLCBmbGFncz0wKToKKyAgICBkZWYgc2VuZHRvKHNlbGYsIGRhdGEsIGZsYWdzX29yX2FkZHIsIGFkZHI9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYuX3NzbG9iajoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNlbmR0byBub3QgYWxsb3dlZCBvbiBpbnN0YW5jZXMgb2YgJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18pCisgICAgICAgIGVsaWYgYWRkciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2suc2VuZHRvKGRhdGEsIGZsYWdzX29yX2FkZHIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmR0byhzZWxmLCBkYXRhLCBhZGRyLCBmbGFncykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zb2NrLnNlbmR0byhkYXRhLCBmbGFnc19vcl9hZGRyLCBhZGRyKQogCiAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSwgZmxhZ3M9MCk6CiAgICAgICAgIGlmIHNlbGYuX3NzbG9iajoKQEAgLTIxNCw3ICsyMjAsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXykKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJlYWQoYnVmbGVuKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5yZWN2KHNlbGYsIGJ1ZmxlbiwgZmxhZ3MpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc29jay5yZWN2KGJ1ZmxlbiwgZmxhZ3MpCiAKICAgICBkZWYgcmVjdl9pbnRvKHNlbGYsIGJ1ZmZlciwgbmJ5dGVzPU5vbmUsIGZsYWdzPTApOgogICAgICAgICBpZiBidWZmZXIgYW5kIChuYnl0ZXMgaXMgTm9uZSk6CkBAIC0yMzEsMjEgKzIzNywyMSBAQAogICAgICAgICAgICAgYnVmZmVyWzp2XSA9IHRtcF9idWZmZXIKICAgICAgICAgICAgIHJldHVybiB2CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc29ja2V0LnJlY3ZfaW50byhzZWxmLCBidWZmZXIsIG5ieXRlcywgZmxhZ3MpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc29jay5yZWN2X2ludG8oYnVmZmVyLCBuYnl0ZXMsIGZsYWdzKQogCi0gICAgZGVmIHJlY3Zmcm9tKHNlbGYsIGFkZHIsIGJ1Zmxlbj0xMDI0LCBmbGFncz0wKToKKyAgICBkZWYgcmVjdmZyb20oc2VsZiwgYnVmbGVuPTEwMjQsIGZsYWdzPTApOgogICAgICAgICBpZiBzZWxmLl9zc2xvYmo6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWN2ZnJvbSBub3QgYWxsb3dlZCBvbiBpbnN0YW5jZXMgb2YgJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18pCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc29ja2V0LnJlY3Zmcm9tKHNlbGYsIGFkZHIsIGJ1ZmxlbiwgZmxhZ3MpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc29jay5yZWN2ZnJvbShidWZsZW4sIGZsYWdzKQogCiAgICAgZGVmIHJlY3Zmcm9tX2ludG8oc2VsZiwgYnVmZmVyLCBuYnl0ZXM9Tm9uZSwgZmxhZ3M9MCk6CiAgICAgICAgIGlmIHNlbGYuX3NzbG9iajoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJlY3Zmcm9tX2ludG8gbm90IGFsbG93ZWQgb24gaW5zdGFuY2VzIG9mICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5yZWN2ZnJvbV9pbnRvKHNlbGYsIGJ1ZmZlciwgbmJ5dGVzLCBmbGFncykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zb2NrLnJlY3Zmcm9tX2ludG8oYnVmZmVyLCBuYnl0ZXMsIGZsYWdzKQogCiAgICAgZGVmIHBlbmRpbmcoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3NzbG9iajoKQEAgLTI3OCwyMSArMjg0LDM2IEBACiAKICAgICAgICAgc2VsZi5fc3Nsb2JqLmRvX2hhbmRzaGFrZSgpCiAKLSAgICBkZWYgY29ubmVjdChzZWxmLCBhZGRyKToKLQotICAgICAgICAiIiJDb25uZWN0cyB0byByZW1vdGUgQUREUiwgYW5kIHRoZW4gd3JhcHMgdGhlIGNvbm5lY3Rpb24gaW4KLSAgICAgICAgYW4gU1NMIGNoYW5uZWwuIiIiCi0KKyAgICBkZWYgX3JlYWxfY29ubmVjdChzZWxmLCBhZGRyLCByZXR1cm5fZXJybm8pOgogICAgICAgICAjIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIHNvY2tldCBpcyBjbGllbnQtc2lkZSwgYW5kIG5vdAogICAgICAgICAjIGNvbm5lY3RlZCBhdCB0aGUgdGltZSBvZiB0aGUgY2FsbC4gIFdlIGNvbm5lY3QgaXQsIHRoZW4gd3JhcCBpdC4KLSAgICAgICAgaWYgc2VsZi5fc3Nsb2JqOgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0ZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhdHRlbXB0IHRvIGNvbm5lY3QgYWxyZWFkeS1jb25uZWN0ZWQgU1NMU29ja2V0ISIpCi0gICAgICAgIHNvY2tldC5jb25uZWN0KHNlbGYsIGFkZHIpCiAgICAgICAgIHNlbGYuX3NzbG9iaiA9IF9zc2wuc3Nsd3JhcChzZWxmLl9zb2NrLCBGYWxzZSwgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jZXJ0X3JlcXMsIHNlbGYuc3NsX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhX2NlcnRzKQotICAgICAgICBpZiBzZWxmLmRvX2hhbmRzaGFrZV9vbl9jb25uZWN0OgotICAgICAgICAgICAgc2VsZi5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYV9jZXJ0cywgc2VsZi5jaXBoZXJzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrZXQuY29ubmVjdChzZWxmLCBhZGRyKQorICAgICAgICAgICAgaWYgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdDoKKyAgICAgICAgICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIHJldHVybl9lcnJubzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZS5lcnJubworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCisgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgY29ubmVjdChzZWxmLCBhZGRyKToKKyAgICAgICAgIiIiQ29ubmVjdHMgdG8gcmVtb3RlIEFERFIsIGFuZCB0aGVuIHdyYXBzIHRoZSBjb25uZWN0aW9uIGluCisgICAgICAgIGFuIFNTTCBjaGFubmVsLiIiIgorICAgICAgICBzZWxmLl9yZWFsX2Nvbm5lY3QoYWRkciwgRmFsc2UpCisKKyAgICBkZWYgY29ubmVjdF9leChzZWxmLCBhZGRyKToKKyAgICAgICAgIiIiQ29ubmVjdHMgdG8gcmVtb3RlIEFERFIsIGFuZCB0aGVuIHdyYXBzIHRoZSBjb25uZWN0aW9uIGluCisgICAgICAgIGFuIFNTTCBjaGFubmVsLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9jb25uZWN0KGFkZHIsIFRydWUpCiAKICAgICBkZWYgYWNjZXB0KHNlbGYpOgogCkBAIC0zMDgsNiArMzI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNlbGYuY2VydF9yZXFzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zZWxmLnNzbF92ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1zZWxmLmNhX2NlcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPXNlbGYuY2lwaGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9c2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9c2VsZi5zdXBwcmVzc19yYWdnZWRfZW9mcyksCiAgICAgICAgICAgICAgICAgYWRkcikKQEAgLTMyOSwxMyArMzUxLDE0IEBACiAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIGNlcnRfcmVxcz1DRVJUX05PTkUsCiAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249UFJPVE9DT0xfU1NMdjIzLCBjYV9jZXJ0cz1Ob25lLAogICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PVRydWUsCi0gICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9VHJ1ZSk6CisgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9VHJ1ZSwgY2lwaGVycz1Ob25lKToKIAogICAgIHJldHVybiBTU0xTb2NrZXQoc29jaywga2V5ZmlsZT1rZXlmaWxlLCBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPXNlcnZlcl9zaWRlLCBjZXJ0X3JlcXM9Y2VydF9yZXFzLAogICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsX3ZlcnNpb24sIGNhX2NlcnRzPWNhX2NlcnRzLAogICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9ZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QsCi0gICAgICAgICAgICAgICAgICAgICBzdXBwcmVzc19yYWdnZWRfZW9mcz1zdXBwcmVzc19yYWdnZWRfZW9mcykKKyAgICAgICAgICAgICAgICAgICAgIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPXN1cHByZXNzX3JhZ2dlZF9lb2ZzLAorICAgICAgICAgICAgICAgICAgICAgY2lwaGVycz1jaXBoZXJzKQogCiAKICMgc29tZSB1dGlsaXR5IGZ1bmN0aW9ucwpAQCAtNDI5LDcgKzQ1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVE9DT0xfU1NMdjIzLCBOb25lKQogICAgIHRyeToKICAgICAgICAgc29jay5nZXRwZWVybmFtZSgpCi0gICAgZXhjZXB0OgorICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3I6CiAgICAgICAgICMgbm8sIG5vIGNvbm5lY3Rpb24geWV0CiAgICAgICAgIHBhc3MKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3N0cmluZy5weSBiL0xpYi9zdHJpbmcucHkKaW5kZXggNmZhYTFmMC4uOWMwZWJlMSAxMDA2NDQKLS0tIGEvTGliL3N0cmluZy5weQorKysgYi9MaWIvc3RyaW5nLnB5CkBAIC01MDgsMTUgKzUwOCwxNSBAQAogICAgIHJldHVybiBzLmNhcGl0YWxpemUoKQogCiAjIFN1YnN0cmluZyByZXBsYWNlbWVudCAoZ2xvYmFsKQotZGVmIHJlcGxhY2Uocywgb2xkLCBuZXcsIG1heHNwbGl0PS0xKToKLSAgICAiIiJyZXBsYWNlIChzdHIsIG9sZCwgbmV3WywgbWF4c3BsaXRdKSAtPiBzdHJpbmcKK2RlZiByZXBsYWNlKHMsIG9sZCwgbmV3LCBtYXhyZXBsYWNlPS0xKToKKyAgICAiIiJyZXBsYWNlIChzdHIsIG9sZCwgbmV3WywgbWF4cmVwbGFjZV0pIC0+IHN0cmluZwogCiAgICAgUmV0dXJuIGEgY29weSBvZiBzdHJpbmcgc3RyIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZwotICAgIG9sZCByZXBsYWNlZCBieSBuZXcuIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBtYXhzcGxpdCBpcwotICAgIGdpdmVuLCBvbmx5IHRoZSBmaXJzdCBtYXhzcGxpdCBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuCisgICAgb2xkIHJlcGxhY2VkIGJ5IG5ldy4gSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IG1heHJlcGxhY2UgaXMKKyAgICBnaXZlbiwgb25seSB0aGUgZmlyc3QgbWF4cmVwbGFjZSBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuCiAKICAgICAiIiIKLSAgICByZXR1cm4gcy5yZXBsYWNlKG9sZCwgbmV3LCBtYXhzcGxpdCkKKyAgICByZXR1cm4gcy5yZXBsYWNlKG9sZCwgbmV3LCBtYXhyZXBsYWNlKQogCiAKICMgVHJ5IGltcG9ydGluZyBvcHRpb25hbCBidWlsdC1pbiBtb2R1bGUgInN0cm9wIiAtLSBpZiBpdCBleGlzdHMsCkBAIC02MDcsNyArNjA3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBzdHIodmFsdWUpCiAgICAgICAgIGVsaWYgY29udmVyc2lvbiBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIHZhbHVlCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gY29udmVyaW9uIHNwZWNpZmllciB7MCFzfSIuZm9ybWF0KGNvbnZlcnNpb24pKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGNvbnZlcnNpb24gc3BlY2lmaWVyIHswIXN9Ii5mb3JtYXQoY29udmVyc2lvbikpCiAKIAogICAgICMgcmV0dXJucyBhbiBpdGVyYWJsZSB0aGF0IGNvbnRhaW5zIHR1cGxlcyBvZiB0aGUgZm9ybToKZGlmZiAtLWdpdCBhL0xpYi9zdWJwcm9jZXNzLnB5IGIvTGliL3N1YnByb2Nlc3MucHkKaW5kZXggNTdjZGJlOC4uMmVjZGUwYiAxMDA2NDQKLS0tIGEvTGliL3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3N1YnByb2Nlc3MucHkKQEAgLTEwNyw3ICsxMDcsNyBAQAogKFdpbmRvd3Mgb25seSkKIAogCi1UaGlzIG1vZHVsZSBhbHNvIGRlZmluZXMgdHdvIHNob3J0Y3V0IGZ1bmN0aW9uczoKK1RoaXMgbW9kdWxlIGFsc28gZGVmaW5lcyBzb21lIHNob3J0Y3V0IGZ1bmN0aW9uczoKIAogY2FsbCgqcG9wZW5hcmdzLCAqKmt3YXJncyk6CiAgICAgUnVuIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMuICBXYWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlLCB0aGVuCkBAIC0xMjcsNiArMTI3LDE4IEBACiAKICAgICBjaGVja19jYWxsKFsibHMiLCAiLWwiXSkKIAorY2hlY2tfb3V0cHV0KCpwb3BlbmFyZ3MsICoqa3dhcmdzKToKKyAgICBSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQgYXMgYSBieXRlIHN0cmluZy4KKworICAgIElmIHRoZSBleGl0IGNvZGUgd2FzIG5vbi16ZXJvIGl0IHJhaXNlcyBhIENhbGxlZFByb2Nlc3NFcnJvci4gIFRoZQorICAgIENhbGxlZFByb2Nlc3NFcnJvciBvYmplY3Qgd2lsbCBoYXZlIHRoZSByZXR1cm4gY29kZSBpbiB0aGUgcmV0dXJuY29kZQorICAgIGF0dHJpYnV0ZSBhbmQgb3V0cHV0IGluIHRoZSBvdXRwdXQgYXR0cmlidXRlLgorCisgICAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBQb3BlbiBjb25zdHJ1Y3Rvci4gIEV4YW1wbGU6CisKKyAgICBvdXRwdXQgPSBjaGVja19vdXRwdXQoWyJscyIsICItbCIsICIvZGV2L251bGwiXSkKKworCiBFeGNlcHRpb25zCiAtLS0tLS0tLS0tCiBFeGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY2hpbGQgcHJvY2VzcywgYmVmb3JlIHRoZSBuZXcgcHJvZ3JhbSBoYXMKQEAgLTE0MSw4ICsxNTMsOCBAQAogCiBBIFZhbHVlRXJyb3Igd2lsbCBiZSByYWlzZWQgaWYgUG9wZW4gaXMgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHMuCiAKLWNoZWNrX2NhbGwoKSB3aWxsIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvciwgaWYgdGhlIGNhbGxlZCBwcm9jZXNzCi1yZXR1cm5zIGEgbm9uLXplcm8gcmV0dXJuIGNvZGUuCitjaGVja19jYWxsKCkgYW5kIGNoZWNrX291dHB1dCgpIHdpbGwgcmFpc2UgQ2FsbGVkUHJvY2Vzc0Vycm9yLCBpZiB0aGUKK2NhbGxlZCBwcm9jZXNzIHJldHVybnMgYSBub24temVybyByZXR1cm4gY29kZS4KIAogCiBTZWN1cml0eQpAQCAtMzM3LDcgKzM0OSw3IEBACiBwaXBlID0gb3MucG9wZW4oImNtZCIsICd3JykKIC4uLgogcmMgPSBwaXBlLmNsb3NlKCkKLWlmIHJjICE9IE5vbmUgYW5kIHJjICUgMjU2OgoraWYgcmMgaXMgbm90IE5vbmUgYW5kIHJjICUgMjU2OgogICAgIHByaW50ICJUaGVyZSB3ZXJlIHNvbWUgZXJyb3JzIgogPT0+CiBwcm9jZXNzID0gUG9wZW4oImNtZCIsICd3Jywgc2hlbGw9VHJ1ZSwgc3RkaW49UElQRSkKQEAgLTM4NywxOCArMzk5LDIwIEBACiAKICMgRXhjZXB0aW9uIGNsYXNzZXMgdXNlZCBieSB0aGlzIG1vZHVsZS4KIGNsYXNzIENhbGxlZFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgotICAgICIiIlRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIGEgcHJvY2VzcyBydW4gYnkgY2hlY2tfY2FsbCgpIHJldHVybnMKLSAgICBhIG5vbi16ZXJvIGV4aXQgc3RhdHVzLiAgVGhlIGV4aXQgc3RhdHVzIHdpbGwgYmUgc3RvcmVkIGluIHRoZQotICAgIHJldHVybmNvZGUgYXR0cmlidXRlLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXR1cm5jb2RlLCBjbWQpOgorICAgICIiIlRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIGEgcHJvY2VzcyBydW4gYnkgY2hlY2tfY2FsbCgpIG9yCisgICAgY2hlY2tfb3V0cHV0KCkgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgc3RhdHVzLgorICAgIFRoZSBleGl0IHN0YXR1cyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgcmV0dXJuY29kZSBhdHRyaWJ1dGU7CisgICAgY2hlY2tfb3V0cHV0KCkgd2lsbCBhbHNvIHN0b3JlIHRoZSBvdXRwdXQgaW4gdGhlIG91dHB1dCBhdHRyaWJ1dGUuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJldHVybmNvZGUsIGNtZCwgb3V0cHV0PU5vbmUpOgogICAgICAgICBzZWxmLnJldHVybmNvZGUgPSByZXR1cm5jb2RlCiAgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJldHVybiAiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkIiAlIChzZWxmLmNtZCwgc2VsZi5yZXR1cm5jb2RlKQogCiAKIGlmIG1zd2luZG93czoKLSAgICBmcm9tIF9zdWJwcm9jZXNzIGltcG9ydCBDUkVBVEVfTkVXX0NPTlNPTEUKICAgICBpbXBvcnQgdGhyZWFkaW5nCiAgICAgaW1wb3J0IG1zdmNydAogICAgIGltcG9ydCBfc3VicHJvY2VzcwpAQCAtNDEyLDI2ICs0MjYsMjggQEAKICAgICAgICAgZXJyb3IgPSBJT0Vycm9yCiBlbHNlOgogICAgIGltcG9ydCBzZWxlY3QKKyAgICBfaGFzX3BvbGwgPSBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKQogICAgIGltcG9ydCBlcnJubwogICAgIGltcG9ydCBmY250bAogICAgIGltcG9ydCBwaWNrbGUKIAotX19hbGxfXyA9IFsiUG9wZW4iLCAiUElQRSIsICJTVERPVVQiLCAiY2FsbCIsICJjaGVja19jYWxsIiwgIkNhbGxlZFByb2Nlc3NFcnJvciJdCisgICAgIyBXaGVuIHNlbGVjdCBvciBwb2xsIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGUgZmlsZSBpcyB3cml0YWJsZSwKKyAgICAjIHdlIGNhbiB3cml0ZSB1cCB0byBfUElQRV9CVUYgYnl0ZXMgd2l0aG91dCByaXNrIG9mIGJsb2NraW5nLgorICAgICMgUE9TSVggZGVmaW5lcyBQSVBFX0JVRiBhcyA+PSA1MTIuCisgICAgX1BJUEVfQlVGID0gZ2V0YXR0cihzZWxlY3QsICdQSVBFX0JVRicsIDUxMikKKworCitfX2FsbF9fID0gWyJQb3BlbiIsICJQSVBFIiwgIlNURE9VVCIsICJjYWxsIiwgImNoZWNrX2NhbGwiLAorICAgICAgICAgICAiY2hlY2tfb3V0cHV0IiwgIkNhbGxlZFByb2Nlc3NFcnJvciJdCiAKIGlmIG1zd2luZG93czoKLSAgICBfX2FsbF9fLmFwcGVuZCgiQ1JFQVRFX05FV19DT05TT0xFIikKKyAgICBmcm9tIF9zdWJwcm9jZXNzIGltcG9ydCBDUkVBVEVfTkVXX0NPTlNPTEUsIENSRUFURV9ORVdfUFJPQ0VTU19HUk9VUAorICAgIF9fYWxsX18uZXh0ZW5kKFsiQ1JFQVRFX05FV19DT05TT0xFIiwgIkNSRUFURV9ORVdfUFJPQ0VTU19HUk9VUCJdKQogdHJ5OgogICAgIE1BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQogZXhjZXB0OgogICAgIE1BWEZEID0gMjU2CiAKLSMgVHJ1ZS9GYWxzZSBkb2VzIG5vdCBleGlzdCBvbiAyLjIuMAotI3RyeToKLSMgICAgRmFsc2UKLSNleGNlcHQgTmFtZUVycm9yOgotIyAgICBGYWxzZSA9IDAKLSMgICAgVHJ1ZSA9IDEKLQogX2FjdGl2ZSA9IFtdCiAKIGRlZiBfY2xlYW51cCgpOgpAQCAtNDgxLDEyICs0OTcsNDUgQEAKICAgICBjaGVja19jYWxsKFsibHMiLCAiLWwiXSkKICAgICAiIiIKICAgICByZXRjb2RlID0gY2FsbCgqcG9wZW5hcmdzLCAqKmt3YXJncykKLSAgICBjbWQgPSBrd2FyZ3MuZ2V0KCJhcmdzIikKLSAgICBpZiBjbWQgaXMgTm9uZToKLSAgICAgICAgY21kID0gcG9wZW5hcmdzWzBdCiAgICAgaWYgcmV0Y29kZToKKyAgICAgICAgY21kID0ga3dhcmdzLmdldCgiYXJncyIpCisgICAgICAgIGlmIGNtZCBpcyBOb25lOgorICAgICAgICAgICAgY21kID0gcG9wZW5hcmdzWzBdCiAgICAgICAgIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2RlLCBjbWQpCi0gICAgcmV0dXJuIHJldGNvZGUKKyAgICByZXR1cm4gMAorCisKK2RlZiBjaGVja19vdXRwdXQoKnBvcGVuYXJncywgKiprd2FyZ3MpOgorICAgIHIiIiJSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQgYXMgYSBieXRlIHN0cmluZy4KKworICAgIElmIHRoZSBleGl0IGNvZGUgd2FzIG5vbi16ZXJvIGl0IHJhaXNlcyBhIENhbGxlZFByb2Nlc3NFcnJvci4gIFRoZQorICAgIENhbGxlZFByb2Nlc3NFcnJvciBvYmplY3Qgd2lsbCBoYXZlIHRoZSByZXR1cm4gY29kZSBpbiB0aGUgcmV0dXJuY29kZQorICAgIGF0dHJpYnV0ZSBhbmQgb3V0cHV0IGluIHRoZSBvdXRwdXQgYXR0cmlidXRlLgorCisgICAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBQb3BlbiBjb25zdHJ1Y3Rvci4gIEV4YW1wbGU6CisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsibHMiLCAiLWwiLCAiL2Rldi9udWxsIl0pCisgICAgJ2Nydy1ydy1ydy0gMSByb290IHJvb3QgMSwgMyBPY3QgMTggIDIwMDcgL2Rldi9udWxsXG4nCisKKyAgICBUaGUgc3Rkb3V0IGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIGFzIGl0IGlzIHVzZWQgaW50ZXJuYWxseS4KKyAgICBUbyBjYXB0dXJlIHN0YW5kYXJkIGVycm9yIGluIHRoZSByZXN1bHQsIHVzZSBzdGRlcnI9U1RET1VULgorCisgICAgPj4+IGNoZWNrX291dHB1dChbIi9iaW4vc2giLCAiLWMiLAorICAgIC4uLiAgICAgICAgICAgICAgICJscyAtbCBub25fZXhpc3RlbnRfZmlsZSA7IGV4aXQgMCJdLAorICAgIC4uLiAgICAgICAgICAgICAgc3RkZXJyPVNURE9VVCkKKyAgICAnbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCisgICAgIiIiCisgICAgaWYgJ3N0ZG91dCcgaW4ga3dhcmdzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRvdXQgYXJndW1lbnQgbm90IGFsbG93ZWQsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi4nKQorICAgIHByb2Nlc3MgPSBQb3BlbihzdGRvdXQ9UElQRSwgKnBvcGVuYXJncywgKiprd2FyZ3MpCisgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgcmV0Y29kZSA9IHByb2Nlc3MucG9sbCgpCisgICAgaWYgcmV0Y29kZToKKyAgICAgICAgY21kID0ga3dhcmdzLmdldCgiYXJncyIpCisgICAgICAgIGlmIGNtZCBpcyBOb25lOgorICAgICAgICAgICAgY21kID0gcG9wZW5hcmdzWzBdCisgICAgICAgIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2RlLCBjbWQsIG91dHB1dD1vdXRwdXQpCisgICAgcmV0dXJuIG91dHB1dAogCiAKIGRlZiBsaXN0MmNtZGxpbmUoc2VxKToKQEAgLTcwMCw3ICs3NDksNyBAQAogICAgICAgICAjIFdpbmRvd3MgbWV0aG9kcwogICAgICAgICAjCiAgICAgICAgIGRlZiBfZ2V0X2hhbmRsZXMoc2VsZiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKToKLSAgICAgICAgICAgICIiIkNvbnN0cnVjdCBhbmQgcmV0dXJuIHR1cGVsIHdpdGggSU8gb2JqZWN0czoKKyAgICAgICAgICAgICIiIkNvbnN0cnVjdCBhbmQgcmV0dXJuIHR1cGxlIHdpdGggSU8gb2JqZWN0czoKICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlLCBjMnByZWFkLCBjMnB3cml0ZSwgZXJycmVhZCwgZXJyd3JpdGUKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgaWYgc3RkaW4gaXMgTm9uZSBhbmQgc3Rkb3V0IGlzIE5vbmUgYW5kIHN0ZGVyciBpcyBOb25lOgpAQCAtODA0LDggKzg1Myw4IEBACiAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm8uZHdGbGFncyB8PSBfc3VicHJvY2Vzcy5TVEFSVEZfVVNFU0hPV1dJTkRPVwogICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLndTaG93V2luZG93ID0gX3N1YnByb2Nlc3MuU1dfSElERQogICAgICAgICAgICAgICAgIGNvbXNwZWMgPSBvcy5lbnZpcm9uLmdldCgiQ09NU1BFQyIsICJjbWQuZXhlIikKLSAgICAgICAgICAgICAgICBhcmdzID0gY29tc3BlYyArICIgL2MgIiArIGFyZ3MKLSAgICAgICAgICAgICAgICBpZiAoX3N1YnByb2Nlc3MuR2V0VmVyc2lvbigpID49IDB4ODAwMDAwMDBMIG9yCisgICAgICAgICAgICAgICAgYXJncyA9ICd7fSAvYyAie30iJy5mb3JtYXQgKGNvbXNwZWMsIGFyZ3MpCisgICAgICAgICAgICAgICAgaWYgKF9zdWJwcm9jZXNzLkdldFZlcnNpb24oKSA+PSAweDgwMDAwMDAwIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKGNvbXNwZWMpLmxvd2VyKCkgPT0gImNvbW1hbmQuY29tIik6CiAgICAgICAgICAgICAgICAgICAgICMgV2luOXgsIG9yIHVzaW5nIGNvbW1hbmQuY29tIG9uIE5ULiBXZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICMgdXNlIHRoZSB3OXhwb3BlbiBpbnRlcm1lZGlhdGUgcHJvZ3JhbS4gRm9yIG1vcmUKQEAgLTgzNyw2ICs4ODYsMTkgQEAKICAgICAgICAgICAgICAgICAjIHRyYW5zbGF0ZSBlcnJubyB1c2luZyBfc3lzX2Vycmxpc3QgKG9yIHNpbWxpYXIpLCBidXQKICAgICAgICAgICAgICAgICAjIGhvdyBjYW4gdGhpcyBiZSBkb25lIGZyb20gUHl0aG9uPwogICAgICAgICAgICAgICAgIHJhaXNlIFdpbmRvd3NFcnJvcigqZS5hcmdzKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAjIENoaWxkIGlzIGxhdW5jaGVkLiBDbG9zZSB0aGUgcGFyZW50J3MgY29weSBvZiB0aG9zZSBwaXBlCisgICAgICAgICAgICAgICAgIyBoYW5kbGVzIHRoYXQgb25seSB0aGUgY2hpbGQgc2hvdWxkIGhhdmUgb3Blbi4gIFlvdSBuZWVkCisgICAgICAgICAgICAgICAgIyB0byBtYWtlIHN1cmUgdGhhdCBubyBoYW5kbGVzIHRvIHRoZSB3cml0ZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgIyBvdXRwdXQgcGlwZSBhcmUgbWFpbnRhaW5lZCBpbiB0aGlzIHByb2Nlc3Mgb3IgZWxzZSB0aGUKKyAgICAgICAgICAgICAgICAjIHBpcGUgd2lsbCBub3QgY2xvc2Ugd2hlbiB0aGUgY2hpbGQgcHJvY2VzcyBleGl0cyBhbmQgdGhlCisgICAgICAgICAgICAgICAgIyBSZWFkRmlsZSB3aWxsIGhhbmcuCisgICAgICAgICAgICAgICAgaWYgcDJjcmVhZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcDJjcmVhZC5DbG9zZSgpCisgICAgICAgICAgICAgICAgaWYgYzJwd3JpdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGMycHdyaXRlLkNsb3NlKCkKKyAgICAgICAgICAgICAgICBpZiBlcnJ3cml0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZXJyd3JpdGUuQ2xvc2UoKQogCiAgICAgICAgICAgICAjIFJldGFpbiB0aGUgcHJvY2VzcyBoYW5kbGUsIGJ1dCBjbG9zZSB0aGUgdGhyZWFkIGhhbmRsZQogICAgICAgICAgICAgc2VsZi5fY2hpbGRfY3JlYXRlZCA9IFRydWUKQEAgLTg0NCwyMCArOTA2LDYgQEAKICAgICAgICAgICAgIHNlbGYucGlkID0gcGlkCiAgICAgICAgICAgICBodC5DbG9zZSgpCiAKLSAgICAgICAgICAgICMgQ2hpbGQgaXMgbGF1bmNoZWQuIENsb3NlIHRoZSBwYXJlbnQncyBjb3B5IG9mIHRob3NlIHBpcGUKLSAgICAgICAgICAgICMgaGFuZGxlcyB0aGF0IG9ubHkgdGhlIGNoaWxkIHNob3VsZCBoYXZlIG9wZW4uICBZb3UgbmVlZAotICAgICAgICAgICAgIyB0byBtYWtlIHN1cmUgdGhhdCBubyBoYW5kbGVzIHRvIHRoZSB3cml0ZSBlbmQgb2YgdGhlCi0gICAgICAgICAgICAjIG91dHB1dCBwaXBlIGFyZSBtYWludGFpbmVkIGluIHRoaXMgcHJvY2VzcyBvciBlbHNlIHRoZQotICAgICAgICAgICAgIyBwaXBlIHdpbGwgbm90IGNsb3NlIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3MgZXhpdHMgYW5kIHRoZQotICAgICAgICAgICAgIyBSZWFkRmlsZSB3aWxsIGhhbmcuCi0gICAgICAgICAgICBpZiBwMmNyZWFkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHAyY3JlYWQuQ2xvc2UoKQotICAgICAgICAgICAgaWYgYzJwd3JpdGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgYzJwd3JpdGUuQ2xvc2UoKQotICAgICAgICAgICAgaWYgZXJyd3JpdGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZXJyd3JpdGUuQ2xvc2UoKQotCi0KICAgICAgICAgZGVmIF9pbnRlcm5hbF9wb2xsKHNlbGYsIF9kZWFkc3RhdGU9Tm9uZSwKICAgICAgICAgICAgICAgICBfV2FpdEZvclNpbmdsZU9iamVjdD1fc3VicHJvY2Vzcy5XYWl0Rm9yU2luZ2xlT2JqZWN0LAogICAgICAgICAgICAgICAgIF9XQUlUX09CSkVDVF8wPV9zdWJwcm9jZXNzLldBSVRfT0JKRUNUXzAsCkBAIC05NDAsOCArOTg4LDEyIEBACiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGlmIHNpZyA9PSBzaWduYWwuU0lHVEVSTToKICAgICAgICAgICAgICAgICBzZWxmLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICBlbGlmIHNpZyA9PSBzaWduYWwuQ1RSTF9DX0VWRU5UOgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIHNpZ25hbC5DVFJMX0NfRVZFTlQpCisgICAgICAgICAgICBlbGlmIHNpZyA9PSBzaWduYWwuQ1RSTF9CUkVBS19FVkVOVDoKKyAgICAgICAgICAgICAgICBvcy5raWxsKHNlbGYucGlkLCBzaWduYWwuQ1RSTF9CUkVBS19FVkVOVCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT25seSBTSUdURVJNIGlzIHN1cHBvcnRlZCBvbiBXaW5kb3dzIikKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBvcnRlZCBzaWduYWw6IHt9Ii5mb3JtYXQoc2lnKSkKIAogICAgICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgogICAgICAgICAgICAgIiIiVGVybWluYXRlcyB0aGUgcHJvY2VzcwpAQCAtOTU1LDcgKzEwMDcsNyBAQAogICAgICAgICAjIFBPU0lYIG1ldGhvZHMKICAgICAgICAgIwogICAgICAgICBkZWYgX2dldF9oYW5kbGVzKHNlbGYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgICAgICAgICAiIiJDb25zdHJ1Y3QgYW5kIHJldHVybiB0dXBlbCB3aXRoIElPIG9iamVjdHM6CisgICAgICAgICAgICAiIiJDb25zdHJ1Y3QgYW5kIHJldHVybiB0dXBsZSB3aXRoIElPIG9iamVjdHM6CiAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSwgYzJwcmVhZCwgYzJwd3JpdGUsIGVycnJlYWQsIGVycndyaXRlCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlID0gTm9uZSwgTm9uZQpAQCAtOTk5LDE5ICsxMDUxLDMxIEBACiAgICAgICAgICAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlKQogCiAKLSAgICAgICAgZGVmIF9zZXRfY2xvZXhlY19mbGFnKHNlbGYsIGZkKToKKyAgICAgICAgZGVmIF9zZXRfY2xvZXhlY19mbGFnKHNlbGYsIGZkLCBjbG9leGVjPVRydWUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGNsb2V4ZWNfZmxhZyA9IGZjbnRsLkZEX0NMT0VYRUMKICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgICAgICBjbG9leGVjX2ZsYWcgPSAxCiAKICAgICAgICAgICAgIG9sZCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKQotICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkQsIG9sZCB8IGNsb2V4ZWNfZmxhZykKKyAgICAgICAgICAgIGlmIGNsb2V4ZWM6CisgICAgICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkQsIG9sZCB8IGNsb2V4ZWNfZmxhZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkQsIG9sZCAmIH5jbG9leGVjX2ZsYWcpCiAKIAogICAgICAgICBkZWYgX2Nsb3NlX2ZkcyhzZWxmLCBidXQpOgotICAgICAgICAgICAgb3MuY2xvc2VyYW5nZSgzLCBidXQpCi0gICAgICAgICAgICBvcy5jbG9zZXJhbmdlKGJ1dCArIDEsIE1BWEZEKQorICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgJ2Nsb3NlcmFuZ2UnKToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZXJhbmdlKDMsIGJ1dCkKKyAgICAgICAgICAgICAgICBvcy5jbG9zZXJhbmdlKGJ1dCArIDEsIE1BWEZEKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMywgTUFYRkQpOgorICAgICAgICAgICAgICAgICAgICBpZiBpID09IGJ1dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGkpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogCiAgICAgICAgIGRlZiBfZXhlY3V0ZV9jaGlsZChzZWxmLCBhcmdzLCBleGVjdXRhYmxlLCBwcmVleGVjX2ZuLCBjbG9zZV9mZHMsCkBAIC0xMDY3LDIxICsxMTMxLDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZXJycGlwZV9yZWFkKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEdXAgZmRzIGZvciBjaGlsZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAyY3JlYWQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmR1cDIocDJjcmVhZCwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjMnB3cml0ZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZHVwMihjMnB3cml0ZSwgMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJ3cml0ZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZHVwMihlcnJ3cml0ZSwgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgX2R1cDIoYSwgYik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZHVwMigpIHJlbW92ZXMgdGhlIENMT0VYRUMgZmxhZyBidXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBtdXN0IGRvIGl0IG91cnNlbHZlcyBpZiBkdXAyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3b3VsZCBiZSBhIG5vLW9wIChpc3N1ZSAjMTA4MDYpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhID09IGI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXRfY2xvZXhlY19mbGFnKGEsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5kdXAyKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2R1cDIocDJjcmVhZCwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZHVwMihjMnB3cml0ZSwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZHVwMihlcnJ3cml0ZSwgMikKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2xvc2UgcGlwZSBmZHMuICBNYWtlIHN1cmUgd2UgZG9uJ3QgY2xvc2UgdGhlIHNhbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZkIG1vcmUgdGhhbiBvbmNlLCBvciBzdGFuZGFyZCBmZHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcDJjcmVhZCBpcyBub3QgTm9uZSBhbmQgcDJjcmVhZCBub3QgaW4gKDAsKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UocDJjcmVhZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjMnB3cml0ZSBpcyBub3QgTm9uZSBhbmQgYzJwd3JpdGUgbm90IGluIChwMmNyZWFkLCAxKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoYzJwd3JpdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyd3JpdGUgaXMgbm90IE5vbmUgYW5kIGVycndyaXRlIG5vdCBpbiAocDJjcmVhZCwgYzJwd3JpdGUsIDIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShlcnJ3cml0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENsb3NlIHBpcGUgZmRzLiAgTWFrZSBzdXJlIHdlIGRvbid0IGNsb3NlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2FtZSBmZCBtb3JlIHRoYW4gb25jZSwgb3Igc3RhbmRhcmQgZmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZCA9IHsgTm9uZSB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZkIGluIFtwMmNyZWFkLCBjMnB3cml0ZSwgZXJyd3JpdGVdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmZCBub3QgaW4gY2xvc2VkIGFuZCBmZCA+IDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZC5hZGQoZmQpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENsb3NlIGFsbCBvdGhlciBmZHMsIGlmIGFza2VkIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlX2ZkczoKQEAgLTExMzMsNyArMTIwMSwxMSBAQAogICAgICAgICAgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfcmVhZCkKIAogICAgICAgICAgICAgaWYgZGF0YSAhPSAiIjoKLSAgICAgICAgICAgICAgICBfZWludHJfcmV0cnlfY2FsbChvcy53YWl0cGlkLCBzZWxmLnBpZCwgMCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIF9laW50cl9yZXRyeV9jYWxsKG9zLndhaXRwaWQsIHNlbGYucGlkLCAwKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUNISUxEOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBjaGlsZF9leGNlcHRpb24gPSBwaWNrbGUubG9hZHMoZGF0YSkKICAgICAgICAgICAgICAgICBmb3IgZmQgaW4gKHAyY3dyaXRlLCBjMnByZWFkLCBlcnJyZWFkKToKICAgICAgICAgICAgICAgICAgICAgaWYgZmQgaXMgbm90IE5vbmU6CkBAIC0xMTc5LDI1ICsxMjUxLDExNCBAQAogICAgICAgICAgICAgIiIiV2FpdCBmb3IgY2hpbGQgcHJvY2VzcyB0byB0ZXJtaW5hdGUuICBSZXR1cm5zIHJldHVybmNvZGUKICAgICAgICAgICAgIGF0dHJpYnV0ZS4iIiIKICAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHBpZCwgc3RzID0gX2VpbnRyX3JldHJ5X2NhbGwob3Mud2FpdHBpZCwgc2VsZi5waWQsIDApCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IF9laW50cl9yZXRyeV9jYWxsKG9zLndhaXRwaWQsIHNlbGYucGlkLCAwKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUNISUxEOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGhhcHBlbnMgaWYgU0lHQ0xEIGlzIHNldCB0byBiZSBpZ25vcmVkIG9yIHdhaXRpbmcKKyAgICAgICAgICAgICAgICAgICAgIyBmb3IgY2hpbGQgcHJvY2Vzc2VzIGhhcyBvdGhlcndpc2UgYmVlbiBkaXNhYmxlZCBmb3Igb3VyCisgICAgICAgICAgICAgICAgICAgICMgcHJvY2Vzcy4gIFRoaXMgY2hpbGQgaXMgZGVhZCwgd2UgY2FuJ3QgZ2V0IHRoZSBzdGF0dXMuCisgICAgICAgICAgICAgICAgICAgIHN0cyA9IDAKICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXhpdHN0YXR1cyhzdHMpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCiAKIAogICAgICAgICBkZWYgX2NvbW11bmljYXRlKHNlbGYsIGlucHV0KToKKyAgICAgICAgICAgIGlmIHNlbGYuc3RkaW46CisgICAgICAgICAgICAgICAgIyBGbHVzaCBzdGRpbyBidWZmZXIuICBUaGlzIG1pZ2h0IGJsb2NrLCBpZiB0aGUgdXNlciBoYXMKKyAgICAgICAgICAgICAgICAjIGJlZW4gd3JpdGluZyB0byAuc3RkaW4gaW4gYW4gdW5jb250cm9sbGVkIGZhc2hpb24uCisgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5mbHVzaCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGlucHV0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKKworICAgICAgICAgICAgaWYgX2hhc19wb2xsOgorICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fY29tbXVuaWNhdGVfd2l0aF9wb2xsKGlucHV0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHNlbGYuX2NvbW11bmljYXRlX3dpdGhfc2VsZWN0KGlucHV0KQorCisgICAgICAgICAgICAjIEFsbCBkYXRhIGV4Y2hhbmdlZC4gIFRyYW5zbGF0ZSBsaXN0cyBpbnRvIHN0cmluZ3MuCisgICAgICAgICAgICBpZiBzdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3Rkb3V0ID0gJycuam9pbihzdGRvdXQpCisgICAgICAgICAgICBpZiBzdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RkZXJyID0gJycuam9pbihzdGRlcnIpCisKKyAgICAgICAgICAgICMgVHJhbnNsYXRlIG5ld2xpbmVzLCBpZiByZXF1ZXN0ZWQuICBXZSBjYW5ub3QgbGV0IHRoZSBmaWxlCisgICAgICAgICAgICAjIG9iamVjdCBkbyB0aGUgdHJhbnNsYXRpb246IEl0IGlzIGJhc2VkIG9uIHN0ZGlvLCB3aGljaCBpcworICAgICAgICAgICAgIyBpbXBvc3NpYmxlIHRvIGNvbWJpbmUgd2l0aCBzZWxlY3QgKHVubGVzcyBmb3JjaW5nIG5vCisgICAgICAgICAgICAjIGJ1ZmZlcmluZykuCisgICAgICAgICAgICBpZiBzZWxmLnVuaXZlcnNhbF9uZXdsaW5lcyBhbmQgaGFzYXR0cihmaWxlLCAnbmV3bGluZXMnKToKKyAgICAgICAgICAgICAgICBpZiBzdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX3RyYW5zbGF0ZV9uZXdsaW5lcyhzdGRvdXQpCisgICAgICAgICAgICAgICAgaWYgc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl90cmFuc2xhdGVfbmV3bGluZXMoc3RkZXJyKQorCisgICAgICAgICAgICBzZWxmLndhaXQoKQorICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZGVycikKKworCisgICAgICAgIGRlZiBfY29tbXVuaWNhdGVfd2l0aF9wb2xsKHNlbGYsIGlucHV0KToKKyAgICAgICAgICAgIHN0ZG91dCA9IE5vbmUgIyBSZXR1cm4KKyAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUgIyBSZXR1cm4KKyAgICAgICAgICAgIGZkMmZpbGUgPSB7fQorICAgICAgICAgICAgZmQyb3V0cHV0ID0ge30KKworICAgICAgICAgICAgcG9sbGVyID0gc2VsZWN0LnBvbGwoKQorICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX2FuZF9hcHBlbmQoZmlsZV9vYmosIGV2ZW50bWFzayk6CisgICAgICAgICAgICAgICAgcG9sbGVyLnJlZ2lzdGVyKGZpbGVfb2JqLmZpbGVubygpLCBldmVudG1hc2spCisgICAgICAgICAgICAgICAgZmQyZmlsZVtmaWxlX29iai5maWxlbm8oKV0gPSBmaWxlX29iagorCisgICAgICAgICAgICBkZWYgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKToKKyAgICAgICAgICAgICAgICBwb2xsZXIudW5yZWdpc3RlcihmZCkKKyAgICAgICAgICAgICAgICBmZDJmaWxlW2ZkXS5jbG9zZSgpCisgICAgICAgICAgICAgICAgZmQyZmlsZS5wb3AoZmQpCisKKyAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gYW5kIGlucHV0OgorICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FuZF9hcHBlbmQoc2VsZi5zdGRpbiwgc2VsZWN0LlBPTExPVVQpCisKKyAgICAgICAgICAgIHNlbGVjdF9QT0xMSU5fUE9MTFBSSSA9IHNlbGVjdC5QT0xMSU4gfCBzZWxlY3QuUE9MTFBSSQorICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6CisgICAgICAgICAgICAgICAgcmVnaXN0ZXJfYW5kX2FwcGVuZChzZWxmLnN0ZG91dCwgc2VsZWN0X1BPTExJTl9QT0xMUFJJKQorICAgICAgICAgICAgICAgIGZkMm91dHB1dFtzZWxmLnN0ZG91dC5maWxlbm8oKV0gPSBzdGRvdXQgPSBbXQorICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICAgICAgcmVnaXN0ZXJfYW5kX2FwcGVuZChzZWxmLnN0ZGVyciwgc2VsZWN0X1BPTExJTl9QT0xMUFJJKQorICAgICAgICAgICAgICAgIGZkMm91dHB1dFtzZWxmLnN0ZGVyci5maWxlbm8oKV0gPSBzdGRlcnIgPSBbXQorCisgICAgICAgICAgICBpbnB1dF9vZmZzZXQgPSAwCisgICAgICAgICAgICB3aGlsZSBmZDJmaWxlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBwb2xsZXIucG9sbCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciwgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5vLkVJTlRSOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgICAgIGZvciBmZCwgbW9kZSBpbiByZWFkeToKKyAgICAgICAgICAgICAgICAgICAgaWYgbW9kZSAmIHNlbGVjdC5QT0xMT1VUOgorICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBpbnB1dFtpbnB1dF9vZmZzZXQgOiBpbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCisgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9vZmZzZXQgKz0gb3Mud3JpdGUoZmQsIGNodW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5wdXRfb2Zmc2V0ID49IGxlbihpbnB1dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKQorICAgICAgICAgICAgICAgICAgICBlbGlmIG1vZGUgJiBzZWxlY3RfUE9MTElOX1BPTExQUkk6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChmZCwgNDA5NikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZkMm91dHB1dFtmZF0uYXBwZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBoYW5nIHVwIG9yIGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKKworICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZGVycikKKworCisgICAgICAgIGRlZiBfY29tbXVuaWNhdGVfd2l0aF9zZWxlY3Qoc2VsZiwgaW5wdXQpOgogICAgICAgICAgICAgcmVhZF9zZXQgPSBbXQogICAgICAgICAgICAgd3JpdGVfc2V0ID0gW10KICAgICAgICAgICAgIHN0ZG91dCA9IE5vbmUgIyBSZXR1cm4KICAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUgIyBSZXR1cm4KIAotICAgICAgICAgICAgaWYgc2VsZi5zdGRpbjoKLSAgICAgICAgICAgICAgICAjIEZsdXNoIHN0ZGlvIGJ1ZmZlci4gIFRoaXMgbWlnaHQgYmxvY2ssIGlmIHRoZSB1c2VyIGhhcwotICAgICAgICAgICAgICAgICMgYmVlbiB3cml0aW5nIHRvIC5zdGRpbiBpbiBhbiB1bmNvbnRyb2xsZWQgZmFzaGlvbi4KLSAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmZsdXNoKCkKLSAgICAgICAgICAgICAgICBpZiBpbnB1dDoKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVfc2V0LmFwcGVuZChzZWxmLnN0ZGluKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBhbmQgaW5wdXQ6CisgICAgICAgICAgICAgICAgd3JpdGVfc2V0LmFwcGVuZChzZWxmLnN0ZGluKQogICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6CiAgICAgICAgICAgICAgICAgcmVhZF9zZXQuYXBwZW5kKHNlbGYuc3Rkb3V0KQogICAgICAgICAgICAgICAgIHN0ZG91dCA9IFtdCkBAIC0xMjE1LDEwICsxMzc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gaW4gd2xpc3Q6Ci0gICAgICAgICAgICAgICAgICAgICMgV2hlbiBzZWxlY3QgaGFzIGluZGljYXRlZCB0aGF0IHRoZSBmaWxlIGlzIHdyaXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAjIHdlIGNhbiB3cml0ZSB1cCB0byBQSVBFX0JVRiBieXRlcyB3aXRob3V0IHJpc2sKLSAgICAgICAgICAgICAgICAgICAgIyBibG9ja2luZy4gIFBPU0lYIGRlZmluZXMgUElQRV9CVUYgPj0gNTEyCi0gICAgICAgICAgICAgICAgICAgIGNodW5rID0gaW5wdXRbaW5wdXRfb2Zmc2V0IDogaW5wdXRfb2Zmc2V0ICsgNTEyXQorICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGlucHV0W2lucHV0X29mZnNldCA6IGlucHV0X29mZnNldCArIF9QSVBFX0JVRl0KICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfd3JpdHRlbiA9IG9zLndyaXRlKHNlbGYuc3RkaW4uZmlsZW5vKCksIGNodW5rKQogICAgICAgICAgICAgICAgICAgICBpbnB1dF9vZmZzZXQgKz0gYnl0ZXNfd3JpdHRlbgogICAgICAgICAgICAgICAgICAgICBpZiBpbnB1dF9vZmZzZXQgPj0gbGVuKGlucHV0KToKQEAgLTEyMzksMjUgKzEzOTcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zZXQucmVtb3ZlKHNlbGYuc3RkZXJyKQogICAgICAgICAgICAgICAgICAgICBzdGRlcnIuYXBwZW5kKGRhdGEpCiAKLSAgICAgICAgICAgICMgQWxsIGRhdGEgZXhjaGFuZ2VkLiAgVHJhbnNsYXRlIGxpc3RzIGludG8gc3RyaW5ncy4KLSAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzdGRvdXQgPSAnJy5qb2luKHN0ZG91dCkKLSAgICAgICAgICAgIGlmIHN0ZGVyciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzdGRlcnIgPSAnJy5qb2luKHN0ZGVycikKLQotICAgICAgICAgICAgIyBUcmFuc2xhdGUgbmV3bGluZXMsIGlmIHJlcXVlc3RlZC4gIFdlIGNhbm5vdCBsZXQgdGhlIGZpbGUKLSAgICAgICAgICAgICMgb2JqZWN0IGRvIHRoZSB0cmFuc2xhdGlvbjogSXQgaXMgYmFzZWQgb24gc3RkaW8sIHdoaWNoIGlzCi0gICAgICAgICAgICAjIGltcG9zc2libGUgdG8gY29tYmluZSB3aXRoIHNlbGVjdCAodW5sZXNzIGZvcmNpbmcgbm8KLSAgICAgICAgICAgICMgYnVmZmVyaW5nKS4KLSAgICAgICAgICAgIGlmIHNlbGYudW5pdmVyc2FsX25ld2xpbmVzIGFuZCBoYXNhdHRyKGZpbGUsICduZXdsaW5lcycpOgotICAgICAgICAgICAgICAgIGlmIHN0ZG91dDoKLSAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc2VsZi5fdHJhbnNsYXRlX25ld2xpbmVzKHN0ZG91dCkKLSAgICAgICAgICAgICAgICBpZiBzdGRlcnI6Ci0gICAgICAgICAgICAgICAgICAgIHN0ZGVyciA9IHNlbGYuX3RyYW5zbGF0ZV9uZXdsaW5lcyhzdGRlcnIpCi0KLSAgICAgICAgICAgIHNlbGYud2FpdCgpCiAgICAgICAgICAgICByZXR1cm4gKHN0ZG91dCwgc3RkZXJyKQogCisKICAgICAgICAgZGVmIHNlbmRfc2lnbmFsKHNlbGYsIHNpZyk6CiAgICAgICAgICAgICAiIiJTZW5kIGEgc2lnbmFsIHRvIHRoZSBwcm9jZXNzCiAgICAgICAgICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9zeW1ib2wucHkgYi9MaWIvc3ltYm9sLnB5CmluZGV4IGYyNTkwN2IuLmNmMTc5ZTUgMTAwNzU1Ci0tLSBhL0xpYi9zeW1ib2wucHkKKysrIGIvTGliL3N5bWJvbC5weQpAQCAtNTIsNyArNTIsNyBAQAogZm9yX3N0bXQgPSAyOTUKIHRyeV9zdG10ID0gMjk2CiB3aXRoX3N0bXQgPSAyOTcKLXdpdGhfdmFyID0gMjk4Cit3aXRoX2l0ZW0gPSAyOTgKIGV4Y2VwdF9jbGF1c2UgPSAyOTkKIHN1aXRlID0gMzAwCiB0ZXN0bGlzdF9zYWZlID0gMzAxCkBAIC03NCw3ICs3NCw3IEBACiBwb3dlciA9IDMxNwogYXRvbSA9IDMxOAogbGlzdG1ha2VyID0gMzE5Ci10ZXN0bGlzdF9nZXhwID0gMzIwCit0ZXN0bGlzdF9jb21wID0gMzIwCiBsYW1iZGVmID0gMzIxCiB0cmFpbGVyID0gMzIyCiBzdWJzY3JpcHRsaXN0ID0gMzIzCkBAIC04MiwxNiArODIsMTYgQEAKIHNsaWNlb3AgPSAzMjUKIGV4cHJsaXN0ID0gMzI2CiB0ZXN0bGlzdCA9IDMyNwotZGljdG1ha2VyID0gMzI4CitkaWN0b3JzZXRtYWtlciA9IDMyOAogY2xhc3NkZWYgPSAzMjkKIGFyZ2xpc3QgPSAzMzAKIGFyZ3VtZW50ID0gMzMxCiBsaXN0X2l0ZXIgPSAzMzIKIGxpc3RfZm9yID0gMzMzCiBsaXN0X2lmID0gMzM0Ci1nZW5faXRlciA9IDMzNQotZ2VuX2ZvciA9IDMzNgotZ2VuX2lmID0gMzM3Citjb21wX2l0ZXIgPSAzMzUKK2NvbXBfZm9yID0gMzM2Citjb21wX2lmID0gMzM3CiB0ZXN0bGlzdDEgPSAzMzgKIGVuY29kaW5nX2RlY2wgPSAzMzkKIHlpZWxkX2V4cHIgPSAzNDAKZGlmZiAtLWdpdCBhL0xpYi9zeW10YWJsZS5weSBiL0xpYi9zeW10YWJsZS5weQppbmRleCAwYTI1MDczLi5jYTczZjU4IDEwMDY0NAotLS0gYS9MaWIvc3ltdGFibGUucHkKKysrIGIvTGliL3N5bXRhYmxlLnB5CkBAIC0zLDkgKzMsOCBAQAogaW1wb3J0IF9zeW10YWJsZQogZnJvbSBfc3ltdGFibGUgaW1wb3J0IChVU0UsIERFRl9HTE9CQUwsIERFRl9MT0NBTCwgREVGX1BBUkFNLAogICAgICBERUZfSU1QT1JULCBERUZfQk9VTkQsIE9QVF9JTVBPUlRfU1RBUiwgT1BUX0VYRUMsIE9QVF9CQVJFX0VYRUMsCi0gICAgIFNDT1BFX09GRiwgU0NPUEVfTUFTSywgRlJFRSwgR0xPQkFMX0lNUExJQ0lULCBHTE9CQUxfRVhQTElDSVQpCisgICAgIFNDT1BFX09GRiwgU0NPUEVfTUFTSywgRlJFRSwgR0xPQkFMX0lNUExJQ0lULCBHTE9CQUxfRVhQTElDSVQsIENFTEwsIExPQ0FMKQogCi1pbXBvcnQgd2FybmluZ3MKIGltcG9ydCB3ZWFrcmVmCiAKIF9fYWxsX18gPSBbInN5bXRhYmxlIiwgIlN5bWJvbFRhYmxlIiwgIkNsYXNzIiwgIkZ1bmN0aW9uIiwgIlN5bWJvbCJdCkBAIC0xMzgsNyArMTM3LDkgQEAKIAogICAgIGRlZiBnZXRfbG9jYWxzKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9fbG9jYWxzIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9fbG9jYWxzID0gc2VsZi5fX2lkZW50c19tYXRjaGluZyhsYW1iZGEgeDp4ICYgREVGX0JPVU5EKQorICAgICAgICAgICAgbG9jcyA9IChMT0NBTCwgQ0VMTCkKKyAgICAgICAgICAgIHRlc3QgPSBsYW1iZGEgeDogKCh4ID4+IFNDT1BFX09GRikgJiBTQ09QRV9NQVNLKSBpbiBsb2NzCisgICAgICAgICAgICBzZWxmLl9fbG9jYWxzID0gc2VsZi5fX2lkZW50c19tYXRjaGluZyh0ZXN0KQogICAgICAgICByZXR1cm4gc2VsZi5fX2xvY2FscwogCiAgICAgZGVmIGdldF9nbG9iYWxzKHNlbGYpOgpAQCAtMTkxLDE2ICsxOTIsNiBAQAogICAgIGRlZiBpc19nbG9iYWwoc2VsZik6CiAgICAgICAgIHJldHVybiBib29sKHNlbGYuX19zY29wZSBpbiAoR0xPQkFMX0lNUExJQ0lULCBHTE9CQUxfRVhQTElDSVQpKQogCi0gICAgZGVmIGlzX3ZhcmFyZyhzZWxmKToKLSAgICAgICAgd2FybmluZ3Mud2FybigiaXNfdmFyYXJnKCkgaXMgb2Jzb2xldGUgYW5kIHdpbGwgYmUgcmVtb3ZlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBpc19rZXl3b3JkYXJnKHNlbGYpOgotICAgICAgICB3YXJuaW5ncy53YXJuKCJpc19rZXl3b3JkYXJnKCkgaXMgb2Jzb2xldGUgYW5kIHdpbGwgYmUgcmVtb3ZlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgICAgICByZXR1cm4gRmFsc2UKLQogICAgIGRlZiBpc19kZWNsYXJlZF9nbG9iYWwoc2VsZik6CiAgICAgICAgIHJldHVybiBib29sKHNlbGYuX19zY29wZSA9PSBHTE9CQUxfRVhQTElDSVQpCiAKQEAgLTIxNiwxMCArMjA3LDYgQEAKICAgICBkZWYgaXNfYXNzaWduZWQoc2VsZik6CiAgICAgICAgIHJldHVybiBib29sKHNlbGYuX19mbGFncyAmIERFRl9MT0NBTCkKIAotICAgIGRlZiBpc19pbl90dXBsZShzZWxmKToKLSAgICAgICAgd2FybmluZ3Mud2FybigiaXNfaW5fdHVwbGUoKSBpcyBvYnNvbGV0ZSBhbmQgd2lsbCBiZSByZW1vdmVkIiwKLSAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCi0KICAgICBkZWYgaXNfbmFtZXNwYWNlKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWYgbmFtZSBiaW5kaW5nIGludHJvZHVjZXMgbmV3IG5hbWVzcGFjZS4KIApkaWZmIC0tZ2l0IGEvTGliL3N5c2NvbmZpZy5weSBiL0xpYi9zeXNjb25maWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0MDJkOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9zeXNjb25maWcucHkKQEAgLTAsMCArMSw3MDUgQEAKKyIiIlByb3ZpZGUgYWNjZXNzIHRvIFB5dGhvbidzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisKKyIiIgoraW1wb3J0IHN5cworaW1wb3J0IG9zCitmcm9tIG9zLnBhdGggaW1wb3J0IHBhcmRpciwgcmVhbHBhdGgKKworX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAncG9zaXhfcHJlZml4JzogeworICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ2luY2x1ZGUnOiAne2Jhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3twbGF0YmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vYmluJywKKyAgICAgICAgJ2RhdGEnOiAne2Jhc2V9JywKKyAgICAgICAgfSwKKyAgICAncG9zaXhfaG9tZSc6IHsKKyAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbicsCisgICAgICAgICdwbGF0c3RkbGliJzogJ3tiYXNlfS9saWIvcHl0aG9uJywKKyAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorICAgICAgICAncGxhdGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbicsCisgICAgICAgICdpbmNsdWRlJzogJ3tiYXNlfS9pbmNsdWRlL3B5dGhvbicsCisgICAgICAgICdwbGF0aW5jbHVkZSc6ICd7YmFzZX0vaW5jbHVkZS9weXRob24nLAorICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vYmluJywKKyAgICAgICAgJ2RhdGEnICAgOiAne2Jhc2V9JywKKyAgICAgICAgfSwKKyAgICAnbnQnOiB7CisgICAgICAgICdzdGRsaWInOiAne2Jhc2V9L0xpYicsCisgICAgICAgICdwbGF0c3RkbGliJzogJ3tiYXNlfS9MaWInLAorICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vTGliL3NpdGUtcGFja2FnZXMnLAorICAgICAgICAncGxhdGxpYic6ICd7YmFzZX0vTGliL3NpdGUtcGFja2FnZXMnLAorICAgICAgICAnaW5jbHVkZSc6ICd7YmFzZX0vSW5jbHVkZScsCisgICAgICAgICdwbGF0aW5jbHVkZSc6ICd7YmFzZX0vSW5jbHVkZScsCisgICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9TY3JpcHRzJywKKyAgICAgICAgJ2RhdGEnICAgOiAne2Jhc2V9JywKKyAgICAgICAgfSwKKyAgICAnb3MyJzogeworICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS9MaWInLAorICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vTGliJywKKyAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9L0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ2luY2x1ZGUnOiAne2Jhc2V9L0luY2x1ZGUnLAorICAgICAgICAncGxhdGluY2x1ZGUnOiAne2Jhc2V9L0luY2x1ZGUnLAorICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vU2NyaXB0cycsCisgICAgICAgICdkYXRhJyAgIDogJ3tiYXNlfScsCisgICAgICAgIH0sCisgICAgJ29zMl9ob21lJzogeworICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorICAgICAgICAnZGF0YScgICA6ICd7dXNlcmJhc2V9JywKKyAgICAgICAgfSwKKyAgICAnbnRfdXNlcic6IHsKKyAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fScsCisgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9JywKKyAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9QeXRob257cHlfdmVyc2lvbl9ub2RvdH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fS9JbmNsdWRlJywKKyAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9TY3JpcHRzJywKKyAgICAgICAgJ2RhdGEnICAgOiAne3VzZXJiYXNlfScsCisgICAgICAgIH0sCisgICAgJ3Bvc2l4X3VzZXInOiB7CisgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCisgICAgICAgICdkYXRhJyAgIDogJ3t1c2VyYmFzZX0nLAorICAgICAgICB9LAorICAgICdvc3hfZnJhbWV3b3JrX3VzZXInOiB7CisgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9uJywKKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9uJywKKyAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9uL3NpdGUtcGFja2FnZXMnLAorICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob24vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZScsCisgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKKyAgICAgICAgJ2RhdGEnICAgOiAne3VzZXJiYXNlfScsCisgICAgICAgIH0sCisgICAgfQorCitfU0NIRU1FX0tFWVMgPSAoJ3N0ZGxpYicsICdwbGF0c3RkbGliJywgJ3B1cmVsaWInLCAncGxhdGxpYicsICdpbmNsdWRlJywKKyAgICAgICAgICAgICAgICAnc2NyaXB0cycsICdkYXRhJykKK19QWV9WRVJTSU9OID0gc3lzLnZlcnNpb24uc3BsaXQoKVswXQorX1BZX1ZFUlNJT05fU0hPUlQgPSBzeXMudmVyc2lvbls6M10KK19QWV9WRVJTSU9OX1NIT1JUX05PX0RPVCA9IF9QWV9WRVJTSU9OWzBdICsgX1BZX1ZFUlNJT05bMl0KK19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpCitfRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkKK19DT05GSUdfVkFSUyA9IE5vbmUKK19VU0VSX0JBU0UgPSBOb25lCisKK2RlZiBfc2FmZV9yZWFscGF0aChwYXRoKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiByZWFscGF0aChwYXRoKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByZXR1cm4gcGF0aAorCitpZiBzeXMuZXhlY3V0YWJsZToKKyAgICBfUFJPSkVDVF9CQVNFID0gb3MucGF0aC5kaXJuYW1lKF9zYWZlX3JlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSkKK2Vsc2U6CisgICAgIyBzeXMuZXhlY3V0YWJsZSBjYW4gYmUgZW1wdHkgaWYgYXJndlswXSBoYXMgYmVlbiBjaGFuZ2VkIGFuZCBQeXRob24gaXMKKyAgICAjIHVuYWJsZSB0byByZXRyaWV2ZSB0aGUgcmVhbCBwcm9ncmFtIG5hbWUKKyAgICBfUFJPSkVDVF9CQVNFID0gX3NhZmVfcmVhbHBhdGgob3MuZ2V0Y3dkKCkpCisKK2lmIG9zLm5hbWUgPT0gIm50IiBhbmQgInBjYnVpbGQiIGluIF9QUk9KRUNUX0JBU0VbLTg6XS5sb3dlcigpOgorICAgIF9QUk9KRUNUX0JBU0UgPSBfc2FmZV9yZWFscGF0aChvcy5wYXRoLmpvaW4oX1BST0pFQ1RfQkFTRSwgcGFyZGlyKSkKKyMgUEMvVlM3LjEKK2lmIG9zLm5hbWUgPT0gIm50IiBhbmQgIlxccGNcXHYiIGluIF9QUk9KRUNUX0JBU0VbLTEwOl0ubG93ZXIoKToKKyAgICBfUFJPSkVDVF9CQVNFID0gX3NhZmVfcmVhbHBhdGgob3MucGF0aC5qb2luKF9QUk9KRUNUX0JBU0UsIHBhcmRpciwgcGFyZGlyKSkKKyMgUEMvQU1ENjQKK2lmIG9zLm5hbWUgPT0gIm50IiBhbmQgIlxccGNidWlsZFxcYW1kNjQiIGluIF9QUk9KRUNUX0JBU0VbLTE0Ol0ubG93ZXIoKToKKyAgICBfUFJPSkVDVF9CQVNFID0gX3NhZmVfcmVhbHBhdGgob3MucGF0aC5qb2luKF9QUk9KRUNUX0JBU0UsIHBhcmRpciwgcGFyZGlyKSkKKworZGVmIGlzX3B5dGhvbl9idWlsZCgpOgorICAgIGZvciBmbiBpbiAoIlNldHVwLmRpc3QiLCAiU2V0dXAubG9jYWwiKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKF9QUk9KRUNUX0JBU0UsICJNb2R1bGVzIiwgZm4pKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK19QWVRIT05fQlVJTEQgPSBpc19weXRob25fYnVpbGQoKQorCitpZiBfUFlUSE9OX0JVSUxEOgorICAgIGZvciBzY2hlbWUgaW4gKCdwb3NpeF9wcmVmaXgnLCAncG9zaXhfaG9tZScpOgorICAgICAgICBfSU5TVEFMTF9TQ0hFTUVTW3NjaGVtZV1bJ2luY2x1ZGUnXSA9ICd7cHJvamVjdGJhc2V9L0luY2x1ZGUnCisgICAgICAgIF9JTlNUQUxMX1NDSEVNRVNbc2NoZW1lXVsncGxhdGluY2x1ZGUnXSA9ICd7c3JjZGlyfScKKworZGVmIF9zdWJzdF92YXJzKHMsIGxvY2FsX3ZhcnMpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHMuZm9ybWF0KCoqbG9jYWxfdmFycykKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzLmZvcm1hdCgqKm9zLmVudmlyb24pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgdmFyOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ3slc30nICUgdmFyKQorCitkZWYgX2V4dGVuZF9kaWN0KHRhcmdldF9kaWN0LCBvdGhlcl9kaWN0KToKKyAgICB0YXJnZXRfa2V5cyA9IHRhcmdldF9kaWN0LmtleXMoKQorICAgIGZvciBrZXksIHZhbHVlIGluIG90aGVyX2RpY3QuaXRlbXMoKToKKyAgICAgICAgaWYga2V5IGluIHRhcmdldF9rZXlzOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdGFyZ2V0X2RpY3Rba2V5XSA9IHZhbHVlCisKK2RlZiBfZXhwYW5kX3ZhcnMoc2NoZW1lLCB2YXJzKToKKyAgICByZXMgPSB7fQorICAgIGlmIHZhcnMgaXMgTm9uZToKKyAgICAgICAgdmFycyA9IHt9CisgICAgX2V4dGVuZF9kaWN0KHZhcnMsIGdldF9jb25maWdfdmFycygpKQorCisgICAgZm9yIGtleSwgdmFsdWUgaW4gX0lOU1RBTExfU0NIRU1FU1tzY2hlbWVdLml0ZW1zKCk6CisgICAgICAgIGlmIG9zLm5hbWUgaW4gKCdwb3NpeCcsICdudCcpOgorICAgICAgICAgICAgdmFsdWUgPSBvcy5wYXRoLmV4cGFuZHVzZXIodmFsdWUpCisgICAgICAgIHJlc1trZXldID0gb3MucGF0aC5ub3JtcGF0aChfc3Vic3RfdmFycyh2YWx1ZSwgdmFycykpCisgICAgcmV0dXJuIHJlcworCitkZWYgX2dldF9kZWZhdWx0X3NjaGVtZSgpOgorICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgIyB0aGUgZGVmYXVsdCBzY2hlbWUgZm9yIHBvc2l4IGlzIHBvc2l4X3ByZWZpeAorICAgICAgICByZXR1cm4gJ3Bvc2l4X3ByZWZpeCcKKyAgICByZXR1cm4gb3MubmFtZQorCitkZWYgX2dldHVzZXJiYXNlKCk6CisgICAgZW52X2Jhc2UgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9OVVNFUkJBU0UiLCBOb25lKQorICAgIGRlZiBqb2ludXNlcigqYXJncyk6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmV4cGFuZHVzZXIob3MucGF0aC5qb2luKCphcmdzKSkKKworICAgICMgd2hhdCBhYm91dCAnb3MyZW14JywgJ3Jpc2NvcycgPworICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKKyAgICAgICAgYmFzZSA9IG9zLmVudmlyb24uZ2V0KCJBUFBEQVRBIikgb3IgIn4iCisgICAgICAgIHJldHVybiBlbnZfYmFzZSBpZiBlbnZfYmFzZSBlbHNlIGpvaW51c2VyKGJhc2UsICJQeXRob24iKQorCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICBmcmFtZXdvcmsgPSBnZXRfY29uZmlnX3ZhcigiUFlUSE9ORlJBTUVXT1JLIikKKyAgICAgICAgaWYgZnJhbWV3b3JrOgorICAgICAgICAgICAgcmV0dXJuIGpvaW51c2VyKCJ+IiwgIkxpYnJhcnkiLCBmcmFtZXdvcmssICIlZC4lZCIlKAorICAgICAgICAgICAgICAgIHN5cy52ZXJzaW9uX2luZm9bOjJdKSkKKworICAgIHJldHVybiBlbnZfYmFzZSBpZiBlbnZfYmFzZSBlbHNlIGpvaW51c2VyKCJ+IiwgIi5sb2NhbCIpCisKKworZGVmIF9wYXJzZV9tYWtlZmlsZShmaWxlbmFtZSwgdmFycz1Ob25lKToKKyAgICAiIiJQYXJzZSBhIE1ha2VmaWxlLXN0eWxlIGZpbGUuCisKKyAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBuYW1lL3ZhbHVlIHBhaXJzIGlzIHJldHVybmVkLiAgSWYgYW4KKyAgICBvcHRpb25hbCBkaWN0aW9uYXJ5IGlzIHBhc3NlZCBpbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBpdCBpcworICAgIHVzZWQgaW5zdGVhZCBvZiBhIG5ldyBkaWN0aW9uYXJ5LgorICAgICIiIgorICAgIGltcG9ydCByZQorICAgICMgUmVnZXhlcyBuZWVkZWQgZm9yIHBhcnNpbmcgTWFrZWZpbGUgKGFuZCBzaW1pbGFyIHN5bnRheGVzLAorICAgICMgbGlrZSBvbGQtc3R5bGUgU2V0dXAgZmlsZXMpLgorICAgIF92YXJpYWJsZV9yeCA9IHJlLmNvbXBpbGUoIihbYS16QS1aXVthLXpBLVowLTlfXSspXHMqPVxzKiguKikiKQorICAgIF9maW5kdmFyMV9yeCA9IHJlLmNvbXBpbGUociJcJFwoKFtBLVphLXpdW0EtWmEtejAtOV9dKilcKSIpCisgICAgX2ZpbmR2YXIyX3J4ID0gcmUuY29tcGlsZShyIlwkeyhbQS1aYS16XVtBLVphLXowLTlfXSopfSIpCisKKyAgICBpZiB2YXJzIGlzIE5vbmU6CisgICAgICAgIHZhcnMgPSB7fQorICAgIGRvbmUgPSB7fQorICAgIG5vdGRvbmUgPSB7fQorCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmOgorICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKworICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKSBvciBsaW5lLnN0cmlwKCkgPT0gJyc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBtID0gX3ZhcmlhYmxlX3J4Lm1hdGNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBuLCB2ID0gbS5ncm91cCgxLCAyKQorICAgICAgICAgICAgdiA9IHYuc3RyaXAoKQorICAgICAgICAgICAgIyBgJCQnIGlzIGEgbGl0ZXJhbCBgJCcgaW4gbWFrZQorICAgICAgICAgICAgdG1wdiA9IHYucmVwbGFjZSgnJCQnLCAnJykKKworICAgICAgICAgICAgaWYgIiQiIGluIHRtcHY6CisgICAgICAgICAgICAgICAgbm90ZG9uZVtuXSA9IHYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB2ID0gaW50KHYpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgaW5zZXJ0IGxpdGVyYWwgYCQnCisgICAgICAgICAgICAgICAgICAgIGRvbmVbbl0gPSB2LnJlcGxhY2UoJyQkJywgJyQnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRvbmVbbl0gPSB2CisKKyAgICAjIGRvIHZhcmlhYmxlIGludGVycG9sYXRpb24gaGVyZQorICAgIHdoaWxlIG5vdGRvbmU6CisgICAgICAgIGZvciBuYW1lIGluIG5vdGRvbmUua2V5cygpOgorICAgICAgICAgICAgdmFsdWUgPSBub3Rkb25lW25hbWVdCisgICAgICAgICAgICBtID0gX2ZpbmR2YXIxX3J4LnNlYXJjaCh2YWx1ZSkgb3IgX2ZpbmR2YXIyX3J4LnNlYXJjaCh2YWx1ZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgbiA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBuIGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBzdHIoZG9uZVtuXSkKKyAgICAgICAgICAgICAgICBlbGlmIG4gaW4gbm90ZG9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBnZXQgaXQgb24gYSBzdWJzZXF1ZW50IHJvdW5kCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIG4gaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgIyBkbyBpdCBsaWtlIG1ha2U6IGZhbGwgYmFjayB0byBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICBpdGVtID0gb3MuZW52aXJvbltuXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRvbmVbbl0gPSBpdGVtID0gIiIKKyAgICAgICAgICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgPSB2YWx1ZVttLmVuZCgpOl0KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVs6bS5zdGFydCgpXSArIGl0ZW0gKyBhZnRlcgorICAgICAgICAgICAgICAgICAgICBpZiAiJCIgaW4gYWZ0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBub3Rkb25lW25hbWVdID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeTogdmFsdWUgPSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lW25hbWVdID0gdmFsdWUuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lW25hbWVdID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBub3Rkb25lW25hbWVdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgYm9ndXMgdmFyaWFibGUgcmVmZXJlbmNlOyBqdXN0IGRyb3AgaXQgc2luY2Ugd2UgY2FuJ3QgZGVhbAorICAgICAgICAgICAgICAgIGRlbCBub3Rkb25lW25hbWVdCisgICAgIyBzdHJpcCBzcHVyaW91cyBzcGFjZXMKKyAgICBmb3IgaywgdiBpbiBkb25lLml0ZW1zKCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uodiwgc3RyKToKKyAgICAgICAgICAgIGRvbmVba10gPSB2LnN0cmlwKCkKKworICAgICMgc2F2ZSB0aGUgcmVzdWx0cyBpbiB0aGUgZ2xvYmFsIGRpY3Rpb25hcnkKKyAgICB2YXJzLnVwZGF0ZShkb25lKQorICAgIHJldHVybiB2YXJzCisKKworZGVmIF9nZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKKyAgICBpZiBfUFlUSE9OX0JVSUxEOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKF9QUk9KRUNUX0JBU0UsICJNYWtlZmlsZSIpCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihnZXRfcGF0aCgncGxhdHN0ZGxpYicpLCAiY29uZmlnIiwgIk1ha2VmaWxlIikKKworCitkZWYgX2luaXRfcG9zaXgodmFycyk6CisgICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBQT1NJWCBzeXN0ZW1zLiIiIgorICAgICMgbG9hZCB0aGUgaW5zdGFsbGVkIE1ha2VmaWxlOgorICAgIG1ha2VmaWxlID0gX2dldF9tYWtlZmlsZV9maWxlbmFtZSgpCisgICAgdHJ5OgorICAgICAgICBfcGFyc2VfbWFrZWZpbGUobWFrZWZpbGUsIHZhcnMpCisgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgIG1zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIG1ha2VmaWxlCisgICAgICAgIGlmIGhhc2F0dHIoZSwgInN0cmVycm9yIik6CisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiICglcykiICUgZS5zdHJlcnJvcgorICAgICAgICByYWlzZSBJT0Vycm9yKG1zZykKKworICAgICMgbG9hZCB0aGUgaW5zdGFsbGVkIHB5Y29uZmlnLmg6CisgICAgY29uZmlnX2ggPSBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGNvbmZpZ19oKSBhcyBmOgorICAgICAgICAgICAgcGFyc2VfY29uZmlnX2goZiwgdmFycykKKyAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgY29uZmlnX2gKKyAgICAgICAgaWYgaGFzYXR0cihlLCAic3RyZXJyb3IiKToKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgKCVzKSIgJSBlLnN0cmVycm9yCisgICAgICAgIHJhaXNlIElPRXJyb3IobXNnKQorCisgICAgIyBPbiBNYWNPU1ggd2UgbmVlZCB0byBjaGVjayB0aGUgc2V0dGluZyBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAjIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDogY29uZmlndXJlIGJhc2VzIHNvbWUgY2hvaWNlcyBvbiBpdCBzbworICAgICMgaXQgbmVlZHMgdG8gYmUgY29tcGF0aWJsZS4KKyAgICAjIElmIGl0IGlzbid0IHNldCB3ZSBzZXQgaXQgdG8gdGhlIGNvbmZpZ3VyZS10aW1lIHZhbHVlCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nIGFuZCAnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJyBpbiB2YXJzOgorICAgICAgICBjZmdfdGFyZ2V0ID0gdmFyc1snTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10KKyAgICAgICAgY3VyX3RhcmdldCA9IG9zLmdldGVudignTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJywgJycpCisgICAgICAgIGlmIGN1cl90YXJnZXQgPT0gJyc6CisgICAgICAgICAgICBjdXJfdGFyZ2V0ID0gY2ZnX3RhcmdldAorICAgICAgICAgICAgb3MucHV0ZW52KCdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnLCBjZmdfdGFyZ2V0KQorICAgICAgICBlbGlmIG1hcChpbnQsIGNmZ190YXJnZXQuc3BsaXQoJy4nKSkgPiBtYXAoaW50LCBjdXJfdGFyZ2V0LnNwbGl0KCcuJykpOgorICAgICAgICAgICAgbXNnID0gKCckTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIG1pc21hdGNoOiBub3cgIiVzIiBidXQgIiVzIiAnCisgICAgICAgICAgICAgICAgICAgJ2R1cmluZyBjb25maWd1cmUnICUgKGN1cl90YXJnZXQsIGNmZ190YXJnZXQpKQorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihtc2cpCisKKyAgICAjIE9uIEFJWCwgdGhlcmUgYXJlIHdyb25nIHBhdGhzIHRvIHRoZSBsaW5rZXIgc2NyaXB0cyBpbiB0aGUgTWFrZWZpbGUKKyAgICAjIC0tIHRoZXNlIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgUHl0aG9uIHNvdXJjZSwgYnV0IHdoZW4gaW5zdGFsbGVkCisgICAgIyB0aGUgc2NyaXB0cyBhcmUgaW4gYW5vdGhlciBkaXJlY3RvcnkuCisgICAgaWYgX1BZVEhPTl9CVUlMRDoKKyAgICAgICAgdmFyc1snTERTSEFSRUQnXSA9IHZhcnNbJ0JMRFNIQVJFRCddCisKK2RlZiBfaW5pdF9ub25fcG9zaXgodmFycyk6CisgICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBOVCIiIgorICAgICMgc2V0IGJhc2ljIGluc3RhbGwgZGlyZWN0b3JpZXMKKyAgICB2YXJzWydMSUJERVNUJ10gPSBnZXRfcGF0aCgnc3RkbGliJykKKyAgICB2YXJzWydCSU5MSUJERVNUJ10gPSBnZXRfcGF0aCgncGxhdHN0ZGxpYicpCisgICAgdmFyc1snSU5DTFVERVBZJ10gPSBnZXRfcGF0aCgnaW5jbHVkZScpCisgICAgdmFyc1snU08nXSA9ICcucHlkJworICAgIHZhcnNbJ0VYRSddID0gJy5leGUnCisgICAgdmFyc1snVkVSU0lPTiddID0gX1BZX1ZFUlNJT05fU0hPUlRfTk9fRE9UCisgICAgdmFyc1snQklORElSJ10gPSBvcy5wYXRoLmRpcm5hbWUoX3NhZmVfcmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKQorCisjCisjIHB1YmxpYyBBUElzCisjCisKKworZGVmIHBhcnNlX2NvbmZpZ19oKGZwLCB2YXJzPU5vbmUpOgorICAgICIiIlBhcnNlIGEgY29uZmlnLmgtc3R5bGUgZmlsZS4KKworICAgIEEgZGljdGlvbmFyeSBjb250YWluaW5nIG5hbWUvdmFsdWUgcGFpcnMgaXMgcmV0dXJuZWQuICBJZiBhbgorICAgIG9wdGlvbmFsIGRpY3Rpb25hcnkgaXMgcGFzc2VkIGluIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGl0IGlzCisgICAgdXNlZCBpbnN0ZWFkIG9mIGEgbmV3IGRpY3Rpb25hcnkuCisgICAgIiIiCisgICAgaW1wb3J0IHJlCisgICAgaWYgdmFycyBpcyBOb25lOgorICAgICAgICB2YXJzID0ge30KKyAgICBkZWZpbmVfcnggPSByZS5jb21waWxlKCIjZGVmaW5lIChbQS1aXVtBLVphLXowLTlfXSspICguKilcbiIpCisgICAgdW5kZWZfcnggPSByZS5jb21waWxlKCIvWypdICN1bmRlZiAoW0EtWl1bQS1aYS16MC05X10rKSBbKl0vXG4iKQorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICBicmVhaworICAgICAgICBtID0gZGVmaW5lX3J4Lm1hdGNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBuLCB2ID0gbS5ncm91cCgxLCAyKQorICAgICAgICAgICAgdHJ5OiB2ID0gaW50KHYpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcworICAgICAgICAgICAgdmFyc1tuXSA9IHYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG0gPSB1bmRlZl9yeC5tYXRjaChsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICB2YXJzW20uZ3JvdXAoMSldID0gMAorICAgIHJldHVybiB2YXJzCisKK2RlZiBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIG9mIHB5Y29uZmlnLmguIiIiCisgICAgaWYgX1BZVEhPTl9CVUlMRDoKKyAgICAgICAgaWYgb3MubmFtZSA9PSAibnQiOgorICAgICAgICAgICAgaW5jX2RpciA9IG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCAiUEMiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5jX2RpciA9IF9QUk9KRUNUX0JBU0UKKyAgICBlbHNlOgorICAgICAgICBpbmNfZGlyID0gZ2V0X3BhdGgoJ3BsYXRpbmNsdWRlJykKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsICdweWNvbmZpZy5oJykKKworZGVmIGdldF9zY2hlbWVfbmFtZXMoKToKKyAgICAiIiJSZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0aGUgc2NoZW1lcyBuYW1lcy4iIiIKKyAgICBzY2hlbWVzID0gX0lOU1RBTExfU0NIRU1FUy5rZXlzKCkKKyAgICBzY2hlbWVzLnNvcnQoKQorICAgIHJldHVybiB0dXBsZShzY2hlbWVzKQorCitkZWYgZ2V0X3BhdGhfbmFtZXMoKToKKyAgICAiIiJSZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0aGUgcGF0aHMgbmFtZXMuIiIiCisgICAgcmV0dXJuIF9TQ0hFTUVfS0VZUworCitkZWYgZ2V0X3BhdGhzKHNjaGVtZT1fZ2V0X2RlZmF1bHRfc2NoZW1lKCksIHZhcnM9Tm9uZSwgZXhwYW5kPVRydWUpOgorICAgICIiIlJldHVybnMgYSBtYXBwaW5nIGNvbnRhaW5pbmcgYW4gaW5zdGFsbCBzY2hlbWUuCisKKyAgICBgYHNjaGVtZWBgIGlzIHRoZSBpbnN0YWxsIHNjaGVtZSBuYW1lLiBJZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwKKyAgICByZXR1cm4gdGhlIGRlZmF1bHQgc2NoZW1lIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKyAgICAiIiIKKyAgICBpZiBleHBhbmQ6CisgICAgICAgIHJldHVybiBfZXhwYW5kX3ZhcnMoc2NoZW1lLCB2YXJzKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBfSU5TVEFMTF9TQ0hFTUVTW3NjaGVtZV0KKworZGVmIGdldF9wYXRoKG5hbWUsIHNjaGVtZT1fZ2V0X2RlZmF1bHRfc2NoZW1lKCksIHZhcnM9Tm9uZSwgZXhwYW5kPVRydWUpOgorICAgICIiIlJldHVybnMgYSBwYXRoIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNjaGVtZS4KKworICAgIGBgc2NoZW1lYGAgaXMgdGhlIGluc3RhbGwgc2NoZW1lIG5hbWUuCisgICAgIiIiCisgICAgcmV0dXJuIGdldF9wYXRocyhzY2hlbWUsIHZhcnMsIGV4cGFuZClbbmFtZV0KKworZGVmIGdldF9jb25maWdfdmFycygqYXJncyk6CisgICAgIiIiV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgYWxsIGNvbmZpZ3VyYXRpb24KKyAgICB2YXJpYWJsZXMgcmVsZXZhbnQgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLgorCisgICAgT24gVW5peCwgdGhpcyBtZWFucyBldmVyeSB2YXJpYWJsZSBkZWZpbmVkIGluIFB5dGhvbidzIGluc3RhbGxlZCBNYWtlZmlsZTsKKyAgICBPbiBXaW5kb3dzIGFuZCBNYWMgT1MgaXQncyBhIG11Y2ggc21hbGxlciBzZXQuCisKKyAgICBXaXRoIGFyZ3VtZW50cywgcmV0dXJuIGEgbGlzdCBvZiB2YWx1ZXMgdGhhdCByZXN1bHQgZnJvbSBsb29raW5nIHVwCisgICAgZWFjaCBhcmd1bWVudCBpbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBkaWN0aW9uYXJ5LgorICAgICIiIgorICAgIGltcG9ydCByZQorICAgIGdsb2JhbCBfQ09ORklHX1ZBUlMKKyAgICBpZiBfQ09ORklHX1ZBUlMgaXMgTm9uZToKKyAgICAgICAgX0NPTkZJR19WQVJTID0ge30KKyAgICAgICAgIyBOb3JtYWxpemVkIHZlcnNpb25zIG9mIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYXJlIGhhbmR5IHRvIGhhdmU7CisgICAgICAgICMgaW4gZmFjdCwgdGhlc2UgYXJlIHRoZSBzdGFuZGFyZCB2ZXJzaW9ucyB1c2VkIG1vc3QgcGxhY2VzIGluIHRoZQorICAgICAgICAjIERpc3R1dGlscy4KKyAgICAgICAgX0NPTkZJR19WQVJTWydwcmVmaXgnXSA9IF9QUkVGSVgKKyAgICAgICAgX0NPTkZJR19WQVJTWydleGVjX3ByZWZpeCddID0gX0VYRUNfUFJFRklYCisgICAgICAgIF9DT05GSUdfVkFSU1sncHlfdmVyc2lvbiddID0gX1BZX1ZFUlNJT04KKyAgICAgICAgX0NPTkZJR19WQVJTWydweV92ZXJzaW9uX3Nob3J0J10gPSBfUFlfVkVSU0lPTl9TSE9SVAorICAgICAgICBfQ09ORklHX1ZBUlNbJ3B5X3ZlcnNpb25fbm9kb3QnXSA9IF9QWV9WRVJTSU9OWzBdICsgX1BZX1ZFUlNJT05bMl0KKyAgICAgICAgX0NPTkZJR19WQVJTWydiYXNlJ10gPSBfUFJFRklYCisgICAgICAgIF9DT05GSUdfVkFSU1sncGxhdGJhc2UnXSA9IF9FWEVDX1BSRUZJWAorICAgICAgICBfQ09ORklHX1ZBUlNbJ3Byb2plY3RiYXNlJ10gPSBfUFJPSkVDVF9CQVNFCisKKyAgICAgICAgaWYgb3MubmFtZSBpbiAoJ250JywgJ29zMicpOgorICAgICAgICAgICAgX2luaXRfbm9uX3Bvc2l4KF9DT05GSUdfVkFSUykKKyAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgX2luaXRfcG9zaXgoX0NPTkZJR19WQVJTKQorCisgICAgICAgICMgU2V0dGluZyAndXNlcmJhc2UnIGlzIGRvbmUgYmVsb3cgdGhlIGNhbGwgdG8gdGhlCisgICAgICAgICMgaW5pdCBmdW5jdGlvbiB0byBlbmFibGUgdXNpbmcgJ2dldF9jb25maWdfdmFyJyBpbgorICAgICAgICAjIHRoZSBpbml0LWZ1bmN0aW9uLgorICAgICAgICBfQ09ORklHX1ZBUlNbJ3VzZXJiYXNlJ10gPSBfZ2V0dXNlcmJhc2UoKQorCisgICAgICAgIGlmICdzcmNkaXInIG5vdCBpbiBfQ09ORklHX1ZBUlM6CisgICAgICAgICAgICBfQ09ORklHX1ZBUlNbJ3NyY2RpciddID0gX1BST0pFQ1RfQkFTRQorCisgICAgICAgICMgQ29udmVydCBzcmNkaXIgaW50byBhbiBhYnNvbHV0ZSBwYXRoIGlmIGl0IGFwcGVhcnMgbmVjZXNzYXJ5LgorICAgICAgICAjIE5vcm1hbGx5IGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuICBIb3dldmVyLCBkdXJpbmcKKyAgICAgICAgIyB0ZXN0aW5nLCBmb3IgZXhhbXBsZSwgd2UgbWlnaHQgYmUgcnVubmluZyBhIG5vbi1pbnN0YWxsZWQgcHl0aG9uCisgICAgICAgICMgZnJvbSBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCisgICAgICAgIGlmIF9QWVRIT05fQlVJTEQgYW5kIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgICAgIGJhc2UgPSBfUFJPSkVDVF9CQVNFCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGN3ZCA9IE5vbmUKKyAgICAgICAgICAgIGlmIChub3Qgb3MucGF0aC5pc2FicyhfQ09ORklHX1ZBUlNbJ3NyY2RpciddKSBhbmQKKyAgICAgICAgICAgICAgICBiYXNlICE9IGN3ZCk6CisgICAgICAgICAgICAgICAgIyBzcmNkaXIgaXMgcmVsYXRpdmUgYW5kIHdlIGFyZSBub3QgaW4gdGhlIHNhbWUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgIyBhcyB0aGUgZXhlY3V0YWJsZS4gQXNzdW1lIGV4ZWN1dGFibGUgaXMgaW4gdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgIyBkaXJlY3RvcnkgYW5kIG1ha2Ugc3JjZGlyIGFic29sdXRlLgorICAgICAgICAgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbihiYXNlLCBfQ09ORklHX1ZBUlNbJ3NyY2RpciddKQorICAgICAgICAgICAgICAgIF9DT05GSUdfVkFSU1snc3JjZGlyJ10gPSBvcy5wYXRoLm5vcm1wYXRoKHNyY2RpcikKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICBrZXJuZWxfdmVyc2lvbiA9IG9zLnVuYW1lKClbMl0gIyBLZXJuZWwgdmVyc2lvbiAoOC40LjMpCisgICAgICAgICAgICBtYWpvcl92ZXJzaW9uID0gaW50KGtlcm5lbF92ZXJzaW9uLnNwbGl0KCcuJylbMF0pCisKKyAgICAgICAgICAgIGlmIG1ham9yX3ZlcnNpb24gPCA4OgorICAgICAgICAgICAgICAgICMgT24gTWFjIE9TIFggYmVmb3JlIDEwLjQsIGNoZWNrIGlmIC1hcmNoIGFuZCAtaXN5c3Jvb3QKKyAgICAgICAgICAgICAgICAjIGFyZSBpbiBDRkxBR1Mgb3IgTERGTEFHUyBhbmQgcmVtb3ZlIHRoZW0gaWYgdGhleSBhcmUuCisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIG5lZWRlZCB3aGVuIGJ1aWxkaW5nIGV4dGVuc2lvbnMgb24gYSAxMC4zIHN5c3RlbQorICAgICAgICAgICAgICAgICMgdXNpbmcgYSB1bml2ZXJzYWwgYnVpbGQgb2YgcHl0aG9uLgorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gKCdMREZMQUdTJywgJ0JBU0VDRkxBR1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBhIG51bWJlciBvZiBkZXJpdmVkIHZhcmlhYmxlcy4gVGhlc2UgbmVlZCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXRjaGVkIHVwIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAnQ0ZMQUdTJywgJ1BZX0NGTEFHUycsICdCTERTSEFSRUQnKToKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBfQ09ORklHX1ZBUlNba2V5XQorICAgICAgICAgICAgICAgICAgICBmbGFncyA9IHJlLnN1YignLWFyY2hccytcdytccycsICcgJywgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gcmUuc3ViKCctaXN5c3Jvb3QgW14gXHRdKicsICcgJywgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgIF9DT05GSUdfVkFSU1trZXldID0gZmxhZ3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBbGxvdyB0aGUgdXNlciB0byBvdmVycmlkZSB0aGUgYXJjaGl0ZWN0dXJlIGZsYWdzIHVzaW5nCisgICAgICAgICAgICAgICAgIyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAjIE5PVEU6IFRoaXMgbmFtZSB3YXMgaW50cm9kdWNlZCBieSBBcHBsZSBpbiBPU1ggMTAuNSBhbmQKKyAgICAgICAgICAgICAgICAjIGlzIHVzZWQgYnkgc2V2ZXJhbCBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgICAgICAgICAjIHRoYXQgT1MgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBpZiAnQVJDSEZMQUdTJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgICAgICAgICBhcmNoID0gb3MuZW52aXJvblsnQVJDSEZMQUdTJ10KKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiAoJ0xERkxBR1MnLCAnQkFTRUNGTEFHUycsCisgICAgICAgICAgICAgICAgICAgICAgICAjIGEgbnVtYmVyIG9mIGRlcml2ZWQgdmFyaWFibGVzLiBUaGVzZSBuZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIHBhdGNoZWQgdXAgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICdDRkxBR1MnLCAnUFlfQ0ZMQUdTJywgJ0JMRFNIQVJFRCcpOgorCisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IF9DT05GSUdfVkFSU1trZXldCisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IHJlLnN1YignLWFyY2hccytcdytccycsICcgJywgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGZsYWdzICsgJyAnICsgYXJjaAorICAgICAgICAgICAgICAgICAgICAgICAgX0NPTkZJR19WQVJTW2tleV0gPSBmbGFncworCisgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSBvbiBPU1ggMTAuNSBvciBsYXRlciBhbmQgdGhlIHVzZXIgdHJpZXMgdG8KKyAgICAgICAgICAgICAgICAjIGNvbXBpbGVzIGFuIGV4dGVuc2lvbiB1c2luZyBhbiBTREsgdGhhdCBpcyBub3QgcHJlc2VudAorICAgICAgICAgICAgICAgICMgb24gdGhlIGN1cnJlbnQgbWFjaGluZSBpdCBpcyBiZXR0ZXIgdG8gbm90IHVzZSBhbiBTREsKKyAgICAgICAgICAgICAgICAjIHRoYW4gdG8gZmFpbC4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBUaGUgbWFqb3IgdXNlY2FzZSBmb3IgdGhpcyBpcyB1c2VycyB1c2luZyBhIFB5dGhvbi5vcmcKKyAgICAgICAgICAgICAgICAjIGJpbmFyeSBpbnN0YWxsZXIgIG9uIE9TWCAxMC42OiB0aGF0IGluc3RhbGxlciB1c2VzCisgICAgICAgICAgICAgICAgIyB0aGUgMTAuNHUgU0RLLCBidXQgdGhhdCBTREsgaXMgbm90IGluc3RhbGxlZCBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgIyB3aGVuIHlvdSBpbnN0YWxsIFhjb2RlLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICBDRkxBR1MgPSBfQ09ORklHX1ZBUlMuZ2V0KCdDRkxBR1MnLCAnJykKKyAgICAgICAgICAgICAgICBtID0gcmUuc2VhcmNoKCctaXN5c3Jvb3RccysoXFMrKScsIENGTEFHUykKKyAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZGsgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZGspOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiAoJ0xERkxBR1MnLCAnQkFTRUNGTEFHUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBudW1iZXIgb2YgZGVyaXZlZCB2YXJpYWJsZXMuIFRoZXNlIG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXRjaGVkIHVwIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NGTEFHUycsICdQWV9DRkxBR1MnLCAnQkxEU0hBUkVEJyk6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IF9DT05GSUdfVkFSU1trZXldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSByZS5zdWIoJy1pc3lzcm9vdFxzK1xTKyhcc3wkKScsICcgJywgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPTkZJR19WQVJTW2tleV0gPSBmbGFncworCisgICAgaWYgYXJnczoKKyAgICAgICAgdmFscyA9IFtdCisgICAgICAgIGZvciBuYW1lIGluIGFyZ3M6CisgICAgICAgICAgICB2YWxzLmFwcGVuZChfQ09ORklHX1ZBUlMuZ2V0KG5hbWUpKQorICAgICAgICByZXR1cm4gdmFscworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBfQ09ORklHX1ZBUlMKKworZGVmIGdldF9jb25maWdfdmFyKG5hbWUpOgorICAgICIiIlJldHVybiB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgdmFyaWFibGUgdXNpbmcgdGhlIGRpY3Rpb25hcnkgcmV0dXJuZWQgYnkKKyAgICAnZ2V0X2NvbmZpZ192YXJzKCknLgorCisgICAgRXF1aXZhbGVudCB0byBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKKyAgICAiIiIKKyAgICByZXR1cm4gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCisKK2RlZiBnZXRfcGxhdGZvcm0oKToKKyAgICAiIiJSZXR1cm4gYSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBjdXJyZW50IHBsYXRmb3JtLgorCisgICAgVGhpcyBpcyB1c2VkIG1haW5seSB0byBkaXN0aW5ndWlzaCBwbGF0Zm9ybS1zcGVjaWZpYyBidWlsZCBkaXJlY3RvcmllcyBhbmQKKyAgICBwbGF0Zm9ybS1zcGVjaWZpYyBidWlsdCBkaXN0cmlidXRpb25zLiAgVHlwaWNhbGx5IGluY2x1ZGVzIHRoZSBPUyBuYW1lCisgICAgYW5kIHZlcnNpb24gYW5kIHRoZSBhcmNoaXRlY3R1cmUgKGFzIHN1cHBsaWVkIGJ5ICdvcy51bmFtZSgpJyksCisgICAgYWx0aG91Z2ggdGhlIGV4YWN0IGluZm9ybWF0aW9uIGluY2x1ZGVkIGRlcGVuZHMgb24gdGhlIE9TOyBlZy4gZm9yIElSSVgKKyAgICB0aGUgYXJjaGl0ZWN0dXJlIGlzbid0IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgKElSSVggb25seSBydW5zIG9uIFNHSQorICAgIGhhcmR3YXJlKSwgYnV0IGZvciBMaW51eCB0aGUga2VybmVsIHZlcnNpb24gaXNuJ3QgcGFydGljdWxhcmx5CisgICAgaW1wb3J0YW50LgorCisgICAgRXhhbXBsZXMgb2YgcmV0dXJuZWQgdmFsdWVzOgorICAgICAgIGxpbnV4LWk1ODYKKyAgICAgICBsaW51eC1hbHBoYSAoPykKKyAgICAgICBzb2xhcmlzLTIuNi1zdW40dQorICAgICAgIGlyaXgtNS4zCisgICAgICAgaXJpeDY0LTYuMgorCisgICAgV2luZG93cyB3aWxsIHJldHVybiBvbmUgb2Y6CisgICAgICAgd2luLWFtZDY0ICg2NGJpdCBXaW5kb3dzIG9uIEFNRDY0IChha2EgeDg2XzY0LCBJbnRlbDY0LCBFTTY0VCwgZXRjKQorICAgICAgIHdpbi1pYTY0ICg2NGJpdCBXaW5kb3dzIG9uIEl0YW5pdW0pCisgICAgICAgd2luMzIgKGFsbCBvdGhlcnMgLSBzcGVjaWZpY2FsbHksIHN5cy5wbGF0Zm9ybSBpcyByZXR1cm5lZCkKKworICAgIEZvciBvdGhlciBub24tUE9TSVggcGxhdGZvcm1zLCBjdXJyZW50bHkganVzdCByZXR1cm5zICdzeXMucGxhdGZvcm0nLgorICAgICIiIgorICAgIGltcG9ydCByZQorICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgIyBzbmlmZiBzeXMudmVyc2lvbiBmb3IgYXJjaGl0ZWN0dXJlLgorICAgICAgICBwcmVmaXggPSAiIGJpdCAoIgorICAgICAgICBpID0gc3lzLnZlcnNpb24uZmluZChwcmVmaXgpCisgICAgICAgIGlmIGkgPT0gLTE6CisgICAgICAgICAgICByZXR1cm4gc3lzLnBsYXRmb3JtCisgICAgICAgIGogPSBzeXMudmVyc2lvbi5maW5kKCIpIiwgaSkKKyAgICAgICAgbG9vayA9IHN5cy52ZXJzaW9uW2krbGVuKHByZWZpeCk6al0ubG93ZXIoKQorICAgICAgICBpZiBsb29rID09ICdhbWQ2NCc6CisgICAgICAgICAgICByZXR1cm4gJ3dpbi1hbWQ2NCcKKyAgICAgICAgaWYgbG9vayA9PSAnaXRhbml1bSc6CisgICAgICAgICAgICByZXR1cm4gJ3dpbi1pYTY0JworICAgICAgICByZXR1cm4gc3lzLnBsYXRmb3JtCisKKyAgICBpZiBvcy5uYW1lICE9ICJwb3NpeCIgb3Igbm90IGhhc2F0dHIob3MsICd1bmFtZScpOgorICAgICAgICAjIFhYWCB3aGF0IGFib3V0IHRoZSBhcmNoaXRlY3R1cmU/IE5UIGlzIEludGVsIG9yIEFscGhhLAorICAgICAgICAjIE1hYyBPUyBpcyBNNjhrIG9yIFBQQywgZXRjLgorICAgICAgICByZXR1cm4gc3lzLnBsYXRmb3JtCisKKyAgICAjIFRyeSB0byBkaXN0aW5ndWlzaCB2YXJpb3VzIGZsYXZvdXJzIG9mIFVuaXgKKyAgICBvc25hbWUsIGhvc3QsIHJlbGVhc2UsIHZlcnNpb24sIG1hY2hpbmUgPSBvcy51bmFtZSgpCisKKyAgICAjIENvbnZlcnQgdGhlIE9TIG5hbWUgdG8gbG93ZXJjYXNlLCByZW1vdmUgJy8nIGNoYXJhY3RlcnMKKyAgICAjICh0byBhY2NvbW1vZGF0ZSBCU0QvT1MpLCBhbmQgdHJhbnNsYXRlIHNwYWNlcyAoZm9yICJQb3dlciBNYWNpbnRvc2giKQorICAgIG9zbmFtZSA9IG9zbmFtZS5sb3dlcigpLnJlcGxhY2UoJy8nLCAnJykKKyAgICBtYWNoaW5lID0gbWFjaGluZS5yZXBsYWNlKCcgJywgJ18nKQorICAgIG1hY2hpbmUgPSBtYWNoaW5lLnJlcGxhY2UoJy8nLCAnLScpCisKKyAgICBpZiBvc25hbWVbOjVdID09ICJsaW51eCI6CisgICAgICAgICMgQXQgbGVhc3Qgb24gTGludXgvSW50ZWwsICdtYWNoaW5lJyBpcyB0aGUgcHJvY2Vzc29yIC0tCisgICAgICAgICMgaTM4NiwgZXRjLgorICAgICAgICAjIFhYWCB3aGF0IGFib3V0IEFscGhhLCBTUEFSQywgZXRjPworICAgICAgICByZXR1cm4gICIlcy0lcyIgJSAob3NuYW1lLCBtYWNoaW5lKQorICAgIGVsaWYgb3NuYW1lWzo1XSA9PSAic3Vub3MiOgorICAgICAgICBpZiByZWxlYXNlWzBdID49ICI1IjogICAgICAgICAgICMgU3VuT1MgNSA9PSBTb2xhcmlzIDIKKyAgICAgICAgICAgIG9zbmFtZSA9ICJzb2xhcmlzIgorICAgICAgICAgICAgcmVsZWFzZSA9ICIlZC4lcyIgJSAoaW50KHJlbGVhc2VbMF0pIC0gMywgcmVsZWFzZVsyOl0pCisgICAgICAgICMgZmFsbCB0aHJvdWdoIHRvIHN0YW5kYXJkIG9zbmFtZS1yZWxlYXNlLW1hY2hpbmUgcmVwcmVzZW50YXRpb24KKyAgICBlbGlmIG9zbmFtZVs6NF0gPT0gImlyaXgiOiAgICAgICAgICAgICAgIyBjb3VsZCBiZSAiaXJpeDY0IiEKKyAgICAgICAgcmV0dXJuICIlcy0lcyIgJSAob3NuYW1lLCByZWxlYXNlKQorICAgIGVsaWYgb3NuYW1lWzozXSA9PSAiYWl4IjoKKyAgICAgICAgcmV0dXJuICIlcy0lcy4lcyIgJSAob3NuYW1lLCB2ZXJzaW9uLCByZWxlYXNlKQorICAgIGVsaWYgb3NuYW1lWzo2XSA9PSAiY3lnd2luIjoKKyAgICAgICAgb3NuYW1lID0gImN5Z3dpbiIKKyAgICAgICAgcmVsX3JlID0gcmUuY29tcGlsZSAocidbXGQuXSsnKQorICAgICAgICBtID0gcmVsX3JlLm1hdGNoKHJlbGVhc2UpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZWxlYXNlID0gbS5ncm91cCgpCisgICAgZWxpZiBvc25hbWVbOjZdID09ICJkYXJ3aW4iOgorICAgICAgICAjCisgICAgICAgICMgRm9yIG91ciBwdXJwb3Nlcywgd2UnbGwgYXNzdW1lIHRoYXQgdGhlIHN5c3RlbSB2ZXJzaW9uIGZyb20KKyAgICAgICAgIyBkaXN0dXRpbHMnIHBlcnNwZWN0aXZlIGlzIHdoYXQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGlzIHNldAorICAgICAgICAjIHRvLiBUaGlzIG1ha2VzIHRoZSBjb21wYXRpYmlsaXR5IHN0b3J5IGEgYml0IG1vcmUgc2FuZSBiZWNhdXNlIHRoZQorICAgICAgICAjIG1hY2hpbmUgaXMgZ29pbmcgdG8gY29tcGlsZSBhbmQgbGluayBhcyBpZiBpdCB3ZXJlCisgICAgICAgICMgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULgorICAgICAgICBjZmd2YXJzID0gZ2V0X2NvbmZpZ192YXJzKCkKKyAgICAgICAgbWFjdmVyID0gb3MuZW52aXJvbi5nZXQoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpCisgICAgICAgIGlmIG5vdCBtYWN2ZXI6CisgICAgICAgICAgICBtYWN2ZXIgPSBjZmd2YXJzLmdldCgnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJykKKworICAgICAgICBpZiAxOgorICAgICAgICAgICAgIyBBbHdheXMgY2FsY3VsYXRlIHRoZSByZWxlYXNlIG9mIHRoZSBydW5uaW5nIG1hY2hpbmUsCisgICAgICAgICAgICAjIG5lZWRlZCB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIGJ1aWxkIGZhdCBiaW5hcmllcyBvciBub3QuCisKKyAgICAgICAgICAgIG1hY3JlbGVhc2UgPSBtYWN2ZXIKKyAgICAgICAgICAgICMgR2V0IHRoZSBzeXN0ZW0gdmVyc2lvbi4gUmVhZGluZyB0aGlzIHBsaXN0IGlzIGEgZG9jdW1lbnRlZAorICAgICAgICAgICAgIyB3YXkgdG8gZ2V0IHRoZSBzeXN0ZW0gdmVyc2lvbiAoc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorICAgICAgICAgICAgIyB0aGUgR2VzdGFsdCBNYW5hZ2VyKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKCcvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL1N5c3RlbVZlcnNpb24ucGxpc3QnKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgIyBXZSdyZSBvbiBhIHBsYWluIGRhcndpbiBib3gsIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICMgYmVoYXZpb3VyLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtID0gcmUuc2VhcmNoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInPGtleT5Qcm9kdWN0VXNlclZpc2libGVWZXJzaW9uPC9rZXk+XHMqJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcic8c3RyaW5nPiguKj8pPC9zdHJpbmc+JywgZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbWFjcmVsZWFzZSA9ICcuJy5qb2luKG0uZ3JvdXAoMSkuc3BsaXQoJy4nKVs6Ml0pCisgICAgICAgICAgICAgICAgICAgICMgZWxzZTogZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW91cgorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGlmIG5vdCBtYWN2ZXI6CisgICAgICAgICAgICBtYWN2ZXIgPSBtYWNyZWxlYXNlCisKKyAgICAgICAgaWYgbWFjdmVyOgorICAgICAgICAgICAgcmVsZWFzZSA9IG1hY3ZlcgorICAgICAgICAgICAgb3NuYW1lID0gIm1hY29zeCIKKworICAgICAgICAgICAgaWYgKG1hY3JlbGVhc2UgKyAnLicpID49ICcxMC40LicgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgJy1hcmNoJyBpbiBnZXRfY29uZmlnX3ZhcnMoKS5nZXQoJ0NGTEFHUycsICcnKS5zdHJpcCgpOgorICAgICAgICAgICAgICAgICMgVGhlIHVuaXZlcnNhbCBidWlsZCB3aWxsIGJ1aWxkIGZhdCBiaW5hcmllcywgYnV0IG5vdCBvbgorICAgICAgICAgICAgICAgICMgc3lzdGVtcyBiZWZvcmUgMTAuNAorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFRyeSB0byBkZXRlY3QgNC13YXkgdW5pdmVyc2FsIGJ1aWxkcywgdGhvc2UgaGF2ZSBtYWNoaW5lLXR5cGUKKyAgICAgICAgICAgICAgICAjICd1bml2ZXJzYWwnIGluc3RlYWQgb2YgJ2ZhdCcuCisKKyAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ2ZhdCcKKyAgICAgICAgICAgICAgICBjZmxhZ3MgPSBnZXRfY29uZmlnX3ZhcnMoKS5nZXQoJ0NGTEFHUycpCisKKyAgICAgICAgICAgICAgICBhcmNocyA9IHJlLmZpbmRhbGwoJy1hcmNoXHMrKFxTKyknLCBjZmxhZ3MpCisgICAgICAgICAgICAgICAgYXJjaHMgPSB0dXBsZShzb3J0ZWQoc2V0KGFyY2hzKSkpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJjaHMpID09IDE6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSBhcmNoc1swXQorICAgICAgICAgICAgICAgIGVsaWYgYXJjaHMgPT0gKCdpMzg2JywgJ3BwYycpOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ2ZhdCcKKyAgICAgICAgICAgICAgICBlbGlmIGFyY2hzID09ICgnaTM4NicsICd4ODZfNjQnKToKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9ICdpbnRlbCcKKyAgICAgICAgICAgICAgICBlbGlmIGFyY2hzID09ICgnaTM4NicsICdwcGMnLCAneDg2XzY0Jyk6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSAnZmF0MycKKyAgICAgICAgICAgICAgICBlbGlmIGFyY2hzID09ICgncHBjNjQnLCAneDg2XzY0Jyk6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSAnZmF0NjQnCisgICAgICAgICAgICAgICAgZWxpZiBhcmNocyA9PSAoJ2kzODYnLCAncHBjJywgJ3BwYzY0JywgJ3g4Nl82NCcpOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ3VuaXZlcnNhbCcKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qga25vdyBtYWNoaW5lIHZhbHVlIGZvciBhcmNocz0lciIlKGFyY2hzLCkpCisKKyAgICAgICAgICAgIGVsaWYgbWFjaGluZSA9PSAnaTM4Nic6CisgICAgICAgICAgICAgICAgIyBPbiBPU1ggdGhlIG1hY2hpbmUgdHlwZSByZXR1cm5lZCBieSB1bmFtZSBpcyBhbHdheXMgdGhlCisgICAgICAgICAgICAgICAgIyAzMi1iaXQgdmFyaWFudCwgZXZlbiBpZiB0aGUgZXhlY3V0YWJsZSBhcmNoaXRlY3R1cmUgaXMKKyAgICAgICAgICAgICAgICAjIHRoZSA2NC1iaXQgdmFyaWFudAorICAgICAgICAgICAgICAgIGlmIHN5cy5tYXhpbnQgPj0gMioqMzI6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSAneDg2XzY0JworCisgICAgICAgICAgICBlbGlmIG1hY2hpbmUgaW4gKCdQb3dlclBDJywgJ1Bvd2VyX01hY2ludG9zaCcpOgorICAgICAgICAgICAgICAgICMgUGljayBhIHNhbmUgbmFtZSBmb3IgdGhlIFBQQyBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgIyBTZWUgJ2kzODYnIGNhc2UKKyAgICAgICAgICAgICAgICBpZiBzeXMubWF4aW50ID49IDIqKjMyOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ3BwYzY0JworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSAncHBjJworCisgICAgcmV0dXJuICIlcy0lcy0lcyIgJSAob3NuYW1lLCByZWxlYXNlLCBtYWNoaW5lKQorCisKK2RlZiBnZXRfcHl0aG9uX3ZlcnNpb24oKToKKyAgICByZXR1cm4gX1BZX1ZFUlNJT05fU0hPUlQKZGlmZiAtLWdpdCBhL0xpYi90YXJmaWxlLnB5IGIvTGliL3RhcmZpbGUucHkKaW5kZXggOThhZTEyZi4uNDdiZTFkNCAxMDA2NDQKLS0tIGEvTGliL3RhcmZpbGUucHkKKysrIGIvTGliL3RhcmZpbGUucHkKQEAgLTUzLDEzICs1Myw2IEBACiBpbXBvcnQgcmUKIGltcG9ydCBvcGVyYXRvcgogCi1pZiBzeXMucGxhdGZvcm0gPT0gJ21hYyc6Ci0gICAgIyBUaGlzIG1vZHVsZSBuZWVkcyB3b3JrIGZvciBNYWNPUzksIGVzcGVjaWFsbHkgaW4gdGhlIGFyZWEgb2YgcGF0aG5hbWUKLSAgICAjIGhhbmRsaW5nLiBJbiBtYW55IHBsYWNlcyBpdCBpcyBhc3N1bWVkIGEgc2ltcGxlIHN1YnN0aXR1dGlvbiBvZiAvIGJ5IHRoZQotICAgICMgbG9jYWwgb3MucGF0aC5zZXAgaXMgZ29vZCBlbm91Z2ggdG8gY29udmVydCBwYXRobmFtZXMsIGJ1dCB0aGlzIGRvZXMgbm90Ci0gICAgIyB3b3JrIHdpdGggdGhlIG1hYyByb290ZWQ6cGF0aDpuYW1lIHZlcnN1cyA6bm9ucm9vdGVkOnBhdGg6bmFtZSBzeW50YXgKLSAgICByYWlzZSBJbXBvcnRFcnJvciwgInRhcmZpbGUgZG9lcyBub3Qgd29yayBmb3IgcGxhdGZvcm09PW1hYyIKLQogdHJ5OgogICAgIGltcG9ydCBncnAsIHB3ZAogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMTk1LDcgKzE4OCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG4gPSBpbnQobnRzKHMpIG9yICIwIiwgOCkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBIZWFkZXJFcnJvcigiaW52YWxpZCBoZWFkZXIiKQorICAgICAgICAgICAgcmFpc2UgSW52YWxpZEhlYWRlckVycm9yKCJpbnZhbGlkIGhlYWRlciIpCiAgICAgZWxzZToKICAgICAgICAgbiA9IDBMCiAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4ocykgLSAxKToKQEAgLTMzMCwxMSArMzIzLDYgQEAKICAgICAgICAgICAgIHBlcm0uYXBwZW5kKCItIikKICAgICByZXR1cm4gIiIuam9pbihwZXJtKQogCi1pZiBvcy5zZXAgIT0gIi8iOgotICAgIG5vcm1wYXRoID0gbGFtYmRhIHBhdGg6IG9zLnBhdGgubm9ybXBhdGgocGF0aCkucmVwbGFjZShvcy5zZXAsICIvIikKLWVsc2U6Ci0gICAgbm9ybXBhdGggPSBvcy5wYXRoLm5vcm1wYXRoCi0KIGNsYXNzIFRhckVycm9yKEV4Y2VwdGlvbik6CiAgICAgIiIiQmFzZSBleGNlcHRpb24uIiIiCiAgICAgcGFzcwpAQCAtMzUxLDggKzMzOSwyMyBAQAogICAgICIiIkV4Y2VwdGlvbiBmb3IgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucyBvbiBzdHJlYW0tbGlrZSBUYXJGaWxlcy4iIiIKICAgICBwYXNzCiBjbGFzcyBIZWFkZXJFcnJvcihUYXJFcnJvcik6CisgICAgIiIiQmFzZSBleGNlcHRpb24gZm9yIGhlYWRlciBlcnJvcnMuIiIiCisgICAgcGFzcworY2xhc3MgRW1wdHlIZWFkZXJFcnJvcihIZWFkZXJFcnJvcik6CisgICAgIiIiRXhjZXB0aW9uIGZvciBlbXB0eSBoZWFkZXJzLiIiIgorICAgIHBhc3MKK2NsYXNzIFRydW5jYXRlZEhlYWRlckVycm9yKEhlYWRlckVycm9yKToKKyAgICAiIiJFeGNlcHRpb24gZm9yIHRydW5jYXRlZCBoZWFkZXJzLiIiIgorICAgIHBhc3MKK2NsYXNzIEVPRkhlYWRlckVycm9yKEhlYWRlckVycm9yKToKKyAgICAiIiJFeGNlcHRpb24gZm9yIGVuZCBvZiBmaWxlIGhlYWRlcnMuIiIiCisgICAgcGFzcworY2xhc3MgSW52YWxpZEhlYWRlckVycm9yKEhlYWRlckVycm9yKToKICAgICAiIiJFeGNlcHRpb24gZm9yIGludmFsaWQgaGVhZGVycy4iIiIKICAgICBwYXNzCitjbGFzcyBTdWJzZXF1ZW50SGVhZGVyRXJyb3IoSGVhZGVyRXJyb3IpOgorICAgICIiIkV4Y2VwdGlvbiBmb3IgbWlzc2luZyBhbmQgaW52YWxpZCBleHRlbmRlZCBoZWFkZXJzLiIiIgorICAgIHBhc3MKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBpbnRlcm5hbCBzdHJlYW0gaW50ZXJmYWNlCkBAIC02NjUsMTAgKzY2OCw3IEBACiAgICAgICAgICAgICByYXcgPSBzZWxmLmZpbGVvYmoucmVhZChzZWxmLmJsb2Nrc2l6ZSkKICAgICAgICAgICAgIGlmIG5vdCByYXc6CiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5iejJvYmouZGVjb21wcmVzcyhyYXcpCi0gICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmJ6Mm9iai5kZWNvbXByZXNzKHJhdykKICAgICAgICAgICAgIGIuYXBwZW5kKGRhdGEpCiAgICAgICAgICAgICB4ICs9IGxlbihkYXRhKQogICAgICAgICBzZWxmLmJ1ZiA9ICIiLmpvaW4oYikKQEAgLTkyOCw4ICs5MjgsOCBAQAogICAgICAgICBzZWxmLmNoa3N1bSA9IDAgICAgICAgICAjIGhlYWRlciBjaGVja3N1bQogICAgICAgICBzZWxmLnR5cGUgPSBSRUdUWVBFICAgICAjIG1lbWJlciB0eXBlCiAgICAgICAgIHNlbGYubGlua25hbWUgPSAiIiAgICAgICMgbGluayBuYW1lCi0gICAgICAgIHNlbGYudW5hbWUgPSAicm9vdCIgICAgICMgdXNlciBuYW1lCi0gICAgICAgIHNlbGYuZ25hbWUgPSAicm9vdCIgICAgICMgZ3JvdXAgbmFtZQorICAgICAgICBzZWxmLnVuYW1lID0gIiIgICAgICAgICAjIHVzZXIgbmFtZQorICAgICAgICBzZWxmLmduYW1lID0gIiIgICAgICAgICAjIGdyb3VwIG5hbWUKICAgICAgICAgc2VsZi5kZXZtYWpvciA9IDAgICAgICAgIyBkZXZpY2UgbWFqb3IgbnVtYmVyCiAgICAgICAgIHNlbGYuZGV2bWlub3IgPSAwICAgICAgICMgZGV2aWNlIG1pbm9yIG51bWJlcgogCkBAIC05NTksNyArOTU5LDcgQEAKICAgICAgICAgIiIiUmV0dXJuIHRoZSBUYXJJbmZvJ3MgYXR0cmlidXRlcyBhcyBhIGRpY3Rpb25hcnkuCiAgICAgICAgICIiIgogICAgICAgICBpbmZvID0gewotICAgICAgICAgICAgIm5hbWUiOiAgICAgbm9ybXBhdGgoc2VsZi5uYW1lKSwKKyAgICAgICAgICAgICJuYW1lIjogICAgIHNlbGYubmFtZSwKICAgICAgICAgICAgICJtb2RlIjogICAgIHNlbGYubW9kZSAmIDA3Nzc3LAogICAgICAgICAgICAgInVpZCI6ICAgICAgc2VsZi51aWQsCiAgICAgICAgICAgICAiZ2lkIjogICAgICBzZWxmLmdpZCwKQEAgLTk2Nyw3ICs5NjcsNyBAQAogICAgICAgICAgICAgIm10aW1lIjogICAgc2VsZi5tdGltZSwKICAgICAgICAgICAgICJjaGtzdW0iOiAgIHNlbGYuY2hrc3VtLAogICAgICAgICAgICAgInR5cGUiOiAgICAgc2VsZi50eXBlLAotICAgICAgICAgICAgImxpbmtuYW1lIjogbm9ybXBhdGgoc2VsZi5saW5rbmFtZSkgaWYgc2VsZi5saW5rbmFtZSBlbHNlICIiLAorICAgICAgICAgICAgImxpbmtuYW1lIjogc2VsZi5saW5rbmFtZSwKICAgICAgICAgICAgICJ1bmFtZSI6ICAgIHNlbGYudW5hbWUsCiAgICAgICAgICAgICAiZ25hbWUiOiAgICBzZWxmLmduYW1lLAogICAgICAgICAgICAgImRldm1ham9yIjogc2VsZi5kZXZtYWpvciwKQEAgLTExMTIsOCArMTExMiw4IEBACiAgICAgICAgICAgICBpbmZvLmdldCgidHlwZSIsIFJFR1RZUEUpLAogICAgICAgICAgICAgc3RuKGluZm8uZ2V0KCJsaW5rbmFtZSIsICIiKSwgMTAwKSwKICAgICAgICAgICAgIHN0bihpbmZvLmdldCgibWFnaWMiLCBQT1NJWF9NQUdJQyksIDgpLAotICAgICAgICAgICAgc3RuKGluZm8uZ2V0KCJ1bmFtZSIsICJyb290IiksIDMyKSwKLSAgICAgICAgICAgIHN0bihpbmZvLmdldCgiZ25hbWUiLCAicm9vdCIpLCAzMiksCisgICAgICAgICAgICBzdG4oaW5mby5nZXQoInVuYW1lIiwgIiIpLCAzMiksCisgICAgICAgICAgICBzdG4oaW5mby5nZXQoImduYW1lIiwgIiIpLCAzMiksCiAgICAgICAgICAgICBpdG4oaW5mby5nZXQoImRldm1ham9yIiwgMCksIDgsIGZvcm1hdCksCiAgICAgICAgICAgICBpdG4oaW5mby5nZXQoImRldm1pbm9yIiwgMCksIDgsIGZvcm1hdCksCiAgICAgICAgICAgICBzdG4oaW5mby5nZXQoInByZWZpeCIsICIiKSwgMTU1KQpAQCAtMTE4NywxNCArMTE4NywxNiBAQAogICAgIGRlZiBmcm9tYnVmKGNscywgYnVmKToKICAgICAgICAgIiIiQ29uc3RydWN0IGEgVGFySW5mbyBvYmplY3QgZnJvbSBhIDUxMiBieXRlIHN0cmluZyBidWZmZXIuCiAgICAgICAgICIiIgorICAgICAgICBpZiBsZW4oYnVmKSA9PSAwOgorICAgICAgICAgICAgcmFpc2UgRW1wdHlIZWFkZXJFcnJvcigiZW1wdHkgaGVhZGVyIikKICAgICAgICAgaWYgbGVuKGJ1ZikgIT0gQkxPQ0tTSVpFOgotICAgICAgICAgICAgcmFpc2UgSGVhZGVyRXJyb3IoInRydW5jYXRlZCBoZWFkZXIiKQorICAgICAgICAgICAgcmFpc2UgVHJ1bmNhdGVkSGVhZGVyRXJyb3IoInRydW5jYXRlZCBoZWFkZXIiKQogICAgICAgICBpZiBidWYuY291bnQoTlVMKSA9PSBCTE9DS1NJWkU6Ci0gICAgICAgICAgICByYWlzZSBIZWFkZXJFcnJvcigiZW1wdHkgaGVhZGVyIikKKyAgICAgICAgICAgIHJhaXNlIEVPRkhlYWRlckVycm9yKCJlbmQgb2YgZmlsZSBoZWFkZXIiKQogCiAgICAgICAgIGNoa3N1bSA9IG50aShidWZbMTQ4OjE1Nl0pCiAgICAgICAgIGlmIGNoa3N1bSBub3QgaW4gY2FsY19jaGtzdW1zKGJ1Zik6Ci0gICAgICAgICAgICByYWlzZSBIZWFkZXJFcnJvcigiYmFkIGNoZWNrc3VtIikKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRIZWFkZXJFcnJvcigiYmFkIGNoZWNrc3VtIikKIAogICAgICAgICBvYmogPSBjbHMoKQogICAgICAgICBvYmouYnVmID0gYnVmCkBAIC0xMjMzLDggKzEyMzUsNiBAQAogICAgICAgICAgICB0YXJmaWxlLgogICAgICAgICAiIiIKICAgICAgICAgYnVmID0gdGFyZmlsZS5maWxlb2JqLnJlYWQoQkxPQ0tTSVpFKQotICAgICAgICBpZiBub3QgYnVmOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIG9iaiA9IGNscy5mcm9tYnVmKGJ1ZikKICAgICAgICAgb2JqLm9mZnNldCA9IHRhcmZpbGUuZmlsZW9iai50ZWxsKCkgLSBCTE9DS1NJWkUKICAgICAgICAgcmV0dXJuIG9iai5fcHJvY19tZW1iZXIodGFyZmlsZSkKQEAgLTEyODcsOSArMTI4NywxMCBAQAogICAgICAgICBidWYgPSB0YXJmaWxlLmZpbGVvYmoucmVhZChzZWxmLl9ibG9jayhzZWxmLnNpemUpKQogCiAgICAgICAgICMgRmV0Y2ggdGhlIG5leHQgaGVhZGVyIGFuZCBwcm9jZXNzIGl0LgotICAgICAgICBuZXh0ID0gc2VsZi5mcm9tdGFyZmlsZSh0YXJmaWxlKQotICAgICAgICBpZiBuZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBIZWFkZXJFcnJvcigibWlzc2luZyBzdWJzZXF1ZW50IGhlYWRlciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHQgPSBzZWxmLmZyb210YXJmaWxlKHRhcmZpbGUpCisgICAgICAgIGV4Y2VwdCBIZWFkZXJFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFN1YnNlcXVlbnRIZWFkZXJFcnJvcigibWlzc2luZyBvciBiYWQgc3Vic2VxdWVudCBoZWFkZXIiKQogCiAgICAgICAgICMgUGF0Y2ggdGhlIFRhckluZm8gb2JqZWN0IGZyb20gdGhlIG5leHQgaGVhZGVyIHdpdGgKICAgICAgICAgIyB0aGUgbG9uZ25hbWUgaW5mb3JtYXRpb24uCkBAIC0xMzk0LDEyICsxMzk1LDEyIEBACiAgICAgICAgICAgICBwb3MgKz0gbGVuZ3RoCiAKICAgICAgICAgIyBGZXRjaCB0aGUgbmV4dCBoZWFkZXIuCi0gICAgICAgIG5leHQgPSBzZWxmLmZyb210YXJmaWxlKHRhcmZpbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHQgPSBzZWxmLmZyb210YXJmaWxlKHRhcmZpbGUpCisgICAgICAgIGV4Y2VwdCBIZWFkZXJFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFN1YnNlcXVlbnRIZWFkZXJFcnJvcigibWlzc2luZyBvciBiYWQgc3Vic2VxdWVudCBoZWFkZXIiKQogCiAgICAgICAgIGlmIHNlbGYudHlwZSBpbiAoWEhEVFlQRSwgU09MQVJJU19YSERUWVBFKToKLSAgICAgICAgICAgIGlmIG5leHQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICByYWlzZSBIZWFkZXJFcnJvcigibWlzc2luZyBzdWJzZXF1ZW50IGhlYWRlciIpCi0KICAgICAgICAgICAgICMgUGF0Y2ggdGhlIFRhckluZm8gb2JqZWN0IHdpdGggdGhlIGV4dGVuZGVkIGhlYWRlciBpbmZvLgogICAgICAgICAgICAgbmV4dC5fYXBwbHlfcGF4X2luZm8ocGF4X2hlYWRlcnMsIHRhcmZpbGUuZW5jb2RpbmcsIHRhcmZpbGUuZXJyb3JzKQogICAgICAgICAgICAgbmV4dC5vZmZzZXQgPSBzZWxmLm9mZnNldApAQCAtMTQ4MSw3ICsxNDgyLDcgQEAKICAgICBpZ25vcmVfemVyb3MgPSBGYWxzZSAgICAgICAgIyBJZiB0cnVlLCBza2lwcyBlbXB0eSBvciBpbnZhbGlkIGJsb2NrcyBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb250aW51ZXMgcHJvY2Vzc2luZy4KIAotICAgIGVycm9ybGV2ZWwgPSAwICAgICAgICAgICAgICAjIElmIDAsIGZhdGFsIGVycm9ycyBvbmx5IGFwcGVhciBpbiBkZWJ1ZworICAgIGVycm9ybGV2ZWwgPSAxICAgICAgICAgICAgICAjIElmIDAsIGZhdGFsIGVycm9ycyBvbmx5IGFwcGVhciBpbiBkZWJ1ZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1lc3NhZ2VzIChpZiBkZWJ1ZyA+PSAwKS4gSWYgPiAwLCBlcnJvcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhcmUgcGFzc2VkIHRvIHRoZSBjYWxsZXIgYXMgZXhjZXB0aW9ucy4KIApAQCAtMTU3MywxMiArMTU3NCwxNiBAQAogICAgICAgICAgICAgaWYgc2VsZi5tb2RlID09ICJhIjoKICAgICAgICAgICAgICAgICAjIE1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgYXJjaGl2ZSwKICAgICAgICAgICAgICAgICAjIGJlZm9yZSB0aGUgZmlyc3QgZW1wdHkgYmxvY2suCi0gICAgICAgICAgICAgICAgc2VsZi5maXJzdG1lbWJlciA9IE5vbmUKICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm5leHQoKSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5vZmZzZXQgPiAwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKC0gQkxPQ0tTSVpFLCAxKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmouc2VlayhzZWxmLm9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyaW5mby5mcm9tdGFyZmlsZShzZWxmKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZW1iZXJzLmFwcGVuZCh0YXJpbmZvKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRU9GSGVhZGVyRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmouc2VlayhzZWxmLm9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBIZWFkZXJFcnJvciwgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcihzdHIoZSkpCiAKICAgICAgICAgICAgIGlmIHNlbGYubW9kZSBpbiAiYXciOgogICAgICAgICAgICAgICAgIHNlbGYuX2xvYWRlZCA9IFRydWUKQEAgLTE3NDMsNyArMTc0OCw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdCA9IGNscy50YXJvcGVuKG5hbWUsIG1vZGUsIGZpbGVvYmosICoqa3dhcmdzKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3IoIm5vdCBhIGJ6aXAyIGZpbGUiKQogICAgICAgICB0Ll9leHRmaWxlb2JqID0gRmFsc2UKICAgICAgICAgcmV0dXJuIHQKQEAgLTE4MjQsMTAgKzE4MjksOSBAQAogICAgICAgICAjIEFic29sdXRlIHBhdGhzIGFyZSB0dXJuZWQgdG8gcmVsYXRpdmUgcGF0aHMuCiAgICAgICAgIGlmIGFyY25hbWUgaXMgTm9uZToKICAgICAgICAgICAgIGFyY25hbWUgPSBuYW1lCi0gICAgICAgIGFyY25hbWUgPSBub3JtcGF0aChhcmNuYW1lKQogICAgICAgICBkcnYsIGFyY25hbWUgPSBvcy5wYXRoLnNwbGl0ZHJpdmUoYXJjbmFtZSkKLSAgICAgICAgd2hpbGUgYXJjbmFtZVswOjFdID09ICIvIjoKLSAgICAgICAgICAgIGFyY25hbWUgPSBhcmNuYW1lWzE6XQorICAgICAgICBhcmNuYW1lID0gYXJjbmFtZS5yZXBsYWNlKG9zLnNlcCwgIi8iKQorICAgICAgICBhcmNuYW1lID0gYXJjbmFtZS5sc3RyaXAoIi8iKQogCiAgICAgICAgICMgTm93LCBmaWxsIHRoZSBUYXJJbmZvIG9iamVjdCB3aXRoCiAgICAgICAgICMgaW5mb3JtYXRpb24gc3BlY2lmaWMgZm9yIHRoZSBmaWxlLgpAQCAtMTkzMywxMyArMTkzNywxNiBAQAogICAgICAgICAgICAgICAgICAgICBwcmludCAibGluayB0byIsIHRhcmluZm8ubGlua25hbWUsCiAgICAgICAgICAgICBwcmludAogCi0gICAgZGVmIGFkZChzZWxmLCBuYW1lLCBhcmNuYW1lPU5vbmUsIHJlY3Vyc2l2ZT1UcnVlLCBleGNsdWRlPU5vbmUpOgorICAgIGRlZiBhZGQoc2VsZiwgbmFtZSwgYXJjbmFtZT1Ob25lLCByZWN1cnNpdmU9VHJ1ZSwgZXhjbHVkZT1Ob25lLCBmaWx0ZXI9Tm9uZSk6CiAgICAgICAgICIiIkFkZCB0aGUgZmlsZSBgbmFtZScgdG8gdGhlIGFyY2hpdmUuIGBuYW1lJyBtYXkgYmUgYW55IHR5cGUgb2YgZmlsZQogICAgICAgICAgICAoZGlyZWN0b3J5LCBmaWZvLCBzeW1ib2xpYyBsaW5rLCBldGMuKS4gSWYgZ2l2ZW4sIGBhcmNuYW1lJwogICAgICAgICAgICBzcGVjaWZpZXMgYW4gYWx0ZXJuYXRpdmUgbmFtZSBmb3IgdGhlIGZpbGUgaW4gdGhlIGFyY2hpdmUuCiAgICAgICAgICAgIERpcmVjdG9yaWVzIGFyZSBhZGRlZCByZWN1cnNpdmVseSBieSBkZWZhdWx0LiBUaGlzIGNhbiBiZSBhdm9pZGVkIGJ5CiAgICAgICAgICAgIHNldHRpbmcgYHJlY3Vyc2l2ZScgdG8gRmFsc2UuIGBleGNsdWRlJyBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkCi0gICAgICAgICAgIHJldHVybiBUcnVlIGZvciBlYWNoIGZpbGVuYW1lIHRvIGJlIGV4Y2x1ZGVkLgorICAgICAgICAgICByZXR1cm4gVHJ1ZSBmb3IgZWFjaCBmaWxlbmFtZSB0byBiZSBleGNsdWRlZC4gYGZpbHRlcicgaXMgYSBmdW5jdGlvbgorICAgICAgICAgICB0aGF0IGV4cGVjdHMgYSBUYXJJbmZvIG9iamVjdCBhcmd1bWVudCBhbmQgcmV0dXJucyB0aGUgY2hhbmdlZAorICAgICAgICAgICBUYXJJbmZvIG9iamVjdCwgaWYgaXQgcmV0dXJucyBOb25lIHRoZSBUYXJJbmZvIG9iamVjdCB3aWxsIGJlCisgICAgICAgICAgIGV4Y2x1ZGVkIGZyb20gdGhlIGFyY2hpdmUuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9jaGVjaygiYXciKQogCkBAIC0xOTQ3LDI1ICsxOTU0LDE5IEBACiAgICAgICAgICAgICBhcmNuYW1lID0gbmFtZQogCiAgICAgICAgICMgRXhjbHVkZSBwYXRobmFtZXMuCi0gICAgICAgIGlmIGV4Y2x1ZGUgaXMgbm90IE5vbmUgYW5kIGV4Y2x1ZGUobmFtZSk6Ci0gICAgICAgICAgICBzZWxmLl9kYmcoMiwgInRhcmZpbGU6IEV4Y2x1ZGVkICVyIiAlIG5hbWUpCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZXhjbHVkZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgd2FybmluZ3Mud2FybigidXNlIHRoZSBmaWx0ZXIgYXJndW1lbnQgaW5zdGVhZCIsCisgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgICAgIGlmIGV4Y2x1ZGUobmFtZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fZGJnKDIsICJ0YXJmaWxlOiBFeGNsdWRlZCAlciIgJSBuYW1lKQorICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgU2tpcCBpZiBzb21lYm9keSB0cmllcyB0byBhcmNoaXZlIHRoZSBhcmNoaXZlLi4uCiAgICAgICAgIGlmIHNlbGYubmFtZSBpcyBub3QgTm9uZSBhbmQgb3MucGF0aC5hYnNwYXRoKG5hbWUpID09IHNlbGYubmFtZToKICAgICAgICAgICAgIHNlbGYuX2RiZygyLCAidGFyZmlsZTogU2tpcHBlZCAlciIgJSBuYW1lKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgIyBTcGVjaWFsIGNhc2U6IFRoZSB1c2VyIHdhbnRzIHRvIGFkZCB0aGUgY3VycmVudAotICAgICAgICAjIHdvcmtpbmcgZGlyZWN0b3J5LgotICAgICAgICBpZiBuYW1lID09ICIuIjoKLSAgICAgICAgICAgIGlmIHJlY3Vyc2l2ZToKLSAgICAgICAgICAgICAgICBpZiBhcmNuYW1lID09ICIuIjoKLSAgICAgICAgICAgICAgICAgICAgYXJjbmFtZSA9ICIiCi0gICAgICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQoZiwgb3MucGF0aC5qb2luKGFyY25hbWUsIGYpLCByZWN1cnNpdmUsIGV4Y2x1ZGUpCi0gICAgICAgICAgICByZXR1cm4KLQogICAgICAgICBzZWxmLl9kYmcoMSwgbmFtZSkKIAogICAgICAgICAjIENyZWF0ZSBhIFRhckluZm8gb2JqZWN0IGZyb20gdGhlIGZpbGUuCkBAIC0xOTc1LDYgKzE5NzYsMTMgQEAKICAgICAgICAgICAgIHNlbGYuX2RiZygxLCAidGFyZmlsZTogVW5zdXBwb3J0ZWQgdHlwZSAlciIgJSBuYW1lKQogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgIyBDaGFuZ2Ugb3IgZXhjbHVkZSB0aGUgVGFySW5mbyBvYmplY3QuCisgICAgICAgIGlmIGZpbHRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRhcmluZm8gPSBmaWx0ZXIodGFyaW5mbykKKyAgICAgICAgICAgIGlmIHRhcmluZm8gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMiwgInRhcmZpbGU6IEV4Y2x1ZGVkICVyIiAlIG5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKICAgICAgICAgIyBBcHBlbmQgdGhlIHRhciBoZWFkZXIgYW5kIGRhdGEgdG8gdGhlIGFyY2hpdmUuCiAgICAgICAgIGlmIHRhcmluZm8uaXNyZWcoKToKICAgICAgICAgICAgIGYgPSBibHRuX29wZW4obmFtZSwgInJiIikKQEAgLTE5ODUsNyArMTk5Myw4IEBACiAgICAgICAgICAgICBzZWxmLmFkZGZpbGUodGFyaW5mbykKICAgICAgICAgICAgIGlmIHJlY3Vyc2l2ZToKICAgICAgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKG5hbWUpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZChvcy5wYXRoLmpvaW4obmFtZSwgZiksIG9zLnBhdGguam9pbihhcmNuYW1lLCBmKSwgcmVjdXJzaXZlLCBleGNsdWRlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZChvcy5wYXRoLmpvaW4obmFtZSwgZiksIG9zLnBhdGguam9pbihhcmNuYW1lLCBmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmUsIGV4Y2x1ZGUsIGZpbHRlcikKIAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hZGRmaWxlKHRhcmluZm8pCkBAIC0yMTE4LDggKzIxMjcsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFN0cmVhbUVycm9yKCJjYW5ub3QgZXh0cmFjdCAoc3ltKWxpbmsgYXMgZmlsZSBvYmplY3QiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIEEgKHN5bSlsaW5rJ3MgZmlsZSBvYmplY3QgaXMgaXRzIHRhcmdldCdzIGZpbGUgb2JqZWN0LgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmV4dHJhY3RmaWxlKHNlbGYuX2dldG1lbWJlcih0YXJpbmZvLmxpbmtuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJpbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRyYWN0ZmlsZShzZWxmLl9maW5kX2xpbmtfdGFyZ2V0KHRhcmluZm8pKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBJZiB0aGVyZSdzIG5vIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZW1iZXIgKGRpcmVjdG9yeSwgY2hyZGV2LAogICAgICAgICAgICAgIyBibGtkZXYsIGV0Yy4pLCByZXR1cm4gTm9uZSBpbnN0ZWFkIG9mIGEgZmlsZSBvYmplY3QuCkBAIC0yMTMyLDkgKzIxNDAsOCBAQAogICAgICAgICAjIEZldGNoIHRoZSBUYXJJbmZvIG9iamVjdCBmb3IgdGhlIGdpdmVuIG5hbWUKICAgICAgICAgIyBhbmQgYnVpbGQgdGhlIGRlc3RpbmF0aW9uIHBhdGhuYW1lLCByZXBsYWNpbmcKICAgICAgICAgIyBmb3J3YXJkIHNsYXNoZXMgdG8gcGxhdGZvcm0gc3BlY2lmaWMgc2VwYXJhdG9ycy4KLSAgICAgICAgaWYgdGFyZ2V0cGF0aFstMTpdID09ICIvIjoKLSAgICAgICAgICAgIHRhcmdldHBhdGggPSB0YXJnZXRwYXRoWzotMV0KLSAgICAgICAgdGFyZ2V0cGF0aCA9IG9zLnBhdGgubm9ybXBhdGgodGFyZ2V0cGF0aCkKKyAgICAgICAgdGFyZ2V0cGF0aCA9IHRhcmdldHBhdGgucnN0cmlwKCIvIikKKyAgICAgICAgdGFyZ2V0cGF0aCA9IHRhcmdldHBhdGgucmVwbGFjZSgiLyIsIG9zLnNlcCkKIAogICAgICAgICAjIENyZWF0ZSBhbGwgdXBwZXIgZGlyZWN0b3JpZXMuCiAgICAgICAgIHVwcGVyZGlycyA9IG9zLnBhdGguZGlybmFtZSh0YXJnZXRwYXRoKQpAQCAtMjIyOSwyNyArMjIzNiwyMSBAQAogICAgICAgICAgIChwbGF0Zm9ybSBsaW1pdGF0aW9uKSwgd2UgdHJ5IHRvIG1ha2UgYSBjb3B5IG9mIHRoZSByZWZlcmVuY2VkIGZpbGUKICAgICAgICAgICBpbnN0ZWFkIG9mIGEgbGluay4KICAgICAgICAgIiIiCi0gICAgICAgIGxpbmtwYXRoID0gdGFyaW5mby5saW5rbmFtZQotICAgICAgICB0cnk6CisgICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIikgYW5kIGhhc2F0dHIob3MsICJsaW5rIik6CisgICAgICAgICAgICAjIEZvciBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBzeW1ib2xpYyBhbmQgaGFyZCBsaW5rcy4KICAgICAgICAgICAgIGlmIHRhcmluZm8uaXNzeW0oKToKLSAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGxpbmtwYXRoLCB0YXJnZXRwYXRoKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsodGFyaW5mby5saW5rbmFtZSwgdGFyZ2V0cGF0aCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBTZWUgZXh0cmFjdCgpLgotICAgICAgICAgICAgICAgIG9zLmxpbmsodGFyaW5mby5fbGlua190YXJnZXQsIHRhcmdldHBhdGgpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIGlmIHRhcmluZm8uaXNzeW0oKToKLSAgICAgICAgICAgICAgICBsaW5rcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUodGFyaW5mby5uYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rcGF0aCkKLSAgICAgICAgICAgICAgICBsaW5rcGF0aCA9IG5vcm1wYXRoKGxpbmtwYXRoKQotCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyaW5mby5fbGlua190YXJnZXQpOgorICAgICAgICAgICAgICAgICAgICBvcy5saW5rKHRhcmluZm8uX2xpbmtfdGFyZ2V0LCB0YXJnZXRwYXRoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhY3RfbWVtYmVyKHNlbGYuX2ZpbmRfbGlua190YXJnZXQodGFyaW5mbyksIHRhcmdldHBhdGgpCisgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9tZW1iZXIoc2VsZi5nZXRtZW1iZXIobGlua3BhdGgpLCB0YXJnZXRwYXRoKQotICAgICAgICAgICAgZXhjZXB0IChFbnZpcm9ubWVudEVycm9yLCBLZXlFcnJvciksIGU6Ci0gICAgICAgICAgICAgICAgbGlua3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGxpbmtwYXRoKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKGxpbmtwYXRoLCB0YXJnZXRwYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCBlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJsaW5rIGNvdWxkIG5vdCBiZSBjcmVhdGVkIikKKyAgICAgICAgICAgICAgICBzZWxmLl9leHRyYWN0X21lbWJlcihzZWxmLl9maW5kX2xpbmtfdGFyZ2V0KHRhcmluZm8pLCB0YXJnZXRwYXRoKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4dHJhY3RFcnJvcigidW5hYmxlIHRvIHJlc29sdmUgbGluayBpbnNpZGUgYXJjaGl2ZSIpCiAKICAgICBkZWYgY2hvd24oc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCk6CiAgICAgICAgICIiIlNldCBvd25lciBvZiB0YXJnZXRwYXRoIGFjY29yZGluZyB0byB0YXJpbmZvLgpAQCAtMjMxMiw0NCArMjMxMyw2NCBAQAogCiAgICAgICAgICMgUmVhZCB0aGUgbmV4dCBibG9jay4KICAgICAgICAgc2VsZi5maWxlb2JqLnNlZWsoc2VsZi5vZmZzZXQpCisgICAgICAgIHRhcmluZm8gPSBOb25lCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyaW5mby5mcm9tdGFyZmlsZShzZWxmKQotICAgICAgICAgICAgICAgIGlmIHRhcmluZm8gaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgc2VsZi5tZW1iZXJzLmFwcGVuZCh0YXJpbmZvKQotCi0gICAgICAgICAgICBleGNlcHQgSGVhZGVyRXJyb3IsIGU6CisgICAgICAgICAgICBleGNlcHQgRU9GSGVhZGVyRXJyb3IsIGU6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5pZ25vcmVfemVyb3M6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RiZygyLCAiMHglWDogJXMiICUgKHNlbGYub2Zmc2V0LCBlKSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5vZmZzZXQgKz0gQkxPQ0tTSVpFCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5vZmZzZXQgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcihzdHIoZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBleGNlcHQgSW52YWxpZEhlYWRlckVycm9yLCBlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuaWdub3JlX3plcm9zOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMiwgIjB4JVg6ICVzIiAlIChzZWxmLm9mZnNldCwgZSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IEJMT0NLU0laRQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5vZmZzZXQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVhZEVycm9yKHN0cihlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFbXB0eUhlYWRlckVycm9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYub2Zmc2V0ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcigiZW1wdHkgZmlsZSIpCisgICAgICAgICAgICBleGNlcHQgVHJ1bmNhdGVkSGVhZGVyRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5vZmZzZXQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVhZEVycm9yKHN0cihlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBTdWJzZXF1ZW50SGVhZGVyRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgcmFpc2UgUmVhZEVycm9yKHN0cihlKSkKICAgICAgICAgICAgIGJyZWFrCiAKKyAgICAgICAgaWYgdGFyaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYubWVtYmVycy5hcHBlbmQodGFyaW5mbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvYWRlZCA9IFRydWUKKwogICAgICAgICByZXR1cm4gdGFyaW5mbwogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIyBMaXR0bGUgaGVscGVyIG1ldGhvZHM6CiAKLSAgICBkZWYgX2dldG1lbWJlcihzZWxmLCBuYW1lLCB0YXJpbmZvPU5vbmUpOgorICAgIGRlZiBfZ2V0bWVtYmVyKHNlbGYsIG5hbWUsIHRhcmluZm89Tm9uZSwgbm9ybWFsaXplPUZhbHNlKToKICAgICAgICAgIiIiRmluZCBhbiBhcmNoaXZlIG1lbWJlciBieSBuYW1lIGZyb20gYm90dG9tIHRvIHRvcC4KICAgICAgICAgICAgSWYgdGFyaW5mbyBpcyBnaXZlbiwgaXQgaXMgdXNlZCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuCiAgICAgICAgICIiIgogICAgICAgICAjIEVuc3VyZSB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgYmVlbiBsb2FkZWQuCiAgICAgICAgIG1lbWJlcnMgPSBzZWxmLmdldG1lbWJlcnMoKQogCi0gICAgICAgIGlmIHRhcmluZm8gaXMgTm9uZToKLSAgICAgICAgICAgIGVuZCA9IGxlbihtZW1iZXJzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZW5kID0gbWVtYmVycy5pbmRleCh0YXJpbmZvKQorICAgICAgICAjIExpbWl0IHRoZSBtZW1iZXIgc2VhcmNoIGxpc3QgdXAgdG8gdGFyaW5mby4KKyAgICAgICAgaWYgdGFyaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1lbWJlcnMgPSBtZW1iZXJzWzptZW1iZXJzLmluZGV4KHRhcmluZm8pXQogCi0gICAgICAgIGZvciBpIGluIHhyYW5nZShlbmQgLSAxLCAtMSwgLTEpOgotICAgICAgICAgICAgaWYgbmFtZSA9PSBtZW1iZXJzW2ldLm5hbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1lbWJlcnNbaV0KKyAgICAgICAgaWYgbm9ybWFsaXplOgorICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGgubm9ybXBhdGgobmFtZSkKKworICAgICAgICBmb3IgbWVtYmVyIGluIHJldmVyc2VkKG1lbWJlcnMpOgorICAgICAgICAgICAgaWYgbm9ybWFsaXplOgorICAgICAgICAgICAgICAgIG1lbWJlcl9uYW1lID0gb3MucGF0aC5ub3JtcGF0aChtZW1iZXIubmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWVtYmVyX25hbWUgPSBtZW1iZXIubmFtZQorCisgICAgICAgICAgICBpZiBuYW1lID09IG1lbWJlcl9uYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBtZW1iZXIKIAogICAgIGRlZiBfbG9hZChzZWxmKToKICAgICAgICAgIiIiUmVhZCB0aHJvdWdoIHRoZSBlbnRpcmUgYXJjaGl2ZSBmaWxlIGFuZCBsb29rIGZvciByZWFkYWJsZQpAQCAtMjM3MCw2ICsyMzkxLDI1IEBACiAgICAgICAgIGlmIG1vZGUgaXMgbm90IE5vbmUgYW5kIHNlbGYubW9kZSBub3QgaW4gbW9kZToKICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImJhZCBvcGVyYXRpb24gZm9yIG1vZGUgJXIiICUgc2VsZi5tb2RlKQogCisgICAgZGVmIF9maW5kX2xpbmtfdGFyZ2V0KHNlbGYsIHRhcmluZm8pOgorICAgICAgICAiIiJGaW5kIHRoZSB0YXJnZXQgbWVtYmVyIG9mIGEgc3ltbGluayBvciBoYXJkbGluayBtZW1iZXIgaW4gdGhlCisgICAgICAgICAgIGFyY2hpdmUuCisgICAgICAgICIiIgorICAgICAgICBpZiB0YXJpbmZvLmlzc3ltKCk6CisgICAgICAgICAgICAjIEFsd2F5cyBzZWFyY2ggdGhlIGVudGlyZSBhcmNoaXZlLgorICAgICAgICAgICAgbGlua25hbWUgPSBvcy5wYXRoLmRpcm5hbWUodGFyaW5mby5uYW1lKSArICIvIiArIHRhcmluZm8ubGlua25hbWUKKyAgICAgICAgICAgIGxpbWl0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBTZWFyY2ggdGhlIGFyY2hpdmUgYmVmb3JlIHRoZSBsaW5rLCBiZWNhdXNlIGEgaGFyZCBsaW5rIGlzCisgICAgICAgICAgICAjIGp1c3QgYSByZWZlcmVuY2UgdG8gYW4gYWxyZWFkeSBhcmNoaXZlZCBmaWxlLgorICAgICAgICAgICAgbGlua25hbWUgPSB0YXJpbmZvLmxpbmtuYW1lCisgICAgICAgICAgICBsaW1pdCA9IHRhcmluZm8KKworICAgICAgICBtZW1iZXIgPSBzZWxmLl9nZXRtZW1iZXIobGlua25hbWUsIHRhcmluZm89bGltaXQsIG5vcm1hbGl6ZT1UcnVlKQorICAgICAgICBpZiBtZW1iZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJsaW5rbmFtZSAlciBub3QgZm91bmQiICUgbGlua25hbWUpCisgICAgICAgIHJldHVybiBtZW1iZXIKKwogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgIiIiUHJvdmlkZSBhbiBpdGVyYXRvciBvYmplY3QuCiAgICAgICAgICIiIgpAQCAtMjM4Myw2ICsyNDIzLDIwIEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBsZXZlbCA8PSBzZWxmLmRlYnVnOgogICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgbXNnCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVjaygpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIGlmIHR5cGUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBbiBleGNlcHRpb24gb2NjdXJyZWQuIFdlIG11c3Qgbm90IGNhbGwgY2xvc2UoKSBiZWNhdXNlCisgICAgICAgICAgICAjIGl0IHdvdWxkIHRyeSB0byB3cml0ZSBlbmQtb2YtYXJjaGl2ZSBibG9ja3MgYW5kIHBhZGRpbmcuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZXh0ZmlsZW9iajoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCiAjIGNsYXNzIFRhckZpbGUKIAogY2xhc3MgVGFySXRlcjoKZGlmZiAtLWdpdCBhL0xpYi90ZWxuZXRsaWIucHkgYi9MaWIvdGVsbmV0bGliLnB5CmluZGV4IDJiZmQ5Y2QuLmJhZTRhZTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZWxuZXRsaWIucHkKKysrIGIvTGliL3RlbG5ldGxpYi5weQpAQCAtMjM2LDcgKzIzNiw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6Ci0gICAgICAgICAgICBwcmludCAnVGVsbmV0KCVzLCVkKTonICUgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwKKyAgICAgICAgICAgIHByaW50ICdUZWxuZXQoJXMsJXMpOicgJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpLAogICAgICAgICAgICAgaWYgYXJnczoKICAgICAgICAgICAgICAgICBwcmludCBtc2cgJSBhcmdzCiAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3RlbXBmaWxlLnB5IGIvTGliL3RlbXBmaWxlLnB5CmluZGV4IGIwZmQ4N2QuLjFjNzE4MTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVtcGZpbGUucHkKQEAgLTQxMSw2ICs0MTEsOSBAQAogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5maWxlLl9fZXhpdF9fKGV4YywgdmFsdWUsIHRiKQogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgZWxzZToKKyAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4YywgdmFsdWUsIHRiKToKKyAgICAgICAgICAgIHNlbGYuZmlsZS5fX2V4aXRfXyhleGMsIHZhbHVlLCB0YikKIAogCiBkZWYgTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3crYicsIGJ1ZnNpemU9LTEsIHN1ZmZpeD0iIiwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L1JFQURNRSBiL0xpYi90ZXN0L1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUwOWRmNC4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw0MTMgKzAsMCBAQAotKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotV3JpdGluZyBQeXRob24gUmVncmVzc2lvbiBUZXN0cwotKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotCi06QXV0aG9yOiBTa2lwIE1vbnRhbmFybwotOkNvbnRhY3Q6IHNraXBAcG9ib3guY29tCi0KLUludHJvZHVjdGlvbgotPT09PT09PT09PT09Ci0KLUlmIHlvdSBhZGQgYSBuZXcgbW9kdWxlIHRvIFB5dGhvbiBvciBtb2RpZnkgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gZXhpc3RpbmcKLW1vZHVsZSwgeW91IHNob3VsZCB3cml0ZSBvbmUgb3IgbW9yZSB0ZXN0IGNhc2VzIHRvIGV4ZXJjaXNlIHRoYXQgbmV3Ci1mdW5jdGlvbmFsaXR5LiAgVGhlcmUgYXJlIGRpZmZlcmVudCB3YXlzIHRvIGRvIHRoaXMgd2l0aGluIHRoZSByZWdyZXNzaW9uCi10ZXN0aW5nIGZhY2lsaXR5IHByb3ZpZGVkIHdpdGggUHl0aG9uOyBhbnkgcGFydGljdWxhciB0ZXN0IHNob3VsZCB1c2Ugb25seQotb25lIG9mIHRoZXNlIG9wdGlvbnMuICBFYWNoIG9wdGlvbiByZXF1aXJlcyB3cml0aW5nIGEgdGVzdCBtb2R1bGUgdXNpbmcgdGhlCi1jb252ZW50aW9ucyBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9uOgotCi0gICAgLSB1bml0dGVzdF8gYmFzZWQgdGVzdHMKLSAgICAtIGRvY3Rlc3RfIGJhc2VkIHRlc3RzCi0gICAgLSAidHJhZGl0aW9uYWwiIFB5dGhvbiB0ZXN0IG1vZHVsZXMKLQotUmVnYXJkbGVzcyBvZiB0aGUgbWVjaGFuaWNzIG9mIHRoZSB0ZXN0aW5nIGFwcHJvYWNoIHlvdSBjaG9vc2UsCi15b3Ugd2lsbCBiZSB3cml0aW5nIHVuaXQgdGVzdHMgKGlzb2xhdGVkIHRlc3RzIG9mIGZ1bmN0aW9ucyBhbmQgb2JqZWN0cwotZGVmaW5lZCBieSB0aGUgbW9kdWxlKSB1c2luZyB3aGl0ZSBib3ggdGVjaG5pcXVlcy4gIFVubGlrZSBibGFjayBib3gKLXRlc3RpbmcsIHdoZXJlIHlvdSBvbmx5IGhhdmUgdGhlIGV4dGVybmFsIGludGVyZmFjZXMgdG8gZ3VpZGUgeW91ciB0ZXN0IGNhc2UKLXdyaXRpbmcsIGluIHdoaXRlIGJveCB0ZXN0aW5nIHlvdSBjYW4gc2VlIHRoZSBjb2RlIGJlaW5nIHRlc3RlZCBhbmQgdGFpbG9yCi15b3VyIHRlc3QgY2FzZXMgdG8gZXhlcmNpc2UgaXQgbW9yZSBjb21wbGV0ZWx5LiAgSW4gcGFydGljdWxhciwgeW91IHdpbGwgYmUKLWFibGUgdG8gcmVmZXIgdG8gdGhlIEMgYW5kIFB5dGhvbiBjb2RlIGluIHRoZSBDVlMgcmVwb3NpdG9yeSB3aGVuIHdyaXRpbmcKLXlvdXIgcmVncmVzc2lvbiB0ZXN0IGNhc2VzLgotCi0uLiBfdW5pdHRlc3Q6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvY3VycmVudC9saWIvbW9kdWxlLXVuaXR0ZXN0Lmh0bWwKLS4uIF9kb2N0ZXN0OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2N1cnJlbnQvbGliL21vZHVsZS1kb2N0ZXN0Lmh0bWwKLQotdW5pdHRlc3QtYmFzZWQgdGVzdHMKLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIHVuaXR0ZXN0XyBmcmFtZXdvcmsgaXMgYmFzZWQgb24gdGhlIGlkZWFzIG9mIHVuaXQgdGVzdGluZyBhcyBlc3BvdXNlZAotYnkgS2VudCBCZWNrIGFuZCB0aGUgYEV4dHJlbWUgUHJvZ3JhbW1pbmdgXyAoWFApIG1vdmVtZW50LiAgVGhlIHNwZWNpZmljCi1pbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIGZyYW1ld29yayBpcyB0aWdodGx5IGJhc2VkIG9uIHRoZSBKVW5pdF8KLUphdmEgaW1wbGVtZW50YXRpb24gb2YgQmVjaydzIG9yaWdpbmFsIFNtYWxsVGFsayB0ZXN0IGZyYW1ld29yay4gIFBsZWFzZQotc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSB1bml0dGVzdF8gbW9kdWxlIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbgotdGhlIGludGVyZmFjZSBhbmQgZ2VuZXJhbCBndWlkZWxpbmVzIG9uIHdyaXRpbmcgdW5pdHRlc3QtYmFzZWQgdGVzdHMuCi0KLVRoZSB0ZXN0X3N1cHBvcnQgaGVscGVyIG1vZHVsZSBwcm92aWRlcyBhIGZ1bmN0aW9uIGZvciB1c2UgYnkKLXVuaXR0ZXN0LWJhc2VkIHRlc3RzIGluIHRoZSBQeXRob24gcmVncmVzc2lvbiB0ZXN0aW5nIGZyYW1ld29yaywKLWBgcnVuX3VuaXR0ZXN0KClgYC4gVGhpcyBpcyB0aGUgcHJpbWFyeSB3YXkgb2YgcnVubmluZyB0ZXN0cyBpbiB0aGUKLXN0YW5kYXJkIGxpYnJhcnkuIFlvdSBjYW4gcGFzcyBpdCBhbnkgbnVtYmVyIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLS0gY2xhc3NlcyBkZXJpdmVkIGZyb20gb3IgaW5zdGFuY2VzIG9mIGBgdW5pdHRlc3QuVGVzdENhc2VgYCBvcgotICBgYHVuaXR0ZXN0LlRlc3RTdWl0ZWBgLiBUaGVzZSB3aWxsIGJlIGhhbmRlZCBvZmYgdG8gdW5pdHRlc3QgZm9yCi0gIGNvbnZlcnRpbmcgaW50byBhIHByb3BlciBUZXN0U3VpdGUgaW5zdGFuY2UuCi0KLS0gYSBzdHJpbmc7IHRoaXMgbXVzdCBiZSBhIGtleSBpbiBzeXMubW9kdWxlcy4gVGhlIG1vZHVsZSBhc3NvY2lhdGVkIHdpdGgKLSAgdGhhdCBzdHJpbmcgd2lsbCBiZSBzY2FubmVkIGJ5IGBgdW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlYGAuCi0gIFRoaXMgaXMgdXN1YWxseSBzZWVuIGFzIGBgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXylgYCBpbiBhIHRlc3QKLSAgbW9kdWxlJ3MgYGB0ZXN0X21haW4oKWBgIGZ1bmN0aW9uLiBUaGlzIGhhcyB0aGUgYWR2YW50YWdlIG9mIHBpY2tpbmcgdXAKLSAgbmV3IHRlc3RzIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgeW91IGhhdmluZyB0byBhZGQgZWFjaCBuZXcgdGVzdCBjYXNlCi0gIG1hbnVhbGx5LgotICAgCi1BbGwgdGVzdCBtZXRob2RzIGluIHRoZSBQeXRob24gcmVncmVzc2lvbiBmcmFtZXdvcmsgaGF2ZSBuYW1lcyB0aGF0Ci1zdGFydCB3aXRoICJgYHRlc3RfYGAiIGFuZCB1c2UgbG93ZXItY2FzZSBuYW1lcyB3aXRoIHdvcmRzIHNlcGFyYXRlZCB3aXRoCi11bmRlcnNjb3Jlcy4KLQotVGVzdCBtZXRob2RzIHNob3VsZCAqbm90KiBoYXZlIGRvY3N0cmluZ3MhICBUaGUgdW5pdHRlc3QgbW9kdWxlIHByaW50cwotdGhlIGRvY3N0cmluZyBpZiB0aGVyZSBpcyBvbmUsIGJ1dCBvdGhlcndpc2UgcHJpbnRzIHRoZSBmdW5jdGlvbiBuYW1lCi1hbmQgdGhlIGZ1bGwgY2xhc3MgbmFtZS4gIFdoZW4gdGhlcmUncyBhIHByb2JsZW0gd2l0aCBhIHRlc3QsIHRoZQotbGF0dGVyIGluZm9ybWF0aW9uIG1ha2VzIGl0IGVhc2llciB0byBmaW5kIHRoZSBzb3VyY2UgZm9yIHRoZSB0ZXN0Ci10aGFuIHRoZSBkb2NzdHJpbmcuCi0KLUFsbCB1bml0dGVzdC1iYXNlZCB0ZXN0cyBpbiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGUgdXNlIGJvaWxlcnBsYXRlIHRoYXQKLWxvb2tzIGxpa2UgdGhpcyAod2l0aCBtaW5vciB2YXJpYXRpb25zKTo6Ci0KLSAgICBpbXBvcnQgdW5pdHRlc3QKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotCi0gICAgY2xhc3MgTXlUZXN0Q2FzZTEodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgICAgICMgRGVmaW5lIHNldFVwIGFuZCB0ZWFyRG93biBvbmx5IGlmIG5lZWRlZAotCi0gICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnNldFVwKHNlbGYpCi0gICAgICAgICAgICAuLi4gYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbi4uLgotCi0gICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgICAgIC4uLiBhZGRpdGlvbmFsIGZpbmFsaXphdGlvbi4uLgotICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UudGVhckRvd24oc2VsZikKLQotICAgICAgICBkZWYgdGVzdF9mZWF0dXJlX29uZShzZWxmKToKLSAgICAgICAgICAgICMgVGVzdGluZyBmZWF0dXJlIG9uZQotICAgICAgICAgICAgLi4udW5pdCB0ZXN0IGZvciBmZWF0dXJlIG9uZS4uLgotCi0gICAgICAgIGRlZiB0ZXN0X2ZlYXR1cmVfdHdvKHNlbGYpOgotICAgICAgICAgICAgIyBUZXN0aW5nIGZlYXR1cmUgdHdvCi0gICAgICAgICAgICAuLi51bml0IHRlc3QgZm9yIGZlYXR1cmUgdHdvLi4uCi0KLSAgICAgICAgLi4uZXRjLi4uCi0KLSAgICBjbGFzcyBNeVRlc3RDYXNlMih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgIC4uLnNhbWUgc3RydWN0dXJlIGFzIE15VGVzdENhc2UxLi4uCi0KLSAgICAuLi5ldGMuLi4KLQotICAgIGRlZiB0ZXN0X21haW4oKToKLSAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQotICAgIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgICAgIHRlc3RfbWFpbigpCi0KLVRoaXMgaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCBpdCBhbGxvd3MgdGhlIHVuaXR0ZXN0IG1vZHVsZSB0byBiZSB1c2VkCi1hcyBhIHNjcmlwdCB0byBydW4gaW5kaXZpZHVhbCB0ZXN0cyBhcyB3ZWxsIGFzIHdvcmtpbmcgd2VsbCB3aXRoIHRoZQotcmVncnRlc3QgZnJhbWV3b3JrLgotCi0uLiBfRXh0cmVtZSBQcm9ncmFtbWluZzogaHR0cDovL3d3dy5leHRyZW1lcHJvZ3JhbW1pbmcub3JnLwotLi4gX0pVbml0OiBodHRwOi8vd3d3Lmp1bml0Lm9yZy8KLQotZG9jdGVzdCBiYXNlZCB0ZXN0cwotLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVzdHMgd3JpdHRlbiB0byB1c2UgZG9jdGVzdF8gYXJlIGFjdHVhbGx5IHBhcnQgb2YgdGhlIGRvY3N0cmluZ3MgZm9yCi10aGUgbW9kdWxlIGJlaW5nIHRlc3RlZC4gIEVhY2ggdGVzdCBpcyB3cml0dGVuIGFzIGEgZGlzcGxheSBvZiBhbgotaW50ZXJhY3RpdmUgc2Vzc2lvbiwgaW5jbHVkaW5nIHRoZSBQeXRob24gcHJvbXB0cywgc3RhdGVtZW50cyB0aGF0IHdvdWxkCi1iZSB0eXBlZCBieSB0aGUgdXNlciwgYW5kIHRoZSBvdXRwdXQgb2YgdGhvc2Ugc3RhdGVtZW50cyAoaW5jbHVkaW5nCi10cmFjZWJhY2tzLCBhbHRob3VnaCBvbmx5IHRoZSBleGNlcHRpb24gbXNnIG5lZWRzIHRvIGJlIHJldGFpbmVkIHRoZW4pLgotVGhlIG1vZHVsZSBpbiB0aGUgdGVzdCBwYWNrYWdlIGlzIHNpbXBseSBhIHdyYXBwZXIgdGhhdCBjYXVzZXMgZG9jdGVzdAotdG8gcnVuIG92ZXIgdGhlIHRlc3RzIGluIHRoZSBtb2R1bGUuICBUaGUgdGVzdCBmb3IgdGhlIGRpZmZsaWIgbW9kdWxlCi1wcm92aWRlcyBhIGNvbnZlbmllbnQgZXhhbXBsZTo6Ci0KLSAgICBpbXBvcnQgZGlmZmxpYgotICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KGRpZmZsaWIpCi0KLUlmIHRoZSB0ZXN0IGlzIHN1Y2Nlc3NmdWwsIG5vdGhpbmcgaXMgd3JpdHRlbiB0byBzdGRvdXQgKHNvIHlvdSBzaG91bGQgbm90Ci1jcmVhdGUgYSBjb3JyZXNwb25kaW5nIG91dHB1dC90ZXN0X2RpZmZsaWIgZmlsZSksIGJ1dCBydW5uaW5nIHJlZ3J0ZXN0Ci13aXRoIC12IHdpbGwgZ2l2ZSBhIGRldGFpbGVkIHJlcG9ydCwgdGhlIHNhbWUgYXMgaWYgcGFzc2luZyAtdiB0byBkb2N0ZXN0LgotCi1BIHNlY29uZCBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIHRvIHJ1bl9kb2N0ZXN0IHRvIHRlbGwgZG9jdGVzdCB0byBzZWFyY2gKLWBgc3lzLmFyZ3ZgYCBmb3IgLXYgaW5zdGVhZCBvZiB1c2luZyB0ZXN0X3N1cHBvcnQncyBpZGVhIG9mIHZlcmJvc2l0eS4gIFRoaXMKLWlzIHVzZWZ1bCBmb3Igd3JpdGluZyBkb2N0ZXN0LWJhc2VkIHRlc3RzIHRoYXQgYXJlbid0IHNpbXBseSBydW5uaW5nIGEKLWRvY3Rlc3QnZWQgTGliIG1vZHVsZSwgYnV0IGNvbnRhaW4gdGhlIGRvY3Rlc3RzIHRoZW1zZWx2ZXMuICBUaGVuIGF0Ci10aW1lcyB5b3UgbWF5IHdhbnQgdG8gcnVuIHN1Y2ggYSB0ZXN0IGRpcmVjdGx5IGFzIGEgZG9jdGVzdCwgaW5kZXBlbmRlbnQKLW9mIHRoZSByZWdydGVzdCBmcmFtZXdvcmsuICBUaGUgdGFpbCBlbmQgb2YgdGVzdF9kZXNjcnR1dC5weSBpcyBhIGdvb2QKLWV4YW1wbGU6OgotCi0gICAgZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgdGVzdF9kZXNjcnR1dAotICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9kZXNjcnR1dCwgdmVyYm9zZSkKLQotICAgIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgICAgIHRlc3RfbWFpbigxKQotCi1JZiBydW4gdmlhIHJlZ3J0ZXN0LCBgYHRlc3RfbWFpbigpYGAgaXMgY2FsbGVkIChieSByZWdydGVzdCkgd2l0aG91dAotc3BlY2lmeWluZyB2ZXJib3NlLCBhbmQgdGhlbiB0ZXN0X3N1cHBvcnQncyBpZGVhIG9mIHZlcmJvc2l0eSBpcyB1c2VkLiAgQnV0Ci13aGVuIHJ1biBkaXJlY3RseSwgYGB0ZXN0X21haW4oMSlgYCBpcyBjYWxsZWQsIGFuZCB0aGVuIGRvY3Rlc3QncyBpZGVhIG9mCi12ZXJib3NpdHkgaXMgdXNlZC4KLQotU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZG9jdGVzdCBtb2R1bGUgZm9yIGluZm9ybWF0aW9uIG9uCi13cml0aW5nIHRlc3RzIHVzaW5nIHRoZSBkb2N0ZXN0IGZyYW1ld29yay4KLQotInRyYWRpdGlvbmFsIiBQeXRob24gdGVzdCBtb2R1bGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoZSAidHJhZGl0aW9uYWwiIHRlc3Qgc3lzdGVtIG9wZXJhdGVzIGFyZSBmYWlybHkKLXN0cmFpZ2h0Zm9yd2FyZC4gIFdoZW4gYSB0ZXN0IGNhc2UgaXMgcnVuLCB0aGUgb3V0cHV0IGlzIGNvbXBhcmVkIHdpdGggdGhlCi1leHBlY3RlZCBvdXRwdXQgdGhhdCBpcyBzdG9yZWQgaW4gLi4uL0xpYi90ZXN0L291dHB1dC4gIElmIHRoZSB0ZXN0IHJ1bnMgdG8KLWNvbXBsZXRpb24gYW5kIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIG91dHB1dHMgbWF0Y2gsIHRoZSB0ZXN0IHN1Y2NlZWRzLCBpZgotbm90LCBpdCBmYWlscy4gIElmIGFuIGBgSW1wb3J0RXJyb3JgYCBvciBgYHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZGBgIGVycm9yCi1pcyByYWlzZWQsIHRoZSB0ZXN0IGlzIG5vdCBydW4uCi0KLUV4ZWN1dGluZyBUZXN0IENhc2VzCi09PT09PT09PT09PT09PT09PT09PQotSWYgeW91IGFyZSB3cml0aW5nIHRlc3QgY2FzZXMgZm9yIG1vZHVsZSBzcGFtLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBmaWxlCi1pbiAuLi4vTGliL3Rlc3QgbmFtZWQgdGVzdF9zcGFtLnB5LiAgSW4gYWRkaXRpb24sIGlmIHRoZSB0ZXN0cyBhcmUgZXhwZWN0ZWQKLXRvIHdyaXRlIHRvIHN0ZG91dCBkdXJpbmcgYSBzdWNjZXNzZnVsIHJ1biwgeW91IGFsc28gbmVlZCB0byBjcmVhdGUgYW4KLWV4cGVjdGVkIG91dHB1dCBmaWxlIGluIC4uLi9MaWIvdGVzdC9vdXRwdXQgbmFtZWQgdGVzdF9zcGFtICgiLi4uIgotcmVwcmVzZW50cyB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBpbiB0aGUgUHl0aG9uIHNvdXJjZSB0cmVlLCB0aGUgZGlyZWN0b3J5Ci1jb250YWluaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0KS4gIElmIG5lZWRlZCwgZ2VuZXJhdGUgdGhlIGluaXRpYWwgdmVyc2lvbgotb2YgdGhlIHRlc3Qgb3V0cHV0IGZpbGUgYnkgZXhlY3V0aW5nOjoKLQotICAgIC4vcHl0aG9uIExpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1nIHRlc3Rfc3BhbS5weQotCi1mcm9tIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgotCi1BbnkgdGltZSB5b3UgbW9kaWZ5IHRlc3Rfc3BhbS5weSB5b3UgbmVlZCB0byBnZW5lcmF0ZSBhIG5ldyBleHBlY3RlZAotb3V0cHV0IGZpbGUuICBEb24ndCBmb3JnZXQgdG8gZGVzayBjaGVjayB0aGUgZ2VuZXJhdGVkIG91dHB1dCB0byBtYWtlIHN1cmUKLWl0J3MgcmVhbGx5IHdoYXQgeW91IGV4cGVjdGVkIHRvIGZpbmQhICBBbGwgaW4gYWxsIGl0J3MgdXN1YWxseSBiZXR0ZXIKLW5vdCB0byBoYXZlIGFuIGV4cGVjdGVkLW91dCBmaWxlIChub3RlIHRoYXQgZG9jdGVzdC0gYW5kIHVuaXR0ZXN0LWJhc2VkCi10ZXN0cyBkbyBub3QpLgotCi1UbyBydW4gYSBzaW5nbGUgdGVzdCBhZnRlciBtb2RpZnlpbmcgYSBtb2R1bGUsIHNpbXBseSBydW4gcmVncnRlc3QucHkKLXdpdGhvdXQgdGhlIC1nIGZsYWc6OgotCi0gICAgLi9weXRob24gTGliL3Rlc3QvcmVncnRlc3QucHkgdGVzdF9zcGFtLnB5Ci0KLVdoaWxlIGRlYnVnZ2luZyBhIHJlZ3Jlc3Npb24gdGVzdCwgeW91IGNhbiBvZiBjb3Vyc2UgZXhlY3V0ZSBpdAotaW5kZXBlbmRlbnRseSBvZiB0aGUgcmVncmVzc2lvbiB0ZXN0aW5nIGZyYW1ld29yayBhbmQgc2VlIHdoYXQgaXQgcHJpbnRzOjoKLQotICAgIC4vcHl0aG9uIExpYi90ZXN0L3Rlc3Rfc3BhbS5weQotCi1UbyBydW4gdGhlIGVudGlyZSB0ZXN0IHN1aXRlOgotCi0tIFtVTklYLCArIG90aGVyIHBsYXRmb3JtcyB3aGVyZSAibWFrZSIgd29ya3NdIE1ha2UgdGhlICJ0ZXN0IiB0YXJnZXQgYXQgdGhlCi0gIHRvcCBsZXZlbDo6Ci0KLSAgICBtYWtlIHRlc3QKLQotLSBbV0lORE9XU10gUnVuIHJ0LmJhdCBmcm9tIHlvdXIgUENCdWlsZCBkaXJlY3RvcnkuICBSZWFkIHRoZSBjb21tZW50cyBhdAotICB0aGUgdG9wIG9mIHJ0LmJhdCBmb3IgdGhlIHVzZSBvZiBzcGVjaWFsIC1kLCAtTyBhbmQgLXEgb3B0aW9ucyBwcm9jZXNzZWQKLSAgYnkgcnQuYmF0LgotCi0tIFtPVEhFUl0gWW91IGNhbiBzaW1wbHkgZXhlY3V0ZSB0aGUgdHdvIHJ1bnMgb2YgcmVncnRlc3QgKG9wdGltaXplZCBhbmQKLSAgbm9uLW9wdGltaXplZCkgZGlyZWN0bHk6OgotCi0gICAgLi9weXRob24gTGliL3Rlc3QvcmVncnRlc3QucHkKLSAgICAuL3B5dGhvbiAtTyBMaWIvdGVzdC9yZWdydGVzdC5weQotCi1CdXQgbm90ZSB0aGF0IHRoaXMgd2F5IHBpY2tzIHVwIHdoYXRldmVyIC5weWMgYW5kIC5weW8gZmlsZXMgaGFwcGVuIHRvIGJlCi1hcm91bmQuICBUaGUgbWFrZWZpbGUgYW5kIHJ0LmJhdCB3YXlzIHJ1biB0aGUgdGVzdHMgdHdpY2UsIHRoZSBmaXJzdCB0aW1lCi1yZW1vdmluZyBhbGwgLnB5YyBhbmQgLnB5byBmaWxlcyBmcm9tIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCBMaWIvLgotCi1UZXN0IGNhc2VzIGdlbmVyYXRlIG91dHB1dCBiYXNlZCB1cG9uIHZhbHVlcyBjb21wdXRlZCBieSB0aGUgdGVzdCBjb2RlLgotV2hlbiBleGVjdXRlZCwgcmVncnRlc3QucHkgY29tcGFyZXMgdGhlIGFjdHVhbCBvdXRwdXQgZ2VuZXJhdGVkIGJ5IGV4ZWN1dGluZwotdGhlIHRlc3QgY2FzZSB3aXRoIHRoZSBleHBlY3RlZCBvdXRwdXQgYW5kIHJlcG9ydHMgc3VjY2VzcyBvciBmYWlsdXJlLiAgSXQKLXN0YW5kcyB0byByZWFzb24gdGhhdCBpZiB0aGUgYWN0dWFsIGFuZCBleHBlY3RlZCBvdXRwdXRzIGFyZSB0byBtYXRjaCwgdGhleQotbXVzdCBub3QgY29udGFpbiBhbnkgbWFjaGluZSBkZXBlbmRlbmNpZXMuICBUaGlzIG1lYW5zIHlvdXIgdGVzdCBjYXNlcwotc2hvdWxkIG5vdCBwcmludCBvdXQgYWJzb2x1dGUgbWFjaGluZSBhZGRyZXNzZXMgKGUuZy4gdGhlIHJldHVybiB2YWx1ZSBvZgotdGhlIGlkKCkgYnVpbHRpbiBmdW5jdGlvbikgb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyB3aXRoIGxhcmdlIG51bWJlcnMgb2YKLXNpZ25pZmljYW50IGRpZ2l0cyAodW5sZXNzIHlvdSB1bmRlcnN0YW5kIHdoYXQgeW91IGFyZSBkb2luZyEpLgotCi0KLVRlc3QgQ2FzZSBXcml0aW5nIFRpcHMKLT09PT09PT09PT09PT09PT09PT09PT0KLVdyaXRpbmcgZ29vZCB0ZXN0IGNhc2VzIGlzIGEgc2tpbGxlZCB0YXNrIGFuZCBpcyB0b28gY29tcGxleCB0byBkaXNjdXNzIGluCi1kZXRhaWwgaW4gdGhpcyBzaG9ydCBkb2N1bWVudC4gIE1hbnkgYm9va3MgaGF2ZSBiZWVuIHdyaXR0ZW4gb24gdGhlIHN1YmplY3QuCi1JJ2xsIHNob3cgbXkgYWdlIGJ5IHN1Z2dlc3RpbmcgdGhhdCBHbGVuZm9yZCBNeWVycycgYCJUaGUgQXJ0IG9mIFNvZnR3YXJlCi1UZXN0aW5nImBfLCBwdWJsaXNoZWQgaW4gMTk3OSwgaXMgc3RpbGwgdGhlIGJlc3QgaW50cm9kdWN0aW9uIHRvIHRoZSBzdWJqZWN0Ci1hdmFpbGFibGUuICBJdCBpcyBzaG9ydCAoMTc3IHBhZ2VzKSwgZWFzeSB0byByZWFkLCBhbmQgZGlzY3Vzc2VzIHRoZSBtYWpvcgotZWxlbWVudHMgb2Ygc29mdHdhcmUgdGVzdGluZywgdGhvdWdoIGl0cyBwdWJsaWNhdGlvbiBwcmVkYXRlcyB0aGUKLW9iamVjdC1vcmllbnRlZCBzb2Z0d2FyZSByZXZvbHV0aW9uLCBzbyBkb2Vzbid0IGNvdmVyIHRoYXQgc3ViamVjdCBhdCBhbGwuCi1VbmZvcnR1bmF0ZWx5LCBpdCBpcyB2ZXJ5IGV4cGVuc2l2ZSAoYWJvdXQgJDEwMCBuZXcpLiAgSWYgeW91IGNhbiBib3Jyb3cgaXQKLW9yIGZpbmQgaXQgdXNlZCAoYXJvdW5kICQyMCksIEkgc3Ryb25nbHkgdXJnZSB5b3UgdG8gcGljayB1cCBhIGNvcHkuCi0KLVRoZSBtb3N0IGltcG9ydGFudCBnb2FsIHdoZW4gd3JpdGluZyB0ZXN0IGNhc2VzIGlzIHRvIGJyZWFrIHRoaW5ncy4gIEEgdGVzdAotY2FzZSB0aGF0IGRvZXNuJ3QgdW5jb3ZlciBhIGJ1ZyBpcyBtdWNoIGxlc3MgdmFsdWFibGUgdGhhbiBvbmUgdGhhdCBkb2VzLgotSW4gZGVzaWduaW5nIHRlc3QgY2FzZXMgeW91IHNob3VsZCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAqIFlvdXIgdGVzdCBjYXNlcyBzaG91bGQgZXhlcmNpc2UgYWxsIHRoZSBmdW5jdGlvbnMgYW5kIG9iamVjdHMgZGVmaW5lZAotICAgICAgaW4gdGhlIG1vZHVsZSwgbm90IGp1c3QgdGhlIG9uZXMgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IHVzZXJzIG9mIHlvdXIKLSAgICAgIG1vZHVsZS4gIFRoaXMgbWF5IHJlcXVpcmUgeW91IHRvIHdyaXRlIHRlc3QgY29kZSB0aGF0IHVzZXMgdGhlIG1vZHVsZQotICAgICAgaW4gd2F5cyB5b3UgZG9uJ3QgZXhwZWN0IChleHBsaWNpdGx5IGNhbGxpbmcgaW50ZXJuYWwgZnVuY3Rpb25zLCBmb3IKLSAgICAgIGV4YW1wbGUgLSBzZWUgdGVzdF9hdGV4aXQucHkpLgotCi0gICAgKiBZb3Ugc2hvdWxkIGNvbnNpZGVyIGFueSBib3VuZGFyeSB2YWx1ZXMgdGhhdCBtYXkgdGlja2xlIGV4Y2VwdGlvbmFsCi0gICAgICBjb25kaXRpb25zIChlLmcuIGlmIHlvdSB3ZXJlIHdyaXRpbmcgcmVncmVzc2lvbiB0ZXN0cyBmb3IgZGl2aXNpb24sCi0gICAgICB5b3UgbWlnaHQgd2VsbCB3YW50IHRvIGdlbmVyYXRlIHRlc3RzIHdpdGggbnVtZXJhdG9ycyBhbmQgZGVub21pbmF0b3JzCi0gICAgICBhdCB0aGUgbGltaXRzIG9mIGZsb2F0aW5nIHBvaW50IGFuZCBpbnRlZ2VyIG51bWJlcnMgb24gdGhlIG1hY2hpbmUKLSAgICAgIHBlcmZvcm1pbmcgdGhlIHRlc3RzIGFzIHdlbGwgYXMgYSBkZW5vbWluYXRvciBvZiB6ZXJvKS4KLQotICAgICogWW91IHNob3VsZCBleGVyY2lzZSBhcyBtYW55IHBhdGhzIHRocm91Z2ggdGhlIGNvZGUgYXMgcG9zc2libGUuICBUaGlzCi0gICAgICBtYXkgbm90IGFsd2F5cyBiZSBwb3NzaWJsZSwgYnV0IGlzIGEgZ29hbCB0byBzdHJpdmUgZm9yLiAgSW4KLSAgICAgIHBhcnRpY3VsYXIsIHdoZW4gY29uc2lkZXJpbmcgaWYgc3RhdGVtZW50cyAob3IgdGhlaXIgZXF1aXZhbGVudCksIHlvdQotICAgICAgd2FudCB0byBjcmVhdGUgdGVzdCBjYXNlcyB0aGF0IGV4ZXJjaXNlIGJvdGggdGhlIHRydWUgYW5kIGZhbHNlCi0gICAgICBicmFuY2hlcy4gIEZvciBsb29wcywgeW91IHNob3VsZCBjcmVhdGUgdGVzdCBjYXNlcyB0aGF0IGV4ZXJjaXNlIHRoZQotICAgICAgbG9vcCB6ZXJvLCBvbmUgYW5kIG11bHRpcGxlIHRpbWVzLgotCi0gICAgKiBZb3Ugc2hvdWxkIHRlc3Qgd2l0aCBvYnZpb3VzbHkgaW52YWxpZCBpbnB1dC4gIElmIHlvdSBrbm93IHRoYXQgYQotICAgICAgZnVuY3Rpb24gcmVxdWlyZXMgYW4gaW50ZWdlciBpbnB1dCwgdHJ5IGNhbGxpbmcgaXQgd2l0aCBvdGhlciB0eXBlcyBvZgotICAgICAgb2JqZWN0cyB0byBzZWUgaG93IGl0IHJlc3BvbmRzLgotCi0gICAgKiBZb3Ugc2hvdWxkIHRlc3Qgd2l0aCBvYnZpb3VzbHkgb3V0LW9mLXJhbmdlIGlucHV0LiAgSWYgdGhlIGRvbWFpbiBvZiBhCi0gICAgICBmdW5jdGlvbiBpcyBvbmx5IGRlZmluZWQgZm9yIHBvc2l0aXZlIGludGVnZXJzLCB0cnkgY2FsbGluZyBpdCB3aXRoIGEKLSAgICAgIG5lZ2F0aXZlIGludGVnZXIuCi0KLSAgICAqIElmIHlvdSBhcmUgZ29pbmcgdG8gZml4IGEgYnVnIHRoYXQgd2Fzbid0IHVuY292ZXJlZCBieSBhbiBleGlzdGluZwotICAgICAgdGVzdCwgdHJ5IHRvIHdyaXRlIGEgdGVzdCBjYXNlIHRoYXQgZXhwb3NlcyB0aGUgYnVnIChwcmVmZXJhYmx5IGJlZm9yZQotICAgICAgZml4aW5nIGl0KS4KLQotICAgICogSWYgeW91IG5lZWQgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUsIHlvdSBjYW4gdXNlIHRoZSBmaWxlbmFtZSBpbgotICAgICAgYGB0ZXN0X3N1cHBvcnQuVEVTVEZOYGAgdG8gZG8gc28uICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtb3ZlIHRoZSBmaWxlCi0gICAgICB3aGVuIGRvbmU7IG90aGVyIHRlc3RzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0aGUgbmFtZSB3aXRob3V0IGNsZWFuaW5nCi0gICAgICB1cCBhZnRlciB5b3VyIHRlc3QuCi0KLS4uIF8iVGhlIEFydCBvZiBTb2Z0d2FyZSBUZXN0aW5nIjogCi0gICAgICAgIGh0dHA6Ly93d3cuYW1hem9uLmNvbS9leGVjL29iaWRvcy9JU0JOPTA0NzEwNDMyODEKLQotUmVncmVzc2lvbiBUZXN0IFdyaXRpbmcgUnVsZXMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1FYWNoIHRlc3QgY2FzZSBpcyBkaWZmZXJlbnQuICBUaGVyZSBpcyBubyAic3RhbmRhcmQiIGZvcm0gZm9yIGEgUHl0aG9uCi1yZWdyZXNzaW9uIHRlc3QgY2FzZSwgdGhvdWdoIHRoZXJlIGFyZSBzb21lIGdlbmVyYWwgcnVsZXMgKG5vdGUgdGhhdAotdGhlc2UgbW9zdGx5IGFwcGx5IG9ubHkgdG8gdGhlICJjbGFzc2ljIiB0ZXN0czsgdW5pdHRlc3RfLSBhbmQgZG9jdGVzdF8tCi1iYXNlZCB0ZXN0cyBzaG91bGQgZm9sbG93IHRoZSBjb252ZW50aW9ucyBuYXR1cmFsIHRvIHRob3NlIGZyYW1ld29ya3MpOjoKLQotICAgICogSWYgeW91ciB0ZXN0IGNhc2UgZGV0ZWN0cyBhIGZhaWx1cmUsIHJhaXNlIGBgVGVzdEZhaWxlZGBgIChmb3VuZCBpbgotICAgICAgYGB0ZXN0LnRlc3Rfc3VwcG9ydGBgKS4KLQotICAgICogSW1wb3J0IGV2ZXJ5dGhpbmcgeW91J2xsIG5lZWQgYXMgZWFybHkgYXMgcG9zc2libGUuCi0KLSAgICAqIElmIHlvdSdsbCBiZSBpbXBvcnRpbmcgb2JqZWN0cyBmcm9tIGEgbW9kdWxlIHRoYXQgaXMgYXQgbGVhc3QKLSAgICAgIHBhcnRpYWxseSBwbGF0Zm9ybS1kZXBlbmRlbnQsIG9ubHkgaW1wb3J0IHRob3NlIG9iamVjdHMgeW91IG5lZWQgZm9yCi0gICAgICB0aGUgY3VycmVudCB0ZXN0IGNhc2UgdG8gYXZvaWQgc3B1cmlvdXMgYGBJbXBvcnRFcnJvcmBgIGV4Y2VwdGlvbnMKLSAgICAgIHRoYXQgcHJldmVudCB0aGUgdGVzdCBmcm9tIHJ1bm5pbmcgdG8gY29tcGxldGlvbi4KLQotICAgICogUHJpbnQgYWxsIHlvdXIgdGVzdCBjYXNlIHJlc3VsdHMgdXNpbmcgdGhlIGBgcHJpbnRgYCBzdGF0ZW1lbnQuICBGb3IKLSAgICAgIG5vbi1mYXRhbCBlcnJvcnMsIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgKG9yIG9taXQgYSBzdWNjZXNzZnVsCi0gICAgICBjb21wbGV0aW9uIHByaW50KSB0byBpbmRpY2F0ZSB0aGUgZmFpbHVyZSwgYnV0IHByb2NlZWQgaW5zdGVhZCBvZgotICAgICAgcmFpc2luZyBgYFRlc3RGYWlsZWRgYC4KLQotICAgICogVXNlIGBgYXNzZXJ0YGAgc3BhcmluZ2x5LCBpZiBhdCBhbGwuICBJdCdzIHVzdWFsbHkgYmV0dGVyIHRvIGp1c3QgcHJpbnQKLSAgICAgIHdoYXQgeW91IGdvdCwgYW5kIHJlbHkgb24gcmVncnRlc3QncyBnb3QtdnMtZXhwZWN0ZWQgY29tcGFyaXNvbiB0bwotICAgICAgY2F0Y2ggZGV2aWF0aW9ucyBmcm9tIHdoYXQgeW91IGV4cGVjdC4gIGBgYXNzZXJ0YGAgc3RhdGVtZW50cyBhcmVuJ3QKLSAgICAgIGV4ZWN1dGVkIGF0IGFsbCB3aGVuIHJlZ3J0ZXN0IGlzIHJ1biBpbiAtTyBtb2RlOyBhbmQsIGJlY2F1c2UgdGhleQotICAgICAgY2F1c2UgdGhlIHRlc3QgdG8gc3RvcCBpbW1lZGlhdGVseSwgY2FuIGxlYWQgdG8gYSBsb25nICYgdGVkaW91cwotICAgICAgdGVzdC1maXgsIHRlc3QtZml4LCB0ZXN0LWZpeCwgLi4uIGN5Y2xlIHdoZW4gdGhpbmdzIGFyZSBiYWRseSBicm9rZW4KLSAgICAgIChhbmQgbm90ZSB0aGF0ICJiYWRseSBicm9rZW4iIG9mdGVuIGluY2x1ZGVzIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUKLSAgICAgIGZvciB0aGUgZmlyc3QgdGltZSBvbiBuZXcgcGxhdGZvcm1zIG9yIHVuZGVyIG5ldyBpbXBsZW1lbnRhdGlvbnMgb2YKLSAgICAgIHRoZSBsYW5ndWFnZSkuCi0KLU1pc2NlbGxhbmVvdXMKLT09PT09PT09PT09PT0KLVRoZXJlIGlzIGEgdGVzdF9zdXBwb3J0IG1vZHVsZSBpbiB0aGUgdGVzdCBwYWNrYWdlIHlvdSBjYW4gaW1wb3J0IGZvcgoteW91ciB0ZXN0IGNhc2UuICBJbXBvcnQgdGhpcyBtb2R1bGUgdXNpbmcgZWl0aGVyOjoKLQotICAgIGltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAotCi1vcjo6Ci0KLSAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotCi10ZXN0X3N1cHBvcnQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyB1c2VmdWwgb2JqZWN0czoKLQotICAgICogYGBUZXN0RmFpbGVkYGAgLSByYWlzZSB0aGlzIGV4Y2VwdGlvbiB3aGVuIHlvdXIgcmVncmVzc2lvbiB0ZXN0IGRldGVjdHMKLSAgICAgIGEgZmFpbHVyZS4KLQotICAgICogYGBUZXN0U2tpcHBlZGBgIC0gcmFpc2UgdGhpcyBpZiB0aGUgdGVzdCBjb3VsZCBub3QgYmUgcnVuIGJlY2F1c2UgdGhlCi0gICAgICBwbGF0Zm9ybSBkb2Vzbid0IG9mZmVyIGFsbCB0aGUgcmVxdWlyZWQgZmFjaWxpdGllcyAobGlrZSBsYXJnZQotICAgICAgZmlsZSBzdXBwb3J0KSwgZXZlbiBpZiBhbGwgdGhlIHJlcXVpcmVkIG1vZHVsZXMgYXJlIGF2YWlsYWJsZS4KLQotICAgICogYGBSZXNvdXJjZURlbmllZGBgIC0gdGhpcyBpcyByYWlzZWQgd2hlbiBhIHRlc3QgcmVxdWlyZXMgYSByZXNvdXJjZSB0aGF0Ci0gICAgICBpcyBub3QgYXZhaWxhYmxlLiAgUHJpbWFyaWx5IHVzZWQgYnkgJ3JlcXVpcmVzJy4KLQotICAgICogYGB2ZXJib3NlYGAgLSB5b3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvIGNvbnRyb2wgcHJpbnQgb3V0cHV0LiAgTWFueQotICAgICAgbW9kdWxlcyB1c2UgaXQuICBTZWFyY2ggZm9yICJ2ZXJib3NlIiBpbiB0aGUgdGVzdF8qLnB5IGZpbGVzIHRvIHNlZQotICAgICAgbG90cyBvZiBleGFtcGxlcy4KLQotICAgICogYGBmb3JnZXQobW9kdWxlX25hbWUpYGAgLSBhdHRlbXB0cyB0byBjYXVzZSBQeXRob24gdG8gImZvcmdldCIgdGhhdCBpdAotICAgICAgbG9hZGVkIGEgbW9kdWxlIGFuZCBlcmFzZSBhbnkgUFlDIGZpbGVzLgotCi0gICAgKiBgYGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpYGAgLSBSZXR1cm5zIGEgYm9vbGVhbiBiYXNlZCBvbiB3aGV0aGVyCi0gICAgICB0aGUgcmVzb3VyY2UgaXMgZW5hYmxlZCBvciBub3QuCi0KLSAgICAqIGBgcmVxdWlyZXMocmVzb3VyY2UgWywgbXNnXSlgYCAtIGlmIHRoZSByZXF1aXJlZCByZXNvdXJjZSBpcyBub3QKLSAgICAgIGF2YWlsYWJsZSB0aGUgUmVzb3VyY2VEZW5pZWQgZXhjZXB0aW9uIGlzIHJhaXNlZC4KLSAgICAKLSAgICAqIGBgdmVyaWZ5KGNvbmRpdGlvbiwgcmVhc29uPSd0ZXN0IGZhaWxlZCcpYGAuICBVc2UgdGhpcyBpbnN0ZWFkIG9mOjoKLQotICAgICAgICAgIGFzc2VydCBjb25kaXRpb25bLCByZWFzb25dCi0KLSAgICAgIGBgdmVyaWZ5KClgYCBoYXMgdHdvIGFkdmFudGFnZXMgb3ZlciBgYGFzc2VydGBgOiAgaXQgd29ya3MgZXZlbiBpbiAtTwotICAgICAgbW9kZSwgYW5kIGl0IHJhaXNlcyBgYFRlc3RGYWlsZWRgYCBvbiBmYWlsdXJlIGluc3RlYWQgb2YKLSAgICAgIGBgQXNzZXJ0aW9uRXJyb3JgYC4KLQotICAgICogYGBoYXZlX3VuaWNvZGVgYCAtIHRydWUgaWYgVW5pY29kZSBpcyBhdmFpbGFibGUsIGZhbHNlIG90aGVyd2lzZS4KLQotICAgICogYGBpc19qeXRob25gYCAtIHRydWUgaWYgdGhlIGludGVycHJldGVyIGlzIEp5dGhvbiwgZmFsc2Ugb3RoZXJ3aXNlLgotCi0gICAgKiBgYFRFU1RGTmBgIC0gYSBzdHJpbmcgdGhhdCBzaG91bGQgYWx3YXlzIGJlIHVzZWQgYXMgdGhlIGZpbGVuYW1lIHdoZW4KLSAgICAgIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIHRlbXAgZmlsZS4gIEFsc28gdXNlIGBgdHJ5YGAvYGBmaW5hbGx5YGAgdG8KLSAgICAgIGVuc3VyZSB0aGF0IHlvdXIgdGVtcCBmaWxlcyBhcmUgZGVsZXRlZCBiZWZvcmUgeW91ciB0ZXN0IGNvbXBsZXRlcy4KLSAgICAgIE5vdGUgdGhhdCB5b3UgY2Fubm90IHVubGluayBhbiBvcGVuIGZpbGUgb24gYWxsIG9wZXJhdGluZyBzeXN0ZW1zLCBzbwotICAgICAgYWxzbyBiZSBzdXJlIHRvIGNsb3NlIHRlbXAgZmlsZXMgYmVmb3JlIHRyeWluZyB0byB1bmxpbmsgdGhlbS4KLQotICAgICogYGBzb3J0ZGljdChkaWN0KWBgIC0gYWN0cyBsaWtlIGBgcmVwcihkaWN0Lml0ZW1zKCkpYGAsIGJ1dCBzb3J0cyB0aGUKLSAgICAgIGl0ZW1zIGZpcnN0LiAgVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiBwcmludGluZyBhIGRpY3QgdmFsdWUsIGJlY2F1c2UKLSAgICAgIHRoZSBvcmRlciBvZiBpdGVtcyBwcm9kdWNlZCBieSBgYGRpY3QuaXRlbXMoKWBgIGlzIG5vdCBkZWZpbmVkIGJ5IHRoZQotICAgICAgbGFuZ3VhZ2UuCi0KLSAgICAqIGBgZmluZGZpbGUoZmlsZSlgYCAtIHlvdSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGxvY2F0ZSBhIGZpbGUKLSAgICAgIHNvbWV3aGVyZSBhbG9uZyBzeXMucGF0aCBvciBpbiB0aGUgTGliL3Rlc3QgdHJlZSAtIHNlZQotICAgICAgdGVzdF9saW51eGF1ZGlvZGV2LnB5IGZvciBhbiBleGFtcGxlIG9mIGl0cyB1c2UuCi0KLSAgICAqIGBgZmNtcCh4LHkpYGAgLSB5b3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBjb21wYXJlIHR3byBmbG9hdGluZwotICAgICAgcG9pbnQgbnVtYmVycyB3aGVuIHlvdSBleHBlY3QgdGhlbSB0byBvbmx5IGJlIGFwcHJveGltYXRlbHkgZXF1YWwKLSAgICAgIHdpdGhpbmcgYSBmdXp6IGZhY3RvciAoYGB0ZXN0X3N1cHBvcnQuRlVaWmBgLCB3aGljaCBkZWZhdWx0cyB0byAxZS02KS4KLQotICAgICogYGBjaGVja19zeW50YXhfZXJyb3IodGVzdGNhc2UsIHN0YXRlbWVudClgYCAtIG1ha2Ugc3VyZSB0aGF0IHRoZQotICAgICAgc3RhdGVtZW50IGlzICpub3QqIGNvcnJlY3QgUHl0aG9uIHN5bnRheC4KLQotCi1Tb21lIE5vbi1PYnZpb3VzIHJlZ3J0ZXN0IEZlYXR1cmVzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgKiBBdXRvbWFnaWMgdGVzdCBkZXRlY3Rpb246ICBXaGVuIHlvdSBjcmVhdGUgYSBuZXcgdGVzdCBmaWxlCi0gICAgICB0ZXN0X3NwYW0ucHksIHlvdSBkbyBub3QgbmVlZCB0byBtb2RpZnkgcmVncnRlc3QgKG9yIGFueXRoaW5nIGVsc2UpCi0gICAgICB0byBhZHZlcnRpc2UgaXRzIGV4aXN0ZW5jZS4gIHJlZ3J0ZXN0IHNlYXJjaGVzIGZvciBhbmQgcnVucyBhbGwKLSAgICAgIG1vZHVsZXMgaW4gdGhlIHRlc3QgZGlyZWN0b3J5IHdpdGggbmFtZXMgb2YgdGhlIGZvcm0gdGVzdF94eHgucHkuCi0KLSAgICAqIE1pcmFuZGEgb3V0cHV0OiAgSWYsIHdoZW4gcnVubmluZyB0ZXN0X3NwYW0ucHksIHJlZ3J0ZXN0IGRvZXMgbm90Ci0gICAgICBmaW5kIGFuIGV4cGVjdGVkLW91dHB1dCBmaWxlIHRlc3Qvb3V0cHV0L3Rlc3Rfc3BhbSwgcmVncnRlc3QKLSAgICAgIHByZXRlbmRzIHRoYXQgaXQgZGlkIGZpbmQgb25lLCBjb250YWluaW5nIHRoZSBzaW5nbGUgbGluZQotCi0gICAgICB0ZXN0X3NwYW0KLQotICAgICAgVGhpcyBhbGxvd3MgbmV3IHRlc3RzIHRoYXQgZG9uJ3QgZXhwZWN0IHRvIHByaW50IGFueXRoaW5nIHRvIHN0ZG91dAotICAgICAgdG8gbm90IGJvdGhlciBjcmVhdGluZyBleHBlY3RlZC1vdXRwdXQgZmlsZXMuCi0KLSAgICAqIFR3by1zdGFnZSB0ZXN0aW5nOiAgVG8gcnVuIHRlc3Rfc3BhbS5weSwgcmVncnRlc3QgaW1wb3J0cyB0ZXN0X3NwYW0KLSAgICAgIGFzIGEgbW9kdWxlLiAgTW9zdCB0ZXN0cyBydW4gdG8gY29tcGxldGlvbiBhcyBhIHNpZGUtZWZmZWN0IG9mCi0gICAgICBnZXR0aW5nIGltcG9ydGVkLiAgQWZ0ZXIgaW1wb3J0aW5nIHRlc3Rfc3BhbSwgcmVncnRlc3QgYWxzbyBleGVjdXRlcwotICAgICAgYGB0ZXN0X3NwYW0udGVzdF9tYWluKClgYCwgaWYgdGVzdF9zcGFtIGhhcyBhIGBgdGVzdF9tYWluYGAgYXR0cmlidXRlLgotICAgICAgVGhpcyBpcyByYXJlbHkgcmVxdWlyZWQgd2l0aCB0aGUgInRyYWRpdGlvbmFsIiBQeXRob24gdGVzdHMsIGFuZAotICAgICAgeW91IHNob3VsZG4ndCBjcmVhdGUgYSBtb2R1bGUgZ2xvYmFsIHdpdGggbmFtZSB0ZXN0X21haW4gdW5sZXNzCi0gICAgICB5b3UncmUgc3BlY2lmaWNhbGx5IGV4cGxvaXRpbmcgdGhpcyBnaW1taWNrLiAgVGhpcyB1c2FnZSBkb2VzCi0gICAgICBwcm92ZSB1c2VmdWwgd2l0aCB1bml0dGVzdC1iYXNlZCB0ZXN0cyBhcyB3ZWxsLCBob3dldmVyOyBkZWZpbmluZwotICAgICAgYSBgYHRlc3RfbWFpbigpYGAgd2hpY2ggaXMgcnVuIGJ5IHJlZ3J0ZXN0IGFuZCBhIHNjcmlwdC1zdHViIGluIHRoZQotICAgICAgdGVzdCBtb2R1bGUgKCJgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6IHRlc3RfbWFpbigpYGAiKSBhbGxvd3MKLSAgICAgIHRoZSB0ZXN0IHRvIGJlIHVzZWQgbGlrZSBhbnkgb3RoZXIgUHl0aG9uIHRlc3QgYW5kIGFsc28gd29yawotICAgICAgd2l0aCB0aGUgdW5pdHRlc3QucHktYXMtYS1zY3JpcHQgYXBwcm9hY2gsIGFsbG93aW5nIGEgZGV2ZWxvcGVyCi0gICAgICB0byBydW4gc3BlY2lmaWMgdGVzdHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5IGIvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5CmluZGV4IGRiMjc3NTkuLmQwZDhhNTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weQorKysgYi9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKQEAgLTE1LDMyICsxNSwzMiBAQAogCiAgICAgZGVmIHRlc3RfaXNsb3dlcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc2xvd2VyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidhJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYScpLmlzbG93ZXIoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidBJykuaXNsb3dlcigpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ1xuJykuaXNsb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInYWJjJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYWJjJykuaXNsb3dlcigpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FCYycpLmlzbG93ZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ2FiY1xuJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYWJjXG4nKS5pc2xvd2VyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXNsb3dlciwgNDIpCiAKICAgICBkZWYgdGVzdF9pc3VwcGVyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzdXBwZXIoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhJykuaXN1cHBlcigpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInQScpLmlzdXBwZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EnKS5pc3VwcGVyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInXG4nKS5pc3VwcGVyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidBQkMnKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBQkMnKS5pc3VwcGVyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInQWJDJykuaXN1cHBlcigpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInQUJDXG4nKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBQkNcbicpLmlzdXBwZXIoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5pc3VwcGVyLCA0MikKIAogICAgIGRlZiB0ZXN0X2lzdGl0bGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXN0aXRsZSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2EnKS5pc3RpdGxlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidBJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQScpLmlzdGl0bGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidcbicpLmlzdGl0bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ0EgVGl0bGVjYXNlZCBMaW5lJykuaXN0aXRsZSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInQVxuVGl0bGVjYXNlZCBMaW5lJykuaXN0aXRsZSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInQSBUaXRsZWNhc2VkLCBMaW5lJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQSBUaXRsZWNhc2VkIExpbmUnKS5pc3RpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBXG5UaXRsZWNhc2VkIExpbmUnKS5pc3RpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBIFRpdGxlY2FzZWQsIExpbmUnKS5pc3RpdGxlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInTm90IGEgY2FwaXRhbGl6ZWQgU3RyaW5nJykuaXN0aXRsZSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ05vdFx0YSBUaXRsZWNhc2UgU3RyaW5nJykuaXN0aXRsZSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ05vdC0tYSBUaXRsZWNhc2UgU3RyaW5nJykuaXN0aXRsZSgpKQpAQCAtNTAsMzEgKzUwLDMxIEBACiAgICAgZGVmIHRlc3RfaXNzcGFjZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc3NwYWNlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInYScpLmlzc3BhY2UoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJyAnKS5pc3NwYWNlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidcdCcpLmlzc3BhY2UoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ1xyJykuaXNzcGFjZSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInXG4nKS5pc3NwYWNlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYicgXHRcclxuJykuaXNzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInICcpLmlzc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ1x0JykuaXNzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInXHInKS5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidcbicpLmlzc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJyBcdFxyXG4nKS5pc3NwYWNlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInIFx0XHJcbmEnKS5pc3NwYWNlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXNzcGFjZSwgNDIpCiAKICAgICBkZWYgdGVzdF9pc2FscGhhKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzYWxwaGEoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ2EnKS5pc2FscGhhKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidBJykuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYScpLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EnKS5pc2FscGhhKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInXG4nKS5pc2FscGhhKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidhYmMnKS5pc2FscGhhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidhYmMnKS5pc2FscGhhKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInYUJjMTIzJykuaXNhbHBoYSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FiY1xuJykuaXNhbHBoYSgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzYWxwaGEsIDQyKQogCiAgICAgZGVmIHRlc3RfaXNhbG51bShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc2FsbnVtKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidhJykuaXNhbG51bSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInQScpLmlzYWxudW0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2EnKS5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBJykuaXNhbG51bSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ1xuJykuaXNhbG51bSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInMTIzYWJjNDU2JykuaXNhbG51bSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInYTFiM2MnKS5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYicxMjNhYmM0NTYnKS5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidhMWIzYycpLmlzYWxudW0oKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhQmMwMDAgJykuaXNhbG51bSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FiY1xuJykuaXNhbG51bSgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzYWxudW0sIDQyKQpAQCAtODIsOCArODIsOCBAQAogICAgIGRlZiB0ZXN0X2lzZGlnaXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXNkaWdpdCgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2EnKS5pc2RpZ2l0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYicwJykuaXNkaWdpdCgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInMDEyMzQ1Njc4OScpLmlzZGlnaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJzAnKS5pc2RpZ2l0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYicwMTIzNDU2Nzg5JykuaXNkaWdpdCgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJzAxMjM0NTY3ODlhJykuaXNkaWdpdCgpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXNkaWdpdCwgNDIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jcmFzaGVycy9SRUFETUUgYi9MaWIvdGVzdC9jcmFzaGVycy9SRUFETUUKaW5kZXggMDcwYzNmMS4uMmE3M2UxYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvY3Jhc2hlcnMvUkVBRE1FCisrKyBiL0xpYi90ZXN0L2NyYXNoZXJzL1JFQURNRQpAQCAtMSwyMCArMSwxNiBAQAotVGhpcyBkaXJlY3Rvcnkgb25seSBjb250YWlucyB0ZXN0cyBmb3Igb3V0c3RhbmRpbmcgYnVncyB0aGF0IGNhdXNlCi10aGUgaW50ZXJwcmV0ZXIgdG8gc2VnZmF1bHQuICBJZGVhbGx5IHRoaXMgZGlyZWN0b3J5IHNob3VsZCBhbHdheXMKLWJlIGVtcHR5LiAgU29tZXRpbWVzIGl0IG1heSBub3QgYmUgZWFzeSB0byBmaXggdGhlIHVuZGVybHlpbmcgY2F1c2UuCitUaGlzIGRpcmVjdG9yeSBvbmx5IGNvbnRhaW5zIHRlc3RzIGZvciBvdXRzdGFuZGluZyBidWdzIHRoYXQgY2F1c2UgdGhlCitpbnRlcnByZXRlciB0byBzZWdmYXVsdC4gIElkZWFsbHkgdGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGFsd2F5cyBiZSBlbXB0eSwgYnV0Citzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBlYXN5IHRvIGZpeCB0aGUgdW5kZXJseWluZyBjYXVzZSBhbmQgdGhlIGJ1ZyBpcyBkZWVtZWQKK3RvbyBvYnNjdXJlIHRvIGludmVzdCB0aGUgZWZmb3J0LgogCiBFYWNoIHRlc3Qgc2hvdWxkIGZhaWwgd2hlbiBydW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lOgogCiAJLi9weXRob24gTGliL3Rlc3QvY3Jhc2hlcnMvd2Vha3JlZl9pbl9kZWwucHkKIAotRWFjaCB0ZXN0IHNob3VsZCBoYXZlIGEgbGluayB0byB0aGUgYnVnIHJlcG9ydDoKK1B1dCBhcyBtdWNoIGluZm8gaW50byBhIGRvY3N0cmluZyBvciBjb21tZW50cyB0byBoZWxwIGRldGVybWluZSB0aGUgY2F1c2Ugb2YgdGhlCitmYWlsdXJlLCBhcyB3ZWxsIGFzIGEgYnVncy5weXRob24ub3JnIGlzc3VlIG51bWJlciBpZiBpdCBleGlzdHMuICBQYXJ0aWN1bGFybHkKK25vdGUgaWYgdGhlIGNhdXNlIGlzIHN5c3RlbSBvciBlbnZpcm9ubWVudCBkZXBlbmRlbnQgYW5kIHdoYXQgdGhlIHZhcmlhYmxlcyBhcmUuCiAKLQkjIGh0dHA6Ly9weXRob24ub3JnL3NmL0JVRyMKLQotUHV0IGFzIG11Y2ggaW5mbyBpbnRvIGEgZG9jc3RyaW5nIG9yIGNvbW1lbnRzIHRvIGhlbHAgZGV0ZXJtaW5lCi10aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmUuICBQYXJ0aWN1bGFybHkgbm90ZSBpZiB0aGUgY2F1c2UgaXMKLXN5c3RlbSBvciBlbnZpcm9ubWVudCBkZXBlbmRlbnQgYW5kIHdoYXQgdGhlIHZhcmlhYmxlcyBhcmUuCi0KLU9uY2UgdGhlIGNyYXNoIGlzIGZpeGVkLCB0aGUgdGVzdCBjYXNlIHNob3VsZCBiZSBtb3ZlZCBpbnRvIGFuIGFwcHJvcHJpYXRlCi10ZXN0IChldmVuIGlmIGl0IHdhcyBvcmlnaW5hbGx5IGZyb20gdGhlIHRlc3Qgc3VpdGUpLiAgVGhpcyBlbnN1cmVzIHRoZQotcmVncmVzc2lvbiBkb2Vzbid0IGhhcHBlbiBhZ2Fpbi4gIEFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgYmUgZWFzaWVyCi10byB0cmFjayBkb3duLgorT25jZSB0aGUgY3Jhc2ggaXMgZml4ZWQsIHRoZSB0ZXN0IGNhc2Ugc2hvdWxkIGJlIG1vdmVkIGludG8gYW4gYXBwcm9wcmlhdGUgdGVzdAorKGV2ZW4gaWYgaXQgd2FzIG9yaWdpbmFsbHkgZnJvbSB0aGUgdGVzdCBzdWl0ZSkuICBUaGlzIGVuc3VyZXMgdGhlIHJlZ3Jlc3Npb24KK2RvZXNuJ3QgaGFwcGVuIGFnYWluLiAgQW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCBiZSBlYXNpZXIgdG8gdHJhY2sgZG93bi4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2NyYXNoZXJzL2JvZ3VzX3NyZV9ieXRlY29kZS5weSBiL0xpYi90ZXN0L2NyYXNoZXJzL2JvZ3VzX3NyZV9ieXRlY29kZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJmYzczMC4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9jcmFzaGVycy9ib2d1c19zcmVfYnl0ZWNvZGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0iIiIKLVRoZSByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lIGluICdfc3JlJyBjYW4gc2VnZmF1bHQgd2hlbiBpbnRlcnByZXRpbmcKLWJvZ3VzIGJ5dGVjb2RlLgotCi1JdCBpcyB1bmNsZWFyIHdoZXRoZXIgdGhpcyBpcyBhIHJlYWwgYnVnIG9yIGEgIndvbid0IGZpeCIgY2FzZSBsaWtlCi1ib2d1c19jb2RlX29iai5weSwgYmVjYXVzZSBpdCByZXF1aXJlcyBieXRlY29kZSB0aGF0IGlzIGJ1aWx0IGJ5IGhhbmQsCi1hcyBvcHBvc2VkIHRvIGNvbXBpbGVkIGJ5ICdyZScgZnJvbSBhIHN0cmluZy1zb3VyY2UgcmVnZXhwLiAgVGhlCi1kaWZmZXJlbmNlIHdpdGggYm9ndXNfY29kZV9vYmosIHRob3VnaCwgaXMgdGhhdCB0aGUgb25seSBleGlzdGluZyByZWdleHAKLWNvbXBpbGVyIGlzIHdyaXR0ZW4gaW4gUHl0aG9uLCBzbyB0aGF0IHRoZSBDIGNvZGUgaGFzIG5vIGNob2ljZSBidXQKLWFjY2VwdCBhcmJpdHJhcnkgYnl0ZWNvZGUgZnJvbSBQeXRob24tbGV2ZWwuCi0KLVRoZSB0ZXN0IGJlbG93IGJ1aWxkcyBhbmQgcnVucyByYW5kb20gYnl0ZWNvZGVzIHVudGlsICdtYXRjaCcgY3Jhc2hlcwotUHl0aG9uLiAgSSBoYXZlIG5vdCBpbnZlc3RpZ2F0ZWQgd2h5IGV4YWN0bHkgc2VnZmF1bHRzIG9jY3VyIG5vciBob3cKLWhhcmQgdGhleSB3b3VsZCBiZSB0byBmaXguICBIZXJlIGFyZSBhIGZldyBleGFtcGxlcyBvZiAnY29kZScgdGhhdAotc2VnZmF1bHQgZm9yIG1lOgotCi0gICAgWzIxLCA1MDgxNCwgOCwgMjksIDE2XQotICAgIFsyMSwgMzk2NywgMjYsIDEwLCAyMywgNTQxMTNdCi0gICAgWzI5LCAyMywgMCwgMiwgNV0KLSAgICBbMzEsIDY0MzUxLCAwLCAyOCwgMywgMjIyODEsIDIwLCA0NDYzLCA5LCAyNSwgNTkxNTQsIDE1MjQ1LCAyLAotICAgICAgICAgICAgICAgICAgMTYzNDMsIDMsIDExNjAwLCAyNDM4MCwgMTAsIDM3NTU2LCAxMCwgMzEsIDE1LCAzMV0KLQotSGVyZSBpcyBhbHNvIGEgJ2NvZGUnIHRoYXQgdHJpZ2dlcnMgYW4gaW5maW5pdGUgdW5pbnRlcnJ1cHRpYmxlIGxvb3A6Ci0KLSAgICBbMjksIDEsIDgsIDIxLCAxLCA0MzA4MywgNl0KLQotIiIiCi0KLWltcG9ydCBfc3JlLCByYW5kb20KLQotZGVmIHBpY2soKToKLSAgICBuID0gcmFuZG9tLnJhbmRyYW5nZSgtNjU1MzYsIDY1NTM2KQotICAgIGlmIG4gPCAwOgotICAgICAgICBuICY9IDMxCi0gICAgcmV0dXJuIG4KLQotc3MgPSBbIiIsICJ3b3JsZCIsICJ4IiAqIDUwMF0KLQotd2hpbGUgMToKLSAgICBjb2RlID0gW3BpY2soKSBmb3IgaSBpbiByYW5nZShyYW5kb20ucmFuZHJhbmdlKDUsIDI1KSldCi0gICAgcHJpbnQgY29kZQotICAgIHBhdCA9IF9zcmUuY29tcGlsZShOb25lLCAwLCBjb2RlKQotICAgIGZvciBzIGluIHNzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXQubWF0Y2gocykKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2NyYXNoZXJzL2NvbXBpbGVyX3JlY3Vyc2lvbi5weSBiL0xpYi90ZXN0L2NyYXNoZXJzL2NvbXBpbGVyX3JlY3Vyc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTU0YmRkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvY3Jhc2hlcnMvY29tcGlsZXJfcmVjdXJzaW9uLnB5CkBAIC0wLDAgKzEsNSBAQAorIiIiCitUaGUgY29tcGlsZXIgKD49IDIuNSkgcmVjdXJzZXMgaGFwcGlseS4KKyIiIgorCitjb21waWxlKCcoKScqOSoqNSwgJz8nLCAnZXhlYycpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jcmFzaGVycy9nY19oYXNfZmluYWxpemVyLnB5IGIvTGliL3Rlc3QvY3Jhc2hlcnMvZ2NfaGFzX2ZpbmFsaXplci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzc5NTliCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvY3Jhc2hlcnMvZ2NfaGFzX2ZpbmFsaXplci5weQpAQCAtMCwwICsxLDM2IEBACisiIiIKK1RoZSBnYyBtb2R1bGUgY2FuIHN0aWxsIGludm9rZSBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgYW5kIGNyYXNoLgorVGhpcyBpcyBhbiBhdHRhY2sgYWdhaW5zdCBfUHlJbnN0YW5jZV9Mb29rdXAoKSwgd2hpY2ggaXMgZG9jdW1lbnRlZAorYXMgZm9sbG93czoKKworICAgIFRoZSBwb2ludCBvZiB0aGlzIHJvdXRpbmUgaXMgdGhhdCBpdCBuZXZlciBjYWxscyBhcmJpdHJhcnkgUHl0aG9uCisgICAgY29kZSwgc28gaXMgYWx3YXlzICJzYWZlIjogIGFsbCBpdCBkb2VzIGlzIGRpY3QgbG9va3Vwcy4KKworQnV0IG9mIGNvdXJzZSBkaWN0IGxvb2t1cHMgY2FuIGNhbGwgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlLgorVGhlIGZvbGxvd2luZyBjb2RlIGNhdXNlcyBtdXRhdGlvbiBvZiB0aGUgb2JqZWN0IGdyYXBoIGR1cmluZwordGhlIGNhbGwgdG8gaGFzX2ZpbmFsaXplcigpIGluIGdjbW9kdWxlLmMsIGFuZCB0aGF0IG1pZ2h0CitzZWdmYXVsdC4KKyIiIgorCitpbXBvcnQgZ2MKKworCitjbGFzcyBBOgorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goIl9fZGVsX18iKQorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBkZWwgc2VsZi5vdGhlcgorICAgICAgICByZXR1cm4gRmFsc2UKKworYSA9IEEoKQorYiA9IEEoKQorCithLl9fZGljdF9fW2JdID0gJ0EnCisKK2Eub3RoZXIgPSBiCitiLm90aGVyID0gYQorCitnYy5jb2xsZWN0KCkKK2RlbCBhLCBiCisKK2djLmNvbGxlY3QoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvY3Jhc2hlcnMvaXRlci5weSBiL0xpYi90ZXN0L2NyYXNoZXJzL2l0ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MWRjYmMuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvY3Jhc2hlcnMvaXRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSMgQ2FsbHMgdG8gUHlJdGVyX05leHQsIG9yIGRpcmVjdCBjYWxscyB0byB0cF9pdGVybmV4dCwgb24gYW4gb2JqZWN0Ci0jIHdoaWNoIG1pZ2h0IG5vIGxvbmdlciBiZSBhbiBpdGVyYWJsZSBiZWNhdXNlIGl0cyAnbmV4dCcgbWV0aG9kIHdhcwotIyByZW1vdmVkLiAgVGhlc2UgYXJlIGFsbCB2YXJpYW50cyBvZiBJc3N1ZTM3MjAuCi0KLSIiIgotUnVuIHRoaXMgc2NyaXB0IHdpdGggYW4gYXJndW1lbnQgYmV0d2VlbiAxIGFuZCA8Tj4gdG8gdGVzdCBmb3IKLWRpZmZlcmVudCBjcmFzaGVzLgotIiIiCi1OID0gOAotCi1pbXBvcnQgc3lzCi0KLWNsYXNzIEZvbyhvYmplY3QpOgotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLSAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgZGVsIEZvby5uZXh0Ci0gICAgICAgIHJldHVybiAoMSwgMikKLQotZGVmIGNhc2UxKCk6Ci0gICAgbGlzdChlbnVtZXJhdGUoRm9vKCkpKQotCi1kZWYgY2FzZTIoKToKLSAgICB4LCB5ID0gRm9vKCkKLQotZGVmIGNhc2UzKCk6Ci0gICAgZmlsdGVyKE5vbmUsIEZvbygpKQotCi1kZWYgY2FzZTQoKToKLSAgICBtYXAoTm9uZSwgRm9vKCksIEZvbygpKQotCi1kZWYgY2FzZTUoKToKLSAgICBtYXgoRm9vKCkpCi0KLWRlZiBjYXNlNigpOgotICAgIHN1bShGb28oKSwgKCkpCi0KLWRlZiBjYXNlNygpOgotICAgIGRpY3QoRm9vKCkpCi0KLWRlZiBjYXNlOCgpOgotICAgIHN5cy5zdGRvdXQud3JpdGVsaW5lcyhGb28oKSkKLQotIyBldGMuLi4KLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgotICAgICAgICBwcmludCBfX2RvY19fLnJlcGxhY2UoJzxOPicsIHN0cihOKSkKLSAgICBlbHNlOgotICAgICAgICBuID0gaW50KHN5cy5hcmd2WzFdKQotICAgICAgICBmdW5jID0gZ2xvYmFscygpWydjYXNlJWQnICUgbl0KLSAgICAgICAgZnVuYygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kYXRhL1JFQURNRSBiL0xpYi90ZXN0L2RhdGEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZjhjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9kYXRhL1JFQURNRQpAQCAtMCwwICsxLDIgQEAKK1RoaXMgZW1wdHkgZGlyZWN0b3J5IHNlcnZlcyBhcyBkZXN0aW5hdGlvbiBmb3IgdGVtcG9yYXJ5IGZpbGVzCitjcmVhdGVkIGJ5IHNvbWUgdGVzdHMuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYW5kLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYW5kLmRlY1Rlc3QKaW5kZXggZTkxMjM5NC4uYTBjYzc4NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2FuZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9hbmQuZGVjVGVzdApAQCAtMSwzMzggKzEsMzM4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBhbmQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotDQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCi1hbmR4MDAxIGFuZCAgICAgICAgICAgICAwICAgIDAgLT4gICAgMA0KLWFuZHgwMDIgYW5kICAgICAgICAgICAgIDAgICAgMSAtPiAgICAwDQotYW5keDAwMyBhbmQgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDANCi1hbmR4MDA0IGFuZCAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQ0KLWFuZHgwMDUgYW5kICAgICAgICAgIDExMDAgMTAxMCAtPiAxMDAwDQotYW5keDAwNiBhbmQgICAgICAgICAgMTExMSAgIDEwIC0+ICAgMTANCi1hbmR4MDA3IGFuZCAgICAgICAgICAxMTExIDEwMTAgLT4gMTAxMA0KLQ0KLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQotYW5keDAxMCBhbmQgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLWFuZHgwMTEgYW5kIDAwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1hbmR4MDEyIGFuZCAxMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotYW5keDAxMyBhbmQgMTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMA0KLWFuZHgwMTQgYW5kIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1hbmR4MDE1IGFuZCAwMDAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgICAgICAgICAwDQotYW5keDAxNiBhbmQgMDEwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLWFuZHgwMTcgYW5kIDAxMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgMTAwMDAwMDANCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi0tLSAgICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQ0KLWFuZHgwMjEgYW5kIDExMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTExMTExMTExDQotYW5keDAyMiBhbmQgMTExMTExMTExMTExICAxMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1hbmR4MDIzIGFuZCAxMTExMTExMTExMTEgICAxMTExMTExMSAgLT4gICAxMTExMTExMQ0KLWFuZHgwMjQgYW5kIDExMTExMTExMSAgICAgIDExMTExMTExICAtPiAgIDExMTExMTExDQotYW5keDAyNSBhbmQgMTExMTExMTExICAgICAgIDExMTExMTEgIC0+ICAgIDExMTExMTENCi1hbmR4MDI2IGFuZCAxMTExMTExMTExMTEgICAgIDExMTExMSAgLT4gICAgIDExMTExMQ0KLWFuZHgwMjcgYW5kIDExMTExMTExMTExMSAgICAgIDExMTExICAtPiAgICAgIDExMTExDQotYW5keDAyOCBhbmQgMTExMTExMTExMTExICAgICAgIDExMTEgIC0+ICAgICAgIDExMTENCi1hbmR4MDI5IGFuZCAxMTExMTExMTExMTEgICAgICAgIDExMSAgLT4gICAgICAgIDExMQ0KLWFuZHgwMzEgYW5kIDExMTExMTExMTExMSAgICAgICAgIDExICAtPiAgICAgICAgIDExDQotYW5keDAzMiBhbmQgMTExMTExMTExMTExICAgICAgICAgIDEgIC0+ICAgICAgICAgIDENCi1hbmR4MDMzIGFuZCAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KLWFuZHgwMzQgYW5kIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMTExMTExMTExDQotYW5keDAzNSBhbmQgMTExMTExMTExMSAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1hbmR4MDM2IGFuZCAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KLQ0KLWFuZHgwNDAgYW5kIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMTExMTExDQotYW5keDA0MSBhbmQgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAgMTExMTExMTENCi1hbmR4MDQyIGFuZCAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gICAxMTExMTExMQ0KLWFuZHgwNDMgYW5kICAgMTExMTExMSAgICAgMTExMTExMTExICAtPiAgICAxMTExMTExDQotYW5keDA0NCBhbmQgICAgMTExMTExICAgICAxMTExMTExMTEgIC0+ICAgICAxMTExMTENCi1hbmR4MDQ1IGFuZCAgICAgMTExMTEgICAgIDExMTExMTExMSAgLT4gICAgICAxMTExMQ0KLWFuZHgwNDYgYW5kICAgICAgMTExMSAgICAgMTExMTExMTExICAtPiAgICAgICAxMTExDQotYW5keDA0NyBhbmQgICAgICAgMTExICAgICAxMTExMTExMTEgIC0+ICAgICAgICAxMTENCi1hbmR4MDQ4IGFuZCAgICAgICAgMTEgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMQ0KLWFuZHgwNDkgYW5kICAgICAgICAgMSAgICAgMTExMTExMTExICAtPiAgICAgICAgICAxDQotDQotYW5keDA1MCBhbmQgMTExMTExMTExMSAgMSAgLT4gIDENCi1hbmR4MDUxIGFuZCAgMTExMTExMTExICAxICAtPiAgMQ0KLWFuZHgwNTIgYW5kICAgMTExMTExMTEgIDEgIC0+ICAxDQotYW5keDA1MyBhbmQgICAgMTExMTExMSAgMSAgLT4gIDENCi1hbmR4MDU0IGFuZCAgICAgMTExMTExICAxICAtPiAgMQ0KLWFuZHgwNTUgYW5kICAgICAgMTExMTEgIDEgIC0+ICAxDQotYW5keDA1NiBhbmQgICAgICAgMTExMSAgMSAgLT4gIDENCi1hbmR4MDU3IGFuZCAgICAgICAgMTExICAxICAtPiAgMQ0KLWFuZHgwNTggYW5kICAgICAgICAgMTEgIDEgIC0+ICAxDQotYW5keDA1OSBhbmQgICAgICAgICAgMSAgMSAgLT4gIDENCi0NCi1hbmR4MDYwIGFuZCAxMTExMTExMTExICAwICAtPiAgMA0KLWFuZHgwNjEgYW5kICAxMTExMTExMTEgIDAgIC0+ICAwDQotYW5keDA2MiBhbmQgICAxMTExMTExMSAgMCAgLT4gIDANCi1hbmR4MDYzIGFuZCAgICAxMTExMTExICAwICAtPiAgMA0KLWFuZHgwNjQgYW5kICAgICAxMTExMTEgIDAgIC0+ICAwDQotYW5keDA2NSBhbmQgICAgICAxMTExMSAgMCAgLT4gIDANCi1hbmR4MDY2IGFuZCAgICAgICAxMTExICAwICAtPiAgMA0KLWFuZHgwNjcgYW5kICAgICAgICAxMTEgIDAgIC0+ICAwDQotYW5keDA2OCBhbmQgICAgICAgICAxMSAgMCAgLT4gIDANCi1hbmR4MDY5IGFuZCAgICAgICAgICAxICAwICAtPiAgMA0KLQ0KLWFuZHgwNzAgYW5kIDEgIDExMTExMTExMTEgIC0+ICAxDQotYW5keDA3MSBhbmQgMSAgIDExMTExMTExMSAgLT4gIDENCi1hbmR4MDcyIGFuZCAxICAgIDExMTExMTExICAtPiAgMQ0KLWFuZHgwNzMgYW5kIDEgICAgIDExMTExMTEgIC0+ICAxDQotYW5keDA3NCBhbmQgMSAgICAgIDExMTExMSAgLT4gIDENCi1hbmR4MDc1IGFuZCAxICAgICAgIDExMTExICAtPiAgMQ0KLWFuZHgwNzYgYW5kIDEgICAgICAgIDExMTEgIC0+ICAxDQotYW5keDA3NyBhbmQgMSAgICAgICAgIDExMSAgLT4gIDENCi1hbmR4MDc4IGFuZCAxICAgICAgICAgIDExICAtPiAgMQ0KLWFuZHgwNzkgYW5kIDEgICAgICAgICAgIDEgIC0+ICAxDQotDQotYW5keDA4MCBhbmQgMCAgMTExMTExMTExMSAgLT4gIDANCi1hbmR4MDgxIGFuZCAwICAgMTExMTExMTExICAtPiAgMA0KLWFuZHgwODIgYW5kIDAgICAgMTExMTExMTEgIC0+ICAwDQotYW5keDA4MyBhbmQgMCAgICAgMTExMTExMSAgLT4gIDANCi1hbmR4MDg0IGFuZCAwICAgICAgMTExMTExICAtPiAgMA0KLWFuZHgwODUgYW5kIDAgICAgICAgMTExMTEgIC0+ICAwDQotYW5keDA4NiBhbmQgMCAgICAgICAgMTExMSAgLT4gIDANCi1hbmR4MDg3IGFuZCAwICAgICAgICAgMTExICAtPiAgMA0KLWFuZHgwODggYW5kIDAgICAgICAgICAgMTEgIC0+ICAwDQotYW5keDA4OSBhbmQgMCAgICAgICAgICAgMSAgLT4gIDANCi0NCi1hbmR4MDkwIGFuZCAwMTExMTExMTEgIDExMTExMTExMSAgLT4gICAxMTExMTExMQ0KLWFuZHgwOTEgYW5kIDEwMTExMTExMSAgMTExMTExMTExICAtPiAgMTAxMTExMTExDQotYW5keDA5MiBhbmQgMTEwMTExMTExICAxMTExMTExMTEgIC0+ICAxMTAxMTExMTENCi1hbmR4MDkzIGFuZCAxMTEwMTExMTEgIDExMTExMTExMSAgLT4gIDExMTAxMTExMQ0KLWFuZHgwOTQgYW5kIDExMTEwMTExMSAgMTExMTExMTExICAtPiAgMTExMTAxMTExDQotYW5keDA5NSBhbmQgMTExMTEwMTExICAxMTExMTExMTEgIC0+ICAxMTExMTAxMTENCi1hbmR4MDk2IGFuZCAxMTExMTEwMTEgIDExMTExMTExMSAgLT4gIDExMTExMTAxMQ0KLWFuZHgwOTcgYW5kIDExMTExMTEwMSAgMTExMTExMTExICAtPiAgMTExMTExMTAxDQotYW5keDA5OCBhbmQgMTExMTExMTEwICAxMTExMTExMTEgIC0+ICAxMTExMTExMTANCi0NCi1hbmR4MTAwIGFuZCAxMTExMTExMTEgIDAxMTExMTExMSAgLT4gICAxMTExMTExMQ0KLWFuZHgxMDEgYW5kIDExMTExMTExMSAgMTAxMTExMTExICAtPiAgMTAxMTExMTExDQotYW5keDEwMiBhbmQgMTExMTExMTExICAxMTAxMTExMTEgIC0+ICAxMTAxMTExMTENCi1hbmR4MTAzIGFuZCAxMTExMTExMTEgIDExMTAxMTExMSAgLT4gIDExMTAxMTExMQ0KLWFuZHgxMDQgYW5kIDExMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQotYW5keDEwNSBhbmQgMTExMTExMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTAxMTENCi1hbmR4MTA2IGFuZCAxMTExMTExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTAxMQ0KLWFuZHgxMDcgYW5kIDExMTExMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTAxDQotYW5keDEwOCBhbmQgMTExMTExMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTANCi0NCi0tLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCi1hbmR4MjIwIGFuZCAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyMjEgYW5kIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDIyMiBhbmQgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjIzIGFuZCA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyMjQgYW5kIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDIyNSBhbmQgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjI2IGFuZCA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyMjcgYW5kIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDIyOCBhbmQgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjI5IGFuZCA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyMzAgYW5kIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDIzMSBhbmQgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjMyIGFuZCA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGEgZmV3IHJhbmRvbXMNCi1hbmR4MjQwIGFuZCAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNDEgYW5kICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI0MiBhbmQgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjQzIGFuZCAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNDQgYW5kICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QNCi1hbmR4MjUwIGFuZCAgMjAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI1MSBhbmQgIDcwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNTIgYW5kICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjUzIGFuZCAgOTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI1NCBhbmQgIDIwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNTUgYW5kICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjU2IGFuZCAgODAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI1NyBhbmQgIDkwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNTggYW5kICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjU5IGFuZCAgMTAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI2MCBhbmQgIDEwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNjEgYW5kICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjYyIGFuZCAgMDAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI2MyBhbmQgIDAwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNjQgYW5kICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjY1IGFuZCAgMDAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QtMQ0KLWFuZHgyNzAgYW5kICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjcxIGFuZCAgMDcwMTAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI3MiBhbmQgIDA4MDAxMDAwMCAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNzMgYW5kICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mjc0IGFuZCAgMTAwMDAwMTAwIDAyMDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI3NSBhbmQgIDEwMDAwMDAwMCAwNzAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNzYgYW5kICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mjc3IGFuZCAgMTAwMDAwMDAwIDA5MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi1hbmR4MjgwIGFuZCAgMDAxMDAwMDAyIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI4MSBhbmQgIDAwMDAwMDAwNyAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyODIgYW5kICAwMDAwMDAwMDggMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjgzIGFuZCAgMDAwMDAwMDA5IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI4NCBhbmQgIDEwMDAwMDAwMCAwMDAxMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyODUgYW5kICAxMDAxMDAwMDAgMDAxMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mjg2IGFuZCAgMTAwMDEwMDAwIDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI4NyBhbmQgIDEwMDAwMTAwMCAxMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTWlkZGllDQotYW5keDI4OCBhbmQgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyODkgYW5kICAwMDAwNzAwMDEgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjkwIGFuZCAgMDAwMDgwMDAwIDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI5MSBhbmQgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyOTIgYW5kICAxMDAwMDAwMTAgMDAwMDIwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjkzIGFuZCAgMTAwMTAwMDAwIDAwMDA3MDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI5NCBhbmQgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyOTUgYW5kICAxMDAwMDEwMDAgMDAwMDkwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzaWducw0KLWFuZHgyOTYgYW5kIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI5NyBhbmQgLTEwMDAwMTAwMCAgMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mjk4IGFuZCAgMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyOTkgYW5kICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotYW5keDMzMSBhbmQgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzMzIgYW5kICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzMzIGFuZCAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDMzNCBhbmQgIDUgICAxRS0xMDA3ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzMzUgYW5kICA2ICAgLTFFLTEwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzM2IGFuZCAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDMzNyBhbmQgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzMzggYW5kICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzQxIGFuZCAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM0MiBhbmQgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNDMgYW5kICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzQ0IGFuZCAgMUUtMTAwNyAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM0NSBhbmQgIC0xRS0xMDA3ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNDYgYW5kICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzQ3IGFuZCAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM0OCBhbmQgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KLWFuZHgzNjEgYW5kICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzYyIGFuZCAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM2MyBhbmQgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNjQgYW5kICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzY1IGFuZCAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM2NiBhbmQgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNzEgYW5kICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzcyIGFuZCAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM3MyBhbmQgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNzQgYW5kICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mzc1IGFuZCAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM3NiBhbmQgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCi1hbmR4NzgwIGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDc4MSBhbmQgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg3ODIgYW5kIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4NzgzIGFuZCAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDc4NCBhbmQgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg3ODUgYW5kIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Nzg2IGFuZCAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDc4NyBhbmQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg3ODggYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Nzg5IGFuZCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDc5MCBhbmQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg3OTEgYW5kICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4NzkyIGFuZCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDc5MyBhbmQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg3OTQgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1hbmR4ODAwIGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgwMSBhbmQgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MDIgYW5kICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODAzIGFuZCAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgwNCBhbmQgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MDUgYW5kICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODA2IGFuZCAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgwNyBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MDggYW5kIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODA5IGFuZCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgxMCBhbmQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MTEgYW5kIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODEyIGFuZCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgxMyBhbmQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MTQgYW5kICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODE1IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotYW5keDgyMSBhbmQgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MjIgYW5kICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODIzIGFuZCAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgyNCBhbmQgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MjUgYW5kICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODI2IGFuZCAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgyNyBhbmQgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MjggYW5kICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODI5IGFuZCAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgzMCBhbmQgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MzEgYW5kIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODMyIGFuZCAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgzMyBhbmQgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MzQgYW5kICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODM1IGFuZCAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgzNiBhbmQgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MzcgYW5kICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1hbmR4ODQxIGFuZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODQyIGFuZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODQzIGFuZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODQ0IGFuZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODQ1IGFuZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODQ2IGFuZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODQ3IGFuZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODQ4IGFuZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODQ5IGFuZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODUwIGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODUxIGFuZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODUyIGFuZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODUzIGFuZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODU0IGFuZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODU1IGFuZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODU2IGFuZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODU3IGFuZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODU4IGFuZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODU5IGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotYW5keDg2MSBhbmQgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NjIgYW5kICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODYzIGFuZCAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg2NCBhbmQgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NjUgYW5kICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODY2IGFuZCAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg2NyBhbmQgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NjggYW5kICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODY5IGFuZCAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg3MSBhbmQgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NzIgYW5kICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODczIGFuZCAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg3NCBhbmQgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NzUgYW5kICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODc2IGFuZCAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg3NyBhbmQgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NzggYW5kIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODc5IGFuZCAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg4MCBhbmQgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4ODEgYW5kICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODgyIGFuZCAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg4MyBhbmQgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4ODQgYW5kICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODg1IGFuZCAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBhbmQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCithbmR4MDAxIGFuZCAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAorYW5keDAwMiBhbmQgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDAKK2FuZHgwMDMgYW5kICAgICAgICAgICAgIDEgICAgMCAtPiAgICAwCithbmR4MDA0IGFuZCAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQorYW5keDAwNSBhbmQgICAgICAgICAgMTEwMCAxMDEwIC0+IDEwMDAKK2FuZHgwMDYgYW5kICAgICAgICAgIDExMTEgICAxMCAtPiAgIDEwCithbmR4MDA3IGFuZCAgICAgICAgICAxMTExIDEwMTAgLT4gMTAxMAorCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorYW5keDAxMCBhbmQgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorYW5keDAxMSBhbmQgMDAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgICAgICAgICAgMAorYW5keDAxMiBhbmQgMTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorYW5keDAxMyBhbmQgMTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAorYW5keDAxNCBhbmQgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorYW5keDAxNSBhbmQgMDAwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAgICAgICAgMAorYW5keDAxNiBhbmQgMDEwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorYW5keDAxNyBhbmQgMDEwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAgIDEyMzQ1Njc4OSAgICAgMTIzNDU2Nzg5ICAgICAgMTIzNDU2Nzg5CithbmR4MDIxIGFuZCAxMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorYW5keDAyMiBhbmQgMTExMTExMTExMTExICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2FuZHgwMjMgYW5kIDExMTExMTExMTExMSAgIDExMTExMTExICAtPiAgIDExMTExMTExCithbmR4MDI0IGFuZCAxMTExMTExMTEgICAgICAxMTExMTExMSAgLT4gICAxMTExMTExMQorYW5keDAyNSBhbmQgMTExMTExMTExICAgICAgIDExMTExMTEgIC0+ICAgIDExMTExMTEKK2FuZHgwMjYgYW5kIDExMTExMTExMTExMSAgICAgMTExMTExICAtPiAgICAgMTExMTExCithbmR4MDI3IGFuZCAxMTExMTExMTExMTEgICAgICAxMTExMSAgLT4gICAgICAxMTExMQorYW5keDAyOCBhbmQgMTExMTExMTExMTExICAgICAgIDExMTEgIC0+ICAgICAgIDExMTEKK2FuZHgwMjkgYW5kIDExMTExMTExMTExMSAgICAgICAgMTExICAtPiAgICAgICAgMTExCithbmR4MDMxIGFuZCAxMTExMTExMTExMTEgICAgICAgICAxMSAgLT4gICAgICAgICAxMQorYW5keDAzMiBhbmQgMTExMTExMTExMTExICAgICAgICAgIDEgIC0+ICAgICAgICAgIDEKK2FuZHgwMzMgYW5kIDExMTExMTExMTExMSAxMTExMTExMTExICAtPiAgMTExMTExMTExCithbmR4MDM0IGFuZCAxMTExMTExMTExMSAxMTExMTExMTExMSAgLT4gIDExMTExMTExMQorYW5keDAzNSBhbmQgMTExMTExMTExMSAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2FuZHgwMzYgYW5kIDExMTExMTExMSAxMTExMTExMTExMTExICAtPiAgMTExMTExMTExCisKK2FuZHgwNDAgYW5kIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMTExMTExCithbmR4MDQxIGFuZCAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gICAxMTExMTExMQorYW5keDA0MiBhbmQgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2FuZHgwNDMgYW5kICAgMTExMTExMSAgICAgMTExMTExMTExICAtPiAgICAxMTExMTExCithbmR4MDQ0IGFuZCAgICAxMTExMTEgICAgIDExMTExMTExMSAgLT4gICAgIDExMTExMQorYW5keDA0NSBhbmQgICAgIDExMTExICAgICAxMTExMTExMTEgIC0+ICAgICAgMTExMTEKK2FuZHgwNDYgYW5kICAgICAgMTExMSAgICAgMTExMTExMTExICAtPiAgICAgICAxMTExCithbmR4MDQ3IGFuZCAgICAgICAxMTEgICAgIDExMTExMTExMSAgLT4gICAgICAgIDExMQorYW5keDA0OCBhbmQgICAgICAgIDExICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTEKK2FuZHgwNDkgYW5kICAgICAgICAgMSAgICAgMTExMTExMTExICAtPiAgICAgICAgICAxCisKK2FuZHgwNTAgYW5kIDExMTExMTExMTEgIDEgIC0+ICAxCithbmR4MDUxIGFuZCAgMTExMTExMTExICAxICAtPiAgMQorYW5keDA1MiBhbmQgICAxMTExMTExMSAgMSAgLT4gIDEKK2FuZHgwNTMgYW5kICAgIDExMTExMTEgIDEgIC0+ICAxCithbmR4MDU0IGFuZCAgICAgMTExMTExICAxICAtPiAgMQorYW5keDA1NSBhbmQgICAgICAxMTExMSAgMSAgLT4gIDEKK2FuZHgwNTYgYW5kICAgICAgIDExMTEgIDEgIC0+ICAxCithbmR4MDU3IGFuZCAgICAgICAgMTExICAxICAtPiAgMQorYW5keDA1OCBhbmQgICAgICAgICAxMSAgMSAgLT4gIDEKK2FuZHgwNTkgYW5kICAgICAgICAgIDEgIDEgIC0+ICAxCisKK2FuZHgwNjAgYW5kIDExMTExMTExMTEgIDAgIC0+ICAwCithbmR4MDYxIGFuZCAgMTExMTExMTExICAwICAtPiAgMAorYW5keDA2MiBhbmQgICAxMTExMTExMSAgMCAgLT4gIDAKK2FuZHgwNjMgYW5kICAgIDExMTExMTEgIDAgIC0+ICAwCithbmR4MDY0IGFuZCAgICAgMTExMTExICAwICAtPiAgMAorYW5keDA2NSBhbmQgICAgICAxMTExMSAgMCAgLT4gIDAKK2FuZHgwNjYgYW5kICAgICAgIDExMTEgIDAgIC0+ICAwCithbmR4MDY3IGFuZCAgICAgICAgMTExICAwICAtPiAgMAorYW5keDA2OCBhbmQgICAgICAgICAxMSAgMCAgLT4gIDAKK2FuZHgwNjkgYW5kICAgICAgICAgIDEgIDAgIC0+ICAwCisKK2FuZHgwNzAgYW5kIDEgIDExMTExMTExMTEgIC0+ICAxCithbmR4MDcxIGFuZCAxICAgMTExMTExMTExICAtPiAgMQorYW5keDA3MiBhbmQgMSAgICAxMTExMTExMSAgLT4gIDEKK2FuZHgwNzMgYW5kIDEgICAgIDExMTExMTEgIC0+ICAxCithbmR4MDc0IGFuZCAxICAgICAgMTExMTExICAtPiAgMQorYW5keDA3NSBhbmQgMSAgICAgICAxMTExMSAgLT4gIDEKK2FuZHgwNzYgYW5kIDEgICAgICAgIDExMTEgIC0+ICAxCithbmR4MDc3IGFuZCAxICAgICAgICAgMTExICAtPiAgMQorYW5keDA3OCBhbmQgMSAgICAgICAgICAxMSAgLT4gIDEKK2FuZHgwNzkgYW5kIDEgICAgICAgICAgIDEgIC0+ICAxCisKK2FuZHgwODAgYW5kIDAgIDExMTExMTExMTEgIC0+ICAwCithbmR4MDgxIGFuZCAwICAgMTExMTExMTExICAtPiAgMAorYW5keDA4MiBhbmQgMCAgICAxMTExMTExMSAgLT4gIDAKK2FuZHgwODMgYW5kIDAgICAgIDExMTExMTEgIC0+ICAwCithbmR4MDg0IGFuZCAwICAgICAgMTExMTExICAtPiAgMAorYW5keDA4NSBhbmQgMCAgICAgICAxMTExMSAgLT4gIDAKK2FuZHgwODYgYW5kIDAgICAgICAgIDExMTEgIC0+ICAwCithbmR4MDg3IGFuZCAwICAgICAgICAgMTExICAtPiAgMAorYW5keDA4OCBhbmQgMCAgICAgICAgICAxMSAgLT4gIDAKK2FuZHgwODkgYW5kIDAgICAgICAgICAgIDEgIC0+ICAwCisKK2FuZHgwOTAgYW5kIDAxMTExMTExMSAgMTExMTExMTExICAtPiAgIDExMTExMTExCithbmR4MDkxIGFuZCAxMDExMTExMTEgIDExMTExMTExMSAgLT4gIDEwMTExMTExMQorYW5keDA5MiBhbmQgMTEwMTExMTExICAxMTExMTExMTEgIC0+ICAxMTAxMTExMTEKK2FuZHgwOTMgYW5kIDExMTAxMTExMSAgMTExMTExMTExICAtPiAgMTExMDExMTExCithbmR4MDk0IGFuZCAxMTExMDExMTEgIDExMTExMTExMSAgLT4gIDExMTEwMTExMQorYW5keDA5NSBhbmQgMTExMTEwMTExICAxMTExMTExMTEgIC0+ICAxMTExMTAxMTEKK2FuZHgwOTYgYW5kIDExMTExMTAxMSAgMTExMTExMTExICAtPiAgMTExMTExMDExCithbmR4MDk3IGFuZCAxMTExMTExMDEgIDExMTExMTExMSAgLT4gIDExMTExMTEwMQorYW5keDA5OCBhbmQgMTExMTExMTEwICAxMTExMTExMTEgIC0+ICAxMTExMTExMTAKKworYW5keDEwMCBhbmQgMTExMTExMTExICAwMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2FuZHgxMDEgYW5kIDExMTExMTExMSAgMTAxMTExMTExICAtPiAgMTAxMTExMTExCithbmR4MTAyIGFuZCAxMTExMTExMTEgIDExMDExMTExMSAgLT4gIDExMDExMTExMQorYW5keDEwMyBhbmQgMTExMTExMTExICAxMTEwMTExMTEgIC0+ICAxMTEwMTExMTEKK2FuZHgxMDQgYW5kIDExMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCithbmR4MTA1IGFuZCAxMTExMTExMTEgIDExMTExMDExMSAgLT4gIDExMTExMDExMQorYW5keDEwNiBhbmQgMTExMTExMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTEwMTEKK2FuZHgxMDcgYW5kIDExMTExMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTAxCithbmR4MTA4IGFuZCAxMTExMTExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMAorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2FuZHgyMjAgYW5kIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjIxIGFuZCAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyMiBhbmQgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjMgYW5kIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjI0IGFuZCA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyNSBhbmQgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjYgYW5kIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjI3IGFuZCA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyOCBhbmQgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjkgYW5kIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjMwIGFuZCA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIzMSBhbmQgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMzIgYW5kIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCithbmR4MjQwIGFuZCAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI0MSBhbmQgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNDIgYW5kIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjQzIGFuZCAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI0NCBhbmQgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECithbmR4MjUwIGFuZCAgMjAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjUxIGFuZCAgNzAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjUyIGFuZCAgODAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjUzIGFuZCAgOTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjU0IGFuZCAgMjAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjU1IGFuZCAgNzAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjU2IGFuZCAgODAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjU3IGFuZCAgOTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjU4IGFuZCAgMTAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjU5IGFuZCAgMTAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjYwIGFuZCAgMTAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjYxIGFuZCAgMTAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjYyIGFuZCAgMDAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjYzIGFuZCAgMDAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjY0IGFuZCAgMDAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjY1IGFuZCAgMDAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCithbmR4MjcwIGFuZCAgMDIwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjcxIGFuZCAgMDcwMTAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjcyIGFuZCAgMDgwMDEwMDAwIDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjczIGFuZCAgMDkwMDAxMDAwIDEwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjc0IGFuZCAgMTAwMDAwMTAwIDAyMDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjc1IGFuZCAgMTAwMDAwMDAwIDA3MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjc2IGFuZCAgMTAwMDAwMDEwIDA4MDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjc3IGFuZCAgMTAwMDAwMDAwIDA5MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorYW5keDI4MCBhbmQgIDAwMTAwMDAwMiAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI4MSBhbmQgIDAwMDAwMDAwNyAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI4MiBhbmQgIDAwMDAwMDAwOCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI4MyBhbmQgIDAwMDAwMDAwOSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI4NCBhbmQgIDEwMDAwMDAwMCAwMDAxMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI4NSBhbmQgIDEwMDEwMDAwMCAwMDEwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI4NiBhbmQgIDEwMDAxMDAwMCAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI4NyBhbmQgIDEwMDAwMTAwMCAxMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2FuZHgyODggYW5kICAwMDEwMjAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODkgYW5kICAwMDAwNzAwMDEgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyOTAgYW5kICAwMDAwODAwMDAgMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyOTEgYW5kICAwMDAwOTAwMDAgMTAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyOTIgYW5kICAxMDAwMDAwMTAgMDAwMDIwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyOTMgYW5kICAxMDAxMDAwMDAgMDAwMDcwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyOTQgYW5kICAxMDAwMTAxMDAgMDAwMDgwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyOTUgYW5kICAxMDAwMDEwMDAgMDAwMDkwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCithbmR4Mjk2IGFuZCAtMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI5NyBhbmQgLTEwMDAwMTAwMCAgMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyOTggYW5kICAxMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjk5IGFuZCAgMTAwMDAxMDAwICAwMDAwMTEwMDAgLT4gIDEwMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2FuZHgzMzEgYW5kICAyICAgOS45OTk5OTk5OUUrOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzMzIgYW5kICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzMzMgYW5kICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzMzQgYW5kICA1ICAgMUUtMTAwNyAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzMzUgYW5kICA2ICAgLTFFLTEwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzMzYgYW5kICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzMzcgYW5kICA4ICAgLTFFLTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzMzggYW5kICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNDEgYW5kICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNDIgYW5kICAxRS05OTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNDMgYW5kICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNDQgYW5kICAxRS0xMDA3ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNDUgYW5kICAtMUUtMTAwNyAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNDYgYW5kICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNDcgYW5kICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNDggYW5kICAtOS45OTk5OTk5OUUrOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCithbmR4MzYxIGFuZCAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzYyIGFuZCAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzYzIGFuZCAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzY0IGFuZCAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzY1IGFuZCAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzY2IGFuZCAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzcxIGFuZCAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzcyIGFuZCAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzczIGFuZCAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mzc0IGFuZCAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mzc1IGFuZCAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mzc2IGFuZCAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2FuZHg3ODAgYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3ODEgYW5kIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3ODIgYW5kIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3ODMgYW5kIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3ODQgYW5kIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3ODUgYW5kIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3ODYgYW5kIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3ODcgYW5kIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3ODggYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3ODkgYW5kIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3OTAgYW5kIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3OTEgYW5kICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3OTIgYW5kICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3OTMgYW5kICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg3OTQgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworYW5keDgwMCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgwMSBhbmQgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgwMiBhbmQgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgwMyBhbmQgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgwNCBhbmQgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgwNSBhbmQgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgwNiBhbmQgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgwNyBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgwOCBhbmQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgwOSBhbmQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgxMCBhbmQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgxMSBhbmQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgxMiBhbmQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgxMyBhbmQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgxNCBhbmQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgxNSBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCithbmR4ODIxIGFuZCAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODIyIGFuZCAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODIzIGFuZCAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODI0IGFuZCAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODI1IGFuZCAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODI2IGFuZCAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODI3IGFuZCAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODI4IGFuZCAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODI5IGFuZCAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODMwIGFuZCAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODMxIGFuZCAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODMyIGFuZCAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODMzIGFuZCAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODM0IGFuZCAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODM1IGFuZCAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODM2IGFuZCAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODM3IGFuZCAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2FuZHg4NDEgYW5kICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0MiBhbmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODQzIGFuZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDQgYW5kICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0NSBhbmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODQ2IGFuZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDcgYW5kICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0OCBhbmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODQ5IGFuZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTAgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1MSBhbmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODUyIGFuZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTMgYW5kIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1NCBhbmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODU1IGFuZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTYgYW5kICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1NyBhbmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODU4IGFuZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTkgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCithbmR4ODYxIGFuZCAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODYyIGFuZCArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODYzIGFuZCAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODY0IGFuZCAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODY1IGFuZCAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODY2IGFuZCAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODY3IGFuZCAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODY4IGFuZCAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODY5IGFuZCAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODcxIGFuZCAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODcyIGFuZCAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODczIGFuZCAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODc0IGFuZCAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODc1IGFuZCAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODc2IGFuZCAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODc3IGFuZCAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODc4IGFuZCAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODc5IGFuZCAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODgwIGFuZCAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODgxIGFuZCArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODgyIGFuZCAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODgzIGFuZCAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODg0IGFuZCAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODg1IGFuZCAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY2xhc3MuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFzcy5kZWNUZXN0CmluZGV4IDYyZDJmYTQuLmZhNWJjM2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFzcy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFzcy5kZWNUZXN0CkBAIC0xLDEzMSArMSwxMzEgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGNsYXNzLmRlY1Rlc3QgLS0gQ2xhc3Mgb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBbTmV3IDIwMDYuMTEuMjddDQotDQotcHJlY2lzaW9uOiAgIDkNCi1tYXhFeHBvbmVudDogOTk5DQotbWluRXhwb25lbnQ6IC05OTkNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWNsYXN4MDAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCi1jbGFzeDAwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQotY2xhc3gwMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KLWNsYXN4MDA0ICBjbGFzcyAgICAxRS0xMDA3ICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KLWNsYXN4MDA1ICBjbGFzcyAgMC4xRS05OTkgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KLWNsYXN4MDA2ICBjbGFzcyAgMC45OTk5OTk5OUUtOTk5ICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KLWNsYXN4MDA3ICBjbGFzcyAgMS4wMDAwMDAwMEUtOTk5ICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDA4ICBjbGFzcyAgIDFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDE3ICBjbGFzcyAgIDFFKzk5OSAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDE4ICBjbGFzcyAgIDkuOTk5OTk5OTlFKzk5OSAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MDE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5DQotDQotY2xhc3gwMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KLWNsYXN4MDIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCi1jbGFzeDAyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQotY2xhc3gwMjQgIGNsYXNzICAgLTFFLTEwMDcgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQotY2xhc3gwMjUgIGNsYXNzICAtMC4xRS05OTkgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQotY2xhc3gwMjYgIGNsYXNzICAtMC45OTk5OTk5OUUtOTk5ICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQotY2xhc3gwMjcgIGNsYXNzICAtMS4wMDAwMDAwMEUtOTk5ICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMjggIGNsYXNzICAtMUUtOTk5ICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMzcgIGNsYXNzICAtMUUrOTk5ICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMzggIGNsYXNzICAtOS45OTk5OTk5OUUrOTk5ICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi0NCi1jbGFzeDA0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTg0KLWNsYXN4MDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFODQotY2xhc3gwNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4NCi1jbGFzeDA0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi1jbGFzeDA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi1jbGFzeDA0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi0NCi0NCi0tLSBkZWNpbWFsNjQgYm91bmRzDQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotY2xhc3gyMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KLWNsYXN4MjAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCi1jbGFzeDIwMyAgY2xhc3MgICAgMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQotY2xhc3gyMDQgIGNsYXNzICAgIDFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsDQotY2xhc3gyMDUgIGNsYXNzICAwLjFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsDQotY2xhc3gyMDYgIGNsYXNzICAwLjk5OTk5OTk5OTk5OTk5OUUtMzgzICAgICAtPiArU3Vibm9ybWFsDQotY2xhc3gyMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtPiArTm9ybWFsDQotY2xhc3gyMDggIGNsYXNzICAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotY2xhc3gyMDkgIGNsYXNzICAgMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotY2xhc3gyMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotY2xhc3gyMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotY2xhc3gyMTMgIGNsYXNzICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotY2xhc3gyMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotY2xhc3gyMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotY2xhc3gyMTYgIGNsYXNzICAgMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotY2xhc3gyMTcgIGNsYXNzICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotY2xhc3gyMTggIGNsYXNzICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiArTm9ybWFsDQotY2xhc3gyMTkgIGNsYXNzICAgSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiArSW5maW5pdHkNCi0NCi1jbGFzeDIyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQotY2xhc3gyMjIgIGNsYXNzICAgLTAuMDAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KLWNsYXN4MjIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCi1jbGFzeDIyNCAgY2xhc3MgICAtMUUtMzk2ICAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwNCi1jbGFzeDIyNSAgY2xhc3MgIC0wLjFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwNCi1jbGFzeDIyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OUUtMzgzICAgIC0+IC1TdWJub3JtYWwNCi1jbGFzeDIyNyAgY2xhc3MgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIyOCAgY2xhc3MgIC0xRS0zODMgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIzMiAgY2xhc3MgIC0xRS0xICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIzNSAgY2xhc3MgIC0xMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIzNyAgY2xhc3MgIC0xRSszODQgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIzOCAgY2xhc3MgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIC0+IC1Ob3JtYWwNCi1jbGFzeDIzOSAgY2xhc3MgIC1JbmYgICAgICAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLQ0KLWNsYXN4MjQxICBjbGFzcyAgIE5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFODQotY2xhc3gyNDIgIGNsYXNzICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4NCi1jbGFzeDI0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTg0KLWNsYXN4MjQ0ICBjbGFzcyAgIHNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTg0KLWNsYXN4MjQ1ICBjbGFzcyAgLXNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTg0KLWNsYXN4MjQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTg0KLQ0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gY2xhc3MuZGVjVGVzdCAtLSBDbGFzcyBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBbTmV3IDIwMDYuMTEuMjddCisKK3ByZWNpc2lvbjogICA5CittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2NsYXN4MDAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MDAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MDAzICBjbGFzcyAgICAwRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MDA0ICBjbGFzcyAgICAxRS0xMDA3ICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorY2xhc3gwMDUgIGNsYXNzICAwLjFFLTk5OSAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitjbGFzeDAwNiAgY2xhc3MgIDAuOTk5OTk5OTlFLTk5OSAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2NsYXN4MDA3ICBjbGFzcyAgMS4wMDAwMDAwMEUtOTk5ICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMDggIGNsYXNzICAgMUUtOTk5ICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAwOSAgY2xhc3MgICAxRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxMyAgY2xhc3MgICAxICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxNiAgY2xhc3MgICAxRSszMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDE3ICBjbGFzcyAgIDFFKzk5OSAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTggIGNsYXNzICAgOS45OTk5OTk5OUUrOTk5ICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxOSAgY2xhc3MgICBJbmYgICAgICAgICAgICAgICAgICAgICAgIC0+ICtJbmZpbml0eQorCitjbGFzeDAyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDAyMiAgY2xhc3MgICAtMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDAyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDAyNCAgY2xhc3MgICAtMUUtMTAwNyAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2NsYXN4MDI1ICBjbGFzcyAgLTAuMUUtOTk5ICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorY2xhc3gwMjYgIGNsYXNzICAtMC45OTk5OTk5OUUtOTk5ICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitjbGFzeDAyNyAgY2xhc3MgIC0xLjAwMDAwMDAwRS05OTkgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDI4ICBjbGFzcyAgLTFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDMyICBjbGFzcyAgLTFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDM1ICBjbGFzcyAgLTEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzNyAgY2xhc3MgIC0xRSs5OTkgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDM4ICBjbGFzcyAgLTkuOTk5OTk5OTlFKzk5OSAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKworY2xhc3gwNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2NsYXN4MDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCitjbGFzeDA0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTgorY2xhc3gwNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCitjbGFzeDA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2NsYXN4MDQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTgorCisKKy0tIGRlY2ltYWw2NCBib3VuZHMKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworY2xhc3gyMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworY2xhc3gyMDIgIGNsYXNzICAgIDAuMDAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworY2xhc3gyMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworY2xhc3gyMDQgIGNsYXNzICAgIDFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitjbGFzeDIwNSAgY2xhc3MgIDAuMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2NsYXN4MjA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAgLT4gK1N1Ym5vcm1hbAorY2xhc3gyMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtPiArTm9ybWFsCitjbGFzeDIwOCAgY2xhc3MgICAxRS0zODMgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIxMiAgY2xhc3MgICAxRS0xICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIxNSAgY2xhc3MgICAxMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTcgIGNsYXNzICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIxOCAgY2xhc3MgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIC0+ICtOb3JtYWwKK2NsYXN4MjE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5CisKK2NsYXN4MjIxICBjbGFzcyAgIC0wICAgICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2NsYXN4MjIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2NsYXN4MjIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2NsYXN4MjI0ICBjbGFzcyAgIC0xRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorY2xhc3gyMjUgIGNsYXNzICAtMC4xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitjbGFzeDIyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OUUtMzgzICAgIC0+IC1TdWJub3JtYWwKK2NsYXN4MjI3ICBjbGFzcyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgLT4gLU5vcm1hbAorY2xhc3gyMjggIGNsYXNzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjMwICBjbGFzcyAgLTFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjM0ICBjbGFzcyAgLTIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjM3ICBjbGFzcyAgLTFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMzggIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiAtTm9ybWFsCitjbGFzeDIzOSAgY2xhc3MgIC1JbmYgICAgICAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorCitjbGFzeDI0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgorY2xhc3gyNDIgIGNsYXNzICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2NsYXN4MjQzICBjbGFzcyAgK05hTjEyMzQ1ICAgICAgICAgICAgICAgICAgLT4gTmFOCitjbGFzeDI0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2NsYXN4MjQ1ICBjbGFzcyAgLXNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgorY2xhc3gyNDYgIGNsYXNzICArc05hTjEyMzQ1ICAgICAgICAgICAgICAgICAtPiBzTmFOCisKKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdGFsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdGFsLmRlY1Rlc3QKaW5kZXggYWQ4N2I0Yy4uMjUyYzQ5ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RhbC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90YWwuZGVjVGVzdApAQCAtMSw3OTggKzEsNzk4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBjb21wYXJldG90YWwuZGVjVGVzdCAtLSBkZWNpbWFsIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmcgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksDQotLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90DQotLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4NCi0tLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzDQotLS0gdGhhbiBjb21wYXJlLg0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDE2DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotY290eDAwMSBjb21wYXJldG90YWwgIC0yICAtMiAgLT4gMA0KLWNvdHgwMDIgY29tcGFyZXRvdGFsICAtMiAgLTEgIC0+IC0xDQotY290eDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTENCi1jb3R4MDA0IGNvbXBhcmV0b3RhbCAgLTIgICAxICAtPiAtMQ0KLWNvdHgwMDUgY29tcGFyZXRvdGFsICAtMiAgIDIgIC0+IC0xDQotY290eDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQ0KLWNvdHgwMDcgY29tcGFyZXRvdGFsICAtMSAgLTEgIC0+IDANCi1jb3R4MDA4IGNvbXBhcmV0b3RhbCAgLTEgICAwICAtPiAtMQ0KLWNvdHgwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xDQotY290eDAxMCBjb21wYXJldG90YWwgIC0xICAgMiAgLT4gLTENCi1jb3R4MDExIGNvbXBhcmV0b3RhbCAgIDAgIC0yICAtPiAxDQotY290eDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQ0KLWNvdHgwMTMgY29tcGFyZXRvdGFsICAgMCAgIDAgIC0+IDANCi1jb3R4MDE0IGNvbXBhcmV0b3RhbCAgIDAgICAxICAtPiAtMQ0KLWNvdHgwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xDQotY290eDAxNiBjb21wYXJldG90YWwgICAxICAtMiAgLT4gMQ0KLWNvdHgwMTcgY29tcGFyZXRvdGFsICAgMSAgLTEgIC0+IDENCi1jb3R4MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxDQotY290eDAxOSBjb21wYXJldG90YWwgICAxICAgMSAgLT4gMA0KLWNvdHgwMjAgY29tcGFyZXRvdGFsICAgMSAgIDIgIC0+IC0xDQotY290eDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQ0KLWNvdHgwMjIgY29tcGFyZXRvdGFsICAgMiAgLTEgIC0+IDENCi1jb3R4MDIzIGNvbXBhcmV0b3RhbCAgIDIgICAwICAtPiAxDQotY290eDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQ0KLWNvdHgwMjYgY29tcGFyZXRvdGFsICAgMiAgIDIgIC0+IDANCi0NCi1jb3R4MDMxIGNvbXBhcmV0b3RhbCAgLTIwICAtMjAgIC0+IDANCi1jb3R4MDMyIGNvbXBhcmV0b3RhbCAgLTIwICAtMTAgIC0+IC0xDQotY290eDAzMyBjb21wYXJldG90YWwgIC0yMCAgIDAwICAtPiAtMQ0KLWNvdHgwMzQgY29tcGFyZXRvdGFsICAtMjAgICAxMCAgLT4gLTENCi1jb3R4MDM1IGNvbXBhcmV0b3RhbCAgLTIwICAgMjAgIC0+IC0xDQotY290eDAzNiBjb21wYXJldG90YWwgIC0xMCAgLTIwICAtPiAxDQotY290eDAzNyBjb21wYXJldG90YWwgIC0xMCAgLTEwICAtPiAwDQotY290eDAzOCBjb21wYXJldG90YWwgIC0xMCAgIDAwICAtPiAtMQ0KLWNvdHgwMzkgY29tcGFyZXRvdGFsICAtMTAgICAxMCAgLT4gLTENCi1jb3R4MDQwIGNvbXBhcmV0b3RhbCAgLTEwICAgMjAgIC0+IC0xDQotY290eDA0MSBjb21wYXJldG90YWwgICAwMCAgLTIwICAtPiAxDQotY290eDA0MiBjb21wYXJldG90YWwgICAwMCAgLTEwICAtPiAxDQotY290eDA0MyBjb21wYXJldG90YWwgICAwMCAgIDAwICAtPiAwDQotY290eDA0NCBjb21wYXJldG90YWwgICAwMCAgIDEwICAtPiAtMQ0KLWNvdHgwNDUgY29tcGFyZXRvdGFsICAgMDAgICAyMCAgLT4gLTENCi1jb3R4MDQ2IGNvbXBhcmV0b3RhbCAgIDEwICAtMjAgIC0+IDENCi1jb3R4MDQ3IGNvbXBhcmV0b3RhbCAgIDEwICAtMTAgIC0+IDENCi1jb3R4MDQ4IGNvbXBhcmV0b3RhbCAgIDEwICAgMDAgIC0+IDENCi1jb3R4MDQ5IGNvbXBhcmV0b3RhbCAgIDEwICAgMTAgIC0+IDANCi1jb3R4MDUwIGNvbXBhcmV0b3RhbCAgIDEwICAgMjAgIC0+IC0xDQotY290eDA1MSBjb21wYXJldG90YWwgICAyMCAgLTIwICAtPiAxDQotY290eDA1MiBjb21wYXJldG90YWwgICAyMCAgLTEwICAtPiAxDQotY290eDA1MyBjb21wYXJldG90YWwgICAyMCAgIDAwICAtPiAxDQotY290eDA1NSBjb21wYXJldG90YWwgICAyMCAgIDEwICAtPiAxDQotY290eDA1NiBjb21wYXJldG90YWwgICAyMCAgIDIwICAtPiAwDQotDQotY290eDA2MSBjb21wYXJldG90YWwgIC0yLjAgIC0yLjAgIC0+IDANCi1jb3R4MDYyIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTEuMCAgLT4gLTENCi1jb3R4MDYzIGNvbXBhcmV0b3RhbCAgLTIuMCAgIDAuMCAgLT4gLTENCi1jb3R4MDY0IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDEuMCAgLT4gLTENCi1jb3R4MDY1IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDIuMCAgLT4gLTENCi1jb3R4MDY2IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTIuMCAgLT4gMQ0KLWNvdHgwNjcgY29tcGFyZXRvdGFsICAtMS4wICAtMS4wICAtPiAwDQotY290eDA2OCBjb21wYXJldG90YWwgIC0xLjAgICAwLjAgIC0+IC0xDQotY290eDA2OSBjb21wYXJldG90YWwgIC0xLjAgICAxLjAgIC0+IC0xDQotY290eDA3MCBjb21wYXJldG90YWwgIC0xLjAgICAyLjAgIC0+IC0xDQotY290eDA3MSBjb21wYXJldG90YWwgICAwLjAgIC0yLjAgIC0+IDENCi1jb3R4MDcyIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTEuMCAgLT4gMQ0KLWNvdHgwNzMgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wICAtPiAwDQotY290eDA3NCBjb21wYXJldG90YWwgICAwLjAgICAxLjAgIC0+IC0xDQotY290eDA3NSBjb21wYXJldG90YWwgICAwLjAgICAyLjAgIC0+IC0xDQotY290eDA3NiBjb21wYXJldG90YWwgICAxLjAgIC0yLjAgIC0+IDENCi1jb3R4MDc3IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTEuMCAgLT4gMQ0KLWNvdHgwNzggY29tcGFyZXRvdGFsICAgMS4wICAgMC4wICAtPiAxDQotY290eDA3OSBjb21wYXJldG90YWwgICAxLjAgICAxLjAgIC0+IDANCi1jb3R4MDgwIGNvbXBhcmV0b3RhbCAgIDEuMCAgIDIuMCAgLT4gLTENCi1jb3R4MDgxIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTIuMCAgLT4gMQ0KLWNvdHgwODIgY29tcGFyZXRvdGFsICAgMi4wICAtMS4wICAtPiAxDQotY290eDA4MyBjb21wYXJldG90YWwgICAyLjAgICAwLjAgIC0+IDENCi1jb3R4MDg1IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDEuMCAgLT4gMQ0KLWNvdHgwODYgY29tcGFyZXRvdGFsICAgMi4wICAgMi4wICAtPiAwDQotDQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQotbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5OTk5OTk5DQotY290eDA5MCBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+IDANCi1jb3R4MDkxIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgLT4gLTENCi1jb3R4MDkyIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLT4gMQ0KLWNvdHgwOTMgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtPiAwDQotDQotLS0gRXhhbXBsZXMNCi1jb3R4MDk0IGNvbXBhcmV0b3RhbCAgMTIuNzMgIDEyNy45ICAtPiAtMQ0KLWNvdHgwOTUgY29tcGFyZXRvdGFsICAtMTI3ICAgMTIgICAgIC0+IC0xDQotY290eDA5NiBjb21wYXJldG90YWwgIDEyLjMwICAxMi4zICAgLT4gLTENCi1jb3R4MDk3IGNvbXBhcmV0b3RhbCAgMTIuMzAgIDEyLjMwICAtPiAgMA0KLWNvdHgwOTggY29tcGFyZXRvdGFsICAxMi4zICAgMTIuMzAwIC0+ICAxDQotY290eDA5OSBjb21wYXJldG90YWwgIDEyLjMgICBOYU4gICAgLT4gLTENCi0NCi0tLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMNCi0tLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsDQotY290eDEwMCBjb21wYXJldG90YWwgICA3LjAgICAgNy4wICAgIC0+IDANCi1jb3R4MTAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3ICAgICAgLT4gLTENCi1jb3R4MTAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3LjAgICAgLT4gMQ0KLWNvdHgxMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIDcuMCAgICAtPiAxDQotY290eDEwNCBjb21wYXJldG90YWwgICA3MEUtMSAgNy4wICAgIC0+IDANCi1jb3R4MTA1IGNvbXBhcmV0b3RhbCAgIDAuN0UrMSA3ICAgICAgLT4gMA0KLWNvdHgxMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcgICAgICAtPiAtMQ0KLWNvdHgxMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIDdFKzAgICAtPiAtMQ0KLWNvdHgxMDggY29tcGFyZXRvdGFsICAgNy4wICAgIDcwRS0xICAtPiAwDQotY290eDEwOSBjb21wYXJldG90YWwgICA3ICAgICAgMC43RSsxIC0+IDANCi1jb3R4MTEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3MEUtMSAgLT4gMQ0KLQ0KLWNvdHgxMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIDcuMCAgICAtPiAxDQotY290eDEyMSBjb21wYXJldG90YWwgICA4LjAgICAgNyAgICAgIC0+IDENCi1jb3R4MTIyIGNvbXBhcmV0b3RhbCAgIDggICAgICA3LjAgICAgLT4gMQ0KLWNvdHgxMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDcuMCAgICAtPiAxDQotY290eDEyNCBjb21wYXJldG90YWwgICA4MEUtMSAgNy4wICAgIC0+IDENCi1jb3R4MTI1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA3ICAgICAgLT4gMQ0KLWNvdHgxMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIDcgICAgICAtPiAxDQotY290eDEyNyBjb21wYXJldG90YWwgICA4LjAgICAgN0UrMCAgIC0+IDENCi1jb3R4MTI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3MEUtMSAgLT4gMQ0KLWNvdHgxMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuN0UrMSAgLT4gMQ0KLWNvdHgxMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIDcwRS0xICAtPiAxDQotDQotY290eDE0MCBjb21wYXJldG90YWwgICA4LjAgICAgOS4wICAgIC0+IC0xDQotY290eDE0MSBjb21wYXJldG90YWwgICA4LjAgICAgOSAgICAgIC0+IC0xDQotY290eDE0MiBjb21wYXJldG90YWwgICA4ICAgICAgOS4wICAgIC0+IC0xDQotY290eDE0MyBjb21wYXJldG90YWwgICA4RSswICAgOS4wICAgIC0+IC0xDQotY290eDE0NCBjb21wYXJldG90YWwgICA4MEUtMSAgOS4wICAgIC0+IC0xDQotY290eDE0NSBjb21wYXJldG90YWwgICAwLjhFKzEgOSAgICAgIC0+IC0xDQotY290eDE0NiBjb21wYXJldG90YWwgICA4MEUtMSAgOSAgICAgIC0+IC0xDQotY290eDE0NyBjb21wYXJldG90YWwgICA4LjAgICAgOUUrMCAgIC0+IC0xDQotY290eDE0OCBjb21wYXJldG90YWwgICA4LjAgICAgOTBFLTEgIC0+IC0xDQotY290eDE0OSBjb21wYXJldG90YWwgICA4ICAgICAgMC45RSsxIC0+IC0xDQotY290eDE1MCBjb21wYXJldG90YWwgICA4ICAgICAgOTBFLTEgIC0+IC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLg0KLWNvdHgyMDAgY29tcGFyZXRvdGFsICAtNy4wICAgIDcuMCAgICAtPiAtMQ0KLWNvdHgyMDEgY29tcGFyZXRvdGFsICAtNy4wICAgIDcgICAgICAtPiAtMQ0KLWNvdHgyMDIgY29tcGFyZXRvdGFsICAtNyAgICAgIDcuMCAgICAtPiAtMQ0KLWNvdHgyMDMgY29tcGFyZXRvdGFsICAtN0UrMCAgIDcuMCAgICAtPiAtMQ0KLWNvdHgyMDQgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcuMCAgICAtPiAtMQ0KLWNvdHgyMDUgY29tcGFyZXRvdGFsICAtMC43RSsxIDcgICAgICAtPiAtMQ0KLWNvdHgyMDYgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcgICAgICAtPiAtMQ0KLWNvdHgyMDcgY29tcGFyZXRvdGFsICAtNy4wICAgIDdFKzAgICAtPiAtMQ0KLWNvdHgyMDggY29tcGFyZXRvdGFsICAtNy4wICAgIDcwRS0xICAtPiAtMQ0KLWNvdHgyMDkgY29tcGFyZXRvdGFsICAtNyAgICAgIDAuN0UrMSAtPiAtMQ0KLWNvdHgyMTAgY29tcGFyZXRvdGFsICAtNyAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWNvdHgyMjAgY29tcGFyZXRvdGFsICAtOC4wICAgIDcuMCAgICAtPiAtMQ0KLWNvdHgyMjEgY29tcGFyZXRvdGFsICAtOC4wICAgIDcgICAgICAtPiAtMQ0KLWNvdHgyMjIgY29tcGFyZXRvdGFsICAtOCAgICAgIDcuMCAgICAtPiAtMQ0KLWNvdHgyMjMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDcuMCAgICAtPiAtMQ0KLWNvdHgyMjQgY29tcGFyZXRvdGFsICAtODBFLTEgIDcuMCAgICAtPiAtMQ0KLWNvdHgyMjUgY29tcGFyZXRvdGFsICAtMC44RSsxIDcgICAgICAtPiAtMQ0KLWNvdHgyMjYgY29tcGFyZXRvdGFsICAtODBFLTEgIDcgICAgICAtPiAtMQ0KLWNvdHgyMjcgY29tcGFyZXRvdGFsICAtOC4wICAgIDdFKzAgICAtPiAtMQ0KLWNvdHgyMjggY29tcGFyZXRvdGFsICAtOC4wICAgIDcwRS0xICAtPiAtMQ0KLWNvdHgyMjkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuN0UrMSAtPiAtMQ0KLWNvdHgyMzAgY29tcGFyZXRvdGFsICAtOCAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWNvdHgyNDAgY29tcGFyZXRvdGFsICAtOC4wICAgIDkuMCAgICAtPiAtMQ0KLWNvdHgyNDEgY29tcGFyZXRvdGFsICAtOC4wICAgIDkgICAgICAtPiAtMQ0KLWNvdHgyNDIgY29tcGFyZXRvdGFsICAtOCAgICAgIDkuMCAgICAtPiAtMQ0KLWNvdHgyNDMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDkuMCAgICAtPiAtMQ0KLWNvdHgyNDQgY29tcGFyZXRvdGFsICAtODBFLTEgIDkuMCAgICAtPiAtMQ0KLWNvdHgyNDUgY29tcGFyZXRvdGFsICAtMC44RSsxIDkgICAgICAtPiAtMQ0KLWNvdHgyNDYgY29tcGFyZXRvdGFsICAtODBFLTEgIDkgICAgICAtPiAtMQ0KLWNvdHgyNDcgY29tcGFyZXRvdGFsICAtOC4wICAgIDlFKzAgICAtPiAtMQ0KLWNvdHgyNDggY29tcGFyZXRvdGFsICAtOC4wICAgIDkwRS0xICAtPiAtMQ0KLWNvdHgyNDkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuOUUrMSAtPiAtMQ0KLWNvdHgyNTAgY29tcGFyZXRvdGFsICAtOCAgICAgIDkwRS0xICAtPiAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4NCi1jb3R4MzAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNy4wICAgIC0+IDENCi1jb3R4MzAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNyAgICAgIC0+IDENCi1jb3R4MzAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNy4wICAgIC0+IDENCi1jb3R4MzAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICAtNy4wICAgIC0+IDENCi1jb3R4MzA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNy4wICAgIC0+IDENCi1jb3R4MzA1IGNvbXBhcmV0b3RhbCAgIC43RSsxICAtNyAgICAgIC0+IDENCi1jb3R4MzA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNyAgICAgIC0+IDENCi1jb3R4MzA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtN0UrMCAgIC0+IDENCi1jb3R4MzA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNzBFLTEgIC0+IDENCi1jb3R4MzA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAtLjdFKzEgIC0+IDENCi1jb3R4MzEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNzBFLTEgIC0+IDENCi0NCi1jb3R4MzIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNy4wICAgIC0+IDENCi1jb3R4MzIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNyAgICAgIC0+IDENCi1jb3R4MzIyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNy4wICAgIC0+IDENCi1jb3R4MzIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtNy4wICAgIC0+IDENCi1jb3R4MzI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNy4wICAgIC0+IDENCi1jb3R4MzI1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtNyAgICAgIC0+IDENCi1jb3R4MzI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNyAgICAgIC0+IDENCi1jb3R4MzI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtN0UrMCAgIC0+IDENCi1jb3R4MzI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNzBFLTEgIC0+IDENCi1jb3R4MzI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjdFKzEgIC0+IDENCi1jb3R4MzMwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNzBFLTEgIC0+IDENCi0NCi1jb3R4MzQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOS4wICAgIC0+IDENCi1jb3R4MzQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOSAgICAgIC0+IDENCi1jb3R4MzQyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOS4wICAgIC0+IDENCi1jb3R4MzQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtOS4wICAgIC0+IDENCi1jb3R4MzQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOS4wICAgIC0+IDENCi1jb3R4MzQ1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtOSAgICAgIC0+IDENCi1jb3R4MzQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOSAgICAgIC0+IDENCi1jb3R4MzQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOUUrMCAgIC0+IDENCi1jb3R4MzQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOTBFLTEgIC0+IDENCi1jb3R4MzQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjlFKzEgIC0+IDENCi1jb3R4MzUwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOTBFLTEgIC0+IDENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uDQotY290eDQwMCBjb21wYXJldG90YWwgICAtNy4wICAgIC03LjAgICAgLT4gMA0KLWNvdHg0MDEgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNyAgICAgIC0+IDENCi1jb3R4NDAyIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcuMCAgICAtPiAtMQ0KLWNvdHg0MDMgY29tcGFyZXRvdGFsICAgLTdFKzAgICAtNy4wICAgIC0+IC0xDQotY290eDQwNCBjb21wYXJldG90YWwgICAtNzBFLTEgIC03LjAgICAgLT4gMA0KLWNvdHg0MDUgY29tcGFyZXRvdGFsICAgLS43RSsxICAtNyAgICAgIC0+IDANCi1jb3R4NDA2IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcgICAgICAtPiAxDQotY290eDQwNyBjb21wYXJldG90YWwgICAtNy4wICAgIC03RSswICAgLT4gMQ0KLWNvdHg0MDggY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNzBFLTEgIC0+IDANCi1jb3R4NDA5IGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLS43RSsxICAtPiAwDQotY290eDQxMCBjb21wYXJldG90YWwgICAtNyAgICAgIC03MEUtMSAgLT4gLTENCi0NCi1jb3R4NDIwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcuMCAgICAtPiAtMQ0KLWNvdHg0MjEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNyAgICAgIC0+IC0xDQotY290eDQyMiBjb21wYXJldG90YWwgICAtOCAgICAgIC03LjAgICAgLT4gLTENCi1jb3R4NDIzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTcuMCAgICAtPiAtMQ0KLWNvdHg0MjQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNy4wICAgIC0+IC0xDQotY290eDQyNSBjb21wYXJldG90YWwgICAtLjhFKzEgIC03ICAgICAgLT4gLTENCi1jb3R4NDI2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcgICAgICAtPiAtMQ0KLWNvdHg0MjcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtN0UrMCAgIC0+IC0xDQotY290eDQyOCBjb21wYXJldG90YWwgICAtOC4wICAgIC03MEUtMSAgLT4gLTENCi1jb3R4NDI5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS43RSsxICAtPiAtMQ0KLWNvdHg0MzAgY29tcGFyZXRvdGFsICAgLTggICAgICAtNzBFLTEgIC0+IC0xDQotDQotY290eDQ0MCBjb21wYXJldG90YWwgICAtOC4wICAgIC05LjAgICAgLT4gMQ0KLWNvdHg0NDEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOSAgICAgIC0+IDENCi1jb3R4NDQyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkuMCAgICAtPiAxDQotY290eDQ0MyBjb21wYXJldG90YWwgICAtOEUrMCAgIC05LjAgICAgLT4gMQ0KLWNvdHg0NDQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOS4wICAgIC0+IDENCi1jb3R4NDQ1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTkgICAgICAtPiAxDQotY290eDQ0NiBjb21wYXJldG90YWwgICAtODBFLTEgIC05ICAgICAgLT4gMQ0KLWNvdHg0NDcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOUUrMCAgIC0+IDENCi1jb3R4NDQ4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkwRS0xICAtPiAxDQotY290eDQ0OSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uOUUrMSAgLT4gMQ0KLWNvdHg0NTAgY29tcGFyZXRvdGFsICAgLTggICAgICAtOTBFLTEgIC0+IDENCi0NCi0NCi0tLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0NCi1wcmVjaXNpb246IDQwDQotY290eDQ3MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xDQotY290eDQ3MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTENCi1jb3R4NDcyIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xDQotY290eDQ3MyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQotY290eDQ3NCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTENCi1jb3R4NDc1IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQotY290eDQ3NiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xDQotY290eDQ3NyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTENCi1jb3R4NDc4IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xDQotY290eDQ3OSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQotY290eDQ4MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTENCi1jb3R4NDgxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQotY290eDQ4MiBjb21wYXJldG90YWwgMTIzLjQ1NjBFNzg5IDEyMy40NTZFNzg5IC0+IC0xDQotY290eDQ4MyBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWNvdHg0ODQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMDAwRS04OSAtPiAxDQotY290eDQ4NSBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwMDAwMEU3ODkgLT4gMQ0KLWNvdHg0ODYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMEUtODkgLT4gMQ0KLWNvdHg0ODcgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwRTc4OSAtPiAxDQotY290eDQ4OCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMQ0KLWNvdHg0ODkgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMEU3ODkgLT4gMQ0KLWNvdHg0OTAgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAxDQotY290eDQ5MSBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMEU3ODkgLT4gMQ0KLWNvdHg0OTIgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMQ0KLWNvdHg0OTMgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwRTc4OSAtPiAxDQotY290eDQ5NCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMQ0KLWNvdHg0OTUgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMEU3ODkgLT4gMQ0KLWNvdHg0OTYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAxDQotY290eDQ5NyBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NkU3ODkgLT4gMA0KLQ0KLS0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwNCi1wcmVjaXNpb246IDkNCi1jb3R4NTAwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNSAgICAtPiAxDQotY290eDUwMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTQgICAgLT4gMQ0KLWNvdHg1MDIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEzICAgIC0+IDENCi1jb3R4NTAzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMiAgICAtPiAxDQotY290eDUwNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTEgICAgLT4gMQ0KLWNvdHg1MDUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEwICAgIC0+IDENCi1jb3R4NTA2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS05ICAgICAtPiAxDQotY290eDUwNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOCAgICAgLT4gMQ0KLWNvdHg1MDggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTcgICAgIC0+IDENCi1jb3R4NTA5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS02ICAgICAtPiAxDQotY290eDUxMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNSAgICAgLT4gMQ0KLWNvdHg1MTEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTQgICAgIC0+IDENCi1jb3R4NTEyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0zICAgICAtPiAxDQotY290eDUxMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMiAgICAgLT4gMQ0KLWNvdHg1MTQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEgICAgIC0+IDENCi1jb3R4NTE1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0wICAgICAtPiAwDQotY290eDUxNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMSAgICAgLT4gLTENCi1jb3R4NTE3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsyICAgICAtPiAtMQ0KLWNvdHg1MTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzMgICAgIC0+IC0xDQotY290eDUxOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNCAgICAgLT4gLTENCi1jb3R4NTIxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs1ICAgICAtPiAtMQ0KLWNvdHg1MjIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzYgICAgIC0+IC0xDQotY290eDUyMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNyAgICAgLT4gLTENCi1jb3R4NTI0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs4ICAgICAtPiAtMQ0KLWNvdHg1MjUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzkgICAgIC0+IC0xDQotY290eDUyNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTAgICAgLT4gLTENCi1jb3R4NTI3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMSAgICAtPiAtMQ0KLWNvdHg1MjggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEyICAgIC0+IC0xDQotY290eDUyOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTMgICAgLT4gLTENCi1jb3R4NTMwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNCAgICAtPiAtMQ0KLWNvdHg1MzEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xDQotLS0gTFIgc3dhcA0KLWNvdHg1NDAgY29tcGFyZXRvdGFsICAgIDFFLTE1ICAxICAgICAgIC0+IC0xDQotY290eDU0MSBjb21wYXJldG90YWwgICAgMUUtMTQgIDEgICAgICAgLT4gLTENCi1jb3R4NTQyIGNvbXBhcmV0b3RhbCAgICAxRS0xMyAgMSAgICAgICAtPiAtMQ0KLWNvdHg1NDMgY29tcGFyZXRvdGFsICAgIDFFLTEyICAxICAgICAgIC0+IC0xDQotY290eDU0NCBjb21wYXJldG90YWwgICAgMUUtMTEgIDEgICAgICAgLT4gLTENCi1jb3R4NTQ1IGNvbXBhcmV0b3RhbCAgICAxRS0xMCAgMSAgICAgICAtPiAtMQ0KLWNvdHg1NDYgY29tcGFyZXRvdGFsICAgIDFFLTkgICAxICAgICAgIC0+IC0xDQotY290eDU0NyBjb21wYXJldG90YWwgICAgMUUtOCAgIDEgICAgICAgLT4gLTENCi1jb3R4NTQ4IGNvbXBhcmV0b3RhbCAgICAxRS03ICAgMSAgICAgICAtPiAtMQ0KLWNvdHg1NDkgY29tcGFyZXRvdGFsICAgIDFFLTYgICAxICAgICAgIC0+IC0xDQotY290eDU1MCBjb21wYXJldG90YWwgICAgMUUtNSAgIDEgICAgICAgLT4gLTENCi1jb3R4NTUxIGNvbXBhcmV0b3RhbCAgICAxRS00ICAgMSAgICAgICAtPiAtMQ0KLWNvdHg1NTIgY29tcGFyZXRvdGFsICAgIDFFLTMgICAxICAgICAgIC0+IC0xDQotY290eDU1MyBjb21wYXJldG90YWwgICAgMUUtMiAgIDEgICAgICAgLT4gLTENCi1jb3R4NTU0IGNvbXBhcmV0b3RhbCAgICAxRS0xICAgMSAgICAgICAtPiAtMQ0KLWNvdHg1NTUgY29tcGFyZXRvdGFsICAgIDFFLTAgICAxICAgICAgIC0+ICAwDQotY290eDU1NiBjb21wYXJldG90YWwgICAgMUUrMSAgIDEgICAgICAgLT4gIDENCi1jb3R4NTU3IGNvbXBhcmV0b3RhbCAgICAxRSsyICAgMSAgICAgICAtPiAgMQ0KLWNvdHg1NTggY29tcGFyZXRvdGFsICAgIDFFKzMgICAxICAgICAgIC0+ICAxDQotY290eDU1OSBjb21wYXJldG90YWwgICAgMUUrNCAgIDEgICAgICAgLT4gIDENCi1jb3R4NTYxIGNvbXBhcmV0b3RhbCAgICAxRSs1ICAgMSAgICAgICAtPiAgMQ0KLWNvdHg1NjIgY29tcGFyZXRvdGFsICAgIDFFKzYgICAxICAgICAgIC0+ICAxDQotY290eDU2MyBjb21wYXJldG90YWwgICAgMUUrNyAgIDEgICAgICAgLT4gIDENCi1jb3R4NTY0IGNvbXBhcmV0b3RhbCAgICAxRSs4ICAgMSAgICAgICAtPiAgMQ0KLWNvdHg1NjUgY29tcGFyZXRvdGFsICAgIDFFKzkgICAxICAgICAgIC0+ICAxDQotY290eDU2NiBjb21wYXJldG90YWwgICAgMUUrMTAgIDEgICAgICAgLT4gIDENCi1jb3R4NTY3IGNvbXBhcmV0b3RhbCAgICAxRSsxMSAgMSAgICAgICAtPiAgMQ0KLWNvdHg1NjggY29tcGFyZXRvdGFsICAgIDFFKzEyICAxICAgICAgIC0+ICAxDQotY290eDU2OSBjb21wYXJldG90YWwgICAgMUUrMTMgIDEgICAgICAgLT4gIDENCi1jb3R4NTcwIGNvbXBhcmV0b3RhbCAgICAxRSsxNCAgMSAgICAgICAtPiAgMQ0KLWNvdHg1NzEgY29tcGFyZXRvdGFsICAgIDFFKzE1ICAxICAgICAgIC0+ICAxDQotLS0gc2ltaWxhciB3aXRoIGFuIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KLWNvdHg1ODAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQ0KLWNvdHg1ODEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQ0KLWNvdHg1ODIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQ0KLWNvdHg1ODMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQ0KLWNvdHg1ODQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQ0KLWNvdHg1ODUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQ0KLWNvdHg1ODYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQ0KLWNvdHg1ODcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQ0KLWNvdHg1ODggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQ0KLWNvdHg1ODkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTENCi1jb3R4NTkwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xDQotY290eDU5MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQ0KLWNvdHg1OTIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTENCi1jb3R4NTkzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xDQotY290eDU5NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQ0KLWNvdHg1OTUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTENCi1jb3R4NTk2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xDQotY290eDU5NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQ0KLWNvdHg1OTggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTENCi1jb3R4NTk5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xDQotDQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCi1wcmVjaXNpb246IDIwDQotY290eDYwMCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1jb3R4NjAxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWNvdHg2MDIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotY290eDYwMyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1jb3R4NjA0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWNvdHg2MDUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xDQotY290eDYwNiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTENCi1jb3R4NjA3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQ0KLWNvdHg2MDggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xDQotY290eDYwOSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTENCi1jb3R4NjEwIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQ0KLWNvdHg2MTEgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxDQotY290eDYxMiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDENCi1jb3R4NjEzIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQ0KLWNvdHg2MTQgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxDQotY290eDYxNSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDENCi1jb3R4NjE2IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQ0KLWNvdHg2MTcgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxDQotY290eDYxOCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDENCi1jb3R4NjE5IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQ0KLWNvdHg2MjAgY29tcGFyZXRvdGFsICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotY290eDYyMSBjb21wYXJldG90YWwgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1jb3R4NjIyIGNvbXBhcmV0b3RhbCAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWNvdHg2MjMgY29tcGFyZXRvdGFsICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotY290eDYyNCBjb21wYXJldG90YWwgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDENCi1jb3R4NjI1IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQ0KLWNvdHg2MjYgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxDQotY290eDYyNyBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDENCi1jb3R4NjI4IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQ0KLWNvdHg2MjkgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxDQotY290eDYzMCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTENCi1jb3R4NjMxIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQ0KLWNvdHg2MzIgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xDQotY290eDYzMyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTENCi1jb3R4NjM0IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQ0KLWNvdHg2MzUgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xDQotY290eDYzNiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTENCi1jb3R4NjM3IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQ0KLWNvdHg2MzggY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xDQotY290eDYzOSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTENCi1wcmVjaXNpb246IDkNCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWNvdHg2NDAgY29tcGFyZXRvdGFsICAgMCAgICAgMCAgIC0+IDANCi1jb3R4NjQxIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAgICAtPiAxDQotY290eDY0MiBjb21wYXJldG90YWwgICAwICAgIC0wLjAgLT4gMQ0KLWNvdHg2NDMgY29tcGFyZXRvdGFsICAgMCAgICAgMC4wIC0+IDENCi1jb3R4NjQ0IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAgICAtPiAtMQ0KLWNvdHg2NDUgY29tcGFyZXRvdGFsICAtMCAgICAtMCAgIC0+IDANCi1jb3R4NjQ2IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAuMCAtPiAtMQ0KLWNvdHg2NDcgY29tcGFyZXRvdGFsICAtMCAgICAgMC4wIC0+IC0xDQotY290eDY0OCBjb21wYXJldG90YWwgICAwLjAgICAwICAgLT4gLTENCi1jb3R4NjQ5IGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAgICAtPiAxDQotY290eDY1MCBjb21wYXJldG90YWwgICAwLjAgIC0wLjAgLT4gMQ0KLWNvdHg2NTEgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wIC0+IDANCi1jb3R4NjUyIGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAgICAtPiAtMQ0KLWNvdHg2NTMgY29tcGFyZXRvdGFsICAtMC4wICAtMCAgIC0+IDENCi1jb3R4NjU0IGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAuMCAtPiAwDQotY290eDY1NSBjb21wYXJldG90YWwgIC0wLjAgICAwLjAgLT4gLTENCi0NCi1jb3R4NjU2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAuMCAtPiAtMQ0KLWNvdHg2NTcgY29tcGFyZXRvdGFsICAtMEUyICAgMC4wIC0+IC0xDQotY290eDY1OCBjb21wYXJldG90YWwgICAwRTEgICAwLjAgLT4gMQ0KLWNvdHg2NTkgY29tcGFyZXRvdGFsICAgMEUyICAgMC4wIC0+IDENCi1jb3R4NjYwIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAgICAtPiAtMQ0KLWNvdHg2NjEgY29tcGFyZXRvdGFsICAtMEUyICAgMCAgIC0+IC0xDQotY290eDY2MiBjb21wYXJldG90YWwgICAwRTEgICAwICAgLT4gMQ0KLWNvdHg2NjMgY29tcGFyZXRvdGFsICAgMEUyICAgMCAgIC0+IDENCi1jb3R4NjY0IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMSAtPiAwDQotY290eDY2NSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTEgLT4gLTENCi1jb3R4NjY2IGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMSAtPiAxDQotY290eDY2NyBjb21wYXJldG90YWwgICAwRTIgIC0wRTEgLT4gMQ0KLWNvdHg2NjggY29tcGFyZXRvdGFsICAtMEUxICAtMEUyIC0+IDENCi1jb3R4NjY5IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMiAtPiAwDQotY290eDY3MCBjb21wYXJldG90YWwgICAwRTEgIC0wRTIgLT4gMQ0KLWNvdHg2NzEgY29tcGFyZXRvdGFsICAgMEUyICAtMEUyIC0+IDENCi1jb3R4NjcyIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMSAtPiAtMQ0KLWNvdHg2NzMgY29tcGFyZXRvdGFsICAtMEUyICAgMEUxIC0+IC0xDQotY290eDY3NCBjb21wYXJldG90YWwgICAwRTEgICAwRTEgLT4gMA0KLWNvdHg2NzUgY29tcGFyZXRvdGFsICAgMEUyICAgMEUxIC0+IDENCi1jb3R4Njc2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMiAtPiAtMQ0KLWNvdHg2NzcgY29tcGFyZXRvdGFsICAtMEUyICAgMEUyIC0+IC0xDQotY290eDY3OCBjb21wYXJldG90YWwgICAwRTEgICAwRTIgLT4gLTENCi1jb3R4Njc5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMiAtPiAwDQotDQotLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQ0KLXByZWNpc2lvbjogMjANCi1jb3R4NjgwIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyICAgICAgICAgICAtPiAwDQotY290eDY4MSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wICAgICAgICAgLT4gMQ0KLWNvdHg2ODIgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDENCi1jb3R4NjgzIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAxDQotY290eDY4NCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMQ0KLWNvdHg2ODUgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDENCi1jb3R4Njg2IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAxDQotY290eDY4NyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMQ0KLWNvdHg2ODggY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDENCi1jb3R4Njg5IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAxDQotY290eDY5MCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgICAgMTIgLT4gMA0KLWNvdHg2OTEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAgIDEyIC0+IC0xDQotY290eDY5MiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgICAgMTIgLT4gLTENCi1jb3R4NjkzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAtMQ0KLWNvdHg2OTQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IC0xDQotY290eDY5NSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gLTENCi1jb3R4Njk2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAtMQ0KLWNvdHg2OTcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IC0xDQotY290eDY5OCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gLTENCi1jb3R4Njk5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAtMQ0KLQ0KLS0tIGxvbmcgb3BlcmFuZCBjaGVja3MNCi1tYXhleHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1wcmVjaXNpb246IDkNCi1jb3R4NzAxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAgMSAtPiAgMQ0KLWNvdHg3MDIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgIC0+IC0xDQotY290eDcwMyBjb21wYXJldG90YWwgMTIzNDU2NzgwMCAgIDEgLT4gIDENCi1jb3R4NzA0IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAgICAtPiAtMQ0KLWNvdHg3MDUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgICAxIC0+ICAxDQotY290eDcwNiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwICAgLT4gLTENCi1jb3R4NzA3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAgMSAtPiAgMQ0KLWNvdHg3MDggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgIC0+IC0xDQotY290eDcwOSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MDEgIDEgLT4gIDENCi1jb3R4NzEwIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAxICAtPiAtMQ0KLWNvdHg3MTEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgICAxIC0+ICAxDQotY290eDcxMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODk2ICAgLT4gLTENCi1jb3R4NzEzIGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MSAgMSAtPiAtMQ0KLWNvdHg3MTQgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTEgIC0+ICAxDQotY290eDcxNSBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTAxIDEgLT4gLTENCi1jb3R4NzE2IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkwMSAtPiAgMQ0KLWNvdHg3MTcgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODk2ICAxIC0+IC0xDQotY290eDcxOCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5NiAgLT4gIDENCi0NCi1wcmVjaXNpb246IDE1DQotLS0gc2FtZSB3aXRoIHBsZW50eSBvZiBwcmVjaXNpb24NCi1jb3R4NzIxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAxIC0+IDENCi1jb3R4NzIyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAwIC0+IC0xDQotY290eDcyMyBjb21wYXJldG90YWwgMTIzNDU2NzgwMCAgMSAtPiAxDQotY290eDcyNCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwICAtPiAtMQ0KLWNvdHg3MjUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgIDEgLT4gMQ0KLWNvdHg3MjYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgLT4gLTENCi1jb3R4NzI3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAxIC0+IDENCi1jb3R4NzI4IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTEgIC0+IC0xDQotY290eDcyOSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MDEgMSAtPiAxDQotY290eDczMCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwMSAtPiAtMQ0KLWNvdHg3MzEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgIDEgLT4gMQ0KLWNvdHg3MzIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgLT4gLTENCi0NCi0tLSByZXNpZHVlIGNhc2VzDQotcHJlY2lzaW9uOiA1DQotY290eDc0MCBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5OSAgLT4gMQ0KLWNvdHg3NDEgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OSAgIC0+IDENCi1jb3R4NzQyIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OSAgICAtPiAxDQotY290eDc0MyBjb21wYXJldG90YWwgIDEgIDEuMDAwMCAgICAgLT4gMQ0KLWNvdHg3NDQgY29tcGFyZXRvdGFsICAxICAxLjAwMDAxICAgIC0+IC0xDQotY290eDc0NSBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAxICAgLT4gLTENCi1jb3R4NzQ2IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDAxICAtPiAtMQ0KLWNvdHg3NTAgY29tcGFyZXRvdGFsICAwLjk5OTk5OTkgIDEgIC0+IC0xDQotY290eDc1MSBjb21wYXJldG90YWwgIDAuOTk5OTk5ICAgMSAgLT4gLTENCi1jb3R4NzUyIGNvbXBhcmV0b3RhbCAgMC45OTk5OSAgICAxICAtPiAtMQ0KLWNvdHg3NTMgY29tcGFyZXRvdGFsICAxLjAwMDAgICAgIDEgIC0+IC0xDQotY290eDc1NCBjb21wYXJldG90YWwgIDEuMDAwMDEgICAgMSAgLT4gMQ0KLWNvdHg3NTUgY29tcGFyZXRvdGFsICAxLjAwMDAwMSAgIDEgIC0+IDENCi1jb3R4NzU2IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDAxICAxICAtPiAxDQotDQotLS0gYSBzZWxlY3Rpb24gb2YgbG9uZ2llcw0KLWNvdHg3NjAgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYyOS44MzQ3MDg1MDI1ODA4NzU2NTYwMzU3OTQwIC0+IC0xDQotY290eDc2MSBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMA0KLWNvdHg3NjIgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IC0xDQotY290eDc2MyBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KLS0tIHByZWNpc2lvbnMgYWJvdmUgb3IgYmVsb3cgdGhlIGRpZmZlcmVuY2Ugc2hvdWxkIGhhdmUgbm8gZWZmZWN0DQotcHJlY2lzaW9uOiAgIDExDQotY290eDc2NCBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KLXByZWNpc2lvbjogICAxMA0KLWNvdHg3NjUgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCi1wcmVjaXNpb246ICAgIDkNCi1jb3R4NzY2IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQotcHJlY2lzaW9uOiAgICA4DQotY290eDc2NyBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KLXByZWNpc2lvbjogICAgNw0KLWNvdHg3NjggY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCi1wcmVjaXNpb246ICAgIDYNCi1jb3R4NzY5IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQotcHJlY2lzaW9uOiAgICA1DQotY290eDc3MCBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KLXByZWNpc2lvbjogICAgNA0KLWNvdHg3NzEgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCi1wcmVjaXNpb246ICAgIDMNCi1jb3R4NzcyIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQotcHJlY2lzaW9uOiAgICAyDQotY290eDc3MyBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KLXByZWNpc2lvbjogICAgMQ0KLWNvdHg3NzQgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCi0NCi0tLSBTcGVjaWFscw0KLXByZWNpc2lvbjogICA5DQotY290eDc4MCBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxDQotY290eDc4MSBjb21wYXJldG90YWwgIEluZiAgLTEwMDAgIC0+ICAxDQotY290eDc4MiBjb21wYXJldG90YWwgIEluZiAgLTEgICAgIC0+ICAxDQotY290eDc4MyBjb21wYXJldG90YWwgIEluZiAgLTAgICAgIC0+ICAxDQotY290eDc4NCBjb21wYXJldG90YWwgIEluZiAgIDAgICAgIC0+ICAxDQotY290eDc4NSBjb21wYXJldG90YWwgIEluZiAgIDEgICAgIC0+ICAxDQotY290eDc4NiBjb21wYXJldG90YWwgIEluZiAgIDEwMDAgIC0+ICAxDQotY290eDc4NyBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwDQotY290eDc4OCBjb21wYXJldG90YWwgLTEwMDAgIEluZiAgIC0+IC0xDQotY290eDc4OSBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xDQotY290eDc5MCBjb21wYXJldG90YWwgLTEgICAgIEluZiAgIC0+IC0xDQotY290eDc5MSBjb21wYXJldG90YWwgLTAgICAgIEluZiAgIC0+IC0xDQotY290eDc5MiBjb21wYXJldG90YWwgIDAgICAgIEluZiAgIC0+IC0xDQotY290eDc5MyBjb21wYXJldG90YWwgIDEgICAgIEluZiAgIC0+IC0xDQotY290eDc5NCBjb21wYXJldG90YWwgIDEwMDAgIEluZiAgIC0+IC0xDQotY290eDc5NSBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwDQotDQotY290eDgwMCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwDQotY290eDgwMSBjb21wYXJldG90YWwgLUluZiAgLTEwMDAgIC0+IC0xDQotY290eDgwMiBjb21wYXJldG90YWwgLUluZiAgLTEgICAgIC0+IC0xDQotY290eDgwMyBjb21wYXJldG90YWwgLUluZiAgLTAgICAgIC0+IC0xDQotY290eDgwNCBjb21wYXJldG90YWwgLUluZiAgIDAgICAgIC0+IC0xDQotY290eDgwNSBjb21wYXJldG90YWwgLUluZiAgIDEgICAgIC0+IC0xDQotY290eDgwNiBjb21wYXJldG90YWwgLUluZiAgIDEwMDAgIC0+IC0xDQotY290eDgwNyBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xDQotY290eDgwOCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwDQotY290eDgwOSBjb21wYXJldG90YWwgLTEwMDAgLUluZiAgIC0+ICAxDQotY290eDgxMCBjb21wYXJldG90YWwgLTEgICAgLUluZiAgIC0+ICAxDQotY290eDgxMSBjb21wYXJldG90YWwgLTAgICAgLUluZiAgIC0+ICAxDQotY290eDgxMiBjb21wYXJldG90YWwgIDAgICAgLUluZiAgIC0+ICAxDQotY290eDgxMyBjb21wYXJldG90YWwgIDEgICAgLUluZiAgIC0+ICAxDQotY290eDgxNCBjb21wYXJldG90YWwgIDEwMDAgLUluZiAgIC0+ICAxDQotY290eDgxNSBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxDQotDQotY290eDgyMSBjb21wYXJldG90YWwgIE5hTiAtSW5mICAgIC0+ICAxDQotY290eDgyMiBjb21wYXJldG90YWwgIE5hTiAtMTAwMCAgIC0+ICAxDQotY290eDgyMyBjb21wYXJldG90YWwgIE5hTiAtMSAgICAgIC0+ICAxDQotY290eDgyNCBjb21wYXJldG90YWwgIE5hTiAtMCAgICAgIC0+ICAxDQotY290eDgyNSBjb21wYXJldG90YWwgIE5hTiAgMCAgICAgIC0+ICAxDQotY290eDgyNiBjb21wYXJldG90YWwgIE5hTiAgMSAgICAgIC0+ICAxDQotY290eDgyNyBjb21wYXJldG90YWwgIE5hTiAgMTAwMCAgIC0+ICAxDQotY290eDgyOCBjb21wYXJldG90YWwgIE5hTiAgSW5mICAgIC0+ICAxDQotY290eDgyOSBjb21wYXJldG90YWwgIE5hTiAgTmFOICAgIC0+ICAwDQotY290eDgzMCBjb21wYXJldG90YWwgLUluZiAgTmFOICAgIC0+ICAtMQ0KLWNvdHg4MzEgY29tcGFyZXRvdGFsIC0xMDAwIE5hTiAgICAtPiAgLTENCi1jb3R4ODMyIGNvbXBhcmV0b3RhbCAtMSAgICBOYU4gICAgLT4gIC0xDQotY290eDgzMyBjb21wYXJldG90YWwgLTAgICAgTmFOICAgIC0+ICAtMQ0KLWNvdHg4MzQgY29tcGFyZXRvdGFsICAwICAgIE5hTiAgICAtPiAgLTENCi1jb3R4ODM1IGNvbXBhcmV0b3RhbCAgMSAgICBOYU4gICAgLT4gIC0xDQotY290eDgzNiBjb21wYXJldG90YWwgIDEwMDAgTmFOICAgIC0+ICAtMQ0KLWNvdHg4MzcgY29tcGFyZXRvdGFsICBJbmYgIE5hTiAgICAtPiAgLTENCi1jb3R4ODM4IGNvbXBhcmV0b3RhbCAtTmFOIC1OYU4gICAgLT4gIDANCi1jb3R4ODM5IGNvbXBhcmV0b3RhbCArTmFOIC1OYU4gICAgLT4gIDENCi1jb3R4ODQwIGNvbXBhcmV0b3RhbCAtTmFOICtOYU4gICAgLT4gIC0xDQotDQotY290eDg0MSBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gIC0+ICAxDQotY290eDg0MiBjb21wYXJldG90YWwgIHNOYU4gLU5hTiAgIC0+ICAxDQotY290eDg0MyBjb21wYXJldG90YWwgIHNOYU4gLUluZiAgIC0+ICAxDQotY290eDg0NCBjb21wYXJldG90YWwgIHNOYU4gLTEwMDAgIC0+ICAxDQotY290eDg0NSBjb21wYXJldG90YWwgIHNOYU4gLTEgICAgIC0+ICAxDQotY290eDg0NiBjb21wYXJldG90YWwgIHNOYU4gLTAgICAgIC0+ICAxDQotY290eDg0NyBjb21wYXJldG90YWwgIHNOYU4gIDAgICAgIC0+ICAxDQotY290eDg0OCBjb21wYXJldG90YWwgIHNOYU4gIDEgICAgIC0+ICAxDQotY290eDg0OSBjb21wYXJldG90YWwgIHNOYU4gIDEwMDAgIC0+ICAxDQotY290eDg1MCBjb21wYXJldG90YWwgIHNOYU4gIE5hTiAgIC0+ICAtMQ0KLWNvdHg4NTEgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMA0KLQ0KLWNvdHg4NTIgY29tcGFyZXRvdGFsIC1zTmFOIHNOYU4gICAtPiAgLTENCi1jb3R4ODUzIGNvbXBhcmV0b3RhbCAtTmFOICBzTmFOICAgLT4gIC0xDQotY290eDg1NCBjb21wYXJldG90YWwgLUluZiAgc05hTiAgIC0+ICAtMQ0KLWNvdHg4NTUgY29tcGFyZXRvdGFsIC0xMDAwIHNOYU4gICAtPiAgLTENCi1jb3R4ODU2IGNvbXBhcmV0b3RhbCAtMSAgICBzTmFOICAgLT4gIC0xDQotY290eDg1NyBjb21wYXJldG90YWwgLTAgICAgc05hTiAgIC0+ICAtMQ0KLWNvdHg4NTggY29tcGFyZXRvdGFsICAwICAgIHNOYU4gICAtPiAgLTENCi1jb3R4ODU5IGNvbXBhcmV0b3RhbCAgMSAgICBzTmFOICAgLT4gIC0xDQotY290eDg2MCBjb21wYXJldG90YWwgIDEwMDAgc05hTiAgIC0+ICAtMQ0KLWNvdHg4NjEgY29tcGFyZXRvdGFsICBJbmYgIHNOYU4gICAtPiAgLTENCi1jb3R4ODYyIGNvbXBhcmV0b3RhbCAgTmFOICBzTmFOICAgLT4gIDENCi1jb3R4ODYzIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDANCi0NCi1jb3R4ODcxIGNvbXBhcmV0b3RhbCAgLXNOYU4gLXNOYU4gIC0+ICAwDQotY290eDg3MiBjb21wYXJldG90YWwgIC1zTmFOIC1OYU4gICAtPiAgMQ0KLWNvdHg4NzMgY29tcGFyZXRvdGFsICAtc05hTiAtSW5mICAgLT4gIC0xDQotY290eDg3NCBjb21wYXJldG90YWwgIC1zTmFOIC0xMDAwICAtPiAgLTENCi1jb3R4ODc1IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEgICAgIC0+ICAtMQ0KLWNvdHg4NzYgY29tcGFyZXRvdGFsICAtc05hTiAtMCAgICAgLT4gIC0xDQotY290eDg3NyBjb21wYXJldG90YWwgIC1zTmFOICAwICAgICAtPiAgLTENCi1jb3R4ODc4IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEgICAgIC0+ICAtMQ0KLWNvdHg4NzkgY29tcGFyZXRvdGFsICAtc05hTiAgMTAwMCAgLT4gIC0xDQotY290eDg4MCBjb21wYXJldG90YWwgIC1zTmFOICBOYU4gICAtPiAgLTENCi1jb3R4ODgxIGNvbXBhcmV0b3RhbCAgLXNOYU4gc05hTiAgIC0+ICAtMQ0KLQ0KLWNvdHg4ODIgY29tcGFyZXRvdGFsIC1zTmFOIC1zTmFOICAgLT4gIDANCi1jb3R4ODgzIGNvbXBhcmV0b3RhbCAtTmFOICAtc05hTiAgIC0+ICAtMQ0KLWNvdHg4ODQgY29tcGFyZXRvdGFsIC1JbmYgIC1zTmFOICAgLT4gIDENCi1jb3R4ODg1IGNvbXBhcmV0b3RhbCAtMTAwMCAtc05hTiAgIC0+ICAxDQotY290eDg4NiBjb21wYXJldG90YWwgLTEgICAgLXNOYU4gICAtPiAgMQ0KLWNvdHg4ODcgY29tcGFyZXRvdGFsIC0wICAgIC1zTmFOICAgLT4gIDENCi1jb3R4ODg4IGNvbXBhcmV0b3RhbCAgMCAgICAtc05hTiAgIC0+ICAxDQotY290eDg4OSBjb21wYXJldG90YWwgIDEgICAgLXNOYU4gICAtPiAgMQ0KLWNvdHg4OTAgY29tcGFyZXRvdGFsICAxMDAwIC1zTmFOICAgLT4gIDENCi1jb3R4ODkxIGNvbXBhcmV0b3RhbCAgSW5mICAtc05hTiAgIC0+ICAxDQotY290eDg5MiBjb21wYXJldG90YWwgIE5hTiAgLXNOYU4gICAtPiAgMQ0KLWNvdHg4OTMgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAgLT4gIDENCi0NCi0tLSBOYU5zIHdpdGggcGF5bG9hZA0KLWNvdHg5NjAgY29tcGFyZXRvdGFsICBOYU45IC1JbmYgICAtPiAgMQ0KLWNvdHg5NjEgY29tcGFyZXRvdGFsICBOYU44ICA5OTkgICAtPiAgMQ0KLWNvdHg5NjIgY29tcGFyZXRvdGFsICBOYU43NyBJbmYgICAtPiAgMQ0KLWNvdHg5NjMgY29tcGFyZXRvdGFsIC1OYU42NyBOYU41ICAtPiAgLTENCi1jb3R4OTY0IGNvbXBhcmV0b3RhbCAtSW5mICAtTmFONCAgLT4gIDENCi1jb3R4OTY1IGNvbXBhcmV0b3RhbCAtOTk5ICAtTmFOMzMgLT4gIDENCi1jb3R4OTY2IGNvbXBhcmV0b3RhbCAgSW5mICAgTmFOMiAgLT4gIC0xDQotDQotY290eDk3MCBjb21wYXJldG90YWwgLU5hTjQxIC1OYU40MiAtPiAxDQotY290eDk3MSBjb21wYXJldG90YWwgK05hTjQxIC1OYU40MiAtPiAxDQotY290eDk3MiBjb21wYXJldG90YWwgLU5hTjQxICtOYU40MiAtPiAtMQ0KLWNvdHg5NzMgY29tcGFyZXRvdGFsICtOYU40MSArTmFONDIgLT4gLTENCi1jb3R4OTc0IGNvbXBhcmV0b3RhbCAtTmFONDIgLU5hTjAxIC0+IC0xDQotY290eDk3NSBjb21wYXJldG90YWwgK05hTjQyIC1OYU4wMSAtPiAgMQ0KLWNvdHg5NzYgY29tcGFyZXRvdGFsIC1OYU40MiArTmFOMDEgLT4gLTENCi1jb3R4OTc3IGNvbXBhcmV0b3RhbCArTmFONDIgK05hTjAxIC0+ICAxDQotDQotY290eDk4MCBjb21wYXJldG90YWwgLXNOYU43NzEgLXNOYU43NzIgLT4gMQ0KLWNvdHg5ODEgY29tcGFyZXRvdGFsICtzTmFONzcxIC1zTmFONzcyIC0+IDENCi1jb3R4OTgyIGNvbXBhcmV0b3RhbCAtc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWNvdHg5ODMgY29tcGFyZXRvdGFsICtzTmFONzcxICtzTmFONzcyIC0+IC0xDQotY290eDk4NCBjb21wYXJldG90YWwgLXNOYU43NzIgLXNOYU43NzEgLT4gLTENCi1jb3R4OTg1IGNvbXBhcmV0b3RhbCArc05hTjc3MiAtc05hTjc3MSAtPiAgMQ0KLWNvdHg5ODYgY29tcGFyZXRvdGFsIC1zTmFONzcyICtzTmFONzcxIC0+IC0xDQotY290eDk4NyBjb21wYXJldG90YWwgK3NOYU43NzIgK3NOYU43NzEgLT4gIDENCi0NCi1jb3R4OTkxIGNvbXBhcmV0b3RhbCAtc05hTjk5IC1JbmYgICAgLT4gLTENCi1jb3R4OTkyIGNvbXBhcmV0b3RhbCAgc05hTjk4IC0xMSAgICAgLT4gIDENCi1jb3R4OTkzIGNvbXBhcmV0b3RhbCAgc05hTjk3ICBOYU4gICAgLT4gLTENCi1jb3R4OTk0IGNvbXBhcmV0b3RhbCAgc05hTjE2IHNOYU45NCAgLT4gLTENCi1jb3R4OTk1IGNvbXBhcmV0b3RhbCAgTmFOODUgIHNOYU44MyAgLT4gIDENCi1jb3R4OTk2IGNvbXBhcmV0b3RhbCAtSW5mICAgIHNOYU45MiAgLT4gLTENCi1jb3R4OTk3IGNvbXBhcmV0b3RhbCAgMDg4ICAgIHNOYU44MSAgLT4gLTENCi1jb3R4OTk4IGNvbXBhcmV0b3RhbCAgSW5mICAgIHNOYU45MCAgLT4gLTENCi1jb3R4OTk5IGNvbXBhcmV0b3RhbCAgTmFOICAgLXNOYU44OSAgLT4gIDENCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIHN1Ym5vcm1hbCByZXN1bHRzIG5vdyBhbGxvd2VkDQotbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5OTk5OTk5DQotY290eDEwODAgY29tcGFyZXRvdGFsICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAtPiAtMQ0KLWNvdHgxMDgxIGNvbXBhcmV0b3RhbCA5RSs5OTk5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDENCi1jb3R4MTA4MiBjb21wYXJldG90YWwgKzAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAxDQotY290eDEwODMgY29tcGFyZXRvdGFsIDlFLTk5OTk5OTk5OSArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQ0KLWNvdHgxMDg1IGNvbXBhcmV0b3RhbCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTENCi1jb3R4MTA4NiBjb21wYXJldG90YWwgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQotY290eDEwODcgY29tcGFyZXRvdGFsIC0wLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAtMQ0KLWNvdHgxMDg4IGNvbXBhcmV0b3RhbCA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDENCi0NCi1jb3R4MTA4OSBjb21wYXJldG90YWwgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMSAgIC0+IC0xDQotY290eDEwOTAgY29tcGFyZXRvdGFsIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDAgICAtPiAtMQ0KLWNvdHgxMDkxIGNvbXBhcmV0b3RhbCAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAwICAgLT4gLTENCi1jb3R4MTA5MiBjb21wYXJldG90YWwgOWUtOTk5OTk5OTk4IDAuMDEgICAgICAgICAgIC0+IC0xDQotY290eDEwOTMgY29tcGFyZXRvdGFsIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAtPiAtMQ0KLWNvdHgxMDk0IGNvbXBhcmV0b3RhbCAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgLT4gIDENCi1jb3R4MTA5NSBjb21wYXJldG90YWwgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDEgICAgIC0+ICAxDQotY290eDEwOTYgY29tcGFyZXRvdGFsIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwICAgICAtPiAgMQ0KLWNvdHgxMDk3IGNvbXBhcmV0b3RhbCAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAgICAgLT4gIDENCi1jb3R4MTA5OCBjb21wYXJldG90YWwgOWU5OTk5OTk5OTggMTAwICAgICAgICAgICAgIC0+ICAxDQotY290eDEwOTkgY29tcGFyZXRvdGFsIDllOTk5OTk5OTk4IDEwICAgICAgICAgICAgICAtPiAgMQ0KLWNvdHgxMTAwIGNvbXBhcmV0b3RhbCAxMDAgIDllOTk5OTk5OTk4ICAgICAgICAgICAgLT4gLTENCi0tLSBzaWducw0KLWNvdHgxMTAxIGNvbXBhcmV0b3RhbCAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDENCi1jb3R4MTEwMiBjb21wYXJldG90YWwgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+ICAxDQotY290eDExMDMgY29tcGFyZXRvdGFsIC0xZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAtMQ0KLWNvdHgxMTA0IGNvbXBhcmV0b3RhbCAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTENCi1jb3R4MTEwNSBjb21wYXJldG90YWwgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+IC0xDQotY290eDExMDYgY29tcGFyZXRvdGFsICAxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAgMQ0KLWNvdHgxMTA3IGNvbXBhcmV0b3RhbCAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gLTENCi1jb3R4MTEwOCBjb21wYXJldG90YWwgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+ICAxDQotDQotLS0gc3ByZWFkIHplcm9zDQotY290eDExMTAgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwICAgICAgIC0+IC0xDQotY290eDExMTEgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wICAgICAgIC0+ICAxDQotY290eDExMTIgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwICAgICAgIC0+IC0xDQotY290eDExMTMgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wICAgICAgIC0+ICAxDQotY290eDExMTQgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwRSszODQgIC0+IC0xDQotY290eDExMTUgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wRSszODQgIC0+ICAxDQotY290eDExMTYgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwRSszODQgIC0+IC0xDQotY290eDExMTcgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wRSszODQgIC0+ICAxDQotY290eDExMTggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRSszODQgIC0+IC0xDQotY290eDExMTkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRSszODQgIC0+ICAxDQotY290eDExMjAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRSszODQgIC0+IC0xDQotY290eDExMjEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRSszODQgIC0+ICAxDQotDQotY290eDExMzAgY29tcGFyZXRvdGFsICAgMEUrMzg0ICAwICAgICAgIC0+ICAxDQotY290eDExMzEgY29tcGFyZXRvdGFsICAgMEUrMzg0IC0wICAgICAgIC0+ICAxDQotY290eDExMzIgY29tcGFyZXRvdGFsICAtMEUrMzg0ICAwICAgICAgIC0+IC0xDQotY290eDExMzMgY29tcGFyZXRvdGFsICAtMEUrMzg0IC0wICAgICAgIC0+IC0xDQotY290eDExMzQgY29tcGFyZXRvdGFsICAgMEUrMzg0ICAwRS0zODMgIC0+ICAxDQotY290eDExMzUgY29tcGFyZXRvdGFsICAgMEUrMzg0IC0wRS0zODMgIC0+ICAxDQotY290eDExMzYgY29tcGFyZXRvdGFsICAtMEUrMzg0ICAwRS0zODMgIC0+IC0xDQotY290eDExMzcgY29tcGFyZXRvdGFsICAtMEUrMzg0IC0wRS0zODMgIC0+IC0xDQotY290eDExMzggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRS0zODMgIC0+ICAxDQotY290eDExMzkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRS0zODMgIC0+ICAxDQotY290eDExNDAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRS0zODMgIC0+IC0xDQotY290eDExNDEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRS0zODMgIC0+IC0xDQotDQotLS0gTnVsbCB0ZXN0cw0KLWNvdHg5OTkwIGNvbXBhcmV0b3RhbCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1jb3R4OTk5MSBjb21wYXJldG90YWwgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb21wYXJldG90YWwuZGVjVGVzdCAtLSBkZWNpbWFsIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmcgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocworLS0gdGhhbiBjb21wYXJlLgorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcworY290eDAwMSBjb21wYXJldG90YWwgIC0yICAtMiAgLT4gMAorY290eDAwMiBjb21wYXJldG90YWwgIC0yICAtMSAgLT4gLTEKK2NvdHgwMDMgY29tcGFyZXRvdGFsICAtMiAgIDAgIC0+IC0xCitjb3R4MDA0IGNvbXBhcmV0b3RhbCAgLTIgICAxICAtPiAtMQorY290eDAwNSBjb21wYXJldG90YWwgIC0yICAgMiAgLT4gLTEKK2NvdHgwMDYgY29tcGFyZXRvdGFsICAtMSAgLTIgIC0+IDEKK2NvdHgwMDcgY29tcGFyZXRvdGFsICAtMSAgLTEgIC0+IDAKK2NvdHgwMDggY29tcGFyZXRvdGFsICAtMSAgIDAgIC0+IC0xCitjb3R4MDA5IGNvbXBhcmV0b3RhbCAgLTEgICAxICAtPiAtMQorY290eDAxMCBjb21wYXJldG90YWwgIC0xICAgMiAgLT4gLTEKK2NvdHgwMTEgY29tcGFyZXRvdGFsICAgMCAgLTIgIC0+IDEKK2NvdHgwMTIgY29tcGFyZXRvdGFsICAgMCAgLTEgIC0+IDEKK2NvdHgwMTMgY29tcGFyZXRvdGFsICAgMCAgIDAgIC0+IDAKK2NvdHgwMTQgY29tcGFyZXRvdGFsICAgMCAgIDEgIC0+IC0xCitjb3R4MDE1IGNvbXBhcmV0b3RhbCAgIDAgICAyICAtPiAtMQorY290eDAxNiBjb21wYXJldG90YWwgICAxICAtMiAgLT4gMQorY290eDAxNyBjb21wYXJldG90YWwgICAxICAtMSAgLT4gMQorY290eDAxOCBjb21wYXJldG90YWwgICAxICAgMCAgLT4gMQorY290eDAxOSBjb21wYXJldG90YWwgICAxICAgMSAgLT4gMAorY290eDAyMCBjb21wYXJldG90YWwgICAxICAgMiAgLT4gLTEKK2NvdHgwMjEgY29tcGFyZXRvdGFsICAgMiAgLTIgIC0+IDEKK2NvdHgwMjIgY29tcGFyZXRvdGFsICAgMiAgLTEgIC0+IDEKK2NvdHgwMjMgY29tcGFyZXRvdGFsICAgMiAgIDAgIC0+IDEKK2NvdHgwMjUgY29tcGFyZXRvdGFsICAgMiAgIDEgIC0+IDEKK2NvdHgwMjYgY29tcGFyZXRvdGFsICAgMiAgIDIgIC0+IDAKKworY290eDAzMSBjb21wYXJldG90YWwgIC0yMCAgLTIwICAtPiAwCitjb3R4MDMyIGNvbXBhcmV0b3RhbCAgLTIwICAtMTAgIC0+IC0xCitjb3R4MDMzIGNvbXBhcmV0b3RhbCAgLTIwICAgMDAgIC0+IC0xCitjb3R4MDM0IGNvbXBhcmV0b3RhbCAgLTIwICAgMTAgIC0+IC0xCitjb3R4MDM1IGNvbXBhcmV0b3RhbCAgLTIwICAgMjAgIC0+IC0xCitjb3R4MDM2IGNvbXBhcmV0b3RhbCAgLTEwICAtMjAgIC0+IDEKK2NvdHgwMzcgY29tcGFyZXRvdGFsICAtMTAgIC0xMCAgLT4gMAorY290eDAzOCBjb21wYXJldG90YWwgIC0xMCAgIDAwICAtPiAtMQorY290eDAzOSBjb21wYXJldG90YWwgIC0xMCAgIDEwICAtPiAtMQorY290eDA0MCBjb21wYXJldG90YWwgIC0xMCAgIDIwICAtPiAtMQorY290eDA0MSBjb21wYXJldG90YWwgICAwMCAgLTIwICAtPiAxCitjb3R4MDQyIGNvbXBhcmV0b3RhbCAgIDAwICAtMTAgIC0+IDEKK2NvdHgwNDMgY29tcGFyZXRvdGFsICAgMDAgICAwMCAgLT4gMAorY290eDA0NCBjb21wYXJldG90YWwgICAwMCAgIDEwICAtPiAtMQorY290eDA0NSBjb21wYXJldG90YWwgICAwMCAgIDIwICAtPiAtMQorY290eDA0NiBjb21wYXJldG90YWwgICAxMCAgLTIwICAtPiAxCitjb3R4MDQ3IGNvbXBhcmV0b3RhbCAgIDEwICAtMTAgIC0+IDEKK2NvdHgwNDggY29tcGFyZXRvdGFsICAgMTAgICAwMCAgLT4gMQorY290eDA0OSBjb21wYXJldG90YWwgICAxMCAgIDEwICAtPiAwCitjb3R4MDUwIGNvbXBhcmV0b3RhbCAgIDEwICAgMjAgIC0+IC0xCitjb3R4MDUxIGNvbXBhcmV0b3RhbCAgIDIwICAtMjAgIC0+IDEKK2NvdHgwNTIgY29tcGFyZXRvdGFsICAgMjAgIC0xMCAgLT4gMQorY290eDA1MyBjb21wYXJldG90YWwgICAyMCAgIDAwICAtPiAxCitjb3R4MDU1IGNvbXBhcmV0b3RhbCAgIDIwICAgMTAgIC0+IDEKK2NvdHgwNTYgY29tcGFyZXRvdGFsICAgMjAgICAyMCAgLT4gMAorCitjb3R4MDYxIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTIuMCAgLT4gMAorY290eDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xCitjb3R4MDYzIGNvbXBhcmV0b3RhbCAgLTIuMCAgIDAuMCAgLT4gLTEKK2NvdHgwNjQgY29tcGFyZXRvdGFsICAtMi4wICAgMS4wICAtPiAtMQorY290eDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xCitjb3R4MDY2IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTIuMCAgLT4gMQorY290eDA2NyBjb21wYXJldG90YWwgIC0xLjAgIC0xLjAgIC0+IDAKK2NvdHgwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQorY290eDA2OSBjb21wYXJldG90YWwgIC0xLjAgICAxLjAgIC0+IC0xCitjb3R4MDcwIGNvbXBhcmV0b3RhbCAgLTEuMCAgIDIuMCAgLT4gLTEKK2NvdHgwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxCitjb3R4MDcyIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTEuMCAgLT4gMQorY290eDA3MyBjb21wYXJldG90YWwgICAwLjAgICAwLjAgIC0+IDAKK2NvdHgwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQorY290eDA3NSBjb21wYXJldG90YWwgICAwLjAgICAyLjAgIC0+IC0xCitjb3R4MDc2IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTIuMCAgLT4gMQorY290eDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDEKK2NvdHgwNzggY29tcGFyZXRvdGFsICAgMS4wICAgMC4wICAtPiAxCitjb3R4MDc5IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDEuMCAgLT4gMAorY290eDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xCitjb3R4MDgxIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTIuMCAgLT4gMQorY290eDA4MiBjb21wYXJldG90YWwgICAyLjAgIC0xLjAgIC0+IDEKK2NvdHgwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxCitjb3R4MDg1IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDEuMCAgLT4gMQorY290eDA4NiBjb21wYXJldG90YWwgICAyLjAgICAyLjAgIC0+IDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorY290eDA5MCBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+IDAKK2NvdHgwOTEgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAtMQorY290eDA5MiBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC0+IDEKK2NvdHgwOTMgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtPiAwCisKKy0tIEV4YW1wbGVzCitjb3R4MDk0IGNvbXBhcmV0b3RhbCAgMTIuNzMgIDEyNy45ICAtPiAtMQorY290eDA5NSBjb21wYXJldG90YWwgIC0xMjcgICAxMiAgICAgLT4gLTEKK2NvdHgwOTYgY29tcGFyZXRvdGFsICAxMi4zMCAgMTIuMyAgIC0+IC0xCitjb3R4MDk3IGNvbXBhcmV0b3RhbCAgMTIuMzAgIDEyLjMwICAtPiAgMAorY290eDA5OCBjb21wYXJldG90YWwgIDEyLjMgICAxMi4zMDAgLT4gIDEKK2NvdHgwOTkgY29tcGFyZXRvdGFsICAxMi4zICAgTmFOICAgIC0+IC0xCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbAorY290eDEwMCBjb21wYXJldG90YWwgICA3LjAgICAgNy4wICAgIC0+IDAKK2NvdHgxMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIDcgICAgICAtPiAtMQorY290eDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDEKK2NvdHgxMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIDcuMCAgICAtPiAxCitjb3R4MTA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3LjAgICAgLT4gMAorY290eDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDAKK2NvdHgxMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcgICAgICAtPiAtMQorY290eDEwNyBjb21wYXJldG90YWwgICA3LjAgICAgN0UrMCAgIC0+IC0xCitjb3R4MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMAorY290eDEwOSBjb21wYXJldG90YWwgICA3ICAgICAgMC43RSsxIC0+IDAKK2NvdHgxMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIDcwRS0xICAtPiAxCisKK2NvdHgxMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIDcuMCAgICAtPiAxCitjb3R4MTIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3ICAgICAgLT4gMQorY290eDEyMiBjb21wYXJldG90YWwgICA4ICAgICAgNy4wICAgIC0+IDEKK2NvdHgxMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDcuMCAgICAtPiAxCitjb3R4MTI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3LjAgICAgLT4gMQorY290eDEyNSBjb21wYXJldG90YWwgICAwLjhFKzEgNyAgICAgIC0+IDEKK2NvdHgxMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIDcgICAgICAtPiAxCitjb3R4MTI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3RSswICAgLT4gMQorY290eDEyOCBjb21wYXJldG90YWwgICA4LjAgICAgNzBFLTEgIC0+IDEKK2NvdHgxMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuN0UrMSAgLT4gMQorY290eDEzMCBjb21wYXJldG90YWwgICA4ICAgICAgNzBFLTEgIC0+IDEKKworY290eDE0MCBjb21wYXJldG90YWwgICA4LjAgICAgOS4wICAgIC0+IC0xCitjb3R4MTQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5ICAgICAgLT4gLTEKK2NvdHgxNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIDkuMCAgICAtPiAtMQorY290eDE0MyBjb21wYXJldG90YWwgICA4RSswICAgOS4wICAgIC0+IC0xCitjb3R4MTQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2NvdHgxNDUgY29tcGFyZXRvdGFsICAgMC44RSsxIDkgICAgICAtPiAtMQorY290eDE0NiBjb21wYXJldG90YWwgICA4MEUtMSAgOSAgICAgIC0+IC0xCitjb3R4MTQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5RSswICAgLT4gLTEKK2NvdHgxNDggY29tcGFyZXRvdGFsICAgOC4wICAgIDkwRS0xICAtPiAtMQorY290eDE0OSBjb21wYXJldG90YWwgICA4ICAgICAgMC45RSsxIC0+IC0xCitjb3R4MTUwIGNvbXBhcmV0b3RhbCAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorY290eDIwMCBjb21wYXJldG90YWwgIC03LjAgICAgNy4wICAgIC0+IC0xCitjb3R4MjAxIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3ICAgICAgLT4gLTEKK2NvdHgyMDIgY29tcGFyZXRvdGFsICAtNyAgICAgIDcuMCAgICAtPiAtMQorY290eDIwMyBjb21wYXJldG90YWwgIC03RSswICAgNy4wICAgIC0+IC0xCitjb3R4MjA0IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3LjAgICAgLT4gLTEKK2NvdHgyMDUgY29tcGFyZXRvdGFsICAtMC43RSsxIDcgICAgICAtPiAtMQorY290eDIwNiBjb21wYXJldG90YWwgIC03MEUtMSAgNyAgICAgIC0+IC0xCitjb3R4MjA3IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3RSswICAgLT4gLTEKK2NvdHgyMDggY29tcGFyZXRvdGFsICAtNy4wICAgIDcwRS0xICAtPiAtMQorY290eDIwOSBjb21wYXJldG90YWwgIC03ICAgICAgMC43RSsxIC0+IC0xCitjb3R4MjEwIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3MEUtMSAgLT4gLTEKKworY290eDIyMCBjb21wYXJldG90YWwgIC04LjAgICAgNy4wICAgIC0+IC0xCitjb3R4MjIxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3ICAgICAgLT4gLTEKK2NvdHgyMjIgY29tcGFyZXRvdGFsICAtOCAgICAgIDcuMCAgICAtPiAtMQorY290eDIyMyBjb21wYXJldG90YWwgIC04RSswICAgNy4wICAgIC0+IC0xCitjb3R4MjI0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2NvdHgyMjUgY29tcGFyZXRvdGFsICAtMC44RSsxIDcgICAgICAtPiAtMQorY290eDIyNiBjb21wYXJldG90YWwgIC04MEUtMSAgNyAgICAgIC0+IC0xCitjb3R4MjI3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3RSswICAgLT4gLTEKK2NvdHgyMjggY29tcGFyZXRvdGFsICAtOC4wICAgIDcwRS0xICAtPiAtMQorY290eDIyOSBjb21wYXJldG90YWwgIC04ICAgICAgMC43RSsxIC0+IC0xCitjb3R4MjMwIGNvbXBhcmV0b3RhbCAgLTggICAgICA3MEUtMSAgLT4gLTEKKworY290eDI0MCBjb21wYXJldG90YWwgIC04LjAgICAgOS4wICAgIC0+IC0xCitjb3R4MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTEKK2NvdHgyNDIgY29tcGFyZXRvdGFsICAtOCAgICAgIDkuMCAgICAtPiAtMQorY290eDI0MyBjb21wYXJldG90YWwgIC04RSswICAgOS4wICAgIC0+IC0xCitjb3R4MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2NvdHgyNDUgY29tcGFyZXRvdGFsICAtMC44RSsxIDkgICAgICAtPiAtMQorY290eDI0NiBjb21wYXJldG90YWwgIC04MEUtMSAgOSAgICAgIC0+IC0xCitjb3R4MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTEKK2NvdHgyNDggY29tcGFyZXRvdGFsICAtOC4wICAgIDkwRS0xICAtPiAtMQorY290eDI0OSBjb21wYXJldG90YWwgIC04ICAgICAgMC45RSsxIC0+IC0xCitjb3R4MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorY290eDMwMCBjb21wYXJldG90YWwgICA3LjAgICAgLTcuMCAgICAtPiAxCitjb3R4MzAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNyAgICAgIC0+IDEKK2NvdHgzMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIC03LjAgICAgLT4gMQorY290eDMwMyBjb21wYXJldG90YWwgICA3RSswICAgLTcuMCAgICAtPiAxCitjb3R4MzA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNy4wICAgIC0+IDEKK2NvdHgzMDUgY29tcGFyZXRvdGFsICAgLjdFKzEgIC03ICAgICAgLT4gMQorY290eDMwNiBjb21wYXJldG90YWwgICA3MEUtMSAgLTcgICAgICAtPiAxCitjb3R4MzA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtN0UrMCAgIC0+IDEKK2NvdHgzMDggY29tcGFyZXRvdGFsICAgNy4wICAgIC03MEUtMSAgLT4gMQorY290eDMwOSBjb21wYXJldG90YWwgICA3ICAgICAgLS43RSsxICAtPiAxCitjb3R4MzEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNzBFLTEgIC0+IDEKKworY290eDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxCitjb3R4MzIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNyAgICAgIC0+IDEKK2NvdHgzMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIC03LjAgICAgLT4gMQorY290eDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxCitjb3R4MzI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2NvdHgzMjUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC03ICAgICAgLT4gMQorY290eDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxCitjb3R4MzI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2NvdHgzMjggY29tcGFyZXRvdGFsICAgOC4wICAgIC03MEUtMSAgLT4gMQorY290eDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxCitjb3R4MzMwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNzBFLTEgIC0+IDEKKworY290eDM0MCBjb21wYXJldG90YWwgICA4LjAgICAgLTkuMCAgICAtPiAxCitjb3R4MzQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOSAgICAgIC0+IDEKK2NvdHgzNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIC05LjAgICAgLT4gMQorY290eDM0MyBjb21wYXJldG90YWwgICA4RSswICAgLTkuMCAgICAtPiAxCitjb3R4MzQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2NvdHgzNDUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC05ICAgICAgLT4gMQorY290eDM0NiBjb21wYXJldG90YWwgICA4MEUtMSAgLTkgICAgICAtPiAxCitjb3R4MzQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2NvdHgzNDggY29tcGFyZXRvdGFsICAgOC4wICAgIC05MEUtMSAgLT4gMQorY290eDM0OSBjb21wYXJldG90YWwgICA4ICAgICAgLS45RSsxICAtPiAxCitjb3R4MzUwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorY290eDQwMCBjb21wYXJldG90YWwgICAtNy4wICAgIC03LjAgICAgLT4gMAorY290eDQwMSBjb21wYXJldG90YWwgICAtNy4wICAgIC03ICAgICAgLT4gMQorY290eDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTEKK2NvdHg0MDMgY29tcGFyZXRvdGFsICAgLTdFKzAgICAtNy4wICAgIC0+IC0xCitjb3R4NDA0IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitjb3R4NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitjb3R4NDA2IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcgICAgICAtPiAxCitjb3R4NDA3IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTdFKzAgICAtPiAxCitjb3R4NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwCitjb3R4NDA5IGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLS43RSsxICAtPiAwCitjb3R4NDEwIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcwRS0xICAtPiAtMQorCitjb3R4NDIwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorY290eDQyMSBjb21wYXJldG90YWwgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2NvdHg0MjIgY29tcGFyZXRvdGFsICAgLTggICAgICAtNy4wICAgIC0+IC0xCitjb3R4NDIzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTcuMCAgICAtPiAtMQorY290eDQyNCBjb21wYXJldG90YWwgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2NvdHg0MjUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtNyAgICAgIC0+IC0xCitjb3R4NDI2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorY290eDQyNyBjb21wYXJldG90YWwgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2NvdHg0MjggY29tcGFyZXRvdGFsICAgLTguMCAgICAtNzBFLTEgIC0+IC0xCitjb3R4NDI5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS43RSsxICAtPiAtMQorY290eDQzMCBjb21wYXJldG90YWwgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworY290eDQ0MCBjb21wYXJldG90YWwgICAtOC4wICAgIC05LjAgICAgLT4gMQorY290eDQ0MSBjb21wYXJldG90YWwgICAtOC4wICAgIC05ICAgICAgLT4gMQorY290eDQ0MiBjb21wYXJldG90YWwgICAtOCAgICAgIC05LjAgICAgLT4gMQorY290eDQ0MyBjb21wYXJldG90YWwgICAtOEUrMCAgIC05LjAgICAgLT4gMQorY290eDQ0NCBjb21wYXJldG90YWwgICAtODBFLTEgIC05LjAgICAgLT4gMQorY290eDQ0NSBjb21wYXJldG90YWwgICAtLjhFKzEgIC05ICAgICAgLT4gMQorY290eDQ0NiBjb21wYXJldG90YWwgICAtODBFLTEgIC05ICAgICAgLT4gMQorY290eDQ0NyBjb21wYXJldG90YWwgICAtOC4wICAgIC05RSswICAgLT4gMQorY290eDQ0OCBjb21wYXJldG90YWwgICAtOC4wICAgIC05MEUtMSAgLT4gMQorY290eDQ0OSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uOUUrMSAgLT4gMQorY290eDQ1MCBjb21wYXJldG90YWwgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorcHJlY2lzaW9uOiA0MAorY290eDQ3MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCitjb3R4NDcxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorY290eDQ3MiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ3MyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitjb3R4NDc0IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ3NSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorY290eDQ3NiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCitjb3R4NDc3IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorY290eDQ3OCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ3OSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitjb3R4NDgwIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ4MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorY290eDQ4MiBjb21wYXJldG90YWwgMTIzLjQ1NjBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCitjb3R4NDgzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwCitjb3R4NDg0IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDAwMEUtODkgLT4gMQorY290eDQ4NSBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwMDAwMEU3ODkgLT4gMQorY290eDQ4NiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwRS04OSAtPiAxCitjb3R4NDg3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMEU3ODkgLT4gMQorY290eDQ4OCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMQorY290eDQ4OSBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwRTc4OSAtPiAxCitjb3R4NDkwIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMQorY290eDQ5MSBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMEU3ODkgLT4gMQorY290eDQ5MiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAxCitjb3R4NDkzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMEU3ODkgLT4gMQorY290eDQ5NCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMQorY290eDQ5NSBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwRTc4OSAtPiAxCitjb3R4NDk2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMQorY290eDQ5NyBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NkU3ODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitwcmVjaXNpb246IDkKK2NvdHg1MDAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2NvdHg1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2NvdHg1MDIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEzICAgIC0+IDEKK2NvdHg1MDMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2NvdHg1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2NvdHg1MDUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEwICAgIC0+IDEKK2NvdHg1MDYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2NvdHg1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2NvdHg1MDggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTcgICAgIC0+IDEKK2NvdHg1MDkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2NvdHg1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2NvdHg1MTEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTQgICAgIC0+IDEKK2NvdHg1MTIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2NvdHg1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2NvdHg1MTQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEgICAgIC0+IDEKK2NvdHg1MTUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2NvdHg1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitjb3R4NTE3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsyICAgICAtPiAtMQorY290eDUxOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2NvdHg1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitjb3R4NTIxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs1ICAgICAtPiAtMQorY290eDUyMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2NvdHg1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitjb3R4NTI0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs4ICAgICAtPiAtMQorY290eDUyNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2NvdHg1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitjb3R4NTI3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMSAgICAtPiAtMQorY290eDUyOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2NvdHg1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitjb3R4NTMwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNCAgICAtPiAtMQorY290eDUzMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKKy0tIExSIHN3YXAKK2NvdHg1NDAgY29tcGFyZXRvdGFsICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitjb3R4NTQxIGNvbXBhcmV0b3RhbCAgICAxRS0xNCAgMSAgICAgICAtPiAtMQorY290eDU0MiBjb21wYXJldG90YWwgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2NvdHg1NDMgY29tcGFyZXRvdGFsICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitjb3R4NTQ0IGNvbXBhcmV0b3RhbCAgICAxRS0xMSAgMSAgICAgICAtPiAtMQorY290eDU0NSBjb21wYXJldG90YWwgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2NvdHg1NDYgY29tcGFyZXRvdGFsICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitjb3R4NTQ3IGNvbXBhcmV0b3RhbCAgICAxRS04ICAgMSAgICAgICAtPiAtMQorY290eDU0OCBjb21wYXJldG90YWwgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2NvdHg1NDkgY29tcGFyZXRvdGFsICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitjb3R4NTUwIGNvbXBhcmV0b3RhbCAgICAxRS01ICAgMSAgICAgICAtPiAtMQorY290eDU1MSBjb21wYXJldG90YWwgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2NvdHg1NTIgY29tcGFyZXRvdGFsICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitjb3R4NTUzIGNvbXBhcmV0b3RhbCAgICAxRS0yICAgMSAgICAgICAtPiAtMQorY290eDU1NCBjb21wYXJldG90YWwgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2NvdHg1NTUgY29tcGFyZXRvdGFsICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitjb3R4NTU2IGNvbXBhcmV0b3RhbCAgICAxRSsxICAgMSAgICAgICAtPiAgMQorY290eDU1NyBjb21wYXJldG90YWwgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2NvdHg1NTggY29tcGFyZXRvdGFsICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitjb3R4NTU5IGNvbXBhcmV0b3RhbCAgICAxRSs0ICAgMSAgICAgICAtPiAgMQorY290eDU2MSBjb21wYXJldG90YWwgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2NvdHg1NjIgY29tcGFyZXRvdGFsICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitjb3R4NTYzIGNvbXBhcmV0b3RhbCAgICAxRSs3ICAgMSAgICAgICAtPiAgMQorY290eDU2NCBjb21wYXJldG90YWwgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2NvdHg1NjUgY29tcGFyZXRvdGFsICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitjb3R4NTY2IGNvbXBhcmV0b3RhbCAgICAxRSsxMCAgMSAgICAgICAtPiAgMQorY290eDU2NyBjb21wYXJldG90YWwgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2NvdHg1NjggY29tcGFyZXRvdGFsICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitjb3R4NTY5IGNvbXBhcmV0b3RhbCAgICAxRSsxMyAgMSAgICAgICAtPiAgMQorY290eDU3MCBjb21wYXJldG90YWwgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2NvdHg1NzEgY29tcGFyZXRvdGFsICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYW4gdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5Citjb3R4NTgwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2NvdHg1ODEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorY290eDU4MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxCitjb3R4NTgzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2NvdHg1ODQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorY290eDU4NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxCitjb3R4NTg2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2NvdHg1ODcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorY290eDU4OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxCitjb3R4NTg5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitjb3R4NTkwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitjb3R4NTkxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xCitjb3R4NTkyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitjb3R4NTkzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitjb3R4NTk0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xCitjb3R4NTk1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitjb3R4NTk2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitjb3R4NTk3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xCitjb3R4NTk4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitjb3R4NTk5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitwcmVjaXNpb246IDIwCitjb3R4NjAwIGNvbXBhcmV0b3RhbCAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwMSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjAzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwNCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjA2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwNyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjA5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQorY290eDYxMCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2NvdHg2MTEgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitjb3R4NjEyIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQorY290eDYxMyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2NvdHg2MTQgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitjb3R4NjE1IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQorY290eDYxNiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2NvdHg2MTcgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitjb3R4NjE4IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQorY290eDYxOSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2NvdHg2MjAgY29tcGFyZXRvdGFsICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjIxIGNvbXBhcmV0b3RhbCAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyMiBjb21wYXJldG90YWwgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjMgY29tcGFyZXRvdGFsICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjI0IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyNSBjb21wYXJldG90YWwgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjYgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjI3IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyOCBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjkgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjMwIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQorY290eDYzMSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2NvdHg2MzIgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitjb3R4NjMzIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQorY290eDYzNCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2NvdHg2MzUgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitjb3R4NjM2IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQorY290eDYzNyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2NvdHg2MzggY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitjb3R4NjM5IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQorcHJlY2lzaW9uOiA5CisKKy0tIGV4dGVuZGVkIHplcm9zCitjb3R4NjQwIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAgICAtPiAwCitjb3R4NjQxIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAgICAtPiAxCitjb3R4NjQyIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAuMCAtPiAxCitjb3R4NjQzIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAuMCAtPiAxCitjb3R4NjQ0IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAgICAtPiAtMQorY290eDY0NSBjb21wYXJldG90YWwgIC0wICAgIC0wICAgLT4gMAorY290eDY0NiBjb21wYXJldG90YWwgIC0wICAgIC0wLjAgLT4gLTEKK2NvdHg2NDcgY29tcGFyZXRvdGFsICAtMCAgICAgMC4wIC0+IC0xCitjb3R4NjQ4IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAgICAtPiAtMQorY290eDY0OSBjb21wYXJldG90YWwgICAwLjAgIC0wICAgLT4gMQorY290eDY1MCBjb21wYXJldG90YWwgICAwLjAgIC0wLjAgLT4gMQorY290eDY1MSBjb21wYXJldG90YWwgICAwLjAgICAwLjAgLT4gMAorY290eDY1MiBjb21wYXJldG90YWwgIC0wLjAgICAwICAgLT4gLTEKK2NvdHg2NTMgY29tcGFyZXRvdGFsICAtMC4wICAtMCAgIC0+IDEKK2NvdHg2NTQgY29tcGFyZXRvdGFsICAtMC4wICAtMC4wIC0+IDAKK2NvdHg2NTUgY29tcGFyZXRvdGFsICAtMC4wICAgMC4wIC0+IC0xCisKK2NvdHg2NTYgY29tcGFyZXRvdGFsICAtMEUxICAgMC4wIC0+IC0xCitjb3R4NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQorY290eDY1OCBjb21wYXJldG90YWwgICAwRTEgICAwLjAgLT4gMQorY290eDY1OSBjb21wYXJldG90YWwgICAwRTIgICAwLjAgLT4gMQorY290eDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTEKK2NvdHg2NjEgY29tcGFyZXRvdGFsICAtMEUyICAgMCAgIC0+IC0xCitjb3R4NjYyIGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAgICAtPiAxCitjb3R4NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxCitjb3R4NjY0IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMSAtPiAwCitjb3R4NjY1IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMSAtPiAtMQorY290eDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQorY290eDY2NyBjb21wYXJldG90YWwgICAwRTIgIC0wRTEgLT4gMQorY290eDY2OCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTIgLT4gMQorY290eDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMAorY290eDY3MCBjb21wYXJldG90YWwgICAwRTEgIC0wRTIgLT4gMQorY290eDY3MSBjb21wYXJldG90YWwgICAwRTIgIC0wRTIgLT4gMQorY290eDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTEKK2NvdHg2NzMgY29tcGFyZXRvdGFsICAtMEUyICAgMEUxIC0+IC0xCitjb3R4Njc0IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDBFMSAtPiAwCitjb3R4Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxCitjb3R4Njc2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMiAtPiAtMQorY290eDY3NyBjb21wYXJldG90YWwgIC0wRTIgICAwRTIgLT4gLTEKK2NvdHg2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xCitjb3R4Njc5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK3ByZWNpc2lvbjogMjAKK2NvdHg2ODAgY29tcGFyZXRvdGFsICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2NvdHg2ODEgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDEKK2NvdHg2ODIgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDEKK2NvdHg2ODMgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDEKK2NvdHg2ODQgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDEKK2NvdHg2ODUgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDEKK2NvdHg2ODYgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDEKK2NvdHg2ODcgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDEKK2NvdHg2ODggY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDEKK2NvdHg2ODkgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDEKK2NvdHg2OTAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAgIDEyIC0+IDAKK2NvdHg2OTEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAgIDEyIC0+IC0xCitjb3R4NjkyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgICAxMiAtPiAtMQorY290eDY5MyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgICAgMTIgLT4gLTEKK2NvdHg2OTQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IC0xCitjb3R4Njk1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAtMQorY290eDY5NiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gLTEKK2NvdHg2OTcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IC0xCitjb3R4Njk4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAtMQorY290eDY5OSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gLTEKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorY290eDcwMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgIDEgLT4gIDEKK2NvdHg3MDIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgIC0+IC0xCitjb3R4NzAzIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwICAgMSAtPiAgMQorY290eDcwNCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwICAgLT4gLTEKK2NvdHg3MDUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgICAxIC0+ICAxCitjb3R4NzA2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgICAtPiAtMQorY290eDcwNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgIDEgLT4gIDEKK2NvdHg3MDggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgIC0+IC0xCitjb3R4NzA5IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwMSAgMSAtPiAgMQorY290eDcxMCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwMSAgLT4gLTEKK2NvdHg3MTEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgICAxIC0+ICAxCitjb3R4NzEyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgICAtPiAtMQorY290eDcxMyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTEgIDEgLT4gLTEKK2NvdHg3MTQgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTEgIC0+ICAxCitjb3R4NzE1IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MDEgMSAtPiAtMQorY290eDcxNiBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MDEgLT4gIDEKK2NvdHg3MTcgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODk2ICAxIC0+IC0xCitjb3R4NzE4IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODk2ICAtPiAgMQorCitwcmVjaXNpb246IDE1CistLSBzYW1lIHdpdGggcGxlbnR5IG9mIHByZWNpc2lvbgorY290eDcyMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgMSAtPiAxCitjb3R4NzIyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAwIC0+IC0xCitjb3R4NzIzIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwICAxIC0+IDEKK2NvdHg3MjQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgLT4gLTEKK2NvdHg3MjUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgIDEgLT4gMQorY290eDcyNiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwICAtPiAtMQorY290eDcyNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgMSAtPiAxCitjb3R4NzI4IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTEgIC0+IC0xCitjb3R4NzI5IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwMSAxIC0+IDEKK2NvdHg3MzAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgLT4gLTEKK2NvdHg3MzEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgIDEgLT4gMQorY290eDczMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODk2ICAtPiAtMQorCistLSByZXNpZHVlIGNhc2VzCitwcmVjaXNpb246IDUKK2NvdHg3NDAgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OTkgIC0+IDEKK2NvdHg3NDEgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OSAgIC0+IDEKK2NvdHg3NDIgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5ICAgIC0+IDEKK2NvdHg3NDMgY29tcGFyZXRvdGFsICAxICAxLjAwMDAgICAgIC0+IDEKK2NvdHg3NDQgY29tcGFyZXRvdGFsICAxICAxLjAwMDAxICAgIC0+IC0xCitjb3R4NzQ1IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDEgICAtPiAtMQorY290eDc0NiBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2NvdHg3NTAgY29tcGFyZXRvdGFsICAwLjk5OTk5OTkgIDEgIC0+IC0xCitjb3R4NzUxIGNvbXBhcmV0b3RhbCAgMC45OTk5OTkgICAxICAtPiAtMQorY290eDc1MiBjb21wYXJldG90YWwgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2NvdHg3NTMgY29tcGFyZXRvdGFsICAxLjAwMDAgICAgIDEgIC0+IC0xCitjb3R4NzU0IGNvbXBhcmV0b3RhbCAgMS4wMDAwMSAgICAxICAtPiAxCitjb3R4NzU1IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDEgICAxICAtPiAxCitjb3R4NzU2IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDAxICAxICAtPiAxCisKKy0tIGEgc2VsZWN0aW9uIG9mIGxvbmdpZXMKK2NvdHg3NjAgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYyOS44MzQ3MDg1MDI1ODA4NzU2NTYwMzU3OTQwIC0+IC0xCitjb3R4NzYxIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAwCitjb3R4NzYyIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAtMQorY290eDc2MyBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorLS0gcHJlY2lzaW9ucyBhYm92ZSBvciBiZWxvdyB0aGUgZGlmZmVyZW5jZSBzaG91bGQgaGF2ZSBubyBlZmZlY3QKK3ByZWNpc2lvbjogICAxMQorY290eDc2NCBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgIDEwCitjb3R4NzY1IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDkKK2NvdHg3NjYgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgOAorY290eDc2NyBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA3Citjb3R4NzY4IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDYKK2NvdHg3NjkgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgNQorY290eDc3MCBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA0Citjb3R4NzcxIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDMKK2NvdHg3NzIgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgMgorY290eDc3MyBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICAxCitjb3R4Nzc0IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246ICAgOQorY290eDc4MCBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxCitjb3R4NzgxIGNvbXBhcmV0b3RhbCAgSW5mICAtMTAwMCAgLT4gIDEKK2NvdHg3ODIgY29tcGFyZXRvdGFsICBJbmYgIC0xICAgICAtPiAgMQorY290eDc4MyBjb21wYXJldG90YWwgIEluZiAgLTAgICAgIC0+ICAxCitjb3R4Nzg0IGNvbXBhcmV0b3RhbCAgSW5mICAgMCAgICAgLT4gIDEKK2NvdHg3ODUgY29tcGFyZXRvdGFsICBJbmYgICAxICAgICAtPiAgMQorY290eDc4NiBjb21wYXJldG90YWwgIEluZiAgIDEwMDAgIC0+ICAxCitjb3R4Nzg3IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKK2NvdHg3ODggY29tcGFyZXRvdGFsIC0xMDAwICBJbmYgICAtPiAtMQorY290eDc4OSBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xCitjb3R4NzkwIGNvbXBhcmV0b3RhbCAtMSAgICAgSW5mICAgLT4gLTEKK2NvdHg3OTEgY29tcGFyZXRvdGFsIC0wICAgICBJbmYgICAtPiAtMQorY290eDc5MiBjb21wYXJldG90YWwgIDAgICAgIEluZiAgIC0+IC0xCitjb3R4NzkzIGNvbXBhcmV0b3RhbCAgMSAgICAgSW5mICAgLT4gLTEKK2NvdHg3OTQgY29tcGFyZXRvdGFsICAxMDAwICBJbmYgICAtPiAtMQorY290eDc5NSBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwCisKK2NvdHg4MDAgY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorY290eDgwMSBjb21wYXJldG90YWwgLUluZiAgLTEwMDAgIC0+IC0xCitjb3R4ODAyIGNvbXBhcmV0b3RhbCAtSW5mICAtMSAgICAgLT4gLTEKK2NvdHg4MDMgY29tcGFyZXRvdGFsIC1JbmYgIC0wICAgICAtPiAtMQorY290eDgwNCBjb21wYXJldG90YWwgLUluZiAgIDAgICAgIC0+IC0xCitjb3R4ODA1IGNvbXBhcmV0b3RhbCAtSW5mICAgMSAgICAgLT4gLTEKK2NvdHg4MDYgY29tcGFyZXRvdGFsIC1JbmYgICAxMDAwICAtPiAtMQorY290eDgwNyBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xCitjb3R4ODA4IGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDAKK2NvdHg4MDkgY29tcGFyZXRvdGFsIC0xMDAwIC1JbmYgICAtPiAgMQorY290eDgxMCBjb21wYXJldG90YWwgLTEgICAgLUluZiAgIC0+ICAxCitjb3R4ODExIGNvbXBhcmV0b3RhbCAtMCAgICAtSW5mICAgLT4gIDEKK2NvdHg4MTIgY29tcGFyZXRvdGFsICAwICAgIC1JbmYgICAtPiAgMQorY290eDgxMyBjb21wYXJldG90YWwgIDEgICAgLUluZiAgIC0+ICAxCitjb3R4ODE0IGNvbXBhcmV0b3RhbCAgMTAwMCAtSW5mICAgLT4gIDEKK2NvdHg4MTUgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQorCitjb3R4ODIxIGNvbXBhcmV0b3RhbCAgTmFOIC1JbmYgICAgLT4gIDEKK2NvdHg4MjIgY29tcGFyZXRvdGFsICBOYU4gLTEwMDAgICAtPiAgMQorY290eDgyMyBjb21wYXJldG90YWwgIE5hTiAtMSAgICAgIC0+ICAxCitjb3R4ODI0IGNvbXBhcmV0b3RhbCAgTmFOIC0wICAgICAgLT4gIDEKK2NvdHg4MjUgY29tcGFyZXRvdGFsICBOYU4gIDAgICAgICAtPiAgMQorY290eDgyNiBjb21wYXJldG90YWwgIE5hTiAgMSAgICAgIC0+ICAxCitjb3R4ODI3IGNvbXBhcmV0b3RhbCAgTmFOICAxMDAwICAgLT4gIDEKK2NvdHg4MjggY29tcGFyZXRvdGFsICBOYU4gIEluZiAgICAtPiAgMQorY290eDgyOSBjb21wYXJldG90YWwgIE5hTiAgTmFOICAgIC0+ICAwCitjb3R4ODMwIGNvbXBhcmV0b3RhbCAtSW5mICBOYU4gICAgLT4gIC0xCitjb3R4ODMxIGNvbXBhcmV0b3RhbCAtMTAwMCBOYU4gICAgLT4gIC0xCitjb3R4ODMyIGNvbXBhcmV0b3RhbCAtMSAgICBOYU4gICAgLT4gIC0xCitjb3R4ODMzIGNvbXBhcmV0b3RhbCAtMCAgICBOYU4gICAgLT4gIC0xCitjb3R4ODM0IGNvbXBhcmV0b3RhbCAgMCAgICBOYU4gICAgLT4gIC0xCitjb3R4ODM1IGNvbXBhcmV0b3RhbCAgMSAgICBOYU4gICAgLT4gIC0xCitjb3R4ODM2IGNvbXBhcmV0b3RhbCAgMTAwMCBOYU4gICAgLT4gIC0xCitjb3R4ODM3IGNvbXBhcmV0b3RhbCAgSW5mICBOYU4gICAgLT4gIC0xCitjb3R4ODM4IGNvbXBhcmV0b3RhbCAtTmFOIC1OYU4gICAgLT4gIDAKK2NvdHg4MzkgY29tcGFyZXRvdGFsICtOYU4gLU5hTiAgICAtPiAgMQorY290eDg0MCBjb21wYXJldG90YWwgLU5hTiArTmFOICAgIC0+ICAtMQorCitjb3R4ODQxIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgLT4gIDEKK2NvdHg4NDIgY29tcGFyZXRvdGFsICBzTmFOIC1OYU4gICAtPiAgMQorY290eDg0MyBjb21wYXJldG90YWwgIHNOYU4gLUluZiAgIC0+ICAxCitjb3R4ODQ0IGNvbXBhcmV0b3RhbCAgc05hTiAtMTAwMCAgLT4gIDEKK2NvdHg4NDUgY29tcGFyZXRvdGFsICBzTmFOIC0xICAgICAtPiAgMQorY290eDg0NiBjb21wYXJldG90YWwgIHNOYU4gLTAgICAgIC0+ICAxCitjb3R4ODQ3IGNvbXBhcmV0b3RhbCAgc05hTiAgMCAgICAgLT4gIDEKK2NvdHg4NDggY29tcGFyZXRvdGFsICBzTmFOICAxICAgICAtPiAgMQorY290eDg0OSBjb21wYXJldG90YWwgIHNOYU4gIDEwMDAgIC0+ICAxCitjb3R4ODUwIGNvbXBhcmV0b3RhbCAgc05hTiAgTmFOICAgLT4gIC0xCitjb3R4ODUxIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKKworY290eDg1MiBjb21wYXJldG90YWwgLXNOYU4gc05hTiAgIC0+ICAtMQorY290eDg1MyBjb21wYXJldG90YWwgLU5hTiAgc05hTiAgIC0+ICAtMQorY290eDg1NCBjb21wYXJldG90YWwgLUluZiAgc05hTiAgIC0+ICAtMQorY290eDg1NSBjb21wYXJldG90YWwgLTEwMDAgc05hTiAgIC0+ICAtMQorY290eDg1NiBjb21wYXJldG90YWwgLTEgICAgc05hTiAgIC0+ICAtMQorY290eDg1NyBjb21wYXJldG90YWwgLTAgICAgc05hTiAgIC0+ICAtMQorY290eDg1OCBjb21wYXJldG90YWwgIDAgICAgc05hTiAgIC0+ICAtMQorY290eDg1OSBjb21wYXJldG90YWwgIDEgICAgc05hTiAgIC0+ICAtMQorY290eDg2MCBjb21wYXJldG90YWwgIDEwMDAgc05hTiAgIC0+ICAtMQorY290eDg2MSBjb21wYXJldG90YWwgIEluZiAgc05hTiAgIC0+ICAtMQorY290eDg2MiBjb21wYXJldG90YWwgIE5hTiAgc05hTiAgIC0+ICAxCitjb3R4ODYzIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKKworY290eDg3MSBjb21wYXJldG90YWwgIC1zTmFOIC1zTmFOICAtPiAgMAorY290eDg3MiBjb21wYXJldG90YWwgIC1zTmFOIC1OYU4gICAtPiAgMQorY290eDg3MyBjb21wYXJldG90YWwgIC1zTmFOIC1JbmYgICAtPiAgLTEKK2NvdHg4NzQgY29tcGFyZXRvdGFsICAtc05hTiAtMTAwMCAgLT4gIC0xCitjb3R4ODc1IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEgICAgIC0+ICAtMQorY290eDg3NiBjb21wYXJldG90YWwgIC1zTmFOIC0wICAgICAtPiAgLTEKK2NvdHg4NzcgY29tcGFyZXRvdGFsICAtc05hTiAgMCAgICAgLT4gIC0xCitjb3R4ODc4IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEgICAgIC0+ICAtMQorY290eDg3OSBjb21wYXJldG90YWwgIC1zTmFOICAxMDAwICAtPiAgLTEKK2NvdHg4ODAgY29tcGFyZXRvdGFsICAtc05hTiAgTmFOICAgLT4gIC0xCitjb3R4ODgxIGNvbXBhcmV0b3RhbCAgLXNOYU4gc05hTiAgIC0+ICAtMQorCitjb3R4ODgyIGNvbXBhcmV0b3RhbCAtc05hTiAtc05hTiAgIC0+ICAwCitjb3R4ODgzIGNvbXBhcmV0b3RhbCAtTmFOICAtc05hTiAgIC0+ICAtMQorY290eDg4NCBjb21wYXJldG90YWwgLUluZiAgLXNOYU4gICAtPiAgMQorY290eDg4NSBjb21wYXJldG90YWwgLTEwMDAgLXNOYU4gICAtPiAgMQorY290eDg4NiBjb21wYXJldG90YWwgLTEgICAgLXNOYU4gICAtPiAgMQorY290eDg4NyBjb21wYXJldG90YWwgLTAgICAgLXNOYU4gICAtPiAgMQorY290eDg4OCBjb21wYXJldG90YWwgIDAgICAgLXNOYU4gICAtPiAgMQorY290eDg4OSBjb21wYXJldG90YWwgIDEgICAgLXNOYU4gICAtPiAgMQorY290eDg5MCBjb21wYXJldG90YWwgIDEwMDAgLXNOYU4gICAtPiAgMQorY290eDg5MSBjb21wYXJldG90YWwgIEluZiAgLXNOYU4gICAtPiAgMQorY290eDg5MiBjb21wYXJldG90YWwgIE5hTiAgLXNOYU4gICAtPiAgMQorY290eDg5MyBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gICAtPiAgMQorCistLSBOYU5zIHdpdGggcGF5bG9hZAorY290eDk2MCBjb21wYXJldG90YWwgIE5hTjkgLUluZiAgIC0+ICAxCitjb3R4OTYxIGNvbXBhcmV0b3RhbCAgTmFOOCAgOTk5ICAgLT4gIDEKK2NvdHg5NjIgY29tcGFyZXRvdGFsICBOYU43NyBJbmYgICAtPiAgMQorY290eDk2MyBjb21wYXJldG90YWwgLU5hTjY3IE5hTjUgIC0+ICAtMQorY290eDk2NCBjb21wYXJldG90YWwgLUluZiAgLU5hTjQgIC0+ICAxCitjb3R4OTY1IGNvbXBhcmV0b3RhbCAtOTk5ICAtTmFOMzMgLT4gIDEKK2NvdHg5NjYgY29tcGFyZXRvdGFsICBJbmYgICBOYU4yICAtPiAgLTEKKworY290eDk3MCBjb21wYXJldG90YWwgLU5hTjQxIC1OYU40MiAtPiAxCitjb3R4OTcxIGNvbXBhcmV0b3RhbCArTmFONDEgLU5hTjQyIC0+IDEKK2NvdHg5NzIgY29tcGFyZXRvdGFsIC1OYU40MSArTmFONDIgLT4gLTEKK2NvdHg5NzMgY29tcGFyZXRvdGFsICtOYU40MSArTmFONDIgLT4gLTEKK2NvdHg5NzQgY29tcGFyZXRvdGFsIC1OYU40MiAtTmFOMDEgLT4gLTEKK2NvdHg5NzUgY29tcGFyZXRvdGFsICtOYU40MiAtTmFOMDEgLT4gIDEKK2NvdHg5NzYgY29tcGFyZXRvdGFsIC1OYU40MiArTmFOMDEgLT4gLTEKK2NvdHg5NzcgY29tcGFyZXRvdGFsICtOYU40MiArTmFOMDEgLT4gIDEKKworY290eDk4MCBjb21wYXJldG90YWwgLXNOYU43NzEgLXNOYU43NzIgLT4gMQorY290eDk4MSBjb21wYXJldG90YWwgK3NOYU43NzEgLXNOYU43NzIgLT4gMQorY290eDk4MiBjb21wYXJldG90YWwgLXNOYU43NzEgK3NOYU43NzIgLT4gLTEKK2NvdHg5ODMgY29tcGFyZXRvdGFsICtzTmFONzcxICtzTmFONzcyIC0+IC0xCitjb3R4OTg0IGNvbXBhcmV0b3RhbCAtc05hTjc3MiAtc05hTjc3MSAtPiAtMQorY290eDk4NSBjb21wYXJldG90YWwgK3NOYU43NzIgLXNOYU43NzEgLT4gIDEKK2NvdHg5ODYgY29tcGFyZXRvdGFsIC1zTmFONzcyICtzTmFONzcxIC0+IC0xCitjb3R4OTg3IGNvbXBhcmV0b3RhbCArc05hTjc3MiArc05hTjc3MSAtPiAgMQorCitjb3R4OTkxIGNvbXBhcmV0b3RhbCAtc05hTjk5IC1JbmYgICAgLT4gLTEKK2NvdHg5OTIgY29tcGFyZXRvdGFsICBzTmFOOTggLTExICAgICAtPiAgMQorY290eDk5MyBjb21wYXJldG90YWwgIHNOYU45NyAgTmFOICAgIC0+IC0xCitjb3R4OTk0IGNvbXBhcmV0b3RhbCAgc05hTjE2IHNOYU45NCAgLT4gLTEKK2NvdHg5OTUgY29tcGFyZXRvdGFsICBOYU44NSAgc05hTjgzICAtPiAgMQorY290eDk5NiBjb21wYXJldG90YWwgLUluZiAgICBzTmFOOTIgIC0+IC0xCitjb3R4OTk3IGNvbXBhcmV0b3RhbCAgMDg4ICAgIHNOYU44MSAgLT4gLTEKK2NvdHg5OTggY29tcGFyZXRvdGFsICBJbmYgICAgc05hTjkwICAtPiAtMQorY290eDk5OSBjb21wYXJldG90YWwgIE5hTiAgIC1zTmFOODkgIC0+ICAxCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gc3Vibm9ybWFsIHJlc3VsdHMgbm93IGFsbG93ZWQKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Citjb3R4MTA4MCBjb21wYXJldG90YWwgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xCitjb3R4MTA4MSBjb21wYXJldG90YWwgOUUrOTk5OTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitjb3R4MTA4MiBjb21wYXJldG90YWwgKzAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAxCitjb3R4MTA4MyBjb21wYXJldG90YWwgOUUtOTk5OTk5OTk5ICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xCitjb3R4MTA4NSBjb21wYXJldG90YWwgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xCitjb3R4MTA4NiBjb21wYXJldG90YWwgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitjb3R4MTA4NyBjb21wYXJldG90YWwgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC0xCitjb3R4MTA4OCBjb21wYXJldG90YWwgOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxCisKK2NvdHgxMDg5IGNvbXBhcmV0b3RhbCAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgLT4gLTEKK2NvdHgxMDkwIGNvbXBhcmV0b3RhbCAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAwICAgLT4gLTEKK2NvdHgxMDkxIGNvbXBhcmV0b3RhbCAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAwICAgLT4gLTEKK2NvdHgxMDkyIGNvbXBhcmV0b3RhbCA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgLT4gLTEKK2NvdHgxMDkzIGNvbXBhcmV0b3RhbCA5ZS05OTk5OTk5OTggMC4xICAgICAgICAgICAgLT4gLTEKK2NvdHgxMDk0IGNvbXBhcmV0b3RhbCAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgLT4gIDEKK2NvdHgxMDk1IGNvbXBhcmV0b3RhbCAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMSAgICAgLT4gIDEKK2NvdHgxMDk2IGNvbXBhcmV0b3RhbCAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDEKK2NvdHgxMDk3IGNvbXBhcmV0b3RhbCAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAgICAgLT4gIDEKK2NvdHgxMDk4IGNvbXBhcmV0b3RhbCA5ZTk5OTk5OTk5OCAxMDAgICAgICAgICAgICAgLT4gIDEKK2NvdHgxMDk5IGNvbXBhcmV0b3RhbCA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDEKK2NvdHgxMTAwIGNvbXBhcmV0b3RhbCAxMDAgIDllOTk5OTk5OTk4ICAgICAgICAgICAgLT4gLTEKKy0tIHNpZ25zCitjb3R4MTEwMSBjb21wYXJldG90YWwgIDFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+ICAxCitjb3R4MTEwMiBjb21wYXJldG90YWwgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+ICAxCitjb3R4MTEwMyBjb21wYXJldG90YWwgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+IC0xCitjb3R4MTEwNCBjb21wYXJldG90YWwgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xCitjb3R4MTEwNSBjb21wYXJldG90YWwgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+IC0xCitjb3R4MTEwNiBjb21wYXJldG90YWwgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+ICAxCitjb3R4MTEwNyBjb21wYXJldG90YWwgLTFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+IC0xCitjb3R4MTEwOCBjb21wYXJldG90YWwgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+ICAxCisKKy0tIHNwcmVhZCB6ZXJvcworY290eDExMTAgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwICAgICAgIC0+IC0xCitjb3R4MTExMSBjb21wYXJldG90YWwgICAwRS0zODMgLTAgICAgICAgLT4gIDEKK2NvdHgxMTEyIGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAgMCAgICAgICAtPiAtMQorY290eDExMTMgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wICAgICAgIC0+ICAxCitjb3R4MTExNCBjb21wYXJldG90YWwgICAwRS0zODMgIDBFKzM4NCAgLT4gLTEKK2NvdHgxMTE1IGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAtMEUrMzg0ICAtPiAgMQorY290eDExMTYgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwRSszODQgIC0+IC0xCitjb3R4MTExNyBjb21wYXJldG90YWwgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDEKK2NvdHgxMTE4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUrMzg0ICAtPiAtMQorY290eDExMTkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRSszODQgIC0+ICAxCitjb3R4MTEyMCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFKzM4NCAgLT4gLTEKK2NvdHgxMTIxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUrMzg0ICAtPiAgMQorCitjb3R4MTEzMCBjb21wYXJldG90YWwgICAwRSszODQgIDAgICAgICAgLT4gIDEKK2NvdHgxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMCAgICAgICAtPiAgMQorY290eDExMzIgY29tcGFyZXRvdGFsICAtMEUrMzg0ICAwICAgICAgIC0+IC0xCitjb3R4MTEzMyBjb21wYXJldG90YWwgIC0wRSszODQgLTAgICAgICAgLT4gLTEKK2NvdHgxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMQorY290eDExMzUgY29tcGFyZXRvdGFsICAgMEUrMzg0IC0wRS0zODMgIC0+ICAxCitjb3R4MTEzNiBjb21wYXJldG90YWwgIC0wRSszODQgIDBFLTM4MyAgLT4gLTEKK2NvdHgxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMEUtMzgzICAtPiAtMQorY290eDExMzggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRS0zODMgIC0+ICAxCitjb3R4MTEzOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFLTM4MyAgLT4gIDEKK2NvdHgxMTQwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUtMzgzICAtPiAtMQorY290eDExNDEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRS0zODMgIC0+IC0xCisKKy0tIE51bGwgdGVzdHMKK2NvdHg5OTkwIGNvbXBhcmV0b3RhbCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2NvdHg5OTkxIGNvbXBhcmV0b3RhbCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90bWFnLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdG1hZy5kZWNUZXN0CmluZGV4IGU4N2M5ZjIuLmNlZGZkZjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90bWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RtYWcuZGVjVGVzdApAQCAtMSw3OTAgKzEsNzkwIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBjb21wYXJldG90bWFnLmRlY1Rlc3QgLS0gZGVjaW1hbCBjb21wYXJpc29uLCBhYnMuIHRvdGFsIG9yZGVyaW5nICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gTm90ZSB0aGF0IGl0IGNhbm5vdCBiZSBhc3N1bWVkIHRoYXQgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzDQotLS0gZm9yIHRoaXMgb3BlcmF0aW9uIGFkZXF1YXRlbHksIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUNCi0tLSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90IG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28NCi0tLSBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4gU2ltaWxhcmx5LCBjb21wYXJldG90YWwNCi0tLSB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzIHRoYW4gY29tcGFyZS4NCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICAxNg0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWN0bXgwMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwDQotY3RteDAwMiBjb21wYXJldG90bWFnICAtMiAgLTEgICAtPiAgIDENCi1jdG14MDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQ0KLWN0bXgwMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxDQotY3RteDAwNSBjb21wYXJldG90bWFnICAtMiAgIDIgICAtPiAgIDANCi1jdG14MDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQ0KLWN0bXgwMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwDQotY3RteDAwOCBjb21wYXJldG90bWFnICAtMSAgIDAgICAtPiAgIDENCi1jdG14MDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMA0KLWN0bXgwMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xDQotY3RteDAxMSBjb21wYXJldG90bWFnICAgMCAgLTIgICAtPiAgLTENCi1jdG14MDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQ0KLWN0bXgwMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwDQotY3RteDAxNCBjb21wYXJldG90bWFnICAgMCAgIDEgICAtPiAgLTENCi1jdG14MDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQ0KLWN0bXgwMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xDQotY3RteDAxNyBjb21wYXJldG90bWFnICAgMSAgLTEgICAtPiAgIDANCi1jdG14MDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQ0KLWN0bXgwMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwDQotY3RteDAyMCBjb21wYXJldG90bWFnICAgMSAgIDIgICAtPiAgLTENCi1jdG14MDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMA0KLWN0bXgwMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxDQotY3RteDAyMyBjb21wYXJldG90bWFnICAgMiAgIDAgICAtPiAgIDENCi1jdG14MDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQ0KLWN0bXgwMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwDQotDQotY3RteDAzMSBjb21wYXJldG90bWFnICAtMjAgIC0yMCAgIC0+ICAgMA0KLWN0bXgwMzIgY29tcGFyZXRvdG1hZyAgLTIwICAtMTAgICAtPiAgIDENCi1jdG14MDMzIGNvbXBhcmV0b3RtYWcgIC0yMCAgIDAwICAgLT4gICAxDQotY3RteDAzNCBjb21wYXJldG90bWFnICAtMjAgICAxMCAgIC0+ICAgMQ0KLWN0bXgwMzUgY29tcGFyZXRvdG1hZyAgLTIwICAgMjAgICAtPiAgIDANCi1jdG14MDM2IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTIwICAgLT4gIC0xDQotY3RteDAzNyBjb21wYXJldG90bWFnICAtMTAgIC0xMCAgIC0+ICAgMA0KLWN0bXgwMzggY29tcGFyZXRvdG1hZyAgLTEwICAgMDAgICAtPiAgIDENCi1jdG14MDM5IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDEwICAgLT4gICAwDQotY3RteDA0MCBjb21wYXJldG90bWFnICAtMTAgICAyMCAgIC0+ICAtMQ0KLWN0bXgwNDEgY29tcGFyZXRvdG1hZyAgIDAwICAtMjAgICAtPiAgLTENCi1jdG14MDQyIGNvbXBhcmV0b3RtYWcgICAwMCAgLTEwICAgLT4gIC0xDQotY3RteDA0MyBjb21wYXJldG90bWFnICAgMDAgICAwMCAgIC0+ICAgMA0KLWN0bXgwNDQgY29tcGFyZXRvdG1hZyAgIDAwICAgMTAgICAtPiAgLTENCi1jdG14MDQ1IGNvbXBhcmV0b3RtYWcgICAwMCAgIDIwICAgLT4gIC0xDQotY3RteDA0NiBjb21wYXJldG90bWFnICAgMTAgIC0yMCAgIC0+ICAtMQ0KLWN0bXgwNDcgY29tcGFyZXRvdG1hZyAgIDEwICAtMTAgICAtPiAgIDANCi1jdG14MDQ4IGNvbXBhcmV0b3RtYWcgICAxMCAgIDAwICAgLT4gICAxDQotY3RteDA0OSBjb21wYXJldG90bWFnICAgMTAgICAxMCAgIC0+ICAgMA0KLWN0bXgwNTAgY29tcGFyZXRvdG1hZyAgIDEwICAgMjAgICAtPiAgLTENCi1jdG14MDUxIGNvbXBhcmV0b3RtYWcgICAyMCAgLTIwICAgLT4gICAwDQotY3RteDA1MiBjb21wYXJldG90bWFnICAgMjAgIC0xMCAgIC0+ICAgMQ0KLWN0bXgwNTMgY29tcGFyZXRvdG1hZyAgIDIwICAgMDAgICAtPiAgIDENCi1jdG14MDU1IGNvbXBhcmV0b3RtYWcgICAyMCAgIDEwICAgLT4gICAxDQotY3RteDA1NiBjb21wYXJldG90bWFnICAgMjAgICAyMCAgIC0+ICAgMA0KLQ0KLWN0bXgwNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMA0KLWN0bXgwNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQ0KLWN0bXgwNjMgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDAuMCAgIC0+ICAgMQ0KLWN0bXgwNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQ0KLWN0bXgwNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMA0KLWN0bXgwNjYgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTIuMCAgIC0+ICAtMQ0KLWN0bXgwNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMA0KLWN0bXgwNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQ0KLWN0bXgwNjkgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDEuMCAgIC0+ICAgMA0KLWN0bXgwNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQ0KLWN0bXgwNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQ0KLWN0bXgwNzIgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTEuMCAgIC0+ICAtMQ0KLWN0bXgwNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMA0KLWN0bXgwNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQ0KLWN0bXgwNzUgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDIuMCAgIC0+ICAtMQ0KLWN0bXgwNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQ0KLWN0bXgwNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMA0KLWN0bXgwNzggY29tcGFyZXRvdG1hZyAgIDEuMCAgIDAuMCAgIC0+ICAgMQ0KLWN0bXgwNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMA0KLWN0bXgwODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQ0KLWN0bXgwODEgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTIuMCAgIC0+ICAgMA0KLWN0bXgwODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQ0KLWN0bXgwODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQ0KLWN0bXgwODUgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDEuMCAgIC0+ICAgMQ0KLWN0bXgwODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMA0KLQ0KLS0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KLW1heGV4cG9uZW50OiA5OTk5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OTk5OQ0KLWN0bXgwOTAgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgIC0+ICAgMA0KLWN0bXgwOTEgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgIC0+ICAgMA0KLWN0bXgwOTIgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+ICAgMA0KLWN0bXgwOTMgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+ICAgMA0KLQ0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KLS0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwNCi1jdG14MTAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNy4wICAgICAtPiAgIDANCi1jdG14MTAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNyAgICAgICAtPiAgLTENCi1jdG14MTAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNy4wICAgICAtPiAgIDENCi1jdG14MTAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgNy4wICAgICAtPiAgIDENCi1jdG14MTA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNy4wICAgICAtPiAgIDANCi1jdG14MTA1IGNvbXBhcmV0b3RtYWcgICAwLjdFKzEgNyAgICAgICAtPiAgIDANCi1jdG14MTA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNyAgICAgICAtPiAgLTENCi1jdG14MTA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgN0UrMCAgICAtPiAgLTENCi1jdG14MTA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNzBFLTEgICAtPiAgIDANCi1jdG14MTA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgMC43RSsxICAtPiAgIDANCi1jdG14MTEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNzBFLTEgICAtPiAgIDENCi0NCi1jdG14MTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDENCi1jdG14MTIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNyAgICAgICAtPiAgIDENCi1jdG14MTIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNy4wICAgICAtPiAgIDENCi1jdG14MTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDENCi1jdG14MTI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNy4wICAgICAtPiAgIDENCi1jdG14MTI1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgNyAgICAgICAtPiAgIDENCi1jdG14MTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDENCi1jdG14MTI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgN0UrMCAgICAtPiAgIDENCi1jdG14MTI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNzBFLTEgICAtPiAgIDENCi1jdG14MTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxDQotY3RteDEzMCBjb21wYXJldG90bWFnICAgOCAgICAgIDcwRS0xICAgLT4gICAxDQotDQotY3RteDE0MCBjb21wYXJldG90bWFnICAgOC4wICAgIDkuMCAgICAgLT4gIC0xDQotY3RteDE0MSBjb21wYXJldG90bWFnICAgOC4wICAgIDkgICAgICAgLT4gIC0xDQotY3RteDE0MiBjb21wYXJldG90bWFnICAgOCAgICAgIDkuMCAgICAgLT4gIC0xDQotY3RteDE0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIDkuMCAgICAgLT4gIC0xDQotY3RteDE0NCBjb21wYXJldG90bWFnICAgODBFLTEgIDkuMCAgICAgLT4gIC0xDQotY3RteDE0NSBjb21wYXJldG90bWFnICAgMC44RSsxIDkgICAgICAgLT4gIC0xDQotY3RteDE0NiBjb21wYXJldG90bWFnICAgODBFLTEgIDkgICAgICAgLT4gIC0xDQotY3RteDE0NyBjb21wYXJldG90bWFnICAgOC4wICAgIDlFKzAgICAgLT4gIC0xDQotY3RteDE0OCBjb21wYXJldG90bWFnICAgOC4wICAgIDkwRS0xICAgLT4gIC0xDQotY3RteDE0OSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuOUUrMSAgLT4gIC0xDQotY3RteDE1MCBjb21wYXJldG90bWFnICAgOCAgICAgIDkwRS0xICAgLT4gIC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLg0KLWN0bXgyMDAgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3LjAgICAgIC0+ICAgMA0KLWN0bXgyMDEgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3ICAgICAgIC0+ICAtMQ0KLWN0bXgyMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQ0KLWN0bXgyMDMgY29tcGFyZXRvdG1hZyAgLTdFKzAgICA3LjAgICAgIC0+ICAgMQ0KLWN0bXgyMDQgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3LjAgICAgIC0+ICAgMA0KLWN0bXgyMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMA0KLWN0bXgyMDYgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3ICAgICAgIC0+ICAtMQ0KLWN0bXgyMDcgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3RSswICAgIC0+ICAtMQ0KLWN0bXgyMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMA0KLWN0bXgyMDkgY29tcGFyZXRvdG1hZyAgLTcgICAgICAwLjdFKzEgIC0+ICAgMA0KLWN0bXgyMTAgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3MEUtMSAgIC0+ICAgMQ0KLQ0KLWN0bXgyMjAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3LjAgICAgIC0+ICAgMQ0KLWN0bXgyMjEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3ICAgICAgIC0+ICAgMQ0KLWN0bXgyMjIgY29tcGFyZXRvdG1hZyAgLTggICAgICA3LjAgICAgIC0+ICAgMQ0KLWN0bXgyMjMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA3LjAgICAgIC0+ICAgMQ0KLWN0bXgyMjQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3LjAgICAgIC0+ICAgMQ0KLWN0bXgyMjUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA3ICAgICAgIC0+ICAgMQ0KLWN0bXgyMjYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3ICAgICAgIC0+ICAgMQ0KLWN0bXgyMjcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3RSswICAgIC0+ICAgMQ0KLWN0bXgyMjggY29tcGFyZXRvdG1hZyAgLTguMCAgICA3MEUtMSAgIC0+ICAgMQ0KLWN0bXgyMjkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjdFKzEgIC0+ICAgMQ0KLWN0bXgyMzAgY29tcGFyZXRvdG1hZyAgLTggICAgICA3MEUtMSAgIC0+ICAgMQ0KLQ0KLWN0bXgyNDAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5LjAgICAgIC0+ICAtMQ0KLWN0bXgyNDEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5ICAgICAgIC0+ICAtMQ0KLWN0bXgyNDIgY29tcGFyZXRvdG1hZyAgLTggICAgICA5LjAgICAgIC0+ICAtMQ0KLWN0bXgyNDMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA5LjAgICAgIC0+ICAtMQ0KLWN0bXgyNDQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5LjAgICAgIC0+ICAtMQ0KLWN0bXgyNDUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA5ICAgICAgIC0+ICAtMQ0KLWN0bXgyNDYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5ICAgICAgIC0+ICAtMQ0KLWN0bXgyNDcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5RSswICAgIC0+ICAtMQ0KLWN0bXgyNDggY29tcGFyZXRvdG1hZyAgLTguMCAgICA5MEUtMSAgIC0+ICAtMQ0KLWN0bXgyNDkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjlFKzEgIC0+ICAtMQ0KLWN0bXgyNTAgY29tcGFyZXRvdG1hZyAgLTggICAgICA5MEUtMSAgIC0+ICAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4NCi1jdG14MzAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcuMCAgICAgLT4gICAwDQotY3RteDMwMSBjb21wYXJldG90bWFnICAgNy4wICAgIC03ICAgICAgIC0+ICAtMQ0KLWN0bXgzMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNy4wICAgICAtPiAgIDENCi1jdG14MzAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgLTcuMCAgICAgLT4gICAxDQotY3RteDMwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIC03LjAgICAgIC0+ICAgMA0KLWN0bXgzMDUgY29tcGFyZXRvdG1hZyAgIC43RSsxICAtNyAgICAgICAtPiAgIDANCi1jdG14MzA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcgICAgICAgLT4gIC0xDQotY3RteDMwNyBjb21wYXJldG90bWFnICAgNy4wICAgIC03RSswICAgIC0+ICAtMQ0KLWN0bXgzMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNzBFLTEgICAtPiAgIDANCi1jdG14MzA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLS43RSsxICAgLT4gICAwDQotY3RteDMxMCBjb21wYXJldG90bWFnICAgNyAgICAgIC03MEUtMSAgIC0+ICAgMQ0KLQ0KLWN0bXgzMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNy4wICAgICAtPiAgIDENCi1jdG14MzIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcgICAgICAgLT4gICAxDQotY3RteDMyMiBjb21wYXJldG90bWFnICAgOCAgICAgIC03LjAgICAgIC0+ICAgMQ0KLWN0bXgzMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtNy4wICAgICAtPiAgIDENCi1jdG14MzI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcuMCAgICAgLT4gICAxDQotY3RteDMyNSBjb21wYXJldG90bWFnICAgLjhFKzEgIC03ICAgICAgIC0+ICAgMQ0KLWN0bXgzMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNyAgICAgICAtPiAgIDENCi1jdG14MzI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTdFKzAgICAgLT4gICAxDQotY3RteDMyOCBjb21wYXJldG90bWFnICAgOC4wICAgIC03MEUtMSAgIC0+ICAgMQ0KLWN0bXgzMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjdFKzEgICAtPiAgIDENCi1jdG14MzMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcwRS0xICAgLT4gICAxDQotDQotY3RteDM0MCBjb21wYXJldG90bWFnICAgOC4wICAgIC05LjAgICAgIC0+ICAtMQ0KLWN0bXgzNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTENCi1jdG14MzQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkuMCAgICAgLT4gIC0xDQotY3RteDM0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIC05LjAgICAgIC0+ICAtMQ0KLWN0bXgzNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTENCi1jdG14MzQ1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTkgICAgICAgLT4gIC0xDQotY3RteDM0NiBjb21wYXJldG90bWFnICAgODBFLTEgIC05ICAgICAgIC0+ICAtMQ0KLWN0bXgzNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTENCi1jdG14MzQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkwRS0xICAgLT4gIC0xDQotY3RteDM0OSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uOUUrMSAgIC0+ICAtMQ0KLWN0bXgzNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uDQotY3RteDQwMCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNy4wICAgICAtPiAgIDANCi1jdG14NDAxIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03ICAgICAgIC0+ICAtMQ0KLWN0bXg0MDIgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcuMCAgICAgLT4gICAxDQotY3RteDQwMyBjb21wYXJldG90bWFnICAgLTdFKzAgICAtNy4wICAgICAtPiAgIDENCi1jdG14NDA0IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03LjAgICAgIC0+ICAgMA0KLWN0bXg0MDUgY29tcGFyZXRvdG1hZyAgIC0uN0UrMSAgLTcgICAgICAgLT4gICAwDQotY3RteDQwNiBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNyAgICAgICAtPiAgLTENCi1jdG14NDA3IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03RSswICAgIC0+ICAtMQ0KLWN0bXg0MDggY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcwRS0xICAgLT4gICAwDQotY3RteDQwOSBjb21wYXJldG90bWFnICAgLTcgICAgICAtLjdFKzEgICAtPiAgIDANCi1jdG14NDEwIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03MEUtMSAgIC0+ICAgMQ0KLQ0KLWN0bXg0MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxDQotY3RteDQyMSBjb21wYXJldG90bWFnICAgLTguMCAgICAtNyAgICAgICAtPiAgIDENCi1jdG14NDIyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03LjAgICAgIC0+ICAgMQ0KLWN0bXg0MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxDQotY3RteDQyNCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNy4wICAgICAtPiAgIDENCi1jdG14NDI1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC03ICAgICAgIC0+ICAgMQ0KLWN0bXg0MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxDQotY3RteDQyNyBjb21wYXJldG90bWFnICAgLTguMCAgICAtN0UrMCAgICAtPiAgIDENCi1jdG14NDI4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03MEUtMSAgIC0+ICAgMQ0KLWN0bXg0MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxDQotY3RteDQzMCBjb21wYXJldG90bWFnICAgLTggICAgICAtNzBFLTEgICAtPiAgIDENCi0NCi1jdG14NDQwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05LjAgICAgIC0+ICAtMQ0KLWN0bXg0NDEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkgICAgICAgLT4gIC0xDQotY3RteDQ0MiBjb21wYXJldG90bWFnICAgLTggICAgICAtOS4wICAgICAtPiAgLTENCi1jdG14NDQzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC05LjAgICAgIC0+ICAtMQ0KLWN0bXg0NDQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkuMCAgICAgLT4gIC0xDQotY3RteDQ0NSBjb21wYXJldG90bWFnICAgLS44RSsxICAtOSAgICAgICAtPiAgLTENCi1jdG14NDQ2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05ICAgICAgIC0+ICAtMQ0KLWN0bXg0NDcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTlFKzAgICAgLT4gIC0xDQotY3RteDQ0OCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOTBFLTEgICAtPiAgLTENCi1jdG14NDQ5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uOUUrMSAgIC0+ICAtMQ0KLWN0bXg0NTAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkwRS0xICAgLT4gIC0xDQotDQotDQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQotcHJlY2lzaW9uOiA0MA0KLWN0bXg0NzAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KLWN0bXg0NzEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQotY3RteDQ3MiBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KLWN0bXg0NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWN0bXg0NzQgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xDQotY3RteDQ3NSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWN0bXg0NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KLWN0bXg0NzcgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQotY3RteDQ3OCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KLWN0bXg0NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWN0bXg0ODAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xDQotY3RteDQ4MSBjb21wYXJldG90bWFnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWN0bXg0ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KLWN0bXg0ODMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAgLT4gICAwDQotY3RteDQ4NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMDAwRS04OSAgLT4gICAxDQotY3RteDQ4NSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwMDBFNzg5ICAtPiAgIDENCi1jdG14NDg2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwRS04OSAgLT4gICAxDQotY3RteDQ4NyBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwRTc4OSAgLT4gICAxDQotY3RteDQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDENCi1jdG14NDg5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwRTc4OSAgLT4gICAxDQotY3RteDQ5MCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAgLT4gICAxDQotY3RteDQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDBFNzg5ICAtPiAgIDENCi1jdG14NDkyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAgLT4gICAxDQotY3RteDQ5MyBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwRTc4OSAgLT4gICAxDQotY3RteDQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDENCi1jdG14NDk1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwRTc4OSAgLT4gICAxDQotY3RteDQ5NiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAgLT4gICAxDQotY3RteDQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTZFNzg5ICAtPiAgIDANCi0NCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQotcHJlY2lzaW9uOiA5DQotY3RteDUwMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE1ICAgICAtPiAgIDENCi1jdG14NTAxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTQgICAgIC0+ICAgMQ0KLWN0bXg1MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxDQotY3RteDUwMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEyICAgICAtPiAgIDENCi1jdG14NTA0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTEgICAgIC0+ICAgMQ0KLWN0bXg1MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxDQotY3RteDUwNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTkgICAgICAtPiAgIDENCi1jdG14NTA3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOCAgICAgIC0+ICAgMQ0KLWN0bXg1MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxDQotY3RteDUwOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTYgICAgICAtPiAgIDENCi1jdG14NTEwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNSAgICAgIC0+ICAgMQ0KLWN0bXg1MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxDQotY3RteDUxMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTMgICAgICAtPiAgIDENCi1jdG14NTEzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMiAgICAgIC0+ICAgMQ0KLWN0bXg1MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxDQotY3RteDUxNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTAgICAgICAtPiAgIDANCi1jdG14NTE2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMSAgICAgIC0+ICAtMQ0KLWN0bXg1MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xDQotY3RteDUxOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzMgICAgICAtPiAgLTENCi1jdG14NTE5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNCAgICAgIC0+ICAtMQ0KLWN0bXg1MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xDQotY3RteDUyMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzYgICAgICAtPiAgLTENCi1jdG14NTIzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNyAgICAgIC0+ICAtMQ0KLWN0bXg1MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xDQotY3RteDUyNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzkgICAgICAtPiAgLTENCi1jdG14NTI2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTAgICAgIC0+ICAtMQ0KLWN0bXg1MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xDQotY3RteDUyOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEyICAgICAtPiAgLTENCi1jdG14NTI5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTMgICAgIC0+ICAtMQ0KLWN0bXg1MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xDQotY3RteDUzMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE1ICAgICAtPiAgLTENCi0tLSBMUiBzd2FwDQotY3RteDU0MCBjb21wYXJldG90bWFnICAgIDFFLTE1ICAxICAgICAgICAtPiAgLTENCi1jdG14NTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQ0KLWN0bXg1NDIgY29tcGFyZXRvdG1hZyAgICAxRS0xMyAgMSAgICAgICAgLT4gIC0xDQotY3RteDU0MyBjb21wYXJldG90bWFnICAgIDFFLTEyICAxICAgICAgICAtPiAgLTENCi1jdG14NTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQ0KLWN0bXg1NDUgY29tcGFyZXRvdG1hZyAgICAxRS0xMCAgMSAgICAgICAgLT4gIC0xDQotY3RteDU0NiBjb21wYXJldG90bWFnICAgIDFFLTkgICAxICAgICAgICAtPiAgLTENCi1jdG14NTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQ0KLWN0bXg1NDggY29tcGFyZXRvdG1hZyAgICAxRS03ICAgMSAgICAgICAgLT4gIC0xDQotY3RteDU0OSBjb21wYXJldG90bWFnICAgIDFFLTYgICAxICAgICAgICAtPiAgLTENCi1jdG14NTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQ0KLWN0bXg1NTEgY29tcGFyZXRvdG1hZyAgICAxRS00ICAgMSAgICAgICAgLT4gIC0xDQotY3RteDU1MiBjb21wYXJldG90bWFnICAgIDFFLTMgICAxICAgICAgICAtPiAgLTENCi1jdG14NTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQ0KLWN0bXg1NTQgY29tcGFyZXRvdG1hZyAgICAxRS0xICAgMSAgICAgICAgLT4gIC0xDQotY3RteDU1NSBjb21wYXJldG90bWFnICAgIDFFLTAgICAxICAgICAgICAtPiAgIDANCi1jdG14NTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQ0KLWN0bXg1NTcgY29tcGFyZXRvdG1hZyAgICAxRSsyICAgMSAgICAgICAgLT4gICAxDQotY3RteDU1OCBjb21wYXJldG90bWFnICAgIDFFKzMgICAxICAgICAgICAtPiAgIDENCi1jdG14NTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQ0KLWN0bXg1NjEgY29tcGFyZXRvdG1hZyAgICAxRSs1ICAgMSAgICAgICAgLT4gICAxDQotY3RteDU2MiBjb21wYXJldG90bWFnICAgIDFFKzYgICAxICAgICAgICAtPiAgIDENCi1jdG14NTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQ0KLWN0bXg1NjQgY29tcGFyZXRvdG1hZyAgICAxRSs4ICAgMSAgICAgICAgLT4gICAxDQotY3RteDU2NSBjb21wYXJldG90bWFnICAgIDFFKzkgICAxICAgICAgICAtPiAgIDENCi1jdG14NTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQ0KLWN0bXg1NjcgY29tcGFyZXRvdG1hZyAgICAxRSsxMSAgMSAgICAgICAgLT4gICAxDQotY3RteDU2OCBjb21wYXJldG90bWFnICAgIDFFKzEyICAxICAgICAgICAtPiAgIDENCi1jdG14NTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQ0KLWN0bXg1NzAgY29tcGFyZXRvdG1hZyAgICAxRSsxNCAgMSAgICAgICAgLT4gICAxDQotY3RteDU3MSBjb21wYXJldG90bWFnICAgIDFFKzE1ICAxICAgICAgICAtPiAgIDENCi0tLSBzaW1pbGFyIHdpdGggYW4gdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5DQotY3RteDU4MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgIC0+ICAgMQ0KLWN0bXg1ODEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgICAtPiAgIDENCi1jdG14NTgyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAgLT4gICAxDQotY3RteDU4MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgIC0+ICAgMQ0KLWN0bXg1ODQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgICAtPiAgIDENCi1jdG14NTg1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAgLT4gICAxDQotY3RteDU4NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgIC0+ICAgMQ0KLWN0bXg1ODcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgICAtPiAgIDENCi1jdG14NTg4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAgLT4gICAxDQotY3RteDU4OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgIC0+ICAtMQ0KLWN0bXg1OTAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgICAtPiAgLTENCi1jdG14NTkxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAgLT4gIC0xDQotY3RteDU5MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgIC0+ICAtMQ0KLWN0bXg1OTMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgICAtPiAgLTENCi1jdG14NTk0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAgLT4gIC0xDQotY3RteDU5NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgIC0+ICAtMQ0KLWN0bXg1OTYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgICAtPiAgLTENCi1jdG14NTk3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAgLT4gIC0xDQotY3RteDU5OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgIC0+ICAtMQ0KLWN0bXg1OTkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgICAtPiAgLTENCi0NCi0tLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcw0KLXByZWNpc2lvbjogMjANCi1jdG14NjAwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MDEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xDQotY3RteDYwMiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1jdG14NjAzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MDQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAgLT4gIC0xDQotY3RteDYwNSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1jdG14NjA2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MDcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAgLT4gIC0xDQotY3RteDYwOCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1ICAtPiAgLTENCi1jdG14NjA5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MTAgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAgLT4gICAxDQotY3RteDYxMSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wICAgICAgICAgICAtPiAgIDENCi1jdG14NjEyIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgIC0+ICAgMQ0KLWN0bXg2MTMgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAgLT4gICAxDQotY3RteDYxNCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgICAtPiAgIDENCi1jdG14NjE1IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgIC0+ICAgMQ0KLWN0bXg2MTYgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAgLT4gICAxDQotY3RteDYxNyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgICAtPiAgIDENCi1jdG14NjE4IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgIC0+ICAgMQ0KLWN0bXg2MTkgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAgLT4gICAxDQotY3RteDYyMCBjb21wYXJldG90bWFnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1jdG14NjIxIGNvbXBhcmV0b3RtYWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MjIgY29tcGFyZXRvdG1hZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAgLT4gIC0xDQotY3RteDYyMyBjb21wYXJldG90bWFnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1jdG14NjI0IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MjUgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAgLT4gIC0xDQotY3RteDYyNiBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1jdG14NjI3IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MjggY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAgLT4gIC0xDQotY3RteDYyOSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1ICAtPiAgLTENCi1jdG14NjMwIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgIC0+ICAgMQ0KLWN0bXg2MzEgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAgLT4gICAxDQotY3RteDYzMiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgICAtPiAgIDENCi1jdG14NjMzIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgIC0+ICAgMQ0KLWN0bXg2MzQgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAgLT4gICAxDQotY3RteDYzNSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgICAtPiAgIDENCi1jdG14NjM2IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgIC0+ICAgMQ0KLWN0bXg2MzcgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAgLT4gICAxDQotY3RteDYzOCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgICAtPiAgIDENCi1jdG14NjM5IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgIC0+ICAgMQ0KLXByZWNpc2lvbjogOQ0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotY3RteDY0MCBjb21wYXJldG90bWFnICAgMCAgICAgMCAgICAtPiAgIDANCi1jdG14NjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMA0KLWN0bXg2NDIgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAuMCAgLT4gICAxDQotY3RteDY0MyBjb21wYXJldG90bWFnICAgMCAgICAgMC4wICAtPiAgIDENCi1jdG14NjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMA0KLWN0bXg2NDUgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAgICAgLT4gICAwDQotY3RteDY0NiBjb21wYXJldG90bWFnICAtMCAgICAtMC4wICAtPiAgIDENCi1jdG14NjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQ0KLWN0bXg2NDggY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAgICAgLT4gIC0xDQotY3RteDY0OSBjb21wYXJldG90bWFnICAgMC4wICAtMCAgICAtPiAgLTENCi1jdG14NjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMA0KLWN0bXg2NTEgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgLT4gICAwDQotY3RteDY1MiBjb21wYXJldG90bWFnICAtMC4wICAgMCAgICAtPiAgLTENCi1jdG14NjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQ0KLWN0bXg2NTQgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAuMCAgLT4gICAwDQotY3RteDY1NSBjb21wYXJldG90bWFnICAtMC4wICAgMC4wICAtPiAgIDANCi0NCi1jdG14NjU2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwLjAgIC0+ICAgMQ0KLWN0bXg2NTcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAuMCAgLT4gICAxDQotY3RteDY1OCBjb21wYXJldG90bWFnICAgMEUxICAgMC4wICAtPiAgIDENCi1jdG14NjU5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwLjAgIC0+ICAgMQ0KLWN0bXg2NjAgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAgICAgLT4gICAxDQotY3RteDY2MSBjb21wYXJldG90bWFnICAtMEUyICAgMCAgICAtPiAgIDENCi1jdG14NjYyIGNvbXBhcmV0b3RtYWcgICAwRTEgICAwICAgIC0+ICAgMQ0KLWN0bXg2NjMgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAgICAgLT4gICAxDQotY3RteDY2NCBjb21wYXJldG90bWFnICAtMEUxICAtMEUxICAtPiAgIDANCi1jdG14NjY1IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTEgIC0+ICAgMQ0KLWN0bXg2NjYgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMSAgLT4gICAwDQotY3RteDY2NyBjb21wYXJldG90bWFnICAgMEUyICAtMEUxICAtPiAgIDENCi1jdG14NjY4IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTIgIC0+ICAtMQ0KLWN0bXg2NjkgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMiAgLT4gICAwDQotY3RteDY3MCBjb21wYXJldG90bWFnICAgMEUxICAtMEUyICAtPiAgLTENCi1jdG14NjcxIGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTIgIC0+ICAgMA0KLWN0bXg2NzIgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMSAgLT4gICAwDQotY3RteDY3MyBjb21wYXJldG90bWFnICAtMEUyICAgMEUxICAtPiAgIDENCi1jdG14Njc0IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTEgIC0+ICAgMA0KLWN0bXg2NzUgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMSAgLT4gICAxDQotY3RteDY3NiBjb21wYXJldG90bWFnICAtMEUxICAgMEUyICAtPiAgLTENCi1jdG14Njc3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTIgIC0+ICAgMA0KLWN0bXg2NzggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMiAgLT4gIC0xDQotY3RteDY3OSBjb21wYXJldG90bWFnICAgMEUyICAgMEUyICAtPiAgIDANCi0NCi0tLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQotcHJlY2lzaW9uOiAyMA0KLWN0bXg2ODAgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyICAgICAgICAgICAgLT4gICAwDQotY3RteDY4MSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMCAgICAgICAgICAtPiAgIDENCi1jdG14NjgyIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMCAgICAgICAgIC0+ICAgMQ0KLWN0bXg2ODMgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMCAgICAgICAgLT4gICAxDQotY3RteDY4NCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMCAgICAgICAtPiAgIDENCi1jdG14Njg1IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMCAgICAgIC0+ICAgMQ0KLWN0bXg2ODYgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMCAgICAgLT4gICAxDQotY3RteDY4NyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMCAgICAtPiAgIDENCi1jdG14Njg4IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMCAgIC0+ICAgMQ0KLWN0bXg2ODkgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAgLT4gICAxDQotY3RteDY5MCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAgIDEyICAtPiAgIDANCi1jdG14NjkxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgICAgMTIgIC0+ICAtMQ0KLWN0bXg2OTIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgICAxMiAgLT4gIC0xDQotY3RteDY5MyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAgIDEyICAtPiAgLTENCi1jdG14Njk0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgICAgMTIgIC0+ICAtMQ0KLWN0bXg2OTUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgICAxMiAgLT4gIC0xDQotY3RteDY5NiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAgIDEyICAtPiAgLTENCi1jdG14Njk3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgICAgMTIgIC0+ICAtMQ0KLWN0bXg2OTggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgICAxMiAgLT4gIC0xDQotY3RteDY5OSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAgIDEyICAtPiAgLTENCi0NCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzDQotbWF4ZXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotcHJlY2lzaW9uOiA5DQotY3RteDcwMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAwICAxICAtPiAgIDENCi1jdG14NzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQ0KLWN0bXg3MDMgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwICAgMSAgLT4gICAxDQotY3RteDcwNCBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMCAgICAtPiAgLTENCi1jdG14NzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQ0KLWN0bXg3MDYgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAgICAgLT4gIC0xDQotY3RteDcwNyBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTEgICAxICAtPiAgIDENCi1jdG14NzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQ0KLWN0bXg3MDkgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwMSAgMSAgLT4gICAxDQotY3RteDcxMCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAgLTENCi1jdG14NzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQ0KLWN0bXg3MTIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gIC0xDQotY3RteDcxMyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkxICAxICAtPiAgIDENCi1jdG14NzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQ0KLWN0bXg3MTUgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gICAxDQotY3RteDcxNiBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAgLTENCi1jdG14NzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQ0KLWN0bXg3MTggY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gIC0xDQotDQotcHJlY2lzaW9uOiAxNQ0KLS0tIHNhbWUgd2l0aCBwbGVudHkgb2YgcHJlY2lzaW9uDQotY3RteDcyMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAwIDEgIC0+ICAgMQ0KLWN0bXg3MjIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAgLTENCi1jdG14NzIzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgMSAgLT4gICAxDQotY3RteDcyNCBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMCAgIC0+ICAtMQ0KLWN0bXg3MjUgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwICAxICAtPiAgIDENCi1jdG14NzI2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgLT4gIC0xDQotY3RteDcyNyBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTEgIDEgIC0+ICAgMQ0KLWN0bXg3MjggY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAgLTENCi1jdG14NzI5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gICAxDQotY3RteDczMCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MDEgIC0+ICAtMQ0KLWN0bXg3MzEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODk2ICAxICAtPiAgIDENCi1jdG14NzMyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgLT4gIC0xDQotDQotLS0gcmVzaWR1ZSBjYXNlcw0KLXByZWNpc2lvbjogNQ0KLWN0bXg3NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxDQotY3RteDc0MSBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OSAgICAtPiAgIDENCi1jdG14NzQyIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTkgICAgIC0+ICAgMQ0KLWN0bXg3NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxDQotY3RteDc0NCBjb21wYXJldG90bWFnICAxICAxLjAwMDAxICAgICAtPiAgLTENCi1jdG14NzQ1IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAxICAgIC0+ICAtMQ0KLWN0bXg3NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xDQotY3RteDc1MCBjb21wYXJldG90bWFnICAwLjk5OTk5OTkgIDEgICAtPiAgLTENCi1jdG14NzUxIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5ICAgMSAgIC0+ICAtMQ0KLWN0bXg3NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xDQotY3RteDc1MyBjb21wYXJldG90bWFnICAxLjAwMDAgICAgIDEgICAtPiAgLTENCi1jdG14NzU0IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDEgICAgMSAgIC0+ICAgMQ0KLWN0bXg3NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxDQotY3RteDc1NiBjb21wYXJldG90bWFnICAxLjAwMDAwMDEgIDEgICAtPiAgIDENCi0NCi0tLSBhIHNlbGVjdGlvbiBvZiBsb25naWVzDQotY3RteDc2MCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYyOS44MzQ3MDg1MDI1ODA4NzU2NTYwMzU3OTQwICAtPiAgIDENCi1jdG14NzYxIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAgMA0KLWN0bXg3NjIgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gICAxDQotY3RteDc2MyBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCi0tLSBwcmVjaXNpb25zIGFib3ZlIG9yIGJlbG93IHRoZSBkaWZmZXJlbmNlIHNob3VsZCBoYXZlIG5vIGVmZmVjdA0KLXByZWNpc2lvbjogICAxMQ0KLWN0bXg3NjQgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQotcHJlY2lzaW9uOiAgIDEwDQotY3RteDc2NSBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCi1wcmVjaXNpb246ICAgIDkNCi1jdG14NzY2IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQ0KLXByZWNpc2lvbjogICAgOA0KLWN0bXg3NjcgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQotcHJlY2lzaW9uOiAgICA3DQotY3RteDc2OCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCi1wcmVjaXNpb246ICAgIDYNCi1jdG14NzY5IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQ0KLXByZWNpc2lvbjogICAgNQ0KLWN0bXg3NzAgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQotcHJlY2lzaW9uOiAgICA0DQotY3RteDc3MSBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCi1wcmVjaXNpb246ICAgIDMNCi1jdG14NzcyIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQ0KLXByZWNpc2lvbjogICAgMg0KLWN0bXg3NzMgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQotcHJlY2lzaW9uOiAgICAxDQotY3RteDc3NCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCi0NCi0tLSBTcGVjaWFscw0KLXByZWNpc2lvbjogICA5DQotY3RteDc4MCBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMA0KLWN0bXg3ODEgY29tcGFyZXRvdG1hZyAgSW5mICAtMTAwMCAgLT4gIDENCi1jdG14NzgyIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEgICAgIC0+ICAxDQotY3RteDc4MyBjb21wYXJldG90bWFnICBJbmYgIC0wICAgICAtPiAgMQ0KLWN0bXg3ODQgY29tcGFyZXRvdG1hZyAgSW5mICAgMCAgICAgLT4gIDENCi1jdG14Nzg1IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEgICAgIC0+ICAxDQotY3RteDc4NiBjb21wYXJldG90bWFnICBJbmYgICAxMDAwICAtPiAgMQ0KLWN0bXg3ODcgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDANCi1jdG14Nzg4IGNvbXBhcmV0b3RtYWcgLTEwMDAgIEluZiAgIC0+IC0xDQotY3RteDc4OSBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMA0KLWN0bXg3OTAgY29tcGFyZXRvdG1hZyAtMSAgICAgSW5mICAgLT4gLTENCi1jdG14NzkxIGNvbXBhcmV0b3RtYWcgLTAgICAgIEluZiAgIC0+IC0xDQotY3RteDc5MiBjb21wYXJldG90bWFnICAwICAgICBJbmYgICAtPiAtMQ0KLWN0bXg3OTMgY29tcGFyZXRvdG1hZyAgMSAgICAgSW5mICAgLT4gLTENCi1jdG14Nzk0IGNvbXBhcmV0b3RtYWcgIDEwMDAgIEluZiAgIC0+IC0xDQotY3RteDc5NSBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMA0KLQ0KLWN0bXg4MDAgY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDANCi1jdG14ODAxIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEwMDAgIC0+ICAxDQotY3RteDgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQ0KLWN0bXg4MDMgY29tcGFyZXRvdG1hZyAtSW5mICAtMCAgICAgLT4gIDENCi1jdG14ODA0IGNvbXBhcmV0b3RtYWcgLUluZiAgIDAgICAgIC0+ICAxDQotY3RteDgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQ0KLWN0bXg4MDYgY29tcGFyZXRvdG1hZyAtSW5mICAgMTAwMCAgLT4gIDENCi1jdG14ODA3IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwDQotY3RteDgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMA0KLWN0bXg4MDkgY29tcGFyZXRvdG1hZyAtMTAwMCAtSW5mICAgLT4gLTENCi1jdG14ODEwIGNvbXBhcmV0b3RtYWcgLTEgICAgLUluZiAgIC0+IC0xDQotY3RteDgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQ0KLWN0bXg4MTIgY29tcGFyZXRvdG1hZyAgMCAgICAtSW5mICAgLT4gLTENCi1jdG14ODEzIGNvbXBhcmV0b3RtYWcgIDEgICAgLUluZiAgIC0+IC0xDQotY3RteDgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQ0KLWN0bXg4MTUgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDANCi0NCi1jdG14ODIxIGNvbXBhcmV0b3RtYWcgIE5hTiAtSW5mICAgIC0+ICAxDQotY3RteDgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQ0KLWN0bXg4MjMgY29tcGFyZXRvdG1hZyAgTmFOIC0xICAgICAgLT4gIDENCi1jdG14ODI0IGNvbXBhcmV0b3RtYWcgIE5hTiAtMCAgICAgIC0+ICAxDQotY3RteDgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQ0KLWN0bXg4MjYgY29tcGFyZXRvdG1hZyAgTmFOICAxICAgICAgLT4gIDENCi1jdG14ODI3IGNvbXBhcmV0b3RtYWcgIE5hTiAgMTAwMCAgIC0+ICAxDQotY3RteDgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQ0KLWN0bXg4MjkgY29tcGFyZXRvdG1hZyAgTmFOICBOYU4gICAgLT4gIDANCi1jdG14ODMwIGNvbXBhcmV0b3RtYWcgLUluZiAgTmFOICAgIC0+ICAtMQ0KLWN0bXg4MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xDQotY3RteDgzMiBjb21wYXJldG90bWFnIC0xICAgIE5hTiAgICAtPiAgLTENCi1jdG14ODMzIGNvbXBhcmV0b3RtYWcgLTAgICAgTmFOICAgIC0+ICAtMQ0KLWN0bXg4MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xDQotY3RteDgzNSBjb21wYXJldG90bWFnICAxICAgIE5hTiAgICAtPiAgLTENCi1jdG14ODM2IGNvbXBhcmV0b3RtYWcgIDEwMDAgTmFOICAgIC0+ICAtMQ0KLWN0bXg4MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xDQotY3RteDgzOCBjb21wYXJldG90bWFnIC1OYU4gLU5hTiAgICAtPiAgMA0KLWN0bXg4MzkgY29tcGFyZXRvdG1hZyArTmFOIC1OYU4gICAgLT4gIDANCi1jdG14ODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwDQotDQotY3RteDg0MSBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAtPiAgMA0KLWN0bXg4NDIgY29tcGFyZXRvdG1hZyAgc05hTiAtTmFOICAgLT4gIC0xDQotY3RteDg0MyBjb21wYXJldG90bWFnICBzTmFOIC1JbmYgICAtPiAgMQ0KLWN0bXg4NDQgY29tcGFyZXRvdG1hZyAgc05hTiAtMTAwMCAgLT4gIDENCi1jdG14ODQ1IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEgICAgIC0+ICAxDQotY3RteDg0NiBjb21wYXJldG90bWFnICBzTmFOIC0wICAgICAtPiAgMQ0KLWN0bXg4NDcgY29tcGFyZXRvdG1hZyAgc05hTiAgMCAgICAgLT4gIDENCi1jdG14ODQ4IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEgICAgIC0+ICAxDQotY3RteDg0OSBjb21wYXJldG90bWFnICBzTmFOICAxMDAwICAtPiAgMQ0KLWN0bXg4NTAgY29tcGFyZXRvdG1hZyAgc05hTiAgTmFOICAgLT4gIC0xDQotY3RteDg1MSBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMA0KLQ0KLWN0bXg4NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDANCi1jdG14ODUzIGNvbXBhcmV0b3RtYWcgLU5hTiAgc05hTiAgIC0+ICAxDQotY3RteDg1NCBjb21wYXJldG90bWFnIC1JbmYgIHNOYU4gICAtPiAgLTENCi1jdG14ODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQ0KLWN0bXg4NTYgY29tcGFyZXRvdG1hZyAtMSAgICBzTmFOICAgLT4gIC0xDQotY3RteDg1NyBjb21wYXJldG90bWFnIC0wICAgIHNOYU4gICAtPiAgLTENCi1jdG14ODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQ0KLWN0bXg4NTkgY29tcGFyZXRvdG1hZyAgMSAgICBzTmFOICAgLT4gIC0xDQotY3RteDg2MCBjb21wYXJldG90bWFnICAxMDAwIHNOYU4gICAtPiAgLTENCi1jdG14ODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQ0KLWN0bXg4NjIgY29tcGFyZXRvdG1hZyAgTmFOICBzTmFOICAgLT4gIDENCi1jdG14ODYzIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwDQotDQotY3RteDg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDANCi1jdG14ODcyIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1OYU4gICAtPiAgLTENCi1jdG14ODczIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1JbmYgICAtPiAgMQ0KLWN0bXg4NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxDQotY3RteDg3NSBjb21wYXJldG90bWFnICAtc05hTiAtMSAgICAgLT4gIDENCi1jdG14ODc2IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0wICAgICAtPiAgMQ0KLWN0bXg4NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxDQotY3RteDg3OCBjb21wYXJldG90bWFnICAtc05hTiAgMSAgICAgLT4gIDENCi1jdG14ODc5IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxMDAwICAtPiAgMQ0KLWN0bXg4ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQ0KLWN0bXg4ODEgY29tcGFyZXRvdG1hZyAgLXNOYU4gc05hTiAgIC0+ICAwDQotDQotY3RteDg4MiBjb21wYXJldG90bWFnIC1zTmFOIC1zTmFOICAgLT4gIDANCi1jdG14ODgzIGNvbXBhcmV0b3RtYWcgLU5hTiAgLXNOYU4gICAtPiAgMQ0KLWN0bXg4ODQgY29tcGFyZXRvdG1hZyAtSW5mICAtc05hTiAgIC0+ICAtMQ0KLWN0bXg4ODUgY29tcGFyZXRvdG1hZyAtMTAwMCAtc05hTiAgIC0+ICAtMQ0KLWN0bXg4ODYgY29tcGFyZXRvdG1hZyAtMSAgICAtc05hTiAgIC0+ICAtMQ0KLWN0bXg4ODcgY29tcGFyZXRvdG1hZyAtMCAgICAtc05hTiAgIC0+ICAtMQ0KLWN0bXg4ODggY29tcGFyZXRvdG1hZyAgMCAgICAtc05hTiAgIC0+ICAtMQ0KLWN0bXg4ODkgY29tcGFyZXRvdG1hZyAgMSAgICAtc05hTiAgIC0+ICAtMQ0KLWN0bXg4OTAgY29tcGFyZXRvdG1hZyAgMTAwMCAtc05hTiAgIC0+ICAtMQ0KLWN0bXg4OTEgY29tcGFyZXRvdG1hZyAgSW5mICAtc05hTiAgIC0+ICAtMQ0KLWN0bXg4OTIgY29tcGFyZXRvdG1hZyAgTmFOICAtc05hTiAgIC0+ICAxDQotY3RteDg5MyBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAgLT4gIDANCi0NCi0tLSBOYU5zIHdpdGggcGF5bG9hZA0KLWN0bXg5NjAgY29tcGFyZXRvdG1hZyAgTmFOOSAtSW5mICAgLT4gIDENCi1jdG14OTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxDQotY3RteDk2MiBjb21wYXJldG90bWFnICBOYU43NyBJbmYgICAtPiAgMQ0KLWN0bXg5NjMgY29tcGFyZXRvdG1hZyAtTmFONjcgTmFONSAgLT4gIDENCi1jdG14OTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQ0KLWN0bXg5NjUgY29tcGFyZXRvdG1hZyAtOTk5ICAtTmFOMzMgLT4gIC0xDQotY3RteDk2NiBjb21wYXJldG90bWFnICBJbmYgICBOYU4yICAtPiAgLTENCi0NCi1jdG14OTcwIGNvbXBhcmV0b3RtYWcgLU5hTjQxIC1OYU40MiAtPiAtMQ0KLWN0bXg5NzEgY29tcGFyZXRvdG1hZyArTmFONDEgLU5hTjQyIC0+IC0xDQotY3RteDk3MiBjb21wYXJldG90bWFnIC1OYU40MSArTmFONDIgLT4gLTENCi1jdG14OTczIGNvbXBhcmV0b3RtYWcgK05hTjQxICtOYU40MiAtPiAtMQ0KLWN0bXg5NzQgY29tcGFyZXRvdG1hZyAtTmFONDIgLU5hTjAxIC0+ICAxDQotY3RteDk3NSBjb21wYXJldG90bWFnICtOYU40MiAtTmFOMDEgLT4gIDENCi1jdG14OTc2IGNvbXBhcmV0b3RtYWcgLU5hTjQyICtOYU4wMSAtPiAgMQ0KLWN0bXg5NzcgY29tcGFyZXRvdG1hZyArTmFONDIgK05hTjAxIC0+ICAxDQotDQotY3RteDk4MCBjb21wYXJldG90bWFnIC1zTmFONzcxIC1zTmFONzcyIC0+IC0xDQotY3RteDk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xDQotY3RteDk4MiBjb21wYXJldG90bWFnIC1zTmFONzcxICtzTmFONzcyIC0+IC0xDQotY3RteDk4MyBjb21wYXJldG90bWFnICtzTmFONzcxICtzTmFONzcyIC0+IC0xDQotY3RteDk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxDQotY3RteDk4NSBjb21wYXJldG90bWFnICtzTmFONzcyIC1zTmFONzcxIC0+ICAxDQotY3RteDk4NiBjb21wYXJldG90bWFnIC1zTmFONzcyICtzTmFONzcxIC0+ICAxDQotY3RteDk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQotDQotY3RteDk5MSBjb21wYXJldG90bWFnIC1zTmFOOTkgLUluZiAgICAtPiAgMQ0KLWN0bXg5OTIgY29tcGFyZXRvdG1hZyAgc05hTjk4IC0xMSAgICAgLT4gIDENCi1jdG14OTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xDQotY3RteDk5NCBjb21wYXJldG90bWFnICBzTmFOMTYgc05hTjk0ICAtPiAtMQ0KLWN0bXg5OTUgY29tcGFyZXRvdG1hZyAgTmFOODUgIHNOYU44MyAgLT4gIDENCi1jdG14OTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xDQotY3RteDk5NyBjb21wYXJldG90bWFnICAwODggICAgc05hTjgxICAtPiAtMQ0KLWN0bXg5OTggY29tcGFyZXRvdG1hZyAgSW5mICAgIHNOYU45MCAgLT4gLTENCi1jdG14OTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBub3cgYWxsb3dlZA0KLW1heEV4cG9uZW50OiA5OTk5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OTk5OQ0KLWN0bXgxMDgwIGNvbXBhcmV0b3RtYWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5ICAtPiAgLTENCi1jdG14MTA4MSBjb21wYXJldG90bWFnIDlFKzk5OTk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAgLT4gICAxDQotY3RteDEwODIgY29tcGFyZXRvdG1hZyArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgIC0+ICAgMQ0KLWN0bXgxMDgzIGNvbXBhcmV0b3RtYWcgOUUtOTk5OTk5OTk5ICswLjEwMCAgICAgICAgICAgICAgICAtPiAgLTENCi1jdG14MTA4NSBjb21wYXJldG90bWFnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAgLT4gIC0xDQotY3RteDEwODYgY29tcGFyZXRvdG1hZyA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgIC0+ICAgMQ0KLWN0bXgxMDg3IGNvbXBhcmV0b3RtYWcgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgICAtPiAgIDENCi1jdG14MTA4OCBjb21wYXJldG90bWFnIDlFLTk5OTk5OTk5OSAtMC4xMDAgICAgICAgICAgICAgICAgLT4gIC0xDQotDQotY3RteDEwODkgY29tcGFyZXRvdG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgIC0+ICAtMQ0KLWN0bXgxMDkwIGNvbXBhcmV0b3RtYWcgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAgICAtPiAgLTENCi1jdG14MTA5MSBjb21wYXJldG90bWFnIDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAgLT4gIC0xDQotY3RteDEwOTIgY29tcGFyZXRvdG1hZyA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgIC0+ICAtMQ0KLWN0bXgxMDkzIGNvbXBhcmV0b3RtYWcgOWUtOTk5OTk5OTk4IDAuMSAgICAgICAgICAgICAtPiAgLTENCi1jdG14MTA5NCBjb21wYXJldG90bWFnIDAuMDEgOWUtOTk5OTk5OTk4ICAgICAgICAgICAgLT4gICAxDQotY3RteDEwOTUgY29tcGFyZXRvdG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMSAgICAgIC0+ICAgMQ0KLWN0bXgxMDk2IGNvbXBhcmV0b3RtYWcgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDAgICAgICAtPiAgIDENCi1jdG14MTA5NyBjb21wYXJldG90bWFnIDFlNjAwMDAwMDAwIDFlNDAwMDAwMDAwICAgICAgLT4gICAxDQotY3RteDEwOTggY29tcGFyZXRvdG1hZyA5ZTk5OTk5OTk5OCAxMDAgICAgICAgICAgICAgIC0+ICAgMQ0KLWN0bXgxMDk5IGNvbXBhcmV0b3RtYWcgOWU5OTk5OTk5OTggMTAgICAgICAgICAgICAgICAtPiAgIDENCi1jdG14MTEwMCBjb21wYXJldG90bWFnIDEwMCAgOWU5OTk5OTk5OTggICAgICAgICAgICAgLT4gIC0xDQotLS0gc2lnbnMNCi1jdG14MTEwMSBjb21wYXJldG90bWFnICAxZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAgLT4gICAxDQotY3RteDExMDIgY29tcGFyZXRvdG1hZyAgMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgIC0+ICAgMQ0KLWN0bXgxMTAzIGNvbXBhcmV0b3RtYWcgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExICAtPiAgIDENCi1jdG14MTEwNCBjb21wYXJldG90bWFnIC0xZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAgLT4gICAxDQotY3RteDExMDUgY29tcGFyZXRvdG1hZyAgMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgIC0+ICAtMQ0KLWN0bXgxMTA2IGNvbXBhcmV0b3RtYWcgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExICAtPiAgLTENCi1jdG14MTEwNyBjb21wYXJldG90bWFnIC0xZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAgLT4gIC0xDQotY3RteDExMDggY29tcGFyZXRvdG1hZyAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgIC0+ICAtMQ0KLQ0KLS0tIHNwcmVhZCB6ZXJvcw0KLWN0bXgxMTEwIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDAgICAgICAgIC0+ICAtMQ0KLWN0bXgxMTExIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTAgICAgICAgIC0+ICAtMQ0KLWN0bXgxMTEyIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDAgICAgICAgIC0+ICAtMQ0KLWN0bXgxMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTAgICAgICAgIC0+ICAtMQ0KLWN0bXgxMTE0IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDBFKzM4NCAgIC0+ICAtMQ0KLWN0bXgxMTE1IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTBFKzM4NCAgIC0+ICAtMQ0KLWN0bXgxMTE2IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDBFKzM4NCAgIC0+ICAtMQ0KLWN0bXgxMTE3IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTBFKzM4NCAgIC0+ICAtMQ0KLWN0bXgxMTE4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFKzM4NCAgIC0+ICAtMQ0KLWN0bXgxMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzM4NCAgIC0+ICAtMQ0KLWN0bXgxMTIwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFKzM4NCAgIC0+ICAtMQ0KLWN0bXgxMTIxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFKzM4NCAgIC0+ICAtMQ0KLQ0KLWN0bXgxMTMwIGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDAgICAgICAgIC0+ICAgMQ0KLWN0bXgxMTMxIGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTAgICAgICAgIC0+ICAgMQ0KLWN0bXgxMTMyIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDAgICAgICAgIC0+ICAgMQ0KLWN0bXgxMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTAgICAgICAgIC0+ICAgMQ0KLWN0bXgxMTM0IGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDBFLTM4MyAgIC0+ICAgMQ0KLWN0bXgxMTM1IGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTBFLTM4MyAgIC0+ICAgMQ0KLWN0bXgxMTM2IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDBFLTM4MyAgIC0+ICAgMQ0KLWN0bXgxMTM3IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTBFLTM4MyAgIC0+ICAgMQ0KLWN0bXgxMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTM4MyAgIC0+ICAgMQ0KLWN0bXgxMTM5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFLTM4MyAgIC0+ICAgMQ0KLWN0bXgxMTQwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFLTM4MyAgIC0+ICAgMQ0KLWN0bXgxMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTM4MyAgIC0+ICAgMQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1jdG14OTk5MCBjb21wYXJldG90bWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWN0bXg5OTkxIGNvbXBhcmV0b3RtYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb21wYXJldG90bWFnLmRlY1Rlc3QgLS0gZGVjaW1hbCBjb21wYXJpc29uLCBhYnMuIHRvdGFsIG9yZGVyaW5nICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCBpdCBjYW5ub3QgYmUgYXNzdW1lZCB0aGF0IGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocworLS0gZm9yIHRoaXMgb3BlcmF0aW9uIGFkZXF1YXRlbHksIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUKKy0tIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbworLS0gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsCistLSB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzIHRoYW4gY29tcGFyZS4KKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKKy0tIHNhbml0eSBjaGVja3MKK2N0bXgwMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwCitjdG14MDAyIGNvbXBhcmV0b3RtYWcgIC0yICAtMSAgIC0+ICAgMQorY3RteDAwMyBjb21wYXJldG90bWFnICAtMiAgIDAgICAtPiAgIDEKK2N0bXgwMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxCitjdG14MDA1IGNvbXBhcmV0b3RtYWcgIC0yICAgMiAgIC0+ICAgMAorY3RteDAwNiBjb21wYXJldG90bWFnICAtMSAgLTIgICAtPiAgLTEKK2N0bXgwMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwCitjdG14MDA4IGNvbXBhcmV0b3RtYWcgIC0xICAgMCAgIC0+ICAgMQorY3RteDAwOSBjb21wYXJldG90bWFnICAtMSAgIDEgICAtPiAgIDAKK2N0bXgwMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xCitjdG14MDExIGNvbXBhcmV0b3RtYWcgICAwICAtMiAgIC0+ICAtMQorY3RteDAxMiBjb21wYXJldG90bWFnICAgMCAgLTEgICAtPiAgLTEKK2N0bXgwMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwCitjdG14MDE0IGNvbXBhcmV0b3RtYWcgICAwICAgMSAgIC0+ICAtMQorY3RteDAxNSBjb21wYXJldG90bWFnICAgMCAgIDIgICAtPiAgLTEKK2N0bXgwMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xCitjdG14MDE3IGNvbXBhcmV0b3RtYWcgICAxICAtMSAgIC0+ICAgMAorY3RteDAxOCBjb21wYXJldG90bWFnICAgMSAgIDAgICAtPiAgIDEKK2N0bXgwMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwCitjdG14MDIwIGNvbXBhcmV0b3RtYWcgICAxICAgMiAgIC0+ICAtMQorY3RteDAyMSBjb21wYXJldG90bWFnICAgMiAgLTIgICAtPiAgIDAKK2N0bXgwMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxCitjdG14MDIzIGNvbXBhcmV0b3RtYWcgICAyICAgMCAgIC0+ICAgMQorY3RteDAyNSBjb21wYXJldG90bWFnICAgMiAgIDEgICAtPiAgIDEKK2N0bXgwMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwCisKK2N0bXgwMzEgY29tcGFyZXRvdG1hZyAgLTIwICAtMjAgICAtPiAgIDAKK2N0bXgwMzIgY29tcGFyZXRvdG1hZyAgLTIwICAtMTAgICAtPiAgIDEKK2N0bXgwMzMgY29tcGFyZXRvdG1hZyAgLTIwICAgMDAgICAtPiAgIDEKK2N0bXgwMzQgY29tcGFyZXRvdG1hZyAgLTIwICAgMTAgICAtPiAgIDEKK2N0bXgwMzUgY29tcGFyZXRvdG1hZyAgLTIwICAgMjAgICAtPiAgIDAKK2N0bXgwMzYgY29tcGFyZXRvdG1hZyAgLTEwICAtMjAgICAtPiAgLTEKK2N0bXgwMzcgY29tcGFyZXRvdG1hZyAgLTEwICAtMTAgICAtPiAgIDAKK2N0bXgwMzggY29tcGFyZXRvdG1hZyAgLTEwICAgMDAgICAtPiAgIDEKK2N0bXgwMzkgY29tcGFyZXRvdG1hZyAgLTEwICAgMTAgICAtPiAgIDAKK2N0bXgwNDAgY29tcGFyZXRvdG1hZyAgLTEwICAgMjAgICAtPiAgLTEKK2N0bXgwNDEgY29tcGFyZXRvdG1hZyAgIDAwICAtMjAgICAtPiAgLTEKK2N0bXgwNDIgY29tcGFyZXRvdG1hZyAgIDAwICAtMTAgICAtPiAgLTEKK2N0bXgwNDMgY29tcGFyZXRvdG1hZyAgIDAwICAgMDAgICAtPiAgIDAKK2N0bXgwNDQgY29tcGFyZXRvdG1hZyAgIDAwICAgMTAgICAtPiAgLTEKK2N0bXgwNDUgY29tcGFyZXRvdG1hZyAgIDAwICAgMjAgICAtPiAgLTEKK2N0bXgwNDYgY29tcGFyZXRvdG1hZyAgIDEwICAtMjAgICAtPiAgLTEKK2N0bXgwNDcgY29tcGFyZXRvdG1hZyAgIDEwICAtMTAgICAtPiAgIDAKK2N0bXgwNDggY29tcGFyZXRvdG1hZyAgIDEwICAgMDAgICAtPiAgIDEKK2N0bXgwNDkgY29tcGFyZXRvdG1hZyAgIDEwICAgMTAgICAtPiAgIDAKK2N0bXgwNTAgY29tcGFyZXRvdG1hZyAgIDEwICAgMjAgICAtPiAgLTEKK2N0bXgwNTEgY29tcGFyZXRvdG1hZyAgIDIwICAtMjAgICAtPiAgIDAKK2N0bXgwNTIgY29tcGFyZXRvdG1hZyAgIDIwICAtMTAgICAtPiAgIDEKK2N0bXgwNTMgY29tcGFyZXRvdG1hZyAgIDIwICAgMDAgICAtPiAgIDEKK2N0bXgwNTUgY29tcGFyZXRvdG1hZyAgIDIwICAgMTAgICAtPiAgIDEKK2N0bXgwNTYgY29tcGFyZXRvdG1hZyAgIDIwICAgMjAgICAtPiAgIDAKKworY3RteDA2MSBjb21wYXJldG90bWFnICAtMi4wICAtMi4wICAgLT4gICAwCitjdG14MDYyIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0xLjAgICAtPiAgIDEKK2N0bXgwNjMgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDAuMCAgIC0+ICAgMQorY3RteDA2NCBjb21wYXJldG90bWFnICAtMi4wICAgMS4wICAgLT4gICAxCitjdG14MDY1IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAyLjAgICAtPiAgIDAKK2N0bXgwNjYgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTIuMCAgIC0+ICAtMQorY3RteDA2NyBjb21wYXJldG90bWFnICAtMS4wICAtMS4wICAgLT4gICAwCitjdG14MDY4IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAwLjAgICAtPiAgIDEKK2N0bXgwNjkgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDEuMCAgIC0+ICAgMAorY3RteDA3MCBjb21wYXJldG90bWFnICAtMS4wICAgMi4wICAgLT4gIC0xCitjdG14MDcxIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0yLjAgICAtPiAgLTEKK2N0bXgwNzIgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTEuMCAgIC0+ICAtMQorY3RteDA3MyBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAgLT4gICAwCitjdG14MDc0IGNvbXBhcmV0b3RtYWcgICAwLjAgICAxLjAgICAtPiAgLTEKK2N0bXgwNzUgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDIuMCAgIC0+ICAtMQorY3RteDA3NiBjb21wYXJldG90bWFnICAgMS4wICAtMi4wICAgLT4gIC0xCitjdG14MDc3IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0xLjAgICAtPiAgIDAKK2N0bXgwNzggY29tcGFyZXRvdG1hZyAgIDEuMCAgIDAuMCAgIC0+ICAgMQorY3RteDA3OSBjb21wYXJldG90bWFnICAgMS4wICAgMS4wICAgLT4gICAwCitjdG14MDgwIGNvbXBhcmV0b3RtYWcgICAxLjAgICAyLjAgICAtPiAgLTEKK2N0bXgwODEgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTIuMCAgIC0+ICAgMAorY3RteDA4MiBjb21wYXJldG90bWFnICAgMi4wICAtMS4wICAgLT4gICAxCitjdG14MDgzIGNvbXBhcmV0b3RtYWcgICAyLjAgICAwLjAgICAtPiAgIDEKK2N0bXgwODUgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDEuMCAgIC0+ICAgMQorY3RteDA4NiBjb21wYXJldG90bWFnICAgMi4wICAgMi4wICAgLT4gICAwCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2N0bXgwOTAgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgIC0+ICAgMAorY3RteDA5MSBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAgLT4gICAwCitjdG14MDkyIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAgIDAKK2N0bXgwOTMgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+ICAgMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKKy0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwKK2N0bXgxMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3LjAgICAgIC0+ICAgMAorY3RteDEwMSBjb21wYXJldG90bWFnICAgNy4wICAgIDcgICAgICAgLT4gIC0xCitjdG14MTAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNy4wICAgICAtPiAgIDEKK2N0bXgxMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICA3LjAgICAgIC0+ICAgMQorY3RteDEwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIDcuMCAgICAgLT4gICAwCitjdG14MTA1IGNvbXBhcmV0b3RtYWcgICAwLjdFKzEgNyAgICAgICAtPiAgIDAKK2N0bXgxMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3ICAgICAgIC0+ICAtMQorY3RteDEwNyBjb21wYXJldG90bWFnICAgNy4wICAgIDdFKzAgICAgLT4gIC0xCitjdG14MTA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNzBFLTEgICAtPiAgIDAKK2N0bXgxMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAwLjdFKzEgIC0+ICAgMAorY3RteDExMCBjb21wYXJldG90bWFnICAgNyAgICAgIDcwRS0xICAgLT4gICAxCisKK2N0bXgxMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3LjAgICAgIC0+ICAgMQorY3RteDEyMSBjb21wYXJldG90bWFnICAgOC4wICAgIDcgICAgICAgLT4gICAxCitjdG14MTIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNy4wICAgICAtPiAgIDEKK2N0bXgxMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA3LjAgICAgIC0+ICAgMQorY3RteDEyNCBjb21wYXJldG90bWFnICAgODBFLTEgIDcuMCAgICAgLT4gICAxCitjdG14MTI1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgNyAgICAgICAtPiAgIDEKK2N0bXgxMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3ICAgICAgIC0+ICAgMQorY3RteDEyNyBjb21wYXJldG90bWFnICAgOC4wICAgIDdFKzAgICAgLT4gICAxCitjdG14MTI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNzBFLTEgICAtPiAgIDEKK2N0bXgxMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjdFKzEgICAtPiAgIDEKK2N0bXgxMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICA3MEUtMSAgIC0+ICAgMQorCitjdG14MTQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOS4wICAgICAtPiAgLTEKK2N0bXgxNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5ICAgICAgIC0+ICAtMQorY3RteDE0MiBjb21wYXJldG90bWFnICAgOCAgICAgIDkuMCAgICAgLT4gIC0xCitjdG14MTQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgOS4wICAgICAtPiAgLTEKK2N0bXgxNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5LjAgICAgIC0+ICAtMQorY3RteDE0NSBjb21wYXJldG90bWFnICAgMC44RSsxIDkgICAgICAgLT4gIC0xCitjdG14MTQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOSAgICAgICAtPiAgLTEKK2N0bXgxNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5RSswICAgIC0+ICAtMQorY3RteDE0OCBjb21wYXJldG90bWFnICAgOC4wICAgIDkwRS0xICAgLT4gIC0xCitjdG14MTQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC45RSsxICAtPiAgLTEKK2N0bXgxNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICA5MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitjdG14MjAwIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNy4wICAgICAtPiAgIDAKK2N0bXgyMDEgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3ICAgICAgIC0+ICAtMQorY3RteDIwMiBjb21wYXJldG90bWFnICAtNyAgICAgIDcuMCAgICAgLT4gICAxCitjdG14MjAzIGNvbXBhcmV0b3RtYWcgIC03RSswICAgNy4wICAgICAtPiAgIDEKK2N0bXgyMDQgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3LjAgICAgIC0+ICAgMAorY3RteDIwNSBjb21wYXJldG90bWFnICAtMC43RSsxIDcgICAgICAgLT4gICAwCitjdG14MjA2IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNyAgICAgICAtPiAgLTEKK2N0bXgyMDcgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3RSswICAgIC0+ICAtMQorY3RteDIwOCBjb21wYXJldG90bWFnICAtNy4wICAgIDcwRS0xICAgLT4gICAwCitjdG14MjA5IGNvbXBhcmV0b3RtYWcgIC03ICAgICAgMC43RSsxICAtPiAgIDAKK2N0bXgyMTAgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3MEUtMSAgIC0+ICAgMQorCitjdG14MjIwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNy4wICAgICAtPiAgIDEKK2N0bXgyMjEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3ICAgICAgIC0+ICAgMQorY3RteDIyMiBjb21wYXJldG90bWFnICAtOCAgICAgIDcuMCAgICAgLT4gICAxCitjdG14MjIzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgNy4wICAgICAtPiAgIDEKK2N0bXgyMjQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3LjAgICAgIC0+ICAgMQorY3RteDIyNSBjb21wYXJldG90bWFnICAtMC44RSsxIDcgICAgICAgLT4gICAxCitjdG14MjI2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNyAgICAgICAtPiAgIDEKK2N0bXgyMjcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3RSswICAgIC0+ICAgMQorY3RteDIyOCBjb21wYXJldG90bWFnICAtOC4wICAgIDcwRS0xICAgLT4gICAxCitjdG14MjI5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC43RSsxICAtPiAgIDEKK2N0bXgyMzAgY29tcGFyZXRvdG1hZyAgLTggICAgICA3MEUtMSAgIC0+ICAgMQorCitjdG14MjQwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOS4wICAgICAtPiAgLTEKK2N0bXgyNDEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5ICAgICAgIC0+ICAtMQorY3RteDI0MiBjb21wYXJldG90bWFnICAtOCAgICAgIDkuMCAgICAgLT4gIC0xCitjdG14MjQzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgOS4wICAgICAtPiAgLTEKK2N0bXgyNDQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5LjAgICAgIC0+ICAtMQorY3RteDI0NSBjb21wYXJldG90bWFnICAtMC44RSsxIDkgICAgICAgLT4gIC0xCitjdG14MjQ2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOSAgICAgICAtPiAgLTEKK2N0bXgyNDcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5RSswICAgIC0+ICAtMQorY3RteDI0OCBjb21wYXJldG90bWFnICAtOC4wICAgIDkwRS0xICAgLT4gIC0xCitjdG14MjQ5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC45RSsxICAtPiAgLTEKK2N0bXgyNTAgY29tcGFyZXRvdG1hZyAgLTggICAgICA5MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitjdG14MzAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcuMCAgICAgLT4gICAwCitjdG14MzAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcgICAgICAgLT4gIC0xCitjdG14MzAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcuMCAgICAgLT4gICAxCitjdG14MzAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgLTcuMCAgICAgLT4gICAxCitjdG14MzA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcuMCAgICAgLT4gICAwCitjdG14MzA1IGNvbXBhcmV0b3RtYWcgICAuN0UrMSAgLTcgICAgICAgLT4gICAwCitjdG14MzA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcgICAgICAgLT4gIC0xCitjdG14MzA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTdFKzAgICAgLT4gIC0xCitjdG14MzA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcwRS0xICAgLT4gICAwCitjdG14MzA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLS43RSsxICAgLT4gICAwCitjdG14MzEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2N0bXgzMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNy4wICAgICAtPiAgIDEKK2N0bXgzMjEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNyAgICAgICAtPiAgIDEKK2N0bXgzMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNy4wICAgICAtPiAgIDEKK2N0bXgzMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtNy4wICAgICAtPiAgIDEKK2N0bXgzMjQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNy4wICAgICAtPiAgIDEKK2N0bXgzMjUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtNyAgICAgICAtPiAgIDEKK2N0bXgzMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNyAgICAgICAtPiAgIDEKK2N0bXgzMjcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtN0UrMCAgICAtPiAgIDEKK2N0bXgzMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNzBFLTEgICAtPiAgIDEKK2N0bXgzMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjdFKzEgICAtPiAgIDEKK2N0bXgzMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNzBFLTEgICAtPiAgIDEKKworY3RteDM0MCBjb21wYXJldG90bWFnICAgOC4wICAgIC05LjAgICAgIC0+ICAtMQorY3RteDM0MSBjb21wYXJldG90bWFnICAgOC4wICAgIC05ICAgICAgIC0+ICAtMQorY3RteDM0MiBjb21wYXJldG90bWFnICAgOCAgICAgIC05LjAgICAgIC0+ICAtMQorY3RteDM0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIC05LjAgICAgIC0+ICAtMQorY3RteDM0NCBjb21wYXJldG90bWFnICAgODBFLTEgIC05LjAgICAgIC0+ICAtMQorY3RteDM0NSBjb21wYXJldG90bWFnICAgLjhFKzEgIC05ICAgICAgIC0+ICAtMQorY3RteDM0NiBjb21wYXJldG90bWFnICAgODBFLTEgIC05ICAgICAgIC0+ICAtMQorY3RteDM0NyBjb21wYXJldG90bWFnICAgOC4wICAgIC05RSswICAgIC0+ICAtMQorY3RteDM0OCBjb21wYXJldG90bWFnICAgOC4wICAgIC05MEUtMSAgIC0+ICAtMQorY3RteDM0OSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uOUUrMSAgIC0+ICAtMQorY3RteDM1MCBjb21wYXJldG90bWFnICAgOCAgICAgIC05MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitjdG14NDAwIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03LjAgICAgIC0+ICAgMAorY3RteDQwMSBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNyAgICAgICAtPiAgLTEKK2N0bXg0MDIgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcuMCAgICAgLT4gICAxCitjdG14NDAzIGNvbXBhcmV0b3RtYWcgICAtN0UrMCAgIC03LjAgICAgIC0+ICAgMQorY3RteDQwNCBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNy4wICAgICAtPiAgIDAKK2N0bXg0MDUgY29tcGFyZXRvdG1hZyAgIC0uN0UrMSAgLTcgICAgICAgLT4gICAwCitjdG14NDA2IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03ICAgICAgIC0+ICAtMQorY3RteDQwNyBjb21wYXJldG90bWFnICAgLTcuMCAgICAtN0UrMCAgICAtPiAgLTEKK2N0bXg0MDggY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcwRS0xICAgLT4gICAwCitjdG14NDA5IGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC0uN0UrMSAgIC0+ICAgMAorY3RteDQxMCBjb21wYXJldG90bWFnICAgLTcgICAgICAtNzBFLTEgICAtPiAgIDEKKworY3RteDQyMCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNy4wICAgICAtPiAgIDEKK2N0bXg0MjEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcgICAgICAgLT4gICAxCitjdG14NDIyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03LjAgICAgIC0+ICAgMQorY3RteDQyMyBjb21wYXJldG90bWFnICAgLThFKzAgICAtNy4wICAgICAtPiAgIDEKK2N0bXg0MjQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcuMCAgICAgLT4gICAxCitjdG14NDI1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC03ICAgICAgIC0+ICAgMQorY3RteDQyNiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNyAgICAgICAtPiAgIDEKK2N0bXg0MjcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTdFKzAgICAgLT4gICAxCitjdG14NDI4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03MEUtMSAgIC0+ICAgMQorY3RteDQyOSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjdFKzEgICAtPiAgIDEKK2N0bXg0MzAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2N0bXg0NDAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkuMCAgICAgLT4gIC0xCitjdG14NDQxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05ICAgICAgIC0+ICAtMQorY3RteDQ0MiBjb21wYXJldG90bWFnICAgLTggICAgICAtOS4wICAgICAtPiAgLTEKK2N0bXg0NDMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTkuMCAgICAgLT4gIC0xCitjdG14NDQ0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05LjAgICAgIC0+ICAtMQorY3RteDQ0NSBjb21wYXJldG90bWFnICAgLS44RSsxICAtOSAgICAgICAtPiAgLTEKK2N0bXg0NDYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkgICAgICAgLT4gIC0xCitjdG14NDQ3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05RSswICAgIC0+ICAtMQorY3RteDQ0OCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOTBFLTEgICAtPiAgLTEKK2N0bXg0NDkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS45RSsxICAgLT4gIC0xCitjdG14NDUwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05MEUtMSAgIC0+ICAtMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorcHJlY2lzaW9uOiA0MAorY3RteDQ3MCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCitjdG14NDcxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorY3RteDQ3MiBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQorY3RteDQ3MyBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitjdG14NDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQorY3RteDQ3NSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorY3RteDQ3NiBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCitjdG14NDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorY3RteDQ3OCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQorY3RteDQ3OSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitjdG14NDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQorY3RteDQ4MSBjb21wYXJldG90bWFnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorY3RteDQ4MiBjb21wYXJldG90bWFnIDEyMy40NTYwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCitjdG14NDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMAorY3RteDQ4NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMDAwRS04OSAgLT4gICAxCitjdG14NDg1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwMDAwMEU3ODkgIC0+ICAgMQorY3RteDQ4NiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMEUtODkgIC0+ICAgMQorY3RteDQ4NyBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwRTc4OSAgLT4gICAxCitjdG14NDg4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgIC0+ICAgMQorY3RteDQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMEU3ODkgIC0+ICAgMQorY3RteDQ5MCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAgLT4gICAxCitjdG14NDkxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMEU3ODkgIC0+ICAgMQorY3RteDQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQorY3RteDQ5MyBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwRTc4OSAgLT4gICAxCitjdG14NDk0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgIC0+ICAgMQorY3RteDQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMEU3ODkgIC0+ICAgMQorY3RteDQ5NiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAgLT4gICAxCitjdG14NDk3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAgMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitwcmVjaXNpb246IDkKK2N0bXg1MDAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNSAgICAgLT4gICAxCitjdG14NTAxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTQgICAgIC0+ICAgMQorY3RteDUwMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEzICAgICAtPiAgIDEKK2N0bXg1MDMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMiAgICAgLT4gICAxCitjdG14NTA0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTEgICAgIC0+ICAgMQorY3RteDUwNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEwICAgICAtPiAgIDEKK2N0bXg1MDYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS05ICAgICAgLT4gICAxCitjdG14NTA3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOCAgICAgIC0+ICAgMQorY3RteDUwOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTcgICAgICAtPiAgIDEKK2N0bXg1MDkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS02ICAgICAgLT4gICAxCitjdG14NTEwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNSAgICAgIC0+ICAgMQorY3RteDUxMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTQgICAgICAtPiAgIDEKK2N0bXg1MTIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0zICAgICAgLT4gICAxCitjdG14NTEzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMiAgICAgIC0+ICAgMQorY3RteDUxNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEgICAgICAtPiAgIDEKK2N0bXg1MTUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0wICAgICAgLT4gICAwCitjdG14NTE2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMSAgICAgIC0+ICAtMQorY3RteDUxNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzIgICAgICAtPiAgLTEKK2N0bXg1MTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSszICAgICAgLT4gIC0xCitjdG14NTE5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNCAgICAgIC0+ICAtMQorY3RteDUyMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzUgICAgICAtPiAgLTEKK2N0bXg1MjIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs2ICAgICAgLT4gIC0xCitjdG14NTIzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNyAgICAgIC0+ICAtMQorY3RteDUyNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzggICAgICAtPiAgLTEKK2N0bXg1MjUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs5ICAgICAgLT4gIC0xCitjdG14NTI2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTAgICAgIC0+ICAtMQorY3RteDUyNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzExICAgICAtPiAgLTEKK2N0bXg1MjggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMiAgICAgLT4gIC0xCitjdG14NTI5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTMgICAgIC0+ICAtMQorY3RteDUzMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE0ICAgICAtPiAgLTEKK2N0bXg1MzEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNSAgICAgLT4gIC0xCistLSBMUiBzd2FwCitjdG14NTQwIGNvbXBhcmV0b3RtYWcgICAgMUUtMTUgIDEgICAgICAgIC0+ICAtMQorY3RteDU0MSBjb21wYXJldG90bWFnICAgIDFFLTE0ICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDIgY29tcGFyZXRvdG1hZyAgICAxRS0xMyAgMSAgICAgICAgLT4gIC0xCitjdG14NTQzIGNvbXBhcmV0b3RtYWcgICAgMUUtMTIgIDEgICAgICAgIC0+ICAtMQorY3RteDU0NCBjb21wYXJldG90bWFnICAgIDFFLTExICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDUgY29tcGFyZXRvdG1hZyAgICAxRS0xMCAgMSAgICAgICAgLT4gIC0xCitjdG14NTQ2IGNvbXBhcmV0b3RtYWcgICAgMUUtOSAgIDEgICAgICAgIC0+ICAtMQorY3RteDU0NyBjb21wYXJldG90bWFnICAgIDFFLTggICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDggY29tcGFyZXRvdG1hZyAgICAxRS03ICAgMSAgICAgICAgLT4gIC0xCitjdG14NTQ5IGNvbXBhcmV0b3RtYWcgICAgMUUtNiAgIDEgICAgICAgIC0+ICAtMQorY3RteDU1MCBjb21wYXJldG90bWFnICAgIDFFLTUgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NTEgY29tcGFyZXRvdG1hZyAgICAxRS00ICAgMSAgICAgICAgLT4gIC0xCitjdG14NTUyIGNvbXBhcmV0b3RtYWcgICAgMUUtMyAgIDEgICAgICAgIC0+ICAtMQorY3RteDU1MyBjb21wYXJldG90bWFnICAgIDFFLTIgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NTQgY29tcGFyZXRvdG1hZyAgICAxRS0xICAgMSAgICAgICAgLT4gIC0xCitjdG14NTU1IGNvbXBhcmV0b3RtYWcgICAgMUUtMCAgIDEgICAgICAgIC0+ICAgMAorY3RteDU1NiBjb21wYXJldG90bWFnICAgIDFFKzEgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NTcgY29tcGFyZXRvdG1hZyAgICAxRSsyICAgMSAgICAgICAgLT4gICAxCitjdG14NTU4IGNvbXBhcmV0b3RtYWcgICAgMUUrMyAgIDEgICAgICAgIC0+ICAgMQorY3RteDU1OSBjb21wYXJldG90bWFnICAgIDFFKzQgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjEgY29tcGFyZXRvdG1hZyAgICAxRSs1ICAgMSAgICAgICAgLT4gICAxCitjdG14NTYyIGNvbXBhcmV0b3RtYWcgICAgMUUrNiAgIDEgICAgICAgIC0+ICAgMQorY3RteDU2MyBjb21wYXJldG90bWFnICAgIDFFKzcgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjQgY29tcGFyZXRvdG1hZyAgICAxRSs4ICAgMSAgICAgICAgLT4gICAxCitjdG14NTY1IGNvbXBhcmV0b3RtYWcgICAgMUUrOSAgIDEgICAgICAgIC0+ICAgMQorY3RteDU2NiBjb21wYXJldG90bWFnICAgIDFFKzEwICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjcgY29tcGFyZXRvdG1hZyAgICAxRSsxMSAgMSAgICAgICAgLT4gICAxCitjdG14NTY4IGNvbXBhcmV0b3RtYWcgICAgMUUrMTIgIDEgICAgICAgIC0+ICAgMQorY3RteDU2OSBjb21wYXJldG90bWFnICAgIDFFKzEzICAxICAgICAgICAtPiAgIDEKK2N0bXg1NzAgY29tcGFyZXRvdG1hZyAgICAxRSsxNCAgMSAgICAgICAgLT4gICAxCitjdG14NTcxIGNvbXBhcmV0b3RtYWcgICAgMUUrMTUgIDEgICAgICAgIC0+ICAgMQorLS0gc2ltaWxhciB3aXRoIGFuIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorY3RteDU4MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgIC0+ICAgMQorY3RteDU4MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgIC0+ICAgMQorY3RteDU4MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgIC0+ICAgMQorY3RteDU4MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgIC0+ICAgMQorY3RteDU4NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgIC0+ICAgMQorY3RteDU4NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgIC0+ICAgMQorY3RteDU4NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgIC0+ICAgMQorY3RteDU4NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgIC0+ICAgMQorY3RteDU4OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgIC0+ICAgMQorY3RteDU4OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgIC0+ICAtMQorY3RteDU5MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgIC0+ICAtMQorY3RteDU5MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgIC0+ICAtMQorY3RteDU5MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgIC0+ICAtMQorY3RteDU5MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgIC0+ICAtMQorY3RteDU5NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgIC0+ICAtMQorY3RteDU5NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgIC0+ICAtMQorY3RteDU5NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgIC0+ICAtMQorY3RteDU5NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgIC0+ICAtMQorY3RteDU5OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgIC0+ICAtMQorY3RteDU5OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgIC0+ICAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworcHJlY2lzaW9uOiAyMAorY3RteDYwMCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjAyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwMyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjA1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwNiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjA4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwOSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MTAgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAgLT4gICAxCitjdG14NjExIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgIC0+ICAgMQorY3RteDYxMiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgICAtPiAgIDEKK2N0bXg2MTMgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAgLT4gICAxCitjdG14NjE0IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgIC0+ICAgMQorY3RteDYxNSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgICAtPiAgIDEKK2N0bXg2MTYgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAgLT4gICAxCitjdG14NjE3IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgIC0+ICAgMQorY3RteDYxOCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgICAtPiAgIDEKK2N0bXg2MTkgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAgLT4gICAxCitjdG14NjIwIGNvbXBhcmV0b3RtYWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyMSBjb21wYXJldG90bWFnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjIgY29tcGFyZXRvdG1hZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjIzIGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyNCBjb21wYXJldG90bWFnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjUgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjI2IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyNyBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjggY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjI5IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYzMCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIgICAgICAgICAgICAtPiAgIDEKK2N0bXg2MzEgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAgLT4gICAxCitjdG14NjMyIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgIC0+ICAgMQorY3RteDYzMyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgICAtPiAgIDEKK2N0bXg2MzQgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAgLT4gICAxCitjdG14NjM1IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgIC0+ICAgMQorY3RteDYzNiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgICAtPiAgIDEKK2N0bXg2MzcgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAgLT4gICAxCitjdG14NjM4IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgIC0+ICAgMQorY3RteDYzOSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwICAtPiAgIDEKK3ByZWNpc2lvbjogOQorCistLSBleHRlbmRlZCB6ZXJvcworY3RteDY0MCBjb21wYXJldG90bWFnICAgMCAgICAgMCAgICAtPiAgIDAKK2N0bXg2NDEgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAgICAgLT4gICAwCitjdG14NjQyIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wLjAgIC0+ICAgMQorY3RteDY0MyBjb21wYXJldG90bWFnICAgMCAgICAgMC4wICAtPiAgIDEKK2N0bXg2NDQgY29tcGFyZXRvdG1hZyAgLTAgICAgIDAgICAgLT4gICAwCitjdG14NjQ1IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wICAgIC0+ICAgMAorY3RteDY0NiBjb21wYXJldG90bWFnICAtMCAgICAtMC4wICAtPiAgIDEKK2N0bXg2NDcgY29tcGFyZXRvdG1hZyAgLTAgICAgIDAuMCAgLT4gICAxCitjdG14NjQ4IGNvbXBhcmV0b3RtYWcgICAwLjAgICAwICAgIC0+ICAtMQorY3RteDY0OSBjb21wYXJldG90bWFnICAgMC4wICAtMCAgICAtPiAgLTEKK2N0bXg2NTAgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAuMCAgLT4gICAwCitjdG14NjUxIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgIC0+ICAgMAorY3RteDY1MiBjb21wYXJldG90bWFnICAtMC4wICAgMCAgICAtPiAgLTEKK2N0bXg2NTMgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAgICAgLT4gIC0xCitjdG14NjU0IGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wLjAgIC0+ICAgMAorY3RteDY1NSBjb21wYXJldG90bWFnICAtMC4wICAgMC4wICAtPiAgIDAKKworY3RteDY1NiBjb21wYXJldG90bWFnICAtMEUxICAgMC4wICAtPiAgIDEKK2N0bXg2NTcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAuMCAgLT4gICAxCitjdG14NjU4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwLjAgIC0+ICAgMQorY3RteDY1OSBjb21wYXJldG90bWFnICAgMEUyICAgMC4wICAtPiAgIDEKK2N0bXg2NjAgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAgICAgLT4gICAxCitjdG14NjYxIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwICAgIC0+ICAgMQorY3RteDY2MiBjb21wYXJldG90bWFnICAgMEUxICAgMCAgICAtPiAgIDEKK2N0bXg2NjMgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAgICAgLT4gICAxCitjdG14NjY0IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTEgIC0+ICAgMAorY3RteDY2NSBjb21wYXJldG90bWFnICAtMEUyICAtMEUxICAtPiAgIDEKK2N0bXg2NjYgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMSAgLT4gICAwCitjdG14NjY3IGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTEgIC0+ICAgMQorY3RteDY2OCBjb21wYXJldG90bWFnICAtMEUxICAtMEUyICAtPiAgLTEKK2N0bXg2NjkgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMiAgLT4gICAwCitjdG14NjcwIGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTIgIC0+ICAtMQorY3RteDY3MSBjb21wYXJldG90bWFnICAgMEUyICAtMEUyICAtPiAgIDAKK2N0bXg2NzIgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMSAgLT4gICAwCitjdG14NjczIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTEgIC0+ICAgMQorY3RteDY3NCBjb21wYXJldG90bWFnICAgMEUxICAgMEUxICAtPiAgIDAKK2N0bXg2NzUgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMSAgLT4gICAxCitjdG14Njc2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTIgIC0+ICAtMQorY3RteDY3NyBjb21wYXJldG90bWFnICAtMEUyICAgMEUyICAtPiAgIDAKK2N0bXg2NzggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMiAgLT4gIC0xCitjdG14Njc5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTIgIC0+ICAgMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitwcmVjaXNpb246IDIwCitjdG14NjgwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMiAgICAgICAgICAgIC0+ICAgMAorY3RteDY4MSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMCAgICAgICAgICAtPiAgIDEKK2N0bXg2ODIgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwICAgICAgICAgLT4gICAxCitjdG14NjgzIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAgICAgICAgIC0+ICAgMQorY3RteDY4NCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMCAgICAgICAtPiAgIDEKK2N0bXg2ODUgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwICAgICAgLT4gICAxCitjdG14Njg2IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAgICAgIC0+ICAgMQorY3RteDY4NyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMCAgICAtPiAgIDEKK2N0bXg2ODggY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwICAgLT4gICAxCitjdG14Njg5IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMDAgIC0+ICAgMQorY3RteDY5MCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAgIDEyICAtPiAgIDAKK2N0bXg2OTEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgICAxMiAgLT4gIC0xCitjdG14NjkyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgICAgMTIgIC0+ICAtMQorY3RteDY5MyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgICAxMiAgLT4gIC0xCitjdG14Njk1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgICAgMTIgIC0+ICAtMQorY3RteDY5NiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgICAxMiAgLT4gIC0xCitjdG14Njk4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgICAgMTIgIC0+ICAtMQorY3RteDY5OSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAgIDEyICAtPiAgLTEKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorY3RteDcwMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAwICAxICAtPiAgIDEKK2N0bXg3MDIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAwICAgLT4gIC0xCitjdG14NzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQorY3RteDcwNCBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMCAgICAtPiAgLTEKK2N0bXg3MDUgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwICAgMSAgLT4gICAxCitjdG14NzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQorY3RteDcwNyBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTEgICAxICAtPiAgIDEKK2N0bXg3MDggY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gIC0xCitjdG14NzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQorY3RteDcxMCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAgLTEKK2N0bXg3MTEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODk2ICAgMSAgLT4gICAxCitjdG14NzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQorY3RteDcxMyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkxICAxICAtPiAgIDEKK2N0bXg3MTQgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkxICAgLT4gIC0xCitjdG14NzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQorY3RteDcxNiBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAgLTEKK2N0bXg3MTcgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gICAxCitjdG14NzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQorCitwcmVjaXNpb246IDE1CistLSBzYW1lIHdpdGggcGxlbnR5IG9mIHByZWNpc2lvbgorY3RteDcyMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAwIDEgIC0+ICAgMQorY3RteDcyMiBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMDAgIC0+ICAtMQorY3RteDcyMyBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAgIDEgIC0+ICAgMQorY3RteDcyNCBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMCAgIC0+ICAtMQorY3RteDcyNSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAgIDEgIC0+ICAgMQorY3RteDcyNiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MCAgIC0+ICAtMQorY3RteDcyNyBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTEgIDEgIC0+ICAgMQorY3RteDcyOCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MSAgIC0+ICAtMQorY3RteDcyOSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAxIDEgIC0+ICAgMQorY3RteDczMCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MDEgIC0+ICAtMQorY3RteDczMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTYgIDEgIC0+ICAgMQorY3RteDczMiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5NiAgIC0+ICAtMQorCistLSByZXNpZHVlIGNhc2VzCitwcmVjaXNpb246IDUKK2N0bXg3NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxCitjdG14NzQxIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5ICAgIC0+ICAgMQorY3RteDc0MiBjb21wYXJldG90bWFnICAxICAwLjk5OTk5ICAgICAtPiAgIDEKK2N0bXg3NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxCitjdG14NzQ0IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDEgICAgIC0+ICAtMQorY3RteDc0NSBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMSAgICAtPiAgLTEKK2N0bXg3NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xCitjdG14NzUwIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5OSAgMSAgIC0+ICAtMQorY3RteDc1MSBjb21wYXJldG90bWFnICAwLjk5OTk5OSAgIDEgICAtPiAgLTEKK2N0bXg3NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xCitjdG14NzUzIGNvbXBhcmV0b3RtYWcgIDEuMDAwMCAgICAgMSAgIC0+ICAtMQorY3RteDc1NCBjb21wYXJldG90bWFnICAxLjAwMDAxICAgIDEgICAtPiAgIDEKK2N0bXg3NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxCitjdG14NzU2IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAwMSAgMSAgIC0+ICAgMQorCistLSBhIHNlbGVjdGlvbiBvZiBsb25naWVzCitjdG14NzYwIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3NTY1NjAzNTc5NDAgIC0+ICAgMQorY3RteDc2MSBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgIDAKK2N0bXg3NjIgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gICAxCitjdG14NzYzIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorLS0gcHJlY2lzaW9ucyBhYm92ZSBvciBiZWxvdyB0aGUgZGlmZmVyZW5jZSBzaG91bGQgaGF2ZSBubyBlZmZlY3QKK3ByZWNpc2lvbjogICAxMQorY3RteDc2NCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKK3ByZWNpc2lvbjogICAxMAorY3RteDc2NSBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKK3ByZWNpc2lvbjogICAgOQorY3RteDc2NiBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKK3ByZWNpc2lvbjogICAgOAorY3RteDc2NyBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKK3ByZWNpc2lvbjogICAgNworY3RteDc2OCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKK3ByZWNpc2lvbjogICAgNgorY3RteDc2OSBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKK3ByZWNpc2lvbjogICAgNQorY3RteDc3MCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKK3ByZWNpc2lvbjogICAgNAorY3RteDc3MSBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKK3ByZWNpc2lvbjogICAgMworY3RteDc3MiBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKK3ByZWNpc2lvbjogICAgMgorY3RteDc3MyBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKK3ByZWNpc2lvbjogICAgMQorY3RteDc3NCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKKworLS0gU3BlY2lhbHMKK3ByZWNpc2lvbjogICA5CitjdG14NzgwIGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCitjdG14NzgxIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEwMDAgIC0+ICAxCitjdG14NzgyIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEgICAgIC0+ICAxCitjdG14NzgzIGNvbXBhcmV0b3RtYWcgIEluZiAgLTAgICAgIC0+ICAxCitjdG14Nzg0IGNvbXBhcmV0b3RtYWcgIEluZiAgIDAgICAgIC0+ICAxCitjdG14Nzg1IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEgICAgIC0+ICAxCitjdG14Nzg2IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEwMDAgIC0+ICAxCitjdG14Nzg3IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwCitjdG14Nzg4IGNvbXBhcmV0b3RtYWcgLTEwMDAgIEluZiAgIC0+IC0xCitjdG14Nzg5IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCitjdG14NzkwIGNvbXBhcmV0b3RtYWcgLTEgICAgIEluZiAgIC0+IC0xCitjdG14NzkxIGNvbXBhcmV0b3RtYWcgLTAgICAgIEluZiAgIC0+IC0xCitjdG14NzkyIGNvbXBhcmV0b3RtYWcgIDAgICAgIEluZiAgIC0+IC0xCitjdG14NzkzIGNvbXBhcmV0b3RtYWcgIDEgICAgIEluZiAgIC0+IC0xCitjdG14Nzk0IGNvbXBhcmV0b3RtYWcgIDEwMDAgIEluZiAgIC0+IC0xCitjdG14Nzk1IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwCisKK2N0bXg4MDAgY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDAKK2N0bXg4MDEgY29tcGFyZXRvdG1hZyAtSW5mICAtMTAwMCAgLT4gIDEKK2N0bXg4MDIgY29tcGFyZXRvdG1hZyAtSW5mICAtMSAgICAgLT4gIDEKK2N0bXg4MDMgY29tcGFyZXRvdG1hZyAtSW5mICAtMCAgICAgLT4gIDEKK2N0bXg4MDQgY29tcGFyZXRvdG1hZyAtSW5mICAgMCAgICAgLT4gIDEKK2N0bXg4MDUgY29tcGFyZXRvdG1hZyAtSW5mICAgMSAgICAgLT4gIDEKK2N0bXg4MDYgY29tcGFyZXRvdG1hZyAtSW5mICAgMTAwMCAgLT4gIDEKK2N0bXg4MDcgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDAKK2N0bXg4MDggY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDAKK2N0bXg4MDkgY29tcGFyZXRvdG1hZyAtMTAwMCAtSW5mICAgLT4gLTEKK2N0bXg4MTAgY29tcGFyZXRvdG1hZyAtMSAgICAtSW5mICAgLT4gLTEKK2N0bXg4MTEgY29tcGFyZXRvdG1hZyAtMCAgICAtSW5mICAgLT4gLTEKK2N0bXg4MTIgY29tcGFyZXRvdG1hZyAgMCAgICAtSW5mICAgLT4gLTEKK2N0bXg4MTMgY29tcGFyZXRvdG1hZyAgMSAgICAtSW5mICAgLT4gLTEKK2N0bXg4MTQgY29tcGFyZXRvdG1hZyAgMTAwMCAtSW5mICAgLT4gLTEKK2N0bXg4MTUgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDAKKworY3RteDgyMSBjb21wYXJldG90bWFnICBOYU4gLUluZiAgICAtPiAgMQorY3RteDgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQorY3RteDgyMyBjb21wYXJldG90bWFnICBOYU4gLTEgICAgICAtPiAgMQorY3RteDgyNCBjb21wYXJldG90bWFnICBOYU4gLTAgICAgICAtPiAgMQorY3RteDgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQorY3RteDgyNiBjb21wYXJldG90bWFnICBOYU4gIDEgICAgICAtPiAgMQorY3RteDgyNyBjb21wYXJldG90bWFnICBOYU4gIDEwMDAgICAtPiAgMQorY3RteDgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQorY3RteDgyOSBjb21wYXJldG90bWFnICBOYU4gIE5hTiAgICAtPiAgMAorY3RteDgzMCBjb21wYXJldG90bWFnIC1JbmYgIE5hTiAgICAtPiAgLTEKK2N0bXg4MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xCitjdG14ODMyIGNvbXBhcmV0b3RtYWcgLTEgICAgTmFOICAgIC0+ICAtMQorY3RteDgzMyBjb21wYXJldG90bWFnIC0wICAgIE5hTiAgICAtPiAgLTEKK2N0bXg4MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xCitjdG14ODM1IGNvbXBhcmV0b3RtYWcgIDEgICAgTmFOICAgIC0+ICAtMQorY3RteDgzNiBjb21wYXJldG90bWFnICAxMDAwIE5hTiAgICAtPiAgLTEKK2N0bXg4MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xCitjdG14ODM4IGNvbXBhcmV0b3RtYWcgLU5hTiAtTmFOICAgIC0+ICAwCitjdG14ODM5IGNvbXBhcmV0b3RtYWcgK05hTiAtTmFOICAgIC0+ICAwCitjdG14ODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwCisKK2N0bXg4NDEgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgLT4gIDAKK2N0bXg4NDIgY29tcGFyZXRvdG1hZyAgc05hTiAtTmFOICAgLT4gIC0xCitjdG14ODQzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLUluZiAgIC0+ICAxCitjdG14ODQ0IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEwMDAgIC0+ICAxCitjdG14ODQ1IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEgICAgIC0+ICAxCitjdG14ODQ2IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTAgICAgIC0+ICAxCitjdG14ODQ3IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDAgICAgIC0+ICAxCitjdG14ODQ4IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEgICAgIC0+ICAxCitjdG14ODQ5IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEwMDAgIC0+ICAxCitjdG14ODUwIGNvbXBhcmV0b3RtYWcgIHNOYU4gIE5hTiAgIC0+ICAtMQorY3RteDg1MSBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMAorCitjdG14ODUyIGNvbXBhcmV0b3RtYWcgLXNOYU4gc05hTiAgIC0+ICAwCitjdG14ODUzIGNvbXBhcmV0b3RtYWcgLU5hTiAgc05hTiAgIC0+ICAxCitjdG14ODU0IGNvbXBhcmV0b3RtYWcgLUluZiAgc05hTiAgIC0+ICAtMQorY3RteDg1NSBjb21wYXJldG90bWFnIC0xMDAwIHNOYU4gICAtPiAgLTEKK2N0bXg4NTYgY29tcGFyZXRvdG1hZyAtMSAgICBzTmFOICAgLT4gIC0xCitjdG14ODU3IGNvbXBhcmV0b3RtYWcgLTAgICAgc05hTiAgIC0+ICAtMQorY3RteDg1OCBjb21wYXJldG90bWFnICAwICAgIHNOYU4gICAtPiAgLTEKK2N0bXg4NTkgY29tcGFyZXRvdG1hZyAgMSAgICBzTmFOICAgLT4gIC0xCitjdG14ODYwIGNvbXBhcmV0b3RtYWcgIDEwMDAgc05hTiAgIC0+ICAtMQorY3RteDg2MSBjb21wYXJldG90bWFnICBJbmYgIHNOYU4gICAtPiAgLTEKK2N0bXg4NjIgY29tcGFyZXRvdG1hZyAgTmFOICBzTmFOICAgLT4gIDEKK2N0bXg4NjMgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDAKKworY3RteDg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDAKK2N0bXg4NzIgY29tcGFyZXRvdG1hZyAgLXNOYU4gLU5hTiAgIC0+ICAtMQorY3RteDg3MyBjb21wYXJldG90bWFnICAtc05hTiAtSW5mICAgLT4gIDEKK2N0bXg4NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxCitjdG14ODc1IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xICAgICAtPiAgMQorY3RteDg3NiBjb21wYXJldG90bWFnICAtc05hTiAtMCAgICAgLT4gIDEKK2N0bXg4NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxCitjdG14ODc4IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxICAgICAtPiAgMQorY3RteDg3OSBjb21wYXJldG90bWFnICAtc05hTiAgMTAwMCAgLT4gIDEKK2N0bXg4ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQorY3RteDg4MSBjb21wYXJldG90bWFnICAtc05hTiBzTmFOICAgLT4gIDAKKworY3RteDg4MiBjb21wYXJldG90bWFnIC1zTmFOIC1zTmFOICAgLT4gIDAKK2N0bXg4ODMgY29tcGFyZXRvdG1hZyAtTmFOICAtc05hTiAgIC0+ICAxCitjdG14ODg0IGNvbXBhcmV0b3RtYWcgLUluZiAgLXNOYU4gICAtPiAgLTEKK2N0bXg4ODUgY29tcGFyZXRvdG1hZyAtMTAwMCAtc05hTiAgIC0+ICAtMQorY3RteDg4NiBjb21wYXJldG90bWFnIC0xICAgIC1zTmFOICAgLT4gIC0xCitjdG14ODg3IGNvbXBhcmV0b3RtYWcgLTAgICAgLXNOYU4gICAtPiAgLTEKK2N0bXg4ODggY29tcGFyZXRvdG1hZyAgMCAgICAtc05hTiAgIC0+ICAtMQorY3RteDg4OSBjb21wYXJldG90bWFnICAxICAgIC1zTmFOICAgLT4gIC0xCitjdG14ODkwIGNvbXBhcmV0b3RtYWcgIDEwMDAgLXNOYU4gICAtPiAgLTEKK2N0bXg4OTEgY29tcGFyZXRvdG1hZyAgSW5mICAtc05hTiAgIC0+ICAtMQorY3RteDg5MiBjb21wYXJldG90bWFnICBOYU4gIC1zTmFOICAgLT4gIDEKK2N0bXg4OTMgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgIC0+ICAwCisKKy0tIE5hTnMgd2l0aCBwYXlsb2FkCitjdG14OTYwIGNvbXBhcmV0b3RtYWcgIE5hTjkgLUluZiAgIC0+ICAxCitjdG14OTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxCitjdG14OTYyIGNvbXBhcmV0b3RtYWcgIE5hTjc3IEluZiAgIC0+ICAxCitjdG14OTYzIGNvbXBhcmV0b3RtYWcgLU5hTjY3IE5hTjUgIC0+ICAxCitjdG14OTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQorY3RteDk2NSBjb21wYXJldG90bWFnIC05OTkgIC1OYU4zMyAtPiAgLTEKK2N0bXg5NjYgY29tcGFyZXRvdG1hZyAgSW5mICAgTmFOMiAgLT4gIC0xCisKK2N0bXg5NzAgY29tcGFyZXRvdG1hZyAtTmFONDEgLU5hTjQyIC0+IC0xCitjdG14OTcxIGNvbXBhcmV0b3RtYWcgK05hTjQxIC1OYU40MiAtPiAtMQorY3RteDk3MiBjb21wYXJldG90bWFnIC1OYU40MSArTmFONDIgLT4gLTEKK2N0bXg5NzMgY29tcGFyZXRvdG1hZyArTmFONDEgK05hTjQyIC0+IC0xCitjdG14OTc0IGNvbXBhcmV0b3RtYWcgLU5hTjQyIC1OYU4wMSAtPiAgMQorY3RteDk3NSBjb21wYXJldG90bWFnICtOYU40MiAtTmFOMDEgLT4gIDEKK2N0bXg5NzYgY29tcGFyZXRvdG1hZyAtTmFONDIgK05hTjAxIC0+ICAxCitjdG14OTc3IGNvbXBhcmV0b3RtYWcgK05hTjQyICtOYU4wMSAtPiAgMQorCitjdG14OTgwIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgLXNOYU43NzIgLT4gLTEKK2N0bXg5ODEgY29tcGFyZXRvdG1hZyArc05hTjc3MSAtc05hTjc3MiAtPiAtMQorY3RteDk4MiBjb21wYXJldG90bWFnIC1zTmFONzcxICtzTmFONzcyIC0+IC0xCitjdG14OTgzIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgK3NOYU43NzIgLT4gLTEKK2N0bXg5ODQgY29tcGFyZXRvdG1hZyAtc05hTjc3MiAtc05hTjc3MSAtPiAgMQorY3RteDk4NSBjb21wYXJldG90bWFnICtzTmFONzcyIC1zTmFONzcxIC0+ICAxCitjdG14OTg2IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgK3NOYU43NzEgLT4gIDEKK2N0bXg5ODcgY29tcGFyZXRvdG1hZyArc05hTjc3MiArc05hTjc3MSAtPiAgMQorCitjdG14OTkxIGNvbXBhcmV0b3RtYWcgLXNOYU45OSAtSW5mICAgIC0+ICAxCitjdG14OTkyIGNvbXBhcmV0b3RtYWcgIHNOYU45OCAtMTEgICAgIC0+ICAxCitjdG14OTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xCitjdG14OTk0IGNvbXBhcmV0b3RtYWcgIHNOYU4xNiBzTmFOOTQgIC0+IC0xCitjdG14OTk1IGNvbXBhcmV0b3RtYWcgIE5hTjg1ICBzTmFOODMgIC0+ICAxCitjdG14OTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xCitjdG14OTk3IGNvbXBhcmV0b3RtYWcgIDA4OCAgICBzTmFOODEgIC0+IC0xCitjdG14OTk4IGNvbXBhcmV0b3RtYWcgIEluZiAgICBzTmFOOTAgIC0+IC0xCitjdG14OTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gc3Vibm9ybWFsIHJlc3VsdHMgbm93IGFsbG93ZWQKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitjdG14MTA4MCBjb21wYXJldG90bWFnICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAgLT4gIC0xCitjdG14MTA4MSBjb21wYXJldG90bWFnIDlFKzk5OTk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAgLT4gICAxCitjdG14MTA4MiBjb21wYXJldG90bWFnICswLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAgLT4gICAxCitjdG14MTA4MyBjb21wYXJldG90bWFnIDlFLTk5OTk5OTk5OSArMC4xMDAgICAgICAgICAgICAgICAgLT4gIC0xCitjdG14MTA4NSBjb21wYXJldG90bWFnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAgLT4gIC0xCitjdG14MTA4NiBjb21wYXJldG90bWFnIDlFKzk5OTk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAgLT4gICAxCitjdG14MTA4NyBjb21wYXJldG90bWFnIC0wLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAgLT4gICAxCitjdG14MTA4OCBjb21wYXJldG90bWFnIDlFLTk5OTk5OTk5OSAtMC4xMDAgICAgICAgICAgICAgICAgLT4gIC0xCisKK2N0bXgxMDg5IGNvbXBhcmV0b3RtYWcgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMSAgICAtPiAgLTEKK2N0bXgxMDkwIGNvbXBhcmV0b3RtYWcgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAgICAtPiAgLTEKK2N0bXgxMDkxIGNvbXBhcmV0b3RtYWcgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwMCAgICAtPiAgLTEKK2N0bXgxMDkyIGNvbXBhcmV0b3RtYWcgOWUtOTk5OTk5OTk4IDAuMDEgICAgICAgICAgICAtPiAgLTEKK2N0bXgxMDkzIGNvbXBhcmV0b3RtYWcgOWUtOTk5OTk5OTk4IDAuMSAgICAgICAgICAgICAtPiAgLTEKK2N0bXgxMDk0IGNvbXBhcmV0b3RtYWcgMC4wMSA5ZS05OTk5OTk5OTggICAgICAgICAgICAtPiAgIDEKK2N0bXgxMDk1IGNvbXBhcmV0b3RtYWcgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDEgICAgICAtPiAgIDEKK2N0bXgxMDk2IGNvbXBhcmV0b3RtYWcgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDAgICAgICAtPiAgIDEKK2N0bXgxMDk3IGNvbXBhcmV0b3RtYWcgMWU2MDAwMDAwMDAgMWU0MDAwMDAwMDAgICAgICAtPiAgIDEKK2N0bXgxMDk4IGNvbXBhcmV0b3RtYWcgOWU5OTk5OTk5OTggMTAwICAgICAgICAgICAgICAtPiAgIDEKK2N0bXgxMDk5IGNvbXBhcmV0b3RtYWcgOWU5OTk5OTk5OTggMTAgICAgICAgICAgICAgICAtPiAgIDEKK2N0bXgxMTAwIGNvbXBhcmV0b3RtYWcgMTAwICA5ZTk5OTk5OTk5OCAgICAgICAgICAgICAtPiAgLTEKKy0tIHNpZ25zCitjdG14MTEwMSBjb21wYXJldG90bWFnICAxZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAgLT4gICAxCitjdG14MTEwMiBjb21wYXJldG90bWFnICAxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAgLT4gICAxCitjdG14MTEwMyBjb21wYXJldG90bWFnIC0xZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAgLT4gICAxCitjdG14MTEwNCBjb21wYXJldG90bWFnIC0xZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAgLT4gICAxCitjdG14MTEwNSBjb21wYXJldG90bWFnICAxZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAgLT4gIC0xCitjdG14MTEwNiBjb21wYXJldG90bWFnICAxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAgLT4gIC0xCitjdG14MTEwNyBjb21wYXJldG90bWFnIC0xZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAgLT4gIC0xCitjdG14MTEwOCBjb21wYXJldG90bWFnIC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAgLT4gIC0xCisKKy0tIHNwcmVhZCB6ZXJvcworY3RteDExMTAgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAgMCAgICAgICAgLT4gIC0xCitjdG14MTExMSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wICAgICAgICAtPiAgLTEKK2N0bXgxMTEyIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDAgICAgICAgIC0+ICAtMQorY3RteDExMTMgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAtMCAgICAgICAgLT4gIC0xCitjdG14MTExNCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwRSszODQgICAtPiAgLTEKK2N0bXgxMTE1IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTBFKzM4NCAgIC0+ICAtMQorY3RteDExMTYgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAgMEUrMzg0ICAgLT4gIC0xCitjdG14MTExNyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wRSszODQgICAtPiAgLTEKK2N0bXgxMTE4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFKzM4NCAgIC0+ICAtMQorY3RteDExMTkgY29tcGFyZXRvdG1hZyAgIDAgICAgICAtMEUrMzg0ICAgLT4gIC0xCitjdG14MTEyMCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRSszODQgICAtPiAgLTEKK2N0bXgxMTIxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFKzM4NCAgIC0+ICAtMQorCitjdG14MTEzMCBjb21wYXJldG90bWFnICAgMEUrMzg0ICAwICAgICAgICAtPiAgIDEKK2N0bXgxMTMxIGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTAgICAgICAgIC0+ICAgMQorY3RteDExMzIgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAgMCAgICAgICAgLT4gICAxCitjdG14MTEzMyBjb21wYXJldG90bWFnICAtMEUrMzg0IC0wICAgICAgICAtPiAgIDEKK2N0bXgxMTM0IGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDBFLTM4MyAgIC0+ICAgMQorY3RteDExMzUgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAtMEUtMzgzICAgLT4gICAxCitjdG14MTEzNiBjb21wYXJldG90bWFnICAtMEUrMzg0ICAwRS0zODMgICAtPiAgIDEKK2N0bXgxMTM3IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTBFLTM4MyAgIC0+ICAgMQorY3RteDExMzggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUtMzgzICAgLT4gICAxCitjdG14MTEzOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRS0zODMgICAtPiAgIDEKK2N0bXgxMTQwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFLTM4MyAgIC0+ICAgMQorY3RteDExNDEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUtMzgzICAgLT4gICAxCisKKy0tIE51bGwgdGVzdHMKK2N0bXg5OTkwIGNvbXBhcmV0b3RtYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitjdG14OTk5MSBjb21wYXJldG90bWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHkuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5LmRlY1Rlc3QKaW5kZXggYjQ3ZTQ5OS4uZDlmMjk5ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHkuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weS5kZWNUZXN0CkBAIC0xLDg2ICsxLDg2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBjb3B5LmRlY1Rlc3QgLS0gcXVpZXQgY29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotDQotLS0gU2FuaXR5IGNoZWNrDQotY3B5eDAwMSBjb3B5ICAgICAgICs3LjUwICAtPiA3LjUwDQotDQotLS0gSW5maW5pdGllcw0KLWNweXgwMTEgY29weSAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkNCi1jcHl4MDEyIGNvcHkgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWNweXgwMjEgY29weSAgICAgICAgIE5hTiAgLT4gTmFODQotY3B5eDAyMiBjb3B5ICAgICAgICAtTmFOICAtPiAtTmFODQotY3B5eDAyMyBjb3B5ICAgICAgICBzTmFOICAtPiBzTmFODQotY3B5eDAyNCBjb3B5ICAgICAgIC1zTmFOICAtPiAtc05hTg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1jcHl4MDMxIGNvcHkgICAgICAgTmFOMTAgIC0+IE5hTjEwDQotY3B5eDAzMiBjb3B5ICAgICAgLU5hTjEwICAtPiAtTmFOMTANCi1jcHl4MDMzIGNvcHkgICAgICBzTmFOMTAgIC0+IHNOYU4xMA0KLWNweXgwMzQgY29weSAgICAgLXNOYU4xMCAgLT4gLXNOYU4xMA0KLWNweXgwMzUgY29weSAgICAgICBOYU43ICAgLT4gTmFONw0KLWNweXgwMzYgY29weSAgICAgIC1OYU43ICAgLT4gLU5hTjcNCi1jcHl4MDM3IGNvcHkgICAgICBzTmFOMTAxIC0+IHNOYU4xMDENCi1jcHl4MDM4IGNvcHkgICAgIC1zTmFOMTAxIC0+IC1zTmFOMTAxDQotDQotLS0gZmluaXRlcw0KLWNweXgxMDEgY29weSAgICAgICAgICA3ICAgLT4gNw0KLWNweXgxMDIgY29weSAgICAgICAgIC03ICAgLT4gLTcNCi1jcHl4MTAzIGNvcHkgICAgICAgICA3NSAgIC0+IDc1DQotY3B5eDEwNCBjb3B5ICAgICAgICAtNzUgICAtPiAtNzUNCi1jcHl4MTA1IGNvcHkgICAgICAgNy41MCAgIC0+IDcuNTANCi1jcHl4MTA2IGNvcHkgICAgICAtNy41MCAgIC0+IC03LjUwDQotY3B5eDEwNyBjb3B5ICAgICAgIDcuNTAwICAtPiA3LjUwMA0KLWNweXgxMDggY29weSAgICAgIC03LjUwMCAgLT4gLTcuNTAwDQotDQotLS0gemVyb3MNCi1jcHl4MTExIGNvcHkgICAgICAgICAgMCAgIC0+IDANCi1jcHl4MTEyIGNvcHkgICAgICAgICAtMCAgIC0+IC0wDQotY3B5eDExMyBjb3B5ICAgICAgIDBFKzQgICAtPiAwRSs0DQotY3B5eDExNCBjb3B5ICAgICAgLTBFKzQgICAtPiAtMEUrNA0KLWNweXgxMTUgY29weSAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQotY3B5eDExNiBjb3B5ICAgIC0wLjAwMDAgICAtPiAtMC4wMDAwDQotY3B5eDExNyBjb3B5ICAgICAgMEUtMTQxICAtPiAwRS0xNDENCi1jcHl4MTE4IGNvcHkgICAgIC0wRS0xNDEgIC0+IC0wRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWNweXgxMjEgY29weSAgIDI2ODI2ODI2OCAgICAgICAgLT4gMjY4MjY4MjY4DQotY3B5eDEyMiBjb3B5ICAtMjY4MjY4MjY4ICAgICAgICAtPiAtMjY4MjY4MjY4DQotY3B5eDEyMyBjb3B5ICAgMTM0MTM0MTM0ICAgICAgICAtPiAxMzQxMzQxMzQNCi1jcHl4MTI0IGNvcHkgIC0xMzQxMzQxMzQgICAgICAgIC0+IC0xMzQxMzQxMzQNCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWNweXgxMzEgY29weSAgOS45OTk5OTk5OUUrOTk5ICAgLT4gOS45OTk5OTk5OUUrOTk5DQotY3B5eDEzMiBjb3B5ICAxRS05OTkgICAgICAgICAgICAtPiAxRS05OTkNCi1jcHl4MTMzIGNvcHkgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IDEuMDAwMDAwMDBFLTk5OQ0KLWNweXgxMzQgY29weSAgMUUtMTAwNyAgICAgICAgICAgLT4gMUUtMTAwNw0KLQ0KLWNweXgxMzUgY29weSAgLTFFLTEwMDcgICAgICAgICAgLT4gLTFFLTEwMDcNCi1jcHl4MTM2IGNvcHkgIC0xLjAwMDAwMDAwRS05OTkgIC0+IC0xLjAwMDAwMDAwRS05OTkNCi1jcHl4MTM3IGNvcHkgIC0xRS05OTkgICAgICAgICAgIC0+IC0xRS05OTkNCi1jcHl4MTM4IGNvcHkgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IC05Ljk5OTk5OTk5RSs5OTkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvcHkuZGVjVGVzdCAtLSBxdWlldCBjb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrCitjcHl4MDAxIGNvcHkgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworY3B5eDAxMSBjb3B5ICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorY3B5eDAxMiBjb3B5ICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitjcHl4MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTgorY3B5eDAyMiBjb3B5ICAgICAgICAtTmFOICAtPiAtTmFOCitjcHl4MDIzIGNvcHkgICAgICAgIHNOYU4gIC0+IHNOYU4KK2NweXgwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorY3B5eDAzMSBjb3B5ICAgICAgIE5hTjEwICAtPiBOYU4xMAorY3B5eDAzMiBjb3B5ICAgICAgLU5hTjEwICAtPiAtTmFOMTAKK2NweXgwMzMgY29weSAgICAgIHNOYU4xMCAgLT4gc05hTjEwCitjcHl4MDM0IGNvcHkgICAgIC1zTmFOMTAgIC0+IC1zTmFOMTAKK2NweXgwMzUgY29weSAgICAgICBOYU43ICAgLT4gTmFONworY3B5eDAzNiBjb3B5ICAgICAgLU5hTjcgICAtPiAtTmFONworY3B5eDAzNyBjb3B5ICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCitjcHl4MDM4IGNvcHkgICAgIC1zTmFOMTAxIC0+IC1zTmFOMTAxCisKKy0tIGZpbml0ZXMKK2NweXgxMDEgY29weSAgICAgICAgICA3ICAgLT4gNworY3B5eDEwMiBjb3B5ICAgICAgICAgLTcgICAtPiAtNworY3B5eDEwMyBjb3B5ICAgICAgICAgNzUgICAtPiA3NQorY3B5eDEwNCBjb3B5ICAgICAgICAtNzUgICAtPiAtNzUKK2NweXgxMDUgY29weSAgICAgICA3LjUwICAgLT4gNy41MAorY3B5eDEwNiBjb3B5ICAgICAgLTcuNTAgICAtPiAtNy41MAorY3B5eDEwNyBjb3B5ICAgICAgIDcuNTAwICAtPiA3LjUwMAorY3B5eDEwOCBjb3B5ICAgICAgLTcuNTAwICAtPiAtNy41MDAKKworLS0gemVyb3MKK2NweXgxMTEgY29weSAgICAgICAgICAwICAgLT4gMAorY3B5eDExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMAorY3B5eDExMyBjb3B5ICAgICAgIDBFKzQgICAtPiAwRSs0CitjcHl4MTE0IGNvcHkgICAgICAtMEUrNCAgIC0+IC0wRSs0CitjcHl4MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorY3B5eDExNiBjb3B5ICAgIC0wLjAwMDAgICAtPiAtMC4wMDAwCitjcHl4MTE3IGNvcHkgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorY3B5eDExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitjcHl4MTIxIGNvcHkgICAyNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OAorY3B5eDEyMiBjb3B5ICAtMjY4MjY4MjY4ICAgICAgICAtPiAtMjY4MjY4MjY4CitjcHl4MTIzIGNvcHkgICAxMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNAorY3B5eDEyNCBjb3B5ICAtMTM0MTM0MTM0ICAgICAgICAtPiAtMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CitjcHl4MTMxIGNvcHkgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDkuOTk5OTk5OTlFKzk5OQorY3B5eDEzMiBjb3B5ICAxRS05OTkgICAgICAgICAgICAtPiAxRS05OTkKK2NweXgxMzMgY29weSAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gMS4wMDAwMDAwMEUtOTk5CitjcHl4MTM0IGNvcHkgIDFFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcKKworY3B5eDEzNSBjb3B5ICAtMUUtMTAwNyAgICAgICAgICAtPiAtMUUtMTAwNworY3B5eDEzNiBjb3B5ICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtMS4wMDAwMDAwMEUtOTk5CitjcHl4MTM3IGNvcHkgIC0xRS05OTkgICAgICAgICAgIC0+IC0xRS05OTkKK2NweXgxMzggY29weSAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLTkuOTk5OTk5OTlFKzk5OQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlhYnMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5YWJzLmRlY1Rlc3QKaW5kZXggZjdkMGY4Ni4uNTIwMDJkYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlhYnMuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weWFicy5kZWNUZXN0CkBAIC0xLDg2ICsxLDg2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBjb3B5QWJzLmRlY1Rlc3QgLS0gcXVpZXQgY29weSBhbmQgc2V0IHNpZ24gdG8gemVybyAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotDQotLS0gU2FuaXR5IGNoZWNrDQotY3BheDAwMSBjb3B5YWJzICAgICAgICs3LjUwICAtPiA3LjUwDQotDQotLS0gSW5maW5pdGllcw0KLWNwYXgwMTEgY29weWFicyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkNCi1jcGF4MDEyIGNvcHlhYnMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotY3BheDAyMSBjb3B5YWJzICAgICAgICAgTmFOICAtPiBOYU4NCi1jcGF4MDIyIGNvcHlhYnMgICAgICAgIC1OYU4gIC0+IE5hTg0KLWNwYXgwMjMgY29weWFicyAgICAgICAgc05hTiAgLT4gc05hTg0KLWNwYXgwMjQgY29weWFicyAgICAgICAtc05hTiAgLT4gc05hTg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1jcGF4MDMxIGNvcHlhYnMgICAgICAgTmFOMTAgIC0+IE5hTjEwDQotY3BheDAzMiBjb3B5YWJzICAgICAgLU5hTjE1ICAtPiBOYU4xNQ0KLWNwYXgwMzMgY29weWFicyAgICAgIHNOYU4xNSAgLT4gc05hTjE1DQotY3BheDAzNCBjb3B5YWJzICAgICAtc05hTjEwICAtPiBzTmFOMTANCi1jcGF4MDM1IGNvcHlhYnMgICAgICAgTmFONyAgIC0+IE5hTjcNCi1jcGF4MDM2IGNvcHlhYnMgICAgICAtTmFONyAgIC0+IE5hTjcNCi1jcGF4MDM3IGNvcHlhYnMgICAgICBzTmFOMTAxIC0+IHNOYU4xMDENCi1jcGF4MDM4IGNvcHlhYnMgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDENCi0NCi0tLSBmaW5pdGVzDQotY3BheDEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3DQotY3BheDEwMiBjb3B5YWJzICAgICAgICAgLTcgICAtPiA3DQotY3BheDEwMyBjb3B5YWJzICAgICAgICAgNzUgICAtPiA3NQ0KLWNwYXgxMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUNCi1jcGF4MTA1IGNvcHlhYnMgICAgICAgNy4xMCAgIC0+IDcuMTANCi1jcGF4MTA2IGNvcHlhYnMgICAgICAtNy4xMCAgIC0+IDcuMTANCi1jcGF4MTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwDQotY3BheDEwOCBjb3B5YWJzICAgICAgLTcuNTAwICAtPiA3LjUwMA0KLQ0KLS0tIHplcm9zDQotY3BheDExMSBjb3B5YWJzICAgICAgICAgIDAgICAtPiAwDQotY3BheDExMiBjb3B5YWJzICAgICAgICAgLTAgICAtPiAwDQotY3BheDExMyBjb3B5YWJzICAgICAgIDBFKzYgICAtPiAwRSs2DQotY3BheDExNCBjb3B5YWJzICAgICAgLTBFKzYgICAtPiAwRSs2DQotY3BheDExNSBjb3B5YWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDANCi1jcGF4MTE2IGNvcHlhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KLWNwYXgxMTcgY29weWFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxDQotY3BheDExOCBjb3B5YWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWNwYXgxMjEgY29weWFicyAgIDI2ODI2ODI2OCAgICAgICAgLT4gMjY4MjY4MjY4DQotY3BheDEyMiBjb3B5YWJzICAtMjY4MjY4MjY4ICAgICAgICAtPiAyNjgyNjgyNjgNCi1jcGF4MTIzIGNvcHlhYnMgICAxMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNA0KLWNwYXgxMjQgY29weWFicyAgLTEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0DQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1jcGF4MTMxIGNvcHlhYnMgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDkuOTk5OTk5OTlFKzk5OQ0KLWNwYXgxMzIgY29weWFicyAgMUUtOTk5ICAgICAgICAgICAgLT4gMUUtOTk5DQotY3BheDEzMyBjb3B5YWJzICAxLjAwMDAwMDAwRS05OTkgICAtPiAxLjAwMDAwMDAwRS05OTkNCi1jcGF4MTM0IGNvcHlhYnMgIDFFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcNCi0NCi1jcGF4MTM1IGNvcHlhYnMgIC0xRS0xMDA3ICAgICAgICAgIC0+IDFFLTEwMDcNCi1jcGF4MTM2IGNvcHlhYnMgIC0xLjAwMDAwMDAwRS05OTkgIC0+IDEuMDAwMDAwMDBFLTk5OQ0KLWNwYXgxMzcgY29weWFicyAgLTFFLTk5OSAgICAgICAgICAgLT4gMUUtOTk5DQotY3BheDE5OSBjb3B5YWJzICAtOS45OTk5OTk5OUUrOTk5ICAtPiA5Ljk5OTk5OTk5RSs5OTkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvcHlBYnMuZGVjVGVzdCAtLSBxdWlldCBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrCitjcGF4MDAxIGNvcHlhYnMgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworY3BheDAxMSBjb3B5YWJzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorY3BheDAxMiBjb3B5YWJzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2NwYXgwMjEgY29weWFicyAgICAgICAgIE5hTiAgLT4gTmFOCitjcGF4MDIyIGNvcHlhYnMgICAgICAgIC1OYU4gIC0+IE5hTgorY3BheDAyMyBjb3B5YWJzICAgICAgICBzTmFOICAtPiBzTmFOCitjcGF4MDI0IGNvcHlhYnMgICAgICAgLXNOYU4gIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorY3BheDAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMAorY3BheDAzMiBjb3B5YWJzICAgICAgLU5hTjE1ICAtPiBOYU4xNQorY3BheDAzMyBjb3B5YWJzICAgICAgc05hTjE1ICAtPiBzTmFOMTUKK2NwYXgwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwCitjcGF4MDM1IGNvcHlhYnMgICAgICAgTmFONyAgIC0+IE5hTjcKK2NwYXgwMzYgY29weWFicyAgICAgIC1OYU43ICAgLT4gTmFONworY3BheDAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCitjcGF4MDM4IGNvcHlhYnMgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworY3BheDEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3CitjcGF4MTAyIGNvcHlhYnMgICAgICAgICAtNyAgIC0+IDcKK2NwYXgxMDMgY29weWFicyAgICAgICAgIDc1ICAgLT4gNzUKK2NwYXgxMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUKK2NwYXgxMDUgY29weWFicyAgICAgICA3LjEwICAgLT4gNy4xMAorY3BheDEwNiBjb3B5YWJzICAgICAgLTcuMTAgICAtPiA3LjEwCitjcGF4MTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwCitjcGF4MTA4IGNvcHlhYnMgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitjcGF4MTExIGNvcHlhYnMgICAgICAgICAgMCAgIC0+IDAKK2NwYXgxMTIgY29weWFicyAgICAgICAgIC0wICAgLT4gMAorY3BheDExMyBjb3B5YWJzICAgICAgIDBFKzYgICAtPiAwRSs2CitjcGF4MTE0IGNvcHlhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYKK2NwYXgxMTUgY29weWFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitjcGF4MTE2IGNvcHlhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorY3BheDExNyBjb3B5YWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDEKK2NwYXgxMTggY29weWFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitjcGF4MTIxIGNvcHlhYnMgICAyNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OAorY3BheDEyMiBjb3B5YWJzICAtMjY4MjY4MjY4ICAgICAgICAtPiAyNjgyNjgyNjgKK2NwYXgxMjMgY29weWFicyAgIDEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0CitjcGF4MTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorY3BheDEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5RSs5OTkgICAtPiA5Ljk5OTk5OTk5RSs5OTkKK2NwYXgxMzIgY29weWFicyAgMUUtOTk5ICAgICAgICAgICAgLT4gMUUtOTk5CitjcGF4MTMzIGNvcHlhYnMgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IDEuMDAwMDAwMDBFLTk5OQorY3BheDEzNCBjb3B5YWJzICAxRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3CisKK2NwYXgxMzUgY29weWFicyAgLTFFLTEwMDcgICAgICAgICAgLT4gMUUtMTAwNworY3BheDEzNiBjb3B5YWJzICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAxLjAwMDAwMDAwRS05OTkKK2NwYXgxMzcgY29weWFicyAgLTFFLTk5OSAgICAgICAgICAgLT4gMUUtOTk5CitjcGF4MTk5IGNvcHlhYnMgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IDkuOTk5OTk5OTlFKzk5OQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHluZWdhdGUuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5bmVnYXRlLmRlY1Rlc3QKaW5kZXggMzgyMzViNi4uN2Y4ZGU5ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHluZWdhdGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weW5lZ2F0ZS5kZWNUZXN0CkBAIC0xLDg2ICsxLDg2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBjb3B5TmVnYXRlLmRlY1Rlc3QgLS0gcXVpZXQgY29weSBhbmQgbmVnYXRlICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotDQotLS0gU2FuaXR5IGNoZWNrDQotY3BueDAwMSBjb3B5bmVnYXRlICAgICAgICs3LjUwICAtPiAtNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1jcG54MDExIGNvcHluZWdhdGUgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQ0KLWNwbngwMTIgY29weW5lZ2F0ZSAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1jcG54MDIxIGNvcHluZWdhdGUgICAgICAgICBOYU4gIC0+IC1OYU4NCi1jcG54MDIyIGNvcHluZWdhdGUgICAgICAgIC1OYU4gIC0+IE5hTg0KLWNwbngwMjMgY29weW5lZ2F0ZSAgICAgICAgc05hTiAgLT4gLXNOYU4NCi1jcG54MDI0IGNvcHluZWdhdGUgICAgICAgLXNOYU4gIC0+IHNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotY3BueDAzMSBjb3B5bmVnYXRlICAgICAgIE5hTjEzICAtPiAtTmFOMTMNCi1jcG54MDMyIGNvcHluZWdhdGUgICAgICAtTmFOMTMgIC0+IE5hTjEzDQotY3BueDAzMyBjb3B5bmVnYXRlICAgICAgc05hTjEzICAtPiAtc05hTjEzDQotY3BueDAzNCBjb3B5bmVnYXRlICAgICAtc05hTjEzICAtPiBzTmFOMTMNCi1jcG54MDM1IGNvcHluZWdhdGUgICAgICAgTmFONzAgIC0+IC1OYU43MA0KLWNwbngwMzYgY29weW5lZ2F0ZSAgICAgIC1OYU43MCAgLT4gTmFONzANCi1jcG54MDM3IGNvcHluZWdhdGUgICAgICBzTmFOMTAxIC0+IC1zTmFOMTAxDQotY3BueDAzOCBjb3B5bmVnYXRlICAgICAtc05hTjEwMSAtPiBzTmFOMTAxDQotDQotLS0gZmluaXRlcw0KLWNwbngxMDEgY29weW5lZ2F0ZSAgICAgICAgICA3ICAgLT4gLTcNCi1jcG54MTAyIGNvcHluZWdhdGUgICAgICAgICAtNyAgIC0+IDcNCi1jcG54MTAzIGNvcHluZWdhdGUgICAgICAgICA3NSAgIC0+IC03NQ0KLWNwbngxMDQgY29weW5lZ2F0ZSAgICAgICAgLTc1ICAgLT4gNzUNCi1jcG54MTA1IGNvcHluZWdhdGUgICAgICAgNy41MCAgIC0+IC03LjUwDQotY3BueDEwNiBjb3B5bmVnYXRlICAgICAgLTcuNTAgICAtPiA3LjUwDQotY3BueDEwNyBjb3B5bmVnYXRlICAgICAgIDcuNTAwICAtPiAtNy41MDANCi1jcG54MTA4IGNvcHluZWdhdGUgICAgICAtNy41MDAgIC0+IDcuNTAwDQotDQotLS0gemVyb3MNCi1jcG54MTExIGNvcHluZWdhdGUgICAgICAgICAgMCAgIC0+IC0wDQotY3BueDExMiBjb3B5bmVnYXRlICAgICAgICAgLTAgICAtPiAwDQotY3BueDExMyBjb3B5bmVnYXRlICAgICAgIDBFKzQgICAtPiAtMEUrNA0KLWNwbngxMTQgY29weW5lZ2F0ZSAgICAgIC0wRSs0ICAgLT4gMEUrNA0KLWNwbngxMTUgY29weW5lZ2F0ZSAgICAgMC4wMDAwICAgLT4gLTAuMDAwMA0KLWNwbngxMTYgY29weW5lZ2F0ZSAgICAtMC4wMDAwICAgLT4gMC4wMDAwDQotY3BueDExNyBjb3B5bmVnYXRlICAgICAgMEUtMTQxICAtPiAtMEUtMTQxDQotY3BueDExOCBjb3B5bmVnYXRlICAgICAtMEUtMTQxICAtPiAwRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWNwbngxMjEgY29weW5lZ2F0ZSAgMjY4MjY4MjY4ICAgICAgICAgLT4gLTI2ODI2ODI2OA0KLWNwbngxMjIgY29weW5lZ2F0ZSAgLTI2ODI2ODI2OCAgICAgICAgLT4gMjY4MjY4MjY4DQotY3BueDEyMyBjb3B5bmVnYXRlICAxMzQxMzQxMzQgICAgICAgICAtPiAtMTM0MTM0MTM0DQotY3BueDEyNCBjb3B5bmVnYXRlICAtMTM0MTM0MTM0ICAgICAgICAtPiAxMzQxMzQxMzQNCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWNwbngxMzEgY29weW5lZ2F0ZSAgOS45OTk5OTk5OUUrOTk5ICAgLT4gLTkuOTk5OTk5OTlFKzk5OQ0KLWNwbngxMzIgY29weW5lZ2F0ZSAgMUUtOTk5ICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTk5OQ0KLWNwbngxMzMgY29weW5lZ2F0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gLTEuMDAwMDAwMDBFLTk5OQ0KLWNwbngxMzQgY29weW5lZ2F0ZSAgMUUtMTAwNyAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTEwMDcNCi0NCi1jcG54MTM1IGNvcHluZWdhdGUgIC0xRS0xMDA3ICAgICAgICAgICAgICAgICAgIC0+IDFFLTEwMDcNCi1jcG54MTM2IGNvcHluZWdhdGUgIC0xLjAwMDAwMDAwRS05OTkgIC0+IDEuMDAwMDAwMDBFLTk5OQ0KLWNwbngxMzcgY29weW5lZ2F0ZSAgLTFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gMUUtOTk5DQotY3BueDEzOCBjb3B5bmVnYXRlICAtOS45OTk5OTk5OUUrOTk5ICAtPiA5Ljk5OTk5OTk5RSs5OTkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvcHlOZWdhdGUuZGVjVGVzdCAtLSBxdWlldCBjb3B5IGFuZCBuZWdhdGUgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrCitjcG54MDAxIGNvcHluZWdhdGUgICAgICAgKzcuNTAgIC0+IC03LjUwCisKKy0tIEluZmluaXRpZXMKK2NwbngwMTEgY29weW5lZ2F0ZSAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5CitjcG54MDEyIGNvcHluZWdhdGUgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorY3BueDAyMSBjb3B5bmVnYXRlICAgICAgICAgTmFOICAtPiAtTmFOCitjcG54MDIyIGNvcHluZWdhdGUgICAgICAgIC1OYU4gIC0+IE5hTgorY3BueDAyMyBjb3B5bmVnYXRlICAgICAgICBzTmFOICAtPiAtc05hTgorY3BueDAyNCBjb3B5bmVnYXRlICAgICAgIC1zTmFOICAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2NwbngwMzEgY29weW5lZ2F0ZSAgICAgICBOYU4xMyAgLT4gLU5hTjEzCitjcG54MDMyIGNvcHluZWdhdGUgICAgICAtTmFOMTMgIC0+IE5hTjEzCitjcG54MDMzIGNvcHluZWdhdGUgICAgICBzTmFOMTMgIC0+IC1zTmFOMTMKK2NwbngwMzQgY29weW5lZ2F0ZSAgICAgLXNOYU4xMyAgLT4gc05hTjEzCitjcG54MDM1IGNvcHluZWdhdGUgICAgICAgTmFONzAgIC0+IC1OYU43MAorY3BueDAzNiBjb3B5bmVnYXRlICAgICAgLU5hTjcwICAtPiBOYU43MAorY3BueDAzNyBjb3B5bmVnYXRlICAgICAgc05hTjEwMSAtPiAtc05hTjEwMQorY3BueDAzOCBjb3B5bmVnYXRlICAgICAtc05hTjEwMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2NwbngxMDEgY29weW5lZ2F0ZSAgICAgICAgICA3ICAgLT4gLTcKK2NwbngxMDIgY29weW5lZ2F0ZSAgICAgICAgIC03ICAgLT4gNworY3BueDEwMyBjb3B5bmVnYXRlICAgICAgICAgNzUgICAtPiAtNzUKK2NwbngxMDQgY29weW5lZ2F0ZSAgICAgICAgLTc1ICAgLT4gNzUKK2NwbngxMDUgY29weW5lZ2F0ZSAgICAgICA3LjUwICAgLT4gLTcuNTAKK2NwbngxMDYgY29weW5lZ2F0ZSAgICAgIC03LjUwICAgLT4gNy41MAorY3BueDEwNyBjb3B5bmVnYXRlICAgICAgIDcuNTAwICAtPiAtNy41MDAKK2NwbngxMDggY29weW5lZ2F0ZSAgICAgIC03LjUwMCAgLT4gNy41MDAKKworLS0gemVyb3MKK2NwbngxMTEgY29weW5lZ2F0ZSAgICAgICAgICAwICAgLT4gLTAKK2NwbngxMTIgY29weW5lZ2F0ZSAgICAgICAgIC0wICAgLT4gMAorY3BueDExMyBjb3B5bmVnYXRlICAgICAgIDBFKzQgICAtPiAtMEUrNAorY3BueDExNCBjb3B5bmVnYXRlICAgICAgLTBFKzQgICAtPiAwRSs0CitjcG54MTE1IGNvcHluZWdhdGUgICAgIDAuMDAwMCAgIC0+IC0wLjAwMDAKK2NwbngxMTYgY29weW5lZ2F0ZSAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitjcG54MTE3IGNvcHluZWdhdGUgICAgICAwRS0xNDEgIC0+IC0wRS0xNDEKK2NwbngxMTggY29weW5lZ2F0ZSAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitjcG54MTIxIGNvcHluZWdhdGUgIDI2ODI2ODI2OCAgICAgICAgIC0+IC0yNjgyNjgyNjgKK2NwbngxMjIgY29weW5lZ2F0ZSAgLTI2ODI2ODI2OCAgICAgICAgLT4gMjY4MjY4MjY4CitjcG54MTIzIGNvcHluZWdhdGUgIDEzNDEzNDEzNCAgICAgICAgIC0+IC0xMzQxMzQxMzQKK2NwbngxMjQgY29weW5lZ2F0ZSAgLTEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CitjcG54MTMxIGNvcHluZWdhdGUgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IC05Ljk5OTk5OTk5RSs5OTkKK2NwbngxMzIgY29weW5lZ2F0ZSAgMUUtOTk5ICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTk5OQorY3BueDEzMyBjb3B5bmVnYXRlICAxLjAwMDAwMDAwRS05OTkgICAtPiAtMS4wMDAwMDAwMEUtOTk5CitjcG54MTM0IGNvcHluZWdhdGUgIDFFLTEwMDcgICAgICAgICAgICAgICAgICAgIC0+IC0xRS0xMDA3CisKK2NwbngxMzUgY29weW5lZ2F0ZSAgLTFFLTEwMDcgICAgICAgICAgICAgICAgICAgLT4gMUUtMTAwNworY3BueDEzNiBjb3B5bmVnYXRlICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAxLjAwMDAwMDAwRS05OTkKK2NwbngxMzcgY29weW5lZ2F0ZSAgLTFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gMUUtOTk5CitjcG54MTM4IGNvcHluZWdhdGUgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IDkuOTk5OTk5OTlFKzk5OQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlzaWduLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weXNpZ24uZGVjVGVzdAppbmRleCA4MDYxYTQyLi5hZmRkNjcwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weXNpZ24uZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weXNpZ24uZGVjVGVzdApAQCAtMSwxNzcgKzEsMTc3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBjb3B5c2lnbi5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgd2l0aCBzaWduIGZyb20gcmhzICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotDQotLS0gU2FuaXR5IGNoZWNrLCBhbmQgZXhhbXBsZXMgZnJvbSBkZWNBcml0aA0KLWNwc3gwMDEgY29weXNpZ24gICArNy41MCAgICAgICAxMSAgLT4gNy41MA0KLWNwc3gwMDIgY29weXNpZ24gICAnMS41MCcgICAnNy4zMycgLT4gMS41MA0KLWNwc3gwMDMgY29weXNpZ24gICctMS41MCcgICAnNy4zMycgLT4gMS41MA0KLWNwc3gwMDQgY29weXNpZ24gICAnMS41MCcgICctNy4zMycgLT4gLTEuNTANCi1jcHN4MDA1IGNvcHlzaWduICAnLTEuNTAnICAnLTcuMzMnIC0+IC0xLjUwDQotDQotLS0gSW5maW5pdGllcw0KLWNwc3gwMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIDExIC0+IEluZmluaXR5DQotY3BzeDAxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgMTEgLT4gSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1jcHN4MDIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAxMSAtPiBOYU4NCi1jcHN4MDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4NCi1jcHN4MDIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAxMSAtPiBzTmFODQotY3BzeDAyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgMTEgLT4gc05hTg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1jcHN4MDMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAxMSAtPiBOYU4xMA0KLWNwc3gwMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIDExIC0+IE5hTjEwDQotY3BzeDAzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgMTEgLT4gc05hTjEwDQotY3BzeDAzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgMTEgLT4gc05hTjEwDQotY3BzeDAzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgMTEgLT4gTmFONw0KLWNwc3gwMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIDExIC0+IE5hTjcNCi1jcHN4MDM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxDQotY3BzeDAzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQ0KLQ0KLS0tIGZpbml0ZXMNCi1jcHN4MTAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAxMSAtPiA3DQotY3BzeDEwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgMTEgLT4gNw0KLWNwc3gxMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIDExIC0+IDc1DQotY3BzeDEwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgMTEgLT4gNzUNCi1jcHN4MTA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAxMSAtPiA3LjUwDQotY3BzeDEwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgMTEgLT4gNy41MA0KLWNwc3gxMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIDExIC0+IDcuNTAwDQotY3BzeDEwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgMTEgLT4gNy41MDANCi0NCi0tLSB6ZXJvcw0KLWNwc3gxMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIDExIC0+IDANCi1jcHN4MTEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAxMSAtPiAwDQotY3BzeDExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNA0KLWNwc3gxMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIDExIC0+IDBFKzQNCi1jcHN4MTE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAxMSAtPiAwLjAwMDANCi1jcHN4MTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDANCi1jcHN4MTE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAxMSAtPiAwRS0xNDENCi1jcHN4MTE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAxMSAtPiAwRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWNwc3gxMjEgY29weXNpZ24gICAyNjgyNjgyNjggICAgICAgICAgIDExIC0+IDI2ODI2ODI2OA0KLWNwc3gxMjIgY29weXNpZ24gIC0yNjgyNjgyNjggICAgICAgICAgIDExIC0+IDI2ODI2ODI2OA0KLWNwc3gxMjMgY29weXNpZ24gICAxMzQxMzQxMzQgICAgICAgICAgIDExIC0+IDEzNDEzNDEzNA0KLWNwc3gxMjQgY29weXNpZ24gIC0xMzQxMzQxMzQgICAgICAgICAgIDExIC0+IDEzNDEzNDEzNA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotY3BzeDEzMSBjb3B5c2lnbiAgOS45OTk5OTk5OUUrOTk5ICAgICAgMTEgLT4gOS45OTk5OTk5OUUrOTk5DQotY3BzeDEzMiBjb3B5c2lnbiAgMUUtOTk5ICAgICAgICAgICAgICAgMTEgLT4gMUUtOTk5DQotY3BzeDEzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMEUtOTk5ICAgICAgMTEgLT4gMS4wMDAwMDAwMEUtOTk5DQotY3BzeDEzNCBjb3B5c2lnbiAgMUUtMTAwNyAgICAgICAgICAgICAgMTEgLT4gMUUtMTAwNw0KLQ0KLWNwc3gxMzUgY29weXNpZ24gIC0xRS0xMDA3ICAgICAgICAgICAgIDExIC0+IDFFLTEwMDcNCi1jcHN4MTM2IGNvcHlzaWduICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxMSAtPiAxLjAwMDAwMDAwRS05OTkNCi1jcHN4MTM3IGNvcHlzaWduICAtMUUtOTk5ICAgICAgICAgICAgICAxMSAtPiAxRS05OTkNCi1jcHN4MTM4IGNvcHlzaWduICAtOS45OTk5OTk5OUUrOTk5ICAgICAxMSAtPiA5Ljk5OTk5OTk5RSs5OTkNCi0NCi0tLSByZXBlYXQgd2l0aCBuZWdhdGl2ZSBSSFMNCi0NCi0tLSBJbmZpbml0aWVzDQotY3BzeDIxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgLTM0IC0+IC1JbmZpbml0eQ0KLWNwc3gyMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIC0zNCAtPiAtSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1jcHN4MjIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAtMzQgLT4gLU5hTg0KLWNwc3gyMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIC0zNCAtPiAtTmFODQotY3BzeDIyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgLTM0IC0+IC1zTmFODQotY3BzeDIyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgLTM0IC0+IC1zTmFODQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWNwc3gyMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIC0zNCAtPiAtTmFOMTANCi1jcHN4MjMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAtMzQgLT4gLU5hTjEwDQotY3BzeDIzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTANCi1jcHN4MjM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMA0KLWNwc3gyMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIC0zNCAtPiAtTmFONw0KLWNwc3gyMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIC0zNCAtPiAtTmFONw0KLWNwc3gyMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQ0KLWNwc3gyMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQ0KLQ0KLS0tIGZpbml0ZXMNCi1jcHN4MzAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAtMzQgLT4gLTcNCi1jcHN4MzAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAtMzQgLT4gLTcNCi1jcHN4MzAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAtMzQgLT4gLTc1DQotY3BzeDMwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgLTM0IC0+IC03NQ0KLWNwc3gzMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIC0zNCAtPiAtNy41MA0KLWNwc3gzMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIC0zNCAtPiAtNy41MA0KLWNwc3gzMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIC0zNCAtPiAtNy41MDANCi1jcHN4MzA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAtMzQgLT4gLTcuNTAwDQotDQotLS0gemVyb3MNCi1jcHN4MzExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAtMzQgLT4gLTANCi1jcHN4MzEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAtMzQgLT4gLTANCi1jcHN4MzEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAtMzQgLT4gLTBFKzQNCi1jcHN4MzE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAtMzQgLT4gLTBFKzQNCi1jcHN4MzE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMA0KLWNwc3gzMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwDQotY3BzeDMxNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDENCi1jcHN4MzE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotY3BzeDMyMSBjb3B5c2lnbiAgIDI2ODI2ODI2OCAgICAgICAgICAtMTggLT4gLTI2ODI2ODI2OA0KLWNwc3gzMjIgY29weXNpZ24gIC0yNjgyNjgyNjggICAgICAgICAgLTE4IC0+IC0yNjgyNjgyNjgNCi1jcHN4MzIzIGNvcHlzaWduICAgMTM0MTM0MTM0ICAgICAgICAgIC0xOCAtPiAtMTM0MTM0MTM0DQotY3BzeDMyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNCAgICAgICAgICAtMTggLT4gLTEzNDEzNDEzNA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotY3BzeDMzMSBjb3B5c2lnbiAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gLTkuOTk5OTk5OTlFKzk5OQ0KLWNwc3gzMzIgY29weXNpZ24gIDFFLTk5OSAgICAgICAgICAgICAgLTE4IC0+IC0xRS05OTkNCi1jcHN4MzMzIGNvcHlzaWduICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiAtMS4wMDAwMDAwMEUtOTk5DQotY3BzeDMzNCBjb3B5c2lnbiAgMUUtMTAwNyAgICAgICAgICAgICAtMTggLT4gLTFFLTEwMDcNCi0NCi1jcHN4MzM1IGNvcHlzaWduICAtMUUtMTAwNyAgICAgICAgICAgIC0xOCAtPiAtMUUtMTAwNw0KLWNwc3gzMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwRS05OTkgICAgLTE4IC0+IC0xLjAwMDAwMDAwRS05OTkNCi1jcHN4MzM3IGNvcHlzaWduICAtMUUtOTk5ICAgICAgICAgICAgIC0xOCAtPiAtMUUtOTk5DQotY3BzeDMzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gLTkuOTk5OTk5OTlFKzk5OQ0KLQ0KLS0tIE90aGVyIGtpbmRzIG9mIFJIUw0KLWNwc3g0MDEgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0zNCAtPiAtNzAxDQotY3BzeDQwMiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTM0IC0+IC03MjANCi1jcHN4NDAzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMCAgLT4gLTcwMQ0KLWNwc3g0MDQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0wICAtPiAtNzIwDQotY3BzeDQwNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzAgIC0+ICA3MDENCi1jcHN4NDA2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMCAgLT4gIDcyMA0KLWNwc3g0MDcgY29weXNpZ24gICAgICAgICAgNzAxICAgICszNCAtPiAgNzAxDQotY3BzeDQwOCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzM0IC0+ICA3MjANCi0NCi1jcHN4NDEzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtSW5mICAtPiAtNzAxDQotY3BzeDQxNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLUluZiAgLT4gLTcyMA0KLWNwc3g0MTUgY29weXNpZ24gICAgICAgICAgNzAxICAgICtJbmYgIC0+ICA3MDENCi1jcHN4NDE2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArSW5mICAtPiAgNzIwDQotDQotY3BzeDQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQ0KLWNwc3g0MjEgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1OYU4gIC0+IC03MjANCi1jcHN4NDIyIGNvcHlzaWduICAgICAgICAgIDcwMSAgICArTmFOICAtPiAgNzAxDQotY3BzeDQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMA0KLWNwc3g0MjUgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU44IC0+ICA3MjANCi0NCi1jcHN4NDI2IGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtc05hTiAgLT4gLTcwMQ0KLWNwc3g0MjcgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1zTmFOICAtPiAtNzIwDQotY3BzeDQyOCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK3NOYU4gIC0+ICA3MDENCi1jcHN4NDI5IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTiAgLT4gIDcyMA0KLWNwc3g0MzAgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOMyAtPiAgNzIwDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb3B5c2lnbi5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgd2l0aCBzaWduIGZyb20gcmhzICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjaywgYW5kIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK2Nwc3gwMDEgY29weXNpZ24gICArNy41MCAgICAgICAxMSAgLT4gNy41MAorY3BzeDAwMiBjb3B5c2lnbiAgICcxLjUwJyAgICc3LjMzJyAtPiAxLjUwCitjcHN4MDAzIGNvcHlzaWduICAnLTEuNTAnICAgJzcuMzMnIC0+IDEuNTAKK2Nwc3gwMDQgY29weXNpZ24gICAnMS41MCcgICctNy4zMycgLT4gLTEuNTAKK2Nwc3gwMDUgY29weXNpZ24gICctMS41MCcgICctNy4zMycgLT4gLTEuNTAKKworLS0gSW5maW5pdGllcworY3BzeDAxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgMTEgLT4gSW5maW5pdHkKK2Nwc3gwMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIDExIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorY3BzeDAyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgMTEgLT4gTmFOCitjcHN4MDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4KK2Nwc3gwMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIDExIC0+IHNOYU4KK2Nwc3gwMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIDExIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorY3BzeDAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTAKK2Nwc3gwMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIDExIC0+IE5hTjEwCitjcHN4MDMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAxMSAtPiBzTmFOMTAKK2Nwc3gwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMAorY3BzeDAzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgMTEgLT4gTmFONworY3BzeDAzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgMTEgLT4gTmFONworY3BzeDAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQorY3BzeDAzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitjcHN4MTAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAxMSAtPiA3CitjcHN4MTAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAxMSAtPiA3CitjcHN4MTAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAxMSAtPiA3NQorY3BzeDEwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgMTEgLT4gNzUKK2Nwc3gxMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIDExIC0+IDcuNTAKK2Nwc3gxMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIDExIC0+IDcuNTAKK2Nwc3gxMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIDExIC0+IDcuNTAwCitjcHN4MTA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAxMSAtPiA3LjUwMAorCistLSB6ZXJvcworY3BzeDExMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgMTEgLT4gMAorY3BzeDExMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgMTEgLT4gMAorY3BzeDExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNAorY3BzeDExNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgMTEgLT4gMEUrNAorY3BzeDExNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwCitjcHN4MTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2Nwc3gxMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIDExIC0+IDBFLTE0MQorY3BzeDExOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgMTEgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitjcHN4MTIxIGNvcHlzaWduICAgMjY4MjY4MjY4ICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgKK2Nwc3gxMjIgY29weXNpZ24gIC0yNjgyNjgyNjggICAgICAgICAgIDExIC0+IDI2ODI2ODI2OAorY3BzeDEyMyBjb3B5c2lnbiAgIDEzNDEzNDEzNCAgICAgICAgICAgMTEgLT4gMTM0MTM0MTM0CitjcHN4MTI0IGNvcHlzaWduICAtMTM0MTM0MTM0ICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Nwc3gxMzEgY29weXNpZ24gIDkuOTk5OTk5OTlFKzk5OSAgICAgIDExIC0+IDkuOTk5OTk5OTlFKzk5OQorY3BzeDEzMiBjb3B5c2lnbiAgMUUtOTk5ICAgICAgICAgICAgICAgMTEgLT4gMUUtOTk5CitjcHN4MTMzIGNvcHlzaWduICAxLjAwMDAwMDAwRS05OTkgICAgICAxMSAtPiAxLjAwMDAwMDAwRS05OTkKK2Nwc3gxMzQgY29weXNpZ24gIDFFLTEwMDcgICAgICAgICAgICAgIDExIC0+IDFFLTEwMDcKKworY3BzeDEzNSBjb3B5c2lnbiAgLTFFLTEwMDcgICAgICAgICAgICAgMTEgLT4gMUUtMTAwNworY3BzeDEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTEgLT4gMS4wMDAwMDAwMEUtOTk5CitjcHN4MTM3IGNvcHlzaWduICAtMUUtOTk5ICAgICAgICAgICAgICAxMSAtPiAxRS05OTkKK2Nwc3gxMzggY29weXNpZ24gIC05Ljk5OTk5OTk5RSs5OTkgICAgIDExIC0+IDkuOTk5OTk5OTlFKzk5OQorCistLSByZXBlYXQgd2l0aCBuZWdhdGl2ZSBSSFMKKworLS0gSW5maW5pdGllcworY3BzeDIxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgLTM0IC0+IC1JbmZpbml0eQorY3BzeDIxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgLTM0IC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2Nwc3gyMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIC0zNCAtPiAtTmFOCitjcHN4MjIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAtMzQgLT4gLU5hTgorY3BzeDIyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgLTM0IC0+IC1zTmFOCitjcHN4MjI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAtMzQgLT4gLXNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorY3BzeDIzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgLTM0IC0+IC1OYU4xMAorY3BzeDIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMAorY3BzeDIzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKK2Nwc3gyMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwCitjcHN4MjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2Nwc3gyMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIC0zNCAtPiAtTmFONworY3BzeDIzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgLTM0IC0+IC1zTmFOMTAxCitjcHN4MjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworY3BzeDMwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgLTM0IC0+IC03CitjcHN4MzAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAtMzQgLT4gLTcKK2Nwc3gzMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIC0zNCAtPiAtNzUKK2Nwc3gzMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIC0zNCAtPiAtNzUKK2Nwc3gzMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIC0zNCAtPiAtNy41MAorY3BzeDMwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgLTM0IC0+IC03LjUwCitjcHN4MzA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAtMzQgLT4gLTcuNTAwCitjcHN4MzA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAtMzQgLT4gLTcuNTAwCisKKy0tIHplcm9zCitjcHN4MzExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAtMzQgLT4gLTAKK2Nwc3gzMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIC0zNCAtPiAtMAorY3BzeDMxMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgLTM0IC0+IC0wRSs0CitjcHN4MzE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2Nwc3gzMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCitjcHN4MzE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMAorY3BzeDMxNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDEKK2Nwc3gzMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitjcHN4MzIxIGNvcHlzaWduICAgMjY4MjY4MjY4ICAgICAgICAgIC0xOCAtPiAtMjY4MjY4MjY4CitjcHN4MzIyIGNvcHlzaWduICAtMjY4MjY4MjY4ICAgICAgICAgIC0xOCAtPiAtMjY4MjY4MjY4CitjcHN4MzIzIGNvcHlzaWduICAgMTM0MTM0MTM0ICAgICAgICAgIC0xOCAtPiAtMTM0MTM0MTM0CitjcHN4MzI0IGNvcHlzaWduICAtMTM0MTM0MTM0ICAgICAgICAgIC0xOCAtPiAtMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CitjcHN4MzMxIGNvcHlzaWduICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiAtOS45OTk5OTk5OUUrOTk5CitjcHN4MzMyIGNvcHlzaWduICAxRS05OTkgICAgICAgICAgICAgIC0xOCAtPiAtMUUtOTk5CitjcHN4MzMzIGNvcHlzaWduICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiAtMS4wMDAwMDAwMEUtOTk5CitjcHN4MzM0IGNvcHlzaWduICAxRS0xMDA3ICAgICAgICAgICAgIC0xOCAtPiAtMUUtMTAwNworCitjcHN4MzM1IGNvcHlzaWduICAtMUUtMTAwNyAgICAgICAgICAgIC0xOCAtPiAtMUUtMTAwNworY3BzeDMzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDBFLTk5OSAgICAtMTggLT4gLTEuMDAwMDAwMDBFLTk5OQorY3BzeDMzNyBjb3B5c2lnbiAgLTFFLTk5OSAgICAgICAgICAgICAtMTggLT4gLTFFLTk5OQorY3BzeDMzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gLTkuOTk5OTk5OTlFKzk5OQorCistLSBPdGhlciBraW5kcyBvZiBSSFMKK2Nwc3g0MDEgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0zNCAtPiAtNzAxCitjcHN4NDAyIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMzQgLT4gLTcyMAorY3BzeDQwMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTAgIC0+IC03MDEKK2Nwc3g0MDQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0wICAtPiAtNzIwCitjcHN4NDA1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMCAgLT4gIDcwMQorY3BzeDQwNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzAgIC0+ICA3MjAKK2Nwc3g0MDcgY29weXNpZ24gICAgICAgICAgNzAxICAgICszNCAtPiAgNzAxCitjcHN4NDA4IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMzQgLT4gIDcyMAorCitjcHN4NDEzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtSW5mICAtPiAtNzAxCitjcHN4NDE0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtSW5mICAtPiAtNzIwCitjcHN4NDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxCitjcHN4NDE2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArSW5mICAtPiAgNzIwCisKK2Nwc3g0MjAgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1OYU4gIC0+IC03MDEKK2Nwc3g0MjEgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1OYU4gIC0+IC03MjAKK2Nwc3g0MjIgY29weXNpZ24gICAgICAgICAgNzAxICAgICtOYU4gIC0+ICA3MDEKK2Nwc3g0MjMgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU4gIC0+ICA3MjAKK2Nwc3g0MjUgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU44IC0+ICA3MjAKKworY3BzeDQyNiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLXNOYU4gIC0+IC03MDEKK2Nwc3g0MjcgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1zTmFOICAtPiAtNzIwCitjcHN4NDI4IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArc05hTiAgLT4gIDcwMQorY3BzeDQyOSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4gIC0+ICA3MjAKK2Nwc3g0MzAgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOMyAtPiAgNzIwCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFicy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWJzLmRlY1Rlc3QKaW5kZXggYzZmNWE3Yy4uYjk4ZDY0YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWJzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWJzLmRlY1Rlc3QKQEAgLTEsMTI2ICsxLDEyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRBYnMuZGVjVGVzdCAtLSBkZWNEb3VibGUgYWJzb2x1dGUgdmFsdWUsIGhlZWRpbmcgc05hTiAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZGRhYnMwMDEgYWJzICcxJyAgICAgIC0+ICcxJw0KLWRkYWJzMDAyIGFicyAnLTEnICAgICAtPiAnMScNCi1kZGFiczAwMyBhYnMgJzEuMDAnICAgLT4gJzEuMDAnDQotZGRhYnMwMDQgYWJzICctMS4wMCcgIC0+ICcxLjAwJw0KLWRkYWJzMDA1IGFicyAnMCcgICAgICAtPiAnMCcNCi1kZGFiczAwNiBhYnMgJzAuMDAnICAgLT4gJzAuMDAnDQotZGRhYnMwMDcgYWJzICcwMC4wJyAgIC0+ICcwLjAnDQotZGRhYnMwMDggYWJzICcwMC4wMCcgIC0+ICcwLjAwJw0KLWRkYWJzMDA5IGFicyAnMDAnICAgICAtPiAnMCcNCi0NCi1kZGFiczAxMCBhYnMgJy0yJyAgICAgLT4gJzInDQotZGRhYnMwMTEgYWJzICcyJyAgICAgIC0+ICcyJw0KLWRkYWJzMDEyIGFicyAnLTIuMDAnICAtPiAnMi4wMCcNCi1kZGFiczAxMyBhYnMgJzIuMDAnICAgLT4gJzIuMDAnDQotZGRhYnMwMTQgYWJzICctMCcgICAgIC0+ICcwJw0KLWRkYWJzMDE1IGFicyAnLTAuMDAnICAtPiAnMC4wMCcNCi1kZGFiczAxNiBhYnMgJy0wMC4wJyAgLT4gJzAuMCcNCi1kZGFiczAxNyBhYnMgJy0wMC4wMCcgLT4gJzAuMDAnDQotZGRhYnMwMTggYWJzICctMDAnICAgIC0+ICcwJw0KLQ0KLWRkYWJzMDIwIGFicyAnLTIwMDAwMDAnIC0+ICcyMDAwMDAwJw0KLWRkYWJzMDIxIGFicyAnMjAwMDAwMCcgIC0+ICcyMDAwMDAwJw0KLQ0KLWRkYWJzMDMwIGFicyAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJw0KLWRkYWJzMDMxIGFicyAnLTAuMScgICAgICAgICAgICAtPiAnMC4xJw0KLWRkYWJzMDMyIGFicyAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScNCi1kZGFiczAzMyBhYnMgJy0wLjAxJyAgICAgICAgICAgLT4gJzAuMDEnDQotZGRhYnMwMzQgYWJzICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScNCi1kZGFiczAzNSBhYnMgJy0wLjAwMScgICAgICAgICAgLT4gJzAuMDAxJw0KLWRkYWJzMDM2IGFicyAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnDQotZGRhYnMwMzcgYWJzICctMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScNCi1kZGFiczAzOCBhYnMgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJw0KLWRkYWJzMDM5IGFicyAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aA0KLWRkYWJzMDQwIGFicyAnMi4xJyAgICAgLT4gICcyLjEnDQotZGRhYnMwNDEgYWJzICctMTAwJyAgICAtPiAgJzEwMCcNCi1kZGFiczA0MiBhYnMgJzEwMS41JyAgIC0+ICAnMTAxLjUnDQotZGRhYnMwNDMgYWJzICctMTAxLjUnICAtPiAgJzEwMS41Jw0KLQ0KLS0tIG1vcmUgZml4ZWQsIHBvdGVudGlhbCBMSFMgc3dhcHMvb3ZlcmxheXMgaWYgZG9uZSBieSBzdWJ0cmFjdCAwDQotZGRhYnMwNjAgYWJzICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycNCi1kZGFiczA2MSBhYnMgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycNCi1kZGFiczA2MiBhYnMgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3Jw0KLWRkYWJzMDYzIGFicyAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnDQotZGRhYnMwNjUgYWJzICctNTYyNjdFLTAnICAgLT4gJzU2MjY3Jw0KLQ0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdw0KLQ0KLS0tIGxvbmcgb3BlcmFuZCB0ZXN0cw0KLWRkYWJzMzIxIGFicyAxMjM0NTY3ODkwMTIzNDU2ICAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZGRhYnMzMjIgYWJzIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMA0KLWRkYWJzMzIzIGFicyAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMA0KLWRkYWJzMzI0IGFicyAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MA0KLWRkYWJzMzI1IGFicyAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQ0KLWRkYWJzMzI2IGFicyAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDENCi1kZGFiczMyNyBhYnMgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYNCi0NCi0tLSB6ZXJvcw0KLWRkYWJzMTExIGFicyAgICAgICAgICAwICAgLT4gMA0KLWRkYWJzMTEyIGFicyAgICAgICAgIC0wICAgLT4gMA0KLWRkYWJzMTEzIGFicyAgICAgICAwRSs2ICAgLT4gMEUrNg0KLWRkYWJzMTE0IGFicyAgICAgIC0wRSs2ICAgLT4gMEUrNg0KLWRkYWJzMTE1IGFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQotZGRhYnMxMTYgYWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCi1kZGFiczExNyBhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KLWRkYWJzMTE4IGFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kZGFiczEyMSBhYnMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyDQotZGRhYnMxMjIgYWJzICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4Mg0KLWRkYWJzMTIzIGFicyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDENCi1kZGFiczEyNCBhYnMgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kZGFiczEzMSBhYnMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRhYnMxMzIgYWJzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzDQotZGRhYnMxMzMgYWJzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkYWJzMTM0IGFicyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwNCi0NCi1kZGFiczEzNSBhYnMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsDQotZGRhYnMxMzYgYWJzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkYWJzMTM3IGFicyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IDFFLTM4Mw0KLWRkYWJzMTM4IGFicyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi0NCi0tLSBzcGVjaWFscw0KLWRkYWJzNTIwIGFicyAnSW5mJyAgICAtPiAnSW5maW5pdHknDQotZGRhYnM1MjEgYWJzICctSW5mJyAgIC0+ICdJbmZpbml0eScNCi1kZGFiczUyMiBhYnMgICBOYU4gICAgLT4gIE5hTg0KLWRkYWJzNTIzIGFicyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFiczUyNCBhYnMgICBOYU4yMiAgLT4gIE5hTjIyDQotZGRhYnM1MjUgYWJzICBzTmFOMzMgIC0+ICBOYU4zMyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWJzNTI2IGFicyAgLU5hTjIyICAtPiAtTmFOMjINCi1kZGFiczUyNyBhYnMgLXNOYU4zMyAgLT4gLU5hTjMzIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkYWJzOTAwIGFicyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQWJzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGFic29sdXRlIHZhbHVlLCBoZWVkaW5nIHNOYU4gICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkYWJzMDAxIGFicyAnMScgICAgICAtPiAnMScKK2RkYWJzMDAyIGFicyAnLTEnICAgICAtPiAnMScKK2RkYWJzMDAzIGFicyAnMS4wMCcgICAtPiAnMS4wMCcKK2RkYWJzMDA0IGFicyAnLTEuMDAnICAtPiAnMS4wMCcKK2RkYWJzMDA1IGFicyAnMCcgICAgICAtPiAnMCcKK2RkYWJzMDA2IGFicyAnMC4wMCcgICAtPiAnMC4wMCcKK2RkYWJzMDA3IGFicyAnMDAuMCcgICAtPiAnMC4wJworZGRhYnMwMDggYWJzICcwMC4wMCcgIC0+ICcwLjAwJworZGRhYnMwMDkgYWJzICcwMCcgICAgIC0+ICcwJworCitkZGFiczAxMCBhYnMgJy0yJyAgICAgLT4gJzInCitkZGFiczAxMSBhYnMgJzInICAgICAgLT4gJzInCitkZGFiczAxMiBhYnMgJy0yLjAwJyAgLT4gJzIuMDAnCitkZGFiczAxMyBhYnMgJzIuMDAnICAgLT4gJzIuMDAnCitkZGFiczAxNCBhYnMgJy0wJyAgICAgLT4gJzAnCitkZGFiczAxNSBhYnMgJy0wLjAwJyAgLT4gJzAuMDAnCitkZGFiczAxNiBhYnMgJy0wMC4wJyAgLT4gJzAuMCcKK2RkYWJzMDE3IGFicyAnLTAwLjAwJyAtPiAnMC4wMCcKK2RkYWJzMDE4IGFicyAnLTAwJyAgICAtPiAnMCcKKworZGRhYnMwMjAgYWJzICctMjAwMDAwMCcgLT4gJzIwMDAwMDAnCitkZGFiczAyMSBhYnMgJzIwMDAwMDAnICAtPiAnMjAwMDAwMCcKKworZGRhYnMwMzAgYWJzICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCitkZGFiczAzMSBhYnMgJy0wLjEnICAgICAgICAgICAgLT4gJzAuMScKK2RkYWJzMDMyIGFicyAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScKK2RkYWJzMDMzIGFicyAnLTAuMDEnICAgICAgICAgICAtPiAnMC4wMScKK2RkYWJzMDM0IGFicyAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCitkZGFiczAzNSBhYnMgJy0wLjAwMScgICAgICAgICAgLT4gJzAuMDAxJworZGRhYnMwMzYgYWJzICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK2RkYWJzMDM3IGFicyAnLTAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCitkZGFiczAzOCBhYnMgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJworZGRhYnMwMzkgYWJzICctMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorZGRhYnMwNDAgYWJzICcyLjEnICAgICAtPiAgJzIuMScKK2RkYWJzMDQxIGFicyAnLTEwMCcgICAgLT4gICcxMDAnCitkZGFiczA0MiBhYnMgJzEwMS41JyAgIC0+ICAnMTAxLjUnCitkZGFiczA0MyBhYnMgJy0xMDEuNScgIC0+ICAnMTAxLjUnCisKKy0tIG1vcmUgZml4ZWQsIHBvdGVudGlhbCBMSFMgc3dhcHMvb3ZlcmxheXMgaWYgZG9uZSBieSBzdWJ0cmFjdCAwCitkZGFiczA2MCBhYnMgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3JworZGRhYnMwNjEgYWJzICctNTYyNjdFLTUnICAgLT4gJzAuNTYyNjcnCitkZGFiczA2MiBhYnMgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JworZGRhYnMwNjMgYWJzICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycKK2RkYWJzMDY1IGFicyAnLTU2MjY3RS0wJyAgIC0+ICc1NjI2NycKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CisKKy0tIGxvbmcgb3BlcmFuZCB0ZXN0cworZGRhYnMzMjEgYWJzIDEyMzQ1Njc4OTAxMjM0NTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYWJzMzIyIGFicyAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK2RkYWJzMzIzIGFicyAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAorZGRhYnMzMjQgYWJzIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCitkZGFiczMyNSBhYnMgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK2RkYWJzMzI2IGFicyAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK2RkYWJzMzI3IGFicyAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorCistLSB6ZXJvcworZGRhYnMxMTEgYWJzICAgICAgICAgIDAgICAtPiAwCitkZGFiczExMiBhYnMgICAgICAgICAtMCAgIC0+IDAKK2RkYWJzMTEzIGFicyAgICAgICAwRSs2ICAgLT4gMEUrNgorZGRhYnMxMTQgYWJzICAgICAgLTBFKzYgICAtPiAwRSs2CitkZGFiczExNSBhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZGRhYnMxMTYgYWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RkYWJzMTE3IGFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkZGFiczExOCBhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRhYnMxMjEgYWJzICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRhYnMxMjIgYWJzICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRhYnMxMjMgYWJzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorZGRhYnMxMjQgYWJzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRhYnMxMzEgYWJzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRhYnMxMzIgYWJzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitkZGFiczEzMyBhYnMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGFiczEzNCBhYnMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsCisKK2RkYWJzMTM1IGFicyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwKK2RkYWJzMTM2IGFicyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkYWJzMTM3IGFicyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRhYnMxMzggYWJzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorCistLSBzcGVjaWFscworZGRhYnM1MjAgYWJzICdJbmYnICAgIC0+ICdJbmZpbml0eScKK2RkYWJzNTIxIGFicyAnLUluZicgICAtPiAnSW5maW5pdHknCitkZGFiczUyMiBhYnMgICBOYU4gICAgLT4gIE5hTgorZGRhYnM1MjMgYWJzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRhYnM1MjQgYWJzICAgTmFOMjIgIC0+ICBOYU4yMgorZGRhYnM1MjUgYWJzICBzTmFOMzMgIC0+ICBOYU4zMyBJbnZhbGlkX29wZXJhdGlvbgorZGRhYnM1MjYgYWJzICAtTmFOMjIgIC0+IC1OYU4yMgorZGRhYnM1MjcgYWJzIC1zTmFOMzMgIC0+IC1OYU4zMyBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitkZGFiczkwMCBhYnMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFkZC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWRkLmRlY1Rlc3QKaW5kZXggYzBhMjViMy4uMGYxMmNlNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWRkLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWRkLmRlY1Rlc3QKQEAgLTEsMTMyOCArMSwxMzI4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZEFkZC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBhZGRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBzZXQgb2YgdGVzdHMgYXJlIGZvciBkZWNEb3VibGVzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlDQotLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY0RvdWJsZQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddDQotZGRhZGQwMDEgYWRkIDEgICAgICAgMSAgICAgICAtPiAgMg0KLWRkYWRkMDAyIGFkZCAyICAgICAgIDMgICAgICAgLT4gIDUNCi1kZGFkZDAwMyBhZGQgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1DQotZGRhZGQwMDQgYWRkICc1JyAgICAgJy0zJyAgICAtPiAgMg0KLWRkYWRkMDA1IGFkZCAnLTUnICAgICctMycgICAgLT4gIC04DQotZGRhZGQwMDYgYWRkICctNycgICAgJzIuNScgICAtPiAgLTQuNQ0KLWRkYWRkMDA3IGFkZCAnMC43JyAgICcwLjMnICAgLT4gIDEuMA0KLWRkYWRkMDA4IGFkZCAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTANCi1kZGFkZDAwOSBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknDQotZGRhZGQwMTAgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJw0KLQ0KLS0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZGRhZGQwMTEgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDEyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZGRhZGQwMTMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5Jw0KLWRkYWRkMDE0IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQwMTUgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDAxNiBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDE3IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQwMTggYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDAxOSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDIwIGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQwMjEgYWRkIDAgMSAtPiAxDQotZGRhZGQwMjIgYWRkIDEgMSAtPiAyDQotZGRhZGQwMjMgYWRkIDIgMSAtPiAzDQotZGRhZGQwMjQgYWRkIDMgMSAtPiA0DQotZGRhZGQwMjUgYWRkIDQgMSAtPiA1DQotZGRhZGQwMjYgYWRkIDUgMSAtPiA2DQotZGRhZGQwMjcgYWRkIDYgMSAtPiA3DQotZGRhZGQwMjggYWRkIDcgMSAtPiA4DQotZGRhZGQwMjkgYWRkIDggMSAtPiA5DQotZGRhZGQwMzAgYWRkIDkgMSAtPiAxMA0KLQ0KLS0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cw0KLWRkYWRkMDMxIGFkZCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcNCi1kZGFkZDAzMiBhZGQgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknDQotZGRhZGQwMzMgYWRkICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJw0KLWRkYWRkMDM0IGFkZCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScNCi0NCi1kZGFkZDAzNSBhZGQgJzcwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQwMzYgYWRkICc3MDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDAzNyBhZGQgJzcwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDAzOCBhZGQgJzcwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQwMzkgYWRkICc3MDAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkDQotDQotLS0gc3ltbWV0cnk6DQotZGRhZGQwNDAgYWRkICcxMDAwMGUrMTYnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDQxIGFkZCAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQwNDIgYWRkICcxMDAwMGUrMTYnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQwNDQgYWRkICcxMDAwMGUrMTYnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDQ1IGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZA0KLQ0KLS0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcNCi1kZGFkZDA0NiBhZGQgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycNCi1kZGFkZDA0NyBhZGQgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnDQotZGRhZGQwNDggYWRkICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcNCi1kZGFkZDA0OSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcNCi1kZGFkZDA1MCBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnDQotZGRhZGQwNTEgYWRkICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcNCi1kZGFkZDA1MiBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICcxMDAwMDAwNzAwMDAwMCcNCi0NCi0tLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoDQotZGRhZGQwNTMgYWRkICcxMicgJzcuMDAnIC0+ICcxOS4wMCcNCi1kZGFkZDA1NCBhZGQgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycNCi1kZGFkZDA1NSBhZGQgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcNCi1kZGFkZDA1NiBhZGQgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnDQotZGRhZGQwNTcgYWRkICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnDQotDQotLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbg0KLWRkYWRkMDYxIGFkZCAxICcwLjAwMDEnIC0+ICcxLjAwMDEnDQotZGRhZGQwNjIgYWRkIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJw0KLWRkYWRkMDYzIGFkZCAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJw0KLWRkYWRkMDY0IGFkZCAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnDQotZGRhZGQwNjUgYWRkIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJw0KLQ0KLS0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCi1kZGFkZDA3MCBhZGQgMSAgMCAgICAtPiAxDQotZGRhZGQwNzEgYWRkIDEgMC4gICAgLT4gMQ0KLWRkYWRkMDcyIGFkZCAxICAuMCAgIC0+IDEuMA0KLWRkYWRkMDczIGFkZCAxIDAuMCAgIC0+IDEuMA0KLWRkYWRkMDc0IGFkZCAxIDAuMDAgIC0+IDEuMDANCi1kZGFkZDA3NSBhZGQgIDAgIDEgICAtPiAxDQotZGRhZGQwNzYgYWRkIDAuICAxICAgLT4gMQ0KLWRkYWRkMDc3IGFkZCAgLjAgMSAgIC0+IDEuMA0KLWRkYWRkMDc4IGFkZCAwLjAgMSAgIC0+IDEuMA0KLWRkYWRkMDc5IGFkZCAwLjAwIDEgIC0+IDEuMDANCi0NCi0tLSBzb21lIGNhcnJpZXMNCi1kZGFkZDA4MCBhZGQgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQ0KLWRkYWRkMDgxIGFkZCA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMA0KLWRkYWRkMDgyIGFkZCAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwDQotZGRhZGQwODMgYWRkICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMA0KLWRkYWRkMDg0IGFkZCAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMA0KLWRkYWRkMDg1IGFkZCAgICAgOTk5OTkgMSAgLT4gMTAwMDAwDQotZGRhZGQwODYgYWRkICAgICAgOTk5OSAxICAtPiAxMDAwMA0KLWRkYWRkMDg3IGFkZCAgICAgICA5OTkgMSAgLT4gMTAwMA0KLWRkYWRkMDg4IGFkZCAgICAgICAgOTkgMSAgLT4gMTAwDQotZGRhZGQwODkgYWRkICAgICAgICAgOSAxICAtPiAxMA0KLQ0KLQ0KLS0tIG1vcmUgTEhTIHN3YXBzDQotZGRhZGQwOTAgYWRkICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3Jw0KLWRkYWRkMDkxIGFkZCAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3Jw0KLWRkYWRkMDkyIGFkZCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQotZGRhZGQwOTMgYWRkICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3Jw0KLWRkYWRkMDk0IGFkZCAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycNCi1kZGFkZDA5NSBhZGQgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQotZGRhZGQwOTYgYWRkICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43Jw0KLWRkYWRkMDk3IGFkZCAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3Jw0KLWRkYWRkMDk4IGFkZCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KLWRkYWRkMDk5IGFkZCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnDQotZGRhZGQxMDAgYWRkICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnDQotZGRhZGQxMDEgYWRkICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCi1kZGFkZDEwMiBhZGQgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnDQotZGRhZGQxMDMgYWRkICctNUUtMScgICAgICAgIDAgLT4gICctMC41Jw0KLWRkYWRkMTA0IGFkZCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQotZGRhZGQxMDUgYWRkICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnDQotZGRhZGQxMDYgYWRkICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJw0KLWRkYWRkMTA3IGFkZCAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnDQotZGRhZGQxMDggYWRkICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgUm91bmRlZA0KLWRkYWRkMTA5IGFkZCAnLTVFMTcnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgIFJvdW5kZWQNCi1kZGFkZDExMCBhZGQgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkDQotZGRhZGQxMTEgYWRkICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KLQ0KLS0tIG1vcmUgUkhTIHN3YXBzDQotZGRhZGQxMTMgYWRkIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnDQotZGRhZGQxMTQgYWRkIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycNCi1kZGFkZDExNiBhZGQgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnDQotZGRhZGQxMTcgYWRkIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnDQotZGRhZGQxMTkgYWRkIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnDQotZGRhZGQxMjAgYWRkIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnDQotZGRhZGQxMjEgYWRkIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnDQotZGRhZGQxMjIgYWRkIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycNCi1kZGFkZDEyMyBhZGQgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJw0KLWRkYWRkMTI0IGFkZCAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycNCi1kZGFkZDEyNSBhZGQgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1Jw0KLWRkYWRkMTI2IGFkZCAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScNCi1kZGFkZDEyNyBhZGQgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScNCi1kZGFkZDEyOCBhZGQgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScNCi1kZGFkZDEyOSBhZGQgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnDQotZGRhZGQxMzAgYWRkIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcNCi1kZGFkZDEzMSBhZGQgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcNCi1kZGFkZDEzMiBhZGQgMCAgJy01RTE1JyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnDQotZGRhZGQxMzMgYWRkIDAgICctNUUxNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZA0KLWRkYWRkMTM0IGFkZCAwICAnLTVFMTcnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQNCi1kZGFkZDEzNSBhZGQgMCAgJy01RTE4JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkDQotZGRhZGQxMzYgYWRkIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZA0KLQ0KLS0tIHJlbGF0ZWQNCi1kZGFkZDEzNyBhZGQgIDEgICcwRS0xOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZA0KLWRkYWRkMTM4IGFkZCAtMSAgJzBFLTE5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZGRhZGQxMzkgYWRkICcwRS0xOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCi1kZGFkZDE0MCBhZGQgJzBFLTE5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWRkYWRkMTQxIGFkZCAxRSsxMSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnDQotZGRhZGQxNDIgYWRkIDFFKzExICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQNCi1kZGFkZDE0MyBhZGQgMC4wMDAgICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJw0KLWRkYWRkMTQ0IGFkZCAwLjAwMDAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkDQotDQotLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10NCi1kZGFkZDE0NiBhZGQgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJw0KLWRkYWRkMTQ3IGFkZCAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJw0KLWRkYWRkMTQ4IGFkZCAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJw0KLWRkYWRkMTQ5IGFkZCAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnDQotZGRhZGQxNTAgYWRkICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnDQotZGRhZGQxNTEgYWRkICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnDQotZGRhZGQxNTIgYWRkICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycNCi1kZGFkZDE1MyBhZGQgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJw0KLWRkYWRkMTU0IGFkZCAnMy4wJyAgICcuMycgICAgLT4gICczLjMnDQotZGRhZGQxNTUgYWRkICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnDQotZGRhZGQxNTYgYWRkICczJyAgICAgJzMnICAgICAtPiAgJzYnDQotZGRhZGQxNTcgYWRkICczJyAgICAgJyszJyAgICAtPiAgJzYnDQotZGRhZGQxNTggYWRkICczJyAgICAgJy0zJyAgICAtPiAgJzAnDQotZGRhZGQxNTkgYWRkICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcNCi1kZGFkZDE2MCBhZGQgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcNCi0NCi0tLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KLWRkYWRkMTYxIGFkZCAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScNCi1kZGFkZDE2MiBhZGQgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJw0KLWRkYWRkMTYzIGFkZCAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQotZGRhZGQxNjQgYWRkICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5Jw0KLWRkYWRkMTY1IGFkZCAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknDQotZGRhZGQxNjYgYWRkICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCi1kZGFkZDE2NyBhZGQgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJw0KLWRkYWRkMTY4IGFkZCAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknDQotDQotcm91bmRpbmc6IGhhbGZfdXANCi0tLSAgICAgICAgICAgMS4yMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYNCi1kZGFkZDE3MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDE3MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDE3MiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NScgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDE3MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDE3NCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDE3NSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDE3NiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDE3NyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkDQotZGRhZGQxNzggYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDUnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxNzkgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxODAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxODEgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxODIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxODMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZA0KLQ0KLS0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCi1yb3VuZGluZzogaGFsZl91cA0KLWRkYWRkMjAwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScNCi1kZGFkZDIwMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjAyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMDMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIwNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjA1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMDYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIwNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjA4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMDkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIxMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjExIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMTIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIxMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjE0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMTUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIxNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnDQotZGRhZGQyMTcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIxOCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjE5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkYWRkMjIwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScNCi1kZGFkZDIyMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjIyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMjMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIyNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjI1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMjYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIyNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjI4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMjkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIzMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjMxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMzIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIzMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjM0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMzUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIzNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnDQotZGRhZGQyMzcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIzOCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjM5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCi1kZGFkZDI0MCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjQxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNDIgYWRkICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRkYWRkMjUwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScNCi1kZGFkZDI1MSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjUyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNTMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI1NCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjU1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNTYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI1NyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjU4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNTkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI2MCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjYxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNjIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI2MyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjY0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNjUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI2NiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnDQotZGRhZGQyNjcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI2OCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjY5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzDQotcm91bmRpbmc6IGhhbGZfdXANCi1kZGFkZDMwMSBhZGQgIC0xICAgMSAgICAgIC0+ICAgMA0KLWRkYWRkMzAyIGFkZCAgIDAgICAxICAgICAgLT4gICAxDQotZGRhZGQzMDMgYWRkICAgMSAgIDEgICAgICAtPiAgIDINCi1kZGFkZDMwNCBhZGQgIDEyICAgMSAgICAgIC0+ICAxMw0KLWRkYWRkMzA1IGFkZCAgOTggICAxICAgICAgLT4gIDk5DQotZGRhZGQzMDYgYWRkICA5OSAgIDEgICAgICAtPiAxMDANCi1kZGFkZDMwNyBhZGQgMTAwICAgMSAgICAgIC0+IDEwMQ0KLWRkYWRkMzA4IGFkZCAxMDEgICAxICAgICAgLT4gMTAyDQotZGRhZGQzMDkgYWRkICAtMSAgLTEgICAgICAtPiAgLTINCi1kZGFkZDMxMCBhZGQgICAwICAtMSAgICAgIC0+ICAtMQ0KLWRkYWRkMzExIGFkZCAgIDEgIC0xICAgICAgLT4gICAwDQotZGRhZGQzMTIgYWRkICAxMiAgLTEgICAgICAtPiAgMTENCi1kZGFkZDMxMyBhZGQgIDk4ICAtMSAgICAgIC0+ICA5Nw0KLWRkYWRkMzE0IGFkZCAgOTkgIC0xICAgICAgLT4gIDk4DQotZGRhZGQzMTUgYWRkIDEwMCAgLTEgICAgICAtPiAgOTkNCi1kZGFkZDMxNiBhZGQgMTAxICAtMSAgICAgIC0+IDEwMA0KLQ0KLWRkYWRkMzIxIGFkZCAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KLWRkYWRkMzIyIGFkZCAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQ0KLWRkYWRkMzIzIGFkZCAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMg0KLWRkYWRkMzI0IGFkZCAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KLWRkYWRkMzI1IGFkZCAgMC45OCAgMC4wMSAgICAtPiAgMC45OQ0KLWRkYWRkMzI2IGFkZCAgMC45OSAgMC4wMSAgICAtPiAgMS4wMA0KLWRkYWRkMzI3IGFkZCAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KLWRkYWRkMzI4IGFkZCAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMg0KLWRkYWRkMzI5IGFkZCAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMg0KLWRkYWRkMzMwIGFkZCAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KLWRkYWRkMzMxIGFkZCAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMA0KLWRkYWRkMzMyIGFkZCAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQ0KLWRkYWRkMzMzIGFkZCAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KLWRkYWRkMzM0IGFkZCAgMC45OSAtMC4wMSAgICAtPiAgMC45OA0KLWRkYWRkMzM1IGFkZCAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQ0KLWRkYWRkMzM2IGFkZCAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KLQ0KLS0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudA0KLWRkYWRkMzQwIGFkZCAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwDQotZGRhZGQzNDEgYWRkIDFFKzE1ICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwDQotZGRhZGQzNDIgYWRkIDFFKzE2ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZA0KLWRkYWRkMzQzIGFkZCAxRSsyMCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQNCi0tLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uDQotZGRhZGQzNDQgYWRkIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDENCi1kZGFkZDM0NSBhZGQgMUUrMTUgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDENCi1kZGFkZDM0NiBhZGQgMUUrMTYgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDM0NyBhZGQgMUUrMjAgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDM0OCBhZGQgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNw0KLWRkYWRkMzQ5IGFkZCAxRSsxNSAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwNw0KLWRkYWRkMzUwIGFkZCAxRSsxNiAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMzUxIGFkZCAxRSsyMCAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHRyeXplcm9zIGNhc2VzDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kZGFkZDM2MCAgYWRkIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUNCi1kZGFkZDM2MSAgYWRkIDBFLTUwIDEwMDAwRSsxICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkDQotZGRhZGQzNjIgIGFkZCAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZA0KLWRkYWRkMzYzICBhZGQgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QNCi1kZGFkZDM2NCAgYWRkIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMEUrMzY5DQotDQotLS0gYSBjdXJpb3NpdHkgZnJvbSBKU1IgMTMgdGVzdGluZw0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24NCi1kZGFkZDM3MCBhZGQgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNA0KLWRkYWRkMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kZGFkZDM3MiBhZGQgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNA0KLWRkYWRkMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLWRkYWRkMzc0IGFkZCAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0DQotZGRhZGQzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QNCi0NCi0tLSBvcGVyYW5kcyBmb2xkZWQNCi1kZGFkZDM4MCBhZGQgICAxRSszODQgIDFFKzM4NCAgLT4gIDIuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQNCi1kZGFkZDM4MSBhZGQgICAxRSszODAgIDFFKzM4MCAgLT4gIDIuMDAwMDAwMDAwMDBFKzM4MCAgICAgIENsYW1wZWQNCi1kZGFkZDM4MiBhZGQgICAxRSszNzYgIDFFKzM3NiAgLT4gIDIuMDAwMDAwMEUrMzc2ICAgICAgICAgIENsYW1wZWQNCi1kZGFkZDM4MyBhZGQgICAxRSszNzIgIDFFKzM3MiAgLT4gIDIuMDAwRSszNzIgICAgICAgICAgICAgIENsYW1wZWQNCi1kZGFkZDM4NCBhZGQgICAxRSszNzAgIDFFKzM3MCAgLT4gIDIuMEUrMzcwICAgICAgICAgICAgICAgIENsYW1wZWQNCi1kZGFkZDM4NSBhZGQgICAxRSszNjkgIDFFKzM2OSAgLT4gIDJFKzM2OQ0KLWRkYWRkMzg2IGFkZCAgIDFFKzM2OCAgMUUrMzY4ICAtPiAgMkUrMzY4DQotDQotLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzDQotZGRhZGQ0MDAgYWRkICAgMSAgIDc3ZS0xNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3DQotZGRhZGQ0MDEgYWRkICAgMSAgIDc3ZS0xNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3Nw0KLWRkYWRkNDAyIGFkZCAgIDEgICA3N2UtMTYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MDMgYWRkICAgMSAgIDc3ZS0xNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQwNCBhZGQgICAxICAgNzdlLTE4ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDA1IGFkZCAgIDEgICA3N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MDYgYWRkICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDQxMCBhZGQgIDEwICAgNzdlLTE0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3DQotZGRhZGQ0MTEgYWRkICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQxMiBhZGQgIDEwICAgNzdlLTE2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDEzIGFkZCAgMTAgICA3N2UtMTcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MTQgYWRkICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQxNSBhZGQgIDEwICAgNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDE2IGFkZCAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ0MjAgYWRkICA3N2UtMTQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3DQotZGRhZGQ0MjEgYWRkICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3Nw0KLWRkYWRkNDIyIGFkZCAgNzdlLTE2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MjMgYWRkICA3N2UtMTcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQyNCBhZGQgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDI1IGFkZCAgNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MjYgYWRkICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDQzMCBhZGQgIDc3ZS0xNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3DQotZGRhZGQ0MzEgYWRkICA3N2UtMTUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQzMiBhZGQgIDc3ZS0xNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDMzIGFkZCAgNzdlLTE3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MzQgYWRkICA3N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQzNSBhZGQgIDc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDM2IGFkZCAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gZmFzdHBhdGggYm91bmRhcnkgKG1vcmUgaW4gZHFhZGQpDQotLS0gICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZGRhZGQ1MzkgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzMzMzMzMzMzMzMzMzMzMzMnIC0+ICc3Nzc3Nzc3Nzc3Nzc3Nzc3Jw0KLWRkYWRkNTQwIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnODg4ODg4ODg4ODg4ODg4OCcNCi1kZGFkZDU0MSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NScgLT4gJzk5OTk5OTk5OTk5OTk5OTknDQotZGRhZGQ1NDIgYWRkICczMzMzMzMzMzMzMzMzMzMzJyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+ICc3Nzc3Nzc3Nzc3Nzc3Nzc3Jw0KLWRkYWRkNTQzIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnODg4ODg4ODg4ODg4ODg4OCcNCi1kZGFkZDU0NCBhZGQgJzU1NTU1NTU1NTU1NTU1NTUnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzk5OTk5OTk5OTk5OTk5OTknDQotZGRhZGQ1NDUgYWRkICczMDAwMDA0MDAwMDAwMDAwJyAgJzMwMDAwMDAwMDAwMDAwNDAnIC0+ICc2MDAwMDA0MDAwMDAwMDQwJw0KLWRkYWRkNTQ2IGFkZCAnMzAwMDAwMDQwMDAwMDAwMCcgICc0MDAwMDAwMDAwMDAwNDAwJyAtPiAnNzAwMDAwMDQwMDAwMDQwMCcNCi1kZGFkZDU0NyBhZGQgJzMwMDAwMDAwNDAwMDAwMDAnICAnNTAwMDAwMDAwMDAwNDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAnDQotZGRhZGQ1NDggYWRkICc0MDAwMDAwMDA0MDAwMDAwJyAgJzMwMDAwMDAwMDAwNDAwMDAnIC0+ICc3MDAwMDAwMDA0MDQwMDAwJw0KLWRkYWRkNTQ5IGFkZCAnNDAwMDAwMDAwMDQwMDAwMCcgICc0MDAwMDAwMDAwNDAwMDAwJyAtPiAnODAwMDAwMDAwMDgwMDAwMCcNCi1kZGFkZDU1MCBhZGQgJzQwMDAwMDAwMDAwNDAwMDAnICAnNTAwMDAwMDAwNDAwMDAwMCcgLT4gJzkwMDAwMDAwMDQwNDAwMDAnDQotZGRhZGQ1NTEgYWRkICc1MDAwMDAwMDAwMDA0MDAwJyAgJzMwMDAwMDAwNDAwMDAwMDAnIC0+ICc4MDAwMDAwMDQwMDA0MDAwJw0KLWRkYWRkNTUyIGFkZCAnNTAwMDAwMDAwMDAwMDQwMCcgICc0MDAwMDAwNDAwMDAwMDAwJyAtPiAnOTAwMDAwMDQwMDAwMDQwMCcNCi1kZGFkZDU1MyBhZGQgJzUwMDAwMDAwMDAwMDAwNDAnICAnNTAwMDAwNDAwMDAwMDAwMCcgLT4gMS4wMDAwMDA0MDAwMDAwMDRFKzE2IFJvdW5kZWQNCi0tLSBjaGVjayBwcm9wYWdhdGlvbg0KLWRkYWRkNTU0IGFkZCAnODk5OTk5OTk5OTk5OTk5OScgICcwMDAwMDAwMDAwMDAwMDAxJyAtPiA5MDAwMDAwMDAwMDAwMDAwDQotZGRhZGQ1NTUgYWRkICcwMDAwMDAwMDAwMDAwMDAxJyAgJzg5OTk5OTk5OTk5OTk5OTknIC0+IDkwMDAwMDAwMDAwMDAwMDANCi1kZGFkZDU1NiBhZGQgJzA5OTk5OTk5OTk5OTk5OTknICAnMDAwMDAwMDAwMDAwMDAwMScgLT4gMTAwMDAwMDAwMDAwMDAwMA0KLWRkYWRkNTU3IGFkZCAnMDAwMDAwMDAwMDAwMDAwMScgICcwOTk5OTk5OTk5OTk5OTk5JyAtPiAxMDAwMDAwMDAwMDAwMDAwDQotZGRhZGQ1NTggYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ1NTU1NTU1NTU1NTU1NTYnIC0+IDkwMDAwMDAwMDAwMDAwMDANCi1kZGFkZDU1OSBhZGQgJzQ1NTU1NTU1NTU1NTU1NTYnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gOTAwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tIG5lZ2F0aXZlIHVscHMNCi1kZGFkZDY0NDAgYWRkICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjQ0MSBhZGQgICAxICAgLTc3ZS0xNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjQ0MiBhZGQgICAxICAgLTc3ZS0xNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0NDMgYWRkICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ0NCBhZGQgICAxICAgLTc3ZS0xOCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDQ1IGFkZCAgIDEgICAtNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ0NiBhZGQgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDY0NTAgYWRkICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0NTEgYWRkICAxMCAgIC03N2UtMTUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NDUyIGFkZCAgMTAgICAtNzdlLTE2ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0NTMgYWRkICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ1NCBhZGQgIDEwICAgLTc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0NTUgYWRkICAxMCAgIC03N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDU2IGFkZCAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkNjQ2MCBhZGQgIC03N2UtMTQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NDYxIGFkZCAgLTc3ZS0xNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NDYyIGFkZCAgLTc3ZS0xNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjQ2MyBhZGQgIC03N2UtMTcgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDY0IGFkZCAgLTc3ZS0xOCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0NjUgYWRkICAtNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDY2IGFkZCAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkNjQ3MCBhZGQgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjQ3MSBhZGQgIC03N2UtMTUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0NzIgYWRkICAtNzdlLTE2ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ3MyBhZGQgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDc0IGFkZCAgLTc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ3NSBhZGQgIC03N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0NzYgYWRkICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbmVnYXRpdmUgdWxwcw0KLWRkYWRkNjQ4MCBhZGQgIC0xICAgIDc3ZS0xNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjQ4MSBhZGQgIC0xICAgIDc3ZS0xNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0ODIgYWRkICAtMSAgICA3N2UtMTYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjQ4MyBhZGQgIC0xICAgIDc3ZS0xNyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ4NCBhZGQgIC0xICAgIDc3ZS0xOCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ4NSBhZGQgIC0xICAgIDc3ZS0xOSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDg2IGFkZCAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDY0OTAgYWRkIC0xMCAgICA3N2UtMTQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NDkxIGFkZCAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0OTIgYWRkIC0xMCAgICA3N2UtMTYgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0OTMgYWRkIC0xMCAgICA3N2UtMTcgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0OTQgYWRkIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ5NSBhZGQgLTEwICAgIDc3ZS0xOSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDk2IGFkZCAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDY1MDAgYWRkICAgNzdlLTE0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY1MDEgYWRkICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NTAyIGFkZCAgIDc3ZS0xNiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY1MDMgYWRkICAgNzdlLTE3ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1MDQgYWRkICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1MDUgYWRkICAgNzdlLTE5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjUwNiBhZGQgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ2NTEwIGFkZCAgIDc3ZS0xNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjUxMSBhZGQgICA3N2UtMTUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NTEyIGFkZCAgIDc3ZS0xNiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTEzIGFkZCAgIDc3ZS0xNyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTE0IGFkZCAgIDc3ZS0xOCAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1MTUgYWRkICAgNzdlLTE5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjUxNiBhZGQgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCi1yb3VuZGluZzogaGFsZl91cA0KLWRkYWRkNjU0MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknDQotZGRhZGQ2NTQxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTQyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTQzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTQ0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTQ1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTQ2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTQ3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTQ4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTQ5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTUwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTUxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTUyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTUzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTU0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTU1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTU2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcNCi1kZGFkZDY1NTcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NTggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NTkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZGRhZGQ2NTYwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScNCi1kZGFkZDY1NjEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NjIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NjMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NjQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NjUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NjYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NjcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NjggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NjkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NzAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NzEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NzIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NzMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NzQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NzUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NzYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJw0KLWRkYWRkNjU3NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU3OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU3OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZGRhZGQ3NTQwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3NTQxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3NTQyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kZGFkZDc1NTAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5Jw0KLWRkYWRkNzU1MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU1MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU1MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU1NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU1NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU1NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU1NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU1OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU1OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU2MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU2MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU2MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU2MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU2NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU2NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU2NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnDQotZGRhZGQ3NTY3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3NTY4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3NTY5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gdmVyaWZ5IGEgcXVlcnkNCi1yb3VuZGluZzogICAgIGRvd24NCi1kZGFkZDc2NjEgYWRkIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3NjYyIGFkZCAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQNCi1kZGFkZDc2NjMgYWRkIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3NjY0IGFkZCAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IFJvdW5kZWQNCi0NCi0tLSBtb3JlIHplcm9zLCBldGMuDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLQ0KLWRkYWRkNzcwMSBhZGQgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDANCi1kZGFkZDc3MDIgYWRkIDAwLjAwIDAuMDAwICAtPiAwLjAwMA0KLWRkYWRkNzcwMyBhZGQgMDAuMDAgMEUtMyAgIC0+IDAuMDAwDQotZGRhZGQ3NzA0IGFkZCAwRS0zICAwMC4wMCAgLT4gMC4wMDANCi0NCi1kZGFkZDc3MTAgYWRkIDBFKzMgIDAwLjAwICAtPiAwLjAwDQotZGRhZGQ3NzExIGFkZCAwRSszICAwMC4wICAgLT4gMC4wDQotZGRhZGQ3NzEyIGFkZCAwRSszICAwMC4gICAgLT4gMA0KLWRkYWRkNzcxMyBhZGQgMEUrMyAgMDAuRSsxIC0+IDBFKzENCi1kZGFkZDc3MTQgYWRkIDBFKzMgIDAwLkUrMiAtPiAwRSsyDQotZGRhZGQ3NzE1IGFkZCAwRSszICAwMC5FKzMgLT4gMEUrMw0KLWRkYWRkNzcxNiBhZGQgMEUrMyAgMDAuRSs0IC0+IDBFKzMNCi1kZGFkZDc3MTcgYWRkIDBFKzMgIDAwLkUrNSAtPiAwRSszDQotZGRhZGQ3NzE4IGFkZCAwRSszICAtMDAuMCAgIC0+IDAuMA0KLWRkYWRkNzcxOSBhZGQgMEUrMyAgLTAwLiAgICAtPiAwDQotZGRhZGQ3NzMxIGFkZCAwRSszICAtMDAuRSsxIC0+IDBFKzENCi0NCi1kZGFkZDc3MjAgYWRkIDAwLjAwICAwRSszICAtPiAwLjAwDQotZGRhZGQ3NzIxIGFkZCAwMC4wICAgMEUrMyAgLT4gMC4wDQotZGRhZGQ3NzIyIGFkZCAwMC4gICAgMEUrMyAgLT4gMA0KLWRkYWRkNzcyMyBhZGQgMDAuRSsxIDBFKzMgIC0+IDBFKzENCi1kZGFkZDc3MjQgYWRkIDAwLkUrMiAwRSszICAtPiAwRSsyDQotZGRhZGQ3NzI1IGFkZCAwMC5FKzMgMEUrMyAgLT4gMEUrMw0KLWRkYWRkNzcyNiBhZGQgMDAuRSs0IDBFKzMgIC0+IDBFKzMNCi1kZGFkZDc3MjcgYWRkIDAwLkUrNSAwRSszICAtPiAwRSszDQotZGRhZGQ3NzI4IGFkZCAtMDAuMDAgMEUrMyAgLT4gMC4wMA0KLWRkYWRkNzcyOSBhZGQgLTAwLjAgIDBFKzMgIC0+IDAuMA0KLWRkYWRkNzczMCBhZGQgLTAwLiAgIDBFKzMgIC0+IDANCi0NCi1kZGFkZDc3MzIgYWRkICAwICAgICAwICAgICAtPiAgMA0KLWRkYWRkNzczMyBhZGQgIDAgICAgLTAgICAgIC0+ICAwDQotZGRhZGQ3NzM0IGFkZCAtMCAgICAgMCAgICAgLT4gIDANCi1kZGFkZDc3MzUgYWRkIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlDQotDQotZGRhZGQ3NzM2IGFkZCAgMSAgICAtMSAgICAgLT4gIDANCi1kZGFkZDc3MzcgYWRkIC0xICAgIC0xICAgICAtPiAtMg0KLWRkYWRkNzczOCBhZGQgIDEgICAgIDEgICAgIC0+ICAyDQotZGRhZGQ3NzM5IGFkZCAtMSAgICAgMSAgICAgLT4gIDANCi0NCi1kZGFkZDc3NDEgYWRkICAwICAgIC0xICAgICAtPiAtMQ0KLWRkYWRkNzc0MiBhZGQgLTAgICAgLTEgICAgIC0+IC0xDQotZGRhZGQ3NzQzIGFkZCAgMCAgICAgMSAgICAgLT4gIDENCi1kZGFkZDc3NDQgYWRkIC0wICAgICAxICAgICAtPiAgMQ0KLWRkYWRkNzc0NSBhZGQgLTEgICAgIDAgICAgIC0+IC0xDQotZGRhZGQ3NzQ2IGFkZCAtMSAgICAtMCAgICAgLT4gLTENCi1kZGFkZDc3NDcgYWRkICAxICAgICAwICAgICAtPiAgMQ0KLWRkYWRkNzc0OCBhZGQgIDEgICAgLTAgICAgIC0+ICAxDQotDQotZGRhZGQ3NzUxIGFkZCAgMC4wICAtMSAgICAgLT4gLTEuMA0KLWRkYWRkNzc1MiBhZGQgLTAuMCAgLTEgICAgIC0+IC0xLjANCi1kZGFkZDc3NTMgYWRkICAwLjAgICAxICAgICAtPiAgMS4wDQotZGRhZGQ3NzU0IGFkZCAtMC4wICAgMSAgICAgLT4gIDEuMA0KLWRkYWRkNzc1NSBhZGQgLTEuMCAgIDAgICAgIC0+IC0xLjANCi1kZGFkZDc3NTYgYWRkIC0xLjAgIC0wICAgICAtPiAtMS4wDQotZGRhZGQ3NzU3IGFkZCAgMS4wICAgMCAgICAgLT4gIDEuMA0KLWRkYWRkNzc1OCBhZGQgIDEuMCAgLTAgICAgIC0+ICAxLjANCi0NCi1kZGFkZDc3NjEgYWRkICAwICAgIC0xLjAgICAtPiAtMS4wDQotZGRhZGQ3NzYyIGFkZCAtMCAgICAtMS4wICAgLT4gLTEuMA0KLWRkYWRkNzc2MyBhZGQgIDAgICAgIDEuMCAgIC0+ICAxLjANCi1kZGFkZDc3NjQgYWRkIC0wICAgICAxLjAgICAtPiAgMS4wDQotZGRhZGQ3NzY1IGFkZCAtMSAgICAgMC4wICAgLT4gLTEuMA0KLWRkYWRkNzc2NiBhZGQgLTEgICAgLTAuMCAgIC0+IC0xLjANCi1kZGFkZDc3NjcgYWRkICAxICAgICAwLjAgICAtPiAgMS4wDQotZGRhZGQ3NzY4IGFkZCAgMSAgICAtMC4wICAgLT4gIDEuMA0KLQ0KLWRkYWRkNzc3MSBhZGQgIDAuMCAgLTEuMCAgIC0+IC0xLjANCi1kZGFkZDc3NzIgYWRkIC0wLjAgIC0xLjAgICAtPiAtMS4wDQotZGRhZGQ3NzczIGFkZCAgMC4wICAgMS4wICAgLT4gIDEuMA0KLWRkYWRkNzc3NCBhZGQgLTAuMCAgIDEuMCAgIC0+ICAxLjANCi1kZGFkZDc3NzUgYWRkIC0xLjAgICAwLjAgICAtPiAtMS4wDQotZGRhZGQ3Nzc2IGFkZCAtMS4wICAtMC4wICAgLT4gLTEuMA0KLWRkYWRkNzc3NyBhZGQgIDEuMCAgIDAuMCAgIC0+ICAxLjANCi1kZGFkZDc3NzggYWRkICAxLjAgIC0wLjAgICAtPiAgMS4wDQotDQotLS0gU3BlY2lhbHMNCi1kZGFkZDc3ODAgYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3ODEgYWRkIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3ODIgYWRkIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3ODMgYWRkIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3ODQgYWRkIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3ODUgYWRkIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3ODYgYWRkIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3ODcgYWRkIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3ODggYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3ODkgYWRkIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3OTAgYWRkIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3OTEgYWRkICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3OTIgYWRkICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3OTMgYWRkICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGFkZDc3OTQgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkYWRkNzgwMCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODAxIGFkZCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODAyIGFkZCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODAzIGFkZCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODA0IGFkZCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODA1IGFkZCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODA2IGFkZCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODA3IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODA4IGFkZCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODA5IGFkZCAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4MTAgYWRkIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZGFkZDc4MTEgYWRkIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZGFkZDc4MTIgYWRkICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZGFkZDc4MTMgYWRkICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZGFkZDc4MTQgYWRkICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZGFkZDc4MTUgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kZGFkZDc4MjEgYWRkICBOYU4gLUluZiAgICAtPiAgTmFODQotZGRhZGQ3ODIyIGFkZCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRkYWRkNzgyMyBhZGQgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kZGFkZDc4MjQgYWRkICBOYU4gLTAgICAgICAtPiAgTmFODQotZGRhZGQ3ODI1IGFkZCAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRkYWRkNzgyNiBhZGQgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kZGFkZDc4MjcgYWRkICBOYU4gIDEwMDAgICAtPiAgTmFODQotZGRhZGQ3ODI4IGFkZCAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRkYWRkNzgyOSBhZGQgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kZGFkZDc4MzAgYWRkIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZGRhZGQ3ODMxIGFkZCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkYWRkNzgzMiBhZGQgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kZGFkZDc4MzMgYWRkIC0wICAgIE5hTiAgICAtPiAgTmFODQotZGRhZGQ3ODM0IGFkZCAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkYWRkNzgzNSBhZGQgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kZGFkZDc4MzYgYWRkICAxMDAwIE5hTiAgICAtPiAgTmFODQotZGRhZGQ3ODM3IGFkZCAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRkYWRkNzg0MSBhZGQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODQyIGFkZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NDMgYWRkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg0NCBhZGQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODQ1IGFkZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NDYgYWRkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg0NyBhZGQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODQ4IGFkZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NDkgYWRkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg1MCBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODUxIGFkZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NTIgYWRkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg1MyBhZGQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODU0IGFkZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NTUgYWRkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg1NiBhZGQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODU3IGFkZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NTggYWRkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg1OSBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkYWRkNzg2MSBhZGQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZGRhZGQ3ODYyIGFkZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCi1kZGFkZDc4NjMgYWRkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLWRkYWRkNzg2NCBhZGQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZGRhZGQ3ODY1IGFkZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCi1kZGFkZDc4NjYgYWRkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLWRkYWRkNzg2NyBhZGQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZGRhZGQ3ODY4IGFkZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCi1kZGFkZDc4NjkgYWRkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1kZGFkZDc4NzEgYWRkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODcyIGFkZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg3MyBhZGQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NzQgYWRkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODc1IGFkZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg3NiBhZGQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NzcgYWRkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODc4IGFkZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg3OSBhZGQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4ODAgYWRkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODgxIGFkZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg4MiBhZGQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLWRkYWRkNzg4MyBhZGQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4ODQgYWRkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCi1kZGFkZDc4ODUgYWRkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4NCi1kZGFkZDc1NzUgYWRkICAxRS0zODMgLTFFLTM5OCAtPiAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwNCi1kZGFkZDc1NzYgYWRkIC0xRS0zODMgKzFFLTM5OCAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwNCi0NCi0tLSBhbmQgYW5vdGhlciBjdXJpb3VzIGNhc2UNCi1kZGFkZDc1NzcgYWRkIDcuMDAwMDAwMDAwMDAwRS0zODUgLTEuMDAwMDBFLTM5MSAtPiA2Ljk5OTk5OTAwMDAwMEUtMzg1IFN1Ym5vcm1hbA0KLQ0KLS0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQ0KLS0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYWRkNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRhZGQ3OTczIGFkZCAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTc0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTc1IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc5NzYgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk3NyBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDhFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTc4IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgN0UrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc5NzkgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA2RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk4MCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDVFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTgxIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNEUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk4MiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDNFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc5ODMgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAyRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTg0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkNzk4NSBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkYWRkNzk4NiBhZGQgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc5ODcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTg4IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMUUrMzY5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTg5IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTkwIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOEUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTkxIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtN0UrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTkyIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTkzIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTk0IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNEUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc5OTUgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk5NiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTJFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTk3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMUUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMNCi1yb3VuZGluZzogICAgIGRvd24NCi1kZGFkZDcxMTAwIGFkZCAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTEwMSBhZGQgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGFkZDcxMTAzIGFkZCAgICsxIC0xZS0zODMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGFkZDcxMTA0IGFkZCAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTEwNSBhZGQgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGFkZDcxMTA2IGFkZCAxZS0zIC0xZS0zODMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGFkZDcxMTA3IGFkZCAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTEwOCBhZGQgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGFkZDcxMTA5IGFkZCAxZS02IC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KLQ0KLXJvdW5kaW5nOiAgICAgY2VpbGluZw0KLWRkYWRkNzExMTAgYWRkIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTExMSBhZGQgLTFlKzEgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTExMyBhZGQgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMTQgYWRkIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTExNSBhZGQgLTFlLTIgKzFlLTM4MyAgIC0+IC0wLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTExNiBhZGQgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMTcgYWRkIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTExOCBhZGQgLTFlLTUgKzFlLTM4MyAgIC0+IC0wLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTExOSBhZGQgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQotDQotLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UNCi1yb3VuZGluZzogICAgIGhhbGZfZXZlbg0KLQ0KLWRkYWRkNzEzMDAgYWRkIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMxMCBhZGQgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzExIGFkZCAxRTE2ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMTIgYWRkIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMxMyBhZGQgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzE0IGFkZCAxRTE2ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMTUgYWRkIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMxNiBhZGQgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzE3IGFkZCAxRTE2ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMTggYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMxOSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzIwIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMjEgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMyMiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzIzIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMjQgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMyNSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzI2IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMjcgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMyOCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzI5IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMzAgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMzMSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzMyIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMzMgYWRkIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMzNCBhZGQgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzM1IGFkZCAxRTE2ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMzYgYWRkIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMzNyBhZGQgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzM4IGFkZCAxRTE2ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMzkgYWRkIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ3MTM0MCBhZGQgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzQxIGFkZCAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkNzEzNDkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNTAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNTEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNTIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNTMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNTQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNTUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNTYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNTcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNTggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNTkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNjAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNjEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNjIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNjMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNjQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNjUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNjcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNjggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNjkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNzAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNzIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNzQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNzYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNzcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNzggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzNzkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzODAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzODEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzODIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzODMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzODQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzODUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzODYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzODcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzODggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzODkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzOTAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzOTEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzOTIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzOTMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzOTQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzOTUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzOTYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkDQotLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMA0KLWRkYWRkNzE0MjAgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0MjEgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDIyIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0MjMgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0MjQgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDI1IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0MjYgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0MjcgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNw0KLWRkYWRkNzE0MjggYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOA0KLWRkYWRkNzE0MjkgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQ0KLWRkYWRkNzE0MzAgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTANCi1kZGFkZDcxNDMxIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExDQotZGRhZGQ3MTQzMiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KLWRkYWRkNzE0MzMgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMNCi1kZGFkZDcxNDM0IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0DQotZGRhZGQ3MTQzNSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KLWRkYWRkNzE0MzYgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYNCi1kZGFkZDcxNDM3IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3DQotZGRhZGQ3MTQzOCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KLWRkYWRkNzE0MzkgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkNCi0NCi0tLSBzYW1lLCByZXZlcnNlZCAwDQotZGRhZGQ3MTQ0MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDQxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDQyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ0MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDQ0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDQ1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ0NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDQ3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNw0KLWRkYWRkNzE0NDggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQotZGRhZGQ3MTQ0OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCi1kZGFkZDcxNDUwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTANCi1kZGFkZDcxNDUxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCi1kZGFkZDcxNDUyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCi1kZGFkZDcxNDUzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMNCi1kZGFkZDcxNDU0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCi1kZGFkZDcxNDU1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCi1kZGFkZDcxNDU2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYNCi1kZGFkZDcxNDU3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCi1kZGFkZDcxNDU4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCi1kZGFkZDcxNDU5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkNCi0NCi0tLSBzYW1lLCBFcyBvbiB0aGUgMA0KLWRkYWRkNzE0NjAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDYxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ2MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NjMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDY0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ2NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NjYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDY3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ2OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NjkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDcwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ3MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NzIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDczIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ3NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NzUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi0tLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0DQotZGRhZGQ3MTQ3NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZGRhZGQ3MTQ3NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZGRhZGQ3MTQ3OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZGRhZGQ3MTQ3OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotDQotLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTANCi1yb3VuZGluZzogICAgaGFsZl91cA0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kZGFkZDcxNTAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE1MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTUwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNTAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZGRhZGQ3MTUxMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCi1kZGFkZDcxNTEyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZGRhZGQ3MTUyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNTIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE1MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTUyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRkYWRkNzE1MzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQotZGRhZGQ3MTUzMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRkYWRkNzE1NDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTU0MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNTQyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE1NDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kZGFkZDcxNTUxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRkYWRkNzE1NTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotcm91bmRpbmc6ICAgIHVwDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRkYWRkNzE1NjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTU2MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNTYyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE1NjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kZGFkZDcxNTcxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRkYWRkNzE1NzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotcm91bmRpbmc6ICAgIGRvd24NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZGRhZGQ3MTU4MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNTgxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE1ODIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTU4MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRkYWRkNzE1OTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQotZGRhZGQ3MTU5MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi1yb3VuZGluZzogICAgY2VpbGluZw0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kZGFkZDcxNjAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE2MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTYwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNjAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZGRhZGQ3MTYxMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCi1kZGFkZDcxNjEyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLS0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKg0KLXJvdW5kaW5nOiAgICBmbG9vcg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kZGFkZDcxNjIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE2MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqDQotZGRhZGQ3MTYyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCi1kZGFkZDcxNjIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZGRhZGQ3MTYzMSBhZGQgLTExICAgICAgMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoNCi1kZGFkZDcxNjMyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKg0KLQ0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KLWRkYWRkNzE3MDEgYWRkIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MA0KLWRkYWRkNzE3MDIgYWRkIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MA0KLWRkYWRkNzE3MDMgYWRkIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMA0KLWRkYWRkNzE3MDQgYWRkIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNA0KLWRkYWRkNzE3MDUgYWRkIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMA0KLWRkYWRkNzE3MDYgYWRkIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMA0KLWRkYWRkNzE3MDcgYWRkIDEzMEUtMiAgIC0xRTAgICAgLT4gMC4zMA0KLWRkYWRkNzE3MDggYWRkIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMw0KLQ0KLS0tIHF1ZXJ5IGZyb20gVmluY2VudCBLdWxhbmRhaXNhbXkNCi1yb3VuZGluZzogY2VpbGluZw0KLWRkYWRkNzE4MDEgIGFkZCAgNy44ODIyNzczODA1ODYyRSsyNzcgICAgLTUuMTc1NzUwMzgyMDY2M0UtMjEgLT4gNy44ODIyNzczODA1ODYyMDBFKzI3NyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxODAyICBhZGQgIDcuODgyMjc3MzgwNTg2MjAwRSsyNzcgIDEyLjM0MSAgICAgICAgICAgICAgIC0+IDcuODgyMjc3MzgwNTg2MjAxRSsyNzcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTgwMyAgYWRkICA3Ljg4MjI3NzM4MDU4NjIwMUUrMjc3ICAyLjcyNzA1NDUwNDY2MTNFLTMxICAtPiA3Ljg4MjI3NzM4MDU4NjIwMkUrMjc3IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkNzE4MTEgIGFkZCAgICAgICAgICAgICAgICAgICAxMi4zNDEgLTUuMTc1NzUwMzgyMDY2M0UtMjEgLT4gMTIuMzQxMDAwMDAwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxODEyICBhZGQgICAgICAgIDEyLjM0MTAwMDAwMDAwMDAwIDIuNzI3MDU0NTA0NjYxM0UtMzEgIC0+IDEyLjM0MTAwMDAwMDAwMDAxICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTgxMyAgYWRkICAgICAgICAxMi4zNDEwMDAwMDAwMDAwMSA3Ljg4MjI3NzM4MDU4NjJFKzI3NyAtPiA3Ljg4MjI3NzM4MDU4NjIwMUUrMjc3IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXANCi1yb3VuZGluZzogaGFsZl9ldmVuDQotDQotZGRhZGQ3NTAwMSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Nw0KLWRkYWRkNzUwMDIgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMDMgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMDQgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMDUgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMDYgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMDcgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMDggYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMDkgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMTAgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMTEgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMTIgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMTMgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMTQgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMTUgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMTYgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMTcgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMTggYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMTkgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMjAgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwMjEgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXANCi1kZGFkZDc1MDMwIGFkZCAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQ0KLWRkYWRkNzUwMzEgYWRkIDEyMzQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjENCi1kZGFkZDc1MDMyIGFkZCAxMjM0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMg0KLWRkYWRkNzUwMzMgYWRkIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMw0KLWRkYWRkNzUwMzQgYWRkIDEyMzQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQNCi1kZGFkZDc1MDM1IGFkZCAxMjM0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NQ0KLWRkYWRkNzUwMzYgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Ng0KLWRkYWRkNzUwMzcgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NjcNCi1kZGFkZDc1MDM4IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OA0KLWRkYWRkNzUwMzkgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNDAgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNDEgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNDIgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNDMgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNDQgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNDUgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNDYgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNDcgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNDggYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNDkgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2DQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkYWRkNzUwNTAgYWRkIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNTEgYWRkIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNTIgYWRkIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNTMgYWRkIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNTQgYWRkIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNTUgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNTYgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNTcgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNjAgYWRkIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNjEgYWRkIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNjIgYWRkIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNjMgYWRkIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNjQgYWRkIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNjUgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNjYgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNjcgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLS0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykNCi1yb3VuZGluZzogdXANCi1kZGFkZDc1MDcwIGFkZCAxMjM0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMQ0KLWRkYWRkNzUwNzEgYWRkIDEyMzQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNzIgYWRkIDEyMzQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNzMgYWRkIDEyMzQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNzQgYWRkIDEyMzQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNzUgYWRkIDEyMzQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNzYgYWRkIDEyMzQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNzcgYWRkIDEyMzQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNzggYWRkIDEyMzQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwNzkgYWRkIDEyMzQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwODAgYWRkIDEyMzQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwODEgYWRkIDEyMzQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwODIgYWRkIDEyMzQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwODMgYWRkIDEyMzQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwODQgYWRkIDEyMzQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwODUgYWRkIDEyMzQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwODYgYWRkIDEyMzQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwODcgYWRkIDEyMzQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwODggYWRkIDEyMzQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzUwODkgYWRkIDEyMzQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIFB1bml0J3MNCi1kZGFkZDc1MTAwIGFkZCAxLjAwMCAtMjAwLjAwMCAgICAgICAgICAgICAgICAgICAtPiAtMTk5LjAwMA0KLQ0KLS0tIFJvdW5kaW5nIHN3YXRoZQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kZGFkZDgxMTAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkDQotZGRhZGQ4MTEwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTEwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTEwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTEwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTEwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTEwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTEwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTEwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTEwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTEyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODExMjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZGRhZGQ4MTIwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZA0KLWRkYWRkODEyMDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEyMDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEyMDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEyMDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEyMDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEyMDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEyMDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEyMDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEyMDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEyMjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEyMjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2Rvd24NCi1kZGFkZDgxMzAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkDQotZGRhZGQ4MTMwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTMwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTMwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTMwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTMwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTMwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTMwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTMwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTMwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTMyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTMyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IHVwDQotZGRhZGQ4MTQwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZA0KLWRkYWRkODE0MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE0MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZGRhZGQ4MTUwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZA0KLWRkYWRkODE1MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTUyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogY2VpbGluZw0KLWRkYWRkODE2MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQNCi1kZGFkZDgxNjAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjExIGFkZCAtLjIzOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNjIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBmbG9vcg0KLWRkYWRkODE3MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQNCi1kZGFkZDgxNzAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzExIGFkZCAtLjIzOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE3MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAwNXVwDQotZGRhZGQ4MTgwMCBhZGQgIC4yMDAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMCAgUm91bmRlZA0KLWRkYWRkODE4MDEgYWRkICAuMjAwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE4MDIgYWRkICAuMjAxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE4MDMgYWRkICAuMjA1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE4MDQgYWRkICAuMjA1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE4MDcgYWRkICAuMjA2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE4MDggYWRkICAuMjA3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE4MDkgYWRkICAuMjA5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE4MTEgYWRkIC0uMjA5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE4MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTgyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDgxOTAwIGFkZCAgLjIxMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBSb3VuZGVkDQotZGRhZGQ4MTkwMSBhZGQgIC4yMTAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTkwMiBhZGQgIC4yMTEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTkwMyBhZGQgIC4yMTUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTkwNCBhZGQgIC4yMTUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTkwNyBhZGQgIC4yMTYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTkwOCBhZGQgIC4yMTcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTkwOSBhZGQgIC4yMTk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTkxMSBhZGQgLS4yMTk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ4MjAwMCBhZGQgIC4yNDAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgUm91bmRlZA0KLWRkYWRkODIwMDEgYWRkICAuMjQwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIwMDIgYWRkICAuMjQxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIwMDMgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIwMDQgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIwMDcgYWRkICAuMjQ2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIwMDggYWRkICAuMjQ3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIwMDkgYWRkICAuMjQ5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIwMTEgYWRkIC0uMjQ5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkODIxMDAgYWRkICAuMjUwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIFJvdW5kZWQNCi1kZGFkZDgyMTAxIGFkZCAgLjI1MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMTAyIGFkZCAgLjI1MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMTAzIGFkZCAgLjI1NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMTA0IGFkZCAgLjI1NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMTA3IGFkZCAgLjI1NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMTA4IGFkZCAgLjI1NzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMTA5IGFkZCAgLjI1OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMTExIGFkZCAtLjI1OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDgyMjAwIGFkZCAgLjI2MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBSb3VuZGVkDQotZGRhZGQ4MjIwMSBhZGQgIC4yNjAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjIwMiBhZGQgIC4yNjEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjIwMyBhZGQgIC4yNjUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjIwNCBhZGQgIC4yNjUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjIwNyBhZGQgIC4yNjYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjIwOCBhZGQgIC4yNjcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjIwOSBhZGQgIC4yNjk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjIxMSBhZGQgLS4yNjk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ4MjMwMCBhZGQgIC4yOTAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgUm91bmRlZA0KLWRkYWRkODIzMDEgYWRkICAuMjkwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIzMDIgYWRkICAuMjkxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIzMDMgYWRkICAuMjk1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIzMDQgYWRkICAuMjk1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIzMDcgYWRkICAuMjk2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIzMDggYWRkICAuMjk3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIzMDkgYWRkICAuMjk5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIzMTEgYWRkIC0uMjk5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZGFkZDk5OTAgYWRkIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkOTk5MSBhZGQgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEFkZC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBhZGRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjRG91YmxlcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQorLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY0RvdWJsZQorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZGRhZGQwMDEgYWRkIDEgICAgICAgMSAgICAgICAtPiAgMgorZGRhZGQwMDIgYWRkIDIgICAgICAgMyAgICAgICAtPiAgNQorZGRhZGQwMDMgYWRkICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQorZGRhZGQwMDQgYWRkICc1JyAgICAgJy0zJyAgICAtPiAgMgorZGRhZGQwMDUgYWRkICctNScgICAgJy0zJyAgICAtPiAgLTgKK2RkYWRkMDA2IGFkZCAnLTcnICAgICcyLjUnICAgLT4gIC00LjUKK2RkYWRkMDA3IGFkZCAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorZGRhZGQwMDggYWRkICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MAorZGRhZGQwMDkgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5JworZGRhZGQwMTAgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCistLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRhZGQwMTEgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMTIgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RkYWRkMDEzIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKK2RkYWRkMDE0IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAxNSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5JyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMTYgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDE3IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAxOCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMTkgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDIwIGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkMDIxIGFkZCAwIDEgLT4gMQorZGRhZGQwMjIgYWRkIDEgMSAtPiAyCitkZGFkZDAyMyBhZGQgMiAxIC0+IDMKK2RkYWRkMDI0IGFkZCAzIDEgLT4gNAorZGRhZGQwMjUgYWRkIDQgMSAtPiA1CitkZGFkZDAyNiBhZGQgNSAxIC0+IDYKK2RkYWRkMDI3IGFkZCA2IDEgLT4gNworZGRhZGQwMjggYWRkIDcgMSAtPiA4CitkZGFkZDAyOSBhZGQgOCAxIC0+IDkKK2RkYWRkMDMwIGFkZCA5IDEgLT4gMTAKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitkZGFkZDAzMSBhZGQgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitkZGFkZDAzMiBhZGQgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknCitkZGFkZDAzMyBhZGQgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnCitkZGFkZDAzNCBhZGQgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCisKK2RkYWRkMDM1IGFkZCAnNzAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDM2IGFkZCAnNzAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAzNyBhZGQgJzcwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDM4IGFkZCAnNzAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDM5IGFkZCAnNzAwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCistLSBzeW1tZXRyeToKK2RkYWRkMDQwIGFkZCAnMTAwMDBlKzE2JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDQxIGFkZCAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDA0MiBhZGQgJzEwMDAwZSsxNicgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDQ0IGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDQ1IGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCistLSBzYW1lLCB3aXRob3V0IHJvdW5kaW5nCitkZGFkZDA0NiBhZGQgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycKK2RkYWRkMDQ3IGFkZCAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2RkYWRkMDQ4IGFkZCAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCitkZGFkZDA0OSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcKK2RkYWRkMDUwIGFkZCAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2RkYWRkMDUxIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCitkZGFkZDA1MiBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICcxMDAwMDAwNzAwMDAwMCcKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZGRhZGQwNTMgYWRkICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2RkYWRkMDU0IGFkZCAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJworZGRhZGQwNTUgYWRkICcxLjMnICctMS4zMCcgLT4gJzAuMDAnCitkZGFkZDA1NiBhZGQgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCitkZGFkZDA1NyBhZGQgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcKKworLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbgorZGRhZGQwNjEgYWRkIDEgJzAuMDAwMScgLT4gJzEuMDAwMScKK2RkYWRkMDYyIGFkZCAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2RkYWRkMDYzIGFkZCAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJworZGRhZGQwNjQgYWRkIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScKK2RkYWRkMDY1IGFkZCAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorZGRhZGQwNzAgYWRkIDEgIDAgICAgLT4gMQorZGRhZGQwNzEgYWRkIDEgMC4gICAgLT4gMQorZGRhZGQwNzIgYWRkIDEgIC4wICAgLT4gMS4wCitkZGFkZDA3MyBhZGQgMSAwLjAgICAtPiAxLjAKK2RkYWRkMDc0IGFkZCAxIDAuMDAgIC0+IDEuMDAKK2RkYWRkMDc1IGFkZCAgMCAgMSAgIC0+IDEKK2RkYWRkMDc2IGFkZCAwLiAgMSAgIC0+IDEKK2RkYWRkMDc3IGFkZCAgLjAgMSAgIC0+IDEuMAorZGRhZGQwNzggYWRkIDAuMCAxICAgLT4gMS4wCitkZGFkZDA3OSBhZGQgMC4wMCAxICAtPiAxLjAwCisKKy0tIHNvbWUgY2FycmllcworZGRhZGQwODAgYWRkIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkKK2RkYWRkMDgxIGFkZCA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAorZGRhZGQwODIgYWRkICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAKK2RkYWRkMDgzIGFkZCAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDAKK2RkYWRkMDg0IGFkZCAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAorZGRhZGQwODUgYWRkICAgICA5OTk5OSAxICAtPiAxMDAwMDAKK2RkYWRkMDg2IGFkZCAgICAgIDk5OTkgMSAgLT4gMTAwMDAKK2RkYWRkMDg3IGFkZCAgICAgICA5OTkgMSAgLT4gMTAwMAorZGRhZGQwODggYWRkICAgICAgICA5OSAxICAtPiAxMDAKK2RkYWRkMDg5IGFkZCAgICAgICAgIDkgMSAgLT4gMTAKKworCistLSBtb3JlIExIUyBzd2FwcworZGRhZGQwOTAgYWRkICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZGRhZGQwOTEgYWRkICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitkZGFkZDA5MiBhZGQgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JworZGRhZGQwOTMgYWRkICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZGRhZGQwOTQgYWRkICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZGRhZGQwOTUgYWRkICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JworZGRhZGQwOTYgYWRkICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZGRhZGQwOTcgYWRkICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitkZGFkZDA5OCBhZGQgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK2RkYWRkMDk5IGFkZCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitkZGFkZDEwMCBhZGQgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2RkYWRkMTAxIGFkZCAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCitkZGFkZDEwMiBhZGQgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitkZGFkZDEwMyBhZGQgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitkZGFkZDEwNCBhZGQgJy01RTAnICAgICAgICAgMCAtPiAgJy01JworZGRhZGQxMDUgYWRkICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitkZGFkZDEwNiBhZGQgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitkZGFkZDEwNyBhZGQgJy01RTE1JyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworZGRhZGQxMDggYWRkICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgUm91bmRlZAorZGRhZGQxMDkgYWRkICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZAorZGRhZGQxMTAgYWRkICctNUUxOCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgUm91bmRlZAorZGRhZGQxMTEgYWRkICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZGRhZGQxMTMgYWRkIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCitkZGFkZDExNCBhZGQgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3JworZGRhZGQxMTYgYWRkIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZGRhZGQxMTcgYWRkIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCitkZGFkZDExOSBhZGQgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycKK2RkYWRkMTIwIGFkZCAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZGRhZGQxMjEgYWRkIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCitkZGFkZDEyMiBhZGQgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3JworZGRhZGQxMjMgYWRkIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2RkYWRkMTI0IGFkZCAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKK2RkYWRkMTI1IGFkZCAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnCitkZGFkZDEyNiBhZGQgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitkZGFkZDEyNyBhZGQgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKK2RkYWRkMTI4IGFkZCAwICAnLTVFLTEnICAgICAgLT4gICctMC41JworZGRhZGQxMjkgYWRkIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZGRhZGQxMzAgYWRkIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKK2RkYWRkMTMxIGFkZCAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJworZGRhZGQxMzIgYWRkIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworZGRhZGQxMzMgYWRkIDAgICctNUUxNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZAorZGRhZGQxMzQgYWRkIDAgICctNUUxNycgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICAgUm91bmRlZAorZGRhZGQxMzUgYWRkIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZAorZGRhZGQxMzYgYWRkIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCistLSByZWxhdGVkCitkZGFkZDEzNyBhZGQgIDEgICcwRS0xOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZGRhZGQxMzggYWRkIC0xICAnMEUtMTknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RkYWRkMTM5IGFkZCAnMEUtMTknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitkZGFkZDE0MCBhZGQgJzBFLTE5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZGRhZGQxNDEgYWRkIDFFKzExICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcKK2RkYWRkMTQyIGFkZCAxRSsxMSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkCitkZGFkZDE0MyBhZGQgMC4wMDAgICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJworZGRhZGQxNDQgYWRkIDAuMDAwMCAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2RkYWRkMTQ2IGFkZCAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnCitkZGFkZDE0NyBhZGQgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcKK2RkYWRkMTQ4IGFkZCAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworZGRhZGQxNDkgYWRkICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcKK2RkYWRkMTUwIGFkZCAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJworZGRhZGQxNTEgYWRkICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCitkZGFkZDE1MiBhZGQgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJworZGRhZGQxNTMgYWRkICczLicgICAgJy4zJyAgICAtPiAgJzMuMycKK2RkYWRkMTU0IGFkZCAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCitkZGFkZDE1NSBhZGQgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcKK2RkYWRkMTU2IGFkZCAnMycgICAgICczJyAgICAgLT4gICc2JworZGRhZGQxNTcgYWRkICczJyAgICAgJyszJyAgICAtPiAgJzYnCitkZGFkZDE1OCBhZGQgJzMnICAgICAnLTMnICAgIC0+ICAnMCcKK2RkYWRkMTU5IGFkZCAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnCitkZGFkZDE2MCBhZGQgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2RkYWRkMTYxIGFkZCAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScKK2RkYWRkMTYyIGFkZCAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitkZGFkZDE2MyBhZGQgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZGRhZGQxNjQgYWRkICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5JworZGRhZGQxNjUgYWRkICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScKK2RkYWRkMTY2IGFkZCAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkZGFkZDE2NyBhZGQgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZGRhZGQxNjggYWRkICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScKKworcm91bmRpbmc6IGhhbGZfdXAKKy0tICAgICAgICAgICAxLjIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1NgorZGRhZGQxNzAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTcyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY1JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxNzMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3NCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTc1IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRhZGQxNzYgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3NyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkCitkZGFkZDE3OCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0NScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTc5IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxODAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE4MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTgyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxODMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZGRhZGQyMDAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JworZGRhZGQyMDEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjAyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMDQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjA1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMDcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjA4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwOSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjExIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxMiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjE0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxNSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRhZGQyMTcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjE4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxOSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkZGFkZDIyMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknCitkZGFkZDIyMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjIzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIyNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjI2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIyNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjI5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjMyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjM1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnCitkZGFkZDIzNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjM5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZGRhZGQyNDAgYWRkICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjQxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI0MiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRhZGQyNTAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JworZGRhZGQyNTEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjUyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1MyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNTQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjU1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1NiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNTcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjU4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1OSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjYxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2MiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjY0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2NSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRhZGQyNjcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjY4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2OSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGFkZDMwMSBhZGQgIC0xICAgMSAgICAgIC0+ICAgMAorZGRhZGQzMDIgYWRkICAgMCAgIDEgICAgICAtPiAgIDEKK2RkYWRkMzAzIGFkZCAgIDEgICAxICAgICAgLT4gICAyCitkZGFkZDMwNCBhZGQgIDEyICAgMSAgICAgIC0+ICAxMworZGRhZGQzMDUgYWRkICA5OCAgIDEgICAgICAtPiAgOTkKK2RkYWRkMzA2IGFkZCAgOTkgICAxICAgICAgLT4gMTAwCitkZGFkZDMwNyBhZGQgMTAwICAgMSAgICAgIC0+IDEwMQorZGRhZGQzMDggYWRkIDEwMSAgIDEgICAgICAtPiAxMDIKK2RkYWRkMzA5IGFkZCAgLTEgIC0xICAgICAgLT4gIC0yCitkZGFkZDMxMCBhZGQgICAwICAtMSAgICAgIC0+ICAtMQorZGRhZGQzMTEgYWRkICAgMSAgLTEgICAgICAtPiAgIDAKK2RkYWRkMzEyIGFkZCAgMTIgIC0xICAgICAgLT4gIDExCitkZGFkZDMxMyBhZGQgIDk4ICAtMSAgICAgIC0+ICA5NworZGRhZGQzMTQgYWRkICA5OSAgLTEgICAgICAtPiAgOTgKK2RkYWRkMzE1IGFkZCAxMDAgIC0xICAgICAgLT4gIDk5CitkZGFkZDMxNiBhZGQgMTAxICAtMSAgICAgIC0+IDEwMAorCitkZGFkZDMyMSBhZGQgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2RkYWRkMzIyIGFkZCAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZGRhZGQzMjMgYWRkICAwLjAxICAwLjAxICAgIC0+ICAwLjAyCitkZGFkZDMyNCBhZGQgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2RkYWRkMzI1IGFkZCAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZGRhZGQzMjYgYWRkICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwCitkZGFkZDMyNyBhZGQgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2RkYWRkMzI4IGFkZCAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZGRhZGQzMjkgYWRkIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyCitkZGFkZDMzMCBhZGQgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2RkYWRkMzMxIGFkZCAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZGRhZGQzMzIgYWRkICAwLjEyIC0wLjAxICAgIC0+ICAwLjExCitkZGFkZDMzMyBhZGQgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2RkYWRkMzM0IGFkZCAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZGRhZGQzMzUgYWRkICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5CitkZGFkZDMzNiBhZGQgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CitkZGFkZDM0MCBhZGQgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZGRhZGQzNDEgYWRkIDFFKzE1ICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwCitkZGFkZDM0MiBhZGQgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCitkZGFkZDM0MyBhZGQgMUUrMjAgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitkZGFkZDM0NCBhZGQgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQorZGRhZGQzNDUgYWRkIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxCitkZGFkZDM0NiBhZGQgMUUrMTYgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMzQ3IGFkZCAxRSsyMCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQzNDggYWRkIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2RkYWRkMzQ5IGFkZCAxRSsxNSAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwNworZGRhZGQzNTAgYWRkIDFFKzE2ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDM1MSBhZGQgMUUrMjAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZGFkZDM2MCAgYWRkIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2RkYWRkMzYxICBhZGQgMEUtNTAgMTAwMDBFKzEgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQKK2RkYWRkMzYyICBhZGQgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQKK2RkYWRkMzYzICBhZGQgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QKK2RkYWRkMzY0ICBhZGQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAwRSszNjkKKworLS0gYSBjdXJpb3NpdHkgZnJvbSBKU1IgMTMgdGVzdGluZworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorZGRhZGQzNzAgYWRkICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQKK2RkYWRkMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorZGRhZGQzNzIgYWRkICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQKK2RkYWRkMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl9ldmVuCitkZGFkZDM3NCBhZGQgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNAorZGRhZGQzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QKKworLS0gb3BlcmFuZHMgZm9sZGVkCitkZGFkZDM4MCBhZGQgICAxRSszODQgIDFFKzM4NCAgLT4gIDIuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKK2RkYWRkMzgxIGFkZCAgIDFFKzM4MCAgMUUrMzgwICAtPiAgMi4wMDAwMDAwMDAwMEUrMzgwICAgICAgQ2xhbXBlZAorZGRhZGQzODIgYWRkICAgMUUrMzc2ICAxRSszNzYgIC0+ICAyLjAwMDAwMDBFKzM3NiAgICAgICAgICBDbGFtcGVkCitkZGFkZDM4MyBhZGQgICAxRSszNzIgIDFFKzM3MiAgLT4gIDIuMDAwRSszNzIgICAgICAgICAgICAgIENsYW1wZWQKK2RkYWRkMzg0IGFkZCAgIDFFKzM3MCAgMUUrMzcwICAtPiAgMi4wRSszNzAgICAgICAgICAgICAgICAgQ2xhbXBlZAorZGRhZGQzODUgYWRkICAgMUUrMzY5ICAxRSszNjkgIC0+ICAyRSszNjkKK2RkYWRkMzg2IGFkZCAgIDFFKzM2OCAgMUUrMzY4ICAtPiAgMkUrMzY4CisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworZGRhZGQ0MDAgYWRkICAgMSAgIDc3ZS0xNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CitkZGFkZDQwMSBhZGQgICAxICAgNzdlLTE1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3CitkZGFkZDQwMiBhZGQgICAxICAgNzdlLTE2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MDMgYWRkICAgMSAgIDc3ZS0xNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDA0IGFkZCAgIDEgICA3N2UtMTggICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQwNSBhZGQgICAxICAgNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MDYgYWRkICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ0MTAgYWRkICAxMCAgIDc3ZS0xNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3NworZGRhZGQ0MTEgYWRkICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDEyIGFkZCAgMTAgICA3N2UtMTYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQxMyBhZGQgIDEwICAgNzdlLTE3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MTQgYWRkICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDE1IGFkZCAgMTAgICA3N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQxNiBhZGQgIDEwICAgNzdlLTI5OSAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDQyMCBhZGQgIDc3ZS0xNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2RkYWRkNDIxIGFkZCAgNzdlLTE1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2RkYWRkNDIyIGFkZCAgNzdlLTE2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGFkZDQyMyBhZGQgIDc3ZS0xNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MjQgYWRkICA3N2UtMTggICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDI1IGFkZCAgNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQyNiBhZGQgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDQzMCBhZGQgIDc3ZS0xNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CitkZGFkZDQzMSBhZGQgIDc3ZS0xNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MzIgYWRkICA3N2UtMTYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDMzIGFkZCAgNzdlLTE3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQzNCBhZGQgIDc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MzUgYWRkICA3N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDM2IGFkZCAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGZhc3RwYXRoIGJvdW5kYXJ5IChtb3JlIGluIGRxYWRkKQorLS0gICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGFkZDUzOSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzMzMzMzMzMzMzMzMzMzMycgLT4gJzc3Nzc3Nzc3Nzc3Nzc3NzcnCitkZGFkZDU0MCBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzg4ODg4ODg4ODg4ODg4ODgnCitkZGFkZDU0MSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NScgLT4gJzk5OTk5OTk5OTk5OTk5OTknCitkZGFkZDU0MiBhZGQgJzMzMzMzMzMzMzMzMzMzMzMnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzc3Nzc3Nzc3Nzc3Nzc3NzcnCitkZGFkZDU0MyBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzg4ODg4ODg4ODg4ODg4ODgnCitkZGFkZDU0NCBhZGQgJzU1NTU1NTU1NTU1NTU1NTUnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzk5OTk5OTk5OTk5OTk5OTknCitkZGFkZDU0NSBhZGQgJzMwMDAwMDQwMDAwMDAwMDAnICAnMzAwMDAwMDAwMDAwMDA0MCcgLT4gJzYwMDAwMDQwMDAwMDAwNDAnCitkZGFkZDU0NiBhZGQgJzMwMDAwMDA0MDAwMDAwMDAnICAnNDAwMDAwMDAwMDAwMDQwMCcgLT4gJzcwMDAwMDA0MDAwMDA0MDAnCitkZGFkZDU0NyBhZGQgJzMwMDAwMDAwNDAwMDAwMDAnICAnNTAwMDAwMDAwMDAwNDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAnCitkZGFkZDU0OCBhZGQgJzQwMDAwMDAwMDQwMDAwMDAnICAnMzAwMDAwMDAwMDA0MDAwMCcgLT4gJzcwMDAwMDAwMDQwNDAwMDAnCitkZGFkZDU0OSBhZGQgJzQwMDAwMDAwMDA0MDAwMDAnICAnNDAwMDAwMDAwMDQwMDAwMCcgLT4gJzgwMDAwMDAwMDA4MDAwMDAnCitkZGFkZDU1MCBhZGQgJzQwMDAwMDAwMDAwNDAwMDAnICAnNTAwMDAwMDAwNDAwMDAwMCcgLT4gJzkwMDAwMDAwMDQwNDAwMDAnCitkZGFkZDU1MSBhZGQgJzUwMDAwMDAwMDAwMDQwMDAnICAnMzAwMDAwMDA0MDAwMDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAnCitkZGFkZDU1MiBhZGQgJzUwMDAwMDAwMDAwMDA0MDAnICAnNDAwMDAwMDQwMDAwMDAwMCcgLT4gJzkwMDAwMDA0MDAwMDA0MDAnCitkZGFkZDU1MyBhZGQgJzUwMDAwMDAwMDAwMDAwNDAnICAnNTAwMDAwNDAwMDAwMDAwMCcgLT4gMS4wMDAwMDA0MDAwMDAwMDRFKzE2IFJvdW5kZWQKKy0tIGNoZWNrIHByb3BhZ2F0aW9uCitkZGFkZDU1NCBhZGQgJzg5OTk5OTk5OTk5OTk5OTknICAnMDAwMDAwMDAwMDAwMDAwMScgLT4gOTAwMDAwMDAwMDAwMDAwMAorZGRhZGQ1NTUgYWRkICcwMDAwMDAwMDAwMDAwMDAxJyAgJzg5OTk5OTk5OTk5OTk5OTknIC0+IDkwMDAwMDAwMDAwMDAwMDAKK2RkYWRkNTU2IGFkZCAnMDk5OTk5OTk5OTk5OTk5OScgICcwMDAwMDAwMDAwMDAwMDAxJyAtPiAxMDAwMDAwMDAwMDAwMDAwCitkZGFkZDU1NyBhZGQgJzAwMDAwMDAwMDAwMDAwMDEnICAnMDk5OTk5OTk5OTk5OTk5OScgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRhZGQ1NTggYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ1NTU1NTU1NTU1NTU1NTYnIC0+IDkwMDAwMDAwMDAwMDAwMDAKK2RkYWRkNTU5IGFkZCAnNDU1NTU1NTU1NTU1NTU1NicgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiA5MDAwMDAwMDAwMDAwMDAwCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RkYWRkNjQ0MCBhZGQgICAxICAgLTc3ZS0xNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NDEgYWRkICAgMSAgIC03N2UtMTUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ0MiBhZGQgICAxICAgLTc3ZS0xNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ0MyBhZGQgICAxICAgLTc3ZS0xNyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NDQgYWRkICAgMSAgIC03N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDQ1IGFkZCAgIDEgICAtNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDQ2IGFkZCAgIDEgICAtNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDY0NTAgYWRkICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ1MSBhZGQgIDEwICAgLTc3ZS0xNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ1MiBhZGQgIDEwICAgLTc3ZS0xNiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NTMgYWRkICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDU0IGFkZCAgMTAgICAtNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDU1IGFkZCAgMTAgICAtNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDU2IGFkZCAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDY0NjAgYWRkICAtNzdlLTE0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTkyMworZGRhZGQ2NDYxIGFkZCAgLTc3ZS0xNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NjIgYWRkICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NjMgYWRkICAtNzdlLTE3ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDY0IGFkZCAgLTc3ZS0xOCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ2NSBhZGQgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ2NiBhZGQgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ2NDcwIGFkZCAgLTc3ZS0xNCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NzEgYWRkICAtNzdlLTE1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NzIgYWRkICAtNzdlLTE2ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDczIGFkZCAgLTc3ZS0xNyAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ3NCBhZGQgIC03N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ3NSBhZGQgIC03N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ3NiBhZGQgIC03N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZGRhZGQ2NDgwIGFkZCAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCitkZGFkZDY0ODEgYWRkICAtMSAgICA3N2UtMTUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0ODIgYWRkICAtMSAgICA3N2UtMTYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDgzIGFkZCAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0ODQgYWRkICAtMSAgICA3N2UtMTggICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ4NSBhZGQgIC0xICAgIDc3ZS0xOSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0ODYgYWRkICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDY0OTAgYWRkIC0xMCAgICA3N2UtMTQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCitkZGFkZDY0OTEgYWRkIC0xMCAgICA3N2UtMTUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDkyIGFkZCAtMTAgICAgNzdlLTE2ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0OTMgYWRkIC0xMCAgICA3N2UtMTcgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ5NCBhZGQgLTEwICAgIDc3ZS0xOCAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0OTUgYWRkIC0xMCAgICA3N2UtMTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDk2IGFkZCAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ2NTAwIGFkZCAgIDc3ZS0xNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCitkZGFkZDY1MDEgYWRkICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY1MDIgYWRkICAgNzdlLTE2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NTAzIGFkZCAgIDc3ZS0xNyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MDQgYWRkICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjUwNSBhZGQgICA3N2UtMTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MDYgYWRkICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDY1MTAgYWRkICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCitkZGFkZDY1MTEgYWRkICAgNzdlLTE1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NTEyIGFkZCAgIDc3ZS0xNiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MTMgYWRkICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjUxNCBhZGQgICA3N2UtMTggICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MTUgYWRkICAgNzdlLTE5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTE2IGFkZCAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGFkZDY1NDAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZGRhZGQ2NTQxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTQ0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTQ3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTUwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTUzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTU2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkYWRkNjU1NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTU4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRhZGQ2NTYwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2RkYWRkNjU2MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTYyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU2NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTY1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU2NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTY4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTcxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTc0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCitkZGFkZDY1NzcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTc5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkZGFkZDc1NDAgYWRkICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU0MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTQyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkZGFkZDc1NTAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZGRhZGQ3NTUxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTU0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTU3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTYwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTYzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTY2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkYWRkNzU2NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTY4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gdmVyaWZ5IGEgcXVlcnkKK3JvdW5kaW5nOiAgICAgZG93bgorZGRhZGQ3NjYxIGFkZCAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NjYyIGFkZCAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQKK2RkYWRkNzY2MyBhZGQgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzY2NCBhZGQgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZGRhZGQ3NzAxIGFkZCA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAorZGRhZGQ3NzAyIGFkZCAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKK2RkYWRkNzcwMyBhZGQgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCitkZGFkZDc3MDQgYWRkIDBFLTMgIDAwLjAwICAtPiAwLjAwMAorCitkZGFkZDc3MTAgYWRkIDBFKzMgIDAwLjAwICAtPiAwLjAwCitkZGFkZDc3MTEgYWRkIDBFKzMgIDAwLjAgICAtPiAwLjAKK2RkYWRkNzcxMiBhZGQgMEUrMyAgMDAuICAgIC0+IDAKK2RkYWRkNzcxMyBhZGQgMEUrMyAgMDAuRSsxIC0+IDBFKzEKK2RkYWRkNzcxNCBhZGQgMEUrMyAgMDAuRSsyIC0+IDBFKzIKK2RkYWRkNzcxNSBhZGQgMEUrMyAgMDAuRSszIC0+IDBFKzMKK2RkYWRkNzcxNiBhZGQgMEUrMyAgMDAuRSs0IC0+IDBFKzMKK2RkYWRkNzcxNyBhZGQgMEUrMyAgMDAuRSs1IC0+IDBFKzMKK2RkYWRkNzcxOCBhZGQgMEUrMyAgLTAwLjAgICAtPiAwLjAKK2RkYWRkNzcxOSBhZGQgMEUrMyAgLTAwLiAgICAtPiAwCitkZGFkZDc3MzEgYWRkIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQorCitkZGFkZDc3MjAgYWRkIDAwLjAwICAwRSszICAtPiAwLjAwCitkZGFkZDc3MjEgYWRkIDAwLjAgICAwRSszICAtPiAwLjAKK2RkYWRkNzcyMiBhZGQgMDAuICAgIDBFKzMgIC0+IDAKK2RkYWRkNzcyMyBhZGQgMDAuRSsxIDBFKzMgIC0+IDBFKzEKK2RkYWRkNzcyNCBhZGQgMDAuRSsyIDBFKzMgIC0+IDBFKzIKK2RkYWRkNzcyNSBhZGQgMDAuRSszIDBFKzMgIC0+IDBFKzMKK2RkYWRkNzcyNiBhZGQgMDAuRSs0IDBFKzMgIC0+IDBFKzMKK2RkYWRkNzcyNyBhZGQgMDAuRSs1IDBFKzMgIC0+IDBFKzMKK2RkYWRkNzcyOCBhZGQgLTAwLjAwIDBFKzMgIC0+IDAuMDAKK2RkYWRkNzcyOSBhZGQgLTAwLjAgIDBFKzMgIC0+IDAuMAorZGRhZGQ3NzMwIGFkZCAtMDAuICAgMEUrMyAgLT4gMAorCitkZGFkZDc3MzIgYWRkICAwICAgICAwICAgICAtPiAgMAorZGRhZGQ3NzMzIGFkZCAgMCAgICAtMCAgICAgLT4gIDAKK2RkYWRkNzczNCBhZGQgLTAgICAgIDAgICAgIC0+ICAwCitkZGFkZDc3MzUgYWRkIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCisKK2RkYWRkNzczNiBhZGQgIDEgICAgLTEgICAgIC0+ICAwCitkZGFkZDc3MzcgYWRkIC0xICAgIC0xICAgICAtPiAtMgorZGRhZGQ3NzM4IGFkZCAgMSAgICAgMSAgICAgLT4gIDIKK2RkYWRkNzczOSBhZGQgLTEgICAgIDEgICAgIC0+ICAwCisKK2RkYWRkNzc0MSBhZGQgIDAgICAgLTEgICAgIC0+IC0xCitkZGFkZDc3NDIgYWRkIC0wICAgIC0xICAgICAtPiAtMQorZGRhZGQ3NzQzIGFkZCAgMCAgICAgMSAgICAgLT4gIDEKK2RkYWRkNzc0NCBhZGQgLTAgICAgIDEgICAgIC0+ICAxCitkZGFkZDc3NDUgYWRkIC0xICAgICAwICAgICAtPiAtMQorZGRhZGQ3NzQ2IGFkZCAtMSAgICAtMCAgICAgLT4gLTEKK2RkYWRkNzc0NyBhZGQgIDEgICAgIDAgICAgIC0+ICAxCitkZGFkZDc3NDggYWRkICAxICAgIC0wICAgICAtPiAgMQorCitkZGFkZDc3NTEgYWRkICAwLjAgIC0xICAgICAtPiAtMS4wCitkZGFkZDc3NTIgYWRkIC0wLjAgIC0xICAgICAtPiAtMS4wCitkZGFkZDc3NTMgYWRkICAwLjAgICAxICAgICAtPiAgMS4wCitkZGFkZDc3NTQgYWRkIC0wLjAgICAxICAgICAtPiAgMS4wCitkZGFkZDc3NTUgYWRkIC0xLjAgICAwICAgICAtPiAtMS4wCitkZGFkZDc3NTYgYWRkIC0xLjAgIC0wICAgICAtPiAtMS4wCitkZGFkZDc3NTcgYWRkICAxLjAgICAwICAgICAtPiAgMS4wCitkZGFkZDc3NTggYWRkICAxLjAgIC0wICAgICAtPiAgMS4wCisKK2RkYWRkNzc2MSBhZGQgIDAgICAgLTEuMCAgIC0+IC0xLjAKK2RkYWRkNzc2MiBhZGQgLTAgICAgLTEuMCAgIC0+IC0xLjAKK2RkYWRkNzc2MyBhZGQgIDAgICAgIDEuMCAgIC0+ICAxLjAKK2RkYWRkNzc2NCBhZGQgLTAgICAgIDEuMCAgIC0+ICAxLjAKK2RkYWRkNzc2NSBhZGQgLTEgICAgIDAuMCAgIC0+IC0xLjAKK2RkYWRkNzc2NiBhZGQgLTEgICAgLTAuMCAgIC0+IC0xLjAKK2RkYWRkNzc2NyBhZGQgIDEgICAgIDAuMCAgIC0+ICAxLjAKK2RkYWRkNzc2OCBhZGQgIDEgICAgLTAuMCAgIC0+ICAxLjAKKworZGRhZGQ3NzcxIGFkZCAgMC4wICAtMS4wICAgLT4gLTEuMAorZGRhZGQ3NzcyIGFkZCAtMC4wICAtMS4wICAgLT4gLTEuMAorZGRhZGQ3NzczIGFkZCAgMC4wICAgMS4wICAgLT4gIDEuMAorZGRhZGQ3Nzc0IGFkZCAtMC4wICAgMS4wICAgLT4gIDEuMAorZGRhZGQ3Nzc1IGFkZCAtMS4wICAgMC4wICAgLT4gLTEuMAorZGRhZGQ3Nzc2IGFkZCAtMS4wICAtMC4wICAgLT4gLTEuMAorZGRhZGQ3Nzc3IGFkZCAgMS4wICAgMC4wICAgLT4gIDEuMAorZGRhZGQ3Nzc4IGFkZCAgMS4wICAtMC4wICAgLT4gIDEuMAorCistLSBTcGVjaWFscworZGRhZGQ3NzgwIGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3ODEgYWRkIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4MiBhZGQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRhZGQ3NzgzIGFkZCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZGFkZDc3ODQgYWRkIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4NSBhZGQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRhZGQ3Nzg2IGFkZCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZGFkZDc3ODcgYWRkIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4OCBhZGQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRhZGQ3Nzg5IGFkZCAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3OTAgYWRkIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc5MSBhZGQgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRhZGQ3NzkyIGFkZCAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3OTMgYWRkICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc5NCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RkYWRkNzgwMCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4MDEgYWRkICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwMiBhZGQgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODAzIGFkZCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkZGFkZDc4MDQgYWRkICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwNSBhZGQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODA2IGFkZCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZGFkZDc4MDcgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwOCBhZGQgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODA5IGFkZCAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzgxMCBhZGQgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODExIGFkZCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGFkZDc4MTIgYWRkICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgxMyBhZGQgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODE0IGFkZCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZGFkZDc4MTUgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRhZGQ3ODIxIGFkZCAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRhZGQ3ODIyIGFkZCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRhZGQ3ODIzIGFkZCAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRhZGQ3ODI0IGFkZCAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRhZGQ3ODI1IGFkZCAgTmFOICAwICAgICAgLT4gIE5hTgorZGRhZGQ3ODI2IGFkZCAgTmFOICAxICAgICAgLT4gIE5hTgorZGRhZGQ3ODI3IGFkZCAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRhZGQ3ODI4IGFkZCAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRhZGQ3ODI5IGFkZCAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODMwIGFkZCAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODMxIGFkZCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODMyIGFkZCAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODMzIGFkZCAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODM0IGFkZCAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODM1IGFkZCAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODM2IGFkZCAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODM3IGFkZCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZGFkZDc4NDEgYWRkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQyIGFkZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0MyBhZGQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NDQgYWRkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQ1IGFkZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0NiBhZGQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NDcgYWRkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQ4IGFkZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0OSBhZGQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTAgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODUxIGFkZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1MiBhZGQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTMgYWRkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODU0IGFkZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1NSBhZGQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTYgYWRkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODU3IGFkZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1OCBhZGQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTkgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGFkZDc4NjEgYWRkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZGRhZGQ3ODYyIGFkZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2RkYWRkNzg2MyBhZGQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkZGFkZDc4NjQgYWRkICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZGRhZGQ3ODY1IGFkZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2RkYWRkNzg2NiBhZGQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkZGFkZDc4NjcgYWRkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZGRhZGQ3ODY4IGFkZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2RkYWRkNzg2OSBhZGQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZGRhZGQ3ODcxIGFkZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODcyIGFkZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODczIGFkZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc0IGFkZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc1IGFkZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc2IGFkZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc3IGFkZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc4IGFkZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc5IGFkZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODgwIGFkZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODgxIGFkZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODgyIGFkZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkZGFkZDc4ODMgYWRkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4ODQgYWRkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2RkYWRkNzg4NSBhZGQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KK2RkYWRkNzU3NSBhZGQgIDFFLTM4MyAtMUUtMzk4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorZGRhZGQ3NTc2IGFkZCAtMUUtMzgzICsxRS0zOTggLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCisKKy0tIGFuZCBhbm90aGVyIGN1cmlvdXMgY2FzZQorZGRhZGQ3NTc3IGFkZCA3LjAwMDAwMDAwMDAwMEUtMzg1IC0xLjAwMDAwRS0zOTEgLT4gNi45OTk5OTkwMDAwMDBFLTM4NSBTdWJub3JtYWwKKworLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlCistLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkYWRkNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGFkZDc5NzMgYWRkICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk3NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTc1IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk3NiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5NzcgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTc4IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgN0UrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk3OSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDZFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5ODAgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTgxIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNEUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTgyIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgM0UrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTgzIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTg0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorCitkZGFkZDc5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkYWRkNzk4NiBhZGQgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk4NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk4OCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTg5IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTAgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC04RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5MSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTkyIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTMgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC01RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5NCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTUgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTk2IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMkUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCitkZGFkZDcxMTAwIGFkZCAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTAxIGFkZCAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwMyBhZGQgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTA0IGFkZCAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTA1IGFkZCAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwNiBhZGQgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTA3IGFkZCAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTA4IGFkZCAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwOSBhZGQgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitkZGFkZDcxMTEwIGFkZCAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExMSBhZGQgLTFlKzEgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTEzIGFkZCAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTE0IGFkZCAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExNSBhZGQgLTFlLTIgKzFlLTM4MyAgIC0+IC0wLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTE2IGFkZCAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTE3IGFkZCAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExOCBhZGQgLTFlLTUgKzFlLTM4MyAgIC0+IC0wLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTE5IGFkZCAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2RkYWRkNzEzMDAgYWRkIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzEwIGFkZCAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxMSBhZGQgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTIgYWRkIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzEzIGFkZCAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxNCBhZGQgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTUgYWRkIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzE2IGFkZCAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxNyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTggYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzE5IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyMCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjEgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzIyIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyMyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjQgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzI1IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyNiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjcgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzI4IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyOSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzAgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzMxIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzMiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzMgYWRkIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzM0IGFkZCAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzNSBhZGQgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzYgYWRkIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzM3IGFkZCAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzOCBhZGQgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzkgYWRkIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNzEzNDAgYWRkIDFFMTYgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzQxIGFkZCAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDcxMzQ5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzUyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzU1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzU4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzYxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzY0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzY4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzc0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzc3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzgwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzgzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzg2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzg5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzOTAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM5MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzkyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzOTMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM5NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzk1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzOTYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZAorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMAorZGRhZGQ3MTQyMCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDIxIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDIyIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQyMyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDI0IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDI1IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQyNiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDI3IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2RkYWRkNzE0MjggYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorZGRhZGQ3MTQyOSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitkZGFkZDcxNDMwIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitkZGFkZDcxNDMxIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCitkZGFkZDcxNDMyIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitkZGFkZDcxNDMzIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitkZGFkZDcxNDM0IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CitkZGFkZDcxNDM1IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitkZGFkZDcxNDM2IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitkZGFkZDcxNDM3IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CitkZGFkZDcxNDM4IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitkZGFkZDcxNDM5IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2RkYWRkNzE0NDAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDQxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAwIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDQ0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAwIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDQ3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZGRhZGQ3MTQ0OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2RkYWRkNzE0NDkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitkZGFkZDcxNDUwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RkYWRkNzE0NTEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZGRhZGQ3MTQ1MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitkZGFkZDcxNDUzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RkYWRkNzE0NTQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZGRhZGQ3MTQ1NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitkZGFkZDcxNDU2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RkYWRkNzE0NTcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZGRhZGQ3MTQ1OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitkZGFkZDcxNDU5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2RkYWRkNzE0NjAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKK2RkYWRkNzE0NzYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZGRhZGQ3MTQ3NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkZGFkZDcxNDc4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RkYWRkNzE0NzkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMAorcm91bmRpbmc6ICAgIGhhbGZfdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE1MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTUwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTUxMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RkYWRkNzE1MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE1MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTUyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTUzMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RkYWRkNzE1MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE1NDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTQxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU0MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1NDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTU1MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RkYWRkNzE1NTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICB1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRhZGQ3MTU2MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1NjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTYyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU2MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGFkZDcxNTcxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZGRhZGQ3MTU3MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGRvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE1ODAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTgxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU4MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1ODMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTU5MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RkYWRkNzE1OTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGFkZDcxNjAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTYwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE2MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNjAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkYWRkNzE2MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGFkZDcxNjEyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCistLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoKK3JvdW5kaW5nOiAgICBmbG9vcgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRhZGQ3MTYyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE2MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitkZGFkZDcxNjIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZGRhZGQ3MTYyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGFkZDcxNjMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgorZGRhZGQ3MTYzMiBhZGQgIDExICAgICAtMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitkZGFkZDcxNzAxIGFkZCAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKK2RkYWRkNzE3MDIgYWRkIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorZGRhZGQ3MTcwMyBhZGQgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCitkZGFkZDcxNzA0IGFkZCAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKK2RkYWRkNzE3MDUgYWRkIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMAorZGRhZGQ3MTcwNiBhZGQgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwCitkZGFkZDcxNzA3IGFkZCAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzAKK2RkYWRkNzE3MDggYWRkIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMworCistLSBxdWVyeSBmcm9tIFZpbmNlbnQgS3VsYW5kYWlzYW15Cityb3VuZGluZzogY2VpbGluZworZGRhZGQ3MTgwMSAgYWRkICA3Ljg4MjI3NzM4MDU4NjJFKzI3NyAgICAtNS4xNzU3NTAzODIwNjYzRS0yMSAtPiA3Ljg4MjI3NzM4MDU4NjIwMEUrMjc3IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTgwMiAgYWRkICA3Ljg4MjI3NzM4MDU4NjIwMEUrMjc3ICAxMi4zNDEgICAgICAgICAgICAgICAtPiA3Ljg4MjI3NzM4MDU4NjIwMUUrMjc3IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTgwMyAgYWRkICA3Ljg4MjI3NzM4MDU4NjIwMUUrMjc3ICAyLjcyNzA1NDUwNDY2MTNFLTMxICAtPiA3Ljg4MjI3NzM4MDU4NjIwMkUrMjc3IEluZXhhY3QgUm91bmRlZAorCitkZGFkZDcxODExICBhZGQgICAgICAgICAgICAgICAgICAgMTIuMzQxIC01LjE3NTc1MDM4MjA2NjNFLTIxIC0+IDEyLjM0MTAwMDAwMDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxODEyICBhZGQgICAgICAgIDEyLjM0MTAwMDAwMDAwMDAwIDIuNzI3MDU0NTA0NjYxM0UtMzEgIC0+IDEyLjM0MTAwMDAwMDAwMDAxICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxODEzICBhZGQgICAgICAgIDEyLjM0MTAwMDAwMDAwMDAxIDcuODgyMjc3MzgwNTg2MkUrMjc3IC0+IDcuODgyMjc3MzgwNTg2MjAxRSsyNzcgSW5leGFjdCBSb3VuZGVkCisKKy0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXAKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZGRhZGQ3NTAwMSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NworZGRhZGQ3NTAwMiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDAzIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMDQgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAwNSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDA2IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMDcgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAwOCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDA5IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTAgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxMSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDEyIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTMgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxNCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDE1IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTYgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxNyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDE4IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTkgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAyMCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDIxIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcAorZGRhZGQ3NTAzMCBhZGQgMTIzNDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzkKK2RkYWRkNzUwMzEgYWRkIDEyMzQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEKK2RkYWRkNzUwMzIgYWRkIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyCitkZGFkZDc1MDMzIGFkZCAxMjM0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjMKK2RkYWRkNzUwMzQgYWRkIDEyMzQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQKK2RkYWRkNzUwMzUgYWRkIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1CitkZGFkZDc1MDM2IGFkZCAxMjM0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTYKK2RkYWRkNzUwMzcgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NjcKK2RkYWRkNzUwMzggYWRkIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4CitkZGFkZDc1MDM5IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDAgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0MSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQyIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDMgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0NCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQ1IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDYgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0NyBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQ4IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDkgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkYWRkNzUwNTAgYWRkIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA1MSBhZGQgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDUyIGFkZCAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNTMgYWRkIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA1NCBhZGQgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDU1IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNTYgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA1NyBhZGQgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDYwIGFkZCAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjEgYWRkIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA2MiBhZGQgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDYzIGFkZCAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjQgYWRkIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA2NSBhZGQgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDY2IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjcgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQorcm91bmRpbmc6IHVwCitkZGFkZDc1MDcwIGFkZCAxMjM0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMQorZGRhZGQ3NTA3MSBhZGQgMTIzNDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDcyIGFkZCAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzMgYWRkIDEyMzQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA3NCBhZGQgMTIzNDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDc1IGFkZCAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzYgYWRkIDEyMzQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA3NyBhZGQgMTIzNDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDc4IGFkZCAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzkgYWRkIDEyMzQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4MCBhZGQgMTIzNDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDgxIGFkZCAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODIgYWRkIDEyMzQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4MyBhZGQgMTIzNDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDg0IGFkZCAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODUgYWRkIDEyMzQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4NiBhZGQgMTIzNDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDg3IGFkZCAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODggYWRkIDEyMzQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4OSBhZGQgMTIzNDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIFB1bml0J3MKK2RkYWRkNzUxMDAgYWRkIDEuMDAwIC0yMDAuMDAwICAgICAgICAgICAgICAgICAgIC0+IC0xOTkuMDAwCisKKy0tIFJvdW5kaW5nIHN3YXRoZQorcm91bmRpbmc6IGhhbGZfZXZlbgorZGRhZGQ4MTEwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZAorZGRhZGQ4MTEwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGFkZDgxMjAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxMjAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCitkZGFkZDgxMzAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxMzAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogdXAKK2RkYWRkODE0MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKK2RkYWRkODE0MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkYWRkODE1MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKK2RkYWRkODE1MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBjZWlsaW5nCitkZGFkZDgxNjAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxNjAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjExIGFkZCAtLjIzOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGZsb29yCitkZGFkZDgxNzAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxNzAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzExIGFkZCAtLjIzOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IDA1dXAKK2RkYWRkODE4MDAgYWRkICAuMjAwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjAgIFJvdW5kZWQKK2RkYWRkODE4MDEgYWRkICAuMjAwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgwMiBhZGQgIC4yMDEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODAzIGFkZCAgLjIwNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MDQgYWRkICAuMjA1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgwNyBhZGQgIC4yMDYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODA4IGFkZCAgLjIwNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MDkgYWRkICAuMjA5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgxMSBhZGQgLS4yMDk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ4MTkwMCBhZGQgIC4yMTAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgUm91bmRlZAorZGRhZGQ4MTkwMSBhZGQgIC4yMTAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxOTAyIGFkZCAgLjIxMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE5MDMgYWRkICAuMjE1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTkwNCBhZGQgIC4yMTUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxOTA3IGFkZCAgLjIxNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE5MDggYWRkICAuMjE3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTkwOSBhZGQgIC4yMTk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxOTExIGFkZCAtLjIxOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ4MjAwMCBhZGQgIC4yNDAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgUm91bmRlZAorZGRhZGQ4MjAwMSBhZGQgIC4yNDAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMDAyIGFkZCAgLjI0MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIwMDMgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjAwNCBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMDA3IGFkZCAgLjI0NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIwMDggYWRkICAuMjQ3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjAwOSBhZGQgIC4yNDk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMDExIGFkZCAtLjI0OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ4MjEwMCBhZGQgIC4yNTAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgUm91bmRlZAorZGRhZGQ4MjEwMSBhZGQgIC4yNTAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMTAyIGFkZCAgLjI1MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIxMDMgYWRkICAuMjU1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjEwNCBhZGQgIC4yNTUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMTA3IGFkZCAgLjI1NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIxMDggYWRkICAuMjU3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjEwOSBhZGQgIC4yNTk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMTExIGFkZCAtLjI1OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ4MjIwMCBhZGQgIC4yNjAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgUm91bmRlZAorZGRhZGQ4MjIwMSBhZGQgIC4yNjAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMjAyIGFkZCAgLjI2MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIyMDMgYWRkICAuMjY1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjIwNCBhZGQgIC4yNjUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMjA3IGFkZCAgLjI2NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIyMDggYWRkICAuMjY3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjIwOSBhZGQgIC4yNjk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMjExIGFkZCAtLjI2OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ4MjMwMCBhZGQgIC4yOTAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgUm91bmRlZAorZGRhZGQ4MjMwMSBhZGQgIC4yOTAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMzAyIGFkZCAgLjI5MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIzMDMgYWRkICAuMjk1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjMwNCBhZGQgIC4yOTUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMzA3IGFkZCAgLjI5NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIzMDggYWRkICAuMjk3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjMwOSBhZGQgIC4yOTk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMzExIGFkZCAtLjI5OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gTnVsbCB0ZXN0cworZGRhZGQ5OTkwIGFkZCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkOTk5MSBhZGQgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBbmQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFuZC5kZWNUZXN0CmluZGV4IDY3NjUxNzUuLjY0YTlmOTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFuZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFuZC5kZWNUZXN0CkBAIC0xLDM0NyArMSwzNDcgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkQW5kLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgQU5EIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQotZGRhbmQwMDEgYW5kICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwDQotZGRhbmQwMDIgYW5kICAgICAgICAgICAgIDAgICAgMSAtPiAgICAwDQotZGRhbmQwMDMgYW5kICAgICAgICAgICAgIDEgICAgMCAtPiAgICAwDQotZGRhbmQwMDQgYW5kICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxDQotZGRhbmQwMDUgYW5kICAgICAgICAgIDExMDAgMTAxMCAtPiAxMDAwDQotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCi0tLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYW5kMDA2IGFuZCAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQotZGRhbmQwMDcgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCi1kZGFuZDAwOCBhbmQgMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KLWRkYW5kMDA5IGFuZCAxMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwDQotZGRhbmQwMTAgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCi1kZGFuZDAxMSBhbmQgMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KLWRkYW5kMDEyIGFuZCAwMTAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQotZGRhbmQwMTMgYW5kIDAxMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDANCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi0tLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYW5kMDIxIGFuZCAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExDQotZGRhbmQwMjQgYW5kIDExMTExMTExMTExMTExMTEgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTENCi1kZGFuZDAyNSBhbmQgMTExMTExMTExMTExMTExMSAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQ0KLWRkYW5kMDI2IGFuZCAxMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTEgIC0+ICAgICAxMTExMTExMTExMTExDQotZGRhbmQwMjcgYW5kIDExMTExMTExMTExMTExMTEgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTENCi1kZGFuZDAyOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQ0KLWRkYW5kMDI5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgIDExMTExMTExMTEgIC0+ICAgICAgICAxMTExMTExMTExDQotZGRhbmQwMzAgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTENCi1kZGFuZDAzMSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQ0KLWRkYW5kMDMyIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgIDExMTExMTEgIC0+ICAgICAgICAgICAxMTExMTExDQotZGRhbmQwMzMgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTENCi1kZGFuZDAzNCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQ0KLWRkYW5kMDM1IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgIDExMTEgIC0+ICAgICAgICAgICAgICAxMTExDQotZGRhbmQwMzYgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTENCi1kZGFuZDAzNyBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQ0KLWRkYW5kMDM4IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgICAgICAgICAxDQotZGRhbmQwMzkgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDANCi0NCi1kZGFuZDA0MCBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAxMTExMTExMTExMTExMTExDQotZGRhbmQwNDEgYW5kICAxMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMQ0KLWRkYW5kMDQyIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTENCi1kZGFuZDA0MyBhbmQgICAxMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgIDExMTExMTExMTExMTExDQotZGRhbmQwNDQgYW5kICAgIDExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgMTExMTExMTExMTExMQ0KLWRkYW5kMDQ1IGFuZCAgICAgMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAxMTExMTExMTExMTENCi1kZGFuZDA0NiBhbmQgICAgICAxMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgIDExMTExMTExMTExDQotZGRhbmQwNDcgYW5kICAgICAgIDExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgMTExMTExMTExMQ0KLWRkYW5kMDQ4IGFuZCAgICAgICAgMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAxMTExMTExMTENCi1kZGFuZDA0OSBhbmQgICAgICAgICAxMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgIDExMTExMTExDQotZGRhbmQwNTAgYW5kICAgICAgICAgIDExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgMTExMTExMQ0KLWRkYW5kMDUxIGFuZCAgICAgICAgICAgMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAxMTExMTENCi1kZGFuZDA1MiBhbmQgICAgICAgICAgICAxMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgIDExMTExDQotZGRhbmQwNTMgYW5kICAgICAgICAgICAgIDExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgMTExMQ0KLWRkYW5kMDU0IGFuZCAgICAgICAgICAgICAgMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAxMTENCi1kZGFuZDA1NSBhbmQgICAgICAgICAgICAgICAxMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgIDExDQotZGRhbmQwNTYgYW5kICAgICAgICAgICAgICAgIDEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgMQ0KLWRkYW5kMDU3IGFuZCAgICAgICAgICAgICAgICAwICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDANCi0NCi1kZGFuZDE1MCBhbmQgMTExMTExMTExMSAgMSAgLT4gIDENCi1kZGFuZDE1MSBhbmQgIDExMTExMTExMSAgMSAgLT4gIDENCi1kZGFuZDE1MiBhbmQgICAxMTExMTExMSAgMSAgLT4gIDENCi1kZGFuZDE1MyBhbmQgICAgMTExMTExMSAgMSAgLT4gIDENCi1kZGFuZDE1NCBhbmQgICAgIDExMTExMSAgMSAgLT4gIDENCi1kZGFuZDE1NSBhbmQgICAgICAxMTExMSAgMSAgLT4gIDENCi1kZGFuZDE1NiBhbmQgICAgICAgMTExMSAgMSAgLT4gIDENCi1kZGFuZDE1NyBhbmQgICAgICAgIDExMSAgMSAgLT4gIDENCi1kZGFuZDE1OCBhbmQgICAgICAgICAxMSAgMSAgLT4gIDENCi1kZGFuZDE1OSBhbmQgICAgICAgICAgMSAgMSAgLT4gIDENCi0NCi1kZGFuZDE2MCBhbmQgMTExMTExMTExMSAgMCAgLT4gIDANCi1kZGFuZDE2MSBhbmQgIDExMTExMTExMSAgMCAgLT4gIDANCi1kZGFuZDE2MiBhbmQgICAxMTExMTExMSAgMCAgLT4gIDANCi1kZGFuZDE2MyBhbmQgICAgMTExMTExMSAgMCAgLT4gIDANCi1kZGFuZDE2NCBhbmQgICAgIDExMTExMSAgMCAgLT4gIDANCi1kZGFuZDE2NSBhbmQgICAgICAxMTExMSAgMCAgLT4gIDANCi1kZGFuZDE2NiBhbmQgICAgICAgMTExMSAgMCAgLT4gIDANCi1kZGFuZDE2NyBhbmQgICAgICAgIDExMSAgMCAgLT4gIDANCi1kZGFuZDE2OCBhbmQgICAgICAgICAxMSAgMCAgLT4gIDANCi1kZGFuZDE2OSBhbmQgICAgICAgICAgMSAgMCAgLT4gIDANCi0NCi1kZGFuZDE3MCBhbmQgMSAgMTExMTExMTExMSAgLT4gIDENCi1kZGFuZDE3MSBhbmQgMSAgIDExMTExMTExMSAgLT4gIDENCi1kZGFuZDE3MiBhbmQgMSAgICAxMTExMTExMSAgLT4gIDENCi1kZGFuZDE3MyBhbmQgMSAgICAgMTExMTExMSAgLT4gIDENCi1kZGFuZDE3NCBhbmQgMSAgICAgIDExMTExMSAgLT4gIDENCi1kZGFuZDE3NSBhbmQgMSAgICAgICAxMTExMSAgLT4gIDENCi1kZGFuZDE3NiBhbmQgMSAgICAgICAgMTExMSAgLT4gIDENCi1kZGFuZDE3NyBhbmQgMSAgICAgICAgIDExMSAgLT4gIDENCi1kZGFuZDE3OCBhbmQgMSAgICAgICAgICAxMSAgLT4gIDENCi1kZGFuZDE3OSBhbmQgMSAgICAgICAgICAgMSAgLT4gIDENCi0NCi1kZGFuZDE4MCBhbmQgMCAgMTExMTExMTExMSAgLT4gIDANCi1kZGFuZDE4MSBhbmQgMCAgIDExMTExMTExMSAgLT4gIDANCi1kZGFuZDE4MiBhbmQgMCAgICAxMTExMTExMSAgLT4gIDANCi1kZGFuZDE4MyBhbmQgMCAgICAgMTExMTExMSAgLT4gIDANCi1kZGFuZDE4NCBhbmQgMCAgICAgIDExMTExMSAgLT4gIDANCi1kZGFuZDE4NSBhbmQgMCAgICAgICAxMTExMSAgLT4gIDANCi1kZGFuZDE4NiBhbmQgMCAgICAgICAgMTExMSAgLT4gIDANCi1kZGFuZDE4NyBhbmQgMCAgICAgICAgIDExMSAgLT4gIDANCi1kZGFuZDE4OCBhbmQgMCAgICAgICAgICAxMSAgLT4gIDANCi1kZGFuZDE4OSBhbmQgMCAgICAgICAgICAgMSAgLT4gIDANCi0NCi1kZGFuZDA5MCBhbmQgMDExMTExMTExICAxMTExMTExMTEgIC0+ICAgMTExMTExMTENCi1kZGFuZDA5MSBhbmQgMTAxMTExMTExICAxMTExMTExMTEgIC0+ICAxMDExMTExMTENCi1kZGFuZDA5MiBhbmQgMTEwMTExMTExICAxMTExMTExMTEgIC0+ICAxMTAxMTExMTENCi1kZGFuZDA5MyBhbmQgMTExMDExMTExICAxMTExMTExMTEgIC0+ICAxMTEwMTExMTENCi1kZGFuZDA5NCBhbmQgMTExMTAxMTExICAxMTExMTExMTEgIC0+ICAxMTExMDExMTENCi1kZGFuZDA5NSBhbmQgMTExMTEwMTExICAxMTExMTExMTEgIC0+ICAxMTExMTAxMTENCi1kZGFuZDA5NiBhbmQgMTExMTExMDExICAxMTExMTExMTEgIC0+ICAxMTExMTEwMTENCi1kZGFuZDA5NyBhbmQgMTExMTExMTAxICAxMTExMTExMTEgIC0+ICAxMTExMTExMDENCi1kZGFuZDA5OCBhbmQgMTExMTExMTEwICAxMTExMTExMTEgIC0+ICAxMTExMTExMTANCi0NCi1kZGFuZDEwMCBhbmQgMTExMTExMTExICAwMTExMTExMTEgIC0+ICAgMTExMTExMTENCi1kZGFuZDEwMSBhbmQgMTExMTExMTExICAxMDExMTExMTEgIC0+ICAxMDExMTExMTENCi1kZGFuZDEwMiBhbmQgMTExMTExMTExICAxMTAxMTExMTEgIC0+ICAxMTAxMTExMTENCi1kZGFuZDEwMyBhbmQgMTExMTExMTExICAxMTEwMTExMTEgIC0+ICAxMTEwMTExMTENCi1kZGFuZDEwNCBhbmQgMTExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTENCi1kZGFuZDEwNSBhbmQgMTExMTExMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTAxMTENCi1kZGFuZDEwNiBhbmQgMTExMTExMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTEwMTENCi1kZGFuZDEwNyBhbmQgMTExMTExMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMDENCi1kZGFuZDEwOCBhbmQgMTExMTExMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTANCi0NCi0tLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCi1kZGFuZDIyMCBhbmQgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIyMSBhbmQgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIyMiBhbmQgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIyMyBhbmQgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIyNCBhbmQgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIyNSBhbmQgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIyNiBhbmQgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIyNyBhbmQgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIyOCBhbmQgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIyOSBhbmQgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIzMCBhbmQgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIzMSBhbmQgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDIzMiBhbmQgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhIGZldyByYW5kb21zDQotZGRhbmQyNDAgYW5kICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNDEgYW5kICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNDIgYW5kIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNDMgYW5kIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNDQgYW5kICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QNCi1kZGFuZDI1MCBhbmQgIDIwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNTEgYW5kICA3MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjUyIGFuZCAgODAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI1MyBhbmQgIDkwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNTQgYW5kICAyMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjU1IGFuZCAgNzAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI1NiBhbmQgIDgwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNTcgYW5kICA5MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjU4IGFuZCAgMTAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI1OSBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNjAgYW5kICAxMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjYxIGFuZCAgMTAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI2MiBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNjMgYW5kICAwMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjY0IGFuZCAgMDAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI2NSBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QtMQ0KLWRkYW5kMjcwIGFuZCAgMDIwMDAwMTAwMDAwMDAwMCAxMDAwMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI3MSBhbmQgIDA3MDAwMDAxMDAwMDAwMDAgMTAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNzIgYW5kICAwODAwMDAwMDEwMDAwMDAwIDEwMDAwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjczIGFuZCAgMDkwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI3NCBhbmQgIDEwMDAwMDAwMDAxMDAwMDAgMDIwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNzUgYW5kICAxMDAwMDAwMDAwMDEwMDAwIDA3MDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjc2IGFuZCAgMTAwMDAwMDAwMDAwMTAwMCAwODAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI3NyBhbmQgIDEwMDAwMDAwMDAwMDAxMDAgMDkwMDAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi1kZGFuZDI4MCBhbmQgIDAwMTAwMDAwMDAwMDAwMDIgMTAwMDAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyODEgYW5kICAwMDAxMDAwMDAwMDAwMDA3IDEwMDAwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjgyIGFuZCAgMDAwMDEwMDAwMDAwMDAwOCAxMDAwMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI4MyBhbmQgIDAwMDAwMTAwMDAwMDAwMDkgMTAwMDEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyODQgYW5kICAxMDAwMDAxMDAwMDAwMDAwIDAwMDEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjg1IGFuZCAgMTAwMDAwMDEwMDAwMDAwMCAwMDEwMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI4NiBhbmQgIDEwMDAwMDAwMTAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyODcgYW5kICAxMDAwMDAwMDAxMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTWlkZGllDQotZGRhbmQyODggYW5kICAwMDEwMDAwMDIwMDAwMDAwIDEwMDAwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjg5IGFuZCAgMDAwMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI5MCBhbmQgIDAwMDAxMDAwODAwMDAwMTAgMTAwMDAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyOTEgYW5kICAwMDAwMDEwMDkwMDAwMTAwIDEwMDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjkyIGFuZCAgMTAwMDAwMTAwMDAwMTAwMCAwMDAwMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI5MyBhbmQgIDEwMDAwMDAxMDAwMTAwMDAgMDAwMDAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyOTQgYW5kICAxMDAwMDAwMDEwMTAwMDAwIDAwMDAwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjk1IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAwMDAwMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzaWducw0KLWRkYW5kMjk2IGFuZCAtMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyOTcgYW5kIC0xMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI5OCBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjk5IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMTAwMDEwMCAtPiAgMTAwMDAwMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UNCi1kZGFuZDMzMSBhbmQgIDIgICA5Ljk5OTk5OTk5RSsxOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzMyIGFuZCAgMyAgIDFFLTE5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzMzMgYW5kICA0ICAgMS4wMDAwMDAwMEUtMTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDMzNCBhbmQgIDUgICAxRS0xMDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzM1IGFuZCAgNiAgIC0xRS0xMDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzMzYgYW5kICA3ICAgLTEuMDAwMDAwMDBFLTE5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDMzNyBhbmQgIDggICAtMUUtMTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzM4IGFuZCAgOSAgIC05Ljk5OTk5OTk5RSsxOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNDEgYW5kICA5Ljk5OTk5OTk5RSsxOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM0MiBhbmQgIDFFLTE5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzQzIGFuZCAgMS4wMDAwMDAwMEUtMTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNDQgYW5kICAxRS0xMDAgICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM0NSBhbmQgIC0xRS0xMDAgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzQ2IGFuZCAgLTEuMDAwMDAwMDBFLTE5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNDcgYW5kICAtMUUtMTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM0OCBhbmQgIC05Ljk5OTk5OTk5RSsxOTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KLWRkYW5kMzYxIGFuZCAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNjIgYW5kICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM2MyBhbmQgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzY0IGFuZCAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNjUgYW5kICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM2NiBhbmQgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzcxIGFuZCAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNzIgYW5kICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM3MyBhbmQgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzc0IGFuZCAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNzUgYW5kICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM3NiBhbmQgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCi1kZGFuZDc4MCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kNzgxIGFuZCAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ3ODIgYW5kIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDc4MyBhbmQgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kNzg0IGFuZCAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ3ODUgYW5kIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDc4NiBhbmQgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kNzg3IGFuZCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ3ODggYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDc4OSBhbmQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kNzkwIGFuZCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ3OTEgYW5kICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDc5MiBhbmQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kNzkzIGFuZCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ3OTQgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZGFuZDgwMCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODAxIGFuZCAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MDIgYW5kICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgwMyBhbmQgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODA0IGFuZCAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MDUgYW5kICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgwNiBhbmQgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODA3IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MDggYW5kIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgwOSBhbmQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODEwIGFuZCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MTEgYW5kIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgxMiBhbmQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODEzIGFuZCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MTQgYW5kICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgxNSBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkYW5kODIxIGFuZCAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MjIgYW5kICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgyMyBhbmQgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODI0IGFuZCAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MjUgYW5kICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgyNiBhbmQgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODI3IGFuZCAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MjggYW5kICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgyOSBhbmQgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODMwIGFuZCAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MzEgYW5kIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgzMiBhbmQgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODMzIGFuZCAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MzQgYW5kICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgzNSBhbmQgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODM2IGFuZCAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MzcgYW5kICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZGFuZDg0MSBhbmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NDIgYW5kICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODQzIGFuZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg0NCBhbmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NDUgYW5kICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODQ2IGFuZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg0NyBhbmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NDggYW5kICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODQ5IGFuZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg1MCBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NTEgYW5kIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODUyIGFuZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg1MyBhbmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NTQgYW5kIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODU1IGFuZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg1NiBhbmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NTcgYW5kICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODU4IGFuZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg1OSBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkYW5kODYxIGFuZCAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NjIgYW5kICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg2MyBhbmQgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODY0IGFuZCAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NjUgYW5kICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg2NiBhbmQgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODY3IGFuZCAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NjggYW5kICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg2OSBhbmQgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODcxIGFuZCAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NzIgYW5kICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg3MyBhbmQgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODc0IGFuZCAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NzUgYW5kICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg3NiBhbmQgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODc3IGFuZCAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NzggYW5kIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg3OSBhbmQgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODgwIGFuZCAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4ODEgYW5kICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg4MiBhbmQgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODgzIGFuZCAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4ODQgYW5kICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg4NSBhbmQgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRBbmQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBBTkQgZm9yIGRlY0RvdWJsZXMgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2RkYW5kMDAxIGFuZCAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAorZGRhbmQwMDIgYW5kICAgICAgICAgICAgIDAgICAgMSAtPiAgICAwCitkZGFuZDAwMyBhbmQgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDAKK2RkYW5kMDA0IGFuZCAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQorZGRhbmQwMDUgYW5kICAgICAgICAgIDExMDAgMTAxMCAtPiAxMDAwCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkYW5kMDA2IGFuZCAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkZGFuZDAwNyBhbmQgMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZGRhbmQwMDggYW5kIDEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RkYW5kMDA5IGFuZCAxMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCitkZGFuZDAxMCBhbmQgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZGRhbmQwMTEgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RkYW5kMDEyIGFuZCAwMTAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkZGFuZDAxMyBhbmQgMDEwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGFuZDAyMSBhbmQgMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQorZGRhbmQwMjQgYW5kIDExMTExMTExMTExMTExMTEgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTEKK2RkYW5kMDI1IGFuZCAxMTExMTExMTExMTExMTExICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExCitkZGFuZDAyNiBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQorZGRhbmQwMjcgYW5kIDExMTExMTExMTExMTExMTEgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTEKK2RkYW5kMDI4IGFuZCAxMTExMTExMTExMTExMTExICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExCitkZGFuZDAyOSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQorZGRhbmQwMzAgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTEKK2RkYW5kMDMxIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExCitkZGFuZDAzMiBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQorZGRhbmQwMzMgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTEKK2RkYW5kMDM0IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExCitkZGFuZDAzNSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQorZGRhbmQwMzYgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTEKK2RkYW5kMDM3IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExCitkZGFuZDAzOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQorZGRhbmQwMzkgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDAKKworZGRhbmQwNDAgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgMTExMTExMTExMTExMTExMQorZGRhbmQwNDEgYW5kICAxMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMQorZGRhbmQwNDIgYW5kICAxMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMQorZGRhbmQwNDMgYW5kICAgMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAxMTExMTExMTExMTExMQorZGRhbmQwNDQgYW5kICAgIDExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgMTExMTExMTExMTExMQorZGRhbmQwNDUgYW5kICAgICAxMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgIDExMTExMTExMTExMQorZGRhbmQwNDYgYW5kICAgICAgMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAxMTExMTExMTExMQorZGRhbmQwNDcgYW5kICAgICAgIDExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgMTExMTExMTExMQorZGRhbmQwNDggYW5kICAgICAgICAxMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgIDExMTExMTExMQorZGRhbmQwNDkgYW5kICAgICAgICAgMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAxMTExMTExMQorZGRhbmQwNTAgYW5kICAgICAgICAgIDExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgMTExMTExMQorZGRhbmQwNTEgYW5kICAgICAgICAgICAxMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgIDExMTExMQorZGRhbmQwNTIgYW5kICAgICAgICAgICAgMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAxMTExMQorZGRhbmQwNTMgYW5kICAgICAgICAgICAgIDExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgMTExMQorZGRhbmQwNTQgYW5kICAgICAgICAgICAgICAxMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgIDExMQorZGRhbmQwNTUgYW5kICAgICAgICAgICAgICAgMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAxMQorZGRhbmQwNTYgYW5kICAgICAgICAgICAgICAgIDEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgMQorZGRhbmQwNTcgYW5kICAgICAgICAgICAgICAgIDAgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgMAorCitkZGFuZDE1MCBhbmQgMTExMTExMTExMSAgMSAgLT4gIDEKK2RkYW5kMTUxIGFuZCAgMTExMTExMTExICAxICAtPiAgMQorZGRhbmQxNTIgYW5kICAgMTExMTExMTEgIDEgIC0+ICAxCitkZGFuZDE1MyBhbmQgICAgMTExMTExMSAgMSAgLT4gIDEKK2RkYW5kMTU0IGFuZCAgICAgMTExMTExICAxICAtPiAgMQorZGRhbmQxNTUgYW5kICAgICAgMTExMTEgIDEgIC0+ICAxCitkZGFuZDE1NiBhbmQgICAgICAgMTExMSAgMSAgLT4gIDEKK2RkYW5kMTU3IGFuZCAgICAgICAgMTExICAxICAtPiAgMQorZGRhbmQxNTggYW5kICAgICAgICAgMTEgIDEgIC0+ICAxCitkZGFuZDE1OSBhbmQgICAgICAgICAgMSAgMSAgLT4gIDEKKworZGRhbmQxNjAgYW5kIDExMTExMTExMTEgIDAgIC0+ICAwCitkZGFuZDE2MSBhbmQgIDExMTExMTExMSAgMCAgLT4gIDAKK2RkYW5kMTYyIGFuZCAgIDExMTExMTExICAwICAtPiAgMAorZGRhbmQxNjMgYW5kICAgIDExMTExMTEgIDAgIC0+ICAwCitkZGFuZDE2NCBhbmQgICAgIDExMTExMSAgMCAgLT4gIDAKK2RkYW5kMTY1IGFuZCAgICAgIDExMTExICAwICAtPiAgMAorZGRhbmQxNjYgYW5kICAgICAgIDExMTEgIDAgIC0+ICAwCitkZGFuZDE2NyBhbmQgICAgICAgIDExMSAgMCAgLT4gIDAKK2RkYW5kMTY4IGFuZCAgICAgICAgIDExICAwICAtPiAgMAorZGRhbmQxNjkgYW5kICAgICAgICAgIDEgIDAgIC0+ICAwCisKK2RkYW5kMTcwIGFuZCAxICAxMTExMTExMTExICAtPiAgMQorZGRhbmQxNzEgYW5kIDEgICAxMTExMTExMTEgIC0+ICAxCitkZGFuZDE3MiBhbmQgMSAgICAxMTExMTExMSAgLT4gIDEKK2RkYW5kMTczIGFuZCAxICAgICAxMTExMTExICAtPiAgMQorZGRhbmQxNzQgYW5kIDEgICAgICAxMTExMTEgIC0+ICAxCitkZGFuZDE3NSBhbmQgMSAgICAgICAxMTExMSAgLT4gIDEKK2RkYW5kMTc2IGFuZCAxICAgICAgICAxMTExICAtPiAgMQorZGRhbmQxNzcgYW5kIDEgICAgICAgICAxMTEgIC0+ICAxCitkZGFuZDE3OCBhbmQgMSAgICAgICAgICAxMSAgLT4gIDEKK2RkYW5kMTc5IGFuZCAxICAgICAgICAgICAxICAtPiAgMQorCitkZGFuZDE4MCBhbmQgMCAgMTExMTExMTExMSAgLT4gIDAKK2RkYW5kMTgxIGFuZCAwICAgMTExMTExMTExICAtPiAgMAorZGRhbmQxODIgYW5kIDAgICAgMTExMTExMTEgIC0+ICAwCitkZGFuZDE4MyBhbmQgMCAgICAgMTExMTExMSAgLT4gIDAKK2RkYW5kMTg0IGFuZCAwICAgICAgMTExMTExICAtPiAgMAorZGRhbmQxODUgYW5kIDAgICAgICAgMTExMTEgIC0+ICAwCitkZGFuZDE4NiBhbmQgMCAgICAgICAgMTExMSAgLT4gIDAKK2RkYW5kMTg3IGFuZCAwICAgICAgICAgMTExICAtPiAgMAorZGRhbmQxODggYW5kIDAgICAgICAgICAgMTEgIC0+ICAwCitkZGFuZDE4OSBhbmQgMCAgICAgICAgICAgMSAgLT4gIDAKKworZGRhbmQwOTAgYW5kIDAxMTExMTExMSAgMTExMTExMTExICAtPiAgIDExMTExMTExCitkZGFuZDA5MSBhbmQgMTAxMTExMTExICAxMTExMTExMTEgIC0+ICAxMDExMTExMTEKK2RkYW5kMDkyIGFuZCAxMTAxMTExMTEgIDExMTExMTExMSAgLT4gIDExMDExMTExMQorZGRhbmQwOTMgYW5kIDExMTAxMTExMSAgMTExMTExMTExICAtPiAgMTExMDExMTExCitkZGFuZDA5NCBhbmQgMTExMTAxMTExICAxMTExMTExMTEgIC0+ICAxMTExMDExMTEKK2RkYW5kMDk1IGFuZCAxMTExMTAxMTEgIDExMTExMTExMSAgLT4gIDExMTExMDExMQorZGRhbmQwOTYgYW5kIDExMTExMTAxMSAgMTExMTExMTExICAtPiAgMTExMTExMDExCitkZGFuZDA5NyBhbmQgMTExMTExMTAxICAxMTExMTExMTEgIC0+ICAxMTExMTExMDEKK2RkYW5kMDk4IGFuZCAxMTExMTExMTAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAorCitkZGFuZDEwMCBhbmQgMTExMTExMTExICAwMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2RkYW5kMTAxIGFuZCAxMTExMTExMTEgIDEwMTExMTExMSAgLT4gIDEwMTExMTExMQorZGRhbmQxMDIgYW5kIDExMTExMTExMSAgMTEwMTExMTExICAtPiAgMTEwMTExMTExCitkZGFuZDEwMyBhbmQgMTExMTExMTExICAxMTEwMTExMTEgIC0+ICAxMTEwMTExMTEKK2RkYW5kMTA0IGFuZCAxMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorZGRhbmQxMDUgYW5kIDExMTExMTExMSAgMTExMTEwMTExICAtPiAgMTExMTEwMTExCitkZGFuZDEwNiBhbmQgMTExMTExMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTEwMTEKK2RkYW5kMTA3IGFuZCAxMTExMTExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTEwMQorZGRhbmQxMDggYW5kIDExMTExMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTEwCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworZGRhbmQyMjAgYW5kIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyMSBhbmQgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjIyIGFuZCA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjMgYW5kIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyNCBhbmQgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjI1IGFuZCAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjYgYW5kIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyNyBhbmQgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjI4IGFuZCA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjkgYW5kIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIzMCBhbmQgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjMxIGFuZCA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMzIgYW5kIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitkZGFuZDI0MCBhbmQgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjQxIGFuZCAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNDIgYW5kIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI0MyBhbmQgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjQ0IGFuZCAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2RkYW5kMjUwIGFuZCAgMjAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjUxIGFuZCAgNzAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjUyIGFuZCAgODAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjUzIGFuZCAgOTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjU0IGFuZCAgMjAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjU1IGFuZCAgNzAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjU2IGFuZCAgODAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjU3IGFuZCAgOTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjU4IGFuZCAgMTAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjU5IGFuZCAgMTAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjYwIGFuZCAgMTAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjYxIGFuZCAgMTAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjYyIGFuZCAgMDAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjYzIGFuZCAgMDAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjY0IGFuZCAgMDAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjY1IGFuZCAgMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2RkYW5kMjcwIGFuZCAgMDIwMDAwMTAwMDAwMDAwMCAxMDAwMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjcxIGFuZCAgMDcwMDAwMDEwMDAwMDAwMCAxMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjcyIGFuZCAgMDgwMDAwMDAxMDAwMDAwMCAxMDAwMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjczIGFuZCAgMDkwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjc0IGFuZCAgMTAwMDAwMDAwMDEwMDAwMCAwMjAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjc1IGFuZCAgMTAwMDAwMDAwMDAxMDAwMCAwNzAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjc2IGFuZCAgMTAwMDAwMDAwMDAwMTAwMCAwODAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjc3IGFuZCAgMTAwMDAwMDAwMDAwMDEwMCAwOTAwMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitkZGFuZDI4MCBhbmQgIDAwMTAwMDAwMDAwMDAwMDIgMTAwMDAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI4MSBhbmQgIDAwMDEwMDAwMDAwMDAwMDcgMTAwMDAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI4MiBhbmQgIDAwMDAxMDAwMDAwMDAwMDggMTAwMDAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI4MyBhbmQgIDAwMDAwMTAwMDAwMDAwMDkgMTAwMDEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI4NCBhbmQgIDEwMDAwMDEwMDAwMDAwMDAgMDAwMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI4NSBhbmQgIDEwMDAwMDAxMDAwMDAwMDAgMDAxMDAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI4NiBhbmQgIDEwMDAwMDAwMTAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI4NyBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgMTAwMDAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorZGRhbmQyODggYW5kICAwMDEwMDAwMDIwMDAwMDAwIDEwMDAwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODkgYW5kICAwMDAxMDAwMDcwMDAwMDAxIDEwMDAwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyOTAgYW5kICAwMDAwMTAwMDgwMDAwMDEwIDEwMDAwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyOTEgYW5kICAwMDAwMDEwMDkwMDAwMTAwIDEwMDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyOTIgYW5kICAxMDAwMDAxMDAwMDAxMDAwIDAwMDAwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyOTMgYW5kICAxMDAwMDAwMTAwMDEwMDAwIDAwMDAwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyOTQgYW5kICAxMDAwMDAwMDEwMTAwMDAwIDAwMDAwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyOTUgYW5kICAxMDAwMDAwMDAxMDAwMDAwIDAwMDAwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2RkYW5kMjk2IGFuZCAtMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI5NyBhbmQgLTEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyOTggYW5kICAxMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjk5IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMTAwMDEwMCAtPiAgMTAwMDAwMAorCistLSBObWF4LCBObWluLCBOdGlueS1saWtlCitkZGFuZDMzMSBhbmQgIDIgICA5Ljk5OTk5OTk5RSsxOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzMzIgYW5kICAzICAgMUUtMTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzMzIGFuZCAgNCAgIDEuMDAwMDAwMDBFLTE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDMzNCBhbmQgIDUgICAxRS0xMDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzMzUgYW5kICA2ICAgLTFFLTEwMCAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzM2IGFuZCAgNyAgIC0xLjAwMDAwMDAwRS0xOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDMzNyBhbmQgIDggICAtMUUtMTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzMzggYW5kICA5ICAgLTkuOTk5OTk5OTlFKzE5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzQxIGFuZCAgOS45OTk5OTk5OUUrMTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0MiBhbmQgIDFFLTE5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDMgYW5kICAxLjAwMDAwMDAwRS0xOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzQ0IGFuZCAgMUUtMTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0NSBhbmQgIC0xRS0xMDAgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDYgYW5kICAtMS4wMDAwMDAwMEUtMTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzQ3IGFuZCAgLTFFLTE5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0OCBhbmQgIC05Ljk5OTk5OTk5RSsxOTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2RkYW5kMzYxIGFuZCAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM2MiBhbmQgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNjMgYW5kICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzY0IGFuZCAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM2NSBhbmQgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNjYgYW5kICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzcxIGFuZCAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM3MiBhbmQgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNzMgYW5kICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzc0IGFuZCAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM3NSBhbmQgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNzYgYW5kICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorZGRhbmQ3ODAgYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzgxIGFuZCAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4MiBhbmQgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODMgYW5kIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzg0IGFuZCAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4NSBhbmQgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODYgYW5kIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzg3IGFuZCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4OCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODkgYW5kIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzkwIGFuZCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc5MSBhbmQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3OTIgYW5kICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzkzIGFuZCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc5NCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZGFuZDgwMCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDEgYW5kICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODAyIGFuZCAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwMyBhbmQgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDQgYW5kICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODA1IGFuZCAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwNiBhbmQgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDcgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODA4IGFuZCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwOSBhbmQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MTAgYW5kIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODExIGFuZCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgxMiBhbmQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MTMgYW5kICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODE0IGFuZCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgxNSBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZGFuZDgyMSBhbmQgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MjIgYW5kICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODIzIGFuZCAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyNCBhbmQgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MjUgYW5kICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODI2IGFuZCAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyNyBhbmQgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MjggYW5kICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODI5IGFuZCAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgzMCBhbmQgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzEgYW5kIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODMyIGFuZCAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgzMyBhbmQgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzQgYW5kICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODM1IGFuZCAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgzNiBhbmQgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzcgYW5kICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRhbmQ4NDEgYW5kICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NDIgYW5kICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NDMgYW5kICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NDQgYW5kICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NDUgYW5kICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NDYgYW5kICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NDcgYW5kICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NDggYW5kICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NDkgYW5kICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NTAgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NTEgYW5kIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NTIgYW5kIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NTMgYW5kIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NTQgYW5kIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NTUgYW5kICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NTYgYW5kICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NTcgYW5kICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NTggYW5kICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NTkgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGFuZDg2MSBhbmQgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NjIgYW5kICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODYzIGFuZCAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2NCBhbmQgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NjUgYW5kICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODY2IGFuZCAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2NyBhbmQgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NjggYW5kICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODY5IGFuZCAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3MSBhbmQgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzIgYW5kICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODczIGFuZCAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3NCBhbmQgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzUgYW5kICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODc2IGFuZCAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3NyBhbmQgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzggYW5kIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODc5IGFuZCAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg4MCBhbmQgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4ODEgYW5kICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODgyIGFuZCAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg4MyBhbmQgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4ODQgYW5kICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODg1IGFuZCAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRCYXNlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRCYXNlLmRlY1Rlc3QKaW5kZXggZmJkNmNjZC4uNDBmZWJmOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQmFzZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEJhc2UuZGVjVGVzdApAQCAtMSwxMTA0ICsxLDExMDQgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkQmFzZS5kZWNUZXN0IC0tIGJhc2UgZGVjRG91YmxlIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIGZpbGUgdGVzdHMgYmFzZSBjb252ZXJzaW9ucyBmcm9tIHN0cmluZyB0byBhIGRlY2ltYWwgbnVtYmVyDQotLS0gYW5kIGJhY2sgdG8gYSBzdHJpbmcgKGluIFNjaWVudGlmaWMgZm9ybSkNCi0NCi0tLSBOb3RlIHRoYXQgdW5saWtlIG90aGVyIG9wZXJhdGlvbnMgdGhlIG9wZXJhbmQgaXMgc3ViamVjdCB0byByb3VuZGluZw0KLS0tIHRvIGNvbmZvcm0gdG8gZW1heCBhbmQgcHJlY2lzaW9uIHNldHRpbmdzICh0aGF0IGlzLCBudW1iZXJzIHdpbGwNCi0tLSBjb25mb3JtIHRvIHJ1bGVzIGFuZCBleHBvbmVudCB3aWxsIGJlIGluIHBlcm1pdHRlZCByYW5nZSkuICBUaGUNCi0tLSAnbGVmdCBoYW5kIHNpZGUnLCB0aGVyZWZvcmUsIG1heSBoYXZlIG51bWJlcnMgdGhhdCBjYW5ub3QgYmUNCi0tLSByZXByZXNlbnRlZCBpbiBhIGRlY0RvdWJsZS4gIFNvbWUgdGVzdGNhc2VzIGdvIHRvIHRoZSBsaW1pdCBvZiB0aGUNCi0tLSBuZXh0LXdpZGVyIGZvcm1hdCwgYW5kIGhlbmNlIHRoZXNlIHRlc3RjYXNlcyBtYXkgYWxzbyBiZSB1c2VkIHRvDQotLS0gdGVzdCBuYXJyb3dpbmcgYW5kIHdpZGVuaW5nIG9wZXJhdGlvbnMuDQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kZGJhczAwMSB0b1NjaSAgICAgICAwIC0+IDANCi1kZGJhczAwMiB0b1NjaSAgICAgICAxIC0+IDENCi1kZGJhczAwMyB0b1NjaSAgICAgMS4wIC0+IDEuMA0KLWRkYmFzMDA0IHRvU2NpICAgIDEuMDAgLT4gMS4wMA0KLWRkYmFzMDA1IHRvU2NpICAgICAgMTAgLT4gMTANCi1kZGJhczAwNiB0b1NjaSAgICAxMDAwIC0+IDEwMDANCi1kZGJhczAwNyB0b1NjaSAgICAxMC4wIC0+IDEwLjANCi1kZGJhczAwOCB0b1NjaSAgICAxMC4xIC0+IDEwLjENCi1kZGJhczAwOSB0b1NjaSAgICAxMC40IC0+IDEwLjQNCi1kZGJhczAxMCB0b1NjaSAgICAxMC41IC0+IDEwLjUNCi1kZGJhczAxMSB0b1NjaSAgICAxMC42IC0+IDEwLjYNCi1kZGJhczAxMiB0b1NjaSAgICAxMC45IC0+IDEwLjkNCi1kZGJhczAxMyB0b1NjaSAgICAxMS4wIC0+IDExLjANCi1kZGJhczAxNCB0b1NjaSAgMS4yMzQgLT4gMS4yMzQNCi1kZGJhczAxNSB0b1NjaSAgMC4xMjMgLT4gMC4xMjMNCi1kZGJhczAxNiB0b1NjaSAgMC4wMTIgLT4gMC4wMTINCi1kZGJhczAxNyB0b1NjaSAgLTAgICAgLT4gLTANCi1kZGJhczAxOCB0b1NjaSAgLTAuMCAgLT4gLTAuMA0KLWRkYmFzMDE5IHRvU2NpIC0wMC4wMCAtPiAtMC4wMA0KLQ0KLWRkYmFzMDIxIHRvU2NpICAgICAtMSAtPiAtMQ0KLWRkYmFzMDIyIHRvU2NpICAgLTEuMCAtPiAtMS4wDQotZGRiYXMwMjMgdG9TY2kgICAtMC4xIC0+IC0wLjENCi1kZGJhczAyNCB0b1NjaSAgIC05LjEgLT4gLTkuMQ0KLWRkYmFzMDI1IHRvU2NpICAgLTkuMTEgLT4gLTkuMTENCi1kZGJhczAyNiB0b1NjaSAgIC05LjExOSAtPiAtOS4xMTkNCi1kZGJhczAyNyB0b1NjaSAgIC05Ljk5OSAtPiAtOS45OTkNCi0NCi1kZGJhczAzMCB0b1NjaSAgJzEyMzQ1Njc4OS4xMjM0NTYnICAgLT4gJzEyMzQ1Njc4OS4xMjM0NTYnDQotZGRiYXMwMzEgdG9TY2kgICcxMjM0NTY3ODkuMDAwMDAwJyAgIC0+ICcxMjM0NTY3ODkuMDAwMDAwJw0KLWRkYmFzMDMyIHRvU2NpICAgJzEyMzQ1Njc4OTEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5MTIzNDU2Jw0KLWRkYmFzMDMzIHRvU2NpICAgJzAuMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMTIzNDU2Nzg5Jw0KLWRkYmFzMDM0IHRvU2NpICAnMC4wMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMDEyMzQ1Njc4OScNCi1kZGJhczAzNSB0b1NjaSAnMC4wMDAwMDAxMjM0NTY3ODknICAgLT4gJzEuMjM0NTY3ODlFLTcnDQotZGRiYXMwMzYgdG9TY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OScgIC0+ICcxLjIzNDU2Nzg5RS04Jw0KLQ0KLWRkYmFzMDM3IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NCcgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDQnDQotZGRiYXMwMzggdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NScNCi0NCi0tLSB0ZXN0IGZpbml0ZSBib3VuZHMgKE5lZ3Mgb2YsIHRoZW4gMCwgTnRpbnksIE5taW4sIG90aGVyLCBObWF4KQ0KLWRkYnNuMDAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRic24wMDIgdG9TY2kgLTFFLTM4MyAtPiAtMUUtMzgzDQotZGRic24wMDMgdG9TY2kgLTFFLTM5OCAtPiAtMUUtMzk4IFN1Ym5vcm1hbA0KLWRkYnNuMDA0IHRvU2NpIC0wIC0+IC0wDQotZGRic24wMDUgdG9TY2kgKzAgLT4gIDANCi1kZGJzbjAwNiB0b1NjaSArMUUtMzk4IC0+ICAxRS0zOTggU3Vibm9ybWFsDQotZGRic24wMDcgdG9TY2kgKzFFLTM4MyAtPiAgMUUtMzgzDQotZGRic24wMDggdG9TY2kgKzkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi0NCi0tLSBTdHJpbmcgW21hbnkgbW9yZSBleGFtcGxlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgZWxzZXdoZXJlXQ0KLS0tIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdA0KLWRkYmFzMDQwIHRvU2NpICIxMiIgICAgICAgIC0+ICcxMicNCi1kZGJhczA0MSB0b1NjaSAiLTc2IiAgICAgICAtPiAnLTc2Jw0KLWRkYmFzMDQyIHRvU2NpICIxMi43NiIgICAgIC0+ICcxMi43NicNCi1kZGJhczA0MyB0b1NjaSAiKzEyLjc2IiAgICAtPiAnMTIuNzYnDQotZGRiYXMwNDQgdG9TY2kgIjAxMi43NiIgICAgLT4gJzEyLjc2Jw0KLWRkYmFzMDQ1IHRvU2NpICIrMC4wMDMiICAgIC0+ICcwLjAwMycNCi1kZGJhczA0NiB0b1NjaSAiMTcuIiAgICAgICAtPiAnMTcnDQotZGRiYXMwNDcgdG9TY2kgIi41IiAgICAgICAgLT4gJzAuNScNCi1kZGJhczA0OCB0b1NjaSAiMDQ0IiAgICAgICAtPiAnNDQnDQotZGRiYXMwNDkgdG9TY2kgIjAwNDQiICAgICAgLT4gJzQ0Jw0KLWRkYmFzMDUwIHRvU2NpICIwLjAwMDUiICAgICAgLT4gJzAuMDAwNScNCi1kZGJhczA1MSB0b1NjaSAiMDAuMDAwMDUiICAgIC0+ICcwLjAwMDA1Jw0KLWRkYmFzMDUyIHRvU2NpICIwLjAwMDAwNSIgICAgLT4gJzAuMDAwMDA1Jw0KLWRkYmFzMDUzIHRvU2NpICIwLjAwMDAwNTAiICAgLT4gJzAuMDAwMDA1MCcNCi1kZGJhczA1NCB0b1NjaSAiMC4wMDAwMDA1IiAgIC0+ICc1RS03Jw0KLWRkYmFzMDU1IHRvU2NpICIwLjAwMDAwMDA1IiAgLT4gJzVFLTgnDQotZGRiYXMwNTYgdG9TY2kgIjEyMzQ1Njc4LjU0MzIxMCIgLT4gJzEyMzQ1Njc4LjU0MzIxMCcNCi1kZGJhczA1NyB0b1NjaSAiMjM0NTY3OC41NDMyMTAiIC0+ICcyMzQ1Njc4LjU0MzIxMCcNCi1kZGJhczA1OCB0b1NjaSAiMzQ1Njc4LjU0MzIxMCIgLT4gJzM0NTY3OC41NDMyMTAnDQotZGRiYXMwNTkgdG9TY2kgIjAzNDU2NzguNTQzMjEiIC0+ICczNDU2NzguNTQzMjEnDQotZGRiYXMwNjAgdG9TY2kgIjM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInDQotZGRiYXMwNjEgdG9TY2kgIiszNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KLWRkYmFzMDYyIHRvU2NpICIrMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInDQotZGRiYXMwNjMgdG9TY2kgIiswMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInDQotZGRiYXMwNjQgdG9TY2kgIi0zNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInDQotZGRiYXMwNjUgdG9TY2kgIi0wMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJw0KLWRkYmFzMDY2IHRvU2NpICItMDAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInDQotLS0gZXhhbXBsZXMNCi1kZGJhczA2NyB0b1NjaSAiNUUtNiIgICAgICAgIC0+ICcwLjAwMDAwNScNCi1kZGJhczA2OCB0b1NjaSAiNTBFLTciICAgICAgIC0+ICcwLjAwMDAwNTAnDQotZGRiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycNCi0NCi0tLSBbTm8gZXhvdGljcyBhcyBubyBVbmljb2RlXQ0KLQ0KLS0tIHJvdW5kZWQgd2l0aCBkb3RzIGluIGFsbCAoaW5jbHVkaW5nIGVkZ2UpIHBsYWNlcw0KLWRkYmFzMDcxIHRvU2NpICAuMTIzNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMC4xMjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkwMTIzNDU2MTIzICAtPiAxMi4zNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA3NCB0b1NjaSAgMTIzLjQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEyMy40NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzNC41Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkwMTIzNDU2MTIzICAtPiAxMjM0NS42Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA3NyB0b1NjaSAgMTIzNDU2Ljc4OTAxMjM0NTYxMjMgIC0+IDEyMzQ1Ni43ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MDEyMzQ1NjEyMyAgLT4gMTIzNDU2Ny44OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkwMTIzNDU2MTIzICAtPiAxMjM0NTY3OC45MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA4MCB0b1NjaSAgMTIzNDU2Nzg5LjAxMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OS4wMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkwLjEyMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MC4xMjM0NTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTAxLjIzNDU2MTIzICAtPiAxMjM0NTY3ODkwMS4yMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA4MyB0b1NjaSAgMTIzNDU2Nzg5MDEyLjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAxMi4zNDU2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDg0IHRvU2NpICAxMjM0NTY3ODkwMTIzLjQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEyMy40NTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0LjU2MTIzICAtPiAxMjM0NTY3ODkwMTIzNC41NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA4NiB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1LjYxMjMgIC0+IDEyMzQ1Njc4OTAxMjM0NS42IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDg3IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2LjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYxLjIzICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwODkgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYxMi4zICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMTcgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwOTAgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYxMjMuICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMTggSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gTnVtYmVycyB3aXRoIEUNCi1kZGJhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJw0KLWRkYmFzMTMxIHRvU2NpICIwLjAwMEUtMiIgIC0+ICcwLjAwMDAwJw0KLWRkYmFzMTMyIHRvU2NpICIwLjAwMEUtMyIgIC0+ICcwLjAwMDAwMCcNCi1kZGJhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycNCi1kZGJhczEzNCB0b1NjaSAiMC4wMEUtMiIgICAtPiAnMC4wMDAwJw0KLWRkYmFzMTM1IHRvU2NpICIwLjAwRS0zIiAgIC0+ICcwLjAwMDAwJw0KLWRkYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcNCi1kZGJhczEzNyB0b1NjaSAiMC4wMEUtNSIgICAtPiAnMEUtNycNCi1kZGJhczEzOCB0b1NjaSAiKzBFKzkiICAgICAtPiAnMEUrOScNCi1kZGJhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknDQotZGRiYXMxNDAgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknDQotZGRiYXMxNDEgdG9TY2kgIjFlKzA5IiAgICAgLT4gJzFFKzknDQotZGRiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJw0KLWRkYmFzMTQzIHRvU2NpICIrMUUrMDA5IiAgIC0+ICcxRSs5Jw0KLWRkYmFzMTQ0IHRvU2NpICIwRSs5IiAgICAgIC0+ICcwRSs5Jw0KLWRkYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5Jw0KLWRkYmFzMTQ2IHRvU2NpICIxRSswOSIgICAgIC0+ICcxRSs5Jw0KLWRkYmFzMTQ3IHRvU2NpICIxZSs5MCIgICAgIC0+ICcxRSs5MCcNCi1kZGJhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScNCi1kZGJhczE0OSB0b1NjaSAiMDAwRSs5IiAgICAtPiAnMEUrOScNCi1kZGJhczE1MCB0b1NjaSAiMUU5IiAgICAgICAtPiAnMUUrOScNCi1kZGJhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScNCi1kZGJhczE1MiB0b1NjaSAiMUU5MCIgICAgICAtPiAnMUUrOTAnDQotZGRiYXMxNTMgdG9TY2kgIjFFMDA5IiAgICAgLT4gJzFFKzknDQotZGRiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknDQotZGRiYXMxNTUgdG9TY2kgIjAuMDAwZSswIiAgLT4gJzAuMDAwJw0KLWRkYmFzMTU2IHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnDQotZGRiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknDQotZGRiYXMxNTggdG9TY2kgIjQ0RSs5IiAgICAgLT4gJzQuNEUrMTAnDQotZGRiYXMxNTkgdG9TY2kgIjAuNzNlLTciICAgLT4gJzcuM0UtOCcNCi1kZGJhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScNCi1kZGJhczE2MSB0b1NjaSAiMDBFLTkiICAgICAtPiAnMEUtOScNCi1kZGJhczE2MiB0b1NjaSAiMTBFKzkiICAgICAtPiAnMS4wRSsxMCcNCi1kZGJhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcNCi1kZGJhczE2NCB0b1NjaSAiMTBlKzkwIiAgICAtPiAnMS4wRSs5MScNCi1kZGJhczE2NSB0b1NjaSAiMTBFKzAwOSIgICAtPiAnMS4wRSsxMCcNCi1kZGJhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnDQotZGRiYXMxNjcgdG9TY2kgIjEwMGUrMDkiICAgLT4gJzEuMDBFKzExJw0KLWRkYmFzMTY4IHRvU2NpICIxMDBFKzkwIiAgIC0+ICcxLjAwRSs5MicNCi1kZGJhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnDQotDQotZGRiYXMxNzAgdG9TY2kgIjEuMjY1IiAgICAgLT4gJzEuMjY1Jw0KLWRkYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnDQotZGRiYXMxNzIgdG9TY2kgIjEuMjY1RS04IiAgLT4gJzEuMjY1RS04Jw0KLWRkYmFzMTczIHRvU2NpICIxLjI2NUUtNCIgIC0+ICcwLjAwMDEyNjUnDQotZGRiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1Jw0KLWRkYmFzMTc1IHRvU2NpICIxLjI2NUUtMiIgIC0+ICcwLjAxMjY1Jw0KLWRkYmFzMTc2IHRvU2NpICIxLjI2NUUtMSIgIC0+ICcwLjEyNjUnDQotZGRiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1Jw0KLWRkYmFzMTc4IHRvU2NpICIxLjI2NUUrMSIgIC0+ICcxMi42NScNCi1kZGJhczE3OSB0b1NjaSAiMS4yNjVFKzIiICAtPiAnMTI2LjUnDQotZGRiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnDQotZGRiYXMxODEgdG9TY2kgIjEuMjY1RSs0IiAgLT4gJzEuMjY1RSs0Jw0KLWRkYmFzMTgyIHRvU2NpICIxLjI2NUUrOCIgIC0+ICcxLjI2NUUrOCcNCi1kZGJhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJw0KLQ0KLWRkYmFzMTkwIHRvU2NpICIxMi42NSIgICAgIC0+ICcxMi42NScNCi1kZGJhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5Jw0KLWRkYmFzMTkyIHRvU2NpICIxMi42NUUtOCIgIC0+ICcxLjI2NUUtNycNCi1kZGJhczE5MyB0b1NjaSAiMTIuNjVFLTQiICAtPiAnMC4wMDEyNjUnDQotZGRiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnDQotZGRiYXMxOTUgdG9TY2kgIjEyLjY1RS0yIiAgLT4gJzAuMTI2NScNCi1kZGJhczE5NiB0b1NjaSAiMTIuNjVFLTEiICAtPiAnMS4yNjUnDQotZGRiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1Jw0KLWRkYmFzMTk4IHRvU2NpICIxMi42NUUrMSIgIC0+ICcxMjYuNScNCi1kZGJhczE5OSB0b1NjaSAiMTIuNjVFKzIiICAtPiAnMTI2NScNCi1kZGJhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnDQotZGRiYXMyMDEgdG9TY2kgIjEyLjY1RSs0IiAgLT4gJzEuMjY1RSs1Jw0KLWRkYmFzMjAyIHRvU2NpICIxMi42NUUrOCIgIC0+ICcxLjI2NUUrOScNCi1kZGJhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJw0KLQ0KLWRkYmFzMjEwIHRvU2NpICIxMjYuNSIgICAgIC0+ICcxMjYuNScNCi1kZGJhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4Jw0KLWRkYmFzMjEyIHRvU2NpICIxMjYuNUUtOCIgIC0+ICcwLjAwMDAwMTI2NScNCi1kZGJhczIxMyB0b1NjaSAiMTI2LjVFLTQiICAtPiAnMC4wMTI2NScNCi1kZGJhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1Jw0KLWRkYmFzMjE1IHRvU2NpICIxMjYuNUUtMiIgIC0+ICcxLjI2NScNCi1kZGJhczIxNiB0b1NjaSAiMTI2LjVFLTEiICAtPiAnMTIuNjUnDQotZGRiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41Jw0KLWRkYmFzMjE4IHRvU2NpICIxMjYuNUUrMSIgIC0+ICcxMjY1Jw0KLWRkYmFzMjE5IHRvU2NpICIxMjYuNUUrMiIgIC0+ICcxLjI2NUUrNCcNCi1kZGJhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnDQotZGRiYXMyMjEgdG9TY2kgIjEyNi41RSs0IiAgLT4gJzEuMjY1RSs2Jw0KLWRkYmFzMjIyIHRvU2NpICIxMjYuNUUrOCIgIC0+ICcxLjI2NUUrMTAnDQotZGRiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicNCi0NCi1kZGJhczIzMCB0b1NjaSAiMTI2NSIgICAgIC0+ICcxMjY1Jw0KLWRkYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycNCi1kZGJhczIzMiB0b1NjaSAiMTI2NUUtOCIgIC0+ICcwLjAwMDAxMjY1Jw0KLWRkYmFzMjMzIHRvU2NpICIxMjY1RS00IiAgLT4gJzAuMTI2NScNCi1kZGJhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScNCi1kZGJhczIzNSB0b1NjaSAiMTI2NUUtMiIgIC0+ICcxMi42NScNCi1kZGJhczIzNiB0b1NjaSAiMTI2NUUtMSIgIC0+ICcxMjYuNScNCi1kZGJhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1Jw0KLWRkYmFzMjM4IHRvU2NpICIxMjY1RSsxIiAgLT4gJzEuMjY1RSs0Jw0KLWRkYmFzMjM5IHRvU2NpICIxMjY1RSsyIiAgLT4gJzEuMjY1RSs1Jw0KLWRkYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2Jw0KLWRkYmFzMjQxIHRvU2NpICIxMjY1RSs0IiAgLT4gJzEuMjY1RSs3Jw0KLWRkYmFzMjQyIHRvU2NpICIxMjY1RSs4IiAgLT4gJzEuMjY1RSsxMScNCi1kZGJhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnDQotZGRiYXMyNDQgdG9TY2kgIjEyNjVFLTkiICAtPiAnMC4wMDAwMDEyNjUnDQotZGRiYXMyNDUgdG9TY2kgIjEyNjVFLTEwIiAtPiAnMS4yNjVFLTcnDQotZGRiYXMyNDYgdG9TY2kgIjEyNjVFLTExIiAtPiAnMS4yNjVFLTgnDQotZGRiYXMyNDcgdG9TY2kgIjEyNjVFLTEyIiAtPiAnMS4yNjVFLTknDQotDQotZGRiYXMyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnDQotZGRiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnDQotZGRiYXMyNTIgdG9TY2kgIjAuMTI2NUUtOCIgIC0+ICcxLjI2NUUtOScNCi1kZGJhczI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnDQotZGRiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnDQotZGRiYXMyNTUgdG9TY2kgIjAuMTI2NUUtMiIgIC0+ICcwLjAwMTI2NScNCi1kZGJhczI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnDQotZGRiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnDQotZGRiYXMyNTggdG9TY2kgIjAuMTI2NUUrMSIgIC0+ICcxLjI2NScNCi1kZGJhczI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1Jw0KLWRkYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnDQotZGRiYXMyNjEgdG9TY2kgIjAuMTI2NUUrNCIgIC0+ICcxMjY1Jw0KLWRkYmFzMjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnDQotZGRiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknDQotDQotLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQ0KLWRkYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcNCi1kZGJhczI5MSB0b1NjaSAiLTAuMDAwRS0yIiAgLT4gJy0wLjAwMDAwJw0KLWRkYmFzMjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJw0KLWRkYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnDQotZGRiYXMyOTQgdG9TY2kgIi0wLjAwRS0yIiAgIC0+ICctMC4wMDAwJw0KLWRkYmFzMjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnDQotZGRiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnDQotZGRiYXMyOTcgdG9TY2kgIi0wLjBFLTMiICAgIC0+ICctMC4wMDAwJw0KLWRkYmFzMjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnDQotZGRiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnDQotDQotLS0gRW5naW5lZXJpbmcgbm90YXRpb24gdGVzdHMNCi1kZGJhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMNCi1kZGJhczMwMiAgdG9FbmcgMTBlMTIgIC0+IDEwRSsxMg0KLWRkYmFzMzAzICB0b1NjaSAxMGUxMSAgLT4gMS4wRSsxMg0KLWRkYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMg0KLWRkYmFzMzA1ICB0b1NjaSAxMGUxMCAgLT4gMS4wRSsxMQ0KLWRkYmFzMzA2ICB0b0VuZyAxMGUxMCAgLT4gMTAwRSs5DQotZGRiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwDQotZGRiYXMzMDggIHRvRW5nIDEwZTkgICAtPiAxMEUrOQ0KLWRkYmFzMzA5ICB0b1NjaSAxMGU4ICAgLT4gMS4wRSs5DQotZGRiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkNCi1kZGJhczMxMSAgdG9TY2kgMTBlNyAgIC0+IDEuMEUrOA0KLWRkYmFzMzEyICB0b0VuZyAxMGU3ICAgLT4gMTAwRSs2DQotZGRiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcNCi1kZGJhczMxNCAgdG9FbmcgMTBlNiAgIC0+IDEwRSs2DQotZGRiYXMzMTUgIHRvU2NpIDEwZTUgICAtPiAxLjBFKzYNCi1kZGJhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNg0KLWRkYmFzMzE3ICB0b1NjaSAxMGU0ICAgLT4gMS4wRSs1DQotZGRiYXMzMTggIHRvRW5nIDEwZTQgICAtPiAxMDBFKzMNCi1kZGJhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNA0KLWRkYmFzMzIwICB0b0VuZyAxMGUzICAgLT4gMTBFKzMNCi1kZGJhczMyMSAgdG9TY2kgMTBlMiAgIC0+IDEuMEUrMw0KLWRkYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszDQotZGRiYXMzMjMgIHRvU2NpIDEwZTEgICAtPiAxLjBFKzINCi1kZGJhczMyNCAgdG9FbmcgMTBlMSAgIC0+IDEwMA0KLWRkYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTANCi1kZGJhczMyNiAgdG9FbmcgMTBlMCAgIC0+IDEwDQotZGRiYXMzMjcgIHRvU2NpIDEwZS0xICAtPiAxLjANCi1kZGJhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMA0KLWRkYmFzMzI5ICB0b1NjaSAxMGUtMiAgLT4gMC4xMA0KLWRkYmFzMzMwICB0b0VuZyAxMGUtMiAgLT4gMC4xMA0KLWRkYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTANCi1kZGJhczMzMiAgdG9FbmcgMTBlLTMgIC0+IDAuMDEwDQotZGRiYXMzMzMgIHRvU2NpIDEwZS00ICAtPiAwLjAwMTANCi1kZGJhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMA0KLWRkYmFzMzM1ICB0b1NjaSAxMGUtNSAgLT4gMC4wMDAxMA0KLWRkYmFzMzM2ICB0b0VuZyAxMGUtNSAgLT4gMC4wMDAxMA0KLWRkYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTANCi1kZGJhczMzOCAgdG9FbmcgMTBlLTYgIC0+IDAuMDAwMDEwDQotZGRiYXMzMzkgIHRvU2NpIDEwZS03ICAtPiAwLjAwMDAwMTANCi1kZGJhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMA0KLWRkYmFzMzQxICB0b1NjaSAxMGUtOCAgLT4gMS4wRS03DQotZGRiYXMzNDIgIHRvRW5nIDEwZS04ICAtPiAxMDBFLTkNCi1kZGJhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOA0KLWRkYmFzMzQ0ICB0b0VuZyAxMGUtOSAgLT4gMTBFLTkNCi1kZGJhczM0NSAgdG9TY2kgMTBlLTEwIC0+IDEuMEUtOQ0KLWRkYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05DQotZGRiYXMzNDcgIHRvU2NpIDEwZS0xMSAtPiAxLjBFLTEwDQotZGRiYXMzNDggIHRvRW5nIDEwZS0xMSAtPiAxMDBFLTEyDQotZGRiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExDQotZGRiYXMzNTAgIHRvRW5nIDEwZS0xMiAtPiAxMEUtMTINCi1kZGJhczM1MSAgdG9TY2kgMTBlLTEzIC0+IDEuMEUtMTINCi1kZGJhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTINCi0NCi1kZGJhczM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTINCi1kZGJhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTINCi1kZGJhczM2MyAgdG9TY2kgN0UxMSAgLT4gN0UrMTENCi1kZGJhczM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5DQotZGRiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwDQotZGRiYXMzNjYgIHRvRW5nIDdFMTAgIC0+IDcwRSs5DQotZGRiYXMzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkNCi1kZGJhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQ0KLWRkYmFzMzY5ICB0b1NjaSA3RTggICAtPiA3RSs4DQotZGRiYXMzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNg0KLWRkYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3DQotZGRiYXMzNzIgIHRvRW5nIDdFNyAgIC0+IDcwRSs2DQotZGRiYXMzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYNCi1kZGJhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNg0KLWRkYmFzMzc1ICB0b1NjaSA3RTUgICAtPiA3RSs1DQotZGRiYXMzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMw0KLWRkYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0DQotZGRiYXMzNzggIHRvRW5nIDdFNCAgIC0+IDcwRSszDQotZGRiYXMzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMNCi1kZGJhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMw0KLWRkYmFzMzgxICB0b1NjaSA3RTIgICAtPiA3RSsyDQotZGRiYXMzODIgIHRvRW5nIDdFMiAgIC0+IDcwMA0KLWRkYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxDQotZGRiYXMzODQgIHRvRW5nIDdFMSAgIC0+IDcwDQotZGRiYXMzODUgIHRvU2NpIDdFMCAgIC0+IDcNCi1kZGJhczM4NiAgdG9FbmcgN0UwICAgLT4gNw0KLWRkYmFzMzg3ICB0b1NjaSA3RS0xICAtPiAwLjcNCi1kZGJhczM4OCAgdG9FbmcgN0UtMSAgLT4gMC43DQotZGRiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcNCi1kZGJhczM5MCAgdG9FbmcgN0UtMiAgLT4gMC4wNw0KLWRkYmFzMzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNw0KLWRkYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNw0KLWRkYmFzMzkzICB0b1NjaSA3RS00ICAtPiAwLjAwMDcNCi1kZGJhczM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3DQotZGRiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcNCi1kZGJhczM5NiAgdG9FbmcgN0UtNSAgLT4gMC4wMDAwNw0KLWRkYmFzMzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNw0KLWRkYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNw0KLWRkYmFzMzk5ICB0b1NjaSA3RS03ICAtPiA3RS03DQotZGRiYXM0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQ0KLWRkYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04DQotZGRiYXM0MDIgIHRvRW5nIDdFLTggIC0+IDcwRS05DQotZGRiYXM0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkNCi1kZGJhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQ0KLWRkYmFzNDA1ICB0b1NjaSA3RS0xMCAtPiA3RS0xMA0KLWRkYmFzNDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyDQotZGRiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExDQotZGRiYXM0MDggIHRvRW5nIDdFLTExIC0+IDcwRS0xMg0KLWRkYmFzNDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMg0KLWRkYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMg0KLWRkYmFzNDExICB0b1NjaSA3RS0xMyAtPiA3RS0xMw0KLWRkYmFzNDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1DQotDQotLS0gRXhhY3RzIHJlbWFpbiBleGFjdCB1cCB0byBwcmVjaXNpb24gLi4NCi1yb3VuZGluZzogIGhhbGZfdXANCi1kZGJhczQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMA0KLWRkYmFzNDIxICB0b0VuZyAgICAxMDAgLT4gMTAwDQotZGRiYXM0MjIgIHRvU2NpICAgMTAwMCAtPiAxMDAwDQotZGRiYXM0MjMgIHRvRW5nICAgMTAwMCAtPiAxMDAwDQotZGRiYXM0MjQgIHRvU2NpICA5OTkuOSAtPiAgOTk5LjkNCi1kZGJhczQyNSAgdG9FbmcgIDk5OS45IC0+ICA5OTkuOQ0KLWRkYmFzNDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wDQotZGRiYXM0MjcgIHRvRW5nIDEwMDAuMCAtPiAxMDAwLjANCi1kZGJhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQ0KLWRkYmFzNDI5ICB0b0VuZyAxMDAwLjEgLT4gMTAwMC4xDQotZGRiYXM0MzAgIHRvU2NpIDEwMDAwIC0+IDEwMDAwDQotZGRiYXM0MzEgIHRvRW5nIDEwMDAwIC0+IDEwMDAwDQotZGRiYXM0MzIgIHRvU2NpIDEwMDAwMCAtPiAxMDAwMDANCi1kZGJhczQzMyAgdG9FbmcgMTAwMDAwIC0+IDEwMDAwMA0KLWRkYmFzNDM0ICB0b1NjaSAxMDAwMDAwIC0+IDEwMDAwMDANCi1kZGJhczQzNSAgdG9FbmcgMTAwMDAwMCAtPiAxMDAwMDAwDQotZGRiYXM0MzYgIHRvU2NpIDEwMDAwMDAwIC0+IDEwMDAwMDAwDQotZGRiYXM0MzcgIHRvRW5nIDEwMDAwMDAwIC0+IDEwMDAwMDAwDQotZGRiYXM0MzggIHRvU2NpIDEwMDAwMDAwMCAtPiAxMDAwMDAwMDANCi1kZGJhczQzOSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwDQotZGRiYXM0NDAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgIFJvdW5kZWQNCi1kZGJhczQ0MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZA0KLWRkYmFzNDQyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ0MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDEgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NDQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAzICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDQ1ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMyAgICAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ0NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NDcgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1ICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxNSAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDQ4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwNTAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTcgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ0OSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMTAwLjAwMDAwMDAwMDAwMDFFKzE1ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NTAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA5ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDUxICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwOSAgICAtPiAxMC4wMDAwMDAwMDAwMDAwMUUrMTUgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ1MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZA0KLWRkYmFzNDUzICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkDQotZGRiYXM0NTQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDU1ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDMgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ1NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDA1ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NTcgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwNSAgIC0+IDEwMC4wMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDU4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDkgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ1OSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDA5ICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NjAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQNCi1kZGJhczQ2MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZA0KLWRkYmFzNDYyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMzAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ2MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDMwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NjQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDY1ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ2NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDkwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NjcgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA5MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTkgICBSb3VuZGVkDQotZGRiYXM0NjkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQNCi1kZGJhczQ3MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDMwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE5ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NzEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAzMDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDcyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwNTAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTkgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ3MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NzQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA5MDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOSAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDc1ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwOTAwMCAtPiAxMC4wMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QNCi0NCi0tLSBjaGVjayByb3VuZGluZyBtb2RlcyBoZWVkZWQNCi1yb3VuZGluZzogIGNlaWxpbmcNCi1kZGJzcjQwMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kZGJzcjQwMiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDAzICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MDQgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIHVwDQotZGRic3I0MDUgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZGRic3I0MDYgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQwNyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDA4ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBmbG9vcg0KLWRkYnNyNDEwICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNDExICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MTIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQxMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl9kb3duDQotZGRic3I0MTUgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZGRic3I0MTYgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQxNyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDE4ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MTkgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfZXZlbg0KLWRkYnNyNDIxICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNDIyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MjMgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQyNCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDI1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBkb3duDQotZGRic3I0MjYgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZGRic3I0MjcgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQyOCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDI5ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX3VwDQotZGRic3I0MzEgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZGRic3I0MzIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQzMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDM0ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NyAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MzUgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi0tLSBuZWdhdGl2ZXMNCi1yb3VuZGluZzogIGNlaWxpbmcNCi1kZGJzcjUwMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kZGJzcjUwMiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTAzICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MDQgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIHVwDQotZGRic3I1MDUgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZGRic3I1MDYgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUwNyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTA4ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBmbG9vcg0KLWRkYnNyNTEwICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNTExICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MTIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUxMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl9kb3duDQotZGRic3I1MTUgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZGRic3I1MTYgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUxNyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTE4ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MTkgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfZXZlbg0KLWRkYnNyNTIxICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNTIyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MjMgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUyNCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTI1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBkb3duDQotZGRic3I1MjYgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZGRic3I1MjcgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUyOCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTI5ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX3VwDQotZGRic3I1MzEgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZGRic3I1MzIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUzMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTM0ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NyAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MzUgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi0NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gVGhlICdiYWRkaWVzJyB0ZXN0cyBmcm9tIERpYWdCaWdEZWNpbWFsLCBwbHVzIHNvbWUgbmV3IG9uZXMNCi1kZGJhczUwMCB0b1NjaSAnMS4uMicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUwMiB0b1NjaSAnLi4nICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUwMyB0b1NjaSAnKysxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUwNSB0b1NjaSAnLSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUwNiB0b1NjaSAnKy0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUwOCB0b1NjaSAnMTJlKysnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUwOSB0b1NjaSAnMTJmNCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUxMSB0b1NjaSAnKyAxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUxMiB0b1NjaSAnMTIgJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUxNCB0b1NjaSAnIC0gMSAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUxNSB0b1NjaSAneCcgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUxNyB0b1NjaSAnMTItJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUxOCB0b1NjaSAnMysnICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUyMCB0b1NjaSAnMWUtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUyMSB0b1NjaSAnN2U5OTk5OWEnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUyMyB0b1NjaSAnN2UxMjM1Njc4OTAxMngnICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUyNCB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUyNiB0b1NjaSAnXHUwZTVhJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUyNyB0b1NjaSAnXHUwYjY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUyOSB0b1NjaSAnMS4zNC41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUzMCB0b1NjaSAnLjEyMy41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUzMiB0b1NjaSAnMDEuMzUtJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUzMyB0b1NjaSAnMDAwMC4uJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUzNSB0b1NjaSAnMDAuLjAwJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUzNiB0b1NjaSAnMTExZSoxMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUzOCB0b1NjaSAnMTExZSsxMisnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczUzOSB0b1NjaSAnMTExZTEtMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU0MSB0b1NjaSAnMTExZTFlKzMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU0MiB0b1NjaSAnMWUxLjAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU0NCB0b1NjaSAndGVuJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU0NSB0b1NjaSAnT05FJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU0NyB0b1NjaSAnMWUxLicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU0OCB0b1NjaSAnMWVlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU1MCB0b1NjaSAnMS4yMy40JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU1MSB0b1NjaSAnMS4yLjEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU1MyB0b1NjaSAnMUUrMS4yLjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU1NCB0b1NjaSAnMUUrKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU1NiB0b1NjaSAnMUUrLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU1NyB0b1NjaSAnMUUtKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU1OSB0b1NjaSAiMUUiIjEiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU2MCB0b1NjaSAiMUUiIiIiIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0tLSBOZWFyLXNwZWNpYWxzDQotZGRiYXM1NjEgdG9TY2kgInFOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NjIgdG9TY2kgIk5hTnEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NjQgdG9TY2kgIkluZmkiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NjUgdG9TY2kgIkluZmluIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NjcgdG9TY2kgIkluZmluaXQiICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NjggdG9TY2kgIi1JbmZpbml0IiAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NzAgdG9TY2kgIjlJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NzEgdG9TY2kgIi0wSW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NzMgdG9TY2kgIi1zTmEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NzQgdG9TY2kgInhOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotDQotLS0gc29tZSBiYWRkaWVzIHdpdGggZG90cyBhbmQgRXMgYW5kIGRvdHMgYW5kIHNwZWNpYWxzDQotZGRiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTc3IHRvU2NpICAnLmUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU3OCB0b1NjaSAgJysuZSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTgwIHRvU2NpICAnLS5lJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU4MSB0b1NjaSAgJ0UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTgzIHRvU2NpICAnKy5FKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU4NCB0b1NjaSAgJy0uRSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLWRkYmFzNTg2IHRvU2NpICAnLk5hTicgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1ODggdG9TY2kgICcrLnNOYU4nICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTg5IHRvU2NpICAnKy5JbmYnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotDQotLS0gWmVyb3MNCi1kZGJhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05DQotZGRiYXM2MDIgdG9TY2kgMC4wMDAwMDAwMCAgICAgICAgLT4gMEUtOA0KLWRkYmFzNjAzIHRvU2NpIDAuMDAwMDAwMCAgICAgICAgIC0+IDBFLTcNCi1kZGJhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRkYmFzNjA1IHRvU2NpIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDANCi1kZGJhczYwNiB0b1NjaSAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDANCi1kZGJhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMA0KLWRkYmFzNjA4IHRvU2NpIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDANCi1kZGJhczYwOSB0b1NjaSAwLjAgICAgICAgICAgICAgICAtPiAwLjANCi1kZGJhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjANCi1kZGJhczYxMSB0b1NjaSAwLiAgICAgICAgICAgICAgICAtPiAwDQotZGRiYXM2MTIgdG9TY2kgLS4wICAgICAgICAgICAgICAgLT4gLTAuMA0KLWRkYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wDQotZGRiYXM2MTQgdG9TY2kgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMA0KLWRkYmFzNjE1IHRvU2NpIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwDQotZGRiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwDQotZGRiYXM2MTcgdG9TY2kgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMA0KLWRkYmFzNjE4IHRvU2NpIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwDQotZGRiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwDQotZGRiYXM2MjAgdG9TY2kgLTAuMDAwMDAwMCAgICAgICAgLT4gLTBFLTcNCi1kZGJhczYyMSB0b1NjaSAtMC4wMDAwMDAwMCAgICAgICAtPiAtMEUtOA0KLWRkYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05DQotDQotZGRiYXM2MzAgdG9TY2kgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMA0KLWRkYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMA0KLWRkYmFzNjMyIHRvU2NpICAwLjAwRSsyICAgICAgICAgIC0+IDANCi1kZGJhczYzMyB0b1NjaSAgMC4wMEUrMyAgICAgICAgICAtPiAwRSsxDQotZGRiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMg0KLWRkYmFzNjM1IHRvU2NpICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMNCi1kZGJhczYzNiB0b1NjaSAgMC4wMEUrNiAgICAgICAgICAtPiAwRSs0DQotZGRiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQ0KLWRkYmFzNjM4IHRvU2NpICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYNCi1kZGJhczYzOSB0b1NjaSAgMC4wMEUrOSAgICAgICAgICAtPiAwRSs3DQotDQotZGRiYXM2NDAgdG9TY2kgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wDQotZGRiYXM2NDEgdG9TY2kgIDAuMEUrMSAgICAgICAgICAgLT4gMA0KLWRkYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzENCi1kZGJhczY0MyB0b1NjaSAgMC4wRSszICAgICAgICAgICAtPiAwRSsyDQotZGRiYXM2NDQgdG9TY2kgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMw0KLWRkYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQNCi1kZGJhczY0NiB0b1NjaSAgMC4wRSs2ICAgICAgICAgICAtPiAwRSs1DQotZGRiYXM2NDcgdG9TY2kgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNg0KLWRkYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcNCi1kZGJhczY0OSB0b1NjaSAgMC4wRSs5ICAgICAgICAgICAtPiAwRSs4DQotDQotZGRiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMA0KLWRkYmFzNjUxIHRvU2NpICAwRSsxICAgICAgICAgICAgIC0+IDBFKzENCi1kZGJhczY1MiB0b1NjaSAgMEUrMiAgICAgICAgICAgICAtPiAwRSsyDQotZGRiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMw0KLWRkYmFzNjU0IHRvU2NpICAwRSs0ICAgICAgICAgICAgIC0+IDBFKzQNCi1kZGJhczY1NSB0b1NjaSAgMEUrNSAgICAgICAgICAgICAtPiAwRSs1DQotZGRiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNg0KLWRkYmFzNjU3IHRvU2NpICAwRSs3ICAgICAgICAgICAgIC0+IDBFKzcNCi1kZGJhczY1OCB0b1NjaSAgMEUrOCAgICAgICAgICAgICAtPiAwRSs4DQotZGRiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQ0KLQ0KLWRkYmFzNjYwIHRvU2NpICAwLjBFLTAgICAgICAgICAgIC0+IDAuMA0KLWRkYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDANCi1kZGJhczY2MiB0b1NjaSAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMA0KLWRkYmFzNjYzIHRvU2NpICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMA0KLWRkYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDANCi1kZGJhczY2NSB0b1NjaSAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRkYmFzNjY2IHRvU2NpICAwLjBFLTYgICAgICAgICAgIC0+IDBFLTcNCi1kZGJhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04DQotZGRiYXM2NjggdG9TY2kgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQ0KLWRkYmFzNjY5IHRvU2NpICAwLjBFLTkgICAgICAgICAgIC0+IDBFLTEwDQotDQotZGRiYXM2NzAgdG9TY2kgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMA0KLWRkYmFzNjcxIHRvU2NpICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwDQotZGRiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwDQotZGRiYXM2NzMgdG9TY2kgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMA0KLWRkYmFzNjc0IHRvU2NpICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwDQotZGRiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNw0KLWRkYmFzNjc2IHRvU2NpICAwLjAwRS02ICAgICAgICAgIC0+IDBFLTgNCi1kZGJhczY3NyB0b1NjaSAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05DQotZGRiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTANCi1kZGJhczY3OSB0b1NjaSAgMC4wMEUtOSAgICAgICAgICAtPiAwRS0xMQ0KLQ0KLWRkYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwDQotZGRiYXM2ODEgdG9TY2kgICAwMDAwMC4gICAgICAgICAgLT4gIDANCi1kZGJhczY4MiB0b1NjaSAgICAwMDAwLiAgICAgICAgICAtPiAgMA0KLWRkYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwDQotZGRiYXM2ODQgdG9TY2kgICAgICAwMC4gICAgICAgICAgLT4gIDANCi1kZGJhczY4NSB0b1NjaSAgICAgICAwLiAgICAgICAgICAtPiAgMA0KLWRkYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwDQotZGRiYXM2ODcgdG9TY2kgIC0wMDAwMC4gICAgICAgICAgLT4gLTANCi1kZGJhczY4OCB0b1NjaSAgKzAuICAgICAgICAgICAgICAtPiAgMA0KLWRkYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wDQotDQotLS0gU3BlY2lhbHMNCi1kZGJhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4NCi1kZGJhczcwMSB0b1NjaSAibmFuIiAgICAgICAgICAgICAtPiBOYU4NCi1kZGJhczcwMiB0b1NjaSAibkFuIiAgICAgICAgICAgICAtPiBOYU4NCi1kZGJhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4NCi1kZGJhczcwNCB0b1NjaSAiK05hTiIgICAgICAgICAgICAtPiBOYU4NCi1kZGJhczcwNSB0b1NjaSAiK25hbiIgICAgICAgICAgICAtPiBOYU4NCi1kZGJhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4NCi1kZGJhczcwNyB0b1NjaSAiK05BTiIgICAgICAgICAgICAtPiBOYU4NCi1kZGJhczcwOCB0b1NjaSAiLU5hTiIgICAgICAgICAgICAtPiAtTmFODQotZGRiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTg0KLWRkYmFzNzEwIHRvU2NpICItbkFuIiAgICAgICAgICAgIC0+IC1OYU4NCi1kZGJhczcxMSB0b1NjaSAiLU5BTiIgICAgICAgICAgICAtPiAtTmFODQotZGRiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFODQotZGRiYXM3MTMgdG9TY2kgJ05hTjEnICAgICAgICAgICAgLT4gTmFOMQ0KLWRkYmFzNzE0IHRvU2NpICdOYU4xMicgICAgICAgICAgIC0+IE5hTjEyDQotZGRiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzDQotZGRiYXM3MTYgdG9TY2kgJ05hTjEyMzQnICAgICAgICAgLT4gTmFOMTIzNA0KLWRkYmFzNzE3IHRvU2NpICdOYU4wMScgICAgICAgICAgIC0+IE5hTjENCi1kZGJhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMg0KLWRkYmFzNzE5IHRvU2NpICdOYU4wMTIzJyAgICAgICAgIC0+IE5hTjEyMw0KLWRkYmFzNzIwIHRvU2NpICdOYU4wMTIzNCcgICAgICAgIC0+IE5hTjEyMzQNCi1kZGJhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xDQotZGRiYXM3MjIgdG9TY2kgJ05hTjAwMTInICAgICAgICAgLT4gTmFOMTINCi1kZGJhczcyMyB0b1NjaSAnTmFOMDAxMjMnICAgICAgICAtPiBOYU4xMjMNCi1kZGJhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0DQotZGRiYXM3MjUgdG9TY2kgJ05hTjEyMzQ1Njc4OTAxMjM0NTYnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNzI2IHRvU2NpICdOYU4xMjNlKzEnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNzI4IHRvU2NpICdOYU4tMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNzI5IHRvU2NpICdOYU4rMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLWRkYmFzNzMwIHRvU2NpICJzTmFOIiAgICAgICAgICAgIC0+IHNOYU4NCi1kZGJhczczMSB0b1NjaSAic25hbiIgICAgICAgICAgICAtPiBzTmFODQotZGRiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTg0KLWRkYmFzNzMzIHRvU2NpICJTTkFOIiAgICAgICAgICAgIC0+IHNOYU4NCi1kZGJhczczNCB0b1NjaSAiK3NOYU4iICAgICAgICAgICAtPiBzTmFODQotZGRiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTg0KLWRkYmFzNzM2IHRvU2NpICIrU25BbiIgICAgICAgICAgIC0+IHNOYU4NCi1kZGJhczczNyB0b1NjaSAiK1NOQU4iICAgICAgICAgICAtPiBzTmFODQotZGRiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4NCi1kZGJhczczOSB0b1NjaSAiLXNuYW4iICAgICAgICAgICAtPiAtc05hTg0KLWRkYmFzNzQwIHRvU2NpICItU25BbiIgICAgICAgICAgIC0+IC1zTmFODQotZGRiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4NCi1kZGJhczc0MiB0b1NjaSAnc05hTjAwMDAnICAgICAgICAtPiBzTmFODQotZGRiYXM3NDMgdG9TY2kgJ3NOYU43JyAgICAgICAgICAgLT4gc05hTjcNCi1kZGJhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNA0KLWRkYmFzNzQ1IHRvU2NpICdzTmFONzIzNDU2MTIzNDU2Nzg5MCcgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM3NDYgdG9TY2kgJ3NOYU43Mi40NScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotDQotZGRiYXM3NDggdG9TY2kgIkluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzNzUwIHRvU2NpICJpTmYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NTEgdG9TY2kgIklORiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzNzUzIHRvU2NpICIraW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NTQgdG9TY2kgIitpTmYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzNzU2IHRvU2NpICItSW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWRkYmFzNzU3IHRvU2NpICItaW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWRkYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWRkYmFzNzU5IHRvU2NpICItSU5GIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLQ0KLWRkYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NjEgdG9TY2kgImluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc2MiB0b1NjaSAiaU5mSW5JdFkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NjQgdG9TY2kgIitJbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc2NSB0b1NjaSAiK2luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NjcgdG9TY2kgIitJTkZJTklUWSIgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc2OCB0b1NjaSAiLUluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkNCi1kZGJhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkNCi1kZGJhczc3MCB0b1NjaSAiLWlOZkluSXRZIiAgICAgICAtPiAtSW5maW5pdHkNCi1kZGJhczc3MSB0b1NjaSAiLUlORklOSVRZIiAgICAgICAtPiAtSW5maW5pdHkNCi0NCi0tLSBTcGVjaWFscyBhbmQgemVyb3MgZm9yIHRvRW5nDQotZGRiYXN0NzcyIHRvRW5nICJOYU4iICAgICAgICAgICAgICAtPiBOYU4NCi1kZGJhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQ0KLWRkYmFzdDc3NCB0b0VuZyAiLXNOYU4iICAgICAgICAgICAgLT4gLXNOYU4NCi1kZGJhc3Q3NzUgdG9FbmcgIi1OYU4iICAgICAgICAgICAgIC0+IC1OYU4NCi1kZGJhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXN0Nzc4IHRvRW5nICIrc05hTiIgICAgICAgICAgICAtPiBzTmFODQotZGRiYXN0Nzc5IHRvRW5nICIrTmFOIiAgICAgICAgICAgICAtPiBOYU4NCi1kZGJhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXN0NzgxIHRvRW5nICJTTkFOIiAgICAgICAgICAgICAtPiBzTmFODQotZGRiYXN0NzgyIHRvRW5nICJOQU4iICAgICAgICAgICAgICAtPiBOYU4NCi1kZGJhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXN0Nzg0IHRvRW5nICJzbmFuIiAgICAgICAgICAgICAtPiBzTmFODQotZGRiYXN0Nzg1IHRvRW5nICJuYW4iICAgICAgICAgICAgICAtPiBOYU4NCi1kZGJhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXN0Nzg3IHRvRW5nICJTbkFOIiAgICAgICAgICAgICAtPiBzTmFODQotZGRiYXN0Nzg4IHRvRW5nICJuQU4iICAgICAgICAgICAgICAtPiBOYU4NCi1kZGJhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXN0NzkwIHRvRW5nICJzTmFuIiAgICAgICAgICAgICAtPiBzTmFODQotZGRiYXN0NzkxIHRvRW5nICJOYW4iICAgICAgICAgICAgICAtPiBOYU4NCi1kZGJhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXN0NzkzIHRvRW5nICJzTmFOIiAgICAgICAgICAgICAtPiBzTmFODQotDQotLS0gWmVybyB0b0VuZywgZXRjLg0KLWRkYmFzdDgwMCB0b0VuZyAwZSsxICAgICAgICAgICAgICAtPiAiMC4wMEUrMyIgIC0tIGRvYyBleGFtcGxlDQotDQotZGRiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkNCi1kZGJhc3Q4MDIgdG9FbmcgMC4wMDAwMDAwMCAgICAgICAgLT4gMC4wMEUtNg0KLWRkYmFzdDgwMyB0b0VuZyAwLjAwMDAwMDAgICAgICAgICAtPiAwLjBFLTYNCi1kZGJhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDANCi1kZGJhc3Q4MDUgdG9FbmcgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMA0KLWRkYmFzdDgwNiB0b0VuZyAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDANCi1kZGJhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDANCi1kZGJhc3Q4MDggdG9FbmcgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMA0KLWRkYmFzdDgwOSB0b0VuZyAwLjAgICAgICAgICAgICAgICAtPiAwLjANCi1kZGJhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZGRiYXN0ODExIHRvRW5nIDAuICAgICAgICAgICAgICAgIC0+IDANCi1kZGJhc3Q4MTIgdG9FbmcgLS4wICAgICAgICAgICAgICAgLT4gLTAuMA0KLWRkYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMA0KLWRkYmFzdDgxNCB0b0VuZyAtMC4wICAgICAgICAgICAgICAtPiAtMC4wDQotZGRiYXN0ODE1IHRvRW5nIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwDQotZGRiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMA0KLWRkYmFzdDgxNyB0b0VuZyAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwDQotZGRiYXN0ODE4IHRvRW5nIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwDQotZGRiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMA0KLWRkYmFzdDgyMCB0b0VuZyAtMC4wMDAwMDAwICAgICAgICAtPiAtMC4wRS02DQotZGRiYXN0ODIxIHRvRW5nIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wLjAwRS02DQotZGRiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05DQotDQotZGRiYXN0ODMwIHRvRW5nICAwLjAwRSswICAgICAgICAgIC0+IDAuMDANCi1kZGJhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wDQotZGRiYXN0ODMyIHRvRW5nICAwLjAwRSsyICAgICAgICAgIC0+IDANCi1kZGJhc3Q4MzMgdG9FbmcgIDAuMDBFKzMgICAgICAgICAgLT4gMC4wMEUrMw0KLWRkYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMNCi1kZGJhc3Q4MzUgdG9FbmcgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMw0KLWRkYmFzdDgzNiB0b0VuZyAgMC4wMEUrNiAgICAgICAgICAtPiAwLjAwRSs2DQotZGRiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNg0KLWRkYmFzdDgzOCB0b0VuZyAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2DQotZGRiYXN0ODM5IHRvRW5nICAwLjAwRSs5ICAgICAgICAgIC0+IDAuMDBFKzkNCi0NCi1kZGJhc3Q4NDAgdG9FbmcgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wDQotZGRiYXN0ODQxIHRvRW5nICAwLjBFKzEgICAgICAgICAgIC0+IDANCi1kZGJhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMw0KLWRkYmFzdDg0MyB0b0VuZyAgMC4wRSszICAgICAgICAgICAtPiAwLjBFKzMNCi1kZGJhc3Q4NDQgdG9FbmcgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMw0KLWRkYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2DQotZGRiYXN0ODQ2IHRvRW5nICAwLjBFKzYgICAgICAgICAgIC0+IDAuMEUrNg0KLWRkYmFzdDg0NyB0b0VuZyAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2DQotZGRiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkNCi1kZGJhc3Q4NDkgdG9FbmcgIDAuMEUrOSAgICAgICAgICAgLT4gMC4wRSs5DQotDQotZGRiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDANCi1kZGJhc3Q4NTEgdG9FbmcgIDBFKzEgICAgICAgICAgICAgLT4gMC4wMEUrMw0KLWRkYmFzdDg1MiB0b0VuZyAgMEUrMiAgICAgICAgICAgICAtPiAwLjBFKzMNCi1kZGJhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMw0KLWRkYmFzdDg1NCB0b0VuZyAgMEUrNCAgICAgICAgICAgICAtPiAwLjAwRSs2DQotZGRiYXN0ODU1IHRvRW5nICAwRSs1ICAgICAgICAgICAgIC0+IDAuMEUrNg0KLWRkYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2DQotZGRiYXN0ODU3IHRvRW5nICAwRSs3ICAgICAgICAgICAgIC0+IDAuMDBFKzkNCi1kZGJhc3Q4NTggdG9FbmcgIDBFKzggICAgICAgICAgICAgLT4gMC4wRSs5DQotZGRiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkNCi0NCi1kZGJhc3Q4NjAgdG9FbmcgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wDQotZGRiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDANCi1kZGJhc3Q4NjIgdG9FbmcgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDANCi1kZGJhc3Q4NjMgdG9FbmcgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwDQotZGRiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDANCi1kZGJhc3Q4NjUgdG9FbmcgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDANCi1kZGJhc3Q4NjYgdG9FbmcgIDAuMEUtNiAgICAgICAgICAgLT4gMC4wRS02DQotZGRiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYNCi1kZGJhc3Q4NjggdG9FbmcgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQ0KLWRkYmFzdDg2OSB0b0VuZyAgMC4wRS05ICAgICAgICAgICAtPiAwLjBFLTkNCi0NCi1kZGJhc3Q4NzAgdG9FbmcgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMA0KLWRkYmFzdDg3MSB0b0VuZyAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMA0KLWRkYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDANCi1kZGJhc3Q4NzMgdG9FbmcgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMA0KLWRkYmFzdDg3NCB0b0VuZyAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRkYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYNCi1kZGJhc3Q4NzYgdG9FbmcgIDAuMDBFLTYgICAgICAgICAgLT4gMC4wMEUtNg0KLWRkYmFzdDg3NyB0b0VuZyAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05DQotZGRiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQ0KLWRkYmFzdDg3OSB0b0VuZyAgMC4wMEUtOSAgICAgICAgICAtPiAwLjAwRS05DQotDQotLS0gbG9uZyBpbnB1dCBzdHJpbmdzDQotZGRiYXM4MDEgdG9zY2kgJzAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MDIgdG9zY2kgJzAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODAzIHRvc2NpICcwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MDQgdG9zY2kgJzAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MDUgdG9zY2kgJzAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODA2IHRvc2NpICcwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MDcgdG9zY2kgJzAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MDggdG9zY2kgJzAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODA5IHRvc2NpICcwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MTAgdG9zY2kgJzAwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQotDQotZGRiYXM4MTEgdG9zY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4xMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MTIgdG9zY2kgJzAuMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGJhczgxMyB0b3NjaSAnMC4wMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MTQgdG9zY2kgJzAuMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MTUgdG9zY2kgJzAuMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGJhczgxNiB0b3NjaSAnMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MTcgdG9zY2kgJzAuMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTcNCi1kZGJhczgxOCB0b3NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTgNCi1kZGJhczgxOSB0b3NjaSAnMC4wMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS05DQotZGRiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTEwDQotDQotZGRiYXM4MjEgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwJyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMTkgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM4MjIgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMScgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIwIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzODIzIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyJyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjEgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM4MjQgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzJyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjIgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM4MjUgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIzIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzODI2IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjQgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM4MjcgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjUgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM4MjggdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NycgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzODI5IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzDQotZGRiYXM5MDYgdG9TY2kgJzk5ZTk5OTk5OTk5OScgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTA3IHRvU2NpICc5OTllOTk5OTk5OTk5JyAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkwOCB0b1NjaSAnMC45ZS05OTk5OTk5OTknICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiYXM5MTAgdG9TY2kgJzAuMWUxMDAwMDAwMDAwJyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTExIHRvU2NpICcxMGUtMTAwMDAwMDAwMCcgICAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiYXM5MTIgdG9TY2kgJzAuOWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTEzIHRvU2NpICc5OWUtOTk5OTk5OTk5OScgICAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiYXM5MTQgdG9TY2kgJzExMWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiYXM5MTYgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTk5JyAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJhczkxNyB0b1NjaSAnN2UxMDAwMDAwMDAwJyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotLS0gbmVnYXRpdmVzIHRoZSBzYW1lDQotZGRiYXM5MTggdG9TY2kgJy05OWU5OTk5OTk5OTknICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkxOSB0b1NjaSAnLTk5OWU5OTk5OTk5OTknICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTIwIHRvU2NpICctMC45ZS05OTk5OTk5OTknICAgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzOTIxIHRvU2NpICctMC4wOWUtOTk5OTk5OTk5JyAgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzOTIyIHRvU2NpICctMC4xZTEwMDAwMDAwMDAnICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM5MjMgdG9TY2kgJy0xMGUtMTAwMDAwMDAwMCcgICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiYXM5MjQgdG9TY2kgJy0wLjllOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkyNSB0b1NjaSAnLTk5ZS05OTk5OTk5OTk5JyAgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTI3IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OScgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzOTI4IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OTknIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzOTI5IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gb3ZlcmZsb3cgcmVzdWx0cyBhdCBkaWZmZXJlbnQgcm91bmRpbmcgbW9kZXMNCi1yb3VuZGluZzogIGNlaWxpbmcNCi1kZGJhczkzMCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTMxIHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogIHVwDQotZGRiYXM5MzIgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkzMyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgZG93bg0KLWRkYmFzOTM0IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkzNSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICBmbG9vcg0KLWRkYmFzOTM2IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkzNyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgaGFsZl91cA0KLWRkYmFzOTM4IHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM5MzkgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogIGhhbGZfZXZlbg0KLWRkYmFzOTQwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM5NDEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogIGhhbGZfZG93bg0KLWRkYmFzOTQyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM5NDMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogIGhhbGZfZXZlbg0KLQ0KLS0tIE5vdyBjaGVjayA4NTQvNzU0ciBzb21lIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdyB0byAwDQotZGRiZW00MDAgdG9TY2kgIDEuMDAwMEUtMzgzICAgICAtPiAxLjAwMDBFLTM4Mw0KLWRkYmVtNDAxIHRvU2NpICAwLjFFLTM5NCAgICAgICAgLT4gMUUtMzk1ICAgICAgIFN1Ym5vcm1hbA0KLWRkYmVtNDAyIHRvU2NpICAwLjEwMDBFLTM5NCAgICAgLT4gMS4wMDBFLTM5NSAgIFN1Ym5vcm1hbA0KLWRkYmVtNDAzIHRvU2NpICAwLjAxMDBFLTM5NCAgICAgLT4gMS4wMEUtMzk2ICAgIFN1Ym5vcm1hbA0KLWRkYmVtNDA0IHRvU2NpICAwLjAwMTBFLTM5NCAgICAgLT4gMS4wRS0zOTcgICAgIFN1Ym5vcm1hbA0KLWRkYmVtNDA1IHRvU2NpICAwLjAwMDFFLTM5NCAgICAgLT4gMUUtMzk4ICAgICAgIFN1Ym5vcm1hbA0KLWRkYmVtNDA2IHRvU2NpICAwLjAwMDEwRS0zOTQgICAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRkYmVtNDA3IHRvU2NpICAwLjAwMDEzRS0zOTQgICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDA4IHRvU2NpICAwLjAwMDE1RS0zOTQgICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDA5IHRvU2NpICAwLjAwMDE3RS0zOTQgICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDEwIHRvU2NpICAwLjAwMDIzRS0zOTQgICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDExIHRvU2NpICAwLjAwMDI1RS0zOTQgICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDEyIHRvU2NpICAwLjAwMDI3RS0zOTQgICAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtMzk0ICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDE0IHRvU2NpICAwLjAwMDE1MEUtMzk0ICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDE1IHRvU2NpICAwLjAwMDE1MUUtMzk0ICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtMzk0ICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDE3IHRvU2NpICAwLjAwMDI1MEUtMzk0ICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDE4IHRvU2NpICAwLjAwMDI1MUUtMzk0ICAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDE5IHRvU2NpICAwLjAwMDA5RS0zOTQgICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDIwIHRvU2NpICAwLjAwMDA1RS0zOTQgICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiZW00MjEgdG9TY2kgIDAuMDAwMDNFLTM5NCAgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTM5NCAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmVtNDIzIHRvU2NpICAwLjAwMDAwNUUtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiZW00MjQgdG9TY2kgIDAuMDAwMDAzRS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi1kZGJlbTQyNSB0b1NjaSAgMC4wMDEwNDlFLTM5NCAgIC0+IDEuMEUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQyNiB0b1NjaSAgMC4wMDEwNTBFLTM5NCAgIC0+IDEuMEUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQyNyB0b1NjaSAgMC4wMDEwNTFFLTM5NCAgIC0+IDEuMUUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQyOCB0b1NjaSAgMC4wMDExNDlFLTM5NCAgIC0+IDEuMUUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQyOSB0b1NjaSAgMC4wMDExNTBFLTM5NCAgIC0+IDEuMkUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQzMCB0b1NjaSAgMC4wMDExNTFFLTM5NCAgIC0+IDEuMkUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGJlbTQzMiB0b1NjaSAgMC4wMTAwNDlFLTM5NCAgIC0+IDEuMDBFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQzMyB0b1NjaSAgMC4wMTAwNTBFLTM5NCAgIC0+IDEuMDBFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQzNCB0b1NjaSAgMC4wMTAwNTFFLTM5NCAgIC0+IDEuMDFFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQzNSB0b1NjaSAgMC4wMTAxNDlFLTM5NCAgIC0+IDEuMDFFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQzNiB0b1NjaSAgMC4wMTAxNTBFLTM5NCAgIC0+IDEuMDJFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQzNyB0b1NjaSAgMC4wMTAxNTFFLTM5NCAgIC0+IDEuMDJFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGJlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtMzk0ICAgIC0+IDEuMDEwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ0MSB0b1NjaSAgMC4xMDEwNUUtMzk0ICAgIC0+IDEuMDEwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ0MiB0b1NjaSAgMC4xMDEwN0UtMzk0ICAgIC0+IDEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ0MyB0b1NjaSAgMC4xMDExM0UtMzk0ICAgIC0+IDEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ0NCB0b1NjaSAgMC4xMDExNUUtMzk0ICAgIC0+IDEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ0NSB0b1NjaSAgMC4xMDExN0UtMzk0ICAgIC0+IDEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGJlbTQ1MCB0b1NjaSAgMS4xMDczMEUtMzk1ICAgLT4gMS4xMDdFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDUxIHRvU2NpICAxLjEwNzUwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NTIgdG9TY2kgIDEuMTA3NzBFLTM5NSAgIC0+IDEuMTA4RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ1MyB0b1NjaSAgMS4xMDgzMEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDU0IHRvU2NpICAxLjEwODUwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NTUgdG9TY2kgIDEuMTA4NzBFLTM5NSAgIC0+IDEuMTA5RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBtYWtlIHN1cmUgc2lnbiBPSw0KLWRkYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtMzk0ICAgLT4gLTEuMDEwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ1NyB0b1NjaSAgLTAuMTAxMDVFLTM5NCAgIC0+IC0xLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NTggdG9TY2kgIC0wLjEwMTA3RS0zOTQgICAtPiAtMS4wMTFFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtMzk0ICAgLT4gLTEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ2MCB0b1NjaSAgLTAuMTAxMTVFLTM5NCAgIC0+IC0xLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NjEgdG9TY2kgIC0wLjEwMTE3RS0zOTQgICAtPiAtMS4wMTJFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tICc5OTlzJyBjYXNlcw0KLWRkYmVtNDY0IHRvU2NpICA5OTk5OTlFLTM5NSAgICAgICAgIC0+IDkuOTk5OTlFLTM5MCBTdWJub3JtYWwNCi1kZGJlbTQ2NSB0b1NjaSAgOTk5OTkuMEUtMzk0ICAgICAgICAtPiA5Ljk5OTkwRS0zOTAgU3Vibm9ybWFsDQotZGRiZW00NjYgdG9TY2kgIDk5OTk5LkUtMzk0ICAgICAgICAgLT4gOS45OTk5RS0zOTAgIFN1Ym5vcm1hbA0KLWRkYmVtNDY3IHRvU2NpICA5OTk5LjlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkxICBTdWJub3JtYWwNCi1kZGJlbTQ2OCB0b1NjaSAgOTk5Ljk5RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MiAgU3Vibm9ybWFsDQotZGRiZW00NjkgdG9TY2kgIDk5Ljk5OUUtMzk0ICAgICAgICAgLT4gOS45OTk5RS0zOTMgIFN1Ym5vcm1hbA0KLWRkYmVtNDcwIHRvU2NpICA5Ljk5OTlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzk0ICBTdWJub3JtYWwNCi1kZGJlbTQ3MSB0b1NjaSAgMC45OTk5OUUtMzk0ICAgICAgICAtPiAxLjAwMDBFLTM5NCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtMzk0ICAgICAgIC0+IDEuMDAwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ3MyB0b1NjaSAgMC4wMDk5OTk5RS0zOTQgICAgICAtPiAxLjAwRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NzQgdG9TY2kgIDAuMDAwOTk5OTlFLTM5NCAgICAgLT4gMS4wRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtMzk0ICAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ3NiB0b1NjaSAgMC4wMDAwMDk5OTk5RS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJlbTQ3NyB0b1NjaSAgMC4wMDAwMDA5OTk5OUUtMzk0ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTM5NCAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MNCi1kZGJhczEwMDEgdG9TY2kgIDFlOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMTAwMiB0b1NjaSAgMWUwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczEwMDQgdG9TY2kgIDFlMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMTAwNSB0b1NjaSAgMWUwMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczEwMDcgdG9TY2kgIDFlLTk5OTk5OTk5OSAtPiAwRS0zOTggICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzMTAwOCB0b1NjaSAgMWUtMDk5OTk5OTk5OSAtPiAwRS0zOTggICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiYXMxMDA5IHRvU2NpICAxZS0wMDk5OTk5OTk5OSAtPiAwRS0zOTggICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJhczEwMTAgdG9TY2kgIDFlLTAwMDk5OTk5OTk5OSAtPiAwRS0zOTggICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzMTAxMSB0b1NjaSAgMWUtMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiYXMxMDEyIHRvU2NpICAxZS0wMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscw0KLWRkYmFzMTA0MSB0b1NjaSAgICAgMS4xMTExMTExMTExMTUyNDQ0RS0zODQgLT4gIDEuMTExMTExMTExMTE1MjRFLTM4NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkYmFzMTA0MiB0b1NjaSAgICAgMS4xMTExMTExMTExMTUyNDQ1RS0zODQgLT4gIDEuMTExMTExMTExMTE1MjRFLTM4NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkYmFzMTA0MyB0b1NjaSAgICAgMS4xMTExMTExMTExMTUyNDQ2RS0zODQgLT4gIDEuMTExMTExMTExMTE1MjRFLTM4NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLQ0KLS0tIGNsYW1wZWQgbGFyZ2Ugbm9ybWFscw0KLWRkYmFzMTA3MCB0b1NjaSAgIDFFKzM2OSAgLT4gIDFFKzM2OQ0KLWRkYmFzMTA3MSB0b1NjaSAgIDFFKzM3MCAgLT4gIDEuMEUrMzcwICBDbGFtcGVkDQotZGRiYXMxMDcyIHRvU2NpICAgMUUrMzc4ICAtPiAgMS4wMDAwMDAwMDBFKzM3OCAgQ2xhbXBlZA0KLWRkYmFzMTA3MyB0b1NjaSAgIDFFKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQNCi1kZGJhczEwNzQgdG9TY2kgICAxRSszODUgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSBjbGFtcGVkIHplcm9zIFtzZWUgYWxzbyBjbGFtcC5kZWNUZXN0XQ0KLWRkYmFzMTA3NSB0b1NjaSAgIDBlKzEwMDAwICAtPiAgMEUrMzY5ICBDbGFtcGVkDQotZGRiYXMxMDc2IHRvU2NpICAgMGUtMTAwMDAgIC0+ICAwRS0zOTggIENsYW1wZWQNCi1kZGJhczEwNzcgdG9TY2kgIC0wZSsxMDAwMCAgLT4gLTBFKzM2OSAgQ2xhbXBlZA0KLWRkYmFzMTA3OCB0b1NjaSAgLTBlLTEwMDAwICAtPiAtMEUtMzk4ICBDbGFtcGVkDQotDQotLS0gZXh0cmVtZSB2YWx1ZXMgZnJvbSBuZXh0LXdpZGVyDQotZGRiYXMxMTAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczExMDIgdG9TY2kgLTFFLTYxNDMgLT4gLTBFLTM5OCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZGRiYXMxMTAzIHRvU2NpIC0xRS02MTc2IC0+IC0wRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRkYmFzMTEwNCB0b1NjaSAtMCAtPiAtMA0KLWRkYmFzMTEwNSB0b1NjaSArMCAtPiAgMA0KLWRkYmFzMTEwNiB0b1NjaSArMUUtNjE3NiAtPiAgMEUtMzk4IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1kZGJhczExMDcgdG9TY2kgKzFFLTYxNzMgLT4gIDBFLTM5OCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZGRiYXMxMTA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQmFzZS5kZWNUZXN0IC0tIGJhc2UgZGVjRG91YmxlIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcgorLS0gYW5kIGJhY2sgdG8gYSBzdHJpbmcgKGluIFNjaWVudGlmaWMgZm9ybSkKKworLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcKKy0tIHRvIGNvbmZvcm0gdG8gZW1heCBhbmQgcHJlY2lzaW9uIHNldHRpbmdzICh0aGF0IGlzLCBudW1iZXJzIHdpbGwKKy0tIGNvbmZvcm0gdG8gcnVsZXMgYW5kIGV4cG9uZW50IHdpbGwgYmUgaW4gcGVybWl0dGVkIHJhbmdlKS4gIFRoZQorLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlCistLSByZXByZXNlbnRlZCBpbiBhIGRlY0RvdWJsZS4gIFNvbWUgdGVzdGNhc2VzIGdvIHRvIHRoZSBsaW1pdCBvZiB0aGUKKy0tIG5leHQtd2lkZXIgZm9ybWF0LCBhbmQgaGVuY2UgdGhlc2UgdGVzdGNhc2VzIG1heSBhbHNvIGJlIHVzZWQgdG8KKy0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLgorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwCitkZGJhczAwMiB0b1NjaSAgICAgICAxIC0+IDEKK2RkYmFzMDAzIHRvU2NpICAgICAxLjAgLT4gMS4wCitkZGJhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDAKK2RkYmFzMDA1IHRvU2NpICAgICAgMTAgLT4gMTAKK2RkYmFzMDA2IHRvU2NpICAgIDEwMDAgLT4gMTAwMAorZGRiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wCitkZGJhczAwOCB0b1NjaSAgICAxMC4xIC0+IDEwLjEKK2RkYmFzMDA5IHRvU2NpICAgIDEwLjQgLT4gMTAuNAorZGRiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41CitkZGJhczAxMSB0b1NjaSAgICAxMC42IC0+IDEwLjYKK2RkYmFzMDEyIHRvU2NpICAgIDEwLjkgLT4gMTAuOQorZGRiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wCitkZGJhczAxNCB0b1NjaSAgMS4yMzQgLT4gMS4yMzQKK2RkYmFzMDE1IHRvU2NpICAwLjEyMyAtPiAwLjEyMworZGRiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyCitkZGJhczAxNyB0b1NjaSAgLTAgICAgLT4gLTAKK2RkYmFzMDE4IHRvU2NpICAtMC4wICAtPiAtMC4wCitkZGJhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDAKKworZGRiYXMwMjEgdG9TY2kgICAgIC0xIC0+IC0xCitkZGJhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMAorZGRiYXMwMjMgdG9TY2kgICAtMC4xIC0+IC0wLjEKK2RkYmFzMDI0IHRvU2NpICAgLTkuMSAtPiAtOS4xCitkZGJhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExCitkZGJhczAyNiB0b1NjaSAgIC05LjExOSAtPiAtOS4xMTkKK2RkYmFzMDI3IHRvU2NpICAgLTkuOTk5IC0+IC05Ljk5OQorCitkZGJhczAzMCB0b1NjaSAgJzEyMzQ1Njc4OS4xMjM0NTYnICAgLT4gJzEyMzQ1Njc4OS4xMjM0NTYnCitkZGJhczAzMSB0b1NjaSAgJzEyMzQ1Njc4OS4wMDAwMDAnICAgLT4gJzEyMzQ1Njc4OS4wMDAwMDAnCitkZGJhczAzMiB0b1NjaSAgICcxMjM0NTY3ODkxMjM0NTYnICAgLT4gJzEyMzQ1Njc4OTEyMzQ1NicKK2RkYmFzMDMzIHRvU2NpICAgJzAuMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMTIzNDU2Nzg5JworZGRiYXMwMzQgdG9TY2kgICcwLjAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcwLjAwMDAwMTIzNDU2Nzg5JworZGRiYXMwMzUgdG9TY2kgJzAuMDAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcxLjIzNDU2Nzg5RS03JworZGRiYXMwMzYgdG9TY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OScgIC0+ICcxLjIzNDU2Nzg5RS04JworCitkZGJhczAzNyB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDQnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ0JworZGRiYXMwMzggdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NScKKworLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkKK2RkYnNuMDAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGJzbjAwMiB0b1NjaSAtMUUtMzgzIC0+IC0xRS0zODMKK2RkYnNuMDAzIHRvU2NpIC0xRS0zOTggLT4gLTFFLTM5OCBTdWJub3JtYWwKK2RkYnNuMDA0IHRvU2NpIC0wIC0+IC0wCitkZGJzbjAwNSB0b1NjaSArMCAtPiAgMAorZGRic24wMDYgdG9TY2kgKzFFLTM5OCAtPiAgMUUtMzk4IFN1Ym5vcm1hbAorZGRic24wMDcgdG9TY2kgKzFFLTM4MyAtPiAgMUUtMzgzCitkZGJzbjAwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorCistLSBTdHJpbmcgW21hbnkgbW9yZSBleGFtcGxlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgZWxzZXdoZXJlXQorLS0gc3RyaW5ncyB3aXRob3V0IEUgY2Fubm90IGdlbmVyYXRlIEUgaW4gcmVzdWx0CitkZGJhczA0MCB0b1NjaSAiMTIiICAgICAgICAtPiAnMTInCitkZGJhczA0MSB0b1NjaSAiLTc2IiAgICAgICAtPiAnLTc2JworZGRiYXMwNDIgdG9TY2kgIjEyLjc2IiAgICAgLT4gJzEyLjc2JworZGRiYXMwNDMgdG9TY2kgIisxMi43NiIgICAgLT4gJzEyLjc2JworZGRiYXMwNDQgdG9TY2kgIjAxMi43NiIgICAgLT4gJzEyLjc2JworZGRiYXMwNDUgdG9TY2kgIiswLjAwMyIgICAgLT4gJzAuMDAzJworZGRiYXMwNDYgdG9TY2kgIjE3LiIgICAgICAgLT4gJzE3JworZGRiYXMwNDcgdG9TY2kgIi41IiAgICAgICAgLT4gJzAuNScKK2RkYmFzMDQ4IHRvU2NpICIwNDQiICAgICAgIC0+ICc0NCcKK2RkYmFzMDQ5IHRvU2NpICIwMDQ0IiAgICAgIC0+ICc0NCcKK2RkYmFzMDUwIHRvU2NpICIwLjAwMDUiICAgICAgLT4gJzAuMDAwNScKK2RkYmFzMDUxIHRvU2NpICIwMC4wMDAwNSIgICAgLT4gJzAuMDAwMDUnCitkZGJhczA1MiB0b1NjaSAiMC4wMDAwMDUiICAgIC0+ICcwLjAwMDAwNScKK2RkYmFzMDUzIHRvU2NpICIwLjAwMDAwNTAiICAgLT4gJzAuMDAwMDA1MCcKK2RkYmFzMDU0IHRvU2NpICIwLjAwMDAwMDUiICAgLT4gJzVFLTcnCitkZGJhczA1NSB0b1NjaSAiMC4wMDAwMDAwNSIgIC0+ICc1RS04JworZGRiYXMwNTYgdG9TY2kgIjEyMzQ1Njc4LjU0MzIxMCIgLT4gJzEyMzQ1Njc4LjU0MzIxMCcKK2RkYmFzMDU3IHRvU2NpICIyMzQ1Njc4LjU0MzIxMCIgLT4gJzIzNDU2NzguNTQzMjEwJworZGRiYXMwNTggdG9TY2kgIjM0NTY3OC41NDMyMTAiIC0+ICczNDU2NzguNTQzMjEwJworZGRiYXMwNTkgdG9TY2kgIjAzNDU2NzguNTQzMjEiIC0+ICczNDU2NzguNTQzMjEnCitkZGJhczA2MCB0b1NjaSAiMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RkYmFzMDYxIHRvU2NpICIrMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RkYmFzMDYyIHRvU2NpICIrMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkZGJhczA2MyB0b1NjaSAiKzAwMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RkYmFzMDY0IHRvU2NpICItMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworZGRiYXMwNjUgdG9TY2kgIi0wMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworZGRiYXMwNjYgdG9TY2kgIi0wMDM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicKKy0tIGV4YW1wbGVzCitkZGJhczA2NyB0b1NjaSAiNUUtNiIgICAgICAgIC0+ICcwLjAwMDAwNScKK2RkYmFzMDY4IHRvU2NpICI1MEUtNyIgICAgICAgLT4gJzAuMDAwMDA1MCcKK2RkYmFzMDY5IHRvU2NpICI1RS03IiAgICAgICAgLT4gJzVFLTcnCisKKy0tIFtObyBleG90aWNzIGFzIG5vIFVuaWNvZGVdCisKKy0tIHJvdW5kZWQgd2l0aCBkb3RzIGluIGFsbCAoaW5jbHVkaW5nIGVkZ2UpIHBsYWNlcworZGRiYXMwNzEgdG9TY2kgIC4xMjM0NTY3ODkwMTIzNDU2MTIzICAtPiAwLjEyMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA3MiB0b1NjaSAgMS4yMzQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEuMjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkwMTIzNDU2MTIzICAtPiAxMi4zNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDc0IHRvU2NpICAxMjMuNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzLjQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA3NSB0b1NjaSAgMTIzNC41Njc4OTAxMjM0NTYxMjMgIC0+IDEyMzQuNTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkwMTIzNDU2MTIzICAtPiAxMjM0NS42Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDc3IHRvU2NpICAxMjM0NTYuNzg5MDEyMzQ1NjEyMyAgLT4gMTIzNDU2Ljc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA3OCB0b1NjaSAgMTIzNDU2Ny44OTAxMjM0NTYxMjMgIC0+IDEyMzQ1NjcuODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkwMTIzNDU2MTIzICAtPiAxMjM0NTY3OC45MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDgwIHRvU2NpICAxMjM0NTY3ODkuMDEyMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5LjAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4MSB0b1NjaSAgMTIzNDU2Nzg5MC4xMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAuMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTAxLjIzNDU2MTIzICAtPiAxMjM0NTY3ODkwMS4yMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDgzIHRvU2NpICAxMjM0NTY3ODkwMTIuMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEyLjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4NCB0b1NjaSAgMTIzNDU2Nzg5MDEyMy40NTYxMjMgIC0+IDEyMzQ1Njc4OTAxMjMuNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0LjU2MTIzICAtPiAxMjM0NTY3ODkwMTIzNC41NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDg2IHRvU2NpICAxMjM0NTY3ODkwMTIzNDUuNjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1LjYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4NyB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1Ni4xMjMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYxLjIzICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4OSB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1NjEyLjMgIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSsxNyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDkwIHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MTIzLiAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE4IEluZXhhY3QgUm91bmRlZAorCisKKy0tIE51bWJlcnMgd2l0aCBFCitkZGJhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZGRiYXMxMzEgdG9TY2kgIjAuMDAwRS0yIiAgLT4gJzAuMDAwMDAnCitkZGJhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnCitkZGJhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycKK2RkYmFzMTM0IHRvU2NpICIwLjAwRS0yIiAgIC0+ICcwLjAwMDAnCitkZGJhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcKK2RkYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcKK2RkYmFzMTM3IHRvU2NpICIwLjAwRS01IiAgIC0+ICcwRS03JworZGRiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknCitkZGJhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknCitkZGJhczE0MCB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScKK2RkYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5JworZGRiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJworZGRiYXMxNDMgdG9TY2kgIisxRSswMDkiICAgLT4gJzFFKzknCitkZGJhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScKK2RkYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworZGRiYXMxNDYgdG9TY2kgIjFFKzA5IiAgICAgLT4gJzFFKzknCitkZGJhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnCitkZGJhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScKK2RkYmFzMTQ5IHRvU2NpICIwMDBFKzkiICAgIC0+ICcwRSs5JworZGRiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknCitkZGJhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScKK2RkYmFzMTUyIHRvU2NpICIxRTkwIiAgICAgIC0+ICcxRSs5MCcKK2RkYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5JworZGRiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknCitkZGJhczE1NSB0b1NjaSAiMC4wMDBlKzAiICAtPiAnMC4wMDAnCitkZGJhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZGRiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknCitkZGJhczE1OCB0b1NjaSAiNDRFKzkiICAgICAtPiAnNC40RSsxMCcKK2RkYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnCitkZGJhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScKK2RkYmFzMTYxIHRvU2NpICIwMEUtOSIgICAgIC0+ICcwRS05JworZGRiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnCitkZGJhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcKK2RkYmFzMTY0IHRvU2NpICIxMGUrOTAiICAgIC0+ICcxLjBFKzkxJworZGRiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnCitkZGJhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnCitkZGJhczE2NyB0b1NjaSAiMTAwZSswOSIgICAtPiAnMS4wMEUrMTEnCitkZGJhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInCitkZGJhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnCisKK2RkYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScKK2RkYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnCitkZGJhczE3MiB0b1NjaSAiMS4yNjVFLTgiICAtPiAnMS4yNjVFLTgnCitkZGJhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1JworZGRiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1JworZGRiYXMxNzUgdG9TY2kgIjEuMjY1RS0yIiAgLT4gJzAuMDEyNjUnCitkZGJhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1JworZGRiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1JworZGRiYXMxNzggdG9TY2kgIjEuMjY1RSsxIiAgLT4gJzEyLjY1JworZGRiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41JworZGRiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnCitkZGJhczE4MSB0b1NjaSAiMS4yNjVFKzQiICAtPiAnMS4yNjVFKzQnCitkZGJhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnCitkZGJhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJworCitkZGJhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnCitkZGJhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5JworZGRiYXMxOTIgdG9TY2kgIjEyLjY1RS04IiAgLT4gJzEuMjY1RS03JworZGRiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1JworZGRiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnCitkZGJhczE5NSB0b1NjaSAiMTIuNjVFLTIiICAtPiAnMC4xMjY1JworZGRiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1JworZGRiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1JworZGRiYXMxOTggdG9TY2kgIjEyLjY1RSsxIiAgLT4gJzEyNi41JworZGRiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnCitkZGJhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnCitkZGJhczIwMSB0b1NjaSAiMTIuNjVFKzQiICAtPiAnMS4yNjVFKzUnCitkZGJhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknCitkZGJhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJworCitkZGJhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnCitkZGJhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4JworZGRiYXMyMTIgdG9TY2kgIjEyNi41RS04IiAgLT4gJzAuMDAwMDAxMjY1JworZGRiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnCitkZGJhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1JworZGRiYXMyMTUgdG9TY2kgIjEyNi41RS0yIiAgLT4gJzEuMjY1JworZGRiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1JworZGRiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41JworZGRiYXMyMTggdG9TY2kgIjEyNi41RSsxIiAgLT4gJzEyNjUnCitkZGJhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnCitkZGJhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnCitkZGJhczIyMSB0b1NjaSAiMTI2LjVFKzQiICAtPiAnMS4yNjVFKzYnCitkZGJhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJworZGRiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicKKworZGRiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScKK2RkYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycKK2RkYmFzMjMyIHRvU2NpICIxMjY1RS04IiAgLT4gJzAuMDAwMDEyNjUnCitkZGJhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnCitkZGJhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScKK2RkYmFzMjM1IHRvU2NpICIxMjY1RS0yIiAgLT4gJzEyLjY1JworZGRiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnCitkZGJhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1JworZGRiYXMyMzggdG9TY2kgIjEyNjVFKzEiICAtPiAnMS4yNjVFKzQnCitkZGJhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScKK2RkYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2JworZGRiYXMyNDEgdG9TY2kgIjEyNjVFKzQiICAtPiAnMS4yNjVFKzcnCitkZGJhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnCitkZGJhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnCitkZGJhczI0NCB0b1NjaSAiMTI2NUUtOSIgIC0+ICcwLjAwMDAwMTI2NScKK2RkYmFzMjQ1IHRvU2NpICIxMjY1RS0xMCIgLT4gJzEuMjY1RS03JworZGRiYXMyNDYgdG9TY2kgIjEyNjVFLTExIiAtPiAnMS4yNjVFLTgnCitkZGJhczI0NyB0b1NjaSAiMTI2NUUtMTIiIC0+ICcxLjI2NUUtOScKKworZGRiYXMyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnCitkZGJhczI1MSB0b1NjaSAiMC4xMjY1RS0yMCIgLT4gJzEuMjY1RS0yMScKK2RkYmFzMjUyIHRvU2NpICIwLjEyNjVFLTgiICAtPiAnMS4yNjVFLTknCitkZGJhczI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnCitkZGJhczI1NCB0b1NjaSAiMC4xMjY1RS0zIiAgLT4gJzAuMDAwMTI2NScKK2RkYmFzMjU1IHRvU2NpICIwLjEyNjVFLTIiICAtPiAnMC4wMDEyNjUnCitkZGJhczI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnCitkZGJhczI1NyB0b1NjaSAiMC4xMjY1RS0wIiAgLT4gJzAuMTI2NScKK2RkYmFzMjU4IHRvU2NpICIwLjEyNjVFKzEiICAtPiAnMS4yNjUnCitkZGJhczI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1JworZGRiYXMyNjAgdG9TY2kgIjAuMTI2NUUrMyIgIC0+ICcxMjYuNScKK2RkYmFzMjYxIHRvU2NpICIwLjEyNjVFKzQiICAtPiAnMTI2NScKK2RkYmFzMjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnCitkZGJhczI2MyB0b1NjaSAiMC4xMjY1RSsyMCIgLT4gJzEuMjY1RSsxOScKKworLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQorZGRiYXMyOTAgdG9TY2kgIi0wLjAwMEUtMSIgIC0+ICctMC4wMDAwJworZGRiYXMyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcKK2RkYmFzMjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJworZGRiYXMyOTMgdG9TY2kgIi0wLjAwMEUtNCIgIC0+ICctMEUtNycKK2RkYmFzMjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcKK2RkYmFzMjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnCitkZGJhczI5NiB0b1NjaSAiLTAuMEUtMiIgICAgLT4gJy0wLjAwMCcKK2RkYmFzMjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcKK2RkYmFzMjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnCitkZGJhczI5OSB0b1NjaSAiLTBFLTMiICAgICAgLT4gJy0wLjAwMCcKKworLS0gRW5naW5lZXJpbmcgbm90YXRpb24gdGVzdHMKK2RkYmFzMzAxICB0b1NjaSAxMGUxMiAgLT4gMS4wRSsxMworZGRiYXMzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTIKK2RkYmFzMzAzICB0b1NjaSAxMGUxMSAgLT4gMS4wRSsxMgorZGRiYXMzMDQgIHRvRW5nIDEwZTExICAtPiAxLjBFKzEyCitkZGJhczMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTEKK2RkYmFzMzA2ICB0b0VuZyAxMGUxMCAgLT4gMTAwRSs5CitkZGJhczMwNyAgdG9TY2kgMTBlOSAgIC0+IDEuMEUrMTAKK2RkYmFzMzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkKK2RkYmFzMzA5ICB0b1NjaSAxMGU4ICAgLT4gMS4wRSs5CitkZGJhczMxMCAgdG9FbmcgMTBlOCAgIC0+IDEuMEUrOQorZGRiYXMzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgKK2RkYmFzMzEyICB0b0VuZyAxMGU3ICAgLT4gMTAwRSs2CitkZGJhczMxMyAgdG9TY2kgMTBlNiAgIC0+IDEuMEUrNworZGRiYXMzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNgorZGRiYXMzMTUgIHRvU2NpIDEwZTUgICAtPiAxLjBFKzYKK2RkYmFzMzE2ICB0b0VuZyAxMGU1ICAgLT4gMS4wRSs2CitkZGJhczMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQorZGRiYXMzMTggIHRvRW5nIDEwZTQgICAtPiAxMDBFKzMKK2RkYmFzMzE5ICB0b1NjaSAxMGUzICAgLT4gMS4wRSs0CitkZGJhczMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszCitkZGJhczMyMSAgdG9TY2kgMTBlMiAgIC0+IDEuMEUrMworZGRiYXMzMjIgIHRvRW5nIDEwZTIgICAtPiAxLjBFKzMKK2RkYmFzMzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyCitkZGJhczMyNCAgdG9FbmcgMTBlMSAgIC0+IDEwMAorZGRiYXMzMjUgIHRvU2NpIDEwZTAgICAtPiAxMAorZGRiYXMzMjYgIHRvRW5nIDEwZTAgICAtPiAxMAorZGRiYXMzMjcgIHRvU2NpIDEwZS0xICAtPiAxLjAKK2RkYmFzMzI4ICB0b0VuZyAxMGUtMSAgLT4gMS4wCitkZGJhczMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTAKK2RkYmFzMzMwICB0b0VuZyAxMGUtMiAgLT4gMC4xMAorZGRiYXMzMzEgIHRvU2NpIDEwZS0zICAtPiAwLjAxMAorZGRiYXMzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMAorZGRiYXMzMzMgIHRvU2NpIDEwZS00ICAtPiAwLjAwMTAKK2RkYmFzMzM0ICB0b0VuZyAxMGUtNCAgLT4gMC4wMDEwCitkZGJhczMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTAKK2RkYmFzMzM2ICB0b0VuZyAxMGUtNSAgLT4gMC4wMDAxMAorZGRiYXMzMzcgIHRvU2NpIDEwZS02ICAtPiAwLjAwMDAxMAorZGRiYXMzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMAorZGRiYXMzMzkgIHRvU2NpIDEwZS03ICAtPiAwLjAwMDAwMTAKK2RkYmFzMzQwICB0b0VuZyAxMGUtNyAgLT4gMC4wMDAwMDEwCitkZGJhczM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNworZGRiYXMzNDIgIHRvRW5nIDEwZS04ICAtPiAxMDBFLTkKK2RkYmFzMzQzICB0b1NjaSAxMGUtOSAgLT4gMS4wRS04CitkZGJhczM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05CitkZGJhczM0NSAgdG9TY2kgMTBlLTEwIC0+IDEuMEUtOQorZGRiYXMzNDYgIHRvRW5nIDEwZS0xMCAtPiAxLjBFLTkKK2RkYmFzMzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMAorZGRiYXMzNDggIHRvRW5nIDEwZS0xMSAtPiAxMDBFLTEyCitkZGJhczM0OSAgdG9TY2kgMTBlLTEyIC0+IDEuMEUtMTEKK2RkYmFzMzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyCitkZGJhczM1MSAgdG9TY2kgMTBlLTEzIC0+IDEuMEUtMTIKK2RkYmFzMzUyICB0b0VuZyAxMGUtMTMgLT4gMS4wRS0xMgorCitkZGJhczM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTIKK2RkYmFzMzYyICB0b0VuZyA3RTEyICAtPiA3RSsxMgorZGRiYXMzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExCitkZGJhczM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5CitkZGJhczM2NSAgdG9TY2kgN0UxMCAgLT4gN0UrMTAKK2RkYmFzMzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQorZGRiYXMzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkKK2RkYmFzMzY4ICB0b0VuZyA3RTkgICAtPiA3RSs5CitkZGJhczM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOAorZGRiYXMzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNgorZGRiYXMzNzEgIHRvU2NpIDdFNyAgIC0+IDdFKzcKK2RkYmFzMzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNgorZGRiYXMzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYKK2RkYmFzMzc0ICB0b0VuZyA3RTYgICAtPiA3RSs2CitkZGJhczM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQorZGRiYXMzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMworZGRiYXMzNzcgIHRvU2NpIDdFNCAgIC0+IDdFKzQKK2RkYmFzMzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMworZGRiYXMzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMKK2RkYmFzMzgwICB0b0VuZyA3RTMgICAtPiA3RSszCitkZGJhczM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMgorZGRiYXMzODIgIHRvRW5nIDdFMiAgIC0+IDcwMAorZGRiYXMzODMgIHRvU2NpIDdFMSAgIC0+IDdFKzEKK2RkYmFzMzg0ICB0b0VuZyA3RTEgICAtPiA3MAorZGRiYXMzODUgIHRvU2NpIDdFMCAgIC0+IDcKK2RkYmFzMzg2ICB0b0VuZyA3RTAgICAtPiA3CitkZGJhczM4NyAgdG9TY2kgN0UtMSAgLT4gMC43CitkZGJhczM4OCAgdG9FbmcgN0UtMSAgLT4gMC43CitkZGJhczM4OSAgdG9TY2kgN0UtMiAgLT4gMC4wNworZGRiYXMzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcKK2RkYmFzMzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNworZGRiYXMzOTIgIHRvRW5nIDdFLTMgIC0+IDAuMDA3CitkZGJhczM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3CitkZGJhczM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3CitkZGJhczM5NSAgdG9TY2kgN0UtNSAgLT4gMC4wMDAwNworZGRiYXMzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcKK2RkYmFzMzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNworZGRiYXMzOTggIHRvRW5nIDdFLTYgIC0+IDAuMDAwMDA3CitkZGJhczM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNworZGRiYXM0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQorZGRiYXM0MDEgIHRvU2NpIDdFLTggIC0+IDdFLTgKK2RkYmFzNDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQorZGRiYXM0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkKK2RkYmFzNDA0ICB0b0VuZyA3RS05ICAtPiA3RS05CitkZGJhczQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTAKK2RkYmFzNDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyCitkZGJhczQwNyAgdG9TY2kgN0UtMTEgLT4gN0UtMTEKK2RkYmFzNDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTIKK2RkYmFzNDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMgorZGRiYXM0MTAgIHRvRW5nIDdFLTEyIC0+IDdFLTEyCitkZGJhczQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMKK2RkYmFzNDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1CisKKy0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uCityb3VuZGluZzogIGhhbGZfdXAKK2RkYmFzNDIwICB0b1NjaSAgICAxMDAgLT4gMTAwCitkZGJhczQyMSAgdG9FbmcgICAgMTAwIC0+IDEwMAorZGRiYXM0MjIgIHRvU2NpICAgMTAwMCAtPiAxMDAwCitkZGJhczQyMyAgdG9FbmcgICAxMDAwIC0+IDEwMDAKK2RkYmFzNDI0ICB0b1NjaSAgOTk5LjkgLT4gIDk5OS45CitkZGJhczQyNSAgdG9FbmcgIDk5OS45IC0+ICA5OTkuOQorZGRiYXM0MjYgIHRvU2NpIDEwMDAuMCAtPiAxMDAwLjAKK2RkYmFzNDI3ICB0b0VuZyAxMDAwLjAgLT4gMTAwMC4wCitkZGJhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQorZGRiYXM0MjkgIHRvRW5nIDEwMDAuMSAtPiAxMDAwLjEKK2RkYmFzNDMwICB0b1NjaSAxMDAwMCAtPiAxMDAwMAorZGRiYXM0MzEgIHRvRW5nIDEwMDAwIC0+IDEwMDAwCitkZGJhczQzMiAgdG9TY2kgMTAwMDAwIC0+IDEwMDAwMAorZGRiYXM0MzMgIHRvRW5nIDEwMDAwMCAtPiAxMDAwMDAKK2RkYmFzNDM0ICB0b1NjaSAxMDAwMDAwIC0+IDEwMDAwMDAKK2RkYmFzNDM1ICB0b0VuZyAxMDAwMDAwIC0+IDEwMDAwMDAKK2RkYmFzNDM2ICB0b1NjaSAxMDAwMDAwMCAtPiAxMDAwMDAwMAorZGRiYXM0MzcgIHRvRW5nIDEwMDAwMDAwIC0+IDEwMDAwMDAwCitkZGJhczQzOCAgdG9TY2kgMTAwMDAwMDAwIC0+IDEwMDAwMDAwMAorZGRiYXM0MzkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRiYXM0NDAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgIFJvdW5kZWQKK2RkYmFzNDQxICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkCitkZGJhczQ0MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDEgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDEgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDMgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDMgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0NyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE3ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0OSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMTAwLjAwMDAwMDAwMDAwMDFFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDkgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDkgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZAorZGRiYXM0NTMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDEwMC4wMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQKK2RkYmFzNDU0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDU1ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDMgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDU2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDUgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDU3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDUgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDU4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDkgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDU5ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDkgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDYwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkCitkZGJhczQ2MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZAorZGRiYXM0NjIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAzMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAzMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjUgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA5MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjcgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA5MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOSAgIFJvdW5kZWQKK2RkYmFzNDY5ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkCitkZGJhczQ3MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDMwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE5ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ3MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDMwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ3MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE5ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ3MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ3NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDkwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE5ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ3NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDkwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0CisKKy0tIGNoZWNrIHJvdW5kaW5nIG1vZGVzIGhlZWRlZAorcm91bmRpbmc6ICBjZWlsaW5nCitkZGJzcjQwMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNDAyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQwMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MDQgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RkYnNyNDA1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MDYgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDA3ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQwOCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZGRic3I0MTAgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjQxMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MTIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDEzICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZGRic3I0MTUgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjQxNiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MTcgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDE4ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQxOSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RkYnNyNDIxICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MjIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDIzICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQyNCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MjUgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZGRic3I0MjYgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjQyNyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MjggIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDI5ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RkYnNyNDMxICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MzIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDMzICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQzNCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MzUgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKy0tIG5lZ2F0aXZlcworcm91bmRpbmc6ICBjZWlsaW5nCitkZGJzcjUwMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNTAyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUwMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MDQgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RkYnNyNTA1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MDYgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTA3ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUwOCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZGRic3I1MTAgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjUxMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MTIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTEzICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZGRic3I1MTUgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjUxNiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MTcgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTE4ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUxOSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RkYnNyNTIxICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MjIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTIzICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUyNCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MjUgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZGRic3I1MjYgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjUyNyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MjggIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTI5ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RkYnNyNTMxICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MzIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTMzICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUzNCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MzUgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBUaGUgJ2JhZGRpZXMnIHRlc3RzIGZyb20gRGlhZ0JpZ0RlY2ltYWwsIHBsdXMgc29tZSBuZXcgb25lcworZGRiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTAyIHRvU2NpICcuLicgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTA1IHRvU2NpICctKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTA4IHRvU2NpICcxMmUrKycgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTExIHRvU2NpICcrIDEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTE0IHRvU2NpICcgLSAxICcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTE3IHRvU2NpICcxMi0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTIwIHRvU2NpICcxZS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTIzIHRvU2NpICc3ZTEyMzU2Nzg5MDEyeCcgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTI2IHRvU2NpICdcdTBlNWEnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTI5IHRvU2NpICcxLjM0LjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTMyIHRvU2NpICcwMS4zNS0nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTM1IHRvU2NpICcwMC4uMDAnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTM4IHRvU2NpICcxMTFlKzEyKycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQxIHRvU2NpICcxMTFlMWUrMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQ0IHRvU2NpICd0ZW4nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQ3IHRvU2NpICcxZTEuJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTUwIHRvU2NpICcxLjIzLjQnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTUzIHRvU2NpICcxRSsxLjIuMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTU2IHRvU2NpICcxRSstMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTU5IHRvU2NpICIxRSIiMSIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CistLSBOZWFyLXNwZWNpYWxzCitkZGJhczU2MSB0b1NjaSAicU5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU2NCB0b1NjaSAiSW5maSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU2NyB0b1NjaSAiSW5maW5pdCIgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU3MCB0b1NjaSAiOUluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU3MyB0b1NjaSAiLXNOYSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscworZGRiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzcgdG9TY2kgICcuZSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODAgdG9TY2kgICctLmUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODMgdG9TY2kgICcrLkUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkZGJhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU4OCB0b1NjaSAgJysuc05hTicgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIFplcm9zCitkZGJhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05CitkZGJhczYwMiB0b1NjaSAwLjAwMDAwMDAwICAgICAgICAtPiAwRS04CitkZGJhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03CitkZGJhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAorZGRiYXM2MDUgdG9TY2kgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorZGRiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkZGJhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAorZGRiYXM2MDggdG9TY2kgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorZGRiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkZGJhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RkYmFzNjExIHRvU2NpIDAuICAgICAgICAgICAgICAgIC0+IDAKK2RkYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RkYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wCitkZGJhczYxNCB0b1NjaSAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitkZGJhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZGRiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCitkZGJhczYxNyB0b1NjaSAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitkZGJhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZGRiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCitkZGJhczYyMCB0b1NjaSAtMC4wMDAwMDAwICAgICAgICAtPiAtMEUtNworZGRiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgKK2RkYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RkYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKK2RkYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorZGRiYXM2MzIgdG9TY2kgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZGRiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQorZGRiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMgorZGRiYXM2MzUgdG9TY2kgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMworZGRiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNAorZGRiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQorZGRiYXM2MzggdG9TY2kgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgorZGRiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNworCitkZGJhczY0MCB0b1NjaSAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RkYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDAKK2RkYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzEKK2RkYmFzNjQzIHRvU2NpICAwLjBFKzMgICAgICAgICAgIC0+IDBFKzIKK2RkYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RkYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQKK2RkYmFzNjQ2IHRvU2NpICAwLjBFKzYgICAgICAgICAgIC0+IDBFKzUKK2RkYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYKK2RkYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcKK2RkYmFzNjQ5IHRvU2NpICAwLjBFKzkgICAgICAgICAgIC0+IDBFKzgKKworZGRiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMAorZGRiYXM2NTEgdG9TY2kgIDBFKzEgICAgICAgICAgICAgLT4gMEUrMQorZGRiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMgorZGRiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZGRiYXM2NTQgdG9TY2kgIDBFKzQgICAgICAgICAgICAgLT4gMEUrNAorZGRiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQorZGRiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNgorZGRiYXM2NTcgdG9TY2kgIDBFKzcgICAgICAgICAgICAgLT4gMEUrNworZGRiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOAorZGRiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQorCitkZGJhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2RkYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RkYmFzNjYyIHRvU2NpICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCitkZGJhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2RkYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RkYmFzNjY1IHRvU2NpICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCitkZGJhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03CitkZGJhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04CitkZGJhczY2OCB0b1NjaSAgMC4wRS04ICAgICAgICAgICAtPiAwRS05CitkZGJhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMAorCitkZGJhczY3MCB0b1NjaSAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkZGJhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAorZGRiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitkZGJhczY3MyB0b1NjaSAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkZGJhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAorZGRiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNworZGRiYXM2NzYgdG9TY2kgIDAuMDBFLTYgICAgICAgICAgLT4gMEUtOAorZGRiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZGRiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTAKK2RkYmFzNjc5IHRvU2NpICAwLjAwRS05ICAgICAgICAgIC0+IDBFLTExCisKK2RkYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwCitkZGJhczY4MSB0b1NjaSAgIDAwMDAwLiAgICAgICAgICAtPiAgMAorZGRiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDAKK2RkYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwCitkZGJhczY4NCB0b1NjaSAgICAgIDAwLiAgICAgICAgICAtPiAgMAorZGRiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDAKK2RkYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwCitkZGJhczY4NyB0b1NjaSAgLTAwMDAwLiAgICAgICAgICAtPiAtMAorZGRiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDAKK2RkYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wCisKKy0tIFNwZWNpYWxzCitkZGJhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzAxIHRvU2NpICJuYW4iICAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFOCitkZGJhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzA0IHRvU2NpICIrTmFOIiAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFOCitkZGJhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzA3IHRvU2NpICIrTkFOIiAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTgorZGRiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTgorZGRiYXM3MTAgdG9TY2kgIi1uQW4iICAgICAgICAgICAgLT4gLU5hTgorZGRiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTgorZGRiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFOCitkZGJhczcxMyB0b1NjaSAnTmFOMScgICAgICAgICAgICAtPiBOYU4xCitkZGJhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMgorZGRiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzCitkZGJhczcxNiB0b1NjaSAnTmFOMTIzNCcgICAgICAgICAtPiBOYU4xMjM0CitkZGJhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xCitkZGJhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMgorZGRiYXM3MTkgdG9TY2kgJ05hTjAxMjMnICAgICAgICAgLT4gTmFOMTIzCitkZGJhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0CitkZGJhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xCitkZGJhczcyMiB0b1NjaSAnTmFOMDAxMicgICAgICAgICAtPiBOYU4xMgorZGRiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzCitkZGJhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0CitkZGJhczcyNSB0b1NjaSAnTmFOMTIzNDU2Nzg5MDEyMzQ1NicgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM3MjggdG9TY2kgJ05hTi0xMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZGRiYXM3MzAgdG9TY2kgInNOYU4iICAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzMgdG9TY2kgIlNOQU4iICAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzYgdG9TY2kgIitTbkFuIiAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RkYmFzNzM5IHRvU2NpICItc25hbiIgICAgICAgICAgIC0+IC1zTmFOCitkZGJhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTgorZGRiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RkYmFzNzQyIHRvU2NpICdzTmFOMDAwMCcgICAgICAgIC0+IHNOYU4KK2RkYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43CitkZGJhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNAorZGRiYXM3NDUgdG9TY2kgJ3NOYU43MjM0NTYxMjM0NTY3ODkwJyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RkYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NTAgdG9TY2kgImlOZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NTMgdG9TY2kgIitpbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NTYgdG9TY2kgIi1JbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5CitkZGJhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RkYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZGRiYXM3NTkgdG9TY2kgIi1JTkYiICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2RkYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc2MSB0b1NjaSAiaW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc2NCB0b1NjaSAiK0luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5CitkZGJhczc2NyB0b1NjaSAiK0lORklOSVRZIiAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5CitkZGJhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKK2RkYmFzNzcwIHRvU2NpICItaU5mSW5JdFkiICAgICAgIC0+IC1JbmZpbml0eQorZGRiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5CisKKy0tIFNwZWNpYWxzIGFuZCB6ZXJvcyBmb3IgdG9FbmcKK2RkYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQorZGRiYXN0Nzc0IHRvRW5nICItc05hTiIgICAgICAgICAgICAtPiAtc05hTgorZGRiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFOCitkZGJhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3NzggdG9FbmcgIitzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3ODEgdG9FbmcgIlNOQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3ODQgdG9FbmcgInNuYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3ODcgdG9FbmcgIlNuQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3OTAgdG9FbmcgInNOYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3OTMgdG9FbmcgInNOYU4iICAgICAgICAgICAgIC0+IHNOYU4KKworLS0gWmVybyB0b0VuZywgZXRjLgorZGRiYXN0ODAwIHRvRW5nIDBlKzEgICAgICAgICAgICAgIC0+ICIwLjAwRSszIiAgLS0gZG9jIGV4YW1wbGUKKworZGRiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2RkYmFzdDgwMiB0b0VuZyAwLjAwMDAwMDAwICAgICAgICAtPiAwLjAwRS02CitkZGJhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02CitkZGJhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RkYmFzdDgwNSB0b0VuZyAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCitkZGJhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkZGJhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2RkYmFzdDgwOCB0b0VuZyAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCitkZGJhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkZGJhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitkZGJhc3Q4MTEgdG9FbmcgMC4gICAgICAgICAgICAgICAgLT4gMAorZGRiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RkYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMAorZGRiYXN0ODE0IHRvRW5nIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKK2RkYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZGRiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorZGRiYXN0ODE3IHRvRW5nIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKK2RkYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZGRiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorZGRiYXN0ODIwIHRvRW5nIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wLjBFLTYKK2RkYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNgorZGRiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RkYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitkZGJhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCitkZGJhc3Q4MzIgdG9FbmcgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZGRiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMKK2RkYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMKK2RkYmFzdDgzNSB0b0VuZyAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitkZGJhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNgorZGRiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNgorZGRiYXN0ODM4IHRvRW5nICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2RkYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5CisKK2RkYmFzdDg0MCB0b0VuZyAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RkYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwCitkZGJhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMworZGRiYXN0ODQzIHRvRW5nICAwLjBFKzMgICAgICAgICAgIC0+IDAuMEUrMworZGRiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RkYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2CitkZGJhc3Q4NDYgdG9FbmcgIDAuMEUrNiAgICAgICAgICAgLT4gMC4wRSs2CitkZGJhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorZGRiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkKK2RkYmFzdDg0OSB0b0VuZyAgMC4wRSs5ICAgICAgICAgICAtPiAwLjBFKzkKKworZGRiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDAKK2RkYmFzdDg1MSB0b0VuZyAgMEUrMSAgICAgICAgICAgICAtPiAwLjAwRSszCitkZGJhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszCitkZGJhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZGRiYXN0ODU0IHRvRW5nICAwRSs0ICAgICAgICAgICAgIC0+IDAuMDBFKzYKK2RkYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYKK2RkYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2CitkZGJhc3Q4NTcgdG9FbmcgIDBFKzcgICAgICAgICAgICAgLT4gMC4wMEUrOQorZGRiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQorZGRiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworZGRiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAorZGRiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RkYmFzdDg2MiB0b0VuZyAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorZGRiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAorZGRiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RkYmFzdDg2NSB0b0VuZyAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorZGRiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNgorZGRiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYKK2RkYmFzdDg2OCB0b0VuZyAgMC4wRS04ICAgICAgICAgICAtPiAwRS05CitkZGJhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05CisKK2RkYmFzdDg3MCB0b0VuZyAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkZGJhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2RkYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKK2RkYmFzdDg3MyB0b0VuZyAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkZGJhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2RkYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYKK2RkYmFzdDg3NiB0b0VuZyAgMC4wMEUtNiAgICAgICAgICAtPiAwLjAwRS02CitkZGJhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZGRiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQorZGRiYXN0ODc5IHRvRW5nICAwLjAwRS05ICAgICAgICAgIC0+IDAuMDBFLTkKKworLS0gbG9uZyBpbnB1dCBzdHJpbmdzCitkZGJhczgwMSB0b3NjaSAnMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODAyIHRvc2NpICcwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODAzIHRvc2NpICcwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwNCB0b3NjaSAnMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODA1IHRvc2NpICcwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODA2IHRvc2NpICcwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwNyB0b3NjaSAnMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODA4IHRvc2NpICcwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODA5IHRvc2NpICcwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgxMCB0b3NjaSAnMDAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKKworZGRiYXM4MTEgdG9zY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4xMjM0NTY3ODkwMTIzNDU2CitkZGJhczgxMiB0b3NjaSAnMC4wMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTMgdG9zY2kgJzAuMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTQgdG9zY2kgJzAuMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgxNSB0b3NjaSAnMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTYgdG9zY2kgJzAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTcgdG9zY2kgJzAuMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTcKK2RkYmFzODE4IHRvc2NpICcwLjAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOAorZGRiYXM4MTkgdG9zY2kgJzAuMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOQorZGRiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTEwCisKK2RkYmFzODIxIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MCcgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzE5IEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjIgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMScgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIwIEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjMgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTInIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMSBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI0IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMycgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIyIEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjUgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIzIEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjYgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyNCBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI3IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI1IEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjggdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NycgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI2IEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjkgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NzgnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyNyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzCitkZGJhczkwNiB0b1NjaSAnOTllOTk5OTk5OTk5JyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkwNyB0b1NjaSAnOTk5ZTk5OTk5OTk5OScgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkwOCB0b1NjaSAnMC45ZS05OTk5OTk5OTknICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MDkgdG9TY2kgJzAuMDllLTk5OTk5OTk5OScgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTEwIHRvU2NpICcwLjFlMTAwMDAwMDAwMCcgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzOTExIHRvU2NpICcxMGUtMTAwMDAwMDAwMCcgICAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkxMiB0b1NjaSAnMC45ZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkxMyB0b1NjaSAnOTllLTk5OTk5OTk5OTknICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MTQgdG9TY2kgJzExMWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MTUgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTknICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTE2IHRvU2NpICcxMTExZS05OTk5OTk5OTk5OScgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkxNyB0b1NjaSAnN2UxMDAwMDAwMDAwJyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMgdGhlIHNhbWUKK2RkYmFzOTE4IHRvU2NpICctOTllOTk5OTk5OTk5JyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkxOSB0b1NjaSAnLTk5OWU5OTk5OTk5OTknICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MjAgdG9TY2kgJy0wLjllLTk5OTk5OTk5OScgICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkyMSB0b1NjaSAnLTAuMDllLTk5OTk5OTk5OScgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTIyIHRvU2NpICctMC4xZTEwMDAwMDAwMDAnICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkyMyB0b1NjaSAnLTEwZS0xMDAwMDAwMDAwJyAgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTI0IHRvU2NpICctMC45ZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkyNSB0b1NjaSAnLTk5ZS05OTk5OTk5OTk5JyAgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTI2IHRvU2NpICctMTExZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkyNyB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTknICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTI4IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OTknIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MjkgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgcmVzdWx0cyBhdCBkaWZmZXJlbnQgcm91bmRpbmcgbW9kZXMKK3JvdW5kaW5nOiAgY2VpbGluZworZGRiYXM5MzAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzOTMxIHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgdXAKK2RkYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkzMyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBkb3duCitkZGJhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkzNSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIGZsb29yCitkZGJhczkzNiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkzNyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfdXAKK2RkYmFzOTM4IHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkzOSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RkYmFzOTQwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczk0MSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RkYmFzOTQyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczk0MyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfZXZlbgorCistLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMAorZGRiZW00MDAgdG9TY2kgIDEuMDAwMEUtMzgzICAgICAtPiAxLjAwMDBFLTM4MworZGRiZW00MDEgdG9TY2kgIDAuMUUtMzk0ICAgICAgICAtPiAxRS0zOTUgICAgICAgU3Vibm9ybWFsCitkZGJlbTQwMiB0b1NjaSAgMC4xMDAwRS0zOTQgICAgIC0+IDEuMDAwRS0zOTUgICBTdWJub3JtYWwKK2RkYmVtNDAzIHRvU2NpICAwLjAxMDBFLTM5NCAgICAgLT4gMS4wMEUtMzk2ICAgIFN1Ym5vcm1hbAorZGRiZW00MDQgdG9TY2kgIDAuMDAxMEUtMzk0ICAgICAtPiAxLjBFLTM5NyAgICAgU3Vibm9ybWFsCitkZGJlbTQwNSB0b1NjaSAgMC4wMDAxRS0zOTQgICAgIC0+IDFFLTM5OCAgICAgICBTdWJub3JtYWwKK2RkYmVtNDA2IHRvU2NpICAwLjAwMDEwRS0zOTQgICAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwgUm91bmRlZAorZGRiZW00MDcgdG9TY2kgIDAuMDAwMTNFLTM5NCAgICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQwOCB0b1NjaSAgMC4wMDAxNUUtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDA5IHRvU2NpICAwLjAwMDE3RS0zOTQgICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTAgdG9TY2kgIDAuMDAwMjNFLTM5NCAgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxMSB0b1NjaSAgMC4wMDAyNUUtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDEyIHRvU2NpICAwLjAwMDI3RS0zOTQgICAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTMgdG9TY2kgIDAuMDAwMTQ5RS0zOTQgICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDE1IHRvU2NpICAwLjAwMDE1MUUtMzk0ICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTYgdG9TY2kgIDAuMDAwMjQ5RS0zOTQgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDE4IHRvU2NpICAwLjAwMDI1MUUtMzk0ICAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTkgdG9TY2kgIDAuMDAwMDlFLTM5NCAgICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQyMCB0b1NjaSAgMC4wMDAwNUUtMzk0ICAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiZW00MjEgdG9TY2kgIDAuMDAwMDNFLTM5NCAgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmVtNDIyIHRvU2NpICAwLjAwMDAwOUUtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTM5NCAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiZW00MjQgdG9TY2kgIDAuMDAwMDAzRS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZGRiZW00MjUgdG9TY2kgIDAuMDAxMDQ5RS0zOTQgICAtPiAxLjBFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQyNiB0b1NjaSAgMC4wMDEwNTBFLTM5NCAgIC0+IDEuMEUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDI3IHRvU2NpICAwLjAwMTA1MUUtMzk0ICAgLT4gMS4xRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MjggdG9TY2kgIDAuMDAxMTQ5RS0zOTQgICAtPiAxLjFFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQyOSB0b1NjaSAgMC4wMDExNTBFLTM5NCAgIC0+IDEuMkUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDMwIHRvU2NpICAwLjAwMTE1MUUtMzk0ICAgLT4gMS4yRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZGJlbTQzMiB0b1NjaSAgMC4wMTAwNDlFLTM5NCAgIC0+IDEuMDBFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDMzIHRvU2NpICAwLjAxMDA1MEUtMzk0ICAgLT4gMS4wMEUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS0zOTQgICAtPiAxLjAxRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQzNSB0b1NjaSAgMC4wMTAxNDlFLTM5NCAgIC0+IDEuMDFFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDM2IHRvU2NpICAwLjAxMDE1MEUtMzk0ICAgLT4gMS4wMkUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS0zOTQgICAtPiAxLjAyRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkYmVtNDQwIHRvU2NpICAwLjEwMTAzRS0zOTQgICAgLT4gMS4wMTBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTM5NCAgICAtPiAxLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ0MiB0b1NjaSAgMC4xMDEwN0UtMzk0ICAgIC0+IDEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDQzIHRvU2NpICAwLjEwMTEzRS0zOTQgICAgLT4gMS4wMTFFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTM5NCAgICAtPiAxLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ0NSB0b1NjaSAgMC4xMDExN0UtMzk0ICAgIC0+IDEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRiZW00NTAgdG9TY2kgIDEuMTA3MzBFLTM5NSAgIC0+IDEuMTA3RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDUxIHRvU2NpICAxLjEwNzUwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ1MiB0b1NjaSAgMS4xMDc3MEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTMgdG9TY2kgIDEuMTA4MzBFLTM5NSAgIC0+IDEuMTA4RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDU0IHRvU2NpICAxLjEwODUwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ1NSB0b1NjaSAgMS4xMDg3MEUtMzk1ICAgLT4gMS4xMDlFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBtYWtlIHN1cmUgc2lnbiBPSworZGRiZW00NTYgdG9TY2kgIC0wLjEwMTAzRS0zOTQgICAtPiAtMS4wMTBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS0zOTQgICAtPiAtMS4wMTBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTggdG9TY2kgIC0wLjEwMTA3RS0zOTQgICAtPiAtMS4wMTFFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTkgdG9TY2kgIC0wLjEwMTEzRS0zOTQgICAtPiAtMS4wMTFFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS0zOTQgICAtPiAtMS4wMTJFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NjEgdG9TY2kgIC0wLjEwMTE3RS0zOTQgICAtPiAtMS4wMTJFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSAnOTk5cycgY2FzZXMKK2RkYmVtNDY0IHRvU2NpICA5OTk5OTlFLTM5NSAgICAgICAgIC0+IDkuOTk5OTlFLTM5MCBTdWJub3JtYWwKK2RkYmVtNDY1IHRvU2NpICA5OTk5OS4wRS0zOTQgICAgICAgIC0+IDkuOTk5OTBFLTM5MCBTdWJub3JtYWwKK2RkYmVtNDY2IHRvU2NpICA5OTk5OS5FLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkwICBTdWJub3JtYWwKK2RkYmVtNDY3IHRvU2NpICA5OTk5LjlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkxICBTdWJub3JtYWwKK2RkYmVtNDY4IHRvU2NpICA5OTkuOTlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkyICBTdWJub3JtYWwKK2RkYmVtNDY5IHRvU2NpICA5OS45OTlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkzICBTdWJub3JtYWwKK2RkYmVtNDcwIHRvU2NpICA5Ljk5OTlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzk0ICBTdWJub3JtYWwKK2RkYmVtNDcxIHRvU2NpICAwLjk5OTk5RS0zOTQgICAgICAgIC0+IDEuMDAwMEUtMzk0IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ3MiB0b1NjaSAgMC4wOTk5OTlFLTM5NCAgICAgICAtPiAxLjAwMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ3MyB0b1NjaSAgMC4wMDk5OTk5RS0zOTQgICAgICAtPiAxLjAwRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtMzk0ICAgICAtPiAxLjBFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ3NSB0b1NjaSAgMC4wMDAwOTk5OTlFLTM5NCAgICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ3NiB0b1NjaSAgMC4wMDAwMDk5OTk5RS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmVtNDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS0zOTQgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiZW00NzggdG9TY2kgIDAuMDAwMDAwMDk5OTk5RS0zOTQgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIEV4cG9uZW50cyB3aXRoIGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcworZGRiYXMxMDAxIHRvU2NpICAxZTk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMTAwMiB0b1NjaSAgMWUwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRiYXMxMDAzIHRvU2NpICAxZTAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRiYXMxMDA0IHRvU2NpICAxZTAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMTAwNSB0b1NjaSAgMWUwMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGJhczEwMDYgdG9TY2kgIDFlMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRiYXMxMDA3IHRvU2NpICAxZS05OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzMTAwOCB0b1NjaSAgMWUtMDk5OTk5OTk5OSAtPiAwRS0zOTggICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczEwMDkgdG9TY2kgIDFlLTAwOTk5OTk5OTk5IC0+IDBFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXMxMDEwIHRvU2NpICAxZS0wMDA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzMTAxMSB0b1NjaSAgMWUtMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczEwMTIgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworZGRiYXMxMDQxIHRvU2NpICAgICAxLjExMTExMTExMTExNTI0NDRFLTM4NCAtPiAgMS4xMTExMTExMTExMTUyNEUtMzg0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGJhczEwNDIgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NUUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkYmFzMTA0MyB0b1NjaSAgICAgMS4xMTExMTExMTExMTUyNDQ2RS0zODQgLT4gIDEuMTExMTExMTExMTE1MjRFLTM4NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBjbGFtcGVkIGxhcmdlIG5vcm1hbHMKK2RkYmFzMTA3MCB0b1NjaSAgIDFFKzM2OSAgLT4gIDFFKzM2OQorZGRiYXMxMDcxIHRvU2NpICAgMUUrMzcwICAtPiAgMS4wRSszNzAgIENsYW1wZWQKK2RkYmFzMTA3MiB0b1NjaSAgIDFFKzM3OCAgLT4gIDEuMDAwMDAwMDAwRSszNzggIENsYW1wZWQKK2RkYmFzMTA3MyB0b1NjaSAgIDFFKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKK2RkYmFzMTA3NCB0b1NjaSAgIDFFKzM4NSAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCisKKy0tIGNsYW1wZWQgemVyb3MgW3NlZSBhbHNvIGNsYW1wLmRlY1Rlc3RdCitkZGJhczEwNzUgdG9TY2kgICAwZSsxMDAwMCAgLT4gIDBFKzM2OSAgQ2xhbXBlZAorZGRiYXMxMDc2IHRvU2NpICAgMGUtMTAwMDAgIC0+ICAwRS0zOTggIENsYW1wZWQKK2RkYmFzMTA3NyB0b1NjaSAgLTBlKzEwMDAwICAtPiAtMEUrMzY5ICBDbGFtcGVkCitkZGJhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTM5OCAgQ2xhbXBlZAorCistLSBleHRyZW1lIHZhbHVlcyBmcm9tIG5leHQtd2lkZXIKK2RkYmFzMTEwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGJhczExMDIgdG9TY2kgLTFFLTYxNDMgLT4gLTBFLTM5OCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkZGJhczExMDMgdG9TY2kgLTFFLTYxNzYgLT4gLTBFLTM5OCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkZGJhczExMDQgdG9TY2kgLTAgLT4gLTAKK2RkYmFzMTEwNSB0b1NjaSArMCAtPiAgMAorZGRiYXMxMTA2IHRvU2NpICsxRS02MTc2IC0+ICAwRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZGRiYXMxMTA3IHRvU2NpICsxRS02MTczIC0+ICAwRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZGRiYXMxMTA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2Fub25pY2FsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDYW5vbmljYWwuZGVjVGVzdAppbmRleCA4MjRkZTgzLi5iNGY5ZTMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDYW5vbmljYWwuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDYW5vbmljYWwuZGVjVGVzdApAQCAtMSwzNTcgKzEsMzU3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZENhbm9uaWNhbC5kZWNUZXN0IC0tIHRlc3QgZGVjRG91YmxlIGNhbm9uaWNhbCByZXN1bHRzICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBmaWxlIHRlc3RzIHRoYXQgY29weSBvcGVyYXRpb25zIGxlYXZlIHVuY2Fub25pY2FsIG9wZXJhbmRzDQotLS0gdW5jaGFuZ2VkLCBhbmQgdmljZSB2ZXJzYQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFVuY2Fub25pY2FsIGRlY2xldHMgYXJlOiBhYmMsIHdoZXJlOg0KLS0tICAgYT0xLDIsMw0KLS0tICAgYj02LDcsZSxmDQotLS0gICBjPWUsZg0KLQ0KLS0tIGFzc2VydCBzb21lIHN0YW5kYXJkIChjYW5vbmljYWwpIHZhbHVlczsgdGhpcyB0ZXN0cyB0aGF0IEZyb21TdHJpbmcNCi0tLSBwcm9kdWNlcyBjYW5vbmljYWwgcmVzdWx0cyAobWFueSBtb3JlIGluIGRlY2ltYWxOTikNCi1kZGNhbjAwMSBhcHBseSA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4wMDIgYXBwbHkgMCAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMA0KLWRkY2FuMDAzIGFwcGx5IDEgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMDENCi1kZGNhbjAwNCBhcHBseSAtMSAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDAxDQotZGRjYW4wMDUgYXBwbHkgSW5maW5pdHkgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMDA2IGFwcGx5IC1JbmZpbml0eSAgICAgICAgICAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjAwNyBhcHBseSAtTmFOICAgICAgICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwDQotZGRjYW4wMDggYXBwbHkgLXNOYU4gICAgICAgICAgICAgICAgICAtPiAjZmUwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMDA5IGFwcGx5IE5hTjk5OTk5OTk5OTk5OTk5OSAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAxMCBhcHBseSBzTmFOOTk5OTk5OTk5OTk5OTk5ICAgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotZGVjYW4wMTEgYXBwbHkgIDk5OTk5OTk5OTk5OTk5OTkgICAgICAtPiAjNmUzOGZmM2ZjZmYzZmNmZg0KLWRkY2FuMDEyIGFwcGx5IDcuNTAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDAzZDANCi1kZGNhbjAxMyBhcHBseSA5Ljk5ICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwMGZmDQotDQotLS0gQmFzZSB0ZXN0cyBmb3IgY2Fub25pY2FsIGVuY29kaW5ncyAoaW5kaXZpZHVhbCBvcGVyYXRvcg0KLS0tIHByb3BhZ2F0aW9uIGlzIHRlc3RlZCBsYXRlcikNCi0NCi0tLSBGaW5pdGVzOiBkZWNsZXRzIGluIGNvZWZmaWNpZW50DQotZGRjYW4wMjEgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAyMiBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMDIzIGNhbm9uaWNhbCAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4wMjQgY2Fub25pY2FsICAjNzdmZmZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAyNSBjYW5vbmljYWwgICM3N2ZjZmZmZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMDI2IGNhbm9uaWNhbCAgIzc3ZmNmZmZmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4wMjcgY2Fub25pY2FsICAjNzdmY2ZmM2ZmZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAyOCBjYW5vbmljYWwgICM3N2ZjZmYzZmZmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMDMwIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmZmZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4wMzEgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmZmZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAzMiBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmZmZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMDMzIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZmZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4wMzUgY2Fub25pY2FsICAjNzdmY2ZmM2ZkZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAzNiBjYW5vbmljYWwgICM3N2ZjZmYzZmVmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLQ0KLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZGRjYW4xMDAgY2Fub25pY2FsICBOYU45OTk5OTk5OTk5OTk5OTkgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEwMSBjYW5vbmljYWwgICM3YzAwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTAyIGNhbm9uaWNhbCAgIzdjMDNmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMDMgY2Fub25pY2FsICAjN2MwMGZmZmZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEwNCBjYW5vbmljYWwgICM3YzAwZmYzZmZmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTA1IGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmZmZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMDYgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmZmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEwNyBjYW5vbmljYWwgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLS0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRkY2FuMTEwIGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMTIgY2Fub25pY2FsICAjN2QwMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjExMyBjYW5vbmljYWwgICM3YzgwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTE0IGNhbm9uaWNhbCAgIzdjNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMTUgY2Fub25pY2FsICAjN2MyMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjExNiBjYW5vbmljYWwgICM3YzEwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTE3IGNhbm9uaWNhbCAgIzdjMDhmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMTggY2Fub25pY2FsICAjN2MwNGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi0NCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kZGNhbjEyMCBjYW5vbmljYWwgc05hTjk5OTk5OTk5OTk5OTk5OSAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTIxIGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMjIgY2Fub25pY2FsICAjN2UwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEyMyBjYW5vbmljYWwgICM3ZTAwZmZmZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTI0IGNhbm9uaWNhbCAgIzdlMDBmZjNmZmZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMjUgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmZmZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEyNiBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmZmZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTI3IGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRkY2FuMTMwIGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMzIgY2Fub25pY2FsICAjN2YwMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEzMyBjYW5vbmljYWwgICM3ZTgwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTM0IGNhbm9uaWNhbCAgIzdlNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMzUgY2Fub25pY2FsICAjN2UyMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEzNiBjYW5vbmljYWwgICM3ZTEwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTM3IGNhbm9uaWNhbCAgIzdlMDhmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMzggY2Fub25pY2FsICAjN2UwNGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi0NCi0tLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZGRjYW4xNDAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE0MSBjYW5vbmljYWwgICM3OTAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTQyIGNhbm9uaWNhbCAgIzdhMDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNDMgY2Fub25pY2FsICAjNzg4MDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE0NCBjYW5vbmljYWwgICM3ODQwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTQ1IGNhbm9uaWNhbCAgIzc4MjAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNDYgY2Fub25pY2FsICAjNzgxMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE0NyBjYW5vbmljYWwgICM3ODA4MDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTQ4IGNhbm9uaWNhbCAgIzc4MDQwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotDQotLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cyAoZmlyc3QsIGxhc3QsIGFuZCBhIGZldyBvdGhlcnMpDQotZGRjYW4xNTAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE1MSBjYW5vbmljYWwgICM3ODAyMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTUyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNTMgY2Fub25pY2FsICAjNzgwMTAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE1NCBjYW5vbmljYWwgICM3ODAwMjAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTU1IGNhbm9uaWNhbCAgIzc4MDAwODAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNTYgY2Fub25pY2FsICAjNzgwMDAwMjAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE1NyBjYW5vbmljYWwgICM3ODAwMDAwNDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTU4IGNhbm9uaWNhbCAgIzc4MDAwMDAwNDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNTkgY2Fub25pY2FsICAjNzgwMDAwMDAwODAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE2MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwNDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTYxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMjAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNjIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwODAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE2MyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMjAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTY0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwNDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNjUgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwOCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi0NCi0NCi0tLSBOb3cgdGhlIG9wZXJhdG9ycyAtLSB0cnlpbmcgdG8gY2hlY2sgcGF0aHMgdGhhdCBtaWdodCBmYWlsIHRvDQotLS0gY2Fub25pY2FsaXplIHByb3BhZ2F0ZWQgb3BlcmFuZHMNCi0NCi0tLS0tLSBBZGQ6DQotLS0gRmluaXRlczogbmV1dHJhbCAwDQotZGRjYW4yMDIgYWRkICAwRSszODQgIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4yMDMgYWRkICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUrMzg0IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotLS0gdGlueSB6ZXJvDQotZGRjYW4yMDQgYWRkICAwRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQNCi1kZGNhbjIwNSBhZGQgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRS0zOTggLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KLS0tIHRpbnkgbm9uIHplcm8NCi1kZGNhbjIwNiBhZGQgLTFFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZA0KLWRkY2FuMjA3IGFkZCAgICAgICAgICM3N2ZmZmYzZmNmZjNmY2ZmIC0xRS0zOTggLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkDQotLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kZGNhbjIxMSBhZGQgIDAgICM3YzAzZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjIxMiBhZGQgICAgICM3YzAzZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi0tLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCi1kZGNhbjIxMyBhZGQgIDAgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjIxNCBhZGQgICAgICM3YzQwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kZGNhbjIxNSBhZGQgIDAgICM3ZTAwZmZmZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNhbjIxNiBhZGQgICAgICM3ZTAwZmZmZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQotZGRjYW4yMTcgYWRkICAwICAjN2U4MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotZGRjYW4yMTggYWRkICAgICAjN2U4MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KLWRkY2FuMjIwIGFkZCAgMCAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMjIxIGFkZCAgICAgIzc4ODAwMDAwMDAwMDAwMDAgIDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLS0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMNCi1kZGNhbjIyMiBhZGQgIDAgICM3ODAyMDAwMDAwMDAwMDAwICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMjIzIGFkZCAgICAgIzc4MDIwMDAwMDAwMDAwMDAgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4yMjQgYWRkICAwICAjNzgwMDAwMDAwMDAwMDAwMSAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjIyNSBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAxICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMjI2IGFkZCAgMCAgIzc4MDAwMDIwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4yMjcgYWRkICAgICAjNzgwMDAwMjAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi0NCi0tLS0tLSBDbGFzczogW2RvZXMgbm90IHJldHVybiBlbmNvZGVkXQ0KLQ0KLS0tLS0tIENvbXBhcmU6DQotZGRjYW4yMzEgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gICNhMjM4MDAwMDAwMDAwMDAxDQotZGRjYW4yMzIgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAwDQotZGRjYW4yMzMgY29tcGFyZSAgMSAgICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAxDQotZGRjYW4yMzQgY29tcGFyZSAgIzdjMDBmZjNmZmZmM2ZjZmYgLTEwMDAgIC0+ICAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMjM1IGNvbXBhcmUgICM3ZTAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0tLS0gQ29tcGFyZVNpZzoNCi1kZGNhbjI0MSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAgI2EyMzgwMDAwMDAwMDAwMDENCi1kZGNhbjI0MiBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgIzIyMzgwMDAwMDAwMDAwMDANCi1kZGNhbjI0MyBjb21wYXJlc2lnICAxICAgIC1JbmYgICAtPiAgIzIyMzgwMDAwMDAwMDAwMDENCi1kZGNhbjI0NCBjb21wYXJlc2lnICAjN2MwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY2FuMjQ1IGNvbXBhcmVzaWcgICM3ZTAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0tLS0gQ29weTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQ0KLS0tIGZpbml0ZXMNCi1kZGNhbjI1MCBjb3B5ICAjNzdmZmZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmZmZjNmY2ZmM2ZjZmYNCi1kZGNhbjI1MSBjb3B5ICAjNzdmY2ZmM2ZkZmYzZmNmZiAgLT4gIzc3ZmNmZjNmZGZmM2ZjZmYNCi0tLSBOYU5zDQotZGRjYW4yNTIgY29weSAgIzdjMDNmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAzZmYzZmNmZjNmY2ZmDQotZGRjYW4yNTMgY29weSAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmZmZmDQotZGRjYW4yNTQgY29weSAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZDAwZmYzZmNmZjNmY2ZmDQotZGRjYW4yNTUgY29weSAgIzdjMDRmZjNmY2ZmM2ZjZmYgIC0+ICM3YzA0ZmYzZmNmZjNmY2ZmDQotLS0gc05hTg0KLWRkY2FuMjU2IGNvcHkgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmZmZmNmZg0KLWRkY2FuMjU3IGNvcHkgICM3ZTQwZmYzZmNmZjNmY2ZmICAtPiAjN2U0MGZmM2ZjZmYzZmNmZg0KLS0tIEluZg0KLWRkY2FuMjU4IGNvcHkgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjN2EwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMjU5IGNvcHkgICM3ODAwMjAwMDAwMDAwMDAwICAtPiAjNzgwMDIwMDAwMDAwMDAwMA0KLQ0KLS0tLS0tIENvcHlBYnM6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCi0tLSBmaW5pdGVzDQotZGRjYW4yNjAgY29weWFicyAgI2Y3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZmZmYzZmNmZjNmY2ZmDQotZGRjYW4yNjEgY29weWFicyAgI2Y3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmDQotLS0gTmFOcw0KLWRkY2FuMjYyIGNvcHlhYnMgICNmYzAzZmYzZmNmZjNmY2ZmICAtPiAjN2MwM2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMjYzIGNvcHlhYnMgICNmYzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmZmZg0KLWRkY2FuMjY0IGNvcHlhYnMgICNmZDAwZmYzZmNmZjNmY2ZmICAtPiAjN2QwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMjY1IGNvcHlhYnMgICNmYzA0ZmYzZmNmZjNmY2ZmICAtPiAjN2MwNGZmM2ZjZmYzZmNmZg0KLS0tIHNOYU4NCi1kZGNhbjI2NiBjb3B5YWJzICAjZmUwMGZmM2ZjZmZmZmNmZiAgLT4gIzdlMDBmZjNmY2ZmZmZjZmYNCi1kZGNhbjI2NyBjb3B5YWJzICAjZmU0MGZmM2ZjZmYzZmNmZiAgLT4gIzdlNDBmZjNmY2ZmM2ZjZmYNCi0tLSBJbmYNCi1kZGNhbjI2OCBjb3B5YWJzICAjZmEwMDAwMDAwMDAwMDAwMCAgLT4gIzdhMDAwMDAwMDAwMDAwMDANCi1kZGNhbjI2OSBjb3B5YWJzICAjZjgwMDIwMDAwMDAwMDAwMCAgLT4gIzc4MDAyMDAwMDAwMDAwMDANCi0NCi0tLS0tLSBDb3B5TmVnYXRlOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdDQotLS0gZmluaXRlcw0KLWRkY2FuMjcwIGNvcHluZWdhdGUgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjZjdmZmZmM2ZjZmYzZmNmZg0KLWRkY2FuMjcxIGNvcHluZWdhdGUgICM3N2ZjZmYzZmRmZjNmY2ZmICAtPiAjZjdmY2ZmM2ZkZmYzZmNmZg0KLS0tIE5hTnMNCi1kZGNhbjI3MiBjb3B5bmVnYXRlICAjN2MwM2ZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjI3MyBjb3B5bmVnYXRlICAjN2MwMGZmM2ZjZmYzZmZmZiAgLT4gI2ZjMDBmZjNmY2ZmM2ZmZmYNCi1kZGNhbjI3NCBjb3B5bmVnYXRlICAjN2QwMGZmM2ZjZmYzZmNmZiAgLT4gI2ZkMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjI3NSBjb3B5bmVnYXRlICAjN2MwNGZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDRmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFODQotZGRjYW4yNzYgY29weW5lZ2F0ZSAgIzdlMDBmZjNmY2ZmZmZjZmYgIC0+ICNmZTAwZmYzZmNmZmZmY2ZmDQotZGRjYW4yNzcgY29weW5lZ2F0ZSAgIzdlNDBmZjNmY2ZmM2ZjZmYgIC0+ICNmZTQwZmYzZmNmZjNmY2ZmDQotLS0gSW5mDQotZGRjYW4yNzggY29weW5lZ2F0ZSAgIzdhMDAwMDAwMDAwMDAwMDAgIC0+ICNmYTAwMDAwMDAwMDAwMDAwDQotZGRjYW4yNzkgY29weW5lZ2F0ZSAgIzc4MDAyMDAwMDAwMDAwMDAgIC0+ICNmODAwMjAwMDAwMDAwMDAwDQotDQotLS0tLS0gQ29weVNpZ246IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCi0tLSBmaW5pdGVzDQotZGRjYW4yODAgY29weXNpZ24gICM3N2ZmZmYzZmNmZjNmY2ZmIC0xIC0+ICNmN2ZmZmYzZmNmZjNmY2ZmDQotZGRjYW4yODEgY29weXNpZ24gICM3N2ZjZmYzZmRmZjNmY2ZmICAxIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmDQotLS0gTmFOcw0KLWRkY2FuMjgyIGNvcHlzaWduICAjN2MwM2ZmM2ZjZmYzZmNmZiAtMSAtPiAjZmMwM2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMjgzIGNvcHlzaWduICAjN2MwMGZmM2ZjZmYzZmZmZiAgMSAtPiAjN2MwMGZmM2ZjZmYzZmZmZg0KLWRkY2FuMjg0IGNvcHlzaWduICAjN2QwMGZmM2ZjZmYzZmNmZiAtMSAtPiAjZmQwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMjg1IGNvcHlzaWduICAjN2MwNGZmM2ZjZmYzZmNmZiAgMSAtPiAjN2MwNGZmM2ZjZmYzZmNmZg0KLS0tIHNOYU4NCi1kZGNhbjI4NiBjb3B5c2lnbiAgIzdlMDBmZjNmY2ZmZmZjZmYgLTEgLT4gI2ZlMDBmZjNmY2ZmZmZjZmYNCi1kZGNhbjI4NyBjb3B5c2lnbiAgIzdlNDBmZjNmY2ZmM2ZjZmYgIDEgLT4gIzdlNDBmZjNmY2ZmM2ZjZmYNCi0tLSBJbmYNCi1kZGNhbjI4OCBjb3B5c2lnbiAgIzdhMDAwMDAwMDAwMDAwMDAgLTEgLT4gI2ZhMDAwMDAwMDAwMDAwMDANCi1kZGNhbjI4OSBjb3B5c2lnbiAgIzc4MDAyMDAwMDAwMDAwMDAgIDEgLT4gIzc4MDAyMDAwMDAwMDAwMDANCi0NCi0tLS0tLSBNdWx0aXBseToNCi0tLSBGaW5pdGVzOiBuZXV0cmFsIDANCi1kZGNhbjMwMiBtdWx0aXBseSAgMSAgICAgICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMzAzIG11bHRpcGx5ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgIDEgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotLS0gbmVnYXRpdmUNCi1kZGNhbjMwNiBtdWx0aXBseSAtMSAgICAgICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMzA3IG11bHRpcGx5ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgLTEgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmDQotLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kZGNhbjMxMSBtdWx0aXBseSAgMSAgIzdjMDNmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMzEyIG11bHRpcGx5ICAgICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQotZGRjYW4zMTMgbXVsdGlwbHkgIDEgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjMxNCBtdWx0aXBseSAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLS0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KLWRkY2FuMzE1IG11bHRpcGx5ICAxICAjN2UwMGZmZmZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotZGRjYW4zMTYgbXVsdGlwbHkgICAgICM3ZTAwZmZmZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQotZGRjYW4zMTcgbXVsdGlwbHkgIDEgICM3ZTgwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNhbjMxOCBtdWx0aXBseSAgICAgIzdlODBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMNCi1kZGNhbjMyMCBtdWx0aXBseSAgMSAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMzIxIG11bHRpcGx5ICAgICAjNzg4MDAwMDAwMDAwMDAwMCAgMSAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cw0KLWRkY2FuMzIyIG11bHRpcGx5ICAxICAjNzgwMjAwMDAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjMyMyBtdWx0aXBseSAgICAgIzc4MDIwMDAwMDAwMDAwMDAgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4zMjQgbXVsdGlwbHkgIDEgICM3ODAwMDAwMDAwMDAwMDAxICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMzI1IG11bHRpcGx5ICAgICAjNzgwMDAwMDAwMDAwMDAwMSAgMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjMyNiBtdWx0aXBseSAgMSAgIzc4MDAwMDIwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4zMjcgbXVsdGlwbHkgICAgICM3ODAwMDAyMDAwMDAwMDAwICAxICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tLS0tIFF1YW50aXplOg0KLWRkY2FuNDAxIHF1YW50aXplICAjNmUzOGZmM2ZmZmYzZmNmZiAxICAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmDQotZGRjYW40MDIgcXVhbnRpemUgICM2ZTM4ZmYzZmNmZjNmZGZmIDAgICAgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYNCi1kZGNhbjQwMyBxdWFudGl6ZSAgIzc4ODAwMDAwMDAwMDAwMDAgSW5mICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuNDA0IHF1YW50aXplICAjNzgwMjAwMDAwMDAwMDAwMCAtSW5mIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW40MTAgcXVhbnRpemUgICM3YzAzZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjQxMSBxdWFudGl6ZSAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuNDEyIHF1YW50aXplICAjN2M0MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW40MTMgcXVhbnRpemUgICM3YzQwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjQxNCBxdWFudGl6ZSAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY2FuNDE1IHF1YW50aXplICAjN2UwMGZmZmZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotZGRjYW40MTYgcXVhbnRpemUgICM3ZTgwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNhbjQxNyBxdWFudGl6ZSAgIzdlODBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tLS0tIFN1YnRyYWN0Og0KLS0tIEZpbml0ZXM6IG5ldXRyYWwgMA0KLWRkY2FuNTAyIHN1YnRyYWN0ICAwRSszODQgIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW41MDMgc3VidHJhY3QgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRSszODQgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi0tLSB0aW55IHplcm8NCi1kZGNhbjUwNCBzdWJ0cmFjdCAgMEUtMzk4ICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkDQotZGRjYW41MDUgc3VidHJhY3QgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRS0zOTggLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KLS0tIHRpbnkgbm9uIHplcm8NCi1kZGNhbjUwNiBzdWJ0cmFjdCAtMUUtMzk4ICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkDQotZGRjYW41MDcgc3VidHJhY3QgICAgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAtMUUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZA0KLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZGRjYW41MTEgc3VidHJhY3QgIDAgICM3YzAzZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjUxMiBzdWJ0cmFjdCAgICAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLS0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRkY2FuNTEzIHN1YnRyYWN0ICAwICAjN2M0MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW41MTQgc3VidHJhY3QgICAgICM3YzQwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kZGNhbjUxNSBzdWJ0cmFjdCAgMCAgIzdlMDBmZmZmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY2FuNTE2IHN1YnRyYWN0ICAgICAjN2UwMGZmZmZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRkY2FuNTE3IHN1YnRyYWN0ICAwICAjN2U4MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotZGRjYW41MTggc3VidHJhY3QgICAgICM3ZTgwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZGRjYW41MjAgc3VidHJhY3QgIDAgICM3ODgwMDAwMDAwMDAwMDAwICAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjUyMSBzdWJ0cmFjdCAgICAgIzc4ODAwMDAwMDAwMDAwMDAgIDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLS0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMNCi1kZGNhbjUyMiBzdWJ0cmFjdCAgMCAgIzc4MDIwMDAwMDAwMDAwMDAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwDQotZGRjYW41MjMgc3VidHJhY3QgICAgICM3ODAyMDAwMDAwMDAwMDAwICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuNTI0IHN1YnRyYWN0ICAwICAjNzgwMDAwMDAwMDAwMDAwMSAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjUyNSBzdWJ0cmFjdCAgICAgIzc4MDAwMDAwMDAwMDAwMDEgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW41MjYgc3VidHJhY3QgIDAgICM3ODAwMDAyMDAwMDAwMDAwICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuNTI3IHN1YnRyYWN0ICAgICAjNzgwMDAwMjAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi0NCi0tLS0tLSBUb0ludGVncmFsOg0KLWRkY2FuNjAxIHRvaW50ZWdyYWx4ICAjNmUzOGZmM2ZmZmYzZmNmZiAtPiAjNmUzOGZmM2ZjZmYzZmNmZg0KLWRkY2FuNjAyIHRvaW50ZWdyYWx4ICAjNmUzOGZmM2ZjZmYzZmRmZiAtPiAjNmUzOGZmM2ZjZmYzZmNmZg0KLWRkY2FuNjAzIHRvaW50ZWdyYWx4ICAjNzg4MDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuNjA0IHRvaW50ZWdyYWx4ICAjNzgwMjAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuNjEwIHRvaW50ZWdyYWx4ICAjN2MwM2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuNjExIHRvaW50ZWdyYWx4ICAjN2MwM2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuNjEyIHRvaW50ZWdyYWx4ICAjN2M0MGZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuNjEzIHRvaW50ZWdyYWx4ICAjN2M0MGZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuNjE0IHRvaW50ZWdyYWx4ICAjN2UwMGZmZmZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY2FuNjE1IHRvaW50ZWdyYWx4ICAjN2UwMGZmZmZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY2FuNjE2IHRvaW50ZWdyYWx4ICAjN2U4MGZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY2FuNjE3IHRvaW50ZWdyYWx4ICAjN2U4MGZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHVuY2Fub25pY2FsIDM5OTksIDM5Ljk5LCAzLjk5LCAwLjM5OSwgYW5kIG5lZ2F0aXZlcw0KLWRkY2FuNjE4IHRvaW50ZWdyYWx4ICAjMjIzODAwMDAwMDAwMGZmZiAtPiAjMjIzODAwMDAwMDAwMGNmZg0KLWRkY2FuNjE5IHRvaW50ZWdyYWx4ICAjMjIzMDAwMDAwMDAwMGZmZiAtPiAjMjIzODAwMDAwMDAwMDA0MCBJbmV4YWN0IFJvdW5kZWQNCi1kZGNhbjYyMCB0b2ludGVncmFseCAgIzIyMmMwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwMDQgSW5leGFjdCBSb3VuZGVkDQotZGRjYW42MjEgdG9pbnRlZ3JhbHggICMyMjI4MDAwMDAwMDAwZmZmIC0+ICMyMjM4MDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkY2FuNjIyIHRvaW50ZWdyYWx4ICAjYTIzODAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMGNmZg0KLWRkY2FuNjIzIHRvaW50ZWdyYWx4ICAjYTIzMDAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDA0MCBJbmV4YWN0IFJvdW5kZWQNCi1kZGNhbjYyNCB0b2ludGVncmFseCAgI2EyMmMwMDAwMDAwMDBmZmYgLT4gI2EyMzgwMDAwMDAwMDAwMDQgSW5leGFjdCBSb3VuZGVkDQotZGRjYW42MjUgdG9pbnRlZ3JhbHggICNhMjI4MDAwMDAwMDAwZmZmIC0+ICNhMjM4MDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRDYW5vbmljYWwuZGVjVGVzdCAtLSB0ZXN0IGRlY0RvdWJsZSBjYW5vbmljYWwgcmVzdWx0cyAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIGZpbGUgdGVzdHMgdGhhdCBjb3B5IG9wZXJhdGlvbnMgbGVhdmUgdW5jYW5vbmljYWwgb3BlcmFuZHMKKy0tIHVuY2hhbmdlZCwgYW5kIHZpY2UgdmVyc2EKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBVbmNhbm9uaWNhbCBkZWNsZXRzIGFyZTogYWJjLCB3aGVyZToKKy0tICAgYT0xLDIsMworLS0gICBiPTYsNyxlLGYKKy0tICAgYz1lLGYKKworLS0gYXNzZXJ0IHNvbWUgc3RhbmRhcmQgKGNhbm9uaWNhbCkgdmFsdWVzOyB0aGlzIHRlc3RzIHRoYXQgRnJvbVN0cmluZworLS0gcHJvZHVjZXMgY2Fub25pY2FsIHJlc3VsdHMgKG1hbnkgbW9yZSBpbiBkZWNpbWFsTk4pCitkZGNhbjAwMSBhcHBseSA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAwMiBhcHBseSAwICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAwCitkZGNhbjAwMyBhcHBseSAxICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAxCitkZGNhbjAwNCBhcHBseSAtMSAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDAxCitkZGNhbjAwNSBhcHBseSBJbmZpbml0eSAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjAwNiBhcHBseSAtSW5maW5pdHkgICAgICAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZGNhbjAwNyBhcHBseSAtTmFOICAgICAgICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwCitkZGNhbjAwOCBhcHBseSAtc05hTiAgICAgICAgICAgICAgICAgIC0+ICNmZTAwMDAwMDAwMDAwMDAwCitkZGNhbjAwOSBhcHBseSBOYU45OTk5OTk5OTk5OTk5OTkgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjAxMCBhcHBseSBzTmFOOTk5OTk5OTk5OTk5OTk5ICAgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZWNhbjAxMSBhcHBseSAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCitkZGNhbjAxMiBhcHBseSA3LjUwICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwM2QwCitkZGNhbjAxMyBhcHBseSA5Ljk5ICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwMGZmCisKKy0tIEJhc2UgdGVzdHMgZm9yIGNhbm9uaWNhbCBlbmNvZGluZ3MgKGluZGl2aWR1YWwgb3BlcmF0b3IKKy0tIHByb3BhZ2F0aW9uIGlzIHRlc3RlZCBsYXRlcikKKworLS0gRmluaXRlczogZGVjbGV0cyBpbiBjb2VmZmljaWVudAorZGRjYW4wMjEgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDIyIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAyMyBjYW5vbmljYWwgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMjQgY2Fub25pY2FsICAjNzdmZmZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDI1IGNhbm9uaWNhbCAgIzc3ZmNmZmZmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAyNiBjYW5vbmljYWwgICM3N2ZjZmZmZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMjcgY2Fub25pY2FsICAjNzdmY2ZmM2ZmZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDI4IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZmZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAzMCBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZmZmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMzEgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmZmZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDMyIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZmZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAzMyBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmZmZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMzUgY2Fub25pY2FsICAjNzdmY2ZmM2ZkZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDM2IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZWZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCisKKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjEwMCBjYW5vbmljYWwgIE5hTjk5OTk5OTk5OTk5OTk5OSAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMDEgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTAyIGNhbm9uaWNhbCAgIzdjMDNmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjEwMyBjYW5vbmljYWwgICM3YzAwZmZmZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMDQgY2Fub25pY2FsICAjN2MwMGZmM2ZmZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTA1IGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmZmZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjEwNiBjYW5vbmljYWwgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMDcgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmZmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW4xMTAgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTEyIGNhbm9uaWNhbCAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjExMyBjYW5vbmljYWwgICM3YzgwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMTQgY2Fub25pY2FsICAjN2M0MGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTE1IGNhbm9uaWNhbCAgIzdjMjBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjExNiBjYW5vbmljYWwgICM3YzEwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMTcgY2Fub25pY2FsICAjN2MwOGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTE4IGNhbm9uaWNhbCAgIzdjMDRmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCisKKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZGRjYW4xMjAgY2Fub25pY2FsIHNOYU45OTk5OTk5OTk5OTk5OTkgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTIxIGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEyMiBjYW5vbmljYWwgICM3ZTAzZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMjMgY2Fub25pY2FsICAjN2UwMGZmZmZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTI0IGNhbm9uaWNhbCAgIzdlMDBmZjNmZmZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEyNSBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMjYgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmYzZmZmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTI3IGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCistLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkZGNhbjEzMCBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMzIgY2Fub25pY2FsICAjN2YwMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTMzIGNhbm9uaWNhbCAgIzdlODBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEzNCBjYW5vbmljYWwgICM3ZTQwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMzUgY2Fub25pY2FsICAjN2UyMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTM2IGNhbm9uaWNhbCAgIzdlMTBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEzNyBjYW5vbmljYWwgICM3ZTA4ZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMzggY2Fub25pY2FsICAjN2UwNGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKKworLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZGRjYW4xNDAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTQxIGNhbm9uaWNhbCAgIzc5MDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0MiBjYW5vbmljYWwgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNDMgY2Fub25pY2FsICAjNzg4MDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTQ0IGNhbm9uaWNhbCAgIzc4NDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0NSBjYW5vbmljYWwgICM3ODIwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNDYgY2Fub25pY2FsICAjNzgxMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTQ3IGNhbm9uaWNhbCAgIzc4MDgwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0OCBjYW5vbmljYWwgICM3ODA0MDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzIChmaXJzdCwgbGFzdCwgYW5kIGEgZmV3IG90aGVycykKK2RkY2FuMTUwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1MSBjYW5vbmljYWwgICM3ODAyMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTUzIGNhbm9uaWNhbCAgIzc4MDEwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1NCBjYW5vbmljYWwgICM3ODAwMjAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTUgY2Fub25pY2FsICAjNzgwMDA4MDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTU2IGNhbm9uaWNhbCAgIzc4MDAwMDIwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1NyBjYW5vbmljYWwgICM3ODAwMDAwNDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTggY2Fub25pY2FsICAjNzgwMDAwMDA0MDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTU5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDgwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE2MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwNDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNjEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAyMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTYyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDgwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE2MyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMjAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNjQgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDA0MCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTY1IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDggIC0+ICM3ODAwMDAwMDAwMDAwMDAwCisKKworLS0gTm93IHRoZSBvcGVyYXRvcnMgLS0gdHJ5aW5nIHRvIGNoZWNrIHBhdGhzIHRoYXQgbWlnaHQgZmFpbCB0bworLS0gY2Fub25pY2FsaXplIHByb3BhZ2F0ZWQgb3BlcmFuZHMKKworLS0tLS0gQWRkOgorLS0gRmluaXRlczogbmV1dHJhbCAwCitkZGNhbjIwMiBhZGQgIDBFKzM4NCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMjAzIGFkZCAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmIDBFKzM4NCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorLS0gdGlueSB6ZXJvCitkZGNhbjIwNCBhZGQgIDBFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorZGRjYW4yMDUgYWRkICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKKy0tIHRpbnkgbm9uIHplcm8KK2RkY2FuMjA2IGFkZCAtMUUtMzk4ICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkCitkZGNhbjIwNyBhZGQgICAgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAtMUUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuMjExIGFkZCAgMCAgIzdjMDNmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4yMTIgYWRkICAgICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RkY2FuMjEzIGFkZCAgMCAgIzdjNDBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4yMTQgYWRkICAgICAjN2M0MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuMjE1IGFkZCAgMCAgIzdlMDBmZmZmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW4yMTYgYWRkICAgICAjN2UwMGZmZmZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCistLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkZGNhbjIxNyBhZGQgIDAgICM3ZTgwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuMjE4IGFkZCAgICAgIzdlODBmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZGRjYW4yMjAgYWRkICAwICAjNzg4MDAwMDAwMDAwMDAwMCAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjIyMSBhZGQgICAgICM3ODgwMDAwMDAwMDAwMDAwICAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuMjIyIGFkZCAgMCAgIzc4MDIwMDAwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjIyMyBhZGQgICAgICM3ODAyMDAwMDAwMDAwMDAwICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4yMjQgYWRkICAwICAjNzgwMDAwMDAwMDAwMDAwMSAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMjI1IGFkZCAgICAgIzc4MDAwMDAwMDAwMDAwMDEgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjIyNiBhZGQgIDAgICM3ODAwMDAyMDAwMDAwMDAwICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4yMjcgYWRkICAgICAjNzgwMDAwMjAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKworLS0tLS0gQ2xhc3M6IFtkb2VzIG5vdCByZXR1cm4gZW5jb2RlZF0KKworLS0tLS0gQ29tcGFyZToKK2RkY2FuMjMxIGNvbXBhcmUgLUluZiAgIDEgICAgIC0+ICAjYTIzODAwMDAwMDAwMDAwMQorZGRjYW4yMzIgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAwCitkZGNhbjIzMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgIzIyMzgwMDAwMDAwMDAwMDEKK2RkY2FuMjM0IGNvbXBhcmUgICM3YzAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjM1IGNvbXBhcmUgICM3ZTAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIENvbXBhcmVTaWc6CitkZGNhbjI0MSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAgI2EyMzgwMDAwMDAwMDAwMDEKK2RkY2FuMjQyIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMAorZGRjYW4yNDMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAxCitkZGNhbjI0NCBjb21wYXJlc2lnICAjN2MwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW4yNDUgY29tcGFyZXNpZyAgIzdlMDBmZjNmZmZmM2ZjZmYgLTEwMDAgIC0+ICAjN2MwMGZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0tLS0gQ29weTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZGRjYW4yNTAgY29weSAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZmZmYzZmNmZjNmY2ZmCitkZGNhbjI1MSBjb3B5ICAjNzdmY2ZmM2ZkZmYzZmNmZiAgLT4gIzc3ZmNmZjNmZGZmM2ZjZmYKKy0tIE5hTnMKK2RkY2FuMjUyIGNvcHkgICM3YzAzZmYzZmNmZjNmY2ZmICAtPiAjN2MwM2ZmM2ZjZmYzZmNmZgorZGRjYW4yNTMgY29weSAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmZmZmCitkZGNhbjI1NCBjb3B5ICAjN2QwMGZmM2ZjZmYzZmNmZiAgLT4gIzdkMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjU1IGNvcHkgICM3YzA0ZmYzZmNmZjNmY2ZmICAtPiAjN2MwNGZmM2ZjZmYzZmNmZgorLS0gc05hTgorZGRjYW4yNTYgY29weSAgIzdlMDBmZjNmY2ZmZmZjZmYgIC0+ICM3ZTAwZmYzZmNmZmZmY2ZmCitkZGNhbjI1NyBjb3B5ICAjN2U0MGZmM2ZjZmYzZmNmZiAgLT4gIzdlNDBmZjNmY2ZmM2ZjZmYKKy0tIEluZgorZGRjYW4yNTggY29weSAgIzdhMDAwMDAwMDAwMDAwMDAgIC0+ICM3YTAwMDAwMDAwMDAwMDAwCitkZGNhbjI1OSBjb3B5ICAjNzgwMDIwMDAwMDAwMDAwMCAgLT4gIzc4MDAyMDAwMDAwMDAwMDAKKworLS0tLS0gQ29weUFiczogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZGRjYW4yNjAgY29weWFicyAgI2Y3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZmZmYzZmNmZjNmY2ZmCitkZGNhbjI2MSBjb3B5YWJzICAjZjdmY2ZmM2ZkZmYzZmNmZiAgLT4gIzc3ZmNmZjNmZGZmM2ZjZmYKKy0tIE5hTnMKK2RkY2FuMjYyIGNvcHlhYnMgICNmYzAzZmYzZmNmZjNmY2ZmICAtPiAjN2MwM2ZmM2ZjZmYzZmNmZgorZGRjYW4yNjMgY29weWFicyAgI2ZjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmZmZmCitkZGNhbjI2NCBjb3B5YWJzICAjZmQwMGZmM2ZjZmYzZmNmZiAgLT4gIzdkMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjY1IGNvcHlhYnMgICNmYzA0ZmYzZmNmZjNmY2ZmICAtPiAjN2MwNGZmM2ZjZmYzZmNmZgorLS0gc05hTgorZGRjYW4yNjYgY29weWFicyAgI2ZlMDBmZjNmY2ZmZmZjZmYgIC0+ICM3ZTAwZmYzZmNmZmZmY2ZmCitkZGNhbjI2NyBjb3B5YWJzICAjZmU0MGZmM2ZjZmYzZmNmZiAgLT4gIzdlNDBmZjNmY2ZmM2ZjZmYKKy0tIEluZgorZGRjYW4yNjggY29weWFicyAgI2ZhMDAwMDAwMDAwMDAwMDAgIC0+ICM3YTAwMDAwMDAwMDAwMDAwCitkZGNhbjI2OSBjb3B5YWJzICAjZjgwMDIwMDAwMDAwMDAwMCAgLT4gIzc4MDAyMDAwMDAwMDAwMDAKKworLS0tLS0gQ29weU5lZ2F0ZTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZGRjYW4yNzAgY29weW5lZ2F0ZSAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICNmN2ZmZmYzZmNmZjNmY2ZmCitkZGNhbjI3MSBjb3B5bmVnYXRlICAjNzdmY2ZmM2ZkZmYzZmNmZiAgLT4gI2Y3ZmNmZjNmZGZmM2ZjZmYKKy0tIE5hTnMKK2RkY2FuMjcyIGNvcHluZWdhdGUgICM3YzAzZmYzZmNmZjNmY2ZmICAtPiAjZmMwM2ZmM2ZjZmYzZmNmZgorZGRjYW4yNzMgY29weW5lZ2F0ZSAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICNmYzAwZmYzZmNmZjNmZmZmCitkZGNhbjI3NCBjb3B5bmVnYXRlICAjN2QwMGZmM2ZjZmYzZmNmZiAgLT4gI2ZkMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjc1IGNvcHluZWdhdGUgICM3YzA0ZmYzZmNmZjNmY2ZmICAtPiAjZmMwNGZmM2ZjZmYzZmNmZgorLS0gc05hTgorZGRjYW4yNzYgY29weW5lZ2F0ZSAgIzdlMDBmZjNmY2ZmZmZjZmYgIC0+ICNmZTAwZmYzZmNmZmZmY2ZmCitkZGNhbjI3NyBjb3B5bmVnYXRlICAjN2U0MGZmM2ZjZmYzZmNmZiAgLT4gI2ZlNDBmZjNmY2ZmM2ZjZmYKKy0tIEluZgorZGRjYW4yNzggY29weW5lZ2F0ZSAgIzdhMDAwMDAwMDAwMDAwMDAgIC0+ICNmYTAwMDAwMDAwMDAwMDAwCitkZGNhbjI3OSBjb3B5bmVnYXRlICAjNzgwMDIwMDAwMDAwMDAwMCAgLT4gI2Y4MDAyMDAwMDAwMDAwMDAKKworLS0tLS0gQ29weVNpZ246IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RkY2FuMjgwIGNvcHlzaWduICAjNzdmZmZmM2ZjZmYzZmNmZiAtMSAtPiAjZjdmZmZmM2ZjZmYzZmNmZgorZGRjYW4yODEgY29weXNpZ24gICM3N2ZjZmYzZmRmZjNmY2ZmICAxIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmCistLSBOYU5zCitkZGNhbjI4MiBjb3B5c2lnbiAgIzdjMDNmZjNmY2ZmM2ZjZmYgLTEgLT4gI2ZjMDNmZjNmY2ZmM2ZjZmYKK2RkY2FuMjgzIGNvcHlzaWduICAjN2MwMGZmM2ZjZmYzZmZmZiAgMSAtPiAjN2MwMGZmM2ZjZmYzZmZmZgorZGRjYW4yODQgY29weXNpZ24gICM3ZDAwZmYzZmNmZjNmY2ZmIC0xIC0+ICNmZDAwZmYzZmNmZjNmY2ZmCitkZGNhbjI4NSBjb3B5c2lnbiAgIzdjMDRmZjNmY2ZmM2ZjZmYgIDEgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RkY2FuMjg2IGNvcHlzaWduICAjN2UwMGZmM2ZjZmZmZmNmZiAtMSAtPiAjZmUwMGZmM2ZjZmZmZmNmZgorZGRjYW4yODcgY29weXNpZ24gICM3ZTQwZmYzZmNmZjNmY2ZmICAxIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RkY2FuMjg4IGNvcHlzaWduICAjN2EwMDAwMDAwMDAwMDAwMCAtMSAtPiAjZmEwMDAwMDAwMDAwMDAwMAorZGRjYW4yODkgY29weXNpZ24gICM3ODAwMjAwMDAwMDAwMDAwICAxIC0+ICM3ODAwMjAwMDAwMDAwMDAwCisKKy0tLS0tIE11bHRpcGx5OgorLS0gRmluaXRlczogbmV1dHJhbCAwCitkZGNhbjMwMiBtdWx0aXBseSAgMSAgICAgICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4zMDMgbXVsdGlwbHkgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAgMSAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKKy0tIG5lZ2F0aXZlCitkZGNhbjMwNiBtdWx0aXBseSAtMSAgICAgICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4zMDcgbXVsdGlwbHkgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAtMSAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjMxMSBtdWx0aXBseSAgMSAgIzdjMDNmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4zMTIgbXVsdGlwbHkgICAgICM3YzAzZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW4zMTMgbXVsdGlwbHkgIDEgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMzE0IG11bHRpcGx5ICAgICAjN2M0MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuMzE1IG11bHRpcGx5ICAxICAjN2UwMGZmZmZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjMxNiBtdWx0aXBseSAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW4zMTcgbXVsdGlwbHkgIDEgICM3ZTgwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuMzE4IG11bHRpcGx5ICAgICAjN2U4MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCistLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkZGNhbjMyMCBtdWx0aXBseSAgMSAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4zMjEgbXVsdGlwbHkgICAgICM3ODgwMDAwMDAwMDAwMDAwICAxICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuMzIyIG11bHRpcGx5ICAxICAjNzgwMjAwMDAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzIzIG11bHRpcGx5ICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzI0IG11bHRpcGx5ICAxICAjNzgwMDAwMDAwMDAwMDAwMSAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzI1IG11bHRpcGx5ICAgICAjNzgwMDAwMDAwMDAwMDAwMSAgMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzI2IG11bHRpcGx5ICAxICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzI3IG11bHRpcGx5ICAgICAjNzgwMDAwMjAwMDAwMDAwMCAgMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKworLS0tLS0gUXVhbnRpemU6CitkZGNhbjQwMSBxdWFudGl6ZSAgIzZlMzhmZjNmZmZmM2ZjZmYgMSAgICAtPiAjNmUzOGZmM2ZjZmYzZmNmZgorZGRjYW40MDIgcXVhbnRpemUgICM2ZTM4ZmYzZmNmZjNmZGZmIDAgICAgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYKK2RkY2FuNDAzIHF1YW50aXplICAjNzg4MDAwMDAwMDAwMDAwMCBJbmYgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjQwNCBxdWFudGl6ZSAgIzc4MDIwMDAwMDAwMDAwMDAgLUluZiAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW40MTAgcXVhbnRpemUgICM3YzAzZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNDExIHF1YW50aXplICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjQxMiBxdWFudGl6ZSAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW40MTMgcXVhbnRpemUgICM3YzQwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNDE0IHF1YW50aXplICAjN2UwMGZmZmZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjQxNSBxdWFudGl6ZSAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW40MTYgcXVhbnRpemUgICM3ZTgwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNDE3IHF1YW50aXplICAjN2U4MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIFN1YnRyYWN0OgorLS0gRmluaXRlczogbmV1dHJhbCAwCitkZGNhbjUwMiBzdWJ0cmFjdCAgMEUrMzg0ICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZgorZGRjYW41MDMgc3VidHJhY3QgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRSszODQgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKKy0tIHRpbnkgemVybworZGRjYW41MDQgc3VidHJhY3QgIDBFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorZGRjYW41MDUgc3VidHJhY3QgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRS0zOTggLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorLS0gdGlueSBub24gemVybworZGRjYW41MDYgc3VidHJhY3QgLTFFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorZGRjYW41MDcgc3VidHJhY3QgICAgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAtMUUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuNTExIHN1YnRyYWN0ICAwICAjN2MwM2ZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjUxMiBzdWJ0cmFjdCAgICAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkZGNhbjUxMyBzdWJ0cmFjdCAgMCAgIzdjNDBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW41MTQgc3VidHJhY3QgICAgICM3YzQwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZGRjYW41MTUgc3VidHJhY3QgIDAgICM3ZTAwZmZmZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNTE2IHN1YnRyYWN0ICAgICAjN2UwMGZmZmZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCistLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkZGNhbjUxNyBzdWJ0cmFjdCAgMCAgIzdlODBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW41MTggc3VidHJhY3QgICAgICM3ZTgwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuNTIwIHN1YnRyYWN0ICAwICAjNzg4MDAwMDAwMDAwMDAwMCAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZGNhbjUyMSBzdWJ0cmFjdCAgICAgIzc4ODAwMDAwMDAwMDAwMDAgIDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cworZGRjYW41MjIgc3VidHJhY3QgIDAgICM3ODAyMDAwMDAwMDAwMDAwICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGRjYW41MjMgc3VidHJhY3QgICAgICM3ODAyMDAwMDAwMDAwMDAwICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW41MjQgc3VidHJhY3QgIDAgICM3ODAwMDAwMDAwMDAwMDAxICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGRjYW41MjUgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDAwMDAxICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW41MjYgc3VidHJhY3QgIDAgICM3ODAwMDAyMDAwMDAwMDAwICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGRjYW41Mjcgc3VidHJhY3QgICAgICM3ODAwMDAyMDAwMDAwMDAwICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorCistLS0tLSBUb0ludGVncmFsOgorZGRjYW42MDEgdG9pbnRlZ3JhbHggICM2ZTM4ZmYzZmZmZjNmY2ZmIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCitkZGNhbjYwMiB0b2ludGVncmFseCAgIzZlMzhmZjNmY2ZmM2ZkZmYgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYKK2RkY2FuNjAzIHRvaW50ZWdyYWx4ICAjNzg4MDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW42MDQgdG9pbnRlZ3JhbHggICM3ODAyMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjYxMCB0b2ludGVncmFseCAgIzdjMDNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNjExIHRvaW50ZWdyYWx4ICAjN2MwM2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW42MTIgdG9pbnRlZ3JhbHggICM3YzQwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjYxMyB0b2ludGVncmFseCAgIzdjNDBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNjE0IHRvaW50ZWdyYWx4ICAjN2UwMGZmZmZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW42MTUgdG9pbnRlZ3JhbHggICM3ZTAwZmZmZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjYxNiB0b2ludGVncmFseCAgIzdlODBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNjE3IHRvaW50ZWdyYWx4ICAjN2U4MGZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdW5jYW5vbmljYWwgMzk5OSwgMzkuOTksIDMuOTksIDAuMzk5LCBhbmQgbmVnYXRpdmVzCitkZGNhbjYxOCB0b2ludGVncmFseCAgIzIyMzgwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDBjZmYKK2RkY2FuNjE5IHRvaW50ZWdyYWx4ICAjMjIzMDAwMDAwMDAwMGZmZiAtPiAjMjIzODAwMDAwMDAwMDA0MCBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNjIwIHRvaW50ZWdyYWx4ICAjMjIyYzAwMDAwMDAwMGZmZiAtPiAjMjIzODAwMDAwMDAwMDAwNCBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNjIxIHRvaW50ZWdyYWx4ICAjMjIyODAwMDAwMDAwMGZmZiAtPiAjMjIzODAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNjIyIHRvaW50ZWdyYWx4ICAjYTIzODAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMGNmZgorZGRjYW42MjMgdG9pbnRlZ3JhbHggICNhMjMwMDAwMDAwMDAwZmZmIC0+ICNhMjM4MDAwMDAwMDAwMDQwIEluZXhhY3QgUm91bmRlZAorZGRjYW42MjQgdG9pbnRlZ3JhbHggICNhMjJjMDAwMDAwMDAwZmZmIC0+ICNhMjM4MDAwMDAwMDAwMDA0IEluZXhhY3QgUm91bmRlZAorZGRjYW42MjUgdG9pbnRlZ3JhbHggICNhMjI4MDAwMDAwMDAwZmZmIC0+ICNhMjM4MDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCisKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2xhc3MuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENsYXNzLmRlY1Rlc3QKaW5kZXggYTFkMjMzYi4uYmIzNGM0MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2xhc3MuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDbGFzcy5kZWNUZXN0CkBAIC0xLDc2ICsxLDc2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZENsYXNzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIENsYXNzIG9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gW05ldyAyMDA2LjExLjI3XQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZGRjbGEwMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KLWRkY2xhMDAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCi1kZGNsYTAwMyAgY2xhc3MgICAgMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQotZGRjbGEwMDQgIGNsYXNzICAgIDFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsDQotZGRjbGEwMDUgIGNsYXNzICAwLjFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsDQotZGRjbGEwMDYgIGNsYXNzICAwLjk5OTk5OTk5OTk5OTk5OUUtMzgzICAgICAtPiArU3Vibm9ybWFsDQotZGRjbGEwMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtPiArTm9ybWFsDQotZGRjbGEwMDggIGNsYXNzICAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZGRjbGEwMDkgIGNsYXNzICAgMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZGRjbGEwMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZGRjbGEwMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZGRjbGEwMTMgIGNsYXNzICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZGRjbGEwMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZGRjbGEwMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZGRjbGEwMTYgIGNsYXNzICAgMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZGRjbGEwMTcgIGNsYXNzICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZGRjbGEwMTggIGNsYXNzICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiArTm9ybWFsDQotZGRjbGEwMTkgIGNsYXNzICAgSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiArSW5maW5pdHkNCi0NCi1kZGNsYTAyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQotZGRjbGEwMjIgIGNsYXNzICAgLTAuMDAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KLWRkY2xhMDIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCi1kZGNsYTAyNCAgY2xhc3MgICAtMUUtMzk2ICAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwNCi1kZGNsYTAyNSAgY2xhc3MgIC0wLjFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwNCi1kZGNsYTAyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OUUtMzgzICAgIC0+IC1TdWJub3JtYWwNCi1kZGNsYTAyNyAgY2xhc3MgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAyOCAgY2xhc3MgIC0xRS0zODMgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAzMiAgY2xhc3MgIC0xRS0xICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAzNSAgY2xhc3MgIC0xMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAzNyAgY2xhc3MgIC0xRSszODQgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAzOCAgY2xhc3MgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIC0+IC1Ob3JtYWwNCi1kZGNsYTAzOSAgY2xhc3MgIC1JbmYgICAgICAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLQ0KLWRkY2xhMDQxICBjbGFzcyAgIE5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFODQotZGRjbGEwNDIgIGNsYXNzICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4NCi1kZGNsYTA0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTg0KLWRkY2xhMDQ0ICBjbGFzcyAgIHNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTg0KLWRkY2xhMDQ1ICBjbGFzcyAgLXNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTg0KLWRkY2xhMDQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTg0KLQ0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRDbGFzcy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBDbGFzcyBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBbTmV3IDIwMDYuMTEuMjddCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRjbGEwMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworZGRjbGEwMDIgIGNsYXNzICAgIDAuMDAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworZGRjbGEwMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworZGRjbGEwMDQgIGNsYXNzICAgIDFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitkZGNsYTAwNSAgY2xhc3MgIDAuMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2RkY2xhMDA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAgLT4gK1N1Ym5vcm1hbAorZGRjbGEwMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtPiArTm9ybWFsCitkZGNsYTAwOCAgY2xhc3MgICAxRS0zODMgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxMiAgY2xhc3MgICAxRS0xICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxNSAgY2xhc3MgICAxMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTcgIGNsYXNzICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxOCAgY2xhc3MgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIC0+ICtOb3JtYWwKK2RkY2xhMDE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5CisKK2RkY2xhMDIxICBjbGFzcyAgIC0wICAgICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2RkY2xhMDIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2RkY2xhMDIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2RkY2xhMDI0ICBjbGFzcyAgIC0xRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorZGRjbGEwMjUgIGNsYXNzICAtMC4xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitkZGNsYTAyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OUUtMzgzICAgIC0+IC1TdWJub3JtYWwKK2RkY2xhMDI3ICBjbGFzcyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgLT4gLU5vcm1hbAorZGRjbGEwMjggIGNsYXNzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDMwICBjbGFzcyAgLTFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDM0ICBjbGFzcyAgLTIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDM3ICBjbGFzcyAgLTFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzggIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiAtTm9ybWFsCitkZGNsYTAzOSAgY2xhc3MgIC1JbmYgICAgICAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorCitkZGNsYTA0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgorZGRjbGEwNDIgIGNsYXNzICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2RkY2xhMDQzICBjbGFzcyAgK05hTjEyMzQ1ICAgICAgICAgICAgICAgICAgLT4gTmFOCitkZGNsYTA0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2RkY2xhMDQ1ICBjbGFzcyAgLXNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgorZGRjbGEwNDYgIGNsYXNzICArc05hTjEyMzQ1ICAgICAgICAgICAgICAgICAtPiBzTmFOCisKKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlLmRlY1Rlc3QKaW5kZXggYTIwYWUyMS4uNmRlYmZjNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmUuZGVjVGVzdApAQCAtMSw3NDQgKzEsNzQ0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZENvbXBhcmUuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbiB0aGF0IGFsbG93cyBxdWlldCBOYU5zICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksDQotLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90DQotLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4NCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRjb20wMDEgY29tcGFyZSAgLTIgIC0yICAtPiAwDQotZGRjb20wMDIgY29tcGFyZSAgLTIgIC0xICAtPiAtMQ0KLWRkY29tMDAzIGNvbXBhcmUgIC0yICAgMCAgLT4gLTENCi1kZGNvbTAwNCBjb21wYXJlICAtMiAgIDEgIC0+IC0xDQotZGRjb20wMDUgY29tcGFyZSAgLTIgICAyICAtPiAtMQ0KLWRkY29tMDA2IGNvbXBhcmUgIC0xICAtMiAgLT4gMQ0KLWRkY29tMDA3IGNvbXBhcmUgIC0xICAtMSAgLT4gMA0KLWRkY29tMDA4IGNvbXBhcmUgIC0xICAgMCAgLT4gLTENCi1kZGNvbTAwOSBjb21wYXJlICAtMSAgIDEgIC0+IC0xDQotZGRjb20wMTAgY29tcGFyZSAgLTEgICAyICAtPiAtMQ0KLWRkY29tMDExIGNvbXBhcmUgICAwICAtMiAgLT4gMQ0KLWRkY29tMDEyIGNvbXBhcmUgICAwICAtMSAgLT4gMQ0KLWRkY29tMDEzIGNvbXBhcmUgICAwICAgMCAgLT4gMA0KLWRkY29tMDE0IGNvbXBhcmUgICAwICAgMSAgLT4gLTENCi1kZGNvbTAxNSBjb21wYXJlICAgMCAgIDIgIC0+IC0xDQotZGRjb20wMTYgY29tcGFyZSAgIDEgIC0yICAtPiAxDQotZGRjb20wMTcgY29tcGFyZSAgIDEgIC0xICAtPiAxDQotZGRjb20wMTggY29tcGFyZSAgIDEgICAwICAtPiAxDQotZGRjb20wMTkgY29tcGFyZSAgIDEgICAxICAtPiAwDQotZGRjb20wMjAgY29tcGFyZSAgIDEgICAyICAtPiAtMQ0KLWRkY29tMDIxIGNvbXBhcmUgICAyICAtMiAgLT4gMQ0KLWRkY29tMDIyIGNvbXBhcmUgICAyICAtMSAgLT4gMQ0KLWRkY29tMDIzIGNvbXBhcmUgICAyICAgMCAgLT4gMQ0KLWRkY29tMDI1IGNvbXBhcmUgICAyICAgMSAgLT4gMQ0KLWRkY29tMDI2IGNvbXBhcmUgICAyICAgMiAgLT4gMA0KLQ0KLWRkY29tMDMxIGNvbXBhcmUgIC0yMCAgLTIwICAtPiAwDQotZGRjb20wMzIgY29tcGFyZSAgLTIwICAtMTAgIC0+IC0xDQotZGRjb20wMzMgY29tcGFyZSAgLTIwICAgMDAgIC0+IC0xDQotZGRjb20wMzQgY29tcGFyZSAgLTIwICAgMTAgIC0+IC0xDQotZGRjb20wMzUgY29tcGFyZSAgLTIwICAgMjAgIC0+IC0xDQotZGRjb20wMzYgY29tcGFyZSAgLTEwICAtMjAgIC0+IDENCi1kZGNvbTAzNyBjb21wYXJlICAtMTAgIC0xMCAgLT4gMA0KLWRkY29tMDM4IGNvbXBhcmUgIC0xMCAgIDAwICAtPiAtMQ0KLWRkY29tMDM5IGNvbXBhcmUgIC0xMCAgIDEwICAtPiAtMQ0KLWRkY29tMDQwIGNvbXBhcmUgIC0xMCAgIDIwICAtPiAtMQ0KLWRkY29tMDQxIGNvbXBhcmUgICAwMCAgLTIwICAtPiAxDQotZGRjb20wNDIgY29tcGFyZSAgIDAwICAtMTAgIC0+IDENCi1kZGNvbTA0MyBjb21wYXJlICAgMDAgICAwMCAgLT4gMA0KLWRkY29tMDQ0IGNvbXBhcmUgICAwMCAgIDEwICAtPiAtMQ0KLWRkY29tMDQ1IGNvbXBhcmUgICAwMCAgIDIwICAtPiAtMQ0KLWRkY29tMDQ2IGNvbXBhcmUgICAxMCAgLTIwICAtPiAxDQotZGRjb20wNDcgY29tcGFyZSAgIDEwICAtMTAgIC0+IDENCi1kZGNvbTA0OCBjb21wYXJlICAgMTAgICAwMCAgLT4gMQ0KLWRkY29tMDQ5IGNvbXBhcmUgICAxMCAgIDEwICAtPiAwDQotZGRjb20wNTAgY29tcGFyZSAgIDEwICAgMjAgIC0+IC0xDQotZGRjb20wNTEgY29tcGFyZSAgIDIwICAtMjAgIC0+IDENCi1kZGNvbTA1MiBjb21wYXJlICAgMjAgIC0xMCAgLT4gMQ0KLWRkY29tMDUzIGNvbXBhcmUgICAyMCAgIDAwICAtPiAxDQotZGRjb20wNTUgY29tcGFyZSAgIDIwICAgMTAgIC0+IDENCi1kZGNvbTA1NiBjb21wYXJlICAgMjAgICAyMCAgLT4gMA0KLQ0KLWRkY29tMDYxIGNvbXBhcmUgIC0yLjAgIC0yLjAgIC0+IDANCi1kZGNvbTA2MiBjb21wYXJlICAtMi4wICAtMS4wICAtPiAtMQ0KLWRkY29tMDYzIGNvbXBhcmUgIC0yLjAgICAwLjAgIC0+IC0xDQotZGRjb20wNjQgY29tcGFyZSAgLTIuMCAgIDEuMCAgLT4gLTENCi1kZGNvbTA2NSBjb21wYXJlICAtMi4wICAgMi4wICAtPiAtMQ0KLWRkY29tMDY2IGNvbXBhcmUgIC0xLjAgIC0yLjAgIC0+IDENCi1kZGNvbTA2NyBjb21wYXJlICAtMS4wICAtMS4wICAtPiAwDQotZGRjb20wNjggY29tcGFyZSAgLTEuMCAgIDAuMCAgLT4gLTENCi1kZGNvbTA2OSBjb21wYXJlICAtMS4wICAgMS4wICAtPiAtMQ0KLWRkY29tMDcwIGNvbXBhcmUgIC0xLjAgICAyLjAgIC0+IC0xDQotZGRjb20wNzEgY29tcGFyZSAgIDAuMCAgLTIuMCAgLT4gMQ0KLWRkY29tMDcyIGNvbXBhcmUgICAwLjAgIC0xLjAgIC0+IDENCi1kZGNvbTA3MyBjb21wYXJlICAgMC4wICAgMC4wICAtPiAwDQotZGRjb20wNzQgY29tcGFyZSAgIDAuMCAgIDEuMCAgLT4gLTENCi1kZGNvbTA3NSBjb21wYXJlICAgMC4wICAgMi4wICAtPiAtMQ0KLWRkY29tMDc2IGNvbXBhcmUgICAxLjAgIC0yLjAgIC0+IDENCi1kZGNvbTA3NyBjb21wYXJlICAgMS4wICAtMS4wICAtPiAxDQotZGRjb20wNzggY29tcGFyZSAgIDEuMCAgIDAuMCAgLT4gMQ0KLWRkY29tMDc5IGNvbXBhcmUgICAxLjAgICAxLjAgIC0+IDANCi1kZGNvbTA4MCBjb21wYXJlICAgMS4wICAgMi4wICAtPiAtMQ0KLWRkY29tMDgxIGNvbXBhcmUgICAyLjAgIC0yLjAgIC0+IDENCi1kZGNvbTA4MiBjb21wYXJlICAgMi4wICAtMS4wICAtPiAxDQotZGRjb20wODMgY29tcGFyZSAgIDIuMCAgIDAuMCAgLT4gMQ0KLWRkY29tMDg1IGNvbXBhcmUgICAyLjAgICAxLjAgIC0+IDENCi1kZGNvbTA4NiBjb21wYXJlICAgMi4wICAgMi4wICAtPiAwDQotZGRjb20wODcgY29tcGFyZSAgIDEuMCAgIDAuMSAgLT4gMQ0KLWRkY29tMDg4IGNvbXBhcmUgICAwLjEgICAxLjAgIC0+IC0xDQotDQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQotZGRjb20wOTUgY29tcGFyZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAwDQotZGRjb20wOTYgY29tcGFyZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtMQ0KLWRkY29tMDk3IGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQ0KLWRkY29tMDk4IGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMA0KLQ0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KLWRkY29tMTAwIGNvbXBhcmUgICA3LjAgICAgNy4wICAgIC0+IDANCi1kZGNvbTEwMSBjb21wYXJlICAgNy4wICAgIDcgICAgICAtPiAwDQotZGRjb20xMDIgY29tcGFyZSAgIDcgICAgICA3LjAgICAgLT4gMA0KLWRkY29tMTAzIGNvbXBhcmUgICA3RSswICAgNy4wICAgIC0+IDANCi1kZGNvbTEwNCBjb21wYXJlICAgNzBFLTEgIDcuMCAgICAtPiAwDQotZGRjb20xMDUgY29tcGFyZSAgIDAuN0UrMSA3ICAgICAgLT4gMA0KLWRkY29tMTA2IGNvbXBhcmUgICA3MEUtMSAgNyAgICAgIC0+IDANCi1kZGNvbTEwNyBjb21wYXJlICAgNy4wICAgIDdFKzAgICAtPiAwDQotZGRjb20xMDggY29tcGFyZSAgIDcuMCAgICA3MEUtMSAgLT4gMA0KLWRkY29tMTA5IGNvbXBhcmUgICA3ICAgICAgMC43RSsxIC0+IDANCi1kZGNvbTExMCBjb21wYXJlICAgNyAgICAgIDcwRS0xICAtPiAwDQotDQotZGRjb20xMjAgY29tcGFyZSAgIDguMCAgICA3LjAgICAgLT4gMQ0KLWRkY29tMTIxIGNvbXBhcmUgICA4LjAgICAgNyAgICAgIC0+IDENCi1kZGNvbTEyMiBjb21wYXJlICAgOCAgICAgIDcuMCAgICAtPiAxDQotZGRjb20xMjMgY29tcGFyZSAgIDhFKzAgICA3LjAgICAgLT4gMQ0KLWRkY29tMTI0IGNvbXBhcmUgICA4MEUtMSAgNy4wICAgIC0+IDENCi1kZGNvbTEyNSBjb21wYXJlICAgMC44RSsxIDcgICAgICAtPiAxDQotZGRjb20xMjYgY29tcGFyZSAgIDgwRS0xICA3ICAgICAgLT4gMQ0KLWRkY29tMTI3IGNvbXBhcmUgICA4LjAgICAgN0UrMCAgIC0+IDENCi1kZGNvbTEyOCBjb21wYXJlICAgOC4wICAgIDcwRS0xICAtPiAxDQotZGRjb20xMjkgY29tcGFyZSAgIDggICAgICAwLjdFKzEgIC0+IDENCi1kZGNvbTEzMCBjb21wYXJlICAgOCAgICAgIDcwRS0xICAtPiAxDQotDQotZGRjb20xNDAgY29tcGFyZSAgIDguMCAgICA5LjAgICAgLT4gLTENCi1kZGNvbTE0MSBjb21wYXJlICAgOC4wICAgIDkgICAgICAtPiAtMQ0KLWRkY29tMTQyIGNvbXBhcmUgICA4ICAgICAgOS4wICAgIC0+IC0xDQotZGRjb20xNDMgY29tcGFyZSAgIDhFKzAgICA5LjAgICAgLT4gLTENCi1kZGNvbTE0NCBjb21wYXJlICAgODBFLTEgIDkuMCAgICAtPiAtMQ0KLWRkY29tMTQ1IGNvbXBhcmUgICAwLjhFKzEgOSAgICAgIC0+IC0xDQotZGRjb20xNDYgY29tcGFyZSAgIDgwRS0xICA5ICAgICAgLT4gLTENCi1kZGNvbTE0NyBjb21wYXJlICAgOC4wICAgIDlFKzAgICAtPiAtMQ0KLWRkY29tMTQ4IGNvbXBhcmUgICA4LjAgICAgOTBFLTEgIC0+IC0xDQotZGRjb20xNDkgY29tcGFyZSAgIDggICAgICAwLjlFKzEgLT4gLTENCi1kZGNvbTE1MCBjb21wYXJlICAgOCAgICAgIDkwRS0xICAtPiAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCi1kZGNvbTIwMCBjb21wYXJlICAtNy4wICAgIDcuMCAgICAtPiAtMQ0KLWRkY29tMjAxIGNvbXBhcmUgIC03LjAgICAgNyAgICAgIC0+IC0xDQotZGRjb20yMDIgY29tcGFyZSAgLTcgICAgICA3LjAgICAgLT4gLTENCi1kZGNvbTIwMyBjb21wYXJlICAtN0UrMCAgIDcuMCAgICAtPiAtMQ0KLWRkY29tMjA0IGNvbXBhcmUgIC03MEUtMSAgNy4wICAgIC0+IC0xDQotZGRjb20yMDUgY29tcGFyZSAgLTAuN0UrMSA3ICAgICAgLT4gLTENCi1kZGNvbTIwNiBjb21wYXJlICAtNzBFLTEgIDcgICAgICAtPiAtMQ0KLWRkY29tMjA3IGNvbXBhcmUgIC03LjAgICAgN0UrMCAgIC0+IC0xDQotZGRjb20yMDggY29tcGFyZSAgLTcuMCAgICA3MEUtMSAgLT4gLTENCi1kZGNvbTIwOSBjb21wYXJlICAtNyAgICAgIDAuN0UrMSAtPiAtMQ0KLWRkY29tMjEwIGNvbXBhcmUgIC03ICAgICAgNzBFLTEgIC0+IC0xDQotDQotZGRjb20yMjAgY29tcGFyZSAgLTguMCAgICA3LjAgICAgLT4gLTENCi1kZGNvbTIyMSBjb21wYXJlICAtOC4wICAgIDcgICAgICAtPiAtMQ0KLWRkY29tMjIyIGNvbXBhcmUgIC04ICAgICAgNy4wICAgIC0+IC0xDQotZGRjb20yMjMgY29tcGFyZSAgLThFKzAgICA3LjAgICAgLT4gLTENCi1kZGNvbTIyNCBjb21wYXJlICAtODBFLTEgIDcuMCAgICAtPiAtMQ0KLWRkY29tMjI1IGNvbXBhcmUgIC0wLjhFKzEgNyAgICAgIC0+IC0xDQotZGRjb20yMjYgY29tcGFyZSAgLTgwRS0xICA3ICAgICAgLT4gLTENCi1kZGNvbTIyNyBjb21wYXJlICAtOC4wICAgIDdFKzAgICAtPiAtMQ0KLWRkY29tMjI4IGNvbXBhcmUgIC04LjAgICAgNzBFLTEgIC0+IC0xDQotZGRjb20yMjkgY29tcGFyZSAgLTggICAgICAwLjdFKzEgLT4gLTENCi1kZGNvbTIzMCBjb21wYXJlICAtOCAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRkY29tMjQwIGNvbXBhcmUgIC04LjAgICAgOS4wICAgIC0+IC0xDQotZGRjb20yNDEgY29tcGFyZSAgLTguMCAgICA5ICAgICAgLT4gLTENCi1kZGNvbTI0MiBjb21wYXJlICAtOCAgICAgIDkuMCAgICAtPiAtMQ0KLWRkY29tMjQzIGNvbXBhcmUgIC04RSswICAgOS4wICAgIC0+IC0xDQotZGRjb20yNDQgY29tcGFyZSAgLTgwRS0xICA5LjAgICAgLT4gLTENCi1kZGNvbTI0NSBjb21wYXJlICAtMC44RSsxIDkgICAgICAtPiAtMQ0KLWRkY29tMjQ2IGNvbXBhcmUgIC04MEUtMSAgOSAgICAgIC0+IC0xDQotZGRjb20yNDcgY29tcGFyZSAgLTguMCAgICA5RSswICAgLT4gLTENCi1kZGNvbTI0OCBjb21wYXJlICAtOC4wICAgIDkwRS0xICAtPiAtMQ0KLWRkY29tMjQ5IGNvbXBhcmUgIC04ICAgICAgMC45RSsxIC0+IC0xDQotZGRjb20yNTAgY29tcGFyZSAgLTggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQotZGRjb20zMDAgY29tcGFyZSAgIDcuMCAgICAtNy4wICAgIC0+IDENCi1kZGNvbTMwMSBjb21wYXJlICAgNy4wICAgIC03ICAgICAgLT4gMQ0KLWRkY29tMzAyIGNvbXBhcmUgICA3ICAgICAgLTcuMCAgICAtPiAxDQotZGRjb20zMDMgY29tcGFyZSAgIDdFKzAgICAtNy4wICAgIC0+IDENCi1kZGNvbTMwNCBjb21wYXJlICAgNzBFLTEgIC03LjAgICAgLT4gMQ0KLWRkY29tMzA1IGNvbXBhcmUgICAuN0UrMSAgLTcgICAgICAtPiAxDQotZGRjb20zMDYgY29tcGFyZSAgIDcwRS0xICAtNyAgICAgIC0+IDENCi1kZGNvbTMwNyBjb21wYXJlICAgNy4wICAgIC03RSswICAgLT4gMQ0KLWRkY29tMzA4IGNvbXBhcmUgICA3LjAgICAgLTcwRS0xICAtPiAxDQotZGRjb20zMDkgY29tcGFyZSAgIDcgICAgICAtLjdFKzEgIC0+IDENCi1kZGNvbTMxMCBjb21wYXJlICAgNyAgICAgIC03MEUtMSAgLT4gMQ0KLQ0KLWRkY29tMzIwIGNvbXBhcmUgICA4LjAgICAgLTcuMCAgICAtPiAxDQotZGRjb20zMjEgY29tcGFyZSAgIDguMCAgICAtNyAgICAgIC0+IDENCi1kZGNvbTMyMiBjb21wYXJlICAgOCAgICAgIC03LjAgICAgLT4gMQ0KLWRkY29tMzIzIGNvbXBhcmUgICA4RSswICAgLTcuMCAgICAtPiAxDQotZGRjb20zMjQgY29tcGFyZSAgIDgwRS0xICAtNy4wICAgIC0+IDENCi1kZGNvbTMyNSBjb21wYXJlICAgLjhFKzEgIC03ICAgICAgLT4gMQ0KLWRkY29tMzI2IGNvbXBhcmUgICA4MEUtMSAgLTcgICAgICAtPiAxDQotZGRjb20zMjcgY29tcGFyZSAgIDguMCAgICAtN0UrMCAgIC0+IDENCi1kZGNvbTMyOCBjb21wYXJlICAgOC4wICAgIC03MEUtMSAgLT4gMQ0KLWRkY29tMzI5IGNvbXBhcmUgICA4ICAgICAgLS43RSsxICAtPiAxDQotZGRjb20zMzAgY29tcGFyZSAgIDggICAgICAtNzBFLTEgIC0+IDENCi0NCi1kZGNvbTM0MCBjb21wYXJlICAgOC4wICAgIC05LjAgICAgLT4gMQ0KLWRkY29tMzQxIGNvbXBhcmUgICA4LjAgICAgLTkgICAgICAtPiAxDQotZGRjb20zNDIgY29tcGFyZSAgIDggICAgICAtOS4wICAgIC0+IDENCi1kZGNvbTM0MyBjb21wYXJlICAgOEUrMCAgIC05LjAgICAgLT4gMQ0KLWRkY29tMzQ0IGNvbXBhcmUgICA4MEUtMSAgLTkuMCAgICAtPiAxDQotZGRjb20zNDUgY29tcGFyZSAgIC44RSsxICAtOSAgICAgIC0+IDENCi1kZGNvbTM0NiBjb21wYXJlICAgODBFLTEgIC05ICAgICAgLT4gMQ0KLWRkY29tMzQ3IGNvbXBhcmUgICA4LjAgICAgLTlFKzAgICAtPiAxDQotZGRjb20zNDggY29tcGFyZSAgIDguMCAgICAtOTBFLTEgIC0+IDENCi1kZGNvbTM0OSBjb21wYXJlICAgOCAgICAgIC0uOUUrMSAgLT4gMQ0KLWRkY29tMzUwIGNvbXBhcmUgICA4ICAgICAgLTkwRS0xICAtPiAxDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KLWRkY29tNDAwIGNvbXBhcmUgICAtNy4wICAgIC03LjAgICAgLT4gMA0KLWRkY29tNDAxIGNvbXBhcmUgICAtNy4wICAgIC03ICAgICAgLT4gMA0KLWRkY29tNDAyIGNvbXBhcmUgICAtNyAgICAgIC03LjAgICAgLT4gMA0KLWRkY29tNDAzIGNvbXBhcmUgICAtN0UrMCAgIC03LjAgICAgLT4gMA0KLWRkY29tNDA0IGNvbXBhcmUgICAtNzBFLTEgIC03LjAgICAgLT4gMA0KLWRkY29tNDA1IGNvbXBhcmUgICAtLjdFKzEgIC03ICAgICAgLT4gMA0KLWRkY29tNDA2IGNvbXBhcmUgICAtNzBFLTEgIC03ICAgICAgLT4gMA0KLWRkY29tNDA3IGNvbXBhcmUgICAtNy4wICAgIC03RSswICAgLT4gMA0KLWRkY29tNDA4IGNvbXBhcmUgICAtNy4wICAgIC03MEUtMSAgLT4gMA0KLWRkY29tNDA5IGNvbXBhcmUgICAtNyAgICAgIC0uN0UrMSAgLT4gMA0KLWRkY29tNDEwIGNvbXBhcmUgICAtNyAgICAgIC03MEUtMSAgLT4gMA0KLQ0KLWRkY29tNDIwIGNvbXBhcmUgICAtOC4wICAgIC03LjAgICAgLT4gLTENCi1kZGNvbTQyMSBjb21wYXJlICAgLTguMCAgICAtNyAgICAgIC0+IC0xDQotZGRjb200MjIgY29tcGFyZSAgIC04ICAgICAgLTcuMCAgICAtPiAtMQ0KLWRkY29tNDIzIGNvbXBhcmUgICAtOEUrMCAgIC03LjAgICAgLT4gLTENCi1kZGNvbTQyNCBjb21wYXJlICAgLTgwRS0xICAtNy4wICAgIC0+IC0xDQotZGRjb200MjUgY29tcGFyZSAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQ0KLWRkY29tNDI2IGNvbXBhcmUgICAtODBFLTEgIC03ICAgICAgLT4gLTENCi1kZGNvbTQyNyBjb21wYXJlICAgLTguMCAgICAtN0UrMCAgIC0+IC0xDQotZGRjb200MjggY29tcGFyZSAgIC04LjAgICAgLTcwRS0xICAtPiAtMQ0KLWRkY29tNDI5IGNvbXBhcmUgICAtOCAgICAgIC0uN0UrMSAgLT4gLTENCi1kZGNvbTQzMCBjb21wYXJlICAgLTggICAgICAtNzBFLTEgIC0+IC0xDQotDQotZGRjb200NDAgY29tcGFyZSAgIC04LjAgICAgLTkuMCAgICAtPiAxDQotZGRjb200NDEgY29tcGFyZSAgIC04LjAgICAgLTkgICAgICAtPiAxDQotZGRjb200NDIgY29tcGFyZSAgIC04ICAgICAgLTkuMCAgICAtPiAxDQotZGRjb200NDMgY29tcGFyZSAgIC04RSswICAgLTkuMCAgICAtPiAxDQotZGRjb200NDQgY29tcGFyZSAgIC04MEUtMSAgLTkuMCAgICAtPiAxDQotZGRjb200NDUgY29tcGFyZSAgIC0uOEUrMSAgLTkgICAgICAtPiAxDQotZGRjb200NDYgY29tcGFyZSAgIC04MEUtMSAgLTkgICAgICAtPiAxDQotZGRjb200NDcgY29tcGFyZSAgIC04LjAgICAgLTlFKzAgICAtPiAxDQotZGRjb200NDggY29tcGFyZSAgIC04LjAgICAgLTkwRS0xICAtPiAxDQotZGRjb200NDkgY29tcGFyZSAgIC04ICAgICAgLS45RSsxICAtPiAxDQotZGRjb200NTAgY29tcGFyZSAgIC04ICAgICAgLTkwRS0xICAtPiAxDQotDQotLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuDQotZGRjb200NTEgY29tcGFyZSAgICAgIDEuMCAgICAgICAwLjEgIC0+IDENCi1kZGNvbTQ1MiBjb21wYXJlICAgICAgMC4xICAgICAgIDEuMCAgLT4gLTENCi1kZGNvbTQ1MyBjb21wYXJlICAgICAxMC4wICAgICAgIDAuMSAgLT4gMQ0KLWRkY29tNDU0IGNvbXBhcmUgICAgICAwLjEgICAgICAxMC4wICAtPiAtMQ0KLWRkY29tNDU1IGNvbXBhcmUgICAgICAxMDAgICAgICAgMS4wICAtPiAxDQotZGRjb200NTYgY29tcGFyZSAgICAgIDEuMCAgICAgICAxMDAgIC0+IC0xDQotZGRjb200NTcgY29tcGFyZSAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDENCi1kZGNvbTQ1OCBjb21wYXJlICAgICAxMC4wICAgICAgMTAwMCAgLT4gLTENCi1kZGNvbTQ1OSBjb21wYXJlICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMQ0KLWRkY29tNDYwIGNvbXBhcmUgICAgMTAwLjAgICAgIDEwMDAwICAtPiAtMQ0KLWRkY29tNDYxIGNvbXBhcmUgICAxMDAwMDAgICAgMTAwMC4wICAtPiAxDQotZGRjb200NjIgY29tcGFyZSAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IC0xDQotZGRjb200NjMgY29tcGFyZSAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDENCi1kZGNvbTQ2NCBjb21wYXJlICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gLTENCi0NCi0tLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0NCi1kZGNvbTQ3MyBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwDQotZGRjb200NzQgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwDQotZGRjb200NzUgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDANCi1kZGNvbTQ3NiBjb21wYXJlIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwDQotZGRjb200NzcgY29tcGFyZSAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwDQotZGRjb200NzggY29tcGFyZSAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDANCi1kZGNvbTQ3OSBjb21wYXJlIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwDQotZGRjb200ODAgY29tcGFyZSAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwDQotZGRjb200ODEgY29tcGFyZSAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IDANCi1kZGNvbTQ4MiBjb21wYXJlIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAwDQotZGRjb200ODMgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwDQotZGRjb200ODcgY29tcGFyZSAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgLT4gMA0KLWRkY29tNDg4IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMA0KLWRkY29tNDg5IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAwDQotZGRjb200OTAgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMA0KLWRkY29tNDkxIGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMA0KLWRkY29tNDkyIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAwDQotZGRjb200OTMgY29tcGFyZSAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgLT4gMA0KLWRkY29tNDk0IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMA0KLWRkY29tNDk1IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAwDQotZGRjb200OTYgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMA0KLWRkY29tNDk3IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMA0KLQ0KLS0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwNCi1kZGNvbTUwMCBjb21wYXJlICAgIDEgICAgIDFFLTE1ICAgIC0+IDENCi1kZGNvbTUwMSBjb21wYXJlICAgIDEgICAgIDFFLTE0ICAgIC0+IDENCi1kZGNvbTUwMiBjb21wYXJlICAgIDEgICAgIDFFLTEzICAgIC0+IDENCi1kZGNvbTUwMyBjb21wYXJlICAgIDEgICAgIDFFLTEyICAgIC0+IDENCi1kZGNvbTUwNCBjb21wYXJlICAgIDEgICAgIDFFLTExICAgIC0+IDENCi1kZGNvbTUwNSBjb21wYXJlICAgIDEgICAgIDFFLTEwICAgIC0+IDENCi1kZGNvbTUwNiBjb21wYXJlICAgIDEgICAgIDFFLTkgICAgIC0+IDENCi1kZGNvbTUwNyBjb21wYXJlICAgIDEgICAgIDFFLTggICAgIC0+IDENCi1kZGNvbTUwOCBjb21wYXJlICAgIDEgICAgIDFFLTcgICAgIC0+IDENCi1kZGNvbTUwOSBjb21wYXJlICAgIDEgICAgIDFFLTYgICAgIC0+IDENCi1kZGNvbTUxMCBjb21wYXJlICAgIDEgICAgIDFFLTUgICAgIC0+IDENCi1kZGNvbTUxMSBjb21wYXJlICAgIDEgICAgIDFFLTQgICAgIC0+IDENCi1kZGNvbTUxMiBjb21wYXJlICAgIDEgICAgIDFFLTMgICAgIC0+IDENCi1kZGNvbTUxMyBjb21wYXJlICAgIDEgICAgIDFFLTIgICAgIC0+IDENCi1kZGNvbTUxNCBjb21wYXJlICAgIDEgICAgIDFFLTEgICAgIC0+IDENCi1kZGNvbTUxNSBjb21wYXJlICAgIDEgICAgIDFFLTAgICAgIC0+IDANCi1kZGNvbTUxNiBjb21wYXJlICAgIDEgICAgIDFFKzEgICAgIC0+IC0xDQotZGRjb201MTcgY29tcGFyZSAgICAxICAgICAxRSsyICAgICAtPiAtMQ0KLWRkY29tNTE4IGNvbXBhcmUgICAgMSAgICAgMUUrMyAgICAgLT4gLTENCi1kZGNvbTUxOSBjb21wYXJlICAgIDEgICAgIDFFKzQgICAgIC0+IC0xDQotZGRjb201MjEgY29tcGFyZSAgICAxICAgICAxRSs1ICAgICAtPiAtMQ0KLWRkY29tNTIyIGNvbXBhcmUgICAgMSAgICAgMUUrNiAgICAgLT4gLTENCi1kZGNvbTUyMyBjb21wYXJlICAgIDEgICAgIDFFKzcgICAgIC0+IC0xDQotZGRjb201MjQgY29tcGFyZSAgICAxICAgICAxRSs4ICAgICAtPiAtMQ0KLWRkY29tNTI1IGNvbXBhcmUgICAgMSAgICAgMUUrOSAgICAgLT4gLTENCi1kZGNvbTUyNiBjb21wYXJlICAgIDEgICAgIDFFKzEwICAgIC0+IC0xDQotZGRjb201MjcgY29tcGFyZSAgICAxICAgICAxRSsxMSAgICAtPiAtMQ0KLWRkY29tNTI4IGNvbXBhcmUgICAgMSAgICAgMUUrMTIgICAgLT4gLTENCi1kZGNvbTUyOSBjb21wYXJlICAgIDEgICAgIDFFKzEzICAgIC0+IC0xDQotZGRjb201MzAgY29tcGFyZSAgICAxICAgICAxRSsxNCAgICAtPiAtMQ0KLWRkY29tNTMxIGNvbXBhcmUgICAgMSAgICAgMUUrMTUgICAgLT4gLTENCi0tLSBMUiBzd2FwDQotZGRjb201NDAgY29tcGFyZSAgICAxRS0xNSAgMSAgICAgICAtPiAtMQ0KLWRkY29tNTQxIGNvbXBhcmUgICAgMUUtMTQgIDEgICAgICAgLT4gLTENCi1kZGNvbTU0MiBjb21wYXJlICAgIDFFLTEzICAxICAgICAgIC0+IC0xDQotZGRjb201NDMgY29tcGFyZSAgICAxRS0xMiAgMSAgICAgICAtPiAtMQ0KLWRkY29tNTQ0IGNvbXBhcmUgICAgMUUtMTEgIDEgICAgICAgLT4gLTENCi1kZGNvbTU0NSBjb21wYXJlICAgIDFFLTEwICAxICAgICAgIC0+IC0xDQotZGRjb201NDYgY29tcGFyZSAgICAxRS05ICAgMSAgICAgICAtPiAtMQ0KLWRkY29tNTQ3IGNvbXBhcmUgICAgMUUtOCAgIDEgICAgICAgLT4gLTENCi1kZGNvbTU0OCBjb21wYXJlICAgIDFFLTcgICAxICAgICAgIC0+IC0xDQotZGRjb201NDkgY29tcGFyZSAgICAxRS02ICAgMSAgICAgICAtPiAtMQ0KLWRkY29tNTUwIGNvbXBhcmUgICAgMUUtNSAgIDEgICAgICAgLT4gLTENCi1kZGNvbTU1MSBjb21wYXJlICAgIDFFLTQgICAxICAgICAgIC0+IC0xDQotZGRjb201NTIgY29tcGFyZSAgICAxRS0zICAgMSAgICAgICAtPiAtMQ0KLWRkY29tNTUzIGNvbXBhcmUgICAgMUUtMiAgIDEgICAgICAgLT4gLTENCi1kZGNvbTU1NCBjb21wYXJlICAgIDFFLTEgICAxICAgICAgIC0+IC0xDQotZGRjb201NTUgY29tcGFyZSAgICAxRS0wICAgMSAgICAgICAtPiAgMA0KLWRkY29tNTU2IGNvbXBhcmUgICAgMUUrMSAgIDEgICAgICAgLT4gIDENCi1kZGNvbTU1NyBjb21wYXJlICAgIDFFKzIgICAxICAgICAgIC0+ICAxDQotZGRjb201NTggY29tcGFyZSAgICAxRSszICAgMSAgICAgICAtPiAgMQ0KLWRkY29tNTU5IGNvbXBhcmUgICAgMUUrNCAgIDEgICAgICAgLT4gIDENCi1kZGNvbTU2MSBjb21wYXJlICAgIDFFKzUgICAxICAgICAgIC0+ICAxDQotZGRjb201NjIgY29tcGFyZSAgICAxRSs2ICAgMSAgICAgICAtPiAgMQ0KLWRkY29tNTYzIGNvbXBhcmUgICAgMUUrNyAgIDEgICAgICAgLT4gIDENCi1kZGNvbTU2NCBjb21wYXJlICAgIDFFKzggICAxICAgICAgIC0+ICAxDQotZGRjb201NjUgY29tcGFyZSAgICAxRSs5ICAgMSAgICAgICAtPiAgMQ0KLWRkY29tNTY2IGNvbXBhcmUgICAgMUUrMTAgIDEgICAgICAgLT4gIDENCi1kZGNvbTU2NyBjb21wYXJlICAgIDFFKzExICAxICAgICAgIC0+ICAxDQotZGRjb201NjggY29tcGFyZSAgICAxRSsxMiAgMSAgICAgICAtPiAgMQ0KLWRkY29tNTY5IGNvbXBhcmUgICAgMUUrMTMgIDEgICAgICAgLT4gIDENCi1kZGNvbTU3MCBjb21wYXJlICAgIDFFKzE0ICAxICAgICAgIC0+ICAxDQotZGRjb201NzEgY29tcGFyZSAgICAxRSsxNSAgMSAgICAgICAtPiAgMQ0KLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KLWRkY29tNTgwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxDQotZGRjb201ODEgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDENCi1kZGNvbTU4MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQ0KLWRkY29tNTgzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxDQotZGRjb201ODQgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDENCi1kZGNvbTU4NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQ0KLWRkY29tNTg2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxDQotZGRjb201ODcgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDENCi1kZGNvbTU4OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQ0KLWRkY29tNTg5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQ0KLWRkY29tNTkwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQ0KLWRkY29tNTkxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQ0KLWRkY29tNTkyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQ0KLWRkY29tNTkzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQ0KLWRkY29tNTk0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQ0KLWRkY29tNTk1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQ0KLWRkY29tNTk2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQ0KLWRkY29tNTk3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQ0KLWRkY29tNTk4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQ0KLWRkY29tNTk5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQ0KLQ0KLS0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzDQotZGRjb202MDAgY29tcGFyZSAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY29tNjAxIGNvbXBhcmUgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kZGNvbTYwMiBjb21wYXJlICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb202MDMgY29tcGFyZSAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY29tNjA0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTENCi1kZGNvbTYwNSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb202MDYgY29tcGFyZSAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY29tNjA3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTENCi1kZGNvbTYwOCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb202MDkgY29tcGFyZSAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQ0KLWRkY29tNjEwIGNvbXBhcmUgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDENCi1kZGNvbTYxMSBjb21wYXJlICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxDQotZGRjb202MTIgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQ0KLWRkY29tNjEzIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDENCi1kZGNvbTYxNCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxDQotZGRjb202MTUgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQ0KLWRkY29tNjE2IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDENCi1kZGNvbTYxNyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxDQotZGRjb202MTggY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQ0KLWRkY29tNjE5IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDENCi1kZGNvbTYyMCBjb21wYXJlICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb202MjEgY29tcGFyZSAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY29tNjIyIGNvbXBhcmUgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kZGNvbTYyMyBjb21wYXJlICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb202MjQgY29tcGFyZSAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY29tNjI1IGNvbXBhcmUgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDENCi1kZGNvbTYyNiBjb21wYXJlICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb202MjcgY29tcGFyZSAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY29tNjI4IGNvbXBhcmUgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDENCi1kZGNvbTYyOSBjb21wYXJlICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxDQotZGRjb202MzAgY29tcGFyZSAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQ0KLWRkY29tNjMxIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTENCi1kZGNvbTYzMiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xDQotZGRjb202MzMgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQ0KLWRkY29tNjM0IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTENCi1kZGNvbTYzNSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xDQotZGRjb202MzYgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQ0KLWRkY29tNjM3IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTENCi1kZGNvbTYzOCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xDQotZGRjb202MzkgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQ0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZGRjb202NDAgY29tcGFyZSAgIDAgICAgIDAgICAtPiAwDQotZGRjb202NDEgY29tcGFyZSAgIDAgICAgLTAgICAtPiAwDQotZGRjb202NDIgY29tcGFyZSAgIDAgICAgLTAuMCAtPiAwDQotZGRjb202NDMgY29tcGFyZSAgIDAgICAgIDAuMCAtPiAwDQotZGRjb202NDQgY29tcGFyZSAgLTAgICAgIDAgICAtPiAwDQotZGRjb202NDUgY29tcGFyZSAgLTAgICAgLTAgICAtPiAwDQotZGRjb202NDYgY29tcGFyZSAgLTAgICAgLTAuMCAtPiAwDQotZGRjb202NDcgY29tcGFyZSAgLTAgICAgIDAuMCAtPiAwDQotZGRjb202NDggY29tcGFyZSAgIDAuMCAgIDAgICAtPiAwDQotZGRjb202NDkgY29tcGFyZSAgIDAuMCAgLTAgICAtPiAwDQotZGRjb202NTAgY29tcGFyZSAgIDAuMCAgLTAuMCAtPiAwDQotZGRjb202NTEgY29tcGFyZSAgIDAuMCAgIDAuMCAtPiAwDQotZGRjb202NTIgY29tcGFyZSAgLTAuMCAgIDAgICAtPiAwDQotZGRjb202NTMgY29tcGFyZSAgLTAuMCAgLTAgICAtPiAwDQotZGRjb202NTQgY29tcGFyZSAgLTAuMCAgLTAuMCAtPiAwDQotZGRjb202NTUgY29tcGFyZSAgLTAuMCAgIDAuMCAtPiAwDQotDQotZGRjb202NTYgY29tcGFyZSAgLTBFMSAgIDAuMCAtPiAwDQotZGRjb202NTcgY29tcGFyZSAgLTBFMiAgIDAuMCAtPiAwDQotZGRjb202NTggY29tcGFyZSAgIDBFMSAgIDAuMCAtPiAwDQotZGRjb202NTkgY29tcGFyZSAgIDBFMiAgIDAuMCAtPiAwDQotZGRjb202NjAgY29tcGFyZSAgLTBFMSAgIDAgICAtPiAwDQotZGRjb202NjEgY29tcGFyZSAgLTBFMiAgIDAgICAtPiAwDQotZGRjb202NjIgY29tcGFyZSAgIDBFMSAgIDAgICAtPiAwDQotZGRjb202NjMgY29tcGFyZSAgIDBFMiAgIDAgICAtPiAwDQotZGRjb202NjQgY29tcGFyZSAgLTBFMSAgLTBFMSAtPiAwDQotZGRjb202NjUgY29tcGFyZSAgLTBFMiAgLTBFMSAtPiAwDQotZGRjb202NjYgY29tcGFyZSAgIDBFMSAgLTBFMSAtPiAwDQotZGRjb202NjcgY29tcGFyZSAgIDBFMiAgLTBFMSAtPiAwDQotZGRjb202NjggY29tcGFyZSAgLTBFMSAgLTBFMiAtPiAwDQotZGRjb202NjkgY29tcGFyZSAgLTBFMiAgLTBFMiAtPiAwDQotZGRjb202NzAgY29tcGFyZSAgIDBFMSAgLTBFMiAtPiAwDQotZGRjb202NzEgY29tcGFyZSAgIDBFMiAgLTBFMiAtPiAwDQotZGRjb202NzIgY29tcGFyZSAgLTBFMSAgIDBFMSAtPiAwDQotZGRjb202NzMgY29tcGFyZSAgLTBFMiAgIDBFMSAtPiAwDQotZGRjb202NzQgY29tcGFyZSAgIDBFMSAgIDBFMSAtPiAwDQotZGRjb202NzUgY29tcGFyZSAgIDBFMiAgIDBFMSAtPiAwDQotZGRjb202NzYgY29tcGFyZSAgLTBFMSAgIDBFMiAtPiAwDQotZGRjb202NzcgY29tcGFyZSAgLTBFMiAgIDBFMiAtPiAwDQotZGRjb202NzggY29tcGFyZSAgIDBFMSAgIDBFMiAtPiAwDQotZGRjb202NzkgY29tcGFyZSAgIDBFMiAgIDBFMiAtPiAwDQotDQotLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQ0KLWRkY29tNjgwIGNvbXBhcmUgICAxMiAgICAxMiAgICAgICAgICAgLT4gMA0KLWRkY29tNjgxIGNvbXBhcmUgICAxMiAgICAxMi4wICAgICAgICAgLT4gMA0KLWRkY29tNjgyIGNvbXBhcmUgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMA0KLWRkY29tNjgzIGNvbXBhcmUgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMA0KLWRkY29tNjg0IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMA0KLWRkY29tNjg1IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMA0KLWRkY29tNjg2IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMA0KLWRkY29tNjg3IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMA0KLWRkY29tNjg4IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMA0KLWRkY29tNjg5IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMA0KLWRkY29tNjkwIGNvbXBhcmUgICAxMiAgICAgICAgICAgICAgMTIgLT4gMA0KLWRkY29tNjkxIGNvbXBhcmUgICAxMi4wICAgICAgICAgICAgMTIgLT4gMA0KLWRkY29tNjkyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMA0KLWRkY29tNjkzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMA0KLWRkY29tNjk0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgICAgMTIgLT4gMA0KLWRkY29tNjk1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMA0KLWRkY29tNjk2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMA0KLWRkY29tNjk3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gMA0KLWRkY29tNjk4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMA0KLWRkY29tNjk5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMA0KLQ0KLS0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdA0KLWRkY29tNzAwIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTUgLT4gMQ0KLWRkY29tNzAxIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gMA0KLWRkY29tNzAyIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTcgLT4gLTENCi1kZGNvbTcwMyBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAwMjM0NTY3ODkwMTIzNDU2IC0+IDENCi1kZGNvbTcwNCBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IDANCi1kZGNvbTcwNSBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAyMjM0NTY3ODkwMTIzNDU2IC0+IC0xDQotZGRjb203MDYgY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTAzNDU2Nzg5MDEyMzQ1NiAtPiAxDQotZGRjb203MDcgY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTEzNDU2Nzg5MDEyMzQ1NiAtPiAwDQotZGRjb203MDggY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQ0KLQ0KLS0tIG1pc2NlbGxhbmVvdXMNCi1kZGNvbTcyMSBjb21wYXJlIDEyMzQ1Njc4MDAwIDEgLT4gMQ0KLWRkY29tNzIyIGNvbXBhcmUgMSAxMjM0NTY3ODAwMCAtPiAtMQ0KLWRkY29tNzIzIGNvbXBhcmUgMTIzNDU2NzgwMCAgMSAtPiAxDQotZGRjb203MjQgY29tcGFyZSAxIDEyMzQ1Njc4MDAgIC0+IC0xDQotZGRjb203MjUgY29tcGFyZSAxMjM0NTY3ODkwICAxIC0+IDENCi1kZGNvbTcyNiBjb21wYXJlIDEgMTIzNDU2Nzg5MCAgLT4gLTENCi1kZGNvbTcyNyBjb21wYXJlIDEyMzQ1Njc4OTEgIDEgLT4gMQ0KLWRkY29tNzI4IGNvbXBhcmUgMSAxMjM0NTY3ODkxICAtPiAtMQ0KLWRkY29tNzI5IGNvbXBhcmUgMTIzNDU2Nzg5MDEgMSAtPiAxDQotZGRjb203MzAgY29tcGFyZSAxIDEyMzQ1Njc4OTAxIC0+IC0xDQotZGRjb203MzEgY29tcGFyZSAxMjM0NTY3ODk2ICAxIC0+IDENCi1kZGNvbTczMiBjb21wYXJlIDEgMTIzNDU2Nzg5NiAgLT4gLTENCi0NCi0tLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbg0KLWRkY29tNzQwIGNvbXBhcmUgIDEgIDAuOTk5OTk5OSAgLT4gMQ0KLWRkY29tNzQxIGNvbXBhcmUgIDEgIDAuOTk5OTk5ICAgLT4gMQ0KLWRkY29tNzQyIGNvbXBhcmUgIDEgIDAuOTk5OTkgICAgLT4gMQ0KLWRkY29tNzQzIGNvbXBhcmUgIDEgIDEuMDAwMCAgICAgLT4gMA0KLWRkY29tNzQ0IGNvbXBhcmUgIDEgIDEuMDAwMDEgICAgLT4gLTENCi1kZGNvbTc0NSBjb21wYXJlICAxICAxLjAwMDAwMSAgIC0+IC0xDQotZGRjb203NDYgY29tcGFyZSAgMSAgMS4wMDAwMDAxICAtPiAtMQ0KLWRkY29tNzUwIGNvbXBhcmUgIDAuOTk5OTk5OSAgMSAgLT4gLTENCi1kZGNvbTc1MSBjb21wYXJlICAwLjk5OTk5OSAgIDEgIC0+IC0xDQotZGRjb203NTIgY29tcGFyZSAgMC45OTk5OSAgICAxICAtPiAtMQ0KLWRkY29tNzUzIGNvbXBhcmUgIDEuMDAwMCAgICAgMSAgLT4gMA0KLWRkY29tNzU0IGNvbXBhcmUgIDEuMDAwMDEgICAgMSAgLT4gMQ0KLWRkY29tNzU1IGNvbXBhcmUgIDEuMDAwMDAxICAgMSAgLT4gMQ0KLWRkY29tNzU2IGNvbXBhcmUgIDEuMDAwMDAwMSAgMSAgLT4gMQ0KLQ0KLS0tIFNwZWNpYWxzDQotZGRjb203ODAgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDENCi1kZGNvbTc4MSBjb21wYXJlICBJbmYgIC0xMDAwICAtPiAgMQ0KLWRkY29tNzgyIGNvbXBhcmUgIEluZiAgLTEgICAgIC0+ICAxDQotZGRjb203ODMgY29tcGFyZSAgSW5mICAtMCAgICAgLT4gIDENCi1kZGNvbTc4NCBjb21wYXJlICBJbmYgICAwICAgICAtPiAgMQ0KLWRkY29tNzg1IGNvbXBhcmUgIEluZiAgIDEgICAgIC0+ICAxDQotZGRjb203ODYgY29tcGFyZSAgSW5mICAgMTAwMCAgLT4gIDENCi1kZGNvbTc4NyBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMA0KLWRkY29tNzg4IGNvbXBhcmUgLTEwMDAgIEluZiAgIC0+IC0xDQotZGRjb203ODkgY29tcGFyZSAtSW5mICAgSW5mICAgLT4gLTENCi1kZGNvbTc5MCBjb21wYXJlIC0xICAgICBJbmYgICAtPiAtMQ0KLWRkY29tNzkxIGNvbXBhcmUgLTAgICAgIEluZiAgIC0+IC0xDQotZGRjb203OTIgY29tcGFyZSAgMCAgICAgSW5mICAgLT4gLTENCi1kZGNvbTc5MyBjb21wYXJlICAxICAgICBJbmYgICAtPiAtMQ0KLWRkY29tNzk0IGNvbXBhcmUgIDEwMDAgIEluZiAgIC0+IC0xDQotZGRjb203OTUgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDANCi0NCi1kZGNvbTgwMCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMA0KLWRkY29tODAxIGNvbXBhcmUgLUluZiAgLTEwMDAgIC0+IC0xDQotZGRjb204MDIgY29tcGFyZSAtSW5mICAtMSAgICAgLT4gLTENCi1kZGNvbTgwMyBjb21wYXJlIC1JbmYgIC0wICAgICAtPiAtMQ0KLWRkY29tODA0IGNvbXBhcmUgLUluZiAgIDAgICAgIC0+IC0xDQotZGRjb204MDUgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gLTENCi1kZGNvbTgwNiBjb21wYXJlIC1JbmYgICAxMDAwICAtPiAtMQ0KLWRkY29tODA3IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xDQotZGRjb204MDggY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDANCi1kZGNvbTgwOSBjb21wYXJlIC0xMDAwIC1JbmYgICAtPiAgMQ0KLWRkY29tODEwIGNvbXBhcmUgLTEgICAgLUluZiAgIC0+ICAxDQotZGRjb204MTEgY29tcGFyZSAtMCAgICAtSW5mICAgLT4gIDENCi1kZGNvbTgxMiBjb21wYXJlICAwICAgIC1JbmYgICAtPiAgMQ0KLWRkY29tODEzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAxDQotZGRjb204MTQgY29tcGFyZSAgMTAwMCAtSW5mICAgLT4gIDENCi1kZGNvbTgxNSBjb21wYXJlICBJbmYgIC1JbmYgICAtPiAgMQ0KLQ0KLWRkY29tODIxIGNvbXBhcmUgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kZGNvbTgyMiBjb21wYXJlICBOYU4gLTEwMDAgICAtPiAgTmFODQotZGRjb204MjMgY29tcGFyZSAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRkY29tODI0IGNvbXBhcmUgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kZGNvbTgyNSBjb21wYXJlICBOYU4gIDAgICAgICAtPiAgTmFODQotZGRjb204MjYgY29tcGFyZSAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRkY29tODI3IGNvbXBhcmUgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kZGNvbTgyOCBjb21wYXJlICBOYU4gIEluZiAgICAtPiAgTmFODQotZGRjb204MjkgY29tcGFyZSAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRkY29tODMwIGNvbXBhcmUgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kZGNvbTgzMSBjb21wYXJlIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZGRjb204MzIgY29tcGFyZSAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkY29tODMzIGNvbXBhcmUgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kZGNvbTgzNCBjb21wYXJlICAwICAgIE5hTiAgICAtPiAgTmFODQotZGRjb204MzUgY29tcGFyZSAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkY29tODM2IGNvbXBhcmUgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZGNvbTgzNyBjb21wYXJlICBJbmYgIE5hTiAgICAtPiAgTmFODQotZGRjb204MzggY29tcGFyZSAtTmFOIC1OYU4gICAgLT4gLU5hTg0KLWRkY29tODM5IGNvbXBhcmUgK05hTiAtTmFOICAgIC0+ICBOYU4NCi1kZGNvbTg0MCBjb21wYXJlIC1OYU4gK05hTiAgICAtPiAtTmFODQotDQotZGRjb204NDEgY29tcGFyZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg0MiBjb21wYXJlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODQzIGNvbXBhcmUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NDQgY29tcGFyZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg0NSBjb21wYXJlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODQ2IGNvbXBhcmUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NDcgY29tcGFyZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg0OCBjb21wYXJlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODQ5IGNvbXBhcmUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NTAgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg1MSBjb21wYXJlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODUyIGNvbXBhcmUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NTMgY29tcGFyZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg1NCBjb21wYXJlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODU1IGNvbXBhcmUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NTYgY29tcGFyZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg1NyBjb21wYXJlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODU4IGNvbXBhcmUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NTkgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRjb204NjAgY29tcGFyZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCi1kZGNvbTg2MSBjb21wYXJlICBOYU44ICA5OTkgICAtPiAgTmFOOA0KLWRkY29tODYyIGNvbXBhcmUgIE5hTjc3IEluZiAgIC0+ICBOYU43Nw0KLWRkY29tODYzIGNvbXBhcmUgLU5hTjY3IE5hTjUgIC0+IC1OYU42Nw0KLWRkY29tODY0IGNvbXBhcmUgLUluZiAgLU5hTjQgIC0+IC1OYU40DQotZGRjb204NjUgY29tcGFyZSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzDQotZGRjb204NjYgY29tcGFyZSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCi1kZGNvbTg2NyBjb21wYXJlIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxDQotZGRjb204NjggY29tcGFyZSArTmFONDEgLU5hTjQyIC0+ICBOYU40MQ0KLWRkY29tODY5IGNvbXBhcmUgLU5hTjQxICtOYU40MiAtPiAtTmFONDENCi1kZGNvbTg3MCBjb21wYXJlICtOYU40MSArTmFONDIgLT4gIE5hTjQxDQotDQotZGRjb204NzEgY29tcGFyZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NzIgY29tcGFyZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NzMgY29tcGFyZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NzQgY29tcGFyZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NzUgY29tcGFyZSAgTmFOODUgIHNOYU44MyAgLT4gIE5hTjgzIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NzYgY29tcGFyZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NzcgY29tcGFyZSAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NzggY29tcGFyZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NzkgY29tcGFyZSAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gd2lkZSByYW5nZQ0KLWRkY29tODgwIGNvbXBhcmUgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xDQotZGRjb204ODEgY29tcGFyZSA5RSszODQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDENCi1kZGNvbTg4MiBjb21wYXJlICswLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAgMQ0KLWRkY29tODgzIGNvbXBhcmUgOUUtMzgzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xDQotZGRjb204ODUgY29tcGFyZSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTENCi1kZGNvbTg4NiBjb21wYXJlIDlFKzM4NCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQ0KLWRkY29tODg3IGNvbXBhcmUgLTAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+IC0xDQotZGRjb204ODggY29tcGFyZSA5RS0zODMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDENCi0NCi0tLSBzcHJlYWQgemVyb3MNCi1kZGNvbTkwMCBjb21wYXJlICAgMEUtMzgzICAwICAgICAgIC0+ICAwDQotZGRjb205MDEgY29tcGFyZSAgIDBFLTM4MyAtMCAgICAgICAtPiAgMA0KLWRkY29tOTAyIGNvbXBhcmUgIC0wRS0zODMgIDAgICAgICAgLT4gIDANCi1kZGNvbTkwMyBjb21wYXJlICAtMEUtMzgzIC0wICAgICAgIC0+ICAwDQotZGRjb205MDQgY29tcGFyZSAgIDBFLTM4MyAgMEUrMzg0ICAtPiAgMA0KLWRkY29tOTA1IGNvbXBhcmUgICAwRS0zODMgLTBFKzM4NCAgLT4gIDANCi1kZGNvbTkwNiBjb21wYXJlICAtMEUtMzgzICAwRSszODQgIC0+ICAwDQotZGRjb205MDcgY29tcGFyZSAgLTBFLTM4MyAtMEUrMzg0ICAtPiAgMA0KLWRkY29tOTA4IGNvbXBhcmUgICAwICAgICAgIDBFKzM4NCAgLT4gIDANCi1kZGNvbTkwOSBjb21wYXJlICAgMCAgICAgIC0wRSszODQgIC0+ICAwDQotZGRjb205MTAgY29tcGFyZSAgLTAgICAgICAgMEUrMzg0ICAtPiAgMA0KLWRkY29tOTExIGNvbXBhcmUgIC0wICAgICAgLTBFKzM4NCAgLT4gIDANCi1kZGNvbTkzMCBjb21wYXJlICAgMEUrMzg0ICAwICAgICAgIC0+ICAwDQotZGRjb205MzEgY29tcGFyZSAgIDBFKzM4NCAtMCAgICAgICAtPiAgMA0KLWRkY29tOTMyIGNvbXBhcmUgIC0wRSszODQgIDAgICAgICAgLT4gIDANCi1kZGNvbTkzMyBjb21wYXJlICAtMEUrMzg0IC0wICAgICAgIC0+ICAwDQotZGRjb205MzQgY29tcGFyZSAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMA0KLWRkY29tOTM1IGNvbXBhcmUgICAwRSszODQgLTBFLTM4MyAgLT4gIDANCi1kZGNvbTkzNiBjb21wYXJlICAtMEUrMzg0ICAwRS0zODMgIC0+ICAwDQotZGRjb205MzcgY29tcGFyZSAgLTBFKzM4NCAtMEUtMzgzICAtPiAgMA0KLWRkY29tOTM4IGNvbXBhcmUgICAwICAgICAgIDBFLTM4MyAgLT4gIDANCi1kZGNvbTkzOSBjb21wYXJlICAgMCAgICAgIC0wRS0zODMgIC0+ICAwDQotZGRjb205NDAgY29tcGFyZSAgLTAgICAgICAgMEUtMzgzICAtPiAgMA0KLWRkY29tOTQxIGNvbXBhcmUgIC0wICAgICAgLTBFLTM4MyAgLT4gIDANCi0NCi0tLSBzaWducw0KLWRkY29tOTYxIGNvbXBhcmUgIDFlKzc3ICAxZSsxMSAtPiAgMQ0KLWRkY29tOTYyIGNvbXBhcmUgIDFlKzc3IC0xZSsxMSAtPiAgMQ0KLWRkY29tOTYzIGNvbXBhcmUgLTFlKzc3ICAxZSsxMSAtPiAtMQ0KLWRkY29tOTY0IGNvbXBhcmUgLTFlKzc3IC0xZSsxMSAtPiAtMQ0KLWRkY29tOTY1IGNvbXBhcmUgIDFlLTc3ICAxZS0xMSAtPiAtMQ0KLWRkY29tOTY2IGNvbXBhcmUgIDFlLTc3IC0xZS0xMSAtPiAgMQ0KLWRkY29tOTY3IGNvbXBhcmUgLTFlLTc3ICAxZS0xMSAtPiAtMQ0KLWRkY29tOTY4IGNvbXBhcmUgLTFlLTc3IC0xZS0xMSAtPiAgMQ0KLQ0KLS0tIGZ1bGwgYWxpZ25tZW50IHJhbmdlLCBib3RoIHdheXMNCi1kZGNvbXAxMDAxIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gMA0KLWRkY29tcDEwMDIgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAgICAtPiAwDQotZGRjb21wMTAwMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwICAgIC0+IDANCi1kZGNvbXAxMDA0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMCAgICAgLT4gMA0KLWRkY29tcDEwMDUgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAgICAgICAtPiAwDQotZGRjb21wMTAwNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwICAgICAgIC0+IDANCi1kZGNvbXAxMDA3IGNvbXBhcmUgMSAxLjAwMDAwMDAwMCAgICAgICAgLT4gMA0KLWRkY29tcDEwMDggY29tcGFyZSAxIDEuMDAwMDAwMDAgICAgICAgICAtPiAwDQotZGRjb21wMTAwOSBjb21wYXJlIDEgMS4wMDAwMDAwICAgICAgICAgIC0+IDANCi1kZGNvbXAxMDEwIGNvbXBhcmUgMSAxLjAwMDAwMCAgICAgICAgICAgLT4gMA0KLWRkY29tcDEwMTEgY29tcGFyZSAxIDEuMDAwMDAgICAgICAgICAgICAtPiAwDQotZGRjb21wMTAxMiBjb21wYXJlIDEgMS4wMDAwICAgICAgICAgICAgIC0+IDANCi1kZGNvbXAxMDEzIGNvbXBhcmUgMSAxLjAwMCAgICAgICAgICAgICAgLT4gMA0KLWRkY29tcDEwMTQgY29tcGFyZSAxIDEuMDAgICAgICAgICAgICAgICAtPiAwDQotZGRjb21wMTAxNSBjb21wYXJlIDEgMS4wICAgICAgICAgICAgICAgIC0+IDANCi1kZGNvbXAxMDIxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDEgLT4gMA0KLWRkY29tcDEwMjIgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwICAgMSAtPiAwDQotZGRjb21wMTAyMyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMCAgICAxIC0+IDANCi1kZGNvbXAxMDI0IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAgICAgIDEgLT4gMA0KLWRkY29tcDEwMjUgY29tcGFyZSAxLjAwMDAwMDAwMDAwICAgICAgMSAtPiAwDQotZGRjb21wMTAyNiBjb21wYXJlIDEuMDAwMDAwMDAwMCAgICAgICAxIC0+IDANCi1kZGNvbXAxMDI3IGNvbXBhcmUgMS4wMDAwMDAwMDAgICAgICAgIDEgLT4gMA0KLWRkY29tcDEwMjggY29tcGFyZSAxLjAwMDAwMDAwICAgICAgICAgMSAtPiAwDQotZGRjb21wMTAyOSBjb21wYXJlIDEuMDAwMDAwMCAgICAgICAgICAxIC0+IDANCi1kZGNvbXAxMDMwIGNvbXBhcmUgMS4wMDAwMDAgICAgICAgICAgIDEgLT4gMA0KLWRkY29tcDEwMzEgY29tcGFyZSAxLjAwMDAwICAgICAgICAgICAgMSAtPiAwDQotZGRjb21wMTAzMiBjb21wYXJlIDEuMDAwMCAgICAgICAgICAgICAxIC0+IDANCi1kZGNvbXAxMDMzIGNvbXBhcmUgMS4wMDAgICAgICAgICAgICAgIDEgLT4gMA0KLWRkY29tcDEwMzQgY29tcGFyZSAxLjAwICAgICAgICAgICAgICAgMSAtPiAwDQotZGRjb21wMTAzNSBjb21wYXJlIDEuMCAgICAgICAgICAgICAgICAxIC0+IDANCi0NCi0tLSBjaGVjayBNU0QgYWx3YXlzIGRldGVjdGVkIG5vbi16ZXJvDQotZGRjb21wMTA0MCBjb21wYXJlIDAgMC4wMDAwMDAwMDAwMDAwMDAgIC0+IDANCi1kZGNvbXAxMDQxIGNvbXBhcmUgMCAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCi1kZGNvbXAxMDQyIGNvbXBhcmUgMCAyLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCi1kZGNvbXAxMDQzIGNvbXBhcmUgMCAzLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCi1kZGNvbXAxMDQ0IGNvbXBhcmUgMCA0LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCi1kZGNvbXAxMDQ1IGNvbXBhcmUgMCA1LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCi1kZGNvbXAxMDQ2IGNvbXBhcmUgMCA2LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCi1kZGNvbXAxMDQ3IGNvbXBhcmUgMCA3LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCi1kZGNvbXAxMDQ4IGNvbXBhcmUgMCA4LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCi1kZGNvbXAxMDQ5IGNvbXBhcmUgMCA5LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCi1kZGNvbXAxMDUwIGNvbXBhcmUgMC4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMA0KLWRkY29tcDEwNTEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZGRjb21wMTA1MiBjb21wYXJlIDIuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi1kZGNvbXAxMDUzIGNvbXBhcmUgMy4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRkY29tcDEwNTQgY29tcGFyZSA0LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZGRjb21wMTA1NSBjb21wYXJlIDUuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi1kZGNvbXAxMDU2IGNvbXBhcmUgNi4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRkY29tcDEwNTcgY29tcGFyZSA3LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZGRjb21wMTA1OCBjb21wYXJlIDguMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi1kZGNvbXAxMDU5IGNvbXBhcmUgOS4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZGNvbTk5OTAgY29tcGFyZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTk5OTEgY29tcGFyZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29tcGFyZS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBjb21wYXJpc29uIHRoYXQgYWxsb3dzIHF1aWV0IE5hTnMgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZGNvbTAwMSBjb21wYXJlICAtMiAgLTIgIC0+IDAKK2RkY29tMDAyIGNvbXBhcmUgIC0yICAtMSAgLT4gLTEKK2RkY29tMDAzIGNvbXBhcmUgIC0yICAgMCAgLT4gLTEKK2RkY29tMDA0IGNvbXBhcmUgIC0yICAgMSAgLT4gLTEKK2RkY29tMDA1IGNvbXBhcmUgIC0yICAgMiAgLT4gLTEKK2RkY29tMDA2IGNvbXBhcmUgIC0xICAtMiAgLT4gMQorZGRjb20wMDcgY29tcGFyZSAgLTEgIC0xICAtPiAwCitkZGNvbTAwOCBjb21wYXJlICAtMSAgIDAgIC0+IC0xCitkZGNvbTAwOSBjb21wYXJlICAtMSAgIDEgIC0+IC0xCitkZGNvbTAxMCBjb21wYXJlICAtMSAgIDIgIC0+IC0xCitkZGNvbTAxMSBjb21wYXJlICAgMCAgLTIgIC0+IDEKK2RkY29tMDEyIGNvbXBhcmUgICAwICAtMSAgLT4gMQorZGRjb20wMTMgY29tcGFyZSAgIDAgICAwICAtPiAwCitkZGNvbTAxNCBjb21wYXJlICAgMCAgIDEgIC0+IC0xCitkZGNvbTAxNSBjb21wYXJlICAgMCAgIDIgIC0+IC0xCitkZGNvbTAxNiBjb21wYXJlICAgMSAgLTIgIC0+IDEKK2RkY29tMDE3IGNvbXBhcmUgICAxICAtMSAgLT4gMQorZGRjb20wMTggY29tcGFyZSAgIDEgICAwICAtPiAxCitkZGNvbTAxOSBjb21wYXJlICAgMSAgIDEgIC0+IDAKK2RkY29tMDIwIGNvbXBhcmUgICAxICAgMiAgLT4gLTEKK2RkY29tMDIxIGNvbXBhcmUgICAyICAtMiAgLT4gMQorZGRjb20wMjIgY29tcGFyZSAgIDIgIC0xICAtPiAxCitkZGNvbTAyMyBjb21wYXJlICAgMiAgIDAgIC0+IDEKK2RkY29tMDI1IGNvbXBhcmUgICAyICAgMSAgLT4gMQorZGRjb20wMjYgY29tcGFyZSAgIDIgICAyICAtPiAwCisKK2RkY29tMDMxIGNvbXBhcmUgIC0yMCAgLTIwICAtPiAwCitkZGNvbTAzMiBjb21wYXJlICAtMjAgIC0xMCAgLT4gLTEKK2RkY29tMDMzIGNvbXBhcmUgIC0yMCAgIDAwICAtPiAtMQorZGRjb20wMzQgY29tcGFyZSAgLTIwICAgMTAgIC0+IC0xCitkZGNvbTAzNSBjb21wYXJlICAtMjAgICAyMCAgLT4gLTEKK2RkY29tMDM2IGNvbXBhcmUgIC0xMCAgLTIwICAtPiAxCitkZGNvbTAzNyBjb21wYXJlICAtMTAgIC0xMCAgLT4gMAorZGRjb20wMzggY29tcGFyZSAgLTEwICAgMDAgIC0+IC0xCitkZGNvbTAzOSBjb21wYXJlICAtMTAgICAxMCAgLT4gLTEKK2RkY29tMDQwIGNvbXBhcmUgIC0xMCAgIDIwICAtPiAtMQorZGRjb20wNDEgY29tcGFyZSAgIDAwICAtMjAgIC0+IDEKK2RkY29tMDQyIGNvbXBhcmUgICAwMCAgLTEwICAtPiAxCitkZGNvbTA0MyBjb21wYXJlICAgMDAgICAwMCAgLT4gMAorZGRjb20wNDQgY29tcGFyZSAgIDAwICAgMTAgIC0+IC0xCitkZGNvbTA0NSBjb21wYXJlICAgMDAgICAyMCAgLT4gLTEKK2RkY29tMDQ2IGNvbXBhcmUgICAxMCAgLTIwICAtPiAxCitkZGNvbTA0NyBjb21wYXJlICAgMTAgIC0xMCAgLT4gMQorZGRjb20wNDggY29tcGFyZSAgIDEwICAgMDAgIC0+IDEKK2RkY29tMDQ5IGNvbXBhcmUgICAxMCAgIDEwICAtPiAwCitkZGNvbTA1MCBjb21wYXJlICAgMTAgICAyMCAgLT4gLTEKK2RkY29tMDUxIGNvbXBhcmUgICAyMCAgLTIwICAtPiAxCitkZGNvbTA1MiBjb21wYXJlICAgMjAgIC0xMCAgLT4gMQorZGRjb20wNTMgY29tcGFyZSAgIDIwICAgMDAgIC0+IDEKK2RkY29tMDU1IGNvbXBhcmUgICAyMCAgIDEwICAtPiAxCitkZGNvbTA1NiBjb21wYXJlICAgMjAgICAyMCAgLT4gMAorCitkZGNvbTA2MSBjb21wYXJlICAtMi4wICAtMi4wICAtPiAwCitkZGNvbTA2MiBjb21wYXJlICAtMi4wICAtMS4wICAtPiAtMQorZGRjb20wNjMgY29tcGFyZSAgLTIuMCAgIDAuMCAgLT4gLTEKK2RkY29tMDY0IGNvbXBhcmUgIC0yLjAgICAxLjAgIC0+IC0xCitkZGNvbTA2NSBjb21wYXJlICAtMi4wICAgMi4wICAtPiAtMQorZGRjb20wNjYgY29tcGFyZSAgLTEuMCAgLTIuMCAgLT4gMQorZGRjb20wNjcgY29tcGFyZSAgLTEuMCAgLTEuMCAgLT4gMAorZGRjb20wNjggY29tcGFyZSAgLTEuMCAgIDAuMCAgLT4gLTEKK2RkY29tMDY5IGNvbXBhcmUgIC0xLjAgICAxLjAgIC0+IC0xCitkZGNvbTA3MCBjb21wYXJlICAtMS4wICAgMi4wICAtPiAtMQorZGRjb20wNzEgY29tcGFyZSAgIDAuMCAgLTIuMCAgLT4gMQorZGRjb20wNzIgY29tcGFyZSAgIDAuMCAgLTEuMCAgLT4gMQorZGRjb20wNzMgY29tcGFyZSAgIDAuMCAgIDAuMCAgLT4gMAorZGRjb20wNzQgY29tcGFyZSAgIDAuMCAgIDEuMCAgLT4gLTEKK2RkY29tMDc1IGNvbXBhcmUgICAwLjAgICAyLjAgIC0+IC0xCitkZGNvbTA3NiBjb21wYXJlICAgMS4wICAtMi4wICAtPiAxCitkZGNvbTA3NyBjb21wYXJlICAgMS4wICAtMS4wICAtPiAxCitkZGNvbTA3OCBjb21wYXJlICAgMS4wICAgMC4wICAtPiAxCitkZGNvbTA3OSBjb21wYXJlICAgMS4wICAgMS4wICAtPiAwCitkZGNvbTA4MCBjb21wYXJlICAgMS4wICAgMi4wICAtPiAtMQorZGRjb20wODEgY29tcGFyZSAgIDIuMCAgLTIuMCAgLT4gMQorZGRjb20wODIgY29tcGFyZSAgIDIuMCAgLTEuMCAgLT4gMQorZGRjb20wODMgY29tcGFyZSAgIDIuMCAgIDAuMCAgLT4gMQorZGRjb20wODUgY29tcGFyZSAgIDIuMCAgIDEuMCAgLT4gMQorZGRjb20wODYgY29tcGFyZSAgIDIuMCAgIDIuMCAgLT4gMAorZGRjb20wODcgY29tcGFyZSAgIDEuMCAgIDAuMSAgLT4gMQorZGRjb20wODggY29tcGFyZSAgIDAuMSAgIDEuMCAgLT4gLTEKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkZGNvbTA5NSBjb21wYXJlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDAKK2RkY29tMDk2IGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTEKK2RkY29tMDk3IGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQorZGRjb20wOTggY29tcGFyZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworZGRjb20xMDAgY29tcGFyZSAgIDcuMCAgICA3LjAgICAgLT4gMAorZGRjb20xMDEgY29tcGFyZSAgIDcuMCAgICA3ICAgICAgLT4gMAorZGRjb20xMDIgY29tcGFyZSAgIDcgICAgICA3LjAgICAgLT4gMAorZGRjb20xMDMgY29tcGFyZSAgIDdFKzAgICA3LjAgICAgLT4gMAorZGRjb20xMDQgY29tcGFyZSAgIDcwRS0xICA3LjAgICAgLT4gMAorZGRjb20xMDUgY29tcGFyZSAgIDAuN0UrMSA3ICAgICAgLT4gMAorZGRjb20xMDYgY29tcGFyZSAgIDcwRS0xICA3ICAgICAgLT4gMAorZGRjb20xMDcgY29tcGFyZSAgIDcuMCAgICA3RSswICAgLT4gMAorZGRjb20xMDggY29tcGFyZSAgIDcuMCAgICA3MEUtMSAgLT4gMAorZGRjb20xMDkgY29tcGFyZSAgIDcgICAgICAwLjdFKzEgLT4gMAorZGRjb20xMTAgY29tcGFyZSAgIDcgICAgICA3MEUtMSAgLT4gMAorCitkZGNvbTEyMCBjb21wYXJlICAgOC4wICAgIDcuMCAgICAtPiAxCitkZGNvbTEyMSBjb21wYXJlICAgOC4wICAgIDcgICAgICAtPiAxCitkZGNvbTEyMiBjb21wYXJlICAgOCAgICAgIDcuMCAgICAtPiAxCitkZGNvbTEyMyBjb21wYXJlICAgOEUrMCAgIDcuMCAgICAtPiAxCitkZGNvbTEyNCBjb21wYXJlICAgODBFLTEgIDcuMCAgICAtPiAxCitkZGNvbTEyNSBjb21wYXJlICAgMC44RSsxIDcgICAgICAtPiAxCitkZGNvbTEyNiBjb21wYXJlICAgODBFLTEgIDcgICAgICAtPiAxCitkZGNvbTEyNyBjb21wYXJlICAgOC4wICAgIDdFKzAgICAtPiAxCitkZGNvbTEyOCBjb21wYXJlICAgOC4wICAgIDcwRS0xICAtPiAxCitkZGNvbTEyOSBjb21wYXJlICAgOCAgICAgIDAuN0UrMSAgLT4gMQorZGRjb20xMzAgY29tcGFyZSAgIDggICAgICA3MEUtMSAgLT4gMQorCitkZGNvbTE0MCBjb21wYXJlICAgOC4wICAgIDkuMCAgICAtPiAtMQorZGRjb20xNDEgY29tcGFyZSAgIDguMCAgICA5ICAgICAgLT4gLTEKK2RkY29tMTQyIGNvbXBhcmUgICA4ICAgICAgOS4wICAgIC0+IC0xCitkZGNvbTE0MyBjb21wYXJlICAgOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjb20xNDQgY29tcGFyZSAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2RkY29tMTQ1IGNvbXBhcmUgICAwLjhFKzEgOSAgICAgIC0+IC0xCitkZGNvbTE0NiBjb21wYXJlICAgODBFLTEgIDkgICAgICAtPiAtMQorZGRjb20xNDcgY29tcGFyZSAgIDguMCAgICA5RSswICAgLT4gLTEKK2RkY29tMTQ4IGNvbXBhcmUgICA4LjAgICAgOTBFLTEgIC0+IC0xCitkZGNvbTE0OSBjb21wYXJlICAgOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjb20xNTAgY29tcGFyZSAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZGRjb20yMDAgY29tcGFyZSAgLTcuMCAgICA3LjAgICAgLT4gLTEKK2RkY29tMjAxIGNvbXBhcmUgIC03LjAgICAgNyAgICAgIC0+IC0xCitkZGNvbTIwMiBjb21wYXJlICAtNyAgICAgIDcuMCAgICAtPiAtMQorZGRjb20yMDMgY29tcGFyZSAgLTdFKzAgICA3LjAgICAgLT4gLTEKK2RkY29tMjA0IGNvbXBhcmUgIC03MEUtMSAgNy4wICAgIC0+IC0xCitkZGNvbTIwNSBjb21wYXJlICAtMC43RSsxIDcgICAgICAtPiAtMQorZGRjb20yMDYgY29tcGFyZSAgLTcwRS0xICA3ICAgICAgLT4gLTEKK2RkY29tMjA3IGNvbXBhcmUgIC03LjAgICAgN0UrMCAgIC0+IC0xCitkZGNvbTIwOCBjb21wYXJlICAtNy4wICAgIDcwRS0xICAtPiAtMQorZGRjb20yMDkgY29tcGFyZSAgLTcgICAgICAwLjdFKzEgLT4gLTEKK2RkY29tMjEwIGNvbXBhcmUgIC03ICAgICAgNzBFLTEgIC0+IC0xCisKK2RkY29tMjIwIGNvbXBhcmUgIC04LjAgICAgNy4wICAgIC0+IC0xCitkZGNvbTIyMSBjb21wYXJlICAtOC4wICAgIDcgICAgICAtPiAtMQorZGRjb20yMjIgY29tcGFyZSAgLTggICAgICA3LjAgICAgLT4gLTEKK2RkY29tMjIzIGNvbXBhcmUgIC04RSswICAgNy4wICAgIC0+IC0xCitkZGNvbTIyNCBjb21wYXJlICAtODBFLTEgIDcuMCAgICAtPiAtMQorZGRjb20yMjUgY29tcGFyZSAgLTAuOEUrMSA3ICAgICAgLT4gLTEKK2RkY29tMjI2IGNvbXBhcmUgIC04MEUtMSAgNyAgICAgIC0+IC0xCitkZGNvbTIyNyBjb21wYXJlICAtOC4wICAgIDdFKzAgICAtPiAtMQorZGRjb20yMjggY29tcGFyZSAgLTguMCAgICA3MEUtMSAgLT4gLTEKK2RkY29tMjI5IGNvbXBhcmUgIC04ICAgICAgMC43RSsxIC0+IC0xCitkZGNvbTIzMCBjb21wYXJlICAtOCAgICAgIDcwRS0xICAtPiAtMQorCitkZGNvbTI0MCBjb21wYXJlICAtOC4wICAgIDkuMCAgICAtPiAtMQorZGRjb20yNDEgY29tcGFyZSAgLTguMCAgICA5ICAgICAgLT4gLTEKK2RkY29tMjQyIGNvbXBhcmUgIC04ICAgICAgOS4wICAgIC0+IC0xCitkZGNvbTI0MyBjb21wYXJlICAtOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjb20yNDQgY29tcGFyZSAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2RkY29tMjQ1IGNvbXBhcmUgIC0wLjhFKzEgOSAgICAgIC0+IC0xCitkZGNvbTI0NiBjb21wYXJlICAtODBFLTEgIDkgICAgICAtPiAtMQorZGRjb20yNDcgY29tcGFyZSAgLTguMCAgICA5RSswICAgLT4gLTEKK2RkY29tMjQ4IGNvbXBhcmUgIC04LjAgICAgOTBFLTEgIC0+IC0xCitkZGNvbTI0OSBjb21wYXJlICAtOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjb20yNTAgY29tcGFyZSAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZGRjb20zMDAgY29tcGFyZSAgIDcuMCAgICAtNy4wICAgIC0+IDEKK2RkY29tMzAxIGNvbXBhcmUgICA3LjAgICAgLTcgICAgICAtPiAxCitkZGNvbTMwMiBjb21wYXJlICAgNyAgICAgIC03LjAgICAgLT4gMQorZGRjb20zMDMgY29tcGFyZSAgIDdFKzAgICAtNy4wICAgIC0+IDEKK2RkY29tMzA0IGNvbXBhcmUgICA3MEUtMSAgLTcuMCAgICAtPiAxCitkZGNvbTMwNSBjb21wYXJlICAgLjdFKzEgIC03ICAgICAgLT4gMQorZGRjb20zMDYgY29tcGFyZSAgIDcwRS0xICAtNyAgICAgIC0+IDEKK2RkY29tMzA3IGNvbXBhcmUgICA3LjAgICAgLTdFKzAgICAtPiAxCitkZGNvbTMwOCBjb21wYXJlICAgNy4wICAgIC03MEUtMSAgLT4gMQorZGRjb20zMDkgY29tcGFyZSAgIDcgICAgICAtLjdFKzEgIC0+IDEKK2RkY29tMzEwIGNvbXBhcmUgICA3ICAgICAgLTcwRS0xICAtPiAxCisKK2RkY29tMzIwIGNvbXBhcmUgICA4LjAgICAgLTcuMCAgICAtPiAxCitkZGNvbTMyMSBjb21wYXJlICAgOC4wICAgIC03ICAgICAgLT4gMQorZGRjb20zMjIgY29tcGFyZSAgIDggICAgICAtNy4wICAgIC0+IDEKK2RkY29tMzIzIGNvbXBhcmUgICA4RSswICAgLTcuMCAgICAtPiAxCitkZGNvbTMyNCBjb21wYXJlICAgODBFLTEgIC03LjAgICAgLT4gMQorZGRjb20zMjUgY29tcGFyZSAgIC44RSsxICAtNyAgICAgIC0+IDEKK2RkY29tMzI2IGNvbXBhcmUgICA4MEUtMSAgLTcgICAgICAtPiAxCitkZGNvbTMyNyBjb21wYXJlICAgOC4wICAgIC03RSswICAgLT4gMQorZGRjb20zMjggY29tcGFyZSAgIDguMCAgICAtNzBFLTEgIC0+IDEKK2RkY29tMzI5IGNvbXBhcmUgICA4ICAgICAgLS43RSsxICAtPiAxCitkZGNvbTMzMCBjb21wYXJlICAgOCAgICAgIC03MEUtMSAgLT4gMQorCitkZGNvbTM0MCBjb21wYXJlICAgOC4wICAgIC05LjAgICAgLT4gMQorZGRjb20zNDEgY29tcGFyZSAgIDguMCAgICAtOSAgICAgIC0+IDEKK2RkY29tMzQyIGNvbXBhcmUgICA4ICAgICAgLTkuMCAgICAtPiAxCitkZGNvbTM0MyBjb21wYXJlICAgOEUrMCAgIC05LjAgICAgLT4gMQorZGRjb20zNDQgY29tcGFyZSAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2RkY29tMzQ1IGNvbXBhcmUgICAuOEUrMSAgLTkgICAgICAtPiAxCitkZGNvbTM0NiBjb21wYXJlICAgODBFLTEgIC05ICAgICAgLT4gMQorZGRjb20zNDcgY29tcGFyZSAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2RkY29tMzQ4IGNvbXBhcmUgICA4LjAgICAgLTkwRS0xICAtPiAxCitkZGNvbTM0OSBjb21wYXJlICAgOCAgICAgIC0uOUUrMSAgLT4gMQorZGRjb20zNTAgY29tcGFyZSAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZGRjb200MDAgY29tcGFyZSAgIC03LjAgICAgLTcuMCAgICAtPiAwCitkZGNvbTQwMSBjb21wYXJlICAgLTcuMCAgICAtNyAgICAgIC0+IDAKK2RkY29tNDAyIGNvbXBhcmUgICAtNyAgICAgIC03LjAgICAgLT4gMAorZGRjb200MDMgY29tcGFyZSAgIC03RSswICAgLTcuMCAgICAtPiAwCitkZGNvbTQwNCBjb21wYXJlICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2RkY29tNDA1IGNvbXBhcmUgICAtLjdFKzEgIC03ICAgICAgLT4gMAorZGRjb200MDYgY29tcGFyZSAgIC03MEUtMSAgLTcgICAgICAtPiAwCitkZGNvbTQwNyBjb21wYXJlICAgLTcuMCAgICAtN0UrMCAgIC0+IDAKK2RkY29tNDA4IGNvbXBhcmUgICAtNy4wICAgIC03MEUtMSAgLT4gMAorZGRjb200MDkgY29tcGFyZSAgIC03ICAgICAgLS43RSsxICAtPiAwCitkZGNvbTQxMCBjb21wYXJlICAgLTcgICAgICAtNzBFLTEgIC0+IDAKKworZGRjb200MjAgY29tcGFyZSAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorZGRjb200MjEgY29tcGFyZSAgIC04LjAgICAgLTcgICAgICAtPiAtMQorZGRjb200MjIgY29tcGFyZSAgIC04ICAgICAgLTcuMCAgICAtPiAtMQorZGRjb200MjMgY29tcGFyZSAgIC04RSswICAgLTcuMCAgICAtPiAtMQorZGRjb200MjQgY29tcGFyZSAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQorZGRjb200MjUgY29tcGFyZSAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQorZGRjb200MjYgY29tcGFyZSAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorZGRjb200MjcgY29tcGFyZSAgIC04LjAgICAgLTdFKzAgICAtPiAtMQorZGRjb200MjggY29tcGFyZSAgIC04LjAgICAgLTcwRS0xICAtPiAtMQorZGRjb200MjkgY29tcGFyZSAgIC04ICAgICAgLS43RSsxICAtPiAtMQorZGRjb200MzAgY29tcGFyZSAgIC04ICAgICAgLTcwRS0xICAtPiAtMQorCitkZGNvbTQ0MCBjb21wYXJlICAgLTguMCAgICAtOS4wICAgIC0+IDEKK2RkY29tNDQxIGNvbXBhcmUgICAtOC4wICAgIC05ICAgICAgLT4gMQorZGRjb200NDIgY29tcGFyZSAgIC04ICAgICAgLTkuMCAgICAtPiAxCitkZGNvbTQ0MyBjb21wYXJlICAgLThFKzAgICAtOS4wICAgIC0+IDEKK2RkY29tNDQ0IGNvbXBhcmUgICAtODBFLTEgIC05LjAgICAgLT4gMQorZGRjb200NDUgY29tcGFyZSAgIC0uOEUrMSAgLTkgICAgICAtPiAxCitkZGNvbTQ0NiBjb21wYXJlICAgLTgwRS0xICAtOSAgICAgIC0+IDEKK2RkY29tNDQ3IGNvbXBhcmUgICAtOC4wICAgIC05RSswICAgLT4gMQorZGRjb200NDggY29tcGFyZSAgIC04LjAgICAgLTkwRS0xICAtPiAxCitkZGNvbTQ0OSBjb21wYXJlICAgLTggICAgICAtLjlFKzEgIC0+IDEKK2RkY29tNDUwIGNvbXBhcmUgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KK2RkY29tNDUxIGNvbXBhcmUgICAgICAxLjAgICAgICAgMC4xICAtPiAxCitkZGNvbTQ1MiBjb21wYXJlICAgICAgMC4xICAgICAgIDEuMCAgLT4gLTEKK2RkY29tNDUzIGNvbXBhcmUgICAgIDEwLjAgICAgICAgMC4xICAtPiAxCitkZGNvbTQ1NCBjb21wYXJlICAgICAgMC4xICAgICAgMTAuMCAgLT4gLTEKK2RkY29tNDU1IGNvbXBhcmUgICAgICAxMDAgICAgICAgMS4wICAtPiAxCitkZGNvbTQ1NiBjb21wYXJlICAgICAgMS4wICAgICAgIDEwMCAgLT4gLTEKK2RkY29tNDU3IGNvbXBhcmUgICAgIDEwMDAgICAgICAxMC4wICAtPiAxCitkZGNvbTQ1OCBjb21wYXJlICAgICAxMC4wICAgICAgMTAwMCAgLT4gLTEKK2RkY29tNDU5IGNvbXBhcmUgICAgMTAwMDAgICAgIDEwMC4wICAtPiAxCitkZGNvbTQ2MCBjb21wYXJlICAgIDEwMC4wICAgICAxMDAwMCAgLT4gLTEKK2RkY29tNDYxIGNvbXBhcmUgICAxMDAwMDAgICAgMTAwMC4wICAtPiAxCitkZGNvbTQ2MiBjb21wYXJlICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gLTEKK2RkY29tNDYzIGNvbXBhcmUgIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxCitkZGNvbTQ2NCBjb21wYXJlICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gLTEKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitkZGNvbTQ3MyBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ3NCBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKK2RkY29tNDc1IGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ3NiBjb21wYXJlIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNvbTQ3NyBjb21wYXJlIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY29tNDc4IGNvbXBhcmUgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNvbTQ3OSBjb21wYXJlIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ4MCBjb21wYXJlIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKK2RkY29tNDgxIGNvbXBhcmUgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ4MiBjb21wYXJlIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNvbTQ4MyBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY29tNDg3IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5IC0+IDAKK2RkY29tNDg4IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMAorZGRjb200ODkgY29tcGFyZSAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDAKK2RkY29tNDkwIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDAKK2RkY29tNDkxIGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMAorZGRjb200OTIgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDAKK2RkY29tNDkzIGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5IC0+IDAKK2RkY29tNDk0IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMAorZGRjb200OTUgY29tcGFyZSAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDAKK2RkY29tNDk2IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDAKK2RkY29tNDk3IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitkZGNvbTUwMCBjb21wYXJlICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2RkY29tNTAxIGNvbXBhcmUgICAgMSAgICAgMUUtMTQgICAgLT4gMQorZGRjb201MDIgY29tcGFyZSAgICAxICAgICAxRS0xMyAgICAtPiAxCitkZGNvbTUwMyBjb21wYXJlICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2RkY29tNTA0IGNvbXBhcmUgICAgMSAgICAgMUUtMTEgICAgLT4gMQorZGRjb201MDUgY29tcGFyZSAgICAxICAgICAxRS0xMCAgICAtPiAxCitkZGNvbTUwNiBjb21wYXJlICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2RkY29tNTA3IGNvbXBhcmUgICAgMSAgICAgMUUtOCAgICAgLT4gMQorZGRjb201MDggY29tcGFyZSAgICAxICAgICAxRS03ICAgICAtPiAxCitkZGNvbTUwOSBjb21wYXJlICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2RkY29tNTEwIGNvbXBhcmUgICAgMSAgICAgMUUtNSAgICAgLT4gMQorZGRjb201MTEgY29tcGFyZSAgICAxICAgICAxRS00ICAgICAtPiAxCitkZGNvbTUxMiBjb21wYXJlICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2RkY29tNTEzIGNvbXBhcmUgICAgMSAgICAgMUUtMiAgICAgLT4gMQorZGRjb201MTQgY29tcGFyZSAgICAxICAgICAxRS0xICAgICAtPiAxCitkZGNvbTUxNSBjb21wYXJlICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2RkY29tNTE2IGNvbXBhcmUgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKK2RkY29tNTE3IGNvbXBhcmUgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY29tNTE4IGNvbXBhcmUgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2RkY29tNTE5IGNvbXBhcmUgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKK2RkY29tNTIxIGNvbXBhcmUgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2RkY29tNTIyIGNvbXBhcmUgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2RkY29tNTIzIGNvbXBhcmUgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKK2RkY29tNTI0IGNvbXBhcmUgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2RkY29tNTI1IGNvbXBhcmUgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2RkY29tNTI2IGNvbXBhcmUgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKK2RkY29tNTI3IGNvbXBhcmUgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2RkY29tNTI4IGNvbXBhcmUgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2RkY29tNTI5IGNvbXBhcmUgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKK2RkY29tNTMwIGNvbXBhcmUgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2RkY29tNTMxIGNvbXBhcmUgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKKy0tIExSIHN3YXAKK2RkY29tNTQwIGNvbXBhcmUgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2RkY29tNTQxIGNvbXBhcmUgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKK2RkY29tNTQyIGNvbXBhcmUgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2RkY29tNTQzIGNvbXBhcmUgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ0IGNvbXBhcmUgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ1IGNvbXBhcmUgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ2IGNvbXBhcmUgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ3IGNvbXBhcmUgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ4IGNvbXBhcmUgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ5IGNvbXBhcmUgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2RkY29tNTUwIGNvbXBhcmUgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKK2RkY29tNTUxIGNvbXBhcmUgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2RkY29tNTUyIGNvbXBhcmUgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2RkY29tNTUzIGNvbXBhcmUgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKK2RkY29tNTU0IGNvbXBhcmUgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2RkY29tNTU1IGNvbXBhcmUgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2RkY29tNTU2IGNvbXBhcmUgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKK2RkY29tNTU3IGNvbXBhcmUgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2RkY29tNTU4IGNvbXBhcmUgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2RkY29tNTU5IGNvbXBhcmUgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKK2RkY29tNTYxIGNvbXBhcmUgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2RkY29tNTYyIGNvbXBhcmUgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2RkY29tNTYzIGNvbXBhcmUgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKK2RkY29tNTY0IGNvbXBhcmUgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2RkY29tNTY1IGNvbXBhcmUgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2RkY29tNTY2IGNvbXBhcmUgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKK2RkY29tNTY3IGNvbXBhcmUgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2RkY29tNTY4IGNvbXBhcmUgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2RkY29tNTY5IGNvbXBhcmUgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKK2RkY29tNTcwIGNvbXBhcmUgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2RkY29tNTcxIGNvbXBhcmUgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorZGRjb201ODAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2RkY29tNTgxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCitkZGNvbTU4MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQorZGRjb201ODMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2RkY29tNTg0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCitkZGNvbTU4NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQorZGRjb201ODYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2RkY29tNTg3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCitkZGNvbTU4OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQorZGRjb201ODkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitkZGNvbTU5MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKK2RkY29tNTkxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQorZGRjb201OTIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitkZGNvbTU5MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKK2RkY29tNTk0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQorZGRjb201OTUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitkZGNvbTU5NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKK2RkY29tNTk3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQorZGRjb201OTggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNvbTU5OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK2RkY29tNjAwIGNvbXBhcmUgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjAxIGNvbXBhcmUgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjAyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjAzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjEwIGNvbXBhcmUgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2RkY29tNjExIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKK2RkY29tNjEyIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKK2RkY29tNjEzIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2RkY29tNjE0IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKK2RkY29tNjE1IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKK2RkY29tNjE2IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2RkY29tNjE3IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKK2RkY29tNjE4IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKK2RkY29tNjE5IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2RkY29tNjIwIGNvbXBhcmUgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjIxIGNvbXBhcmUgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjIyIGNvbXBhcmUgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjIzIGNvbXBhcmUgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI0IGNvbXBhcmUgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI1IGNvbXBhcmUgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI2IGNvbXBhcmUgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI3IGNvbXBhcmUgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI4IGNvbXBhcmUgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI5IGNvbXBhcmUgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjMwIGNvbXBhcmUgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKK2RkY29tNjMxIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2RkY29tNjMyIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKK2RkY29tNjMzIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKK2RkY29tNjM0IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2RkY29tNjM1IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKK2RkY29tNjM2IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKK2RkY29tNjM3IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2RkY29tNjM4IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKK2RkY29tNjM5IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkY29tNjQwIGNvbXBhcmUgICAwICAgICAwICAgLT4gMAorZGRjb202NDEgY29tcGFyZSAgIDAgICAgLTAgICAtPiAwCitkZGNvbTY0MiBjb21wYXJlICAgMCAgICAtMC4wIC0+IDAKK2RkY29tNjQzIGNvbXBhcmUgICAwICAgICAwLjAgLT4gMAorZGRjb202NDQgY29tcGFyZSAgLTAgICAgIDAgICAtPiAwCitkZGNvbTY0NSBjb21wYXJlICAtMCAgICAtMCAgIC0+IDAKK2RkY29tNjQ2IGNvbXBhcmUgIC0wICAgIC0wLjAgLT4gMAorZGRjb202NDcgY29tcGFyZSAgLTAgICAgIDAuMCAtPiAwCitkZGNvbTY0OCBjb21wYXJlICAgMC4wICAgMCAgIC0+IDAKK2RkY29tNjQ5IGNvbXBhcmUgICAwLjAgIC0wICAgLT4gMAorZGRjb202NTAgY29tcGFyZSAgIDAuMCAgLTAuMCAtPiAwCitkZGNvbTY1MSBjb21wYXJlICAgMC4wICAgMC4wIC0+IDAKK2RkY29tNjUyIGNvbXBhcmUgIC0wLjAgICAwICAgLT4gMAorZGRjb202NTMgY29tcGFyZSAgLTAuMCAgLTAgICAtPiAwCitkZGNvbTY1NCBjb21wYXJlICAtMC4wICAtMC4wIC0+IDAKK2RkY29tNjU1IGNvbXBhcmUgIC0wLjAgICAwLjAgLT4gMAorCitkZGNvbTY1NiBjb21wYXJlICAtMEUxICAgMC4wIC0+IDAKK2RkY29tNjU3IGNvbXBhcmUgIC0wRTIgICAwLjAgLT4gMAorZGRjb202NTggY29tcGFyZSAgIDBFMSAgIDAuMCAtPiAwCitkZGNvbTY1OSBjb21wYXJlICAgMEUyICAgMC4wIC0+IDAKK2RkY29tNjYwIGNvbXBhcmUgIC0wRTEgICAwICAgLT4gMAorZGRjb202NjEgY29tcGFyZSAgLTBFMiAgIDAgICAtPiAwCitkZGNvbTY2MiBjb21wYXJlICAgMEUxICAgMCAgIC0+IDAKK2RkY29tNjYzIGNvbXBhcmUgICAwRTIgICAwICAgLT4gMAorZGRjb202NjQgY29tcGFyZSAgLTBFMSAgLTBFMSAtPiAwCitkZGNvbTY2NSBjb21wYXJlICAtMEUyICAtMEUxIC0+IDAKK2RkY29tNjY2IGNvbXBhcmUgICAwRTEgIC0wRTEgLT4gMAorZGRjb202NjcgY29tcGFyZSAgIDBFMiAgLTBFMSAtPiAwCitkZGNvbTY2OCBjb21wYXJlICAtMEUxICAtMEUyIC0+IDAKK2RkY29tNjY5IGNvbXBhcmUgIC0wRTIgIC0wRTIgLT4gMAorZGRjb202NzAgY29tcGFyZSAgIDBFMSAgLTBFMiAtPiAwCitkZGNvbTY3MSBjb21wYXJlICAgMEUyICAtMEUyIC0+IDAKK2RkY29tNjcyIGNvbXBhcmUgIC0wRTEgICAwRTEgLT4gMAorZGRjb202NzMgY29tcGFyZSAgLTBFMiAgIDBFMSAtPiAwCitkZGNvbTY3NCBjb21wYXJlICAgMEUxICAgMEUxIC0+IDAKK2RkY29tNjc1IGNvbXBhcmUgICAwRTIgICAwRTEgLT4gMAorZGRjb202NzYgY29tcGFyZSAgLTBFMSAgIDBFMiAtPiAwCitkZGNvbTY3NyBjb21wYXJlICAtMEUyICAgMEUyIC0+IDAKK2RkY29tNjc4IGNvbXBhcmUgICAwRTEgICAwRTIgLT4gMAorZGRjb202NzkgY29tcGFyZSAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RkY29tNjgwIGNvbXBhcmUgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorZGRjb202ODEgY29tcGFyZSAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwCitkZGNvbTY4MiBjb21wYXJlICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDAKK2RkY29tNjgzIGNvbXBhcmUgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMAorZGRjb202ODQgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwCitkZGNvbTY4NSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDAKK2RkY29tNjg2IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMAorZGRjb202ODcgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwCitkZGNvbTY4OCBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDAKK2RkY29tNjg5IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMAorZGRjb202OTAgY29tcGFyZSAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCitkZGNvbTY5MSBjb21wYXJlICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDAKK2RkY29tNjkyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMAorZGRjb202OTMgY29tcGFyZSAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwCitkZGNvbTY5NCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDAKK2RkY29tNjk1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMAorZGRjb202OTYgY29tcGFyZSAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwCitkZGNvbTY5NyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDAKK2RkY29tNjk4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMAorZGRjb202OTkgY29tcGFyZSAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwCisKKy0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdAorZGRjb203MDAgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NSAtPiAxCitkZGNvbTcwMSBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IDAKK2RkY29tNzAyIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTcgLT4gLTEKK2RkY29tNzAzIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDAyMzQ1Njc4OTAxMjM0NTYgLT4gMQorZGRjb203MDQgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwCitkZGNvbTcwNSBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAyMjM0NTY3ODkwMTIzNDU2IC0+IC0xCitkZGNvbTcwNiBjb21wYXJlICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMDM0NTY3ODkwMTIzNDU2IC0+IDEKK2RkY29tNzA3IGNvbXBhcmUgICAxMTM0NTY3ODkwMTIzNDU2IDExMzQ1Njc4OTAxMjM0NTYgLT4gMAorZGRjb203MDggY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQorCistLSBtaXNjZWxsYW5lb3VzCitkZGNvbTcyMSBjb21wYXJlIDEyMzQ1Njc4MDAwIDEgLT4gMQorZGRjb203MjIgY29tcGFyZSAxIDEyMzQ1Njc4MDAwIC0+IC0xCitkZGNvbTcyMyBjb21wYXJlIDEyMzQ1Njc4MDAgIDEgLT4gMQorZGRjb203MjQgY29tcGFyZSAxIDEyMzQ1Njc4MDAgIC0+IC0xCitkZGNvbTcyNSBjb21wYXJlIDEyMzQ1Njc4OTAgIDEgLT4gMQorZGRjb203MjYgY29tcGFyZSAxIDEyMzQ1Njc4OTAgIC0+IC0xCitkZGNvbTcyNyBjb21wYXJlIDEyMzQ1Njc4OTEgIDEgLT4gMQorZGRjb203MjggY29tcGFyZSAxIDEyMzQ1Njc4OTEgIC0+IC0xCitkZGNvbTcyOSBjb21wYXJlIDEyMzQ1Njc4OTAxIDEgLT4gMQorZGRjb203MzAgY29tcGFyZSAxIDEyMzQ1Njc4OTAxIC0+IC0xCitkZGNvbTczMSBjb21wYXJlIDEyMzQ1Njc4OTYgIDEgLT4gMQorZGRjb203MzIgY29tcGFyZSAxIDEyMzQ1Njc4OTYgIC0+IC0xCisKKy0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uCitkZGNvbTc0MCBjb21wYXJlICAxICAwLjk5OTk5OTkgIC0+IDEKK2RkY29tNzQxIGNvbXBhcmUgIDEgIDAuOTk5OTk5ICAgLT4gMQorZGRjb203NDIgY29tcGFyZSAgMSAgMC45OTk5OSAgICAtPiAxCitkZGNvbTc0MyBjb21wYXJlICAxICAxLjAwMDAgICAgIC0+IDAKK2RkY29tNzQ0IGNvbXBhcmUgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2RkY29tNzQ1IGNvbXBhcmUgIDEgIDEuMDAwMDAxICAgLT4gLTEKK2RkY29tNzQ2IGNvbXBhcmUgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2RkY29tNzUwIGNvbXBhcmUgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2RkY29tNzUxIGNvbXBhcmUgIDAuOTk5OTk5ICAgMSAgLT4gLTEKK2RkY29tNzUyIGNvbXBhcmUgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2RkY29tNzUzIGNvbXBhcmUgIDEuMDAwMCAgICAgMSAgLT4gMAorZGRjb203NTQgY29tcGFyZSAgMS4wMDAwMSAgICAxICAtPiAxCitkZGNvbTc1NSBjb21wYXJlICAxLjAwMDAwMSAgIDEgIC0+IDEKK2RkY29tNzU2IGNvbXBhcmUgIDEuMDAwMDAwMSAgMSAgLT4gMQorCistLSBTcGVjaWFscworZGRjb203ODAgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDEKK2RkY29tNzgxIGNvbXBhcmUgIEluZiAgLTEwMDAgIC0+ICAxCitkZGNvbTc4MiBjb21wYXJlICBJbmYgIC0xICAgICAtPiAgMQorZGRjb203ODMgY29tcGFyZSAgSW5mICAtMCAgICAgLT4gIDEKK2RkY29tNzg0IGNvbXBhcmUgIEluZiAgIDAgICAgIC0+ICAxCitkZGNvbTc4NSBjb21wYXJlICBJbmYgICAxICAgICAtPiAgMQorZGRjb203ODYgY29tcGFyZSAgSW5mICAgMTAwMCAgLT4gIDEKK2RkY29tNzg3IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwCitkZGNvbTc4OCBjb21wYXJlIC0xMDAwICBJbmYgICAtPiAtMQorZGRjb203ODkgY29tcGFyZSAtSW5mICAgSW5mICAgLT4gLTEKK2RkY29tNzkwIGNvbXBhcmUgLTEgICAgIEluZiAgIC0+IC0xCitkZGNvbTc5MSBjb21wYXJlIC0wICAgICBJbmYgICAtPiAtMQorZGRjb203OTIgY29tcGFyZSAgMCAgICAgSW5mICAgLT4gLTEKK2RkY29tNzkzIGNvbXBhcmUgIDEgICAgIEluZiAgIC0+IC0xCitkZGNvbTc5NCBjb21wYXJlICAxMDAwICBJbmYgICAtPiAtMQorZGRjb203OTUgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDAKKworZGRjb204MDAgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDAKK2RkY29tODAxIGNvbXBhcmUgLUluZiAgLTEwMDAgIC0+IC0xCitkZGNvbTgwMiBjb21wYXJlIC1JbmYgIC0xICAgICAtPiAtMQorZGRjb204MDMgY29tcGFyZSAtSW5mICAtMCAgICAgLT4gLTEKK2RkY29tODA0IGNvbXBhcmUgLUluZiAgIDAgICAgIC0+IC0xCitkZGNvbTgwNSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAtMQorZGRjb204MDYgY29tcGFyZSAtSW5mICAgMTAwMCAgLT4gLTEKK2RkY29tODA3IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xCitkZGNvbTgwOCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMAorZGRjb204MDkgY29tcGFyZSAtMTAwMCAtSW5mICAgLT4gIDEKK2RkY29tODEwIGNvbXBhcmUgLTEgICAgLUluZiAgIC0+ICAxCitkZGNvbTgxMSBjb21wYXJlIC0wICAgIC1JbmYgICAtPiAgMQorZGRjb204MTIgY29tcGFyZSAgMCAgICAtSW5mICAgLT4gIDEKK2RkY29tODEzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAxCitkZGNvbTgxNCBjb21wYXJlICAxMDAwIC1JbmYgICAtPiAgMQorZGRjb204MTUgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDEKKworZGRjb204MjEgY29tcGFyZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRjb204MjIgY29tcGFyZSAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRjb204MjMgY29tcGFyZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRjb204MjQgY29tcGFyZSAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRjb204MjUgY29tcGFyZSAgTmFOICAwICAgICAgLT4gIE5hTgorZGRjb204MjYgY29tcGFyZSAgTmFOICAxICAgICAgLT4gIE5hTgorZGRjb204MjcgY29tcGFyZSAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRjb204MjggY29tcGFyZSAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRjb204MjkgY29tcGFyZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRjb204MzAgY29tcGFyZSAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRjb204MzEgY29tcGFyZSAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRjb204MzIgY29tcGFyZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRjb204MzMgY29tcGFyZSAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRjb204MzQgY29tcGFyZSAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRjb204MzUgY29tcGFyZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRjb204MzYgY29tcGFyZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRjb204MzcgY29tcGFyZSAgSW5mICBOYU4gICAgLT4gIE5hTgorZGRjb204MzggY29tcGFyZSAtTmFOIC1OYU4gICAgLT4gLU5hTgorZGRjb204MzkgY29tcGFyZSArTmFOIC1OYU4gICAgLT4gIE5hTgorZGRjb204NDAgY29tcGFyZSAtTmFOICtOYU4gICAgLT4gLU5hTgorCitkZGNvbTg0MSBjb21wYXJlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NDIgY29tcGFyZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQzIGNvbXBhcmUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg0NCBjb21wYXJlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NDUgY29tcGFyZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQ2IGNvbXBhcmUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg0NyBjb21wYXJlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NDggY29tcGFyZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQ5IGNvbXBhcmUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1MCBjb21wYXJlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTEgY29tcGFyZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODUyIGNvbXBhcmUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1MyBjb21wYXJlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTQgY29tcGFyZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODU1IGNvbXBhcmUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1NiBjb21wYXJlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTcgY29tcGFyZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODU4IGNvbXBhcmUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1OSBjb21wYXJlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGNvbTg2MCBjb21wYXJlICBOYU45IC1JbmYgICAtPiAgTmFOOQorZGRjb204NjEgY29tcGFyZSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgKK2RkY29tODYyIGNvbXBhcmUgIE5hTjc3IEluZiAgIC0+ICBOYU43NworZGRjb204NjMgY29tcGFyZSAtTmFONjcgTmFONSAgLT4gLU5hTjY3CitkZGNvbTg2NCBjb21wYXJlIC1JbmYgIC1OYU40ICAtPiAtTmFONAorZGRjb204NjUgY29tcGFyZSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzCitkZGNvbTg2NiBjb21wYXJlICBJbmYgICBOYU4yICAtPiAgTmFOMgorZGRjb204NjcgY29tcGFyZSAtTmFONDEgLU5hTjQyIC0+IC1OYU40MQorZGRjb204NjggY29tcGFyZSArTmFONDEgLU5hTjQyIC0+ICBOYU40MQorZGRjb204NjkgY29tcGFyZSAtTmFONDEgK05hTjQyIC0+IC1OYU40MQorZGRjb204NzAgY29tcGFyZSArTmFONDEgK05hTjQyIC0+ICBOYU40MQorCitkZGNvbTg3MSBjb21wYXJlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODcyIGNvbXBhcmUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NzMgY29tcGFyZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg3NCBjb21wYXJlICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODc1IGNvbXBhcmUgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NzYgY29tcGFyZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg3NyBjb21wYXJlICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODc4IGNvbXBhcmUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NzkgY29tcGFyZSAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHdpZGUgcmFuZ2UKK2RkY29tODgwIGNvbXBhcmUgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xCitkZGNvbTg4MSBjb21wYXJlIDlFKzM4NCArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorZGRjb204ODIgY29tcGFyZSArMC4xMDAgOUUtMzgzICAgICAgICAgICAgICAgLT4gIDEKK2RkY29tODgzIGNvbXBhcmUgOUUtMzgzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xCitkZGNvbTg4NSBjb21wYXJlIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzM4NCAtPiAtMQorZGRjb204ODYgY29tcGFyZSA5RSszODQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RkY29tODg3IGNvbXBhcmUgLTAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+IC0xCitkZGNvbTg4OCBjb21wYXJlIDlFLTM4MyAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQorCistLSBzcHJlYWQgemVyb3MKK2RkY29tOTAwIGNvbXBhcmUgICAwRS0zODMgIDAgICAgICAgLT4gIDAKK2RkY29tOTAxIGNvbXBhcmUgICAwRS0zODMgLTAgICAgICAgLT4gIDAKK2RkY29tOTAyIGNvbXBhcmUgIC0wRS0zODMgIDAgICAgICAgLT4gIDAKK2RkY29tOTAzIGNvbXBhcmUgIC0wRS0zODMgLTAgICAgICAgLT4gIDAKK2RkY29tOTA0IGNvbXBhcmUgICAwRS0zODMgIDBFKzM4NCAgLT4gIDAKK2RkY29tOTA1IGNvbXBhcmUgICAwRS0zODMgLTBFKzM4NCAgLT4gIDAKK2RkY29tOTA2IGNvbXBhcmUgIC0wRS0zODMgIDBFKzM4NCAgLT4gIDAKK2RkY29tOTA3IGNvbXBhcmUgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDAKK2RkY29tOTA4IGNvbXBhcmUgICAwICAgICAgIDBFKzM4NCAgLT4gIDAKK2RkY29tOTA5IGNvbXBhcmUgICAwICAgICAgLTBFKzM4NCAgLT4gIDAKK2RkY29tOTEwIGNvbXBhcmUgIC0wICAgICAgIDBFKzM4NCAgLT4gIDAKK2RkY29tOTExIGNvbXBhcmUgIC0wICAgICAgLTBFKzM4NCAgLT4gIDAKK2RkY29tOTMwIGNvbXBhcmUgICAwRSszODQgIDAgICAgICAgLT4gIDAKK2RkY29tOTMxIGNvbXBhcmUgICAwRSszODQgLTAgICAgICAgLT4gIDAKK2RkY29tOTMyIGNvbXBhcmUgIC0wRSszODQgIDAgICAgICAgLT4gIDAKK2RkY29tOTMzIGNvbXBhcmUgIC0wRSszODQgLTAgICAgICAgLT4gIDAKK2RkY29tOTM0IGNvbXBhcmUgICAwRSszODQgIDBFLTM4MyAgLT4gIDAKK2RkY29tOTM1IGNvbXBhcmUgICAwRSszODQgLTBFLTM4MyAgLT4gIDAKK2RkY29tOTM2IGNvbXBhcmUgIC0wRSszODQgIDBFLTM4MyAgLT4gIDAKK2RkY29tOTM3IGNvbXBhcmUgIC0wRSszODQgLTBFLTM4MyAgLT4gIDAKK2RkY29tOTM4IGNvbXBhcmUgICAwICAgICAgIDBFLTM4MyAgLT4gIDAKK2RkY29tOTM5IGNvbXBhcmUgICAwICAgICAgLTBFLTM4MyAgLT4gIDAKK2RkY29tOTQwIGNvbXBhcmUgIC0wICAgICAgIDBFLTM4MyAgLT4gIDAKK2RkY29tOTQxIGNvbXBhcmUgIC0wICAgICAgLTBFLTM4MyAgLT4gIDAKKworLS0gc2lnbnMKK2RkY29tOTYxIGNvbXBhcmUgIDFlKzc3ICAxZSsxMSAtPiAgMQorZGRjb205NjIgY29tcGFyZSAgMWUrNzcgLTFlKzExIC0+ICAxCitkZGNvbTk2MyBjb21wYXJlIC0xZSs3NyAgMWUrMTEgLT4gLTEKK2RkY29tOTY0IGNvbXBhcmUgLTFlKzc3IC0xZSsxMSAtPiAtMQorZGRjb205NjUgY29tcGFyZSAgMWUtNzcgIDFlLTExIC0+IC0xCitkZGNvbTk2NiBjb21wYXJlICAxZS03NyAtMWUtMTEgLT4gIDEKK2RkY29tOTY3IGNvbXBhcmUgLTFlLTc3ICAxZS0xMSAtPiAtMQorZGRjb205NjggY29tcGFyZSAtMWUtNzcgLTFlLTExIC0+ICAxCisKKy0tIGZ1bGwgYWxpZ25tZW50IHJhbmdlLCBib3RoIHdheXMKK2RkY29tcDEwMDEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAwCitkZGNvbXAxMDAyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwICAgLT4gMAorZGRjb21wMTAwMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwICAgIC0+IDAKK2RkY29tcDEwMDQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwICAgICAtPiAwCitkZGNvbXAxMDA1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwICAgICAgLT4gMAorZGRjb21wMTAwNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwICAgICAgIC0+IDAKK2RkY29tcDEwMDcgY29tcGFyZSAxIDEuMDAwMDAwMDAwICAgICAgICAtPiAwCitkZGNvbXAxMDA4IGNvbXBhcmUgMSAxLjAwMDAwMDAwICAgICAgICAgLT4gMAorZGRjb21wMTAwOSBjb21wYXJlIDEgMS4wMDAwMDAwICAgICAgICAgIC0+IDAKK2RkY29tcDEwMTAgY29tcGFyZSAxIDEuMDAwMDAwICAgICAgICAgICAtPiAwCitkZGNvbXAxMDExIGNvbXBhcmUgMSAxLjAwMDAwICAgICAgICAgICAgLT4gMAorZGRjb21wMTAxMiBjb21wYXJlIDEgMS4wMDAwICAgICAgICAgICAgIC0+IDAKK2RkY29tcDEwMTMgY29tcGFyZSAxIDEuMDAwICAgICAgICAgICAgICAtPiAwCitkZGNvbXAxMDE0IGNvbXBhcmUgMSAxLjAwICAgICAgICAgICAgICAgLT4gMAorZGRjb21wMTAxNSBjb21wYXJlIDEgMS4wICAgICAgICAgICAgICAgIC0+IDAKK2RkY29tcDEwMjEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMCAgMSAtPiAwCitkZGNvbXAxMDIyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMCAgIDEgLT4gMAorZGRjb21wMTAyMyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMCAgICAxIC0+IDAKK2RkY29tcDEwMjQgY29tcGFyZSAxLjAwMDAwMDAwMDAwMCAgICAgMSAtPiAwCitkZGNvbXAxMDI1IGNvbXBhcmUgMS4wMDAwMDAwMDAwMCAgICAgIDEgLT4gMAorZGRjb21wMTAyNiBjb21wYXJlIDEuMDAwMDAwMDAwMCAgICAgICAxIC0+IDAKK2RkY29tcDEwMjcgY29tcGFyZSAxLjAwMDAwMDAwMCAgICAgICAgMSAtPiAwCitkZGNvbXAxMDI4IGNvbXBhcmUgMS4wMDAwMDAwMCAgICAgICAgIDEgLT4gMAorZGRjb21wMTAyOSBjb21wYXJlIDEuMDAwMDAwMCAgICAgICAgICAxIC0+IDAKK2RkY29tcDEwMzAgY29tcGFyZSAxLjAwMDAwMCAgICAgICAgICAgMSAtPiAwCitkZGNvbXAxMDMxIGNvbXBhcmUgMS4wMDAwMCAgICAgICAgICAgIDEgLT4gMAorZGRjb21wMTAzMiBjb21wYXJlIDEuMDAwMCAgICAgICAgICAgICAxIC0+IDAKK2RkY29tcDEwMzMgY29tcGFyZSAxLjAwMCAgICAgICAgICAgICAgMSAtPiAwCitkZGNvbXAxMDM0IGNvbXBhcmUgMS4wMCAgICAgICAgICAgICAgIDEgLT4gMAorZGRjb21wMTAzNSBjb21wYXJlIDEuMCAgICAgICAgICAgICAgICAxIC0+IDAKKworLS0gY2hlY2sgTVNEIGFsd2F5cyBkZXRlY3RlZCBub24temVybworZGRjb21wMTA0MCBjb21wYXJlIDAgMC4wMDAwMDAwMDAwMDAwMDAgIC0+IDAKK2RkY29tcDEwNDEgY29tcGFyZSAwIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0MiBjb21wYXJlIDAgMi4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDQzIGNvbXBhcmUgMCAzLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNDQgY29tcGFyZSAwIDQuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0NSBjb21wYXJlIDAgNS4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDQ2IGNvbXBhcmUgMCA2LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNDcgY29tcGFyZSAwIDcuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0OCBjb21wYXJlIDAgOC4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDQ5IGNvbXBhcmUgMCA5LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNTAgY29tcGFyZSAwLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAwCitkZGNvbXAxMDUxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZGRjb21wMTA1MiBjb21wYXJlIDIuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTMgY29tcGFyZSAzLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkZGNvbXAxMDU0IGNvbXBhcmUgNC4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZGRjb21wMTA1NSBjb21wYXJlIDUuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTYgY29tcGFyZSA2LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkZGNvbXAxMDU3IGNvbXBhcmUgNy4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZGRjb21wMTA1OCBjb21wYXJlIDguMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTkgY29tcGFyZSA5LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCisKKy0tIE51bGwgdGVzdHMKK2RkY29tOTk5MCBjb21wYXJlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRjb205OTkxIGNvbXBhcmUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlU2lnLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlU2lnLmRlY1Rlc3QKaW5kZXggOGQzZmNlMC4uYzgyZWM0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVNpZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVTaWcuZGVjVGVzdApAQCAtMSw2NDcgKzEsNjQ3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZENvbXBhcmVTaWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbjsgYWxsIE5hTnMgc2lnbmFsICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksDQotLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90DQotLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4NCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRjbXMwMDEgY29tcGFyZXNpZyAgLTIgIC0yICAtPiAwDQotZGRjbXMwMDIgY29tcGFyZXNpZyAgLTIgIC0xICAtPiAtMQ0KLWRkY21zMDAzIGNvbXBhcmVzaWcgIC0yICAgMCAgLT4gLTENCi1kZGNtczAwNCBjb21wYXJlc2lnICAtMiAgIDEgIC0+IC0xDQotZGRjbXMwMDUgY29tcGFyZXNpZyAgLTIgICAyICAtPiAtMQ0KLWRkY21zMDA2IGNvbXBhcmVzaWcgIC0xICAtMiAgLT4gMQ0KLWRkY21zMDA3IGNvbXBhcmVzaWcgIC0xICAtMSAgLT4gMA0KLWRkY21zMDA4IGNvbXBhcmVzaWcgIC0xICAgMCAgLT4gLTENCi1kZGNtczAwOSBjb21wYXJlc2lnICAtMSAgIDEgIC0+IC0xDQotZGRjbXMwMTAgY29tcGFyZXNpZyAgLTEgICAyICAtPiAtMQ0KLWRkY21zMDExIGNvbXBhcmVzaWcgICAwICAtMiAgLT4gMQ0KLWRkY21zMDEyIGNvbXBhcmVzaWcgICAwICAtMSAgLT4gMQ0KLWRkY21zMDEzIGNvbXBhcmVzaWcgICAwICAgMCAgLT4gMA0KLWRkY21zMDE0IGNvbXBhcmVzaWcgICAwICAgMSAgLT4gLTENCi1kZGNtczAxNSBjb21wYXJlc2lnICAgMCAgIDIgIC0+IC0xDQotZGRjbXMwMTYgY29tcGFyZXNpZyAgIDEgIC0yICAtPiAxDQotZGRjbXMwMTcgY29tcGFyZXNpZyAgIDEgIC0xICAtPiAxDQotZGRjbXMwMTggY29tcGFyZXNpZyAgIDEgICAwICAtPiAxDQotZGRjbXMwMTkgY29tcGFyZXNpZyAgIDEgICAxICAtPiAwDQotZGRjbXMwMjAgY29tcGFyZXNpZyAgIDEgICAyICAtPiAtMQ0KLWRkY21zMDIxIGNvbXBhcmVzaWcgICAyICAtMiAgLT4gMQ0KLWRkY21zMDIyIGNvbXBhcmVzaWcgICAyICAtMSAgLT4gMQ0KLWRkY21zMDIzIGNvbXBhcmVzaWcgICAyICAgMCAgLT4gMQ0KLWRkY21zMDI1IGNvbXBhcmVzaWcgICAyICAgMSAgLT4gMQ0KLWRkY21zMDI2IGNvbXBhcmVzaWcgICAyICAgMiAgLT4gMA0KLQ0KLWRkY21zMDMxIGNvbXBhcmVzaWcgIC0yMCAgLTIwICAtPiAwDQotZGRjbXMwMzIgY29tcGFyZXNpZyAgLTIwICAtMTAgIC0+IC0xDQotZGRjbXMwMzMgY29tcGFyZXNpZyAgLTIwICAgMDAgIC0+IC0xDQotZGRjbXMwMzQgY29tcGFyZXNpZyAgLTIwICAgMTAgIC0+IC0xDQotZGRjbXMwMzUgY29tcGFyZXNpZyAgLTIwICAgMjAgIC0+IC0xDQotZGRjbXMwMzYgY29tcGFyZXNpZyAgLTEwICAtMjAgIC0+IDENCi1kZGNtczAzNyBjb21wYXJlc2lnICAtMTAgIC0xMCAgLT4gMA0KLWRkY21zMDM4IGNvbXBhcmVzaWcgIC0xMCAgIDAwICAtPiAtMQ0KLWRkY21zMDM5IGNvbXBhcmVzaWcgIC0xMCAgIDEwICAtPiAtMQ0KLWRkY21zMDQwIGNvbXBhcmVzaWcgIC0xMCAgIDIwICAtPiAtMQ0KLWRkY21zMDQxIGNvbXBhcmVzaWcgICAwMCAgLTIwICAtPiAxDQotZGRjbXMwNDIgY29tcGFyZXNpZyAgIDAwICAtMTAgIC0+IDENCi1kZGNtczA0MyBjb21wYXJlc2lnICAgMDAgICAwMCAgLT4gMA0KLWRkY21zMDQ0IGNvbXBhcmVzaWcgICAwMCAgIDEwICAtPiAtMQ0KLWRkY21zMDQ1IGNvbXBhcmVzaWcgICAwMCAgIDIwICAtPiAtMQ0KLWRkY21zMDQ2IGNvbXBhcmVzaWcgICAxMCAgLTIwICAtPiAxDQotZGRjbXMwNDcgY29tcGFyZXNpZyAgIDEwICAtMTAgIC0+IDENCi1kZGNtczA0OCBjb21wYXJlc2lnICAgMTAgICAwMCAgLT4gMQ0KLWRkY21zMDQ5IGNvbXBhcmVzaWcgICAxMCAgIDEwICAtPiAwDQotZGRjbXMwNTAgY29tcGFyZXNpZyAgIDEwICAgMjAgIC0+IC0xDQotZGRjbXMwNTEgY29tcGFyZXNpZyAgIDIwICAtMjAgIC0+IDENCi1kZGNtczA1MiBjb21wYXJlc2lnICAgMjAgIC0xMCAgLT4gMQ0KLWRkY21zMDUzIGNvbXBhcmVzaWcgICAyMCAgIDAwICAtPiAxDQotZGRjbXMwNTUgY29tcGFyZXNpZyAgIDIwICAgMTAgIC0+IDENCi1kZGNtczA1NiBjb21wYXJlc2lnICAgMjAgICAyMCAgLT4gMA0KLQ0KLWRkY21zMDYxIGNvbXBhcmVzaWcgIC0yLjAgIC0yLjAgIC0+IDANCi1kZGNtczA2MiBjb21wYXJlc2lnICAtMi4wICAtMS4wICAtPiAtMQ0KLWRkY21zMDYzIGNvbXBhcmVzaWcgIC0yLjAgICAwLjAgIC0+IC0xDQotZGRjbXMwNjQgY29tcGFyZXNpZyAgLTIuMCAgIDEuMCAgLT4gLTENCi1kZGNtczA2NSBjb21wYXJlc2lnICAtMi4wICAgMi4wICAtPiAtMQ0KLWRkY21zMDY2IGNvbXBhcmVzaWcgIC0xLjAgIC0yLjAgIC0+IDENCi1kZGNtczA2NyBjb21wYXJlc2lnICAtMS4wICAtMS4wICAtPiAwDQotZGRjbXMwNjggY29tcGFyZXNpZyAgLTEuMCAgIDAuMCAgLT4gLTENCi1kZGNtczA2OSBjb21wYXJlc2lnICAtMS4wICAgMS4wICAtPiAtMQ0KLWRkY21zMDcwIGNvbXBhcmVzaWcgIC0xLjAgICAyLjAgIC0+IC0xDQotZGRjbXMwNzEgY29tcGFyZXNpZyAgIDAuMCAgLTIuMCAgLT4gMQ0KLWRkY21zMDcyIGNvbXBhcmVzaWcgICAwLjAgIC0xLjAgIC0+IDENCi1kZGNtczA3MyBjb21wYXJlc2lnICAgMC4wICAgMC4wICAtPiAwDQotZGRjbXMwNzQgY29tcGFyZXNpZyAgIDAuMCAgIDEuMCAgLT4gLTENCi1kZGNtczA3NSBjb21wYXJlc2lnICAgMC4wICAgMi4wICAtPiAtMQ0KLWRkY21zMDc2IGNvbXBhcmVzaWcgICAxLjAgIC0yLjAgIC0+IDENCi1kZGNtczA3NyBjb21wYXJlc2lnICAgMS4wICAtMS4wICAtPiAxDQotZGRjbXMwNzggY29tcGFyZXNpZyAgIDEuMCAgIDAuMCAgLT4gMQ0KLWRkY21zMDc5IGNvbXBhcmVzaWcgICAxLjAgICAxLjAgIC0+IDANCi1kZGNtczA4MCBjb21wYXJlc2lnICAgMS4wICAgMi4wICAtPiAtMQ0KLWRkY21zMDgxIGNvbXBhcmVzaWcgICAyLjAgIC0yLjAgIC0+IDENCi1kZGNtczA4MiBjb21wYXJlc2lnICAgMi4wICAtMS4wICAtPiAxDQotZGRjbXMwODMgY29tcGFyZXNpZyAgIDIuMCAgIDAuMCAgLT4gMQ0KLWRkY21zMDg1IGNvbXBhcmVzaWcgICAyLjAgICAxLjAgIC0+IDENCi1kZGNtczA4NiBjb21wYXJlc2lnICAgMi4wICAgMi4wICAtPiAwDQotDQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQotZGRjbXMwOTAgY29tcGFyZXNpZyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAwDQotZGRjbXMwOTEgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtMQ0KLWRkY21zMDkyIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQ0KLWRkY21zMDkzIGNvbXBhcmVzaWcgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMA0KLQ0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KLWRkY21zMTAwIGNvbXBhcmVzaWcgICA3LjAgICAgNy4wICAgIC0+IDANCi1kZGNtczEwMSBjb21wYXJlc2lnICAgNy4wICAgIDcgICAgICAtPiAwDQotZGRjbXMxMDIgY29tcGFyZXNpZyAgIDcgICAgICA3LjAgICAgLT4gMA0KLWRkY21zMTAzIGNvbXBhcmVzaWcgICA3RSswICAgNy4wICAgIC0+IDANCi1kZGNtczEwNCBjb21wYXJlc2lnICAgNzBFLTEgIDcuMCAgICAtPiAwDQotZGRjbXMxMDUgY29tcGFyZXNpZyAgIDAuN0UrMSA3ICAgICAgLT4gMA0KLWRkY21zMTA2IGNvbXBhcmVzaWcgICA3MEUtMSAgNyAgICAgIC0+IDANCi1kZGNtczEwNyBjb21wYXJlc2lnICAgNy4wICAgIDdFKzAgICAtPiAwDQotZGRjbXMxMDggY29tcGFyZXNpZyAgIDcuMCAgICA3MEUtMSAgLT4gMA0KLWRkY21zMTA5IGNvbXBhcmVzaWcgICA3ICAgICAgMC43RSsxIC0+IDANCi1kZGNtczExMCBjb21wYXJlc2lnICAgNyAgICAgIDcwRS0xICAtPiAwDQotDQotZGRjbXMxMjAgY29tcGFyZXNpZyAgIDguMCAgICA3LjAgICAgLT4gMQ0KLWRkY21zMTIxIGNvbXBhcmVzaWcgICA4LjAgICAgNyAgICAgIC0+IDENCi1kZGNtczEyMiBjb21wYXJlc2lnICAgOCAgICAgIDcuMCAgICAtPiAxDQotZGRjbXMxMjMgY29tcGFyZXNpZyAgIDhFKzAgICA3LjAgICAgLT4gMQ0KLWRkY21zMTI0IGNvbXBhcmVzaWcgICA4MEUtMSAgNy4wICAgIC0+IDENCi1kZGNtczEyNSBjb21wYXJlc2lnICAgMC44RSsxIDcgICAgICAtPiAxDQotZGRjbXMxMjYgY29tcGFyZXNpZyAgIDgwRS0xICA3ICAgICAgLT4gMQ0KLWRkY21zMTI3IGNvbXBhcmVzaWcgICA4LjAgICAgN0UrMCAgIC0+IDENCi1kZGNtczEyOCBjb21wYXJlc2lnICAgOC4wICAgIDcwRS0xICAtPiAxDQotZGRjbXMxMjkgY29tcGFyZXNpZyAgIDggICAgICAwLjdFKzEgIC0+IDENCi1kZGNtczEzMCBjb21wYXJlc2lnICAgOCAgICAgIDcwRS0xICAtPiAxDQotDQotZGRjbXMxNDAgY29tcGFyZXNpZyAgIDguMCAgICA5LjAgICAgLT4gLTENCi1kZGNtczE0MSBjb21wYXJlc2lnICAgOC4wICAgIDkgICAgICAtPiAtMQ0KLWRkY21zMTQyIGNvbXBhcmVzaWcgICA4ICAgICAgOS4wICAgIC0+IC0xDQotZGRjbXMxNDMgY29tcGFyZXNpZyAgIDhFKzAgICA5LjAgICAgLT4gLTENCi1kZGNtczE0NCBjb21wYXJlc2lnICAgODBFLTEgIDkuMCAgICAtPiAtMQ0KLWRkY21zMTQ1IGNvbXBhcmVzaWcgICAwLjhFKzEgOSAgICAgIC0+IC0xDQotZGRjbXMxNDYgY29tcGFyZXNpZyAgIDgwRS0xICA5ICAgICAgLT4gLTENCi1kZGNtczE0NyBjb21wYXJlc2lnICAgOC4wICAgIDlFKzAgICAtPiAtMQ0KLWRkY21zMTQ4IGNvbXBhcmVzaWcgICA4LjAgICAgOTBFLTEgIC0+IC0xDQotZGRjbXMxNDkgY29tcGFyZXNpZyAgIDggICAgICAwLjlFKzEgLT4gLTENCi1kZGNtczE1MCBjb21wYXJlc2lnICAgOCAgICAgIDkwRS0xICAtPiAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCi1kZGNtczIwMCBjb21wYXJlc2lnICAtNy4wICAgIDcuMCAgICAtPiAtMQ0KLWRkY21zMjAxIGNvbXBhcmVzaWcgIC03LjAgICAgNyAgICAgIC0+IC0xDQotZGRjbXMyMDIgY29tcGFyZXNpZyAgLTcgICAgICA3LjAgICAgLT4gLTENCi1kZGNtczIwMyBjb21wYXJlc2lnICAtN0UrMCAgIDcuMCAgICAtPiAtMQ0KLWRkY21zMjA0IGNvbXBhcmVzaWcgIC03MEUtMSAgNy4wICAgIC0+IC0xDQotZGRjbXMyMDUgY29tcGFyZXNpZyAgLTAuN0UrMSA3ICAgICAgLT4gLTENCi1kZGNtczIwNiBjb21wYXJlc2lnICAtNzBFLTEgIDcgICAgICAtPiAtMQ0KLWRkY21zMjA3IGNvbXBhcmVzaWcgIC03LjAgICAgN0UrMCAgIC0+IC0xDQotZGRjbXMyMDggY29tcGFyZXNpZyAgLTcuMCAgICA3MEUtMSAgLT4gLTENCi1kZGNtczIwOSBjb21wYXJlc2lnICAtNyAgICAgIDAuN0UrMSAtPiAtMQ0KLWRkY21zMjEwIGNvbXBhcmVzaWcgIC03ICAgICAgNzBFLTEgIC0+IC0xDQotDQotZGRjbXMyMjAgY29tcGFyZXNpZyAgLTguMCAgICA3LjAgICAgLT4gLTENCi1kZGNtczIyMSBjb21wYXJlc2lnICAtOC4wICAgIDcgICAgICAtPiAtMQ0KLWRkY21zMjIyIGNvbXBhcmVzaWcgIC04ICAgICAgNy4wICAgIC0+IC0xDQotZGRjbXMyMjMgY29tcGFyZXNpZyAgLThFKzAgICA3LjAgICAgLT4gLTENCi1kZGNtczIyNCBjb21wYXJlc2lnICAtODBFLTEgIDcuMCAgICAtPiAtMQ0KLWRkY21zMjI1IGNvbXBhcmVzaWcgIC0wLjhFKzEgNyAgICAgIC0+IC0xDQotZGRjbXMyMjYgY29tcGFyZXNpZyAgLTgwRS0xICA3ICAgICAgLT4gLTENCi1kZGNtczIyNyBjb21wYXJlc2lnICAtOC4wICAgIDdFKzAgICAtPiAtMQ0KLWRkY21zMjI4IGNvbXBhcmVzaWcgIC04LjAgICAgNzBFLTEgIC0+IC0xDQotZGRjbXMyMjkgY29tcGFyZXNpZyAgLTggICAgICAwLjdFKzEgLT4gLTENCi1kZGNtczIzMCBjb21wYXJlc2lnICAtOCAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRkY21zMjQwIGNvbXBhcmVzaWcgIC04LjAgICAgOS4wICAgIC0+IC0xDQotZGRjbXMyNDEgY29tcGFyZXNpZyAgLTguMCAgICA5ICAgICAgLT4gLTENCi1kZGNtczI0MiBjb21wYXJlc2lnICAtOCAgICAgIDkuMCAgICAtPiAtMQ0KLWRkY21zMjQzIGNvbXBhcmVzaWcgIC04RSswICAgOS4wICAgIC0+IC0xDQotZGRjbXMyNDQgY29tcGFyZXNpZyAgLTgwRS0xICA5LjAgICAgLT4gLTENCi1kZGNtczI0NSBjb21wYXJlc2lnICAtMC44RSsxIDkgICAgICAtPiAtMQ0KLWRkY21zMjQ2IGNvbXBhcmVzaWcgIC04MEUtMSAgOSAgICAgIC0+IC0xDQotZGRjbXMyNDcgY29tcGFyZXNpZyAgLTguMCAgICA5RSswICAgLT4gLTENCi1kZGNtczI0OCBjb21wYXJlc2lnICAtOC4wICAgIDkwRS0xICAtPiAtMQ0KLWRkY21zMjQ5IGNvbXBhcmVzaWcgIC04ICAgICAgMC45RSsxIC0+IC0xDQotZGRjbXMyNTAgY29tcGFyZXNpZyAgLTggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQotZGRjbXMzMDAgY29tcGFyZXNpZyAgIDcuMCAgICAtNy4wICAgIC0+IDENCi1kZGNtczMwMSBjb21wYXJlc2lnICAgNy4wICAgIC03ICAgICAgLT4gMQ0KLWRkY21zMzAyIGNvbXBhcmVzaWcgICA3ICAgICAgLTcuMCAgICAtPiAxDQotZGRjbXMzMDMgY29tcGFyZXNpZyAgIDdFKzAgICAtNy4wICAgIC0+IDENCi1kZGNtczMwNCBjb21wYXJlc2lnICAgNzBFLTEgIC03LjAgICAgLT4gMQ0KLWRkY21zMzA1IGNvbXBhcmVzaWcgICAuN0UrMSAgLTcgICAgICAtPiAxDQotZGRjbXMzMDYgY29tcGFyZXNpZyAgIDcwRS0xICAtNyAgICAgIC0+IDENCi1kZGNtczMwNyBjb21wYXJlc2lnICAgNy4wICAgIC03RSswICAgLT4gMQ0KLWRkY21zMzA4IGNvbXBhcmVzaWcgICA3LjAgICAgLTcwRS0xICAtPiAxDQotZGRjbXMzMDkgY29tcGFyZXNpZyAgIDcgICAgICAtLjdFKzEgIC0+IDENCi1kZGNtczMxMCBjb21wYXJlc2lnICAgNyAgICAgIC03MEUtMSAgLT4gMQ0KLQ0KLWRkY21zMzIwIGNvbXBhcmVzaWcgICA4LjAgICAgLTcuMCAgICAtPiAxDQotZGRjbXMzMjEgY29tcGFyZXNpZyAgIDguMCAgICAtNyAgICAgIC0+IDENCi1kZGNtczMyMiBjb21wYXJlc2lnICAgOCAgICAgIC03LjAgICAgLT4gMQ0KLWRkY21zMzIzIGNvbXBhcmVzaWcgICA4RSswICAgLTcuMCAgICAtPiAxDQotZGRjbXMzMjQgY29tcGFyZXNpZyAgIDgwRS0xICAtNy4wICAgIC0+IDENCi1kZGNtczMyNSBjb21wYXJlc2lnICAgLjhFKzEgIC03ICAgICAgLT4gMQ0KLWRkY21zMzI2IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcgICAgICAtPiAxDQotZGRjbXMzMjcgY29tcGFyZXNpZyAgIDguMCAgICAtN0UrMCAgIC0+IDENCi1kZGNtczMyOCBjb21wYXJlc2lnICAgOC4wICAgIC03MEUtMSAgLT4gMQ0KLWRkY21zMzI5IGNvbXBhcmVzaWcgICA4ICAgICAgLS43RSsxICAtPiAxDQotZGRjbXMzMzAgY29tcGFyZXNpZyAgIDggICAgICAtNzBFLTEgIC0+IDENCi0NCi1kZGNtczM0MCBjb21wYXJlc2lnICAgOC4wICAgIC05LjAgICAgLT4gMQ0KLWRkY21zMzQxIGNvbXBhcmVzaWcgICA4LjAgICAgLTkgICAgICAtPiAxDQotZGRjbXMzNDIgY29tcGFyZXNpZyAgIDggICAgICAtOS4wICAgIC0+IDENCi1kZGNtczM0MyBjb21wYXJlc2lnICAgOEUrMCAgIC05LjAgICAgLT4gMQ0KLWRkY21zMzQ0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTkuMCAgICAtPiAxDQotZGRjbXMzNDUgY29tcGFyZXNpZyAgIC44RSsxICAtOSAgICAgIC0+IDENCi1kZGNtczM0NiBjb21wYXJlc2lnICAgODBFLTEgIC05ICAgICAgLT4gMQ0KLWRkY21zMzQ3IGNvbXBhcmVzaWcgICA4LjAgICAgLTlFKzAgICAtPiAxDQotZGRjbXMzNDggY29tcGFyZXNpZyAgIDguMCAgICAtOTBFLTEgIC0+IDENCi1kZGNtczM0OSBjb21wYXJlc2lnICAgOCAgICAgIC0uOUUrMSAgLT4gMQ0KLWRkY21zMzUwIGNvbXBhcmVzaWcgICA4ICAgICAgLTkwRS0xICAtPiAxDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KLWRkY21zNDAwIGNvbXBhcmVzaWcgICAtNy4wICAgIC03LjAgICAgLT4gMA0KLWRkY21zNDAxIGNvbXBhcmVzaWcgICAtNy4wICAgIC03ICAgICAgLT4gMA0KLWRkY21zNDAyIGNvbXBhcmVzaWcgICAtNyAgICAgIC03LjAgICAgLT4gMA0KLWRkY21zNDAzIGNvbXBhcmVzaWcgICAtN0UrMCAgIC03LjAgICAgLT4gMA0KLWRkY21zNDA0IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03LjAgICAgLT4gMA0KLWRkY21zNDA1IGNvbXBhcmVzaWcgICAtLjdFKzEgIC03ICAgICAgLT4gMA0KLWRkY21zNDA2IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03ICAgICAgLT4gMA0KLWRkY21zNDA3IGNvbXBhcmVzaWcgICAtNy4wICAgIC03RSswICAgLT4gMA0KLWRkY21zNDA4IGNvbXBhcmVzaWcgICAtNy4wICAgIC03MEUtMSAgLT4gMA0KLWRkY21zNDA5IGNvbXBhcmVzaWcgICAtNyAgICAgIC0uN0UrMSAgLT4gMA0KLWRkY21zNDEwIGNvbXBhcmVzaWcgICAtNyAgICAgIC03MEUtMSAgLT4gMA0KLQ0KLWRkY21zNDIwIGNvbXBhcmVzaWcgICAtOC4wICAgIC03LjAgICAgLT4gLTENCi1kZGNtczQyMSBjb21wYXJlc2lnICAgLTguMCAgICAtNyAgICAgIC0+IC0xDQotZGRjbXM0MjIgY29tcGFyZXNpZyAgIC04ICAgICAgLTcuMCAgICAtPiAtMQ0KLWRkY21zNDIzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC03LjAgICAgLT4gLTENCi1kZGNtczQyNCBjb21wYXJlc2lnICAgLTgwRS0xICAtNy4wICAgIC0+IC0xDQotZGRjbXM0MjUgY29tcGFyZXNpZyAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQ0KLWRkY21zNDI2IGNvbXBhcmVzaWcgICAtODBFLTEgIC03ICAgICAgLT4gLTENCi1kZGNtczQyNyBjb21wYXJlc2lnICAgLTguMCAgICAtN0UrMCAgIC0+IC0xDQotZGRjbXM0MjggY29tcGFyZXNpZyAgIC04LjAgICAgLTcwRS0xICAtPiAtMQ0KLWRkY21zNDI5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uN0UrMSAgLT4gLTENCi1kZGNtczQzMCBjb21wYXJlc2lnICAgLTggICAgICAtNzBFLTEgIC0+IC0xDQotDQotZGRjbXM0NDAgY29tcGFyZXNpZyAgIC04LjAgICAgLTkuMCAgICAtPiAxDQotZGRjbXM0NDEgY29tcGFyZXNpZyAgIC04LjAgICAgLTkgICAgICAtPiAxDQotZGRjbXM0NDIgY29tcGFyZXNpZyAgIC04ICAgICAgLTkuMCAgICAtPiAxDQotZGRjbXM0NDMgY29tcGFyZXNpZyAgIC04RSswICAgLTkuMCAgICAtPiAxDQotZGRjbXM0NDQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkuMCAgICAtPiAxDQotZGRjbXM0NDUgY29tcGFyZXNpZyAgIC0uOEUrMSAgLTkgICAgICAtPiAxDQotZGRjbXM0NDYgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkgICAgICAtPiAxDQotZGRjbXM0NDcgY29tcGFyZXNpZyAgIC04LjAgICAgLTlFKzAgICAtPiAxDQotZGRjbXM0NDggY29tcGFyZXNpZyAgIC04LjAgICAgLTkwRS0xICAtPiAxDQotZGRjbXM0NDkgY29tcGFyZXNpZyAgIC04ICAgICAgLS45RSsxICAtPiAxDQotZGRjbXM0NTAgY29tcGFyZXNpZyAgIC04ICAgICAgLTkwRS0xICAtPiAxDQotDQotDQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQotZGRjbXM0NzMgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY21zNDc0IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMA0KLWRkY21zNDc1IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwDQotZGRjbXM0NzYgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMA0KLWRkY21zNDc3IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY21zNDc4IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwDQotZGRjbXM0NzkgY29tcGFyZXNpZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY21zNDgwIGNvbXBhcmVzaWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMA0KLWRkY21zNDgxIGNvbXBhcmVzaWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAwDQotZGRjbXM0ODIgY29tcGFyZXNpZyAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgLT4gMA0KLWRkY21zNDgzIGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY21zNDg3IGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5IC0+IDANCi1kZGNtczQ4OCBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDANCi1kZGNtczQ4OSBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgLT4gMA0KLWRkY21zNDkwIGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDANCi1kZGNtczQ5MSBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDANCi1kZGNtczQ5MiBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMA0KLWRkY21zNDkzIGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5IC0+IDANCi1kZGNtczQ5NCBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDANCi1kZGNtczQ5NSBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgLT4gMA0KLWRkY21zNDk2IGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDANCi1kZGNtczQ5NyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDANCi0NCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQotZGRjbXM1MDAgY29tcGFyZXNpZyAgICAxICAgICAxRS0xNSAgICAtPiAxDQotZGRjbXM1MDEgY29tcGFyZXNpZyAgICAxICAgICAxRS0xNCAgICAtPiAxDQotZGRjbXM1MDIgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMyAgICAtPiAxDQotZGRjbXM1MDMgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMiAgICAtPiAxDQotZGRjbXM1MDQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMSAgICAtPiAxDQotZGRjbXM1MDUgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMCAgICAtPiAxDQotZGRjbXM1MDYgY29tcGFyZXNpZyAgICAxICAgICAxRS05ICAgICAtPiAxDQotZGRjbXM1MDcgY29tcGFyZXNpZyAgICAxICAgICAxRS04ICAgICAtPiAxDQotZGRjbXM1MDggY29tcGFyZXNpZyAgICAxICAgICAxRS03ICAgICAtPiAxDQotZGRjbXM1MDkgY29tcGFyZXNpZyAgICAxICAgICAxRS02ICAgICAtPiAxDQotZGRjbXM1MTAgY29tcGFyZXNpZyAgICAxICAgICAxRS01ICAgICAtPiAxDQotZGRjbXM1MTEgY29tcGFyZXNpZyAgICAxICAgICAxRS00ICAgICAtPiAxDQotZGRjbXM1MTIgY29tcGFyZXNpZyAgICAxICAgICAxRS0zICAgICAtPiAxDQotZGRjbXM1MTMgY29tcGFyZXNpZyAgICAxICAgICAxRS0yICAgICAtPiAxDQotZGRjbXM1MTQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xICAgICAtPiAxDQotZGRjbXM1MTUgY29tcGFyZXNpZyAgICAxICAgICAxRS0wICAgICAtPiAwDQotZGRjbXM1MTYgY29tcGFyZXNpZyAgICAxICAgICAxRSsxICAgICAtPiAtMQ0KLWRkY21zNTE3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMiAgICAgLT4gLTENCi1kZGNtczUxOCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzMgICAgIC0+IC0xDQotZGRjbXM1MTkgY29tcGFyZXNpZyAgICAxICAgICAxRSs0ICAgICAtPiAtMQ0KLWRkY21zNTIxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNSAgICAgLT4gLTENCi1kZGNtczUyMiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzYgICAgIC0+IC0xDQotZGRjbXM1MjMgY29tcGFyZXNpZyAgICAxICAgICAxRSs3ICAgICAtPiAtMQ0KLWRkY21zNTI0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOCAgICAgLT4gLTENCi1kZGNtczUyNSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzkgICAgIC0+IC0xDQotZGRjbXM1MjYgY29tcGFyZXNpZyAgICAxICAgICAxRSsxMCAgICAtPiAtMQ0KLWRkY21zNTI3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTEgICAgLT4gLTENCi1kZGNtczUyOCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEyICAgIC0+IC0xDQotZGRjbXM1MjkgY29tcGFyZXNpZyAgICAxICAgICAxRSsxMyAgICAtPiAtMQ0KLWRkY21zNTMwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTQgICAgLT4gLTENCi1kZGNtczUzMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xDQotLS0gTFIgc3dhcA0KLWRkY21zNTQwIGNvbXBhcmVzaWcgICAgMUUtMTUgIDEgICAgICAgLT4gLTENCi1kZGNtczU0MSBjb21wYXJlc2lnICAgIDFFLTE0ICAxICAgICAgIC0+IC0xDQotZGRjbXM1NDIgY29tcGFyZXNpZyAgICAxRS0xMyAgMSAgICAgICAtPiAtMQ0KLWRkY21zNTQzIGNvbXBhcmVzaWcgICAgMUUtMTIgIDEgICAgICAgLT4gLTENCi1kZGNtczU0NCBjb21wYXJlc2lnICAgIDFFLTExICAxICAgICAgIC0+IC0xDQotZGRjbXM1NDUgY29tcGFyZXNpZyAgICAxRS0xMCAgMSAgICAgICAtPiAtMQ0KLWRkY21zNTQ2IGNvbXBhcmVzaWcgICAgMUUtOSAgIDEgICAgICAgLT4gLTENCi1kZGNtczU0NyBjb21wYXJlc2lnICAgIDFFLTggICAxICAgICAgIC0+IC0xDQotZGRjbXM1NDggY29tcGFyZXNpZyAgICAxRS03ICAgMSAgICAgICAtPiAtMQ0KLWRkY21zNTQ5IGNvbXBhcmVzaWcgICAgMUUtNiAgIDEgICAgICAgLT4gLTENCi1kZGNtczU1MCBjb21wYXJlc2lnICAgIDFFLTUgICAxICAgICAgIC0+IC0xDQotZGRjbXM1NTEgY29tcGFyZXNpZyAgICAxRS00ICAgMSAgICAgICAtPiAtMQ0KLWRkY21zNTUyIGNvbXBhcmVzaWcgICAgMUUtMyAgIDEgICAgICAgLT4gLTENCi1kZGNtczU1MyBjb21wYXJlc2lnICAgIDFFLTIgICAxICAgICAgIC0+IC0xDQotZGRjbXM1NTQgY29tcGFyZXNpZyAgICAxRS0xICAgMSAgICAgICAtPiAtMQ0KLWRkY21zNTU1IGNvbXBhcmVzaWcgICAgMUUtMCAgIDEgICAgICAgLT4gIDANCi1kZGNtczU1NiBjb21wYXJlc2lnICAgIDFFKzEgICAxICAgICAgIC0+ICAxDQotZGRjbXM1NTcgY29tcGFyZXNpZyAgICAxRSsyICAgMSAgICAgICAtPiAgMQ0KLWRkY21zNTU4IGNvbXBhcmVzaWcgICAgMUUrMyAgIDEgICAgICAgLT4gIDENCi1kZGNtczU1OSBjb21wYXJlc2lnICAgIDFFKzQgICAxICAgICAgIC0+ICAxDQotZGRjbXM1NjEgY29tcGFyZXNpZyAgICAxRSs1ICAgMSAgICAgICAtPiAgMQ0KLWRkY21zNTYyIGNvbXBhcmVzaWcgICAgMUUrNiAgIDEgICAgICAgLT4gIDENCi1kZGNtczU2MyBjb21wYXJlc2lnICAgIDFFKzcgICAxICAgICAgIC0+ICAxDQotZGRjbXM1NjQgY29tcGFyZXNpZyAgICAxRSs4ICAgMSAgICAgICAtPiAgMQ0KLWRkY21zNTY1IGNvbXBhcmVzaWcgICAgMUUrOSAgIDEgICAgICAgLT4gIDENCi1kZGNtczU2NiBjb21wYXJlc2lnICAgIDFFKzEwICAxICAgICAgIC0+ICAxDQotZGRjbXM1NjcgY29tcGFyZXNpZyAgICAxRSsxMSAgMSAgICAgICAtPiAgMQ0KLWRkY21zNTY4IGNvbXBhcmVzaWcgICAgMUUrMTIgIDEgICAgICAgLT4gIDENCi1kZGNtczU2OSBjb21wYXJlc2lnICAgIDFFKzEzICAxICAgICAgIC0+ICAxDQotZGRjbXM1NzAgY29tcGFyZXNpZyAgICAxRSsxNCAgMSAgICAgICAtPiAgMQ0KLWRkY21zNTcxIGNvbXBhcmVzaWcgICAgMUUrMTUgIDEgICAgICAgLT4gIDENCi0tLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkNCi1kZGNtczU4MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQ0KLWRkY21zNTgxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxDQotZGRjbXM1ODIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDENCi1kZGNtczU4MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQ0KLWRkY21zNTg0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxDQotZGRjbXM1ODUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDENCi1kZGNtczU4NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQ0KLWRkY21zNTg3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxDQotZGRjbXM1ODggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDENCi1kZGNtczU4OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTENCi1kZGNtczU5MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTENCi1kZGNtczU5MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTENCi1kZGNtczU5MiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTENCi1kZGNtczU5MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTENCi1kZGNtczU5NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTENCi1kZGNtczU5NSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTENCi1kZGNtczU5NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTENCi1kZGNtczU5NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTENCi1kZGNtczU5OCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTENCi1kZGNtczU5OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTENCi0NCi0tLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcw0KLWRkY21zNjAwIGNvbXBhcmVzaWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kZGNtczYwMSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjbXM2MDIgY29tcGFyZXNpZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY21zNjAzIGNvbXBhcmVzaWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kZGNtczYwNCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjbXM2MDUgY29tcGFyZXNpZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY21zNjA2IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTENCi1kZGNtczYwNyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xDQotZGRjbXM2MDggY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQ0KLWRkY21zNjA5IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTENCi1kZGNtczYxMCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxDQotZGRjbXM2MTEgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQ0KLWRkY21zNjEyIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDENCi1kZGNtczYxMyBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxDQotZGRjbXM2MTQgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQ0KLWRkY21zNjE1IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDENCi1kZGNtczYxNiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxDQotZGRjbXM2MTcgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQ0KLWRkY21zNjE4IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDENCi1kZGNtczYxOSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxDQotZGRjbXM2MjAgY29tcGFyZXNpZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY21zNjIxIGNvbXBhcmVzaWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kZGNtczYyMiBjb21wYXJlc2lnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjbXM2MjMgY29tcGFyZXNpZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY21zNjI0IGNvbXBhcmVzaWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDENCi1kZGNtczYyNSBjb21wYXJlc2lnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjbXM2MjYgY29tcGFyZXNpZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY21zNjI3IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDENCi1kZGNtczYyOCBjb21wYXJlc2lnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjbXM2MjkgY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQ0KLWRkY21zNjMwIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTENCi1kZGNtczYzMSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xDQotZGRjbXM2MzIgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQ0KLWRkY21zNjMzIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTENCi1kZGNtczYzNCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xDQotZGRjbXM2MzUgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQ0KLWRkY21zNjM2IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTENCi1kZGNtczYzNyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xDQotZGRjbXM2MzggY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQ0KLWRkY21zNjM5IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTENCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWRkY21zNjQwIGNvbXBhcmVzaWcgICAwICAgICAwICAgLT4gMA0KLWRkY21zNjQxIGNvbXBhcmVzaWcgICAwICAgIC0wICAgLT4gMA0KLWRkY21zNjQyIGNvbXBhcmVzaWcgICAwICAgIC0wLjAgLT4gMA0KLWRkY21zNjQzIGNvbXBhcmVzaWcgICAwICAgICAwLjAgLT4gMA0KLWRkY21zNjQ0IGNvbXBhcmVzaWcgIC0wICAgICAwICAgLT4gMA0KLWRkY21zNjQ1IGNvbXBhcmVzaWcgIC0wICAgIC0wICAgLT4gMA0KLWRkY21zNjQ2IGNvbXBhcmVzaWcgIC0wICAgIC0wLjAgLT4gMA0KLWRkY21zNjQ3IGNvbXBhcmVzaWcgIC0wICAgICAwLjAgLT4gMA0KLWRkY21zNjQ4IGNvbXBhcmVzaWcgICAwLjAgICAwICAgLT4gMA0KLWRkY21zNjQ5IGNvbXBhcmVzaWcgICAwLjAgIC0wICAgLT4gMA0KLWRkY21zNjUwIGNvbXBhcmVzaWcgICAwLjAgIC0wLjAgLT4gMA0KLWRkY21zNjUxIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgLT4gMA0KLWRkY21zNjUyIGNvbXBhcmVzaWcgIC0wLjAgICAwICAgLT4gMA0KLWRkY21zNjUzIGNvbXBhcmVzaWcgIC0wLjAgIC0wICAgLT4gMA0KLWRkY21zNjU0IGNvbXBhcmVzaWcgIC0wLjAgIC0wLjAgLT4gMA0KLWRkY21zNjU1IGNvbXBhcmVzaWcgIC0wLjAgICAwLjAgLT4gMA0KLQ0KLWRkY21zNjU2IGNvbXBhcmVzaWcgIC0wRTEgICAwLjAgLT4gMA0KLWRkY21zNjU3IGNvbXBhcmVzaWcgIC0wRTIgICAwLjAgLT4gMA0KLWRkY21zNjU4IGNvbXBhcmVzaWcgICAwRTEgICAwLjAgLT4gMA0KLWRkY21zNjU5IGNvbXBhcmVzaWcgICAwRTIgICAwLjAgLT4gMA0KLWRkY21zNjYwIGNvbXBhcmVzaWcgIC0wRTEgICAwICAgLT4gMA0KLWRkY21zNjYxIGNvbXBhcmVzaWcgIC0wRTIgICAwICAgLT4gMA0KLWRkY21zNjYyIGNvbXBhcmVzaWcgICAwRTEgICAwICAgLT4gMA0KLWRkY21zNjYzIGNvbXBhcmVzaWcgICAwRTIgICAwICAgLT4gMA0KLWRkY21zNjY0IGNvbXBhcmVzaWcgIC0wRTEgIC0wRTEgLT4gMA0KLWRkY21zNjY1IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTEgLT4gMA0KLWRkY21zNjY2IGNvbXBhcmVzaWcgICAwRTEgIC0wRTEgLT4gMA0KLWRkY21zNjY3IGNvbXBhcmVzaWcgICAwRTIgIC0wRTEgLT4gMA0KLWRkY21zNjY4IGNvbXBhcmVzaWcgIC0wRTEgIC0wRTIgLT4gMA0KLWRkY21zNjY5IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTIgLT4gMA0KLWRkY21zNjcwIGNvbXBhcmVzaWcgICAwRTEgIC0wRTIgLT4gMA0KLWRkY21zNjcxIGNvbXBhcmVzaWcgICAwRTIgIC0wRTIgLT4gMA0KLWRkY21zNjcyIGNvbXBhcmVzaWcgIC0wRTEgICAwRTEgLT4gMA0KLWRkY21zNjczIGNvbXBhcmVzaWcgIC0wRTIgICAwRTEgLT4gMA0KLWRkY21zNjc0IGNvbXBhcmVzaWcgICAwRTEgICAwRTEgLT4gMA0KLWRkY21zNjc1IGNvbXBhcmVzaWcgICAwRTIgICAwRTEgLT4gMA0KLWRkY21zNjc2IGNvbXBhcmVzaWcgIC0wRTEgICAwRTIgLT4gMA0KLWRkY21zNjc3IGNvbXBhcmVzaWcgIC0wRTIgICAwRTIgLT4gMA0KLWRkY21zNjc4IGNvbXBhcmVzaWcgICAwRTEgICAwRTIgLT4gMA0KLWRkY21zNjc5IGNvbXBhcmVzaWcgICAwRTIgICAwRTIgLT4gMA0KLQ0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCi1kZGNtczY4MCBjb21wYXJlc2lnICAgMTIgICAgMTIgICAgICAgICAgIC0+IDANCi1kZGNtczY4MSBjb21wYXJlc2lnICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDANCi1kZGNtczY4MiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDANCi1kZGNtczY4MyBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDANCi1kZGNtczY4NCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDANCi1kZGNtczY4NSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDANCi1kZGNtczY4NiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDANCi1kZGNtczY4NyBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDANCi1kZGNtczY4OCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDANCi1kZGNtczY4OSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDANCi1kZGNtczY5MCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAgIDEyIC0+IDANCi1kZGNtczY5MSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDANCi1kZGNtczY5MiBjb21wYXJlc2lnICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDANCi1kZGNtczY5MyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAgIDEyIC0+IDANCi1kZGNtczY5NCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDANCi1kZGNtczY5NSBjb21wYXJlc2lnICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDANCi1kZGNtczY5NiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IDANCi1kZGNtczY5NyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDANCi1kZGNtczY5OCBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDANCi1kZGNtczY5OSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IDANCi0NCi0tLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQNCi1kZGNtczcwMCBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU1IC0+IDENCi1kZGNtczcwMSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IDANCi1kZGNtczcwMiBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU3IC0+IC0xDQotZGRjbXM3MDMgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMDIzNDU2Nzg5MDEyMzQ1NiAtPiAxDQotZGRjbXM3MDQgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwDQotZGRjbXM3MDUgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMjIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQ0KLWRkY21zNzA2IGNvbXBhcmVzaWcgICAxMTM0NTY3ODkwMTIzNDU2IDEwMzQ1Njc4OTAxMjM0NTYgLT4gMQ0KLWRkY21zNzA3IGNvbXBhcmVzaWcgICAxMTM0NTY3ODkwMTIzNDU2IDExMzQ1Njc4OTAxMjM0NTYgLT4gMA0KLWRkY21zNzA4IGNvbXBhcmVzaWcgICAxMTM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gLTENCi0NCi0tLSBtaXNjZWxsYW5lb3VzDQotZGRjbXM3MjEgY29tcGFyZXNpZyAxMjM0NTY3ODAwMCAxIC0+IDENCi1kZGNtczcyMiBjb21wYXJlc2lnIDEgMTIzNDU2NzgwMDAgLT4gLTENCi1kZGNtczcyMyBjb21wYXJlc2lnIDEyMzQ1Njc4MDAgIDEgLT4gMQ0KLWRkY21zNzI0IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODAwICAtPiAtMQ0KLWRkY21zNzI1IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MCAgMSAtPiAxDQotZGRjbXM3MjYgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAgIC0+IC0xDQotZGRjbXM3MjcgY29tcGFyZXNpZyAxMjM0NTY3ODkxICAxIC0+IDENCi1kZGNtczcyOCBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MSAgLT4gLTENCi1kZGNtczcyOSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAxIDEgLT4gMQ0KLWRkY21zNzMwIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwMSAtPiAtMQ0KLWRkY21zNzMxIGNvbXBhcmVzaWcgMTIzNDU2Nzg5NiAgMSAtPiAxDQotZGRjbXM3MzIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTYgIC0+IC0xDQotDQotLS0gcmVzaWR1ZSBjYXNlcyBhdCBsb3dlciBwcmVjaXNpb24NCi1kZGNtczc0MCBjb21wYXJlc2lnICAxICAwLjk5OTk5OTkgIC0+IDENCi1kZGNtczc0MSBjb21wYXJlc2lnICAxICAwLjk5OTk5OSAgIC0+IDENCi1kZGNtczc0MiBjb21wYXJlc2lnICAxICAwLjk5OTk5ICAgIC0+IDENCi1kZGNtczc0MyBjb21wYXJlc2lnICAxICAxLjAwMDAgICAgIC0+IDANCi1kZGNtczc0NCBjb21wYXJlc2lnICAxICAxLjAwMDAxICAgIC0+IC0xDQotZGRjbXM3NDUgY29tcGFyZXNpZyAgMSAgMS4wMDAwMDEgICAtPiAtMQ0KLWRkY21zNzQ2IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAwMSAgLT4gLTENCi1kZGNtczc1MCBjb21wYXJlc2lnICAwLjk5OTk5OTkgIDEgIC0+IC0xDQotZGRjbXM3NTEgY29tcGFyZXNpZyAgMC45OTk5OTkgICAxICAtPiAtMQ0KLWRkY21zNzUyIGNvbXBhcmVzaWcgIDAuOTk5OTkgICAgMSAgLT4gLTENCi1kZGNtczc1MyBjb21wYXJlc2lnICAxLjAwMDAgICAgIDEgIC0+IDANCi1kZGNtczc1NCBjb21wYXJlc2lnICAxLjAwMDAxICAgIDEgIC0+IDENCi1kZGNtczc1NSBjb21wYXJlc2lnICAxLjAwMDAwMSAgIDEgIC0+IDENCi1kZGNtczc1NiBjb21wYXJlc2lnICAxLjAwMDAwMDEgIDEgIC0+IDENCi0NCi0tLSBTcGVjaWFscw0KLWRkY21zNzgwIGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxDQotZGRjbXM3ODEgY29tcGFyZXNpZyAgSW5mICAtMTAwMCAgLT4gIDENCi1kZGNtczc4MiBjb21wYXJlc2lnICBJbmYgIC0xICAgICAtPiAgMQ0KLWRkY21zNzgzIGNvbXBhcmVzaWcgIEluZiAgLTAgICAgIC0+ICAxDQotZGRjbXM3ODQgY29tcGFyZXNpZyAgSW5mICAgMCAgICAgLT4gIDENCi1kZGNtczc4NSBjb21wYXJlc2lnICBJbmYgICAxICAgICAtPiAgMQ0KLWRkY21zNzg2IGNvbXBhcmVzaWcgIEluZiAgIDEwMDAgIC0+ICAxDQotZGRjbXM3ODcgY29tcGFyZXNpZyAgSW5mICAgSW5mICAgLT4gIDANCi1kZGNtczc4OCBjb21wYXJlc2lnIC0xMDAwICBJbmYgICAtPiAtMQ0KLWRkY21zNzg5IGNvbXBhcmVzaWcgLUluZiAgIEluZiAgIC0+IC0xDQotZGRjbXM3OTAgY29tcGFyZXNpZyAtMSAgICAgSW5mICAgLT4gLTENCi1kZGNtczc5MSBjb21wYXJlc2lnIC0wICAgICBJbmYgICAtPiAtMQ0KLWRkY21zNzkyIGNvbXBhcmVzaWcgIDAgICAgIEluZiAgIC0+IC0xDQotZGRjbXM3OTMgY29tcGFyZXNpZyAgMSAgICAgSW5mICAgLT4gLTENCi1kZGNtczc5NCBjb21wYXJlc2lnICAxMDAwICBJbmYgICAtPiAtMQ0KLWRkY21zNzk1IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwDQotDQotZGRjbXM4MDAgY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gIDANCi1kZGNtczgwMSBjb21wYXJlc2lnIC1JbmYgIC0xMDAwICAtPiAtMQ0KLWRkY21zODAyIGNvbXBhcmVzaWcgLUluZiAgLTEgICAgIC0+IC0xDQotZGRjbXM4MDMgY29tcGFyZXNpZyAtSW5mICAtMCAgICAgLT4gLTENCi1kZGNtczgwNCBjb21wYXJlc2lnIC1JbmYgICAwICAgICAtPiAtMQ0KLWRkY21zODA1IGNvbXBhcmVzaWcgLUluZiAgIDEgICAgIC0+IC0xDQotZGRjbXM4MDYgY29tcGFyZXNpZyAtSW5mICAgMTAwMCAgLT4gLTENCi1kZGNtczgwNyBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQ0KLWRkY21zODA4IGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwDQotZGRjbXM4MDkgY29tcGFyZXNpZyAtMTAwMCAtSW5mICAgLT4gIDENCi1kZGNtczgxMCBjb21wYXJlc2lnIC0xICAgIC1JbmYgICAtPiAgMQ0KLWRkY21zODExIGNvbXBhcmVzaWcgLTAgICAgLUluZiAgIC0+ICAxDQotZGRjbXM4MTIgY29tcGFyZXNpZyAgMCAgICAtSW5mICAgLT4gIDENCi1kZGNtczgxMyBjb21wYXJlc2lnICAxICAgIC1JbmYgICAtPiAgMQ0KLWRkY21zODE0IGNvbXBhcmVzaWcgIDEwMDAgLUluZiAgIC0+ICAxDQotZGRjbXM4MTUgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDENCi0NCi1kZGNtczgyMSBjb21wYXJlc2lnICBOYU4gLUluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODIyIGNvbXBhcmVzaWcgIE5hTiAtMTAwMCAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MjMgY29tcGFyZXNpZyAgTmFOIC0xICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgyNCBjb21wYXJlc2lnICBOYU4gLTAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODI1IGNvbXBhcmVzaWcgIE5hTiAgMCAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MjYgY29tcGFyZXNpZyAgTmFOICAxICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgyNyBjb21wYXJlc2lnICBOYU4gIDEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODI4IGNvbXBhcmVzaWcgIE5hTiAgSW5mICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MjkgY29tcGFyZXNpZyAgTmFOICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgzMCBjb21wYXJlc2lnIC1JbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODMxIGNvbXBhcmVzaWcgLTEwMDAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MzIgY29tcGFyZXNpZyAtMSAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgzMyBjb21wYXJlc2lnIC0wICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODM0IGNvbXBhcmVzaWcgIDAgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MzUgY29tcGFyZXNpZyAgMSAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgzNiBjb21wYXJlc2lnICAxMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODM3IGNvbXBhcmVzaWcgIEluZiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MzggY29tcGFyZXNpZyAtTmFOIC1OYU4gICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgzOSBjb21wYXJlc2lnICtOYU4gLU5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODQwIGNvbXBhcmVzaWcgLU5hTiArTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRjbXM4NDEgY29tcGFyZXNpZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg0MiBjb21wYXJlc2lnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODQzIGNvbXBhcmVzaWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NDQgY29tcGFyZXNpZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg0NSBjb21wYXJlc2lnICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODQ2IGNvbXBhcmVzaWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NDcgY29tcGFyZXNpZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg0OCBjb21wYXJlc2lnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODQ5IGNvbXBhcmVzaWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NTAgY29tcGFyZXNpZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg1MSBjb21wYXJlc2lnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODUyIGNvbXBhcmVzaWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NTMgY29tcGFyZXNpZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg1NCBjb21wYXJlc2lnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODU1IGNvbXBhcmVzaWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NTYgY29tcGFyZXNpZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg1NyBjb21wYXJlc2lnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODU4IGNvbXBhcmVzaWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NTkgY29tcGFyZXNpZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRjbXM4NjAgY29tcGFyZXNpZyAgTmFOOSAtSW5mICAgLT4gIE5hTjkgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODYxIGNvbXBhcmVzaWcgIE5hTjggIDk5OSAgIC0+ICBOYU44ICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg2MiBjb21wYXJlc2lnICBOYU43NyBJbmYgICAtPiAgTmFONzcgIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NjMgY29tcGFyZXNpZyAtTmFONjcgTmFONSAgLT4gLU5hTjY3ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODY0IGNvbXBhcmVzaWcgLUluZiAgLU5hTjQgIC0+IC1OYU40ICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg2NSBjb21wYXJlc2lnIC05OTkgIC1OYU4zMyAtPiAtTmFOMzMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NjYgY29tcGFyZXNpZyAgSW5mICAgTmFOMiAgLT4gIE5hTjIgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODY3IGNvbXBhcmVzaWcgLU5hTjQxIC1OYU40MiAtPiAtTmFONDEgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg2OCBjb21wYXJlc2lnICtOYU40MSAtTmFONDIgLT4gIE5hTjQxIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NjkgY29tcGFyZXNpZyAtTmFONDEgK05hTjQyIC0+IC1OYU40MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODcwIGNvbXBhcmVzaWcgK05hTjQxICtOYU40MiAtPiAgTmFONDEgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZGNtczg3MSBjb21wYXJlc2lnIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg3MiBjb21wYXJlc2lnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg3MyBjb21wYXJlc2lnICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg3NCBjb21wYXJlc2lnICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg3NSBjb21wYXJlc2lnICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg3NiBjb21wYXJlc2lnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg3NyBjb21wYXJlc2lnICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg3OCBjb21wYXJlc2lnICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg3OSBjb21wYXJlc2lnICBOYU4gICAtc05hTjg5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSB3aWRlIHJhbmdlDQotZGRjbXM4ODAgY29tcGFyZXNpZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTENCi1kZGNtczg4MSBjb21wYXJlc2lnIDlFKzM4NCArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQ0KLWRkY21zODgyIGNvbXBhcmVzaWcgKzAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+ICAxDQotZGRjbXM4ODMgY29tcGFyZXNpZyA5RS0zODMgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTENCi1kZGNtczg4NSBjb21wYXJlc2lnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzM4NCAtPiAtMQ0KLWRkY21zODg2IGNvbXBhcmVzaWcgOUUrMzg0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQotZGRjbXM4ODcgY29tcGFyZXNpZyAtMC4xMDAgOUUtMzgzICAgICAgICAgICAgICAgLT4gLTENCi1kZGNtczg4OCBjb21wYXJlc2lnIDlFLTM4MyAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQ0KLQ0KLS0tIHNpZ25zDQotZGRjbXM5MDEgY29tcGFyZXNpZyAgMWUrNzcgIDFlKzExIC0+ICAxDQotZGRjbXM5MDIgY29tcGFyZXNpZyAgMWUrNzcgLTFlKzExIC0+ICAxDQotZGRjbXM5MDMgY29tcGFyZXNpZyAtMWUrNzcgIDFlKzExIC0+IC0xDQotZGRjbXM5MDQgY29tcGFyZXNpZyAtMWUrNzcgLTFlKzExIC0+IC0xDQotZGRjbXM5MDUgY29tcGFyZXNpZyAgMWUtNzcgIDFlLTExIC0+IC0xDQotZGRjbXM5MDYgY29tcGFyZXNpZyAgMWUtNzcgLTFlLTExIC0+ICAxDQotZGRjbXM5MDcgY29tcGFyZXNpZyAtMWUtNzcgIDFlLTExIC0+IC0xDQotZGRjbXM5MDggY29tcGFyZXNpZyAtMWUtNzcgLTFlLTExIC0+ICAxDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkY21zOTkwIGNvbXBhcmVzaWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM5OTEgY29tcGFyZXNpZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29tcGFyZVNpZy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBjb21wYXJpc29uOyBhbGwgTmFOcyBzaWduYWwgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZGNtczAwMSBjb21wYXJlc2lnICAtMiAgLTIgIC0+IDAKK2RkY21zMDAyIGNvbXBhcmVzaWcgIC0yICAtMSAgLT4gLTEKK2RkY21zMDAzIGNvbXBhcmVzaWcgIC0yICAgMCAgLT4gLTEKK2RkY21zMDA0IGNvbXBhcmVzaWcgIC0yICAgMSAgLT4gLTEKK2RkY21zMDA1IGNvbXBhcmVzaWcgIC0yICAgMiAgLT4gLTEKK2RkY21zMDA2IGNvbXBhcmVzaWcgIC0xICAtMiAgLT4gMQorZGRjbXMwMDcgY29tcGFyZXNpZyAgLTEgIC0xICAtPiAwCitkZGNtczAwOCBjb21wYXJlc2lnICAtMSAgIDAgIC0+IC0xCitkZGNtczAwOSBjb21wYXJlc2lnICAtMSAgIDEgIC0+IC0xCitkZGNtczAxMCBjb21wYXJlc2lnICAtMSAgIDIgIC0+IC0xCitkZGNtczAxMSBjb21wYXJlc2lnICAgMCAgLTIgIC0+IDEKK2RkY21zMDEyIGNvbXBhcmVzaWcgICAwICAtMSAgLT4gMQorZGRjbXMwMTMgY29tcGFyZXNpZyAgIDAgICAwICAtPiAwCitkZGNtczAxNCBjb21wYXJlc2lnICAgMCAgIDEgIC0+IC0xCitkZGNtczAxNSBjb21wYXJlc2lnICAgMCAgIDIgIC0+IC0xCitkZGNtczAxNiBjb21wYXJlc2lnICAgMSAgLTIgIC0+IDEKK2RkY21zMDE3IGNvbXBhcmVzaWcgICAxICAtMSAgLT4gMQorZGRjbXMwMTggY29tcGFyZXNpZyAgIDEgICAwICAtPiAxCitkZGNtczAxOSBjb21wYXJlc2lnICAgMSAgIDEgIC0+IDAKK2RkY21zMDIwIGNvbXBhcmVzaWcgICAxICAgMiAgLT4gLTEKK2RkY21zMDIxIGNvbXBhcmVzaWcgICAyICAtMiAgLT4gMQorZGRjbXMwMjIgY29tcGFyZXNpZyAgIDIgIC0xICAtPiAxCitkZGNtczAyMyBjb21wYXJlc2lnICAgMiAgIDAgIC0+IDEKK2RkY21zMDI1IGNvbXBhcmVzaWcgICAyICAgMSAgLT4gMQorZGRjbXMwMjYgY29tcGFyZXNpZyAgIDIgICAyICAtPiAwCisKK2RkY21zMDMxIGNvbXBhcmVzaWcgIC0yMCAgLTIwICAtPiAwCitkZGNtczAzMiBjb21wYXJlc2lnICAtMjAgIC0xMCAgLT4gLTEKK2RkY21zMDMzIGNvbXBhcmVzaWcgIC0yMCAgIDAwICAtPiAtMQorZGRjbXMwMzQgY29tcGFyZXNpZyAgLTIwICAgMTAgIC0+IC0xCitkZGNtczAzNSBjb21wYXJlc2lnICAtMjAgICAyMCAgLT4gLTEKK2RkY21zMDM2IGNvbXBhcmVzaWcgIC0xMCAgLTIwICAtPiAxCitkZGNtczAzNyBjb21wYXJlc2lnICAtMTAgIC0xMCAgLT4gMAorZGRjbXMwMzggY29tcGFyZXNpZyAgLTEwICAgMDAgIC0+IC0xCitkZGNtczAzOSBjb21wYXJlc2lnICAtMTAgICAxMCAgLT4gLTEKK2RkY21zMDQwIGNvbXBhcmVzaWcgIC0xMCAgIDIwICAtPiAtMQorZGRjbXMwNDEgY29tcGFyZXNpZyAgIDAwICAtMjAgIC0+IDEKK2RkY21zMDQyIGNvbXBhcmVzaWcgICAwMCAgLTEwICAtPiAxCitkZGNtczA0MyBjb21wYXJlc2lnICAgMDAgICAwMCAgLT4gMAorZGRjbXMwNDQgY29tcGFyZXNpZyAgIDAwICAgMTAgIC0+IC0xCitkZGNtczA0NSBjb21wYXJlc2lnICAgMDAgICAyMCAgLT4gLTEKK2RkY21zMDQ2IGNvbXBhcmVzaWcgICAxMCAgLTIwICAtPiAxCitkZGNtczA0NyBjb21wYXJlc2lnICAgMTAgIC0xMCAgLT4gMQorZGRjbXMwNDggY29tcGFyZXNpZyAgIDEwICAgMDAgIC0+IDEKK2RkY21zMDQ5IGNvbXBhcmVzaWcgICAxMCAgIDEwICAtPiAwCitkZGNtczA1MCBjb21wYXJlc2lnICAgMTAgICAyMCAgLT4gLTEKK2RkY21zMDUxIGNvbXBhcmVzaWcgICAyMCAgLTIwICAtPiAxCitkZGNtczA1MiBjb21wYXJlc2lnICAgMjAgIC0xMCAgLT4gMQorZGRjbXMwNTMgY29tcGFyZXNpZyAgIDIwICAgMDAgIC0+IDEKK2RkY21zMDU1IGNvbXBhcmVzaWcgICAyMCAgIDEwICAtPiAxCitkZGNtczA1NiBjb21wYXJlc2lnICAgMjAgICAyMCAgLT4gMAorCitkZGNtczA2MSBjb21wYXJlc2lnICAtMi4wICAtMi4wICAtPiAwCitkZGNtczA2MiBjb21wYXJlc2lnICAtMi4wICAtMS4wICAtPiAtMQorZGRjbXMwNjMgY29tcGFyZXNpZyAgLTIuMCAgIDAuMCAgLT4gLTEKK2RkY21zMDY0IGNvbXBhcmVzaWcgIC0yLjAgICAxLjAgIC0+IC0xCitkZGNtczA2NSBjb21wYXJlc2lnICAtMi4wICAgMi4wICAtPiAtMQorZGRjbXMwNjYgY29tcGFyZXNpZyAgLTEuMCAgLTIuMCAgLT4gMQorZGRjbXMwNjcgY29tcGFyZXNpZyAgLTEuMCAgLTEuMCAgLT4gMAorZGRjbXMwNjggY29tcGFyZXNpZyAgLTEuMCAgIDAuMCAgLT4gLTEKK2RkY21zMDY5IGNvbXBhcmVzaWcgIC0xLjAgICAxLjAgIC0+IC0xCitkZGNtczA3MCBjb21wYXJlc2lnICAtMS4wICAgMi4wICAtPiAtMQorZGRjbXMwNzEgY29tcGFyZXNpZyAgIDAuMCAgLTIuMCAgLT4gMQorZGRjbXMwNzIgY29tcGFyZXNpZyAgIDAuMCAgLTEuMCAgLT4gMQorZGRjbXMwNzMgY29tcGFyZXNpZyAgIDAuMCAgIDAuMCAgLT4gMAorZGRjbXMwNzQgY29tcGFyZXNpZyAgIDAuMCAgIDEuMCAgLT4gLTEKK2RkY21zMDc1IGNvbXBhcmVzaWcgICAwLjAgICAyLjAgIC0+IC0xCitkZGNtczA3NiBjb21wYXJlc2lnICAgMS4wICAtMi4wICAtPiAxCitkZGNtczA3NyBjb21wYXJlc2lnICAgMS4wICAtMS4wICAtPiAxCitkZGNtczA3OCBjb21wYXJlc2lnICAgMS4wICAgMC4wICAtPiAxCitkZGNtczA3OSBjb21wYXJlc2lnICAgMS4wICAgMS4wICAtPiAwCitkZGNtczA4MCBjb21wYXJlc2lnICAgMS4wICAgMi4wICAtPiAtMQorZGRjbXMwODEgY29tcGFyZXNpZyAgIDIuMCAgLTIuMCAgLT4gMQorZGRjbXMwODIgY29tcGFyZXNpZyAgIDIuMCAgLTEuMCAgLT4gMQorZGRjbXMwODMgY29tcGFyZXNpZyAgIDIuMCAgIDAuMCAgLT4gMQorZGRjbXMwODUgY29tcGFyZXNpZyAgIDIuMCAgIDEuMCAgLT4gMQorZGRjbXMwODYgY29tcGFyZXNpZyAgIDIuMCAgIDIuMCAgLT4gMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RkY21zMDkwIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMAorZGRjbXMwOTEgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtMQorZGRjbXMwOTIgY29tcGFyZXNpZyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAxCitkZGNtczA5MyBjb21wYXJlc2lnIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCitkZGNtczEwMCBjb21wYXJlc2lnICAgNy4wICAgIDcuMCAgICAtPiAwCitkZGNtczEwMSBjb21wYXJlc2lnICAgNy4wICAgIDcgICAgICAtPiAwCitkZGNtczEwMiBjb21wYXJlc2lnICAgNyAgICAgIDcuMCAgICAtPiAwCitkZGNtczEwMyBjb21wYXJlc2lnICAgN0UrMCAgIDcuMCAgICAtPiAwCitkZGNtczEwNCBjb21wYXJlc2lnICAgNzBFLTEgIDcuMCAgICAtPiAwCitkZGNtczEwNSBjb21wYXJlc2lnICAgMC43RSsxIDcgICAgICAtPiAwCitkZGNtczEwNiBjb21wYXJlc2lnICAgNzBFLTEgIDcgICAgICAtPiAwCitkZGNtczEwNyBjb21wYXJlc2lnICAgNy4wICAgIDdFKzAgICAtPiAwCitkZGNtczEwOCBjb21wYXJlc2lnICAgNy4wICAgIDcwRS0xICAtPiAwCitkZGNtczEwOSBjb21wYXJlc2lnICAgNyAgICAgIDAuN0UrMSAtPiAwCitkZGNtczExMCBjb21wYXJlc2lnICAgNyAgICAgIDcwRS0xICAtPiAwCisKK2RkY21zMTIwIGNvbXBhcmVzaWcgICA4LjAgICAgNy4wICAgIC0+IDEKK2RkY21zMTIxIGNvbXBhcmVzaWcgICA4LjAgICAgNyAgICAgIC0+IDEKK2RkY21zMTIyIGNvbXBhcmVzaWcgICA4ICAgICAgNy4wICAgIC0+IDEKK2RkY21zMTIzIGNvbXBhcmVzaWcgICA4RSswICAgNy4wICAgIC0+IDEKK2RkY21zMTI0IGNvbXBhcmVzaWcgICA4MEUtMSAgNy4wICAgIC0+IDEKK2RkY21zMTI1IGNvbXBhcmVzaWcgICAwLjhFKzEgNyAgICAgIC0+IDEKK2RkY21zMTI2IGNvbXBhcmVzaWcgICA4MEUtMSAgNyAgICAgIC0+IDEKK2RkY21zMTI3IGNvbXBhcmVzaWcgICA4LjAgICAgN0UrMCAgIC0+IDEKK2RkY21zMTI4IGNvbXBhcmVzaWcgICA4LjAgICAgNzBFLTEgIC0+IDEKK2RkY21zMTI5IGNvbXBhcmVzaWcgICA4ICAgICAgMC43RSsxICAtPiAxCitkZGNtczEzMCBjb21wYXJlc2lnICAgOCAgICAgIDcwRS0xICAtPiAxCisKK2RkY21zMTQwIGNvbXBhcmVzaWcgICA4LjAgICAgOS4wICAgIC0+IC0xCitkZGNtczE0MSBjb21wYXJlc2lnICAgOC4wICAgIDkgICAgICAtPiAtMQorZGRjbXMxNDIgY29tcGFyZXNpZyAgIDggICAgICA5LjAgICAgLT4gLTEKK2RkY21zMTQzIGNvbXBhcmVzaWcgICA4RSswICAgOS4wICAgIC0+IC0xCitkZGNtczE0NCBjb21wYXJlc2lnICAgODBFLTEgIDkuMCAgICAtPiAtMQorZGRjbXMxNDUgY29tcGFyZXNpZyAgIDAuOEUrMSA5ICAgICAgLT4gLTEKK2RkY21zMTQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgOSAgICAgIC0+IC0xCitkZGNtczE0NyBjb21wYXJlc2lnICAgOC4wICAgIDlFKzAgICAtPiAtMQorZGRjbXMxNDggY29tcGFyZXNpZyAgIDguMCAgICA5MEUtMSAgLT4gLTEKK2RkY21zMTQ5IGNvbXBhcmVzaWcgICA4ICAgICAgMC45RSsxIC0+IC0xCitkZGNtczE1MCBjb21wYXJlc2lnICAgOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitkZGNtczIwMCBjb21wYXJlc2lnICAtNy4wICAgIDcuMCAgICAtPiAtMQorZGRjbXMyMDEgY29tcGFyZXNpZyAgLTcuMCAgICA3ICAgICAgLT4gLTEKK2RkY21zMjAyIGNvbXBhcmVzaWcgIC03ICAgICAgNy4wICAgIC0+IC0xCitkZGNtczIwMyBjb21wYXJlc2lnICAtN0UrMCAgIDcuMCAgICAtPiAtMQorZGRjbXMyMDQgY29tcGFyZXNpZyAgLTcwRS0xICA3LjAgICAgLT4gLTEKK2RkY21zMjA1IGNvbXBhcmVzaWcgIC0wLjdFKzEgNyAgICAgIC0+IC0xCitkZGNtczIwNiBjb21wYXJlc2lnICAtNzBFLTEgIDcgICAgICAtPiAtMQorZGRjbXMyMDcgY29tcGFyZXNpZyAgLTcuMCAgICA3RSswICAgLT4gLTEKK2RkY21zMjA4IGNvbXBhcmVzaWcgIC03LjAgICAgNzBFLTEgIC0+IC0xCitkZGNtczIwOSBjb21wYXJlc2lnICAtNyAgICAgIDAuN0UrMSAtPiAtMQorZGRjbXMyMTAgY29tcGFyZXNpZyAgLTcgICAgICA3MEUtMSAgLT4gLTEKKworZGRjbXMyMjAgY29tcGFyZXNpZyAgLTguMCAgICA3LjAgICAgLT4gLTEKK2RkY21zMjIxIGNvbXBhcmVzaWcgIC04LjAgICAgNyAgICAgIC0+IC0xCitkZGNtczIyMiBjb21wYXJlc2lnICAtOCAgICAgIDcuMCAgICAtPiAtMQorZGRjbXMyMjMgY29tcGFyZXNpZyAgLThFKzAgICA3LjAgICAgLT4gLTEKK2RkY21zMjI0IGNvbXBhcmVzaWcgIC04MEUtMSAgNy4wICAgIC0+IC0xCitkZGNtczIyNSBjb21wYXJlc2lnICAtMC44RSsxIDcgICAgICAtPiAtMQorZGRjbXMyMjYgY29tcGFyZXNpZyAgLTgwRS0xICA3ICAgICAgLT4gLTEKK2RkY21zMjI3IGNvbXBhcmVzaWcgIC04LjAgICAgN0UrMCAgIC0+IC0xCitkZGNtczIyOCBjb21wYXJlc2lnICAtOC4wICAgIDcwRS0xICAtPiAtMQorZGRjbXMyMjkgY29tcGFyZXNpZyAgLTggICAgICAwLjdFKzEgLT4gLTEKK2RkY21zMjMwIGNvbXBhcmVzaWcgIC04ICAgICAgNzBFLTEgIC0+IC0xCisKK2RkY21zMjQwIGNvbXBhcmVzaWcgIC04LjAgICAgOS4wICAgIC0+IC0xCitkZGNtczI0MSBjb21wYXJlc2lnICAtOC4wICAgIDkgICAgICAtPiAtMQorZGRjbXMyNDIgY29tcGFyZXNpZyAgLTggICAgICA5LjAgICAgLT4gLTEKK2RkY21zMjQzIGNvbXBhcmVzaWcgIC04RSswICAgOS4wICAgIC0+IC0xCitkZGNtczI0NCBjb21wYXJlc2lnICAtODBFLTEgIDkuMCAgICAtPiAtMQorZGRjbXMyNDUgY29tcGFyZXNpZyAgLTAuOEUrMSA5ICAgICAgLT4gLTEKK2RkY21zMjQ2IGNvbXBhcmVzaWcgIC04MEUtMSAgOSAgICAgIC0+IC0xCitkZGNtczI0NyBjb21wYXJlc2lnICAtOC4wICAgIDlFKzAgICAtPiAtMQorZGRjbXMyNDggY29tcGFyZXNpZyAgLTguMCAgICA5MEUtMSAgLT4gLTEKK2RkY21zMjQ5IGNvbXBhcmVzaWcgIC04ICAgICAgMC45RSsxIC0+IC0xCitkZGNtczI1MCBjb21wYXJlc2lnICAtOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitkZGNtczMwMCBjb21wYXJlc2lnICAgNy4wICAgIC03LjAgICAgLT4gMQorZGRjbXMzMDEgY29tcGFyZXNpZyAgIDcuMCAgICAtNyAgICAgIC0+IDEKK2RkY21zMzAyIGNvbXBhcmVzaWcgICA3ICAgICAgLTcuMCAgICAtPiAxCitkZGNtczMwMyBjb21wYXJlc2lnICAgN0UrMCAgIC03LjAgICAgLT4gMQorZGRjbXMzMDQgY29tcGFyZXNpZyAgIDcwRS0xICAtNy4wICAgIC0+IDEKK2RkY21zMzA1IGNvbXBhcmVzaWcgICAuN0UrMSAgLTcgICAgICAtPiAxCitkZGNtczMwNiBjb21wYXJlc2lnICAgNzBFLTEgIC03ICAgICAgLT4gMQorZGRjbXMzMDcgY29tcGFyZXNpZyAgIDcuMCAgICAtN0UrMCAgIC0+IDEKK2RkY21zMzA4IGNvbXBhcmVzaWcgICA3LjAgICAgLTcwRS0xICAtPiAxCitkZGNtczMwOSBjb21wYXJlc2lnICAgNyAgICAgIC0uN0UrMSAgLT4gMQorZGRjbXMzMTAgY29tcGFyZXNpZyAgIDcgICAgICAtNzBFLTEgIC0+IDEKKworZGRjbXMzMjAgY29tcGFyZXNpZyAgIDguMCAgICAtNy4wICAgIC0+IDEKK2RkY21zMzIxIGNvbXBhcmVzaWcgICA4LjAgICAgLTcgICAgICAtPiAxCitkZGNtczMyMiBjb21wYXJlc2lnICAgOCAgICAgIC03LjAgICAgLT4gMQorZGRjbXMzMjMgY29tcGFyZXNpZyAgIDhFKzAgICAtNy4wICAgIC0+IDEKK2RkY21zMzI0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcuMCAgICAtPiAxCitkZGNtczMyNSBjb21wYXJlc2lnICAgLjhFKzEgIC03ICAgICAgLT4gMQorZGRjbXMzMjYgY29tcGFyZXNpZyAgIDgwRS0xICAtNyAgICAgIC0+IDEKK2RkY21zMzI3IGNvbXBhcmVzaWcgICA4LjAgICAgLTdFKzAgICAtPiAxCitkZGNtczMyOCBjb21wYXJlc2lnICAgOC4wICAgIC03MEUtMSAgLT4gMQorZGRjbXMzMjkgY29tcGFyZXNpZyAgIDggICAgICAtLjdFKzEgIC0+IDEKK2RkY21zMzMwIGNvbXBhcmVzaWcgICA4ICAgICAgLTcwRS0xICAtPiAxCisKK2RkY21zMzQwIGNvbXBhcmVzaWcgICA4LjAgICAgLTkuMCAgICAtPiAxCitkZGNtczM0MSBjb21wYXJlc2lnICAgOC4wICAgIC05ICAgICAgLT4gMQorZGRjbXMzNDIgY29tcGFyZXNpZyAgIDggICAgICAtOS4wICAgIC0+IDEKK2RkY21zMzQzIGNvbXBhcmVzaWcgICA4RSswICAgLTkuMCAgICAtPiAxCitkZGNtczM0NCBjb21wYXJlc2lnICAgODBFLTEgIC05LjAgICAgLT4gMQorZGRjbXMzNDUgY29tcGFyZXNpZyAgIC44RSsxICAtOSAgICAgIC0+IDEKK2RkY21zMzQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgLTkgICAgICAtPiAxCitkZGNtczM0NyBjb21wYXJlc2lnICAgOC4wICAgIC05RSswICAgLT4gMQorZGRjbXMzNDggY29tcGFyZXNpZyAgIDguMCAgICAtOTBFLTEgIC0+IDEKK2RkY21zMzQ5IGNvbXBhcmVzaWcgICA4ICAgICAgLS45RSsxICAtPiAxCitkZGNtczM1MCBjb21wYXJlc2lnICAgOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitkZGNtczQwMCBjb21wYXJlc2lnICAgLTcuMCAgICAtNy4wICAgIC0+IDAKK2RkY21zNDAxIGNvbXBhcmVzaWcgICAtNy4wICAgIC03ICAgICAgLT4gMAorZGRjbXM0MDIgY29tcGFyZXNpZyAgIC03ICAgICAgLTcuMCAgICAtPiAwCitkZGNtczQwMyBjb21wYXJlc2lnICAgLTdFKzAgICAtNy4wICAgIC0+IDAKK2RkY21zNDA0IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03LjAgICAgLT4gMAorZGRjbXM0MDUgY29tcGFyZXNpZyAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitkZGNtczQwNiBjb21wYXJlc2lnICAgLTcwRS0xICAtNyAgICAgIC0+IDAKK2RkY21zNDA3IGNvbXBhcmVzaWcgICAtNy4wICAgIC03RSswICAgLT4gMAorZGRjbXM0MDggY29tcGFyZXNpZyAgIC03LjAgICAgLTcwRS0xICAtPiAwCitkZGNtczQwOSBjb21wYXJlc2lnICAgLTcgICAgICAtLjdFKzEgIC0+IDAKK2RkY21zNDEwIGNvbXBhcmVzaWcgICAtNyAgICAgIC03MEUtMSAgLT4gMAorCitkZGNtczQyMCBjb21wYXJlc2lnICAgLTguMCAgICAtNy4wICAgIC0+IC0xCitkZGNtczQyMSBjb21wYXJlc2lnICAgLTguMCAgICAtNyAgICAgIC0+IC0xCitkZGNtczQyMiBjb21wYXJlc2lnICAgLTggICAgICAtNy4wICAgIC0+IC0xCitkZGNtczQyMyBjb21wYXJlc2lnICAgLThFKzAgICAtNy4wICAgIC0+IC0xCitkZGNtczQyNCBjb21wYXJlc2lnICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCitkZGNtczQyNSBjb21wYXJlc2lnICAgLS44RSsxICAtNyAgICAgIC0+IC0xCitkZGNtczQyNiBjb21wYXJlc2lnICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCitkZGNtczQyNyBjb21wYXJlc2lnICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCitkZGNtczQyOCBjb21wYXJlc2lnICAgLTguMCAgICAtNzBFLTEgIC0+IC0xCitkZGNtczQyOSBjb21wYXJlc2lnICAgLTggICAgICAtLjdFKzEgIC0+IC0xCitkZGNtczQzMCBjb21wYXJlc2lnICAgLTggICAgICAtNzBFLTEgIC0+IC0xCisKK2RkY21zNDQwIGNvbXBhcmVzaWcgICAtOC4wICAgIC05LjAgICAgLT4gMQorZGRjbXM0NDEgY29tcGFyZXNpZyAgIC04LjAgICAgLTkgICAgICAtPiAxCitkZGNtczQ0MiBjb21wYXJlc2lnICAgLTggICAgICAtOS4wICAgIC0+IDEKK2RkY21zNDQzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC05LjAgICAgLT4gMQorZGRjbXM0NDQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkuMCAgICAtPiAxCitkZGNtczQ0NSBjb21wYXJlc2lnICAgLS44RSsxICAtOSAgICAgIC0+IDEKK2RkY21zNDQ2IGNvbXBhcmVzaWcgICAtODBFLTEgIC05ICAgICAgLT4gMQorZGRjbXM0NDcgY29tcGFyZXNpZyAgIC04LjAgICAgLTlFKzAgICAtPiAxCitkZGNtczQ0OCBjb21wYXJlc2lnICAgLTguMCAgICAtOTBFLTEgIC0+IDEKK2RkY21zNDQ5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uOUUrMSAgLT4gMQorZGRjbXM0NTAgY29tcGFyZXNpZyAgIC04ICAgICAgLTkwRS0xICAtPiAxCisKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitkZGNtczQ3MyBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNtczQ3NCBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKK2RkY21zNDc1IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNtczQ3NiBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNtczQ3NyBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY21zNDc4IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNtczQ3OSBjb21wYXJlc2lnIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNtczQ4MCBjb21wYXJlc2lnIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKK2RkY21zNDgxIGNvbXBhcmVzaWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNtczQ4MiBjb21wYXJlc2lnIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNtczQ4MyBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY21zNDg3IGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5IC0+IDAKK2RkY21zNDg4IGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMAorZGRjbXM0ODkgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDAKK2RkY21zNDkwIGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDAKK2RkY21zNDkxIGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMAorZGRjbXM0OTIgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDAKK2RkY21zNDkzIGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5IC0+IDAKK2RkY21zNDk0IGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMAorZGRjbXM0OTUgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDAKK2RkY21zNDk2IGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDAKK2RkY21zNDk3IGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitkZGNtczUwMCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2RkY21zNTAxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTQgICAgLT4gMQorZGRjbXM1MDIgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMyAgICAtPiAxCitkZGNtczUwMyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2RkY21zNTA0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTEgICAgLT4gMQorZGRjbXM1MDUgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMCAgICAtPiAxCitkZGNtczUwNiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2RkY21zNTA3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOCAgICAgLT4gMQorZGRjbXM1MDggY29tcGFyZXNpZyAgICAxICAgICAxRS03ICAgICAtPiAxCitkZGNtczUwOSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2RkY21zNTEwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNSAgICAgLT4gMQorZGRjbXM1MTEgY29tcGFyZXNpZyAgICAxICAgICAxRS00ICAgICAtPiAxCitkZGNtczUxMiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2RkY21zNTEzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMiAgICAgLT4gMQorZGRjbXM1MTQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xICAgICAtPiAxCitkZGNtczUxNSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2RkY21zNTE2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKK2RkY21zNTE3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY21zNTE4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2RkY21zNTE5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKK2RkY21zNTIxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2RkY21zNTIyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2RkY21zNTIzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKK2RkY21zNTI0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2RkY21zNTI1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2RkY21zNTI2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKK2RkY21zNTI3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2RkY21zNTI4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2RkY21zNTI5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKK2RkY21zNTMwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2RkY21zNTMxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKKy0tIExSIHN3YXAKK2RkY21zNTQwIGNvbXBhcmVzaWcgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2RkY21zNTQxIGNvbXBhcmVzaWcgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKK2RkY21zNTQyIGNvbXBhcmVzaWcgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2RkY21zNTQzIGNvbXBhcmVzaWcgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2RkY21zNTQ0IGNvbXBhcmVzaWcgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKK2RkY21zNTQ1IGNvbXBhcmVzaWcgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2RkY21zNTQ2IGNvbXBhcmVzaWcgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2RkY21zNTQ3IGNvbXBhcmVzaWcgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKK2RkY21zNTQ4IGNvbXBhcmVzaWcgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2RkY21zNTQ5IGNvbXBhcmVzaWcgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2RkY21zNTUwIGNvbXBhcmVzaWcgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKK2RkY21zNTUxIGNvbXBhcmVzaWcgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2RkY21zNTUyIGNvbXBhcmVzaWcgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2RkY21zNTUzIGNvbXBhcmVzaWcgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKK2RkY21zNTU0IGNvbXBhcmVzaWcgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2RkY21zNTU1IGNvbXBhcmVzaWcgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2RkY21zNTU2IGNvbXBhcmVzaWcgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKK2RkY21zNTU3IGNvbXBhcmVzaWcgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2RkY21zNTU4IGNvbXBhcmVzaWcgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2RkY21zNTU5IGNvbXBhcmVzaWcgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKK2RkY21zNTYxIGNvbXBhcmVzaWcgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2RkY21zNTYyIGNvbXBhcmVzaWcgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2RkY21zNTYzIGNvbXBhcmVzaWcgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKK2RkY21zNTY0IGNvbXBhcmVzaWcgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2RkY21zNTY1IGNvbXBhcmVzaWcgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2RkY21zNTY2IGNvbXBhcmVzaWcgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKK2RkY21zNTY3IGNvbXBhcmVzaWcgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2RkY21zNTY4IGNvbXBhcmVzaWcgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2RkY21zNTY5IGNvbXBhcmVzaWcgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKK2RkY21zNTcwIGNvbXBhcmVzaWcgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2RkY21zNTcxIGNvbXBhcmVzaWcgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorZGRjbXM1ODAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2RkY21zNTgxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCitkZGNtczU4MiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQorZGRjbXM1ODMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2RkY21zNTg0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCitkZGNtczU4NSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQorZGRjbXM1ODYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2RkY21zNTg3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCitkZGNtczU4OCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQorZGRjbXM1ODkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitkZGNtczU5MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKK2RkY21zNTkxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQorZGRjbXM1OTIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitkZGNtczU5MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKK2RkY21zNTk0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQorZGRjbXM1OTUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitkZGNtczU5NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKK2RkY21zNTk3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQorZGRjbXM1OTggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNtczU5OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK2RkY21zNjAwIGNvbXBhcmVzaWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY21zNjAxIGNvbXBhcmVzaWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY21zNjAyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY21zNjAzIGNvbXBhcmVzaWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY21zNjA0IGNvbXBhcmVzaWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY21zNjA1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY21zNjA2IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY21zNjA3IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2RkY21zNjA4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKK2RkY21zNjA5IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKK2RkY21zNjEwIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2RkY21zNjExIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKK2RkY21zNjEyIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKK2RkY21zNjEzIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2RkY21zNjE0IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKK2RkY21zNjE1IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKK2RkY21zNjE2IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2RkY21zNjE3IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKK2RkY21zNjE4IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKK2RkY21zNjE5IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2RkY21zNjIwIGNvbXBhcmVzaWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY21zNjIxIGNvbXBhcmVzaWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY21zNjIyIGNvbXBhcmVzaWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY21zNjIzIGNvbXBhcmVzaWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY21zNjI0IGNvbXBhcmVzaWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY21zNjI1IGNvbXBhcmVzaWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY21zNjI2IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY21zNjI3IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKK2RkY21zNjI4IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2RkY21zNjI5IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKK2RkY21zNjMwIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKK2RkY21zNjMxIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2RkY21zNjMyIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKK2RkY21zNjMzIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKK2RkY21zNjM0IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2RkY21zNjM1IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKK2RkY21zNjM2IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKK2RkY21zNjM3IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2RkY21zNjM4IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKK2RkY21zNjM5IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkY21zNjQwIGNvbXBhcmVzaWcgICAwICAgICAwICAgLT4gMAorZGRjbXM2NDEgY29tcGFyZXNpZyAgIDAgICAgLTAgICAtPiAwCitkZGNtczY0MiBjb21wYXJlc2lnICAgMCAgICAtMC4wIC0+IDAKK2RkY21zNjQzIGNvbXBhcmVzaWcgICAwICAgICAwLjAgLT4gMAorZGRjbXM2NDQgY29tcGFyZXNpZyAgLTAgICAgIDAgICAtPiAwCitkZGNtczY0NSBjb21wYXJlc2lnICAtMCAgICAtMCAgIC0+IDAKK2RkY21zNjQ2IGNvbXBhcmVzaWcgIC0wICAgIC0wLjAgLT4gMAorZGRjbXM2NDcgY29tcGFyZXNpZyAgLTAgICAgIDAuMCAtPiAwCitkZGNtczY0OCBjb21wYXJlc2lnICAgMC4wICAgMCAgIC0+IDAKK2RkY21zNjQ5IGNvbXBhcmVzaWcgICAwLjAgIC0wICAgLT4gMAorZGRjbXM2NTAgY29tcGFyZXNpZyAgIDAuMCAgLTAuMCAtPiAwCitkZGNtczY1MSBjb21wYXJlc2lnICAgMC4wICAgMC4wIC0+IDAKK2RkY21zNjUyIGNvbXBhcmVzaWcgIC0wLjAgICAwICAgLT4gMAorZGRjbXM2NTMgY29tcGFyZXNpZyAgLTAuMCAgLTAgICAtPiAwCitkZGNtczY1NCBjb21wYXJlc2lnICAtMC4wICAtMC4wIC0+IDAKK2RkY21zNjU1IGNvbXBhcmVzaWcgIC0wLjAgICAwLjAgLT4gMAorCitkZGNtczY1NiBjb21wYXJlc2lnICAtMEUxICAgMC4wIC0+IDAKK2RkY21zNjU3IGNvbXBhcmVzaWcgIC0wRTIgICAwLjAgLT4gMAorZGRjbXM2NTggY29tcGFyZXNpZyAgIDBFMSAgIDAuMCAtPiAwCitkZGNtczY1OSBjb21wYXJlc2lnICAgMEUyICAgMC4wIC0+IDAKK2RkY21zNjYwIGNvbXBhcmVzaWcgIC0wRTEgICAwICAgLT4gMAorZGRjbXM2NjEgY29tcGFyZXNpZyAgLTBFMiAgIDAgICAtPiAwCitkZGNtczY2MiBjb21wYXJlc2lnICAgMEUxICAgMCAgIC0+IDAKK2RkY21zNjYzIGNvbXBhcmVzaWcgICAwRTIgICAwICAgLT4gMAorZGRjbXM2NjQgY29tcGFyZXNpZyAgLTBFMSAgLTBFMSAtPiAwCitkZGNtczY2NSBjb21wYXJlc2lnICAtMEUyICAtMEUxIC0+IDAKK2RkY21zNjY2IGNvbXBhcmVzaWcgICAwRTEgIC0wRTEgLT4gMAorZGRjbXM2NjcgY29tcGFyZXNpZyAgIDBFMiAgLTBFMSAtPiAwCitkZGNtczY2OCBjb21wYXJlc2lnICAtMEUxICAtMEUyIC0+IDAKK2RkY21zNjY5IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTIgLT4gMAorZGRjbXM2NzAgY29tcGFyZXNpZyAgIDBFMSAgLTBFMiAtPiAwCitkZGNtczY3MSBjb21wYXJlc2lnICAgMEUyICAtMEUyIC0+IDAKK2RkY21zNjcyIGNvbXBhcmVzaWcgIC0wRTEgICAwRTEgLT4gMAorZGRjbXM2NzMgY29tcGFyZXNpZyAgLTBFMiAgIDBFMSAtPiAwCitkZGNtczY3NCBjb21wYXJlc2lnICAgMEUxICAgMEUxIC0+IDAKK2RkY21zNjc1IGNvbXBhcmVzaWcgICAwRTIgICAwRTEgLT4gMAorZGRjbXM2NzYgY29tcGFyZXNpZyAgLTBFMSAgIDBFMiAtPiAwCitkZGNtczY3NyBjb21wYXJlc2lnICAtMEUyICAgMEUyIC0+IDAKK2RkY21zNjc4IGNvbXBhcmVzaWcgICAwRTEgICAwRTIgLT4gMAorZGRjbXM2NzkgY29tcGFyZXNpZyAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RkY21zNjgwIGNvbXBhcmVzaWcgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorZGRjbXM2ODEgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwCitkZGNtczY4MiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDAKK2RkY21zNjgzIGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMAorZGRjbXM2ODQgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwCitkZGNtczY4NSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDAKK2RkY21zNjg2IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMAorZGRjbXM2ODcgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwCitkZGNtczY4OCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDAKK2RkY21zNjg5IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMAorZGRjbXM2OTAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCitkZGNtczY5MSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDAKK2RkY21zNjkyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMAorZGRjbXM2OTMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwCitkZGNtczY5NCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDAKK2RkY21zNjk1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMAorZGRjbXM2OTYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwCitkZGNtczY5NyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDAKK2RkY21zNjk4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMAorZGRjbXM2OTkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwCisKKy0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdAorZGRjbXM3MDAgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NSAtPiAxCitkZGNtczcwMSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IDAKK2RkY21zNzAyIGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTcgLT4gLTEKK2RkY21zNzAzIGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDAyMzQ1Njc4OTAxMjM0NTYgLT4gMQorZGRjbXM3MDQgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwCitkZGNtczcwNSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAyMjM0NTY3ODkwMTIzNDU2IC0+IC0xCitkZGNtczcwNiBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMDM0NTY3ODkwMTIzNDU2IC0+IDEKK2RkY21zNzA3IGNvbXBhcmVzaWcgICAxMTM0NTY3ODkwMTIzNDU2IDExMzQ1Njc4OTAxMjM0NTYgLT4gMAorZGRjbXM3MDggY29tcGFyZXNpZyAgIDExMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQorCistLSBtaXNjZWxsYW5lb3VzCitkZGNtczcyMSBjb21wYXJlc2lnIDEyMzQ1Njc4MDAwIDEgLT4gMQorZGRjbXM3MjIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAwIC0+IC0xCitkZGNtczcyMyBjb21wYXJlc2lnIDEyMzQ1Njc4MDAgIDEgLT4gMQorZGRjbXM3MjQgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAgIC0+IC0xCitkZGNtczcyNSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAgIDEgLT4gMQorZGRjbXM3MjYgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAgIC0+IC0xCitkZGNtczcyNyBjb21wYXJlc2lnIDEyMzQ1Njc4OTEgIDEgLT4gMQorZGRjbXM3MjggY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTEgIC0+IC0xCitkZGNtczcyOSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAxIDEgLT4gMQorZGRjbXM3MzAgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAxIC0+IC0xCitkZGNtczczMSBjb21wYXJlc2lnIDEyMzQ1Njc4OTYgIDEgLT4gMQorZGRjbXM3MzIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTYgIC0+IC0xCisKKy0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uCitkZGNtczc0MCBjb21wYXJlc2lnICAxICAwLjk5OTk5OTkgIC0+IDEKK2RkY21zNzQxIGNvbXBhcmVzaWcgIDEgIDAuOTk5OTk5ICAgLT4gMQorZGRjbXM3NDIgY29tcGFyZXNpZyAgMSAgMC45OTk5OSAgICAtPiAxCitkZGNtczc0MyBjb21wYXJlc2lnICAxICAxLjAwMDAgICAgIC0+IDAKK2RkY21zNzQ0IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2RkY21zNzQ1IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAxICAgLT4gLTEKK2RkY21zNzQ2IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2RkY21zNzUwIGNvbXBhcmVzaWcgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2RkY21zNzUxIGNvbXBhcmVzaWcgIDAuOTk5OTk5ICAgMSAgLT4gLTEKK2RkY21zNzUyIGNvbXBhcmVzaWcgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2RkY21zNzUzIGNvbXBhcmVzaWcgIDEuMDAwMCAgICAgMSAgLT4gMAorZGRjbXM3NTQgY29tcGFyZXNpZyAgMS4wMDAwMSAgICAxICAtPiAxCitkZGNtczc1NSBjb21wYXJlc2lnICAxLjAwMDAwMSAgIDEgIC0+IDEKK2RkY21zNzU2IGNvbXBhcmVzaWcgIDEuMDAwMDAwMSAgMSAgLT4gMQorCistLSBTcGVjaWFscworZGRjbXM3ODAgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDEKK2RkY21zNzgxIGNvbXBhcmVzaWcgIEluZiAgLTEwMDAgIC0+ICAxCitkZGNtczc4MiBjb21wYXJlc2lnICBJbmYgIC0xICAgICAtPiAgMQorZGRjbXM3ODMgY29tcGFyZXNpZyAgSW5mICAtMCAgICAgLT4gIDEKK2RkY21zNzg0IGNvbXBhcmVzaWcgIEluZiAgIDAgICAgIC0+ICAxCitkZGNtczc4NSBjb21wYXJlc2lnICBJbmYgICAxICAgICAtPiAgMQorZGRjbXM3ODYgY29tcGFyZXNpZyAgSW5mICAgMTAwMCAgLT4gIDEKK2RkY21zNzg3IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwCitkZGNtczc4OCBjb21wYXJlc2lnIC0xMDAwICBJbmYgICAtPiAtMQorZGRjbXM3ODkgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTEKK2RkY21zNzkwIGNvbXBhcmVzaWcgLTEgICAgIEluZiAgIC0+IC0xCitkZGNtczc5MSBjb21wYXJlc2lnIC0wICAgICBJbmYgICAtPiAtMQorZGRjbXM3OTIgY29tcGFyZXNpZyAgMCAgICAgSW5mICAgLT4gLTEKK2RkY21zNzkzIGNvbXBhcmVzaWcgIDEgICAgIEluZiAgIC0+IC0xCitkZGNtczc5NCBjb21wYXJlc2lnICAxMDAwICBJbmYgICAtPiAtMQorZGRjbXM3OTUgY29tcGFyZXNpZyAgSW5mICAgSW5mICAgLT4gIDAKKworZGRjbXM4MDAgY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gIDAKK2RkY21zODAxIGNvbXBhcmVzaWcgLUluZiAgLTEwMDAgIC0+IC0xCitkZGNtczgwMiBjb21wYXJlc2lnIC1JbmYgIC0xICAgICAtPiAtMQorZGRjbXM4MDMgY29tcGFyZXNpZyAtSW5mICAtMCAgICAgLT4gLTEKK2RkY21zODA0IGNvbXBhcmVzaWcgLUluZiAgIDAgICAgIC0+IC0xCitkZGNtczgwNSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAtMQorZGRjbXM4MDYgY29tcGFyZXNpZyAtSW5mICAgMTAwMCAgLT4gLTEKK2RkY21zODA3IGNvbXBhcmVzaWcgLUluZiAgIEluZiAgIC0+IC0xCitkZGNtczgwOCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMAorZGRjbXM4MDkgY29tcGFyZXNpZyAtMTAwMCAtSW5mICAgLT4gIDEKK2RkY21zODEwIGNvbXBhcmVzaWcgLTEgICAgLUluZiAgIC0+ICAxCitkZGNtczgxMSBjb21wYXJlc2lnIC0wICAgIC1JbmYgICAtPiAgMQorZGRjbXM4MTIgY29tcGFyZXNpZyAgMCAgICAtSW5mICAgLT4gIDEKK2RkY21zODEzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAxCitkZGNtczgxNCBjb21wYXJlc2lnICAxMDAwIC1JbmYgICAtPiAgMQorZGRjbXM4MTUgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDEKKworZGRjbXM4MjEgY29tcGFyZXNpZyAgTmFOIC1JbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODIyIGNvbXBhcmVzaWcgIE5hTiAtMTAwMCAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyMyBjb21wYXJlc2lnICBOYU4gLTEgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjQgY29tcGFyZXNpZyAgTmFOIC0wICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODI1IGNvbXBhcmVzaWcgIE5hTiAgMCAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyNiBjb21wYXJlc2lnICBOYU4gIDEgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjcgY29tcGFyZXNpZyAgTmFOICAxMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODI4IGNvbXBhcmVzaWcgIE5hTiAgSW5mICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyOSBjb21wYXJlc2lnICBOYU4gIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzAgY29tcGFyZXNpZyAtSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODMxIGNvbXBhcmVzaWcgLTEwMDAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzMiBjb21wYXJlc2lnIC0xICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzMgY29tcGFyZXNpZyAtMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODM0IGNvbXBhcmVzaWcgIDAgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzNSBjb21wYXJlc2lnICAxICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzYgY29tcGFyZXNpZyAgMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODM3IGNvbXBhcmVzaWcgIEluZiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzOCBjb21wYXJlc2lnIC1OYU4gLU5hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzkgY29tcGFyZXNpZyArTmFOIC1OYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQwIGNvbXBhcmVzaWcgLU5hTiArTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RkY21zODQxIGNvbXBhcmVzaWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0MiBjb21wYXJlc2lnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDMgY29tcGFyZXNpZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQ0IGNvbXBhcmVzaWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0NSBjb21wYXJlc2lnICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDYgY29tcGFyZXNpZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQ3IGNvbXBhcmVzaWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0OCBjb21wYXJlc2lnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDkgY29tcGFyZXNpZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODUwIGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1MSBjb21wYXJlc2lnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTIgY29tcGFyZXNpZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODUzIGNvbXBhcmVzaWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1NCBjb21wYXJlc2lnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTUgY29tcGFyZXNpZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODU2IGNvbXBhcmVzaWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1NyBjb21wYXJlc2lnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTggY29tcGFyZXNpZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODU5IGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkY21zODYwIGNvbXBhcmVzaWcgIE5hTjkgLUluZiAgIC0+ICBOYU45ICAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODYxIGNvbXBhcmVzaWcgIE5hTjggIDk5OSAgIC0+ICBOYU44ICAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODYyIGNvbXBhcmVzaWcgIE5hTjc3IEluZiAgIC0+ICBOYU43NyAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODYzIGNvbXBhcmVzaWcgLU5hTjY3IE5hTjUgIC0+IC1OYU42NyAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODY0IGNvbXBhcmVzaWcgLUluZiAgLU5hTjQgIC0+IC1OYU40ICAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODY1IGNvbXBhcmVzaWcgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODY2IGNvbXBhcmVzaWcgIEluZiAgIE5hTjIgIC0+ICBOYU4yICAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODY3IGNvbXBhcmVzaWcgLU5hTjQxIC1OYU40MiAtPiAtTmFONDEgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODY4IGNvbXBhcmVzaWcgK05hTjQxIC1OYU40MiAtPiAgTmFONDEgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODY5IGNvbXBhcmVzaWcgLU5hTjQxICtOYU40MiAtPiAtTmFONDEgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODcwIGNvbXBhcmVzaWcgK05hTjQxICtOYU40MiAtPiAgTmFONDEgSW52YWxpZF9vcGVyYXRpb24KKworZGRjbXM4NzEgY29tcGFyZXNpZyAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3MiBjb21wYXJlc2lnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODczIGNvbXBhcmVzaWcgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzQgY29tcGFyZXNpZyAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3NSBjb21wYXJlc2lnICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODc2IGNvbXBhcmVzaWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzcgY29tcGFyZXNpZyAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3OCBjb21wYXJlc2lnICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODc5IGNvbXBhcmVzaWcgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSB3aWRlIHJhbmdlCitkZGNtczg4MCBjb21wYXJlc2lnICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzM4NCAtPiAtMQorZGRjbXM4ODEgY29tcGFyZXNpZyA5RSszODQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RkY21zODgyIGNvbXBhcmVzaWcgKzAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+ICAxCitkZGNtczg4MyBjb21wYXJlc2lnIDlFLTM4MyArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQorZGRjbXM4ODUgY29tcGFyZXNpZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTEKK2RkY21zODg2IGNvbXBhcmVzaWcgOUUrMzg0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkZGNtczg4NyBjb21wYXJlc2lnIC0wLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAtMQorZGRjbXM4ODggY29tcGFyZXNpZyA5RS0zODMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDEKKworLS0gc2lnbnMKK2RkY21zOTAxIGNvbXBhcmVzaWcgIDFlKzc3ICAxZSsxMSAtPiAgMQorZGRjbXM5MDIgY29tcGFyZXNpZyAgMWUrNzcgLTFlKzExIC0+ICAxCitkZGNtczkwMyBjb21wYXJlc2lnIC0xZSs3NyAgMWUrMTEgLT4gLTEKK2RkY21zOTA0IGNvbXBhcmVzaWcgLTFlKzc3IC0xZSsxMSAtPiAtMQorZGRjbXM5MDUgY29tcGFyZXNpZyAgMWUtNzcgIDFlLTExIC0+IC0xCitkZGNtczkwNiBjb21wYXJlc2lnICAxZS03NyAtMWUtMTEgLT4gIDEKK2RkY21zOTA3IGNvbXBhcmVzaWcgLTFlLTc3ICAxZS0xMSAtPiAtMQorZGRjbXM5MDggY29tcGFyZXNpZyAtMWUtNzcgLTFlLTExIC0+ICAxCisKKy0tIE51bGwgdGVzdHMKK2RkY21zOTkwIGNvbXBhcmVzaWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczk5MSBjb21wYXJlc2lnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWwuZGVjVGVzdAppbmRleCA3NmJlZWQ1Li4xMGM5ODRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWwuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWwuZGVjVGVzdApAQCAtMSw3MDYgKzEsNzA2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZENvbXBhcmVUb3RhbC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBjb21wYXJpc29uIHVzaW5nIHRvdGFsIG9yZGVyaW5nLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksDQotLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90DQotLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4NCi0tLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzDQotLS0gdGhhbiBjb21wYXJlLg0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kZGNvdDAwMSBjb21wYXJldG90YWwgIC0yICAtMiAgLT4gMA0KLWRkY290MDAyIGNvbXBhcmV0b3RhbCAgLTIgIC0xICAtPiAtMQ0KLWRkY290MDAzIGNvbXBhcmV0b3RhbCAgLTIgICAwICAtPiAtMQ0KLWRkY290MDA0IGNvbXBhcmV0b3RhbCAgLTIgICAxICAtPiAtMQ0KLWRkY290MDA1IGNvbXBhcmV0b3RhbCAgLTIgICAyICAtPiAtMQ0KLWRkY290MDA2IGNvbXBhcmV0b3RhbCAgLTEgIC0yICAtPiAxDQotZGRjb3QwMDcgY29tcGFyZXRvdGFsICAtMSAgLTEgIC0+IDANCi1kZGNvdDAwOCBjb21wYXJldG90YWwgIC0xICAgMCAgLT4gLTENCi1kZGNvdDAwOSBjb21wYXJldG90YWwgIC0xICAgMSAgLT4gLTENCi1kZGNvdDAxMCBjb21wYXJldG90YWwgIC0xICAgMiAgLT4gLTENCi1kZGNvdDAxMSBjb21wYXJldG90YWwgICAwICAtMiAgLT4gMQ0KLWRkY290MDEyIGNvbXBhcmV0b3RhbCAgIDAgIC0xICAtPiAxDQotZGRjb3QwMTMgY29tcGFyZXRvdGFsICAgMCAgIDAgIC0+IDANCi1kZGNvdDAxNCBjb21wYXJldG90YWwgICAwICAgMSAgLT4gLTENCi1kZGNvdDAxNSBjb21wYXJldG90YWwgICAwICAgMiAgLT4gLTENCi1kZGNvdDAxNiBjb21wYXJldG90YWwgICAxICAtMiAgLT4gMQ0KLWRkY290MDE3IGNvbXBhcmV0b3RhbCAgIDEgIC0xICAtPiAxDQotZGRjb3QwMTggY29tcGFyZXRvdGFsICAgMSAgIDAgIC0+IDENCi1kZGNvdDAxOSBjb21wYXJldG90YWwgICAxICAgMSAgLT4gMA0KLWRkY290MDIwIGNvbXBhcmV0b3RhbCAgIDEgICAyICAtPiAtMQ0KLWRkY290MDIxIGNvbXBhcmV0b3RhbCAgIDIgIC0yICAtPiAxDQotZGRjb3QwMjIgY29tcGFyZXRvdGFsICAgMiAgLTEgIC0+IDENCi1kZGNvdDAyMyBjb21wYXJldG90YWwgICAyICAgMCAgLT4gMQ0KLWRkY290MDI1IGNvbXBhcmV0b3RhbCAgIDIgICAxICAtPiAxDQotZGRjb3QwMjYgY29tcGFyZXRvdGFsICAgMiAgIDIgIC0+IDANCi0NCi1kZGNvdDAzMSBjb21wYXJldG90YWwgIC0yMCAgLTIwICAtPiAwDQotZGRjb3QwMzIgY29tcGFyZXRvdGFsICAtMjAgIC0xMCAgLT4gLTENCi1kZGNvdDAzMyBjb21wYXJldG90YWwgIC0yMCAgIDAwICAtPiAtMQ0KLWRkY290MDM0IGNvbXBhcmV0b3RhbCAgLTIwICAgMTAgIC0+IC0xDQotZGRjb3QwMzUgY29tcGFyZXRvdGFsICAtMjAgICAyMCAgLT4gLTENCi1kZGNvdDAzNiBjb21wYXJldG90YWwgIC0xMCAgLTIwICAtPiAxDQotZGRjb3QwMzcgY29tcGFyZXRvdGFsICAtMTAgIC0xMCAgLT4gMA0KLWRkY290MDM4IGNvbXBhcmV0b3RhbCAgLTEwICAgMDAgIC0+IC0xDQotZGRjb3QwMzkgY29tcGFyZXRvdGFsICAtMTAgICAxMCAgLT4gLTENCi1kZGNvdDA0MCBjb21wYXJldG90YWwgIC0xMCAgIDIwICAtPiAtMQ0KLWRkY290MDQxIGNvbXBhcmV0b3RhbCAgIDAwICAtMjAgIC0+IDENCi1kZGNvdDA0MiBjb21wYXJldG90YWwgICAwMCAgLTEwICAtPiAxDQotZGRjb3QwNDMgY29tcGFyZXRvdGFsICAgMDAgICAwMCAgLT4gMA0KLWRkY290MDQ0IGNvbXBhcmV0b3RhbCAgIDAwICAgMTAgIC0+IC0xDQotZGRjb3QwNDUgY29tcGFyZXRvdGFsICAgMDAgICAyMCAgLT4gLTENCi1kZGNvdDA0NiBjb21wYXJldG90YWwgICAxMCAgLTIwICAtPiAxDQotZGRjb3QwNDcgY29tcGFyZXRvdGFsICAgMTAgIC0xMCAgLT4gMQ0KLWRkY290MDQ4IGNvbXBhcmV0b3RhbCAgIDEwICAgMDAgIC0+IDENCi1kZGNvdDA0OSBjb21wYXJldG90YWwgICAxMCAgIDEwICAtPiAwDQotZGRjb3QwNTAgY29tcGFyZXRvdGFsICAgMTAgICAyMCAgLT4gLTENCi1kZGNvdDA1MSBjb21wYXJldG90YWwgICAyMCAgLTIwICAtPiAxDQotZGRjb3QwNTIgY29tcGFyZXRvdGFsICAgMjAgIC0xMCAgLT4gMQ0KLWRkY290MDUzIGNvbXBhcmV0b3RhbCAgIDIwICAgMDAgIC0+IDENCi1kZGNvdDA1NSBjb21wYXJldG90YWwgICAyMCAgIDEwICAtPiAxDQotZGRjb3QwNTYgY29tcGFyZXRvdGFsICAgMjAgICAyMCAgLT4gMA0KLQ0KLWRkY290MDYxIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTIuMCAgLT4gMA0KLWRkY290MDYyIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTEuMCAgLT4gLTENCi1kZGNvdDA2MyBjb21wYXJldG90YWwgIC0yLjAgICAwLjAgIC0+IC0xDQotZGRjb3QwNjQgY29tcGFyZXRvdGFsICAtMi4wICAgMS4wICAtPiAtMQ0KLWRkY290MDY1IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDIuMCAgLT4gLTENCi1kZGNvdDA2NiBjb21wYXJldG90YWwgIC0xLjAgIC0yLjAgIC0+IDENCi1kZGNvdDA2NyBjb21wYXJldG90YWwgIC0xLjAgIC0xLjAgIC0+IDANCi1kZGNvdDA2OCBjb21wYXJldG90YWwgIC0xLjAgICAwLjAgIC0+IC0xDQotZGRjb3QwNjkgY29tcGFyZXRvdGFsICAtMS4wICAgMS4wICAtPiAtMQ0KLWRkY290MDcwIGNvbXBhcmV0b3RhbCAgLTEuMCAgIDIuMCAgLT4gLTENCi1kZGNvdDA3MSBjb21wYXJldG90YWwgICAwLjAgIC0yLjAgIC0+IDENCi1kZGNvdDA3MiBjb21wYXJldG90YWwgICAwLjAgIC0xLjAgIC0+IDENCi1kZGNvdDA3MyBjb21wYXJldG90YWwgICAwLjAgICAwLjAgIC0+IDANCi1kZGNvdDA3NCBjb21wYXJldG90YWwgICAwLjAgICAxLjAgIC0+IC0xDQotZGRjb3QwNzUgY29tcGFyZXRvdGFsICAgMC4wICAgMi4wICAtPiAtMQ0KLWRkY290MDc2IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTIuMCAgLT4gMQ0KLWRkY290MDc3IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTEuMCAgLT4gMQ0KLWRkY290MDc4IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDAuMCAgLT4gMQ0KLWRkY290MDc5IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDEuMCAgLT4gMA0KLWRkY290MDgwIGNvbXBhcmV0b3RhbCAgIDEuMCAgIDIuMCAgLT4gLTENCi1kZGNvdDA4MSBjb21wYXJldG90YWwgICAyLjAgIC0yLjAgIC0+IDENCi1kZGNvdDA4MiBjb21wYXJldG90YWwgICAyLjAgIC0xLjAgIC0+IDENCi1kZGNvdDA4MyBjb21wYXJldG90YWwgICAyLjAgICAwLjAgIC0+IDENCi1kZGNvdDA4NSBjb21wYXJldG90YWwgICAyLjAgICAxLjAgIC0+IDENCi1kZGNvdDA4NiBjb21wYXJldG90YWwgICAyLjAgICAyLjAgIC0+IDANCi0NCi0tLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQNCi1kZGNvdDA5MCBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgIC0+IDANCi1kZGNvdDA5MSBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgIC0+IC0xDQotZGRjb3QwOTIgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAtPiAxDQotZGRjb3QwOTMgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAtPiAwDQotDQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzDQotLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbA0KLWRkY290MTAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3LjAgICAgLT4gMA0KLWRkY290MTAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3ICAgICAgLT4gLTENCi1kZGNvdDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDENCi1kZGNvdDEwMyBjb21wYXJldG90YWwgICA3RSswICAgNy4wICAgIC0+IDENCi1kZGNvdDEwNCBjb21wYXJldG90YWwgICA3MEUtMSAgNy4wICAgIC0+IDANCi1kZGNvdDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDANCi1kZGNvdDEwNiBjb21wYXJldG90YWwgICA3MEUtMSAgNyAgICAgIC0+IC0xDQotZGRjb3QxMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIDdFKzAgICAtPiAtMQ0KLWRkY290MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMA0KLWRkY290MTA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAwLjdFKzEgLT4gMA0KLWRkY290MTEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3MEUtMSAgLT4gMQ0KLQ0KLWRkY290MTIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3LjAgICAgLT4gMQ0KLWRkY290MTIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3ICAgICAgLT4gMQ0KLWRkY290MTIyIGNvbXBhcmV0b3RhbCAgIDggICAgICA3LjAgICAgLT4gMQ0KLWRkY290MTIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA3LjAgICAgLT4gMQ0KLWRkY290MTI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3LjAgICAgLT4gMQ0KLWRkY290MTI1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA3ICAgICAgLT4gMQ0KLWRkY290MTI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3ICAgICAgLT4gMQ0KLWRkY290MTI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3RSswICAgLT4gMQ0KLWRkY290MTI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3MEUtMSAgLT4gMQ0KLWRkY290MTI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjdFKzEgIC0+IDENCi1kZGNvdDEzMCBjb21wYXJldG90YWwgICA4ICAgICAgNzBFLTEgIC0+IDENCi0NCi1kZGNvdDE0MCBjb21wYXJldG90YWwgICA4LjAgICAgOS4wICAgIC0+IC0xDQotZGRjb3QxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQ0KLWRkY290MTQyIGNvbXBhcmV0b3RhbCAgIDggICAgICA5LjAgICAgLT4gLTENCi1kZGNvdDE0MyBjb21wYXJldG90YWwgICA4RSswICAgOS4wICAgIC0+IC0xDQotZGRjb3QxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQ0KLWRkY290MTQ1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA5ICAgICAgLT4gLTENCi1kZGNvdDE0NiBjb21wYXJldG90YWwgICA4MEUtMSAgOSAgICAgIC0+IC0xDQotZGRjb3QxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQ0KLWRkY290MTQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5MEUtMSAgLT4gLTENCi1kZGNvdDE0OSBjb21wYXJldG90YWwgICA4ICAgICAgMC45RSsxIC0+IC0xDQotZGRjb3QxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCi1kZGNvdDIwMCBjb21wYXJldG90YWwgIC03LjAgICAgNy4wICAgIC0+IC0xDQotZGRjb3QyMDEgY29tcGFyZXRvdGFsICAtNy4wICAgIDcgICAgICAtPiAtMQ0KLWRkY290MjAyIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3LjAgICAgLT4gLTENCi1kZGNvdDIwMyBjb21wYXJldG90YWwgIC03RSswICAgNy4wICAgIC0+IC0xDQotZGRjb3QyMDQgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcuMCAgICAtPiAtMQ0KLWRkY290MjA1IGNvbXBhcmV0b3RhbCAgLTAuN0UrMSA3ICAgICAgLT4gLTENCi1kZGNvdDIwNiBjb21wYXJldG90YWwgIC03MEUtMSAgNyAgICAgIC0+IC0xDQotZGRjb3QyMDcgY29tcGFyZXRvdGFsICAtNy4wICAgIDdFKzAgICAtPiAtMQ0KLWRkY290MjA4IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3MEUtMSAgLT4gLTENCi1kZGNvdDIwOSBjb21wYXJldG90YWwgIC03ICAgICAgMC43RSsxIC0+IC0xDQotZGRjb3QyMTAgY29tcGFyZXRvdGFsICAtNyAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRkY290MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTENCi1kZGNvdDIyMSBjb21wYXJldG90YWwgIC04LjAgICAgNyAgICAgIC0+IC0xDQotZGRjb3QyMjIgY29tcGFyZXRvdGFsICAtOCAgICAgIDcuMCAgICAtPiAtMQ0KLWRkY290MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTENCi1kZGNvdDIyNCBjb21wYXJldG90YWwgIC04MEUtMSAgNy4wICAgIC0+IC0xDQotZGRjb3QyMjUgY29tcGFyZXRvdGFsICAtMC44RSsxIDcgICAgICAtPiAtMQ0KLWRkY290MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTENCi1kZGNvdDIyNyBjb21wYXJldG90YWwgIC04LjAgICAgN0UrMCAgIC0+IC0xDQotZGRjb3QyMjggY29tcGFyZXRvdGFsICAtOC4wICAgIDcwRS0xICAtPiAtMQ0KLWRkY290MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTENCi1kZGNvdDIzMCBjb21wYXJldG90YWwgIC04ICAgICAgNzBFLTEgIC0+IC0xDQotDQotZGRjb3QyNDAgY29tcGFyZXRvdGFsICAtOC4wICAgIDkuMCAgICAtPiAtMQ0KLWRkY290MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTENCi1kZGNvdDI0MiBjb21wYXJldG90YWwgIC04ICAgICAgOS4wICAgIC0+IC0xDQotZGRjb3QyNDMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDkuMCAgICAtPiAtMQ0KLWRkY290MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTENCi1kZGNvdDI0NSBjb21wYXJldG90YWwgIC0wLjhFKzEgOSAgICAgIC0+IC0xDQotZGRjb3QyNDYgY29tcGFyZXRvdGFsICAtODBFLTEgIDkgICAgICAtPiAtMQ0KLWRkY290MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTENCi1kZGNvdDI0OCBjb21wYXJldG90YWwgIC04LjAgICAgOTBFLTEgIC0+IC0xDQotZGRjb3QyNDkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuOUUrMSAtPiAtMQ0KLWRkY290MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQotZGRjb3QzMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIC03LjAgICAgLT4gMQ0KLWRkY290MzAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNyAgICAgIC0+IDENCi1kZGNvdDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxDQotZGRjb3QzMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIC03LjAgICAgLT4gMQ0KLWRkY290MzA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNy4wICAgIC0+IDENCi1kZGNvdDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxDQotZGRjb3QzMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03ICAgICAgLT4gMQ0KLWRkY290MzA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtN0UrMCAgIC0+IDENCi1kZGNvdDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxDQotZGRjb3QzMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIC0uN0UrMSAgLT4gMQ0KLWRkY290MzEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNzBFLTEgIC0+IDENCi0NCi1kZGNvdDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxDQotZGRjb3QzMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIC03ICAgICAgLT4gMQ0KLWRkY290MzIyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNy4wICAgIC0+IDENCi1kZGNvdDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxDQotZGRjb3QzMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIC03LjAgICAgLT4gMQ0KLWRkY290MzI1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtNyAgICAgIC0+IDENCi1kZGNvdDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxDQotZGRjb3QzMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIC03RSswICAgLT4gMQ0KLWRkY290MzI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNzBFLTEgIC0+IDENCi1kZGNvdDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxDQotZGRjb3QzMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIC03MEUtMSAgLT4gMQ0KLQ0KLWRkY290MzQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOS4wICAgIC0+IDENCi1kZGNvdDM0MSBjb21wYXJldG90YWwgICA4LjAgICAgLTkgICAgICAtPiAxDQotZGRjb3QzNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIC05LjAgICAgLT4gMQ0KLWRkY290MzQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtOS4wICAgIC0+IDENCi1kZGNvdDM0NCBjb21wYXJldG90YWwgICA4MEUtMSAgLTkuMCAgICAtPiAxDQotZGRjb3QzNDUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC05ICAgICAgLT4gMQ0KLWRkY290MzQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOSAgICAgIC0+IDENCi1kZGNvdDM0NyBjb21wYXJldG90YWwgICA4LjAgICAgLTlFKzAgICAtPiAxDQotZGRjb3QzNDggY29tcGFyZXRvdGFsICAgOC4wICAgIC05MEUtMSAgLT4gMQ0KLWRkY290MzQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjlFKzEgIC0+IDENCi1kZGNvdDM1MCBjb21wYXJldG90YWwgICA4ICAgICAgLTkwRS0xICAtPiAxDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KLWRkY290NDAwIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcuMCAgICAtPiAwDQotZGRjb3Q0MDEgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNyAgICAgIC0+IDENCi1kZGNvdDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTENCi1kZGNvdDQwMyBjb21wYXJldG90YWwgICAtN0UrMCAgIC03LjAgICAgLT4gLTENCi1kZGNvdDQwNCBjb21wYXJldG90YWwgICAtNzBFLTEgIC03LjAgICAgLT4gMA0KLWRkY290NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwDQotZGRjb3Q0MDYgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNyAgICAgIC0+IDENCi1kZGNvdDQwNyBjb21wYXJldG90YWwgICAtNy4wICAgIC03RSswICAgLT4gMQ0KLWRkY290NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwDQotZGRjb3Q0MDkgY29tcGFyZXRvdGFsICAgLTcgICAgICAtLjdFKzEgIC0+IDANCi1kZGNvdDQxMCBjb21wYXJldG90YWwgICAtNyAgICAgIC03MEUtMSAgLT4gLTENCi0NCi1kZGNvdDQyMCBjb21wYXJldG90YWwgICAtOC4wICAgIC03LjAgICAgLT4gLTENCi1kZGNvdDQyMSBjb21wYXJldG90YWwgICAtOC4wICAgIC03ICAgICAgLT4gLTENCi1kZGNvdDQyMiBjb21wYXJldG90YWwgICAtOCAgICAgIC03LjAgICAgLT4gLTENCi1kZGNvdDQyMyBjb21wYXJldG90YWwgICAtOEUrMCAgIC03LjAgICAgLT4gLTENCi1kZGNvdDQyNCBjb21wYXJldG90YWwgICAtODBFLTEgIC03LjAgICAgLT4gLTENCi1kZGNvdDQyNSBjb21wYXJldG90YWwgICAtLjhFKzEgIC03ICAgICAgLT4gLTENCi1kZGNvdDQyNiBjb21wYXJldG90YWwgICAtODBFLTEgIC03ICAgICAgLT4gLTENCi1kZGNvdDQyNyBjb21wYXJldG90YWwgICAtOC4wICAgIC03RSswICAgLT4gLTENCi1kZGNvdDQyOCBjb21wYXJldG90YWwgICAtOC4wICAgIC03MEUtMSAgLT4gLTENCi1kZGNvdDQyOSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uN0UrMSAgLT4gLTENCi1kZGNvdDQzMCBjb21wYXJldG90YWwgICAtOCAgICAgIC03MEUtMSAgLT4gLTENCi0NCi1kZGNvdDQ0MCBjb21wYXJldG90YWwgICAtOC4wICAgIC05LjAgICAgLT4gMQ0KLWRkY290NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxDQotZGRjb3Q0NDIgY29tcGFyZXRvdGFsICAgLTggICAgICAtOS4wICAgIC0+IDENCi1kZGNvdDQ0MyBjb21wYXJldG90YWwgICAtOEUrMCAgIC05LjAgICAgLT4gMQ0KLWRkY290NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxDQotZGRjb3Q0NDUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtOSAgICAgIC0+IDENCi1kZGNvdDQ0NiBjb21wYXJldG90YWwgICAtODBFLTEgIC05ICAgICAgLT4gMQ0KLWRkY290NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxDQotZGRjb3Q0NDggY29tcGFyZXRvdGFsICAgLTguMCAgICAtOTBFLTEgIC0+IDENCi1kZGNvdDQ0OSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uOUUrMSAgLT4gMQ0KLWRkY290NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxDQotDQotDQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQotZGRjb3Q0NzMgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWRkY290NDc0IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KLWRkY290NDc1IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQotZGRjb3Q0NzYgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KLWRkY290NDc3IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWRkY290NDc4IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xDQotZGRjb3Q0NzkgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWRkY290NDgwIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KLWRkY290NDgxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQotZGRjb3Q0ODIgY29tcGFyZXRvdGFsIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KLWRkY290NDgzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwDQotZGRjb3Q0ODcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAxDQotZGRjb3Q0ODggY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDENCi1kZGNvdDQ4OSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAxDQotZGRjb3Q0OTAgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAxDQotZGRjb3Q0OTEgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDENCi1kZGNvdDQ5MiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAxDQotZGRjb3Q0OTMgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAxDQotZGRjb3Q0OTQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDENCi1kZGNvdDQ5NSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAxDQotZGRjb3Q0OTYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAxDQotZGRjb3Q0OTcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDANCi0NCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQotZGRjb3Q0OTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE3ICAgIC0+IDENCi1kZGNvdDQ5OSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTYgICAgLT4gMQ0KLWRkY290NTAwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNSAgICAtPiAxDQotZGRjb3Q1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDENCi1kZGNvdDUwMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTMgICAgLT4gMQ0KLWRkY290NTAzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMiAgICAtPiAxDQotZGRjb3Q1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDENCi1kZGNvdDUwNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTAgICAgLT4gMQ0KLWRkY290NTA2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS05ICAgICAtPiAxDQotZGRjb3Q1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDENCi1kZGNvdDUwOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNyAgICAgLT4gMQ0KLWRkY290NTA5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS02ICAgICAtPiAxDQotZGRjb3Q1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDENCi1kZGNvdDUxMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNCAgICAgLT4gMQ0KLWRkY290NTEyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0zICAgICAtPiAxDQotZGRjb3Q1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDENCi1kZGNvdDUxNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMSAgICAgLT4gMQ0KLWRkY290NTE1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0wICAgICAtPiAwDQotZGRjb3Q1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xDQotZGRjb3Q1MTcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzIgICAgIC0+IC0xDQotZGRjb3Q1MTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzMgICAgIC0+IC0xDQotZGRjb3Q1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xDQotZGRjb3Q1MjEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzUgICAgIC0+IC0xDQotZGRjb3Q1MjIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzYgICAgIC0+IC0xDQotZGRjb3Q1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xDQotZGRjb3Q1MjQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzggICAgIC0+IC0xDQotZGRjb3Q1MjUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzkgICAgIC0+IC0xDQotZGRjb3Q1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xDQotZGRjb3Q1MjcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzExICAgIC0+IC0xDQotZGRjb3Q1MjggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEyICAgIC0+IC0xDQotZGRjb3Q1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xDQotZGRjb3Q1MzAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xDQotZGRjb3Q1MzEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xDQotZGRjb3Q1MzIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE2ICAgIC0+IC0xDQotZGRjb3Q1MzMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE3ICAgIC0+IC0xDQotLS0gTFIgc3dhcA0KLWRkY290NTM4IGNvbXBhcmV0b3RhbCAgICAxRS0xNyAgMSAgICAgICAtPiAtMQ0KLWRkY290NTM5IGNvbXBhcmV0b3RhbCAgICAxRS0xNiAgMSAgICAgICAtPiAtMQ0KLWRkY290NTQwIGNvbXBhcmV0b3RhbCAgICAxRS0xNSAgMSAgICAgICAtPiAtMQ0KLWRkY290NTQxIGNvbXBhcmV0b3RhbCAgICAxRS0xNCAgMSAgICAgICAtPiAtMQ0KLWRkY290NTQyIGNvbXBhcmV0b3RhbCAgICAxRS0xMyAgMSAgICAgICAtPiAtMQ0KLWRkY290NTQzIGNvbXBhcmV0b3RhbCAgICAxRS0xMiAgMSAgICAgICAtPiAtMQ0KLWRkY290NTQ0IGNvbXBhcmV0b3RhbCAgICAxRS0xMSAgMSAgICAgICAtPiAtMQ0KLWRkY290NTQ1IGNvbXBhcmV0b3RhbCAgICAxRS0xMCAgMSAgICAgICAtPiAtMQ0KLWRkY290NTQ2IGNvbXBhcmV0b3RhbCAgICAxRS05ICAgMSAgICAgICAtPiAtMQ0KLWRkY290NTQ3IGNvbXBhcmV0b3RhbCAgICAxRS04ICAgMSAgICAgICAtPiAtMQ0KLWRkY290NTQ4IGNvbXBhcmV0b3RhbCAgICAxRS03ICAgMSAgICAgICAtPiAtMQ0KLWRkY290NTQ5IGNvbXBhcmV0b3RhbCAgICAxRS02ICAgMSAgICAgICAtPiAtMQ0KLWRkY290NTUwIGNvbXBhcmV0b3RhbCAgICAxRS01ICAgMSAgICAgICAtPiAtMQ0KLWRkY290NTUxIGNvbXBhcmV0b3RhbCAgICAxRS00ICAgMSAgICAgICAtPiAtMQ0KLWRkY290NTUyIGNvbXBhcmV0b3RhbCAgICAxRS0zICAgMSAgICAgICAtPiAtMQ0KLWRkY290NTUzIGNvbXBhcmV0b3RhbCAgICAxRS0yICAgMSAgICAgICAtPiAtMQ0KLWRkY290NTU0IGNvbXBhcmV0b3RhbCAgICAxRS0xICAgMSAgICAgICAtPiAtMQ0KLWRkY290NTU1IGNvbXBhcmV0b3RhbCAgICAxRS0wICAgMSAgICAgICAtPiAgMA0KLWRkY290NTU2IGNvbXBhcmV0b3RhbCAgICAxRSsxICAgMSAgICAgICAtPiAgMQ0KLWRkY290NTU3IGNvbXBhcmV0b3RhbCAgICAxRSsyICAgMSAgICAgICAtPiAgMQ0KLWRkY290NTU4IGNvbXBhcmV0b3RhbCAgICAxRSszICAgMSAgICAgICAtPiAgMQ0KLWRkY290NTU5IGNvbXBhcmV0b3RhbCAgICAxRSs0ICAgMSAgICAgICAtPiAgMQ0KLWRkY290NTYxIGNvbXBhcmV0b3RhbCAgICAxRSs1ICAgMSAgICAgICAtPiAgMQ0KLWRkY290NTYyIGNvbXBhcmV0b3RhbCAgICAxRSs2ICAgMSAgICAgICAtPiAgMQ0KLWRkY290NTYzIGNvbXBhcmV0b3RhbCAgICAxRSs3ICAgMSAgICAgICAtPiAgMQ0KLWRkY290NTY0IGNvbXBhcmV0b3RhbCAgICAxRSs4ICAgMSAgICAgICAtPiAgMQ0KLWRkY290NTY1IGNvbXBhcmV0b3RhbCAgICAxRSs5ICAgMSAgICAgICAtPiAgMQ0KLWRkY290NTY2IGNvbXBhcmV0b3RhbCAgICAxRSsxMCAgMSAgICAgICAtPiAgMQ0KLWRkY290NTY3IGNvbXBhcmV0b3RhbCAgICAxRSsxMSAgMSAgICAgICAtPiAgMQ0KLWRkY290NTY4IGNvbXBhcmV0b3RhbCAgICAxRSsxMiAgMSAgICAgICAtPiAgMQ0KLWRkY290NTY5IGNvbXBhcmV0b3RhbCAgICAxRSsxMyAgMSAgICAgICAtPiAgMQ0KLWRkY290NTcwIGNvbXBhcmV0b3RhbCAgICAxRSsxNCAgMSAgICAgICAtPiAgMQ0KLWRkY290NTcxIGNvbXBhcmV0b3RhbCAgICAxRSsxNSAgMSAgICAgICAtPiAgMQ0KLWRkY290NTcyIGNvbXBhcmV0b3RhbCAgICAxRSsxNiAgMSAgICAgICAtPiAgMQ0KLWRkY290NTczIGNvbXBhcmV0b3RhbCAgICAxRSsxNyAgMSAgICAgICAtPiAgMQ0KLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KLWRkY290NTc4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE3ICAgIC0+IDENCi1kZGNvdDU3OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNiAgICAtPiAxDQotZGRjb3Q1ODAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQ0KLWRkY290NTgxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDENCi1kZGNvdDU4MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxDQotZGRjb3Q1ODMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQ0KLWRkY290NTg0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDENCi1kZGNvdDU4NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxDQotZGRjb3Q1ODYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQ0KLWRkY290NTg3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDENCi1kZGNvdDU4OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxDQotZGRjb3Q1ODkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTENCi1kZGNvdDU5MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQ0KLWRkY290NTkxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xDQotZGRjb3Q1OTIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTENCi1kZGNvdDU5MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQ0KLWRkY290NTk0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xDQotZGRjb3Q1OTUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTENCi1kZGNvdDU5NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQ0KLWRkY290NTk3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xDQotZGRjb3Q1OTggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTENCi1kZGNvdDU5OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQ0KLQ0KLS0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzDQotZGRjb3Q2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb3Q2MDEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb3Q2MDIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb3Q2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb3Q2MDQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb3Q2MDUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb3Q2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb3Q2MDcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb3Q2MDggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb3Q2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xDQotZGRjb3Q2MTAgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxDQotZGRjb3Q2MTEgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxDQotZGRjb3Q2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxDQotZGRjb3Q2MTMgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxDQotZGRjb3Q2MTQgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxDQotZGRjb3Q2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxDQotZGRjb3Q2MTYgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxDQotZGRjb3Q2MTcgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxDQotZGRjb3Q2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxDQotZGRjb3Q2MTkgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxDQotZGRjb3Q2MjAgY29tcGFyZXRvdGFsICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb3Q2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb3Q2MjIgY29tcGFyZXRvdGFsICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb3Q2MjMgY29tcGFyZXRvdGFsICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb3Q2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb3Q2MjUgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb3Q2MjYgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb3Q2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb3Q2MjggY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb3Q2MjkgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxDQotZGRjb3Q2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xDQotZGRjb3Q2MzEgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xDQotZGRjb3Q2MzIgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xDQotZGRjb3Q2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xDQotZGRjb3Q2MzQgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xDQotZGRjb3Q2MzUgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xDQotZGRjb3Q2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xDQotZGRjb3Q2MzcgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xDQotZGRjb3Q2MzggY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xDQotZGRjb3Q2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kZGNvdDY0MCBjb21wYXJldG90YWwgICAwICAgICAwICAgLT4gMA0KLWRkY290NjQxIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAgICAtPiAxDQotZGRjb3Q2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDENCi1kZGNvdDY0MyBjb21wYXJldG90YWwgICAwICAgICAwLjAgLT4gMQ0KLWRkY290NjQ0IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAgICAtPiAtMQ0KLWRkY290NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwDQotZGRjb3Q2NDYgY29tcGFyZXRvdGFsICAtMCAgICAtMC4wIC0+IC0xDQotZGRjb3Q2NDcgY29tcGFyZXRvdGFsICAtMCAgICAgMC4wIC0+IC0xDQotZGRjb3Q2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xDQotZGRjb3Q2NDkgY29tcGFyZXRvdGFsICAgMC4wICAtMCAgIC0+IDENCi1kZGNvdDY1MCBjb21wYXJldG90YWwgICAwLjAgIC0wLjAgLT4gMQ0KLWRkY290NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwDQotZGRjb3Q2NTIgY29tcGFyZXRvdGFsICAtMC4wICAgMCAgIC0+IC0xDQotZGRjb3Q2NTMgY29tcGFyZXRvdGFsICAtMC4wICAtMCAgIC0+IDENCi1kZGNvdDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMA0KLWRkY290NjU1IGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAuMCAtPiAtMQ0KLQ0KLWRkY290NjU2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAuMCAtPiAtMQ0KLWRkY290NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQ0KLWRkY290NjU4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAuMCAtPiAxDQotZGRjb3Q2NTkgY29tcGFyZXRvdGFsICAgMEUyICAgMC4wIC0+IDENCi1kZGNvdDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTENCi1kZGNvdDY2MSBjb21wYXJldG90YWwgIC0wRTIgICAwICAgLT4gLTENCi1kZGNvdDY2MiBjb21wYXJldG90YWwgICAwRTEgICAwICAgLT4gMQ0KLWRkY290NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxDQotZGRjb3Q2NjQgY29tcGFyZXRvdGFsICAtMEUxICAtMEUxIC0+IDANCi1kZGNvdDY2NSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTEgLT4gLTENCi1kZGNvdDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQ0KLWRkY290NjY3IGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMSAtPiAxDQotZGRjb3Q2NjggY29tcGFyZXRvdGFsICAtMEUxICAtMEUyIC0+IDENCi1kZGNvdDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMA0KLWRkY290NjcwIGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMiAtPiAxDQotZGRjb3Q2NzEgY29tcGFyZXRvdGFsICAgMEUyICAtMEUyIC0+IDENCi1kZGNvdDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTENCi1kZGNvdDY3MyBjb21wYXJldG90YWwgIC0wRTIgICAwRTEgLT4gLTENCi1kZGNvdDY3NCBjb21wYXJldG90YWwgICAwRTEgICAwRTEgLT4gMA0KLWRkY290Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxDQotZGRjb3Q2NzYgY29tcGFyZXRvdGFsICAtMEUxICAgMEUyIC0+IC0xDQotZGRjb3Q2NzcgY29tcGFyZXRvdGFsICAtMEUyICAgMEUyIC0+IC0xDQotZGRjb3Q2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xDQotZGRjb3Q2NzkgY29tcGFyZXRvdGFsICAgMEUyICAgMEUyIC0+IDANCi0NCi0tLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQotZGRjb3Q2ODAgY29tcGFyZXRvdGFsICAgMTIgICAgMTIgICAgICAgICAgIC0+IDANCi1kZGNvdDY4MSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wICAgICAgICAgLT4gMQ0KLWRkY290NjgyIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwICAgICAgICAtPiAxDQotZGRjb3Q2ODMgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDENCi1kZGNvdDY4NCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMQ0KLWRkY290Njg1IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAxDQotZGRjb3Q2ODYgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDENCi1kZGNvdDY4NyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMQ0KLWRkY290Njg4IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAxDQotZGRjb3Q2ODkgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDENCi1kZGNvdDY5MCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgICAgMTIgLT4gMA0KLWRkY290NjkxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgICAxMiAtPiAtMQ0KLWRkY290NjkyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgICAxMiAtPiAtMQ0KLWRkY290NjkzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAtMQ0KLWRkY290Njk0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAtMQ0KLWRkY290Njk1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAtMQ0KLWRkY290Njk2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAtMQ0KLWRkY290Njk3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAtMQ0KLWRkY290Njk4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAtMQ0KLWRkY290Njk5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAtMQ0KLQ0KLS0tIG9sZCBsb25nIG9wZXJhbmQgY2hlY2tzDQotZGRjb3Q3MDEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAwICAxIC0+ICAxDQotZGRjb3Q3MDIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgIC0+IC0xDQotZGRjb3Q3MDMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgICAxIC0+ICAxDQotZGRjb3Q3MDQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgIC0+IC0xDQotZGRjb3Q3MDUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgICAxIC0+ICAxDQotZGRjb3Q3MDYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgIC0+IC0xDQotZGRjb3Q3MDcgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTEgICAxIC0+ICAxDQotZGRjb3Q3MDggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgIC0+IC0xDQotZGRjb3Q3MDkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxICAxIC0+ICAxDQotZGRjb3Q3MTAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgIC0+IC0xDQotZGRjb3Q3MTEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgICAxIC0+ICAxDQotZGRjb3Q3MTIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgIC0+IC0xDQotZGRjb3Q3MTMgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkxICAxIC0+IC0xDQotZGRjb3Q3MTQgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTEgIC0+ICAxDQotZGRjb3Q3MTUgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkwMSAxIC0+IC0xDQotZGRjb3Q3MTYgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTAxIC0+ICAxDQotZGRjb3Q3MTcgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODk2ICAxIC0+IC0xDQotZGRjb3Q3MTggY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTYgIC0+ICAxDQotDQotLS0gb2xkIHJlc2lkdWUgY2FzZXMNCi1kZGNvdDc0MCBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5OSAgLT4gMQ0KLWRkY290NzQxIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTkgICAtPiAxDQotZGRjb3Q3NDIgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5ICAgIC0+IDENCi1kZGNvdDc0MyBjb21wYXJldG90YWwgIDEgIDEuMDAwMCAgICAgLT4gMQ0KLWRkY290NzQ0IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMSAgICAtPiAtMQ0KLWRkY290NzQ1IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDEgICAtPiAtMQ0KLWRkY290NzQ2IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDAxICAtPiAtMQ0KLWRkY290NzUwIGNvbXBhcmV0b3RhbCAgMC45OTk5OTk5ICAxICAtPiAtMQ0KLWRkY290NzUxIGNvbXBhcmV0b3RhbCAgMC45OTk5OTkgICAxICAtPiAtMQ0KLWRkY290NzUyIGNvbXBhcmV0b3RhbCAgMC45OTk5OSAgICAxICAtPiAtMQ0KLWRkY290NzUzIGNvbXBhcmV0b3RhbCAgMS4wMDAwICAgICAxICAtPiAtMQ0KLWRkY290NzU0IGNvbXBhcmV0b3RhbCAgMS4wMDAwMSAgICAxICAtPiAxDQotZGRjb3Q3NTUgY29tcGFyZXRvdGFsICAxLjAwMDAwMSAgIDEgIC0+IDENCi1kZGNvdDc1NiBjb21wYXJldG90YWwgIDEuMDAwMDAwMSAgMSAgLT4gMQ0KLQ0KLS0tIFNwZWNpYWxzDQotZGRjb3Q3ODAgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQ0KLWRkY290NzgxIGNvbXBhcmV0b3RhbCAgSW5mICAtMTAwMCAgLT4gIDENCi1kZGNvdDc4MiBjb21wYXJldG90YWwgIEluZiAgLTEgICAgIC0+ICAxDQotZGRjb3Q3ODMgY29tcGFyZXRvdGFsICBJbmYgIC0wICAgICAtPiAgMQ0KLWRkY290Nzg0IGNvbXBhcmV0b3RhbCAgSW5mICAgMCAgICAgLT4gIDENCi1kZGNvdDc4NSBjb21wYXJldG90YWwgIEluZiAgIDEgICAgIC0+ICAxDQotZGRjb3Q3ODYgY29tcGFyZXRvdGFsICBJbmYgICAxMDAwICAtPiAgMQ0KLWRkY290Nzg3IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDANCi1kZGNvdDc4OCBjb21wYXJldG90YWwgLTEwMDAgIEluZiAgIC0+IC0xDQotZGRjb3Q3ODkgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQ0KLWRkY290NzkwIGNvbXBhcmV0b3RhbCAtMSAgICAgSW5mICAgLT4gLTENCi1kZGNvdDc5MSBjb21wYXJldG90YWwgLTAgICAgIEluZiAgIC0+IC0xDQotZGRjb3Q3OTIgY29tcGFyZXRvdGFsICAwICAgICBJbmYgICAtPiAtMQ0KLWRkY290NzkzIGNvbXBhcmV0b3RhbCAgMSAgICAgSW5mICAgLT4gLTENCi1kZGNvdDc5NCBjb21wYXJldG90YWwgIDEwMDAgIEluZiAgIC0+IC0xDQotZGRjb3Q3OTUgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMA0KLQ0KLWRkY290ODAwIGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDANCi1kZGNvdDgwMSBjb21wYXJldG90YWwgLUluZiAgLTEwMDAgIC0+IC0xDQotZGRjb3Q4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQ0KLWRkY290ODAzIGNvbXBhcmV0b3RhbCAtSW5mICAtMCAgICAgLT4gLTENCi1kZGNvdDgwNCBjb21wYXJldG90YWwgLUluZiAgIDAgICAgIC0+IC0xDQotZGRjb3Q4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQ0KLWRkY290ODA2IGNvbXBhcmV0b3RhbCAtSW5mICAgMTAwMCAgLT4gLTENCi1kZGNvdDgwNyBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xDQotZGRjb3Q4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMA0KLWRkY290ODA5IGNvbXBhcmV0b3RhbCAtMTAwMCAtSW5mICAgLT4gIDENCi1kZGNvdDgxMCBjb21wYXJldG90YWwgLTEgICAgLUluZiAgIC0+ICAxDQotZGRjb3Q4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQ0KLWRkY290ODEyIGNvbXBhcmV0b3RhbCAgMCAgICAtSW5mICAgLT4gIDENCi1kZGNvdDgxMyBjb21wYXJldG90YWwgIDEgICAgLUluZiAgIC0+ICAxDQotZGRjb3Q4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQ0KLWRkY290ODE1IGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDENCi0NCi1kZGNvdDgyMSBjb21wYXJldG90YWwgIE5hTiAtSW5mICAgIC0+ICAxDQotZGRjb3Q4MjIgY29tcGFyZXRvdGFsICBOYU4gLTEwMDAgICAtPiAgMQ0KLWRkY290ODIzIGNvbXBhcmV0b3RhbCAgTmFOIC0xICAgICAgLT4gIDENCi1kZGNvdDgyNCBjb21wYXJldG90YWwgIE5hTiAtMCAgICAgIC0+ICAxDQotZGRjb3Q4MjUgY29tcGFyZXRvdGFsICBOYU4gIDAgICAgICAtPiAgMQ0KLWRkY290ODI2IGNvbXBhcmV0b3RhbCAgTmFOICAxICAgICAgLT4gIDENCi1kZGNvdDgyNyBjb21wYXJldG90YWwgIE5hTiAgMTAwMCAgIC0+ICAxDQotZGRjb3Q4MjggY29tcGFyZXRvdGFsICBOYU4gIEluZiAgICAtPiAgMQ0KLWRkY290ODI5IGNvbXBhcmV0b3RhbCAgTmFOICBOYU4gICAgLT4gIDANCi1kZGNvdDgzMCBjb21wYXJldG90YWwgLUluZiAgTmFOICAgIC0+ICAtMQ0KLWRkY290ODMxIGNvbXBhcmV0b3RhbCAtMTAwMCBOYU4gICAgLT4gIC0xDQotZGRjb3Q4MzIgY29tcGFyZXRvdGFsIC0xICAgIE5hTiAgICAtPiAgLTENCi1kZGNvdDgzMyBjb21wYXJldG90YWwgLTAgICAgTmFOICAgIC0+ICAtMQ0KLWRkY290ODM0IGNvbXBhcmV0b3RhbCAgMCAgICBOYU4gICAgLT4gIC0xDQotZGRjb3Q4MzUgY29tcGFyZXRvdGFsICAxICAgIE5hTiAgICAtPiAgLTENCi1kZGNvdDgzNiBjb21wYXJldG90YWwgIDEwMDAgTmFOICAgIC0+ICAtMQ0KLWRkY290ODM3IGNvbXBhcmV0b3RhbCAgSW5mICBOYU4gICAgLT4gIC0xDQotZGRjb3Q4MzggY29tcGFyZXRvdGFsIC1OYU4gLU5hTiAgICAtPiAgMA0KLWRkY290ODM5IGNvbXBhcmV0b3RhbCArTmFOIC1OYU4gICAgLT4gIDENCi1kZGNvdDg0MCBjb21wYXJldG90YWwgLU5hTiArTmFOICAgIC0+ICAtMQ0KLQ0KLWRkY290ODQxIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgLT4gIDENCi1kZGNvdDg0MiBjb21wYXJldG90YWwgIHNOYU4gLU5hTiAgIC0+ICAxDQotZGRjb3Q4NDMgY29tcGFyZXRvdGFsICBzTmFOIC1JbmYgICAtPiAgMQ0KLWRkY290ODQ0IGNvbXBhcmV0b3RhbCAgc05hTiAtMTAwMCAgLT4gIDENCi1kZGNvdDg0NSBjb21wYXJldG90YWwgIHNOYU4gLTEgICAgIC0+ICAxDQotZGRjb3Q4NDYgY29tcGFyZXRvdGFsICBzTmFOIC0wICAgICAtPiAgMQ0KLWRkY290ODQ3IGNvbXBhcmV0b3RhbCAgc05hTiAgMCAgICAgLT4gIDENCi1kZGNvdDg0OCBjb21wYXJldG90YWwgIHNOYU4gIDEgICAgIC0+ICAxDQotZGRjb3Q4NDkgY29tcGFyZXRvdGFsICBzTmFOICAxMDAwICAtPiAgMQ0KLWRkY290ODUwIGNvbXBhcmV0b3RhbCAgc05hTiAgTmFOICAgLT4gIC0xDQotZGRjb3Q4NTEgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMA0KLQ0KLWRkY290ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xDQotZGRjb3Q4NTMgY29tcGFyZXRvdGFsIC1OYU4gIHNOYU4gICAtPiAgLTENCi1kZGNvdDg1NCBjb21wYXJldG90YWwgLUluZiAgc05hTiAgIC0+ICAtMQ0KLWRkY290ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xDQotZGRjb3Q4NTYgY29tcGFyZXRvdGFsIC0xICAgIHNOYU4gICAtPiAgLTENCi1kZGNvdDg1NyBjb21wYXJldG90YWwgLTAgICAgc05hTiAgIC0+ICAtMQ0KLWRkY290ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xDQotZGRjb3Q4NTkgY29tcGFyZXRvdGFsICAxICAgIHNOYU4gICAtPiAgLTENCi1kZGNvdDg2MCBjb21wYXJldG90YWwgIDEwMDAgc05hTiAgIC0+ICAtMQ0KLWRkY290ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xDQotZGRjb3Q4NjIgY29tcGFyZXRvdGFsICBOYU4gIHNOYU4gICAtPiAgMQ0KLWRkY290ODYzIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDANCi0NCi1kZGNvdDg3MSBjb21wYXJldG90YWwgIC1zTmFOIC1zTmFOICAtPiAgMA0KLWRkY290ODcyIGNvbXBhcmV0b3RhbCAgLXNOYU4gLU5hTiAgIC0+ICAxDQotZGRjb3Q4NzMgY29tcGFyZXRvdGFsICAtc05hTiAtSW5mICAgLT4gIC0xDQotZGRjb3Q4NzQgY29tcGFyZXRvdGFsICAtc05hTiAtMTAwMCAgLT4gIC0xDQotZGRjb3Q4NzUgY29tcGFyZXRvdGFsICAtc05hTiAtMSAgICAgLT4gIC0xDQotZGRjb3Q4NzYgY29tcGFyZXRvdGFsICAtc05hTiAtMCAgICAgLT4gIC0xDQotZGRjb3Q4NzcgY29tcGFyZXRvdGFsICAtc05hTiAgMCAgICAgLT4gIC0xDQotZGRjb3Q4NzggY29tcGFyZXRvdGFsICAtc05hTiAgMSAgICAgLT4gIC0xDQotZGRjb3Q4NzkgY29tcGFyZXRvdGFsICAtc05hTiAgMTAwMCAgLT4gIC0xDQotZGRjb3Q4ODAgY29tcGFyZXRvdGFsICAtc05hTiAgTmFOICAgLT4gIC0xDQotZGRjb3Q4ODEgY29tcGFyZXRvdGFsICAtc05hTiBzTmFOICAgLT4gIC0xDQotDQotZGRjb3Q4ODIgY29tcGFyZXRvdGFsIC1zTmFOIC1zTmFOICAgLT4gIDANCi1kZGNvdDg4MyBjb21wYXJldG90YWwgLU5hTiAgLXNOYU4gICAtPiAgLTENCi1kZGNvdDg4NCBjb21wYXJldG90YWwgLUluZiAgLXNOYU4gICAtPiAgMQ0KLWRkY290ODg1IGNvbXBhcmV0b3RhbCAtMTAwMCAtc05hTiAgIC0+ICAxDQotZGRjb3Q4ODYgY29tcGFyZXRvdGFsIC0xICAgIC1zTmFOICAgLT4gIDENCi1kZGNvdDg4NyBjb21wYXJldG90YWwgLTAgICAgLXNOYU4gICAtPiAgMQ0KLWRkY290ODg4IGNvbXBhcmV0b3RhbCAgMCAgICAtc05hTiAgIC0+ICAxDQotZGRjb3Q4ODkgY29tcGFyZXRvdGFsICAxICAgIC1zTmFOICAgLT4gIDENCi1kZGNvdDg5MCBjb21wYXJldG90YWwgIDEwMDAgLXNOYU4gICAtPiAgMQ0KLWRkY290ODkxIGNvbXBhcmV0b3RhbCAgSW5mICAtc05hTiAgIC0+ICAxDQotZGRjb3Q4OTIgY29tcGFyZXRvdGFsICBOYU4gIC1zTmFOICAgLT4gIDENCi1kZGNvdDg5MyBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gICAtPiAgMQ0KLQ0KLS0tIE5hTnMgd2l0aCBwYXlsb2FkDQotZGRjb3Q5NjAgY29tcGFyZXRvdGFsICBOYU45IC1JbmYgICAtPiAgMQ0KLWRkY290OTYxIGNvbXBhcmV0b3RhbCAgTmFOOCAgOTk5ICAgLT4gIDENCi1kZGNvdDk2MiBjb21wYXJldG90YWwgIE5hTjc3IEluZiAgIC0+ICAxDQotZGRjb3Q5NjMgY29tcGFyZXRvdGFsIC1OYU42NyBOYU41ICAtPiAgLTENCi1kZGNvdDk2NCBjb21wYXJldG90YWwgLUluZiAgLU5hTjQgIC0+ICAxDQotZGRjb3Q5NjUgY29tcGFyZXRvdGFsIC05OTkgIC1OYU4zMyAtPiAgMQ0KLWRkY290OTY2IGNvbXBhcmV0b3RhbCAgSW5mICAgTmFOMiAgLT4gIC0xDQotDQotZGRjb3Q5NzAgY29tcGFyZXRvdGFsIC1OYU40MSAtTmFONDIgLT4gMQ0KLWRkY290OTcxIGNvbXBhcmV0b3RhbCArTmFONDEgLU5hTjQyIC0+IDENCi1kZGNvdDk3MiBjb21wYXJldG90YWwgLU5hTjQxICtOYU40MiAtPiAtMQ0KLWRkY290OTczIGNvbXBhcmV0b3RhbCArTmFONDEgK05hTjQyIC0+IC0xDQotZGRjb3Q5NzQgY29tcGFyZXRvdGFsIC1OYU40MiAtTmFOMDEgLT4gLTENCi1kZGNvdDk3NSBjb21wYXJldG90YWwgK05hTjQyIC1OYU4wMSAtPiAgMQ0KLWRkY290OTc2IGNvbXBhcmV0b3RhbCAtTmFONDIgK05hTjAxIC0+IC0xDQotZGRjb3Q5NzcgY29tcGFyZXRvdGFsICtOYU40MiArTmFOMDEgLT4gIDENCi0NCi1kZGNvdDk4MCBjb21wYXJldG90YWwgLXNOYU43NzEgLXNOYU43NzIgLT4gMQ0KLWRkY290OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxDQotZGRjb3Q5ODIgY29tcGFyZXRvdGFsIC1zTmFONzcxICtzTmFONzcyIC0+IC0xDQotZGRjb3Q5ODMgY29tcGFyZXRvdGFsICtzTmFONzcxICtzTmFONzcyIC0+IC0xDQotZGRjb3Q5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xDQotZGRjb3Q5ODUgY29tcGFyZXRvdGFsICtzTmFONzcyIC1zTmFONzcxIC0+ICAxDQotZGRjb3Q5ODYgY29tcGFyZXRvdGFsIC1zTmFONzcyICtzTmFONzcxIC0+IC0xDQotZGRjb3Q5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQotDQotZGRjb3Q5OTEgY29tcGFyZXRvdGFsIC1zTmFOOTkgLUluZiAgICAtPiAtMQ0KLWRkY290OTkyIGNvbXBhcmV0b3RhbCAgc05hTjk4IC0xMSAgICAgLT4gIDENCi1kZGNvdDk5MyBjb21wYXJldG90YWwgIHNOYU45NyAgTmFOICAgIC0+IC0xDQotZGRjb3Q5OTQgY29tcGFyZXRvdGFsICBzTmFOMTYgc05hTjk0ICAtPiAtMQ0KLWRkY290OTk1IGNvbXBhcmV0b3RhbCAgTmFOODUgIHNOYU44MyAgLT4gIDENCi1kZGNvdDk5NiBjb21wYXJldG90YWwgLUluZiAgICBzTmFOOTIgIC0+IC0xDQotZGRjb3Q5OTcgY29tcGFyZXRvdGFsICAwODggICAgc05hTjgxICAtPiAtMQ0KLWRkY290OTk4IGNvbXBhcmV0b3RhbCAgSW5mICAgIHNOYU45MCAgLT4gLTENCi1kZGNvdDk5OSBjb21wYXJldG90YWwgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQotDQotLS0gc3ByZWFkIHplcm9zDQotZGRjb3QxMTEwIGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAgMCAgICAgICAtPiAtMQ0KLWRkY290MTExMSBjb21wYXJldG90YWwgICAwRS0zODMgLTAgICAgICAgLT4gIDENCi1kZGNvdDExMTIgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwICAgICAgIC0+IC0xDQotZGRjb3QxMTEzIGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAtMCAgICAgICAtPiAgMQ0KLWRkY290MTExNCBjb21wYXJldG90YWwgICAwRS0zODMgIDBFKzM4NCAgLT4gLTENCi1kZGNvdDExMTUgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wRSszODQgIC0+ICAxDQotZGRjb3QxMTE2IGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAgMEUrMzg0ICAtPiAtMQ0KLWRkY290MTExNyBjb21wYXJldG90YWwgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDENCi1kZGNvdDExMTggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRSszODQgIC0+IC0xDQotZGRjb3QxMTE5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUrMzg0ICAtPiAgMQ0KLWRkY290MTEyMCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFKzM4NCAgLT4gLTENCi1kZGNvdDExMjEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRSszODQgIC0+ICAxDQotDQotZGRjb3QxMTMwIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMCAgICAgICAtPiAgMQ0KLWRkY290MTEzMSBjb21wYXJldG90YWwgICAwRSszODQgLTAgICAgICAgLT4gIDENCi1kZGNvdDExMzIgY29tcGFyZXRvdGFsICAtMEUrMzg0ICAwICAgICAgIC0+IC0xDQotZGRjb3QxMTMzIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMCAgICAgICAtPiAtMQ0KLWRkY290MTEzNCBjb21wYXJldG90YWwgICAwRSszODQgIDBFLTM4MyAgLT4gIDENCi1kZGNvdDExMzUgY29tcGFyZXRvdGFsICAgMEUrMzg0IC0wRS0zODMgIC0+ICAxDQotZGRjb3QxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMEUtMzgzICAtPiAtMQ0KLWRkY290MTEzNyBjb21wYXJldG90YWwgIC0wRSszODQgLTBFLTM4MyAgLT4gLTENCi1kZGNvdDExMzggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRS0zODMgIC0+ICAxDQotZGRjb3QxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtMzgzICAtPiAgMQ0KLWRkY290MTE0MCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFLTM4MyAgLT4gLTENCi1kZGNvdDExNDEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRS0zODMgIC0+IC0xDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkY290OTk5MCBjb21wYXJldG90YWwgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb3Q5OTkxIGNvbXBhcmV0b3RhbCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29tcGFyZVRvdGFsLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmctLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCistLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCistLSB0aGFuIGNvbXBhcmUuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZGNvdDAwMSBjb21wYXJldG90YWwgIC0yICAtMiAgLT4gMAorZGRjb3QwMDIgY29tcGFyZXRvdGFsICAtMiAgLTEgIC0+IC0xCitkZGNvdDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTEKK2RkY290MDA0IGNvbXBhcmV0b3RhbCAgLTIgICAxICAtPiAtMQorZGRjb3QwMDUgY29tcGFyZXRvdGFsICAtMiAgIDIgIC0+IC0xCitkZGNvdDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQorZGRjb3QwMDcgY29tcGFyZXRvdGFsICAtMSAgLTEgIC0+IDAKK2RkY290MDA4IGNvbXBhcmV0b3RhbCAgLTEgICAwICAtPiAtMQorZGRjb3QwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xCitkZGNvdDAxMCBjb21wYXJldG90YWwgIC0xICAgMiAgLT4gLTEKK2RkY290MDExIGNvbXBhcmV0b3RhbCAgIDAgIC0yICAtPiAxCitkZGNvdDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQorZGRjb3QwMTMgY29tcGFyZXRvdGFsICAgMCAgIDAgIC0+IDAKK2RkY290MDE0IGNvbXBhcmV0b3RhbCAgIDAgICAxICAtPiAtMQorZGRjb3QwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xCitkZGNvdDAxNiBjb21wYXJldG90YWwgICAxICAtMiAgLT4gMQorZGRjb3QwMTcgY29tcGFyZXRvdGFsICAgMSAgLTEgIC0+IDEKK2RkY290MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxCitkZGNvdDAxOSBjb21wYXJldG90YWwgICAxICAgMSAgLT4gMAorZGRjb3QwMjAgY29tcGFyZXRvdGFsICAgMSAgIDIgIC0+IC0xCitkZGNvdDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQorZGRjb3QwMjIgY29tcGFyZXRvdGFsICAgMiAgLTEgIC0+IDEKK2RkY290MDIzIGNvbXBhcmV0b3RhbCAgIDIgICAwICAtPiAxCitkZGNvdDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQorZGRjb3QwMjYgY29tcGFyZXRvdGFsICAgMiAgIDIgIC0+IDAKKworZGRjb3QwMzEgY29tcGFyZXRvdGFsICAtMjAgIC0yMCAgLT4gMAorZGRjb3QwMzIgY29tcGFyZXRvdGFsICAtMjAgIC0xMCAgLT4gLTEKK2RkY290MDMzIGNvbXBhcmV0b3RhbCAgLTIwICAgMDAgIC0+IC0xCitkZGNvdDAzNCBjb21wYXJldG90YWwgIC0yMCAgIDEwICAtPiAtMQorZGRjb3QwMzUgY29tcGFyZXRvdGFsICAtMjAgICAyMCAgLT4gLTEKK2RkY290MDM2IGNvbXBhcmV0b3RhbCAgLTEwICAtMjAgIC0+IDEKK2RkY290MDM3IGNvbXBhcmV0b3RhbCAgLTEwICAtMTAgIC0+IDAKK2RkY290MDM4IGNvbXBhcmV0b3RhbCAgLTEwICAgMDAgIC0+IC0xCitkZGNvdDAzOSBjb21wYXJldG90YWwgIC0xMCAgIDEwICAtPiAtMQorZGRjb3QwNDAgY29tcGFyZXRvdGFsICAtMTAgICAyMCAgLT4gLTEKK2RkY290MDQxIGNvbXBhcmV0b3RhbCAgIDAwICAtMjAgIC0+IDEKK2RkY290MDQyIGNvbXBhcmV0b3RhbCAgIDAwICAtMTAgIC0+IDEKK2RkY290MDQzIGNvbXBhcmV0b3RhbCAgIDAwICAgMDAgIC0+IDAKK2RkY290MDQ0IGNvbXBhcmV0b3RhbCAgIDAwICAgMTAgIC0+IC0xCitkZGNvdDA0NSBjb21wYXJldG90YWwgICAwMCAgIDIwICAtPiAtMQorZGRjb3QwNDYgY29tcGFyZXRvdGFsICAgMTAgIC0yMCAgLT4gMQorZGRjb3QwNDcgY29tcGFyZXRvdGFsICAgMTAgIC0xMCAgLT4gMQorZGRjb3QwNDggY29tcGFyZXRvdGFsICAgMTAgICAwMCAgLT4gMQorZGRjb3QwNDkgY29tcGFyZXRvdGFsICAgMTAgICAxMCAgLT4gMAorZGRjb3QwNTAgY29tcGFyZXRvdGFsICAgMTAgICAyMCAgLT4gLTEKK2RkY290MDUxIGNvbXBhcmV0b3RhbCAgIDIwICAtMjAgIC0+IDEKK2RkY290MDUyIGNvbXBhcmV0b3RhbCAgIDIwICAtMTAgIC0+IDEKK2RkY290MDUzIGNvbXBhcmV0b3RhbCAgIDIwICAgMDAgIC0+IDEKK2RkY290MDU1IGNvbXBhcmV0b3RhbCAgIDIwICAgMTAgIC0+IDEKK2RkY290MDU2IGNvbXBhcmV0b3RhbCAgIDIwICAgMjAgIC0+IDAKKworZGRjb3QwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwCitkZGNvdDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xCitkZGNvdDA2MyBjb21wYXJldG90YWwgIC0yLjAgICAwLjAgIC0+IC0xCitkZGNvdDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xCitkZGNvdDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xCitkZGNvdDA2NiBjb21wYXJldG90YWwgIC0xLjAgIC0yLjAgIC0+IDEKK2RkY290MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMAorZGRjb3QwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQorZGRjb3QwNjkgY29tcGFyZXRvdGFsICAtMS4wICAgMS4wICAtPiAtMQorZGRjb3QwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQorZGRjb3QwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxCitkZGNvdDA3MiBjb21wYXJldG90YWwgICAwLjAgIC0xLjAgIC0+IDEKK2RkY290MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMAorZGRjb3QwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQorZGRjb3QwNzUgY29tcGFyZXRvdGFsICAgMC4wICAgMi4wICAtPiAtMQorZGRjb3QwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxCitkZGNvdDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDEKK2RkY290MDc4IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDAuMCAgLT4gMQorZGRjb3QwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwCitkZGNvdDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xCitkZGNvdDA4MSBjb21wYXJldG90YWwgICAyLjAgIC0yLjAgIC0+IDEKK2RkY290MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQorZGRjb3QwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxCitkZGNvdDA4NSBjb21wYXJldG90YWwgICAyLjAgICAxLjAgIC0+IDEKK2RkY290MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RkY290MDkwIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgLT4gMAorZGRjb3QwOTEgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSszODQgOS45OTk5OTk5OUUrMzg0ICAtPiAtMQorZGRjb3QwOTIgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAtPiAxCitkZGNvdDA5MyBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0IC0+IDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCistLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCitkZGNvdDEwMCBjb21wYXJldG90YWwgICA3LjAgICAgNy4wICAgIC0+IDAKK2RkY290MTAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3ICAgICAgLT4gLTEKK2RkY290MTAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3LjAgICAgLT4gMQorZGRjb3QxMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIDcuMCAgICAtPiAxCitkZGNvdDEwNCBjb21wYXJldG90YWwgICA3MEUtMSAgNy4wICAgIC0+IDAKK2RkY290MTA1IGNvbXBhcmV0b3RhbCAgIDAuN0UrMSA3ICAgICAgLT4gMAorZGRjb3QxMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcgICAgICAtPiAtMQorZGRjb3QxMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIDdFKzAgICAtPiAtMQorZGRjb3QxMDggY29tcGFyZXRvdGFsICAgNy4wICAgIDcwRS0xICAtPiAwCitkZGNvdDEwOSBjb21wYXJldG90YWwgICA3ICAgICAgMC43RSsxIC0+IDAKK2RkY290MTEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3MEUtMSAgLT4gMQorCitkZGNvdDEyMCBjb21wYXJldG90YWwgICA4LjAgICAgNy4wICAgIC0+IDEKK2RkY290MTIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3ICAgICAgLT4gMQorZGRjb3QxMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIDcuMCAgICAtPiAxCitkZGNvdDEyMyBjb21wYXJldG90YWwgICA4RSswICAgNy4wICAgIC0+IDEKK2RkY290MTI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3LjAgICAgLT4gMQorZGRjb3QxMjUgY29tcGFyZXRvdGFsICAgMC44RSsxIDcgICAgICAtPiAxCitkZGNvdDEyNiBjb21wYXJldG90YWwgICA4MEUtMSAgNyAgICAgIC0+IDEKK2RkY290MTI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3RSswICAgLT4gMQorZGRjb3QxMjggY29tcGFyZXRvdGFsICAgOC4wICAgIDcwRS0xICAtPiAxCitkZGNvdDEyOSBjb21wYXJldG90YWwgICA4ICAgICAgMC43RSsxICAtPiAxCitkZGNvdDEzMCBjb21wYXJldG90YWwgICA4ICAgICAgNzBFLTEgIC0+IDEKKworZGRjb3QxNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIDkuMCAgICAtPiAtMQorZGRjb3QxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQorZGRjb3QxNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIDkuMCAgICAtPiAtMQorZGRjb3QxNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjb3QxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQorZGRjb3QxNDUgY29tcGFyZXRvdGFsICAgMC44RSsxIDkgICAgICAtPiAtMQorZGRjb3QxNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIDkgICAgICAtPiAtMQorZGRjb3QxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQorZGRjb3QxNDggY29tcGFyZXRvdGFsICAgOC4wICAgIDkwRS0xICAtPiAtMQorZGRjb3QxNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjb3QxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitkZGNvdDIwMCBjb21wYXJldG90YWwgIC03LjAgICAgNy4wICAgIC0+IC0xCitkZGNvdDIwMSBjb21wYXJldG90YWwgIC03LjAgICAgNyAgICAgIC0+IC0xCitkZGNvdDIwMiBjb21wYXJldG90YWwgIC03ICAgICAgNy4wICAgIC0+IC0xCitkZGNvdDIwMyBjb21wYXJldG90YWwgIC03RSswICAgNy4wICAgIC0+IC0xCitkZGNvdDIwNCBjb21wYXJldG90YWwgIC03MEUtMSAgNy4wICAgIC0+IC0xCitkZGNvdDIwNSBjb21wYXJldG90YWwgIC0wLjdFKzEgNyAgICAgIC0+IC0xCitkZGNvdDIwNiBjb21wYXJldG90YWwgIC03MEUtMSAgNyAgICAgIC0+IC0xCitkZGNvdDIwNyBjb21wYXJldG90YWwgIC03LjAgICAgN0UrMCAgIC0+IC0xCitkZGNvdDIwOCBjb21wYXJldG90YWwgIC03LjAgICAgNzBFLTEgIC0+IC0xCitkZGNvdDIwOSBjb21wYXJldG90YWwgIC03ICAgICAgMC43RSsxIC0+IC0xCitkZGNvdDIxMCBjb21wYXJldG90YWwgIC03ICAgICAgNzBFLTEgIC0+IC0xCisKK2RkY290MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTEKK2RkY290MjIxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3ICAgICAgLT4gLTEKK2RkY290MjIyIGNvbXBhcmV0b3RhbCAgLTggICAgICA3LjAgICAgLT4gLTEKK2RkY290MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTEKK2RkY290MjI0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2RkY290MjI1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA3ICAgICAgLT4gLTEKK2RkY290MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTEKK2RkY290MjI3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3RSswICAgLT4gLTEKK2RkY290MjI4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3MEUtMSAgLT4gLTEKK2RkY290MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTEKK2RkY290MjMwIGNvbXBhcmV0b3RhbCAgLTggICAgICA3MEUtMSAgLT4gLTEKKworZGRjb3QyNDAgY29tcGFyZXRvdGFsICAtOC4wICAgIDkuMCAgICAtPiAtMQorZGRjb3QyNDEgY29tcGFyZXRvdGFsICAtOC4wICAgIDkgICAgICAtPiAtMQorZGRjb3QyNDIgY29tcGFyZXRvdGFsICAtOCAgICAgIDkuMCAgICAtPiAtMQorZGRjb3QyNDMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjb3QyNDQgY29tcGFyZXRvdGFsICAtODBFLTEgIDkuMCAgICAtPiAtMQorZGRjb3QyNDUgY29tcGFyZXRvdGFsICAtMC44RSsxIDkgICAgICAtPiAtMQorZGRjb3QyNDYgY29tcGFyZXRvdGFsICAtODBFLTEgIDkgICAgICAtPiAtMQorZGRjb3QyNDcgY29tcGFyZXRvdGFsICAtOC4wICAgIDlFKzAgICAtPiAtMQorZGRjb3QyNDggY29tcGFyZXRvdGFsICAtOC4wICAgIDkwRS0xICAtPiAtMQorZGRjb3QyNDkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjb3QyNTAgY29tcGFyZXRvdGFsICAtOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitkZGNvdDMwMCBjb21wYXJldG90YWwgICA3LjAgICAgLTcuMCAgICAtPiAxCitkZGNvdDMwMSBjb21wYXJldG90YWwgICA3LjAgICAgLTcgICAgICAtPiAxCitkZGNvdDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxCitkZGNvdDMwMyBjb21wYXJldG90YWwgICA3RSswICAgLTcuMCAgICAtPiAxCitkZGNvdDMwNCBjb21wYXJldG90YWwgICA3MEUtMSAgLTcuMCAgICAtPiAxCitkZGNvdDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxCitkZGNvdDMwNiBjb21wYXJldG90YWwgICA3MEUtMSAgLTcgICAgICAtPiAxCitkZGNvdDMwNyBjb21wYXJldG90YWwgICA3LjAgICAgLTdFKzAgICAtPiAxCitkZGNvdDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxCitkZGNvdDMwOSBjb21wYXJldG90YWwgICA3ICAgICAgLS43RSsxICAtPiAxCitkZGNvdDMxMCBjb21wYXJldG90YWwgICA3ICAgICAgLTcwRS0xICAtPiAxCisKK2RkY290MzIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNy4wICAgIC0+IDEKK2RkY290MzIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNyAgICAgIC0+IDEKK2RkY290MzIyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNy4wICAgIC0+IDEKK2RkY290MzIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtNy4wICAgIC0+IDEKK2RkY290MzI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2RkY290MzI1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtNyAgICAgIC0+IDEKK2RkY290MzI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNyAgICAgIC0+IDEKK2RkY290MzI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2RkY290MzI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNzBFLTEgIC0+IDEKK2RkY290MzI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjdFKzEgIC0+IDEKK2RkY290MzMwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNzBFLTEgIC0+IDEKKworZGRjb3QzNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIC05LjAgICAgLT4gMQorZGRjb3QzNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIC05ICAgICAgLT4gMQorZGRjb3QzNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIC05LjAgICAgLT4gMQorZGRjb3QzNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC05LjAgICAgLT4gMQorZGRjb3QzNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIC05LjAgICAgLT4gMQorZGRjb3QzNDUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC05ICAgICAgLT4gMQorZGRjb3QzNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIC05ICAgICAgLT4gMQorZGRjb3QzNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIC05RSswICAgLT4gMQorZGRjb3QzNDggY29tcGFyZXRvdGFsICAgOC4wICAgIC05MEUtMSAgLT4gMQorZGRjb3QzNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uOUUrMSAgLT4gMQorZGRjb3QzNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitkZGNvdDQwMCBjb21wYXJldG90YWwgICAtNy4wICAgIC03LjAgICAgLT4gMAorZGRjb3Q0MDEgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNyAgICAgIC0+IDEKK2RkY290NDAyIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcuMCAgICAtPiAtMQorZGRjb3Q0MDMgY29tcGFyZXRvdGFsICAgLTdFKzAgICAtNy4wICAgIC0+IC0xCitkZGNvdDQwNCBjb21wYXJldG90YWwgICAtNzBFLTEgIC03LjAgICAgLT4gMAorZGRjb3Q0MDUgY29tcGFyZXRvdGFsICAgLS43RSsxICAtNyAgICAgIC0+IDAKK2RkY290NDA2IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcgICAgICAtPiAxCitkZGNvdDQwNyBjb21wYXJldG90YWwgICAtNy4wICAgIC03RSswICAgLT4gMQorZGRjb3Q0MDggY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKK2RkY290NDA5IGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLS43RSsxICAtPiAwCitkZGNvdDQxMCBjb21wYXJldG90YWwgICAtNyAgICAgIC03MEUtMSAgLT4gLTEKKworZGRjb3Q0MjAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNy4wICAgIC0+IC0xCitkZGNvdDQyMSBjb21wYXJldG90YWwgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2RkY290NDIyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcuMCAgICAtPiAtMQorZGRjb3Q0MjMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtNy4wICAgIC0+IC0xCitkZGNvdDQyNCBjb21wYXJldG90YWwgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2RkY290NDI1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQorZGRjb3Q0MjYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCitkZGNvdDQyNyBjb21wYXJldG90YWwgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2RkY290NDI4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcwRS0xICAtPiAtMQorZGRjb3Q0MjkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjdFKzEgIC0+IC0xCitkZGNvdDQzMCBjb21wYXJldG90YWwgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworZGRjb3Q0NDAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOS4wICAgIC0+IDEKK2RkY290NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxCitkZGNvdDQ0MiBjb21wYXJldG90YWwgICAtOCAgICAgIC05LjAgICAgLT4gMQorZGRjb3Q0NDMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtOS4wICAgIC0+IDEKK2RkY290NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxCitkZGNvdDQ0NSBjb21wYXJldG90YWwgICAtLjhFKzEgIC05ICAgICAgLT4gMQorZGRjb3Q0NDYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOSAgICAgIC0+IDEKK2RkY290NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxCitkZGNvdDQ0OCBjb21wYXJldG90YWwgICAtOC4wICAgIC05MEUtMSAgLT4gMQorZGRjb3Q0NDkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjlFKzEgIC0+IDEKK2RkY290NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxCisKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitkZGNvdDQ3MyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkZGNvdDQ3NCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKK2RkY290NDc1IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkZGNvdDQ3NiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkZGNvdDQ3NyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2RkY290NDc4IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkZGNvdDQ3OSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkZGNvdDQ4MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKK2RkY290NDgxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkZGNvdDQ4MiBjb21wYXJldG90YWwgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkZGNvdDQ4MyBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjb3Q0ODcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAxCitkZGNvdDQ4OCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMQorZGRjb3Q0ODkgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgLT4gMQorZGRjb3Q0OTAgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAxCitkZGNvdDQ5MSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMQorZGRjb3Q0OTIgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMQorZGRjb3Q0OTMgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAxCitkZGNvdDQ5NCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMQorZGRjb3Q0OTUgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgLT4gMQorZGRjb3Q0OTYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAxCitkZGNvdDQ5NyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitkZGNvdDQ5OCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTcgICAgLT4gMQorZGRjb3Q0OTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE2ICAgIC0+IDEKK2RkY290NTAwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNSAgICAtPiAxCitkZGNvdDUwMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTQgICAgLT4gMQorZGRjb3Q1MDIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEzICAgIC0+IDEKK2RkY290NTAzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMiAgICAtPiAxCitkZGNvdDUwNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTEgICAgLT4gMQorZGRjb3Q1MDUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEwICAgIC0+IDEKK2RkY290NTA2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS05ICAgICAtPiAxCitkZGNvdDUwNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOCAgICAgLT4gMQorZGRjb3Q1MDggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTcgICAgIC0+IDEKK2RkY290NTA5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS02ICAgICAtPiAxCitkZGNvdDUxMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNSAgICAgLT4gMQorZGRjb3Q1MTEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTQgICAgIC0+IDEKK2RkY290NTEyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0zICAgICAtPiAxCitkZGNvdDUxMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMiAgICAgLT4gMQorZGRjb3Q1MTQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEgICAgIC0+IDEKK2RkY290NTE1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0wICAgICAtPiAwCitkZGNvdDUxNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKK2RkY290NTE3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsyICAgICAtPiAtMQorZGRjb3Q1MTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNvdDUxOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKK2RkY290NTIxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs1ICAgICAtPiAtMQorZGRjb3Q1MjIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitkZGNvdDUyMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKK2RkY290NTI0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs4ICAgICAtPiAtMQorZGRjb3Q1MjUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitkZGNvdDUyNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKK2RkY290NTI3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMSAgICAtPiAtMQorZGRjb3Q1MjggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitkZGNvdDUyOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKK2RkY290NTMwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNCAgICAtPiAtMQorZGRjb3Q1MzEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCitkZGNvdDUzMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTYgICAgLT4gLTEKK2RkY290NTMzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNyAgICAtPiAtMQorLS0gTFIgc3dhcAorZGRjb3Q1MzggY29tcGFyZXRvdGFsICAgIDFFLTE3ICAxICAgICAgIC0+IC0xCitkZGNvdDUzOSBjb21wYXJldG90YWwgICAgMUUtMTYgIDEgICAgICAgLT4gLTEKK2RkY290NTQwIGNvbXBhcmV0b3RhbCAgICAxRS0xNSAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDEgY29tcGFyZXRvdGFsICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitkZGNvdDU0MiBjb21wYXJldG90YWwgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2RkY290NTQzIGNvbXBhcmV0b3RhbCAgICAxRS0xMiAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDQgY29tcGFyZXRvdGFsICAgIDFFLTExICAxICAgICAgIC0+IC0xCitkZGNvdDU0NSBjb21wYXJldG90YWwgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2RkY290NTQ2IGNvbXBhcmV0b3RhbCAgICAxRS05ICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDcgY29tcGFyZXRvdGFsICAgIDFFLTggICAxICAgICAgIC0+IC0xCitkZGNvdDU0OCBjb21wYXJldG90YWwgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2RkY290NTQ5IGNvbXBhcmV0b3RhbCAgICAxRS02ICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NTAgY29tcGFyZXRvdGFsICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitkZGNvdDU1MSBjb21wYXJldG90YWwgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2RkY290NTUyIGNvbXBhcmV0b3RhbCAgICAxRS0zICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NTMgY29tcGFyZXRvdGFsICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitkZGNvdDU1NCBjb21wYXJldG90YWwgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2RkY290NTU1IGNvbXBhcmV0b3RhbCAgICAxRS0wICAgMSAgICAgICAtPiAgMAorZGRjb3Q1NTYgY29tcGFyZXRvdGFsICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitkZGNvdDU1NyBjb21wYXJldG90YWwgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2RkY290NTU4IGNvbXBhcmV0b3RhbCAgICAxRSszICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NTkgY29tcGFyZXRvdGFsICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitkZGNvdDU2MSBjb21wYXJldG90YWwgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2RkY290NTYyIGNvbXBhcmV0b3RhbCAgICAxRSs2ICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjMgY29tcGFyZXRvdGFsICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitkZGNvdDU2NCBjb21wYXJldG90YWwgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2RkY290NTY1IGNvbXBhcmV0b3RhbCAgICAxRSs5ICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjYgY29tcGFyZXRvdGFsICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitkZGNvdDU2NyBjb21wYXJldG90YWwgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2RkY290NTY4IGNvbXBhcmV0b3RhbCAgICAxRSsxMiAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjkgY29tcGFyZXRvdGFsICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitkZGNvdDU3MCBjb21wYXJldG90YWwgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2RkY290NTcxIGNvbXBhcmV0b3RhbCAgICAxRSsxNSAgMSAgICAgICAtPiAgMQorZGRjb3Q1NzIgY29tcGFyZXRvdGFsICAgIDFFKzE2ICAxICAgICAgIC0+ICAxCitkZGNvdDU3MyBjb21wYXJldG90YWwgICAgMUUrMTcgIDEgICAgICAgLT4gIDEKKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorZGRjb3Q1NzggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgLT4gMQorZGRjb3Q1NzkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTYgICAgLT4gMQorZGRjb3Q1ODAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQorZGRjb3Q1ODEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorZGRjb3Q1ODIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQorZGRjb3Q1ODMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQorZGRjb3Q1ODQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorZGRjb3Q1ODUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQorZGRjb3Q1ODYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQorZGRjb3Q1ODcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorZGRjb3Q1ODggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQorZGRjb3Q1ODkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTEKK2RkY290NTkwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitkZGNvdDU5MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQorZGRjb3Q1OTIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTEKK2RkY290NTkzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitkZGNvdDU5NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQorZGRjb3Q1OTUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTEKK2RkY290NTk2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNvdDU5NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQorZGRjb3Q1OTggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTEKK2RkY290NTk5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkZGNvdDYwMCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjAxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwMyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjA0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwNiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjA3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwOSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjEwIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQorZGRjb3Q2MTEgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitkZGNvdDYxMiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKK2RkY290NjEzIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQorZGRjb3Q2MTQgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitkZGNvdDYxNSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKK2RkY290NjE2IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQorZGRjb3Q2MTcgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitkZGNvdDYxOCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKK2RkY290NjE5IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQorZGRjb3Q2MjAgY29tcGFyZXRvdGFsICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyMSBjb21wYXJldG90YWwgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjIyIGNvbXBhcmV0b3RhbCAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjMgY29tcGFyZXRvdGFsICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyNCBjb21wYXJldG90YWwgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjI1IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjYgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyNyBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjI4IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjkgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYzMCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKK2RkY290NjMxIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQorZGRjb3Q2MzIgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitkZGNvdDYzMyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKK2RkY290NjM0IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQorZGRjb3Q2MzUgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitkZGNvdDYzNiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKK2RkY290NjM3IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQorZGRjb3Q2MzggY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitkZGNvdDYzOSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkY290NjQwIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAgICAtPiAwCitkZGNvdDY0MSBjb21wYXJldG90YWwgICAwICAgIC0wICAgLT4gMQorZGRjb3Q2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDEKK2RkY290NjQzIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAuMCAtPiAxCitkZGNvdDY0NCBjb21wYXJldG90YWwgIC0wICAgICAwICAgLT4gLTEKK2RkY290NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwCitkZGNvdDY0NiBjb21wYXJldG90YWwgIC0wICAgIC0wLjAgLT4gLTEKK2RkY290NjQ3IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAuMCAtPiAtMQorZGRjb3Q2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xCitkZGNvdDY0OSBjb21wYXJldG90YWwgICAwLjAgIC0wICAgLT4gMQorZGRjb3Q2NTAgY29tcGFyZXRvdGFsICAgMC4wICAtMC4wIC0+IDEKK2RkY290NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwCitkZGNvdDY1MiBjb21wYXJldG90YWwgIC0wLjAgICAwICAgLT4gLTEKK2RkY290NjUzIGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAgICAtPiAxCitkZGNvdDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMAorZGRjb3Q2NTUgY29tcGFyZXRvdGFsICAtMC4wICAgMC4wIC0+IC0xCisKK2RkY290NjU2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAuMCAtPiAtMQorZGRjb3Q2NTcgY29tcGFyZXRvdGFsICAtMEUyICAgMC4wIC0+IC0xCitkZGNvdDY1OCBjb21wYXJldG90YWwgICAwRTEgICAwLjAgLT4gMQorZGRjb3Q2NTkgY29tcGFyZXRvdGFsICAgMEUyICAgMC4wIC0+IDEKK2RkY290NjYwIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAgICAtPiAtMQorZGRjb3Q2NjEgY29tcGFyZXRvdGFsICAtMEUyICAgMCAgIC0+IC0xCitkZGNvdDY2MiBjb21wYXJldG90YWwgICAwRTEgICAwICAgLT4gMQorZGRjb3Q2NjMgY29tcGFyZXRvdGFsICAgMEUyICAgMCAgIC0+IDEKK2RkY290NjY0IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMSAtPiAwCitkZGNvdDY2NSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTEgLT4gLTEKK2RkY290NjY2IGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMSAtPiAxCitkZGNvdDY2NyBjb21wYXJldG90YWwgICAwRTIgIC0wRTEgLT4gMQorZGRjb3Q2NjggY29tcGFyZXRvdGFsICAtMEUxICAtMEUyIC0+IDEKK2RkY290NjY5IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMiAtPiAwCitkZGNvdDY3MCBjb21wYXJldG90YWwgICAwRTEgIC0wRTIgLT4gMQorZGRjb3Q2NzEgY29tcGFyZXRvdGFsICAgMEUyICAtMEUyIC0+IDEKK2RkY290NjcyIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMSAtPiAtMQorZGRjb3Q2NzMgY29tcGFyZXRvdGFsICAtMEUyICAgMEUxIC0+IC0xCitkZGNvdDY3NCBjb21wYXJldG90YWwgICAwRTEgICAwRTEgLT4gMAorZGRjb3Q2NzUgY29tcGFyZXRvdGFsICAgMEUyICAgMEUxIC0+IDEKK2RkY290Njc2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMiAtPiAtMQorZGRjb3Q2NzcgY29tcGFyZXRvdGFsICAtMEUyICAgMEUyIC0+IC0xCitkZGNvdDY3OCBjb21wYXJldG90YWwgICAwRTEgICAwRTIgLT4gLTEKK2RkY290Njc5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RkY290NjgwIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyICAgICAgICAgICAtPiAwCitkZGNvdDY4MSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wICAgICAgICAgLT4gMQorZGRjb3Q2ODIgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDEKK2RkY290NjgzIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAxCitkZGNvdDY4NCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMQorZGRjb3Q2ODUgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDEKK2RkY290Njg2IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAxCitkZGNvdDY4NyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMQorZGRjb3Q2ODggY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDEKK2RkY290Njg5IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAxCitkZGNvdDY5MCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorZGRjb3Q2OTEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAgIDEyIC0+IC0xCitkZGNvdDY5MiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgICAgMTIgLT4gLTEKK2RkY290NjkzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAtMQorZGRjb3Q2OTQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IC0xCitkZGNvdDY5NSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gLTEKK2RkY290Njk2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAtMQorZGRjb3Q2OTcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IC0xCitkZGNvdDY5OCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gLTEKK2RkY290Njk5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAtMQorCistLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcworZGRjb3Q3MDEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAwICAxIC0+ICAxCitkZGNvdDcwMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwMCAgLT4gLTEKK2RkY290NzAzIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwICAgMSAtPiAgMQorZGRjb3Q3MDQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgIC0+IC0xCitkZGNvdDcwNSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MCAgIDEgLT4gIDEKK2RkY290NzA2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgICAtPiAtMQorZGRjb3Q3MDcgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTEgICAxIC0+ICAxCitkZGNvdDcwOCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkxICAgLT4gLTEKK2RkY290NzA5IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwMSAgMSAtPiAgMQorZGRjb3Q3MTAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgIC0+IC0xCitkZGNvdDcxMSBjb21wYXJldG90YWwgMTIzNDU2Nzg5NiAgIDEgLT4gIDEKK2RkY290NzEyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgICAtPiAtMQorZGRjb3Q3MTMgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkxICAxIC0+IC0xCitkZGNvdDcxNCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MSAgLT4gIDEKK2RkY290NzE1IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MDEgMSAtPiAtMQorZGRjb3Q3MTYgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTAxIC0+ICAxCitkZGNvdDcxNyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTYgIDEgLT4gLTEKK2RkY290NzE4IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODk2ICAtPiAgMQorCistLSBvbGQgcmVzaWR1ZSBjYXNlcworZGRjb3Q3NDAgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OTkgIC0+IDEKK2RkY290NzQxIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTkgICAtPiAxCitkZGNvdDc0MiBjb21wYXJldG90YWwgIDEgIDAuOTk5OTkgICAgLT4gMQorZGRjb3Q3NDMgY29tcGFyZXRvdGFsICAxICAxLjAwMDAgICAgIC0+IDEKK2RkY290NzQ0IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMSAgICAtPiAtMQorZGRjb3Q3NDUgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMSAgIC0+IC0xCitkZGNvdDc0NiBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2RkY290NzUwIGNvbXBhcmV0b3RhbCAgMC45OTk5OTk5ICAxICAtPiAtMQorZGRjb3Q3NTEgY29tcGFyZXRvdGFsICAwLjk5OTk5OSAgIDEgIC0+IC0xCitkZGNvdDc1MiBjb21wYXJldG90YWwgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2RkY290NzUzIGNvbXBhcmV0b3RhbCAgMS4wMDAwICAgICAxICAtPiAtMQorZGRjb3Q3NTQgY29tcGFyZXRvdGFsICAxLjAwMDAxICAgIDEgIC0+IDEKK2RkY290NzU1IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDEgICAxICAtPiAxCitkZGNvdDc1NiBjb21wYXJldG90YWwgIDEuMDAwMDAwMSAgMSAgLT4gMQorCistLSBTcGVjaWFscworZGRjb3Q3ODAgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQorZGRjb3Q3ODEgY29tcGFyZXRvdGFsICBJbmYgIC0xMDAwICAtPiAgMQorZGRjb3Q3ODIgY29tcGFyZXRvdGFsICBJbmYgIC0xICAgICAtPiAgMQorZGRjb3Q3ODMgY29tcGFyZXRvdGFsICBJbmYgIC0wICAgICAtPiAgMQorZGRjb3Q3ODQgY29tcGFyZXRvdGFsICBJbmYgICAwICAgICAtPiAgMQorZGRjb3Q3ODUgY29tcGFyZXRvdGFsICBJbmYgICAxICAgICAtPiAgMQorZGRjb3Q3ODYgY29tcGFyZXRvdGFsICBJbmYgICAxMDAwICAtPiAgMQorZGRjb3Q3ODcgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAorZGRjb3Q3ODggY29tcGFyZXRvdGFsIC0xMDAwICBJbmYgICAtPiAtMQorZGRjb3Q3ODkgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQorZGRjb3Q3OTAgY29tcGFyZXRvdGFsIC0xICAgICBJbmYgICAtPiAtMQorZGRjb3Q3OTEgY29tcGFyZXRvdGFsIC0wICAgICBJbmYgICAtPiAtMQorZGRjb3Q3OTIgY29tcGFyZXRvdGFsICAwICAgICBJbmYgICAtPiAtMQorZGRjb3Q3OTMgY29tcGFyZXRvdGFsICAxICAgICBJbmYgICAtPiAtMQorZGRjb3Q3OTQgY29tcGFyZXRvdGFsICAxMDAwICBJbmYgICAtPiAtMQorZGRjb3Q3OTUgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAorCitkZGNvdDgwMCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCitkZGNvdDgwMSBjb21wYXJldG90YWwgLUluZiAgLTEwMDAgIC0+IC0xCitkZGNvdDgwMiBjb21wYXJldG90YWwgLUluZiAgLTEgICAgIC0+IC0xCitkZGNvdDgwMyBjb21wYXJldG90YWwgLUluZiAgLTAgICAgIC0+IC0xCitkZGNvdDgwNCBjb21wYXJldG90YWwgLUluZiAgIDAgICAgIC0+IC0xCitkZGNvdDgwNSBjb21wYXJldG90YWwgLUluZiAgIDEgICAgIC0+IC0xCitkZGNvdDgwNiBjb21wYXJldG90YWwgLUluZiAgIDEwMDAgIC0+IC0xCitkZGNvdDgwNyBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xCitkZGNvdDgwOCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCitkZGNvdDgwOSBjb21wYXJldG90YWwgLTEwMDAgLUluZiAgIC0+ICAxCitkZGNvdDgxMCBjb21wYXJldG90YWwgLTEgICAgLUluZiAgIC0+ICAxCitkZGNvdDgxMSBjb21wYXJldG90YWwgLTAgICAgLUluZiAgIC0+ICAxCitkZGNvdDgxMiBjb21wYXJldG90YWwgIDAgICAgLUluZiAgIC0+ICAxCitkZGNvdDgxMyBjb21wYXJldG90YWwgIDEgICAgLUluZiAgIC0+ICAxCitkZGNvdDgxNCBjb21wYXJldG90YWwgIDEwMDAgLUluZiAgIC0+ICAxCitkZGNvdDgxNSBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxCisKK2RkY290ODIxIGNvbXBhcmV0b3RhbCAgTmFOIC1JbmYgICAgLT4gIDEKK2RkY290ODIyIGNvbXBhcmV0b3RhbCAgTmFOIC0xMDAwICAgLT4gIDEKK2RkY290ODIzIGNvbXBhcmV0b3RhbCAgTmFOIC0xICAgICAgLT4gIDEKK2RkY290ODI0IGNvbXBhcmV0b3RhbCAgTmFOIC0wICAgICAgLT4gIDEKK2RkY290ODI1IGNvbXBhcmV0b3RhbCAgTmFOICAwICAgICAgLT4gIDEKK2RkY290ODI2IGNvbXBhcmV0b3RhbCAgTmFOICAxICAgICAgLT4gIDEKK2RkY290ODI3IGNvbXBhcmV0b3RhbCAgTmFOICAxMDAwICAgLT4gIDEKK2RkY290ODI4IGNvbXBhcmV0b3RhbCAgTmFOICBJbmYgICAgLT4gIDEKK2RkY290ODI5IGNvbXBhcmV0b3RhbCAgTmFOICBOYU4gICAgLT4gIDAKK2RkY290ODMwIGNvbXBhcmV0b3RhbCAtSW5mICBOYU4gICAgLT4gIC0xCitkZGNvdDgzMSBjb21wYXJldG90YWwgLTEwMDAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzIgY29tcGFyZXRvdGFsIC0xICAgIE5hTiAgICAtPiAgLTEKK2RkY290ODMzIGNvbXBhcmV0b3RhbCAtMCAgICBOYU4gICAgLT4gIC0xCitkZGNvdDgzNCBjb21wYXJldG90YWwgIDAgICAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzUgY29tcGFyZXRvdGFsICAxICAgIE5hTiAgICAtPiAgLTEKK2RkY290ODM2IGNvbXBhcmV0b3RhbCAgMTAwMCBOYU4gICAgLT4gIC0xCitkZGNvdDgzNyBjb21wYXJldG90YWwgIEluZiAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzggY29tcGFyZXRvdGFsIC1OYU4gLU5hTiAgICAtPiAgMAorZGRjb3Q4MzkgY29tcGFyZXRvdGFsICtOYU4gLU5hTiAgICAtPiAgMQorZGRjb3Q4NDAgY29tcGFyZXRvdGFsIC1OYU4gK05hTiAgICAtPiAgLTEKKworZGRjb3Q4NDEgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAtPiAgMQorZGRjb3Q4NDIgY29tcGFyZXRvdGFsICBzTmFOIC1OYU4gICAtPiAgMQorZGRjb3Q4NDMgY29tcGFyZXRvdGFsICBzTmFOIC1JbmYgICAtPiAgMQorZGRjb3Q4NDQgY29tcGFyZXRvdGFsICBzTmFOIC0xMDAwICAtPiAgMQorZGRjb3Q4NDUgY29tcGFyZXRvdGFsICBzTmFOIC0xICAgICAtPiAgMQorZGRjb3Q4NDYgY29tcGFyZXRvdGFsICBzTmFOIC0wICAgICAtPiAgMQorZGRjb3Q4NDcgY29tcGFyZXRvdGFsICBzTmFOICAwICAgICAtPiAgMQorZGRjb3Q4NDggY29tcGFyZXRvdGFsICBzTmFOICAxICAgICAtPiAgMQorZGRjb3Q4NDkgY29tcGFyZXRvdGFsICBzTmFOICAxMDAwICAtPiAgMQorZGRjb3Q4NTAgY29tcGFyZXRvdGFsICBzTmFOICBOYU4gICAtPiAgLTEKK2RkY290ODUxIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKKworZGRjb3Q4NTIgY29tcGFyZXRvdGFsIC1zTmFOIHNOYU4gICAtPiAgLTEKK2RkY290ODUzIGNvbXBhcmV0b3RhbCAtTmFOICBzTmFOICAgLT4gIC0xCitkZGNvdDg1NCBjb21wYXJldG90YWwgLUluZiAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NTUgY29tcGFyZXRvdGFsIC0xMDAwIHNOYU4gICAtPiAgLTEKK2RkY290ODU2IGNvbXBhcmV0b3RhbCAtMSAgICBzTmFOICAgLT4gIC0xCitkZGNvdDg1NyBjb21wYXJldG90YWwgLTAgICAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NTggY29tcGFyZXRvdGFsICAwICAgIHNOYU4gICAtPiAgLTEKK2RkY290ODU5IGNvbXBhcmV0b3RhbCAgMSAgICBzTmFOICAgLT4gIC0xCitkZGNvdDg2MCBjb21wYXJldG90YWwgIDEwMDAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NjEgY29tcGFyZXRvdGFsICBJbmYgIHNOYU4gICAtPiAgLTEKK2RkY290ODYyIGNvbXBhcmV0b3RhbCAgTmFOICBzTmFOICAgLT4gIDEKK2RkY290ODYzIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKKworZGRjb3Q4NzEgY29tcGFyZXRvdGFsICAtc05hTiAtc05hTiAgLT4gIDAKK2RkY290ODcyIGNvbXBhcmV0b3RhbCAgLXNOYU4gLU5hTiAgIC0+ICAxCitkZGNvdDg3MyBjb21wYXJldG90YWwgIC1zTmFOIC1JbmYgICAtPiAgLTEKK2RkY290ODc0IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEwMDAgIC0+ICAtMQorZGRjb3Q4NzUgY29tcGFyZXRvdGFsICAtc05hTiAtMSAgICAgLT4gIC0xCitkZGNvdDg3NiBjb21wYXJldG90YWwgIC1zTmFOIC0wICAgICAtPiAgLTEKK2RkY290ODc3IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDAgICAgIC0+ICAtMQorZGRjb3Q4NzggY29tcGFyZXRvdGFsICAtc05hTiAgMSAgICAgLT4gIC0xCitkZGNvdDg3OSBjb21wYXJldG90YWwgIC1zTmFOICAxMDAwICAtPiAgLTEKK2RkY290ODgwIGNvbXBhcmV0b3RhbCAgLXNOYU4gIE5hTiAgIC0+ICAtMQorZGRjb3Q4ODEgY29tcGFyZXRvdGFsICAtc05hTiBzTmFOICAgLT4gIC0xCisKK2RkY290ODgyIGNvbXBhcmV0b3RhbCAtc05hTiAtc05hTiAgIC0+ICAwCitkZGNvdDg4MyBjb21wYXJldG90YWwgLU5hTiAgLXNOYU4gICAtPiAgLTEKK2RkY290ODg0IGNvbXBhcmV0b3RhbCAtSW5mICAtc05hTiAgIC0+ICAxCitkZGNvdDg4NSBjb21wYXJldG90YWwgLTEwMDAgLXNOYU4gICAtPiAgMQorZGRjb3Q4ODYgY29tcGFyZXRvdGFsIC0xICAgIC1zTmFOICAgLT4gIDEKK2RkY290ODg3IGNvbXBhcmV0b3RhbCAtMCAgICAtc05hTiAgIC0+ICAxCitkZGNvdDg4OCBjb21wYXJldG90YWwgIDAgICAgLXNOYU4gICAtPiAgMQorZGRjb3Q4ODkgY29tcGFyZXRvdGFsICAxICAgIC1zTmFOICAgLT4gIDEKK2RkY290ODkwIGNvbXBhcmV0b3RhbCAgMTAwMCAtc05hTiAgIC0+ICAxCitkZGNvdDg5MSBjb21wYXJldG90YWwgIEluZiAgLXNOYU4gICAtPiAgMQorZGRjb3Q4OTIgY29tcGFyZXRvdGFsICBOYU4gIC1zTmFOICAgLT4gIDEKK2RkY290ODkzIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgIC0+ICAxCisKKy0tIE5hTnMgd2l0aCBwYXlsb2FkCitkZGNvdDk2MCBjb21wYXJldG90YWwgIE5hTjkgLUluZiAgIC0+ICAxCitkZGNvdDk2MSBjb21wYXJldG90YWwgIE5hTjggIDk5OSAgIC0+ICAxCitkZGNvdDk2MiBjb21wYXJldG90YWwgIE5hTjc3IEluZiAgIC0+ICAxCitkZGNvdDk2MyBjb21wYXJldG90YWwgLU5hTjY3IE5hTjUgIC0+ICAtMQorZGRjb3Q5NjQgY29tcGFyZXRvdGFsIC1JbmYgIC1OYU40ICAtPiAgMQorZGRjb3Q5NjUgY29tcGFyZXRvdGFsIC05OTkgIC1OYU4zMyAtPiAgMQorZGRjb3Q5NjYgY29tcGFyZXRvdGFsICBJbmYgICBOYU4yICAtPiAgLTEKKworZGRjb3Q5NzAgY29tcGFyZXRvdGFsIC1OYU40MSAtTmFONDIgLT4gMQorZGRjb3Q5NzEgY29tcGFyZXRvdGFsICtOYU40MSAtTmFONDIgLT4gMQorZGRjb3Q5NzIgY29tcGFyZXRvdGFsIC1OYU40MSArTmFONDIgLT4gLTEKK2RkY290OTczIGNvbXBhcmV0b3RhbCArTmFONDEgK05hTjQyIC0+IC0xCitkZGNvdDk3NCBjb21wYXJldG90YWwgLU5hTjQyIC1OYU4wMSAtPiAtMQorZGRjb3Q5NzUgY29tcGFyZXRvdGFsICtOYU40MiAtTmFOMDEgLT4gIDEKK2RkY290OTc2IGNvbXBhcmV0b3RhbCAtTmFONDIgK05hTjAxIC0+IC0xCitkZGNvdDk3NyBjb21wYXJldG90YWwgK05hTjQyICtOYU4wMSAtPiAgMQorCitkZGNvdDk4MCBjb21wYXJldG90YWwgLXNOYU43NzEgLXNOYU43NzIgLT4gMQorZGRjb3Q5ODEgY29tcGFyZXRvdGFsICtzTmFONzcxIC1zTmFONzcyIC0+IDEKK2RkY290OTgyIGNvbXBhcmV0b3RhbCAtc05hTjc3MSArc05hTjc3MiAtPiAtMQorZGRjb3Q5ODMgY29tcGFyZXRvdGFsICtzTmFONzcxICtzTmFONzcyIC0+IC0xCitkZGNvdDk4NCBjb21wYXJldG90YWwgLXNOYU43NzIgLXNOYU43NzEgLT4gLTEKK2RkY290OTg1IGNvbXBhcmV0b3RhbCArc05hTjc3MiAtc05hTjc3MSAtPiAgMQorZGRjb3Q5ODYgY29tcGFyZXRvdGFsIC1zTmFONzcyICtzTmFONzcxIC0+IC0xCitkZGNvdDk4NyBjb21wYXJldG90YWwgK3NOYU43NzIgK3NOYU43NzEgLT4gIDEKKworZGRjb3Q5OTEgY29tcGFyZXRvdGFsIC1zTmFOOTkgLUluZiAgICAtPiAtMQorZGRjb3Q5OTIgY29tcGFyZXRvdGFsICBzTmFOOTggLTExICAgICAtPiAgMQorZGRjb3Q5OTMgY29tcGFyZXRvdGFsICBzTmFOOTcgIE5hTiAgICAtPiAtMQorZGRjb3Q5OTQgY29tcGFyZXRvdGFsICBzTmFOMTYgc05hTjk0ICAtPiAtMQorZGRjb3Q5OTUgY29tcGFyZXRvdGFsICBOYU44NSAgc05hTjgzICAtPiAgMQorZGRjb3Q5OTYgY29tcGFyZXRvdGFsIC1JbmYgICAgc05hTjkyICAtPiAtMQorZGRjb3Q5OTcgY29tcGFyZXRvdGFsICAwODggICAgc05hTjgxICAtPiAtMQorZGRjb3Q5OTggY29tcGFyZXRvdGFsICBJbmYgICAgc05hTjkwICAtPiAtMQorZGRjb3Q5OTkgY29tcGFyZXRvdGFsICBOYU4gICAtc05hTjg5ICAtPiAgMQorCistLSBzcHJlYWQgemVyb3MKK2RkY290MTExMCBjb21wYXJldG90YWwgICAwRS0zODMgIDAgICAgICAgLT4gLTEKK2RkY290MTExMSBjb21wYXJldG90YWwgICAwRS0zODMgLTAgICAgICAgLT4gIDEKK2RkY290MTExMiBjb21wYXJldG90YWwgIC0wRS0zODMgIDAgICAgICAgLT4gLTEKK2RkY290MTExMyBjb21wYXJldG90YWwgIC0wRS0zODMgLTAgICAgICAgLT4gIDEKK2RkY290MTExNCBjb21wYXJldG90YWwgICAwRS0zODMgIDBFKzM4NCAgLT4gLTEKK2RkY290MTExNSBjb21wYXJldG90YWwgICAwRS0zODMgLTBFKzM4NCAgLT4gIDEKK2RkY290MTExNiBjb21wYXJldG90YWwgIC0wRS0zODMgIDBFKzM4NCAgLT4gLTEKK2RkY290MTExNyBjb21wYXJldG90YWwgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDEKK2RkY290MTExOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFKzM4NCAgLT4gLTEKK2RkY290MTExOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFKzM4NCAgLT4gIDEKK2RkY290MTEyMCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFKzM4NCAgLT4gLTEKK2RkY290MTEyMSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFKzM4NCAgLT4gIDEKKworZGRjb3QxMTMwIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMCAgICAgICAtPiAgMQorZGRjb3QxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMCAgICAgICAtPiAgMQorZGRjb3QxMTMyIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMCAgICAgICAtPiAtMQorZGRjb3QxMTMzIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMCAgICAgICAtPiAtMQorZGRjb3QxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMQorZGRjb3QxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMEUtMzgzICAtPiAgMQorZGRjb3QxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMEUtMzgzICAtPiAtMQorZGRjb3QxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMEUtMzgzICAtPiAtMQorZGRjb3QxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtMzgzICAtPiAgMQorZGRjb3QxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtMzgzICAtPiAgMQorZGRjb3QxMTQwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUtMzgzICAtPiAtMQorZGRjb3QxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtMzgzICAtPiAtMQorCistLSBOdWxsIHRlc3RzCitkZGNvdDk5OTAgY29tcGFyZXRvdGFsIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRjb3Q5OTkxIGNvbXBhcmV0b3RhbCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVUb3RhbE1hZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKaW5kZXggZjE2NTM3YS4uMDg3YTA5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKQEAgLTEsNzA2ICsxLDcwNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRDb21wYXJlVG90YWxNYWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbjsgYWJzLiB0b3RhbCBvcmRlci0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KLS0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQotLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocw0KLS0tIHRoYW4gY29tcGFyZS4NCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRjdG0wMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwDQotZGRjdG0wMDIgY29tcGFyZXRvdG1hZyAgLTIgIC0xICAgLT4gICAxDQotZGRjdG0wMDMgY29tcGFyZXRvdG1hZyAgLTIgICAwICAgLT4gICAxDQotZGRjdG0wMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxDQotZGRjdG0wMDUgY29tcGFyZXRvdG1hZyAgLTIgICAyICAgLT4gICAwDQotZGRjdG0wMDYgY29tcGFyZXRvdG1hZyAgLTEgIC0yICAgLT4gIC0xDQotZGRjdG0wMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwDQotZGRjdG0wMDggY29tcGFyZXRvdG1hZyAgLTEgICAwICAgLT4gICAxDQotZGRjdG0wMDkgY29tcGFyZXRvdG1hZyAgLTEgICAxICAgLT4gICAwDQotZGRjdG0wMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xDQotZGRjdG0wMTEgY29tcGFyZXRvdG1hZyAgIDAgIC0yICAgLT4gIC0xDQotZGRjdG0wMTIgY29tcGFyZXRvdG1hZyAgIDAgIC0xICAgLT4gIC0xDQotZGRjdG0wMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwDQotZGRjdG0wMTQgY29tcGFyZXRvdG1hZyAgIDAgICAxICAgLT4gIC0xDQotZGRjdG0wMTUgY29tcGFyZXRvdG1hZyAgIDAgICAyICAgLT4gIC0xDQotZGRjdG0wMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xDQotZGRjdG0wMTcgY29tcGFyZXRvdG1hZyAgIDEgIC0xICAgLT4gICAwDQotZGRjdG0wMTggY29tcGFyZXRvdG1hZyAgIDEgICAwICAgLT4gICAxDQotZGRjdG0wMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwDQotZGRjdG0wMjAgY29tcGFyZXRvdG1hZyAgIDEgICAyICAgLT4gIC0xDQotZGRjdG0wMjEgY29tcGFyZXRvdG1hZyAgIDIgIC0yICAgLT4gICAwDQotZGRjdG0wMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxDQotZGRjdG0wMjMgY29tcGFyZXRvdG1hZyAgIDIgICAwICAgLT4gICAxDQotZGRjdG0wMjUgY29tcGFyZXRvdG1hZyAgIDIgICAxICAgLT4gICAxDQotZGRjdG0wMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwDQotDQotZGRjdG0wMzEgY29tcGFyZXRvdG1hZyAgLTIwICAtMjAgICAtPiAgIDANCi1kZGN0bTAzMiBjb21wYXJldG90bWFnICAtMjAgIC0xMCAgIC0+ICAgMQ0KLWRkY3RtMDMzIGNvbXBhcmV0b3RtYWcgIC0yMCAgIDAwICAgLT4gICAxDQotZGRjdG0wMzQgY29tcGFyZXRvdG1hZyAgLTIwICAgMTAgICAtPiAgIDENCi1kZGN0bTAzNSBjb21wYXJldG90bWFnICAtMjAgICAyMCAgIC0+ICAgMA0KLWRkY3RtMDM2IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTIwICAgLT4gIC0xDQotZGRjdG0wMzcgY29tcGFyZXRvdG1hZyAgLTEwICAtMTAgICAtPiAgIDANCi1kZGN0bTAzOCBjb21wYXJldG90bWFnICAtMTAgICAwMCAgIC0+ICAgMQ0KLWRkY3RtMDM5IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDEwICAgLT4gICAwDQotZGRjdG0wNDAgY29tcGFyZXRvdG1hZyAgLTEwICAgMjAgICAtPiAgLTENCi1kZGN0bTA0MSBjb21wYXJldG90bWFnICAgMDAgIC0yMCAgIC0+ICAtMQ0KLWRkY3RtMDQyIGNvbXBhcmV0b3RtYWcgICAwMCAgLTEwICAgLT4gIC0xDQotZGRjdG0wNDMgY29tcGFyZXRvdG1hZyAgIDAwICAgMDAgICAtPiAgIDANCi1kZGN0bTA0NCBjb21wYXJldG90bWFnICAgMDAgICAxMCAgIC0+ICAtMQ0KLWRkY3RtMDQ1IGNvbXBhcmV0b3RtYWcgICAwMCAgIDIwICAgLT4gIC0xDQotZGRjdG0wNDYgY29tcGFyZXRvdG1hZyAgIDEwICAtMjAgICAtPiAgLTENCi1kZGN0bTA0NyBjb21wYXJldG90bWFnICAgMTAgIC0xMCAgIC0+ICAgMA0KLWRkY3RtMDQ4IGNvbXBhcmV0b3RtYWcgICAxMCAgIDAwICAgLT4gICAxDQotZGRjdG0wNDkgY29tcGFyZXRvdG1hZyAgIDEwICAgMTAgICAtPiAgIDANCi1kZGN0bTA1MCBjb21wYXJldG90bWFnICAgMTAgICAyMCAgIC0+ICAtMQ0KLWRkY3RtMDUxIGNvbXBhcmV0b3RtYWcgICAyMCAgLTIwICAgLT4gICAwDQotZGRjdG0wNTIgY29tcGFyZXRvdG1hZyAgIDIwICAtMTAgICAtPiAgIDENCi1kZGN0bTA1MyBjb21wYXJldG90bWFnICAgMjAgICAwMCAgIC0+ICAgMQ0KLWRkY3RtMDU1IGNvbXBhcmV0b3RtYWcgICAyMCAgIDEwICAgLT4gICAxDQotZGRjdG0wNTYgY29tcGFyZXRvdG1hZyAgIDIwICAgMjAgICAtPiAgIDANCi0NCi1kZGN0bTA2MSBjb21wYXJldG90bWFnICAtMi4wICAtMi4wICAgLT4gICAwDQotZGRjdG0wNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQ0KLWRkY3RtMDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDENCi1kZGN0bTA2NCBjb21wYXJldG90bWFnICAtMi4wICAgMS4wICAgLT4gICAxDQotZGRjdG0wNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMA0KLWRkY3RtMDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTENCi1kZGN0bTA2NyBjb21wYXJldG90bWFnICAtMS4wICAtMS4wICAgLT4gICAwDQotZGRjdG0wNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQ0KLWRkY3RtMDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDANCi1kZGN0bTA3MCBjb21wYXJldG90bWFnICAtMS4wICAgMi4wICAgLT4gIC0xDQotZGRjdG0wNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQ0KLWRkY3RtMDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTENCi1kZGN0bTA3MyBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAgLT4gICAwDQotZGRjdG0wNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQ0KLWRkY3RtMDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTENCi1kZGN0bTA3NiBjb21wYXJldG90bWFnICAgMS4wICAtMi4wICAgLT4gIC0xDQotZGRjdG0wNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMA0KLWRkY3RtMDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDENCi1kZGN0bTA3OSBjb21wYXJldG90bWFnICAgMS4wICAgMS4wICAgLT4gICAwDQotZGRjdG0wODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQ0KLWRkY3RtMDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDANCi1kZGN0bTA4MiBjb21wYXJldG90bWFnICAgMi4wICAtMS4wICAgLT4gICAxDQotZGRjdG0wODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQ0KLWRkY3RtMDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDENCi1kZGN0bTA4NiBjb21wYXJldG90bWFnICAgMi4wICAgMi4wICAgLT4gICAwDQotDQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQotZGRjdG0wOTAgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgIC0+ICAgMA0KLWRkY3RtMDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgICAtPiAgIDANCi1kZGN0bTA5MiBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAgLT4gICAwDQotZGRjdG0wOTMgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5RSszODQgIC0+ICAgMA0KLQ0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KLS0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwNCi1kZGN0bTEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwDQotZGRjdG0xMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3ICAgICAgIC0+ICAtMQ0KLWRkY3RtMTAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNy4wICAgICAtPiAgIDENCi1kZGN0bTEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxDQotZGRjdG0xMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3LjAgICAgIC0+ICAgMA0KLWRkY3RtMTA1IGNvbXBhcmV0b3RtYWcgICAwLjdFKzEgNyAgICAgICAtPiAgIDANCi1kZGN0bTEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xDQotZGRjdG0xMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3RSswICAgIC0+ICAtMQ0KLWRkY3RtMTA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNzBFLTEgICAtPiAgIDANCi1kZGN0bTEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwDQotZGRjdG0xMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3MEUtMSAgIC0+ICAgMQ0KLQ0KLWRkY3RtMTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDENCi1kZGN0bTEyMSBjb21wYXJldG90bWFnICAgOC4wICAgIDcgICAgICAgLT4gICAxDQotZGRjdG0xMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICA3LjAgICAgIC0+ICAgMQ0KLWRkY3RtMTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDENCi1kZGN0bTEyNCBjb21wYXJldG90bWFnICAgODBFLTEgIDcuMCAgICAgLT4gICAxDQotZGRjdG0xMjUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA3ICAgICAgIC0+ICAgMQ0KLWRkY3RtMTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDENCi1kZGN0bTEyNyBjb21wYXJldG90bWFnICAgOC4wICAgIDdFKzAgICAgLT4gICAxDQotZGRjdG0xMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICA3MEUtMSAgIC0+ICAgMQ0KLWRkY3RtMTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxDQotZGRjdG0xMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICA3MEUtMSAgIC0+ICAgMQ0KLQ0KLWRkY3RtMTQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOS4wICAgICAtPiAgLTENCi1kZGN0bTE0MSBjb21wYXJldG90bWFnICAgOC4wICAgIDkgICAgICAgLT4gIC0xDQotZGRjdG0xNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICA5LjAgICAgIC0+ICAtMQ0KLWRkY3RtMTQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgOS4wICAgICAtPiAgLTENCi1kZGN0bTE0NCBjb21wYXJldG90bWFnICAgODBFLTEgIDkuMCAgICAgLT4gIC0xDQotZGRjdG0xNDUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA5ICAgICAgIC0+ICAtMQ0KLWRkY3RtMTQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOSAgICAgICAtPiAgLTENCi1kZGN0bTE0NyBjb21wYXJldG90bWFnICAgOC4wICAgIDlFKzAgICAgLT4gIC0xDQotZGRjdG0xNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICA5MEUtMSAgIC0+ICAtMQ0KLWRkY3RtMTQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC45RSsxICAtPiAgLTENCi1kZGN0bTE1MCBjb21wYXJldG90bWFnICAgOCAgICAgIDkwRS0xICAgLT4gIC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLg0KLWRkY3RtMjAwIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNy4wICAgICAtPiAgIDANCi1kZGN0bTIwMSBjb21wYXJldG90bWFnICAtNy4wICAgIDcgICAgICAgLT4gIC0xDQotZGRjdG0yMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQ0KLWRkY3RtMjAzIGNvbXBhcmV0b3RtYWcgIC03RSswICAgNy4wICAgICAtPiAgIDENCi1kZGN0bTIwNCBjb21wYXJldG90bWFnICAtNzBFLTEgIDcuMCAgICAgLT4gICAwDQotZGRjdG0yMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMA0KLWRkY3RtMjA2IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNyAgICAgICAtPiAgLTENCi1kZGN0bTIwNyBjb21wYXJldG90bWFnICAtNy4wICAgIDdFKzAgICAgLT4gIC0xDQotZGRjdG0yMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMA0KLWRkY3RtMjA5IGNvbXBhcmV0b3RtYWcgIC03ICAgICAgMC43RSsxICAtPiAgIDANCi1kZGN0bTIxMCBjb21wYXJldG90bWFnICAtNyAgICAgIDcwRS0xICAgLT4gICAxDQotDQotZGRjdG0yMjAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3LjAgICAgIC0+ICAgMQ0KLWRkY3RtMjIxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNyAgICAgICAtPiAgIDENCi1kZGN0bTIyMiBjb21wYXJldG90bWFnICAtOCAgICAgIDcuMCAgICAgLT4gICAxDQotZGRjdG0yMjMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA3LjAgICAgIC0+ICAgMQ0KLWRkY3RtMjI0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNy4wICAgICAtPiAgIDENCi1kZGN0bTIyNSBjb21wYXJldG90bWFnICAtMC44RSsxIDcgICAgICAgLT4gICAxDQotZGRjdG0yMjYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3ICAgICAgIC0+ICAgMQ0KLWRkY3RtMjI3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgN0UrMCAgICAtPiAgIDENCi1kZGN0bTIyOCBjb21wYXJldG90bWFnICAtOC4wICAgIDcwRS0xICAgLT4gICAxDQotZGRjdG0yMjkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjdFKzEgIC0+ICAgMQ0KLWRkY3RtMjMwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNzBFLTEgICAtPiAgIDENCi0NCi1kZGN0bTI0MCBjb21wYXJldG90bWFnICAtOC4wICAgIDkuMCAgICAgLT4gIC0xDQotZGRjdG0yNDEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5ICAgICAgIC0+ICAtMQ0KLWRkY3RtMjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTENCi1kZGN0bTI0MyBjb21wYXJldG90bWFnICAtOEUrMCAgIDkuMCAgICAgLT4gIC0xDQotZGRjdG0yNDQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5LjAgICAgIC0+ICAtMQ0KLWRkY3RtMjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTENCi1kZGN0bTI0NiBjb21wYXJldG90bWFnICAtODBFLTEgIDkgICAgICAgLT4gIC0xDQotZGRjdG0yNDcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5RSswICAgIC0+ICAtMQ0KLWRkY3RtMjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTENCi1kZGN0bTI0OSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuOUUrMSAgLT4gIC0xDQotZGRjdG0yNTAgY29tcGFyZXRvdG1hZyAgLTggICAgICA5MEUtMSAgIC0+ICAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4NCi1kZGN0bTMwMCBjb21wYXJldG90bWFnICAgNy4wICAgIC03LjAgICAgIC0+ICAgMA0KLWRkY3RtMzAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcgICAgICAgLT4gIC0xDQotZGRjdG0zMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNy4wICAgICAtPiAgIDENCi1kZGN0bTMwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIC03LjAgICAgIC0+ICAgMQ0KLWRkY3RtMzA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcuMCAgICAgLT4gICAwDQotZGRjdG0zMDUgY29tcGFyZXRvdG1hZyAgIC43RSsxICAtNyAgICAgICAtPiAgIDANCi1kZGN0bTMwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIC03ICAgICAgIC0+ICAtMQ0KLWRkY3RtMzA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTdFKzAgICAgLT4gIC0xDQotZGRjdG0zMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNzBFLTEgICAtPiAgIDANCi1kZGN0bTMwOSBjb21wYXJldG90bWFnICAgNyAgICAgIC0uN0UrMSAgIC0+ICAgMA0KLWRkY3RtMzEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcwRS0xICAgLT4gICAxDQotDQotZGRjdG0zMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNy4wICAgICAtPiAgIDENCi1kZGN0bTMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQ0KLWRkY3RtMzIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcuMCAgICAgLT4gICAxDQotZGRjdG0zMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtNy4wICAgICAtPiAgIDENCi1kZGN0bTMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQ0KLWRkY3RtMzI1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTcgICAgICAgLT4gICAxDQotZGRjdG0zMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNyAgICAgICAtPiAgIDENCi1kZGN0bTMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQ0KLWRkY3RtMzI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcwRS0xICAgLT4gICAxDQotZGRjdG0zMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjdFKzEgICAtPiAgIDENCi1kZGN0bTMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQ0KLQ0KLWRkY3RtMzQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkuMCAgICAgLT4gIC0xDQotZGRjdG0zNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTENCi1kZGN0bTM0MiBjb21wYXJldG90bWFnICAgOCAgICAgIC05LjAgICAgIC0+ICAtMQ0KLWRkY3RtMzQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTkuMCAgICAgLT4gIC0xDQotZGRjdG0zNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTENCi1kZGN0bTM0NSBjb21wYXJldG90bWFnICAgLjhFKzEgIC05ICAgICAgIC0+ICAtMQ0KLWRkY3RtMzQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkgICAgICAgLT4gIC0xDQotZGRjdG0zNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTENCi1kZGN0bTM0OCBjb21wYXJldG90bWFnICAgOC4wICAgIC05MEUtMSAgIC0+ICAtMQ0KLWRkY3RtMzQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS45RSsxICAgLT4gIC0xDQotZGRjdG0zNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uDQotZGRjdG00MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwDQotZGRjdG00MDEgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcgICAgICAgLT4gIC0xDQotZGRjdG00MDIgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcuMCAgICAgLT4gICAxDQotZGRjdG00MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxDQotZGRjdG00MDQgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcuMCAgICAgLT4gICAwDQotZGRjdG00MDUgY29tcGFyZXRvdG1hZyAgIC0uN0UrMSAgLTcgICAgICAgLT4gICAwDQotZGRjdG00MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xDQotZGRjdG00MDcgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTdFKzAgICAgLT4gIC0xDQotZGRjdG00MDggY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcwRS0xICAgLT4gICAwDQotZGRjdG00MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwDQotZGRjdG00MTAgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcwRS0xICAgLT4gICAxDQotDQotZGRjdG00MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxDQotZGRjdG00MjEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcgICAgICAgLT4gICAxDQotZGRjdG00MjIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcuMCAgICAgLT4gICAxDQotZGRjdG00MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxDQotZGRjdG00MjQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcuMCAgICAgLT4gICAxDQotZGRjdG00MjUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTcgICAgICAgLT4gICAxDQotZGRjdG00MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxDQotZGRjdG00MjcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTdFKzAgICAgLT4gICAxDQotZGRjdG00MjggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcwRS0xICAgLT4gICAxDQotZGRjdG00MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxDQotZGRjdG00MzAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcwRS0xICAgLT4gICAxDQotDQotZGRjdG00NDAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkuMCAgICAgLT4gIC0xDQotZGRjdG00NDEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkgICAgICAgLT4gIC0xDQotZGRjdG00NDIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkuMCAgICAgLT4gIC0xDQotZGRjdG00NDMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTkuMCAgICAgLT4gIC0xDQotZGRjdG00NDQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkuMCAgICAgLT4gIC0xDQotZGRjdG00NDUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTkgICAgICAgLT4gIC0xDQotZGRjdG00NDYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkgICAgICAgLT4gIC0xDQotZGRjdG00NDcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTlFKzAgICAgLT4gIC0xDQotZGRjdG00NDggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkwRS0xICAgLT4gIC0xDQotZGRjdG00NDkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS45RSsxICAgLT4gIC0xDQotZGRjdG00NTAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkwRS0xICAgLT4gIC0xDQotDQotDQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQotZGRjdG00NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWRkY3RtNDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KLWRkY3RtNDc1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQotZGRjdG00NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KLWRkY3RtNDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWRkY3RtNDc4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xDQotZGRjdG00NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWRkY3RtNDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KLWRkY3RtNDgxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQotZGRjdG00ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KLWRkY3RtNDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMA0KLWRkY3RtNDg3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5ICAtPiAgIDENCi1kZGN0bTQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDENCi1kZGN0bTQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgIC0+ICAgMQ0KLWRkY3RtNDkwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5ICAtPiAgIDENCi1kZGN0bTQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5ICAtPiAgIDENCi1kZGN0bTQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQ0KLWRkY3RtNDkzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5ICAtPiAgIDENCi1kZGN0bTQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDENCi1kZGN0bTQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgIC0+ICAgMQ0KLWRkY3RtNDk2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5ICAtPiAgIDENCi1kZGN0bTQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5ICAtPiAgIDANCi0NCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQotZGRjdG00OTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNyAgICAgLT4gICAxDQotZGRjdG00OTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNiAgICAgLT4gICAxDQotZGRjdG01MDAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNSAgICAgLT4gICAxDQotZGRjdG01MDEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNCAgICAgLT4gICAxDQotZGRjdG01MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxDQotZGRjdG01MDMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMiAgICAgLT4gICAxDQotZGRjdG01MDQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMSAgICAgLT4gICAxDQotZGRjdG01MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxDQotZGRjdG01MDYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS05ICAgICAgLT4gICAxDQotZGRjdG01MDcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS04ICAgICAgLT4gICAxDQotZGRjdG01MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxDQotZGRjdG01MDkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS02ICAgICAgLT4gICAxDQotZGRjdG01MTAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS01ICAgICAgLT4gICAxDQotZGRjdG01MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxDQotZGRjdG01MTIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0zICAgICAgLT4gICAxDQotZGRjdG01MTMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0yICAgICAgLT4gICAxDQotZGRjdG01MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxDQotZGRjdG01MTUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0wICAgICAgLT4gICAwDQotZGRjdG01MTYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxICAgICAgLT4gIC0xDQotZGRjdG01MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xDQotZGRjdG01MTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSszICAgICAgLT4gIC0xDQotZGRjdG01MTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs0ICAgICAgLT4gIC0xDQotZGRjdG01MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xDQotZGRjdG01MjIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs2ICAgICAgLT4gIC0xDQotZGRjdG01MjMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs3ICAgICAgLT4gIC0xDQotZGRjdG01MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xDQotZGRjdG01MjUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs5ICAgICAgLT4gIC0xDQotZGRjdG01MjYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMCAgICAgLT4gIC0xDQotZGRjdG01MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xDQotZGRjdG01MjggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMiAgICAgLT4gIC0xDQotZGRjdG01MjkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMyAgICAgLT4gIC0xDQotZGRjdG01MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xDQotZGRjdG01MzEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNSAgICAgLT4gIC0xDQotZGRjdG01MzIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNiAgICAgLT4gIC0xDQotZGRjdG01MzMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNyAgICAgLT4gIC0xDQotLS0gTFIgc3dhcA0KLWRkY3RtNTM4IGNvbXBhcmV0b3RtYWcgICAgMUUtMTcgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTM5IGNvbXBhcmV0b3RtYWcgICAgMUUtMTYgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTQwIGNvbXBhcmV0b3RtYWcgICAgMUUtMTUgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTQzIGNvbXBhcmV0b3RtYWcgICAgMUUtMTIgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTQ2IGNvbXBhcmV0b3RtYWcgICAgMUUtOSAgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTQ5IGNvbXBhcmV0b3RtYWcgICAgMUUtNiAgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTUyIGNvbXBhcmV0b3RtYWcgICAgMUUtMyAgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQ0KLWRkY3RtNTU1IGNvbXBhcmV0b3RtYWcgICAgMUUtMCAgIDEgICAgICAgIC0+ICAgMA0KLWRkY3RtNTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTU4IGNvbXBhcmV0b3RtYWcgICAgMUUrMyAgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTYyIGNvbXBhcmV0b3RtYWcgICAgMUUrNiAgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTY1IGNvbXBhcmV0b3RtYWcgICAgMUUrOSAgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTY4IGNvbXBhcmV0b3RtYWcgICAgMUUrMTIgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTcxIGNvbXBhcmV0b3RtYWcgICAgMUUrMTUgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTcyIGNvbXBhcmV0b3RtYWcgICAgMUUrMTYgIDEgICAgICAgIC0+ICAgMQ0KLWRkY3RtNTczIGNvbXBhcmV0b3RtYWcgICAgMUUrMTcgIDEgICAgICAgIC0+ICAgMQ0KLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KLWRkY3RtNTc4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAgLT4gICAxDQotZGRjdG01NzkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgICAtPiAgIDENCi1kZGN0bTU4MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgIC0+ICAgMQ0KLWRkY3RtNTgxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAgLT4gICAxDQotZGRjdG01ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDENCi1kZGN0bTU4MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgIC0+ICAgMQ0KLWRkY3RtNTg0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAgLT4gICAxDQotZGRjdG01ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDENCi1kZGN0bTU4NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgIC0+ICAgMQ0KLWRkY3RtNTg3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAgLT4gICAxDQotZGRjdG01ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDENCi1kZGN0bTU4OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgIC0+ICAtMQ0KLWRkY3RtNTkwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAgLT4gIC0xDQotZGRjdG01OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTENCi1kZGN0bTU5MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgIC0+ICAtMQ0KLWRkY3RtNTkzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAgLT4gIC0xDQotZGRjdG01OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTENCi1kZGN0bTU5NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgIC0+ICAtMQ0KLWRkY3RtNTk2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAgLT4gIC0xDQotZGRjdG01OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTENCi1kZGN0bTU5OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgIC0+ICAtMQ0KLWRkY3RtNTk5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAgLT4gIC0xDQotDQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCi1kZGN0bTYwMCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYwMiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYwMyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYwNSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYwNiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYwOCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYwOSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDENCi1kZGN0bTYxMSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wICAgICAgICAgICAtPiAgIDENCi1kZGN0bTYxMiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgICAtPiAgIDENCi1kZGN0bTYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDENCi1kZGN0bTYxNCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgICAtPiAgIDENCi1kZGN0bTYxNSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgICAtPiAgIDENCi1kZGN0bTYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDENCi1kZGN0bTYxNyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgICAtPiAgIDENCi1kZGN0bTYxOCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgICAtPiAgIDENCi1kZGN0bTYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDENCi1kZGN0bTYyMCBjb21wYXJldG90bWFnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYyMSBjb21wYXJldG90bWFnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYyMyBjb21wYXJldG90bWFnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYyNCBjb21wYXJldG90bWFnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYyNiBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYyNyBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYyOSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1ICAtPiAgLTENCi1kZGN0bTYzMCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIgICAgICAgICAgICAtPiAgIDENCi1kZGN0bTYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDENCi1kZGN0bTYzMiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgICAtPiAgIDENCi1kZGN0bTYzMyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgICAtPiAgIDENCi1kZGN0bTYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDENCi1kZGN0bTYzNSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgICAtPiAgIDENCi1kZGN0bTYzNiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgICAtPiAgIDENCi1kZGN0bTYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDENCi1kZGN0bTYzOCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgICAtPiAgIDENCi1kZGN0bTYzOSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwICAtPiAgIDENCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWRkY3RtNjQwIGNvbXBhcmV0b3RtYWcgICAwICAgICAwICAgIC0+ICAgMA0KLWRkY3RtNjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMA0KLWRkY3RtNjQyIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wLjAgIC0+ICAgMQ0KLWRkY3RtNjQzIGNvbXBhcmV0b3RtYWcgICAwICAgICAwLjAgIC0+ICAgMQ0KLWRkY3RtNjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMA0KLWRkY3RtNjQ1IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wICAgIC0+ICAgMA0KLWRkY3RtNjQ2IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wLjAgIC0+ICAgMQ0KLWRkY3RtNjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQ0KLWRkY3RtNjQ4IGNvbXBhcmV0b3RtYWcgICAwLjAgICAwICAgIC0+ICAtMQ0KLWRkY3RtNjQ5IGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wICAgIC0+ICAtMQ0KLWRkY3RtNjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMA0KLWRkY3RtNjUxIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgIC0+ICAgMA0KLWRkY3RtNjUyIGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwICAgIC0+ICAtMQ0KLWRkY3RtNjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQ0KLWRkY3RtNjU0IGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wLjAgIC0+ICAgMA0KLWRkY3RtNjU1IGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwLjAgIC0+ICAgMA0KLQ0KLWRkY3RtNjU2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwLjAgIC0+ICAgMQ0KLWRkY3RtNjU3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwLjAgIC0+ICAgMQ0KLWRkY3RtNjU4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwLjAgIC0+ICAgMQ0KLWRkY3RtNjU5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwLjAgIC0+ICAgMQ0KLWRkY3RtNjYwIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwICAgIC0+ICAgMQ0KLWRkY3RtNjYxIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwICAgIC0+ICAgMQ0KLWRkY3RtNjYyIGNvbXBhcmV0b3RtYWcgICAwRTEgICAwICAgIC0+ICAgMQ0KLWRkY3RtNjYzIGNvbXBhcmV0b3RtYWcgICAwRTIgICAwICAgIC0+ICAgMQ0KLWRkY3RtNjY0IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTEgIC0+ICAgMA0KLWRkY3RtNjY1IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTEgIC0+ICAgMQ0KLWRkY3RtNjY2IGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTEgIC0+ICAgMA0KLWRkY3RtNjY3IGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTEgIC0+ICAgMQ0KLWRkY3RtNjY4IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTIgIC0+ICAtMQ0KLWRkY3RtNjY5IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTIgIC0+ICAgMA0KLWRkY3RtNjcwIGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTIgIC0+ICAtMQ0KLWRkY3RtNjcxIGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTIgIC0+ICAgMA0KLWRkY3RtNjcyIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTEgIC0+ICAgMA0KLWRkY3RtNjczIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTEgIC0+ICAgMQ0KLWRkY3RtNjc0IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTEgIC0+ICAgMA0KLWRkY3RtNjc1IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTEgIC0+ICAgMQ0KLWRkY3RtNjc2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTIgIC0+ICAtMQ0KLWRkY3RtNjc3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTIgIC0+ICAgMA0KLWRkY3RtNjc4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTIgIC0+ICAtMQ0KLWRkY3RtNjc5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTIgIC0+ICAgMA0KLQ0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCi1kZGN0bTY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDANCi1kZGN0bTY4MSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMCAgICAgICAgICAtPiAgIDENCi1kZGN0bTY4MiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAgICAgICAgICAtPiAgIDENCi1kZGN0bTY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDENCi1kZGN0bTY4NCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMCAgICAgICAtPiAgIDENCi1kZGN0bTY4NSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAgICAgICAtPiAgIDENCi1kZGN0bTY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDENCi1kZGN0bTY4NyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMCAgICAtPiAgIDENCi1kZGN0bTY4OCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAgICAtPiAgIDENCi1kZGN0bTY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDENCi1kZGN0bTY5MCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAgIDEyICAtPiAgIDANCi1kZGN0bTY5MSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAgIDEyICAtPiAgLTENCi1kZGN0bTY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTENCi1kZGN0bTY5MyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAgIDEyICAtPiAgLTENCi1kZGN0bTY5NCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAgIDEyICAtPiAgLTENCi1kZGN0bTY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTENCi1kZGN0bTY5NiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAgIDEyICAtPiAgLTENCi1kZGN0bTY5NyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAgIDEyICAtPiAgLTENCi1kZGN0bTY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTENCi1kZGN0bTY5OSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAgIDEyICAtPiAgLTENCi0NCi0tLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcw0KLWRkY3RtNzAxIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMDAgIDEgIC0+ICAgMQ0KLWRkY3RtNzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQ0KLWRkY3RtNzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQ0KLWRkY3RtNzA0IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwICAgIC0+ICAtMQ0KLWRkY3RtNzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQ0KLWRkY3RtNzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQ0KLWRkY3RtNzA3IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MSAgIDEgIC0+ICAgMQ0KLWRkY3RtNzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQ0KLWRkY3RtNzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQ0KLWRkY3RtNzEwIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwMSAgIC0+ICAtMQ0KLWRkY3RtNzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQ0KLWRkY3RtNzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQ0KLWRkY3RtNzEzIGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTEgIDEgIC0+ICAgMQ0KLWRkY3RtNzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQ0KLWRkY3RtNzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQ0KLWRkY3RtNzE2IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MDEgIC0+ICAtMQ0KLWRkY3RtNzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQ0KLWRkY3RtNzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQ0KLQ0KLS0tIG9sZCByZXNpZHVlIGNhc2VzDQotZGRjdG03NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxDQotZGRjdG03NDEgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTkgICAgLT4gICAxDQotZGRjdG03NDIgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OSAgICAgLT4gICAxDQotZGRjdG03NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxDQotZGRjdG03NDQgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMSAgICAgLT4gIC0xDQotZGRjdG03NDUgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDEgICAgLT4gIC0xDQotZGRjdG03NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xDQotZGRjdG03NTAgY29tcGFyZXRvdG1hZyAgMC45OTk5OTk5ICAxICAgLT4gIC0xDQotZGRjdG03NTEgY29tcGFyZXRvdG1hZyAgMC45OTk5OTkgICAxICAgLT4gIC0xDQotZGRjdG03NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xDQotZGRjdG03NTMgY29tcGFyZXRvdG1hZyAgMS4wMDAwICAgICAxICAgLT4gIC0xDQotZGRjdG03NTQgY29tcGFyZXRvdG1hZyAgMS4wMDAwMSAgICAxICAgLT4gICAxDQotZGRjdG03NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxDQotZGRjdG03NTYgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDAxICAxICAgLT4gICAxDQotDQotLS0gU3BlY2lhbHMNCi1kZGN0bTc4MCBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMA0KLWRkY3RtNzgxIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEwMDAgIC0+ICAxDQotZGRjdG03ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDENCi1kZGN0bTc4MyBjb21wYXJldG90bWFnICBJbmYgIC0wICAgICAtPiAgMQ0KLWRkY3RtNzg0IGNvbXBhcmV0b3RtYWcgIEluZiAgIDAgICAgIC0+ICAxDQotZGRjdG03ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDENCi1kZGN0bTc4NiBjb21wYXJldG90bWFnICBJbmYgICAxMDAwICAtPiAgMQ0KLWRkY3RtNzg3IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwDQotZGRjdG03ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTENCi1kZGN0bTc4OSBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMA0KLWRkY3RtNzkwIGNvbXBhcmV0b3RtYWcgLTEgICAgIEluZiAgIC0+IC0xDQotZGRjdG03OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTENCi1kZGN0bTc5MiBjb21wYXJldG90bWFnICAwICAgICBJbmYgICAtPiAtMQ0KLWRkY3RtNzkzIGNvbXBhcmV0b3RtYWcgIDEgICAgIEluZiAgIC0+IC0xDQotZGRjdG03OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTENCi1kZGN0bTc5NSBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMA0KLQ0KLWRkY3RtODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwDQotZGRjdG04MDEgY29tcGFyZXRvdG1hZyAtSW5mICAtMTAwMCAgLT4gIDENCi1kZGN0bTgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQ0KLWRkY3RtODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxDQotZGRjdG04MDQgY29tcGFyZXRvdG1hZyAtSW5mICAgMCAgICAgLT4gIDENCi1kZGN0bTgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQ0KLWRkY3RtODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxDQotZGRjdG04MDcgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDANCi1kZGN0bTgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMA0KLWRkY3RtODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xDQotZGRjdG04MTAgY29tcGFyZXRvdG1hZyAtMSAgICAtSW5mICAgLT4gLTENCi1kZGN0bTgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQ0KLWRkY3RtODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xDQotZGRjdG04MTMgY29tcGFyZXRvdG1hZyAgMSAgICAtSW5mICAgLT4gLTENCi1kZGN0bTgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQ0KLWRkY3RtODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwDQotDQotZGRjdG04MjEgY29tcGFyZXRvdG1hZyAgTmFOIC1JbmYgICAgLT4gIDENCi1kZGN0bTgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQ0KLWRkY3RtODIzIGNvbXBhcmV0b3RtYWcgIE5hTiAtMSAgICAgIC0+ICAxDQotZGRjdG04MjQgY29tcGFyZXRvdG1hZyAgTmFOIC0wICAgICAgLT4gIDENCi1kZGN0bTgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQ0KLWRkY3RtODI2IGNvbXBhcmV0b3RtYWcgIE5hTiAgMSAgICAgIC0+ICAxDQotZGRjdG04MjcgY29tcGFyZXRvdG1hZyAgTmFOICAxMDAwICAgLT4gIDENCi1kZGN0bTgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQ0KLWRkY3RtODI5IGNvbXBhcmV0b3RtYWcgIE5hTiAgTmFOICAgIC0+ICAwDQotZGRjdG04MzAgY29tcGFyZXRvdG1hZyAtSW5mICBOYU4gICAgLT4gIC0xDQotZGRjdG04MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xDQotZGRjdG04MzIgY29tcGFyZXRvdG1hZyAtMSAgICBOYU4gICAgLT4gIC0xDQotZGRjdG04MzMgY29tcGFyZXRvdG1hZyAtMCAgICBOYU4gICAgLT4gIC0xDQotZGRjdG04MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xDQotZGRjdG04MzUgY29tcGFyZXRvdG1hZyAgMSAgICBOYU4gICAgLT4gIC0xDQotZGRjdG04MzYgY29tcGFyZXRvdG1hZyAgMTAwMCBOYU4gICAgLT4gIC0xDQotZGRjdG04MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xDQotZGRjdG04MzggY29tcGFyZXRvdG1hZyAtTmFOIC1OYU4gICAgLT4gIDANCi1kZGN0bTgzOSBjb21wYXJldG90bWFnICtOYU4gLU5hTiAgICAtPiAgMA0KLWRkY3RtODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwDQotDQotZGRjdG04NDEgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgLT4gIDANCi1kZGN0bTg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTENCi1kZGN0bTg0MyBjb21wYXJldG90bWFnICBzTmFOIC1JbmYgICAtPiAgMQ0KLWRkY3RtODQ0IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEwMDAgIC0+ICAxDQotZGRjdG04NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDENCi1kZGN0bTg0NiBjb21wYXJldG90bWFnICBzTmFOIC0wICAgICAtPiAgMQ0KLWRkY3RtODQ3IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDAgICAgIC0+ICAxDQotZGRjdG04NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDENCi1kZGN0bTg0OSBjb21wYXJldG90bWFnICBzTmFOICAxMDAwICAtPiAgMQ0KLWRkY3RtODUwIGNvbXBhcmV0b3RtYWcgIHNOYU4gIE5hTiAgIC0+ICAtMQ0KLWRkY3RtODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwDQotDQotZGRjdG04NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDANCi1kZGN0bTg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQ0KLWRkY3RtODU0IGNvbXBhcmV0b3RtYWcgLUluZiAgc05hTiAgIC0+ICAtMQ0KLWRkY3RtODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQ0KLWRkY3RtODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQ0KLWRkY3RtODU3IGNvbXBhcmV0b3RtYWcgLTAgICAgc05hTiAgIC0+ICAtMQ0KLWRkY3RtODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQ0KLWRkY3RtODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQ0KLWRkY3RtODYwIGNvbXBhcmV0b3RtYWcgIDEwMDAgc05hTiAgIC0+ICAtMQ0KLWRkY3RtODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQ0KLWRkY3RtODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxDQotZGRjdG04NjMgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDANCi0NCi1kZGN0bTg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDANCi1kZGN0bTg3MiBjb21wYXJldG90bWFnICAtc05hTiAtTmFOICAgLT4gIC0xDQotZGRjdG04NzMgY29tcGFyZXRvdG1hZyAgLXNOYU4gLUluZiAgIC0+ICAxDQotZGRjdG04NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxDQotZGRjdG04NzUgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEgICAgIC0+ICAxDQotZGRjdG04NzYgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTAgICAgIC0+ICAxDQotZGRjdG04NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxDQotZGRjdG04NzggY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEgICAgIC0+ICAxDQotZGRjdG04NzkgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEwMDAgIC0+ICAxDQotZGRjdG04ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQ0KLWRkY3RtODgxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIHNOYU4gICAtPiAgMA0KLQ0KLWRkY3RtODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMA0KLWRkY3RtODgzIGNvbXBhcmV0b3RtYWcgLU5hTiAgLXNOYU4gICAtPiAgMQ0KLWRkY3RtODg0IGNvbXBhcmV0b3RtYWcgLUluZiAgLXNOYU4gICAtPiAgLTENCi1kZGN0bTg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xDQotZGRjdG04ODYgY29tcGFyZXRvdG1hZyAtMSAgICAtc05hTiAgIC0+ICAtMQ0KLWRkY3RtODg3IGNvbXBhcmV0b3RtYWcgLTAgICAgLXNOYU4gICAtPiAgLTENCi1kZGN0bTg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xDQotZGRjdG04ODkgY29tcGFyZXRvdG1hZyAgMSAgICAtc05hTiAgIC0+ICAtMQ0KLWRkY3RtODkwIGNvbXBhcmV0b3RtYWcgIDEwMDAgLXNOYU4gICAtPiAgLTENCi1kZGN0bTg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xDQotZGRjdG04OTIgY29tcGFyZXRvdG1hZyAgTmFOICAtc05hTiAgIC0+ICAxDQotZGRjdG04OTMgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgIC0+ICAwDQotDQotLS0gTmFOcyB3aXRoIHBheWxvYWQNCi1kZGN0bTk2MCBjb21wYXJldG90bWFnICBOYU45IC1JbmYgICAtPiAgMQ0KLWRkY3RtOTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxDQotZGRjdG05NjIgY29tcGFyZXRvdG1hZyAgTmFONzcgSW5mICAgLT4gIDENCi1kZGN0bTk2MyBjb21wYXJldG90bWFnIC1OYU42NyBOYU41ICAtPiAgMQ0KLWRkY3RtOTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQ0KLWRkY3RtOTY1IGNvbXBhcmV0b3RtYWcgLTk5OSAgLU5hTjMzIC0+ICAtMQ0KLWRkY3RtOTY2IGNvbXBhcmV0b3RtYWcgIEluZiAgIE5hTjIgIC0+ICAtMQ0KLQ0KLWRkY3RtOTcwIGNvbXBhcmV0b3RtYWcgLU5hTjQxIC1OYU40MiAtPiAtMQ0KLWRkY3RtOTcxIGNvbXBhcmV0b3RtYWcgK05hTjQxIC1OYU40MiAtPiAtMQ0KLWRkY3RtOTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQ0KLWRkY3RtOTczIGNvbXBhcmV0b3RtYWcgK05hTjQxICtOYU40MiAtPiAtMQ0KLWRkY3RtOTc0IGNvbXBhcmV0b3RtYWcgLU5hTjQyIC1OYU4wMSAtPiAgMQ0KLWRkY3RtOTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQ0KLWRkY3RtOTc2IGNvbXBhcmV0b3RtYWcgLU5hTjQyICtOYU4wMSAtPiAgMQ0KLWRkY3RtOTc3IGNvbXBhcmV0b3RtYWcgK05hTjQyICtOYU4wMSAtPiAgMQ0KLQ0KLWRkY3RtOTgwIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgLXNOYU43NzIgLT4gLTENCi1kZGN0bTk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xDQotZGRjdG05ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWRkY3RtOTgzIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgK3NOYU43NzIgLT4gLTENCi1kZGN0bTk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxDQotZGRjdG05ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQ0KLWRkY3RtOTg2IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgK3NOYU43NzEgLT4gIDENCi1kZGN0bTk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQotDQotZGRjdG05OTEgY29tcGFyZXRvdG1hZyAtc05hTjk5IC1JbmYgICAgLT4gIDENCi1kZGN0bTk5MiBjb21wYXJldG90bWFnICBzTmFOOTggLTExICAgICAtPiAgMQ0KLWRkY3RtOTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xDQotZGRjdG05OTQgY29tcGFyZXRvdG1hZyAgc05hTjE2IHNOYU45NCAgLT4gLTENCi1kZGN0bTk5NSBjb21wYXJldG90bWFnICBOYU44NSAgc05hTjgzICAtPiAgMQ0KLWRkY3RtOTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xDQotZGRjdG05OTcgY29tcGFyZXRvdG1hZyAgMDg4ICAgIHNOYU44MSAgLT4gLTENCi1kZGN0bTk5OCBjb21wYXJldG90bWFnICBJbmYgICAgc05hTjkwICAtPiAtMQ0KLWRkY3RtOTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQotDQotLS0gc3ByZWFkIHplcm9zDQotZGRjdG0xMTEwIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDAgICAgICAgIC0+ICAtMQ0KLWRkY3RtMTExMSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wICAgICAgICAtPiAgLTENCi1kZGN0bTExMTIgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAgMCAgICAgICAgLT4gIC0xDQotZGRjdG0xMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTAgICAgICAgIC0+ICAtMQ0KLWRkY3RtMTExNCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwRSszODQgICAtPiAgLTENCi1kZGN0bTExMTUgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAtMEUrMzg0ICAgLT4gIC0xDQotZGRjdG0xMTE2IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDBFKzM4NCAgIC0+ICAtMQ0KLWRkY3RtMTExNyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wRSszODQgICAtPiAgLTENCi1kZGN0bTExMTggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUrMzg0ICAgLT4gIC0xDQotZGRjdG0xMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzM4NCAgIC0+ICAtMQ0KLWRkY3RtMTEyMCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRSszODQgICAtPiAgLTENCi1kZGN0bTExMjEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUrMzg0ICAgLT4gIC0xDQotDQotZGRjdG0xMTMwIGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDAgICAgICAgIC0+ICAgMQ0KLWRkY3RtMTEzMSBjb21wYXJldG90bWFnICAgMEUrMzg0IC0wICAgICAgICAtPiAgIDENCi1kZGN0bTExMzIgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAgMCAgICAgICAgLT4gICAxDQotZGRjdG0xMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTAgICAgICAgIC0+ICAgMQ0KLWRkY3RtMTEzNCBjb21wYXJldG90bWFnICAgMEUrMzg0ICAwRS0zODMgICAtPiAgIDENCi1kZGN0bTExMzUgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAtMEUtMzgzICAgLT4gICAxDQotZGRjdG0xMTM2IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDBFLTM4MyAgIC0+ICAgMQ0KLWRkY3RtMTEzNyBjb21wYXJldG90bWFnICAtMEUrMzg0IC0wRS0zODMgICAtPiAgIDENCi1kZGN0bTExMzggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUtMzgzICAgLT4gICAxDQotZGRjdG0xMTM5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFLTM4MyAgIC0+ICAgMQ0KLWRkY3RtMTE0MCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRS0zODMgICAtPiAgIDENCi1kZGN0bTExNDEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUtMzgzICAgLT4gICAxDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkY3RtOTk5MCBjb21wYXJldG90bWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY3RtOTk5MSBjb21wYXJldG90bWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRDb21wYXJlVG90YWxNYWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbjsgYWJzLiB0b3RhbCBvcmRlci0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwKKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdAorLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4KKy0tIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMKKy0tIHRoYW4gY29tcGFyZS4KKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkY3RtMDAxIGNvbXBhcmV0b3RtYWcgIC0yICAtMiAgIC0+ICAgMAorZGRjdG0wMDIgY29tcGFyZXRvdG1hZyAgLTIgIC0xICAgLT4gICAxCitkZGN0bTAwMyBjb21wYXJldG90bWFnICAtMiAgIDAgICAtPiAgIDEKK2RkY3RtMDA0IGNvbXBhcmV0b3RtYWcgIC0yICAgMSAgIC0+ICAgMQorZGRjdG0wMDUgY29tcGFyZXRvdG1hZyAgLTIgICAyICAgLT4gICAwCitkZGN0bTAwNiBjb21wYXJldG90bWFnICAtMSAgLTIgICAtPiAgLTEKK2RkY3RtMDA3IGNvbXBhcmV0b3RtYWcgIC0xICAtMSAgIC0+ICAgMAorZGRjdG0wMDggY29tcGFyZXRvdG1hZyAgLTEgICAwICAgLT4gICAxCitkZGN0bTAwOSBjb21wYXJldG90bWFnICAtMSAgIDEgICAtPiAgIDAKK2RkY3RtMDEwIGNvbXBhcmV0b3RtYWcgIC0xICAgMiAgIC0+ICAtMQorZGRjdG0wMTEgY29tcGFyZXRvdG1hZyAgIDAgIC0yICAgLT4gIC0xCitkZGN0bTAxMiBjb21wYXJldG90bWFnICAgMCAgLTEgICAtPiAgLTEKK2RkY3RtMDEzIGNvbXBhcmV0b3RtYWcgICAwICAgMCAgIC0+ICAgMAorZGRjdG0wMTQgY29tcGFyZXRvdG1hZyAgIDAgICAxICAgLT4gIC0xCitkZGN0bTAxNSBjb21wYXJldG90bWFnICAgMCAgIDIgICAtPiAgLTEKK2RkY3RtMDE2IGNvbXBhcmV0b3RtYWcgICAxICAtMiAgIC0+ICAtMQorZGRjdG0wMTcgY29tcGFyZXRvdG1hZyAgIDEgIC0xICAgLT4gICAwCitkZGN0bTAxOCBjb21wYXJldG90bWFnICAgMSAgIDAgICAtPiAgIDEKK2RkY3RtMDE5IGNvbXBhcmV0b3RtYWcgICAxICAgMSAgIC0+ICAgMAorZGRjdG0wMjAgY29tcGFyZXRvdG1hZyAgIDEgICAyICAgLT4gIC0xCitkZGN0bTAyMSBjb21wYXJldG90bWFnICAgMiAgLTIgICAtPiAgIDAKK2RkY3RtMDIyIGNvbXBhcmV0b3RtYWcgICAyICAtMSAgIC0+ICAgMQorZGRjdG0wMjMgY29tcGFyZXRvdG1hZyAgIDIgICAwICAgLT4gICAxCitkZGN0bTAyNSBjb21wYXJldG90bWFnICAgMiAgIDEgICAtPiAgIDEKK2RkY3RtMDI2IGNvbXBhcmV0b3RtYWcgICAyICAgMiAgIC0+ICAgMAorCitkZGN0bTAzMSBjb21wYXJldG90bWFnICAtMjAgIC0yMCAgIC0+ICAgMAorZGRjdG0wMzIgY29tcGFyZXRvdG1hZyAgLTIwICAtMTAgICAtPiAgIDEKK2RkY3RtMDMzIGNvbXBhcmV0b3RtYWcgIC0yMCAgIDAwICAgLT4gICAxCitkZGN0bTAzNCBjb21wYXJldG90bWFnICAtMjAgICAxMCAgIC0+ICAgMQorZGRjdG0wMzUgY29tcGFyZXRvdG1hZyAgLTIwICAgMjAgICAtPiAgIDAKK2RkY3RtMDM2IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTIwICAgLT4gIC0xCitkZGN0bTAzNyBjb21wYXJldG90bWFnICAtMTAgIC0xMCAgIC0+ICAgMAorZGRjdG0wMzggY29tcGFyZXRvdG1hZyAgLTEwICAgMDAgICAtPiAgIDEKK2RkY3RtMDM5IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDEwICAgLT4gICAwCitkZGN0bTA0MCBjb21wYXJldG90bWFnICAtMTAgICAyMCAgIC0+ICAtMQorZGRjdG0wNDEgY29tcGFyZXRvdG1hZyAgIDAwICAtMjAgICAtPiAgLTEKK2RkY3RtMDQyIGNvbXBhcmV0b3RtYWcgICAwMCAgLTEwICAgLT4gIC0xCitkZGN0bTA0MyBjb21wYXJldG90bWFnICAgMDAgICAwMCAgIC0+ICAgMAorZGRjdG0wNDQgY29tcGFyZXRvdG1hZyAgIDAwICAgMTAgICAtPiAgLTEKK2RkY3RtMDQ1IGNvbXBhcmV0b3RtYWcgICAwMCAgIDIwICAgLT4gIC0xCitkZGN0bTA0NiBjb21wYXJldG90bWFnICAgMTAgIC0yMCAgIC0+ICAtMQorZGRjdG0wNDcgY29tcGFyZXRvdG1hZyAgIDEwICAtMTAgICAtPiAgIDAKK2RkY3RtMDQ4IGNvbXBhcmV0b3RtYWcgICAxMCAgIDAwICAgLT4gICAxCitkZGN0bTA0OSBjb21wYXJldG90bWFnICAgMTAgICAxMCAgIC0+ICAgMAorZGRjdG0wNTAgY29tcGFyZXRvdG1hZyAgIDEwICAgMjAgICAtPiAgLTEKK2RkY3RtMDUxIGNvbXBhcmV0b3RtYWcgICAyMCAgLTIwICAgLT4gICAwCitkZGN0bTA1MiBjb21wYXJldG90bWFnICAgMjAgIC0xMCAgIC0+ICAgMQorZGRjdG0wNTMgY29tcGFyZXRvdG1hZyAgIDIwICAgMDAgICAtPiAgIDEKK2RkY3RtMDU1IGNvbXBhcmV0b3RtYWcgICAyMCAgIDEwICAgLT4gICAxCitkZGN0bTA1NiBjb21wYXJldG90bWFnICAgMjAgICAyMCAgIC0+ICAgMAorCitkZGN0bTA2MSBjb21wYXJldG90bWFnICAtMi4wICAtMi4wICAgLT4gICAwCitkZGN0bTA2MiBjb21wYXJldG90bWFnICAtMi4wICAtMS4wICAgLT4gICAxCitkZGN0bTA2MyBjb21wYXJldG90bWFnICAtMi4wICAgMC4wICAgLT4gICAxCitkZGN0bTA2NCBjb21wYXJldG90bWFnICAtMi4wICAgMS4wICAgLT4gICAxCitkZGN0bTA2NSBjb21wYXJldG90bWFnICAtMi4wICAgMi4wICAgLT4gICAwCitkZGN0bTA2NiBjb21wYXJldG90bWFnICAtMS4wICAtMi4wICAgLT4gIC0xCitkZGN0bTA2NyBjb21wYXJldG90bWFnICAtMS4wICAtMS4wICAgLT4gICAwCitkZGN0bTA2OCBjb21wYXJldG90bWFnICAtMS4wICAgMC4wICAgLT4gICAxCitkZGN0bTA2OSBjb21wYXJldG90bWFnICAtMS4wICAgMS4wICAgLT4gICAwCitkZGN0bTA3MCBjb21wYXJldG90bWFnICAtMS4wICAgMi4wICAgLT4gIC0xCitkZGN0bTA3MSBjb21wYXJldG90bWFnICAgMC4wICAtMi4wICAgLT4gIC0xCitkZGN0bTA3MiBjb21wYXJldG90bWFnICAgMC4wICAtMS4wICAgLT4gIC0xCitkZGN0bTA3MyBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAgLT4gICAwCitkZGN0bTA3NCBjb21wYXJldG90bWFnICAgMC4wICAgMS4wICAgLT4gIC0xCitkZGN0bTA3NSBjb21wYXJldG90bWFnICAgMC4wICAgMi4wICAgLT4gIC0xCitkZGN0bTA3NiBjb21wYXJldG90bWFnICAgMS4wICAtMi4wICAgLT4gIC0xCitkZGN0bTA3NyBjb21wYXJldG90bWFnICAgMS4wICAtMS4wICAgLT4gICAwCitkZGN0bTA3OCBjb21wYXJldG90bWFnICAgMS4wICAgMC4wICAgLT4gICAxCitkZGN0bTA3OSBjb21wYXJldG90bWFnICAgMS4wICAgMS4wICAgLT4gICAwCitkZGN0bTA4MCBjb21wYXJldG90bWFnICAgMS4wICAgMi4wICAgLT4gIC0xCitkZGN0bTA4MSBjb21wYXJldG90bWFnICAgMi4wICAtMi4wICAgLT4gICAwCitkZGN0bTA4MiBjb21wYXJldG90bWFnICAgMi4wICAtMS4wICAgLT4gICAxCitkZGN0bTA4MyBjb21wYXJldG90bWFnICAgMi4wICAgMC4wICAgLT4gICAxCitkZGN0bTA4NSBjb21wYXJldG90bWFnICAgMi4wICAgMS4wICAgLT4gICAxCitkZGN0bTA4NiBjb21wYXJldG90bWFnICAgMi4wICAgMi4wICAgLT4gICAwCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorZGRjdG0wOTAgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgIC0+ICAgMAorZGRjdG0wOTEgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgIC0+ICAgMAorZGRjdG0wOTIgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5RSszODQgIC0+ICAgMAorZGRjdG0wOTMgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5RSszODQgIC0+ICAgMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKKy0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwKK2RkY3RtMTAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNy4wICAgICAtPiAgIDAKK2RkY3RtMTAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNyAgICAgICAtPiAgLTEKK2RkY3RtMTAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMTAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMTA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNy4wICAgICAtPiAgIDAKK2RkY3RtMTA1IGNvbXBhcmV0b3RtYWcgICAwLjdFKzEgNyAgICAgICAtPiAgIDAKK2RkY3RtMTA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNyAgICAgICAtPiAgLTEKK2RkY3RtMTA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgN0UrMCAgICAtPiAgLTEKK2RkY3RtMTA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNzBFLTEgICAtPiAgIDAKK2RkY3RtMTA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgMC43RSsxICAtPiAgIDAKK2RkY3RtMTEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNzBFLTEgICAtPiAgIDEKKworZGRjdG0xMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0xMjEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3ICAgICAgIC0+ICAgMQorZGRjdG0xMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0xMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0xMjQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3LjAgICAgIC0+ICAgMQorZGRjdG0xMjUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA3ICAgICAgIC0+ICAgMQorZGRjdG0xMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3ICAgICAgIC0+ICAgMQorZGRjdG0xMjcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3RSswICAgIC0+ICAgMQorZGRjdG0xMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICA3MEUtMSAgIC0+ICAgMQorZGRjdG0xMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjdFKzEgICAtPiAgIDEKK2RkY3RtMTMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNzBFLTEgICAtPiAgIDEKKworZGRjdG0xNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5LjAgICAgIC0+ICAtMQorZGRjdG0xNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5ICAgICAgIC0+ICAtMQorZGRjdG0xNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICA5LjAgICAgIC0+ICAtMQorZGRjdG0xNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA5LjAgICAgIC0+ICAtMQorZGRjdG0xNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5LjAgICAgIC0+ICAtMQorZGRjdG0xNDUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA5ICAgICAgIC0+ICAtMQorZGRjdG0xNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5ICAgICAgIC0+ICAtMQorZGRjdG0xNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5RSswICAgIC0+ICAtMQorZGRjdG0xNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICA5MEUtMSAgIC0+ICAtMQorZGRjdG0xNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjlFKzEgIC0+ICAtMQorZGRjdG0xNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICA5MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitkZGN0bTIwMCBjb21wYXJldG90bWFnICAtNy4wICAgIDcuMCAgICAgLT4gICAwCitkZGN0bTIwMSBjb21wYXJldG90bWFnICAtNy4wICAgIDcgICAgICAgLT4gIC0xCitkZGN0bTIwMiBjb21wYXJldG90bWFnICAtNyAgICAgIDcuMCAgICAgLT4gICAxCitkZGN0bTIwMyBjb21wYXJldG90bWFnICAtN0UrMCAgIDcuMCAgICAgLT4gICAxCitkZGN0bTIwNCBjb21wYXJldG90bWFnICAtNzBFLTEgIDcuMCAgICAgLT4gICAwCitkZGN0bTIwNSBjb21wYXJldG90bWFnICAtMC43RSsxIDcgICAgICAgLT4gICAwCitkZGN0bTIwNiBjb21wYXJldG90bWFnICAtNzBFLTEgIDcgICAgICAgLT4gIC0xCitkZGN0bTIwNyBjb21wYXJldG90bWFnICAtNy4wICAgIDdFKzAgICAgLT4gIC0xCitkZGN0bTIwOCBjb21wYXJldG90bWFnICAtNy4wICAgIDcwRS0xICAgLT4gICAwCitkZGN0bTIwOSBjb21wYXJldG90bWFnICAtNyAgICAgIDAuN0UrMSAgLT4gICAwCitkZGN0bTIxMCBjb21wYXJldG90bWFnICAtNyAgICAgIDcwRS0xICAgLT4gICAxCisKK2RkY3RtMjIwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMjIxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNyAgICAgICAtPiAgIDEKK2RkY3RtMjIyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMjIzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMjI0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNy4wICAgICAtPiAgIDEKK2RkY3RtMjI1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgNyAgICAgICAtPiAgIDEKK2RkY3RtMjI2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNyAgICAgICAtPiAgIDEKK2RkY3RtMjI3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgN0UrMCAgICAtPiAgIDEKK2RkY3RtMjI4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNzBFLTEgICAtPiAgIDEKK2RkY3RtMjI5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC43RSsxICAtPiAgIDEKK2RkY3RtMjMwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNzBFLTEgICAtPiAgIDEKKworZGRjdG0yNDAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5LjAgICAgIC0+ICAtMQorZGRjdG0yNDEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5ICAgICAgIC0+ICAtMQorZGRjdG0yNDIgY29tcGFyZXRvdG1hZyAgLTggICAgICA5LjAgICAgIC0+ICAtMQorZGRjdG0yNDMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA5LjAgICAgIC0+ICAtMQorZGRjdG0yNDQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5LjAgICAgIC0+ICAtMQorZGRjdG0yNDUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA5ICAgICAgIC0+ICAtMQorZGRjdG0yNDYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5ICAgICAgIC0+ICAtMQorZGRjdG0yNDcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5RSswICAgIC0+ICAtMQorZGRjdG0yNDggY29tcGFyZXRvdG1hZyAgLTguMCAgICA5MEUtMSAgIC0+ICAtMQorZGRjdG0yNDkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjlFKzEgIC0+ICAtMQorZGRjdG0yNTAgY29tcGFyZXRvdG1hZyAgLTggICAgICA5MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitkZGN0bTMwMCBjb21wYXJldG90bWFnICAgNy4wICAgIC03LjAgICAgIC0+ICAgMAorZGRjdG0zMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNyAgICAgICAtPiAgLTEKK2RkY3RtMzAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTMwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIC03LjAgICAgIC0+ICAgMQorZGRjdG0zMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNy4wICAgICAtPiAgIDAKK2RkY3RtMzA1IGNvbXBhcmV0b3RtYWcgICAuN0UrMSAgLTcgICAgICAgLT4gICAwCitkZGN0bTMwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIC03ICAgICAgIC0+ICAtMQorZGRjdG0zMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtN0UrMCAgICAtPiAgLTEKK2RkY3RtMzA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcwRS0xICAgLT4gICAwCitkZGN0bTMwOSBjb21wYXJldG90bWFnICAgNyAgICAgIC0uN0UrMSAgIC0+ICAgMAorZGRjdG0zMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNzBFLTEgICAtPiAgIDEKKworZGRjdG0zMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtMzIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcgICAgICAgLT4gICAxCitkZGN0bTMyMiBjb21wYXJldG90bWFnICAgOCAgICAgIC03LjAgICAgIC0+ICAgMQorZGRjdG0zMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtMzI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcuMCAgICAgLT4gICAxCitkZGN0bTMyNSBjb21wYXJldG90bWFnICAgLjhFKzEgIC03ICAgICAgIC0+ICAgMQorZGRjdG0zMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNyAgICAgICAtPiAgIDEKK2RkY3RtMzI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTdFKzAgICAgLT4gICAxCitkZGN0bTMyOCBjb21wYXJldG90bWFnICAgOC4wICAgIC03MEUtMSAgIC0+ICAgMQorZGRjdG0zMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjdFKzEgICAtPiAgIDEKK2RkY3RtMzMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2RkY3RtMzQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTM0MSBjb21wYXJldG90bWFnICAgOC4wICAgIC05ICAgICAgIC0+ICAtMQorZGRjdG0zNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOS4wICAgICAtPiAgLTEKK2RkY3RtMzQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTM0NCBjb21wYXJldG90bWFnICAgODBFLTEgIC05LjAgICAgIC0+ICAtMQorZGRjdG0zNDUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtOSAgICAgICAtPiAgLTEKK2RkY3RtMzQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkgICAgICAgLT4gIC0xCitkZGN0bTM0NyBjb21wYXJldG90bWFnICAgOC4wICAgIC05RSswICAgIC0+ICAtMQorZGRjdG0zNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOTBFLTEgICAtPiAgLTEKK2RkY3RtMzQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS45RSsxICAgLT4gIC0xCitkZGN0bTM1MCBjb21wYXJldG90bWFnICAgOCAgICAgIC05MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitkZGN0bTQwMCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNy4wICAgICAtPiAgIDAKK2RkY3RtNDAxIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03ICAgICAgIC0+ICAtMQorZGRjdG00MDIgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTQwMyBjb21wYXJldG90bWFnICAgLTdFKzAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtNDA0IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03LjAgICAgIC0+ICAgMAorZGRjdG00MDUgY29tcGFyZXRvdG1hZyAgIC0uN0UrMSAgLTcgICAgICAgLT4gICAwCitkZGN0bTQwNiBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNyAgICAgICAtPiAgLTEKK2RkY3RtNDA3IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03RSswICAgIC0+ICAtMQorZGRjdG00MDggY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcwRS0xICAgLT4gICAwCitkZGN0bTQwOSBjb21wYXJldG90bWFnICAgLTcgICAgICAtLjdFKzEgICAtPiAgIDAKK2RkY3RtNDEwIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkZGN0bTQyMCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtNDIxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03ICAgICAgIC0+ICAgMQorZGRjdG00MjIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTQyMyBjb21wYXJldG90bWFnICAgLThFKzAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtNDI0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03LjAgICAgIC0+ICAgMQorZGRjdG00MjUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTcgICAgICAgLT4gICAxCitkZGN0bTQyNiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNyAgICAgICAtPiAgIDEKK2RkY3RtNDI3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03RSswICAgIC0+ICAgMQorZGRjdG00MjggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcwRS0xICAgLT4gICAxCitkZGN0bTQyOSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjdFKzEgICAtPiAgIDEKK2RkY3RtNDMwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkZGN0bTQ0MCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOS4wICAgICAtPiAgLTEKK2RkY3RtNDQxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05ICAgICAgIC0+ICAtMQorZGRjdG00NDIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTQ0MyBjb21wYXJldG90bWFnICAgLThFKzAgICAtOS4wICAgICAtPiAgLTEKK2RkY3RtNDQ0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05LjAgICAgIC0+ICAtMQorZGRjdG00NDUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTkgICAgICAgLT4gIC0xCitkZGN0bTQ0NiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOSAgICAgICAtPiAgLTEKK2RkY3RtNDQ3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05RSswICAgIC0+ICAtMQorZGRjdG00NDggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkwRS0xICAgLT4gIC0xCitkZGN0bTQ0OSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjlFKzEgICAtPiAgLTEKK2RkY3RtNDUwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05MEUtMSAgIC0+ICAtMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZGRjdG00NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZGRjdG00NzQgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCitkZGN0bTQ3NSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZGRjdG00NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZGRjdG00NzcgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitkZGN0bTQ3OCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZGRjdG00NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZGRjdG00ODAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCitkZGN0bTQ4MSBjb21wYXJldG90bWFnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZGRjdG00ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZGRjdG00ODMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAgLT4gICAwCitkZGN0bTQ4NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAgLT4gICAxCitkZGN0bTQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDEKK2RkY3RtNDg5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAgLT4gICAxCitkZGN0bTQ5MCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAgLT4gICAxCitkZGN0bTQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5ICAtPiAgIDEKK2RkY3RtNDkyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAgLT4gICAxCitkZGN0bTQ5MyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAgLT4gICAxCitkZGN0bTQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDEKK2RkY3RtNDk1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAgLT4gICAxCitkZGN0bTQ5NiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAgLT4gICAxCitkZGN0bTQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5ICAtPiAgIDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZGRjdG00OTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNyAgICAgLT4gICAxCitkZGN0bTQ5OSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE2ICAgICAtPiAgIDEKK2RkY3RtNTAwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTUgICAgIC0+ICAgMQorZGRjdG01MDEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNCAgICAgLT4gICAxCitkZGN0bTUwMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEzICAgICAtPiAgIDEKK2RkY3RtNTAzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTIgICAgIC0+ICAgMQorZGRjdG01MDQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMSAgICAgLT4gICAxCitkZGN0bTUwNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEwICAgICAtPiAgIDEKK2RkY3RtNTA2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOSAgICAgIC0+ICAgMQorZGRjdG01MDcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS04ICAgICAgLT4gICAxCitkZGN0bTUwOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTcgICAgICAtPiAgIDEKK2RkY3RtNTA5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNiAgICAgIC0+ICAgMQorZGRjdG01MTAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS01ICAgICAgLT4gICAxCitkZGN0bTUxMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTQgICAgICAtPiAgIDEKK2RkY3RtNTEyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMyAgICAgIC0+ICAgMQorZGRjdG01MTMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0yICAgICAgLT4gICAxCitkZGN0bTUxNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEgICAgICAtPiAgIDEKK2RkY3RtNTE1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMCAgICAgIC0+ICAgMAorZGRjdG01MTYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxICAgICAgLT4gIC0xCitkZGN0bTUxNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzIgICAgICAtPiAgLTEKK2RkY3RtNTE4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMyAgICAgIC0+ICAtMQorZGRjdG01MTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs0ICAgICAgLT4gIC0xCitkZGN0bTUyMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzUgICAgICAtPiAgLTEKK2RkY3RtNTIyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNiAgICAgIC0+ICAtMQorZGRjdG01MjMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs3ICAgICAgLT4gIC0xCitkZGN0bTUyNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzggICAgICAtPiAgLTEKK2RkY3RtNTI1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOSAgICAgIC0+ICAtMQorZGRjdG01MjYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMCAgICAgLT4gIC0xCitkZGN0bTUyNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzExICAgICAtPiAgLTEKK2RkY3RtNTI4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTIgICAgIC0+ICAtMQorZGRjdG01MjkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMyAgICAgLT4gIC0xCitkZGN0bTUzMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE0ICAgICAtPiAgLTEKK2RkY3RtNTMxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTUgICAgIC0+ICAtMQorZGRjdG01MzIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNiAgICAgLT4gIC0xCitkZGN0bTUzMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE3ICAgICAtPiAgLTEKKy0tIExSIHN3YXAKK2RkY3RtNTM4IGNvbXBhcmV0b3RtYWcgICAgMUUtMTcgIDEgICAgICAgIC0+ICAtMQorZGRjdG01MzkgY29tcGFyZXRvdG1hZyAgICAxRS0xNiAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0MCBjb21wYXJldG90bWFnICAgIDFFLTE1ICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDIgY29tcGFyZXRvdG1hZyAgICAxRS0xMyAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0MyBjb21wYXJldG90bWFnICAgIDFFLTEyICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDUgY29tcGFyZXRvdG1hZyAgICAxRS0xMCAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0NiBjb21wYXJldG90bWFnICAgIDFFLTkgICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDggY29tcGFyZXRvdG1hZyAgICAxRS03ICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0OSBjb21wYXJldG90bWFnICAgIDFFLTYgICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NTEgY29tcGFyZXRvdG1hZyAgICAxRS00ICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU1MiBjb21wYXJldG90bWFnICAgIDFFLTMgICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NTQgY29tcGFyZXRvdG1hZyAgICAxRS0xICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU1NSBjb21wYXJldG90bWFnICAgIDFFLTAgICAxICAgICAgICAtPiAgIDAKK2RkY3RtNTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NTcgY29tcGFyZXRvdG1hZyAgICAxRSsyICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU1OCBjb21wYXJldG90bWFnICAgIDFFKzMgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjEgY29tcGFyZXRvdG1hZyAgICAxRSs1ICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2MiBjb21wYXJldG90bWFnICAgIDFFKzYgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjQgY29tcGFyZXRvdG1hZyAgICAxRSs4ICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2NSBjb21wYXJldG90bWFnICAgIDFFKzkgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjcgY29tcGFyZXRvdG1hZyAgICAxRSsxMSAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2OCBjb21wYXJldG90bWFnICAgIDFFKzEyICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NzAgY29tcGFyZXRvdG1hZyAgICAxRSsxNCAgMSAgICAgICAgLT4gICAxCitkZGN0bTU3MSBjb21wYXJldG90bWFnICAgIDFFKzE1ICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTcyIGNvbXBhcmV0b3RtYWcgICAgMUUrMTYgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NzMgY29tcGFyZXRvdG1hZyAgICAxRSsxNyAgMSAgICAgICAgLT4gICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RkY3RtNTc4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAgLT4gICAxCitkZGN0bTU3OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTYgICAgIC0+ICAgMQorZGRjdG01ODAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgICAtPiAgIDEKK2RkY3RtNTgxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAgLT4gICAxCitkZGN0bTU4MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgIC0+ICAgMQorZGRjdG01ODMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgICAtPiAgIDEKK2RkY3RtNTg0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAgLT4gICAxCitkZGN0bTU4NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgIC0+ICAgMQorZGRjdG01ODYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgICAtPiAgIDEKK2RkY3RtNTg3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAgLT4gICAxCitkZGN0bTU4OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgIC0+ICAgMQorZGRjdG01ODkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgICAtPiAgLTEKK2RkY3RtNTkwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAgLT4gIC0xCitkZGN0bTU5MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgIC0+ICAtMQorZGRjdG01OTIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgICAtPiAgLTEKK2RkY3RtNTkzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAgLT4gIC0xCitkZGN0bTU5NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgIC0+ICAtMQorZGRjdG01OTUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgICAtPiAgLTEKK2RkY3RtNTk2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAgLT4gIC0xCitkZGN0bTU5NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgIC0+ICAtMQorZGRjdG01OTggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgICAtPiAgLTEKK2RkY3RtNTk5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAgLT4gIC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkZGN0bTYwMCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjAxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwMyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjA0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwNiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjA3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwOSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjEwIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgIC0+ICAgMQorZGRjdG02MTEgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAgLT4gICAxCitkZGN0bTYxMiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgICAtPiAgIDEKK2RkY3RtNjEzIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgIC0+ICAgMQorZGRjdG02MTQgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAgLT4gICAxCitkZGN0bTYxNSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgICAtPiAgIDEKK2RkY3RtNjE2IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgIC0+ICAgMQorZGRjdG02MTcgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAgLT4gICAxCitkZGN0bTYxOCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgICAtPiAgIDEKK2RkY3RtNjE5IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgIC0+ICAgMQorZGRjdG02MjAgY29tcGFyZXRvdG1hZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyMSBjb21wYXJldG90bWFnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjIyIGNvbXBhcmV0b3RtYWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjMgY29tcGFyZXRvdG1hZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyNCBjb21wYXJldG90bWFnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjI1IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjYgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyNyBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjI4IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjkgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYzMCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIgICAgICAgICAgICAtPiAgIDEKK2RkY3RtNjMxIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgIC0+ICAgMQorZGRjdG02MzIgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAgLT4gICAxCitkZGN0bTYzMyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgICAtPiAgIDEKK2RkY3RtNjM0IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgIC0+ICAgMQorZGRjdG02MzUgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAgLT4gICAxCitkZGN0bTYzNiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgICAtPiAgIDEKK2RkY3RtNjM3IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgIC0+ICAgMQorZGRjdG02MzggY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAgLT4gICAxCitkZGN0bTYzOSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwICAtPiAgIDEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkY3RtNjQwIGNvbXBhcmV0b3RtYWcgICAwICAgICAwICAgIC0+ICAgMAorZGRjdG02NDEgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAgICAgLT4gICAwCitkZGN0bTY0MiBjb21wYXJldG90bWFnICAgMCAgICAtMC4wICAtPiAgIDEKK2RkY3RtNjQzIGNvbXBhcmV0b3RtYWcgICAwICAgICAwLjAgIC0+ICAgMQorZGRjdG02NDQgY29tcGFyZXRvdG1hZyAgLTAgICAgIDAgICAgLT4gICAwCitkZGN0bTY0NSBjb21wYXJldG90bWFnICAtMCAgICAtMCAgICAtPiAgIDAKK2RkY3RtNjQ2IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wLjAgIC0+ICAgMQorZGRjdG02NDcgY29tcGFyZXRvdG1hZyAgLTAgICAgIDAuMCAgLT4gICAxCitkZGN0bTY0OCBjb21wYXJldG90bWFnICAgMC4wICAgMCAgICAtPiAgLTEKK2RkY3RtNjQ5IGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wICAgIC0+ICAtMQorZGRjdG02NTAgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAuMCAgLT4gICAwCitkZGN0bTY1MSBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAtPiAgIDAKK2RkY3RtNjUyIGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwICAgIC0+ICAtMQorZGRjdG02NTMgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAgICAgLT4gIC0xCitkZGN0bTY1NCBjb21wYXJldG90bWFnICAtMC4wICAtMC4wICAtPiAgIDAKK2RkY3RtNjU1IGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwLjAgIC0+ICAgMAorCitkZGN0bTY1NiBjb21wYXJldG90bWFnICAtMEUxICAgMC4wICAtPiAgIDEKK2RkY3RtNjU3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwLjAgIC0+ICAgMQorZGRjdG02NTggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAuMCAgLT4gICAxCitkZGN0bTY1OSBjb21wYXJldG90bWFnICAgMEUyICAgMC4wICAtPiAgIDEKK2RkY3RtNjYwIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwICAgIC0+ICAgMQorZGRjdG02NjEgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAgICAgLT4gICAxCitkZGN0bTY2MiBjb21wYXJldG90bWFnICAgMEUxICAgMCAgICAtPiAgIDEKK2RkY3RtNjYzIGNvbXBhcmV0b3RtYWcgICAwRTIgICAwICAgIC0+ICAgMQorZGRjdG02NjQgY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMSAgLT4gICAwCitkZGN0bTY2NSBjb21wYXJldG90bWFnICAtMEUyICAtMEUxICAtPiAgIDEKK2RkY3RtNjY2IGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTEgIC0+ICAgMAorZGRjdG02NjcgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMSAgLT4gICAxCitkZGN0bTY2OCBjb21wYXJldG90bWFnICAtMEUxICAtMEUyICAtPiAgLTEKK2RkY3RtNjY5IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTIgIC0+ICAgMAorZGRjdG02NzAgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMiAgLT4gIC0xCitkZGN0bTY3MSBjb21wYXJldG90bWFnICAgMEUyICAtMEUyICAtPiAgIDAKK2RkY3RtNjcyIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTEgIC0+ICAgMAorZGRjdG02NzMgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMSAgLT4gICAxCitkZGN0bTY3NCBjb21wYXJldG90bWFnICAgMEUxICAgMEUxICAtPiAgIDAKK2RkY3RtNjc1IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTEgIC0+ICAgMQorZGRjdG02NzYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMiAgLT4gIC0xCitkZGN0bTY3NyBjb21wYXJldG90bWFnICAtMEUyICAgMEUyICAtPiAgIDAKK2RkY3RtNjc4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTIgIC0+ICAtMQorZGRjdG02NzkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMiAgLT4gICAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RkY3RtNjgwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMiAgICAgICAgICAgIC0+ICAgMAorZGRjdG02ODEgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAgICAgICAgICAgLT4gICAxCitkZGN0bTY4MiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAgICAgICAgICAtPiAgIDEKK2RkY3RtNjgzIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAgICAgICAgIC0+ICAgMQorZGRjdG02ODQgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAgICAgICAgLT4gICAxCitkZGN0bTY4NSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAgICAgICAtPiAgIDEKK2RkY3RtNjg2IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAgICAgIC0+ICAgMQorZGRjdG02ODcgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAgICAgLT4gICAxCitkZGN0bTY4OCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAgICAtPiAgIDEKK2RkY3RtNjg5IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMDAgIC0+ICAgMQorZGRjdG02OTAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgICAxMiAgLT4gICAwCitkZGN0bTY5MSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjkyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgICAgMTIgIC0+ICAtMQorZGRjdG02OTMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgICAxMiAgLT4gIC0xCitkZGN0bTY5NCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjk1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgICAgMTIgIC0+ICAtMQorZGRjdG02OTYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgICAxMiAgLT4gIC0xCitkZGN0bTY5NyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjk4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgICAgMTIgIC0+ICAtMQorZGRjdG02OTkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAgLT4gIC0xCisKKy0tIG9sZCBsb25nIG9wZXJhbmQgY2hlY2tzCitkZGN0bTcwMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAwICAxICAtPiAgIDEKK2RkY3RtNzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQorZGRjdG03MDMgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwICAgMSAgLT4gICAxCitkZGN0bTcwNCBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMCAgICAtPiAgLTEKK2RkY3RtNzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQorZGRjdG03MDYgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAgICAgLT4gIC0xCitkZGN0bTcwNyBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTEgICAxICAtPiAgIDEKK2RkY3RtNzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQorZGRjdG03MDkgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwMSAgMSAgLT4gICAxCitkZGN0bTcxMCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAgLTEKK2RkY3RtNzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQorZGRjdG03MTIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gIC0xCitkZGN0bTcxMyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkxICAxICAtPiAgIDEKK2RkY3RtNzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQorZGRjdG03MTUgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gICAxCitkZGN0bTcxNiBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAgLTEKK2RkY3RtNzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQorZGRjdG03MTggY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gIC0xCisKKy0tIG9sZCByZXNpZHVlIGNhc2VzCitkZGN0bTc0MCBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OTkgICAtPiAgIDEKK2RkY3RtNzQxIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5ICAgIC0+ICAgMQorZGRjdG03NDIgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OSAgICAgLT4gICAxCitkZGN0bTc0MyBjb21wYXJldG90bWFnICAxICAxLjAwMDAgICAgICAtPiAgIDEKK2RkY3RtNzQ0IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDEgICAgIC0+ICAtMQorZGRjdG03NDUgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDEgICAgLT4gIC0xCitkZGN0bTc0NiBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMDEgICAtPiAgLTEKK2RkY3RtNzUwIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5OSAgMSAgIC0+ICAtMQorZGRjdG03NTEgY29tcGFyZXRvdG1hZyAgMC45OTk5OTkgICAxICAgLT4gIC0xCitkZGN0bTc1MiBjb21wYXJldG90bWFnICAwLjk5OTk5ICAgIDEgICAtPiAgLTEKK2RkY3RtNzUzIGNvbXBhcmV0b3RtYWcgIDEuMDAwMCAgICAgMSAgIC0+ICAtMQorZGRjdG03NTQgY29tcGFyZXRvdG1hZyAgMS4wMDAwMSAgICAxICAgLT4gICAxCitkZGN0bTc1NSBjb21wYXJldG90bWFnICAxLjAwMDAwMSAgIDEgICAtPiAgIDEKK2RkY3RtNzU2IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAwMSAgMSAgIC0+ICAgMQorCistLSBTcGVjaWFscworZGRjdG03ODAgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDAKK2RkY3RtNzgxIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEwMDAgIC0+ICAxCitkZGN0bTc4MiBjb21wYXJldG90bWFnICBJbmYgIC0xICAgICAtPiAgMQorZGRjdG03ODMgY29tcGFyZXRvdG1hZyAgSW5mICAtMCAgICAgLT4gIDEKK2RkY3RtNzg0IGNvbXBhcmV0b3RtYWcgIEluZiAgIDAgICAgIC0+ICAxCitkZGN0bTc4NSBjb21wYXJldG90bWFnICBJbmYgICAxICAgICAtPiAgMQorZGRjdG03ODYgY29tcGFyZXRvdG1hZyAgSW5mICAgMTAwMCAgLT4gIDEKK2RkY3RtNzg3IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwCitkZGN0bTc4OCBjb21wYXJldG90bWFnIC0xMDAwICBJbmYgICAtPiAtMQorZGRjdG03ODkgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDAKK2RkY3RtNzkwIGNvbXBhcmV0b3RtYWcgLTEgICAgIEluZiAgIC0+IC0xCitkZGN0bTc5MSBjb21wYXJldG90bWFnIC0wICAgICBJbmYgICAtPiAtMQorZGRjdG03OTIgY29tcGFyZXRvdG1hZyAgMCAgICAgSW5mICAgLT4gLTEKK2RkY3RtNzkzIGNvbXBhcmV0b3RtYWcgIDEgICAgIEluZiAgIC0+IC0xCitkZGN0bTc5NCBjb21wYXJldG90bWFnICAxMDAwICBJbmYgICAtPiAtMQorZGRjdG03OTUgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDAKKworZGRjdG04MDAgY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDAKK2RkY3RtODAxIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEwMDAgIC0+ICAxCitkZGN0bTgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQorZGRjdG04MDMgY29tcGFyZXRvdG1hZyAtSW5mICAtMCAgICAgLT4gIDEKK2RkY3RtODA0IGNvbXBhcmV0b3RtYWcgLUluZiAgIDAgICAgIC0+ICAxCitkZGN0bTgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQorZGRjdG04MDYgY29tcGFyZXRvdG1hZyAtSW5mICAgMTAwMCAgLT4gIDEKK2RkY3RtODA3IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCitkZGN0bTgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMAorZGRjdG04MDkgY29tcGFyZXRvdG1hZyAtMTAwMCAtSW5mICAgLT4gLTEKK2RkY3RtODEwIGNvbXBhcmV0b3RtYWcgLTEgICAgLUluZiAgIC0+IC0xCitkZGN0bTgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQorZGRjdG04MTIgY29tcGFyZXRvdG1hZyAgMCAgICAtSW5mICAgLT4gLTEKK2RkY3RtODEzIGNvbXBhcmV0b3RtYWcgIDEgICAgLUluZiAgIC0+IC0xCitkZGN0bTgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQorZGRjdG04MTUgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDAKKworZGRjdG04MjEgY29tcGFyZXRvdG1hZyAgTmFOIC1JbmYgICAgLT4gIDEKK2RkY3RtODIyIGNvbXBhcmV0b3RtYWcgIE5hTiAtMTAwMCAgIC0+ICAxCitkZGN0bTgyMyBjb21wYXJldG90bWFnICBOYU4gLTEgICAgICAtPiAgMQorZGRjdG04MjQgY29tcGFyZXRvdG1hZyAgTmFOIC0wICAgICAgLT4gIDEKK2RkY3RtODI1IGNvbXBhcmV0b3RtYWcgIE5hTiAgMCAgICAgIC0+ICAxCitkZGN0bTgyNiBjb21wYXJldG90bWFnICBOYU4gIDEgICAgICAtPiAgMQorZGRjdG04MjcgY29tcGFyZXRvdG1hZyAgTmFOICAxMDAwICAgLT4gIDEKK2RkY3RtODI4IGNvbXBhcmV0b3RtYWcgIE5hTiAgSW5mICAgIC0+ICAxCitkZGN0bTgyOSBjb21wYXJldG90bWFnICBOYU4gIE5hTiAgICAtPiAgMAorZGRjdG04MzAgY29tcGFyZXRvdG1hZyAtSW5mICBOYU4gICAgLT4gIC0xCitkZGN0bTgzMSBjb21wYXJldG90bWFnIC0xMDAwIE5hTiAgICAtPiAgLTEKK2RkY3RtODMyIGNvbXBhcmV0b3RtYWcgLTEgICAgTmFOICAgIC0+ICAtMQorZGRjdG04MzMgY29tcGFyZXRvdG1hZyAtMCAgICBOYU4gICAgLT4gIC0xCitkZGN0bTgzNCBjb21wYXJldG90bWFnICAwICAgIE5hTiAgICAtPiAgLTEKK2RkY3RtODM1IGNvbXBhcmV0b3RtYWcgIDEgICAgTmFOICAgIC0+ICAtMQorZGRjdG04MzYgY29tcGFyZXRvdG1hZyAgMTAwMCBOYU4gICAgLT4gIC0xCitkZGN0bTgzNyBjb21wYXJldG90bWFnICBJbmYgIE5hTiAgICAtPiAgLTEKK2RkY3RtODM4IGNvbXBhcmV0b3RtYWcgLU5hTiAtTmFOICAgIC0+ICAwCitkZGN0bTgzOSBjb21wYXJldG90bWFnICtOYU4gLU5hTiAgICAtPiAgMAorZGRjdG04NDAgY29tcGFyZXRvdG1hZyAtTmFOICtOYU4gICAgLT4gIDAKKworZGRjdG04NDEgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgLT4gIDAKK2RkY3RtODQyIGNvbXBhcmV0b3RtYWcgIHNOYU4gLU5hTiAgIC0+ICAtMQorZGRjdG04NDMgY29tcGFyZXRvdG1hZyAgc05hTiAtSW5mICAgLT4gIDEKK2RkY3RtODQ0IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEwMDAgIC0+ICAxCitkZGN0bTg0NSBjb21wYXJldG90bWFnICBzTmFOIC0xICAgICAtPiAgMQorZGRjdG04NDYgY29tcGFyZXRvdG1hZyAgc05hTiAtMCAgICAgLT4gIDEKK2RkY3RtODQ3IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDAgICAgIC0+ICAxCitkZGN0bTg0OCBjb21wYXJldG90bWFnICBzTmFOICAxICAgICAtPiAgMQorZGRjdG04NDkgY29tcGFyZXRvdG1hZyAgc05hTiAgMTAwMCAgLT4gIDEKK2RkY3RtODUwIGNvbXBhcmV0b3RtYWcgIHNOYU4gIE5hTiAgIC0+ICAtMQorZGRjdG04NTEgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDAKKworZGRjdG04NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDAKK2RkY3RtODUzIGNvbXBhcmV0b3RtYWcgLU5hTiAgc05hTiAgIC0+ICAxCitkZGN0bTg1NCBjb21wYXJldG90bWFnIC1JbmYgIHNOYU4gICAtPiAgLTEKK2RkY3RtODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQorZGRjdG04NTYgY29tcGFyZXRvdG1hZyAtMSAgICBzTmFOICAgLT4gIC0xCitkZGN0bTg1NyBjb21wYXJldG90bWFnIC0wICAgIHNOYU4gICAtPiAgLTEKK2RkY3RtODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQorZGRjdG04NTkgY29tcGFyZXRvdG1hZyAgMSAgICBzTmFOICAgLT4gIC0xCitkZGN0bTg2MCBjb21wYXJldG90bWFnICAxMDAwIHNOYU4gICAtPiAgLTEKK2RkY3RtODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQorZGRjdG04NjIgY29tcGFyZXRvdG1hZyAgTmFOICBzTmFOICAgLT4gIDEKK2RkY3RtODYzIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RkY3RtODcxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1zTmFOICAtPiAgMAorZGRjdG04NzIgY29tcGFyZXRvdG1hZyAgLXNOYU4gLU5hTiAgIC0+ICAtMQorZGRjdG04NzMgY29tcGFyZXRvdG1hZyAgLXNOYU4gLUluZiAgIC0+ICAxCitkZGN0bTg3NCBjb21wYXJldG90bWFnICAtc05hTiAtMTAwMCAgLT4gIDEKK2RkY3RtODc1IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xICAgICAtPiAgMQorZGRjdG04NzYgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTAgICAgIC0+ICAxCitkZGN0bTg3NyBjb21wYXJldG90bWFnICAtc05hTiAgMCAgICAgLT4gIDEKK2RkY3RtODc4IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxICAgICAtPiAgMQorZGRjdG04NzkgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEwMDAgIC0+ICAxCitkZGN0bTg4MCBjb21wYXJldG90bWFnICAtc05hTiAgTmFOICAgLT4gIC0xCitkZGN0bTg4MSBjb21wYXJldG90bWFnICAtc05hTiBzTmFOICAgLT4gIDAKKworZGRjdG04ODIgY29tcGFyZXRvdG1hZyAtc05hTiAtc05hTiAgIC0+ICAwCitkZGN0bTg4MyBjb21wYXJldG90bWFnIC1OYU4gIC1zTmFOICAgLT4gIDEKK2RkY3RtODg0IGNvbXBhcmV0b3RtYWcgLUluZiAgLXNOYU4gICAtPiAgLTEKK2RkY3RtODg1IGNvbXBhcmV0b3RtYWcgLTEwMDAgLXNOYU4gICAtPiAgLTEKK2RkY3RtODg2IGNvbXBhcmV0b3RtYWcgLTEgICAgLXNOYU4gICAtPiAgLTEKK2RkY3RtODg3IGNvbXBhcmV0b3RtYWcgLTAgICAgLXNOYU4gICAtPiAgLTEKK2RkY3RtODg4IGNvbXBhcmV0b3RtYWcgIDAgICAgLXNOYU4gICAtPiAgLTEKK2RkY3RtODg5IGNvbXBhcmV0b3RtYWcgIDEgICAgLXNOYU4gICAtPiAgLTEKK2RkY3RtODkwIGNvbXBhcmV0b3RtYWcgIDEwMDAgLXNOYU4gICAtPiAgLTEKK2RkY3RtODkxIGNvbXBhcmV0b3RtYWcgIEluZiAgLXNOYU4gICAtPiAgLTEKK2RkY3RtODkyIGNvbXBhcmV0b3RtYWcgIE5hTiAgLXNOYU4gICAtPiAgMQorZGRjdG04OTMgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgIC0+ICAwCisKKy0tIE5hTnMgd2l0aCBwYXlsb2FkCitkZGN0bTk2MCBjb21wYXJldG90bWFnICBOYU45IC1JbmYgICAtPiAgMQorZGRjdG05NjEgY29tcGFyZXRvdG1hZyAgTmFOOCAgOTk5ICAgLT4gIDEKK2RkY3RtOTYyIGNvbXBhcmV0b3RtYWcgIE5hTjc3IEluZiAgIC0+ICAxCitkZGN0bTk2MyBjb21wYXJldG90bWFnIC1OYU42NyBOYU41ICAtPiAgMQorZGRjdG05NjQgY29tcGFyZXRvdG1hZyAtSW5mICAtTmFONCAgLT4gIC0xCitkZGN0bTk2NSBjb21wYXJldG90bWFnIC05OTkgIC1OYU4zMyAtPiAgLTEKK2RkY3RtOTY2IGNvbXBhcmV0b3RtYWcgIEluZiAgIE5hTjIgIC0+ICAtMQorCitkZGN0bTk3MCBjb21wYXJldG90bWFnIC1OYU40MSAtTmFONDIgLT4gLTEKK2RkY3RtOTcxIGNvbXBhcmV0b3RtYWcgK05hTjQxIC1OYU40MiAtPiAtMQorZGRjdG05NzIgY29tcGFyZXRvdG1hZyAtTmFONDEgK05hTjQyIC0+IC0xCitkZGN0bTk3MyBjb21wYXJldG90bWFnICtOYU40MSArTmFONDIgLT4gLTEKK2RkY3RtOTc0IGNvbXBhcmV0b3RtYWcgLU5hTjQyIC1OYU4wMSAtPiAgMQorZGRjdG05NzUgY29tcGFyZXRvdG1hZyArTmFONDIgLU5hTjAxIC0+ICAxCitkZGN0bTk3NiBjb21wYXJldG90bWFnIC1OYU40MiArTmFOMDEgLT4gIDEKK2RkY3RtOTc3IGNvbXBhcmV0b3RtYWcgK05hTjQyICtOYU4wMSAtPiAgMQorCitkZGN0bTk4MCBjb21wYXJldG90bWFnIC1zTmFONzcxIC1zTmFONzcyIC0+IC0xCitkZGN0bTk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xCitkZGN0bTk4MiBjb21wYXJldG90bWFnIC1zTmFONzcxICtzTmFONzcyIC0+IC0xCitkZGN0bTk4MyBjb21wYXJldG90bWFnICtzTmFONzcxICtzTmFONzcyIC0+IC0xCitkZGN0bTk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxCitkZGN0bTk4NSBjb21wYXJldG90bWFnICtzTmFONzcyIC1zTmFONzcxIC0+ICAxCitkZGN0bTk4NiBjb21wYXJldG90bWFnIC1zTmFONzcyICtzTmFONzcxIC0+ICAxCitkZGN0bTk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxCisKK2RkY3RtOTkxIGNvbXBhcmV0b3RtYWcgLXNOYU45OSAtSW5mICAgIC0+ICAxCitkZGN0bTk5MiBjb21wYXJldG90bWFnICBzTmFOOTggLTExICAgICAtPiAgMQorZGRjdG05OTMgY29tcGFyZXRvdG1hZyAgc05hTjk3ICBOYU4gICAgLT4gLTEKK2RkY3RtOTk0IGNvbXBhcmV0b3RtYWcgIHNOYU4xNiBzTmFOOTQgIC0+IC0xCitkZGN0bTk5NSBjb21wYXJldG90bWFnICBOYU44NSAgc05hTjgzICAtPiAgMQorZGRjdG05OTYgY29tcGFyZXRvdG1hZyAtSW5mICAgIHNOYU45MiAgLT4gLTEKK2RkY3RtOTk3IGNvbXBhcmV0b3RtYWcgIDA4OCAgICBzTmFOODEgIC0+IC0xCitkZGN0bTk5OCBjb21wYXJldG90bWFnICBJbmYgICAgc05hTjkwICAtPiAtMQorZGRjdG05OTkgY29tcGFyZXRvdG1hZyAgTmFOICAgLXNOYU44OSAgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitkZGN0bTExMTAgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAgMCAgICAgICAgLT4gIC0xCitkZGN0bTExMTEgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAtMCAgICAgICAgLT4gIC0xCitkZGN0bTExMTIgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAgMCAgICAgICAgLT4gIC0xCitkZGN0bTExMTMgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAtMCAgICAgICAgLT4gIC0xCitkZGN0bTExMTQgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAgMEUrMzg0ICAgLT4gIC0xCitkZGN0bTExMTUgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAtMEUrMzg0ICAgLT4gIC0xCitkZGN0bTExMTYgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAgMEUrMzg0ICAgLT4gIC0xCitkZGN0bTExMTcgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAtMEUrMzg0ICAgLT4gIC0xCitkZGN0bTExMTggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUrMzg0ICAgLT4gIC0xCitkZGN0bTExMTkgY29tcGFyZXRvdG1hZyAgIDAgICAgICAtMEUrMzg0ICAgLT4gIC0xCitkZGN0bTExMjAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUrMzg0ICAgLT4gIC0xCitkZGN0bTExMjEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUrMzg0ICAgLT4gIC0xCisKK2RkY3RtMTEzMCBjb21wYXJldG90bWFnICAgMEUrMzg0ICAwICAgICAgICAtPiAgIDEKK2RkY3RtMTEzMSBjb21wYXJldG90bWFnICAgMEUrMzg0IC0wICAgICAgICAtPiAgIDEKK2RkY3RtMTEzMiBjb21wYXJldG90bWFnICAtMEUrMzg0ICAwICAgICAgICAtPiAgIDEKK2RkY3RtMTEzMyBjb21wYXJldG90bWFnICAtMEUrMzg0IC0wICAgICAgICAtPiAgIDEKK2RkY3RtMTEzNCBjb21wYXJldG90bWFnICAgMEUrMzg0ICAwRS0zODMgICAtPiAgIDEKK2RkY3RtMTEzNSBjb21wYXJldG90bWFnICAgMEUrMzg0IC0wRS0zODMgICAtPiAgIDEKK2RkY3RtMTEzNiBjb21wYXJldG90bWFnICAtMEUrMzg0ICAwRS0zODMgICAtPiAgIDEKK2RkY3RtMTEzNyBjb21wYXJldG90bWFnICAtMEUrMzg0IC0wRS0zODMgICAtPiAgIDEKK2RkY3RtMTEzOCBjb21wYXJldG90bWFnICAgMCAgICAgICAwRS0zODMgICAtPiAgIDEKK2RkY3RtMTEzOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRS0zODMgICAtPiAgIDEKK2RkY3RtMTE0MCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRS0zODMgICAtPiAgIDEKK2RkY3RtMTE0MSBjb21wYXJldG90bWFnICAtMCAgICAgIC0wRS0zODMgICAtPiAgIDEKKworLS0gTnVsbCB0ZXN0cworZGRjdG05OTkwIGNvbXBhcmV0b3RtYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGN0bTk5OTEgY29tcGFyZXRvdG1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHkuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHkuZGVjVGVzdAppbmRleCBmOTlkODZhLi45YTE3NWM1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weS5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZENvcHkuZGVjVGVzdCAtLSBxdWlldCBkZWNEb3VibGUgY29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZGRjcHkwMDEgY29weSAgICAgICArNy41MCAgLT4gNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1kZGNweTAxMSBjb3B5ICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQ0KLWRkY3B5MDEyIGNvcHkgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWRkY3B5MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTg0KLWRkY3B5MDIyIGNvcHkgICAgICAgIC1OYU4gIC0+IC1OYU4NCi1kZGNweTAyMyBjb3B5ICAgICAgICBzTmFOICAtPiBzTmFODQotZGRjcHkwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotZGRjcHkwMzEgY29weSAgICAgICBOYU4xMCAgLT4gTmFOMTANCi1kZGNweTAzMiBjb3B5ICAgICAgLU5hTjEwICAtPiAtTmFOMTANCi1kZGNweTAzMyBjb3B5ICAgICAgc05hTjEwICAtPiBzTmFOMTANCi1kZGNweTAzNCBjb3B5ICAgICAtc05hTjEwICAtPiAtc05hTjEwDQotZGRjcHkwMzUgY29weSAgICAgICBOYU43ICAgLT4gTmFONw0KLWRkY3B5MDM2IGNvcHkgICAgICAtTmFONyAgIC0+IC1OYU43DQotZGRjcHkwMzcgY29weSAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQ0KLWRkY3B5MDM4IGNvcHkgICAgIC1zTmFOMTAxIC0+IC1zTmFOMTAxDQotDQotLS0gZmluaXRlcw0KLWRkY3B5MTAxIGNvcHkgICAgICAgICAgNyAgIC0+IDcNCi1kZGNweTEwMiBjb3B5ICAgICAgICAgLTcgICAtPiAtNw0KLWRkY3B5MTAzIGNvcHkgICAgICAgICA3NSAgIC0+IDc1DQotZGRjcHkxMDQgY29weSAgICAgICAgLTc1ICAgLT4gLTc1DQotZGRjcHkxMDUgY29weSAgICAgICA3LjUwICAgLT4gNy41MA0KLWRkY3B5MTA2IGNvcHkgICAgICAtNy41MCAgIC0+IC03LjUwDQotZGRjcHkxMDcgY29weSAgICAgICA3LjUwMCAgLT4gNy41MDANCi1kZGNweTEwOCBjb3B5ICAgICAgLTcuNTAwICAtPiAtNy41MDANCi0NCi0tLSB6ZXJvcw0KLWRkY3B5MTExIGNvcHkgICAgICAgICAgMCAgIC0+IDANCi1kZGNweTExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMA0KLWRkY3B5MTEzIGNvcHkgICAgICAgMEUrNCAgIC0+IDBFKzQNCi1kZGNweTExNCBjb3B5ICAgICAgLTBFKzQgICAtPiAtMEUrNA0KLWRkY3B5MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMA0KLWRkY3B5MTE2IGNvcHkgICAgLTAuMDAwMCAgIC0+IC0wLjAwMDANCi1kZGNweTExNyBjb3B5ICAgICAgMEUtMTQxICAtPiAwRS0xNDENCi1kZGNweTExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kZGNweTEyMSBjb3B5ICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4Mg0KLWRkY3B5MTIyIGNvcHkgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4Mg0KLWRkY3B5MTIzIGNvcHkgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxDQotZGRjcHkxMjQgY29weSAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kZGNweTEzMSBjb3B5ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkY3B5MTMyIGNvcHkgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCi1kZGNweTEzMyBjb3B5ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkY3B5MTM0IGNvcHkgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTgNCi0NCi1kZGNweTEzNSBjb3B5ICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OA0KLWRkY3B5MTM2IGNvcHkgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkY3B5MTM3IGNvcHkgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzDQotZGRjcHkxMzggY29weSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvcHkuZGVjVGVzdCAtLSBxdWlldCBkZWNEb3VibGUgY29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RkY3B5MDAxIGNvcHkgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZGRjcHkwMTEgY29weSAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RkY3B5MDEyIGNvcHkgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkY3B5MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTgorZGRjcHkwMjIgY29weSAgICAgICAgLU5hTiAgLT4gLU5hTgorZGRjcHkwMjMgY29weSAgICAgICAgc05hTiAgLT4gc05hTgorZGRjcHkwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZGRjcHkwMzEgY29weSAgICAgICBOYU4xMCAgLT4gTmFOMTAKK2RkY3B5MDMyIGNvcHkgICAgICAtTmFOMTAgIC0+IC1OYU4xMAorZGRjcHkwMzMgY29weSAgICAgIHNOYU4xMCAgLT4gc05hTjEwCitkZGNweTAzNCBjb3B5ICAgICAtc05hTjEwICAtPiAtc05hTjEwCitkZGNweTAzNSBjb3B5ICAgICAgIE5hTjcgICAtPiBOYU43CitkZGNweTAzNiBjb3B5ICAgICAgLU5hTjcgICAtPiAtTmFONworZGRjcHkwMzcgY29weSAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQorZGRjcHkwMzggY29weSAgICAgLXNOYU4xMDEgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworZGRjcHkxMDEgY29weSAgICAgICAgICA3ICAgLT4gNworZGRjcHkxMDIgY29weSAgICAgICAgIC03ICAgLT4gLTcKK2RkY3B5MTAzIGNvcHkgICAgICAgICA3NSAgIC0+IDc1CitkZGNweTEwNCBjb3B5ICAgICAgICAtNzUgICAtPiAtNzUKK2RkY3B5MTA1IGNvcHkgICAgICAgNy41MCAgIC0+IDcuNTAKK2RkY3B5MTA2IGNvcHkgICAgICAtNy41MCAgIC0+IC03LjUwCitkZGNweTEwNyBjb3B5ICAgICAgIDcuNTAwICAtPiA3LjUwMAorZGRjcHkxMDggY29weSAgICAgIC03LjUwMCAgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkZGNweTExMSBjb3B5ICAgICAgICAgIDAgICAtPiAwCitkZGNweTExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMAorZGRjcHkxMTMgY29weSAgICAgICAwRSs0ICAgLT4gMEUrNAorZGRjcHkxMTQgY29weSAgICAgIC0wRSs0ICAgLT4gLTBFKzQKK2RkY3B5MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZGRjcHkxMTYgY29weSAgICAtMC4wMDAwICAgLT4gLTAuMDAwMAorZGRjcHkxMTcgY29weSAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkZGNweTExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZGNweTEyMSBjb3B5ICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRjcHkxMjIgY29weSAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZGNweTEyMyBjb3B5ICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorZGRjcHkxMjQgY29weSAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZGNweTEzMSBjb3B5ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRjcHkxMzIgY29weSAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRjcHkxMzMgY29weSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3B5MTM0IGNvcHkgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTgKKworZGRjcHkxMzUgY29weSAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgKK2RkY3B5MTM2IGNvcHkgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRjcHkxMzcgY29weSAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMKK2RkY3B5MTM4IGNvcHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weUFicy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weUFicy5kZWNUZXN0CmluZGV4IGQ0MzZhMTkuLjQ4MjNjZjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlBYnMuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5QWJzLmRlY1Rlc3QKQEAgLTEsODggKzEsODggQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkQ29weUFicy5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1kZGNwYTAwMSBjb3B5YWJzICAgICAgICs3LjUwICAtPiA3LjUwDQotDQotLS0gSW5maW5pdGllcw0KLWRkY3BhMDExIGNvcHlhYnMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQotZGRjcGEwMTIgY29weWFicyAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kZGNwYTAyMSBjb3B5YWJzICAgICAgICAgTmFOICAtPiBOYU4NCi1kZGNwYTAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4NCi1kZGNwYTAyMyBjb3B5YWJzICAgICAgICBzTmFOICAtPiBzTmFODQotZGRjcGEwMjQgY29weWFicyAgICAgICAtc05hTiAgLT4gc05hTg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1kZGNwYTAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMA0KLWRkY3BhMDMyIGNvcHlhYnMgICAgICAtTmFOMTUgIC0+IE5hTjE1DQotZGRjcGEwMzMgY29weWFicyAgICAgIHNOYU4xNSAgLT4gc05hTjE1DQotZGRjcGEwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwDQotZGRjcGEwMzUgY29weWFicyAgICAgICBOYU43ICAgLT4gTmFONw0KLWRkY3BhMDM2IGNvcHlhYnMgICAgICAtTmFONyAgIC0+IE5hTjcNCi1kZGNwYTAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxDQotZGRjcGEwMzggY29weWFicyAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQ0KLQ0KLS0tIGZpbml0ZXMNCi1kZGNwYTEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3DQotZGRjcGExMDIgY29weWFicyAgICAgICAgIC03ICAgLT4gNw0KLWRkY3BhMTAzIGNvcHlhYnMgICAgICAgICA3NSAgIC0+IDc1DQotZGRjcGExMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUNCi1kZGNwYTEwNSBjb3B5YWJzICAgICAgIDcuMTAgICAtPiA3LjEwDQotZGRjcGExMDYgY29weWFicyAgICAgIC03LjEwICAgLT4gNy4xMA0KLWRkY3BhMTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwDQotZGRjcGExMDggY29weWFicyAgICAgIC03LjUwMCAgLT4gNy41MDANCi0NCi0tLSB6ZXJvcw0KLWRkY3BhMTExIGNvcHlhYnMgICAgICAgICAgMCAgIC0+IDANCi1kZGNwYTExMiBjb3B5YWJzICAgICAgICAgLTAgICAtPiAwDQotZGRjcGExMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNg0KLWRkY3BhMTE0IGNvcHlhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYNCi1kZGNwYTExNSBjb3B5YWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDANCi1kZGNwYTExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCi1kZGNwYTExNyBjb3B5YWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDENCi1kZGNwYTExOCBjb3B5YWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWRkY3BhMTIxIGNvcHlhYnMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyDQotZGRjcGExMjIgY29weWFicyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODINCi1kZGNwYTEyMyBjb3B5YWJzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KLWRkY3BhMTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kZGNwYTEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkY3BhMTMyIGNvcHlhYnMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCi1kZGNwYTEzMyBjb3B5YWJzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkY3BhMTM0IGNvcHlhYnMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTgNCi0NCi1kZGNwYTEzNSBjb3B5YWJzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4DQotZGRjcGExMzYgY29weWFicyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGNwYTEzNyBjb3B5YWJzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzDQotZGRjcGExMzggY29weWFicyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29weUFicy5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRjcGEwMDEgY29weWFicyAgICAgICArNy41MCAgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkZGNwYTAxMSBjb3B5YWJzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorZGRjcGEwMTIgY29weWFicyAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkZGNwYTAyMSBjb3B5YWJzICAgICAgICAgTmFOICAtPiBOYU4KK2RkY3BhMDIyIGNvcHlhYnMgICAgICAgIC1OYU4gIC0+IE5hTgorZGRjcGEwMjMgY29weWFicyAgICAgICAgc05hTiAgLT4gc05hTgorZGRjcGEwMjQgY29weWFicyAgICAgICAtc05hTiAgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZGNwYTAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMAorZGRjcGEwMzIgY29weWFicyAgICAgIC1OYU4xNSAgLT4gTmFOMTUKK2RkY3BhMDMzIGNvcHlhYnMgICAgICBzTmFOMTUgIC0+IHNOYU4xNQorZGRjcGEwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwCitkZGNwYTAzNSBjb3B5YWJzICAgICAgIE5hTjcgICAtPiBOYU43CitkZGNwYTAzNiBjb3B5YWJzICAgICAgLU5hTjcgICAtPiBOYU43CitkZGNwYTAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCitkZGNwYTAzOCBjb3B5YWJzICAgICAtc05hTjEwMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RkY3BhMTAxIGNvcHlhYnMgICAgICAgICAgNyAgIC0+IDcKK2RkY3BhMTAyIGNvcHlhYnMgICAgICAgICAtNyAgIC0+IDcKK2RkY3BhMTAzIGNvcHlhYnMgICAgICAgICA3NSAgIC0+IDc1CitkZGNwYTEwNCBjb3B5YWJzICAgICAgICAtNzUgICAtPiA3NQorZGRjcGExMDUgY29weWFicyAgICAgICA3LjEwICAgLT4gNy4xMAorZGRjcGExMDYgY29weWFicyAgICAgIC03LjEwICAgLT4gNy4xMAorZGRjcGExMDcgY29weWFicyAgICAgICA3LjUwMCAgLT4gNy41MDAKK2RkY3BhMTA4IGNvcHlhYnMgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitkZGNwYTExMSBjb3B5YWJzICAgICAgICAgIDAgICAtPiAwCitkZGNwYTExMiBjb3B5YWJzICAgICAgICAgLTAgICAtPiAwCitkZGNwYTExMyBjb3B5YWJzICAgICAgIDBFKzYgICAtPiAwRSs2CitkZGNwYTExNCBjb3B5YWJzICAgICAgLTBFKzYgICAtPiAwRSs2CitkZGNwYTExNSBjb3B5YWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RkY3BhMTE2IGNvcHlhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZGRjcGExMTcgY29weWFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkZGNwYTExOCBjb3B5YWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkY3BhMTIxIGNvcHlhYnMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZGNwYTEyMiBjb3B5YWJzICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRjcGExMjMgY29weWFicyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKK2RkY3BhMTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZGNwYTEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRjcGExMzIgY29weWFicyAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRjcGExMzMgY29weWFicyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BhMTM0IGNvcHlhYnMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTgKKworZGRjcGExMzUgY29weWFicyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OAorZGRjcGExMzYgY29weWFicyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BhMTM3IGNvcHlhYnMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkY3BhMTM4IGNvcHlhYnMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5TmVnYXRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5TmVnYXRlLmRlY1Rlc3QKaW5kZXggYTRjNDI3NC4uMTIxOTQ1YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weU5lZ2F0ZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlOZWdhdGUuZGVjVGVzdApAQCAtMSw4OCArMSw4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRDb3B5TmVnYXRlLmRlY1Rlc3QgLS0gcXVpZXQgZGVjRG91YmxlIGNvcHkgYW5kIG5lZ2F0ZSAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWRkY3BuMDAxIGNvcHluZWdhdGUgICAgICAgKzcuNTAgIC0+IC03LjUwDQotDQotLS0gSW5maW5pdGllcw0KLWRkY3BuMDExIGNvcHluZWdhdGUgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQ0KLWRkY3BuMDEyIGNvcHluZWdhdGUgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZGRjcG4wMjEgY29weW5lZ2F0ZSAgICAgICAgIE5hTiAgLT4gLU5hTg0KLWRkY3BuMDIyIGNvcHluZWdhdGUgICAgICAgIC1OYU4gIC0+IE5hTg0KLWRkY3BuMDIzIGNvcHluZWdhdGUgICAgICAgIHNOYU4gIC0+IC1zTmFODQotZGRjcG4wMjQgY29weW5lZ2F0ZSAgICAgICAtc05hTiAgLT4gc05hTg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1kZGNwbjAzMSBjb3B5bmVnYXRlICAgICAgIE5hTjEzICAtPiAtTmFOMTMNCi1kZGNwbjAzMiBjb3B5bmVnYXRlICAgICAgLU5hTjEzICAtPiBOYU4xMw0KLWRkY3BuMDMzIGNvcHluZWdhdGUgICAgICBzTmFOMTMgIC0+IC1zTmFOMTMNCi1kZGNwbjAzNCBjb3B5bmVnYXRlICAgICAtc05hTjEzICAtPiBzTmFOMTMNCi1kZGNwbjAzNSBjb3B5bmVnYXRlICAgICAgIE5hTjcwICAtPiAtTmFONzANCi1kZGNwbjAzNiBjb3B5bmVnYXRlICAgICAgLU5hTjcwICAtPiBOYU43MA0KLWRkY3BuMDM3IGNvcHluZWdhdGUgICAgICBzTmFOMTAxIC0+IC1zTmFOMTAxDQotZGRjcG4wMzggY29weW5lZ2F0ZSAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQ0KLQ0KLS0tIGZpbml0ZXMNCi1kZGNwbjEwMSBjb3B5bmVnYXRlICAgICAgICAgIDcgICAtPiAtNw0KLWRkY3BuMTAyIGNvcHluZWdhdGUgICAgICAgICAtNyAgIC0+IDcNCi1kZGNwbjEwMyBjb3B5bmVnYXRlICAgICAgICAgNzUgICAtPiAtNzUNCi1kZGNwbjEwNCBjb3B5bmVnYXRlICAgICAgICAtNzUgICAtPiA3NQ0KLWRkY3BuMTA1IGNvcHluZWdhdGUgICAgICAgNy41MCAgIC0+IC03LjUwDQotZGRjcG4xMDYgY29weW5lZ2F0ZSAgICAgIC03LjUwICAgLT4gNy41MA0KLWRkY3BuMTA3IGNvcHluZWdhdGUgICAgICAgNy41MDAgIC0+IC03LjUwMA0KLWRkY3BuMTA4IGNvcHluZWdhdGUgICAgICAtNy41MDAgIC0+IDcuNTAwDQotDQotLS0gemVyb3MNCi1kZGNwbjExMSBjb3B5bmVnYXRlICAgICAgICAgIDAgICAtPiAtMA0KLWRkY3BuMTEyIGNvcHluZWdhdGUgICAgICAgICAtMCAgIC0+IDANCi1kZGNwbjExMyBjb3B5bmVnYXRlICAgICAgIDBFKzQgICAtPiAtMEUrNA0KLWRkY3BuMTE0IGNvcHluZWdhdGUgICAgICAtMEUrNCAgIC0+IDBFKzQNCi1kZGNwbjExNSBjb3B5bmVnYXRlICAgICAwLjAwMDAgICAtPiAtMC4wMDAwDQotZGRjcG4xMTYgY29weW5lZ2F0ZSAgICAtMC4wMDAwICAgLT4gMC4wMDAwDQotZGRjcG4xMTcgY29weW5lZ2F0ZSAgICAgIDBFLTE0MSAgLT4gLTBFLTE0MQ0KLWRkY3BuMTE4IGNvcHluZWdhdGUgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZGRjcG4xMjEgY29weW5lZ2F0ZSAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyDQotZGRjcG4xMjIgY29weW5lZ2F0ZSAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODINCi1kZGNwbjEyMyBjb3B5bmVnYXRlICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDENCi1kZGNwbjEyNCBjb3B5bmVnYXRlICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRjcG4xMzEgY29weW5lZ2F0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRjcG4xMzIgY29weW5lZ2F0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMNCi1kZGNwbjEzMyBjb3B5bmVnYXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGNwbjEzNCBjb3B5bmVnYXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OA0KLQ0KLWRkY3BuMTM1IGNvcHluZWdhdGUgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTgNCi1kZGNwbjEzNiBjb3B5bmVnYXRlICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkY3BuMTM3IGNvcHluZWdhdGUgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCi1kZGNwbjEzOCBjb3B5bmVnYXRlICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRDb3B5TmVnYXRlLmRlY1Rlc3QgLS0gcXVpZXQgZGVjRG91YmxlIGNvcHkgYW5kIG5lZ2F0ZSAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkZGNwbjAwMSBjb3B5bmVnYXRlICAgICAgICs3LjUwICAtPiAtNy41MAorCistLSBJbmZpbml0aWVzCitkZGNwbjAxMSBjb3B5bmVnYXRlICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkKK2RkY3BuMDEyIGNvcHluZWdhdGUgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRjcG4wMjEgY29weW5lZ2F0ZSAgICAgICAgIE5hTiAgLT4gLU5hTgorZGRjcG4wMjIgY29weW5lZ2F0ZSAgICAgICAgLU5hTiAgLT4gTmFOCitkZGNwbjAyMyBjb3B5bmVnYXRlICAgICAgICBzTmFOICAtPiAtc05hTgorZGRjcG4wMjQgY29weW5lZ2F0ZSAgICAgICAtc05hTiAgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZGNwbjAzMSBjb3B5bmVnYXRlICAgICAgIE5hTjEzICAtPiAtTmFOMTMKK2RkY3BuMDMyIGNvcHluZWdhdGUgICAgICAtTmFOMTMgIC0+IE5hTjEzCitkZGNwbjAzMyBjb3B5bmVnYXRlICAgICAgc05hTjEzICAtPiAtc05hTjEzCitkZGNwbjAzNCBjb3B5bmVnYXRlICAgICAtc05hTjEzICAtPiBzTmFOMTMKK2RkY3BuMDM1IGNvcHluZWdhdGUgICAgICAgTmFONzAgIC0+IC1OYU43MAorZGRjcG4wMzYgY29weW5lZ2F0ZSAgICAgIC1OYU43MCAgLT4gTmFONzAKK2RkY3BuMDM3IGNvcHluZWdhdGUgICAgICBzTmFOMTAxIC0+IC1zTmFOMTAxCitkZGNwbjAzOCBjb3B5bmVnYXRlICAgICAtc05hTjEwMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RkY3BuMTAxIGNvcHluZWdhdGUgICAgICAgICAgNyAgIC0+IC03CitkZGNwbjEwMiBjb3B5bmVnYXRlICAgICAgICAgLTcgICAtPiA3CitkZGNwbjEwMyBjb3B5bmVnYXRlICAgICAgICAgNzUgICAtPiAtNzUKK2RkY3BuMTA0IGNvcHluZWdhdGUgICAgICAgIC03NSAgIC0+IDc1CitkZGNwbjEwNSBjb3B5bmVnYXRlICAgICAgIDcuNTAgICAtPiAtNy41MAorZGRjcG4xMDYgY29weW5lZ2F0ZSAgICAgIC03LjUwICAgLT4gNy41MAorZGRjcG4xMDcgY29weW5lZ2F0ZSAgICAgICA3LjUwMCAgLT4gLTcuNTAwCitkZGNwbjEwOCBjb3B5bmVnYXRlICAgICAgLTcuNTAwICAtPiA3LjUwMAorCistLSB6ZXJvcworZGRjcG4xMTEgY29weW5lZ2F0ZSAgICAgICAgICAwICAgLT4gLTAKK2RkY3BuMTEyIGNvcHluZWdhdGUgICAgICAgICAtMCAgIC0+IDAKK2RkY3BuMTEzIGNvcHluZWdhdGUgICAgICAgMEUrNCAgIC0+IC0wRSs0CitkZGNwbjExNCBjb3B5bmVnYXRlICAgICAgLTBFKzQgICAtPiAwRSs0CitkZGNwbjExNSBjb3B5bmVnYXRlICAgICAwLjAwMDAgICAtPiAtMC4wMDAwCitkZGNwbjExNiBjb3B5bmVnYXRlICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RkY3BuMTE3IGNvcHluZWdhdGUgICAgICAwRS0xNDEgIC0+IC0wRS0xNDEKK2RkY3BuMTE4IGNvcHluZWdhdGUgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRjcG4xMjEgY29weW5lZ2F0ZSAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZGNwbjEyMiBjb3B5bmVnYXRlICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRjcG4xMjMgY29weW5lZ2F0ZSAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxCitkZGNwbjEyNCBjb3B5bmVnYXRlICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRjcG4xMzEgY29weW5lZ2F0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGNwbjEzMiBjb3B5bmVnYXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4MworZGRjcG4xMzMgY29weW5lZ2F0ZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNwbjEzNCBjb3B5bmVnYXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OAorCitkZGNwbjEzNSBjb3B5bmVnYXRlICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4CitkZGNwbjEzNiBjb3B5bmVnYXRlICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRjcG4xMzcgY29weW5lZ2F0ZSAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRjcG4xMzggY29weW5lZ2F0ZSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlTaWduLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5U2lnbi5kZWNUZXN0CmluZGV4IDZhNzgwODMuLmM5OTU0NGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlTaWduLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weVNpZ24uZGVjVGVzdApAQCAtMSwxNzUgKzEsMTc1IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZENvcHlTaWduLmRlY1Rlc3QgLS0gcXVpZXQgZGVjRG91YmxlIGNvcHkgd2l0aCBzaWduIGZyb20gcmhzICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZGRjcHMwMDEgY29weXNpZ24gICAgICAgKzcuNTAgICAgIDExIC0+IDcuNTANCi0NCi0tLSBJbmZpbml0aWVzDQotZGRjcHMwMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIDExIC0+IEluZmluaXR5DQotZGRjcHMwMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIDExIC0+IEluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZGRjcHMwMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIDExIC0+IE5hTg0KLWRkY3BzMDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4NCi1kZGNwczAyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgMTEgLT4gc05hTg0KLWRkY3BzMDI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAxMSAtPiBzTmFODQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWRkY3BzMDMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAxMSAtPiBOYU4xMA0KLWRkY3BzMDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMA0KLWRkY3BzMDMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAxMSAtPiBzTmFOMTANCi1kZGNwczAzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgMTEgLT4gc05hTjEwDQotZGRjcHMwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcNCi1kZGNwczAzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgMTEgLT4gTmFONw0KLWRkY3BzMDM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxDQotZGRjcHMwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDENCi0NCi0tLSBmaW5pdGVzDQotZGRjcHMxMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIDExIC0+IDcNCi1kZGNwczEwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgMTEgLT4gNw0KLWRkY3BzMTAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAxMSAtPiA3NQ0KLWRkY3BzMTA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAxMSAtPiA3NQ0KLWRkY3BzMTA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAxMSAtPiA3LjUwDQotZGRjcHMxMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIDExIC0+IDcuNTANCi1kZGNwczEwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgMTEgLT4gNy41MDANCi1kZGNwczEwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgMTEgLT4gNy41MDANCi0NCi0tLSB6ZXJvcw0KLWRkY3BzMTExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAxMSAtPiAwDQotZGRjcHMxMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIDExIC0+IDANCi1kZGNwczExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNA0KLWRkY3BzMTE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAxMSAtPiAwRSs0DQotZGRjcHMxMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIDExIC0+IDAuMDAwMA0KLWRkY3BzMTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDANCi1kZGNwczExNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgMTEgLT4gMEUtMTQxDQotZGRjcHMxMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIDExIC0+IDBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZGRjcHMxMjEgY29weXNpZ24gIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgyNjgyNjgyDQotZGRjcHMxMjIgY29weXNpZ24gIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgyNjgyNjgyDQotZGRjcHMxMjMgY29weXNpZ24gIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQxMzQxMzQxDQotZGRjcHMxMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kZGNwczEzMSBjb3B5c2lnbiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDExIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZGNwczEzMiBjb3B5c2lnbiAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM4Mw0KLWRkY3BzMTMzIGNvcHlzaWduICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTEgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkY3BzMTM0IGNvcHlzaWduICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzk4DQotDQotZGRjcHMxMzUgY29weXNpZ24gIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAxMSAtPiAxRS0zOTgNCi1kZGNwczEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIDExIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGNwczEzNyBjb3B5c2lnbiAgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM4Mw0KLWRkY3BzMTM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgMTEgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLQ0KLS0tIHJlcGVhdCB3aXRoIG5lZ2F0aXZlIFJIUw0KLQ0KLS0tIEluZmluaXRpZXMNCi1kZGNwczIxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgLTM0IC0+IC1JbmZpbml0eQ0KLWRkY3BzMjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZGRjcHMyMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIC0zNCAtPiAtTmFODQotZGRjcHMyMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIC0zNCAtPiAtTmFODQotZGRjcHMyMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIC0zNCAtPiAtc05hTg0KLWRkY3BzMjI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAtMzQgLT4gLXNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotZGRjcHMyMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIC0zNCAtPiAtTmFOMTANCi1kZGNwczIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMA0KLWRkY3BzMjMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMA0KLWRkY3BzMjM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMA0KLWRkY3BzMjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcNCi1kZGNwczIzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgLTM0IC0+IC1OYU43DQotZGRjcHMyMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQ0KLWRkY3BzMjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDENCi0NCi0tLSBmaW5pdGVzDQotZGRjcHMzMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIC0zNCAtPiAtNw0KLWRkY3BzMzAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAtMzQgLT4gLTcNCi1kZGNwczMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQ0KLWRkY3BzMzA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAtMzQgLT4gLTc1DQotZGRjcHMzMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIC0zNCAtPiAtNy41MA0KLWRkY3BzMzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTANCi1kZGNwczMwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgLTM0IC0+IC03LjUwMA0KLWRkY3BzMzA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAtMzQgLT4gLTcuNTAwDQotDQotLS0gemVyb3MNCi1kZGNwczMxMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgLTM0IC0+IC0wDQotZGRjcHMzMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIC0zNCAtPiAtMA0KLWRkY3BzMzEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAtMzQgLT4gLTBFKzQNCi1kZGNwczMxNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgLTM0IC0+IC0wRSs0DQotZGRjcHMzMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwDQotZGRjcHMzMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwDQotZGRjcHMzMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxDQotZGRjcHMzMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kZGNwczMyMSBjb3B5c2lnbiAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgICAgIC0zNCAtPiAtMjY4MjY4MjY4MjY4MjY4Mg0KLWRkY3BzMzIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgICAgLTM0IC0+IC0yNjgyNjgyNjgyNjgyNjgyDQotZGRjcHMzMjMgY29weXNpZ24gIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgICAtMzQgLT4gLTEzNDEzNDEzNDEzNDEzNDENCi1kZGNwczMyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgIC0zNCAtPiAtMTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRjcHMzMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAtMzQgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZGNwczMzMiBjb3B5c2lnbiAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIC0zNCAtPiAtMUUtMzgzDQotZGRjcHMzMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAtMzQgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGNwczMzNCBjb3B5c2lnbiAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIC0zNCAtPiAtMUUtMzk4DQotDQotZGRjcHMzMzUgY29weXNpZ24gIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM5OA0KLWRkY3BzMzM2IGNvcHlzaWduICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTM0IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRjcHMzMzcgY29weXNpZ24gIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM4Mw0KLWRkY3BzMzM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTM0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotDQotLS0gT3RoZXIga2luZHMgb2YgUkhTDQotZGRjcHM0MDEgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0zNCAtPiAtNzAxDQotZGRjcHM0MDIgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0zNCAtPiAtNzIwDQotZGRjcHM0MDMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0wICAtPiAtNzAxDQotZGRjcHM0MDQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0wICAtPiAtNzIwDQotZGRjcHM0MDUgY29weXNpZ24gICAgICAgICAgNzAxICAgICswICAtPiAgNzAxDQotZGRjcHM0MDYgY29weXNpZ24gICAgICAgICAtNzIwICAgICswICAtPiAgNzIwDQotZGRjcHM0MDcgY29weXNpZ24gICAgICAgICAgNzAxICAgICszNCAtPiAgNzAxDQotZGRjcHM0MDggY29weXNpZ24gICAgICAgICAtNzIwICAgICszNCAtPiAgNzIwDQotDQotZGRjcHM0MTMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1JbmYgIC0+IC03MDENCi1kZGNwczQxNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLUluZiAgLT4gLTcyMA0KLWRkY3BzNDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxDQotZGRjcHM0MTYgY29weXNpZ24gICAgICAgICAtNzIwICAgICtJbmYgIC0+ICA3MjANCi0NCi1kZGNwczQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQ0KLWRkY3BzNDIxIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtTmFOICAtPiAtNzIwDQotZGRjcHM0MjIgY29weXNpZ24gICAgICAgICAgNzAxICAgICtOYU4gIC0+ICA3MDENCi1kZGNwczQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMA0KLWRkY3BzNDI1IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOOCAtPiAgNzIwDQotDQotZGRjcHM0MjYgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1zTmFOICAtPiAtNzAxDQotZGRjcHM0MjcgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1zTmFOICAtPiAtNzIwDQotZGRjcHM0MjggY29weXNpZ24gICAgICAgICAgNzAxICAgICtzTmFOICAtPiAgNzAxDQotZGRjcHM0MjkgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOICAtPiAgNzIwDQotZGRjcHM0MzAgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOMyAtPiAgNzIwDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvcHlTaWduLmRlY1Rlc3QgLS0gcXVpZXQgZGVjRG91YmxlIGNvcHkgd2l0aCBzaWduIGZyb20gcmhzICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RkY3BzMDAxIGNvcHlzaWduICAgICAgICs3LjUwICAgICAxMSAtPiA3LjUwCisKKy0tIEluZmluaXRpZXMKK2RkY3BzMDExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAxMSAtPiBJbmZpbml0eQorZGRjcHMwMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIDExIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRjcHMwMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIDExIC0+IE5hTgorZGRjcHMwMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIDExIC0+IE5hTgorZGRjcHMwMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIDExIC0+IHNOYU4KK2RkY3BzMDI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAxMSAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RkY3BzMDMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAxMSAtPiBOYU4xMAorZGRjcHMwMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIDExIC0+IE5hTjEwCitkZGNwczAzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgMTEgLT4gc05hTjEwCitkZGNwczAzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgMTEgLT4gc05hTjEwCitkZGNwczAzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgMTEgLT4gTmFONworZGRjcHMwMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIDExIC0+IE5hTjcKK2RkY3BzMDM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxCitkZGNwczAzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitkZGNwczEwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgMTEgLT4gNworZGRjcHMxMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIDExIC0+IDcKK2RkY3BzMTAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAxMSAtPiA3NQorZGRjcHMxMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIDExIC0+IDc1CitkZGNwczEwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgMTEgLT4gNy41MAorZGRjcHMxMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIDExIC0+IDcuNTAKK2RkY3BzMTA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAxMSAtPiA3LjUwMAorZGRjcHMxMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIDExIC0+IDcuNTAwCisKKy0tIHplcm9zCitkZGNwczExMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgMTEgLT4gMAorZGRjcHMxMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIDExIC0+IDAKK2RkY3BzMTEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAxMSAtPiAwRSs0CitkZGNwczExNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgMTEgLT4gMEUrNAorZGRjcHMxMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIDExIC0+IDAuMDAwMAorZGRjcHMxMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIDExIC0+IDAuMDAwMAorZGRjcHMxMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIDExIC0+IDBFLTE0MQorZGRjcHMxMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIDExIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRjcHMxMjEgY29weXNpZ24gIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZGNwczEyMiBjb3B5c2lnbiAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgIDExIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkY3BzMTIzIGNvcHlzaWduICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAgMTEgLT4gMTM0MTM0MTM0MTM0MTM0MQorZGRjcHMxMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZGNwczEzMSBjb3B5c2lnbiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDExIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkY3BzMTMyIGNvcHlzaWduICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzgzCitkZGNwczEzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDExIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BzMTM0IGNvcHlzaWduICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzk4CisKK2RkY3BzMTM1IGNvcHlzaWduICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzk4CitkZGNwczEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIDExIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BzMTM3IGNvcHlzaWduICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzgzCitkZGNwczEzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIDExIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKKworLS0gcmVwZWF0IHdpdGggbmVnYXRpdmUgUkhTCisKKy0tIEluZmluaXRpZXMKK2RkY3BzMjExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAtMzQgLT4gLUluZmluaXR5CitkZGNwczIxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgLTM0IC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkY3BzMjIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAtMzQgLT4gLU5hTgorZGRjcHMyMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIC0zNCAtPiAtTmFOCitkZGNwczIyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgLTM0IC0+IC1zTmFOCitkZGNwczIyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgLTM0IC0+IC1zTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RkY3BzMjMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAtMzQgLT4gLU5hTjEwCitkZGNwczIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMAorZGRjcHMyMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwCitkZGNwczIzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKK2RkY3BzMjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2RkY3BzMjM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2RkY3BzMjM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKK2RkY3BzMjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworZGRjcHMzMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIC0zNCAtPiAtNworZGRjcHMzMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIC0zNCAtPiAtNworZGRjcHMzMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIC0zNCAtPiAtNzUKK2RkY3BzMzA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAtMzQgLT4gLTc1CitkZGNwczMwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgLTM0IC0+IC03LjUwCitkZGNwczMwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgLTM0IC0+IC03LjUwCitkZGNwczMwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgLTM0IC0+IC03LjUwMAorZGRjcHMzMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIC0zNCAtPiAtNy41MDAKKworLS0gemVyb3MKK2RkY3BzMzExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAtMzQgLT4gLTAKK2RkY3BzMzEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAtMzQgLT4gLTAKK2RkY3BzMzEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2RkY3BzMzE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2RkY3BzMzE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMAorZGRjcHMzMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCitkZGNwczMxNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDEKK2RkY3BzMzE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRjcHMzMjEgY29weXNpZ24gIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgICAtMzQgLT4gLTI2ODI2ODI2ODI2ODI2ODIKK2RkY3BzMzIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgICAgLTM0IC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZGNwczMyMyBjb3B5c2lnbiAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgICAgIC0zNCAtPiAtMTM0MTM0MTM0MTM0MTM0MQorZGRjcHMzMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAtMzQgLT4gLTEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkY3BzMzMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgLTM0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGNwczMzMiBjb3B5c2lnbiAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIC0zNCAtPiAtMUUtMzgzCitkZGNwczMzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIC0zNCAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRjcHMzMzQgY29weXNpZ24gIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM5OAorCitkZGNwczMzNSBjb3B5c2lnbiAgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0zNCAtPiAtMUUtMzk4CitkZGNwczMzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0zNCAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRjcHMzMzcgY29weXNpZ24gIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM4MworZGRjcHMzMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMzQgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKKworLS0gT3RoZXIga2luZHMgb2YgUkhTCitkZGNwczQwMSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTM0IC0+IC03MDEKK2RkY3BzNDAyIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMzQgLT4gLTcyMAorZGRjcHM0MDMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0wICAtPiAtNzAxCitkZGNwczQwNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTAgIC0+IC03MjAKK2RkY3BzNDA1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMCAgLT4gIDcwMQorZGRjcHM0MDYgY29weXNpZ24gICAgICAgICAtNzIwICAgICswICAtPiAgNzIwCitkZGNwczQwNyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzM0IC0+ICA3MDEKK2RkY3BzNDA4IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMzQgLT4gIDcyMAorCitkZGNwczQxMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLUluZiAgLT4gLTcwMQorZGRjcHM0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjAKK2RkY3BzNDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxCitkZGNwczQxNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK0luZiAgLT4gIDcyMAorCitkZGNwczQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQorZGRjcHM0MjEgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1OYU4gIC0+IC03MjAKK2RkY3BzNDIyIGNvcHlzaWduICAgICAgICAgIDcwMSAgICArTmFOICAtPiAgNzAxCitkZGNwczQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMAorZGRjcHM0MjUgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU44IC0+ICA3MjAKKworZGRjcHM0MjYgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1zTmFOICAtPiAtNzAxCitkZGNwczQyNyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLXNOYU4gIC0+IC03MjAKK2RkY3BzNDI4IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArc05hTiAgLT4gIDcwMQorZGRjcHM0MjkgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOICAtPiAgNzIwCitkZGNwczQzMCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4zIC0+ICA3MjAKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRGl2aWRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGUuZGVjVGVzdAppbmRleCA1NTMxZDBlLi4wMTlkYjIyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGUuZGVjVGVzdApAQCAtMSw4NjMgKzEsODYzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZERpdmlkZS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBkaXZpc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRkaXYwMDEgZGl2aWRlICAxICAgICAxICAgIC0+ICAxDQotZGRkaXYwMDIgZGl2aWRlICAyICAgICAxICAgIC0+ICAyDQotZGRkaXYwMDMgZGl2aWRlICAxICAgICAyICAgIC0+ICAwLjUNCi1kZGRpdjAwNCBkaXZpZGUgIDIgICAgIDIgICAgLT4gIDENCi1kZGRpdjAwNSBkaXZpZGUgIDAgICAgIDEgICAgLT4gIDANCi1kZGRpdjAwNiBkaXZpZGUgIDAgICAgIDIgICAgLT4gIDANCi1kZGRpdjAwNyBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjAwOCBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjAwOSBkaXZpZGUgIDMgICAgIDMgICAgLT4gIDENCi0NCi1kZGRpdjAxMCBkaXZpZGUgIDIuNCAgIDEgICAgLT4gIDIuNA0KLWRkZGl2MDExIGRpdmlkZSAgMi40ICAgLTEgICAtPiAgLTIuNA0KLWRkZGl2MDEyIGRpdmlkZSAgLTIuNCAgMSAgICAtPiAgLTIuNA0KLWRkZGl2MDEzIGRpdmlkZSAgLTIuNCAgLTEgICAtPiAgMi40DQotZGRkaXYwMTQgZGl2aWRlICAyLjQwICAxICAgIC0+ICAyLjQwDQotZGRkaXYwMTUgZGl2aWRlICAyLjQwMCAxICAgIC0+ICAyLjQwMA0KLWRkZGl2MDE2IGRpdmlkZSAgMi40ICAgMiAgICAtPiAgMS4yDQotZGRkaXYwMTcgZGl2aWRlICAyLjQwMCAyICAgIC0+ICAxLjIwMA0KLWRkZGl2MDE4IGRpdmlkZSAgMi4gICAgMiAgICAtPiAgMQ0KLWRkZGl2MDE5IGRpdmlkZSAgMjAgICAgMjAgICAtPiAgMQ0KLQ0KLWRkZGl2MDIwIGRpdmlkZSAgMTg3ICAgMTg3ICAgIC0+ICAxDQotZGRkaXYwMjEgZGl2aWRlICA1ICAgICAyICAgICAgLT4gIDIuNQ0KLWRkZGl2MDIyIGRpdmlkZSAgNTAgICAgMjAgICAgIC0+ICAyLjUNCi1kZGRpdjAyMyBkaXZpZGUgIDUwMCAgIDIwMCAgICAtPiAgMi41DQotZGRkaXYwMjQgZGl2aWRlICA1MC4wICAyMC4wICAgLT4gIDIuNQ0KLWRkZGl2MDI1IGRpdmlkZSAgNS4wMCAgMi4wMCAgIC0+ICAyLjUNCi1kZGRpdjAyNiBkaXZpZGUgIDUgICAgIDIuMCAgICAtPiAgMi41DQotZGRkaXYwMjcgZGl2aWRlICA1ICAgICAyLjAwMCAgLT4gIDIuNQ0KLWRkZGl2MDI4IGRpdmlkZSAgNSAgICAgMC4yMCAgIC0+ICAyNQ0KLWRkZGl2MDI5IGRpdmlkZSAgNSAgICAgMC4yMDAgIC0+ICAyNQ0KLWRkZGl2MDMwIGRpdmlkZSAgMTAgICAgMSAgICAgIC0+ICAxMA0KLWRkZGl2MDMxIGRpdmlkZSAgMTAwICAgMSAgICAgIC0+ICAxMDANCi1kZGRpdjAzMiBkaXZpZGUgIDEwMDAgIDEgICAgICAtPiAgMTAwMA0KLWRkZGl2MDMzIGRpdmlkZSAgMTAwMCAgMTAwICAgIC0+ICAxMA0KLQ0KLWRkZGl2MDM1IGRpdmlkZSAgMSAgICAgMiAgICAgIC0+ICAwLjUNCi1kZGRpdjAzNiBkaXZpZGUgIDEgICAgIDQgICAgICAtPiAgMC4yNQ0KLWRkZGl2MDM3IGRpdmlkZSAgMSAgICAgOCAgICAgIC0+ICAwLjEyNQ0KLWRkZGl2MDM4IGRpdmlkZSAgMSAgICAgMTYgICAgIC0+ICAwLjA2MjUNCi1kZGRpdjAzOSBkaXZpZGUgIDEgICAgIDMyICAgICAtPiAgMC4wMzEyNQ0KLWRkZGl2MDQwIGRpdmlkZSAgMSAgICAgNjQgICAgIC0+ICAwLjAxNTYyNQ0KLWRkZGl2MDQxIGRpdmlkZSAgMSAgICAtMiAgICAgIC0+ICAtMC41DQotZGRkaXYwNDIgZGl2aWRlICAxICAgIC00ICAgICAgLT4gIC0wLjI1DQotZGRkaXYwNDMgZGl2aWRlICAxICAgIC04ICAgICAgLT4gIC0wLjEyNQ0KLWRkZGl2MDQ0IGRpdmlkZSAgMSAgICAtMTYgICAgIC0+ICAtMC4wNjI1DQotZGRkaXYwNDUgZGl2aWRlICAxICAgIC0zMiAgICAgLT4gIC0wLjAzMTI1DQotZGRkaXYwNDYgZGl2aWRlICAxICAgIC02NCAgICAgLT4gIC0wLjAxNTYyNQ0KLWRkZGl2MDQ3IGRpdmlkZSAtMSAgICAgMiAgICAgIC0+ICAtMC41DQotZGRkaXYwNDggZGl2aWRlIC0xICAgICA0ICAgICAgLT4gIC0wLjI1DQotZGRkaXYwNDkgZGl2aWRlIC0xICAgICA4ICAgICAgLT4gIC0wLjEyNQ0KLWRkZGl2MDUwIGRpdmlkZSAtMSAgICAgMTYgICAgIC0+ICAtMC4wNjI1DQotZGRkaXYwNTEgZGl2aWRlIC0xICAgICAzMiAgICAgLT4gIC0wLjAzMTI1DQotZGRkaXYwNTIgZGl2aWRlIC0xICAgICA2NCAgICAgLT4gIC0wLjAxNTYyNQ0KLWRkZGl2MDUzIGRpdmlkZSAtMSAgICAtMiAgICAgIC0+ICAwLjUNCi1kZGRpdjA1NCBkaXZpZGUgLTEgICAgLTQgICAgICAtPiAgMC4yNQ0KLWRkZGl2MDU1IGRpdmlkZSAtMSAgICAtOCAgICAgIC0+ICAwLjEyNQ0KLWRkZGl2MDU2IGRpdmlkZSAtMSAgICAtMTYgICAgIC0+ICAwLjA2MjUNCi1kZGRpdjA1NyBkaXZpZGUgLTEgICAgLTMyICAgICAtPiAgMC4wMzEyNQ0KLWRkZGl2MDU4IGRpdmlkZSAtMSAgICAtNjQgICAgIC0+ICAwLjAxNTYyNQ0KLQ0KLS0tIGJjZFRpbWUNCi1kZGRpdjA2MCBkaXZpZGUgIDEgNyAgICAgICAgICAgICAgICAgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYwNjEgZGl2aWRlIDEuMjM0NTY3OCAgMS45ODc2NTQzICAgLT4gMC42MjExMTc5NjgwNDkwNzE3IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkZGl2MDcxIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OQ0KLWRkZGl2MDcyIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5ICAxICAtPiAgOTk5OTk5OTk5OTk5OTk5DQotZGRkaXYwNzMgZGl2aWRlICA5OTk5OTk5OTk5OTk5OSAgIDEgIC0+ICA5OTk5OTk5OTk5OTk5OQ0KLWRkZGl2MDc0IGRpdmlkZSAgOTk5OTk5OTk5OTk5OSAgICAxICAtPiAgOTk5OTk5OTk5OTk5OQ0KLWRkZGl2MDc1IGRpdmlkZSAgOTk5OTk5OTk5OTk5ICAgICAxICAtPiAgOTk5OTk5OTk5OTk5DQotZGRkaXYwNzYgZGl2aWRlICA5OTk5OTk5OTk5OSAgICAgIDEgIC0+ICA5OTk5OTk5OTk5OQ0KLWRkZGl2MDc3IGRpdmlkZSAgOTk5OTk5OTk5OSAgICAgICAxICAtPiAgOTk5OTk5OTk5OQ0KLWRkZGl2MDc4IGRpdmlkZSAgOTk5OTk5OTk5ICAgICAgICAxICAtPiAgOTk5OTk5OTk5DQotZGRkaXYwNzkgZGl2aWRlICA5OTk5OTk5OSAgICAgICAgIDEgIC0+ICA5OTk5OTk5OQ0KLWRkZGl2MDgwIGRpdmlkZSAgOTk5OTk5OSAgICAgICAgICAxICAtPiAgOTk5OTk5OQ0KLWRkZGl2MDgxIGRpdmlkZSAgOTk5OTk5ICAgICAgICAgICAxICAtPiAgOTk5OTk5DQotZGRkaXYwODIgZGl2aWRlICA5OTk5OSAgICAgICAgICAgIDEgIC0+ICA5OTk5OQ0KLWRkZGl2MDgzIGRpdmlkZSAgOTk5OSAgICAgICAgICAgICAxICAtPiAgOTk5OQ0KLWRkZGl2MDg0IGRpdmlkZSAgOTk5ICAgICAgICAgICAgICAxICAtPiAgOTk5DQotZGRkaXYwODUgZGl2aWRlICA5OSAgICAgICAgICAgICAgIDEgIC0+ICA5OQ0KLWRkZGl2MDg2IGRpdmlkZSAgOSAgICAgICAgICAgICAgICAxICAtPiAgOQ0KLQ0KLWRkZGl2MDkwIGRpdmlkZSAgMC4gICAgICAgICAgICAxICAgIC0+ICAwDQotZGRkaXYwOTEgZGl2aWRlICAuMCAgICAgICAgICAgIDEgICAgLT4gIDAuMA0KLWRkZGl2MDkyIGRpdmlkZSAgMC4wMCAgICAgICAgICAxICAgIC0+ICAwLjAwDQotZGRkaXYwOTMgZGl2aWRlICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDBFKzcNCi1kZGRpdjA5NCBkaXZpZGUgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMEUtNTQNCi0NCi1kZGRpdjA5NSBkaXZpZGUgIDEgICAgICAgICAgICAxRS04ICAtPiAgMUUrOA0KLWRkZGl2MDk2IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTkgIC0+ICAxRSs5DQotZGRkaXYwOTcgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTAgLT4gIDFFKzEwDQotZGRkaXYwOTggZGl2aWRlICAxICAgICAgICAgICAgMUUtMTEgLT4gIDFFKzExDQotZGRkaXYwOTkgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTIgLT4gIDFFKzEyDQotDQotZGRkaXYxMDAgZGl2aWRlICAxICAxICAgLT4gMQ0KLWRkZGl2MTAxIGRpdmlkZSAgMSAgMiAgIC0+IDAuNQ0KLWRkZGl2MTAyIGRpdmlkZSAgMSAgMyAgIC0+IDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwMyBkaXZpZGUgIDEgIDQgICAtPiAwLjI1DQotZGRkaXYxMDQgZGl2aWRlICAxICA1ICAgLT4gMC4yDQotZGRkaXYxMDUgZGl2aWRlICAxICA2ICAgLT4gMC4xNjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTA2IGRpdmlkZSAgMSAgNyAgIC0+IDAuMTQyODU3MTQyODU3MTQyOSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwNyBkaXZpZGUgIDEgIDggICAtPiAwLjEyNQ0KLWRkZGl2MTA4IGRpdmlkZSAgMSAgOSAgIC0+IDAuMTExMTExMTExMTExMTExMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwOSBkaXZpZGUgIDEgIDEwICAtPiAwLjENCi1kZGRpdjExMCBkaXZpZGUgIDEgIDEgICAtPiAxDQotZGRkaXYxMTEgZGl2aWRlICAyICAxICAgLT4gMg0KLWRkZGl2MTEyIGRpdmlkZSAgMyAgMSAgIC0+IDMNCi1kZGRpdjExMyBkaXZpZGUgIDQgIDEgICAtPiA0DQotZGRkaXYxMTQgZGl2aWRlICA1ICAxICAgLT4gNQ0KLWRkZGl2MTE1IGRpdmlkZSAgNiAgMSAgIC0+IDYNCi1kZGRpdjExNiBkaXZpZGUgIDcgIDEgICAtPiA3DQotZGRkaXYxMTcgZGl2aWRlICA4ICAxICAgLT4gOA0KLWRkZGl2MTE4IGRpdmlkZSAgOSAgMSAgIC0+IDkNCi1kZGRpdjExOSBkaXZpZGUgIDEwIDEgICAtPiAxMA0KLQ0KLWRkZGl2MTIwIGRpdmlkZSAgM0UrMSAwLjAwMSAgLT4gM0UrNA0KLWRkZGl2MTIxIGRpdmlkZSAgMi4yMDAgMiAgICAgLT4gMS4xMDANCi0NCi1kZGRpdjEzMCBkaXZpZGUgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkuNDkzODk4Nzc5NzU2ICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTMxIGRpdmlkZSAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3My45NDc4OTU3OTE1ODMgICAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMzIgZGl2aWRlICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5LjM4Nzc1NTEwMjA0MSAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEzMyBkaXZpZGUgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkNCi1kZGRpdjEzNCBkaXZpZGUgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjAuNTg4MjM1Mjk0MTE4ICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTM1IGRpdmlkZSAgMTIzNDUgIDUuMDEgICAtPiAgMjQ2NC4wNzE4NTYyODc0MjUgICAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMzYgZGl2aWRlICAxMjM0NSAgNS4wMDEgIC0+ICAyNDY4LjUwNjI5ODc0MDI1MiAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0ZXN0IHBvc3NpYmx5IGltcHJlY2lzZSByZXN1bHRzDQotZGRkaXYyMjAgZGl2aWRlIDM5MSAgIDU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzg0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIyMSBkaXZpZGUgMzkxICAtNTk3IC0+IC0wLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjIyIGRpdmlkZSAtMzkxICA1OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMjMgZGl2aWRlIC0zOTEgLTU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzg0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3csIHNvbWUgd2l0aCBjb2VmZmljaWVudCBwYWRkaW5nDQotZGRkaXYyNzAgZGl2aWRlIDEgMWUzODQgICAgICAgICAgICAgICAgICAtPiAxRS0zODQgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KLWRkZGl2MjcxIGRpdmlkZSAxIDAuOWUzODQgICAgICAgICAgICAgICAgLT4gMS4xMTExMTExMTExMTExMUUtMzg0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkZGl2MjcyIGRpdmlkZSAxIDAuOTllMzg0ICAgICAgICAgICAgICAgLT4gMS4wMTAxMDEwMTAxMDEwMUUtMzg0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkZGl2MjczIGRpdmlkZSAxIDAuOTk5OTk5OTk5OTk5OTk5OWUzODQgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkZGl2Mjc0IGRpdmlkZSA5ZTM4NCAgICAxICAgICAgICAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkDQotZGRkaXYyNzUgZGl2aWRlIDkuOWUzODQgIDEgICAgICAgICAgICAgICAtPiA5LjkwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQNCi1kZGRpdjI3NiBkaXZpZGUgOS45OWUzODQgMSAgICAgICAgICAgICAgIC0+IDkuOTkwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZA0KLWRkZGl2Mjc3IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTllMzg0IDEgICAgLT4gOS45OTk5OTk5OTk5OTk5MDBFKzM4NCBDbGFtcGVkDQotZGRkaXYyNzggZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTllMzg0IDEgICAtPiA5Ljk5OTk5OTk5OTk5OTk5MEUrMzg0IENsYW1wZWQNCi1kZGRpdjI3OSBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi0NCi1kZGRpdjI4NSBkaXZpZGUgOS45ZTM4NCAgMS4xICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQNCi1kZGRpdjI4NiBkaXZpZGUgOS45OWUzODQgMS4xICAgICAgICAgICAgICAtPiA5LjA4MTgxODE4MTgxODE4MkUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2Mjg3IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTllMzg0IDEuMSAgIC0+IDkuMDkwOTA5MDkwOTA5MDAwRSszODQgQ2xhbXBlZA0KLWRkZGl2Mjg4IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5ZTM4NCAxLjEgIC0+IDkuMDkwOTA5MDkwOTA5MDgyRSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyODkgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTk5ZTM4NCAxLjEgLT4gOS4wOTA5MDkwOTA5MDkwOTBFKzM4NCBDbGFtcGVkDQotDQotDQotLS0gRGl2aWRlIGludG8gMCB0ZXN0cw0KLWRkZGl2MzAxIGRpdmlkZSAgICAwICAgIDcgICAgIC0+IDANCi1kZGRpdjMwMiBkaXZpZGUgICAgMCAgICA3RS01ICAtPiAwRSs1DQotZGRkaXYzMDMgZGl2aWRlICAgIDAgICAgN0UtMSAgLT4gMEUrMQ0KLWRkZGl2MzA0IGRpdmlkZSAgICAwICAgIDdFKzEgIC0+IDAuMA0KLWRkZGl2MzA1IGRpdmlkZSAgICAwICAgIDdFKzUgIC0+IDAuMDAwMDANCi1kZGRpdjMwNiBkaXZpZGUgICAgMCAgICA3RSs2ICAtPiAwLjAwMDAwMA0KLWRkZGl2MzA3IGRpdmlkZSAgICAwICAgIDdFKzcgIC0+IDBFLTcNCi1kZGRpdjMwOCBkaXZpZGUgICAgMCAgIDcwRS01ICAtPiAwRSs1DQotZGRkaXYzMDkgZGl2aWRlICAgIDAgICA3MEUtMSAgLT4gMEUrMQ0KLWRkZGl2MzEwIGRpdmlkZSAgICAwICAgNzBFKzAgIC0+IDANCi1kZGRpdjMxMSBkaXZpZGUgICAgMCAgIDcwRSsxICAtPiAwLjANCi1kZGRpdjMxMiBkaXZpZGUgICAgMCAgIDcwRSs1ICAtPiAwLjAwMDAwDQotZGRkaXYzMTMgZGl2aWRlICAgIDAgICA3MEUrNiAgLT4gMC4wMDAwMDANCi1kZGRpdjMxNCBkaXZpZGUgICAgMCAgIDcwRSs3ICAtPiAwRS03DQotZGRkaXYzMTUgZGl2aWRlICAgIDAgIDcwMEUtNSAgLT4gMEUrNQ0KLWRkZGl2MzE2IGRpdmlkZSAgICAwICA3MDBFLTEgIC0+IDBFKzENCi1kZGRpdjMxNyBkaXZpZGUgICAgMCAgNzAwRSswICAtPiAwDQotZGRkaXYzMTggZGl2aWRlICAgIDAgIDcwMEUrMSAgLT4gMC4wDQotZGRkaXYzMTkgZGl2aWRlICAgIDAgIDcwMEUrNSAgLT4gMC4wMDAwMA0KLWRkZGl2MzIwIGRpdmlkZSAgICAwICA3MDBFKzYgIC0+IDAuMDAwMDAwDQotZGRkaXYzMjEgZGl2aWRlICAgIDAgIDcwMEUrNyAgLT4gMEUtNw0KLWRkZGl2MzIyIGRpdmlkZSAgICAwICA3MDBFKzc3IC0+IDBFLTc3DQotDQotZGRkaXYzMzEgZGl2aWRlIDBFLTMgICAgN0UtNSAgLT4gMEUrMg0KLWRkZGl2MzMyIGRpdmlkZSAwRS0zICAgIDdFLTEgIC0+IDAuMDANCi1kZGRpdjMzMyBkaXZpZGUgMEUtMyAgICA3RSsxICAtPiAwLjAwMDANCi1kZGRpdjMzNCBkaXZpZGUgMEUtMyAgICA3RSs1ICAtPiAwRS04DQotZGRkaXYzMzUgZGl2aWRlIDBFLTEgICAgN0UtNSAgLT4gMEUrNA0KLWRkZGl2MzM2IGRpdmlkZSAwRS0xICAgIDdFLTEgIC0+IDANCi1kZGRpdjMzNyBkaXZpZGUgMEUtMSAgICA3RSsxICAtPiAwLjAwDQotZGRkaXYzMzggZGl2aWRlIDBFLTEgICAgN0UrNSAgLT4gMC4wMDAwMDANCi1kZGRpdjMzOSBkaXZpZGUgMEUrMSAgICA3RS01ICAtPiAwRSs2DQotZGRkaXYzNDAgZGl2aWRlIDBFKzEgICAgN0UtMSAgLT4gMEUrMg0KLWRkZGl2MzQxIGRpdmlkZSAwRSsxICAgIDdFKzEgIC0+IDANCi1kZGRpdjM0MiBkaXZpZGUgMEUrMSAgICA3RSs1ICAtPiAwLjAwMDANCi1kZGRpdjM0MyBkaXZpZGUgMEUrMyAgICA3RS01ICAtPiAwRSs4DQotZGRkaXYzNDQgZGl2aWRlIDBFKzMgICAgN0UtMSAgLT4gMEUrNA0KLWRkZGl2MzQ1IGRpdmlkZSAwRSszICAgIDdFKzEgIC0+IDBFKzINCi1kZGRpdjM0NiBkaXZpZGUgMEUrMyAgICA3RSs1ICAtPiAwLjAwDQotDQotLS0gVGhlc2Ugd2VyZSAnaW5wdXQgcm91bmRpbmcnDQotZGRkaXY0NDEgZGl2aWRlIDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDANCi1kZGRpdjQ0MiBkaXZpZGUgMSAxMjM0NTY3ODAwMCAtPiA4LjEwMDAwMDY2NDIwMDA1NEUtMTEgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0NDMgZGl2aWRlIDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMA0KLWRkZGl2NDQ0IGRpdmlkZSAxIDEyMzQ1Njc4MDAgIC0+IDguMTAwMDAwNjY0MjAwMDU0RS0xMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQ0NSBkaXZpZGUgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwDQotZGRkaXY0NDYgZGl2aWRlIDEgMTIzNDU2Nzg5MCAgLT4gOC4xMDAwMDAwNzM3MTAwMDFFLTEwIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDQ3IGRpdmlkZSAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTENCi1kZGRpdjQ0OCBkaXZpZGUgMSAxMjM0NTY3ODkxICAtPiA4LjEwMDAwMDA2NzE0OTAwMUUtMTAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0NDkgZGl2aWRlIDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDENCi1kZGRpdjQ1MCBkaXZpZGUgMSAxMjM0NTY3ODkwMSAtPiA4LjEwMDAwMDA3MzA1MzkwMUUtMTEgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0NTEgZGl2aWRlIDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5Ng0KLWRkZGl2NDUyIGRpdmlkZSAxIDEyMzQ1Njc4OTYgIC0+IDguMTAwMDAwMDM0MzQ0MDAwRS0xMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBoaWdoLWxvd3MNCi1kZGRpdjQ1MyBkaXZpZGUgMWUrMSAgIDEgICAgLT4gICAxRSsxDQotZGRkaXY0NTQgZGl2aWRlIDFlKzEgICAxLjAgIC0+ICAgMUUrMQ0KLWRkZGl2NDU1IGRpdmlkZSAxZSsxICAgMS4wMCAtPiAgIDFFKzENCi1kZGRpdjQ1NiBkaXZpZGUgMWUrMiAgIDIgICAgLT4gICA1RSsxDQotZGRkaXY0NTcgZGl2aWRlIDFlKzIgICAyLjAgIC0+ICAgNUUrMQ0KLWRkZGl2NDU4IGRpdmlkZSAxZSsyICAgMi4wMCAtPiAgIDVFKzENCi0NCi0tLSBzb21lIGZyb20gSUVFRSBkaXNjdXNzaW9ucw0KLWRkZGl2NDYwIGRpdmlkZSAzZTAgICAgICAyZTAgICAgIC0+IDEuNQ0KLWRkZGl2NDYxIGRpdmlkZSAzMGUtMSAgICAyZTAgICAgIC0+IDEuNQ0KLWRkZGl2NDYyIGRpdmlkZSAzMDBlLTIgICAyZTAgICAgIC0+IDEuNTANCi1kZGRpdjQ2NCBkaXZpZGUgMzAwMGUtMyAgMmUwICAgICAtPiAxLjUwMA0KLWRkZGl2NDY1IGRpdmlkZSAzZTAgICAgICAyMGUtMSAgIC0+IDEuNQ0KLWRkZGl2NDY2IGRpdmlkZSAzMGUtMSAgICAyMGUtMSAgIC0+IDEuNQ0KLWRkZGl2NDY3IGRpdmlkZSAzMDBlLTIgICAyMGUtMSAgIC0+IDEuNQ0KLWRkZGl2NDY4IGRpdmlkZSAzMDAwZS0zICAyMGUtMSAgIC0+IDEuNTANCi1kZGRpdjQ2OSBkaXZpZGUgM2UwICAgICAgMjAwZS0yICAtPiAxLjUNCi1kZGRpdjQ3MCBkaXZpZGUgMzBlLTEgICAgMjAwZS0yICAtPiAxLjUNCi1kZGRpdjQ3MSBkaXZpZGUgMzAwZS0yICAgMjAwZS0yICAtPiAxLjUNCi1kZGRpdjQ3MiBkaXZpZGUgMzAwMGUtMyAgMjAwZS0yICAtPiAxLjUNCi1kZGRpdjQ3MyBkaXZpZGUgM2UwICAgICAgMjAwMGUtMyAtPiAxLjUNCi1kZGRpdjQ3NCBkaXZpZGUgMzBlLTEgICAgMjAwMGUtMyAtPiAxLjUNCi1kZGRpdjQ3NSBkaXZpZGUgMzAwZS0yICAgMjAwMGUtMyAtPiAxLjUNCi1kZGRpdjQ3NiBkaXZpZGUgMzAwMGUtMyAgMjAwMGUtMyAtPiAxLjUNCi0NCi0tLSBzb21lIHJlY2lwcm9jYWxzDQotZGRkaXY0ODAgZGl2aWRlIDEgICAgICAgIDEuMEUrMzMgLT4gMUUtMzMNCi1kZGRpdjQ4MSBkaXZpZGUgMSAgICAgICAgMTBFKzMzICAtPiAxRS0zNA0KLWRkZGl2NDgyIGRpdmlkZSAxICAgICAgICAxLjBFLTMzIC0+IDFFKzMzDQotZGRkaXY0ODMgZGl2aWRlIDEgICAgICAgIDEwRS0zMyAgLT4gMUUrMzINCi0NCi0tLSBSTVMgZGlzY3Vzc2lvbiB0YWJsZQ0KLWRkZGl2NDg0IGRpdmlkZSAwZTUgICAgIDFlMyAtPiAgIDBFKzINCi1kZGRpdjQ4NSBkaXZpZGUgMGU1ICAgICAyZTMgLT4gICAwRSsyDQotZGRkaXY0ODYgZGl2aWRlIDBlNSAgICAxMGUyIC0+ICAgMEUrMw0KLWRkZGl2NDg3IGRpdmlkZSAwZTUgICAgMjBlMiAtPiAgIDBFKzMNCi1kZGRpdjQ4OCBkaXZpZGUgMGU1ICAgMTAwZTEgLT4gICAwRSs0DQotZGRkaXY0ODkgZGl2aWRlIDBlNSAgIDIwMGUxIC0+ICAgMEUrNA0KLQ0KLWRkZGl2NDkxIGRpdmlkZSAxZTUgICAgIDFlMyAtPiAgIDFFKzINCi1kZGRpdjQ5MiBkaXZpZGUgMWU1ICAgICAyZTMgLT4gICA1RSsxDQotZGRkaXY0OTMgZGl2aWRlIDFlNSAgICAxMGUyIC0+ICAgMUUrMg0KLWRkZGl2NDk0IGRpdmlkZSAxZTUgICAgMjBlMiAtPiAgIDVFKzENCi1kZGRpdjQ5NSBkaXZpZGUgMWU1ICAgMTAwZTEgLT4gICAxRSsyDQotZGRkaXY0OTYgZGl2aWRlIDFlNSAgIDIwMGUxIC0+ICAgNUUrMQ0KLQ0KLS0tIHRyeXplcm9zIGNhc2VzDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kZGRpdjQ5NyAgZGl2aWRlICAwRSszODAgMTAwMEUtMTMgIC0+IDBFKzM2OSBDbGFtcGVkDQotZGRkaXY0OTggIGRpdmlkZSAgMEUtMzkwIDEwMDBFKzEzICAtPiAwRS0zOTggQ2xhbXBlZA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotDQotLS0gZm9jdXMgb24gdHJhaWxpbmcgemVyb3MgaXNzdWVzDQotZGRkaXY1MDAgZGl2aWRlICAxICAgICAgOS45ICAgIC0+ICAwLjEwMTAxMDEwMTAxMDEwMTAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NTAxIGRpdmlkZSAgMSAgICAgIDkuMDkgICAtPiAgMC4xMTAwMTEwMDExMDAxMTAwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjUwMiBkaXZpZGUgIDEgICAgICA5LjAwOSAgLT4gIDAuMTExMDAwMTExMDAwMTExMCAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRkaXY1MTEgZGl2aWRlIDEgICAgICAgICAyICAgIC0+IDAuNQ0KLWRkZGl2NTEyIGRpdmlkZSAxLjAgICAgICAgMiAgICAtPiAwLjUNCi1kZGRpdjUxMyBkaXZpZGUgMS4wMCAgICAgIDIgICAgLT4gMC41MA0KLWRkZGl2NTE0IGRpdmlkZSAxLjAwMCAgICAgMiAgICAtPiAwLjUwMA0KLWRkZGl2NTE1IGRpdmlkZSAxLjAwMDAgICAgMiAgICAtPiAwLjUwMDANCi1kZGRpdjUxNiBkaXZpZGUgMS4wMDAwMCAgIDIgICAgLT4gMC41MDAwMA0KLWRkZGl2NTE3IGRpdmlkZSAxLjAwMDAwMCAgMiAgICAtPiAwLjUwMDAwMA0KLWRkZGl2NTE4IGRpdmlkZSAxLjAwMDAwMDAgMiAgICAtPiAwLjUwMDAwMDANCi1kZGRpdjUxOSBkaXZpZGUgMS4wMCAgICAgIDIuMDAgLT4gMC41DQotDQotZGRkaXY1MjEgZGl2aWRlIDIgICAgMSAgICAgICAgIC0+IDINCi1kZGRpdjUyMiBkaXZpZGUgMiAgICAxLjAgICAgICAgLT4gMg0KLWRkZGl2NTIzIGRpdmlkZSAyICAgIDEuMDAgICAgICAtPiAyDQotZGRkaXY1MjQgZGl2aWRlIDIgICAgMS4wMDAgICAgIC0+IDINCi1kZGRpdjUyNSBkaXZpZGUgMiAgICAxLjAwMDAgICAgLT4gMg0KLWRkZGl2NTI2IGRpdmlkZSAyICAgIDEuMDAwMDAgICAtPiAyDQotZGRkaXY1MjcgZGl2aWRlIDIgICAgMS4wMDAwMDAgIC0+IDINCi1kZGRpdjUyOCBkaXZpZGUgMiAgICAxLjAwMDAwMDAgLT4gMg0KLWRkZGl2NTI5IGRpdmlkZSAyLjAwIDEuMDAgICAgICAtPiAyDQotDQotZGRkaXY1MzAgZGl2aWRlICAyLjQwICAgMiAgICAgIC0+ICAxLjIwDQotZGRkaXY1MzEgZGl2aWRlICAyLjQwICAgNCAgICAgIC0+ICAwLjYwDQotZGRkaXY1MzIgZGl2aWRlICAyLjQwICAxMCAgICAgIC0+ICAwLjI0DQotZGRkaXY1MzMgZGl2aWRlICAyLjQwICAgMi4wICAgIC0+ICAxLjINCi1kZGRpdjUzNCBkaXZpZGUgIDIuNDAgICA0LjAgICAgLT4gIDAuNg0KLWRkZGl2NTM1IGRpdmlkZSAgMi40MCAgMTAuMCAgICAtPiAgMC4yNA0KLWRkZGl2NTM2IGRpdmlkZSAgMi40MCAgIDIuMDAgICAtPiAgMS4yDQotZGRkaXY1MzcgZGl2aWRlICAyLjQwICAgNC4wMCAgIC0+ICAwLjYNCi1kZGRpdjUzOCBkaXZpZGUgIDIuNDAgIDEwLjAwICAgLT4gIDAuMjQNCi1kZGRpdjUzOSBkaXZpZGUgIDAuOSAgICAwLjEgICAgLT4gIDkNCi1kZGRpdjU0MCBkaXZpZGUgIDAuOSAgICAwLjAxICAgLT4gIDlFKzENCi1kZGRpdjU0MSBkaXZpZGUgIDAuOSAgICAwLjAwMSAgLT4gIDlFKzINCi1kZGRpdjU0MiBkaXZpZGUgIDUgICAgICAyICAgICAgLT4gIDIuNQ0KLWRkZGl2NTQzIGRpdmlkZSAgNSAgICAgIDIuMCAgICAtPiAgMi41DQotZGRkaXY1NDQgZGl2aWRlICA1ICAgICAgMi4wMCAgIC0+ICAyLjUNCi1kZGRpdjU0NSBkaXZpZGUgIDUgICAgICAyMCAgICAgLT4gIDAuMjUNCi1kZGRpdjU0NiBkaXZpZGUgIDUgICAgICAyMC4wICAgLT4gIDAuMjUNCi1kZGRpdjU0NyBkaXZpZGUgIDIuNDAwICAyICAgICAgLT4gIDEuMjAwDQotZGRkaXY1NDggZGl2aWRlICAyLjQwMCAgMi4wICAgIC0+ICAxLjIwDQotZGRkaXY1NDkgZGl2aWRlICAyLjQwMCAgMi40MDAgIC0+ICAxDQotDQotZGRkaXY1NTAgZGl2aWRlICAyNDAgICAgMSAgICAgIC0+ICAyNDANCi1kZGRpdjU1MSBkaXZpZGUgIDI0MCAgICAxMCAgICAgLT4gIDI0DQotZGRkaXY1NTIgZGl2aWRlICAyNDAgICAgMTAwICAgIC0+ICAyLjQNCi1kZGRpdjU1MyBkaXZpZGUgIDI0MCAgICAxMDAwICAgLT4gIDAuMjQNCi1kZGRpdjU1NCBkaXZpZGUgIDI0MDAgICAxICAgICAgLT4gIDI0MDANCi1kZGRpdjU1NSBkaXZpZGUgIDI0MDAgICAxMCAgICAgLT4gIDI0MA0KLWRkZGl2NTU2IGRpdmlkZSAgMjQwMCAgIDEwMCAgICAtPiAgMjQNCi1kZGRpdjU1NyBkaXZpZGUgIDI0MDAgICAxMDAwICAgLT4gIDIuNA0KLQ0KLS0tICt2ZSBleHBvbmVudA0KLWRkZGl2NjAwIGRpdmlkZSAgMi40RSs5ICAgICAyICAtPiAgMS4yRSs5DQotZGRkaXY2MDEgZGl2aWRlICAyLjQwRSs5ICAgIDIgIC0+ICAxLjIwRSs5DQotZGRkaXY2MDIgZGl2aWRlICAyLjQwMEUrOSAgIDIgIC0+ICAxLjIwMEUrOQ0KLWRkZGl2NjAzIGRpdmlkZSAgMi40MDAwRSs5ICAyICAtPiAgMS4yMDAwRSs5DQotZGRkaXY2MDQgZGl2aWRlICAyNEUrOCAgICAgIDIgIC0+ICAxLjJFKzkNCi1kZGRpdjYwNSBkaXZpZGUgIDI0MEUrNyAgICAgMiAgLT4gIDEuMjBFKzkNCi1kZGRpdjYwNiBkaXZpZGUgIDI0MDBFKzYgICAgMiAgLT4gIDEuMjAwRSs5DQotZGRkaXY2MDcgZGl2aWRlICAyNDAwMEUrNSAgIDIgIC0+ICAxLjIwMDBFKzkNCi0NCi0tLSBtb3JlIHplcm9zLCBldGMuDQotZGRkaXY3MzEgZGl2aWRlIDUuMDAgMUUtMyAgICAtPiA1LjAwRSszDQotZGRkaXY3MzIgZGl2aWRlIDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkaXY3MzMgZGl2aWRlIDAwLjAwIDBFLTMgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkaXY3MzQgZGl2aWRlICAwICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkaXY3MzUgZGl2aWRlIC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkaXY3MzYgZGl2aWRlIC0wICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotDQotZGRkaXY3NDEgZGl2aWRlICAwICAgIC0xICAgICAtPiAtMA0KLWRkZGl2NzQyIGRpdmlkZSAtMCAgICAtMSAgICAgLT4gIDANCi1kZGRpdjc0MyBkaXZpZGUgIDAgICAgIDEgICAgIC0+ICAwDQotZGRkaXY3NDQgZGl2aWRlIC0wICAgICAxICAgICAtPiAtMA0KLWRkZGl2NzQ1IGRpdmlkZSAtMSAgICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjc0NiBkaXZpZGUgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY3NDcgZGl2aWRlICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZGl2NzQ4IGRpdmlkZSAgMSAgICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi1kZGRpdjc1MSBkaXZpZGUgIDAuMCAgLTEgICAgIC0+IC0wLjANCi1kZGRpdjc1MiBkaXZpZGUgLTAuMCAgLTEgICAgIC0+ICAwLjANCi1kZGRpdjc1MyBkaXZpZGUgIDAuMCAgIDEgICAgIC0+ICAwLjANCi1kZGRpdjc1NCBkaXZpZGUgLTAuMCAgIDEgICAgIC0+IC0wLjANCi1kZGRpdjc1NSBkaXZpZGUgLTEuMCAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY3NTYgZGl2aWRlIC0xLjAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZGl2NzU3IGRpdmlkZSAgMS4wICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjc1OCBkaXZpZGUgIDEuMCAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZGRkaXY3NjEgZGl2aWRlICAwICAgIC0xLjAgICAtPiAtMEUrMQ0KLWRkZGl2NzYyIGRpdmlkZSAtMCAgICAtMS4wICAgLT4gIDBFKzENCi1kZGRpdjc2MyBkaXZpZGUgIDAgICAgIDEuMCAgIC0+ICAwRSsxDQotZGRkaXY3NjQgZGl2aWRlIC0wICAgICAxLjAgICAtPiAtMEUrMQ0KLWRkZGl2NzY1IGRpdmlkZSAtMSAgICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjc2NiBkaXZpZGUgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY3NjcgZGl2aWRlICAxICAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZGl2NzY4IGRpdmlkZSAgMSAgICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi1kZGRpdjc3MSBkaXZpZGUgIDAuMCAgLTEuMCAgIC0+IC0wDQotZGRkaXY3NzIgZGl2aWRlIC0wLjAgIC0xLjAgICAtPiAgMA0KLWRkZGl2NzczIGRpdmlkZSAgMC4wICAgMS4wICAgLT4gIDANCi1kZGRpdjc3NCBkaXZpZGUgLTAuMCAgIDEuMCAgIC0+IC0wDQotZGRkaXY3NzUgZGl2aWRlIC0xLjAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZGl2Nzc2IGRpdmlkZSAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjc3NyBkaXZpZGUgIDEuMCAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY3NzggZGl2aWRlICAxLjAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLS0tIFNwZWNpYWxzDQotZGRkaXY3ODAgZGl2aWRlICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY3ODEgZGl2aWRlICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kZGRpdjc4MiBkaXZpZGUgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRkZGl2NzgzIGRpdmlkZSAgSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZGRkaXY3ODQgZGl2aWRlICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCi1kZGRpdjc4NSBkaXZpZGUgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWRkZGl2Nzg2IGRpdmlkZSAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZGRkaXY3ODcgZGl2aWRlICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY3ODggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQNCi1kZGRpdjc4OSBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjc5MCBkaXZpZGUgLTEgICAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLWRkZGl2NzkxIGRpdmlkZSAtMCAgICAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkDQotZGRkaXY3OTIgZGl2aWRlICAwICAgICBJbmYgICAtPiAgMEUtMzk4IENsYW1wZWQNCi1kZGRpdjc5MyBkaXZpZGUgIDEgICAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWRkZGl2Nzk0IGRpdmlkZSAgMTAwMCAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZGRkaXY3OTUgZGl2aWRlICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRkaXY4MDAgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4MDEgZGl2aWRlIC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCi1kZGRpdjgwMiBkaXZpZGUgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRkZGl2ODAzIGRpdmlkZSAtSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZGRkaXY4MDQgZGl2aWRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kZGRpdjgwNSBkaXZpZGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRkZGl2ODA2IGRpdmlkZSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZGRkaXY4MDcgZGl2aWRlIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4MDggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQNCi1kZGRpdjgwOSBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjgxMCBkaXZpZGUgLTEgICAgLUluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWRkZGl2ODExIGRpdmlkZSAtMCAgICAtSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZGRkaXY4MTIgZGl2aWRlICAwICAgIC1JbmYgICAtPiAtMEUtMzk4IENsYW1wZWQNCi1kZGRpdjgxMyBkaXZpZGUgIDEgICAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLWRkZGl2ODE0IGRpdmlkZSAgMTAwMCAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkDQotZGRkaXY4MTUgZGl2aWRlICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRkaXY4MjEgZGl2aWRlICBOYU4gLUluZiAgICAtPiAgTmFODQotZGRkaXY4MjIgZGl2aWRlICBOYU4gLTEwMDAgICAtPiAgTmFODQotZGRkaXY4MjMgZGl2aWRlICBOYU4gLTEgICAgICAtPiAgTmFODQotZGRkaXY4MjQgZGl2aWRlICBOYU4gLTAgICAgICAtPiAgTmFODQotZGRkaXY4MjUgZGl2aWRlICBOYU4gIDAgICAgICAtPiAgTmFODQotZGRkaXY4MjYgZGl2aWRlICBOYU4gIDEgICAgICAtPiAgTmFODQotZGRkaXY4MjcgZGl2aWRlICBOYU4gIDEwMDAgICAtPiAgTmFODQotZGRkaXY4MjggZGl2aWRlICBOYU4gIEluZiAgICAtPiAgTmFODQotZGRkaXY4MjkgZGl2aWRlICBOYU4gIE5hTiAgICAtPiAgTmFODQotZGRkaXY4MzAgZGl2aWRlIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZGRkaXY4MzEgZGl2aWRlIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZGRkaXY4MzIgZGl2aWRlIC0xICAgIE5hTiAgICAtPiAgTmFODQotZGRkaXY4MzMgZGl2aWRlIC0wICAgIE5hTiAgICAtPiAgTmFODQotZGRkaXY4MzQgZGl2aWRlICAwICAgIE5hTiAgICAtPiAgTmFODQotZGRkaXY4MzUgZGl2aWRlICAxICAgIE5hTiAgICAtPiAgTmFODQotZGRkaXY4MzYgZGl2aWRlICAxMDAwIE5hTiAgICAtPiAgTmFODQotZGRkaXY4MzcgZGl2aWRlICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZGRkaXY4NDEgZGl2aWRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODQyIGRpdmlkZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg0MyBkaXZpZGUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NDQgZGl2aWRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODQ1IGRpdmlkZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg0NiBkaXZpZGUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NDcgZGl2aWRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODQ4IGRpdmlkZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg0OSBkaXZpZGUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NTAgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODUxIGRpdmlkZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg1MiBkaXZpZGUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NTMgZGl2aWRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODU0IGRpdmlkZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg1NSBkaXZpZGUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NTYgZGl2aWRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODU3IGRpdmlkZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg1OCBkaXZpZGUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NTkgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZGRpdjg2MSBkaXZpZGUgIE5hTjkgLUluZiAgIC0+ICBOYU45DQotZGRkaXY4NjIgZGl2aWRlICBOYU44ICAxMDAwICAtPiAgTmFOOA0KLWRkZGl2ODYzIGRpdmlkZSAgTmFONyAgSW5mICAgLT4gIE5hTjcNCi1kZGRpdjg2NCBkaXZpZGUgIE5hTjYgIE5hTjUgIC0+ICBOYU42DQotZGRkaXY4NjUgZGl2aWRlIC1JbmYgICBOYU40ICAtPiAgTmFONA0KLWRkZGl2ODY2IGRpdmlkZSAtMTAwMCAgTmFOMyAgLT4gIE5hTjMNCi1kZGRpdjg2NyBkaXZpZGUgIEluZiAgIE5hTjIgIC0+ICBOYU4yDQotDQotZGRkaXY4NzEgZGl2aWRlICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg3MiBkaXZpZGUgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODczIGRpdmlkZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NzQgZGl2aWRlICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg3NSBkaXZpZGUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODc2IGRpdmlkZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NzcgZGl2aWRlICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg3OCBkaXZpZGUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODc5IGRpdmlkZSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRkaXY4ODEgZGl2aWRlICAtTmFOOSAgLUluZiAgIC0+ICAtTmFOOQ0KLWRkZGl2ODgyIGRpdmlkZSAgLU5hTjggICAxMDAwICAtPiAgLU5hTjgNCi1kZGRpdjg4MyBkaXZpZGUgIC1OYU43ICAgSW5mICAgLT4gIC1OYU43DQotZGRkaXY4ODQgZGl2aWRlICAtTmFONiAgLU5hTjUgIC0+ICAtTmFONg0KLWRkZGl2ODg1IGRpdmlkZSAgLUluZiAgIC1OYU40ICAtPiAgLU5hTjQNCi1kZGRpdjg4NiBkaXZpZGUgIC0xMDAwICAtTmFOMyAgLT4gIC1OYU4zDQotZGRkaXY4ODcgZGl2aWRlICAgSW5mICAgLU5hTjIgIC0+ICAtTmFOMg0KLQ0KLWRkZGl2ODkxIGRpdmlkZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4OTIgZGl2aWRlIC1zTmFOOTggLTEgICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg5MyBkaXZpZGUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODk0IGRpdmlkZSAtc05hTjk2IC1zTmFOOTQgLT4gLU5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4OTUgZGl2aWRlIC1OYU45NSAgLXNOYU45MyAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg5NiBkaXZpZGUgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODk3IGRpdmlkZSAgMCAgICAgIC1zTmFOOTEgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4OTggZGl2aWRlICBJbmYgICAgLXNOYU45MCAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg5OSBkaXZpZGUgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlIGJ5IDANCi1kZGRpdjkwMSBkaXZpZGUgICAgMCAgICAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZGRpdjkwMiBkaXZpZGUgICAgMC4wRTUgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZGRpdjkwMyBkaXZpZGUgICAgMC4wMDAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZGRpdjkwNCBkaXZpZGUgICAgMC4wMDAxICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkwNSBkaXZpZGUgICAgMC4wMSAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkwNiBkaXZpZGUgICAgMC4xICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkwNyBkaXZpZGUgICAgMSAgICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkwOCBkaXZpZGUgICAgMSAgICAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkwOSBkaXZpZGUgICAxMCAgICAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkxMCBkaXZpZGUgICAxRSsxMDAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkxMSBkaXZpZGUgICAxRSsxMDAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi1kZGRpdjkyMSBkaXZpZGUgICAtMC4wMDAxICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkyMiBkaXZpZGUgICAtMC4wMSAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkyMyBkaXZpZGUgICAtMC4xICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkyNCBkaXZpZGUgICAtMSAgICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkyNSBkaXZpZGUgICAtMSAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkyNiBkaXZpZGUgIC0xMCAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkyNyBkaXZpZGUgIC0xRSsxMDAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkyOCBkaXZpZGUgIC0xRSsxMDAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi1kZGRpdjkzMSBkaXZpZGUgICAgMC4wMDAxIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkzMiBkaXZpZGUgICAgMC4wMSAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkzMyBkaXZpZGUgICAgMC4xICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkzNCBkaXZpZGUgICAgMSAgICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkzNSBkaXZpZGUgICAgMSAgICAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkzNiBkaXZpZGUgICAxMCAgICAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkzNyBkaXZpZGUgICAxRSsxMDAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjkzOCBkaXZpZGUgICAxRSsxMDAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi1kZGRpdjk0MSBkaXZpZGUgICAtMC4wMDAxIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjk0MiBkaXZpZGUgICAtMC4wMSAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjk0MyBkaXZpZGUgICAtMC4xICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjk0NCBkaXZpZGUgICAtMSAgICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjk0NSBkaXZpZGUgICAtMSAgICAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjk0NiBkaXZpZGUgIC0xMCAgICAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjk0NyBkaXZpZGUgIC0xRSsxMDAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjk0OCBkaXZpZGUgIC0xRSsxMDAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkNCi1kZGRpdjEwMjEgIGRpdmlkZSAxRTAgICAgICAgICAgMUUwIC0+IDENCi1kZGRpdjEwMjIgIGRpdmlkZSAxRTAgICAgICAgICAgMkUwIC0+IDAuNQ0KLWRkZGl2MTAyMyAgZGl2aWRlIDFFMCAgICAgICAgICAzRTAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTAyNCAgZGl2aWRlIDEwMEUtMiAgIDEwMDBFLTMgLT4gMQ0KLWRkZGl2MTAyNSAgZGl2aWRlIDI0RS0xICAgICAgICAyRTAgLT4gMS4yDQotZGRkaXYxMDI2ICBkaXZpZGUgMjQwMEUtMyAgICAgIDJFMCAtPiAxLjIwMA0KLWRkZGl2MTAyNyAgZGl2aWRlIDVFMCAgICAgICAgICAyRTAgLT4gMi41DQotZGRkaXYxMDI4ICBkaXZpZGUgNUUwICAgICAgICAyMEUtMSAtPiAyLjUNCi1kZGRpdjEwMjkgIGRpdmlkZSA1RTAgICAgICAyMDAwRS0zIC0+IDIuNQ0KLWRkZGl2MTAzMCAgZGl2aWRlIDVFMCAgICAgICAgIDJFLTEgLT4gMjUNCi1kZGRpdjEwMzEgIGRpdmlkZSA1RTAgICAgICAgIDIwRS0yIC0+IDI1DQotZGRkaXYxMDMyICBkaXZpZGUgNDgwRS0yICAgICAgIDNFMCAtPiAxLjYwDQotZGRkaXYxMDMzICBkaXZpZGUgNDdFLTEgICAgICAgIDJFMCAtPiAyLjM1DQotDQotLS0gRUNNQVNjcmlwdCBiYWQgZXhhbXBsZXMNCi1yb3VuZGluZzogICAgaGFsZl9kb3duDQotZGRkaXYxMDQwICBkaXZpZGUgNSA5ICAtPiAwLjU1NTU1NTU1NTU1NTU1NTYgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLWRkZGl2MTA0MSAgZGl2aWRlIDYgMTEgLT4gMC41NDU0NTQ1NDU0NTQ1NDU1IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cw0KLS0tIHNpZ25zDQotZGRkaXYxMDUxIGRpdmlkZSAgMWUrMjc3ICAxZS0zMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTA1MiBkaXZpZGUgIDFlKzI3NyAtMWUtMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwNTMgZGl2aWRlIC0xZSsyNzcgIDFlLTMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMDU0IGRpdmlkZSAtMWUrMjc3IC0xZS0zMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTA1NSBkaXZpZGUgIDFlLTI3NyAgMWUrMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZGl2MTA1NiBkaXZpZGUgIDFlLTI3NyAtMWUrMzExIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZGl2MTA1NyBkaXZpZGUgLTFlLTI3NyAgMWUrMzExIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZGl2MTA1OCBkaXZpZGUgLTFlLTI3NyAtMWUrMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KLWRkZGl2MTA2MCBkaXZpZGUgMWUtMjkxIDFlKzEwMSAtPiAxRS0zOTIgU3Vibm9ybWFsDQotZGRkaXYxMDYxIGRpdmlkZSAxZS0yOTEgMWUrMTAyIC0+IDFFLTM5MyBTdWJub3JtYWwNCi1kZGRpdjEwNjIgZGl2aWRlIDFlLTI5MSAxZSsxMDMgLT4gMUUtMzk0IFN1Ym5vcm1hbA0KLWRkZGl2MTA2MyBkaXZpZGUgMWUtMjkxIDFlKzEwNCAtPiAxRS0zOTUgU3Vibm9ybWFsDQotZGRkaXYxMDY0IGRpdmlkZSAxZS0yOTEgMWUrMTA1IC0+IDFFLTM5NiBTdWJub3JtYWwNCi1kZGRpdjEwNjUgZGl2aWRlIDFlLTI5MSAxZSsxMDYgLT4gMUUtMzk3IFN1Ym5vcm1hbA0KLWRkZGl2MTA2NiBkaXZpZGUgMWUtMjkxIDFlKzEwNyAtPiAxRS0zOTggU3Vibm9ybWFsDQotZGRkaXYxMDY3IGRpdmlkZSAxZS0yOTEgMWUrMTA4IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRkaXYxMDY4IGRpdmlkZSAxZS0yOTEgMWUrMTA5IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRkaXYxMDY5IGRpdmlkZSAxZS0yOTEgMWUrMTEwIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQ0KLWRkZGl2MTA3MCBkaXZpZGUgMWUrNjAgMWUtMzIxIC0+IDEuMDAwMDAwMDAwMDAwRSszODEgIENsYW1wZWQNCi1kZGRpdjEwNzEgZGl2aWRlIDFlKzYwIDFlLTMyMiAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgQ2xhbXBlZA0KLWRkZGl2MTA3MiBkaXZpZGUgMWUrNjAgMWUtMzIzIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzM4MyAgQ2xhbXBlZA0KLWRkZGl2MTA3MyBkaXZpZGUgMWUrNjAgMWUtMzI0IC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQNCi1kZGRpdjEwNzQgZGl2aWRlIDFlKzYwIDFlLTMyNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwNzUgZGl2aWRlIDFlKzYwIDFlLTMyNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwNzYgZGl2aWRlIDFlKzYwIDFlLTMyNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwNzcgZGl2aWRlIDFlKzYwIDFlLTMyOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwNzggZGl2aWRlIDFlKzYwIDFlLTMyOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwNzkgZGl2aWRlIDFlKzYwIDFlLTMzMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGRpdjExMDEgZGl2aWRlICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMS4wMDAwRS0zOTQgU3Vibm9ybWFsDQotZGRkaXYxMTAyIGRpdmlkZSAgMS4wMDBFLTM5NCAgIDFlKzEgIC0+IDEuMDAwRS0zOTUgIFN1Ym5vcm1hbA0KLWRkZGl2MTEwMyBkaXZpZGUgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAxLjAwRS0zOTYgICBTdWJub3JtYWwNCi1kZGRpdjExMDQgZGl2aWRlICAxLjBFLTM5NCAgICAgMWUrMyAgLT4gMS4wRS0zOTcgICAgU3Vibm9ybWFsDQotZGRkaXYxMTA1IGRpdmlkZSAgMS4wRS0zOTQgICAgIDFlKzQgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZGRpdjExMDYgZGl2aWRlICAxLjNFLTM5NCAgICAgMWUrNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTEwNyBkaXZpZGUgIDEuNUUtMzk0ICAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTA4IGRpdmlkZSAgMS43RS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjExMDkgZGl2aWRlICAyLjNFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTExMCBkaXZpZGUgIDIuNUUtMzk0ICAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTExIGRpdmlkZSAgMi43RS0zOTQgICAgIDFlKzQgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjExMTIgZGl2aWRlICAxLjQ5RS0zOTQgICAgMWUrNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTExMyBkaXZpZGUgIDEuNTBFLTM5NCAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTE0IGRpdmlkZSAgMS41MUUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjExMTUgZGl2aWRlICAyLjQ5RS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTExNiBkaXZpZGUgIDIuNTBFLTM5NCAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTE3IGRpdmlkZSAgMi41MUUtMzk0ICAgIDFlKzQgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGRpdjExMTggZGl2aWRlICAxRS0zOTQgICAgICAgMWUrNCAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwNCi1kZGRpdjExMTkgZGl2aWRlICAzRS0zOTQgICAgICAgMWUrNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRkaXYxMTIwIGRpdmlkZSAgNUUtMzk0ICAgICAgIDFlKzUgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZGl2MTEyMSBkaXZpZGUgIDdFLTM5NCAgICAgICAxZSs1ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTIyIGRpdmlkZSAgOUUtMzk0ICAgICAgIDFlKzUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjExMjMgZGl2aWRlICA5LjlFLTM5NCAgICAgMWUrNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZGl2MTEyNCBkaXZpZGUgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMUUtMzk4ICAgIFN1Ym5vcm1hbA0KLWRkZGl2MTEyNSBkaXZpZGUgIDNFLTM5NCAgICAgIC0xZSs1ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGRpdjExMjYgZGl2aWRlIC01RS0zOTQgICAgICAgMWUrNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRkaXYxMTI3IGRpdmlkZSAgN0UtMzk0ICAgICAgLTFlKzUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjExMjggZGl2aWRlIC05RS0zOTQgICAgICAgMWUrNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTEyOSBkaXZpZGUgIDkuOUUtMzk0ICAgIC0xZSs1ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTMwIGRpdmlkZSAgMy4wRS0zOTQgICAgLTFlKzUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLWRkZGl2MTEzMSBkaXZpZGUgIDEuMEUtMTk5ICAgICAxZSsyMDAgLT4gMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGRpdjExMzIgZGl2aWRlICAxLjBFLTE5OSAgICAgMWUrMTk5IC0+IDFFLTM5OCAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRkZGl2MTEzMyBkaXZpZGUgIDEuMEUtMTk5ICAgICAxZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbA0KLWRkZGl2MTEzNCBkaXZpZGUgIDIuMEUtMTk5ICAgICAyZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbA0KLWRkZGl2MTEzNSBkaXZpZGUgIDQuMEUtMTk5ICAgICA0ZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbA0KLWRkZGl2MTEzNiBkaXZpZGUgMTAuMEUtMTk5ICAgIDEwZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbA0KLWRkZGl2MTEzNyBkaXZpZGUgMzAuMEUtMTk5ICAgIDMwZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbA0KLQ0KLS0tIHJhbmRvbXMNCi1kZGRpdjIwMTAgIGRpdmlkZSAgLTMuMzAzMjI2NzE0OTAwNzExRS0zNSAgIDguNzk2NTc4ODQyNzEzMTgzRSs3MyAgIC0+ICAtMy43NTUxMjY1OTQwNTg3ODNFLTEwOSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMTEgIGRpdmlkZSAgIDkzMzE1MzMyNzgyMTA3My42ICAgICAgIDY4NzgyMTgxMDkwMjQ2LjI1ICAgICAgIC0+ICAgMTMuNTY2Nzg4ODU0NzU3NjMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDEyICBkaXZpZGUgICA1LjA0NzUyNDM2MDU3OTA2RS03MiAgIC04LjE3OTQ4MTc3MTIzODY0MkUrNjQgICAtPiAgLTYuMTcwOTU4NjI3NjMyODM1RS0xMzcgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDEzICBkaXZpZGUgIC0zNzA3NjEzMzA5NTgyMzE4ICAgICAgICAzMzk0OTExMTk2NTAzLjA0OCAgICAgICAtPiAgLTEwOTIuMTA5MDcwMDEwODM2IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAxNCAgZGl2aWRlICAgOTk2ODkuMDU1NTE5MDQ2MSAgICAgICAtNC43MzUyMDg1NTM4OTE0NjQgICAgICAgLT4gIC0yMTA1Mi43Mjc1Mzc2NTQxMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMTUgIGRpdmlkZSAgLTE0NDc5MTU3NzU2MTMzMjkgICAgICAgIDI2OTc1MDc5Ny44MTg0ODc1ICAgICAgIC0+ICAtNTM2NzYwNS4xNjQ5MjU2NTMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDE2ICBkaXZpZGUgIC05LjM5NDg4MTMwNDIyNTI1OEUtMTkgIC04MzA1ODUuMDI1MjY3MTYzNiAgICAgICAtPiAgIDEuMTMxMTE2MTQzMjUxMzU4RS0yNCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMTcgIGRpdmlkZSAgLTEuMDU2MjgzNDMyNzM4OTM0ICAgICAgIDg4LjU4NzU0NTU1MTI0MDEzICAgICAgIC0+ICAtMC4wMTE5MjM2MTEwMDE1OTM1MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMTggIGRpdmlkZSAgIDU3NjMyMjA5MzMzNDMuMDgxICAgICAgIDY4OTA4OTU2NzAyNTA1Mi4xICAgICAgIC0+ICAgMC4wMDgzNjM1Mjk1MTY1MjQ0NTYgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDE5ICBkaXZpZGUgICA4NzM4MTkuMTIyMTAzMjE2ICAgICAgICA5Ljc0MDYxMjQ5NDUyMzMwMEUtNDkgICAtPiAgIDguOTcwODg0NzYzMDkzOTQ4RSs1MyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMjAgIGRpdmlkZSAgIDgwMjI5MTQuODM4NTMzNTc2ICAgICAgIDYxNzguNTY2ODAxNzQyNzEzICAgICAgIC0+ICAgMTI5OC41MDc0MjAyNDM1ODMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDIxICBkaXZpZGUgICAyMDM5ODIuNzYwNTY1MDM2MyAgICAgIC0yMTU4LjI4MzYzOTA1MzQzNSAgICAgICAtPiAgLTk0LjUxMTU2MzIwNDIyMTY4IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAyMiAgZGl2aWRlICAgODAzLjYzMTA1NDcwMTMwMzAgICAgICAgNzEwMTE0Mzc5NTM5OS4yMzggICAgICAgLT4gICAxLjEzMTY5MjQxMTYxMTE2NkUtMTAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDIzICBkaXZpZGUgICA5LjI1MTY5Nzg0MjEyMzM5OUUtODIgIC0xLjM0MjM1MDIyMDYwNjExOUUtNyAgICAtPiAgLTYuODkyMTYzOTgyMzIxOTM2RS03NSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMjQgIGRpdmlkZSAgLTEuOTgwNjAwNjQ1NjM3OTkyRS01MyAgLTUuNDc0MjYyNzUzMjE0NDU3RSs3NyAgIC0+ICAgMy42MTgwMjI2MTc3MDMxNjhFLTEzMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMjUgIGRpdmlkZSAgLTIxMC4wMzIyOTk2MzUxNjkwICAgICAgLTguNTgwOTUxODM1ODcyODQzRSs4MCAgIC0+ICAgMi40NDc2NTczNjU0MzQ5NzFFLTc5IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAyNiAgZGl2aWRlICAtMS44MjE5ODAzMTQwMjAzNzBFKzg1ICAtMy4wMTg5MTUyNjcxMzgxNjUgICAgICAgLT4gICA2LjAzNTIxNTE0NDUwMzA0MkUrODQgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDI3ICBkaXZpZGUgIC03NzIyNjQ1MDM2MDEuMTA0NyAgICAgICA1LjE1ODI1ODI3MTQwODk4OEUtODYgICAtPiAgLTEuNDk3MTQxOTg2NjMwNjE0RSs5NyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMjggIGRpdmlkZSAgLTc2Ny4wNTMyNDE1ODQ3MTA2ICAgICAgIDIuNzAwMDI3MjI4MDI4OTM5RS01OSAgIC0+ICAtMi44NDA5MDkyODI3NzI5NDFFKzYxIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAyOSAgZGl2aWRlICAgNDk2NzI0Ljg1NDgyNTAwOTMgICAgICAgNy4zMjcwMDU4ODE2MzEwMEUrNjYgICAgLT4gICA2Ljc3OTM3MDIyMDkyOTAxM0UtNjIgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDMwICBkaXZpZGUgIC0zMDQyMzI2NTE0NDc3MDMuOSAgICAgIC0xMDguOTczMDgwODY1NzQ0MCAgICAgICAtPiAgIDI3OTE4MTQ3MjE4NjIuNTY1IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAzMSAgZGl2aWRlICAtNy4yMzM4MTcxOTI2OTk0MDVFKzQyICAtNTcxMTMwMjAwNC4xNDk0MTEgICAgICAgLT4gICAxLjI2NjU3OTM1MjIxMTQzMEUrMzMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDMyICBkaXZpZGUgIC05Ljk5OTIyMTQ0NDkxMjc0NUUrOTYgICA0MDEwNTY5NDA2NDQ2MTk3ICAgICAgICAtPiAgLTIuNDkzMjE3NDA0MjAyMjUwRSs4MSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMzMgIGRpdmlkZSAgLTE4MzcyNzIuMDYxOTM3NjIyICAgICAgIDguMzU2MzIyODM4MDY2NzYyICAgICAgIC0+ICAtMjE5ODY2LjA5MzkxOTY4ODIgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDM0ICBkaXZpZGUgICAyMTY4LjUxNzU1NTYwNjUyOSAgICAgICAyMDkuMTkxMDI1ODYxNTA2MSAgICAgICAtPiAgIDEwLjM2NjIwNzM3NzU2Nzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAzNSAgZGl2aWRlICAtMS44ODQzODk3OTA1NzYzNzFFKzg4ICAgMi45NTE4MTk1Mzg3MDU4M0UrMjAgICAgLT4gIC02LjM4MzgyNDUwNTA3OTgyOEUrNjcgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDM2ICBkaXZpZGUgICA3MzIyNjMuNjAzNzQzODE5NiAgICAgICA5NjEyMjIuMzYzNDQ0Njg4OSAgICAgICAtPiAgIDAuNzYxODA0NTg1MDY5ODI2OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMzcgIGRpdmlkZSAgLTgxMzQ2MTQxOS4wMzQ4MzM2ICAgICAgIDUuMzc2MjkzNzUzODA5MTQzRSs4NCAgIC0+ICAtMS41MTMwNTI0MDQyODU5MjdFLTc2IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAzOCAgZGl2aWRlICAtNDU1NjIxMzM1MDgxMDguNTAgICAgICAtOS43NzY4NDM0OTQ2OTAxMDdFKzUxICAgLT4gICA0LjY2MDIwODk0NTAyOTUxOUUtMzkgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDM5ICBkaXZpZGUgIC02LjQ4OTM5MzE3MjQ0MTAxNkUrODAgIC05MTAxOTY1LjA5Nzg1MjExMyAgICAgICAtPiAgIDcuMTI5NjYxNjc0ODk3NDIxRSs3MyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNDAgIGRpdmlkZSAgIDMuNjk0NTc2MjM3MTE3MzQ5RSs5MyAgIDY2ODM1MTIuMDEyNjIyMDAzICAgICAgIC0+ICAgNS41Mjc4OTY0NTY0NDM5MTJFKzg2IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA0MSAgZGl2aWRlICAtMi4yNTI4Nzc3MjY0MDMyNzJFKzE5ICAtNzQ1MTkxMzI1Ni4xODEzNjcgICAgICAgLT4gICAzMDIzMjIwNTQ2LjEyNTUzMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNDIgIGRpdmlkZSAgIDUxODMwMy4xOTg5MTExODQyICAgICAgIDUwLjAxNTg3MDIwNDc0MTMzICAgICAgIC0+ICAgMTAzNjIuNzc0NzkxMDcxMjMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDQzICBkaXZpZGUgICAyLjkwMjA4Nzg4MTg4MDEwM0UrMjQgICAzMy4zMjQwMDk5MjMwNTcwMiAgICAgICAtPiAgIDguNzA4Njk5NDg4OTg5NTc4RSsyMiBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNDQgIGRpdmlkZSAgIDU0OTYxOS40NTU5NTEwNTU3ICAgICAgIDE2NjA4MjQ4NDUxOTYzMzggICAgICAgIC0+ICAgMy4zMDkzMTYxOTYzNTExMDRFLTEwIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA0NSAgZGl2aWRlICAtNjc3NTY3MDc3NDY4NDA0MyAgICAgICAgODI5MjE1MjAyMy4wNzcyNjIgICAgICAgLT4gIC04MTcxMTguNDk0MTg5MTA2MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNDYgIGRpdmlkZSAgLTc3LjUwOTIzOTIxNTI0MDc5ICAgICAgLTUuNjM2ODgyNjU1NDI1ODE1RSs3NCAgIC0+ICAgMS4zNzUwMzczMDI1ODg0MDVFLTczIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA0NyAgZGl2aWRlICAtMi45ODQ4ODk0NTk2MDUxNDlFLTEwICAtODgxMDYxNTY3ODQxMjIuOTkgICAgICAgLT4gICAzLjM4NzgzMzAwNTcyMTM4NEUtMjQgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDQ4ICBkaXZpZGUgICAwLjk0OTUxNzI5Mzk5NzA4NSAgICAgICA0NDc2NzExNS45NjQ1MDk5OCAgICAgICAtPiAgIDIuMTIxMDE1MTEwMTc1NTg5RS04IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA0OSAgZGl2aWRlICAtMjc2MDkzNzIxMS4wODQ1MjEgICAgICAtMTA4NzAxNTg3Njk3NTQwOCAgICAgICAgLT4gICAwLjAwMDAwMjUzOTkyMzUzNzA1NzAyNCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNTAgIGRpdmlkZSAgIDI4NDM4MzUxLjg1MDMwNTM2ICAgICAgLTQuMjA5Mzk3OTA0MDg4NjI0RS00NyAgIC0+ICAtNi43NTU5MTkxMzU3NzA2ODhFKzUzIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA1MSAgZGl2aWRlICAtODU1NjI3MzEuNjgyMDk1NiAgICAgICAtNy4xNjYwNDU0NDI1MzAxODVFKzQ1ICAgLT4gICAxLjE5NDAwMjA4MDYyMTU0MkUtMzggSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDUyICBkaXZpZGUgICAyNTMzODAyODUyMTY1LjI1ICAgICAgICA3MTU0LjExOTYwNjIzNTk1NSAgICAgICAtPiAgIDM1NDE3Mzk1Ny4zMzE3NTAxIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA1MyAgZGl2aWRlICAtODg1ODgzMTM0Njg1MS40NzQgICAgICAgOTcuNTk3MzQyMDg4MDE3MTYgICAgICAgLT4gIC05MDc2OTE4NjUwOS44MzU3NyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNTQgIGRpdmlkZSAgIDE3Njc4MzYyOTgwMTM4Ny41ICAgICAgIDg0MDA3MzI2My4zMTA5ODE3ICAgICAgIC0+ICAgMjEwNDM4LjM0ODA4NDgyMDYgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDU1ICBkaXZpZGUgIC00OTM1MDY0NzE3OTYxNzUuNiAgICAgICA3OTczMzg5NDc5MDgyMi4wMyAgICAgICAtPiAgLTYuMTg5NDE4ODU0OTQwNzQ2IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA1NiAgZGl2aWRlICAgNzkwLjE2ODI1NDIxMDM0NDUgICAgICAgODI5Ljk0NDkzNzAzNjc0MzUgICAgICAgLT4gICAwLjk1MjA3MzEwNjIzNzEyMTQgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDU3ICBkaXZpZGUgIC04OTIwNDU5ODM4LjU4MzE2NCAgICAgIC00NzY3Ljg4OTE4Nzg5OTIxNCAgICAgICAtPiAgIDE4NzA5NDUuMjk0MDM1NTgxIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA1OCAgZGl2aWRlICAgNTM1MzY2ODcxNjQ0MjIuMSAgICAgICAgNTMxMzcuNTAwNzAzMjY4OSAgICAgICAgLT4gICAxMDA3NTEyMzMwLjM4NTY5OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNTkgIGRpdmlkZSAgIDQuMDUxNTMyMzExMTQ2NTYxRS03NCAgLTIuMzQzMDg5NzY4OTcyMjYxRSs5NCAgIC0+ICAtMS43MjkxNDA4ODI2MDYzMzJFLTE2OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNjAgIGRpdmlkZSAgLTE0ODQ3NzU4Nzc4NjM2Ljg4ICAgICAgIDMuMDYyNTQzNTE2MzgzODA3RS00MyAgIC0+ICAtNC44NDgxNzg4NzQ1ODc0OTdFKzU1IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIERpdmlzaW9uIHByb2JhYmx5IGhhcyBwcmUtcm91bmRpbmcsIHNvIG5lZWQgdG8gdGVzdCByb3VuZGluZw0KLS0tIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gYXNzdW1lIGluY2x1ZGVkIHRocm91Z2ggb3RoZXIgdGVzdHM7DQotLS0gdGVzdHMgaW5jbHVkZSBzaW1wbGUgcm91bmRpbmcgYW5kIGFsc28gdGhlIHRyaWNreSBjYXNlcyBvZiBzdGlja3kNCi0tLSBiaXRzIGZvbGxvd2luZyB0d28gemVyb3MNCi0tLQ0KLS0tICAgMS85OTk5OSBnaXZlcyAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxMDAwMDENCi0tLSAgICAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLS0tDQotLS0gICAxLzk5OTk5OSBnaXZlcyAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi0NCi1yb3VuZGluZzogY2VpbGluZw0KLWRkZGl2MzAwMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzQgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDAyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwMDMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDA0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAxIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBmbG9vcg0KLWRkZGl2MzAxMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDEyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwMTMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDE0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiB1cA0KLWRkZGl2MzAyMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzQgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDIyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwMjMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDI0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAxIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZGRkaXYzMDMxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwMzIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzAzMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwMzQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfdXANCi1kZGRpdjMwNDEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzA0MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDQzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzA0NCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9kb3duDQotZGRkaXYzMDUxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwNTIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzA1MyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwNTQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkZGl2MzA2MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDYyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwNjMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDY0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAwNXVwDQotZGRkaXYzMDcxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwNzIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzA3MyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwNzQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDEgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gcmFuZG9tIGRpdmlkZSB0ZXN0cyB3aXRoIHJlc3VsdCBuZWFyIDENCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZGRkaXY0MDAxIGRpdmlkZSAgMzE5NTM4NTE5MjkxNjkxNyAgIDMxOTUzODUxOTI5NDY2OTUgIC0+ICAwLjk5OTk5OTk5OTk5MDY4MDkgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAwMiBkaXZpZGUgIDEzOTM3MjMwNjc1MjY5OTMgICAxMzkzNzIzMDY3NTE5NDc1ICAtPiAgMS4wMDAwMDAwMDAwMDUzOTQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAwMyBkaXZpZGUgICA3NTk5ODU1NDM3MDIzMDIgICAgNzU5OTg1NTQzNjc0MDE1ICAtPiAgMS4wMDAwMDAwMDAwMzcyMjAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAwNCBkaXZpZGUgIDk1NzkxNTg0NTYwMjczMDIgICA5NTc5MTU4NDU2MDM2ODY0ICAtPiAgMC45OTk5OTk5OTk5OTkwMDE4ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMDUgZGl2aWRlICA3MDc5Mzk4Mjk5MTQzNTY5ICAgNzA3OTM5ODI5OTE1NjkwNCAgLT4gIDAuOTk5OTk5OTk5OTk4MTE2NCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDA2IGRpdmlkZSAgNjYzNjE2OTI1NTM2NjU5OCAgIDY2MzYxNjkyNTUzMzYzODYgIC0+ICAxLjAwMDAwMDAwMDAwNDU1MyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDA3IGRpdmlkZSAgNjk2NDgxMzk3MTM0MDA5MCAgIDY5NjQ4MTM5NzEzMjE1NTQgIC0+ICAxLjAwMDAwMDAwMDAwMjY2MSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDA4IGRpdmlkZSAgNDE4MjI3NTIyNTQ4MDc4NCAgIDQxODIyNzUyMjU0NTQwMDkgIC0+ICAxLjAwMDAwMDAwMDAwNjQwMiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDA5IGRpdmlkZSAgOTIyODMyNTEyNDkzODAyOSAgIDkyMjgzMjUxMjQ5MTg3MzAgIC0+ICAxLjAwMDAwMDAwMDAwMjA5MSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDEwIGRpdmlkZSAgMzQyODM0NjMzODYzMDE5MiAgIDM0MjgzNDYzMzg2MDk4NDMgIC0+ICAxLjAwMDAwMDAwMDAwNTkzNiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDExIGRpdmlkZSAgMjE0MzUxMTU1MDcyMjg5MyAgIDIxNDM1MTE1NTA3NTE3NTQgIC0+ICAwLjk5OTk5OTk5OTk4NjUzNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAxMiBkaXZpZGUgIDE2NzI3MzI5MjQzOTY3ODUgICAxNjcyNzMyOTI0NDAxODExICAtPiAgMC45OTk5OTk5OTk5OTY5OTUzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMTMgZGl2aWRlICA0MTkwNzE0NjExOTQ4MjE2ICAgNDE5MDcxNDYxMTk0ODY2NCAgLT4gIDAuOTk5OTk5OTk5OTk5ODkzMSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDE0IGRpdmlkZSAgMzk0MjI1NDgwMDg0ODg3NyAgIDM5NDIyNTQ4MDA4MTQ1NTYgIC0+ICAxLjAwMDAwMDAwMDAwODcwNiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDE1IGRpdmlkZSAgMjg1NDQ1OTgyNjk1MjMzNCAgIDI4NTQ0NTk4MjY5NjA3NjIgIC0+ICAwLjk5OTk5OTk5OTk5NzA0NzQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAxNiBkaXZpZGUgIDI4NTMyNTg5NTM2NjQ3MzEgICAyODUzMjU4OTUzNjg0NDcxICAtPiAgMC45OTk5OTk5OTk5OTMwODE2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMTcgZGl2aWRlICA5NDUzNTEyNjM4MTI1OTc4ICAgOTQ1MzUxMjYzODE0NjQyNSAgLT4gIDAuOTk5OTk5OTk5OTk3ODM3MSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDE4IGRpdmlkZSAgIDMzOTQ3NjYzMzk0MDM2OSAgICAzMzk0NzY2MzM5MTI4ODcgIC0+ICAxLjAwMDAwMDAwMDA4MDk1NCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDE5IGRpdmlkZSAgNDU0MjE4MTQ5MjY4ODQ2NyAgIDQ1NDIxODE0OTI2OTc3MzUgIC0+ICAwLjk5OTk5OTk5OTk5Nzk1OTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAyMCBkaXZpZGUgIDczMTI2MDAxOTIzOTkxOTcgICA3MzEyNjAwMTkyMzk1NDI0ICAtPiAgMS4wMDAwMDAwMDAwMDA1MTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAyMSBkaXZpZGUgIDE4MTE2NzQ5ODU1NzAxMTEgICAxODExNjc0OTg1NjAzOTM1ICAtPiAgMC45OTk5OTk5OTk5ODEzMzAwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMjIgZGl2aWRlICAxNzA2NDYyNjM5MDAzNDgxICAgMTcwNjQ2MjYzOTAxNzc0MCAgLT4gIDAuOTk5OTk5OTk5OTkxNjQ0MSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDIzIGRpdmlkZSAgNjY5NzA1MjY1NDk0MDM2OCAgIDY2OTcwNTI2NTQ5MzQxMTAgIC0+ICAxLjAwMDAwMDAwMDAwMDkzNCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDI0IGRpdmlkZSAgNTAxNTI4MzY2NDI3NzUzOSAgIDUwMTUyODM2NjQzMTA3MTkgIC0+ICAwLjk5OTk5OTk5OTk5MzM4NDIgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAyNSBkaXZpZGUgIDIzNTk1MDE1NjE1Mzc0NjQgICAyMzU5NTAxNTYxNTAyNDY0ICAtPiAgMS4wMDAwMDAwMDAwMTQ4MzQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAyNiBkaXZpZGUgIDI2Njk4NTAyMjc5MDkxNTcgICAyNjY5ODUwMjI3OTAxNTQ4ICAtPiAgMS4wMDAwMDAwMDAwMDI4NTAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAyNyBkaXZpZGUgIDkzMjk3MjU1NDY5NzQ2NDggICA5MzI5NzI1NTQ3MDAyNDQ1ICAtPiAgMC45OTk5OTk5OTk5OTcwMjA2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMjggZGl2aWRlICAzMjI4NTYyODY3MDcxMjQ4ICAgMzIyODU2Mjg2NzEwNjIwNiAgLT4gIDAuOTk5OTk5OTk5OTg5MTcyMyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDI5IGRpdmlkZSAgNDg2MjIyNjY0NDkyMTE3NSAgIDQ4NjIyMjY2NDQ5MDkzODAgIC0+ICAxLjAwMDAwMDAwMDAwMjQyNiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDMwIGRpdmlkZSAgMTAyMjI2Nzk5NzA1NDUyOSAgIDEwMjIyNjc5OTcwNzEzMjkgIC0+ICAwLjk5OTk5OTk5OTk4MzU2NjAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAzMSBkaXZpZGUgIDEwNDg3Nzc0ODIwMjM3MTkgICAxMDQ4Nzc3NDgyMDAwOTQ4ICAtPiAgMS4wMDAwMDAwMDAwMjE3MTIgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAzMiBkaXZpZGUgIDk5ODAxMTM3NzczMzcwOTggICA5OTgwMTEzNzc3MzMwNTM5ICAtPiAgMS4wMDAwMDAwMDAwMDA2NTcgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAzMyBkaXZpZGUgIDc1MDY4MzkxNjc5NjM5MDggICA3NTA2ODM5MTY3OTQyOTAxICAtPiAgMS4wMDAwMDAwMDAwMDI3OTggIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAzNCBkaXZpZGUgICAyMzExMTk3NTE5Nzc4NjAgICAgMjMxMTE5NzUxOTYyNDUzICAtPiAgMS4wMDAwMDAwMDAwNjY2NjIgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAzNSBkaXZpZGUgIDQwMzQ5MDM2NjQ3NjI5NjIgICA0MDM0OTAzNjY0Nzk1NTI2ICAtPiAgMC45OTk5OTk5OTk5OTE5Mjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMzYgZGl2aWRlICA1NzAwMTIyMTUyMjc0Njk2ICAgNTcwMDEyMjE1MjI1MTM4NiAgLT4gIDEuMDAwMDAwMDAwMDA0MDg5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMzcgZGl2aWRlICA2ODY5NTk5NTkwMjkzMTEwICAgNjg2OTU5OTU5MDI5MzQ5NSAgLT4gIDAuOTk5OTk5OTk5OTk5OTQ0MCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDM4IGRpdmlkZSAgNTU3NjI4MTk2MDA5Mjc5NyAgIDU1NzYyODE5NjAxMDU1NzkgIC0+ICAwLjk5OTk5OTk5OTk5NzcwNzggIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAzOSBkaXZpZGUgIDIzMDQ4NDQ4ODgzODEzMTggICAyMzA0ODQ0ODg4MzUzMDczICAtPiAgMS4wMDAwMDAwMDAwMTIyNTUgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA0MCBkaXZpZGUgIDMyNjU5MzM2NTE2NTY0NTIgICAzMjY1OTMzNjUxNjgyNzc5ICAtPiAgMC45OTk5OTk5OTk5OTE5Mzg5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNDEgZGl2aWRlICA1MjM1NzE0OTg1MDc5OTE0ICAgNTIzNTcxNDk4NTA2NjEzMSAgLT4gIDEuMDAwMDAwMDAwMDAyNjMyICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNDIgZGl2aWRlICA1NTc4NDgxNTcyODI3NTUxICAgNTU3ODQ4MTU3MjgyMjk0NSAgLT4gIDEuMDAwMDAwMDAwMDAwODI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNDMgZGl2aWRlICA0OTA5NjE2MDgxMzk2MTM0ICAgNDkwOTYxNjA4MTM3MzA3NiAgLT4gIDEuMDAwMDAwMDAwMDA0Njk2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNDQgZGl2aWRlICAgNjM2NDQ3MjI0MzQ5NTM3ICAgIDYzNjQ0NzIyNDMzODc1NyAgLT4gIDEuMDAwMDAwMDAwMDE2OTM4ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNDUgZGl2aWRlICAxNTM5MzczNDI4Mzk2NjQwICAgMTUzOTM3MzQyODM2NDcyNyAgLT4gIDEuMDAwMDAwMDAwMDIwNzMxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNDYgZGl2aWRlICAyMDI4Nzg2NzA3Mzc3ODkzICAgMjAyODc4NjcwNzM3ODg2NiAgLT4gIDAuOTk5OTk5OTk5OTk5NTIwNCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDQ3IGRpdmlkZSAgIDEzNzY0MzI2MDQ4NjIyMiAgICAxMzc2NDMyNjA0ODc0MTkgIC0+ICAwLjk5OTk5OTk5OTk5MTMwMzYgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA0OCBkaXZpZGUgICAyNDc0NTE1MTk3NDY3NjUgICAgMjQ3NDUxNTE5NzUyMjY3ICAtPiAgMC45OTk5OTk5OTk5Nzc3NjUzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNDkgZGl2aWRlICA3ODc3ODU4NDc1MDIyMDU0ICAgNzg3Nzg1ODQ3NDk5OTc5NCAgLT4gIDEuMDAwMDAwMDAwMDAyODI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNTAgZGl2aWRlICA3MzMzMjQyNjk0NzY2MjU4ICAgNzMzMzI0MjY5NDc0NDYyOCAgLT4gIDEuMDAwMDAwMDAwMDAyOTUwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNTEgZGl2aWRlICAgMTI0MDUxNTAzNjk4NTkyICAgIDEyNDA1MTUwMzY5OTM5NyAgLT4gIDAuOTk5OTk5OTk5OTkzNTEwOCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDUyIGRpdmlkZSAgODk0NDczNzQzMjM4NTE4OCAgIDg5NDQ3Mzc0MzI0MDY4NjAgIC0+ICAwLjk5OTk5OTk5OTk5NzU3NzEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA1MyBkaXZpZGUgIDk4ODM5NDg5MjM0MDY4NzQgICA5ODgzOTQ4OTIzNDI0ODQzICAtPiAgMC45OTk5OTk5OTk5OTgxODIwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNTQgZGl2aWRlICA2ODI5MTc4NzQxNjU0Mjg0ICAgNjgyOTE3ODc0MTY3MTk3MyAgLT4gIDAuOTk5OTk5OTk5OTk3NDA5OCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDU1IGRpdmlkZSAgNzM0Mjc1MjQ3OTc2ODEyMiAgIDczNDI3NTI0Nzk3OTMzODUgIC0+ICAwLjk5OTk5OTk5OTk5NjU1OTUgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA1NiBkaXZpZGUgIDgwNjY0MjY1NzkwMDg3ODMgICA4MDY2NDI2NTc4OTc3NTYzICAtPiAgMS4wMDAwMDAwMDAwMDM4NzAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA1NyBkaXZpZGUgIDg5OTI3NzUwNzEzODMyOTUgICA4OTkyNzc1MDcxMzUyNzEyICAtPiAgMS4wMDAwMDAwMDAwMDM0MDEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA1OCBkaXZpZGUgIDU0ODUwMTE3NTU1NDU2NDEgICA1NDg1MDExNzU1NTQzNjExICAtPiAgMS4wMDAwMDAwMDAwMDAzNzAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA1OSBkaXZpZGUgIDU3Nzk5ODMwNTQzNTM5MTggICA1Nzc5OTgzMDU0MzY1MzAwICAtPiAgMC45OTk5OTk5OTk5OTgwMzA4ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNjAgZGl2aWRlICA5NTAyMjY1MTAyNzEzNzc0ICAgOTUwMjI2NTEwMjczNTIwOCAgLT4gIDAuOTk5OTk5OTk5OTk3NzQ0MyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDYxIGRpdmlkZSAgMjEwOTU1ODM5OTEzMDk4MSAgIDIxMDk1NTgzOTkxMTYyODEgIC0+ICAxLjAwMDAwMDAwMDAwNjk2OCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDYyIGRpdmlkZSAgNTI5NjE4MjYzNjM1MDQ3MSAgIDUyOTYxODI2MzYzNTE1MjEgIC0+ICAwLjk5OTk5OTk5OTk5OTgwMTcgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA2MyBkaXZpZGUgIDE0NDAwMTkyMjU1OTE4ODMgICAxNDQwMDE5MjI1NjAxODQ0ICAtPiAgMC45OTk5OTk5OTk5OTMwODI3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNjQgZGl2aWRlICA4MTgyMTEwNzkxODgxMzQxICAgODE4MjExMDc5MTg0NzE3NCAgLT4gIDEuMDAwMDAwMDAwMDA0MTc2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNjUgZGl2aWRlICAgNDg5MDk4MjM1NTEyMDYwICAgIDQ4OTA5ODIzNTUzNDUxNiAgLT4gIDAuOTk5OTk5OTk5OTU0MDg2OSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDY2IGRpdmlkZSAgNjQ3NTY4NzA4NDc4MjAzOCAgIDY0NzU2ODcwODQ3NTYwODkgIC0+ICAxLjAwMDAwMDAwMDAwNDAwNyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDY3IGRpdmlkZSAgODA5NDM0ODU1NTczNjk0OCAgIDgwOTQzNDg1NTU3NTkyMzYgIC0+ICAwLjk5OTk5OTk5OTk5NzI0NjUgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA2OCBkaXZpZGUgIDE5ODI3NjY4MTYyOTE1NDMgICAxOTgyNzY2ODE2MzA5NDYzICAtPiAgMC45OTk5OTk5OTk5OTA5NjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNjkgZGl2aWRlICA5Mjc3MzE0MzAwMTEzMjUxICAgOTI3NzMxNDMwMDA4NDQ2NyAgLT4gIDEuMDAwMDAwMDAwMDAzMTAzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNzAgZGl2aWRlICA0MzM1NTMyOTU5MzE4OTM0ICAgNDMzNTUzMjk1OTI5MzE2NyAgLT4gIDEuMDAwMDAwMDAwMDA1OTQzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNzEgZGl2aWRlICA3NzY3MTEzMDMyOTgxMzQ4ICAgNzc2NzExMzAzMjk2ODEzMiAgLT4gIDEuMDAwMDAwMDAwMDAxNzAyICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNzIgZGl2aWRlICAxNTc4NTQ4MDUzMzQyODY4ICAgMTU3ODU0ODA1MzM3MDQ0OCAgLT4gIDAuOTk5OTk5OTk5OTgyNTI4MiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDczIGRpdmlkZSAgMzc5MDQyMDY4NjY2Njg5OCAgIDM3OTA0MjA2ODY2MzYzMTUgIC0+ICAxLjAwMDAwMDAwMDAwODA2OCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDc0IGRpdmlkZSAgIDg3MTY4MjQyMTk1NTE0NyAgICA4NzE2ODI0MjE5NzY0NDEgIC0+ICAwLjk5OTk5OTk5OTk3NTU3MTQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA3NSBkaXZpZGUgICA3NDQxNDEwNTQ0Nzk5NDAgICAgNzQ0MTQxMDU0NTEyMzI5ICAtPiAgMC45OTk5OTk5OTk5NTY0NzQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNzYgZGl2aWRlICA4OTU2ODI0MTgzNjcwNzM1ICAgODk1NjgyNDE4MzY0MTc0MSAgLT4gIDEuMDAwMDAwMDAwMDAzMjM3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNzcgZGl2aWRlICA4MzM3MjkxNjk0NDg1NjgyICAgODMzNzI5MTY5NDQ1MTE5MyAgLT4gIDEuMDAwMDAwMDAwMDA0MTM3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNzggZGl2aWRlICA0MTA3Nzc1OTQ0NjgzNjY5ICAgNDEwNzc3NTk0NDY1NzA5NyAgLT4gIDEuMDAwMDAwMDAwMDA2NDY5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNzkgZGl2aWRlICA4NjkxOTAwMDU3OTY0NjQ4ICAgODY5MTkwMDA1Nzk5NzU1NSAgLT4gIDAuOTk5OTk5OTk5OTk2MjE0MSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDgwIGRpdmlkZSAgMjIyOTUyODUyMDUzNjQ2MiAgIDIyMjk1Mjg1MjA1MDIzMzcgIC0+ICAxLjAwMDAwMDAwMDAxNTMwNiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDgxIGRpdmlkZSAgIDM5ODQ0MjA4Mzc3NDMyMiAgICAzOTg0NDIwODM3NDYyNzMgIC0+ICAxLjAwMDAwMDAwMDA3MDM5NyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDgyIGRpdmlkZSAgNTMxOTgxOTc3NjgwODc1OSAgIDUzMTk4MTk3NzY4MzgzMTMgIC0+ICAwLjk5OTk5OTk5OTk5NDQ0NDUgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA4MyBkaXZpZGUgIDc3MTA0OTEyOTkwNjY4NTUgICA3NzEwNDkxMjk5MDQxODU4ICAtPiAgMS4wMDAwMDAwMDAwMDMyNDIgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA4NCBkaXZpZGUgIDkwODMyMzEyOTYwODcyNjYgICA5MDgzMjMxMjk2MDU4MTYwICAtPiAgMS4wMDAwMDAwMDAwMDMyMDQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA4NSBkaXZpZGUgIDM1NjY4NzM1NzQ5MDQ1NTkgICAzNTY2ODczNTc0ODkwMzI4ICAtPiAgMS4wMDAwMDAwMDAwMDM5OTAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA4NiBkaXZpZGUgICA1OTYzNDMyOTA1NTA1MjUgICAgNTk2MzQzMjkwNTU1NjE0ICAtPiAgMC45OTk5OTk5OTk5OTE0NjYzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwODcgZGl2aWRlICAgMjc4MjI3OTI1MDkzMTkyICAgIDI3ODIyNzkyNTA2ODEwNCAgLT4gIDEuMDAwMDAwMDAwMDkwMTcxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwODggZGl2aWRlICAzMjkyOTAyOTU4NDkwNjQ5ICAgMzI5MjkwMjk1ODUxOTg4MSAgLT4gIDAuOTk5OTk5OTk5OTkxMTIyNyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDg5IGRpdmlkZSAgNTUyMTg3MTM2NDI0NTg4MSAgIDU1MjE4NzEzNjQyMjk1MzYgIC0+ICAxLjAwMDAwMDAwMDAwMjk2MCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDkwIGRpdmlkZSAgMjQwNjUwNTYwMjg4MzYxNyAgIDI0MDY1MDU2MDI4NTc5OTcgIC0+ICAxLjAwMDAwMDAwMDAxMDY0NiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDkxIGRpdmlkZSAgNzc0MTE0Njk4NDg2OTIwOCAgIDc3NDExNDY5ODQ4NjcyNTUgIC0+ICAxLjAwMDAwMDAwMDAwMDI1MiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDkyIGRpdmlkZSAgNDU3NjA0MTgzMjQxNDkwOSAgIDQ1NzYwNDE4MzI0MDUxMDIgIC0+ICAxLjAwMDAwMDAwMDAwMjE0MyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDkzIGRpdmlkZSAgOTE4Mzc1Njk4Mjg3ODA1NyAgIDkxODM3NTY5ODI5MDE5MzQgIC0+ICAwLjk5OTk5OTk5OTk5NzQwMDEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA5NCBkaXZpZGUgIDYyMTU3MzY1MTM4NTUxNTkgICA2MjE1NzM2NTEzODcwMzQyICAtPiAgMC45OTk5OTk5OTk5OTc1NTczICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwOTUgZGl2aWRlICAgMjQ4NTU0OTY4NTM0NTMzICAgIDI0ODU1NDk2ODU1MTQxNyAgLT4gIDAuOTk5OTk5OTk5OTMyMDcxNCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDk2IGRpdmlkZSAgIDM3NjMxNDE2NTY2ODY0NSAgICAzNzYzMTQxNjU2NTk3NTUgIC0+ICAxLjAwMDAwMDAwMDAyMzYyNCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDk3IGRpdmlkZSAgNTUxMzU2OTI0OTgwOTcxOCAgIDU1MTM1NjkyNDk4MDg5MDYgIC0+ICAxLjAwMDAwMDAwMDAwMDE0NyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDk4IGRpdmlkZSAgMzM2Nzk5MjI0MjE2NzkwNCAgIDMzNjc5OTIyNDIxNTYyMjggIC0+ICAxLjAwMDAwMDAwMDAwMzQ2NyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDk5IGRpdmlkZSAgNjEzNDg2OTUzODk2Njk2NyAgIDYxMzQ4Njk1Mzg5ODU5ODYgIC0+ICAwLjk5OTk5OTk5OTk5Njg5OTkgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZGRpdjk5OTggZGl2aWRlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2OTk5OSBkaXZpZGUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZERpdmlkZS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBkaXZpc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZGRpdjAwMSBkaXZpZGUgIDEgICAgIDEgICAgLT4gIDEKK2RkZGl2MDAyIGRpdmlkZSAgMiAgICAgMSAgICAtPiAgMgorZGRkaXYwMDMgZGl2aWRlICAxICAgICAyICAgIC0+ICAwLjUKK2RkZGl2MDA0IGRpdmlkZSAgMiAgICAgMiAgICAtPiAgMQorZGRkaXYwMDUgZGl2aWRlICAwICAgICAxICAgIC0+ICAwCitkZGRpdjAwNiBkaXZpZGUgIDAgICAgIDIgICAgLT4gIDAKK2RkZGl2MDA3IGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYwMDggZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjAwOSBkaXZpZGUgIDMgICAgIDMgICAgLT4gIDEKKworZGRkaXYwMTAgZGl2aWRlICAyLjQgICAxICAgIC0+ICAyLjQKK2RkZGl2MDExIGRpdmlkZSAgMi40ICAgLTEgICAtPiAgLTIuNAorZGRkaXYwMTIgZGl2aWRlICAtMi40ICAxICAgIC0+ICAtMi40CitkZGRpdjAxMyBkaXZpZGUgIC0yLjQgIC0xICAgLT4gIDIuNAorZGRkaXYwMTQgZGl2aWRlICAyLjQwICAxICAgIC0+ICAyLjQwCitkZGRpdjAxNSBkaXZpZGUgIDIuNDAwIDEgICAgLT4gIDIuNDAwCitkZGRpdjAxNiBkaXZpZGUgIDIuNCAgIDIgICAgLT4gIDEuMgorZGRkaXYwMTcgZGl2aWRlICAyLjQwMCAyICAgIC0+ICAxLjIwMAorZGRkaXYwMTggZGl2aWRlICAyLiAgICAyICAgIC0+ICAxCitkZGRpdjAxOSBkaXZpZGUgIDIwICAgIDIwICAgLT4gIDEKKworZGRkaXYwMjAgZGl2aWRlICAxODcgICAxODcgICAgLT4gIDEKK2RkZGl2MDIxIGRpdmlkZSAgNSAgICAgMiAgICAgIC0+ICAyLjUKK2RkZGl2MDIyIGRpdmlkZSAgNTAgICAgMjAgICAgIC0+ICAyLjUKK2RkZGl2MDIzIGRpdmlkZSAgNTAwICAgMjAwICAgIC0+ICAyLjUKK2RkZGl2MDI0IGRpdmlkZSAgNTAuMCAgMjAuMCAgIC0+ICAyLjUKK2RkZGl2MDI1IGRpdmlkZSAgNS4wMCAgMi4wMCAgIC0+ICAyLjUKK2RkZGl2MDI2IGRpdmlkZSAgNSAgICAgMi4wICAgIC0+ICAyLjUKK2RkZGl2MDI3IGRpdmlkZSAgNSAgICAgMi4wMDAgIC0+ICAyLjUKK2RkZGl2MDI4IGRpdmlkZSAgNSAgICAgMC4yMCAgIC0+ICAyNQorZGRkaXYwMjkgZGl2aWRlICA1ICAgICAwLjIwMCAgLT4gIDI1CitkZGRpdjAzMCBkaXZpZGUgIDEwICAgIDEgICAgICAtPiAgMTAKK2RkZGl2MDMxIGRpdmlkZSAgMTAwICAgMSAgICAgIC0+ICAxMDAKK2RkZGl2MDMyIGRpdmlkZSAgMTAwMCAgMSAgICAgIC0+ICAxMDAwCitkZGRpdjAzMyBkaXZpZGUgIDEwMDAgIDEwMCAgICAtPiAgMTAKKworZGRkaXYwMzUgZGl2aWRlICAxICAgICAyICAgICAgLT4gIDAuNQorZGRkaXYwMzYgZGl2aWRlICAxICAgICA0ICAgICAgLT4gIDAuMjUKK2RkZGl2MDM3IGRpdmlkZSAgMSAgICAgOCAgICAgIC0+ICAwLjEyNQorZGRkaXYwMzggZGl2aWRlICAxICAgICAxNiAgICAgLT4gIDAuMDYyNQorZGRkaXYwMzkgZGl2aWRlICAxICAgICAzMiAgICAgLT4gIDAuMDMxMjUKK2RkZGl2MDQwIGRpdmlkZSAgMSAgICAgNjQgICAgIC0+ICAwLjAxNTYyNQorZGRkaXYwNDEgZGl2aWRlICAxICAgIC0yICAgICAgLT4gIC0wLjUKK2RkZGl2MDQyIGRpdmlkZSAgMSAgICAtNCAgICAgIC0+ICAtMC4yNQorZGRkaXYwNDMgZGl2aWRlICAxICAgIC04ICAgICAgLT4gIC0wLjEyNQorZGRkaXYwNDQgZGl2aWRlICAxICAgIC0xNiAgICAgLT4gIC0wLjA2MjUKK2RkZGl2MDQ1IGRpdmlkZSAgMSAgICAtMzIgICAgIC0+ICAtMC4wMzEyNQorZGRkaXYwNDYgZGl2aWRlICAxICAgIC02NCAgICAgLT4gIC0wLjAxNTYyNQorZGRkaXYwNDcgZGl2aWRlIC0xICAgICAyICAgICAgLT4gIC0wLjUKK2RkZGl2MDQ4IGRpdmlkZSAtMSAgICAgNCAgICAgIC0+ICAtMC4yNQorZGRkaXYwNDkgZGl2aWRlIC0xICAgICA4ICAgICAgLT4gIC0wLjEyNQorZGRkaXYwNTAgZGl2aWRlIC0xICAgICAxNiAgICAgLT4gIC0wLjA2MjUKK2RkZGl2MDUxIGRpdmlkZSAtMSAgICAgMzIgICAgIC0+ICAtMC4wMzEyNQorZGRkaXYwNTIgZGl2aWRlIC0xICAgICA2NCAgICAgLT4gIC0wLjAxNTYyNQorZGRkaXYwNTMgZGl2aWRlIC0xICAgIC0yICAgICAgLT4gIDAuNQorZGRkaXYwNTQgZGl2aWRlIC0xICAgIC00ICAgICAgLT4gIDAuMjUKK2RkZGl2MDU1IGRpdmlkZSAtMSAgICAtOCAgICAgIC0+ICAwLjEyNQorZGRkaXYwNTYgZGl2aWRlIC0xICAgIC0xNiAgICAgLT4gIDAuMDYyNQorZGRkaXYwNTcgZGl2aWRlIC0xICAgIC0zMiAgICAgLT4gIDAuMDMxMjUKK2RkZGl2MDU4IGRpdmlkZSAtMSAgICAtNjQgICAgIC0+ICAwLjAxNTYyNQorCistLSBiY2RUaW1lCitkZGRpdjA2MCBkaXZpZGUgIDEgNyAgICAgICAgICAgICAgICAgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkCitkZGRpdjA2MSBkaXZpZGUgMS4yMzQ1Njc4ICAxLjk4NzY1NDMgICAtPiAwLjYyMTExNzk2ODA0OTA3MTcgSW5leGFjdCBSb3VuZGVkCisKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRkaXYwNzEgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5CitkZGRpdjA3MiBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OSAgMSAgLT4gIDk5OTk5OTk5OTk5OTk5OQorZGRkaXYwNzMgZGl2aWRlICA5OTk5OTk5OTk5OTk5OSAgIDEgIC0+ICA5OTk5OTk5OTk5OTk5OQorZGRkaXYwNzQgZGl2aWRlICA5OTk5OTk5OTk5OTk5ICAgIDEgIC0+ICA5OTk5OTk5OTk5OTk5CitkZGRpdjA3NSBkaXZpZGUgIDk5OTk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OTk5OQorZGRkaXYwNzYgZGl2aWRlICA5OTk5OTk5OTk5OSAgICAgIDEgIC0+ICA5OTk5OTk5OTk5OQorZGRkaXYwNzcgZGl2aWRlICA5OTk5OTk5OTk5ICAgICAgIDEgIC0+ICA5OTk5OTk5OTk5CitkZGRpdjA3OCBkaXZpZGUgIDk5OTk5OTk5OSAgICAgICAgMSAgLT4gIDk5OTk5OTk5OQorZGRkaXYwNzkgZGl2aWRlICA5OTk5OTk5OSAgICAgICAgIDEgIC0+ICA5OTk5OTk5OQorZGRkaXYwODAgZGl2aWRlICA5OTk5OTk5ICAgICAgICAgIDEgIC0+ICA5OTk5OTk5CitkZGRpdjA4MSBkaXZpZGUgIDk5OTk5OSAgICAgICAgICAgMSAgLT4gIDk5OTk5OQorZGRkaXYwODIgZGl2aWRlICA5OTk5OSAgICAgICAgICAgIDEgIC0+ICA5OTk5OQorZGRkaXYwODMgZGl2aWRlICA5OTk5ICAgICAgICAgICAgIDEgIC0+ICA5OTk5CitkZGRpdjA4NCBkaXZpZGUgIDk5OSAgICAgICAgICAgICAgMSAgLT4gIDk5OQorZGRkaXYwODUgZGl2aWRlICA5OSAgICAgICAgICAgICAgIDEgIC0+ICA5OQorZGRkaXYwODYgZGl2aWRlICA5ICAgICAgICAgICAgICAgIDEgIC0+ICA5CisKK2RkZGl2MDkwIGRpdmlkZSAgMC4gICAgICAgICAgICAxICAgIC0+ICAwCitkZGRpdjA5MSBkaXZpZGUgIC4wICAgICAgICAgICAgMSAgICAtPiAgMC4wCitkZGRpdjA5MiBkaXZpZGUgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMC4wMAorZGRkaXYwOTMgZGl2aWRlICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDBFKzcKK2RkZGl2MDk0IGRpdmlkZSAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwRS01NAorCitkZGRpdjA5NSBkaXZpZGUgIDEgICAgICAgICAgICAxRS04ICAtPiAgMUUrOAorZGRkaXYwOTYgZGl2aWRlICAxICAgICAgICAgICAgMUUtOSAgLT4gIDFFKzkKK2RkZGl2MDk3IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEwIC0+ICAxRSsxMAorZGRkaXYwOTggZGl2aWRlICAxICAgICAgICAgICAgMUUtMTEgLT4gIDFFKzExCitkZGRpdjA5OSBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMiAtPiAgMUUrMTIKKworZGRkaXYxMDAgZGl2aWRlICAxICAxICAgLT4gMQorZGRkaXYxMDEgZGl2aWRlICAxICAyICAgLT4gMC41CitkZGRpdjEwMiBkaXZpZGUgIDEgIDMgICAtPiAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwMyBkaXZpZGUgIDEgIDQgICAtPiAwLjI1CitkZGRpdjEwNCBkaXZpZGUgIDEgIDUgICAtPiAwLjIKK2RkZGl2MTA1IGRpdmlkZSAgMSAgNiAgIC0+IDAuMTY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA2IGRpdmlkZSAgMSAgNyAgIC0+IDAuMTQyODU3MTQyODU3MTQyOSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA3IGRpdmlkZSAgMSAgOCAgIC0+IDAuMTI1CitkZGRpdjEwOCBkaXZpZGUgIDEgIDkgICAtPiAwLjExMTExMTExMTExMTExMTEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwOSBkaXZpZGUgIDEgIDEwICAtPiAwLjEKK2RkZGl2MTEwIGRpdmlkZSAgMSAgMSAgIC0+IDEKK2RkZGl2MTExIGRpdmlkZSAgMiAgMSAgIC0+IDIKK2RkZGl2MTEyIGRpdmlkZSAgMyAgMSAgIC0+IDMKK2RkZGl2MTEzIGRpdmlkZSAgNCAgMSAgIC0+IDQKK2RkZGl2MTE0IGRpdmlkZSAgNSAgMSAgIC0+IDUKK2RkZGl2MTE1IGRpdmlkZSAgNiAgMSAgIC0+IDYKK2RkZGl2MTE2IGRpdmlkZSAgNyAgMSAgIC0+IDcKK2RkZGl2MTE3IGRpdmlkZSAgOCAgMSAgIC0+IDgKK2RkZGl2MTE4IGRpdmlkZSAgOSAgMSAgIC0+IDkKK2RkZGl2MTE5IGRpdmlkZSAgMTAgMSAgIC0+IDEwCisKK2RkZGl2MTIwIGRpdmlkZSAgM0UrMSAwLjAwMSAgLT4gM0UrNAorZGRkaXYxMjEgZGl2aWRlICAyLjIwMCAyICAgICAtPiAxLjEwMAorCitkZGRpdjEzMCBkaXZpZGUgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkuNDkzODk4Nzc5NzU2ICAgIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMzEgZGl2aWRlICAxMjM0NSAgNC45OSAgIC0+ICAyNDczLjk0Nzg5NTc5MTU4MyAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTMyIGRpdmlkZSAgMTIzNDUgIDQuOSAgICAtPiAgMjUxOS4zODc3NTUxMDIwNDEgICAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEzMyBkaXZpZGUgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkKK2RkZGl2MTM0IGRpdmlkZSAgMTIzNDUgIDUuMSAgICAtPiAgMjQyMC41ODgyMzUyOTQxMTggICAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEzNSBkaXZpZGUgIDEyMzQ1ICA1LjAxICAgLT4gIDI0NjQuMDcxODU2Mjg3NDI1ICAgIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMzYgZGl2aWRlICAxMjM0NSAgNS4wMDEgIC0+ICAyNDY4LjUwNjI5ODc0MDI1MiAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBwb3NzaWJseSBpbXByZWNpc2UgcmVzdWx0cworZGRkaXYyMjAgZGl2aWRlIDM5MSAgIDU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzg0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjIxIGRpdmlkZSAzOTEgIC01OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIyMiBkaXZpZGUgLTM5MSAgNTk3IC0+IC0wLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMjMgZGl2aWRlIC0zOTEgLTU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzg0ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBzb21lIGNhc2VzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cG9uZW50IG92ZXJmbG93LCBzb21lIHdpdGggY29lZmZpY2llbnQgcGFkZGluZworZGRkaXYyNzAgZGl2aWRlIDEgMWUzODQgICAgICAgICAgICAgICAgICAtPiAxRS0zODQgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZGRkaXYyNzEgZGl2aWRlIDEgMC45ZTM4NCAgICAgICAgICAgICAgICAtPiAxLjExMTExMTExMTExMTExRS0zODQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGRpdjI3MiBkaXZpZGUgMSAwLjk5ZTM4NCAgICAgICAgICAgICAgIC0+IDEuMDEwMTAxMDEwMTAxMDFFLTM4NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZGl2MjczIGRpdmlkZSAxIDAuOTk5OTk5OTk5OTk5OTk5OWUzODQgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRkaXYyNzQgZGl2aWRlIDllMzg0ICAgIDEgICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQKK2RkZGl2Mjc1IGRpdmlkZSA5LjllMzg0ICAxICAgICAgICAgICAgICAgLT4gOS45MDAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkCitkZGRpdjI3NiBkaXZpZGUgOS45OWUzODQgMSAgICAgICAgICAgICAgIC0+IDkuOTkwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorZGRkaXYyNzcgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OWUzODQgMSAgICAtPiA5Ljk5OTk5OTk5OTk5OTkwMEUrMzg0IENsYW1wZWQKK2RkZGl2Mjc4IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5ZTM4NCAxICAgLT4gOS45OTk5OTk5OTk5OTk5OTBFKzM4NCBDbGFtcGVkCitkZGRpdjI3OSBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKKworZGRkaXYyODUgZGl2aWRlIDkuOWUzODQgIDEuMSAgICAgICAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkCitkZGRpdjI4NiBkaXZpZGUgOS45OWUzODQgMS4xICAgICAgICAgICAgICAtPiA5LjA4MTgxODE4MTgxODE4MkUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRkaXYyODcgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OWUzODQgMS4xICAgLT4gOS4wOTA5MDkwOTA5MDkwMDBFKzM4NCBDbGFtcGVkCitkZGRpdjI4OCBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OWUzODQgMS4xICAtPiA5LjA5MDkwOTA5MDkwOTA4MkUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRkaXYyODkgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTk5ZTM4NCAxLjEgLT4gOS4wOTA5MDkwOTA5MDkwOTBFKzM4NCBDbGFtcGVkCisKKworLS0gRGl2aWRlIGludG8gMCB0ZXN0cworZGRkaXYzMDEgZGl2aWRlICAgIDAgICAgNyAgICAgLT4gMAorZGRkaXYzMDIgZGl2aWRlICAgIDAgICAgN0UtNSAgLT4gMEUrNQorZGRkaXYzMDMgZGl2aWRlICAgIDAgICAgN0UtMSAgLT4gMEUrMQorZGRkaXYzMDQgZGl2aWRlICAgIDAgICAgN0UrMSAgLT4gMC4wCitkZGRpdjMwNSBkaXZpZGUgICAgMCAgICA3RSs1ICAtPiAwLjAwMDAwCitkZGRpdjMwNiBkaXZpZGUgICAgMCAgICA3RSs2ICAtPiAwLjAwMDAwMAorZGRkaXYzMDcgZGl2aWRlICAgIDAgICAgN0UrNyAgLT4gMEUtNworZGRkaXYzMDggZGl2aWRlICAgIDAgICA3MEUtNSAgLT4gMEUrNQorZGRkaXYzMDkgZGl2aWRlICAgIDAgICA3MEUtMSAgLT4gMEUrMQorZGRkaXYzMTAgZGl2aWRlICAgIDAgICA3MEUrMCAgLT4gMAorZGRkaXYzMTEgZGl2aWRlICAgIDAgICA3MEUrMSAgLT4gMC4wCitkZGRpdjMxMiBkaXZpZGUgICAgMCAgIDcwRSs1ICAtPiAwLjAwMDAwCitkZGRpdjMxMyBkaXZpZGUgICAgMCAgIDcwRSs2ICAtPiAwLjAwMDAwMAorZGRkaXYzMTQgZGl2aWRlICAgIDAgICA3MEUrNyAgLT4gMEUtNworZGRkaXYzMTUgZGl2aWRlICAgIDAgIDcwMEUtNSAgLT4gMEUrNQorZGRkaXYzMTYgZGl2aWRlICAgIDAgIDcwMEUtMSAgLT4gMEUrMQorZGRkaXYzMTcgZGl2aWRlICAgIDAgIDcwMEUrMCAgLT4gMAorZGRkaXYzMTggZGl2aWRlICAgIDAgIDcwMEUrMSAgLT4gMC4wCitkZGRpdjMxOSBkaXZpZGUgICAgMCAgNzAwRSs1ICAtPiAwLjAwMDAwCitkZGRpdjMyMCBkaXZpZGUgICAgMCAgNzAwRSs2ICAtPiAwLjAwMDAwMAorZGRkaXYzMjEgZGl2aWRlICAgIDAgIDcwMEUrNyAgLT4gMEUtNworZGRkaXYzMjIgZGl2aWRlICAgIDAgIDcwMEUrNzcgLT4gMEUtNzcKKworZGRkaXYzMzEgZGl2aWRlIDBFLTMgICAgN0UtNSAgLT4gMEUrMgorZGRkaXYzMzIgZGl2aWRlIDBFLTMgICAgN0UtMSAgLT4gMC4wMAorZGRkaXYzMzMgZGl2aWRlIDBFLTMgICAgN0UrMSAgLT4gMC4wMDAwCitkZGRpdjMzNCBkaXZpZGUgMEUtMyAgICA3RSs1ICAtPiAwRS04CitkZGRpdjMzNSBkaXZpZGUgMEUtMSAgICA3RS01ICAtPiAwRSs0CitkZGRpdjMzNiBkaXZpZGUgMEUtMSAgICA3RS0xICAtPiAwCitkZGRpdjMzNyBkaXZpZGUgMEUtMSAgICA3RSsxICAtPiAwLjAwCitkZGRpdjMzOCBkaXZpZGUgMEUtMSAgICA3RSs1ICAtPiAwLjAwMDAwMAorZGRkaXYzMzkgZGl2aWRlIDBFKzEgICAgN0UtNSAgLT4gMEUrNgorZGRkaXYzNDAgZGl2aWRlIDBFKzEgICAgN0UtMSAgLT4gMEUrMgorZGRkaXYzNDEgZGl2aWRlIDBFKzEgICAgN0UrMSAgLT4gMAorZGRkaXYzNDIgZGl2aWRlIDBFKzEgICAgN0UrNSAgLT4gMC4wMDAwCitkZGRpdjM0MyBkaXZpZGUgMEUrMyAgICA3RS01ICAtPiAwRSs4CitkZGRpdjM0NCBkaXZpZGUgMEUrMyAgICA3RS0xICAtPiAwRSs0CitkZGRpdjM0NSBkaXZpZGUgMEUrMyAgICA3RSsxICAtPiAwRSsyCitkZGRpdjM0NiBkaXZpZGUgMEUrMyAgICA3RSs1ICAtPiAwLjAwCisKKy0tIFRoZXNlIHdlcmUgJ2lucHV0IHJvdW5kaW5nJworZGRkaXY0NDEgZGl2aWRlIDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDAKK2RkZGl2NDQyIGRpdmlkZSAxIDEyMzQ1Njc4MDAwIC0+IDguMTAwMDAwNjY0MjAwMDU0RS0xMSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDQzIGRpdmlkZSAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDAKK2RkZGl2NDQ0IGRpdmlkZSAxIDEyMzQ1Njc4MDAgIC0+IDguMTAwMDAwNjY0MjAwMDU0RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDQ1IGRpdmlkZSAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKK2RkZGl2NDQ2IGRpdmlkZSAxIDEyMzQ1Njc4OTAgIC0+IDguMTAwMDAwMDczNzEwMDAxRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDQ3IGRpdmlkZSAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTEKK2RkZGl2NDQ4IGRpdmlkZSAxIDEyMzQ1Njc4OTEgIC0+IDguMTAwMDAwMDY3MTQ5MDAxRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDQ5IGRpdmlkZSAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxCitkZGRpdjQ1MCBkaXZpZGUgMSAxMjM0NTY3ODkwMSAtPiA4LjEwMDAwMDA3MzA1MzkwMUUtMTEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQ1MSBkaXZpZGUgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2CitkZGRpdjQ1MiBkaXZpZGUgMSAxMjM0NTY3ODk2ICAtPiA4LjEwMDAwMDAzNDM0NDAwMEUtMTAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGhpZ2gtbG93cworZGRkaXY0NTMgZGl2aWRlIDFlKzEgICAxICAgIC0+ICAgMUUrMQorZGRkaXY0NTQgZGl2aWRlIDFlKzEgICAxLjAgIC0+ICAgMUUrMQorZGRkaXY0NTUgZGl2aWRlIDFlKzEgICAxLjAwIC0+ICAgMUUrMQorZGRkaXY0NTYgZGl2aWRlIDFlKzIgICAyICAgIC0+ICAgNUUrMQorZGRkaXY0NTcgZGl2aWRlIDFlKzIgICAyLjAgIC0+ICAgNUUrMQorZGRkaXY0NTggZGl2aWRlIDFlKzIgICAyLjAwIC0+ICAgNUUrMQorCistLSBzb21lIGZyb20gSUVFRSBkaXNjdXNzaW9ucworZGRkaXY0NjAgZGl2aWRlIDNlMCAgICAgIDJlMCAgICAgLT4gMS41CitkZGRpdjQ2MSBkaXZpZGUgMzBlLTEgICAgMmUwICAgICAtPiAxLjUKK2RkZGl2NDYyIGRpdmlkZSAzMDBlLTIgICAyZTAgICAgIC0+IDEuNTAKK2RkZGl2NDY0IGRpdmlkZSAzMDAwZS0zICAyZTAgICAgIC0+IDEuNTAwCitkZGRpdjQ2NSBkaXZpZGUgM2UwICAgICAgMjBlLTEgICAtPiAxLjUKK2RkZGl2NDY2IGRpdmlkZSAzMGUtMSAgICAyMGUtMSAgIC0+IDEuNQorZGRkaXY0NjcgZGl2aWRlIDMwMGUtMiAgIDIwZS0xICAgLT4gMS41CitkZGRpdjQ2OCBkaXZpZGUgMzAwMGUtMyAgMjBlLTEgICAtPiAxLjUwCitkZGRpdjQ2OSBkaXZpZGUgM2UwICAgICAgMjAwZS0yICAtPiAxLjUKK2RkZGl2NDcwIGRpdmlkZSAzMGUtMSAgICAyMDBlLTIgIC0+IDEuNQorZGRkaXY0NzEgZGl2aWRlIDMwMGUtMiAgIDIwMGUtMiAgLT4gMS41CitkZGRpdjQ3MiBkaXZpZGUgMzAwMGUtMyAgMjAwZS0yICAtPiAxLjUKK2RkZGl2NDczIGRpdmlkZSAzZTAgICAgICAyMDAwZS0zIC0+IDEuNQorZGRkaXY0NzQgZGl2aWRlIDMwZS0xICAgIDIwMDBlLTMgLT4gMS41CitkZGRpdjQ3NSBkaXZpZGUgMzAwZS0yICAgMjAwMGUtMyAtPiAxLjUKK2RkZGl2NDc2IGRpdmlkZSAzMDAwZS0zICAyMDAwZS0zIC0+IDEuNQorCistLSBzb21lIHJlY2lwcm9jYWxzCitkZGRpdjQ4MCBkaXZpZGUgMSAgICAgICAgMS4wRSszMyAtPiAxRS0zMworZGRkaXY0ODEgZGl2aWRlIDEgICAgICAgIDEwRSszMyAgLT4gMUUtMzQKK2RkZGl2NDgyIGRpdmlkZSAxICAgICAgICAxLjBFLTMzIC0+IDFFKzMzCitkZGRpdjQ4MyBkaXZpZGUgMSAgICAgICAgMTBFLTMzICAtPiAxRSszMgorCistLSBSTVMgZGlzY3Vzc2lvbiB0YWJsZQorZGRkaXY0ODQgZGl2aWRlIDBlNSAgICAgMWUzIC0+ICAgMEUrMgorZGRkaXY0ODUgZGl2aWRlIDBlNSAgICAgMmUzIC0+ICAgMEUrMgorZGRkaXY0ODYgZGl2aWRlIDBlNSAgICAxMGUyIC0+ICAgMEUrMworZGRkaXY0ODcgZGl2aWRlIDBlNSAgICAyMGUyIC0+ICAgMEUrMworZGRkaXY0ODggZGl2aWRlIDBlNSAgIDEwMGUxIC0+ICAgMEUrNAorZGRkaXY0ODkgZGl2aWRlIDBlNSAgIDIwMGUxIC0+ICAgMEUrNAorCitkZGRpdjQ5MSBkaXZpZGUgMWU1ICAgICAxZTMgLT4gICAxRSsyCitkZGRpdjQ5MiBkaXZpZGUgMWU1ICAgICAyZTMgLT4gICA1RSsxCitkZGRpdjQ5MyBkaXZpZGUgMWU1ICAgIDEwZTIgLT4gICAxRSsyCitkZGRpdjQ5NCBkaXZpZGUgMWU1ICAgIDIwZTIgLT4gICA1RSsxCitkZGRpdjQ5NSBkaXZpZGUgMWU1ICAgMTAwZTEgLT4gICAxRSsyCitkZGRpdjQ5NiBkaXZpZGUgMWU1ICAgMjAwZTEgLT4gICA1RSsxCisKKy0tIHRyeXplcm9zIGNhc2VzCityb3VuZGluZzogICAgaGFsZl91cAorZGRkaXY0OTcgIGRpdmlkZSAgMEUrMzgwIDEwMDBFLTEzICAtPiAwRSszNjkgQ2xhbXBlZAorZGRkaXY0OTggIGRpdmlkZSAgMEUtMzkwIDEwMDBFKzEzICAtPiAwRS0zOTggQ2xhbXBlZAorCityb3VuZGluZzogICAgaGFsZl91cAorCistLSBmb2N1cyBvbiB0cmFpbGluZyB6ZXJvcyBpc3N1ZXMKK2RkZGl2NTAwIGRpdmlkZSAgMSAgICAgIDkuOSAgICAtPiAgMC4xMDEwMTAxMDEwMTAxMDEwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NTAxIGRpdmlkZSAgMSAgICAgIDkuMDkgICAtPiAgMC4xMTAwMTEwMDExMDAxMTAwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NTAyIGRpdmlkZSAgMSAgICAgIDkuMDA5ICAtPiAgMC4xMTEwMDAxMTEwMDAxMTEwICBJbmV4YWN0IFJvdW5kZWQKKworZGRkaXY1MTEgZGl2aWRlIDEgICAgICAgICAyICAgIC0+IDAuNQorZGRkaXY1MTIgZGl2aWRlIDEuMCAgICAgICAyICAgIC0+IDAuNQorZGRkaXY1MTMgZGl2aWRlIDEuMDAgICAgICAyICAgIC0+IDAuNTAKK2RkZGl2NTE0IGRpdmlkZSAxLjAwMCAgICAgMiAgICAtPiAwLjUwMAorZGRkaXY1MTUgZGl2aWRlIDEuMDAwMCAgICAyICAgIC0+IDAuNTAwMAorZGRkaXY1MTYgZGl2aWRlIDEuMDAwMDAgICAyICAgIC0+IDAuNTAwMDAKK2RkZGl2NTE3IGRpdmlkZSAxLjAwMDAwMCAgMiAgICAtPiAwLjUwMDAwMAorZGRkaXY1MTggZGl2aWRlIDEuMDAwMDAwMCAyICAgIC0+IDAuNTAwMDAwMAorZGRkaXY1MTkgZGl2aWRlIDEuMDAgICAgICAyLjAwIC0+IDAuNQorCitkZGRpdjUyMSBkaXZpZGUgMiAgICAxICAgICAgICAgLT4gMgorZGRkaXY1MjIgZGl2aWRlIDIgICAgMS4wICAgICAgIC0+IDIKK2RkZGl2NTIzIGRpdmlkZSAyICAgIDEuMDAgICAgICAtPiAyCitkZGRpdjUyNCBkaXZpZGUgMiAgICAxLjAwMCAgICAgLT4gMgorZGRkaXY1MjUgZGl2aWRlIDIgICAgMS4wMDAwICAgIC0+IDIKK2RkZGl2NTI2IGRpdmlkZSAyICAgIDEuMDAwMDAgICAtPiAyCitkZGRpdjUyNyBkaXZpZGUgMiAgICAxLjAwMDAwMCAgLT4gMgorZGRkaXY1MjggZGl2aWRlIDIgICAgMS4wMDAwMDAwIC0+IDIKK2RkZGl2NTI5IGRpdmlkZSAyLjAwIDEuMDAgICAgICAtPiAyCisKK2RkZGl2NTMwIGRpdmlkZSAgMi40MCAgIDIgICAgICAtPiAgMS4yMAorZGRkaXY1MzEgZGl2aWRlICAyLjQwICAgNCAgICAgIC0+ICAwLjYwCitkZGRpdjUzMiBkaXZpZGUgIDIuNDAgIDEwICAgICAgLT4gIDAuMjQKK2RkZGl2NTMzIGRpdmlkZSAgMi40MCAgIDIuMCAgICAtPiAgMS4yCitkZGRpdjUzNCBkaXZpZGUgIDIuNDAgICA0LjAgICAgLT4gIDAuNgorZGRkaXY1MzUgZGl2aWRlICAyLjQwICAxMC4wICAgIC0+ICAwLjI0CitkZGRpdjUzNiBkaXZpZGUgIDIuNDAgICAyLjAwICAgLT4gIDEuMgorZGRkaXY1MzcgZGl2aWRlICAyLjQwICAgNC4wMCAgIC0+ICAwLjYKK2RkZGl2NTM4IGRpdmlkZSAgMi40MCAgMTAuMDAgICAtPiAgMC4yNAorZGRkaXY1MzkgZGl2aWRlICAwLjkgICAgMC4xICAgIC0+ICA5CitkZGRpdjU0MCBkaXZpZGUgIDAuOSAgICAwLjAxICAgLT4gIDlFKzEKK2RkZGl2NTQxIGRpdmlkZSAgMC45ICAgIDAuMDAxICAtPiAgOUUrMgorZGRkaXY1NDIgZGl2aWRlICA1ICAgICAgMiAgICAgIC0+ICAyLjUKK2RkZGl2NTQzIGRpdmlkZSAgNSAgICAgIDIuMCAgICAtPiAgMi41CitkZGRpdjU0NCBkaXZpZGUgIDUgICAgICAyLjAwICAgLT4gIDIuNQorZGRkaXY1NDUgZGl2aWRlICA1ICAgICAgMjAgICAgIC0+ICAwLjI1CitkZGRpdjU0NiBkaXZpZGUgIDUgICAgICAyMC4wICAgLT4gIDAuMjUKK2RkZGl2NTQ3IGRpdmlkZSAgMi40MDAgIDIgICAgICAtPiAgMS4yMDAKK2RkZGl2NTQ4IGRpdmlkZSAgMi40MDAgIDIuMCAgICAtPiAgMS4yMAorZGRkaXY1NDkgZGl2aWRlICAyLjQwMCAgMi40MDAgIC0+ICAxCisKK2RkZGl2NTUwIGRpdmlkZSAgMjQwICAgIDEgICAgICAtPiAgMjQwCitkZGRpdjU1MSBkaXZpZGUgIDI0MCAgICAxMCAgICAgLT4gIDI0CitkZGRpdjU1MiBkaXZpZGUgIDI0MCAgICAxMDAgICAgLT4gIDIuNAorZGRkaXY1NTMgZGl2aWRlICAyNDAgICAgMTAwMCAgIC0+ICAwLjI0CitkZGRpdjU1NCBkaXZpZGUgIDI0MDAgICAxICAgICAgLT4gIDI0MDAKK2RkZGl2NTU1IGRpdmlkZSAgMjQwMCAgIDEwICAgICAtPiAgMjQwCitkZGRpdjU1NiBkaXZpZGUgIDI0MDAgICAxMDAgICAgLT4gIDI0CitkZGRpdjU1NyBkaXZpZGUgIDI0MDAgICAxMDAwICAgLT4gIDIuNAorCistLSArdmUgZXhwb25lbnQKK2RkZGl2NjAwIGRpdmlkZSAgMi40RSs5ICAgICAyICAtPiAgMS4yRSs5CitkZGRpdjYwMSBkaXZpZGUgIDIuNDBFKzkgICAgMiAgLT4gIDEuMjBFKzkKK2RkZGl2NjAyIGRpdmlkZSAgMi40MDBFKzkgICAyICAtPiAgMS4yMDBFKzkKK2RkZGl2NjAzIGRpdmlkZSAgMi40MDAwRSs5ICAyICAtPiAgMS4yMDAwRSs5CitkZGRpdjYwNCBkaXZpZGUgIDI0RSs4ICAgICAgMiAgLT4gIDEuMkUrOQorZGRkaXY2MDUgZGl2aWRlICAyNDBFKzcgICAgIDIgIC0+ICAxLjIwRSs5CitkZGRpdjYwNiBkaXZpZGUgIDI0MDBFKzYgICAgMiAgLT4gIDEuMjAwRSs5CitkZGRpdjYwNyBkaXZpZGUgIDI0MDAwRSs1ICAgMiAgLT4gIDEuMjAwMEUrOQorCistLSBtb3JlIHplcm9zLCBldGMuCitkZGRpdjczMSBkaXZpZGUgNS4wMCAxRS0zICAgIC0+IDUuMDBFKzMKK2RkZGl2NzMyIGRpdmlkZSAwMC4wMCAwLjAwMCAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkaXY3MzMgZGl2aWRlIDAwLjAwIDBFLTMgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGRpdjczNCBkaXZpZGUgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZGl2NzM1IGRpdmlkZSAtMCAgICAgMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkaXY3MzYgZGl2aWRlIC0wICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCisKK2RkZGl2NzQxIGRpdmlkZSAgMCAgICAtMSAgICAgLT4gLTAKK2RkZGl2NzQyIGRpdmlkZSAtMCAgICAtMSAgICAgLT4gIDAKK2RkZGl2NzQzIGRpdmlkZSAgMCAgICAgMSAgICAgLT4gIDAKK2RkZGl2NzQ0IGRpdmlkZSAtMCAgICAgMSAgICAgLT4gLTAKK2RkZGl2NzQ1IGRpdmlkZSAtMSAgICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2NzQ2IGRpdmlkZSAtMSAgICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2NzQ3IGRpdmlkZSAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2NzQ4IGRpdmlkZSAgMSAgICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGRkaXY3NTEgZGl2aWRlICAwLjAgIC0xICAgICAtPiAtMC4wCitkZGRpdjc1MiBkaXZpZGUgLTAuMCAgLTEgICAgIC0+ICAwLjAKK2RkZGl2NzUzIGRpdmlkZSAgMC4wICAgMSAgICAgLT4gIDAuMAorZGRkaXY3NTQgZGl2aWRlIC0wLjAgICAxICAgICAtPiAtMC4wCitkZGRpdjc1NSBkaXZpZGUgLTEuMCAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc1NiBkaXZpZGUgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc1NyBkaXZpZGUgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc1OCBkaXZpZGUgIDEuMCAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2NzYxIGRpdmlkZSAgMCAgICAtMS4wICAgLT4gLTBFKzEKK2RkZGl2NzYyIGRpdmlkZSAtMCAgICAtMS4wICAgLT4gIDBFKzEKK2RkZGl2NzYzIGRpdmlkZSAgMCAgICAgMS4wICAgLT4gIDBFKzEKK2RkZGl2NzY0IGRpdmlkZSAtMCAgICAgMS4wICAgLT4gLTBFKzEKK2RkZGl2NzY1IGRpdmlkZSAtMSAgICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2NzY2IGRpdmlkZSAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2NzY3IGRpdmlkZSAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2NzY4IGRpdmlkZSAgMSAgICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGRkaXY3NzEgZGl2aWRlICAwLjAgIC0xLjAgICAtPiAtMAorZGRkaXY3NzIgZGl2aWRlIC0wLjAgIC0xLjAgICAtPiAgMAorZGRkaXY3NzMgZGl2aWRlICAwLjAgICAxLjAgICAtPiAgMAorZGRkaXY3NzQgZGl2aWRlIC0wLjAgICAxLjAgICAtPiAtMAorZGRkaXY3NzUgZGl2aWRlIC0xLjAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NzYgZGl2aWRlIC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NzcgZGl2aWRlICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NzggZGl2aWRlICAxLjAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBTcGVjaWFscworZGRkaXY3ODAgZGl2aWRlICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjc4MSBkaXZpZGUgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRkaXY3ODIgZGl2aWRlICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RkZGl2NzgzIGRpdmlkZSAgSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZGRpdjc4NCBkaXZpZGUgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGRkaXY3ODUgZGl2aWRlICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkZGl2Nzg2IGRpdmlkZSAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZGRpdjc4NyBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2Nzg4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkZGRpdjc4OSBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2NzkwIGRpdmlkZSAtMSAgICAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkZGRpdjc5MSBkaXZpZGUgLTAgICAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGRkaXY3OTIgZGl2aWRlICAwICAgICBJbmYgICAtPiAgMEUtMzk4IENsYW1wZWQKK2RkZGl2NzkzIGRpdmlkZSAgMSAgICAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkZGRpdjc5NCBkaXZpZGUgIDEwMDAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGRkaXY3OTUgZGl2aWRlICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkZGl2ODAwIGRpdmlkZSAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4MDEgZGl2aWRlIC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RkZGl2ODAyIGRpdmlkZSAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkZGRpdjgwMyBkaXZpZGUgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZGRkaXY4MDQgZGl2aWRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RkZGl2ODA1IGRpdmlkZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZGRpdjgwNiBkaXZpZGUgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGRkaXY4MDcgZGl2aWRlIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjgwOCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGRkaXY4MDkgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjgxMCBkaXZpZGUgLTEgICAgLUluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGRkaXY4MTEgZGl2aWRlIC0wICAgIC1JbmYgICAtPiAgMEUtMzk4IENsYW1wZWQKK2RkZGl2ODEyIGRpdmlkZSAgMCAgICAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkZGRpdjgxMyBkaXZpZGUgIDEgICAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGRkaXY4MTQgZGl2aWRlICAxMDAwIC1JbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2RkZGl2ODE1IGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZGRpdjgyMSBkaXZpZGUgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkZGl2ODIyIGRpdmlkZSAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRkaXY4MjMgZGl2aWRlICBOYU4gLTEgICAgICAtPiAgTmFOCitkZGRpdjgyNCBkaXZpZGUgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkZGl2ODI1IGRpdmlkZSAgTmFOICAwICAgICAgLT4gIE5hTgorZGRkaXY4MjYgZGl2aWRlICBOYU4gIDEgICAgICAtPiAgTmFOCitkZGRpdjgyNyBkaXZpZGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkZGl2ODI4IGRpdmlkZSAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRkaXY4MjkgZGl2aWRlICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzMCBkaXZpZGUgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkZGl2ODMxIGRpdmlkZSAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzIgZGl2aWRlIC0xICAgIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzMyBkaXZpZGUgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkZGl2ODM0IGRpdmlkZSAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzUgZGl2aWRlICAxICAgIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzNiBkaXZpZGUgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkZGl2ODM3IGRpdmlkZSAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZGRpdjg0MSBkaXZpZGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg0MiBkaXZpZGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg0MyBkaXZpZGUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg0NCBkaXZpZGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg0NSBkaXZpZGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg0NiBkaXZpZGUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg0NyBkaXZpZGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg0OCBkaXZpZGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg0OSBkaXZpZGUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg1MCBkaXZpZGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg1MSBkaXZpZGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg1MiBkaXZpZGUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg1MyBkaXZpZGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg1NCBkaXZpZGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg1NSBkaXZpZGUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg1NiBkaXZpZGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg1NyBkaXZpZGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg1OCBkaXZpZGUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg1OSBkaXZpZGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkZGl2ODYxIGRpdmlkZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RkZGl2ODYyIGRpdmlkZSAgTmFOOCAgMTAwMCAgLT4gIE5hTjgKK2RkZGl2ODYzIGRpdmlkZSAgTmFONyAgSW5mICAgLT4gIE5hTjcKK2RkZGl2ODY0IGRpdmlkZSAgTmFONiAgTmFONSAgLT4gIE5hTjYKK2RkZGl2ODY1IGRpdmlkZSAtSW5mICAgTmFONCAgLT4gIE5hTjQKK2RkZGl2ODY2IGRpdmlkZSAtMTAwMCAgTmFOMyAgLT4gIE5hTjMKK2RkZGl2ODY3IGRpdmlkZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKKworZGRkaXY4NzEgZGl2aWRlICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODcyIGRpdmlkZSAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3MyBkaXZpZGUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzQgZGl2aWRlICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODc1IGRpdmlkZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3NiBkaXZpZGUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzcgZGl2aWRlICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODc4IGRpdmlkZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3OSBkaXZpZGUgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkZGRpdjg4MSBkaXZpZGUgIC1OYU45ICAtSW5mICAgLT4gIC1OYU45CitkZGRpdjg4MiBkaXZpZGUgIC1OYU44ICAgMTAwMCAgLT4gIC1OYU44CitkZGRpdjg4MyBkaXZpZGUgIC1OYU43ICAgSW5mICAgLT4gIC1OYU43CitkZGRpdjg4NCBkaXZpZGUgIC1OYU42ICAtTmFONSAgLT4gIC1OYU42CitkZGRpdjg4NSBkaXZpZGUgIC1JbmYgICAtTmFONCAgLT4gIC1OYU40CitkZGRpdjg4NiBkaXZpZGUgIC0xMDAwICAtTmFOMyAgLT4gIC1OYU4zCitkZGRpdjg4NyBkaXZpZGUgICBJbmYgICAtTmFOMiAgLT4gIC1OYU4yCisKK2RkZGl2ODkxIGRpdmlkZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg5MiBkaXZpZGUgLXNOYU45OCAtMSAgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTMgZGl2aWRlIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODk0IGRpdmlkZSAtc05hTjk2IC1zTmFOOTQgLT4gLU5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg5NSBkaXZpZGUgLU5hTjk1ICAtc05hTjkzIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTYgZGl2aWRlIC1JbmYgICAgLXNOYU45MiAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODk3IGRpdmlkZSAgMCAgICAgIC1zTmFOOTEgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg5OCBkaXZpZGUgIEluZiAgICAtc05hTjkwIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTkgZGl2aWRlIC1OYU4gICAgLXNOYU44OSAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGUgYnkgMAorZGRkaXY5MDEgZGl2aWRlICAgIDAgICAgICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGRpdjkwMiBkaXZpZGUgICAgMC4wRTUgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZGl2OTAzIGRpdmlkZSAgICAwLjAwMCAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkaXY5MDQgZGl2aWRlICAgIDAuMDAwMSAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkwNSBkaXZpZGUgICAgMC4wMSAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTA2IGRpdmlkZSAgICAwLjEgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MDcgZGl2aWRlICAgIDEgICAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkwOCBkaXZpZGUgICAgMSAgICAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTA5IGRpdmlkZSAgIDEwICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MTAgZGl2aWRlICAgMUUrMTAwICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkxMSBkaXZpZGUgICAxRSsxMDAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGRkaXY5MjEgZGl2aWRlICAgLTAuMDAwMSAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkyMiBkaXZpZGUgICAtMC4wMSAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTIzIGRpdmlkZSAgIC0wLjEgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MjQgZGl2aWRlICAgLTEgICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkyNSBkaXZpZGUgICAtMSAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTI2IGRpdmlkZSAgLTEwICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MjcgZGl2aWRlICAtMUUrMTAwICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkyOCBkaXZpZGUgIC0xRSsxMDAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGRkaXY5MzEgZGl2aWRlICAgIDAuMDAwMSAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkzMiBkaXZpZGUgICAgMC4wMSAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTMzIGRpdmlkZSAgICAwLjEgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MzQgZGl2aWRlICAgIDEgICAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkzNSBkaXZpZGUgICAgMSAgICAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTM2IGRpdmlkZSAgIDEwICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MzcgZGl2aWRlICAgMUUrMTAwICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkzOCBkaXZpZGUgICAxRSsxMDAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGRkaXY5NDEgZGl2aWRlICAgLTAuMDAwMSAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjk0MiBkaXZpZGUgICAtMC4wMSAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTQzIGRpdmlkZSAgIC0wLjEgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5NDQgZGl2aWRlICAgLTEgICAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjk0NSBkaXZpZGUgICAtMSAgICAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTQ2IGRpdmlkZSAgLTEwICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5NDcgZGl2aWRlICAtMUUrMTAwICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjk0OCBkaXZpZGUgIC0xRSsxMDAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitkZGRpdjEwMjEgIGRpdmlkZSAxRTAgICAgICAgICAgMUUwIC0+IDEKK2RkZGl2MTAyMiAgZGl2aWRlIDFFMCAgICAgICAgICAyRTAgLT4gMC41CitkZGRpdjEwMjMgIGRpdmlkZSAxRTAgICAgICAgICAgM0UwIC0+IDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTAyNCAgZGl2aWRlIDEwMEUtMiAgIDEwMDBFLTMgLT4gMQorZGRkaXYxMDI1ICBkaXZpZGUgMjRFLTEgICAgICAgIDJFMCAtPiAxLjIKK2RkZGl2MTAyNiAgZGl2aWRlIDI0MDBFLTMgICAgICAyRTAgLT4gMS4yMDAKK2RkZGl2MTAyNyAgZGl2aWRlIDVFMCAgICAgICAgICAyRTAgLT4gMi41CitkZGRpdjEwMjggIGRpdmlkZSA1RTAgICAgICAgIDIwRS0xIC0+IDIuNQorZGRkaXYxMDI5ICBkaXZpZGUgNUUwICAgICAgMjAwMEUtMyAtPiAyLjUKK2RkZGl2MTAzMCAgZGl2aWRlIDVFMCAgICAgICAgIDJFLTEgLT4gMjUKK2RkZGl2MTAzMSAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTIgLT4gMjUKK2RkZGl2MTAzMiAgZGl2aWRlIDQ4MEUtMiAgICAgICAzRTAgLT4gMS42MAorZGRkaXYxMDMzICBkaXZpZGUgNDdFLTEgICAgICAgIDJFMCAtPiAyLjM1CisKKy0tIEVDTUFTY3JpcHQgYmFkIGV4YW1wbGVzCityb3VuZGluZzogICAgaGFsZl9kb3duCitkZGRpdjEwNDAgIGRpdmlkZSA1IDkgIC0+IDAuNTU1NTU1NTU1NTU1NTU1NiBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK2RkZGl2MTA0MSAgZGl2aWRlIDYgMTEgLT4gMC41NDU0NTQ1NDU0NTQ1NDU1IEluZXhhY3QgUm91bmRlZAorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMKKy0tIHNpZ25zCitkZGRpdjEwNTEgZGl2aWRlICAxZSsyNzcgIDFlLTMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNTIgZGl2aWRlICAxZSsyNzcgLTFlLTMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNTMgZGl2aWRlIC0xZSsyNzcgIDFlLTMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNTQgZGl2aWRlIC0xZSsyNzcgLTFlLTMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNTUgZGl2aWRlICAxZS0yNzcgIDFlKzMxMSAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTA1NiBkaXZpZGUgIDFlLTI3NyAtMWUrMzExIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMDU3IGRpdmlkZSAtMWUtMjc3ICAxZSszMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjEwNTggZGl2aWRlIC0xZS0yNzcgLTFlKzMxMSAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkZGRpdjEwNjAgZGl2aWRlIDFlLTI5MSAxZSsxMDEgLT4gMUUtMzkyIFN1Ym5vcm1hbAorZGRkaXYxMDYxIGRpdmlkZSAxZS0yOTEgMWUrMTAyIC0+IDFFLTM5MyBTdWJub3JtYWwKK2RkZGl2MTA2MiBkaXZpZGUgMWUtMjkxIDFlKzEwMyAtPiAxRS0zOTQgU3Vibm9ybWFsCitkZGRpdjEwNjMgZGl2aWRlIDFlLTI5MSAxZSsxMDQgLT4gMUUtMzk1IFN1Ym5vcm1hbAorZGRkaXYxMDY0IGRpdmlkZSAxZS0yOTEgMWUrMTA1IC0+IDFFLTM5NiBTdWJub3JtYWwKK2RkZGl2MTA2NSBkaXZpZGUgMWUtMjkxIDFlKzEwNiAtPiAxRS0zOTcgU3Vibm9ybWFsCitkZGRpdjEwNjYgZGl2aWRlIDFlLTI5MSAxZSsxMDcgLT4gMUUtMzk4IFN1Ym5vcm1hbAorZGRkaXYxMDY3IGRpdmlkZSAxZS0yOTEgMWUrMTA4IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjEwNjggZGl2aWRlIDFlLTI5MSAxZSsxMDkgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTA2OSBkaXZpZGUgMWUtMjkxIDFlKzExMCAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQorZGRkaXYxMDcwIGRpdmlkZSAxZSs2MCAxZS0zMjEgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSAgQ2xhbXBlZAorZGRkaXYxMDcxIGRpdmlkZSAxZSs2MCAxZS0zMjIgLT4gMS4wMDAwMDAwMDAwMDAwRSszODIgIENsYW1wZWQKK2RkZGl2MTA3MiBkaXZpZGUgMWUrNjAgMWUtMzIzIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzM4MyAgQ2xhbXBlZAorZGRkaXYxMDczIGRpdmlkZSAxZSs2MCAxZS0zMjQgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAorZGRkaXYxMDc0IGRpdmlkZSAxZSs2MCAxZS0zMjUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNzUgZGl2aWRlIDFlKzYwIDFlLTMyNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA3NiBkaXZpZGUgMWUrNjAgMWUtMzI3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDc3IGRpdmlkZSAxZSs2MCAxZS0zMjggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNzggZGl2aWRlIDFlKzYwIDFlLTMyOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA3OSBkaXZpZGUgMWUrNjAgMWUtMzMwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitkZGRpdjExMDEgZGl2aWRlICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMS4wMDAwRS0zOTQgU3Vibm9ybWFsCitkZGRpdjExMDIgZGl2aWRlICAxLjAwMEUtMzk0ICAgMWUrMSAgLT4gMS4wMDBFLTM5NSAgU3Vibm9ybWFsCitkZGRpdjExMDMgZGl2aWRlICAxLjAwRS0zOTQgICAgMWUrMiAgLT4gMS4wMEUtMzk2ICAgU3Vibm9ybWFsCitkZGRpdjExMDQgZGl2aWRlICAxLjBFLTM5NCAgICAgMWUrMyAgLT4gMS4wRS0zOTcgICAgU3Vibm9ybWFsCitkZGRpdjExMDUgZGl2aWRlICAxLjBFLTM5NCAgICAgMWUrNCAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwgUm91bmRlZAorZGRkaXYxMTA2IGRpdmlkZSAgMS4zRS0zOTQgICAgIDFlKzQgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEwNyBkaXZpZGUgIDEuNUUtMzk0ICAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMDggZGl2aWRlICAxLjdFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTA5IGRpdmlkZSAgMi4zRS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTExMCBkaXZpZGUgIDIuNUUtMzk0ICAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTEgZGl2aWRlICAyLjdFLTM5NCAgICAgMWUrNCAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTEyIGRpdmlkZSAgMS40OUUtMzk0ICAgIDFlKzQgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTExMyBkaXZpZGUgIDEuNTBFLTM5NCAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTQgZGl2aWRlICAxLjUxRS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTE1IGRpdmlkZSAgMi40OUUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTExNiBkaXZpZGUgIDIuNTBFLTM5NCAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTcgZGl2aWRlICAyLjUxRS0zOTQgICAgMWUrNCAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZGRpdjExMTggZGl2aWRlICAxRS0zOTQgICAgICAgMWUrNCAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwKK2RkZGl2MTExOSBkaXZpZGUgIDNFLTM5NCAgICAgICAxZSs1ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTEyMCBkaXZpZGUgIDVFLTM5NCAgICAgICAxZSs1ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTEyMSBkaXZpZGUgIDdFLTM5NCAgICAgICAxZSs1ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMjIgZGl2aWRlICA5RS0zOTQgICAgICAgMWUrNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTIzIGRpdmlkZSAgOS45RS0zOTQgICAgIDFlKzUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRkaXYxMTI0IGRpdmlkZSAgMUUtMzk0ICAgICAgLTFlKzQgIC0+IC0xRS0zOTggICAgU3Vibm9ybWFsCitkZGRpdjExMjUgZGl2aWRlICAzRS0zOTQgICAgICAtMWUrNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjExMjYgZGl2aWRlIC01RS0zOTQgICAgICAgMWUrNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjExMjcgZGl2aWRlICA3RS0zOTQgICAgICAtMWUrNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTI4IGRpdmlkZSAtOUUtMzk0ICAgICAgIDFlKzUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEyOSBkaXZpZGUgIDkuOUUtMzk0ICAgIC0xZSs1ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMzAgZGl2aWRlICAzLjBFLTM5NCAgICAtMWUrNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RkZGl2MTEzMSBkaXZpZGUgIDEuMEUtMTk5ICAgICAxZSsyMDAgLT4gMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTEzMiBkaXZpZGUgIDEuMEUtMTk5ICAgICAxZSsxOTkgLT4gMUUtMzk4ICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZGRpdjExMzMgZGl2aWRlICAxLjBFLTE5OSAgICAgMWUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwKK2RkZGl2MTEzNCBkaXZpZGUgIDIuMEUtMTk5ICAgICAyZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbAorZGRkaXYxMTM1IGRpdmlkZSAgNC4wRS0xOTkgICAgIDRlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsCitkZGRpdjExMzYgZGl2aWRlIDEwLjBFLTE5OSAgICAxMGUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwKK2RkZGl2MTEzNyBkaXZpZGUgMzAuMEUtMTk5ICAgIDMwZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbAorCistLSByYW5kb21zCitkZGRpdjIwMTAgIGRpdmlkZSAgLTMuMzAzMjI2NzE0OTAwNzExRS0zNSAgIDguNzk2NTc4ODQyNzEzMTgzRSs3MyAgIC0+ICAtMy43NTUxMjY1OTQwNTg3ODNFLTEwOSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxMSAgZGl2aWRlICAgOTMzMTUzMzI3ODIxMDczLjYgICAgICAgNjg3ODIxODEwOTAyNDYuMjUgICAgICAgLT4gICAxMy41NjY3ODg4NTQ3NTc2MyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxMiAgZGl2aWRlICAgNS4wNDc1MjQzNjA1NzkwNkUtNzIgICAtOC4xNzk0ODE3NzEyMzg2NDJFKzY0ICAgLT4gIC02LjE3MDk1ODYyNzYzMjgzNUUtMTM3IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDEzICBkaXZpZGUgIC0zNzA3NjEzMzA5NTgyMzE4ICAgICAgICAzMzk0OTExMTk2NTAzLjA0OCAgICAgICAtPiAgLTEwOTIuMTA5MDcwMDEwODM2IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDE0ICBkaXZpZGUgICA5OTY4OS4wNTU1MTkwNDYxICAgICAgIC00LjczNTIwODU1Mzg5MTQ2NCAgICAgICAtPiAgLTIxMDUyLjcyNzUzNzY1NDExIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDE1ICBkaXZpZGUgIC0xNDQ3OTE1Nzc1NjEzMzI5ICAgICAgICAyNjk3NTA3OTcuODE4NDg3NSAgICAgICAtPiAgLTUzNjc2MDUuMTY0OTI1NjUzIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDE2ICBkaXZpZGUgIC05LjM5NDg4MTMwNDIyNTI1OEUtMTkgIC04MzA1ODUuMDI1MjY3MTYzNiAgICAgICAtPiAgIDEuMTMxMTE2MTQzMjUxMzU4RS0yNCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxNyAgZGl2aWRlICAtMS4wNTYyODM0MzI3Mzg5MzQgICAgICAgODguNTg3NTQ1NTUxMjQwMTMgICAgICAgLT4gIC0wLjAxMTkyMzYxMTAwMTU5MzUyIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDE4ICBkaXZpZGUgICA1NzYzMjIwOTMzMzQzLjA4MSAgICAgICA2ODkwODk1NjcwMjUwNTIuMSAgICAgICAtPiAgIDAuMDA4MzYzNTI5NTE2NTI0NDU2IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDE5ICBkaXZpZGUgICA4NzM4MTkuMTIyMTAzMjE2ICAgICAgICA5Ljc0MDYxMjQ5NDUyMzMwMEUtNDkgICAtPiAgIDguOTcwODg0NzYzMDkzOTQ4RSs1MyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyMCAgZGl2aWRlICAgODAyMjkxNC44Mzg1MzM1NzYgICAgICAgNjE3OC41NjY4MDE3NDI3MTMgICAgICAgLT4gICAxMjk4LjUwNzQyMDI0MzU4MyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyMSAgZGl2aWRlICAgMjAzOTgyLjc2MDU2NTAzNjMgICAgICAtMjE1OC4yODM2MzkwNTM0MzUgICAgICAgLT4gIC05NC41MTE1NjMyMDQyMjE2OCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyMiAgZGl2aWRlICAgODAzLjYzMTA1NDcwMTMwMzAgICAgICAgNzEwMTE0Mzc5NTM5OS4yMzggICAgICAgLT4gICAxLjEzMTY5MjQxMTYxMTE2NkUtMTAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjMgIGRpdmlkZSAgIDkuMjUxNjk3ODQyMTIzMzk5RS04MiAgLTEuMzQyMzUwMjIwNjA2MTE5RS03ICAgIC0+ICAtNi44OTIxNjM5ODIzMjE5MzZFLTc1IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDI0ICBkaXZpZGUgIC0xLjk4MDYwMDY0NTYzNzk5MkUtNTMgIC01LjQ3NDI2Mjc1MzIxNDQ1N0UrNzcgICAtPiAgIDMuNjE4MDIyNjE3NzAzMTY4RS0xMzEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjUgIGRpdmlkZSAgLTIxMC4wMzIyOTk2MzUxNjkwICAgICAgLTguNTgwOTUxODM1ODcyODQzRSs4MCAgIC0+ICAgMi40NDc2NTczNjU0MzQ5NzFFLTc5IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDI2ICBkaXZpZGUgIC0xLjgyMTk4MDMxNDAyMDM3MEUrODUgIC0zLjAxODkxNTI2NzEzODE2NSAgICAgICAtPiAgIDYuMDM1MjE1MTQ0NTAzMDQyRSs4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyNyAgZGl2aWRlICAtNzcyMjY0NTAzNjAxLjEwNDcgICAgICAgNS4xNTgyNTgyNzE0MDg5ODhFLTg2ICAgLT4gIC0xLjQ5NzE0MTk4NjYzMDYxNEUrOTcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjggIGRpdmlkZSAgLTc2Ny4wNTMyNDE1ODQ3MTA2ICAgICAgIDIuNzAwMDI3MjI4MDI4OTM5RS01OSAgIC0+ICAtMi44NDA5MDkyODI3NzI5NDFFKzYxIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDI5ICBkaXZpZGUgICA0OTY3MjQuODU0ODI1MDA5MyAgICAgICA3LjMyNzAwNTg4MTYzMTAwRSs2NiAgICAtPiAgIDYuNzc5MzcwMjIwOTI5MDEzRS02MiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzMCAgZGl2aWRlICAtMzA0MjMyNjUxNDQ3NzAzLjkgICAgICAtMTA4Ljk3MzA4MDg2NTc0NDAgICAgICAgLT4gICAyNzkxODE0NzIxODYyLjU2NSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzMSAgZGl2aWRlICAtNy4yMzM4MTcxOTI2OTk0MDVFKzQyICAtNTcxMTMwMjAwNC4xNDk0MTEgICAgICAgLT4gICAxLjI2NjU3OTM1MjIxMTQzMEUrMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzIgIGRpdmlkZSAgLTkuOTk5MjIxNDQ0OTEyNzQ1RSs5NiAgIDQwMTA1Njk0MDY0NDYxOTcgICAgICAgIC0+ICAtMi40OTMyMTc0MDQyMDIyNTBFKzgxIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDMzICBkaXZpZGUgIC0xODM3MjcyLjA2MTkzNzYyMiAgICAgICA4LjM1NjMyMjgzODA2Njc2MiAgICAgICAtPiAgLTIxOTg2Ni4wOTM5MTk2ODgyIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDM0ICBkaXZpZGUgICAyMTY4LjUxNzU1NTYwNjUyOSAgICAgICAyMDkuMTkxMDI1ODYxNTA2MSAgICAgICAtPiAgIDEwLjM2NjIwNzM3NzU2Nzg0IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDM1ICBkaXZpZGUgIC0xLjg4NDM4OTc5MDU3NjM3MUUrODggICAyLjk1MTgxOTUzODcwNTgzRSsyMCAgICAtPiAgLTYuMzgzODI0NTA1MDc5ODI4RSs2NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzNiAgZGl2aWRlICAgNzMyMjYzLjYwMzc0MzgxOTYgICAgICAgOTYxMjIyLjM2MzQ0NDY4ODkgICAgICAgLT4gICAwLjc2MTgwNDU4NTA2OTgyNjkgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzcgIGRpdmlkZSAgLTgxMzQ2MTQxOS4wMzQ4MzM2ICAgICAgIDUuMzc2MjkzNzUzODA5MTQzRSs4NCAgIC0+ICAtMS41MTMwNTI0MDQyODU5MjdFLTc2IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDM4ICBkaXZpZGUgIC00NTU2MjEzMzUwODEwOC41MCAgICAgIC05Ljc3Njg0MzQ5NDY5MDEwN0UrNTEgICAtPiAgIDQuNjYwMjA4OTQ1MDI5NTE5RS0zOSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzOSAgZGl2aWRlICAtNi40ODkzOTMxNzI0NDEwMTZFKzgwICAtOTEwMTk2NS4wOTc4NTIxMTMgICAgICAgLT4gICA3LjEyOTY2MTY3NDg5NzQyMUUrNzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDAgIGRpdmlkZSAgIDMuNjk0NTc2MjM3MTE3MzQ5RSs5MyAgIDY2ODM1MTIuMDEyNjIyMDAzICAgICAgIC0+ICAgNS41Mjc4OTY0NTY0NDM5MTJFKzg2IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQxICBkaXZpZGUgIC0yLjI1Mjg3NzcyNjQwMzI3MkUrMTkgIC03NDUxOTEzMjU2LjE4MTM2NyAgICAgICAtPiAgIDMwMjMyMjA1NDYuMTI1NTMxIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQyICBkaXZpZGUgICA1MTgzMDMuMTk4OTExMTg0MiAgICAgICA1MC4wMTU4NzAyMDQ3NDEzMyAgICAgICAtPiAgIDEwMzYyLjc3NDc5MTA3MTIzIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQzICBkaXZpZGUgICAyLjkwMjA4Nzg4MTg4MDEwM0UrMjQgICAzMy4zMjQwMDk5MjMwNTcwMiAgICAgICAtPiAgIDguNzA4Njk5NDg4OTg5NTc4RSsyMiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0NCAgZGl2aWRlICAgNTQ5NjE5LjQ1NTk1MTA1NTcgICAgICAgMTY2MDgyNDg0NTE5NjMzOCAgICAgICAgLT4gICAzLjMwOTMxNjE5NjM1MTEwNEUtMTAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDUgIGRpdmlkZSAgLTY3NzU2NzA3NzQ2ODQwNDMgICAgICAgIDgyOTIxNTIwMjMuMDc3MjYyICAgICAgIC0+ICAtODE3MTE4LjQ5NDE4OTEwNjIgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDYgIGRpdmlkZSAgLTc3LjUwOTIzOTIxNTI0MDc5ICAgICAgLTUuNjM2ODgyNjU1NDI1ODE1RSs3NCAgIC0+ICAgMS4zNzUwMzczMDI1ODg0MDVFLTczIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQ3ICBkaXZpZGUgIC0yLjk4NDg4OTQ1OTYwNTE0OUUtMTAgIC04ODEwNjE1Njc4NDEyMi45OSAgICAgICAtPiAgIDMuMzg3ODMzMDA1NzIxMzg0RS0yNCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0OCAgZGl2aWRlICAgMC45NDk1MTcyOTM5OTcwODUgICAgICAgNDQ3NjcxMTUuOTY0NTA5OTggICAgICAgLT4gICAyLjEyMTAxNTExMDE3NTU4OUUtOCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0OSAgZGl2aWRlICAtMjc2MDkzNzIxMS4wODQ1MjEgICAgICAtMTA4NzAxNTg3Njk3NTQwOCAgICAgICAgLT4gICAwLjAwMDAwMjUzOTkyMzUzNzA1NzAyNCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1MCAgZGl2aWRlICAgMjg0MzgzNTEuODUwMzA1MzYgICAgICAtNC4yMDkzOTc5MDQwODg2MjRFLTQ3ICAgLT4gIC02Ljc1NTkxOTEzNTc3MDY4OEUrNTMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTEgIGRpdmlkZSAgLTg1NTYyNzMxLjY4MjA5NTYgICAgICAgLTcuMTY2MDQ1NDQyNTMwMTg1RSs0NSAgIC0+ICAgMS4xOTQwMDIwODA2MjE1NDJFLTM4IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDUyICBkaXZpZGUgICAyNTMzODAyODUyMTY1LjI1ICAgICAgICA3MTU0LjExOTYwNjIzNTk1NSAgICAgICAtPiAgIDM1NDE3Mzk1Ny4zMzE3NTAxIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDUzICBkaXZpZGUgIC04ODU4ODMxMzQ2ODUxLjQ3NCAgICAgICA5Ny41OTczNDIwODgwMTcxNiAgICAgICAtPiAgLTkwNzY5MTg2NTA5LjgzNTc3IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDU0ICBkaXZpZGUgICAxNzY3ODM2Mjk4MDEzODcuNSAgICAgICA4NDAwNzMyNjMuMzEwOTgxNyAgICAgICAtPiAgIDIxMDQzOC4zNDgwODQ4MjA2IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDU1ICBkaXZpZGUgIC00OTM1MDY0NzE3OTYxNzUuNiAgICAgICA3OTczMzg5NDc5MDgyMi4wMyAgICAgICAtPiAgLTYuMTg5NDE4ODU0OTQwNzQ2IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDU2ICBkaXZpZGUgICA3OTAuMTY4MjU0MjEwMzQ0NSAgICAgICA4MjkuOTQ0OTM3MDM2NzQzNSAgICAgICAtPiAgIDAuOTUyMDczMTA2MjM3MTIxNCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1NyAgZGl2aWRlICAtODkyMDQ1OTgzOC41ODMxNjQgICAgICAtNDc2Ny44ODkxODc4OTkyMTQgICAgICAgLT4gICAxODcwOTQ1LjI5NDAzNTU4MSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1OCAgZGl2aWRlICAgNTM1MzY2ODcxNjQ0MjIuMSAgICAgICAgNTMxMzcuNTAwNzAzMjY4OSAgICAgICAgLT4gICAxMDA3NTEyMzMwLjM4NTY5OCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1OSAgZGl2aWRlICAgNC4wNTE1MzIzMTExNDY1NjFFLTc0ICAtMi4zNDMwODk3Njg5NzIyNjFFKzk0ICAgLT4gIC0xLjcyOTE0MDg4MjYwNjMzMkUtMTY4IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDYwICBkaXZpZGUgIC0xNDg0Nzc1ODc3ODYzNi44OCAgICAgICAzLjA2MjU0MzUxNjM4MzgwN0UtNDMgICAtPiAgLTQuODQ4MTc4ODc0NTg3NDk3RSs1NSBJbmV4YWN0IFJvdW5kZWQKKworLS0gRGl2aXNpb24gcHJvYmFibHkgaGFzIHByZS1yb3VuZGluZywgc28gbmVlZCB0byB0ZXN0IHJvdW5kaW5nCistLSBleHBsaWNpdGx5IHJhdGhlciB0aGFuIGFzc3VtZSBpbmNsdWRlZCB0aHJvdWdoIG90aGVyIHRlc3RzOworLS0gdGVzdHMgaW5jbHVkZSBzaW1wbGUgcm91bmRpbmcgYW5kIGFsc28gdGhlIHRyaWNreSBjYXNlcyBvZiBzdGlja3kKKy0tIGJpdHMgZm9sbG93aW5nIHR3byB6ZXJvcworLS0KKy0tICAgMS85OTk5OSBnaXZlcyAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxMDAwMDEKKy0tICAgICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CistLQorLS0gICAxLzk5OTk5OSBnaXZlcyAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorCityb3VuZGluZzogY2VpbGluZworZGRkaXYzMDAxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzNCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAwMiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMDMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMDQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDEgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBmbG9vcgorZGRkaXYzMDExICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAxMiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMTMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMTQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiB1cAorZGRkaXYzMDIxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzNCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAyMiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMjMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMjQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDEgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkZGRpdjMwMzEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDMyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAzMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAzNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2RkZGl2MzA0MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNDIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDQzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDQ0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCitkZGRpdjMwNTEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDUyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA1MyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA1NCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRkaXYzMDYxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA2MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNjMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNjQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAwNXVwCitkZGRpdjMwNzEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDcyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA3MyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA3NCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gcmFuZG9tIGRpdmlkZSB0ZXN0cyB3aXRoIHJlc3VsdCBuZWFyIDEKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkZGl2NDAwMSBkaXZpZGUgIDMxOTUzODUxOTI5MTY5MTcgICAzMTk1Mzg1MTkyOTQ2Njk1ICAtPiAgMC45OTk5OTk5OTk5OTA2ODA5ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAwMiBkaXZpZGUgIDEzOTM3MjMwNjc1MjY5OTMgICAxMzkzNzIzMDY3NTE5NDc1ICAtPiAgMS4wMDAwMDAwMDAwMDUzOTQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDAzIGRpdmlkZSAgIDc1OTk4NTU0MzcwMjMwMiAgICA3NTk5ODU1NDM2NzQwMTUgIC0+ICAxLjAwMDAwMDAwMDAzNzIyMCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMDQgZGl2aWRlICA5NTc5MTU4NDU2MDI3MzAyICAgOTU3OTE1ODQ1NjAzNjg2NCAgLT4gIDAuOTk5OTk5OTk5OTk5MDAxOCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMDUgZGl2aWRlICA3MDc5Mzk4Mjk5MTQzNTY5ICAgNzA3OTM5ODI5OTE1NjkwNCAgLT4gIDAuOTk5OTk5OTk5OTk4MTE2NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMDYgZGl2aWRlICA2NjM2MTY5MjU1MzY2NTk4ICAgNjYzNjE2OTI1NTMzNjM4NiAgLT4gIDEuMDAwMDAwMDAwMDA0NTUzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAwNyBkaXZpZGUgIDY5NjQ4MTM5NzEzNDAwOTAgICA2OTY0ODEzOTcxMzIxNTU0ICAtPiAgMS4wMDAwMDAwMDAwMDI2NjEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDA4IGRpdmlkZSAgNDE4MjI3NTIyNTQ4MDc4NCAgIDQxODIyNzUyMjU0NTQwMDkgIC0+ICAxLjAwMDAwMDAwMDAwNjQwMiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMDkgZGl2aWRlICA5MjI4MzI1MTI0OTM4MDI5ICAgOTIyODMyNTEyNDkxODczMCAgLT4gIDEuMDAwMDAwMDAwMDAyMDkxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxMCBkaXZpZGUgIDM0MjgzNDYzMzg2MzAxOTIgICAzNDI4MzQ2MzM4NjA5ODQzICAtPiAgMS4wMDAwMDAwMDAwMDU5MzYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDExIGRpdmlkZSAgMjE0MzUxMTU1MDcyMjg5MyAgIDIxNDM1MTE1NTA3NTE3NTQgIC0+ICAwLjk5OTk5OTk5OTk4NjUzNTYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDEyIGRpdmlkZSAgMTY3MjczMjkyNDM5Njc4NSAgIDE2NzI3MzI5MjQ0MDE4MTEgIC0+ICAwLjk5OTk5OTk5OTk5Njk5NTMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDEzIGRpdmlkZSAgNDE5MDcxNDYxMTk0ODIxNiAgIDQxOTA3MTQ2MTE5NDg2NjQgIC0+ICAwLjk5OTk5OTk5OTk5OTg5MzEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDE0IGRpdmlkZSAgMzk0MjI1NDgwMDg0ODg3NyAgIDM5NDIyNTQ4MDA4MTQ1NTYgIC0+ICAxLjAwMDAwMDAwMDAwODcwNiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTUgZGl2aWRlICAyODU0NDU5ODI2OTUyMzM0ICAgMjg1NDQ1OTgyNjk2MDc2MiAgLT4gIDAuOTk5OTk5OTk5OTk3MDQ3NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTYgZGl2aWRlICAyODUzMjU4OTUzNjY0NzMxICAgMjg1MzI1ODk1MzY4NDQ3MSAgLT4gIDAuOTk5OTk5OTk5OTkzMDgxNiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTcgZGl2aWRlICA5NDUzNTEyNjM4MTI1OTc4ICAgOTQ1MzUxMjYzODE0NjQyNSAgLT4gIDAuOTk5OTk5OTk5OTk3ODM3MSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTggZGl2aWRlICAgMzM5NDc2NjMzOTQwMzY5ICAgIDMzOTQ3NjYzMzkxMjg4NyAgLT4gIDEuMDAwMDAwMDAwMDgwOTU0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxOSBkaXZpZGUgIDQ1NDIxODE0OTI2ODg0NjcgICA0NTQyMTgxNDkyNjk3NzM1ICAtPiAgMC45OTk5OTk5OTk5OTc5NTk2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyMCBkaXZpZGUgIDczMTI2MDAxOTIzOTkxOTcgICA3MzEyNjAwMTkyMzk1NDI0ICAtPiAgMS4wMDAwMDAwMDAwMDA1MTYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDIxIGRpdmlkZSAgMTgxMTY3NDk4NTU3MDExMSAgIDE4MTE2NzQ5ODU2MDM5MzUgIC0+ICAwLjk5OTk5OTk5OTk4MTMzMDAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDIyIGRpdmlkZSAgMTcwNjQ2MjYzOTAwMzQ4MSAgIDE3MDY0NjI2MzkwMTc3NDAgIC0+ICAwLjk5OTk5OTk5OTk5MTY0NDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDIzIGRpdmlkZSAgNjY5NzA1MjY1NDk0MDM2OCAgIDY2OTcwNTI2NTQ5MzQxMTAgIC0+ICAxLjAwMDAwMDAwMDAwMDkzNCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjQgZGl2aWRlICA1MDE1MjgzNjY0Mjc3NTM5ICAgNTAxNTI4MzY2NDMxMDcxOSAgLT4gIDAuOTk5OTk5OTk5OTkzMzg0MiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjUgZGl2aWRlICAyMzU5NTAxNTYxNTM3NDY0ICAgMjM1OTUwMTU2MTUwMjQ2NCAgLT4gIDEuMDAwMDAwMDAwMDE0ODM0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyNiBkaXZpZGUgIDI2Njk4NTAyMjc5MDkxNTcgICAyNjY5ODUwMjI3OTAxNTQ4ICAtPiAgMS4wMDAwMDAwMDAwMDI4NTAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDI3IGRpdmlkZSAgOTMyOTcyNTU0Njk3NDY0OCAgIDkzMjk3MjU1NDcwMDI0NDUgIC0+ICAwLjk5OTk5OTk5OTk5NzAyMDYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDI4IGRpdmlkZSAgMzIyODU2Mjg2NzA3MTI0OCAgIDMyMjg1NjI4NjcxMDYyMDYgIC0+ICAwLjk5OTk5OTk5OTk4OTE3MjMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDI5IGRpdmlkZSAgNDg2MjIyNjY0NDkyMTE3NSAgIDQ4NjIyMjY2NDQ5MDkzODAgIC0+ICAxLjAwMDAwMDAwMDAwMjQyNiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzAgZGl2aWRlICAxMDIyMjY3OTk3MDU0NTI5ICAgMTAyMjI2Nzk5NzA3MTMyOSAgLT4gIDAuOTk5OTk5OTk5OTgzNTY2MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzEgZGl2aWRlICAxMDQ4Nzc3NDgyMDIzNzE5ICAgMTA0ODc3NzQ4MjAwMDk0OCAgLT4gIDEuMDAwMDAwMDAwMDIxNzEyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzMiBkaXZpZGUgIDk5ODAxMTM3NzczMzcwOTggICA5OTgwMTEzNzc3MzMwNTM5ICAtPiAgMS4wMDAwMDAwMDAwMDA2NTcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDMzIGRpdmlkZSAgNzUwNjgzOTE2Nzk2MzkwOCAgIDc1MDY4MzkxNjc5NDI5MDEgIC0+ICAxLjAwMDAwMDAwMDAwMjc5OCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzQgZGl2aWRlICAgMjMxMTE5NzUxOTc3ODYwICAgIDIzMTExOTc1MTk2MjQ1MyAgLT4gIDEuMDAwMDAwMDAwMDY2NjYyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzNSBkaXZpZGUgIDQwMzQ5MDM2NjQ3NjI5NjIgICA0MDM0OTAzNjY0Nzk1NTI2ICAtPiAgMC45OTk5OTk5OTk5OTE5Mjk0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzNiBkaXZpZGUgIDU3MDAxMjIxNTIyNzQ2OTYgICA1NzAwMTIyMTUyMjUxMzg2ICAtPiAgMS4wMDAwMDAwMDAwMDQwODkgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDM3IGRpdmlkZSAgNjg2OTU5OTU5MDI5MzExMCAgIDY4Njk1OTk1OTAyOTM0OTUgIC0+ICAwLjk5OTk5OTk5OTk5OTk0NDAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDM4IGRpdmlkZSAgNTU3NjI4MTk2MDA5Mjc5NyAgIDU1NzYyODE5NjAxMDU1NzkgIC0+ICAwLjk5OTk5OTk5OTk5NzcwNzggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDM5IGRpdmlkZSAgMjMwNDg0NDg4ODM4MTMxOCAgIDIzMDQ4NDQ4ODgzNTMwNzMgIC0+ICAxLjAwMDAwMDAwMDAxMjI1NSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDAgZGl2aWRlICAzMjY1OTMzNjUxNjU2NDUyICAgMzI2NTkzMzY1MTY4Mjc3OSAgLT4gIDAuOTk5OTk5OTk5OTkxOTM4OSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDEgZGl2aWRlICA1MjM1NzE0OTg1MDc5OTE0ICAgNTIzNTcxNDk4NTA2NjEzMSAgLT4gIDEuMDAwMDAwMDAwMDAyNjMyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0MiBkaXZpZGUgIDU1Nzg0ODE1NzI4Mjc1NTEgICA1NTc4NDgxNTcyODIyOTQ1ICAtPiAgMS4wMDAwMDAwMDAwMDA4MjYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQzIGRpdmlkZSAgNDkwOTYxNjA4MTM5NjEzNCAgIDQ5MDk2MTYwODEzNzMwNzYgIC0+ICAxLjAwMDAwMDAwMDAwNDY5NiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDQgZGl2aWRlICAgNjM2NDQ3MjI0MzQ5NTM3ICAgIDYzNjQ0NzIyNDMzODc1NyAgLT4gIDEuMDAwMDAwMDAwMDE2OTM4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0NSBkaXZpZGUgIDE1MzkzNzM0MjgzOTY2NDAgICAxNTM5MzczNDI4MzY0NzI3ICAtPiAgMS4wMDAwMDAwMDAwMjA3MzEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQ2IGRpdmlkZSAgMjAyODc4NjcwNzM3Nzg5MyAgIDIwMjg3ODY3MDczNzg4NjYgIC0+ICAwLjk5OTk5OTk5OTk5OTUyMDQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQ3IGRpdmlkZSAgIDEzNzY0MzI2MDQ4NjIyMiAgICAxMzc2NDMyNjA0ODc0MTkgIC0+ICAwLjk5OTk5OTk5OTk5MTMwMzYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQ4IGRpdmlkZSAgIDI0NzQ1MTUxOTc0Njc2NSAgICAyNDc0NTE1MTk3NTIyNjcgIC0+ICAwLjk5OTk5OTk5OTk3Nzc2NTMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQ5IGRpdmlkZSAgNzg3Nzg1ODQ3NTAyMjA1NCAgIDc4Nzc4NTg0NzQ5OTk3OTQgIC0+ICAxLjAwMDAwMDAwMDAwMjgyNiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTAgZGl2aWRlICA3MzMzMjQyNjk0NzY2MjU4ICAgNzMzMzI0MjY5NDc0NDYyOCAgLT4gIDEuMDAwMDAwMDAwMDAyOTUwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1MSBkaXZpZGUgICAxMjQwNTE1MDM2OTg1OTIgICAgMTI0MDUxNTAzNjk5Mzk3ICAtPiAgMC45OTk5OTk5OTk5OTM1MTA4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1MiBkaXZpZGUgIDg5NDQ3Mzc0MzIzODUxODggICA4OTQ0NzM3NDMyNDA2ODYwICAtPiAgMC45OTk5OTk5OTk5OTc1NzcxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1MyBkaXZpZGUgIDk4ODM5NDg5MjM0MDY4NzQgICA5ODgzOTQ4OTIzNDI0ODQzICAtPiAgMC45OTk5OTk5OTk5OTgxODIwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1NCBkaXZpZGUgIDY4MjkxNzg3NDE2NTQyODQgICA2ODI5MTc4NzQxNjcxOTczICAtPiAgMC45OTk5OTk5OTk5OTc0MDk4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1NSBkaXZpZGUgIDczNDI3NTI0Nzk3NjgxMjIgICA3MzQyNzUyNDc5NzkzMzg1ICAtPiAgMC45OTk5OTk5OTk5OTY1NTk1ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1NiBkaXZpZGUgIDgwNjY0MjY1NzkwMDg3ODMgICA4MDY2NDI2NTc4OTc3NTYzICAtPiAgMS4wMDAwMDAwMDAwMDM4NzAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDU3IGRpdmlkZSAgODk5Mjc3NTA3MTM4MzI5NSAgIDg5OTI3NzUwNzEzNTI3MTIgIC0+ICAxLjAwMDAwMDAwMDAwMzQwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTggZGl2aWRlICA1NDg1MDExNzU1NTQ1NjQxICAgNTQ4NTAxMTc1NTU0MzYxMSAgLT4gIDEuMDAwMDAwMDAwMDAwMzcwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1OSBkaXZpZGUgIDU3Nzk5ODMwNTQzNTM5MTggICA1Nzc5OTgzMDU0MzY1MzAwICAtPiAgMC45OTk5OTk5OTk5OTgwMzA4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2MCBkaXZpZGUgIDk1MDIyNjUxMDI3MTM3NzQgICA5NTAyMjY1MTAyNzM1MjA4ICAtPiAgMC45OTk5OTk5OTk5OTc3NDQzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2MSBkaXZpZGUgIDIxMDk1NTgzOTkxMzA5ODEgICAyMTA5NTU4Mzk5MTE2MjgxICAtPiAgMS4wMDAwMDAwMDAwMDY5NjggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDYyIGRpdmlkZSAgNTI5NjE4MjYzNjM1MDQ3MSAgIDUyOTYxODI2MzYzNTE1MjEgIC0+ICAwLjk5OTk5OTk5OTk5OTgwMTcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDYzIGRpdmlkZSAgMTQ0MDAxOTIyNTU5MTg4MyAgIDE0NDAwMTkyMjU2MDE4NDQgIC0+ICAwLjk5OTk5OTk5OTk5MzA4MjcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDY0IGRpdmlkZSAgODE4MjExMDc5MTg4MTM0MSAgIDgxODIxMTA3OTE4NDcxNzQgIC0+ICAxLjAwMDAwMDAwMDAwNDE3NiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjUgZGl2aWRlICAgNDg5MDk4MjM1NTEyMDYwICAgIDQ4OTA5ODIzNTUzNDUxNiAgLT4gIDAuOTk5OTk5OTk5OTU0MDg2OSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjYgZGl2aWRlICA2NDc1Njg3MDg0NzgyMDM4ICAgNjQ3NTY4NzA4NDc1NjA4OSAgLT4gIDEuMDAwMDAwMDAwMDA0MDA3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2NyBkaXZpZGUgIDgwOTQzNDg1NTU3MzY5NDggICA4MDk0MzQ4NTU1NzU5MjM2ICAtPiAgMC45OTk5OTk5OTk5OTcyNDY1ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2OCBkaXZpZGUgIDE5ODI3NjY4MTYyOTE1NDMgICAxOTgyNzY2ODE2MzA5NDYzICAtPiAgMC45OTk5OTk5OTk5OTA5NjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2OSBkaXZpZGUgIDkyNzczMTQzMDAxMTMyNTEgICA5Mjc3MzE0MzAwMDg0NDY3ICAtPiAgMS4wMDAwMDAwMDAwMDMxMDMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDcwIGRpdmlkZSAgNDMzNTUzMjk1OTMxODkzNCAgIDQzMzU1MzI5NTkyOTMxNjcgIC0+ICAxLjAwMDAwMDAwMDAwNTk0MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzEgZGl2aWRlICA3NzY3MTEzMDMyOTgxMzQ4ICAgNzc2NzExMzAzMjk2ODEzMiAgLT4gIDEuMDAwMDAwMDAwMDAxNzAyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3MiBkaXZpZGUgIDE1Nzg1NDgwNTMzNDI4NjggICAxNTc4NTQ4MDUzMzcwNDQ4ICAtPiAgMC45OTk5OTk5OTk5ODI1MjgyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3MyBkaXZpZGUgIDM3OTA0MjA2ODY2NjY4OTggICAzNzkwNDIwNjg2NjM2MzE1ICAtPiAgMS4wMDAwMDAwMDAwMDgwNjggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDc0IGRpdmlkZSAgIDg3MTY4MjQyMTk1NTE0NyAgICA4NzE2ODI0MjE5NzY0NDEgIC0+ICAwLjk5OTk5OTk5OTk3NTU3MTQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDc1IGRpdmlkZSAgIDc0NDE0MTA1NDQ3OTk0MCAgICA3NDQxNDEwNTQ1MTIzMjkgIC0+ICAwLjk5OTk5OTk5OTk1NjQ3NDYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDc2IGRpdmlkZSAgODk1NjgyNDE4MzY3MDczNSAgIDg5NTY4MjQxODM2NDE3NDEgIC0+ICAxLjAwMDAwMDAwMDAwMzIzNyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzcgZGl2aWRlICA4MzM3MjkxNjk0NDg1NjgyICAgODMzNzI5MTY5NDQ1MTE5MyAgLT4gIDEuMDAwMDAwMDAwMDA0MTM3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3OCBkaXZpZGUgIDQxMDc3NzU5NDQ2ODM2NjkgICA0MTA3Nzc1OTQ0NjU3MDk3ICAtPiAgMS4wMDAwMDAwMDAwMDY0NjkgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDc5IGRpdmlkZSAgODY5MTkwMDA1Nzk2NDY0OCAgIDg2OTE5MDAwNTc5OTc1NTUgIC0+ICAwLjk5OTk5OTk5OTk5NjIxNDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDgwIGRpdmlkZSAgMjIyOTUyODUyMDUzNjQ2MiAgIDIyMjk1Mjg1MjA1MDIzMzcgIC0+ICAxLjAwMDAwMDAwMDAxNTMwNiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODEgZGl2aWRlICAgMzk4NDQyMDgzNzc0MzIyICAgIDM5ODQ0MjA4Mzc0NjI3MyAgLT4gIDEuMDAwMDAwMDAwMDcwMzk3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4MiBkaXZpZGUgIDUzMTk4MTk3NzY4MDg3NTkgICA1MzE5ODE5Nzc2ODM4MzEzICAtPiAgMC45OTk5OTk5OTk5OTQ0NDQ1ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4MyBkaXZpZGUgIDc3MTA0OTEyOTkwNjY4NTUgICA3NzEwNDkxMjk5MDQxODU4ICAtPiAgMS4wMDAwMDAwMDAwMDMyNDIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDg0IGRpdmlkZSAgOTA4MzIzMTI5NjA4NzI2NiAgIDkwODMyMzEyOTYwNTgxNjAgIC0+ICAxLjAwMDAwMDAwMDAwMzIwNCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODUgZGl2aWRlICAzNTY2ODczNTc0OTA0NTU5ICAgMzU2Njg3MzU3NDg5MDMyOCAgLT4gIDEuMDAwMDAwMDAwMDAzOTkwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4NiBkaXZpZGUgICA1OTYzNDMyOTA1NTA1MjUgICAgNTk2MzQzMjkwNTU1NjE0ICAtPiAgMC45OTk5OTk5OTk5OTE0NjYzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4NyBkaXZpZGUgICAyNzgyMjc5MjUwOTMxOTIgICAgMjc4MjI3OTI1MDY4MTA0ICAtPiAgMS4wMDAwMDAwMDAwOTAxNzEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDg4IGRpdmlkZSAgMzI5MjkwMjk1ODQ5MDY0OSAgIDMyOTI5MDI5NTg1MTk4ODEgIC0+ICAwLjk5OTk5OTk5OTk5MTEyMjcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDg5IGRpdmlkZSAgNTUyMTg3MTM2NDI0NTg4MSAgIDU1MjE4NzEzNjQyMjk1MzYgIC0+ICAxLjAwMDAwMDAwMDAwMjk2MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTAgZGl2aWRlICAyNDA2NTA1NjAyODgzNjE3ICAgMjQwNjUwNTYwMjg1Nzk5NyAgLT4gIDEuMDAwMDAwMDAwMDEwNjQ2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5MSBkaXZpZGUgIDc3NDExNDY5ODQ4NjkyMDggICA3NzQxMTQ2OTg0ODY3MjU1ICAtPiAgMS4wMDAwMDAwMDAwMDAyNTIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDkyIGRpdmlkZSAgNDU3NjA0MTgzMjQxNDkwOSAgIDQ1NzYwNDE4MzI0MDUxMDIgIC0+ICAxLjAwMDAwMDAwMDAwMjE0MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTMgZGl2aWRlICA5MTgzNzU2OTgyODc4MDU3ICAgOTE4Mzc1Njk4MjkwMTkzNCAgLT4gIDAuOTk5OTk5OTk5OTk3NDAwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTQgZGl2aWRlICA2MjE1NzM2NTEzODU1MTU5ICAgNjIxNTczNjUxMzg3MDM0MiAgLT4gIDAuOTk5OTk5OTk5OTk3NTU3MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTUgZGl2aWRlICAgMjQ4NTU0OTY4NTM0NTMzICAgIDI0ODU1NDk2ODU1MTQxNyAgLT4gIDAuOTk5OTk5OTk5OTMyMDcxNCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTYgZGl2aWRlICAgMzc2MzE0MTY1NjY4NjQ1ICAgIDM3NjMxNDE2NTY1OTc1NSAgLT4gIDEuMDAwMDAwMDAwMDIzNjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5NyBkaXZpZGUgIDU1MTM1NjkyNDk4MDk3MTggICA1NTEzNTY5MjQ5ODA4OTA2ICAtPiAgMS4wMDAwMDAwMDAwMDAxNDcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDk4IGRpdmlkZSAgMzM2Nzk5MjI0MjE2NzkwNCAgIDMzNjc5OTIyNDIxNTYyMjggIC0+ICAxLjAwMDAwMDAwMDAwMzQ2NyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTkgZGl2aWRlICA2MTM0ODY5NTM4OTY2OTY3ICAgNjEzNDg2OTUzODk4NTk4NiAgLT4gIDAuOTk5OTk5OTk5OTk2ODk5OSAgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bGwgdGVzdHMKK2RkZGl2OTk5OCBkaXZpZGUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjk5OTkgZGl2aWRlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGVJbnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZUludC5kZWNUZXN0CmluZGV4IDE1NTViNDIuLmJlYzU2NzkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZUludC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZUludC5kZWNUZXN0CkBAIC0xLDQ0OSArMSw0NDkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkRGl2aWRlSW50LmRlY1Rlc3QgLS0gZGVjRG91YmxlIGludGVnZXIgZGl2aXNpb24gICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRkZHZpMDAxIGRpdmlkZWludCAgMSAgICAgMSAgICAtPiAgMQ0KLWRkZHZpMDAyIGRpdmlkZWludCAgMiAgICAgMSAgICAtPiAgMg0KLWRkZHZpMDAzIGRpdmlkZWludCAgMSAgICAgMiAgICAtPiAgMA0KLWRkZHZpMDA0IGRpdmlkZWludCAgMiAgICAgMiAgICAtPiAgMQ0KLWRkZHZpMDA1IGRpdmlkZWludCAgMCAgICAgMSAgICAtPiAgMA0KLWRkZHZpMDA2IGRpdmlkZWludCAgMCAgICAgMiAgICAtPiAgMA0KLWRkZHZpMDA3IGRpdmlkZWludCAgMSAgICAgMyAgICAtPiAgMA0KLWRkZHZpMDA4IGRpdmlkZWludCAgMiAgICAgMyAgICAtPiAgMA0KLWRkZHZpMDA5IGRpdmlkZWludCAgMyAgICAgMyAgICAtPiAgMQ0KLQ0KLWRkZHZpMDEwIGRpdmlkZWludCAgMi40ICAgMSAgICAtPiAgMg0KLWRkZHZpMDExIGRpdmlkZWludCAgMi40ICAgLTEgICAtPiAgLTINCi1kZGR2aTAxMiBkaXZpZGVpbnQgIC0yLjQgIDEgICAgLT4gIC0yDQotZGRkdmkwMTMgZGl2aWRlaW50ICAtMi40ICAtMSAgIC0+ICAyDQotZGRkdmkwMTQgZGl2aWRlaW50ICAyLjQwICAxICAgIC0+ICAyDQotZGRkdmkwMTUgZGl2aWRlaW50ICAyLjQwMCAxICAgIC0+ICAyDQotZGRkdmkwMTYgZGl2aWRlaW50ICAyLjQgICAyICAgIC0+ICAxDQotZGRkdmkwMTcgZGl2aWRlaW50ICAyLjQwMCAyICAgIC0+ICAxDQotZGRkdmkwMTggZGl2aWRlaW50ICAyLiAgICAyICAgIC0+ICAxDQotZGRkdmkwMTkgZGl2aWRlaW50ICAyMCAgICAyMCAgIC0+ICAxDQotDQotZGRkdmkwMjAgZGl2aWRlaW50ICAxODcgICAxODcgIC0+ICAxDQotZGRkdmkwMjEgZGl2aWRlaW50ICA1ICAgICAyICAgIC0+ICAyDQotZGRkdmkwMjIgZGl2aWRlaW50ICA1ICAgICAyLjAgICAgLT4gIDINCi1kZGR2aTAyMyBkaXZpZGVpbnQgIDUgICAgIDIuMDAwICAtPiAgMg0KLWRkZHZpMDI0IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQ0KLWRkZHZpMDI1IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQ0KLQ0KLWRkZHZpMDMwIGRpdmlkZWludCAgMSAgICAgMiAgICAgIC0+ICAwDQotZGRkdmkwMzEgZGl2aWRlaW50ICAxICAgICA0ICAgICAgLT4gIDANCi1kZGR2aTAzMiBkaXZpZGVpbnQgIDEgICAgIDggICAgICAtPiAgMA0KLWRkZHZpMDMzIGRpdmlkZWludCAgMSAgICAgMTYgICAgIC0+ICAwDQotZGRkdmkwMzQgZGl2aWRlaW50ICAxICAgICAzMiAgICAgLT4gIDANCi1kZGR2aTAzNSBkaXZpZGVpbnQgIDEgICAgIDY0ICAgICAtPiAgMA0KLWRkZHZpMDQwIGRpdmlkZWludCAgMSAgICAtMiAgICAgIC0+IC0wDQotZGRkdmkwNDEgZGl2aWRlaW50ICAxICAgIC00ICAgICAgLT4gLTANCi1kZGR2aTA0MiBkaXZpZGVpbnQgIDEgICAgLTggICAgICAtPiAtMA0KLWRkZHZpMDQzIGRpdmlkZWludCAgMSAgICAtMTYgICAgIC0+IC0wDQotZGRkdmkwNDQgZGl2aWRlaW50ICAxICAgIC0zMiAgICAgLT4gLTANCi1kZGR2aTA0NSBkaXZpZGVpbnQgIDEgICAgLTY0ICAgICAtPiAtMA0KLWRkZHZpMDUwIGRpdmlkZWludCAtMSAgICAgMiAgICAgIC0+IC0wDQotZGRkdmkwNTEgZGl2aWRlaW50IC0xICAgICA0ICAgICAgLT4gLTANCi1kZGR2aTA1MiBkaXZpZGVpbnQgLTEgICAgIDggICAgICAtPiAtMA0KLWRkZHZpMDUzIGRpdmlkZWludCAtMSAgICAgMTYgICAgIC0+IC0wDQotZGRkdmkwNTQgZGl2aWRlaW50IC0xICAgICAzMiAgICAgLT4gLTANCi1kZGR2aTA1NSBkaXZpZGVpbnQgLTEgICAgIDY0ICAgICAtPiAtMA0KLWRkZHZpMDYwIGRpdmlkZWludCAtMSAgICAtMiAgICAgIC0+ICAwDQotZGRkdmkwNjEgZGl2aWRlaW50IC0xICAgIC00ICAgICAgLT4gIDANCi1kZGR2aTA2MiBkaXZpZGVpbnQgLTEgICAgLTggICAgICAtPiAgMA0KLWRkZHZpMDYzIGRpdmlkZWludCAtMSAgICAtMTYgICAgIC0+ICAwDQotZGRkdmkwNjQgZGl2aWRlaW50IC0xICAgIC0zMiAgICAgLT4gIDANCi1kZGR2aTA2NSBkaXZpZGVpbnQgLTEgICAgLTY0ICAgICAtPiAgMA0KLQ0KLS0tIHNpbWlsYXIgd2l0aCBwb3dlcnMgb2YgdGVuDQotZGRkdmkxNjAgZGl2aWRlaW50ICAxICAgICAxICAgICAgICAgLT4gIDENCi1kZGR2aTE2MSBkaXZpZGVpbnQgIDEgICAgIDEwICAgICAgICAtPiAgMA0KLWRkZHZpMTYyIGRpdmlkZWludCAgMSAgICAgMTAwICAgICAgIC0+ICAwDQotZGRkdmkxNjMgZGl2aWRlaW50ICAxICAgICAxMDAwICAgICAgLT4gIDANCi1kZGR2aTE2NCBkaXZpZGVpbnQgIDEgICAgIDEwMDAwICAgICAtPiAgMA0KLWRkZHZpMTY1IGRpdmlkZWludCAgMSAgICAgMTAwMDAwICAgIC0+ICAwDQotZGRkdmkxNjYgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwICAgLT4gIDANCi1kZGR2aTE2NyBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAwICAtPiAgMA0KLWRkZHZpMTY4IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAwIC0+ICAwDQotZGRkdmkxNzAgZGl2aWRlaW50ICAxICAgIC0xICAgICAgICAgLT4gLTENCi1kZGR2aTE3MSBkaXZpZGVpbnQgIDEgICAgLTEwICAgICAgICAtPiAtMA0KLWRkZHZpMTcyIGRpdmlkZWludCAgMSAgICAtMTAwICAgICAgIC0+IC0wDQotZGRkdmkxNzMgZGl2aWRlaW50ICAxICAgIC0xMDAwICAgICAgLT4gLTANCi1kZGR2aTE3NCBkaXZpZGVpbnQgIDEgICAgLTEwMDAwICAgICAtPiAtMA0KLWRkZHZpMTc1IGRpdmlkZWludCAgMSAgICAtMTAwMDAwICAgIC0+IC0wDQotZGRkdmkxNzYgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwICAgLT4gLTANCi1kZGR2aTE3NyBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAwICAtPiAtMA0KLWRkZHZpMTc4IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAwIC0+IC0wDQotZGRkdmkxODAgZGl2aWRlaW50IC0xICAgICAxICAgICAgICAgLT4gLTENCi1kZGR2aTE4MSBkaXZpZGVpbnQgLTEgICAgIDEwICAgICAgICAtPiAtMA0KLWRkZHZpMTgyIGRpdmlkZWludCAtMSAgICAgMTAwICAgICAgIC0+IC0wDQotZGRkdmkxODMgZGl2aWRlaW50IC0xICAgICAxMDAwICAgICAgLT4gLTANCi1kZGR2aTE4NCBkaXZpZGVpbnQgLTEgICAgIDEwMDAwICAgICAtPiAtMA0KLWRkZHZpMTg1IGRpdmlkZWludCAtMSAgICAgMTAwMDAwICAgIC0+IC0wDQotZGRkdmkxODYgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwICAgLT4gLTANCi1kZGR2aTE4NyBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAwICAtPiAtMA0KLWRkZHZpMTg4IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAwIC0+IC0wDQotZGRkdmkxOTAgZGl2aWRlaW50IC0xICAgIC0xICAgICAgICAgLT4gIDENCi1kZGR2aTE5MSBkaXZpZGVpbnQgLTEgICAgLTEwICAgICAgICAtPiAgMA0KLWRkZHZpMTkyIGRpdmlkZWludCAtMSAgICAtMTAwICAgICAgIC0+ICAwDQotZGRkdmkxOTMgZGl2aWRlaW50IC0xICAgIC0xMDAwICAgICAgLT4gIDANCi1kZGR2aTE5NCBkaXZpZGVpbnQgLTEgICAgLTEwMDAwICAgICAtPiAgMA0KLWRkZHZpMTk1IGRpdmlkZWludCAtMSAgICAtMTAwMDAwICAgIC0+ICAwDQotZGRkdmkxOTYgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwICAgLT4gIDANCi1kZGR2aTE5NyBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAwICAtPiAgMA0KLWRkZHZpMTk4IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAwIC0+ICAwDQotDQotLS0gc29tZSBsb25nIG9wZXJhbmQgKGF0IHA9OSkgY2FzZXMNCi1kZGR2aTA3MCBkaXZpZGVpbnQgIDk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OQ0KLWRkZHZpMDcxIGRpdmlkZWludCAgOTk5OTk5OTk5LjQgICAxICAtPiAgOTk5OTk5OTk5DQotZGRkdmkwNzIgZGl2aWRlaW50ICA5OTk5OTk5OTkuNSAgIDEgIC0+ICA5OTk5OTk5OTkNCi1kZGR2aTA3MyBkaXZpZGVpbnQgIDk5OTk5OTk5OS45ICAgMSAgLT4gIDk5OTk5OTk5OQ0KLWRkZHZpMDc0IGRpdmlkZWludCAgOTk5OTk5OTk5Ljk5OSAxICAtPiAgOTk5OTk5OTk5DQotDQotZGRkdmkwOTAgZGl2aWRlaW50ICAwLiAgICAgICAgICAgIDEgICAgLT4gIDANCi1kZGR2aTA5MSBkaXZpZGVpbnQgIC4wICAgICAgICAgICAgMSAgICAtPiAgMA0KLWRkZHZpMDkyIGRpdmlkZWludCAgMC4wMCAgICAgICAgICAxICAgIC0+ICAwDQotZGRkdmkwOTMgZGl2aWRlaW50ICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDANCi1kZGR2aTA5NCBkaXZpZGVpbnQgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMA0KLQ0KLWRkZHZpMTAwIGRpdmlkZWludCAgMSAgMSAgIC0+IDENCi1kZGR2aTEwMSBkaXZpZGVpbnQgIDEgIDIgICAtPiAwDQotZGRkdmkxMDIgZGl2aWRlaW50ICAxICAzICAgLT4gMA0KLWRkZHZpMTAzIGRpdmlkZWludCAgMSAgNCAgIC0+IDANCi1kZGR2aTEwNCBkaXZpZGVpbnQgIDEgIDUgICAtPiAwDQotZGRkdmkxMDUgZGl2aWRlaW50ICAxICA2ICAgLT4gMA0KLWRkZHZpMTA2IGRpdmlkZWludCAgMSAgNyAgIC0+IDANCi1kZGR2aTEwNyBkaXZpZGVpbnQgIDEgIDggICAtPiAwDQotZGRkdmkxMDggZGl2aWRlaW50ICAxICA5ICAgLT4gMA0KLWRkZHZpMTA5IGRpdmlkZWludCAgMSAgMTAgIC0+IDANCi1kZGR2aTExMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxDQotZGRkdmkxMTEgZGl2aWRlaW50ICAyICAxICAgLT4gMg0KLWRkZHZpMTEyIGRpdmlkZWludCAgMyAgMSAgIC0+IDMNCi1kZGR2aTExMyBkaXZpZGVpbnQgIDQgIDEgICAtPiA0DQotZGRkdmkxMTQgZGl2aWRlaW50ICA1ICAxICAgLT4gNQ0KLWRkZHZpMTE1IGRpdmlkZWludCAgNiAgMSAgIC0+IDYNCi1kZGR2aTExNiBkaXZpZGVpbnQgIDcgIDEgICAtPiA3DQotZGRkdmkxMTcgZGl2aWRlaW50ICA4ICAxICAgLT4gOA0KLWRkZHZpMTE4IGRpdmlkZWludCAgOSAgMSAgIC0+IDkNCi1kZGR2aTExOSBkaXZpZGVpbnQgIDEwIDEgICAtPiAxMA0KLQ0KLS0tIGZyb20gRGlhZ0JpZ0RlY2ltYWwNCi1kZGR2aTEzMSBkaXZpZGVpbnQgIDEwMS4zICAgMSAgICAgLT4gIDEwMQ0KLWRkZHZpMTMyIGRpdmlkZWludCAgMTAxLjAgICAxICAgICAtPiAgMTAxDQotZGRkdmkxMzMgZGl2aWRlaW50ICAxMDEuMyAgIDMgICAgIC0+ICAzMw0KLWRkZHZpMTM0IGRpdmlkZWludCAgMTAxLjAgICAzICAgICAtPiAgMzMNCi1kZGR2aTEzNSBkaXZpZGVpbnQgIDIuNCAgICAgMSAgICAgLT4gIDINCi1kZGR2aTEzNiBkaXZpZGVpbnQgIDIuNDAwICAgMSAgICAgLT4gIDINCi1kZGR2aTEzNyBkaXZpZGVpbnQgIDE4ICAgICAgMTggICAgLT4gIDENCi1kZGR2aTEzOCBkaXZpZGVpbnQgIDExMjAgICAgMTAwMCAgLT4gIDENCi1kZGR2aTEzOSBkaXZpZGVpbnQgIDIuNCAgICAgMiAgICAgLT4gIDENCi1kZGR2aTE0MCBkaXZpZGVpbnQgIDIuNDAwICAgMiAgICAgLT4gIDENCi1kZGR2aTE0MSBkaXZpZGVpbnQgIDAuNSAgICAgMi4wMDAgLT4gIDANCi1kZGR2aTE0MiBkaXZpZGVpbnQgIDguMDA1ICAgNyAgICAgLT4gIDENCi1kZGR2aTE0MyBkaXZpZGVpbnQgIDUgICAgICAgMiAgICAgLT4gIDINCi1kZGR2aTE0NCBkaXZpZGVpbnQgIDAgICAgICAgMiAgICAgLT4gIDANCi1kZGR2aTE0NSBkaXZpZGVpbnQgIDAuMDAgICAgMiAgICAgLT4gIDANCi0NCi0tLSBPdGhlcnMNCi1kZGR2aTE1MCBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkNCi1kZGR2aTE1MSBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMNCi1kZGR2aTE1MiBkaXZpZGVpbnQgIDEyMzQ1ICA0LjkgICAgLT4gIDI1MTkNCi1kZGR2aTE1MyBkaXZpZGVpbnQgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkNCi1kZGR2aTE1NCBkaXZpZGVpbnQgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjANCi1kZGR2aTE1NSBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAxICAgLT4gIDI0NjQNCi1kZGR2aTE1NiBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjgNCi1kZGR2aTE1NyBkaXZpZGVpbnQgICAgMTAxICA3LjYgICAgLT4gIDEzDQotDQotLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGVpbnQgYnkgMA0KLWRkZHZpMjAxIGRpdmlkZWludCAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkdmkyMDIgZGl2aWRlaW50ICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZGR2aTIwMyBkaXZpZGVpbnQgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkZHZpMjA0IGRpdmlkZWludCAgMC4wMDAxIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMDUgZGl2aWRlaW50ICAwLjAxICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTIwNiBkaXZpZGVpbnQgIDAuMSAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpMjA3IGRpdmlkZWludCAgMSAgICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMDggZGl2aWRlaW50ICAxICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTIwOSBkaXZpZGVpbnQgMTAgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpMjEwIGRpdmlkZWludCAxRSsxMDAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMTEgZGl2aWRlaW50IDFFKzM4MCAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTIxNCBkaXZpZGVpbnQgIC0wLjAwMDEgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMTUgZGl2aWRlaW50ICAtMC4wMSAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpMjE2IGRpdmlkZWludCAgLTAuMSAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTIxNyBkaXZpZGVpbnQgIC0xICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMTggZGl2aWRlaW50ICAtMSAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpMjE5IGRpdmlkZWludCAtMTAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTIyMCBkaXZpZGVpbnQgLTFFKzEwMCAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMjEgZGl2aWRlaW50IC0xRSszODAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLS0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdw0KLWRkZHZpMjcwIGRpdmlkZWludCAxIDFlMzg0ICAgICAgICAgIC0+IDANCi1kZGR2aTI3MSBkaXZpZGVpbnQgMSAwLjllMzg0ICAgICAgICAtPiAwDQotZGRkdmkyNzIgZGl2aWRlaW50IDEgMC45OWUzODQgICAgICAgLT4gMA0KLWRkZHZpMjczIGRpdmlkZWludCAxIDAuOTk5OTk5OTk5OTk5OTk5OWUzODQgICAgICAgLT4gMA0KLWRkZHZpMjc0IGRpdmlkZWludCA5ZTM4NCAgICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRkdmkyNzUgZGl2aWRlaW50IDkuOWUzODQgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZGR2aTI3NiBkaXZpZGVpbnQgOS45OWUzODQgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkZHZpMjc3IGRpdmlkZWludCA5Ljk5OTk5OTk5OTk5OTk5OWUzODQgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLQ0KLWRkZHZpMjgwIGRpdmlkZWludCAwLjEgOWUtMzgzICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRkdmkyODEgZGl2aWRlaW50IDAuMSA5OWUtMzgzICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZGR2aTI4MiBkaXZpZGVpbnQgMC4xIDk5OWUtMzgzICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkZHZpMjgzIGRpdmlkZWludCAwLjEgOWUtMzgyICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRkdmkyODQgZGl2aWRlaW50IDAuMSA5OWUtMzgyICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi0NCi0tLSBHRCBlZGdlIGNhc2VzOiBsaHMgc21hbGxlciB0aGFuIHJocyBidXQgbW9yZSBkaWdpdHMNCi1kZGR2aTMwMSAgZGl2aWRlaW50ICAwLjkgICAgICAyICAgICAgLT4gIDANCi1kZGR2aTMwMiAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAgICAgLT4gIDANCi1kZGR2aTMwMyAgZGl2aWRlaW50ICAwLjkgICAgICAyLjEgICAgLT4gIDANCi1kZGR2aTMwNCAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAwICAgLT4gIDANCi1kZGR2aTMwNSAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAxICAgLT4gIDANCi1kZGR2aTMwNiAgZGl2aWRlaW50ICAwLjEyICAgICAxICAgICAgLT4gIDANCi1kZGR2aTMwNyAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDANCi1kZGR2aTMwOCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDANCi1kZGR2aTMwOSAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDANCi1kZGR2aTMxMCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDANCi1kZGR2aTMxMSAgZGl2aWRlaW50ICAwLjEyICAgICAyICAgICAgLT4gIDANCi1kZGR2aTMxMiAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAgICAgLT4gIDANCi1kZGR2aTMxMyAgZGl2aWRlaW50ICAwLjEyICAgICAyLjEgICAgLT4gIDANCi1kZGR2aTMxNCAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAwICAgLT4gIDANCi1kZGR2aTMxNSAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAxICAgLT4gIDANCi0NCi0tLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUNCi1kZGR2aTMzMCAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAxMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQ1DQotZGRkdmkzMzEgIGRpdmlkZWludCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGR2aTMzMiAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZGR2aTMzMyAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0NCi1kZGR2aTEwNTEgZGl2aWRlaW50ICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZGR2aTEwNTIgZGl2aWRlaW50ICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZGR2aTEwNTMgZGl2aWRlaW50IC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZGR2aTEwNTQgZGl2aWRlaW50IC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZGR2aTEwNTUgZGl2aWRlaW50ICAxZS0yNzcgIDFlKzMxMSAtPiAgMA0KLWRkZHZpMTA1NiBkaXZpZGVpbnQgIDFlLTI3NyAtMWUrMzExIC0+IC0wDQotZGRkdmkxMDU3IGRpdmlkZWludCAtMWUtMjc3ICAxZSszMTEgLT4gLTANCi1kZGR2aTEwNTggZGl2aWRlaW50IC0xZS0yNzcgLTFlKzMxMSAtPiAgMA0KLQ0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KLWRkZHZpMTA2MCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMSAtPiAwDQotZGRkdmkxMDYxIGRpdmlkZWludCAxZS0yOTEgMWUrMTAyIC0+IDANCi1kZGR2aTEwNjIgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDMgLT4gMA0KLWRkZHZpMTA2MyBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNCAtPiAwDQotZGRkdmkxMDY0IGRpdmlkZWludCAxZS0yOTEgMWUrMTA1IC0+IDANCi1kZGR2aTEwNjUgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDYgLT4gMA0KLWRkZHZpMTA2NiBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNyAtPiAwDQotZGRkdmkxMDY3IGRpdmlkZWludCAxZS0yOTEgMWUrMTA4IC0+IDANCi1kZGR2aTEwNjggZGl2aWRlaW50IDFlLTI5MSAxZSsxMDkgLT4gMA0KLWRkZHZpMTA2OSBkaXZpZGVpbnQgMWUtMjkxIDFlKzExMCAtPiAwDQotDQotZGRkdmkxMTAxIGRpdmlkZWludCAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDANCi1kZGR2aTExMDIgZGl2aWRlaW50ICAxLjAwMEUtMzk0ICAgMWUrMSAgLT4gMA0KLWRkZHZpMTEwMyBkaXZpZGVpbnQgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAwDQotDQotZGRkdmkxMTE4IGRpdmlkZWludCAgMUUtMzk0ICAgICAgIDFlKzQgIC0+IDANCi1kZGR2aTExMTkgZGl2aWRlaW50ICAzRS0zOTQgICAgICAtMWUrNSAgLT4gLTANCi1kZGR2aTExMjAgZGl2aWRlaW50ICA1RS0zOTQgICAgICAgMWUrNSAgLT4gMA0KLQ0KLWRkZHZpMTEyNCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMA0KLWRkZHZpMTEzMCBkaXZpZGVpbnQgIDMuMEUtMzk0ICAgIC0xZSs1ICAtPiAtMA0KLQ0KLWRkZHZpMTEzMSBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsyMDAgLT4gMA0KLWRkZHZpMTEzMiBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTkgLT4gMA0KLWRkZHZpMTEzMyBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTggLT4gMA0KLWRkZHZpMTEzNCBkaXZpZGVpbnQgIDIuMEUtMTk5ICAgICAyZSsxOTggLT4gMA0KLWRkZHZpMTEzNSBkaXZpZGVpbnQgIDQuMEUtMTk5ICAgICA0ZSsxOTggLT4gMA0KLQ0KLS0tIGxvbmcgb3BlcmFuZCBjaGVja3MNCi1kZGR2aTQwMSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMTAwIC0+IDEyMzQ1Njc4MA0KLWRkZHZpNDAyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwICAgLT4gMA0KLWRkZHZpNDAzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxMCAgLT4gMTIzNDU2NzgwDQotZGRkdmk0MDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgICAtPiAwDQotZGRkdmk0MDUgZGl2aWRlaW50IDEyMzQ1Njc4OTAgIDEwICAtPiAxMjM0NTY3ODkNCi1kZGR2aTQwNiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAgIC0+IDANCi1kZGR2aTQwNyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMTAgIC0+IDEyMzQ1Njc4OQ0KLWRkZHZpNDA4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgICAgLT4gMA0KLWRkZHZpNDA5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxMDAgLT4gMTIzNDU2Nzg5DQotZGRkdmk0MTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgICAtPiAwDQotZGRkdmk0MTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEwICAtPiAxMjM0NTY3ODkNCi1kZGR2aTQxMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAgIC0+IDANCi1kZGR2aTQxMyBkaXZpZGVpbnQgMTIzNDU2Nzg5NDggMTAwIC0+IDEyMzQ1Njc4OQ0KLWRkZHZpNDE0IGRpdmlkZWludCAxMjM0NTY3ODk0OSAxMDAgLT4gMTIzNDU2Nzg5DQotZGRkdmk0MTUgZGl2aWRlaW50IDEyMzQ1Njc4OTUwIDEwMCAtPiAxMjM0NTY3ODkNCi1kZGR2aTQxNiBkaXZpZGVpbnQgMTIzNDU2Nzg5NTEgMTAwIC0+IDEyMzQ1Njc4OQ0KLWRkZHZpNDE3IGRpdmlkZWludCAxMjM0NTY3ODk5OSAxMDAgLT4gMTIzNDU2Nzg5DQotZGRkdmk0NDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDANCi1kZGR2aTQ0MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAtPiAwDQotZGRkdmk0NDMgZGl2aWRlaW50IDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMA0KLWRkZHZpNDQ0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgIC0+IDANCi1kZGR2aTQ0NSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwDQotZGRkdmk0NDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgLT4gMA0KLWRkZHZpNDQ3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTENCi1kZGR2aTQ0OCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAtPiAwDQotZGRkdmk0NDkgZGl2aWRlaW50IDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDENCi1kZGR2aTQ1MCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAtPiAwDQotZGRkdmk0NTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5Ng0KLWRkZHZpNDUyIGRpdmlkZWludCAxIDEyMzQ1Njc4OTYgIC0+IDANCi0NCi0tLSBtb3JlIHplcm9zLCBldGMuDQotZGRkdmk1MzEgZGl2aWRlaW50IDUuMDAgMUUtMyAgICAtPiA1MDAwDQotZGRkdmk1MzIgZGl2aWRlaW50IDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkdmk1MzMgZGl2aWRlaW50IDAwLjAwIDBFLTMgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkdmk1MzQgZGl2aWRlaW50ICAwICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkdmk1MzUgZGl2aWRlaW50IC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkdmk1MzYgZGl2aWRlaW50IC0wICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotDQotZGRkdmk1NDEgZGl2aWRlaW50ICAwICAgIC0xICAgICAtPiAtMA0KLWRkZHZpNTQyIGRpdmlkZWludCAtMCAgICAtMSAgICAgLT4gIDANCi1kZGR2aTU0MyBkaXZpZGVpbnQgIDAgICAgIDEgICAgIC0+ICAwDQotZGRkdmk1NDQgZGl2aWRlaW50IC0wICAgICAxICAgICAtPiAtMA0KLWRkZHZpNTQ1IGRpdmlkZWludCAtMSAgICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTU0NiBkaXZpZGVpbnQgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmk1NDcgZGl2aWRlaW50ICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpNTQ4IGRpdmlkZWludCAgMSAgICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi1kZGR2aTU1MSBkaXZpZGVpbnQgIDAuMCAgLTEgICAgIC0+IC0wDQotZGRkdmk1NTIgZGl2aWRlaW50IC0wLjAgIC0xICAgICAtPiAgMA0KLWRkZHZpNTUzIGRpdmlkZWludCAgMC4wICAgMSAgICAgLT4gIDANCi1kZGR2aTU1NCBkaXZpZGVpbnQgLTAuMCAgIDEgICAgIC0+IC0wDQotZGRkdmk1NTUgZGl2aWRlaW50IC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpNTU2IGRpdmlkZWludCAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTU1NyBkaXZpZGVpbnQgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmk1NTggZGl2aWRlaW50ICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRkZHZpNTYxIGRpdmlkZWludCAgMCAgICAtMS4wICAgLT4gLTANCi1kZGR2aTU2MiBkaXZpZGVpbnQgLTAgICAgLTEuMCAgIC0+ICAwDQotZGRkdmk1NjMgZGl2aWRlaW50ICAwICAgICAxLjAgICAtPiAgMA0KLWRkZHZpNTY0IGRpdmlkZWludCAtMCAgICAgMS4wICAgLT4gLTANCi1kZGR2aTU2NSBkaXZpZGVpbnQgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmk1NjYgZGl2aWRlaW50IC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpNTY3IGRpdmlkZWludCAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTU2OCBkaXZpZGVpbnQgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZGRkdmk1NzEgZGl2aWRlaW50ICAwLjAgIC0xLjAgICAtPiAtMA0KLWRkZHZpNTcyIGRpdmlkZWludCAtMC4wICAtMS4wICAgLT4gIDANCi1kZGR2aTU3MyBkaXZpZGVpbnQgIDAuMCAgIDEuMCAgIC0+ICAwDQotZGRkdmk1NzQgZGl2aWRlaW50IC0wLjAgICAxLjAgICAtPiAtMA0KLWRkZHZpNTc1IGRpdmlkZWludCAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTU3NiBkaXZpZGVpbnQgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmk1NzcgZGl2aWRlaW50ICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpNTc4IGRpdmlkZWludCAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi0tLSBTcGVjaWFscw0KLWRkZHZpNTgwIGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNTgxIGRpdmlkZWludCAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZGRkdmk1ODIgZGl2aWRlaW50ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kZGR2aTU4MyBkaXZpZGVpbnQgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWRkZHZpNTg0IGRpdmlkZWludCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZGRkdmk1ODUgZGl2aWRlaW50ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kZGR2aTU4NiBkaXZpZGVpbnQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRkZHZpNTg3IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNTg4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTANCi1kZGR2aTU4OSBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTU5MCBkaXZpZGVpbnQgLTEgICAgIEluZiAgIC0+IC0wDQotZGRkdmk1OTEgZGl2aWRlaW50IC0wICAgICBJbmYgICAtPiAtMA0KLWRkZHZpNTkyIGRpdmlkZWludCAgMCAgICAgSW5mICAgLT4gIDANCi1kZGR2aTU5MyBkaXZpZGVpbnQgIDEgICAgIEluZiAgIC0+ICAwDQotZGRkdmk1OTQgZGl2aWRlaW50ICAxMDAwICBJbmYgICAtPiAgMA0KLWRkZHZpNTk1IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkZHZpNjAwIGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjAxIGRpdmlkZWludCAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZGRkdmk2MDIgZGl2aWRlaW50IC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1kZGR2aTYwMyBkaXZpZGVpbnQgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRkZHZpNjA0IGRpdmlkZWludCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZGRkdmk2MDUgZGl2aWRlaW50IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kZGR2aTYwNiBkaXZpZGVpbnQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KLWRkZHZpNjA3IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjA4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTANCi1kZGR2aTYwOSBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTYxMCBkaXZpZGVpbnQgLTEgICAgLUluZiAgIC0+ICAwDQotZGRkdmk2MTEgZGl2aWRlaW50IC0wICAgIC1JbmYgICAtPiAgMA0KLWRkZHZpNjEyIGRpdmlkZWludCAgMCAgICAtSW5mICAgLT4gLTANCi1kZGR2aTYxMyBkaXZpZGVpbnQgIDEgICAgLUluZiAgIC0+IC0wDQotZGRkdmk2MTQgZGl2aWRlaW50ICAxMDAwIC1JbmYgICAtPiAtMA0KLWRkZHZpNjE1IGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkZHZpNjIxIGRpdmlkZWludCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRkZHZpNjIyIGRpdmlkZWludCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRkZHZpNjIzIGRpdmlkZWludCAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRkZHZpNjI0IGRpdmlkZWludCAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRkZHZpNjI1IGRpdmlkZWludCAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRkZHZpNjI2IGRpdmlkZWludCAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRkZHZpNjI3IGRpdmlkZWludCAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRkZHZpNjI4IGRpdmlkZWludCAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRkZHZpNjI5IGRpdmlkZWludCAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRkZHZpNjMwIGRpdmlkZWludCAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRkZHZpNjMxIGRpdmlkZWludCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkZHZpNjMyIGRpdmlkZWludCAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkZHZpNjMzIGRpdmlkZWludCAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkZHZpNjM0IGRpdmlkZWludCAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkZHZpNjM1IGRpdmlkZWludCAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkZHZpNjM2IGRpdmlkZWludCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkZHZpNjM3IGRpdmlkZWludCAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRkZHZpNjQxIGRpdmlkZWludCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY0MiBkaXZpZGVpbnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NDMgZGl2aWRlaW50ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjQ0IGRpdmlkZWludCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY0NSBkaXZpZGVpbnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NDYgZGl2aWRlaW50ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjQ3IGRpdmlkZWludCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY0OCBkaXZpZGVpbnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NDkgZGl2aWRlaW50ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjUwIGRpdmlkZWludCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY1MSBkaXZpZGVpbnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NTIgZGl2aWRlaW50IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjUzIGRpdmlkZWludCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY1NCBkaXZpZGVpbnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NTUgZGl2aWRlaW50ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjU2IGRpdmlkZWludCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY1NyBkaXZpZGVpbnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NTggZGl2aWRlaW50ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjU5IGRpdmlkZWludCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRkdmk2NjEgZGl2aWRlaW50ICBOYU45IC1JbmYgICAtPiAgTmFOOQ0KLWRkZHZpNjYyIGRpdmlkZWludCAgTmFOOCAgMTAwMCAgLT4gIE5hTjgNCi1kZGR2aTY2MyBkaXZpZGVpbnQgIE5hTjcgIEluZiAgIC0+ICBOYU43DQotZGRkdmk2NjQgZGl2aWRlaW50IC1OYU42ICBOYU41ICAtPiAtTmFONg0KLWRkZHZpNjY1IGRpdmlkZWludCAtSW5mICAgTmFONCAgLT4gIE5hTjQNCi1kZGR2aTY2NiBkaXZpZGVpbnQgLTEwMDAgIE5hTjMgIC0+ICBOYU4zDQotZGRkdmk2NjcgZGl2aWRlaW50ICBJbmYgIC1OYU4yICAtPiAtTmFOMg0KLQ0KLWRkZHZpNjcxIGRpdmlkZWludCAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NzIgZGl2aWRlaW50ICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY3MyBkaXZpZGVpbnQgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjc0IGRpdmlkZWludCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NzUgZGl2aWRlaW50ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY3NiBkaXZpZGVpbnQgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjc3IGRpdmlkZWludCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NzggZGl2aWRlaW50ICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY3OSBkaXZpZGVpbnQgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZGR2aTkwMCBkaXZpZGVpbnQgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpOTAxIGRpdmlkZWludCAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZERpdmlkZUludC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBpbnRlZ2VyIGRpdmlzaW9uICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZGR2aTAwMSBkaXZpZGVpbnQgIDEgICAgIDEgICAgLT4gIDEKK2RkZHZpMDAyIGRpdmlkZWludCAgMiAgICAgMSAgICAtPiAgMgorZGRkdmkwMDMgZGl2aWRlaW50ICAxICAgICAyICAgIC0+ICAwCitkZGR2aTAwNCBkaXZpZGVpbnQgIDIgICAgIDIgICAgLT4gIDEKK2RkZHZpMDA1IGRpdmlkZWludCAgMCAgICAgMSAgICAtPiAgMAorZGRkdmkwMDYgZGl2aWRlaW50ICAwICAgICAyICAgIC0+ICAwCitkZGR2aTAwNyBkaXZpZGVpbnQgIDEgICAgIDMgICAgLT4gIDAKK2RkZHZpMDA4IGRpdmlkZWludCAgMiAgICAgMyAgICAtPiAgMAorZGRkdmkwMDkgZGl2aWRlaW50ICAzICAgICAzICAgIC0+ICAxCisKK2RkZHZpMDEwIGRpdmlkZWludCAgMi40ICAgMSAgICAtPiAgMgorZGRkdmkwMTEgZGl2aWRlaW50ICAyLjQgICAtMSAgIC0+ICAtMgorZGRkdmkwMTIgZGl2aWRlaW50ICAtMi40ICAxICAgIC0+ICAtMgorZGRkdmkwMTMgZGl2aWRlaW50ICAtMi40ICAtMSAgIC0+ICAyCitkZGR2aTAxNCBkaXZpZGVpbnQgIDIuNDAgIDEgICAgLT4gIDIKK2RkZHZpMDE1IGRpdmlkZWludCAgMi40MDAgMSAgICAtPiAgMgorZGRkdmkwMTYgZGl2aWRlaW50ICAyLjQgICAyICAgIC0+ICAxCitkZGR2aTAxNyBkaXZpZGVpbnQgIDIuNDAwIDIgICAgLT4gIDEKK2RkZHZpMDE4IGRpdmlkZWludCAgMi4gICAgMiAgICAtPiAgMQorZGRkdmkwMTkgZGl2aWRlaW50ICAyMCAgICAyMCAgIC0+ICAxCisKK2RkZHZpMDIwIGRpdmlkZWludCAgMTg3ICAgMTg3ICAtPiAgMQorZGRkdmkwMjEgZGl2aWRlaW50ICA1ICAgICAyICAgIC0+ICAyCitkZGR2aTAyMiBkaXZpZGVpbnQgIDUgICAgIDIuMCAgICAtPiAgMgorZGRkdmkwMjMgZGl2aWRlaW50ICA1ICAgICAyLjAwMCAgLT4gIDIKK2RkZHZpMDI0IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQorZGRkdmkwMjUgZGl2aWRlaW50ICA1ICAgICAwLjIwMCAgLT4gIDI1CisKK2RkZHZpMDMwIGRpdmlkZWludCAgMSAgICAgMiAgICAgIC0+ICAwCitkZGR2aTAzMSBkaXZpZGVpbnQgIDEgICAgIDQgICAgICAtPiAgMAorZGRkdmkwMzIgZGl2aWRlaW50ICAxICAgICA4ICAgICAgLT4gIDAKK2RkZHZpMDMzIGRpdmlkZWludCAgMSAgICAgMTYgICAgIC0+ICAwCitkZGR2aTAzNCBkaXZpZGVpbnQgIDEgICAgIDMyICAgICAtPiAgMAorZGRkdmkwMzUgZGl2aWRlaW50ICAxICAgICA2NCAgICAgLT4gIDAKK2RkZHZpMDQwIGRpdmlkZWludCAgMSAgICAtMiAgICAgIC0+IC0wCitkZGR2aTA0MSBkaXZpZGVpbnQgIDEgICAgLTQgICAgICAtPiAtMAorZGRkdmkwNDIgZGl2aWRlaW50ICAxICAgIC04ICAgICAgLT4gLTAKK2RkZHZpMDQzIGRpdmlkZWludCAgMSAgICAtMTYgICAgIC0+IC0wCitkZGR2aTA0NCBkaXZpZGVpbnQgIDEgICAgLTMyICAgICAtPiAtMAorZGRkdmkwNDUgZGl2aWRlaW50ICAxICAgIC02NCAgICAgLT4gLTAKK2RkZHZpMDUwIGRpdmlkZWludCAtMSAgICAgMiAgICAgIC0+IC0wCitkZGR2aTA1MSBkaXZpZGVpbnQgLTEgICAgIDQgICAgICAtPiAtMAorZGRkdmkwNTIgZGl2aWRlaW50IC0xICAgICA4ICAgICAgLT4gLTAKK2RkZHZpMDUzIGRpdmlkZWludCAtMSAgICAgMTYgICAgIC0+IC0wCitkZGR2aTA1NCBkaXZpZGVpbnQgLTEgICAgIDMyICAgICAtPiAtMAorZGRkdmkwNTUgZGl2aWRlaW50IC0xICAgICA2NCAgICAgLT4gLTAKK2RkZHZpMDYwIGRpdmlkZWludCAtMSAgICAtMiAgICAgIC0+ICAwCitkZGR2aTA2MSBkaXZpZGVpbnQgLTEgICAgLTQgICAgICAtPiAgMAorZGRkdmkwNjIgZGl2aWRlaW50IC0xICAgIC04ICAgICAgLT4gIDAKK2RkZHZpMDYzIGRpdmlkZWludCAtMSAgICAtMTYgICAgIC0+ICAwCitkZGR2aTA2NCBkaXZpZGVpbnQgLTEgICAgLTMyICAgICAtPiAgMAorZGRkdmkwNjUgZGl2aWRlaW50IC0xICAgIC02NCAgICAgLT4gIDAKKworLS0gc2ltaWxhciB3aXRoIHBvd2VycyBvZiB0ZW4KK2RkZHZpMTYwIGRpdmlkZWludCAgMSAgICAgMSAgICAgICAgIC0+ICAxCitkZGR2aTE2MSBkaXZpZGVpbnQgIDEgICAgIDEwICAgICAgICAtPiAgMAorZGRkdmkxNjIgZGl2aWRlaW50ICAxICAgICAxMDAgICAgICAgLT4gIDAKK2RkZHZpMTYzIGRpdmlkZWludCAgMSAgICAgMTAwMCAgICAgIC0+ICAwCitkZGR2aTE2NCBkaXZpZGVpbnQgIDEgICAgIDEwMDAwICAgICAtPiAgMAorZGRkdmkxNjUgZGl2aWRlaW50ICAxICAgICAxMDAwMDAgICAgLT4gIDAKK2RkZHZpMTY2IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMCAgIC0+ICAwCitkZGR2aTE2NyBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAwICAtPiAgMAorZGRkdmkxNjggZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMDAgLT4gIDAKK2RkZHZpMTcwIGRpdmlkZWludCAgMSAgICAtMSAgICAgICAgIC0+IC0xCitkZGR2aTE3MSBkaXZpZGVpbnQgIDEgICAgLTEwICAgICAgICAtPiAtMAorZGRkdmkxNzIgZGl2aWRlaW50ICAxICAgIC0xMDAgICAgICAgLT4gLTAKK2RkZHZpMTczIGRpdmlkZWludCAgMSAgICAtMTAwMCAgICAgIC0+IC0wCitkZGR2aTE3NCBkaXZpZGVpbnQgIDEgICAgLTEwMDAwICAgICAtPiAtMAorZGRkdmkxNzUgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAgICAgLT4gLTAKK2RkZHZpMTc2IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMCAgIC0+IC0wCitkZGR2aTE3NyBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAwICAtPiAtMAorZGRkdmkxNzggZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMDAgLT4gLTAKK2RkZHZpMTgwIGRpdmlkZWludCAtMSAgICAgMSAgICAgICAgIC0+IC0xCitkZGR2aTE4MSBkaXZpZGVpbnQgLTEgICAgIDEwICAgICAgICAtPiAtMAorZGRkdmkxODIgZGl2aWRlaW50IC0xICAgICAxMDAgICAgICAgLT4gLTAKK2RkZHZpMTgzIGRpdmlkZWludCAtMSAgICAgMTAwMCAgICAgIC0+IC0wCitkZGR2aTE4NCBkaXZpZGVpbnQgLTEgICAgIDEwMDAwICAgICAtPiAtMAorZGRkdmkxODUgZGl2aWRlaW50IC0xICAgICAxMDAwMDAgICAgLT4gLTAKK2RkZHZpMTg2IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMCAgIC0+IC0wCitkZGR2aTE4NyBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAwICAtPiAtMAorZGRkdmkxODggZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMDAgLT4gLTAKK2RkZHZpMTkwIGRpdmlkZWludCAtMSAgICAtMSAgICAgICAgIC0+ICAxCitkZGR2aTE5MSBkaXZpZGVpbnQgLTEgICAgLTEwICAgICAgICAtPiAgMAorZGRkdmkxOTIgZGl2aWRlaW50IC0xICAgIC0xMDAgICAgICAgLT4gIDAKK2RkZHZpMTkzIGRpdmlkZWludCAtMSAgICAtMTAwMCAgICAgIC0+ICAwCitkZGR2aTE5NCBkaXZpZGVpbnQgLTEgICAgLTEwMDAwICAgICAtPiAgMAorZGRkdmkxOTUgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAgICAgLT4gIDAKK2RkZHZpMTk2IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMCAgIC0+ICAwCitkZGR2aTE5NyBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAwICAtPiAgMAorZGRkdmkxOTggZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMDAgLT4gIDAKKworLS0gc29tZSBsb25nIG9wZXJhbmQgKGF0IHA9OSkgY2FzZXMKK2RkZHZpMDcwIGRpdmlkZWludCAgOTk5OTk5OTk5ICAgICAxICAtPiAgOTk5OTk5OTk5CitkZGR2aTA3MSBkaXZpZGVpbnQgIDk5OTk5OTk5OS40ICAgMSAgLT4gIDk5OTk5OTk5OQorZGRkdmkwNzIgZGl2aWRlaW50ICA5OTk5OTk5OTkuNSAgIDEgIC0+ICA5OTk5OTk5OTkKK2RkZHZpMDczIGRpdmlkZWludCAgOTk5OTk5OTk5LjkgICAxICAtPiAgOTk5OTk5OTk5CitkZGR2aTA3NCBkaXZpZGVpbnQgIDk5OTk5OTk5OS45OTkgMSAgLT4gIDk5OTk5OTk5OQorCitkZGR2aTA5MCBkaXZpZGVpbnQgIDAuICAgICAgICAgICAgMSAgICAtPiAgMAorZGRkdmkwOTEgZGl2aWRlaW50ICAuMCAgICAgICAgICAgIDEgICAgLT4gIDAKK2RkZHZpMDkyIGRpdmlkZWludCAgMC4wMCAgICAgICAgICAxICAgIC0+ICAwCitkZGR2aTA5MyBkaXZpZGVpbnQgIDAuMDBFKzkgICAgICAgMSAgICAtPiAgMAorZGRkdmkwOTQgZGl2aWRlaW50ICAwLjAwMDBFLTUwICAgIDEgICAgLT4gIDAKKworZGRkdmkxMDAgZGl2aWRlaW50ICAxICAxICAgLT4gMQorZGRkdmkxMDEgZGl2aWRlaW50ICAxICAyICAgLT4gMAorZGRkdmkxMDIgZGl2aWRlaW50ICAxICAzICAgLT4gMAorZGRkdmkxMDMgZGl2aWRlaW50ICAxICA0ICAgLT4gMAorZGRkdmkxMDQgZGl2aWRlaW50ICAxICA1ICAgLT4gMAorZGRkdmkxMDUgZGl2aWRlaW50ICAxICA2ICAgLT4gMAorZGRkdmkxMDYgZGl2aWRlaW50ICAxICA3ICAgLT4gMAorZGRkdmkxMDcgZGl2aWRlaW50ICAxICA4ICAgLT4gMAorZGRkdmkxMDggZGl2aWRlaW50ICAxICA5ICAgLT4gMAorZGRkdmkxMDkgZGl2aWRlaW50ICAxICAxMCAgLT4gMAorZGRkdmkxMTAgZGl2aWRlaW50ICAxICAxICAgLT4gMQorZGRkdmkxMTEgZGl2aWRlaW50ICAyICAxICAgLT4gMgorZGRkdmkxMTIgZGl2aWRlaW50ICAzICAxICAgLT4gMworZGRkdmkxMTMgZGl2aWRlaW50ICA0ICAxICAgLT4gNAorZGRkdmkxMTQgZGl2aWRlaW50ICA1ICAxICAgLT4gNQorZGRkdmkxMTUgZGl2aWRlaW50ICA2ICAxICAgLT4gNgorZGRkdmkxMTYgZGl2aWRlaW50ICA3ICAxICAgLT4gNworZGRkdmkxMTcgZGl2aWRlaW50ICA4ICAxICAgLT4gOAorZGRkdmkxMTggZGl2aWRlaW50ICA5ICAxICAgLT4gOQorZGRkdmkxMTkgZGl2aWRlaW50ICAxMCAxICAgLT4gMTAKKworLS0gZnJvbSBEaWFnQmlnRGVjaW1hbAorZGRkdmkxMzEgZGl2aWRlaW50ICAxMDEuMyAgIDEgICAgIC0+ICAxMDEKK2RkZHZpMTMyIGRpdmlkZWludCAgMTAxLjAgICAxICAgICAtPiAgMTAxCitkZGR2aTEzMyBkaXZpZGVpbnQgIDEwMS4zICAgMyAgICAgLT4gIDMzCitkZGR2aTEzNCBkaXZpZGVpbnQgIDEwMS4wICAgMyAgICAgLT4gIDMzCitkZGR2aTEzNSBkaXZpZGVpbnQgIDIuNCAgICAgMSAgICAgLT4gIDIKK2RkZHZpMTM2IGRpdmlkZWludCAgMi40MDAgICAxICAgICAtPiAgMgorZGRkdmkxMzcgZGl2aWRlaW50ICAxOCAgICAgIDE4ICAgIC0+ICAxCitkZGR2aTEzOCBkaXZpZGVpbnQgIDExMjAgICAgMTAwMCAgLT4gIDEKK2RkZHZpMTM5IGRpdmlkZWludCAgMi40ICAgICAyICAgICAtPiAgMQorZGRkdmkxNDAgZGl2aWRlaW50ICAyLjQwMCAgIDIgICAgIC0+ICAxCitkZGR2aTE0MSBkaXZpZGVpbnQgIDAuNSAgICAgMi4wMDAgLT4gIDAKK2RkZHZpMTQyIGRpdmlkZWludCAgOC4wMDUgICA3ICAgICAtPiAgMQorZGRkdmkxNDMgZGl2aWRlaW50ICA1ICAgICAgIDIgICAgIC0+ICAyCitkZGR2aTE0NCBkaXZpZGVpbnQgIDAgICAgICAgMiAgICAgLT4gIDAKK2RkZHZpMTQ1IGRpdmlkZWludCAgMC4wMCAgICAyICAgICAtPiAgMAorCistLSBPdGhlcnMKK2RkZHZpMTUwIGRpdmlkZWludCAgMTIzNDUgIDQuOTk5ICAtPiAgMjQ2OQorZGRkdmkxNTEgZGl2aWRlaW50ICAxMjM0NSAgNC45OSAgIC0+ICAyNDczCitkZGR2aTE1MiBkaXZpZGVpbnQgIDEyMzQ1ICA0LjkgICAgLT4gIDI1MTkKK2RkZHZpMTUzIGRpdmlkZWludCAgMTIzNDUgIDUgICAgICAtPiAgMjQ2OQorZGRkdmkxNTQgZGl2aWRlaW50ICAxMjM0NSAgNS4xICAgIC0+ICAyNDIwCitkZGR2aTE1NSBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAxICAgLT4gIDI0NjQKK2RkZHZpMTU2IGRpdmlkZWludCAgMTIzNDUgIDUuMDAxICAtPiAgMjQ2OAorZGRkdmkxNTcgZGl2aWRlaW50ICAgIDEwMSAgNy42ICAgIC0+ICAxMworCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIGRpdmlkZWludCBieSAwCitkZGR2aTIwMSBkaXZpZGVpbnQgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkdmkyMDIgZGl2aWRlaW50ICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZHZpMjAzIGRpdmlkZWludCAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGR2aTIwNCBkaXZpZGVpbnQgIDAuMDAwMSAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMDUgZGl2aWRlaW50ICAwLjAxICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjA2IGRpdmlkZWludCAgMC4xICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIwNyBkaXZpZGVpbnQgIDEgICAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMDggZGl2aWRlaW50ICAxICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjA5IGRpdmlkZWludCAxMCAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxMCBkaXZpZGVpbnQgMUUrMTAwICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMTEgZGl2aWRlaW50IDFFKzM4MCAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjE0IGRpdmlkZWludCAgLTAuMDAwMSAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjE1IGRpdmlkZWludCAgLTAuMDEgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjE2IGRpdmlkZWludCAgLTAuMSAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjE3IGRpdmlkZWludCAgLTEgICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjE4IGRpdmlkZWludCAgLTEgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjE5IGRpdmlkZWludCAtMTAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjIwIGRpdmlkZWludCAtMUUrMTAwICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjIxIGRpdmlkZWludCAtMUUrMzgwICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworLS0gdGVzdCBzb21lIGNhc2VzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cG9uZW50IG92ZXJmbG93CitkZGR2aTI3MCBkaXZpZGVpbnQgMSAxZTM4NCAgICAgICAgICAtPiAwCitkZGR2aTI3MSBkaXZpZGVpbnQgMSAwLjllMzg0ICAgICAgICAtPiAwCitkZGR2aTI3MiBkaXZpZGVpbnQgMSAwLjk5ZTM4NCAgICAgICAtPiAwCitkZGR2aTI3MyBkaXZpZGVpbnQgMSAwLjk5OTk5OTk5OTk5OTk5OTllMzg0ICAgICAgIC0+IDAKK2RkZHZpMjc0IGRpdmlkZWludCA5ZTM4NCAgICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTI3NSBkaXZpZGVpbnQgOS45ZTM4NCAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkyNzYgZGl2aWRlaW50IDkuOTllMzg0IDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMjc3IGRpdmlkZWludCA5Ljk5OTk5OTk5OTk5OTk5OWUzODQgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCitkZGR2aTI4MCBkaXZpZGVpbnQgMC4xIDllLTM4MyAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkyODEgZGl2aWRlaW50IDAuMSA5OWUtMzgzICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMjgyIGRpdmlkZWludCAwLjEgOTk5ZS0zODMgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTI4MyBkaXZpZGVpbnQgMC4xIDllLTM4MiAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkyODQgZGl2aWRlaW50IDAuMSA5OWUtMzgyICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gR0QgZWRnZSBjYXNlczogbGhzIHNtYWxsZXIgdGhhbiByaHMgYnV0IG1vcmUgZGlnaXRzCitkZGR2aTMwMSAgZGl2aWRlaW50ICAwLjkgICAgICAyICAgICAgLT4gIDAKK2RkZHZpMzAyICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMCAgICAtPiAgMAorZGRkdmkzMDMgIGRpdmlkZWludCAgMC45ICAgICAgMi4xICAgIC0+ICAwCitkZGR2aTMwNCAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAwICAgLT4gIDAKK2RkZHZpMzA1ICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMDEgICAtPiAgMAorZGRkdmkzMDYgIGRpdmlkZWludCAgMC4xMiAgICAgMSAgICAgIC0+ICAwCitkZGR2aTMwNyAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDAKK2RkZHZpMzA4ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMDAgICAtPiAgMAorZGRkdmkzMDkgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwCitkZGR2aTMxMCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDAKK2RkZHZpMzExICBkaXZpZGVpbnQgIDAuMTIgICAgIDIgICAgICAtPiAgMAorZGRkdmkzMTIgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wICAgIC0+ICAwCitkZGR2aTMxMyAgZGl2aWRlaW50ICAwLjEyICAgICAyLjEgICAgLT4gIDAKK2RkZHZpMzE0ICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMDAgICAtPiAgMAorZGRkdmkzMTUgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wMSAgIC0+ICAwCisKKy0tIGVkZ2UgY2FzZXMgb2YgaW1wb3NzaWJsZQorZGRkdmkzMzAgIGRpdmlkZWludCAgMTIzNDU2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0NQorZGRkdmkzMzEgIGRpdmlkZWludCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDEyMzQ1Njc4OTAxMjM0NTYKK2RkZHZpMzMyICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkzMzMgIGRpdmlkZWludCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMDEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorZGRkdmkxMDUxIGRpdmlkZWludCAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTEwNTIgZGl2aWRlaW50ICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMTA1MyBkaXZpZGVpbnQgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkxMDU0IGRpdmlkZWludCAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTEwNTUgZGl2aWRlaW50ICAxZS0yNzcgIDFlKzMxMSAtPiAgMAorZGRkdmkxMDU2IGRpdmlkZWludCAgMWUtMjc3IC0xZSszMTEgLT4gLTAKK2RkZHZpMTA1NyBkaXZpZGVpbnQgLTFlLTI3NyAgMWUrMzExIC0+IC0wCitkZGR2aTEwNTggZGl2aWRlaW50IC0xZS0yNzcgLTFlKzMxMSAtPiAgMAorCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykKK2RkZHZpMTA2MCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMSAtPiAwCitkZGR2aTEwNjEgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDIgLT4gMAorZGRkdmkxMDYyIGRpdmlkZWludCAxZS0yOTEgMWUrMTAzIC0+IDAKK2RkZHZpMTA2MyBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNCAtPiAwCitkZGR2aTEwNjQgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDUgLT4gMAorZGRkdmkxMDY1IGRpdmlkZWludCAxZS0yOTEgMWUrMTA2IC0+IDAKK2RkZHZpMTA2NiBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNyAtPiAwCitkZGR2aTEwNjcgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDggLT4gMAorZGRkdmkxMDY4IGRpdmlkZWludCAxZS0yOTEgMWUrMTA5IC0+IDAKK2RkZHZpMTA2OSBkaXZpZGVpbnQgMWUtMjkxIDFlKzExMCAtPiAwCisKK2RkZHZpMTEwMSBkaXZpZGVpbnQgIDEuMDAwMEUtMzk0ICAxICAgICAtPiAwCitkZGR2aTExMDIgZGl2aWRlaW50ICAxLjAwMEUtMzk0ICAgMWUrMSAgLT4gMAorZGRkdmkxMTAzIGRpdmlkZWludCAgMS4wMEUtMzk0ICAgIDFlKzIgIC0+IDAKKworZGRkdmkxMTE4IGRpdmlkZWludCAgMUUtMzk0ICAgICAgIDFlKzQgIC0+IDAKK2RkZHZpMTExOSBkaXZpZGVpbnQgIDNFLTM5NCAgICAgIC0xZSs1ICAtPiAtMAorZGRkdmkxMTIwIGRpdmlkZWludCAgNUUtMzk0ICAgICAgIDFlKzUgIC0+IDAKKworZGRkdmkxMTI0IGRpdmlkZWludCAgMUUtMzk0ICAgICAgLTFlKzQgIC0+IC0wCitkZGR2aTExMzAgZGl2aWRlaW50ICAzLjBFLTM5NCAgICAtMWUrNSAgLT4gLTAKKworZGRkdmkxMTMxIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzIwMCAtPiAwCitkZGR2aTExMzIgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMTk5IC0+IDAKK2RkZHZpMTEzMyBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTggLT4gMAorZGRkdmkxMTM0IGRpdmlkZWludCAgMi4wRS0xOTkgICAgIDJlKzE5OCAtPiAwCitkZGR2aTExMzUgZGl2aWRlaW50ICA0LjBFLTE5OSAgICAgNGUrMTk4IC0+IDAKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworZGRkdmk0MDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEwMCAtPiAxMjM0NTY3ODAKK2RkZHZpNDAyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwICAgLT4gMAorZGRkdmk0MDMgZGl2aWRlaW50IDEyMzQ1Njc4MDAgIDEwICAtPiAxMjM0NTY3ODAKK2RkZHZpNDA0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgICAgLT4gMAorZGRkdmk0MDUgZGl2aWRlaW50IDEyMzQ1Njc4OTAgIDEwICAtPiAxMjM0NTY3ODkKK2RkZHZpNDA2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgICAgLT4gMAorZGRkdmk0MDcgZGl2aWRlaW50IDEyMzQ1Njc4OTEgIDEwICAtPiAxMjM0NTY3ODkKK2RkZHZpNDA4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgICAgLT4gMAorZGRkdmk0MDkgZGl2aWRlaW50IDEyMzQ1Njc4OTAxIDEwMCAtPiAxMjM0NTY3ODkKK2RkZHZpNDEwIGRpdmlkZWludCAxIDEyMzQ1Njc4OTAxICAgLT4gMAorZGRkdmk0MTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEwICAtPiAxMjM0NTY3ODkKK2RkZHZpNDEyIGRpdmlkZWludCAxIDEyMzQ1Njc4OTYgICAgLT4gMAorZGRkdmk0MTMgZGl2aWRlaW50IDEyMzQ1Njc4OTQ4IDEwMCAtPiAxMjM0NTY3ODkKK2RkZHZpNDE0IGRpdmlkZWludCAxMjM0NTY3ODk0OSAxMDAgLT4gMTIzNDU2Nzg5CitkZGR2aTQxNSBkaXZpZGVpbnQgMTIzNDU2Nzg5NTAgMTAwIC0+IDEyMzQ1Njc4OQorZGRkdmk0MTYgZGl2aWRlaW50IDEyMzQ1Njc4OTUxIDEwMCAtPiAxMjM0NTY3ODkKK2RkZHZpNDE3IGRpdmlkZWludCAxMjM0NTY3ODk5OSAxMDAgLT4gMTIzNDU2Nzg5CitkZGR2aTQ0MSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMSAtPiAxMjM0NTY3ODAwMAorZGRkdmk0NDIgZGl2aWRlaW50IDEgMTIzNDU2NzgwMDAgLT4gMAorZGRkdmk0NDMgZGl2aWRlaW50IDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMAorZGRkdmk0NDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgLT4gMAorZGRkdmk0NDUgZGl2aWRlaW50IDEyMzQ1Njc4OTAgIDEgLT4gMTIzNDU2Nzg5MAorZGRkdmk0NDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgLT4gMAorZGRkdmk0NDcgZGl2aWRlaW50IDEyMzQ1Njc4OTEgIDEgLT4gMTIzNDU2Nzg5MQorZGRkdmk0NDggZGl2aWRlaW50IDEgMTIzNDU2Nzg5MSAgLT4gMAorZGRkdmk0NDkgZGl2aWRlaW50IDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDEKK2RkZHZpNDUwIGRpdmlkZWludCAxIDEyMzQ1Njc4OTAxIC0+IDAKK2RkZHZpNDUxIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxIC0+IDEyMzQ1Njc4OTYKK2RkZHZpNDUyIGRpdmlkZWludCAxIDEyMzQ1Njc4OTYgIC0+IDAKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorZGRkdmk1MzEgZGl2aWRlaW50IDUuMDAgMUUtMyAgICAtPiA1MDAwCitkZGR2aTUzMiBkaXZpZGVpbnQgMDAuMDAgMC4wMDAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZHZpNTMzIGRpdmlkZWludCAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkdmk1MzQgZGl2aWRlaW50ICAwICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGR2aTUzNSBkaXZpZGVpbnQgLTAgICAgIDAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZHZpNTM2IGRpdmlkZWludCAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorCitkZGR2aTU0MSBkaXZpZGVpbnQgIDAgICAgLTEgICAgIC0+IC0wCitkZGR2aTU0MiBkaXZpZGVpbnQgLTAgICAgLTEgICAgIC0+ICAwCitkZGR2aTU0MyBkaXZpZGVpbnQgIDAgICAgIDEgICAgIC0+ICAwCitkZGR2aTU0NCBkaXZpZGVpbnQgLTAgICAgIDEgICAgIC0+IC0wCitkZGR2aTU0NSBkaXZpZGVpbnQgLTEgICAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU0NiBkaXZpZGVpbnQgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU0NyBkaXZpZGVpbnQgIDEgICAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU0OCBkaXZpZGVpbnQgIDEgICAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZHZpNTUxIGRpdmlkZWludCAgMC4wICAtMSAgICAgLT4gLTAKK2RkZHZpNTUyIGRpdmlkZWludCAtMC4wICAtMSAgICAgLT4gIDAKK2RkZHZpNTUzIGRpdmlkZWludCAgMC4wICAgMSAgICAgLT4gIDAKK2RkZHZpNTU0IGRpdmlkZWludCAtMC4wICAgMSAgICAgLT4gLTAKK2RkZHZpNTU1IGRpdmlkZWludCAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTU2IGRpdmlkZWludCAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTU3IGRpdmlkZWludCAgMS4wICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTU4IGRpdmlkZWludCAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGRkdmk1NjEgZGl2aWRlaW50ICAwICAgIC0xLjAgICAtPiAtMAorZGRkdmk1NjIgZGl2aWRlaW50IC0wICAgIC0xLjAgICAtPiAgMAorZGRkdmk1NjMgZGl2aWRlaW50ICAwICAgICAxLjAgICAtPiAgMAorZGRkdmk1NjQgZGl2aWRlaW50IC0wICAgICAxLjAgICAtPiAtMAorZGRkdmk1NjUgZGl2aWRlaW50IC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NjYgZGl2aWRlaW50IC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NjcgZGl2aWRlaW50ICAxICAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NjggZGl2aWRlaW50ICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGR2aTU3MSBkaXZpZGVpbnQgIDAuMCAgLTEuMCAgIC0+IC0wCitkZGR2aTU3MiBkaXZpZGVpbnQgLTAuMCAgLTEuMCAgIC0+ICAwCitkZGR2aTU3MyBkaXZpZGVpbnQgIDAuMCAgIDEuMCAgIC0+ICAwCitkZGR2aTU3NCBkaXZpZGVpbnQgLTAuMCAgIDEuMCAgIC0+IC0wCitkZGR2aTU3NSBkaXZpZGVpbnQgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU3NiBkaXZpZGVpbnQgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU3NyBkaXZpZGVpbnQgIDEuMCAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU3OCBkaXZpZGVpbnQgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIFNwZWNpYWxzCitkZGR2aTU4MCBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNTgxIGRpdmlkZWludCAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkZGR2aTU4MiBkaXZpZGVpbnQgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRkdmk1ODMgZGl2aWRlaW50ICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RkZHZpNTg0IGRpdmlkZWludCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkZGR2aTU4NSBkaXZpZGVpbnQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRkdmk1ODYgZGl2aWRlaW50ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RkZHZpNTg3IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk1ODggZGl2aWRlaW50IC0xMDAwICBJbmYgICAtPiAtMAorZGRkdmk1ODkgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTU5MCBkaXZpZGVpbnQgLTEgICAgIEluZiAgIC0+IC0wCitkZGR2aTU5MSBkaXZpZGVpbnQgLTAgICAgIEluZiAgIC0+IC0wCitkZGR2aTU5MiBkaXZpZGVpbnQgIDAgICAgIEluZiAgIC0+ICAwCitkZGR2aTU5MyBkaXZpZGVpbnQgIDEgICAgIEluZiAgIC0+ICAwCitkZGR2aTU5NCBkaXZpZGVpbnQgIDEwMDAgIEluZiAgIC0+ICAwCitkZGR2aTU5NSBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRkdmk2MDAgZGl2aWRlaW50IC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTYwMSBkaXZpZGVpbnQgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGRkdmk2MDIgZGl2aWRlaW50IC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RkZHZpNjAzIGRpdmlkZWludCAtSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkZGR2aTYwNCBkaXZpZGVpbnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGRkdmk2MDUgZGl2aWRlaW50IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RkZHZpNjA2IGRpdmlkZWludCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZGR2aTYwNyBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjA4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTAKK2RkZHZpNjA5IGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2MTAgZGl2aWRlaW50IC0xICAgIC1JbmYgICAtPiAgMAorZGRkdmk2MTEgZGl2aWRlaW50IC0wICAgIC1JbmYgICAtPiAgMAorZGRkdmk2MTIgZGl2aWRlaW50ICAwICAgIC1JbmYgICAtPiAtMAorZGRkdmk2MTMgZGl2aWRlaW50ICAxICAgIC1JbmYgICAtPiAtMAorZGRkdmk2MTQgZGl2aWRlaW50ICAxMDAwIC1JbmYgICAtPiAtMAorZGRkdmk2MTUgZGl2aWRlaW50ICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkZHZpNjIxIGRpdmlkZWludCAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRkdmk2MjIgZGl2aWRlaW50ICBOYU4gLTEwMDAgICAtPiAgTmFOCitkZGR2aTYyMyBkaXZpZGVpbnQgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RkZHZpNjI0IGRpdmlkZWludCAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRkdmk2MjUgZGl2aWRlaW50ICBOYU4gIDAgICAgICAtPiAgTmFOCitkZGR2aTYyNiBkaXZpZGVpbnQgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RkZHZpNjI3IGRpdmlkZWludCAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRkdmk2MjggZGl2aWRlaW50ICBOYU4gIEluZiAgICAtPiAgTmFOCitkZGR2aTYyOSBkaXZpZGVpbnQgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjMwIGRpdmlkZWludCAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRkdmk2MzEgZGl2aWRlaW50IC0xMDAwIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzMiBkaXZpZGVpbnQgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjMzIGRpdmlkZWludCAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRkdmk2MzQgZGl2aWRlaW50ICAwICAgIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzNSBkaXZpZGVpbnQgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjM2IGRpdmlkZWludCAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRkdmk2MzcgZGl2aWRlaW50ICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RkZHZpNjQxIGRpdmlkZWludCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjQyIGRpdmlkZWludCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjQzIGRpdmlkZWludCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjQ0IGRpdmlkZWludCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjQ1IGRpdmlkZWludCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjQ2IGRpdmlkZWludCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjQ3IGRpdmlkZWludCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjQ4IGRpdmlkZWludCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjQ5IGRpdmlkZWludCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjUwIGRpdmlkZWludCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjUxIGRpdmlkZWludCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjUyIGRpdmlkZWludCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjUzIGRpdmlkZWludCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjU0IGRpdmlkZWludCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjU1IGRpdmlkZWludCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjU2IGRpdmlkZWludCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjU3IGRpdmlkZWludCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjU4IGRpdmlkZWludCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjU5IGRpdmlkZWludCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRkdmk2NjEgZGl2aWRlaW50ICBOYU45IC1JbmYgICAtPiAgTmFOOQorZGRkdmk2NjIgZGl2aWRlaW50ICBOYU44ICAxMDAwICAtPiAgTmFOOAorZGRkdmk2NjMgZGl2aWRlaW50ICBOYU43ICBJbmYgICAtPiAgTmFONworZGRkdmk2NjQgZGl2aWRlaW50IC1OYU42ICBOYU41ICAtPiAtTmFONgorZGRkdmk2NjUgZGl2aWRlaW50IC1JbmYgICBOYU40ICAtPiAgTmFONAorZGRkdmk2NjYgZGl2aWRlaW50IC0xMDAwICBOYU4zICAtPiAgTmFOMworZGRkdmk2NjcgZGl2aWRlaW50ICBJbmYgIC1OYU4yICAtPiAtTmFOMgorCitkZGR2aTY3MSBkaXZpZGVpbnQgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NzIgZGl2aWRlaW50ICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjczIGRpdmlkZWludCAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3NCBkaXZpZGVpbnQgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NzUgZGl2aWRlaW50ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjc2IGRpdmlkZWludCAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3NyBkaXZpZGVpbnQgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NzggZGl2aWRlaW50ICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjc5IGRpdmlkZWludCAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK2RkZHZpOTAwIGRpdmlkZWludCAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTkwMSBkaXZpZGVpbnQgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRW5jb2RlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRFbmNvZGUuZGVjVGVzdAppbmRleCBlOTFlYzYxLi5kZTlkMzFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRFbmNvZGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRFbmNvZGUuZGVjVGVzdApAQCAtMSw0OTUgKzEsNDk1IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZEVuY29kZS5kZWNUZXN0IC0tIGRlY2ltYWwgZWlnaHQtYnl0ZSBmb3JtYXQgdGVzdGNhc2VzICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBbUHJldmlvdXNseSBjYWxsZWQgZGVjaW1hbDY0LmRlY1Rlc3RdDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciB0aGUgZWlnaHQtYnl0ZSBjb25jcmV0ZSByZXByZXNlbnRhdGlvbi4NCi0tLSBJdHMgY2hhcmFjdGVyaXN0aWNzIGFyZToNCi0tLQ0KLS0tICAxIGJpdCAgc2lnbg0KLS0tICA1IGJpdHMgY29tYmluYXRpb24gZmllbGQNCi0tLSAgOCBiaXRzIGV4cG9uZW50IGNvbnRpbnVhdGlvbg0KLS0tIDUwIGJpdHMgY29lZmZpY2llbnQgY29udGludWF0aW9uDQotLS0NCi0tLSBUb3RhbCBleHBvbmVudCBsZW5ndGggMTAgYml0cw0KLS0tIFRvdGFsIGNvZWZmaWNpZW50IGxlbmd0aCA1NCBiaXRzICgxNiBkaWdpdHMpDQotLS0NCi0tLSBFbGltaXQgPSAgNzY3IChtYXhpbXVtIGVuY29kZWQgZXhwb25lbnQpDQotLS0gRW1heCAgID0gIDM4NCAobGFyZ2VzdCBleHBvbmVudCB2YWx1ZSkNCi0tLSBFbWluICAgPSAtMzgzIChzbWFsbGVzdCBleHBvbmVudCB2YWx1ZSkNCi0tLSBiaWFzICAgPSAgMzk4IChzdWJ0cmFjdGVkIGZyb20gZW5jb2RlZCBleHBvbmVudCkgPSAtRXRpbnkNCi0NCi0tLSBUaGUgdGVzdGNhc2VzIGhlcmUgaGF2ZSBvbmx5IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBkYXRhIG9uIHRoZQ0KLS0tICdsZWZ0LWhhbmQtc2lkZSc7IHJvdW5kaW5nIGZyb20gc3RyaW5ncyBpcyB0ZXN0ZWQgaW4gJ2Jhc2UnDQotLS0gdGVzdGNhc2UgZ3JvdXBzLg0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMTYNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLQ0KLS0tIEdlbmVyYWwgdGVzdGNhc2VzDQotLS0gKG1vc3RseSBkZXJpdmVkIGZyb20gdGhlIFN0cmF3bWFuIDQgZG9jdW1lbnQgYW5kIGV4YW1wbGVzKQ0KLWRlY2UwMDEgYXBwbHkgICAjQTIzMDAwMDAwMDAwMDNEMCAtPiAtNy41MA0KLWRlY2UwMDIgYXBwbHkgICAtNy41MCAgICAgICAgICAgICAtPiAjQTIzMDAwMDAwMDAwMDNEMA0KLS0tIGRlcml2YXRpdmUgY2Fub25pY2FsIHBsYWluIHN0cmluZ3MNCi1kZWNlMDAzIGFwcGx5ICAgI0EyM2MwMDAwMDAwMDAzRDAgLT4gLTcuNTBFKzMNCi1kZWNlMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyM2MwMDAwMDAwMDAzRDANCi1kZWNlMDA1IGFwcGx5ICAgI0EyMzgwMDAwMDAwMDAzRDAgLT4gLTc1MA0KLWRlY2UwMDYgYXBwbHkgICAtNzUwICAgICAgICAgICAgICAtPiAjQTIzODAwMDAwMDAwMDNEMA0KLWRlY2UwMDcgYXBwbHkgICAjQTIzNDAwMDAwMDAwMDNEMCAtPiAtNzUuMA0KLWRlY2UwMDggYXBwbHkgICAtNzUuMCAgICAgICAgICAgICAtPiAjQTIzNDAwMDAwMDAwMDNEMA0KLWRlY2UwMDkgYXBwbHkgICAjQTIyYzAwMDAwMDAwMDNEMCAtPiAtMC43NTANCi1kZWNlMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMmMwMDAwMDAwMDAzRDANCi1kZWNlMDExIGFwcGx5ICAgI0EyMjgwMDAwMDAwMDAzRDAgLT4gLTAuMDc1MA0KLWRlY2UwMTIgYXBwbHkgICAtMC4wNzUwICAgICAgICAgICAtPiAjQTIyODAwMDAwMDAwMDNEMA0KLWRlY2UwMTMgYXBwbHkgICAjQTIyMDAwMDAwMDAwMDNEMCAtPiAtMC4wMDA3NTANCi1kZWNlMDE0IGFwcGx5ICAgLTAuMDAwNzUwICAgICAgICAgLT4gI0EyMjAwMDAwMDAwMDAzRDANCi1kZWNlMDE1IGFwcGx5ICAgI0EyMTgwMDAwMDAwMDAzRDAgLT4gLTAuMDAwMDA3NTANCi1kZWNlMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0EyMTgwMDAwMDAwMDAzRDANCi1kZWNlMDE3IGFwcGx5ICAgI0EyMTQwMDAwMDAwMDAzRDAgLT4gLTcuNTBFLTcNCi1kZWNlMDE4IGFwcGx5ICAgLTcuNTBFLTcgICAgICAgICAgLT4gI0EyMTQwMDAwMDAwMDAzRDANCi0NCi0tLSBOb3JtYWxpdHkNCi1kZWNlMDIwIGFwcGx5ICAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0+ICMyNjM5MzRiOWMxZTI4ZTU2DQotZGVjZTAyMSBhcHBseSAgLTEyMzQ1Njc4OTAxMjM0NTYgICAtPiAjYTYzOTM0YjljMWUyOGU1Ng0KLWRlY2UwMjIgYXBwbHkgICAxMjM0LjU2Nzg5MDEyMzQ1NiAgLT4gIzI2MDkzNGI5YzFlMjhlNTYNCi1kZWNlMDIzIGFwcGx5ICAjMjYwOTM0YjljMWUyOGU1NiAgIC0+IDEyMzQuNTY3ODkwMTIzNDU2DQotZGVjZTAyNCBhcHBseSAgIDExMTExMTExMTExMTExMTEgICAtPiAjMjYzODkxMjQ0OTEyNDQ5MQ0KLWRlY2UwMjUgYXBwbHkgICA5OTk5OTk5OTk5OTk5OTk5ICAgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYNCi0NCi0tLSBObWF4IGFuZCBzaW1pbGFyDQotZGVjZTAzMSBhcHBseSAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGVjZTAzMiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGVjZTAzMyBhcHBseSAgICM3N2ZjZmYzZmNmZjNmY2ZmICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZWNlMDM0IGFwcGx5ICAgMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NCAgLT4gIzQ3ZmQzNGI5YzFlMjhlNTYNCi1kZWNlMDM1IGFwcGx5ICAgIzQ3ZmQzNGI5YzFlMjhlNTYgICAgICAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NA0KLS0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpDQotZGVjZTAzNiBhcHBseSAgIDEuMjNFKzM4NCAgICAgICAgICAgICAgIC0+ICM0N2ZkMzAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNlMDM3IGFwcGx5ICAgIzQ3ZmQzMDAwMDAwMDAwMDAgICAgICAgLT4gMS4yMzAwMDAwMDAwMDAwMDBFKzM4NA0KLWRlY2QwMzggYXBwbHkgICAxRSszODQgICAgICAgICAgICAgICAgICAtPiAjNDdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjZDAzOSBhcHBseSAgICM0N2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQNCi0NCi1kZWNkMDUxIGFwcGx5ICAgMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDQ5YzUNCi1kZWNkMDUyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDQ5YzUgICAgICAgLT4gMTIzNDUNCi1kZWNkMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDA1MzQNCi1kZWNkMDU0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDA1MzQgICAgICAgLT4gMTIzNA0KLWRlY2QwNTUgYXBwbHkgICAxMjMgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDBhMw0KLWRlY2QwNTYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBhMyAgICAgICAtPiAxMjMNCi1kZWNkMDU3IGFwcGx5ICAgMTIgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMTINCi1kZWNkMDU4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMTIgICAgICAgLT4gMTINCi1kZWNkMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMDENCi1kZWNkMDYwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMDEgICAgICAgLT4gMQ0KLWRlY2QwNjEgYXBwbHkgICAxLjIzICAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDBhMw0KLWRlY2QwNjIgYXBwbHkgICAjMjIzMDAwMDAwMDAwMDBhMyAgICAgICAtPiAxLjIzDQotZGVjZDA2MyBhcHBseSAgIDEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDA0OWM1DQotZGVjZDA2NCBhcHBseSAgICMyMjMwMDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMy40NQ0KLQ0KLS0tIE5taW4gYW5kIGJlbG93DQotZGVjZDA3MSBhcHBseSAgIDFFLTM4MyAgICAgICAgICAgICAgICAgIC0+ICMwMDNjMDAwMDAwMDAwMDAxDQotZGVjZDA3MiBhcHBseSAgICMwMDNjMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFLTM4Mw0KLWRlY2QwNzMgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjMDQwMDAwMDAwMDAwMDAwMA0KLWRlY2QwNzQgYXBwbHkgICAjMDQwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGVjZDA3NSBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICMwNDAwMDAwMDAwMDAwMDAxDQotZGVjZDA3NiBhcHBseSAgICMwNDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi0NCi1kZWNkMDc3IGFwcGx5ICAgMC4xMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzAwMDA4MDAwMDAwMDAwMDAgICAgICBTdWJub3JtYWwNCi1kZWNkMDc4IGFwcGx5ICAgIzAwMDA4MDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0ICBTdWJub3JtYWwNCi1kZWNkMDc5IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMTBFLTM4MyAgLT4gIzAwMDAwMDAwMDAwMDAwMTAgICAgICBTdWJub3JtYWwNCi1kZWNkMDgwIGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMTAgICAgICAgLT4gMS4wRS0zOTcgICAgICAgICAgICAgICBTdWJub3JtYWwNCi1kZWNkMDgxIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMUUtMzgzICAgLT4gIzAwMDQwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwNCi1kZWNkMDgyIGFwcGx5ICAgIzAwMDQwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUtMzk3ICAgICAgICAgICAgICAgICBTdWJub3JtYWwNCi1kZWNkMDgzIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDFFLTM4MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwNCi1kZWNkMDg0IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUtMzk4ICAgICAgICAgICAgICAgICBTdWJub3JtYWwNCi0tLSBuZXh0IGlzIHNtYWxsZXN0IGFsbC1uaW5lcw0KLWRlY2QwODUgYXBwbHkgICA5OTk5OTk5OTk5OTk5OTk5RS0zOTggICAtPiAjNjQwMGZmM2ZjZmYzZmNmZg0KLWRlY2QwODYgYXBwbHkgICAjNjQwMGZmM2ZjZmYzZmNmZiAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzDQotLS0gYW5kIGEgcHJvYmxlbWF0aWMgZGl2aWRlIHJlc3VsdA0KLWRlY2QwODggYXBwbHkgICAxLjExMTExMTExMTExMTExMUUtMzgzICAtPiAjMDQwMDkxMjQ0OTEyNDQ5MQ0KLWRlY2QwODkgYXBwbHkgICAjMDQwMDkxMjQ0OTEyNDQ5MSAgICAgICAtPiAxLjExMTExMTExMTExMTExMUUtMzgzDQotDQotLS0gZm9ydGllcw0KLWRlY2QwOTAgYXBwbHkgICAgICAgIDQwICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDQwDQotZGVjZDA5MSBhcHBseSAgICAgICAgMzkuOTkgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDBjZmYNCi0NCi0tLSB1bmRlcmZsb3dzIGNhbm5vdCBiZSB0ZXN0ZWQgYXMgYWxsIExIUyBleGFjdA0KLQ0KLS0tIFNhbWUgYWdhaW4sIG5lZ2F0aXZlcw0KLS0tIE5tYXggYW5kIHNpbWlsYXINCi1kZWNkMTIyIGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYNCi1kZWNkMTIzIGFwcGx5ICAgI2Y3ZmNmZjNmY2ZmM2ZjZmYgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZWNkMTI0IGFwcGx5ICAtMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NCAgLT4gI2M3ZmQzNGI5YzFlMjhlNTYNCi1kZWNkMTI1IGFwcGx5ICAgI2M3ZmQzNGI5YzFlMjhlNTYgICAgICAgLT4gLTEuMjM0NTY3ODkwMTIzNDU2RSszODQNCi0tLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQ0KLWRlY2QxMzAgYXBwbHkgIC0xLjIzRSszODQgICAgICAgICAgICAgICAtPiAjYzdmZDMwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjZDEzMSBhcHBseSAgICNjN2ZkMzAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjIzMDAwMDAwMDAwMDAwMEUrMzg0DQotZGVjZDEzMiBhcHBseSAgLTFFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICNjN2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNkMTMzIGFwcGx5ICAgI2M3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRSszODQNCi0NCi0tLSBvdmVyZmxvd3MNCi1kZWNkMTUxIGFwcGx5ICAtMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDQ5YzUNCi1kZWNkMTUyIGFwcGx5ICAgI2EyMzgwMDAwMDAwMDQ5YzUgICAgICAgLT4gLTEyMzQ1DQotZGVjZDE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwNTM0DQotZGVjZDE1NCBhcHBseSAgICNhMjM4MDAwMDAwMDAwNTM0ICAgICAgIC0+IC0xMjM0DQotZGVjZDE1NSBhcHBseSAgLTEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMGEzDQotZGVjZDE1NiBhcHBseSAgICNhMjM4MDAwMDAwMDAwMGEzICAgICAgIC0+IC0xMjMNCi1kZWNkMTU3IGFwcGx5ICAtMTIgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDAwMTINCi1kZWNkMTU4IGFwcGx5ICAgI2EyMzgwMDAwMDAwMDAwMTIgICAgICAgLT4gLTEyDQotZGVjZDE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDAxDQotZGVjZDE2MCBhcHBseSAgICNhMjM4MDAwMDAwMDAwMDAxICAgICAgIC0+IC0xDQotZGVjZDE2MSBhcHBseSAgLTEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMDAwMDAwMGEzDQotZGVjZDE2MiBhcHBseSAgICNhMjMwMDAwMDAwMDAwMGEzICAgICAgIC0+IC0xLjIzDQotZGVjZDE2MyBhcHBseSAgLTEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMDAwMDA0OWM1DQotZGVjZDE2NCBhcHBseSAgICNhMjMwMDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjMuNDUNCi0NCi0tLSBObWluIGFuZCBiZWxvdw0KLWRlY2QxNzEgYXBwbHkgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAjODAzYzAwMDAwMDAwMDAwMQ0KLWRlY2QxNzIgYXBwbHkgICAjODAzYzAwMDAwMDAwMDAwMSAgICAgICAtPiAtMUUtMzgzDQotZGVjZDE3MyBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICM4NDAwMDAwMDAwMDAwMDAwDQotZGVjZDE3NCBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGVjZDE3NSBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICM4NDAwMDAwMDAwMDAwMDAxDQotZGVjZDE3NiBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotDQotZGVjZDE3NyBhcHBseSAgLTAuMTAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICM4MDAwODAwMDAwMDAwMDAwICAgICAgIFN1Ym5vcm1hbA0KLWRlY2QxNzggYXBwbHkgICAjODAwMDgwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0ICBTdWJub3JtYWwNCi1kZWNkMTc5IGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMTBFLTM4MyAgLT4gIzgwMDAwMDAwMDAwMDAwMTAgICAgICAgU3Vibm9ybWFsDQotZGVjZDE4MCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IC0xLjBFLTM5NyAgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KLWRlY2QxODEgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAxRS0zODMgICAtPiAjODAwNDAwMDAwMDAwMDAwMSAgICAgICBTdWJub3JtYWwNCi1kZWNkMTgyIGFwcGx5ICAgIzgwMDQwMDAwMDAwMDAwMDEgICAgICAgLT4gLTFFLTM5NyAgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQotZGVjZDE4MyBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICAgICAgIFN1Ym5vcm1hbA0KLWRlY2QxODQgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBTdWJub3JtYWwNCi0tLSBuZXh0IGlzIHNtYWxsZXN0IGFsbC1uaW5lcw0KLWRlY2QxODUgYXBwbHkgICAtOTk5OTk5OTk5OTk5OTk5OUUtMzk4ICAgLT4gI2U0MDBmZjNmY2ZmM2ZjZmYNCi1kZWNkMTg2IGFwcGx5ICAgI2U0MDBmZjNmY2ZmM2ZjZmYgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS0zODMNCi0tLSBhbmQgYSB0cmlja3kgc3Vibm9ybWFsDQotZGVjZDE4NyBhcHBseSAgIDEuMTExMTExMTExMTE1MjRFLTM4NCAgICAtPiAjMDAwMDkxMjQ0OTEyNDZhNCAgICAgIFN1Ym5vcm1hbA0KLWRlY2QxODggYXBwbHkgICAjMDAwMDkxMjQ0OTEyNDZhNCAgICAgICAgLT4gMS4xMTExMTExMTExMTUyNEUtMzg0ICBTdWJub3JtYWwNCi0NCi0tLSBuZWFyLXVuZGVyZmxvd3MNCi1kZWNkMTg5IGFwcGx5ICAgLTFlLTM5OCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbA0KLWRlY2QxOTAgYXBwbHkgICAtMS4wZS0zOTggICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsIFJvdW5kZWQNCi0NCi0tLSB6ZXJvcw0KLWRlY2Q0MDEgYXBwbHkgICAwRS01MDAgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY2Q0MDIgYXBwbHkgICAwRS00MDAgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY2Q0MDMgYXBwbHkgICAwRS0zOTggICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMA0KLWRlY2Q0MDQgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS0zOTgNCi1kZWNkNDA1IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDANCi1kZWNkNDA2IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUtMzk4DQotZGVjZDQwNyBhcHBseSAgIDBFLTIgICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwMDAwDQotZGVjZDQwOCBhcHBseSAgICMyMjMwMDAwMDAwMDAwMDAwICAgICAgIC0+IDAuMDANCi1kZWNkNDA5IGFwcGx5ICAgMCAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMDANCi1kZWNkNDEwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMDAgICAgICAgLT4gMA0KLWRlY2Q0MTEgYXBwbHkgICAwRSszICAgICAgICAgICAgICAgICAgICAtPiAjMjI0NDAwMDAwMDAwMDAwMA0KLWRlY2Q0MTIgYXBwbHkgICAjMjI0NDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszDQotZGVjZDQxMyBhcHBseSAgIDBFKzM2OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwDQotZGVjZDQxNCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQ0KLS0tIGNsYW1wZWQgemVyb3MuLi4NCi1kZWNkNDE1IGFwcGx5ICAgMEUrMzcwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNkNDE2IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5DQotZGVjZDQxNyBhcHBseSAgIDBFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjZDQxOCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQ0KLWRlY2Q0MTkgYXBwbHkgICAwRSs0MDAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY2Q0MjAgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkNCi1kZWNkNDIxIGFwcGx5ICAgMEUrNTAwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNkNDIyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5DQotDQotLS0gbmVnYXRpdmUgemVyb3MNCi1kZWNkNDMxIGFwcGx5ICAgLTBFLTQwMCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNkNDMyIGFwcGx5ICAgLTBFLTQwMCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNkNDMzIGFwcGx5ICAgLTBFLTM5OCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDANCi1kZWNkNDM0IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTM5OA0KLWRlY2Q0MzUgYXBwbHkgICAtMC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtPiAjODAwMDAwMDAwMDAwMDAwMA0KLWRlY2Q0MzYgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUtMzk4DQotZGVjZDQzNyBhcHBseSAgIC0wRS0yICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMDAwMDAwMDAwDQotZGVjZDQzOCBhcHBseSAgICNhMjMwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wLjAwDQotZGVjZDQzOSBhcHBseSAgIC0wICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDAwDQotZGVjZDQ0MCBhcHBseSAgICNhMjM4MDAwMDAwMDAwMDAwICAgICAgIC0+IC0wDQotZGVjZDQ0MSBhcHBseSAgIC0wRSszICAgICAgICAgICAgICAgICAgIC0+ICNhMjQ0MDAwMDAwMDAwMDAwDQotZGVjZDQ0MiBhcHBseSAgICNhMjQ0MDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszDQotZGVjZDQ0MyBhcHBseSAgIC0wRSszNjkgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwDQotZGVjZDQ0NCBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkNCi0tLSBjbGFtcGVkIHplcm9zLi4uDQotZGVjZDQ0NSBhcHBseSAgIC0wRSszNzAgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjZDQ0NiBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkNCi1kZWNkNDQ3IGFwcGx5ICAgLTBFKzM4NCAgICAgICAgICAgICAgICAgLT4gI2MzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNkNDQ4IGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQ0KLWRlY2Q0NDkgYXBwbHkgICAtMEUrNDAwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY2Q0NTAgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5DQotZGVjZDQ1MSBhcHBseSAgIC0wRSs1MDAgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjZDQ1MiBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkNCi0NCi0tLSBleHBvbmVudHMNCi1kZWNkNDYwIGFwcGx5ICAgIzIyNWMwMDAwMDAwMDAwMDcgLT4gN0UrOQ0KLWRlY2Q0NjEgYXBwbHkgICA3RSs5ICAtPiAjMjI1YzAwMDAwMDAwMDAwNw0KLWRlY2Q0NjIgYXBwbHkgICAjMjNjNDAwMDAwMDAwMDAwNyAtPiA3RSs5OQ0KLWRlY2Q0NjMgYXBwbHkgICA3RSs5OSAtPiAjMjNjNDAwMDAwMDAwMDAwNw0KLQ0KLS0tIFNwZWNpYWxzDQotZGVjZDUwMCBhcHBseSAgIEluZmluaXR5ICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGVjZDUwMSBhcHBseSAgICM3ODc4Nzg3ODc4Nzg3ODc4IC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGVjZDUwMiBhcHBseSAgICM3ODAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5DQotZGVjZDUwMyBhcHBseSAgICM3OTc5Nzk3OTc5Nzk3OTc5IC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGVjZDUwNCBhcHBseSAgICM3OTAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5DQotZGVjZDUwNSBhcHBseSAgICM3YTdhN2E3YTdhN2E3YTdhIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGVjZDUwNiBhcHBseSAgICM3YTAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5DQotZGVjZDUwNyBhcHBseSAgICM3YjdiN2I3YjdiN2I3YjdiIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGVjZDUwOCBhcHBseSAgICM3YjAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5DQotDQotZGVjZDUwOSBhcHBseSAgIE5hTiAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwDQotZGVjZDUxMCBhcHBseSAgICM3YzdjN2M3YzdjN2M3YzdjIC0+ICM3YzAwN2M3YzdjN2M3YzdjDQotZGVjZDUxMSBhcHBseSAgICM3YzAwMDAwMDAwMDAwMDAwIC0+IE5hTg0KLWRlY2Q1MTIgYXBwbHkgICAjN2Q3ZDdkN2Q3ZDdkN2Q3ZCAtPiAjN2MwMTdkN2Q3ZDdkN2Q3ZA0KLWRlY2Q1MTMgYXBwbHkgICAjN2QwMDAwMDAwMDAwMDAwMCAtPiBOYU4NCi1kZWNkNTE0IGFwcGx5ICAgIzdlN2U3ZTdlN2U3ZTdlN2UgLT4gIzdlMDA3ZTdlN2U3ZTdjN2UNCi1kZWNkNTE1IGFwcGx5ICAgIzdlMDAwMDAwMDAwMDAwMDAgLT4gc05hTg0KLWRlY2Q1MTYgYXBwbHkgICAjN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjN2UwMDdmN2Y3ZjdmN2M3Zg0KLWRlY2Q1MTcgYXBwbHkgICAjN2YwMDAwMDAwMDAwMDAwMCAtPiBzTmFODQotZGVjZDUxOCBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmIC0+IHNOYU45OTk5OTk5OTk5OTk5OTkNCi1kZWNkNTE5IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmYgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi0NCi1kZWNkNTIwIGFwcGx5ICAgLUluZmluaXR5ICAgICAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDANCi1kZWNkNTIxIGFwcGx5ICAgI2Y4Nzg3ODc4Nzg3ODc4NzggLT4gI2Y4MDAwMDAwMDAwMDAwMDANCi1kZWNkNTIyIGFwcGx5ICAgI2Y4MDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5DQotZGVjZDUyMyBhcHBseSAgICNmOTc5Nzk3OTc5Nzk3OTc5IC0+ICNmODAwMDAwMDAwMDAwMDAwDQotZGVjZDUyNCBhcHBseSAgICNmOTAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQ0KLWRlY2Q1MjUgYXBwbHkgICAjZmE3YTdhN2E3YTdhN2E3YSAtPiAjZjgwMDAwMDAwMDAwMDAwMA0KLWRlY2Q1MjYgYXBwbHkgICAjZmEwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkNCi1kZWNkNTI3IGFwcGx5ICAgI2ZiN2I3YjdiN2I3YjdiN2IgLT4gI2Y4MDAwMDAwMDAwMDAwMDANCi1kZWNkNTI4IGFwcGx5ICAgI2ZiMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5DQotDQotZGVjZDUyOSBhcHBseSAgIC1OYU4gICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwDQotZGVjZDUzMCBhcHBseSAgICNmYzdjN2M3YzdjN2M3YzdjIC0+ICNmYzAwN2M3YzdjN2M3YzdjDQotZGVjZDUzMSBhcHBseSAgICNmYzAwMDAwMDAwMDAwMDAwIC0+IC1OYU4NCi1kZWNkNTMyIGFwcGx5ICAgI2ZkN2Q3ZDdkN2Q3ZDdkN2QgLT4gI2ZjMDE3ZDdkN2Q3ZDdkN2QNCi1kZWNkNTMzIGFwcGx5ICAgI2ZkMDAwMDAwMDAwMDAwMDAgLT4gLU5hTg0KLWRlY2Q1MzQgYXBwbHkgICAjZmU3ZTdlN2U3ZTdlN2U3ZSAtPiAjZmUwMDdlN2U3ZTdlN2M3ZQ0KLWRlY2Q1MzUgYXBwbHkgICAjZmUwMDAwMDAwMDAwMDAwMCAtPiAtc05hTg0KLWRlY2Q1MzYgYXBwbHkgICAjZmY3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjZmUwMDdmN2Y3ZjdmN2M3Zg0KLWRlY2Q1MzcgYXBwbHkgICAjZmYwMDAwMDAwMDAwMDAwMCAtPiAtc05hTg0KLWRlY2Q1MzggYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZiAtPiAtc05hTjk5OTk5OTk5OTk5OTk5OQ0KLWRlY2Q1MzkgYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZiAtPiAjZmUwMGZmM2ZjZmYzZmNmZg0KLQ0KLS0tIGRpYWdub3N0aWMgTmFOcw0KLWRlY2Q1NDAgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwDQotZGVjZDU0MSBhcHBseSAgIE5hTjAgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDANCi1kZWNkNTQyIGFwcGx5ICAgTmFOMSAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMQ0KLWRlY2Q1NDMgYXBwbHkgICBOYU4xMiAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDEyDQotZGVjZDU0NCBhcHBseSAgIE5hTjc5ICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwNzkNCi1kZWNkNTQ1IGFwcGx5ICAgTmFOMTIzNDUgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwNDljNQ0KLWRlY2Q1NDYgYXBwbHkgICBOYU4xMjM0NTYgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDI4ZTU2DQotZGVjZDU0NyBhcHBseSAgIE5hTjc5OTc5OSAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwZjdmZGYNCi1kZWNkNTQ4IGFwcGx5ICAgTmFONzk5Nzk5Nzk5Nzk5Nzk5ICAtPiAjN2MwM2RmZjdmZGZmN2ZkZg0KLWRlY2Q1NDkgYXBwbHkgICBOYU45OTk5OTk5OTk5OTk5OTkgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotLS0gdG9vIG1hbnkgZGlnaXRzDQotDQotLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UNCi1kZWNkNjAxIGFwcGx5ICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gIzQ3ZmMwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2MDIgYXBwbHkgICAjNDdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0DQotZGVjZDYwMyBhcHBseSAgIDFFKzM4MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjODAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjA0IGFwcGx5ICAgIzQzZmM4MDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzDQotZGVjZDYwNSBhcHBseSAgIDFFKzM4MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMTAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjA2IGFwcGx5ICAgIzQzZmMxMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwRSszODINCi1kZWNkNjA3IGFwcGx5ICAgMUUrMzgxICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMTAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2MDggYXBwbHkgICAjNDNmYzAxMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxDQotZGVjZDYwOSBhcHBseSAgIDFFKzM4MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAyMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjEwIGFwcGx5ICAgIzQzZmMwMDIwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMEUrMzgwDQotZGVjZDYxMSBhcHBseSAgIDFFKzM3OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwNDAwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjEyIGFwcGx5ICAgIzQzZmMwMDA0MDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwRSszNzkNCi1kZWNkNjEzIGFwcGx5ICAgMUUrMzc4ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwNDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2MTQgYXBwbHkgICAjNDNmYzAwMDA0MDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMEUrMzc4DQotZGVjZDYxNSBhcHBseSAgIDFFKzM3NyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDA4MDAwMDAwIENsYW1wZWQNCi1kZWNkNjE2IGFwcGx5ICAgIzQzZmMwMDAwMDgwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMEUrMzc3DQotZGVjZDYxNyBhcHBseSAgIDFFKzM3NiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAxMDAwMDAwIENsYW1wZWQNCi1kZWNkNjE4IGFwcGx5ICAgIzQzZmMwMDAwMDEwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwRSszNzYNCi1kZWNkNjE5IGFwcGx5ICAgMUUrMzc1ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAxMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2MjAgYXBwbHkgICAjNDNmYzAwMDAwMDEwMDAwMCAgICAgICAtPiAxLjAwMDAwMEUrMzc1DQotZGVjZDYyMSBhcHBseSAgIDFFKzM3NCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDIwMDAwIENsYW1wZWQNCi1kZWNkNjIyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMjAwMDAgICAgICAgLT4gMS4wMDAwMEUrMzc0DQotZGVjZDYyMyBhcHBseSAgIDFFKzM3MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDA0MDAwIENsYW1wZWQNCi1kZWNkNjI0IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDQwMDAgICAgICAgLT4gMS4wMDAwRSszNzMNCi1kZWNkNjI1IGFwcGx5ICAgMUUrMzcyICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDA0MDAgQ2xhbXBlZA0KLWRlY2Q2MjYgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDQwMCAgICAgICAtPiAxLjAwMEUrMzcyDQotZGVjZDYyNyBhcHBseSAgIDFFKzM3MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDgwIENsYW1wZWQNCi1kZWNkNjI4IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwODAgICAgICAgLT4gMS4wMEUrMzcxDQotZGVjZDYyOSBhcHBseSAgIDFFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDEwIENsYW1wZWQNCi1kZWNkNjMwIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMTAgICAgICAgLT4gMS4wRSszNzANCi1kZWNkNjMxIGFwcGx5ICAgMUUrMzY5ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDENCi1kZWNkNjMyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUrMzY5DQotZGVjZDYzMyBhcHBseSAgIDFFKzM2OCAgICAgICAgICAgICAgICAgIC0+ICM0M2Y4MDAwMDAwMDAwMDAxDQotZGVjZDYzNCBhcHBseSAgICM0M2Y4MDAwMDAwMDAwMDAxICAgICAgIC0+IDFFKzM2OA0KLS0tIHNhbWUgd2l0aCA5cw0KLWRlY2Q2NDEgYXBwbHkgICA5RSszODQgICAgICAgICAgICAgICAgICAtPiAjNzdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjZDY0MiBhcHBseSAgICM3N2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQNCi1kZWNkNjQzIGFwcGx5ICAgOUUrMzgzICAgICAgICAgICAgICAgICAgLT4gIzQzZmM4YzAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2NDQgYXBwbHkgICAjNDNmYzhjMDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwRSszODMNCi1kZWNkNjQ1IGFwcGx5ICAgOUUrMzgyICAgICAgICAgICAgICAgICAgLT4gIzQzZmMxYTAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2NDYgYXBwbHkgICAjNDNmYzFhMDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDBFKzM4Mg0KLWRlY2Q2NDcgYXBwbHkgICA5RSszODEgICAgICAgICAgICAgICAgICAtPiAjNDNmYzA5MDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjZDY0OCBhcHBseSAgICM0M2ZjMDkwMDAwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwRSszODENCi1kZWNkNjQ5IGFwcGx5ICAgOUUrMzgwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDIzMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2NTAgYXBwbHkgICAjNDNmYzAwMjMwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwRSszODANCi1kZWNkNjUxIGFwcGx5ICAgOUUrMzc5ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDA2ODAwMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2NTIgYXBwbHkgICAjNDNmYzAwMDY4MDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDBFKzM3OQ0KLWRlY2Q2NTMgYXBwbHkgICA5RSszNzggICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDI0MDAwMDAwMCBDbGFtcGVkDQotZGVjZDY1NCBhcHBseSAgICM0M2ZjMDAwMjQwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwRSszNzgNCi1kZWNkNjU1IGFwcGx5ICAgOUUrMzc3ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDhjMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2NTYgYXBwbHkgICAjNDNmYzAwMDAwOGMwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwRSszNzcNCi1kZWNkNjU3IGFwcGx5ICAgOUUrMzc2ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDFhMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2NTggYXBwbHkgICAjNDNmYzAwMDAwMWEwMDAwMCAgICAgICAtPiA5LjAwMDAwMDBFKzM3Ng0KLWRlY2Q2NTkgYXBwbHkgICA5RSszNzUgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDkwMDAwMCBDbGFtcGVkDQotZGVjZDY2MCBhcHBseSAgICM0M2ZjMDAwMDAwOTAwMDAwICAgICAgIC0+IDkuMDAwMDAwRSszNzUNCi1kZWNkNjYxIGFwcGx5ICAgOUUrMzc0ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMjMwMDAgQ2xhbXBlZA0KLWRlY2Q2NjIgYXBwbHkgICAjNDNmYzAwMDAwMDAyMzAwMCAgICAgICAtPiA5LjAwMDAwRSszNzQNCi1kZWNkNjYzIGFwcGx5ICAgOUUrMzczICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDY4MDAgQ2xhbXBlZA0KLWRlY2Q2NjQgYXBwbHkgICAjNDNmYzAwMDAwMDAwNjgwMCAgICAgICAtPiA5LjAwMDBFKzM3Mw0KLWRlY2Q2NjUgYXBwbHkgICA5RSszNzIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMjQwMCBDbGFtcGVkDQotZGVjZDY2NiBhcHBseSAgICM0M2ZjMDAwMDAwMDAyNDAwICAgICAgIC0+IDkuMDAwRSszNzINCi1kZWNkNjY3IGFwcGx5ICAgOUUrMzcxICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwOGMgQ2xhbXBlZA0KLWRlY2Q2NjggYXBwbHkgICAjNDNmYzAwMDAwMDAwMDA4YyAgICAgICAtPiA5LjAwRSszNzENCi1kZWNkNjY5IGFwcGx5ICAgOUUrMzcwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMWEgQ2xhbXBlZA0KLWRlY2Q2NzAgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAxYSAgICAgICAtPiA5LjBFKzM3MA0KLWRlY2Q2NzEgYXBwbHkgICA5RSszNjkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwOQ0KLWRlY2Q2NzIgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwOSAgICAgICAtPiA5RSszNjkNCi1kZWNkNjczIGFwcGx5ICAgOUUrMzY4ICAgICAgICAgICAgICAgICAgLT4gIzQzZjgwMDAwMDAwMDAwMDkNCi1kZWNkNjc0IGFwcGx5ICAgIzQzZjgwMDAwMDAwMDAwMDkgICAgICAgLT4gOUUrMzY4DQotDQotDQotLS0gU2VsZWN0ZWQgRFBEIGNvZGVzDQotZGVjZDcwMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDAwICAgICAgIC0+IDANCi1kZWNkNzAxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMDkgICAgICAgLT4gOQ0KLWRlY2Q3MDIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAxMCAgICAgICAtPiAxMA0KLWRlY2Q3MDMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAxOSAgICAgICAtPiAxOQ0KLWRlY2Q3MDQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAyMCAgICAgICAtPiAyMA0KLWRlY2Q3MDUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAyOSAgICAgICAtPiAyOQ0KLWRlY2Q3MDYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAzMCAgICAgICAtPiAzMA0KLWRlY2Q3MDcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAzOSAgICAgICAtPiAzOQ0KLWRlY2Q3MDggYXBwbHkgICAjMjIzODAwMDAwMDAwMDA0MCAgICAgICAtPiA0MA0KLWRlY2Q3MDkgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA0OSAgICAgICAtPiA0OQ0KLWRlY2Q3MTAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA1MCAgICAgICAtPiA1MA0KLWRlY2Q3MTEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA1OSAgICAgICAtPiA1OQ0KLWRlY2Q3MTIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA2MCAgICAgICAtPiA2MA0KLWRlY2Q3MTMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA2OSAgICAgICAtPiA2OQ0KLWRlY2Q3MTQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MCAgICAgICAtPiA3MA0KLWRlY2Q3MTUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MSAgICAgICAtPiA3MQ0KLWRlY2Q3MTYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MiAgICAgICAtPiA3Mg0KLWRlY2Q3MTcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MyAgICAgICAtPiA3Mw0KLWRlY2Q3MTggYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3NCAgICAgICAtPiA3NA0KLWRlY2Q3MTkgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3NSAgICAgICAtPiA3NQ0KLWRlY2Q3MjAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3NiAgICAgICAtPiA3Ng0KLWRlY2Q3MjEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3NyAgICAgICAtPiA3Nw0KLWRlY2Q3MjIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3OCAgICAgICAtPiA3OA0KLWRlY2Q3MjMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3OSAgICAgICAtPiA3OQ0KLQ0KLWRlY2Q3MjUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI5ZSAgICAgICAtPiA5OTQNCi1kZWNkNzI2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyOWYgICAgICAgLT4gOTk1DQotZGVjZDcyNyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmEwICAgICAgIC0+IDUyMA0KLWRlY2Q3MjggYXBwbHkgICAjMjIzODAwMDAwMDAwMDJhMSAgICAgICAtPiA1MjENCi0tLSBmcm9tIHRlbGNvIHRlc3QgZGF0YQ0KLWRlY2Q3MzAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE4OCAgICAgICAtPiAzMDgNCi1kZWNkNzMxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxYTMgICAgICAgLT4gMzIzDQotZGVjZDczMiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDJhICAgICAgIC0+ICA4Mg0KLWRlY2Q3MzMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFhOSAgICAgICAtPiAzMjkNCi1kZWNkNzM0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwODEgICAgICAgLT4gMTAxDQotZGVjZDczNSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmEyICAgICAgIC0+IDUyMg0KLQ0KLS0tIERQRDogb25lIG9mIGVhY2ggb2YgdGhlIGh1ZmZtYW4gZ3JvdXBzDQotZGVjZDc0MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2Y3ICAgICAgIC0+IDc3Nw0KLWRlY2Q3NDEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNmOCAgICAgICAtPiA3NzgNCi1kZWNkNzQyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZWIgICAgICAgLT4gNzg3DQotZGVjZDc0MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzdkICAgICAgIC0+IDg3Nw0KLWRlY2Q3NDQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM5ZiAgICAgICAtPiA5OTcNCi1kZWNkNzQ1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzYmYgICAgICAgLT4gOTc5DQotZGVjZDc0NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2RmICAgICAgIC0+IDc5OQ0KLWRlY2Q3NDcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA2ZSAgICAgICAtPiA4ODgNCi0NCi0tLSBEUEQgYWxsLWhpZ2hzIGNhc2VzIChpbmNsdWRlcyB0aGUgMjQgcmVkdW5kYW50IGNvZGVzKQ0KLWRlY2Q3NTAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA2ZSAgICAgICAtPiA4ODgNCi1kZWNkNzUxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxNmUgICAgICAgLT4gODg4DQotZGVjZDc1MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjZlICAgICAgIC0+IDg4OA0KLWRlY2Q3NTMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM2ZSAgICAgICAtPiA4ODgNCi1kZWNkNzU0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmYgICAgICAgLT4gODg5DQotZGVjZDc1NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTZmICAgICAgIC0+IDg4OQ0KLWRlY2Q3NTYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI2ZiAgICAgICAtPiA4ODkNCi1kZWNkNzU3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzNmYgICAgICAgLT4gODg5DQotDQotZGVjZDc2MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDdlICAgICAgIC0+IDg5OA0KLWRlY2Q3NjEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE3ZSAgICAgICAtPiA4OTgNCi1kZWNkNzYyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyN2UgICAgICAgLT4gODk4DQotZGVjZDc2MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzdlICAgICAgIC0+IDg5OA0KLWRlY2Q3NjQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3ZiAgICAgICAtPiA4OTkNCi1kZWNkNzY1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxN2YgICAgICAgLT4gODk5DQotZGVjZDc2NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjdmICAgICAgIC0+IDg5OQ0KLWRlY2Q3NjcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM3ZiAgICAgICAtPiA4OTkNCi0NCi1kZWNkNzcwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwZWUgICAgICAgLT4gOTg4DQotZGVjZDc3MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWVlICAgICAgIC0+IDk4OA0KLWRlY2Q3NzIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJlZSAgICAgICAtPiA5ODgNCi1kZWNkNzczIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZWUgICAgICAgLT4gOTg4DQotZGVjZDc3NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGVmICAgICAgIC0+IDk4OQ0KLWRlY2Q3NzUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFlZiAgICAgICAtPiA5ODkNCi1kZWNkNzc2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZWYgICAgICAgLT4gOTg5DQotZGVjZDc3NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2VmICAgICAgIC0+IDk4OQ0KLQ0KLWRlY2Q3ODAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBmZSAgICAgICAtPiA5OTgNCi1kZWNkNzgxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxZmUgICAgICAgLT4gOTk4DQotZGVjZDc4MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmZlICAgICAgIC0+IDk5OA0KLWRlY2Q3ODMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNmZSAgICAgICAtPiA5OTgNCi1kZWNkNzg0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwZmYgICAgICAgLT4gOTk5DQotZGVjZDc4NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWZmICAgICAgIC0+IDk5OQ0KLWRlY2Q3ODYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJmZiAgICAgICAtPiA5OTkNCi1kZWNkNzg3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZmYgICAgICAgLT4gOTk5DQotDQotLS0gdmFsdWVzIGFyb3VuZCBbdV1pbnQzMiBlZGdlcyAoemVyb3MgZG9uZSBlYXJsaWVyKQ0KLWRlY2Q4MDAgYXBwbHkgLTIxNDc0ODM2NDYgIC0+ICNhMjM4MDAwMDhjNzhhZjQ2DQotZGVjZDgwMSBhcHBseSAtMjE0NzQ4MzY0NyAgLT4gI2EyMzgwMDAwOGM3OGFmNDcNCi1kZWNkODAyIGFwcGx5IC0yMTQ3NDgzNjQ4ICAtPiAjYTIzODAwMDA4Yzc4YWY0OA0KLWRlY2Q4MDMgYXBwbHkgLTIxNDc0ODM2NDkgIC0+ICNhMjM4MDAwMDhjNzhhZjQ5DQotZGVjZDgwNCBhcHBseSAgMjE0NzQ4MzY0NiAgLT4gIzIyMzgwMDAwOGM3OGFmNDYNCi1kZWNkODA1IGFwcGx5ICAyMTQ3NDgzNjQ3ICAtPiAjMjIzODAwMDA4Yzc4YWY0Nw0KLWRlY2Q4MDYgYXBwbHkgIDIxNDc0ODM2NDggIC0+ICMyMjM4MDAwMDhjNzhhZjQ4DQotZGVjZDgwNyBhcHBseSAgMjE0NzQ4MzY0OSAgLT4gIzIyMzgwMDAwOGM3OGFmNDkNCi1kZWNkODA4IGFwcGx5ICA0Mjk0OTY3Mjk0ICAtPiAjMjIzODAwMDExNWFmYjU1YQ0KLWRlY2Q4MDkgYXBwbHkgIDQyOTQ5NjcyOTUgIC0+ICMyMjM4MDAwMTE1YWZiNTViDQotZGVjZDgxMCBhcHBseSAgNDI5NDk2NzI5NiAgLT4gIzIyMzgwMDAxMTVhZmI1N2ENCi1kZWNkODExIGFwcGx5ICA0Mjk0OTY3Mjk3ICAtPiAjMjIzODAwMDExNWFmYjU3Yg0KLQ0KLWRlY2Q4MjAgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ2IC0+IC0yMTQ3NDgzNjQ2DQotZGVjZDgyMSBhcHBseSAgI2EyMzgwMDAwOGM3OGFmNDcgLT4gLTIxNDc0ODM2NDcNCi1kZWNkODIyIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0OCAtPiAtMjE0NzQ4MzY0OA0KLWRlY2Q4MjMgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ5IC0+IC0yMTQ3NDgzNjQ5DQotZGVjZDgyNCBhcHBseSAgIzIyMzgwMDAwOGM3OGFmNDYgLT4gIDIxNDc0ODM2NDYNCi1kZWNkODI1IGFwcGx5ICAjMjIzODAwMDA4Yzc4YWY0NyAtPiAgMjE0NzQ4MzY0Nw0KLWRlY2Q4MjYgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ4IC0+ICAyMTQ3NDgzNjQ4DQotZGVjZDgyNyBhcHBseSAgIzIyMzgwMDAwOGM3OGFmNDkgLT4gIDIxNDc0ODM2NDkNCi1kZWNkODI4IGFwcGx5ICAjMjIzODAwMDExNWFmYjU1YSAtPiAgNDI5NDk2NzI5NA0KLWRlY2Q4MjkgYXBwbHkgICMyMjM4MDAwMTE1YWZiNTViIC0+ICA0Mjk0OTY3Mjk1DQotZGVjZDgzMCBhcHBseSAgIzIyMzgwMDAxMTVhZmI1N2EgLT4gIDQyOTQ5NjcyOTYNCi1kZWNkODMxIGFwcGx5ICAjMjIzODAwMDExNWFmYjU3YiAtPiAgNDI5NDk2NzI5Nw0KLQ0KLS0tIGZvciBuYXJyb3dpbmcNCi1kZWNkODQwIGFwcGx5ICAjMjg3MDAwMDAwMDAwMDAwMCAtPiAgMi4wMDAwMDAwMDAwMDAwMDBFLTk5DQotDQotLS0gc29tZSBtaXNjZWxsYW5lb3VzDQotZGVjZDg1MCBhcHBseSAgIzAwMDQwNzAwMDAwMDAwMDAgLT4gNy4wMDAwMDAwMDAwMDBFLTM4NSAgU3Vibm9ybWFsDQotZGVjZDg1MSBhcHBseSAgIzAwMDgwMDAwMDAwMjAwMDAgLT4gMS4wMDAwMEUtMzkxICAgICAgICAgU3Vibm9ybWFsDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEVuY29kZS5kZWNUZXN0IC0tIGRlY2ltYWwgZWlnaHQtYnl0ZSBmb3JtYXQgdGVzdGNhc2VzICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAwLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBbUHJldmlvdXNseSBjYWxsZWQgZGVjaW1hbDY0LmRlY1Rlc3RdCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciB0aGUgZWlnaHQtYnl0ZSBjb25jcmV0ZSByZXByZXNlbnRhdGlvbi4KKy0tIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlOgorLS0KKy0tICAxIGJpdCAgc2lnbgorLS0gIDUgYml0cyBjb21iaW5hdGlvbiBmaWVsZAorLS0gIDggYml0cyBleHBvbmVudCBjb250aW51YXRpb24KKy0tIDUwIGJpdHMgY29lZmZpY2llbnQgY29udGludWF0aW9uCistLQorLS0gVG90YWwgZXhwb25lbnQgbGVuZ3RoIDEwIGJpdHMKKy0tIFRvdGFsIGNvZWZmaWNpZW50IGxlbmd0aCA1NCBiaXRzICgxNiBkaWdpdHMpCistLQorLS0gRWxpbWl0ID0gIDc2NyAobWF4aW11bSBlbmNvZGVkIGV4cG9uZW50KQorLS0gRW1heCAgID0gIDM4NCAobGFyZ2VzdCBleHBvbmVudCB2YWx1ZSkKKy0tIEVtaW4gICA9IC0zODMgKHNtYWxsZXN0IGV4cG9uZW50IHZhbHVlKQorLS0gYmlhcyAgID0gIDM5OCAoc3VidHJhY3RlZCBmcm9tIGVuY29kZWQgZXhwb25lbnQpID0gLUV0aW55CisKKy0tIFRoZSB0ZXN0Y2FzZXMgaGVyZSBoYXZlIG9ubHkgZXhhY3RseSByZXByZXNlbnRhYmxlIGRhdGEgb24gdGhlCistLSAnbGVmdC1oYW5kLXNpZGUnOyByb3VuZGluZyBmcm9tIHN0cmluZ3MgaXMgdGVzdGVkIGluICdiYXNlJworLS0gdGVzdGNhc2UgZ3JvdXBzLgorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKKy0tIEdlbmVyYWwgdGVzdGNhc2VzCistLSAobW9zdGx5IGRlcml2ZWQgZnJvbSB0aGUgU3RyYXdtYW4gNCBkb2N1bWVudCBhbmQgZXhhbXBsZXMpCitkZWNlMDAxIGFwcGx5ICAgI0EyMzAwMDAwMDAwMDAzRDAgLT4gLTcuNTAKK2RlY2UwMDIgYXBwbHkgICAtNy41MCAgICAgICAgICAgICAtPiAjQTIzMDAwMDAwMDAwMDNEMAorLS0gZGVyaXZhdGl2ZSBjYW5vbmljYWwgcGxhaW4gc3RyaW5ncworZGVjZTAwMyBhcHBseSAgICNBMjNjMDAwMDAwMDAwM0QwIC0+IC03LjUwRSszCitkZWNlMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyM2MwMDAwMDAwMDAzRDAKK2RlY2UwMDUgYXBwbHkgICAjQTIzODAwMDAwMDAwMDNEMCAtPiAtNzUwCitkZWNlMDA2IGFwcGx5ICAgLTc1MCAgICAgICAgICAgICAgLT4gI0EyMzgwMDAwMDAwMDAzRDAKK2RlY2UwMDcgYXBwbHkgICAjQTIzNDAwMDAwMDAwMDNEMCAtPiAtNzUuMAorZGVjZTAwOCBhcHBseSAgIC03NS4wICAgICAgICAgICAgIC0+ICNBMjM0MDAwMDAwMDAwM0QwCitkZWNlMDA5IGFwcGx5ICAgI0EyMmMwMDAwMDAwMDAzRDAgLT4gLTAuNzUwCitkZWNlMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMmMwMDAwMDAwMDAzRDAKK2RlY2UwMTEgYXBwbHkgICAjQTIyODAwMDAwMDAwMDNEMCAtPiAtMC4wNzUwCitkZWNlMDEyIGFwcGx5ICAgLTAuMDc1MCAgICAgICAgICAgLT4gI0EyMjgwMDAwMDAwMDAzRDAKK2RlY2UwMTMgYXBwbHkgICAjQTIyMDAwMDAwMDAwMDNEMCAtPiAtMC4wMDA3NTAKK2RlY2UwMTQgYXBwbHkgICAtMC4wMDA3NTAgICAgICAgICAtPiAjQTIyMDAwMDAwMDAwMDNEMAorZGVjZTAxNSBhcHBseSAgICNBMjE4MDAwMDAwMDAwM0QwIC0+IC0wLjAwMDAwNzUwCitkZWNlMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0EyMTgwMDAwMDAwMDAzRDAKK2RlY2UwMTcgYXBwbHkgICAjQTIxNDAwMDAwMDAwMDNEMCAtPiAtNy41MEUtNworZGVjZTAxOCBhcHBseSAgIC03LjUwRS03ICAgICAgICAgIC0+ICNBMjE0MDAwMDAwMDAwM0QwCisKKy0tIE5vcm1hbGl0eQorZGVjZTAyMCBhcHBseSAgIDEyMzQ1Njc4OTAxMjM0NTYgICAtPiAjMjYzOTM0YjljMWUyOGU1NgorZGVjZTAyMSBhcHBseSAgLTEyMzQ1Njc4OTAxMjM0NTYgICAtPiAjYTYzOTM0YjljMWUyOGU1NgorZGVjZTAyMiBhcHBseSAgIDEyMzQuNTY3ODkwMTIzNDU2ICAtPiAjMjYwOTM0YjljMWUyOGU1NgorZGVjZTAyMyBhcHBseSAgIzI2MDkzNGI5YzFlMjhlNTYgICAtPiAxMjM0LjU2Nzg5MDEyMzQ1NgorZGVjZTAyNCBhcHBseSAgIDExMTExMTExMTExMTExMTEgICAtPiAjMjYzODkxMjQ0OTEyNDQ5MQorZGVjZTAyNSBhcHBseSAgIDk5OTk5OTk5OTk5OTk5OTkgICAtPiAjNmUzOGZmM2ZjZmYzZmNmZgorCistLSBObWF4IGFuZCBzaW1pbGFyCitkZWNlMDMxIGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RlY2UwMzIgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGVjZTAzMyBhcHBseSAgICM3N2ZjZmYzZmNmZjNmY2ZmICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RlY2UwMzQgYXBwbHkgICAxLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0ICAtPiAjNDdmZDM0YjljMWUyOGU1NgorZGVjZTAzNSBhcHBseSAgICM0N2ZkMzRiOWMxZTI4ZTU2ICAgICAgIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSszODQKKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCitkZWNlMDM2IGFwcGx5ICAgMS4yM0UrMzg0ICAgICAgICAgICAgICAgLT4gIzQ3ZmQzMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZTAzNyBhcHBseSAgICM0N2ZkMzAwMDAwMDAwMDAwICAgICAgIC0+IDEuMjMwMDAwMDAwMDAwMDAwRSszODQKK2RlY2QwMzggYXBwbHkgICAxRSszODQgICAgICAgICAgICAgICAgICAtPiAjNDdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkMDM5IGFwcGx5ICAgIzQ3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NAorCitkZWNkMDUxIGFwcGx5ICAgMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDQ5YzUKK2RlY2QwNTIgYXBwbHkgICAjMjIzODAwMDAwMDAwNDljNSAgICAgICAtPiAxMjM0NQorZGVjZDA1MyBhcHBseSAgIDEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwNTM0CitkZWNkMDU0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDA1MzQgICAgICAgLT4gMTIzNAorZGVjZDA1NSBhcHBseSAgIDEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMGEzCitkZWNkMDU2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwYTMgICAgICAgLT4gMTIzCitkZWNkMDU3IGFwcGx5ICAgMTIgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMTIKK2RlY2QwNTggYXBwbHkgICAjMjIzODAwMDAwMDAwMDAxMiAgICAgICAtPiAxMgorZGVjZDA1OSBhcHBseSAgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAxCitkZWNkMDYwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMDEgICAgICAgLT4gMQorZGVjZDA2MSBhcHBseSAgIDEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwMGEzCitkZWNkMDYyIGFwcGx5ICAgIzIyMzAwMDAwMDAwMDAwYTMgICAgICAgLT4gMS4yMworZGVjZDA2MyBhcHBseSAgIDEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDA0OWM1CitkZWNkMDY0IGFwcGx5ICAgIzIyMzAwMDAwMDAwMDQ5YzUgICAgICAgLT4gMTIzLjQ1CisKKy0tIE5taW4gYW5kIGJlbG93CitkZWNkMDcxIGFwcGx5ICAgMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gIzAwM2MwMDAwMDAwMDAwMDEKK2RlY2QwNzIgYXBwbHkgICAjMDAzYzAwMDAwMDAwMDAwMSAgICAgICAtPiAxRS0zODMKK2RlY2QwNzMgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjMDQwMDAwMDAwMDAwMDAwMAorZGVjZDA3NCBhcHBseSAgICMwNDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RlY2QwNzUgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjMDQwMDAwMDAwMDAwMDAwMQorZGVjZDA3NiBhcHBseSAgICMwNDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKKworZGVjZDA3NyBhcHBseSAgIDAuMTAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICMwMDAwODAwMDAwMDAwMDAwICAgICAgU3Vibm9ybWFsCitkZWNkMDc4IGFwcGx5ICAgIzAwMDA4MDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0ICBTdWJub3JtYWwKK2RlY2QwNzkgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAxMEUtMzgzICAtPiAjMDAwMDAwMDAwMDAwMDAxMCAgICAgIFN1Ym5vcm1hbAorZGVjZDA4MCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IDEuMEUtMzk3ICAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNkMDgxIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMUUtMzgzICAgLT4gIzAwMDQwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwKK2RlY2QwODIgYXBwbHkgICAjMDAwNDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRS0zOTcgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZGVjZDA4MyBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsCitkZWNkMDg0IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUtMzk4ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgc21hbGxlc3QgYWxsLW5pbmVzCitkZWNkMDg1IGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OUUtMzk4ICAgLT4gIzY0MDBmZjNmY2ZmM2ZjZmYKK2RlY2QwODYgYXBwbHkgICAjNjQwMGZmM2ZjZmYzZmNmZiAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCistLSBhbmQgYSBwcm9ibGVtYXRpYyBkaXZpZGUgcmVzdWx0CitkZWNkMDg4IGFwcGx5ICAgMS4xMTExMTExMTExMTExMTFFLTM4MyAgLT4gIzA0MDA5MTI0NDkxMjQ0OTEKK2RlY2QwODkgYXBwbHkgICAjMDQwMDkxMjQ0OTEyNDQ5MSAgICAgICAtPiAxLjExMTExMTExMTExMTExMUUtMzgzCisKKy0tIGZvcnRpZXMKK2RlY2QwOTAgYXBwbHkgICAgICAgIDQwICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDQwCitkZWNkMDkxIGFwcGx5ICAgICAgICAzOS45OSAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMGNmZgorCistLSB1bmRlcmZsb3dzIGNhbm5vdCBiZSB0ZXN0ZWQgYXMgYWxsIExIUyBleGFjdAorCistLSBTYW1lIGFnYWluLCBuZWdhdGl2ZXMKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY2QxMjIgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZgorZGVjZDEyMyBhcHBseSAgICNmN2ZjZmYzZmNmZjNmY2ZmICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZWNkMTI0IGFwcGx5ICAtMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NCAgLT4gI2M3ZmQzNGI5YzFlMjhlNTYKK2RlY2QxMjUgYXBwbHkgICAjYzdmZDM0YjljMWUyOGU1NiAgICAgICAtPiAtMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NAorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2RlY2QxMzAgYXBwbHkgIC0xLjIzRSszODQgICAgICAgICAgICAgICAtPiAjYzdmZDMwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkMTMxIGFwcGx5ICAgI2M3ZmQzMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMjMwMDAwMDAwMDAwMDAwRSszODQKK2RlY2QxMzIgYXBwbHkgIC0xRSszODQgICAgICAgICAgICAgICAgICAtPiAjYzdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkMTMzIGFwcGx5ICAgI2M3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRSszODQKKworLS0gb3ZlcmZsb3dzCitkZWNkMTUxIGFwcGx5ICAtMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDQ5YzUKK2RlY2QxNTIgYXBwbHkgICAjYTIzODAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzNDUKK2RlY2QxNTMgYXBwbHkgIC0xMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDUzNAorZGVjZDE1NCBhcHBseSAgICNhMjM4MDAwMDAwMDAwNTM0ICAgICAgIC0+IC0xMjM0CitkZWNkMTU1IGFwcGx5ICAtMTIzICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDAwYTMKK2RlY2QxNTYgYXBwbHkgICAjYTIzODAwMDAwMDAwMDBhMyAgICAgICAtPiAtMTIzCitkZWNkMTU3IGFwcGx5ICAtMTIgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDAwMTIKK2RlY2QxNTggYXBwbHkgICAjYTIzODAwMDAwMDAwMDAxMiAgICAgICAtPiAtMTIKK2RlY2QxNTkgYXBwbHkgIC0xICAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMQorZGVjZDE2MCBhcHBseSAgICNhMjM4MDAwMDAwMDAwMDAxICAgICAgIC0+IC0xCitkZWNkMTYxIGFwcGx5ICAtMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzAwMDAwMDAwMDAwYTMKK2RlY2QxNjIgYXBwbHkgICAjYTIzMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMS4yMworZGVjZDE2MyBhcHBseSAgLTEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMDAwMDA0OWM1CitkZWNkMTY0IGFwcGx5ICAgI2EyMzAwMDAwMDAwMDQ5YzUgICAgICAgLT4gLTEyMy40NQorCistLSBObWluIGFuZCBiZWxvdworZGVjZDE3MSBhcHBseSAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+ICM4MDNjMDAwMDAwMDAwMDAxCitkZWNkMTcyIGFwcGx5ICAgIzgwM2MwMDAwMDAwMDAwMDEgICAgICAgLT4gLTFFLTM4MworZGVjZDE3MyBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICM4NDAwMDAwMDAwMDAwMDAwCitkZWNkMTc0IGFwcGx5ICAgIzg0MDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RlY2QxNzUgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjODQwMDAwMDAwMDAwMDAwMQorZGVjZDE3NiBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCisKK2RlY2QxNzcgYXBwbHkgIC0wLjEwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjODAwMDgwMDAwMDAwMDAwMCAgICAgICBTdWJub3JtYWwKK2RlY2QxNzggYXBwbHkgICAjODAwMDgwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0ICBTdWJub3JtYWwKK2RlY2QxNzkgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAxMEUtMzgzICAtPiAjODAwMDAwMDAwMDAwMDAxMCAgICAgICBTdWJub3JtYWwKK2RlY2QxODAgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAtMS4wRS0zOTcgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY2QxODEgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAxRS0zODMgICAtPiAjODAwNDAwMDAwMDAwMDAwMSAgICAgICBTdWJub3JtYWwKK2RlY2QxODIgYXBwbHkgICAjODAwNDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMUUtMzk3ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY2QxODMgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjODAwMDAwMDAwMDAwMDAwMSAgICAgICBTdWJub3JtYWwKK2RlY2QxODQgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgc21hbGxlc3QgYWxsLW5pbmVzCitkZWNkMTg1IGFwcGx5ICAgLTk5OTk5OTk5OTk5OTk5OTlFLTM5OCAgIC0+ICNlNDAwZmYzZmNmZjNmY2ZmCitkZWNkMTg2IGFwcGx5ICAgI2U0MDBmZjNmY2ZmM2ZjZmYgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS0zODMKKy0tIGFuZCBhIHRyaWNreSBzdWJub3JtYWwKK2RlY2QxODcgYXBwbHkgICAxLjExMTExMTExMTExNTI0RS0zODQgICAgLT4gIzAwMDA5MTI0NDkxMjQ2YTQgICAgICBTdWJub3JtYWwKK2RlY2QxODggYXBwbHkgICAjMDAwMDkxMjQ0OTEyNDZhNCAgICAgICAgLT4gMS4xMTExMTExMTExMTUyNEUtMzg0ICBTdWJub3JtYWwKKworLS0gbmVhci11bmRlcmZsb3dzCitkZWNkMTg5IGFwcGx5ICAgLTFlLTM5OCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbAorZGVjZDE5MCBhcHBseSAgIC0xLjBlLTM5OCAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgUm91bmRlZAorCistLSB6ZXJvcworZGVjZDQwMSBhcHBseSAgIDBFLTUwMCAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDAyIGFwcGx5ICAgMEUtNDAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MDMgYXBwbHkgICAwRS0zOTggICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMAorZGVjZDQwNCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTM5OAorZGVjZDQwNSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwCitkZWNkNDA2IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUtMzk4CitkZWNkNDA3IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDAwMDAKK2RlY2Q0MDggYXBwbHkgICAjMjIzMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwLjAwCitkZWNkNDA5IGFwcGx5ICAgMCAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMDAKK2RlY2Q0MTAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAwMCAgICAgICAtPiAwCitkZWNkNDExIGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyNDQwMDAwMDAwMDAwMDAKK2RlY2Q0MTIgYXBwbHkgICAjMjI0NDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszCitkZWNkNDEzIGFwcGx5ICAgMEUrMzY5ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAKK2RlY2Q0MTQgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY2Q0MTUgYXBwbHkgICAwRSszNzAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQxNiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQorZGVjZDQxNyBhcHBseSAgIDBFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDE4IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5CitkZWNkNDE5IGFwcGx5ICAgMEUrNDAwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MjAgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkKK2RlY2Q0MjEgYXBwbHkgICAwRSs1MDAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQyMiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQorCistLSBuZWdhdGl2ZSB6ZXJvcworZGVjZDQzMSBhcHBseSAgIC0wRS00MDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDMyIGFwcGx5ICAgLTBFLTQwMCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MzMgYXBwbHkgICAtMEUtMzk4ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMAorZGVjZDQzNCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS0zOTgKK2RlY2Q0MzUgYXBwbHkgICAtMC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtPiAjODAwMDAwMDAwMDAwMDAwMAorZGVjZDQzNiBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS0zOTgKK2RlY2Q0MzcgYXBwbHkgICAtMEUtMiAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwMDAwMAorZGVjZDQzOCBhcHBseSAgICNhMjMwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wLjAwCitkZWNkNDM5IGFwcGx5ICAgLTAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDAwMDAKK2RlY2Q0NDAgYXBwbHkgICAjYTIzODAwMDAwMDAwMDAwMCAgICAgICAtPiAtMAorZGVjZDQ0MSBhcHBseSAgIC0wRSszICAgICAgICAgICAgICAgICAgIC0+ICNhMjQ0MDAwMDAwMDAwMDAwCitkZWNkNDQyIGFwcGx5ICAgI2EyNDQwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzMKK2RlY2Q0NDMgYXBwbHkgICAtMEUrMzY5ICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMAorZGVjZDQ0NCBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY2Q0NDUgYXBwbHkgICAtMEUrMzcwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQ0NiBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkKK2RlY2Q0NDcgYXBwbHkgICAtMEUrMzg0ICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQ0OCBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkKK2RlY2Q0NDkgYXBwbHkgICAtMEUrNDAwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQ1MCBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkKK2RlY2Q0NTEgYXBwbHkgICAtMEUrNTAwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQ1MiBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkKKworLS0gZXhwb25lbnRzCitkZWNkNDYwIGFwcGx5ICAgIzIyNWMwMDAwMDAwMDAwMDcgLT4gN0UrOQorZGVjZDQ2MSBhcHBseSAgIDdFKzkgIC0+ICMyMjVjMDAwMDAwMDAwMDA3CitkZWNkNDYyIGFwcGx5ICAgIzIzYzQwMDAwMDAwMDAwMDcgLT4gN0UrOTkKK2RlY2Q0NjMgYXBwbHkgICA3RSs5OSAtPiAjMjNjNDAwMDAwMDAwMDAwNworCistLSBTcGVjaWFscworZGVjZDUwMCBhcHBseSAgIEluZmluaXR5ICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZWNkNTAxIGFwcGx5ICAgIzc4Nzg3ODc4Nzg3ODc4NzggLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MDIgYXBwbHkgICAjNzgwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQorZGVjZDUwMyBhcHBseSAgICM3OTc5Nzk3OTc5Nzk3OTc5IC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZWNkNTA0IGFwcGx5ICAgIzc5MDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKK2RlY2Q1MDUgYXBwbHkgICAjN2E3YTdhN2E3YTdhN2E3YSAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGVjZDUwNiBhcHBseSAgICM3YTAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CitkZWNkNTA3IGFwcGx5ICAgIzdiN2I3YjdiN2I3YjdiN2IgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MDggYXBwbHkgICAjN2IwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQorCitkZWNkNTA5IGFwcGx5ICAgTmFOICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAKK2RlY2Q1MTAgYXBwbHkgICAjN2M3YzdjN2M3YzdjN2M3YyAtPiAjN2MwMDdjN2M3YzdjN2M3YworZGVjZDUxMSBhcHBseSAgICM3YzAwMDAwMDAwMDAwMDAwIC0+IE5hTgorZGVjZDUxMiBhcHBseSAgICM3ZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICM3YzAxN2Q3ZDdkN2Q3ZDdkCitkZWNkNTEzIGFwcGx5ICAgIzdkMDAwMDAwMDAwMDAwMDAgLT4gTmFOCitkZWNkNTE0IGFwcGx5ICAgIzdlN2U3ZTdlN2U3ZTdlN2UgLT4gIzdlMDA3ZTdlN2U3ZTdjN2UKK2RlY2Q1MTUgYXBwbHkgICAjN2UwMDAwMDAwMDAwMDAwMCAtPiBzTmFOCitkZWNkNTE2IGFwcGx5ICAgIzdmN2Y3ZjdmN2Y3ZjdmN2YgLT4gIzdlMDA3ZjdmN2Y3ZjdjN2YKK2RlY2Q1MTcgYXBwbHkgICAjN2YwMDAwMDAwMDAwMDAwMCAtPiBzTmFOCitkZWNkNTE4IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmYgLT4gc05hTjk5OTk5OTk5OTk5OTk5OQorZGVjZDUxOSBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCisKK2RlY2Q1MjAgYXBwbHkgICAtSW5maW5pdHkgICAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGVjZDUyMSBhcHBseSAgICNmODc4Nzg3ODc4Nzg3ODc4IC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZWNkNTIyIGFwcGx5ICAgI2Y4MDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CitkZWNkNTIzIGFwcGx5ICAgI2Y5Nzk3OTc5Nzk3OTc5NzkgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MjQgYXBwbHkgICAjZjkwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY2Q1MjUgYXBwbHkgICAjZmE3YTdhN2E3YTdhN2E3YSAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGVjZDUyNiBhcHBseSAgICNmYTAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQorZGVjZDUyNyBhcHBseSAgICNmYjdiN2I3YjdiN2I3YjdiIC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZWNkNTI4IGFwcGx5ICAgI2ZiMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CisKK2RlY2Q1MjkgYXBwbHkgICAtTmFOICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMAorZGVjZDUzMCBhcHBseSAgICNmYzdjN2M3YzdjN2M3YzdjIC0+ICNmYzAwN2M3YzdjN2M3YzdjCitkZWNkNTMxIGFwcGx5ICAgI2ZjMDAwMDAwMDAwMDAwMDAgLT4gLU5hTgorZGVjZDUzMiBhcHBseSAgICNmZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICNmYzAxN2Q3ZDdkN2Q3ZDdkCitkZWNkNTMzIGFwcGx5ICAgI2ZkMDAwMDAwMDAwMDAwMDAgLT4gLU5hTgorZGVjZDUzNCBhcHBseSAgICNmZTdlN2U3ZTdlN2U3ZTdlIC0+ICNmZTAwN2U3ZTdlN2U3YzdlCitkZWNkNTM1IGFwcGx5ICAgI2ZlMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4KK2RlY2Q1MzYgYXBwbHkgICAjZmY3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjZmUwMDdmN2Y3ZjdmN2M3ZgorZGVjZDUzNyBhcHBseSAgICNmZjAwMDAwMDAwMDAwMDAwIC0+IC1zTmFOCitkZWNkNTM4IGFwcGx5ICAgI2ZmZmZmZmZmZmZmZmZmZmYgLT4gLXNOYU45OTk5OTk5OTk5OTk5OTkKK2RlY2Q1MzkgYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZiAtPiAjZmUwMGZmM2ZjZmYzZmNmZgorCistLSBkaWFnbm9zdGljIE5hTnMKK2RlY2Q1NDAgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwCitkZWNkNTQxIGFwcGx5ICAgTmFOMCAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMAorZGVjZDU0MiBhcHBseSAgIE5hTjEgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDEKK2RlY2Q1NDMgYXBwbHkgICBOYU4xMiAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDEyCitkZWNkNTQ0IGFwcGx5ICAgTmFONzkgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDA3OQorZGVjZDU0NSBhcHBseSAgIE5hTjEyMzQ1ICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDQ5YzUKK2RlY2Q1NDYgYXBwbHkgICBOYU4xMjM0NTYgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDI4ZTU2CitkZWNkNTQ3IGFwcGx5ICAgTmFONzk5Nzk5ICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDBmN2ZkZgorZGVjZDU0OCBhcHBseSAgIE5hTjc5OTc5OTc5OTc5OTc5OSAgLT4gIzdjMDNkZmY3ZmRmZjdmZGYKK2RlY2Q1NDkgYXBwbHkgICBOYU45OTk5OTk5OTk5OTk5OTkgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSB0b28gbWFueSBkaWdpdHMKKworLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UKK2RlY2Q2MDEgYXBwbHkgICAxRSszODQgICAgICAgICAgICAgICAgICAtPiAjNDdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjAyIGFwcGx5ICAgIzQ3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NAorZGVjZDYwMyBhcHBseSAgIDFFKzM4MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjODAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2MDQgYXBwbHkgICAjNDNmYzgwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMKK2RlY2Q2MDUgYXBwbHkgICAxRSszODIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzEwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjA2IGFwcGx5ICAgIzQzZmMxMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwRSszODIKK2RlY2Q2MDcgYXBwbHkgICAxRSszODEgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAxMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjA4IGFwcGx5ICAgIzQzZmMwMTAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MQorZGVjZDYwOSBhcHBseSAgIDFFKzM4MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAyMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2MTAgYXBwbHkgICAjNDNmYzAwMjAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwRSszODAKK2RlY2Q2MTEgYXBwbHkgICAxRSszNzkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDQwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjEyIGFwcGx5ICAgIzQzZmMwMDA0MDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwRSszNzkKK2RlY2Q2MTMgYXBwbHkgICAxRSszNzggICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDA0MDAwMDAwMCBDbGFtcGVkCitkZWNkNjE0IGFwcGx5ICAgIzQzZmMwMDAwNDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDBFKzM3OAorZGVjZDYxNSBhcHBseSAgIDFFKzM3NyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDA4MDAwMDAwIENsYW1wZWQKK2RlY2Q2MTYgYXBwbHkgICAjNDNmYzAwMDAwODAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwRSszNzcKK2RlY2Q2MTcgYXBwbHkgICAxRSszNzYgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMTAwMDAwMCBDbGFtcGVkCitkZWNkNjE4IGFwcGx5ICAgIzQzZmMwMDAwMDEwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwRSszNzYKK2RlY2Q2MTkgYXBwbHkgICAxRSszNzUgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDEwMDAwMCBDbGFtcGVkCitkZWNkNjIwIGFwcGx5ICAgIzQzZmMwMDAwMDAxMDAwMDAgICAgICAgLT4gMS4wMDAwMDBFKzM3NQorZGVjZDYyMSBhcHBseSAgIDFFKzM3NCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDIwMDAwIENsYW1wZWQKK2RlY2Q2MjIgYXBwbHkgICAjNDNmYzAwMDAwMDAyMDAwMCAgICAgICAtPiAxLjAwMDAwRSszNzQKK2RlY2Q2MjMgYXBwbHkgICAxRSszNzMgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwNDAwMCBDbGFtcGVkCitkZWNkNjI0IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDQwMDAgICAgICAgLT4gMS4wMDAwRSszNzMKK2RlY2Q2MjUgYXBwbHkgICAxRSszNzIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDQwMCBDbGFtcGVkCitkZWNkNjI2IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDA0MDAgICAgICAgLT4gMS4wMDBFKzM3MgorZGVjZDYyNyBhcHBseSAgIDFFKzM3MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDgwIENsYW1wZWQKK2RlY2Q2MjggYXBwbHkgICAjNDNmYzAwMDAwMDAwMDA4MCAgICAgICAtPiAxLjAwRSszNzEKK2RlY2Q2MjkgYXBwbHkgICAxRSszNzAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAxMCBDbGFtcGVkCitkZWNkNjMwIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMTAgICAgICAgLT4gMS4wRSszNzAKK2RlY2Q2MzEgYXBwbHkgICAxRSszNjkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMQorZGVjZDYzMiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFKzM2OQorZGVjZDYzMyBhcHBseSAgIDFFKzM2OCAgICAgICAgICAgICAgICAgIC0+ICM0M2Y4MDAwMDAwMDAwMDAxCitkZWNkNjM0IGFwcGx5ICAgIzQzZjgwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUrMzY4CistLSBzYW1lIHdpdGggOXMKK2RlY2Q2NDEgYXBwbHkgICA5RSszODQgICAgICAgICAgICAgICAgICAtPiAjNzdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjQyIGFwcGx5ICAgIzc3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NAorZGVjZDY0MyBhcHBseSAgIDlFKzM4MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjOGMwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2NDQgYXBwbHkgICAjNDNmYzhjMDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwRSszODMKK2RlY2Q2NDUgYXBwbHkgICA5RSszODIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzFhMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjQ2IGFwcGx5ICAgIzQzZmMxYTAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwRSszODIKK2RlY2Q2NDcgYXBwbHkgICA5RSszODEgICAgICAgICAgICAgICAgICAtPiAjNDNmYzA5MDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjQ4IGFwcGx5ICAgIzQzZmMwOTAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDBFKzM4MQorZGVjZDY0OSBhcHBseSAgIDlFKzM4MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAyMzAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2NTAgYXBwbHkgICAjNDNmYzAwMjMwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwRSszODAKK2RlY2Q2NTEgYXBwbHkgICA5RSszNzkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDY4MDAwMDAwMCBDbGFtcGVkCitkZWNkNjUyIGFwcGx5ICAgIzQzZmMwMDA2ODAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwRSszNzkKK2RlY2Q2NTMgYXBwbHkgICA5RSszNzggICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDI0MDAwMDAwMCBDbGFtcGVkCitkZWNkNjU0IGFwcGx5ICAgIzQzZmMwMDAyNDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDBFKzM3OAorZGVjZDY1NSBhcHBseSAgIDlFKzM3NyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDA4YzAwMDAwIENsYW1wZWQKK2RlY2Q2NTYgYXBwbHkgICAjNDNmYzAwMDAwOGMwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwRSszNzcKK2RlY2Q2NTcgYXBwbHkgICA5RSszNzYgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMWEwMDAwMCBDbGFtcGVkCitkZWNkNjU4IGFwcGx5ICAgIzQzZmMwMDAwMDFhMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwRSszNzYKK2RlY2Q2NTkgYXBwbHkgICA5RSszNzUgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDkwMDAwMCBDbGFtcGVkCitkZWNkNjYwIGFwcGx5ICAgIzQzZmMwMDAwMDA5MDAwMDAgICAgICAgLT4gOS4wMDAwMDBFKzM3NQorZGVjZDY2MSBhcHBseSAgIDlFKzM3NCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDIzMDAwIENsYW1wZWQKK2RlY2Q2NjIgYXBwbHkgICAjNDNmYzAwMDAwMDAyMzAwMCAgICAgICAtPiA5LjAwMDAwRSszNzQKK2RlY2Q2NjMgYXBwbHkgICA5RSszNzMgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwNjgwMCBDbGFtcGVkCitkZWNkNjY0IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDY4MDAgICAgICAgLT4gOS4wMDAwRSszNzMKK2RlY2Q2NjUgYXBwbHkgICA5RSszNzIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMjQwMCBDbGFtcGVkCitkZWNkNjY2IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDI0MDAgICAgICAgLT4gOS4wMDBFKzM3MgorZGVjZDY2NyBhcHBseSAgIDlFKzM3MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDhjIENsYW1wZWQKK2RlY2Q2NjggYXBwbHkgICAjNDNmYzAwMDAwMDAwMDA4YyAgICAgICAtPiA5LjAwRSszNzEKK2RlY2Q2NjkgYXBwbHkgICA5RSszNzAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAxYSBDbGFtcGVkCitkZWNkNjcwIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMWEgICAgICAgLT4gOS4wRSszNzAKK2RlY2Q2NzEgYXBwbHkgICA5RSszNjkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwOQorZGVjZDY3MiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDA5ICAgICAgIC0+IDlFKzM2OQorZGVjZDY3MyBhcHBseSAgIDlFKzM2OCAgICAgICAgICAgICAgICAgIC0+ICM0M2Y4MDAwMDAwMDAwMDA5CitkZWNkNjc0IGFwcGx5ICAgIzQzZjgwMDAwMDAwMDAwMDkgICAgICAgLT4gOUUrMzY4CisKKworLS0gU2VsZWN0ZWQgRFBEIGNvZGVzCitkZWNkNzAwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMDAgICAgICAgLT4gMAorZGVjZDcwMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDA5ICAgICAgIC0+IDkKK2RlY2Q3MDIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAxMCAgICAgICAtPiAxMAorZGVjZDcwMyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDE5ICAgICAgIC0+IDE5CitkZWNkNzA0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMjAgICAgICAgLT4gMjAKK2RlY2Q3MDUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAyOSAgICAgICAtPiAyOQorZGVjZDcwNiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDMwICAgICAgIC0+IDMwCitkZWNkNzA3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMzkgICAgICAgLT4gMzkKK2RlY2Q3MDggYXBwbHkgICAjMjIzODAwMDAwMDAwMDA0MCAgICAgICAtPiA0MAorZGVjZDcwOSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDQ5ICAgICAgIC0+IDQ5CitkZWNkNzEwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNTAgICAgICAgLT4gNTAKK2RlY2Q3MTEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA1OSAgICAgICAtPiA1OQorZGVjZDcxMiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDYwICAgICAgIC0+IDYwCitkZWNkNzEzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNjkgICAgICAgLT4gNjkKK2RlY2Q3MTQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MCAgICAgICAtPiA3MAorZGVjZDcxNSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDcxICAgICAgIC0+IDcxCitkZWNkNzE2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzIgICAgICAgLT4gNzIKK2RlY2Q3MTcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MyAgICAgICAtPiA3MworZGVjZDcxOCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDc0ICAgICAgIC0+IDc0CitkZWNkNzE5IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzUgICAgICAgLT4gNzUKK2RlY2Q3MjAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3NiAgICAgICAtPiA3NgorZGVjZDcyMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDc3ICAgICAgIC0+IDc3CitkZWNkNzIyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzggICAgICAgLT4gNzgKK2RlY2Q3MjMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3OSAgICAgICAtPiA3OQorCitkZWNkNzI1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyOWUgICAgICAgLT4gOTk0CitkZWNkNzI2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyOWYgICAgICAgLT4gOTk1CitkZWNkNzI3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyYTAgICAgICAgLT4gNTIwCitkZWNkNzI4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyYTEgICAgICAgLT4gNTIxCistLSBmcm9tIHRlbGNvIHRlc3QgZGF0YQorZGVjZDczMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTg4ICAgICAgIC0+IDMwOAorZGVjZDczMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWEzICAgICAgIC0+IDMyMworZGVjZDczMiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDJhICAgICAgIC0+ICA4MgorZGVjZDczMyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWE5ICAgICAgIC0+IDMyOQorZGVjZDczNCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDgxICAgICAgIC0+IDEwMQorZGVjZDczNSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmEyICAgICAgIC0+IDUyMgorCistLSBEUEQ6IG9uZSBvZiBlYWNoIG9mIHRoZSBodWZmbWFuIGdyb3VwcworZGVjZDc0MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2Y3ICAgICAgIC0+IDc3NworZGVjZDc0MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2Y4ICAgICAgIC0+IDc3OAorZGVjZDc0MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2ViICAgICAgIC0+IDc4NworZGVjZDc0MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzdkICAgICAgIC0+IDg3NworZGVjZDc0NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzlmICAgICAgIC0+IDk5NworZGVjZDc0NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2JmICAgICAgIC0+IDk3OQorZGVjZDc0NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2RmICAgICAgIC0+IDc5OQorZGVjZDc0NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OAorCistLSBEUEQgYWxsLWhpZ2hzIGNhc2VzIChpbmNsdWRlcyB0aGUgMjQgcmVkdW5kYW50IGNvZGVzKQorZGVjZDc1MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OAorZGVjZDc1MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTZlICAgICAgIC0+IDg4OAorZGVjZDc1MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjZlICAgICAgIC0+IDg4OAorZGVjZDc1MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzZlICAgICAgIC0+IDg4OAorZGVjZDc1NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDZmICAgICAgIC0+IDg4OQorZGVjZDc1NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTZmICAgICAgIC0+IDg4OQorZGVjZDc1NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjZmICAgICAgIC0+IDg4OQorZGVjZDc1NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzZmICAgICAgIC0+IDg4OQorCitkZWNkNzYwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwN2UgICAgICAgLT4gODk4CitkZWNkNzYxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxN2UgICAgICAgLT4gODk4CitkZWNkNzYyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyN2UgICAgICAgLT4gODk4CitkZWNkNzYzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzN2UgICAgICAgLT4gODk4CitkZWNkNzY0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwN2YgICAgICAgLT4gODk5CitkZWNkNzY1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxN2YgICAgICAgLT4gODk5CitkZWNkNzY2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyN2YgICAgICAgLT4gODk5CitkZWNkNzY3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzN2YgICAgICAgLT4gODk5CisKK2RlY2Q3NzAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBlZSAgICAgICAtPiA5ODgKK2RlY2Q3NzEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFlZSAgICAgICAtPiA5ODgKK2RlY2Q3NzIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJlZSAgICAgICAtPiA5ODgKK2RlY2Q3NzMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNlZSAgICAgICAtPiA5ODgKK2RlY2Q3NzQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBlZiAgICAgICAtPiA5ODkKK2RlY2Q3NzUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFlZiAgICAgICAtPiA5ODkKK2RlY2Q3NzYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJlZiAgICAgICAtPiA5ODkKK2RlY2Q3NzcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNlZiAgICAgICAtPiA5ODkKKworZGVjZDc4MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGZlICAgICAgIC0+IDk5OAorZGVjZDc4MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWZlICAgICAgIC0+IDk5OAorZGVjZDc4MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmZlICAgICAgIC0+IDk5OAorZGVjZDc4MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2ZlICAgICAgIC0+IDk5OAorZGVjZDc4NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGZmICAgICAgIC0+IDk5OQorZGVjZDc4NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWZmICAgICAgIC0+IDk5OQorZGVjZDc4NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmZmICAgICAgIC0+IDk5OQorZGVjZDc4NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2ZmICAgICAgIC0+IDk5OQorCistLSB2YWx1ZXMgYXJvdW5kIFt1XWludDMyIGVkZ2VzICh6ZXJvcyBkb25lIGVhcmxpZXIpCitkZWNkODAwIGFwcGx5IC0yMTQ3NDgzNjQ2ICAtPiAjYTIzODAwMDA4Yzc4YWY0NgorZGVjZDgwMSBhcHBseSAtMjE0NzQ4MzY0NyAgLT4gI2EyMzgwMDAwOGM3OGFmNDcKK2RlY2Q4MDIgYXBwbHkgLTIxNDc0ODM2NDggIC0+ICNhMjM4MDAwMDhjNzhhZjQ4CitkZWNkODAzIGFwcGx5IC0yMTQ3NDgzNjQ5ICAtPiAjYTIzODAwMDA4Yzc4YWY0OQorZGVjZDgwNCBhcHBseSAgMjE0NzQ4MzY0NiAgLT4gIzIyMzgwMDAwOGM3OGFmNDYKK2RlY2Q4MDUgYXBwbHkgIDIxNDc0ODM2NDcgIC0+ICMyMjM4MDAwMDhjNzhhZjQ3CitkZWNkODA2IGFwcGx5ICAyMTQ3NDgzNjQ4ICAtPiAjMjIzODAwMDA4Yzc4YWY0OAorZGVjZDgwNyBhcHBseSAgMjE0NzQ4MzY0OSAgLT4gIzIyMzgwMDAwOGM3OGFmNDkKK2RlY2Q4MDggYXBwbHkgIDQyOTQ5NjcyOTQgIC0+ICMyMjM4MDAwMTE1YWZiNTVhCitkZWNkODA5IGFwcGx5ICA0Mjk0OTY3Mjk1ICAtPiAjMjIzODAwMDExNWFmYjU1YgorZGVjZDgxMCBhcHBseSAgNDI5NDk2NzI5NiAgLT4gIzIyMzgwMDAxMTVhZmI1N2EKK2RlY2Q4MTEgYXBwbHkgIDQyOTQ5NjcyOTcgIC0+ICMyMjM4MDAwMTE1YWZiNTdiCisKK2RlY2Q4MjAgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ2IC0+IC0yMTQ3NDgzNjQ2CitkZWNkODIxIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0NyAtPiAtMjE0NzQ4MzY0NworZGVjZDgyMiBhcHBseSAgI2EyMzgwMDAwOGM3OGFmNDggLT4gLTIxNDc0ODM2NDgKK2RlY2Q4MjMgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ5IC0+IC0yMTQ3NDgzNjQ5CitkZWNkODI0IGFwcGx5ICAjMjIzODAwMDA4Yzc4YWY0NiAtPiAgMjE0NzQ4MzY0NgorZGVjZDgyNSBhcHBseSAgIzIyMzgwMDAwOGM3OGFmNDcgLT4gIDIxNDc0ODM2NDcKK2RlY2Q4MjYgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ4IC0+ICAyMTQ3NDgzNjQ4CitkZWNkODI3IGFwcGx5ICAjMjIzODAwMDA4Yzc4YWY0OSAtPiAgMjE0NzQ4MzY0OQorZGVjZDgyOCBhcHBseSAgIzIyMzgwMDAxMTVhZmI1NWEgLT4gIDQyOTQ5NjcyOTQKK2RlY2Q4MjkgYXBwbHkgICMyMjM4MDAwMTE1YWZiNTViIC0+ICA0Mjk0OTY3Mjk1CitkZWNkODMwIGFwcGx5ICAjMjIzODAwMDExNWFmYjU3YSAtPiAgNDI5NDk2NzI5NgorZGVjZDgzMSBhcHBseSAgIzIyMzgwMDAxMTVhZmI1N2IgLT4gIDQyOTQ5NjcyOTcKKworLS0gZm9yIG5hcnJvd2luZworZGVjZDg0MCBhcHBseSAgIzI4NzAwMDAwMDAwMDAwMDAgLT4gIDIuMDAwMDAwMDAwMDAwMDAwRS05OQorCistLSBzb21lIG1pc2NlbGxhbmVvdXMKK2RlY2Q4NTAgYXBwbHkgICMwMDA0MDcwMDAwMDAwMDAwIC0+IDcuMDAwMDAwMDAwMDAwRS0zODUgIFN1Ym5vcm1hbAorZGVjZDg1MSBhcHBseSAgIzAwMDgwMDAwMDAwMjAwMDAgLT4gMS4wMDAwMEUtMzkxICAgICAgICAgU3Vibm9ybWFsCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEZNQS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRk1BLmRlY1Rlc3QKaW5kZXggZjBhY2ZjNy4uOGFlOTJhNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRk1BLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRk1BLmRlY1Rlc3QKQEAgLTEsMTY5OCArMSwxNjk4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZEZNQS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBGdXNlZCBNdWx0aXBseSBBZGQgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBUaGVzZSB0ZXN0cyBjb21wcmVzZSB0aHJlZSBwYXJ0czoNCi0tLSAgIDEuIFNhbml0eSBjaGVja3MgYW5kIG90aGVyIHRocmVlLW9wZXJhbmQgdGVzdHMgKGVzcGVjaWFsbHkgdGhvc2UNCi0tLSAgICAgIHdoZXJlIHRoZSBmdXNlZCBvcGVyYXRpb24gbWFrZXMgYSBkaWZmZXJlbmNlKQ0KLS0tICAgMi4gTXVsdGlwbHkgdGVzdHMgKHRoaXJkIG9wZXJhbmQgaXMgbmV1dHJhbCB6ZXJvIFswRStlbWF4XSkNCi0tLSAgIDMuIEFkZGl0aW9uIHRlc3RzIChmaXJzdCBvcGVyYW5kIGlzIDEpDQotLS0gVGhlIG11bHRpcGx5IGFuZCBhZGRpdGlvbiB0ZXN0cyBhcmUgZXh0ZW5zaXZlIGJlY2F1c2UgRk1BIG1heSBoYXZlDQotLS0gaXRzIG93biBkZWRpY2F0ZWQgbXVsdGlwbGljYXRpb24gb3IgYWRkaXRpb24gcm91dGluZShzKSwgYW5kIHRoZXkNCi0tLSBhbHNvIGluaGVyZW50bHkgY2hlY2sgdGhlIGxlZnQtdG8tcmlnaHQgcHJvcGVydGllcy4NCi0NCi0tLSBTYW5pdHkgY2hlY2tzDQotZGRmbWEwMDAxIGZtYSAgMSAgIDEgICAxIC0+ICAgMg0KLWRkZm1hMDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMNCi1kZGZtYTAwMDMgZm1hICAyICAgMiAgIDMgLT4gICA3DQotZGRmbWEwMDA0IGZtYSAgOSAgIDkgICA5IC0+ICA5MA0KLWRkZm1hMDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDANCi1kZGZtYTAwMDYgZm1hIC0xICAgMSAgIDIgLT4gICAxDQotZGRmbWEwMDA3IGZtYSAtMiAgIDIgICAzIC0+ICAtMQ0KLWRkZm1hMDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzINCi1kZGZtYTAwMTEgZm1hICAxICAtMSAgIDEgLT4gICAwDQotZGRmbWEwMDEyIGZtYSAgMSAgLTEgICAyIC0+ICAgMQ0KLWRkZm1hMDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTENCi1kZGZtYTAwMTQgZm1hICA5ICAtOSAgIDkgLT4gLTcyDQotZGRmbWEwMDE1IGZtYSAgMSAgIDEgIC0xIC0+ICAgMA0KLWRkZm1hMDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTENCi1kZGZtYTAwMTcgZm1hICAyICAgMiAgLTMgLT4gICAxDQotZGRmbWEwMDE4IGZtYSAgOSAgIDkgIC05IC0+ICA3Mg0KLQ0KLS0tIG5vbi1pbnRlZ2VyIGV4YWN0cw0KLWRkZm1hMDEwMCAgZm1hICAgIDI1LjIgICA2My42ICAgLTQzOCAgLT4gIDExNjQuNzINCi1kZGZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwDQotZGRmbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44Ng0KLWRkZm1hMDEwMyAgZm1hICAgIDQuMjIgIDAuMDc5ICAtOTQuNiAgLT4gIC05NC4yNjY2Mg0KLWRkZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgNCi1kZGZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzDQotZGRmbWEwMTA2ICBmbWEgICAgMjguMiAgICA3MjcgICA1LjQ1ICAtPiAgMjA1MDYuODUNCi1kZGZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4DQotZGRmbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzDQotZGRmbWEwMTA5ICBmbWEgICAwLjE2OSAgIC0zNDEgICA1LjYxICAtPiAgLTUyLjAxOQ0KLWRkZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjINCi1kZGZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMNCi1kZGZtYTAxMTIgIGZtYSAgICAgMzE3ICAgNzcuMCAgIDE5LjAgIC0+ICAyNDQyOC4wDQotZGRmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4DQotZGRmbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNA0KLWRkZm1hMDExNSAgZm1hICAgIDcyLjcgICAgMjc0ICAgMS41NiAgLT4gIDE5OTIxLjM2DQotZGRmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4DQotZGRmbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMg0KLWRkZm1hMDExOCAgZm1hICAgLTMuODcgICAzLjA2ICAgNzguMCAgLT4gIDY2LjE1NzgNCi1kZGZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0DQotZGRmbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTENCi0NCi0tLSBjYXNlcyB3aGVyZSByZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gc2VwYXJhdGUgbXVsdGlwbHkgKyBhZGQ7IGVhY2gNCi0tLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZA0KLS0tIFt0aGlzIGlzIGFib3V0IDIwJSBvZiBhbGwgc2ltaWxhciAgY2FzZXMgaW4gZ2VuZXJhbF0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNy4xMjMzNTY0MjkyNTc5NjlFKzE2DQotZGRmbWEwMjAxICBmbWEgICAgICAgMjc1ODM0ODkuNjY0NSAgICAgIDI1ODI0NzEwNzguMDQgICAgICAyNTkzMTgzLjQyMzcxICAtPiAgNy4xMjMzNTY0MjkyNTc5NzBFKzE2ICBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMjI4MTMyNzUzMjguODA1MDYNCi1kZGZtYTAyMDggIGZtYSAgICAgICAgMjQyODAuMzU1NTY2ICAgICAgOTM5NTc3LjM5NzY1MyAgICAgICAgMjAzMi4wMTMyNTIgIC0+ICAyMjgxMzI3NTMyOC44MDUwNyAgICAgIEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi4wMzAzOTc3MzQyNzgwNjJFKzE2DQotZGRmbWEwMjA5ICBmbWEgICAgICAgICAgNzg0ODk3NjQzMiAgICAgIC0yNTg2ODMxLjIyODEgICAgICAxMzc5MDMuNTE3OTA5ICAtPiAgLTIuMDMwMzk3NzM0Mjc4MDYxRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMjA0MDc3NDA5NDgxNC4wNzcNCi1kZGZtYTAyMTcgIGZtYSAgICAgICAgNTY4OTAuMzg4NzMxICAgICAgMzU4NzIwMzAuNDI1NSAgICAgIDMzOTMzNy4xMjM0MTAgIC0+ICAyMDQwNzc0MDk0ODE0LjA3OCAgICAgIEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAyLjcxNDQ2OTU3NTIwNTA0OUUrMTgNCi1kZGZtYTAyMjAgIGZtYSAgICAgICA3NTMzNTQzLjU3NDQ1ICAgICAgIDM2MDMxNzc2MzkyOCAgICAgIDUwNzMzOTIuMzE2MzggIC0+ICAyLjcxNDQ2OTU3NTIwNTA1MEUrMTggIEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjAxMTY3NjI5NzcxNjcxNkUrMTkNCi1kZGZtYTAyMjMgIGZtYSAgICAgICA3Mzk5NDUyNTUuNTYzICAgICAgMTM2NzIzMTI3ODQuMSAgICAgIC05OTQzODEuNTM1NzIgIC0+ICAxLjAxMTY3NjI5NzcxNjcxNUUrMTkgIEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi45MTQxMzU3MjE0NTUzMTVFKzIzDQotZGRmbWEwMjI0ICBmbWEgICAgICAgLTQxMzUxMDk1NzIxOCAgICAgICA3MDQ3Mjk5ODg1NTAgICAgICAgOTIzNDE2MjYxNC4wICAtPiAgLTIuOTE0MTM1NzIxNDU1MzE0RSsyMyBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMi42MjAxMTk4NjMzNjU3ODZFKzE3DQotZGRmbWEwMjI2ICBmbWEgICAgICAgIDQzNzQ4NC4wMDYwMSAgICAgICA1OTg5MDY0MzI3OTAgICAgICA4OTQ0NTA2MzguNDQyICAtPiAgMi42MjAxMTk4NjMzNjU3ODdFKzE3ICBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS4yNzI2NDc5OTU4MDgxNzhFKzE5DQotZGRmbWEwMjUzICBmbWEgICAgICAgICA3MzI4NzU1NjkyOSAgICAgIDE3MzY1MTMwNS43ODQgICAgIC0zNTgzMTI1NjguMzg5ICAtPiAgMS4yNzI2NDc5OTU4MDgxNzdFKzE5ICBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTEuNzUzNzY5MzIwODYxODUxRSsxOA0KLWRkZm1hMDI1NyAgZm1hICAgICAgICAyMDMyNTgzMDQ0ODYgICAgICAtODYyODI3OC44MDY2ICAgICAgMTUzMTI3LjQ0NjcyNyAgLT4gIC0xLjc1Mzc2OTMyMDg2MTg1MEUrMTggSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0xLjU1MDczNzgzNTI2MzM0NkUrMTcNCi1kZGZtYTAyNjAgIGZtYSAgICAgICA0MjU2MDUzMy4xNzc0ICAgICAtMzY0MzYwNTI4Mi44NiAgICAgICAxNzgyNzcuOTYzNzcgIC0+ICAtMS41NTA3Mzc4MzUyNjMzNDdFKzE3IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAyLjg5NzYyNDYyMDU3NjAwNUUrMjINCi1kZGZtYTAyNjkgIGZtYSAgICAgICAgMTQyNjU2NTg3Mzc1ICAgICAgIDIwMzExODg3OTY3MCAgICAgICA2MDQ1NzYxMDM5OTEgIC0+ICAyLjg5NzYyNDYyMDU3NjAwNEUrMjIgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIENhc2VzIHdoZXJlIG11bHRpcGx5IHdvdWxkIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBpZiBzZXBhcmF0ZQ0KLWZtYTAzMDAgIGZtYSAgIDllKzM4NCAgICAxMCAgIDAgICAgICAgICAtPiBJbmZpbml0eSAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1hMDMwMSAgZm1hICAgMWUrMzg0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWEwMzAyICBmbWEgICAxZSszODQgICAgMTAgICAtMWUrMzg0ICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZA0KLWZtYTAzMDMgIGZtYSAgIDFlKzM4NCAgICAxMCAgIC05ZSszODQgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkDQotLS0gc3Vibm9ybWFsIGV0Yy4NCi1mbWEwMzA1ICBmbWEgICAxZS0zOTggICAgMC4xICAwICAgICAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1mbWEwMzA2ICBmbWEgICAxZS0zOTggICAgMC4xICAxICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1hMDMwNyAgZm1hICAgMWUtMzk4ICAgIDAuMSAgMWUtMzk4ICAgIC0+IDFFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEluZmluaXRlIGNvbWJpbmF0aW9ucw0KLWRkZm1hMDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkNCi1kZGZtYTA4MDEgZm1hICBJbmYgICBJbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMDgwMiBmbWEgIEluZiAgLUluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMDgwNCBmbWEgLUluZiAgIEluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEwODA1IGZtYSAtSW5mICAgSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkNCi1kZGZtYTA4MDcgZm1hIC1JbmYgIC1JbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24NCi1kZGZtYTA5MDAgZm1hICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjINCi1kZGZtYTA5MDEgZm1hICAwICAgICBOYU4zICBOYU41ICAgLT4gIE5hTjMNCi1kZGZtYTA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUNCi0tLSBmaXJzdCBzTmFOIHdpbnMgKGNvbnNpZGVyIHFOYU4gZnJvbSBlYXJsaWVyIHNOYU4gYmVpbmcNCi0tLSBvdmVycmlkZGVuIGJ5IGFuIHNOYU4gaW4gdGhpcmQgb3BlcmFuZCkNCi1kZGZtYTA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTA5MDUgZm1hICAwICAgICAwICAgICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTA5MDggZm1hICBOYU43ICBOYU41ICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBNVUxUSVBMSUNBVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRmbWEyMDAwIGZtYSAgMiAgICAgIDIgICAwZSszODQgIC0+ICA0DQotZGRmbWEyMDAxIGZtYSAgMiAgICAgIDMgICAwZSszODQgIC0+ICA2DQotZGRmbWEyMDAyIGZtYSAgNSAgICAgIDEgICAwZSszODQgIC0+ICA1DQotZGRmbWEyMDAzIGZtYSAgNSAgICAgIDIgICAwZSszODQgIC0+ICAxMA0KLWRkZm1hMjAwNCBmbWEgIDEuMjAgICAyICAgMGUrMzg0ICAtPiAgMi40MA0KLWRkZm1hMjAwNSBmbWEgIDEuMjAgICAwICAgMGUrMzg0ICAtPiAgMC4wMA0KLWRkZm1hMjAwNiBmbWEgIDEuMjAgIC0yICAgMGUrMzg0ICAtPiAgLTIuNDANCi1kZGZtYTIwMDcgZm1hICAtMS4yMCAgMiAgIDBlKzM4NCAgLT4gIC0yLjQwDQotZGRmbWEyMDA4IGZtYSAgLTEuMjAgIDAgICAwZSszODQgIC0+ICAwLjAwDQotZGRmbWEyMDA5IGZtYSAgLTEuMjAgLTIgICAwZSszODQgIC0+ICAyLjQwDQotZGRmbWEyMDEwIGZtYSAgNS4wOSA3LjEgICAwZSszODQgIC0+ICAzNi4xMzkNCi1kZGZtYTIwMTEgZm1hICAyLjUgICAgNCAgIDBlKzM4NCAgLT4gIDEwLjANCi1kZGZtYTIwMTIgZm1hICAyLjUwICAgNCAgIDBlKzM4NCAgLT4gIDEwLjAwDQotZGRmbWEyMDEzIGZtYSAgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwICAgMGUrMzg0ICAtPiAgMS4yMzQ1Njc4OTAwMDAwMDAgUm91bmRlZA0KLWRkZm1hMjAxNSBmbWEgIDIuNTAgICA0ICAgMGUrMzg0ICAtPiAgMTAuMDANCi1kZGZtYTIwMTYgZm1hICAgOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjAxNyBmbWEgICA5Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyMDE4IGZtYSAgLTkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gIC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTIwMTkgZm1hICAtOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHplcm9zLCBldGMuDQotZGRmbWEyMDIxIGZtYSAgIDAgICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwDQotZGRmbWEyMDIyIGZtYSAgIDAgICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwDQotZGRmbWEyMDIzIGZtYSAgLTAgICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwDQotZGRmbWEyMDI0IGZtYSAgLTAgICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwDQotZGRmbWEyMDI1IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQotZGRmbWEyMDI2IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQotZGRmbWEyMDI3IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQotZGRmbWEyMDI4IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQotZGRmbWEyMDMwIGZtYSAgIDUuMDAgICAxRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwNTAwDQotZGRmbWEyMDMxIGZtYSAgIDAwLjAwICAwLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwDQotZGRmbWEyMDMyIGZtYSAgIDAwLjAwICAwRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWRkZm1hMjAzMyBmbWEgICAwRS0zICAgMDAuMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi1kZGZtYTIwMzQgZm1hICAtNS4wMCAgIDFFLTMgICAgMGUrMzg0ICAtPiAgLTAuMDA1MDANCi1kZGZtYTIwMzUgZm1hICAtMDAuMDAgIDAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDANCi1kZGZtYTIwMzYgZm1hICAtMDAuMDAgIDBFLTMgICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZGRmbWEyMDM3IGZtYSAgLTBFLTMgICAwMC4wMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWRkZm1hMjAzOCBmbWEgICA1LjAwICAtMUUtMyAgICAwZSszODQgIC0+ICAtMC4wMDUwMA0KLWRkZm1hMjAzOSBmbWEgICAwMC4wMCAtMC4wMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMA0KLWRkZm1hMjA0MCBmbWEgICAwMC4wMCAtMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kZGZtYTIwNDEgZm1hICAgMEUtMyAgLTAwLjAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotZGRmbWEyMDQyIGZtYSAgLTUuMDAgIC0xRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwNTAwDQotZGRmbWEyMDQzIGZtYSAgLTAwLjAwIC0wLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwDQotZGRmbWEyMDQ0IGZtYSAgLTAwLjAwIC0wRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWRkZm1hMjA0NSBmbWEgIC0wRS0zICAtMDAuMDAgIC0wZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi1kZGZtYTIwNDYgZm1hICAtMEUtMyAgIDAwLjAwICAtMGUrMzg0ICAtPiAgLTAuMDAwMDANCi1kZGZtYTIwNDcgZm1hICAgMEUtMyAgLTAwLjAwICAtMGUrMzg0ICAtPiAgLTAuMDAwMDANCi1kZGZtYTIwNDggZm1hICAgMEUtMyAgIDAwLjAwICAtMGUrMzg0ICAtPiAgIDAuMDAwMDANCi0NCi0tLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoDQotZGRmbWEyMDUwIGZtYSAgMS4yMCAzICAgICAgICAgIDBlKzM4NCAgLT4gIDMuNjANCi1kZGZtYTIwNTEgZm1hICA3ICAgIDMgICAgICAgICAgMGUrMzg0ICAtPiAgMjENCi1kZGZtYTIwNTIgZm1hICAwLjkgIDAuOCAgICAgICAgMGUrMzg0ICAtPiAgMC43Mg0KLWRkZm1hMjA1MyBmbWEgIDAuOSAgLTAgICAgICAgICAwZSszODQgIC0+ICAwLjANCi1kZGZtYTIwNTQgZm1hICA2NTQzMjEgNjU0MzIxICAgMGUrMzg0ICAtPiAgNDI4MTM1OTcxMDQxDQotDQotZGRmbWEyMDYwIGZtYSAgMTIzLjQ1IDFlNyAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSs5DQotZGRmbWEyMDYxIGZtYSAgMTIzLjQ1IDFlOCAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMA0KLWRkZm1hMjA2MiBmbWEgIDEyMy40NSAxZSs5ICAgMGUrMzg0ICAtPiAgIDEuMjM0NUUrMTENCi1kZGZtYTIwNjMgZm1hICAxMjMuNDUgMWUxMCAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEyDQotZGRmbWEyMDY0IGZtYSAgMTIzLjQ1IDFlMTEgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMw0KLWRkZm1hMjA2NSBmbWEgIDEyMy40NSAxZTEyICAgMGUrMzg0ICAtPiAgIDEuMjM0NUUrMTQNCi1kZGZtYTIwNjYgZm1hICAxMjMuNDUgMWUxMyAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzE1DQotDQotDQotLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzDQotLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGZtYTIwODAgZm1hICAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgICAwZSszODQgIC0+ICAxMjMwMTIzNDU2NDU2NzguOQ0KLWRkZm1hMjA4NCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzM4NCAgLT4gIDEyMzAxMjM0NTY0NTY3OC45DQotZGRmbWEyMDkwIGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkNCi1kZGZtYTIwOTQgZm1hICAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgICAwZSszODQgIC0+ICAxMjMwMTIzNDU2NDU2NzguOQ0KLQ0KLS0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMNCi1kZGZtYTIxMDEgZm1hICA5IDkgICAgIDBlKzM4NCAgLT4gIDgxDQotZGRmbWEyMTAyIGZtYSAgOSA5MCAgICAgMGUrMzg0ICAtPiAgODEwDQotZGRmbWEyMTAzIGZtYSAgOSA5MDAgICAgIDBlKzM4NCAgLT4gIDgxMDANCi1kZGZtYTIxMDQgZm1hICA5IDkwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwDQotZGRmbWEyMTA1IGZtYSAgOSA5MDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwDQotZGRmbWEyMTA2IGZtYSAgOSA5MDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDANCi1kZGZtYTIxMDcgZm1hICA5IDkwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwDQotZGRmbWEyMTA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwDQotZGRmbWEyMTA5IGZtYSAgOSA5MDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDANCi1kZGZtYTIxMTAgZm1hICA5IDkwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwDQotZGRmbWEyMTExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwDQotZGRmbWEyMTEyIGZtYSAgOSA5MDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDANCi1kZGZtYTIxMTMgZm1hICA5IDkwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwDQotZGRmbWEyMTE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwDQotZGRmbWEyMTE1IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDANCi0tLWRkZm1hMjExNiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDANCi0tLWRkZm1hMjExNyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMA0KLS0tZGRmbWEyMTE4IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRkZm1hMjExOSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRkZm1hMjEyMCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZGRmbWEyMTIxIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRkZm1hMjEyMiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRkZm1hMjEyMyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzDQotZGRmbWEyMTMxIGZtYSAgMyAzICAgICAwZSszODQgIC0+ICA5DQotZGRmbWEyMTMyIGZtYSAgMyAzMCAgICAgMGUrMzg0ICAtPiAgOTANCi1kZGZtYTIxMzMgZm1hICAzIDMwMCAgICAgMGUrMzg0ICAtPiAgOTAwDQotZGRmbWEyMTM0IGZtYSAgMyAzMDAwICAgICAwZSszODQgIC0+ICA5MDAwDQotZGRmbWEyMTM1IGZtYSAgMyAzMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDANCi1kZGZtYTIxMzYgZm1hICAzIDMwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwDQotZGRmbWEyMTM3IGZtYSAgMyAzMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwDQotZGRmbWEyMTM4IGZtYSAgMyAzMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDANCi1kZGZtYTIxMzkgZm1hICAzIDMwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwDQotZGRmbWEyMTQwIGZtYSAgMyAzMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAwDQotZGRmbWEyMTQxIGZtYSAgMyAzMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDANCi1kZGZtYTIxNDIgZm1hICAzIDMwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwDQotZGRmbWEyMTQzIGZtYSAgMyAzMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAwMDAwDQotZGRmbWEyMTQ0IGZtYSAgMyAzMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMDANCi1kZGZtYTIxNDUgZm1hICAzIDMwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMDAwDQotDQotLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZw0KLWRkZm1hMjMwMSBmbWEgIDkgOSAgICAgMGUrMzg0ICAtPiAgODENCi1kZGZtYTIzMDIgZm1hICA5IDkwICAgICAwZSszODQgIC0+ICA4MTANCi1kZGZtYTIzMDMgZm1hICA5IDkwMCAgICAgMGUrMzg0ICAtPiAgODEwMA0KLWRkZm1hMjMwNCBmbWEgIDkgOTAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDANCi1kZGZtYTIzMDUgZm1hICA5IDkwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDANCi1kZGZtYTIzMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMA0KLWRkZm1hMjMwNyBmbWEgIDkgOTAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDANCi1kZGZtYTIzMDggZm1hICA5IDkwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDANCi1kZGZtYTIzMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMA0KLWRkZm1hMjMxMCBmbWEgIDkgOTAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDANCi1kZGZtYTIzMTEgZm1hICA5IDkwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDANCi1kZGZtYTIzMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMA0KLWRkZm1hMjMxMyBmbWEgIDkgOTAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDANCi1kZGZtYTIzMTQgZm1hICA5IDkwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDANCi1kZGZtYTIzMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMA0KLWRkZm1hMjMxNiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkDQotZGRmbWEyMzE3IGZtYSAgOTAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzE3ICBSb3VuZGVkDQotZGRmbWEyMzE4IGZtYSAgOTAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxOCAgUm91bmRlZA0KLWRkZm1hMjMxOSBmbWEgIDkwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzE5ICBSb3VuZGVkDQotZGRmbWEyMzIwIGZtYSAgOTAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzIwICBSb3VuZGVkDQotZGRmbWEyMzIxIGZtYSAgOTAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMSAgUm91bmRlZA0KLWRkZm1hMjMyMiBmbWEgIDkwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzIyICBSb3VuZGVkDQotZGRmbWEyMzIzIGZtYSAgOTAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzIzICBSb3VuZGVkDQotDQotLS0gdHJ5emVyb3MgY2FzZXMNCi1kZGZtYTI1MDQgIGZtYSAgIDBFLTI2MCAxMDAwRS0yNjAgICAgMGUrMzg0ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1kZGZtYTI1MDUgIGZtYSAgIDEwMEUrMjYwIDBFKzI2MCAgICAgMGUrMzg0ICAtPiAgMEUrMzY5IENsYW1wZWQNCi0NCi0tLSBtaXhlZCB3aXRoIHplcm9zDQotZGRmbWEyNTQxIGZtYSAgIDAgICAgLTEgICAgICAgMGUrMzg0ICAtPiAgIDANCi1kZGZtYTI1NDIgZm1hICAtMCAgICAtMSAgICAgICAwZSszODQgIC0+ICAgMA0KLWRkZm1hMjU0MyBmbWEgICAwICAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwDQotZGRmbWEyNTQ0IGZtYSAgLTAgICAgIDEgICAgICAgMGUrMzg0ICAtPiAgIDANCi1kZGZtYTI1NDUgZm1hICAtMSAgICAgMCAgICAgICAwZSszODQgIC0+ICAgMA0KLWRkZm1hMjU0NiBmbWEgIC0xICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwDQotZGRmbWEyNTQ3IGZtYSAgIDEgICAgIDAgICAgICAgMGUrMzg0ICAtPiAgIDANCi1kZGZtYTI1NDggZm1hICAgMSAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMA0KLQ0KLWRkZm1hMjU1MSBmbWEgICAwLjAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwLjANCi1kZGZtYTI1NTIgZm1hICAtMC4wICAtMSAgICAgICAwZSszODQgIC0+ICAgMC4wDQotZGRmbWEyNTUzIGZtYSAgIDAuMCAgIDEgICAgICAgMGUrMzg0ICAtPiAgIDAuMA0KLWRkZm1hMjU1NCBmbWEgIC0wLjAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwLjANCi1kZGZtYTI1NTUgZm1hICAtMS4wICAgMCAgICAgICAwZSszODQgIC0+ICAgMC4wDQotZGRmbWEyNTU2IGZtYSAgLTEuMCAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDAuMA0KLWRkZm1hMjU1NyBmbWEgICAxLjAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwLjANCi1kZGZtYTI1NTggZm1hICAgMS4wICAtMCAgICAgICAwZSszODQgIC0+ICAgMC4wDQotDQotZGRmbWEyNTYxIGZtYSAgIDAgICAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMA0KLWRkZm1hMjU2MiBmbWEgIC0wICAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjANCi1kZGZtYTI1NjMgZm1hICAgMCAgICAgMS4wICAgICAwZSszODQgIC0+ICAgMC4wDQotZGRmbWEyNTY0IGZtYSAgLTAgICAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMA0KLWRkZm1hMjU2NSBmbWEgIC0xICAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjANCi1kZGZtYTI1NjYgZm1hICAtMSAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wDQotZGRmbWEyNTY3IGZtYSAgIDEgICAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMA0KLWRkZm1hMjU2OCBmbWEgICAxICAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjANCi0NCi1kZGZtYTI1NzEgZm1hICAgMC4wICAtMS4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KLWRkZm1hMjU3MiBmbWEgIC0wLjAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQotZGRmbWEyNTczIGZtYSAgIDAuMCAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDANCi1kZGZtYTI1NzQgZm1hICAtMC4wICAgMS4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KLWRkZm1hMjU3NSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQotZGRmbWEyNTc2IGZtYSAgLTEuMCAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDANCi1kZGZtYTI1NzcgZm1hICAgMS4wICAgMC4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KLWRkZm1hMjU3OCBmbWEgICAxLjAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQotDQotLS0gU3BlY2lhbHMNCi1kZGZtYTI1ODAgZm1hICAgSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCi1kZGZtYTI1ODEgZm1hICAgSW5mICAtMTAwMCAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCi1kZGZtYTI1ODIgZm1hICAgSW5mICAtMSAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCi1kZGZtYTI1ODMgZm1hICAgSW5mICAtMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjU4NCBmbWEgICBJbmYgICAwICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNTg1IGZtYSAgIEluZiAgIDEgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5DQotZGRmbWEyNTg2IGZtYSAgIEluZiAgIDEwMDAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5DQotZGRmbWEyNTg3IGZtYSAgIEluZiAgIEluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5DQotZGRmbWEyNTg4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNTg5IGZtYSAgLUluZiAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNTkwIGZtYSAgLTEgICAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNTkxIGZtYSAgLTAgICAgIEluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI1OTIgZm1hICAgMCAgICAgSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjU5MyBmbWEgICAxICAgICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KLWRkZm1hMjU5NCBmbWEgICAxMDAwICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KLWRkZm1hMjU5NSBmbWEgICBJbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KLQ0KLWRkZm1hMjYwMCBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KLWRkZm1hMjYwMSBmbWEgIC1JbmYgIC0xMDAwICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KLWRkZm1hMjYwMiBmbWEgIC1JbmYgIC0xICAgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KLWRkZm1hMjYwMyBmbWEgIC1JbmYgIC0wICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjA0IGZtYSAgLUluZiAgIDAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2MDUgZm1hICAtSW5mICAgMSAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCi1kZGZtYTI2MDYgZm1hICAtSW5mICAgMTAwMCAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCi1kZGZtYTI2MDcgZm1hICAtSW5mICAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCi1kZGZtYTI2MDggZm1hICAtMTAwMCAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCi1kZGZtYTI2MDkgZm1hICAtSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkNCi1kZGZtYTI2MTAgZm1hICAtMSAgICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkNCi1kZGZtYTI2MTEgZm1hICAtMCAgICAtSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjYxMiBmbWEgICAwICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjEzIGZtYSAgIDEgICAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNjE0IGZtYSAgIDEwMDAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNjE1IGZtYSAgIEluZiAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotDQotZGRmbWEyNjIxIGZtYSAgIE5hTiAtSW5mICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYyMiBmbWEgICBOYU4gLTEwMDAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MjMgZm1hICAgTmFOIC0xICAgICAgICAwZSszODQgIC0+ICAgTmFODQotZGRmbWEyNjI0IGZtYSAgIE5hTiAtMCAgICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYyNSBmbWEgICBOYU4gIDAgICAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MjYgZm1hICAgTmFOICAxICAgICAgICAwZSszODQgIC0+ICAgTmFODQotZGRmbWEyNjI3IGZtYSAgIE5hTiAgMTAwMCAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYyOCBmbWEgICBOYU4gIEluZiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MjkgZm1hICAgTmFOICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFODQotZGRmbWEyNjMwIGZtYSAgLUluZiAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYzMSBmbWEgIC0xMDAwIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MzIgZm1hICAtMSAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFODQotZGRmbWEyNjMzIGZtYSAgLTAgICAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYzNCBmbWEgICAwICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MzUgZm1hICAgMSAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFODQotZGRmbWEyNjM2IGZtYSAgIDEwMDAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYzNyBmbWEgICBJbmYgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi0NCi1kZGZtYTI2NDEgZm1hICAgc05hTiAtSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY0MiBmbWEgICBzTmFOIC0xMDAwICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjQzIGZtYSAgIHNOYU4gLTEgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NDQgZm1hICAgc05hTiAtMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY0NSBmbWEgICBzTmFOICAwICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjQ2IGZtYSAgIHNOYU4gIDEgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NDcgZm1hICAgc05hTiAgMTAwMCAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY0OCBmbWEgICBzTmFOICBOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjQ5IGZtYSAgIHNOYU4gc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NTAgZm1hICAgTmFOICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY1MSBmbWEgIC1JbmYgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjUyIGZtYSAgLTEwMDAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NTMgZm1hICAtMSAgICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY1NCBmbWEgIC0wICAgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjU1IGZtYSAgIDAgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NTYgZm1hICAgMSAgICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY1NyBmbWEgICAxMDAwIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjU4IGZtYSAgIEluZiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NTkgZm1hICAgTmFOICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZGZtYTI2NjEgZm1hICAgTmFOOSAtSW5mICAgICAwZSszODQgIC0+ICAgTmFOOQ0KLWRkZm1hMjY2MiBmbWEgICBOYU44ICA5OTkgICAgIDBlKzM4NCAgLT4gICBOYU44DQotZGRmbWEyNjYzIGZtYSAgIE5hTjcxIEluZiAgICAgMGUrMzg0ICAtPiAgIE5hTjcxDQotZGRmbWEyNjY0IGZtYSAgIE5hTjYgIE5hTjUgICAgMGUrMzg0ICAtPiAgIE5hTjYNCi1kZGZtYTI2NjUgZm1hICAtSW5mICAgTmFONCAgICAwZSszODQgIC0+ICAgTmFONA0KLWRkZm1hMjY2NiBmbWEgIC05OTkgICBOYU4zMyAgIDBlKzM4NCAgLT4gICBOYU4zMw0KLWRkZm1hMjY2NyBmbWEgICBJbmYgICBOYU4yICAgIDBlKzM4NCAgLT4gICBOYU4yDQotDQotZGRmbWEyNjcxIGZtYSAgIHNOYU45OSAtSW5mICAgICAgMGUrMzg0ICAtPiAgIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjcyIGZtYSAgIHNOYU45OCAtMTEgICAgICAgMGUrMzg0ICAtPiAgIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjczIGZtYSAgIHNOYU45NyAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjc0IGZtYSAgIHNOYU4xNiBzTmFOOTQgICAgMGUrMzg0ICAtPiAgIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjc1IGZtYSAgIE5hTjk1ICBzTmFOOTMgICAgMGUrMzg0ICAtPiAgIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjc2IGZtYSAgLUluZiAgICBzTmFOOTIgICAgMGUrMzg0ICAtPiAgIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjc3IGZtYSAgIDA4OCAgICBzTmFOOTEgICAgMGUrMzg0ICAtPiAgIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjc4IGZtYSAgIEluZiAgICBzTmFOOTAgICAgMGUrMzg0ICAtPiAgIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjc5IGZtYSAgIE5hTiAgICBzTmFOODkgICAgMGUrMzg0ICAtPiAgIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRmbWEyNjgxIGZtYSAgLU5hTjkgLUluZiAgICAgMGUrMzg0ICAtPiAgLU5hTjkNCi1kZGZtYTI2ODIgZm1hICAtTmFOOCAgOTk5ICAgICAwZSszODQgIC0+ICAtTmFOOA0KLWRkZm1hMjY4MyBmbWEgIC1OYU43MSBJbmYgICAgIDBlKzM4NCAgLT4gIC1OYU43MQ0KLWRkZm1hMjY4NCBmbWEgIC1OYU42IC1OYU41ICAgIDBlKzM4NCAgLT4gIC1OYU42DQotZGRmbWEyNjg1IGZtYSAgLUluZiAgLU5hTjQgICAgMGUrMzg0ICAtPiAgLU5hTjQNCi1kZGZtYTI2ODYgZm1hICAtOTk5ICAtTmFOMzMgICAwZSszODQgIC0+ICAtTmFOMzMNCi1kZGZtYTI2ODcgZm1hICAgSW5mICAtTmFOMiAgICAwZSszODQgIC0+ICAtTmFOMg0KLQ0KLWRkZm1hMjY5MSBmbWEgIC1zTmFOOTkgLUluZiAgICAgIDBlKzM4NCAgLT4gIC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY5MiBmbWEgIC1zTmFOOTggLTExICAgICAgIDBlKzM4NCAgLT4gIC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY5MyBmbWEgIC1zTmFOOTcgIE5hTiAgICAgIDBlKzM4NCAgLT4gIC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY5NCBmbWEgIC1zTmFOMTYgLXNOYU45NCAgIDBlKzM4NCAgLT4gIC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY5NSBmbWEgIC1OYU45NSAgLXNOYU45MyAgIDBlKzM4NCAgLT4gIC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY5NiBmbWEgIC1JbmYgICAgLXNOYU45MiAgIDBlKzM4NCAgLT4gIC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY5NyBmbWEgICAwODggICAgLXNOYU45MSAgIDBlKzM4NCAgLT4gIC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY5OCBmbWEgICBJbmYgICAgLXNOYU45MCAgIDBlKzM4NCAgLT4gIC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY5OSBmbWEgIC1OYU4gICAgLXNOYU44OSAgIDBlKzM4NCAgLT4gIC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkZm1hMjcwMSBmbWEgIC1OYU4gIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1OYU4NCi1kZGZtYTI3MDIgZm1hICAtTmFOICAgOTk5ICAgICAwZSszODQgIC0+ICAtTmFODQotZGRmbWEyNzAzIGZtYSAgLU5hTiAgIEluZiAgICAgMGUrMzg0ICAtPiAgLU5hTg0KLWRkZm1hMjcwNCBmbWEgIC1OYU4gIC1OYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4NCi1kZGZtYTI3MDUgZm1hICAtSW5mICAtTmFOMCAgICAwZSszODQgIC0+ICAtTmFODQotZGRmbWEyNzA2IGZtYSAgLTk5OSAgLU5hTiAgICAgMGUrMzg0ICAtPiAgLU5hTg0KLWRkZm1hMjcwNyBmbWEgICBJbmYgIC1OYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4NCi0NCi1kZGZtYTI3MTEgZm1hICAtc05hTiAgIC1JbmYgICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNzEyIGZtYSAgLXNOYU4gICAtMTEgICAgICAgMGUrMzg0ICAtPiAgLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjcxMyBmbWEgIC1zTmFOMDAgIE5hTiAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI3MTQgZm1hICAtc05hTiAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNzE1IGZtYSAgLU5hTiAgICAtc05hTiAgICAgMGUrMzg0ICAtPiAgLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjcxNiBmbWEgIC1JbmYgICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI3MTcgZm1hICAgMDg4ICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNzE4IGZtYSAgIEluZiAgICAtc05hTiAgICAgMGUrMzg0ICAtPiAgLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjcxOSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMNCi0tLSBzaWducw0KLWRkZm1hMjc1MSBmbWEgICAxZSsyNzcgIDFlKzMxMSAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI3NTIgZm1hICAgMWUrMjc3IC0xZSszMTEgICAwZSszODQgIC0+ICAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyNzUzIGZtYSAgLTFlKzI3NyAgMWUrMzExICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjc1NCBmbWEgIC0xZSsyNzcgLTFlKzMxMSAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI3NTUgZm1hICAgMWUtMjc3ICAxZS0zMTEgICAwZSszODQgIC0+ICAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGZtYTI3NTYgZm1hICAgMWUtMjc3IC0xZS0zMTEgICAwZSszODQgIC0+ICAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGZtYTI3NTcgZm1hICAtMWUtMjc3ICAxZS0zMTEgICAwZSszODQgIC0+ICAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGZtYTI3NTggZm1hICAtMWUtMjc3IC0xZS0zMTEgICAwZSszODQgIC0+ICAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCi1kZGZtYTI3NjAgZm1hICAxZS0yOTEgMWUtMTAxICAgMGUrMzg0ICAtPiAgMUUtMzkyIFN1Ym5vcm1hbA0KLWRkZm1hMjc2MSBmbWEgIDFlLTI5MSAxZS0xMDIgICAwZSszODQgIC0+ICAxRS0zOTMgU3Vibm9ybWFsDQotZGRmbWEyNzYyIGZtYSAgMWUtMjkxIDFlLTEwMyAgIDBlKzM4NCAgLT4gIDFFLTM5NCBTdWJub3JtYWwNCi1kZGZtYTI3NjMgZm1hICAxZS0yOTEgMWUtMTA0ICAgMGUrMzg0ICAtPiAgMUUtMzk1IFN1Ym5vcm1hbA0KLWRkZm1hMjc2NCBmbWEgIDFlLTI5MSAxZS0xMDUgICAwZSszODQgIC0+ICAxRS0zOTYgU3Vibm9ybWFsDQotZGRmbWEyNzY1IGZtYSAgMWUtMjkxIDFlLTEwNiAgIDBlKzM4NCAgLT4gIDFFLTM5NyBTdWJub3JtYWwNCi1kZGZtYTI3NjYgZm1hICAxZS0yOTEgMWUtMTA3ICAgMGUrMzg0ICAtPiAgMUUtMzk4IFN1Ym5vcm1hbA0KLWRkZm1hMjc2NyBmbWEgIDFlLTI5MSAxZS0xMDggICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZm1hMjc2OCBmbWEgIDFlLTI5MSAxZS0xMDkgICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZm1hMjc2OSBmbWEgIDFlLTI5MSAxZS0xMTAgICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLS0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10NCi1kZGZtYTI3NzAgZm1hICAxZSs2MCAxZSszMjEgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMEUrMzgxICBDbGFtcGVkDQotZGRmbWEyNzcxIGZtYSAgMWUrNjAgMWUrMzIyICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwRSszODIgIENsYW1wZWQNCi1kZGZtYTI3NzIgZm1hICAxZSs2MCAxZSszMjMgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQNCi1kZGZtYTI3NzMgZm1hICAxZSs2MCAxZSszMjQgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkDQotZGRmbWEyNzc0IGZtYSAgMWUrNjAgMWUrMzI1ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyNzc1IGZtYSAgMWUrNjAgMWUrMzI2ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyNzc2IGZtYSAgMWUrNjAgMWUrMzI3ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyNzc3IGZtYSAgMWUrNjAgMWUrMzI4ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyNzc4IGZtYSAgMWUrNjAgMWUrMzI5ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyNzc5IGZtYSAgMWUrNjAgMWUrMzMwICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEyODAxIGZtYSAgIDEuMDAwMEUtMzk0ICAxICAgICAgIDBlKzM4NCAgLT4gIDEuMDAwMEUtMzk0IFN1Ym5vcm1hbA0KLWRkZm1hMjgwMiBmbWEgICAxLjAwMEUtMzk0ICAgMWUtMSAgICAwZSszODQgIC0+ICAxLjAwMEUtMzk1ICBTdWJub3JtYWwNCi1kZGZtYTI4MDMgZm1hICAgMS4wMEUtMzk0ICAgIDFlLTIgICAgMGUrMzg0ICAtPiAgMS4wMEUtMzk2ICAgU3Vibm9ybWFsDQotZGRmbWEyODA0IGZtYSAgIDEuMEUtMzk0ICAgICAxZS0zICAgIDBlKzM4NCAgLT4gIDEuMEUtMzk3ICAgIFN1Ym5vcm1hbA0KLWRkZm1hMjgwNSBmbWEgICAxLjBFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRmbWEyODA2IGZtYSAgIDEuM0UtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MDcgZm1hICAgMS41RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgwOCBmbWEgICAxLjdFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyODA5IGZtYSAgIDIuM0UtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MTAgZm1hICAgMi41RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgxMSBmbWEgICAyLjdFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyODEyIGZtYSAgIDEuNDlFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MTMgZm1hICAgMS41MEUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgxNCBmbWEgICAxLjUxRS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyODE1IGZtYSAgIDIuNDlFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MTYgZm1hICAgMi41MEUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgxNyBmbWEgICAyLjUxRS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEyODE4IGZtYSAgIDFFLTM5NCAgICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgU3Vibm9ybWFsDQotZGRmbWEyODE5IGZtYSAgIDNFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZm1hMjgyMCBmbWEgICA1RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGZtYTI4MjEgZm1hICAgN0UtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgyMiBmbWEgICA5RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyODIzIGZtYSAgIDkuOUUtMzk0ICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGZtYTI4MjQgZm1hICAgMUUtMzk0ICAgICAgLTFlLTQgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBTdWJub3JtYWwNCi1kZGZtYTI4MjUgZm1hICAgM0UtMzk0ICAgICAgLTFlLTUgICAgMGUrMzg0ICAtPiAgLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRmbWEyODI2IGZtYSAgLTVFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZm1hMjgyNyBmbWEgICA3RS0zOTQgICAgICAtMWUtNSAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyODI4IGZtYSAgLTlFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MjkgZm1hICAgOS45RS0zOTQgICAgLTFlLTUgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgzMCBmbWEgICAzLjBFLTM5NCAgICAtMWUtNSAgICAwZSszODQgIC0+ICAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi1kZGZtYTI4MzEgZm1hICAgMS4wRS0xOTkgICAgIDFlLTIwMCAgIDBlKzM4NCAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRmbWEyODMyIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0xOTkgICAwZSszODQgIC0+ICAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZGZtYTI4MzMgZm1hICAgMS4wRS0xOTkgICAgIDFlLTE5OCAgIDBlKzM4NCAgLT4gIDEuMEUtMzk3ICAgIFN1Ym5vcm1hbA0KLWRkZm1hMjgzNCBmbWEgICAyLjBFLTE5OSAgICAgMmUtMTk4ICAgMGUrMzg0ICAtPiAgNC4wRS0zOTcgICAgU3Vibm9ybWFsDQotZGRmbWEyODM1IGZtYSAgIDQuMEUtMTk5ICAgICA0ZS0xOTggICAwZSszODQgIC0+ICAxLjYwRS0zOTYgICBTdWJub3JtYWwNCi1kZGZtYTI4MzYgZm1hICAxMC4wRS0xOTkgICAgMTBlLTE5OCAgIDBlKzM4NCAgLT4gIDEuMDAwRS0zOTUgIFN1Ym5vcm1hbA0KLWRkZm1hMjgzNyBmbWEgIDMwLjBFLTE5OSAgICAzMGUtMTk4ICAgMGUrMzg0ICAtPiAgOS4wMDBFLTM5NSAgU3Vibm9ybWFsDQotZGRmbWEyODM4IGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODggICAwZSszODQgIC0+ICAxLjYwMDBFLTM4NCBTdWJub3JtYWwNCi1kZGZtYTI4MzkgZm1hICA0MC4wRS0xOTkgICAgNDBlLTE4NyAgIDBlKzM4NCAgLT4gIDEuNjAwMEUtMzgzDQotZGRmbWEyODQwIGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODYgICAwZSszODQgIC0+ICAxLjYwMDBFLTM4Mg0KLQ0KLS0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aA0KLWRkZm1hMjg3MCBmbWEgIDEwMCAgOS45OTlFKzM4MyAgICAgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWRkZm1hMjg3MSBmbWEgIDEwMCAtOS45OTlFKzM4MyAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZGRmbWEyODcyIGZtYSAgICAgICA5Ljk5OUUrMzgzIDEwMCAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1kZGZtYTI4NzMgZm1hICAgICAgLTkuOTk5RSszODMgMTAwICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLQ0KLS0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQotZGRmbWEyODgxIGZtYSAgIDEuMjM0N0UtMzU1IDEuMjM0N0UtNDAgICAgMGUrMzg0ICAtPiAgIDEuNTI0RS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kZGZtYTI4ODIgZm1hICAgMS4yMzRFLTM1NSAxLjIzNEUtNDAgICAgICAwZSszODQgIC0+ICAgMS41MjNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkZm1hMjg4MyBmbWEgICAxLjIzRS0zNTUgIDEuMjNFLTQwICAgICAgIDBlKzM4NCAgLT4gICAxLjUxM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRmbWEyODg0IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MCAgICAgICAgMGUrMzg0ICAtPiAgIDEuNDRFLTM5NSAgU3Vibm9ybWFsDQotZGRmbWEyODg1IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MSAgICAgICAgMGUrMzg0ICAtPiAgIDEuNDRFLTM5NiAgU3Vibm9ybWFsDQotZGRmbWEyODg2IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MiAgICAgICAgMGUrMzg0ICAtPiAgIDEuNEUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kZGZtYTI4ODcgZm1hICAgMS4yRS0zNTUgICAxLjNFLTQyICAgICAgICAwZSszODQgIC0+ICAgMS42RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWRkZm1hMjg4OCBmbWEgICAxLjNFLTM1NSAgIDEuM0UtNDIgICAgICAgIDBlKzM4NCAgLT4gICAxLjdFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZGRmbWEyODg5IGZtYSAgIDEuM0UtMzU1ICAgMS4zRS00MyAgICAgICAgMGUrMzg0ICAtPiAgICAgMkUtMzk4ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kZGZtYTI4OTAgZm1hICAgMS4zRS0zNTYgICAxLjNFLTQzICAgICAgICAwZSszODQgIC0+ICAgICAwRS0zOTggICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotDQotZGRmbWEyODkxIGZtYSAgIDEuMjM0NUUtMzkgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRmbWEyODkyIGZtYSAgIDEuMjM0NTZFLTM5ICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRmbWEyODkzIGZtYSAgIDEuMjM0NUUtNDAgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRmbWEyODk0IGZtYSAgIDEuMjM0NTZFLTQwICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRmbWEyODk1IGZtYSAgIDEuMjM0NUUtNDEgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRmbWEyODk2IGZtYSAgIDEuMjM0NTZFLTQxICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotDQotLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdw0KLWRkZm1hMjkwMCBmbWEgICAwLjMwMDAwMDAwMDBFLTE5MSAwLjMwMDAwMDAwMDBFLTE5MSAgIDBlKzM4NCAgLT4gIDkuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZA0KLWRkZm1hMjkwMSBmbWEgICAwLjMwMDAwMDAwMDFFLTE5MSAwLjMwMDAwMDAwMDFFLTE5MSAgIDBlKzM4NCAgLT4gIDkuMDAwMDAwMDA2MDAwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWRkZm1hMjkwMiBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWRkZm1hMjkwMyBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5ICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5MDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWRkZm1hMjkwNCBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OSAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWRkZm1hMjkwNSBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLS0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdA0KLWRkZm1hMjkwNiBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAxICAgICAgICAgICAgICAgICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMNCi1kZGZtYTI5MDcgZm1hICAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSszODQgIC0+ICAwLjA5OTk5OTk5OTk5OTk5OTk5DQotLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4NCi1kZGZtYTI5MDggZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotDQotLS0gaHVnZXN0DQotZGRmbWEyOTA5IGZtYSAgIDk5OTk5OTk5OTk5OTk5OTkgOTk5OTk5OTk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk4RSszMSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRmbWEyOTkwIGZtYSAgMTAgICMgICAwZSszODQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI5OTEgZm1hICAgIyAxMCAgIDBlKzM4NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KLS0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLS0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQ0KLWRkZm1hMzAwMSBmbWEgIDEgIDEgICAgICAgMSAgICAgICAtPiAgMg0KLWRkZm1hMzAwMiBmbWEgIDEgIDIgICAgICAgMyAgICAgICAtPiAgNQ0KLWRkZm1hMzAwMyBmbWEgIDEgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQ0KLWRkZm1hMzAwNCBmbWEgIDEgICc1JyAgICAgJy0zJyAgICAtPiAgMg0KLWRkZm1hMzAwNSBmbWEgIDEgICctNScgICAgJy0zJyAgICAtPiAgLTgNCi1kZGZtYTMwMDYgZm1hICAxICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUNCi1kZGZtYTMwMDcgZm1hICAxICAnMC43JyAgICcwLjMnICAgLT4gIDEuMA0KLWRkZm1hMzAwOCBmbWEgIDEgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MA0KLWRkZm1hMzAwOSBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5Jw0KLWRkZm1hMzAxMCBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJw0KLQ0KLS0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZGRmbWEzMDExIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMDEyIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWRkZm1hMzAxMyBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5Jw0KLWRkZm1hMzAxNCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwMTUgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMDE2IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzAxNyBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwMTggZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMDE5IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzAyMCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGZtYTMwMjEgZm1hICAxICAwIDEgLT4gMQ0KLWRkZm1hMzAyMiBmbWEgIDEgIDEgMSAtPiAyDQotZGRmbWEzMDIzIGZtYSAgMSAgMiAxIC0+IDMNCi1kZGZtYTMwMjQgZm1hICAxICAzIDEgLT4gNA0KLWRkZm1hMzAyNSBmbWEgIDEgIDQgMSAtPiA1DQotZGRmbWEzMDI2IGZtYSAgMSAgNSAxIC0+IDYNCi1kZGZtYTMwMjcgZm1hICAxICA2IDEgLT4gNw0KLWRkZm1hMzAyOCBmbWEgIDEgIDcgMSAtPiA4DQotZGRmbWEzMDI5IGZtYSAgMSAgOCAxIC0+IDkNCi1kZGZtYTMwMzAgZm1hICAxICA5IDEgLT4gMTANCi0NCi0tLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMNCi1kZGZtYTMwMzEgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcNCi1kZGZtYTMwMzIgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScNCi1kZGZtYTMwMzMgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcNCi1kZGZtYTMwMzQgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScNCi0NCi1kZGZtYTMwMzUgZm1hICAxICAnNzAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwMzYgZm1hICAxICAnNzAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMDM3IGZtYSAgMSAgJzcwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwMzggZm1hICAxICAnNzAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwMzkgZm1hICAxICAnNzAwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZA0KLQ0KLS0tIHN5bW1ldHJ5Og0KLWRkZm1hMzA0MCBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzA0MSBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwNDIgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzA0NCBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzA0NSBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkDQotDQotLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZw0KLWRkZm1hMzA0NiBmbWEgIDEgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnDQotZGRmbWEzMDQ3IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnDQotZGRmbWEzMDQ4IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJw0KLWRkZm1hMzA0OSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnDQotZGRmbWEzMDUwIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnDQotZGRmbWEzMDUxIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJw0KLWRkZm1hMzA1MiBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KLWRkZm1hMzA1MyBmbWEgIDEgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcNCi1kZGZtYTMwNTQgZm1hICAxICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJw0KLWRkZm1hMzA1NSBmbWEgIDEgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnDQotZGRmbWEzMDU2IGZtYSAgMSAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnDQotZGRmbWEzMDU3IGZtYSAgMSAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcNCi0NCi0tLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uDQotZGRmbWEzMDYxIGZtYSAgMSAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJw0KLWRkZm1hMzA2MiBmbWEgIDEgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJw0KLWRkZm1hMzA2MyBmbWEgIDEgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnDQotZGRmbWEzMDY0IGZtYSAgMSAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJw0KLWRkZm1hMzA2NSBmbWEgIDEgIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJw0KLQ0KLS0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCi1kZGZtYTMwNzAgZm1hICAxICAxICAwICAgIC0+IDENCi1kZGZtYTMwNzEgZm1hICAxICAxIDAuICAgIC0+IDENCi1kZGZtYTMwNzIgZm1hICAxICAxICAuMCAgIC0+IDEuMA0KLWRkZm1hMzA3MyBmbWEgIDEgIDEgMC4wICAgLT4gMS4wDQotZGRmbWEzMDc0IGZtYSAgMSAgMSAwLjAwICAtPiAxLjAwDQotZGRmbWEzMDc1IGZtYSAgMSAgIDAgIDEgICAtPiAxDQotZGRmbWEzMDc2IGZtYSAgMSAgMC4gIDEgICAtPiAxDQotZGRmbWEzMDc3IGZtYSAgMSAgIC4wIDEgICAtPiAxLjANCi1kZGZtYTMwNzggZm1hICAxICAwLjAgMSAgIC0+IDEuMA0KLWRkZm1hMzA3OSBmbWEgIDEgIDAuMDAgMSAgLT4gMS4wMA0KLQ0KLS0tIHNvbWUgY2Fycmllcw0KLWRkZm1hMzA4MCBmbWEgIDEgIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkNCi1kZGZtYTMwODEgZm1hICAxICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMA0KLWRkZm1hMzA4MiBmbWEgIDEgICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDANCi1kZGZtYTMwODMgZm1hICAxICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDANCi1kZGZtYTMwODQgZm1hICAxICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMA0KLWRkZm1hMzA4NSBmbWEgIDEgICAgICA5OTk5OSAxICAtPiAxMDAwMDANCi1kZGZtYTMwODYgZm1hICAxICAgICAgIDk5OTkgMSAgLT4gMTAwMDANCi1kZGZtYTMwODcgZm1hICAxICAgICAgICA5OTkgMSAgLT4gMTAwMA0KLWRkZm1hMzA4OCBmbWEgIDEgICAgICAgICA5OSAxICAtPiAxMDANCi1kZGZtYTMwODkgZm1hICAxICAgICAgICAgIDkgMSAgLT4gMTANCi0NCi0NCi0tLSBtb3JlIExIUyBzd2Fwcw0KLWRkZm1hMzA5MCBmbWEgIDEgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3Jw0KLWRkZm1hMzA5MSBmbWEgIDEgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnDQotZGRmbWEzMDkyIGZtYSAgMSAgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3Jw0KLWRkZm1hMzA5MyBmbWEgIDEgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3Jw0KLWRkZm1hMzA5NCBmbWEgIDEgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3Jw0KLWRkZm1hMzA5NSBmbWEgIDEgICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3Jw0KLWRkZm1hMzA5NiBmbWEgIDEgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43Jw0KLWRkZm1hMzA5NyBmbWEgIDEgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnDQotZGRmbWEzMDk4IGZtYSAgMSAgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcNCi1kZGZtYTMwOTkgZm1hICAxICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnDQotZGRmbWEzMTAwIGZtYSAgMSAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScNCi1kZGZtYTMxMDEgZm1hICAxICAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnDQotZGRmbWEzMTAyIGZtYSAgMSAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnDQotZGRmbWEzMTAzIGZtYSAgMSAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnDQotZGRmbWEzMTA0IGZtYSAgMSAgJy01RTAnICAgICAgICAgMCAtPiAgJy01Jw0KLWRkZm1hMzEwNSBmbWEgIDEgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnDQotZGRmbWEzMTA2IGZtYSAgMSAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnDQotZGRmbWEzMTA3IGZtYSAgMSAgJy01RTE1JyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJw0KLWRkZm1hMzEwOCBmbWEgIDEgICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgUm91bmRlZA0KLWRkZm1hMzEwOSBmbWEgIDEgICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZA0KLWRkZm1hMzExMCBmbWEgIDEgICctNUUxOCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgUm91bmRlZA0KLWRkZm1hMzExMSBmbWEgIDEgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KLQ0KLS0tIG1vcmUgUkhTIHN3YXBzDQotZGRmbWEzMTEzIGZtYSAgMSAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycNCi1kZGZtYTMxMTQgZm1hICAxICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnDQotZGRmbWEzMTE2IGZtYSAgMSAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnDQotZGRmbWEzMTE3IGZtYSAgMSAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycNCi1kZGZtYTMxMTkgZm1hICAxICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3Jw0KLWRkZm1hMzEyMCBmbWEgIDEgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnDQotZGRmbWEzMTIxIGZtYSAgMSAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycNCi1kZGZtYTMxMjIgZm1hICAxICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnDQotZGRmbWEzMTIzIGZtYSAgMSAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJw0KLWRkZm1hMzEyNCBmbWEgIDEgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03Jw0KLWRkZm1hMzEyNSBmbWEgIDEgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScNCi1kZGZtYTMxMjYgZm1hICAxICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScNCi1kZGZtYTMxMjcgZm1hICAxICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1Jw0KLWRkZm1hMzEyOCBmbWEgIDEgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnDQotZGRmbWEzMTI5IGZtYSAgMSAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnDQotZGRmbWEzMTMwIGZtYSAgMSAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJw0KLWRkZm1hMzEzMSBmbWEgIDEgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnDQotZGRmbWEzMTMyIGZtYSAgMSAgMCAgJy01RTE1JyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnDQotZGRmbWEzMTMzIGZtYSAgMSAgMCAgJy01RTE2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkDQotZGRmbWEzMTM0IGZtYSAgMSAgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkDQotZGRmbWEzMTM1IGZtYSAgMSAgMCAgJy01RTE4JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkDQotZGRmbWEzMTM2IGZtYSAgMSAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkDQotDQotLS0gcmVsYXRlZA0KLWRkZm1hMzEzNyBmbWEgIDEgICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCi1kZGZtYTMxMzggZm1hICAxICAtMSAgJzBFLTE5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZGRmbWEzMTM5IGZtYSAgMSAgJzBFLTE5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZA0KLWRkZm1hMzE0MCBmbWEgIDEgICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1kZGZtYTMxNDEgZm1hICAxICAxRSsxMSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnDQotZGRmbWEzMTQyIGZtYSAgMSAgMUUrMTEgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZA0KLWRkZm1hMzE0MyBmbWEgIDEgIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcNCi1kZGZtYTMxNDQgZm1hICAxICAwLjAwMDAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkDQotDQotLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10NCi1kZGZtYTMxNDYgZm1hICAxICAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnDQotZGRmbWEzMTQ3IGZtYSAgMSAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcNCi1kZGZtYTMxNDggZm1hICAxICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJw0KLWRkZm1hMzE0OSBmbWEgIDEgICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcNCi1kZGZtYTMxNTAgZm1hICAxICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJw0KLWRkZm1hMzE1MSBmbWEgIDEgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnDQotZGRmbWEzMTUyIGZtYSAgMSAgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJw0KLWRkZm1hMzE1MyBmbWEgIDEgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycNCi1kZGZtYTMxNTQgZm1hICAxICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnDQotZGRmbWEzMTU1IGZtYSAgMSAgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcNCi1kZGZtYTMxNTYgZm1hICAxICAnMycgICAgICczJyAgICAgLT4gICc2Jw0KLWRkZm1hMzE1NyBmbWEgIDEgICczJyAgICAgJyszJyAgICAtPiAgJzYnDQotZGRmbWEzMTU4IGZtYSAgMSAgJzMnICAgICAnLTMnICAgIC0+ICAnMCcNCi1kZGZtYTMxNTkgZm1hICAxICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnDQotZGRmbWEzMTYwIGZtYSAgMSAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcNCi0NCi0tLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KLWRkZm1hMzE2MSBmbWEgIDEgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5Jw0KLWRkZm1hMzE2MiBmbWEgIDEgICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScNCi1kZGZtYTMxNjMgZm1hICAxICAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQotZGRmbWEzMTY0IGZtYSAgMSAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknDQotZGRmbWEzMTY1IGZtYSAgMSAgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5Jw0KLWRkZm1hMzE2NiBmbWEgIDEgICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCi1kZGZtYTMxNjcgZm1hICAxICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQotZGRmbWEzMTY4IGZtYSAgMSAgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5Jw0KLQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotLS0gICAgICAgICAgIDEuMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDU2DQotZGRmbWEzMTcwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMxNzEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzE3MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMTczIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMxNzQgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzE3NSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMTc2IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMxNzcgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQNCi1kZGZtYTMxNzggZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzE3OSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMTgwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMxODEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzE4MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMTgzIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkDQotDQotLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZGRmbWEzMjAwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknDQotZGRmbWEzMjAxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIwMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMDMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjA0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIwNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMDYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjA3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIwOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMDkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjEwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIxMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMTIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjEzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIxNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMTUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjE2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnDQotZGRmbWEzMjE3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIxOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMTkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkZm1hMzIyMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5Jw0KLWRkZm1hMzIyMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMjIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjIzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIyNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMjUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjI2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIyNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMjggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjI5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIzMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMzEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjMyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIzMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMzQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjM1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIzNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJw0KLWRkZm1hMzIzNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMzggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjM5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZGRmbWEzMjQwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI0MSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNDIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kZGZtYTMyNTAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScNCi1kZGZtYTMyNTEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjUyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI1MyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNTQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjU1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI1NiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNTcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjU4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI1OSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNjAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjYxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI2MiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNjMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjY0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI2NSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNjYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcNCi1kZGZtYTMyNjcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjY4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI2OSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMNCi1yb3VuZGluZzogaGFsZl91cA0KLWRkZm1hMzMwMSBmbWEgIDEgICAtMSAgIDEgICAgICAtPiAgIDANCi1kZGZtYTMzMDIgZm1hICAxICAgIDAgICAxICAgICAgLT4gICAxDQotZGRmbWEzMzAzIGZtYSAgMSAgICAxICAgMSAgICAgIC0+ICAgMg0KLWRkZm1hMzMwNCBmbWEgIDEgICAxMiAgIDEgICAgICAtPiAgMTMNCi1kZGZtYTMzMDUgZm1hICAxICAgOTggICAxICAgICAgLT4gIDk5DQotZGRmbWEzMzA2IGZtYSAgMSAgIDk5ICAgMSAgICAgIC0+IDEwMA0KLWRkZm1hMzMwNyBmbWEgIDEgIDEwMCAgIDEgICAgICAtPiAxMDENCi1kZGZtYTMzMDggZm1hICAxICAxMDEgICAxICAgICAgLT4gMTAyDQotZGRmbWEzMzA5IGZtYSAgMSAgIC0xICAtMSAgICAgIC0+ICAtMg0KLWRkZm1hMzMxMCBmbWEgIDEgICAgMCAgLTEgICAgICAtPiAgLTENCi1kZGZtYTMzMTEgZm1hICAxICAgIDEgIC0xICAgICAgLT4gICAwDQotZGRmbWEzMzEyIGZtYSAgMSAgIDEyICAtMSAgICAgIC0+ICAxMQ0KLWRkZm1hMzMxMyBmbWEgIDEgICA5OCAgLTEgICAgICAtPiAgOTcNCi1kZGZtYTMzMTQgZm1hICAxICAgOTkgIC0xICAgICAgLT4gIDk4DQotZGRmbWEzMzE1IGZtYSAgMSAgMTAwICAtMSAgICAgIC0+ICA5OQ0KLWRkZm1hMzMxNiBmbWEgIDEgIDEwMSAgLTEgICAgICAtPiAxMDANCi0NCi1kZGZtYTMzMjEgZm1hICAxICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KLWRkZm1hMzMyMiBmbWEgIDEgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxDQotZGRmbWEzMzIzIGZtYSAgMSAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDINCi1kZGZtYTMzMjQgZm1hICAxICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KLWRkZm1hMzMyNSBmbWEgIDEgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5DQotZGRmbWEzMzI2IGZtYSAgMSAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDANCi1kZGZtYTMzMjcgZm1hICAxICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KLWRkZm1hMzMyOCBmbWEgIDEgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyDQotZGRmbWEzMzI5IGZtYSAgMSAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDINCi1kZGZtYTMzMzAgZm1hICAxICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KLWRkZm1hMzMzMSBmbWEgIDEgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwDQotZGRmbWEzMzMyIGZtYSAgMSAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTENCi1kZGZtYTMzMzMgZm1hICAxICAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KLWRkZm1hMzMzNCBmbWEgIDEgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4DQotZGRmbWEzMzM1IGZtYSAgMSAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkNCi1kZGZtYTMzMzYgZm1hICAxICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KLQ0KLS0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudA0KLWRkZm1hMzM0MCBmbWEgIDEgIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDANCi1kZGZtYTMzNDEgZm1hICAxICAxRSsxNSAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMA0KLWRkZm1hMzM0MiBmbWEgIDEgIDFFKzE2ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZA0KLWRkZm1hMzM0MyBmbWEgIDEgIDFFKzIwICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZA0KLS0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4NCi1kZGZtYTMzNDQgZm1hICAxICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxDQotZGRmbWEzMzQ1IGZtYSAgMSAgMUUrMTUgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDENCi1kZGZtYTMzNDYgZm1hICAxICAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzM0NyBmbWEgIDEgIDFFKzIwICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMzQ4IGZtYSAgMSAgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNw0KLWRkZm1hMzM0OSBmbWEgIDEgIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3DQotZGRmbWEzMzUwIGZtYSAgMSAgMUUrMTYgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMzNTEgZm1hICAxICAxRSsyMCAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHRyeXplcm9zIGNhc2VzDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kZGZtYTMzNjAgIGZtYSAgMSAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQ0KLWRkZm1hMzM2MSAgZm1hICAxICAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZA0KLWRkZm1hMzM2MiAgZm1hICAxICAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZA0KLWRkZm1hMzM2MyAgZm1hICAxICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzM2NCAgZm1hICAxICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDBFKzM2OQ0KLQ0KLS0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcNCi1yb3VuZGluZzogICAgaGFsZl9kb3duDQotZGRmbWEzMzcwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNA0KLWRkZm1hMzM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLWRkZm1hMzM3MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQNCi1kZGZtYTMzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLWRkZm1hMzM3NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQNCi1kZGZtYTMzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0DQotDQotLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzDQotZGRmbWEzNDAwIGZtYSAgMSAgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcNCi1kZGZtYTM0MDEgZm1hICAxICAgIDEgICA3N2UtMTUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcNCi1kZGZtYTM0MDIgZm1hICAxICAgIDEgICA3N2UtMTYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDAzIGZtYSAgMSAgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQwNCBmbWEgIDEgICAgMSAgIDc3ZS0xOCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MDUgZm1hICAxICAgIDEgICA3N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDA2IGZtYSAgMSAgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZm1hMzQxMCBmbWEgIDEgICAxMCAgIDc3ZS0xNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3Nw0KLWRkZm1hMzQxMSBmbWEgIDEgICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MTIgZm1hICAxICAgMTAgICA3N2UtMTYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDEzIGZtYSAgMSAgIDEwICAgNzdlLTE3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQxNCBmbWEgIDEgICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MTUgZm1hICAxICAgMTAgICA3N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDE2IGZtYSAgMSAgIDEwICAgNzdlLTI5OSAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZm1hMzQyMCBmbWEgIDEgICA3N2UtMTQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3DQotZGRmbWEzNDIxIGZtYSAgMSAgIDc3ZS0xNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3DQotZGRmbWEzNDIyIGZtYSAgMSAgIDc3ZS0xNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQyMyBmbWEgIDEgICA3N2UtMTcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MjQgZm1hICAxICAgNzdlLTE4ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDI1IGZtYSAgMSAgIDc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQyNiBmbWEgIDEgICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGZtYTM0MzAgZm1hICAxICAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcNCi1kZGZtYTM0MzEgZm1hICAxICAgNzdlLTE1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDMyIGZtYSAgMSAgIDc3ZS0xNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQzMyBmbWEgIDEgICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MzQgZm1hICAxICAgNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDM1IGZtYSAgMSAgIDc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQzNiBmbWEgIDEgICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBuZWdhdGl2ZSB1bHBzDQotZGRmbWEzNjQ0MCBmbWEgIDEgICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0NDEgZm1hICAxICAgIDEgICAtNzdlLTE1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjQ0MiBmbWEgIDEgICAgMSAgIC03N2UtMTYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjQ0MyBmbWEgIDEgICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0NDQgZm1hICAxICAgIDEgICAtNzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDQ1IGZtYSAgMSAgICAxICAgLTc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDQ2IGZtYSAgMSAgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGZtYTM2NDUwIGZtYSAgMSAgIDEwICAgLTc3ZS0xNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0NTEgZm1hICAxICAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0NTIgZm1hICAxICAgMTAgICAtNzdlLTE2ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDUzIGZtYSAgMSAgIDEwICAgLTc3ZS0xNyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ1NCBmbWEgIDEgICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ1NSBmbWEgIDEgICAxMCAgIC03N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ1NiBmbWEgIDEgICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEzNjQ2MCBmbWEgIDEgICAtNzdlLTE0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0NjEgZm1hICAxICAgLTc3ZS0xNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjQ2MiBmbWEgIDEgICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjQ2MyBmbWEgIDEgICAtNzdlLTE3ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0NjQgZm1hICAxICAgLTc3ZS0xOCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDY1IGZtYSAgMSAgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDY2IGZtYSAgMSAgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGZtYTM2NDcwIGZtYSAgMSAgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0NzEgZm1hICAxICAgLTc3ZS0xNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0NzIgZm1hICAxICAgLTc3ZS0xNiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDczIGZtYSAgMSAgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ3NCBmbWEgIDEgICAtNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ3NSBmbWEgIDEgICAtNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ3NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbmVnYXRpdmUgdWxwcw0KLWRkZm1hMzY0ODAgZm1hICAxICAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjQ4MSBmbWEgIDEgICAtMSAgICA3N2UtMTUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjQ4MiBmbWEgIDEgICAtMSAgICA3N2UtMTYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0ODMgZm1hICAxICAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ4NCBmbWEgIDEgICAtMSAgICA3N2UtMTggICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDg1IGZtYSAgMSAgIC0xICAgIDc3ZS0xOSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ4NiBmbWEgIDEgICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZm1hMzY0OTAgZm1hICAxICAtMTAgICAgNzdlLTE0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0OTEgZm1hICAxICAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NDkyIGZtYSAgMSAgLTEwICAgIDc3ZS0xNiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0OTMgZm1hICAxICAtMTAgICAgNzdlLTE3ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ5NCBmbWEgIDEgIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0OTUgZm1hICAxICAtMTAgICAgNzdlLTE5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDk2IGZtYSAgMSAgLTEwICAgIDc3ZS05OSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEzNjUwMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NTAxIGZtYSAgMSAgICA3N2UtMTUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NTAyIGZtYSAgMSAgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjUwMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTA0IGZtYSAgMSAgICA3N2UtMTggICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1MDUgZm1hICAxICAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTA2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEzNjUxMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjUxMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY1MTIgZm1hICAxICAgIDc3ZS0xNiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjUxMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTE0IGZtYSAgMSAgICA3N2UtMTggICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjUxNSBmbWEgIDEgICAgNzdlLTE5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1MTYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBhbmQgYSBjb3VwbGUgbW9yZSB3aXRoIGxvbmdlciBSSFMNCi1kZGZtYTM2NTIwIGZtYSAgMSAgICAxICAgLTc3NzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjIyMw0KLWRkZm1hMzY1MjEgZm1hICAxICAgIDEgICAtNzc3N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjIyIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1MjIgZm1hICAxICAgIDEgICAtNzc3N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIyIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1MjMgZm1hICAxICAgIDEgICAtNzc3N2UtMTkgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1MjQgZm1hICAxICAgIDEgICAtNzc3N2UtMjAgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1MjUgZm1hICAxICAgIDEgICAtNzc3N2UtMjEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjUyNiBmbWEgIDEgICAgMSAgIC03Nzc3ZS0yMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZGRmbWEzNjU0MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5Jw0KLWRkZm1hMzY1NDEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU0MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTQzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NDQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU0NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTQ2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NDcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU0OCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTQ5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NTAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU1MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTUyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NTMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU1NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTU1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NTYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcNCi1kZGZtYTM2NTU3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NTggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU1OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZGRmbWEzNjU2MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5Jw0KLWRkZm1hMzY1NjEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU2MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTYzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NjQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU2NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTY2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NjcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU2OCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTY5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NzAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU3MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTcyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NzMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU3NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTc1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NzYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcNCi1kZGZtYTM2NTc3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NzggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU3OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KLWRkZm1hMzc1NDAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU0MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTQyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZGRmbWEzNzU1MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5Jw0KLWRkZm1hMzc1NTEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU1MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTUzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NTQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU1NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTU2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NTcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU1OCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTU5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NjAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU2MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTYyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NjMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU2NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTY1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NjYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcNCi1kZGZtYTM3NTY3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NjggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU2OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSB2ZXJpZnkgYSBxdWVyeQ0KLXJvdW5kaW5nOiAgICAgZG93bg0KLWRkZm1hMzc2NjEgZm1hICAxICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc2NjIgZm1hICAxICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQNCi1kZGZtYTM3NjYzIGZtYSAgMSAgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NjY0IGZtYSAgMSAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkDQotDQotLS0gbW9yZSB6ZXJvcywgZXRjLg0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi0NCi1kZGZtYTM3NzAxIGZtYSAgMSAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDANCi1kZGZtYTM3NzAyIGZtYSAgMSAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwDQotZGRmbWEzNzcwMyBmbWEgIDEgIDAwLjAwIDBFLTMgICAtPiAwLjAwMA0KLWRkZm1hMzc3MDQgZm1hICAxICAwRS0zICAwMC4wMCAgLT4gMC4wMDANCi0NCi1kZGZtYTM3NzEwIGZtYSAgMSAgMEUrMyAgMDAuMDAgIC0+IDAuMDANCi1kZGZtYTM3NzExIGZtYSAgMSAgMEUrMyAgMDAuMCAgIC0+IDAuMA0KLWRkZm1hMzc3MTIgZm1hICAxICAwRSszICAwMC4gICAgLT4gMA0KLWRkZm1hMzc3MTMgZm1hICAxICAwRSszICAwMC5FKzEgLT4gMEUrMQ0KLWRkZm1hMzc3MTQgZm1hICAxICAwRSszICAwMC5FKzIgLT4gMEUrMg0KLWRkZm1hMzc3MTUgZm1hICAxICAwRSszICAwMC5FKzMgLT4gMEUrMw0KLWRkZm1hMzc3MTYgZm1hICAxICAwRSszICAwMC5FKzQgLT4gMEUrMw0KLWRkZm1hMzc3MTcgZm1hICAxICAwRSszICAwMC5FKzUgLT4gMEUrMw0KLWRkZm1hMzc3MTggZm1hICAxICAwRSszICAtMDAuMCAgIC0+IDAuMA0KLWRkZm1hMzc3MTkgZm1hICAxICAwRSszICAtMDAuICAgIC0+IDANCi1kZGZtYTM3NzMxIGZtYSAgMSAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxDQotDQotZGRmbWEzNzcyMCBmbWEgIDEgIDAwLjAwICAwRSszICAtPiAwLjAwDQotZGRmbWEzNzcyMSBmbWEgIDEgIDAwLjAgICAwRSszICAtPiAwLjANCi1kZGZtYTM3NzIyIGZtYSAgMSAgMDAuICAgIDBFKzMgIC0+IDANCi1kZGZtYTM3NzIzIGZtYSAgMSAgMDAuRSsxIDBFKzMgIC0+IDBFKzENCi1kZGZtYTM3NzI0IGZtYSAgMSAgMDAuRSsyIDBFKzMgIC0+IDBFKzINCi1kZGZtYTM3NzI1IGZtYSAgMSAgMDAuRSszIDBFKzMgIC0+IDBFKzMNCi1kZGZtYTM3NzI2IGZtYSAgMSAgMDAuRSs0IDBFKzMgIC0+IDBFKzMNCi1kZGZtYTM3NzI3IGZtYSAgMSAgMDAuRSs1IDBFKzMgIC0+IDBFKzMNCi1kZGZtYTM3NzI4IGZtYSAgMSAgLTAwLjAwIDBFKzMgIC0+IDAuMDANCi1kZGZtYTM3NzI5IGZtYSAgMSAgLTAwLjAgIDBFKzMgIC0+IDAuMA0KLWRkZm1hMzc3MzAgZm1hICAxICAtMDAuICAgMEUrMyAgLT4gMA0KLQ0KLWRkZm1hMzc3MzIgZm1hICAxICAgMCAgICAgMCAgICAgLT4gIDANCi1kZGZtYTM3NzMzIGZtYSAgMSAgIDAgICAgLTAgICAgIC0+ICAwDQotZGRmbWEzNzczNCBmbWEgIDEgIC0wICAgICAwICAgICAtPiAgMA0KLWRkZm1hMzc3MzUgZm1hICAxICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQ0KLQ0KLWRkZm1hMzc3MzYgZm1hICAxICAgMSAgICAtMSAgICAgLT4gIDANCi1kZGZtYTM3NzM3IGZtYSAgMSAgLTEgICAgLTEgICAgIC0+IC0yDQotZGRmbWEzNzczOCBmbWEgIDEgICAxICAgICAxICAgICAtPiAgMg0KLWRkZm1hMzc3MzkgZm1hICAxICAtMSAgICAgMSAgICAgLT4gIDANCi0NCi1kZGZtYTM3NzQxIGZtYSAgMSAgIDAgICAgLTEgICAgIC0+IC0xDQotZGRmbWEzNzc0MiBmbWEgIDEgIC0wICAgIC0xICAgICAtPiAtMQ0KLWRkZm1hMzc3NDMgZm1hICAxICAgMCAgICAgMSAgICAgLT4gIDENCi1kZGZtYTM3NzQ0IGZtYSAgMSAgLTAgICAgIDEgICAgIC0+ICAxDQotZGRmbWEzNzc0NSBmbWEgIDEgIC0xICAgICAwICAgICAtPiAtMQ0KLWRkZm1hMzc3NDYgZm1hICAxICAtMSAgICAtMCAgICAgLT4gLTENCi1kZGZtYTM3NzQ3IGZtYSAgMSAgIDEgICAgIDAgICAgIC0+ICAxDQotZGRmbWEzNzc0OCBmbWEgIDEgICAxICAgIC0wICAgICAtPiAgMQ0KLQ0KLWRkZm1hMzc3NTEgZm1hICAxICAgMC4wICAtMSAgICAgLT4gLTEuMA0KLWRkZm1hMzc3NTIgZm1hICAxICAtMC4wICAtMSAgICAgLT4gLTEuMA0KLWRkZm1hMzc3NTMgZm1hICAxICAgMC4wICAgMSAgICAgLT4gIDEuMA0KLWRkZm1hMzc3NTQgZm1hICAxICAtMC4wICAgMSAgICAgLT4gIDEuMA0KLWRkZm1hMzc3NTUgZm1hICAxICAtMS4wICAgMCAgICAgLT4gLTEuMA0KLWRkZm1hMzc3NTYgZm1hICAxICAtMS4wICAtMCAgICAgLT4gLTEuMA0KLWRkZm1hMzc3NTcgZm1hICAxICAgMS4wICAgMCAgICAgLT4gIDEuMA0KLWRkZm1hMzc3NTggZm1hICAxICAgMS4wICAtMCAgICAgLT4gIDEuMA0KLQ0KLWRkZm1hMzc3NjEgZm1hICAxICAgMCAgICAtMS4wICAgLT4gLTEuMA0KLWRkZm1hMzc3NjIgZm1hICAxICAtMCAgICAtMS4wICAgLT4gLTEuMA0KLWRkZm1hMzc3NjMgZm1hICAxICAgMCAgICAgMS4wICAgLT4gIDEuMA0KLWRkZm1hMzc3NjQgZm1hICAxICAtMCAgICAgMS4wICAgLT4gIDEuMA0KLWRkZm1hMzc3NjUgZm1hICAxICAtMSAgICAgMC4wICAgLT4gLTEuMA0KLWRkZm1hMzc3NjYgZm1hICAxICAtMSAgICAtMC4wICAgLT4gLTEuMA0KLWRkZm1hMzc3NjcgZm1hICAxICAgMSAgICAgMC4wICAgLT4gIDEuMA0KLWRkZm1hMzc3NjggZm1hICAxICAgMSAgICAtMC4wICAgLT4gIDEuMA0KLQ0KLWRkZm1hMzc3NzEgZm1hICAxICAgMC4wICAtMS4wICAgLT4gLTEuMA0KLWRkZm1hMzc3NzIgZm1hICAxICAtMC4wICAtMS4wICAgLT4gLTEuMA0KLWRkZm1hMzc3NzMgZm1hICAxICAgMC4wICAgMS4wICAgLT4gIDEuMA0KLWRkZm1hMzc3NzQgZm1hICAxICAtMC4wICAgMS4wICAgLT4gIDEuMA0KLWRkZm1hMzc3NzUgZm1hICAxICAtMS4wICAgMC4wICAgLT4gLTEuMA0KLWRkZm1hMzc3NzYgZm1hICAxICAtMS4wICAtMC4wICAgLT4gLTEuMA0KLWRkZm1hMzc3NzcgZm1hICAxICAgMS4wICAgMC4wICAgLT4gIDEuMA0KLWRkZm1hMzc3NzggZm1hICAxICAgMS4wICAtMC4wICAgLT4gIDEuMA0KLQ0KLS0tIFNwZWNpYWxzDQotZGRmbWEzNzc4MCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGZtYTM3NzgxIGZtYSAgMSAgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMzc3ODIgZm1hICAxICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZGRmbWEzNzc4MyBmbWEgIDEgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kZGZtYTM3Nzg0IGZtYSAgMSAgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMzc3ODUgZm1hICAxICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZGRmbWEzNzc4NiBmbWEgIDEgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1kZGZtYTM3Nzg3IGZtYSAgMSAgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMzc3ODggZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRmbWEzNzc4OSBmbWEgIDEgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGZtYTM3NzkwIGZtYSAgMSAgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMzc3OTEgZm1hICAxICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRmbWEzNzc5MiBmbWEgIDEgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGZtYTM3NzkzIGZtYSAgMSAgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMzc3OTQgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZGZtYTM3ODAwIGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzgwMSBmbWEgIDEgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCi1kZGZtYTM3ODAyIGZtYSAgMSAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRkZm1hMzc4MDMgZm1hICAxICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZGRmbWEzNzgwNCBmbWEgIDEgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCi1kZGZtYTM3ODA1IGZtYSAgMSAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWRkZm1hMzc4MDYgZm1hICAxICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZGRmbWEzNzgwNyBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZGZtYTM3ODA4IGZtYSAgMSAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkZm1hMzc4MDkgZm1hICAxICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODEwIGZtYSAgMSAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkZm1hMzc4MTEgZm1hICAxICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRmbWEzNzgxMiBmbWEgIDEgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZGZtYTM3ODEzIGZtYSAgMSAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkZm1hMzc4MTQgZm1hICAxICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZGRmbWEzNzgxNSBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kZGZtYTM3ODIxIGZtYSAgMSAgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kZGZtYTM3ODIyIGZtYSAgMSAgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kZGZtYTM3ODIzIGZtYSAgMSAgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kZGZtYTM3ODI0IGZtYSAgMSAgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kZGZtYTM3ODI1IGZtYSAgMSAgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kZGZtYTM3ODI2IGZtYSAgMSAgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kZGZtYTM3ODI3IGZtYSAgMSAgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kZGZtYTM3ODI4IGZtYSAgMSAgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kZGZtYTM3ODI5IGZtYSAgMSAgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kZGZtYTM3ODMwIGZtYSAgMSAgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kZGZtYTM3ODMxIGZtYSAgMSAgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZGZtYTM3ODMyIGZtYSAgMSAgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kZGZtYTM3ODMzIGZtYSAgMSAgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kZGZtYTM3ODM0IGZtYSAgMSAgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kZGZtYTM3ODM1IGZtYSAgMSAgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kZGZtYTM3ODM2IGZtYSAgMSAgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZGZtYTM3ODM3IGZtYSAgMSAgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kZGZtYTM3ODQxIGZtYSAgMSAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg0MiBmbWEgIDEgICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NDMgZm1hICAxICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODQ0IGZtYSAgMSAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg0NSBmbWEgIDEgICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NDYgZm1hICAxICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODQ3IGZtYSAgMSAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg0OCBmbWEgIDEgICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NDkgZm1hICAxICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODUwIGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg1MSBmbWEgIDEgIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NTIgZm1hICAxICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODUzIGZtYSAgMSAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg1NCBmbWEgIDEgIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NTUgZm1hICAxICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODU2IGZtYSAgMSAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg1NyBmbWEgIDEgICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NTggZm1hICAxICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODU5IGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkZm1hMzc4NjEgZm1hICAxICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCi1kZGZtYTM3ODYyIGZtYSAgMSAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotZGRmbWEzNzg2MyBmbWEgIDEgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLWRkZm1hMzc4NjQgZm1hICAxICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCi1kZGZtYTM3ODY1IGZtYSAgMSAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotZGRmbWEzNzg2NiBmbWEgIDEgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLWRkZm1hMzc4NjcgZm1hICAxICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCi1kZGZtYTM3ODY4IGZtYSAgMSAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotZGRmbWEzNzg2OSBmbWEgIDEgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1kZGZtYTM3ODcxIGZtYSAgMSAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODcyIGZtYSAgMSAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODczIGZtYSAgMSAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODc0IGZtYSAgMSAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODc1IGZtYSAgMSAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODc2IGZtYSAgMSAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODc3IGZtYSAgMSAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODc4IGZtYSAgMSAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODc5IGZtYSAgMSAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODgwIGZtYSAgMSAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODgxIGZtYSAgMSAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODgyIGZtYSAgMSAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLWRkZm1hMzc4ODMgZm1hICAxICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4ODQgZm1hICAxICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotZGRmbWEzNzg4NSBmbWEgIDEgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4NCi1kZGZtYTM3NTc1IGZtYSAgMSAgIDFFLTM4MyAtMUUtMzk4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KLWRkZm1hMzc1NzYgZm1hICAxICAtMUUtMzgzICsxRS0zOTggLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsDQotDQotLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlDQotLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZGRmbWEzNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRmbWEzNzk3MyBmbWEgIDEgICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTc0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5NzUgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTc2IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk3NyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5NzggZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgN0UrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTc5IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDZFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk4MCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5ODEgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNEUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5ODIgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgM0UrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5ODMgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5ODQgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZm1hMzc5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZGZtYTM3OTg2IGZtYSAgMSAgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTg3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTg4IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5ODkgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk5MCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC04RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTkxIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5OTIgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk5MyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC01RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTk0IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk5NSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5OTYgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMkUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTk3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzDQotcm91bmRpbmc6ICAgICBkb3duDQotZGRmbWEzNzExMDAgZm1hICAxICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMDEgZm1hICAxICAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTAzIGZtYSAgMSAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMDQgZm1hICAxICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMDUgZm1hICAxICAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTA2IGZtYSAgMSAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMDcgZm1hICAxICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMDggZm1hICAxICAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTA5IGZtYSAgMSAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCi0NCi1yb3VuZGluZzogICAgIGNlaWxpbmcNCi1kZGZtYTM3MTExMCBmbWEgIDEgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMTEgZm1hICAxICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGZtYTM3MTExMyBmbWEgIDEgICAgIC0xICsxZS0zODMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGZtYTM3MTExNCBmbWEgIDEgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMTUgZm1hICAxICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGZtYTM3MTExNiBmbWEgIDEgIC0xZS0zICsxZS0zODMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGZtYTM3MTExNyBmbWEgIDEgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMTggZm1hICAxICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGZtYTM3MTExOSBmbWEgIDEgIC0xZS02ICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KLQ0KLS0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlDQotcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4NCi0NCi1kZGZtYTM3MTMwMCBmbWEgIDEgIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMTAgZm1hICAxICAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzExIGZtYSAgMSAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMxMiBmbWEgIDEgIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMTMgZm1hICAxICAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzE0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMxNSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMTYgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzE3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMxOCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMTkgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzIwIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMyMSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMjIgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzIzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMyNCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMjUgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzI2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMyNyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMjggZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzI5IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMzMCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMzEgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzMyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMzMyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMzQgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzM1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMzNiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMzcgZm1hICAxICAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzM4IGZtYSAgMSAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMzOSBmbWEgIDEgIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEzNzEzNDAgZm1hICAxICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzQxIGZtYSAgMSAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGZtYTM3MTM0OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzUwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM1MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzUzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM1NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzU2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNTcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM1OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzU5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNjAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM2MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzYyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNjMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM2NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzY1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNjcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM2OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzY5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNzAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzcyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM3NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNzYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM3NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzc4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNzkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM4MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzgxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzODIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM4MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzg0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzODUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM4NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzg3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzODggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM4OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzkwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzOTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM5MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzkzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzOTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM5NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzk2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQNCi0tLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwDQotZGRmbWEzNzE0MjAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQyMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQyMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0MjMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQyNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQyNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0MjYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQyNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNw0KLWRkZm1hMzcxNDI4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQotZGRmbWEzNzE0MjkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCi1kZGZtYTM3MTQzMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTANCi1kZGZtYTM3MTQzMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCi1kZGZtYTM3MTQzMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCi1kZGZtYTM3MTQzMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMNCi1kZGZtYTM3MTQzNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCi1kZGZtYTM3MTQzNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCi1kZGZtYTM3MTQzNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYNCi1kZGZtYTM3MTQzNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCi1kZGZtYTM3MTQzOCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCi1kZGZtYTM3MTQzOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkNCi0NCi0tLSBzYW1lLCByZXZlcnNlZCAwDQotZGRmbWEzNzE0NDAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkZm1hMzcxNDQxIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NDIgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NDMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkZm1hMzcxNDQ0IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NDUgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NDYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkZm1hMzcxNDQ3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcNCi1kZGZtYTM3MTQ0OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQotZGRmbWEzNzE0NDkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQ0KLWRkZm1hMzcxNDUwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwDQotZGRmbWEzNzE0NTEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCi1kZGZtYTM3MTQ1MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KLWRkZm1hMzcxNDUzIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzDQotZGRmbWEzNzE0NTQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCi1kZGZtYTM3MTQ1NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KLWRkZm1hMzcxNDU2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2DQotZGRmbWEzNzE0NTcgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCi1kZGZtYTM3MTQ1OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KLWRkZm1hMzcxNDU5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5DQotDQotLS0gc2FtZSwgRXMgb24gdGhlIDANCi1kZGZtYTM3MTQ2MCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ2MSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ2MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ2MyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ2NCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ2NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ2NiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ2NyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ2OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ2OSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ3MCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ3MSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ3MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ3MyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ3NCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ3NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi0tLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0DQotZGRmbWEzNzE0NzYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1kZGZtYTM3MTQ3NyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWRkZm1hMzcxNDc4IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZGRmbWEzNzE0NzkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi0NCi0tLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRkZm1hMzcxNTAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTUwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE1MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNTAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRkZm1hMzcxNTExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDANCi1kZGZtYTM3MTUxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kZGZtYTM3MTUyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE1MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNTIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTUyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kZGZtYTM3MTUzMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQotZGRmbWEzNzE1MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZGRmbWEzNzE1NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNTQxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTU0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE1NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZGRmbWEzNzE1NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRkZm1hMzcxNTUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi1yb3VuZGluZzogICAgdXANCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZGRmbWEzNzE1NjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNTYxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTU2MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE1NjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZGRmbWEzNzE1NzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRkZm1hMzcxNTcyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi1yb3VuZGluZzogICAgZG93bg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kZGZtYTM3MTU4MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE1ODEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNTgyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTU4MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kZGZtYTM3MTU5MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQotZGRmbWEzNzE1OTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLXJvdW5kaW5nOiAgICBjZWlsaW5nDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRkZm1hMzcxNjAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTYwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE2MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNjAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRkZm1hMzcxNjExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDANCi1kZGZtYTM3MTYxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqDQotcm91bmRpbmc6ICAgIGZsb29yDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRkZm1hMzcxNjIwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTYyMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqDQotZGRmbWEzNzE2MjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KLWRkZm1hMzcxNjIzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRkZm1hMzcxNjMxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoNCi1kZGZtYTM3MTYzMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqDQotDQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQotZGRmbWEzNzE3MDEgZm1hICAxICAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTANCi1kZGZtYTM3MTcwMiBmbWEgIDEgIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MA0KLWRkZm1hMzcxNzAzIGZtYSAgMSAgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwDQotZGRmbWEzNzE3MDQgZm1hICAxICAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQNCi1kZGZtYTM3MTcwNSBmbWEgIDEgIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMA0KLWRkZm1hMzcxNzA2IGZtYSAgMSAgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwDQotZGRmbWEzNzE3MDcgZm1hICAxICAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzANCi1kZGZtYTM3MTcwOCBmbWEgIDEgIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMw0KLQ0KLS0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXANCi1yb3VuZGluZzogaGFsZl9ldmVuDQotDQotZGRmbWEzNzUwMDEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3DQotZGRmbWEzNzUwMDIgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAwMyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDA0IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMDUgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAwNiBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDA3IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMDggZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAwOSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDEwIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMTEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAxMiBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDEzIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMTQgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAxNSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDE2IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMTcgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAxOCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDE5IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMjAgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAyMSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXANCi1kZGZtYTM3NTAzMCBmbWEgIDEgIDEyMzQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc5DQotZGRmbWEzNzUwMzEgZm1hICAxICAxMjM0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xDQotZGRmbWEzNzUwMzIgZm1hICAxICAxMjM0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMg0KLWRkZm1hMzc1MDMzIGZtYSAgMSAgMTIzNDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzDQotZGRmbWEzNzUwMzQgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0DQotZGRmbWEzNzUwMzUgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NQ0KLWRkZm1hMzc1MDM2IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2DQotZGRmbWEzNzUwMzcgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3DQotZGRmbWEzNzUwMzggZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OA0KLWRkZm1hMzc1MDM5IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNDAgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA0MSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDQyIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNDMgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA0NCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDQ1IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNDYgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA0NyBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDQ4IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNDkgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ng0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kZGZtYTM3NTA1MCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDUxIGZtYSAgMSAgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNTIgZm1hICAxICAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA1MyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDU0IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNTUgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA1NiBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDU3IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNjAgZm1hICAxICAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA2MSBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDYyIGZtYSAgMSAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNjMgZm1hICAxICAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA2NCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDY1IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNjYgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA2NyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLS0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykNCi1yb3VuZGluZzogdXANCi1kZGZtYTM3NTA3MCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxDQotZGRmbWEzNzUwNzEgZm1hICAxICAxMjM0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA3MiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDczIGZtYSAgMSAgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNzQgZm1hICAxICAxMjM0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA3NSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDc2IGZtYSAgMSAgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNzcgZm1hICAxICAxMjM0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA3OCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDc5IGZtYSAgMSAgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwODAgZm1hICAxICAxMjM0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA4MSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDgyIGZtYSAgMSAgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwODMgZm1hICAxICAxMjM0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA4NCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDg1IGZtYSAgMSAgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwODYgZm1hICAxICAxMjM0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA4NyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDg4IGZtYSAgMSAgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwODkgZm1hICAxICAxMjM0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBkZXNjdHJ1Y3RpdmUgc3VidHJhY3Rpb24gKGZyb20gcmVtYWluZGVyIHRlc3RzKQ0KLQ0KLS0tICsrKyBzb21lIG9mIHRoZXNlIHdpbGwgYmUgb2ZmLWJ5LW9uZSByZW1haW5kZXIgdnMgcmVtYWluZGVyTmVhcg0KLQ0KLWRkZm1hNDAwMCAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1NCAgIDEuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc2NTQzMjEwOTg3NjU0Ng0KLWRkZm1hNDAwMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ0MyAgICAxLjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY1NDMyMTA5ODc2NTU3DQotZGRmbWE0MDAyICBmbWEgIC0xMjM0NTY3ODkwMTIzMzMyICAgICAxLjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNTQzMjEwOTg3NjY2OA0KLWRkZm1hNDAwMyAgZm1hICAgLTMwODY0MTk3MjUzMDg2MyAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTUgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNw0KLWRkZm1hNDAwNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2MyAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAzLjY5MTM1ODAyNzQ2OTEzNw0KLWRkZm1hNDAwNSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5NiAgICAgNC45OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY5MTM1NzgwMjQ2OTYNCi1kZGZtYTQwMDYgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICAgNC45OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMy40NjkxMzU3ODAyNDY5MQ0KLWRkZm1hNDAwNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDQuOTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjI0NjkxMzU3ODAyNDY5MQ0KLWRkZm1hNDAwOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDUuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc1MzA4NjQyMTk3NTMwOQ0KLWRkZm1hNDAwOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MCAgICA1LjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAzLjUzMDg2NDIxOTc1MzEwDQotZGRmbWE0MDEwICBmbWEgICAtMjQ2OTEzNTc4MDI0Njg2ICAgICA1LjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDEuMzA4NjQyMTk3NTMxNA0KLWRkZm1hNDAxMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1NSAgIDEuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTUNCi1kZGZtYTQwMTIgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NDQgICAgMS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMzQ1Njc4OTAxMjM0NDQNCi1kZGZtYTQwMTMgIGZtYSAgLTEyMzQ1Njc4OTAxMjMzMzMgICAgIDEuMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuNDU2Nzg5MDEyMzMzMw0KLWRkZm1hNDAxNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2NCAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTUgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQNCi1kZGZtYTQwMTUgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMzA4NjQxOTcyNTMwODY0DQotZGRmbWE0MDE2ICBmbWEgICAtMjQ2OTEzNTc4MDI0Njk2ICAgICA0Ljk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNjkxMzU3ODAyNDY5Ng0KLWRkZm1hNDAxNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MiAgICA0Ljk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMS41MzA4NjQyMTk3NTMwOA0KLWRkZm1hNDAxOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDQuOTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjI0NjkxMzU3ODAyNDY5MQ0KLWRkZm1hNDAxOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDUuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc1MzA4NjQyMTk3NTMwOQ0KLWRkZm1hNDAyMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgICA1LjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMS40NjkxMzU3ODAyNDY5MQ0KLWRkZm1hNDAyMSAgZm1hICAgLTI0NjkxMzU3ODAyNDY4NiAgICAgNS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjMwODY0MjE5NzUzMTQNCi0NCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRmbWEzOTk5MCBmbWEgIDEgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzk5OTEgZm1hICAxICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkRk1BLmRlY1Rlc3QgLS0gZGVjRG91YmxlIEZ1c2VkIE11bHRpcGx5IEFkZCAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFRoZXNlIHRlc3RzIGNvbXByZXNlIHRocmVlIHBhcnRzOgorLS0gICAxLiBTYW5pdHkgY2hlY2tzIGFuZCBvdGhlciB0aHJlZS1vcGVyYW5kIHRlc3RzIChlc3BlY2lhbGx5IHRob3NlCistLSAgICAgIHdoZXJlIHRoZSBmdXNlZCBvcGVyYXRpb24gbWFrZXMgYSBkaWZmZXJlbmNlKQorLS0gICAyLiBNdWx0aXBseSB0ZXN0cyAodGhpcmQgb3BlcmFuZCBpcyBuZXV0cmFsIHplcm8gWzBFK2VtYXhdKQorLS0gICAzLiBBZGRpdGlvbiB0ZXN0cyAoZmlyc3Qgb3BlcmFuZCBpcyAxKQorLS0gVGhlIG11bHRpcGx5IGFuZCBhZGRpdGlvbiB0ZXN0cyBhcmUgZXh0ZW5zaXZlIGJlY2F1c2UgRk1BIG1heSBoYXZlCistLSBpdHMgb3duIGRlZGljYXRlZCBtdWx0aXBsaWNhdGlvbiBvciBhZGRpdGlvbiByb3V0aW5lKHMpLCBhbmQgdGhleQorLS0gYWxzbyBpbmhlcmVudGx5IGNoZWNrIHRoZSBsZWZ0LXRvLXJpZ2h0IHByb3BlcnRpZXMuCisKKy0tIFNhbml0eSBjaGVja3MKK2RkZm1hMDAwMSBmbWEgIDEgICAxICAgMSAtPiAgIDIKK2RkZm1hMDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMKK2RkZm1hMDAwMyBmbWEgIDIgICAyICAgMyAtPiAgIDcKK2RkZm1hMDAwNCBmbWEgIDkgICA5ICAgOSAtPiAgOTAKK2RkZm1hMDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDAKK2RkZm1hMDAwNiBmbWEgLTEgICAxICAgMiAtPiAgIDEKK2RkZm1hMDAwNyBmbWEgLTIgICAyICAgMyAtPiAgLTEKK2RkZm1hMDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzIKK2RkZm1hMDAxMSBmbWEgIDEgIC0xICAgMSAtPiAgIDAKK2RkZm1hMDAxMiBmbWEgIDEgIC0xICAgMiAtPiAgIDEKK2RkZm1hMDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTEKK2RkZm1hMDAxNCBmbWEgIDkgIC05ICAgOSAtPiAtNzIKK2RkZm1hMDAxNSBmbWEgIDEgICAxICAtMSAtPiAgIDAKK2RkZm1hMDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTEKK2RkZm1hMDAxNyBmbWEgIDIgICAyICAtMyAtPiAgIDEKK2RkZm1hMDAxOCBmbWEgIDkgICA5ICAtOSAtPiAgNzIKKworLS0gbm9uLWludGVnZXIgZXhhY3RzCitkZGZtYTAxMDAgIGZtYSAgICAyNS4yICAgNjMuNiAgIC00MzggIC0+ICAxMTY0LjcyCitkZGZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwCitkZGZtYTAxMDIgIGZtYSAgICA0OS4yICAgLTQuOCAgIDIzLjMgIC0+ICAtMjEyLjg2CitkZGZtYTAxMDMgIGZtYSAgICA0LjIyICAwLjA3OSAgLTk0LjYgIC0+ICAtOTQuMjY2NjIKK2RkZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgKK2RkZm1hMDEwNSAgZm1hICAgIDYuMTMgICAtMTYxICAgNjUuOSAgLT4gIC05MjEuMDMKK2RkZm1hMDEwNiAgZm1hICAgIDI4LjIgICAgNzI3ICAgNS40NSAgLT4gIDIwNTA2Ljg1CitkZGZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4CitkZGZtYTAxMDggIGZtYSAgICA5My4zICAgMC4xOSAgMC4yMjYgIC0+ICAxNy45NTMKK2RkZm1hMDEwOSAgZm1hICAgMC4xNjkgICAtMzQxICAgNS42MSAgLT4gIC01Mi4wMTkKK2RkZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjIKK2RkZm1hMDExMSAgZm1hICAtMC40MDkgICAgIDEzICAgMjAuNCAgLT4gIDE1LjA4MworZGRmbWEwMTEyICBmbWEgICAgIDMxNyAgIDc3LjAgICAxOS4wICAtPiAgMjQ0MjguMAorZGRmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4CitkZGZtYTAxMTQgIGZtYSAgICAxLjM2ICAwLjk4NCAgMC40OTMgIC0+ICAxLjgzMTI0CitkZGZtYTAxMTUgIGZtYSAgICA3Mi43ICAgIDI3NCAgIDEuNTYgIC0+ICAxOTkyMS4zNgorZGRmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4CitkZGZtYTAxMTcgIGZtYSAgICAgNjY2ICAwLjI0NyAgIDI1LjQgIC0+ICAxODkuOTAyCitkZGZtYTAxMTggIGZtYSAgIC0zLjg3ICAgMy4wNiAgIDc4LjAgIC0+ICA2Ni4xNTc4CitkZGZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0CitkZGZtYTAxMjAgIGZtYSAgIC05MS42ICAgNS4yOSAgMC4xNTMgIC0+ICAtNDg0LjQxMQorCistLSBjYXNlcyB3aGVyZSByZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gc2VwYXJhdGUgbXVsdGlwbHkgKyBhZGQ7IGVhY2gKKy0tIGlzIHByZWNlZGVkIGJ5IHRoZSByZXN1bHQgb2YgdW5mdXNlZCBtdWx0aXBseSBhbmQgYWRkCistLSBbdGhpcyBpcyBhYm91dCAyMCUgb2YgYWxsIHNpbWlsYXIgIGNhc2VzIGluIGdlbmVyYWxdCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNy4xMjMzNTY0MjkyNTc5NjlFKzE2CitkZGZtYTAyMDEgIGZtYSAgICAgICAyNzU4MzQ4OS42NjQ1ICAgICAgMjU4MjQ3MTA3OC4wNCAgICAgIDI1OTMxODMuNDIzNzEgIC0+ICA3LjEyMzM1NjQyOTI1Nzk3MEUrMTYgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIyODEzMjc1MzI4LjgwNTA2CitkZGZtYTAyMDggIGZtYSAgICAgICAgMjQyODAuMzU1NTY2ICAgICAgOTM5NTc3LjM5NzY1MyAgICAgICAgMjAzMi4wMTMyNTIgIC0+ICAyMjgxMzI3NTMyOC44MDUwNyAgICAgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0yLjAzMDM5NzczNDI3ODA2MkUrMTYKK2RkZm1hMDIwOSAgZm1hICAgICAgICAgIDc4NDg5NzY0MzIgICAgICAtMjU4NjgzMS4yMjgxICAgICAgMTM3OTAzLjUxNzkwOSAgLT4gIC0yLjAzMDM5NzczNDI3ODA2MUUrMTYgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMjA0MDc3NDA5NDgxNC4wNzcKK2RkZm1hMDIxNyAgZm1hICAgICAgICA1Njg5MC4zODg3MzEgICAgICAzNTg3MjAzMC40MjU1ICAgICAgMzM5MzM3LjEyMzQxMCAgLT4gIDIwNDA3NzQwOTQ4MTQuMDc4ICAgICAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMi43MTQ0Njk1NzUyMDUwNDlFKzE4CitkZGZtYTAyMjAgIGZtYSAgICAgICA3NTMzNTQzLjU3NDQ1ICAgICAgIDM2MDMxNzc2MzkyOCAgICAgIDUwNzMzOTIuMzE2MzggIC0+ICAyLjcxNDQ2OTU3NTIwNTA1MEUrMTggIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuMDExNjc2Mjk3NzE2NzE2RSsxOQorZGRmbWEwMjIzICBmbWEgICAgICAgNzM5OTQ1MjU1LjU2MyAgICAgIDEzNjcyMzEyNzg0LjEgICAgICAtOTk0MzgxLjUzNTcyICAtPiAgMS4wMTE2NzYyOTc3MTY3MTVFKzE5ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi45MTQxMzU3MjE0NTUzMTVFKzIzCitkZGZtYTAyMjQgIGZtYSAgICAgICAtNDEzNTEwOTU3MjE4ICAgICAgIDcwNDcyOTk4ODU1MCAgICAgICA5MjM0MTYyNjE0LjAgIC0+ICAtMi45MTQxMzU3MjE0NTUzMTRFKzIzIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIuNjIwMTE5ODYzMzY1Nzg2RSsxNworZGRmbWEwMjI2ICBmbWEgICAgICAgIDQzNzQ4NC4wMDYwMSAgICAgICA1OTg5MDY0MzI3OTAgICAgICA4OTQ0NTA2MzguNDQyICAtPiAgMi42MjAxMTk4NjMzNjU3ODdFKzE3ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjI3MjY0Nzk5NTgwODE3OEUrMTkKK2RkZm1hMDI1MyAgZm1hICAgICAgICAgNzMyODc1NTY5MjkgICAgICAxNzM2NTEzMDUuNzg0ICAgICAtMzU4MzEyNTY4LjM4OSAgLT4gIDEuMjcyNjQ3OTk1ODA4MTc3RSsxOSAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTEuNzUzNzY5MzIwODYxODUxRSsxOAorZGRmbWEwMjU3ICBmbWEgICAgICAgIDIwMzI1ODMwNDQ4NiAgICAgIC04NjI4Mjc4LjgwNjYgICAgICAxNTMxMjcuNDQ2NzI3ICAtPiAgLTEuNzUzNzY5MzIwODYxODUwRSsxOCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMS41NTA3Mzc4MzUyNjMzNDZFKzE3CitkZGZtYTAyNjAgIGZtYSAgICAgICA0MjU2MDUzMy4xNzc0ICAgICAtMzY0MzYwNTI4Mi44NiAgICAgICAxNzgyNzcuOTYzNzcgIC0+ICAtMS41NTA3Mzc4MzUyNjMzNDdFKzE3IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIuODk3NjI0NjIwNTc2MDA1RSsyMgorZGRmbWEwMjY5ICBmbWEgICAgICAgIDE0MjY1NjU4NzM3NSAgICAgICAyMDMxMTg4Nzk2NzAgICAgICAgNjA0NTc2MTAzOTkxICAtPiAgMi44OTc2MjQ2MjA1NzYwMDRFKzIyICBJbmV4YWN0IFJvdW5kZWQKKworLS0gQ2FzZXMgd2hlcmUgbXVsdGlwbHkgd291bGQgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlmIHNlcGFyYXRlCitmbWEwMzAwICBmbWEgICA5ZSszODQgICAgMTAgICAwICAgICAgICAgLT4gSW5maW5pdHkgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1hMDMwMSAgZm1hICAgMWUrMzg0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYTAzMDIgIGZtYSAgIDFlKzM4NCAgICAxMCAgIC0xZSszODQgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCitmbWEwMzAzICBmbWEgICAxZSszODQgICAgMTAgICAtOWUrMzg0ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAorLS0gc3Vibm9ybWFsIGV0Yy4KK2ZtYTAzMDUgIGZtYSAgIDFlLTM5OCAgICAwLjEgIDAgICAgICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1hMDMwNiAgZm1hICAgMWUtMzk4ICAgIDAuMSAgMSAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1hMDMwNyAgZm1hICAgMWUtMzk4ICAgIDAuMSAgMWUtMzk4ICAgIC0+IDFFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBJbmZpbml0ZSBjb21iaW5hdGlvbnMKK2RkZm1hMDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RkZm1hMDgwMSBmbWEgIEluZiAgIEluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTA4MDIgZm1hICBJbmYgIC1JbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQorZGRmbWEwODA0IGZtYSAtSW5mICAgSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDgwNSBmbWEgLUluZiAgIEluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKK2RkZm1hMDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RkZm1hMDgwNyBmbWEgLUluZiAgLUluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24KK2RkZm1hMDkwMCBmbWEgIE5hTjIgIE5hTjMgIE5hTjUgICAtPiAgTmFOMgorZGRmbWEwOTAxIGZtYSAgMCAgICAgTmFOMyAgTmFONSAgIC0+ICBOYU4zCitkZGZtYTA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUKKy0tIGZpcnN0IHNOYU4gd2lucyAoY29uc2lkZXIgcU5hTiBmcm9tIGVhcmxpZXIgc05hTiBiZWluZworLS0gb3ZlcnJpZGRlbiBieSBhbiBzTmFOIGluIHRoaXJkIG9wZXJhbmQpCitkZGZtYTA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDkwNCBmbWEgIDAgICAgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEwOTA1IGZtYSAgMCAgICAgMCAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDkwNyBmbWEgIE5hTjcgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEwOTA4IGZtYSAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE1VTFRJUExJQ0FUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBzYW5pdHkgY2hlY2tzCitkZGZtYTIwMDAgZm1hICAyICAgICAgMiAgIDBlKzM4NCAgLT4gIDQKK2RkZm1hMjAwMSBmbWEgIDIgICAgICAzICAgMGUrMzg0ICAtPiAgNgorZGRmbWEyMDAyIGZtYSAgNSAgICAgIDEgICAwZSszODQgIC0+ICA1CitkZGZtYTIwMDMgZm1hICA1ICAgICAgMiAgIDBlKzM4NCAgLT4gIDEwCitkZGZtYTIwMDQgZm1hICAxLjIwICAgMiAgIDBlKzM4NCAgLT4gIDIuNDAKK2RkZm1hMjAwNSBmbWEgIDEuMjAgICAwICAgMGUrMzg0ICAtPiAgMC4wMAorZGRmbWEyMDA2IGZtYSAgMS4yMCAgLTIgICAwZSszODQgIC0+ICAtMi40MAorZGRmbWEyMDA3IGZtYSAgLTEuMjAgIDIgICAwZSszODQgIC0+ICAtMi40MAorZGRmbWEyMDA4IGZtYSAgLTEuMjAgIDAgICAwZSszODQgIC0+ICAwLjAwCitkZGZtYTIwMDkgZm1hICAtMS4yMCAtMiAgIDBlKzM4NCAgLT4gIDIuNDAKK2RkZm1hMjAxMCBmbWEgIDUuMDkgNy4xICAgMGUrMzg0ICAtPiAgMzYuMTM5CitkZGZtYTIwMTEgZm1hICAyLjUgICAgNCAgIDBlKzM4NCAgLT4gIDEwLjAKK2RkZm1hMjAxMiBmbWEgIDIuNTAgICA0ICAgMGUrMzg0ICAtPiAgMTAuMDAKK2RkZm1hMjAxMyBmbWEgIDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAgIDBlKzM4NCAgLT4gIDEuMjM0NTY3ODkwMDAwMDAwIFJvdW5kZWQKK2RkZm1hMjAxNSBmbWEgIDIuNTAgICA0ICAgMGUrMzg0ICAtPiAgMTAuMDAKK2RkZm1hMjAxNiBmbWEgICA5Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAgOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTIwMTcgZm1hICAgOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgLTk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEyMDE4IGZtYSAgLTkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gIC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjAxOSBmbWEgIC05Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAgOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHplcm9zLCBldGMuCitkZGZtYTIwMjEgZm1hICAgMCAgICAgIDAgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjAyMiBmbWEgICAwICAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyMDIzIGZtYSAgLTAgICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTIwMjQgZm1hICAtMCAgICAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjAyNSBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyMDI2IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTIwMjcgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjAyOCBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyMDMwIGZtYSAgIDUuMDAgICAxRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwNTAwCitkZGZtYTIwMzEgZm1hICAgMDAuMDAgIDAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAKK2RkZm1hMjAzMiBmbWEgICAwMC4wMCAgMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkZm1hMjAzMyBmbWEgICAwRS0zICAgMDAuMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RkZm1hMjAzNCBmbWEgIC01LjAwICAgMUUtMyAgICAwZSszODQgIC0+ICAtMC4wMDUwMAorZGRmbWEyMDM1IGZtYSAgLTAwLjAwICAwLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwCitkZGZtYTIwMzYgZm1hICAtMDAuMDAgIDBFLTMgICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZGZtYTIwMzcgZm1hICAtMEUtMyAgIDAwLjAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkZGZtYTIwMzggZm1hICAgNS4wMCAgLTFFLTMgICAgMGUrMzg0ICAtPiAgLTAuMDA1MDAKK2RkZm1hMjAzOSBmbWEgICAwMC4wMCAtMC4wMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMAorZGRmbWEyMDQwIGZtYSAgIDAwLjAwIC0wRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZGRmbWEyMDQxIGZtYSAgIDBFLTMgIC0wMC4wMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZGRmbWEyMDQyIGZtYSAgLTUuMDAgIC0xRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwNTAwCitkZGZtYTIwNDMgZm1hICAtMDAuMDAgLTAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAKK2RkZm1hMjA0NCBmbWEgIC0wMC4wMCAtMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkZm1hMjA0NSBmbWEgIC0wRS0zICAtMDAuMDAgIC0wZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RkZm1hMjA0NiBmbWEgIC0wRS0zICAgMDAuMDAgIC0wZSszODQgIC0+ICAtMC4wMDAwMAorZGRmbWEyMDQ3IGZtYSAgIDBFLTMgIC0wMC4wMCAgLTBlKzM4NCAgLT4gIC0wLjAwMDAwCitkZGZtYTIwNDggZm1hICAgMEUtMyAgIDAwLjAwICAtMGUrMzg0ICAtPiAgIDAuMDAwMDAKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZGRmbWEyMDUwIGZtYSAgMS4yMCAzICAgICAgICAgIDBlKzM4NCAgLT4gIDMuNjAKK2RkZm1hMjA1MSBmbWEgIDcgICAgMyAgICAgICAgICAwZSszODQgIC0+ICAyMQorZGRmbWEyMDUyIGZtYSAgMC45ICAwLjggICAgICAgIDBlKzM4NCAgLT4gIDAuNzIKK2RkZm1hMjA1MyBmbWEgIDAuOSAgLTAgICAgICAgICAwZSszODQgIC0+ICAwLjAKK2RkZm1hMjA1NCBmbWEgIDY1NDMyMSA2NTQzMjEgICAwZSszODQgIC0+ICA0MjgxMzU5NzEwNDEKKworZGRmbWEyMDYwIGZtYSAgMTIzLjQ1IDFlNyAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSs5CitkZGZtYTIwNjEgZm1hICAxMjMuNDUgMWU4ICAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEwCitkZGZtYTIwNjIgZm1hICAxMjMuNDUgMWUrOSAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzExCitkZGZtYTIwNjMgZm1hICAxMjMuNDUgMWUxMCAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEyCitkZGZtYTIwNjQgZm1hICAxMjMuNDUgMWUxMSAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEzCitkZGZtYTIwNjUgZm1hICAxMjMuNDUgMWUxMiAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzE0CitkZGZtYTIwNjYgZm1hICAxMjMuNDUgMWUxMyAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzE1CisKKworLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCistLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRmbWEyMDgwIGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkKK2RkZm1hMjA4NCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzM4NCAgLT4gIDEyMzAxMjM0NTY0NTY3OC45CitkZGZtYTIwOTAgZm1hICAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgICAwZSszODQgIC0+ICAxMjMwMTIzNDU2NDU2NzguOQorZGRmbWEyMDk0IGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkKKworLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcworZGRmbWEyMTAxIGZtYSAgOSA5ICAgICAwZSszODQgIC0+ICA4MQorZGRmbWEyMTAyIGZtYSAgOSA5MCAgICAgMGUrMzg0ICAtPiAgODEwCitkZGZtYTIxMDMgZm1hICA5IDkwMCAgICAgMGUrMzg0ICAtPiAgODEwMAorZGRmbWEyMTA0IGZtYSAgOSA5MDAwICAgICAwZSszODQgIC0+ICA4MTAwMAorZGRmbWEyMTA1IGZtYSAgOSA5MDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwCitkZGZtYTIxMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMAorZGRmbWEyMTA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMAorZGRmbWEyMTA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwCitkZGZtYTIxMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMAorZGRmbWEyMTEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMAorZGRmbWEyMTExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwCitkZGZtYTIxMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMAorZGRmbWEyMTEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMAorZGRmbWEyMTE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwCitkZGZtYTIxMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMTYgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwCistLWRkZm1hMjExNyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMTggZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMTkgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwCistLWRkZm1hMjEyMCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMjEgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMjIgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRkZm1hMjEyMyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKK2RkZm1hMjEzMSBmbWEgIDMgMyAgICAgMGUrMzg0ICAtPiAgOQorZGRmbWEyMTMyIGZtYSAgMyAzMCAgICAgMGUrMzg0ICAtPiAgOTAKK2RkZm1hMjEzMyBmbWEgIDMgMzAwICAgICAwZSszODQgIC0+ICA5MDAKK2RkZm1hMjEzNCBmbWEgIDMgMzAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMAorZGRmbWEyMTM1IGZtYSAgMyAzMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAKK2RkZm1hMjEzNiBmbWEgIDMgMzAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAKK2RkZm1hMjEzNyBmbWEgIDMgMzAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMAorZGRmbWEyMTM4IGZtYSAgMyAzMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAKK2RkZm1hMjEzOSBmbWEgIDMgMzAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAKK2RkZm1hMjE0MCBmbWEgIDMgMzAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMAorZGRmbWEyMTQxIGZtYSAgMyAzMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAKK2RkZm1hMjE0MiBmbWEgIDMgMzAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAwMDAKK2RkZm1hMjE0MyBmbWEgIDMgMzAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMAorZGRmbWEyMTQ0IGZtYSAgMyAzMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMDAKK2RkZm1hMjE0NSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAwMDAwMDAKKworLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZworZGRmbWEyMzAxIGZtYSAgOSA5ICAgICAwZSszODQgIC0+ICA4MQorZGRmbWEyMzAyIGZtYSAgOSA5MCAgICAgMGUrMzg0ICAtPiAgODEwCitkZGZtYTIzMDMgZm1hICA5IDkwMCAgICAgMGUrMzg0ICAtPiAgODEwMAorZGRmbWEyMzA0IGZtYSAgOSA5MDAwICAgICAwZSszODQgIC0+ICA4MTAwMAorZGRmbWEyMzA1IGZtYSAgOSA5MDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwCitkZGZtYTIzMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMAorZGRmbWEyMzA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMAorZGRmbWEyMzA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwCitkZGZtYTIzMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMAorZGRmbWEyMzEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMAorZGRmbWEyMzExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwCitkZGZtYTIzMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMAorZGRmbWEyMzEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMAorZGRmbWEyMzE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwCitkZGZtYTIzMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMAorZGRmbWEyMzE2IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQKK2RkZm1hMjMxNyBmbWEgIDkwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZAorZGRmbWEyMzE4IGZtYSAgOTAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxOCAgUm91bmRlZAorZGRmbWEyMzE5IGZtYSAgOTAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTkgIFJvdW5kZWQKK2RkZm1hMjMyMCBmbWEgIDkwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZAorZGRmbWEyMzIxIGZtYSAgOTAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMSAgUm91bmRlZAorZGRmbWEyMzIyIGZtYSAgOTAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMjIgIFJvdW5kZWQKK2RkZm1hMjMyMyBmbWEgIDkwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMyAgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworZGRmbWEyNTA0ICBmbWEgICAwRS0yNjAgMTAwMEUtMjYwICAgIDBlKzM4NCAgLT4gIDBFLTM5OCBDbGFtcGVkCitkZGZtYTI1MDUgIGZtYSAgIDEwMEUrMjYwIDBFKzI2MCAgICAgMGUrMzg0ICAtPiAgMEUrMzY5IENsYW1wZWQKKworLS0gbWl4ZWQgd2l0aCB6ZXJvcworZGRmbWEyNTQxIGZtYSAgIDAgICAgLTEgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjU0MiBmbWEgIC0wICAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTI1NDMgZm1hICAgMCAgICAgMSAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyNTQ0IGZtYSAgLTAgICAgIDEgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjU0NSBmbWEgIC0xICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTI1NDYgZm1hICAtMSAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyNTQ3IGZtYSAgIDEgICAgIDAgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjU0OCBmbWEgICAxICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwCisKK2RkZm1hMjU1MSBmbWEgICAwLjAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1MiBmbWEgIC0wLjAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1MyBmbWEgICAwLjAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1NCBmbWEgIC0wLjAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1NSBmbWEgIC0xLjAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1NiBmbWEgIC0xLjAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1NyBmbWEgICAxLjAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1OCBmbWEgICAxLjAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwLjAKKworZGRmbWEyNTYxIGZtYSAgIDAgICAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTYyIGZtYSAgLTAgICAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTYzIGZtYSAgIDAgICAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTY0IGZtYSAgLTAgICAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTY1IGZtYSAgLTEgICAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTY2IGZtYSAgLTEgICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTY3IGZtYSAgIDEgICAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTY4IGZtYSAgIDEgICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorCitkZGZtYTI1NzEgZm1hICAgMC4wICAtMS4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyNTcyIGZtYSAgLTAuMCAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjU3MyBmbWEgICAwLjAgICAxLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTI1NzQgZm1hICAtMC4wICAgMS4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyNTc1IGZtYSAgLTEuMCAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjU3NiBmbWEgIC0xLjAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTI1NzcgZm1hICAgMS4wICAgMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyNTc4IGZtYSAgIDEuMCAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKKworLS0gU3BlY2lhbHMKK2RkZm1hMjU4MCBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNTgxIGZtYSAgIEluZiAgLTEwMDAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI1ODIgZm1hICAgSW5mICAtMSAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjU4MyBmbWEgICBJbmYgIC0wICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI1ODQgZm1hICAgSW5mICAgMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNTg1IGZtYSAgIEluZiAgIDEgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI1ODYgZm1hICAgSW5mICAgMTAwMCAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjU4NyBmbWEgICBJbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNTg4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI1ODkgZm1hICAtSW5mICAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjU5MCBmbWEgIC0xICAgICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNTkxIGZtYSAgLTAgICAgIEluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjU5MiBmbWEgICAwICAgICBJbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI1OTMgZm1hICAgMSAgICAgSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjU5NCBmbWEgICAxMDAwICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNTk1IGZtYSAgIEluZiAgIEluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CisKK2RkZm1hMjYwMCBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNjAxIGZtYSAgLUluZiAgLTEwMDAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI2MDIgZm1hICAtSW5mICAtMSAgICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjYwMyBmbWEgIC1JbmYgIC0wICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2MDQgZm1hICAtSW5mICAgMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjA1IGZtYSAgLUluZiAgIDEgICAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI2MDYgZm1hICAtSW5mICAgMTAwMCAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjYwNyBmbWEgIC1JbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNjA4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI2MDkgZm1hICAtSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjYxMCBmbWEgIC0xICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNjExIGZtYSAgLTAgICAgLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjYxMiBmbWEgICAwICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2MTMgZm1hICAgMSAgICAtSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjYxNCBmbWEgICAxMDAwIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNjE1IGZtYSAgIEluZiAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CisKK2RkZm1hMjYyMSBmbWEgICBOYU4gLUluZiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyMiBmbWEgICBOYU4gLTEwMDAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyMyBmbWEgICBOYU4gLTEgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyNCBmbWEgICBOYU4gLTAgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyNSBmbWEgICBOYU4gIDAgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyNiBmbWEgICBOYU4gIDEgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyNyBmbWEgICBOYU4gIDEwMDAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyOCBmbWEgICBOYU4gIEluZiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyOSBmbWEgICBOYU4gIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzMCBmbWEgIC1JbmYgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzMSBmbWEgIC0xMDAwIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzMiBmbWEgIC0xICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzMyBmbWEgIC0wICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzNCBmbWEgICAwICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzNSBmbWEgICAxICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzNiBmbWEgICAxMDAwIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzNyBmbWEgICBJbmYgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KKworZGRmbWEyNjQxIGZtYSAgIHNOYU4gLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY0MiBmbWEgICBzTmFOIC0xMDAwICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDMgZm1hICAgc05hTiAtMSAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjQ0IGZtYSAgIHNOYU4gLTAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY0NSBmbWEgICBzTmFOICAwICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDYgZm1hICAgc05hTiAgMSAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjQ3IGZtYSAgIHNOYU4gIDEwMDAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY0OCBmbWEgICBzTmFOICBOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDkgZm1hICAgc05hTiBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjUwIGZtYSAgIE5hTiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1MSBmbWEgIC1JbmYgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTIgZm1hICAtMTAwMCBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjUzIGZtYSAgLTEgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1NCBmbWEgIC0wICAgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTUgZm1hICAgMCAgICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjU2IGZtYSAgIDEgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1NyBmbWEgICAxMDAwIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTggZm1hICAgSW5mICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjU5IGZtYSAgIE5hTiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRmbWEyNjYxIGZtYSAgIE5hTjkgLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTjkKK2RkZm1hMjY2MiBmbWEgICBOYU44ICA5OTkgICAgIDBlKzM4NCAgLT4gICBOYU44CitkZGZtYTI2NjMgZm1hICAgTmFONzEgSW5mICAgICAwZSszODQgIC0+ICAgTmFONzEKK2RkZm1hMjY2NCBmbWEgICBOYU42ICBOYU41ICAgIDBlKzM4NCAgLT4gICBOYU42CitkZGZtYTI2NjUgZm1hICAtSW5mICAgTmFONCAgICAwZSszODQgIC0+ICAgTmFONAorZGRmbWEyNjY2IGZtYSAgLTk5OSAgIE5hTjMzICAgMGUrMzg0ICAtPiAgIE5hTjMzCitkZGZtYTI2NjcgZm1hICAgSW5mICAgTmFOMiAgICAwZSszODQgIC0+ICAgTmFOMgorCitkZGZtYTI2NzEgZm1hICAgc05hTjk5IC1JbmYgICAgICAwZSszODQgIC0+ICAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3MiBmbWEgICBzTmFOOTggLTExICAgICAgIDBlKzM4NCAgLT4gICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjczIGZtYSAgIHNOYU45NyAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NzQgZm1hICAgc05hTjE2IHNOYU45NCAgICAwZSszODQgIC0+ICAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3NSBmbWEgICBOYU45NSAgc05hTjkzICAgIDBlKzM4NCAgLT4gICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjc2IGZtYSAgLUluZiAgICBzTmFOOTIgICAgMGUrMzg0ICAtPiAgIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NzcgZm1hICAgMDg4ICAgIHNOYU45MSAgICAwZSszODQgIC0+ICAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3OCBmbWEgICBJbmYgICAgc05hTjkwICAgIDBlKzM4NCAgLT4gICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjc5IGZtYSAgIE5hTiAgICBzTmFOODkgICAgMGUrMzg0ICAtPiAgIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RkZm1hMjY4MSBmbWEgIC1OYU45IC1JbmYgICAgIDBlKzM4NCAgLT4gIC1OYU45CitkZGZtYTI2ODIgZm1hICAtTmFOOCAgOTk5ICAgICAwZSszODQgIC0+ICAtTmFOOAorZGRmbWEyNjgzIGZtYSAgLU5hTjcxIEluZiAgICAgMGUrMzg0ICAtPiAgLU5hTjcxCitkZGZtYTI2ODQgZm1hICAtTmFONiAtTmFONSAgICAwZSszODQgIC0+ICAtTmFONgorZGRmbWEyNjg1IGZtYSAgLUluZiAgLU5hTjQgICAgMGUrMzg0ICAtPiAgLU5hTjQKK2RkZm1hMjY4NiBmbWEgIC05OTkgIC1OYU4zMyAgIDBlKzM4NCAgLT4gIC1OYU4zMworZGRmbWEyNjg3IGZtYSAgIEluZiAgLU5hTjIgICAgMGUrMzg0ICAtPiAgLU5hTjIKKworZGRmbWEyNjkxIGZtYSAgLXNOYU45OSAtSW5mICAgICAgMGUrMzg0ICAtPiAgLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTIgZm1hICAtc05hTjk4IC0xMSAgICAgICAwZSszODQgIC0+ICAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY5MyBmbWEgIC1zTmFOOTcgIE5hTiAgICAgIDBlKzM4NCAgLT4gIC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjk0IGZtYSAgLXNOYU4xNiAtc05hTjk0ICAgMGUrMzg0ICAtPiAgLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTUgZm1hICAtTmFOOTUgIC1zTmFOOTMgICAwZSszODQgIC0+ICAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY5NiBmbWEgIC1JbmYgICAgLXNOYU45MiAgIDBlKzM4NCAgLT4gIC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjk3IGZtYSAgIDA4OCAgICAtc05hTjkxICAgMGUrMzg0ICAtPiAgLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTggZm1hICAgSW5mICAgIC1zTmFOOTAgICAwZSszODQgIC0+ICAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY5OSBmbWEgIC1OYU4gICAgLXNOYU44OSAgIDBlKzM4NCAgLT4gIC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkZGZtYTI3MDEgZm1hICAtTmFOICAtSW5mICAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDIgZm1hICAtTmFOICAgOTk5ICAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDMgZm1hICAtTmFOICAgSW5mICAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDQgZm1hICAtTmFOICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDUgZm1hICAtSW5mICAtTmFOMCAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDYgZm1hICAtOTk5ICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDcgZm1hICAgSW5mICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFOCisKK2RkZm1hMjcxMSBmbWEgIC1zTmFOICAgLUluZiAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxMiBmbWEgIC1zTmFOICAgLTExICAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxMyBmbWEgIC1zTmFOMDAgIE5hTiAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxNCBmbWEgIC1zTmFOICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxNSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxNiBmbWEgIC1JbmYgICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxNyBmbWEgICAwODggICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxOCBmbWEgICBJbmYgICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxOSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZGRmbWEyNzUxIGZtYSAgIDFlKzI3NyAgMWUrMzExICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzUyIGZtYSAgIDFlKzI3NyAtMWUrMzExICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzUzIGZtYSAgLTFlKzI3NyAgMWUrMzExICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzU0IGZtYSAgLTFlKzI3NyAtMWUrMzExICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzU1IGZtYSAgIDFlLTI3NyAgMWUtMzExICAgMGUrMzg0ICAtPiAgIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI3NTYgZm1hICAgMWUtMjc3IC0xZS0zMTEgICAwZSszODQgIC0+ICAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZm1hMjc1NyBmbWEgIC0xZS0yNzcgIDFlLTMxMSAgIDBlKzM4NCAgLT4gIC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyNzU4IGZtYSAgLTFlLTI3NyAtMWUtMzExICAgMGUrMzg0ICAtPiAgIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZGRmbWEyNzYwIGZtYSAgMWUtMjkxIDFlLTEwMSAgIDBlKzM4NCAgLT4gIDFFLTM5MiBTdWJub3JtYWwKK2RkZm1hMjc2MSBmbWEgIDFlLTI5MSAxZS0xMDIgICAwZSszODQgIC0+ICAxRS0zOTMgU3Vibm9ybWFsCitkZGZtYTI3NjIgZm1hICAxZS0yOTEgMWUtMTAzICAgMGUrMzg0ICAtPiAgMUUtMzk0IFN1Ym5vcm1hbAorZGRmbWEyNzYzIGZtYSAgMWUtMjkxIDFlLTEwNCAgIDBlKzM4NCAgLT4gIDFFLTM5NSBTdWJub3JtYWwKK2RkZm1hMjc2NCBmbWEgIDFlLTI5MSAxZS0xMDUgICAwZSszODQgIC0+ICAxRS0zOTYgU3Vibm9ybWFsCitkZGZtYTI3NjUgZm1hICAxZS0yOTEgMWUtMTA2ICAgMGUrMzg0ICAtPiAgMUUtMzk3IFN1Ym5vcm1hbAorZGRmbWEyNzY2IGZtYSAgMWUtMjkxIDFlLTEwNyAgIDBlKzM4NCAgLT4gIDFFLTM5OCBTdWJub3JtYWwKK2RkZm1hMjc2NyBmbWEgIDFlLTI5MSAxZS0xMDggICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyNzY4IGZtYSAgMWUtMjkxIDFlLTEwOSAgIDBlKzM4NCAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI3NjkgZm1hICAxZS0yOTEgMWUtMTEwICAgMGUrMzg0ICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KK2RkZm1hMjc3MCBmbWEgIDFlKzYwIDFlKzMyMSAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwRSszODEgIENsYW1wZWQKK2RkZm1hMjc3MSBmbWEgIDFlKzYwIDFlKzMyMiAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMEUrMzgyICBDbGFtcGVkCitkZGZtYTI3NzIgZm1hICAxZSs2MCAxZSszMjMgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQKK2RkZm1hMjc3MyBmbWEgIDFlKzYwIDFlKzMyNCAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKK2RkZm1hMjc3NCBmbWEgIDFlKzYwIDFlKzMyNSAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzc1IGZtYSAgMWUrNjAgMWUrMzI2ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI3NzYgZm1hICAxZSs2MCAxZSszMjcgICAwZSszODQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc3NyBmbWEgIDFlKzYwIDFlKzMyOCAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzc4IGZtYSAgMWUrNjAgMWUrMzI5ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI3NzkgZm1hICAxZSs2MCAxZSszMzAgICAwZSszODQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEyODAxIGZtYSAgIDEuMDAwMEUtMzk0ICAxICAgICAgIDBlKzM4NCAgLT4gIDEuMDAwMEUtMzk0IFN1Ym5vcm1hbAorZGRmbWEyODAyIGZtYSAgIDEuMDAwRS0zOTQgICAxZS0xICAgIDBlKzM4NCAgLT4gIDEuMDAwRS0zOTUgIFN1Ym5vcm1hbAorZGRmbWEyODAzIGZtYSAgIDEuMDBFLTM5NCAgICAxZS0yICAgIDBlKzM4NCAgLT4gIDEuMDBFLTM5NiAgIFN1Ym5vcm1hbAorZGRmbWEyODA0IGZtYSAgIDEuMEUtMzk0ICAgICAxZS0zICAgIDBlKzM4NCAgLT4gIDEuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRmbWEyODA1IGZtYSAgIDEuMEUtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZm1hMjgwNiBmbWEgICAxLjNFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MDcgZm1hICAgMS41RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODA4IGZtYSAgIDEuN0UtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgwOSBmbWEgICAyLjNFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MTAgZm1hICAgMi41RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODExIGZtYSAgIDIuN0UtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgxMiBmbWEgICAxLjQ5RS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MTMgZm1hICAgMS41MEUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODE0IGZtYSAgIDEuNTFFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgxNSBmbWEgICAyLjQ5RS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MTYgZm1hICAgMi41MEUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODE3IGZtYSAgIDIuNTFFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEyODE4IGZtYSAgIDFFLTM5NCAgICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgU3Vibm9ybWFsCitkZGZtYTI4MTkgZm1hICAgM0UtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI4MjAgZm1hICAgNUUtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI4MjEgZm1hICAgN0UtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODIyIGZtYSAgIDlFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgyMyBmbWEgICA5LjlFLTM5NCAgICAgMWUtNSAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMjgyNCBmbWEgICAxRS0zOTQgICAgICAtMWUtNCAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFN1Ym5vcm1hbAorZGRmbWEyODI1IGZtYSAgIDNFLTM5NCAgICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyODI2IGZtYSAgLTVFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyODI3IGZtYSAgIDdFLTM5NCAgICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgyOCBmbWEgIC05RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MjkgZm1hICAgOS45RS0zOTQgICAgLTFlLTUgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODMwIGZtYSAgIDMuMEUtMzk0ICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkZGZtYTI4MzEgZm1hICAgMS4wRS0xOTkgICAgIDFlLTIwMCAgIDBlKzM4NCAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI4MzIgZm1hICAgMS4wRS0xOTkgICAgIDFlLTE5OSAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICBTdWJub3JtYWwgUm91bmRlZAorZGRmbWEyODMzIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0xOTggICAwZSszODQgIC0+ICAxLjBFLTM5NyAgICBTdWJub3JtYWwKK2RkZm1hMjgzNCBmbWEgICAyLjBFLTE5OSAgICAgMmUtMTk4ICAgMGUrMzg0ICAtPiAgNC4wRS0zOTcgICAgU3Vibm9ybWFsCitkZGZtYTI4MzUgZm1hICAgNC4wRS0xOTkgICAgIDRlLTE5OCAgIDBlKzM4NCAgLT4gIDEuNjBFLTM5NiAgIFN1Ym5vcm1hbAorZGRmbWEyODM2IGZtYSAgMTAuMEUtMTk5ICAgIDEwZS0xOTggICAwZSszODQgIC0+ICAxLjAwMEUtMzk1ICBTdWJub3JtYWwKK2RkZm1hMjgzNyBmbWEgIDMwLjBFLTE5OSAgICAzMGUtMTk4ICAgMGUrMzg0ICAtPiAgOS4wMDBFLTM5NSAgU3Vibm9ybWFsCitkZGZtYTI4MzggZm1hICA0MC4wRS0xOTkgICAgNDBlLTE4OCAgIDBlKzM4NCAgLT4gIDEuNjAwMEUtMzg0IFN1Ym5vcm1hbAorZGRmbWEyODM5IGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODcgICAwZSszODQgIC0+ICAxLjYwMDBFLTM4MworZGRmbWEyODQwIGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODYgICAwZSszODQgIC0+ICAxLjYwMDBFLTM4MgorCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKK2RkZm1hMjg3MCBmbWEgIDEwMCAgOS45OTlFKzM4MyAgICAgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGRmbWEyODcxIGZtYSAgMTAwIC05Ljk5OUUrMzgzICAgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RkZm1hMjg3MiBmbWEgICAgICAgOS45OTlFKzM4MyAxMDAgICAwZSszODQgIC0+ICAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkZGZtYTI4NzMgZm1hICAgICAgLTkuOTk5RSszODMgMTAwICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworZGRmbWEyODgxIGZtYSAgIDEuMjM0N0UtMzU1IDEuMjM0N0UtNDAgICAgMGUrMzg0ICAtPiAgIDEuNTI0RS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZm1hMjg4MiBmbWEgICAxLjIzNEUtMzU1IDEuMjM0RS00MCAgICAgIDBlKzM4NCAgLT4gICAxLjUyM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGZtYTI4ODMgZm1hICAgMS4yM0UtMzU1ICAxLjIzRS00MCAgICAgICAwZSszODQgIC0+ICAgMS41MTNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODg0IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MCAgICAgICAgMGUrMzg0ICAtPiAgIDEuNDRFLTM5NSAgU3Vibm9ybWFsCitkZGZtYTI4ODUgZm1hICAgMS4yRS0zNTUgICAxLjJFLTQxICAgICAgICAwZSszODQgIC0+ICAgMS40NEUtMzk2ICBTdWJub3JtYWwKK2RkZm1hMjg4NiBmbWEgICAxLjJFLTM1NSAgIDEuMkUtNDIgICAgICAgIDBlKzM4NCAgLT4gICAxLjRFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZGZtYTI4ODcgZm1hICAgMS4yRS0zNTUgICAxLjNFLTQyICAgICAgICAwZSszODQgIC0+ICAgMS42RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRmbWEyODg4IGZtYSAgIDEuM0UtMzU1ICAgMS4zRS00MiAgICAgICAgMGUrMzg0ICAtPiAgIDEuN0UtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkZm1hMjg4OSBmbWEgICAxLjNFLTM1NSAgIDEuM0UtNDMgICAgICAgIDBlKzM4NCAgLT4gICAgIDJFLTM5OCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZGZtYTI4OTAgZm1hICAgMS4zRS0zNTYgICAxLjNFLTQzICAgICAgICAwZSszODQgIC0+ICAgICAwRS0zOTggICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK2RkZm1hMjg5MSBmbWEgICAxLjIzNDVFLTM5ICAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODkyIGZtYSAgIDEuMjM0NTZFLTM5ICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGZtYTI4OTMgZm1hICAgMS4yMzQ1RS00MCAgIDEuMjM0RS0zNTUgICAwZSszODQgIC0+ICAgMS41MjNFLTM5NSAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZm1hMjg5NCBmbWEgICAxLjIzNDU2RS00MCAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODk1IGZtYSAgIDEuMjM0NUUtNDEgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGZtYTI4OTYgZm1hICAgMS4yMzQ1NkUtNDEgIDEuMjM0RS0zNTUgICAwZSszODQgIC0+ICAgMS41MkUtMzk2ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdworZGRmbWEyOTAwIGZtYSAgIDAuMzAwMDAwMDAwMEUtMTkxIDAuMzAwMDAwMDAwMEUtMTkxICAgMGUrMzg0ICAtPiAgOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZGZtYTI5MDEgZm1hICAgMC4zMDAwMDAwMDAxRS0xOTEgMC4zMDAwMDAwMDAxRS0xOTEgICAwZSszODQgIC0+ICA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZm1hMjkwMiBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZGRmbWEyOTAzIGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTkgICAgICAgICAgMGUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZGZtYTI5MDQgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTkgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZm1hMjkwNSBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0CitkZGZtYTI5MDYgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCitkZGZtYTI5MDcgZm1hICAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSszODQgIC0+ICAwLjA5OTk5OTk5OTk5OTk5OTk5CistLSB0aGUgbmV4dCByb3VuZHMgdG8gTm1pbgorZGRmbWEyOTA4IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorCistLSBodWdlc3QKK2RkZm1hMjkwOSBmbWEgICA5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTkgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzEgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bGwgdGVzdHMKK2RkZm1hMjk5MCBmbWEgIDEwICAjICAgMGUrMzg0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI5OTEgZm1hICAgIyAxMCAgIDBlKzM4NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKKy0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2RkZm1hMzAwMSBmbWEgIDEgIDEgICAgICAgMSAgICAgICAtPiAgMgorZGRmbWEzMDAyIGZtYSAgMSAgMiAgICAgICAzICAgICAgIC0+ICA1CitkZGZtYTMwMDMgZm1hICAxICAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2RkZm1hMzAwNCBmbWEgIDEgICc1JyAgICAgJy0zJyAgICAtPiAgMgorZGRmbWEzMDA1IGZtYSAgMSAgJy01JyAgICAnLTMnICAgIC0+ICAtOAorZGRmbWEzMDA2IGZtYSAgMSAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CitkZGZtYTMwMDcgZm1hICAxICAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorZGRmbWEzMDA4IGZtYSAgMSAgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCitkZGZtYTMwMDkgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2RkZm1hMzAxMCBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCistLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRmbWEzMDExIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTIgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZGZtYTMwMTMgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKK2RkZm1hMzAxNCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAxNSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAxNiBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAxNyBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAxOCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAxOSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAyMCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzMDIxIGZtYSAgMSAgMCAxIC0+IDEKK2RkZm1hMzAyMiBmbWEgIDEgIDEgMSAtPiAyCitkZGZtYTMwMjMgZm1hICAxICAyIDEgLT4gMworZGRmbWEzMDI0IGZtYSAgMSAgMyAxIC0+IDQKK2RkZm1hMzAyNSBmbWEgIDEgIDQgMSAtPiA1CitkZGZtYTMwMjYgZm1hICAxICA1IDEgLT4gNgorZGRmbWEzMDI3IGZtYSAgMSAgNiAxIC0+IDcKK2RkZm1hMzAyOCBmbWEgIDEgIDcgMSAtPiA4CitkZGZtYTMwMjkgZm1hICAxICA4IDEgLT4gOQorZGRmbWEzMDMwIGZtYSAgMSAgOSAxIC0+IDEwCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworZGRmbWEzMDMxIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitkZGZtYTMwMzIgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2RkZm1hMzAzMyBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJworZGRmbWEzMDM0IGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCisKK2RkZm1hMzAzNSBmbWEgIDEgICc3MCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMDM2IGZtYSAgMSAgJzcwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMDM3IGZtYSAgMSAgJzcwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAzOCBmbWEgIDEgICc3MDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMDM5IGZtYSAgMSAgJzcwMDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQKKworLS0gc3ltbWV0cnk6CitkZGZtYTMwNDAgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzA0MSBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzA0MiBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwNDQgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzA0NSBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCisKKy0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcKK2RkZm1hMzA0NiBmbWEgIDEgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCitkZGZtYTMwNDcgZm1hICAxICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2RkZm1hMzA0OCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2RkZm1hMzA0OSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCitkZGZtYTMwNTAgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2RkZm1hMzA1MSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKK2RkZm1hMzA1MiBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2RkZm1hMzA1MyBmbWEgIDEgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2RkZm1hMzA1NCBmbWEgIDEgICcxLjMnICctMS4wNycgLT4gJzAuMjMnCitkZGZtYTMwNTUgZm1hICAxICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworZGRmbWEzMDU2IGZtYSAgMSAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCitkZGZtYTMwNTcgZm1hICAxICAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JworCistLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uCitkZGZtYTMwNjEgZm1hICAxICAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCitkZGZtYTMwNjIgZm1hICAxICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2RkZm1hMzA2MyBmbWEgIDEgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCitkZGZtYTMwNjQgZm1hICAxICAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCitkZGZtYTMwNjUgZm1hICAxICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorZGRmbWEzMDcwIGZtYSAgMSAgMSAgMCAgICAtPiAxCitkZGZtYTMwNzEgZm1hICAxICAxIDAuICAgIC0+IDEKK2RkZm1hMzA3MiBmbWEgIDEgIDEgIC4wICAgLT4gMS4wCitkZGZtYTMwNzMgZm1hICAxICAxIDAuMCAgIC0+IDEuMAorZGRmbWEzMDc0IGZtYSAgMSAgMSAwLjAwICAtPiAxLjAwCitkZGZtYTMwNzUgZm1hICAxICAgMCAgMSAgIC0+IDEKK2RkZm1hMzA3NiBmbWEgIDEgIDAuICAxICAgLT4gMQorZGRmbWEzMDc3IGZtYSAgMSAgIC4wIDEgICAtPiAxLjAKK2RkZm1hMzA3OCBmbWEgIDEgIDAuMCAxICAgLT4gMS4wCitkZGZtYTMwNzkgZm1hICAxICAwLjAwIDEgIC0+IDEuMDAKKworLS0gc29tZSBjYXJyaWVzCitkZGZtYTMwODAgZm1hICAxICA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5CitkZGZtYTMwODEgZm1hICAxICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAorZGRmbWEzMDgyIGZtYSAgMSAgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAorZGRmbWEzMDgzIGZtYSAgMSAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCitkZGZtYTMwODQgZm1hICAxICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAorZGRmbWEzMDg1IGZtYSAgMSAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorZGRmbWEzMDg2IGZtYSAgMSAgICAgICA5OTk5IDEgIC0+IDEwMDAwCitkZGZtYTMwODcgZm1hICAxICAgICAgICA5OTkgMSAgLT4gMTAwMAorZGRmbWEzMDg4IGZtYSAgMSAgICAgICAgIDk5IDEgIC0+IDEwMAorZGRmbWEzMDg5IGZtYSAgMSAgICAgICAgICA5IDEgIC0+IDEwCisKKworLS0gbW9yZSBMSFMgc3dhcHMKK2RkZm1hMzA5MCBmbWEgIDEgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZGRmbWEzMDkxIGZtYSAgMSAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2RkZm1hMzA5MiBmbWEgIDEgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2RkZm1hMzA5MyBmbWEgIDEgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZGRmbWEzMDk0IGZtYSAgMSAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitkZGZtYTMwOTUgZm1hICAxICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2RkZm1hMzA5NiBmbWEgIDEgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZGRmbWEzMDk3IGZtYSAgMSAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2RkZm1hMzA5OCBmbWEgIDEgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitkZGZtYTMwOTkgZm1hICAxICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitkZGZtYTMxMDAgZm1hICAxICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZGRmbWEzMTAxIGZtYSAgMSAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZGRmbWEzMTAyIGZtYSAgMSAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitkZGZtYTMxMDMgZm1hICAxICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2RkZm1hMzEwNCBmbWEgIDEgICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2RkZm1hMzEwNSBmbWEgIDEgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitkZGZtYTMxMDYgZm1hICAxICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2RkZm1hMzEwNyBmbWEgIDEgICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2RkZm1hMzEwOCBmbWEgIDEgICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgUm91bmRlZAorZGRmbWEzMTA5IGZtYSAgMSAgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkCitkZGZtYTMxMTAgZm1hICAxICAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQKK2RkZm1hMzExMSBmbWEgIDEgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZGRmbWEzMTEzIGZtYSAgMSAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RkZm1hMzExNCBmbWEgIDEgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKK2RkZm1hMzExNiBmbWEgIDEgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZGRmbWEzMTE3IGZtYSAgMSAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2RkZm1hMzExOSBmbWEgIDEgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCitkZGZtYTMxMjAgZm1hICAxICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZGRmbWEzMTIxIGZtYSAgMSAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2RkZm1hMzEyMiBmbWEgIDEgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKK2RkZm1hMzEyMyBmbWEgIDEgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2RkZm1hMzEyNCBmbWEgIDEgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworZGRmbWEzMTI1IGZtYSAgMSAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JworZGRmbWEzMTI2IGZtYSAgMSAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitkZGZtYTMxMjcgZm1hICAxICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworZGRmbWEzMTI4IGZtYSAgMSAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKK2RkZm1hMzEyOSBmbWEgIDEgIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZGRmbWEzMTMwIGZtYSAgMSAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworZGRmbWEzMTMxIGZtYSAgMSAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKK2RkZm1hMzEzMiBmbWEgIDEgIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworZGRmbWEzMTMzIGZtYSAgMSAgMCAgJy01RTE2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCitkZGZtYTMxMzQgZm1hICAxICAwICAnLTVFMTcnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQKK2RkZm1hMzEzNSBmbWEgIDEgIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZAorZGRmbWEzMTM2IGZtYSAgMSAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2RkZm1hMzEzNyBmbWEgIDEgICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RkZm1hMzEzOCBmbWEgIDEgIC0xICAnMEUtMTknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RkZm1hMzEzOSBmbWEgIDEgICcwRS0xOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RkZm1hMzE0MCBmbWEgIDEgICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RkZm1hMzE0MSBmbWEgIDEgIDFFKzExICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcKK2RkZm1hMzE0MiBmbWEgIDEgIDFFKzExICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKK2RkZm1hMzE0MyBmbWEgIDEgIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcKK2RkZm1hMzE0NCBmbWEgIDEgIDAuMDAwMCAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2RkZm1hMzE0NiBmbWEgIDEgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2RkZm1hMzE0NyBmbWEgIDEgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCitkZGZtYTMxNDggZm1hICAxICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworZGRmbWEzMTQ5IGZtYSAgMSAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworZGRmbWEzMTUwIGZtYSAgMSAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKK2RkZm1hMzE1MSBmbWEgIDEgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCitkZGZtYTMxNTIgZm1hICAxICAnMycgICAgICcuMycgICAgLT4gICczLjMnCitkZGZtYTMxNTMgZm1hICAxICAnMy4nICAgICcuMycgICAgLT4gICczLjMnCitkZGZtYTMxNTQgZm1hICAxICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCitkZGZtYTMxNTUgZm1hICAxICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworZGRmbWEzMTU2IGZtYSAgMSAgJzMnICAgICAnMycgICAgIC0+ICAnNicKK2RkZm1hMzE1NyBmbWEgIDEgICczJyAgICAgJyszJyAgICAtPiAgJzYnCitkZGZtYTMxNTggZm1hICAxICAnMycgICAgICctMycgICAgLT4gICcwJworZGRmbWEzMTU5IGZtYSAgMSAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJworZGRmbWEzMTYwIGZtYSAgMSAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2RkZm1hMzE2MSBmbWEgIDEgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JworZGRmbWEzMTYyIGZtYSAgMSAgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZGRmbWEzMTYzIGZtYSAgMSAgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZGRmbWEzMTY0IGZtYSAgMSAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCitkZGZtYTMxNjUgZm1hICAxICAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCitkZGZtYTMxNjYgZm1hICAxICAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkZGZtYTMxNjcgZm1hICAxICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkZGZtYTMxNjggZm1hICAxICAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCisKK3JvdW5kaW5nOiBoYWxmX3VwCistLSAgICAgICAgICAgMS4yMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKK2RkZm1hMzE3MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTcyIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NScgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE3MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzQgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTc1IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE3NiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzcgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQKK2RkZm1hMzE3OCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDUnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzkgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTgwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE4MSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxODIgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTgzIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGZtYTMyMDAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKK2RkZm1hMzIwMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRmbWEzMjE3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjE4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjE5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkZGZtYTMyMjAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKK2RkZm1hMzIyMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRmbWEzMjM3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjM4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjM5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RkZm1hMzI0MCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI0MSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI0MiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkZm1hMzI1MCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JworZGRmbWEzMjUxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjUyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjUzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjYwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjYxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjYyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjYzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjY0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjY1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjY2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnCitkZGZtYTMyNjcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyNjggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyNjkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cworcm91bmRpbmc6IGhhbGZfdXAKK2RkZm1hMzMwMSBmbWEgIDEgICAtMSAgIDEgICAgICAtPiAgIDAKK2RkZm1hMzMwMiBmbWEgIDEgICAgMCAgIDEgICAgICAtPiAgIDEKK2RkZm1hMzMwMyBmbWEgIDEgICAgMSAgIDEgICAgICAtPiAgIDIKK2RkZm1hMzMwNCBmbWEgIDEgICAxMiAgIDEgICAgICAtPiAgMTMKK2RkZm1hMzMwNSBmbWEgIDEgICA5OCAgIDEgICAgICAtPiAgOTkKK2RkZm1hMzMwNiBmbWEgIDEgICA5OSAgIDEgICAgICAtPiAxMDAKK2RkZm1hMzMwNyBmbWEgIDEgIDEwMCAgIDEgICAgICAtPiAxMDEKK2RkZm1hMzMwOCBmbWEgIDEgIDEwMSAgIDEgICAgICAtPiAxMDIKK2RkZm1hMzMwOSBmbWEgIDEgICAtMSAgLTEgICAgICAtPiAgLTIKK2RkZm1hMzMxMCBmbWEgIDEgICAgMCAgLTEgICAgICAtPiAgLTEKK2RkZm1hMzMxMSBmbWEgIDEgICAgMSAgLTEgICAgICAtPiAgIDAKK2RkZm1hMzMxMiBmbWEgIDEgICAxMiAgLTEgICAgICAtPiAgMTEKK2RkZm1hMzMxMyBmbWEgIDEgICA5OCAgLTEgICAgICAtPiAgOTcKK2RkZm1hMzMxNCBmbWEgIDEgICA5OSAgLTEgICAgICAtPiAgOTgKK2RkZm1hMzMxNSBmbWEgIDEgIDEwMCAgLTEgICAgICAtPiAgOTkKK2RkZm1hMzMxNiBmbWEgIDEgIDEwMSAgLTEgICAgICAtPiAxMDAKKworZGRmbWEzMzIxIGZtYSAgMSAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2RkZm1hMzMyMiBmbWEgIDEgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCitkZGZtYTMzMjMgZm1hICAxICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgorZGRmbWEzMzI0IGZtYSAgMSAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2RkZm1hMzMyNSBmbWEgIDEgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5CitkZGZtYTMzMjYgZm1hICAxICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAorZGRmbWEzMzI3IGZtYSAgMSAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2RkZm1hMzMyOCBmbWEgIDEgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCitkZGZtYTMzMjkgZm1hICAxICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgorZGRmbWEzMzMwIGZtYSAgMSAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2RkZm1hMzMzMSBmbWEgIDEgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCitkZGZtYTMzMzIgZm1hICAxICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQorZGRmbWEzMzMzIGZtYSAgMSAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2RkZm1hMzMzNCBmbWEgIDEgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4CitkZGZtYTMzMzUgZm1hICAxICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQorZGRmbWEzMzM2IGZtYSAgMSAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CitkZGZtYTMzNDAgZm1hICAxICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCitkZGZtYTMzNDEgZm1hICAxICAxRSsxNSAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMAorZGRmbWEzMzQyIGZtYSAgMSAgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCitkZGZtYTMzNDMgZm1hICAxICAxRSsyMCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQKKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KK2RkZm1hMzM0NCBmbWEgIDEgIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKK2RkZm1hMzM0NSBmbWEgIDEgIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxCitkZGZtYTMzNDYgZm1hICAxICAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMzQ3IGZtYSAgMSAgMUUrMjAgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzM0OCBmbWEgIDEgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2RkZm1hMzM0OSBmbWEgIDEgIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3CitkZGZtYTMzNTAgZm1hICAxICAxRSsxNiAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMzUxIGZtYSAgMSAgMUUrMjAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZGZtYTMzNjAgIGZtYSAgMSAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQorZGRmbWEzMzYxICBmbWEgIDEgIDBFLTUwIDEwMDAwRSsxICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkCitkZGZtYTMzNjIgIGZtYSAgMSAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQKK2RkZm1hMzM2MyAgZm1hICAxICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzMzY0ICBmbWEgIDEgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMEUrMzY5CisKKy0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK2RkZm1hMzM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQKK2RkZm1hMzM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZGZtYTMzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0CitkZGZtYTMzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl9ldmVuCitkZGZtYTMzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0CitkZGZtYTMzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0CisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworZGRmbWEzNDAwIGZtYSAgMSAgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQwMSBmbWEgIDEgICAgMSAgIDc3ZS0xNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NworZGRmbWEzNDAyIGZtYSAgMSAgICAxICAgNzdlLTE2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDAzIGZtYSAgMSAgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDA0IGZtYSAgMSAgICAxICAgNzdlLTE4ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDA1IGZtYSAgMSAgICAxICAgNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDA2IGZtYSAgMSAgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM0MTAgZm1hICAxICAgMTAgICA3N2UtMTQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQxMSBmbWEgIDEgICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQxMiBmbWEgIDEgICAxMCAgIDc3ZS0xNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQxMyBmbWEgIDEgICAxMCAgIDc3ZS0xNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQxNCBmbWEgIDEgICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQxNSBmbWEgIDEgICAxMCAgIDc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQxNiBmbWEgIDEgICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNDIwIGZtYSAgMSAgIDc3ZS0xNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQyMSBmbWEgIDEgICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NworZGRmbWEzNDIyIGZtYSAgMSAgIDc3ZS0xNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDIzIGZtYSAgMSAgIDc3ZS0xNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDI0IGZtYSAgMSAgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDI1IGZtYSAgMSAgIDc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDI2IGZtYSAgMSAgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM0MzAgZm1hICAxICAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQzMSBmbWEgIDEgICA3N2UtMTUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQzMiBmbWEgIDEgICA3N2UtMTYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQzMyBmbWEgIDEgICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQzNCBmbWEgIDEgICA3N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQzNSBmbWEgIDEgICA3N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQzNiBmbWEgIDEgICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZGRmbWEzNjQ0MCBmbWEgIDEgICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ0MSBmbWEgIDEgICAgMSAgIC03N2UtMTUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NDIgZm1hICAxICAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ0MyBmbWEgIDEgICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ0NCBmbWEgIDEgICAgMSAgIC03N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ0NSBmbWEgIDEgICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDQ2IGZtYSAgMSAgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjQ1MCBmbWEgIDEgICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NTEgZm1hICAxICAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ1MiBmbWEgIDEgICAxMCAgIC03N2UtMTYgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ1MyBmbWEgIDEgICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ1NCBmbWEgIDEgICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDU1IGZtYSAgMSAgIDEwICAgLTc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NTYgZm1hICAxICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM2NDYwIGZtYSAgMSAgIC03N2UtMTQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDYxIGZtYSAgMSAgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ2MiBmbWEgIDEgICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDYzIGZtYSAgMSAgIC03N2UtMTcgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDY0IGZtYSAgMSAgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDY1IGZtYSAgMSAgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NjYgZm1hICAxICAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM2NDcwIGZtYSAgMSAgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ3MSBmbWEgIDEgICAtNzdlLTE1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDcyIGZtYSAgMSAgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDczIGZtYSAgMSAgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDc0IGZtYSAgMSAgIC03N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NzUgZm1hICAxICAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ3NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RkZm1hMzY0ODAgZm1hICAxICAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDgxIGZtYSAgMSAgIC0xICAgIDc3ZS0xNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0ODIgZm1hICAxICAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0ODMgZm1hICAxICAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDg0IGZtYSAgMSAgIC0xICAgIDc3ZS0xOCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ4NSBmbWEgIDEgICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ4NiBmbWEgIDEgICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM2NDkwIGZtYSAgMSAgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0OTEgZm1hICAxICAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0OTIgZm1hICAxICAtMTAgICAgNzdlLTE2ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDkzIGZtYSAgMSAgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ5NCBmbWEgIDEgIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ5NSBmbWEgIDEgIC0xMCAgICA3N2UtMTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ5NiBmbWEgIDEgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM2NTAwIGZtYSAgMSAgICA3N2UtMTQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMworZGRmbWEzNjUwMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NTAyIGZtYSAgMSAgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NTAzIGZtYSAgMSAgICA3N2UtMTcgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUwNCBmbWEgIDEgICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MDUgZm1hICAxICAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MDYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjUxMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NTExIGZtYSAgMSAgICA3N2UtMTUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NTEyIGZtYSAgMSAgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUxMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MTQgZm1hICAxICAgIDc3ZS0xOCAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MTUgZm1hICAxICAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MTYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIGEgY291cGxlIG1vcmUgd2l0aCBsb25nZXIgUkhTCitkZGZtYTM2NTIwIGZtYSAgMSAgICAxICAgLTc3NzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjIyMworZGRmbWEzNjUyMSBmbWEgIDEgICAgMSAgIC03Nzc3ZS0xNyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMjIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTIyIGZtYSAgMSAgICAxICAgLTc3NzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MjMgZm1hICAxICAgIDEgICAtNzc3N2UtMTkgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUyNCBmbWEgIDEgICAgMSAgIC03Nzc3ZS0yMCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTI1IGZtYSAgMSAgICAxICAgLTc3NzdlLTIxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUyNiBmbWEgIDEgICAgMSAgIC03Nzc3ZS0yMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworCistLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2RkZm1hMzY1NDAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2RkZm1hMzY1NDEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTQyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NDQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTQ1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NDcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTQ4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTUxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTU0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkZm1hMzY1NTcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTU4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRmbWEzNjU2MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZGRmbWEzNjU2MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NjIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTYzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU2NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NjUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTY2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU2NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NjggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTY5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTcyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTc1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZGRmbWEzNjU3NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTc5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZGRmbWEzNzU0MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NDEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTQyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRmbWEzNzU1MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZGRmbWEzNzU1MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NTIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTUzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU1NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NTUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTU2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU1NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NTggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTU5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTYyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTY1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZGRmbWEzNzU2NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTY5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCisKKy0tIHZlcmlmeSBhIHF1ZXJ5Cityb3VuZGluZzogICAgIGRvd24KK2RkZm1hMzc2NjEgZm1hICAxICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzY2MiBmbWEgIDEgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZAorZGRmbWEzNzY2MyBmbWEgIDEgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NjY0IGZtYSAgMSAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZGRmbWEzNzcwMSBmbWEgIDEgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCitkZGZtYTM3NzAyIGZtYSAgMSAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCitkZGZtYTM3NzAzIGZtYSAgMSAgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCitkZGZtYTM3NzA0IGZtYSAgMSAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2RkZm1hMzc3MTAgZm1hICAxICAwRSszICAwMC4wMCAgLT4gMC4wMAorZGRmbWEzNzcxMSBmbWEgIDEgIDBFKzMgIDAwLjAgICAtPiAwLjAKK2RkZm1hMzc3MTIgZm1hICAxICAwRSszICAwMC4gICAgLT4gMAorZGRmbWEzNzcxMyBmbWEgIDEgIDBFKzMgIDAwLkUrMSAtPiAwRSsxCitkZGZtYTM3NzE0IGZtYSAgMSAgMEUrMyAgMDAuRSsyIC0+IDBFKzIKK2RkZm1hMzc3MTUgZm1hICAxICAwRSszICAwMC5FKzMgLT4gMEUrMworZGRmbWEzNzcxNiBmbWEgIDEgIDBFKzMgIDAwLkUrNCAtPiAwRSszCitkZGZtYTM3NzE3IGZtYSAgMSAgMEUrMyAgMDAuRSs1IC0+IDBFKzMKK2RkZm1hMzc3MTggZm1hICAxICAwRSszICAtMDAuMCAgIC0+IDAuMAorZGRmbWEzNzcxOSBmbWEgIDEgIDBFKzMgIC0wMC4gICAgLT4gMAorZGRmbWEzNzczMSBmbWEgIDEgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQorCitkZGZtYTM3NzIwIGZtYSAgMSAgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2RkZm1hMzc3MjEgZm1hICAxICAwMC4wICAgMEUrMyAgLT4gMC4wCitkZGZtYTM3NzIyIGZtYSAgMSAgMDAuICAgIDBFKzMgIC0+IDAKK2RkZm1hMzc3MjMgZm1hICAxICAwMC5FKzEgMEUrMyAgLT4gMEUrMQorZGRmbWEzNzcyNCBmbWEgIDEgIDAwLkUrMiAwRSszICAtPiAwRSsyCitkZGZtYTM3NzI1IGZtYSAgMSAgMDAuRSszIDBFKzMgIC0+IDBFKzMKK2RkZm1hMzc3MjYgZm1hICAxICAwMC5FKzQgMEUrMyAgLT4gMEUrMworZGRmbWEzNzcyNyBmbWEgIDEgIDAwLkUrNSAwRSszICAtPiAwRSszCitkZGZtYTM3NzI4IGZtYSAgMSAgLTAwLjAwIDBFKzMgIC0+IDAuMDAKK2RkZm1hMzc3MjkgZm1hICAxICAtMDAuMCAgMEUrMyAgLT4gMC4wCitkZGZtYTM3NzMwIGZtYSAgMSAgLTAwLiAgIDBFKzMgIC0+IDAKKworZGRmbWEzNzczMiBmbWEgIDEgICAwICAgICAwICAgICAtPiAgMAorZGRmbWEzNzczMyBmbWEgIDEgICAwICAgIC0wICAgICAtPiAgMAorZGRmbWEzNzczNCBmbWEgIDEgIC0wICAgICAwICAgICAtPiAgMAorZGRmbWEzNzczNSBmbWEgIDEgIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCisKK2RkZm1hMzc3MzYgZm1hICAxICAgMSAgICAtMSAgICAgLT4gIDAKK2RkZm1hMzc3MzcgZm1hICAxICAtMSAgICAtMSAgICAgLT4gLTIKK2RkZm1hMzc3MzggZm1hICAxICAgMSAgICAgMSAgICAgLT4gIDIKK2RkZm1hMzc3MzkgZm1hICAxICAtMSAgICAgMSAgICAgLT4gIDAKKworZGRmbWEzNzc0MSBmbWEgIDEgICAwICAgIC0xICAgICAtPiAtMQorZGRmbWEzNzc0MiBmbWEgIDEgIC0wICAgIC0xICAgICAtPiAtMQorZGRmbWEzNzc0MyBmbWEgIDEgICAwICAgICAxICAgICAtPiAgMQorZGRmbWEzNzc0NCBmbWEgIDEgIC0wICAgICAxICAgICAtPiAgMQorZGRmbWEzNzc0NSBmbWEgIDEgIC0xICAgICAwICAgICAtPiAtMQorZGRmbWEzNzc0NiBmbWEgIDEgIC0xICAgIC0wICAgICAtPiAtMQorZGRmbWEzNzc0NyBmbWEgIDEgICAxICAgICAwICAgICAtPiAgMQorZGRmbWEzNzc0OCBmbWEgIDEgICAxICAgIC0wICAgICAtPiAgMQorCitkZGZtYTM3NzUxIGZtYSAgMSAgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2RkZm1hMzc3NTIgZm1hICAxICAtMC4wICAtMSAgICAgLT4gLTEuMAorZGRmbWEzNzc1MyBmbWEgIDEgICAwLjAgICAxICAgICAtPiAgMS4wCitkZGZtYTM3NzU0IGZtYSAgMSAgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2RkZm1hMzc3NTUgZm1hICAxICAtMS4wICAgMCAgICAgLT4gLTEuMAorZGRmbWEzNzc1NiBmbWEgIDEgIC0xLjAgIC0wICAgICAtPiAtMS4wCitkZGZtYTM3NzU3IGZtYSAgMSAgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2RkZm1hMzc3NTggZm1hICAxICAgMS4wICAtMCAgICAgLT4gIDEuMAorCitkZGZtYTM3NzYxIGZtYSAgMSAgIDAgICAgLTEuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NjIgZm1hICAxICAtMCAgICAtMS4wICAgLT4gLTEuMAorZGRmbWEzNzc2MyBmbWEgIDEgICAwICAgICAxLjAgICAtPiAgMS4wCitkZGZtYTM3NzY0IGZtYSAgMSAgLTAgICAgIDEuMCAgIC0+ICAxLjAKK2RkZm1hMzc3NjUgZm1hICAxICAtMSAgICAgMC4wICAgLT4gLTEuMAorZGRmbWEzNzc2NiBmbWEgIDEgIC0xICAgIC0wLjAgICAtPiAtMS4wCitkZGZtYTM3NzY3IGZtYSAgMSAgIDEgICAgIDAuMCAgIC0+ICAxLjAKK2RkZm1hMzc3NjggZm1hICAxICAgMSAgICAtMC4wICAgLT4gIDEuMAorCitkZGZtYTM3NzcxIGZtYSAgMSAgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NzIgZm1hICAxICAtMC4wICAtMS4wICAgLT4gLTEuMAorZGRmbWEzNzc3MyBmbWEgIDEgICAwLjAgICAxLjAgICAtPiAgMS4wCitkZGZtYTM3Nzc0IGZtYSAgMSAgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2RkZm1hMzc3NzUgZm1hICAxICAtMS4wICAgMC4wICAgLT4gLTEuMAorZGRmbWEzNzc3NiBmbWEgIDEgIC0xLjAgIC0wLjAgICAtPiAtMS4wCitkZGZtYTM3Nzc3IGZtYSAgMSAgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2RkZm1hMzc3NzggZm1hICAxICAgMS4wICAtMC4wICAgLT4gIDEuMAorCistLSBTcGVjaWFscworZGRmbWEzNzc4MCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODEgZm1hICAxICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkZGZtYTM3NzgyIGZtYSAgMSAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4MyBmbWEgIDEgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODQgZm1hICAxICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZGZtYTM3Nzg1IGZtYSAgMSAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4NiBmbWEgIDEgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODcgZm1hICAxICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3Nzg4IGZtYSAgMSAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4OSBmbWEgIDEgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3OTAgZm1hICAxICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3NzkxIGZtYSAgMSAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc5MiBmbWEgIDEgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3OTMgZm1hICAxICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3Nzk0IGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RkZm1hMzc4MDAgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4MDEgZm1hICAxICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZGZtYTM3ODAyIGZtYSAgMSAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwMyBmbWEgIDEgICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MDQgZm1hICAxICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODA1IGZtYSAgMSAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwNiBmbWEgIDEgICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MDcgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODA4IGZtYSAgMSAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwOSBmbWEgIDEgIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzgxMCBmbWEgIDEgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MTEgZm1hICAxICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODEyIGZtYSAgMSAgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgxMyBmbWEgIDEgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MTQgZm1hICAxICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODE1IGZtYSAgMSAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZGZtYTM3ODIxIGZtYSAgMSAgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkZm1hMzc4MjIgZm1hICAxICAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRmbWEzNzgyMyBmbWEgIDEgICBOYU4gLTEgICAgICAtPiAgTmFOCitkZGZtYTM3ODI0IGZtYSAgMSAgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkZm1hMzc4MjUgZm1hICAxICAgTmFOICAwICAgICAgLT4gIE5hTgorZGRmbWEzNzgyNiBmbWEgIDEgICBOYU4gIDEgICAgICAtPiAgTmFOCitkZGZtYTM3ODI3IGZtYSAgMSAgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkZm1hMzc4MjggZm1hICAxICAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRmbWEzNzgyOSBmbWEgIDEgICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODMwIGZtYSAgMSAgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkZm1hMzc4MzEgZm1hICAxICAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRmbWEzNzgzMiBmbWEgIDEgIC0xICAgIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODMzIGZtYSAgMSAgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkZm1hMzc4MzQgZm1hICAxICAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRmbWEzNzgzNSBmbWEgIDEgICAxICAgIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODM2IGZtYSAgMSAgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkZm1hMzc4MzcgZm1hICAxICAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZGZtYTM3ODQxIGZtYSAgMSAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQyIGZtYSAgMSAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQzIGZtYSAgMSAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ0IGZtYSAgMSAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ1IGZtYSAgMSAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ2IGZtYSAgMSAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ3IGZtYSAgMSAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ4IGZtYSAgMSAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ5IGZtYSAgMSAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODUwIGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODUxIGZtYSAgMSAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODUyIGZtYSAgMSAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODUzIGZtYSAgMSAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU0IGZtYSAgMSAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU1IGZtYSAgMSAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU2IGZtYSAgMSAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU3IGZtYSAgMSAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU4IGZtYSAgMSAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU5IGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkZm1hMzc4NjEgZm1hICAxICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2RkZm1hMzc4NjIgZm1hICAxICArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2RkZm1hMzc4NjMgZm1hICAxICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2RkZm1hMzc4NjQgZm1hICAxICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2RkZm1hMzc4NjUgZm1hICAxICAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2RkZm1hMzc4NjYgZm1hICAxICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2RkZm1hMzc4NjcgZm1hICAxICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2RkZm1hMzc4NjggZm1hICAxICAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2RkZm1hMzc4NjkgZm1hICAxICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkZGZtYTM3ODcxIGZtYSAgMSAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzIgZm1hICAxICAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg3MyBmbWEgIDEgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODc0IGZtYSAgMSAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzUgZm1hICAxICAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg3NiBmbWEgIDEgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODc3IGZtYSAgMSAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzggZm1hICAxICAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg3OSBmbWEgIDEgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODgwIGZtYSAgMSAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4ODEgZm1hICAxICArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg4MiBmbWEgIDEgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2RkZm1hMzc4ODMgZm1hICAxICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg4NCBmbWEgIDEgICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2RkZm1hMzc4ODUgZm1hICAxICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBIZXJlIHdlIGV4cGxvcmUgbmVhciB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgorZGRmbWEzNzU3NSBmbWEgIDEgICAxRS0zODMgLTFFLTM5OCAtPiAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2RkZm1hMzc1NzYgZm1hICAxICAtMUUtMzgzICsxRS0zOTggLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCisKKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQorLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGZtYTM3OTcyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkZm1hMzc5NzMgZm1hICAxICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTc0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3NSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3NiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3NyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3OCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3OSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA2RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4MCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4MSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTgyIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDNFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODMgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzc5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkZm1hMzc5ODYgZm1hICAxICAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTg4IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4OSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5OTAgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOEUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTkxIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5MiBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC02RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5OTMgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTk0IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTk1IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTNFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTk2IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTJFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTk3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCitkZGZtYTM3MTEwMCBmbWEgIDEgIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTAxIGZtYSAgMSAgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTAzIGZtYSAgMSAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwNCBmbWEgIDEgIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTA1IGZtYSAgMSAgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTA2IGZtYSAgMSAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwNyBmbWEgIDEgIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTA4IGZtYSAgMSAgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTA5IGZtYSAgMSAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitkZGZtYTM3MTExMCBmbWEgIDEgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTExMSBmbWEgIDEgIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTMgZm1hICAxICAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTExNCBmbWEgIDEgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTExNSBmbWEgIDEgIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTYgZm1hICAxICAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTExNyBmbWEgIDEgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTExOCBmbWEgIDEgIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTkgZm1hICAxICAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2RkZm1hMzcxMzAwIGZtYSAgMSAgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzEwIGZtYSAgMSAgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzExIGZtYSAgMSAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzEyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzEzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE4IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE5IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzIwIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzIxIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzIyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzIzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI4IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI5IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzMwIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzMxIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzMyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzMzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM4IGZtYSAgMSAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM5IGZtYSAgMSAgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNzEzNDAgZm1hICAxICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNDEgZm1hICAxICAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM3MTM0OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzUxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzU0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzU3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzYwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzYzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzY3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzcwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzc2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzc5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzgyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzg1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzg4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzOTAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzkxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM5MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzOTMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzk0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM5NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzOTYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKKy0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKK2RkZm1hMzcxNDIwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDIyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDIzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDI1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDI2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZGRmbWEzNzE0MjggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2RkZm1hMzcxNDI5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitkZGZtYTM3MTQzMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RkZm1hMzcxNDMxIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZGRmbWEzNzE0MzIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitkZGZtYTM3MTQzMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RkZm1hMzcxNDM0IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZGRmbWEzNzE0MzUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitkZGZtYTM3MTQzNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RkZm1hMzcxNDM3IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZGRmbWEzNzE0MzggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitkZGZtYTM3MTQzOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgcmV2ZXJzZWQgMAorZGRmbWEzNzE0NDAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NDEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQyIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NDMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NDQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQ1IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NDYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NDcgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZGRmbWEzNzE0NDggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorZGRmbWEzNzE0NDkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZGRmbWEzNzE0NTAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RkZm1hMzcxNDUxIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCitkZGZtYTM3MTQ1MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZGRmbWEzNzE0NTMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RkZm1hMzcxNDU0IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CitkZGZtYTM3MTQ1NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZGRmbWEzNzE0NTYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RkZm1hMzcxNDU3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CitkZGZtYTM3MTQ1OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZGRmbWEzNzE0NTkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2RkZm1hMzcxNDYwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDYzIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDY2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjcgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDY5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NzAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ3MSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDcyIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NzMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ3NCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDc1IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAorZGRmbWEzNzE0NzYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RkZm1hMzcxNDc3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkZGZtYTM3MTQ3OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZGRmbWEzNzE0NzkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTUwMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUwMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUwMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE1MTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZGRmbWEzNzE1MTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgaGFsZl9kb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTUyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUyMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUyMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE1MzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZGRmbWEzNzE1MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTU0MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU0MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU0MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE1NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZGRmbWEzNzE1NTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkZm1hMzcxNTYwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNTYxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNTYyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNTYzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGZtYTM3MTU3MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGZtYTM3MTU3MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBkb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTU4MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU4MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU4MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU4MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE1OTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZGRmbWEzNzE1OTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgY2VpbGluZworLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRmbWEzNzE2MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE2MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE2MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE2MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkZm1hMzcxNjExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RkZm1hMzcxNjEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkZm1hMzcxNjIwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNjIxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RkZm1hMzcxNjIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RkZm1hMzcxNjIzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGZtYTM3MTYzMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCitkZGZtYTM3MTYzMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZGRmbWEzNzE3MDEgZm1hICAxICAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKK2RkZm1hMzcxNzAyIGZtYSAgMSAgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCitkZGZtYTM3MTcwMyBmbWEgIDEgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAorZGRmbWEzNzE3MDQgZm1hICAxICAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKK2RkZm1hMzcxNzA1IGZtYSAgMSAgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwCitkZGZtYTM3MTcwNiBmbWEgIDEgIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMAorZGRmbWEzNzE3MDcgZm1hICAxICAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzAKK2RkZm1hMzcxNzA4IGZtYSAgMSAgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszCisKKy0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXAKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZGRmbWEzNzUwMDEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3CitkZGZtYTM3NTAwMiBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMDMgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDA0IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAwNSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMDYgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDA3IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAwOCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMDkgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDEwIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxMSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTIgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDEzIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxNCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTUgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDE2IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxNyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTggZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDE5IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAyMCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMjEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcAorZGRmbWEzNzUwMzAgZm1hICAxICAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQorZGRmbWEzNzUwMzEgZm1hICAxICAxMjM0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xCitkZGZtYTM3NTAzMiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyCitkZGZtYTM3NTAzMyBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMworZGRmbWEzNzUwMzQgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0CitkZGZtYTM3NTAzNSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1CitkZGZtYTM3NTAzNiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NgorZGRmbWEzNzUwMzcgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3CitkZGZtYTM3NTAzOCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4CitkZGZtYTM3NTAzOSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDAgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQxIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0MiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDMgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQ0IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0NSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDYgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQ3IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0OCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDkgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2Cityb3VuZGluZzogaGFsZl9ldmVuCitkZGZtYTM3NTA1MCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNTEgZm1hICAxICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDUyIGZtYSAgMSAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA1MyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNTQgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDU1IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA1NiBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNTcgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDYwIGZtYSAgMSAgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2MSBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNjIgZm1hICAxICAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDYzIGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2NCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNjUgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDY2IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2NyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQorcm91bmRpbmc6IHVwCitkZGZtYTM3NTA3MCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxCitkZGZtYTM3NTA3MSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNzIgZm1hICAxICAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDczIGZtYSAgMSAgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA3NCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNzUgZm1hICAxICAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDc2IGZtYSAgMSAgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA3NyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNzggZm1hICAxICAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDc5IGZtYSAgMSAgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4MCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODEgZm1hICAxICAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDgyIGZtYSAgMSAgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4MyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODQgZm1hICAxICAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDg1IGZtYSAgMSAgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4NiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODcgZm1hICAxICAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDg4IGZtYSAgMSAgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4OSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorCistLSBkZXNjdHJ1Y3RpdmUgc3VidHJhY3Rpb24gKGZyb20gcmVtYWluZGVyIHRlc3RzKQorCistLSArKysgc29tZSBvZiB0aGVzZSB3aWxsIGJlIG9mZi1ieS1vbmUgcmVtYWluZGVyIHZzIHJlbWFpbmRlck5lYXIKKworZGRmbWE0MDAwICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU0ICAgMS4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNzY1NDMyMTA5ODc2NTQ2CitkZGZtYTQwMDEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NDMgICAgMS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC42NTQzMjEwOTg3NjU1NworZGRmbWE0MDAyICBmbWEgIC0xMjM0NTY3ODkwMTIzMzMyICAgICAxLjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNTQzMjEwOTg3NjY2OAorZGRmbWE0MDAzICBmbWEgICAtMzA4NjQxOTcyNTMwODYzICAgNC4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM3CitkZGZtYTQwMDQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjMgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMy42OTEzNTgwMjc0NjkxMzcKK2RkZm1hNDAwNSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5NiAgICAgNC45OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY5MTM1NzgwMjQ2OTYKK2RkZm1hNDAwNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgICA0Ljk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAzLjQ2OTEzNTc4MDI0NjkxCitkZGZtYTQwMDcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA0Ljk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMS4yNDY5MTM1NzgwMjQ2OTEKK2RkZm1hNDAwOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDUuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc1MzA4NjQyMTk3NTMwOQorZGRmbWE0MDA5ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkwICAgIDUuMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDMuNTMwODY0MjE5NzUzMTAKK2RkZm1hNDAxMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY4NiAgICAgNS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjMwODY0MjE5NzUzMTQKK2RkZm1hNDAxMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1NSAgIDEuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTUKK2RkZm1hNDAxMiAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ0NCAgICAxLjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4zNDU2Nzg5MDEyMzQ0NAorZGRmbWE0MDEzICBmbWEgIC0xMjM0NTY3ODkwMTIzMzMzICAgICAxLjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIC0wLjQ1Njc4OTAxMjMzMzMKK2RkZm1hNDAxNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2NCAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTUgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQKK2RkZm1hNDAxNSAgZm1hICAgLTMwODY0MTk3MjUzMDg2NCAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4zMDg2NDE5NzI1MzA4NjQKK2RkZm1hNDAxNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5NiAgICAgNC45OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY5MTM1NzgwMjQ2OTYKK2RkZm1hNDAxNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MiAgICA0Ljk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMS41MzA4NjQyMTk3NTMwOAorZGRmbWE0MDE4ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxICAgNC45OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDEuMjQ2OTEzNTc4MDI0NjkxCitkZGZtYTQwMTkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA1LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC43NTMwODY0MjE5NzUzMDkKK2RkZm1hNDAyMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgICA1LjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMS40NjkxMzU3ODAyNDY5MQorZGRmbWE0MDIxICBmbWEgICAtMjQ2OTEzNTc4MDI0Njg2ICAgICA1LjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDEuMzA4NjQyMTk3NTMxNAorCisKKy0tIE51bGwgdGVzdHMKK2RkZm1hMzk5OTAgZm1hICAxICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzk5OTEgZm1hICAxICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRJbnZlcnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEludmVydC5kZWNUZXN0CmluZGV4IDMyMWU0ZTkuLjVkMTlmYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEludmVydC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEludmVydC5kZWNUZXN0CkBAIC0xLDIwMiArMSwyMDIgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkSW52ZXJ0LmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgSU5WRVJUIGZvciBkZWNEb3VibGVzICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQotZGRpbnYwMDEgaW52ZXJ0ICAgICAgICAgICAgIDAgLT4gMTExMTExMTExMTExMTExMQ0KLWRkaW52MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMTExMTExMTANCi1kZGludjAwMyBpbnZlcnQgICAgICAgICAgICAxMCAtPiAxMTExMTExMTExMTExMTAxDQotZGRpbnYwMDQgaW52ZXJ0ICAgICAxMTExMTExMTEgLT4gMTExMTExMTAwMDAwMDAwMA0KLWRkaW52MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMTExMTExMTENCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQ0KLWRkaW52MDA3IGludmVydCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTExMTExMTExMTExMTExMQ0KLWRkaW52MDA4IGludmVydCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDExMTExMTExMTExMTExMQ0KLWRkaW52MDA5IGludmVydCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTExMTExMTExMTExMTExMQ0KLWRkaW52MDEwIGludmVydCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgMTAxMTExMTExMTExMTExMQ0KLWRkaW52MDExIGludmVydCAwMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMA0KLWRkaW52MDEyIGludmVydCAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAgMA0KLWRkaW52MDEzIGludmVydCAwMDExMTExMTExMTExMTExIC0+ICAgMTEwMDAwMDAwMDAwMDAwMA0KLWRkaW52MDE0IGludmVydCAwMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tIFZhcmlvdXMgbGVuZ3Rocw0KLS0tICAgICAgICAgICAgIDEyMzQ1Njc4OSAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGludjAyMSBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMTExMTExMTAwMDAwMDAwMA0KLWRkaW52MDIyIGludmVydCAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDAwMDAwDQotZGRpbnYwMjMgaW52ZXJ0ICAxMTExMTExMSAgICAgLT4gIDExMTExMTExMDAwMDAwMDANCi1kZGludjAyNSBpbnZlcnQgICAxMTExMTExICAgICAtPiAgMTExMTExMTExMDAwMDAwMA0KLWRkaW52MDI2IGludmVydCAgICAxMTExMTEgICAgIC0+ICAxMTExMTExMTExMDAwMDAwDQotZGRpbnYwMjcgaW52ZXJ0ICAgICAxMTExMSAgICAgLT4gIDExMTExMTExMTExMDAwMDANCi1kZGludjAyOCBpbnZlcnQgICAgICAxMTExICAgICAtPiAgMTExMTExMTExMTExMDAwMA0KLWRkaW52MDI5IGludmVydCAgICAgICAxMTEgICAgIC0+ICAxMTExMTExMTExMTExMDAwDQotZGRpbnYwMzEgaW52ZXJ0ICAgICAgICAxMSAgICAgLT4gIDExMTExMTExMTExMTExMDANCi1kZGludjAzMiBpbnZlcnQgICAgICAgICAxICAgICAtPiAgMTExMTExMTExMTExMTExMA0KLWRkaW52MDMzIGludmVydCAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDAwMDAwDQotZGRpbnYwMzQgaW52ZXJ0IDExMTExMTExMTExICAgLT4gIDExMTExMDAwMDAwMDAwMDANCi1kZGludjAzNSBpbnZlcnQgMTExMTExMTExMSAgICAtPiAgMTExMTExMDAwMDAwMDAwMA0KLWRkaW52MDM2IGludmVydCAxMTExMTExMTEgICAgIC0+ICAxMTExMTExMDAwMDAwMDAwDQotDQotZGRpbnYwNDAgaW52ZXJ0IDAxMTExMTExMSAgIC0+ICAxMTExMTExMTAwMDAwMDAwDQotZGRpbnYwNDEgaW52ZXJ0IDEwMTExMTExMSAgIC0+ICAxMTExMTExMDEwMDAwMDAwDQotZGRpbnYwNDIgaW52ZXJ0IDExMDExMTExMSAgIC0+ICAxMTExMTExMDAxMDAwMDAwDQotZGRpbnYwNDMgaW52ZXJ0IDExMTAxMTExMSAgIC0+ICAxMTExMTExMDAwMTAwMDAwDQotZGRpbnYwNDQgaW52ZXJ0IDExMTEwMTExMSAgIC0+ICAxMTExMTExMDAwMDEwMDAwDQotZGRpbnYwNDUgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAxMTExMTExMDAwMDAxMDAwDQotZGRpbnYwNDYgaW52ZXJ0IDExMTExMTAxMSAgIC0+ICAxMTExMTExMDAwMDAwMTAwDQotZGRpbnYwNDcgaW52ZXJ0IDExMTExMTEwMSAgIC0+ICAxMTExMTExMDAwMDAwMDEwDQotZGRpbnYwNDggaW52ZXJ0IDExMTExMTExMCAgIC0+ICAxMTExMTExMDAwMDAwMDAxDQotZGRpbnYwNDkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+ICAxMTExMTExMTAwMDAwMTAwDQotZGRpbnYwNTAgaW52ZXJ0IDEwMTExMTEwMSAgIC0+ICAxMTExMTExMDEwMDAwMDEwDQotZGRpbnYwNTEgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAxMTExMTExMDAxMDAwMDAxDQotZGRpbnYwNTIgaW52ZXJ0IDExMTAxMTEwMSAgIC0+ICAxMTExMTExMDAwMTAwMDEwDQotZGRpbnYwNTMgaW52ZXJ0IDExMTEwMTAxMSAgIC0+ICAxMTExMTExMDAwMDEwMTAwDQotZGRpbnYwNTQgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAxMTExMTExMDAwMDAxMDAwDQotZGRpbnYwNTUgaW52ZXJ0IDExMTEwMTAxMSAgIC0+ICAxMTExMTExMDAwMDEwMTAwDQotZGRpbnYwNTYgaW52ZXJ0IDExMTAxMTEwMSAgIC0+ICAxMTExMTExMDAwMTAwMDEwDQotZGRpbnYwNTcgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAxMTExMTExMDAxMDAwMDAxDQotZGRpbnYwNTggaW52ZXJ0IDEwMTExMTEwMSAgIC0+ICAxMTExMTExMDEwMDAwMDEwDQotZGRpbnYwNTkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+ICAxMTExMTExMTAwMDAwMTAwDQotDQotZGRpbnYwODAgaW52ZXJ0IDEwMDAwMDAwMTExMTExMTEgICAtPiAgIDExMTExMTEwMDAwMDAwMA0KLWRkaW52MDgxIGludmVydCAwMTAwMDAwMTAxMTExMTExICAgLT4gIDEwMTExMTEwMTAwMDAwMDANCi1kZGludjA4MiBpbnZlcnQgMDAxMDAwMDExMDExMTExMSAgIC0+ICAxMTAxMTExMDAxMDAwMDAwDQotZGRpbnYwODMgaW52ZXJ0IDAwMDEwMDAxMTEwMTExMTEgICAtPiAgMTExMDExMTAwMDEwMDAwMA0KLWRkaW52MDg0IGludmVydCAwMDAwMTAwMTExMTAxMTExICAgLT4gIDExMTEwMTEwMDAwMTAwMDANCi1kZGludjA4NSBpbnZlcnQgMDAwMDAxMDExMTExMDExMSAgIC0+ICAxMTExMTAxMDAwMDAxMDAwDQotZGRpbnYwODYgaW52ZXJ0IDAwMDAwMDExMTExMTEwMTEgICAtPiAgMTExMTExMDAwMDAwMDEwMA0KLWRkaW52MDg3IGludmVydCAwMDAwMDEwMTExMTExMTAxICAgLT4gIDExMTExMDEwMDAwMDAwMTANCi1kZGludjA4OCBpbnZlcnQgMDAwMDEwMDExMTExMTExMCAgIC0+ICAxMTExMDExMDAwMDAwMDAxDQotZGRpbnYwODkgaW52ZXJ0IDAwMDEwMDAwMTExMTEwMTEgICAtPiAgMTExMDExMTEwMDAwMDEwMA0KLWRkaW52MDkwIGludmVydCAwMDEwMDAwMTAxMTExMTAxICAgLT4gIDExMDExMTEwMTAwMDAwMTANCi1kZGludjA5MSBpbnZlcnQgMDEwMDAwMDExMDExMTExMCAgIC0+ICAxMDExMTExMDAxMDAwMDAxDQotZGRpbnYwOTIgaW52ZXJ0IDEwMDAwMDAxMTEwMTExMDEgICAtPiAgIDExMTExMTAwMDEwMDAxMA0KLWRkaW52MDkzIGludmVydCAwMTAwMDAwMTExMTAxMDExICAgLT4gIDEwMTExMTEwMDAwMTAxMDANCi1kZGludjA5NCBpbnZlcnQgMDAxMDAwMDExMTExMDExMSAgIC0+ICAxMTAxMTExMDAwMDAxMDAwDQotZGRpbnYwOTUgaW52ZXJ0IDAwMDEwMDAxMTExMDEwMTEgICAtPiAgMTExMDExMTAwMDAxMDEwMA0KLWRkaW52MDk2IGludmVydCAwMDAwMTAwMTExMDExMTAxICAgLT4gIDExMTEwMTEwMDAxMDAwMTANCi1kZGludjA5NyBpbnZlcnQgMDAwMDAxMDExMDExMTExMCAgIC0+ICAxMTExMTAxMDAxMDAwMDAxDQotZGRpbnYwOTggaW52ZXJ0IDAwMDAwMDExMDExMTExMDEgICAtPiAgMTExMTExMDAxMDAwMDAxMA0KLWRkaW52MDk5IGludmVydCAwMDAwMDEwMDExMTExMDExICAgLT4gIDExMTExMDExMDAwMDAxMDANCi0NCi0tLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCi1kZGludjIyMCBpbnZlcnQgMTExMTExMTEyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjIxIGludmVydCAzMzMzMzMzMzMgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyMjIgaW52ZXJ0IDU1NTU1NTU1NSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjIyMyBpbnZlcnQgNzc3Nzc3Nzc3ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjI0IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyMjUgaW52ZXJ0IDIyMjIyMjIyMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjIyNiBpbnZlcnQgNDQ0NDQ0NDQ0ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjI3IGludmVydCA2NjY2NjY2NjYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyMjggaW52ZXJ0IDg4ODg4ODg4OCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjIyOSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjMwIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyMzEgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjIzMiBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGEgZmV3IHJhbmRvbXMNCi1kZGludjI0MCBpbnZlcnQgIDU2NzQ2ODY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjQxIGludmVydCAgNTY3MzY3Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNDIgaW52ZXJ0IC02MzE5MTc3NzIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI0MyBpbnZlcnQgLTc1NjI1MzI1NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjQ0IGludmVydCAgODM1NTkwMTQ5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QNCi1kZGludjI1MCBpbnZlcnQgIDIwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI1MSBpbnZlcnQgIDMwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI1MiBpbnZlcnQgIDQwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI1MyBpbnZlcnQgIDUwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI1NCBpbnZlcnQgIDYwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI1NSBpbnZlcnQgIDcwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI1NiBpbnZlcnQgIDgwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI1NyBpbnZlcnQgIDkwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRC0xDQotZGRpbnYyNzAgaW52ZXJ0ICAwMjAwMDAxMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNzEgaW52ZXJ0ICAwMzAwMDAwMTAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNzIgaW52ZXJ0ICAwNDAwMDAwMDEwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNzMgaW52ZXJ0ICAwNTAwMDAwMDAxMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNzQgaW52ZXJ0ICAxNjAwMDAwMDAwMTAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNzUgaW52ZXJ0ICAxNzAwMDAwMDAwMDEwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNzYgaW52ZXJ0ICAxODAwMDAwMDAwMDAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNzcgaW52ZXJ0ICAxOTAwMDAwMDAwMDAwMTAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi1kZGludjI4MCBpbnZlcnQgIDAwMTAwMDAwMDAwMDAwMDIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI4MSBpbnZlcnQgIDAwMDEwMDAwMDAwMDAwMDMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI4MiBpbnZlcnQgIDAwMDAxMDAwMDAwMDAwMDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI4MyBpbnZlcnQgIDAwMDAwMTAwMDAwMDAwMDUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI4NCBpbnZlcnQgIDEwMDAwMDEwMDAwMDAwMDYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI4NSBpbnZlcnQgIDEwMDAwMDAxMDAwMDAwMDcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI4NiBpbnZlcnQgIDEwMDAwMDAwMTAwMDAwMDggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI4NyBpbnZlcnQgIDEwMDAwMDAwMDEwMDAwMDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1pZGRpZQ0KLWRkaW52Mjg4IGludmVydCAgMDAxMDAwMDAyMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52Mjg5IGludmVydCAgMDAwMTAwMDAzMDAwMDAwMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjkwIGludmVydCAgMDAwMDEwMDA0MDAwMDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjkxIGludmVydCAgMDAwMDAxMDA1MDAwMDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjkyIGludmVydCAgMTAwMDAwMTA2MDAwMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjkzIGludmVydCAgMTAwMDAwMDE3MDAxMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52Mjk0IGludmVydCAgMTAwMDAwMDA4MDEwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52Mjk1IGludmVydCAgMTAwMDAwMDA5MTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHNpZ24NCi1kZGludjI5NiBpbnZlcnQgLTEwMDAwMDAwMDEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI5OSBpbnZlcnQgIDEwMDAwMDAwMDEwMDAwMDAgIC0+ICAxMTExMTExMTAxMTExMTENCi0NCi0NCi0tLSBObWF4LCBObWluLCBOdGlueS1saWtlDQotZGRpbnYzNDEgaW52ZXJ0ICA5Ljk5OTk5OTk5RSsyOTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjM0MiBpbnZlcnQgIDFFLTI5OSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MzQzIGludmVydCAgMS4wMDAwMDAwMEUtMjk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYzNDQgaW52ZXJ0ICAxRS0yMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjM0NSBpbnZlcnQgIC0xRS0yMDcgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MzQ2IGludmVydCAgLTEuMDAwMDAwMDBFLTI5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYzNDcgaW52ZXJ0ICAtMUUtMjk5ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjM0OCBpbnZlcnQgIC05Ljk5OTk5OTk5RSsyOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KLWRkaW52MzYxIGludmVydCAgMS4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYzNjIgaW52ZXJ0ICAxRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjM2MyBpbnZlcnQgIDAuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MzY0IGludmVydCAgMEUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYzNjUgaW52ZXJ0ICA5LjkgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjM2NiBpbnZlcnQgIDlFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCi1kZGludjc4OCBpbnZlcnQgLUluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52Nzk0IGludmVydCAgSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4MjEgaW52ZXJ0ICBOYU4gICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjg0MSBpbnZlcnQgIHNOYU4gICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZGludjg2MSBpbnZlcnQgIE5hTjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4NjIgaW52ZXJ0ICtOYU4yICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52ODYzIGludmVydCAgTmFOMyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjg2NCBpbnZlcnQgIE5hTjQgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4NjUgaW52ZXJ0ICBOYU41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52ODcxIGludmVydCAgc05hTjExICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjg3MiBpbnZlcnQgIHNOYU4xMiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4NzMgaW52ZXJ0ICBzTmFOMTMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52ODc0IGludmVydCAgc05hTjE0ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjg3NSBpbnZlcnQgIHNOYU4xNSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4NzYgaW52ZXJ0ICBOYU4xNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52ODgxIGludmVydCArTmFOMjUgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjg4MiBpbnZlcnQgLU5hTjI2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4ODMgaW52ZXJ0IC1zTmFOMjcgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRJbnZlcnQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBJTlZFUlQgZm9yIGRlY0RvdWJsZXMgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2RkaW52MDAxIGludmVydCAgICAgICAgICAgICAwIC0+IDExMTExMTExMTExMTExMTEKK2RkaW52MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMTExMTExMTAKK2RkaW52MDAzIGludmVydCAgICAgICAgICAgIDEwIC0+IDExMTExMTExMTExMTExMDEKK2RkaW52MDA0IGludmVydCAgICAgMTExMTExMTExIC0+IDExMTExMTEwMDAwMDAwMDAKK2RkaW52MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMTExMTExMTEKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitkZGludjAwNyBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTEKK2RkaW52MDA4IGludmVydCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDExMTExMTExMTExMTExMQorZGRpbnYwMDkgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExCitkZGludjAxMCBpbnZlcnQgMDEwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMTExMTExMTExMTExMTEKK2RkaW52MDExIGludmVydCAwMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGRpbnYwMTIgaW52ZXJ0IDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgICAwCitkZGludjAxMyBpbnZlcnQgMDAxMTExMTExMTExMTExMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAKK2RkaW52MDE0IGludmVydCAwMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OSAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkaW52MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+ICAxMTExMTExMDAwMDAwMDAwCitkZGludjAyMiBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMTExMTAwMDAwMDAwMDAwMAorZGRpbnYwMjMgaW52ZXJ0ICAxMTExMTExMSAgICAgLT4gIDExMTExMTExMDAwMDAwMDAKK2RkaW52MDI1IGludmVydCAgIDExMTExMTEgICAgIC0+ICAxMTExMTExMTEwMDAwMDAwCitkZGludjAyNiBpbnZlcnQgICAgMTExMTExICAgICAtPiAgMTExMTExMTExMTAwMDAwMAorZGRpbnYwMjcgaW52ZXJ0ICAgICAxMTExMSAgICAgLT4gIDExMTExMTExMTExMDAwMDAKK2RkaW52MDI4IGludmVydCAgICAgIDExMTEgICAgIC0+ICAxMTExMTExMTExMTEwMDAwCitkZGludjAyOSBpbnZlcnQgICAgICAgMTExICAgICAtPiAgMTExMTExMTExMTExMTAwMAorZGRpbnYwMzEgaW52ZXJ0ICAgICAgICAxMSAgICAgLT4gIDExMTExMTExMTExMTExMDAKK2RkaW52MDMyIGludmVydCAgICAgICAgIDEgICAgIC0+ICAxMTExMTExMTExMTExMTEwCitkZGludjAzMyBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMTExMTAwMDAwMDAwMDAwMAorZGRpbnYwMzQgaW52ZXJ0IDExMTExMTExMTExICAgLT4gIDExMTExMDAwMDAwMDAwMDAKK2RkaW52MDM1IGludmVydCAxMTExMTExMTExICAgIC0+ICAxMTExMTEwMDAwMDAwMDAwCitkZGludjAzNiBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMTExMTExMTAwMDAwMDAwMAorCitkZGludjA0MCBpbnZlcnQgMDExMTExMTExICAgLT4gIDExMTExMTExMDAwMDAwMDAKK2RkaW52MDQxIGludmVydCAxMDExMTExMTEgICAtPiAgMTExMTExMTAxMDAwMDAwMAorZGRpbnYwNDIgaW52ZXJ0IDExMDExMTExMSAgIC0+ICAxMTExMTExMDAxMDAwMDAwCitkZGludjA0MyBpbnZlcnQgMTExMDExMTExICAgLT4gIDExMTExMTEwMDAxMDAwMDAKK2RkaW52MDQ0IGludmVydCAxMTExMDExMTEgICAtPiAgMTExMTExMTAwMDAxMDAwMAorZGRpbnYwNDUgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAxMTExMTExMDAwMDAxMDAwCitkZGludjA0NiBpbnZlcnQgMTExMTExMDExICAgLT4gIDExMTExMTEwMDAwMDAxMDAKK2RkaW52MDQ3IGludmVydCAxMTExMTExMDEgICAtPiAgMTExMTExMTAwMDAwMDAxMAorZGRpbnYwNDggaW52ZXJ0IDExMTExMTExMCAgIC0+ICAxMTExMTExMDAwMDAwMDAxCitkZGludjA0OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDExMTExMTExMDAwMDAxMDAKK2RkaW52MDUwIGludmVydCAxMDExMTExMDEgICAtPiAgMTExMTExMTAxMDAwMDAxMAorZGRpbnYwNTEgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAxMTExMTExMDAxMDAwMDAxCitkZGludjA1MiBpbnZlcnQgMTExMDExMTAxICAgLT4gIDExMTExMTEwMDAxMDAwMTAKK2RkaW52MDUzIGludmVydCAxMTExMDEwMTEgICAtPiAgMTExMTExMTAwMDAxMDEwMAorZGRpbnYwNTQgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAxMTExMTExMDAwMDAxMDAwCitkZGludjA1NSBpbnZlcnQgMTExMTAxMDExICAgLT4gIDExMTExMTEwMDAwMTAxMDAKK2RkaW52MDU2IGludmVydCAxMTEwMTExMDEgICAtPiAgMTExMTExMTAwMDEwMDAxMAorZGRpbnYwNTcgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAxMTExMTExMDAxMDAwMDAxCitkZGludjA1OCBpbnZlcnQgMTAxMTExMTAxICAgLT4gIDExMTExMTEwMTAwMDAwMTAKK2RkaW52MDU5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTExMTExMTEwMDAwMDEwMAorCitkZGludjA4MCBpbnZlcnQgMTAwMDAwMDAxMTExMTExMSAgIC0+ICAgMTExMTExMTAwMDAwMDAwCitkZGludjA4MSBpbnZlcnQgMDEwMDAwMDEwMTExMTExMSAgIC0+ICAxMDExMTExMDEwMDAwMDAwCitkZGludjA4MiBpbnZlcnQgMDAxMDAwMDExMDExMTExMSAgIC0+ICAxMTAxMTExMDAxMDAwMDAwCitkZGludjA4MyBpbnZlcnQgMDAwMTAwMDExMTAxMTExMSAgIC0+ICAxMTEwMTExMDAwMTAwMDAwCitkZGludjA4NCBpbnZlcnQgMDAwMDEwMDExMTEwMTExMSAgIC0+ICAxMTExMDExMDAwMDEwMDAwCitkZGludjA4NSBpbnZlcnQgMDAwMDAxMDExMTExMDExMSAgIC0+ICAxMTExMTAxMDAwMDAxMDAwCitkZGludjA4NiBpbnZlcnQgMDAwMDAwMTExMTExMTAxMSAgIC0+ICAxMTExMTEwMDAwMDAwMTAwCitkZGludjA4NyBpbnZlcnQgMDAwMDAxMDExMTExMTEwMSAgIC0+ICAxMTExMTAxMDAwMDAwMDEwCitkZGludjA4OCBpbnZlcnQgMDAwMDEwMDExMTExMTExMCAgIC0+ICAxMTExMDExMDAwMDAwMDAxCitkZGludjA4OSBpbnZlcnQgMDAwMTAwMDAxMTExMTAxMSAgIC0+ICAxMTEwMTExMTAwMDAwMTAwCitkZGludjA5MCBpbnZlcnQgMDAxMDAwMDEwMTExMTEwMSAgIC0+ICAxMTAxMTExMDEwMDAwMDEwCitkZGludjA5MSBpbnZlcnQgMDEwMDAwMDExMDExMTExMCAgIC0+ICAxMDExMTExMDAxMDAwMDAxCitkZGludjA5MiBpbnZlcnQgMTAwMDAwMDExMTAxMTEwMSAgIC0+ICAgMTExMTExMDAwMTAwMDEwCitkZGludjA5MyBpbnZlcnQgMDEwMDAwMDExMTEwMTAxMSAgIC0+ICAxMDExMTExMDAwMDEwMTAwCitkZGludjA5NCBpbnZlcnQgMDAxMDAwMDExMTExMDExMSAgIC0+ICAxMTAxMTExMDAwMDAxMDAwCitkZGludjA5NSBpbnZlcnQgMDAwMTAwMDExMTEwMTAxMSAgIC0+ICAxMTEwMTExMDAwMDEwMTAwCitkZGludjA5NiBpbnZlcnQgMDAwMDEwMDExMTAxMTEwMSAgIC0+ICAxMTExMDExMDAwMTAwMDEwCitkZGludjA5NyBpbnZlcnQgMDAwMDAxMDExMDExMTExMCAgIC0+ICAxMTExMTAxMDAxMDAwMDAxCitkZGludjA5OCBpbnZlcnQgMDAwMDAwMTEwMTExMTEwMSAgIC0+ICAxMTExMTEwMDEwMDAwMDEwCitkZGludjA5OSBpbnZlcnQgMDAwMDAxMDAxMTExMTAxMSAgIC0+ICAxMTExMTAxMTAwMDAwMTAwCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworZGRpbnYyMjAgaW52ZXJ0IDExMTExMTExMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjIxIGludmVydCAzMzMzMzMzMzMgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjMgaW52ZXJ0IDc3Nzc3Nzc3NyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjI0IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjYgaW52ZXJ0IDQ0NDQ0NDQ0NCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjI3IGludmVydCA2NjY2NjY2NjYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjkgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjMwIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMzIgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2RkaW52MjQwIGludmVydCAgNTY3NDY4Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI0MSBpbnZlcnQgIDU2NzM2NzY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNDIgaW52ZXJ0IC02MzE5MTc3NzIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjQzIGludmVydCAtNzU2MjUzMjU3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI0NCBpbnZlcnQgIDgzNTU5MDE0OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2RkaW52MjUwIGludmVydCAgMjAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNTEgaW52ZXJ0ICAzMDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI1MiBpbnZlcnQgIDQwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjUzIGludmVydCAgNTAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNTQgaW52ZXJ0ICA2MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI1NSBpbnZlcnQgIDcwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjU2IGludmVydCAgODAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNTcgaW52ZXJ0ICA5MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkZGludjI3MCBpbnZlcnQgIDAyMDAwMDEwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjcxIGludmVydCAgMDMwMDAwMDEwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNzIgaW52ZXJ0ICAwNDAwMDAwMDEwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI3MyBpbnZlcnQgIDA1MDAwMDAwMDEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjc0IGludmVydCAgMTYwMDAwMDAwMDEwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNzUgaW52ZXJ0ICAxNzAwMDAwMDAwMDEwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI3NiBpbnZlcnQgIDE4MDAwMDAwMDAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjc3IGludmVydCAgMTkwMDAwMDAwMDAwMDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2RkaW52MjgwIGludmVydCAgMDAxMDAwMDAwMDAwMDAwMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODEgaW52ZXJ0ICAwMDAxMDAwMDAwMDAwMDAzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4MiBpbnZlcnQgIDAwMDAxMDAwMDAwMDAwMDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjgzIGludmVydCAgMDAwMDAxMDAwMDAwMDAwNSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODQgaW52ZXJ0ICAxMDAwMDAxMDAwMDAwMDA2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4NSBpbnZlcnQgIDEwMDAwMDAxMDAwMDAwMDcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjg2IGludmVydCAgMTAwMDAwMDAxMDAwMDAwOCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODcgaW52ZXJ0ICAxMDAwMDAwMDAxMDAwMDA5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorZGRpbnYyODggaW52ZXJ0ICAwMDEwMDAwMDIwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4OSBpbnZlcnQgIDAwMDEwMDAwMzAwMDAwMDEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjkwIGludmVydCAgMDAwMDEwMDA0MDAwMDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyOTEgaW52ZXJ0ICAwMDAwMDEwMDUwMDAwMTAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI5MiBpbnZlcnQgIDEwMDAwMDEwNjAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjkzIGludmVydCAgMTAwMDAwMDE3MDAxMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyOTQgaW52ZXJ0ICAxMDAwMDAwMDgwMTAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI5NSBpbnZlcnQgIDEwMDAwMDAwOTEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ24KK2RkaW52Mjk2IGludmVydCAtMTAwMDAwMDAwMTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyOTkgaW52ZXJ0ICAxMDAwMDAwMDAxMDAwMDAwICAtPiAgMTExMTExMTEwMTExMTExCisKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZGRpbnYzNDEgaW52ZXJ0ICA5Ljk5OTk5OTk5RSsyOTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzQyIGludmVydCAgMUUtMjk5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTI5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNDQgaW52ZXJ0ICAxRS0yMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzQ1IGludmVydCAgLTFFLTIwNyAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS0yOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNDcgaW52ZXJ0ICAtMUUtMjk5ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzQ4IGludmVydCAgLTkuOTk5OTk5OTlFKzI5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZGRpbnYzNjEgaW52ZXJ0ICAxLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzYyIGludmVydCAgMUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM2MyBpbnZlcnQgIDAuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNjQgaW52ZXJ0ICAwRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzY1IGludmVydCAgOS45ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM2NiBpbnZlcnQgIDlFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkZGludjc4OCBpbnZlcnQgLUluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY3OTQgaW52ZXJ0ICBJbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODIxIGludmVydCAgTmFOICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg0MSBpbnZlcnQgIHNOYU4gICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworZGRpbnY4NjEgaW52ZXJ0ICBOYU4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NjIgaW52ZXJ0ICtOYU4yICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NjMgaW52ZXJ0ICBOYU4zICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NjQgaW52ZXJ0ICBOYU40ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NjUgaW52ZXJ0ICBOYU41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzEgaW52ZXJ0ICBzTmFOMTEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzIgaW52ZXJ0ICBzTmFOMTIgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzMgaW52ZXJ0ICBzTmFOMTMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzQgaW52ZXJ0ICBzTmFOMTQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzUgaW52ZXJ0ICBzTmFOMTUgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzYgaW52ZXJ0ICBOYU4xNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4ODEgaW52ZXJ0ICtOYU4yNSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4ODIgaW52ZXJ0IC1OYU4yNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4ODMgaW52ZXJ0IC1zTmFOMjcgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTG9nQi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTG9nQi5kZWNUZXN0CmluZGV4IDAwNTg5YjYuLmRlNzI4ZTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZExvZ0IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRMb2dCLmRlY1Rlc3QKQEAgLTEsMTU5ICsxLDE1OSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRMb2dCLmRlY1Rlc3QgLS0gaW50ZWdyYWwgNzU0ciBhZGp1c3RlZCBleHBvbmVudCwgZm9yIGRlY0RvdWJsZXMgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gYmFzaWNzDQotZGRsb2diMDAwIGxvZ2IgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRkbG9nYjAwMSBsb2diICAxRS0zOTggICAgICAgICAgICAtPiAtMzk4DQotZGRsb2diMDAyIGxvZ2IgIDFFLTM4MyAgICAgICAgICAgIC0+IC0zODMNCi1kZGxvZ2IwMDMgbG9nYiAgMC4wMDEgICAgICAgICAgICAgLT4gLTMNCi1kZGxvZ2IwMDQgbG9nYiAgMC4wMyAgICAgICAgICAgICAgLT4gLTINCi1kZGxvZ2IwMDUgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gIDANCi1kZGxvZ2IwMDYgbG9nYiAgMiAgICAgICAgICAgICAgICAgLT4gIDANCi1kZGxvZ2IwMDcgbG9nYiAgMi41ICAgICAgICAgICAgICAgLT4gIDANCi1kZGxvZ2IwMDggbG9nYiAgMi41MDAgICAgICAgICAgICAgLT4gIDANCi1kZGxvZ2IwMDkgbG9nYiAgMTAgICAgICAgICAgICAgICAgLT4gIDENCi1kZGxvZ2IwMTAgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDENCi1kZGxvZ2IwMTEgbG9nYiAgMTAwICAgICAgICAgICAgICAgLT4gIDINCi1kZGxvZ2IwMTIgbG9nYiAgMzMzICAgICAgICAgICAgICAgLT4gIDINCi1kZGxvZ2IwMTMgbG9nYiAgOUUrMzg0ICAgICAgICAgICAgLT4gIDM4NA0KLWRkbG9nYjAxNCBsb2diICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCi0NCi0tLSBuZWdhdGl2ZXMgYXBwZWFyIHRvIGJlIHRyZWF0ZWQgYXMgcG9zaXRpdmVzDQotZGRsb2diMDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRkbG9nYjAyMiBsb2diIC0xRS0zOTggICAgICAgICAgICAtPiAtMzk4DQotZGRsb2diMDIzIGxvZ2IgLTlFLTM4MyAgICAgICAgICAgIC0+IC0zODMNCi1kZGxvZ2IwMjQgbG9nYiAtMC4wMDEgICAgICAgICAgICAgLT4gLTMNCi1kZGxvZ2IwMjUgbG9nYiAtMSAgICAgICAgICAgICAgICAgLT4gIDANCi1kZGxvZ2IwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDANCi1kZGxvZ2IwMjcgbG9nYiAtMTAgICAgICAgICAgICAgICAgLT4gIDENCi1kZGxvZ2IwMjggbG9nYiAtNzAgICAgICAgICAgICAgICAgLT4gIDENCi1kZGxvZ2IwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDINCi1kZGxvZ2IwMzAgbG9nYiAtOUUrMzg0ICAgICAgICAgICAgLT4gIDM4NA0KLWRkbG9nYjAzMSBsb2diIC1JbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCi0NCi0tLSB6ZXJvcw0KLWRkbG9nYjExMSBsb2diICAgICAgICAgIDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kZGxvZ2IxMTIgbG9nYiAgICAgICAgIC0wICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZGRsb2diMTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRkbG9nYjExNCBsb2diICAgICAgLTBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kZGxvZ2IxMTUgbG9nYiAgICAgMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZGRsb2diMTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRkbG9nYjExNyBsb2diICAgICAgMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kZGxvZ2IxMTggbG9nYiAgICAgLTBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kZGxvZ2IxMjEgbG9nYiAgIDI2ODI2ODI2OCAgICAgICAgLT4gOA0KLWRkbG9nYjEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4DQotZGRsb2diMTIzIGxvZ2IgICAxMzQxMzQxMzQgICAgICAgIC0+IDgNCi1kZGxvZ2IxMjQgbG9nYiAgLTEzNDEzNDEzNCAgICAgICAgLT4gOA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRsb2diMTMxIGxvZ2IgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAgMzg0DQotZGRsb2diMTMyIGxvZ2IgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAtMzgzDQotZGRsb2diMTMzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAtMzgzDQotZGRsb2diMTM0IGxvZ2IgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMzk4DQotDQotZGRsb2diMTM1IGxvZ2IgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMzk4DQotZGRsb2diMTM2IGxvZ2IgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMzgzDQotZGRsb2diMTM3IGxvZ2IgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMzgzDQotZGRsb2diMTM4IGxvZ2IgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAgMzg0DQotDQotLS0gb25lcw0KLWRkbG9nYjAwNjEgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gICAwDQotZGRsb2diMDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDANCi1kZGxvZ2IwMDYzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMA0KLQ0KLS0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwDQotZGRsb2diMTEwMCBsb2diIDEgICAgICAgICAgICAgLT4gMA0KLWRkbG9nYjExMDEgbG9nYiAxMCAgICAgICAgICAgIC0+IDENCi1kZGxvZ2IxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyDQotZGRsb2diMTEwMyBsb2diIDEwMDAgICAgICAgICAgLT4gMw0KLWRkbG9nYjExMDQgbG9nYiAxMDAwMCAgICAgICAgIC0+IDQNCi1kZGxvZ2IxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1DQotZGRsb2diMTEwNiBsb2diIDEwMDAwMDAgICAgICAgLT4gNg0KLWRkbG9nYjExMDcgbG9nYiAxMDAwMDAwMCAgICAgIC0+IDcNCi1kZGxvZ2IxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4DQotZGRsb2diMTEwOSBsb2diIDEwMDAwMDAwMDAgICAgLT4gOQ0KLWRkbG9nYjExMTAgbG9nYiAxMDAwMDAwMDAwMCAgIC0+IDEwDQotZGRsb2diMTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTENCi1kZGxvZ2IxMTEyIGxvZ2IgMTAwMDAwMDAwMDAwMCAtPiAxMg0KLWRkbG9nYjExMTMgbG9nYiAwLjAwMDAwMDAwMDAxIC0+IC0xMQ0KLWRkbG9nYjExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwDQotZGRsb2diMTExNSBsb2diIDAuMDAwMDAwMDAxIC0+IC05DQotZGRsb2diMTExNiBsb2diIDAuMDAwMDAwMDEgLT4gLTgNCi1kZGxvZ2IxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03DQotZGRsb2diMTExOCBsb2diIDAuMDAwMDAxIC0+IC02DQotZGRsb2diMTExOSBsb2diIDAuMDAwMDEgLT4gLTUNCi1kZGxvZ2IxMTIwIGxvZ2IgMC4wMDAxIC0+IC00DQotZGRsb2diMTEyMSBsb2diIDAuMDAxIC0+IC0zDQotZGRsb2diMTEyMiBsb2diIDAuMDEgLT4gLTINCi1kZGxvZ2IxMTIzIGxvZ2IgMC4xIC0+IC0xDQotZGRsb2diMTEyNCBsb2diIDFFLTk5ICAtPiAtOTkNCi1kZGxvZ2IxMTI1IGxvZ2IgMUUtMTAwIC0+IC0xMDANCi1kZGxvZ2IxMTI3IGxvZ2IgMUUtMjk5IC0+IC0yOTkNCi1kZGxvZ2IxMTI2IGxvZ2IgMUUtMzgzIC0+IC0zODMNCi0NCi0tLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hDQotZGRsb2diMTQwMCBsb2diIDEwRS0zICAgIC0+IC0yDQotZGRsb2diMTQwMSBsb2diIDEwRS0yICAgIC0+IC0xDQotZGRsb2diMTQwMiBsb2diIDEwMEUtMiAgIC0+ICAwDQotZGRsb2diMTQwMyBsb2diIDEwMDBFLTIgIC0+ICAxDQotZGRsb2diMTQwNCBsb2diIDEwMDAwRS0yIC0+ICAyDQotZGRsb2diMTQwNSBsb2diIDEwRS0xICAgIC0+ICAwDQotZGRsb2diMTQwNiBsb2diIDEwMEUtMSAgIC0+ICAxDQotZGRsb2diMTQwNyBsb2diIDEwMDBFLTEgIC0+ICAyDQotZGRsb2diMTQwOCBsb2diIDEwMDAwRS0xIC0+ICAzDQotZGRsb2diMTQwOSBsb2diIDEwRTAgICAgIC0+ICAxDQotZGRsb2diMTQxMCBsb2diIDEwMEUwICAgIC0+ICAyDQotZGRsb2diMTQxMSBsb2diIDEwMDBFMCAgIC0+ICAzDQotZGRsb2diMTQxMiBsb2diIDEwMDAwRTAgIC0+ICA0DQotZGRsb2diMTQxMyBsb2diIDEwRTEgICAgIC0+ICAyDQotZGRsb2diMTQxNCBsb2diIDEwMEUxICAgIC0+ICAzDQotZGRsb2diMTQxNSBsb2diIDEwMDBFMSAgIC0+ICA0DQotZGRsb2diMTQxNiBsb2diIDEwMDAwRTEgIC0+ICA1DQotZGRsb2diMTQxNyBsb2diIDEwRTIgICAgIC0+ICAzDQotZGRsb2diMTQxOCBsb2diIDEwMEUyICAgIC0+ICA0DQotZGRsb2diMTQxOSBsb2diIDEwMDBFMiAgIC0+ICA1DQotZGRsb2diMTQyMCBsb2diIDEwMDAwRTIgIC0+ICA2DQotDQotLS0gc3BlY2lhbCB2YWx1ZXMNCi1kZGxvZ2I4MjAgIGxvZ2IgICBJbmZpbml0eSAtPiAgIEluZmluaXR5DQotZGRsb2diODIxICBsb2diICAgMCAgICAgICAgLT4gIC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRsb2diODIyICBsb2diICAgTmFOICAgICAgLT4gICBOYU4NCi1kZGxvZ2I4MjMgIGxvZ2IgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRsb2diODI0ICBsb2diICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRsb2diODI1ICBsb2diICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRsb2diODI2ICBsb2diICAgTmFONDU2ICAgLT4gICBOYU40NTYNCi1kZGxvZ2I4MjcgIGxvZ2IgICAtTmFONjU0ICAtPiAgLU5hTjY1NA0KLWRkbG9nYjgyOCAgbG9nYiAgIE5hTjEgICAgIC0+ICAgTmFOMQ0KLQ0KLS0tIE51bGwgdGVzdA0KLWRkbG9nYjkwMCAgbG9nYiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZExvZ0IuZGVjVGVzdCAtLSBpbnRlZ3JhbCA3NTRyIGFkanVzdGVkIGV4cG9uZW50LCBmb3IgZGVjRG91YmxlcyAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBiYXNpY3MKK2RkbG9nYjAwMCBsb2diICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RkbG9nYjAwMSBsb2diICAxRS0zOTggICAgICAgICAgICAtPiAtMzk4CitkZGxvZ2IwMDIgbG9nYiAgMUUtMzgzICAgICAgICAgICAgLT4gLTM4MworZGRsb2diMDAzIGxvZ2IgIDAuMDAxICAgICAgICAgICAgIC0+IC0zCitkZGxvZ2IwMDQgbG9nYiAgMC4wMyAgICAgICAgICAgICAgLT4gLTIKK2RkbG9nYjAwNSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgMAorZGRsb2diMDA2IGxvZ2IgIDIgICAgICAgICAgICAgICAgIC0+ICAwCitkZGxvZ2IwMDcgbG9nYiAgMi41ICAgICAgICAgICAgICAgLT4gIDAKK2RkbG9nYjAwOCBsb2diICAyLjUwMCAgICAgICAgICAgICAtPiAgMAorZGRsb2diMDA5IGxvZ2IgIDEwICAgICAgICAgICAgICAgIC0+ICAxCitkZGxvZ2IwMTAgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDEKK2RkbG9nYjAxMSBsb2diICAxMDAgICAgICAgICAgICAgICAtPiAgMgorZGRsb2diMDEyIGxvZ2IgIDMzMyAgICAgICAgICAgICAgIC0+ICAyCitkZGxvZ2IwMTMgbG9nYiAgOUUrMzg0ICAgICAgICAgICAgLT4gIDM4NAorZGRsb2diMDE0IGxvZ2IgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSBuZWdhdGl2ZXMgYXBwZWFyIHRvIGJlIHRyZWF0ZWQgYXMgcG9zaXRpdmVzCitkZGxvZ2IwMjEgbG9nYiAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IwMjIgbG9nYiAtMUUtMzk4ICAgICAgICAgICAgLT4gLTM5OAorZGRsb2diMDIzIGxvZ2IgLTlFLTM4MyAgICAgICAgICAgIC0+IC0zODMKK2RkbG9nYjAyNCBsb2diIC0wLjAwMSAgICAgICAgICAgICAtPiAtMworZGRsb2diMDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwCitkZGxvZ2IwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDAKK2RkbG9nYjAyNyBsb2diIC0xMCAgICAgICAgICAgICAgICAtPiAgMQorZGRsb2diMDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxCitkZGxvZ2IwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDIKK2RkbG9nYjAzMCBsb2diIC05RSszODQgICAgICAgICAgICAtPiAgMzg0CitkZGxvZ2IwMzEgbG9nYiAtSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKy0tIHplcm9zCitkZGxvZ2IxMTEgbG9nYiAgICAgICAgICAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTIgbG9nYiAgICAgICAgIC0wICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTMgbG9nYiAgICAgICAwRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTQgbG9nYiAgICAgIC0wRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTUgbG9nYiAgICAgMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTYgbG9nYiAgICAtMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTcgbG9nYiAgICAgIDBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTggbG9nYiAgICAgLTBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZGxvZ2IxMjEgbG9nYiAgIDI2ODI2ODI2OCAgICAgICAgLT4gOAorZGRsb2diMTIyIGxvZ2IgIC0yNjgyNjgyNjggICAgICAgIC0+IDgKK2RkbG9nYjEyMyBsb2diICAgMTM0MTM0MTM0ICAgICAgICAtPiA4CitkZGxvZ2IxMjQgbG9nYiAgLTEzNDEzNDEzNCAgICAgICAgLT4gOAorCistLSBObWF4LCBObWluLCBOdGlueQorZGRsb2diMTMxIGxvZ2IgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAgMzg0CitkZGxvZ2IxMzIgbG9nYiAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IC0zODMKK2RkbG9nYjEzMyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gLTM4MworZGRsb2diMTM0IGxvZ2IgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMzk4CisKK2RkbG9nYjEzNSBsb2diICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTM5OAorZGRsb2diMTM2IGxvZ2IgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMzgzCitkZGxvZ2IxMzcgbG9nYiAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0zODMKK2RkbG9nYjEzOCBsb2diICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIDM4NAorCistLSBvbmVzCitkZGxvZ2IwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorZGRsb2diMDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKK2RkbG9nYjAwNjMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwCisKKy0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwCitkZGxvZ2IxMTAwIGxvZ2IgMSAgICAgICAgICAgICAtPiAwCitkZGxvZ2IxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxCitkZGxvZ2IxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyCitkZGxvZ2IxMTAzIGxvZ2IgMTAwMCAgICAgICAgICAtPiAzCitkZGxvZ2IxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0CitkZGxvZ2IxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1CitkZGxvZ2IxMTA2IGxvZ2IgMTAwMDAwMCAgICAgICAtPiA2CitkZGxvZ2IxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3CitkZGxvZ2IxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4CitkZGxvZ2IxMTA5IGxvZ2IgMTAwMDAwMDAwMCAgICAtPiA5CitkZGxvZ2IxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMAorZGRsb2diMTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTEKK2RkbG9nYjExMTIgbG9nYiAxMDAwMDAwMDAwMDAwIC0+IDEyCitkZGxvZ2IxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTEKK2RkbG9nYjExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwCitkZGxvZ2IxMTE1IGxvZ2IgMC4wMDAwMDAwMDEgLT4gLTkKK2RkbG9nYjExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04CitkZGxvZ2IxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03CitkZGxvZ2IxMTE4IGxvZ2IgMC4wMDAwMDEgLT4gLTYKK2RkbG9nYjExMTkgbG9nYiAwLjAwMDAxIC0+IC01CitkZGxvZ2IxMTIwIGxvZ2IgMC4wMDAxIC0+IC00CitkZGxvZ2IxMTIxIGxvZ2IgMC4wMDEgLT4gLTMKK2RkbG9nYjExMjIgbG9nYiAwLjAxIC0+IC0yCitkZGxvZ2IxMTIzIGxvZ2IgMC4xIC0+IC0xCitkZGxvZ2IxMTI0IGxvZ2IgMUUtOTkgIC0+IC05OQorZGRsb2diMTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwCitkZGxvZ2IxMTI3IGxvZ2IgMUUtMjk5IC0+IC0yOTkKK2RkbG9nYjExMjYgbG9nYiAxRS0zODMgLT4gLTM4MworCistLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hCitkZGxvZ2IxNDAwIGxvZ2IgMTBFLTMgICAgLT4gLTIKK2RkbG9nYjE0MDEgbG9nYiAxMEUtMiAgICAtPiAtMQorZGRsb2diMTQwMiBsb2diIDEwMEUtMiAgIC0+ICAwCitkZGxvZ2IxNDAzIGxvZ2IgMTAwMEUtMiAgLT4gIDEKK2RkbG9nYjE0MDQgbG9nYiAxMDAwMEUtMiAtPiAgMgorZGRsb2diMTQwNSBsb2diIDEwRS0xICAgIC0+ICAwCitkZGxvZ2IxNDA2IGxvZ2IgMTAwRS0xICAgLT4gIDEKK2RkbG9nYjE0MDcgbG9nYiAxMDAwRS0xICAtPiAgMgorZGRsb2diMTQwOCBsb2diIDEwMDAwRS0xIC0+ICAzCitkZGxvZ2IxNDA5IGxvZ2IgMTBFMCAgICAgLT4gIDEKK2RkbG9nYjE0MTAgbG9nYiAxMDBFMCAgICAtPiAgMgorZGRsb2diMTQxMSBsb2diIDEwMDBFMCAgIC0+ICAzCitkZGxvZ2IxNDEyIGxvZ2IgMTAwMDBFMCAgLT4gIDQKK2RkbG9nYjE0MTMgbG9nYiAxMEUxICAgICAtPiAgMgorZGRsb2diMTQxNCBsb2diIDEwMEUxICAgIC0+ICAzCitkZGxvZ2IxNDE1IGxvZ2IgMTAwMEUxICAgLT4gIDQKK2RkbG9nYjE0MTYgbG9nYiAxMDAwMEUxICAtPiAgNQorZGRsb2diMTQxNyBsb2diIDEwRTIgICAgIC0+ICAzCitkZGxvZ2IxNDE4IGxvZ2IgMTAwRTIgICAgLT4gIDQKK2RkbG9nYjE0MTkgbG9nYiAxMDAwRTIgICAtPiAgNQorZGRsb2diMTQyMCBsb2diIDEwMDAwRTIgIC0+ICA2CisKKy0tIHNwZWNpYWwgdmFsdWVzCitkZGxvZ2I4MjAgIGxvZ2IgICBJbmZpbml0eSAtPiAgIEluZmluaXR5CitkZGxvZ2I4MjEgIGxvZ2IgICAwICAgICAgICAtPiAgLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkbG9nYjgyMiAgbG9nYiAgIE5hTiAgICAgIC0+ICAgTmFOCitkZGxvZ2I4MjMgIGxvZ2IgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbG9nYjgyNCAgbG9nYiAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbgorZGRsb2diODI1ICBsb2diICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uCitkZGxvZ2I4MjYgIGxvZ2IgICBOYU40NTYgICAtPiAgIE5hTjQ1NgorZGRsb2diODI3ICBsb2diICAgLU5hTjY1NCAgLT4gIC1OYU42NTQKK2RkbG9nYjgyOCAgbG9nYiAgIE5hTjEgICAgIC0+ICAgTmFOMQorCistLSBOdWxsIHRlc3QKK2RkbG9nYjkwMCAgbG9nYiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXguZGVjVGVzdAppbmRleCA0NWVhOWI0Li4xYWM2Mzk1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXguZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXguZGVjVGVzdApAQCAtMSwzMjIgKzEsMzIyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZE1heC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtYXhudW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvDQotLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRtYXgwMDEgbWF4ICAtMiAgLTIgIC0+IC0yDQotZGRtYXgwMDIgbWF4ICAtMiAgLTEgIC0+IC0xDQotZGRtYXgwMDMgbWF4ICAtMiAgIDAgIC0+ICAwDQotZGRtYXgwMDQgbWF4ICAtMiAgIDEgIC0+ICAxDQotZGRtYXgwMDUgbWF4ICAtMiAgIDIgIC0+ICAyDQotZGRtYXgwMDYgbWF4ICAtMSAgLTIgIC0+IC0xDQotZGRtYXgwMDcgbWF4ICAtMSAgLTEgIC0+IC0xDQotZGRtYXgwMDggbWF4ICAtMSAgIDAgIC0+ICAwDQotZGRtYXgwMDkgbWF4ICAtMSAgIDEgIC0+ICAxDQotZGRtYXgwMTAgbWF4ICAtMSAgIDIgIC0+ICAyDQotZGRtYXgwMTEgbWF4ICAgMCAgLTIgIC0+ICAwDQotZGRtYXgwMTIgbWF4ICAgMCAgLTEgIC0+ICAwDQotZGRtYXgwMTMgbWF4ICAgMCAgIDAgIC0+ICAwDQotZGRtYXgwMTQgbWF4ICAgMCAgIDEgIC0+ICAxDQotZGRtYXgwMTUgbWF4ICAgMCAgIDIgIC0+ICAyDQotZGRtYXgwMTYgbWF4ICAgMSAgLTIgIC0+ICAxDQotZGRtYXgwMTcgbWF4ICAgMSAgLTEgIC0+ICAxDQotZGRtYXgwMTggbWF4ICAgMSAgIDAgIC0+ICAxDQotZGRtYXgwMTkgbWF4ICAgMSAgIDEgIC0+ICAxDQotZGRtYXgwMjAgbWF4ICAgMSAgIDIgIC0+ICAyDQotZGRtYXgwMjEgbWF4ICAgMiAgLTIgIC0+ICAyDQotZGRtYXgwMjIgbWF4ICAgMiAgLTEgIC0+ICAyDQotZGRtYXgwMjMgbWF4ICAgMiAgIDAgIC0+ICAyDQotZGRtYXgwMjUgbWF4ICAgMiAgIDEgIC0+ICAyDQotZGRtYXgwMjYgbWF4ICAgMiAgIDIgIC0+ICAyDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kZG1heDAzMCBtYXggICAwICAgICAwICAgLT4gIDANCi1kZG1heDAzMSBtYXggICAwICAgIC0wICAgLT4gIDANCi1kZG1heDAzMiBtYXggICAwICAgIC0wLjAgLT4gIDANCi1kZG1heDAzMyBtYXggICAwICAgICAwLjAgLT4gIDANCi1kZG1heDAzNCBtYXggIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4NCi1kZG1heDAzNSBtYXggIC0wICAgIC0wICAgLT4gLTANCi1kZG1heDAzNiBtYXggIC0wICAgIC0wLjAgLT4gLTAuMA0KLWRkbWF4MDM3IG1heCAgLTAgICAgIDAuMCAtPiAgMC4wDQotZGRtYXgwMzggbWF4ICAgMC4wICAgMCAgIC0+ICAwDQotZGRtYXgwMzkgbWF4ICAgMC4wICAtMCAgIC0+ICAwLjANCi1kZG1heDA0MCBtYXggICAwLjAgIC0wLjAgLT4gIDAuMA0KLWRkbWF4MDQxIG1heCAgIDAuMCAgIDAuMCAtPiAgMC4wDQotZGRtYXgwNDIgbWF4ICAtMC4wICAgMCAgIC0+ICAwDQotZGRtYXgwNDMgbWF4ICAtMC4wICAtMCAgIC0+IC0wLjANCi1kZG1heDA0NCBtYXggIC0wLjAgIC0wLjAgLT4gLTAuMA0KLWRkbWF4MDQ1IG1heCAgLTAuMCAgIDAuMCAtPiAgMC4wDQotDQotZGRtYXgwNTAgbWF4ICAtMEUxICAgMEUxIC0+ICAwRSsxDQotZGRtYXgwNTEgbWF4ICAtMEUyICAgMEUyIC0+ICAwRSsyDQotZGRtYXgwNTIgbWF4ICAtMEUyICAgMEUxIC0+ICAwRSsxDQotZGRtYXgwNTMgbWF4ICAtMEUxICAgMEUyIC0+ICAwRSsyDQotZGRtYXgwNTQgbWF4ICAgMEUxICAtMEUxIC0+ICAwRSsxDQotZGRtYXgwNTUgbWF4ICAgMEUyICAtMEUyIC0+ICAwRSsyDQotZGRtYXgwNTYgbWF4ICAgMEUyICAtMEUxIC0+ICAwRSsyDQotZGRtYXgwNTcgbWF4ICAgMEUxICAtMEUyIC0+ICAwRSsxDQotDQotZGRtYXgwNTggbWF4ICAgMEUxICAgMEUxIC0+ICAwRSsxDQotZGRtYXgwNTkgbWF4ICAgMEUyICAgMEUyIC0+ICAwRSsyDQotZGRtYXgwNjAgbWF4ICAgMEUyICAgMEUxIC0+ICAwRSsyDQotZGRtYXgwNjEgbWF4ICAgMEUxICAgMEUyIC0+ICAwRSsyDQotZGRtYXgwNjIgbWF4ICAtMEUxICAtMEUxIC0+IC0wRSsxDQotZGRtYXgwNjMgbWF4ICAtMEUyICAtMEUyIC0+IC0wRSsyDQotZGRtYXgwNjQgbWF4ICAtMEUyICAtMEUxIC0+IC0wRSsxDQotZGRtYXgwNjUgbWF4ICAtMEUxICAtMEUyIC0+IC0wRSsxDQotDQotLS0gU3BlY2lhbHMNCi1kZG1heDA5MCBtYXggIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4MDkxIG1heCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZGRtYXgwOTIgbWF4ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1kZG1heDA5MyBtYXggIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4MDk0IG1heCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZGRtYXgwOTUgbWF4ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kZG1heDA5NiBtYXggIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4MDk3IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtYXgwOTggbWF4IC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG1heDA5OSBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4MTAwIG1heCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtYXgxMDEgbWF4IC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG1heDEwMiBtYXggIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4MTAzIG1heCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtYXgxMDQgbWF4ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG1heDEwNSBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbWF4MTIwIG1heCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtYXgxMjEgbWF4IC1JbmYgIC0xMDAwICAtPiAtMTAwMA0KLWRkbWF4MTIyIG1heCAtSW5mICAtMSAgICAgLT4gLTENCi1kZG1heDEyMyBtYXggLUluZiAgLTAgICAgIC0+IC0wDQotZGRtYXgxMjQgbWF4IC1JbmYgICAwICAgICAtPiAgMA0KLWRkbWF4MTI1IG1heCAtSW5mICAgMSAgICAgLT4gIDENCi1kZG1heDEyNiBtYXggLUluZiAgIDEwMDAgIC0+ICAxMDAwDQotZGRtYXgxMjcgbWF4IC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG1heDEyOCBtYXggLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkNCi1kZG1heDEyOSBtYXggLTEwMDAgLUluZiAgIC0+ICAtMTAwMA0KLWRkbWF4MTMwIG1heCAtMSAgICAtSW5mICAgLT4gIC0xDQotZGRtYXgxMzEgbWF4IC0wICAgIC1JbmYgICAtPiAgLTANCi1kZG1heDEzMiBtYXggIDAgICAgLUluZiAgIC0+ICAwDQotZGRtYXgxMzMgbWF4ICAxICAgIC1JbmYgICAtPiAgMQ0KLWRkbWF4MTM0IG1heCAgMTAwMCAtSW5mICAgLT4gIDEwMDANCi1kZG1heDEzNSBtYXggIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLS0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcw0KLWRkbWF4MTQxIG1heCAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5DQotZGRtYXgxNDIgbWF4ICBOYU4gLTEwMDAgICAtPiAtMTAwMA0KLWRkbWF4MTQzIG1heCAgTmFOIC0xICAgICAgLT4gLTENCi1kZG1heDE0NCBtYXggIE5hTiAtMCAgICAgIC0+IC0wDQotZGRtYXgxNDUgbWF4ICBOYU4gIDAgICAgICAtPiAgMA0KLWRkbWF4MTQ2IG1heCAgTmFOICAxICAgICAgLT4gIDENCi1kZG1heDE0NyBtYXggIE5hTiAgMTAwMCAgIC0+ICAxMDAwDQotZGRtYXgxNDggbWF4ICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkNCi1kZG1heDE0OSBtYXggIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kZG1heDE1MCBtYXggLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQ0KLWRkbWF4MTUxIG1heCAtMTAwMCBOYU4gICAgLT4gLTEwMDANCi1kZG1heDE1MiBtYXggLTEgICAgTmFOICAgIC0+IC0xDQotZGRtYXgxNTMgbWF4IC0wICAgIE5hTiAgICAtPiAtMA0KLWRkbWF4MTU0IG1heCAgMCAgICBOYU4gICAgLT4gIDANCi1kZG1heDE1NSBtYXggIDEgICAgTmFOICAgIC0+ICAxDQotZGRtYXgxNTYgbWF4ICAxMDAwIE5hTiAgICAtPiAgMTAwMA0KLWRkbWF4MTU3IG1heCAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5DQotDQotZGRtYXgxNjEgbWF4ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTYyIG1heCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE2MyBtYXggIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNjQgbWF4ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTY1IG1heCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE2NiBtYXggIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNjcgbWF4ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTY4IG1heCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE2OSBtYXggIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNzAgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTcxIG1heCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE3MiBtYXggLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNzMgbWF4IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTc0IG1heCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE3NSBtYXggIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNzYgbWF4ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTc3IG1heCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE3OCBtYXggIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNzkgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZG1heDE4MSBtYXggIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG1heDE4MiBtYXggIE5hTjggICAgIDkgICAtPiAgOQ0KLWRkbWF4MTgzIG1heCAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbWF4MTg0IG1heCAtTmFOMSAgIE5hTjExIC0+IC1OYU4xDQotZGRtYXgxODUgbWF4ICBOYU4yICAgTmFOMTIgLT4gIE5hTjINCi1kZG1heDE4NiBtYXggLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMNCi1kZG1heDE4NyBtYXggIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQNCi0NCi1kZG1heDE4OCBtYXggLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkNCi1kZG1heDE4OSBtYXggLTkgICAgIC1OYU4zICAtPiAtOQ0KLWRkbWF4MTkwIG1heCAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbWF4MTkxIG1heCAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxOTIgbWF4ICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE5MyBtYXggLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTk0IG1heCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxOTUgbWF4ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE5NiBtYXggLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTk3IG1heCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxOTggbWF4ICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE5OSBtYXggIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG9sZCByb3VuZGluZyBjaGVja3MNCi1kZG1heDIyMSBtYXggMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDANCi1kZG1heDIyMiBtYXggMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDANCi1kZG1heDIyMyBtYXggMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMA0KLWRkbWF4MjI0IG1heCAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwDQotZGRtYXgyMjUgbWF4IDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTANCi1kZG1heDIyNiBtYXggMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MA0KLWRkbWF4MjI3IG1heCAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxDQotZGRtYXgyMjggbWF4IDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTENCi1kZG1heDIyOSBtYXggMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDENCi1kZG1heDIzMCBtYXggMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDENCi1kZG1heDIzMSBtYXggMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5Ng0KLWRkbWF4MjMyIG1heCAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2DQotZGRtYXgyMzMgbWF4IC0xMjM0NTY3ODkxICAxIC0+IDENCi1kZG1heDIzNCBtYXggMSAtMTIzNDU2Nzg5MSAgLT4gMQ0KLWRkbWF4MjM1IG1heCAtMTIzNDU2Nzg5MDEgMSAtPiAxDQotZGRtYXgyMzYgbWF4IDEgLTEyMzQ1Njc4OTAxIC0+IDENCi1kZG1heDIzNyBtYXggLTEyMzQ1Njc4OTYgIDEgLT4gMQ0KLWRkbWF4MjM4IG1heCAxIC0xMjM0NTY3ODk2ICAtPiAxDQotDQotLS0gZnJvbSBleGFtcGxlcw0KLWRkbWF4MjgwIG1heCAnMycgICAnMicgIC0+ICAnMycNCi1kZG1heDI4MSBtYXggJy0xMCcgJzMnICAtPiAgJzMnDQotZGRtYXgyODIgbWF4ICcxLjAnICcxJyAgLT4gICcxJw0KLWRkbWF4MjgzIG1heCAnMScgJzEuMCcgIC0+ICAnMScNCi1kZG1heDI4NCBtYXggJzcnICdOYU4nICAtPiAgJzcnDQotDQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UNCi0tLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQ0KLWRkbWF4NDAxIG1heCAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5DQotZGRtYXg0MDIgbWF4ICAxLjEgICAgMSAgICAgICAtPiAgMS4xDQotZGRtYXg0MDMgbWF4ICAxICAgICAgMS4wICAgICAtPiAgMQ0KLWRkbWF4NDA0IG1heCAgMS4wICAgIDAuMSAgICAgLT4gIDEuMA0KLWRkbWF4NDA1IG1heCAgMC4xICAgIDAuMTAgICAgLT4gIDAuMQ0KLWRkbWF4NDA2IG1heCAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTANCi1kZG1heDQwNyBtYXggIDAuMTAgICAwICAgICAgIC0+ICAwLjEwDQotZGRtYXg0MDggbWF4ICAwICAgICAgMC4wICAgICAtPiAgMA0KLWRkbWF4NDA5IG1heCAgMC4wICAgLTAgICAgICAgLT4gIDAuMA0KLWRkbWF4NDEwIG1heCAgMC4wICAgLTAuMCAgICAgLT4gIDAuMA0KLWRkbWF4NDExIG1heCAgMC4wMCAgLTAuMCAgICAgLT4gIDAuMDANCi1kZG1heDQxMiBtYXggIDAuMCAgIC0wLjAwICAgIC0+ICAwLjANCi1kZG1heDQxMyBtYXggIDAgICAgIC0wLjAgICAgIC0+ICAwDQotZGRtYXg0MTQgbWF4ICAwICAgICAtMCAgICAgICAtPiAgMA0KLWRkbWF4NDE1IG1heCAtMC4wICAgLTAgICAgICAgLT4gLTAuMA0KLWRkbWF4NDE2IG1heCAtMCAgICAgLTAuMTAwICAgLT4gLTANCi1kZG1heDQxNyBtYXggLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwMA0KLWRkbWF4NDE4IG1heCAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTANCi1kZG1heDQxOSBtYXggLTAuMSAgIC0xLjAgICAgIC0+IC0wLjENCi1kZG1heDQyMCBtYXggLTEuMCAgIC0xICAgICAgIC0+IC0xLjANCi1kZG1heDQyMSBtYXggLTEgICAgIC0xLjEgICAgIC0+IC0xDQotZGRtYXg0MjMgbWF4IC0xLjEgICAtSW5mICAgICAtPiAtMS4xDQotLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkDQotZGRtYXg0MzEgbWF4ICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkNCi1kZG1heDQzMiBtYXggIDEgICAgICAxLjEgICAgIC0+ICAxLjENCi1kZG1heDQzMyBtYXggIDEuMCAgICAxICAgICAgIC0+ICAxDQotZGRtYXg0MzQgbWF4ICAwLjEgICAgMS4wICAgICAtPiAgMS4wDQotZGRtYXg0MzUgbWF4ICAwLjEwICAgMC4xICAgICAtPiAgMC4xDQotZGRtYXg0MzYgbWF4ICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMA0KLWRkbWF4NDM3IG1heCAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTANCi1kZG1heDQzOCBtYXggIDAuMCAgICAwICAgICAgIC0+ICAwDQotZGRtYXg0MzkgbWF4IC0wICAgICAgMC4wICAgICAtPiAgMC4wDQotZGRtYXg0NDAgbWF4IC0wLjAgICAgMC4wICAgICAtPiAgMC4wDQotZGRtYXg0NDEgbWF4IC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMA0KLWRkbWF4NDQyIG1heCAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMA0KLWRkbWF4NDQzIG1heCAtMC4wICAgIDAgICAgICAgLT4gIDANCi1kZG1heDQ0NCBtYXggLTAgICAgICAwICAgICAgIC0+ICAwDQotZGRtYXg0NDUgbWF4IC0wICAgICAtMC4wICAgICAtPiAtMC4wDQotZGRtYXg0NDYgbWF4IC0wLjEwMCAtMCAgICAgICAtPiAtMA0KLWRkbWF4NDQ3IG1heCAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwDQotZGRtYXg0NDggbWF4IC0wLjEgICAtMC4xMCAgICAtPiAtMC4xMA0KLWRkbWF4NDQ5IG1heCAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQ0KLWRkbWF4NDUwIG1heCAtMSAgICAgLTEuMCAgICAgLT4gLTEuMA0KLWRkbWF4NDUxIG1heCAtMS4xICAgLTEgICAgICAgLT4gLTENCi1kZG1heDQ1MyBtYXggLUluZiAgIC0xLjEgICAgIC0+IC0xLjENCi0tLSBsYXJnaWVzDQotZGRtYXg0NjAgbWF4ICAxMDAwICAgMUUrMyAgICAtPiAgMUUrMw0KLWRkbWF4NDYxIG1heCAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMNCi1kZG1heDQ2MiBtYXggIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwDQotZGRtYXg0NjMgbWF4ICAxRSszICAtMTAwMCAgICAtPiAgMUUrMw0KLWRkbWF4NDY0IG1heCAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMNCi1kZG1heDQ2NSBtYXggLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQotZGRtYXg0NjYgbWF4IC0xMDAwICAtMUUrMyAgICAtPiAtMTAwMA0KLWRkbWF4NDY3IG1heCAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDANCi0NCi0tLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4NCi1kZG1heDQ3MSBtYXggICAgICAxLjAgICAgICAgMC4xICAtPiAxLjANCi1kZG1heDQ3MiBtYXggICAgICAwLjEgICAgICAgMS4wICAtPiAxLjANCi1kZG1heDQ3MyBtYXggICAgIDEwLjAgICAgICAgMC4xICAtPiAxMC4wDQotZGRtYXg0NzQgbWF4ICAgICAgMC4xICAgICAgMTAuMCAgLT4gMTAuMA0KLWRkbWF4NDc1IG1heCAgICAgIDEwMCAgICAgICAxLjAgIC0+IDEwMA0KLWRkbWF4NDc2IG1heCAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEwMA0KLWRkbWF4NDc3IG1heCAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwMDANCi1kZG1heDQ3OCBtYXggICAgIDEwLjAgICAgICAxMDAwICAtPiAxMDAwDQotZGRtYXg0NzkgbWF4ICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwMDANCi1kZG1heDQ4MCBtYXggICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAwMA0KLWRkbWF4NDgxIG1heCAgIDEwMDAwMCAgICAxMDAwLjAgIC0+IDEwMDAwMA0KLWRkbWF4NDgyIG1heCAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAwMA0KLWRkbWF4NDgzIG1heCAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwMDANCi1kZG1heDQ4NCBtYXggIDEwMDAwLjAgICAxMDAwMDAwICAtPiAxMDAwMDAwDQotDQotLS0gc3Vibm9ybWFscw0KLWRkbWF4NTEwIG1heCAgMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMS4wMEUtMzgzDQotZGRtYXg1MTEgbWF4ICAwLjFFLTM4MyAgICAgICAgMCAgLT4gICAxRS0zODQgICAgU3Vibm9ybWFsDQotZGRtYXg1MTIgbWF4ICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAxLjBFLTM4NCAgU3Vibm9ybWFsDQotZGRtYXg1MTMgbWF4ICAwLjEwMEUtMzgzICAgICAgMCAgLT4gICAxLjAwRS0zODQgU3Vibm9ybWFsDQotZGRtYXg1MTQgbWF4ICAwLjAxRS0zODMgICAgICAgMCAgLT4gICAxRS0zODUgICAgU3Vibm9ybWFsDQotZGRtYXg1MTUgbWF4ICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICA5Ljk5RS0zODQgU3Vibm9ybWFsDQotZGRtYXg1MTYgbWF4ICAwLjA5OUUtMzgzICAgICAgMCAgLT4gICA5LjlFLTM4NSAgU3Vibm9ybWFsDQotZGRtYXg1MTcgbWF4ICAwLjAwOUUtMzgzICAgICAgMCAgLT4gICA5RS0zODYgICAgU3Vibm9ybWFsDQotZGRtYXg1MTggbWF4ICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAxRS0zODYgICAgU3Vibm9ybWFsDQotZGRtYXg1MTkgbWF4ICAwLjAwMDlFLTM4MyAgICAgMCAgLT4gICA5RS0zODcgICAgU3Vibm9ybWFsDQotZGRtYXg1MjAgbWF4ICAwLjAwMDFFLTM4MyAgICAgMCAgLT4gICAxRS0zODcgICAgU3Vibm9ybWFsDQotDQotZGRtYXg1MzAgbWF4IC0xLjAwRS0zODMgICAgICAgMCAgLT4gICAwDQotZGRtYXg1MzEgbWF4IC0wLjFFLTM4MyAgICAgICAgMCAgLT4gICAwDQotZGRtYXg1MzIgbWF4IC0wLjEwRS0zODMgICAgICAgMCAgLT4gICAwDQotZGRtYXg1MzMgbWF4IC0wLjEwMEUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtYXg1MzQgbWF4IC0wLjAxRS0zODMgICAgICAgMCAgLT4gICAwDQotZGRtYXg1MzUgbWF4IC0wLjk5OUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtYXg1MzYgbWF4IC0wLjA5OUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtYXg1MzcgbWF4IC0wLjAwOUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtYXg1MzggbWF4IC0wLjAwMUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtYXg1MzkgbWF4IC0wLjAwMDlFLTM4MyAgICAgMCAgLT4gICAwDQotZGRtYXg1NDAgbWF4IC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gICAwDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkbWF4OTAwIG1heCAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXg5MDEgbWF4ICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTWF4LmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1heG51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZG1heDAwMSBtYXggIC0yICAtMiAgLT4gLTIKK2RkbWF4MDAyIG1heCAgLTIgIC0xICAtPiAtMQorZGRtYXgwMDMgbWF4ICAtMiAgIDAgIC0+ICAwCitkZG1heDAwNCBtYXggIC0yICAgMSAgLT4gIDEKK2RkbWF4MDA1IG1heCAgLTIgICAyICAtPiAgMgorZGRtYXgwMDYgbWF4ICAtMSAgLTIgIC0+IC0xCitkZG1heDAwNyBtYXggIC0xICAtMSAgLT4gLTEKK2RkbWF4MDA4IG1heCAgLTEgICAwICAtPiAgMAorZGRtYXgwMDkgbWF4ICAtMSAgIDEgIC0+ICAxCitkZG1heDAxMCBtYXggIC0xICAgMiAgLT4gIDIKK2RkbWF4MDExIG1heCAgIDAgIC0yICAtPiAgMAorZGRtYXgwMTIgbWF4ICAgMCAgLTEgIC0+ICAwCitkZG1heDAxMyBtYXggICAwICAgMCAgLT4gIDAKK2RkbWF4MDE0IG1heCAgIDAgICAxICAtPiAgMQorZGRtYXgwMTUgbWF4ICAgMCAgIDIgIC0+ICAyCitkZG1heDAxNiBtYXggICAxICAtMiAgLT4gIDEKK2RkbWF4MDE3IG1heCAgIDEgIC0xICAtPiAgMQorZGRtYXgwMTggbWF4ICAgMSAgIDAgIC0+ICAxCitkZG1heDAxOSBtYXggICAxICAgMSAgLT4gIDEKK2RkbWF4MDIwIG1heCAgIDEgICAyICAtPiAgMgorZGRtYXgwMjEgbWF4ICAgMiAgLTIgIC0+ICAyCitkZG1heDAyMiBtYXggICAyICAtMSAgLT4gIDIKK2RkbWF4MDIzIG1heCAgIDIgICAwICAtPiAgMgorZGRtYXgwMjUgbWF4ICAgMiAgIDEgIC0+ICAyCitkZG1heDAyNiBtYXggICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkbWF4MDMwIG1heCAgIDAgICAgIDAgICAtPiAgMAorZGRtYXgwMzEgbWF4ICAgMCAgICAtMCAgIC0+ICAwCitkZG1heDAzMiBtYXggICAwICAgIC0wLjAgLT4gIDAKK2RkbWF4MDMzIG1heCAgIDAgICAgIDAuMCAtPiAgMAorZGRtYXgwMzQgbWF4ICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuCitkZG1heDAzNSBtYXggIC0wICAgIC0wICAgLT4gLTAKK2RkbWF4MDM2IG1heCAgLTAgICAgLTAuMCAtPiAtMC4wCitkZG1heDAzNyBtYXggIC0wICAgICAwLjAgLT4gIDAuMAorZGRtYXgwMzggbWF4ICAgMC4wICAgMCAgIC0+ICAwCitkZG1heDAzOSBtYXggICAwLjAgIC0wICAgLT4gIDAuMAorZGRtYXgwNDAgbWF4ICAgMC4wICAtMC4wIC0+ICAwLjAKK2RkbWF4MDQxIG1heCAgIDAuMCAgIDAuMCAtPiAgMC4wCitkZG1heDA0MiBtYXggIC0wLjAgICAwICAgLT4gIDAKK2RkbWF4MDQzIG1heCAgLTAuMCAgLTAgICAtPiAtMC4wCitkZG1heDA0NCBtYXggIC0wLjAgIC0wLjAgLT4gLTAuMAorZGRtYXgwNDUgbWF4ICAtMC4wICAgMC4wIC0+ICAwLjAKKworZGRtYXgwNTAgbWF4ICAtMEUxICAgMEUxIC0+ICAwRSsxCitkZG1heDA1MSBtYXggIC0wRTIgICAwRTIgLT4gIDBFKzIKK2RkbWF4MDUyIG1heCAgLTBFMiAgIDBFMSAtPiAgMEUrMQorZGRtYXgwNTMgbWF4ICAtMEUxICAgMEUyIC0+ICAwRSsyCitkZG1heDA1NCBtYXggICAwRTEgIC0wRTEgLT4gIDBFKzEKK2RkbWF4MDU1IG1heCAgIDBFMiAgLTBFMiAtPiAgMEUrMgorZGRtYXgwNTYgbWF4ICAgMEUyICAtMEUxIC0+ICAwRSsyCitkZG1heDA1NyBtYXggICAwRTEgIC0wRTIgLT4gIDBFKzEKKworZGRtYXgwNTggbWF4ICAgMEUxICAgMEUxIC0+ICAwRSsxCitkZG1heDA1OSBtYXggICAwRTIgICAwRTIgLT4gIDBFKzIKK2RkbWF4MDYwIG1heCAgIDBFMiAgIDBFMSAtPiAgMEUrMgorZGRtYXgwNjEgbWF4ICAgMEUxICAgMEUyIC0+ICAwRSsyCitkZG1heDA2MiBtYXggIC0wRTEgIC0wRTEgLT4gLTBFKzEKK2RkbWF4MDYzIG1heCAgLTBFMiAgLTBFMiAtPiAtMEUrMgorZGRtYXgwNjQgbWF4ICAtMEUyICAtMEUxIC0+IC0wRSsxCitkZG1heDA2NSBtYXggIC0wRTEgIC0wRTIgLT4gLTBFKzEKKworLS0gU3BlY2lhbHMKK2RkbWF4MDkwIG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkZG1heDA5MSBtYXggIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTIgbWF4ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RkbWF4MDkzIG1heCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkZG1heDA5NCBtYXggIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTUgbWF4ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkbWF4MDk2IG1heCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZG1heDA5NyBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTggbWF4IC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MDk5IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDEwMCBtYXggLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgxMDEgbWF4IC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MTAyIG1heCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDEwMyBtYXggIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgxMDQgbWF4ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MTA1IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbWF4MTIwIG1heCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1heDEyMSBtYXggLUluZiAgLTEwMDAgIC0+IC0xMDAwCitkZG1heDEyMiBtYXggLUluZiAgLTEgICAgIC0+IC0xCitkZG1heDEyMyBtYXggLUluZiAgLTAgICAgIC0+IC0wCitkZG1heDEyNCBtYXggLUluZiAgIDAgICAgIC0+ICAwCitkZG1heDEyNSBtYXggLUluZiAgIDEgICAgIC0+ICAxCitkZG1heDEyNiBtYXggLUluZiAgIDEwMDAgIC0+ICAxMDAwCitkZG1heDEyNyBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgxMjggbWF4IC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5CitkZG1heDEyOSBtYXggLTEwMDAgLUluZiAgIC0+ICAtMTAwMAorZGRtYXgxMzAgbWF4IC0xICAgIC1JbmYgICAtPiAgLTEKK2RkbWF4MTMxIG1heCAtMCAgICAtSW5mICAgLT4gIC0wCitkZG1heDEzMiBtYXggIDAgICAgLUluZiAgIC0+ICAwCitkZG1heDEzMyBtYXggIDEgICAgLUluZiAgIC0+ICAxCitkZG1heDEzNCBtYXggIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkZG1heDEzNSBtYXggIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RkbWF4MTQxIG1heCAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5CitkZG1heDE0MiBtYXggIE5hTiAtMTAwMCAgIC0+IC0xMDAwCitkZG1heDE0MyBtYXggIE5hTiAtMSAgICAgIC0+IC0xCitkZG1heDE0NCBtYXggIE5hTiAtMCAgICAgIC0+IC0wCitkZG1heDE0NSBtYXggIE5hTiAgMCAgICAgIC0+ICAwCitkZG1heDE0NiBtYXggIE5hTiAgMSAgICAgIC0+ICAxCitkZG1heDE0NyBtYXggIE5hTiAgMTAwMCAgIC0+ICAxMDAwCitkZG1heDE0OCBtYXggIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorZGRtYXgxNDkgbWF4ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZG1heDE1MCBtYXggLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorZGRtYXgxNTEgbWF4IC0xMDAwIE5hTiAgICAtPiAtMTAwMAorZGRtYXgxNTIgbWF4IC0xICAgIE5hTiAgICAtPiAtMQorZGRtYXgxNTMgbWF4IC0wICAgIE5hTiAgICAtPiAtMAorZGRtYXgxNTQgbWF4ICAwICAgIE5hTiAgICAtPiAgMAorZGRtYXgxNTUgbWF4ICAxICAgIE5hTiAgICAtPiAgMQorZGRtYXgxNTYgbWF4ICAxMDAwIE5hTiAgICAtPiAgMTAwMAorZGRtYXgxNTcgbWF4ICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworZGRtYXgxNjEgbWF4ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjIgbWF4ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjMgbWF4ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjQgbWF4ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjUgbWF4ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjYgbWF4ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjcgbWF4ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjggbWF4ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjkgbWF4ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzAgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzEgbWF4IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzIgbWF4IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzMgbWF4IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzQgbWF4IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzUgbWF4ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzYgbWF4ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzcgbWF4ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzggbWF4ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzkgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZG1heDE4MSBtYXggIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWF4MTgyIG1heCAgTmFOOCAgICAgOSAgIC0+ICA5CitkZG1heDE4MyBtYXggLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRtYXgxODQgbWF4IC1OYU4xICAgTmFOMTEgLT4gLU5hTjEKK2RkbWF4MTg1IG1heCAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yCitkZG1heDE4NiBtYXggLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMKK2RkbWF4MTg3IG1heCAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNAorCitkZG1heDE4OCBtYXggLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkKK2RkbWF4MTg5IG1heCAtOSAgICAgLU5hTjMgIC0+IC05CitkZG1heDE5MCBtYXggIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkKKworZGRtYXgxOTEgbWF4ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTkyIG1heCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5MyBtYXggLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxOTQgbWF4ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTk1IG1heCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5NiBtYXggLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxOTcgbWF4ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTk4IG1heCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5OSBtYXggIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvbGQgcm91bmRpbmcgY2hlY2tzCitkZG1heDIyMSBtYXggMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDAKK2RkbWF4MjIyIG1heCAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAorZGRtYXgyMjMgbWF4IDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDAKK2RkbWF4MjI0IG1heCAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCitkZG1heDIyNSBtYXggMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MAorZGRtYXgyMjYgbWF4IDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK2RkbWF4MjI3IG1heCAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxCitkZG1heDIyOCBtYXggMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQorZGRtYXgyMjkgbWF4IDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxCitkZG1heDIzMCBtYXggMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK2RkbWF4MjMxIG1heCAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2CitkZG1heDIzMiBtYXggMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorZGRtYXgyMzMgbWF4IC0xMjM0NTY3ODkxICAxIC0+IDEKK2RkbWF4MjM0IG1heCAxIC0xMjM0NTY3ODkxICAtPiAxCitkZG1heDIzNSBtYXggLTEyMzQ1Njc4OTAxIDEgLT4gMQorZGRtYXgyMzYgbWF4IDEgLTEyMzQ1Njc4OTAxIC0+IDEKK2RkbWF4MjM3IG1heCAtMTIzNDU2Nzg5NiAgMSAtPiAxCitkZG1heDIzOCBtYXggMSAtMTIzNDU2Nzg5NiAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCitkZG1heDI4MCBtYXggJzMnICAgJzInICAtPiAgJzMnCitkZG1heDI4MSBtYXggJy0xMCcgJzMnICAtPiAgJzMnCitkZG1heDI4MiBtYXggJzEuMCcgJzEnICAtPiAgJzEnCitkZG1heDI4MyBtYXggJzEnICcxLjAnICAtPiAgJzEnCitkZG1heDI4NCBtYXggJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZGRtYXg0MDEgbWF4ICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKK2RkbWF4NDAyIG1heCAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorZGRtYXg0MDMgbWF4ICAxICAgICAgMS4wICAgICAtPiAgMQorZGRtYXg0MDQgbWF4ICAxLjAgICAgMC4xICAgICAtPiAgMS4wCitkZG1heDQwNSBtYXggIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK2RkbWF4NDA2IG1heCAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAKK2RkbWF4NDA3IG1heCAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKK2RkbWF4NDA4IG1heCAgMCAgICAgIDAuMCAgICAgLT4gIDAKK2RkbWF4NDA5IG1heCAgMC4wICAgLTAgICAgICAgLT4gIDAuMAorZGRtYXg0MTAgbWF4ICAwLjAgICAtMC4wICAgICAtPiAgMC4wCitkZG1heDQxMSBtYXggIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCitkZG1heDQxMiBtYXggIDAuMCAgIC0wLjAwICAgIC0+ICAwLjAKK2RkbWF4NDEzIG1heCAgMCAgICAgLTAuMCAgICAgLT4gIDAKK2RkbWF4NDE0IG1heCAgMCAgICAgLTAgICAgICAgLT4gIDAKK2RkbWF4NDE1IG1heCAtMC4wICAgLTAgICAgICAgLT4gLTAuMAorZGRtYXg0MTYgbWF4IC0wICAgICAtMC4xMDAgICAtPiAtMAorZGRtYXg0MTcgbWF4IC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKK2RkbWF4NDE4IG1heCAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKK2RkbWF4NDE5IG1heCAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQorZGRtYXg0MjAgbWF4IC0xLjAgICAtMSAgICAgICAtPiAtMS4wCitkZG1heDQyMSBtYXggLTEgICAgIC0xLjEgICAgIC0+IC0xCitkZG1heDQyMyBtYXggLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZGRtYXg0MzEgbWF4ICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkKK2RkbWF4NDMyIG1heCAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQorZGRtYXg0MzMgbWF4ICAxLjAgICAgMSAgICAgICAtPiAgMQorZGRtYXg0MzQgbWF4ICAwLjEgICAgMS4wICAgICAtPiAgMS4wCitkZG1heDQzNSBtYXggIDAuMTAgICAwLjEgICAgIC0+ICAwLjEKK2RkbWF4NDM2IG1heCAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAKK2RkbWF4NDM3IG1heCAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTAKK2RkbWF4NDM4IG1heCAgMC4wICAgIDAgICAgICAgLT4gIDAKK2RkbWF4NDM5IG1heCAtMCAgICAgIDAuMCAgICAgLT4gIDAuMAorZGRtYXg0NDAgbWF4IC0wLjAgICAgMC4wICAgICAtPiAgMC4wCitkZG1heDQ0MSBtYXggLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwCitkZG1heDQ0MiBtYXggLTAuMDAgICAwLjAgICAgIC0+ICAwLjAKK2RkbWF4NDQzIG1heCAtMC4wICAgIDAgICAgICAgLT4gIDAKK2RkbWF4NDQ0IG1heCAtMCAgICAgIDAgICAgICAgLT4gIDAKK2RkbWF4NDQ1IG1heCAtMCAgICAgLTAuMCAgICAgLT4gLTAuMAorZGRtYXg0NDYgbWF4IC0wLjEwMCAtMCAgICAgICAtPiAtMAorZGRtYXg0NDcgbWF4IC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDAKK2RkbWF4NDQ4IG1heCAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKK2RkbWF4NDQ5IG1heCAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQorZGRtYXg0NTAgbWF4IC0xICAgICAtMS4wICAgICAtPiAtMS4wCitkZG1heDQ1MSBtYXggLTEuMSAgIC0xICAgICAgIC0+IC0xCitkZG1heDQ1MyBtYXggLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKKy0tIGxhcmdpZXMKK2RkbWF4NDYwIG1heCAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RkbWF4NDYxIG1heCAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMKK2RkbWF4NDYyIG1heCAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKK2RkbWF4NDYzIG1heCAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKK2RkbWF4NDY0IG1heCAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RkbWF4NDY1IG1heCAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RkbWF4NDY2IG1heCAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKK2RkbWF4NDY3IG1heCAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitkZG1heDQ3MSBtYXggICAgICAxLjAgICAgICAgMC4xICAtPiAxLjAKK2RkbWF4NDcyIG1heCAgICAgIDAuMSAgICAgICAxLjAgIC0+IDEuMAorZGRtYXg0NzMgbWF4ICAgICAxMC4wICAgICAgIDAuMSAgLT4gMTAuMAorZGRtYXg0NzQgbWF4ICAgICAgMC4xICAgICAgMTAuMCAgLT4gMTAuMAorZGRtYXg0NzUgbWF4ICAgICAgMTAwICAgICAgIDEuMCAgLT4gMTAwCitkZG1heDQ3NiBtYXggICAgICAxLjAgICAgICAgMTAwICAtPiAxMDAKK2RkbWF4NDc3IG1heCAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwMDAKK2RkbWF4NDc4IG1heCAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwMDAKK2RkbWF4NDc5IG1heCAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMDAwCitkZG1heDQ4MCBtYXggICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAwMAorZGRtYXg0ODEgbWF4ICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMDAwCitkZG1heDQ4MiBtYXggICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwMDAKK2RkbWF4NDgzIG1heCAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwMDAKK2RkbWF4NDg0IG1heCAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwMDAKKworLS0gc3Vibm9ybWFscworZGRtYXg1MTAgbWF4ICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAxLjAwRS0zODMKK2RkbWF4NTExIG1heCAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMUUtMzg0ICAgIFN1Ym5vcm1hbAorZGRtYXg1MTIgbWF4ICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAxLjBFLTM4NCAgU3Vibm9ybWFsCitkZG1heDUxMyBtYXggIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDEuMDBFLTM4NCBTdWJub3JtYWwKK2RkbWF4NTE0IG1heCAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMUUtMzg1ICAgIFN1Ym5vcm1hbAorZGRtYXg1MTUgbWF4ICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICA5Ljk5RS0zODQgU3Vibm9ybWFsCitkZG1heDUxNiBtYXggIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDkuOUUtMzg1ICBTdWJub3JtYWwKK2RkbWF4NTE3IG1heCAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgOUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRtYXg1MTggbWF4ICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAxRS0zODYgICAgU3Vibm9ybWFsCitkZG1heDUxOSBtYXggIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDlFLTM4NyAgICBTdWJub3JtYWwKK2RkbWF4NTIwIG1heCAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMUUtMzg3ICAgIFN1Ym5vcm1hbAorCitkZG1heDUzMCBtYXggLTEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbWF4NTMxIG1heCAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzIgbWF4IC0wLjEwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1heDUzMyBtYXggLTAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKK2RkbWF4NTM0IG1heCAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzUgbWF4IC0wLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1heDUzNiBtYXggLTAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbWF4NTM3IG1heCAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzggbWF4IC0wLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1heDUzOSBtYXggLTAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKK2RkbWF4NTQwIG1heCAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAorCistLSBOdWxsIHRlc3RzCitkZG1heDkwMCBtYXggMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXg5MDEgbWF4ICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heE1hZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4TWFnLmRlY1Rlc3QKaW5kZXggZWMyYjgzMC4uMTljM2U5MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4TWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4TWFnLmRlY1Rlc3QKQEAgLTEsMzA0ICsxLDMwNCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRNYXhNYWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgbWF4bnVtbWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbw0KLS0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZw0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRkbXhnMDAxIG1heG1hZyAgLTIgIC0yICAtPiAtMg0KLWRkbXhnMDAyIG1heG1hZyAgLTIgIC0xICAtPiAtMg0KLWRkbXhnMDAzIG1heG1hZyAgLTIgICAwICAtPiAtMg0KLWRkbXhnMDA0IG1heG1hZyAgLTIgICAxICAtPiAtMg0KLWRkbXhnMDA1IG1heG1hZyAgLTIgICAyICAtPiAgMg0KLWRkbXhnMDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMg0KLWRkbXhnMDA3IG1heG1hZyAgLTEgIC0xICAtPiAtMQ0KLWRkbXhnMDA4IG1heG1hZyAgLTEgICAwICAtPiAtMQ0KLWRkbXhnMDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQ0KLWRkbXhnMDEwIG1heG1hZyAgLTEgICAyICAtPiAgMg0KLWRkbXhnMDExIG1heG1hZyAgIDAgIC0yICAtPiAtMg0KLWRkbXhnMDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQ0KLWRkbXhnMDEzIG1heG1hZyAgIDAgICAwICAtPiAgMA0KLWRkbXhnMDE0IG1heG1hZyAgIDAgICAxICAtPiAgMQ0KLWRkbXhnMDE1IG1heG1hZyAgIDAgICAyICAtPiAgMg0KLWRkbXhnMDE2IG1heG1hZyAgIDEgIC0yICAtPiAtMg0KLWRkbXhnMDE3IG1heG1hZyAgIDEgIC0xICAtPiAgMQ0KLWRkbXhnMDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQ0KLWRkbXhnMDE5IG1heG1hZyAgIDEgICAxICAtPiAgMQ0KLWRkbXhnMDIwIG1heG1hZyAgIDEgICAyICAtPiAgMg0KLWRkbXhnMDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMg0KLWRkbXhnMDIyIG1heG1hZyAgIDIgIC0xICAtPiAgMg0KLWRkbXhnMDIzIG1heG1hZyAgIDIgICAwICAtPiAgMg0KLWRkbXhnMDI1IG1heG1hZyAgIDIgICAxICAtPiAgMg0KLWRkbXhnMDI2IG1heG1hZyAgIDIgICAyICAtPiAgMg0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZGRteGcwMzAgbWF4bWFnICAgMCAgICAgMCAgIC0+ICAwDQotZGRteGcwMzEgbWF4bWFnICAgMCAgICAtMCAgIC0+ICAwDQotZGRteGcwMzIgbWF4bWFnICAgMCAgICAtMC4wIC0+ICAwDQotZGRteGcwMzMgbWF4bWFnICAgMCAgICAgMC4wIC0+ICAwDQotZGRteGcwMzQgbWF4bWFnICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuDQotZGRteGcwMzUgbWF4bWFnICAtMCAgICAtMCAgIC0+IC0wDQotZGRteGcwMzYgbWF4bWFnICAtMCAgICAtMC4wIC0+IC0wLjANCi1kZG14ZzAzNyBtYXhtYWcgIC0wICAgICAwLjAgLT4gIDAuMA0KLWRkbXhnMDM4IG1heG1hZyAgIDAuMCAgIDAgICAtPiAgMA0KLWRkbXhnMDM5IG1heG1hZyAgIDAuMCAgLTAgICAtPiAgMC4wDQotZGRteGcwNDAgbWF4bWFnICAgMC4wICAtMC4wIC0+ICAwLjANCi1kZG14ZzA0MSBtYXhtYWcgICAwLjAgICAwLjAgLT4gIDAuMA0KLWRkbXhnMDQyIG1heG1hZyAgLTAuMCAgIDAgICAtPiAgMA0KLWRkbXhnMDQzIG1heG1hZyAgLTAuMCAgLTAgICAtPiAtMC4wDQotZGRteGcwNDQgbWF4bWFnICAtMC4wICAtMC4wIC0+IC0wLjANCi1kZG14ZzA0NSBtYXhtYWcgIC0wLjAgICAwLjAgLT4gIDAuMA0KLQ0KLWRkbXhnMDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQ0KLWRkbXhnMDUxIG1heG1hZyAgLTBFMiAgIDBFMiAtPiAgMEUrMg0KLWRkbXhnMDUyIG1heG1hZyAgLTBFMiAgIDBFMSAtPiAgMEUrMQ0KLWRkbXhnMDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMg0KLWRkbXhnMDU0IG1heG1hZyAgIDBFMSAgLTBFMSAtPiAgMEUrMQ0KLWRkbXhnMDU1IG1heG1hZyAgIDBFMiAgLTBFMiAtPiAgMEUrMg0KLWRkbXhnMDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMg0KLWRkbXhnMDU3IG1heG1hZyAgIDBFMSAgLTBFMiAtPiAgMEUrMQ0KLQ0KLWRkbXhnMDU4IG1heG1hZyAgIDBFMSAgIDBFMSAtPiAgMEUrMQ0KLWRkbXhnMDU5IG1heG1hZyAgIDBFMiAgIDBFMiAtPiAgMEUrMg0KLWRkbXhnMDYwIG1heG1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMg0KLWRkbXhnMDYxIG1heG1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMg0KLWRkbXhnMDYyIG1heG1hZyAgLTBFMSAgLTBFMSAtPiAtMEUrMQ0KLWRkbXhnMDYzIG1heG1hZyAgLTBFMiAgLTBFMiAtPiAtMEUrMg0KLWRkbXhnMDY0IG1heG1hZyAgLTBFMiAgLTBFMSAtPiAtMEUrMQ0KLWRkbXhnMDY1IG1heG1hZyAgLTBFMSAgLTBFMiAtPiAtMEUrMQ0KLQ0KLS0tIFNwZWNpYWxzDQotZGRteGcwOTAgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZG14ZzA5MSBtYXhtYWcgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMDkyIG1heG1hZyAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZGRteGcwOTMgbWF4bWFnICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCi1kZG14ZzA5NCBtYXhtYWcgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMDk1IG1heG1hZyAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZGRteGcwOTYgbWF4bWFnICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1kZG14ZzA5NyBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMDk4IG1heG1hZyAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZGRteGcwOTkgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG14ZzEwMCBtYXhtYWcgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMTAxIG1heG1hZyAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRteGcxMDIgbWF4bWFnICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG14ZzEwMyBtYXhtYWcgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMTA0IG1heG1hZyAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZGRteGcxMDUgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kZG14ZzEyMCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTIxIG1heG1hZyAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZGRteGcxMjIgbWF4bWFnIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kZG14ZzEyMyBtYXhtYWcgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTI0IG1heG1hZyAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZGRteGcxMjUgbWF4bWFnIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kZG14ZzEyNiBtYXhtYWcgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTI3IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRteGcxMjggbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5DQotZGRteGcxMjkgbWF4bWFnIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG14ZzEzMCBtYXhtYWcgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTMxIG1heG1hZyAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRteGcxMzIgbWF4bWFnICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG14ZzEzMyBtYXhtYWcgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTM0IG1heG1hZyAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZGRteGcxMzUgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi0NCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCi1kZG14ZzE0MSBtYXhtYWcgIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTQyIG1heG1hZyAgTmFOIC0xMDAwICAgLT4gLTEwMDANCi1kZG14ZzE0MyBtYXhtYWcgIE5hTiAtMSAgICAgIC0+IC0xDQotZGRteGcxNDQgbWF4bWFnICBOYU4gLTAgICAgICAtPiAtMA0KLWRkbXhnMTQ1IG1heG1hZyAgTmFOICAwICAgICAgLT4gIDANCi1kZG14ZzE0NiBtYXhtYWcgIE5hTiAgMSAgICAgIC0+ICAxDQotZGRteGcxNDcgbWF4bWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KLWRkbXhnMTQ4IG1heG1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5DQotZGRteGcxNDkgbWF4bWFnICBOYU4gIE5hTiAgICAtPiAgTmFODQotZGRteGcxNTAgbWF4bWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCi1kZG14ZzE1MSBtYXhtYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwDQotZGRteGcxNTIgbWF4bWFnIC0xICAgIE5hTiAgICAtPiAtMQ0KLWRkbXhnMTUzIG1heG1hZyAtMCAgICBOYU4gICAgLT4gLTANCi1kZG14ZzE1NCBtYXhtYWcgIDAgICAgTmFOICAgIC0+ICAwDQotZGRteGcxNTUgbWF4bWFnICAxICAgIE5hTiAgICAtPiAgMQ0KLWRkbXhnMTU2IG1heG1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDANCi1kZG14ZzE1NyBtYXhtYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbXhnMTYxIG1heG1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE2MiBtYXhtYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNjMgbWF4bWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTY0IG1heG1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE2NSBtYXhtYWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNjYgbWF4bWFnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTY3IG1heG1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE2OCBtYXhtYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNjkgbWF4bWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTcwIG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE3MSBtYXhtYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNzIgbWF4bWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTczIG1heG1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE3NCBtYXhtYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNzUgbWF4bWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTc2IG1heG1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE3NyBtYXhtYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNzggbWF4bWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTc5IG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRteGcxODEgbWF4bWFnICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRteGcxODIgbWF4bWFnICBOYU44ICAgICA5ICAgLT4gIDkNCi1kZG14ZzE4MyBtYXhtYWcgLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kZG14ZzE4NCBtYXhtYWcgLU5hTjEgICBOYU4xMSAtPiAtTmFOMQ0KLWRkbXhnMTg1IG1heG1hZyAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yDQotZGRteGcxODYgbWF4bWFnIC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzDQotZGRteGcxODcgbWF4bWFnICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0DQotDQotZGRteGcxODggbWF4bWFnIC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5DQotZGRteGcxODkgbWF4bWFnIC05ICAgICAtTmFOMyAgLT4gLTkNCi1kZG14ZzE5MCBtYXhtYWcgIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkNCi0NCi1kZG14ZzE5MSBtYXhtYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTkyIG1heG1hZyAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxOTMgbWF4bWFnIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE5NCBtYXhtYWcgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTk1IG1heG1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxOTYgbWF4bWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE5NyBtYXhtYWcgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTk4IG1heG1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxOTkgbWF4bWFnICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvbGQgcm91bmRpbmcgY2hlY2tzDQotZGRteGcyMjEgbWF4bWFnIDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwDQotZGRteGcyMjIgbWF4bWFnIDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwDQotZGRteGcyMjMgbWF4bWFnIDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDANCi1kZG14ZzIyNCBtYXhtYWcgMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMA0KLWRkbXhnMjI1IG1heG1hZyAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwDQotZGRteGcyMjYgbWF4bWFnIDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTANCi1kZG14ZzIyNyBtYXhtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQ0KLWRkbXhnMjI4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxDQotZGRteGcyMjkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxDQotZGRteGcyMzAgbWF4bWFnIDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxDQotZGRteGcyMzEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYNCi1kZG14ZzIzMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5Ng0KLWRkbXhnMjMzIG1heG1hZyAtMTIzNDU2Nzg5MSAgMSAtPiAtMTIzNDU2Nzg5MQ0KLWRkbXhnMjM0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMTIzNDU2Nzg5MQ0KLWRkbXhnMjM1IG1heG1hZyAtMTIzNDU2Nzg5MDEgMSAtPiAtMTIzNDU2Nzg5MDENCi1kZG14ZzIzNiBtYXhtYWcgMSAtMTIzNDU2Nzg5MDEgLT4gLTEyMzQ1Njc4OTAxDQotZGRteGcyMzcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xMjM0NTY3ODk2DQotZGRteGcyMzggbWF4bWFnIDEgLTEyMzQ1Njc4OTYgIC0+IC0xMjM0NTY3ODk2DQotDQotLS0gZnJvbSBleGFtcGxlcw0KLWRkbXhnMjgwIG1heG1hZyAnMycgICAnMicgIC0+ICAnMycNCi1kZG14ZzI4MSBtYXhtYWcgJy0xMCcgJzMnICAtPiAgJy0xMCcNCi1kZG14ZzI4MiBtYXhtYWcgJzEuMCcgJzEnICAtPiAgJzEnDQotZGRteGcyODMgbWF4bWFnICcxJyAnMS4wJyAgLT4gICcxJw0KLWRkbXhnMjg0IG1heG1hZyAnNycgJ05hTicgIC0+ICAnNycNCi0NCi0tLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQ0KLS0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddDQotZGRteGc0MDEgbWF4bWFnICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkNCi1kZG14ZzQwMiBtYXhtYWcgIDEuMSAgICAxICAgICAgIC0+ICAxLjENCi1kZG14ZzQwMyBtYXhtYWcgIDEgICAgICAxLjAgICAgIC0+ICAxDQotZGRteGc0MDQgbWF4bWFnICAxLjAgICAgMC4xICAgICAtPiAgMS4wDQotZGRteGc0MDUgbWF4bWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xDQotZGRteGc0MDYgbWF4bWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMA0KLWRkbXhnNDA3IG1heG1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTANCi1kZG14ZzQwOCBtYXhtYWcgIDAgICAgICAwLjAgICAgIC0+ICAwDQotZGRteGc0MDkgbWF4bWFnICAwLjAgICAtMCAgICAgICAtPiAgMC4wDQotZGRteGc0MTAgbWF4bWFnICAwLjAgICAtMC4wICAgICAtPiAgMC4wDQotZGRteGc0MTEgbWF4bWFnICAwLjAwICAtMC4wICAgICAtPiAgMC4wMA0KLWRkbXhnNDEyIG1heG1hZyAgMC4wICAgLTAuMDAgICAgLT4gIDAuMA0KLWRkbXhnNDEzIG1heG1hZyAgMCAgICAgLTAuMCAgICAgLT4gIDANCi1kZG14ZzQxNCBtYXhtYWcgIDAgICAgIC0wICAgICAgIC0+ICAwDQotZGRteGc0MTUgbWF4bWFnIC0wLjAgICAtMCAgICAgICAtPiAtMC4wDQotZGRteGc0MTYgbWF4bWFnIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDANCi1kZG14ZzQxNyBtYXhtYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwMA0KLWRkbXhnNDE4IG1heG1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTANCi1kZG14ZzQxOSBtYXhtYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0xLjANCi1kZG14ZzQyMCBtYXhtYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xLjANCi1kZG14ZzQyMSBtYXhtYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xLjENCi1kZG14ZzQyMyBtYXhtYWcgLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQ0KLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KLWRkbXhnNDMxIG1heG1hZyAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5DQotZGRteGc0MzIgbWF4bWFnICAxICAgICAgMS4xICAgICAtPiAgMS4xDQotZGRteGc0MzMgbWF4bWFnICAxLjAgICAgMSAgICAgICAtPiAgMQ0KLWRkbXhnNDM0IG1heG1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDEuMA0KLWRkbXhnNDM1IG1heG1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQ0KLWRkbXhnNDM2IG1heG1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTANCi1kZG14ZzQzNyBtYXhtYWcgIDAgICAgICAwLjEwICAgIC0+ICAwLjEwDQotZGRteGc0MzggbWF4bWFnICAwLjAgICAgMCAgICAgICAtPiAgMA0KLWRkbXhnNDM5IG1heG1hZyAtMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KLWRkbXhnNDQwIG1heG1hZyAtMC4wICAgIDAuMCAgICAgLT4gIDAuMA0KLWRkbXhnNDQxIG1heG1hZyAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDANCi1kZG14ZzQ0MiBtYXhtYWcgLTAuMDAgICAwLjAgICAgIC0+ICAwLjANCi1kZG14ZzQ0MyBtYXhtYWcgLTAuMCAgICAwICAgICAgIC0+ICAwDQotZGRteGc0NDQgbWF4bWFnIC0wICAgICAgMCAgICAgICAtPiAgMA0KLWRkbXhnNDQ1IG1heG1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KLWRkbXhnNDQ2IG1heG1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwDQotZGRteGc0NDcgbWF4bWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDANCi1kZG14ZzQ0OCBtYXhtYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwDQotZGRteGc0NDkgbWF4bWFnIC0xLjAgICAtMC4xICAgICAtPiAtMS4wDQotZGRteGc0NTAgbWF4bWFnIC0xICAgICAtMS4wICAgICAtPiAtMS4wDQotZGRteGc0NTEgbWF4bWFnIC0xLjEgICAtMSAgICAgICAtPiAtMS4xDQotZGRteGc0NTMgbWF4bWFnIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkNCi0tLSBsYXJnaWVzDQotZGRteGc0NjAgbWF4bWFnICAxMDAwICAgMUUrMyAgICAtPiAgMUUrMw0KLWRkbXhnNDYxIG1heG1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMNCi1kZG14ZzQ2MiBtYXhtYWcgIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwDQotZGRteGc0NjMgbWF4bWFnICAxRSszICAtMTAwMCAgICAtPiAgMUUrMw0KLWRkbXhnNDY0IG1heG1hZyAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMNCi1kZG14ZzQ2NSBtYXhtYWcgLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQotZGRteGc0NjYgbWF4bWFnIC0xMDAwICAtMUUrMyAgICAtPiAtMTAwMA0KLWRkbXhnNDY3IG1heG1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDANCi0NCi0tLSBzdWJub3JtYWxzDQotZGRteGc1MTAgbWF4bWFnICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAxLjAwRS0zODMNCi1kZG14ZzUxMSBtYXhtYWcgIDAuMUUtMzgzICAgICAgICAwICAtPiAgIDFFLTM4NCAgICBTdWJub3JtYWwNCi1kZG14ZzUxMiBtYXhtYWcgIDAuMTBFLTM4MyAgICAgICAwICAtPiAgIDEuMEUtMzg0ICBTdWJub3JtYWwNCi1kZG14ZzUxMyBtYXhtYWcgIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDEuMDBFLTM4NCBTdWJub3JtYWwNCi1kZG14ZzUxNCBtYXhtYWcgIDAuMDFFLTM4MyAgICAgICAwICAtPiAgIDFFLTM4NSAgICBTdWJub3JtYWwNCi1kZG14ZzUxNSBtYXhtYWcgIDAuOTk5RS0zODMgICAgICAwICAtPiAgIDkuOTlFLTM4NCBTdWJub3JtYWwNCi1kZG14ZzUxNiBtYXhtYWcgIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDkuOUUtMzg1ICBTdWJub3JtYWwNCi1kZG14ZzUxNyBtYXhtYWcgIDAuMDA5RS0zODMgICAgICAwICAtPiAgIDlFLTM4NiAgICBTdWJub3JtYWwNCi1kZG14ZzUxOCBtYXhtYWcgIDAuMDAxRS0zODMgICAgICAwICAtPiAgIDFFLTM4NiAgICBTdWJub3JtYWwNCi1kZG14ZzUxOSBtYXhtYWcgIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDlFLTM4NyAgICBTdWJub3JtYWwNCi1kZG14ZzUyMCBtYXhtYWcgIDAuMDAwMUUtMzgzICAgICAwICAtPiAgIDFFLTM4NyAgICBTdWJub3JtYWwNCi0NCi1kZG14ZzUzMCBtYXhtYWcgLTEuMDBFLTM4MyAgICAgICAwICAtPiAgLTEuMDBFLTM4Mw0KLWRkbXhnNTMxIG1heG1hZyAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbA0KLWRkbXhnNTMyIG1heG1hZyAtMC4xMEUtMzgzICAgICAgIDAgIC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbA0KLWRkbXhnNTMzIG1heG1hZyAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAtMS4wMEUtMzg0IFN1Ym5vcm1hbA0KLWRkbXhnNTM0IG1heG1hZyAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAtMUUtMzg1ICAgIFN1Ym5vcm1hbA0KLWRkbXhnNTM1IG1heG1hZyAtMC45OTlFLTM4MyAgICAgIDAgIC0+ICAtOS45OUUtMzg0IFN1Ym5vcm1hbA0KLWRkbXhnNTM2IG1heG1hZyAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAtOS45RS0zODUgIFN1Ym5vcm1hbA0KLWRkbXhnNTM3IG1heG1hZyAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAtOUUtMzg2ICAgIFN1Ym5vcm1hbA0KLWRkbXhnNTM4IG1heG1hZyAtMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAtMUUtMzg2ICAgIFN1Ym5vcm1hbA0KLWRkbXhnNTM5IG1heG1hZyAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAtOUUtMzg3ICAgIFN1Ym5vcm1hbA0KLWRkbXhnNTQwIG1heG1hZyAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAtMUUtMzg3ICAgIFN1Ym5vcm1hbA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZG14ZzkwMCBtYXhtYWcgMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnOTAxIG1heG1hZyAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZE1heE1hZy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtYXhudW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRteGcwMDEgbWF4bWFnICAtMiAgLTIgIC0+IC0yCitkZG14ZzAwMiBtYXhtYWcgIC0yICAtMSAgLT4gLTIKK2RkbXhnMDAzIG1heG1hZyAgLTIgICAwICAtPiAtMgorZGRteGcwMDQgbWF4bWFnICAtMiAgIDEgIC0+IC0yCitkZG14ZzAwNSBtYXhtYWcgIC0yICAgMiAgLT4gIDIKK2RkbXhnMDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMgorZGRteGcwMDcgbWF4bWFnICAtMSAgLTEgIC0+IC0xCitkZG14ZzAwOCBtYXhtYWcgIC0xICAgMCAgLT4gLTEKK2RkbXhnMDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQorZGRteGcwMTAgbWF4bWFnICAtMSAgIDIgIC0+ICAyCitkZG14ZzAxMSBtYXhtYWcgICAwICAtMiAgLT4gLTIKK2RkbXhnMDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQorZGRteGcwMTMgbWF4bWFnICAgMCAgIDAgIC0+ICAwCitkZG14ZzAxNCBtYXhtYWcgICAwICAgMSAgLT4gIDEKK2RkbXhnMDE1IG1heG1hZyAgIDAgICAyICAtPiAgMgorZGRteGcwMTYgbWF4bWFnICAgMSAgLTIgIC0+IC0yCitkZG14ZzAxNyBtYXhtYWcgICAxICAtMSAgLT4gIDEKK2RkbXhnMDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQorZGRteGcwMTkgbWF4bWFnICAgMSAgIDEgIC0+ICAxCitkZG14ZzAyMCBtYXhtYWcgICAxICAgMiAgLT4gIDIKK2RkbXhnMDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMgorZGRteGcwMjIgbWF4bWFnICAgMiAgLTEgIC0+ICAyCitkZG14ZzAyMyBtYXhtYWcgICAyICAgMCAgLT4gIDIKK2RkbXhnMDI1IG1heG1hZyAgIDIgICAxICAtPiAgMgorZGRteGcwMjYgbWF4bWFnICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZG14ZzAzMCBtYXhtYWcgICAwICAgICAwICAgLT4gIDAKK2RkbXhnMDMxIG1heG1hZyAgIDAgICAgLTAgICAtPiAgMAorZGRteGcwMzIgbWF4bWFnICAgMCAgICAtMC4wIC0+ICAwCitkZG14ZzAzMyBtYXhtYWcgICAwICAgICAwLjAgLT4gIDAKK2RkbXhnMDM0IG1heG1hZyAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgorZGRteGcwMzUgbWF4bWFnICAtMCAgICAtMCAgIC0+IC0wCitkZG14ZzAzNiBtYXhtYWcgIC0wICAgIC0wLjAgLT4gLTAuMAorZGRteGcwMzcgbWF4bWFnICAtMCAgICAgMC4wIC0+ICAwLjAKK2RkbXhnMDM4IG1heG1hZyAgIDAuMCAgIDAgICAtPiAgMAorZGRteGcwMzkgbWF4bWFnICAgMC4wICAtMCAgIC0+ICAwLjAKK2RkbXhnMDQwIG1heG1hZyAgIDAuMCAgLTAuMCAtPiAgMC4wCitkZG14ZzA0MSBtYXhtYWcgICAwLjAgICAwLjAgLT4gIDAuMAorZGRteGcwNDIgbWF4bWFnICAtMC4wICAgMCAgIC0+ICAwCitkZG14ZzA0MyBtYXhtYWcgIC0wLjAgIC0wICAgLT4gLTAuMAorZGRteGcwNDQgbWF4bWFnICAtMC4wICAtMC4wIC0+IC0wLjAKK2RkbXhnMDQ1IG1heG1hZyAgLTAuMCAgIDAuMCAtPiAgMC4wCisKK2RkbXhnMDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQorZGRteGcwNTEgbWF4bWFnICAtMEUyICAgMEUyIC0+ICAwRSsyCitkZG14ZzA1MiBtYXhtYWcgIC0wRTIgICAwRTEgLT4gIDBFKzEKK2RkbXhnMDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMgorZGRteGcwNTQgbWF4bWFnICAgMEUxICAtMEUxIC0+ICAwRSsxCitkZG14ZzA1NSBtYXhtYWcgICAwRTIgIC0wRTIgLT4gIDBFKzIKK2RkbXhnMDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMgorZGRteGcwNTcgbWF4bWFnICAgMEUxICAtMEUyIC0+ICAwRSsxCisKK2RkbXhnMDU4IG1heG1hZyAgIDBFMSAgIDBFMSAtPiAgMEUrMQorZGRteGcwNTkgbWF4bWFnICAgMEUyICAgMEUyIC0+ICAwRSsyCitkZG14ZzA2MCBtYXhtYWcgICAwRTIgICAwRTEgLT4gIDBFKzIKK2RkbXhnMDYxIG1heG1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMgorZGRteGcwNjIgbWF4bWFnICAtMEUxICAtMEUxIC0+IC0wRSsxCitkZG14ZzA2MyBtYXhtYWcgIC0wRTIgIC0wRTIgLT4gLTBFKzIKK2RkbXhnMDY0IG1heG1hZyAgLTBFMiAgLTBFMSAtPiAtMEUrMQorZGRteGcwNjUgbWF4bWFnICAtMEUxICAtMEUyIC0+IC0wRSsxCisKKy0tIFNwZWNpYWxzCitkZG14ZzA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRteGcwOTEgbWF4bWFnICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RkbXhnMDkyIG1heG1hZyAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkZG14ZzA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZGRteGcwOTQgbWF4bWFnICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RkbXhnMDk1IG1heG1hZyAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkZG14ZzA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZGRteGcwOTcgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMDk4IG1heG1hZyAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcxMDAgbWF4bWFnIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMTAxIG1heG1hZyAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcxMDMgbWF4bWFnICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMTA0IG1heG1hZyAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG14ZzEyMCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxMjEgbWF4bWFnIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RkbXhnMTIyIG1heG1hZyAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZG14ZzEyMyBtYXhtYWcgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRteGcxMjQgbWF4bWFnIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RkbXhnMTI1IG1heG1hZyAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZG14ZzEyNiBtYXhtYWcgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGRteGcxMjcgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMTI4IG1heG1hZyAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQorZGRteGcxMjkgbWF4bWFnIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG14ZzEzMSBtYXhtYWcgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxMzIgbWF4bWFnICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG14ZzEzNCBtYXhtYWcgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxMzUgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCitkZG14ZzE0MSBtYXhtYWcgIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQorZGRteGcxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMAorZGRteGcxNDMgbWF4bWFnICBOYU4gLTEgICAgICAtPiAtMQorZGRteGcxNDQgbWF4bWFnICBOYU4gLTAgICAgICAtPiAtMAorZGRteGcxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMAorZGRteGcxNDYgbWF4bWFnICBOYU4gIDEgICAgICAtPiAgMQorZGRteGcxNDcgbWF4bWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZGRteGcxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RkbXhnMTQ5IG1heG1hZyAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRteGcxNTAgbWF4bWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RkbXhnMTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RkbXhnMTUyIG1heG1hZyAtMSAgICBOYU4gICAgLT4gLTEKK2RkbXhnMTUzIG1heG1hZyAtMCAgICBOYU4gICAgLT4gLTAKK2RkbXhnMTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDAKK2RkbXhnMTU1IG1heG1hZyAgMSAgICBOYU4gICAgLT4gIDEKK2RkbXhnMTU2IG1heG1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RkbXhnMTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RkbXhnMTYxIG1heG1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTYzIG1heG1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTY0IG1heG1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTY2IG1heG1hZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTY3IG1heG1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTY5IG1heG1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTcwIG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTcyIG1heG1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTczIG1heG1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTc1IG1heG1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTc2IG1heG1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTc4IG1heG1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTc5IG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRteGcxODEgbWF4bWFnICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5CitkZG14ZzE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQorZGRteGcxODMgbWF4bWFnIC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbXhnMTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xCitkZG14ZzE4NSBtYXhtYWcgIE5hTjIgICBOYU4xMiAtPiAgTmFOMgorZGRteGcxODYgbWF4bWFnIC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzCitkZG14ZzE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQKKworZGRteGcxODggbWF4bWFnIC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5CitkZG14ZzE4OSBtYXhtYWcgLTkgICAgIC1OYU4zICAtPiAtOQorZGRteGcxOTAgbWF4bWFnICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK2RkbXhnMTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE5MiBtYXhtYWcgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTMgbWF4bWFnIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE5NSBtYXhtYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTYgbWF4bWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE5OCBtYXhtYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTkgbWF4bWFnICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb2xkIHJvdW5kaW5nIGNoZWNrcworZGRteGcyMjEgbWF4bWFnIDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwCitkZG14ZzIyMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK2RkbXhnMjIzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwCitkZG14ZzIyNCBtYXhtYWcgMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAorZGRteGcyMjUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTAKK2RkbXhnMjI2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCitkZG14ZzIyNyBtYXhtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQorZGRteGcyMjggbWF4bWFnIDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK2RkbXhnMjI5IG1heG1hZyAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQorZGRteGcyMzAgbWF4bWFnIDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCitkZG14ZzIzMSBtYXhtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5NgorZGRteGcyMzIgbWF4bWFnIDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKK2RkbXhnMjMzIG1heG1hZyAtMTIzNDU2Nzg5MSAgMSAtPiAtMTIzNDU2Nzg5MQorZGRteGcyMzQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxCitkZG14ZzIzNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEyMzQ1Njc4OTAxCitkZG14ZzIzNiBtYXhtYWcgMSAtMTIzNDU2Nzg5MDEgLT4gLTEyMzQ1Njc4OTAxCitkZG14ZzIzNyBtYXhtYWcgLTEyMzQ1Njc4OTYgIDEgLT4gLTEyMzQ1Njc4OTYKK2RkbXhnMjM4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMTIzNDU2Nzg5NgorCistLSBmcm9tIGV4YW1wbGVzCitkZG14ZzI4MCBtYXhtYWcgJzMnICAgJzInICAtPiAgJzMnCitkZG14ZzI4MSBtYXhtYWcgJy0xMCcgJzMnICAtPiAgJy0xMCcKK2RkbXhnMjgyIG1heG1hZyAnMS4wJyAnMScgIC0+ICAnMScKK2RkbXhnMjgzIG1heG1hZyAnMScgJzEuMCcgIC0+ICAnMScKK2RkbXhnMjg0IG1heG1hZyAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkZG14ZzQwMSBtYXhtYWcgIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQorZGRteGc0MDIgbWF4bWFnICAxLjEgICAgMSAgICAgICAtPiAgMS4xCitkZG14ZzQwMyBtYXhtYWcgIDEgICAgICAxLjAgICAgIC0+ICAxCitkZG14ZzQwNCBtYXhtYWcgIDEuMCAgICAwLjEgICAgIC0+ICAxLjAKK2RkbXhnNDA1IG1heG1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMQorZGRteGc0MDYgbWF4bWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMAorZGRteGc0MDcgbWF4bWFnICAwLjEwICAgMCAgICAgICAtPiAgMC4xMAorZGRteGc0MDggbWF4bWFnICAwICAgICAgMC4wICAgICAtPiAgMAorZGRteGc0MDkgbWF4bWFnICAwLjAgICAtMCAgICAgICAtPiAgMC4wCitkZG14ZzQxMCBtYXhtYWcgIDAuMCAgIC0wLjAgICAgIC0+ICAwLjAKK2RkbXhnNDExIG1heG1hZyAgMC4wMCAgLTAuMCAgICAgLT4gIDAuMDAKK2RkbXhnNDEyIG1heG1hZyAgMC4wICAgLTAuMDAgICAgLT4gIDAuMAorZGRteGc0MTMgbWF4bWFnICAwICAgICAtMC4wICAgICAtPiAgMAorZGRteGc0MTQgbWF4bWFnICAwICAgICAtMCAgICAgICAtPiAgMAorZGRteGc0MTUgbWF4bWFnIC0wLjAgICAtMCAgICAgICAtPiAtMC4wCitkZG14ZzQxNiBtYXhtYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZGRteGc0MTcgbWF4bWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKK2RkbXhnNDE4IG1heG1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKK2RkbXhnNDE5IG1heG1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTEuMAorZGRteGc0MjAgbWF4bWFnIC0xLjAgICAtMSAgICAgICAtPiAtMS4wCitkZG14ZzQyMSBtYXhtYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKK2RkbXhnNDIzIG1heG1hZyAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5CistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK2RkbXhnNDMxIG1heG1hZyAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5CitkZG14ZzQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjEKK2RkbXhnNDMzIG1heG1hZyAgMS4wICAgIDEgICAgICAgLT4gIDEKK2RkbXhnNDM0IG1heG1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDEuMAorZGRteGc0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xCitkZG14ZzQzNiBtYXhtYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwCitkZG14ZzQzNyBtYXhtYWcgIDAgICAgICAwLjEwICAgIC0+ICAwLjEwCitkZG14ZzQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwCitkZG14ZzQzOSBtYXhtYWcgLTAgICAgICAwLjAgICAgIC0+ICAwLjAKK2RkbXhnNDQwIG1heG1hZyAtMC4wICAgIDAuMCAgICAgLT4gIDAuMAorZGRteGc0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMAorZGRteGc0NDIgbWF4bWFnIC0wLjAwICAgMC4wICAgICAtPiAgMC4wCitkZG14ZzQ0MyBtYXhtYWcgLTAuMCAgICAwICAgICAgIC0+ICAwCitkZG14ZzQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwCitkZG14ZzQ0NSBtYXhtYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wLjAKK2RkbXhnNDQ2IG1heG1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwCitkZG14ZzQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZGRteGc0NDggbWF4bWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xMAorZGRteGc0NDkgbWF4bWFnIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCitkZG14ZzQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjAKK2RkbXhnNDUxIG1heG1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEuMQorZGRteGc0NTMgbWF4bWFnIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkKKy0tIGxhcmdpZXMKK2RkbXhnNDYwIG1heG1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RkbXhnNDYxIG1heG1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMKK2RkbXhnNDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKK2RkbXhnNDYzIG1heG1hZyAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKK2RkbXhnNDY0IG1heG1hZyAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RkbXhnNDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RkbXhnNDY2IG1heG1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKK2RkbXhnNDY3IG1heG1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKKworLS0gc3Vibm9ybWFscworZGRteGc1MTAgbWF4bWFnICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAxLjAwRS0zODMKK2RkbXhnNTExIG1heG1hZyAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMUUtMzg0ICAgIFN1Ym5vcm1hbAorZGRteGc1MTIgbWF4bWFnICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAxLjBFLTM4NCAgU3Vibm9ybWFsCitkZG14ZzUxMyBtYXhtYWcgIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDEuMDBFLTM4NCBTdWJub3JtYWwKK2RkbXhnNTE0IG1heG1hZyAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMUUtMzg1ICAgIFN1Ym5vcm1hbAorZGRteGc1MTUgbWF4bWFnICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICA5Ljk5RS0zODQgU3Vibm9ybWFsCitkZG14ZzUxNiBtYXhtYWcgIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDkuOUUtMzg1ICBTdWJub3JtYWwKK2RkbXhnNTE3IG1heG1hZyAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgOUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRteGc1MTggbWF4bWFnICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAxRS0zODYgICAgU3Vibm9ybWFsCitkZG14ZzUxOSBtYXhtYWcgIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDlFLTM4NyAgICBTdWJub3JtYWwKK2RkbXhnNTIwIG1heG1hZyAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMUUtMzg3ICAgIFN1Ym5vcm1hbAorCitkZG14ZzUzMCBtYXhtYWcgLTEuMDBFLTM4MyAgICAgICAwICAtPiAgLTEuMDBFLTM4MworZGRteGc1MzEgbWF4bWFnIC0wLjFFLTM4MyAgICAgICAgMCAgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsCitkZG14ZzUzMiBtYXhtYWcgLTAuMTBFLTM4MyAgICAgICAwICAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwKK2RkbXhnNTMzIG1heG1hZyAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAtMS4wMEUtMzg0IFN1Ym5vcm1hbAorZGRteGc1MzQgbWF4bWFnIC0wLjAxRS0zODMgICAgICAgMCAgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsCitkZG14ZzUzNSBtYXhtYWcgLTAuOTk5RS0zODMgICAgICAwICAtPiAgLTkuOTlFLTM4NCBTdWJub3JtYWwKK2RkbXhnNTM2IG1heG1hZyAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAtOS45RS0zODUgIFN1Ym5vcm1hbAorZGRteGc1MzcgbWF4bWFnIC0wLjAwOUUtMzgzICAgICAgMCAgLT4gIC05RS0zODYgICAgU3Vibm9ybWFsCitkZG14ZzUzOCBtYXhtYWcgLTAuMDAxRS0zODMgICAgICAwICAtPiAgLTFFLTM4NiAgICBTdWJub3JtYWwKK2RkbXhnNTM5IG1heG1hZyAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAtOUUtMzg3ICAgIFN1Ym5vcm1hbAorZGRteGc1NDAgbWF4bWFnIC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gIC0xRS0zODcgICAgU3Vibm9ybWFsCisKKy0tIE51bGwgdGVzdHMKK2RkbXhnOTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzkwMSBtYXhtYWcgICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW4uZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbi5kZWNUZXN0CmluZGV4IDljZTQyODIuLmViOTQyZmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbi5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbi5kZWNUZXN0CkBAIC0xLDMwOSArMSwzMDkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkTWluLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1pbm51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCi0tLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kZG1pbjAwMSBtaW4gIC0yICAtMiAgLT4gLTINCi1kZG1pbjAwMiBtaW4gIC0yICAtMSAgLT4gLTINCi1kZG1pbjAwMyBtaW4gIC0yICAgMCAgLT4gLTINCi1kZG1pbjAwNCBtaW4gIC0yICAgMSAgLT4gLTINCi1kZG1pbjAwNSBtaW4gIC0yICAgMiAgLT4gLTINCi1kZG1pbjAwNiBtaW4gIC0xICAtMiAgLT4gLTINCi1kZG1pbjAwNyBtaW4gIC0xICAtMSAgLT4gLTENCi1kZG1pbjAwOCBtaW4gIC0xICAgMCAgLT4gLTENCi1kZG1pbjAwOSBtaW4gIC0xICAgMSAgLT4gLTENCi1kZG1pbjAxMCBtaW4gIC0xICAgMiAgLT4gLTENCi1kZG1pbjAxMSBtaW4gICAwICAtMiAgLT4gLTINCi1kZG1pbjAxMiBtaW4gICAwICAtMSAgLT4gLTENCi1kZG1pbjAxMyBtaW4gICAwICAgMCAgLT4gIDANCi1kZG1pbjAxNCBtaW4gICAwICAgMSAgLT4gIDANCi1kZG1pbjAxNSBtaW4gICAwICAgMiAgLT4gIDANCi1kZG1pbjAxNiBtaW4gICAxICAtMiAgLT4gLTINCi1kZG1pbjAxNyBtaW4gICAxICAtMSAgLT4gLTENCi1kZG1pbjAxOCBtaW4gICAxICAgMCAgLT4gIDANCi1kZG1pbjAxOSBtaW4gICAxICAgMSAgLT4gIDENCi1kZG1pbjAyMCBtaW4gICAxICAgMiAgLT4gIDENCi1kZG1pbjAyMSBtaW4gICAyICAtMiAgLT4gLTINCi1kZG1pbjAyMiBtaW4gICAyICAtMSAgLT4gLTENCi1kZG1pbjAyMyBtaW4gICAyICAgMCAgLT4gIDANCi1kZG1pbjAyNSBtaW4gICAyICAgMSAgLT4gIDENCi1kZG1pbjAyNiBtaW4gICAyICAgMiAgLT4gIDINCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWRkbWluMDMwIG1pbiAgIDAgICAgIDAgICAtPiAgMA0KLWRkbWluMDMxIG1pbiAgIDAgICAgLTAgICAtPiAtMA0KLWRkbWluMDMyIG1pbiAgIDAgICAgLTAuMCAtPiAtMC4wDQotZGRtaW4wMzMgbWluICAgMCAgICAgMC4wIC0+ICAwLjANCi1kZG1pbjAzNCBtaW4gIC0wICAgICAwICAgLT4gLTANCi1kZG1pbjAzNSBtaW4gIC0wICAgIC0wICAgLT4gLTANCi1kZG1pbjAzNiBtaW4gIC0wICAgIC0wLjAgLT4gLTANCi1kZG1pbjAzNyBtaW4gIC0wICAgICAwLjAgLT4gLTANCi1kZG1pbjAzOCBtaW4gICAwLjAgICAwICAgLT4gIDAuMA0KLWRkbWluMDM5IG1pbiAgIDAuMCAgLTAgICAtPiAtMA0KLWRkbWluMDQwIG1pbiAgIDAuMCAgLTAuMCAtPiAtMC4wDQotZGRtaW4wNDEgbWluICAgMC4wICAgMC4wIC0+ICAwLjANCi1kZG1pbjA0MiBtaW4gIC0wLjAgICAwICAgLT4gLTAuMA0KLWRkbWluMDQzIG1pbiAgLTAuMCAgLTAgICAtPiAtMA0KLWRkbWluMDQ0IG1pbiAgLTAuMCAgLTAuMCAtPiAtMC4wDQotZGRtaW4wNDUgbWluICAtMC4wICAgMC4wIC0+IC0wLjANCi0NCi1kZG1pbjA0NiBtaW4gICAwRTEgIC0wRTEgLT4gLTBFKzENCi1kZG1pbjA0NyBtaW4gIC0wRTEgICAwRTIgLT4gLTBFKzENCi1kZG1pbjA0OCBtaW4gICAwRTIgICAwRTEgLT4gIDBFKzENCi1kZG1pbjA0OSBtaW4gICAwRTEgICAwRTIgLT4gIDBFKzENCi1kZG1pbjA1MCBtaW4gIC0wRTMgIC0wRTIgLT4gLTBFKzMNCi1kZG1pbjA1MSBtaW4gIC0wRTIgIC0wRTMgLT4gLTBFKzMNCi0NCi0tLSBTcGVjaWFscw0KLWRkbWluMDkwIG1pbiAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtaW4wOTEgbWluICBJbmYgIC0xMDAwICAtPiAtMTAwMA0KLWRkbWluMDkyIG1pbiAgSW5mICAtMSAgICAgLT4gLTENCi1kZG1pbjA5MyBtaW4gIEluZiAgLTAgICAgIC0+IC0wDQotZGRtaW4wOTQgbWluICBJbmYgICAwICAgICAtPiAgMA0KLWRkbWluMDk1IG1pbiAgSW5mICAgMSAgICAgLT4gIDENCi1kZG1pbjA5NiBtaW4gIEluZiAgIDEwMDAgIC0+ICAxMDAwDQotZGRtaW4wOTcgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG1pbjA5OCBtaW4gLTEwMDAgIEluZiAgIC0+IC0xMDAwDQotZGRtaW4wOTkgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZG1pbjEwMCBtaW4gLTEgICAgIEluZiAgIC0+IC0xDQotZGRtaW4xMDEgbWluIC0wICAgICBJbmYgICAtPiAtMA0KLWRkbWluMTAyIG1pbiAgMCAgICAgSW5mICAgLT4gIDANCi1kZG1pbjEwMyBtaW4gIDEgICAgIEluZiAgIC0+ICAxDQotZGRtaW4xMDQgbWluICAxMDAwICBJbmYgICAtPiAgMTAwMA0KLWRkbWluMTA1IG1pbiAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRtaW4xMjAgbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG1pbjEyMSBtaW4gLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTIyIG1pbiAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZGRtaW4xMjMgbWluIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kZG1pbjEyNCBtaW4gLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTI1IG1pbiAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZGRtaW4xMjYgbWluIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1kZG1pbjEyNyBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTI4IG1pbiAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtaW4xMjkgbWluIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG1pbjEzMCBtaW4gLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTMxIG1pbiAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtaW4xMzIgbWluICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG1pbjEzMyBtaW4gIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTM0IG1pbiAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtaW4xMzUgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi0NCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCi1kZG1pbjE0MSBtaW4gIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkNCi1kZG1pbjE0MiBtaW4gIE5hTiAtMTAwMCAgIC0+ICAtMTAwMA0KLWRkbWluMTQzIG1pbiAgTmFOIC0xICAgICAgLT4gIC0xDQotZGRtaW4xNDQgbWluICBOYU4gLTAgICAgICAtPiAgLTANCi1kZG1pbjE0NSBtaW4gIE5hTiAgMCAgICAgIC0+ICAwDQotZGRtaW4xNDYgbWluICBOYU4gIDEgICAgICAtPiAgMQ0KLWRkbWluMTQ3IG1pbiAgTmFOICAxMDAwICAgLT4gIDEwMDANCi1kZG1pbjE0OCBtaW4gIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQ0KLWRkbWluMTQ5IG1pbiAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRkbWluMTUwIG1pbiAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5DQotZGRtaW4xNTEgbWluIC0xMDAwIE5hTiAgICAtPiAtMTAwMA0KLWRkbWluMTUyIG1pbiAtMSAgIC1OYU4gICAgLT4gLTENCi1kZG1pbjE1MyBtaW4gLTAgICAgTmFOICAgIC0+IC0wDQotZGRtaW4xNTQgbWluICAwICAgLU5hTiAgICAtPiAgMA0KLWRkbWluMTU1IG1pbiAgMSAgICBOYU4gICAgLT4gIDENCi1kZG1pbjE1NiBtaW4gIDEwMDAgTmFOICAgIC0+ICAxMDAwDQotZGRtaW4xNTcgbWluICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkNCi0NCi1kZG1pbjE2MSBtaW4gIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNjIgbWluICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTYzIG1pbiAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE2NCBtaW4gIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNjUgbWluIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTY2IG1pbiAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE2NyBtaW4gIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNjggbWluICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTY5IG1pbiAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE3MCBtaW4gIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNzEgbWluIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTcyIG1pbiAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE3MyBtaW4gLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNzQgbWluIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTc1IG1pbiAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE3NiBtaW4gIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNzcgbWluICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTc4IG1pbiAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE3OSBtaW4gIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkbWluMTgxIG1pbiAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG1pbjE4MiBtaW4gLU5hTjggICAgOTk5MCAgLT4gIDk5OTANCi1kZG1pbjE4MyBtaW4gIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRtaW4xODQgbWluICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xDQotZGRtaW4xODUgbWluICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMg0KLWRkbWluMTg2IG1pbiAtTmFOMyAgICBOYU42ICAtPiAtTmFOMw0KLWRkbWluMTg3IG1pbiAtTmFONDQgICBOYU43ICAtPiAtTmFONDQNCi0NCi1kZG1pbjE4OCBtaW4gLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5DQotZGRtaW4xODkgbWluIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5DQotZGRtaW4xOTAgbWluICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbWluMTkxIG1pbiAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xOTIgbWluICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE5MyBtaW4gLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTk0IG1pbiAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xOTUgbWluICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE5NiBtaW4gLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTk3IG1pbiAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xOTggbWluICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE5OSBtaW4gIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG9sZCByb3VuZGluZyBjaGVja3MNCi1kZG1pbjIyMSBtaW4gLTEyMzQ1Njc4MDAwIDEgIC0+IC0xMjM0NTY3ODAwMA0KLWRkbWluMjIyIG1pbiAxIC0xMjM0NTY3ODAwMCAgLT4gLTEyMzQ1Njc4MDAwDQotZGRtaW4yMjMgbWluIC0xMjM0NTY3ODAwICAxICAtPiAtMTIzNDU2NzgwMA0KLWRkbWluMjI0IG1pbiAxIC0xMjM0NTY3ODAwICAgLT4gLTEyMzQ1Njc4MDANCi1kZG1pbjIyNSBtaW4gLTEyMzQ1Njc4OTAgIDEgIC0+IC0xMjM0NTY3ODkwDQotZGRtaW4yMjYgbWluIDEgLTEyMzQ1Njc4OTAgICAtPiAtMTIzNDU2Nzg5MA0KLWRkbWluMjI3IG1pbiAtMTIzNDU2Nzg5MSAgMSAgLT4gLTEyMzQ1Njc4OTENCi1kZG1pbjIyOCBtaW4gMSAtMTIzNDU2Nzg5MSAgIC0+IC0xMjM0NTY3ODkxDQotZGRtaW4yMjkgbWluIC0xMjM0NTY3ODkwMSAxICAtPiAtMTIzNDU2Nzg5MDENCi1kZG1pbjIzMCBtaW4gMSAtMTIzNDU2Nzg5MDEgIC0+IC0xMjM0NTY3ODkwMQ0KLWRkbWluMjMxIG1pbiAtMTIzNDU2Nzg5NiAgMSAgLT4gLTEyMzQ1Njc4OTYNCi1kZG1pbjIzMiBtaW4gMSAtMTIzNDU2Nzg5NiAgIC0+IC0xMjM0NTY3ODk2DQotZGRtaW4yMzMgbWluIDEyMzQ1Njc4OTEgIDEgICAtPiAxDQotZGRtaW4yMzQgbWluIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQotZGRtaW4yMzUgbWluIDEyMzQ1Njc4OTAxIDEgICAtPiAxDQotZGRtaW4yMzYgbWluIDEgMTIzNDU2Nzg5MDEgICAtPiAxDQotZGRtaW4yMzcgbWluIDEyMzQ1Njc4OTYgIDEgICAtPiAxDQotZGRtaW4yMzggbWluIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQotDQotLS0gZnJvbSBleGFtcGxlcw0KLWRkbWluMjgwIG1pbiAnMycgICAnMicgIC0+ICAnMicNCi1kZG1pbjI4MSBtaW4gJy0xMCcgJzMnICAtPiAgJy0xMCcNCi1kZG1pbjI4MiBtaW4gJzEuMCcgJzEnICAtPiAgJzEuMCcNCi1kZG1pbjI4MyBtaW4gJzEnICcxLjAnICAtPiAgJzEuMCcNCi1kZG1pbjI4NCBtaW4gJzcnICdOYU4nICAtPiAgJzcnDQotDQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UNCi0tLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQ0KLWRkbWluNDAxIG1pbiAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQ0KLWRkbWluNDAyIG1pbiAgMS4xICAgIDEgICAgICAgLT4gIDENCi1kZG1pbjQwMyBtaW4gIDEgICAgICAxLjAgICAgIC0+ICAxLjANCi1kZG1pbjQwNCBtaW4gIDEuMCAgICAwLjEgICAgIC0+ICAwLjENCi1kZG1pbjQwNSBtaW4gIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwDQotZGRtaW40MDYgbWluICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDANCi1kZG1pbjQwNyBtaW4gIDAuMTAgICAwICAgICAgIC0+ICAwDQotZGRtaW40MDggbWluICAwICAgICAgMC4wICAgICAtPiAgMC4wDQotZGRtaW40MDkgbWluICAwLjAgICAtMCAgICAgICAtPiAtMA0KLWRkbWluNDEwIG1pbiAgMC4wICAgLTAuMCAgICAgLT4gLTAuMA0KLWRkbWluNDExIG1pbiAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMA0KLWRkbWluNDEyIG1pbiAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDANCi1kZG1pbjQxMyBtaW4gIDAgICAgIC0wLjAgICAgIC0+IC0wLjANCi1kZG1pbjQxNCBtaW4gIDAgICAgIC0wICAgICAgIC0+IC0wDQotZGRtaW40MTUgbWluIC0wLjAgICAtMCAgICAgICAtPiAtMA0KLWRkbWluNDE2IG1pbiAtMCAgICAgLTAuMTAwICAgLT4gLTAuMTAwDQotZGRtaW40MTcgbWluIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMA0KLWRkbWluNDE4IG1pbiAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQ0KLWRkbWluNDE5IG1pbiAtMC4xICAgLTEuMCAgICAgLT4gLTEuMA0KLWRkbWluNDIwIG1pbiAtMS4wICAgLTEgICAgICAgLT4gLTENCi1kZG1pbjQyMSBtaW4gLTEgICAgIC0xLjEgICAgIC0+IC0xLjENCi1kZG1pbjQyMyBtaW4gLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQ0KLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KLWRkbWluNDMxIG1pbiAgMS4xICAgIEluZiAgICAgLT4gIDEuMQ0KLWRkbWluNDMyIG1pbiAgMSAgICAgIDEuMSAgICAgLT4gIDENCi1kZG1pbjQzMyBtaW4gIDEuMCAgICAxICAgICAgIC0+ICAxLjANCi1kZG1pbjQzNCBtaW4gIDAuMSAgICAxLjAgICAgIC0+ICAwLjENCi1kZG1pbjQzNSBtaW4gIDAuMTAgICAwLjEgICAgIC0+ICAwLjEwDQotZGRtaW40MzYgbWluICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDANCi1kZG1pbjQzNyBtaW4gIDAgICAgICAwLjEwICAgIC0+ICAwDQotZGRtaW40MzggbWluICAwLjAgICAgMCAgICAgICAtPiAgMC4wDQotZGRtaW40MzkgbWluIC0wICAgICAgMC4wICAgICAtPiAtMA0KLWRkbWluNDQwIG1pbiAtMC4wICAgIDAuMCAgICAgLT4gLTAuMA0KLWRkbWluNDQxIG1pbiAtMC4wICAgIDAuMDAgICAgLT4gLTAuMA0KLWRkbWluNDQyIG1pbiAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDANCi1kZG1pbjQ0MyBtaW4gLTAuMCAgICAwICAgICAgIC0+IC0wLjANCi1kZG1pbjQ0NCBtaW4gLTAgICAgICAwICAgICAgIC0+IC0wDQotZGRtaW40NDUgbWluIC0wICAgICAtMC4wICAgICAtPiAtMA0KLWRkbWluNDQ2IG1pbiAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwDQotZGRtaW40NDcgbWluIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMA0KLWRkbWluNDQ4IG1pbiAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQ0KLWRkbWluNDQ5IG1pbiAtMS4wICAgLTAuMSAgICAgLT4gLTEuMA0KLWRkbWluNDUwIG1pbiAtMSAgICAgLTEuMCAgICAgLT4gLTENCi1kZG1pbjQ1MSBtaW4gLTEuMSAgIC0xICAgICAgIC0+IC0xLjENCi1kZG1pbjQ1MyBtaW4gLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQ0KLS0tIGxhcmdpZXMNCi1kZG1pbjQ2MCBtaW4gIDEwMDAgICAxRSszICAgIC0+ICAxMDAwDQotZGRtaW40NjEgbWluICAxRSszICAgMTAwMCAgICAtPiAgMTAwMA0KLWRkbWluNDYyIG1pbiAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMNCi1kZG1pbjQ2MyBtaW4gIDFFKzMgIC0zODQgICAgLT4gLTM4NA0KLWRkbWluNDY0IG1pbiAtMzg0ICAgMUUrMyAgICAtPiAtMzg0DQotZGRtaW40NjUgbWluIC0xRSszICAgMTAwMCAgICAtPiAtMUUrMw0KLWRkbWluNDY2IG1pbiAtMzg0ICAtMUUrMyAgICAtPiAtMUUrMw0KLWRkbWluNDY3IG1pbiAtMUUrMyAgLTM4NCAgICAtPiAtMUUrMw0KLQ0KLS0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbg0KLWRkbWluNDcxIG1pbiAgICAgIDEuMCAgICAgICAwLjEgIC0+IDAuMQ0KLWRkbWluNDcyIG1pbiAgICAgIDAuMSAgICAgICAxLjAgIC0+IDAuMQ0KLWRkbWluNDczIG1pbiAgICAgMTAuMCAgICAgICAwLjEgIC0+IDAuMQ0KLWRkbWluNDc0IG1pbiAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDAuMQ0KLWRkbWluNDc1IG1pbiAgICAgIDEwMCAgICAgICAxLjAgIC0+IDEuMA0KLWRkbWluNDc2IG1pbiAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEuMA0KLWRkbWluNDc3IG1pbiAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwLjANCi1kZG1pbjQ3OCBtaW4gICAgIDEwLjAgICAgICAxMDAwICAtPiAxMC4wDQotZGRtaW40NzkgbWluICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwLjANCi1kZG1pbjQ4MCBtaW4gICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAuMA0KLWRkbWluNDgxIG1pbiAgIDEwMDAwMCAgICAxMDAwLjAgIC0+IDEwMDAuMA0KLWRkbWluNDgyIG1pbiAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAuMA0KLWRkbWluNDgzIG1pbiAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwLjANCi1kZG1pbjQ4NCBtaW4gIDEwMDAwLjAgICAxMDAwMDAwICAtPiAxMDAwMC4wDQotDQotLS0gc3Vibm9ybWFscw0KLWRkbWluNTEwIG1pbiAgMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbWluNTExIG1pbiAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMA0KLWRkbWluNTEyIG1pbiAgMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbWluNTEzIG1pbiAgMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbWluNTE0IG1pbiAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbWluNTE1IG1pbiAgMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbWluNTE2IG1pbiAgMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbWluNTE3IG1pbiAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbWluNTE4IG1pbiAgMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbWluNTE5IG1pbiAgMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgMA0KLWRkbWluNTIwIG1pbiAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMA0KLQ0KLWRkbWluNTMwIG1pbiAtMS4wMEUtMzgzICAgICAgIDAgIC0+ICAtMS4wMEUtMzgzDQotZGRtaW41MzEgbWluIC0wLjFFLTM4MyAgICAgICAgMCAgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsDQotZGRtaW41MzIgbWluIC0wLjEwRS0zODMgICAgICAgMCAgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsDQotZGRtaW41MzMgbWluIC0wLjEwMEUtMzgzICAgICAgMCAgLT4gIC0xLjAwRS0zODQgU3Vibm9ybWFsDQotZGRtaW41MzQgbWluIC0wLjAxRS0zODMgICAgICAgMCAgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsDQotZGRtaW41MzUgbWluIC0wLjk5OUUtMzgzICAgICAgMCAgLT4gIC05Ljk5RS0zODQgU3Vibm9ybWFsDQotZGRtaW41MzYgbWluIC0wLjA5OUUtMzgzICAgICAgMCAgLT4gIC05LjlFLTM4NSAgU3Vibm9ybWFsDQotZGRtaW41MzcgbWluIC0wLjAwOUUtMzgzICAgICAgMCAgLT4gIC05RS0zODYgICAgU3Vibm9ybWFsDQotZGRtaW41MzggbWluIC0wLjAwMUUtMzgzICAgICAgMCAgLT4gIC0xRS0zODYgICAgU3Vibm9ybWFsDQotZGRtaW41MzkgbWluIC0wLjAwMDlFLTM4MyAgICAgMCAgLT4gIC05RS0zODcgICAgU3Vibm9ybWFsDQotZGRtaW41NDAgbWluIC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gIC0xRS0zODcgICAgU3Vibm9ybWFsDQotDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkbWluOTAwIG1pbiAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjkwMSBtaW4gICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZE1pbi5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtaW5udW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRtaW4wMDEgbWluICAtMiAgLTIgIC0+IC0yCitkZG1pbjAwMiBtaW4gIC0yICAtMSAgLT4gLTIKK2RkbWluMDAzIG1pbiAgLTIgICAwICAtPiAtMgorZGRtaW4wMDQgbWluICAtMiAgIDEgIC0+IC0yCitkZG1pbjAwNSBtaW4gIC0yICAgMiAgLT4gLTIKK2RkbWluMDA2IG1pbiAgLTEgIC0yICAtPiAtMgorZGRtaW4wMDcgbWluICAtMSAgLTEgIC0+IC0xCitkZG1pbjAwOCBtaW4gIC0xICAgMCAgLT4gLTEKK2RkbWluMDA5IG1pbiAgLTEgICAxICAtPiAtMQorZGRtaW4wMTAgbWluICAtMSAgIDIgIC0+IC0xCitkZG1pbjAxMSBtaW4gICAwICAtMiAgLT4gLTIKK2RkbWluMDEyIG1pbiAgIDAgIC0xICAtPiAtMQorZGRtaW4wMTMgbWluICAgMCAgIDAgIC0+ICAwCitkZG1pbjAxNCBtaW4gICAwICAgMSAgLT4gIDAKK2RkbWluMDE1IG1pbiAgIDAgICAyICAtPiAgMAorZGRtaW4wMTYgbWluICAgMSAgLTIgIC0+IC0yCitkZG1pbjAxNyBtaW4gICAxICAtMSAgLT4gLTEKK2RkbWluMDE4IG1pbiAgIDEgICAwICAtPiAgMAorZGRtaW4wMTkgbWluICAgMSAgIDEgIC0+ICAxCitkZG1pbjAyMCBtaW4gICAxICAgMiAgLT4gIDEKK2RkbWluMDIxIG1pbiAgIDIgIC0yICAtPiAtMgorZGRtaW4wMjIgbWluICAgMiAgLTEgIC0+IC0xCitkZG1pbjAyMyBtaW4gICAyICAgMCAgLT4gIDAKK2RkbWluMDI1IG1pbiAgIDIgICAxICAtPiAgMQorZGRtaW4wMjYgbWluICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZG1pbjAzMCBtaW4gICAwICAgICAwICAgLT4gIDAKK2RkbWluMDMxIG1pbiAgIDAgICAgLTAgICAtPiAtMAorZGRtaW4wMzIgbWluICAgMCAgICAtMC4wIC0+IC0wLjAKK2RkbWluMDMzIG1pbiAgIDAgICAgIDAuMCAtPiAgMC4wCitkZG1pbjAzNCBtaW4gIC0wICAgICAwICAgLT4gLTAKK2RkbWluMDM1IG1pbiAgLTAgICAgLTAgICAtPiAtMAorZGRtaW4wMzYgbWluICAtMCAgICAtMC4wIC0+IC0wCitkZG1pbjAzNyBtaW4gIC0wICAgICAwLjAgLT4gLTAKK2RkbWluMDM4IG1pbiAgIDAuMCAgIDAgICAtPiAgMC4wCitkZG1pbjAzOSBtaW4gICAwLjAgIC0wICAgLT4gLTAKK2RkbWluMDQwIG1pbiAgIDAuMCAgLTAuMCAtPiAtMC4wCitkZG1pbjA0MSBtaW4gICAwLjAgICAwLjAgLT4gIDAuMAorZGRtaW4wNDIgbWluICAtMC4wICAgMCAgIC0+IC0wLjAKK2RkbWluMDQzIG1pbiAgLTAuMCAgLTAgICAtPiAtMAorZGRtaW4wNDQgbWluICAtMC4wICAtMC4wIC0+IC0wLjAKK2RkbWluMDQ1IG1pbiAgLTAuMCAgIDAuMCAtPiAtMC4wCisKK2RkbWluMDQ2IG1pbiAgIDBFMSAgLTBFMSAtPiAtMEUrMQorZGRtaW4wNDcgbWluICAtMEUxICAgMEUyIC0+IC0wRSsxCitkZG1pbjA0OCBtaW4gICAwRTIgICAwRTEgLT4gIDBFKzEKK2RkbWluMDQ5IG1pbiAgIDBFMSAgIDBFMiAtPiAgMEUrMQorZGRtaW4wNTAgbWluICAtMEUzICAtMEUyIC0+IC0wRSszCitkZG1pbjA1MSBtaW4gIC0wRTIgIC0wRTMgLT4gLTBFKzMKKworLS0gU3BlY2lhbHMKK2RkbWluMDkwIG1pbiAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjA5MSBtaW4gIEluZiAgLTEwMDAgIC0+IC0xMDAwCitkZG1pbjA5MiBtaW4gIEluZiAgLTEgICAgIC0+IC0xCitkZG1pbjA5MyBtaW4gIEluZiAgLTAgICAgIC0+IC0wCitkZG1pbjA5NCBtaW4gIEluZiAgIDAgICAgIC0+ICAwCitkZG1pbjA5NSBtaW4gIEluZiAgIDEgICAgIC0+ICAxCitkZG1pbjA5NiBtaW4gIEluZiAgIDEwMDAgIC0+ICAxMDAwCitkZG1pbjA5NyBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtaW4wOTggbWluIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZGRtaW4wOTkgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTAwIG1pbiAtMSAgICAgSW5mICAgLT4gLTEKK2RkbWluMTAxIG1pbiAtMCAgICAgSW5mICAgLT4gLTAKK2RkbWluMTAyIG1pbiAgMCAgICAgSW5mICAgLT4gIDAKK2RkbWluMTAzIG1pbiAgMSAgICAgSW5mICAgLT4gIDEKK2RkbWluMTA0IG1pbiAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK2RkbWluMTA1IG1pbiAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbWluMTIwIG1pbiAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEyMSBtaW4gLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjIgbWluIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RkbWluMTIzIG1pbiAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZG1pbjEyNCBtaW4gLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjUgbWluIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RkbWluMTI2IG1pbiAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZG1pbjEyNyBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjggbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTI5IG1pbiAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEzMCBtaW4gLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMzEgbWluIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTMyIG1pbiAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEzMyBtaW4gIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMzQgbWluICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTM1IG1pbiAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZGRtaW4xNDEgbWluICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5CitkZG1pbjE0MiBtaW4gIE5hTiAtMTAwMCAgIC0+ICAtMTAwMAorZGRtaW4xNDMgbWluICBOYU4gLTEgICAgICAtPiAgLTEKK2RkbWluMTQ0IG1pbiAgTmFOIC0wICAgICAgLT4gIC0wCitkZG1pbjE0NSBtaW4gIE5hTiAgMCAgICAgIC0+ICAwCitkZG1pbjE0NiBtaW4gIE5hTiAgMSAgICAgIC0+ICAxCitkZG1pbjE0NyBtaW4gIE5hTiAgMTAwMCAgIC0+ICAxMDAwCitkZG1pbjE0OCBtaW4gIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorZGRtaW4xNDkgbWluICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZG1pbjE1MCBtaW4gLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorZGRtaW4xNTEgbWluIC0xMDAwIE5hTiAgICAtPiAtMTAwMAorZGRtaW4xNTIgbWluIC0xICAgLU5hTiAgICAtPiAtMQorZGRtaW4xNTMgbWluIC0wICAgIE5hTiAgICAtPiAtMAorZGRtaW4xNTQgbWluICAwICAgLU5hTiAgICAtPiAgMAorZGRtaW4xNTUgbWluICAxICAgIE5hTiAgICAtPiAgMQorZGRtaW4xNTYgbWluICAxMDAwIE5hTiAgICAtPiAgMTAwMAorZGRtaW4xNTcgbWluICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworZGRtaW4xNjEgbWluICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNjIgbWluICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNjMgbWluICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNjQgbWluICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNjUgbWluIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNjYgbWluIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNjcgbWluICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNjggbWluICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNjkgbWluICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNzAgbWluICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNzEgbWluIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNzIgbWluIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNzMgbWluIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNzQgbWluIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNzUgbWluICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNzYgbWluICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNzcgbWluICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNzggbWluICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xNzkgbWluICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZG1pbjE4MSBtaW4gIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjE4MiBtaW4gLU5hTjggICAgOTk5MCAgLT4gIDk5OTAKK2RkbWluMTgzIG1pbiAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRtaW4xODQgbWluICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xCitkZG1pbjE4NSBtaW4gIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyCitkZG1pbjE4NiBtaW4gLU5hTjMgICAgTmFONiAgLT4gLU5hTjMKK2RkbWluMTg3IG1pbiAtTmFONDQgICBOYU43ICAtPiAtTmFONDQKKworZGRtaW4xODggbWluIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQorZGRtaW4xODkgbWluIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5CitkZG1pbjE5MCBtaW4gIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK2RkbWluMTkxIG1pbiAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE5MiBtaW4gIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTMgbWluIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTk0IG1pbiAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE5NSBtaW4gIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTYgbWluIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTk3IG1pbiAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE5OCBtaW4gIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTkgbWluICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb2xkIHJvdW5kaW5nIGNoZWNrcworZGRtaW4yMjEgbWluIC0xMjM0NTY3ODAwMCAxICAtPiAtMTIzNDU2NzgwMDAKK2RkbWluMjIyIG1pbiAxIC0xMjM0NTY3ODAwMCAgLT4gLTEyMzQ1Njc4MDAwCitkZG1pbjIyMyBtaW4gLTEyMzQ1Njc4MDAgIDEgIC0+IC0xMjM0NTY3ODAwCitkZG1pbjIyNCBtaW4gMSAtMTIzNDU2NzgwMCAgIC0+IC0xMjM0NTY3ODAwCitkZG1pbjIyNSBtaW4gLTEyMzQ1Njc4OTAgIDEgIC0+IC0xMjM0NTY3ODkwCitkZG1pbjIyNiBtaW4gMSAtMTIzNDU2Nzg5MCAgIC0+IC0xMjM0NTY3ODkwCitkZG1pbjIyNyBtaW4gLTEyMzQ1Njc4OTEgIDEgIC0+IC0xMjM0NTY3ODkxCitkZG1pbjIyOCBtaW4gMSAtMTIzNDU2Nzg5MSAgIC0+IC0xMjM0NTY3ODkxCitkZG1pbjIyOSBtaW4gLTEyMzQ1Njc4OTAxIDEgIC0+IC0xMjM0NTY3ODkwMQorZGRtaW4yMzAgbWluIDEgLTEyMzQ1Njc4OTAxICAtPiAtMTIzNDU2Nzg5MDEKK2RkbWluMjMxIG1pbiAtMTIzNDU2Nzg5NiAgMSAgLT4gLTEyMzQ1Njc4OTYKK2RkbWluMjMyIG1pbiAxIC0xMjM0NTY3ODk2ICAgLT4gLTEyMzQ1Njc4OTYKK2RkbWluMjMzIG1pbiAxMjM0NTY3ODkxICAxICAgLT4gMQorZGRtaW4yMzQgbWluIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkZG1pbjIzNSBtaW4gMTIzNDU2Nzg5MDEgMSAgIC0+IDEKK2RkbWluMjM2IG1pbiAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZGRtaW4yMzcgbWluIDEyMzQ1Njc4OTYgIDEgICAtPiAxCitkZG1pbjIzOCBtaW4gMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBleGFtcGxlcworZGRtaW4yODAgbWluICczJyAgICcyJyAgLT4gICcyJworZGRtaW4yODEgbWluICctMTAnICczJyAgLT4gICctMTAnCitkZG1pbjI4MiBtaW4gJzEuMCcgJzEnICAtPiAgJzEuMCcKK2RkbWluMjgzIG1pbiAnMScgJzEuMCcgIC0+ICAnMS4wJworZGRtaW4yODQgbWluICc3JyAnTmFOJyAgLT4gICc3JworCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK2RkbWluNDAxIG1pbiAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQorZGRtaW40MDIgbWluICAxLjEgICAgMSAgICAgICAtPiAgMQorZGRtaW40MDMgbWluICAxICAgICAgMS4wICAgICAtPiAgMS4wCitkZG1pbjQwNCBtaW4gIDEuMCAgICAwLjEgICAgIC0+ICAwLjEKK2RkbWluNDA1IG1pbiAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTAKK2RkbWluNDA2IG1pbiAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwCitkZG1pbjQwNyBtaW4gIDAuMTAgICAwICAgICAgIC0+ICAwCitkZG1pbjQwOCBtaW4gIDAgICAgICAwLjAgICAgIC0+ICAwLjAKK2RkbWluNDA5IG1pbiAgMC4wICAgLTAgICAgICAgLT4gLTAKK2RkbWluNDEwIG1pbiAgMC4wICAgLTAuMCAgICAgLT4gLTAuMAorZGRtaW40MTEgbWluICAwLjAwICAtMC4wICAgICAtPiAtMC4wCitkZG1pbjQxMiBtaW4gIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwCitkZG1pbjQxMyBtaW4gIDAgICAgIC0wLjAgICAgIC0+IC0wLjAKK2RkbWluNDE0IG1pbiAgMCAgICAgLTAgICAgICAgLT4gLTAKK2RkbWluNDE1IG1pbiAtMC4wICAgLTAgICAgICAgLT4gLTAKK2RkbWluNDE2IG1pbiAtMCAgICAgLTAuMTAwICAgLT4gLTAuMTAwCitkZG1pbjQxNyBtaW4gLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwCitkZG1pbjQxOCBtaW4gLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEKK2RkbWluNDE5IG1pbiAtMC4xICAgLTEuMCAgICAgLT4gLTEuMAorZGRtaW40MjAgbWluIC0xLjAgICAtMSAgICAgICAtPiAtMQorZGRtaW40MjEgbWluIC0xICAgICAtMS4xICAgICAtPiAtMS4xCitkZG1pbjQyMyBtaW4gLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitkZG1pbjQzMSBtaW4gIDEuMSAgICBJbmYgICAgIC0+ICAxLjEKK2RkbWluNDMyIG1pbiAgMSAgICAgIDEuMSAgICAgLT4gIDEKK2RkbWluNDMzIG1pbiAgMS4wICAgIDEgICAgICAgLT4gIDEuMAorZGRtaW40MzQgbWluICAwLjEgICAgMS4wICAgICAtPiAgMC4xCitkZG1pbjQzNSBtaW4gIDAuMTAgICAwLjEgICAgIC0+ICAwLjEwCitkZG1pbjQzNiBtaW4gIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwMAorZGRtaW40MzcgbWluICAwICAgICAgMC4xMCAgICAtPiAgMAorZGRtaW40MzggbWluICAwLjAgICAgMCAgICAgICAtPiAgMC4wCitkZG1pbjQzOSBtaW4gLTAgICAgICAwLjAgICAgIC0+IC0wCitkZG1pbjQ0MCBtaW4gLTAuMCAgICAwLjAgICAgIC0+IC0wLjAKK2RkbWluNDQxIG1pbiAtMC4wICAgIDAuMDAgICAgLT4gLTAuMAorZGRtaW40NDIgbWluIC0wLjAwICAgMC4wICAgICAtPiAtMC4wMAorZGRtaW40NDMgbWluIC0wLjAgICAgMCAgICAgICAtPiAtMC4wCitkZG1pbjQ0NCBtaW4gLTAgICAgICAwICAgICAgIC0+IC0wCitkZG1pbjQ0NSBtaW4gLTAgICAgIC0wLjAgICAgIC0+IC0wCitkZG1pbjQ0NiBtaW4gLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMAorZGRtaW40NDcgbWluIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMAorZGRtaW40NDggbWluIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xCitkZG1pbjQ0OSBtaW4gLTEuMCAgIC0wLjEgICAgIC0+IC0xLjAKK2RkbWluNDUwIG1pbiAtMSAgICAgLTEuMCAgICAgLT4gLTEKK2RkbWluNDUxIG1pbiAtMS4xICAgLTEgICAgICAgLT4gLTEuMQorZGRtaW40NTMgbWluIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkKKy0tIGxhcmdpZXMKK2RkbWluNDYwIG1pbiAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDAKK2RkbWluNDYxIG1pbiAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RkbWluNDYyIG1pbiAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKK2RkbWluNDYzIG1pbiAgMUUrMyAgLTM4NCAgICAtPiAtMzg0CitkZG1pbjQ2NCBtaW4gLTM4NCAgIDFFKzMgICAgLT4gLTM4NAorZGRtaW40NjUgbWluIC0xRSszICAgMTAwMCAgICAtPiAtMUUrMworZGRtaW40NjYgbWluIC0zODQgIC0xRSszICAgIC0+IC0xRSszCitkZG1pbjQ2NyBtaW4gLTFFKzMgIC0zODQgICAgLT4gLTFFKzMKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitkZG1pbjQ3MSBtaW4gICAgICAxLjAgICAgICAgMC4xICAtPiAwLjEKK2RkbWluNDcyIG1pbiAgICAgIDAuMSAgICAgICAxLjAgIC0+IDAuMQorZGRtaW40NzMgbWluICAgICAxMC4wICAgICAgIDAuMSAgLT4gMC4xCitkZG1pbjQ3NCBtaW4gICAgICAwLjEgICAgICAxMC4wICAtPiAwLjEKK2RkbWluNDc1IG1pbiAgICAgIDEwMCAgICAgICAxLjAgIC0+IDEuMAorZGRtaW40NzYgbWluICAgICAgMS4wICAgICAgIDEwMCAgLT4gMS4wCitkZG1pbjQ3NyBtaW4gICAgIDEwMDAgICAgICAxMC4wICAtPiAxMC4wCitkZG1pbjQ3OCBtaW4gICAgIDEwLjAgICAgICAxMDAwICAtPiAxMC4wCitkZG1pbjQ3OSBtaW4gICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAuMAorZGRtaW40ODAgbWluICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwLjAKK2RkbWluNDgxIG1pbiAgIDEwMDAwMCAgICAxMDAwLjAgIC0+IDEwMDAuMAorZGRtaW40ODIgbWluICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMC4wCitkZG1pbjQ4MyBtaW4gIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMC4wCitkZG1pbjQ4NCBtaW4gIDEwMDAwLjAgICAxMDAwMDAwICAtPiAxMDAwMC4wCisKKy0tIHN1Ym5vcm1hbHMKK2RkbWluNTEwIG1pbiAgMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtaW41MTEgbWluICAwLjFFLTM4MyAgICAgICAgMCAgLT4gICAwCitkZG1pbjUxMiBtaW4gIDAuMTBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbWluNTEzIG1pbiAgMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtaW41MTQgbWluICAwLjAxRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1pbjUxNSBtaW4gIDAuOTk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbWluNTE2IG1pbiAgMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtaW41MTcgbWluICAwLjAwOUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1pbjUxOCBtaW4gIDAuMDAxRS0zODMgICAgICAwICAtPiAgIDAKK2RkbWluNTE5IG1pbiAgMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgMAorZGRtaW41MjAgbWluICAwLjAwMDFFLTM4MyAgICAgMCAgLT4gICAwCisKK2RkbWluNTMwIG1pbiAtMS4wMEUtMzgzICAgICAgIDAgIC0+ICAtMS4wMEUtMzgzCitkZG1pbjUzMSBtaW4gLTAuMUUtMzgzICAgICAgICAwICAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwKK2RkbWluNTMyIG1pbiAtMC4xMEUtMzgzICAgICAgIDAgIC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbAorZGRtaW41MzMgbWluIC0wLjEwMEUtMzgzICAgICAgMCAgLT4gIC0xLjAwRS0zODQgU3Vibm9ybWFsCitkZG1pbjUzNCBtaW4gLTAuMDFFLTM4MyAgICAgICAwICAtPiAgLTFFLTM4NSAgICBTdWJub3JtYWwKK2RkbWluNTM1IG1pbiAtMC45OTlFLTM4MyAgICAgIDAgIC0+ICAtOS45OUUtMzg0IFN1Ym5vcm1hbAorZGRtaW41MzYgbWluIC0wLjA5OUUtMzgzICAgICAgMCAgLT4gIC05LjlFLTM4NSAgU3Vibm9ybWFsCitkZG1pbjUzNyBtaW4gLTAuMDA5RS0zODMgICAgICAwICAtPiAgLTlFLTM4NiAgICBTdWJub3JtYWwKK2RkbWluNTM4IG1pbiAtMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAtMUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRtaW41MzkgbWluIC0wLjAwMDlFLTM4MyAgICAgMCAgLT4gIC05RS0zODcgICAgU3Vibm9ybWFsCitkZG1pbjU0MCBtaW4gLTAuMDAwMUUtMzgzICAgICAwICAtPiAgLTFFLTM4NyAgICBTdWJub3JtYWwKKworCistLSBOdWxsIHRlc3RzCitkZG1pbjkwMCBtaW4gMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjkwMSBtaW4gICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW5NYWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbk1hZy5kZWNUZXN0CmluZGV4IDU1MzdjYzguLjEwMTJmMWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbk1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbk1hZy5kZWNUZXN0CkBAIC0xLDI5MyArMSwyOTMgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkTWluTWFnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1pbm51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCi0tLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kZG1uZzAwMSBtaW5tYWcgIC0yICAtMiAgLT4gLTINCi1kZG1uZzAwMiBtaW5tYWcgIC0yICAtMSAgLT4gLTENCi1kZG1uZzAwMyBtaW5tYWcgIC0yICAgMCAgLT4gIDANCi1kZG1uZzAwNCBtaW5tYWcgIC0yICAgMSAgLT4gIDENCi1kZG1uZzAwNSBtaW5tYWcgIC0yICAgMiAgLT4gLTINCi1kZG1uZzAwNiBtaW5tYWcgIC0xICAtMiAgLT4gLTENCi1kZG1uZzAwNyBtaW5tYWcgIC0xICAtMSAgLT4gLTENCi1kZG1uZzAwOCBtaW5tYWcgIC0xICAgMCAgLT4gIDANCi1kZG1uZzAwOSBtaW5tYWcgIC0xICAgMSAgLT4gLTENCi1kZG1uZzAxMCBtaW5tYWcgIC0xICAgMiAgLT4gLTENCi1kZG1uZzAxMSBtaW5tYWcgICAwICAtMiAgLT4gIDANCi1kZG1uZzAxMiBtaW5tYWcgICAwICAtMSAgLT4gIDANCi1kZG1uZzAxMyBtaW5tYWcgICAwICAgMCAgLT4gIDANCi1kZG1uZzAxNCBtaW5tYWcgICAwICAgMSAgLT4gIDANCi1kZG1uZzAxNSBtaW5tYWcgICAwICAgMiAgLT4gIDANCi1kZG1uZzAxNiBtaW5tYWcgICAxICAtMiAgLT4gIDENCi1kZG1uZzAxNyBtaW5tYWcgICAxICAtMSAgLT4gLTENCi1kZG1uZzAxOCBtaW5tYWcgICAxICAgMCAgLT4gIDANCi1kZG1uZzAxOSBtaW5tYWcgICAxICAgMSAgLT4gIDENCi1kZG1uZzAyMCBtaW5tYWcgICAxICAgMiAgLT4gIDENCi1kZG1uZzAyMSBtaW5tYWcgICAyICAtMiAgLT4gLTINCi1kZG1uZzAyMiBtaW5tYWcgICAyICAtMSAgLT4gLTENCi1kZG1uZzAyMyBtaW5tYWcgICAyICAgMCAgLT4gIDANCi1kZG1uZzAyNSBtaW5tYWcgICAyICAgMSAgLT4gIDENCi1kZG1uZzAyNiBtaW5tYWcgICAyICAgMiAgLT4gIDINCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWRkbW5nMDMwIG1pbm1hZyAgIDAgICAgIDAgICAtPiAgMA0KLWRkbW5nMDMxIG1pbm1hZyAgIDAgICAgLTAgICAtPiAtMA0KLWRkbW5nMDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wDQotZGRtbmcwMzMgbWlubWFnICAgMCAgICAgMC4wIC0+ICAwLjANCi1kZG1uZzAzNCBtaW5tYWcgIC0wICAgICAwICAgLT4gLTANCi1kZG1uZzAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTANCi1kZG1uZzAzNiBtaW5tYWcgIC0wICAgIC0wLjAgLT4gLTANCi1kZG1uZzAzNyBtaW5tYWcgIC0wICAgICAwLjAgLT4gLTANCi1kZG1uZzAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMA0KLWRkbW5nMDM5IG1pbm1hZyAgIDAuMCAgLTAgICAtPiAtMA0KLWRkbW5nMDQwIG1pbm1hZyAgIDAuMCAgLTAuMCAtPiAtMC4wDQotZGRtbmcwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjANCi1kZG1uZzA0MiBtaW5tYWcgIC0wLjAgICAwICAgLT4gLTAuMA0KLWRkbW5nMDQzIG1pbm1hZyAgLTAuMCAgLTAgICAtPiAtMA0KLWRkbW5nMDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wDQotZGRtbmcwNDUgbWlubWFnICAtMC4wICAgMC4wIC0+IC0wLjANCi0NCi1kZG1uZzA0NiBtaW5tYWcgICAwRTEgIC0wRTEgLT4gLTBFKzENCi1kZG1uZzA0NyBtaW5tYWcgIC0wRTEgICAwRTIgLT4gLTBFKzENCi1kZG1uZzA0OCBtaW5tYWcgICAwRTIgICAwRTEgLT4gIDBFKzENCi1kZG1uZzA0OSBtaW5tYWcgICAwRTEgICAwRTIgLT4gIDBFKzENCi1kZG1uZzA1MCBtaW5tYWcgIC0wRTMgIC0wRTIgLT4gLTBFKzMNCi1kZG1uZzA1MSBtaW5tYWcgIC0wRTIgIC0wRTMgLT4gLTBFKzMNCi0NCi0tLSBTcGVjaWFscw0KLWRkbW5nMDkwIG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtbmcwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMA0KLWRkbW5nMDkyIG1pbm1hZyAgSW5mICAtMSAgICAgLT4gLTENCi1kZG1uZzA5MyBtaW5tYWcgIEluZiAgLTAgICAgIC0+IC0wDQotZGRtbmcwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMA0KLWRkbW5nMDk1IG1pbm1hZyAgSW5mICAgMSAgICAgLT4gIDENCi1kZG1uZzA5NiBtaW5tYWcgIEluZiAgIDEwMDAgIC0+ICAxMDAwDQotZGRtbmcwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG1uZzA5OCBtaW5tYWcgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQotZGRtbmcwOTkgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZG1uZzEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xDQotZGRtbmcxMDEgbWlubWFnIC0wICAgICBJbmYgICAtPiAtMA0KLWRkbW5nMTAyIG1pbm1hZyAgMCAgICAgSW5mICAgLT4gIDANCi1kZG1uZzEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxDQotZGRtbmcxMDQgbWlubWFnICAxMDAwICBJbmYgICAtPiAgMTAwMA0KLWRkbW5nMTA1IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRtbmcxMjAgbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG1uZzEyMSBtaW5tYWcgLUluZiAgLTEwMDAgIC0+IC0xMDAwDQotZGRtbmcxMjIgbWlubWFnIC1JbmYgIC0xICAgICAtPiAtMQ0KLWRkbW5nMTIzIG1pbm1hZyAtSW5mICAtMCAgICAgLT4gLTANCi1kZG1uZzEyNCBtaW5tYWcgLUluZiAgIDAgICAgIC0+ICAwDQotZGRtbmcxMjUgbWlubWFnIC1JbmYgICAxICAgICAtPiAgMQ0KLWRkbW5nMTI2IG1pbm1hZyAtSW5mICAgMTAwMCAgLT4gIDEwMDANCi1kZG1uZzEyNyBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbW5nMTI4IG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtbmcxMjkgbWlubWFnIC0xMDAwIC1JbmYgICAtPiAtMTAwMA0KLWRkbW5nMTMwIG1pbm1hZyAtMSAgICAtSW5mICAgLT4gLTENCi1kZG1uZzEzMSBtaW5tYWcgLTAgICAgLUluZiAgIC0+IC0wDQotZGRtbmcxMzIgbWlubWFnICAwICAgIC1JbmYgICAtPiAgMA0KLWRkbW5nMTMzIG1pbm1hZyAgMSAgICAtSW5mICAgLT4gIDENCi1kZG1uZzEzNCBtaW5tYWcgIDEwMDAgLUluZiAgIC0+ICAxMDAwDQotZGRtbmcxMzUgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi0NCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCi1kZG1uZzE0MSBtaW5tYWcgIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkNCi1kZG1uZzE0MiBtaW5tYWcgIE5hTiAtMTAwMCAgIC0+ICAtMTAwMA0KLWRkbW5nMTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xDQotZGRtbmcxNDQgbWlubWFnICBOYU4gLTAgICAgICAtPiAgLTANCi1kZG1uZzE0NSBtaW5tYWcgIE5hTiAgMCAgICAgIC0+ICAwDQotZGRtbmcxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQ0KLWRkbW5nMTQ3IG1pbm1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDANCi1kZG1uZzE0OCBtaW5tYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQ0KLWRkbW5nMTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRkbW5nMTUwIG1pbm1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5DQotZGRtbmcxNTEgbWlubWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMA0KLWRkbW5nMTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTENCi1kZG1uZzE1MyBtaW5tYWcgLTAgICAgTmFOICAgIC0+IC0wDQotZGRtbmcxNTQgbWlubWFnICAwICAgLU5hTiAgICAtPiAgMA0KLWRkbW5nMTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDENCi1kZG1uZzE1NiBtaW5tYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwDQotZGRtbmcxNTcgbWlubWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkNCi0NCi1kZG1uZzE2MSBtaW5tYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNjIgbWlubWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTYzIG1pbm1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE2NCBtaW5tYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNjUgbWlubWFnIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTY2IG1pbm1hZyAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE2NyBtaW5tYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNjggbWlubWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTY5IG1pbm1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE3MCBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNzEgbWlubWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTcyIG1pbm1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE3MyBtaW5tYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNzQgbWlubWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTc1IG1pbm1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE3NiBtaW5tYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNzcgbWlubWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTc4IG1pbm1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE3OSBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkbW5nMTgxIG1pbm1hZyAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG1uZzE4MiBtaW5tYWcgLU5hTjggICAgOTk5MCAgLT4gIDk5OTANCi1kZG1uZzE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRtbmcxODQgbWlubWFnICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xDQotZGRtbmcxODUgbWlubWFnICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMg0KLWRkbW5nMTg2IG1pbm1hZyAtTmFOMyAgICBOYU42ICAtPiAtTmFOMw0KLWRkbW5nMTg3IG1pbm1hZyAtTmFONDQgICBOYU43ICAtPiAtTmFONDQNCi0NCi1kZG1uZzE4OCBtaW5tYWcgLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5DQotZGRtbmcxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5DQotZGRtbmcxOTAgbWlubWFnICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbW5nMTkxIG1pbm1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE5MyBtaW5tYWcgLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTk0IG1pbm1hZyAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE5NiBtaW5tYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTk3IG1pbm1hZyAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE5OSBtaW5tYWcgIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG9sZCByb3VuZGluZyBjaGVja3MNCi1kZG1uZzIyMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDENCi1kZG1uZzIyMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDENCi1kZG1uZzIyMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDENCi1kZG1uZzIyNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDENCi1kZG1uZzIyNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDENCi1kZG1uZzIyNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDENCi1kZG1uZzIyNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDENCi1kZG1uZzIyOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDENCi1kZG1uZzIyOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDENCi1kZG1uZzIzMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDENCi1kZG1uZzIzMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDENCi1kZG1uZzIzMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDENCi1kZG1uZzIzMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDENCi1kZG1uZzIzNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDENCi1kZG1uZzIzNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDENCi1kZG1uZzIzNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDENCi1kZG1uZzIzNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDENCi1kZG1uZzIzOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDENCi0NCi0tLSBmcm9tIGV4YW1wbGVzDQotZGRtbmcyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJw0KLWRkbW5nMjgxIG1pbm1hZyAnLTEwJyAnMycgIC0+ICAnMycNCi1kZG1uZzI4MiBtaW5tYWcgJzEuMCcgJzEnICAtPiAgJzEuMCcNCi1kZG1uZzI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcNCi1kZG1uZzI4NCBtaW5tYWcgJzcnICdOYU4nICAtPiAgJzcnDQotDQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UNCi0tLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQ0KLWRkbW5nNDAxIG1pbm1hZyAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQ0KLWRkbW5nNDAyIG1pbm1hZyAgMS4xICAgIDEgICAgICAgLT4gIDENCi1kZG1uZzQwMyBtaW5tYWcgIDEgICAgICAxLjAgICAgIC0+ICAxLjANCi1kZG1uZzQwNCBtaW5tYWcgIDEuMCAgICAwLjEgICAgIC0+ICAwLjENCi1kZG1uZzQwNSBtaW5tYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwDQotZGRtbmc0MDYgbWlubWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDANCi1kZG1uZzQwNyBtaW5tYWcgIDAuMTAgICAwICAgICAgIC0+ICAwDQotZGRtbmc0MDggbWlubWFnICAwICAgICAgMC4wICAgICAtPiAgMC4wDQotZGRtbmc0MDkgbWlubWFnICAwLjAgICAtMCAgICAgICAtPiAtMA0KLWRkbW5nNDEwIG1pbm1hZyAgMC4wICAgLTAuMCAgICAgLT4gLTAuMA0KLWRkbW5nNDExIG1pbm1hZyAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMA0KLWRkbW5nNDEyIG1pbm1hZyAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDANCi1kZG1uZzQxMyBtaW5tYWcgIDAgICAgIC0wLjAgICAgIC0+IC0wLjANCi1kZG1uZzQxNCBtaW5tYWcgIDAgICAgIC0wICAgICAgIC0+IC0wDQotZGRtbmc0MTUgbWlubWFnIC0wLjAgICAtMCAgICAgICAtPiAtMA0KLWRkbW5nNDE2IG1pbm1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTANCi1kZG1uZzQxNyBtaW5tYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwDQotZGRtbmc0MTggbWlubWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xDQotZGRtbmc0MTkgbWlubWFnIC0wLjEgICAtMS4wICAgICAtPiAtMC4xDQotZGRtbmc0MjAgbWlubWFnIC0xLjAgICAtMSAgICAgICAtPiAtMQ0KLWRkbW5nNDIxIG1pbm1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTENCi1kZG1uZzQyMyBtaW5tYWcgLTEuMSAgIC1JbmYgICAgIC0+IC0xLjENCi0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCi1kZG1uZzQzMSBtaW5tYWcgIDEuMSAgICBJbmYgICAgIC0+ICAxLjENCi1kZG1uZzQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxDQotZGRtbmc0MzMgbWlubWFnICAxLjAgICAgMSAgICAgICAtPiAgMS4wDQotZGRtbmc0MzQgbWlubWFnICAwLjEgICAgMS4wICAgICAtPiAgMC4xDQotZGRtbmc0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMA0KLWRkbW5nNDM2IG1pbm1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwDQotZGRtbmc0MzcgbWlubWFnICAwICAgICAgMC4xMCAgICAtPiAgMA0KLWRkbW5nNDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMA0KLWRkbW5nNDM5IG1pbm1hZyAtMCAgICAgIDAuMCAgICAgLT4gLTANCi1kZG1uZzQ0MCBtaW5tYWcgLTAuMCAgICAwLjAgICAgIC0+IC0wLjANCi1kZG1uZzQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjANCi1kZG1uZzQ0MiBtaW5tYWcgLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwDQotZGRtbmc0NDMgbWlubWFnIC0wLjAgICAgMCAgICAgICAtPiAtMC4wDQotZGRtbmc0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMA0KLWRkbW5nNDQ1IG1pbm1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTANCi1kZG1uZzQ0NiBtaW5tYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wDQotZGRtbmc0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMA0KLWRkbW5nNDQ4IG1pbm1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQ0KLWRkbW5nNDQ5IG1pbm1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQ0KLWRkbW5nNDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTENCi1kZG1uZzQ1MSBtaW5tYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xDQotZGRtbmc0NTMgbWlubWFnIC1JbmYgICAtMS4xICAgICAtPiAtMS4xDQotLS0gbGFyZ2llcw0KLWRkbW5nNDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDANCi1kZG1uZzQ2MSBtaW5tYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQotZGRtbmc0NjIgbWlubWFnICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMw0KLWRkbW5nNDYzIG1pbm1hZyAgMUUrMyAgIC0zODQgICAgLT4gLTM4NA0KLWRkbW5nNDY0IG1pbm1hZyAtMzg0ICAgIDFFKzMgICAgLT4gLTM4NA0KLWRkbW5nNDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMNCi1kZG1uZzQ2NiBtaW5tYWcgLTM4NCAgIC0xRSszICAgIC0+IC0zODQNCi1kZG1uZzQ2NyBtaW5tYWcgLTFFKzMgICAtMzg0ICAgIC0+IC0zODQNCi0NCi0tLSBzdWJub3JtYWxzDQotZGRtbmc1MTAgbWlubWFnICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAwDQotZGRtbmc1MTEgbWlubWFnICAwLjFFLTM4MyAgICAgICAgMCAgLT4gICAwDQotZGRtbmc1MTIgbWlubWFnICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAwDQotZGRtbmc1MTMgbWlubWFnICAwLjEwMEUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtbmc1MTQgbWlubWFnICAwLjAxRS0zODMgICAgICAgMCAgLT4gICAwDQotZGRtbmc1MTUgbWlubWFnICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtbmc1MTYgbWlubWFnICAwLjA5OUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtbmc1MTcgbWlubWFnICAwLjAwOUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtbmc1MTggbWlubWFnICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtbmc1MTkgbWlubWFnICAwLjAwMDlFLTM4MyAgICAgMCAgLT4gICAwDQotZGRtbmc1MjAgbWlubWFnICAwLjAwMDFFLTM4MyAgICAgMCAgLT4gICAwDQotDQotZGRtbmc1MzAgbWlubWFnIC0xLjAwRS0zODMgICAgICAgMCAgLT4gICAwDQotZGRtbmc1MzEgbWlubWFnIC0wLjFFLTM4MyAgICAgICAgMCAgLT4gICAwDQotZGRtbmc1MzIgbWlubWFnIC0wLjEwRS0zODMgICAgICAgMCAgLT4gICAwDQotZGRtbmc1MzMgbWlubWFnIC0wLjEwMEUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtbmc1MzQgbWlubWFnIC0wLjAxRS0zODMgICAgICAgMCAgLT4gICAwDQotZGRtbmc1MzUgbWlubWFnIC0wLjk5OUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtbmc1MzYgbWlubWFnIC0wLjA5OUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtbmc1MzcgbWlubWFnIC0wLjAwOUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtbmc1MzggbWlubWFnIC0wLjAwMUUtMzgzICAgICAgMCAgLT4gICAwDQotZGRtbmc1MzkgbWlubWFnIC0wLjAwMDlFLTM4MyAgICAgMCAgLT4gICAwDQotZGRtbmc1NDAgbWlubWFnIC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gICAwDQotDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzkwMSBtaW5tYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZE1pbk1hZy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtaW5udW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRtbmcwMDEgbWlubWFnICAtMiAgLTIgIC0+IC0yCitkZG1uZzAwMiBtaW5tYWcgIC0yICAtMSAgLT4gLTEKK2RkbW5nMDAzIG1pbm1hZyAgLTIgICAwICAtPiAgMAorZGRtbmcwMDQgbWlubWFnICAtMiAgIDEgIC0+ICAxCitkZG1uZzAwNSBtaW5tYWcgIC0yICAgMiAgLT4gLTIKK2RkbW5nMDA2IG1pbm1hZyAgLTEgIC0yICAtPiAtMQorZGRtbmcwMDcgbWlubWFnICAtMSAgLTEgIC0+IC0xCitkZG1uZzAwOCBtaW5tYWcgIC0xICAgMCAgLT4gIDAKK2RkbW5nMDA5IG1pbm1hZyAgLTEgICAxICAtPiAtMQorZGRtbmcwMTAgbWlubWFnICAtMSAgIDIgIC0+IC0xCitkZG1uZzAxMSBtaW5tYWcgICAwICAtMiAgLT4gIDAKK2RkbW5nMDEyIG1pbm1hZyAgIDAgIC0xICAtPiAgMAorZGRtbmcwMTMgbWlubWFnICAgMCAgIDAgIC0+ICAwCitkZG1uZzAxNCBtaW5tYWcgICAwICAgMSAgLT4gIDAKK2RkbW5nMDE1IG1pbm1hZyAgIDAgICAyICAtPiAgMAorZGRtbmcwMTYgbWlubWFnICAgMSAgLTIgIC0+ICAxCitkZG1uZzAxNyBtaW5tYWcgICAxICAtMSAgLT4gLTEKK2RkbW5nMDE4IG1pbm1hZyAgIDEgICAwICAtPiAgMAorZGRtbmcwMTkgbWlubWFnICAgMSAgIDEgIC0+ICAxCitkZG1uZzAyMCBtaW5tYWcgICAxICAgMiAgLT4gIDEKK2RkbW5nMDIxIG1pbm1hZyAgIDIgIC0yICAtPiAtMgorZGRtbmcwMjIgbWlubWFnICAgMiAgLTEgIC0+IC0xCitkZG1uZzAyMyBtaW5tYWcgICAyICAgMCAgLT4gIDAKK2RkbW5nMDI1IG1pbm1hZyAgIDIgICAxICAtPiAgMQorZGRtbmcwMjYgbWlubWFnICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZG1uZzAzMCBtaW5tYWcgICAwICAgICAwICAgLT4gIDAKK2RkbW5nMDMxIG1pbm1hZyAgIDAgICAgLTAgICAtPiAtMAorZGRtbmcwMzIgbWlubWFnICAgMCAgICAtMC4wIC0+IC0wLjAKK2RkbW5nMDMzIG1pbm1hZyAgIDAgICAgIDAuMCAtPiAgMC4wCitkZG1uZzAzNCBtaW5tYWcgIC0wICAgICAwICAgLT4gLTAKK2RkbW5nMDM1IG1pbm1hZyAgLTAgICAgLTAgICAtPiAtMAorZGRtbmcwMzYgbWlubWFnICAtMCAgICAtMC4wIC0+IC0wCitkZG1uZzAzNyBtaW5tYWcgIC0wICAgICAwLjAgLT4gLTAKK2RkbW5nMDM4IG1pbm1hZyAgIDAuMCAgIDAgICAtPiAgMC4wCitkZG1uZzAzOSBtaW5tYWcgICAwLjAgIC0wICAgLT4gLTAKK2RkbW5nMDQwIG1pbm1hZyAgIDAuMCAgLTAuMCAtPiAtMC4wCitkZG1uZzA0MSBtaW5tYWcgICAwLjAgICAwLjAgLT4gIDAuMAorZGRtbmcwNDIgbWlubWFnICAtMC4wICAgMCAgIC0+IC0wLjAKK2RkbW5nMDQzIG1pbm1hZyAgLTAuMCAgLTAgICAtPiAtMAorZGRtbmcwNDQgbWlubWFnICAtMC4wICAtMC4wIC0+IC0wLjAKK2RkbW5nMDQ1IG1pbm1hZyAgLTAuMCAgIDAuMCAtPiAtMC4wCisKK2RkbW5nMDQ2IG1pbm1hZyAgIDBFMSAgLTBFMSAtPiAtMEUrMQorZGRtbmcwNDcgbWlubWFnICAtMEUxICAgMEUyIC0+IC0wRSsxCitkZG1uZzA0OCBtaW5tYWcgICAwRTIgICAwRTEgLT4gIDBFKzEKK2RkbW5nMDQ5IG1pbm1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMQorZGRtbmcwNTAgbWlubWFnICAtMEUzICAtMEUyIC0+IC0wRSszCitkZG1uZzA1MSBtaW5tYWcgIC0wRTIgIC0wRTMgLT4gLTBFKzMKKworLS0gU3BlY2lhbHMKK2RkbW5nMDkwIG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1uZzA5MSBtaW5tYWcgIEluZiAgLTEwMDAgIC0+IC0xMDAwCitkZG1uZzA5MiBtaW5tYWcgIEluZiAgLTEgICAgIC0+IC0xCitkZG1uZzA5MyBtaW5tYWcgIEluZiAgLTAgICAgIC0+IC0wCitkZG1uZzA5NCBtaW5tYWcgIEluZiAgIDAgICAgIC0+ICAwCitkZG1uZzA5NSBtaW5tYWcgIEluZiAgIDEgICAgIC0+ICAxCitkZG1uZzA5NiBtaW5tYWcgIEluZiAgIDEwMDAgIC0+ICAxMDAwCitkZG1uZzA5NyBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtbmcwOTggbWlubWFnIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZGRtbmcwOTkgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbW5nMTAwIG1pbm1hZyAtMSAgICAgSW5mICAgLT4gLTEKK2RkbW5nMTAxIG1pbm1hZyAtMCAgICAgSW5mICAgLT4gLTAKK2RkbW5nMTAyIG1pbm1hZyAgMCAgICAgSW5mICAgLT4gIDAKK2RkbW5nMTAzIG1pbm1hZyAgMSAgICAgSW5mICAgLT4gIDEKK2RkbW5nMTA0IG1pbm1hZyAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK2RkbW5nMTA1IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbW5nMTIwIG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1uZzEyMSBtaW5tYWcgLUluZiAgLTEwMDAgIC0+IC0xMDAwCitkZG1uZzEyMiBtaW5tYWcgLUluZiAgLTEgICAgIC0+IC0xCitkZG1uZzEyMyBtaW5tYWcgLUluZiAgLTAgICAgIC0+IC0wCitkZG1uZzEyNCBtaW5tYWcgLUluZiAgIDAgICAgIC0+ICAwCitkZG1uZzEyNSBtaW5tYWcgLUluZiAgIDEgICAgIC0+ICAxCitkZG1uZzEyNiBtaW5tYWcgLUluZiAgIDEwMDAgIC0+ICAxMDAwCitkZG1uZzEyNyBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRtbmcxMjggbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbW5nMTI5IG1pbm1hZyAtMTAwMCAtSW5mICAgLT4gLTEwMDAKK2RkbW5nMTMwIG1pbm1hZyAtMSAgICAtSW5mICAgLT4gLTEKK2RkbW5nMTMxIG1pbm1hZyAtMCAgICAtSW5mICAgLT4gLTAKK2RkbW5nMTMyIG1pbm1hZyAgMCAgICAtSW5mICAgLT4gIDAKK2RkbW5nMTMzIG1pbm1hZyAgMSAgICAtSW5mICAgLT4gIDEKK2RkbW5nMTM0IG1pbm1hZyAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2RkbW5nMTM1IG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZGRtbmcxNDEgbWlubWFnICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5CitkZG1uZzE0MiBtaW5tYWcgIE5hTiAtMTAwMCAgIC0+ICAtMTAwMAorZGRtbmcxNDMgbWlubWFnICBOYU4gLTEgICAgICAtPiAgLTEKK2RkbW5nMTQ0IG1pbm1hZyAgTmFOIC0wICAgICAgLT4gIC0wCitkZG1uZzE0NSBtaW5tYWcgIE5hTiAgMCAgICAgIC0+ICAwCitkZG1uZzE0NiBtaW5tYWcgIE5hTiAgMSAgICAgIC0+ICAxCitkZG1uZzE0NyBtaW5tYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwCitkZG1uZzE0OCBtaW5tYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorZGRtbmcxNDkgbWlubWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZG1uZzE1MCBtaW5tYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorZGRtbmcxNTEgbWlubWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMAorZGRtbmcxNTIgbWlubWFnIC0xICAgLU5hTiAgICAtPiAtMQorZGRtbmcxNTMgbWlubWFnIC0wICAgIE5hTiAgICAtPiAtMAorZGRtbmcxNTQgbWlubWFnICAwICAgLU5hTiAgICAtPiAgMAorZGRtbmcxNTUgbWlubWFnICAxICAgIE5hTiAgICAtPiAgMQorZGRtbmcxNTYgbWlubWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMAorZGRtbmcxNTcgbWlubWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworZGRtbmcxNjEgbWlubWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNjIgbWlubWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNjMgbWlubWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNjQgbWlubWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNjUgbWlubWFnIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNjYgbWlubWFnIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNjcgbWlubWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNjggbWlubWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNjkgbWlubWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNzAgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNzEgbWlubWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNzIgbWlubWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNzMgbWlubWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNzQgbWlubWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNzUgbWlubWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNzYgbWlubWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNzcgbWlubWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNzggbWlubWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxNzkgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZG1uZzE4MSBtaW5tYWcgIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1uZzE4MiBtaW5tYWcgLU5hTjggICAgOTk5MCAgLT4gIDk5OTAKK2RkbW5nMTgzIG1pbm1hZyAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRtbmcxODQgbWlubWFnICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xCitkZG1uZzE4NSBtaW5tYWcgIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyCitkZG1uZzE4NiBtaW5tYWcgLU5hTjMgICAgTmFONiAgLT4gLU5hTjMKK2RkbW5nMTg3IG1pbm1hZyAtTmFONDQgICBOYU43ICAtPiAtTmFONDQKKworZGRtbmcxODggbWlubWFnIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQorZGRtbmcxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5CitkZG1uZzE5MCBtaW5tYWcgIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK2RkbW5nMTkxIG1pbm1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE5MiBtaW5tYWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTMgbWlubWFnIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTk0IG1pbm1hZyAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE5NSBtaW5tYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTYgbWlubWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTk3IG1pbm1hZyAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE5OCBtaW5tYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTkgbWlubWFnICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb2xkIHJvdW5kaW5nIGNoZWNrcworZGRtbmcyMjEgbWlubWFnIC0xMjM0NTY3ODAwMCAxICAtPiAxCitkZG1uZzIyMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDEKK2RkbW5nMjIzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQorZGRtbmcyMjQgbWlubWFnIDEgLTEyMzQ1Njc4MDAgICAtPiAxCitkZG1uZzIyNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDEKK2RkbW5nMjI2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQorZGRtbmcyMjcgbWlubWFnIC0xMjM0NTY3ODkxICAxICAtPiAxCitkZG1uZzIyOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDEKK2RkbW5nMjI5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQorZGRtbmcyMzAgbWlubWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAxCitkZG1uZzIzMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDEKK2RkbW5nMjMyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQorZGRtbmcyMzMgbWlubWFnIDEyMzQ1Njc4OTEgIDEgICAtPiAxCitkZG1uZzIzNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RkbW5nMjM1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQorZGRtbmcyMzYgbWlubWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkZG1uZzIzNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDEKK2RkbW5nMjM4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCitkZG1uZzI4MCBtaW5tYWcgJzMnICAgJzInICAtPiAgJzInCitkZG1uZzI4MSBtaW5tYWcgJy0xMCcgJzMnICAtPiAgJzMnCitkZG1uZzI4MiBtaW5tYWcgJzEuMCcgJzEnICAtPiAgJzEuMCcKK2RkbW5nMjgzIG1pbm1hZyAnMScgJzEuMCcgIC0+ICAnMS4wJworZGRtbmcyODQgbWlubWFnICc3JyAnTmFOJyAgLT4gICc3JworCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK2RkbW5nNDAxIG1pbm1hZyAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQorZGRtbmc0MDIgbWlubWFnICAxLjEgICAgMSAgICAgICAtPiAgMQorZGRtbmc0MDMgbWlubWFnICAxICAgICAgMS4wICAgICAtPiAgMS4wCitkZG1uZzQwNCBtaW5tYWcgIDEuMCAgICAwLjEgICAgIC0+ICAwLjEKK2RkbW5nNDA1IG1pbm1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTAKK2RkbW5nNDA2IG1pbm1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwCitkZG1uZzQwNyBtaW5tYWcgIDAuMTAgICAwICAgICAgIC0+ICAwCitkZG1uZzQwOCBtaW5tYWcgIDAgICAgICAwLjAgICAgIC0+ICAwLjAKK2RkbW5nNDA5IG1pbm1hZyAgMC4wICAgLTAgICAgICAgLT4gLTAKK2RkbW5nNDEwIG1pbm1hZyAgMC4wICAgLTAuMCAgICAgLT4gLTAuMAorZGRtbmc0MTEgbWlubWFnICAwLjAwICAtMC4wICAgICAtPiAtMC4wCitkZG1uZzQxMiBtaW5tYWcgIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwCitkZG1uZzQxMyBtaW5tYWcgIDAgICAgIC0wLjAgICAgIC0+IC0wLjAKK2RkbW5nNDE0IG1pbm1hZyAgMCAgICAgLTAgICAgICAgLT4gLTAKK2RkbW5nNDE1IG1pbm1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAKK2RkbW5nNDE2IG1pbm1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAKK2RkbW5nNDE3IG1pbm1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAKK2RkbW5nNDE4IG1pbm1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQorZGRtbmc0MTkgbWlubWFnIC0wLjEgICAtMS4wICAgICAtPiAtMC4xCitkZG1uZzQyMCBtaW5tYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xCitkZG1uZzQyMSBtaW5tYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xCitkZG1uZzQyMyBtaW5tYWcgLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZGRtbmc0MzEgbWlubWFnICAxLjEgICAgSW5mICAgICAtPiAgMS4xCitkZG1uZzQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxCitkZG1uZzQzMyBtaW5tYWcgIDEuMCAgICAxICAgICAgIC0+ICAxLjAKK2RkbW5nNDM0IG1pbm1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQorZGRtbmc0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAorZGRtbmc0MzYgbWlubWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKK2RkbW5nNDM3IG1pbm1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAKK2RkbW5nNDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMAorZGRtbmc0MzkgbWlubWFnIC0wICAgICAgMC4wICAgICAtPiAtMAorZGRtbmc0NDAgbWlubWFnIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCitkZG1uZzQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKK2RkbW5nNDQyIG1pbm1hZyAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKK2RkbW5nNDQzIG1pbm1hZyAtMC4wICAgIDAgICAgICAgLT4gLTAuMAorZGRtbmc0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMAorZGRtbmc0NDUgbWlubWFnIC0wICAgICAtMC4wICAgICAtPiAtMAorZGRtbmc0NDYgbWlubWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMAorZGRtbmc0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMAorZGRtbmc0NDggbWlubWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xCitkZG1uZzQ0OSBtaW5tYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0wLjEKK2RkbW5nNDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEKK2RkbW5nNDUxIG1pbm1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEKK2RkbW5nNDUzIG1pbm1hZyAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQorLS0gbGFyZ2llcworZGRtbmc0NjAgbWlubWFnICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMAorZGRtbmc0NjEgbWlubWFnICAxRSszICAgMTAwMCAgICAtPiAgMTAwMAorZGRtbmc0NjIgbWlubWFnICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMworZGRtbmc0NjMgbWlubWFnICAxRSszICAgLTM4NCAgICAtPiAtMzg0CitkZG1uZzQ2NCBtaW5tYWcgLTM4NCAgICAxRSszICAgIC0+IC0zODQKK2RkbW5nNDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKK2RkbW5nNDY2IG1pbm1hZyAtMzg0ICAgLTFFKzMgICAgLT4gLTM4NAorZGRtbmc0NjcgbWlubWFnIC0xRSszICAgLTM4NCAgICAtPiAtMzg0CisKKy0tIHN1Ym5vcm1hbHMKK2RkbW5nNTEwIG1pbm1hZyAgMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTEgbWlubWFnICAwLjFFLTM4MyAgICAgICAgMCAgLT4gICAwCitkZG1uZzUxMiBtaW5tYWcgIDAuMTBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbW5nNTEzIG1pbm1hZyAgMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTQgbWlubWFnICAwLjAxRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1uZzUxNSBtaW5tYWcgIDAuOTk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTE2IG1pbm1hZyAgMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTcgbWlubWFnICAwLjAwOUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUxOCBtaW5tYWcgIDAuMDAxRS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTE5IG1pbm1hZyAgMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgMAorZGRtbmc1MjAgbWlubWFnICAwLjAwMDFFLTM4MyAgICAgMCAgLT4gICAwCisKK2RkbW5nNTMwIG1pbm1hZyAtMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzEgbWlubWFnIC0wLjFFLTM4MyAgICAgICAgMCAgLT4gICAwCitkZG1uZzUzMiBtaW5tYWcgLTAuMTBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbW5nNTMzIG1pbm1hZyAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzQgbWlubWFnIC0wLjAxRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1uZzUzNSBtaW5tYWcgLTAuOTk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTM2IG1pbm1hZyAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzcgbWlubWFnIC0wLjAwOUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUzOCBtaW5tYWcgLTAuMDAxRS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTM5IG1pbm1hZyAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgMAorZGRtbmc1NDAgbWlubWFnIC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gICAwCisKKworLS0gTnVsbCB0ZXN0cworZGRtbmc5MDAgbWlubWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmc5MDEgbWlubWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWludXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbnVzLmRlY1Rlc3QKaW5kZXggMjcwNWU3OS4uYjdmZmZmNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWludXMuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW51cy5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZE1pbnVzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIDAteCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZGRtbnMwMDEgbWludXMgICAgICAgKzcuNTAgIC0+IC03LjUwDQotDQotLS0gSW5maW5pdGllcw0KLWRkbW5zMDExIG1pbnVzICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkNCi1kZG1uczAxMiBtaW51cyAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kZG1uczAyMSBtaW51cyAgICAgICAgIE5hTiAgLT4gTmFODQotZGRtbnMwMjIgbWludXMgICAgICAgIC1OYU4gIC0+IC1OYU4NCi1kZG1uczAyMyBtaW51cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5zMDI0IG1pbnVzICAgICAgIC1zTmFOICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWRkbW5zMDMxIG1pbnVzICAgICAgIE5hTjEzICAtPiBOYU4xMw0KLWRkbW5zMDMyIG1pbnVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMNCi1kZG1uczAzMyBtaW51cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5zMDM0IG1pbnVzICAgICAtc05hTjEzICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbnMwMzUgbWludXMgICAgICAgTmFONzAgIC0+IE5hTjcwDQotZGRtbnMwMzYgbWludXMgICAgICAtTmFONzAgIC0+IC1OYU43MA0KLWRkbW5zMDM3IG1pbnVzICAgICAgc05hTjEwMSAtPiBOYU4xMDEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbnMwMzggbWludXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmaW5pdGVzDQotZGRtbnMxMDEgbWludXMgICAgICAgICAgNyAgIC0+IC03DQotZGRtbnMxMDIgbWludXMgICAgICAgICAtNyAgIC0+IDcNCi1kZG1uczEwMyBtaW51cyAgICAgICAgIDc1ICAgLT4gLTc1DQotZGRtbnMxMDQgbWludXMgICAgICAgIC03NSAgIC0+IDc1DQotZGRtbnMxMDUgbWludXMgICAgICAgNy41MCAgIC0+IC03LjUwDQotZGRtbnMxMDYgbWludXMgICAgICAtNy41MCAgIC0+IDcuNTANCi1kZG1uczEwNyBtaW51cyAgICAgICA3LjUwMCAgLT4gLTcuNTAwDQotZGRtbnMxMDggbWludXMgICAgICAtNy41MDAgIC0+IDcuNTAwDQotDQotLS0gemVyb3MNCi1kZG1uczExMSBtaW51cyAgICAgICAgICAwICAgLT4gMA0KLWRkbW5zMTEyIG1pbnVzICAgICAgICAgLTAgICAtPiAwDQotZGRtbnMxMTMgbWludXMgICAgICAgMEUrNCAgIC0+IDBFKzQNCi1kZG1uczExNCBtaW51cyAgICAgIC0wRSs0ICAgLT4gMEUrNA0KLWRkbW5zMTE1IG1pbnVzICAgICAwLjAwMDAgICAtPiAwLjAwMDANCi1kZG1uczExNiBtaW51cyAgICAtMC4wMDAwICAgLT4gMC4wMDAwDQotZGRtbnMxMTcgbWludXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KLWRkbW5zMTE4IG1pbnVzICAgICAtMEUtMTQxICAtPiAwRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWRkbW5zMTIxIG1pbnVzICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODINCi1kZG1uczEyMiBtaW51cyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODINCi1kZG1uczEyMyBtaW51cyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxDQotZGRtbnMxMjQgbWludXMgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kZG1uczEzMSBtaW51cyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRtbnMxMzIgbWludXMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzDQotZGRtbnMxMzMgbWludXMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkbW5zMTM0IG1pbnVzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OCBTdWJub3JtYWwNCi0NCi1kZG1uczEzNSBtaW51cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwNCi1kZG1uczEzNiBtaW51cyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZG1uczEzNyBtaW51cyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IDFFLTM4Mw0KLWRkbW5zMTM4IG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNaW51cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSAwLXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkZG1uczAwMSBtaW51cyAgICAgICArNy41MCAgLT4gLTcuNTAKKworLS0gSW5maW5pdGllcworZGRtbnMwMTEgbWludXMgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQorZGRtbnMwMTIgbWludXMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRtbnMwMjEgbWludXMgICAgICAgICBOYU4gIC0+IE5hTgorZGRtbnMwMjIgbWludXMgICAgICAgIC1OYU4gIC0+IC1OYU4KK2RkbW5zMDIzIG1pbnVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uczAyNCBtaW51cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZG1uczAzMSBtaW51cyAgICAgICBOYU4xMyAgLT4gTmFOMTMKK2RkbW5zMDMyIG1pbnVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMKK2RkbW5zMDMzIG1pbnVzICAgICAgc05hTjEzICAtPiBOYU4xMyAgIEludmFsaWRfb3BlcmF0aW9uCitkZG1uczAzNCBtaW51cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbnMwMzUgbWludXMgICAgICAgTmFONzAgIC0+IE5hTjcwCitkZG1uczAzNiBtaW51cyAgICAgIC1OYU43MCAgLT4gLU5hTjcwCitkZG1uczAzNyBtaW51cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbnMwMzggbWludXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworZGRtbnMxMDEgbWludXMgICAgICAgICAgNyAgIC0+IC03CitkZG1uczEwMiBtaW51cyAgICAgICAgIC03ICAgLT4gNworZGRtbnMxMDMgbWludXMgICAgICAgICA3NSAgIC0+IC03NQorZGRtbnMxMDQgbWludXMgICAgICAgIC03NSAgIC0+IDc1CitkZG1uczEwNSBtaW51cyAgICAgICA3LjUwICAgLT4gLTcuNTAKK2RkbW5zMTA2IG1pbnVzICAgICAgLTcuNTAgICAtPiA3LjUwCitkZG1uczEwNyBtaW51cyAgICAgICA3LjUwMCAgLT4gLTcuNTAwCitkZG1uczEwOCBtaW51cyAgICAgIC03LjUwMCAgLT4gNy41MDAKKworLS0gemVyb3MKK2RkbW5zMTExIG1pbnVzICAgICAgICAgIDAgICAtPiAwCitkZG1uczExMiBtaW51cyAgICAgICAgIC0wICAgLT4gMAorZGRtbnMxMTMgbWludXMgICAgICAgMEUrNCAgIC0+IDBFKzQKK2RkbW5zMTE0IG1pbnVzICAgICAgLTBFKzQgICAtPiAwRSs0CitkZG1uczExNSBtaW51cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkZG1uczExNiBtaW51cyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkZG1uczExNyBtaW51cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkZG1uczExOCBtaW51cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZG1uczEyMSBtaW51cyAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZG1uczEyMiBtaW51cyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkbW5zMTIzIG1pbnVzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEKK2RkbW5zMTI0IG1pbnVzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRtbnMxMzEgbWludXMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRtbnMxMzIgbWludXMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzCitkZG1uczEzMyBtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZG1uczEzNCBtaW51cyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTggU3Vibm9ybWFsCisKK2RkbW5zMTM1IG1pbnVzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbAorZGRtbnMxMzYgbWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZG1uczEzNyBtaW51cyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRtbnMxMzggbWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNdWx0aXBseS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTXVsdGlwbHkuZGVjVGVzdAppbmRleCA0NWEzODFkLi41ODczZjgwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNdWx0aXBseS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE11bHRpcGx5LmRlY1Rlc3QKQEAgLTEsNTUzICsxLDU1MyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRNdWx0aXBseS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtdWx0aXBsaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjRG91YmxlcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQ0KLS0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNEb3VibGUNCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kZG11bDAwMCBtdWx0aXBseSAyICAgICAgMiAtPiA0DQotZGRtdWwwMDEgbXVsdGlwbHkgMiAgICAgIDMgLT4gNg0KLWRkbXVsMDAyIG11bHRpcGx5IDUgICAgICAxIC0+IDUNCi1kZG11bDAwMyBtdWx0aXBseSA1ICAgICAgMiAtPiAxMA0KLWRkbXVsMDA0IG11bHRpcGx5IDEuMjAgICAyIC0+IDIuNDANCi1kZG11bDAwNSBtdWx0aXBseSAxLjIwICAgMCAtPiAwLjAwDQotZGRtdWwwMDYgbXVsdGlwbHkgMS4yMCAgLTIgLT4gLTIuNDANCi1kZG11bDAwNyBtdWx0aXBseSAtMS4yMCAgMiAtPiAtMi40MA0KLWRkbXVsMDA4IG11bHRpcGx5IC0xLjIwICAwIC0+IC0wLjAwDQotZGRtdWwwMDkgbXVsdGlwbHkgLTEuMjAgLTIgLT4gMi40MA0KLWRkbXVsMDEwIG11bHRpcGx5IDUuMDkgNy4xIC0+IDM2LjEzOQ0KLWRkbXVsMDExIG11bHRpcGx5IDIuNSAgICA0IC0+IDEwLjANCi1kZG11bDAxMiBtdWx0aXBseSAyLjUwICAgNCAtPiAxMC4wMA0KLWRkbXVsMDEzIG11bHRpcGx5IDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAtPiAxLjIzNDU2Nzg5MDAwMDAwMCBSb3VuZGVkDQotZGRtdWwwMTUgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDANCi1kZG11bDAxNiBtdWx0aXBseSAgOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDAxNyBtdWx0aXBseSAgOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5IC0+IC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDAxOCBtdWx0aXBseSAtOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5IC0+IC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDAxOSBtdWx0aXBseSAtOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB6ZXJvcywgZXRjLg0KLWRkbXVsMDIxIG11bHRpcGx5ICAwICAgICAgMCAgICAgLT4gIDANCi1kZG11bDAyMiBtdWx0aXBseSAgMCAgICAgLTAgICAgIC0+IC0wDQotZGRtdWwwMjMgbXVsdGlwbHkgLTAgICAgICAwICAgICAtPiAtMA0KLWRkbXVsMDI0IG11bHRpcGx5IC0wICAgICAtMCAgICAgLT4gIDANCi1kZG11bDAyNSBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwDQotZGRtdWwwMjYgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMA0KLWRkbXVsMDI3IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDANCi1kZG11bDAyOCBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwDQotZGRtdWwwMzAgbXVsdGlwbHkgIDUuMDAgICAxRS0zICAtPiAgMC4wMDUwMA0KLWRkbXVsMDMxIG11bHRpcGx5ICAwMC4wMCAgMC4wMDAgLT4gIDAuMDAwMDANCi1kZG11bDAzMiBtdWx0aXBseSAgMDAuMDAgIDBFLTMgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWRkbXVsMDMzIG11bHRpcGx5ICAwRS0zICAgMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotZGRtdWwwMzQgbXVsdGlwbHkgLTUuMDAgICAxRS0zICAtPiAtMC4wMDUwMA0KLWRkbXVsMDM1IG11bHRpcGx5IC0wMC4wMCAgMC4wMDAgLT4gLTAuMDAwMDANCi1kZG11bDAzNiBtdWx0aXBseSAtMDAuMDAgIDBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWRkbXVsMDM3IG11bHRpcGx5IC0wRS0zICAgMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotZGRtdWwwMzggbXVsdGlwbHkgIDUuMDAgIC0xRS0zICAtPiAtMC4wMDUwMA0KLWRkbXVsMDM5IG11bHRpcGx5ICAwMC4wMCAtMC4wMDAgLT4gLTAuMDAwMDANCi1kZG11bDA0MCBtdWx0aXBseSAgMDAuMDAgLTBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWRkbXVsMDQxIG11bHRpcGx5ICAwRS0zICAtMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotZGRtdWwwNDIgbXVsdGlwbHkgLTUuMDAgIC0xRS0zICAtPiAgMC4wMDUwMA0KLWRkbXVsMDQzIG11bHRpcGx5IC0wMC4wMCAtMC4wMDAgLT4gIDAuMDAwMDANCi1kZG11bDA0NCBtdWx0aXBseSAtMDAuMDAgLTBFLTMgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWRkbXVsMDQ1IG11bHRpcGx5IC0wRS0zICAtMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KLWRkbXVsMDUwIG11bHRpcGx5IDEuMjAgMyAgICAgICAgLT4gMy42MA0KLWRkbXVsMDUxIG11bHRpcGx5IDcgICAgMyAgICAgICAgLT4gMjENCi1kZG11bDA1MiBtdWx0aXBseSAwLjkgIDAuOCAgICAgIC0+IDAuNzINCi1kZG11bDA1MyBtdWx0aXBseSAwLjkgIC0wICAgICAgIC0+IC0wLjANCi1kZG11bDA1NCBtdWx0aXBseSA2NTQzMjEgNjU0MzIxIC0+IDQyODEzNTk3MTA0MQ0KLQ0KLWRkbXVsMDYwIG11bHRpcGx5IDEyMy40NSAxZTcgIC0+ICAxLjIzNDVFKzkNCi1kZG11bDA2MSBtdWx0aXBseSAxMjMuNDUgMWU4ICAtPiAgMS4yMzQ1RSsxMA0KLWRkbXVsMDYyIG11bHRpcGx5IDEyMy40NSAxZSs5IC0+ICAxLjIzNDVFKzExDQotZGRtdWwwNjMgbXVsdGlwbHkgMTIzLjQ1IDFlMTAgLT4gIDEuMjM0NUUrMTINCi1kZG11bDA2NCBtdWx0aXBseSAxMjMuNDUgMWUxMSAtPiAgMS4yMzQ1RSsxMw0KLWRkbXVsMDY1IG11bHRpcGx5IDEyMy40NSAxZTEyIC0+ICAxLjIzNDVFKzE0DQotZGRtdWwwNjYgbXVsdGlwbHkgMTIzLjQ1IDFlMTMgLT4gIDEuMjM0NUUrMTUNCi0NCi0NCi0tLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMNCi0tLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkbXVsMDgwIG11bHRpcGx5IDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KLWRkbXVsMDg0IG11bHRpcGx5IDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KLWRkbXVsMDkwIG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KLWRkbXVsMDk0IG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KLQ0KLS0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMNCi1kZG11bDEwMSBtdWx0aXBseSA5IDkgICAtPiA4MQ0KLWRkbXVsMTAyIG11bHRpcGx5IDkgOTAgICAtPiA4MTANCi1kZG11bDEwMyBtdWx0aXBseSA5IDkwMCAgIC0+IDgxMDANCi1kZG11bDEwNCBtdWx0aXBseSA5IDkwMDAgICAtPiA4MTAwMA0KLWRkbXVsMTA1IG11bHRpcGx5IDkgOTAwMDAgICAtPiA4MTAwMDANCi1kZG11bDEwNiBtdWx0aXBseSA5IDkwMDAwMCAgIC0+IDgxMDAwMDANCi1kZG11bDEwNyBtdWx0aXBseSA5IDkwMDAwMDAgICAtPiA4MTAwMDAwMA0KLWRkbXVsMTA4IG11bHRpcGx5IDkgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDANCi1kZG11bDEwOSBtdWx0aXBseSA5IDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDANCi1kZG11bDExMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMA0KLWRkbXVsMTExIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDANCi1kZG11bDExMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDANCi1kZG11bDExMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMA0KLWRkbXVsMTE0IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDANCi1kZG11bDExNSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDANCi0tLWRkbXVsMTE2IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwDQotLS1kZG11bDExNyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwDQotLS1kZG11bDExOCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRkbXVsMTE5IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kZG11bDEyMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kZG11bDEyMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRkbXVsMTIyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kZG11bDEyMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMNCi1kZG11bDEzMSBtdWx0aXBseSAzIDMgICAtPiA5DQotZGRtdWwxMzIgbXVsdGlwbHkgMyAzMCAgIC0+IDkwDQotZGRtdWwxMzMgbXVsdGlwbHkgMyAzMDAgICAtPiA5MDANCi1kZG11bDEzNCBtdWx0aXBseSAzIDMwMDAgICAtPiA5MDAwDQotZGRtdWwxMzUgbXVsdGlwbHkgMyAzMDAwMCAgIC0+IDkwMDAwDQotZGRtdWwxMzYgbXVsdGlwbHkgMyAzMDAwMDAgICAtPiA5MDAwMDANCi1kZG11bDEzNyBtdWx0aXBseSAzIDMwMDAwMDAgICAtPiA5MDAwMDAwDQotZGRtdWwxMzggbXVsdGlwbHkgMyAzMDAwMDAwMCAgIC0+IDkwMDAwMDAwDQotZGRtdWwxMzkgbXVsdGlwbHkgMyAzMDAwMDAwMDAgICAtPiA5MDAwMDAwMDANCi1kZG11bDE0MCBtdWx0aXBseSAzIDMwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwDQotZGRtdWwxNDEgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwDQotZGRtdWwxNDIgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDANCi1kZG11bDE0MyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwDQotZGRtdWwxNDQgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwDQotZGRtdWwxNDUgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDANCi0NCi0tLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nDQotZGRtdWwzMDEgbXVsdGlwbHkgOSA5ICAgLT4gODENCi1kZG11bDMwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwDQotZGRtdWwzMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwDQotZGRtdWwzMDQgbXVsdGlwbHkgOSA5MDAwICAgLT4gODEwMDANCi1kZG11bDMwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwDQotZGRtdWwzMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwDQotZGRtdWwzMDcgbXVsdGlwbHkgOSA5MDAwMDAwICAgLT4gODEwMDAwMDANCi1kZG11bDMwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwDQotZGRtdWwzMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwDQotZGRtdWwzMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDANCi1kZG11bDMxMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwDQotZGRtdWwzMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwDQotZGRtdWwzMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDANCi1kZG11bDMxNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwDQotZGRtdWwzMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwDQotZGRtdWwzMTYgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkDQotZGRtdWwzMTcgbXVsdGlwbHkgOTAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZA0KLWRkbXVsMzE4IG11bHRpcGx5IDkwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE4ICBSb3VuZGVkDQotZGRtdWwzMTkgbXVsdGlwbHkgOTAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE5ICBSb3VuZGVkDQotZGRtdWwzMjAgbXVsdGlwbHkgOTAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZA0KLWRkbXVsMzIxIG11bHRpcGx5IDkwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIxICBSb3VuZGVkDQotZGRtdWwzMjIgbXVsdGlwbHkgOTAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIyICBSb3VuZGVkDQotZGRtdWwzMjMgbXVsdGlwbHkgOTAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMyAgUm91bmRlZA0KLQ0KLS0tIHRyeXplcm9zIGNhc2VzDQotZGRtdWw1MDQgIG11bHRpcGx5ICAwRS0yNjAgMTAwMEUtMjYwICAtPiAwRS0zOTggQ2xhbXBlZA0KLWRkbXVsNTA1ICBtdWx0aXBseSAgMTAwRSsyNjAgMEUrMjYwICAgLT4gMEUrMzY5IENsYW1wZWQNCi0tLSA2NUstMSBjYXNlDQotZGRtdWw1MDYgbXVsdGlwbHkgNzcuMSA4NTAgLT4gNjU1MzUuMA0KLQ0KLS0tIG1peGVkIHdpdGggemVyb3MNCi1kZG11bDU0MSBtdWx0aXBseSAgMCAgICAtMSAgICAgLT4gLTANCi1kZG11bDU0MiBtdWx0aXBseSAtMCAgICAtMSAgICAgLT4gIDANCi1kZG11bDU0MyBtdWx0aXBseSAgMCAgICAgMSAgICAgLT4gIDANCi1kZG11bDU0NCBtdWx0aXBseSAtMCAgICAgMSAgICAgLT4gLTANCi1kZG11bDU0NSBtdWx0aXBseSAtMSAgICAgMCAgICAgLT4gLTANCi1kZG11bDU0NiBtdWx0aXBseSAtMSAgICAtMCAgICAgLT4gIDANCi1kZG11bDU0NyBtdWx0aXBseSAgMSAgICAgMCAgICAgLT4gIDANCi1kZG11bDU0OCBtdWx0aXBseSAgMSAgICAtMCAgICAgLT4gLTANCi0NCi1kZG11bDU1MSBtdWx0aXBseSAgMC4wICAtMSAgICAgLT4gLTAuMA0KLWRkbXVsNTUyIG11bHRpcGx5IC0wLjAgIC0xICAgICAtPiAgMC4wDQotZGRtdWw1NTMgbXVsdGlwbHkgIDAuMCAgIDEgICAgIC0+ICAwLjANCi1kZG11bDU1NCBtdWx0aXBseSAtMC4wICAgMSAgICAgLT4gLTAuMA0KLWRkbXVsNTU1IG11bHRpcGx5IC0xLjAgICAwICAgICAtPiAtMC4wDQotZGRtdWw1NTYgbXVsdGlwbHkgLTEuMCAgLTAgICAgIC0+ICAwLjANCi1kZG11bDU1NyBtdWx0aXBseSAgMS4wICAgMCAgICAgLT4gIDAuMA0KLWRkbXVsNTU4IG11bHRpcGx5ICAxLjAgIC0wICAgICAtPiAtMC4wDQotDQotZGRtdWw1NjEgbXVsdGlwbHkgIDAgICAgLTEuMCAgIC0+IC0wLjANCi1kZG11bDU2MiBtdWx0aXBseSAtMCAgICAtMS4wICAgLT4gIDAuMA0KLWRkbXVsNTYzIG11bHRpcGx5ICAwICAgICAxLjAgICAtPiAgMC4wDQotZGRtdWw1NjQgbXVsdGlwbHkgLTAgICAgIDEuMCAgIC0+IC0wLjANCi1kZG11bDU2NSBtdWx0aXBseSAtMSAgICAgMC4wICAgLT4gLTAuMA0KLWRkbXVsNTY2IG11bHRpcGx5IC0xICAgIC0wLjAgICAtPiAgMC4wDQotZGRtdWw1NjcgbXVsdGlwbHkgIDEgICAgIDAuMCAgIC0+ICAwLjANCi1kZG11bDU2OCBtdWx0aXBseSAgMSAgICAtMC4wICAgLT4gLTAuMA0KLQ0KLWRkbXVsNTcxIG11bHRpcGx5ICAwLjAgIC0xLjAgICAtPiAtMC4wMA0KLWRkbXVsNTcyIG11bHRpcGx5IC0wLjAgIC0xLjAgICAtPiAgMC4wMA0KLWRkbXVsNTczIG11bHRpcGx5ICAwLjAgICAxLjAgICAtPiAgMC4wMA0KLWRkbXVsNTc0IG11bHRpcGx5IC0wLjAgICAxLjAgICAtPiAtMC4wMA0KLWRkbXVsNTc1IG11bHRpcGx5IC0xLjAgICAwLjAgICAtPiAtMC4wMA0KLWRkbXVsNTc2IG11bHRpcGx5IC0xLjAgIC0wLjAgICAtPiAgMC4wMA0KLWRkbXVsNTc3IG11bHRpcGx5ICAxLjAgICAwLjAgICAtPiAgMC4wMA0KLWRkbXVsNTc4IG11bHRpcGx5ICAxLjAgIC0wLjAgICAtPiAtMC4wMA0KLQ0KLQ0KLS0tIFNwZWNpYWxzDQotZGRtdWw1ODAgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXVsNTgxIG11bHRpcGx5ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kZG11bDU4MiBtdWx0aXBseSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZGRtdWw1ODMgbXVsdGlwbHkgIEluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw1ODQgbXVsdGlwbHkgIEluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw1ODUgbXVsdGlwbHkgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWRkbXVsNTg2IG11bHRpcGx5ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1kZG11bDU4NyBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtdWw1ODggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXVsNTg5IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZG11bDU5MCBtdWx0aXBseSAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5DQotZGRtdWw1OTEgbXVsdGlwbHkgLTAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw1OTIgbXVsdGlwbHkgIDAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw1OTMgbXVsdGlwbHkgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXVsNTk0IG11bHRpcGx5ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG11bDU5NSBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRtdWw2MDAgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXVsNjAxIG11bHRpcGx5IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCi1kZG11bDYwMiBtdWx0aXBseSAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZGRtdWw2MDMgbXVsdGlwbHkgLUluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2MDQgbXVsdGlwbHkgLUluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2MDUgbXVsdGlwbHkgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRkbXVsNjA2IG11bHRpcGx5IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1kZG11bDYwNyBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZGRtdWw2MDggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXVsNjA5IG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZG11bDYxMCBtdWx0aXBseSAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5DQotZGRtdWw2MTEgbXVsdGlwbHkgLTAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2MTIgbXVsdGlwbHkgIDAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2MTMgbXVsdGlwbHkgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXVsNjE0IG11bHRpcGx5ICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG11bDYxNSBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotDQotZGRtdWw2MjEgbXVsdGlwbHkgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kZG11bDYyMiBtdWx0aXBseSAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRkbXVsNjIzIG11bHRpcGx5ICBOYU4gLTEgICAgICAtPiAgTmFODQotZGRtdWw2MjQgbXVsdGlwbHkgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kZG11bDYyNSBtdWx0aXBseSAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRkbXVsNjI2IG11bHRpcGx5ICBOYU4gIDEgICAgICAtPiAgTmFODQotZGRtdWw2MjcgbXVsdGlwbHkgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kZG11bDYyOCBtdWx0aXBseSAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRkbXVsNjI5IG11bHRpcGx5ICBOYU4gIE5hTiAgICAtPiAgTmFODQotZGRtdWw2MzAgbXVsdGlwbHkgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kZG11bDYzMSBtdWx0aXBseSAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkbXVsNjMyIG11bHRpcGx5IC0xICAgIE5hTiAgICAtPiAgTmFODQotZGRtdWw2MzMgbXVsdGlwbHkgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kZG11bDYzNCBtdWx0aXBseSAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkbXVsNjM1IG11bHRpcGx5ICAxICAgIE5hTiAgICAtPiAgTmFODQotZGRtdWw2MzYgbXVsdGlwbHkgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZG11bDYzNyBtdWx0aXBseSAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRkbXVsNjQxIG11bHRpcGx5ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjQyIG11bHRpcGx5ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjQzIG11bHRpcGx5ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjQ0IG11bHRpcGx5ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjQ1IG11bHRpcGx5ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjQ2IG11bHRpcGx5ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjQ3IG11bHRpcGx5ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjQ4IG11bHRpcGx5ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjQ5IG11bHRpcGx5ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjUwIG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjUxIG11bHRpcGx5IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjUyIG11bHRpcGx5IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjUzIG11bHRpcGx5IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjU0IG11bHRpcGx5IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjU1IG11bHRpcGx5ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjU2IG11bHRpcGx5ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjU3IG11bHRpcGx5ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjU4IG11bHRpcGx5ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjU5IG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZG11bDY2MSBtdWx0aXBseSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCi1kZG11bDY2MiBtdWx0aXBseSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgNCi1kZG11bDY2MyBtdWx0aXBseSAgTmFONzEgSW5mICAgLT4gIE5hTjcxDQotZGRtdWw2NjQgbXVsdGlwbHkgIE5hTjYgIE5hTjUgIC0+ICBOYU42DQotZGRtdWw2NjUgbXVsdGlwbHkgLUluZiAgIE5hTjQgIC0+ICBOYU40DQotZGRtdWw2NjYgbXVsdGlwbHkgLTk5OSAgIE5hTjMzIC0+ICBOYU4zMw0KLWRkbXVsNjY3IG11bHRpcGx5ICBJbmYgICBOYU4yICAtPiAgTmFOMg0KLQ0KLWRkbXVsNjcxIG11bHRpcGx5ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY3MiBtdWx0aXBseSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2NzMgbXVsdGlwbHkgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjc0IG11bHRpcGx5ICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY3NSBtdWx0aXBseSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2NzYgbXVsdGlwbHkgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjc3IG11bHRpcGx5ICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY3OCBtdWx0aXBseSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2NzkgbXVsdGlwbHkgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkbXVsNjgxIG11bHRpcGx5IC1OYU45IC1JbmYgICAtPiAtTmFOOQ0KLWRkbXVsNjgyIG11bHRpcGx5IC1OYU44ICA5OTkgICAtPiAtTmFOOA0KLWRkbXVsNjgzIG11bHRpcGx5IC1OYU43MSBJbmYgICAtPiAtTmFONzENCi1kZG11bDY4NCBtdWx0aXBseSAtTmFONiAtTmFONSAgLT4gLU5hTjYNCi1kZG11bDY4NSBtdWx0aXBseSAtSW5mICAtTmFONCAgLT4gLU5hTjQNCi1kZG11bDY4NiBtdWx0aXBseSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzDQotZGRtdWw2ODcgbXVsdGlwbHkgIEluZiAgLU5hTjIgIC0+IC1OYU4yDQotDQotZGRtdWw2OTEgbXVsdGlwbHkgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjkyIG11bHRpcGx5IC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY5MyBtdWx0aXBseSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2OTQgbXVsdGlwbHkgLXNOYU4xNiAtc05hTjk0IC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjk1IG11bHRpcGx5IC1OYU45NSAgLXNOYU45MyAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY5NiBtdWx0aXBseSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2OTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjk4IG11bHRpcGx5ICBJbmYgICAgLXNOYU45MCAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY5OSBtdWx0aXBseSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRtdWw3MDEgbXVsdGlwbHkgLU5hTiAgLUluZiAgIC0+IC1OYU4NCi1kZG11bDcwMiBtdWx0aXBseSAtTmFOICAgOTk5ICAgLT4gLU5hTg0KLWRkbXVsNzAzIG11bHRpcGx5IC1OYU4gICBJbmYgICAtPiAtTmFODQotZGRtdWw3MDQgbXVsdGlwbHkgLU5hTiAgLU5hTiAgIC0+IC1OYU4NCi1kZG11bDcwNSBtdWx0aXBseSAtSW5mICAtTmFOMCAgLT4gLU5hTg0KLWRkbXVsNzA2IG11bHRpcGx5IC05OTkgIC1OYU4gICAtPiAtTmFODQotZGRtdWw3MDcgbXVsdGlwbHkgIEluZiAgLU5hTiAgIC0+IC1OYU4NCi0NCi1kZG11bDcxMSBtdWx0aXBseSAtc05hTiAgIC1JbmYgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNzEyIG11bHRpcGx5IC1zTmFOICAgLTExICAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw3MTMgbXVsdGlwbHkgLXNOYU4wMCAgTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDcxNCBtdWx0aXBseSAtc05hTiAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNzE1IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw3MTYgbXVsdGlwbHkgLUluZiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDcxNyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNzE4IG11bHRpcGx5ICBJbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw3MTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMNCi0tLSBzaWducw0KLWRkbXVsNzUxIG11bHRpcGx5ICAxZSsyNzcgIDFlKzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw3NTIgbXVsdGlwbHkgIDFlKzI3NyAtMWUrMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDc1MyBtdWx0aXBseSAtMWUrMjc3ICAxZSszMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkbXVsNzU0IG11bHRpcGx5IC0xZSsyNzcgLTFlKzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw3NTUgbXVsdGlwbHkgIDFlLTI3NyAgMWUtMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkbXVsNzU2IG11bHRpcGx5ICAxZS0yNzcgLTFlLTMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZG11bDc1NyBtdWx0aXBseSAtMWUtMjc3ICAxZS0zMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRtdWw3NTggbXVsdGlwbHkgLTFlLTI3NyAtMWUtMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KLWRkbXVsNzYwIG11bHRpcGx5IDFlLTI5MSAxZS0xMDEgLT4gMUUtMzkyIFN1Ym5vcm1hbA0KLWRkbXVsNzYxIG11bHRpcGx5IDFlLTI5MSAxZS0xMDIgLT4gMUUtMzkzIFN1Ym5vcm1hbA0KLWRkbXVsNzYyIG11bHRpcGx5IDFlLTI5MSAxZS0xMDMgLT4gMUUtMzk0IFN1Ym5vcm1hbA0KLWRkbXVsNzYzIG11bHRpcGx5IDFlLTI5MSAxZS0xMDQgLT4gMUUtMzk1IFN1Ym5vcm1hbA0KLWRkbXVsNzY0IG11bHRpcGx5IDFlLTI5MSAxZS0xMDUgLT4gMUUtMzk2IFN1Ym5vcm1hbA0KLWRkbXVsNzY1IG11bHRpcGx5IDFlLTI5MSAxZS0xMDYgLT4gMUUtMzk3IFN1Ym5vcm1hbA0KLWRkbXVsNzY2IG11bHRpcGx5IDFlLTI5MSAxZS0xMDcgLT4gMUUtMzk4IFN1Ym5vcm1hbA0KLWRkbXVsNzY3IG11bHRpcGx5IDFlLTI5MSAxZS0xMDggLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZG11bDc2OCBtdWx0aXBseSAxZS0yOTEgMWUtMTA5IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRtdWw3NjkgbXVsdGlwbHkgMWUtMjkxIDFlLTExMCAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLS0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10NCi1kZG11bDc3MCBtdWx0aXBseSAxZSs2MCAxZSszMjEgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSAgQ2xhbXBlZA0KLWRkbXVsNzcxIG11bHRpcGx5IDFlKzYwIDFlKzMyMiAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgQ2xhbXBlZA0KLWRkbXVsNzcyIG11bHRpcGx5IDFlKzYwIDFlKzMyMyAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQNCi1kZG11bDc3MyBtdWx0aXBseSAxZSs2MCAxZSszMjQgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZA0KLWRkbXVsNzc0IG11bHRpcGx5IDFlKzYwIDFlKzMyNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDc3NSBtdWx0aXBseSAxZSs2MCAxZSszMjYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw3NzYgbXVsdGlwbHkgMWUrNjAgMWUrMzI3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkbXVsNzc3IG11bHRpcGx5IDFlKzYwIDFlKzMyOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDc3OCBtdWx0aXBseSAxZSs2MCAxZSszMjkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw3NzkgbXVsdGlwbHkgMWUrNjAgMWUrMzMwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkbXVsODAxIG11bHRpcGx5ICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMS4wMDAwRS0zOTQgU3Vibm9ybWFsDQotZGRtdWw4MDIgbXVsdGlwbHkgIDEuMDAwRS0zOTQgICAxZS0xICAtPiAxLjAwMEUtMzk1ICBTdWJub3JtYWwNCi1kZG11bDgwMyBtdWx0aXBseSAgMS4wMEUtMzk0ICAgIDFlLTIgIC0+IDEuMDBFLTM5NiAgIFN1Ym5vcm1hbA0KLWRkbXVsODA0IG11bHRpcGx5ICAxLjBFLTM5NCAgICAgMWUtMyAgLT4gMS4wRS0zOTcgICAgU3Vibm9ybWFsDQotZGRtdWw4MDUgbXVsdGlwbHkgIDEuMEUtMzk0ICAgICAxZS00ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRtdWw4MDYgbXVsdGlwbHkgIDEuM0UtMzk0ICAgICAxZS00ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MDcgbXVsdGlwbHkgIDEuNUUtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MDggbXVsdGlwbHkgIDEuN0UtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MDkgbXVsdGlwbHkgIDIuM0UtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MTAgbXVsdGlwbHkgIDIuNUUtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MTEgbXVsdGlwbHkgIDIuN0UtMzk0ICAgICAxZS00ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MTIgbXVsdGlwbHkgIDEuNDlFLTM5NCAgICAxZS00ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MTMgbXVsdGlwbHkgIDEuNTBFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MTQgbXVsdGlwbHkgIDEuNTFFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MTUgbXVsdGlwbHkgIDIuNDlFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MTYgbXVsdGlwbHkgIDIuNTBFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MTcgbXVsdGlwbHkgIDIuNTFFLTM5NCAgICAxZS00ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZGRtdWw4MTggbXVsdGlwbHkgIDFFLTM5NCAgICAgICAxZS00ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbA0KLWRkbXVsODE5IG11bHRpcGx5ICAzRS0zOTQgICAgICAgMWUtNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRtdWw4MjAgbXVsdGlwbHkgIDVFLTM5NCAgICAgICAxZS01ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZG11bDgyMSBtdWx0aXBseSAgN0UtMzk0ICAgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDgyMiBtdWx0aXBseSAgOUUtMzk0ICAgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDgyMyBtdWx0aXBseSAgOS45RS0zOTQgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZG11bDgyNCBtdWx0aXBseSAgMUUtMzk0ICAgICAgLTFlLTQgIC0+IC0xRS0zOTggICAgU3Vibm9ybWFsDQotZGRtdWw4MjUgbXVsdGlwbHkgIDNFLTM5NCAgICAgIC0xZS01ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZG11bDgyNiBtdWx0aXBseSAtNUUtMzk0ICAgICAgIDFlLTUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkbXVsODI3IG11bHRpcGx5ICA3RS0zOTQgICAgICAtMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODI4IG11bHRpcGx5IC05RS0zOTQgICAgICAgMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODI5IG11bHRpcGx5ICA5LjlFLTM5NCAgICAtMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODMwIG11bHRpcGx5ICAzLjBFLTM5NCAgICAtMWUtNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotZGRtdWw4MzEgbXVsdGlwbHkgIDEuMEUtMTk5ICAgICAxZS0yMDAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZG11bDgzMiBtdWx0aXBseSAgMS4wRS0xOTkgICAgIDFlLTE5OSAtPiAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZG11bDgzMyBtdWx0aXBseSAgMS4wRS0xOTkgICAgIDFlLTE5OCAtPiAxLjBFLTM5NyAgICBTdWJub3JtYWwNCi1kZG11bDgzNCBtdWx0aXBseSAgMi4wRS0xOTkgICAgIDJlLTE5OCAtPiA0LjBFLTM5NyAgICBTdWJub3JtYWwNCi1kZG11bDgzNSBtdWx0aXBseSAgNC4wRS0xOTkgICAgIDRlLTE5OCAtPiAxLjYwRS0zOTYgICBTdWJub3JtYWwNCi1kZG11bDgzNiBtdWx0aXBseSAxMC4wRS0xOTkgICAgMTBlLTE5OCAtPiAxLjAwMEUtMzk1ICBTdWJub3JtYWwNCi1kZG11bDgzNyBtdWx0aXBseSAzMC4wRS0xOTkgICAgMzBlLTE5OCAtPiA5LjAwMEUtMzk1ICBTdWJub3JtYWwNCi1kZG11bDgzOCBtdWx0aXBseSA0MC4wRS0xOTkgICAgNDBlLTE4OCAtPiAxLjYwMDBFLTM4NCBTdWJub3JtYWwNCi1kZG11bDgzOSBtdWx0aXBseSA0MC4wRS0xOTkgICAgNDBlLTE4NyAtPiAxLjYwMDBFLTM4Mw0KLWRkbXVsODQwIG11bHRpcGx5IDQwLjBFLTE5OSAgICA0MGUtMTg2IC0+IDEuNjAwMEUtMzgyDQotDQotLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoDQotZGRtdWw4NzAgbXVsdGlwbHkgMTAwICA5Ljk5OUUrMzgzICAgICAgICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWRkbXVsODcxIG11bHRpcGx5IDEwMCAtOS45OTlFKzM4MyAgICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWRkbXVsODcyIG11bHRpcGx5ICAgICAgOS45OTlFKzM4MyAxMDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWRkbXVsODczIG11bHRpcGx5ICAgICAtOS45OTlFKzM4MyAxMDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLQ0KLS0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQotZGRtdWw4ODEgbXVsdGlwbHkgIDEuMjM0N0UtMzU1IDEuMjM0N0UtNDAgIC0+ICAxLjUyNEUtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRtdWw4ODIgbXVsdGlwbHkgIDEuMjM0RS0zNTUgMS4yMzRFLTQwICAgIC0+ICAxLjUyM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRtdWw4ODMgbXVsdGlwbHkgIDEuMjNFLTM1NSAgMS4yM0UtNDAgICAgIC0+ICAxLjUxM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRtdWw4ODQgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4yRS00MCAgICAgIC0+ICAxLjQ0RS0zOTUgIFN1Ym5vcm1hbA0KLWRkbXVsODg1IG11bHRpcGx5ICAxLjJFLTM1NSAgIDEuMkUtNDEgICAgICAtPiAgMS40NEUtMzk2ICBTdWJub3JtYWwNCi1kZG11bDg4NiBtdWx0aXBseSAgMS4yRS0zNTUgICAxLjJFLTQyICAgICAgLT4gIDEuNEUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kZG11bDg4NyBtdWx0aXBseSAgMS4yRS0zNTUgICAxLjNFLTQyICAgICAgLT4gIDEuNkUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kZG11bDg4OCBtdWx0aXBseSAgMS4zRS0zNTUgICAxLjNFLTQyICAgICAgLT4gIDEuN0UtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kZG11bDg4OSBtdWx0aXBseSAgMS4zRS0zNTUgICAxLjNFLTQzICAgICAgLT4gICAgMkUtMzk4ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kZG11bDg5MCBtdWx0aXBseSAgMS4zRS0zNTYgICAxLjNFLTQzICAgICAgLT4gICAgMEUtMzk4ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLQ0KLWRkbXVsODkxIG11bHRpcGx5ICAxLjIzNDVFLTM5ICAgMS4yMzRFLTM1NSAtPiAgMS41MjM0RS0zOTQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kZG11bDg5MiBtdWx0aXBseSAgMS4yMzQ1NkUtMzkgIDEuMjM0RS0zNTUgLT4gIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRtdWw4OTMgbXVsdGlwbHkgIDEuMjM0NUUtNDAgICAxLjIzNEUtMzU1IC0+ICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkbXVsODk0IG11bHRpcGx5ICAxLjIzNDU2RS00MCAgMS4yMzRFLTM1NSAtPiAgMS41MjNFLTM5NSAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kZG11bDg5NSBtdWx0aXBseSAgMS4yMzQ1RS00MSAgIDEuMjM0RS0zNTUgLT4gIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRtdWw4OTYgbXVsdGlwbHkgIDEuMjM0NTZFLTQxICAxLjIzNEUtMzU1IC0+ICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLQ0KLS0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYNCi1kZG11bDkwMCBtdWx0aXBseSAgMC4zMDAwMDAwMDAwRS0xOTEgMC4zMDAwMDAwMDAwRS0xOTEgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRtdWw5MDEgbXVsdGlwbHkgIDAuMzAwMDAwMDAwMUUtMTkxIDAuMzAwMDAwMDAwMUUtMTkxIC0+IDkuMDAwMDAwMDA2MDAwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWRkbXVsOTAyIG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgLT4gOS45OTk5OTk5OTk5OTAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRtdWw5MDMgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTkgICAtPiA5Ljk5OTk5OTk5OTk5OTAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZG11bDkwNCBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWRkbXVsOTA1IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotLS0gVGhlIG5leHQgcm91bmRzIHRvIE5taW4gKGIqKmVtaW4pOyB0aGlzIGlzIHRoZSBkaXN0aW5ndWlzaGluZyBjYXNlDQotLS0gZm9yIGRldGVjdGluZyB0aW5pbmVzcyAoYmVmb3JlIG9yIGFmdGVyIHJvdW5kaW5nKSAtLSBpZiBhZnRlcg0KLS0tIHJvdW5kaW5nIHRoZW4gdGhlIHJlc3VsdCB3b3VsZCBiZSB0aGUgc2FtZSwgYnV0IHRoZSBVbmRlcmZsb3cgZmxhZw0KLS0tIHdvdWxkIG5vdCBiZSBzZXQNCi1kZG11bDkwNiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLS0tIHByb3ZlIHRob3NlIG9wZXJhbmRzIHdlcmUgZXhhY3QNCi1kZG11bDkwNyBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTM4Mw0KLWRkbXVsOTA4IG11bHRpcGx5ICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5DQotDQotLS0gcmVkdWNpbmcgdGluaWVzdA0KLWRkbXVsOTEwIG11bHRpcGx5IDFlLTM5OCAwLjk5IC0+IDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWRkbXVsOTExIG11bHRpcGx5IDFlLTM5OCAwLjc1IC0+IDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWRkbXVsOTEyIG11bHRpcGx5IDFlLTM5OCAwLjUgIC0+IDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZGRtdWw5MTMgbXVsdGlwbHkgMWUtMzk4IDAuMjUgLT4gMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1kZG11bDkxNCBtdWx0aXBseSAxZS0zOTggMC4wMSAtPiAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLS0tIGh1Z2VzdA0KLWRkbXVsOTIwIG11bHRpcGx5ICA5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTkgLT4gOS45OTk5OTk5OTk5OTk5OThFKzMxIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHBvd2VyLW9mLXRlbiBlZGdlIGNhc2VzDQotZGRtdWwxMDAxIG11bHRpcGx5ICAxICAgICAgMTAgICAgICAgICAgICAgICAtPiAxMA0KLWRkbXVsMTAwMiBtdWx0aXBseSAgMSAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwDQotZGRtdWwxMDAzIG11bHRpcGx5ICAxICAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwDQotZGRtdWwxMDA0IG11bHRpcGx5ICAxICAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMA0KLWRkbXVsMTAwNSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwDQotZGRtdWwxMDA2IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwDQotZGRtdWwxMDA3IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMA0KLWRkbXVsMTAwOCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwDQotZGRtdWwxMDA5IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwDQotZGRtdWwxMDEwIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMA0KLWRkbXVsMTAxMSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwDQotZGRtdWwxMDEyIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwDQotZGRtdWwxMDEzIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMA0KLWRkbXVsMTAxNCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwDQotZGRtdWwxMDE1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwDQotZGRtdWwxMDIxIG11bHRpcGx5ICAxMCAgICAgMSAgICAgICAgICAgICAgICAtPiAxMA0KLWRkbXVsMTAyMiBtdWx0aXBseSAgMTAgICAgIDEwICAgICAgICAgICAgICAgLT4gMTAwDQotZGRtdWwxMDIzIG11bHRpcGx5ICAxMCAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwDQotZGRtdWwxMDI0IG11bHRpcGx5ICAxMCAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMA0KLWRkbXVsMTAyNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwDQotZGRtdWwxMDI2IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwDQotZGRtdWwxMDI3IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMA0KLWRkbXVsMTAyOCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwDQotZGRtdWwxMDI5IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwDQotZGRtdWwxMDMwIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMA0KLWRkbXVsMTAzMSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwDQotZGRtdWwxMDMyIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwDQotZGRtdWwxMDMzIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMA0KLWRkbXVsMTAzNCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAwDQotZGRtdWwxMDM1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDAwDQotZGRtdWwxMDQxIG11bHRpcGx5ICAxMDAgICAgMC4xICAgICAgICAgICAgICAtPiAxMC4wDQotZGRtdWwxMDQyIG11bHRpcGx5ICAxMDAgICAgMSAgICAgICAgICAgICAgICAtPiAxMDANCi1kZG11bDEwNDMgbXVsdGlwbHkgIDEwMCAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDANCi1kZG11bDEwNDQgbXVsdGlwbHkgIDEwMCAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwDQotZGRtdWwxMDQ1IG11bHRpcGx5ICAxMDAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDANCi1kZG11bDEwNDYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDANCi1kZG11bDEwNDcgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwDQotZGRtdWwxMDQ4IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDANCi1kZG11bDEwNDkgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDANCi1kZG11bDEwNTAgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwDQotZGRtdWwxMDUxIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDANCi1kZG11bDEwNTIgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDANCi1kZG11bDEwNTMgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwDQotZGRtdWwxMDU0IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDANCi1kZG11bDEwNTUgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMDANCi1kZG11bDEwNjEgbXVsdGlwbHkgIDEwMDAgICAwLjAxICAgICAgICAgICAgIC0+IDEwLjAwDQotZGRtdWwxMDYyIG11bHRpcGx5ICAxMDAwICAgMC4xICAgICAgICAgICAgICAtPiAxMDAuMA0KLWRkbXVsMTA2MyBtdWx0aXBseSAgMTAwMCAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMA0KLWRkbXVsMTA2NCBtdWx0aXBseSAgMTAwMCAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDANCi1kZG11bDEwNjUgbXVsdGlwbHkgIDEwMDAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMA0KLWRkbXVsMTA2NiBtdWx0aXBseSAgMTAwMCAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMA0KLWRkbXVsMTA2NyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDANCi1kZG11bDEwNjggbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMA0KLWRkbXVsMTA2OSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMA0KLWRkbXVsMTA3MCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDANCi1kZG11bDEwNzEgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMA0KLWRkbXVsMTA3MiBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMA0KLWRkbXVsMTA3MyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDANCi1kZG11bDEwNzQgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMA0KLWRkbXVsMTA3NSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KLWRkbXVsMTA4MSBtdWx0aXBseSAgMTAwMDAgIDAuMDAxICAgICAgICAgICAgLT4gMTAuMDAwDQotZGRtdWwxMDgyIG11bHRpcGx5ICAxMDAwMCAgMC4wMSAgICAgICAgICAgICAtPiAxMDAuMDANCi1kZG11bDEwODMgbXVsdGlwbHkgIDEwMDAwICAwLjEgICAgICAgICAgICAgIC0+IDEwMDAuMA0KLWRkbXVsMTA4NCBtdWx0aXBseSAgMTAwMDAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMDANCi1kZG11bDEwODUgbXVsdGlwbHkgIDEwMDAwICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAwMA0KLWRkbXVsMTA4NiBtdWx0aXBseSAgMTAwMDAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwMA0KLWRkbXVsMTA4NyBtdWx0aXBseSAgMTAwMDAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMDANCi1kZG11bDEwODggbXVsdGlwbHkgIDEwMDAwICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAwMA0KLWRkbXVsMTA4OSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwMA0KLWRkbXVsMTA5MCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMDANCi1kZG11bDEwOTEgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAwMA0KLWRkbXVsMTA5MiBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwMA0KLWRkbXVsMTA5MyBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDANCi1kZG11bDEwOTQgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMA0KLWRkbXVsMTA5NSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KLQ0KLWRkbXVsMTA5NyBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMA0KLWRkbXVsMTA5OCBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMA0KLQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZG11bDk5OTAgbXVsdGlwbHkgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw5OTkxIG11bHRpcGx5ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNdWx0aXBseS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtdWx0aXBsaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY0RvdWJsZXMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKKy0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNEb3VibGUKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZG11bDAwMCBtdWx0aXBseSAyICAgICAgMiAtPiA0CitkZG11bDAwMSBtdWx0aXBseSAyICAgICAgMyAtPiA2CitkZG11bDAwMiBtdWx0aXBseSA1ICAgICAgMSAtPiA1CitkZG11bDAwMyBtdWx0aXBseSA1ICAgICAgMiAtPiAxMAorZGRtdWwwMDQgbXVsdGlwbHkgMS4yMCAgIDIgLT4gMi40MAorZGRtdWwwMDUgbXVsdGlwbHkgMS4yMCAgIDAgLT4gMC4wMAorZGRtdWwwMDYgbXVsdGlwbHkgMS4yMCAgLTIgLT4gLTIuNDAKK2RkbXVsMDA3IG11bHRpcGx5IC0xLjIwICAyIC0+IC0yLjQwCitkZG11bDAwOCBtdWx0aXBseSAtMS4yMCAgMCAtPiAtMC4wMAorZGRtdWwwMDkgbXVsdGlwbHkgLTEuMjAgLTIgLT4gMi40MAorZGRtdWwwMTAgbXVsdGlwbHkgNS4wOSA3LjEgLT4gMzYuMTM5CitkZG11bDAxMSBtdWx0aXBseSAyLjUgICAgNCAtPiAxMC4wCitkZG11bDAxMiBtdWx0aXBseSAyLjUwICAgNCAtPiAxMC4wMAorZGRtdWwwMTMgbXVsdGlwbHkgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwIC0+IDEuMjM0NTY3ODkwMDAwMDAwIFJvdW5kZWQKK2RkbXVsMDE1IG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwCitkZG11bDAxNiBtdWx0aXBseSAgOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsMDE3IG11bHRpcGx5ICA5Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgLT4gLTk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRtdWwwMTggbXVsdGlwbHkgLTkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZG11bDAxOSBtdWx0aXBseSAtOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gemVyb3MsIGV0Yy4KK2RkbXVsMDIxIG11bHRpcGx5ICAwICAgICAgMCAgICAgLT4gIDAKK2RkbXVsMDIyIG11bHRpcGx5ICAwICAgICAtMCAgICAgLT4gLTAKK2RkbXVsMDIzIG11bHRpcGx5IC0wICAgICAgMCAgICAgLT4gLTAKK2RkbXVsMDI0IG11bHRpcGx5IC0wICAgICAtMCAgICAgLT4gIDAKK2RkbXVsMDI1IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RkbXVsMDI2IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RkbXVsMDI3IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RkbXVsMDI4IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RkbXVsMDMwIG11bHRpcGx5ICA1LjAwICAgMUUtMyAgLT4gIDAuMDA1MDAKK2RkbXVsMDMxIG11bHRpcGx5ICAwMC4wMCAgMC4wMDAgLT4gIDAuMDAwMDAKK2RkbXVsMDMyIG11bHRpcGx5ICAwMC4wMCAgMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZG11bDAzMyBtdWx0aXBseSAgMEUtMyAgIDAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZGRtdWwwMzQgbXVsdGlwbHkgLTUuMDAgICAxRS0zICAtPiAtMC4wMDUwMAorZGRtdWwwMzUgbXVsdGlwbHkgLTAwLjAwICAwLjAwMCAtPiAtMC4wMDAwMAorZGRtdWwwMzYgbXVsdGlwbHkgLTAwLjAwICAwRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkbXVsMDM3IG11bHRpcGx5IC0wRS0zICAgMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkZG11bDAzOCBtdWx0aXBseSAgNS4wMCAgLTFFLTMgIC0+IC0wLjAwNTAwCitkZG11bDAzOSBtdWx0aXBseSAgMDAuMDAgLTAuMDAwIC0+IC0wLjAwMDAwCitkZG11bDA0MCBtdWx0aXBseSAgMDAuMDAgLTBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMAorZGRtdWwwNDEgbXVsdGlwbHkgIDBFLTMgIC0wMC4wMCAtPiAtMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RkbXVsMDQyIG11bHRpcGx5IC01LjAwICAtMUUtMyAgLT4gIDAuMDA1MDAKK2RkbXVsMDQzIG11bHRpcGx5IC0wMC4wMCAtMC4wMDAgLT4gIDAuMDAwMDAKK2RkbXVsMDQ0IG11bHRpcGx5IC0wMC4wMCAtMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZG11bDA0NSBtdWx0aXBseSAtMEUtMyAgLTAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitkZG11bDA1MCBtdWx0aXBseSAxLjIwIDMgICAgICAgIC0+IDMuNjAKK2RkbXVsMDUxIG11bHRpcGx5IDcgICAgMyAgICAgICAgLT4gMjEKK2RkbXVsMDUyIG11bHRpcGx5IDAuOSAgMC44ICAgICAgLT4gMC43MgorZGRtdWwwNTMgbXVsdGlwbHkgMC45ICAtMCAgICAgICAtPiAtMC4wCitkZG11bDA1NCBtdWx0aXBseSA2NTQzMjEgNjU0MzIxIC0+IDQyODEzNTk3MTA0MQorCitkZG11bDA2MCBtdWx0aXBseSAxMjMuNDUgMWU3ICAtPiAgMS4yMzQ1RSs5CitkZG11bDA2MSBtdWx0aXBseSAxMjMuNDUgMWU4ICAtPiAgMS4yMzQ1RSsxMAorZGRtdWwwNjIgbXVsdGlwbHkgMTIzLjQ1IDFlKzkgLT4gIDEuMjM0NUUrMTEKK2RkbXVsMDYzIG11bHRpcGx5IDEyMy40NSAxZTEwIC0+ICAxLjIzNDVFKzEyCitkZG11bDA2NCBtdWx0aXBseSAxMjMuNDUgMWUxMSAtPiAgMS4yMzQ1RSsxMworZGRtdWwwNjUgbXVsdGlwbHkgMTIzLjQ1IDFlMTIgLT4gIDEuMjM0NUUrMTQKK2RkbXVsMDY2IG11bHRpcGx5IDEyMy40NSAxZTEzIC0+ICAxLjIzNDVFKzE1CisKKworLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCistLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRtdWwwODAgbXVsdGlwbHkgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkZG11bDA4NCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RkbXVsMDkwIG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQorZGRtdWwwOTQgbXVsdGlwbHkgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xIC0+IDEyMzAxMjM0NTY0NTY3OC45CisKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMKK2RkbXVsMTAxIG11bHRpcGx5IDkgOSAgIC0+IDgxCitkZG11bDEwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwCitkZG11bDEwMyBtdWx0aXBseSA5IDkwMCAgIC0+IDgxMDAKK2RkbXVsMTA0IG11bHRpcGx5IDkgOTAwMCAgIC0+IDgxMDAwCitkZG11bDEwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwCitkZG11bDEwNiBtdWx0aXBseSA5IDkwMDAwMCAgIC0+IDgxMDAwMDAKK2RkbXVsMTA3IG11bHRpcGx5IDkgOTAwMDAwMCAgIC0+IDgxMDAwMDAwCitkZG11bDEwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwCitkZG11bDEwOSBtdWx0aXBseSA5IDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAKK2RkbXVsMTEwIG11bHRpcGx5IDkgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwCitkZG11bDExMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwCitkZG11bDExMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAKK2RkbXVsMTEzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwCitkZG11bDExNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwCitkZG11bDExNSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMTYgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMTcgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMAorLS1kZG11bDExOCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMTkgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMjAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZG11bDEyMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMjIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMjMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKK2RkbXVsMTMxIG11bHRpcGx5IDMgMyAgIC0+IDkKK2RkbXVsMTMyIG11bHRpcGx5IDMgMzAgICAtPiA5MAorZGRtdWwxMzMgbXVsdGlwbHkgMyAzMDAgICAtPiA5MDAKK2RkbXVsMTM0IG11bHRpcGx5IDMgMzAwMCAgIC0+IDkwMDAKK2RkbXVsMTM1IG11bHRpcGx5IDMgMzAwMDAgICAtPiA5MDAwMAorZGRtdWwxMzYgbXVsdGlwbHkgMyAzMDAwMDAgICAtPiA5MDAwMDAKK2RkbXVsMTM3IG11bHRpcGx5IDMgMzAwMDAwMCAgIC0+IDkwMDAwMDAKK2RkbXVsMTM4IG11bHRpcGx5IDMgMzAwMDAwMDAgICAtPiA5MDAwMDAwMAorZGRtdWwxMzkgbXVsdGlwbHkgMyAzMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAKK2RkbXVsMTQwIG11bHRpcGx5IDMgMzAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAKK2RkbXVsMTQxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMAorZGRtdWwxNDIgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAKK2RkbXVsMTQzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAKK2RkbXVsMTQ0IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMAorZGRtdWwxNDUgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAKKworLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZworZGRtdWwzMDEgbXVsdGlwbHkgOSA5ICAgLT4gODEKK2RkbXVsMzAyIG11bHRpcGx5IDkgOTAgICAtPiA4MTAKK2RkbXVsMzAzIG11bHRpcGx5IDkgOTAwICAgLT4gODEwMAorZGRtdWwzMDQgbXVsdGlwbHkgOSA5MDAwICAgLT4gODEwMDAKK2RkbXVsMzA1IG11bHRpcGx5IDkgOTAwMDAgICAtPiA4MTAwMDAKK2RkbXVsMzA2IG11bHRpcGx5IDkgOTAwMDAwICAgLT4gODEwMDAwMAorZGRtdWwzMDcgbXVsdGlwbHkgOSA5MDAwMDAwICAgLT4gODEwMDAwMDAKK2RkbXVsMzA4IG11bHRpcGx5IDkgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDAKK2RkbXVsMzA5IG11bHRpcGx5IDkgOTAwMDAwMDAwICAgLT4gODEwMDAwMDAwMAorZGRtdWwzMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAKK2RkbXVsMzExIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAKK2RkbXVsMzEyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMAorZGRtdWwzMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAKK2RkbXVsMzE0IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAKK2RkbXVsMzE1IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMAorZGRtdWwzMTYgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCitkZG11bDMxNyBtdWx0aXBseSA5MCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE3ICBSb3VuZGVkCitkZG11bDMxOCBtdWx0aXBseSA5MDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsxOCAgUm91bmRlZAorZGRtdWwzMTkgbXVsdGlwbHkgOTAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE5ICBSb3VuZGVkCitkZG11bDMyMCBtdWx0aXBseSA5MDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIwICBSb3VuZGVkCitkZG11bDMyMSBtdWx0aXBseSA5MDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMSAgUm91bmRlZAorZGRtdWwzMjIgbXVsdGlwbHkgOTAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIyICBSb3VuZGVkCitkZG11bDMyMyBtdWx0aXBseSA5MDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIzICBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCitkZG11bDUwNCAgbXVsdGlwbHkgIDBFLTI2MCAxMDAwRS0yNjAgIC0+IDBFLTM5OCBDbGFtcGVkCitkZG11bDUwNSAgbXVsdGlwbHkgIDEwMEUrMjYwIDBFKzI2MCAgIC0+IDBFKzM2OSBDbGFtcGVkCistLSA2NUstMSBjYXNlCitkZG11bDUwNiBtdWx0aXBseSA3Ny4xIDg1MCAtPiA2NTUzNS4wCisKKy0tIG1peGVkIHdpdGggemVyb3MKK2RkbXVsNTQxIG11bHRpcGx5ICAwICAgIC0xICAgICAtPiAtMAorZGRtdWw1NDIgbXVsdGlwbHkgLTAgICAgLTEgICAgIC0+ICAwCitkZG11bDU0MyBtdWx0aXBseSAgMCAgICAgMSAgICAgLT4gIDAKK2RkbXVsNTQ0IG11bHRpcGx5IC0wICAgICAxICAgICAtPiAtMAorZGRtdWw1NDUgbXVsdGlwbHkgLTEgICAgIDAgICAgIC0+IC0wCitkZG11bDU0NiBtdWx0aXBseSAtMSAgICAtMCAgICAgLT4gIDAKK2RkbXVsNTQ3IG11bHRpcGx5ICAxICAgICAwICAgICAtPiAgMAorZGRtdWw1NDggbXVsdGlwbHkgIDEgICAgLTAgICAgIC0+IC0wCisKK2RkbXVsNTUxIG11bHRpcGx5ICAwLjAgIC0xICAgICAtPiAtMC4wCitkZG11bDU1MiBtdWx0aXBseSAtMC4wICAtMSAgICAgLT4gIDAuMAorZGRtdWw1NTMgbXVsdGlwbHkgIDAuMCAgIDEgICAgIC0+ICAwLjAKK2RkbXVsNTU0IG11bHRpcGx5IC0wLjAgICAxICAgICAtPiAtMC4wCitkZG11bDU1NSBtdWx0aXBseSAtMS4wICAgMCAgICAgLT4gLTAuMAorZGRtdWw1NTYgbXVsdGlwbHkgLTEuMCAgLTAgICAgIC0+ICAwLjAKK2RkbXVsNTU3IG11bHRpcGx5ICAxLjAgICAwICAgICAtPiAgMC4wCitkZG11bDU1OCBtdWx0aXBseSAgMS4wICAtMCAgICAgLT4gLTAuMAorCitkZG11bDU2MSBtdWx0aXBseSAgMCAgICAtMS4wICAgLT4gLTAuMAorZGRtdWw1NjIgbXVsdGlwbHkgLTAgICAgLTEuMCAgIC0+ICAwLjAKK2RkbXVsNTYzIG11bHRpcGx5ICAwICAgICAxLjAgICAtPiAgMC4wCitkZG11bDU2NCBtdWx0aXBseSAtMCAgICAgMS4wICAgLT4gLTAuMAorZGRtdWw1NjUgbXVsdGlwbHkgLTEgICAgIDAuMCAgIC0+IC0wLjAKK2RkbXVsNTY2IG11bHRpcGx5IC0xICAgIC0wLjAgICAtPiAgMC4wCitkZG11bDU2NyBtdWx0aXBseSAgMSAgICAgMC4wICAgLT4gIDAuMAorZGRtdWw1NjggbXVsdGlwbHkgIDEgICAgLTAuMCAgIC0+IC0wLjAKKworZGRtdWw1NzEgbXVsdGlwbHkgIDAuMCAgLTEuMCAgIC0+IC0wLjAwCitkZG11bDU3MiBtdWx0aXBseSAtMC4wICAtMS4wICAgLT4gIDAuMDAKK2RkbXVsNTczIG11bHRpcGx5ICAwLjAgICAxLjAgICAtPiAgMC4wMAorZGRtdWw1NzQgbXVsdGlwbHkgLTAuMCAgIDEuMCAgIC0+IC0wLjAwCitkZG11bDU3NSBtdWx0aXBseSAtMS4wICAgMC4wICAgLT4gLTAuMDAKK2RkbXVsNTc2IG11bHRpcGx5IC0xLjAgIC0wLjAgICAtPiAgMC4wMAorZGRtdWw1NzcgbXVsdGlwbHkgIDEuMCAgIDAuMCAgIC0+ICAwLjAwCitkZG11bDU3OCBtdWx0aXBseSAgMS4wICAtMC4wICAgLT4gLTAuMDAKKworCistLSBTcGVjaWFscworZGRtdWw1ODAgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw1ODEgbXVsdGlwbHkgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRtdWw1ODIgbXVsdGlwbHkgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRtdWw1ODMgbXVsdGlwbHkgIEluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDU4NCBtdWx0aXBseSAgSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNTg1IG11bHRpcGx5ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkbXVsNTg2IG11bHRpcGx5ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RkbXVsNTg3IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXVsNTg4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNTg5IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNTkwIG11bHRpcGx5IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNTkxIG11bHRpcGx5IC0wICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw1OTIgbXVsdGlwbHkgIDAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDU5MyBtdWx0aXBseSAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG11bDU5NCBtdWx0aXBseSAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZG11bDU5NSBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbXVsNjAwIG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RkbXVsNjAxIG11bHRpcGx5IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RkbXVsNjAyIG11bHRpcGx5IC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RkbXVsNjAzIG11bHRpcGx5IC1JbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2MDQgbXVsdGlwbHkgLUluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDYwNSBtdWx0aXBseSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZG11bDYwNiBtdWx0aXBseSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZG11bDYwNyBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZG11bDYwOCBtdWx0aXBseSAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5CitkZG11bDYwOSBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkZG11bDYxMCBtdWx0aXBseSAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5CitkZG11bDYxMSBtdWx0aXBseSAtMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjEyIG11bHRpcGx5ICAwICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2MTMgbXVsdGlwbHkgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw2MTQgbXVsdGlwbHkgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw2MTUgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCitkZG11bDYyMSBtdWx0aXBseSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRtdWw2MjIgbXVsdGlwbHkgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkbXVsNjIzIG11bHRpcGx5ICBOYU4gLTEgICAgICAtPiAgTmFOCitkZG11bDYyNCBtdWx0aXBseSAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRtdWw2MjUgbXVsdGlwbHkgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkbXVsNjI2IG11bHRpcGx5ICBOYU4gIDEgICAgICAtPiAgTmFOCitkZG11bDYyNyBtdWx0aXBseSAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRtdWw2MjggbXVsdGlwbHkgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkbXVsNjI5IG11bHRpcGx5ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZG11bDYzMCBtdWx0aXBseSAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzEgbXVsdGlwbHkgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkbXVsNjMyIG11bHRpcGx5IC0xICAgIE5hTiAgICAtPiAgTmFOCitkZG11bDYzMyBtdWx0aXBseSAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzQgbXVsdGlwbHkgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkbXVsNjM1IG11bHRpcGx5ICAxICAgIE5hTiAgICAtPiAgTmFOCitkZG11bDYzNiBtdWx0aXBseSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzcgbXVsdGlwbHkgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRtdWw2NDEgbXVsdGlwbHkgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0MiBtdWx0aXBseSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQzIG11bHRpcGx5ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NDQgbXVsdGlwbHkgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0NSBtdWx0aXBseSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQ2IG11bHRpcGx5ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NDcgbXVsdGlwbHkgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0OCBtdWx0aXBseSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQ5IG11bHRpcGx5ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTAgbXVsdGlwbHkgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1MSBtdWx0aXBseSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjUyIG11bHRpcGx5IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTMgbXVsdGlwbHkgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1NCBtdWx0aXBseSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjU1IG11bHRpcGx5ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTYgbXVsdGlwbHkgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1NyBtdWx0aXBseSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjU4IG11bHRpcGx5ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTkgbXVsdGlwbHkgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbXVsNjYxIG11bHRpcGx5ICBOYU45IC1JbmYgICAtPiAgTmFOOQorZGRtdWw2NjIgbXVsdGlwbHkgIE5hTjggIDk5OSAgIC0+ICBOYU44CitkZG11bDY2MyBtdWx0aXBseSAgTmFONzEgSW5mICAgLT4gIE5hTjcxCitkZG11bDY2NCBtdWx0aXBseSAgTmFONiAgTmFONSAgLT4gIE5hTjYKK2RkbXVsNjY1IG11bHRpcGx5IC1JbmYgICBOYU40ICAtPiAgTmFONAorZGRtdWw2NjYgbXVsdGlwbHkgLTk5OSAgIE5hTjMzIC0+ICBOYU4zMworZGRtdWw2NjcgbXVsdGlwbHkgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK2RkbXVsNjcxIG11bHRpcGx5ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjcyIG11bHRpcGx5ICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjczIG11bHRpcGx5ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc0IG11bHRpcGx5ICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc1IG11bHRpcGx5ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc2IG11bHRpcGx5IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc3IG11bHRpcGx5ICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc4IG11bHRpcGx5ICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc5IG11bHRpcGx5ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZGRtdWw2ODEgbXVsdGlwbHkgLU5hTjkgLUluZiAgIC0+IC1OYU45CitkZG11bDY4MiBtdWx0aXBseSAtTmFOOCAgOTk5ICAgLT4gLU5hTjgKK2RkbXVsNjgzIG11bHRpcGx5IC1OYU43MSBJbmYgICAtPiAtTmFONzEKK2RkbXVsNjg0IG11bHRpcGx5IC1OYU42IC1OYU41ICAtPiAtTmFONgorZGRtdWw2ODUgbXVsdGlwbHkgLUluZiAgLU5hTjQgIC0+IC1OYU40CitkZG11bDY4NiBtdWx0aXBseSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzCitkZG11bDY4NyBtdWx0aXBseSAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworZGRtdWw2OTEgbXVsdGlwbHkgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTIgbXVsdGlwbHkgLXNOYU45OCAtMTEgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTMgbXVsdGlwbHkgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTQgbXVsdGlwbHkgLXNOYU4xNiAtc05hTjk0IC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTUgbXVsdGlwbHkgLU5hTjk1ICAtc05hTjkzIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTYgbXVsdGlwbHkgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTggbXVsdGlwbHkgIEluZiAgICAtc05hTjkwIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkZG11bDcwMSBtdWx0aXBseSAtTmFOICAtSW5mICAgLT4gLU5hTgorZGRtdWw3MDIgbXVsdGlwbHkgLU5hTiAgIDk5OSAgIC0+IC1OYU4KK2RkbXVsNzAzIG11bHRpcGx5IC1OYU4gICBJbmYgICAtPiAtTmFOCitkZG11bDcwNCBtdWx0aXBseSAtTmFOICAtTmFOICAgLT4gLU5hTgorZGRtdWw3MDUgbXVsdGlwbHkgLUluZiAgLU5hTjAgIC0+IC1OYU4KK2RkbXVsNzA2IG11bHRpcGx5IC05OTkgIC1OYU4gICAtPiAtTmFOCitkZG11bDcwNyBtdWx0aXBseSAgSW5mICAtTmFOICAgLT4gLU5hTgorCitkZG11bDcxMSBtdWx0aXBseSAtc05hTiAgIC1JbmYgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTIgbXVsdGlwbHkgLXNOYU4gICAtMTEgICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzEzIG11bHRpcGx5IC1zTmFOMDAgIE5hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDcxNCBtdWx0aXBseSAtc05hTiAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTUgbXVsdGlwbHkgLU5hTiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzE2IG11bHRpcGx5IC1JbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDcxNyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTggbXVsdGlwbHkgIEluZiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzE5IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworLS0gc2lnbnMKK2RkbXVsNzUxIG11bHRpcGx5ICAxZSsyNzcgIDFlKzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc1MiBtdWx0aXBseSAgMWUrMjc3IC0xZSszMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NTMgbXVsdGlwbHkgLTFlKzI3NyAgMWUrMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsNzU0IG11bHRpcGx5IC0xZSsyNzcgLTFlKzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc1NSBtdWx0aXBseSAgMWUtMjc3ICAxZS0zMTEgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDc1NiBtdWx0aXBseSAgMWUtMjc3IC0xZS0zMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDc1NyBtdWx0aXBseSAtMWUtMjc3ICAxZS0zMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDc1OCBtdWx0aXBseSAtMWUtMjc3IC0xZS0zMTEgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZGRtdWw3NjAgbXVsdGlwbHkgMWUtMjkxIDFlLTEwMSAtPiAxRS0zOTIgU3Vibm9ybWFsCitkZG11bDc2MSBtdWx0aXBseSAxZS0yOTEgMWUtMTAyIC0+IDFFLTM5MyBTdWJub3JtYWwKK2RkbXVsNzYyIG11bHRpcGx5IDFlLTI5MSAxZS0xMDMgLT4gMUUtMzk0IFN1Ym5vcm1hbAorZGRtdWw3NjMgbXVsdGlwbHkgMWUtMjkxIDFlLTEwNCAtPiAxRS0zOTUgU3Vibm9ybWFsCitkZG11bDc2NCBtdWx0aXBseSAxZS0yOTEgMWUtMTA1IC0+IDFFLTM5NiBTdWJub3JtYWwKK2RkbXVsNzY1IG11bHRpcGx5IDFlLTI5MSAxZS0xMDYgLT4gMUUtMzk3IFN1Ym5vcm1hbAorZGRtdWw3NjYgbXVsdGlwbHkgMWUtMjkxIDFlLTEwNyAtPiAxRS0zOTggU3Vibm9ybWFsCitkZG11bDc2NyBtdWx0aXBseSAxZS0yOTEgMWUtMTA4IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDc2OCBtdWx0aXBseSAxZS0yOTEgMWUtMTA5IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDc2OSBtdWx0aXBseSAxZS0yOTEgMWUtMTEwIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkZG11bDc3MCBtdWx0aXBseSAxZSs2MCAxZSszMjEgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSAgQ2xhbXBlZAorZGRtdWw3NzEgbXVsdGlwbHkgMWUrNjAgMWUrMzIyIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyICBDbGFtcGVkCitkZG11bDc3MiBtdWx0aXBseSAxZSs2MCAxZSszMjMgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzICBDbGFtcGVkCitkZG11bDc3MyBtdWx0aXBseSAxZSs2MCAxZSszMjQgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAorZGRtdWw3NzQgbXVsdGlwbHkgMWUrNjAgMWUrMzI1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NzUgbXVsdGlwbHkgMWUrNjAgMWUrMzI2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NzYgbXVsdGlwbHkgMWUrNjAgMWUrMzI3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NzcgbXVsdGlwbHkgMWUrNjAgMWUrMzI4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NzggbXVsdGlwbHkgMWUrNjAgMWUrMzI5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NzkgbXVsdGlwbHkgMWUrNjAgMWUrMzMwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitkZG11bDgwMSBtdWx0aXBseSAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDEuMDAwMEUtMzk0IFN1Ym5vcm1hbAorZGRtdWw4MDIgbXVsdGlwbHkgIDEuMDAwRS0zOTQgICAxZS0xICAtPiAxLjAwMEUtMzk1ICBTdWJub3JtYWwKK2RkbXVsODAzIG11bHRpcGx5ICAxLjAwRS0zOTQgICAgMWUtMiAgLT4gMS4wMEUtMzk2ICAgU3Vibm9ybWFsCitkZG11bDgwNCBtdWx0aXBseSAgMS4wRS0zOTQgICAgIDFlLTMgIC0+IDEuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRtdWw4MDUgbXVsdGlwbHkgIDEuMEUtMzk0ICAgICAxZS00ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZG11bDgwNiBtdWx0aXBseSAgMS4zRS0zOTQgICAgIDFlLTQgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODA3IG11bHRpcGx5ICAxLjVFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MDggbXVsdGlwbHkgIDEuN0UtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgwOSBtdWx0aXBseSAgMi4zRS0zOTQgICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODEwIG11bHRpcGx5ICAyLjVFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTEgbXVsdGlwbHkgIDIuN0UtMzk0ICAgICAxZS00ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgxMiBtdWx0aXBseSAgMS40OUUtMzk0ICAgIDFlLTQgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODEzIG11bHRpcGx5ICAxLjUwRS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTQgbXVsdGlwbHkgIDEuNTFFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgxNSBtdWx0aXBseSAgMi40OUUtMzk0ICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODE2IG11bHRpcGx5ICAyLjUwRS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTcgbXVsdGlwbHkgIDIuNTFFLTM5NCAgICAxZS00ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkbXVsODE4IG11bHRpcGx5ICAxRS0zOTQgICAgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwKK2RkbXVsODE5IG11bHRpcGx5ICAzRS0zOTQgICAgICAgMWUtNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDgyMCBtdWx0aXBseSAgNUUtMzk0ICAgICAgIDFlLTUgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw4MjEgbXVsdGlwbHkgIDdFLTM5NCAgICAgICAxZS01ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgyMiBtdWx0aXBseSAgOUUtMzk0ICAgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODIzIG11bHRpcGx5ICA5LjlFLTM5NCAgICAgMWUtNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZG11bDgyNCBtdWx0aXBseSAgMUUtMzk0ICAgICAgLTFlLTQgIC0+IC0xRS0zOTggICAgU3Vibm9ybWFsCitkZG11bDgyNSBtdWx0aXBseSAgM0UtMzk0ICAgICAgLTFlLTUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw4MjYgbXVsdGlwbHkgLTVFLTM5NCAgICAgICAxZS01ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsODI3IG11bHRpcGx5ICA3RS0zOTQgICAgICAtMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MjggbXVsdGlwbHkgLTlFLTM5NCAgICAgICAxZS01ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgyOSBtdWx0aXBseSAgOS45RS0zOTQgICAgLTFlLTUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODMwIG11bHRpcGx5ICAzLjBFLTM5NCAgICAtMWUtNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RkbXVsODMxIG11bHRpcGx5ICAxLjBFLTE5OSAgICAgMWUtMjAwIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDgzMiBtdWx0aXBseSAgMS4wRS0xOTkgICAgIDFlLTE5OSAtPiAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsODMzIG11bHRpcGx5ICAxLjBFLTE5OSAgICAgMWUtMTk4IC0+IDEuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRtdWw4MzQgbXVsdGlwbHkgIDIuMEUtMTk5ICAgICAyZS0xOTggLT4gNC4wRS0zOTcgICAgU3Vibm9ybWFsCitkZG11bDgzNSBtdWx0aXBseSAgNC4wRS0xOTkgICAgIDRlLTE5OCAtPiAxLjYwRS0zOTYgICBTdWJub3JtYWwKK2RkbXVsODM2IG11bHRpcGx5IDEwLjBFLTE5OSAgICAxMGUtMTk4IC0+IDEuMDAwRS0zOTUgIFN1Ym5vcm1hbAorZGRtdWw4MzcgbXVsdGlwbHkgMzAuMEUtMTk5ICAgIDMwZS0xOTggLT4gOS4wMDBFLTM5NSAgU3Vibm9ybWFsCitkZG11bDgzOCBtdWx0aXBseSA0MC4wRS0xOTkgICAgNDBlLTE4OCAtPiAxLjYwMDBFLTM4NCBTdWJub3JtYWwKK2RkbXVsODM5IG11bHRpcGx5IDQwLjBFLTE5OSAgICA0MGUtMTg3IC0+IDEuNjAwMEUtMzgzCitkZG11bDg0MCBtdWx0aXBseSA0MC4wRS0xOTkgICAgNDBlLTE4NiAtPiAxLjYwMDBFLTM4MgorCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKK2RkbXVsODcwIG11bHRpcGx5IDEwMCAgOS45OTlFKzM4MyAgICAgICAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RkbXVsODcxIG11bHRpcGx5IDEwMCAtOS45OTlFKzM4MyAgICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGRtdWw4NzIgbXVsdGlwbHkgICAgICA5Ljk5OUUrMzgzIDEwMCAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkZG11bDg3MyBtdWx0aXBseSAgICAgLTkuOTk5RSszODMgMTAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RkbXVsODgxIG11bHRpcGx5ICAxLjIzNDdFLTM1NSAxLjIzNDdFLTQwICAtPiAgMS41MjRFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4ODIgbXVsdGlwbHkgIDEuMjM0RS0zNTUgMS4yMzRFLTQwICAgIC0+ICAxLjUyM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZG11bDg4MyBtdWx0aXBseSAgMS4yM0UtMzU1ICAxLjIzRS00MCAgICAgLT4gIDEuNTEzRS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkbXVsODg0IG11bHRpcGx5ICAxLjJFLTM1NSAgIDEuMkUtNDAgICAgICAtPiAgMS40NEUtMzk1ICBTdWJub3JtYWwKK2RkbXVsODg1IG11bHRpcGx5ICAxLjJFLTM1NSAgIDEuMkUtNDEgICAgICAtPiAgMS40NEUtMzk2ICBTdWJub3JtYWwKK2RkbXVsODg2IG11bHRpcGx5ICAxLjJFLTM1NSAgIDEuMkUtNDIgICAgICAtPiAgMS40RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRtdWw4ODcgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4zRS00MiAgICAgIC0+ICAxLjZFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZG11bDg4OCBtdWx0aXBseSAgMS4zRS0zNTUgICAxLjNFLTQyICAgICAgLT4gIDEuN0UtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkbXVsODg5IG11bHRpcGx5ICAxLjNFLTM1NSAgIDEuM0UtNDMgICAgICAtPiAgICAyRS0zOTggICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRtdWw4OTAgbXVsdGlwbHkgIDEuM0UtMzU2ICAgMS4zRS00MyAgICAgIC0+ICAgIDBFLTM5OCAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworZGRtdWw4OTEgbXVsdGlwbHkgIDEuMjM0NUUtMzkgICAxLjIzNEUtMzU1IC0+ICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4OTIgbXVsdGlwbHkgIDEuMjM0NTZFLTM5ICAxLjIzNEUtMzU1IC0+ICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4OTMgbXVsdGlwbHkgIDEuMjM0NUUtNDAgICAxLjIzNEUtMzU1IC0+ICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4OTQgbXVsdGlwbHkgIDEuMjM0NTZFLTQwICAxLjIzNEUtMzU1IC0+ICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4OTUgbXVsdGlwbHkgIDEuMjM0NUUtNDEgICAxLjIzNEUtMzU1IC0+ICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4OTYgbXVsdGlwbHkgIDEuMjM0NTZFLTQxICAxLjIzNEUtMzU1IC0+ICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93CistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKK2RkbXVsOTAwIG11bHRpcGx5ICAwLjMwMDAwMDAwMDBFLTE5MSAwLjMwMDAwMDAwMDBFLTE5MSAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsOTAxIG11bHRpcGx5ICAwLjMwMDAwMDAwMDFFLTE5MSAwLjMwMDAwMDAwMDFFLTE5MSAtPiA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsOTAyIG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgLT4gOS45OTk5OTk5OTk5OTAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZG11bDkwMyBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OSAgIC0+IDkuOTk5OTk5OTk5OTk5MDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZGRtdWw5MDQgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsOTA1IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCistLSBUaGUgbmV4dCByb3VuZHMgdG8gTm1pbiAoYioqZW1pbik7IHRoaXMgaXMgdGhlIGRpc3Rpbmd1aXNoaW5nIGNhc2UKKy0tIGZvciBkZXRlY3RpbmcgdGluaW5lc3MgKGJlZm9yZSBvciBhZnRlciByb3VuZGluZykgLS0gaWYgYWZ0ZXIKKy0tIHJvdW5kaW5nIHRoZW4gdGhlIHJlc3VsdCB3b3VsZCBiZSB0aGUgc2FtZSwgYnV0IHRoZSBVbmRlcmZsb3cgZmxhZworLS0gd291bGQgbm90IGJlIHNldAorZGRtdWw5MDYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKy0tIHByb3ZlIHRob3NlIG9wZXJhbmRzIHdlcmUgZXhhY3QKK2RkbXVsOTA3IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAxICAgICAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCitkZG11bDkwOCBtdWx0aXBseSAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OQorCistLSByZWR1Y2luZyB0aW5pZXN0CitkZG11bDkxMCBtdWx0aXBseSAxZS0zOTggMC45OSAtPiAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkbXVsOTExIG11bHRpcGx5IDFlLTM5OCAwLjc1IC0+IDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRtdWw5MTIgbXVsdGlwbHkgMWUtMzk4IDAuNSAgLT4gMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2RkbXVsOTEzIG11bHRpcGx5IDFlLTM5OCAwLjI1IC0+IDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitkZG11bDkxNCBtdWx0aXBseSAxZS0zOTggMC4wMSAtPiAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBodWdlc3QKK2RkbXVsOTIwIG11bHRpcGx5ICA5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTkgLT4gOS45OTk5OTk5OTk5OTk5OThFKzMxIEluZXhhY3QgUm91bmRlZAorCistLSBwb3dlci1vZi10ZW4gZWRnZSBjYXNlcworZGRtdWwxMDAxIG11bHRpcGx5ICAxICAgICAgMTAgICAgICAgICAgICAgICAtPiAxMAorZGRtdWwxMDAyIG11bHRpcGx5ICAxICAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAKK2RkbXVsMTAwMyBtdWx0aXBseSAgMSAgICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMAorZGRtdWwxMDA0IG11bHRpcGx5ICAxICAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMAorZGRtdWwxMDA1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAKK2RkbXVsMTAwNiBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMAorZGRtdWwxMDA3IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMAorZGRtdWwxMDA4IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAKK2RkbXVsMTAwOSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMAorZGRtdWwxMDEwIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMAorZGRtdWwxMDExIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAKK2RkbXVsMTAxMiBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMAorZGRtdWwxMDEzIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMAorZGRtdWwxMDE0IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTAxNSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDIxIG11bHRpcGx5ICAxMCAgICAgMSAgICAgICAgICAgICAgICAtPiAxMAorZGRtdWwxMDIyIG11bHRpcGx5ICAxMCAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDAKK2RkbXVsMTAyMyBtdWx0aXBseSAgMTAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMAorZGRtdWwxMDI0IG11bHRpcGx5ICAxMCAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMAorZGRtdWwxMDI1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAKK2RkbXVsMTAyNiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMAorZGRtdWwxMDI3IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMAorZGRtdWwxMDI4IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RkbXVsMTAyOSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMAorZGRtdWwxMDMwIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMAorZGRtdWwxMDMxIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RkbXVsMTAzMiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMAorZGRtdWwxMDMzIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMAorZGRtdWwxMDM0IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTAzNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDQxIG11bHRpcGx5ICAxMDAgICAgMC4xICAgICAgICAgICAgICAtPiAxMC4wCitkZG11bDEwNDIgbXVsdGlwbHkgIDEwMCAgICAxICAgICAgICAgICAgICAgIC0+IDEwMAorZGRtdWwxMDQzIG11bHRpcGx5ICAxMDAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwCitkZG11bDEwNDQgbXVsdGlwbHkgIDEwMCAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwCitkZG11bDEwNDUgbXVsdGlwbHkgIDEwMCAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMAorZGRtdWwxMDQ2IG11bHRpcGx5ICAxMDAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwCitkZG11bDEwNDcgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwCitkZG11bDEwNDggbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMAorZGRtdWwxMDQ5IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwCitkZG11bDEwNTAgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwCitkZG11bDEwNTEgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMAorZGRtdWwxMDUyIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwCitkZG11bDEwNTMgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwCitkZG11bDEwNTQgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDU1IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDAwCitkZG11bDEwNjEgbXVsdGlwbHkgIDEwMDAgICAwLjAxICAgICAgICAgICAgIC0+IDEwLjAwCitkZG11bDEwNjIgbXVsdGlwbHkgIDEwMDAgICAwLjEgICAgICAgICAgICAgIC0+IDEwMC4wCitkZG11bDEwNjMgbXVsdGlwbHkgIDEwMDAgICAxICAgICAgICAgICAgICAgIC0+IDEwMDAKK2RkbXVsMTA2NCBtdWx0aXBseSAgMTAwMCAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDAKK2RkbXVsMTA2NSBtdWx0aXBseSAgMTAwMCAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwCitkZG11bDEwNjYgbXVsdGlwbHkgIDEwMDAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RkbXVsMTA2NyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RkbXVsMTA2OCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwCitkZG11bDEwNjkgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RkbXVsMTA3MCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RkbXVsMTA3MSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwCitkZG11bDEwNzIgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RkbXVsMTA3MyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RkbXVsMTA3NCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkZG11bDEwNzUgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTA4MSBtdWx0aXBseSAgMTAwMDAgIDAuMDAxICAgICAgICAgICAgLT4gMTAuMDAwCitkZG11bDEwODIgbXVsdGlwbHkgIDEwMDAwICAwLjAxICAgICAgICAgICAgIC0+IDEwMC4wMAorZGRtdWwxMDgzIG11bHRpcGx5ICAxMDAwMCAgMC4xICAgICAgICAgICAgICAtPiAxMDAwLjAKK2RkbXVsMTA4NCBtdWx0aXBseSAgMTAwMDAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMDAKK2RkbXVsMTA4NSBtdWx0aXBseSAgMTAwMDAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDAwCitkZG11bDEwODYgbXVsdGlwbHkgIDEwMDAwICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RkbXVsMTA4NyBtdWx0aXBseSAgMTAwMDAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RkbXVsMTA4OCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDAwCitkZG11bDEwODkgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RkbXVsMTA5MCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RkbXVsMTA5MSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDAwCitkZG11bDEwOTIgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RkbXVsMTA5MyBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RkbXVsMTA5NCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkZG11bDEwOTUgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKKworZGRtdWwxMDk3IG11bHRpcGx5ICAxMDAwMCAgIDk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTkwMDAwCitkZG11bDEwOTggbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDAKKworCistLSBOdWxsIHRlc3RzCitkZG11bDk5OTAgbXVsdGlwbHkgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDk5OTEgbXVsdGlwbHkgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRNaW51cy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dE1pbnVzLmRlY1Rlc3QKaW5kZXggZjhhM2MwZS4uMzlmNThjMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dE1pbnVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dE1pbnVzLmRlY1Rlc3QKQEAgLTEsMTI2ICsxLDEyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGROZXh0TWludXMuZGVjVGVzdCAtLSBkZWNEb3VibGUgbmV4dCB0aGF0IGlzIGxlc3MgWzc1NHIgbmV4dGRvd25dIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRkbmV4dG0wMDEgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTQNCi1kZG5leHRtMDAyIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk1DQotZGRuZXh0bTAwMyBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5Ng0KLWRkbmV4dG0wMDQgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OTk5OTk5OTcNCi1kZG5leHRtMDA1IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk4DQotZGRuZXh0bTAwNiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dG0wMDcgbmV4dG1pbnVzICAxLjAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dG0wMDggbmV4dG1pbnVzICAxICAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dG0wMDkgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMA0KLWRkbmV4dG0wMTAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dG0wMTEgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMg0KLWRkbmV4dG0wMTIgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwNCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMw0KLWRkbmV4dG0wMTMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNA0KLWRkbmV4dG0wMTQgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwNiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQ0KLWRkbmV4dG0wMTUgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwNyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNg0KLWRkbmV4dG0wMTYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNw0KLWRkbmV4dG0wMTcgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwOSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOA0KLWRkbmV4dG0wMTggbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAxMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQ0KLWRkbmV4dG0wMTkgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMA0KLWRkbmV4dG0wMjAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAxMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQ0KLQ0KLWRkbmV4dG0wMjEgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYNCi1kZG5leHRtMDIyIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk3DQotZGRuZXh0bTAyMyBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OA0KLWRkbmV4dG0wMjQgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHRtMDI1IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDANCi1kZG5leHRtMDI2IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDENCi1kZG5leHRtMDI3IG5leHRtaW51cyAtMS4wICAgICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dG0wMjggbmV4dG1pbnVzIC0xICAgICAgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0bTAyOSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyDQotZGRuZXh0bTAzMCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzDQotZGRuZXh0bTAzMSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0DQotZGRuZXh0bTAzMiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1DQotZGRuZXh0bTAzMyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2DQotZGRuZXh0bTAzNCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3DQotZGRuZXh0bTAzNSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4DQotZGRuZXh0bTAzNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5DQotZGRuZXh0bTAzNyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwDQotZGRuZXh0bTAzOCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDExDQotZGRuZXh0bTAzOSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDExICAtPiAgLTEuMDAwMDAwMDAwMDAwMDEyDQotDQotLS0gdWx0cmEtdGlueSBpbnB1dHMNCi1kZG5leHRtMDYyIG5leHRtaW51cyAgMUUtMzk4ICAgICAgICAgLT4gICAwRS0zOTgNCi1kZG5leHRtMDY1IG5leHRtaW51cyAtMUUtMzk4ICAgICAgICAgLT4gIC0yRS0zOTgNCi0NCi0tLSBaZXJvcw0KLWRkbmV4dG0xMDAgbmV4dG1pbnVzIC0wICAgICAgICAgICAtPiAtMUUtMzk4DQotZGRuZXh0bTEwMSBuZXh0bWludXMgIDAgICAgICAgICAgIC0+IC0xRS0zOTgNCi1kZG5leHRtMTAyIG5leHRtaW51cyAgMC4wMCAgICAgICAgLT4gLTFFLTM5OA0KLWRkbmV4dG0xMDMgbmV4dG1pbnVzIC0wLjAwICAgICAgICAtPiAtMUUtMzk4DQotZGRuZXh0bTEwNCBuZXh0bWludXMgIDBFLTMwMCAgICAgIC0+IC0xRS0zOTgNCi1kZG5leHRtMTA1IG5leHRtaW51cyAgMEUrMzAwICAgICAgLT4gLTFFLTM5OA0KLWRkbmV4dG0xMDYgbmV4dG1pbnVzICAwRSszMDAwMCAgICAtPiAtMUUtMzk4DQotZGRuZXh0bTEwNyBuZXh0bWludXMgLTBFKzMwMDAwICAgIC0+IC0xRS0zOTgNCi0NCi0tLSBzcGVjaWFscw0KLWRkbmV4dG0xNTAgbmV4dG1pbnVzICAgSW5mICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0bTE1MSBuZXh0bWludXMgIC1JbmYgICAgLT4gLUluZmluaXR5DQotZGRuZXh0bTE1MiBuZXh0bWludXMgICBOYU4gICAgLT4gIE5hTg0KLWRkbmV4dG0xNTMgbmV4dG1pbnVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dG0xNTQgbmV4dG1pbnVzICAgTmFONzcgIC0+ICBOYU43Nw0KLWRkbmV4dG0xNTUgbmV4dG1pbnVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dG0xNTYgbmV4dG1pbnVzICAtTmFOICAgIC0+IC1OYU4NCi1kZG5leHRtMTU3IG5leHRtaW51cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHRtMTU4IG5leHRtaW51cyAgLU5hTjc3ICAtPiAtTmFONzcNCi1kZG5leHRtMTU5IG5leHRtaW51cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KLWRkbmV4dG0xNzAgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OThFKzM4NA0KLWRkbmV4dG0xNzEgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTdFKzM4NA0KLWRkbmV4dG0xNzIgbmV4dG1pbnVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0DQotZGRuZXh0bTE3MyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQNCi1kZG5leHRtMTc0IG5leHRtaW51cyAgOUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDhFLTM5OA0KLWRkbmV4dG0xNzUgbmV4dG1pbnVzICA5LjlFLTM5NyAgICAgICAgICAgICAgICAgLT4gOS44RS0zOTcNCi1kZG5leHRtMTc2IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgIC0+IDkuOTk5OTk5OTk5OThFLTM4Nw0KLWRkbmV4dG0xNzcgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICAgLT4gOS45OTk5OTk5OTk5OTk5OEUtMzg0DQotZGRuZXh0bTE3OCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OThFLTM4NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk3RS0zODQNCi1kZG5leHRtMTc5IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTZFLTM4NA0KLWRkbmV4dG0xODAgbmV4dG1pbnVzICAwRS0zOTggICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OA0KLWRkbmV4dG0xODEgbmV4dG1pbnVzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMEUtMzk4DQotZGRuZXh0bTE4MiBuZXh0bWludXMgIDJFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTgNCi0NCi1kZG5leHRtMTgzIG5leHRtaW51cyAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgNCi1kZG5leHRtMTg0IG5leHRtaW51cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0yRS0zOTgNCi1kZG5leHRtMTg1IG5leHRtaW51cyAgLTJFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0zRS0zOTgNCi1kZG5leHRtMTg2IG5leHRtaW51cyAgLTEwRS0zOTggICAgICAgICAgICAgICAgIC0+IC0xLjFFLTM5Nw0KLWRkbmV4dG0xODcgbmV4dG1pbnVzICAtMTAwRS0zOTggICAgICAgICAgICAgICAgLT4gLTEuMDFFLTM5Ng0KLWRkbmV4dG0xODggbmV4dG1pbnVzICAtMTAwMDAwRS0zOTggICAgICAgICAgICAgLT4gLTEuMDAwMDFFLTM5Mw0KLWRkbmV4dG0xODkgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi1kZG5leHRtMTkwIG5leHRtaW51cyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotZGRuZXh0bTE5MSBuZXh0bWludXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4Mw0KLWRkbmV4dG0xOTIgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHRtMTkzIG5leHRtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZG5leHRtOTAwIG5leHRtaW51cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTmV4dE1pbnVzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG5leHQgdGhhdCBpcyBsZXNzIFs3NTRyIG5leHRkb3duXSAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkbmV4dG0wMDEgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTQKK2RkbmV4dG0wMDIgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTUKK2RkbmV4dG0wMDMgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dG0wMDQgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dG0wMDUgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dG0wMDYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dG0wMDcgbmV4dG1pbnVzICAxLjAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0bTAwOCBuZXh0bWludXMgIDEgICAgICAgICAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRtMDA5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dG0wMTAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0bTAxMSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHRtMDEyIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dG0wMTMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0bTAxNCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHRtMDE1IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dG0wMTYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0bTAxNyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHRtMDE4IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dG0wMTkgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0bTAyMCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDEyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDExCisKK2RkbmV4dG0wMjEgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dG0wMjIgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dG0wMjMgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dG0wMjQgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dG0wMjUgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMAorZGRuZXh0bTAyNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHRtMDI3IG5leHRtaW51cyAtMS4wICAgICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0bTAyOCBuZXh0bWludXMgLTEgICAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dG0wMjkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMgorZGRuZXh0bTAzMCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHRtMDMxIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQKK2RkbmV4dG0wMzIgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNQorZGRuZXh0bTAzMyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHRtMDM0IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcKK2RkbmV4dG0wMzUgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOAorZGRuZXh0bTAzNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHRtMDM3IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTAKK2RkbmV4dG0wMzggbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMQorZGRuZXh0bTAzOSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDExICAtPiAgLTEuMDAwMDAwMDAwMDAwMDEyCisKKy0tIHVsdHJhLXRpbnkgaW5wdXRzCitkZG5leHRtMDYyIG5leHRtaW51cyAgMUUtMzk4ICAgICAgICAgLT4gICAwRS0zOTgKK2RkbmV4dG0wNjUgbmV4dG1pbnVzIC0xRS0zOTggICAgICAgICAtPiAgLTJFLTM5OAorCistLSBaZXJvcworZGRuZXh0bTEwMCBuZXh0bWludXMgLTAgICAgICAgICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xMDEgbmV4dG1pbnVzICAwICAgICAgICAgICAtPiAtMUUtMzk4CitkZG5leHRtMTAyIG5leHRtaW51cyAgMC4wMCAgICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTEwMyBuZXh0bWludXMgLTAuMDAgICAgICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xMDQgbmV4dG1pbnVzICAwRS0zMDAgICAgICAtPiAtMUUtMzk4CitkZG5leHRtMTA1IG5leHRtaW51cyAgMEUrMzAwICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTEwNiBuZXh0bWludXMgIDBFKzMwMDAwICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xMDcgbmV4dG1pbnVzIC0wRSszMDAwMCAgICAtPiAtMUUtMzk4CisKKy0tIHNwZWNpYWxzCitkZG5leHRtMTUwIG5leHRtaW51cyAgIEluZiAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0bTE1MSBuZXh0bWludXMgIC1JbmYgICAgLT4gLUluZmluaXR5CitkZG5leHRtMTUyIG5leHRtaW51cyAgIE5hTiAgICAtPiAgTmFOCitkZG5leHRtMTUzIG5leHRtaW51cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dG0xNTQgbmV4dG1pbnVzICAgTmFONzcgIC0+ICBOYU43NworZGRuZXh0bTE1NSBuZXh0bWludXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkZG5leHRtMTU2IG5leHRtaW51cyAgLU5hTiAgICAtPiAtTmFOCitkZG5leHRtMTU3IG5leHRtaW51cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dG0xNTggbmV4dG1pbnVzICAtTmFONzcgIC0+IC1OYU43NworZGRuZXh0bTE1OSBuZXh0bWludXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkZG5leHRtMTcwIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk4RSszODQKK2RkbmV4dG0xNzEgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTdFKzM4NAorZGRuZXh0bTE3MiBuZXh0bWludXMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQKK2RkbmV4dG0xNzMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0CitkZG5leHRtMTc0IG5leHRtaW51cyAgOUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDhFLTM5OAorZGRuZXh0bTE3NSBuZXh0bWludXMgIDkuOUUtMzk3ICAgICAgICAgICAgICAgICAtPiA5LjhFLTM5NworZGRuZXh0bTE3NiBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTlFLTM4NyAgICAgICAtPiA5Ljk5OTk5OTk5OTk4RS0zODcKK2RkbmV4dG0xNzcgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICAgLT4gOS45OTk5OTk5OTk5OTk5OEUtMzg0CitkZG5leHRtMTc4IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTdFLTM4NAorZGRuZXh0bTE3OSBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk2RS0zODQKK2RkbmV4dG0xODAgbmV4dG1pbnVzICAwRS0zOTggICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTE4MSBuZXh0bWludXMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAwRS0zOTgKK2RkbmV4dG0xODIgbmV4dG1pbnVzICAyRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4CisKK2RkbmV4dG0xODMgbmV4dG1pbnVzICAtMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTE4NCBuZXh0bWludXMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMkUtMzk4CitkZG5leHRtMTg1IG5leHRtaW51cyAgLTJFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0zRS0zOTgKK2RkbmV4dG0xODYgbmV4dG1pbnVzICAtMTBFLTM5OCAgICAgICAgICAgICAgICAgLT4gLTEuMUUtMzk3CitkZG5leHRtMTg3IG5leHRtaW51cyAgLTEwMEUtMzk4ICAgICAgICAgICAgICAgIC0+IC0xLjAxRS0zOTYKK2RkbmV4dG0xODggbmV4dG1pbnVzICAtMTAwMDAwRS0zOTggICAgICAgICAgICAgLT4gLTEuMDAwMDFFLTM5MworZGRuZXh0bTE4OSBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwRS0zODMgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0bTE5MCBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0bTE5MSBuZXh0bWludXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0bTE5MiBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0bTE5MyBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtSW5maW5pdHkKKworLS0gTnVsbCB0ZXN0cworZGRuZXh0bTkwMCBuZXh0bWludXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRQbHVzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0UGx1cy5kZWNUZXN0CmluZGV4IDRhNzQ5YTEuLmQ0MWRmYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRQbHVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFBsdXMuZGVjVGVzdApAQCAtMSwxMjQgKzEsMTI0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZE5leHRQbHVzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG5leHQgdGhhdCBpcyBncmVhdGVyIFs3NTRyIG5leHR1cF0gLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZGRuZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2DQotZGRuZXh0cDAwMiBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3DQotZGRuZXh0cDAwMyBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk4DQotZGRuZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0cDAwNSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDANCi1kZG5leHRwMDA2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDENCi1kZG5leHRwMDA4IG5leHRwbHVzICAxICAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0cDAwOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDINCi1kZG5leHRwMDEwIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMw0KLWRkbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0DQotZGRuZXh0cDAxMiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDUNCi1kZG5leHRwMDEzIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNg0KLWRkbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3DQotZGRuZXh0cDAxNSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDgNCi1kZG5leHRwMDE2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQ0KLWRkbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwDQotZGRuZXh0cDAxOCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTENCi1kZG5leHRwMDE5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMg0KLQ0KLWRkbmV4dHAwMjEgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NA0KLWRkbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NQ0KLWRkbmV4dHAwMjMgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5Ng0KLWRkbmV4dHAwMjQgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5Nw0KLWRkbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OA0KLWRkbmV4dHAwMjYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHAwMjcgbmV4dHBsdXMgLTEuMCAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0cDAyOCBuZXh0cGx1cyAtMSAgICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMA0KLWRkbmV4dHAwMzAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0cDAzMSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDINCi1kZG5leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMw0KLWRkbmV4dHAwMzMgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0DQotZGRuZXh0cDAzNCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUNCi1kZG5leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNg0KLWRkbmV4dHAwMzYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3DQotZGRuZXh0cDAzNyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgNCi1kZG5leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOQ0KLWRkbmV4dHAwMzkgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDExICAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwDQotZGRuZXh0cDA0MCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMTIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTENCi0NCi0tLSBaZXJvcw0KLWRkbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS0zOTgNCi1kZG5leHRwMTAxIG5leHRwbHVzICAwLjAwICAgICAgICAtPiAgMUUtMzk4DQotZGRuZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTM5OA0KLWRkbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS0zOTgNCi1kZG5leHRwMTA0IG5leHRwbHVzICAwRSszMDAwMCAgICAtPiAgMUUtMzk4DQotZGRuZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTM5OA0KLWRkbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS0zOTgNCi1kZG5leHRwMTA3IG5leHRwbHVzIC0wRS0zMDAgICAgICAtPiAgMUUtMzk4DQotZGRuZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTM5OA0KLWRkbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS0zOTgNCi0NCi0tLSBzcGVjaWFscw0KLWRkbmV4dHAxNTAgbmV4dHBsdXMgICBJbmYgICAgLT4gIEluZmluaXR5DQotZGRuZXh0cDE1MSBuZXh0cGx1cyAgLUluZiAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTg0KLWRkbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0cDE1NCBuZXh0cGx1cyAgIE5hTjc3ICAtPiAgTmFONzcNCi1kZG5leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTg0KLWRkbmV4dHAxNTcgbmV4dHBsdXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcNCi1kZG5leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzDQotZGRuZXh0cDE3MCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0DQotZGRuZXh0cDE3MSBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk4RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5N0UrMzg0DQotZGRuZXh0cDE3MiBuZXh0cGx1cyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQNCi1kZG5leHRwMTczIG5leHRwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NA0KLWRkbmV4dHAxNzQgbmV4dHBsdXMgIC05RS0zOTggICAgICAgICAgICAgICAgICAtPiAtOEUtMzk4DQotZGRuZXh0cDE3NSBuZXh0cGx1cyAgLTkuOUUtMzk3ICAgICAgICAgICAgICAgIC0+IC05LjhFLTM5Nw0KLWRkbmV4dHAxNzYgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5RS0zODcgICAgICAtPiAtOS45OTk5OTk5OTk5OEUtMzg3DQotZGRuZXh0cDE3NyBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk4RS0zODQNCi1kZG5leHRwMTc4IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTdFLTM4NA0KLWRkbmV4dHAxNzkgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk3RS0zODQgICAtPiAtOS45OTk5OTk5OTk5OTk5NkUtMzg0DQotZGRuZXh0cDE4MCBuZXh0cGx1cyAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAxRS0zOTgNCi1kZG5leHRwMTgxIG5leHRwbHVzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTBFLTM5OA0KLWRkbmV4dHAxODIgbmV4dHBsdXMgIC0yRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4DQotDQotZGRuZXh0cDE4MyBuZXh0cGx1cyAgIDBFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAxRS0zOTgNCi1kZG5leHRwMTg0IG5leHRwbHVzICAgMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIDJFLTM5OA0KLWRkbmV4dHAxODUgbmV4dHBsdXMgICAyRS0zOTggICAgICAgICAgICAgICAgICAtPiAgM0UtMzk4DQotZGRuZXh0cDE4NiBuZXh0cGx1cyAgIDEwRS0zOTggICAgICAgICAgICAgICAgIC0+ICAxLjFFLTM5Nw0KLWRkbmV4dHAxODcgbmV4dHBsdXMgICAxMDBFLTM5OCAgICAgICAgICAgICAgICAtPiAgMS4wMUUtMzk2DQotZGRuZXh0cDE4OCBuZXh0cGx1cyAgIDEwMDAwMEUtMzk4ICAgICAgICAgICAgIC0+ICAxLjAwMDAxRS0zOTMNCi1kZG5leHRwMTg5IG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi1kZG5leHRwMTkwIG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi1kZG5leHRwMTkxIG5leHRwbHVzICAgMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi1kZG5leHRwMTkyIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHRwMTkzIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIEluZmluaXR5DQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkbmV4dHA5MDAgbmV4dHBsdXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZE5leHRQbHVzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG5leHQgdGhhdCBpcyBncmVhdGVyIFs3NTRyIG5leHR1cF0gLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZG5leHRwMDAxIG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dHAwMDIgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0cDAwMyBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk4CitkZG5leHRwMDA0IG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHAwMDUgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHRwMDA2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0cDAwNyBuZXh0cGx1cyAgMS4wICAgICAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0cDAwOCBuZXh0cGx1cyAgMSAgICAgICAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0cDAwOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDIKK2RkbmV4dHAwMTAgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHRwMDExIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0cDAxMiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDUKK2RkbmV4dHAwMTMgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA1ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHRwMDE0IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwNiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0cDAxNSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDgKK2RkbmV4dHAwMTYgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA4ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHRwMDE3IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwOSAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0cDAxOCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTEKK2RkbmV4dHAwMTkgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDExICAtPiAgIDEuMDAwMDAwMDAwMDAwMDEyCisKK2RkbmV4dHAwMjEgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NAorZGRuZXh0cDAyMiBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk1CitkZG5leHRwMDIzIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dHAwMjQgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0cDAyNSBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk4CitkZG5leHRwMDI2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMCAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHAwMjcgbmV4dHBsdXMgLTEuMCAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRwMDI4IG5leHRwbHVzIC0xICAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0cDAyOSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dHAwMzAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHRwMDMxIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMgorZGRuZXh0cDAzMiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dHAwMzMgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0CitkZG5leHRwMDM0IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNQorZGRuZXh0cDAzNSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dHAwMzYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3CitkZG5leHRwMDM3IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwOSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOAorZGRuZXh0cDAzOCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dHAwMzkgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDExICAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwCitkZG5leHRwMDQwIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAxMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMQorCistLSBaZXJvcworZGRuZXh0cDEwMCBuZXh0cGx1cyAgMCAgICAgICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDEwMSBuZXh0cGx1cyAgMC4wMCAgICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDEwMyBuZXh0cGx1cyAgMEUrMzAwICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDEwNCBuZXh0cGx1cyAgMEUrMzAwMDAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDEwNiBuZXh0cGx1cyAtMC4wMCAgICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDEwNyBuZXh0cGx1cyAtMEUtMzAwICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDEwOSBuZXh0cGx1cyAtMEUrMzAwMDAgICAgLT4gIDFFLTM5OAorCistLSBzcGVjaWFscworZGRuZXh0cDE1MCBuZXh0cGx1cyAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RkbmV4dHAxNTEgbmV4dHBsdXMgIC1JbmYgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTgorZGRuZXh0cDE1MyBuZXh0cGx1cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHAxNTQgbmV4dHBsdXMgICBOYU43NyAgLT4gIE5hTjc3CitkZG5leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0cDE1NiBuZXh0cGx1cyAgLU5hTiAgICAtPiAtTmFOCitkZG5leHRwMTU3IG5leHRwbHVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcKK2RkbmV4dHAxNTkgbmV4dHBsdXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkZG5leHRwMTcwIG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk4RSszODQKK2RkbmV4dHAxNzEgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTdFKzM4NAorZGRuZXh0cDE3MiBuZXh0cGx1cyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQKK2RkbmV4dHAxNzMgbmV4dHBsdXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0CitkZG5leHRwMTc0IG5leHRwbHVzICAtOUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLThFLTM5OAorZGRuZXh0cDE3NSBuZXh0cGx1cyAgLTkuOUUtMzk3ICAgICAgICAgICAgICAgIC0+IC05LjhFLTM5NworZGRuZXh0cDE3NiBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTlFLTM4NyAgICAgIC0+IC05Ljk5OTk5OTk5OTk4RS0zODcKK2RkbmV4dHAxNzcgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgICAtPiAtOS45OTk5OTk5OTk5OTk5OEUtMzg0CitkZG5leHRwMTc4IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTdFLTM4NAorZGRuZXh0cDE3OSBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk2RS0zODQKK2RkbmV4dHAxODAgbmV4dHBsdXMgIC0wRS0zOTggICAgICAgICAgICAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTgxIG5leHRwbHVzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTBFLTM5OAorZGRuZXh0cDE4MiBuZXh0cGx1cyAgLTJFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgKKworZGRuZXh0cDE4MyBuZXh0cGx1cyAgIDBFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxODQgbmV4dHBsdXMgICAxRS0zOTggICAgICAgICAgICAgICAgICAtPiAgMkUtMzk4CitkZG5leHRwMTg1IG5leHRwbHVzICAgMkUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIDNFLTM5OAorZGRuZXh0cDE4NiBuZXh0cGx1cyAgIDEwRS0zOTggICAgICAgICAgICAgICAgIC0+ICAxLjFFLTM5NworZGRuZXh0cDE4NyBuZXh0cGx1cyAgIDEwMEUtMzk4ICAgICAgICAgICAgICAgIC0+ICAxLjAxRS0zOTYKK2RkbmV4dHAxODggbmV4dHBsdXMgICAxMDAwMDBFLTM5OCAgICAgICAgICAgICAtPiAgMS4wMDAwMUUtMzkzCitkZG5leHRwMTg5IG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dHAxOTAgbmV4dHBsdXMgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0cDE5MSBuZXh0cGx1cyAgIDFFLTM4MyAgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHRwMTkyIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHAxOTMgbmV4dHBsdXMgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAgSW5maW5pdHkKKworLS0gTnVsbCB0ZXN0cworZGRuZXh0cDkwMCBuZXh0cGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFRvd2FyZC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFRvd2FyZC5kZWNUZXN0CmluZGV4IDc1Mzg2YWQuLmY5ZTQ3NGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRUb3dhcmQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0VG93YXJkLmRlY1Rlc3QKQEAgLTEsMzc0ICsxLDM3NCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGROZXh0VG93YXJkLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG5leHQgdG93YXJkIHJocyBbNzU0ciBuZXh0YWZ0ZXJdIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjayB3aXRoIGEgc2NhdHRlcmluZyBvZiBudW1lcmljcw0KLWRkbmV4dHQwMDEgbmV4dHRvd2FyZCAgIDEwICAgIDEwICAgLT4gIDEwDQotZGRuZXh0dDAwMiBuZXh0dG93YXJkICAtMTAgICAtMTAgICAtPiAtMTANCi1kZG5leHR0MDAzIG5leHR0b3dhcmQgICAxICAgICAxMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQwMDUgbmV4dHRvd2FyZCAgLTEgICAgIDEwICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQwMDYgbmV4dHRvd2FyZCAgLTEgICAgLTEwICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtMzk4ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDAwOCBuZXh0dG93YXJkICAgMCAgICAtMTAgICAtPiAtMUUtMzk4ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDAwOSBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCArSW5maW5pdHkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQwMTAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MDExIG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTkgIDEwICAtPiAgMTAuMDAwMDAwMDAwMDAwMDANCi1kZG5leHR0MDEyIG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTkgICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0MDEzIG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTkgLTEwICAtPiAtMTAuMDAwMDAwMDAwMDAwMDANCi1kZG5leHR0MDE0IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTkgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0MDE1IG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTggIDEwICAtPiAgOS45OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0MDE2IG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTggICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0MDE3IG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTggLTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0MDE4IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTggICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkNCi0NCi0tLS0tLS0tIGxocz1yaHMNCi0tLSBmaW5pdGVzDQotZGRuZXh0dDEwMSBuZXh0dG93YXJkICAgICAgICAgIDcgICAgICAgNyAtPiAgNw0KLWRkbmV4dHQxMDIgbmV4dHRvd2FyZCAgICAgICAgIC03ICAgICAgLTcgLT4gLTcNCi1kZG5leHR0MTAzIG5leHR0b3dhcmQgICAgICAgICA3NSAgICAgIDc1IC0+ICA3NQ0KLWRkbmV4dHQxMDQgbmV4dHRvd2FyZCAgICAgICAgLTc1ICAgICAtNzUgLT4gLTc1DQotZGRuZXh0dDEwNSBuZXh0dG93YXJkICAgICAgIDcuNTAgICAgIDcuNSAtPiAgNy41MA0KLWRkbmV4dHQxMDYgbmV4dHRvd2FyZCAgICAgIC03LjUwICAgLTcuNTAgLT4gLTcuNTANCi1kZG5leHR0MTA3IG5leHR0b3dhcmQgICAgICAgNy41MDAgNy41MDAwIC0+ICA3LjUwMA0KLWRkbmV4dHQxMDggbmV4dHRvd2FyZCAgICAgIC03LjUwMCAgIC03LjUgLT4gLTcuNTAwDQotDQotLS0gemVyb3MNCi1kZG5leHR0MTExIG5leHR0b3dhcmQgICAgICAgICAgMCAgICAgICAwIC0+ICAwDQotZGRuZXh0dDExMiBuZXh0dG93YXJkICAgICAgICAgLTAgICAgICAtMCAtPiAtMA0KLWRkbmV4dHQxMTMgbmV4dHRvd2FyZCAgICAgICAwRSs0ICAgICAgIDAgLT4gIDBFKzQNCi1kZG5leHR0MTE0IG5leHR0b3dhcmQgICAgICAtMEUrNCAgICAgIC0wIC0+IC0wRSs0DQotZGRuZXh0dDExNSBuZXh0dG93YXJkICAgICAwLjAwMDAwMDAwMDAwICAgMC4wMDAwMDAwMDAwMDAgLT4gIDBFLTExDQotZGRuZXh0dDExNiBuZXh0dG93YXJkICAgIC0wLjAwMDAwMDAwMDAwICAtMC4wMCAgICAgICAgICAgLT4gLTBFLTExDQotZGRuZXh0dDExNyBuZXh0dG93YXJkICAgICAgMEUtMTQxICAgICAgMCAtPiAgMEUtMTQxDQotZGRuZXh0dDExOCBuZXh0dG93YXJkICAgICAtMEUtMTQxICAgLTAwMCAtPiAtMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kZG5leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4DQotZGRuZXh0dDEyMiBuZXh0dG93YXJkICAtMjY4MjY4MjY4ICAgLTI2ODI2ODI2OCAtPiAgLTI2ODI2ODI2OA0KLWRkbmV4dHQxMjMgbmV4dHRvd2FyZCAgIDEzNDEzNDEzNCAgICAxMzQxMzQxMzQgLT4gICAxMzQxMzQxMzQNCi1kZG5leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0DQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kZG5leHR0MTMxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0MTMyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAgLT4gICAxRS0zODMNCi1kZG5leHR0MTMzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZG5leHR0MTM0IG5leHR0b3dhcmQgIDFFLTM5OCAgICAgICAgICAgMUUtMzk4ICAgICAgICAgICAgLT4gICAxRS0zOTgNCi0NCi1kZG5leHR0MTM1IG5leHR0b3dhcmQgIC0xRS0zOTggICAgICAgICAgLTFFLTM5OCAgICAgICAgICAgLT4gIC0xRS0zOTgNCi1kZG5leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZG5leHR0MTM3IG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAgLT4gIC0xRS0zODMNCi1kZG5leHR0MTM4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi0NCi0tLS0tLS0tIGxoczxyaHMNCi1kZG5leHR0MjAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5Ng0KLWRkbmV4dHQyMDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3DQotZGRuZXh0dDIwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgNCi1kZG5leHR0MjA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQyMDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDANCi1kZG5leHR0MjA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0dDIwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0dDIwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMg0KLWRkbmV4dHQyMTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMNCi1kZG5leHR0MjExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0DQotZGRuZXh0dDIxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQ0KLWRkbmV4dHQyMTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDUgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYNCi1kZG5leHR0MjE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3DQotZGRuZXh0dDIxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOA0KLWRkbmV4dHQyMTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDggIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkNCi1kZG5leHR0MjE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwDQotZGRuZXh0dDIxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQ0KLWRkbmV4dHQyMTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMTINCi0NCi1kZG5leHR0MjIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NA0KLWRkbmV4dHQyMjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk1DQotZGRuZXh0dDIyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYNCi1kZG5leHR0MjI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5Nw0KLWRkbmV4dHQyMjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk4DQotZGRuZXh0dDIyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMCAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0MjI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0dDIyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQyMjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDANCi1kZG5leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0dDIzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMg0KLWRkbmV4dHQyMzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDQgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMNCi1kZG5leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0DQotZGRuZXh0dDIzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNQ0KLWRkbmV4dHQyMzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDcgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYNCi1kZG5leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3DQotZGRuZXh0dDIzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOA0KLWRkbmV4dHQyMzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkNCi1kZG5leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwDQotZGRuZXh0dDI0MCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAxMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMQ0KLQ0KLS0tIFplcm9zDQotZGRuZXh0dDMwMCBuZXh0dG93YXJkICAwICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzMDEgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDMwMyBuZXh0dG93YXJkICAwRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzMDQgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDMwNiBuZXh0dG93YXJkIC0wLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzMDcgbmV4dHRvd2FyZCAtMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDMwOSBuZXh0dG93YXJkIC0wRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNwZWNpYWxzDQotZGRuZXh0dDM1MCBuZXh0dG93YXJkICAgSW5mICAgIEluZmluaXR5IC0+ICBJbmZpbml0eQ0KLWRkbmV4dHQzNTEgbmV4dHRvd2FyZCAgLUluZiAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFODQotZGRuZXh0dDM1MyBuZXh0dG93YXJkICBzTmFOICAgIEluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQzNTQgbmV4dHRvd2FyZCAgIE5hTjc3ICBJbmZpbml0eSAtPiAgTmFONzcNCi1kZG5leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDM1NiBuZXh0dG93YXJkICAtTmFOICAgIEluZmluaXR5IC0+IC1OYU4NCi1kZG5leHR0MzU3IG5leHR0b3dhcmQgLXNOYU4gICAgSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43Nw0KLWRkbmV4dHQzNTkgbmV4dHRvd2FyZCAtc05hTjg4ICBJbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KLWRkbmV4dHQzNzAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OThFKzM4NA0KLWRkbmV4dHQzNzEgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk4RSszODQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTdFKzM4NA0KLWRkbmV4dHQzNzIgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzNzMgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzNzQgbmV4dHRvd2FyZCAgLTlFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOEUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzNzUgbmV4dHRvd2FyZCAgLTkuOUUtMzk3ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS44RS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzNzYgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTlFLTM4NyAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OEUtMzg3ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzNzcgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OEUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzNzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzNzkgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5NkUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzODAgbmV4dHRvd2FyZCAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzODEgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZG5leHR0MzgyIG5leHR0b3dhcmQgIC0yRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZG5leHR0MzgzIG5leHR0b3dhcmQgICAwRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzg0IG5leHR0b3dhcmQgICAxRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDJFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzg1IG5leHR0b3dhcmQgICAyRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDNFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzg2IG5leHR0b3dhcmQgICAxMEUtMzk4ICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMUUtMzk3ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzg3IG5leHR0b3dhcmQgICAxMDBFLTM5OCAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDFFLTM5NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzg4IG5leHR0b3dhcmQgICAxMDAwMDBFLTM5OCAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDFFLTM5MyAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzg5IG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwRS0zODMgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi1kZG5leHR0MzkwIG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi1kZG5leHR0MzkxIG5leHR0b3dhcmQgICAxRS0zODMgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi1kZG5leHR0MzkyIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5N0UrMzg0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk4RSszODQNCi1kZG5leHR0MzkzIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0Mzk0IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICBJbmZpbml0eSAgLT4gIEluZmluaXR5ICAgICAgICAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotLS0tLS0tLSBsaHM+cmhzDQotZGRuZXh0dDQwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NA0KLWRkbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTUNCi1kZG5leHR0NDAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2DQotZGRuZXh0dDQwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5Nw0KLWRkbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgNCi1kZG5leHR0NDA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0dDQwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0dDQwOCBuZXh0dG93YXJkICAxICAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0dDQwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwDQotZGRuZXh0dDQxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0dDQxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyDQotZGRuZXh0dDQxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAzDQotZGRuZXh0dDQxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0DQotZGRuZXh0dDQxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1DQotZGRuZXh0dDQxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA2DQotZGRuZXh0dDQxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3DQotZGRuZXh0dDQxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4DQotZGRuZXh0dDQxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA5DQotZGRuZXh0dDQxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwDQotZGRuZXh0dDQyMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDExDQotDQotZGRuZXh0dDQyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5Ng0KLWRkbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcNCi1kZG5leHR0NDIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk4DQotZGRuZXh0dDQyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMA0KLWRkbmV4dHQ0MjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQ0MjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0dDQyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDENCi1kZG5leHR0NDI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDINCi1kZG5leHR0NDMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMNCi1kZG5leHR0NDMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQNCi1kZG5leHR0NDMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUNCi1kZG5leHR0NDMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYNCi1kZG5leHR0NDM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcNCi1kZG5leHR0NDM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgNCi1kZG5leHR0NDM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkNCi1kZG5leHR0NDM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTANCi1kZG5leHR0NDM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTENCi1kZG5leHR0NDM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDExICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTINCi0NCi0tLSBaZXJvcw0KLWRkbmV4dHQ1MDAgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0NTAxIG5leHR0b3dhcmQgIDAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDUwMiBuZXh0dG93YXJkICAwLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTggICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ1MDMgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0NTA0IG5leHR0b3dhcmQgIDBFLTMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDUwNSBuZXh0dG93YXJkICAwRSszMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTggICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ1MDYgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0NTA3IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc3BlY2lhbHMNCi1kZG5leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ1NTEgbmV4dHRvd2FyZCAgLUluZiAgICAgLUluZmluaXR5IC0+IC1JbmZpbml0eQ0KLWRkbmV4dHQ1NTIgbmV4dHRvd2FyZCAgIE5hTiAgICAgLUluZmluaXR5IC0+ICBOYU4NCi1kZG5leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0NTU0IG5leHR0b3dhcmQgICBOYU43NyAgIC1JbmZpbml0eSAtPiAgTmFONzcNCi1kZG5leHR0NTU1IG5leHR0b3dhcmQgIHNOYU44OCAgIC1JbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFODQotZGRuZXh0dDU1NyBuZXh0dG93YXJkIC1zTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDU1OCBuZXh0dG93YXJkICAtTmFONzcgICAtSW5maW5pdHkgLT4gLU5hTjc3DQotZGRuZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1kZG5leHR0NjcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk4RSszODQNCi1kZG5leHR0NjcxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk4RSszODQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk3RSszODQNCi1kZG5leHR0NjcyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ2NzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDY3NCBuZXh0dG93YXJkICA5RS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA4RS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Njc1IG5leHR0b3dhcmQgIDkuOUUtMzk3ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOEUtMzk3ICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ2NzYgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OEUtMzg3ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDY3NyBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk4RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Njc4IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OThFLTM4NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ2NzkgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5NkUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDY4MCBuZXh0dG93YXJkICAwRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0NjgxIG5leHR0b3dhcmQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDBFLTM5OCAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRuZXh0dDY4MiBuZXh0dG93YXJkICAyRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAxRS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZG5leHR0NjgzIG5leHR0b3dhcmQgIC0wRS0zOTggICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ2ODQgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTJFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDY4NSBuZXh0dG93YXJkICAtMkUtMzk4ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtM0UtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Njg2IG5leHR0b3dhcmQgIC0xMEUtMzk4ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjFFLTM5NyAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ2ODcgbmV4dHRvd2FyZCAgLTEwMEUtMzk4ICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDFFLTM5NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDY4OCBuZXh0dG93YXJkICAtMTAwMDAwRS0zOTggICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMUUtMzkzICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Njg5IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwRS0zODMgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotZGRuZXh0dDY5MCBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4Mw0KLWRkbmV4dHQ2OTEgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi1kZG5leHR0NjkyIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDY5MyBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLUluZmluaXR5ICAtPiAtSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLS0tLS0tIFNwZWNpYWxzDQotZGRuZXh0dDc4MCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG5leHR0NzgxIG5leHR0b3dhcmQgLUluZiAgLTEwMDAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDc4MiBuZXh0dG93YXJkIC1JbmYgIC0xICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ3ODMgbmV4dHRvd2FyZCAtSW5mICAtMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0Nzg0IG5leHR0b3dhcmQgLUluZiAgIDAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDc4NSBuZXh0dG93YXJkIC1JbmYgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ3ODYgbmV4dHRvd2FyZCAtSW5mICAgMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0Nzg3IG5leHR0b3dhcmQgLTEwMDAgLUluZiAgIC0+IC0xMDAwLjAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQ3ODggbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRuZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDENCi1kZG5leHR0NzkwIG5leHR0b3dhcmQgLTAgICAgLUluZiAgIC0+IC0xRS0zOTggICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDc5MSBuZXh0dG93YXJkICAwICAgIC1JbmYgICAtPiAtMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ3OTIgbmV4dHRvd2FyZCAgMSAgICAtSW5mICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQ3OTMgbmV4dHRvd2FyZCAgMTAwMCAtSW5mICAgLT4gIDk5OS45OTk5OTk5OTk5OTk5DQotZGRuZXh0dDc5NCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLQ0KLWRkbmV4dHQ4MDAgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0ODAxIG5leHR0b3dhcmQgIEluZiAgLTEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDgwMiBuZXh0dG93YXJkICBJbmYgIC0xICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ4MDMgbmV4dHRvd2FyZCAgSW5mICAtMCAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0ODA0IG5leHR0b3dhcmQgIEluZiAgIDAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDgwNSBuZXh0dG93YXJkICBJbmYgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ4MDYgbmV4dHRvd2FyZCAgSW5mICAgMTAwMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0ODA3IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTk5OTk5OTk5DQotZGRuZXh0dDgwOSBuZXh0dG93YXJkIC1JbmYgICBJbmYgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0ODEyIG5leHR0b3dhcmQgIDAgICAgIEluZiAgIC0+ICAxRS0zOTggICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDgxMyBuZXh0dG93YXJkICAxICAgICBJbmYgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDENCi1kZG5leHR0ODE0IG5leHR0b3dhcmQgIDEwMDAgIEluZiAgIC0+ICAxMDAwLjAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQ4MTUgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRuZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFODQotZGRuZXh0dDgyMiBuZXh0dG93YXJkICBOYU4gLTEwMDAgICAtPiAgTmFODQotZGRuZXh0dDgyMyBuZXh0dG93YXJkICBOYU4gLTEgICAgICAtPiAgTmFODQotZGRuZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFODQotZGRuZXh0dDgyNSBuZXh0dG93YXJkICBOYU4gIDAgICAgICAtPiAgTmFODQotZGRuZXh0dDgyNiBuZXh0dG93YXJkICBOYU4gIDEgICAgICAtPiAgTmFODQotZGRuZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFODQotZGRuZXh0dDgyOCBuZXh0dG93YXJkICBOYU4gIEluZiAgICAtPiAgTmFODQotZGRuZXh0dDgyOSBuZXh0dG93YXJkICBOYU4gIE5hTiAgICAtPiAgTmFODQotZGRuZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZGRuZXh0dDgzMSBuZXh0dG93YXJkIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZGRuZXh0dDgzMiBuZXh0dG93YXJkIC0xICAgIE5hTiAgICAtPiAgTmFODQotZGRuZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFODQotZGRuZXh0dDgzNCBuZXh0dG93YXJkICAwICAgIE5hTiAgICAtPiAgTmFODQotZGRuZXh0dDgzNSBuZXh0dG93YXJkICAxICAgIE5hTiAgICAtPiAgTmFODQotZGRuZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFODQotZGRuZXh0dDgzNyBuZXh0dG93YXJkICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZGRuZXh0dDg0MSBuZXh0dG93YXJkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NDIgbmV4dHRvd2FyZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODQzIG5leHR0b3dhcmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg0NCBuZXh0dG93YXJkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NDUgbmV4dHRvd2FyZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODQ2IG5leHR0b3dhcmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg0NyBuZXh0dG93YXJkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NDggbmV4dHRvd2FyZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODQ5IG5leHR0b3dhcmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg1MCBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NTEgbmV4dHRvd2FyZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODUyIG5leHR0b3dhcmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg1MyBuZXh0dG93YXJkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NTQgbmV4dHRvd2FyZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODU1IG5leHR0b3dhcmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg1NiBuZXh0dG93YXJkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NTcgbmV4dHRvd2FyZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODU4IG5leHR0b3dhcmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg1OSBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZG5leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZGRuZXh0dDg2MiBuZXh0dG93YXJkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KLWRkbmV4dHQ4NjMgbmV4dHRvd2FyZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1kZG5leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZGRuZXh0dDg2NSBuZXh0dG93YXJkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KLWRkbmV4dHQ4NjYgbmV4dHRvd2FyZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1kZG5leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZGRuZXh0dDg2OCBuZXh0dG93YXJkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KLWRkbmV4dHQ4NjkgbmV4dHRvd2FyZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZGRuZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg3MiBuZXh0dG93YXJkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg3MyBuZXh0dG93YXJkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg3NSBuZXh0dG93YXJkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg3NiBuZXh0dG93YXJkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg3OCBuZXh0dG93YXJkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg3OSBuZXh0dG93YXJkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg4MSBuZXh0dG93YXJkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg4MiBuZXh0dG93YXJkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1kZG5leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODg0IG5leHR0b3dhcmQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KLWRkbmV4dHQ4ODUgbmV4dHRvd2FyZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZG5leHR0OTAwIG5leHR0b3dhcmQgMSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0OTAxIG5leHR0b3dhcmQgIyAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTmV4dFRvd2FyZC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBuZXh0IHRvd2FyZCByaHMgWzc1NHIgbmV4dGFmdGVyXSAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayB3aXRoIGEgc2NhdHRlcmluZyBvZiBudW1lcmljcworZGRuZXh0dDAwMSBuZXh0dG93YXJkICAgMTAgICAgMTAgICAtPiAgMTAKK2RkbmV4dHQwMDIgbmV4dHRvd2FyZCAgLTEwICAgLTEwICAgLT4gLTEwCitkZG5leHR0MDAzIG5leHR0b3dhcmQgICAxICAgICAxMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDAwNCBuZXh0dG93YXJkICAgMSAgICAtMTAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDA1IG5leHR0b3dhcmQgIC0xICAgICAxMCAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQwMDYgbmV4dHRvd2FyZCAgLTEgICAgLTEwICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0MDA3IG5leHR0b3dhcmQgICAwICAgICAxMCAgIC0+ICAxRS0zOTggICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQwMDggbmV4dHRvd2FyZCAgIDAgICAgLTEwICAgLT4gLTFFLTM5OCAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDAwOSBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCArSW5maW5pdHkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDAxMCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtSW5maW5pdHkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDAxMSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5ICAxMCAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwCitkZG5leHR0MDEyIG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTkgICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQwMTMgbmV4dHRvd2FyZCAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OSAtMTAgIC0+IC0xMC4wMDAwMDAwMDAwMDAwMAorZGRuZXh0dDAxNCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDE1IG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTggIDEwICAtPiAgOS45OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQwMTYgbmV4dHRvd2FyZCAgIDEwICA5Ljk5OTk5OTk5OTk5OTk5OCAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDAxNyBuZXh0dG93YXJkICAgICAgLTkuOTk5OTk5OTk5OTk5OTk4IC0xMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDE4IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTggICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkKKworLS0tLS0tLSBsaHM9cmhzCistLSBmaW5pdGVzCitkZG5leHR0MTAxIG5leHR0b3dhcmQgICAgICAgICAgNyAgICAgICA3IC0+ICA3CitkZG5leHR0MTAyIG5leHR0b3dhcmQgICAgICAgICAtNyAgICAgIC03IC0+IC03CitkZG5leHR0MTAzIG5leHR0b3dhcmQgICAgICAgICA3NSAgICAgIDc1IC0+ICA3NQorZGRuZXh0dDEwNCBuZXh0dG93YXJkICAgICAgICAtNzUgICAgIC03NSAtPiAtNzUKK2RkbmV4dHQxMDUgbmV4dHRvd2FyZCAgICAgICA3LjUwICAgICA3LjUgLT4gIDcuNTAKK2RkbmV4dHQxMDYgbmV4dHRvd2FyZCAgICAgIC03LjUwICAgLTcuNTAgLT4gLTcuNTAKK2RkbmV4dHQxMDcgbmV4dHRvd2FyZCAgICAgICA3LjUwMCA3LjUwMDAgLT4gIDcuNTAwCitkZG5leHR0MTA4IG5leHR0b3dhcmQgICAgICAtNy41MDAgICAtNy41IC0+IC03LjUwMAorCistLSB6ZXJvcworZGRuZXh0dDExMSBuZXh0dG93YXJkICAgICAgICAgIDAgICAgICAgMCAtPiAgMAorZGRuZXh0dDExMiBuZXh0dG93YXJkICAgICAgICAgLTAgICAgICAtMCAtPiAtMAorZGRuZXh0dDExMyBuZXh0dG93YXJkICAgICAgIDBFKzQgICAgICAgMCAtPiAgMEUrNAorZGRuZXh0dDExNCBuZXh0dG93YXJkICAgICAgLTBFKzQgICAgICAtMCAtPiAtMEUrNAorZGRuZXh0dDExNSBuZXh0dG93YXJkICAgICAwLjAwMDAwMDAwMDAwICAgMC4wMDAwMDAwMDAwMDAgLT4gIDBFLTExCitkZG5leHR0MTE2IG5leHR0b3dhcmQgICAgLTAuMDAwMDAwMDAwMDAgIC0wLjAwICAgICAgICAgICAtPiAtMEUtMTEKK2RkbmV4dHQxMTcgbmV4dHRvd2FyZCAgICAgIDBFLTE0MSAgICAgIDAgLT4gIDBFLTE0MQorZGRuZXh0dDExOCBuZXh0dG93YXJkICAgICAtMEUtMTQxICAgLTAwMCAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZG5leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4CitkZG5leHR0MTIyIG5leHR0b3dhcmQgIC0yNjgyNjgyNjggICAtMjY4MjY4MjY4IC0+ICAtMjY4MjY4MjY4CitkZG5leHR0MTIzIG5leHR0b3dhcmQgICAxMzQxMzQxMzQgICAgMTM0MTM0MTM0IC0+ICAgMTM0MTM0MTM0CitkZG5leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZG5leHR0MTMxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQxMzIgbmV4dHRvd2FyZCAgMUUtMzgzICAgICAgICAgICAxRS0zODMgICAgICAgICAgICAtPiAgIDFFLTM4MworZGRuZXh0dDEzMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZG5leHR0MTM0IG5leHR0b3dhcmQgIDFFLTM5OCAgICAgICAgICAgMUUtMzk4ICAgICAgICAgICAgLT4gICAxRS0zOTgKKworZGRuZXh0dDEzNSBuZXh0dG93YXJkICAtMUUtMzk4ICAgICAgICAgIC0xRS0zOTggICAgICAgICAgIC0+ICAtMUUtMzk4CitkZG5leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkbmV4dHQxMzcgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAtMUUtMzgzICAgICAgICAgICAtPiAgLTFFLTM4MworZGRuZXh0dDEzOCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CisKKy0tLS0tLS0gbGhzPHJocworZGRuZXh0dDIwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTUgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dHQyMDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3CitkZG5leHR0MjAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NyBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0dDIwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTggSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQyMDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dHQyMDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQyMDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0MjA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHR0MjEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHR0MjExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0CitkZG5leHR0MjEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHR0MjEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHR0MjE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3CitkZG5leHR0MjE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHR0MjE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHR0MjE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwCitkZG5leHR0MjE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDExCitkZG5leHR0MjE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEyCisKK2RkbmV4dHQyMjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk1IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk0CitkZG5leHR0MjIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NQorZGRuZXh0dDIyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dHQyMjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk4IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk3CitkZG5leHR0MjI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0dDIyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMCAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQyMjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQyMjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQyMjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dHQyMzAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQyMzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDMgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDIKK2RkbmV4dHQyMzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDQgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dHQyMzMgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDUgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQKK2RkbmV4dHQyMzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDYgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUKK2RkbmV4dHQyMzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDcgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dHQyMzYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDggIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcKK2RkbmV4dHQyMzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgKK2RkbmV4dHQyMzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dHQyMzkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTAKK2RkbmV4dHQyNDAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTEKKworLS0gWmVyb3MKK2RkbmV4dHQzMDAgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDEgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDIgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDMgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDQgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDUgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDYgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDcgbmV4dHRvd2FyZCAtMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDggbmV4dHRvd2FyZCAtMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDkgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3BlY2lhbHMKK2RkbmV4dHQzNTAgbmV4dHRvd2FyZCAgIEluZiAgICBJbmZpbml0eSAtPiAgSW5maW5pdHkKK2RkbmV4dHQzNTEgbmV4dHRvd2FyZCAgLUluZiAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDM1MiBuZXh0dG93YXJkICAgTmFOICAgIEluZmluaXR5IC0+ICBOYU4KK2RkbmV4dHQzNTMgbmV4dHRvd2FyZCAgc05hTiAgICBJbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQzNTQgbmV4dHRvd2FyZCAgIE5hTjc3ICBJbmZpbml0eSAtPiAgTmFONzcKK2RkbmV4dHQzNTUgbmV4dHRvd2FyZCAgc05hTjg4ICBJbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQzNTYgbmV4dHRvd2FyZCAgLU5hTiAgICBJbmZpbml0eSAtPiAtTmFOCitkZG5leHR0MzU3IG5leHR0b3dhcmQgLXNOYU4gICAgSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0MzU4IG5leHR0b3dhcmQgIC1OYU43NyAgSW5maW5pdHkgLT4gLU5hTjc3CitkZG5leHR0MzU5IG5leHR0b3dhcmQgLXNOYU44OCAgSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkZG5leHR0MzcwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk4RSszODQKK2RkbmV4dHQzNzEgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk4RSszODQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTdFKzM4NAorZGRuZXh0dDM3MiBuZXh0dG93YXJkICAtMUUtMzgzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzczIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzNzQgbmV4dHRvd2FyZCAgLTlFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOEUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM3NSBuZXh0dG93YXJkICAtOS45RS0zOTcgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC05LjhFLTM5NyAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzc2IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5RS0zODcgICAgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OThFLTM4NyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzNzcgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OEUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM3OCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk3RS0zODQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzc5IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk3RS0zODQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTZFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODAgbmV4dHRvd2FyZCAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM4MSBuZXh0dG93YXJkICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRuZXh0dDM4MiBuZXh0dG93YXJkICAtMkUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkbmV4dHQzODMgbmV4dHRvd2FyZCAgIDBFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM4NCBuZXh0dG93YXJkICAgMUUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAyRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzg1IG5leHR0b3dhcmQgICAyRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDNFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODYgbmV4dHRvd2FyZCAgIDEwRS0zOTggICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4xRS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM4NyBuZXh0dG93YXJkICAgMTAwRS0zOTggICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAxRS0zOTYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzg4IG5leHR0b3dhcmQgICAxMDAwMDBFLTM5OCAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDFFLTM5MyAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODkgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDBFLTM4MyAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0dDM5MCBuZXh0dG93YXJkICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHR0MzkxIG5leHR0b3dhcmQgICAxRS0zODMgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dHQzOTIgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk3RSszODQgIEluZmluaXR5ICAtPiAgOS45OTk5OTk5OTk5OTk5OThFKzM4NAorZGRuZXh0dDM5MyBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgSW5maW5pdHkgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0Mzk0IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICBJbmZpbml0eSAgLT4gIEluZmluaXR5ICAgICAgICAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tLS0tLS0gbGhzPnJocworZGRuZXh0dDQwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NAorZGRuZXh0dDQwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NQorZGRuZXh0dDQwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NgorZGRuZXh0dDQwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0dDQwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0dDQwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDQwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0NDA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ0MDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMAorZGRuZXh0dDQxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0NDExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDIKK2RkbmV4dHQ0MTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMworZGRuZXh0dDQxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0CitkZG5leHR0NDE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDUKK2RkbmV4dHQ0MTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNgorZGRuZXh0dDQxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3CitkZG5leHR0NDE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDgKK2RkbmV4dHQ0MTggbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQorZGRuZXh0dDQxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwCitkZG5leHR0NDIwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDEyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMTEKKworZGRuZXh0dDQyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NgorZGRuZXh0dDQyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0dDQyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0dDQyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDQyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHR0NDI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQ0MjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0NDI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDQyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHR0NDMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dHQ0MzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0dDQzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHR0NDMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dHQ0MzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0dDQzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHR0NDM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dHQ0MzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0dDQzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDExCitkZG5leHR0NDM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDExICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTIKKworLS0gWmVyb3MKK2RkbmV4dHQ1MDAgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDEgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDIgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDMgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDQgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDUgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDYgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDcgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3BlY2lhbHMKK2RkbmV4dHQ1NTAgbmV4dHRvd2FyZCAgIEluZiAgICAgLUluZmluaXR5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0NTUxIG5leHR0b3dhcmQgIC1JbmYgICAgIC1JbmZpbml0eSAtPiAtSW5maW5pdHkKK2RkbmV4dHQ1NTIgbmV4dHRvd2FyZCAgIE5hTiAgICAgLUluZmluaXR5IC0+ICBOYU4KK2RkbmV4dHQ1NTMgbmV4dHRvd2FyZCAgc05hTiAgICAgLUluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDU1NCBuZXh0dG93YXJkICAgTmFONzcgICAtSW5maW5pdHkgLT4gIE5hTjc3CitkZG5leHR0NTU1IG5leHR0b3dhcmQgIHNOYU44OCAgIC1JbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ1NTYgbmV4dHRvd2FyZCAgLU5hTiAgICAgLUluZmluaXR5IC0+IC1OYU4KK2RkbmV4dHQ1NTcgbmV4dHRvd2FyZCAtc05hTiAgICAgLUluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDU1OCBuZXh0dG93YXJkICAtTmFONzcgICAtSW5maW5pdHkgLT4gLU5hTjc3CitkZG5leHR0NTU5IG5leHR0b3dhcmQgLXNOYU44OCAgIC1JbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK2RkbmV4dHQ2NzAgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OThFKzM4NAorZGRuZXh0dDY3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5N0UrMzg0CitkZG5leHR0NjcyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2NzQgbmV4dHRvd2FyZCAgOUUtMzk4ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gOEUtMzk4ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njc1IG5leHR0b3dhcmQgIDkuOUUtMzk3ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOEUtMzk3ICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY3NiBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5RS0zODcgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk4RS0zODcgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2NzcgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njc4IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OThFLTM4NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY3OSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk2RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2ODAgbmV4dHRvd2FyZCAgMEUtMzk4ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NjgxIG5leHR0b3dhcmQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDBFLTM5OCAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG5leHR0NjgyIG5leHR0b3dhcmQgIDJFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDFFLTM5OCAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorCitkZG5leHR0NjgzIG5leHR0b3dhcmQgIC0wRS0zOTggICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY4NCBuZXh0dG93YXJkICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMkUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2ODUgbmV4dHRvd2FyZCAgLTJFLTM5OCAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTNFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njg2IG5leHR0b3dhcmQgIC0xMEUtMzk4ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjFFLTM5NyAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY4NyBuZXh0dG93YXJkICAtMTAwRS0zOTggICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMUUtMzk2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2ODggbmV4dHRvd2FyZCAgLTEwMDAwMEUtMzk4ICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDFFLTM5MyAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njg5IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwRS0zODMgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHR0NjkwIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHR0NjkxIG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHR0NjkyIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0NjkzIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtSW5maW5pdHkgIC0+IC1JbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tIFNwZWNpYWxzCitkZG5leHR0NzgwIG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRuZXh0dDc4MSBuZXh0dG93YXJkIC1JbmYgIC0xMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4MiBuZXh0dG93YXJkIC1JbmYgIC0xICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4MyBuZXh0dG93YXJkIC1JbmYgIC0wICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4NCBuZXh0dG93YXJkIC1JbmYgICAwICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4NSBuZXh0dG93YXJkIC1JbmYgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4NiBuZXh0dG93YXJkIC1JbmYgICAxMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4NyBuZXh0dG93YXJkIC0xMDAwIC1JbmYgICAtPiAtMTAwMC4wMDAwMDAwMDAwMDEKK2RkbmV4dHQ3ODggbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG5leHR0Nzg5IG5leHR0b3dhcmQgLTEgICAgLUluZiAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDc5MCBuZXh0dG93YXJkIC0wICAgIC1JbmYgICAtPiAtMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDc5MSBuZXh0dG93YXJkICAwICAgIC1JbmYgICAtPiAtMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDc5MiBuZXh0dG93YXJkICAxICAgIC1JbmYgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0NzkzIG5leHR0b3dhcmQgIDEwMDAgLUluZiAgIC0+ICA5OTkuOTk5OTk5OTk5OTk5OQorZGRuZXh0dDc5NCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorCitkZG5leHR0ODAwIG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODAxIG5leHR0b3dhcmQgIEluZiAgLTEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODAyIG5leHR0b3dhcmQgIEluZiAgLTEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODAzIG5leHR0b3dhcmQgIEluZiAgLTAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODA0IG5leHR0b3dhcmQgIEluZiAgIDAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODA1IG5leHR0b3dhcmQgIEluZiAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODA2IG5leHR0b3dhcmQgIEluZiAgIDEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODA3IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRuZXh0dDgwOCBuZXh0dG93YXJkIC0xMDAwICBJbmYgICAtPiAtOTk5Ljk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ4MDkgbmV4dHRvd2FyZCAtSW5mICAgSW5mICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDgxMSBuZXh0dG93YXJkIC0wICAgICBJbmYgICAtPiAgMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDgxMiBuZXh0dG93YXJkICAwICAgICBJbmYgICAtPiAgMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDgxMyBuZXh0dG93YXJkICAxICAgICBJbmYgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQ4MTQgbmV4dHRvd2FyZCAgMTAwMCAgSW5mICAgLT4gIDEwMDAuMDAwMDAwMDAwMDAxCitkZG5leHR0ODE1IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG5leHR0ODIxIG5leHR0b3dhcmQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkbmV4dHQ4MjIgbmV4dHRvd2FyZCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRuZXh0dDgyMyBuZXh0dG93YXJkICBOYU4gLTEgICAgICAtPiAgTmFOCitkZG5leHR0ODI0IG5leHR0b3dhcmQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkbmV4dHQ4MjUgbmV4dHRvd2FyZCAgTmFOICAwICAgICAgLT4gIE5hTgorZGRuZXh0dDgyNiBuZXh0dG93YXJkICBOYU4gIDEgICAgICAtPiAgTmFOCitkZG5leHR0ODI3IG5leHR0b3dhcmQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkbmV4dHQ4MjggbmV4dHRvd2FyZCAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRuZXh0dDgyOSBuZXh0dG93YXJkICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODMwIG5leHR0b3dhcmQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHQ4MzEgbmV4dHRvd2FyZCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRuZXh0dDgzMiBuZXh0dG93YXJkIC0xICAgIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODMzIG5leHR0b3dhcmQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHQ4MzQgbmV4dHRvd2FyZCAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRuZXh0dDgzNSBuZXh0dG93YXJkICAxICAgIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODM2IG5leHR0b3dhcmQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHQ4MzcgbmV4dHRvd2FyZCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZG5leHR0ODQxIG5leHR0b3dhcmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQyIG5leHR0b3dhcmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQzIG5leHR0b3dhcmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ0IG5leHR0b3dhcmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ1IG5leHR0b3dhcmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ2IG5leHR0b3dhcmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ3IG5leHR0b3dhcmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ4IG5leHR0b3dhcmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ5IG5leHR0b3dhcmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODUwIG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODUxIG5leHR0b3dhcmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODUyIG5leHR0b3dhcmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODUzIG5leHR0b3dhcmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU0IG5leHR0b3dhcmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU1IG5leHR0b3dhcmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU2IG5leHR0b3dhcmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU3IG5leHR0b3dhcmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU4IG5leHR0b3dhcmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU5IG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbmV4dHQ4NjEgbmV4dHRvd2FyZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2RkbmV4dHQ4NjIgbmV4dHRvd2FyZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2RkbmV4dHQ4NjMgbmV4dHRvd2FyZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2RkbmV4dHQ4NjQgbmV4dHRvd2FyZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2RkbmV4dHQ4NjUgbmV4dHRvd2FyZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2RkbmV4dHQ4NjYgbmV4dHRvd2FyZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2RkbmV4dHQ4NjcgbmV4dHRvd2FyZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2RkbmV4dHQ4NjggbmV4dHRvd2FyZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2RkbmV4dHQ4NjkgbmV4dHRvd2FyZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkZG5leHR0ODcxIG5leHR0b3dhcmQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzIgbmV4dHRvd2FyZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg3MyBuZXh0dG93YXJkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODc0IG5leHR0b3dhcmQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzUgbmV4dHRvd2FyZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg3NiBuZXh0dG93YXJkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODc3IG5leHR0b3dhcmQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzggbmV4dHRvd2FyZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg3OSBuZXh0dG93YXJkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODgwIG5leHR0b3dhcmQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4ODEgbmV4dHRvd2FyZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg4MiBuZXh0dG93YXJkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2RkbmV4dHQ4ODMgbmV4dHRvd2FyZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg4NCBuZXh0dG93YXJkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2RkbmV4dHQ4ODUgbmV4dHRvd2FyZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitkZG5leHR0OTAwIG5leHR0b3dhcmQgMSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ5MDEgbmV4dHRvd2FyZCAjICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRPci5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkT3IuZGVjVGVzdAppbmRleCBkMzY1ODBiLi5mM2E3MDJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRPci5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE9yLmRlY1Rlc3QKQEAgLTEsMjkyICsxLDI5MiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRPci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIE9SIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCi1kZG9yMDAxIG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwDQotZGRvcjAwMiBvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQ0KLWRkb3IwMDMgb3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDENCi1kZG9yMDA0IG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxDQotZGRvcjAwNSBvciAgICAgICAgICAxMTAwIDEwMTAgLT4gMTExMA0KLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQotZGRvcjAwNiBvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1kZG9yMDA3IG9yIDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDANCi1kZG9yMDA4IG9yIDEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDANCi1kZG9yMDA5IG9yIDEwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDANCi1kZG9yMDEwIG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLWRkb3IwMTEgb3IgMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMA0KLWRkb3IwMTIgb3IgMDEwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMA0KLWRkb3IwMTMgb3IgMDEwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tIFZhcmlvdXMgbGVuZ3Rocw0KLS0tICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2DQotZGRvcjAyMCBvciAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQ0KLWRkb3IwMjEgb3IgIDExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTENCi1kZG9yMDIyIG9yICAgMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExDQotZGRvcjAyMyBvciAgICAxMTExMTExMTExMTExICAgICAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQ0KLWRkb3IwMjQgb3IgICAgIDExMTExMTExMTExMSAgICAgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTENCi1kZG9yMDI1IG9yICAgICAgMTExMTExMTExMTEgICAgICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExDQotZGRvcjAyNiBvciAgICAgICAxMTExMTExMTExICAgICAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQ0KLWRkb3IwMjcgb3IgICAgICAgIDExMTExMTExMSAgICAgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTENCi1kZG9yMDI4IG9yICAgICAgICAgMTExMTExMTEgICAgICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExDQotZGRvcjAyOSBvciAgICAgICAgICAxMTExMTExICAgICAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQ0KLWRkb3IwMzAgb3IgICAgICAgICAgIDExMTExMSAgICAgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTENCi1kZG9yMDMxIG9yICAgICAgICAgICAgMTExMTEgICAgICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExDQotZGRvcjAzMiBvciAgICAgICAgICAgICAxMTExICAgICAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQ0KLWRkb3IwMzMgb3IgICAgICAgICAgICAgIDExMSAgICAgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTENCi1kZG9yMDM0IG9yICAgICAgICAgICAgICAgMTEgICAgICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExDQotZGRvcjAzNSBvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQ0KLWRkb3IwMzYgb3IgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDANCi0NCi1kZG9yMDQyIG9yICAxMTExMTExMTAwMDAwMDAgICAgIDExMTExMTExMTAwMDAwMDAgIC0+ICAxMTExMTExMTEwMDAwMDAwDQotZGRvcjA0MyBvciAgIDExMTExMTEwMDAwMDAwICAgICAxMDAwMDAwMTAwMDAwMDAwICAtPiAgMTAxMTExMTExMDAwMDAwMA0KLWRkb3IwNDQgb3IgICAgMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMTAwMDAwMDAwMCAgLT4gIDEwMDExMTExMTAwMDAwMDANCi1kZG9yMDQ1IG9yICAgICAxMTExMTAwMDAwMDAgICAgIDEwMDAwMTAwMDAwMDAwMDAgIC0+ICAxMDAwMTExMTEwMDAwMDAwDQotZGRvcjA0NiBvciAgICAgIDExMTEwMDAwMDAwICAgICAxMDAwMTAwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMA0KLWRkb3IwNDcgb3IgICAgICAgMTExMDAwMDAwMCAgICAgMTAwMTAwMDAwMDAwMDAwMCAgLT4gIDEwMDEwMDExMTAwMDAwMDANCi1kZG9yMDQ4IG9yICAgICAgICAxMTAwMDAwMDAgICAgIDEwMTAwMDAwMDAwMDAwMDAgIC0+ICAxMDEwMDAwMTEwMDAwMDAwDQotZGRvcjA0OSBvciAgICAgICAgIDEwMDAwMDAwICAgICAxMTAwMDAwMDAwMDAwMDAwICAtPiAgMTEwMDAwMDAxMDAwMDAwMA0KLQ0KLWRkb3IwOTAgb3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1kZG9yMDkxIG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotZGRvcjA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLWRkb3IwOTMgb3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1kZG9yMDk0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQotZGRvcjA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLWRkb3IwOTYgb3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1kZG9yMDk3IG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotZGRvcjA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLQ0KLWRkb3IxMDAgb3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1kZG9yMTAxIG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgMTExMTExMTExDQotZGRvcjEwMiBvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gIDExMTExMTExMQ0KLWRkb3IxMDMgb3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAxMTExMTExMTENCi1kZG9yMTA0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQotZGRvcjEwNSBvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gIDExMTExMTExMQ0KLWRkb3IxMDYgb3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTExMTENCi1kZG9yMTA3IG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTExDQotZGRvcjEwOCBvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMQ0KLQ0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KLWRkb3IyMjAgb3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjIxIG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyMjMgb3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjI0IG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyMjYgb3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjI3IG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyMjkgb3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjMwIG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyMzIgb3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhIGZldyByYW5kb21zDQotZGRvcjI0MCBvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNDEgb3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjQyIG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI0MyBvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNDQgb3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRA0KLWRkb3IyNTAgb3IgIDIwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI1MSBvciAgNzAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjUyIG9yICA4MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNTMgb3IgIDkwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI1NCBvciAgMjAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjU1IG9yICA3MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNTYgb3IgIDgwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI1NyBvciAgOTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjU4IG9yICAxMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNTkgb3IgIDEwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI2MCBvciAgMTAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjYxIG9yICAxMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNjIgb3IgIDAwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI2MyBvciAgMDAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjY0IG9yICAwMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNjUgb3IgIDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QtMQ0KLWRkb3IyNzAgb3IgIDAyMDAwMDEwMDAwMDAwMDAgMTAwMDEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI3MSBvciAgMDcwMDAwMDEwMDAwMDAwMCAxMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjcyIG9yICAwODAwMDAwMDEwMDAwMDAwIDEwMDAwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNzMgb3IgIDA5MDAwMDAwMDEwMDAwMDAgMTAwMDAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI3NCBvciAgMTAwMDAwMDAwMDEwMDAwMCAwMjAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjc1IG9yICAxMDAwMDAwMDAwMDEwMDAwIDA3MDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNzYgb3IgIDEwMDAwMDAwMDAwMDEwMDAgMDgwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI3NyBvciAgMTAwMDAwMDAwMDAwMDEwMCAwOTAwMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IExTRA0KLWRkb3IyODAgb3IgIDAwMTAwMDAwMDAwMDAwMDIgMTAwMDAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI4MSBvciAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjgyIG9yICAwMDAwMTAwMDAwMDAwMDA4IDEwMDAwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyODMgb3IgIDAwMDAwMTAwMDAwMDAwMDkgMTAwMDEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI4NCBvciAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjg1IG9yICAxMDAwMDAwMTAwMDAwMDAwIDAwMTAwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyODYgb3IgIDEwMDAwMDAwMTAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI4NyBvciAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1pZGRpZQ0KLWRkb3IyODggb3IgIDAwMTAwMDAwMjAwMDAwMDAgMTAwMDAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI4OSBvciAgMDAwMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjkwIG9yICAwMDAwMTAwMDgwMDAwMDEwIDEwMDAwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyOTEgb3IgIDAwMDAwMTAwOTAwMDAxMDAgMTAwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI5MiBvciAgMTAwMDAwMTAwMDAwMTAwMCAwMDAwMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjkzIG9yICAxMDAwMDAwMTAwMDEwMDAwIDAwMDAwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyOTQgb3IgIDEwMDAwMDAwMTAxMDAwMDAgMDAwMDAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI5NSBvciAgMTAwMDAwMDAwMTAwMDAwMCAwMDAwMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzaWducw0KLWRkb3IyOTYgb3IgLTEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyOTcgb3IgLTEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyOTggb3IgIDEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyOTkgb3IgIDEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDAwMTEwMDAxMDANCi0NCi0tLSBObWF4LCBObWluLCBOdGlueS1saWtlDQotZGRvcjMzMSBvciAgMiAgIDkuOTk5OTk5OTlFKzE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjMzMiBvciAgMyAgIDFFLTE5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjMzMyBvciAgNCAgIDEuMDAwMDAwMDBFLTE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjMzNCBvciAgNSAgIDFFLTEwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjMzNSBvciAgNiAgIC0xRS0xMDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjMzNiBvciAgNyAgIC0xLjAwMDAwMDAwRS0xOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjMzNyBvciAgOCAgIC0xRS0xOTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjMzOCBvciAgOSAgIC05Ljk5OTk5OTk5RSsxOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM0MSBvciAgOS45OTk5OTk5OUUrMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM0MiBvciAgMUUtMjk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM0MyBvciAgMS4wMDAwMDAwMEUtMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM0NCBvciAgMUUtMTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM0NSBvciAgLTFFLTEwMCAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM0NiBvciAgLTEuMDAwMDAwMDBFLTI5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM0NyBvciAgLTFFLTI5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM0OCBvciAgLTkuOTk5OTk5OTlFKzI5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQotZGRvcjM2MSBvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM2MyBvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM2NCBvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM2NiBvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM3MSBvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM3MyBvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM3NCBvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjM3NiBvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KLWRkb3I3ODAgb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3ODEgb3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3ODIgb3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3ODMgb3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3ODQgb3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3ODUgb3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3ODYgb3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3ODcgb3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3ODggb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3ODkgb3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3OTAgb3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3OTEgb3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3OTIgb3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3OTMgb3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I3OTQgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkb3I4MDAgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MDIgb3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MDMgb3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MDUgb3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MDYgb3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MDggb3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MDkgb3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MTEgb3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MTIgb3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MTQgb3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MTUgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkb3I4MjEgb3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MjIgb3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MjMgb3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MjQgb3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MjUgb3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MjYgb3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4Mjcgb3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4Mjggb3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4Mjkgb3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MzAgb3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MzEgb3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MzIgb3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MzMgb3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MzQgb3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MzUgb3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4MzYgb3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4Mzcgb3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkb3I4NDEgb3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg0MiBvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODQzIG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NDQgb3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg0NSBvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODQ2IG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NDcgb3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg0OCBvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODQ5IG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NTAgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg1MSBvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODUyIG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NTMgb3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg1NCBvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODU1IG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NTYgb3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg1NyBvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODU4IG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NTkgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkb3I4NjEgb3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NjIgb3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NjMgb3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NjQgb3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NjUgb3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NjYgb3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4Njcgb3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4Njggb3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4Njkgb3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NzEgb3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NzIgb3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NzMgb3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NzQgb3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NzUgb3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NzYgb3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4Nzcgb3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4Nzggb3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4Nzkgb3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4ODAgb3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4ODEgb3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4ODIgb3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4ODMgb3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4ODQgb3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4ODUgb3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRPci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIE9SIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2Rkb3IwMDEgb3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2Rkb3IwMDIgb3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDEKK2Rkb3IwMDMgb3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDEKK2Rkb3IwMDQgb3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK2Rkb3IwMDUgb3IgICAgICAgICAgMTEwMCAxMDEwIC0+IDExMTAKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitkZG9yMDA2IG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZGRvcjAwNyBvciAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCitkZG9yMDA4IG9yIDEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAKK2Rkb3IwMDkgb3IgMTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGRvcjAxMCBvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2Rkb3IwMTEgb3IgMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMAorZGRvcjAxMiBvciAwMTAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwCitkZG9yMDEzIG9yIDAxMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NgorZGRvcjAyMCBvciAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQorZGRvcjAyMSBvciAgMTExMTExMTExMTExMTExICAgICAgMTExMTExMTExMTExMTExICAtPiAgIDExMTExMTExMTExMTExMQorZGRvcjAyMiBvciAgIDExMTExMTExMTExMTExICAgICAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQorZGRvcjAyMyBvciAgICAxMTExMTExMTExMTExICAgICAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQorZGRvcjAyNCBvciAgICAgMTExMTExMTExMTExICAgICAgICAgMTExMTExMTExMTExICAtPiAgICAgIDExMTExMTExMTExMQorZGRvcjAyNSBvciAgICAgIDExMTExMTExMTExICAgICAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQorZGRvcjAyNiBvciAgICAgICAxMTExMTExMTExICAgICAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQorZGRvcjAyNyBvciAgICAgICAgMTExMTExMTExICAgICAgICAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExMTExMTExMQorZGRvcjAyOCBvciAgICAgICAgIDExMTExMTExICAgICAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQorZGRvcjAyOSBvciAgICAgICAgICAxMTExMTExICAgICAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQorZGRvcjAzMCBvciAgICAgICAgICAgMTExMTExICAgICAgICAgICAgICAgMTExMTExICAtPiAgICAgICAgICAgIDExMTExMQorZGRvcjAzMSBvciAgICAgICAgICAgIDExMTExICAgICAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQorZGRvcjAzMiBvciAgICAgICAgICAgICAxMTExICAgICAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQorZGRvcjAzMyBvciAgICAgICAgICAgICAgMTExICAgICAgICAgICAgICAgICAgMTExICAtPiAgICAgICAgICAgICAgIDExMQorZGRvcjAzNCBvciAgICAgICAgICAgICAgIDExICAgICAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQorZGRvcjAzNSBvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQorZGRvcjAzNiBvciAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAwICAtPiAgICAgICAgICAgICAgICAgMAorCitkZG9yMDQyIG9yICAxMTExMTExMTAwMDAwMDAgICAgIDExMTExMTExMTAwMDAwMDAgIC0+ICAxMTExMTExMTEwMDAwMDAwCitkZG9yMDQzIG9yICAgMTExMTExMTAwMDAwMDAgICAgIDEwMDAwMDAxMDAwMDAwMDAgIC0+ICAxMDExMTExMTEwMDAwMDAwCitkZG9yMDQ0IG9yICAgIDExMTExMTAwMDAwMDAgICAgIDEwMDAwMDEwMDAwMDAwMDAgIC0+ICAxMDAxMTExMTEwMDAwMDAwCitkZG9yMDQ1IG9yICAgICAxMTExMTAwMDAwMDAgICAgIDEwMDAwMTAwMDAwMDAwMDAgIC0+ICAxMDAwMTExMTEwMDAwMDAwCitkZG9yMDQ2IG9yICAgICAgMTExMTAwMDAwMDAgICAgIDEwMDAxMDAwMDAwMDAwMDAgIC0+ICAxMDAwMTExMTEwMDAwMDAwCitkZG9yMDQ3IG9yICAgICAgIDExMTAwMDAwMDAgICAgIDEwMDEwMDAwMDAwMDAwMDAgIC0+ICAxMDAxMDAxMTEwMDAwMDAwCitkZG9yMDQ4IG9yICAgICAgICAxMTAwMDAwMDAgICAgIDEwMTAwMDAwMDAwMDAwMDAgIC0+ICAxMDEwMDAwMTEwMDAwMDAwCitkZG9yMDQ5IG9yICAgICAgICAgMTAwMDAwMDAgICAgIDExMDAwMDAwMDAwMDAwMDAgIC0+ICAxMTAwMDAwMDEwMDAwMDAwCisKK2Rkb3IwOTAgb3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTEgb3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTIgb3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTMgb3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2Rkb3IwOTUgb3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTYgb3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTcgb3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTggb3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKKworZGRvcjEwMCBvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDExMTExMTExMQorZGRvcjEwMSBvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gIDExMTExMTExMQorZGRvcjEwMiBvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gIDExMTExMTExMQorZGRvcjEwMyBvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gIDExMTExMTExMQorZGRvcjEwNCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorZGRvcjEwNSBvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gIDExMTExMTExMQorZGRvcjEwNiBvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTExMQorZGRvcjEwNyBvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTExMQorZGRvcjEwOCBvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMQorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2Rkb3IyMjAgb3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjEgb3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjIgb3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjMgb3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjQgb3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjUgb3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjYgb3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjcgb3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjggb3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjkgb3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMzAgb3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMzEgb3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMzIgb3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2Rkb3IyNDAgb3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNDEgb3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNDIgb3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNDMgb3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNDQgb3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkZG9yMjUwIG9yICAyMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1MSBvciAgNzAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTIgb3IgIDgwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjUzIG9yICA5MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1NCBvciAgMjAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTUgb3IgIDcwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjU2IG9yICA4MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1NyBvciAgOTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTggb3IgIDEwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjU5IG9yICAxMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI2MCBvciAgMTAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNjEgb3IgIDEwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjYyIG9yICAwMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI2MyBvciAgMDAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNjQgb3IgIDAwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjY1IG9yICAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZGRvcjI3MCBvciAgMDIwMDAwMTAwMDAwMDAwMCAxMDAwMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNzEgb3IgIDA3MDAwMDAxMDAwMDAwMDAgMTAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjcyIG9yICAwODAwMDAwMDEwMDAwMDAwIDEwMDAwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI3MyBvciAgMDkwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNzQgb3IgIDEwMDAwMDAwMDAxMDAwMDAgMDIwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjc1IG9yICAxMDAwMDAwMDAwMDEwMDAwIDA3MDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI3NiBvciAgMTAwMDAwMDAwMDAwMTAwMCAwODAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNzcgb3IgIDEwMDAwMDAwMDAwMDAxMDAgMDkwMDAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZGRvcjI4MCBvciAgMDAxMDAwMDAwMDAwMDAwMiAxMDAwMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODEgb3IgIDAwMDEwMDAwMDAwMDAwMDcgMTAwMDAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjgyIG9yICAwMDAwMTAwMDAwMDAwMDA4IDEwMDAwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI4MyBvciAgMDAwMDAxMDAwMDAwMDAwOSAxMDAwMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODQgb3IgIDEwMDAwMDEwMDAwMDAwMDAgMDAwMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjg1IG9yICAxMDAwMDAwMTAwMDAwMDAwIDAwMTAwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI4NiBvciAgMTAwMDAwMDAxMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODcgb3IgIDEwMDAwMDAwMDEwMDAwMDAgMTAwMDAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorZGRvcjI4OCBvciAgMDAxMDAwMDAyMDAwMDAwMCAxMDAwMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODkgb3IgIDAwMDEwMDAwNzAwMDAwMDEgMTAwMDAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjkwIG9yICAwMDAwMTAwMDgwMDAwMDEwIDEwMDAwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5MSBvciAgMDAwMDAxMDA5MDAwMDEwMCAxMDAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTIgb3IgIDEwMDAwMDEwMDAwMDEwMDAgMDAwMDAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjkzIG9yICAxMDAwMDAwMTAwMDEwMDAwIDAwMDAwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5NCBvciAgMTAwMDAwMDAxMDEwMDAwMCAwMDAwMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTUgb3IgIDEwMDAwMDAwMDEwMDAwMDAgMDAwMDAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworZGRvcjI5NiBvciAtMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjk3IG9yIC0xMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTggb3IgIDEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5OSBvciAgMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMTAwMDEwMCAtPiAgMTAwMDAwMDAxMTAwMDEwMAorCistLSBObWF4LCBObWluLCBOdGlueS1saWtlCitkZG9yMzMxIG9yICAyICAgOS45OTk5OTk5OUUrMTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzMzIgb3IgIDMgICAxRS0xOTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjMzMyBvciAgNCAgIDEuMDAwMDAwMDBFLTE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzM0IG9yICA1ICAgMUUtMTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzMzUgb3IgIDYgICAtMUUtMTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjMzNiBvciAgNyAgIC0xLjAwMDAwMDAwRS0xOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzM3IG9yICA4ICAgLTFFLTE5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzMzggb3IgIDkgICAtOS45OTk5OTk5OUUrMTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0MSBvciAgOS45OTk5OTk5OUUrMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQyIG9yICAxRS0yOTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNDMgb3IgIDEuMDAwMDAwMDBFLTI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0NCBvciAgMUUtMTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQ1IG9yICAtMUUtMTAwICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNDYgb3IgIC0xLjAwMDAwMDAwRS0yOTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0NyBvciAgLTFFLTI5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQ4IG9yICAtOS45OTk5OTk5OUUrMjk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkZG9yMzYxIG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNjIgb3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM2MyBvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzY0IG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNjUgb3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM2NiBvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzcxIG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNzIgb3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM3MyBvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzc0IG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNzUgb3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM3NiBvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2Rkb3I3ODAgb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4MSBvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzgyIG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODMgb3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4NCBvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzg1IG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODYgb3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4NyBvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzg4IG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODkgb3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc5MCBvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzkxIG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3OTIgb3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc5MyBvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzk0IG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRvcjgwMCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODAxIG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDIgb3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwMyBvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODA0IG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDUgb3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwNiBvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODA3IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDggb3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwOSBvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODEwIG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MTEgb3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgxMiBvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODEzIG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MTQgb3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgxNSBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkb3I4MjEgb3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyMiBvciAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODIzIG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MjQgb3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyNSBvciAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODI2IG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Mjcgb3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyOCBvciAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODI5IG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MzAgb3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzMSBvciAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODMyIG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MzMgb3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzNCBvciAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODM1IG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MzYgb3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzNyBvciAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkb3I4NDEgb3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQyIG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0MyBvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NDQgb3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQ1IG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0NiBvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NDcgb3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQ4IG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0OSBvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTAgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODUxIG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1MiBvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTMgb3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODU0IG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1NSBvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTYgb3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODU3IG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1OCBvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTkgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rkb3I4NjEgb3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2MiBvciArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODYzIG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NjQgb3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2NSBvciAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODY2IG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Njcgb3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2OCBvciAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODY5IG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NzEgb3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3MiBvciAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODczIG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NzQgb3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3NSBvciAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODc2IG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Nzcgb3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3OCBvciAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODc5IG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4ODAgb3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg4MSBvciArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODgyIG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4ODMgb3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg4NCBvciAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODg1IG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFBsdXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFBsdXMuZGVjVGVzdAppbmRleCA1MTkxMjM5Li4xN2FhMDhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRQbHVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUGx1cy5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFBsdXMuZGVjVGVzdCAtLSBkZWNEb3VibGUgMCt4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZGRwbHMwMDEgcGx1cyAgICAgICArNy41MCAgLT4gNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1kZHBsczAxMSBwbHVzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQ0KLWRkcGxzMDEyIHBsdXMgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWRkcGxzMDIxIHBsdXMgICAgICAgICBOYU4gIC0+IE5hTg0KLWRkcGxzMDIyIHBsdXMgICAgICAgIC1OYU4gIC0+IC1OYU4NCi1kZHBsczAyMyBwbHVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRwbHMwMjQgcGx1cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1kZHBsczAzMSBwbHVzICAgICAgIE5hTjEzICAtPiBOYU4xMw0KLWRkcGxzMDMyIHBsdXMgICAgICAtTmFOMTMgIC0+IC1OYU4xMw0KLWRkcGxzMDMzIHBsdXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHBsczAzNCBwbHVzICAgICAtc05hTjEzICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRwbHMwMzUgcGx1cyAgICAgICBOYU43MCAgLT4gTmFONzANCi1kZHBsczAzNiBwbHVzICAgICAgLU5hTjcwICAtPiAtTmFONzANCi1kZHBsczAzNyBwbHVzICAgICAgc05hTjEwMSAtPiBOYU4xMDEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRwbHMwMzggcGx1cyAgICAgLXNOYU4xMDEgLT4gLU5hTjEwMSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIGZpbml0ZXMNCi1kZHBsczEwMSBwbHVzICAgICAgICAgIDcgICAtPiA3DQotZGRwbHMxMDIgcGx1cyAgICAgICAgIC03ICAgLT4gLTcNCi1kZHBsczEwMyBwbHVzICAgICAgICAgNzUgICAtPiA3NQ0KLWRkcGxzMTA0IHBsdXMgICAgICAgIC03NSAgIC0+IC03NQ0KLWRkcGxzMTA1IHBsdXMgICAgICAgNy41MCAgIC0+IDcuNTANCi1kZHBsczEwNiBwbHVzICAgICAgLTcuNTAgICAtPiAtNy41MA0KLWRkcGxzMTA3IHBsdXMgICAgICAgNy41MDAgIC0+IDcuNTAwDQotZGRwbHMxMDggcGx1cyAgICAgIC03LjUwMCAgLT4gLTcuNTAwDQotDQotLS0gemVyb3MNCi1kZHBsczExMSBwbHVzICAgICAgICAgIDAgICAtPiAwDQotZGRwbHMxMTIgcGx1cyAgICAgICAgIC0wICAgLT4gMA0KLWRkcGxzMTEzIHBsdXMgICAgICAgMEUrNCAgIC0+IDBFKzQNCi1kZHBsczExNCBwbHVzICAgICAgLTBFKzQgICAtPiAwRSs0DQotZGRwbHMxMTUgcGx1cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQotZGRwbHMxMTYgcGx1cyAgICAtMC4wMDAwICAgLT4gMC4wMDAwDQotZGRwbHMxMTcgcGx1cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxDQotZGRwbHMxMTggcGx1cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kZHBsczEyMSBwbHVzICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4Mg0KLWRkcGxzMTIyIHBsdXMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4Mg0KLWRkcGxzMTIzIHBsdXMgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxDQotZGRwbHMxMjQgcGx1cyAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kZHBsczEzMSBwbHVzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkcGxzMTMyIHBsdXMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCi1kZHBsczEzMyBwbHVzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkcGxzMTM0IHBsdXMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsDQotDQotZGRwbHMxMzUgcGx1cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTggU3Vibm9ybWFsDQotZGRwbHMxMzYgcGx1cyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRwbHMxMzcgcGx1cyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMNCi1kZHBsczEzOCBwbHVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkUGx1cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSAwK3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRwbHMwMDEgcGx1cyAgICAgICArNy41MCAgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkZHBsczAxMSBwbHVzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorZGRwbHMwMTIgcGx1cyAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRwbHMwMjEgcGx1cyAgICAgICAgIE5hTiAgLT4gTmFOCitkZHBsczAyMiBwbHVzICAgICAgICAtTmFOICAtPiAtTmFOCitkZHBsczAyMyBwbHVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHBsczAyNCBwbHVzICAgICAgIC1zTmFOICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RkcGxzMDMxIHBsdXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCitkZHBsczAzMiBwbHVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMKK2RkcGxzMDMzIHBsdXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24KK2RkcGxzMDM0IHBsdXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkcGxzMDM1IHBsdXMgICAgICAgTmFONzAgIC0+IE5hTjcwCitkZHBsczAzNiBwbHVzICAgICAgLU5hTjcwICAtPiAtTmFONzAKK2RkcGxzMDM3IHBsdXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkcGxzMDM4IHBsdXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworZGRwbHMxMDEgcGx1cyAgICAgICAgICA3ICAgLT4gNworZGRwbHMxMDIgcGx1cyAgICAgICAgIC03ICAgLT4gLTcKK2RkcGxzMTAzIHBsdXMgICAgICAgICA3NSAgIC0+IDc1CitkZHBsczEwNCBwbHVzICAgICAgICAtNzUgICAtPiAtNzUKK2RkcGxzMTA1IHBsdXMgICAgICAgNy41MCAgIC0+IDcuNTAKK2RkcGxzMTA2IHBsdXMgICAgICAtNy41MCAgIC0+IC03LjUwCitkZHBsczEwNyBwbHVzICAgICAgIDcuNTAwICAtPiA3LjUwMAorZGRwbHMxMDggcGx1cyAgICAgIC03LjUwMCAgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkZHBsczExMSBwbHVzICAgICAgICAgIDAgICAtPiAwCitkZHBsczExMiBwbHVzICAgICAgICAgLTAgICAtPiAwCitkZHBsczExMyBwbHVzICAgICAgIDBFKzQgICAtPiAwRSs0CitkZHBsczExNCBwbHVzICAgICAgLTBFKzQgICAtPiAwRSs0CitkZHBsczExNSBwbHVzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RkcGxzMTE2IHBsdXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZGRwbHMxMTcgcGx1cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkZHBsczExOCBwbHVzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkcGxzMTIxIHBsdXMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZHBsczEyMiBwbHVzICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODIKK2RkcGxzMTIzIHBsdXMgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCitkZHBsczEyNCBwbHVzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkcGxzMTMxIHBsdXMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHBsczEzMiBwbHVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitkZHBsczEzMyBwbHVzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRwbHMxMzQgcGx1cyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwKKworZGRwbHMxMzUgcGx1cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTggU3Vibm9ybWFsCitkZHBsczEzNiBwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkcGxzMTM3IHBsdXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzCitkZHBsczEzOCBwbHVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFF1YW50aXplLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRRdWFudGl6ZS5kZWNUZXN0CmluZGV4IDkxNzc2MjAuLjBkMTljOWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFF1YW50aXplLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUXVhbnRpemUuZGVjVGVzdApAQCAtMSw4MzMgKzEsODMzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFF1YW50aXplLmRlY1Rlc3QgLS0gZGVjRG91YmxlIHF1YW50aXplIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gTW9zdCBvZiB0aGUgdGVzdHMgaGVyZSBhc3N1bWUgYSAicmVndWxhciBwYXR0ZXJuIiwgd2hlcmUgdGhlDQotLS0gc2lnbiBhbmQgY29lZmZpY2llbnQgYXJlICsxLg0KLS0tIDIwMDQuMDMuMTUgVW5kZXJmbG93IGZvciBxdWFudGl6ZSBpcyBzdXBwcmVzc2VkDQotLS0gMjAwNS4wNi4wOCBNb3JlIGV4dGVuc2l2ZSB0ZXN0cyBmb3IgJ2RvZXMgbm90IGZpdCcNCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kZHF1YTAwMSBxdWFudGl6ZSAwICAgICAgIDFlMCAgIC0+IDANCi1kZHF1YTAwMiBxdWFudGl6ZSAxICAgICAgIDFlMCAgIC0+IDENCi1kZHF1YTAwMyBxdWFudGl6ZSAwLjEgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwMDUgcXVhbnRpemUgMC4xICAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDA2IHF1YW50aXplIDAuMSAgICAgMWUwICAgLT4gMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTAwNyBxdWFudGl6ZSAwLjEgICAgMWUtMSAgIC0+IDAuMQ0KLWRkcXVhMDA4IHF1YW50aXplIDAuMSAgICAxZS0yICAgLT4gMC4xMA0KLWRkcXVhMDA5IHF1YW50aXplIDAuMSAgICAxZS0zICAgLT4gMC4xMDANCi1kZHF1YTAxMCBxdWFudGl6ZSAwLjkgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwMTEgcXVhbnRpemUgMC45ICAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDEyIHF1YW50aXplIDAuOSAgICAxZSswICAgLT4gMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTAxMyBxdWFudGl6ZSAwLjkgICAgMWUtMSAgIC0+IDAuOQ0KLWRkcXVhMDE0IHF1YW50aXplIDAuOSAgICAxZS0yICAgLT4gMC45MA0KLWRkcXVhMDE1IHF1YW50aXplIDAuOSAgICAxZS0zICAgLT4gMC45MDANCi0tLSBuZWdhdGl2ZXMNCi1kZHF1YTAyMSBxdWFudGl6ZSAtMCAgICAgIDFlMCAgIC0+IC0wDQotZGRxdWEwMjIgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAtMQ0KLWRkcXVhMDIzIHF1YW50aXplIC0wLjEgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwMjUgcXVhbnRpemUgLTAuMSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTAyNiBxdWFudGl6ZSAtMC4xICAgIDFlMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDI3IHF1YW50aXplIC0wLjEgICAxZS0xICAgLT4gLTAuMQ0KLWRkcXVhMDI4IHF1YW50aXplIC0wLjEgICAxZS0yICAgLT4gLTAuMTANCi1kZHF1YTAyOSBxdWFudGl6ZSAtMC4xICAgMWUtMyAgIC0+IC0wLjEwMA0KLWRkcXVhMDMwIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwMzEgcXVhbnRpemUgLTAuOSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTAzMiBxdWFudGl6ZSAtMC45ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDMzIHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQ0KLWRkcXVhMDM0IHF1YW50aXplIC0wLjkgICAxZS0yICAgLT4gLTAuOTANCi1kZHF1YTAzNSBxdWFudGl6ZSAtMC45ICAgMWUtMyAgIC0+IC0wLjkwMA0KLWRkcXVhMDM2IHF1YW50aXplIC0wLjUgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwMzcgcXVhbnRpemUgLTAuNSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTAzOCBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDM5IHF1YW50aXplIC0wLjUgICAxZS0xICAgLT4gLTAuNQ0KLWRkcXVhMDQwIHF1YW50aXplIC0wLjUgICAxZS0yICAgLT4gLTAuNTANCi1kZHF1YTA0MSBxdWFudGl6ZSAtMC41ICAgMWUtMyAgIC0+IC0wLjUwMA0KLWRkcXVhMDQyIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwNDMgcXVhbnRpemUgLTAuOSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA0NCBxdWFudGl6ZSAtMC45ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDQ1IHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQ0KLWRkcXVhMDQ2IHF1YW50aXplIC0wLjkgICAxZS0yICAgLT4gLTAuOTANCi1kZHF1YTA0NyBxdWFudGl6ZSAtMC45ICAgMWUtMyAgIC0+IC0wLjkwMA0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gU3BlY2lmaWNhdGlvbg0KLWRkcXVhMDYwIHF1YW50aXplIDIuMTcgICAwLjAwMSAgLT4gMi4xNzANCi1kZHF1YTA2MSBxdWFudGl6ZSAyLjE3ICAgMC4wMSAgIC0+IDIuMTcNCi1kZHF1YTA2MiBxdWFudGl6ZSAyLjE3ICAgMC4xICAgIC0+IDIuMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA2MyBxdWFudGl6ZSAyLjE3ICAgMWUrMCAgIC0+IDIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwNjQgcXVhbnRpemUgMi4xNyAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDY1IHF1YW50aXplIC1JbmYgICAgSW5mICAgLT4gLUluZmluaXR5DQotZGRxdWEwNjYgcXVhbnRpemUgMiAgICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTA2NyBxdWFudGl6ZSAtMC4xICAgIDEgICAgIC0+IC0wIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDY4IHF1YW50aXplIC0wICAgICAgMWUrNSAgICAgLT4gLTBFKzUNCi1kZHF1YTA2OSBxdWFudGl6ZSArMTIzNDU2Nzg5MDEyMzQ1LjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTA3MCBxdWFudGl6ZSAtOTg3NjU0MzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTA3MSBxdWFudGl6ZSAyMTcgICAgMWUtMSAgIC0+IDIxNy4wDQotZGRxdWEwNzIgcXVhbnRpemUgMjE3ICAgIDFlKzAgICAtPiAyMTcNCi1kZHF1YTA3MyBxdWFudGl6ZSAyMTcgICAgMWUrMSAgIC0+IDIuMkUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA3NCBxdWFudGl6ZSAyMTcgICAgMWUrMiAgIC0+IDJFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gZ2VuZXJhbCB0ZXN0cyAuLg0KLWRkcXVhMDg5IHF1YW50aXplIDEyICAgICAxZSs0ICAgLT4gMEUrNCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA5MCBxdWFudGl6ZSAxMiAgICAgMWUrMyAgIC0+IDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwOTEgcXVhbnRpemUgMTIgICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDkyIHF1YW50aXplIDEyICAgICAxZSsxICAgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA5MyBxdWFudGl6ZSAxLjIzNDUgMWUtMiAgIC0+IDEuMjMgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwOTQgcXVhbnRpemUgMS4yMzU1IDFlLTIgICAtPiAxLjI0IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDk1IHF1YW50aXplIDEuMjM0NSAxZS02ICAgLT4gMS4yMzQ1MDANCi1kZHF1YTA5NiBxdWFudGl6ZSA5Ljk5OTkgMWUtMiAgIC0+IDEwLjAwIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDk3IHF1YW50aXplIDAuMDAwMSAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA5OCBxdWFudGl6ZSAwLjAwMSAgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwOTkgcXVhbnRpemUgMC4wMDkgIDFlLTIgICAtPiAwLjAxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTAwIHF1YW50aXplIDkyICAgICAxZSsyICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTEwMSBxdWFudGl6ZSAtMSAgICAgIDFlMCAgIC0+ICAtMQ0KLWRkcXVhMTAyIHF1YW50aXplIC0xICAgICAxZS0xICAgLT4gIC0xLjANCi1kZHF1YTEwMyBxdWFudGl6ZSAtMSAgICAgMWUtMiAgIC0+ICAtMS4wMA0KLWRkcXVhMTA0IHF1YW50aXplICAwICAgICAgMWUwICAgLT4gIDANCi1kZHF1YTEwNSBxdWFudGl6ZSAgMCAgICAgMWUtMSAgIC0+ICAwLjANCi1kZHF1YTEwNiBxdWFudGl6ZSAgMCAgICAgMWUtMiAgIC0+ICAwLjAwDQotZGRxdWExMDcgcXVhbnRpemUgIDAuMDAgICAxZTAgICAtPiAgMA0KLWRkcXVhMTA4IHF1YW50aXplICAwICAgICAxZSsxICAgLT4gIDBFKzENCi1kZHF1YTEwOSBxdWFudGl6ZSAgMCAgICAgMWUrMiAgIC0+ICAwRSsyDQotZGRxdWExMTAgcXVhbnRpemUgKzEgICAgICAxZTAgICAtPiAgMQ0KLWRkcXVhMTExIHF1YW50aXplICsxICAgICAxZS0xICAgLT4gIDEuMA0KLWRkcXVhMTEyIHF1YW50aXplICsxICAgICAxZS0yICAgLT4gIDEuMDANCi0NCi1kZHF1YTEyMCBxdWFudGl6ZSAgIDEuMDQgIDFlLTMgLT4gIDEuMDQwDQotZGRxdWExMjEgcXVhbnRpemUgICAxLjA0ICAxZS0yIC0+ICAxLjA0DQotZGRxdWExMjIgcXVhbnRpemUgICAxLjA0ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMjMgcXVhbnRpemUgICAxLjA0ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTI0IHF1YW50aXplICAgMS4wNSAgMWUtMyAtPiAgMS4wNTANCi1kZHF1YTEyNSBxdWFudGl6ZSAgIDEuMDUgIDFlLTIgLT4gIDEuMDUNCi1kZHF1YTEyNiBxdWFudGl6ZSAgIDEuMDUgIDFlLTEgLT4gIDEuMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEzMSBxdWFudGl6ZSAgIDEuMDUgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMzIgcXVhbnRpemUgICAxLjA2ICAxZS0zIC0+ICAxLjA2MA0KLWRkcXVhMTMzIHF1YW50aXplICAgMS4wNiAgMWUtMiAtPiAgMS4wNg0KLWRkcXVhMTM0IHF1YW50aXplICAgMS4wNiAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTM1IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTE0MCBxdWFudGl6ZSAgIC0xMCAgICAxZS0yICAtPiAgLTEwLjAwDQotZGRxdWExNDEgcXVhbnRpemUgICArMSAgICAgMWUtMiAgLT4gIDEuMDANCi1kZHF1YTE0MiBxdWFudGl6ZSAgICsxMCAgICAxZS0yICAtPiAgMTAuMDANCi1kZHF1YTE0MyBxdWFudGl6ZSAgIDFFKzE3ICAxZS0yICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWExNDQgcXVhbnRpemUgICAxRS0xNyAgMWUtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDUgcXVhbnRpemUgICAxRS0zICAgMWUtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDYgcXVhbnRpemUgICAxRS0yICAgMWUtMiAgLT4gIDAuMDENCi1kZHF1YTE0NyBxdWFudGl6ZSAgIDFFLTEgICAxZS0yICAtPiAgMC4xMA0KLWRkcXVhMTQ4IHF1YW50aXplICAgMEUtMTcgIDFlLTIgIC0+ICAwLjAwDQotDQotZGRxdWExNTAgcXVhbnRpemUgICAxLjA2MDAgMWUtNSAtPiAgMS4wNjAwMA0KLWRkcXVhMTUxIHF1YW50aXplICAgMS4wNjAwIDFlLTQgLT4gIDEuMDYwMA0KLWRkcXVhMTUyIHF1YW50aXplICAgMS4wNjAwIDFlLTMgLT4gIDEuMDYwIFJvdW5kZWQNCi1kZHF1YTE1MyBxdWFudGl6ZSAgIDEuMDYwMCAxZS0yIC0+ICAxLjA2IFJvdW5kZWQNCi1kZHF1YTE1NCBxdWFudGl6ZSAgIDEuMDYwMCAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTUgcXVhbnRpemUgICAxLjA2MDAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBhIGNvdXBsZSB3aGVyZSByb3VuZGluZyB3YXMgZGlmZmVyZW50IGluIGJhc2UgdGVzdHMNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLWRkcXVhMTU3IHF1YW50aXplIC0wLjUgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTggcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTkgcXVhbnRpemUgICAxLjA2ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBiYXNlIHRlc3RzIHdpdGggbm9uLTEgY29lZmZpY2llbnRzDQotZGRxdWExNjEgcXVhbnRpemUgMCAgICAgIC05ZTAgICAtPiAwDQotZGRxdWExNjIgcXVhbnRpemUgMSAgICAgIC03ZTAgICAtPiAxDQotZGRxdWExNjMgcXVhbnRpemUgMC4xICAgLTFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTY1IHF1YW50aXplIDAuMSAgICAwZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2NiBxdWFudGl6ZSAwLjEgICAgIDJlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjcgcXVhbnRpemUgMC4xICAgIDNlLTEgICAtPiAwLjENCi1kZHF1YTE2OCBxdWFudGl6ZSAwLjEgICA0NGUtMiAgIC0+IDAuMTANCi1kZHF1YTE2OSBxdWFudGl6ZSAwLjEgIDU1NWUtMyAgIC0+IDAuMTAwDQotZGRxdWExNzAgcXVhbnRpemUgMC45IDY2NjZlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTcxIHF1YW50aXplIDAuOSAtNzc3ZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE3MiBxdWFudGl6ZSAwLjkgIC04OGUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzMgcXVhbnRpemUgMC45ICAgLTllLTEgICAtPiAwLjkNCi1kZHF1YTE3NCBxdWFudGl6ZSAwLjkgICAgMGUtMiAgIC0+IDAuOTANCi1kZHF1YTE3NSBxdWFudGl6ZSAwLjkgIDEuMWUtMyAgIC0+IDAuOTAwMA0KLS0tIG5lZ2F0aXZlcw0KLWRkcXVhMTgxIHF1YW50aXplIC0wICAgIDEuMWUwICAgLT4gLTAuMA0KLWRkcXVhMTgyIHF1YW50aXplIC0xICAgICAtMWUwICAgLT4gLTENCi1kZHF1YTE4MyBxdWFudGl6ZSAtMC4xICAxMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTg1IHF1YW50aXplIC0wLjEgMTExZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExODYgcXVhbnRpemUgLTAuMSAgIDcxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE4NyBxdWFudGl6ZSAtMC4xIC05MWUtMSAgIC0+IC0wLjENCi1kZHF1YTE4OCBxdWFudGl6ZSAtMC4xIC0uMWUtMiAgIC0+IC0wLjEwMA0KLWRkcXVhMTg5IHF1YW50aXplIC0wLjEgIC0xZS0zICAgLT4gLTAuMTAwDQotZGRxdWExOTAgcXVhbnRpemUgLTAuOSAgIDBlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE5MSBxdWFudGl6ZSAtMC45ICAtMGUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTkyIHF1YW50aXplIC0wLjkgLTEwZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExOTMgcXVhbnRpemUgLTAuOSAxMDBlLTEgICAtPiAtMC45DQotZGRxdWExOTQgcXVhbnRpemUgLTAuOSA5OTllLTIgICAtPiAtMC45MA0KLQ0KLS0tICt2ZSBleHBvbmVudHMgLi4NCi1kZHF1YTIwMSBxdWFudGl6ZSAgIC0xICAgMWUrMCAtPiAgLTENCi1kZHF1YTIwMiBxdWFudGl6ZSAgIC0xICAgMWUrMSAtPiAgLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMDMgcXVhbnRpemUgICAtMSAgIDFlKzIgLT4gIC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjA0IHF1YW50aXplICAgIDAgICAxZSswIC0+ICAwDQotZGRxdWEyMDUgcXVhbnRpemUgICAgMCAgIDFlKzEgLT4gIDBFKzENCi1kZHF1YTIwNiBxdWFudGl6ZSAgICAwICAgMWUrMiAtPiAgMEUrMg0KLWRkcXVhMjA3IHF1YW50aXplICAgKzEgICAxZSswIC0+ICAxDQotZGRxdWEyMDggcXVhbnRpemUgICArMSAgIDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMDkgcXVhbnRpemUgICArMSAgIDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWEyMjAgcXVhbnRpemUgICAxLjA0IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMjEgcXVhbnRpemUgICAxLjA0IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMjIgcXVhbnRpemUgICAxLjA0IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMjMgcXVhbnRpemUgICAxLjA0IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMjQgcXVhbnRpemUgICAxLjA1IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMjUgcXVhbnRpemUgICAxLjA1IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMjYgcXVhbnRpemUgICAxLjA1IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMjcgcXVhbnRpemUgICAxLjA1IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMjggcXVhbnRpemUgICAxLjA1IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMjkgcXVhbnRpemUgICAxLjA1IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzAgcXVhbnRpemUgICAxLjA1IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzEgcXVhbnRpemUgICAxLjA1IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzIgcXVhbnRpemUgICAxLjA2IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzMgcXVhbnRpemUgICAxLjA2IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzQgcXVhbnRpemUgICAxLjA2IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzUgcXVhbnRpemUgICAxLjA2IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWEyNDAgcXVhbnRpemUgICAtMTAgICAxZSsxICAtPiAgLTFFKzEgUm91bmRlZA0KLWRkcXVhMjQxIHF1YW50aXplICAgKzEgICAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyNDIgcXVhbnRpemUgICArMTAgICAxZSsxICAtPiAgMUUrMSBSb3VuZGVkDQotZGRxdWEyNDMgcXVhbnRpemUgICAxRSsxICAxZSsxICAtPiAgMUUrMSAgICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxDQotZGRxdWEyNDQgcXVhbnRpemUgICAxRSsyICAxZSsxICAtPiAgMS4wRSsyICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxDQotZGRxdWEyNDUgcXVhbnRpemUgICAxRSszICAxZSsxICAtPiAgMS4wMEUrMyAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxDQotZGRxdWEyNDYgcXVhbnRpemUgICAxRSs0ICAxZSsxICAtPiAgMS4wMDBFKzQgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxDQotZGRxdWEyNDcgcXVhbnRpemUgICAxRSs1ICAxZSsxICAtPiAgMS4wMDAwRSs1ICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxDQotZGRxdWEyNDggcXVhbnRpemUgICAxRSs2ICAxZSsxICAtPiAgMS4wMDAwMEUrNiAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxDQotZGRxdWEyNDkgcXVhbnRpemUgICAxRSs3ICAxZSsxICAtPiAgMS4wMDAwMDBFKzcgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxDQotZGRxdWEyNTAgcXVhbnRpemUgICAxRSs4ICAxZSsxICAtPiAgMS4wMDAwMDAwRSs4ICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxDQotZGRxdWEyNTEgcXVhbnRpemUgICAxRSs5ICAxZSsxICAtPiAgMS4wMDAwMDAwMEUrOSAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxDQotLS0gbmV4dCBvbmUgdHJpZXMgdG8gYWRkIDkgemVyb3MNCi1kZHF1YTI1MiBxdWFudGl6ZSAgIDFFKzE3IDFlKzEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTI1MyBxdWFudGl6ZSAgIDFFLTE3IDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjU0IHF1YW50aXplICAgMUUtMiAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyNTUgcXVhbnRpemUgICAwRS0xNyAxZSsxICAtPiAgMEUrMQ0KLWRkcXVhMjU2IHF1YW50aXplICAtMEUtMTcgMWUrMSAgLT4gLTBFKzENCi1kZHF1YTI1NyBxdWFudGl6ZSAgLTBFLTEgIDFlKzEgIC0+IC0wRSsxDQotZGRxdWEyNTggcXVhbnRpemUgIC0wICAgICAxZSsxICAtPiAtMEUrMQ0KLWRkcXVhMjU5IHF1YW50aXplICAtMEUrMSAgMWUrMSAgLT4gLTBFKzENCi0NCi1kZHF1YTI2MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzIgIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTI2MSBxdWFudGl6ZSAgICsxICAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjYyIHF1YW50aXplICAgKzEwICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyNjMgcXVhbnRpemUgICAxRSsxICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTI2NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzIgIC0+ICAxRSsyDQotZGRxdWEyNjUgcXVhbnRpemUgICAxRSszICAxZSsyICAtPiAgMS4wRSszDQotZGRxdWEyNjYgcXVhbnRpemUgICAxRSs0ICAxZSsyICAtPiAgMS4wMEUrNA0KLWRkcXVhMjY3IHF1YW50aXplICAgMUUrNSAgMWUrMiAgLT4gIDEuMDAwRSs1DQotZGRxdWEyNjggcXVhbnRpemUgICAxRSs2ICAxZSsyICAtPiAgMS4wMDAwRSs2DQotZGRxdWEyNjkgcXVhbnRpemUgICAxRSs3ICAxZSsyICAtPiAgMS4wMDAwMEUrNw0KLWRkcXVhMjcwIHF1YW50aXplICAgMUUrOCAgMWUrMiAgLT4gIDEuMDAwMDAwRSs4DQotZGRxdWEyNzEgcXVhbnRpemUgICAxRSs5ICAxZSsyICAtPiAgMS4wMDAwMDAwRSs5DQotZGRxdWEyNzIgcXVhbnRpemUgICAxRSsxMCAxZSsyICAtPiAgMS4wMDAwMDAwMEUrMTANCi1kZHF1YTI3MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjc0IHF1YW50aXplICAgMUUtMiAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyNzUgcXVhbnRpemUgICAwRS0xMCAxZSsyICAtPiAgMEUrMg0KLQ0KLWRkcXVhMjgwIHF1YW50aXplICAgLTEwICAgMWUrMyAgLT4gIC0wRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjgxIHF1YW50aXplICAgKzEgICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyODIgcXVhbnRpemUgICArMTAgICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTI4MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjg0IHF1YW50aXplICAgMUUrMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyODUgcXVhbnRpemUgICAxRSszICAxZSszICAtPiAgMUUrMw0KLWRkcXVhMjg2IHF1YW50aXplICAgMUUrNCAgMWUrMyAgLT4gIDEuMEUrNA0KLWRkcXVhMjg3IHF1YW50aXplICAgMUUrNSAgMWUrMyAgLT4gIDEuMDBFKzUNCi1kZHF1YTI4OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzMgIC0+ICAxLjAwMEUrNg0KLWRkcXVhMjg5IHF1YW50aXplICAgMUUrNyAgMWUrMyAgLT4gIDEuMDAwMEUrNw0KLWRkcXVhMjkwIHF1YW50aXplICAgMUUrOCAgMWUrMyAgLT4gIDEuMDAwMDBFKzgNCi1kZHF1YTI5MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzMgIC0+ICAxLjAwMDAwMEUrOQ0KLWRkcXVhMjkyIHF1YW50aXplICAgMUUrMTAgMWUrMyAgLT4gIDEuMDAwMDAwMEUrMTANCi1kZHF1YTI5MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjk0IHF1YW50aXplICAgMUUtMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyOTUgcXVhbnRpemUgICAwRS0xMCAxZSszICAtPiAgMEUrMw0KLQ0KLS0tIHJvdW5kIHVwIGZyb20gYmVsb3cgW3NpZ24gd3JvbmcgaW4gSklUIGNvbXBpbGVyIG9uY2VdDQotZGRxdWEzMDAgcXVhbnRpemUgICAwLjAwNzggMWUtNSAtPiAgMC4wMDc4MA0KLWRkcXVhMzAxIHF1YW50aXplICAgMC4wMDc4IDFlLTQgLT4gIDAuMDA3OA0KLWRkcXVhMzAyIHF1YW50aXplICAgMC4wMDc4IDFlLTMgLT4gIDAuMDA4IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzAzIHF1YW50aXplICAgMC4wMDc4IDFlLTIgLT4gIDAuMDEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMDQgcXVhbnRpemUgICAwLjAwNzggMWUtMSAtPiAgMC4wIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzA1IHF1YW50aXplICAgMC4wMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMDYgcXVhbnRpemUgICAwLjAwNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMwNyBxdWFudGl6ZSAgIDAuMDA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMzEwIHF1YW50aXplICAtMC4wMDc4IDFlLTUgLT4gLTAuMDA3ODANCi1kZHF1YTMxMSBxdWFudGl6ZSAgLTAuMDA3OCAxZS00IC0+IC0wLjAwNzgNCi1kZHF1YTMxMiBxdWFudGl6ZSAgLTAuMDA3OCAxZS0zIC0+IC0wLjAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMxMyBxdWFudGl6ZSAgLTAuMDA3OCAxZS0yIC0+IC0wLjAxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzE0IHF1YW50aXplICAtMC4wMDc4IDFlLTEgLT4gLTAuMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMxNSBxdWFudGl6ZSAgLTAuMDA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzE2IHF1YW50aXplICAtMC4wMDc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMTcgcXVhbnRpemUgIC0wLjAwNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTMyMCBxdWFudGl6ZSAgIDAuMDc4IDFlLTUgLT4gIDAuMDc4MDANCi1kZHF1YTMyMSBxdWFudGl6ZSAgIDAuMDc4IDFlLTQgLT4gIDAuMDc4MA0KLWRkcXVhMzIyIHF1YW50aXplICAgMC4wNzggMWUtMyAtPiAgMC4wNzgNCi1kZHF1YTMyMyBxdWFudGl6ZSAgIDAuMDc4IDFlLTIgLT4gIDAuMDggSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMjQgcXVhbnRpemUgICAwLjA3OCAxZS0xIC0+ICAwLjEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMjUgcXVhbnRpemUgICAwLjA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzI2IHF1YW50aXplICAgMC4wNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMyNyBxdWFudGl6ZSAgIDAuMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWEzMzAgcXVhbnRpemUgIC0wLjA3OCAxZS01IC0+IC0wLjA3ODAwDQotZGRxdWEzMzEgcXVhbnRpemUgIC0wLjA3OCAxZS00IC0+IC0wLjA3ODANCi1kZHF1YTMzMiBxdWFudGl6ZSAgLTAuMDc4IDFlLTMgLT4gLTAuMDc4DQotZGRxdWEzMzMgcXVhbnRpemUgIC0wLjA3OCAxZS0yIC0+IC0wLjA4IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzM0IHF1YW50aXplICAtMC4wNzggMWUtMSAtPiAtMC4xIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzM1IHF1YW50aXplICAtMC4wNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMzNiBxdWFudGl6ZSAgLTAuMDc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMzcgcXVhbnRpemUgIC0wLjA3OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMzQwIHF1YW50aXplICAgMC43OCAxZS01IC0+ICAwLjc4MDAwDQotZGRxdWEzNDEgcXVhbnRpemUgICAwLjc4IDFlLTQgLT4gIDAuNzgwMA0KLWRkcXVhMzQyIHF1YW50aXplICAgMC43OCAxZS0zIC0+ICAwLjc4MA0KLWRkcXVhMzQzIHF1YW50aXplICAgMC43OCAxZS0yIC0+ICAwLjc4DQotZGRxdWEzNDQgcXVhbnRpemUgICAwLjc4IDFlLTEgLT4gIDAuOCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM0NSBxdWFudGl6ZSAgIDAuNzggIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM0NiBxdWFudGl6ZSAgIDAuNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM0NyBxdWFudGl6ZSAgIDAuNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTM1MCBxdWFudGl6ZSAgLTAuNzggMWUtNSAtPiAtMC43ODAwMA0KLWRkcXVhMzUxIHF1YW50aXplICAtMC43OCAxZS00IC0+IC0wLjc4MDANCi1kZHF1YTM1MiBxdWFudGl6ZSAgLTAuNzggMWUtMyAtPiAtMC43ODANCi1kZHF1YTM1MyBxdWFudGl6ZSAgLTAuNzggMWUtMiAtPiAtMC43OA0KLWRkcXVhMzU0IHF1YW50aXplICAtMC43OCAxZS0xIC0+IC0wLjggSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzNTUgcXVhbnRpemUgIC0wLjc4ICAxZTAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzNTYgcXVhbnRpemUgIC0wLjc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzNTcgcXVhbnRpemUgIC0wLjc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWEzNjAgcXVhbnRpemUgICA3LjggMWUtNSAtPiAgNy44MDAwMA0KLWRkcXVhMzYxIHF1YW50aXplICAgNy44IDFlLTQgLT4gIDcuODAwMA0KLWRkcXVhMzYyIHF1YW50aXplICAgNy44IDFlLTMgLT4gIDcuODAwDQotZGRxdWEzNjMgcXVhbnRpemUgICA3LjggMWUtMiAtPiAgNy44MA0KLWRkcXVhMzY0IHF1YW50aXplICAgNy44IDFlLTEgLT4gIDcuOA0KLWRkcXVhMzY1IHF1YW50aXplICAgNy44ICAxZTAgLT4gIDggSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzNjYgcXVhbnRpemUgICA3LjggMWUrMSAtPiAgMUUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM2NyBxdWFudGl6ZSAgIDcuOCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzY4IHF1YW50aXplICAgNy44IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWEzNzAgcXVhbnRpemUgIC03LjggMWUtNSAtPiAtNy44MDAwMA0KLWRkcXVhMzcxIHF1YW50aXplICAtNy44IDFlLTQgLT4gLTcuODAwMA0KLWRkcXVhMzcyIHF1YW50aXplICAtNy44IDFlLTMgLT4gLTcuODAwDQotZGRxdWEzNzMgcXVhbnRpemUgIC03LjggMWUtMiAtPiAtNy44MA0KLWRkcXVhMzc0IHF1YW50aXplICAtNy44IDFlLTEgLT4gLTcuOA0KLWRkcXVhMzc1IHF1YW50aXplICAtNy44ICAxZTAgLT4gLTggSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzNzYgcXVhbnRpemUgIC03LjggMWUrMSAtPiAtMUUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM3NyBxdWFudGl6ZSAgLTcuOCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzc4IHF1YW50aXplICAtNy44IDFlKzMgLT4gLTBFKzMgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc29tZSBpbmRpdmlkdWFscw0KLWRkcXVhMzgwIHF1YW50aXplICAgMTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAxMjM0NTY3MzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzgxIHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUuMDYgMWUtMiAtPiAxMjM0NTY3MzUyMzY0NS4wNg0KLWRkcXVhMzgyIHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTM4MyBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MDYgIDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWEzODQgcXVhbnRpemUgIC0xMjM0NTY3MzUyMzY0LjUwNiAxZS0yIC0+IC0xMjM0NTY3MzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzg1IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NDUuMDYgMWUtMiAtPiAtMTIzNDU2NzM1MjM2NDUuMDYNCi1kZHF1YTM4NiBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWEzODcgcXVhbnRpemUgIC0xMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZGRxdWEzODkgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tID8gc2hvdWxkIHRoYXQgb25lIGluc3RlYWQgaGF2ZSBiZWVuOg0KLS0tIGRkcXVhMzg5IHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3VuZGluZzogaGFsZl91cA0KLQ0KLS0tIGFuZCBhIGZldyBtb3JlIGZyb20gZS1tYWlsIGRpc2N1c3Npb25zDQotZGRxdWEzOTEgcXVhbnRpemUgIDEyMzQ1Njc4OTEyLjM0NTY3ICAxZS0zIC0+IDEyMzQ1Njc4OTEyLjM0NiAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzkyIHF1YW50aXplICAxMjM0NTY3ODkxMjMuNDU2NyAgMWUtMyAtPiAxMjM0NTY3ODkxMjMuNDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM5MyBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzNC41NjcgIDFlLTMgLT4gMTIzNDU2Nzg5MTIzNC41NjcNCi1kZHF1YTM5NCBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzNDUuNjcgIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWEzOTUgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQ1Ni43ICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhMzk2IHF1YW50aXplICAxMjM0NTY3ODkxMjM0NTY3LiAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBzb21lIDk5OTkgcm91bmQtdXAgY2FzZXMNCi1kZHF1YTQwMCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS01ICAtPiAgOS45OTkwMA0KLWRkcXVhNDAxIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTQgIC0+ICA5Ljk5OTANCi1kZHF1YTQwMiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0zICAtPiAgOS45OTkNCi1kZHF1YTQwMyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0yICAtPiAxMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MDQgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMSAgLT4gMTAuMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDA1IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTAgIC0+IDEwICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQwNiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUxICAtPiAxRSsxICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MDcgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMiAgLT4gMEUrMiAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhNDEwIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTUgIC0+ICAwLjk5OTAwDQotZGRxdWE0MTEgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtNCAgLT4gIDAuOTk5MA0KLWRkcXVhNDEyIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTMgIC0+ICAwLjk5OQ0KLWRkcXVhNDEzIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTIgIC0+ICAxLjAwICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQxNCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0xICAtPiAgMS4wICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MTUgcXVhbnRpemUgICAwLjk5OSAgICAgICAgIDFlMCAgLT4gIDEgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDE2IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTQyMCBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS01ICAtPiAgMC4wOTk5MA0KLWRkcXVhNDIxIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTQgIC0+ICAwLjA5OTkNCi1kZHF1YTQyMiBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0zICAtPiAgMC4xMDAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MjMgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMiAgLT4gIDAuMTAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDI0IHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTEgIC0+ICAwLjEgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQyNSBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MjYgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhNDMwIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTUgIC0+ICAwLjAwOTk5DQotZGRxdWE0MzEgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNCAgLT4gIDAuMDEwMCAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDMyIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTMgIC0+ICAwLjAxMCAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQzMyBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0yICAtPiAgMC4wMSAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MzQgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDM1IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQzNiBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWE0NDAgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNSAgLT4gIDAuMDAxMDAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDQxIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTQgIC0+ICAwLjAwMTAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQ0MiBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0zICAtPiAgMC4wMDEgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0NDMgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMiAgLT4gIDAuMDAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDQ0IHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQ0NSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0NDYgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMTAwMSBxdWFudGl6ZSAgMC4wMDAgICAgICAgIDAuMDAxIC0+ICAwLjAwMA0KLWRkcXVhMTAwMiBxdWFudGl6ZSAgMC4wMDEgICAgICAgIDAuMDAxIC0+ICAwLjAwMQ0KLWRkcXVhMTAwMyBxdWFudGl6ZSAgMC4wMDEyICAgICAgIDAuMDAxIC0+ICAwLjAwMSAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMDA0IHF1YW50aXplICAwLjAwMTggICAgICAgMC4wMDEgLT4gIDAuMDAyICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEwMDUgcXVhbnRpemUgIDAuNTAxICAgICAgICAwLjAwMSAtPiAgMC41MDENCi1kZHF1YTEwMDYgcXVhbnRpemUgIDAuNTAxMiAgICAgICAwLjAwMSAtPiAgMC41MDEgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTAwNyBxdWFudGl6ZSAgMC41MDE4ICAgICAgIDAuMDAxIC0+ICAwLjUwMiAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMDA4IHF1YW50aXplICAwLjk5OSAgICAgICAgMC4wMDEgLT4gIDAuOTk5DQotDQotZGRxdWE0ODEgcXVhbnRpemUgMTIzNDU2NzgwMDAgMWUrMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQNCi1kZHF1YTQ4MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZA0KLWRkcXVhNDgzIHF1YW50aXplIDEyMzQ1Njc4OTAgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkDQotZGRxdWE0ODQgcXVhbnRpemUgMTIzNDU2Nzg5MSAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDg1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0ODYgcXVhbnRpemUgMTIzNDU2Nzg5NiAgMWUrMSAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZA0KLS0tIGEgcG90ZW50aWFsIGRvdWJsZS1yb3VuZA0KLWRkcXVhNDg3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDg4IHF1YW50aXplIDEyMzQuOTg3NjQ3IDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhNDkxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkDQotZGRxdWE0OTIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQNCi1kZHF1YTQ5MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZA0KLWRkcXVhNDk0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQ5NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDk2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQ5NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQ5OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBaZXJvcw0KLWRkcXVhNTAwIHF1YW50aXplICAgMCAgICAgMWUxIC0+ICAwRSsxDQotZGRxdWE1MDEgcXVhbnRpemUgICAwICAgICAxZTAgLT4gIDANCi1kZHF1YTUwMiBxdWFudGl6ZSAgIDAgICAgMWUtMSAtPiAgMC4wDQotZGRxdWE1MDMgcXVhbnRpemUgICAwLjAgIDFlLTEgLT4gIDAuMA0KLWRkcXVhNTA0IHF1YW50aXplICAgMC4wICAgMWUwIC0+ICAwDQotZGRxdWE1MDUgcXVhbnRpemUgICAwLjAgIDFlKzEgLT4gIDBFKzENCi1kZHF1YTUwNiBxdWFudGl6ZSAgIDBFKzEgMWUtMSAtPiAgMC4wDQotZGRxdWE1MDcgcXVhbnRpemUgICAwRSsxICAxZTAgLT4gIDANCi1kZHF1YTUwOCBxdWFudGl6ZSAgIDBFKzEgMWUrMSAtPiAgMEUrMQ0KLWRkcXVhNTA5IHF1YW50aXplICAtMCAgICAgMWUxIC0+IC0wRSsxDQotZGRxdWE1MTAgcXVhbnRpemUgIC0wICAgICAxZTAgLT4gLTANCi1kZHF1YTUxMSBxdWFudGl6ZSAgLTAgICAgMWUtMSAtPiAtMC4wDQotZGRxdWE1MTIgcXVhbnRpemUgIC0wLjAgIDFlLTEgLT4gLTAuMA0KLWRkcXVhNTEzIHF1YW50aXplICAtMC4wICAgMWUwIC0+IC0wDQotZGRxdWE1MTQgcXVhbnRpemUgIC0wLjAgIDFlKzEgLT4gLTBFKzENCi1kZHF1YTUxNSBxdWFudGl6ZSAgLTBFKzEgMWUtMSAtPiAtMC4wDQotZGRxdWE1MTYgcXVhbnRpemUgIC0wRSsxICAxZTAgLT4gLTANCi1kZHF1YTUxNyBxdWFudGl6ZSAgLTBFKzEgMWUrMSAtPiAtMEUrMQ0KLQ0KLS0tIFN1c3BpY2lvdXMgUkhTIHZhbHVlcw0KLWRkcXVhNTIwIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNTIxIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNTIyIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNTIzIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KLS0tIG5leHQgZm91ciBhcmUgIndvbid0IGZpdCIgb3ZlcmZsDQotZGRxdWE1MjYgcXVhbnRpemUgICAxLjIzNCAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTUyNyBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNTI4IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE1MjkgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZHF1YTUzMiBxdWFudGl6ZSAgIDEuMjM0RSsyOTkgICAgMWUyOTkgLT4gMUUrMjk5ICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNTMzIHF1YW50aXplICAgMS4yMzRFKzI5OCAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE1MzQgcXVhbnRpemUgICAxLjIzNCAgICAgICAgIDFlMjk5IC0+IDBFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTUzNyBxdWFudGl6ZSAgIDAgICAgICAgICAgICAxZS0yOTkgLT4gMEUtMjk5DQotLS0gbmV4dCB0d28gYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cw0KLWRkcXVhNTM4IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTUzOSBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0zMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gW21vcmUgYmVsb3ddDQotDQotLS0gU3BlY2lhbHMNCi1kZHF1YTU4MCBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZHF1YTU4MSBxdWFudGl6ZSAgSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNTgyIHF1YW50aXplICBJbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE1ODMgcXVhbnRpemUgIEluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTU4NCBxdWFudGl6ZSAgSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNTg1IHF1YW50aXplICBJbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE1ODYgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRxdWE1ODcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTU4OCBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5DQotZGRxdWE1ODkgcXVhbnRpemUgLTEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTU5MCBxdWFudGl6ZSAgMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNTkxIHF1YW50aXplICAxICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE1OTIgcXVhbnRpemUgIDEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTU5MyBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZHF1YTU5NCBxdWFudGl6ZSAgSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNTk1IHF1YW50aXplIC0wICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRxdWE2MDAgcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQ0KLWRkcXVhNjAxIHF1YW50aXplIC1JbmYgIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2MDIgcXVhbnRpemUgLUluZiAgMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTYwMyBxdWFudGl6ZSAtSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjA0IHF1YW50aXplIC1JbmYgICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2MDUgcXVhbnRpemUgLUluZiAgIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTYwNiBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5DQotZGRxdWE2MDcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTYwOCBxdWFudGl6ZSAtSW5mICAgIC1JbmYgICAtPiAgLUluZmluaXR5DQotZGRxdWE2MDkgcXVhbnRpemUgLTEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTYxMCBxdWFudGl6ZSAgMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjExIHF1YW50aXplICAxICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2MTIgcXVhbnRpemUgIDEwMDAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTYxMyBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZHF1YTYxNCBxdWFudGl6ZSAtSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjE1IHF1YW50aXplIC0wICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRxdWE2MjEgcXVhbnRpemUgIE5hTiAgIC1JbmYgICAgLT4gIE5hTg0KLWRkcXVhNjIyIHF1YW50aXplICBOYU4gMWUtMjk5ICAgIC0+ICBOYU4NCi1kZHF1YTYyMyBxdWFudGl6ZSAgTmFOIDFlLTEgICAgICAtPiAgTmFODQotZGRxdWE2MjQgcXVhbnRpemUgIE5hTiAgMWUwICAgICAgLT4gIE5hTg0KLWRkcXVhNjI1IHF1YW50aXplICBOYU4gIDFlMSAgICAgIC0+ICBOYU4NCi1kZHF1YTYyNiBxdWFudGl6ZSAgTmFOICAxZTI5OSAgICAtPiAgTmFODQotZGRxdWE2MjcgcXVhbnRpemUgIE5hTiAgICBJbmYgICAgLT4gIE5hTg0KLWRkcXVhNjI4IHF1YW50aXplICBOYU4gICAgTmFOICAgIC0+ICBOYU4NCi1kZHF1YTYyOSBxdWFudGl6ZSAtSW5mICAgIE5hTiAgICAtPiAgTmFODQotZGRxdWE2MzAgcXVhbnRpemUgLTEwMDAgICBOYU4gICAgLT4gIE5hTg0KLWRkcXVhNjMxIHF1YW50aXplIC0xICAgICAgTmFOICAgIC0+ICBOYU4NCi1kZHF1YTYzMiBxdWFudGl6ZSAgMCAgICAgIE5hTiAgICAtPiAgTmFODQotZGRxdWE2MzMgcXVhbnRpemUgIDEgICAgICBOYU4gICAgLT4gIE5hTg0KLWRkcXVhNjM0IHF1YW50aXplICAxMDAwICAgTmFOICAgIC0+ICBOYU4NCi1kZHF1YTYzNSBxdWFudGl6ZSAgSW5mICAgIE5hTiAgICAtPiAgTmFODQotZGRxdWE2MzYgcXVhbnRpemUgIE5hTiAxZS0wICAgICAgLT4gIE5hTg0KLWRkcXVhNjM3IHF1YW50aXplIC0wICAgICAgTmFOICAgIC0+ICBOYU4NCi0NCi1kZHF1YTY0MSBxdWFudGl6ZSAgc05hTiAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjQyIHF1YW50aXplICBzTmFOIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NDMgcXVhbnRpemUgIHNOYU4gMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY0NCBxdWFudGl6ZSAgc05hTiAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjQ1IHF1YW50aXplICBzTmFOICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NDYgcXVhbnRpemUgIHNOYU4gIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY0NyBxdWFudGl6ZSAgc05hTiAgICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjQ4IHF1YW50aXplICBzTmFOICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NDkgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY1MCBxdWFudGl6ZSAtSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjUxIHF1YW50aXplIC0xMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NTIgcXVhbnRpemUgLTEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY1MyBxdWFudGl6ZSAgMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjU0IHF1YW50aXplICAxICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NTUgcXVhbnRpemUgIDEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY1NiBxdWFudGl6ZSAgSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjU3IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NTggcXVhbnRpemUgIHNOYU4gMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY1OSBxdWFudGl6ZSAtMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZHF1YTY2MSBxdWFudGl6ZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCi1kZHF1YTY2MiBxdWFudGl6ZSAgTmFOOCAgOTE5ICAgLT4gIE5hTjgNCi1kZHF1YTY2MyBxdWFudGl6ZSAgTmFONzEgSW5mICAgLT4gIE5hTjcxDQotZGRxdWE2NjQgcXVhbnRpemUgIE5hTjYgIE5hTjUgIC0+ICBOYU42DQotZGRxdWE2NjUgcXVhbnRpemUgLUluZiAgIE5hTjQgIC0+ICBOYU40DQotZGRxdWE2NjYgcXVhbnRpemUgLTkxOSAgIE5hTjMxIC0+ICBOYU4zMQ0KLWRkcXVhNjY3IHF1YW50aXplICBJbmYgICBOYU4yICAtPiAgTmFOMg0KLQ0KLWRkcXVhNjcxIHF1YW50aXplICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY3MiBxdWFudGl6ZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NzMgcXVhbnRpemUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjc0IHF1YW50aXplICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY3NSBxdWFudGl6ZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NzYgcXVhbnRpemUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjc3IHF1YW50aXplICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY3OCBxdWFudGl6ZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NzkgcXVhbnRpemUgIE5hTiAgICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkcXVhNjgxIHF1YW50aXplIC1OYU45IC1JbmYgICAtPiAtTmFOOQ0KLWRkcXVhNjgyIHF1YW50aXplIC1OYU44ICA5MTkgICAtPiAtTmFOOA0KLWRkcXVhNjgzIHF1YW50aXplIC1OYU43MSBJbmYgICAtPiAtTmFONzENCi1kZHF1YTY4NCBxdWFudGl6ZSAtTmFONiAtTmFONSAgLT4gLU5hTjYNCi1kZHF1YTY4NSBxdWFudGl6ZSAtSW5mICAtTmFONCAgLT4gLU5hTjQNCi1kZHF1YTY4NiBxdWFudGl6ZSAtOTE5ICAtTmFOMzEgLT4gLU5hTjMxDQotZGRxdWE2ODcgcXVhbnRpemUgIEluZiAgLU5hTjIgIC0+IC1OYU4yDQotDQotZGRxdWE2OTEgcXVhbnRpemUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjkyIHF1YW50aXplIC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY5MyBxdWFudGl6ZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2OTQgcXVhbnRpemUgLXNOYU4xNiBzTmFOOTQgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjk1IHF1YW50aXplIC1OYU45NSAtc05hTjkzICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY5NiBxdWFudGl6ZSAtSW5mICAgLXNOYU45MiAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2OTcgcXVhbnRpemUgIDA4OCAgIC1zTmFOOTEgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjk4IHF1YW50aXplICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY5OSBxdWFudGl6ZSAgTmFOICAgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93DQotZGRxdWE3MTAgcXVhbnRpemUgIDEuMDBFLTM4MyAgICAxZS0zODMgIC0+ICAgMUUtMzgzICAgIFJvdW5kZWQNCi1kZHF1YTcxMSBxdWFudGl6ZSAgMC4xRS0zODMgICAgMmUtMzg0ICAtPiAgIDFFLTM4NCAgIFN1Ym5vcm1hbA0KLWRkcXVhNzEyIHF1YW50aXplICAwLjEwRS0zODMgICAzZS0zODQgIC0+ICAgMUUtMzg0ICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHF1YTcxMyBxdWFudGl6ZSAgMC4xMDBFLTM4MyAgNGUtMzg0ICAtPiAgIDFFLTM4NCAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRxdWE3MTQgcXVhbnRpemUgIDAuMDFFLTM4MyAgIDVlLTM4NSAgLT4gICAxRS0zODUgICBTdWJub3JtYWwNCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbg0KLWRkcXVhNzE1IHF1YW50aXplICAwLjk5OUUtMzgzICAgMWUtMzgzICAtPiAgIDFFLTM4MyAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTcxNiBxdWFudGl6ZSAgMC4wOTlFLTM4MyAxMGUtMzg0ICAtPiAgIDFFLTM4NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwNCi0NCi1kZHF1YTcxNyBxdWFudGl6ZSAgMC4wMDlFLTM4MyAgMWUtMzg1ICAtPiAgIDFFLTM4NSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwNCi1kZHF1YTcxOCBxdWFudGl6ZSAgMC4wMDFFLTM4MyAgMWUtMzg1ICAtPiAgIDBFLTM4NSAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNzE5IHF1YW50aXplICAwLjAwMDlFLTM4MyAxZS0zODUgIC0+ICAgMEUtMzg1ICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE3MjAgcXVhbnRpemUgIDAuMDAwMUUtMzgzIDFlLTM4NSAgLT4gICAwRS0zODUgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTczMCBxdWFudGl6ZSAtMS4wMEUtMzgzICAgMWUtMzgzICAtPiAgLTFFLTM4MyAgICAgUm91bmRlZA0KLWRkcXVhNzMxIHF1YW50aXplIC0wLjFFLTM4MyAgICAxZS0zODMgIC0+ICAtMEUtMzgzICAgICBSb3VuZGVkIEluZXhhY3QNCi1kZHF1YTczMiBxdWFudGl6ZSAtMC4xMEUtMzgzICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgUm91bmRlZCBJbmV4YWN0DQotZGRxdWE3MzMgcXVhbnRpemUgLTAuMTAwRS0zODMgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIFJvdW5kZWQgSW5leGFjdA0KLWRkcXVhNzM0IHF1YW50aXplIC0wLjAxRS0zODMgICAxZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbg0KLWRkcXVhNzM1IHF1YW50aXplIC0wLjk5OUUtMzgzIDkwZS0zODMgIC0+ICAtMUUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTczNiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAtMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE3MzcgcXVhbnRpemUgLTAuMDA5RS0zODMgLTFlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNzM4IHF1YW50aXplIC0wLjAwMUUtMzgzIC0wZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTczOSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMGUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWE3NDAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4NCAtPiAgLTEuMEUtMzgzICAgUm91bmRlZA0KLWRkcXVhNzQxIHF1YW50aXplIC0wLjFFLTM4MyAgICAxZS0zODQgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsDQotZGRxdWE3NDIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4NCAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRkcXVhNzQzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODQgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHF1YTc0NCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzg0IC0+ICAtMEUtMzg0ICAgIEluZXhhY3QgUm91bmRlZA0KLS0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluDQotZGRxdWE3NDUgcXVhbnRpemUgLTAuOTk5RS0zODMgIDFlLTM4NCAtPiAgLTEuMEUtMzgzICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE3NDYgcXVhbnRpemUgLTAuMDk5RS0zODMgIDFlLTM4NCAtPiAgLTFFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsDQotZGRxdWE3NDcgcXVhbnRpemUgLTAuMDA5RS0zODMgIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTc0OCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAgMWUtMzg0IC0+ICAtMEUtMzg0ICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNzQ5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAxZS0zODQgLT4gIC0wRS0zODQgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWE3NTAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4NSAtPiAgLTEuMDBFLTM4Mw0KLWRkcXVhNzUxIHF1YW50aXplIC0wLjFFLTM4MyAgICAxZS0zODUgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsDQotZGRxdWE3NTIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4NSAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwNCi1kZHF1YTc1MyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRxdWE3NTQgcXVhbnRpemUgLTAuMDFFLTM4MyAgIDFlLTM4NSAtPiAgLTFFLTM4NSAgICBTdWJub3JtYWwNCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbg0KLWRkcXVhNzU1IHF1YW50aXplIC0wLjk5OUUtMzgzICAxZS0zODUgLT4gIC0xLjAwRS0zODMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNzU2IHF1YW50aXplIC0wLjA5OUUtMzgzICAxZS0zODUgLT4gIC0xLjBFLTM4NCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbA0KLWRkcXVhNzU3IHF1YW50aXplIC0wLjAwOUUtMzgzICAxZS0zODUgLT4gIC0xRS0zODUgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbA0KLWRkcXVhNzU4IHF1YW50aXplIC0wLjAwMUUtMzgzICAxZS0zODUgLT4gIC0wRS0zODUgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE3NTkgcXVhbnRpemUgLTAuMDAwMUUtMzgzIDFlLTM4NSAtPiAgLTBFLTM4NSAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTc2MCBxdWFudGl6ZSAtMS4wMEUtMzgzICAgMWUtMzg2IC0+ICAtMS4wMDBFLTM4Mw0KLWRkcXVhNzYxIHF1YW50aXplIC0wLjFFLTM4MyAgICAxZS0zODYgLT4gIC0xLjAwRS0zODQgIFN1Ym5vcm1hbA0KLWRkcXVhNzYyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODYgLT4gIC0xLjAwRS0zODQgIFN1Ym5vcm1hbA0KLWRkcXVhNzYzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODYgLT4gIC0xLjAwRS0zODQgIFN1Ym5vcm1hbA0KLWRkcXVhNzY0IHF1YW50aXplIC0wLjAxRS0zODMgICAxZS0zODYgLT4gIC0xLjBFLTM4NSAgIFN1Ym5vcm1hbA0KLWRkcXVhNzY1IHF1YW50aXplIC0wLjk5OUUtMzgzICAxZS0zODYgLT4gIC05Ljk5RS0zODQgIFN1Ym5vcm1hbA0KLWRkcXVhNzY2IHF1YW50aXplIC0wLjA5OUUtMzgzICAxZS0zODYgLT4gIC05LjlFLTM4NSAgIFN1Ym5vcm1hbA0KLWRkcXVhNzY3IHF1YW50aXplIC0wLjAwOUUtMzgzICAxZS0zODYgLT4gIC05RS0zODYgICAgIFN1Ym5vcm1hbA0KLWRkcXVhNzY4IHF1YW50aXplIC0wLjAwMUUtMzgzICAxZS0zODYgLT4gIC0xRS0zODYgICAgIFN1Ym5vcm1hbA0KLWRkcXVhNzY5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAxZS0zODYgLT4gIC0wRS0zODYgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIE1vcmUgZnJvbSBGdW5nIExlZQ0KLWRkcXVhMTAyMSBxdWFudGl6ZSAgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiAgOC42NjY2NjY2NjY2NjYwMDBFKzM4NA0KLWRkcXVhMTAyMiBxdWFudGl6ZSAtOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiAtOC42NjY2NjY2NjY2NjYwMDBFKzM4NA0KLWRkcXVhMTAyNyBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzIzICAxRSszMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTEwMjkgcXVhbnRpemUgOC42NjY2NjY2NkUrMyAgICAgICAgICAgMUUrMyAgICAgLT4gOUUrMyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLWRkcXVhMTAzMCBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4NCAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZCBJbmV4YWN0DQotLS1kZHF1YTEwMzEgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODQgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQNCi0tLWRkcXVhMTAzMiBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MyAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZA0KLS0tZGRxdWExMDMzIHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzgyICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkDQotLS1kZHF1YTEwMzQgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODEgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQNCi0tLWRkcXVhMTAzNSBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MCAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZA0KLQ0KLS0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zDQotZGRxdWExMDQwIHF1YW50aXplIC0yMTQ3NDgzNjQ2ICAgICAwIC0+IC0yMTQ3NDgzNjQ2DQotZGRxdWExMDQxIHF1YW50aXplIC0yMTQ3NDgzNjQ3ICAgICAwIC0+IC0yMTQ3NDgzNjQ3DQotZGRxdWExMDQyIHF1YW50aXplIC0yMTQ3NDgzNjQ4ICAgICAwIC0+IC0yMTQ3NDgzNjQ4DQotZGRxdWExMDQzIHF1YW50aXplIC0yMTQ3NDgzNjQ5ICAgICAwIC0+IC0yMTQ3NDgzNjQ5DQotZGRxdWExMDQ0IHF1YW50aXplICAyMTQ3NDgzNjQ2ICAgICAwIC0+ICAyMTQ3NDgzNjQ2DQotZGRxdWExMDQ1IHF1YW50aXplICAyMTQ3NDgzNjQ3ICAgICAwIC0+ICAyMTQ3NDgzNjQ3DQotZGRxdWExMDQ2IHF1YW50aXplICAyMTQ3NDgzNjQ4ICAgICAwIC0+ICAyMTQ3NDgzNjQ4DQotZGRxdWExMDQ3IHF1YW50aXplICAyMTQ3NDgzNjQ5ICAgICAwIC0+ICAyMTQ3NDgzNjQ5DQotZGRxdWExMDQ4IHF1YW50aXplICA0Mjk0OTY3Mjk0ICAgICAwIC0+ICA0Mjk0OTY3Mjk0DQotZGRxdWExMDQ5IHF1YW50aXplICA0Mjk0OTY3Mjk1ICAgICAwIC0+ICA0Mjk0OTY3Mjk1DQotZGRxdWExMDUwIHF1YW50aXplICA0Mjk0OTY3Mjk2ICAgICAwIC0+ICA0Mjk0OTY3Mjk2DQotZGRxdWExMDUxIHF1YW50aXplICA0Mjk0OTY3Mjk3ICAgICAwIC0+ICA0Mjk0OTY3Mjk3DQotDQotLS0gUm91bmRpbmcgc3dhdGhlDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkcXVhMTEwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kZHF1YTExMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTExMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTExMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTExMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTExMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTExMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTExMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTExMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTExMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl91cA0KLWRkcXVhMTIwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kZHF1YTEyMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEyMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEyMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEyMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEyMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEyMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEyMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEyMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEyMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9kb3duDQotZGRxdWExMzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZA0KLWRkcXVhMTMwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTMwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTMwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTMwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTMwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTMwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTMwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTMwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTMwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiB1cA0KLWRkcXVhMTQwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kZHF1YTE0MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE0MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE0MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE0MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE0MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE0MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE0MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE0MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE0MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE0MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRkcXVhMTUwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kZHF1YTE1MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE1MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE1MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE1MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE1MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE1MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE1MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE1MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE1MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE1MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogY2VpbGluZw0KLWRkcXVhMTYwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kZHF1YTE2MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZmxvb3INCi1kZHF1YTE3MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZGRxdWExNzAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IDA1dXANCi1kZHF1YTE4MDAgcXVhbnRpemUgIDEuMjAwMCAgICAxLjAwICAgIC0+ICAxLjIwICBSb3VuZGVkDQotZGRxdWExODAxIHF1YW50aXplICAxLjIwMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExODAyIHF1YW50aXplICAxLjIwMTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExODAzIHF1YW50aXplICAxLjIwNTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExODA0IHF1YW50aXplICAxLjIwNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExODA3IHF1YW50aXplICAxLjIwNjAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExODA4IHF1YW50aXplICAxLjIwNzAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExODA5IHF1YW50aXplICAxLjIwOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExODExIHF1YW50aXplIC0xLjIwOTkgICAgMS4wMCAgICAtPiAtMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWExOTAwIHF1YW50aXplICAxLjIxMDAgICAgMS4wMCAgICAtPiAgMS4yMSAgUm91bmRlZA0KLWRkcXVhMTkwMSBxdWFudGl6ZSAgMS4yMTAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTkwMiBxdWFudGl6ZSAgMS4yMTEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTkwMyBxdWFudGl6ZSAgMS4yMTUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTkwNCBxdWFudGl6ZSAgMS4yMTUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTkwNyBxdWFudGl6ZSAgMS4yMTYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTkwOCBxdWFudGl6ZSAgMS4yMTcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTkwOSBxdWFudGl6ZSAgMS4yMTk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTkxMSBxdWFudGl6ZSAtMS4yMTk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMjAwMCBxdWFudGl6ZSAgMS4yNDAwICAgIDEuMDAgICAgLT4gIDEuMjQgIFJvdW5kZWQNCi1kZHF1YTIwMDEgcXVhbnRpemUgIDEuMjQwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIwMDIgcXVhbnRpemUgIDEuMjQxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIwMDMgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIwMDQgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIwMDcgcXVhbnRpemUgIDEuMjQ2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIwMDggcXVhbnRpemUgIDEuMjQ3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIwMDkgcXVhbnRpemUgIDEuMjQ5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIwMTEgcXVhbnRpemUgLTEuMjQ5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTIxMDAgcXVhbnRpemUgIDEuMjUwMCAgICAxLjAwICAgIC0+ICAxLjI1ICBSb3VuZGVkDQotZGRxdWEyMTAxIHF1YW50aXplICAxLjI1MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMTAyIHF1YW50aXplICAxLjI1MTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMTAzIHF1YW50aXplICAxLjI1NTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMTA0IHF1YW50aXplICAxLjI1NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMTA3IHF1YW50aXplICAxLjI1NjAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMTA4IHF1YW50aXplICAxLjI1NzAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMTA5IHF1YW50aXplICAxLjI1OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMTExIHF1YW50aXplIC0xLjI1OTkgICAgMS4wMCAgICAtPiAtMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWEyMjAwIHF1YW50aXplICAxLjI2MDAgICAgMS4wMCAgICAtPiAgMS4yNiAgUm91bmRlZA0KLWRkcXVhMjIwMSBxdWFudGl6ZSAgMS4yNjAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjIwMiBxdWFudGl6ZSAgMS4yNjEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjIwMyBxdWFudGl6ZSAgMS4yNjUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjIwNCBxdWFudGl6ZSAgMS4yNjUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjIwNyBxdWFudGl6ZSAgMS4yNjYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjIwOCBxdWFudGl6ZSAgMS4yNjcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjIwOSBxdWFudGl6ZSAgMS4yNjk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjIxMSBxdWFudGl6ZSAtMS4yNjk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMjMwMCBxdWFudGl6ZSAgMS4yOTAwICAgIDEuMDAgICAgLT4gIDEuMjkgIFJvdW5kZWQNCi1kZHF1YTIzMDEgcXVhbnRpemUgIDEuMjkwMSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIzMDIgcXVhbnRpemUgIDEuMjkxMCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIzMDMgcXVhbnRpemUgIDEuMjk1MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIzMDQgcXVhbnRpemUgIDEuMjk1MSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIzMDcgcXVhbnRpemUgIDEuMjk2MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIzMDggcXVhbnRpemUgIDEuMjk3MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIzMDkgcXVhbnRpemUgIDEuMjk5OSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIzMTEgcXVhbnRpemUgLTEuMjk5OSAgICAxLjAwICAgIC0+IC0xLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBOdWxsIHRlc3RzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLWRkcXVhOTk4IHF1YW50aXplIDEwICAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE5OTkgcXVhbnRpemUgICMgMWUxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkUXVhbnRpemUuZGVjVGVzdCAtLSBkZWNEb3VibGUgcXVhbnRpemUgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTW9zdCBvZiB0aGUgdGVzdHMgaGVyZSBhc3N1bWUgYSAicmVndWxhciBwYXR0ZXJuIiwgd2hlcmUgdGhlCistLSBzaWduIGFuZCBjb2VmZmljaWVudCBhcmUgKzEuCistLSAyMDA0LjAzLjE1IFVuZGVyZmxvdyBmb3IgcXVhbnRpemUgaXMgc3VwcHJlc3NlZAorLS0gMjAwNS4wNi4wOCBNb3JlIGV4dGVuc2l2ZSB0ZXN0cyBmb3IgJ2RvZXMgbm90IGZpdCcKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZHF1YTAwMSBxdWFudGl6ZSAwICAgICAgIDFlMCAgIC0+IDAKK2RkcXVhMDAyIHF1YW50aXplIDEgICAgICAgMWUwICAgLT4gMQorZGRxdWEwMDMgcXVhbnRpemUgMC4xICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMDUgcXVhbnRpemUgMC4xICAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMDYgcXVhbnRpemUgMC4xICAgICAxZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMDcgcXVhbnRpemUgMC4xICAgIDFlLTEgICAtPiAwLjEKK2RkcXVhMDA4IHF1YW50aXplIDAuMSAgICAxZS0yICAgLT4gMC4xMAorZGRxdWEwMDkgcXVhbnRpemUgMC4xICAgIDFlLTMgICAtPiAwLjEwMAorZGRxdWEwMTAgcXVhbnRpemUgMC45ICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMTEgcXVhbnRpemUgMC45ICAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMTIgcXVhbnRpemUgMC45ICAgIDFlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMTMgcXVhbnRpemUgMC45ICAgIDFlLTEgICAtPiAwLjkKK2RkcXVhMDE0IHF1YW50aXplIDAuOSAgICAxZS0yICAgLT4gMC45MAorZGRxdWEwMTUgcXVhbnRpemUgMC45ICAgIDFlLTMgICAtPiAwLjkwMAorLS0gbmVnYXRpdmVzCitkZHF1YTAyMSBxdWFudGl6ZSAtMCAgICAgIDFlMCAgIC0+IC0wCitkZHF1YTAyMiBxdWFudGl6ZSAtMSAgICAgIDFlMCAgIC0+IC0xCitkZHF1YTAyMyBxdWFudGl6ZSAtMC4xICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMjUgcXVhbnRpemUgLTAuMSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDI2IHF1YW50aXplIC0wLjEgICAgMWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAyNyBxdWFudGl6ZSAtMC4xICAgMWUtMSAgIC0+IC0wLjEKK2RkcXVhMDI4IHF1YW50aXplIC0wLjEgICAxZS0yICAgLT4gLTAuMTAKK2RkcXVhMDI5IHF1YW50aXplIC0wLjEgICAxZS0zICAgLT4gLTAuMTAwCitkZHF1YTAzMCBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMzEgcXVhbnRpemUgLTAuOSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDMyIHF1YW50aXplIC0wLjkgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAzMyBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkKK2RkcXVhMDM0IHF1YW50aXplIC0wLjkgICAxZS0yICAgLT4gLTAuOTAKK2RkcXVhMDM1IHF1YW50aXplIC0wLjkgICAxZS0zICAgLT4gLTAuOTAwCitkZHF1YTAzNiBxdWFudGl6ZSAtMC41ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMzcgcXVhbnRpemUgLTAuNSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDM4IHF1YW50aXplIC0wLjUgICAxZSswICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAzOSBxdWFudGl6ZSAtMC41ICAgMWUtMSAgIC0+IC0wLjUKK2RkcXVhMDQwIHF1YW50aXplIC0wLjUgICAxZS0yICAgLT4gLTAuNTAKK2RkcXVhMDQxIHF1YW50aXplIC0wLjUgICAxZS0zICAgLT4gLTAuNTAwCitkZHF1YTA0MiBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEwNDMgcXVhbnRpemUgLTAuOSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDQ0IHF1YW50aXplIC0wLjkgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA0NSBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkKK2RkcXVhMDQ2IHF1YW50aXplIC0wLjkgICAxZS0yICAgLT4gLTAuOTAKK2RkcXVhMDQ3IHF1YW50aXplIC0wLjkgICAxZS0zICAgLT4gLTAuOTAwCisKKy0tIGV4YW1wbGVzIGZyb20gU3BlY2lmaWNhdGlvbgorZGRxdWEwNjAgcXVhbnRpemUgMi4xNyAgIDAuMDAxICAtPiAyLjE3MAorZGRxdWEwNjEgcXVhbnRpemUgMi4xNyAgIDAuMDEgICAtPiAyLjE3CitkZHF1YTA2MiBxdWFudGl6ZSAyLjE3ICAgMC4xICAgIC0+IDIuMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDYzIHF1YW50aXplIDIuMTcgICAxZSswICAgLT4gMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDY0IHF1YW50aXplIDIuMTcgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDY1IHF1YW50aXplIC1JbmYgICAgSW5mICAgLT4gLUluZmluaXR5CitkZHF1YTA2NiBxdWFudGl6ZSAyICAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEwNjcgcXVhbnRpemUgLTAuMSAgICAxICAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDY4IHF1YW50aXplIC0wICAgICAgMWUrNSAgICAgLT4gLTBFKzUKK2RkcXVhMDY5IHF1YW50aXplICsxMjM0NTY3ODkwMTIzNDUuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEwNzAgcXVhbnRpemUgLTk4NzY1NDMzNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTA3MSBxdWFudGl6ZSAyMTcgICAgMWUtMSAgIC0+IDIxNy4wCitkZHF1YTA3MiBxdWFudGl6ZSAyMTcgICAgMWUrMCAgIC0+IDIxNworZGRxdWEwNzMgcXVhbnRpemUgMjE3ICAgIDFlKzEgICAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA3NCBxdWFudGl6ZSAyMTcgICAgMWUrMiAgIC0+IDJFKzIgSW5leGFjdCBSb3VuZGVkCisKKy0tIGdlbmVyYWwgdGVzdHMgLi4KK2RkcXVhMDg5IHF1YW50aXplIDEyICAgICAxZSs0ICAgLT4gMEUrNCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDkwIHF1YW50aXplIDEyICAgICAxZSszICAgLT4gMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDkxIHF1YW50aXplIDEyICAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDkyIHF1YW50aXplIDEyICAgICAxZSsxICAgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDkzIHF1YW50aXplIDEuMjM0NSAxZS0yICAgLT4gMS4yMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDk0IHF1YW50aXplIDEuMjM1NSAxZS0yICAgLT4gMS4yNCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDk1IHF1YW50aXplIDEuMjM0NSAxZS02ICAgLT4gMS4yMzQ1MDAKK2RkcXVhMDk2IHF1YW50aXplIDkuOTk5OSAxZS0yICAgLT4gMTAuMDAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5NyBxdWFudGl6ZSAwLjAwMDEgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5OCBxdWFudGl6ZSAwLjAwMSAgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5OSBxdWFudGl6ZSAwLjAwOSAgMWUtMiAgIC0+IDAuMDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEwMCBxdWFudGl6ZSA5MiAgICAgMWUrMiAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMTAxIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gIC0xCitkZHF1YTEwMiBxdWFudGl6ZSAtMSAgICAgMWUtMSAgIC0+ICAtMS4wCitkZHF1YTEwMyBxdWFudGl6ZSAtMSAgICAgMWUtMiAgIC0+ICAtMS4wMAorZGRxdWExMDQgcXVhbnRpemUgIDAgICAgICAxZTAgICAtPiAgMAorZGRxdWExMDUgcXVhbnRpemUgIDAgICAgIDFlLTEgICAtPiAgMC4wCitkZHF1YTEwNiBxdWFudGl6ZSAgMCAgICAgMWUtMiAgIC0+ICAwLjAwCitkZHF1YTEwNyBxdWFudGl6ZSAgMC4wMCAgIDFlMCAgIC0+ICAwCitkZHF1YTEwOCBxdWFudGl6ZSAgMCAgICAgMWUrMSAgIC0+ICAwRSsxCitkZHF1YTEwOSBxdWFudGl6ZSAgMCAgICAgMWUrMiAgIC0+ICAwRSsyCitkZHF1YTExMCBxdWFudGl6ZSArMSAgICAgIDFlMCAgIC0+ICAxCitkZHF1YTExMSBxdWFudGl6ZSArMSAgICAgMWUtMSAgIC0+ICAxLjAKK2RkcXVhMTEyIHF1YW50aXplICsxICAgICAxZS0yICAgLT4gIDEuMDAKKworZGRxdWExMjAgcXVhbnRpemUgICAxLjA0ICAxZS0zIC0+ICAxLjA0MAorZGRxdWExMjEgcXVhbnRpemUgICAxLjA0ICAxZS0yIC0+ICAxLjA0CitkZHF1YTEyMiBxdWFudGl6ZSAgIDEuMDQgIDFlLTEgLT4gIDEuMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIzIHF1YW50aXplICAgMS4wNCAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTI0IHF1YW50aXplICAgMS4wNSAgMWUtMyAtPiAgMS4wNTAKK2RkcXVhMTI1IHF1YW50aXplICAgMS4wNSAgMWUtMiAtPiAgMS4wNQorZGRxdWExMjYgcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMSBxdWFudGl6ZSAgIDEuMDUgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMiBxdWFudGl6ZSAgIDEuMDYgIDFlLTMgLT4gIDEuMDYwCitkZHF1YTEzMyBxdWFudGl6ZSAgIDEuMDYgIDFlLTIgLT4gIDEuMDYKK2RkcXVhMTM0IHF1YW50aXplICAgMS4wNiAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzUgcXVhbnRpemUgICAxLjA2ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTE0MCBxdWFudGl6ZSAgIC0xMCAgICAxZS0yICAtPiAgLTEwLjAwCitkZHF1YTE0MSBxdWFudGl6ZSAgICsxICAgICAxZS0yICAtPiAgMS4wMAorZGRxdWExNDIgcXVhbnRpemUgICArMTAgICAgMWUtMiAgLT4gIDEwLjAwCitkZHF1YTE0MyBxdWFudGl6ZSAgIDFFKzE3ICAxZS0yICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTE0NCBxdWFudGl6ZSAgIDFFLTE3ICAxZS0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQ1IHF1YW50aXplICAgMUUtMyAgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDYgcXVhbnRpemUgICAxRS0yICAgMWUtMiAgLT4gIDAuMDEKK2RkcXVhMTQ3IHF1YW50aXplICAgMUUtMSAgIDFlLTIgIC0+ICAwLjEwCitkZHF1YTE0OCBxdWFudGl6ZSAgIDBFLTE3ICAxZS0yICAtPiAgMC4wMAorCitkZHF1YTE1MCBxdWFudGl6ZSAgIDEuMDYwMCAxZS01IC0+ICAxLjA2MDAwCitkZHF1YTE1MSBxdWFudGl6ZSAgIDEuMDYwMCAxZS00IC0+ICAxLjA2MDAKK2RkcXVhMTUyIHF1YW50aXplICAgMS4wNjAwIDFlLTMgLT4gIDEuMDYwIFJvdW5kZWQKK2RkcXVhMTUzIHF1YW50aXplICAgMS4wNjAwIDFlLTIgLT4gIDEuMDYgUm91bmRlZAorZGRxdWExNTQgcXVhbnRpemUgICAxLjA2MDAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTUgcXVhbnRpemUgICAxLjA2MDAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gYSBjb3VwbGUgd2hlcmUgcm91bmRpbmcgd2FzIGRpZmZlcmVudCBpbiBiYXNlIHRlc3RzCityb3VuZGluZzogICAgaGFsZl91cAorZGRxdWExNTcgcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTU4IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTkgcXVhbnRpemUgICAxLjA2ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBiYXNlIHRlc3RzIHdpdGggbm9uLTEgY29lZmZpY2llbnRzCitkZHF1YTE2MSBxdWFudGl6ZSAwICAgICAgLTllMCAgIC0+IDAKK2RkcXVhMTYyIHF1YW50aXplIDEgICAgICAtN2UwICAgLT4gMQorZGRxdWExNjMgcXVhbnRpemUgMC4xICAgLTFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjUgcXVhbnRpemUgMC4xICAgIDBlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjYgcXVhbnRpemUgMC4xICAgICAyZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjcgcXVhbnRpemUgMC4xICAgIDNlLTEgICAtPiAwLjEKK2RkcXVhMTY4IHF1YW50aXplIDAuMSAgIDQ0ZS0yICAgLT4gMC4xMAorZGRxdWExNjkgcXVhbnRpemUgMC4xICA1NTVlLTMgICAtPiAwLjEwMAorZGRxdWExNzAgcXVhbnRpemUgMC45IDY2NjZlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzEgcXVhbnRpemUgMC45IC03NzdlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzIgcXVhbnRpemUgMC45ICAtODhlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzMgcXVhbnRpemUgMC45ICAgLTllLTEgICAtPiAwLjkKK2RkcXVhMTc0IHF1YW50aXplIDAuOSAgICAwZS0yICAgLT4gMC45MAorZGRxdWExNzUgcXVhbnRpemUgMC45ICAxLjFlLTMgICAtPiAwLjkwMDAKKy0tIG5lZ2F0aXZlcworZGRxdWExODEgcXVhbnRpemUgLTAgICAgMS4xZTAgICAtPiAtMC4wCitkZHF1YTE4MiBxdWFudGl6ZSAtMSAgICAgLTFlMCAgIC0+IC0xCitkZHF1YTE4MyBxdWFudGl6ZSAtMC4xICAxMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWExODUgcXVhbnRpemUgLTAuMSAxMTFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTg2IHF1YW50aXplIC0wLjEgICA3MWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4NyBxdWFudGl6ZSAtMC4xIC05MWUtMSAgIC0+IC0wLjEKK2RkcXVhMTg4IHF1YW50aXplIC0wLjEgLS4xZS0yICAgLT4gLTAuMTAwCitkZHF1YTE4OSBxdWFudGl6ZSAtMC4xICAtMWUtMyAgIC0+IC0wLjEwMAorZGRxdWExOTAgcXVhbnRpemUgLTAuOSAgIDBlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkxIHF1YW50aXplIC0wLjkgIC0wZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MiBxdWFudGl6ZSAtMC45IC0xMGUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTMgcXVhbnRpemUgLTAuOSAxMDBlLTEgICAtPiAtMC45CitkZHF1YTE5NCBxdWFudGl6ZSAtMC45IDk5OWUtMiAgIC0+IC0wLjkwCisKKy0tICt2ZSBleHBvbmVudHMgLi4KK2RkcXVhMjAxIHF1YW50aXplICAgLTEgICAxZSswIC0+ICAtMQorZGRxdWEyMDIgcXVhbnRpemUgICAtMSAgIDFlKzEgLT4gIC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDMgcXVhbnRpemUgICAtMSAgIDFlKzIgLT4gIC0wRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDQgcXVhbnRpemUgICAgMCAgIDFlKzAgLT4gIDAKK2RkcXVhMjA1IHF1YW50aXplICAgIDAgICAxZSsxIC0+ICAwRSsxCitkZHF1YTIwNiBxdWFudGl6ZSAgICAwICAgMWUrMiAtPiAgMEUrMgorZGRxdWEyMDcgcXVhbnRpemUgICArMSAgIDFlKzAgLT4gIDEKK2RkcXVhMjA4IHF1YW50aXplICAgKzEgICAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDkgcXVhbnRpemUgICArMSAgIDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMjIwIHF1YW50aXplICAgMS4wNCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjEgcXVhbnRpemUgICAxLjA0IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMiBxdWFudGl6ZSAgIDEuMDQgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIzIHF1YW50aXplICAgMS4wNCAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjQgcXVhbnRpemUgICAxLjA1IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyNSBxdWFudGl6ZSAgIDEuMDUgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjI2IHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjcgcXVhbnRpemUgICAxLjA1IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyOCBxdWFudGl6ZSAgIDEuMDUgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjI5IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzAgcXVhbnRpemUgICAxLjA1IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMSBxdWFudGl6ZSAgIDEuMDUgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMyIHF1YW50aXplICAgMS4wNiAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzMgcXVhbnRpemUgICAxLjA2IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzNCBxdWFudGl6ZSAgIDEuMDYgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjM1IHF1YW50aXplICAgMS4wNiAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTI0MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzEgIC0+ICAtMUUrMSBSb3VuZGVkCitkZHF1YTI0MSBxdWFudGl6ZSAgICsxICAgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNDIgcXVhbnRpemUgICArMTAgICAxZSsxICAtPiAgMUUrMSBSb3VuZGVkCitkZHF1YTI0MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzEgIC0+ICAxRSsxICAgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjQ0IHF1YW50aXplICAgMUUrMiAgMWUrMSAgLT4gIDEuMEUrMiAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZGRxdWEyNDUgcXVhbnRpemUgICAxRSszICAxZSsxICAtPiAgMS4wMEUrMyAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI0NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzEgIC0+ICAxLjAwMEUrNCAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjQ3IHF1YW50aXplICAgMUUrNSAgMWUrMSAgLT4gIDEuMDAwMEUrNSAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZGRxdWEyNDggcXVhbnRpemUgICAxRSs2ICAxZSsxICAtPiAgMS4wMDAwMEUrNiAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI0OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzEgIC0+ICAxLjAwMDAwMEUrNyAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjUwIHF1YW50aXplICAgMUUrOCAgMWUrMSAgLT4gIDEuMDAwMDAwMEUrOCAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZGRxdWEyNTEgcXVhbnRpemUgICAxRSs5ICAxZSsxICAtPiAgMS4wMDAwMDAwMEUrOSAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCistLSBuZXh0IG9uZSB0cmllcyB0byBhZGQgOSB6ZXJvcworZGRxdWEyNTIgcXVhbnRpemUgICAxRSsxNyAxZSsxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTI1MyBxdWFudGl6ZSAgIDFFLTE3IDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNTQgcXVhbnRpemUgICAxRS0yICAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjU1IHF1YW50aXplICAgMEUtMTcgMWUrMSAgLT4gIDBFKzEKK2RkcXVhMjU2IHF1YW50aXplICAtMEUtMTcgMWUrMSAgLT4gLTBFKzEKK2RkcXVhMjU3IHF1YW50aXplICAtMEUtMSAgMWUrMSAgLT4gLTBFKzEKK2RkcXVhMjU4IHF1YW50aXplICAtMCAgICAgMWUrMSAgLT4gLTBFKzEKK2RkcXVhMjU5IHF1YW50aXplICAtMEUrMSAgMWUrMSAgLT4gLTBFKzEKKworZGRxdWEyNjAgcXVhbnRpemUgICAtMTAgICAxZSsyICAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI2MSBxdWFudGl6ZSAgICsxICAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNjIgcXVhbnRpemUgICArMTAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjYzIHF1YW50aXplICAgMUUrMSAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI2NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzIgIC0+ICAxRSsyCitkZHF1YTI2NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzIgIC0+ICAxLjBFKzMKK2RkcXVhMjY2IHF1YW50aXplICAgMUUrNCAgMWUrMiAgLT4gIDEuMDBFKzQKK2RkcXVhMjY3IHF1YW50aXplICAgMUUrNSAgMWUrMiAgLT4gIDEuMDAwRSs1CitkZHF1YTI2OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzIgIC0+ICAxLjAwMDBFKzYKK2RkcXVhMjY5IHF1YW50aXplICAgMUUrNyAgMWUrMiAgLT4gIDEuMDAwMDBFKzcKK2RkcXVhMjcwIHF1YW50aXplICAgMUUrOCAgMWUrMiAgLT4gIDEuMDAwMDAwRSs4CitkZHF1YTI3MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzIgIC0+ICAxLjAwMDAwMDBFKzkKK2RkcXVhMjcyIHF1YW50aXplICAgMUUrMTAgMWUrMiAgLT4gIDEuMDAwMDAwMDBFKzEwCitkZHF1YTI3MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNzQgcXVhbnRpemUgICAxRS0yICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjc1IHF1YW50aXplICAgMEUtMTAgMWUrMiAgLT4gIDBFKzIKKworZGRxdWEyODAgcXVhbnRpemUgICAtMTAgICAxZSszICAtPiAgLTBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI4MSBxdWFudGl6ZSAgICsxICAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyODIgcXVhbnRpemUgICArMTAgICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjgzIHF1YW50aXplICAgMUUrMSAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI4NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyODUgcXVhbnRpemUgICAxRSszICAxZSszICAtPiAgMUUrMworZGRxdWEyODYgcXVhbnRpemUgICAxRSs0ICAxZSszICAtPiAgMS4wRSs0CitkZHF1YTI4NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzMgIC0+ICAxLjAwRSs1CitkZHF1YTI4OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzMgIC0+ICAxLjAwMEUrNgorZGRxdWEyODkgcXVhbnRpemUgICAxRSs3ICAxZSszICAtPiAgMS4wMDAwRSs3CitkZHF1YTI5MCBxdWFudGl6ZSAgIDFFKzggIDFlKzMgIC0+ICAxLjAwMDAwRSs4CitkZHF1YTI5MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzMgIC0+ICAxLjAwMDAwMEUrOQorZGRxdWEyOTIgcXVhbnRpemUgICAxRSsxMCAxZSszICAtPiAgMS4wMDAwMDAwRSsxMAorZGRxdWEyOTMgcXVhbnRpemUgICAxRS0xMCAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjk0IHF1YW50aXplICAgMUUtMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI5NSBxdWFudGl6ZSAgIDBFLTEwIDFlKzMgIC0+ICAwRSszCisKKy0tIHJvdW5kIHVwIGZyb20gYmVsb3cgW3NpZ24gd3JvbmcgaW4gSklUIGNvbXBpbGVyIG9uY2VdCitkZHF1YTMwMCBxdWFudGl6ZSAgIDAuMDA3OCAxZS01IC0+ICAwLjAwNzgwCitkZHF1YTMwMSBxdWFudGl6ZSAgIDAuMDA3OCAxZS00IC0+ICAwLjAwNzgKK2RkcXVhMzAyIHF1YW50aXplICAgMC4wMDc4IDFlLTMgLT4gIDAuMDA4IEluZXhhY3QgUm91bmRlZAorZGRxdWEzMDMgcXVhbnRpemUgICAwLjAwNzggMWUtMiAtPiAgMC4wMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzA0IHF1YW50aXplICAgMC4wMDc4IDFlLTEgLT4gIDAuMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzA1IHF1YW50aXplICAgMC4wMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMwNiBxdWFudGl6ZSAgIDAuMDA3OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMDcgcXVhbnRpemUgICAwLjAwNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEzMTAgcXVhbnRpemUgIC0wLjAwNzggMWUtNSAtPiAtMC4wMDc4MAorZGRxdWEzMTEgcXVhbnRpemUgIC0wLjAwNzggMWUtNCAtPiAtMC4wMDc4CitkZHF1YTMxMiBxdWFudGl6ZSAgLTAuMDA3OCAxZS0zIC0+IC0wLjAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzEzIHF1YW50aXplICAtMC4wMDc4IDFlLTIgLT4gLTAuMDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMxNCBxdWFudGl6ZSAgLTAuMDA3OCAxZS0xIC0+IC0wLjAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMxNSBxdWFudGl6ZSAgLTAuMDA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMTYgcXVhbnRpemUgIC0wLjAwNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzE3IHF1YW50aXplICAtMC4wMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMzIwIHF1YW50aXplICAgMC4wNzggMWUtNSAtPiAgMC4wNzgwMAorZGRxdWEzMjEgcXVhbnRpemUgICAwLjA3OCAxZS00IC0+ICAwLjA3ODAKK2RkcXVhMzIyIHF1YW50aXplICAgMC4wNzggMWUtMyAtPiAgMC4wNzgKK2RkcXVhMzIzIHF1YW50aXplICAgMC4wNzggMWUtMiAtPiAgMC4wOCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzI0IHF1YW50aXplICAgMC4wNzggMWUtMSAtPiAgMC4xIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMjUgcXVhbnRpemUgICAwLjA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMjYgcXVhbnRpemUgICAwLjA3OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMjcgcXVhbnRpemUgICAwLjA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTMzMCBxdWFudGl6ZSAgLTAuMDc4IDFlLTUgLT4gLTAuMDc4MDAKK2RkcXVhMzMxIHF1YW50aXplICAtMC4wNzggMWUtNCAtPiAtMC4wNzgwCitkZHF1YTMzMiBxdWFudGl6ZSAgLTAuMDc4IDFlLTMgLT4gLTAuMDc4CitkZHF1YTMzMyBxdWFudGl6ZSAgLTAuMDc4IDFlLTIgLT4gLTAuMDggSW5leGFjdCBSb3VuZGVkCitkZHF1YTMzNCBxdWFudGl6ZSAgLTAuMDc4IDFlLTEgLT4gLTAuMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzM1IHF1YW50aXplICAtMC4wNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzM2IHF1YW50aXplICAtMC4wNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzM3IHF1YW50aXplICAtMC4wNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEzNDAgcXVhbnRpemUgICAwLjc4IDFlLTUgLT4gIDAuNzgwMDAKK2RkcXVhMzQxIHF1YW50aXplICAgMC43OCAxZS00IC0+ICAwLjc4MDAKK2RkcXVhMzQyIHF1YW50aXplICAgMC43OCAxZS0zIC0+ICAwLjc4MAorZGRxdWEzNDMgcXVhbnRpemUgICAwLjc4IDFlLTIgLT4gIDAuNzgKK2RkcXVhMzQ0IHF1YW50aXplICAgMC43OCAxZS0xIC0+ICAwLjggSW5leGFjdCBSb3VuZGVkCitkZHF1YTM0NSBxdWFudGl6ZSAgIDAuNzggIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzQ2IHF1YW50aXplICAgMC43OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzNDcgcXVhbnRpemUgICAwLjc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMzUwIHF1YW50aXplICAtMC43OCAxZS01IC0+IC0wLjc4MDAwCitkZHF1YTM1MSBxdWFudGl6ZSAgLTAuNzggMWUtNCAtPiAtMC43ODAwCitkZHF1YTM1MiBxdWFudGl6ZSAgLTAuNzggMWUtMyAtPiAtMC43ODAKK2RkcXVhMzUzIHF1YW50aXplICAtMC43OCAxZS0yIC0+IC0wLjc4CitkZHF1YTM1NCBxdWFudGl6ZSAgLTAuNzggMWUtMSAtPiAtMC44IEluZXhhY3QgUm91bmRlZAorZGRxdWEzNTUgcXVhbnRpemUgIC0wLjc4ICAxZTAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM1NiBxdWFudGl6ZSAgLTAuNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzU3IHF1YW50aXplICAtMC43OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTM2MCBxdWFudGl6ZSAgIDcuOCAxZS01IC0+ICA3LjgwMDAwCitkZHF1YTM2MSBxdWFudGl6ZSAgIDcuOCAxZS00IC0+ICA3LjgwMDAKK2RkcXVhMzYyIHF1YW50aXplICAgNy44IDFlLTMgLT4gIDcuODAwCitkZHF1YTM2MyBxdWFudGl6ZSAgIDcuOCAxZS0yIC0+ICA3LjgwCitkZHF1YTM2NCBxdWFudGl6ZSAgIDcuOCAxZS0xIC0+ICA3LjgKK2RkcXVhMzY1IHF1YW50aXplICAgNy44ICAxZTAgLT4gIDggSW5leGFjdCBSb3VuZGVkCitkZHF1YTM2NiBxdWFudGl6ZSAgIDcuOCAxZSsxIC0+ICAxRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzNjcgcXVhbnRpemUgICA3LjggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzY4IHF1YW50aXplICAgNy44IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMzcwIHF1YW50aXplICAtNy44IDFlLTUgLT4gLTcuODAwMDAKK2RkcXVhMzcxIHF1YW50aXplICAtNy44IDFlLTQgLT4gLTcuODAwMAorZGRxdWEzNzIgcXVhbnRpemUgIC03LjggMWUtMyAtPiAtNy44MDAKK2RkcXVhMzczIHF1YW50aXplICAtNy44IDFlLTIgLT4gLTcuODAKK2RkcXVhMzc0IHF1YW50aXplICAtNy44IDFlLTEgLT4gLTcuOAorZGRxdWEzNzUgcXVhbnRpemUgIC03LjggIDFlMCAtPiAtOCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzc2IHF1YW50aXplICAtNy44IDFlKzEgLT4gLTFFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM3NyBxdWFudGl6ZSAgLTcuOCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEzNzggcXVhbnRpemUgIC03LjggMWUrMyAtPiAtMEUrMyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBpbmRpdmlkdWFscworZGRxdWEzODAgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0LjUwNiAxZS0yIC0+IDEyMzQ1NjczNTIzNjQuNTEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM4MSBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gMTIzNDU2NzM1MjM2NDUuMDYKK2RkcXVhMzgyIHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMzgzIHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMzg0IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAtMTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzg1IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NDUuMDYgMWUtMiAtPiAtMTIzNDU2NzM1MjM2NDUuMDYKK2RkcXVhMzg2IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMzg3IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcm91bmRpbmc6IGRvd24KK2RkcXVhMzg5IHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tID8gc2hvdWxkIHRoYXQgb25lIGluc3RlYWQgaGF2ZSBiZWVuOgorLS0gZGRxdWEzODkgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm91bmRpbmc6IGhhbGZfdXAKKworLS0gYW5kIGEgZmV3IG1vcmUgZnJvbSBlLW1haWwgZGlzY3Vzc2lvbnMKK2RkcXVhMzkxIHF1YW50aXplICAxMjM0NTY3ODkxMi4zNDU2NyAgMWUtMyAtPiAxMjM0NTY3ODkxMi4zNDYgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzkyIHF1YW50aXplICAxMjM0NTY3ODkxMjMuNDU2NyAgMWUtMyAtPiAxMjM0NTY3ODkxMjMuNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzkzIHF1YW50aXplICAxMjM0NTY3ODkxMjM0LjU2NyAgMWUtMyAtPiAxMjM0NTY3ODkxMjM0LjU2NworZGRxdWEzOTQgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQ1LjY3ICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEzOTUgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQ1Ni43ICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEzOTYgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQ1NjcuICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzb21lIDk5OTkgcm91bmQtdXAgY2FzZXMKK2RkcXVhNDAwIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTUgIC0+ICA5Ljk5OTAwCitkZHF1YTQwMSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS00ICAtPiAgOS45OTkwCitkZHF1YTQwMiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0zICAtPiAgOS45OTkKK2RkcXVhNDAzIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTIgIC0+IDEwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDA0IHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTEgIC0+IDEwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDA1IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTAgIC0+IDEwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDA2IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTEgIC0+IDFFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDA3IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTIgIC0+IDBFKzIgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE0MTAgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtNSAgLT4gIDAuOTk5MDAKK2RkcXVhNDExIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTQgIC0+ICAwLjk5OTAKK2RkcXVhNDEyIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTMgIC0+ICAwLjk5OQorZGRxdWE0MTMgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMiAgLT4gIDEuMDAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MTQgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMSAgLT4gIDEuMCAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MTUgcXVhbnRpemUgICAwLjk5OSAgICAgICAgIDFlMCAgLT4gIDEgICAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MTYgcXVhbnRpemUgICAwLjk5OSAgICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTQyMCBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS01ICAtPiAgMC4wOTk5MAorZGRxdWE0MjEgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNCAgLT4gIDAuMDk5OQorZGRxdWE0MjIgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMyAgLT4gIDAuMTAwICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MjMgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMiAgLT4gIDAuMTAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MjQgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMSAgLT4gIDAuMSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MjUgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MjYgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTQzMCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS01ICAtPiAgMC4wMDk5OQorZGRxdWE0MzEgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNCAgLT4gIDAuMDEwMCAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MzIgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMyAgLT4gIDAuMDEwICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MzMgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMiAgLT4gIDAuMDEgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MzQgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MzUgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MzYgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTQ0MCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS01ICAtPiAgMC4wMDEwMCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ0MSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS00ICAtPiAgMC4wMDEwICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ0MiBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0zICAtPiAgMC4wMDEgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ0MyBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0yICAtPiAgMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ0NCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ0NSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ0NiBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMTAwMSBxdWFudGl6ZSAgMC4wMDAgICAgICAgIDAuMDAxIC0+ICAwLjAwMAorZGRxdWExMDAyIHF1YW50aXplICAwLjAwMSAgICAgICAgMC4wMDEgLT4gIDAuMDAxCitkZHF1YTEwMDMgcXVhbnRpemUgIDAuMDAxMiAgICAgICAwLjAwMSAtPiAgMC4wMDEgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMDA0IHF1YW50aXplICAwLjAwMTggICAgICAgMC4wMDEgLT4gIDAuMDAyICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTAwNSBxdWFudGl6ZSAgMC41MDEgICAgICAgIDAuMDAxIC0+ICAwLjUwMQorZGRxdWExMDA2IHF1YW50aXplICAwLjUwMTIgICAgICAgMC4wMDEgLT4gIDAuNTAxICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTAwNyBxdWFudGl6ZSAgMC41MDE4ICAgICAgIDAuMDAxIC0+ICAwLjUwMiAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEwMDggcXVhbnRpemUgIDAuOTk5ICAgICAgICAwLjAwMSAtPiAgMC45OTkKKworZGRxdWE0ODEgcXVhbnRpemUgMTIzNDU2NzgwMDAgMWUrMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQKK2RkcXVhNDgyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitkZHF1YTQ4MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorZGRxdWE0ODQgcXVhbnRpemUgMTIzNDU2Nzg5MSAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZGRxdWE0ODUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDg2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKKy0tIGEgcG90ZW50aWFsIGRvdWJsZS1yb3VuZAorZGRxdWE0ODcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ4OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE0OTEgcXVhbnRpemUgMTIzNDU2NzgwMDAgMWUrMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQKK2RkcXVhNDkyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitkZHF1YTQ5MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorZGRxdWE0OTQgcXVhbnRpemUgMTIzNDU2Nzg5MSAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZGRxdWE0OTUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDk2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDk3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorZGRxdWE0OTggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCisKKy0tIFplcm9zCitkZHF1YTUwMCBxdWFudGl6ZSAgIDAgICAgIDFlMSAtPiAgMEUrMQorZGRxdWE1MDEgcXVhbnRpemUgICAwICAgICAxZTAgLT4gIDAKK2RkcXVhNTAyIHF1YW50aXplICAgMCAgICAxZS0xIC0+ICAwLjAKK2RkcXVhNTAzIHF1YW50aXplICAgMC4wICAxZS0xIC0+ICAwLjAKK2RkcXVhNTA0IHF1YW50aXplICAgMC4wICAgMWUwIC0+ICAwCitkZHF1YTUwNSBxdWFudGl6ZSAgIDAuMCAgMWUrMSAtPiAgMEUrMQorZGRxdWE1MDYgcXVhbnRpemUgICAwRSsxIDFlLTEgLT4gIDAuMAorZGRxdWE1MDcgcXVhbnRpemUgICAwRSsxICAxZTAgLT4gIDAKK2RkcXVhNTA4IHF1YW50aXplICAgMEUrMSAxZSsxIC0+ICAwRSsxCitkZHF1YTUwOSBxdWFudGl6ZSAgLTAgICAgIDFlMSAtPiAtMEUrMQorZGRxdWE1MTAgcXVhbnRpemUgIC0wICAgICAxZTAgLT4gLTAKK2RkcXVhNTExIHF1YW50aXplICAtMCAgICAxZS0xIC0+IC0wLjAKK2RkcXVhNTEyIHF1YW50aXplICAtMC4wICAxZS0xIC0+IC0wLjAKK2RkcXVhNTEzIHF1YW50aXplICAtMC4wICAgMWUwIC0+IC0wCitkZHF1YTUxNCBxdWFudGl6ZSAgLTAuMCAgMWUrMSAtPiAtMEUrMQorZGRxdWE1MTUgcXVhbnRpemUgIC0wRSsxIDFlLTEgLT4gLTAuMAorZGRxdWE1MTYgcXVhbnRpemUgIC0wRSsxICAxZTAgLT4gLTAKK2RkcXVhNTE3IHF1YW50aXplICAtMEUrMSAxZSsxIC0+IC0wRSsxCisKKy0tIFN1c3BpY2lvdXMgUkhTIHZhbHVlcworZGRxdWE1MjAgcXVhbnRpemUgICAxLjIzNCAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCitkZHF1YTUyMSBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNTIyIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorZGRxdWE1MjMgcXVhbnRpemUgMTIzLjQ1NiAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IGZvdXIgYXJlICJ3b24ndCBmaXQiIG92ZXJmbAorZGRxdWE1MjYgcXVhbnRpemUgICAxLjIzNCAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTI3IHF1YW50aXplIDEyMy40NTYgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTUyOCBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1MjkgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRxdWE1MzIgcXVhbnRpemUgICAxLjIzNEUrMjk5ICAgIDFlMjk5IC0+IDFFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNTMzIHF1YW50aXplICAgMS4yMzRFKzI5OCAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTUzNCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAgMWUyOTkgLT4gMEUrMjk5ICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE1MzcgcXVhbnRpemUgICAwICAgICAgICAgICAgMWUtMjk5IC0+IDBFLTI5OQorLS0gbmV4dCB0d28gYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cworZGRxdWE1MzggcXVhbnRpemUgICAxLjIzNCAgICAgICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1MzkgcXVhbnRpemUgICAxLjIzNCAgICAgICAgMWUtMzAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gW21vcmUgYmVsb3ddCisKKy0tIFNwZWNpYWxzCitkZHF1YTU4MCBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RkcXVhNTgxIHF1YW50aXplICBJbmYgIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU4MiBxdWFudGl6ZSAgSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1ODMgcXVhbnRpemUgIEluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTg0IHF1YW50aXplICBJbmYgICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU4NSBxdWFudGl6ZSAgSW5mICAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1ODYgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZHF1YTU4NyBxdWFudGl6ZSAtMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1ODggcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQorZGRxdWE1ODkgcXVhbnRpemUgLTEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTkwIHF1YW50aXplICAwICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU5MSBxdWFudGl6ZSAgMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1OTIgcXVhbnRpemUgIDEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTkzIHF1YW50aXplICBJbmYgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRxdWE1OTQgcXVhbnRpemUgIEluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTk1IHF1YW50aXplIC0wICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RkcXVhNjAwIHF1YW50aXplIC1JbmYgICAgLUluZiAgIC0+ICAtSW5maW5pdHkKK2RkcXVhNjAxIHF1YW50aXplIC1JbmYgIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYwMiBxdWFudGl6ZSAtSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MDMgcXVhbnRpemUgLUluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjA0IHF1YW50aXplIC1JbmYgICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYwNSBxdWFudGl6ZSAtSW5mICAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MDYgcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQorZGRxdWE2MDcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjA4IHF1YW50aXplIC1JbmYgICAgLUluZiAgIC0+ICAtSW5maW5pdHkKK2RkcXVhNjA5IHF1YW50aXplIC0xICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYxMCBxdWFudGl6ZSAgMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MTEgcXVhbnRpemUgIDEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjEyIHF1YW50aXplICAxMDAwICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYxMyBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RkcXVhNjE0IHF1YW50aXplIC1JbmYgIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYxNSBxdWFudGl6ZSAtMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkZHF1YTYyMSBxdWFudGl6ZSAgTmFOICAgLUluZiAgICAtPiAgTmFOCitkZHF1YTYyMiBxdWFudGl6ZSAgTmFOIDFlLTI5OSAgICAtPiAgTmFOCitkZHF1YTYyMyBxdWFudGl6ZSAgTmFOIDFlLTEgICAgICAtPiAgTmFOCitkZHF1YTYyNCBxdWFudGl6ZSAgTmFOICAxZTAgICAgICAtPiAgTmFOCitkZHF1YTYyNSBxdWFudGl6ZSAgTmFOICAxZTEgICAgICAtPiAgTmFOCitkZHF1YTYyNiBxdWFudGl6ZSAgTmFOICAxZTI5OSAgICAtPiAgTmFOCitkZHF1YTYyNyBxdWFudGl6ZSAgTmFOICAgIEluZiAgICAtPiAgTmFOCitkZHF1YTYyOCBxdWFudGl6ZSAgTmFOICAgIE5hTiAgICAtPiAgTmFOCitkZHF1YTYyOSBxdWFudGl6ZSAtSW5mICAgIE5hTiAgICAtPiAgTmFOCitkZHF1YTYzMCBxdWFudGl6ZSAtMTAwMCAgIE5hTiAgICAtPiAgTmFOCitkZHF1YTYzMSBxdWFudGl6ZSAtMSAgICAgIE5hTiAgICAtPiAgTmFOCitkZHF1YTYzMiBxdWFudGl6ZSAgMCAgICAgIE5hTiAgICAtPiAgTmFOCitkZHF1YTYzMyBxdWFudGl6ZSAgMSAgICAgIE5hTiAgICAtPiAgTmFOCitkZHF1YTYzNCBxdWFudGl6ZSAgMTAwMCAgIE5hTiAgICAtPiAgTmFOCitkZHF1YTYzNSBxdWFudGl6ZSAgSW5mICAgIE5hTiAgICAtPiAgTmFOCitkZHF1YTYzNiBxdWFudGl6ZSAgTmFOIDFlLTAgICAgICAtPiAgTmFOCitkZHF1YTYzNyBxdWFudGl6ZSAtMCAgICAgIE5hTiAgICAtPiAgTmFOCisKK2RkcXVhNjQxIHF1YW50aXplICBzTmFOICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY0MiBxdWFudGl6ZSAgc05hTiAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDMgcXVhbnRpemUgIHNOYU4gMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQ0IHF1YW50aXplICBzTmFOICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY0NSBxdWFudGl6ZSAgc05hTiAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDYgcXVhbnRpemUgIHNOYU4gIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQ3IHF1YW50aXplICBzTmFOICAgIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY0OCBxdWFudGl6ZSAgc05hTiAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDkgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjUwIHF1YW50aXplIC1JbmYgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1MSBxdWFudGl6ZSAtMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTIgcXVhbnRpemUgLTEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjUzIHF1YW50aXplICAwICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1NCBxdWFudGl6ZSAgMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTUgcXVhbnRpemUgIDEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjU2IHF1YW50aXplICBJbmYgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1NyBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTggcXVhbnRpemUgIHNOYU4gMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjU5IHF1YW50aXplIC0wICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkcXVhNjYxIHF1YW50aXplICBOYU45IC1JbmYgICAtPiAgTmFOOQorZGRxdWE2NjIgcXVhbnRpemUgIE5hTjggIDkxOSAgIC0+ICBOYU44CitkZHF1YTY2MyBxdWFudGl6ZSAgTmFONzEgSW5mICAgLT4gIE5hTjcxCitkZHF1YTY2NCBxdWFudGl6ZSAgTmFONiAgTmFONSAgLT4gIE5hTjYKK2RkcXVhNjY1IHF1YW50aXplIC1JbmYgICBOYU40ICAtPiAgTmFONAorZGRxdWE2NjYgcXVhbnRpemUgLTkxOSAgIE5hTjMxIC0+ICBOYU4zMQorZGRxdWE2NjcgcXVhbnRpemUgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK2RkcXVhNjcxIHF1YW50aXplICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjcyIHF1YW50aXplICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjczIHF1YW50aXplICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjc0IHF1YW50aXplICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjc1IHF1YW50aXplICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjc2IHF1YW50aXplIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjc3IHF1YW50aXplICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjc4IHF1YW50aXplICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjc5IHF1YW50aXplICBOYU4gICAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworZGRxdWE2ODEgcXVhbnRpemUgLU5hTjkgLUluZiAgIC0+IC1OYU45CitkZHF1YTY4MiBxdWFudGl6ZSAtTmFOOCAgOTE5ICAgLT4gLU5hTjgKK2RkcXVhNjgzIHF1YW50aXplIC1OYU43MSBJbmYgICAtPiAtTmFONzEKK2RkcXVhNjg0IHF1YW50aXplIC1OYU42IC1OYU41ICAtPiAtTmFONgorZGRxdWE2ODUgcXVhbnRpemUgLUluZiAgLU5hTjQgIC0+IC1OYU40CitkZHF1YTY4NiBxdWFudGl6ZSAtOTE5ICAtTmFOMzEgLT4gLU5hTjMxCitkZHF1YTY4NyBxdWFudGl6ZSAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworZGRxdWE2OTEgcXVhbnRpemUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2OTIgcXVhbnRpemUgLXNOYU45OCAtMTEgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2OTMgcXVhbnRpemUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2OTQgcXVhbnRpemUgLXNOYU4xNiBzTmFOOTQgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2OTUgcXVhbnRpemUgLU5hTjk1IC1zTmFOOTMgIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2OTYgcXVhbnRpemUgLUluZiAgIC1zTmFOOTIgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2OTcgcXVhbnRpemUgIDA4OCAgIC1zTmFOOTEgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2OTggcXVhbnRpemUgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2OTkgcXVhbnRpemUgIE5hTiAgIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK2RkcXVhNzEwIHF1YW50aXplICAxLjAwRS0zODMgICAgMWUtMzgzICAtPiAgIDFFLTM4MyAgICBSb3VuZGVkCitkZHF1YTcxMSBxdWFudGl6ZSAgMC4xRS0zODMgICAgMmUtMzg0ICAtPiAgIDFFLTM4NCAgIFN1Ym5vcm1hbAorZGRxdWE3MTIgcXVhbnRpemUgIDAuMTBFLTM4MyAgIDNlLTM4NCAgLT4gICAxRS0zODQgICBTdWJub3JtYWwgUm91bmRlZAorZGRxdWE3MTMgcXVhbnRpemUgIDAuMTAwRS0zODMgIDRlLTM4NCAgLT4gICAxRS0zODQgICBTdWJub3JtYWwgUm91bmRlZAorZGRxdWE3MTQgcXVhbnRpemUgIDAuMDFFLTM4MyAgIDVlLTM4NSAgLT4gICAxRS0zODUgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitkZHF1YTcxNSBxdWFudGl6ZSAgMC45OTlFLTM4MyAgIDFlLTM4MyAgLT4gICAxRS0zODMgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTcxNiBxdWFudGl6ZSAgMC4wOTlFLTM4MyAxMGUtMzg0ICAtPiAgIDFFLTM4NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKKworZGRxdWE3MTcgcXVhbnRpemUgIDAuMDA5RS0zODMgIDFlLTM4NSAgLT4gICAxRS0zODUgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitkZHF1YTcxOCBxdWFudGl6ZSAgMC4wMDFFLTM4MyAgMWUtMzg1ICAtPiAgIDBFLTM4NSAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3MTkgcXVhbnRpemUgIDAuMDAwOUUtMzgzIDFlLTM4NSAgLT4gICAwRS0zODUgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzIwIHF1YW50aXplICAwLjAwMDFFLTM4MyAxZS0zODUgIC0+ICAgMEUtMzg1ICAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNzMwIHF1YW50aXplIC0xLjAwRS0zODMgICAxZS0zODMgIC0+ICAtMUUtMzgzICAgICBSb3VuZGVkCitkZHF1YTczMSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgUm91bmRlZCBJbmV4YWN0CitkZHF1YTczMiBxdWFudGl6ZSAtMC4xMEUtMzgzICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgUm91bmRlZCBJbmV4YWN0CitkZHF1YTczMyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgUm91bmRlZCBJbmV4YWN0CitkZHF1YTczNCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZGRxdWE3MzUgcXVhbnRpemUgLTAuOTk5RS0zODMgOTBlLTM4MyAgLT4gIC0xRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3MzYgcXVhbnRpemUgLTAuMDk5RS0zODMgLTFlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3MzcgcXVhbnRpemUgLTAuMDA5RS0zODMgLTFlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3MzggcXVhbnRpemUgLTAuMDAxRS0zODMgLTBlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3MzkgcXVhbnRpemUgLTAuMDAwMUUtMzgzIDBlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTc0MCBxdWFudGl6ZSAtMS4wMEUtMzgzICAgMWUtMzg0IC0+ICAtMS4wRS0zODMgICBSb3VuZGVkCitkZHF1YTc0MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg0IC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbAorZGRxdWE3NDIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4NCAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwgUm91bmRlZAorZGRxdWE3NDMgcXVhbnRpemUgLTAuMTAwRS0zODMgIDFlLTM4NCAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwgUm91bmRlZAorZGRxdWE3NDQgcXVhbnRpemUgLTAuMDFFLTM4MyAgIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitkZHF1YTc0NSBxdWFudGl6ZSAtMC45OTlFLTM4MyAgMWUtMzg0IC0+ICAtMS4wRS0zODMgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzQ2IHF1YW50aXplIC0wLjA5OUUtMzgzICAxZS0zODQgLT4gIC0xRS0zODQgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorZGRxdWE3NDcgcXVhbnRpemUgLTAuMDA5RS0zODMgIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzQ4IHF1YW50aXplIC0wLjAwMUUtMzgzICAxZS0zODQgLT4gIC0wRS0zODQgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTc0OSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMWUtMzg0IC0+ICAtMEUtMzg0ICAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTc1MCBxdWFudGl6ZSAtMS4wMEUtMzgzICAgMWUtMzg1IC0+ICAtMS4wMEUtMzgzCitkZHF1YTc1MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbAorZGRxdWE3NTIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4NSAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwKK2RkcXVhNzUzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODUgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkcXVhNzU0IHF1YW50aXplIC0wLjAxRS0zODMgICAxZS0zODUgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZGRxdWE3NTUgcXVhbnRpemUgLTAuOTk5RS0zODMgIDFlLTM4NSAtPiAgLTEuMDBFLTM4MyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTc1NiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RkcXVhNzU3IHF1YW50aXplIC0wLjAwOUUtMzgzICAxZS0zODUgLT4gIC0xRS0zODUgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorZGRxdWE3NTggcXVhbnRpemUgLTAuMDAxRS0zODMgIDFlLTM4NSAtPiAgLTBFLTM4NSAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzU5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAxZS0zODUgLT4gIC0wRS0zODUgICAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNzYwIHF1YW50aXplIC0xLjAwRS0zODMgICAxZS0zODYgLT4gIC0xLjAwMEUtMzgzCitkZHF1YTc2MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwKK2RkcXVhNzYyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODYgLT4gIC0xLjAwRS0zODQgIFN1Ym5vcm1hbAorZGRxdWE3NjMgcXVhbnRpemUgLTAuMTAwRS0zODMgIDFlLTM4NiAtPiAgLTEuMDBFLTM4NCAgU3Vibm9ybWFsCitkZHF1YTc2NCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzg2IC0+ICAtMS4wRS0zODUgICBTdWJub3JtYWwKK2RkcXVhNzY1IHF1YW50aXplIC0wLjk5OUUtMzgzICAxZS0zODYgLT4gIC05Ljk5RS0zODQgIFN1Ym5vcm1hbAorZGRxdWE3NjYgcXVhbnRpemUgLTAuMDk5RS0zODMgIDFlLTM4NiAtPiAgLTkuOUUtMzg1ICAgU3Vibm9ybWFsCitkZHF1YTc2NyBxdWFudGl6ZSAtMC4wMDlFLTM4MyAgMWUtMzg2IC0+ICAtOUUtMzg2ICAgICBTdWJub3JtYWwKK2RkcXVhNzY4IHF1YW50aXplIC0wLjAwMUUtMzgzICAxZS0zODYgLT4gIC0xRS0zODYgICAgIFN1Ym5vcm1hbAorZGRxdWE3NjkgcXVhbnRpemUgLTAuMDAwMUUtMzgzIDFlLTM4NiAtPiAgLTBFLTM4NiAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgZnJvbSBGdW5nIExlZQorZGRxdWExMDIxIHF1YW50aXplICA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+ICA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0CitkZHF1YTEwMjIgcXVhbnRpemUgLTguNjY2NjY2NjY2NjY2MDAwRSszODQgIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gLTguNjY2NjY2NjY2NjY2MDAwRSszODQKK2RkcXVhMTAyNyBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzIzICAxRSszMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMTAyOSBxdWFudGl6ZSA4LjY2NjY2NjY2RSszICAgICAgICAgICAxRSszICAgICAtPiA5RSszIEluZXhhY3QgUm91bmRlZAorCisKKy0tZGRxdWExMDMwIHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzg0ICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkIEluZXhhY3QKKy0tZGRxdWExMDMxIHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzg0ICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkCistLWRkcXVhMTAzMiBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MyAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZAorLS1kZHF1YTEwMzMgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODIgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQKKy0tZGRxdWExMDM0IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzgxICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkCistLWRkcXVhMTAzNSBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MCAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZAorCistLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucworZGRxdWExMDQwIHF1YW50aXplIC0yMTQ3NDgzNjQ2ICAgICAwIC0+IC0yMTQ3NDgzNjQ2CitkZHF1YTEwNDEgcXVhbnRpemUgLTIxNDc0ODM2NDcgICAgIDAgLT4gLTIxNDc0ODM2NDcKK2RkcXVhMTA0MiBxdWFudGl6ZSAtMjE0NzQ4MzY0OCAgICAgMCAtPiAtMjE0NzQ4MzY0OAorZGRxdWExMDQzIHF1YW50aXplIC0yMTQ3NDgzNjQ5ICAgICAwIC0+IC0yMTQ3NDgzNjQ5CitkZHF1YTEwNDQgcXVhbnRpemUgIDIxNDc0ODM2NDYgICAgIDAgLT4gIDIxNDc0ODM2NDYKK2RkcXVhMTA0NSBxdWFudGl6ZSAgMjE0NzQ4MzY0NyAgICAgMCAtPiAgMjE0NzQ4MzY0NworZGRxdWExMDQ2IHF1YW50aXplICAyMTQ3NDgzNjQ4ICAgICAwIC0+ICAyMTQ3NDgzNjQ4CitkZHF1YTEwNDcgcXVhbnRpemUgIDIxNDc0ODM2NDkgICAgIDAgLT4gIDIxNDc0ODM2NDkKK2RkcXVhMTA0OCBxdWFudGl6ZSAgNDI5NDk2NzI5NCAgICAgMCAtPiAgNDI5NDk2NzI5NAorZGRxdWExMDQ5IHF1YW50aXplICA0Mjk0OTY3Mjk1ICAgICAwIC0+ICA0Mjk0OTY3Mjk1CitkZHF1YTEwNTAgcXVhbnRpemUgIDQyOTQ5NjcyOTYgICAgIDAgLT4gIDQyOTQ5NjcyOTYKK2RkcXVhMTA1MSBxdWFudGl6ZSAgNDI5NDk2NzI5NyAgICAgMCAtPiAgNDI5NDk2NzI5NworCistLSBSb3VuZGluZyBzd2F0aGUKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkcXVhMTEwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RkcXVhMTEwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTExMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTExMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTExMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2RkcXVhMTIwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RkcXVhMTIwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorZGRxdWExMzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZGRxdWExMzAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogdXAKK2RkcXVhMTQwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RkcXVhMTQwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRxdWExNTAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZGRxdWExNTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBjZWlsaW5nCitkZHF1YTE2MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkZHF1YTE2MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGZsb29yCitkZHF1YTE3MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkZHF1YTE3MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IDA1dXAKK2RkcXVhMTgwMCBxdWFudGl6ZSAgMS4yMDAwICAgIDEuMDAgICAgLT4gIDEuMjAgIFJvdW5kZWQKK2RkcXVhMTgwMSBxdWFudGl6ZSAgMS4yMDAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExODAyIHF1YW50aXplICAxLjIwMTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4MDMgcXVhbnRpemUgIDEuMjA1MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTgwNCBxdWFudGl6ZSAgMS4yMDUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExODA3IHF1YW50aXplICAxLjIwNjAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4MDggcXVhbnRpemUgIDEuMjA3MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTgwOSBxdWFudGl6ZSAgMS4yMDk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExODExIHF1YW50aXplIC0xLjIwOTkgICAgMS4wMCAgICAtPiAtMS4yMSAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMTkwMCBxdWFudGl6ZSAgMS4yMTAwICAgIDEuMDAgICAgLT4gIDEuMjEgIFJvdW5kZWQKK2RkcXVhMTkwMSBxdWFudGl6ZSAgMS4yMTAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTAyIHF1YW50aXplICAxLjIxMTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MDMgcXVhbnRpemUgIDEuMjE1MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkwNCBxdWFudGl6ZSAgMS4yMTUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTA3IHF1YW50aXplICAxLjIxNjAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MDggcXVhbnRpemUgIDEuMjE3MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkwOSBxdWFudGl6ZSAgMS4yMTk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTExIHF1YW50aXplIC0xLjIxOTkgICAgMS4wMCAgICAtPiAtMS4yMSAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMjAwMCBxdWFudGl6ZSAgMS4yNDAwICAgIDEuMDAgICAgLT4gIDEuMjQgIFJvdW5kZWQKK2RkcXVhMjAwMSBxdWFudGl6ZSAgMS4yNDAxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDAyIHF1YW50aXplICAxLjI0MTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwMDMgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAwNCBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDA3IHF1YW50aXplICAxLjI0NjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwMDggcXVhbnRpemUgIDEuMjQ3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAwOSBxdWFudGl6ZSAgMS4yNDk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDExIHF1YW50aXplIC0xLjI0OTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMjEwMCBxdWFudGl6ZSAgMS4yNTAwICAgIDEuMDAgICAgLT4gIDEuMjUgIFJvdW5kZWQKK2RkcXVhMjEwMSBxdWFudGl6ZSAgMS4yNTAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMTAyIHF1YW50aXplICAxLjI1MTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIxMDMgcXVhbnRpemUgIDEuMjU1MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjEwNCBxdWFudGl6ZSAgMS4yNTUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMTA3IHF1YW50aXplICAxLjI1NjAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIxMDggcXVhbnRpemUgIDEuMjU3MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjEwOSBxdWFudGl6ZSAgMS4yNTk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMTExIHF1YW50aXplIC0xLjI1OTkgICAgMS4wMCAgICAtPiAtMS4yNiAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMjIwMCBxdWFudGl6ZSAgMS4yNjAwICAgIDEuMDAgICAgLT4gIDEuMjYgIFJvdW5kZWQKK2RkcXVhMjIwMSBxdWFudGl6ZSAgMS4yNjAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjAyIHF1YW50aXplICAxLjI2MTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMDMgcXVhbnRpemUgIDEuMjY1MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIwNCBxdWFudGl6ZSAgMS4yNjUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjA3IHF1YW50aXplICAxLjI2NjAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMDggcXVhbnRpemUgIDEuMjY3MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIwOSBxdWFudGl6ZSAgMS4yNjk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjExIHF1YW50aXplIC0xLjI2OTkgICAgMS4wMCAgICAtPiAtMS4yNiAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMjMwMCBxdWFudGl6ZSAgMS4yOTAwICAgIDEuMDAgICAgLT4gIDEuMjkgIFJvdW5kZWQKK2RkcXVhMjMwMSBxdWFudGl6ZSAgMS4yOTAxICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzAyIHF1YW50aXplICAxLjI5MTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMDMgcXVhbnRpemUgIDEuMjk1MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMwNCBxdWFudGl6ZSAgMS4yOTUxICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzA3IHF1YW50aXplICAxLjI5NjAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMDggcXVhbnRpemUgIDEuMjk3MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMwOSBxdWFudGl6ZSAgMS4yOTk5ICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzExIHF1YW50aXplIC0xLjI5OTkgICAgMS4wMCAgICAtPiAtMS4yOSAgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bGwgdGVzdHMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK2RkcXVhOTk4IHF1YW50aXplIDEwICAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTk5OSBxdWFudGl6ZSAgIyAxZTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVkdWNlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZWR1Y2UuZGVjVGVzdAppbmRleCBiZGZkMDYwLi45NTI5ZTUwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZWR1Y2UuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZWR1Y2UuZGVjVGVzdApAQCAtMSwxODIgKzEsMTgyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFJlZHVjZS5kZWNUZXN0IC0tIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBmcm9tIGEgZGVjRG91YmxlICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMywgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kZHJlZDAwMSByZWR1Y2UgJzEnICAgICAgLT4gJzEnDQotZGRyZWQwMDIgcmVkdWNlICctMScgICAgIC0+ICctMScNCi1kZHJlZDAwMyByZWR1Y2UgJzEuMDAnICAgLT4gJzEnDQotZGRyZWQwMDQgcmVkdWNlICctMS4wMCcgIC0+ICctMScNCi1kZHJlZDAwNSByZWR1Y2UgJzAnICAgICAgLT4gJzAnDQotZGRyZWQwMDYgcmVkdWNlICcwLjAwJyAgIC0+ICcwJw0KLWRkcmVkMDA3IHJlZHVjZSAnMDAuMCcgICAtPiAnMCcNCi1kZHJlZDAwOCByZWR1Y2UgJzAwLjAwJyAgLT4gJzAnDQotZGRyZWQwMDkgcmVkdWNlICcwMCcgICAgIC0+ICcwJw0KLWRkcmVkMDEwIHJlZHVjZSAnMEUrMScgICAtPiAnMCcNCi1kZHJlZDAxMSByZWR1Y2UgJzBFKzUnICAgLT4gJzAnDQotDQotZGRyZWQwMTIgcmVkdWNlICctMicgICAgIC0+ICctMicNCi1kZHJlZDAxMyByZWR1Y2UgJzInICAgICAgLT4gJzInDQotZGRyZWQwMTQgcmVkdWNlICctMi4wMCcgIC0+ICctMicNCi1kZHJlZDAxNSByZWR1Y2UgJzIuMDAnICAgLT4gJzInDQotZGRyZWQwMTYgcmVkdWNlICctMCcgICAgIC0+ICctMCcNCi1kZHJlZDAxNyByZWR1Y2UgJy0wLjAwJyAgLT4gJy0wJw0KLWRkcmVkMDE4IHJlZHVjZSAnLTAwLjAnICAtPiAnLTAnDQotZGRyZWQwMTkgcmVkdWNlICctMDAuMDAnIC0+ICctMCcNCi1kZHJlZDAyMCByZWR1Y2UgJy0wMCcgICAgLT4gJy0wJw0KLWRkcmVkMDIxIHJlZHVjZSAnLTBFKzUnICAgLT4gJy0wJw0KLWRkcmVkMDIyIHJlZHVjZSAnLTBFKzEnICAtPiAnLTAnDQotDQotZGRyZWQwMzAgcmVkdWNlICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnDQotZGRyZWQwMzEgcmVkdWNlICctMC4xJyAgICAgICAgICAgIC0+ICctMC4xJw0KLWRkcmVkMDMyIHJlZHVjZSAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScNCi1kZHJlZDAzMyByZWR1Y2UgJy0wLjAxJyAgICAgICAgICAgLT4gJy0wLjAxJw0KLWRkcmVkMDM0IHJlZHVjZSAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnDQotZGRyZWQwMzUgcmVkdWNlICctMC4wMDEnICAgICAgICAgIC0+ICctMC4wMDEnDQotZGRyZWQwMzYgcmVkdWNlICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScNCi1kZHJlZDAzNyByZWR1Y2UgJy0wLjAwMDAwMScgICAgICAgLT4gJy0wLjAwMDAwMScNCi1kZHJlZDAzOCByZWR1Y2UgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJw0KLWRkcmVkMDM5IHJlZHVjZSAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnLTFFLTEyJw0KLQ0KLWRkcmVkMDQxIHJlZHVjZSAxLjEgICAgICAgIC0+IDEuMQ0KLWRkcmVkMDQyIHJlZHVjZSAxLjEwICAgICAgIC0+IDEuMQ0KLWRkcmVkMDQzIHJlZHVjZSAxLjEwMCAgICAgIC0+IDEuMQ0KLWRkcmVkMDQ0IHJlZHVjZSAxLjExMCAgICAgIC0+IDEuMTENCi1kZHJlZDA0NSByZWR1Y2UgLTEuMSAgICAgICAtPiAtMS4xDQotZGRyZWQwNDYgcmVkdWNlIC0xLjEwICAgICAgLT4gLTEuMQ0KLWRkcmVkMDQ3IHJlZHVjZSAtMS4xMDAgICAgIC0+IC0xLjENCi1kZHJlZDA0OCByZWR1Y2UgLTEuMTEwICAgICAtPiAtMS4xMQ0KLWRkcmVkMDQ5IHJlZHVjZSA5LjkgICAgICAgIC0+IDkuOQ0KLWRkcmVkMDUwIHJlZHVjZSA5LjkwICAgICAgIC0+IDkuOQ0KLWRkcmVkMDUxIHJlZHVjZSA5LjkwMCAgICAgIC0+IDkuOQ0KLWRkcmVkMDUyIHJlZHVjZSA5Ljk5MCAgICAgIC0+IDkuOTkNCi1kZHJlZDA1MyByZWR1Y2UgLTkuOSAgICAgICAtPiAtOS45DQotZGRyZWQwNTQgcmVkdWNlIC05LjkwICAgICAgLT4gLTkuOQ0KLWRkcmVkMDU1IHJlZHVjZSAtOS45MDAgICAgIC0+IC05LjkNCi1kZHJlZDA1NiByZWR1Y2UgLTkuOTkwICAgICAtPiAtOS45OQ0KLQ0KLS0tIHNvbWUgdHJhaWxpbmcgZnJhY3Rpb25hbCB6ZXJvcyB3aXRoIHplcm9zIGluIHVuaXRzDQotZGRyZWQwNjAgcmVkdWNlICAxMC4wICAgICAgICAtPiAxRSsxDQotZGRyZWQwNjEgcmVkdWNlICAxMC4wMCAgICAgICAtPiAxRSsxDQotZGRyZWQwNjIgcmVkdWNlICAxMDAuMCAgICAgICAtPiAxRSsyDQotZGRyZWQwNjMgcmVkdWNlICAxMDAuMDAgICAgICAtPiAxRSsyDQotZGRyZWQwNjQgcmVkdWNlICAxLjEwMDBFKzMgICAtPiAxLjFFKzMNCi1kZHJlZDA2NSByZWR1Y2UgIDEuMTAwMDBFKzMgIC0+IDEuMUUrMw0KLWRkcmVkMDY2IHJlZHVjZSAtMTAuMCAgICAgICAgLT4gLTFFKzENCi1kZHJlZDA2NyByZWR1Y2UgLTEwLjAwICAgICAgIC0+IC0xRSsxDQotZGRyZWQwNjggcmVkdWNlIC0xMDAuMCAgICAgICAtPiAtMUUrMg0KLWRkcmVkMDY5IHJlZHVjZSAtMTAwLjAwICAgICAgLT4gLTFFKzINCi1kZHJlZDA3MCByZWR1Y2UgLTEuMTAwMEUrMyAgIC0+IC0xLjFFKzMNCi1kZHJlZDA3MSByZWR1Y2UgLTEuMTAwMDBFKzMgIC0+IC0xLjFFKzMNCi0NCi0tLSBzb21lIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3Mgd2l0aCBwb3NpdGl2ZSBleHBvbmVudA0KLWRkcmVkMDgwIHJlZHVjZSAgMTBFKzEgICAgICAgLT4gMUUrMg0KLWRkcmVkMDgxIHJlZHVjZSAgMTAwRSsxICAgICAgLT4gMUUrMw0KLWRkcmVkMDgyIHJlZHVjZSAgMS4wRSsyICAgICAgLT4gMUUrMg0KLWRkcmVkMDgzIHJlZHVjZSAgMS4wRSszICAgICAgLT4gMUUrMw0KLWRkcmVkMDg0IHJlZHVjZSAgMS4xRSszICAgICAgLT4gMS4xRSszDQotZGRyZWQwODUgcmVkdWNlICAxLjAwRSszICAgICAtPiAxRSszDQotZGRyZWQwODYgcmVkdWNlICAxLjEwRSszICAgICAtPiAxLjFFKzMNCi1kZHJlZDA4NyByZWR1Y2UgLTEwRSsxICAgICAgIC0+IC0xRSsyDQotZGRyZWQwODggcmVkdWNlIC0xMDBFKzEgICAgICAtPiAtMUUrMw0KLWRkcmVkMDg5IHJlZHVjZSAtMS4wRSsyICAgICAgLT4gLTFFKzINCi1kZHJlZDA5MCByZWR1Y2UgLTEuMEUrMyAgICAgIC0+IC0xRSszDQotZGRyZWQwOTEgcmVkdWNlIC0xLjFFKzMgICAgICAtPiAtMS4xRSszDQotZGRyZWQwOTIgcmVkdWNlIC0xLjAwRSszICAgICAtPiAtMUUrMw0KLWRkcmVkMDkzIHJlZHVjZSAtMS4xMEUrMyAgICAgLT4gLTEuMUUrMw0KLQ0KLS0tIHNvbWUgc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MsIHdlcmUgd2UgdG8gYmUgdHJpbW1pbmcNCi1kZHJlZDEwMCByZWR1Y2UgIDExICAgICAgICAgIC0+IDExDQotZGRyZWQxMDEgcmVkdWNlICAxMCAgICAgICAgICAtPiAxRSsxDQotZGRyZWQxMDIgcmVkdWNlICAxMC4gICAgICAgICAtPiAxRSsxDQotZGRyZWQxMDMgcmVkdWNlICAxLjFFKzEgICAgICAtPiAxMQ0KLWRkcmVkMTA0IHJlZHVjZSAgMS4wRSsxICAgICAgLT4gMUUrMQ0KLWRkcmVkMTA1IHJlZHVjZSAgMS4xMEUrMiAgICAgLT4gMS4xRSsyDQotZGRyZWQxMDYgcmVkdWNlICAxLjAwRSsyICAgICAtPiAxRSsyDQotZGRyZWQxMDcgcmVkdWNlICAxLjEwMEUrMyAgICAtPiAxLjFFKzMNCi1kZHJlZDEwOCByZWR1Y2UgIDEuMDAwRSszICAgIC0+IDFFKzMNCi1kZHJlZDEwOSByZWR1Y2UgIDEuMDAwMDAwRSs2IC0+IDFFKzYNCi1kZHJlZDExMCByZWR1Y2UgLTExICAgICAgICAgIC0+IC0xMQ0KLWRkcmVkMTExIHJlZHVjZSAtMTAgICAgICAgICAgLT4gLTFFKzENCi1kZHJlZDExMiByZWR1Y2UgLTEwLiAgICAgICAgIC0+IC0xRSsxDQotZGRyZWQxMTMgcmVkdWNlIC0xLjFFKzEgICAgICAtPiAtMTENCi1kZHJlZDExNCByZWR1Y2UgLTEuMEUrMSAgICAgIC0+IC0xRSsxDQotZGRyZWQxMTUgcmVkdWNlIC0xLjEwRSsyICAgICAtPiAtMS4xRSsyDQotZGRyZWQxMTYgcmVkdWNlIC0xLjAwRSsyICAgICAtPiAtMUUrMg0KLWRkcmVkMTE3IHJlZHVjZSAtMS4xMDBFKzMgICAgLT4gLTEuMUUrMw0KLWRkcmVkMTE4IHJlZHVjZSAtMS4wMDBFKzMgICAgLT4gLTFFKzMNCi1kZHJlZDExOSByZWR1Y2UgLTEuMDAwMDBFKzUgIC0+IC0xRSs1DQotZGRyZWQxMjAgcmVkdWNlIC0xLjAwMDAwMEUrNiAtPiAtMUUrNg0KLWRkcmVkMTIxIHJlZHVjZSAtMTAuMDAwMDBFKzYgLT4gLTFFKzcNCi1kZHJlZDEyMiByZWR1Y2UgLTEwMC4wMDAwRSs2IC0+IC0xRSs4DQotZGRyZWQxMjMgcmVkdWNlIC0xMDAwLjAwMEUrNiAtPiAtMUUrOQ0KLWRkcmVkMTI0IHJlZHVjZSAtMTAwMDAuMDBFKzYgLT4gLTFFKzEwDQotZGRyZWQxMjUgcmVkdWNlIC0xMDAwMDAuMEUrNiAtPiAtMUUrMTENCi1kZHJlZDEyNiByZWR1Y2UgLTEwMDAwMDAuRSs2IC0+IC0xRSsxMg0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgNCi1kZHJlZDE0MCByZWR1Y2UgJzIuMScgICAgIC0+ICAnMi4xJw0KLWRkcmVkMTQxIHJlZHVjZSAnLTIuMCcgICAgLT4gICctMicNCi1kZHJlZDE0MiByZWR1Y2UgJzEuMjAwJyAgIC0+ICAnMS4yJw0KLWRkcmVkMTQzIHJlZHVjZSAnLTEyMCcgICAgLT4gICctMS4yRSsyJw0KLWRkcmVkMTQ0IHJlZHVjZSAnMTIwLjAwJyAgLT4gICcxLjJFKzInDQotZGRyZWQxNDUgcmVkdWNlICcwLjAwJyAgICAtPiAgJzAnDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi0tLSBub3RlIG9yaWdhbWkgZWZmZWN0IG9uIHNvbWUgb2YgdGhlc2UNCi1kZHJlZDE1MSByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRyZWQxNTIgcmVkdWNlICA5Ljk5OTk5OTAwMDAwMDAwMEUrMzgwICAgLT4gOS45OTk5OTkwMDAwMEUrMzgwDQotZGRyZWQxNTMgcmVkdWNlICA5Ljk5OTk5OTk5OTk5MDAwMEUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTAwMDBFKzM4NA0KLWRkcmVkMTU0IHJlZHVjZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4Mw0KLWRkcmVkMTU1IHJlZHVjZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDFFLTM4Mw0KLWRkcmVkMTU2IHJlZHVjZSAgMi4wMDBFLTM5NSAgICAgICAgICAgICAgIC0+IDJFLTM5NSAgIFN1Ym5vcm1hbA0KLWRkcmVkMTU3IHJlZHVjZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCAgIFN1Ym5vcm1hbA0KLQ0KLWRkcmVkMTYxIHJlZHVjZSAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTggIFN1Ym5vcm1hbA0KLWRkcmVkMTYyIHJlZHVjZSAgLTIuMDAwRS0zOTUgICAgICAgICAgICAgIC0+IC0yRS0zOTUgIFN1Ym5vcm1hbA0KLWRkcmVkMTYzIHJlZHVjZSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xRS0zODMNCi1kZHJlZDE2NCByZWR1Y2UgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzDQotZGRyZWQxNjUgcmVkdWNlICAtOS45OTk5OTkwMDAwMDAwMDBFKzM4MCAgLT4gLTkuOTk5OTk5MDAwMDBFKzM4MA0KLWRkcmVkMTY2IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTkwMDAwRSszODQgIC0+IC05Ljk5OTk5OTk5OTk5MDAwMEUrMzg0DQotZGRyZWQxNjcgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTkwRSszODQNCi1kZHJlZDE2OCByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkcmVkMTY5IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTkwRSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0DQotDQotDQotLS0gc3BlY2lhbHMgKHJlZHVjZSBkb2VzIG5vdCBhZmZlY3QgcGF5bG9hZCkNCi1kZHJlZDgyMCByZWR1Y2UgJ0luZicgICAgLT4gJ0luZmluaXR5Jw0KLWRkcmVkODIxIHJlZHVjZSAnLUluZicgICAtPiAnLUluZmluaXR5Jw0KLWRkcmVkODIyIHJlZHVjZSAgIE5hTiAgICAtPiAgTmFODQotZGRyZWQ4MjMgcmVkdWNlICBzTmFOICAgIC0+ICBOYU4gICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlZDgyNCByZWR1Y2UgICBOYU4xMDEgLT4gIE5hTjEwMQ0KLWRkcmVkODI1IHJlZHVjZSAgc05hTjAxMCAtPiAgTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZWQ4MjcgcmVkdWNlICAtTmFOICAgIC0+IC1OYU4NCi1kZHJlZDgyOCByZWR1Y2UgLXNOYU4gICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVkODI5IHJlZHVjZSAgLU5hTjEwMSAtPiAtTmFOMTAxDQotZGRyZWQ4MzAgcmVkdWNlIC1zTmFOMDEwIC0+IC1OYU4xMCAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOdWxsIHRlc3QNCi1kZHJlZDkwMCByZWR1Y2UgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFJlZHVjZS5kZWNUZXN0IC0tIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBmcm9tIGEgZGVjRG91YmxlICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAzLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZHJlZDAwMSByZWR1Y2UgJzEnICAgICAgLT4gJzEnCitkZHJlZDAwMiByZWR1Y2UgJy0xJyAgICAgLT4gJy0xJworZGRyZWQwMDMgcmVkdWNlICcxLjAwJyAgIC0+ICcxJworZGRyZWQwMDQgcmVkdWNlICctMS4wMCcgIC0+ICctMScKK2RkcmVkMDA1IHJlZHVjZSAnMCcgICAgICAtPiAnMCcKK2RkcmVkMDA2IHJlZHVjZSAnMC4wMCcgICAtPiAnMCcKK2RkcmVkMDA3IHJlZHVjZSAnMDAuMCcgICAtPiAnMCcKK2RkcmVkMDA4IHJlZHVjZSAnMDAuMDAnICAtPiAnMCcKK2RkcmVkMDA5IHJlZHVjZSAnMDAnICAgICAtPiAnMCcKK2RkcmVkMDEwIHJlZHVjZSAnMEUrMScgICAtPiAnMCcKK2RkcmVkMDExIHJlZHVjZSAnMEUrNScgICAtPiAnMCcKKworZGRyZWQwMTIgcmVkdWNlICctMicgICAgIC0+ICctMicKK2RkcmVkMDEzIHJlZHVjZSAnMicgICAgICAtPiAnMicKK2RkcmVkMDE0IHJlZHVjZSAnLTIuMDAnICAtPiAnLTInCitkZHJlZDAxNSByZWR1Y2UgJzIuMDAnICAgLT4gJzInCitkZHJlZDAxNiByZWR1Y2UgJy0wJyAgICAgLT4gJy0wJworZGRyZWQwMTcgcmVkdWNlICctMC4wMCcgIC0+ICctMCcKK2RkcmVkMDE4IHJlZHVjZSAnLTAwLjAnICAtPiAnLTAnCitkZHJlZDAxOSByZWR1Y2UgJy0wMC4wMCcgLT4gJy0wJworZGRyZWQwMjAgcmVkdWNlICctMDAnICAgIC0+ICctMCcKK2RkcmVkMDIxIHJlZHVjZSAnLTBFKzUnICAgLT4gJy0wJworZGRyZWQwMjIgcmVkdWNlICctMEUrMScgIC0+ICctMCcKKworZGRyZWQwMzAgcmVkdWNlICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCitkZHJlZDAzMSByZWR1Y2UgJy0wLjEnICAgICAgICAgICAgLT4gJy0wLjEnCitkZHJlZDAzMiByZWR1Y2UgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCitkZHJlZDAzMyByZWR1Y2UgJy0wLjAxJyAgICAgICAgICAgLT4gJy0wLjAxJworZGRyZWQwMzQgcmVkdWNlICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKK2RkcmVkMDM1IHJlZHVjZSAnLTAuMDAxJyAgICAgICAgICAtPiAnLTAuMDAxJworZGRyZWQwMzYgcmVkdWNlICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK2RkcmVkMDM3IHJlZHVjZSAnLTAuMDAwMDAxJyAgICAgICAtPiAnLTAuMDAwMDAxJworZGRyZWQwMzggcmVkdWNlICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKK2RkcmVkMDM5IHJlZHVjZSAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnLTFFLTEyJworCitkZHJlZDA0MSByZWR1Y2UgMS4xICAgICAgICAtPiAxLjEKK2RkcmVkMDQyIHJlZHVjZSAxLjEwICAgICAgIC0+IDEuMQorZGRyZWQwNDMgcmVkdWNlIDEuMTAwICAgICAgLT4gMS4xCitkZHJlZDA0NCByZWR1Y2UgMS4xMTAgICAgICAtPiAxLjExCitkZHJlZDA0NSByZWR1Y2UgLTEuMSAgICAgICAtPiAtMS4xCitkZHJlZDA0NiByZWR1Y2UgLTEuMTAgICAgICAtPiAtMS4xCitkZHJlZDA0NyByZWR1Y2UgLTEuMTAwICAgICAtPiAtMS4xCitkZHJlZDA0OCByZWR1Y2UgLTEuMTEwICAgICAtPiAtMS4xMQorZGRyZWQwNDkgcmVkdWNlIDkuOSAgICAgICAgLT4gOS45CitkZHJlZDA1MCByZWR1Y2UgOS45MCAgICAgICAtPiA5LjkKK2RkcmVkMDUxIHJlZHVjZSA5LjkwMCAgICAgIC0+IDkuOQorZGRyZWQwNTIgcmVkdWNlIDkuOTkwICAgICAgLT4gOS45OQorZGRyZWQwNTMgcmVkdWNlIC05LjkgICAgICAgLT4gLTkuOQorZGRyZWQwNTQgcmVkdWNlIC05LjkwICAgICAgLT4gLTkuOQorZGRyZWQwNTUgcmVkdWNlIC05LjkwMCAgICAgLT4gLTkuOQorZGRyZWQwNTYgcmVkdWNlIC05Ljk5MCAgICAgLT4gLTkuOTkKKworLS0gc29tZSB0cmFpbGluZyBmcmFjdGlvbmFsIHplcm9zIHdpdGggemVyb3MgaW4gdW5pdHMKK2RkcmVkMDYwIHJlZHVjZSAgMTAuMCAgICAgICAgLT4gMUUrMQorZGRyZWQwNjEgcmVkdWNlICAxMC4wMCAgICAgICAtPiAxRSsxCitkZHJlZDA2MiByZWR1Y2UgIDEwMC4wICAgICAgIC0+IDFFKzIKK2RkcmVkMDYzIHJlZHVjZSAgMTAwLjAwICAgICAgLT4gMUUrMgorZGRyZWQwNjQgcmVkdWNlICAxLjEwMDBFKzMgICAtPiAxLjFFKzMKK2RkcmVkMDY1IHJlZHVjZSAgMS4xMDAwMEUrMyAgLT4gMS4xRSszCitkZHJlZDA2NiByZWR1Y2UgLTEwLjAgICAgICAgIC0+IC0xRSsxCitkZHJlZDA2NyByZWR1Y2UgLTEwLjAwICAgICAgIC0+IC0xRSsxCitkZHJlZDA2OCByZWR1Y2UgLTEwMC4wICAgICAgIC0+IC0xRSsyCitkZHJlZDA2OSByZWR1Y2UgLTEwMC4wMCAgICAgIC0+IC0xRSsyCitkZHJlZDA3MCByZWR1Y2UgLTEuMTAwMEUrMyAgIC0+IC0xLjFFKzMKK2RkcmVkMDcxIHJlZHVjZSAtMS4xMDAwMEUrMyAgLT4gLTEuMUUrMworCistLSBzb21lIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3Mgd2l0aCBwb3NpdGl2ZSBleHBvbmVudAorZGRyZWQwODAgcmVkdWNlICAxMEUrMSAgICAgICAtPiAxRSsyCitkZHJlZDA4MSByZWR1Y2UgIDEwMEUrMSAgICAgIC0+IDFFKzMKK2RkcmVkMDgyIHJlZHVjZSAgMS4wRSsyICAgICAgLT4gMUUrMgorZGRyZWQwODMgcmVkdWNlICAxLjBFKzMgICAgICAtPiAxRSszCitkZHJlZDA4NCByZWR1Y2UgIDEuMUUrMyAgICAgIC0+IDEuMUUrMworZGRyZWQwODUgcmVkdWNlICAxLjAwRSszICAgICAtPiAxRSszCitkZHJlZDA4NiByZWR1Y2UgIDEuMTBFKzMgICAgIC0+IDEuMUUrMworZGRyZWQwODcgcmVkdWNlIC0xMEUrMSAgICAgICAtPiAtMUUrMgorZGRyZWQwODggcmVkdWNlIC0xMDBFKzEgICAgICAtPiAtMUUrMworZGRyZWQwODkgcmVkdWNlIC0xLjBFKzIgICAgICAtPiAtMUUrMgorZGRyZWQwOTAgcmVkdWNlIC0xLjBFKzMgICAgICAtPiAtMUUrMworZGRyZWQwOTEgcmVkdWNlIC0xLjFFKzMgICAgICAtPiAtMS4xRSszCitkZHJlZDA5MiByZWR1Y2UgLTEuMDBFKzMgICAgIC0+IC0xRSszCitkZHJlZDA5MyByZWR1Y2UgLTEuMTBFKzMgICAgIC0+IC0xLjFFKzMKKworLS0gc29tZSBzaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcywgd2VyZSB3ZSB0byBiZSB0cmltbWluZworZGRyZWQxMDAgcmVkdWNlICAxMSAgICAgICAgICAtPiAxMQorZGRyZWQxMDEgcmVkdWNlICAxMCAgICAgICAgICAtPiAxRSsxCitkZHJlZDEwMiByZWR1Y2UgIDEwLiAgICAgICAgIC0+IDFFKzEKK2RkcmVkMTAzIHJlZHVjZSAgMS4xRSsxICAgICAgLT4gMTEKK2RkcmVkMTA0IHJlZHVjZSAgMS4wRSsxICAgICAgLT4gMUUrMQorZGRyZWQxMDUgcmVkdWNlICAxLjEwRSsyICAgICAtPiAxLjFFKzIKK2RkcmVkMTA2IHJlZHVjZSAgMS4wMEUrMiAgICAgLT4gMUUrMgorZGRyZWQxMDcgcmVkdWNlICAxLjEwMEUrMyAgICAtPiAxLjFFKzMKK2RkcmVkMTA4IHJlZHVjZSAgMS4wMDBFKzMgICAgLT4gMUUrMworZGRyZWQxMDkgcmVkdWNlICAxLjAwMDAwMEUrNiAtPiAxRSs2CitkZHJlZDExMCByZWR1Y2UgLTExICAgICAgICAgIC0+IC0xMQorZGRyZWQxMTEgcmVkdWNlIC0xMCAgICAgICAgICAtPiAtMUUrMQorZGRyZWQxMTIgcmVkdWNlIC0xMC4gICAgICAgICAtPiAtMUUrMQorZGRyZWQxMTMgcmVkdWNlIC0xLjFFKzEgICAgICAtPiAtMTEKK2RkcmVkMTE0IHJlZHVjZSAtMS4wRSsxICAgICAgLT4gLTFFKzEKK2RkcmVkMTE1IHJlZHVjZSAtMS4xMEUrMiAgICAgLT4gLTEuMUUrMgorZGRyZWQxMTYgcmVkdWNlIC0xLjAwRSsyICAgICAtPiAtMUUrMgorZGRyZWQxMTcgcmVkdWNlIC0xLjEwMEUrMyAgICAtPiAtMS4xRSszCitkZHJlZDExOCByZWR1Y2UgLTEuMDAwRSszICAgIC0+IC0xRSszCitkZHJlZDExOSByZWR1Y2UgLTEuMDAwMDBFKzUgIC0+IC0xRSs1CitkZHJlZDEyMCByZWR1Y2UgLTEuMDAwMDAwRSs2IC0+IC0xRSs2CitkZHJlZDEyMSByZWR1Y2UgLTEwLjAwMDAwRSs2IC0+IC0xRSs3CitkZHJlZDEyMiByZWR1Y2UgLTEwMC4wMDAwRSs2IC0+IC0xRSs4CitkZHJlZDEyMyByZWR1Y2UgLTEwMDAuMDAwRSs2IC0+IC0xRSs5CitkZHJlZDEyNCByZWR1Y2UgLTEwMDAwLjAwRSs2IC0+IC0xRSsxMAorZGRyZWQxMjUgcmVkdWNlIC0xMDAwMDAuMEUrNiAtPiAtMUUrMTEKK2RkcmVkMTI2IHJlZHVjZSAtMTAwMDAwMC5FKzYgLT4gLTFFKzEyCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK2RkcmVkMTQwIHJlZHVjZSAnMi4xJyAgICAgLT4gICcyLjEnCitkZHJlZDE0MSByZWR1Y2UgJy0yLjAnICAgIC0+ICAnLTInCitkZHJlZDE0MiByZWR1Y2UgJzEuMjAwJyAgIC0+ICAnMS4yJworZGRyZWQxNDMgcmVkdWNlICctMTIwJyAgICAtPiAgJy0xLjJFKzInCitkZHJlZDE0NCByZWR1Y2UgJzEyMC4wMCcgIC0+ICAnMS4yRSsyJworZGRyZWQxNDUgcmVkdWNlICcwLjAwJyAgICAtPiAgJzAnCisKKy0tIE5tYXgsIE5taW4sIE50aW55CistLSBub3RlIG9yaWdhbWkgZWZmZWN0IG9uIHNvbWUgb2YgdGhlc2UKK2RkcmVkMTUxIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkcmVkMTUyIHJlZHVjZSAgOS45OTk5OTkwMDAwMDAwMDBFKzM4MCAgIC0+IDkuOTk5OTk5MDAwMDBFKzM4MAorZGRyZWQxNTMgcmVkdWNlICA5Ljk5OTk5OTk5OTk5MDAwMEUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTAwMDBFKzM4NAorZGRyZWQxNTQgcmVkdWNlICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitkZHJlZDE1NSByZWR1Y2UgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxRS0zODMKK2RkcmVkMTU2IHJlZHVjZSAgMi4wMDBFLTM5NSAgICAgICAgICAgICAgIC0+IDJFLTM5NSAgIFN1Ym5vcm1hbAorZGRyZWQxNTcgcmVkdWNlICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4ICAgU3Vibm9ybWFsCisKK2RkcmVkMTYxIHJlZHVjZSAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTggIFN1Ym5vcm1hbAorZGRyZWQxNjIgcmVkdWNlICAtMi4wMDBFLTM5NSAgICAgICAgICAgICAgLT4gLTJFLTM5NSAgU3Vibm9ybWFsCitkZHJlZDE2MyByZWR1Y2UgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMUUtMzgzCitkZHJlZDE2NCByZWR1Y2UgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzCitkZHJlZDE2NSByZWR1Y2UgIC05Ljk5OTk5OTAwMDAwMDAwMEUrMzgwICAtPiAtOS45OTk5OTkwMDAwMEUrMzgwCitkZHJlZDE2NiByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5MDAwMEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTAwMDBFKzM4NAorZGRyZWQxNjcgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTkwRSszODQKK2RkcmVkMTY4IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJlZDE2OSByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NAorCisKKy0tIHNwZWNpYWxzIChyZWR1Y2UgZG9lcyBub3QgYWZmZWN0IHBheWxvYWQpCitkZHJlZDgyMCByZWR1Y2UgJ0luZicgICAgLT4gJ0luZmluaXR5JworZGRyZWQ4MjEgcmVkdWNlICctSW5mJyAgIC0+ICctSW5maW5pdHknCitkZHJlZDgyMiByZWR1Y2UgICBOYU4gICAgLT4gIE5hTgorZGRyZWQ4MjMgcmVkdWNlICBzTmFOICAgIC0+ICBOYU4gICAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVkODI0IHJlZHVjZSAgIE5hTjEwMSAtPiAgTmFOMTAxCitkZHJlZDgyNSByZWR1Y2UgIHNOYU4wMTAgLT4gIE5hTjEwICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZWQ4MjcgcmVkdWNlICAtTmFOICAgIC0+IC1OYU4KK2RkcmVkODI4IHJlZHVjZSAtc05hTiAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCitkZHJlZDgyOSByZWR1Y2UgIC1OYU4xMDEgLT4gLU5hTjEwMQorZGRyZWQ4MzAgcmVkdWNlIC1zTmFOMDEwIC0+IC1OYU4xMCAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0CitkZHJlZDkwMCByZWR1Y2UgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXIuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlci5kZWNUZXN0CmluZGV4IDViZDFlMzIuLjg1ZDg2ZjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlci5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlci5kZWNUZXN0CkBAIC0xLDYwMCArMSw2MDAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkUmVtYWluZGVyLmRlY1Rlc3QgLS0gZGVjRG91YmxlIHJlbWFpbmRlciAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQ0KLWRkcmVtMDAxIHJlbWFpbmRlciAgMSAgICAgMSAgICAtPiAgMA0KLWRkcmVtMDAyIHJlbWFpbmRlciAgMiAgICAgMSAgICAtPiAgMA0KLWRkcmVtMDAzIHJlbWFpbmRlciAgMSAgICAgMiAgICAtPiAgMQ0KLWRkcmVtMDA0IHJlbWFpbmRlciAgMiAgICAgMiAgICAtPiAgMA0KLWRkcmVtMDA1IHJlbWFpbmRlciAgMCAgICAgMSAgICAtPiAgMA0KLWRkcmVtMDA2IHJlbWFpbmRlciAgMCAgICAgMiAgICAtPiAgMA0KLWRkcmVtMDA3IHJlbWFpbmRlciAgMSAgICAgMyAgICAtPiAgMQ0KLWRkcmVtMDA4IHJlbWFpbmRlciAgMiAgICAgMyAgICAtPiAgMg0KLWRkcmVtMDA5IHJlbWFpbmRlciAgMyAgICAgMyAgICAtPiAgMA0KLQ0KLWRkcmVtMDEwIHJlbWFpbmRlciAgMi40ICAgMSAgICAtPiAgMC40DQotZGRyZW0wMTEgcmVtYWluZGVyICAyLjQgICAtMSAgIC0+ICAwLjQNCi1kZHJlbTAxMiByZW1haW5kZXIgIC0yLjQgIDEgICAgLT4gIC0wLjQNCi1kZHJlbTAxMyByZW1haW5kZXIgIC0yLjQgIC0xICAgLT4gIC0wLjQNCi1kZHJlbTAxNCByZW1haW5kZXIgIDIuNDAgIDEgICAgLT4gIDAuNDANCi1kZHJlbTAxNSByZW1haW5kZXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwDQotZGRyZW0wMTYgcmVtYWluZGVyICAyLjQgICAyICAgIC0+ICAwLjQNCi1kZHJlbTAxNyByZW1haW5kZXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwDQotZGRyZW0wMTggcmVtYWluZGVyICAyLiAgICAyICAgIC0+ICAwDQotZGRyZW0wMTkgcmVtYWluZGVyICAyMCAgICAyMCAgIC0+ICAwDQotDQotZGRyZW0wMjAgcmVtYWluZGVyICAxODcgICAxODcgICAgLT4gIDANCi1kZHJlbTAyMSByZW1haW5kZXIgIDUgICAgIDIgICAgICAtPiAgMQ0KLWRkcmVtMDIyIHJlbWFpbmRlciAgNSAgICAgMi4wICAgIC0+ICAxLjANCi1kZHJlbTAyMyByZW1haW5kZXIgIDUgICAgIDIuMDAwICAtPiAgMS4wMDANCi1kZHJlbTAyNCByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDANCi1kZHJlbTAyNSByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDANCi0NCi1kZHJlbTAzMCByZW1haW5kZXIgIDEgICAgIDIgICAgICAtPiAgMQ0KLWRkcmVtMDMxIHJlbWFpbmRlciAgMSAgICAgNCAgICAgIC0+ICAxDQotZGRyZW0wMzIgcmVtYWluZGVyICAxICAgICA4ICAgICAgLT4gIDENCi0NCi1kZHJlbTAzMyByZW1haW5kZXIgIDEgICAgIDE2ICAgICAtPiAgMQ0KLWRkcmVtMDM0IHJlbWFpbmRlciAgMSAgICAgMzIgICAgIC0+ICAxDQotZGRyZW0wMzUgcmVtYWluZGVyICAxICAgICA2NCAgICAgLT4gIDENCi1kZHJlbTA0MCByZW1haW5kZXIgIDEgICAgLTIgICAgICAtPiAgMQ0KLWRkcmVtMDQxIHJlbWFpbmRlciAgMSAgICAtNCAgICAgIC0+ICAxDQotZGRyZW0wNDIgcmVtYWluZGVyICAxICAgIC04ICAgICAgLT4gIDENCi1kZHJlbTA0MyByZW1haW5kZXIgIDEgICAgLTE2ICAgICAtPiAgMQ0KLWRkcmVtMDQ0IHJlbWFpbmRlciAgMSAgICAtMzIgICAgIC0+ICAxDQotZGRyZW0wNDUgcmVtYWluZGVyICAxICAgIC02NCAgICAgLT4gIDENCi1kZHJlbTA1MCByZW1haW5kZXIgLTEgICAgIDIgICAgICAtPiAgLTENCi1kZHJlbTA1MSByZW1haW5kZXIgLTEgICAgIDQgICAgICAtPiAgLTENCi1kZHJlbTA1MiByZW1haW5kZXIgLTEgICAgIDggICAgICAtPiAgLTENCi1kZHJlbTA1MyByZW1haW5kZXIgLTEgICAgIDE2ICAgICAtPiAgLTENCi1kZHJlbTA1NCByZW1haW5kZXIgLTEgICAgIDMyICAgICAtPiAgLTENCi1kZHJlbTA1NSByZW1haW5kZXIgLTEgICAgIDY0ICAgICAtPiAgLTENCi1kZHJlbTA2MCByZW1haW5kZXIgLTEgICAgLTIgICAgICAtPiAgLTENCi1kZHJlbTA2MSByZW1haW5kZXIgLTEgICAgLTQgICAgICAtPiAgLTENCi1kZHJlbTA2MiByZW1haW5kZXIgLTEgICAgLTggICAgICAtPiAgLTENCi1kZHJlbTA2MyByZW1haW5kZXIgLTEgICAgLTE2ICAgICAtPiAgLTENCi1kZHJlbTA2NCByZW1haW5kZXIgLTEgICAgLTMyICAgICAtPiAgLTENCi1kZHJlbTA2NSByZW1haW5kZXIgLTEgICAgLTY0ICAgICAtPiAgLTENCi0NCi1kZHJlbTA2NiByZW1haW5kZXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMA0KLWRkcmVtMDY3IHJlbWFpbmRlciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQNCi1kZHJlbTA2OCByZW1haW5kZXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gMC41DQotZGRyZW0wNjkgcmVtYWluZGVyICA5OTk5OTk5OTkuOSAgIDEgIC0+IDAuOQ0KLWRkcmVtMDcwIHJlbWFpbmRlciAgOTk5OTk5OTk5Ljk5OSAxICAtPiAwLjk5OQ0KLWRkcmVtMDcxIHJlbWFpbmRlciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAwLjk5OTk5OQ0KLWRkcmVtMDcyIHJlbWFpbmRlciAgOSAgICAgICAgICAgICAxICAtPiAwDQotZGRyZW0wNzMgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDANCi1kZHJlbTA3NCByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgMiAgLT4gMQ0KLWRkcmVtMDc1IHJlbWFpbmRlciAgOTk5OTk5OTk5OTk5OTk5OSAzICAtPiAwDQotZGRyZW0wNzYgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDQgIC0+IDMNCi0NCi1kZHJlbTA4MCByZW1haW5kZXIgIDAuICAgICAgICAgICAgMSAgLT4gMA0KLWRkcmVtMDgxIHJlbWFpbmRlciAgLjAgICAgICAgICAgICAxICAtPiAwLjANCi1kZHJlbTA4MiByZW1haW5kZXIgIDAuMDAgICAgICAgICAgMSAgLT4gMC4wMA0KLWRkcmVtMDgzIHJlbWFpbmRlciAgMC4wMEUrOSAgICAgICAxICAtPiAwDQotZGRyZW0wODQgcmVtYWluZGVyICAwLjAwRSszICAgICAgIDEgIC0+IDANCi1kZHJlbTA4NSByZW1haW5kZXIgIDAuMDBFKzIgICAgICAgMSAgLT4gMA0KLWRkcmVtMDg2IHJlbWFpbmRlciAgMC4wMEUrMSAgICAgICAxICAtPiAwLjANCi1kZHJlbTA4NyByZW1haW5kZXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMA0KLWRkcmVtMDg4IHJlbWFpbmRlciAgMC4wMEUtMCAgICAgICAxICAtPiAwLjAwDQotZGRyZW0wODkgcmVtYWluZGVyICAwLjAwRS0xICAgICAgIDEgIC0+IDAuMDAwDQotZGRyZW0wOTAgcmVtYWluZGVyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMA0KLWRkcmVtMDkxIHJlbWFpbmRlciAgMC4wMEUtMyAgICAgICAxICAtPiAwLjAwMDAwDQotZGRyZW0wOTIgcmVtYWluZGVyICAwLjAwRS00ICAgICAgIDEgIC0+IDAuMDAwMDAwDQotZGRyZW0wOTMgcmVtYWluZGVyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcNCi1kZHJlbTA5NCByZW1haW5kZXIgIDAuMDBFLTYgICAgICAgMSAgLT4gMEUtOA0KLWRkcmVtMDk1IHJlbWFpbmRlciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NA0KLQ0KLS0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDANCi1kZHJlbTEwMSByZW1haW5kZXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJlbTEwMiByZW1haW5kZXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJlbTEwMyByZW1haW5kZXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJlbTEwNCByZW1haW5kZXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJlbTEwNSByZW1haW5kZXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJlbTEwNiByZW1haW5kZXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi0tLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQNCi0tLSBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcg0KLS0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldDQotZGRyZW0xMDcgcmVtYWluZGVyICAwLjAwMDEgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTEwOCByZW1haW5kZXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTA5IHJlbWFpbmRlciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0xMTAgcmVtYWluZGVyICAxICAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTExMSByZW1haW5kZXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTEyIHJlbWFpbmRlciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0xMTMgcmVtYWluZGVyIDFFKzEwMCAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTExNCByZW1haW5kZXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTE1IHJlbWFpbmRlciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0xMTYgcmVtYWluZGVyICAwLjAxICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTExOSByZW1haW5kZXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTIwIHJlbWFpbmRlciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0xMjEgcmVtYWluZGVyICAxICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTEyMiByZW1haW5kZXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTIzIHJlbWFpbmRlciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0xMjQgcmVtYWluZGVyIDFFKzM4NCAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhbmQgemVyb3Mgb24gbGVmdA0KLWRkcmVtMTMwIHJlbWFpbmRlciAgMCAgICAgIDEgICAtPiAgMA0KLWRkcmVtMTMxIHJlbWFpbmRlciAgMCAgICAgLTEgICAtPiAgMA0KLWRkcmVtMTMyIHJlbWFpbmRlciAgMC4wICAgIDEgICAtPiAgMC4wDQotZGRyZW0xMzMgcmVtYWluZGVyICAwLjAgICAtMSAgIC0+ICAwLjANCi1kZHJlbTEzNCByZW1haW5kZXIgLTAgICAgICAxICAgLT4gLTANCi1kZHJlbTEzNSByZW1haW5kZXIgLTAgICAgIC0xICAgLT4gLTANCi1kZHJlbTEzNiByZW1haW5kZXIgLTAuMCAgICAxICAgLT4gLTAuMA0KLWRkcmVtMTM3IHJlbWFpbmRlciAtMC4wICAgLTEgICAtPiAtMC4wDQotDQotLS0gMC41ZXJzDQotZGRyZW0xNDMgcmVtYWluZGVyICAgMC41ICAyICAgICAtPiAgMC41DQotZGRyZW0xNDQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41DQotZGRyZW0xNDUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MA0KLWRkcmVtMTQ2IHJlbWFpbmRlciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwDQotZGRyZW0xNDcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MA0KLWRkcmVtMTQ4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTANCi1kZHJlbTE0OSByZW1haW5kZXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMA0KLQ0KLS0tIHN0ZWFkaWVzDQotZGRyZW0xNTAgcmVtYWluZGVyICAxICAxICAgLT4gMA0KLWRkcmVtMTUxIHJlbWFpbmRlciAgMSAgMiAgIC0+IDENCi1kZHJlbTE1MiByZW1haW5kZXIgIDEgIDMgICAtPiAxDQotZGRyZW0xNTMgcmVtYWluZGVyICAxICA0ICAgLT4gMQ0KLWRkcmVtMTU0IHJlbWFpbmRlciAgMSAgNSAgIC0+IDENCi1kZHJlbTE1NSByZW1haW5kZXIgIDEgIDYgICAtPiAxDQotZGRyZW0xNTYgcmVtYWluZGVyICAxICA3ICAgLT4gMQ0KLWRkcmVtMTU3IHJlbWFpbmRlciAgMSAgOCAgIC0+IDENCi1kZHJlbTE1OCByZW1haW5kZXIgIDEgIDkgICAtPiAxDQotZGRyZW0xNTkgcmVtYWluZGVyICAxICAxMCAgLT4gMQ0KLWRkcmVtMTYwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDANCi1kZHJlbTE2MSByZW1haW5kZXIgIDIgIDEgICAtPiAwDQotZGRyZW0xNjIgcmVtYWluZGVyICAzICAxICAgLT4gMA0KLWRkcmVtMTYzIHJlbWFpbmRlciAgNCAgMSAgIC0+IDANCi1kZHJlbTE2NCByZW1haW5kZXIgIDUgIDEgICAtPiAwDQotZGRyZW0xNjUgcmVtYWluZGVyICA2ICAxICAgLT4gMA0KLWRkcmVtMTY2IHJlbWFpbmRlciAgNyAgMSAgIC0+IDANCi1kZHJlbTE2NyByZW1haW5kZXIgIDggIDEgICAtPiAwDQotZGRyZW0xNjggcmVtYWluZGVyICA5ICAxICAgLT4gMA0KLWRkcmVtMTY5IHJlbWFpbmRlciAgMTAgMSAgIC0+IDANCi0NCi0tLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcg0KLWRkcmVtMTcxIHJlbWFpbmRlciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwDQotZGRyZW0xNzIgcmVtYWluZGVyICAgMC41MCAxLjAyMCAtPiAgMC41MDANCi1kZHJlbTE3MyByZW1haW5kZXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMA0KLWRkcmVtMTc0IHJlbWFpbmRlciAgIDAuNTIgMS4wMjAgLT4gIDAuNTIwDQotZGRyZW0xNzUgcmVtYWluZGVyICAgMC42ICAxLjAyMCAtPiAgMC42MDANCi0NCi0tLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwDQotZGRyZW0yMDEgcmVtYWluZGVyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJlbTIwMiByZW1haW5kZXIgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkcmVtMjAzIHJlbWFpbmRlciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRyZW0yMDQgcmVtYWluZGVyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMjA1IHJlbWFpbmRlciAgMC4wMSAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTIwNiByZW1haW5kZXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0yMDcgcmVtYWluZGVyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMjA4IHJlbWFpbmRlciAgMSAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTIwOSByZW1haW5kZXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0yMTAgcmVtYWluZGVyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMjExIHJlbWFpbmRlciAxRSszODAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcg0KLWRkcmVtMjMxIHJlbWFpbmRlciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwDQotZGRyZW0yMzIgcmVtYWluZGVyICAtMC41MCAxLjAyMCAtPiAtMC41MDANCi1kZHJlbTIzMyByZW1haW5kZXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMA0KLWRkcmVtMjM0IHJlbWFpbmRlciAgLTAuNTIgMS4wMjAgLT4gLTAuNTIwDQotZGRyZW0yMzUgcmVtYWluZGVyICAtMC42ICAxLjAyMCAtPiAtMC42MDANCi0NCi0tLSBoaWdoIFhzDQotZGRyZW0yNDAgcmVtYWluZGVyICAxRSsyICAxLjAwICAtPiAgMC4wMA0KLQ0KLS0tIGRkcmVtM3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsDQotZGRyZW0zMDEgcmVtYWluZGVyICAgMSAgICAzICAgICAtPiAgMQ0KLWRkcmVtMzAyIHJlbWFpbmRlciAgIDUgICAgNSAgICAgLT4gIDANCi1kZHJlbTMwMyByZW1haW5kZXIgICAxMyAgIDEwICAgIC0+ICAzDQotZGRyZW0zMDQgcmVtYWluZGVyICAgMTMgICA1MCAgICAtPiAgMTMNCi1kZHJlbTMwNSByZW1haW5kZXIgICAxMyAgIDEwMCAgIC0+ICAxMw0KLWRkcmVtMzA2IHJlbWFpbmRlciAgIDEzICAgMTAwMCAgLT4gIDEzDQotZGRyZW0zMDcgcmVtYWluZGVyICAgLjEzICAgIDEgICAtPiAgMC4xMw0KLWRkcmVtMzA4IHJlbWFpbmRlciAgIDAuMTMzICAxICAgLT4gIDAuMTMzDQotZGRyZW0zMDkgcmVtYWluZGVyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzDQotZGRyZW0zMTAgcmVtYWluZGVyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMNCi1kZHJlbTMxMSByZW1haW5kZXIgICAxMC4zMyAgMSAgIC0+ICAwLjMzDQotZGRyZW0zMTIgcmVtYWluZGVyICAgMTAuMzMgMTAgICAtPiAgMC4zMw0KLWRkcmVtMzEzIHJlbWFpbmRlciAgIDEwMy4zICAxICAgLT4gIDAuMw0KLWRkcmVtMzE0IHJlbWFpbmRlciAgIDEzMyAgIDEwICAgLT4gIDMNCi1kZHJlbTMxNSByZW1haW5kZXIgICAxMDMzICAxMCAgIC0+ICAzDQotZGRyZW0zMTYgcmVtYWluZGVyICAgMTAzMyAgNTAgICAtPiAgMzMNCi1kZHJlbTMxNyByZW1haW5kZXIgICAxMDEuMCAgMyAgIC0+ICAyLjANCi1kZHJlbTMxOCByZW1haW5kZXIgICAxMDIuMCAgMyAgIC0+ICAwLjANCi1kZHJlbTMxOSByZW1haW5kZXIgICAxMDMuMCAgMyAgIC0+ICAxLjANCi1kZHJlbTMyMCByZW1haW5kZXIgICAyLjQwICAgMSAgIC0+ICAwLjQwDQotZGRyZW0zMjEgcmVtYWluZGVyICAgMi40MDAgIDEgICAtPiAgMC40MDANCi1kZHJlbTMyMiByZW1haW5kZXIgICAyLjQgICAgMSAgIC0+ICAwLjQNCi1kZHJlbTMyMyByZW1haW5kZXIgICAyLjQgICAgMiAgIC0+ICAwLjQNCi1kZHJlbTMyNCByZW1haW5kZXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMA0KLWRkcmVtMzI1IHJlbWFpbmRlciAgIDEgICAwLjMgICAgLT4gIDAuMQ0KLWRkcmVtMzI2IHJlbWFpbmRlciAgIDEgICAwLjMwICAgLT4gIDAuMTANCi1kZHJlbTMyNyByZW1haW5kZXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMA0KLWRkcmVtMzI4IHJlbWFpbmRlciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMA0KLWRkcmVtMzI5IHJlbWFpbmRlciAgIDEuMCAgICAwLjMgLT4gIDAuMQ0KLWRkcmVtMzMwIHJlbWFpbmRlciAgIDEuMDAgICAwLjMgLT4gIDAuMTANCi1kZHJlbTMzMSByZW1haW5kZXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMA0KLWRkcmVtMzMyIHJlbWFpbmRlciAgIDEuMDAwMCAwLjMgLT4gIDAuMTAwMA0KLWRkcmVtMzMzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQ0KLWRkcmVtMzM0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQ0KLWRkcmVtMzM1IHJlbWFpbmRlciAgIDAuNSAgMi4wMSAgLT4gIDAuNTANCi1kZHJlbTMzNiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMA0KLWRkcmVtMzM3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTANCi1kZHJlbTMzOCByZW1haW5kZXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwDQotZGRyZW0zMzkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDANCi0NCi1kZHJlbTM0MCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIDAuNTAwMDAwMA0KLWRkcmVtMzQxIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDANCi1kZHJlbTM0MiByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDANCi1kZHJlbTM0MyByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwMA0KLWRkcmVtMzQ0IHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwMDANCi1kZHJlbTM0NSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcNCi1kZHJlbTM0NiByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04DQotZGRyZW0zNDcgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkNCi1kZHJlbTM0OCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwDQotZGRyZW0zNDkgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTENCi1kZHJlbTM1MCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTINCi0NCi1kZHJlbTM1MSByZW1haW5kZXIgICAwLjAzICA3ICAtPiAgMC4wMw0KLWRkcmVtMzUyIHJlbWFpbmRlciAgIDUgICAyICAgIC0+ICAxDQotZGRyZW0zNTMgcmVtYWluZGVyICAgNC4xICAgMiAgICAtPiAgMC4xDQotZGRyZW0zNTQgcmVtYWluZGVyICAgNC4wMSAgIDIgICAgLT4gIDAuMDENCi1kZHJlbTM1NSByZW1haW5kZXIgICA0LjAwMSAgIDIgICAgLT4gIDAuMDAxDQotZGRyZW0zNTYgcmVtYWluZGVyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxDQotZGRyZW0zNTcgcmVtYWluZGVyICAgNC4wMDAwMSAgIDIgICAgLT4gIDAuMDAwMDENCi1kZHJlbTM1OCByZW1haW5kZXIgICA0LjAwMDAwMSAgIDIgICAgLT4gIDAuMDAwMDAxDQotZGRyZW0zNTkgcmVtYWluZGVyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNw0KLQ0KLWRkcmVtMzYwIHJlbWFpbmRlciAgIDEuMiAgIDAuNzM0NSAtPiAgMC40NjU1DQotZGRyZW0zNjEgcmVtYWluZGVyICAgMC44ICAgMTIgICAgIC0+ICAwLjgNCi1kZHJlbTM2MiByZW1haW5kZXIgICAwLjggICAwLjIgICAgLT4gIDAuMA0KLWRkcmVtMzYzIHJlbWFpbmRlciAgIDAuOCAgIDAuMyAgICAtPiAgMC4yDQotZGRyZW0zNjQgcmVtYWluZGVyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMA0KLWRkcmVtMzY1IHJlbWFpbmRlciAgIDAuODAwICAgMS43ICAtPiAgMC44MDANCi1kZHJlbTM2NiByZW1haW5kZXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwDQotDQotZGRyZW0zNzEgcmVtYWluZGVyICAgMi40MDAgIDIgICAgICAgIC0+ICAwLjQwMA0KLQ0KLWRkcmVtMzgxIHJlbWFpbmRlciAxMjM0NSAgMSAgICAgICAgIC0+ICAwDQotZGRyZW0zODIgcmVtYWluZGVyIDEyMzQ1ICAxLjAwMDEgICAgLT4gIDAuNzY1Nw0KLWRkcmVtMzgzIHJlbWFpbmRlciAxMjM0NSAgMS4wMDEgICAgIC0+ICAwLjY2OA0KLWRkcmVtMzg0IHJlbWFpbmRlciAxMjM0NSAgMS4wMSAgICAgIC0+ICAwLjc4DQotZGRyZW0zODUgcmVtYWluZGVyIDEyMzQ1ICAxLjEgICAgICAgLT4gIDAuOA0KLWRkcmVtMzg2IHJlbWFpbmRlciAxMjM1NSAgNCAgICAgICAgIC0+ICAzDQotZGRyZW0zODcgcmVtYWluZGVyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDENCi1kZHJlbTM4OCByZW1haW5kZXIgMTIzNTUgIDQuMDAwMSAgICAtPiAgMi42OTEyDQotZGRyZW0zODkgcmVtYWluZGVyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNA0KLWRkcmVtMzkwIHJlbWFpbmRlciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkNCi1kZHJlbTM5MSByZW1haW5kZXIgMTIzNDUgIDQuOTkgICAgICAtPiAgNC43Mw0KLWRkcmVtMzkyIHJlbWFpbmRlciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQ0KLWRkcmVtMzkzIHJlbWFpbmRlciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkNCi1kZHJlbTM5NCByZW1haW5kZXIgMTIzNDUgIDUgICAgICAgICAtPiAgMA0KLWRkcmVtMzk1IHJlbWFpbmRlciAxMjM0NSAgNS4wMDAxICAgIC0+ICA0Ljc1MzINCi1kZHJlbTM5NiByZW1haW5kZXIgMTIzNDUgIDUuMDAxICAgICAtPiAgMi41MzINCi1kZHJlbTM5NyByZW1haW5kZXIgMTIzNDUgIDUuMDEgICAgICAtPiAgMC4zNg0KLWRkcmVtMzk4IHJlbWFpbmRlciAxMjM0NSAgNS4xICAgICAgIC0+ICAzLjANCi0NCi0tLSB0aGUgbmFzdHkgZGl2aXNpb24tYnktMSBjYXNlcw0KLWRkcmVtNDAxIHJlbWFpbmRlciAgIDAuNSAgICAgICAgIDEgICAtPiAgMC41DQotZGRyZW00MDIgcmVtYWluZGVyICAgMC41NSAgICAgICAgMSAgIC0+ICAwLjU1DQotZGRyZW00MDMgcmVtYWluZGVyICAgMC41NTUgICAgICAgMSAgIC0+ICAwLjU1NQ0KLWRkcmVtNDA0IHJlbWFpbmRlciAgIDAuNTU1NSAgICAgIDEgICAtPiAgMC41NTU1DQotZGRyZW00MDUgcmVtYWluZGVyICAgMC41NTU1NSAgICAgMSAgIC0+ICAwLjU1NTU1DQotZGRyZW00MDYgcmVtYWluZGVyICAgMC41NTU1NTUgICAgMSAgIC0+ICAwLjU1NTU1NQ0KLWRkcmVtNDA3IHJlbWFpbmRlciAgIDAuNTU1NTU1NSAgIDEgICAtPiAgMC41NTU1NTU1DQotZGRyZW00MDggcmVtYWluZGVyICAgMC41NTU1NTU1NSAgMSAgIC0+ICAwLjU1NTU1NTU1DQotZGRyZW00MDkgcmVtYWluZGVyICAgMC41NTU1NTU1NTUgMSAgIC0+ICAwLjU1NTU1NTU1NQ0KLQ0KLS0tIGZvbGRkb3ducw0KLWRkcmVtNDIxIHJlbWFpbmRlciAgIDFFKzM4NCAgICAgICAxICAtPiAgIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRyZW00MjIgcmVtYWluZGVyICAgMUUrMzg0ICAxRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQNCi1kZHJlbTQyMyByZW1haW5kZXIgICAxRSszODQgIDJFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZA0KLWRkcmVtNDI0IHJlbWFpbmRlciAgIDFFKzM4NCAgM0UrMzgzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkDQotZGRyZW00MjUgcmVtYWluZGVyICAgMUUrMzg0ICA0RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCi1kZHJlbTQyNiByZW1haW5kZXIgICAxRSszODQgIDVFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZA0KLWRkcmVtNDI3IHJlbWFpbmRlciAgIDFFKzM4NCAgNkUrMzgzICAtPiAgIDQuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkDQotZGRyZW00MjggcmVtYWluZGVyICAgMUUrMzg0ICA3RSszODMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCi1kZHJlbTQyOSByZW1haW5kZXIgICAxRSszODQgIDhFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KLWRkcmVtNDMwIHJlbWFpbmRlciAgIDFFKzM4NCAgOUUrMzgzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkDQotLS0gdGluaWVzDQotZGRyZW00MzEgcmVtYWluZGVyICAgMUUtMzk3ICAxRS0zOTggIC0+ICAgMEUtMzk4DQotZGRyZW00MzIgcmVtYWluZGVyICAgMUUtMzk3ICAyRS0zOTggIC0+ICAgMEUtMzk4DQotZGRyZW00MzMgcmVtYWluZGVyICAgMUUtMzk3ICAzRS0zOTggIC0+ICAgMUUtMzk4IFN1Ym5vcm1hbA0KLWRkcmVtNDM0IHJlbWFpbmRlciAgIDFFLTM5NyAgNEUtMzk4ICAtPiAgIDJFLTM5OCBTdWJub3JtYWwNCi1kZHJlbTQzNSByZW1haW5kZXIgICAxRS0zOTcgIDVFLTM5OCAgLT4gICAwRS0zOTgNCi1kZHJlbTQzNiByZW1haW5kZXIgICAxRS0zOTcgIDZFLTM5OCAgLT4gICA0RS0zOTggU3Vibm9ybWFsDQotZGRyZW00MzcgcmVtYWluZGVyICAgMUUtMzk3ICA3RS0zOTggIC0+ICAgM0UtMzk4IFN1Ym5vcm1hbA0KLWRkcmVtNDM4IHJlbWFpbmRlciAgIDFFLTM5NyAgOEUtMzk4ICAtPiAgIDJFLTM5OCBTdWJub3JtYWwNCi1kZHJlbTQzOSByZW1haW5kZXIgICAxRS0zOTcgIDlFLTM5OCAgLT4gICAxRS0zOTggU3Vibm9ybWFsDQotZGRyZW00NDAgcmVtYWluZGVyICAgMUUtMzk3IDEwRS0zOTggIC0+ICAgMEUtMzk4DQotZGRyZW00NDEgcmVtYWluZGVyICAgMUUtMzk3IDExRS0zOTggIC0+IDEuMEUtMzk3IFN1Ym5vcm1hbA0KLWRkcmVtNDQyIHJlbWFpbmRlciAxMDBFLTM5NyAxMUUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwNCi1kZHJlbTQ0MyByZW1haW5kZXIgMTAwRS0zOTcgMjBFLTM5OCAgLT4gICAwRS0zOTgNCi1kZHJlbTQ0NCByZW1haW5kZXIgMTAwRS0zOTcgMjFFLTM5OCAgLT4gMS4zRS0zOTcgU3Vibm9ybWFsDQotZGRyZW00NDUgcmVtYWluZGVyIDEwMEUtMzk3IDMwRS0zOTggIC0+IDEuMEUtMzk3IFN1Ym5vcm1hbA0KLQ0KLS0tIHplcm8gc2lnbnMNCi1kZHJlbTY1MCByZW1haW5kZXIgIDEgIDEgLT4gIDANCi1kZHJlbTY1MSByZW1haW5kZXIgLTEgIDEgLT4gLTANCi1kZHJlbTY1MiByZW1haW5kZXIgIDEgLTEgLT4gIDANCi1kZHJlbTY1MyByZW1haW5kZXIgLTEgLTEgLT4gLTANCi1kZHJlbTY1NCByZW1haW5kZXIgIDAgIDEgLT4gIDANCi1kZHJlbTY1NSByZW1haW5kZXIgLTAgIDEgLT4gLTANCi1kZHJlbTY1NiByZW1haW5kZXIgIDAgLTEgLT4gIDANCi1kZHJlbTY1NyByZW1haW5kZXIgLTAgLTEgLT4gLTANCi1kZHJlbTY1OCByZW1haW5kZXIgIDAuMDAgIDEgIC0+ICAwLjAwDQotZGRyZW02NTkgcmVtYWluZGVyIC0wLjAwICAxICAtPiAtMC4wMA0KLQ0KLS0tIFNwZWNpYWxzDQotZGRyZW02ODAgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW02ODEgcmVtYWluZGVyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW02ODIgcmVtYWluZGVyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW02ODMgcmVtYWluZGVyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW02ODQgcmVtYWluZGVyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW02ODUgcmVtYWluZGVyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW02ODYgcmVtYWluZGVyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW02ODcgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW02ODggcmVtYWluZGVyIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KLWRkcmVtNjg5IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNjkxIHJlbWFpbmRlciAtMSAgICAgSW5mICAgLT4gLTENCi1kZHJlbTY5MiByZW1haW5kZXIgIDAgICAgIEluZiAgIC0+ICAwDQotZGRyZW02OTMgcmVtYWluZGVyIC0wICAgICBJbmYgICAtPiAtMA0KLWRkcmVtNjk0IHJlbWFpbmRlciAgMSAgICAgSW5mICAgLT4gIDENCi1kZHJlbTY5NSByZW1haW5kZXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwDQotZGRyZW02OTYgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRyZW03MDAgcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03MDEgcmVtYWluZGVyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03MDIgcmVtYWluZGVyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03MDMgcmVtYWluZGVyIC1JbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03MDQgcmVtYWluZGVyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03MDUgcmVtYWluZGVyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03MDYgcmVtYWluZGVyIC1JbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03MDcgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03MDggcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03MDkgcmVtYWluZGVyIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KLWRkcmVtNzEwIHJlbWFpbmRlciAtMSAgICAtSW5mICAgLT4gLTENCi1kZHJlbTcxMSByZW1haW5kZXIgLTAgICAgLUluZiAgIC0+IC0wDQotZGRyZW03MTIgcmVtYWluZGVyICAwICAgIC1JbmYgICAtPiAgMA0KLWRkcmVtNzEzIHJlbWFpbmRlciAgMSAgICAtSW5mICAgLT4gIDENCi1kZHJlbTcxNCByZW1haW5kZXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwDQotZGRyZW03MTUgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRyZW03MjEgcmVtYWluZGVyICBOYU4gLUluZiAgICAtPiAgTmFODQotZGRyZW03MjIgcmVtYWluZGVyICBOYU4gLTEwMDAgICAtPiAgTmFODQotZGRyZW03MjMgcmVtYWluZGVyICBOYU4gLTEgICAgICAtPiAgTmFODQotZGRyZW03MjQgcmVtYWluZGVyICBOYU4gLTAgICAgICAtPiAgTmFODQotZGRyZW03MjUgcmVtYWluZGVyIC1OYU4gIDAgICAgICAtPiAtTmFODQotZGRyZW03MjYgcmVtYWluZGVyICBOYU4gIDEgICAgICAtPiAgTmFODQotZGRyZW03MjcgcmVtYWluZGVyICBOYU4gIDEwMDAgICAtPiAgTmFODQotZGRyZW03MjggcmVtYWluZGVyICBOYU4gIEluZiAgICAtPiAgTmFODQotZGRyZW03MjkgcmVtYWluZGVyICBOYU4gLU5hTiAgICAtPiAgTmFODQotZGRyZW03MzAgcmVtYWluZGVyIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZGRyZW03MzEgcmVtYWluZGVyIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZGRyZW03MzIgcmVtYWluZGVyIC0xICAgIE5hTiAgICAtPiAgTmFODQotZGRyZW03MzMgcmVtYWluZGVyIC0wICAgLU5hTiAgICAtPiAtTmFODQotZGRyZW03MzQgcmVtYWluZGVyICAwICAgIE5hTiAgICAtPiAgTmFODQotZGRyZW03MzUgcmVtYWluZGVyICAxICAgLU5hTiAgICAtPiAtTmFODQotZGRyZW03MzYgcmVtYWluZGVyICAxMDAwIE5hTiAgICAtPiAgTmFODQotZGRyZW03MzcgcmVtYWluZGVyICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZGRyZW03NDEgcmVtYWluZGVyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzQyIHJlbWFpbmRlciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc0MyByZW1haW5kZXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NDQgcmVtYWluZGVyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzQ1IHJlbWFpbmRlciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc0NiByZW1haW5kZXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NDcgcmVtYWluZGVyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzQ5IHJlbWFpbmRlciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc1MCByZW1haW5kZXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NTEgcmVtYWluZGVyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzUyIHJlbWFpbmRlciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc1MyByZW1haW5kZXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NTQgcmVtYWluZGVyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzU1IHJlbWFpbmRlciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc1NiByZW1haW5kZXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NTcgcmVtYWluZGVyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzU4IHJlbWFpbmRlciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc1OSByZW1haW5kZXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnaW5nIE5hTnMNCi1kZHJlbTc2MCByZW1haW5kZXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjENCi1kZHJlbTc2MSByZW1haW5kZXIgc05hTjIgICBOYU44ICAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc2MiByZW1haW5kZXIgIE5hTjMgIHNOYU45ICAgLT4gIE5hTjkgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc2MyByZW1haW5kZXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc2NCByZW1haW5kZXIgICAgMTUgICBOYU4xMSAgLT4gIE5hTjExDQotZGRyZW03NjUgcmVtYWluZGVyICBOYU42ICAgTmFOMTIgIC0+ICBOYU42DQotZGRyZW03NjYgcmVtYWluZGVyICBJbmYgICAgTmFOMTMgIC0+ICBOYU4xMw0KLWRkcmVtNzY3IHJlbWFpbmRlciAgTmFOMTQgIC1JbmYgICAtPiAgTmFOMTQNCi1kZHJlbTc2OCByZW1haW5kZXIgICAgMCAgICBOYU4xNSAgLT4gIE5hTjE1DQotZGRyZW03NjkgcmVtYWluZGVyICBOYU4xNiAgIC0wICAgIC0+ICBOYU4xNg0KLQ0KLS0tIGVkZ2UgY2FzZXMgb2YgaW1wb3NzaWJsZQ0KLWRkcmVtNzcwICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEwICAgIC0+ICA2DQotZGRyZW03NzEgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDANCi1kZHJlbTc3MiAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZHJlbTc3MyAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi0NCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzDQotZGRyZW04MDEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwDQotZGRyZW04MDIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxDQotZGRyZW04MDMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwDQotZGRyZW04MDQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxDQotZGRyZW04MDUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwDQotZGRyZW04MDYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxDQotZGRyZW04MDcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxDQotZGRyZW04MDggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQotZGRyZW04MDkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxDQotZGRyZW04MTAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxDQotZGRyZW04MTEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2DQotZGRyZW04MTIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQotDQotZGRyZW04MjEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwDQotZGRyZW04MjIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxDQotZGRyZW04MjMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwDQotZGRyZW04MjQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxDQotZGRyZW04MjUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwDQotZGRyZW04MjYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxDQotZGRyZW04MjcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxDQotZGRyZW04MjggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQotZGRyZW04MjkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxDQotZGRyZW04MzAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxDQotZGRyZW04MzEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2DQotZGRyZW04MzIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQotDQotLS0gZnJvbSBkaXZpZGVpbnQNCi1kZHJlbTg0MCByZW1haW5kZXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMA0KLWRkcmVtODQxIHJlbWFpbmRlciAgMTAwMDAwMDAwLjQgICAxICAtPiAgMC40DQotZGRyZW04NDIgcmVtYWluZGVyICAxMDAwMDAwMDAuNSAgIDEgIC0+ICAwLjUNCi1kZHJlbTg0MyByZW1haW5kZXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gIDAuOQ0KLWRkcmVtODQ0IHJlbWFpbmRlciAgMTAwMDAwMDAwLjk5OSAxICAtPiAgMC45OTkNCi1kZHJlbTg1MCByZW1haW5kZXIgIDEwMDAwMDAwMyAgICAgNSAgLT4gIDMNCi1kZHJlbTg1MSByZW1haW5kZXIgIDEwMDAwMDAzICAgICAgNSAgLT4gIDMNCi1kZHJlbTg1MiByZW1haW5kZXIgIDEwMDAwMDMgICAgICAgNSAgLT4gIDMNCi1kZHJlbTg1MyByZW1haW5kZXIgIDEwMDAwMyAgICAgICAgNSAgLT4gIDMNCi1kZHJlbTg1NCByZW1haW5kZXIgIDEwMDAzICAgICAgICAgNSAgLT4gIDMNCi1kZHJlbTg1NSByZW1haW5kZXIgIDEwMDMgICAgICAgICAgNSAgLT4gIDMNCi1kZHJlbTg1NiByZW1haW5kZXIgIDEwMyAgICAgICAgICAgNSAgLT4gIDMNCi1kZHJlbTg1NyByZW1haW5kZXIgIDEzICAgICAgICAgICAgNSAgLT4gIDMNCi1kZHJlbTg1OCByZW1haW5kZXIgIDEgICAgICAgICAgICAgNSAgLT4gIDENCi0NCi0tLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkcmVtODYwIHJlbWFpbmRlciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kZHJlbTg2MSByZW1haW5kZXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZGRyZW04NjIgcmVtYWluZGVyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRkcmVtODYzIHJlbWFpbmRlciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kZHJlbTg2NCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZGRyZW04NzAgcmVtYWluZGVyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODcxIHJlbWFpbmRlciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg3MiByZW1haW5kZXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04NzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODc0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg3NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04NzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODc3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg3OCByZW1haW5kZXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04NzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODgwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg4MSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwDQotZGRyZW04ODIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMA0KLWRkcmVtODgzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzANCi1kZHJlbTg4NCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwDQotZGRyZW04ODUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMA0KLWRkcmVtODg2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDANCi0NCi1kZHJlbTg5MCByZW1haW5kZXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04OTEgcmVtYWluZGVyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODkyIHJlbWFpbmRlciAxMjNlMSAgICAgIDIwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg5MyByZW1haW5kZXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04OTQgcmVtYWluZGVyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODk1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDIwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg5NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04OTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODk5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDIwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkwMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwDQotZGRyZW05MDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTAyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDIwMDAwIC0+IDEyMzANCi1kZHJlbTkwMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAxMjMwDQotZGRyZW05MDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMA0KLWRkcmVtOTA1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDIwIC0+ICAgMTANCi1kZHJlbTkwNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwDQotDQotZGRyZW05MTAgcmVtYWluZGVyIDEyM2UxICAgIDUwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTExIHJlbWFpbmRlciAxMjNlMSAgICAgNTAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkxMiByZW1haW5kZXIgMTIzZTEgICAgICA1MDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDUwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTE0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgNTAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkxNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA1MDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDUwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTE3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgNTAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkxOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA1MDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MjAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDUwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTIxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgNTAwMDAwIC0+IDEyMzANCi1kZHJlbTkyMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA1MDAwMCAtPiAxMjMwDQotZGRyZW05MjMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDUwMDAgLT4gMTIzMA0KLWRkcmVtOTI0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgNTAwIC0+ICAyMzANCi1kZHJlbTkyNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA1MCAtPiAgIDMwDQotZGRyZW05MjYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDUgLT4gICAgMA0KLQ0KLWRkcmVtOTMwIHJlbWFpbmRlciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkzMSByZW1haW5kZXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MzIgcmVtYWluZGVyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTMzIHJlbWFpbmRlciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkzNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTM2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkzNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTQwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzANCi1kZHJlbTk0MSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwDQotZGRyZW05NDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMA0KLWRkcmVtOTQzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzANCi1kZHJlbTk0NCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwDQotZGRyZW05NDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gICA2MA0KLWRkcmVtOTQ2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgIDYNCi0NCi1kZHJlbTk1MCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTk2MSByZW1haW5kZXIgMTIzZTEgICAyOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJlbTk2MiByZW1haW5kZXIgMTIzZTEgICAzOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJlbTk2MyByZW1haW5kZXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJlbTk2NCByZW1haW5kZXIgMTIzZTEgICA1OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJlbTk2NSByZW1haW5kZXIgMTIzZTEgICA2OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJlbTk2NiByZW1haW5kZXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJlbTk2NyByZW1haW5kZXIgMTIzZTEgICA4OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJlbTk2OCByZW1haW5kZXIgMTIzZTEgICA5OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJlbTk2OSByZW1haW5kZXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzANCi0NCi1kZHJlbTk4MCByZW1haW5kZXIgMTIzZTEgMTAwMEUyOTkgLT4gMS4yM0UrMyAgLS0gMTIzRSsxIGludGVybmFsbHkNCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0NCi1kZHJlbTEwNTEgcmVtYWluZGVyICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZHJlbTEwNTIgcmVtYWluZGVyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZHJlbTEwNTMgcmVtYWluZGVyIC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZHJlbTEwNTQgcmVtYWluZGVyIC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZHJlbTEwNTUgcmVtYWluZGVyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3DQotZGRyZW0xMDU2IHJlbWFpbmRlciAgMWUtMjc3IC0xZSszMTEgLT4gIDFFLTI3Nw0KLWRkcmVtMTA1NyByZW1haW5kZXIgLTFlLTI3NyAgMWUrMzExIC0+IC0xRS0yNzcNCi1kZHJlbTEwNTggcmVtYWluZGVyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3DQotDQotLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QNCi1kZHJlbTExMDEgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAxLjAwMDAwMDAwMDAwMDAwMSAgLT4gIDAuNzY1NDMyMTA5ODc2NTQ2DQotZGRyZW0xMTAyIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEuMDAwMDAwMDAwMDAwMDEgIC0+ICAgMC42NTQzMjEwOTg3NjU1Nw0KLWRkcmVtMTEwMyByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAgMS4wMDAwMDAwMDAwMDAxICAtPiAgICAwLjU0MzIxMDk4NzY2NjgNCi1kZHJlbTExMDQgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU1ICA0LjAwMDAwMDAwMDAwMDAwMSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM3DQotZGRyZW0xMTA1IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAzLjY5MTM1ODAyNzQ2OTEzNw0KLWRkcmVtMTEwNiByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAgNC45OTk5OTk5OTk5OTk5ICAtPiAgICAwLjY5MTM1NzgwMjQ2OTYNCi1kZHJlbTExMDcgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgNC45OTk5OTk5OTk5OTk5OSAgLT4gICAzLjQ2OTEzNTc4MDI0NjkxDQotZGRyZW0xMTA4IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC45OTk5OTk5OTk5OTk5OTkgIC0+ICAxLjI0NjkxMzU3ODAyNDY5MQ0KLWRkcmVtMTEwOSByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDUuMDAwMDAwMDAwMDAwMDAxICAtPiAgMC43NTMwODY0MjE5NzUzMDkNCi1kZHJlbTExMTAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgNS4wMDAwMDAwMDAwMDAwMSAgLT4gICAzLjUzMDg2NDIxOTc1MzEwDQotZGRyZW0xMTExIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA1LjAwMDAwMDAwMDAwMDEgIC0+ICAgIDEuMzA4NjQyMTk3NTMxNA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZHJlbTEwMDAgcmVtYWluZGVyIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTAwMSByZW1haW5kZXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFJlbWFpbmRlci5kZWNUZXN0IC0tIGRlY0RvdWJsZSByZW1haW5kZXIgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK2RkcmVtMDAxIHJlbWFpbmRlciAgMSAgICAgMSAgICAtPiAgMAorZGRyZW0wMDIgcmVtYWluZGVyICAyICAgICAxICAgIC0+ICAwCitkZHJlbTAwMyByZW1haW5kZXIgIDEgICAgIDIgICAgLT4gIDEKK2RkcmVtMDA0IHJlbWFpbmRlciAgMiAgICAgMiAgICAtPiAgMAorZGRyZW0wMDUgcmVtYWluZGVyICAwICAgICAxICAgIC0+ICAwCitkZHJlbTAwNiByZW1haW5kZXIgIDAgICAgIDIgICAgLT4gIDAKK2RkcmVtMDA3IHJlbWFpbmRlciAgMSAgICAgMyAgICAtPiAgMQorZGRyZW0wMDggcmVtYWluZGVyICAyICAgICAzICAgIC0+ICAyCitkZHJlbTAwOSByZW1haW5kZXIgIDMgICAgIDMgICAgLT4gIDAKKworZGRyZW0wMTAgcmVtYWluZGVyICAyLjQgICAxICAgIC0+ICAwLjQKK2RkcmVtMDExIHJlbWFpbmRlciAgMi40ICAgLTEgICAtPiAgMC40CitkZHJlbTAxMiByZW1haW5kZXIgIC0yLjQgIDEgICAgLT4gIC0wLjQKK2RkcmVtMDEzIHJlbWFpbmRlciAgLTIuNCAgLTEgICAtPiAgLTAuNAorZGRyZW0wMTQgcmVtYWluZGVyICAyLjQwICAxICAgIC0+ICAwLjQwCitkZHJlbTAxNSByZW1haW5kZXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwCitkZHJlbTAxNiByZW1haW5kZXIgIDIuNCAgIDIgICAgLT4gIDAuNAorZGRyZW0wMTcgcmVtYWluZGVyICAyLjQwMCAyICAgIC0+ICAwLjQwMAorZGRyZW0wMTggcmVtYWluZGVyICAyLiAgICAyICAgIC0+ICAwCitkZHJlbTAxOSByZW1haW5kZXIgIDIwICAgIDIwICAgLT4gIDAKKworZGRyZW0wMjAgcmVtYWluZGVyICAxODcgICAxODcgICAgLT4gIDAKK2RkcmVtMDIxIHJlbWFpbmRlciAgNSAgICAgMiAgICAgIC0+ICAxCitkZHJlbTAyMiByZW1haW5kZXIgIDUgICAgIDIuMCAgICAtPiAgMS4wCitkZHJlbTAyMyByZW1haW5kZXIgIDUgICAgIDIuMDAwICAtPiAgMS4wMDAKK2RkcmVtMDI0IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorZGRyZW0wMjUgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCisKK2RkcmVtMDMwIHJlbWFpbmRlciAgMSAgICAgMiAgICAgIC0+ICAxCitkZHJlbTAzMSByZW1haW5kZXIgIDEgICAgIDQgICAgICAtPiAgMQorZGRyZW0wMzIgcmVtYWluZGVyICAxICAgICA4ICAgICAgLT4gIDEKKworZGRyZW0wMzMgcmVtYWluZGVyICAxICAgICAxNiAgICAgLT4gIDEKK2RkcmVtMDM0IHJlbWFpbmRlciAgMSAgICAgMzIgICAgIC0+ICAxCitkZHJlbTAzNSByZW1haW5kZXIgIDEgICAgIDY0ICAgICAtPiAgMQorZGRyZW0wNDAgcmVtYWluZGVyICAxICAgIC0yICAgICAgLT4gIDEKK2RkcmVtMDQxIHJlbWFpbmRlciAgMSAgICAtNCAgICAgIC0+ICAxCitkZHJlbTA0MiByZW1haW5kZXIgIDEgICAgLTggICAgICAtPiAgMQorZGRyZW0wNDMgcmVtYWluZGVyICAxICAgIC0xNiAgICAgLT4gIDEKK2RkcmVtMDQ0IHJlbWFpbmRlciAgMSAgICAtMzIgICAgIC0+ICAxCitkZHJlbTA0NSByZW1haW5kZXIgIDEgICAgLTY0ICAgICAtPiAgMQorZGRyZW0wNTAgcmVtYWluZGVyIC0xICAgICAyICAgICAgLT4gIC0xCitkZHJlbTA1MSByZW1haW5kZXIgLTEgICAgIDQgICAgICAtPiAgLTEKK2RkcmVtMDUyIHJlbWFpbmRlciAtMSAgICAgOCAgICAgIC0+ICAtMQorZGRyZW0wNTMgcmVtYWluZGVyIC0xICAgICAxNiAgICAgLT4gIC0xCitkZHJlbTA1NCByZW1haW5kZXIgLTEgICAgIDMyICAgICAtPiAgLTEKK2RkcmVtMDU1IHJlbWFpbmRlciAtMSAgICAgNjQgICAgIC0+ICAtMQorZGRyZW0wNjAgcmVtYWluZGVyIC0xICAgIC0yICAgICAgLT4gIC0xCitkZHJlbTA2MSByZW1haW5kZXIgLTEgICAgLTQgICAgICAtPiAgLTEKK2RkcmVtMDYyIHJlbWFpbmRlciAtMSAgICAtOCAgICAgIC0+ICAtMQorZGRyZW0wNjMgcmVtYWluZGVyIC0xICAgIC0xNiAgICAgLT4gIC0xCitkZHJlbTA2NCByZW1haW5kZXIgLTEgICAgLTMyICAgICAtPiAgLTEKK2RkcmVtMDY1IHJlbWFpbmRlciAtMSAgICAtNjQgICAgIC0+ICAtMQorCitkZHJlbTA2NiByZW1haW5kZXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMAorZGRyZW0wNjcgcmVtYWluZGVyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNAorZGRyZW0wNjggcmVtYWluZGVyICA5OTk5OTk5OTkuNSAgIDEgIC0+IDAuNQorZGRyZW0wNjkgcmVtYWluZGVyICA5OTk5OTk5OTkuOSAgIDEgIC0+IDAuOQorZGRyZW0wNzAgcmVtYWluZGVyICA5OTk5OTk5OTkuOTk5IDEgIC0+IDAuOTk5CitkZHJlbTA3MSByZW1haW5kZXIgIDk5OTk5OS45OTk5OTkgMSAgLT4gMC45OTk5OTkKK2RkcmVtMDcyIHJlbWFpbmRlciAgOSAgICAgICAgICAgICAxICAtPiAwCitkZHJlbTA3MyByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMAorZGRyZW0wNzQgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IDEKK2RkcmVtMDc1IHJlbWFpbmRlciAgOTk5OTk5OTk5OTk5OTk5OSAzICAtPiAwCitkZHJlbTA3NiByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgNCAgLT4gMworCitkZHJlbTA4MCByZW1haW5kZXIgIDAuICAgICAgICAgICAgMSAgLT4gMAorZGRyZW0wODEgcmVtYWluZGVyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMAorZGRyZW0wODIgcmVtYWluZGVyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDAKK2RkcmVtMDgzIHJlbWFpbmRlciAgMC4wMEUrOSAgICAgICAxICAtPiAwCitkZHJlbTA4NCByZW1haW5kZXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMAorZGRyZW0wODUgcmVtYWluZGVyICAwLjAwRSsyICAgICAgIDEgIC0+IDAKK2RkcmVtMDg2IHJlbWFpbmRlciAgMC4wMEUrMSAgICAgICAxICAtPiAwLjAKK2RkcmVtMDg3IHJlbWFpbmRlciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwCitkZHJlbTA4OCByZW1haW5kZXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMAorZGRyZW0wODkgcmVtYWluZGVyICAwLjAwRS0xICAgICAgIDEgIC0+IDAuMDAwCitkZHJlbTA5MCByZW1haW5kZXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwCitkZHJlbTA5MSByZW1haW5kZXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMAorZGRyZW0wOTIgcmVtYWluZGVyICAwLjAwRS00ICAgICAgIDEgIC0+IDAuMDAwMDAwCitkZHJlbTA5MyByZW1haW5kZXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNworZGRyZW0wOTQgcmVtYWluZGVyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgKK2RkcmVtMDk1IHJlbWFpbmRlciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NAorCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwCitkZHJlbTEwMSByZW1haW5kZXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMTAyIHJlbWFpbmRlciAgMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0xMDMgcmVtYWluZGVyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJlbTEwNCByZW1haW5kZXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMTA1IHJlbWFpbmRlciAgMC4wRTUgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0xMDYgcmVtYWluZGVyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCistLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQKKy0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yCistLSByZW1haW5kZXItbmVhciwgYW55d2F5XQorZGRyZW0xMDcgcmVtYWluZGVyICAwLjAwMDEgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTA4IHJlbWFpbmRlciAgMC4wMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEwOSByZW1haW5kZXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTAgcmVtYWluZGVyICAxICAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTExIHJlbWFpbmRlciAgMSAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTExMiByZW1haW5kZXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTMgcmVtYWluZGVyIDFFKzEwMCAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTE0IHJlbWFpbmRlciAxRSszODAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTExNSByZW1haW5kZXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTYgcmVtYWluZGVyICAwLjAxICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTE5IHJlbWFpbmRlciAgMC4xICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEyMCByZW1haW5kZXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMjEgcmVtYWluZGVyICAxICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTIyIHJlbWFpbmRlciAxMCAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEyMyByZW1haW5kZXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMjQgcmVtYWluZGVyIDFFKzM4NCAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB6ZXJvcyBvbiBsZWZ0CitkZHJlbTEzMCByZW1haW5kZXIgIDAgICAgICAxICAgLT4gIDAKK2RkcmVtMTMxIHJlbWFpbmRlciAgMCAgICAgLTEgICAtPiAgMAorZGRyZW0xMzIgcmVtYWluZGVyICAwLjAgICAgMSAgIC0+ICAwLjAKK2RkcmVtMTMzIHJlbWFpbmRlciAgMC4wICAgLTEgICAtPiAgMC4wCitkZHJlbTEzNCByZW1haW5kZXIgLTAgICAgICAxICAgLT4gLTAKK2RkcmVtMTM1IHJlbWFpbmRlciAtMCAgICAgLTEgICAtPiAtMAorZGRyZW0xMzYgcmVtYWluZGVyIC0wLjAgICAgMSAgIC0+IC0wLjAKK2RkcmVtMTM3IHJlbWFpbmRlciAtMC4wICAgLTEgICAtPiAtMC4wCisKKy0tIDAuNWVycworZGRyZW0xNDMgcmVtYWluZGVyICAgMC41ICAyICAgICAtPiAgMC41CitkZHJlbTE0NCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK2RkcmVtMTQ1IHJlbWFpbmRlciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK2RkcmVtMTQ2IHJlbWFpbmRlciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkZHJlbTE0NyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCitkZHJlbTE0OCByZW1haW5kZXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCitkZHJlbTE0OSByZW1haW5kZXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCistLSBzdGVhZGllcworZGRyZW0xNTAgcmVtYWluZGVyICAxICAxICAgLT4gMAorZGRyZW0xNTEgcmVtYWluZGVyICAxICAyICAgLT4gMQorZGRyZW0xNTIgcmVtYWluZGVyICAxICAzICAgLT4gMQorZGRyZW0xNTMgcmVtYWluZGVyICAxICA0ICAgLT4gMQorZGRyZW0xNTQgcmVtYWluZGVyICAxICA1ICAgLT4gMQorZGRyZW0xNTUgcmVtYWluZGVyICAxICA2ICAgLT4gMQorZGRyZW0xNTYgcmVtYWluZGVyICAxICA3ICAgLT4gMQorZGRyZW0xNTcgcmVtYWluZGVyICAxICA4ICAgLT4gMQorZGRyZW0xNTggcmVtYWluZGVyICAxICA5ICAgLT4gMQorZGRyZW0xNTkgcmVtYWluZGVyICAxICAxMCAgLT4gMQorZGRyZW0xNjAgcmVtYWluZGVyICAxICAxICAgLT4gMAorZGRyZW0xNjEgcmVtYWluZGVyICAyICAxICAgLT4gMAorZGRyZW0xNjIgcmVtYWluZGVyICAzICAxICAgLT4gMAorZGRyZW0xNjMgcmVtYWluZGVyICA0ICAxICAgLT4gMAorZGRyZW0xNjQgcmVtYWluZGVyICA1ICAxICAgLT4gMAorZGRyZW0xNjUgcmVtYWluZGVyICA2ICAxICAgLT4gMAorZGRyZW0xNjYgcmVtYWluZGVyICA3ICAxICAgLT4gMAorZGRyZW0xNjcgcmVtYWluZGVyICA4ICAxICAgLT4gMAorZGRyZW0xNjggcmVtYWluZGVyICA5ICAxICAgLT4gMAorZGRyZW0xNjkgcmVtYWluZGVyICAxMCAxICAgLT4gMAorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcgorZGRyZW0xNzEgcmVtYWluZGVyICAgMC40ICAxLjAyMCAtPiAgMC40MDAKK2RkcmVtMTcyIHJlbWFpbmRlciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwCitkZHJlbTE3MyByZW1haW5kZXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMAorZGRyZW0xNzQgcmVtYWluZGVyICAgMC41MiAxLjAyMCAtPiAgMC41MjAKK2RkcmVtMTc1IHJlbWFpbmRlciAgIDAuNiAgMS4wMjAgLT4gIDAuNjAwCisKKy0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDAKK2RkcmVtMjAxIHJlbWFpbmRlciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJlbTIwMiByZW1haW5kZXIgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0yMDMgcmVtYWluZGVyICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMjA0IHJlbWFpbmRlciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjA1IHJlbWFpbmRlciAgMC4wMSAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjA2IHJlbWFpbmRlciAgMC4xICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjA3IHJlbWFpbmRlciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjA4IHJlbWFpbmRlciAgMSAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjA5IHJlbWFpbmRlciAxMCAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjEwIHJlbWFpbmRlciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjExIHJlbWFpbmRlciAxRSszODAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXIKK2RkcmVtMjMxIHJlbWFpbmRlciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwCitkZHJlbTIzMiByZW1haW5kZXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMAorZGRyZW0yMzMgcmVtYWluZGVyICAtMC41MSAxLjAyMCAtPiAtMC41MTAKK2RkcmVtMjM0IHJlbWFpbmRlciAgLTAuNTIgMS4wMjAgLT4gLTAuNTIwCitkZHJlbTIzNSByZW1haW5kZXIgIC0wLjYgIDEuMDIwIC0+IC0wLjYwMAorCistLSBoaWdoIFhzCitkZHJlbTI0MCByZW1haW5kZXIgIDFFKzIgIDEuMDAgIC0+ICAwLjAwCisKKy0tIGRkcmVtM3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsCitkZHJlbTMwMSByZW1haW5kZXIgICAxICAgIDMgICAgIC0+ICAxCitkZHJlbTMwMiByZW1haW5kZXIgICA1ICAgIDUgICAgIC0+ICAwCitkZHJlbTMwMyByZW1haW5kZXIgICAxMyAgIDEwICAgIC0+ICAzCitkZHJlbTMwNCByZW1haW5kZXIgICAxMyAgIDUwICAgIC0+ICAxMworZGRyZW0zMDUgcmVtYWluZGVyICAgMTMgICAxMDAgICAtPiAgMTMKK2RkcmVtMzA2IHJlbWFpbmRlciAgIDEzICAgMTAwMCAgLT4gIDEzCitkZHJlbTMwNyByZW1haW5kZXIgICAuMTMgICAgMSAgIC0+ICAwLjEzCitkZHJlbTMwOCByZW1haW5kZXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMworZGRyZW0zMDkgcmVtYWluZGVyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzCitkZHJlbTMxMCByZW1haW5kZXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMworZGRyZW0zMTEgcmVtYWluZGVyICAgMTAuMzMgIDEgICAtPiAgMC4zMworZGRyZW0zMTIgcmVtYWluZGVyICAgMTAuMzMgMTAgICAtPiAgMC4zMworZGRyZW0zMTMgcmVtYWluZGVyICAgMTAzLjMgIDEgICAtPiAgMC4zCitkZHJlbTMxNCByZW1haW5kZXIgICAxMzMgICAxMCAgIC0+ICAzCitkZHJlbTMxNSByZW1haW5kZXIgICAxMDMzICAxMCAgIC0+ICAzCitkZHJlbTMxNiByZW1haW5kZXIgICAxMDMzICA1MCAgIC0+ICAzMworZGRyZW0zMTcgcmVtYWluZGVyICAgMTAxLjAgIDMgICAtPiAgMi4wCitkZHJlbTMxOCByZW1haW5kZXIgICAxMDIuMCAgMyAgIC0+ICAwLjAKK2RkcmVtMzE5IHJlbWFpbmRlciAgIDEwMy4wICAzICAgLT4gIDEuMAorZGRyZW0zMjAgcmVtYWluZGVyICAgMi40MCAgIDEgICAtPiAgMC40MAorZGRyZW0zMjEgcmVtYWluZGVyICAgMi40MDAgIDEgICAtPiAgMC40MDAKK2RkcmVtMzIyIHJlbWFpbmRlciAgIDIuNCAgICAxICAgLT4gIDAuNAorZGRyZW0zMjMgcmVtYWluZGVyICAgMi40ICAgIDIgICAtPiAgMC40CitkZHJlbTMyNCByZW1haW5kZXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMAorZGRyZW0zMjUgcmVtYWluZGVyICAgMSAgIDAuMyAgICAtPiAgMC4xCitkZHJlbTMyNiByZW1haW5kZXIgICAxICAgMC4zMCAgIC0+ICAwLjEwCitkZHJlbTMyNyByZW1haW5kZXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMAorZGRyZW0zMjggcmVtYWluZGVyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwCitkZHJlbTMyOSByZW1haW5kZXIgICAxLjAgICAgMC4zIC0+ICAwLjEKK2RkcmVtMzMwIHJlbWFpbmRlciAgIDEuMDAgICAwLjMgLT4gIDAuMTAKK2RkcmVtMzMxIHJlbWFpbmRlciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwCitkZHJlbTMzMiByZW1haW5kZXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDAKK2RkcmVtMzMzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZGRyZW0zMzQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41CitkZHJlbTMzNSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitkZHJlbTMzNiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZGRyZW0zMzcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MAorZGRyZW0zMzggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MAorZGRyZW0zMzkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworZGRyZW0zNDAgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAwLjUwMDAwMDAKK2RkcmVtMzQxIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAKK2RkcmVtMzQyIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMAorZGRyZW0zNDMgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDAKK2RkcmVtMzQ0IHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwMDAKK2RkcmVtMzQ1IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNworZGRyZW0zNDYgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OSAgICAtPiAgMUUtOAorZGRyZW0zNDcgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkKK2RkcmVtMzQ4IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTAKK2RkcmVtMzQ5IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OTkgICAgLT4gIDFFLTExCitkZHJlbTM1MCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTIKKworZGRyZW0zNTEgcmVtYWluZGVyICAgMC4wMyAgNyAgLT4gIDAuMDMKK2RkcmVtMzUyIHJlbWFpbmRlciAgIDUgICAyICAgIC0+ICAxCitkZHJlbTM1MyByZW1haW5kZXIgICA0LjEgICAyICAgIC0+ICAwLjEKK2RkcmVtMzU0IHJlbWFpbmRlciAgIDQuMDEgICAyICAgIC0+ICAwLjAxCitkZHJlbTM1NSByZW1haW5kZXIgICA0LjAwMSAgIDIgICAgLT4gIDAuMDAxCitkZHJlbTM1NiByZW1haW5kZXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDEKK2RkcmVtMzU3IHJlbWFpbmRlciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxCitkZHJlbTM1OCByZW1haW5kZXIgICA0LjAwMDAwMSAgIDIgICAgLT4gIDAuMDAwMDAxCitkZHJlbTM1OSByZW1haW5kZXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03CisKK2RkcmVtMzYwIHJlbWFpbmRlciAgIDEuMiAgIDAuNzM0NSAtPiAgMC40NjU1CitkZHJlbTM2MSByZW1haW5kZXIgICAwLjggICAxMiAgICAgLT4gIDAuOAorZGRyZW0zNjIgcmVtYWluZGVyICAgMC44ICAgMC4yICAgIC0+ICAwLjAKK2RkcmVtMzYzIHJlbWFpbmRlciAgIDAuOCAgIDAuMyAgICAtPiAgMC4yCitkZHJlbTM2NCByZW1haW5kZXIgICAwLjgwMCAgIDEyICAgLT4gIDAuODAwCitkZHJlbTM2NSByZW1haW5kZXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwCitkZHJlbTM2NiByZW1haW5kZXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwCisKK2RkcmVtMzcxIHJlbWFpbmRlciAgIDIuNDAwICAyICAgICAgICAtPiAgMC40MDAKKworZGRyZW0zODEgcmVtYWluZGVyIDEyMzQ1ICAxICAgICAgICAgLT4gIDAKK2RkcmVtMzgyIHJlbWFpbmRlciAxMjM0NSAgMS4wMDAxICAgIC0+ICAwLjc2NTcKK2RkcmVtMzgzIHJlbWFpbmRlciAxMjM0NSAgMS4wMDEgICAgIC0+ICAwLjY2OAorZGRyZW0zODQgcmVtYWluZGVyIDEyMzQ1ICAxLjAxICAgICAgLT4gIDAuNzgKK2RkcmVtMzg1IHJlbWFpbmRlciAxMjM0NSAgMS4xICAgICAgIC0+ICAwLjgKK2RkcmVtMzg2IHJlbWFpbmRlciAxMjM1NSAgNCAgICAgICAgIC0+ICAzCitkZHJlbTM4NyByZW1haW5kZXIgMTIzNDUgIDQgICAgICAgICAtPiAgMQorZGRyZW0zODggcmVtYWluZGVyIDEyMzU1ICA0LjAwMDEgICAgLT4gIDIuNjkxMgorZGRyZW0zODkgcmVtYWluZGVyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNAorZGRyZW0zOTAgcmVtYWluZGVyIDEyMzQ1ICA0LjkgICAgICAgLT4gIDEuOQorZGRyZW0zOTEgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDQuNzMKK2RkcmVtMzkyIHJlbWFpbmRlciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQorZGRyZW0zOTMgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDAuMjQ2OQorZGRyZW0zOTQgcmVtYWluZGVyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDAKK2RkcmVtMzk1IHJlbWFpbmRlciAxMjM0NSAgNS4wMDAxICAgIC0+ICA0Ljc1MzIKK2RkcmVtMzk2IHJlbWFpbmRlciAxMjM0NSAgNS4wMDEgICAgIC0+ICAyLjUzMgorZGRyZW0zOTcgcmVtYWluZGVyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYKK2RkcmVtMzk4IHJlbWFpbmRlciAxMjM0NSAgNS4xICAgICAgIC0+ICAzLjAKKworLS0gdGhlIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMKK2RkcmVtNDAxIHJlbWFpbmRlciAgIDAuNSAgICAgICAgIDEgICAtPiAgMC41CitkZHJlbTQwMiByZW1haW5kZXIgICAwLjU1ICAgICAgICAxICAgLT4gIDAuNTUKK2RkcmVtNDAzIHJlbWFpbmRlciAgIDAuNTU1ICAgICAgIDEgICAtPiAgMC41NTUKK2RkcmVtNDA0IHJlbWFpbmRlciAgIDAuNTU1NSAgICAgIDEgICAtPiAgMC41NTU1CitkZHJlbTQwNSByZW1haW5kZXIgICAwLjU1NTU1ICAgICAxICAgLT4gIDAuNTU1NTUKK2RkcmVtNDA2IHJlbWFpbmRlciAgIDAuNTU1NTU1ICAgIDEgICAtPiAgMC41NTU1NTUKK2RkcmVtNDA3IHJlbWFpbmRlciAgIDAuNTU1NTU1NSAgIDEgICAtPiAgMC41NTU1NTU1CitkZHJlbTQwOCByZW1haW5kZXIgICAwLjU1NTU1NTU1ICAxICAgLT4gIDAuNTU1NTU1NTUKK2RkcmVtNDA5IHJlbWFpbmRlciAgIDAuNTU1NTU1NTU1IDEgICAtPiAgMC41NTU1NTU1NTUKKworLS0gZm9sZGRvd25zCitkZHJlbTQyMSByZW1haW5kZXIgICAxRSszODQgICAgICAgMSAgLT4gICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRyZW00MjIgcmVtYWluZGVyICAgMUUrMzg0ICAxRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQKK2RkcmVtNDIzIHJlbWFpbmRlciAgIDFFKzM4NCAgMkUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCitkZHJlbTQyNCByZW1haW5kZXIgICAxRSszODQgIDNFKzM4MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRyZW00MjUgcmVtYWluZGVyICAgMUUrMzg0ICA0RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2RkcmVtNDI2IHJlbWFpbmRlciAgIDFFKzM4NCAgNUUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCitkZHJlbTQyNyByZW1haW5kZXIgICAxRSszODQgIDZFKzM4MyAgLT4gICA0LjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRyZW00MjggcmVtYWluZGVyICAgMUUrMzg0ICA3RSszODMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2RkcmVtNDI5IHJlbWFpbmRlciAgIDFFKzM4NCAgOEUrMzgzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJlbTQzMCByZW1haW5kZXIgICAxRSszODQgIDlFKzM4MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorLS0gdGluaWVzCitkZHJlbTQzMSByZW1haW5kZXIgICAxRS0zOTcgIDFFLTM5OCAgLT4gICAwRS0zOTgKK2RkcmVtNDMyIHJlbWFpbmRlciAgIDFFLTM5NyAgMkUtMzk4ICAtPiAgIDBFLTM5OAorZGRyZW00MzMgcmVtYWluZGVyICAgMUUtMzk3ICAzRS0zOTggIC0+ICAgMUUtMzk4IFN1Ym5vcm1hbAorZGRyZW00MzQgcmVtYWluZGVyICAgMUUtMzk3ICA0RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbAorZGRyZW00MzUgcmVtYWluZGVyICAgMUUtMzk3ICA1RS0zOTggIC0+ICAgMEUtMzk4CitkZHJlbTQzNiByZW1haW5kZXIgICAxRS0zOTcgIDZFLTM5OCAgLT4gICA0RS0zOTggU3Vibm9ybWFsCitkZHJlbTQzNyByZW1haW5kZXIgICAxRS0zOTcgIDdFLTM5OCAgLT4gICAzRS0zOTggU3Vibm9ybWFsCitkZHJlbTQzOCByZW1haW5kZXIgICAxRS0zOTcgIDhFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsCitkZHJlbTQzOSByZW1haW5kZXIgICAxRS0zOTcgIDlFLTM5OCAgLT4gICAxRS0zOTggU3Vibm9ybWFsCitkZHJlbTQ0MCByZW1haW5kZXIgICAxRS0zOTcgMTBFLTM5OCAgLT4gICAwRS0zOTgKK2RkcmVtNDQxIHJlbWFpbmRlciAgIDFFLTM5NyAxMUUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwKK2RkcmVtNDQyIHJlbWFpbmRlciAxMDBFLTM5NyAxMUUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwKK2RkcmVtNDQzIHJlbWFpbmRlciAxMDBFLTM5NyAyMEUtMzk4ICAtPiAgIDBFLTM5OAorZGRyZW00NDQgcmVtYWluZGVyIDEwMEUtMzk3IDIxRS0zOTggIC0+IDEuM0UtMzk3IFN1Ym5vcm1hbAorZGRyZW00NDUgcmVtYWluZGVyIDEwMEUtMzk3IDMwRS0zOTggIC0+IDEuMEUtMzk3IFN1Ym5vcm1hbAorCistLSB6ZXJvIHNpZ25zCitkZHJlbTY1MCByZW1haW5kZXIgIDEgIDEgLT4gIDAKK2RkcmVtNjUxIHJlbWFpbmRlciAtMSAgMSAtPiAtMAorZGRyZW02NTIgcmVtYWluZGVyICAxIC0xIC0+ICAwCitkZHJlbTY1MyByZW1haW5kZXIgLTEgLTEgLT4gLTAKK2RkcmVtNjU0IHJlbWFpbmRlciAgMCAgMSAtPiAgMAorZGRyZW02NTUgcmVtYWluZGVyIC0wICAxIC0+IC0wCitkZHJlbTY1NiByZW1haW5kZXIgIDAgLTEgLT4gIDAKK2RkcmVtNjU3IHJlbWFpbmRlciAtMCAtMSAtPiAtMAorZGRyZW02NTggcmVtYWluZGVyICAwLjAwICAxICAtPiAgMC4wMAorZGRyZW02NTkgcmVtYWluZGVyIC0wLjAwICAxICAtPiAtMC4wMAorCistLSBTcGVjaWFscworZGRyZW02ODAgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4MSByZW1haW5kZXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjgyIHJlbWFpbmRlciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02ODMgcmVtYWluZGVyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4NCByZW1haW5kZXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjg1IHJlbWFpbmRlciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02ODYgcmVtYWluZGVyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4NyByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjg4IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RkcmVtNjg5IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02OTEgcmVtYWluZGVyIC0xICAgICBJbmYgICAtPiAtMQorZGRyZW02OTIgcmVtYWluZGVyICAwICAgICBJbmYgICAtPiAgMAorZGRyZW02OTMgcmVtYWluZGVyIC0wICAgICBJbmYgICAtPiAtMAorZGRyZW02OTQgcmVtYWluZGVyICAxICAgICBJbmYgICAtPiAgMQorZGRyZW02OTUgcmVtYWluZGVyICAxMDAwICBJbmYgICAtPiAgMTAwMAorZGRyZW02OTYgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkcmVtNzAwIHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDEgcmVtYWluZGVyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwMiByZW1haW5kZXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzAzIHJlbWFpbmRlciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDQgcmVtYWluZGVyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwNSByZW1haW5kZXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzA2IHJlbWFpbmRlciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDcgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwOCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzA5IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RkcmVtNzEwIHJlbWFpbmRlciAtMSAgICAtSW5mICAgLT4gLTEKK2RkcmVtNzExIHJlbWFpbmRlciAtMCAgICAtSW5mICAgLT4gLTAKK2RkcmVtNzEyIHJlbWFpbmRlciAgMCAgICAtSW5mICAgLT4gIDAKK2RkcmVtNzEzIHJlbWFpbmRlciAgMSAgICAtSW5mICAgLT4gIDEKK2RkcmVtNzE0IHJlbWFpbmRlciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2RkcmVtNzE1IHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHJlbTcyMSByZW1haW5kZXIgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkcmVtNzIyIHJlbWFpbmRlciAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRyZW03MjMgcmVtYWluZGVyICBOYU4gLTEgICAgICAtPiAgTmFOCitkZHJlbTcyNCByZW1haW5kZXIgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkcmVtNzI1IHJlbWFpbmRlciAtTmFOICAwICAgICAgLT4gLU5hTgorZGRyZW03MjYgcmVtYWluZGVyICBOYU4gIDEgICAgICAtPiAgTmFOCitkZHJlbTcyNyByZW1haW5kZXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkcmVtNzI4IHJlbWFpbmRlciAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRyZW03MjkgcmVtYWluZGVyICBOYU4gLU5hTiAgICAtPiAgTmFOCitkZHJlbTczMCByZW1haW5kZXIgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkcmVtNzMxIHJlbWFpbmRlciAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRyZW03MzIgcmVtYWluZGVyIC0xICAgIE5hTiAgICAtPiAgTmFOCitkZHJlbTczMyByZW1haW5kZXIgLTAgICAtTmFOICAgIC0+IC1OYU4KK2RkcmVtNzM0IHJlbWFpbmRlciAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRyZW03MzUgcmVtYWluZGVyICAxICAgLU5hTiAgICAtPiAtTmFOCitkZHJlbTczNiByZW1haW5kZXIgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkcmVtNzM3IHJlbWFpbmRlciAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZHJlbTc0MSByZW1haW5kZXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0MiByZW1haW5kZXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0MyByZW1haW5kZXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0NCByZW1haW5kZXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0NSByZW1haW5kZXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0NiByZW1haW5kZXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0NyByZW1haW5kZXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0OSByZW1haW5kZXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1MCByZW1haW5kZXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1MSByZW1haW5kZXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1MiByZW1haW5kZXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1MyByZW1haW5kZXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1NCByZW1haW5kZXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1NSByZW1haW5kZXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1NiByZW1haW5kZXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1NyByZW1haW5kZXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1OCByZW1haW5kZXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1OSByZW1haW5kZXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2luZyBOYU5zCitkZHJlbTc2MCByZW1haW5kZXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjEKK2RkcmVtNzYxIHJlbWFpbmRlciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NjIgcmVtYWluZGVyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc2MyByZW1haW5kZXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzY0IHJlbWFpbmRlciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTEKK2RkcmVtNzY1IHJlbWFpbmRlciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgorZGRyZW03NjYgcmVtYWluZGVyICBJbmYgICAgTmFOMTMgIC0+ICBOYU4xMworZGRyZW03NjcgcmVtYWluZGVyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNAorZGRyZW03NjggcmVtYWluZGVyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQorZGRyZW03NjkgcmVtYWluZGVyICBOYU4xNiAgIC0wICAgIC0+ICBOYU4xNgorCistLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKK2RkcmVtNzcwICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEwICAgIC0+ICA2CitkZHJlbTc3MSAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAorZGRyZW03NzIgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJlbTc3MyAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworZGRyZW04MDEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkZHJlbTgwMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKK2RkcmVtODAzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZGRyZW04MDQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkZHJlbTgwNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKK2RkcmVtODA2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZGRyZW04MDcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkZHJlbTgwOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RkcmVtODA5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZGRyZW04MTAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkZHJlbTgxMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYKK2RkcmVtODEyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitkZHJlbTgyMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK2RkcmVtODIyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZGRyZW04MjMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkZHJlbTgyNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK2RkcmVtODI1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZGRyZW04MjYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkZHJlbTgyNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK2RkcmVtODI4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZGRyZW04MjkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkZHJlbTgzMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RkcmVtODMxIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNgorZGRyZW04MzIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZGl2aWRlaW50CitkZHJlbTg0MCByZW1haW5kZXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMAorZGRyZW04NDEgcmVtYWluZGVyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKK2RkcmVtODQyIHJlbWFpbmRlciAgMTAwMDAwMDAwLjUgICAxICAtPiAgMC41CitkZHJlbTg0MyByZW1haW5kZXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gIDAuOQorZGRyZW04NDQgcmVtYWluZGVyICAxMDAwMDAwMDAuOTk5IDEgIC0+ICAwLjk5OQorZGRyZW04NTAgcmVtYWluZGVyICAxMDAwMDAwMDMgICAgIDUgIC0+ICAzCitkZHJlbTg1MSByZW1haW5kZXIgIDEwMDAwMDAzICAgICAgNSAgLT4gIDMKK2RkcmVtODUyIHJlbWFpbmRlciAgMTAwMDAwMyAgICAgICA1ICAtPiAgMworZGRyZW04NTMgcmVtYWluZGVyICAxMDAwMDMgICAgICAgIDUgIC0+ICAzCitkZHJlbTg1NCByZW1haW5kZXIgIDEwMDAzICAgICAgICAgNSAgLT4gIDMKK2RkcmVtODU1IHJlbWFpbmRlciAgMTAwMyAgICAgICAgICA1ICAtPiAgMworZGRyZW04NTYgcmVtYWluZGVyICAxMDMgICAgICAgICAgIDUgIC0+ICAzCitkZHJlbTg1NyByZW1haW5kZXIgIDEzICAgICAgICAgICAgNSAgLT4gIDMKK2RkcmVtODU4IHJlbWFpbmRlciAgMSAgICAgICAgICAgICA1ICAtPiAgMQorCistLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRyZW04NjAgcmVtYWluZGVyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRyZW04NjEgcmVtYWluZGVyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRyZW04NjIgcmVtYWluZGVyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRyZW04NjMgcmVtYWluZGVyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRyZW04NjQgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRyZW04NzAgcmVtYWluZGVyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzEgcmVtYWluZGVyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzIgcmVtYWluZGVyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzQgcmVtYWluZGVyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzggcmVtYWluZGVyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAorZGRyZW04ODAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMAorZGRyZW04ODEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMAorZGRyZW04ODIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAorZGRyZW04ODMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMAorZGRyZW04ODQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMAorZGRyZW04ODUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAorZGRyZW04ODYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMAorCitkZHJlbTg5MCByZW1haW5kZXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5MSByZW1haW5kZXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5MiByZW1haW5kZXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5MyByZW1haW5kZXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkwMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwCitkZHJlbTkwMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCitkZHJlbTkwMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwCitkZHJlbTkwMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAxMjMwCitkZHJlbTkwNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCitkZHJlbTkwNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgIDEwCitkZHJlbTkwNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwCisKK2RkcmVtOTEwIHJlbWFpbmRlciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTExIHJlbWFpbmRlciAxMjNlMSAgICAgNTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTEyIHJlbWFpbmRlciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTEzIHJlbWFpbmRlciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTE0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgNTAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTE1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTE2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTE3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgNTAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTE5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTIwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKK2RkcmVtOTIxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgNTAwMDAwIC0+IDEyMzAKK2RkcmVtOTIyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzAKK2RkcmVtOTIzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKK2RkcmVtOTI0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgNTAwIC0+ICAyMzAKK2RkcmVtOTI1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAgMzAKK2RkcmVtOTI2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKKworZGRyZW05MzAgcmVtYWluZGVyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzEgcmVtYWluZGVyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzIgcmVtYWluZGVyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzQgcmVtYWluZGVyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAorZGRyZW05NDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMAorZGRyZW05NDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMAorZGRyZW05NDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAorZGRyZW05NDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMAorZGRyZW05NDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMAorZGRyZW05NDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gICA2MAorZGRyZW05NDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAgNgorCitkZHJlbTk1MCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTYxIHJlbWFpbmRlciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjIgcmVtYWluZGVyIDEyM2UxICAgMzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2MyByZW1haW5kZXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RkcmVtOTY0IHJlbWFpbmRlciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjUgcmVtYWluZGVyIDEyM2UxICAgNjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2NiByZW1haW5kZXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RkcmVtOTY3IHJlbWFpbmRlciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjggcmVtYWluZGVyIDEyM2UxICAgOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2OSByZW1haW5kZXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzAKKworZGRyZW05ODAgcmVtYWluZGVyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5CisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorZGRyZW0xMDUxIHJlbWFpbmRlciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJlbTEwNTIgcmVtYWluZGVyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkcmVtMTA1MyByZW1haW5kZXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRyZW0xMDU0IHJlbWFpbmRlciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJlbTEwNTUgcmVtYWluZGVyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3CitkZHJlbTEwNTYgcmVtYWluZGVyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3CitkZHJlbTEwNTcgcmVtYWluZGVyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3CitkZHJlbTEwNTggcmVtYWluZGVyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3CisKKy0tIGRlc3RydWN0aXZlIHN1YnRyYWN0CitkZHJlbTExMDEgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAxLjAwMDAwMDAwMDAwMDAwMSAgLT4gIDAuNzY1NDMyMTA5ODc2NTQ2CitkZHJlbTExMDIgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMS4wMDAwMDAwMDAwMDAwMSAgLT4gICAwLjY1NDMyMTA5ODc2NTU3CitkZHJlbTExMDMgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDEuMDAwMDAwMDAwMDAwMSAgLT4gICAgMC41NDMyMTA5ODc2NjY4CitkZHJlbTExMDQgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU1ICA0LjAwMDAwMDAwMDAwMDAwMSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM3CitkZHJlbTExMDUgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICA0LjAwMDAwMDAwMDAwMDAwMSAgLT4gIDMuNjkxMzU4MDI3NDY5MTM3CitkZHJlbTExMDYgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDQuOTk5OTk5OTk5OTk5OSAgLT4gICAgMC42OTEzNTc4MDI0Njk2CitkZHJlbTExMDcgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgNC45OTk5OTk5OTk5OTk5OSAgLT4gICAzLjQ2OTEzNTc4MDI0NjkxCitkZHJlbTExMDggcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICA0Ljk5OTk5OTk5OTk5OTk5OSAgLT4gIDEuMjQ2OTEzNTc4MDI0NjkxCitkZHJlbTExMDkgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICA1LjAwMDAwMDAwMDAwMDAwMSAgLT4gIDAuNzUzMDg2NDIxOTc1MzA5CitkZHJlbTExMTAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgNS4wMDAwMDAwMDAwMDAwMSAgLT4gICAzLjUzMDg2NDIxOTc1MzEwCitkZHJlbTExMTEgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDUuMDAwMDAwMDAwMDAwMSAgLT4gICAgMS4zMDg2NDIxOTc1MzE0CisKKy0tIE51bGwgdGVzdHMKK2RkcmVtMTAwMCByZW1haW5kZXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEwMDEgcmVtYWluZGVyICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXJOZWFyLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXJOZWFyLmRlY1Rlc3QKaW5kZXggNmJhNjRlYi4uOGRhOWFmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVtYWluZGVyTmVhci5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlck5lYXIuZGVjVGVzdApAQCAtMSw2MjkgKzEsNjI5IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFJlbWFpbmRlck5lYXIuZGVjVGVzdCAtLSBkZWNEb3VibGUgcmVtYWluZGVyLW5lYXIgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkNCi1kZHJtbjAwMSByZW1haW5kZXJuZWFyICAxICAgICAxICAgIC0+ICAwDQotZGRybW4wMDIgcmVtYWluZGVybmVhciAgMiAgICAgMSAgICAtPiAgMA0KLWRkcm1uMDAzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgLT4gIDENCi1kZHJtbjAwNCByZW1haW5kZXJuZWFyICAyICAgICAyICAgIC0+ICAwDQotZGRybW4wMDUgcmVtYWluZGVybmVhciAgMCAgICAgMSAgICAtPiAgMA0KLWRkcm1uMDA2IHJlbWFpbmRlcm5lYXIgIDAgICAgIDIgICAgLT4gIDANCi1kZHJtbjAwNyByZW1haW5kZXJuZWFyICAxICAgICAzICAgIC0+ICAxDQotZGRybW4wMDggcmVtYWluZGVybmVhciAgMiAgICAgMyAgICAtPiAtMQ0KLWRkcm1uMDA5IHJlbWFpbmRlcm5lYXIgIDMgICAgIDMgICAgLT4gIDANCi0NCi1kZHJtbjAxMCByZW1haW5kZXJuZWFyICAyLjQgICAxICAgIC0+ICAwLjQNCi1kZHJtbjAxMSByZW1haW5kZXJuZWFyICAyLjQgICAtMSAgIC0+ICAwLjQNCi1kZHJtbjAxMiByZW1haW5kZXJuZWFyICAtMi40ICAxICAgIC0+ICAtMC40DQotZGRybW4wMTMgcmVtYWluZGVybmVhciAgLTIuNCAgLTEgICAtPiAgLTAuNA0KLWRkcm1uMDE0IHJlbWFpbmRlcm5lYXIgIDIuNDAgIDEgICAgLT4gIDAuNDANCi1kZHJtbjAxNSByZW1haW5kZXJuZWFyICAyLjQwMCAxICAgIC0+ICAwLjQwMA0KLWRkcm1uMDE2IHJlbWFpbmRlcm5lYXIgIDIuNCAgIDIgICAgLT4gIDAuNA0KLWRkcm1uMDE3IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwDQotZGRybW4wMTggcmVtYWluZGVybmVhciAgMi4gICAgMiAgICAtPiAgMA0KLWRkcm1uMDE5IHJlbWFpbmRlcm5lYXIgIDIwICAgIDIwICAgLT4gIDANCi0NCi1kZHJtbjAyMCByZW1haW5kZXJuZWFyICAxODcgICAxODcgICAgLT4gIDANCi1kZHJtbjAyMSByZW1haW5kZXJuZWFyICA1ICAgICAyICAgICAgLT4gIDENCi1kZHJtbjAyMiByZW1haW5kZXJuZWFyICA1ICAgICAyLjAgICAgLT4gIDEuMA0KLWRkcm1uMDIzIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIuMDAwICAtPiAgMS4wMDANCi1kZHJtbjAyNCByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwDQotZGRybW4wMjUgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMA0KLQ0KLWRkcm1uMDMwIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgICAtPiAgMQ0KLWRkcm1uMDMxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDQgICAgICAtPiAgMQ0KLWRkcm1uMDMyIHJlbWFpbmRlcm5lYXIgIDEgICAgIDggICAgICAtPiAgMQ0KLQ0KLWRkcm1uMDMzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDE2ICAgICAtPiAgMQ0KLWRkcm1uMDM0IHJlbWFpbmRlcm5lYXIgIDEgICAgIDMyICAgICAtPiAgMQ0KLWRkcm1uMDM1IHJlbWFpbmRlcm5lYXIgIDEgICAgIDY0ICAgICAtPiAgMQ0KLWRkcm1uMDQwIHJlbWFpbmRlcm5lYXIgIDEgICAgLTIgICAgICAtPiAgMQ0KLWRkcm1uMDQxIHJlbWFpbmRlcm5lYXIgIDEgICAgLTQgICAgICAtPiAgMQ0KLWRkcm1uMDQyIHJlbWFpbmRlcm5lYXIgIDEgICAgLTggICAgICAtPiAgMQ0KLWRkcm1uMDQzIHJlbWFpbmRlcm5lYXIgIDEgICAgLTE2ICAgICAtPiAgMQ0KLWRkcm1uMDQ0IHJlbWFpbmRlcm5lYXIgIDEgICAgLTMyICAgICAtPiAgMQ0KLWRkcm1uMDQ1IHJlbWFpbmRlcm5lYXIgIDEgICAgLTY0ICAgICAtPiAgMQ0KLWRkcm1uMDUwIHJlbWFpbmRlcm5lYXIgLTEgICAgIDIgICAgICAtPiAgLTENCi1kZHJtbjA1MSByZW1haW5kZXJuZWFyIC0xICAgICA0ICAgICAgLT4gIC0xDQotZGRybW4wNTIgcmVtYWluZGVybmVhciAtMSAgICAgOCAgICAgIC0+ICAtMQ0KLWRkcm1uMDUzIHJlbWFpbmRlcm5lYXIgLTEgICAgIDE2ICAgICAtPiAgLTENCi1kZHJtbjA1NCByZW1haW5kZXJuZWFyIC0xICAgICAzMiAgICAgLT4gIC0xDQotZGRybW4wNTUgcmVtYWluZGVybmVhciAtMSAgICAgNjQgICAgIC0+ICAtMQ0KLWRkcm1uMDYwIHJlbWFpbmRlcm5lYXIgLTEgICAgLTIgICAgICAtPiAgLTENCi1kZHJtbjA2MSByZW1haW5kZXJuZWFyIC0xICAgIC00ICAgICAgLT4gIC0xDQotZGRybW4wNjIgcmVtYWluZGVybmVhciAtMSAgICAtOCAgICAgIC0+ICAtMQ0KLWRkcm1uMDYzIHJlbWFpbmRlcm5lYXIgLTEgICAgLTE2ICAgICAtPiAgLTENCi1kZHJtbjA2NCByZW1haW5kZXJuZWFyIC0xICAgIC0zMiAgICAgLT4gIC0xDQotZGRybW4wNjUgcmVtYWluZGVybmVhciAtMSAgICAtNjQgICAgIC0+ICAtMQ0KLQ0KLWRkcm1uMDY2IHJlbWFpbmRlcm5lYXIgICAgICAgICAgOS45ICAgMSAgLT4gLTAuMQ0KLWRkcm1uMDY3IHJlbWFpbmRlcm5lYXIgICAgICAgICA5OS43ICAgMSAgLT4gLTAuMw0KLWRkcm1uMDY4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMA0KLWRkcm1uMDY5IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS40ICAgMSAgLT4gMC40DQotZGRybW4wNzAgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjUgICAxICAtPiAtMC41DQotZGRybW4wNzEgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjkgICAxICAtPiAtMC4xDQotZGRybW4wNzIgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5Ljk5OSAxICAtPiAtMC4wMDENCi1kZHJtbjA3MyByZW1haW5kZXJuZWFyICA5OTk5OTkuOTk5OTk5IDEgIC0+IC0wLjAwMDAwMQ0KLWRkcm1uMDc0IHJlbWFpbmRlcm5lYXIgIDkgICAgICAgICAgICAgMSAgLT4gMA0KLWRkcm1uMDc1IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMA0KLWRkcm1uMDc2IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMiAgLT4gLTENCi1kZHJtbjA3NyByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDMgIC0+IDANCi1kZHJtbjA3OCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDQgIC0+IC0xDQotDQotZGRybW4wODAgcmVtYWluZGVybmVhciAgMC4gICAgICAgICAgICAxICAtPiAwDQotZGRybW4wODEgcmVtYWluZGVybmVhciAgLjAgICAgICAgICAgICAxICAtPiAwLjANCi1kZHJtbjA4MiByZW1haW5kZXJuZWFyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDANCi1kZHJtbjA4MyByZW1haW5kZXJuZWFyICAwLjAwRSs5ICAgICAgIDEgIC0+IDANCi1kZHJtbjA4NCByZW1haW5kZXJuZWFyICAwLjAwRSszICAgICAgIDEgIC0+IDANCi1kZHJtbjA4NSByZW1haW5kZXJuZWFyICAwLjAwRSsyICAgICAgIDEgIC0+IDANCi1kZHJtbjA4NiByZW1haW5kZXJuZWFyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMA0KLWRkcm1uMDg3IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMA0KLWRkcm1uMDg4IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMA0KLWRkcm1uMDg5IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDANCi1kZHJtbjA5MCByZW1haW5kZXJuZWFyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMA0KLWRkcm1uMDkxIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMA0KLWRkcm1uMDkyIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDANCi1kZHJtbjA5MyByZW1haW5kZXJuZWFyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcNCi1kZHJtbjA5NCByZW1haW5kZXJuZWFyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgNCi1kZHJtbjA5NSByZW1haW5kZXJuZWFyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0DQotDQotLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXJuZWFyIGJ5IDANCi1kZHJtbjEwMSByZW1haW5kZXJuZWFyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRybW4xMDIgcmVtYWluZGVybmVhciAgMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkcm1uMTAzIHJlbWFpbmRlcm5lYXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJtbjEwNCByZW1haW5kZXJuZWFyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRybW4xMDUgcmVtYWluZGVybmVhciAgMC4wRTUgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkcm1uMTA2IHJlbWFpbmRlcm5lYXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi0tLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQNCi0tLSBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcg0KLS0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldDQotZGRybW4xMDcgcmVtYWluZGVybmVhciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMDggcmVtYWluZGVybmVhciAgMC4wMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMDkgcmVtYWluZGVybmVhciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMTAgcmVtYWluZGVybmVhciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMTEgcmVtYWluZGVybmVhciAgMSAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMTIgcmVtYWluZGVybmVhciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMTMgcmVtYWluZGVybmVhciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMTQgcmVtYWluZGVybmVhciAxRSszODAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMTUgcmVtYWluZGVybmVhciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMTYgcmVtYWluZGVybmVhciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMTkgcmVtYWluZGVybmVhciAgMC4xICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMjAgcmVtYWluZGVybmVhciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMjEgcmVtYWluZGVybmVhciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMjIgcmVtYWluZGVybmVhciAxMCAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMjMgcmVtYWluZGVybmVhciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMjQgcmVtYWluZGVybmVhciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYW5kIHplcm9zIG9uIGxlZnQNCi1kZHJtbjEzMCByZW1haW5kZXJuZWFyICAwICAgICAgMSAgIC0+ICAwDQotZGRybW4xMzEgcmVtYWluZGVybmVhciAgMCAgICAgLTEgICAtPiAgMA0KLWRkcm1uMTMyIHJlbWFpbmRlcm5lYXIgIDAuMCAgICAxICAgLT4gIDAuMA0KLWRkcm1uMTMzIHJlbWFpbmRlcm5lYXIgIDAuMCAgIC0xICAgLT4gIDAuMA0KLWRkcm1uMTM0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAxICAgLT4gLTANCi1kZHJtbjEzNSByZW1haW5kZXJuZWFyIC0wICAgICAtMSAgIC0+IC0wDQotZGRybW4xMzYgcmVtYWluZGVybmVhciAtMC4wICAgIDEgICAtPiAtMC4wDQotZGRybW4xMzcgcmVtYWluZGVybmVhciAtMC4wICAgLTEgICAtPiAtMC4wDQotDQotLS0gMC41ZXJzDQotZGRybW4xNDMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQ0KLWRkcm1uMTQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMSAgIC0+ICAwLjUNCi1kZHJtbjE0NSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MA0KLWRkcm1uMTQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMA0KLWRkcm1uMTQ3IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIgICAgIC0+ICAwLjUwDQotZGRybW4xNDggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTANCi1kZHJtbjE0OSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDANCi0NCi0tLSBzdGVhZGllcw0KLWRkcm1uMTUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwDQotZGRybW4xNTEgcmVtYWluZGVybmVhciAgMSAgMiAgIC0+IDENCi1kZHJtbjE1MiByZW1haW5kZXJuZWFyICAxICAzICAgLT4gMQ0KLWRkcm1uMTUzIHJlbWFpbmRlcm5lYXIgIDEgIDQgICAtPiAxDQotZGRybW4xNTQgcmVtYWluZGVybmVhciAgMSAgNSAgIC0+IDENCi1kZHJtbjE1NSByZW1haW5kZXJuZWFyICAxICA2ICAgLT4gMQ0KLWRkcm1uMTU2IHJlbWFpbmRlcm5lYXIgIDEgIDcgICAtPiAxDQotZGRybW4xNTcgcmVtYWluZGVybmVhciAgMSAgOCAgIC0+IDENCi1kZHJtbjE1OCByZW1haW5kZXJuZWFyICAxICA5ICAgLT4gMQ0KLWRkcm1uMTU5IHJlbWFpbmRlcm5lYXIgIDEgIDEwICAtPiAxDQotZGRybW4xNjAgcmVtYWluZGVybmVhciAgMSAgMSAgIC0+IDANCi1kZHJtbjE2MSByZW1haW5kZXJuZWFyICAyICAxICAgLT4gMA0KLWRkcm1uMTYyIHJlbWFpbmRlcm5lYXIgIDMgIDEgICAtPiAwDQotZGRybW4xNjMgcmVtYWluZGVybmVhciAgNCAgMSAgIC0+IDANCi1kZHJtbjE2NCByZW1haW5kZXJuZWFyICA1ICAxICAgLT4gMA0KLWRkcm1uMTY1IHJlbWFpbmRlcm5lYXIgIDYgIDEgICAtPiAwDQotZGRybW4xNjYgcmVtYWluZGVybmVhciAgNyAgMSAgIC0+IDANCi1kZHJtbjE2NyByZW1haW5kZXJuZWFyICA4ICAxICAgLT4gMA0KLWRkcm1uMTY4IHJlbWFpbmRlcm5lYXIgIDkgIDEgICAtPiAwDQotZGRybW4xNjkgcmVtYWluZGVybmVhciAgMTAgMSAgIC0+IDANCi0NCi0tLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyDQotZGRybW4xNzEgcmVtYWluZGVybmVhciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwDQotZGRybW4xNzIgcmVtYWluZGVybmVhciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwDQotZGRybW4xNzMgcmVtYWluZGVybmVhciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwDQotZGRybW4xNzQgcmVtYWluZGVybmVhciAgIDAuNTIgMS4wMjAgLT4gLTAuNTAwDQotZGRybW4xNzUgcmVtYWluZGVybmVhciAgIDAuNiAgMS4wMjAgLT4gLTAuNDIwDQotDQotLS0gTW9yZSBmbGF2b3VycyBvZiByZW1haW5kZXJuZWFyIGJ5IDANCi1kZHJtbjIwMSByZW1haW5kZXJuZWFyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJtbjIwMiByZW1haW5kZXJuZWFyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJtbjIwMyByZW1haW5kZXJuZWFyICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJtbjIwNCByZW1haW5kZXJuZWFyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMjA1IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4yMDYgcmVtYWluZGVybmVhciAgMC4xICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjIwNyByZW1haW5kZXJuZWFyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMjA4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4yMDkgcmVtYWluZGVybmVhciAxMCAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjIxMCByZW1haW5kZXJuZWFyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMjExIHJlbWFpbmRlcm5lYXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gdGVzdHMgZnJvbSB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbg0KLWRkcm1uMjIxIHJlbWFpbmRlcm5lYXIgMi4xICAgICAzICAgLT4gLTAuOQ0KLWRkcm1uMjIyIHJlbWFpbmRlcm5lYXIgIDEwICAgICA2ICAgLT4gLTINCi1kZHJtbjIyMyByZW1haW5kZXJuZWFyICAxMCAgICAgMyAgIC0+ICAxDQotZGRybW4yMjQgcmVtYWluZGVybmVhciAtMTAgICAgIDMgICAtPiAtMQ0KLWRkcm1uMjI1IHJlbWFpbmRlcm5lYXIgIDEwLjIgICAxICAgLT4gMC4yDQotZGRybW4yMjYgcmVtYWluZGVybmVhciAgMTAgICAgIDAuMyAtPiAwLjENCi1kZHJtbjIyNyByZW1haW5kZXJuZWFyICAgMy42ICAgMS4zIC0+IC0wLjMNCi0NCi0tLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyDQotZGRybW4yMzEgcmVtYWluZGVybmVhciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwDQotZGRybW4yMzIgcmVtYWluZGVybmVhciAgLTAuNTAgMS4wMjAgLT4gLTAuNTAwDQotZGRybW4yMzMgcmVtYWluZGVybmVhciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwDQotZGRybW4yMzQgcmVtYWluZGVybmVhciAgLTAuNTIgMS4wMjAgLT4gIDAuNTAwDQotZGRybW4yMzUgcmVtYWluZGVybmVhciAgLTAuNiAgMS4wMjAgLT4gIDAuNDIwDQotDQotLS0gaGlnaCBYcw0KLWRkcm1uMjQwIHJlbWFpbmRlcm5lYXIgIDFFKzIgIDEuMDAgIC0+ICAwLjAwDQotDQotLS0gZGRybW4zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwNCi1kZHJtbjMwMSByZW1haW5kZXJuZWFyICAgMSAgICAzICAgICAtPiAgMQ0KLWRkcm1uMzAyIHJlbWFpbmRlcm5lYXIgICA1ICAgIDUgICAgIC0+ICAwDQotZGRybW4zMDMgcmVtYWluZGVybmVhciAgIDEzICAgMTAgICAgLT4gIDMNCi1kZHJtbjMwNCByZW1haW5kZXJuZWFyICAgMTMgICA1MCAgICAtPiAgMTMNCi1kZHJtbjMwNSByZW1haW5kZXJuZWFyICAgMTMgICAxMDAgICAtPiAgMTMNCi1kZHJtbjMwNiByZW1haW5kZXJuZWFyICAgMTMgICAxMDAwICAtPiAgMTMNCi1kZHJtbjMwNyByZW1haW5kZXJuZWFyICAgLjEzICAgIDEgICAtPiAgMC4xMw0KLWRkcm1uMzA4IHJlbWFpbmRlcm5lYXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMw0KLWRkcm1uMzA5IHJlbWFpbmRlcm5lYXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMNCi1kZHJtbjMxMCByZW1haW5kZXJuZWFyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMNCi1kZHJtbjMxMSByZW1haW5kZXJuZWFyICAgMTAuMzMgIDEgICAtPiAgMC4zMw0KLWRkcm1uMzEyIHJlbWFpbmRlcm5lYXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzDQotZGRybW4zMTMgcmVtYWluZGVybmVhciAgIDEwMy4zICAxICAgLT4gIDAuMw0KLWRkcm1uMzE0IHJlbWFpbmRlcm5lYXIgICAxMzMgICAxMCAgIC0+ICAzDQotZGRybW4zMTUgcmVtYWluZGVybmVhciAgIDEwMzMgIDEwICAgLT4gIDMNCi1kZHJtbjMxNiByZW1haW5kZXJuZWFyICAgMTAzMyAgNTAgICAtPiAtMTcNCi1kZHJtbjMxNyByZW1haW5kZXJuZWFyICAgMTAxLjAgIDMgICAtPiAtMS4wDQotZGRybW4zMTggcmVtYWluZGVybmVhciAgIDEwMi4wICAzICAgLT4gIDAuMA0KLWRkcm1uMzE5IHJlbWFpbmRlcm5lYXIgICAxMDMuMCAgMyAgIC0+ICAxLjANCi1kZHJtbjMyMCByZW1haW5kZXJuZWFyICAgMi40MCAgIDEgICAtPiAgMC40MA0KLWRkcm1uMzIxIHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMA0KLWRkcm1uMzIyIHJlbWFpbmRlcm5lYXIgICAyLjQgICAgMSAgIC0+ICAwLjQNCi1kZHJtbjMyMyByZW1haW5kZXJuZWFyICAgMi40ICAgIDIgICAtPiAgMC40DQotZGRybW4zMjQgcmVtYWluZGVybmVhciAgIDIuNDAwICAyICAgLT4gIDAuNDAwDQotZGRybW4zMjUgcmVtYWluZGVybmVhciAgIDEgICAwLjMgICAgLT4gIDAuMQ0KLWRkcm1uMzI2IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMCAgIC0+ICAwLjEwDQotZGRybW4zMjcgcmVtYWluZGVybmVhciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwDQotZGRybW4zMjggcmVtYWluZGVybmVhciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMA0KLWRkcm1uMzI5IHJlbWFpbmRlcm5lYXIgICAxLjAgICAgMC4zIC0+ICAwLjENCi1kZHJtbjMzMCByZW1haW5kZXJuZWFyICAgMS4wMCAgIDAuMyAtPiAgMC4xMA0KLWRkcm1uMzMxIHJlbWFpbmRlcm5lYXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMA0KLWRkcm1uMzMyIHJlbWFpbmRlcm5lYXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDANCi1kZHJtbjMzMyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41DQotZGRybW4zMzQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQ0KLWRkcm1uMzM1IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwDQotZGRybW4zMzYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwDQotZGRybW4zMzcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTANCi1kZHJtbjMzOCByZW1haW5kZXJuZWFyICAgMC41MCAyLjAxICAtPiAgMC41MA0KLWRkcm1uMzM5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMA0KLQ0KLWRkcm1uMzQwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIC0xRS03DQotZGRybW4zNDEgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIC0xRS04DQotZGRybW4zNDIgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAxICAgIC0+ICAtMUUtOQ0KLWRkcm1uMzQzIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIC0xRS0xMA0KLWRkcm1uMzQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAtMUUtMTENCi1kZHJtbjM0NSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5ICAgIC0+ICAxRS03DQotZGRybW4zNDYgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgNCi1kZHJtbjM0NyByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkNCi1kZHJtbjM0OCByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5ICAgIC0+ICAxRS0xMA0KLWRkcm1uMzQ5IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQ0KLWRkcm1uMzUwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTINCi0NCi1kZHJtbjM1MSByZW1haW5kZXJuZWFyICAgMC4wMyAgNyAgLT4gIDAuMDMNCi1kZHJtbjM1MiByZW1haW5kZXJuZWFyICAgNSAgIDIgICAgLT4gIDENCi1kZHJtbjM1MyByZW1haW5kZXJuZWFyICAgNC4xICAgMiAgICAtPiAgMC4xDQotZGRybW4zNTQgcmVtYWluZGVybmVhciAgIDQuMDEgICAyICAgIC0+ICAwLjAxDQotZGRybW4zNTUgcmVtYWluZGVybmVhciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDENCi1kZHJtbjM1NiByZW1haW5kZXJuZWFyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxDQotZGRybW4zNTcgcmVtYWluZGVybmVhciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxDQotZGRybW4zNTggcmVtYWluZGVybmVhciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDENCi1kZHJtbjM1OSByZW1haW5kZXJuZWFyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNw0KLQ0KLWRkcm1uMzYwIHJlbWFpbmRlcm5lYXIgICAxLjIgICAwLjczNDUgLT4gLTAuMjY5MA0KLWRkcm1uMzYxIHJlbWFpbmRlcm5lYXIgICAwLjggICAxMiAgICAgLT4gIDAuOA0KLWRkcm1uMzYyIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjIgICAgLT4gIDAuMA0KLWRkcm1uMzYzIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjMgICAgLT4gLTAuMQ0KLWRkcm1uMzY0IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEyICAgLT4gIDAuODAwDQotZGRybW4zNjUgcmVtYWluZGVybmVhciAgIDAuODAwICAgMS43ICAtPiAgMC44MDANCi1kZHJtbjM2NiByZW1haW5kZXJuZWFyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMA0KLQ0KLS0tIHJvdW5kIHRvIGV2ZW4NCi1kZHJtbjM3MSByZW1haW5kZXJuZWFyICAgMTIxICAgICAyICAgIC0+ICAxDQotZGRybW4zNzIgcmVtYWluZGVybmVhciAgIDEyMiAgICAgMiAgICAtPiAgMA0KLWRkcm1uMzczIHJlbWFpbmRlcm5lYXIgICAxMjMgICAgIDIgICAgLT4gLTENCi1kZHJtbjM3NCByZW1haW5kZXJuZWFyICAgMTI0ICAgICAyICAgIC0+ICAwDQotZGRybW4zNzUgcmVtYWluZGVybmVhciAgIDEyNSAgICAgMiAgICAtPiAgMQ0KLWRkcm1uMzc2IHJlbWFpbmRlcm5lYXIgICAxMjYgICAgIDIgICAgLT4gIDANCi1kZHJtbjM3NyByZW1haW5kZXJuZWFyICAgMTI3ICAgICAyICAgIC0+IC0xDQotDQotZGRybW4zODEgcmVtYWluZGVybmVhciAxMjM0NSAgMSAgICAgICAgIC0+ICAwDQotZGRybW4zODIgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDAxICAgIC0+IC0wLjIzNDQNCi1kZHJtbjM4MyByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAwMSAgICAgLT4gLTAuMzMzDQotZGRybW4zODQgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMSAgICAgIC0+IC0wLjIzDQotZGRybW4zODUgcmVtYWluZGVybmVhciAxMjM0NSAgMS4xICAgICAgIC0+IC0wLjMNCi1kZHJtbjM4NiByZW1haW5kZXJuZWFyIDEyMzU1ICA0ICAgICAgICAgLT4gLTENCi1kZHJtbjM4NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDENCi1kZHJtbjM4OCByZW1haW5kZXJuZWFyIDEyMzU1ICA0LjAwMDEgICAgLT4gLTEuMzA4OQ0KLWRkcm1uMzg5IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuMDAwMSAgICAtPiAgMC42OTE0DQotZGRybW4zOTAgcmVtYWluZGVybmVhciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkNCi1kZHJtbjM5MSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gLTAuMjYNCi1kZHJtbjM5MiByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDIuNDY5DQotZGRybW4zOTMgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkNCi1kZHJtbjM5NCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDANCi1kZHJtbjM5NSByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMDEgICAgLT4gLTAuMjQ2OQ0KLWRkcm1uMzk2IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAxICAgICAtPiAtMi40NjkNCi1kZHJtbjM5NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYNCi1kZHJtbjM5OCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjEgICAgICAgLT4gLTIuMQ0KLQ0KLS0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzDQotZGRybW40MDEgcmVtYWluZGVybmVhciAgIDAuNCAgICAgICAgIDEgICAtPiAgMC40DQotZGRybW40MDIgcmVtYWluZGVybmVhciAgIDAuNDUgICAgICAgIDEgICAtPiAgMC40NQ0KLWRkcm1uNDAzIHJlbWFpbmRlcm5lYXIgICAwLjQ1NSAgICAgICAxICAgLT4gIDAuNDU1DQotZGRybW40MDQgcmVtYWluZGVybmVhciAgIDAuNDU1NSAgICAgIDEgICAtPiAgMC40NTU1DQotZGRybW40MDUgcmVtYWluZGVybmVhciAgIDAuNDU1NTUgICAgIDEgICAtPiAgMC40NTU1NQ0KLWRkcm1uNDA2IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NSAgICAxICAgLT4gIDAuNDU1NTU1DQotZGRybW40MDcgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NSAgIDEgICAtPiAgMC40NTU1NTU1DQotZGRybW40MDggcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTUgIDEgICAtPiAgMC40NTU1NTU1NQ0KLWRkcm1uNDA5IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NTU1DQotLS0gd2l0aCBzcGlsbC4uLiBbNDEyIGV4ZXJjaXNlcyBzdGlja3RhYiBsb29wXQ0KLWRkcm1uNDExIHJlbWFpbmRlcm5lYXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQ0KLWRkcm1uNDEyIHJlbWFpbmRlcm5lYXIgICAwLjU1ICAgICAgICAxICAgLT4gLTAuNDUNCi1kZHJtbjQxMyByZW1haW5kZXJuZWFyICAgMC41NTUgICAgICAgMSAgIC0+IC0wLjQ0NQ0KLWRkcm1uNDE0IHJlbWFpbmRlcm5lYXIgICAwLjU1NTUgICAgICAxICAgLT4gLTAuNDQ0NQ0KLWRkcm1uNDE1IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1ICAgICAxICAgLT4gLTAuNDQ0NDUNCi1kZHJtbjQxNiByZW1haW5kZXJuZWFyICAgMC41NTU1NTUgICAgMSAgIC0+IC0wLjQ0NDQ0NQ0KLWRkcm1uNDE3IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTUgICAxICAgLT4gLTAuNDQ0NDQ0NQ0KLWRkcm1uNDE4IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1ICAxICAgLT4gLTAuNDQ0NDQ0NDUNCi1kZHJtbjQxOSByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1NTUgMSAgIC0+IC0wLjQ0NDQ0NDQ0NQ0KLQ0KLS0tIGZvbGRkb3ducw0KLWRkcm1uNDIxIHJlbWFpbmRlcm5lYXIgICAxRSszODQgICAgICAgMSAgLT4gICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkcm1uNDIyIHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDFFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZA0KLWRkcm1uNDIzIHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDJFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZA0KLWRkcm1uNDI0IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDNFKzM4MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KLWRkcm1uNDI1IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDRFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KLWRkcm1uNDI2IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDVFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZA0KLWRkcm1uNDI3IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDZFKzM4MyAgLT4gIC0yLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KLWRkcm1uNDI4IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDdFKzM4MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KLWRkcm1uNDI5IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDhFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KLWRkcm1uNDMwIHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDlFKzM4MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KLS0tIHRpbmllcw0KLWRkcm1uNDMxIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDFFLTM5OCAgLT4gICAwRS0zOTgNCi1kZHJtbjQzMiByZW1haW5kZXJuZWFyICAgMUUtMzk3ICAyRS0zOTggIC0+ICAgMEUtMzk4DQotZGRybW40MzMgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgM0UtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwNCi1kZHJtbjQzNCByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA0RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbA0KLWRkcm1uNDM1IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDVFLTM5OCAgLT4gICAwRS0zOTgNCi1kZHJtbjQzNiByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA2RS0zOTggIC0+ICAtMkUtMzk4IFN1Ym5vcm1hbA0KLWRkcm1uNDM3IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDdFLTM5OCAgLT4gICAzRS0zOTggU3Vibm9ybWFsDQotZGRybW40MzggcmVtYWluZGVybmVhciAgIDFFLTM5NyAgOEUtMzk4ICAtPiAgIDJFLTM5OCBTdWJub3JtYWwNCi1kZHJtbjQzOSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA5RS0zOTggIC0+ICAgMUUtMzk4IFN1Ym5vcm1hbA0KLWRkcm1uNDQwIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgMTBFLTM5OCAgLT4gICAwRS0zOTgNCi1kZHJtbjQ0MSByZW1haW5kZXJuZWFyICAgMUUtMzk3IDExRS0zOTggIC0+ICAtMUUtMzk4IFN1Ym5vcm1hbA0KLWRkcm1uNDQyIHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMTFFLTM5OCAgLT4gIC0xRS0zOTggU3Vibm9ybWFsDQotZGRybW40NDMgcmVtYWluZGVybmVhciAxMDBFLTM5NyAyMEUtMzk4ICAtPiAgIDBFLTM5OA0KLWRkcm1uNDQ0IHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMjFFLTM5OCAgLT4gIC04RS0zOTggU3Vibm9ybWFsDQotZGRybW40NDUgcmVtYWluZGVybmVhciAxMDBFLTM5NyAzMEUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwNCi0NCi0tLSB6ZXJvIHNpZ25zDQotZGRybW42NTAgcmVtYWluZGVybmVhciAgMSAgMSAtPiAgMA0KLWRkcm1uNjUxIHJlbWFpbmRlcm5lYXIgLTEgIDEgLT4gLTANCi1kZHJtbjY1MiByZW1haW5kZXJuZWFyICAxIC0xIC0+ICAwDQotZGRybW42NTMgcmVtYWluZGVybmVhciAtMSAtMSAtPiAtMA0KLWRkcm1uNjU0IHJlbWFpbmRlcm5lYXIgIDAgIDEgLT4gIDANCi1kZHJtbjY1NSByZW1haW5kZXJuZWFyIC0wICAxIC0+IC0wDQotZGRybW42NTYgcmVtYWluZGVybmVhciAgMCAtMSAtPiAgMA0KLWRkcm1uNjU3IHJlbWFpbmRlcm5lYXIgLTAgLTEgLT4gLTANCi1kZHJtbjY1OCByZW1haW5kZXJuZWFyICAwLjAwICAxICAtPiAgMC4wMA0KLWRkcm1uNjU5IHJlbWFpbmRlcm5lYXIgLTAuMDAgIDEgIC0+IC0wLjAwDQotDQotLS0gU3BlY2lhbHMNCi1kZHJtbjY4MCByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW42ODEgcmVtYWluZGVybmVhciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNjgyIHJlbWFpbmRlcm5lYXIgIEluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjY4MyByZW1haW5kZXJuZWFyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW42ODQgcmVtYWluZGVybmVhciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNjg1IHJlbWFpbmRlcm5lYXIgIEluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjY4NiByZW1haW5kZXJuZWFyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW42ODcgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNjg4IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQotZGRybW42ODkgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNjkxIHJlbWFpbmRlcm5lYXIgLTEgICAgIEluZiAgIC0+IC0xDQotZGRybW42OTIgcmVtYWluZGVybmVhciAgMCAgICAgSW5mICAgLT4gIDANCi1kZHJtbjY5MyByZW1haW5kZXJuZWFyIC0wICAgICBJbmYgICAtPiAtMA0KLWRkcm1uNjk0IHJlbWFpbmRlcm5lYXIgIDEgICAgIEluZiAgIC0+ICAxDQotZGRybW42OTUgcmVtYWluZGVybmVhciAgMTAwMCAgSW5mICAgLT4gIDEwMDANCi1kZHJtbjY5NiByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRybW43MDAgcmVtYWluZGVybmVhciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzAxIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjcwMiByZW1haW5kZXJuZWFyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43MDMgcmVtYWluZGVybmVhciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzA0IHJlbWFpbmRlcm5lYXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjcwNSByZW1haW5kZXJuZWFyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43MDYgcmVtYWluZGVybmVhciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzA3IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjcwOCByZW1haW5kZXJuZWFyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43MDkgcmVtYWluZGVybmVhciAtMTAwMCAgSW5mICAgLT4gLTEwMDANCi1kZHJtbjcxMCByZW1haW5kZXJuZWFyIC0xICAgIC1JbmYgICAtPiAtMQ0KLWRkcm1uNzExIHJlbWFpbmRlcm5lYXIgLTAgICAgLUluZiAgIC0+IC0wDQotZGRybW43MTIgcmVtYWluZGVybmVhciAgMCAgICAtSW5mICAgLT4gIDANCi1kZHJtbjcxMyByZW1haW5kZXJuZWFyICAxICAgIC1JbmYgICAtPiAgMQ0KLWRkcm1uNzE0IHJlbWFpbmRlcm5lYXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwDQotZGRybW43MTUgcmVtYWluZGVybmVhciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkcm1uNzIxIHJlbWFpbmRlcm5lYXIgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kZHJtbjcyMiByZW1haW5kZXJuZWFyICBOYU4gLTEwMDAgICAtPiAgTmFODQotZGRybW43MjMgcmVtYWluZGVybmVhciAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRkcm1uNzI0IHJlbWFpbmRlcm5lYXIgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kZHJtbjcyNSByZW1haW5kZXJuZWFyIC1OYU4gIDAgICAgICAtPiAtTmFODQotZGRybW43MjYgcmVtYWluZGVybmVhciAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRkcm1uNzI3IHJlbWFpbmRlcm5lYXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kZHJtbjcyOCByZW1haW5kZXJuZWFyICBOYU4gIEluZiAgICAtPiAgTmFODQotZGRybW43MjkgcmVtYWluZGVybmVhciAgTmFOIC1OYU4gICAgLT4gIE5hTg0KLWRkcm1uNzMwIHJlbWFpbmRlcm5lYXIgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kZHJtbjczMSByZW1haW5kZXJuZWFyIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZGRybW43MzIgcmVtYWluZGVybmVhciAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkcm1uNzMzIHJlbWFpbmRlcm5lYXIgLTAgICAtTmFOICAgIC0+IC1OYU4NCi1kZHJtbjczNCByZW1haW5kZXJuZWFyICAwICAgIE5hTiAgICAtPiAgTmFODQotZGRybW43MzUgcmVtYWluZGVybmVhciAgMSAgIC1OYU4gICAgLT4gLU5hTg0KLWRkcm1uNzM2IHJlbWFpbmRlcm5lYXIgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZHJtbjczNyByZW1haW5kZXJuZWFyICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZGRybW43NDEgcmVtYWluZGVybmVhciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc0MiByZW1haW5kZXJuZWFyICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzQzIHJlbWFpbmRlcm5lYXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NDQgcmVtYWluZGVybmVhciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc0NSByZW1haW5kZXJuZWFyICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzQ2IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NDcgcmVtYWluZGVybmVhciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc0OSByZW1haW5kZXJuZWFyICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzUwIHJlbWFpbmRlcm5lYXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NTEgcmVtYWluZGVybmVhciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc1MiByZW1haW5kZXJuZWFyIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzUzIHJlbWFpbmRlcm5lYXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NTQgcmVtYWluZGVybmVhciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc1NSByZW1haW5kZXJuZWFyIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzU2IHJlbWFpbmRlcm5lYXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NTcgcmVtYWluZGVybmVhciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc1OCByZW1haW5kZXJuZWFyICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzU5IHJlbWFpbmRlcm5lYXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnaW5nIE5hTnMNCi1kZHJtbjc2MCByZW1haW5kZXJuZWFyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xDQotZGRybW43NjEgcmVtYWluZGVybmVhciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzYyIHJlbWFpbmRlcm5lYXIgIE5hTjMgIHNOYU45ICAgLT4gIE5hTjkgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc2MyByZW1haW5kZXJuZWFyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NjQgcmVtYWluZGVybmVhciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTENCi1kZHJtbjc2NSByZW1haW5kZXJuZWFyICBOYU42ICAgTmFOMTIgIC0+ICBOYU42DQotZGRybW43NjYgcmVtYWluZGVybmVhciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMNCi1kZHJtbjc2NyByZW1haW5kZXJuZWFyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNA0KLWRkcm1uNzY4IHJlbWFpbmRlcm5lYXIgICAgMCAgICBOYU4xNSAgLT4gIE5hTjE1DQotZGRybW43NjkgcmVtYWluZGVybmVhciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYNCi0NCi0tLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUNCi1kZHJtbjc3MCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gLTQNCi1kZHJtbjc3MSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDANCi1kZHJtbjc3MiAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRybW43NzMgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLQ0KLS0tIGxvbmcgb3BlcmFuZCBjaGVja3MNCi1kZHJtbjgwMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwDQotZGRybW44MDIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQ0KLWRkcm1uODAzIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMCAgMTAgIC0+IDANCi1kZHJtbjgwNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxDQotZGRybW44MDUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMA0KLWRkcm1uODA2IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwICAgIC0+IDENCi1kZHJtbjgwNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxDQotZGRybW44MDggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLWRkcm1uODA5IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDENCi1kZHJtbjgxMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxDQotZGRybW44MTEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQNCi1kZHJtbjgxMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQotDQotZGRybW44MjEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMA0KLWRkcm1uODIyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwMCAgIC0+IDENCi1kZHJtbjgyMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwDQotZGRybW44MjQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQ0KLWRkcm1uODI1IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDANCi1kZHJtbjgyNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxDQotZGRybW44MjcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQ0KLWRkcm1uODI4IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkxICAgIC0+IDENCi1kZHJtbjgyOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxDQotZGRybW44MzAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRkcm1uODMxIHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5NiAgMTAgIC0+IC00DQotZGRybW44MzIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLS0tIGZyb20gZGl2aWRlaW50DQotZGRybW44NDAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wDQotZGRybW44NDEgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjQgICAxICAtPiAgMC40DQotZGRybW44NDIgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjUgICAxICAtPiAgMC41DQotZGRybW44NDMgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjkgICAxICAtPiAtMC4xDQotZGRybW44NDQgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjk5OSAxICAtPiAtMC4wMDENCi1kZHJtbjg1MCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDMgICAgIDUgIC0+IC0yDQotZGRybW44NTEgcmVtYWluZGVybmVhciAgMTAwMDAwMDMgICAgICA1ICAtPiAtMg0KLWRkcm1uODUyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDMgICAgICAgNSAgLT4gLTINCi1kZHJtbjg1MyByZW1haW5kZXJuZWFyICAxMDAwMDMgICAgICAgIDUgIC0+IC0yDQotZGRybW44NTQgcmVtYWluZGVybmVhciAgMTAwMDMgICAgICAgICA1ICAtPiAtMg0KLWRkcm1uODU1IHJlbWFpbmRlcm5lYXIgIDEwMDMgICAgICAgICAgNSAgLT4gLTINCi1kZHJtbjg1NiByZW1haW5kZXJuZWFyICAxMDMgICAgICAgICAgIDUgIC0+IC0yDQotZGRybW44NTcgcmVtYWluZGVybmVhciAgMTMgICAgICAgICAgICA1ICAtPiAtMg0KLWRkcm1uODU4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAgICAgICAgNSAgLT4gIDENCi0NCi0tLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkcm1uODYwIHJlbWFpbmRlcm5lYXIgMTIzLjBlMSAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZGRybW44NjEgcmVtYWluZGVybmVhciAxMjMwICAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kZHJtbjg2MiByZW1haW5kZXJuZWFyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRkcm1uODYzIHJlbWFpbmRlcm5lYXIgMS4yM2UzICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZGRybW44NjQgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kZHJtbjg3MCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODcxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44NzIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDEwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg3MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODc0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDEwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44NzUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDEwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg3NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODc3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44NzggcmVtYWluZGVybmVhciAxMjMwICAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg3OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODgwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMTAwMDAwMCAtPiAxMjMwDQotZGRybW44ODEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgMTAwMDAwIC0+IDEyMzANCi1kZHJtbjg4MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMA0KLWRkcm1uODgzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMTAwMCAtPiAgMjMwDQotZGRybW44ODQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgMTAwIC0+ICAgMzANCi1kZHJtbjg4NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMA0KLWRkcm1uODg2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMSAtPiAgICAwDQotDQotZGRybW44OTAgcmVtYWluZGVybmVhciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg5MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODkyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44OTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg5NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODk1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44OTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg5NyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODk5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkwMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTAyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwDQotZGRybW45MDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IC03NzANCi1kZHJtbjkwNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMA0KLWRkcm1uOTA1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgLTEwDQotZGRybW45MDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDANCi0NCi1kZHJtbjkxMCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDUwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTExIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MTIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkxMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDUwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTE0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MTUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkxNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDUwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTE3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MTkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkyMCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDUwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTIxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwDQotZGRybW45MjIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzANCi1kZHJtbjkyMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDUwMDAgLT4gMTIzMA0KLWRkcm1uOTI0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwDQotZGRybW45MjUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAtMjANCi1kZHJtbjkyNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDUgLT4gICAgMA0KLQ0KLWRkcm1uOTMwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgOTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MzEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgOTAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkzMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTMzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgOTAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MzQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgOTAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkzNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTM2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgOTAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MzcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgOTAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkzOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTQwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgOTAwMDAwMCAtPiAxMjMwDQotZGRybW45NDEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgOTAwMDAwIC0+IDEyMzANCi1kZHJtbjk0MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMA0KLWRkcm1uOTQzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgOTAwMCAtPiAxMjMwDQotZGRybW45NDQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgOTAwIC0+ICAzMzANCi1kZHJtbjk0NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gIC0zMA0KLWRkcm1uOTQ2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgOSAtPiAgIC0zDQotDQotZGRybW45NTAgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTYxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAyOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJtbjk2MiByZW1haW5kZXJuZWFyIDEyM2UxICAgMzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRybW45NjMgcmVtYWluZGVybmVhciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRkcm1uOTY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA1OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJtbjk2NSByZW1haW5kZXJuZWFyIDEyM2UxICAgNjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRybW45NjYgcmVtYWluZGVybmVhciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRkcm1uOTY3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA4OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJtbjk2OCByZW1haW5kZXJuZWFyIDEyM2UxICAgOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRybW45NjkgcmVtYWluZGVybmVhciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMA0KLQ0KLWRkcm1uOTgwIHJlbWFpbmRlcm5lYXIgMTIzZTEgMTAwMEUyOTkgLT4gMS4yM0UrMyAgLS0gMTIzRSsxIGludGVybmFsbHkNCi0NCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0NCi1kZHJtbjEwNTEgcmVtYWluZGVybmVhciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRybW4xMDUyIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkcm1uMTA1MyByZW1haW5kZXJuZWFyIC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZHJtbjEwNTQgcmVtYWluZGVybmVhciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRybW4xMDU1IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcNCi1kZHJtbjEwNTYgcmVtYWluZGVybmVhciAgMWUtMjc3IC0xZSszMTEgLT4gIDFFLTI3Nw0KLWRkcm1uMTA1NyByZW1haW5kZXJuZWFyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3DQotZGRybW4xMDU4IHJlbWFpbmRlcm5lYXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcNCi0NCi0tLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdA0KLWRkcm1uMTEwMCByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAxLjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0wLjIzNDU2Nzg5MDEyMzQ1NQ0KLWRkcm1uMTEwMSByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgMS4wMDAwMDAwMDAwMDAwMSAgLT4gICAtMC4zNDU2Nzg5MDEyMzQ0NA0KLWRkcm1uMTEwMiByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDEuMDAwMDAwMDAwMDAwMSAgLT4gICAgLTAuNDU2Nzg5MDEyMzMzMw0KLWRkcm1uMTEwMyByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU1ICA0LjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjMwODY0MTk3MjUzMDg2NA0KLWRkcm1uMTEwNCByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICA0LjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0wLjMwODY0MTk3MjUzMDg2NA0KLWRkcm1uMTExNSByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDQuOTk5OTk5OTk5OTk5OSAgLT4gICAgIDAuNjkxMzU3ODAyNDY5Ng0KLWRkcm1uMTExNiByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgNC45OTk5OTk5OTk5OTk5OSAgLT4gICAtMS41MzA4NjQyMTk3NTMwOA0KLWRkcm1uMTExNyByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICA0Ljk5OTk5OTk5OTk5OTk5OSAgLT4gICAxLjI0NjkxMzU3ODAyNDY5MQ0KLWRkcm1uMTExOCByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICA1LjAwMDAwMDAwMDAwMDAwMSAgLT4gICAwLjc1MzA4NjQyMTk3NTMwOQ0KLWRkcm1uMTExOSByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgNS4wMDAwMDAwMDAwMDAwMSAgLT4gICAtMS40NjkxMzU3ODAyNDY5MQ0KLWRkcm1uMTExMCByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDUuMDAwMDAwMDAwMDAwMSAgLT4gICAgIDEuMzA4NjQyMTk3NTMxNA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZHJtbjEwMDAgcmVtYWluZGVybmVhciAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjEwMDEgcmVtYWluZGVybmVhciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkUmVtYWluZGVyTmVhci5kZWNUZXN0IC0tIGRlY0RvdWJsZSByZW1haW5kZXItbmVhciAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQorZGRybW4wMDEgcmVtYWluZGVybmVhciAgMSAgICAgMSAgICAtPiAgMAorZGRybW4wMDIgcmVtYWluZGVybmVhciAgMiAgICAgMSAgICAtPiAgMAorZGRybW4wMDMgcmVtYWluZGVybmVhciAgMSAgICAgMiAgICAtPiAgMQorZGRybW4wMDQgcmVtYWluZGVybmVhciAgMiAgICAgMiAgICAtPiAgMAorZGRybW4wMDUgcmVtYWluZGVybmVhciAgMCAgICAgMSAgICAtPiAgMAorZGRybW4wMDYgcmVtYWluZGVybmVhciAgMCAgICAgMiAgICAtPiAgMAorZGRybW4wMDcgcmVtYWluZGVybmVhciAgMSAgICAgMyAgICAtPiAgMQorZGRybW4wMDggcmVtYWluZGVybmVhciAgMiAgICAgMyAgICAtPiAtMQorZGRybW4wMDkgcmVtYWluZGVybmVhciAgMyAgICAgMyAgICAtPiAgMAorCitkZHJtbjAxMCByZW1haW5kZXJuZWFyICAyLjQgICAxICAgIC0+ICAwLjQKK2Rkcm1uMDExIHJlbWFpbmRlcm5lYXIgIDIuNCAgIC0xICAgLT4gIDAuNAorZGRybW4wMTIgcmVtYWluZGVybmVhciAgLTIuNCAgMSAgICAtPiAgLTAuNAorZGRybW4wMTMgcmVtYWluZGVybmVhciAgLTIuNCAgLTEgICAtPiAgLTAuNAorZGRybW4wMTQgcmVtYWluZGVybmVhciAgMi40MCAgMSAgICAtPiAgMC40MAorZGRybW4wMTUgcmVtYWluZGVybmVhciAgMi40MDAgMSAgICAtPiAgMC40MDAKK2Rkcm1uMDE2IHJlbWFpbmRlcm5lYXIgIDIuNCAgIDIgICAgLT4gIDAuNAorZGRybW4wMTcgcmVtYWluZGVybmVhciAgMi40MDAgMiAgICAtPiAgMC40MDAKK2Rkcm1uMDE4IHJlbWFpbmRlcm5lYXIgIDIuICAgIDIgICAgLT4gIDAKK2Rkcm1uMDE5IHJlbWFpbmRlcm5lYXIgIDIwICAgIDIwICAgLT4gIDAKKworZGRybW4wMjAgcmVtYWluZGVybmVhciAgMTg3ICAgMTg3ICAgIC0+ICAwCitkZHJtbjAyMSByZW1haW5kZXJuZWFyICA1ICAgICAyICAgICAgLT4gIDEKK2Rkcm1uMDIyIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIuMCAgICAtPiAgMS4wCitkZHJtbjAyMyByZW1haW5kZXJuZWFyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwCitkZHJtbjAyNCByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCitkZHJtbjAyNSByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCisKK2Rkcm1uMDMwIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgICAtPiAgMQorZGRybW4wMzEgcmVtYWluZGVybmVhciAgMSAgICAgNCAgICAgIC0+ICAxCitkZHJtbjAzMiByZW1haW5kZXJuZWFyICAxICAgICA4ICAgICAgLT4gIDEKKworZGRybW4wMzMgcmVtYWluZGVybmVhciAgMSAgICAgMTYgICAgIC0+ICAxCitkZHJtbjAzNCByZW1haW5kZXJuZWFyICAxICAgICAzMiAgICAgLT4gIDEKK2Rkcm1uMDM1IHJlbWFpbmRlcm5lYXIgIDEgICAgIDY0ICAgICAtPiAgMQorZGRybW4wNDAgcmVtYWluZGVybmVhciAgMSAgICAtMiAgICAgIC0+ICAxCitkZHJtbjA0MSByZW1haW5kZXJuZWFyICAxICAgIC00ICAgICAgLT4gIDEKK2Rkcm1uMDQyIHJlbWFpbmRlcm5lYXIgIDEgICAgLTggICAgICAtPiAgMQorZGRybW4wNDMgcmVtYWluZGVybmVhciAgMSAgICAtMTYgICAgIC0+ICAxCitkZHJtbjA0NCByZW1haW5kZXJuZWFyICAxICAgIC0zMiAgICAgLT4gIDEKK2Rkcm1uMDQ1IHJlbWFpbmRlcm5lYXIgIDEgICAgLTY0ICAgICAtPiAgMQorZGRybW4wNTAgcmVtYWluZGVybmVhciAtMSAgICAgMiAgICAgIC0+ICAtMQorZGRybW4wNTEgcmVtYWluZGVybmVhciAtMSAgICAgNCAgICAgIC0+ICAtMQorZGRybW4wNTIgcmVtYWluZGVybmVhciAtMSAgICAgOCAgICAgIC0+ICAtMQorZGRybW4wNTMgcmVtYWluZGVybmVhciAtMSAgICAgMTYgICAgIC0+ICAtMQorZGRybW4wNTQgcmVtYWluZGVybmVhciAtMSAgICAgMzIgICAgIC0+ICAtMQorZGRybW4wNTUgcmVtYWluZGVybmVhciAtMSAgICAgNjQgICAgIC0+ICAtMQorZGRybW4wNjAgcmVtYWluZGVybmVhciAtMSAgICAtMiAgICAgIC0+ICAtMQorZGRybW4wNjEgcmVtYWluZGVybmVhciAtMSAgICAtNCAgICAgIC0+ICAtMQorZGRybW4wNjIgcmVtYWluZGVybmVhciAtMSAgICAtOCAgICAgIC0+ICAtMQorZGRybW4wNjMgcmVtYWluZGVybmVhciAtMSAgICAtMTYgICAgIC0+ICAtMQorZGRybW4wNjQgcmVtYWluZGVybmVhciAtMSAgICAtMzIgICAgIC0+ICAtMQorZGRybW4wNjUgcmVtYWluZGVybmVhciAtMSAgICAtNjQgICAgIC0+ICAtMQorCitkZHJtbjA2NiByZW1haW5kZXJuZWFyICAgICAgICAgIDkuOSAgIDEgIC0+IC0wLjEKK2Rkcm1uMDY3IHJlbWFpbmRlcm5lYXIgICAgICAgICA5OS43ICAgMSAgLT4gLTAuMworZGRybW4wNjggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5ICAgICAxICAtPiAwCitkZHJtbjA2OSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNAorZGRybW4wNzAgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjUgICAxICAtPiAtMC41CitkZHJtbjA3MSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOSAgIDEgIC0+IC0wLjEKK2Rkcm1uMDcyIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gLTAuMDAxCitkZHJtbjA3MyByZW1haW5kZXJuZWFyICA5OTk5OTkuOTk5OTk5IDEgIC0+IC0wLjAwMDAwMQorZGRybW4wNzQgcmVtYWluZGVybmVhciAgOSAgICAgICAgICAgICAxICAtPiAwCitkZHJtbjA3NSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDAKK2Rkcm1uMDc2IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMiAgLT4gLTEKK2Rkcm1uMDc3IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMyAgLT4gMAorZGRybW4wNzggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSA0ICAtPiAtMQorCitkZHJtbjA4MCByZW1haW5kZXJuZWFyICAwLiAgICAgICAgICAgIDEgIC0+IDAKK2Rkcm1uMDgxIHJlbWFpbmRlcm5lYXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wCitkZHJtbjA4MiByZW1haW5kZXJuZWFyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDAKK2Rkcm1uMDgzIHJlbWFpbmRlcm5lYXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMAorZGRybW4wODQgcmVtYWluZGVybmVhciAgMC4wMEUrMyAgICAgICAxICAtPiAwCitkZHJtbjA4NSByZW1haW5kZXJuZWFyICAwLjAwRSsyICAgICAgIDEgIC0+IDAKK2Rkcm1uMDg2IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wCitkZHJtbjA4NyByZW1haW5kZXJuZWFyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDAKK2Rkcm1uMDg4IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMAorZGRybW4wODkgcmVtYWluZGVybmVhciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMAorZGRybW4wOTAgcmVtYWluZGVybmVhciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDAKK2Rkcm1uMDkxIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMAorZGRybW4wOTIgcmVtYWluZGVybmVhciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMAorZGRybW4wOTMgcmVtYWluZGVybmVhciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03CitkZHJtbjA5NCByZW1haW5kZXJuZWFyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgKK2Rkcm1uMDk1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXJuZWFyIGJ5IDAKK2Rkcm1uMTAxIHJlbWFpbmRlcm5lYXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMTAyIHJlbWFpbmRlcm5lYXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMTAzIHJlbWFpbmRlcm5lYXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMTA0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMTA1IHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMTA2IHJlbWFpbmRlcm5lYXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKy0tIFtTb21lIHRoaW5rIHRoaXMgbmV4dCBncm91cCBzaG91bGQgYmUgRGl2aXNpb25fYnlfemVybyBleGNlcHRpb24sIGJ1dAorLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3IKKy0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldCitkZHJtbjEwNyByZW1haW5kZXJuZWFyICAwLjAwMDEgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTA4IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMDkgcmVtYWluZGVybmVhciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExMCByZW1haW5kZXJuZWFyICAxICAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTExIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMTIgcmVtYWluZGVybmVhciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExMyByZW1haW5kZXJuZWFyIDFFKzEwMCAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTE0IHJlbWFpbmRlcm5lYXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMTUgcmVtYWluZGVybmVhciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExNiByZW1haW5kZXJuZWFyICAwLjAxICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTE5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMjAgcmVtYWluZGVybmVhciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjEyMSByZW1haW5kZXJuZWFyICAxICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTIyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMjMgcmVtYWluZGVybmVhciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjEyNCByZW1haW5kZXJuZWFyIDFFKzM4NCAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB6ZXJvcyBvbiBsZWZ0CitkZHJtbjEzMCByZW1haW5kZXJuZWFyICAwICAgICAgMSAgIC0+ICAwCitkZHJtbjEzMSByZW1haW5kZXJuZWFyICAwICAgICAtMSAgIC0+ICAwCitkZHJtbjEzMiByZW1haW5kZXJuZWFyICAwLjAgICAgMSAgIC0+ICAwLjAKK2Rkcm1uMTMzIHJlbWFpbmRlcm5lYXIgIDAuMCAgIC0xICAgLT4gIDAuMAorZGRybW4xMzQgcmVtYWluZGVybmVhciAtMCAgICAgIDEgICAtPiAtMAorZGRybW4xMzUgcmVtYWluZGVybmVhciAtMCAgICAgLTEgICAtPiAtMAorZGRybW4xMzYgcmVtYWluZGVybmVhciAtMC4wICAgIDEgICAtPiAtMC4wCitkZHJtbjEzNyByZW1haW5kZXJuZWFyIC0wLjAgICAtMSAgIC0+IC0wLjAKKworLS0gMC41ZXJzCitkZHJtbjE0MyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41CitkZHJtbjE0NCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41CitkZHJtbjE0NSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAorZGRybW4xNDYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkZHJtbjE0NyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAorZGRybW4xNDggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2Rkcm1uMTQ5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCistLSBzdGVhZGllcworZGRybW4xNTAgcmVtYWluZGVybmVhciAgMSAgMSAgIC0+IDAKK2Rkcm1uMTUxIHJlbWFpbmRlcm5lYXIgIDEgIDIgICAtPiAxCitkZHJtbjE1MiByZW1haW5kZXJuZWFyICAxICAzICAgLT4gMQorZGRybW4xNTMgcmVtYWluZGVybmVhciAgMSAgNCAgIC0+IDEKK2Rkcm1uMTU0IHJlbWFpbmRlcm5lYXIgIDEgIDUgICAtPiAxCitkZHJtbjE1NSByZW1haW5kZXJuZWFyICAxICA2ICAgLT4gMQorZGRybW4xNTYgcmVtYWluZGVybmVhciAgMSAgNyAgIC0+IDEKK2Rkcm1uMTU3IHJlbWFpbmRlcm5lYXIgIDEgIDggICAtPiAxCitkZHJtbjE1OCByZW1haW5kZXJuZWFyICAxICA5ICAgLT4gMQorZGRybW4xNTkgcmVtYWluZGVybmVhciAgMSAgMTAgIC0+IDEKK2Rkcm1uMTYwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCitkZHJtbjE2MSByZW1haW5kZXJuZWFyICAyICAxICAgLT4gMAorZGRybW4xNjIgcmVtYWluZGVybmVhciAgMyAgMSAgIC0+IDAKK2Rkcm1uMTYzIHJlbWFpbmRlcm5lYXIgIDQgIDEgICAtPiAwCitkZHJtbjE2NCByZW1haW5kZXJuZWFyICA1ICAxICAgLT4gMAorZGRybW4xNjUgcmVtYWluZGVybmVhciAgNiAgMSAgIC0+IDAKK2Rkcm1uMTY2IHJlbWFpbmRlcm5lYXIgIDcgIDEgICAtPiAwCitkZHJtbjE2NyByZW1haW5kZXJuZWFyICA4ICAxICAgLT4gMAorZGRybW4xNjggcmVtYWluZGVybmVhciAgOSAgMSAgIC0+IDAKK2Rkcm1uMTY5IHJlbWFpbmRlcm5lYXIgIDEwIDEgICAtPiAwCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXIKK2Rkcm1uMTcxIHJlbWFpbmRlcm5lYXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMAorZGRybW4xNzIgcmVtYWluZGVybmVhciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwCitkZHJtbjE3MyByZW1haW5kZXJuZWFyICAgMC41MSAxLjAyMCAtPiAgMC41MTAKK2Rkcm1uMTc0IHJlbWFpbmRlcm5lYXIgICAwLjUyIDEuMDIwIC0+IC0wLjUwMAorZGRybW4xNzUgcmVtYWluZGVybmVhciAgIDAuNiAgMS4wMjAgLT4gLTAuNDIwCisKKy0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCitkZHJtbjIwMSByZW1haW5kZXJuZWFyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMjAyIHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRybW4yMDMgcmVtYWluZGVybmVhciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjIwNCByZW1haW5kZXJuZWFyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4yMDUgcmVtYWluZGVybmVhciAgMC4wMSAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMjA2IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjIwNyByZW1haW5kZXJuZWFyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4yMDggcmVtYWluZGVybmVhciAgMSAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMjA5IHJlbWFpbmRlcm5lYXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjIxMCByZW1haW5kZXJuZWFyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4yMTEgcmVtYWluZGVybmVhciAxRSszODAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gdGVzdHMgZnJvbSB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbgorZGRybW4yMjEgcmVtYWluZGVybmVhciAyLjEgICAgIDMgICAtPiAtMC45CitkZHJtbjIyMiByZW1haW5kZXJuZWFyICAxMCAgICAgNiAgIC0+IC0yCitkZHJtbjIyMyByZW1haW5kZXJuZWFyICAxMCAgICAgMyAgIC0+ICAxCitkZHJtbjIyNCByZW1haW5kZXJuZWFyIC0xMCAgICAgMyAgIC0+IC0xCitkZHJtbjIyNSByZW1haW5kZXJuZWFyICAxMC4yICAgMSAgIC0+IDAuMgorZGRybW4yMjYgcmVtYWluZGVybmVhciAgMTAgICAgIDAuMyAtPiAwLjEKK2Rkcm1uMjI3IHJlbWFpbmRlcm5lYXIgICAzLjYgICAxLjMgLT4gLTAuMworCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyCitkZHJtbjIzMSByZW1haW5kZXJuZWFyICAtMC40ICAxLjAyMCAtPiAtMC40MDAKK2Rkcm1uMjMyIHJlbWFpbmRlcm5lYXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMAorZGRybW4yMzMgcmVtYWluZGVybmVhciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwCitkZHJtbjIzNCByZW1haW5kZXJuZWFyICAtMC41MiAxLjAyMCAtPiAgMC41MDAKK2Rkcm1uMjM1IHJlbWFpbmRlcm5lYXIgIC0wLjYgIDEuMDIwIC0+ICAwLjQyMAorCistLSBoaWdoIFhzCitkZHJtbjI0MCByZW1haW5kZXJuZWFyICAxRSsyICAxLjAwICAtPiAgMC4wMAorCistLSBkZHJtbjN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbAorZGRybW4zMDEgcmVtYWluZGVybmVhciAgIDEgICAgMyAgICAgLT4gIDEKK2Rkcm1uMzAyIHJlbWFpbmRlcm5lYXIgICA1ICAgIDUgICAgIC0+ICAwCitkZHJtbjMwMyByZW1haW5kZXJuZWFyICAgMTMgICAxMCAgICAtPiAgMworZGRybW4zMDQgcmVtYWluZGVybmVhciAgIDEzICAgNTAgICAgLT4gIDEzCitkZHJtbjMwNSByZW1haW5kZXJuZWFyICAgMTMgICAxMDAgICAtPiAgMTMKK2Rkcm1uMzA2IHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwMDAgIC0+ICAxMworZGRybW4zMDcgcmVtYWluZGVybmVhciAgIC4xMyAgICAxICAgLT4gIDAuMTMKK2Rkcm1uMzA4IHJlbWFpbmRlcm5lYXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMworZGRybW4zMDkgcmVtYWluZGVybmVhciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMworZGRybW4zMTAgcmVtYWluZGVybmVhciAgIDEuMDMzICAxICAgLT4gIDAuMDMzCitkZHJtbjMxMSByZW1haW5kZXJuZWFyICAgMTAuMzMgIDEgICAtPiAgMC4zMworZGRybW4zMTIgcmVtYWluZGVybmVhciAgIDEwLjMzIDEwICAgLT4gIDAuMzMKK2Rkcm1uMzEzIHJlbWFpbmRlcm5lYXIgICAxMDMuMyAgMSAgIC0+ICAwLjMKK2Rkcm1uMzE0IHJlbWFpbmRlcm5lYXIgICAxMzMgICAxMCAgIC0+ICAzCitkZHJtbjMxNSByZW1haW5kZXJuZWFyICAgMTAzMyAgMTAgICAtPiAgMworZGRybW4zMTYgcmVtYWluZGVybmVhciAgIDEwMzMgIDUwICAgLT4gLTE3CitkZHJtbjMxNyByZW1haW5kZXJuZWFyICAgMTAxLjAgIDMgICAtPiAtMS4wCitkZHJtbjMxOCByZW1haW5kZXJuZWFyICAgMTAyLjAgIDMgICAtPiAgMC4wCitkZHJtbjMxOSByZW1haW5kZXJuZWFyICAgMTAzLjAgIDMgICAtPiAgMS4wCitkZHJtbjMyMCByZW1haW5kZXJuZWFyICAgMi40MCAgIDEgICAtPiAgMC40MAorZGRybW4zMjEgcmVtYWluZGVybmVhciAgIDIuNDAwICAxICAgLT4gIDAuNDAwCitkZHJtbjMyMiByZW1haW5kZXJuZWFyICAgMi40ICAgIDEgICAtPiAgMC40CitkZHJtbjMyMyByZW1haW5kZXJuZWFyICAgMi40ICAgIDIgICAtPiAgMC40CitkZHJtbjMyNCByZW1haW5kZXJuZWFyICAgMi40MDAgIDIgICAtPiAgMC40MDAKK2Rkcm1uMzI1IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zICAgIC0+ICAwLjEKK2Rkcm1uMzI2IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMCAgIC0+ICAwLjEwCitkZHJtbjMyNyByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwICAtPiAgMC4xMDAKK2Rkcm1uMzI4IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDAKK2Rkcm1uMzI5IHJlbWFpbmRlcm5lYXIgICAxLjAgICAgMC4zIC0+ICAwLjEKK2Rkcm1uMzMwIHJlbWFpbmRlcm5lYXIgICAxLjAwICAgMC4zIC0+ICAwLjEwCitkZHJtbjMzMSByZW1haW5kZXJuZWFyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDAKK2Rkcm1uMzMyIHJlbWFpbmRlcm5lYXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDAKK2Rkcm1uMzMzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK2Rkcm1uMzM0IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK2Rkcm1uMzM1IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitkZHJtbjMzNiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK2Rkcm1uMzM3IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCitkZHJtbjMzOCByZW1haW5kZXJuZWFyICAgMC41MCAyLjAxICAtPiAgMC41MAorZGRybW4zMzkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKK2Rkcm1uMzQwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIC0xRS03CitkZHJtbjM0MSByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMSAgICAtPiAgLTFFLTgKK2Rkcm1uMzQyIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgLTFFLTkKK2Rkcm1uMzQzIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIC0xRS0xMAorZGRybW4zNDQgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIC0xRS0xMQorZGRybW4zNDUgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNworZGRybW4zNDYgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgKK2Rkcm1uMzQ3IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OSAgICAtPiAgMUUtOQorZGRybW4zNDggcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTAKK2Rkcm1uMzQ5IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQorZGRybW4zNTAgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMgorCitkZHJtbjM1MSByZW1haW5kZXJuZWFyICAgMC4wMyAgNyAgLT4gIDAuMDMKK2Rkcm1uMzUyIHJlbWFpbmRlcm5lYXIgICA1ICAgMiAgICAtPiAgMQorZGRybW4zNTMgcmVtYWluZGVybmVhciAgIDQuMSAgIDIgICAgLT4gIDAuMQorZGRybW4zNTQgcmVtYWluZGVybmVhciAgIDQuMDEgICAyICAgIC0+ICAwLjAxCitkZHJtbjM1NSByZW1haW5kZXJuZWFyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQorZGRybW4zNTYgcmVtYWluZGVybmVhciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQorZGRybW4zNTcgcmVtYWluZGVybmVhciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxCitkZHJtbjM1OCByZW1haW5kZXJuZWFyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQorZGRybW4zNTkgcmVtYWluZGVybmVhciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcKKworZGRybW4zNjAgcmVtYWluZGVybmVhciAgIDEuMiAgIDAuNzM0NSAtPiAtMC4yNjkwCitkZHJtbjM2MSByZW1haW5kZXJuZWFyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKK2Rkcm1uMzYyIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjIgICAgLT4gIDAuMAorZGRybW4zNjMgcmVtYWluZGVybmVhciAgIDAuOCAgIDAuMyAgICAtPiAtMC4xCitkZHJtbjM2NCByZW1haW5kZXJuZWFyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAorZGRybW4zNjUgcmVtYWluZGVybmVhciAgIDAuODAwICAgMS43ICAtPiAgMC44MDAKK2Rkcm1uMzY2IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwCisKKy0tIHJvdW5kIHRvIGV2ZW4KK2Rkcm1uMzcxIHJlbWFpbmRlcm5lYXIgICAxMjEgICAgIDIgICAgLT4gIDEKK2Rkcm1uMzcyIHJlbWFpbmRlcm5lYXIgICAxMjIgICAgIDIgICAgLT4gIDAKK2Rkcm1uMzczIHJlbWFpbmRlcm5lYXIgICAxMjMgICAgIDIgICAgLT4gLTEKK2Rkcm1uMzc0IHJlbWFpbmRlcm5lYXIgICAxMjQgICAgIDIgICAgLT4gIDAKK2Rkcm1uMzc1IHJlbWFpbmRlcm5lYXIgICAxMjUgICAgIDIgICAgLT4gIDEKK2Rkcm1uMzc2IHJlbWFpbmRlcm5lYXIgICAxMjYgICAgIDIgICAgLT4gIDAKK2Rkcm1uMzc3IHJlbWFpbmRlcm5lYXIgICAxMjcgICAgIDIgICAgLT4gLTEKKworZGRybW4zODEgcmVtYWluZGVybmVhciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCitkZHJtbjM4MiByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAwMDEgICAgLT4gLTAuMjM0NAorZGRybW4zODMgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDEgICAgIC0+IC0wLjMzMworZGRybW4zODQgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMSAgICAgIC0+IC0wLjIzCitkZHJtbjM4NSByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjEgICAgICAgLT4gLTAuMworZGRybW4zODYgcmVtYWluZGVybmVhciAxMjM1NSAgNCAgICAgICAgIC0+IC0xCitkZHJtbjM4NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKK2Rkcm1uMzg4IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQuMDAwMSAgICAtPiAtMS4zMDg5CitkZHJtbjM4OSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNAorZGRybW4zOTAgcmVtYWluZGVybmVhciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKK2Rkcm1uMzkxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTkgICAgICAtPiAtMC4yNgorZGRybW4zOTIgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQorZGRybW4zOTMgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKK2Rkcm1uMzk0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUgICAgICAgICAtPiAgMAorZGRybW4zOTUgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDAxICAgIC0+IC0wLjI0NjkKK2Rkcm1uMzk2IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAxICAgICAtPiAtMi40NjkKK2Rkcm1uMzk3IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDEgICAgICAtPiAgMC4zNgorZGRybW4zOTggcmVtYWluZGVybmVhciAxMjM0NSAgNS4xICAgICAgIC0+IC0yLjEKKworLS0gdGhlIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMKK2Rkcm1uNDAxIHJlbWFpbmRlcm5lYXIgICAwLjQgICAgICAgICAxICAgLT4gIDAuNAorZGRybW40MDIgcmVtYWluZGVybmVhciAgIDAuNDUgICAgICAgIDEgICAtPiAgMC40NQorZGRybW40MDMgcmVtYWluZGVybmVhciAgIDAuNDU1ICAgICAgIDEgICAtPiAgMC40NTUKK2Rkcm1uNDA0IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTUgICAgICAxICAgLT4gIDAuNDU1NQorZGRybW40MDUgcmVtYWluZGVybmVhciAgIDAuNDU1NTUgICAgIDEgICAtPiAgMC40NTU1NQorZGRybW40MDYgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1ICAgIDEgICAtPiAgMC40NTU1NTUKK2Rkcm1uNDA3IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTUgICAxICAgLT4gIDAuNDU1NTU1NQorZGRybW40MDggcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTUgIDEgICAtPiAgMC40NTU1NTU1NQorZGRybW40MDkgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTU1NTU1NTUKKy0tIHdpdGggc3BpbGwuLi4gWzQxMiBleGVyY2lzZXMgc3RpY2t0YWIgbG9vcF0KK2Rkcm1uNDExIHJlbWFpbmRlcm5lYXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQorZGRybW40MTIgcmVtYWluZGVybmVhciAgIDAuNTUgICAgICAgIDEgICAtPiAtMC40NQorZGRybW40MTMgcmVtYWluZGVybmVhciAgIDAuNTU1ICAgICAgIDEgICAtPiAtMC40NDUKK2Rkcm1uNDE0IHJlbWFpbmRlcm5lYXIgICAwLjU1NTUgICAgICAxICAgLT4gLTAuNDQ0NQorZGRybW40MTUgcmVtYWluZGVybmVhciAgIDAuNTU1NTUgICAgIDEgICAtPiAtMC40NDQ0NQorZGRybW40MTYgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1ICAgIDEgICAtPiAtMC40NDQ0NDUKK2Rkcm1uNDE3IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTUgICAxICAgLT4gLTAuNDQ0NDQ0NQorZGRybW40MTggcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTUgIDEgICAtPiAtMC40NDQ0NDQ0NQorZGRybW40MTkgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTU1IDEgICAtPiAtMC40NDQ0NDQ0NDUKKworLS0gZm9sZGRvd25zCitkZHJtbjQyMSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rkcm1uNDIyIHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDFFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAorZGRybW40MjMgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgMkUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCitkZHJtbjQyNCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAzRSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2Rkcm1uNDI1IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDRFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRybW40MjYgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgNUUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCitkZHJtbjQyNyByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA2RSszODMgIC0+ICAtMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2Rkcm1uNDI4IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDdFKzM4MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRybW40MjkgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgOEUrMzgzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJtbjQzMCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA5RSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKKy0tIHRpbmllcworZGRybW40MzEgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgMUUtMzk4ICAtPiAgIDBFLTM5OAorZGRybW40MzIgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgMkUtMzk4ICAtPiAgIDBFLTM5OAorZGRybW40MzMgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgM0UtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDM0IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDRFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsCitkZHJtbjQzNSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA1RS0zOTggIC0+ICAgMEUtMzk4CitkZHJtbjQzNiByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA2RS0zOTggIC0+ICAtMkUtMzk4IFN1Ym5vcm1hbAorZGRybW40MzcgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgN0UtMzk4ICAtPiAgIDNFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDM4IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDhFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsCitkZHJtbjQzOSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA5RS0zOTggIC0+ICAgMUUtMzk4IFN1Ym5vcm1hbAorZGRybW40NDAgcmVtYWluZGVybmVhciAgIDFFLTM5NyAxMEUtMzk4ICAtPiAgIDBFLTM5OAorZGRybW40NDEgcmVtYWluZGVybmVhciAgIDFFLTM5NyAxMUUtMzk4ICAtPiAgLTFFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDQyIHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMTFFLTM5OCAgLT4gIC0xRS0zOTggU3Vibm9ybWFsCitkZHJtbjQ0MyByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDIwRS0zOTggIC0+ICAgMEUtMzk4CitkZHJtbjQ0NCByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDIxRS0zOTggIC0+ICAtOEUtMzk4IFN1Ym5vcm1hbAorZGRybW40NDUgcmVtYWluZGVybmVhciAxMDBFLTM5NyAzMEUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwKKworLS0gemVybyBzaWducworZGRybW42NTAgcmVtYWluZGVybmVhciAgMSAgMSAtPiAgMAorZGRybW42NTEgcmVtYWluZGVybmVhciAtMSAgMSAtPiAtMAorZGRybW42NTIgcmVtYWluZGVybmVhciAgMSAtMSAtPiAgMAorZGRybW42NTMgcmVtYWluZGVybmVhciAtMSAtMSAtPiAtMAorZGRybW42NTQgcmVtYWluZGVybmVhciAgMCAgMSAtPiAgMAorZGRybW42NTUgcmVtYWluZGVybmVhciAtMCAgMSAtPiAtMAorZGRybW42NTYgcmVtYWluZGVybmVhciAgMCAtMSAtPiAgMAorZGRybW42NTcgcmVtYWluZGVybmVhciAtMCAtMSAtPiAtMAorZGRybW42NTggcmVtYWluZGVybmVhciAgMC4wMCAgMSAgLT4gIDAuMDAKK2Rkcm1uNjU5IHJlbWFpbmRlcm5lYXIgLTAuMDAgIDEgIC0+IC0wLjAwCisKKy0tIFNwZWNpYWxzCitkZHJtbjY4MCByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4MSByZW1haW5kZXJuZWFyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4MiByZW1haW5kZXJuZWFyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4MyByZW1haW5kZXJuZWFyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4NCByZW1haW5kZXJuZWFyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4NSByZW1haW5kZXJuZWFyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4NiByZW1haW5kZXJuZWFyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4NyByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4OCByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZGRybW42ODkgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42OTEgcmVtYWluZGVybmVhciAtMSAgICAgSW5mICAgLT4gLTEKK2Rkcm1uNjkyIHJlbWFpbmRlcm5lYXIgIDAgICAgIEluZiAgIC0+ICAwCitkZHJtbjY5MyByZW1haW5kZXJuZWFyIC0wICAgICBJbmYgICAtPiAtMAorZGRybW42OTQgcmVtYWluZGVybmVhciAgMSAgICAgSW5mICAgLT4gIDEKK2Rkcm1uNjk1IHJlbWFpbmRlcm5lYXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkZHJtbjY5NiByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkcm1uNzAwIHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzAxIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzAyIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzAzIHJlbWFpbmRlcm5lYXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA0IHJlbWFpbmRlcm5lYXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA1IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA2IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA3IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA4IHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA5IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkZHJtbjcxMCByZW1haW5kZXJuZWFyIC0xICAgIC1JbmYgICAtPiAtMQorZGRybW43MTEgcmVtYWluZGVybmVhciAtMCAgICAtSW5mICAgLT4gLTAKK2Rkcm1uNzEyIHJlbWFpbmRlcm5lYXIgIDAgICAgLUluZiAgIC0+ICAwCitkZHJtbjcxMyByZW1haW5kZXJuZWFyICAxICAgIC1JbmYgICAtPiAgMQorZGRybW43MTQgcmVtYWluZGVybmVhciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2Rkcm1uNzE1IHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRybW43MjEgcmVtYWluZGVybmVhciAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRybW43MjIgcmVtYWluZGVybmVhciAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRybW43MjMgcmVtYWluZGVybmVhciAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRybW43MjQgcmVtYWluZGVybmVhciAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRybW43MjUgcmVtYWluZGVybmVhciAtTmFOICAwICAgICAgLT4gLU5hTgorZGRybW43MjYgcmVtYWluZGVybmVhciAgTmFOICAxICAgICAgLT4gIE5hTgorZGRybW43MjcgcmVtYWluZGVybmVhciAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRybW43MjggcmVtYWluZGVybmVhciAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRybW43MjkgcmVtYWluZGVybmVhciAgTmFOIC1OYU4gICAgLT4gIE5hTgorZGRybW43MzAgcmVtYWluZGVybmVhciAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRybW43MzEgcmVtYWluZGVybmVhciAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRybW43MzIgcmVtYWluZGVybmVhciAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRybW43MzMgcmVtYWluZGVybmVhciAtMCAgIC1OYU4gICAgLT4gLU5hTgorZGRybW43MzQgcmVtYWluZGVybmVhciAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRybW43MzUgcmVtYWluZGVybmVhciAgMSAgIC1OYU4gICAgLT4gLU5hTgorZGRybW43MzYgcmVtYWluZGVybmVhciAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRybW43MzcgcmVtYWluZGVybmVhciAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZHJtbjc0MSByZW1haW5kZXJuZWFyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NDIgcmVtYWluZGVybmVhciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzQzIHJlbWFpbmRlcm5lYXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc0NCByZW1haW5kZXJuZWFyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NDUgcmVtYWluZGVybmVhciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzQ2IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc0NyByZW1haW5kZXJuZWFyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NDkgcmVtYWluZGVybmVhciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzUwIHJlbWFpbmRlcm5lYXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1MSByZW1haW5kZXJuZWFyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTIgcmVtYWluZGVybmVhciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzUzIHJlbWFpbmRlcm5lYXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1NCByZW1haW5kZXJuZWFyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTUgcmVtYWluZGVybmVhciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzU2IHJlbWFpbmRlcm5lYXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1NyByZW1haW5kZXJuZWFyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTggcmVtYWluZGVybmVhciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzU5IHJlbWFpbmRlcm5lYXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2luZyBOYU5zCitkZHJtbjc2MCByZW1haW5kZXJuZWFyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xCitkZHJtbjc2MSByZW1haW5kZXJuZWFyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc2MiByZW1haW5kZXJuZWFyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc2MyByZW1haW5kZXJuZWFyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc2NCByZW1haW5kZXJuZWFyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQorZGRybW43NjUgcmVtYWluZGVybmVhciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgorZGRybW43NjYgcmVtYWluZGVybmVhciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMKK2Rkcm1uNzY3IHJlbWFpbmRlcm5lYXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0CitkZHJtbjc2OCByZW1haW5kZXJuZWFyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQorZGRybW43NjkgcmVtYWluZGVybmVhciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYKKworLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCitkZHJtbjc3MCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gLTQKK2Rkcm1uNzcxICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAorZGRybW43NzIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRybW43NzMgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCitkZHJtbjgwMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkZHJtbjgwMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkZHJtbjgwMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkZHJtbjgwNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkZHJtbjgwNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkZHJtbjgwNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkZHJtbjgwNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkZHJtbjgwOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkZHJtbjgwOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkZHJtbjgxMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkZHJtbjgxMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAorZGRybW44MTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitkZHJtbjgyMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkZHJtbjgyMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkZHJtbjgyMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkZHJtbjgyNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkZHJtbjgyNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkZHJtbjgyNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkZHJtbjgyNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkZHJtbjgyOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkZHJtbjgyOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkZHJtbjgzMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkZHJtbjgzMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAorZGRybW44MzIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGRpdmlkZWludAorZGRybW44NDAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wCitkZHJtbjg0MSByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKK2Rkcm1uODQyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQorZGRybW44NDMgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjkgICAxICAtPiAtMC4xCitkZHJtbjg0NCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuOTk5IDEgIC0+IC0wLjAwMQorZGRybW44NTAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAzICAgICA1ICAtPiAtMgorZGRybW44NTEgcmVtYWluZGVybmVhciAgMTAwMDAwMDMgICAgICA1ICAtPiAtMgorZGRybW44NTIgcmVtYWluZGVybmVhciAgMTAwMDAwMyAgICAgICA1ICAtPiAtMgorZGRybW44NTMgcmVtYWluZGVybmVhciAgMTAwMDAzICAgICAgICA1ICAtPiAtMgorZGRybW44NTQgcmVtYWluZGVybmVhciAgMTAwMDMgICAgICAgICA1ICAtPiAtMgorZGRybW44NTUgcmVtYWluZGVybmVhciAgMTAwMyAgICAgICAgICA1ICAtPiAtMgorZGRybW44NTYgcmVtYWluZGVybmVhciAgMTAzICAgICAgICAgICA1ICAtPiAtMgorZGRybW44NTcgcmVtYWluZGVybmVhciAgMTMgICAgICAgICAgICA1ICAtPiAtMgorZGRybW44NTggcmVtYWluZGVybmVhciAgMSAgICAgICAgICAgICA1ICAtPiAgMQorCistLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRybW44NjAgcmVtYWluZGVybmVhciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rkcm1uODYxIHJlbWFpbmRlcm5lYXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJtbjg2MiByZW1haW5kZXJuZWFyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRybW44NjMgcmVtYWluZGVybmVhciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rkcm1uODY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJtbjg3MCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODcyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODc1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODc4IHJlbWFpbmRlcm5lYXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAorZGRybW44ODAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODgxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwCitkZHJtbjg4MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAorZGRybW44ODMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzAKK2Rkcm1uODg0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwCitkZHJtbjg4NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAorZGRybW44ODYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDAKKworZGRybW44OTAgcmVtYWluZGVybmVhciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODkxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44OTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODk0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44OTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODk3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMAorZGRybW45MDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTAxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCitkZHJtbjkwMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMAorZGRybW45MDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IC03NzAKK2Rkcm1uOTA0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCitkZHJtbjkwNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gIC0xMAorZGRybW45MDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDAKKworZGRybW45MTAgcmVtYWluZGVybmVhciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTExIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTE0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTE3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMAorZGRybW45MjAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTIxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwCitkZHJtbjkyMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMAorZGRybW45MjMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKK2Rkcm1uOTI0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwCitkZHJtbjkyNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gIC0yMAorZGRybW45MjYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKKworZGRybW45MzAgcmVtYWluZGVybmVhciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTMxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTM0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTM3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAorZGRybW45NDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTQxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwCitkZHJtbjk0MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAorZGRybW45NDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzAKK2Rkcm1uOTQ0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwCitkZHJtbjk0NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gIC0zMAorZGRybW45NDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgLTMKKworZGRybW45NTAgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45NjEgcmVtYWluZGVybmVhciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjIgcmVtYWluZGVybmVhciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjMgcmVtYWluZGVybmVhciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjQgcmVtYWluZGVybmVhciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjUgcmVtYWluZGVybmVhciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjYgcmVtYWluZGVybmVhciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjcgcmVtYWluZGVybmVhciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjggcmVtYWluZGVybmVhciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjkgcmVtYWluZGVybmVhciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMAorCitkZHJtbjk4MCByZW1haW5kZXJuZWFyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5CisKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCitkZHJtbjEwNTEgcmVtYWluZGVybmVhciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJtbjEwNTIgcmVtYWluZGVybmVhciAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJtbjEwNTMgcmVtYWluZGVybmVhciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJtbjEwNTQgcmVtYWluZGVybmVhciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJtbjEwNTUgcmVtYWluZGVybmVhciAgMWUtMjc3ICAxZSszMTEgLT4gIDFFLTI3NworZGRybW4xMDU2IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcKK2Rkcm1uMTA1NyByZW1haW5kZXJuZWFyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3CitkZHJtbjEwNTggcmVtYWluZGVybmVhciAtMWUtMjc3IC0xZSszMTEgLT4gLTFFLTI3NworCistLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdAorZGRybW4xMTAwIHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTAuMjM0NTY3ODkwMTIzNDU1CitkZHJtbjExMDEgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEuMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTAuMzQ1Njc4OTAxMjM0NDQKK2Rkcm1uMTEwMiByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDEuMDAwMDAwMDAwMDAwMSAgLT4gICAgLTAuNDU2Nzg5MDEyMzMzMworZGRybW4xMTAzIHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTUgIDQuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMzA4NjQxOTcyNTMwODY0CitkZHJtbjExMDQgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4zMDg2NDE5NzI1MzA4NjQKK2Rkcm1uMTExNSByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDQuOTk5OTk5OTk5OTk5OSAgLT4gICAgIDAuNjkxMzU3ODAyNDY5NgorZGRybW4xMTE2IHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICA0Ljk5OTk5OTk5OTk5OTk5ICAtPiAgIC0xLjUzMDg2NDIxOTc1MzA4CitkZHJtbjExMTcgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC45OTk5OTk5OTk5OTk5OTkgIC0+ICAgMS4yNDY5MTM1NzgwMjQ2OTEKK2Rkcm1uMTExOCByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICA1LjAwMDAwMDAwMDAwMDAwMSAgLT4gICAwLjc1MzA4NjQyMTk3NTMwOQorZGRybW4xMTE5IHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICA1LjAwMDAwMDAwMDAwMDAxICAtPiAgIC0xLjQ2OTEzNTc4MDI0NjkxCitkZHJtbjExMTAgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA1LjAwMDAwMDAwMDAwMDEgIC0+ICAgICAxLjMwODY0MjE5NzUzMTQKKworLS0gTnVsbCB0ZXN0cworZGRybW4xMDAwIHJlbWFpbmRlcm5lYXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjEwMDEgcmVtYWluZGVybmVhciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUm90YXRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSb3RhdGUuZGVjVGVzdAppbmRleCA4N2VlYjFjLi44YjBmZTI2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSb3RhdGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSb3RhdGUuZGVjVGVzdApAQCAtMSwyNjIgKzEsMjYyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFJvdGF0ZS5kZWNUZXN0IC0tIHJvdGF0ZSBhIGRlY0RvdWJsZSBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1kZHJvdDAwMSByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDANCi1kZHJvdDAwMiByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAgMiAgLT4gIDANCi1kZHJvdDAwMyByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMA0KLWRkcm90MDA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIDE1ICAtPiAgMTAwMDAwMDAwMDAwMDAwMA0KLWRkcm90MDA1IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIDE2ICAtPiAgMQ0KLWRkcm90MDA2IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMTAwMDAwMDAwMDAwMDAwMA0KLWRkcm90MDA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMA0KLWRkcm90MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xICAtPiAgNjEyMzQ1Njc4OTAxMjM0NQ0KLWRkcm90MDA5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgMjM0NTY3ODkwMTIzNDU2MQ0KLWRkcm90MDEwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkcm90MDExIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgOTM0NTY3ODkwMTIzNDU2OQ0KLWRkcm90MDEyIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgOTkzNDU2Nzg5MDEyMzQ1Ng0KLQ0KLS0tIHJocyBtdXN0IGJlIGFuIGludGVnZXINCi1kZHJvdDAxNSByb3RhdGUgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3QwMTcgcm90YXRlICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDAxOCByb3RhdGUgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90MDE5IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3QwMjAgcm90YXRlICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDAyMSByb3RhdGUgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90MDIyIHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbg0KLWRkcm90MDI1IHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3QwMjYgcm90YXRlICAgICAgICAxICAgIC0xNyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDAyNyByb3RhdGUgICAgICAgIDEgICAgIDE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90MDI4IHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZnVsbCBwYXR0ZXJuDQotZGRyb3QwMzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZGRyb3QwMzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE1ICAtPiAyMzQ1Njc4OTAxMjM0NTYxDQotZGRyb3QwMzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE0ICAtPiAzNDU2Nzg5MDEyMzQ1NjEyDQotZGRyb3QwMzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEzICAtPiA0NTY3ODkwMTIzNDU2MTIzDQotZGRyb3QwMzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEyICAtPiA1Njc4OTAxMjM0NTYxMjM0DQotZGRyb3QwMzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTExICAtPiA2Nzg5MDEyMzQ1NjEyMzQ1DQotZGRyb3QwMzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEwICAtPiA3ODkwMTIzNDU2MTIzNDU2DQotZGRyb3QwMzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTkgICAtPiA4OTAxMjM0NTYxMjM0NTY3DQotZGRyb3QwMzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTggICAtPiA5MDEyMzQ1NjEyMzQ1Njc4DQotZGRyb3QwMzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTcgICAtPiAgMTIzNDU2MTIzNDU2Nzg5DQotZGRyb3QwNDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTYgICAtPiAxMjM0NTYxMjM0NTY3ODkwDQotZGRyb3QwNDEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTUgICAtPiAyMzQ1NjEyMzQ1Njc4OTAxDQotZGRyb3QwNDIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTQgICAtPiAzNDU2MTIzNDU2Nzg5MDEyDQotZGRyb3QwNDMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTMgICAtPiA0NTYxMjM0NTY3ODkwMTIzDQotZGRyb3QwNDQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTIgICAtPiA1NjEyMzQ1Njc4OTAxMjM0DQotZGRyb3QwNDUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEgICAtPiA2MTIzNDU2Nzg5MDEyMzQ1DQotZGRyb3QwNDYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2DQotDQotZGRyb3QwNDcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZGRyb3QwNDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTYxDQotZGRyb3QwNDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1NjEyDQotZGRyb3QwNTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2MTIzDQotZGRyb3QwNTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTYxMjM0DQotZGRyb3QwNTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1NjEyMzQ1DQotZGRyb3QwNTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2MTIzNDU2DQotZGRyb3QwNTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTYxMjM0NTY3DQotZGRyb3QwNTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzggICAtPiA5MDEyMzQ1NjEyMzQ1Njc4DQotZGRyb3QwNTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzkgICAtPiAgMTIzNDU2MTIzNDU2Nzg5DQotZGRyb3QwNTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEwICAtPiAxMjM0NTYxMjM0NTY3ODkwDQotZGRyb3QwNTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzExICAtPiAyMzQ1NjEyMzQ1Njc4OTAxDQotZGRyb3QwNTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEyICAtPiAzNDU2MTIzNDU2Nzg5MDEyDQotZGRyb3QwNjAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEzICAtPiA0NTYxMjM0NTY3ODkwMTIzDQotZGRyb3QwNjEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE0ICAtPiA1NjEyMzQ1Njc4OTAxMjM0DQotZGRyb3QwNjIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE1ICAtPiA2MTIzNDU2Nzg5MDEyMzQ1DQotZGRyb3QwNjMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2DQotDQotLS0gemVyb3MNCi1kZHJvdDA3MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTANCi1kZHJvdDA3MSByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUtMTANCi1kZHJvdDA3MiByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDANCi1kZHJvdDA3MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDANCi1kZHJvdDA3NCByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUrMTANCi1kZHJvdDA3NSByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTANCi1kZHJvdDA3NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTANCi1kZHJvdDA3NyByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUtMTANCi1kZHJvdDA3OCByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDANCi1kZHJvdDA3OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDANCi1kZHJvdDA4MCByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUrMTANCi1kZHJvdDA4MSByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTANCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRkcm90MTQxIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZHJvdDE0MiByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRyb3QxNDMgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkcm90MTQ0IHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZHJvdDE0NSByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4DQotZGRyb3QxNDYgcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMTUgLT4gMS4wRS0zODINCi1kZHJvdDE0NyByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM4Mg0KLWRkcm90MTQ4IHJvdGF0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zNjgNCi1kZHJvdDE1MSByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHJvdDE1MiByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAxRS0zOTgNCi1kZHJvdDE1MyByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAxRS0zOTgNCi1kZHJvdDE1NCByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHJvdDE1NSByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHJvdDE1NiByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiA5RS0zOTgNCi1kZHJvdDE1NyByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiA5RS0zOTgNCi1kZHJvdDE1OCByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHJvdDE2MCByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRyb3QxNjEgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMTUgLT4gMS4wRS0zOTcNCi1kZHJvdDE2MiByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM5Nw0KLWRkcm90MTYzIHJvdGF0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi0tLSAgbmVnYXRpdmVzDQotZGRyb3QxNzEgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZHJvdDE3MiByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkcm90MTczIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRyb3QxNzQgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTUgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZHJvdDE3NSByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM2OA0KLWRkcm90MTc2IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0xLjBFLTM4Mg0KLWRkcm90MTc3IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTM4Mg0KLWRkcm90MTc4IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzY4DQotZGRyb3QxODEgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NA0KLWRkcm90MTgyIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IC0xRS0zOTgNCi1kZHJvdDE4MyByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMUUtMzk4DQotZGRyb3QxODQgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NA0KLWRkcm90MTg1IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC05LjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHJvdDE4NiByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtOUUtMzk4DQotZGRyb3QxODcgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gLTlFLTM5OA0KLWRkcm90MTg4IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC05LjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHJvdDE5MCByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkcm90MTkxIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0xLjBFLTM5Nw0KLWRkcm90MTkyIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTM5Nw0KLWRkcm90MTkzIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotDQotLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQ0KLWRkcm90MjAxIHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgICAwICAtPiAtMA0KLWRkcm90MjAyIHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMA0KLWRkcm90MjAzIHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwDQotZGRyb3QyMDQgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgMTUgIC0+IC0xMDAwMDAwMDAwMDAwMDAwDQotZGRyb3QyMDUgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgMTYgIC0+IC0xDQotZGRyb3QyMDYgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0xMDAwMDAwMDAwMDAwMDAwDQotZGRyb3QyMDcgcm90YXRlICAgICAgICAgICAgICAgIC0wICAgLTIgIC0+IC0wDQotZGRyb3QyMDggcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+IC02MTIzNDU2Nzg5MDEyMzQ1DQotZGRyb3QyMDkgcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC0yMzQ1Njc4OTAxMjM0NTYxDQotZGRyb3QyMTAgcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC0xMjM0NTY3ODkwMTIzNDU2DQotZGRyb3QyMTEgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC05MzQ1Njc4OTAxMjM0NTY5DQotZGRyb3QyMTIgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC05OTM0NTY3ODkwMTIzNDU2DQotDQotDQotLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwNCi1kZHJvdDc4MSByb3RhdGUgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQ0KLWRkcm90NzgyIHJvdGF0ZSAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZGRyb3Q3ODMgcm90YXRlIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kZHJvdDc4NCByb3RhdGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLWRkcm90Nzg1IHJvdGF0ZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZGRyb3Q3ODYgcm90YXRlIC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkNCi1kZHJvdDc4NyByb3RhdGUgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90Nzg4IHJvdGF0ZSAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q3ODkgcm90YXRlIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDc5MCByb3RhdGUgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90NzkxIHJvdGF0ZSAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q3OTIgcm90YXRlICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDc5MyByb3RhdGUgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90Nzk0IHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRyb3Q4MDAgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDgwMSByb3RhdGUgIEluZiAgLTggICAgIC0+IEluZmluaXR5DQotZGRyb3Q4MDIgcm90YXRlICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQ0KLWRkcm90ODAzIHJvdGF0ZSAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkNCi1kZHJvdDgwNCByb3RhdGUgIEluZiAgIDAgICAgIC0+IEluZmluaXR5DQotZGRyb3Q4MDUgcm90YXRlICBJbmYgICAxICAgICAtPiBJbmZpbml0eQ0KLWRkcm90ODA2IHJvdGF0ZSAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkNCi1kZHJvdDgwNyByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODA4IHJvdGF0ZSAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4MDkgcm90YXRlIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDgxMCByb3RhdGUgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODExIHJvdGF0ZSAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4MTIgcm90YXRlICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDgxMyByb3RhdGUgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODE0IHJvdGF0ZSAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4MTUgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZHJvdDgyMSByb3RhdGUgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kZHJvdDgyMiByb3RhdGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kZHJvdDgyMyByb3RhdGUgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kZHJvdDgyNCByb3RhdGUgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kZHJvdDgyNSByb3RhdGUgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kZHJvdDgyNiByb3RhdGUgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kZHJvdDgyNyByb3RhdGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kZHJvdDgyOCByb3RhdGUgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kZHJvdDgyOSByb3RhdGUgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kZHJvdDgzMCByb3RhdGUgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kZHJvdDgzMSByb3RhdGUgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZHJvdDgzMiByb3RhdGUgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kZHJvdDgzMyByb3RhdGUgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kZHJvdDgzNCByb3RhdGUgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kZHJvdDgzNSByb3RhdGUgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kZHJvdDgzNiByb3RhdGUgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZHJvdDgzNyByb3RhdGUgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kZHJvdDg0MSByb3RhdGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NDIgcm90YXRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODQzIHJvdGF0ZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg0NCByb3RhdGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NDUgcm90YXRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODQ2IHJvdGF0ZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg0NyByb3RhdGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NDggcm90YXRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODQ5IHJvdGF0ZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg1MCByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NTEgcm90YXRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODUyIHJvdGF0ZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg1MyByb3RhdGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NTQgcm90YXRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODU1IHJvdGF0ZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg1NiByb3RhdGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NTcgcm90YXRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODU4IHJvdGF0ZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg1OSByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkcm90ODYxIHJvdGF0ZSAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCi1kZHJvdDg2MiByb3RhdGUgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotZGRyb3Q4NjMgcm90YXRlICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLWRkcm90ODY0IHJvdGF0ZSAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCi1kZHJvdDg2NSByb3RhdGUgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotZGRyb3Q4NjYgcm90YXRlIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLWRkcm90ODY3IHJvdGF0ZSAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCi1kZHJvdDg2OCByb3RhdGUgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotZGRyb3Q4Njkgcm90YXRlICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1kZHJvdDg3MSByb3RhdGUgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg3MiByb3RhdGUgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg3MyByb3RhdGUgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg3NCByb3RhdGUgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg3NSByb3RhdGUgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg3NiByb3RhdGUgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg3NyByb3RhdGUgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg3OCByb3RhdGUgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg3OSByb3RhdGUgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg4MCByb3RhdGUgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg4MSByb3RhdGUgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg4MiByb3RhdGUgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLWRkcm90ODgzIHJvdGF0ZSAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODg0IHJvdGF0ZSAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotZGRyb3Q4ODUgcm90YXRlICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFJvdGF0ZS5kZWNUZXN0IC0tIHJvdGF0ZSBhIGRlY0RvdWJsZSBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2Rkcm90MDAxIHJvdGF0ZSAgICAgICAgICAgICAgICAgMCAgICAwICAtPiAgMAorZGRyb3QwMDIgcm90YXRlICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwCitkZHJvdDAwMyByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMAorZGRyb3QwMDQgcm90YXRlICAgICAgICAgICAgICAgICAxICAgMTUgIC0+ICAxMDAwMDAwMDAwMDAwMDAwCitkZHJvdDAwNSByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAxNiAgLT4gIDEKK2Rkcm90MDA2IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMTAwMDAwMDAwMDAwMDAwMAorZGRyb3QwMDcgcm90YXRlICAgICAgICAgICAgICAgICAwICAgLTIgIC0+ICAwCitkZHJvdDAwOCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMSAgLT4gIDYxMjM0NTY3ODkwMTIzNDUKK2Rkcm90MDA5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgMjM0NTY3ODkwMTIzNDU2MQorZGRyb3QwMTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+ICAxMjM0NTY3ODkwMTIzNDU2CitkZHJvdDAxMSByb3RhdGUgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDkzNDU2Nzg5MDEyMzQ1NjkKK2Rkcm90MDEyIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgOTkzNDU2Nzg5MDEyMzQ1NgorCistLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyCitkZHJvdDAxNSByb3RhdGUgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMTYgcm90YXRlICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDE3IHJvdGF0ZSAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAxOCByb3RhdGUgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMTkgcm90YXRlICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDIwIHJvdGF0ZSAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAyMSByb3RhdGUgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMjIgcm90YXRlICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24KK2Rkcm90MDI1IHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAyNiByb3RhdGUgICAgICAgIDEgICAgLTE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMjcgcm90YXRlICAgICAgICAxICAgICAxNyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDI4IHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZ1bGwgcGF0dGVybgorZGRyb3QwMzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZHJvdDAzMSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTUgIC0+IDIzNDU2Nzg5MDEyMzQ1NjEKK2Rkcm90MDMyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNCAgLT4gMzQ1Njc4OTAxMjM0NTYxMgorZGRyb3QwMzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEzICAtPiA0NTY3ODkwMTIzNDU2MTIzCitkZHJvdDAzNCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTIgIC0+IDU2Nzg5MDEyMzQ1NjEyMzQKK2Rkcm90MDM1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMSAgLT4gNjc4OTAxMjM0NTYxMjM0NQorZGRyb3QwMzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEwICAtPiA3ODkwMTIzNDU2MTIzNDU2CitkZHJvdDAzNyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtOSAgIC0+IDg5MDEyMzQ1NjEyMzQ1NjcKK2Rkcm90MDM4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC04ICAgLT4gOTAxMjM0NTYxMjM0NTY3OAorZGRyb3QwMzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTcgICAtPiAgMTIzNDU2MTIzNDU2Nzg5CitkZHJvdDA0MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNiAgIC0+IDEyMzQ1NjEyMzQ1Njc4OTAKK2Rkcm90MDQxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC01ICAgLT4gMjM0NTYxMjM0NTY3ODkwMQorZGRyb3QwNDIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTQgICAtPiAzNDU2MTIzNDU2Nzg5MDEyCitkZHJvdDA0MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMyAgIC0+IDQ1NjEyMzQ1Njc4OTAxMjMKK2Rkcm90MDQ0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0yICAgLT4gNTYxMjM0NTY3ODkwMTIzNAorZGRyb3QwNDUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEgICAtPiA2MTIzNDU2Nzg5MDEyMzQ1CitkZHJvdDA0NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKKworZGRyb3QwNDcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZHJvdDA0OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1NjEKK2Rkcm90MDQ5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAxMjM0NTYxMgorZGRyb3QwNTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2MTIzCitkZHJvdDA1MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1NjEyMzQKK2Rkcm90MDUyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs1ICAgLT4gNjc4OTAxMjM0NTYxMjM0NQorZGRyb3QwNTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2MTIzNDU2CitkZHJvdDA1NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1NjEyMzQ1NjcKK2Rkcm90MDU1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs4ICAgLT4gOTAxMjM0NTYxMjM0NTY3OAorZGRyb3QwNTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzkgICAtPiAgMTIzNDU2MTIzNDU2Nzg5CitkZHJvdDA1NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTAgIC0+IDEyMzQ1NjEyMzQ1Njc4OTAKK2Rkcm90MDU4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMSAgLT4gMjM0NTYxMjM0NTY3ODkwMQorZGRyb3QwNTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEyICAtPiAzNDU2MTIzNDU2Nzg5MDEyCitkZHJvdDA2MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTMgIC0+IDQ1NjEyMzQ1Njc4OTAxMjMKK2Rkcm90MDYxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNCAgLT4gNTYxMjM0NTY3ODkwMTIzNAorZGRyb3QwNjIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE1ICAtPiA2MTIzNDU2Nzg5MDEyMzQ1CitkZHJvdDA2MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKKworLS0gemVyb3MKK2Rkcm90MDcwIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRS0xMAorZGRyb3QwNzEgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFLTEwCitkZHJvdDA3MiByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDAKK2Rkcm90MDczIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gICAwLjAwMAorZGRyb3QwNzQgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFKzEwCitkZHJvdDA3NSByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTAKK2Rkcm90MDc2IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRS0xMAorZGRyb3QwNzcgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFLTEwCitkZHJvdDA3OCByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDAKK2Rkcm90MDc5IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gIC0wLjAwMAorZGRyb3QwODAgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFKzEwCitkZHJvdDA4MSByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rkcm90MTQxIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkcm90MTQyIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTE1IC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkcm90MTQzIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkcm90MTQ0IHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkcm90MTQ1IHJvdGF0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zNjgKK2Rkcm90MTQ2IHJvdGF0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDEuMEUtMzgyCitkZHJvdDE0NyByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM4MgorZGRyb3QxNDggcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAgMTUgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM2OAorZGRyb3QxNTEgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE1MiByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAxRS0zOTgKK2Rkcm90MTUzIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IDFFLTM5OAorZGRyb3QxNTQgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE1NSByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkcm90MTU2IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IDlFLTM5OAorZGRyb3QxNTcgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gOUUtMzk4CitkZHJvdDE1OCByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkcm90MTYwIHJvdGF0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2Rkcm90MTYxIHJvdGF0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDEuMEUtMzk3CitkZHJvdDE2MiByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM5NworZGRyb3QxNjMgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMTUgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworLS0gIG5lZ2F0aXZlcworZGRyb3QxNzEgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkcm90MTcyIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTE1IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE3MyByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyb3QxNzQgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTUgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkcm90MTc1IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzY4CitkZHJvdDE3NiByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAtMS4wRS0zODIKK2Rkcm90MTc3IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTM4MgorZGRyb3QxNzggcm90YXRlIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAgMTUgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zNjgKK2Rkcm90MTgxIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkcm90MTgyIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IC0xRS0zOTgKK2Rkcm90MTgzIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IC0xRS0zOTgKK2Rkcm90MTg0IHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkcm90MTg1IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC05LjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkcm90MTg2IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IC05RS0zOTgKK2Rkcm90MTg3IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IC05RS0zOTgKK2Rkcm90MTg4IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC05LjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkcm90MTkwIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHJvdDE5MSByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAtMS4wRS0zOTcKK2Rkcm90MTkyIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTM5NworZGRyb3QxOTMgcm90YXRlIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAgMTUgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKKworLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQorZGRyb3QyMDEgcm90YXRlICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wCitkZHJvdDIwMiByb3RhdGUgICAgICAgICAgICAgICAgLTAgICAgMiAgLT4gLTAKK2Rkcm90MjAzIHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwCitkZHJvdDIwNCByb3RhdGUgICAgICAgICAgICAgICAgLTEgICAxNSAgLT4gLTEwMDAwMDAwMDAwMDAwMDAKK2Rkcm90MjA1IHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgIDE2ICAtPiAtMQorZGRyb3QyMDYgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0xMDAwMDAwMDAwMDAwMDAwCitkZHJvdDIwNyByb3RhdGUgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTAKK2Rkcm90MjA4IHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xICAtPiAtNjEyMzQ1Njc4OTAxMjM0NQorZGRyb3QyMDkgcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC0yMzQ1Njc4OTAxMjM0NTYxCitkZHJvdDIxMCByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gLTEyMzQ1Njc4OTAxMjM0NTYKK2Rkcm90MjExIHJvdGF0ZSAtOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAtOTM0NTY3ODkwMTIzNDU2OQorZGRyb3QyMTIgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC05OTM0NTY3ODkwMTIzNDU2CisKKworLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKK2Rkcm90NzgxIHJvdGF0ZSAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5CitkZHJvdDc4MiByb3RhdGUgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRyb3Q3ODMgcm90YXRlIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2Rkcm90Nzg0IHJvdGF0ZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZHJvdDc4NSByb3RhdGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRyb3Q3ODYgcm90YXRlIC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKK2Rkcm90Nzg3IHJvdGF0ZSAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDc4OCByb3RhdGUgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q3ODkgcm90YXRlIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90NzkwIHJvdGF0ZSAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDc5MSByb3RhdGUgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q3OTIgcm90YXRlICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90NzkzIHJvdGF0ZSAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDc5NCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHJvdDgwMCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MDEgcm90YXRlICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQorZGRyb3Q4MDIgcm90YXRlICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQorZGRyb3Q4MDMgcm90YXRlICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQorZGRyb3Q4MDQgcm90YXRlICBJbmYgICAwICAgICAtPiBJbmZpbml0eQorZGRyb3Q4MDUgcm90YXRlICBJbmYgICAxICAgICAtPiBJbmZpbml0eQorZGRyb3Q4MDYgcm90YXRlICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQorZGRyb3Q4MDcgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODA4IHJvdGF0ZSAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgwOSByb3RhdGUgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MTAgcm90YXRlIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODExIHJvdGF0ZSAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgxMiByb3RhdGUgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MTMgcm90YXRlICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODE0IHJvdGF0ZSAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgxNSByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHJvdDgyMSByb3RhdGUgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2Rkcm90ODIyIHJvdGF0ZSAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRyb3Q4MjMgcm90YXRlICBOYU4gLTEgICAgICAtPiAgTmFOCitkZHJvdDgyNCByb3RhdGUgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2Rkcm90ODI1IHJvdGF0ZSAgTmFOICAwICAgICAgLT4gIE5hTgorZGRyb3Q4MjYgcm90YXRlICBOYU4gIDEgICAgICAtPiAgTmFOCitkZHJvdDgyNyByb3RhdGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2Rkcm90ODI4IHJvdGF0ZSAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRyb3Q4Mjkgcm90YXRlICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzMCByb3RhdGUgLUluZiAgTmFOICAgIC0+ICBOYU4KK2Rkcm90ODMxIHJvdGF0ZSAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRyb3Q4MzIgcm90YXRlIC0xICAgIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzMyByb3RhdGUgLTAgICAgTmFOICAgIC0+ICBOYU4KK2Rkcm90ODM0IHJvdGF0ZSAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRyb3Q4MzUgcm90YXRlICAxICAgIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzNiByb3RhdGUgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2Rkcm90ODM3IHJvdGF0ZSAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZHJvdDg0MSByb3RhdGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg0MiByb3RhdGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg0MyByb3RhdGUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg0NCByb3RhdGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg0NSByb3RhdGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg0NiByb3RhdGUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg0NyByb3RhdGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg0OCByb3RhdGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg0OSByb3RhdGUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg1MCByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg1MSByb3RhdGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg1MiByb3RhdGUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg1MyByb3RhdGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg1NCByb3RhdGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg1NSByb3RhdGUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg1NiByb3RhdGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg1NyByb3RhdGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg1OCByb3RhdGUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg1OSByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rkcm90ODYxIHJvdGF0ZSAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2Rkcm90ODYyIHJvdGF0ZSArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2Rkcm90ODYzIHJvdGF0ZSAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2Rkcm90ODY0IHJvdGF0ZSAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2Rkcm90ODY1IHJvdGF0ZSAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2Rkcm90ODY2IHJvdGF0ZSAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2Rkcm90ODY3IHJvdGF0ZSAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2Rkcm90ODY4IHJvdGF0ZSAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2Rkcm90ODY5IHJvdGF0ZSAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkZHJvdDg3MSByb3RhdGUgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODcyIHJvdGF0ZSAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NzMgcm90YXRlICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3NCByb3RhdGUgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODc1IHJvdGF0ZSAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NzYgcm90YXRlICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3NyByb3RhdGUgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODc4IHJvdGF0ZSAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4Nzkgcm90YXRlICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg4MCByb3RhdGUgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODgxIHJvdGF0ZSArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4ODIgcm90YXRlIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2Rkcm90ODgzIHJvdGF0ZSAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4ODQgcm90YXRlICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2Rkcm90ODg1IHJvdGF0ZSAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2FtZVF1YW50dW0uZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNhbWVRdWFudHVtLmRlY1Rlc3QKaW5kZXggNTRhNzYzYy4uNDY1YjM2YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2FtZVF1YW50dW0uZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTYW1lUXVhbnR1bS5kZWNUZXN0CkBAIC0xLDM4OSArMSwzODkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkU2FtZVF1YW50dW0uZGVjVGVzdCAtLSBjaGVjayBkZWNEb3VibGUgcXVhbnR1bXMgbWF0Y2ggICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kZHNhbXEwMDEgc2FtZXF1YW50dW0gIDAgICAgICAwICAgICAgLT4gIDENCi1kZHNhbXEwMDIgc2FtZXF1YW50dW0gIDAgICAgICAxICAgICAgLT4gIDENCi1kZHNhbXEwMDMgc2FtZXF1YW50dW0gIDEgICAgICAwICAgICAgLT4gIDENCi1kZHNhbXEwMDQgc2FtZXF1YW50dW0gIDEgICAgICAxICAgICAgLT4gIDENCi0NCi1kZHNhbXEwMTEgc2FtZXF1YW50dW0gIDEwICAgICAxRSsxICAgLT4gMA0KLWRkc2FtcTAxMiBzYW1lcXVhbnR1bSAgMTBFKzEgIDEwRSsxICAtPiAxDQotZGRzYW1xMDEzIHNhbWVxdWFudHVtICAxMDAgICAgMTBFKzEgIC0+IDANCi1kZHNhbXEwMTQgc2FtZXF1YW50dW0gIDEwMCAgICAxRSsyICAgLT4gMA0KLWRkc2FtcTAxNSBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTIgICAtPiAwDQotZGRzYW1xMDE2IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMSAgIC0+IDENCi1kZHNhbXEwMTcgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0wICAgLT4gMA0KLWRkc2FtcTAxOCBzYW1lcXVhbnR1bSAgOTk5ICAgIDk5OSAgICAtPiAxDQotZGRzYW1xMDE5IHNhbWVxdWFudHVtICA5OTlFLTEgOTkuOSAgIC0+IDENCi1kZHNhbXEwMjAgc2FtZXF1YW50dW0gIDExMUUtMSAyMi4yICAgLT4gMQ0KLWRkc2FtcTAyMSBzYW1lcXVhbnR1bSAgMTExRS0xIDEyMzQuMiAtPiAxDQotDQotLS0gemVyb3MNCi1kZHNhbXEwMzAgc2FtZXF1YW50dW0gIDAuMCAgICAxLjEgICAgLT4gMQ0KLWRkc2FtcTAzMSBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMTEgICAtPiAwDQotZGRzYW1xMDMyIHNhbWVxdWFudHVtICAwLjAgICAgMCAgICAgIC0+IDANCi1kZHNhbXEwMzMgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAgICAgLT4gMQ0KLWRkc2FtcTAzNCBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMDAgICAtPiAwDQotZGRzYW1xMDM1IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMCAgIC0+IDANCi1kZHNhbXEwMzYgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsxICAgLT4gMQ0KLWRkc2FtcTAzNyBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzIgICAtPiAwDQotZGRzYW1xMDM4IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTYgIC0+IDANCi1kZHNhbXEwMzkgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNyAgLT4gMQ0KLWRkc2FtcTA0MCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE4ICAtPiAwDQotZGRzYW1xMDQxIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNSAtPiAwDQotZGRzYW1xMDQyIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNiAtPiAxDQotZGRzYW1xMDQzIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNyAtPiAwDQotZGRzYW1xMDQ0IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNiAtPiAxDQotZGRzYW1xMDQ1IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNyAtPiAwDQotZGRzYW1xMDQ2IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNiAtPiAxDQotZGRzYW1xMDQ3IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNyAtPiAwDQotZGRzYW1xMDQ4IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNiAtPiAxDQotZGRzYW1xMDQ5IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNyAtPiAwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kZHNhbXEwNTEgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMQ0KLWRkc2FtcTA1MiBzYW1lcXVhbnR1bSAgMUUtMzgzICAgICAgICAgICAgIDFFLTM4MyAgICAgICAgICAgLT4gMQ0KLWRkc2FtcTA1MyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxDQotZGRzYW1xMDU0IHNhbWVxdWFudHVtICAxRS0zOTggICAgICAgICAgICAgMUUtMzk4ICAgICAgICAgICAtPiAxDQotZGRzYW1xMDU1IHNhbWVxdWFudHVtICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDENCi1kZHNhbXEwNTYgc2FtZXF1YW50dW0gIDFFLTM4MyAgICAgICAgICAgICAxRS0zODMgICAgICAgICAgIC0+IDENCi1kZHNhbXEwNTcgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMQ0KLWRkc2FtcTA1OCBzYW1lcXVhbnR1bSAgMUUtMzk4ICAgICAgICAgICAgIDFFLTM5OCAgICAgICAgICAgLT4gMQ0KLQ0KLWRkc2FtcTA2MSBzYW1lcXVhbnR1bSAgLTFFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQ0KLWRkc2FtcTA2MiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtPiAxDQotZGRzYW1xMDYzIHNhbWVxdWFudHVtICAtMUUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxDQotZGRzYW1xMDY0IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDENCi1kZHNhbXEwNjUgc2FtZXF1YW50dW0gIC0xRS0zOTggICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDENCi1kZHNhbXEwNjYgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gMQ0KLWRkc2FtcTA2NyBzYW1lcXVhbnR1bSAgLTFFLTM4MyAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMQ0KLWRkc2FtcTA2OCBzYW1lcXVhbnR1bSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAxDQotDQotZGRzYW1xMDcxIHNhbWVxdWFudHVtICAtNEUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxDQotZGRzYW1xMDcyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDA0MDAwMDAwMDAwMEUtMzgzIC0+IDENCi1kZHNhbXEwNzMgc2FtZXF1YW50dW0gIC00RS0zODMgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDENCi1kZHNhbXEwNzQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5OTk5OTk5OTQ5OTk5RSszODQgLT4gMQ0KLWRkc2FtcTA3NSBzYW1lcXVhbnR1bSAgLTRFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQ0KLWRkc2FtcTA3NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDQwMDAwMDAwMDAwMDBFLTM4MyAtPiAxDQotZGRzYW1xMDc3IHNhbWVxdWFudHVtICAtNEUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxDQotZGRzYW1xMDc4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk0OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDENCi0NCi1kZHNhbXEwODEgc2FtZXF1YW50dW0gIC00RS0zOTcgICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDANCi1kZHNhbXEwODIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDQwMDAwMDAwMDAwRS0zMzYgLT4gMA0KLWRkc2FtcTA4MyBzYW1lcXVhbnR1bSAgLTRFLTM0NiAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMA0KLWRkc2FtcTA4NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk0OTk5OTk5OTk5OTlFKzMzNiAtPiAwDQotZGRzYW1xMDg1IHNhbWVxdWFudHVtICAtNEUtMzk3ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAwDQotZGRzYW1xMDg2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwNDAwMDAwMDAwMDAwMEUtMzM2IC0+IDANCi1kZHNhbXEwODcgc2FtZXF1YW50dW0gIC00RS0zNDYgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDANCi1kZHNhbXEwODggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTQ5OTk5OTk5OTk5OTk5RSszMzYgLT4gMA0KLQ0KLS0tIHNwZWNpYWxzICYgY29tYmluYXRpb25zDQotZGRzYW1xMDExMCBzYW1lcXVhbnR1bSAgLUluZiAgICAtSW5mICAgLT4gMQ0KLWRkc2FtcTAxMTEgc2FtZXF1YW50dW0gIC1JbmYgICAgIEluZiAgIC0+IDENCi1kZHNhbXEwMTEyIHNhbWVxdWFudHVtICAtSW5mICAgICBOYU4gICAtPiAwDQotZGRzYW1xMDExMyBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UrMyAgLT4gMA0KLWRkc2FtcTAxMTQgc2FtZXF1YW50dW0gIC1JbmYgICAgLTcgICAgIC0+IDANCi1kZHNhbXEwMTE1IHNhbWVxdWFudHVtICAtSW5mICAgIC03RS0zICAtPiAwDQotZGRzYW1xMDExNiBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUtMyAgLT4gMA0KLWRkc2FtcTAxMTcgc2FtZXF1YW50dW0gIC1JbmYgICAgLTAgICAgIC0+IDANCi1kZHNhbXEwMTE4IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRSszICAtPiAwDQotZGRzYW1xMDExOSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUtMyAgLT4gMA0KLWRkc2FtcTAxMjAgc2FtZXF1YW50dW0gIC1JbmYgICAgIDAgICAgIC0+IDANCi1kZHNhbXEwMTIxIHNhbWVxdWFudHVtICAtSW5mICAgICAwRSszICAtPiAwDQotZGRzYW1xMDEyMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UtMyAgLT4gMA0KLWRkc2FtcTAxMjMgc2FtZXF1YW50dW0gIC1JbmYgICAgIDcgICAgIC0+IDANCi1kZHNhbXEwMTI0IHNhbWVxdWFudHVtICAtSW5mICAgICA3RSszICAtPiAwDQotZGRzYW1xMDEyNSBzYW1lcXVhbnR1bSAgLUluZiAgICAgc05hTiAgLT4gMA0KLQ0KLWRkc2FtcTAyMTAgc2FtZXF1YW50dW0gICBJbmYgICAgLUluZiAgIC0+IDENCi1kZHNhbXEwMjExIHNhbWVxdWFudHVtICAgSW5mICAgICBJbmYgICAtPiAxDQotZGRzYW1xMDIxMiBzYW1lcXVhbnR1bSAgIEluZiAgICAgTmFOICAgLT4gMA0KLWRkc2FtcTAyMTMgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFKzMgIC0+IDANCi1kZHNhbXEwMjE0IHNhbWVxdWFudHVtICAgSW5mICAgIC03ICAgICAtPiAwDQotZGRzYW1xMDIxNSBzYW1lcXVhbnR1bSAgIEluZiAgICAtN0UtMyAgLT4gMA0KLWRkc2FtcTAyMTYgc2FtZXF1YW50dW0gICBJbmYgICAgLTBFLTMgIC0+IDANCi1kZHNhbXEwMjE3IHNhbWVxdWFudHVtICAgSW5mICAgIC0wICAgICAtPiAwDQotZGRzYW1xMDIxOCBzYW1lcXVhbnR1bSAgIEluZiAgICAtMEUrMyAgLT4gMA0KLWRkc2FtcTAyMTkgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFLTMgIC0+IDANCi1kZHNhbXEwMjIwIHNhbWVxdWFudHVtICAgSW5mICAgICAwICAgICAtPiAwDQotZGRzYW1xMDIyMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgMEUrMyAgLT4gMA0KLWRkc2FtcTAyMjIgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFLTMgIC0+IDANCi1kZHNhbXEwMjIzIHNhbWVxdWFudHVtICAgSW5mICAgICA3ICAgICAtPiAwDQotZGRzYW1xMDIyNCBzYW1lcXVhbnR1bSAgIEluZiAgICAgN0UrMyAgLT4gMA0KLWRkc2FtcTAyMjUgc2FtZXF1YW50dW0gICBJbmYgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXEwMzEwIHNhbWVxdWFudHVtICAgTmFOICAgIC1JbmYgICAtPiAwDQotZGRzYW1xMDMxMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTAzMTIgc2FtZXF1YW50dW0gICBOYU4gICAgIE5hTiAgIC0+IDENCi1kZHNhbXEwMzEzIHNhbWVxdWFudHVtICAgTmFOICAgIC03RSszICAtPiAwDQotZGRzYW1xMDMxNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtNyAgICAgLT4gMA0KLWRkc2FtcTAzMTUgc2FtZXF1YW50dW0gICBOYU4gICAgLTdFLTMgIC0+IDANCi1kZHNhbXEwMzE2IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRS0zICAtPiAwDQotZGRzYW1xMDMxNyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMCAgICAgLT4gMA0KLWRkc2FtcTAzMTggc2FtZXF1YW50dW0gICBOYU4gICAgLTBFKzMgIC0+IDANCi1kZHNhbXEwMzE5IHNhbWVxdWFudHVtICAgTmFOICAgICAwRS0zICAtPiAwDQotZGRzYW1xMDMyMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMCAgICAgLT4gMA0KLWRkc2FtcTAzMjEgc2FtZXF1YW50dW0gICBOYU4gICAgIDBFKzMgIC0+IDANCi1kZHNhbXEwMzIyIHNhbWVxdWFudHVtICAgTmFOICAgICA3RS0zICAtPiAwDQotZGRzYW1xMDMyMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAgNyAgICAgLT4gMA0KLWRkc2FtcTAzMjQgc2FtZXF1YW50dW0gICBOYU4gICAgIDdFKzMgIC0+IDANCi1kZHNhbXEwMzI1IHNhbWVxdWFudHVtICAgTmFOICAgICBzTmFOICAtPiAxDQotDQotZGRzYW1xMDQxMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLUluZiAgIC0+IDANCi1kZHNhbXEwNDExIHNhbWVxdWFudHVtICAtN0UrMyAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTA0MTIgc2FtZXF1YW50dW0gIC03RSszICAgICBOYU4gICAtPiAwDQotZGRzYW1xMDQxMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTdFKzMgIC0+IDENCi1kZHNhbXEwNDE0IHNhbWVxdWFudHVtICAtN0UrMyAgICAtNyAgICAgLT4gMA0KLWRkc2FtcTA0MTUgc2FtZXF1YW50dW0gIC03RSszICAgIC03RS0zICAtPiAwDQotZGRzYW1xMDQxNiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTBFLTMgIC0+IDANCi1kZHNhbXEwNDE3IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMCAgICAgLT4gMA0KLWRkc2FtcTA0MTggc2FtZXF1YW50dW0gIC03RSszICAgIC0wRSszICAtPiAxDQotZGRzYW1xMDQxOSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDBFLTMgIC0+IDANCi1kZHNhbXEwNDIwIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMCAgICAgLT4gMA0KLWRkc2FtcTA0MjEgc2FtZXF1YW50dW0gIC03RSszICAgICAwRSszICAtPiAxDQotZGRzYW1xMDQyMiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDdFLTMgIC0+IDANCi1kZHNhbXEwNDIzIHNhbWVxdWFudHVtICAtN0UrMyAgICAgNyAgICAgLT4gMA0KLWRkc2FtcTA0MjQgc2FtZXF1YW50dW0gIC03RSszICAgICA3RSszICAtPiAxDQotZGRzYW1xMDQyNSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXEwNTEwIHNhbWVxdWFudHVtICAtNyAgICAgIC1JbmYgICAtPiAwDQotZGRzYW1xMDUxMSBzYW1lcXVhbnR1bSAgLTcgICAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTA1MTIgc2FtZXF1YW50dW0gIC03ICAgICAgIE5hTiAgIC0+IDANCi1kZHNhbXEwNTEzIHNhbWVxdWFudHVtICAtNyAgICAgIC03RSszICAtPiAwDQotZGRzYW1xMDUxNCBzYW1lcXVhbnR1bSAgLTcgICAgICAtNyAgICAgLT4gMQ0KLWRkc2FtcTA1MTUgc2FtZXF1YW50dW0gIC03ICAgICAgLTdFLTMgIC0+IDANCi1kZHNhbXEwNTE2IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRS0zICAtPiAwDQotZGRzYW1xMDUxNyBzYW1lcXVhbnR1bSAgLTcgICAgICAtMCAgICAgLT4gMQ0KLWRkc2FtcTA1MTggc2FtZXF1YW50dW0gIC03ICAgICAgLTBFKzMgIC0+IDANCi1kZHNhbXEwNTE5IHNhbWVxdWFudHVtICAtNyAgICAgICAwRS0zICAtPiAwDQotZGRzYW1xMDUyMCBzYW1lcXVhbnR1bSAgLTcgICAgICAgMCAgICAgLT4gMQ0KLWRkc2FtcTA1MjEgc2FtZXF1YW50dW0gIC03ICAgICAgIDBFKzMgIC0+IDANCi1kZHNhbXEwNTIyIHNhbWVxdWFudHVtICAtNyAgICAgICA3RS0zICAtPiAwDQotZGRzYW1xMDUyMyBzYW1lcXVhbnR1bSAgLTcgICAgICAgNyAgICAgLT4gMQ0KLWRkc2FtcTA1MjQgc2FtZXF1YW50dW0gIC03ICAgICAgIDdFKzMgIC0+IDANCi1kZHNhbXEwNTI1IHNhbWVxdWFudHVtICAtNyAgICAgICBzTmFOICAtPiAwDQotDQotZGRzYW1xMDYxMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLUluZiAgIC0+IDANCi1kZHNhbXEwNjExIHNhbWVxdWFudHVtICAtN0UtMyAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTA2MTIgc2FtZXF1YW50dW0gIC03RS0zICAgICBOYU4gICAtPiAwDQotZGRzYW1xMDYxMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFKzMgIC0+IDANCi1kZHNhbXEwNjE0IHNhbWVxdWFudHVtICAtN0UtMyAgICAtNyAgICAgLT4gMA0KLWRkc2FtcTA2MTUgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RS0zICAtPiAxDQotZGRzYW1xMDYxNiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFLTMgIC0+IDENCi1kZHNhbXEwNjE3IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMCAgICAgLT4gMA0KLWRkc2FtcTA2MTggc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRSszICAtPiAwDQotZGRzYW1xMDYxOSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFLTMgIC0+IDENCi1kZHNhbXEwNjIwIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMCAgICAgLT4gMA0KLWRkc2FtcTA2MjEgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRSszICAtPiAwDQotZGRzYW1xMDYyMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFLTMgIC0+IDENCi1kZHNhbXEwNjIzIHNhbWVxdWFudHVtICAtN0UtMyAgICAgNyAgICAgLT4gMA0KLWRkc2FtcTA2MjQgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RSszICAtPiAwDQotZGRzYW1xMDYyNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXEwNzEwIHNhbWVxdWFudHVtICAtMEUtMyAgICAtSW5mICAgLT4gMA0KLWRkc2FtcTA3MTEgc2FtZXF1YW50dW0gIC0wRS0zICAgICBJbmYgICAtPiAwDQotZGRzYW1xMDcxMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIE5hTiAgIC0+IDANCi1kZHNhbXEwNzEzIHNhbWVxdWFudHVtICAtMEUtMyAgICAtN0UrMyAgLT4gMA0KLWRkc2FtcTA3MTQgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03ICAgICAtPiAwDQotZGRzYW1xMDcxNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFLTMgIC0+IDENCi1kZHNhbXEwNzE2IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMEUtMyAgLT4gMQ0KLWRkc2FtcTA3MTcgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wICAgICAtPiAwDQotZGRzYW1xMDcxOCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFKzMgIC0+IDANCi1kZHNhbXEwNzE5IHNhbWVxdWFudHVtICAtMEUtMyAgICAgMEUtMyAgLT4gMQ0KLWRkc2FtcTA3MjAgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwICAgICAtPiAwDQotZGRzYW1xMDcyMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFKzMgIC0+IDANCi1kZHNhbXEwNzIyIHNhbWVxdWFudHVtICAtMEUtMyAgICAgN0UtMyAgLT4gMQ0KLWRkc2FtcTA3MjMgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3ICAgICAtPiAwDQotZGRzYW1xMDcyNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFKzMgIC0+IDANCi1kZHNhbXEwNzI1IHNhbWVxdWFudHVtICAtMEUtMyAgICAgc05hTiAgLT4gMA0KLQ0KLWRkc2FtcTA4MTAgc2FtZXF1YW50dW0gIC0wICAgICAgLUluZiAgIC0+IDANCi1kZHNhbXEwODExIHNhbWVxdWFudHVtICAtMCAgICAgICBJbmYgICAtPiAwDQotZGRzYW1xMDgxMiBzYW1lcXVhbnR1bSAgLTAgICAgICAgTmFOICAgLT4gMA0KLWRkc2FtcTA4MTMgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFKzMgIC0+IDANCi1kZHNhbXEwODE0IHNhbWVxdWFudHVtICAtMCAgICAgIC03ICAgICAtPiAxDQotZGRzYW1xMDgxNSBzYW1lcXVhbnR1bSAgLTAgICAgICAtN0UtMyAgLT4gMA0KLWRkc2FtcTA4MTYgc2FtZXF1YW50dW0gIC0wICAgICAgLTBFLTMgIC0+IDANCi1kZHNhbXEwODE3IHNhbWVxdWFudHVtICAtMCAgICAgIC0wICAgICAtPiAxDQotZGRzYW1xMDgxOCBzYW1lcXVhbnR1bSAgLTAgICAgICAtMEUrMyAgLT4gMA0KLWRkc2FtcTA4MTkgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFLTMgIC0+IDANCi1kZHNhbXEwODIwIHNhbWVxdWFudHVtICAtMCAgICAgICAwICAgICAtPiAxDQotZGRzYW1xMDgyMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgMEUrMyAgLT4gMA0KLWRkc2FtcTA4MjIgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFLTMgIC0+IDANCi1kZHNhbXEwODIzIHNhbWVxdWFudHVtICAtMCAgICAgICA3ICAgICAtPiAxDQotZGRzYW1xMDgyNCBzYW1lcXVhbnR1bSAgLTAgICAgICAgN0UrMyAgLT4gMA0KLWRkc2FtcTA4MjUgc2FtZXF1YW50dW0gIC0wICAgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXEwOTEwIHNhbWVxdWFudHVtICAtMEUrMyAgICAtSW5mICAgLT4gMA0KLWRkc2FtcTA5MTEgc2FtZXF1YW50dW0gIC0wRSszICAgICBJbmYgICAtPiAwDQotZGRzYW1xMDkxMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIE5hTiAgIC0+IDANCi1kZHNhbXEwOTEzIHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UrMyAgLT4gMQ0KLWRkc2FtcTA5MTQgc2FtZXF1YW50dW0gIC0wRSszICAgIC03ICAgICAtPiAwDQotZGRzYW1xMDkxNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFLTMgIC0+IDANCi1kZHNhbXEwOTE2IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUtMyAgLT4gMA0KLWRkc2FtcTA5MTcgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wICAgICAtPiAwDQotZGRzYW1xMDkxOCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFKzMgIC0+IDENCi1kZHNhbXEwOTE5IHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUtMyAgLT4gMA0KLWRkc2FtcTA5MjAgc2FtZXF1YW50dW0gIC0wRSszICAgICAwICAgICAtPiAwDQotZGRzYW1xMDkyMSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFKzMgIC0+IDENCi1kZHNhbXEwOTIyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UtMyAgLT4gMA0KLWRkc2FtcTA5MjMgc2FtZXF1YW50dW0gIC0wRSszICAgICA3ICAgICAtPiAwDQotZGRzYW1xMDkyNCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFKzMgIC0+IDENCi1kZHNhbXEwOTI1IHNhbWVxdWFudHVtICAtMEUrMyAgICAgc05hTiAgLT4gMA0KLQ0KLWRkc2FtcTExMTAgc2FtZXF1YW50dW0gIDBFLTMgICAgLUluZiAgIC0+IDANCi1kZHNhbXExMTExIHNhbWVxdWFudHVtICAwRS0zICAgICBJbmYgICAtPiAwDQotZGRzYW1xMTExMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgTmFOICAgLT4gMA0KLWRkc2FtcTExMTMgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFKzMgIC0+IDANCi1kZHNhbXExMTE0IHNhbWVxdWFudHVtICAwRS0zICAgIC03ICAgICAtPiAwDQotZGRzYW1xMTExNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UtMyAgLT4gMQ0KLWRkc2FtcTExMTYgc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFLTMgIC0+IDENCi1kZHNhbXExMTE3IHNhbWVxdWFudHVtICAwRS0zICAgIC0wICAgICAtPiAwDQotZGRzYW1xMTExOCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUrMyAgLT4gMA0KLWRkc2FtcTExMTkgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFLTMgIC0+IDENCi1kZHNhbXExMTIwIHNhbWVxdWFudHVtICAwRS0zICAgICAwICAgICAtPiAwDQotZGRzYW1xMTEyMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUrMyAgLT4gMA0KLWRkc2FtcTExMjIgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFLTMgIC0+IDENCi1kZHNhbXExMTIzIHNhbWVxdWFudHVtICAwRS0zICAgICA3ICAgICAtPiAwDQotZGRzYW1xMTEyNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UrMyAgLT4gMA0KLWRkc2FtcTExMjUgc2FtZXF1YW50dW0gIDBFLTMgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXExMjEwIHNhbWVxdWFudHVtICAwICAgICAgIC1JbmYgICAtPiAwDQotZGRzYW1xMTIxMSBzYW1lcXVhbnR1bSAgMCAgICAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTEyMTIgc2FtZXF1YW50dW0gIDAgICAgICAgIE5hTiAgIC0+IDANCi1kZHNhbXExMjEzIHNhbWVxdWFudHVtICAwICAgICAgIC03RSszICAtPiAwDQotZGRzYW1xMTIxNCBzYW1lcXVhbnR1bSAgMCAgICAgICAtNyAgICAgLT4gMQ0KLWRkc2FtcTEyMTUgc2FtZXF1YW50dW0gIDAgICAgICAgLTdFLTMgIC0+IDANCi1kZHNhbXExMjE2IHNhbWVxdWFudHVtICAwICAgICAgIC0wRS0zICAtPiAwDQotZGRzYW1xMTIxNyBzYW1lcXVhbnR1bSAgMCAgICAgICAtMCAgICAgLT4gMQ0KLWRkc2FtcTEyMTggc2FtZXF1YW50dW0gIDAgICAgICAgLTBFKzMgIC0+IDANCi1kZHNhbXExMjE5IHNhbWVxdWFudHVtICAwICAgICAgICAwRS0zICAtPiAwDQotZGRzYW1xMTIyMCBzYW1lcXVhbnR1bSAgMCAgICAgICAgMCAgICAgLT4gMQ0KLWRkc2FtcTEyMjEgc2FtZXF1YW50dW0gIDAgICAgICAgIDBFKzMgIC0+IDANCi1kZHNhbXExMjIyIHNhbWVxdWFudHVtICAwICAgICAgICA3RS0zICAtPiAwDQotZGRzYW1xMTIyMyBzYW1lcXVhbnR1bSAgMCAgICAgICAgNyAgICAgLT4gMQ0KLWRkc2FtcTEyMjQgc2FtZXF1YW50dW0gIDAgICAgICAgIDdFKzMgIC0+IDANCi1kZHNhbXExMjI1IHNhbWVxdWFudHVtICAwICAgICAgICBzTmFOICAtPiAwDQotDQotZGRzYW1xMTMxMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtSW5mICAgLT4gMA0KLWRkc2FtcTEzMTEgc2FtZXF1YW50dW0gIDBFKzMgICAgIEluZiAgIC0+IDANCi1kZHNhbXExMzEyIHNhbWVxdWFudHVtICAwRSszICAgICBOYU4gICAtPiAwDQotZGRzYW1xMTMxMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UrMyAgLT4gMQ0KLWRkc2FtcTEzMTQgc2FtZXF1YW50dW0gIDBFKzMgICAgLTcgICAgIC0+IDANCi1kZHNhbXExMzE1IHNhbWVxdWFudHVtICAwRSszICAgIC03RS0zICAtPiAwDQotZGRzYW1xMTMxNiBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUtMyAgLT4gMA0KLWRkc2FtcTEzMTcgc2FtZXF1YW50dW0gIDBFKzMgICAgLTAgICAgIC0+IDANCi1kZHNhbXExMzE4IHNhbWVxdWFudHVtICAwRSszICAgIC0wRSszICAtPiAxDQotZGRzYW1xMTMxOSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUtMyAgLT4gMA0KLWRkc2FtcTEzMjAgc2FtZXF1YW50dW0gIDBFKzMgICAgIDAgICAgIC0+IDANCi1kZHNhbXExMzIxIHNhbWVxdWFudHVtICAwRSszICAgICAwRSszICAtPiAxDQotZGRzYW1xMTMyMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UtMyAgLT4gMA0KLWRkc2FtcTEzMjMgc2FtZXF1YW50dW0gIDBFKzMgICAgIDcgICAgIC0+IDANCi1kZHNhbXExMzI0IHNhbWVxdWFudHVtICAwRSszICAgICA3RSszICAtPiAxDQotZGRzYW1xMTMyNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgc05hTiAgLT4gMA0KLQ0KLWRkc2FtcTE0MTAgc2FtZXF1YW50dW0gIDdFLTMgICAgLUluZiAgIC0+IDANCi1kZHNhbXExNDExIHNhbWVxdWFudHVtICA3RS0zICAgICBJbmYgICAtPiAwDQotZGRzYW1xMTQxMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgTmFOICAgLT4gMA0KLWRkc2FtcTE0MTMgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFKzMgIC0+IDANCi1kZHNhbXExNDE0IHNhbWVxdWFudHVtICA3RS0zICAgIC03ICAgICAtPiAwDQotZGRzYW1xMTQxNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UtMyAgLT4gMQ0KLWRkc2FtcTE0MTYgc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFLTMgIC0+IDENCi1kZHNhbXExNDE3IHNhbWVxdWFudHVtICA3RS0zICAgIC0wICAgICAtPiAwDQotZGRzYW1xMTQxOCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUrMyAgLT4gMA0KLWRkc2FtcTE0MTkgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFLTMgIC0+IDENCi1kZHNhbXExNDIwIHNhbWVxdWFudHVtICA3RS0zICAgICAwICAgICAtPiAwDQotZGRzYW1xMTQyMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUrMyAgLT4gMA0KLWRkc2FtcTE0MjIgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFLTMgIC0+IDENCi1kZHNhbXExNDIzIHNhbWVxdWFudHVtICA3RS0zICAgICA3ICAgICAtPiAwDQotZGRzYW1xMTQyNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UrMyAgLT4gMA0KLWRkc2FtcTE0MjUgc2FtZXF1YW50dW0gIDdFLTMgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXExNTEwIHNhbWVxdWFudHVtICA3ICAgICAgLUluZiAgIC0+IDANCi1kZHNhbXExNTExIHNhbWVxdWFudHVtICA3ICAgICAgIEluZiAgIC0+IDANCi1kZHNhbXExNTEyIHNhbWVxdWFudHVtICA3ICAgICAgIE5hTiAgIC0+IDANCi1kZHNhbXExNTEzIHNhbWVxdWFudHVtICA3ICAgICAgLTdFKzMgIC0+IDANCi1kZHNhbXExNTE0IHNhbWVxdWFudHVtICA3ICAgICAgLTcgICAgIC0+IDENCi1kZHNhbXExNTE1IHNhbWVxdWFudHVtICA3ICAgICAgLTdFLTMgIC0+IDANCi1kZHNhbXExNTE2IHNhbWVxdWFudHVtICA3ICAgICAgLTBFLTMgIC0+IDANCi1kZHNhbXExNTE3IHNhbWVxdWFudHVtICA3ICAgICAgLTAgICAgIC0+IDENCi1kZHNhbXExNTE4IHNhbWVxdWFudHVtICA3ICAgICAgLTBFKzMgIC0+IDANCi1kZHNhbXExNTE5IHNhbWVxdWFudHVtICA3ICAgICAgIDBFLTMgIC0+IDANCi1kZHNhbXExNTIwIHNhbWVxdWFudHVtICA3ICAgICAgIDAgICAgIC0+IDENCi1kZHNhbXExNTIxIHNhbWVxdWFudHVtICA3ICAgICAgIDBFKzMgIC0+IDANCi1kZHNhbXExNTIyIHNhbWVxdWFudHVtICA3ICAgICAgIDdFLTMgIC0+IDANCi1kZHNhbXExNTIzIHNhbWVxdWFudHVtICA3ICAgICAgIDcgICAgIC0+IDENCi1kZHNhbXExNTI0IHNhbWVxdWFudHVtICA3ICAgICAgIDdFKzMgIC0+IDANCi1kZHNhbXExNTI1IHNhbWVxdWFudHVtICA3ICAgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXExNjEwIHNhbWVxdWFudHVtICA3RSszICAgIC1JbmYgICAtPiAwDQotZGRzYW1xMTYxMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTE2MTIgc2FtZXF1YW50dW0gIDdFKzMgICAgIE5hTiAgIC0+IDANCi1kZHNhbXExNjEzIHNhbWVxdWFudHVtICA3RSszICAgIC03RSszICAtPiAxDQotZGRzYW1xMTYxNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtNyAgICAgLT4gMA0KLWRkc2FtcTE2MTUgc2FtZXF1YW50dW0gIDdFKzMgICAgLTdFLTMgIC0+IDANCi1kZHNhbXExNjE2IHNhbWVxdWFudHVtICA3RSszICAgIC0wRS0zICAtPiAwDQotZGRzYW1xMTYxNyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMCAgICAgLT4gMA0KLWRkc2FtcTE2MTggc2FtZXF1YW50dW0gIDdFKzMgICAgLTBFKzMgIC0+IDENCi1kZHNhbXExNjE5IHNhbWVxdWFudHVtICA3RSszICAgICAwRS0zICAtPiAwDQotZGRzYW1xMTYyMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMCAgICAgLT4gMA0KLWRkc2FtcTE2MjEgc2FtZXF1YW50dW0gIDdFKzMgICAgIDBFKzMgIC0+IDENCi1kZHNhbXExNjIyIHNhbWVxdWFudHVtICA3RSszICAgICA3RS0zICAtPiAwDQotZGRzYW1xMTYyMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAgNyAgICAgLT4gMA0KLWRkc2FtcTE2MjQgc2FtZXF1YW50dW0gIDdFKzMgICAgIDdFKzMgIC0+IDENCi1kZHNhbXExNjI1IHNhbWVxdWFudHVtICA3RSszICAgICBzTmFOICAtPiAwDQotDQotZGRzYW1xMTcxMCBzYW1lcXVhbnR1bSAgc05hTiAgICAtSW5mICAgLT4gMA0KLWRkc2FtcTE3MTEgc2FtZXF1YW50dW0gIHNOYU4gICAgIEluZiAgIC0+IDANCi1kZHNhbXExNzEyIHNhbWVxdWFudHVtICBzTmFOICAgICBOYU4gICAtPiAxDQotZGRzYW1xMTcxMyBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UrMyAgLT4gMA0KLWRkc2FtcTE3MTQgc2FtZXF1YW50dW0gIHNOYU4gICAgLTcgICAgIC0+IDANCi1kZHNhbXExNzE1IHNhbWVxdWFudHVtICBzTmFOICAgIC03RS0zICAtPiAwDQotZGRzYW1xMTcxNiBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUtMyAgLT4gMA0KLWRkc2FtcTE3MTcgc2FtZXF1YW50dW0gIHNOYU4gICAgLTAgICAgIC0+IDANCi1kZHNhbXExNzE4IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRSszICAtPiAwDQotZGRzYW1xMTcxOSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUtMyAgLT4gMA0KLWRkc2FtcTE3MjAgc2FtZXF1YW50dW0gIHNOYU4gICAgIDAgICAgIC0+IDANCi1kZHNhbXExNzIxIHNhbWVxdWFudHVtICBzTmFOICAgICAwRSszICAtPiAwDQotZGRzYW1xMTcyMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UtMyAgLT4gMA0KLWRkc2FtcTE3MjMgc2FtZXF1YW50dW0gIHNOYU4gICAgIDcgICAgIC0+IDANCi1kZHNhbXExNzI0IHNhbWVxdWFudHVtICBzTmFOICAgICA3RSszICAtPiAwDQotZGRzYW1xMTcyNSBzYW1lcXVhbnR1bSAgc05hTiAgICAgc05hTiAgLT4gMQ0KLS0tIG5vaXN5IE5hTnMNCi1kZHNhbXExNzMwIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFOMyAtPiAxDQotZGRzYW1xMTczMSBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjQgLT4gMQ0KLWRkc2FtcTE3MzIgc2FtZXF1YW50dW0gICBOYU4zICAgICBOYU4zIC0+IDENCi1kZHNhbXExNzMzIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFONCAtPiAxDQotZGRzYW1xMTczNCBzYW1lcXVhbnR1bSAgc05hTjMgICAgIDMgICAgLT4gMA0KLWRkc2FtcTE3MzUgc2FtZXF1YW50dW0gICBOYU4zICAgICAzICAgIC0+IDANCi1kZHNhbXExNzM2IHNhbWVxdWFudHVtICAgICAgNCAgICBzTmFONCAtPiAwDQotZGRzYW1xMTczNyBzYW1lcXVhbnR1bSAgICAgIDMgICAgIE5hTjMgLT4gMA0KLWRkc2FtcTE3Mzggc2FtZXF1YW50dW0gICAgSW5mICAgIHNOYU40IC0+IDANCi1kZHNhbXExNzM5IHNhbWVxdWFudHVtICAgLUluZiAgICAgTmFOMyAtPiAwDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFNhbWVRdWFudHVtLmRlY1Rlc3QgLS0gY2hlY2sgZGVjRG91YmxlIHF1YW50dW1zIG1hdGNoICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZHNhbXEwMDEgc2FtZXF1YW50dW0gIDAgICAgICAwICAgICAgLT4gIDEKK2Rkc2FtcTAwMiBzYW1lcXVhbnR1bSAgMCAgICAgIDEgICAgICAtPiAgMQorZGRzYW1xMDAzIHNhbWVxdWFudHVtICAxICAgICAgMCAgICAgIC0+ICAxCitkZHNhbXEwMDQgc2FtZXF1YW50dW0gIDEgICAgICAxICAgICAgLT4gIDEKKworZGRzYW1xMDExIHNhbWVxdWFudHVtICAxMCAgICAgMUUrMSAgIC0+IDAKK2Rkc2FtcTAxMiBzYW1lcXVhbnR1bSAgMTBFKzEgIDEwRSsxICAtPiAxCitkZHNhbXEwMTMgc2FtZXF1YW50dW0gIDEwMCAgICAxMEUrMSAgLT4gMAorZGRzYW1xMDE0IHNhbWVxdWFudHVtICAxMDAgICAgMUUrMiAgIC0+IDAKK2Rkc2FtcTAxNSBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTIgICAtPiAwCitkZHNhbXEwMTYgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0xICAgLT4gMQorZGRzYW1xMDE3IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMCAgIC0+IDAKK2Rkc2FtcTAxOCBzYW1lcXVhbnR1bSAgOTk5ICAgIDk5OSAgICAtPiAxCitkZHNhbXEwMTkgc2FtZXF1YW50dW0gIDk5OUUtMSA5OS45ICAgLT4gMQorZGRzYW1xMDIwIHNhbWVxdWFudHVtICAxMTFFLTEgMjIuMiAgIC0+IDEKK2Rkc2FtcTAyMSBzYW1lcXVhbnR1bSAgMTExRS0xIDEyMzQuMiAtPiAxCisKKy0tIHplcm9zCitkZHNhbXEwMzAgc2FtZXF1YW50dW0gIDAuMCAgICAxLjEgICAgLT4gMQorZGRzYW1xMDMxIHNhbWVxdWFudHVtICAwLjAgICAgMS4xMSAgIC0+IDAKK2Rkc2FtcTAzMiBzYW1lcXVhbnR1bSAgMC4wICAgIDAgICAgICAtPiAwCitkZHNhbXEwMzMgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAgICAgLT4gMQorZGRzYW1xMDM0IHNhbWVxdWFudHVtICAwLjAgICAgMC4wMCAgIC0+IDAKK2Rkc2FtcTAzNSBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzAgICAtPiAwCitkZHNhbXEwMzYgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsxICAgLT4gMQorZGRzYW1xMDM3IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMiAgIC0+IDAKK2Rkc2FtcTAzOCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE2ICAtPiAwCitkZHNhbXEwMzkgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNyAgLT4gMQorZGRzYW1xMDQwIHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTggIC0+IDAKK2Rkc2FtcTA0MSBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTUgLT4gMAorZGRzYW1xMDQyIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNiAtPiAxCitkZHNhbXEwNDMgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE3IC0+IDAKK2Rkc2FtcTA0NCBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTYgLT4gMQorZGRzYW1xMDQ1IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNyAtPiAwCitkZHNhbXEwNDYgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE2IC0+IDEKK2Rkc2FtcTA0NyBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTcgLT4gMAorZGRzYW1xMDQ4IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNiAtPiAxCitkZHNhbXEwNDkgc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE3IC0+IDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rkc2FtcTA1MSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAxCitkZHNhbXEwNTIgc2FtZXF1YW50dW0gIDFFLTM4MyAgICAgICAgICAgICAxRS0zODMgICAgICAgICAgIC0+IDEKK2Rkc2FtcTA1MyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxCitkZHNhbXEwNTQgc2FtZXF1YW50dW0gIDFFLTM5OCAgICAgICAgICAgICAxRS0zOTggICAgICAgICAgIC0+IDEKK2Rkc2FtcTA1NSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAxCitkZHNhbXEwNTYgc2FtZXF1YW50dW0gIDFFLTM4MyAgICAgICAgICAgICAxRS0zODMgICAgICAgICAgIC0+IDEKK2Rkc2FtcTA1NyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxCitkZHNhbXEwNTggc2FtZXF1YW50dW0gIDFFLTM5OCAgICAgICAgICAgICAxRS0zOTggICAgICAgICAgIC0+IDEKKworZGRzYW1xMDYxIHNhbWVxdWFudHVtICAtMUUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxCitkZHNhbXEwNjIgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gMQorZGRzYW1xMDYzIHNhbWVxdWFudHVtICAtMUUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxCitkZHNhbXEwNjQgc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQorZGRzYW1xMDY1IHNhbWVxdWFudHVtICAtMUUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxCitkZHNhbXEwNjYgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gMQorZGRzYW1xMDY3IHNhbWVxdWFudHVtICAtMUUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxCitkZHNhbXEwNjggc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQorCitkZHNhbXEwNzEgc2FtZXF1YW50dW0gIC00RS0zOTggICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDEKK2Rkc2FtcTA3MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDAwNDAwMDAwMDAwMDBFLTM4MyAtPiAxCitkZHNhbXEwNzMgc2FtZXF1YW50dW0gIC00RS0zODMgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDEKK2Rkc2FtcTA3NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk5OTk5OTk5NDk5OTlFKzM4NCAtPiAxCitkZHNhbXEwNzUgc2FtZXF1YW50dW0gIC00RS0zOTggICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDEKK2Rkc2FtcTA3NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDQwMDAwMDAwMDAwMDBFLTM4MyAtPiAxCitkZHNhbXEwNzcgc2FtZXF1YW50dW0gIC00RS0zODMgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDEKK2Rkc2FtcTA3OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45NDk5OTk5OTk5OTk5OTlFKzM4NCAtPiAxCisKK2Rkc2FtcTA4MSBzYW1lcXVhbnR1bSAgLTRFLTM5NyAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMAorZGRzYW1xMDgyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDA0MDAwMDAwMDAwMEUtMzM2IC0+IDAKK2Rkc2FtcTA4MyBzYW1lcXVhbnR1bSAgLTRFLTM0NiAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMAorZGRzYW1xMDg0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk5OTQ5OTk5OTk5OTk5OUUrMzM2IC0+IDAKK2Rkc2FtcTA4NSBzYW1lcXVhbnR1bSAgLTRFLTM5NyAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMAorZGRzYW1xMDg2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwNDAwMDAwMDAwMDAwMEUtMzM2IC0+IDAKK2Rkc2FtcTA4NyBzYW1lcXVhbnR1bSAgLTRFLTM0NiAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMAorZGRzYW1xMDg4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk0OTk5OTk5OTk5OTk5OUUrMzM2IC0+IDAKKworLS0gc3BlY2lhbHMgJiBjb21iaW5hdGlvbnMKK2Rkc2FtcTAxMTAgc2FtZXF1YW50dW0gIC1JbmYgICAgLUluZiAgIC0+IDEKK2Rkc2FtcTAxMTEgc2FtZXF1YW50dW0gIC1JbmYgICAgIEluZiAgIC0+IDEKK2Rkc2FtcTAxMTIgc2FtZXF1YW50dW0gIC1JbmYgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTAxMTMgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTAxMTQgc2FtZXF1YW50dW0gIC1JbmYgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTAxMTUgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTAxMTYgc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTAxMTcgc2FtZXF1YW50dW0gIC1JbmYgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTAxMTggc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTAxMTkgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTAxMjAgc2FtZXF1YW50dW0gIC1JbmYgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTAxMjEgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTAxMjIgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTAxMjMgc2FtZXF1YW50dW0gIC1JbmYgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTAxMjQgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTAxMjUgc2FtZXF1YW50dW0gIC1JbmYgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDIxMCBzYW1lcXVhbnR1bSAgIEluZiAgICAtSW5mICAgLT4gMQorZGRzYW1xMDIxMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgSW5mICAgLT4gMQorZGRzYW1xMDIxMiBzYW1lcXVhbnR1bSAgIEluZiAgICAgTmFOICAgLT4gMAorZGRzYW1xMDIxMyBzYW1lcXVhbnR1bSAgIEluZiAgICAtN0UrMyAgLT4gMAorZGRzYW1xMDIxNCBzYW1lcXVhbnR1bSAgIEluZiAgICAtNyAgICAgLT4gMAorZGRzYW1xMDIxNSBzYW1lcXVhbnR1bSAgIEluZiAgICAtN0UtMyAgLT4gMAorZGRzYW1xMDIxNiBzYW1lcXVhbnR1bSAgIEluZiAgICAtMEUtMyAgLT4gMAorZGRzYW1xMDIxNyBzYW1lcXVhbnR1bSAgIEluZiAgICAtMCAgICAgLT4gMAorZGRzYW1xMDIxOCBzYW1lcXVhbnR1bSAgIEluZiAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDIxOSBzYW1lcXVhbnR1bSAgIEluZiAgICAgMEUtMyAgLT4gMAorZGRzYW1xMDIyMCBzYW1lcXVhbnR1bSAgIEluZiAgICAgMCAgICAgLT4gMAorZGRzYW1xMDIyMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDIyMiBzYW1lcXVhbnR1bSAgIEluZiAgICAgN0UtMyAgLT4gMAorZGRzYW1xMDIyMyBzYW1lcXVhbnR1bSAgIEluZiAgICAgNyAgICAgLT4gMAorZGRzYW1xMDIyNCBzYW1lcXVhbnR1bSAgIEluZiAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDIyNSBzYW1lcXVhbnR1bSAgIEluZiAgICAgc05hTiAgLT4gMAorCitkZHNhbXEwMzEwIHNhbWVxdWFudHVtICAgTmFOICAgIC1JbmYgICAtPiAwCitkZHNhbXEwMzExIHNhbWVxdWFudHVtICAgTmFOICAgICBJbmYgICAtPiAwCitkZHNhbXEwMzEyIHNhbWVxdWFudHVtICAgTmFOICAgICBOYU4gICAtPiAxCitkZHNhbXEwMzEzIHNhbWVxdWFudHVtICAgTmFOICAgIC03RSszICAtPiAwCitkZHNhbXEwMzE0IHNhbWVxdWFudHVtICAgTmFOICAgIC03ICAgICAtPiAwCitkZHNhbXEwMzE1IHNhbWVxdWFudHVtICAgTmFOICAgIC03RS0zICAtPiAwCitkZHNhbXEwMzE2IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRS0zICAtPiAwCitkZHNhbXEwMzE3IHNhbWVxdWFudHVtICAgTmFOICAgIC0wICAgICAtPiAwCitkZHNhbXEwMzE4IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRSszICAtPiAwCitkZHNhbXEwMzE5IHNhbWVxdWFudHVtICAgTmFOICAgICAwRS0zICAtPiAwCitkZHNhbXEwMzIwIHNhbWVxdWFudHVtICAgTmFOICAgICAwICAgICAtPiAwCitkZHNhbXEwMzIxIHNhbWVxdWFudHVtICAgTmFOICAgICAwRSszICAtPiAwCitkZHNhbXEwMzIyIHNhbWVxdWFudHVtICAgTmFOICAgICA3RS0zICAtPiAwCitkZHNhbXEwMzIzIHNhbWVxdWFudHVtICAgTmFOICAgICA3ICAgICAtPiAwCitkZHNhbXEwMzI0IHNhbWVxdWFudHVtICAgTmFOICAgICA3RSszICAtPiAwCitkZHNhbXEwMzI1IHNhbWVxdWFudHVtICAgTmFOICAgICBzTmFOICAtPiAxCisKK2Rkc2FtcTA0MTAgc2FtZXF1YW50dW0gIC03RSszICAgIC1JbmYgICAtPiAwCitkZHNhbXEwNDExIHNhbWVxdWFudHVtICAtN0UrMyAgICAgSW5mICAgLT4gMAorZGRzYW1xMDQxMiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTA0MTMgc2FtZXF1YW50dW0gIC03RSszICAgIC03RSszICAtPiAxCitkZHNhbXEwNDE0IHNhbWVxdWFudHVtICAtN0UrMyAgICAtNyAgICAgLT4gMAorZGRzYW1xMDQxNSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTA0MTYgc2FtZXF1YW50dW0gIC03RSszICAgIC0wRS0zICAtPiAwCitkZHNhbXEwNDE3IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMCAgICAgLT4gMAorZGRzYW1xMDQxOCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTBFKzMgIC0+IDEKK2Rkc2FtcTA0MTkgc2FtZXF1YW50dW0gIC03RSszICAgICAwRS0zICAtPiAwCitkZHNhbXEwNDIwIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMCAgICAgLT4gMAorZGRzYW1xMDQyMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDBFKzMgIC0+IDEKK2Rkc2FtcTA0MjIgc2FtZXF1YW50dW0gIC03RSszICAgICA3RS0zICAtPiAwCitkZHNhbXEwNDIzIHNhbWVxdWFudHVtICAtN0UrMyAgICAgNyAgICAgLT4gMAorZGRzYW1xMDQyNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDdFKzMgIC0+IDEKK2Rkc2FtcTA0MjUgc2FtZXF1YW50dW0gIC03RSszICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTA1MTAgc2FtZXF1YW50dW0gIC03ICAgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTA1MTEgc2FtZXF1YW50dW0gIC03ICAgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTA1MTIgc2FtZXF1YW50dW0gIC03ICAgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTA1MTMgc2FtZXF1YW50dW0gIC03ICAgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTA1MTQgc2FtZXF1YW50dW0gIC03ICAgICAgLTcgICAgIC0+IDEKK2Rkc2FtcTA1MTUgc2FtZXF1YW50dW0gIC03ICAgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTA1MTYgc2FtZXF1YW50dW0gIC03ICAgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTA1MTcgc2FtZXF1YW50dW0gIC03ICAgICAgLTAgICAgIC0+IDEKK2Rkc2FtcTA1MTggc2FtZXF1YW50dW0gIC03ICAgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTA1MTkgc2FtZXF1YW50dW0gIC03ICAgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTA1MjAgc2FtZXF1YW50dW0gIC03ICAgICAgIDAgICAgIC0+IDEKK2Rkc2FtcTA1MjEgc2FtZXF1YW50dW0gIC03ICAgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTA1MjIgc2FtZXF1YW50dW0gIC03ICAgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTA1MjMgc2FtZXF1YW50dW0gIC03ICAgICAgIDcgICAgIC0+IDEKK2Rkc2FtcTA1MjQgc2FtZXF1YW50dW0gIC03ICAgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTA1MjUgc2FtZXF1YW50dW0gIC03ICAgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDYxMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTA2MTEgc2FtZXF1YW50dW0gIC03RS0zICAgICBJbmYgICAtPiAwCitkZHNhbXEwNjEyIHNhbWVxdWFudHVtICAtN0UtMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMDYxMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTA2MTQgc2FtZXF1YW50dW0gIC03RS0zICAgIC03ICAgICAtPiAwCitkZHNhbXEwNjE1IHNhbWVxdWFudHVtICAtN0UtMyAgICAtN0UtMyAgLT4gMQorZGRzYW1xMDYxNiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFLTMgIC0+IDEKK2Rkc2FtcTA2MTcgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wICAgICAtPiAwCitkZHNhbXEwNjE4IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDYxOSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFLTMgIC0+IDEKK2Rkc2FtcTA2MjAgc2FtZXF1YW50dW0gIC03RS0zICAgICAwICAgICAtPiAwCitkZHNhbXEwNjIxIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDYyMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFLTMgIC0+IDEKK2Rkc2FtcTA2MjMgc2FtZXF1YW50dW0gIC03RS0zICAgICA3ICAgICAtPiAwCitkZHNhbXEwNjI0IHNhbWVxdWFudHVtICAtN0UtMyAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDYyNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDcxMCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTA3MTEgc2FtZXF1YW50dW0gIC0wRS0zICAgICBJbmYgICAtPiAwCitkZHNhbXEwNzEyIHNhbWVxdWFudHVtICAtMEUtMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMDcxMyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTA3MTQgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03ICAgICAtPiAwCitkZHNhbXEwNzE1IHNhbWVxdWFudHVtICAtMEUtMyAgICAtN0UtMyAgLT4gMQorZGRzYW1xMDcxNiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFLTMgIC0+IDEKK2Rkc2FtcTA3MTcgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wICAgICAtPiAwCitkZHNhbXEwNzE4IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDcxOSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFLTMgIC0+IDEKK2Rkc2FtcTA3MjAgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwICAgICAtPiAwCitkZHNhbXEwNzIxIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDcyMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFLTMgIC0+IDEKK2Rkc2FtcTA3MjMgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3ICAgICAtPiAwCitkZHNhbXEwNzI0IHNhbWVxdWFudHVtICAtMEUtMyAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDcyNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDgxMCBzYW1lcXVhbnR1bSAgLTAgICAgICAtSW5mICAgLT4gMAorZGRzYW1xMDgxMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgSW5mICAgLT4gMAorZGRzYW1xMDgxMiBzYW1lcXVhbnR1bSAgLTAgICAgICAgTmFOICAgLT4gMAorZGRzYW1xMDgxMyBzYW1lcXVhbnR1bSAgLTAgICAgICAtN0UrMyAgLT4gMAorZGRzYW1xMDgxNCBzYW1lcXVhbnR1bSAgLTAgICAgICAtNyAgICAgLT4gMQorZGRzYW1xMDgxNSBzYW1lcXVhbnR1bSAgLTAgICAgICAtN0UtMyAgLT4gMAorZGRzYW1xMDgxNiBzYW1lcXVhbnR1bSAgLTAgICAgICAtMEUtMyAgLT4gMAorZGRzYW1xMDgxNyBzYW1lcXVhbnR1bSAgLTAgICAgICAtMCAgICAgLT4gMQorZGRzYW1xMDgxOCBzYW1lcXVhbnR1bSAgLTAgICAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDgxOSBzYW1lcXVhbnR1bSAgLTAgICAgICAgMEUtMyAgLT4gMAorZGRzYW1xMDgyMCBzYW1lcXVhbnR1bSAgLTAgICAgICAgMCAgICAgLT4gMQorZGRzYW1xMDgyMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDgyMiBzYW1lcXVhbnR1bSAgLTAgICAgICAgN0UtMyAgLT4gMAorZGRzYW1xMDgyMyBzYW1lcXVhbnR1bSAgLTAgICAgICAgNyAgICAgLT4gMQorZGRzYW1xMDgyNCBzYW1lcXVhbnR1bSAgLTAgICAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDgyNSBzYW1lcXVhbnR1bSAgLTAgICAgICAgc05hTiAgLT4gMAorCitkZHNhbXEwOTEwIHNhbWVxdWFudHVtICAtMEUrMyAgICAtSW5mICAgLT4gMAorZGRzYW1xMDkxMSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTA5MTIgc2FtZXF1YW50dW0gIC0wRSszICAgICBOYU4gICAtPiAwCitkZHNhbXEwOTEzIHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UrMyAgLT4gMQorZGRzYW1xMDkxNCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTA5MTUgc2FtZXF1YW50dW0gIC0wRSszICAgIC03RS0zICAtPiAwCitkZHNhbXEwOTE2IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUtMyAgLT4gMAorZGRzYW1xMDkxNyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTA5MTggc2FtZXF1YW50dW0gIC0wRSszICAgIC0wRSszICAtPiAxCitkZHNhbXEwOTE5IHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUtMyAgLT4gMAorZGRzYW1xMDkyMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTA5MjEgc2FtZXF1YW50dW0gIC0wRSszICAgICAwRSszICAtPiAxCitkZHNhbXEwOTIyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UtMyAgLT4gMAorZGRzYW1xMDkyMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTA5MjQgc2FtZXF1YW50dW0gIC0wRSszICAgICA3RSszICAtPiAxCitkZHNhbXEwOTI1IHNhbWVxdWFudHVtICAtMEUrMyAgICAgc05hTiAgLT4gMAorCitkZHNhbXExMTEwIHNhbWVxdWFudHVtICAwRS0zICAgIC1JbmYgICAtPiAwCitkZHNhbXExMTExIHNhbWVxdWFudHVtICAwRS0zICAgICBJbmYgICAtPiAwCitkZHNhbXExMTEyIHNhbWVxdWFudHVtICAwRS0zICAgICBOYU4gICAtPiAwCitkZHNhbXExMTEzIHNhbWVxdWFudHVtICAwRS0zICAgIC03RSszICAtPiAwCitkZHNhbXExMTE0IHNhbWVxdWFudHVtICAwRS0zICAgIC03ICAgICAtPiAwCitkZHNhbXExMTE1IHNhbWVxdWFudHVtICAwRS0zICAgIC03RS0zICAtPiAxCitkZHNhbXExMTE2IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRS0zICAtPiAxCitkZHNhbXExMTE3IHNhbWVxdWFudHVtICAwRS0zICAgIC0wICAgICAtPiAwCitkZHNhbXExMTE4IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRSszICAtPiAwCitkZHNhbXExMTE5IHNhbWVxdWFudHVtICAwRS0zICAgICAwRS0zICAtPiAxCitkZHNhbXExMTIwIHNhbWVxdWFudHVtICAwRS0zICAgICAwICAgICAtPiAwCitkZHNhbXExMTIxIHNhbWVxdWFudHVtICAwRS0zICAgICAwRSszICAtPiAwCitkZHNhbXExMTIyIHNhbWVxdWFudHVtICAwRS0zICAgICA3RS0zICAtPiAxCitkZHNhbXExMTIzIHNhbWVxdWFudHVtICAwRS0zICAgICA3ICAgICAtPiAwCitkZHNhbXExMTI0IHNhbWVxdWFudHVtICAwRS0zICAgICA3RSszICAtPiAwCitkZHNhbXExMTI1IHNhbWVxdWFudHVtICAwRS0zICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTEyMTAgc2FtZXF1YW50dW0gIDAgICAgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTEyMTEgc2FtZXF1YW50dW0gIDAgICAgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTEyMTIgc2FtZXF1YW50dW0gIDAgICAgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTEyMTMgc2FtZXF1YW50dW0gIDAgICAgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTEyMTQgc2FtZXF1YW50dW0gIDAgICAgICAgLTcgICAgIC0+IDEKK2Rkc2FtcTEyMTUgc2FtZXF1YW50dW0gIDAgICAgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTEyMTYgc2FtZXF1YW50dW0gIDAgICAgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTEyMTcgc2FtZXF1YW50dW0gIDAgICAgICAgLTAgICAgIC0+IDEKK2Rkc2FtcTEyMTggc2FtZXF1YW50dW0gIDAgICAgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTEyMTkgc2FtZXF1YW50dW0gIDAgICAgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTEyMjAgc2FtZXF1YW50dW0gIDAgICAgICAgIDAgICAgIC0+IDEKK2Rkc2FtcTEyMjEgc2FtZXF1YW50dW0gIDAgICAgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTEyMjIgc2FtZXF1YW50dW0gIDAgICAgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTEyMjMgc2FtZXF1YW50dW0gIDAgICAgICAgIDcgICAgIC0+IDEKK2Rkc2FtcTEyMjQgc2FtZXF1YW50dW0gIDAgICAgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTEyMjUgc2FtZXF1YW50dW0gIDAgICAgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMTMxMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtSW5mICAgLT4gMAorZGRzYW1xMTMxMSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgSW5mICAgLT4gMAorZGRzYW1xMTMxMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMTMxMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UrMyAgLT4gMQorZGRzYW1xMTMxNCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtNyAgICAgLT4gMAorZGRzYW1xMTMxNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UtMyAgLT4gMAorZGRzYW1xMTMxNiBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUtMyAgLT4gMAorZGRzYW1xMTMxNyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMCAgICAgLT4gMAorZGRzYW1xMTMxOCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUrMyAgLT4gMQorZGRzYW1xMTMxOSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUtMyAgLT4gMAorZGRzYW1xMTMyMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMCAgICAgLT4gMAorZGRzYW1xMTMyMSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUrMyAgLT4gMQorZGRzYW1xMTMyMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UtMyAgLT4gMAorZGRzYW1xMTMyMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAgNyAgICAgLT4gMAorZGRzYW1xMTMyNCBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UrMyAgLT4gMQorZGRzYW1xMTMyNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgc05hTiAgLT4gMAorCitkZHNhbXExNDEwIHNhbWVxdWFudHVtICA3RS0zICAgIC1JbmYgICAtPiAwCitkZHNhbXExNDExIHNhbWVxdWFudHVtICA3RS0zICAgICBJbmYgICAtPiAwCitkZHNhbXExNDEyIHNhbWVxdWFudHVtICA3RS0zICAgICBOYU4gICAtPiAwCitkZHNhbXExNDEzIHNhbWVxdWFudHVtICA3RS0zICAgIC03RSszICAtPiAwCitkZHNhbXExNDE0IHNhbWVxdWFudHVtICA3RS0zICAgIC03ICAgICAtPiAwCitkZHNhbXExNDE1IHNhbWVxdWFudHVtICA3RS0zICAgIC03RS0zICAtPiAxCitkZHNhbXExNDE2IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRS0zICAtPiAxCitkZHNhbXExNDE3IHNhbWVxdWFudHVtICA3RS0zICAgIC0wICAgICAtPiAwCitkZHNhbXExNDE4IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRSszICAtPiAwCitkZHNhbXExNDE5IHNhbWVxdWFudHVtICA3RS0zICAgICAwRS0zICAtPiAxCitkZHNhbXExNDIwIHNhbWVxdWFudHVtICA3RS0zICAgICAwICAgICAtPiAwCitkZHNhbXExNDIxIHNhbWVxdWFudHVtICA3RS0zICAgICAwRSszICAtPiAwCitkZHNhbXExNDIyIHNhbWVxdWFudHVtICA3RS0zICAgICA3RS0zICAtPiAxCitkZHNhbXExNDIzIHNhbWVxdWFudHVtICA3RS0zICAgICA3ICAgICAtPiAwCitkZHNhbXExNDI0IHNhbWVxdWFudHVtICA3RS0zICAgICA3RSszICAtPiAwCitkZHNhbXExNDI1IHNhbWVxdWFudHVtICA3RS0zICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTE1MTAgc2FtZXF1YW50dW0gIDcgICAgICAtSW5mICAgLT4gMAorZGRzYW1xMTUxMSBzYW1lcXVhbnR1bSAgNyAgICAgICBJbmYgICAtPiAwCitkZHNhbXExNTEyIHNhbWVxdWFudHVtICA3ICAgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTE1MTMgc2FtZXF1YW50dW0gIDcgICAgICAtN0UrMyAgLT4gMAorZGRzYW1xMTUxNCBzYW1lcXVhbnR1bSAgNyAgICAgIC03ICAgICAtPiAxCitkZHNhbXExNTE1IHNhbWVxdWFudHVtICA3ICAgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTE1MTYgc2FtZXF1YW50dW0gIDcgICAgICAtMEUtMyAgLT4gMAorZGRzYW1xMTUxNyBzYW1lcXVhbnR1bSAgNyAgICAgIC0wICAgICAtPiAxCitkZHNhbXExNTE4IHNhbWVxdWFudHVtICA3ICAgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTE1MTkgc2FtZXF1YW50dW0gIDcgICAgICAgMEUtMyAgLT4gMAorZGRzYW1xMTUyMCBzYW1lcXVhbnR1bSAgNyAgICAgICAwICAgICAtPiAxCitkZHNhbXExNTIxIHNhbWVxdWFudHVtICA3ICAgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTE1MjIgc2FtZXF1YW50dW0gIDcgICAgICAgN0UtMyAgLT4gMAorZGRzYW1xMTUyMyBzYW1lcXVhbnR1bSAgNyAgICAgICA3ICAgICAtPiAxCitkZHNhbXExNTI0IHNhbWVxdWFudHVtICA3ICAgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTE1MjUgc2FtZXF1YW50dW0gIDcgICAgICAgc05hTiAgLT4gMAorCitkZHNhbXExNjEwIHNhbWVxdWFudHVtICA3RSszICAgIC1JbmYgICAtPiAwCitkZHNhbXExNjExIHNhbWVxdWFudHVtICA3RSszICAgICBJbmYgICAtPiAwCitkZHNhbXExNjEyIHNhbWVxdWFudHVtICA3RSszICAgICBOYU4gICAtPiAwCitkZHNhbXExNjEzIHNhbWVxdWFudHVtICA3RSszICAgIC03RSszICAtPiAxCitkZHNhbXExNjE0IHNhbWVxdWFudHVtICA3RSszICAgIC03ICAgICAtPiAwCitkZHNhbXExNjE1IHNhbWVxdWFudHVtICA3RSszICAgIC03RS0zICAtPiAwCitkZHNhbXExNjE2IHNhbWVxdWFudHVtICA3RSszICAgIC0wRS0zICAtPiAwCitkZHNhbXExNjE3IHNhbWVxdWFudHVtICA3RSszICAgIC0wICAgICAtPiAwCitkZHNhbXExNjE4IHNhbWVxdWFudHVtICA3RSszICAgIC0wRSszICAtPiAxCitkZHNhbXExNjE5IHNhbWVxdWFudHVtICA3RSszICAgICAwRS0zICAtPiAwCitkZHNhbXExNjIwIHNhbWVxdWFudHVtICA3RSszICAgICAwICAgICAtPiAwCitkZHNhbXExNjIxIHNhbWVxdWFudHVtICA3RSszICAgICAwRSszICAtPiAxCitkZHNhbXExNjIyIHNhbWVxdWFudHVtICA3RSszICAgICA3RS0zICAtPiAwCitkZHNhbXExNjIzIHNhbWVxdWFudHVtICA3RSszICAgICA3ICAgICAtPiAwCitkZHNhbXExNjI0IHNhbWVxdWFudHVtICA3RSszICAgICA3RSszICAtPiAxCitkZHNhbXExNjI1IHNhbWVxdWFudHVtICA3RSszICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTE3MTAgc2FtZXF1YW50dW0gIHNOYU4gICAgLUluZiAgIC0+IDAKK2Rkc2FtcTE3MTEgc2FtZXF1YW50dW0gIHNOYU4gICAgIEluZiAgIC0+IDAKK2Rkc2FtcTE3MTIgc2FtZXF1YW50dW0gIHNOYU4gICAgIE5hTiAgIC0+IDEKK2Rkc2FtcTE3MTMgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTE3MTQgc2FtZXF1YW50dW0gIHNOYU4gICAgLTcgICAgIC0+IDAKK2Rkc2FtcTE3MTUgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTE3MTYgc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTE3MTcgc2FtZXF1YW50dW0gIHNOYU4gICAgLTAgICAgIC0+IDAKK2Rkc2FtcTE3MTggc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTE3MTkgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTE3MjAgc2FtZXF1YW50dW0gIHNOYU4gICAgIDAgICAgIC0+IDAKK2Rkc2FtcTE3MjEgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTE3MjIgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTE3MjMgc2FtZXF1YW50dW0gIHNOYU4gICAgIDcgICAgIC0+IDAKK2Rkc2FtcTE3MjQgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTE3MjUgc2FtZXF1YW50dW0gIHNOYU4gICAgIHNOYU4gIC0+IDEKKy0tIG5vaXN5IE5hTnMKK2Rkc2FtcTE3MzAgc2FtZXF1YW50dW0gIHNOYU4zICAgIHNOYU4zIC0+IDEKK2Rkc2FtcTE3MzEgc2FtZXF1YW50dW0gIHNOYU4zICAgIHNOYU40IC0+IDEKK2Rkc2FtcTE3MzIgc2FtZXF1YW50dW0gICBOYU4zICAgICBOYU4zIC0+IDEKK2Rkc2FtcTE3MzMgc2FtZXF1YW50dW0gICBOYU4zICAgICBOYU40IC0+IDEKK2Rkc2FtcTE3MzQgc2FtZXF1YW50dW0gIHNOYU4zICAgICAzICAgIC0+IDAKK2Rkc2FtcTE3MzUgc2FtZXF1YW50dW0gICBOYU4zICAgICAzICAgIC0+IDAKK2Rkc2FtcTE3MzYgc2FtZXF1YW50dW0gICAgICA0ICAgIHNOYU40IC0+IDAKK2Rkc2FtcTE3Mzcgc2FtZXF1YW50dW0gICAgICAzICAgICBOYU4zIC0+IDAKK2Rkc2FtcTE3Mzggc2FtZXF1YW50dW0gICAgSW5mICAgIHNOYU40IC0+IDAKK2Rkc2FtcTE3Mzkgc2FtZXF1YW50dW0gICAtSW5mICAgICBOYU4zIC0+IDAKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2NhbGVCLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTY2FsZUIuZGVjVGVzdAppbmRleCA2YmEzZTM5Li5lZGVlMTFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTY2FsZUIuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTY2FsZUIuZGVjVGVzdApAQCAtMSwyNDMgKzEsMjQzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFNjYWxlYkIuZGVjVGVzdCAtLSBzY2FsZSBhIGRlY0RvdWJsZSBieSBwb3dlcnMgb2YgMTAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBNYXggfHJoc3wgaXMgMiooMzg0KzE2KSA9IDgwMA0KLQ0KLS0tIFNhbml0eSBjaGVja3MNCi1kZHNjYjAwMSBzY2FsZWIgICAgICAgNy41MCAgIDEwIC0+IDcuNTBFKzEwDQotZGRzY2IwMDIgc2NhbGViICAgICAgIDcuNTAgICAgMyAtPiA3LjUwRSszDQotZGRzY2IwMDMgc2NhbGViICAgICAgIDcuNTAgICAgMiAtPiA3NTANCi1kZHNjYjAwNCBzY2FsZWIgICAgICAgNy41MCAgICAxIC0+IDc1LjANCi1kZHNjYjAwNSBzY2FsZWIgICAgICAgNy41MCAgICAwIC0+IDcuNTANCi1kZHNjYjAwNiBzY2FsZWIgICAgICAgNy41MCAgIC0xIC0+IDAuNzUwDQotZGRzY2IwMDcgc2NhbGViICAgICAgIDcuNTAgICAtMiAtPiAwLjA3NTANCi1kZHNjYjAwOCBzY2FsZWIgICAgICAgNy41MCAgLTEwIC0+IDcuNTBFLTEwDQotZGRzY2IwMDkgc2NhbGViICAgICAgLTcuNTAgICAgMyAtPiAtNy41MEUrMw0KLWRkc2NiMDEwIHNjYWxlYiAgICAgIC03LjUwICAgIDIgLT4gLTc1MA0KLWRkc2NiMDExIHNjYWxlYiAgICAgIC03LjUwICAgIDEgLT4gLTc1LjANCi1kZHNjYjAxMiBzY2FsZWIgICAgICAtNy41MCAgICAwIC0+IC03LjUwDQotZGRzY2IwMTMgc2NhbGViICAgICAgLTcuNTAgICAtMSAtPiAtMC43NTANCi0NCi0tLSBJbmZpbml0aWVzDQotZGRzY2IwMTQgc2NhbGViICBJbmZpbml0eSAgIDEgLT4gSW5maW5pdHkNCi1kZHNjYjAxNSBzY2FsZWIgIC1JbmZpbml0eSAgMiAtPiAtSW5maW5pdHkNCi1kZHNjYjAxNiBzY2FsZWIgIEluZmluaXR5ICAtMSAtPiBJbmZpbml0eQ0KLWRkc2NiMDE3IHNjYWxlYiAgLUluZmluaXR5IC0yIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE5leHQgdHdvIGFyZSBzb21ld2hhdCB1bmRlZmluZWQgaW4gNzU0cjsgdHJlYXQgYXMgbm9uLWludGVnZXINCi1kZHNjYjAxOCBzY2FsZWIgIDEwICBJbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjAxOSBzY2FsZWIgIDEwIC1JbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOYU5zIGFyZSB1bmRlZmluZWQgaW4gNzU0cjsgYXNzdW1lIHVzdWFsIHByb2Nlc3NpbmcNCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kZHNjYjAyMSBzY2FsZWIgICAgICAgICBOYU4gIDEgLT4gTmFODQotZGRzY2IwMjIgc2NhbGViICAgICAgICAtTmFOIC0xIC0+IC1OYU4NCi1kZHNjYjAyMyBzY2FsZWIgICAgICAgIHNOYU4gIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwMjQgc2NhbGViICAgICAgIC1zTmFOICAxIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjAyNSBzY2FsZWIgICAgNCAgICBOYU4gICAgLT4gTmFODQotZGRzY2IwMjYgc2NhbGViIC1JbmYgICAtTmFOICAgIC0+IC1OYU4NCi1kZHNjYjAyNyBzY2FsZWIgICAgNCAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwMjggc2NhbGViICBJbmYgIC1zTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBub24taW50ZWdlciBSSFMNCi1kZHNjYjAzMCBzY2FsZWIgIDEuMjMgICAgMSAgICAtPiAgMTIuMw0KLWRkc2NiMDMxIHNjYWxlYiAgMS4yMyAgICAxLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjAzMiBzY2FsZWIgIDEuMjMgICAgMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwMzMgc2NhbGViICAxLjIzICAgIDEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDM0IHNjYWxlYiAgMS4yMyAgICAwLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjAzNSBzY2FsZWIgIDEuMjMgICAgMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwMzYgc2NhbGViICAxLjIzICAgIDAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjAzNyBzY2FsZWIgIDEuMjMgICAtMSAgICAtPiAgMC4xMjMNCi1kZHNjYjAzOCBzY2FsZWIgIDEuMjMgICAtMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwMzkgc2NhbGViICAxLjIzICAgLTEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDQwIHNjYWxlYiAgMS4yMyAgIC0xLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjA0MSBzY2FsZWIgIDEuMjMgICAtMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwNDIgc2NhbGViICAxLjIzICAgLTAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDQzIHNjYWxlYiAgMS4yMyAgIC0wLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwNDQgc2NhbGViICAxLjIzICAgIDAuMSAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjA0NSBzY2FsZWIgIDEuMjMgICAgMUUrMSAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDQ2IHNjYWxlYiAgMS4yMyAgICAxLjEyMzRFKzYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwNDcgc2NhbGViICAxLjIzICAgIDEuMTIzRSs0ICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvdXQtb2YgcmFuZ2UgUkhTDQotZGRzY2IxMjAgc2NhbGViICAxLjIzICAgIDc5OSAgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZHNjYjEyMSBzY2FsZWIgIDEuMjMgICAgODAwICAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkc2NiMTIyIHNjYWxlYiAgMS4yMyAgICA4MDEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IxMjMgc2NhbGViICAxLjIzICAgIDgwMiAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjEyNCBzY2FsZWIgIDEuMjMgICAtNzk5ICAgICAgICAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRzY2IxMjUgc2NhbGViICAxLjIzICAgLTgwMCAgICAgICAgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkc2NiMTI2IHNjYWxlYiAgMS4yMyAgIC04MDEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IxMjcgc2NhbGViICAxLjIzICAgLTgwMiAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkc2NiODYxIHNjYWxlYiAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQ0KLWRkc2NiODYyIHNjYWxlYiAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMg0KLWRkc2NiODYzIHNjYWxlYiAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMw0KLWRkc2NiODY0IHNjYWxlYiAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONA0KLWRkc2NiODY1IHNjYWxlYiAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQ0KLWRkc2NiODY2IHNjYWxlYiAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzENCi1kZHNjYjg2NyBzY2FsZWIgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxDQotZGRzY2I4Njggc2NhbGViICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQ0KLWRkc2NiODY5IHNjYWxlYiAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxDQotZGRzY2I4NzEgc2NhbGViICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjg3MiBzY2FsZWIgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiODczIHNjYWxlYiAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2I4NzQgc2NhbGViICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjg3NSBzY2FsZWIgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiODc2IHNjYWxlYiAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2I4Nzcgc2NhbGViIC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjg3OCBzY2FsZWIgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiODc5IHNjYWxlYiAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2I4ODAgc2NhbGViICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjg4MSBzY2FsZWIgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIGZpbml0ZXMNCi1kZHNjYjA1MSBzY2FsZWIgICAgICAgICAgNyAgIC0yICAtPiAwLjA3DQotZGRzY2IwNTIgc2NhbGViICAgICAgICAgLTcgICAtMiAgLT4gLTAuMDcNCi1kZHNjYjA1MyBzY2FsZWIgICAgICAgICA3NSAgIC0yICAtPiAwLjc1DQotZGRzY2IwNTQgc2NhbGViICAgICAgICAtNzUgICAtMiAgLT4gLTAuNzUNCi1kZHNjYjA1NSBzY2FsZWIgICAgICAgNy41MCAgIC0yICAtPiAwLjA3NTANCi1kZHNjYjA1NiBzY2FsZWIgICAgICAtNy41MCAgIC0yICAtPiAtMC4wNzUwDQotZGRzY2IwNTcgc2NhbGViICAgICAgIDcuNTAwICAtMiAgLT4gMC4wNzUwMA0KLWRkc2NiMDU4IHNjYWxlYiAgICAgIC03LjUwMCAgLTIgIC0+IC0wLjA3NTAwDQotZGRzY2IwNjEgc2NhbGViICAgICAgICAgIDcgICAtMSAgLT4gMC43DQotZGRzY2IwNjIgc2NhbGViICAgICAgICAgLTcgICAtMSAgLT4gLTAuNw0KLWRkc2NiMDYzIHNjYWxlYiAgICAgICAgIDc1ICAgLTEgIC0+IDcuNQ0KLWRkc2NiMDY0IHNjYWxlYiAgICAgICAgLTc1ICAgLTEgIC0+IC03LjUNCi1kZHNjYjA2NSBzY2FsZWIgICAgICAgNy41MCAgIC0xICAtPiAwLjc1MA0KLWRkc2NiMDY2IHNjYWxlYiAgICAgIC03LjUwICAgLTEgIC0+IC0wLjc1MA0KLWRkc2NiMDY3IHNjYWxlYiAgICAgICA3LjUwMCAgLTEgIC0+IDAuNzUwMA0KLWRkc2NiMDY4IHNjYWxlYiAgICAgIC03LjUwMCAgLTEgIC0+IC0wLjc1MDANCi1kZHNjYjA3MSBzY2FsZWIgICAgICAgICAgNyAgICAwICAtPiA3DQotZGRzY2IwNzIgc2NhbGViICAgICAgICAgLTcgICAgMCAgLT4gLTcNCi1kZHNjYjA3MyBzY2FsZWIgICAgICAgICA3NSAgICAwICAtPiA3NQ0KLWRkc2NiMDc0IHNjYWxlYiAgICAgICAgLTc1ICAgIDAgIC0+IC03NQ0KLWRkc2NiMDc1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgIC0+IDcuNTANCi1kZHNjYjA3NiBzY2FsZWIgICAgICAtNy41MCAgICAwICAtPiAtNy41MA0KLWRkc2NiMDc3IHNjYWxlYiAgICAgICA3LjUwMCAgIDAgIC0+IDcuNTAwDQotZGRzY2IwNzggc2NhbGViICAgICAgLTcuNTAwICAgMCAgLT4gLTcuNTAwDQotZGRzY2IwODEgc2NhbGViICAgICAgICAgIDcgICAgMSAgLT4gN0UrMQ0KLWRkc2NiMDgyIHNjYWxlYiAgICAgICAgIC03ICAgIDEgIC0+IC03RSsxDQotZGRzY2IwODMgc2NhbGViICAgICAgICAgNzUgICAgMSAgLT4gNy41RSsyDQotZGRzY2IwODQgc2NhbGViICAgICAgICAtNzUgICAgMSAgLT4gLTcuNUUrMg0KLWRkc2NiMDg1IHNjYWxlYiAgICAgICA3LjUwICAgIDEgIC0+IDc1LjANCi1kZHNjYjA4NiBzY2FsZWIgICAgICAtNy41MCAgICAxICAtPiAtNzUuMA0KLWRkc2NiMDg3IHNjYWxlYiAgICAgICA3LjUwMCAgIDEgIC0+IDc1LjAwDQotZGRzY2IwODggc2NhbGViICAgICAgLTcuNTAwICAgMSAgLT4gLTc1LjAwDQotZGRzY2IwOTEgc2NhbGViICAgICAgICAgIDcgICAgMiAgLT4gN0UrMg0KLWRkc2NiMDkyIHNjYWxlYiAgICAgICAgIC03ICAgIDIgIC0+IC03RSsyDQotZGRzY2IwOTMgc2NhbGViICAgICAgICAgNzUgICAgMiAgLT4gNy41RSszDQotZGRzY2IwOTQgc2NhbGViICAgICAgICAtNzUgICAgMiAgLT4gLTcuNUUrMw0KLWRkc2NiMDk1IHNjYWxlYiAgICAgICA3LjUwICAgIDIgIC0+IDc1MA0KLWRkc2NiMDk2IHNjYWxlYiAgICAgIC03LjUwICAgIDIgIC0+IC03NTANCi1kZHNjYjA5NyBzY2FsZWIgICAgICAgNy41MDAgICAyICAtPiA3NTAuMA0KLWRkc2NiMDk4IHNjYWxlYiAgICAgIC03LjUwMCAgIDIgIC0+IC03NTAuMA0KLQ0KLS0tIHplcm9zDQotZGRzY2IxMTEgc2NhbGViICAgICAgICAgIDAgIDEgLT4gMEUrMQ0KLWRkc2NiMTEyIHNjYWxlYiAgICAgICAgIC0wICAyIC0+IC0wRSsyDQotZGRzY2IxMTMgc2NhbGViICAgICAgIDBFKzQgIDMgLT4gMEUrNw0KLWRkc2NiMTE0IHNjYWxlYiAgICAgIC0wRSs0ICA0IC0+IC0wRSs4DQotZGRzY2IxMTUgc2NhbGViICAgICAwLjAwMDAgIDUgLT4gMEUrMQ0KLWRkc2NiMTE2IHNjYWxlYiAgICAtMC4wMDAwICA2IC0+IC0wRSsyDQotZGRzY2IxMTcgc2NhbGViICAgICAgMEUtMTQxIDcgLT4gMEUtMTM0DQotZGRzY2IxMTggc2NhbGViICAgICAtMEUtMTQxIDggLT4gLTBFLTEzMw0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRzY2IxMzIgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICArMzg0IC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkc2NiMTMzIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgKzEwIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZHNjYjEzNCBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICsxICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRzY2IxMzUgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgMCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkc2NiMTM2IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODMNCi1kZHNjYjEzNyBzY2FsZWIgIDFFLTM4MyAgICAgICAgICAgKzEgIC0+IDFFLTM4Mg0KLWRkc2NiMTM4IHNjYWxlYiAgMUUtMzgzICAgICAgICAgICAtMCAgLT4gMUUtMzgzDQotZGRzY2IxMzkgc2NhbGViICAxRS0zODMgICAgICAgICAgIC0xICAtPiAxRS0zODQgICAgICAgICAgU3Vibm9ybWFsDQotZGRzY2IxNDAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICArMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mg0KLWRkc2NiMTQxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZHNjYjE0MiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHNjYjE0MyBzY2FsZWIgIDFFLTM5OCAgICAgICAgICArMSAgLT4gMUUtMzk3ICAgICAgICAgIFN1Ym5vcm1hbA0KLWRkc2NiMTQ0IHNjYWxlYiAgMUUtMzk4ICAgICAgICAgIC0wICAtPiAxRS0zOTggICAgICAgICBTdWJub3JtYWwNCi1kZHNjYjE0NSBzY2FsZWIgIDFFLTM5OCAgICAgICAgICAtMSAgLT4gMEUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLWRkc2NiMTUwIHNjYWxlYiAgLTFFLTM5OCAgICAgICAgICsxICAtPiAtMUUtMzk3ICAgICAgICAgU3Vibm9ybWFsDQotZGRzY2IxNTEgc2NhbGViICAtMUUtMzk4ICAgICAgICAgLTAgIC0+IC0xRS0zOTggICAgICAgIFN1Ym5vcm1hbA0KLWRkc2NiMTUyIHNjYWxlYiAgLTFFLTM5OCAgICAgICAgIC0xICAtPiAtMEUtMzk4ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRzY2IxNTMgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyArMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODINCi1kZHNjYjE1NCBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICswICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkc2NiMTU1IHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHNjYjE1NiBzY2FsZWIgIC0xRS0zODMgICAgICAgICAgKzEgIC0+IC0xRS0zODINCi1kZHNjYjE1NyBzY2FsZWIgIC0xRS0zODMgICAgICAgICAgLTAgIC0+IC0xRS0zODMNCi1kZHNjYjE1OCBzY2FsZWIgIC0xRS0zODMgICAgICAgICAgLTEgIC0+IC0xRS0zODQgICAgICAgICAgU3Vibm9ybWFsDQotZGRzY2IxNTkgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZHNjYjE2MCBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICswICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkc2NiMTYxIHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzgzDQotZGRzY2IxNjIgc2NhbGViICAtOUUrMzg0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkc2NiMTYzIHNjYWxlYiAgLTFFKzM4NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzb21lIE9yaWdhbWkNCi0tLSAodGhlc2UgY2hlY2sgdGhhdCBvdmVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkNCi1kZHNjYjE3MSBzY2FsZWIgICAxMDAwRSszNjUgICsxIC0+IDEuMDAwRSszNjkNCi1kZHNjYjE3MiBzY2FsZWIgICAxMDAwRSszNjYgICsxIC0+IDEuMDAwRSszNzANCi1kZHNjYjE3MyBzY2FsZWIgICAxMDAwRSszNjcgICsxIC0+IDEuMDAwRSszNzENCi1kZHNjYjE3NCBzY2FsZWIgICAxMDAwRSszNjggICsxIC0+IDEuMDAwRSszNzINCi1kZHNjYjE3NSBzY2FsZWIgICAxMDAwRSszNjkgICsxIC0+IDEuMDAwMEUrMzczICAgICAgICAgICAgICAgICAgQ2xhbXBlZA0KLWRkc2NiMTc2IHNjYWxlYiAgIDEwMDBFKzM3MCAgKzEgLT4gMS4wMDAwMEUrMzc0ICAgICAgICAgICAgICAgICBDbGFtcGVkDQotZGRzY2IxNzcgc2NhbGViICAgMTAwMEUrMzcxICArMSAtPiAxLjAwMDAwMEUrMzc1ICAgICAgICAgICAgICAgIENsYW1wZWQNCi1kZHNjYjE3OCBzY2FsZWIgICAxMDAwRSszNzIgICsxIC0+IDEuMDAwMDAwMEUrMzc2ICAgICAgICAgICAgICAgQ2xhbXBlZA0KLWRkc2NiMTc5IHNjYWxlYiAgIDEwMDBFKzM3MyAgKzEgLT4gMS4wMDAwMDAwMEUrMzc3ICAgICAgICAgICAgICBDbGFtcGVkDQotZGRzY2IxODAgc2NhbGViICAgMTAwMEUrMzc0ICArMSAtPiAxLjAwMDAwMDAwMEUrMzc4ICAgICAgICAgICAgIENsYW1wZWQNCi1kZHNjYjE4MSBzY2FsZWIgICAxMDAwRSszNzUgICsxIC0+IDEuMDAwMDAwMDAwMEUrMzc5ICAgICAgICAgICAgQ2xhbXBlZA0KLWRkc2NiMTgyIHNjYWxlYiAgIDEwMDBFKzM3NiAgKzEgLT4gMS4wMDAwMDAwMDAwMEUrMzgwICAgICAgICAgICBDbGFtcGVkDQotZGRzY2IxODMgc2NhbGViICAgMTAwMEUrMzc3ICArMSAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxICAgICAgICAgIENsYW1wZWQNCi1kZHNjYjE4NCBzY2FsZWIgICAxMDAwRSszNzggICsxIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyICAgICAgICAgQ2xhbXBlZA0KLWRkc2NiMTg1IHNjYWxlYiAgIDEwMDBFKzM3OSAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzICAgICAgICBDbGFtcGVkDQotZGRzY2IxODYgc2NhbGViICAgMTAwMEUrMzgwICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICAgICAgIENsYW1wZWQNCi1kZHNjYjE4NyBzY2FsZWIgICAxMDAwRSszODEgICsxIC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGFuZCBhIGZldyBtb3JlIHN1Ym5vcm1hbCB0cnVuY2F0aW9ucw0KLS0tICh0aGVzZSBjaGVjayB0aGF0IHVuZGVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkNCi1kZHNjYjIwMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRzY2IyMDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMDMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMiAgLT4gMS4wMDAwMDAwMDAwMDAwRS0zODUgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHNjYjIwNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0zICAtPiAxLjAwMDAwMDAwMDAwMEUtMzg2IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMDUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtNCAgLT4gMS4wMDAwMDAwMDAwMEUtMzg3IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMDYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtNSAgLT4gMS4wMDAwMDAwMDAwRS0zODggU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHNjYjIwNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC02ICAtPiAxLjAwMDAwMDAwMEUtMzg5IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMDggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtNyAgLT4gMS4wMDAwMDAwMEUtMzkwIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMDkgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtOCAgLT4gMS4wMDAwMDAwRS0zOTEgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHNjYjIxMCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC05ICAtPiAxLjAwMDAwMEUtMzkyIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMTEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTAgLT4gMS4wMDAwMEUtMzkzIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMTIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTEgLT4gMS4wMDAwRS0zOTQgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHNjYjIxMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xMiAtPiAxLjAwMEUtMzk1IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMTQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTMgLT4gMS4wMEUtMzk2IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMTUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTQgLT4gMS4wRS0zOTcgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHNjYjIxNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xNSAtPiAxRS0zOTggU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHNjYjIxNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xNiAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkc2NiMjE4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE3IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFNjYWxlYkIuZGVjVGVzdCAtLSBzY2FsZSBhIGRlY0RvdWJsZSBieSBwb3dlcnMgb2YgMTAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBNYXggfHJoc3wgaXMgMiooMzg0KzE2KSA9IDgwMAorCistLSBTYW5pdHkgY2hlY2tzCitkZHNjYjAwMSBzY2FsZWIgICAgICAgNy41MCAgIDEwIC0+IDcuNTBFKzEwCitkZHNjYjAwMiBzY2FsZWIgICAgICAgNy41MCAgICAzIC0+IDcuNTBFKzMKK2Rkc2NiMDAzIHNjYWxlYiAgICAgICA3LjUwICAgIDIgLT4gNzUwCitkZHNjYjAwNCBzY2FsZWIgICAgICAgNy41MCAgICAxIC0+IDc1LjAKK2Rkc2NiMDA1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgLT4gNy41MAorZGRzY2IwMDYgc2NhbGViICAgICAgIDcuNTAgICAtMSAtPiAwLjc1MAorZGRzY2IwMDcgc2NhbGViICAgICAgIDcuNTAgICAtMiAtPiAwLjA3NTAKK2Rkc2NiMDA4IHNjYWxlYiAgICAgICA3LjUwICAtMTAgLT4gNy41MEUtMTAKK2Rkc2NiMDA5IHNjYWxlYiAgICAgIC03LjUwICAgIDMgLT4gLTcuNTBFKzMKK2Rkc2NiMDEwIHNjYWxlYiAgICAgIC03LjUwICAgIDIgLT4gLTc1MAorZGRzY2IwMTEgc2NhbGViICAgICAgLTcuNTAgICAgMSAtPiAtNzUuMAorZGRzY2IwMTIgc2NhbGViICAgICAgLTcuNTAgICAgMCAtPiAtNy41MAorZGRzY2IwMTMgc2NhbGViICAgICAgLTcuNTAgICAtMSAtPiAtMC43NTAKKworLS0gSW5maW5pdGllcworZGRzY2IwMTQgc2NhbGViICBJbmZpbml0eSAgIDEgLT4gSW5maW5pdHkKK2Rkc2NiMDE1IHNjYWxlYiAgLUluZmluaXR5ICAyIC0+IC1JbmZpbml0eQorZGRzY2IwMTYgc2NhbGViICBJbmZpbml0eSAgLTEgLT4gSW5maW5pdHkKK2Rkc2NiMDE3IHNjYWxlYiAgLUluZmluaXR5IC0yIC0+IC1JbmZpbml0eQorCistLSBOZXh0IHR3byBhcmUgc29tZXdoYXQgdW5kZWZpbmVkIGluIDc1NHI7IHRyZWF0IGFzIG5vbi1pbnRlZ2VyCitkZHNjYjAxOCBzY2FsZWIgIDEwICBJbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDE5IHNjYWxlYiAgMTAgLUluZmluaXR5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zIGFyZSB1bmRlZmluZWQgaW4gNzU0cjsgYXNzdW1lIHVzdWFsIHByb2Nlc3NpbmcKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRzY2IwMjEgc2NhbGViICAgICAgICAgTmFOICAxIC0+IE5hTgorZGRzY2IwMjIgc2NhbGViICAgICAgICAtTmFOIC0xIC0+IC1OYU4KK2Rkc2NiMDIzIHNjYWxlYiAgICAgICAgc05hTiAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDI0IHNjYWxlYiAgICAgICAtc05hTiAgMSAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjAyNSBzY2FsZWIgICAgNCAgICBOYU4gICAgLT4gTmFOCitkZHNjYjAyNiBzY2FsZWIgLUluZiAgIC1OYU4gICAgLT4gLU5hTgorZGRzY2IwMjcgc2NhbGViICAgIDQgICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMjggc2NhbGViICBJbmYgIC1zTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gbm9uLWludGVnZXIgUkhTCitkZHNjYjAzMCBzY2FsZWIgIDEuMjMgICAgMSAgICAtPiAgMTIuMworZGRzY2IwMzEgc2NhbGViICAxLjIzICAgIDEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzIgc2NhbGViICAxLjIzICAgIDEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzMgc2NhbGViICAxLjIzICAgIDEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzQgc2NhbGViICAxLjIzICAgIDAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzUgc2NhbGViICAxLjIzICAgIDAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzYgc2NhbGViICAxLjIzICAgIDAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDM3IHNjYWxlYiAgMS4yMyAgIC0xICAgIC0+ICAwLjEyMworZGRzY2IwMzggc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzkgc2NhbGViICAxLjIzICAgLTEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDAgc2NhbGViICAxLjIzICAgLTEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDIgc2NhbGViICAxLjIzICAgLTAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDMgc2NhbGViICAxLjIzICAgLTAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjA0NSBzY2FsZWIgIDEuMjMgICAgMUUrMSAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDYgc2NhbGViICAxLjIzICAgIDEuMTIzNEUrNiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG91dC1vZiByYW5nZSBSSFMKK2Rkc2NiMTIwIHNjYWxlYiAgMS4yMyAgICA3OTkgICAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZHNjYjEyMSBzY2FsZWIgIDEuMjMgICAgODAwICAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxMjIgc2NhbGViICAxLjIzICAgIDgwMSAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMTIzIHNjYWxlYiAgMS4yMyAgICA4MDIgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjEyNCBzY2FsZWIgIDEuMjMgICAtNzk5ICAgICAgICAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZHNjYjEyNSBzY2FsZWIgIDEuMjMgICAtODAwICAgICAgICAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZHNjYjEyNiBzY2FsZWIgIDEuMjMgICAtODAxICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IxMjcgc2NhbGViICAxLjIzICAgLTgwMiAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorLS0gcHJvcGFnYXRpbmcgTmFOcworZGRzY2I4NjEgc2NhbGViICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xCitkZHNjYjg2MiBzY2FsZWIgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjIKK2Rkc2NiODYzIHNjYWxlYiAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMworZGRzY2I4NjQgc2NhbGViICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40CitkZHNjYjg2NSBzY2FsZWIgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUKK2Rkc2NiODY2IHNjYWxlYiAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzEKK2Rkc2NiODY3IHNjYWxlYiAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODEKK2Rkc2NiODY4IHNjYWxlYiAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTEKK2Rkc2NiODY5IHNjYWxlYiAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxCitkZHNjYjg3MSBzY2FsZWIgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4NzIgc2NhbGViICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODczIHNjYWxlYiAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg3NCBzY2FsZWIgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4NzUgc2NhbGViICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODc2IHNjYWxlYiAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg3NyBzY2FsZWIgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4Nzggc2NhbGViIC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODc5IHNjYWxlYiAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg4MCBzY2FsZWIgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4ODEgc2NhbGViICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworZGRzY2IwNTEgc2NhbGViICAgICAgICAgIDcgICAtMiAgLT4gMC4wNworZGRzY2IwNTIgc2NhbGViICAgICAgICAgLTcgICAtMiAgLT4gLTAuMDcKK2Rkc2NiMDUzIHNjYWxlYiAgICAgICAgIDc1ICAgLTIgIC0+IDAuNzUKK2Rkc2NiMDU0IHNjYWxlYiAgICAgICAgLTc1ICAgLTIgIC0+IC0wLjc1CitkZHNjYjA1NSBzY2FsZWIgICAgICAgNy41MCAgIC0yICAtPiAwLjA3NTAKK2Rkc2NiMDU2IHNjYWxlYiAgICAgIC03LjUwICAgLTIgIC0+IC0wLjA3NTAKK2Rkc2NiMDU3IHNjYWxlYiAgICAgICA3LjUwMCAgLTIgIC0+IDAuMDc1MDAKK2Rkc2NiMDU4IHNjYWxlYiAgICAgIC03LjUwMCAgLTIgIC0+IC0wLjA3NTAwCitkZHNjYjA2MSBzY2FsZWIgICAgICAgICAgNyAgIC0xICAtPiAwLjcKK2Rkc2NiMDYyIHNjYWxlYiAgICAgICAgIC03ICAgLTEgIC0+IC0wLjcKK2Rkc2NiMDYzIHNjYWxlYiAgICAgICAgIDc1ICAgLTEgIC0+IDcuNQorZGRzY2IwNjQgc2NhbGViICAgICAgICAtNzUgICAtMSAgLT4gLTcuNQorZGRzY2IwNjUgc2NhbGViICAgICAgIDcuNTAgICAtMSAgLT4gMC43NTAKK2Rkc2NiMDY2IHNjYWxlYiAgICAgIC03LjUwICAgLTEgIC0+IC0wLjc1MAorZGRzY2IwNjcgc2NhbGViICAgICAgIDcuNTAwICAtMSAgLT4gMC43NTAwCitkZHNjYjA2OCBzY2FsZWIgICAgICAtNy41MDAgIC0xICAtPiAtMC43NTAwCitkZHNjYjA3MSBzY2FsZWIgICAgICAgICAgNyAgICAwICAtPiA3CitkZHNjYjA3MiBzY2FsZWIgICAgICAgICAtNyAgICAwICAtPiAtNworZGRzY2IwNzMgc2NhbGViICAgICAgICAgNzUgICAgMCAgLT4gNzUKK2Rkc2NiMDc0IHNjYWxlYiAgICAgICAgLTc1ICAgIDAgIC0+IC03NQorZGRzY2IwNzUgc2NhbGViICAgICAgIDcuNTAgICAgMCAgLT4gNy41MAorZGRzY2IwNzYgc2NhbGViICAgICAgLTcuNTAgICAgMCAgLT4gLTcuNTAKK2Rkc2NiMDc3IHNjYWxlYiAgICAgICA3LjUwMCAgIDAgIC0+IDcuNTAwCitkZHNjYjA3OCBzY2FsZWIgICAgICAtNy41MDAgICAwICAtPiAtNy41MDAKK2Rkc2NiMDgxIHNjYWxlYiAgICAgICAgICA3ICAgIDEgIC0+IDdFKzEKK2Rkc2NiMDgyIHNjYWxlYiAgICAgICAgIC03ICAgIDEgIC0+IC03RSsxCitkZHNjYjA4MyBzY2FsZWIgICAgICAgICA3NSAgICAxICAtPiA3LjVFKzIKK2Rkc2NiMDg0IHNjYWxlYiAgICAgICAgLTc1ICAgIDEgIC0+IC03LjVFKzIKK2Rkc2NiMDg1IHNjYWxlYiAgICAgICA3LjUwICAgIDEgIC0+IDc1LjAKK2Rkc2NiMDg2IHNjYWxlYiAgICAgIC03LjUwICAgIDEgIC0+IC03NS4wCitkZHNjYjA4NyBzY2FsZWIgICAgICAgNy41MDAgICAxICAtPiA3NS4wMAorZGRzY2IwODggc2NhbGViICAgICAgLTcuNTAwICAgMSAgLT4gLTc1LjAwCitkZHNjYjA5MSBzY2FsZWIgICAgICAgICAgNyAgICAyICAtPiA3RSsyCitkZHNjYjA5MiBzY2FsZWIgICAgICAgICAtNyAgICAyICAtPiAtN0UrMgorZGRzY2IwOTMgc2NhbGViICAgICAgICAgNzUgICAgMiAgLT4gNy41RSszCitkZHNjYjA5NCBzY2FsZWIgICAgICAgIC03NSAgICAyICAtPiAtNy41RSszCitkZHNjYjA5NSBzY2FsZWIgICAgICAgNy41MCAgICAyICAtPiA3NTAKK2Rkc2NiMDk2IHNjYWxlYiAgICAgIC03LjUwICAgIDIgIC0+IC03NTAKK2Rkc2NiMDk3IHNjYWxlYiAgICAgICA3LjUwMCAgIDIgIC0+IDc1MC4wCitkZHNjYjA5OCBzY2FsZWIgICAgICAtNy41MDAgICAyICAtPiAtNzUwLjAKKworLS0gemVyb3MKK2Rkc2NiMTExIHNjYWxlYiAgICAgICAgICAwICAxIC0+IDBFKzEKK2Rkc2NiMTEyIHNjYWxlYiAgICAgICAgIC0wICAyIC0+IC0wRSsyCitkZHNjYjExMyBzY2FsZWIgICAgICAgMEUrNCAgMyAtPiAwRSs3CitkZHNjYjExNCBzY2FsZWIgICAgICAtMEUrNCAgNCAtPiAtMEUrOAorZGRzY2IxMTUgc2NhbGViICAgICAwLjAwMDAgIDUgLT4gMEUrMQorZGRzY2IxMTYgc2NhbGViICAgIC0wLjAwMDAgIDYgLT4gLTBFKzIKK2Rkc2NiMTE3IHNjYWxlYiAgICAgIDBFLTE0MSA3IC0+IDBFLTEzNAorZGRzY2IxMTggc2NhbGViICAgICAtMEUtMTQxIDggLT4gLTBFLTEzMworCistLSBObWF4LCBObWluLCBOdGlueQorZGRzY2IxMzIgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICArMzg0IC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxMzMgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICArMTAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxMzQgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxMzUgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgMCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRzY2IxMzYgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4MworZGRzY2IxMzcgc2NhbGViICAxRS0zODMgICAgICAgICAgICsxICAtPiAxRS0zODIKK2Rkc2NiMTM4IHNjYWxlYiAgMUUtMzgzICAgICAgICAgICAtMCAgLT4gMUUtMzgzCitkZHNjYjEzOSBzY2FsZWIgIDFFLTM4MyAgICAgICAgICAgLTEgIC0+IDFFLTM4NCAgICAgICAgICBTdWJub3JtYWwKK2Rkc2NiMTQwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgKzEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODIKK2Rkc2NiMTQxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2Rkc2NiMTQyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IxNDMgc2NhbGViICAxRS0zOTggICAgICAgICAgKzEgIC0+IDFFLTM5NyAgICAgICAgICBTdWJub3JtYWwKK2Rkc2NiMTQ0IHNjYWxlYiAgMUUtMzk4ICAgICAgICAgIC0wICAtPiAxRS0zOTggICAgICAgICBTdWJub3JtYWwKK2Rkc2NiMTQ1IHNjYWxlYiAgMUUtMzk4ICAgICAgICAgIC0xICAtPiAwRS0zOTggICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2Rkc2NiMTUwIHNjYWxlYiAgLTFFLTM5OCAgICAgICAgICsxICAtPiAtMUUtMzk3ICAgICAgICAgU3Vibm9ybWFsCitkZHNjYjE1MSBzY2FsZWIgIC0xRS0zOTggICAgICAgICAtMCAgLT4gLTFFLTM5OCAgICAgICAgU3Vibm9ybWFsCitkZHNjYjE1MiBzY2FsZWIgIC0xRS0zOTggICAgICAgICAtMSAgLT4gLTBFLTM5OCAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRzY2IxNTMgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyArMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODIKK2Rkc2NiMTU0IHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgKzAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHNjYjE1NSBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjE1NiBzY2FsZWIgIC0xRS0zODMgICAgICAgICAgKzEgIC0+IC0xRS0zODIKK2Rkc2NiMTU3IHNjYWxlYiAgLTFFLTM4MyAgICAgICAgICAtMCAgLT4gLTFFLTM4MworZGRzY2IxNTggc2NhbGViICAtMUUtMzgzICAgICAgICAgIC0xICAtPiAtMUUtMzg0ICAgICAgICAgIFN1Ym5vcm1hbAorZGRzY2IxNTkgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTYwIHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgKzAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHNjYjE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4MworZGRzY2IxNjIgc2NhbGViICAtOUUrMzg0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxNjMgc2NhbGViICAtMUUrMzg0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIE9yaWdhbWkKKy0tICh0aGVzZSBjaGVjayB0aGF0IG92ZXJmbG93IGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5KQorZGRzY2IxNzEgc2NhbGViICAgMTAwMEUrMzY1ICArMSAtPiAxLjAwMEUrMzY5CitkZHNjYjE3MiBzY2FsZWIgICAxMDAwRSszNjYgICsxIC0+IDEuMDAwRSszNzAKK2Rkc2NiMTczIHNjYWxlYiAgIDEwMDBFKzM2NyAgKzEgLT4gMS4wMDBFKzM3MQorZGRzY2IxNzQgc2NhbGViICAgMTAwMEUrMzY4ICArMSAtPiAxLjAwMEUrMzcyCitkZHNjYjE3NSBzY2FsZWIgICAxMDAwRSszNjkgICsxIC0+IDEuMDAwMEUrMzczICAgICAgICAgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxNzYgc2NhbGViICAgMTAwMEUrMzcwICArMSAtPiAxLjAwMDAwRSszNzQgICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTc3IHNjYWxlYiAgIDEwMDBFKzM3MSAgKzEgLT4gMS4wMDAwMDBFKzM3NSAgICAgICAgICAgICAgICBDbGFtcGVkCitkZHNjYjE3OCBzY2FsZWIgICAxMDAwRSszNzIgICsxIC0+IDEuMDAwMDAwMEUrMzc2ICAgICAgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxNzkgc2NhbGViICAgMTAwMEUrMzczICArMSAtPiAxLjAwMDAwMDAwRSszNzcgICAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTgwIHNjYWxlYiAgIDEwMDBFKzM3NCAgKzEgLT4gMS4wMDAwMDAwMDBFKzM3OCAgICAgICAgICAgICBDbGFtcGVkCitkZHNjYjE4MSBzY2FsZWIgICAxMDAwRSszNzUgICsxIC0+IDEuMDAwMDAwMDAwMEUrMzc5ICAgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxODIgc2NhbGViICAgMTAwMEUrMzc2ICArMSAtPiAxLjAwMDAwMDAwMDAwRSszODAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTgzIHNjYWxlYiAgIDEwMDBFKzM3NyAgKzEgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSAgICAgICAgICBDbGFtcGVkCitkZHNjYjE4NCBzY2FsZWIgICAxMDAwRSszNzggICsxIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyICAgICAgICAgQ2xhbXBlZAorZGRzY2IxODUgc2NhbGViICAgMTAwMEUrMzc5ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMgICAgICAgIENsYW1wZWQKK2Rkc2NiMTg2IHNjYWxlYiAgIDEwMDBFKzM4MCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgICAgICBDbGFtcGVkCitkZHNjYjE4NyBzY2FsZWIgICAxMDAwRSszODEgICsxIC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgYSBmZXcgbW9yZSBzdWJub3JtYWwgdHJ1bmNhdGlvbnMKKy0tICh0aGVzZSBjaGVjayB0aGF0IHVuZGVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkKK2Rkc2NiMjAxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2Rkc2NiMjAyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMDMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMiAgLT4gMS4wMDAwMDAwMDAwMDAwRS0zODUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTMgIC0+IDEuMDAwMDAwMDAwMDAwRS0zODYgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTQgIC0+IDEuMDAwMDAwMDAwMDBFLTM4NyBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMDYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtNSAgLT4gMS4wMDAwMDAwMDAwRS0zODggU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTYgIC0+IDEuMDAwMDAwMDAwRS0zODkgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTcgIC0+IDEuMDAwMDAwMDBFLTM5MCBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMDkgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtOCAgLT4gMS4wMDAwMDAwRS0zOTEgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjEwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTkgIC0+IDEuMDAwMDAwRS0zOTIgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjExIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEwIC0+IDEuMDAwMDBFLTM5MyBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMTIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTEgLT4gMS4wMDAwRS0zOTQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjEzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEyIC0+IDEuMDAwRS0zOTUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjE0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEzIC0+IDEuMDBFLTM5NiBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMTUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTQgLT4gMS4wRS0zOTcgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjE2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE1IC0+IDFFLTM5OCBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMTcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTYgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rkc2NiMjE4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE3IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNoaWZ0LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTaGlmdC5kZWNUZXN0CmluZGV4IGVjNDcyNDAuLmY2MmEyMzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNoaWZ0LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2hpZnQuZGVjVGVzdApAQCAtMSwyNjIgKzEsMjYyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFNoaWZ0LmRlY1Rlc3QgLS0gc2hpZnQgZGVjRG91YmxlIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1kZHNoaTAwMSBzaGlmdCAgICAgICAgICAgICAgICAgMCAgICAwICAtPiAgMA0KLWRkc2hpMDAyIHNoaWZ0ICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwDQotZGRzaGkwMDMgc2hpZnQgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMA0KLWRkc2hpMDA0IHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgMTUgIC0+ICAxMDAwMDAwMDAwMDAwMDAwDQotZGRzaGkwMDUgc2hpZnQgICAgICAgICAgICAgICAgIDEgICAxNiAgLT4gIDANCi1kZHNoaTAwNiBzaGlmdCAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMA0KLWRkc2hpMDA3IHNoaWZ0ICAgICAgICAgICAgICAgICAwICAgLTIgIC0+ICAwDQotZGRzaGkwMDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMSAgLT4gIDEyMzQ1Njc4OTAxMjM0NQ0KLWRkc2hpMDA5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+ICAxDQotZGRzaGkwMTAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDANCi1kZHNoaTAxMSBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgOQ0KLWRkc2hpMDEyIHNoaWZ0ICA5OTM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+ICAwDQotDQotLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcg0KLWRkc2hpMDE1IHNoaWZ0ICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTAxNiBzaGlmdCAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGkwMTcgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpMDE4IHNoaWZ0ICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTAxOSBzaGlmdCAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGkwMjAgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpMDIxIHNoaWZ0ICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTAyMiBzaGlmdCAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbg0KLWRkc2hpMDI1IHNoaWZ0ICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTAyNiBzaGlmdCAgICAgICAgMSAgICAtMTcgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGkwMjcgc2hpZnQgICAgICAgIDEgICAgIDE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpMDI4IHNoaWZ0ICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4NCi1kZHNoaTAzMCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNiAgLT4gMA0KLWRkc2hpMDMxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE1ICAtPiAxDQotZGRzaGkwMzIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTQgIC0+IDEyDQotZGRzaGkwMzMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTMgIC0+IDEyMw0KLWRkc2hpMDM0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEyICAtPiAxMjM0DQotZGRzaGkwMzUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTEgIC0+IDEyMzQ1DQotZGRzaGkwMzYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTAgIC0+IDEyMzQ1Ng0KLWRkc2hpMDM3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTkgICAtPiAxMjM0NTY3DQotZGRzaGkwMzggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtOCAgIC0+IDEyMzQ1Njc4DQotZGRzaGkwMzkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNyAgIC0+IDEyMzQ1Njc4OQ0KLWRkc2hpMDQwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTYgICAtPiAxMjM0NTY3ODkwDQotZGRzaGkwNDEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNSAgIC0+IDEyMzQ1Njc4OTAxDQotZGRzaGkwNDIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNCAgIC0+IDEyMzQ1Njc4OTAxMg0KLWRkc2hpMDQzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTMgICAtPiAxMjM0NTY3ODkwMTIzDQotZGRzaGkwNDQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMiAgIC0+IDEyMzQ1Njc4OTAxMjM0DQotZGRzaGkwNDUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMSAgIC0+IDEyMzQ1Njc4OTAxMjM0NQ0KLWRkc2hpMDQ2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2DQotDQotZGRzaGkwNDcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kZHNoaTA0OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwMTIzNDU2MA0KLWRkc2hpMDQ5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1NjAwDQotZGRzaGkwNTAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMyAgIC0+IDQ1Njc4OTAxMjM0NTYwMDANCi1kZHNoaTA1MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs0ICAgLT4gNTY3ODkwMTIzNDU2MDAwMA0KLWRkc2hpMDUyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1NjAwMDAwDQotZGRzaGkwNTMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNiAgIC0+IDc4OTAxMjM0NTYwMDAwMDANCi1kZHNoaTA1NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs3ICAgLT4gODkwMTIzNDU2MDAwMDAwMA0KLWRkc2hpMDU1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzggICAtPiA5MDEyMzQ1NjAwMDAwMDAwDQotZGRzaGkwNTYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArOSAgIC0+ICAxMjM0NTYwMDAwMDAwMDANCi1kZHNoaTA1NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMCAgLT4gMTIzNDU2MDAwMDAwMDAwMA0KLWRkc2hpMDU4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzExICAtPiAyMzQ1NjAwMDAwMDAwMDAwDQotZGRzaGkwNTkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTIgIC0+IDM0NTYwMDAwMDAwMDAwMDANCi1kZHNoaTA2MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMyAgLT4gNDU2MDAwMDAwMDAwMDAwMA0KLWRkc2hpMDYxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE0ICAtPiA1NjAwMDAwMDAwMDAwMDAwDQotZGRzaGkwNjIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTUgIC0+IDYwMDAwMDAwMDAwMDAwMDANCi1kZHNoaTA2MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNiAgLT4gMA0KLQ0KLS0tIHplcm9zDQotZGRzaGkwNzAgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTANCi1kZHNoaTA3MSBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMA0KLWRkc2hpMDcyIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgIDAuMDAwDQotZGRzaGkwNzMgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDANCi1kZHNoaTA3NCBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMA0KLWRkc2hpMDc1IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFKzEwDQotZGRzaGkwNzYgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTANCi1kZHNoaTA3NyBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMA0KLWRkc2hpMDc4IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgLTAuMDAwDQotZGRzaGkwNzkgc2hpZnQgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDANCi1kZHNoaTA4MCBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMA0KLWRkc2hpMDgxIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFKzEwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kZHNoaTE0MSBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTlFKzM4Mw0KLWRkc2hpMTQyIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gOUUrMzY5DQotZGRzaGkxNDMgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5MEUrMzg0DQotZGRzaGkxNDQgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxNSAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0DQotZGRzaGkxNDUgc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAwRS0zODMNCi1kZHNoaTE0NiBzaGlmdCAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDBFLTM4Mw0KLWRkc2hpMTQ3IHNoaWZ0ICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS0zODINCi1kZHNoaTE0OCBzaGlmdCAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zNjgNCi1kZHNoaTE1MSBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NA0KLWRkc2hpMTUyIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gMUUtMzk4DQotZGRzaGkxNTMgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAwRS0zOTgNCi1kZHNoaTE1NCBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDBFLTM5OA0KLWRkc2hpMTU1IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0DQotZGRzaGkxNTYgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiA5RS0zOTgNCi1kZHNoaTE1NyBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IDBFLTM5OA0KLWRkc2hpMTU4IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gMEUtMzk4DQotZGRzaGkxNjAgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAwRS0zOTgNCi1kZHNoaTE2MSBzaGlmdCAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDBFLTM5OA0KLWRkc2hpMTYyIHNoaWZ0ICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS0zOTcNCi1kZHNoaTE2MyBzaGlmdCAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi0tLSAgbmVnYXRpdmVzDQotZGRzaGkxNzEgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OUUrMzgzDQotZGRzaGkxNzIgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiAtOUUrMzY5DQotZGRzaGkxNzMgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NA0KLWRkc2hpMTc0IHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTUgLT4gLTkuMDAwMDAwMDAwMDAwMDAwRSszODQNCi1kZHNoaTE3NSBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0wRS0zODMNCi1kZHNoaTE3NiBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0wRS0zODMNCi1kZHNoaTE3NyBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTM4Mg0KLWRkc2hpMTc4IHNoaWZ0IC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAgMTUgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zNjgNCi1kZHNoaTE4MSBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHNoaTE4MiBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IC0xRS0zOTgNCi1kZHNoaTE4MyBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IC0wRS0zOTgNCi1kZHNoaTE4NCBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC0wRS0zOTgNCi1kZHNoaTE4NSBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC05LjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHNoaTE4NiBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IC05RS0zOTgNCi1kZHNoaTE4NyBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IC0wRS0zOTgNCi1kZHNoaTE4OCBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC0wRS0zOTgNCi1kZHNoaTE5MCBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0wRS0zOTgNCi1kZHNoaTE5MSBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0wRS0zOTgNCi1kZHNoaTE5MiBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTM5Nw0KLWRkc2hpMTkzIHNoaWZ0IC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAgMTUgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi0NCi0tLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpDQotZGRzaGkyMDEgc2hpZnQgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTANCi1kZHNoaTIwMiBzaGlmdCAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMA0KLWRkc2hpMjAzIHNoaWZ0ICAgICAgICAgICAgICAgIC0xICAgIDIgIC0+IC0xMDANCi1kZHNoaTIwNCBzaGlmdCAgICAgICAgICAgICAgICAtMSAgIDE1ICAtPiAtMTAwMDAwMDAwMDAwMDAwMA0KLWRkc2hpMjA1IHNoaWZ0ICAgICAgICAgICAgICAgIC0xICAgMTYgIC0+IC0wDQotZGRzaGkyMDYgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAtMSAgLT4gLTANCi1kZHNoaTIwNyBzaGlmdCAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMA0KLWRkc2hpMjA4IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+IC0xMjM0NTY3ODkwMTIzNDUNCi1kZHNoaTIwOSBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAtMQ0KLWRkc2hpMjEwIHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC0wDQotZGRzaGkyMTEgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTkNCi1kZHNoaTIxMiBzaGlmdCAtOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtMA0KLQ0KLQ0KLS0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsDQotZGRzaGk3ODEgc2hpZnQgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQ0KLWRkc2hpNzgyIHNoaWZ0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kZHNoaTc4MyBzaGlmdCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZGRzaGk3ODQgc2hpZnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLWRkc2hpNzg1IHNoaWZ0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kZHNoaTc4NiBzaGlmdCAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5DQotZGRzaGk3ODcgc2hpZnQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpNzg4IHNoaWZ0IC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTc4OSBzaGlmdCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk3OTAgc2hpZnQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpNzkxIHNoaWZ0ICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTc5MiBzaGlmdCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk3OTMgc2hpZnQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpNzk0IHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZHNoaTgwMCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4MDEgc2hpZnQgIEluZiAgLTggICAgIC0+IEluZmluaXR5DQotZGRzaGk4MDIgc2hpZnQgIEluZiAgLTEgICAgIC0+IEluZmluaXR5DQotZGRzaGk4MDMgc2hpZnQgIEluZiAgLTAgICAgIC0+IEluZmluaXR5DQotZGRzaGk4MDQgc2hpZnQgIEluZiAgIDAgICAgIC0+IEluZmluaXR5DQotZGRzaGk4MDUgc2hpZnQgIEluZiAgIDEgICAgIC0+IEluZmluaXR5DQotZGRzaGk4MDYgc2hpZnQgIEluZiAgIDggICAgIC0+IEluZmluaXR5DQotZGRzaGk4MDcgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODA4IHNoaWZ0IC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTgwOSBzaGlmdCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4MTAgc2hpZnQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODExIHNoaWZ0IC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTgxMiBzaGlmdCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4MTMgc2hpZnQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODE0IHNoaWZ0ICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTgxNSBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRzaGk4MjEgc2hpZnQgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kZHNoaTgyMiBzaGlmdCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRkc2hpODIzIHNoaWZ0ICBOYU4gLTEgICAgICAtPiAgTmFODQotZGRzaGk4MjQgc2hpZnQgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kZHNoaTgyNSBzaGlmdCAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRkc2hpODI2IHNoaWZ0ICBOYU4gIDEgICAgICAtPiAgTmFODQotZGRzaGk4Mjcgc2hpZnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kZHNoaTgyOCBzaGlmdCAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRkc2hpODI5IHNoaWZ0ICBOYU4gIE5hTiAgICAtPiAgTmFODQotZGRzaGk4MzAgc2hpZnQgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kZHNoaTgzMSBzaGlmdCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkc2hpODMyIHNoaWZ0IC0xICAgIE5hTiAgICAtPiAgTmFODQotZGRzaGk4MzMgc2hpZnQgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kZHNoaTgzNCBzaGlmdCAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkc2hpODM1IHNoaWZ0ICAxICAgIE5hTiAgICAtPiAgTmFODQotZGRzaGk4MzYgc2hpZnQgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZHNoaTgzNyBzaGlmdCAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRkc2hpODQxIHNoaWZ0ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODQyIHNoaWZ0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODQzIHNoaWZ0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODQ0IHNoaWZ0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODQ1IHNoaWZ0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODQ2IHNoaWZ0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODQ3IHNoaWZ0ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODQ4IHNoaWZ0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODQ5IHNoaWZ0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODUwIHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODUxIHNoaWZ0IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODUyIHNoaWZ0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODUzIHNoaWZ0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODU0IHNoaWZ0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODU1IHNoaWZ0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODU2IHNoaWZ0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODU3IHNoaWZ0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODU4IHNoaWZ0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODU5IHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZHNoaTg2MSBzaGlmdCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCi1kZHNoaTg2MiBzaGlmdCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCi1kZHNoaTg2MyBzaGlmdCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1kZHNoaTg2NCBzaGlmdCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCi1kZHNoaTg2NSBzaGlmdCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCi1kZHNoaTg2NiBzaGlmdCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1kZHNoaTg2NyBzaGlmdCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCi1kZHNoaTg2OCBzaGlmdCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCi1kZHNoaTg2OSBzaGlmdCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZGRzaGk4NzEgc2hpZnQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg3MiBzaGlmdCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODczIHNoaWZ0ICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4NzQgc2hpZnQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg3NSBzaGlmdCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODc2IHNoaWZ0ICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4Nzcgc2hpZnQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg3OCBzaGlmdCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODc5IHNoaWZ0ICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4ODAgc2hpZnQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg4MSBzaGlmdCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODgyIHNoaWZ0IC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1kZHNoaTg4MyBzaGlmdCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODg0IHNoaWZ0ICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCi1kZHNoaTg4NSBzaGlmdCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRTaGlmdC5kZWNUZXN0IC0tIHNoaWZ0IGRlY0RvdWJsZSBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkZHNoaTAwMSBzaGlmdCAgICAgICAgICAgICAgICAgMCAgICAwICAtPiAgMAorZGRzaGkwMDIgc2hpZnQgICAgICAgICAgICAgICAgIDAgICAgMiAgLT4gIDAKK2Rkc2hpMDAzIHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgIDIgIC0+ICAxMDAKK2Rkc2hpMDA0IHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgMTUgIC0+ICAxMDAwMDAwMDAwMDAwMDAwCitkZHNoaTAwNSBzaGlmdCAgICAgICAgICAgICAgICAgMSAgIDE2ICAtPiAgMAorZGRzaGkwMDYgc2hpZnQgICAgICAgICAgICAgICAgIDEgICAtMSAgLT4gIDAKK2Rkc2hpMDA3IHNoaWZ0ICAgICAgICAgICAgICAgICAwICAgLTIgIC0+ICAwCitkZHNoaTAwOCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xICAtPiAgMTIzNDU2Nzg5MDEyMzQ1CitkZHNoaTAwOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgMQorZGRzaGkwMTAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDAKK2Rkc2hpMDExIHNoaWZ0ICA5OTM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+ICA5CitkZHNoaTAxMiBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgMAorCistLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyCitkZHNoaTAxNSBzaGlmdCAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTAxNiBzaGlmdCAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTAxNyBzaGlmdCAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTAxOCBzaGlmdCAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTAxOSBzaGlmdCAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTAyMCBzaGlmdCAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTAyMSBzaGlmdCAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTAyMiBzaGlmdCAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCitkZHNoaTAyNSBzaGlmdCAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTAyNiBzaGlmdCAgICAgICAgMSAgICAtMTcgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTAyNyBzaGlmdCAgICAgICAgMSAgICAgMTcgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTAyOCBzaGlmdCAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZ1bGwgc2hpZnRpbmcgcGF0dGVybgorZGRzaGkwMzAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTYgIC0+IDAKK2Rkc2hpMDMxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE1ICAtPiAxCitkZHNoaTAzMiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNCAgLT4gMTIKK2Rkc2hpMDMzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEzICAtPiAxMjMKK2Rkc2hpMDM0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEyICAtPiAxMjM0CitkZHNoaTAzNSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMSAgLT4gMTIzNDUKK2Rkc2hpMDM2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEwICAtPiAxMjM0NTYKK2Rkc2hpMDM3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTkgICAtPiAxMjM0NTY3CitkZHNoaTAzOCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC04ICAgLT4gMTIzNDU2NzgKK2Rkc2hpMDM5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTcgICAtPiAxMjM0NTY3ODkKK2Rkc2hpMDQwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTYgICAtPiAxMjM0NTY3ODkwCitkZHNoaTA0MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC01ICAgLT4gMTIzNDU2Nzg5MDEKK2Rkc2hpMDQyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTQgICAtPiAxMjM0NTY3ODkwMTIKK2Rkc2hpMDQzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTMgICAtPiAxMjM0NTY3ODkwMTIzCitkZHNoaTA0NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0yICAgLT4gMTIzNDU2Nzg5MDEyMzQKK2Rkc2hpMDQ1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEgICAtPiAxMjM0NTY3ODkwMTIzNDUKK2Rkc2hpMDQ2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2CisKK2Rkc2hpMDQ3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZHNoaTA0OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwMTIzNDU2MAorZGRzaGkwNDkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMiAgIC0+IDM0NTY3ODkwMTIzNDU2MDAKK2Rkc2hpMDUwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2MDAwCitkZHNoaTA1MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs0ICAgLT4gNTY3ODkwMTIzNDU2MDAwMAorZGRzaGkwNTIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNSAgIC0+IDY3ODkwMTIzNDU2MDAwMDAKK2Rkc2hpMDUzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2MDAwMDAwCitkZHNoaTA1NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs3ICAgLT4gODkwMTIzNDU2MDAwMDAwMAorZGRzaGkwNTUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArOCAgIC0+IDkwMTIzNDU2MDAwMDAwMDAKK2Rkc2hpMDU2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzkgICAtPiAgMTIzNDU2MDAwMDAwMDAwCitkZHNoaTA1NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMCAgLT4gMTIzNDU2MDAwMDAwMDAwMAorZGRzaGkwNTggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTEgIC0+IDIzNDU2MDAwMDAwMDAwMDAKK2Rkc2hpMDU5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEyICAtPiAzNDU2MDAwMDAwMDAwMDAwCitkZHNoaTA2MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMyAgLT4gNDU2MDAwMDAwMDAwMDAwMAorZGRzaGkwNjEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTQgIC0+IDU2MDAwMDAwMDAwMDAwMDAKK2Rkc2hpMDYyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE1ICAtPiA2MDAwMDAwMDAwMDAwMDAwCitkZHNoaTA2MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNiAgLT4gMAorCistLSB6ZXJvcworZGRzaGkwNzAgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTAKK2Rkc2hpMDcxIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFLTEwCitkZHNoaTA3MiBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMAorZGRzaGkwNzMgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDAKK2Rkc2hpMDc0IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFKzEwCitkZHNoaTA3NSBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMAorZGRzaGkwNzYgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTAKK2Rkc2hpMDc3IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFLTEwCitkZHNoaTA3OCBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMAorZGRzaGkwNzkgc2hpZnQgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDAKK2Rkc2hpMDgwIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFKzEwCitkZHNoaTA4MSBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMAorCistLSBObWF4LCBObWluLCBOdGlueQorZGRzaGkxNDEgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5RSszODMKK2Rkc2hpMTQyIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gOUUrMzY5CitkZHNoaTE0MyBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDEgIC0+IDkuOTk5OTk5OTk5OTk5OTkwRSszODQKK2Rkc2hpMTQ0IHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTUgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NAorZGRzaGkxNDUgc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAwRS0zODMKK2Rkc2hpMTQ2IHNoaWZ0ICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMTUgLT4gMEUtMzgzCitkZHNoaTE0NyBzaGlmdCAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMzgyCitkZHNoaTE0OCBzaGlmdCAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zNjgKK2Rkc2hpMTUxIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHNoaTE1MiBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IDFFLTM5OAorZGRzaGkxNTMgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAwRS0zOTgKK2Rkc2hpMTU0IHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gMEUtMzk4CitkZHNoaTE1NSBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRzaGkxNTYgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiA5RS0zOTgKK2Rkc2hpMTU3IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gMEUtMzk4CitkZHNoaTE1OCBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDBFLTM5OAorZGRzaGkxNjAgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAwRS0zOTgKK2Rkc2hpMTYxIHNoaWZ0ICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMTUgLT4gMEUtMzk4CitkZHNoaTE2MiBzaGlmdCAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMzk3CitkZHNoaTE2MyBzaGlmdCAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKKy0tICBuZWdhdGl2ZXMKK2Rkc2hpMTcxIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFKzM4MworZGRzaGkxNzIgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiAtOUUrMzY5CitkZHNoaTE3MyBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0CitkZHNoaTE3NCBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IC05LjAwMDAwMDAwMDAwMDAwMEUrMzg0CitkZHNoaTE3NSBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0wRS0zODMKK2Rkc2hpMTc2IHNoaWZ0IC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMTUgLT4gLTBFLTM4MworZGRzaGkxNzcgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zODIKK2Rkc2hpMTc4IHNoaWZ0IC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAgMTUgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zNjgKK2Rkc2hpMTgxIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRzaGkxODIgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtMUUtMzk4CitkZHNoaTE4MyBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IC0wRS0zOTgKK2Rkc2hpMTg0IHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gLTBFLTM5OAorZGRzaGkxODUgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHNoaTE4NiBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IC05RS0zOTgKK2Rkc2hpMTg3IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gLTBFLTM5OAorZGRzaGkxODggc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtMEUtMzk4CitkZHNoaTE5MCBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0wRS0zOTgKK2Rkc2hpMTkxIHNoaWZ0IC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMTUgLT4gLTBFLTM5OAorZGRzaGkxOTIgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zOTcKK2Rkc2hpMTkzIHNoaWZ0IC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAgMTUgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKKworLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQorZGRzaGkyMDEgc2hpZnQgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTAKK2Rkc2hpMjAyIHNoaWZ0ICAgICAgICAgICAgICAgIC0wICAgIDIgIC0+IC0wCitkZHNoaTIwMyBzaGlmdCAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwCitkZHNoaTIwNCBzaGlmdCAgICAgICAgICAgICAgICAtMSAgIDE1ICAtPiAtMTAwMDAwMDAwMDAwMDAwMAorZGRzaGkyMDUgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAxNiAgLT4gLTAKK2Rkc2hpMjA2IHNoaWZ0ICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0wCitkZHNoaTIwNyBzaGlmdCAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMAorZGRzaGkyMDggc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTYgICAtMSAgLT4gLTEyMzQ1Njc4OTAxMjM0NQorZGRzaGkyMDkgc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTEKK2Rkc2hpMjEwIHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC0wCitkZHNoaTIxMSBzaGlmdCAtOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAtOQorZGRzaGkyMTIgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gLTAKKworCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAorZGRzaGk3ODEgc2hpZnQgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQorZGRzaGk3ODIgc2hpZnQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRzaGk3ODMgc2hpZnQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRzaGk3ODQgc2hpZnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGRzaGk3ODUgc2hpZnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRzaGk3ODYgc2hpZnQgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQorZGRzaGk3ODcgc2hpZnQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk3ODggc2hpZnQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk3ODkgc2hpZnQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk3OTAgc2hpZnQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk3OTEgc2hpZnQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk3OTIgc2hpZnQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk3OTMgc2hpZnQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk3OTQgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHNoaTgwMCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTgwMSBzaGlmdCAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKK2Rkc2hpODAyIHNoaWZ0ICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQorZGRzaGk4MDMgc2hpZnQgIEluZiAgLTAgICAgIC0+IEluZmluaXR5CitkZHNoaTgwNCBzaGlmdCAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKK2Rkc2hpODA1IHNoaWZ0ICBJbmYgICAxICAgICAtPiBJbmZpbml0eQorZGRzaGk4MDYgc2hpZnQgIEluZiAgIDggICAgIC0+IEluZmluaXR5CitkZHNoaTgwNyBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTgwOCBzaGlmdCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTgwOSBzaGlmdCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTgxMCBzaGlmdCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTgxMSBzaGlmdCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTgxMiBzaGlmdCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTgxMyBzaGlmdCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTgxNCBzaGlmdCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTgxNSBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkc2hpODIxIHNoaWZ0ICBOYU4gLUluZiAgICAtPiAgTmFOCitkZHNoaTgyMiBzaGlmdCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRzaGk4MjMgc2hpZnQgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2Rkc2hpODI0IHNoaWZ0ICBOYU4gLTAgICAgICAtPiAgTmFOCitkZHNoaTgyNSBzaGlmdCAgTmFOICAwICAgICAgLT4gIE5hTgorZGRzaGk4MjYgc2hpZnQgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2Rkc2hpODI3IHNoaWZ0ICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZHNoaTgyOCBzaGlmdCAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRzaGk4Mjkgc2hpZnQgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2Rkc2hpODMwIHNoaWZ0IC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzMSBzaGlmdCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRzaGk4MzIgc2hpZnQgLTEgICAgTmFOICAgIC0+ICBOYU4KK2Rkc2hpODMzIHNoaWZ0IC0wICAgIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzNCBzaGlmdCAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRzaGk4MzUgc2hpZnQgIDEgICAgTmFOICAgIC0+ICBOYU4KK2Rkc2hpODM2IHNoaWZ0ICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzNyBzaGlmdCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZHNoaTg0MSBzaGlmdCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQyIHNoaWZ0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NDMgc2hpZnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0NCBzaGlmdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQ1IHNoaWZ0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NDYgc2hpZnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0NyBzaGlmdCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQ4IHNoaWZ0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NDkgc2hpZnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1MCBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODUxIHNoaWZ0IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTIgc2hpZnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1MyBzaGlmdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODU0IHNoaWZ0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTUgc2hpZnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1NiBzaGlmdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODU3IHNoaWZ0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTggc2hpZnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1OSBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRzaGk4NjEgc2hpZnQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkZHNoaTg2MiBzaGlmdCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2Rkc2hpODYzIHNoaWZ0ICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZGRzaGk4NjQgc2hpZnQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkZHNoaTg2NSBzaGlmdCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2Rkc2hpODY2IHNoaWZ0IC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZGRzaGk4Njcgc2hpZnQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkZHNoaTg2OCBzaGlmdCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2Rkc2hpODY5IHNoaWZ0ICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2Rkc2hpODcxIHNoaWZ0ICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg3MiBzaGlmdCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NzMgc2hpZnQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODc0IHNoaWZ0ICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg3NSBzaGlmdCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NzYgc2hpZnQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODc3IHNoaWZ0IC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg3OCBzaGlmdCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4Nzkgc2hpZnQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODgwIHNoaWZ0ICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg4MSBzaGlmdCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4ODIgc2hpZnQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZGRzaGk4ODMgc2hpZnQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODg0IHNoaWZ0ICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2Rkc2hpODg1IHNoaWZ0ICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTdWJ0cmFjdC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU3VidHJhY3QuZGVjVGVzdAppbmRleCAxNWQ0Nzc3Li41ZWJjNDg3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTdWJ0cmFjdC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFN1YnRyYWN0LmRlY1Rlc3QKQEAgLTEsNjI5ICsxLDYyOSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRTdWJ0cmFjdC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjRG91YmxlcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQ0KLS0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNEb3VibGUNCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQ0KLWRkc3ViMDAxIHN1YnRyYWN0ICAwICAgMCAgLT4gJzAnDQotZGRzdWIwMDIgc3VidHJhY3QgIDEgICAxICAtPiAnMCcNCi1kZHN1YjAwMyBzdWJ0cmFjdCAgMSAgIDIgIC0+ICctMScNCi1kZHN1YjAwNCBzdWJ0cmFjdCAgMiAgIDEgIC0+ICcxJw0KLWRkc3ViMDA1IHN1YnRyYWN0ICAyICAgMiAgLT4gJzAnDQotZGRzdWIwMDYgc3VidHJhY3QgIDMgICAyICAtPiAnMScNCi1kZHN1YjAwNyBzdWJ0cmFjdCAgMiAgIDMgIC0+ICctMScNCi0NCi1kZHN1YjAxMSBzdWJ0cmFjdCAtMCAgIDAgIC0+ICctMCcNCi1kZHN1YjAxMiBzdWJ0cmFjdCAtMSAgIDEgIC0+ICctMicNCi1kZHN1YjAxMyBzdWJ0cmFjdCAtMSAgIDIgIC0+ICctMycNCi1kZHN1YjAxNCBzdWJ0cmFjdCAtMiAgIDEgIC0+ICctMycNCi1kZHN1YjAxNSBzdWJ0cmFjdCAtMiAgIDIgIC0+ICctNCcNCi1kZHN1YjAxNiBzdWJ0cmFjdCAtMyAgIDIgIC0+ICctNScNCi1kZHN1YjAxNyBzdWJ0cmFjdCAtMiAgIDMgIC0+ICctNScNCi0NCi1kZHN1YjAyMSBzdWJ0cmFjdCAgMCAgLTAgIC0+ICcwJw0KLWRkc3ViMDIyIHN1YnRyYWN0ICAxICAtMSAgLT4gJzInDQotZGRzdWIwMjMgc3VidHJhY3QgIDEgIC0yICAtPiAnMycNCi1kZHN1YjAyNCBzdWJ0cmFjdCAgMiAgLTEgIC0+ICczJw0KLWRkc3ViMDI1IHN1YnRyYWN0ICAyICAtMiAgLT4gJzQnDQotZGRzdWIwMjYgc3VidHJhY3QgIDMgIC0yICAtPiAnNScNCi1kZHN1YjAyNyBzdWJ0cmFjdCAgMiAgLTMgIC0+ICc1Jw0KLQ0KLWRkc3ViMDMwIHN1YnRyYWN0ICAxMSAgMSAgLT4gMTANCi1kZHN1YjAzMSBzdWJ0cmFjdCAgMTAgIDEgIC0+ICA5DQotZGRzdWIwMzIgc3VidHJhY3QgIDkgICAxICAtPiAgOA0KLWRkc3ViMDMzIHN1YnRyYWN0ICAxICAgMSAgLT4gIDANCi1kZHN1YjAzNCBzdWJ0cmFjdCAgMCAgIDEgIC0+IC0xDQotZGRzdWIwMzUgc3VidHJhY3QgLTEgICAxICAtPiAtMg0KLWRkc3ViMDM2IHN1YnRyYWN0IC05ICAgMSAgLT4gLTEwDQotZGRzdWIwMzcgc3VidHJhY3QgLTEwICAxICAtPiAtMTENCi1kZHN1YjAzOCBzdWJ0cmFjdCAtMTEgIDEgIC0+IC0xMg0KLQ0KLWRkc3ViMDQwIHN1YnRyYWN0ICc1Ljc1JyAnMy4zJyAgLT4gJzIuNDUnDQotZGRzdWIwNDEgc3VidHJhY3QgJzUnICAgICctMycgICAtPiAnOCcNCi1kZHN1YjA0MiBzdWJ0cmFjdCAnLTUnICAgJy0zJyAgIC0+ICctMicNCi1kZHN1YjA0MyBzdWJ0cmFjdCAnLTcnICAgJzIuNScgIC0+ICctOS41Jw0KLWRkc3ViMDQ0IHN1YnRyYWN0ICcwLjcnICAnMC4zJyAgLT4gJzAuNCcNCi1kZHN1YjA0NSBzdWJ0cmFjdCAnMS4zJyAgJzAuMycgIC0+ICcxLjAnDQotZGRzdWIwNDYgc3VidHJhY3QgJzEuMjUnICcxLjI1JyAtPiAnMC4wMCcNCi0NCi1kZHN1YjA1MCBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwMDAnIC0+ICcwLjIzNDU2Nzg5Jw0KLWRkc3ViMDUxIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgICAnMS4wMDAwMDA4OScgLT4gJzAuMjM0NTY3MDAnDQotDQotZGRzdWIwNjAgc3VidHJhY3QgJzcwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWIwNjEgc3VidHJhY3QgJzcwMCcgICAgJzEwMDAwZSsxNicgLT4gJy0xLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViMDYyIHN1YnRyYWN0ICc3MDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5RSsxOScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWIwNjMgc3VidHJhY3QgJzcwMDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTkzRSsxOScgUm91bmRlZA0KLWRkc3ViMDY0IHN1YnRyYWN0ICc3MDAwMDAnICAgICcxMDAwMGUrMTYnIC0+ICctOS45OTk5OTk5OTk5OTk5MzBFKzE5JyBSb3VuZGVkDQotICAtLSBzeW1tZXRyeToNCi1kZHN1YjA2NSBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViMDY2IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViMDY3IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5OTlFKzE5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjA2OCBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5M0UrMTknIFJvdW5kZWQNCi1kZHN1YjA2OSBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwMDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5MzBFKzE5JyBSb3VuZGVkDQotDQotICAtLSBzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHMNCi1kZHN1YjA5MCBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMCcgIC0+ICcwLjAnDQotZGRzdWIwOTEgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcNCi1kZHN1YjA5MiBzdWJ0cmFjdCAnMC4wMCcgICAgJzAwLjAnIC0+ICcwLjAwJw0KLWRkc3ViMDkzIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnDQotZGRzdWIwOTQgc3VidHJhY3QgJzAuMDAnICAgICcwMC4wJyAtPiAnMC4wMCcNCi1kZHN1YjA5NSBzdWJ0cmFjdCAnMycgICAgJy4zJyAgIC0+ICcyLjcnDQotZGRzdWIwOTYgc3VidHJhY3QgJzMuJyAgICcuMycgICAtPiAnMi43Jw0KLWRkc3ViMDk3IHN1YnRyYWN0ICczLjAnICAnLjMnICAgLT4gJzIuNycNCi1kZHN1YjA5OCBzdWJ0cmFjdCAnMy4wMCcgJy4zJyAgIC0+ICcyLjcwJw0KLWRkc3ViMDk5IHN1YnRyYWN0ICczJyAgICAnMycgICAgLT4gJzAnDQotZGRzdWIxMDAgc3VidHJhY3QgJzMnICAgICcrMycgICAtPiAnMCcNCi1kZHN1YjEwMSBzdWJ0cmFjdCAnMycgICAgJy0zJyAgIC0+ICc2Jw0KLWRkc3ViMTAyIHN1YnRyYWN0ICczJyAgICAnMC4zJyAgLT4gJzIuNycNCi1kZHN1YjEwMyBzdWJ0cmFjdCAnMy4nICAgJzAuMycgIC0+ICcyLjcnDQotZGRzdWIxMDQgc3VidHJhY3QgJzMuMCcgICcwLjMnICAtPiAnMi43Jw0KLWRkc3ViMTA1IHN1YnRyYWN0ICczLjAwJyAnMC4zJyAgLT4gJzIuNzAnDQotZGRzdWIxMDYgc3VidHJhY3QgJzMnICAgICczLjAnICAtPiAnMC4wJw0KLWRkc3ViMTA3IHN1YnRyYWN0ICczJyAgICAnKzMuMCcgLT4gJzAuMCcNCi1kZHN1YjEwOCBzdWJ0cmFjdCAnMycgICAgJy0zLjAnIC0+ICc2LjAnDQotDQotLS0gdGhlIGFib3ZlIGFsbCBmcm9tIGFkZDsgbWFzc2FnZWQgYW5kIGV4dGVuZGVkLiAgTm93IHNvbWUgbmV3IG9uZXMuLi4NCi0tLSBbcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgY29tcGFyaXNvbnNdDQotLS0gTkI6IC14RS04IGJlbG93IHdlcmUgbm9uLWV4cG9uZW50cyBwcmUtQU5TSSBYMy0yNzQsIGFuZCAtMUUtNyBvciAwRS03DQotLS0gd2l0aCBpbnB1dCByb3VuZGluZy4NCi1kZHN1YjEyMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTVFLTgnDQotZGRzdWIxMjEgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy00RS04Jw0KLWRkc3ViMTIyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctM0UtOCcNCi1kZHN1YjEyMyBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg3JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTJFLTgnDQotZGRzdWIxMjQgc3VidHJhY3QgICcxMC4yMzQ1Njc4OCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0xRS04Jw0KLWRkc3ViMTI1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4OScgIC0+ICcwRS04Jw0KLWRkc3ViMTI2IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTAnICAgICcxMC4yMzQ1Njc4OScgIC0+ICcxRS04Jw0KLWRkc3ViMTI3IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4OScgIC0+ICcyRS04Jw0KLWRkc3ViMTI4IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTInICAgICcxMC4yMzQ1Njc4OScgIC0+ICczRS04Jw0KLWRkc3ViMTI5IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTMnICAgICcxMC4yMzQ1Njc4OScgIC0+ICc0RS04Jw0KLWRkc3ViMTMwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICc1RS04Jw0KLWRkc3ViMTMxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNUUtOCcNCi1kZHN1YjEzMiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgyJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTRFLTgnDQotZGRzdWIxMzMgc3VidHJhY3QgICcxMC4yMzQ1Njc4MycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0zRS04Jw0KLWRkc3ViMTM0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMkUtOCcNCi1kZHN1YjEzNSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg1JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTFFLTgnDQotZGRzdWIxMzYgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzBFLTgnDQotZGRzdWIxMzcgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzFFLTgnDQotZGRzdWIxMzggc3VidHJhY3QgICcxMC4yMzQ1Njc4OCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzJFLTgnDQotZGRzdWIxMzkgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzNFLTgnDQotZGRzdWIxNDAgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzRFLTgnDQotZGRzdWIxNDEgc3VidHJhY3QgICcxMC4yMzQ1Njc5MScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzVFLTgnDQotZGRzdWIxNDIgc3VidHJhY3QgICcxJyAgICAgICAgICAgICAgJzAuOTk5OTk5OTk5JyAgLT4gJzFFLTknDQotZGRzdWIxNDMgc3VidHJhY3QgICcwLjk5OTk5OTk5OScgICAgJzEnICAgICAgICAgICAgLT4gJy0xRS05Jw0KLWRkc3ViMTQ0IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzgwJyAgICctMTAuMjM0NTY3ODYnIC0+ICc2RS04Jw0KLWRkc3ViMTQ1IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkwJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNEUtOCcNCi1kZHN1YjE0NiBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MScgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTVFLTgnDQotDQotLS0gYWRkaXRpb25hbCBzY2FsZWQgYXJpdGhtZXRpYyB0ZXN0cyBbMC45NyBwcm9ibGVtXQ0KLWRkc3ViMTYwIHN1YnRyYWN0ICcwJyAgICAgJy4xJyAgICAgIC0+ICctMC4xJw0KLWRkc3ViMTYxIHN1YnRyYWN0ICcwMCcgICAgJy45Nzk4MycgIC0+ICctMC45Nzk4MycNCi1kZHN1YjE2MiBzdWJ0cmFjdCAnMCcgICAgICcuOScgICAgICAtPiAnLTAuOScNCi1kZHN1YjE2MyBzdWJ0cmFjdCAnMCcgICAgICcwLjEwMicgICAtPiAnLTAuMTAyJw0KLWRkc3ViMTY0IHN1YnRyYWN0ICcwJyAgICAgJy40JyAgICAgIC0+ICctMC40Jw0KLWRkc3ViMTY1IHN1YnRyYWN0ICcwJyAgICAgJy4zMDcnICAgIC0+ICctMC4zMDcnDQotZGRzdWIxNjYgc3VidHJhY3QgJzAnICAgICAnLjQzODIyJyAgLT4gJy0wLjQzODIyJw0KLWRkc3ViMTY3IHN1YnRyYWN0ICcwJyAgICAgJy45MTEnICAgIC0+ICctMC45MTEnDQotZGRzdWIxNjggc3VidHJhY3QgJy4wJyAgICAnLjAyJyAgICAgLT4gJy0wLjAyJw0KLWRkc3ViMTY5IHN1YnRyYWN0ICcwMCcgICAgJy4zOTInICAgIC0+ICctMC4zOTInDQotZGRzdWIxNzAgc3VidHJhY3QgJzAnICAgICAnLjI2JyAgICAgLT4gJy0wLjI2Jw0KLWRkc3ViMTcxIHN1YnRyYWN0ICcwJyAgICAgJzAuNTEnICAgIC0+ICctMC41MScNCi1kZHN1YjE3MiBzdWJ0cmFjdCAnMCcgICAgICcuMjIzNCcgICAtPiAnLTAuMjIzNCcNCi1kZHN1YjE3MyBzdWJ0cmFjdCAnMCcgICAgICcuMicgICAgICAtPiAnLTAuMicNCi1kZHN1YjE3NCBzdWJ0cmFjdCAnLjAnICAgICcuMDAwOCcgICAtPiAnLTAuMDAwOCcNCi0tLSAwLiBvbiBsZWZ0DQotZGRzdWIxODAgc3VidHJhY3QgJzAuMCcgICAgICctLjEnICAgICAgLT4gJzAuMScNCi1kZHN1YjE4MSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycNCi1kZHN1YjE4MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOScgICAgICAtPiAnMC45Jw0KLWRkc3ViMTgzIHN1YnRyYWN0ICcwLjAnICAgICAnLTAuMTAyJyAgIC0+ICcwLjEwMicNCi1kZHN1YjE4NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uNCcgICAgICAtPiAnMC40Jw0KLWRkc3ViMTg1IHN1YnRyYWN0ICcwLjAnICAgICAnLS4zMDcnICAgIC0+ICcwLjMwNycNCi1kZHN1YjE4NiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uNDM4MjInICAtPiAnMC40MzgyMicNCi1kZHN1YjE4NyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnDQotZGRzdWIxODggc3VidHJhY3QgJzAuMCcgICAgICctLjAyJyAgICAgLT4gJzAuMDInDQotZGRzdWIxODkgc3VidHJhY3QgJzAuMDAnICAgICctLjM5MicgICAgLT4gJzAuMzkyJw0KLWRkc3ViMTkwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2Jw0KLWRkc3ViMTkxIHN1YnRyYWN0ICcwLjAnICAgICAnLTAuNTEnICAgIC0+ICcwLjUxJw0KLWRkc3ViMTkyIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yMjM0JyAgIC0+ICcwLjIyMzQnDQotZGRzdWIxOTMgc3VidHJhY3QgJzAuMCcgICAgICctLjInICAgICAgLT4gJzAuMicNCi1kZHN1YjE5NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDAwOCcgICAtPiAnMC4wMDA4Jw0KLS0tIG5lZ2F0aXZlcyBvZiBzYW1lDQotZGRzdWIyMDAgc3VidHJhY3QgJzAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnDQotZGRzdWIyMDEgc3VidHJhY3QgJzAwJyAgICAnLS45Nzk4MycgIC0+ICcwLjk3OTgzJw0KLWRkc3ViMjAyIHN1YnRyYWN0ICcwJyAgICAgJy0uOScgICAgICAtPiAnMC45Jw0KLWRkc3ViMjAzIHN1YnRyYWN0ICcwJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInDQotZGRzdWIyMDQgc3VidHJhY3QgJzAnICAgICAnLS40JyAgICAgIC0+ICcwLjQnDQotZGRzdWIyMDUgc3VidHJhY3QgJzAnICAgICAnLS4zMDcnICAgIC0+ICcwLjMwNycNCi1kZHN1YjIwNiBzdWJ0cmFjdCAnMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInDQotZGRzdWIyMDcgc3VidHJhY3QgJzAnICAgICAnLS45MTEnICAgIC0+ICcwLjkxMScNCi1kZHN1YjIwOCBzdWJ0cmFjdCAnLjAnICAgICctLjAyJyAgICAgLT4gJzAuMDInDQotZGRzdWIyMDkgc3VidHJhY3QgJzAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicNCi1kZHN1YjIxMCBzdWJ0cmFjdCAnMCcgICAgICctLjI2JyAgICAgLT4gJzAuMjYnDQotZGRzdWIyMTEgc3VidHJhY3QgJzAnICAgICAnLTAuNTEnICAgIC0+ICcwLjUxJw0KLWRkc3ViMjEyIHN1YnRyYWN0ICcwJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0Jw0KLWRkc3ViMjEzIHN1YnRyYWN0ICcwJyAgICAgJy0uMicgICAgICAtPiAnMC4yJw0KLWRkc3ViMjE0IHN1YnRyYWN0ICcuMCcgICAgJy0uMDAwOCcgICAtPiAnMC4wMDA4Jw0KLQ0KLS0tIG1vcmUgZml4ZWQsIExIUyBzd2FwcyBbcmVhbGx5IHRoZSBzYW1lIGFzIHRlc3RjYXNlcyB1bmRlciBhZGRdDQotZGRzdWIyMjAgc3VidHJhY3QgJy01NjI2N0UtMTInIDAgIC0+ICctNS42MjY3RS04Jw0KLWRkc3ViMjIxIHN1YnRyYWN0ICctNTYyNjdFLTExJyAwICAtPiAnLTUuNjI2N0UtNycNCi1kZHN1YjIyMiBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgMCAgLT4gJy0wLjAwMDAwNTYyNjcnDQotZGRzdWIyMjMgc3VidHJhY3QgJy01NjI2N0UtOScgIDAgIC0+ICctMC4wMDAwNTYyNjcnDQotZGRzdWIyMjQgc3VidHJhY3QgJy01NjI2N0UtOCcgIDAgIC0+ICctMC4wMDA1NjI2NycNCi1kZHN1YjIyNSBzdWJ0cmFjdCAnLTU2MjY3RS03JyAgMCAgLT4gJy0wLjAwNTYyNjcnDQotZGRzdWIyMjYgc3VidHJhY3QgJy01NjI2N0UtNicgIDAgIC0+ICctMC4wNTYyNjcnDQotZGRzdWIyMjcgc3VidHJhY3QgJy01NjI2N0UtNScgIDAgIC0+ICctMC41NjI2NycNCi1kZHN1YjIyOCBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgMCAgLT4gJy01NjIuNjcnDQotZGRzdWIyMjkgc3VidHJhY3QgJy01NjI2N0UtMScgIDAgIC0+ICctNTYyNi43Jw0KLWRkc3ViMjMwIHN1YnRyYWN0ICctNTYyNjdFLTAnICAwICAtPiAnLTU2MjY3Jw0KLS0tIHN5bW1ldHJ5IC4uLg0KLWRkc3ViMjQwIHN1YnRyYWN0IDAgJy01NjI2N0UtMTInICAtPiAnNS42MjY3RS04Jw0KLWRkc3ViMjQxIHN1YnRyYWN0IDAgJy01NjI2N0UtMTEnICAtPiAnNS42MjY3RS03Jw0KLWRkc3ViMjQyIHN1YnRyYWN0IDAgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3Jw0KLWRkc3ViMjQzIHN1YnRyYWN0IDAgJy01NjI2N0UtOScgICAtPiAnMC4wMDAwNTYyNjcnDQotZGRzdWIyNDQgc3VidHJhY3QgMCAnLTU2MjY3RS04JyAgIC0+ICcwLjAwMDU2MjY3Jw0KLWRkc3ViMjQ1IHN1YnRyYWN0IDAgJy01NjI2N0UtNycgICAtPiAnMC4wMDU2MjY3Jw0KLWRkc3ViMjQ2IHN1YnRyYWN0IDAgJy01NjI2N0UtNicgICAtPiAnMC4wNTYyNjcnDQotZGRzdWIyNDcgc3VidHJhY3QgMCAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3Jw0KLWRkc3ViMjQ4IHN1YnRyYWN0IDAgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3Jw0KLWRkc3ViMjQ5IHN1YnRyYWN0IDAgJy01NjI2N0UtMScgICAtPiAnNTYyNi43Jw0KLWRkc3ViMjUwIHN1YnRyYWN0IDAgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnDQotDQotLS0gbm93IHNvbWUgbW9yZSBmcm9tIHRoZSAnbmV3JyBhZGQNCi1kZHN1YjMwMSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScNCi1kZHN1YjMwMiBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMC4yMzQ1Njc3OCcNCi0NCi0tLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMNCi1kZHN1YjMyMSBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcNCi1kZHN1YjMyMiBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5NycNCi1kZHN1YjMyMyBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzAuOTk5NicNCi1kZHN1YjMyNCBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzAuOTk5NScNCi1kZHN1YjMyNSBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDAnIC0+ICcwLjk5OTgnDQotZGRzdWIzMjYgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAxJyAtPiAnMC45OTk5Jw0KLWRkc3ViMzI3IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMicgLT4gJzEuMDAwMCcNCi1kZHN1YjMyOCBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDMnIC0+ICcxLjAwMDEnDQotDQotLS0gaW50ZXJuYWwgYm91bmRhcmllcw0KLWRkc3ViMzQ2IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3JyAgIC0+ICc5OTk5OTk5OTk5OTkzJw0KLWRkc3ViMzQ3IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MCcgICAtPiAnOTk5OTk5OTk5OTkzMCcNCi1kZHN1YjM0OCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwJyAgIC0+ICc5OTk5OTk5OTk5MzAwJw0KLWRkc3ViMzQ5IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwJyAgIC0+ICc5OTk5OTk5OTkzMDAwJw0KLWRkc3ViMzUwIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMCcgICAtPiAnOTk5OTk5OTkzMDAwMCcNCi1kZHN1YjM1MSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAwJyAgIC0+ICc5OTk5OTk5MzAwMDAwJw0KLWRkc3ViMzUyIHN1YnRyYWN0ICc3JyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5OTkzJw0KLWRkc3ViMzUzIHN1YnRyYWN0ICc3MCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTkzMCcNCi1kZHN1YjM1NCBzdWJ0cmFjdCAnNzAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5MzAwJw0KLWRkc3ViMzU1IHN1YnRyYWN0ICc3MDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTkzMDAwJw0KLWRkc3ViMzU2IHN1YnRyYWN0ICc3MDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTkzMDAwMCcNCi1kZHN1YjM1NyBzdWJ0cmFjdCAnNzAwMDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5MzAwMDAwJw0KLQ0KLS0tIHplcm8gcHJlc2VydmF0aW9uDQotZGRzdWIzNjEgc3VidHJhY3QgMSAnMC4wMDAxJyAtPiAnMC45OTk5Jw0KLWRkc3ViMzYyIHN1YnRyYWN0IDEgJzAuMDAwMDEnIC0+ICcwLjk5OTk5Jw0KLWRkc3ViMzYzIHN1YnRyYWN0IDEgJzAuMDAwMDAxJyAtPiAnMC45OTk5OTknDQotZGRzdWIzNjQgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5Jw0KLWRkc3ViMzY1IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWIzNjYgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQ0KLWRkc3ViMzcwIHN1YnRyYWN0IDEgIDAgIC0+IDENCi1kZHN1YjM3MSBzdWJ0cmFjdCAxIDAuICAtPiAxDQotZGRzdWIzNzIgc3VidHJhY3QgMSAgLjAgLT4gMS4wDQotZGRzdWIzNzMgc3VidHJhY3QgMSAwLjAgLT4gMS4wDQotZGRzdWIzNzQgc3VidHJhY3QgIDAgIDEgLT4gLTENCi1kZHN1YjM3NSBzdWJ0cmFjdCAwLiAgMSAtPiAtMQ0KLWRkc3ViMzc2IHN1YnRyYWN0ICAuMCAxIC0+IC0xLjANCi1kZHN1YjM3NyBzdWJ0cmFjdCAwLjAgMSAtPiAtMS4wDQotDQotLS0gbGVhZGluZyAwIGRpZ2l0IGJlZm9yZSByb3VuZA0KLWRkc3ViOTEwIHN1YnRyYWN0IC0xMDM1MTkzNjIgLTUxODk3OTU1LjMgLT4gLTUxNjIxNDA2LjcNCi1kZHN1YjkxMSBzdWJ0cmFjdCAxNTk1NzkuNDQ0IDg5ODI3LjUyMjkgLT4gNjk3NTEuOTIxMQ0KLQ0KLWRkc3ViOTIwIHN1YnRyYWN0IDMzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY2IC0+IDI5OS45OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkc3ViOTIxIHN1YnRyYWN0IDMzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY1IC0+IDMwMC4wMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViOTIyIHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY1IC0+ICA5OS45OTk5OTk5OTk5OTk5NQ0KLWRkc3ViOTIzIHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY0IC0+ICA5OS45OTk5OTk5OTk5OTk5Ng0KLWRkc3ViOTI0IHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTQwIC0+IDEwMC4wMDAwMDAwMDAwMDAyIFJvdW5kZWQNCi1kZHN1YjkyNSBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMTIzNDU2MCAtPiAgOTAuMDAwMDAwMDAwMDAwMDANCi1kZHN1YjkyNiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMTIzNDU2MSAtPiAgODkuOTk5OTk5OTk5OTk5OTkNCi1kZHN1YjkyNyBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMTIzNDU2NiAtPiAgODkuOTk5OTk5OTk5OTk5OTQNCi1kZHN1YjkyOCBzdWJ0cmFjdCAxMDEuMDAwMDAwMDEyMzQ1NiA5MS4wMDAwMDAwMTIzNDU2NiAtPiAgIDkuOTk5OTk5OTk5OTk5OTQNCi1kZHN1YjkyOSBzdWJ0cmFjdCAxMDEuMDAwMDAwMDEyMzQ1NiA5OS4wMDAwMDAwMTIzNDU2NiAtPiAgIDEuOTk5OTk5OTk5OTk5OTQNCi0NCi0tLSBtb3JlIExIUyBzd2FwcyBbd2VyZSBmaXhlZF0NCi1kZHN1YjM5MCBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycNCi1kZHN1YjM5MSBzdWJ0cmFjdCAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3Jw0KLWRkc3ViMzkyIHN1YnRyYWN0ICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycNCi1kZHN1YjM5MyBzdWJ0cmFjdCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycNCi1kZHN1YjM5NCBzdWJ0cmFjdCAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycNCi1kZHN1YjM5NSBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycNCi1kZHN1YjM5NiBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycNCi1kZHN1YjM5NyBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3Jw0KLWRkc3ViMzk4IHN1YnRyYWN0ICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnDQotZGRzdWIzOTkgc3VidHJhY3QgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03Jw0KLWRkc3ViNDAwIHN1YnRyYWN0ICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnDQotZGRzdWI0MDEgc3VidHJhY3QgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1Jw0KLWRkc3ViNDAyIHN1YnRyYWN0ICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1Jw0KLWRkc3ViNDAzIHN1YnRyYWN0ICctNUUtMScgICAgICAgIDAgLT4gICctMC41Jw0KLWRkc3ViNDA0IHN1YnRyYWN0ICctNUUwJyAgICAgICAgIDAgLT4gICctNScNCi1kZHN1YjQwNSBzdWJ0cmFjdCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJw0KLWRkc3ViNDA2IHN1YnRyYWN0ICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJw0KLWRkc3ViNDA3IHN1YnRyYWN0ICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcNCi1kZHN1YjQwOCBzdWJ0cmFjdCAnLTVFMTYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgIFJvdW5kZWQNCi1kZHN1YjQwOSBzdWJ0cmFjdCAnLTVFMTcnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgIFJvdW5kZWQNCi1kZHN1YjQxMCBzdWJ0cmFjdCAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQNCi1kZHN1YjQxMSBzdWJ0cmFjdCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQNCi0NCi0tLSBtb3JlIFJIUyBzd2FwcyBbd2VyZSBmaXhlZF0NCi1kZHN1YjQyMCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xMCcgLT4gICcwLjAwMDAwNTYyNjcnDQotZGRzdWI0MjEgc3VidHJhY3QgMCAgJy01NjI2N0UtNicgIC0+ICAnMC4wNTYyNjcnDQotZGRzdWI0MjIgc3VidHJhY3QgMCAgJy01NjI2N0UtNScgIC0+ICAnMC41NjI2NycNCi1kZHN1YjQyMyBzdWJ0cmFjdCAwICAnLTU2MjY3RS00JyAgLT4gICc1LjYyNjcnDQotZGRzdWI0MjQgc3VidHJhY3QgMCAgJy01NjI2N0UtMycgIC0+ICAnNTYuMjY3Jw0KLWRkc3ViNDI1IHN1YnRyYWN0IDAgICctNTYyNjdFLTInICAtPiAgJzU2Mi42NycNCi1kZHN1YjQyNiBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xJyAgLT4gICc1NjI2LjcnDQotZGRzdWI0Mjcgc3VidHJhY3QgMCAgJy01NjI2N0UtMCcgIC0+ICAnNTYyNjcnDQotZGRzdWI0Mjggc3VidHJhY3QgMCAgJy01RS0xMCcgICAgIC0+ICAnNUUtMTAnDQotZGRzdWI0Mjkgc3VidHJhY3QgMCAgJy01RS03JyAgICAgIC0+ICAnNUUtNycNCi1kZHN1YjQzMCBzdWJ0cmFjdCAwICAnLTVFLTYnICAgICAgLT4gICcwLjAwMDAwNScNCi1kZHN1YjQzMSBzdWJ0cmFjdCAwICAnLTVFLTUnICAgICAgLT4gICcwLjAwMDA1Jw0KLWRkc3ViNDMyIHN1YnRyYWN0IDAgICctNUUtNCcgICAgICAtPiAgJzAuMDAwNScNCi1kZHN1YjQzMyBzdWJ0cmFjdCAwICAnLTVFLTEnICAgICAgLT4gICcwLjUnDQotZGRzdWI0MzQgc3VidHJhY3QgMCAgJy01RTAnICAgICAgIC0+ICAnNScNCi1kZHN1YjQzNSBzdWJ0cmFjdCAwICAnLTVFMScgICAgICAgLT4gICc1MCcNCi1kZHN1YjQzNiBzdWJ0cmFjdCAwICAnLTVFNScgICAgICAgLT4gICc1MDAwMDAnDQotZGRzdWI0Mzcgc3VidHJhY3QgMCAgJy01RTE1JyAgICAgIC0+ICAnNTAwMDAwMDAwMDAwMDAwMCcNCi1kZHN1YjQzOCBzdWJ0cmFjdCAwICAnLTVFMTYnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZA0KLWRkc3ViNDM5IHN1YnRyYWN0IDAgICctNUUxNycgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkDQotZGRzdWI0NDAgc3VidHJhY3QgMCAgJy01RTE4JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgIFJvdW5kZWQNCi1kZHN1YjQ0MSBzdWJ0cmFjdCAwICAnLTVFMTAwJyAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZA0KLQ0KLQ0KLS0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuDQotZGRzdWI0NjEgc3VidHJhY3QgJzFFKzE2JyAnMScgICAgICAgIC0+ICc5OTk5OTk5OTk5OTk5OTk5Jw0KLWRkc3ViNDYyIHN1YnRyYWN0ICcxRSsxMicgJy0xLjExMScgICAtPiAnMTAwMDAwMDAwMDAwMS4xMTEnDQotZGRzdWI0NjMgc3VidHJhY3QgJzEuMTExJyAgJy0xRSsxMicgIC0+ICcxMDAwMDAwMDAwMDAxLjExMScNCi1kZHN1YjQ2NCBzdWJ0cmFjdCAnLTEnICAgICctMUUrMTYnICAgLT4gJzk5OTk5OTk5OTk5OTk5OTknDQotZGRzdWI0NjUgc3VidHJhY3QgJzdFKzE1JyAnMScgICAgICAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5Jw0KLWRkc3ViNDY2IHN1YnRyYWN0ICc3RSsxMicgJy0xLjExMScgICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnDQotZGRzdWI0Njcgc3VidHJhY3QgJzEuMTExJyAgJy03RSsxMicgIC0+ICc3MDAwMDAwMDAwMDAxLjExMScNCi1kZHN1YjQ2OCBzdWJ0cmFjdCAnLTEnICAgICctN0UrMTUnICAgLT4gJzY5OTk5OTk5OTk5OTk5OTknDQotDQotLS0gICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1DQotZGRzdWI0NzAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYzJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNDcxIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjQ3MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI0NzMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNDc0IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjQ3NSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI0NzYgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU3JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNDc3IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZGRzdWI0Nzggc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5Jw0KLWRkc3ViNDc5IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OCcNCi1kZHN1YjQ4MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTcnDQotZGRzdWI0ODEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk2Jw0KLWRkc3ViNDgyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NScNCi1kZHN1YjQ4MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTQnDQotDQotLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZGRzdWI1MDAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknDQotZGRzdWI1MDEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTAyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUwMyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MDQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTA1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUwNiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MDcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTA4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUwOSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MTAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTExIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUxMiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MTMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTE0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUxNSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MTYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnDQotZGRzdWI1MTcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTE4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUxOSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkc3ViNTIwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5Jw0KLWRkc3ViNTIxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUyMiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MjMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTI0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUyNSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MjYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTI3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUyOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1Mjkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTMwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUzMSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MzIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTMzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUzNCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MzUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTM2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4Jw0KLWRkc3ViNTM3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUzOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1Mzkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZGRzdWI1NDAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTQxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU0MiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kZHN1YjU1MCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScNCi1kZHN1YjU1MSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NTIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTUzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU1NCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NTUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTU2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU1NyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NTggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTU5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU2MCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NjEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTYyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU2MyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NjQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTY1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU2NiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcNCi1kZHN1YjU2NyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1Njggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTY5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzeW1tZXRyeS4uLg0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZGRzdWI2MDAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5Jw0KLWRkc3ViNjAxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MDIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYwMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjA0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MDUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYwNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjA3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MDggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYwOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjEwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MTEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYxMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjEzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MTQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYxNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjE2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcNCi1kZHN1YjYxNyBzdWJ0cmFjdCAxLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjE4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MTkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZGRzdWI2MjAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5Jw0KLWRkc3ViNjIxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MjIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYyMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjI0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MjUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYyNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjI3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2Mjggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYyOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjMwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MzEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYzMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjMzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MzQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYzNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjM2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcNCi1kZHN1YjYzNyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjM4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2Mzkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KLWRkc3ViNjQwIHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NDEgc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY0MiBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZGRzdWI2NTAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5Jw0KLWRkc3ViNjUxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NTIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY1MyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjU0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NTUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY1NiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjU3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NTggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY1OSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjYwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NjEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY2MiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjYzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NjQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY2NSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjY2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcNCi1kZHN1YjY2NyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjY4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2Njkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSBsb3RzIG9mIGxlYWRpbmcgemVyb3MgaW4gaW50ZXJtZWRpYXRlIHJlc3VsdCwgYW5kIHNob3dpbmcgZWZmZWN0cyBvZg0KLS0tIGlucHV0IHJvdW5kaW5nIHdvdWxkIGhhdmUgYWZmZWN0ZWQgdGhlIGZvbGxvd2luZw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZGRzdWI2NzAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQ0KLWRkc3ViNjcxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjENCi1kZHN1YjY3MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQ0KLWRkc3ViNjczIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41DQotZGRzdWI2NzQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkNCi0NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZGRzdWI2ODAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQ0KLWRkc3ViNjgxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjENCi1kZHN1YjY4MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQ0KLWRkc3ViNjgzIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41DQotZGRzdWI2ODQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkNCi0NCi1kZHN1YjY4NSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODcuMScgLT4gMC45DQotZGRzdWI2ODYgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjknIC0+IDAuMQ0KLWRkc3ViNjg3IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAtMC4xDQotZGRzdWI2ODggc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjUnIC0+IC0wLjUNCi1kZHN1YjY4OSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguOScgLT4gLTAuOQ0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZGRzdWI2OTAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQ0KLWRkc3ViNjkxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjENCi1kZHN1YjY5MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQ0KLWRkc3ViNjkzIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41DQotZGRzdWI2OTQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkNCi0NCi0tLSBTcGVjaWFscw0KLWRkc3ViNzgwIHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZHN1Yjc4MSBzdWJ0cmFjdCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZGRzdWI3ODIgc3VidHJhY3QgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRkc3ViNzgzIHN1YnRyYWN0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kZHN1Yjc4NCBzdWJ0cmFjdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZGRzdWI3ODUgc3VidHJhY3QgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLWRkc3ViNzg3IHN1YnRyYWN0IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZHN1Yjc4OCBzdWJ0cmFjdCAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZGRzdWI3ODkgc3VidHJhY3QgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRkc3ViNzkwIHN1YnRyYWN0ICAwICAgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZHN1Yjc5MSBzdWJ0cmFjdCAgMSAgICAgSW5mICAgLT4gLUluZmluaXR5DQotZGRzdWI3OTIgc3VidHJhY3QgIDEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLQ0KLWRkc3ViODAwIHN1YnRyYWN0ICBJbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODAxIHN1YnRyYWN0ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1kZHN1YjgwMiBzdWJ0cmFjdCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZGRzdWI4MDMgc3VidHJhY3QgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWRkc3ViODA0IHN1YnRyYWN0ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCi1kZHN1YjgwNSBzdWJ0cmFjdCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZGRzdWI4MDYgc3VidHJhY3QgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRkc3ViODA3IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZHN1YjgwOCBzdWJ0cmFjdCAtMTAwMCAtSW5mICAgLT4gIEluZmluaXR5DQotZGRzdWI4MDkgc3VidHJhY3QgLUluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRzdWI4MTAgc3VidHJhY3QgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRkc3ViODExIHN1YnRyYWN0IC0wICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZHN1YjgxMiBzdWJ0cmFjdCAgMCAgICAtSW5mICAgLT4gIEluZmluaXR5DQotZGRzdWI4MTMgc3VidHJhY3QgIDEgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRkc3ViODE0IHN1YnRyYWN0ICAxMDAwIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZHN1YjgxNSBzdWJ0cmFjdCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRzdWI4MjEgc3VidHJhY3QgIE5hTiAgIEluZiAgIC0+ICBOYU4NCi1kZHN1YjgyMiBzdWJ0cmFjdCAtTmFOICAgMTAwMCAgLT4gLU5hTg0KLWRkc3ViODIzIHN1YnRyYWN0ICBOYU4gICAxICAgICAtPiAgTmFODQotZGRzdWI4MjQgc3VidHJhY3QgIE5hTiAgIDAgICAgIC0+ICBOYU4NCi1kZHN1YjgyNSBzdWJ0cmFjdCAgTmFOICAtMCAgICAgLT4gIE5hTg0KLWRkc3ViODI2IHN1YnRyYWN0ICBOYU4gIC0xICAgICAtPiAgTmFODQotZGRzdWI4Mjcgc3VidHJhY3QgIE5hTiAgLTEwMDAgIC0+ICBOYU4NCi1kZHN1YjgyOCBzdWJ0cmFjdCAgTmFOICAtSW5mICAgLT4gIE5hTg0KLWRkc3ViODI5IHN1YnRyYWN0IC1OYU4gICBOYU4gICAtPiAtTmFODQotZGRzdWI4MzAgc3VidHJhY3QgLUluZiAgIE5hTiAgIC0+ICBOYU4NCi1kZHN1YjgzMSBzdWJ0cmFjdCAtMTAwMCAgTmFOICAgLT4gIE5hTg0KLWRkc3ViODMyIHN1YnRyYWN0IC0xICAgICBOYU4gICAtPiAgTmFODQotZGRzdWI4MzMgc3VidHJhY3QgLTAgICAgIE5hTiAgIC0+ICBOYU4NCi1kZHN1YjgzNCBzdWJ0cmFjdCAgMCAgICAgTmFOICAgLT4gIE5hTg0KLWRkc3ViODM1IHN1YnRyYWN0ICAxICAgICBOYU4gICAtPiAgTmFODQotZGRzdWI4MzYgc3VidHJhY3QgIDEwMDAgLU5hTiAgIC0+IC1OYU4NCi1kZHN1YjgzNyBzdWJ0cmFjdCAgSW5mICAgTmFOICAgLT4gIE5hTg0KLQ0KLWRkc3ViODQxIHN1YnRyYWN0ICBzTmFOICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODQyIHN1YnRyYWN0IC1zTmFOICAxMDAwICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODQzIHN1YnRyYWN0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODQ0IHN1YnRyYWN0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODQ1IHN1YnRyYWN0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODQ2IHN1YnRyYWN0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODQ3IHN1YnRyYWN0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODQ4IHN1YnRyYWN0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODQ5IHN1YnRyYWN0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODUwIHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODUxIHN1YnRyYWN0IC1JbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODUyIHN1YnRyYWN0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODUzIHN1YnRyYWN0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODU0IHN1YnRyYWN0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODU1IHN1YnRyYWN0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODU2IHN1YnRyYWN0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODU3IHN1YnRyYWN0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODU4IHN1YnRyYWN0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODU5IHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZHN1Yjg2MSBzdWJ0cmFjdCAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQ0KLWRkc3ViODYyIHN1YnRyYWN0IC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yDQotZGRzdWI4NjMgc3VidHJhY3QgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMNCi1kZHN1Yjg2NCBzdWJ0cmFjdCAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONA0KLWRkc3ViODY1IHN1YnRyYWN0ICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41DQotZGRzdWI4NjYgc3VidHJhY3QgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxDQotZGRzdWI4Njcgc3VidHJhY3QgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxDQotZGRzdWI4Njggc3VidHJhY3QgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxDQotZGRzdWI4Njkgc3VidHJhY3QgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQ0KLWRkc3ViODcxIHN1YnRyYWN0ICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg3MiBzdWJ0cmFjdCAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzdWI4NzMgc3VidHJhY3QgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODc0IHN1YnRyYWN0ICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg3NSBzdWJ0cmFjdCAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzdWI4NzYgc3VidHJhY3QgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODc3IHN1YnRyYWN0IC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg3OCBzdWJ0cmFjdCAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uDQotZGRzdWI4Nzkgc3VidHJhY3QgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODgwIHN1YnRyYWN0ICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg4MSBzdWJ0cmFjdCAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZWRnZSBjYXNlIHNwaWxscw0KLWRkc3ViOTAxIHN1YnRyYWN0ICAyLkUtMyAgMS4wMDIgIC0+IC0xLjAwMA0KLWRkc3ViOTAyIHN1YnRyYWN0ICAyLjBFLTMgIDEuMDAyICAtPiAtMS4wMDAwDQotZGRzdWI5MDMgc3VidHJhY3QgIDIuMDBFLTMgIDEuMDAyMCAgLT4gLTEuMDAwMDANCi1kZHN1YjkwNCBzdWJ0cmFjdCAgMi4wMDBFLTMgIDEuMDAyMDAgIC0+IC0xLjAwMDAwMA0KLWRkc3ViOTA1IHN1YnRyYWN0ICAyLjAwMDBFLTMgIDEuMDAyMDAwICAtPiAtMS4wMDAwMDAwDQotZGRzdWI5MDYgc3VidHJhY3QgIDIuMDAwMDBFLTMgIDEuMDAyMDAwMCAgLT4gLTEuMDAwMDAwMDANCi1kZHN1YjkwNyBzdWJ0cmFjdCAgMi4wMDAwMDBFLTMgIDEuMDAyMDAwMDAgIC0+IC0xLjAwMDAwMDAwMA0KLWRkc3ViOTA4IHN1YnRyYWN0ICAyLjAwMDAwMDBFLTMgIDEuMDAyMDAwMDAwICAtPiAtMS4wMDAwMDAwMDAwDQotDQotLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzIGNvdmVyZWQgdW5kZXIgQWRkDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkc3ViOTk5MCBzdWJ0cmFjdCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjk5OTEgc3VidHJhY3QgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFN1YnRyYWN0LmRlY1Rlc3QgLS0gZGVjRG91YmxlIHN1YnRyYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjRG91YmxlcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQorLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY0RvdWJsZQorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZGRzdWIwMDEgc3VidHJhY3QgIDAgICAwICAtPiAnMCcKK2Rkc3ViMDAyIHN1YnRyYWN0ICAxICAgMSAgLT4gJzAnCitkZHN1YjAwMyBzdWJ0cmFjdCAgMSAgIDIgIC0+ICctMScKK2Rkc3ViMDA0IHN1YnRyYWN0ICAyICAgMSAgLT4gJzEnCitkZHN1YjAwNSBzdWJ0cmFjdCAgMiAgIDIgIC0+ICcwJworZGRzdWIwMDYgc3VidHJhY3QgIDMgICAyICAtPiAnMScKK2Rkc3ViMDA3IHN1YnRyYWN0ICAyICAgMyAgLT4gJy0xJworCitkZHN1YjAxMSBzdWJ0cmFjdCAtMCAgIDAgIC0+ICctMCcKK2Rkc3ViMDEyIHN1YnRyYWN0IC0xICAgMSAgLT4gJy0yJworZGRzdWIwMTMgc3VidHJhY3QgLTEgICAyICAtPiAnLTMnCitkZHN1YjAxNCBzdWJ0cmFjdCAtMiAgIDEgIC0+ICctMycKK2Rkc3ViMDE1IHN1YnRyYWN0IC0yICAgMiAgLT4gJy00JworZGRzdWIwMTYgc3VidHJhY3QgLTMgICAyICAtPiAnLTUnCitkZHN1YjAxNyBzdWJ0cmFjdCAtMiAgIDMgIC0+ICctNScKKworZGRzdWIwMjEgc3VidHJhY3QgIDAgIC0wICAtPiAnMCcKK2Rkc3ViMDIyIHN1YnRyYWN0ICAxICAtMSAgLT4gJzInCitkZHN1YjAyMyBzdWJ0cmFjdCAgMSAgLTIgIC0+ICczJworZGRzdWIwMjQgc3VidHJhY3QgIDIgIC0xICAtPiAnMycKK2Rkc3ViMDI1IHN1YnRyYWN0ICAyICAtMiAgLT4gJzQnCitkZHN1YjAyNiBzdWJ0cmFjdCAgMyAgLTIgIC0+ICc1JworZGRzdWIwMjcgc3VidHJhY3QgIDIgIC0zICAtPiAnNScKKworZGRzdWIwMzAgc3VidHJhY3QgIDExICAxICAtPiAxMAorZGRzdWIwMzEgc3VidHJhY3QgIDEwICAxICAtPiAgOQorZGRzdWIwMzIgc3VidHJhY3QgIDkgICAxICAtPiAgOAorZGRzdWIwMzMgc3VidHJhY3QgIDEgICAxICAtPiAgMAorZGRzdWIwMzQgc3VidHJhY3QgIDAgICAxICAtPiAtMQorZGRzdWIwMzUgc3VidHJhY3QgLTEgICAxICAtPiAtMgorZGRzdWIwMzYgc3VidHJhY3QgLTkgICAxICAtPiAtMTAKK2Rkc3ViMDM3IHN1YnRyYWN0IC0xMCAgMSAgLT4gLTExCitkZHN1YjAzOCBzdWJ0cmFjdCAtMTEgIDEgIC0+IC0xMgorCitkZHN1YjA0MCBzdWJ0cmFjdCAnNS43NScgJzMuMycgIC0+ICcyLjQ1JworZGRzdWIwNDEgc3VidHJhY3QgJzUnICAgICctMycgICAtPiAnOCcKK2Rkc3ViMDQyIHN1YnRyYWN0ICctNScgICAnLTMnICAgLT4gJy0yJworZGRzdWIwNDMgc3VidHJhY3QgJy03JyAgICcyLjUnICAtPiAnLTkuNScKK2Rkc3ViMDQ0IHN1YnRyYWN0ICcwLjcnICAnMC4zJyAgLT4gJzAuNCcKK2Rkc3ViMDQ1IHN1YnRyYWN0ICcxLjMnICAnMC4zJyAgLT4gJzEuMCcKK2Rkc3ViMDQ2IHN1YnRyYWN0ICcxLjI1JyAnMS4yNScgLT4gJzAuMDAnCisKK2Rkc3ViMDUwIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknCitkZHN1YjA1MSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwODknIC0+ICcwLjIzNDU2NzAwJworCitkZHN1YjA2MCBzdWJ0cmFjdCAnNzAnICAgICcxMDAwMGUrMTYnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViMDYxIHN1YnRyYWN0ICc3MDAnICAgICcxMDAwMGUrMTYnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViMDYyIHN1YnRyYWN0ICc3MDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5RSsxOScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjA2MyBzdWJ0cmFjdCAnNzAwMDAnICAgICcxMDAwMGUrMTYnIC0+ICctOS45OTk5OTk5OTk5OTk5OTNFKzE5JyBSb3VuZGVkCitkZHN1YjA2NCBzdWJ0cmFjdCAnNzAwMDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTMwRSsxOScgUm91bmRlZAorICAtLSBzeW1tZXRyeToKK2Rkc3ViMDY1IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjA2NiBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViMDY3IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5OTlFKzE5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViMDY4IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTkzRSsxOScgUm91bmRlZAorZGRzdWIwNjkgc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwMDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTMwRSsxOScgUm91bmRlZAorCisgIC0tIHNvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0cworZGRzdWIwOTAgc3VidHJhY3QgJzAwLjAnICAgICcwLjAnICAtPiAnMC4wJworZGRzdWIwOTEgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcKK2Rkc3ViMDkyIHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCitkZHN1YjA5MyBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJworZGRzdWIwOTQgc3VidHJhY3QgJzAuMDAnICAgICcwMC4wJyAtPiAnMC4wMCcKK2Rkc3ViMDk1IHN1YnRyYWN0ICczJyAgICAnLjMnICAgLT4gJzIuNycKK2Rkc3ViMDk2IHN1YnRyYWN0ICczLicgICAnLjMnICAgLT4gJzIuNycKK2Rkc3ViMDk3IHN1YnRyYWN0ICczLjAnICAnLjMnICAgLT4gJzIuNycKK2Rkc3ViMDk4IHN1YnRyYWN0ICczLjAwJyAnLjMnICAgLT4gJzIuNzAnCitkZHN1YjA5OSBzdWJ0cmFjdCAnMycgICAgJzMnICAgIC0+ICcwJworZGRzdWIxMDAgc3VidHJhY3QgJzMnICAgICcrMycgICAtPiAnMCcKK2Rkc3ViMTAxIHN1YnRyYWN0ICczJyAgICAnLTMnICAgLT4gJzYnCitkZHN1YjEwMiBzdWJ0cmFjdCAnMycgICAgJzAuMycgIC0+ICcyLjcnCitkZHN1YjEwMyBzdWJ0cmFjdCAnMy4nICAgJzAuMycgIC0+ICcyLjcnCitkZHN1YjEwNCBzdWJ0cmFjdCAnMy4wJyAgJzAuMycgIC0+ICcyLjcnCitkZHN1YjEwNSBzdWJ0cmFjdCAnMy4wMCcgJzAuMycgIC0+ICcyLjcwJworZGRzdWIxMDYgc3VidHJhY3QgJzMnICAgICczLjAnICAtPiAnMC4wJworZGRzdWIxMDcgc3VidHJhY3QgJzMnICAgICcrMy4wJyAtPiAnMC4wJworZGRzdWIxMDggc3VidHJhY3QgJzMnICAgICctMy4wJyAtPiAnNi4wJworCistLSB0aGUgYWJvdmUgYWxsIGZyb20gYWRkOyBtYXNzYWdlZCBhbmQgZXh0ZW5kZWQuICBOb3cgc29tZSBuZXcgb25lcy4uLgorLS0gW3BhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGNvbXBhcmlzb25zXQorLS0gTkI6IC14RS04IGJlbG93IHdlcmUgbm9uLWV4cG9uZW50cyBwcmUtQU5TSSBYMy0yNzQsIGFuZCAtMUUtNyBvciAwRS03CistLSB3aXRoIGlucHV0IHJvdW5kaW5nLgorZGRzdWIxMjAgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy01RS04JworZGRzdWIxMjEgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy00RS04JworZGRzdWIxMjIgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0zRS04JworZGRzdWIxMjMgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0yRS04JworZGRzdWIxMjQgc3VidHJhY3QgICcxMC4yMzQ1Njc4OCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0xRS04JworZGRzdWIxMjUgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzBFLTgnCitkZHN1YjEyNiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMUUtOCcKK2Rkc3ViMTI3IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4OScgIC0+ICcyRS04JworZGRzdWIxMjggc3VidHJhY3QgICcxMC4yMzQ1Njc5MicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzNFLTgnCitkZHN1YjEyOSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkzJyAgICAnMTAuMjM0NTY3ODknICAtPiAnNEUtOCcKK2Rkc3ViMTMwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICc1RS04JworZGRzdWIxMzEgc3VidHJhY3QgICcxMC4yMzQ1Njc4MScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy01RS04JworZGRzdWIxMzIgc3VidHJhY3QgICcxMC4yMzQ1Njc4MicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy00RS04JworZGRzdWIxMzMgc3VidHJhY3QgICcxMC4yMzQ1Njc4MycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0zRS04JworZGRzdWIxMzQgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0yRS04JworZGRzdWIxMzUgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0xRS04JworZGRzdWIxMzYgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzBFLTgnCitkZHN1YjEzNyBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg3JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMUUtOCcKK2Rkc3ViMTM4IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcyRS04JworZGRzdWIxMzkgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzNFLTgnCitkZHN1YjE0MCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNEUtOCcKK2Rkc3ViMTQxIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc1RS04JworZGRzdWIxNDIgc3VidHJhY3QgICcxJyAgICAgICAgICAgICAgJzAuOTk5OTk5OTk5JyAgLT4gJzFFLTknCitkZHN1YjE0MyBzdWJ0cmFjdCAgJzAuOTk5OTk5OTk5JyAgICAnMScgICAgICAgICAgICAtPiAnLTFFLTknCitkZHN1YjE0NCBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc4MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnNkUtOCcKK2Rkc3ViMTQ1IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkwJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNEUtOCcKK2Rkc3ViMTQ2IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkxJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNUUtOCcKKworLS0gYWRkaXRpb25hbCBzY2FsZWQgYXJpdGhtZXRpYyB0ZXN0cyBbMC45NyBwcm9ibGVtXQorZGRzdWIxNjAgc3VidHJhY3QgJzAnICAgICAnLjEnICAgICAgLT4gJy0wLjEnCitkZHN1YjE2MSBzdWJ0cmFjdCAnMDAnICAgICcuOTc5ODMnICAtPiAnLTAuOTc5ODMnCitkZHN1YjE2MiBzdWJ0cmFjdCAnMCcgICAgICcuOScgICAgICAtPiAnLTAuOScKK2Rkc3ViMTYzIHN1YnRyYWN0ICcwJyAgICAgJzAuMTAyJyAgIC0+ICctMC4xMDInCitkZHN1YjE2NCBzdWJ0cmFjdCAnMCcgICAgICcuNCcgICAgICAtPiAnLTAuNCcKK2Rkc3ViMTY1IHN1YnRyYWN0ICcwJyAgICAgJy4zMDcnICAgIC0+ICctMC4zMDcnCitkZHN1YjE2NiBzdWJ0cmFjdCAnMCcgICAgICcuNDM4MjInICAtPiAnLTAuNDM4MjInCitkZHN1YjE2NyBzdWJ0cmFjdCAnMCcgICAgICcuOTExJyAgICAtPiAnLTAuOTExJworZGRzdWIxNjggc3VidHJhY3QgJy4wJyAgICAnLjAyJyAgICAgLT4gJy0wLjAyJworZGRzdWIxNjkgc3VidHJhY3QgJzAwJyAgICAnLjM5MicgICAgLT4gJy0wLjM5MicKK2Rkc3ViMTcwIHN1YnRyYWN0ICcwJyAgICAgJy4yNicgICAgIC0+ICctMC4yNicKK2Rkc3ViMTcxIHN1YnRyYWN0ICcwJyAgICAgJzAuNTEnICAgIC0+ICctMC41MScKK2Rkc3ViMTcyIHN1YnRyYWN0ICcwJyAgICAgJy4yMjM0JyAgIC0+ICctMC4yMjM0JworZGRzdWIxNzMgc3VidHJhY3QgJzAnICAgICAnLjInICAgICAgLT4gJy0wLjInCitkZHN1YjE3NCBzdWJ0cmFjdCAnLjAnICAgICcuMDAwOCcgICAtPiAnLTAuMDAwOCcKKy0tIDAuIG9uIGxlZnQKK2Rkc3ViMTgwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnCitkZHN1YjE4MSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycKK2Rkc3ViMTgyIHN1YnRyYWN0ICcwLjAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCitkZHN1YjE4MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInCitkZHN1YjE4NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uNCcgICAgICAtPiAnMC40JworZGRzdWIxODUgc3VidHJhY3QgJzAuMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3JworZGRzdWIxODYgc3VidHJhY3QgJzAuMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInCitkZHN1YjE4NyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnCitkZHN1YjE4OCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDInICAgICAtPiAnMC4wMicKK2Rkc3ViMTg5IHN1YnRyYWN0ICcwLjAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicKK2Rkc3ViMTkwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2JworZGRzdWIxOTEgc3VidHJhY3QgJzAuMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCitkZHN1YjE5MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0JworZGRzdWIxOTMgc3VidHJhY3QgJzAuMCcgICAgICctLjInICAgICAgLT4gJzAuMicKK2Rkc3ViMTk0IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCistLSBuZWdhdGl2ZXMgb2Ygc2FtZQorZGRzdWIyMDAgc3VidHJhY3QgJzAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnCitkZHN1YjIwMSBzdWJ0cmFjdCAnMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnCitkZHN1YjIwMiBzdWJ0cmFjdCAnMCcgICAgICctLjknICAgICAgLT4gJzAuOScKK2Rkc3ViMjAzIHN1YnRyYWN0ICcwJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInCitkZHN1YjIwNCBzdWJ0cmFjdCAnMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcKK2Rkc3ViMjA1IHN1YnRyYWN0ICcwJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnCitkZHN1YjIwNiBzdWJ0cmFjdCAnMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInCitkZHN1YjIwNyBzdWJ0cmFjdCAnMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJworZGRzdWIyMDggc3VidHJhY3QgJy4wJyAgICAnLS4wMicgICAgIC0+ICcwLjAyJworZGRzdWIyMDkgc3VidHJhY3QgJzAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicKK2Rkc3ViMjEwIHN1YnRyYWN0ICcwJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicKK2Rkc3ViMjExIHN1YnRyYWN0ICcwJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScKK2Rkc3ViMjEyIHN1YnRyYWN0ICcwJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0JworZGRzdWIyMTMgc3VidHJhY3QgJzAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInCitkZHN1YjIxNCBzdWJ0cmFjdCAnLjAnICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcKKworLS0gbW9yZSBmaXhlZCwgTEhTIHN3YXBzIFtyZWFsbHkgdGhlIHNhbWUgYXMgdGVzdGNhc2VzIHVuZGVyIGFkZF0KK2Rkc3ViMjIwIHN1YnRyYWN0ICctNTYyNjdFLTEyJyAwICAtPiAnLTUuNjI2N0UtOCcKK2Rkc3ViMjIxIHN1YnRyYWN0ICctNTYyNjdFLTExJyAwICAtPiAnLTUuNjI2N0UtNycKK2Rkc3ViMjIyIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAwICAtPiAnLTAuMDAwMDA1NjI2NycKK2Rkc3ViMjIzIHN1YnRyYWN0ICctNTYyNjdFLTknICAwICAtPiAnLTAuMDAwMDU2MjY3JworZGRzdWIyMjQgc3VidHJhY3QgJy01NjI2N0UtOCcgIDAgIC0+ICctMC4wMDA1NjI2NycKK2Rkc3ViMjI1IHN1YnRyYWN0ICctNTYyNjdFLTcnICAwICAtPiAnLTAuMDA1NjI2NycKK2Rkc3ViMjI2IHN1YnRyYWN0ICctNTYyNjdFLTYnICAwICAtPiAnLTAuMDU2MjY3JworZGRzdWIyMjcgc3VidHJhY3QgJy01NjI2N0UtNScgIDAgIC0+ICctMC41NjI2NycKK2Rkc3ViMjI4IHN1YnRyYWN0ICctNTYyNjdFLTInICAwICAtPiAnLTU2Mi42NycKK2Rkc3ViMjI5IHN1YnRyYWN0ICctNTYyNjdFLTEnICAwICAtPiAnLTU2MjYuNycKK2Rkc3ViMjMwIHN1YnRyYWN0ICctNTYyNjdFLTAnICAwICAtPiAnLTU2MjY3JworLS0gc3ltbWV0cnkgLi4uCitkZHN1YjI0MCBzdWJ0cmFjdCAwICctNTYyNjdFLTEyJyAgLT4gJzUuNjI2N0UtOCcKK2Rkc3ViMjQxIHN1YnRyYWN0IDAgJy01NjI2N0UtMTEnICAtPiAnNS42MjY3RS03JworZGRzdWIyNDIgc3VidHJhY3QgMCAnLTU2MjY3RS0xMCcgIC0+ICcwLjAwMDAwNTYyNjcnCitkZHN1YjI0MyBzdWJ0cmFjdCAwICctNTYyNjdFLTknICAgLT4gJzAuMDAwMDU2MjY3JworZGRzdWIyNDQgc3VidHJhY3QgMCAnLTU2MjY3RS04JyAgIC0+ICcwLjAwMDU2MjY3JworZGRzdWIyNDUgc3VidHJhY3QgMCAnLTU2MjY3RS03JyAgIC0+ICcwLjAwNTYyNjcnCitkZHN1YjI0NiBzdWJ0cmFjdCAwICctNTYyNjdFLTYnICAgLT4gJzAuMDU2MjY3JworZGRzdWIyNDcgc3VidHJhY3QgMCAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3JworZGRzdWIyNDggc3VidHJhY3QgMCAnLTU2MjY3RS0yJyAgIC0+ICc1NjIuNjcnCitkZHN1YjI0OSBzdWJ0cmFjdCAwICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycKK2Rkc3ViMjUwIHN1YnRyYWN0IDAgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnCisKKy0tIG5vdyBzb21lIG1vcmUgZnJvbSB0aGUgJ25ldycgYWRkCitkZHN1YjMwMSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScKK2Rkc3ViMzAyIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcwLjIzNDU2Nzc4JworCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2Rkc3ViMzIxIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworZGRzdWIzMjIgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTcnCitkZHN1YjMyMyBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzAuOTk5NicKK2Rkc3ViMzI0IHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMC45OTk1JworZGRzdWIzMjUgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAwJyAtPiAnMC45OTk4JworZGRzdWIzMjYgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAxJyAtPiAnMC45OTk5JworZGRzdWIzMjcgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAyJyAtPiAnMS4wMDAwJworZGRzdWIzMjggc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAzJyAtPiAnMS4wMDAxJworCistLSBpbnRlcm5hbCBib3VuZGFyaWVzCitkZHN1YjM0NiBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNycgICAtPiAnOTk5OTk5OTk5OTk5MycKK2Rkc3ViMzQ3IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MCcgICAtPiAnOTk5OTk5OTk5OTkzMCcKK2Rkc3ViMzQ4IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAnICAgLT4gJzk5OTk5OTk5OTkzMDAnCitkZHN1YjM0OSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMCcgICAtPiAnOTk5OTk5OTk5MzAwMCcKK2Rkc3ViMzUwIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMCcgICAtPiAnOTk5OTk5OTkzMDAwMCcKK2Rkc3ViMzUxIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMDAnICAgLT4gJzk5OTk5OTkzMDAwMDAnCitkZHN1YjM1MiBzdWJ0cmFjdCAnNycgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTk5MycKK2Rkc3ViMzUzIHN1YnRyYWN0ICc3MCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTkzMCcKK2Rkc3ViMzU0IHN1YnRyYWN0ICc3MDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTkzMDAnCitkZHN1YjM1NSBzdWJ0cmFjdCAnNzAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5MzAwMCcKK2Rkc3ViMzU2IHN1YnRyYWN0ICc3MDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTkzMDAwMCcKK2Rkc3ViMzU3IHN1YnRyYWN0ICc3MDAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTkzMDAwMDAnCisKKy0tIHplcm8gcHJlc2VydmF0aW9uCitkZHN1YjM2MSBzdWJ0cmFjdCAxICcwLjAwMDEnIC0+ICcwLjk5OTknCitkZHN1YjM2MiBzdWJ0cmFjdCAxICcwLjAwMDAxJyAtPiAnMC45OTk5OScKK2Rkc3ViMzYzIHN1YnRyYWN0IDEgJzAuMDAwMDAxJyAtPiAnMC45OTk5OTknCitkZHN1YjM2NCBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknCitkZHN1YjM2NSBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRzdWIzNjYgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2Rkc3ViMzcwIHN1YnRyYWN0IDEgIDAgIC0+IDEKK2Rkc3ViMzcxIHN1YnRyYWN0IDEgMC4gIC0+IDEKK2Rkc3ViMzcyIHN1YnRyYWN0IDEgIC4wIC0+IDEuMAorZGRzdWIzNzMgc3VidHJhY3QgMSAwLjAgLT4gMS4wCitkZHN1YjM3NCBzdWJ0cmFjdCAgMCAgMSAtPiAtMQorZGRzdWIzNzUgc3VidHJhY3QgMC4gIDEgLT4gLTEKK2Rkc3ViMzc2IHN1YnRyYWN0ICAuMCAxIC0+IC0xLjAKK2Rkc3ViMzc3IHN1YnRyYWN0IDAuMCAxIC0+IC0xLjAKKworLS0gbGVhZGluZyAwIGRpZ2l0IGJlZm9yZSByb3VuZAorZGRzdWI5MTAgc3VidHJhY3QgLTEwMzUxOTM2MiAtNTE4OTc5NTUuMyAtPiAtNTE2MjE0MDYuNworZGRzdWI5MTEgc3VidHJhY3QgMTU5NTc5LjQ0NCA4OTgyNy41MjI5IC0+IDY5NzUxLjkyMTEKKworZGRzdWI5MjAgc3VidHJhY3QgMzMzLjAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDEyMzQ1NjYgLT4gMjk5Ljk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZHN1YjkyMSBzdWJ0cmFjdCAzMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NSAtPiAzMDAuMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViOTIyIHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY1IC0+ICA5OS45OTk5OTk5OTk5OTk5NQorZGRzdWI5MjMgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDEyMzQ1NjQgLT4gIDk5Ljk5OTk5OTk5OTk5OTk2CitkZHN1YjkyNCBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU0MCAtPiAxMDAuMDAwMDAwMDAwMDAwMiBSb3VuZGVkCitkZHN1YjkyNSBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMTIzNDU2MCAtPiAgOTAuMDAwMDAwMDAwMDAwMDAKK2Rkc3ViOTI2IHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAxMjM0NTYxIC0+ICA4OS45OTk5OTk5OTk5OTk5OQorZGRzdWI5Mjcgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjYgLT4gIDg5Ljk5OTk5OTk5OTk5OTk0CitkZHN1YjkyOCBzdWJ0cmFjdCAxMDEuMDAwMDAwMDEyMzQ1NiA5MS4wMDAwMDAwMTIzNDU2NiAtPiAgIDkuOTk5OTk5OTk5OTk5OTQKK2Rkc3ViOTI5IHN1YnRyYWN0IDEwMS4wMDAwMDAwMTIzNDU2IDk5LjAwMDAwMDAxMjM0NTY2IC0+ICAgMS45OTk5OTk5OTk5OTk5NAorCistLSBtb3JlIExIUyBzd2FwcyBbd2VyZSBmaXhlZF0KK2Rkc3ViMzkwIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZGRzdWIzOTEgc3VidHJhY3QgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2Rkc3ViMzkyIHN1YnRyYWN0ICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2Rkc3ViMzkzIHN1YnRyYWN0ICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZGRzdWIzOTQgc3VidHJhY3QgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitkZHN1YjM5NSBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2Rkc3ViMzk2IHN1YnRyYWN0ICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZGRzdWIzOTcgc3VidHJhY3QgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2Rkc3ViMzk4IHN1YnRyYWN0ICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitkZHN1YjM5OSBzdWJ0cmFjdCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitkZHN1YjQwMCBzdWJ0cmFjdCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZGRzdWI0MDEgc3VidHJhY3QgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZGRzdWI0MDIgc3VidHJhY3QgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitkZHN1YjQwMyBzdWJ0cmFjdCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2Rkc3ViNDA0IHN1YnRyYWN0ICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2Rkc3ViNDA1IHN1YnRyYWN0ICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitkZHN1YjQwNiBzdWJ0cmFjdCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2Rkc3ViNDA3IHN1YnRyYWN0ICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2Rkc3ViNDA4IHN1YnRyYWN0ICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgUm91bmRlZAorZGRzdWI0MDkgc3VidHJhY3QgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkCitkZHN1YjQxMCBzdWJ0cmFjdCAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQKK2Rkc3ViNDExIHN1YnRyYWN0ICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcyBbd2VyZSBmaXhlZF0KK2Rkc3ViNDIwIHN1YnRyYWN0IDAgICctNTYyNjdFLTEwJyAtPiAgJzAuMDAwMDA1NjI2NycKK2Rkc3ViNDIxIHN1YnRyYWN0IDAgICctNTYyNjdFLTYnICAtPiAgJzAuMDU2MjY3JworZGRzdWI0MjIgc3VidHJhY3QgMCAgJy01NjI2N0UtNScgIC0+ICAnMC41NjI2NycKK2Rkc3ViNDIzIHN1YnRyYWN0IDAgICctNTYyNjdFLTQnICAtPiAgJzUuNjI2NycKK2Rkc3ViNDI0IHN1YnRyYWN0IDAgICctNTYyNjdFLTMnICAtPiAgJzU2LjI2NycKK2Rkc3ViNDI1IHN1YnRyYWN0IDAgICctNTYyNjdFLTInICAtPiAgJzU2Mi42NycKK2Rkc3ViNDI2IHN1YnRyYWN0IDAgICctNTYyNjdFLTEnICAtPiAgJzU2MjYuNycKK2Rkc3ViNDI3IHN1YnRyYWN0IDAgICctNTYyNjdFLTAnICAtPiAgJzU2MjY3JworZGRzdWI0Mjggc3VidHJhY3QgMCAgJy01RS0xMCcgICAgIC0+ICAnNUUtMTAnCitkZHN1YjQyOSBzdWJ0cmFjdCAwICAnLTVFLTcnICAgICAgLT4gICc1RS03JworZGRzdWI0MzAgc3VidHJhY3QgMCAgJy01RS02JyAgICAgIC0+ICAnMC4wMDAwMDUnCitkZHN1YjQzMSBzdWJ0cmFjdCAwICAnLTVFLTUnICAgICAgLT4gICcwLjAwMDA1JworZGRzdWI0MzIgc3VidHJhY3QgMCAgJy01RS00JyAgICAgIC0+ICAnMC4wMDA1JworZGRzdWI0MzMgc3VidHJhY3QgMCAgJy01RS0xJyAgICAgIC0+ICAnMC41JworZGRzdWI0MzQgc3VidHJhY3QgMCAgJy01RTAnICAgICAgIC0+ICAnNScKK2Rkc3ViNDM1IHN1YnRyYWN0IDAgICctNUUxJyAgICAgICAtPiAgJzUwJworZGRzdWI0MzYgc3VidHJhY3QgMCAgJy01RTUnICAgICAgIC0+ICAnNTAwMDAwJworZGRzdWI0Mzcgc3VidHJhY3QgMCAgJy01RTE1JyAgICAgIC0+ICAnNTAwMDAwMDAwMDAwMDAwMCcKK2Rkc3ViNDM4IHN1YnRyYWN0IDAgICctNUUxNicgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCitkZHN1YjQzOSBzdWJ0cmFjdCAwICAnLTVFMTcnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTcnICAgUm91bmRlZAorZGRzdWI0NDAgc3VidHJhY3QgMCAgJy01RTE4JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgIFJvdW5kZWQKK2Rkc3ViNDQxIHN1YnRyYWN0IDAgICctNUUxMDAnICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2Rkc3ViNDYxIHN1YnRyYWN0ICcxRSsxNicgJzEnICAgICAgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScKK2Rkc3ViNDYyIHN1YnRyYWN0ICcxRSsxMicgJy0xLjExMScgICAtPiAnMTAwMDAwMDAwMDAwMS4xMTEnCitkZHN1YjQ2MyBzdWJ0cmFjdCAnMS4xMTEnICAnLTFFKzEyJyAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJworZGRzdWI0NjQgc3VidHJhY3QgJy0xJyAgICAnLTFFKzE2JyAgIC0+ICc5OTk5OTk5OTk5OTk5OTk5JworZGRzdWI0NjUgc3VidHJhY3QgJzdFKzE1JyAnMScgICAgICAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5JworZGRzdWI0NjYgc3VidHJhY3QgJzdFKzEyJyAnLTEuMTExJyAgIC0+ICc3MDAwMDAwMDAwMDAxLjExMScKK2Rkc3ViNDY3IHN1YnRyYWN0ICcxLjExMScgICctN0UrMTInICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnCitkZHN1YjQ2OCBzdWJ0cmFjdCAnLTEnICAgICctN0UrMTUnICAgLT4gJzY5OTk5OTk5OTk5OTk5OTknCisKKy0tICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NQorZGRzdWI0NzAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYzJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZGRzdWI0NzEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZGRzdWI0NzIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRzdWI0NzMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRzdWI0NzQgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRzdWI0NzUgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRzdWI0NzYgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU3JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRzdWI0Nzcgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2Rkc3ViNDc4IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKK2Rkc3ViNDc5IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OCcKK2Rkc3ViNDgwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NycKK2Rkc3ViNDgxIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NicKK2Rkc3ViNDgyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NScKK2Rkc3ViNDgzIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NCcKKworLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2Rkc3ViNTAwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JworZGRzdWI1MDEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MDIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MDMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MDQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MDUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MDYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MDcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MDggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MDkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnCitkZHN1YjUxNyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUxOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUxOSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2Rkc3ViNTIwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JworZGRzdWI1MjEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MjIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MjMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MjQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MjUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MjYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1Mjcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI1Mjggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1Mjkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MzAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MzEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MzIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MzMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MzQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MzUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MzYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnCitkZHN1YjUzNyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUzOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUzOSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZGRzdWI1NDAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NDEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NDIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRzdWI1NTAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknCitkZHN1YjU1MSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU1MiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU1MyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU1NCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU1NSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU1NiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU1NyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU1OCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU1OSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2MCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2MSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2MiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2MyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2NCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2NSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2NiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcKK2Rkc3ViNTY3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTY4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTY5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3ltbWV0cnkuLi4KK3JvdW5kaW5nOiBoYWxmX3VwCitkZHN1YjYwMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknCitkZHN1YjYwMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MDIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjAzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MDUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjA2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MDggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjA5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjEyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjE1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnCitkZHN1YjYxNyBzdWJ0cmFjdCAxLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjE5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2Rkc3ViNjIwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScKK2Rkc3ViNjIxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYyMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MjMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjI0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYyNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MjYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjI3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYyOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2Mjkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjMwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MzIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjMzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MzUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjM2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcKK2Rkc3ViNjM3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2Mzkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkZHN1YjY0MCBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NDEgc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjQyIHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkZHN1YjY1MCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknCitkZHN1YjY1MSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NTIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjUzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1NCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NTUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjU2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1NyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NTggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjU5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2MCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NjEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjYyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2MyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NjQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjY1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2NiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnCitkZHN1YjY2NyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2Njggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjY5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKKworLS0gbG90cyBvZiBsZWFkaW5nIHplcm9zIGluIGludGVybWVkaWF0ZSByZXN1bHQsIGFuZCBzaG93aW5nIGVmZmVjdHMgb2YKKy0tIGlucHV0IHJvdW5kaW5nIHdvdWxkIGhhdmUgYWZmZWN0ZWQgdGhlIGZvbGxvd2luZworcm91bmRpbmc6IGhhbGZfdXAKK2Rkc3ViNjcwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkKK2Rkc3ViNjcxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjEKK2Rkc3ViNjcyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xCitkZHN1YjY3MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQorZGRzdWI2NzQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRzdWI2ODAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQorZGRzdWI2ODEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQorZGRzdWI2ODIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjEKK2Rkc3ViNjgzIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41CitkZHN1YjY4NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQorCitkZHN1YjY4NSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODcuMScgLT4gMC45CitkZHN1YjY4NiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODcuOScgLT4gMC4xCitkZHN1YjY4NyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguMScgLT4gLTAuMQorZGRzdWI2ODggc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjUnIC0+IC0wLjUKK2Rkc3ViNjg5IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAtMC45CisKK3JvdW5kaW5nOiBkb3duCitkZHN1YjY5MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45CitkZHN1YjY5MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xCitkZHN1YjY5MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQorZGRzdWI2OTMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUKK2Rkc3ViNjk0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45CisKKy0tIFNwZWNpYWxzCitkZHN1Yjc4MCBzdWJ0cmFjdCAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZHN1Yjc4MSBzdWJ0cmFjdCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZHN1Yjc4MiBzdWJ0cmFjdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZHN1Yjc4MyBzdWJ0cmFjdCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZHN1Yjc4NCBzdWJ0cmFjdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZHN1Yjc4NSBzdWJ0cmFjdCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkZHN1Yjc4NyBzdWJ0cmFjdCAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5CitkZHN1Yjc4OCBzdWJ0cmFjdCAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZHN1Yjc4OSBzdWJ0cmFjdCAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5CitkZHN1Yjc5MCBzdWJ0cmFjdCAgMCAgICAgSW5mICAgLT4gLUluZmluaXR5CitkZHN1Yjc5MSBzdWJ0cmFjdCAgMSAgICAgSW5mICAgLT4gLUluZmluaXR5CitkZHN1Yjc5MiBzdWJ0cmFjdCAgMTAwMCAgSW5mICAgLT4gLUluZmluaXR5CisKK2Rkc3ViODAwIHN1YnRyYWN0ICBJbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4MDEgc3VidHJhY3QgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZGRzdWI4MDIgc3VidHJhY3QgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRzdWI4MDMgc3VidHJhY3QgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGRzdWI4MDQgc3VidHJhY3QgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZGRzdWI4MDUgc3VidHJhY3QgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRzdWI4MDYgc3VidHJhY3QgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGRzdWI4MDcgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MDggc3VidHJhY3QgLTEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MDkgc3VidHJhY3QgLUluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1YjgxMCBzdWJ0cmFjdCAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5CitkZHN1YjgxMSBzdWJ0cmFjdCAtMCAgICAtSW5mICAgLT4gIEluZmluaXR5CitkZHN1YjgxMiBzdWJ0cmFjdCAgMCAgICAtSW5mICAgLT4gIEluZmluaXR5CitkZHN1YjgxMyBzdWJ0cmFjdCAgMSAgICAtSW5mICAgLT4gIEluZmluaXR5CitkZHN1YjgxNCBzdWJ0cmFjdCAgMTAwMCAtSW5mICAgLT4gIEluZmluaXR5CitkZHN1YjgxNSBzdWJ0cmFjdCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CisKK2Rkc3ViODIxIHN1YnRyYWN0ICBOYU4gICBJbmYgICAtPiAgTmFOCitkZHN1YjgyMiBzdWJ0cmFjdCAtTmFOICAgMTAwMCAgLT4gLU5hTgorZGRzdWI4MjMgc3VidHJhY3QgIE5hTiAgIDEgICAgIC0+ICBOYU4KK2Rkc3ViODI0IHN1YnRyYWN0ICBOYU4gICAwICAgICAtPiAgTmFOCitkZHN1YjgyNSBzdWJ0cmFjdCAgTmFOICAtMCAgICAgLT4gIE5hTgorZGRzdWI4MjYgc3VidHJhY3QgIE5hTiAgLTEgICAgIC0+ICBOYU4KK2Rkc3ViODI3IHN1YnRyYWN0ICBOYU4gIC0xMDAwICAtPiAgTmFOCitkZHN1YjgyOCBzdWJ0cmFjdCAgTmFOICAtSW5mICAgLT4gIE5hTgorZGRzdWI4Mjkgc3VidHJhY3QgLU5hTiAgIE5hTiAgIC0+IC1OYU4KK2Rkc3ViODMwIHN1YnRyYWN0IC1JbmYgICBOYU4gICAtPiAgTmFOCitkZHN1YjgzMSBzdWJ0cmFjdCAtMTAwMCAgTmFOICAgLT4gIE5hTgorZGRzdWI4MzIgc3VidHJhY3QgLTEgICAgIE5hTiAgIC0+ICBOYU4KK2Rkc3ViODMzIHN1YnRyYWN0IC0wICAgICBOYU4gICAtPiAgTmFOCitkZHN1YjgzNCBzdWJ0cmFjdCAgMCAgICAgTmFOICAgLT4gIE5hTgorZGRzdWI4MzUgc3VidHJhY3QgIDEgICAgIE5hTiAgIC0+ICBOYU4KK2Rkc3ViODM2IHN1YnRyYWN0ICAxMDAwIC1OYU4gICAtPiAtTmFOCitkZHN1YjgzNyBzdWJ0cmFjdCAgSW5mICAgTmFOICAgLT4gIE5hTgorCitkZHN1Yjg0MSBzdWJ0cmFjdCAgc05hTiAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQyIHN1YnRyYWN0IC1zTmFOICAxMDAwICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NDMgc3VidHJhY3QgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0NCBzdWJ0cmFjdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQ1IHN1YnRyYWN0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NDYgc3VidHJhY3QgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0NyBzdWJ0cmFjdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQ4IHN1YnRyYWN0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NDkgc3VidHJhY3QgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1MCBzdWJ0cmFjdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODUxIHN1YnRyYWN0IC1JbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTIgc3VidHJhY3QgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1MyBzdWJ0cmFjdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODU0IHN1YnRyYWN0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTUgc3VidHJhY3QgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1NiBzdWJ0cmFjdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODU3IHN1YnRyYWN0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTggc3VidHJhY3QgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1OSBzdWJ0cmFjdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRzdWI4NjEgc3VidHJhY3QgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjEKK2Rkc3ViODYyIHN1YnRyYWN0IC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yCitkZHN1Yjg2MyBzdWJ0cmFjdCAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMworZGRzdWI4NjQgc3VidHJhY3QgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQKK2Rkc3ViODY1IHN1YnRyYWN0ICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41CitkZHN1Yjg2NiBzdWJ0cmFjdCAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzEKK2Rkc3ViODY3IHN1YnRyYWN0IC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQorZGRzdWI4Njggc3VidHJhY3QgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxCitkZHN1Yjg2OSBzdWJ0cmFjdCAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxCitkZHN1Yjg3MSBzdWJ0cmFjdCAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg3MiBzdWJ0cmFjdCAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg3MyBzdWJ0cmFjdCAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg3NCBzdWJ0cmFjdCAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg3NSBzdWJ0cmFjdCAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg3NiBzdWJ0cmFjdCAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg3NyBzdWJ0cmFjdCAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg3OCBzdWJ0cmFjdCAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg3OSBzdWJ0cmFjdCAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg4MCBzdWJ0cmFjdCAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg4MSBzdWJ0cmFjdCAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGVkZ2UgY2FzZSBzcGlsbHMKK2Rkc3ViOTAxIHN1YnRyYWN0ICAyLkUtMyAgMS4wMDIgIC0+IC0xLjAwMAorZGRzdWI5MDIgc3VidHJhY3QgIDIuMEUtMyAgMS4wMDIgIC0+IC0xLjAwMDAKK2Rkc3ViOTAzIHN1YnRyYWN0ICAyLjAwRS0zICAxLjAwMjAgIC0+IC0xLjAwMDAwCitkZHN1YjkwNCBzdWJ0cmFjdCAgMi4wMDBFLTMgIDEuMDAyMDAgIC0+IC0xLjAwMDAwMAorZGRzdWI5MDUgc3VidHJhY3QgIDIuMDAwMEUtMyAgMS4wMDIwMDAgIC0+IC0xLjAwMDAwMDAKK2Rkc3ViOTA2IHN1YnRyYWN0ICAyLjAwMDAwRS0zICAxLjAwMjAwMDAgIC0+IC0xLjAwMDAwMDAwCitkZHN1YjkwNyBzdWJ0cmFjdCAgMi4wMDAwMDBFLTMgIDEuMDAyMDAwMDAgIC0+IC0xLjAwMDAwMDAwMAorZGRzdWI5MDggc3VidHJhY3QgIDIuMDAwMDAwMEUtMyAgMS4wMDIwMDAwMDAgIC0+IC0xLjAwMDAwMDAwMDAKKworLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzIGNvdmVyZWQgdW5kZXIgQWRkCisKKy0tIE51bGwgdGVzdHMKK2Rkc3ViOTk5MCBzdWJ0cmFjdCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViOTk5MSBzdWJ0cmFjdCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFRvSW50ZWdyYWwuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFRvSW50ZWdyYWwuZGVjVGVzdAppbmRleCA5MDBiZDRhLi5iZjZkNjFmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRUb0ludGVncmFsLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkVG9JbnRlZ3JhbC5kZWNUZXN0CkBAIC0xLDI1NyArMSwyNTcgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkVG9JbnRlZ3JhbC5kZWNUZXN0IC0tIHJvdW5kIERvdWJsZSB0byBpbnRlZ3JhbCB2YWx1ZSAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwNCi0tLSB2YWx1ZS1leGFjdCcgb3BlcmF0aW9ucyAoZnJvbSBJRUVFIDg1NCwgbGF0ZXIgbW9kaWZpZWQgaW4gNzU0cikuDQotLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcg0KLS0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkIGV4dGVuc2l2ZWx5DQotLS0gZWxzZXdoZXJlOyB0aGUgdGVzdHMgaGVyZSBhcmUgZm9yIGludGVncml0eSwgcm91bmRpbmcgbW9kZSwgZXRjLg0KLS0tIEFsc28sIGl0IGlzIGFzc3VtZWQgdGhlIHRlc3QgaGFybmVzcyB3aWxsIHVzZSB0aGVzZSB0ZXN0cyBmb3IgYm90aA0KLS0tIFRvSW50ZWdyYWxFeGFjdCAod2hpY2ggZG9lcyBzZXQgSW5leGFjdCkgYW5kIHRoZSBmaXhlZC1uYW1lDQotLS0gZnVuY3Rpb25zICh3aGljaCBkbyBub3Qgc2V0IEluZXhhY3QpLg0KLQ0KLS0tIE5vdGUgdGhhdCBkZWNOdW1iZXIgaW1wbGVtZW50cyBhbiBlYXJsaWVyIGRlZmluaXRpb24gb2YgdG9JbnRlZ3JhbA0KLS0tIHdoaWNoIG5ldmVyIHNldHMgSW5leGFjdDsgdGhlIGRlY1Rlc3Qgb3BlcmF0b3IgZm9yIHRoYXQgaXMgY2FsbGVkDQotLS0gJ3RvaW50ZWdyYWwnIGluc3RlYWQgb2YgJ3RvaW50ZWdyYWx4Jy4NCi0NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRkaW50eDAwMSB0b2ludGVncmFseCAgICAgIDAgICAgIC0+ICAwDQotZGRpbnR4MDAyIHRvaW50ZWdyYWx4ICAgICAgMC4wICAgLT4gIDANCi1kZGludHgwMDMgdG9pbnRlZ3JhbHggICAgICAwLjEgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDA0IHRvaW50ZWdyYWx4ICAgICAgMC4yICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAwNSB0b2ludGVncmFseCAgICAgIDAuMyAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMDYgdG9pbnRlZ3JhbHggICAgICAwLjQgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDA3IHRvaW50ZWdyYWx4ICAgICAgMC41ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAwOCB0b2ludGVncmFseCAgICAgIDAuNiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMDkgdG9pbnRlZ3JhbHggICAgICAwLjcgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDEwIHRvaW50ZWdyYWx4ICAgICAgMC44ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAxMSB0b2ludGVncmFseCAgICAgIDAuOSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMTIgdG9pbnRlZ3JhbHggICAgICAxICAgICAtPiAgMQ0KLWRkaW50eDAxMyB0b2ludGVncmFseCAgICAgIDEuMCAgIC0+ICAxICBSb3VuZGVkDQotZGRpbnR4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAxNSB0b2ludGVncmFseCAgICAgIDEuMiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMTYgdG9pbnRlZ3JhbHggICAgICAxLjMgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAxOCB0b2ludGVncmFseCAgICAgIDEuNSAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMTkgdG9pbnRlZ3JhbHggICAgICAxLjYgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAyMSB0b2ludGVncmFseCAgICAgIDEuOCAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMjIgdG9pbnRlZ3JhbHggICAgICAxLjkgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQotLS0gbmVnYXRpdmVzDQotZGRpbnR4MDMxIHRvaW50ZWdyYWx4ICAgICAtMCAgICAgLT4gLTANCi1kZGludHgwMzIgdG9pbnRlZ3JhbHggICAgIC0wLjAgICAtPiAtMA0KLWRkaW50eDAzMyB0b2ludGVncmFseCAgICAgLTAuMSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMzQgdG9pbnRlZ3JhbHggICAgIC0wLjIgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDM1IHRvaW50ZWdyYWx4ICAgICAtMC4zICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAzNiB0b2ludGVncmFseCAgICAgLTAuNCAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMzcgdG9pbnRlZ3JhbHggICAgIC0wLjUgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDM4IHRvaW50ZWdyYWx4ICAgICAtMC42ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAzOSB0b2ludGVncmFseCAgICAgLTAuNyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNDAgdG9pbnRlZ3JhbHggICAgIC0wLjggICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDQxIHRvaW50ZWdyYWx4ICAgICAtMC45ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA0MiB0b2ludGVncmFseCAgICAgLTEgICAgIC0+IC0xDQotZGRpbnR4MDQzIHRvaW50ZWdyYWx4ICAgICAtMS4wICAgLT4gLTEgIFJvdW5kZWQNCi1kZGludHgwNDQgdG9pbnRlZ3JhbHggICAgIC0xLjEgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDQ1IHRvaW50ZWdyYWx4ICAgICAtMS4yICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA0NiB0b2ludGVncmFseCAgICAgLTEuMyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNDcgdG9pbnRlZ3JhbHggICAgIC0xLjQgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDQ4IHRvaW50ZWdyYWx4ICAgICAtMS41ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA0OSB0b2ludGVncmFseCAgICAgLTEuNiAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNTAgdG9pbnRlZ3JhbHggICAgIC0xLjcgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDUxIHRvaW50ZWdyYWx4ICAgICAtMS44ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA1MiB0b2ludGVncmFseCAgICAgLTEuOSAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZXh0IHR3byB3b3VsZCBiZSBOYU4gdXNpbmcgcXVhbnRpemUoeCwgMCkNCi1kZGludHgwNTMgdG9pbnRlZ3JhbHggICAgMTBFKzYwICAtPiAxLjBFKzYxDQotZGRpbnR4MDU0IHRvaW50ZWdyYWx4ICAgLTEwRSs2MCAgLT4gLTEuMEUrNjENCi0NCi0tLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24NCi1kZGludHgwNjAgdG9pbnRlZ3JhbHggJzU2MjY3RS0xNycgICAtPiAnMCcgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNjEgdG9pbnRlZ3JhbHggJzU2MjY3RS01JyAgICAtPiAnMScgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNjMgdG9pbnRlZ3JhbHggJzU2MjY3RS0xJyAgICAtPiAnNTYyNycgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNjUgdG9pbnRlZ3JhbHggJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnDQotZGRpbnR4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3Jw0KLWRkaW50eDA2NyB0b2ludGVncmFseCAnNTYyNjdFKzEnICAgIC0+ICc1LjYyNjdFKzUnDQotZGRpbnR4MDY4IHRvaW50ZWdyYWx4ICc1NjI2N0UrOScgICAgLT4gJzUuNjI2N0UrMTMnDQotZGRpbnR4MDY5IHRvaW50ZWdyYWx4ICc1NjI2N0UrMTAnICAgLT4gJzUuNjI2N0UrMTQnDQotZGRpbnR4MDcwIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTEnICAgLT4gJzUuNjI2N0UrMTUnDQotZGRpbnR4MDcxIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTInICAgLT4gJzUuNjI2N0UrMTYnDQotZGRpbnR4MDcyIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTMnICAgLT4gJzUuNjI2N0UrMTcnDQotZGRpbnR4MDczIHRvaW50ZWdyYWx4ICcxLjIzRSs5NicgICAgLT4gJzEuMjNFKzk2Jw0KLWRkaW50eDA3NCB0b2ludGVncmFseCAnMS4yM0UrMzg0JyAgIC0+ICM0N2ZkMzAwMDAwMDAwMDAwICBDbGFtcGVkDQotDQotZGRpbnR4MDgwIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEwJyAgLT4gJy0wJyAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA4MSB0b2ludGVncmFseCAnLTU2MjY3RS01JyAgIC0+ICctMScgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwODIgdG9pbnRlZ3JhbHggJy01NjI2N0UtMicgICAtPiAnLTU2MycgICAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDgzIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEnICAgLT4gJy01NjI3JyAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA4NSB0b2ludGVncmFseCAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnDQotZGRpbnR4MDg2IHRvaW50ZWdyYWx4ICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycNCi1kZGludHgwODcgdG9pbnRlZ3JhbHggJy01NjI2N0UrMScgICAtPiAnLTUuNjI2N0UrNScNCi1kZGludHgwODggdG9pbnRlZ3JhbHggJy01NjI2N0UrOScgICAtPiAnLTUuNjI2N0UrMTMnDQotZGRpbnR4MDg5IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEwJyAgLT4gJy01LjYyNjdFKzE0Jw0KLWRkaW50eDA5MCB0b2ludGVncmFseCAnLTU2MjY3RSsxMScgIC0+ICctNS42MjY3RSsxNScNCi1kZGludHgwOTEgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTInICAtPiAnLTUuNjI2N0UrMTYnDQotZGRpbnR4MDkyIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEzJyAgLT4gJy01LjYyNjdFKzE3Jw0KLWRkaW50eDA5MyB0b2ludGVncmFseCAnLTEuMjNFKzk2JyAgIC0+ICctMS4yM0UrOTYnDQotZGRpbnR4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrMzg0JyAgLT4gI2M3ZmQzMDAwMDAwMDAwMDAgIENsYW1wZWQNCi0NCi0tLSBzdWJub3JtYWwgaW5wdXRzDQotZGRpbnR4MTAwIHRvaW50ZWdyYWx4ICAgICAgICAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MTAxIHRvaW50ZWdyYWx4ICAgICAgMC4xRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MTAyIHRvaW50ZWdyYWx4ICAgICAwLjAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MTAzIHRvaW50ZWdyYWx4ICAgICAgICAwRS0yOTkgLT4gMA0KLQ0KLS0tIHNwZWNpYWxzIGFuZCB6ZXJvcw0KLWRkaW50eDEyMCB0b2ludGVncmFseCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkNCi1kZGludHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5DQotZGRpbnR4MTIyIHRvaW50ZWdyYWx4ICAgTmFOICAgICAgIC0+ICBOYU4NCi1kZGludHgxMjMgdG9pbnRlZ3JhbHggIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGludHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDANCi1kZGludHgxMjUgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTANCi1kZGludHgxMjYgdG9pbnRlZ3JhbHggICAgIDAuMDAwICAgLT4gIDANCi1kZGludHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDANCi1kZGludHgxMjggdG9pbnRlZ3JhbHggICAgIDAuMCAgICAgLT4gIDANCi1kZGludHgxMjkgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDANCi1kZGludHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDANCi1kZGludHgxMzEgdG9pbnRlZ3JhbHggICAgIDBFLTIgICAgLT4gIDANCi1kZGludHgxMzIgdG9pbnRlZ3JhbHggICAgIDBFLTEgICAgLT4gIDANCi1kZGludHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDANCi1kZGludHgxMzQgdG9pbnRlZ3JhbHggICAgIDBFKzEgICAgLT4gIDBFKzENCi1kZGludHgxMzUgdG9pbnRlZ3JhbHggICAgIDBFKzIgICAgLT4gIDBFKzINCi1kZGludHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMNCi1kZGludHgxMzcgdG9pbnRlZ3JhbHggICAgIDBFKzQgICAgLT4gIDBFKzQNCi1kZGludHgxMzggdG9pbnRlZ3JhbHggICAgIDBFKzUgICAgLT4gIDBFKzUNCi1kZGludHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTANCi1kZGludHgxNDAgdG9pbnRlZ3JhbHggICAgLTAuMDAgICAgLT4gLTANCi1kZGludHgxNDEgdG9pbnRlZ3JhbHggICAgLTAuMCAgICAgLT4gLTANCi1kZGludHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTANCi1kZGludHgxNDMgdG9pbnRlZ3JhbHggICAgLTBFLTMgICAgLT4gLTANCi1kZGludHgxNDQgdG9pbnRlZ3JhbHggICAgLTBFLTIgICAgLT4gLTANCi1kZGludHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTANCi1kZGludHgxNDYgdG9pbnRlZ3JhbHggICAgLTBFLTAgICAgLT4gLTANCi1kZGludHgxNDcgdG9pbnRlZ3JhbHggICAgLTBFKzEgICAgLT4gLTBFKzENCi1kZGludHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzINCi1kZGludHgxNDkgdG9pbnRlZ3JhbHggICAgLTBFKzMgICAgLT4gLTBFKzMNCi1kZGludHgxNTAgdG9pbnRlZ3JhbHggICAgLTBFKzQgICAgLT4gLTBFKzQNCi1kZGludHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUNCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRpbnR4MTUyIHRvaW50ZWdyYWx4ICAgTmFOODA4ICAgIC0+ICBOYU44MDgNCi1kZGludHgxNTMgdG9pbnRlZ3JhbHggIHNOYU4wODAgICAgLT4gIE5hTjgwICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW50eDE1NCB0b2ludGVncmFseCAgLU5hTjgwOCAgICAtPiAtTmFOODA4DQotZGRpbnR4MTU1IHRvaW50ZWdyYWx4IC1zTmFOMDgwICAgIC0+IC1OYU44MCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGludHgxNTYgdG9pbnRlZ3JhbHggIC1OYU4gICAgICAgLT4gLU5hTg0KLWRkaW50eDE1NyB0b2ludGVncmFseCAtc05hTiAgICAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZXhhbXBsZXMNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLWRkaW50eDIwMCB0b2ludGVncmFseCAgICAgMi4xICAgIC0+IDIgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMDEgdG9pbnRlZ3JhbHggICAxMDAgICAgICAtPiAxMDANCi1kZGludHgyMDIgdG9pbnRlZ3JhbHggICAxMDAuMCAgICAtPiAxMDAgICAgICAgICAgUm91bmRlZA0KLWRkaW50eDIwMyB0b2ludGVncmFseCAgIDEwMS41ICAgIC0+IDEwMiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjA1IHRvaW50ZWdyYWx4ICAgMTBFKzUgICAgLT4gMS4wRSs2DQotZGRpbnR4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcNCi1kZGludHgyMDcgdG9pbnRlZ3JhbHggICAtSW5mICAgICAtPiAtSW5maW5pdHkNCi0NCi0NCi0tLSBhbGwgcm91bmRpbmcgbW9kZXMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotZGRpbnR4MjEwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMTEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIxMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjEzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMTQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIxNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi0NCi1kZGludHgyMjAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIyMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjIyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMjMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIyNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjI1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgaGFsZl9kb3duDQotDQotZGRpbnR4MjMwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMzEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIzMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjMzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMzQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIzNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIHVwDQotDQotZGRpbnR4MjQwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNDEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI0MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjQzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNDQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI0NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGRvd24NCi0NCi1kZGludHgyNTAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI1MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjUyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNTMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI1NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjU1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgY2VpbGluZw0KLQ0KLWRkaW50eDI2MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjYxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNjIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI2MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjY0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNjUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBmbG9vcg0KLQ0KLWRkaW50eDI3MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjcxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNzIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI3MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4Mjc0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNzUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zDQotZGRpbnR4MzAwIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ2ICAtPiAtMjE0NzQ4MzY0Ng0KLWRkaW50eDMwMSB0b2ludGVncmFseCAtMjE0NzQ4MzY0NyAgLT4gLTIxNDc0ODM2NDcNCi1kZGludHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4DQotZGRpbnR4MzAzIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ5ICAtPiAtMjE0NzQ4MzY0OQ0KLWRkaW50eDMwNCB0b2ludGVncmFseCAgMjE0NzQ4MzY0NiAgLT4gIDIxNDc0ODM2NDYNCi1kZGludHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3DQotZGRpbnR4MzA2IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ4ICAtPiAgMjE0NzQ4MzY0OA0KLWRkaW50eDMwNyB0b2ludGVncmFseCAgMjE0NzQ4MzY0OSAgLT4gIDIxNDc0ODM2NDkNCi1kZGludHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0DQotZGRpbnR4MzA5IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk1ICAtPiAgNDI5NDk2NzI5NQ0KLWRkaW50eDMxMCB0b2ludGVncmFseCAgNDI5NDk2NzI5NiAgLT4gIDQyOTQ5NjcyOTYNCi1kZGludHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3DQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFRvSW50ZWdyYWwuZGVjVGVzdCAtLSByb3VuZCBEb3VibGUgdG8gaW50ZWdyYWwgdmFsdWUgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIHRlc3RzIHRoZSBleHRlbmRlZCBzcGVjaWZpY2F0aW9uICdyb3VuZC10by1pbnRlZ3JhbAorLS0gdmFsdWUtZXhhY3QnIG9wZXJhdGlvbnMgKGZyb20gSUVFRSA4NTQsIGxhdGVyIG1vZGlmaWVkIGluIDc1NHIpLgorLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcgorLS0gcXVhbnRpemUsIHNvIHRob3NlIGFyZSBhc3N1bWVkIHRvIGhhdmUgYmVlbiB0ZXN0ZWQgZXh0ZW5zaXZlbHkKKy0tIGVsc2V3aGVyZTsgdGhlIHRlc3RzIGhlcmUgYXJlIGZvciBpbnRlZ3JpdHksIHJvdW5kaW5nIG1vZGUsIGV0Yy4KKy0tIEFsc28sIGl0IGlzIGFzc3VtZWQgdGhlIHRlc3QgaGFybmVzcyB3aWxsIHVzZSB0aGVzZSB0ZXN0cyBmb3IgYm90aAorLS0gVG9JbnRlZ3JhbEV4YWN0ICh3aGljaCBkb2VzIHNldCBJbmV4YWN0KSBhbmQgdGhlIGZpeGVkLW5hbWUKKy0tIGZ1bmN0aW9ucyAod2hpY2ggZG8gbm90IHNldCBJbmV4YWN0KS4KKworLS0gTm90ZSB0aGF0IGRlY051bWJlciBpbXBsZW1lbnRzIGFuIGVhcmxpZXIgZGVmaW5pdGlvbiBvZiB0b0ludGVncmFsCistLSB3aGljaCBuZXZlciBzZXRzIEluZXhhY3Q7IHRoZSBkZWNUZXN0IG9wZXJhdG9yIGZvciB0aGF0IGlzIGNhbGxlZAorLS0gJ3RvaW50ZWdyYWwnIGluc3RlYWQgb2YgJ3RvaW50ZWdyYWx4Jy4KKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkaW50eDAwMSB0b2ludGVncmFseCAgICAgIDAgICAgIC0+ICAwCitkZGludHgwMDIgdG9pbnRlZ3JhbHggICAgICAwLjAgICAtPiAgMAorZGRpbnR4MDAzIHRvaW50ZWdyYWx4ICAgICAgMC4xICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA0IHRvaW50ZWdyYWx4ICAgICAgMC4yICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA1IHRvaW50ZWdyYWx4ICAgICAgMC4zICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA2IHRvaW50ZWdyYWx4ICAgICAgMC40ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA3IHRvaW50ZWdyYWx4ICAgICAgMC41ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA4IHRvaW50ZWdyYWx4ICAgICAgMC42ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA5IHRvaW50ZWdyYWx4ICAgICAgMC43ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDEwIHRvaW50ZWdyYWx4ICAgICAgMC44ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDExIHRvaW50ZWdyYWx4ICAgICAgMC45ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDEyIHRvaW50ZWdyYWx4ICAgICAgMSAgICAgLT4gIDEKK2RkaW50eDAxMyB0b2ludGVncmFseCAgICAgIDEuMCAgIC0+ICAxICBSb3VuZGVkCitkZGludHgwMTQgdG9pbnRlZ3JhbHggICAgICAxLjEgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMTUgdG9pbnRlZ3JhbHggICAgICAxLjIgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMTYgdG9pbnRlZ3JhbHggICAgICAxLjMgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMTcgdG9pbnRlZ3JhbHggICAgICAxLjQgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMTggdG9pbnRlZ3JhbHggICAgICAxLjUgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMTkgdG9pbnRlZ3JhbHggICAgICAxLjYgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMjAgdG9pbnRlZ3JhbHggICAgICAxLjcgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMjEgdG9pbnRlZ3JhbHggICAgICAxLjggICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMjIgdG9pbnRlZ3JhbHggICAgICAxLjkgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMKK2RkaW50eDAzMSB0b2ludGVncmFseCAgICAgLTAgICAgIC0+IC0wCitkZGludHgwMzIgdG9pbnRlZ3JhbHggICAgIC0wLjAgICAtPiAtMAorZGRpbnR4MDMzIHRvaW50ZWdyYWx4ICAgICAtMC4xICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM0IHRvaW50ZWdyYWx4ICAgICAtMC4yICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM1IHRvaW50ZWdyYWx4ICAgICAtMC4zICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM2IHRvaW50ZWdyYWx4ICAgICAtMC40ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM3IHRvaW50ZWdyYWx4ICAgICAtMC41ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM4IHRvaW50ZWdyYWx4ICAgICAtMC42ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM5IHRvaW50ZWdyYWx4ICAgICAtMC43ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQwIHRvaW50ZWdyYWx4ICAgICAtMC44ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQxIHRvaW50ZWdyYWx4ICAgICAtMC45ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQyIHRvaW50ZWdyYWx4ICAgICAtMSAgICAgLT4gLTEKK2RkaW50eDA0MyB0b2ludGVncmFseCAgICAgLTEuMCAgIC0+IC0xICBSb3VuZGVkCitkZGludHgwNDQgdG9pbnRlZ3JhbHggICAgIC0xLjEgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNDUgdG9pbnRlZ3JhbHggICAgIC0xLjIgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNDYgdG9pbnRlZ3JhbHggICAgIC0xLjMgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNDcgdG9pbnRlZ3JhbHggICAgIC0xLjQgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNDggdG9pbnRlZ3JhbHggICAgIC0xLjUgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNDkgdG9pbnRlZ3JhbHggICAgIC0xLjYgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNTAgdG9pbnRlZ3JhbHggICAgIC0xLjcgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNTEgdG9pbnRlZ3JhbHggICAgIC0xLjggICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNTIgdG9pbnRlZ3JhbHggICAgIC0xLjkgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IHR3byB3b3VsZCBiZSBOYU4gdXNpbmcgcXVhbnRpemUoeCwgMCkKK2RkaW50eDA1MyB0b2ludGVncmFseCAgICAxMEUrNjAgIC0+IDEuMEUrNjEKK2RkaW50eDA1NCB0b2ludGVncmFseCAgIC0xMEUrNjAgIC0+IC0xLjBFKzYxCisKKy0tIG51bWJlcnMgYXJvdW5kIHByZWNpc2lvbgorZGRpbnR4MDYwIHRvaW50ZWdyYWx4ICc1NjI2N0UtMTcnICAgLT4gJzAnICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNjEgdG9pbnRlZ3JhbHggJzU2MjY3RS01JyAgICAtPiAnMScgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA2MiB0b2ludGVncmFseCAnNTYyNjdFLTInICAgIC0+ICc1NjMnICAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDYzIHRvaW50ZWdyYWx4ICc1NjI2N0UtMScgICAgLT4gJzU2MjcnICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNjUgdG9pbnRlZ3JhbHggJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnCitkZGludHgwNjYgdG9pbnRlZ3JhbHggJzU2MjY3RSswJyAgICAtPiAnNTYyNjcnCitkZGludHgwNjcgdG9pbnRlZ3JhbHggJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1JworZGRpbnR4MDY4IHRvaW50ZWdyYWx4ICc1NjI2N0UrOScgICAgLT4gJzUuNjI2N0UrMTMnCitkZGludHgwNjkgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMCcgICAtPiAnNS42MjY3RSsxNCcKK2RkaW50eDA3MCB0b2ludGVncmFseCAnNTYyNjdFKzExJyAgIC0+ICc1LjYyNjdFKzE1JworZGRpbnR4MDcxIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTInICAgLT4gJzUuNjI2N0UrMTYnCitkZGludHgwNzIgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMycgICAtPiAnNS42MjY3RSsxNycKK2RkaW50eDA3MyB0b2ludGVncmFseCAnMS4yM0UrOTYnICAgIC0+ICcxLjIzRSs5NicKK2RkaW50eDA3NCB0b2ludGVncmFseCAnMS4yM0UrMzg0JyAgIC0+ICM0N2ZkMzAwMDAwMDAwMDAwICBDbGFtcGVkCisKK2RkaW50eDA4MCB0b2ludGVncmFseCAnLTU2MjY3RS0xMCcgIC0+ICctMCcgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA4MSB0b2ludGVncmFseCAnLTU2MjY3RS01JyAgIC0+ICctMScgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA4MiB0b2ludGVncmFseCAnLTU2MjY3RS0yJyAgIC0+ICctNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA4MyB0b2ludGVncmFseCAnLTU2MjY3RS0xJyAgIC0+ICctNTYyNycgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA4NSB0b2ludGVncmFseCAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnCitkZGludHgwODYgdG9pbnRlZ3JhbHggJy01NjI2N0UrMCcgICAtPiAnLTU2MjY3JworZGRpbnR4MDg3IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEnICAgLT4gJy01LjYyNjdFKzUnCitkZGludHgwODggdG9pbnRlZ3JhbHggJy01NjI2N0UrOScgICAtPiAnLTUuNjI2N0UrMTMnCitkZGludHgwODkgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTAnICAtPiAnLTUuNjI2N0UrMTQnCitkZGludHgwOTAgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTEnICAtPiAnLTUuNjI2N0UrMTUnCitkZGludHgwOTEgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTInICAtPiAnLTUuNjI2N0UrMTYnCitkZGludHgwOTIgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTMnICAtPiAnLTUuNjI2N0UrMTcnCitkZGludHgwOTMgdG9pbnRlZ3JhbHggJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2JworZGRpbnR4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrMzg0JyAgLT4gI2M3ZmQzMDAwMDAwMDAwMDAgIENsYW1wZWQKKworLS0gc3Vibm9ybWFsIGlucHV0cworZGRpbnR4MTAwIHRvaW50ZWdyYWx4ICAgICAgICAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkCitkZGludHgxMDEgdG9pbnRlZ3JhbHggICAgICAwLjFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDEwMiB0b2ludGVncmFseCAgICAgMC4wMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MTAzIHRvaW50ZWdyYWx4ICAgICAgICAwRS0yOTkgLT4gMAorCistLSBzcGVjaWFscyBhbmQgemVyb3MKK2RkaW50eDEyMCB0b2ludGVncmFseCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkKK2RkaW50eDEyMSB0b2ludGVncmFseCAnLUluZicgICAgICAtPiAtSW5maW5pdHkKK2RkaW50eDEyMiB0b2ludGVncmFseCAgIE5hTiAgICAgICAtPiAgTmFOCitkZGludHgxMjMgdG9pbnRlZ3JhbHggIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkaW50eDEyNCB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMAorZGRpbnR4MTI1IHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wCitkZGludHgxMjYgdG9pbnRlZ3JhbHggICAgIDAuMDAwICAgLT4gIDAKK2RkaW50eDEyNyB0b2ludGVncmFseCAgICAgMC4wMCAgICAtPiAgMAorZGRpbnR4MTI4IHRvaW50ZWdyYWx4ICAgICAwLjAgICAgIC0+ICAwCitkZGludHgxMjkgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKK2RkaW50eDEzMCB0b2ludGVncmFseCAgICAgMEUtMyAgICAtPiAgMAorZGRpbnR4MTMxIHRvaW50ZWdyYWx4ICAgICAwRS0yICAgIC0+ICAwCitkZGludHgxMzIgdG9pbnRlZ3JhbHggICAgIDBFLTEgICAgLT4gIDAKK2RkaW50eDEzMyB0b2ludGVncmFseCAgICAgMEUtMCAgICAtPiAgMAorZGRpbnR4MTM0IHRvaW50ZWdyYWx4ICAgICAwRSsxICAgIC0+ICAwRSsxCitkZGludHgxMzUgdG9pbnRlZ3JhbHggICAgIDBFKzIgICAgLT4gIDBFKzIKK2RkaW50eDEzNiB0b2ludGVncmFseCAgICAgMEUrMyAgICAtPiAgMEUrMworZGRpbnR4MTM3IHRvaW50ZWdyYWx4ICAgICAwRSs0ICAgIC0+ICAwRSs0CitkZGludHgxMzggdG9pbnRlZ3JhbHggICAgIDBFKzUgICAgLT4gIDBFKzUKK2RkaW50eDEzOSB0b2ludGVncmFseCAgICAtMC4wMDAgICAtPiAtMAorZGRpbnR4MTQwIHRvaW50ZWdyYWx4ICAgIC0wLjAwICAgIC0+IC0wCitkZGludHgxNDEgdG9pbnRlZ3JhbHggICAgLTAuMCAgICAgLT4gLTAKK2RkaW50eDE0MiB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAorZGRpbnR4MTQzIHRvaW50ZWdyYWx4ICAgIC0wRS0zICAgIC0+IC0wCitkZGludHgxNDQgdG9pbnRlZ3JhbHggICAgLTBFLTIgICAgLT4gLTAKK2RkaW50eDE0NSB0b2ludGVncmFseCAgICAtMEUtMSAgICAtPiAtMAorZGRpbnR4MTQ2IHRvaW50ZWdyYWx4ICAgIC0wRS0wICAgIC0+IC0wCitkZGludHgxNDcgdG9pbnRlZ3JhbHggICAgLTBFKzEgICAgLT4gLTBFKzEKK2RkaW50eDE0OCB0b2ludGVncmFseCAgICAtMEUrMiAgICAtPiAtMEUrMgorZGRpbnR4MTQ5IHRvaW50ZWdyYWx4ICAgIC0wRSszICAgIC0+IC0wRSszCitkZGludHgxNTAgdG9pbnRlZ3JhbHggICAgLTBFKzQgICAgLT4gLTBFKzQKK2RkaW50eDE1MSB0b2ludGVncmFseCAgICAtMEUrNSAgICAtPiAtMEUrNQorLS0gcHJvcGFnYXRpbmcgTmFOcworZGRpbnR4MTUyIHRvaW50ZWdyYWx4ICAgTmFOODA4ICAgIC0+ICBOYU44MDgKK2RkaW50eDE1MyB0b2ludGVncmFseCAgc05hTjA4MCAgICAtPiAgTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitkZGludHgxNTQgdG9pbnRlZ3JhbHggIC1OYU44MDggICAgLT4gLU5hTjgwOAorZGRpbnR4MTU1IHRvaW50ZWdyYWx4IC1zTmFOMDgwICAgIC0+IC1OYU44MCAgSW52YWxpZF9vcGVyYXRpb24KK2RkaW50eDE1NiB0b2ludGVncmFseCAgLU5hTiAgICAgICAtPiAtTmFOCitkZGludHgxNTcgdG9pbnRlZ3JhbHggLXNOYU4gICAgICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RkaW50eDIwMCB0b2ludGVncmFseCAgICAgMi4xICAgIC0+IDIgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIwMSB0b2ludGVncmFseCAgIDEwMCAgICAgIC0+IDEwMAorZGRpbnR4MjAyIHRvaW50ZWdyYWx4ICAgMTAwLjAgICAgLT4gMTAwICAgICAgICAgIFJvdW5kZWQKK2RkaW50eDIwMyB0b2ludGVncmFseCAgIDEwMS41ICAgIC0+IDEwMiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIwNCB0b2ludGVncmFseCAgLTEwMS41ICAgIC0+IC0xMDIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIwNSB0b2ludGVncmFseCAgIDEwRSs1ICAgIC0+IDEuMEUrNgorZGRpbnR4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcKK2RkaW50eDIwNyB0b2ludGVncmFseCAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorCisKKy0tIGFsbCByb3VuZGluZyBtb2Rlcworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZGRpbnR4MjEwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIxMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMTIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjEzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIxNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMTUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgaGFsZl91cAorCitkZGludHgyMjAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjIxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIyMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMjMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjI0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIyNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKworZGRpbnR4MjMwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIzMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMzIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjMzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIzNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMzUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgdXAKKworZGRpbnR4MjQwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI0MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNDIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjQzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI0NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNDUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZG93bgorCitkZGludHgyNTAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjUxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI1MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNTMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjU0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI1NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCisKK2RkaW50eDI2MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNjEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjYyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI2MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNjQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjY1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGZsb29yCisKK2RkaW50eDI3MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNzEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjcyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI3MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNzQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4Mjc1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMKK2RkaW50eDMwMCB0b2ludGVncmFseCAtMjE0NzQ4MzY0NiAgLT4gLTIxNDc0ODM2NDYKK2RkaW50eDMwMSB0b2ludGVncmFseCAtMjE0NzQ4MzY0NyAgLT4gLTIxNDc0ODM2NDcKK2RkaW50eDMwMiB0b2ludGVncmFseCAtMjE0NzQ4MzY0OCAgLT4gLTIxNDc0ODM2NDgKK2RkaW50eDMwMyB0b2ludGVncmFseCAtMjE0NzQ4MzY0OSAgLT4gLTIxNDc0ODM2NDkKK2RkaW50eDMwNCB0b2ludGVncmFseCAgMjE0NzQ4MzY0NiAgLT4gIDIxNDc0ODM2NDYKK2RkaW50eDMwNSB0b2ludGVncmFseCAgMjE0NzQ4MzY0NyAgLT4gIDIxNDc0ODM2NDcKK2RkaW50eDMwNiB0b2ludGVncmFseCAgMjE0NzQ4MzY0OCAgLT4gIDIxNDc0ODM2NDgKK2RkaW50eDMwNyB0b2ludGVncmFseCAgMjE0NzQ4MzY0OSAgLT4gIDIxNDc0ODM2NDkKK2RkaW50eDMwOCB0b2ludGVncmFseCAgNDI5NDk2NzI5NCAgLT4gIDQyOTQ5NjcyOTQKK2RkaW50eDMwOSB0b2ludGVncmFseCAgNDI5NDk2NzI5NSAgLT4gIDQyOTQ5NjcyOTUKK2RkaW50eDMxMCB0b2ludGVncmFseCAgNDI5NDk2NzI5NiAgLT4gIDQyOTQ5NjcyOTYKK2RkaW50eDMxMSB0b2ludGVncmFseCAgNDI5NDk2NzI5NyAgLT4gIDQyOTQ5NjcyOTcKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkWG9yLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRYb3IuZGVjVGVzdAppbmRleCAzYzU1NTQ4Li4xMzFjN2ViIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRYb3IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRYb3IuZGVjVGVzdApAQCAtMSwzMzcgKzEsMzM3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFhvci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIFhPUiBmb3IgZGVjRG91YmxlcyAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQ0KLWRkeG9yMDAxIHhvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMA0KLWRkeG9yMDAyIHhvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQ0KLWRkeG9yMDAzIHhvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQ0KLWRkeG9yMDA0IHhvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMA0KLWRkeG9yMDA1IHhvciAgICAgICAgICAxMTAwIDEwMTAgLT4gIDExMA0KLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQotZGR4b3IwMDYgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLWRkeG9yMDA3IHhvciAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwDQotZGR4b3IwMDggeG9yIDEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDANCi1kZHhvcjAwOSB4b3IgMTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotZGR4b3IwMTAgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLWRkeG9yMDExIHhvciAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwDQotZGR4b3IwMTIgeG9yIDAxMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDANCi1kZHhvcjAxMyB4b3IgMDEwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotDQotLS0gVmFyaW91cyBsZW5ndGhzDQotLS0gICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2DQotZGR4b3IwMjEgeG9yIDExMTExMTExMTAwMDAwMDAgICAgIDExMTExMTExMTAwMDAwMDAgIC0+ICAwDQotZGR4b3IwMjIgeG9yICAxMTExMTExMTAwMDAwMDAgICAgICAxMTExMTExMTAwMDAwMDAgIC0+ICAwDQotZGR4b3IwMjMgeG9yICAgMTExMTExMTAwMDAwMDAgICAgICAgMTExMTExMTAwMDAwMDAgIC0+ICAwDQotZGR4b3IwMjQgeG9yICAgIDExMTExMTAwMDAwMDAgICAgICAgIDExMTExMTAwMDAwMDAgIC0+ICAwDQotZGR4b3IwMjUgeG9yICAgICAxMTExMTAwMDAwMDAgICAgICAgICAxMTExMTAwMDAwMDAgIC0+ICAwDQotZGR4b3IwMjYgeG9yICAgICAgMTExMTAwMDAwMDAgICAgICAgICAgMTExMTAwMDAwMDAgIC0+ICAwDQotZGR4b3IwMjcgeG9yICAgICAgIDExMTAwMDAwMDAgICAgICAgICAgIDExMTAwMDAwMDAgIC0+ICAwDQotZGR4b3IwMjggeG9yICAgICAgICAxMTAwMDAwMDAgICAgICAgICAgICAxMTAwMDAwMDAgIC0+ICAwDQotZGR4b3IwMjkgeG9yICAgICAgICAgMTAwMDAwMDAgICAgICAgICAgICAgMTAwMDAwMDAgIC0+ICAwDQotZGR4b3IwMzAgeG9yICAgICAgICAgIDEwMDAwMDAgICAgICAgICAgICAgIDEwMDAwMDAgIC0+ICAwDQotZGR4b3IwMzEgeG9yICAgICAgICAgICAxMDAwMDAgICAgICAgICAgICAgICAxMDAwMDAgIC0+ICAwDQotZGR4b3IwMzIgeG9yICAgICAgICAgICAgMTAwMDAgICAgICAgICAgICAgICAgMTAwMDAgIC0+ICAwDQotZGR4b3IwMzMgeG9yICAgICAgICAgICAgIDEwMDAgICAgICAgICAgICAgICAgIDEwMDAgIC0+ICAwDQotZGR4b3IwMzQgeG9yICAgICAgICAgICAgICAxMDAgICAgICAgICAgICAgICAgICAxMDAgIC0+ICAwDQotZGR4b3IwMzUgeG9yICAgICAgICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAgMTAgIC0+ICAwDQotZGR4b3IwMzYgeG9yICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgIDEgIC0+ICAwDQotDQotZGR4b3IwNDAgeG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMDAwMDAwMDAwDQotZGR4b3IwNDEgeG9yICAxMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMTAwMDAwMDAwDQotZGR4b3IwNDIgeG9yICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTAwMDAwMDAwDQotZGR4b3IwNDMgeG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTAxDQotZGR4b3IwNDQgeG9yICAgIDExMTExMSAgICAgMTAwMDAwMTAwICAtPiAgMTAwMTExMDExDQotZGR4b3IwNDUgeG9yICAgICAxMTExMSAgICAgMTAwMDAxMDAwICAtPiAgMTAwMDEwMTExDQotZGR4b3IwNDYgeG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExDQotZGR4b3IwNDcgeG9yICAgICAgIDExMSAgICAgMTAwMTAwMDAwICAtPiAgMTAwMTAwMTExDQotZGR4b3IwNDggeG9yICAgICAgICAxMSAgICAgMTAxMDAwMDAwICAtPiAgMTAxMDAwMDExDQotZGR4b3IwNDkgeG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxDQotDQotZGR4b3IwNTAgeG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTEwDQotZGR4b3IwNTEgeG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTANCi1kZHhvcjA1MiB4b3IgICAxMTExMTExMSAgMSAgLT4gIDExMTExMTEwDQotZGR4b3IwNTMgeG9yICAgIDExMTExMTEgIDEgIC0+ICAxMTExMTEwDQotZGR4b3IwNTQgeG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTANCi1kZHhvcjA1NSB4b3IgICAgICAxMTExMSAgMSAgLT4gIDExMTEwDQotZGR4b3IwNTYgeG9yICAgICAgIDExMTEgIDEgIC0+ICAxMTEwDQotZGR4b3IwNTcgeG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTANCi1kZHhvcjA1OCB4b3IgICAgICAgICAxMSAgMSAgLT4gIDEwDQotZGR4b3IwNTkgeG9yICAgICAgICAgIDEgIDEgIC0+ICAwDQotDQotZGR4b3IwNjAgeG9yIDExMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTExDQotZGR4b3IwNjEgeG9yICAxMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTENCi1kZHhvcjA2MiB4b3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExDQotZGR4b3IwNjMgeG9yICAgIDExMTExMTEgIDAgIC0+ICAxMTExMTExDQotZGR4b3IwNjQgeG9yICAgICAxMTExMTEgIDAgIC0+ICAxMTExMTENCi1kZHhvcjA2NSB4b3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExDQotZGR4b3IwNjYgeG9yICAgICAgIDExMTEgIDAgIC0+ICAxMTExDQotZGR4b3IwNjcgeG9yICAgICAgICAxMTEgIDAgIC0+ICAxMTENCi1kZHhvcjA2OCB4b3IgICAgICAgICAxMSAgMCAgLT4gIDExDQotZGR4b3IwNjkgeG9yICAgICAgICAgIDEgIDAgIC0+ICAxDQotDQotZGR4b3IwNzAgeG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEwDQotZGR4b3IwNzEgeG9yIDEgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTANCi1kZHhvcjA3MiB4b3IgMSAgICAxMTExMTExMSAgLT4gIDExMTExMTEwDQotZGR4b3IwNzMgeG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTEwDQotZGR4b3IwNzQgeG9yIDEgICAgICAxMTExMTEgIC0+ICAxMTExMTANCi1kZHhvcjA3NSB4b3IgMSAgICAgICAxMTExMSAgLT4gIDExMTEwDQotZGR4b3IwNzYgeG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTEwDQotZGR4b3IwNzcgeG9yIDEgICAgICAgICAxMTEgIC0+ICAxMTANCi1kZHhvcjA3OCB4b3IgMSAgICAgICAgICAxMSAgLT4gIDEwDQotZGR4b3IwNzkgeG9yIDEgICAgICAgICAgIDEgIC0+ICAwDQotDQotZGR4b3IwODAgeG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTExDQotZGR4b3IwODEgeG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1kZHhvcjA4MiB4b3IgMCAgICAxMTExMTExMSAgLT4gIDExMTExMTExDQotZGR4b3IwODMgeG9yIDAgICAgIDExMTExMTEgIC0+ICAxMTExMTExDQotZGR4b3IwODQgeG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTENCi1kZHhvcjA4NSB4b3IgMCAgICAgICAxMTExMSAgLT4gIDExMTExDQotZGR4b3IwODYgeG9yIDAgICAgICAgIDExMTEgIC0+ICAxMTExDQotZGR4b3IwODcgeG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTENCi1kZHhvcjA4OCB4b3IgMCAgICAgICAgICAxMSAgLT4gIDExDQotZGR4b3IwODkgeG9yIDAgICAgICAgICAgIDEgIC0+ICAxDQotDQotZGR4b3IwOTAgeG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTAwMDEwMDAwDQotZGR4b3IwOTEgeG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgIDEwMDEwMDAwDQotZGR4b3IwOTIgeG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgICAxMDEwMDAwDQotZGR4b3IwOTMgeG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgICAgMTEwMDAwDQotZGR4b3IwOTQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwDQotZGR4b3IwOTUgeG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgICAgIDExMDAwDQotZGR4b3IwOTYgeG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgICAgIDEwMTAwDQotZGR4b3IwOTcgeG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgICAgIDEwMDEwDQotZGR4b3IwOTggeG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgICAgIDEwMDAxDQotDQotZGR4b3IxMDAgeG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTAwMDEwMDAwDQotZGR4b3IxMDEgeG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgIDEwMDEwMDAwDQotZGR4b3IxMDIgeG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgICAxMDEwMDAwDQotZGR4b3IxMDMgeG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgICAgMTEwMDAwDQotZGR4b3IxMDQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwDQotZGR4b3IxMDUgeG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgICAgIDExMDAwDQotZGR4b3IxMDYgeG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgICAgIDEwMTAwDQotZGR4b3IxMDcgeG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgICAgIDEwMDEwDQotZGR4b3IxMDggeG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgICAgIDEwMDAxDQotDQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zDQotZGR4b3IyMjAgeG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMjEgeG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMjIgeG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMjMgeG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMjQgeG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMjUgeG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMjYgeG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMjcgeG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMjggeG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMjkgeG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMzAgeG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMzEgeG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyMzIgeG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYSBmZXcgcmFuZG9tcw0KLWRkeG9yMjQwIHhvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjQxIHhvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjQyIHhvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjQzIHhvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjQ0IHhvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNEDQotZGR4b3IyNTAgeG9yICAyMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjUxIHhvciAgNzAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI1MiB4b3IgIDgwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNTMgeG9yICA5MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjU0IHhvciAgMjAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI1NSB4b3IgIDcwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNTYgeG9yICA4MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjU3IHhvciAgOTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI1OCB4b3IgIDEwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNTkgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjYwIHhvciAgMTAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI2MSB4b3IgIDEwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNjIgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjYzIHhvciAgMDAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI2NCB4b3IgIDAwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNjUgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNELTENCi1kZHhvcjI3MCB4b3IgIDAyMDAwMDEwMDAwMDAwMDAgMTAwMDEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNzEgeG9yICAwNzAwMDAwMTAwMDAwMDAwIDEwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjcyIHhvciAgMDgwMDAwMDAxMDAwMDAwMCAxMDAwMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI3MyB4b3IgIDA5MDAwMDAwMDEwMDAwMDAgMTAwMDAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNzQgeG9yICAxMDAwMDAwMDAwMTAwMDAwIDAyMDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjc1IHhvciAgMTAwMDAwMDAwMDAxMDAwMCAwNzAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI3NiB4b3IgIDEwMDAwMDAwMDAwMDEwMDAgMDgwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNzcgeG9yICAxMDAwMDAwMDAwMDAwMTAwIDA5MDAwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTFNEDQotZGR4b3IyODAgeG9yICAwMDEwMDAwMDAwMDAwMDAyIDEwMDAwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjgxIHhvciAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI4MiB4b3IgIDAwMDAxMDAwMDAwMDAwMDggMTAwMDAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyODMgeG9yICAwMDAwMDEwMDAwMDAwMDA5IDEwMDAxMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjg0IHhvciAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI4NSB4b3IgIDEwMDAwMDAxMDAwMDAwMDAgMDAxMDAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyODYgeG9yICAxMDAwMDAwMDEwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjg3IHhvciAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1pZGRpZQ0KLWRkeG9yMjg4IHhvciAgMDAxMDAwMDAyMDAwMDAwMCAxMDAwMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI4OSB4b3IgIDAwMDEwMDAwNzAwMDAwMDEgMTAwMDAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyOTAgeG9yICAwMDAwMTAwMDgwMDAwMDEwIDEwMDAwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjkxIHhvciAgMDAwMDAxMDA5MDAwMDEwMCAxMDAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI5MiB4b3IgIDEwMDAwMDEwMDAwMDEwMDAgMDAwMDAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyOTMgeG9yICAxMDAwMDAwMTAwMDEwMDAwIDAwMDAwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjk0IHhvciAgMTAwMDAwMDAxMDEwMDAwMCAwMDAwMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI5NSB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgMDAwMDAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc2lnbnMNCi1kZHhvcjI5NiB4b3IgLTEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjk3IHhvciAtMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyOTggeG9yICAxMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI5OSB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDAwMTAwMDAxMDANCi0NCi0tLSBObWF4LCBObWluLCBOdGlueS1saWtlDQotZGR4b3IzMzEgeG9yICAyICAgOS45OTk5OTk5OUUrMjk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjMzMiB4b3IgIDMgICAxRS0yOTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzMzIHhvciAgNCAgIDEuMDAwMDAwMDBFLTI5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzMzQgeG9yICA1ICAgMUUtMjAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjMzNSB4b3IgIDYgICAtMUUtMjAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzM2IHhvciAgNyAgIC0xLjAwMDAwMDAwRS0yOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzMzcgeG9yICA4ICAgLTFFLTI5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjMzOCB4b3IgIDkgICAtOS45OTk5OTk5OUUrMjk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzQxIHhvciAgOS45OTk5OTk5OUUrMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNDIgeG9yICAxRS0yOTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM0MyB4b3IgIDEuMDAwMDAwMDBFLTI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzQ0IHhvciAgMUUtMjA4ICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNDUgeG9yICAtMUUtMjA3ICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM0NiB4b3IgIC0xLjAwMDAwMDAwRS0yOTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzQ3IHhvciAgLTFFLTI5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNDggeG9yICAtOS45OTk5OTk5OUUrMjk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMNCi1kZHhvcjM2MSB4b3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzYyIHhvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNjMgeG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM2NCB4b3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzY1IHhvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNjYgeG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM3MSB4b3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzcyIHhvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNzMgeG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM3NCB4b3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzc1IHhvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNzYgeG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yDQotZGR4b3I3ODAgeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjc4MSB4b3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yNzgyIHhvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I3ODMgeG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjc4NCB4b3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yNzg1IHhvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I3ODYgeG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjc4NyB4b3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yNzg4IHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I3ODkgeG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjc5MCB4b3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yNzkxIHhvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I3OTIgeG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjc5MyB4b3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yNzk0IHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGR4b3I4MDAgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgwMSB4b3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODAyIHhvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MDMgeG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgwNCB4b3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODA1IHhvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MDYgeG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgwNyB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODA4IHhvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MDkgeG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgxMCB4b3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODExIHhvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MTIgeG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgxMyB4b3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODE0IHhvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MTUgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZHhvcjgyMSB4b3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODIyIHhvciAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MjMgeG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgyNCB4b3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODI1IHhvciAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MjYgeG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgyNyB4b3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODI4IHhvciAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MjkgeG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgzMCB4b3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODMxIHhvciAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MzIgeG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgzMyB4b3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODM0IHhvciAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MzUgeG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgzNiB4b3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODM3IHhvciAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGR4b3I4NDEgeG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODQyIHhvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg0MyB4b3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NDQgeG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODQ1IHhvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg0NiB4b3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NDcgeG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODQ4IHhvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg0OSB4b3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NTAgeG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODUxIHhvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg1MiB4b3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NTMgeG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODU0IHhvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg1NSB4b3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NTYgeG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODU3IHhvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg1OCB4b3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NTkgeG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZHhvcjg2MSB4b3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODYyIHhvciArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NjMgeG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg2NCB4b3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODY1IHhvciAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NjYgeG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg2NyB4b3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODY4IHhvciAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NjkgeG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg3MSB4b3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODcyIHhvciAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NzMgeG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg3NCB4b3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODc1IHhvciAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NzYgeG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg3NyB4b3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODc4IHhvciAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NzkgeG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg4MCB4b3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODgxIHhvciArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4ODIgeG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg4MyB4b3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODg0IHhvciAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4ODUgeG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkWG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgWE9SIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkZHhvcjAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2RkeG9yMDAyIHhvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQorZGR4b3IwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCitkZHhvcjAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDAKK2RkeG9yMDA1IHhvciAgICAgICAgICAxMTAwIDEwMTAgLT4gIDExMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2RkeG9yMDA2IHhvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2RkeG9yMDA3IHhvciAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCitkZHhvcjAwOCB4b3IgMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGR4b3IwMDkgeG9yIDEwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZGR4b3IwMTAgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZGR4b3IwMTEgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKK2RkeG9yMDEyIHhvciAwMTAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwCitkZHhvcjAxMyB4b3IgMDEwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2CitkZHhvcjAyMSB4b3IgMTExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDIyIHhvciAgMTExMTExMTEwMDAwMDAwICAgICAgMTExMTExMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjMgeG9yICAgMTExMTExMTAwMDAwMDAgICAgICAgMTExMTExMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAyNCB4b3IgICAgMTExMTExMDAwMDAwMCAgICAgICAgMTExMTExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDI1IHhvciAgICAgMTExMTEwMDAwMDAwICAgICAgICAgMTExMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjYgeG9yICAgICAgMTExMTAwMDAwMDAgICAgICAgICAgMTExMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAyNyB4b3IgICAgICAgMTExMDAwMDAwMCAgICAgICAgICAgMTExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDI4IHhvciAgICAgICAgMTEwMDAwMDAwICAgICAgICAgICAgMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjkgeG9yICAgICAgICAgMTAwMDAwMDAgICAgICAgICAgICAgMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAzMCB4b3IgICAgICAgICAgMTAwMDAwMCAgICAgICAgICAgICAgMTAwMDAwMCAgLT4gIDAKK2RkeG9yMDMxIHhvciAgICAgICAgICAgMTAwMDAwICAgICAgICAgICAgICAgMTAwMDAwICAtPiAgMAorZGR4b3IwMzIgeG9yICAgICAgICAgICAgMTAwMDAgICAgICAgICAgICAgICAgMTAwMDAgIC0+ICAwCitkZHhvcjAzMyB4b3IgICAgICAgICAgICAgMTAwMCAgICAgICAgICAgICAgICAgMTAwMCAgLT4gIDAKK2RkeG9yMDM0IHhvciAgICAgICAgICAgICAgMTAwICAgICAgICAgICAgICAgICAgMTAwICAtPiAgMAorZGR4b3IwMzUgeG9yICAgICAgICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAgMTAgIC0+ICAwCitkZHhvcjAzNiB4b3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gIDAKKworZGR4b3IwNDAgeG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMDAwMDAwMDAwCitkZHhvcjA0MSB4b3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDAKK2RkeG9yMDQyIHhvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDEwMDAwMDAwMAorZGR4b3IwNDMgeG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTAxCitkZHhvcjA0NCB4b3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTEwMTEKK2RkeG9yMDQ1IHhvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMDExMQorZGR4b3IwNDYgeG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCitkZHhvcjA0NyB4b3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTEKK2RkeG9yMDQ4IHhvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQorZGR4b3IwNDkgeG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCisKK2RkeG9yMDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExMAorZGR4b3IwNTEgeG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKK2RkeG9yMDUyIHhvciAgIDExMTExMTExICAxICAtPiAgMTExMTExMTAKK2RkeG9yMDUzIHhvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMAorZGR4b3IwNTQgeG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTAKK2RkeG9yMDU1IHhvciAgICAgIDExMTExICAxICAtPiAgMTExMTAKK2RkeG9yMDU2IHhvciAgICAgICAxMTExICAxICAtPiAgMTExMAorZGR4b3IwNTcgeG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTAKK2RkeG9yMDU4IHhvciAgICAgICAgIDExICAxICAtPiAgMTAKK2RkeG9yMDU5IHhvciAgICAgICAgICAxICAxICAtPiAgMAorCitkZHhvcjA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMTEKK2RkeG9yMDYxIHhvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExCitkZHhvcjA2MiB4b3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCitkZHhvcjA2MyB4b3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTEKK2RkeG9yMDY0IHhvciAgICAgMTExMTExICAwICAtPiAgMTExMTExCitkZHhvcjA2NSB4b3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCitkZHhvcjA2NiB4b3IgICAgICAgMTExMSAgMCAgLT4gIDExMTEKK2RkeG9yMDY3IHhvciAgICAgICAgMTExICAwICAtPiAgMTExCitkZHhvcjA2OCB4b3IgICAgICAgICAxMSAgMCAgLT4gIDExCitkZHhvcjA2OSB4b3IgICAgICAgICAgMSAgMCAgLT4gIDEKKworZGR4b3IwNzAgeG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEwCitkZHhvcjA3MSB4b3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAorZGR4b3IwNzIgeG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMAorZGR4b3IwNzMgeG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTEwCitkZHhvcjA3NCB4b3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMAorZGR4b3IwNzUgeG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMAorZGR4b3IwNzYgeG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTEwCitkZHhvcjA3NyB4b3IgMSAgICAgICAgIDExMSAgLT4gIDExMAorZGR4b3IwNzggeG9yIDEgICAgICAgICAgMTEgIC0+ICAxMAorZGR4b3IwNzkgeG9yIDEgICAgICAgICAgIDEgIC0+ICAwCisKK2RkeG9yMDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExMQorZGR4b3IwODEgeG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2RkeG9yMDgyIHhvciAwICAgIDExMTExMTExICAtPiAgMTExMTExMTEKK2RkeG9yMDgzIHhvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQorZGR4b3IwODQgeG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTEKK2RkeG9yMDg1IHhvciAwICAgICAgIDExMTExICAtPiAgMTExMTEKK2RkeG9yMDg2IHhvciAwICAgICAgICAxMTExICAtPiAgMTExMQorZGR4b3IwODcgeG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTEKK2RkeG9yMDg4IHhvciAwICAgICAgICAgIDExICAtPiAgMTEKK2RkeG9yMDg5IHhvciAwICAgICAgICAgICAxICAtPiAgMQorCitkZHhvcjA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDAKK2RkeG9yMDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMAorZGR4b3IwOTIgeG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgICAxMDEwMDAwCitkZHhvcjA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDAKK2RkeG9yMDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMAorZGR4b3IwOTUgeG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgICAgIDExMDAwCitkZHhvcjA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDAKK2RkeG9yMDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMAorZGR4b3IwOTggeG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgICAgIDEwMDAxCisKK2RkeG9yMTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMAorZGR4b3IxMDEgeG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgIDEwMDEwMDAwCitkZHhvcjEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDAKK2RkeG9yMTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMAorZGR4b3IxMDQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCitkZHhvcjEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDAKK2RkeG9yMTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMAorZGR4b3IxMDcgeG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgICAgIDEwMDEwCitkZHhvcjEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDEKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkZHhvcjIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjIgeG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjUgeG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjggeG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMzEgeG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2RkeG9yMjQwIHhvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjQzIHhvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZGR4b3IyNTAgeG9yICAyMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTEgeG9yICA3MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTIgeG9yICA4MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTMgeG9yICA5MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTQgeG9yICAyMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTUgeG9yICA3MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTYgeG9yICA4MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTcgeG9yICA5MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTggeG9yICAxMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTkgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjAgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjEgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjIgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjMgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjQgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjUgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZGR4b3IyNzAgeG9yICAwMjAwMDAxMDAwMDAwMDAwIDEwMDAxMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzEgeG9yICAwNzAwMDAwMTAwMDAwMDAwIDEwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzIgeG9yICAwODAwMDAwMDEwMDAwMDAwIDEwMDAwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzMgeG9yICAwOTAwMDAwMDAxMDAwMDAwIDEwMDAwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzQgeG9yICAxMDAwMDAwMDAwMTAwMDAwIDAyMDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzUgeG9yICAxMDAwMDAwMDAwMDEwMDAwIDA3MDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzYgeG9yICAxMDAwMDAwMDAwMDAxMDAwIDA4MDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzcgeG9yICAxMDAwMDAwMDAwMDAwMTAwIDA5MDAwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2RkeG9yMjgwIHhvciAgMDAxMDAwMDAwMDAwMDAwMiAxMDAwMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjgxIHhvciAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjgyIHhvciAgMDAwMDEwMDAwMDAwMDAwOCAxMDAwMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjgzIHhvciAgMDAwMDAxMDAwMDAwMDAwOSAxMDAwMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjg0IHhvciAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjg1IHhvciAgMTAwMDAwMDEwMDAwMDAwMCAwMDEwMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjg2IHhvciAgMTAwMDAwMDAxMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjg3IHhvciAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitkZHhvcjI4OCB4b3IgIDAwMTAwMDAwMjAwMDAwMDAgMTAwMDAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI4OSB4b3IgIDAwMDEwMDAwNzAwMDAwMDEgMTAwMDAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5MCB4b3IgIDAwMDAxMDAwODAwMDAwMTAgMTAwMDAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5MSB4b3IgIDAwMDAwMTAwOTAwMDAxMDAgMTAwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5MiB4b3IgIDEwMDAwMDEwMDAwMDEwMDAgMDAwMDAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5MyB4b3IgIDEwMDAwMDAxMDAwMTAwMDAgMDAwMDAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5NCB4b3IgIDEwMDAwMDAwMTAxMDAwMDAgMDAwMDAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5NSB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgMDAwMDAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworZGR4b3IyOTYgeG9yIC0xMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjk3IHhvciAtMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5OCB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyOTkgeG9yICAxMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAwMDEwMDAwMTAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2RkeG9yMzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzI5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjMzMiB4b3IgIDMgICAxRS0yOTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtMjk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzM0IHhvciAgNSAgIDFFLTIwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjMzNSB4b3IgIDYgICAtMUUtMjAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTI5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzM3IHhvciAgOCAgIC0xRS0yOTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjMzOCB4b3IgIDkgICAtOS45OTk5OTk5OUUrMjk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDEgeG9yICA5Ljk5OTk5OTk5RSsyOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQyIHhvciAgMUUtMjk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM0MyB4b3IgIDEuMDAwMDAwMDBFLTI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDQgeG9yICAxRS0yMDggICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQ1IHhvciAgLTFFLTIwNyAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM0NiB4b3IgIC0xLjAwMDAwMDAwRS0yOTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDcgeG9yICAtMUUtMjk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQ4IHhvciAgLTkuOTk5OTk5OTlFKzI5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZGR4b3IzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzYyIHhvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzY1IHhvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzcyIHhvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzc1IHhvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkZHhvcjc4MCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODEgeG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzgyIHhvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4MyB4b3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODQgeG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzg1IHhvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4NiB4b3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODcgeG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzg4IHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4OSB4b3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3OTAgeG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzkxIHhvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc5MiB4b3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3OTMgeG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzk0IHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkeG9yODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwMSB4b3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwNCB4b3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwNyB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgxMCB4b3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgxMyB4b3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkeG9yODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjMgeG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjYgeG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjkgeG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MzIgeG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MzUgeG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHhvcjg0MSB4b3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0MiB4b3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0MyB4b3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0NCB4b3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0NSB4b3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0NiB4b3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0NyB4b3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0OCB4b3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0OSB4b3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1MCB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1MSB4b3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1MiB4b3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1MyB4b3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1NCB4b3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1NSB4b3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1NiB4b3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1NyB4b3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1OCB4b3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1OSB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkeG9yODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjMgeG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjYgeG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjkgeG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzMgeG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzYgeG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzkgeG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4ODIgeG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4ODUgeG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFicy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWJzLmRlY1Rlc3QKaW5kZXggZjkxMTlhOS4uYmFhYTA2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWJzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWJzLmRlY1Rlc3QKQEAgLTEsMTI2ICsxLDEyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFBYnMuZGVjVGVzdCAtLSBkZWNRdWFkIGFic29sdXRlIHZhbHVlLCBoZWVkaW5nIHNOYU4gICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kcWFiczAwMSBhYnMgJzEnICAgICAgLT4gJzEnDQotZHFhYnMwMDIgYWJzICctMScgICAgIC0+ICcxJw0KLWRxYWJzMDAzIGFicyAnMS4wMCcgICAtPiAnMS4wMCcNCi1kcWFiczAwNCBhYnMgJy0xLjAwJyAgLT4gJzEuMDAnDQotZHFhYnMwMDUgYWJzICcwJyAgICAgIC0+ICcwJw0KLWRxYWJzMDA2IGFicyAnMC4wMCcgICAtPiAnMC4wMCcNCi1kcWFiczAwNyBhYnMgJzAwLjAnICAgLT4gJzAuMCcNCi1kcWFiczAwOCBhYnMgJzAwLjAwJyAgLT4gJzAuMDAnDQotZHFhYnMwMDkgYWJzICcwMCcgICAgIC0+ICcwJw0KLQ0KLWRxYWJzMDEwIGFicyAnLTInICAgICAtPiAnMicNCi1kcWFiczAxMSBhYnMgJzInICAgICAgLT4gJzInDQotZHFhYnMwMTIgYWJzICctMi4wMCcgIC0+ICcyLjAwJw0KLWRxYWJzMDEzIGFicyAnMi4wMCcgICAtPiAnMi4wMCcNCi1kcWFiczAxNCBhYnMgJy0wJyAgICAgLT4gJzAnDQotZHFhYnMwMTUgYWJzICctMC4wMCcgIC0+ICcwLjAwJw0KLWRxYWJzMDE2IGFicyAnLTAwLjAnICAtPiAnMC4wJw0KLWRxYWJzMDE3IGFicyAnLTAwLjAwJyAtPiAnMC4wMCcNCi1kcWFiczAxOCBhYnMgJy0wMCcgICAgLT4gJzAnDQotDQotZHFhYnMwMjAgYWJzICctMjAwMDAwMCcgLT4gJzIwMDAwMDAnDQotZHFhYnMwMjEgYWJzICcyMDAwMDAwJyAgLT4gJzIwMDAwMDAnDQotDQotZHFhYnMwMzAgYWJzICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnDQotZHFhYnMwMzEgYWJzICctMC4xJyAgICAgICAgICAgIC0+ICcwLjEnDQotZHFhYnMwMzIgYWJzICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJw0KLWRxYWJzMDMzIGFicyAnLTAuMDEnICAgICAgICAgICAtPiAnMC4wMScNCi1kcWFiczAzNCBhYnMgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJw0KLWRxYWJzMDM1IGFicyAnLTAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnDQotZHFhYnMwMzYgYWJzICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScNCi1kcWFiczAzNyBhYnMgJy0wLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJw0KLWRxYWJzMDM4IGFicyAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInDQotZHFhYnMwMzkgYWJzICctMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicNCi0NCi0tLSBleGFtcGxlcyBmcm9tIGRlY0FyaXRoDQotZHFhYnMwNDAgYWJzICcyLjEnICAgICAtPiAgJzIuMScNCi1kcWFiczA0MSBhYnMgJy0xMDAnICAgIC0+ICAnMTAwJw0KLWRxYWJzMDQyIGFicyAnMTAxLjUnICAgLT4gICcxMDEuNScNCi1kcWFiczA0MyBhYnMgJy0xMDEuNScgIC0+ICAnMTAxLjUnDQotDQotLS0gbW9yZSBmaXhlZCwgcG90ZW50aWFsIExIUyBzd2Fwcy9vdmVybGF5cyBpZiBkb25lIGJ5IHN1YnRyYWN0IDANCi1kcWFiczA2MCBhYnMgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3Jw0KLWRxYWJzMDYxIGFicyAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3Jw0KLWRxYWJzMDYyIGFicyAnLTU2MjY3RS0yJyAgIC0+ICc1NjIuNjcnDQotZHFhYnMwNjMgYWJzICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycNCi1kcWFiczA2NSBhYnMgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnDQotDQotLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93DQotDQotLS0gbG9uZyBvcGVyYW5kIHRlc3RzDQotZHFhYnMzMjEgYWJzIDEyMzQ1Njc4OTAxMjM0NTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWFiczMyMiBhYnMgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwDQotZHFhYnMzMjMgYWJzIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwDQotZHFhYnMzMjQgYWJzIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwDQotZHFhYnMzMjUgYWJzIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxDQotZHFhYnMzMjYgYWJzIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQ0KLWRxYWJzMzI3IGFicyAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5Ng0KLQ0KLS0tIHplcm9zDQotZHFhYnMxMTEgYWJzICAgICAgICAgIDAgICAtPiAwDQotZHFhYnMxMTIgYWJzICAgICAgICAgLTAgICAtPiAwDQotZHFhYnMxMTMgYWJzICAgICAgIDBFKzYgICAtPiAwRSs2DQotZHFhYnMxMTQgYWJzICAgICAgLTBFKzYgICAtPiAwRSs2DQotZHFhYnMxMTUgYWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDANCi1kcWFiczExNiBhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KLWRxYWJzMTE3IGFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxDQotZHFhYnMxMTggYWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWRxYWJzMTIxIGFicyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcWFiczEyMiBhYnMgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFhYnMxMjMgYWJzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KLWRxYWJzMTI0IGFicyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRxYWJzMTMxIGFicyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcWFiczEzMiBhYnMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMNCi1kcWFiczEzMyBhYnMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFhYnMxMzQgYWJzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2IFN1Ym5vcm1hbA0KLQ0KLWRxYWJzMTM1IGFicyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwNCi1kcWFiczEzNiBhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFhYnMxMzcgYWJzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzDQotZHFhYnMxMzggYWJzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLQ0KLS0tIHNwZWNpYWxzDQotZHFhYnM1MjAgYWJzICdJbmYnICAgIC0+ICdJbmZpbml0eScNCi1kcWFiczUyMSBhYnMgJy1JbmYnICAgLT4gJ0luZmluaXR5Jw0KLWRxYWJzNTIyIGFicyAgIE5hTiAgICAtPiAgTmFODQotZHFhYnM1MjMgYWJzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWJzNTI0IGFicyAgIE5hTjIyICAtPiAgTmFOMjINCi1kcWFiczUyNSBhYnMgIHNOYU4zMyAgLT4gIE5hTjMzIEludmFsaWRfb3BlcmF0aW9uDQotZHFhYnM1MjYgYWJzICAtTmFOMjIgIC0+IC1OYU4yMg0KLWRxYWJzNTI3IGFicyAtc05hTjMzICAtPiAtTmFOMzMgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFhYnM5MDAgYWJzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFBYnMuZGVjVGVzdCAtLSBkZWNRdWFkIGFic29sdXRlIHZhbHVlLCBoZWVkaW5nIHNOYU4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkcWFiczAwMSBhYnMgJzEnICAgICAgLT4gJzEnCitkcWFiczAwMiBhYnMgJy0xJyAgICAgLT4gJzEnCitkcWFiczAwMyBhYnMgJzEuMDAnICAgLT4gJzEuMDAnCitkcWFiczAwNCBhYnMgJy0xLjAwJyAgLT4gJzEuMDAnCitkcWFiczAwNSBhYnMgJzAnICAgICAgLT4gJzAnCitkcWFiczAwNiBhYnMgJzAuMDAnICAgLT4gJzAuMDAnCitkcWFiczAwNyBhYnMgJzAwLjAnICAgLT4gJzAuMCcKK2RxYWJzMDA4IGFicyAnMDAuMDAnICAtPiAnMC4wMCcKK2RxYWJzMDA5IGFicyAnMDAnICAgICAtPiAnMCcKKworZHFhYnMwMTAgYWJzICctMicgICAgIC0+ICcyJworZHFhYnMwMTEgYWJzICcyJyAgICAgIC0+ICcyJworZHFhYnMwMTIgYWJzICctMi4wMCcgIC0+ICcyLjAwJworZHFhYnMwMTMgYWJzICcyLjAwJyAgIC0+ICcyLjAwJworZHFhYnMwMTQgYWJzICctMCcgICAgIC0+ICcwJworZHFhYnMwMTUgYWJzICctMC4wMCcgIC0+ICcwLjAwJworZHFhYnMwMTYgYWJzICctMDAuMCcgIC0+ICcwLjAnCitkcWFiczAxNyBhYnMgJy0wMC4wMCcgLT4gJzAuMDAnCitkcWFiczAxOCBhYnMgJy0wMCcgICAgLT4gJzAnCisKK2RxYWJzMDIwIGFicyAnLTIwMDAwMDAnIC0+ICcyMDAwMDAwJworZHFhYnMwMjEgYWJzICcyMDAwMDAwJyAgLT4gJzIwMDAwMDAnCisKK2RxYWJzMDMwIGFicyAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJworZHFhYnMwMzEgYWJzICctMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCitkcWFiczAzMiBhYnMgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCitkcWFiczAzMyBhYnMgJy0wLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCitkcWFiczAzNCBhYnMgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJworZHFhYnMwMzUgYWJzICctMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKK2RxYWJzMDM2IGFicyAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCitkcWFiczAzNyBhYnMgJy0wLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJworZHFhYnMwMzggYWJzICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKK2RxYWJzMDM5IGFicyAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK2RxYWJzMDQwIGFicyAnMi4xJyAgICAgLT4gICcyLjEnCitkcWFiczA0MSBhYnMgJy0xMDAnICAgIC0+ICAnMTAwJworZHFhYnMwNDIgYWJzICcxMDEuNScgICAtPiAgJzEwMS41JworZHFhYnMwNDMgYWJzICctMTAxLjUnICAtPiAgJzEwMS41JworCistLSBtb3JlIGZpeGVkLCBwb3RlbnRpYWwgTEhTIHN3YXBzL292ZXJsYXlzIGlmIGRvbmUgYnkgc3VidHJhY3QgMAorZHFhYnMwNjAgYWJzICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycKK2RxYWJzMDYxIGFicyAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3JworZHFhYnMwNjIgYWJzICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycKK2RxYWJzMDYzIGFicyAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCitkcWFiczA2NSBhYnMgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworCistLSBsb25nIG9wZXJhbmQgdGVzdHMKK2RxYWJzMzIxIGFicyAxMjM0NTY3ODkwMTIzNDU2ICAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWFiczMyMiBhYnMgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitkcWFiczMyMyBhYnMgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK2RxYWJzMzI0IGFicyAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorZHFhYnMzMjUgYWJzIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitkcWFiczMyNiBhYnMgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCitkcWFiczMyNyBhYnMgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKKworLS0gemVyb3MKK2RxYWJzMTExIGFicyAgICAgICAgICAwICAgLT4gMAorZHFhYnMxMTIgYWJzICAgICAgICAgLTAgICAtPiAwCitkcWFiczExMyBhYnMgICAgICAgMEUrNiAgIC0+IDBFKzYKK2RxYWJzMTE0IGFicyAgICAgIC0wRSs2ICAgLT4gMEUrNgorZHFhYnMxMTUgYWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RxYWJzMTE2IGFicyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkcWFiczExNyBhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZHFhYnMxMTggYWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxYWJzMTIxIGFicyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxYWJzMTIyIGFicyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxYWJzMTIzIGFicyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKK2RxYWJzMTI0IGFicyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxYWJzMTMxIGFicyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxYWJzMTMyIGFicyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFhYnMxMzMgYWJzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFhYnMxMzQgYWJzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2IFN1Ym5vcm1hbAorCitkcWFiczEzNSBhYnMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsCitkcWFiczEzNiBhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWFiczEzNyBhYnMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxYWJzMTM4IGFicyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0gc3BlY2lhbHMKK2RxYWJzNTIwIGFicyAnSW5mJyAgICAtPiAnSW5maW5pdHknCitkcWFiczUyMSBhYnMgJy1JbmYnICAgLT4gJ0luZmluaXR5JworZHFhYnM1MjIgYWJzICAgTmFOICAgIC0+ICBOYU4KK2RxYWJzNTIzIGFicyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWJzNTI0IGFicyAgIE5hTjIyICAtPiAgTmFOMjIKK2RxYWJzNTI1IGFicyAgc05hTjMzICAtPiAgTmFOMzMgSW52YWxpZF9vcGVyYXRpb24KK2RxYWJzNTI2IGFicyAgLU5hTjIyICAtPiAtTmFOMjIKK2RxYWJzNTI3IGFicyAtc05hTjMzICAtPiAtTmFOMzMgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworZHFhYnM5MDAgYWJzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBZGQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFkZC5kZWNUZXN0CmluZGV4IGIzYWQ4OTIuLmIxZGY3N2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFkZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFkZC5kZWNUZXN0CkBAIC0xLDEyMTUgKzEsMTIxNSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFBZGQuZGVjVGVzdCAtLSBkZWNRdWFkIGFkZGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUNCi0tLSByZXByZXNlbnRhYmxlIGluIGEgZGVjUXVhZA0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCi1kcWFkZDAwMSBhZGQgMSAgICAgICAxICAgICAgIC0+ICAyDQotZHFhZGQwMDIgYWRkIDIgICAgICAgMyAgICAgICAtPiAgNQ0KLWRxYWRkMDAzIGFkZCAnNS43NScgICczLjMnICAgLT4gIDkuMDUNCi1kcWFkZDAwNCBhZGQgJzUnICAgICAnLTMnICAgIC0+ICAyDQotZHFhZGQwMDUgYWRkICctNScgICAgJy0zJyAgICAtPiAgLTgNCi1kcWFkZDAwNiBhZGQgJy03JyAgICAnMi41JyAgIC0+ICAtNC41DQotZHFhZGQwMDcgYWRkICcwLjcnICAgJzAuMycgICAtPiAgMS4wDQotZHFhZGQwMDggYWRkICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MA0KLWRxYWRkMDA5IGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScNCi1kcWFkZDAxMCBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnDQotDQotLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWFkZDAxMSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwMTIgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1kcWFkZDAxMyBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQwMTQgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDAxNSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5JyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMDE2IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTk5JyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwMTcgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDAxOCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMDE5IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDEnICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwMjAgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDAyMSBhZGQgMCAxIC0+IDENCi1kcWFkZDAyMiBhZGQgMSAxIC0+IDINCi1kcWFkZDAyMyBhZGQgMiAxIC0+IDMNCi1kcWFkZDAyNCBhZGQgMyAxIC0+IDQNCi1kcWFkZDAyNSBhZGQgNCAxIC0+IDUNCi1kcWFkZDAyNiBhZGQgNSAxIC0+IDYNCi1kcWFkZDAyNyBhZGQgNiAxIC0+IDcNCi1kcWFkZDAyOCBhZGQgNyAxIC0+IDgNCi1kcWFkZDAyOSBhZGQgOCAxIC0+IDkNCi1kcWFkZDAzMCBhZGQgOSAxIC0+IDEwDQotDQotLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQotZHFhZGQwMzEgYWRkICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4Jw0KLWRxYWRkMDMyIGFkZCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScNCi1kcWFkZDAzMyBhZGQgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnDQotZHFhZGQwMzQgYWRkICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJw0KLQ0KLWRxYWRkMDM1IGFkZCAnNzAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDAzNiBhZGQgJzcwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMDM3IGFkZCAnNzAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMDM4IGFkZCAnNzAwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDAzOSBhZGQgJzcwMDAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UrMzgnIFJvdW5kZWQNCi0NCi0tLSBzeW1tZXRyeToNCi1kcWFkZDA0MCBhZGQgJzEwMDAwZSszNCcgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwNDEgYWRkICcxMDAwMGUrMzQnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDA0MiBhZGQgJzEwMDAwZSszNCcgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDA0NCBhZGQgJzEwMDAwZSszNCcgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwNDUgYWRkICcxMDAwMGUrMzQnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkDQotDQotLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZw0KLWRxYWRkMDQ2IGFkZCAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3Jw0KLWRxYWRkMDQ3IGFkZCAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcNCi1kcWFkZDA0OCBhZGQgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJw0KLWRxYWRkMDQ5IGFkZCAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJw0KLWRxYWRkMDUwIGFkZCAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcNCi1kcWFkZDA1MSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJw0KLWRxYWRkMDUyIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJw0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCi1kcWFkZDA1MyBhZGQgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJw0KLWRxYWRkMDU0IGFkZCAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJw0KLWRxYWRkMDU1IGFkZCAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJw0KLWRxYWRkMDU2IGFkZCAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycNCi1kcWFkZDA1NyBhZGQgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcNCi0NCi0tLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uDQotZHFhZGQwNjEgYWRkIDEgJzAuMDAwMScgLT4gJzEuMDAwMScNCi1kcWFkZDA2MiBhZGQgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnDQotZHFhZGQwNjMgYWRkIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnDQotZHFhZGQwNjQgYWRkIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScNCi1kcWFkZDA2NSBhZGQgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnDQotDQotLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQ0KLWRxYWRkMDcwIGFkZCAxICAwICAgIC0+IDENCi1kcWFkZDA3MSBhZGQgMSAwLiAgICAtPiAxDQotZHFhZGQwNzIgYWRkIDEgIC4wICAgLT4gMS4wDQotZHFhZGQwNzMgYWRkIDEgMC4wICAgLT4gMS4wDQotZHFhZGQwNzQgYWRkIDEgMC4wMCAgLT4gMS4wMA0KLWRxYWRkMDc1IGFkZCAgMCAgMSAgIC0+IDENCi1kcWFkZDA3NiBhZGQgMC4gIDEgICAtPiAxDQotZHFhZGQwNzcgYWRkICAuMCAxICAgLT4gMS4wDQotZHFhZGQwNzggYWRkIDAuMCAxICAgLT4gMS4wDQotZHFhZGQwNzkgYWRkIDAuMDAgMSAgLT4gMS4wMA0KLQ0KLS0tIHNvbWUgY2Fycmllcw0KLWRxYWRkMDgwIGFkZCA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5DQotZHFhZGQwODEgYWRkIDk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwDQotZHFhZGQwODIgYWRkICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDANCi1kcWFkZDA4MyBhZGQgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwDQotZHFhZGQwODQgYWRkICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwDQotZHFhZGQwODUgYWRkICAgICA5OTk5OSAxICAtPiAxMDAwMDANCi1kcWFkZDA4NiBhZGQgICAgICA5OTk5IDEgIC0+IDEwMDAwDQotZHFhZGQwODcgYWRkICAgICAgIDk5OSAxICAtPiAxMDAwDQotZHFhZGQwODggYWRkICAgICAgICA5OSAxICAtPiAxMDANCi1kcWFkZDA4OSBhZGQgICAgICAgICA5IDEgIC0+IDEwDQotDQotDQotLS0gbW9yZSBMSFMgc3dhcHMNCi1kcWFkZDA5MCBhZGQgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnDQotZHFhZGQwOTEgYWRkICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnDQotZHFhZGQwOTIgYWRkICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycNCi1kcWFkZDA5MyBhZGQgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnDQotZHFhZGQwOTQgYWRkICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3Jw0KLWRxYWRkMDk1IGFkZCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycNCi1kcWFkZDA5NiBhZGQgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnDQotZHFhZGQwOTcgYWRkICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnDQotZHFhZGQwOTggYWRkICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnDQotZHFhZGQwOTkgYWRkICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycNCi1kcWFkZDEwMCBhZGQgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScNCi1kcWFkZDEwMSBhZGQgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1Jw0KLWRxYWRkMTAyIGFkZCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScNCi1kcWFkZDEwMyBhZGQgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnDQotZHFhZGQxMDQgYWRkICctNUUwJyAgICAgICAgIDAgLT4gICctNScNCi1kcWFkZDEwNSBhZGQgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcNCi1kcWFkZDEwNiBhZGQgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnDQotZHFhZGQxMDcgYWRkICctNUUzMycgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCi1kcWFkZDEwOCBhZGQgJy01RTM0JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICBSb3VuZGVkDQotZHFhZGQxMDkgYWRkICctNUUzNScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgUm91bmRlZA0KLWRxYWRkMTEwIGFkZCAnLTVFMzYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgIFJvdW5kZWQNCi1kcWFkZDExMSBhZGQgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkDQotDQotLS0gbW9yZSBSSFMgc3dhcHMNCi1kcWFkZDExMyBhZGQgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycNCi1kcWFkZDExNCBhZGQgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3Jw0KLWRxYWRkMTE2IGFkZCAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycNCi1kcWFkZDExNyBhZGQgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycNCi1kcWFkZDExOSBhZGQgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycNCi1kcWFkZDEyMCBhZGQgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycNCi1kcWFkZDEyMSBhZGQgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycNCi1kcWFkZDEyMiBhZGQgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3Jw0KLWRxYWRkMTIzIGFkZCAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnDQotZHFhZGQxMjQgYWRkIDAgICctNUUtNycgICAgICAtPiAgJy01RS03Jw0KLWRxYWRkMTI1IGFkZCAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnDQotZHFhZGQxMjYgYWRkIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1Jw0KLWRxYWRkMTI3IGFkZCAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1Jw0KLWRxYWRkMTI4IGFkZCAwICAnLTVFLTEnICAgICAgLT4gICctMC41Jw0KLWRxYWRkMTI5IGFkZCAwICAnLTVFMCcgICAgICAgLT4gICctNScNCi1kcWFkZDEzMCBhZGQgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJw0KLWRxYWRkMTMxIGFkZCAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJw0KLWRxYWRkMTMyIGFkZCAwICAnLTVFMzMnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCi1kcWFkZDEzMyBhZGQgMCAgJy01RTM0JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgICBSb3VuZGVkDQotZHFhZGQxMzQgYWRkIDAgICctNUUzNScgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICAgUm91bmRlZA0KLWRxYWRkMTM1IGFkZCAwICAnLTVFMzYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgIFJvdW5kZWQNCi1kcWFkZDEzNiBhZGQgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkDQotDQotLS0gcmVsYXRlZA0KLWRxYWRkMTM3IGFkZCAgMSAgJzBFLTM5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkDQotZHFhZGQxMzggYWRkIC0xICAnMEUtMzknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1kcWFkZDEzOSBhZGQgJzBFLTM5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZA0KLWRxYWRkMTQwIGFkZCAnMEUtMzknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZHFhZGQxNDEgYWRkIDFFKzI5ICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcNCi1kcWFkZDE0MiBhZGQgMUUrMjkgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZA0KLWRxYWRkMTQzIGFkZCAwLjAwMCAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnDQotZHFhZGQxNDQgYWRkIDAuMDAwMCAgMUUrMzAgICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQNCi0NCi0tLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQ0KLWRxYWRkMTQ2IGFkZCAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnDQotZHFhZGQxNDcgYWRkICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnDQotZHFhZGQxNDggYWRkICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnDQotZHFhZGQxNDkgYWRkICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcNCi1kcWFkZDE1MCBhZGQgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcNCi1kcWFkZDE1MSBhZGQgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcNCi1kcWFkZDE1MiBhZGQgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJw0KLWRxYWRkMTUzIGFkZCAnMy4nICAgICcuMycgICAgLT4gICczLjMnDQotZHFhZGQxNTQgYWRkICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycNCi1kcWFkZDE1NSBhZGQgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcNCi1kcWFkZDE1NiBhZGQgJzMnICAgICAnMycgICAgIC0+ICAnNicNCi1kcWFkZDE1NyBhZGQgJzMnICAgICAnKzMnICAgIC0+ICAnNicNCi1kcWFkZDE1OCBhZGQgJzMnICAgICAnLTMnICAgIC0+ICAnMCcNCi1kcWFkZDE1OSBhZGQgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJw0KLWRxYWRkMTYwIGFkZCAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJw0KLQ0KLS0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuDQotZHFhZGQxNjEgYWRkICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5Jw0KLWRxYWRkMTYyIGFkZCAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQotZHFhZGQxNjMgYWRkICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScNCi1kcWFkZDE2NCBhZGQgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknDQotZHFhZGQxNjUgYWRkICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScNCi1kcWFkZDE2NiBhZGQgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJw0KLWRxYWRkMTY3IGFkZCAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQotZHFhZGQxNjggYWRkICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScNCi0NCi1yb3VuZGluZzogaGFsZl91cA0KLWRxYWRkMTcwIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY3JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMTcxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMTcyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY1JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMTczIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY0JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMTc0IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMTc1IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMTc2IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMTc3IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQNCi1kcWFkZDE3OCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0NScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE3OSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0NCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE4MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE4MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE4MiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE4MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkDQotDQotLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZHFhZGQyMDAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5Jw0KLWRxYWRkMjAxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMDIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIwMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjA0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMDUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIwNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjA3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMDggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIwOSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjEwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMTEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIxMiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjEzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMTQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIxNSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjE2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcNCi1kcWFkZDIxNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjE4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMTkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZHFhZGQyMjAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5Jw0KLWRxYWRkMjIxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMjIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIyMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjI0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMjUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIyNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjI3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMjggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIyOSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjMwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMzEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIzMiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjMzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMzQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIzNSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjM2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcNCi1kcWFkZDIzNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjM4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMzkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KLWRxYWRkMjQwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNDEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI0MiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZHFhZGQyNTAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5Jw0KLWRxYWRkMjUxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNTIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI1MyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjU0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNTUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI1NiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjU3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNTggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI1OSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjYwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNjEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI2MiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjYzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNjQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI2NSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjY2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcNCi1kcWFkZDI2NyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjY4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNjkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMNCi1yb3VuZGluZzogaGFsZl91cA0KLWRxYWRkMzAxIGFkZCAgLTEgICAxICAgICAgLT4gICAwDQotZHFhZGQzMDIgYWRkICAgMCAgIDEgICAgICAtPiAgIDENCi1kcWFkZDMwMyBhZGQgICAxICAgMSAgICAgIC0+ICAgMg0KLWRxYWRkMzA0IGFkZCAgMTIgICAxICAgICAgLT4gIDEzDQotZHFhZGQzMDUgYWRkICA5OCAgIDEgICAgICAtPiAgOTkNCi1kcWFkZDMwNiBhZGQgIDk5ICAgMSAgICAgIC0+IDEwMA0KLWRxYWRkMzA3IGFkZCAxMDAgICAxICAgICAgLT4gMTAxDQotZHFhZGQzMDggYWRkIDEwMSAgIDEgICAgICAtPiAxMDINCi1kcWFkZDMwOSBhZGQgIC0xICAtMSAgICAgIC0+ICAtMg0KLWRxYWRkMzEwIGFkZCAgIDAgIC0xICAgICAgLT4gIC0xDQotZHFhZGQzMTEgYWRkICAgMSAgLTEgICAgICAtPiAgIDANCi1kcWFkZDMxMiBhZGQgIDEyICAtMSAgICAgIC0+ICAxMQ0KLWRxYWRkMzEzIGFkZCAgOTggIC0xICAgICAgLT4gIDk3DQotZHFhZGQzMTQgYWRkICA5OSAgLTEgICAgICAtPiAgOTgNCi1kcWFkZDMxNSBhZGQgMTAwICAtMSAgICAgIC0+ICA5OQ0KLWRxYWRkMzE2IGFkZCAxMDEgIC0xICAgICAgLT4gMTAwDQotDQotZHFhZGQzMjEgYWRkIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwDQotZHFhZGQzMjIgYWRkICAwLjAwICAwLjAxICAgIC0+ICAwLjAxDQotZHFhZGQzMjMgYWRkICAwLjAxICAwLjAxICAgIC0+ICAwLjAyDQotZHFhZGQzMjQgYWRkICAwLjEyICAwLjAxICAgIC0+ICAwLjEzDQotZHFhZGQzMjUgYWRkICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5DQotZHFhZGQzMjYgYWRkICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwDQotZHFhZGQzMjcgYWRkICAxLjAwICAwLjAxICAgIC0+ICAxLjAxDQotZHFhZGQzMjggYWRkICAxLjAxICAwLjAxICAgIC0+ICAxLjAyDQotZHFhZGQzMjkgYWRkIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyDQotZHFhZGQzMzAgYWRkICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxDQotZHFhZGQzMzEgYWRkICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwDQotZHFhZGQzMzIgYWRkICAwLjEyIC0wLjAxICAgIC0+ICAwLjExDQotZHFhZGQzMzMgYWRkICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3DQotZHFhZGQzMzQgYWRkICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4DQotZHFhZGQzMzUgYWRkICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5DQotZHFhZGQzMzYgYWRkICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwDQotDQotLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50DQotZHFhZGQzNDAgYWRkIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDANCi1kcWFkZDM0MSBhZGQgMUUrMzMgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWFkZDM0MiBhZGQgMUUrMzQgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBSb3VuZGVkDQotZHFhZGQzNDMgYWRkIDFFKzM1ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgUm91bmRlZA0KLS0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4NCi1kcWFkZDM0NCBhZGQgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQ0KLWRxYWRkMzQ1IGFkZCAxRSszMyAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxYWRkMzQ2IGFkZCAxRSszNCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQ3IGFkZCAxRSszNSAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQ4IGFkZCAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3DQotZHFhZGQzNDkgYWRkIDFFKzMzICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZHFhZGQzNTAgYWRkIDFFKzM0ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNCAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNTEgYWRkIDFFKzM1ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gdHJ5emVyb3MgY2FzZXMNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLWRxYWRkMzYwICBhZGQgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQ0KLWRxYWRkMzYxICBhZGQgMEUtNTAgMTAwMDBFKzEgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQNCi1kcWFkZDM2MiAgYWRkIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkDQotZHFhZGQzNjMgIGFkZCAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzY0ICBhZGQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDBFKzYxMTENCi0tLSAgICAgICAgICAgIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotDQotLS0gYSBjdXJpb3NpdHkgZnJvbSBKU1IgMTMgdGVzdGluZw0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24NCi1kcWFkZDM3MCBhZGQgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNA0KLWRxYWRkMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kcWFkZDM3MiBhZGQgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNA0KLWRxYWRkMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLWRxYWRkMzc0IGFkZCAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0DQotZHFhZGQzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QNCi0NCi0tLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMNCi1kcWFkZDQwMCBhZGQgICAxICAgNzdlLTMyICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcNCi1kcWFkZDQwMSBhZGQgICAxICAgNzdlLTMzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQotZHFhZGQ0MDIgYWRkICAgMSAgIDc3ZS0zNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQwMyBhZGQgICAxICAgNzdlLTM1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDA0IGFkZCAgIDEgICA3N2UtMzYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MDUgYWRkICAgMSAgIDc3ZS0zNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQwNiBhZGQgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkNDEwIGFkZCAgMTAgICA3N2UtMzIgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcNCi1kcWFkZDQxMSBhZGQgIDEwICAgNzdlLTMzICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDEyIGFkZCAgMTAgICA3N2UtMzQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MTMgYWRkICAxMCAgIDc3ZS0zNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQxNCBhZGQgIDEwICAgNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDE1IGFkZCAgMTAgICA3N2UtMzcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MTYgYWRkICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDQyMCBhZGQgIDc3ZS0zMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcNCi1kcWFkZDQyMSBhZGQgIDc3ZS0zMyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQotZHFhZGQ0MjIgYWRkICA3N2UtMzQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQyMyBhZGQgIDc3ZS0zNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDI0IGFkZCAgNzdlLTM2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MjUgYWRkICA3N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQyNiBhZGQgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkNDMwIGFkZCAgNzdlLTMyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcNCi1kcWFkZDQzMSBhZGQgIDc3ZS0zMyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDMyIGFkZCAgNzdlLTM0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MzMgYWRkICA3N2UtMzUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQzNCBhZGQgIDc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDM1IGFkZCAgNzdlLTM3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MzYgYWRkICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBmYXN0cGF0aCBib3VuZGFyaWVzDQotLS0gICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotZHFhZGQ1MDEgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTAyIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUwMyBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzU1NTU1NTU1NTU1NTU1NTU1NTA1NTU1NTU1NTU1NTU1NScgLT4gJzc5OTk5OTk5OTk5OTk5OTk5OTk0OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MDQgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzM5NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4Mzk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTA1IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0OTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnOTM5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUwNiBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gMS4wNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNTExIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUxMiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MTMgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTE0IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUxNSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MTYgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTE3IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUxOCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MTkgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTIwIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUyMSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MjIgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTIzIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczMzMzMzMzMzMzMzMzMzMzMzMzMzMzJyAtPiAnNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NycNCi1kcWFkZDUyNCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MjUgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTI2IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUyNyBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MjggYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTI5IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUzMCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MzEgYWRkICczNDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTMyIGFkZCAnMzQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OScNCi1kcWFkZDUzMyBhZGQgJzM0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTknDQotZHFhZGQ1MzQgYWRkICczNDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5Jw0KLWRxYWRkNTM1IGFkZCAnMzQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OScNCi1kcWFkZDUzNiBhZGQgJzM0NDQ0NDQ0NCcgICc1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTknDQotZHFhZGQ1MzcgYWRkICczNDQ0NDQ0NCcgICc1NTU1NTU1NScgLT4gJzg5OTk5OTk5Jw0KLWRxYWRkNTM4IGFkZCAnMzQ0NDQ0NCcgICc1NTU1NTU1JyAtPiAnODk5OTk5OScNCi1kcWFkZDUzOSBhZGQgJzM0NDQ0NCcgICc1NTU1NTUnIC0+ICc4OTk5OTknDQotZHFhZGQ1NDAgYWRkICczNDQ0NCcgICc1NTU1NScgLT4gJzg5OTk5Jw0KLWRxYWRkNTQxIGFkZCAnMzQ0NCcgICc1NTU1JyAtPiAnODk5OScNCi1kcWFkZDU0MiBhZGQgJzM0NCcgICc1NTUnIC0+ICc4OTknDQotZHFhZGQ1NDMgYWRkICczNCcgICc1NScgLT4gJzg5Jw0KLWRxYWRkNTQ0IGFkZCAnMycgICc1JyAtPiAnOCcNCi0NCi1kcWFkZDU0NSBhZGQgJzMwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnMzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzYwMDAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAnDQotZHFhZGQ1NDYgYWRkICczMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzQwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc3MDAwMDAwNDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KLWRxYWRkNTQ3IGFkZCAnMzAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc1MDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCi1kcWFkZDU0OCBhZGQgJzQwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnMzAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzcwMDAwMDAwMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQotZHFhZGQ1NDkgYWRkICc0MDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzQwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc4MDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KLWRxYWRkNTUwIGFkZCAnNDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc1MDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnOTAwMDAwMDAwNDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCi1kcWFkZDU1MSBhZGQgJzUwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnMzAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQotZHFhZGQ1NTIgYWRkICc1MDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzQwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc5MDAwMDAwNDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KLWRxYWRkNTUzIGFkZCAnNTAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMCcgICc1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAxLjAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgUm91bmRlZA0KLS0tIGNoZWNrIHByb3BhZ2F0aW9uDQotZHFhZGQ1NTQgYWRkICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFhZGQ1NTUgYWRkICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAgJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIC0+ICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFhZGQ1NTYgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYnIC0+ICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFhZGQ1NTcgYWRkICc0NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+ICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotLS0gbmVnYXRpdmUgdWxwcw0KLWRxYWRkNjQ0MCBhZGQgICAxICAgLTc3ZS0zMiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NDQxIGFkZCAgIDEgICAtNzdlLTMzICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NDQyIGFkZCAgIDEgICAtNzdlLTM0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ0MyBhZGQgICAxICAgLTc3ZS0zNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDQ0IGFkZCAgIDEgICAtNzdlLTM2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0NDUgYWRkICAgMSAgIC03N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDQ2IGFkZCAgIDEgICAtNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkNjQ1MCBhZGQgIDEwICAgLTc3ZS0zMiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ1MSBhZGQgIDEwICAgLTc3ZS0zMyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY0NTIgYWRkICAxMCAgIC03N2UtMzQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ1MyBhZGQgIDEwICAgLTc3ZS0zNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDU0IGFkZCAgMTAgICAtNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ1NSBhZGQgIDEwICAgLTc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0NTYgYWRkICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQ2NDYwIGFkZCAgLTc3ZS0zMiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY0NjEgYWRkICAtNzdlLTMzICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY0NjIgYWRkICAtNzdlLTM0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NDYzIGFkZCAgLTc3ZS0zNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0NjQgYWRkICAtNzdlLTM2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ2NSBhZGQgIC03N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0NjYgYWRkICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQ2NDcwIGFkZCAgLTc3ZS0zMiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NDcxIGFkZCAgLTc3ZS0zMyAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ3MiBhZGQgIC03N2UtMzQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDczIGFkZCAgLTc3ZS0zNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0NzQgYWRkICAtNzdlLTM2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDc1IGFkZCAgLTc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ3NiBhZGQgIC03N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBuZWdhdGl2ZSB1bHBzDQotZHFhZGQ2NDgwIGFkZCAgLTEgICAgNzdlLTMyICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NDgxIGFkZCAgLTEgICAgNzdlLTMzICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ4MiBhZGQgIC0xICAgIDc3ZS0zNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NDgzIGFkZCAgLTEgICAgNzdlLTM1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDg0IGFkZCAgLTEgICAgNzdlLTM2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDg1IGFkZCAgLTEgICAgNzdlLTM3ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0ODYgYWRkICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkNjQ5MCBhZGQgLTEwICAgIDc3ZS0zMiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY0OTEgYWRkIC0xMCAgICA3N2UtMzMgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ5MiBhZGQgLTEwICAgIDc3ZS0zNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ5MyBhZGQgLTEwICAgIDc3ZS0zNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ5NCBhZGQgLTEwICAgIDc3ZS0zNiAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDk1IGFkZCAtMTAgICAgNzdlLTM3ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0OTYgYWRkIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkNjUwMCBhZGQgICA3N2UtMzIgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjUwMSBhZGQgICA3N2UtMzMgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY1MDIgYWRkICAgNzdlLTM0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjUwMyBhZGQgICA3N2UtMzUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjUwNCBhZGQgICA3N2UtMzYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjUwNSBhZGQgICA3N2UtMzcgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTA2IGFkZCAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDY1MTAgYWRkICAgNzdlLTMyICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NTExIGFkZCAgIDc3ZS0zMyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY1MTIgYWRkICAgNzdlLTM0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1MTMgYWRkICAgNzdlLTM1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1MTQgYWRkICAgNzdlLTM2ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjUxNSBhZGQgICA3N2UtMzcgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTE2IGFkZCAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZHFhZGQ2NTQwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScNCi1kcWFkZDY1NDEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NDIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NDMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NDQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NDUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NDYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NDcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NDggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NDkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NTAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NTEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NTIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NTMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NTQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NTUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NTYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJw0KLWRxYWRkNjU1NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU1OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU1OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kcWFkZDY1NjAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5Jw0KLWRxYWRkNjU2MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU2MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU2MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU2NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU2NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU2NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU2NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU2OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU2OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU3MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU3MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU3MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU3MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU3NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU3NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU3NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnDQotZHFhZGQ2NTc3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTc4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTc5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCi1kcWFkZDc1NDAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1NDEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1NDIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRxYWRkNzU1MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknDQotZHFhZGQ3NTUxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTUyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTUzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTU0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTU1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTU2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTU3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTU4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTU5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTYwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTYxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTYyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTYzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTY0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTY1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTY2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcNCi1kcWFkZDc1NjcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1NjggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1NjkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBtb3JlIHplcm9zLCBldGMuDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLQ0KLWRxYWRkNzcwMSBhZGQgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDANCi1kcWFkZDc3MDIgYWRkIDAwLjAwIDAuMDAwICAtPiAwLjAwMA0KLWRxYWRkNzcwMyBhZGQgMDAuMDAgMEUtMyAgIC0+IDAuMDAwDQotZHFhZGQ3NzA0IGFkZCAwRS0zICAwMC4wMCAgLT4gMC4wMDANCi0NCi1kcWFkZDc3MTAgYWRkIDBFKzMgIDAwLjAwICAtPiAwLjAwDQotZHFhZGQ3NzExIGFkZCAwRSszICAwMC4wICAgLT4gMC4wDQotZHFhZGQ3NzEyIGFkZCAwRSszICAwMC4gICAgLT4gMA0KLWRxYWRkNzcxMyBhZGQgMEUrMyAgMDAuRSsxIC0+IDBFKzENCi1kcWFkZDc3MTQgYWRkIDBFKzMgIDAwLkUrMiAtPiAwRSsyDQotZHFhZGQ3NzE1IGFkZCAwRSszICAwMC5FKzMgLT4gMEUrMw0KLWRxYWRkNzcxNiBhZGQgMEUrMyAgMDAuRSs0IC0+IDBFKzMNCi1kcWFkZDc3MTcgYWRkIDBFKzMgIDAwLkUrNSAtPiAwRSszDQotZHFhZGQ3NzE4IGFkZCAwRSszICAtMDAuMCAgIC0+IDAuMA0KLWRxYWRkNzcxOSBhZGQgMEUrMyAgLTAwLiAgICAtPiAwDQotZHFhZGQ3NzMxIGFkZCAwRSszICAtMDAuRSsxIC0+IDBFKzENCi0NCi1kcWFkZDc3MjAgYWRkIDAwLjAwICAwRSszICAtPiAwLjAwDQotZHFhZGQ3NzIxIGFkZCAwMC4wICAgMEUrMyAgLT4gMC4wDQotZHFhZGQ3NzIyIGFkZCAwMC4gICAgMEUrMyAgLT4gMA0KLWRxYWRkNzcyMyBhZGQgMDAuRSsxIDBFKzMgIC0+IDBFKzENCi1kcWFkZDc3MjQgYWRkIDAwLkUrMiAwRSszICAtPiAwRSsyDQotZHFhZGQ3NzI1IGFkZCAwMC5FKzMgMEUrMyAgLT4gMEUrMw0KLWRxYWRkNzcyNiBhZGQgMDAuRSs0IDBFKzMgIC0+IDBFKzMNCi1kcWFkZDc3MjcgYWRkIDAwLkUrNSAwRSszICAtPiAwRSszDQotZHFhZGQ3NzI4IGFkZCAtMDAuMDAgMEUrMyAgLT4gMC4wMA0KLWRxYWRkNzcyOSBhZGQgLTAwLjAgIDBFKzMgIC0+IDAuMA0KLWRxYWRkNzczMCBhZGQgLTAwLiAgIDBFKzMgIC0+IDANCi0NCi1kcWFkZDc3MzIgYWRkICAwICAgICAwICAgICAtPiAgMA0KLWRxYWRkNzczMyBhZGQgIDAgICAgLTAgICAgIC0+ICAwDQotZHFhZGQ3NzM0IGFkZCAtMCAgICAgMCAgICAgLT4gIDANCi1kcWFkZDc3MzUgYWRkIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA3NTQgc3BlY2lhbCBjYXNlDQotDQotZHFhZGQ3NzM2IGFkZCAgMSAgICAtMSAgICAgLT4gIDANCi1kcWFkZDc3MzcgYWRkIC0xICAgIC0xICAgICAtPiAtMg0KLWRxYWRkNzczOCBhZGQgIDEgICAgIDEgICAgIC0+ICAyDQotZHFhZGQ3NzM5IGFkZCAtMSAgICAgMSAgICAgLT4gIDANCi0NCi1kcWFkZDc3NDEgYWRkICAwICAgIC0xICAgICAtPiAtMQ0KLWRxYWRkNzc0MiBhZGQgLTAgICAgLTEgICAgIC0+IC0xDQotZHFhZGQ3NzQzIGFkZCAgMCAgICAgMSAgICAgLT4gIDENCi1kcWFkZDc3NDQgYWRkIC0wICAgICAxICAgICAtPiAgMQ0KLWRxYWRkNzc0NSBhZGQgLTEgICAgIDAgICAgIC0+IC0xDQotZHFhZGQ3NzQ2IGFkZCAtMSAgICAtMCAgICAgLT4gLTENCi1kcWFkZDc3NDcgYWRkICAxICAgICAwICAgICAtPiAgMQ0KLWRxYWRkNzc0OCBhZGQgIDEgICAgLTAgICAgIC0+ICAxDQotDQotZHFhZGQ3NzUxIGFkZCAgMC4wICAtMSAgICAgLT4gLTEuMA0KLWRxYWRkNzc1MiBhZGQgLTAuMCAgLTEgICAgIC0+IC0xLjANCi1kcWFkZDc3NTMgYWRkICAwLjAgICAxICAgICAtPiAgMS4wDQotZHFhZGQ3NzU0IGFkZCAtMC4wICAgMSAgICAgLT4gIDEuMA0KLWRxYWRkNzc1NSBhZGQgLTEuMCAgIDAgICAgIC0+IC0xLjANCi1kcWFkZDc3NTYgYWRkIC0xLjAgIC0wICAgICAtPiAtMS4wDQotZHFhZGQ3NzU3IGFkZCAgMS4wICAgMCAgICAgLT4gIDEuMA0KLWRxYWRkNzc1OCBhZGQgIDEuMCAgLTAgICAgIC0+ICAxLjANCi0NCi1kcWFkZDc3NjEgYWRkICAwICAgIC0xLjAgICAtPiAtMS4wDQotZHFhZGQ3NzYyIGFkZCAtMCAgICAtMS4wICAgLT4gLTEuMA0KLWRxYWRkNzc2MyBhZGQgIDAgICAgIDEuMCAgIC0+ICAxLjANCi1kcWFkZDc3NjQgYWRkIC0wICAgICAxLjAgICAtPiAgMS4wDQotZHFhZGQ3NzY1IGFkZCAtMSAgICAgMC4wICAgLT4gLTEuMA0KLWRxYWRkNzc2NiBhZGQgLTEgICAgLTAuMCAgIC0+IC0xLjANCi1kcWFkZDc3NjcgYWRkICAxICAgICAwLjAgICAtPiAgMS4wDQotZHFhZGQ3NzY4IGFkZCAgMSAgICAtMC4wICAgLT4gIDEuMA0KLQ0KLWRxYWRkNzc3MSBhZGQgIDAuMCAgLTEuMCAgIC0+IC0xLjANCi1kcWFkZDc3NzIgYWRkIC0wLjAgIC0xLjAgICAtPiAtMS4wDQotZHFhZGQ3NzczIGFkZCAgMC4wICAgMS4wICAgLT4gIDEuMA0KLWRxYWRkNzc3NCBhZGQgLTAuMCAgIDEuMCAgIC0+ICAxLjANCi1kcWFkZDc3NzUgYWRkIC0xLjAgICAwLjAgICAtPiAtMS4wDQotZHFhZGQ3Nzc2IGFkZCAtMS4wICAtMC4wICAgLT4gLTEuMA0KLWRxYWRkNzc3NyBhZGQgIDEuMCAgIDAuMCAgIC0+ICAxLjANCi1kcWFkZDc3NzggYWRkICAxLjAgIC0wLjAgICAtPiAgMS4wDQotDQotLS0gU3BlY2lhbHMNCi1kcWFkZDc3ODAgYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3ODEgYWRkIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3ODIgYWRkIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3ODMgYWRkIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3ODQgYWRkIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3ODUgYWRkIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3ODYgYWRkIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3ODcgYWRkIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3ODggYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3ODkgYWRkIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3OTAgYWRkIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3OTEgYWRkICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3OTIgYWRkICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3OTMgYWRkICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDc3OTQgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxYWRkNzgwMCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODAxIGFkZCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODAyIGFkZCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODAzIGFkZCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODA0IGFkZCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODA1IGFkZCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODA2IGFkZCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODA3IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODA4IGFkZCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODA5IGFkZCAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4MTAgYWRkIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcWFkZDc4MTEgYWRkIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcWFkZDc4MTIgYWRkICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcWFkZDc4MTMgYWRkICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcWFkZDc4MTQgYWRkICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcWFkZDc4MTUgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcWFkZDc4MjEgYWRkICBOYU4gLUluZiAgICAtPiAgTmFODQotZHFhZGQ3ODIyIGFkZCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRxYWRkNzgyMyBhZGQgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kcWFkZDc4MjQgYWRkICBOYU4gLTAgICAgICAtPiAgTmFODQotZHFhZGQ3ODI1IGFkZCAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRxYWRkNzgyNiBhZGQgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kcWFkZDc4MjcgYWRkICBOYU4gIDEwMDAgICAtPiAgTmFODQotZHFhZGQ3ODI4IGFkZCAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRxYWRkNzgyOSBhZGQgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDc4MzAgYWRkIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZHFhZGQ3ODMxIGFkZCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxYWRkNzgzMiBhZGQgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDc4MzMgYWRkIC0wICAgIE5hTiAgICAtPiAgTmFODQotZHFhZGQ3ODM0IGFkZCAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxYWRkNzgzNSBhZGQgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDc4MzYgYWRkICAxMDAwIE5hTiAgICAtPiAgTmFODQotZHFhZGQ3ODM3IGFkZCAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRxYWRkNzg0MSBhZGQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODQyIGFkZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NDMgYWRkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg0NCBhZGQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODQ1IGFkZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NDYgYWRkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg0NyBhZGQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODQ4IGFkZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NDkgYWRkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg1MCBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODUxIGFkZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NTIgYWRkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg1MyBhZGQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODU0IGFkZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NTUgYWRkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg1NiBhZGQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODU3IGFkZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NTggYWRkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg1OSBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxYWRkNzg2MSBhZGQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZHFhZGQ3ODYyIGFkZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCi1kcWFkZDc4NjMgYWRkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLWRxYWRkNzg2NCBhZGQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZHFhZGQ3ODY1IGFkZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCi1kcWFkZDc4NjYgYWRkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLWRxYWRkNzg2NyBhZGQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZHFhZGQ3ODY4IGFkZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCi1kcWFkZDc4NjkgYWRkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1kcWFkZDc4NzEgYWRkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODcyIGFkZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg3MyBhZGQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NzQgYWRkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODc1IGFkZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg3NiBhZGQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NzcgYWRkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODc4IGFkZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg3OSBhZGQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4ODAgYWRkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODgxIGFkZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg4MiBhZGQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLWRxYWRkNzg4MyBhZGQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4ODQgYWRkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCi1kcWFkZDc4ODUgYWRkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4NCi1kcWFkZDc1NzUgYWRkICAxRS02MTQzIC0xRS02MTc2IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbA0KLWRxYWRkNzU3NiBhZGQgLTFFLTYxNDMgKzFFLTYxNzYgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgU3Vibm9ybWFsDQotDQotLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlDQotLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZHFhZGQ3OTcyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxYWRkNzk3MyBhZGQgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTc0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5NzUgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTc2IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDlFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk3NyBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA4RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5NzggYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgN0UrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTc5IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDZFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk4MCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA1RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5ODEgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNEUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTgyIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDNFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk4MyBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAyRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5ODQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQ3OTg1IGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcWFkZDc5ODYgYWRkICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5ODcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5ODggYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMUUrNjExMSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk4OSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC05RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTkwIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLThFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5OTEgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtN0UrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk5MiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC02RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTkzIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTVFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5OTQgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNEUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk5NSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0zRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTk2IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTJFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5OTcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMUUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cw0KLXJvdW5kaW5nOiAgICAgZG93bg0KLWRxYWRkNzExMDAgYWRkIDFlKzIgLTFlLTYxNDMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTEwMSBhZGQgMWUrMSAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTEwMyBhZGQgICArMSAtMWUtNjE0MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMDQgYWRkIDFlLTEgLTFlLTYxNDMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTEwNSBhZGQgMWUtMiAtMWUtNjE0MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTEwNiBhZGQgMWUtMyAtMWUtNjE0MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMDcgYWRkIDFlLTQgLTFlLTYxNDMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTEwOCBhZGQgMWUtNSAtMWUtNjE0MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTEwOSBhZGQgMWUtNiAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQotDQotcm91bmRpbmc6ICAgICBjZWlsaW5nDQotZHFhZGQ3MTExMCBhZGQgLTFlKzIgKzFlLTYxNDMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTExMSBhZGQgLTFlKzEgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMTMgYWRkICAgIC0xICsxZS02MTQzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTExNCBhZGQgLTFlLTEgKzFlLTYxNDMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTExNSBhZGQgLTFlLTIgKzFlLTYxNDMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMTYgYWRkIC0xZS0zICsxZS02MTQzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTExNyBhZGQgLTFlLTQgKzFlLTYxNDMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQ3MTExOCBhZGQgLTFlLTUgKzFlLTYxNDMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMTkgYWRkIC0xZS02ICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCi0NCi0tLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQ0KLXJvdW5kaW5nOiAgICAgaGFsZl9ldmVuDQotDQotZHFhZGQ3MTMwMCBhZGQgMUUzNCAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzEwIGFkZCAxRTM0ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMTEgYWRkIDFFMzQgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMxMiBhZGQgMUUzNCAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzEzIGFkZCAxRTM0ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMTQgYWRkIDFFMzQgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMxNSBhZGQgMUUzNCAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzE2IGFkZCAxRTM0ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMTcgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMxOCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzE5IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMjAgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMyMSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzIyIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMjMgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMyNCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzI1IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMjYgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMyNyBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzI4IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMjkgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMzMCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzMxIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMzIgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMzMyBhZGQgMUUzNCAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzM0IGFkZCAxRTM0ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMzUgYWRkIDFFMzQgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMzNiBhZGQgMUUzNCAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzM3IGFkZCAxRTM0ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMzggYWRkIDFFMzQgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMzOSBhZGQgMUUzNCAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDcxMzQwIGFkZCAxRTM0ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNDEgYWRkIDFFMzQgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQ3MTM0OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM1MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM1MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM1MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM1MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM1NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM1NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM1NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM1NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM1OCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM1OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM2MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM2MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM2MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM2MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM2NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM2NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM2NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM2OCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM2OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM3MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM3MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM3MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM3NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM3NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM3NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM3OCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM3OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM4MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM4MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM4MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM4MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM4NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM4NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM4NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM4NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM4OCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM4OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM5MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM5MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM5MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM5MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM5NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM5NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTM5NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQNCi0tLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwDQotZHFhZGQ3MTQyMCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTQyMSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0MjIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTQyMyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTQyNCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0MjUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTQyNiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTQyNyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03DQotZHFhZGQ3MTQyOCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04DQotZHFhZGQ3MTQyOSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05DQotZHFhZGQ3MTQzMCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMA0KLWRxYWRkNzE0MzEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTENCi1kcWFkZDcxNDMyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyDQotZHFhZGQ3MTQzMyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMw0KLWRxYWRkNzE0MzQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQNCi1kcWFkZDcxNDM1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1DQotZHFhZGQ3MTQzNiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNg0KLWRxYWRkNzE0MzcgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcNCi1kcWFkZDcxNDM4IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4DQotZHFhZGQ3MTQzOSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOQ0KLWRxYWRkNzE0NDAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjANCi1kcWFkZDcxNDQxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxDQotZHFhZGQ3MTQ0MiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMg0KLWRxYWRkNzE0NDMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMNCi1kcWFkZDcxNDQ0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0DQotZHFhZGQ3MTQ0NSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNQ0KLWRxYWRkNzE0NDYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYNCi1kcWFkZDcxNDQ3IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3DQotZHFhZGQ3MTQ0OCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOA0KLWRxYWRkNzE0NDkgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkNCi1kcWFkZDcxNDUwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwDQotZHFhZGQ3MTQ1MSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMQ0KLWRxYWRkNzE0NTIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzINCi1kcWFkZDcxNDUzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzDQotZHFhZGQ3MTQ1NCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNA0KLWRxYWRkNzE0NTUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUNCi1kcWFkZDcxNDU2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2DQotDQotLS0gc2FtZSwgcmV2ZXJzZWQgMA0KLWRxYWRkNzE0NjAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAgICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTQ2MSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTQ2MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0NjMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zICAwIC0+IDAuMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTQ2NCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTQ2NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0NjYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS02ICAwIC0+IDAuMDAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTQ2NyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcNCi1kcWFkZDcxNDY4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOA0KLWRxYWRkNzE0NjkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05DQotZHFhZGQ3MTQ3MCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwDQotZHFhZGQ3MTQ3MSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExDQotZHFhZGQ3MTQ3MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyDQotZHFhZGQ3MTQ3MyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzDQotZHFhZGQ3MTQ3NCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0DQotZHFhZGQ3MTQ3NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1DQotZHFhZGQ3MTQ3NiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2DQotZHFhZGQ3MTQ3NyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3DQotZHFhZGQ3MTQ3OCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4DQotZHFhZGQ3MTQ3OSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5DQotZHFhZGQ3MTQ4MCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwDQotZHFhZGQ3MTQ4MSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxDQotZHFhZGQ3MTQ4MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyDQotZHFhZGQ3MTQ4MyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzDQotZHFhZGQ3MTQ4NCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0DQotZHFhZGQ3MTQ4NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1DQotZHFhZGQ3MTQ4NiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2DQotZHFhZGQ3MTQ4NyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3DQotZHFhZGQ3MTQ4OCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4DQotZHFhZGQ3MTQ4OSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5DQotZHFhZGQ3MTQ5MCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwDQotZHFhZGQ3MTQ5MSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxDQotZHFhZGQ3MTQ5MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyDQotZHFhZGQ3MTQ5MyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzDQotZHFhZGQ3MTQ5NCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0DQotZHFhZGQ3MTQ5NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1DQotZHFhZGQ3MTQ5NiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2DQotDQotLS0gc2FtZSwgRXMgb24gdGhlIDANCi1kcWFkZDcxNTAwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUwMSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MDIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTAzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUwNCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MDUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTA2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUwNyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MDggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTA5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUxMCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MTEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTEyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUxMyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MTQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTE1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUxNiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MTcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTE4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUxOSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MjAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTIxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUyMiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MjMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTI0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUyNSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MjYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTI3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUyOCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI4ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MjkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTMwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUzMSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMxICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MzIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTMzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdA0KLWRxYWRkNzE1MzQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWRxYWRkNzE1MzUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWRxYWRkNzE1MzYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWRxYWRkNzE1MzcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLQ0KLS0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQ3MTYwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNjAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE2MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTYwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRxYWRkNzE2MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQotZHFhZGQ3MTYxMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi1yb3VuZGluZzogICAgaGFsZl9kb3duDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRxYWRkNzE2MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTYyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNjIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE2MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDcxNjMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRxYWRkNzE2MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kcWFkZDcxNjQwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE2NDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTY0MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNjQzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQ3MTY1MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCi1kcWFkZDcxNjUyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLXJvdW5kaW5nOiAgICB1cA0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kcWFkZDcxNjYwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE2NjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTY2MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNjYzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQ3MTY3MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCi1kcWFkZDcxNjcyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLXJvdW5kaW5nOiAgICBkb3duDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRxYWRkNzE2ODAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTY4MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNjgyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE2ODMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDcxNjkxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRxYWRkNzE2OTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotcm91bmRpbmc6ICAgIGNlaWxpbmcNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQ3MTcwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNzAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE3MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTcwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRxYWRkNzE3MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQotZHFhZGQ3MTcxMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi0tLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoNCi1yb3VuZGluZzogICAgZmxvb3INCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQ3MTcyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNzIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KLWRxYWRkNzE3MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqDQotZHFhZGQ3MTcyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRxYWRkNzE3MzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqDQotZHFhZGQ3MTczMiBhZGQgIDExICAgICAtMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoNCi0NCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkNCi1kcWFkZDcxNzQxIGFkZCAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTANCi1kcWFkZDcxNzQyIGFkZCAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTANCi1kcWFkZDcxNzQzIGFkZCAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzANCi1kcWFkZDcxNzQ0IGFkZCAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQNCi1kcWFkZDcxNzQ1IGFkZCAxMzBFLTIgICAtMTIwRS0yIC0+IDAuMTANCi1kcWFkZDcxNzQ2IGFkZCAxMzBFLTIgICAtMTJFLTEgIC0+IDAuMTANCi1kcWFkZDcxNzQ3IGFkZCAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzANCi1kcWFkZDcxNzQ4IGFkZCAxRTIgICAgICAtMUU0ICAgIC0+IC05LjlFKzMNCi0NCi0tLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLQ0KLWRxYWRkNzUwMDEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTcNCi1kcWFkZDc1MDAyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDAzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDA0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDA1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDA2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDA3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDA4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDA5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDEwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDExIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDEyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDEzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDE0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDE1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDE2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDE3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDE4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDE5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDIwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDIxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwDQotZHFhZGQ3NTAzMCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzkNCi1kcWFkZDc1MDMxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xDQotZHFhZGQ3NTAzMiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTINCi1kcWFkZDc1MDMzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjMNCi1kcWFkZDc1MDM0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0DQotZHFhZGQ3NTAzNSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDUNCi1kcWFkZDc1MDM2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTYNCi1kcWFkZDc1MDM3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3DQotZHFhZGQ3NTAzOCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzgNCi1kcWFkZDc1MDM5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDQwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDQxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDQyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDQzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDQ0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDQ1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDQ2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDQ3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDQ4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDQ5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ng0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kcWFkZDc1MDUwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDUxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDUyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDUzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDU0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDU1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDU2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDU3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDYwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDYxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDYyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDYzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDY0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDY1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDY2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDY3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpDQotcm91bmRpbmc6IHVwDQotZHFhZGQ3NTA3MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDENCi1kcWFkZDc1MDcxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDcyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDczIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDc0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDc1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDc2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDc3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDc4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDc5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDgwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDgxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDgyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDgzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDg0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDg1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDg2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDg3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDg4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc1MDg5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFhZGQ5OTkwIGFkZCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDk5OTEgYWRkICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFBZGQuZGVjVGVzdCAtLSBkZWNRdWFkIGFkZGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY1F1YWRzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjUXVhZAorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCitkcWFkZDAwMSBhZGQgMSAgICAgICAxICAgICAgIC0+ICAyCitkcWFkZDAwMiBhZGQgMiAgICAgICAzICAgICAgIC0+ICA1CitkcWFkZDAwMyBhZGQgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1CitkcWFkZDAwNCBhZGQgJzUnICAgICAnLTMnICAgIC0+ICAyCitkcWFkZDAwNSBhZGQgJy01JyAgICAnLTMnICAgIC0+ICAtOAorZHFhZGQwMDYgYWRkICctNycgICAgJzIuNScgICAtPiAgLTQuNQorZHFhZGQwMDcgYWRkICcwLjcnICAgJzAuMycgICAtPiAgMS4wCitkcWFkZDAwOCBhZGQgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCitkcWFkZDAwOSBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCitkcWFkZDAxMCBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnCisKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcWFkZDAxMSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAxMiBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFhZGQwMTMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQwMTQgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDE1IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAxNiBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMTcgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDE4IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAxOSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMjAgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQwMjEgYWRkIDAgMSAtPiAxCitkcWFkZDAyMiBhZGQgMSAxIC0+IDIKK2RxYWRkMDIzIGFkZCAyIDEgLT4gMworZHFhZGQwMjQgYWRkIDMgMSAtPiA0CitkcWFkZDAyNSBhZGQgNCAxIC0+IDUKK2RxYWRkMDI2IGFkZCA1IDEgLT4gNgorZHFhZGQwMjcgYWRkIDYgMSAtPiA3CitkcWFkZDAyOCBhZGQgNyAxIC0+IDgKK2RxYWRkMDI5IGFkZCA4IDEgLT4gOQorZHFhZGQwMzAgYWRkIDkgMSAtPiAxMAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2RxYWRkMDMxIGFkZCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2RxYWRkMDMyIGFkZCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2RxYWRkMDMzIGFkZCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKK2RxYWRkMDM0IGFkZCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKKworZHFhZGQwMzUgYWRkICc3MCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMzYgYWRkICc3MDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDM3IGFkZCAnNzAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMzggYWRkICc3MDAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMzkgYWRkICc3MDAwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5OgorZHFhZGQwNDAgYWRkICcxMDAwMGUrMzQnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwNDEgYWRkICcxMDAwMGUrMzQnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDQyIGFkZCAnMTAwMDBlKzM0JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwNDQgYWRkICcxMDAwMGUrMzQnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwNDUgYWRkICcxMDAwMGUrMzQnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkCisKKy0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcKK2RxYWRkMDQ2IGFkZCAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JworZHFhZGQwNDcgYWRkICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJworZHFhZGQwNDggYWRkICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2RxYWRkMDQ5IGFkZCAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJworZHFhZGQwNTAgYWRkICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJworZHFhZGQwNTEgYWRkICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKK2RxYWRkMDUyIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJworCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitkcWFkZDA1MyBhZGQgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJworZHFhZGQwNTQgYWRkICcxLjMnICctMS4wNycgLT4gJzAuMjMnCitkcWFkZDA1NSBhZGQgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKK2RxYWRkMDU2IGFkZCAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycKK2RxYWRkMDU3IGFkZCAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JworCistLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uCitkcWFkZDA2MSBhZGQgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJworZHFhZGQwNjIgYWRkIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJworZHFhZGQwNjMgYWRkIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCitkcWFkZDA2NCBhZGQgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJworZHFhZGQwNjUgYWRkIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJworCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitkcWFkZDA3MCBhZGQgMSAgMCAgICAtPiAxCitkcWFkZDA3MSBhZGQgMSAwLiAgICAtPiAxCitkcWFkZDA3MiBhZGQgMSAgLjAgICAtPiAxLjAKK2RxYWRkMDczIGFkZCAxIDAuMCAgIC0+IDEuMAorZHFhZGQwNzQgYWRkIDEgMC4wMCAgLT4gMS4wMAorZHFhZGQwNzUgYWRkICAwICAxICAgLT4gMQorZHFhZGQwNzYgYWRkIDAuICAxICAgLT4gMQorZHFhZGQwNzcgYWRkICAuMCAxICAgLT4gMS4wCitkcWFkZDA3OCBhZGQgMC4wIDEgICAtPiAxLjAKK2RxYWRkMDc5IGFkZCAwLjAwIDEgIC0+IDEuMDAKKworLS0gc29tZSBjYXJyaWVzCitkcWFkZDA4MCBhZGQgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQorZHFhZGQwODEgYWRkIDk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwCitkcWFkZDA4MiBhZGQgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAorZHFhZGQwODMgYWRkICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAorZHFhZGQwODQgYWRkICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwCitkcWFkZDA4NSBhZGQgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorZHFhZGQwODYgYWRkICAgICAgOTk5OSAxICAtPiAxMDAwMAorZHFhZGQwODcgYWRkICAgICAgIDk5OSAxICAtPiAxMDAwCitkcWFkZDA4OCBhZGQgICAgICAgIDk5IDEgIC0+IDEwMAorZHFhZGQwODkgYWRkICAgICAgICAgOSAxICAtPiAxMAorCisKKy0tIG1vcmUgTEhTIHN3YXBzCitkcWFkZDA5MCBhZGQgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitkcWFkZDA5MSBhZGQgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2RxYWRkMDkyIGFkZCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitkcWFkZDA5MyBhZGQgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitkcWFkZDA5NCBhZGQgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitkcWFkZDA5NSBhZGQgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitkcWFkZDA5NiBhZGQgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitkcWFkZDA5NyBhZGQgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2RxYWRkMDk4IGFkZCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZHFhZGQwOTkgYWRkICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK2RxYWRkMTAwIGFkZCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZHFhZGQxMDEgYWRkICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2RxYWRkMTAyIGFkZCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK2RxYWRkMTAzIGFkZCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2RxYWRkMTA0IGFkZCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitkcWFkZDEwNSBhZGQgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK2RxYWRkMTA2IGFkZCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2RxYWRkMTA3IGFkZCAnLTVFMzMnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDEwOCBhZGQgJy01RTM0JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICBSb3VuZGVkCitkcWFkZDEwOSBhZGQgJy01RTM1JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICBSb3VuZGVkCitkcWFkZDExMCBhZGQgJy01RTM2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICBSb3VuZGVkCitkcWFkZDExMSBhZGQgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzCitkcWFkZDExMyBhZGQgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RxYWRkMTE0IGFkZCAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCitkcWFkZDExNiBhZGQgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnCitkcWFkZDExNyBhZGQgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2RxYWRkMTE5IGFkZCAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JworZHFhZGQxMjAgYWRkIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnCitkcWFkZDEyMSBhZGQgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2RxYWRkMTIyIGFkZCAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCitkcWFkZDEyMyBhZGQgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJworZHFhZGQxMjQgYWRkIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworZHFhZGQxMjUgYWRkIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKK2RxYWRkMTI2IGFkZCAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScKK2RxYWRkMTI3IGFkZCAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworZHFhZGQxMjggYWRkIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCitkcWFkZDEyOSBhZGQgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnCitkcWFkZDEzMCBhZGQgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworZHFhZGQxMzEgYWRkIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCitkcWFkZDEzMiBhZGQgMCAgJy01RTMzJyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDEzMyBhZGQgMCAgJy01RTM0JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgICBSb3VuZGVkCitkcWFkZDEzNCBhZGQgMCAgJy01RTM1JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgICBSb3VuZGVkCitkcWFkZDEzNSBhZGQgMCAgJy01RTM2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkCitkcWFkZDEzNiBhZGQgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2RxYWRkMTM3IGFkZCAgMSAgJzBFLTM5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitkcWFkZDEzOCBhZGQgLTEgICcwRS0zOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFhZGQxMzkgYWRkICcwRS0zOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RxYWRkMTQwIGFkZCAnMEUtMzknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkcWFkZDE0MSBhZGQgMUUrMjkgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJworZHFhZGQxNDIgYWRkIDFFKzI5ICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKK2RxYWRkMTQzIGFkZCAwLjAwMCAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnCitkcWFkZDE0NCBhZGQgMC4wMDAwICAxRSszMCAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZAorCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQorZHFhZGQxNDYgYWRkICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2RxYWRkMTQ3IGFkZCAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJworZHFhZGQxNDggYWRkICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnCitkcWFkZDE0OSBhZGQgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworZHFhZGQxNTAgYWRkICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCitkcWFkZDE1MSBhZGQgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcKK2RxYWRkMTUyIGFkZCAnMycgICAgICcuMycgICAgLT4gICczLjMnCitkcWFkZDE1MyBhZGQgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJworZHFhZGQxNTQgYWRkICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycKK2RxYWRkMTU1IGFkZCAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworZHFhZGQxNTYgYWRkICczJyAgICAgJzMnICAgICAtPiAgJzYnCitkcWFkZDE1NyBhZGQgJzMnICAgICAnKzMnICAgIC0+ICAnNicKK2RxYWRkMTU4IGFkZCAnMycgICAgICctMycgICAgLT4gICcwJworZHFhZGQxNTkgYWRkICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKK2RxYWRkMTYwIGFkZCAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorZHFhZGQxNjEgYWRkICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JworZHFhZGQxNjIgYWRkICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2RxYWRkMTYzIGFkZCAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDE2NCBhZGQgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCitkcWFkZDE2NSBhZGQgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5JworZHFhZGQxNjYgYWRkICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2RxYWRkMTY3IGFkZCAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDE2OCBhZGQgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5JworCityb3VuZGluZzogaGFsZl91cAorZHFhZGQxNzAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTcyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY1JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxNzMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3NCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTc1IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQxNzYgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3NyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkCitkcWFkZDE3OCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0NScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTc5IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxODAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE4MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTgyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxODMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZHFhZGQyMDAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JworZHFhZGQyMDEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjAyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMDQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjA1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMDcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjA4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwOSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjExIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxMiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjE0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxNSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQyMTcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjE4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxOSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcWFkZDIyMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCitkcWFkZDIyMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjIzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIyNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjI2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIyNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjI5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjMyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjM1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnCitkcWFkZDIzNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjM5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZHFhZGQyNDAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjQxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI0MiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZHFhZGQyNTAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JworZHFhZGQyNTEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjUyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1MyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNTQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjU1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1NiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNTcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjU4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1OSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjYxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2MiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjY0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2NSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQyNjcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjY4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2OSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDMwMSBhZGQgIC0xICAgMSAgICAgIC0+ICAgMAorZHFhZGQzMDIgYWRkICAgMCAgIDEgICAgICAtPiAgIDEKK2RxYWRkMzAzIGFkZCAgIDEgICAxICAgICAgLT4gICAyCitkcWFkZDMwNCBhZGQgIDEyICAgMSAgICAgIC0+ICAxMworZHFhZGQzMDUgYWRkICA5OCAgIDEgICAgICAtPiAgOTkKK2RxYWRkMzA2IGFkZCAgOTkgICAxICAgICAgLT4gMTAwCitkcWFkZDMwNyBhZGQgMTAwICAgMSAgICAgIC0+IDEwMQorZHFhZGQzMDggYWRkIDEwMSAgIDEgICAgICAtPiAxMDIKK2RxYWRkMzA5IGFkZCAgLTEgIC0xICAgICAgLT4gIC0yCitkcWFkZDMxMCBhZGQgICAwICAtMSAgICAgIC0+ICAtMQorZHFhZGQzMTEgYWRkICAgMSAgLTEgICAgICAtPiAgIDAKK2RxYWRkMzEyIGFkZCAgMTIgIC0xICAgICAgLT4gIDExCitkcWFkZDMxMyBhZGQgIDk4ICAtMSAgICAgIC0+ICA5NworZHFhZGQzMTQgYWRkICA5OSAgLTEgICAgICAtPiAgOTgKK2RxYWRkMzE1IGFkZCAxMDAgIC0xICAgICAgLT4gIDk5CitkcWFkZDMxNiBhZGQgMTAxICAtMSAgICAgIC0+IDEwMAorCitkcWFkZDMyMSBhZGQgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2RxYWRkMzIyIGFkZCAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZHFhZGQzMjMgYWRkICAwLjAxICAwLjAxICAgIC0+ICAwLjAyCitkcWFkZDMyNCBhZGQgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2RxYWRkMzI1IGFkZCAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZHFhZGQzMjYgYWRkICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwCitkcWFkZDMyNyBhZGQgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2RxYWRkMzI4IGFkZCAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZHFhZGQzMjkgYWRkIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyCitkcWFkZDMzMCBhZGQgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2RxYWRkMzMxIGFkZCAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZHFhZGQzMzIgYWRkICAwLjEyIC0wLjAxICAgIC0+ICAwLjExCitkcWFkZDMzMyBhZGQgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2RxYWRkMzM0IGFkZCAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZHFhZGQzMzUgYWRkICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5CitkcWFkZDMzNiBhZGQgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CitkcWFkZDM0MCBhZGQgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZHFhZGQzNDEgYWRkIDFFKzMzICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWFkZDM0MiBhZGQgMUUrMzQgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBSb3VuZGVkCitkcWFkZDM0MyBhZGQgMUUrMzUgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitkcWFkZDM0NCBhZGQgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQorZHFhZGQzNDUgYWRkIDFFKzMzICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWFkZDM0NiBhZGQgMUUrMzQgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQ3IGFkZCAxRSszNSAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDggYWRkIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2RxYWRkMzQ5IGFkZCAxRSszMyAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFhZGQzNTAgYWRkIDFFKzM0ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNCAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM1MSBhZGQgMUUrMzUgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkcWFkZDM2MCAgYWRkIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2RxYWRkMzYxICBhZGQgMEUtNTAgMTAwMDBFKzEgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQKK2RxYWRkMzYyICBhZGQgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQKK2RxYWRkMzYzICBhZGQgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzY0ICBhZGQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDBFKzYxMTEKKy0tICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworLS0gYSBjdXJpb3NpdHkgZnJvbSBKU1IgMTMgdGVzdGluZworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorZHFhZGQzNzAgYWRkICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQKK2RxYWRkMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorZHFhZGQzNzIgYWRkICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQKK2RxYWRkMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl9ldmVuCitkcWFkZDM3NCBhZGQgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAorZHFhZGQzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QKKworLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzCitkcWFkZDQwMCBhZGQgICAxICAgNzdlLTMyICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkNDAxIGFkZCAgIDEgICA3N2UtMzMgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkNDAyIGFkZCAgIDEgICA3N2UtMzQgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDQwMyBhZGQgICAxICAgNzdlLTM1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MDQgYWRkICAgMSAgIDc3ZS0zNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDA1IGFkZCAgIDEgICA3N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQwNiBhZGQgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDQxMCBhZGQgIDEwICAgNzdlLTMyICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDQxMSBhZGQgIDEwICAgNzdlLTMzICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MTIgYWRkICAxMCAgIDc3ZS0zNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDEzIGFkZCAgMTAgICA3N2UtMzUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQxNCBhZGQgIDEwICAgNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MTUgYWRkICAxMCAgIDc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDE2IGFkZCAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNDIwIGFkZCAgNzdlLTMyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQ0MjEgYWRkICA3N2UtMzMgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQ0MjIgYWRkICA3N2UtMzQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDIzIGFkZCAgNzdlLTM1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQyNCBhZGQgIDc3ZS0zNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MjUgYWRkICA3N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDI2IGFkZCAgNzdlLTI5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNDMwIGFkZCAgNzdlLTMyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkNDMxIGFkZCAgNzdlLTMzICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDQzMiBhZGQgIDc3ZS0zNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MzMgYWRkICA3N2UtMzUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDM0IGFkZCAgNzdlLTM2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQzNSBhZGQgIDc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MzYgYWRkICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gZmFzdHBhdGggYm91bmRhcmllcworLS0gICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcWFkZDUwMSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUwMiBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUwMyBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzU1NTU1NTU1NTU1NTU1NTU1NTA1NTU1NTU1NTU1NTU1NScgLT4gJzc5OTk5OTk5OTk5OTk5OTk5OTk0OTk5OTk5OTk5OTk5OTknCitkcWFkZDUwNCBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzgzOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUwNSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzkzOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUwNiBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gMS4wNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ1MTEgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTIgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTMgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTQgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTUgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTYgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTcgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTggYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTkgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjAgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjEgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjIgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjMgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMnIC0+ICc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3JworZHFhZGQ1MjQgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjUgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjYgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjcgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjggYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjkgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MzAgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MzEgYWRkICczNDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5JworZHFhZGQ1MzIgYWRkICczNDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5JworZHFhZGQ1MzMgYWRkICczNDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5JworZHFhZGQ1MzQgYWRkICczNDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5JworZHFhZGQ1MzUgYWRkICczNDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5JworZHFhZGQ1MzYgYWRkICczNDQ0NDQ0NDQnICAnNTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5JworZHFhZGQ1MzcgYWRkICczNDQ0NDQ0NCcgICc1NTU1NTU1NScgLT4gJzg5OTk5OTk5JworZHFhZGQ1MzggYWRkICczNDQ0NDQ0JyAgJzU1NTU1NTUnIC0+ICc4OTk5OTk5JworZHFhZGQ1MzkgYWRkICczNDQ0NDQnICAnNTU1NTU1JyAtPiAnODk5OTk5JworZHFhZGQ1NDAgYWRkICczNDQ0NCcgICc1NTU1NScgLT4gJzg5OTk5JworZHFhZGQ1NDEgYWRkICczNDQ0JyAgJzU1NTUnIC0+ICc4OTk5JworZHFhZGQ1NDIgYWRkICczNDQnICAnNTU1JyAtPiAnODk5JworZHFhZGQ1NDMgYWRkICczNCcgICc1NScgLT4gJzg5JworZHFhZGQ1NDQgYWRkICczJyAgJzUnIC0+ICc4JworCitkcWFkZDU0NSBhZGQgJzMwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnMzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzYwMDAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU0NiBhZGQgJzMwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzcwMDAwMDA0MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU0NyBhZGQgJzMwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU0OCBhZGQgJzQwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnMzAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzcwMDAwMDAwMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU0OSBhZGQgJzQwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzgwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU1MCBhZGQgJzQwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzkwMDAwMDAwMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU1MSBhZGQgJzUwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnMzAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU1MiBhZGQgJzUwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzkwMDAwMDA0MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU1MyBhZGQgJzUwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gMS4wMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IFJvdW5kZWQKKy0tIGNoZWNrIHByb3BhZ2F0aW9uCitkcWFkZDU1NCBhZGQgJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgLT4gIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYWRkNTU1IGFkZCAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFhZGQ1NTYgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYnIC0+ICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWFkZDU1NyBhZGQgJzQ1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0gbmVnYXRpdmUgdWxwcworZHFhZGQ2NDQwIGFkZCAgIDEgICAtNzdlLTMyICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ0MSBhZGQgICAxICAgLTc3ZS0zMyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDQyIGFkZCAgIDEgICAtNzdlLTM0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDQzIGFkZCAgIDEgICAtNzdlLTM1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ0NCBhZGQgICAxICAgLTc3ZS0zNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NDUgYWRkICAgMSAgIC03N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NDYgYWRkICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNjQ1MCBhZGQgIDEwICAgLTc3ZS0zMiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDUxIGFkZCAgMTAgICAtNzdlLTMzICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDUyIGFkZCAgMTAgICAtNzdlLTM0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ1MyBhZGQgIDEwICAgLTc3ZS0zNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NTQgYWRkICAxMCAgIC03N2UtMzYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NTUgYWRkICAxMCAgIC03N2UtMzcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NTYgYWRkICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNjQ2MCBhZGQgIC03N2UtMzIgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NjEgYWRkICAtNzdlLTMzICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ2MiBhZGQgIC03N2UtMzQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ2MyBhZGQgIC03N2UtMzUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NjQgYWRkICAtNzdlLTM2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDY1IGFkZCAgLTc3ZS0zNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDY2IGFkZCAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDY0NzAgYWRkICAtNzdlLTMyICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ3MSBhZGQgIC03N2UtMzMgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ3MiBhZGQgIC03N2UtMzQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NzMgYWRkICAtNzdlLTM1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDc0IGFkZCAgLTc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDc1IGFkZCAgLTc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDc2IGFkZCAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitkcWFkZDY0ODAgYWRkICAtMSAgICA3N2UtMzIgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ4MSBhZGQgIC0xICAgIDc3ZS0zMyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ4MiBhZGQgIC0xICAgIDc3ZS0zNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0ODMgYWRkICAtMSAgICA3N2UtMzUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ4NCBhZGQgIC0xICAgIDc3ZS0zNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDg1IGFkZCAgLTEgICAgNzdlLTM3ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ4NiBhZGQgIC0xICAgIDc3ZS05OSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNjQ5MCBhZGQgLTEwICAgIDc3ZS0zMiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ5MSBhZGQgLTEwICAgIDc3ZS0zMyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0OTIgYWRkIC0xMCAgICA3N2UtMzQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ5MyBhZGQgLTEwICAgIDc3ZS0zNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDk0IGFkZCAtMTAgICAgNzdlLTM2ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ5NSBhZGQgLTEwICAgIDc3ZS0zNyAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0OTYgYWRkIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDY1MDAgYWRkICAgNzdlLTMyICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjUwMSBhZGQgICA3N2UtMzMgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjUwMiBhZGQgICA3N2UtMzQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY1MDMgYWRkICAgNzdlLTM1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUwNCBhZGQgICA3N2UtMzYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTA1IGFkZCAgIDc3ZS0zNyAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUwNiBhZGQgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNjUxMCBhZGQgICA3N2UtMzIgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjUxMSBhZGQgICA3N2UtMzMgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY1MTIgYWRkICAgNzdlLTM0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUxMyBhZGQgICA3N2UtMzUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTE0IGFkZCAgIDc3ZS0zNiAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUxNSBhZGQgICA3N2UtMzcgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1MTYgYWRkICAgNzdlLTk5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2RxYWRkNjU0MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDY1NDEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NDQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQ2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NDcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQ5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTUyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTU1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJworZHFhZGQ2NTU3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcWFkZDY1NjAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JworZHFhZGQ2NTYxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTY0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTY3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTcwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTczIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTc2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcKK2RxYWRkNjU3NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTc4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RxYWRkNzU0MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTQxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NDIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RxYWRkNzU1MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDc1NTEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTUzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NTQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTU2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NTcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTU5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTYyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTY1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJworZHFhZGQ3NTY3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSBtb3JlIHplcm9zLCBldGMuCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RxYWRkNzcwMSBhZGQgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDAKK2RxYWRkNzcwMiBhZGQgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCitkcWFkZDc3MDMgYWRkIDAwLjAwIDBFLTMgICAtPiAwLjAwMAorZHFhZGQ3NzA0IGFkZCAwRS0zICAwMC4wMCAgLT4gMC4wMDAKKworZHFhZGQ3NzEwIGFkZCAwRSszICAwMC4wMCAgLT4gMC4wMAorZHFhZGQ3NzExIGFkZCAwRSszICAwMC4wICAgLT4gMC4wCitkcWFkZDc3MTIgYWRkIDBFKzMgIDAwLiAgICAtPiAwCitkcWFkZDc3MTMgYWRkIDBFKzMgIDAwLkUrMSAtPiAwRSsxCitkcWFkZDc3MTQgYWRkIDBFKzMgIDAwLkUrMiAtPiAwRSsyCitkcWFkZDc3MTUgYWRkIDBFKzMgIDAwLkUrMyAtPiAwRSszCitkcWFkZDc3MTYgYWRkIDBFKzMgIDAwLkUrNCAtPiAwRSszCitkcWFkZDc3MTcgYWRkIDBFKzMgIDAwLkUrNSAtPiAwRSszCitkcWFkZDc3MTggYWRkIDBFKzMgIC0wMC4wICAgLT4gMC4wCitkcWFkZDc3MTkgYWRkIDBFKzMgIC0wMC4gICAgLT4gMAorZHFhZGQ3NzMxIGFkZCAwRSszICAtMDAuRSsxIC0+IDBFKzEKKworZHFhZGQ3NzIwIGFkZCAwMC4wMCAgMEUrMyAgLT4gMC4wMAorZHFhZGQ3NzIxIGFkZCAwMC4wICAgMEUrMyAgLT4gMC4wCitkcWFkZDc3MjIgYWRkIDAwLiAgICAwRSszICAtPiAwCitkcWFkZDc3MjMgYWRkIDAwLkUrMSAwRSszICAtPiAwRSsxCitkcWFkZDc3MjQgYWRkIDAwLkUrMiAwRSszICAtPiAwRSsyCitkcWFkZDc3MjUgYWRkIDAwLkUrMyAwRSszICAtPiAwRSszCitkcWFkZDc3MjYgYWRkIDAwLkUrNCAwRSszICAtPiAwRSszCitkcWFkZDc3MjcgYWRkIDAwLkUrNSAwRSszICAtPiAwRSszCitkcWFkZDc3MjggYWRkIC0wMC4wMCAwRSszICAtPiAwLjAwCitkcWFkZDc3MjkgYWRkIC0wMC4wICAwRSszICAtPiAwLjAKK2RxYWRkNzczMCBhZGQgLTAwLiAgIDBFKzMgIC0+IDAKKworZHFhZGQ3NzMyIGFkZCAgMCAgICAgMCAgICAgLT4gIDAKK2RxYWRkNzczMyBhZGQgIDAgICAgLTAgICAgIC0+ICAwCitkcWFkZDc3MzQgYWRkIC0wICAgICAwICAgICAtPiAgMAorZHFhZGQ3NzM1IGFkZCAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgNzU0IHNwZWNpYWwgY2FzZQorCitkcWFkZDc3MzYgYWRkICAxICAgIC0xICAgICAtPiAgMAorZHFhZGQ3NzM3IGFkZCAtMSAgICAtMSAgICAgLT4gLTIKK2RxYWRkNzczOCBhZGQgIDEgICAgIDEgICAgIC0+ICAyCitkcWFkZDc3MzkgYWRkIC0xICAgICAxICAgICAtPiAgMAorCitkcWFkZDc3NDEgYWRkICAwICAgIC0xICAgICAtPiAtMQorZHFhZGQ3NzQyIGFkZCAtMCAgICAtMSAgICAgLT4gLTEKK2RxYWRkNzc0MyBhZGQgIDAgICAgIDEgICAgIC0+ICAxCitkcWFkZDc3NDQgYWRkIC0wICAgICAxICAgICAtPiAgMQorZHFhZGQ3NzQ1IGFkZCAtMSAgICAgMCAgICAgLT4gLTEKK2RxYWRkNzc0NiBhZGQgLTEgICAgLTAgICAgIC0+IC0xCitkcWFkZDc3NDcgYWRkICAxICAgICAwICAgICAtPiAgMQorZHFhZGQ3NzQ4IGFkZCAgMSAgICAtMCAgICAgLT4gIDEKKworZHFhZGQ3NzUxIGFkZCAgMC4wICAtMSAgICAgLT4gLTEuMAorZHFhZGQ3NzUyIGFkZCAtMC4wICAtMSAgICAgLT4gLTEuMAorZHFhZGQ3NzUzIGFkZCAgMC4wICAgMSAgICAgLT4gIDEuMAorZHFhZGQ3NzU0IGFkZCAtMC4wICAgMSAgICAgLT4gIDEuMAorZHFhZGQ3NzU1IGFkZCAtMS4wICAgMCAgICAgLT4gLTEuMAorZHFhZGQ3NzU2IGFkZCAtMS4wICAtMCAgICAgLT4gLTEuMAorZHFhZGQ3NzU3IGFkZCAgMS4wICAgMCAgICAgLT4gIDEuMAorZHFhZGQ3NzU4IGFkZCAgMS4wICAtMCAgICAgLT4gIDEuMAorCitkcWFkZDc3NjEgYWRkICAwICAgIC0xLjAgICAtPiAtMS4wCitkcWFkZDc3NjIgYWRkIC0wICAgIC0xLjAgICAtPiAtMS4wCitkcWFkZDc3NjMgYWRkICAwICAgICAxLjAgICAtPiAgMS4wCitkcWFkZDc3NjQgYWRkIC0wICAgICAxLjAgICAtPiAgMS4wCitkcWFkZDc3NjUgYWRkIC0xICAgICAwLjAgICAtPiAtMS4wCitkcWFkZDc3NjYgYWRkIC0xICAgIC0wLjAgICAtPiAtMS4wCitkcWFkZDc3NjcgYWRkICAxICAgICAwLjAgICAtPiAgMS4wCitkcWFkZDc3NjggYWRkICAxICAgIC0wLjAgICAtPiAgMS4wCisKK2RxYWRkNzc3MSBhZGQgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2RxYWRkNzc3MiBhZGQgLTAuMCAgLTEuMCAgIC0+IC0xLjAKK2RxYWRkNzc3MyBhZGQgIDAuMCAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkNzc3NCBhZGQgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkNzc3NSBhZGQgLTEuMCAgIDAuMCAgIC0+IC0xLjAKK2RxYWRkNzc3NiBhZGQgLTEuMCAgLTAuMCAgIC0+IC0xLjAKK2RxYWRkNzc3NyBhZGQgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2RxYWRkNzc3OCBhZGQgIDEuMCAgLTAuMCAgIC0+ICAxLjAKKworLS0gU3BlY2lhbHMKK2RxYWRkNzc4MCBhZGQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3NzgxIGFkZCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcWFkZDc3ODIgYWRkIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4MyBhZGQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFhZGQ3Nzg0IGFkZCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcWFkZDc3ODUgYWRkIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4NiBhZGQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFhZGQ3Nzg3IGFkZCAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3ODggYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4OSBhZGQgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3NzkwIGFkZCAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3OTEgYWRkICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc5MiBhZGQgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3NzkzIGFkZCAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3OTQgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkcWFkZDc4MDAgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODAxIGFkZCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcWFkZDc4MDIgYWRkICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwMyBhZGQgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODA0IGFkZCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcWFkZDc4MDUgYWRkICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwNiBhZGQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODA3IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDc4MDggYWRkIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwOSBhZGQgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4MTAgYWRkIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgxMSBhZGQgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODEyIGFkZCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDc4MTMgYWRkICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgxNCBhZGQgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODE1IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxYWRkNzgyMSBhZGQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxYWRkNzgyMiBhZGQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxYWRkNzgyMyBhZGQgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxYWRkNzgyNCBhZGQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxYWRkNzgyNSBhZGQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxYWRkNzgyNiBhZGQgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxYWRkNzgyNyBhZGQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxYWRkNzgyOCBhZGQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxYWRkNzgyOSBhZGQgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzMCBhZGQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzMSBhZGQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzMiBhZGQgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzMyBhZGQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzNCBhZGQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzNSBhZGQgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzNiBhZGQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzNyBhZGQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFhZGQ3ODQxIGFkZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0MiBhZGQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDMgYWRkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODQ0IGFkZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0NSBhZGQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDYgYWRkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODQ3IGFkZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0OCBhZGQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDkgYWRkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODUwIGFkZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1MSBhZGQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTIgYWRkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODUzIGFkZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1NCBhZGQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTUgYWRkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODU2IGFkZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1NyBhZGQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTggYWRkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODU5IGFkZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFhZGQ3ODYxIGFkZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2RxYWRkNzg2MiBhZGQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkcWFkZDc4NjMgYWRkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZHFhZGQ3ODY0IGFkZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2RxYWRkNzg2NSBhZGQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkcWFkZDc4NjYgYWRkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZHFhZGQ3ODY3IGFkZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2RxYWRkNzg2OCBhZGQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkcWFkZDc4NjkgYWRkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2RxYWRkNzg3MSBhZGQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3MiBhZGQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3MyBhZGQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3NCBhZGQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3NSBhZGQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3NiBhZGQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3NyBhZGQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3OCBhZGQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3OSBhZGQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg4MCBhZGQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg4MSBhZGQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg4MiBhZGQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZHFhZGQ3ODgzIGFkZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODg0IGFkZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkcWFkZDc4ODUgYWRkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEhlcmUgd2UgZXhwbG9yZSBuZWFyIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluCitkcWFkZDc1NzUgYWRkICAxRS02MTQzIC0xRS02MTc2IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbAorZHFhZGQ3NTc2IGFkZCAtMUUtNjE0MyArMUUtNjE3NiAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCBTdWJub3JtYWwKKworLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlCistLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RxYWRkNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxYWRkNzk3MyBhZGQgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5NzQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc1IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTEgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc2IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDlFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc3IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDhFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc4IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDdFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc5IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDZFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTgwIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDVFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTgxIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDRFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTgyIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDNFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTgzIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDJFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTg0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorCitkcWFkZDc5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFhZGQ3OTg2IGFkZCAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5ODcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk4OCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTExICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5ODkgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtOUUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTkwIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLThFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5MSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC03RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5OTIgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNkUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTkzIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTVFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5NCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC00RSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5OTUgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtM0UrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTk2IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTJFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCitkcWFkZDcxMTAwIGFkZCAxZSsyIC0xZS02MTQzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwMSBhZGQgMWUrMSAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTAzIGFkZCAgICsxIC0xZS02MTQzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTA0IGFkZCAxZS0xIC0xZS02MTQzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwNSBhZGQgMWUtMiAtMWUtNjE0MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTA2IGFkZCAxZS0zIC0xZS02MTQzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTA3IGFkZCAxZS00IC0xZS02MTQzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwOCBhZGQgMWUtNSAtMWUtNjE0MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTA5IGFkZCAxZS02IC0xZS02MTQzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitkcWFkZDcxMTEwIGFkZCAtMWUrMiArMWUtNjE0MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTEgYWRkIC0xZSsxICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTMgYWRkICAgIC0xICsxZS02MTQzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTE0IGFkZCAtMWUtMSArMWUtNjE0MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTUgYWRkIC0xZS0yICsxZS02MTQzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTYgYWRkIC0xZS0zICsxZS02MTQzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTE3IGFkZCAtMWUtNCArMWUtNjE0MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTggYWRkIC0xZS01ICsxZS02MTQzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTkgYWRkIC0xZS02ICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2RxYWRkNzEzMDAgYWRkIDFFMzQgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzEwIGFkZCAxRTM0ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxMSBhZGQgMUUzNCAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTIgYWRkIDFFMzQgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzEzIGFkZCAxRTM0ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxNCBhZGQgMUUzNCAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTUgYWRkIDFFMzQgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzE2IGFkZCAxRTM0ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxNyBhZGQgMUUzNCAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTggYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzE5IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyMCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjEgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzIyIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyMyBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjQgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzI1IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyNiBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjcgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzI4IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyOSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzAgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzMxIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzMiBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzMgYWRkIDFFMzQgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzM0IGFkZCAxRTM0ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzNSBhZGQgMUUzNCAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzYgYWRkIDFFMzQgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzM3IGFkZCAxRTM0ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzOCBhZGQgMUUzNCAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzkgYWRkIDFFMzQgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNzEzNDAgYWRkIDFFMzQgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzQxIGFkZCAxRTM0ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDcxMzQ5IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzUyIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzU1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzU4IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzYxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzY0IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzY4IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzc0IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzc3IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzgwIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzgzIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzg2IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4OCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzg5IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzOTAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM5MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzkyIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzOTMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM5NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzk1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzOTYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZAorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMAorZHFhZGQ3MTQyMCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDIxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDIyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQyMyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDI0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDI1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQyNiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDI3IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcKK2RxYWRkNzE0MjggYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOAorZHFhZGQ3MTQyOSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05CitkcWFkZDcxNDMwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwCitkcWFkZDcxNDMxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExCitkcWFkZDcxNDMyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyCitkcWFkZDcxNDMzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzCitkcWFkZDcxNDM0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0CitkcWFkZDcxNDM1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1CitkcWFkZDcxNDM2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2CitkcWFkZDcxNDM3IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3CitkcWFkZDcxNDM4IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4CitkcWFkZDcxNDM5IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5CitkcWFkZDcxNDQwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwCitkcWFkZDcxNDQxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxCitkcWFkZDcxNDQyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyCitkcWFkZDcxNDQzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzCitkcWFkZDcxNDQ0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0CitkcWFkZDcxNDQ1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1CitkcWFkZDcxNDQ2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2CitkcWFkZDcxNDQ3IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3CitkcWFkZDcxNDQ4IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjggLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4CitkcWFkZDcxNDQ5IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5CitkcWFkZDcxNDUwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwCitkcWFkZDcxNDUxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxCitkcWFkZDcxNDUyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyCitkcWFkZDcxNDUzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzCitkcWFkZDcxNDU0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0CitkcWFkZDcxNDU1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1CitkcWFkZDcxNDU2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2RxYWRkNzE0NjAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAgICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDYxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zICAwIC0+IDAuMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDY0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS02ICAwIC0+IDAuMDAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDY3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNworZHFhZGQ3MTQ2OCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTgKK2RxYWRkNzE0NjkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05CitkcWFkZDcxNDcwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RxYWRkNzE0NzEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZHFhZGQ3MTQ3MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyCitkcWFkZDcxNDczIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RxYWRkNzE0NzQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZHFhZGQ3MTQ3NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1CitkcWFkZDcxNDc2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RxYWRkNzE0NzcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNworZHFhZGQ3MTQ3OCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4CitkcWFkZDcxNDc5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkKK2RxYWRkNzE0ODAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMAorZHFhZGQ3MTQ4MSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxCitkcWFkZDcxNDgyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIKK2RxYWRkNzE0ODMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMworZHFhZGQ3MTQ4NCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0CitkcWFkZDcxNDg1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUKK2RxYWRkNzE0ODYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNgorZHFhZGQ3MTQ4NyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3CitkcWFkZDcxNDg4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjggMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgKK2RxYWRkNzE0ODkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOQorZHFhZGQ3MTQ5MCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwCitkcWFkZDcxNDkxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEKK2RxYWRkNzE0OTIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMgorZHFhZGQ3MTQ5MyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzCitkcWFkZDcxNDk0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQKK2RxYWRkNzE0OTUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNQorZHFhZGQ3MTQ5NiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2CisKKy0tIHNhbWUsIEVzIG9uIHRoZSAwCitkcWFkZDcxNTAwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTAxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTAyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTAzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTEwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTExIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTEyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTEzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTIwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTIxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTIyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTIzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTMwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTMxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTMyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTMzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CistLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0CitkcWFkZDcxNTM0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RxYWRkNzE1MzUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZHFhZGQ3MTUzNiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkcWFkZDcxNTM3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNjAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTYwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE2MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDcxNjEyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgaGFsZl9kb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNjIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTYyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE2MzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDcxNjMyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNjQwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY0MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2NDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjQzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE2NTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDcxNjUyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkNzE2NjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjYxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY2MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2NjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQ3MTY3MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkNzE2NzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBkb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNjgwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY4MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2ODIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjgzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE2OTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDcxNjkyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgY2VpbGluZworLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQ3MTcwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE3MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNzAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTcwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDcxNzExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQ3MTcxMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkNzE3MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNzIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZHFhZGQ3MTcyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RxYWRkNzE3MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQ3MTczMSBhZGQgLTExICAgICAgMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKK2RxYWRkNzE3MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZHFhZGQ3MTc0MSBhZGQgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCitkcWFkZDcxNzQyIGFkZCAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKK2RxYWRkNzE3NDMgYWRkIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAorZHFhZGQ3MTc0NCBhZGQgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CitkcWFkZDcxNzQ1IGFkZCAxMzBFLTIgICAtMTIwRS0yIC0+IDAuMTAKK2RxYWRkNzE3NDYgYWRkIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMAorZHFhZGQ3MTc0NyBhZGQgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwCitkcWFkZDcxNzQ4IGFkZCAxRTIgICAgICAtMUU0ICAgIC0+IC05LjlFKzMKKworLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcAorcm91bmRpbmc6IGhhbGZfZXZlbgorCitkcWFkZDc1MDAxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU3CitkcWFkZDc1MDAyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMDMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAwNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDA1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMDYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAwNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDA4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMDkgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxMCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDExIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDE0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDE3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDIwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMjEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorCistLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwCitkcWFkZDc1MDMwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OQorZHFhZGQ3NTAzMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMQorZHFhZGQ3NTAzMiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIKK2RxYWRkNzUwMzMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMworZHFhZGQ3NTAzNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNAorZHFhZGQ3NTAzNSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDUKK2RxYWRkNzUwMzYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1NgorZHFhZGQ3NTAzNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NworZHFhZGQ3NTAzOCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzgKK2RxYWRkNzUwMzkgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQ0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQ3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ngorcm91bmRpbmc6IGhhbGZfZXZlbgorZHFhZGQ3NTA1MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDUxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNTIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA1MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDU0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNTUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA1NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDU3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDYyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDY1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCistLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpCityb3VuZGluZzogdXAKK2RxYWRkNzUwNzAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxCitkcWFkZDc1MDcxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDc0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDc3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDgwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDgzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDg2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDg5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gTnVsbCB0ZXN0cworZHFhZGQ5OTkwIGFkZCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkOTk5MSBhZGQgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBbmQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFuZC5kZWNUZXN0CmluZGV4IDU3YzQxNmIuLmQ2MDliYzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFuZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFuZC5kZWNUZXN0CkBAIC0xLDQyMCArMSw0MjAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQW5kLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgQU5EIGZvciBkZWNRdWFkcyAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCi1kcWFuZDAwMSBhbmQgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDANCi1kcWFuZDAwMiBhbmQgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDANCi1kcWFuZDAwMyBhbmQgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDANCi1kcWFuZDAwNCBhbmQgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDENCi1kcWFuZDAwNSBhbmQgICAgICAgICAgMTEwMCAxMDEwIC0+IDEwMDANCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQ0KLS0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotZHFhbmQwMDYgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCi1kcWFuZDAwNyBhbmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KLWRxYW5kMDA4IGFuZCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQotZHFhbmQwMDkgYW5kIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWFuZDAxMCBhbmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KLWRxYW5kMDExIGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQotZHFhbmQwMTIgYW5kIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCi1kcWFuZDAxMyBhbmQgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tIFZhcmlvdXMgbGVuZ3Rocw0KLS0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotDQotZHFhbmQ2MDEgYW5kIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjAyIGFuZCAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDYwMyBhbmQgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2MDQgYW5kIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjA1IGFuZCAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDYwNiBhbmQgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2MDcgYW5kIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjA4IGFuZCAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDYwOSBhbmQgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2MTAgYW5kIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjExIGFuZCAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDYxMiBhbmQgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2MTMgYW5kIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjE0IGFuZCAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDYxNSBhbmQgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2MTYgYW5kIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjE3IGFuZCAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTENCi1kcWFuZDYxOCBhbmQgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExDQotZHFhbmQ2MTkgYW5kIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMQ0KLWRxYW5kNjIwIGFuZCAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTENCi1kcWFuZDYyMSBhbmQgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExDQotZHFhbmQ2MjIgYW5kIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMQ0KLWRxYW5kNjIzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTENCi1kcWFuZDYyNCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExDQotZHFhbmQ2MjUgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMQ0KLWRxYW5kNjI2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTENCi1kcWFuZDYyNyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExDQotZHFhbmQ2MjggYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMQ0KLWRxYW5kNjI5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTENCi1kcWFuZDYzMCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExDQotZHFhbmQ2MzEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMQ0KLWRxYW5kNjMyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTENCi1kcWFuZDYzMyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxDQotZHFhbmQ2MzQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMA0KLQ0KLWRxYW5kNjQxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDY0MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NDMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjQ0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDY0NSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NDYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjQ3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDY0OCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NDkgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjUwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDY1MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NTIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjUzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDY1NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NTUgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjU2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTENCi1kcWFuZDY1NyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExDQotZHFhbmQ2NTggYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjU5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTENCi1kcWFuZDY2MCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExDQotZHFhbmQ2NjEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMQ0KLWRxYW5kNjYyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTENCi1kcWFuZDY2MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExDQotZHFhbmQ2NjQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMQ0KLWRxYW5kNjY1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTENCi1kcWFuZDY2NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExDQotZHFhbmQ2NjcgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMQ0KLWRxYW5kNjY4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTENCi1kcWFuZDY2OSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExDQotZHFhbmQ2NzAgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMQ0KLWRxYW5kNjcxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTENCi1kcWFuZDY3MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExDQotZHFhbmQ2NzMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMQ0KLWRxYW5kNjc0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTANCi1kcWFuZDY3NSBhbmQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwDQotZHFhbmQ2NzYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMA0KLQ0KLWRxYW5kMDIxIGFuZCAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExDQotZHFhbmQwMjQgYW5kIDExMTExMTExMTExMTExMTEgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTENCi1kcWFuZDAyNSBhbmQgMTExMTExMTExMTExMTExMSAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQ0KLWRxYW5kMDI2IGFuZCAxMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTEgIC0+ICAgICAxMTExMTExMTExMTExDQotZHFhbmQwMjcgYW5kIDExMTExMTExMTExMTExMTEgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTENCi1kcWFuZDAyOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQ0KLWRxYW5kMDI5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgIDExMTExMTExMTEgIC0+ICAgICAgICAxMTExMTExMTExDQotZHFhbmQwMzAgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTENCi1kcWFuZDAzMSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQ0KLWRxYW5kMDMyIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgIDExMTExMTEgIC0+ICAgICAgICAgICAxMTExMTExDQotZHFhbmQwMzMgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTENCi1kcWFuZDAzNCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQ0KLWRxYW5kMDM1IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgIDExMTEgIC0+ICAgICAgICAgICAgICAxMTExDQotZHFhbmQwMzYgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTENCi1kcWFuZDAzNyBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQ0KLWRxYW5kMDM4IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgICAgICAgICAxDQotZHFhbmQwMzkgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDANCi0NCi1kcWFuZDA0MCBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAxMTExMTExMTExMTExMTExDQotZHFhbmQwNDEgYW5kICAxMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMQ0KLWRxYW5kMDQyIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTENCi1kcWFuZDA0MyBhbmQgICAxMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgIDExMTExMTExMTExMTExDQotZHFhbmQwNDQgYW5kICAgIDExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgMTExMTExMTExMTExMQ0KLWRxYW5kMDQ1IGFuZCAgICAgMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAxMTExMTExMTExMTENCi1kcWFuZDA0NiBhbmQgICAgICAxMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgIDExMTExMTExMTExDQotZHFhbmQwNDcgYW5kICAgICAgIDExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgMTExMTExMTExMQ0KLWRxYW5kMDQ4IGFuZCAgICAgICAgMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAxMTExMTExMTENCi1kcWFuZDA0OSBhbmQgICAgICAgICAxMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgIDExMTExMTExDQotZHFhbmQwNTAgYW5kICAgICAgICAgIDExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgMTExMTExMQ0KLWRxYW5kMDUxIGFuZCAgICAgICAgICAgMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAxMTExMTENCi1kcWFuZDA1MiBhbmQgICAgICAgICAgICAxMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgIDExMTExDQotZHFhbmQwNTMgYW5kICAgICAgICAgICAgIDExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgMTExMQ0KLWRxYW5kMDU0IGFuZCAgICAgICAgICAgICAgMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAxMTENCi1kcWFuZDA1NSBhbmQgICAgICAgICAgICAgICAxMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgIDExDQotZHFhbmQwNTYgYW5kICAgICAgICAgICAgICAgIDEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgMQ0KLWRxYW5kMDU3IGFuZCAgICAgICAgICAgICAgICAwICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDANCi0NCi1kcWFuZDE1MCBhbmQgMTExMTExMTExMSAgMSAgLT4gIDENCi1kcWFuZDE1MSBhbmQgIDExMTExMTExMSAgMSAgLT4gIDENCi1kcWFuZDE1MiBhbmQgICAxMTExMTExMSAgMSAgLT4gIDENCi1kcWFuZDE1MyBhbmQgICAgMTExMTExMSAgMSAgLT4gIDENCi1kcWFuZDE1NCBhbmQgICAgIDExMTExMSAgMSAgLT4gIDENCi1kcWFuZDE1NSBhbmQgICAgICAxMTExMSAgMSAgLT4gIDENCi1kcWFuZDE1NiBhbmQgICAgICAgMTExMSAgMSAgLT4gIDENCi1kcWFuZDE1NyBhbmQgICAgICAgIDExMSAgMSAgLT4gIDENCi1kcWFuZDE1OCBhbmQgICAgICAgICAxMSAgMSAgLT4gIDENCi1kcWFuZDE1OSBhbmQgICAgICAgICAgMSAgMSAgLT4gIDENCi0NCi1kcWFuZDE2MCBhbmQgMTExMTExMTExMSAgMCAgLT4gIDANCi1kcWFuZDE2MSBhbmQgIDExMTExMTExMSAgMCAgLT4gIDANCi1kcWFuZDE2MiBhbmQgICAxMTExMTExMSAgMCAgLT4gIDANCi1kcWFuZDE2MyBhbmQgICAgMTExMTExMSAgMCAgLT4gIDANCi1kcWFuZDE2NCBhbmQgICAgIDExMTExMSAgMCAgLT4gIDANCi1kcWFuZDE2NSBhbmQgICAgICAxMTExMSAgMCAgLT4gIDANCi1kcWFuZDE2NiBhbmQgICAgICAgMTExMSAgMCAgLT4gIDANCi1kcWFuZDE2NyBhbmQgICAgICAgIDExMSAgMCAgLT4gIDANCi1kcWFuZDE2OCBhbmQgICAgICAgICAxMSAgMCAgLT4gIDANCi1kcWFuZDE2OSBhbmQgICAgICAgICAgMSAgMCAgLT4gIDANCi0NCi1kcWFuZDE3MCBhbmQgMSAgMTExMTExMTExMSAgLT4gIDENCi1kcWFuZDE3MSBhbmQgMSAgIDExMTExMTExMSAgLT4gIDENCi1kcWFuZDE3MiBhbmQgMSAgICAxMTExMTExMSAgLT4gIDENCi1kcWFuZDE3MyBhbmQgMSAgICAgMTExMTExMSAgLT4gIDENCi1kcWFuZDE3NCBhbmQgMSAgICAgIDExMTExMSAgLT4gIDENCi1kcWFuZDE3NSBhbmQgMSAgICAgICAxMTExMSAgLT4gIDENCi1kcWFuZDE3NiBhbmQgMSAgICAgICAgMTExMSAgLT4gIDENCi1kcWFuZDE3NyBhbmQgMSAgICAgICAgIDExMSAgLT4gIDENCi1kcWFuZDE3OCBhbmQgMSAgICAgICAgICAxMSAgLT4gIDENCi1kcWFuZDE3OSBhbmQgMSAgICAgICAgICAgMSAgLT4gIDENCi0NCi1kcWFuZDE4MCBhbmQgMCAgMTExMTExMTExMSAgLT4gIDANCi1kcWFuZDE4MSBhbmQgMCAgIDExMTExMTExMSAgLT4gIDANCi1kcWFuZDE4MiBhbmQgMCAgICAxMTExMTExMSAgLT4gIDANCi1kcWFuZDE4MyBhbmQgMCAgICAgMTExMTExMSAgLT4gIDANCi1kcWFuZDE4NCBhbmQgMCAgICAgIDExMTExMSAgLT4gIDANCi1kcWFuZDE4NSBhbmQgMCAgICAgICAxMTExMSAgLT4gIDANCi1kcWFuZDE4NiBhbmQgMCAgICAgICAgMTExMSAgLT4gIDANCi1kcWFuZDE4NyBhbmQgMCAgICAgICAgIDExMSAgLT4gIDANCi1kcWFuZDE4OCBhbmQgMCAgICAgICAgICAxMSAgLT4gIDANCi1kcWFuZDE4OSBhbmQgMCAgICAgICAgICAgMSAgLT4gIDANCi0NCi1kcWFuZDA5MCBhbmQgMDExMTExMTExICAxMTExMTExMTEgIC0+ICAgMTExMTExMTENCi1kcWFuZDA5MSBhbmQgMTAxMTExMTExICAxMTExMTExMTEgIC0+ICAxMDExMTExMTENCi1kcWFuZDA5MiBhbmQgMTEwMTExMTExICAxMTExMTExMTEgIC0+ICAxMTAxMTExMTENCi1kcWFuZDA5MyBhbmQgMTExMDExMTExICAxMTExMTExMTEgIC0+ICAxMTEwMTExMTENCi1kcWFuZDA5NCBhbmQgMTExMTAxMTExICAxMTExMTExMTEgIC0+ICAxMTExMDExMTENCi1kcWFuZDA5NSBhbmQgMTExMTEwMTExICAxMTExMTExMTEgIC0+ICAxMTExMTAxMTENCi1kcWFuZDA5NiBhbmQgMTExMTExMDExICAxMTExMTExMTEgIC0+ICAxMTExMTEwMTENCi1kcWFuZDA5NyBhbmQgMTExMTExMTAxICAxMTExMTExMTEgIC0+ICAxMTExMTExMDENCi1kcWFuZDA5OCBhbmQgMTExMTExMTEwICAxMTExMTExMTEgIC0+ICAxMTExMTExMTANCi0NCi1kcWFuZDEwMCBhbmQgMTExMTExMTExICAwMTExMTExMTEgIC0+ICAgMTExMTExMTENCi1kcWFuZDEwMSBhbmQgMTExMTExMTExICAxMDExMTExMTEgIC0+ICAxMDExMTExMTENCi1kcWFuZDEwMiBhbmQgMTExMTExMTExICAxMTAxMTExMTEgIC0+ICAxMTAxMTExMTENCi1kcWFuZDEwMyBhbmQgMTExMTExMTExICAxMTEwMTExMTEgIC0+ICAxMTEwMTExMTENCi1kcWFuZDEwNCBhbmQgMTExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTENCi1kcWFuZDEwNSBhbmQgMTExMTExMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTAxMTENCi1kcWFuZDEwNiBhbmQgMTExMTExMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTEwMTENCi1kcWFuZDEwNyBhbmQgMTExMTExMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMDENCi1kcWFuZDEwOCBhbmQgMTExMTExMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTANCi0NCi0tLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCi1kcWFuZDIyMCBhbmQgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIyMSBhbmQgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIyMiBhbmQgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIyMyBhbmQgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIyNCBhbmQgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIyNSBhbmQgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIyNiBhbmQgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIyNyBhbmQgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIyOCBhbmQgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIyOSBhbmQgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIzMCBhbmQgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIzMSBhbmQgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDIzMiBhbmQgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhIGZldyByYW5kb21zDQotZHFhbmQyNDAgYW5kICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNDEgYW5kICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNDIgYW5kIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNDMgYW5kIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNDQgYW5kICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QNCi1kcWFuZDI1MCBhbmQgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNTEgYW5kICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjUyIGFuZCAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI1MyBhbmQgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNTQgYW5kICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjU1IGFuZCAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI1NiBhbmQgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNTcgYW5kICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjU4IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI1OSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNjAgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjYxIGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI2MiBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNjMgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjY0IGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI2NSBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QtMQ0KLWRxYW5kMjcwIGFuZCAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI3MSBhbmQgIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNzIgYW5kICAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjczIGFuZCAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI3NCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNzUgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjc2IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMTAwMCAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI3NyBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi1kcWFuZDI4MCBhbmQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyODEgYW5kICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjgyIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwOCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI4MyBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDkgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyODQgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjg1IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI4NiBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMDEwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyODcgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTWlkZGllDQotZHFhbmQyODggYW5kICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjg5IGFuZCAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI5MCBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwODAwMDAwMTAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyOTEgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDkwMDAwMTAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjkyIGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI5MyBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyOTQgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjk1IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzaWducw0KLWRxYW5kMjk2IGFuZCAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyOTcgYW5kIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI5OCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjk5IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMTAwMDEwMCAtPiAgMTEwMDAwMTEwMDAwMTEwMDAwMDAxMDAwMDAwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQ0KLWRxYW5kMzMxIGFuZCAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzMzIgYW5kICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDMzMyBhbmQgIDQgICAxLjAwMDAwMDAwRS05OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzM0IGFuZCAgNSAgIDFFLTkwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzMzUgYW5kICA2ICAgLTFFLTkwMCAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDMzNiBhbmQgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzM3IGFuZCAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzMzggYW5kICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM0MSBhbmQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzQyIGFuZCAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNDMgYW5kICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM0NCBhbmQgIDFFLTkwMCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzQ1IGFuZCAgLTFFLTkwMCAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNDYgYW5kICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM0NyBhbmQgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzQ4IGFuZCAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQotZHFhbmQzNjEgYW5kICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM2MiBhbmQgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzYzIGFuZCAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNjQgYW5kICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM2NSBhbmQgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzY2IGFuZCAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNzEgYW5kICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM3MiBhbmQgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzczIGFuZCAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNzQgYW5kICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM3NSBhbmQgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzc2IGFuZCAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KLWRxYW5kNzgwIGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ3ODEgYW5kIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDc4MiBhbmQgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kNzgzIGFuZCAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ3ODQgYW5kIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDc4NSBhbmQgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kNzg2IGFuZCAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ3ODcgYW5kIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDc4OCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kNzg5IGFuZCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ3OTAgYW5kIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDc5MSBhbmQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kNzkyIGFuZCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ3OTMgYW5kICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDc5NCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxYW5kODAwIGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MDEgYW5kICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgwMiBhbmQgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODAzIGFuZCAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MDQgYW5kICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgwNSBhbmQgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODA2IGFuZCAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MDcgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgwOCBhbmQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODA5IGFuZCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MTAgYW5kIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgxMSBhbmQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODEyIGFuZCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MTMgYW5kICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgxNCBhbmQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODE1IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFhbmQ4MjEgYW5kICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgyMiBhbmQgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODIzIGFuZCAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MjQgYW5kICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgyNSBhbmQgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODI2IGFuZCAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MjcgYW5kICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgyOCBhbmQgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODI5IGFuZCAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MzAgYW5kIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgzMSBhbmQgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODMyIGFuZCAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MzMgYW5kIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgzNCBhbmQgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODM1IGFuZCAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MzYgYW5kICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgzNyBhbmQgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxYW5kODQxIGFuZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg0MiBhbmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NDMgYW5kICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODQ0IGFuZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg0NSBhbmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NDYgYW5kICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODQ3IGFuZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg0OCBhbmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NDkgYW5kICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODUwIGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg1MSBhbmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NTIgYW5kIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODUzIGFuZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg1NCBhbmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NTUgYW5kICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODU2IGFuZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg1NyBhbmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NTggYW5kICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODU5IGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFhbmQ4NjEgYW5kICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg2MiBhbmQgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODYzIGFuZCAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NjQgYW5kICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg2NSBhbmQgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODY2IGFuZCAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NjcgYW5kIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg2OCBhbmQgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODY5IGFuZCAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NzEgYW5kICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg3MiBhbmQgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODczIGFuZCAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NzQgYW5kICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg3NSBhbmQgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODc2IGFuZCAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NzcgYW5kIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg3OCBhbmQgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODc5IGFuZCAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4ODAgYW5kICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg4MSBhbmQgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODgyIGFuZCAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4ODMgYW5kIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg4NCBhbmQgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODg1IGFuZCAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUFuZC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIEFORCBmb3IgZGVjUXVhZHMgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkcWFuZDAwMSBhbmQgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2RxYW5kMDAyIGFuZCAgICAgICAgICAgICAwICAgIDEgLT4gICAgMAorZHFhbmQwMDMgYW5kICAgICAgICAgICAgIDEgICAgMCAtPiAgICAwCitkcWFuZDAwNCBhbmQgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK2RxYW5kMDA1IGFuZCAgICAgICAgICAxMTAwIDEwMTAgLT4gMTAwMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKKy0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcWFuZDAwNiBhbmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZHFhbmQwMDcgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RxYW5kMDA4IGFuZCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkcWFuZDAwOSBhbmQgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFhbmQwMTAgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RxYW5kMDExIGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkcWFuZDAxMiBhbmQgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZHFhbmQwMTMgYW5kIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCitkcWFuZDYwMSBhbmQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwMiBhbmQgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwMyBhbmQgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwNCBhbmQgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwNSBhbmQgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwNiBhbmQgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwNyBhbmQgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwOCBhbmQgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwOSBhbmQgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxMCBhbmQgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxMSBhbmQgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxMiBhbmQgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxMyBhbmQgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxNCBhbmQgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxNSBhbmQgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExCitkcWFuZDYxNiBhbmQgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExCitkcWFuZDYxNyBhbmQgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExCitkcWFuZDYxOCBhbmQgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExCitkcWFuZDYxOSBhbmQgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExCitkcWFuZDYyMCBhbmQgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExCitkcWFuZDYyMSBhbmQgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExCitkcWFuZDYyMiBhbmQgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExCitkcWFuZDYyMyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExCitkcWFuZDYyNCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExCitkcWFuZDYyNSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExCitkcWFuZDYyNiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExCitkcWFuZDYyNyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExCitkcWFuZDYyOCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExCitkcWFuZDYyOSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExCitkcWFuZDYzMCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExCitkcWFuZDYzMSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExCitkcWFuZDYzMiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExCitkcWFuZDYzMyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxCitkcWFuZDYzNCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCisKK2RxYW5kNjQxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjUwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjUxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjUyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjUzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjU0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjU1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjU2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEKK2RxYW5kNjU3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEKK2RxYW5kNjU4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEKK2RxYW5kNjU5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEKK2RxYW5kNjYwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEKK2RxYW5kNjYxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEKK2RxYW5kNjYyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEKK2RxYW5kNjYzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEKK2RxYW5kNjY0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEKK2RxYW5kNjY1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEKK2RxYW5kNjY2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEKK2RxYW5kNjY3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEKK2RxYW5kNjY4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEKK2RxYW5kNjY5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEKK2RxYW5kNjcwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEKK2RxYW5kNjcxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEKK2RxYW5kNjcyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEKK2RxYW5kNjczIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEKK2RxYW5kNjc0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKK2RxYW5kNjc1IGFuZCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKK2RxYW5kNjc2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKKworZHFhbmQwMjEgYW5kIDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTEKK2RxYW5kMDI0IGFuZCAxMTExMTExMTExMTExMTExICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExCitkcWFuZDAyNSBhbmQgMTExMTExMTExMTExMTExMSAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQorZHFhbmQwMjYgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMSAgLT4gICAgIDExMTExMTExMTExMTEKK2RxYW5kMDI3IGFuZCAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExCitkcWFuZDAyOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQorZHFhbmQwMjkgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMSAgLT4gICAgICAgIDExMTExMTExMTEKK2RxYW5kMDMwIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExCitkcWFuZDAzMSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQorZHFhbmQwMzIgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgMTExMTExMSAgLT4gICAgICAgICAgIDExMTExMTEKK2RxYW5kMDMzIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExCitkcWFuZDAzNCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQorZHFhbmQwMzUgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgMTExMSAgLT4gICAgICAgICAgICAgIDExMTEKK2RxYW5kMDM2IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExCitkcWFuZDAzNyBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQorZHFhbmQwMzggYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgICAgICAgIDEKK2RxYW5kMDM5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwCisKK2RxYW5kMDQwIGFuZCAxMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gIDExMTExMTExMTExMTExMTEKK2RxYW5kMDQxIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTEKK2RxYW5kMDQyIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTEKK2RxYW5kMDQzIGFuZCAgIDExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgMTExMTExMTExMTExMTEKK2RxYW5kMDQ0IGFuZCAgICAxMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgIDExMTExMTExMTExMTEKK2RxYW5kMDQ1IGFuZCAgICAgMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAxMTExMTExMTExMTEKK2RxYW5kMDQ2IGFuZCAgICAgIDExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgMTExMTExMTExMTEKK2RxYW5kMDQ3IGFuZCAgICAgICAxMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgIDExMTExMTExMTEKK2RxYW5kMDQ4IGFuZCAgICAgICAgMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAxMTExMTExMTEKK2RxYW5kMDQ5IGFuZCAgICAgICAgIDExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgMTExMTExMTEKK2RxYW5kMDUwIGFuZCAgICAgICAgICAxMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgIDExMTExMTEKK2RxYW5kMDUxIGFuZCAgICAgICAgICAgMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAxMTExMTEKK2RxYW5kMDUyIGFuZCAgICAgICAgICAgIDExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgMTExMTEKK2RxYW5kMDUzIGFuZCAgICAgICAgICAgICAxMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgIDExMTEKK2RxYW5kMDU0IGFuZCAgICAgICAgICAgICAgMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAxMTEKK2RxYW5kMDU1IGFuZCAgICAgICAgICAgICAgIDExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgMTEKK2RxYW5kMDU2IGFuZCAgICAgICAgICAgICAgICAxICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDEKK2RxYW5kMDU3IGFuZCAgICAgICAgICAgICAgICAwICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDAKKworZHFhbmQxNTAgYW5kIDExMTExMTExMTEgIDEgIC0+ICAxCitkcWFuZDE1MSBhbmQgIDExMTExMTExMSAgMSAgLT4gIDEKK2RxYW5kMTUyIGFuZCAgIDExMTExMTExICAxICAtPiAgMQorZHFhbmQxNTMgYW5kICAgIDExMTExMTEgIDEgIC0+ICAxCitkcWFuZDE1NCBhbmQgICAgIDExMTExMSAgMSAgLT4gIDEKK2RxYW5kMTU1IGFuZCAgICAgIDExMTExICAxICAtPiAgMQorZHFhbmQxNTYgYW5kICAgICAgIDExMTEgIDEgIC0+ICAxCitkcWFuZDE1NyBhbmQgICAgICAgIDExMSAgMSAgLT4gIDEKK2RxYW5kMTU4IGFuZCAgICAgICAgIDExICAxICAtPiAgMQorZHFhbmQxNTkgYW5kICAgICAgICAgIDEgIDEgIC0+ICAxCisKK2RxYW5kMTYwIGFuZCAxMTExMTExMTExICAwICAtPiAgMAorZHFhbmQxNjEgYW5kICAxMTExMTExMTEgIDAgIC0+ICAwCitkcWFuZDE2MiBhbmQgICAxMTExMTExMSAgMCAgLT4gIDAKK2RxYW5kMTYzIGFuZCAgICAxMTExMTExICAwICAtPiAgMAorZHFhbmQxNjQgYW5kICAgICAxMTExMTEgIDAgIC0+ICAwCitkcWFuZDE2NSBhbmQgICAgICAxMTExMSAgMCAgLT4gIDAKK2RxYW5kMTY2IGFuZCAgICAgICAxMTExICAwICAtPiAgMAorZHFhbmQxNjcgYW5kICAgICAgICAxMTEgIDAgIC0+ICAwCitkcWFuZDE2OCBhbmQgICAgICAgICAxMSAgMCAgLT4gIDAKK2RxYW5kMTY5IGFuZCAgICAgICAgICAxICAwICAtPiAgMAorCitkcWFuZDE3MCBhbmQgMSAgMTExMTExMTExMSAgLT4gIDEKK2RxYW5kMTcxIGFuZCAxICAgMTExMTExMTExICAtPiAgMQorZHFhbmQxNzIgYW5kIDEgICAgMTExMTExMTEgIC0+ICAxCitkcWFuZDE3MyBhbmQgMSAgICAgMTExMTExMSAgLT4gIDEKK2RxYW5kMTc0IGFuZCAxICAgICAgMTExMTExICAtPiAgMQorZHFhbmQxNzUgYW5kIDEgICAgICAgMTExMTEgIC0+ICAxCitkcWFuZDE3NiBhbmQgMSAgICAgICAgMTExMSAgLT4gIDEKK2RxYW5kMTc3IGFuZCAxICAgICAgICAgMTExICAtPiAgMQorZHFhbmQxNzggYW5kIDEgICAgICAgICAgMTEgIC0+ICAxCitkcWFuZDE3OSBhbmQgMSAgICAgICAgICAgMSAgLT4gIDEKKworZHFhbmQxODAgYW5kIDAgIDExMTExMTExMTEgIC0+ICAwCitkcWFuZDE4MSBhbmQgMCAgIDExMTExMTExMSAgLT4gIDAKK2RxYW5kMTgyIGFuZCAwICAgIDExMTExMTExICAtPiAgMAorZHFhbmQxODMgYW5kIDAgICAgIDExMTExMTEgIC0+ICAwCitkcWFuZDE4NCBhbmQgMCAgICAgIDExMTExMSAgLT4gIDAKK2RxYW5kMTg1IGFuZCAwICAgICAgIDExMTExICAtPiAgMAorZHFhbmQxODYgYW5kIDAgICAgICAgIDExMTEgIC0+ICAwCitkcWFuZDE4NyBhbmQgMCAgICAgICAgIDExMSAgLT4gIDAKK2RxYW5kMTg4IGFuZCAwICAgICAgICAgIDExICAtPiAgMAorZHFhbmQxODkgYW5kIDAgICAgICAgICAgIDEgIC0+ICAwCisKK2RxYW5kMDkwIGFuZCAwMTExMTExMTEgIDExMTExMTExMSAgLT4gICAxMTExMTExMQorZHFhbmQwOTEgYW5kIDEwMTExMTExMSAgMTExMTExMTExICAtPiAgMTAxMTExMTExCitkcWFuZDA5MiBhbmQgMTEwMTExMTExICAxMTExMTExMTEgIC0+ICAxMTAxMTExMTEKK2RxYW5kMDkzIGFuZCAxMTEwMTExMTEgIDExMTExMTExMSAgLT4gIDExMTAxMTExMQorZHFhbmQwOTQgYW5kIDExMTEwMTExMSAgMTExMTExMTExICAtPiAgMTExMTAxMTExCitkcWFuZDA5NSBhbmQgMTExMTEwMTExICAxMTExMTExMTEgIC0+ICAxMTExMTAxMTEKK2RxYW5kMDk2IGFuZCAxMTExMTEwMTEgIDExMTExMTExMSAgLT4gIDExMTExMTAxMQorZHFhbmQwOTcgYW5kIDExMTExMTEwMSAgMTExMTExMTExICAtPiAgMTExMTExMTAxCitkcWFuZDA5OCBhbmQgMTExMTExMTEwICAxMTExMTExMTEgIC0+ICAxMTExMTExMTAKKworZHFhbmQxMDAgYW5kIDExMTExMTExMSAgMDExMTExMTExICAtPiAgIDExMTExMTExCitkcWFuZDEwMSBhbmQgMTExMTExMTExICAxMDExMTExMTEgIC0+ICAxMDExMTExMTEKK2RxYW5kMTAyIGFuZCAxMTExMTExMTEgIDExMDExMTExMSAgLT4gIDExMDExMTExMQorZHFhbmQxMDMgYW5kIDExMTExMTExMSAgMTExMDExMTExICAtPiAgMTExMDExMTExCitkcWFuZDEwNCBhbmQgMTExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2RxYW5kMTA1IGFuZCAxMTExMTExMTEgIDExMTExMDExMSAgLT4gIDExMTExMDExMQorZHFhbmQxMDYgYW5kIDExMTExMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMDExCitkcWFuZDEwNyBhbmQgMTExMTExMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMDEKK2RxYW5kMTA4IGFuZCAxMTExMTExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMAorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2RxYW5kMjIwIGFuZCAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjEgYW5kIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyMiBhbmQgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjIzIGFuZCA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjQgYW5kIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyNSBhbmQgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjI2IGFuZCA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjcgYW5kIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyOCBhbmQgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjI5IGFuZCA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMzAgYW5kIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIzMSBhbmQgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjMyIGFuZCA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZHFhbmQyNDAgYW5kICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI0MSBhbmQgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjQyIGFuZCAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNDMgYW5kIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI0NCBhbmQgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkcWFuZDI1MCBhbmQgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1MSBhbmQgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1MiBhbmQgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1MyBhbmQgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1NCBhbmQgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1NSBhbmQgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1NiBhbmQgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1NyBhbmQgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1OCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1OSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2MCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2MSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2MiBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2MyBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2NCBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2NSBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkcWFuZDI3MCBhbmQgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3MSBhbmQgIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3MiBhbmQgIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3MyBhbmQgIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3NCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3NSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3NiBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3NyBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZHFhbmQyODAgYW5kICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODEgYW5kICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODIgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA4IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODMgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDA5IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODQgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODUgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODYgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDAxMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODcgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2RxYW5kMjg4IGFuZCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjg5IGFuZCAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjkwIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA4MDAwMDAxMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjkxIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDA5MDAwMDEwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjkyIGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjkzIGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjk0IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjk1IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitkcWFuZDI5NiBhbmQgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyOTcgYW5kIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjk4IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI5OSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTEwMDAxMDAgLT4gIDExMDAwMDExMDAwMDExMDAwMDAwMTAwMDAwMAorCistLSBObWF4LCBObWluLCBOdGlueS1saWtlCitkcWFuZDMzMSBhbmQgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzMzIgYW5kICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzMzIGFuZCAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDMzNCBhbmQgIDUgICAxRS05MDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzMzUgYW5kICA2ICAgLTFFLTkwMCAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzM2IGFuZCAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDMzNyBhbmQgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzMzggYW5kICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQxIGFuZCAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0MiBhbmQgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNDMgYW5kICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQ0IGFuZCAgMUUtOTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0NSBhbmQgIC0xRS05MDAgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNDYgYW5kICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQ3IGFuZCAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0OCBhbmQgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2RxYW5kMzYxIGFuZCAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM2MiBhbmQgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNjMgYW5kICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzY0IGFuZCAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM2NSBhbmQgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNjYgYW5kICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzcxIGFuZCAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM3MiBhbmQgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNzMgYW5kICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzc0IGFuZCAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM3NSBhbmQgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNzYgYW5kICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorZHFhbmQ3ODAgYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzgxIGFuZCAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4MiBhbmQgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODMgYW5kIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzg0IGFuZCAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4NSBhbmQgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODYgYW5kIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzg3IGFuZCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4OCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODkgYW5kIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzkwIGFuZCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc5MSBhbmQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3OTIgYW5kICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzkzIGFuZCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc5NCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWFuZDgwMCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDEgYW5kICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODAyIGFuZCAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwMyBhbmQgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDQgYW5kICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODA1IGFuZCAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwNiBhbmQgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDcgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODA4IGFuZCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwOSBhbmQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MTAgYW5kIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODExIGFuZCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgxMiBhbmQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MTMgYW5kICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODE0IGFuZCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgxNSBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWFuZDgyMSBhbmQgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjIgYW5kICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODIzIGFuZCAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgyNCBhbmQgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjUgYW5kICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODI2IGFuZCAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgyNyBhbmQgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjggYW5kICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODI5IGFuZCAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzMCBhbmQgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzEgYW5kIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODMyIGFuZCAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzMyBhbmQgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzQgYW5kICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODM1IGFuZCAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzNiBhbmQgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzcgYW5kICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFhbmQ4NDEgYW5kICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDIgYW5kICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDMgYW5kICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDQgYW5kICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDUgYW5kICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDYgYW5kICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDcgYW5kICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDggYW5kICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDkgYW5kICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTAgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTEgYW5kIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTIgYW5kIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTMgYW5kIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTQgYW5kIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTUgYW5kICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTYgYW5kICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTcgYW5kICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTggYW5kICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTkgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWFuZDg2MSBhbmQgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjIgYW5kICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODYzIGFuZCAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg2NCBhbmQgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjUgYW5kICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODY2IGFuZCAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg2NyBhbmQgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjggYW5kICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODY5IGFuZCAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3MSBhbmQgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzIgYW5kICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODczIGFuZCAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3NCBhbmQgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzUgYW5kICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODc2IGFuZCAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3NyBhbmQgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzggYW5kIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODc5IGFuZCAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg4MCBhbmQgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4ODEgYW5kICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODgyIGFuZCAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg4MyBhbmQgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4ODQgYW5kICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODg1IGFuZCAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFCYXNlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFCYXNlLmRlY1Rlc3QKaW5kZXggNmJiNDYzMy4uZDA5YzZiZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQmFzZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUJhc2UuZGVjVGVzdApAQCAtMSwxMDgxICsxLDEwODEgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQmFzZS5kZWNUZXN0IC0tIGJhc2UgZGVjUXVhZCA8LS0+IHN0cmluZyBjb252ZXJzaW9ucyAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIGZpbGUgdGVzdHMgYmFzZSBjb252ZXJzaW9ucyBmcm9tIHN0cmluZyB0byBhIGRlY2ltYWwgbnVtYmVyDQotLS0gYW5kIGJhY2sgdG8gYSBzdHJpbmcgKGluIFNjaWVudGlmaWMgZm9ybSkNCi0NCi0tLSBOb3RlIHRoYXQgdW5saWtlIG90aGVyIG9wZXJhdGlvbnMgdGhlIG9wZXJhbmQgaXMgc3ViamVjdCB0byByb3VuZGluZw0KLS0tIHRvIGNvbmZvcm0gdG8gZW1heCBhbmQgcHJlY2lzaW9uIHNldHRpbmdzICh0aGF0IGlzLCBudW1iZXJzIHdpbGwNCi0tLSBjb25mb3JtIHRvIHJ1bGVzIGFuZCBleHBvbmVudCB3aWxsIGJlIGluIHBlcm1pdHRlZCByYW5nZSkuICBUaGUNCi0tLSAnbGVmdCBoYW5kIHNpZGUnLCB0aGVyZWZvcmUsIG1heSBoYXZlIG51bWJlcnMgdGhhdCBjYW5ub3QgYmUNCi0tLSByZXByZXNlbnRlZCBpbiBhIGRlY1F1YWQuICBTb21lIHRlc3RjYXNlcyBnbyB0byB0aGUgbGltaXQgb2YgdGhlDQotLS0gbmV4dC13aWRlciBmb3JtYXQsIGFuZCBoZW5jZSB0aGVzZSB0ZXN0Y2FzZXMgbWF5IGFsc28gYmUgdXNlZCB0bw0KLS0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLg0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kcWJhczAwMSB0b1NjaSAgICAgICAwIC0+IDANCi1kcWJhczAwMiB0b1NjaSAgICAgICAxIC0+IDENCi1kcWJhczAwMyB0b1NjaSAgICAgMS4wIC0+IDEuMA0KLWRxYmFzMDA0IHRvU2NpICAgIDEuMDAgLT4gMS4wMA0KLWRxYmFzMDA1IHRvU2NpICAgICAgMTAgLT4gMTANCi1kcWJhczAwNiB0b1NjaSAgICAxMDAwIC0+IDEwMDANCi1kcWJhczAwNyB0b1NjaSAgICAxMC4wIC0+IDEwLjANCi1kcWJhczAwOCB0b1NjaSAgICAxMC4xIC0+IDEwLjENCi1kcWJhczAwOSB0b1NjaSAgICAxMC40IC0+IDEwLjQNCi1kcWJhczAxMCB0b1NjaSAgICAxMC41IC0+IDEwLjUNCi1kcWJhczAxMSB0b1NjaSAgICAxMC42IC0+IDEwLjYNCi1kcWJhczAxMiB0b1NjaSAgICAxMC45IC0+IDEwLjkNCi1kcWJhczAxMyB0b1NjaSAgICAxMS4wIC0+IDExLjANCi1kcWJhczAxNCB0b1NjaSAgMS4yMzQgLT4gMS4yMzQNCi1kcWJhczAxNSB0b1NjaSAgMC4xMjMgLT4gMC4xMjMNCi1kcWJhczAxNiB0b1NjaSAgMC4wMTIgLT4gMC4wMTINCi1kcWJhczAxNyB0b1NjaSAgLTAgICAgLT4gLTANCi1kcWJhczAxOCB0b1NjaSAgLTAuMCAgLT4gLTAuMA0KLWRxYmFzMDE5IHRvU2NpIC0wMC4wMCAtPiAtMC4wMA0KLQ0KLWRxYmFzMDIxIHRvU2NpICAgICAtMSAtPiAtMQ0KLWRxYmFzMDIyIHRvU2NpICAgLTEuMCAtPiAtMS4wDQotZHFiYXMwMjMgdG9TY2kgICAtMC4xIC0+IC0wLjENCi1kcWJhczAyNCB0b1NjaSAgIC05LjEgLT4gLTkuMQ0KLWRxYmFzMDI1IHRvU2NpICAgLTkuMTEgLT4gLTkuMTENCi1kcWJhczAyNiB0b1NjaSAgIC05LjExOSAtPiAtOS4xMTkNCi1kcWJhczAyNyB0b1NjaSAgIC05Ljk5OSAtPiAtOS45OTkNCi0NCi1kcWJhczAzMCB0b1NjaSAgJzEyMzQ1Njc4OS4xMjM0NTYnICAgLT4gJzEyMzQ1Njc4OS4xMjM0NTYnDQotZHFiYXMwMzEgdG9TY2kgICcxMjM0NTY3ODkuMDAwMDAwJyAgIC0+ICcxMjM0NTY3ODkuMDAwMDAwJw0KLWRxYmFzMDMyIHRvU2NpICAgJzEyMzQ1Njc4OTEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5MTIzNDU2Jw0KLWRxYmFzMDMzIHRvU2NpICAgJzAuMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMTIzNDU2Nzg5Jw0KLWRxYmFzMDM0IHRvU2NpICAnMC4wMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMDEyMzQ1Njc4OScNCi1kcWJhczAzNSB0b1NjaSAnMC4wMDAwMDAxMjM0NTY3ODknICAgLT4gJzEuMjM0NTY3ODlFLTcnDQotZHFiYXMwMzYgdG9TY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OScgIC0+ICcxLjIzNDU2Nzg5RS04Jw0KLQ0KLWRxYmFzMDM3IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NCcgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDQnDQotZHFiYXMwMzggdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NScNCi0NCi0tLSB0ZXN0IGZpbml0ZSBib3VuZHMgKE5lZ3Mgb2YsIHRoZW4gMCwgTnRpbnksIE5taW4sIG90aGVyLCBObWF4KQ0KLWRxYnNuMDAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcWJzbjAwMiB0b1NjaSAtMUUtNjE0MyAtPiAtMUUtNjE0Mw0KLWRxYnNuMDAzIHRvU2NpIC0xRS02MTc2IC0+IC0xRS02MTc2IFN1Ym5vcm1hbA0KLWRxYnNuMDA0IHRvU2NpIC0wIC0+IC0wDQotZHFic24wMDUgdG9TY2kgKzAgLT4gIDANCi1kcWJzbjAwNiB0b1NjaSArMUUtNjE3NiAtPiAgMUUtNjE3NiBTdWJub3JtYWwNCi1kcWJzbjAwNyB0b1NjaSArMUUtNjE0MyAtPiAgMUUtNjE0Mw0KLWRxYnNuMDA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi0NCi0tLSBTdHJpbmcgW21hbnkgbW9yZSBleGFtcGxlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgZWxzZXdoZXJlXQ0KLS0tIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdA0KLWRxYmFzMDQwIHRvU2NpICIxMiIgICAgICAgIC0+ICcxMicNCi1kcWJhczA0MSB0b1NjaSAiLTc2IiAgICAgICAtPiAnLTc2Jw0KLWRxYmFzMDQyIHRvU2NpICIxMi43NiIgICAgIC0+ICcxMi43NicNCi1kcWJhczA0MyB0b1NjaSAiKzEyLjc2IiAgICAtPiAnMTIuNzYnDQotZHFiYXMwNDQgdG9TY2kgIjAxMi43NiIgICAgLT4gJzEyLjc2Jw0KLWRxYmFzMDQ1IHRvU2NpICIrMC4wMDMiICAgIC0+ICcwLjAwMycNCi1kcWJhczA0NiB0b1NjaSAiMTcuIiAgICAgICAtPiAnMTcnDQotZHFiYXMwNDcgdG9TY2kgIi41IiAgICAgICAgLT4gJzAuNScNCi1kcWJhczA0OCB0b1NjaSAiMDQ0IiAgICAgICAtPiAnNDQnDQotZHFiYXMwNDkgdG9TY2kgIjAwNDQiICAgICAgLT4gJzQ0Jw0KLWRxYmFzMDUwIHRvU2NpICIwLjAwMDUiICAgICAgLT4gJzAuMDAwNScNCi1kcWJhczA1MSB0b1NjaSAiMDAuMDAwMDUiICAgIC0+ICcwLjAwMDA1Jw0KLWRxYmFzMDUyIHRvU2NpICIwLjAwMDAwNSIgICAgLT4gJzAuMDAwMDA1Jw0KLWRxYmFzMDUzIHRvU2NpICIwLjAwMDAwNTAiICAgLT4gJzAuMDAwMDA1MCcNCi1kcWJhczA1NCB0b1NjaSAiMC4wMDAwMDA1IiAgIC0+ICc1RS03Jw0KLWRxYmFzMDU1IHRvU2NpICIwLjAwMDAwMDA1IiAgLT4gJzVFLTgnDQotZHFiYXMwNTYgdG9TY2kgIjEyMzQ1Njc4LjU0MzIxMCIgLT4gJzEyMzQ1Njc4LjU0MzIxMCcNCi1kcWJhczA1NyB0b1NjaSAiMjM0NTY3OC41NDMyMTAiIC0+ICcyMzQ1Njc4LjU0MzIxMCcNCi1kcWJhczA1OCB0b1NjaSAiMzQ1Njc4LjU0MzIxMCIgLT4gJzM0NTY3OC41NDMyMTAnDQotZHFiYXMwNTkgdG9TY2kgIjAzNDU2NzguNTQzMjEiIC0+ICczNDU2NzguNTQzMjEnDQotZHFiYXMwNjAgdG9TY2kgIjM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInDQotZHFiYXMwNjEgdG9TY2kgIiszNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KLWRxYmFzMDYyIHRvU2NpICIrMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInDQotZHFiYXMwNjMgdG9TY2kgIiswMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInDQotZHFiYXMwNjQgdG9TY2kgIi0zNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInDQotZHFiYXMwNjUgdG9TY2kgIi0wMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJw0KLWRxYmFzMDY2IHRvU2NpICItMDAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInDQotLS0gZXhhbXBsZXMNCi1kcWJhczA2NyB0b1NjaSAiNUUtNiIgICAgICAgIC0+ICcwLjAwMDAwNScNCi1kcWJhczA2OCB0b1NjaSAiNTBFLTciICAgICAgIC0+ICcwLjAwMDAwNTAnDQotZHFiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycNCi0NCi0tLSBbTm8gZXhvdGljcyBhcyBubyBVbmljb2RlXQ0KLQ0KLS0tIHJvdW5kZWQgd2l0aCBkb3RzIGluIGFsbCAoaW5jbHVkaW5nIGVkZ2UpIHBsYWNlcw0KLWRxYmFzMDcxIHRvU2NpICAuMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gMC4xMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDczIHRvU2NpICAxMi4zNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyLjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDc0IHRvU2NpICAxMjMuNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMy40NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQuNTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDc2IHRvU2NpICAxMjM0NS42Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1LjY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDc3IHRvU2NpICAxMjM0NTYuNzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Ni43ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1NjcuODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDc5IHRvU2NpICAxMjM0NTY3OC45MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4LjkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDgwIHRvU2NpICAxMjM0NTY3ODkuMTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OS4xMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkxLjIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEuMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDgyIHRvU2NpICAxMjM0NTY3ODkxMi4zNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyLjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDgzIHRvU2NpICAxMjM0NTY3ODkxMjMuNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMy40NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDg0IHRvU2NpICAxMjM0NTY3ODkxMjM0LjU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQuNTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDg1IHRvU2NpICAxMjM0NTY3ODkxMjM0NS42Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1LjY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDg2IHRvU2NpICAxMjM0NTY3ODkxMjM0NTYuNzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Ni43ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDg3IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3Ljg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1NjcuODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDg4IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3OC45MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4LjkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDg5IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkuMDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OS4wMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDkwIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwLjEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAuMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDkxIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMS4yMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxLjIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDkyIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIuMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMi4zNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDkzIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzLjQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjMuNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDk0IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNC41Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0LjU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDk1IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDUuNjc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NS42NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDk2IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2Ljc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTYuNzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDk3IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2Ny44MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3LjgwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDk4IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzguMDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3OC4wMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMDk5IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwLjEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAuMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTAwIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMS4yMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxLjIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTAxIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIuMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMi4zNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTAyIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzLjQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjMuNDU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTAzIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNC41NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0LjU2IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTA0IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDUuNjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NS42IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTA1IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2LjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTA2IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MS4yMyAgLT4gIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2RSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwNyB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyLjMgIC0+ICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NkUrMzUgSW5leGFjdCBSb3VuZGVkDQotZHFiYXMxMDggdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMuICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM2IEluZXhhY3QgUm91bmRlZA0KLS0tIDEyMzQ1Njc4OTAxMjM0NTY3OA0KLQ0KLS0tIE51bWJlcnMgd2l0aCBFDQotZHFiYXMxMzAgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcNCi1kcWJhczEzMSB0b1NjaSAiMC4wMDBFLTIiICAtPiAnMC4wMDAwMCcNCi1kcWJhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnDQotZHFiYXMxMzMgdG9TY2kgIjAuMDAwRS00IiAgLT4gJzBFLTcnDQotZHFiYXMxMzQgdG9TY2kgIjAuMDBFLTIiICAgLT4gJzAuMDAwMCcNCi1kcWJhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcNCi1kcWJhczEzNiB0b1NjaSAiMC4wMEUtNCIgICAtPiAnMC4wMDAwMDAnDQotZHFiYXMxMzcgdG9TY2kgIjAuMDBFLTUiICAgLT4gJzBFLTcnDQotZHFiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknDQotZHFiYXMxMzkgdG9TY2kgIi0wRSs5IiAgICAgLT4gJy0wRSs5Jw0KLWRxYmFzMTQwIHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5Jw0KLWRxYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5Jw0KLWRxYmFzMTQyIHRvU2NpICIxRSs5MCIgICAgIC0+ICcxRSs5MCcNCi1kcWJhczE0MyB0b1NjaSAiKzFFKzAwOSIgICAtPiAnMUUrOScNCi1kcWJhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScNCi1kcWJhczE0NSB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScNCi1kcWJhczE0NiB0b1NjaSAiMUUrMDkiICAgICAtPiAnMUUrOScNCi1kcWJhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnDQotZHFiYXMxNDggdG9TY2kgIjFFKzAwOSIgICAgLT4gJzFFKzknDQotZHFiYXMxNDkgdG9TY2kgIjAwMEUrOSIgICAgLT4gJzBFKzknDQotZHFiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknDQotZHFiYXMxNTEgdG9TY2kgIjFlMDkiICAgICAgLT4gJzFFKzknDQotZHFiYXMxNTIgdG9TY2kgIjFFOTAiICAgICAgLT4gJzFFKzkwJw0KLWRxYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5Jw0KLWRxYmFzMTU0IHRvU2NpICIwRTkiICAgICAgIC0+ICcwRSs5Jw0KLWRxYmFzMTU1IHRvU2NpICIwLjAwMGUrMCIgIC0+ICcwLjAwMCcNCi1kcWJhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJw0KLWRxYmFzMTU3IHRvU2NpICI0RSs5IiAgICAgIC0+ICc0RSs5Jw0KLWRxYmFzMTU4IHRvU2NpICI0NEUrOSIgICAgIC0+ICc0LjRFKzEwJw0KLWRxYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnDQotZHFiYXMxNjAgdG9TY2kgIjAwRSs5IiAgICAgLT4gJzBFKzknDQotZHFiYXMxNjEgdG9TY2kgIjAwRS05IiAgICAgLT4gJzBFLTknDQotZHFiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnDQotZHFiYXMxNjMgdG9TY2kgIjEwRSswOSIgICAgLT4gJzEuMEUrMTAnDQotZHFiYXMxNjQgdG9TY2kgIjEwZSs5MCIgICAgLT4gJzEuMEUrOTEnDQotZHFiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnDQotZHFiYXMxNjYgdG9TY2kgIjEwMGUrOSIgICAgLT4gJzEuMDBFKzExJw0KLWRxYmFzMTY3IHRvU2NpICIxMDBlKzA5IiAgIC0+ICcxLjAwRSsxMScNCi1kcWJhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInDQotZHFiYXMxNjkgdG9TY2kgIjEwMGUrMDA5IiAgLT4gJzEuMDBFKzExJw0KLQ0KLWRxYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScNCi1kcWJhczE3MSB0b1NjaSAiMS4yNjVFLTIwIiAtPiAnMS4yNjVFLTIwJw0KLWRxYmFzMTcyIHRvU2NpICIxLjI2NUUtOCIgIC0+ICcxLjI2NUUtOCcNCi1kcWJhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1Jw0KLWRxYmFzMTc0IHRvU2NpICIxLjI2NUUtMyIgIC0+ICcwLjAwMTI2NScNCi1kcWJhczE3NSB0b1NjaSAiMS4yNjVFLTIiICAtPiAnMC4wMTI2NScNCi1kcWJhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1Jw0KLWRxYmFzMTc3IHRvU2NpICIxLjI2NUUtMCIgIC0+ICcxLjI2NScNCi1kcWJhczE3OCB0b1NjaSAiMS4yNjVFKzEiICAtPiAnMTIuNjUnDQotZHFiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41Jw0KLWRxYmFzMTgwIHRvU2NpICIxLjI2NUUrMyIgIC0+ICcxMjY1Jw0KLWRxYmFzMTgxIHRvU2NpICIxLjI2NUUrNCIgIC0+ICcxLjI2NUUrNCcNCi1kcWJhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnDQotZHFiYXMxODMgdG9TY2kgIjEuMjY1RSsyMCIgLT4gJzEuMjY1RSsyMCcNCi0NCi1kcWJhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnDQotZHFiYXMxOTEgdG9TY2kgIjEyLjY1RS0yMCIgLT4gJzEuMjY1RS0xOScNCi1kcWJhczE5MiB0b1NjaSAiMTIuNjVFLTgiICAtPiAnMS4yNjVFLTcnDQotZHFiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1Jw0KLWRxYmFzMTk0IHRvU2NpICIxMi42NUUtMyIgIC0+ICcwLjAxMjY1Jw0KLWRxYmFzMTk1IHRvU2NpICIxMi42NUUtMiIgIC0+ICcwLjEyNjUnDQotZHFiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1Jw0KLWRxYmFzMTk3IHRvU2NpICIxMi42NUUtMCIgIC0+ICcxMi42NScNCi1kcWJhczE5OCB0b1NjaSAiMTIuNjVFKzEiICAtPiAnMTI2LjUnDQotZHFiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnDQotZHFiYXMyMDAgdG9TY2kgIjEyLjY1RSszIiAgLT4gJzEuMjY1RSs0Jw0KLWRxYmFzMjAxIHRvU2NpICIxMi42NUUrNCIgIC0+ICcxLjI2NUUrNScNCi1kcWJhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknDQotZHFiYXMyMDMgdG9TY2kgIjEyLjY1RSsyMCIgLT4gJzEuMjY1RSsyMScNCi0NCi1kcWJhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnDQotZHFiYXMyMTEgdG9TY2kgIjEyNi41RS0yMCIgLT4gJzEuMjY1RS0xOCcNCi1kcWJhczIxMiB0b1NjaSAiMTI2LjVFLTgiICAtPiAnMC4wMDAwMDEyNjUnDQotZHFiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnDQotZHFiYXMyMTQgdG9TY2kgIjEyNi41RS0zIiAgLT4gJzAuMTI2NScNCi1kcWJhczIxNSB0b1NjaSAiMTI2LjVFLTIiICAtPiAnMS4yNjUnDQotZHFiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1Jw0KLWRxYmFzMjE3IHRvU2NpICIxMjYuNUUtMCIgIC0+ICcxMjYuNScNCi1kcWJhczIxOCB0b1NjaSAiMTI2LjVFKzEiICAtPiAnMTI2NScNCi1kcWJhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnDQotZHFiYXMyMjAgdG9TY2kgIjEyNi41RSszIiAgLT4gJzEuMjY1RSs1Jw0KLWRxYmFzMjIxIHRvU2NpICIxMjYuNUUrNCIgIC0+ICcxLjI2NUUrNicNCi1kcWJhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJw0KLWRxYmFzMjIzIHRvU2NpICIxMjYuNUUrMjAiIC0+ICcxLjI2NUUrMjInDQotDQotZHFiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScNCi1kcWJhczIzMSB0b1NjaSAiMTI2NUUtMjAiIC0+ICcxLjI2NUUtMTcnDQotZHFiYXMyMzIgdG9TY2kgIjEyNjVFLTgiICAtPiAnMC4wMDAwMTI2NScNCi1kcWJhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnDQotZHFiYXMyMzQgdG9TY2kgIjEyNjVFLTMiICAtPiAnMS4yNjUnDQotZHFiYXMyMzUgdG9TY2kgIjEyNjVFLTIiICAtPiAnMTIuNjUnDQotZHFiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnDQotZHFiYXMyMzcgdG9TY2kgIjEyNjVFLTAiICAtPiAnMTI2NScNCi1kcWJhczIzOCB0b1NjaSAiMTI2NUUrMSIgIC0+ICcxLjI2NUUrNCcNCi1kcWJhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScNCi1kcWJhczI0MCB0b1NjaSAiMTI2NUUrMyIgIC0+ICcxLjI2NUUrNicNCi1kcWJhczI0MSB0b1NjaSAiMTI2NUUrNCIgIC0+ICcxLjI2NUUrNycNCi1kcWJhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnDQotZHFiYXMyNDMgdG9TY2kgIjEyNjVFKzIwIiAtPiAnMS4yNjVFKzIzJw0KLQ0KLWRxYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1Jw0KLWRxYmFzMjUxIHRvU2NpICIwLjEyNjVFLTIwIiAtPiAnMS4yNjVFLTIxJw0KLWRxYmFzMjUyIHRvU2NpICIwLjEyNjVFLTgiICAtPiAnMS4yNjVFLTknDQotZHFiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1Jw0KLWRxYmFzMjU0IHRvU2NpICIwLjEyNjVFLTMiICAtPiAnMC4wMDAxMjY1Jw0KLWRxYmFzMjU1IHRvU2NpICIwLjEyNjVFLTIiICAtPiAnMC4wMDEyNjUnDQotZHFiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1Jw0KLWRxYmFzMjU3IHRvU2NpICIwLjEyNjVFLTAiICAtPiAnMC4xMjY1Jw0KLWRxYmFzMjU4IHRvU2NpICIwLjEyNjVFKzEiICAtPiAnMS4yNjUnDQotZHFiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScNCi1kcWJhczI2MCB0b1NjaSAiMC4xMjY1RSszIiAgLT4gJzEyNi41Jw0KLWRxYmFzMjYxIHRvU2NpICIwLjEyNjVFKzQiICAtPiAnMTI2NScNCi1kcWJhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3Jw0KLWRxYmFzMjYzIHRvU2NpICIwLjEyNjVFKzIwIiAtPiAnMS4yNjVFKzE5Jw0KLQ0KLS0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10NCi1kcWJhczI5MCB0b1NjaSAiLTAuMDAwRS0xIiAgLT4gJy0wLjAwMDAnDQotZHFiYXMyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcNCi1kcWJhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcNCi1kcWJhczI5MyB0b1NjaSAiLTAuMDAwRS00IiAgLT4gJy0wRS03Jw0KLWRxYmFzMjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcNCi1kcWJhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJw0KLWRxYmFzMjk2IHRvU2NpICItMC4wRS0yIiAgICAtPiAnLTAuMDAwJw0KLWRxYmFzMjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcNCi1kcWJhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJw0KLWRxYmFzMjk5IHRvU2NpICItMEUtMyIgICAgICAtPiAnLTAuMDAwJw0KLQ0KLS0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzDQotZHFiYXMzMDEgIHRvU2NpIDEwZTEyICAtPiAxLjBFKzEzDQotZHFiYXMzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTINCi1kcWJhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTINCi1kcWJhczMwNCAgdG9FbmcgMTBlMTEgIC0+IDEuMEUrMTINCi1kcWJhczMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTENCi1kcWJhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQ0KLWRxYmFzMzA3ICB0b1NjaSAxMGU5ICAgLT4gMS4wRSsxMA0KLWRxYmFzMzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkNCi1kcWJhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQ0KLWRxYmFzMzEwICB0b0VuZyAxMGU4ICAgLT4gMS4wRSs5DQotZHFiYXMzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgNCi1kcWJhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNg0KLWRxYmFzMzEzICB0b1NjaSAxMGU2ICAgLT4gMS4wRSs3DQotZHFiYXMzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNg0KLWRxYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2DQotZHFiYXMzMTYgIHRvRW5nIDEwZTUgICAtPiAxLjBFKzYNCi1kcWJhczMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQ0KLWRxYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszDQotZHFiYXMzMTkgIHRvU2NpIDEwZTMgICAtPiAxLjBFKzQNCi1kcWJhczMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszDQotZHFiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMNCi1kcWJhczMyMiAgdG9FbmcgMTBlMiAgIC0+IDEuMEUrMw0KLWRxYmFzMzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyDQotZHFiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDANCi1kcWJhczMyNSAgdG9TY2kgMTBlMCAgIC0+IDEwDQotZHFiYXMzMjYgIHRvRW5nIDEwZTAgICAtPiAxMA0KLWRxYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wDQotZHFiYXMzMjggIHRvRW5nIDEwZS0xICAtPiAxLjANCi1kcWJhczMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTANCi1kcWJhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTANCi1kcWJhczMzMSAgdG9TY2kgMTBlLTMgIC0+IDAuMDEwDQotZHFiYXMzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMA0KLWRxYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwDQotZHFiYXMzMzQgIHRvRW5nIDEwZS00ICAtPiAwLjAwMTANCi1kcWJhczMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTANCi1kcWJhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTANCi1kcWJhczMzNyAgdG9TY2kgMTBlLTYgIC0+IDAuMDAwMDEwDQotZHFiYXMzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMA0KLWRxYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwDQotZHFiYXMzNDAgIHRvRW5nIDEwZS03ICAtPiAwLjAwMDAwMTANCi1kcWJhczM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNw0KLWRxYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05DQotZHFiYXMzNDMgIHRvU2NpIDEwZS05ICAtPiAxLjBFLTgNCi1kcWJhczM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05DQotZHFiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkNCi1kcWJhczM0NiAgdG9FbmcgMTBlLTEwIC0+IDEuMEUtOQ0KLWRxYmFzMzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMA0KLWRxYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMg0KLWRxYmFzMzQ5ICB0b1NjaSAxMGUtMTIgLT4gMS4wRS0xMQ0KLWRxYmFzMzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyDQotZHFiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyDQotZHFiYXMzNTIgIHRvRW5nIDEwZS0xMyAtPiAxLjBFLTEyDQotDQotZHFiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyDQotZHFiYXMzNjIgIHRvRW5nIDdFMTIgIC0+IDdFKzEyDQotZHFiYXMzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExDQotZHFiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQ0KLWRxYmFzMzY1ICB0b1NjaSA3RTEwICAtPiA3RSsxMA0KLWRxYmFzMzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQ0KLWRxYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5DQotZHFiYXMzNjggIHRvRW5nIDdFOSAgIC0+IDdFKzkNCi1kcWJhczM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOA0KLWRxYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYNCi1kcWJhczM3MSAgdG9TY2kgN0U3ICAgLT4gN0UrNw0KLWRxYmFzMzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNg0KLWRxYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2DQotZHFiYXMzNzQgIHRvRW5nIDdFNiAgIC0+IDdFKzYNCi1kcWJhczM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQ0KLWRxYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMNCi1kcWJhczM3NyAgdG9TY2kgN0U0ICAgLT4gN0UrNA0KLWRxYmFzMzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMw0KLWRxYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszDQotZHFiYXMzODAgIHRvRW5nIDdFMyAgIC0+IDdFKzMNCi1kcWJhczM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMg0KLWRxYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDANCi1kcWJhczM4MyAgdG9TY2kgN0UxICAgLT4gN0UrMQ0KLWRxYmFzMzg0ICB0b0VuZyA3RTEgICAtPiA3MA0KLWRxYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3DQotZHFiYXMzODYgIHRvRW5nIDdFMCAgIC0+IDcNCi1kcWJhczM4NyAgdG9TY2kgN0UtMSAgLT4gMC43DQotZHFiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNw0KLWRxYmFzMzg5ICB0b1NjaSA3RS0yICAtPiAwLjA3DQotZHFiYXMzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcNCi1kcWJhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcNCi1kcWJhczM5MiAgdG9FbmcgN0UtMyAgLT4gMC4wMDcNCi1kcWJhczM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3DQotZHFiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNw0KLWRxYmFzMzk1ICB0b1NjaSA3RS01ICAtPiAwLjAwMDA3DQotZHFiYXMzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcNCi1kcWJhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcNCi1kcWJhczM5OCAgdG9FbmcgN0UtNiAgLT4gMC4wMDAwMDcNCi1kcWJhczM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNw0KLWRxYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkNCi1kcWJhczQwMSAgdG9TY2kgN0UtOCAgLT4gN0UtOA0KLWRxYmFzNDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQ0KLWRxYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05DQotZHFiYXM0MDQgIHRvRW5nIDdFLTkgIC0+IDdFLTkNCi1kcWJhczQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTANCi1kcWJhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMg0KLWRxYmFzNDA3ICB0b1NjaSA3RS0xMSAtPiA3RS0xMQ0KLWRxYmFzNDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTINCi1kcWJhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTINCi1kcWJhczQxMCAgdG9FbmcgN0UtMTIgLT4gN0UtMTINCi1kcWJhczQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMNCi1kcWJhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQ0KLQ0KLS0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uDQotZHFiYXM0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDANCi1kcWJhczQyMiAgdG9TY2kgICAxMDAwIC0+IDEwMDANCi1kcWJhczQyNCAgdG9TY2kgIDk5OS45IC0+ICA5OTkuOQ0KLWRxYmFzNDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wDQotZHFiYXM0MjggIHRvU2NpIDEwMDAuMSAtPiAxMDAwLjENCi1kcWJhczQzMCAgdG9TY2kgMTAwMDAgLT4gMTAwMDANCi1kcWJhczQzMiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxYmFzNDM0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxYmFzNDM2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWJhczQzOCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxYmFzNDQwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgICBSb3VuZGVkDQotZHFiYXM0NDIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgIFJvdW5kZWQNCi1kcWJhczQ0NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZCBJbmV4YWN0DQotZHFiYXM0NDYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgIFJvdW5kZWQgSW5leGFjdA0KLWRxYmFzNDQ4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgICBSb3VuZGVkIEluZXhhY3QNCi1kcWJhczQ1MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM0ICAgUm91bmRlZCBJbmV4YWN0DQotZHFiYXM0NTIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQNCi1kcWJhczQ1NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZCBJbmV4YWN0DQotZHFiYXM0NTYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdA0KLWRxYmFzNDU4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgICBSb3VuZGVkIEluZXhhY3QNCi1kcWJhczQ2MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2ICAgUm91bmRlZA0KLWRxYmFzNDYyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgICBSb3VuZGVkIEluZXhhY3QNCi1kcWJhczQ2NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2ICAgUm91bmRlZCBJbmV4YWN0DQotZHFiYXM0NjYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNiAgIFJvdW5kZWQgSW5leGFjdA0KLWRxYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgICBSb3VuZGVkDQotZHFiYXM0NzAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgIFJvdW5kZWQgSW5leGFjdA0KLWRxYmFzNDcyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgICBSb3VuZGVkIEluZXhhY3QNCi1kcWJhczQ3NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM3ICAgUm91bmRlZCBJbmV4YWN0DQotDQotLS0gY2hlY2sgcm91bmRpbmcgbW9kZXMgaGVlZGVkDQotcm91bmRpbmc6ICBjZWlsaW5nDQotZHFic3I0MDEgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZHFic3I0MDIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQwMyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDA0ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICB1cA0KLWRxYnNyNDA1ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRxYnNyNDA2ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MDcgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQwOCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZmxvb3INCi1kcWJzcjQxMCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjQxMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDEyICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MTMgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfZG93bg0KLWRxYnNyNDE1ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRxYnNyNDE2ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MTcgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQxOCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDE5ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi1kcWJzcjQyMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjQyMiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDIzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MjQgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQyNSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZG93bg0KLWRxYnNyNDI2ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRxYnNyNDI3ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MjggIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQyOSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl91cA0KLWRxYnNyNDMxICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRxYnNyNDMyICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MzMgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQzNCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDM1ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotLS0gbmVnYXRpdmVzDQotcm91bmRpbmc6ICBjZWlsaW5nDQotZHFic3I1MDEgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZHFic3I1MDIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUwMyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTA0ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICB1cA0KLWRxYnNyNTA1ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRxYnNyNTA2ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MDcgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUwOCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZmxvb3INCi1kcWJzcjUxMCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjUxMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTEyICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MTMgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfZG93bg0KLWRxYnNyNTE1ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRxYnNyNTE2ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MTcgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUxOCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTE5ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi1kcWJzcjUyMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjUyMiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTIzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MjQgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUyNSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZG93bg0KLWRxYnNyNTI2ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRxYnNyNTI3ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MjggIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUyOSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl91cA0KLWRxYnNyNTMxICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRxYnNyNTMyICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MzMgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUzNCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTM1ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFRoZSAnYmFkZGllcycgdGVzdHMgZnJvbSBEaWFnQmlnRGVjaW1hbCwgcGx1cyBzb21lIG5ldyBvbmVzDQotZHFiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MDEgdG9TY2kgJy4nICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MDIgdG9TY2kgJy4uJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MDQgdG9TY2kgJy0tMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MDUgdG9TY2kgJy0rMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MDcgdG9TY2kgJzEyZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MDggdG9TY2kgJzEyZSsrJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MTAgdG9TY2kgJyArMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MTEgdG9TY2kgJysgMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MTMgdG9TY2kgJyArIDEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MTQgdG9TY2kgJyAtIDEgJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MTYgdG9TY2kgJy0xLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MTcgdG9TY2kgJzEyLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MTkgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MjAgdG9TY2kgJzFlLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MjIgdG9TY2kgJzdlMTIzNTY3ODkweCcgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MjMgdG9TY2kgJzdlMTIzNTY3ODkwMTJ4JyAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MjUgdG9TY2kgJ2UxMDAnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MjYgdG9TY2kgJ1x1MGU1YScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MjggdG9TY2kgJzEyMyw2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MjkgdG9TY2kgJzEuMzQuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MzEgdG9TY2kgJzAxLjM1LicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MzIgdG9TY2kgJzAxLjM1LScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MzQgdG9TY2kgJy4wMDAwLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MzUgdG9TY2kgJzAwLi4wMCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MzcgdG9TY2kgJzExMWUxMjMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MzggdG9TY2kgJzExMWUrMTIrJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NDAgdG9TY2kgJzExMWUxKjIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NDEgdG9TY2kgJzExMWUxZSszJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NDMgdG9TY2kgJzFlMTIzZScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NDQgdG9TY2kgJ3RlbicgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NDYgdG9TY2kgJzFlLjEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NDcgdG9TY2kgJzFlMS4nICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NDkgdG9TY2kgJ2UrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NTAgdG9TY2kgJzEuMjMuNCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NTIgdG9TY2kgJzFFKzEuMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NTMgdG9TY2kgJzFFKzEuMi4zJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NTUgdG9TY2kgJzFFLS0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NTYgdG9TY2kgJzFFKy0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NTggdG9TY2kgJzFFJycxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NTkgdG9TY2kgIjFFIiIxIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotLS0gTmVhci1zcGVjaWFscw0KLWRxYmFzNTYxIHRvU2NpICJxTmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTYzIHRvU2NpICJOYU5zIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTY0IHRvU2NpICJJbmZpIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTY2IHRvU2NpICJJbmZpbmkiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTY3IHRvU2NpICJJbmZpbml0IiAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTY5IHRvU2NpICIwSW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTcwIHRvU2NpICI5SW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTcyIHRvU2NpICItOUluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTczIHRvU2NpICItc05hIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTc1IHRvU2NpICIwc05hTiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLS0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscw0KLWRxYmFzNTc2IHRvU2NpICAnZSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU3NyB0b1NjaSAgJy5lKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTc5IHRvU2NpICAnLS5lKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU4MCB0b1NjaSAgJy0uZScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTgyIHRvU2NpICAnLkUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU4MyB0b1NjaSAgJysuRSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTg1IHRvU2NpICAnLS5FJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0NCi1kcWJhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1ODcgdG9TY2kgICctLk5hTicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTg4IHRvU2NpICAnKy5zTmFOJyAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1OTAgdG9TY2kgICcuSW5maW5pdHknICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLS0tIFplcm9zDQotZHFiYXM2MDEgdG9TY2kgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQ0KLWRxYmFzNjAyIHRvU2NpIDAuMDAwMDAwMDAgICAgICAgIC0+IDBFLTgNCi1kcWJhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03DQotZHFiYXM2MDQgdG9TY2kgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDANCi1kcWJhczYwNSB0b1NjaSAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwDQotZHFiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwDQotZHFiYXM2MDcgdG9TY2kgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDANCi1kcWJhczYwOCB0b1NjaSAwLjAwICAgICAgICAgICAgICAtPiAwLjAwDQotZHFiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZHFiYXM2MTAgdG9TY2kgIC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZHFiYXM2MTEgdG9TY2kgMC4gICAgICAgICAgICAgICAgLT4gMA0KLWRxYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjANCi1kcWJhczYxMyB0b1NjaSAtMC4gICAgICAgICAgICAgICAtPiAtMA0KLWRxYmFzNjE0IHRvU2NpIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjANCi1kcWJhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMA0KLWRxYmFzNjE2IHRvU2NpIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMA0KLWRxYmFzNjE3IHRvU2NpIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDANCi1kcWJhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMA0KLWRxYmFzNjE5IHRvU2NpIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMA0KLWRxYmFzNjIwIHRvU2NpIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wRS03DQotZHFiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgNCi1kcWJhczYyMiB0b1NjaSAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQ0KLQ0KLWRxYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDANCi1kcWJhczYzMSB0b1NjaSAgMC4wMEUrMSAgICAgICAgICAtPiAwLjANCi1kcWJhczYzMiB0b1NjaSAgMC4wMEUrMiAgICAgICAgICAtPiAwDQotZHFiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQ0KLWRxYmFzNjM0IHRvU2NpICAwLjAwRSs0ICAgICAgICAgIC0+IDBFKzINCi1kcWJhczYzNSB0b1NjaSAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszDQotZHFiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNA0KLWRxYmFzNjM3IHRvU2NpICAwLjAwRSs3ICAgICAgICAgIC0+IDBFKzUNCi1kcWJhczYzOCB0b1NjaSAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2DQotZHFiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNw0KLQ0KLWRxYmFzNjQwIHRvU2NpICAwLjBFKzAgICAgICAgICAgIC0+IDAuMA0KLWRxYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDANCi1kcWJhczY0MiB0b1NjaSAgMC4wRSsyICAgICAgICAgICAtPiAwRSsxDQotZHFiYXM2NDMgdG9TY2kgIDAuMEUrMyAgICAgICAgICAgLT4gMEUrMg0KLWRxYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMNCi1kcWJhczY0NSB0b1NjaSAgMC4wRSs1ICAgICAgICAgICAtPiAwRSs0DQotZHFiYXM2NDYgdG9TY2kgIDAuMEUrNiAgICAgICAgICAgLT4gMEUrNQ0KLWRxYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYNCi1kcWJhczY0OCB0b1NjaSAgMC4wRSs4ICAgICAgICAgICAtPiAwRSs3DQotZHFiYXM2NDkgdG9TY2kgIDAuMEUrOSAgICAgICAgICAgLT4gMEUrOA0KLQ0KLWRxYmFzNjUwIHRvU2NpICAwRSswICAgICAgICAgICAgIC0+IDANCi1kcWJhczY1MSB0b1NjaSAgMEUrMSAgICAgICAgICAgICAtPiAwRSsxDQotZHFiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMg0KLWRxYmFzNjUzIHRvU2NpICAwRSszICAgICAgICAgICAgIC0+IDBFKzMNCi1kcWJhczY1NCB0b1NjaSAgMEUrNCAgICAgICAgICAgICAtPiAwRSs0DQotZHFiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQ0KLWRxYmFzNjU2IHRvU2NpICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYNCi1kcWJhczY1NyB0b1NjaSAgMEUrNyAgICAgICAgICAgICAtPiAwRSs3DQotZHFiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOA0KLWRxYmFzNjU5IHRvU2NpICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkNCi0NCi1kcWJhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjANCi1kcWJhczY2MSB0b1NjaSAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwDQotZHFiYXM2NjIgdG9TY2kgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDANCi1kcWJhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDANCi1kcWJhczY2NCB0b1NjaSAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwDQotZHFiYXM2NjUgdG9TY2kgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDANCi1kcWJhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03DQotZHFiYXM2NjcgdG9TY2kgIDAuMEUtNyAgICAgICAgICAgLT4gMEUtOA0KLWRxYmFzNjY4IHRvU2NpICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkNCi1kcWJhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMA0KLQ0KLWRxYmFzNjcwIHRvU2NpICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDANCi1kcWJhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMA0KLWRxYmFzNjcyIHRvU2NpICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMA0KLWRxYmFzNjczIHRvU2NpICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDANCi1kcWJhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRxYmFzNjc1IHRvU2NpICAwLjAwRS01ICAgICAgICAgIC0+IDBFLTcNCi1kcWJhczY3NiB0b1NjaSAgMC4wMEUtNiAgICAgICAgICAtPiAwRS04DQotZHFiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQ0KLWRxYmFzNjc4IHRvU2NpICAwLjAwRS04ICAgICAgICAgIC0+IDBFLTEwDQotZHFiYXM2NzkgdG9TY2kgIDAuMDBFLTkgICAgICAgICAgLT4gMEUtMTENCi0NCi1kcWJhczY4MCB0b1NjaSAgMDAwMDAwLiAgICAgICAgICAtPiAgMA0KLWRxYmFzNjgxIHRvU2NpICAgMDAwMDAuICAgICAgICAgIC0+ICAwDQotZHFiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDANCi1kcWJhczY4MyB0b1NjaSAgICAgMDAwLiAgICAgICAgICAtPiAgMA0KLWRxYmFzNjg0IHRvU2NpICAgICAgMDAuICAgICAgICAgIC0+ICAwDQotZHFiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDANCi1kcWJhczY4NiB0b1NjaSAgKzAwMDAwLiAgICAgICAgICAtPiAgMA0KLWRxYmFzNjg3IHRvU2NpICAtMDAwMDAuICAgICAgICAgIC0+IC0wDQotZHFiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDANCi1kcWJhczY4OSB0b1NjaSAgLTAuICAgICAgICAgICAgICAtPiAtMA0KLQ0KLS0tIFNwZWNpYWxzDQotZHFiYXM3MDAgdG9TY2kgIk5hTiIgICAgICAgICAgICAgLT4gTmFODQotZHFiYXM3MDEgdG9TY2kgIm5hbiIgICAgICAgICAgICAgLT4gTmFODQotZHFiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFODQotZHFiYXM3MDMgdG9TY2kgIk5BTiIgICAgICAgICAgICAgLT4gTmFODQotZHFiYXM3MDQgdG9TY2kgIitOYU4iICAgICAgICAgICAgLT4gTmFODQotZHFiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFODQotZHFiYXM3MDYgdG9TY2kgIituQW4iICAgICAgICAgICAgLT4gTmFODQotZHFiYXM3MDcgdG9TY2kgIitOQU4iICAgICAgICAgICAgLT4gTmFODQotZHFiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTg0KLWRxYmFzNzA5IHRvU2NpICItbmFuIiAgICAgICAgICAgIC0+IC1OYU4NCi1kcWJhczcxMCB0b1NjaSAiLW5BbiIgICAgICAgICAgICAtPiAtTmFODQotZHFiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTg0KLWRxYmFzNzEyIHRvU2NpICdOYU4wJyAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzNzEzIHRvU2NpICdOYU4xJyAgICAgICAgICAgIC0+IE5hTjENCi1kcWJhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMg0KLWRxYmFzNzE1IHRvU2NpICdOYU4xMjMnICAgICAgICAgIC0+IE5hTjEyMw0KLWRxYmFzNzE2IHRvU2NpICdOYU4xMjM0JyAgICAgICAgIC0+IE5hTjEyMzQNCi1kcWJhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xDQotZHFiYXM3MTggdG9TY2kgJ05hTjAxMicgICAgICAgICAgLT4gTmFOMTINCi1kcWJhczcxOSB0b1NjaSAnTmFOMDEyMycgICAgICAgICAtPiBOYU4xMjMNCi1kcWJhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0DQotZHFiYXM3MjEgdG9TY2kgJ05hTjAwMScgICAgICAgICAgLT4gTmFOMQ0KLWRxYmFzNzIyIHRvU2NpICdOYU4wMDEyJyAgICAgICAgIC0+IE5hTjEyDQotZHFiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzDQotZHFiYXM3MjQgdG9TY2kgJ05hTjAwMTIzNCcgICAgICAgLT4gTmFOMTIzNA0KLWRxYmFzNzI1IHRvU2NpICdOYU4xMjM0NTY3ODkwMTIzNDU2NzgxMjM0NTY3ODkwMTIzNDU2JyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczcyNyB0b1NjaSAnTmFOMTIuNDUnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczcyOCB0b1NjaSAnTmFOLTEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0NCi1kcWJhczczMCB0b1NjaSAic05hTiIgICAgICAgICAgICAtPiBzTmFODQotZHFiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzNzMyIHRvU2NpICJTbkFuIiAgICAgICAgICAgIC0+IHNOYU4NCi1kcWJhczczMyB0b1NjaSAiU05BTiIgICAgICAgICAgICAtPiBzTmFODQotZHFiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzNzM1IHRvU2NpICIrc25hbiIgICAgICAgICAgIC0+IHNOYU4NCi1kcWJhczczNiB0b1NjaSAiK1NuQW4iICAgICAgICAgICAtPiBzTmFODQotZHFiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzNzM4IHRvU2NpICItc05hTiIgICAgICAgICAgIC0+IC1zTmFODQotZHFiYXM3MzkgdG9TY2kgIi1zbmFuIiAgICAgICAgICAgLT4gLXNOYU4NCi1kcWJhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTg0KLWRxYmFzNzQxIHRvU2NpICItU05BTiIgICAgICAgICAgIC0+IC1zTmFODQotZHFiYXM3NDIgdG9TY2kgJ3NOYU4wMDAwJyAgICAgICAgLT4gc05hTg0KLWRxYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43DQotZHFiYXM3NDQgdG9TY2kgJ3NOYU4wMDcyMzQnICAgICAgLT4gc05hTjcyMzQNCi1kcWJhczc0NSB0b1NjaSAnc05hTjEyMzQ1Njc4OTAxMjM0NTY3ODcyMzQ1NjEyMzQ1Njc4OTAnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNzQ3IHRvU2NpICdzTmFOLTcyJyAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLWRxYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NDkgdG9TY2kgImluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhczc1MCB0b1NjaSAiaU5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NTIgdG9TY2kgIitJbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhczc1MyB0b1NjaSAiK2luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NTUgdG9TY2kgIitJTkYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhczc1NiB0b1NjaSAiLUluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1kcWJhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1kcWJhczc1OCB0b1NjaSAiLWlOZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1kcWJhczc1OSB0b1NjaSAiLUlORiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi0NCi1kcWJhczc2MCB0b1NjaSAiSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzYxIHRvU2NpICJpbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhczc2MyB0b1NjaSAiSU5GSU5JVFkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzY0IHRvU2NpICIrSW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhczc2NiB0b1NjaSAiK2lOZkluSXRZIiAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzY3IHRvU2NpICIrSU5GSU5JVFkiICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5DQotZHFiYXM3NjkgdG9TY2kgIi1pbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5DQotZHFiYXM3NzAgdG9TY2kgIi1pTmZJbkl0WSIgICAgICAgLT4gLUluZmluaXR5DQotZHFiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5DQotDQotLS0gU3BlY2lhbHMgYW5kIHplcm9zIGZvciB0b0VuZw0KLWRxYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFODQotZHFiYXN0NzczIHRvRW5nICItSW5maW5pdHkiICAgICAgICAtPiAtSW5maW5pdHkNCi1kcWJhc3Q3NzQgdG9FbmcgIi1zTmFOIiAgICAgICAgICAgIC0+IC1zTmFODQotZHFiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFODQotZHFiYXN0Nzc2IHRvRW5nICIrSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzdDc3OCB0b0VuZyAiK3NOYU4iICAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFODQotZHFiYXN0NzgwIHRvRW5nICJJTkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzdDc4MSB0b0VuZyAiU05BTiIgICAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFODQotZHFiYXN0NzgzIHRvRW5nICJpbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzdDc4NCB0b0VuZyAic25hbiIgICAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFODQotZHFiYXN0Nzg2IHRvRW5nICJJbkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzdDc4NyB0b0VuZyAiU25BTiIgICAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFODQotZHFiYXN0Nzg5IHRvRW5nICJpTmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzdDc5MCB0b0VuZyAic05hbiIgICAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFODQotZHFiYXN0NzkyIHRvRW5nICJJbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzdDc5MyB0b0VuZyAic05hTiIgICAgICAgICAgICAgLT4gc05hTg0KLQ0KLS0tIFplcm8gdG9FbmcsIGV0Yy4NCi1kcWJhc3Q4MDAgdG9FbmcgMGUrMSAgICAgICAgICAgICAgLT4gIjAuMDBFKzMiICAtLSBkb2MgZXhhbXBsZQ0KLQ0KLWRxYmFzdDgwMSB0b0VuZyAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05DQotZHFiYXN0ODAyIHRvRW5nIDAuMDAwMDAwMDAgICAgICAgIC0+IDAuMDBFLTYNCi1kcWJhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02DQotZHFiYXN0ODA0IHRvRW5nIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwDQotZHFiYXN0ODA1IHRvRW5nIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDANCi1kcWJhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwDQotZHFiYXN0ODA3IHRvRW5nIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwDQotZHFiYXN0ODA4IHRvRW5nIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDANCi1kcWJhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZHFiYXN0ODEwIHRvRW5nICAuMCAgICAgICAgICAgICAgIC0+IDAuMA0KLWRxYmFzdDgxMSB0b0VuZyAwLiAgICAgICAgICAgICAgICAtPiAwDQotZHFiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjANCi1kcWJhc3Q4MTMgdG9FbmcgLTAuICAgICAgICAgICAgICAgLT4gLTANCi1kcWJhc3Q4MTQgdG9FbmcgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMA0KLWRxYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMA0KLWRxYmFzdDgxNiB0b0VuZyAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDANCi1kcWJhc3Q4MTcgdG9FbmcgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMA0KLWRxYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMA0KLWRxYmFzdDgxOSB0b0VuZyAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDANCi1kcWJhc3Q4MjAgdG9FbmcgLTAuMDAwMDAwMCAgICAgICAgLT4gLTAuMEUtNg0KLWRxYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNg0KLWRxYmFzdDgyMiB0b0VuZyAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQ0KLQ0KLWRxYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwDQotZHFiYXN0ODMxIHRvRW5nICAwLjAwRSsxICAgICAgICAgIC0+IDAuMA0KLWRxYmFzdDgzMiB0b0VuZyAgMC4wMEUrMiAgICAgICAgICAtPiAwDQotZHFiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMNCi1kcWJhc3Q4MzQgdG9FbmcgIDAuMDBFKzQgICAgICAgICAgLT4gMC4wRSszDQotZHFiYXN0ODM1IHRvRW5nICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMNCi1kcWJhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNg0KLWRxYmFzdDgzNyB0b0VuZyAgMC4wMEUrNyAgICAgICAgICAtPiAwLjBFKzYNCi1kcWJhc3Q4MzggdG9FbmcgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNg0KLWRxYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5DQotDQotZHFiYXN0ODQwIHRvRW5nICAwLjBFKzAgICAgICAgICAgIC0+IDAuMA0KLWRxYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwDQotZHFiYXN0ODQyIHRvRW5nICAwLjBFKzIgICAgICAgICAgIC0+IDAuMDBFKzMNCi1kcWJhc3Q4NDMgdG9FbmcgIDAuMEUrMyAgICAgICAgICAgLT4gMC4wRSszDQotZHFiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMNCi1kcWJhc3Q4NDUgdG9FbmcgIDAuMEUrNSAgICAgICAgICAgLT4gMC4wMEUrNg0KLWRxYmFzdDg0NiB0b0VuZyAgMC4wRSs2ICAgICAgICAgICAtPiAwLjBFKzYNCi1kcWJhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNg0KLWRxYmFzdDg0OCB0b0VuZyAgMC4wRSs4ICAgICAgICAgICAtPiAwLjAwRSs5DQotZHFiYXN0ODQ5IHRvRW5nICAwLjBFKzkgICAgICAgICAgIC0+IDAuMEUrOQ0KLQ0KLWRxYmFzdDg1MCB0b0VuZyAgMEUrMCAgICAgICAgICAgICAtPiAwDQotZHFiYXN0ODUxIHRvRW5nICAwRSsxICAgICAgICAgICAgIC0+IDAuMDBFKzMNCi1kcWJhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszDQotZHFiYXN0ODUzIHRvRW5nICAwRSszICAgICAgICAgICAgIC0+IDBFKzMNCi1kcWJhc3Q4NTQgdG9FbmcgIDBFKzQgICAgICAgICAgICAgLT4gMC4wMEUrNg0KLWRxYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYNCi1kcWJhc3Q4NTYgdG9FbmcgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNg0KLWRxYmFzdDg1NyB0b0VuZyAgMEUrNyAgICAgICAgICAgICAtPiAwLjAwRSs5DQotZHFiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQ0KLWRxYmFzdDg1OSB0b0VuZyAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5DQotDQotZHFiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMA0KLWRxYmFzdDg2MSB0b0VuZyAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwDQotZHFiYXN0ODYyIHRvRW5nICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwDQotZHFiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMA0KLWRxYmFzdDg2NCB0b0VuZyAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwDQotZHFiYXN0ODY1IHRvRW5nICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwDQotZHFiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNg0KLWRxYmFzdDg2NyB0b0VuZyAgMC4wRS03ICAgICAgICAgICAtPiAwLjAwRS02DQotZHFiYXN0ODY4IHRvRW5nICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkNCi1kcWJhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05DQotDQotZHFiYXN0ODcwIHRvRW5nICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDANCi1kcWJhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDANCi1kcWJhc3Q4NzIgdG9FbmcgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwDQotZHFiYXN0ODczIHRvRW5nICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDANCi1kcWJhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDANCi1kcWJhc3Q4NzUgdG9FbmcgIDAuMDBFLTUgICAgICAgICAgLT4gMC4wRS02DQotZHFiYXN0ODc2IHRvRW5nICAwLjAwRS02ICAgICAgICAgIC0+IDAuMDBFLTYNCi1kcWJhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQ0KLWRxYmFzdDg3OCB0b0VuZyAgMC4wMEUtOCAgICAgICAgICAtPiAwLjBFLTkNCi1kcWJhc3Q4NzkgdG9FbmcgIDAuMDBFLTkgICAgICAgICAgLT4gMC4wMEUtOQ0KLQ0KLS0tIGxvbmcgaW5wdXQgc3RyaW5ncw0KLWRxYmFzODAxIHRvc2NpICcwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODAyIHRvc2NpICcwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgwMyB0b3NjaSAnMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODA0IHRvc2NpICcwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODA1IHRvc2NpICcwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgwNiB0b3NjaSAnMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODA3IHRvc2NpICcwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODA4IHRvc2NpICcwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgwOSB0b3NjaSAnMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODEwIHRvc2NpICcwMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLQ0KLWRxYmFzODExIHRvc2NpICcwLjEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODEyIHRvc2NpICcwLjAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAxMjM0NTY3ODkwMTIzNDU2DQotZHFiYXM4MTMgdG9zY2kgJzAuMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODE0IHRvc2NpICcwLjAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODE1IHRvc2NpICcwLjAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAxMjM0NTY3ODkwMTIzNDU2DQotZHFiYXM4MTYgdG9zY2kgJzAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODE3IHRvc2NpICcwLjAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS03DQotZHFiYXM4MTggdG9zY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS04DQotZHFiYXM4MTkgdG9zY2kgJzAuMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOQ0KLWRxYmFzODIwIHRvc2NpICcwLjAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS0xMA0KLQ0KLWRxYmFzODIxIHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MCcgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzM3IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzODIyIHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSszOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczgyMyB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMicgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzM5IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzODI0IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMycgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQwIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzODI1IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0MSBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczgyNiB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjM0NScgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQyIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzODI3IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQzIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzODI4IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQ1NjcnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczgyOSB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjM0NTY3OCcgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQ1IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cw0KLWRxYmFzOTA2IHRvU2NpICc5OWU5OTk5OTk5OTknICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczkwNyB0b1NjaSAnOTk5ZTk5OTk5OTk5OScgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MDggdG9TY2kgJzAuOWUtOTk5OTk5OTk5JyAgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiYXM5MDkgdG9TY2kgJzAuMDllLTk5OTk5OTk5OScgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiYXM5MTAgdG9TY2kgJzAuMWUxMDAwMDAwMDAwJyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzOTExIHRvU2NpICcxMGUtMTAwMDAwMDAwMCcgICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzOTEyIHRvU2NpICcwLjllOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczkxMyB0b1NjaSAnOTllLTk5OTk5OTk5OTknICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczkxNCB0b1NjaSAnMTExZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MTUgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTknICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiYXM5MTYgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTk5JyAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiYXM5MTcgdG9TY2kgJzdlMTAwMDAwMDAwMCcgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLS0tIG5lZ2F0aXZlcyB0aGUgc2FtZQ0KLWRxYmFzOTE4IHRvU2NpICctOTllOTk5OTk5OTk5JyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MTkgdG9TY2kgJy05OTllOTk5OTk5OTk5JyAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczkyMCB0b1NjaSAnLTAuOWUtOTk5OTk5OTk5JyAgICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzOTIyIHRvU2NpICctMC4xZTEwMDAwMDAwMDAnICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MjMgdG9TY2kgJy0xMGUtMTAwMDAwMDAwMCcgICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzOTI0IHRvU2NpICctMC45ZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MjUgdG9TY2kgJy05OWUtOTk5OTk5OTk5OScgICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzOTI2IHRvU2NpICctMTExZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzOTI4IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OTknIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczkyOSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG92ZXJmbG93IHJlc3VsdHMgYXQgZGlmZmVyZW50IHJvdW5kaW5nIG1vZGVzDQotcm91bmRpbmc6ICBjZWlsaW5nDQotZHFiYXM5MzAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczkzMSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgdXANCi1kcWJhczkzMiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzOTMzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICBkb3duDQotZHFiYXM5MzQgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczkzNSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgZmxvb3INCi1kcWJhczkzNiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzOTM3IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICBoYWxmX3VwDQotZHFiYXM5MzggdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczkzOSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgaGFsZl9ldmVuDQotZHFiYXM5NDAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczk0MSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgaGFsZl9kb3duDQotZHFiYXM5NDIgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczk0MyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgaGFsZl9ldmVuDQotDQotLS0gTm93IGNoZWNrIDg1NC83NTRyIHNvbWUgc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93IHRvIDANCi1kcWJlbTQwMCB0b1NjaSAgMS4wMDAwRS0zODMgICAgIC0+IDEuMDAwMEUtMzgzDQotZHFiZW00MDEgdG9TY2kgIDAuMUUtNjE3MiAgICAgICAgLT4gMUUtNjE3MyAgICAgICBTdWJub3JtYWwNCi1kcWJlbTQwMiB0b1NjaSAgMC4xMDAwRS02MTcyICAgICAtPiAxLjAwMEUtNjE3MyAgIFN1Ym5vcm1hbA0KLWRxYmVtNDAzIHRvU2NpICAwLjAxMDBFLTYxNzIgICAgIC0+IDEuMDBFLTYxNzQgICAgU3Vibm9ybWFsDQotZHFiZW00MDQgdG9TY2kgIDAuMDAxMEUtNjE3MiAgICAgLT4gMS4wRS02MTc1ICAgICBTdWJub3JtYWwNCi1kcWJlbTQwNSB0b1NjaSAgMC4wMDAxRS02MTcyICAgICAtPiAxRS02MTc2ICAgICAgIFN1Ym5vcm1hbA0KLWRxYmVtNDA2IHRvU2NpICAwLjAwMDEwRS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFiZW00MDcgdG9TY2kgIDAuMDAwMTNFLTYxNzIgICAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQwOCB0b1NjaSAgMC4wMDAxNUUtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDA5IHRvU2NpICAwLjAwMDE3RS02MTcyICAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MTAgdG9TY2kgIDAuMDAwMjNFLTYxNzIgICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQxMSB0b1NjaSAgMC4wMDAyNUUtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDEyIHRvU2NpICAwLjAwMDI3RS02MTcyICAgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MTMgdG9TY2kgIDAuMDAwMTQ5RS02MTcyICAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDE1IHRvU2NpICAwLjAwMDE1MUUtNjE3MiAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MTYgdG9TY2kgIDAuMDAwMjQ5RS02MTcyICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDE4IHRvU2NpICAwLjAwMDI1MUUtNjE3MiAgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MTkgdG9TY2kgIDAuMDAwMDlFLTYxNzIgICAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQyMCB0b1NjaSAgMC4wMDAwNUUtNjE3MiAgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiZW00MjEgdG9TY2kgIDAuMDAwMDNFLTYxNzIgICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmVtNDIyIHRvU2NpICAwLjAwMDAwOUUtNjE3MiAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiZW00MjQgdG9TY2kgIDAuMDAwMDAzRS02MTcyICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLWRxYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtNjE3MiAgIC0+IDEuMEUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MjYgdG9TY2kgIDAuMDAxMDUwRS02MTcyICAgLT4gMS4wRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQyNyB0b1NjaSAgMC4wMDEwNTFFLTYxNzIgICAtPiAxLjFFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtNjE3MiAgIC0+IDEuMUUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MjkgdG9TY2kgIDAuMDAxMTUwRS02MTcyICAgLT4gMS4yRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQzMCB0b1NjaSAgMC4wMDExNTFFLTYxNzIgICAtPiAxLjJFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYmVtNDMyIHRvU2NpICAwLjAxMDA0OUUtNjE3MiAgIC0+IDEuMDBFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MzMgdG9TY2kgIDAuMDEwMDUwRS02MTcyICAgLT4gMS4wMEUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQzNCB0b1NjaSAgMC4wMTAwNTFFLTYxNzIgICAtPiAxLjAxRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDM1IHRvU2NpICAwLjAxMDE0OUUtNjE3MiAgIC0+IDEuMDFFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MzYgdG9TY2kgIDAuMDEwMTUwRS02MTcyICAgLT4gMS4wMkUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQzNyB0b1NjaSAgMC4wMTAxNTFFLTYxNzIgICAtPiAxLjAyRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYmVtNDQwIHRvU2NpICAwLjEwMTAzRS02MTcyICAgIC0+IDEuMDEwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTYxNzIgICAgLT4gMS4wMTBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ0MiB0b1NjaSAgMC4xMDEwN0UtNjE3MiAgICAtPiAxLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDQzIHRvU2NpICAwLjEwMTEzRS02MTcyICAgIC0+IDEuMDExRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTYxNzIgICAgLT4gMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ0NSB0b1NjaSAgMC4xMDExN0UtNjE3MiAgICAtPiAxLjAxMkUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYmVtNDUwIHRvU2NpICAxLjEwNzMwRS02MTczICAgLT4gMS4xMDdFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ1MSB0b1NjaSAgMS4xMDc1MEUtNjE3MyAgIC0+IDEuMTA4RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NTIgdG9TY2kgIDEuMTA3NzBFLTYxNzMgICAtPiAxLjEwOEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDUzIHRvU2NpICAxLjEwODMwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ1NCB0b1NjaSAgMS4xMDg1MEUtNjE3MyAgIC0+IDEuMTA4RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NTUgdG9TY2kgIDEuMTA4NzBFLTYxNzMgICAtPiAxLjEwOUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG1ha2Ugc3VyZSBzaWduIE9LDQotZHFiZW00NTYgdG9TY2kgIC0wLjEwMTAzRS02MTcyICAgLT4gLTEuMDEwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS02MTcyICAgLT4gLTEuMDEwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NTggdG9TY2kgIC0wLjEwMTA3RS02MTcyICAgLT4gLTEuMDExRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NTkgdG9TY2kgIC0wLjEwMTEzRS02MTcyICAgLT4gLTEuMDExRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS02MTcyICAgLT4gLTEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NjEgdG9TY2kgIC0wLjEwMTE3RS02MTcyICAgLT4gLTEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gJzk5OXMnIGNhc2VzDQotZHFiZW00NjQgdG9TY2kgIDk5OTk5OUUtNjE3MyAgICAgICAgIC0+IDkuOTk5OTlFLTYxNjggU3Vibm9ybWFsDQotZHFiZW00NjUgdG9TY2kgIDk5OTk5LjBFLTYxNzIgICAgICAgIC0+IDkuOTk5OTBFLTYxNjggU3Vibm9ybWFsDQotZHFiZW00NjYgdG9TY2kgIDk5OTk5LkUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE2OCAgU3Vibm9ybWFsDQotZHFiZW00NjcgdG9TY2kgIDk5OTkuOUUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE2OSAgU3Vibm9ybWFsDQotZHFiZW00NjggdG9TY2kgIDk5OS45OUUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE3MCAgU3Vibm9ybWFsDQotZHFiZW00NjkgdG9TY2kgIDk5Ljk5OUUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE3MSAgU3Vibm9ybWFsDQotZHFiZW00NzAgdG9TY2kgIDkuOTk5OUUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE3MiAgU3Vibm9ybWFsDQotZHFiZW00NzEgdG9TY2kgIDAuOTk5OTlFLTYxNzIgICAgICAgIC0+IDEuMDAwMEUtNjE3MiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtNjE3MiAgICAgICAtPiAxLjAwMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDczIHRvU2NpICAwLjAwOTk5OTlFLTYxNzIgICAgICAtPiAxLjAwRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDc0IHRvU2NpICAwLjAwMDk5OTk5RS02MTcyICAgICAtPiAxLjBFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtNjE3MiAgICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDc2IHRvU2NpICAwLjAwMDAwOTk5OTlFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiZW00NzcgdG9TY2kgIDAuMDAwMDAwOTk5OTlFLTYxNzIgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTYxNzIgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tIEV4cG9uZW50cyB3aXRoIGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcw0KLWRxYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFiYXMxMDAyIHRvU2NpICAxZTA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFiYXMxMDAzIHRvU2NpICAxZTAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFiYXMxMDA1IHRvU2NpICAxZTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwMDYgdG9TY2kgIDFlMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzMTAwOCB0b1NjaSAgMWUtMDk5OTk5OTk5OSAtPiAwRS02MTc2ICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzMTAwOSB0b1NjaSAgMWUtMDA5OTk5OTk5OTkgLT4gMEUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzMTAxMSB0b1NjaSAgMWUtMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzMTAxMiB0b1NjaSAgMWUtMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQotZHFiYXMxMDQxIHRvU2NpICAgICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0NDRFLTYxNDQgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjRFLTYxNDQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcWJhczEwNDIgdG9TY2kgICAgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjQ0NUUtNjE0NCAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNEUtNjE0NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxYmFzMTA0MyB0b1NjaSAgICAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNDQ2RS02MTQ0IC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0RS02MTQ0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotDQotLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0NCi1kcWJhczEwNzUgdG9TY2kgICAwZSsxMDAwMCAgLT4gIDBFKzYxMTEgQ2xhbXBlZA0KLWRxYmFzMTA3NiB0b1NjaSAgIDBlLTEwMDAwICAtPiAgMEUtNjE3NiAgQ2xhbXBlZA0KLWRxYmFzMTA3NyB0b1NjaSAgLTBlKzEwMDAwICAtPiAtMEUrNjExMSBDbGFtcGVkDQotZHFiYXMxMDc4IHRvU2NpICAtMGUtMTAwMDAgIC0+IC0wRS02MTc2ICBDbGFtcGVkDQotDQotLS0gZXh0cmVtZSB2YWx1ZXMgZnJvbSBuZXh0LXdpZGVyDQotZHFiYXMxMTAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzE1NzI4NjQgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTEwMiB0b1NjaSAtMUUtMTU3Mjg2MyAtPiAtMEUtNjE3NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZHFiYXMxMTAzIHRvU2NpIC0xRS0xNTcyOTMyIC0+IC0wRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1kcWJhczExMDQgdG9TY2kgLTAgLT4gLTANCi1kcWJhczExMDUgdG9TY2kgKzAgLT4gIDANCi1kcWJhczExMDYgdG9TY2kgKzFFLTE1NzI5MzIgLT4gIDBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRxYmFzMTEwNyB0b1NjaSArMUUtMTU3Mjg2MyAtPiAgMEUtNjE3NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZHFiYXMxMTA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzE1NzI4NjQgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFCYXNlLmRlY1Rlc3QgLS0gYmFzZSBkZWNRdWFkIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIGZpbGUgdGVzdHMgYmFzZSBjb252ZXJzaW9ucyBmcm9tIHN0cmluZyB0byBhIGRlY2ltYWwgbnVtYmVyCistLSBhbmQgYmFjayB0byBhIHN0cmluZyAoaW4gU2NpZW50aWZpYyBmb3JtKQorCistLSBOb3RlIHRoYXQgdW5saWtlIG90aGVyIG9wZXJhdGlvbnMgdGhlIG9wZXJhbmQgaXMgc3ViamVjdCB0byByb3VuZGluZworLS0gdG8gY29uZm9ybSB0byBlbWF4IGFuZCBwcmVjaXNpb24gc2V0dGluZ3MgKHRoYXQgaXMsIG51bWJlcnMgd2lsbAorLS0gY29uZm9ybSB0byBydWxlcyBhbmQgZXhwb25lbnQgd2lsbCBiZSBpbiBwZXJtaXR0ZWQgcmFuZ2UpLiAgVGhlCistLSAnbGVmdCBoYW5kIHNpZGUnLCB0aGVyZWZvcmUsIG1heSBoYXZlIG51bWJlcnMgdGhhdCBjYW5ub3QgYmUKKy0tIHJlcHJlc2VudGVkIGluIGEgZGVjUXVhZC4gIFNvbWUgdGVzdGNhc2VzIGdvIHRvIHRoZSBsaW1pdCBvZiB0aGUKKy0tIG5leHQtd2lkZXIgZm9ybWF0LCBhbmQgaGVuY2UgdGhlc2UgdGVzdGNhc2VzIG1heSBhbHNvIGJlIHVzZWQgdG8KKy0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLgorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkcWJhczAwMSB0b1NjaSAgICAgICAwIC0+IDAKK2RxYmFzMDAyIHRvU2NpICAgICAgIDEgLT4gMQorZHFiYXMwMDMgdG9TY2kgICAgIDEuMCAtPiAxLjAKK2RxYmFzMDA0IHRvU2NpICAgIDEuMDAgLT4gMS4wMAorZHFiYXMwMDUgdG9TY2kgICAgICAxMCAtPiAxMAorZHFiYXMwMDYgdG9TY2kgICAgMTAwMCAtPiAxMDAwCitkcWJhczAwNyB0b1NjaSAgICAxMC4wIC0+IDEwLjAKK2RxYmFzMDA4IHRvU2NpICAgIDEwLjEgLT4gMTAuMQorZHFiYXMwMDkgdG9TY2kgICAgMTAuNCAtPiAxMC40CitkcWJhczAxMCB0b1NjaSAgICAxMC41IC0+IDEwLjUKK2RxYmFzMDExIHRvU2NpICAgIDEwLjYgLT4gMTAuNgorZHFiYXMwMTIgdG9TY2kgICAgMTAuOSAtPiAxMC45CitkcWJhczAxMyB0b1NjaSAgICAxMS4wIC0+IDExLjAKK2RxYmFzMDE0IHRvU2NpICAxLjIzNCAtPiAxLjIzNAorZHFiYXMwMTUgdG9TY2kgIDAuMTIzIC0+IDAuMTIzCitkcWJhczAxNiB0b1NjaSAgMC4wMTIgLT4gMC4wMTIKK2RxYmFzMDE3IHRvU2NpICAtMCAgICAtPiAtMAorZHFiYXMwMTggdG9TY2kgIC0wLjAgIC0+IC0wLjAKK2RxYmFzMDE5IHRvU2NpIC0wMC4wMCAtPiAtMC4wMAorCitkcWJhczAyMSB0b1NjaSAgICAgLTEgLT4gLTEKK2RxYmFzMDIyIHRvU2NpICAgLTEuMCAtPiAtMS4wCitkcWJhczAyMyB0b1NjaSAgIC0wLjEgLT4gLTAuMQorZHFiYXMwMjQgdG9TY2kgICAtOS4xIC0+IC05LjEKK2RxYmFzMDI1IHRvU2NpICAgLTkuMTEgLT4gLTkuMTEKK2RxYmFzMDI2IHRvU2NpICAgLTkuMTE5IC0+IC05LjExOQorZHFiYXMwMjcgdG9TY2kgICAtOS45OTkgLT4gLTkuOTk5CisKK2RxYmFzMDMwIHRvU2NpICAnMTIzNDU2Nzg5LjEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5LjEyMzQ1NicKK2RxYmFzMDMxIHRvU2NpICAnMTIzNDU2Nzg5LjAwMDAwMCcgICAtPiAnMTIzNDU2Nzg5LjAwMDAwMCcKK2RxYmFzMDMyIHRvU2NpICAgJzEyMzQ1Njc4OTEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5MTIzNDU2JworZHFiYXMwMzMgdG9TY2kgICAnMC4wMDAwMTIzNDU2Nzg5JyAgIC0+ICcwLjAwMDAxMjM0NTY3ODknCitkcWJhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDAxMjM0NTY3ODknCitkcWJhczAzNSB0b1NjaSAnMC4wMDAwMDAxMjM0NTY3ODknICAgLT4gJzEuMjM0NTY3ODlFLTcnCitkcWJhczAzNiB0b1NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5JyAgLT4gJzEuMjM0NTY3ODlFLTgnCisKK2RxYmFzMDM3IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NCcgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDQnCitkcWJhczAzOCB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDUnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ1JworCistLSB0ZXN0IGZpbml0ZSBib3VuZHMgKE5lZ3Mgb2YsIHRoZW4gMCwgTnRpbnksIE5taW4sIG90aGVyLCBObWF4KQorZHFic24wMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFic24wMDIgdG9TY2kgLTFFLTYxNDMgLT4gLTFFLTYxNDMKK2RxYnNuMDAzIHRvU2NpIC0xRS02MTc2IC0+IC0xRS02MTc2IFN1Ym5vcm1hbAorZHFic24wMDQgdG9TY2kgLTAgLT4gLTAKK2RxYnNuMDA1IHRvU2NpICswIC0+ICAwCitkcWJzbjAwNiB0b1NjaSArMUUtNjE3NiAtPiAgMUUtNjE3NiBTdWJub3JtYWwKK2RxYnNuMDA3IHRvU2NpICsxRS02MTQzIC0+ICAxRS02MTQzCitkcWJzbjAwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CisKKy0tIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCBlbHNld2hlcmVdCistLSBzdHJpbmdzIHdpdGhvdXQgRSBjYW5ub3QgZ2VuZXJhdGUgRSBpbiByZXN1bHQKK2RxYmFzMDQwIHRvU2NpICIxMiIgICAgICAgIC0+ICcxMicKK2RxYmFzMDQxIHRvU2NpICItNzYiICAgICAgIC0+ICctNzYnCitkcWJhczA0MiB0b1NjaSAiMTIuNzYiICAgICAtPiAnMTIuNzYnCitkcWJhczA0MyB0b1NjaSAiKzEyLjc2IiAgICAtPiAnMTIuNzYnCitkcWJhczA0NCB0b1NjaSAiMDEyLjc2IiAgICAtPiAnMTIuNzYnCitkcWJhczA0NSB0b1NjaSAiKzAuMDAzIiAgICAtPiAnMC4wMDMnCitkcWJhczA0NiB0b1NjaSAiMTcuIiAgICAgICAtPiAnMTcnCitkcWJhczA0NyB0b1NjaSAiLjUiICAgICAgICAtPiAnMC41JworZHFiYXMwNDggdG9TY2kgIjA0NCIgICAgICAgLT4gJzQ0JworZHFiYXMwNDkgdG9TY2kgIjAwNDQiICAgICAgLT4gJzQ0JworZHFiYXMwNTAgdG9TY2kgIjAuMDAwNSIgICAgICAtPiAnMC4wMDA1JworZHFiYXMwNTEgdG9TY2kgIjAwLjAwMDA1IiAgICAtPiAnMC4wMDAwNScKK2RxYmFzMDUyIHRvU2NpICIwLjAwMDAwNSIgICAgLT4gJzAuMDAwMDA1JworZHFiYXMwNTMgdG9TY2kgIjAuMDAwMDA1MCIgICAtPiAnMC4wMDAwMDUwJworZHFiYXMwNTQgdG9TY2kgIjAuMDAwMDAwNSIgICAtPiAnNUUtNycKK2RxYmFzMDU1IHRvU2NpICIwLjAwMDAwMDA1IiAgLT4gJzVFLTgnCitkcWJhczA1NiB0b1NjaSAiMTIzNDU2NzguNTQzMjEwIiAtPiAnMTIzNDU2NzguNTQzMjEwJworZHFiYXMwNTcgdG9TY2kgIjIzNDU2NzguNTQzMjEwIiAtPiAnMjM0NTY3OC41NDMyMTAnCitkcWJhczA1OCB0b1NjaSAiMzQ1Njc4LjU0MzIxMCIgLT4gJzM0NTY3OC41NDMyMTAnCitkcWJhczA1OSB0b1NjaSAiMDM0NTY3OC41NDMyMSIgLT4gJzM0NTY3OC41NDMyMScKK2RxYmFzMDYwIHRvU2NpICIzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworZHFiYXMwNjEgdG9TY2kgIiszNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworZHFiYXMwNjIgdG9TY2kgIiswMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RxYmFzMDYzIHRvU2NpICIrMDAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworZHFiYXMwNjQgdG9TY2kgIi0zNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCitkcWJhczA2NSB0b1NjaSAiLTAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCitkcWJhczA2NiB0b1NjaSAiLTAwMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworLS0gZXhhbXBsZXMKK2RxYmFzMDY3IHRvU2NpICI1RS02IiAgICAgICAgLT4gJzAuMDAwMDA1JworZHFiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJworZHFiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycKKworLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0KKworLS0gcm91bmRlZCB3aXRoIGRvdHMgaW4gYWxsIChpbmNsdWRpbmcgZWRnZSkgcGxhY2VzCitkcWJhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+IDAuMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIuMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA3NCB0b1NjaSAgMTIzLjQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjMuNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQuNTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDUuNjc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA3NyB0b1NjaSAgMTIzNDU2Ljc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTYuNzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1NjcuODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2NzguOTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4MCB0b1NjaSAgMTIzNDU2Nzg5LjEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkuMTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkxLjIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEuMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTEyLjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIuMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4MyB0b1NjaSAgMTIzNDU2Nzg5MTIzLjQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjMuNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDg0IHRvU2NpICAxMjM0NTY3ODkxMjM0LjU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQuNTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1LjY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDUuNjc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4NiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Ljc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTYuNzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDg3IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3Ljg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1NjcuODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4LjkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2NzguOTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4OSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5LjAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkuMDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDkwIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwLjEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAuMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTEgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxLjIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEuMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5MiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyLjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIuMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDkzIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzLjQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjMuNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTQgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0LjU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQuNTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5NSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1LjY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDUuNjc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDk2IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2Ljc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTYuNzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTcgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3LjgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1NjcuODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5OCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4LjAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzguMDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDk5IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwLjEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAuMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDAgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxLjIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEuMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyLjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIuMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAyIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzLjQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjMuNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDMgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0LjU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQuNTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwNCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1LjYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDUuNiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTA1IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2LjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDYgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxLjIzICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM0IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDcgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMi4zICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM1IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDggdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMuICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM2IEluZXhhY3QgUm91bmRlZAorLS0gMTIzNDU2Nzg5MDEyMzQ1Njc4CisKKy0tIE51bWJlcnMgd2l0aCBFCitkcWJhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZHFiYXMxMzEgdG9TY2kgIjAuMDAwRS0yIiAgLT4gJzAuMDAwMDAnCitkcWJhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnCitkcWJhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycKK2RxYmFzMTM0IHRvU2NpICIwLjAwRS0yIiAgIC0+ICcwLjAwMDAnCitkcWJhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcKK2RxYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcKK2RxYmFzMTM3IHRvU2NpICIwLjAwRS01IiAgIC0+ICcwRS03JworZHFiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknCitkcWJhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknCitkcWJhczE0MCB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScKK2RxYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5JworZHFiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJworZHFiYXMxNDMgdG9TY2kgIisxRSswMDkiICAgLT4gJzFFKzknCitkcWJhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScKK2RxYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworZHFiYXMxNDYgdG9TY2kgIjFFKzA5IiAgICAgLT4gJzFFKzknCitkcWJhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnCitkcWJhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScKK2RxYmFzMTQ5IHRvU2NpICIwMDBFKzkiICAgIC0+ICcwRSs5JworZHFiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknCitkcWJhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScKK2RxYmFzMTUyIHRvU2NpICIxRTkwIiAgICAgIC0+ICcxRSs5MCcKK2RxYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5JworZHFiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknCitkcWJhczE1NSB0b1NjaSAiMC4wMDBlKzAiICAtPiAnMC4wMDAnCitkcWJhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZHFiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknCitkcWJhczE1OCB0b1NjaSAiNDRFKzkiICAgICAtPiAnNC40RSsxMCcKK2RxYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnCitkcWJhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScKK2RxYmFzMTYxIHRvU2NpICIwMEUtOSIgICAgIC0+ICcwRS05JworZHFiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnCitkcWJhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcKK2RxYmFzMTY0IHRvU2NpICIxMGUrOTAiICAgIC0+ICcxLjBFKzkxJworZHFiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnCitkcWJhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnCitkcWJhczE2NyB0b1NjaSAiMTAwZSswOSIgICAtPiAnMS4wMEUrMTEnCitkcWJhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInCitkcWJhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnCisKK2RxYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScKK2RxYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnCitkcWJhczE3MiB0b1NjaSAiMS4yNjVFLTgiICAtPiAnMS4yNjVFLTgnCitkcWJhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1JworZHFiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1JworZHFiYXMxNzUgdG9TY2kgIjEuMjY1RS0yIiAgLT4gJzAuMDEyNjUnCitkcWJhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1JworZHFiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1JworZHFiYXMxNzggdG9TY2kgIjEuMjY1RSsxIiAgLT4gJzEyLjY1JworZHFiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41JworZHFiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnCitkcWJhczE4MSB0b1NjaSAiMS4yNjVFKzQiICAtPiAnMS4yNjVFKzQnCitkcWJhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnCitkcWJhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJworCitkcWJhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnCitkcWJhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5JworZHFiYXMxOTIgdG9TY2kgIjEyLjY1RS04IiAgLT4gJzEuMjY1RS03JworZHFiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1JworZHFiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnCitkcWJhczE5NSB0b1NjaSAiMTIuNjVFLTIiICAtPiAnMC4xMjY1JworZHFiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1JworZHFiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1JworZHFiYXMxOTggdG9TY2kgIjEyLjY1RSsxIiAgLT4gJzEyNi41JworZHFiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnCitkcWJhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnCitkcWJhczIwMSB0b1NjaSAiMTIuNjVFKzQiICAtPiAnMS4yNjVFKzUnCitkcWJhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknCitkcWJhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJworCitkcWJhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnCitkcWJhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4JworZHFiYXMyMTIgdG9TY2kgIjEyNi41RS04IiAgLT4gJzAuMDAwMDAxMjY1JworZHFiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnCitkcWJhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1JworZHFiYXMyMTUgdG9TY2kgIjEyNi41RS0yIiAgLT4gJzEuMjY1JworZHFiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1JworZHFiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41JworZHFiYXMyMTggdG9TY2kgIjEyNi41RSsxIiAgLT4gJzEyNjUnCitkcWJhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnCitkcWJhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnCitkcWJhczIyMSB0b1NjaSAiMTI2LjVFKzQiICAtPiAnMS4yNjVFKzYnCitkcWJhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJworZHFiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicKKworZHFiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScKK2RxYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycKK2RxYmFzMjMyIHRvU2NpICIxMjY1RS04IiAgLT4gJzAuMDAwMDEyNjUnCitkcWJhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnCitkcWJhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScKK2RxYmFzMjM1IHRvU2NpICIxMjY1RS0yIiAgLT4gJzEyLjY1JworZHFiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnCitkcWJhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1JworZHFiYXMyMzggdG9TY2kgIjEyNjVFKzEiICAtPiAnMS4yNjVFKzQnCitkcWJhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScKK2RxYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2JworZHFiYXMyNDEgdG9TY2kgIjEyNjVFKzQiICAtPiAnMS4yNjVFKzcnCitkcWJhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnCitkcWJhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnCisKK2RxYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1JworZHFiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnCitkcWJhczI1MiB0b1NjaSAiMC4xMjY1RS04IiAgLT4gJzEuMjY1RS05JworZHFiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1JworZHFiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnCitkcWJhczI1NSB0b1NjaSAiMC4xMjY1RS0yIiAgLT4gJzAuMDAxMjY1JworZHFiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1JworZHFiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnCitkcWJhczI1OCB0b1NjaSAiMC4xMjY1RSsxIiAgLT4gJzEuMjY1JworZHFiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScKK2RxYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnCitkcWJhczI2MSB0b1NjaSAiMC4xMjY1RSs0IiAgLT4gJzEyNjUnCitkcWJhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3JworZHFiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknCisKKy0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10KK2RxYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcKK2RxYmFzMjkxIHRvU2NpICItMC4wMDBFLTIiICAtPiAnLTAuMDAwMDAnCitkcWJhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcKK2RxYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnCitkcWJhczI5NCB0b1NjaSAiLTAuMDBFLTIiICAgLT4gJy0wLjAwMDAnCitkcWJhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJworZHFiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnCitkcWJhczI5NyB0b1NjaSAiLTAuMEUtMyIgICAgLT4gJy0wLjAwMDAnCitkcWJhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJworZHFiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnCisKKy0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzCitkcWJhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMKK2RxYmFzMzAyICB0b0VuZyAxMGUxMiAgLT4gMTBFKzEyCitkcWJhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTIKK2RxYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMgorZHFiYXMzMDUgIHRvU2NpIDEwZTEwICAtPiAxLjBFKzExCitkcWJhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQorZHFiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwCitkcWJhczMwOCAgdG9FbmcgMTBlOSAgIC0+IDEwRSs5CitkcWJhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQorZHFiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkKK2RxYmFzMzExICB0b1NjaSAxMGU3ICAgLT4gMS4wRSs4CitkcWJhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNgorZHFiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcKK2RxYmFzMzE0ICB0b0VuZyAxMGU2ICAgLT4gMTBFKzYKK2RxYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2CitkcWJhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNgorZHFiYXMzMTcgIHRvU2NpIDEwZTQgICAtPiAxLjBFKzUKK2RxYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszCitkcWJhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNAorZHFiYXMzMjAgIHRvRW5nIDEwZTMgICAtPiAxMEUrMworZHFiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMKK2RxYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszCitkcWJhczMyMyAgdG9TY2kgMTBlMSAgIC0+IDEuMEUrMgorZHFiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDAKK2RxYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTAKK2RxYmFzMzI2ICB0b0VuZyAxMGUwICAgLT4gMTAKK2RxYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wCitkcWJhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMAorZHFiYXMzMjkgIHRvU2NpIDEwZS0yICAtPiAwLjEwCitkcWJhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTAKK2RxYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTAKK2RxYmFzMzMyICB0b0VuZyAxMGUtMyAgLT4gMC4wMTAKK2RxYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwCitkcWJhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMAorZHFiYXMzMzUgIHRvU2NpIDEwZS01ICAtPiAwLjAwMDEwCitkcWJhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTAKK2RxYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTAKK2RxYmFzMzM4ICB0b0VuZyAxMGUtNiAgLT4gMC4wMDAwMTAKK2RxYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwCitkcWJhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMAorZHFiYXMzNDEgIHRvU2NpIDEwZS04ICAtPiAxLjBFLTcKK2RxYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05CitkcWJhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOAorZHFiYXMzNDQgIHRvRW5nIDEwZS05ICAtPiAxMEUtOQorZHFiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkKK2RxYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05CitkcWJhczM0NyAgdG9TY2kgMTBlLTExIC0+IDEuMEUtMTAKK2RxYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMgorZHFiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExCitkcWJhczM1MCAgdG9FbmcgMTBlLTEyIC0+IDEwRS0xMgorZHFiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyCitkcWJhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTIKKworZHFiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyCitkcWJhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTIKK2RxYmFzMzYzICB0b1NjaSA3RTExICAtPiA3RSsxMQorZHFiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQorZHFiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwCitkcWJhczM2NiAgdG9FbmcgN0UxMCAgLT4gNzBFKzkKK2RxYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5CitkcWJhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQorZHFiYXMzNjkgIHRvU2NpIDdFOCAgIC0+IDdFKzgKK2RxYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYKK2RxYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3CitkcWJhczM3MiAgdG9FbmcgN0U3ICAgLT4gNzBFKzYKK2RxYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2CitkcWJhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNgorZHFiYXMzNzUgIHRvU2NpIDdFNSAgIC0+IDdFKzUKK2RxYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMKK2RxYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0CitkcWJhczM3OCAgdG9FbmcgN0U0ICAgLT4gNzBFKzMKK2RxYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszCitkcWJhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMworZHFiYXMzODEgIHRvU2NpIDdFMiAgIC0+IDdFKzIKK2RxYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDAKK2RxYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxCitkcWJhczM4NCAgdG9FbmcgN0UxICAgLT4gNzAKK2RxYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3CitkcWJhczM4NiAgdG9FbmcgN0UwICAgLT4gNworZHFiYXMzODcgIHRvU2NpIDdFLTEgIC0+IDAuNworZHFiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNworZHFiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcKK2RxYmFzMzkwICB0b0VuZyA3RS0yICAtPiAwLjA3CitkcWJhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcKK2RxYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNworZHFiYXMzOTMgIHRvU2NpIDdFLTQgIC0+IDAuMDAwNworZHFiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNworZHFiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcKK2RxYmFzMzk2ICB0b0VuZyA3RS01ICAtPiAwLjAwMDA3CitkcWJhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcKK2RxYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNworZHFiYXMzOTkgIHRvU2NpIDdFLTcgIC0+IDdFLTcKK2RxYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkKK2RxYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04CitkcWJhczQwMiAgdG9FbmcgN0UtOCAgLT4gNzBFLTkKK2RxYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05CitkcWJhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQorZHFiYXM0MDUgIHRvU2NpIDdFLTEwIC0+IDdFLTEwCitkcWJhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMgorZHFiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExCitkcWJhczQwOCAgdG9FbmcgN0UtMTEgLT4gNzBFLTEyCitkcWJhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTIKK2RxYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMgorZHFiYXM0MTEgIHRvU2NpIDdFLTEzIC0+IDdFLTEzCitkcWJhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQorCistLSBFeGFjdHMgcmVtYWluIGV4YWN0IHVwIHRvIHByZWNpc2lvbiAuLgorZHFiYXM0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDAKK2RxYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMAorZHFiYXM0MjQgIHRvU2NpICA5OTkuOSAtPiAgOTk5LjkKK2RxYmFzNDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wCitkcWJhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQorZHFiYXM0MzAgIHRvU2NpIDEwMDAwIC0+IDEwMDAwCitkcWJhczQzMiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFiYXM0MzQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWJhczQzNiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWJhczQzOCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFiYXM0NDAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgIFJvdW5kZWQKK2RxYmFzNDQyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgICBSb3VuZGVkCitkcWJhczQ0NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ0NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ0OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ1MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM0ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ1MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZAorZHFiYXM0NTQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NTYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NTggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NjAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgIFJvdW5kZWQKK2RxYmFzNDYyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDY0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDY2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzYgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgICBSb3VuZGVkCitkcWJhczQ3MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ3MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ3NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM3ICAgUm91bmRlZCBJbmV4YWN0CisKKy0tIGNoZWNrIHJvdW5kaW5nIG1vZGVzIGhlZWRlZAorcm91bmRpbmc6ICBjZWlsaW5nCitkcWJzcjQwMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNDAyICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQwMyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MDQgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RxYnNyNDA1ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I0MDYgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDA3ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQwOCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZHFic3I0MTAgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjQxMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MTIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDEzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZHFic3I0MTUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjQxNiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MTcgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDE4ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQxOSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RxYnNyNDIxICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I0MjIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDIzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQyNCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MjUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZHFic3I0MjYgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjQyNyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MjggIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDI5ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RxYnNyNDMxICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I0MzIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDMzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQzNCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MzUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKy0tIG5lZ2F0aXZlcworcm91bmRpbmc6ICBjZWlsaW5nCitkcWJzcjUwMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNTAyICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUwMyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MDQgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RxYnNyNTA1ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I1MDYgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTA3ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUwOCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZHFic3I1MTAgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjUxMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MTIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTEzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZHFic3I1MTUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjUxNiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MTcgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTE4ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUxOSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RxYnNyNTIxICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I1MjIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTIzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUyNCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MjUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZHFic3I1MjYgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjUyNyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MjggIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTI5ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RxYnNyNTMxICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I1MzIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTMzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUzNCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MzUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBUaGUgJ2JhZGRpZXMnIHRlc3RzIGZyb20gRGlhZ0JpZ0RlY2ltYWwsIHBsdXMgc29tZSBuZXcgb25lcworZHFiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTAyIHRvU2NpICcuLicgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTA1IHRvU2NpICctKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTA4IHRvU2NpICcxMmUrKycgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTExIHRvU2NpICcrIDEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTE0IHRvU2NpICcgLSAxICcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTE3IHRvU2NpICcxMi0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTIwIHRvU2NpICcxZS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTIzIHRvU2NpICc3ZTEyMzU2Nzg5MDEyeCcgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTI2IHRvU2NpICdcdTBlNWEnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTI5IHRvU2NpICcxLjM0LjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTMyIHRvU2NpICcwMS4zNS0nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTM1IHRvU2NpICcwMC4uMDAnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTM4IHRvU2NpICcxMTFlKzEyKycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQxIHRvU2NpICcxMTFlMWUrMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQ0IHRvU2NpICd0ZW4nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQ3IHRvU2NpICcxZTEuJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTUwIHRvU2NpICcxLjIzLjQnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTUzIHRvU2NpICcxRSsxLjIuMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTU2IHRvU2NpICcxRSstMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTU5IHRvU2NpICIxRSIiMSIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CistLSBOZWFyLXNwZWNpYWxzCitkcWJhczU2MSB0b1NjaSAicU5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2NCB0b1NjaSAiSW5maSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2NyB0b1NjaSAiSW5maW5pdCIgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3MCB0b1NjaSAiOUluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3MyB0b1NjaSAiLXNOYSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscworZHFiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzcgdG9TY2kgICcuZSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODAgdG9TY2kgICctLmUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODMgdG9TY2kgICcrLkUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkcWJhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4OCB0b1NjaSAgJysuc05hTicgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIFplcm9zCitkcWJhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05CitkcWJhczYwMiB0b1NjaSAwLjAwMDAwMDAwICAgICAgICAtPiAwRS04CitkcWJhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03CitkcWJhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAorZHFiYXM2MDUgdG9TY2kgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorZHFiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkcWJhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAorZHFiYXM2MDggdG9TY2kgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorZHFiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkcWJhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RxYmFzNjExIHRvU2NpIDAuICAgICAgICAgICAgICAgIC0+IDAKK2RxYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RxYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wCitkcWJhczYxNCB0b1NjaSAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitkcWJhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZHFiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCitkcWJhczYxNyB0b1NjaSAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitkcWJhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZHFiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCitkcWJhczYyMCB0b1NjaSAtMC4wMDAwMDAwICAgICAgICAtPiAtMEUtNworZHFiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgKK2RxYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RxYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKK2RxYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorZHFiYXM2MzIgdG9TY2kgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZHFiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQorZHFiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMgorZHFiYXM2MzUgdG9TY2kgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMworZHFiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNAorZHFiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQorZHFiYXM2MzggdG9TY2kgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgorZHFiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNworCitkcWJhczY0MCB0b1NjaSAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RxYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDAKK2RxYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzEKK2RxYmFzNjQzIHRvU2NpICAwLjBFKzMgICAgICAgICAgIC0+IDBFKzIKK2RxYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RxYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQKK2RxYmFzNjQ2IHRvU2NpICAwLjBFKzYgICAgICAgICAgIC0+IDBFKzUKK2RxYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYKK2RxYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcKK2RxYmFzNjQ5IHRvU2NpICAwLjBFKzkgICAgICAgICAgIC0+IDBFKzgKKworZHFiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMAorZHFiYXM2NTEgdG9TY2kgIDBFKzEgICAgICAgICAgICAgLT4gMEUrMQorZHFiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMgorZHFiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZHFiYXM2NTQgdG9TY2kgIDBFKzQgICAgICAgICAgICAgLT4gMEUrNAorZHFiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQorZHFiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNgorZHFiYXM2NTcgdG9TY2kgIDBFKzcgICAgICAgICAgICAgLT4gMEUrNworZHFiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOAorZHFiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQorCitkcWJhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2RxYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RxYmFzNjYyIHRvU2NpICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCitkcWJhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2RxYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RxYmFzNjY1IHRvU2NpICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCitkcWJhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03CitkcWJhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04CitkcWJhczY2OCB0b1NjaSAgMC4wRS04ICAgICAgICAgICAtPiAwRS05CitkcWJhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMAorCitkcWJhczY3MCB0b1NjaSAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkcWJhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAorZHFiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitkcWJhczY3MyB0b1NjaSAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkcWJhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAorZHFiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNworZHFiYXM2NzYgdG9TY2kgIDAuMDBFLTYgICAgICAgICAgLT4gMEUtOAorZHFiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZHFiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTAKK2RxYmFzNjc5IHRvU2NpICAwLjAwRS05ICAgICAgICAgIC0+IDBFLTExCisKK2RxYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwCitkcWJhczY4MSB0b1NjaSAgIDAwMDAwLiAgICAgICAgICAtPiAgMAorZHFiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDAKK2RxYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwCitkcWJhczY4NCB0b1NjaSAgICAgIDAwLiAgICAgICAgICAtPiAgMAorZHFiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDAKK2RxYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwCitkcWJhczY4NyB0b1NjaSAgLTAwMDAwLiAgICAgICAgICAtPiAtMAorZHFiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDAKK2RxYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wCisKKy0tIFNwZWNpYWxzCitkcWJhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzAxIHRvU2NpICJuYW4iICAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFOCitkcWJhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzA0IHRvU2NpICIrTmFOIiAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFOCitkcWJhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzA3IHRvU2NpICIrTkFOIiAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTgorZHFiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTgorZHFiYXM3MTAgdG9TY2kgIi1uQW4iICAgICAgICAgICAgLT4gLU5hTgorZHFiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTgorZHFiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFOCitkcWJhczcxMyB0b1NjaSAnTmFOMScgICAgICAgICAgICAtPiBOYU4xCitkcWJhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMgorZHFiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzCitkcWJhczcxNiB0b1NjaSAnTmFOMTIzNCcgICAgICAgICAtPiBOYU4xMjM0CitkcWJhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xCitkcWJhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMgorZHFiYXM3MTkgdG9TY2kgJ05hTjAxMjMnICAgICAgICAgLT4gTmFOMTIzCitkcWJhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0CitkcWJhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xCitkcWJhczcyMiB0b1NjaSAnTmFOMDAxMicgICAgICAgICAtPiBOYU4xMgorZHFiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzCitkcWJhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0CitkcWJhczcyNSB0b1NjaSAnTmFOMTIzNDU2Nzg5MDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1NicgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM3MjggdG9TY2kgJ05hTi0xMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZHFiYXM3MzAgdG9TY2kgInNOYU4iICAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzMgdG9TY2kgIlNOQU4iICAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzYgdG9TY2kgIitTbkFuIiAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RxYmFzNzM5IHRvU2NpICItc25hbiIgICAgICAgICAgIC0+IC1zTmFOCitkcWJhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTgorZHFiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RxYmFzNzQyIHRvU2NpICdzTmFOMDAwMCcgICAgICAgIC0+IHNOYU4KK2RxYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43CitkcWJhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNAorZHFiYXM3NDUgdG9TY2kgJ3NOYU4xMjM0NTY3ODkwMTIzNDU2Nzg3MjM0NTYxMjM0NTY3ODkwJyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RxYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NTAgdG9TY2kgImlOZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NTMgdG9TY2kgIitpbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NTYgdG9TY2kgIi1JbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5CitkcWJhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RxYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZHFiYXM3NTkgdG9TY2kgIi1JTkYiICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2RxYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2MSB0b1NjaSAiaW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2NCB0b1NjaSAiK0luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2NyB0b1NjaSAiK0lORklOSVRZIiAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5CitkcWJhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKK2RxYmFzNzcwIHRvU2NpICItaU5mSW5JdFkiICAgICAgIC0+IC1JbmZpbml0eQorZHFiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5CisKKy0tIFNwZWNpYWxzIGFuZCB6ZXJvcyBmb3IgdG9FbmcKK2RxYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQorZHFiYXN0Nzc0IHRvRW5nICItc05hTiIgICAgICAgICAgICAtPiAtc05hTgorZHFiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFOCitkcWJhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3NzggdG9FbmcgIitzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3ODEgdG9FbmcgIlNOQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3ODQgdG9FbmcgInNuYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3ODcgdG9FbmcgIlNuQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3OTAgdG9FbmcgInNOYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3OTMgdG9FbmcgInNOYU4iICAgICAgICAgICAgIC0+IHNOYU4KKworLS0gWmVybyB0b0VuZywgZXRjLgorZHFiYXN0ODAwIHRvRW5nIDBlKzEgICAgICAgICAgICAgIC0+ICIwLjAwRSszIiAgLS0gZG9jIGV4YW1wbGUKKworZHFiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2RxYmFzdDgwMiB0b0VuZyAwLjAwMDAwMDAwICAgICAgICAtPiAwLjAwRS02CitkcWJhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02CitkcWJhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RxYmFzdDgwNSB0b0VuZyAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCitkcWJhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkcWJhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2RxYmFzdDgwOCB0b0VuZyAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCitkcWJhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkcWJhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitkcWJhc3Q4MTEgdG9FbmcgMC4gICAgICAgICAgICAgICAgLT4gMAorZHFiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RxYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMAorZHFiYXN0ODE0IHRvRW5nIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKK2RxYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZHFiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorZHFiYXN0ODE3IHRvRW5nIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKK2RxYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZHFiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorZHFiYXN0ODIwIHRvRW5nIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wLjBFLTYKK2RxYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNgorZHFiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RxYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitkcWJhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCitkcWJhc3Q4MzIgdG9FbmcgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZHFiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMKK2RxYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMKK2RxYmFzdDgzNSB0b0VuZyAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitkcWJhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNgorZHFiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNgorZHFiYXN0ODM4IHRvRW5nICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2RxYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5CisKK2RxYmFzdDg0MCB0b0VuZyAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RxYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwCitkcWJhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMworZHFiYXN0ODQzIHRvRW5nICAwLjBFKzMgICAgICAgICAgIC0+IDAuMEUrMworZHFiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RxYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2CitkcWJhc3Q4NDYgdG9FbmcgIDAuMEUrNiAgICAgICAgICAgLT4gMC4wRSs2CitkcWJhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorZHFiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkKK2RxYmFzdDg0OSB0b0VuZyAgMC4wRSs5ICAgICAgICAgICAtPiAwLjBFKzkKKworZHFiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDAKK2RxYmFzdDg1MSB0b0VuZyAgMEUrMSAgICAgICAgICAgICAtPiAwLjAwRSszCitkcWJhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszCitkcWJhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZHFiYXN0ODU0IHRvRW5nICAwRSs0ICAgICAgICAgICAgIC0+IDAuMDBFKzYKK2RxYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYKK2RxYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2CitkcWJhc3Q4NTcgdG9FbmcgIDBFKzcgICAgICAgICAgICAgLT4gMC4wMEUrOQorZHFiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQorZHFiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworZHFiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAorZHFiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RxYmFzdDg2MiB0b0VuZyAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorZHFiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAorZHFiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RxYmFzdDg2NSB0b0VuZyAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorZHFiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNgorZHFiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYKK2RxYmFzdDg2OCB0b0VuZyAgMC4wRS04ICAgICAgICAgICAtPiAwRS05CitkcWJhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05CisKK2RxYmFzdDg3MCB0b0VuZyAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkcWJhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2RxYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKK2RxYmFzdDg3MyB0b0VuZyAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkcWJhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2RxYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYKK2RxYmFzdDg3NiB0b0VuZyAgMC4wMEUtNiAgICAgICAgICAtPiAwLjAwRS02CitkcWJhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZHFiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQorZHFiYXN0ODc5IHRvRW5nICAwLjAwRS05ICAgICAgICAgIC0+IDAuMDBFLTkKKworLS0gbG9uZyBpbnB1dCBzdHJpbmdzCitkcWJhczgwMSB0b3NjaSAnMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODAyIHRvc2NpICcwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODAzIHRvc2NpICcwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgwNCB0b3NjaSAnMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODA1IHRvc2NpICcwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODA2IHRvc2NpICcwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgwNyB0b3NjaSAnMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODA4IHRvc2NpICcwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODA5IHRvc2NpICcwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgxMCB0b3NjaSAnMDAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKKworZHFiYXM4MTEgdG9zY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4xMjM0NTY3ODkwMTIzNDU2CitkcWJhczgxMiB0b3NjaSAnMC4wMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTMgdG9zY2kgJzAuMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTQgdG9zY2kgJzAuMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgxNSB0b3NjaSAnMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTYgdG9zY2kgJzAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTcgdG9zY2kgJzAuMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTcKK2RxYmFzODE4IHRvc2NpICcwLjAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOAorZHFiYXM4MTkgdG9zY2kgJzAuMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOQorZHFiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTEwCisKK2RxYmFzODIxIHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MCcgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzM3IEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjIgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMScgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzM4IEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjMgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTInIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSszOSBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzODI0IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMycgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQwIEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjUgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNCcgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQxIEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjYgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDUnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0MiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzODI3IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQzIEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjggdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDU2NycgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQ0IEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjkgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDU2NzgnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0NSBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzCitkcWJhczkwNiB0b1NjaSAnOTllOTk5OTk5OTk5JyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkwNyB0b1NjaSAnOTk5ZTk5OTk5OTk5OScgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkwOCB0b1NjaSAnMC45ZS05OTk5OTk5OTknICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MTAgdG9TY2kgJzAuMWUxMDAwMDAwMDAwJyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MTEgdG9TY2kgJzEwZS0xMDAwMDAwMDAwJyAgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkxMiB0b1NjaSAnMC45ZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkxMyB0b1NjaSAnOTllLTk5OTk5OTk5OTknICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MTYgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTk5JyAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkxNyB0b1NjaSAnN2UxMDAwMDAwMDAwJyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMgdGhlIHNhbWUKK2RxYmFzOTE4IHRvU2NpICctOTllOTk5OTk5OTk5JyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkxOSB0b1NjaSAnLTk5OWU5OTk5OTk5OTknICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MjAgdG9TY2kgJy0wLjllLTk5OTk5OTk5OScgICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MjIgdG9TY2kgJy0wLjFlMTAwMDAwMDAwMCcgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTIzIHRvU2NpICctMTBlLTEwMDAwMDAwMDAnICAgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTI0IHRvU2NpICctMC45ZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkyNSB0b1NjaSAnLTk5ZS05OTk5OTk5OTk5JyAgICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MjggdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5OScgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MjkgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgcmVzdWx0cyBhdCBkaWZmZXJlbnQgcm91bmRpbmcgbW9kZXMKK3JvdW5kaW5nOiAgY2VpbGluZworZHFiYXM5MzAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTMxIHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIHVwCitkcWJhczkzMiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgZG93bgorZHFiYXM5MzQgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTM1IHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIGZsb29yCitkcWJhczkzNiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX3VwCitkcWJhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MzkgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkcWJhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5NDEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkcWJhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5NDMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX2V2ZW4KKworLS0gTm93IGNoZWNrIDg1NC83NTRyIHNvbWUgc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93IHRvIDAKK2RxYmVtNDAwIHRvU2NpICAxLjAwMDBFLTM4MyAgICAgLT4gMS4wMDAwRS0zODMKK2RxYmVtNDAxIHRvU2NpICAwLjFFLTYxNzIgICAgICAgIC0+IDFFLTYxNzMgICAgICAgU3Vibm9ybWFsCitkcWJlbTQwMiB0b1NjaSAgMC4xMDAwRS02MTcyICAgICAtPiAxLjAwMEUtNjE3MyAgIFN1Ym5vcm1hbAorZHFiZW00MDMgdG9TY2kgIDAuMDEwMEUtNjE3MiAgICAgLT4gMS4wMEUtNjE3NCAgICBTdWJub3JtYWwKK2RxYmVtNDA0IHRvU2NpICAwLjAwMTBFLTYxNzIgICAgIC0+IDEuMEUtNjE3NSAgICAgU3Vibm9ybWFsCitkcWJlbTQwNSB0b1NjaSAgMC4wMDAxRS02MTcyICAgICAtPiAxRS02MTc2ICAgICAgIFN1Ym5vcm1hbAorZHFiZW00MDYgdG9TY2kgIDAuMDAwMTBFLTYxNzIgICAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxYmVtNDA3IHRvU2NpICAwLjAwMDEzRS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQwOCB0b1NjaSAgMC4wMDAxNUUtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MDkgdG9TY2kgIDAuMDAwMTdFLTYxNzIgICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDEwIHRvU2NpICAwLjAwMDIzRS02MTcyICAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxMSB0b1NjaSAgMC4wMDAyNUUtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTIgdG9TY2kgIDAuMDAwMjdFLTYxNzIgICAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtNjE3MiAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTUgdG9TY2kgIDAuMDAwMTUxRS02MTcyICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtNjE3MiAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTggdG9TY2kgIDAuMDAwMjUxRS02MTcyICAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDE5IHRvU2NpICAwLjAwMDA5RS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQyMCB0b1NjaSAgMC4wMDAwNUUtNjE3MiAgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQyMSB0b1NjaSAgMC4wMDAwM0UtNjE3MiAgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQyNCB0b1NjaSAgMC4wMDAwMDNFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RxYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtNjE3MiAgIC0+IDEuMEUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQyNiB0b1NjaSAgMC4wMDEwNTBFLTYxNzIgICAtPiAxLjBFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS02MTcyICAgLT4gMS4xRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtNjE3MiAgIC0+IDEuMUUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQyOSB0b1NjaSAgMC4wMDExNTBFLTYxNzIgICAtPiAxLjJFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS02MTcyICAgLT4gMS4yRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS02MTcyICAgLT4gMS4wMEUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDMzIHRvU2NpICAwLjAxMDA1MEUtNjE3MiAgIC0+IDEuMDBFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQzNCB0b1NjaSAgMC4wMTAwNTFFLTYxNzIgICAtPiAxLjAxRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS02MTcyICAgLT4gMS4wMUUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDM2IHRvU2NpICAwLjAxMDE1MEUtNjE3MiAgIC0+IDEuMDJFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQzNyB0b1NjaSAgMC4wMTAxNTFFLTYxNzIgICAtPiAxLjAyRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcWJlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtNjE3MiAgICAtPiAxLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTYxNzIgICAgLT4gMS4wMTBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDQyIHRvU2NpICAwLjEwMTA3RS02MTcyICAgIC0+IDEuMDExRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ0MyB0b1NjaSAgMC4xMDExM0UtNjE3MiAgICAtPiAxLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTYxNzIgICAgLT4gMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDQ1IHRvU2NpICAwLjEwMTE3RS02MTcyICAgIC0+IDEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxYmVtNDUwIHRvU2NpICAxLjEwNzMwRS02MTczICAgLT4gMS4xMDdFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDUxIHRvU2NpICAxLjEwNzUwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDUyIHRvU2NpICAxLjEwNzcwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDUzIHRvU2NpICAxLjEwODMwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDU0IHRvU2NpICAxLjEwODUwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDU1IHRvU2NpICAxLjEwODcwRS02MTczICAgLT4gMS4xMDlFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbWFrZSBzdXJlIHNpZ24gT0sKK2RxYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtNjE3MiAgIC0+IC0xLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS02MTcyICAgLT4gLTEuMDEwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ1OCB0b1NjaSAgLTAuMTAxMDdFLTYxNzIgICAtPiAtMS4wMTFFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtNjE3MiAgIC0+IC0xLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS02MTcyICAgLT4gLTEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ2MSB0b1NjaSAgLTAuMTAxMTdFLTYxNzIgICAtPiAtMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gJzk5OXMnIGNhc2VzCitkcWJlbTQ2NCB0b1NjaSAgOTk5OTk5RS02MTczICAgICAgICAgLT4gOS45OTk5OUUtNjE2OCBTdWJub3JtYWwKK2RxYmVtNDY1IHRvU2NpICA5OTk5OS4wRS02MTcyICAgICAgICAtPiA5Ljk5OTkwRS02MTY4IFN1Ym5vcm1hbAorZHFiZW00NjYgdG9TY2kgIDk5OTk5LkUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE2OCAgU3Vibm9ybWFsCitkcWJlbTQ2NyB0b1NjaSAgOTk5OS45RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTY5ICBTdWJub3JtYWwKK2RxYmVtNDY4IHRvU2NpICA5OTkuOTlFLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNzAgIFN1Ym5vcm1hbAorZHFiZW00NjkgdG9TY2kgIDk5Ljk5OUUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE3MSAgU3Vibm9ybWFsCitkcWJlbTQ3MCB0b1NjaSAgOS45OTk5RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTcyICBTdWJub3JtYWwKK2RxYmVtNDcxIHRvU2NpICAwLjk5OTk5RS02MTcyICAgICAgICAtPiAxLjAwMDBFLTYxNzIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtNjE3MiAgICAgICAtPiAxLjAwMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtNjE3MiAgICAgIC0+IDEuMDBFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtNjE3MiAgICAgLT4gMS4wRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtNjE3MiAgICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtNjE3MiAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmVtNDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS02MTcyICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTYxNzIgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MKK2RxYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXMxMDA4IHRvU2NpICAxZS0wOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczEwMDkgdG9TY2kgIDFlLTAwOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXMxMDExIHRvU2NpICAxZS0wMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczEwMTIgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RxYmFzMTA0MSB0b1NjaSAgICAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNDQ0RS02MTQ0IC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0RS02MTQ0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWJhczEwNDIgdG9TY2kgICAgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjQ0NUUtNjE0NCAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNEUtNjE0NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFiYXMxMDQzIHRvU2NpICAgICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0NDZFLTYxNDQgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjRFLTYxNDQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0KK2RxYmFzMTA3NSB0b1NjaSAgIDBlKzEwMDAwICAtPiAgMEUrNjExMSBDbGFtcGVkCitkcWJhczEwNzYgdG9TY2kgICAwZS0xMDAwMCAgLT4gIDBFLTYxNzYgIENsYW1wZWQKK2RxYmFzMTA3NyB0b1NjaSAgLTBlKzEwMDAwICAtPiAtMEUrNjExMSBDbGFtcGVkCitkcWJhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTYxNzYgIENsYW1wZWQKKworLS0gZXh0cmVtZSB2YWx1ZXMgZnJvbSBuZXh0LXdpZGVyCitkcWJhczExMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMTU3Mjg2NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWJhczExMDIgdG9TY2kgLTFFLTE1NzI4NjMgLT4gLTBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHFiYXMxMTAzIHRvU2NpIC0xRS0xNTcyOTMyIC0+IC0wRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RxYmFzMTEwNCB0b1NjaSAtMCAtPiAtMAorZHFiYXMxMTA1IHRvU2NpICswIC0+ICAwCitkcWJhczExMDYgdG9TY2kgKzFFLTE1NzI5MzIgLT4gIDBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHFiYXMxMTA3IHRvU2NpICsxRS0xNTcyODYzIC0+ICAwRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RxYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSsxNTcyODY0IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2Fub25pY2FsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDYW5vbmljYWwuZGVjVGVzdAppbmRleCAzZGRmNmVhLi4wMDZkYjg1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDYW5vbmljYWwuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDYW5vbmljYWwuZGVjVGVzdApAQCAtMSwzNzIgKzEsMzcyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcUNhbm9uaWNhbC5kZWNUZXN0IC0tIHRlc3QgZGVjUXVhZCBjYW5vbmljYWwgcmVzdWx0cyAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBmaWxlIHRlc3RzIHRoYXQgY29weSBvcGVyYXRpb25zIGxlYXZlIHVuY2Fub25pY2FsIG9wZXJhbmRzDQotLS0gdW5jaGFuZ2VkLCBhbmQgdmljZSB2ZXJzYQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFVuY2Fub25pY2FsIGRlY2xldHMgYXJlOiBhYmMsIHdoZXJlOg0KLS0tICAgYT0xLDIsMw0KLS0tICAgYj02LDcsZSxmDQotLS0gICBjPWUsZg0KLQ0KLS0tIGFzc2VydCBzb21lIHN0YW5kYXJkIChjYW5vbmljYWwpIHZhbHVlczsgdGhpcyB0ZXN0cyB0aGF0IEZyb21TdHJpbmcNCi0tLSBwcm9kdWNlcyBjYW5vbmljYWwgcmVzdWx0cyAobWFueSBtb3JlIGluIGRlY2ltYWxOTikNCi1kcWNhbjAwMSBhcHBseSA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMDIgYXBwbHkgMCAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjAwMyBhcHBseSAxICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxY2FuMDA0IGFwcGx5IC0xICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFjYW4wMDUgYXBwbHkgSW5maW5pdHkgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjAwNiBhcHBseSAtSW5maW5pdHkgICAgICAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMDA3IGFwcGx5IC1OYU4gICAgICAgICAgICAgICAgICAgLT4gI2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4wMDggYXBwbHkgLXNOYU4gICAgICAgICAgICAgICAgICAtPiAjZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjAwOSBhcHBseSAgTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAxMCBhcHBseSBzTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kZWNhbjAxMSBhcHBseSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAtPiAjNmUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAxMiBhcHBseSA3LjUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZDANCi1kcWNhbjAxMyBhcHBseSA5Ljk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmYNCi0NCi0tLSBCYXNlIHRlc3RzIGZvciBjYW5vbmljYWwgZW5jb2RpbmdzIChpbmRpdmlkdWFsIG9wZXJhdG9yDQotLS0gcHJvcGFnYXRpb24gaXMgdGVzdGVkIGxhdGVyKQ0KLQ0KLS0tIEZpbml0ZXM6IGRlY2xldHMgaW4gY29lZmZpY2llbnQNCi1kcWNhbjAyMSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAyMiBjYW5vbmljYWwgICM3N2ZmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAyMyBjYW5vbmljYWwgICM3N2ZmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAyNCBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAyNSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAyNiBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAyNyBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAyOCBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAyOSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAzMCBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAzMSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjAzMiBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0NCi0tLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KLWRxY2FuMDYxIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDYyIGNhbm9uaWNhbCAgIzdjMDAwZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDYzIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDY0IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDY1IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDY2IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDY3IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDY4IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDY5IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDcwIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDcxIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRxY2FuMDgxIGNhbm9uaWNhbCAgIzdkMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDgyIGNhbm9uaWNhbCAgIzdjODAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDgzIGNhbm9uaWNhbCAgIzdjNDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDg0IGNhbm9uaWNhbCAgIzdjMjAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDg1IGNhbm9uaWNhbCAgIzdjMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDg2IGNhbm9uaWNhbCAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDg3IGNhbm9uaWNhbCAgIzdjMDQwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDg4IGNhbm9uaWNhbCAgIzdjMDIwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDg5IGNhbm9uaWNhbCAgIzdjMDEwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDkwIGNhbm9uaWNhbCAgIzdjMDA4ZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDkxIGNhbm9uaWNhbCAgIzdjMDA0ZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLQ0KLS0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KLWRxY2FuMTAxIGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMTAyIGNhbm9uaWNhbCAgIzdlMDAwZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMTAzIGNhbm9uaWNhbCAgIzdlMDAwZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMTA0IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMTA1IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMTA2IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMTA3IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMTA4IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMTA5IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMTAwIGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMTExIGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCi1kcWNhbjEyMSBjYW5vbmljYWwgICM3ZjAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEyMiBjYW5vbmljYWwgICM3ZTgwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEyMyBjYW5vbmljYWwgICM3ZTQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEyNCBjYW5vbmljYWwgICM3ZTIwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEyNSBjYW5vbmljYWwgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEyNiBjYW5vbmljYWwgICM3ZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEyNyBjYW5vbmljYWwgICM3ZTA0MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEyOCBjYW5vbmljYWwgICM3ZTAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEyOSBjYW5vbmljYWwgICM3ZTAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEzMCBjYW5vbmljYWwgICM3ZTAwOGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEzMSBjYW5vbmljYWwgICM3ZTAwNGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0NCi0tLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZHFjYW4xMzcgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xMzggY2Fub25pY2FsICAjNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xMzkgY2Fub25pY2FsICAjN2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNDAgY2Fub25pY2FsICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNDEgY2Fub25pY2FsICAjNzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNDIgY2Fub25pY2FsICAjNzgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNDMgY2Fub25pY2FsICAjNzgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNDQgY2Fub25pY2FsICAjNzgwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNDUgY2Fub25pY2FsICAjNzgwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNDYgY2Fub25pY2FsICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNDcgY2Fub25pY2FsICAjNzgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNDggY2Fub25pY2FsICAjNzgwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNDkgY2Fub25pY2FsICAjNzgwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cyAoZmlyc3QsIGxhc3QsIGFuZCBhIGZldyBvdGhlcnMpDQotZHFjYW4xNTAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNTEgY2Fub25pY2FsICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNTIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNTMgY2Fub25pY2FsICAjNzgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNTQgY2Fub25pY2FsICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNTUgY2Fub25pY2FsICAjNzgwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNTYgY2Fub25pY2FsICAjNzgwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNTcgY2Fub25pY2FsICAjNzgwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNTggY2Fub25pY2FsICAjNzgwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNTkgY2Fub25pY2FsICAjNzgwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNjAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNjEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNjIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNjMgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNjQgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNjUgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNjYgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNjcgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNjggY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNjkgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNzAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNzEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNzIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNzMgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNzQgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNzUgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNzYgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNzcgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNzggY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xNzkgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xODAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4xODEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotDQotLS0gTm93IHRoZSBvcGVyYXRvcnMgLS0gdHJ5aW5nIHRvIGNoZWNrIHBhdGhzIHRoYXQgbWlnaHQgZmFpbCB0bw0KLS0tIGNhbm9uaWNhbGl6ZSBwcm9wYWdhdGVkIG9wZXJhbmRzDQotDQotLS0tLS0gQWRkOg0KLS0tIEZpbml0ZXM6IG5ldXRyYWwgMA0KLWRxY2FuMjAyIGFkZCAgMEUrNjE0NCAjNzdmZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjIwMyBhZGQgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIDBFKzYxNDQgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotLS0gdGlueSB6ZXJvDQotZHFjYW4yMDQgYWRkICAwRS02MTc2ICM3N2ZmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkDQotZHFjYW4yMDUgYWRkICAgICAgICAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAwRS02MTc2IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkDQotLS0gdGlueSBub24gemVybw0KLWRxY2FuMjA2IGFkZCAtMUUtNjE3NiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZmZmYgICAgICAgICAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZA0KLWRxY2FuMjA3IGFkZCAgICAgICAgICAjNzdmZmNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM2ZjZmYgLTFFLTYxNzYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZA0KLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZHFjYW4yMTEgYWRkICAwICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjIxMiBhZGQgICAgICM3YzAwMGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRxY2FuMjEzIGFkZCAgMCAgIzdjNDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4yMTQgYWRkICAgICAjN2MwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kcWNhbjIxNSBhZGQgIDAgICM3ZTAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNhbjIxNiBhZGQgICAgICM3ZTAwM2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQotZHFjYW4yMTcgYWRkICAwICAjN2U1MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjYW4yMTggYWRkICAgICAjN2UwZTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQotLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KLWRxY2FuMjIwIGFkZCAgMCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4yMjEgYWRkICAgICAjNzg2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZHFjYW4yMjIgYWRkICAwICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjIyMyBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMjI0IGFkZCAgMCAgIzc4MDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4yMjUgYWRkICAgICAjNzgwMDAwMDAwMDAwZjAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjIyNiBhZGQgIDAgICM3ODAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMjI3IGFkZCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotLS0tLS0gQ2xhc3M6IFtkb2VzIG5vdCByZXR1cm4gZW5jb2RlZF0NCi0NCi0tLS0tLSBDb21wYXJlOg0KLWRxY2FuMjMxIGNvbXBhcmUgLUluZiAgIDEgICAgIC0+ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcWNhbjIzMiBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4yMzMgY29tcGFyZSAgMSAgICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxY2FuMjM0IGNvbXBhcmUgICM3YzAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmZmZmNmZiAgICAgLTEwMDAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMjM1IGNvbXBhcmUgICM3ZTAwNGZmM2ZjZmYzZmNmZjNmZmZmZmZjZmYzZmNmZiAgICAgLTEwMDAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tLS0tIENvbXBhcmVTaWc6DQotZHFjYW4yNDEgY29tcGFyZXNpZyAtSW5mICAgMSAgICAgLT4gICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxY2FuMjQyIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjI0MyBjb21wYXJlc2lnICAxICAgIC1JbmYgICAtPiAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFjYW4yNDQgY29tcGFyZXNpZyAgIzdjNDAwZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLTEwMDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotZHFjYW4yNDUgY29tcGFyZXNpZyAgIzdlMDUwZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZjNmY2ZmICAgLTEwMDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0tLS0gQ29weTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQ0KLS0tIGZpbml0ZXMNCi1kcWNhbjI1MCBjb3B5ICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmDQotZHFjYW4yNTEgY29weSAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZg0KLS0tIE5hTnMNCi1kcWNhbjI1MiBjb3B5ICAjN2MwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmDQotZHFjYW4yNTMgY29weSAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIHNOYU4NCi1kcWNhbjI1NCBjb3B5ICAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmDQotZHFjYW4yNTUgY29weSAgIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIEluZg0KLWRxY2FuMjU4IGNvcHkgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjI1OSBjb3B5ICAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwDQotDQotLS0tLS0gQ29weUFiczogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQ0KLS0tIGZpbml0ZXMNCi1kcWNhbjI2MCBjb3B5YWJzICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmDQotZHFjYW4yNjEgY29weWFicyAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZg0KLS0tIE5hTnMNCi1kcWNhbjI2MiBjb3B5YWJzICAjZmMwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmDQotZHFjYW4yNjMgY29weWFicyAgI2ZjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIHNOYU4NCi1kcWNhbjI2NCBjb3B5YWJzICAjZmUwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmDQotZHFjYW4yNjUgY29weWFicyAgI2ZlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIEluZg0KLWRxY2FuMjY4IGNvcHlhYnMgICNmODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjI2OSBjb3B5YWJzICAjZjgwMDAwMDAwMDAwMDA3MDA3MDA3MDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwNzAwNzAwNzAwMDAwMDAwMDAwDQotDQotLS0tLS0gQ29weU5lZ2F0ZTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQ0KLS0tIGZpbml0ZXMNCi1kcWNhbjI3MCBjb3B5bmVnYXRlICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmDQotZHFjYW4yNzEgY29weW5lZ2F0ZSAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZg0KLS0tIE5hTnMNCi1kcWNhbjI3MiBjb3B5bmVnYXRlICAjN2MwMDBmZjNmY2ZmZmZmZmZmZmZmZjNmY2ZmM2ZjZmYgLT4gI2ZjMDAwZmYzZmNmZmZmZmZmZmZmZmYzZmNmZjNmY2ZmDQotZHFjYW4yNzMgY29weW5lZ2F0ZSAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICNmYzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIHNOYU4NCi1kcWNhbjI3NCBjb3B5bmVnYXRlICAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gI2ZlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmDQotZHFjYW4yNzUgY29weW5lZ2F0ZSAgIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICNmZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIEluZg0KLWRxY2FuMjc4IGNvcHluZWdhdGUgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjZjgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjI3OSBjb3B5bmVnYXRlICAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAgLT4gI2Y4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwDQotDQotLS0tLS0gQ29weVNpZ246IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCi0tLSBmaW5pdGVzDQotZHFjYW4yODAgY29weXNpZ24gICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZiAtMSAtPiAjZWUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYNCi1kcWNhbjI4MSBjb3B5c2lnbiAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmICAxIC0+ICM2ZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZg0KLS0tIE5hTnMNCi1kcWNhbjI4MiBjb3B5c2lnbiAgIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0xIC0+ICNmYzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KLWRxY2FuMjgzIGNvcHlzaWduICAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgLT4gIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotLS0gc05hTg0KLWRxY2FuMjg0IGNvcHlzaWduICAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLTEgLT4gI2ZlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmDQotZHFjYW4yODUgY29weXNpZ24gICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgMSAtPiAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBJbmYNCi1kcWNhbjI4OCBjb3B5c2lnbiAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0xIC0+ICNmODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMjg5IGNvcHlzaWduICAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAgIDEgLT4gIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwDQotDQotLS0tLS0gTXVsdGlwbHk6DQotLS0gRmluaXRlczogbmV1dHJhbCAwDQotZHFjYW4zMDIgbXVsdGlwbHkgIDEgICM3N2ZmZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3N2ZmZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMzAzIG11bHRpcGx5ICAgICAjNzdmY2ZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzdmY2NmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDANCi0tLSBuZWdhdGl2ZQ0KLWRxY2FuMzA2IG11bHRpcGx5IC0xICAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjZjdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjMwNyBtdWx0aXBseSAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIC0xICAgICAgICAgICAgLT4gI2Y3ZmNjZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwDQotLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kcWNhbjMxMSBtdWx0aXBseSAgMSAgIzdjMDNmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4zMTIgbXVsdGlwbHkgICAgICM3YzAzZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMA0KLS0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRxY2FuMzEzIG11bHRpcGx5ICAxICAjN2M0MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjMxNCBtdWx0aXBseSAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwDQotLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZHFjYW4zMTUgbXVsdGlwbHkgIDEgICM3ZTAwZmZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwMGZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY2FuMzE2IG11bHRpcGx5ICAgICAjN2UwMGZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDBmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQotZHFjYW4zMTcgbXVsdGlwbHkgIDEgICM3ZTgwZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY2FuMzE4IG11bHRpcGx5ICAgICAjN2U4MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZHFjYW4zMjAgbXVsdGlwbHkgIDEgICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMzIxIG11bHRpcGx5ICAgICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZHFjYW4zMjIgbXVsdGlwbHkgIDEgICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMzIzIG11bHRpcGx5ICAgICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjMyNCBtdWx0aXBseSAgMSAgIzc4MDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4zMjUgbXVsdGlwbHkgICAgICM3ODAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMzI2IG11bHRpcGx5ICAxICAjNzgwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjMyNyBtdWx0aXBseSAgICAgIzc4MDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotLS0tLS0gUXVhbnRpemU6DQotZHFjYW40MDEgcXVhbnRpemUgICNlZTA4MGZmM2ZjZmYzZmNmZjNmZmZmZmZmZmYzZmNmZiAwICAgIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuNDAyIHF1YW50aXplICAjZWUwODBmZjNmZmZmZmZmZmZmZmNmZjNmY2ZmM2ZjZmYgMCAgICAtPiAjZWUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjQwMyBxdWFudGl6ZSAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZiAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW40MDQgcXVhbnRpemUgICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtSW5mIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuNDEwIHF1YW50aXplICAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjQxMSBxdWFudGl6ZSAgI2ZjMDAwZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZjNmY2ZmICAxICAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW40MTIgcXVhbnRpemUgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY2FuNDEzIHF1YW50aXplICAjZmUwMDBmZjNmY2ZmM2ZjZmYzZmZmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLS0tLSBTdWJ0cmFjdDoNCi0tLSBGaW5pdGVzOiBuZXV0cmFsIDANCi1kcWNhbjUwMiBzdWJ0cmFjdCAgMEUrNjE0NCAjNzdmZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjUwMyBzdWJ0cmFjdCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgMEUrNjE0NCAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSB0aW55IHplcm8NCi1kcWNhbjUwNCBzdWJ0cmFjdCAgMEUtNjE3NiAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KLWRxY2FuNTA1IHN1YnRyYWN0ICAgICAgICAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAwRS02MTc2IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkDQotLS0gdGlueSBub24gemVybw0KLWRxY2FuNTA2IHN1YnRyYWN0IC0xRS02MTc2ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZiAgICAgICAgICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkDQotZHFjYW41MDcgc3VidHJhY3QgICAgICAgICAgIzc3ZmZjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjNmY2ZmIC0xRS02MTc2IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQNCi0tLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KLWRxY2FuNTExIHN1YnRyYWN0ICAwICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjUxMiBzdWJ0cmFjdCAgICAgIzdjMDAwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQotZHFjYW41MTMgc3VidHJhY3QgIDAgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuNTE0IHN1YnRyYWN0ICAgICAjN2MwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kcWNhbjUxNSBzdWJ0cmFjdCAgMCAgIzdlMDAwZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY2FuNTE2IHN1YnRyYWN0ICAgICAjN2UwMDNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRxY2FuNTE3IHN1YnRyYWN0ICAwICAjN2U1MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjYW41MTggc3VidHJhY3QgICAgICM3ZTBlMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZHFjYW41MjAgc3VidHJhY3QgIDAgICM3ODAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuNTIxIHN1YnRyYWN0ICAgICAjNzg2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZHFjYW41MjIgc3VidHJhY3QgIDAgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuNTIzIHN1YnRyYWN0ICAgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjUyNCBzdWJ0cmFjdCAgMCAgIzc4MDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW41MjUgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDBmMDAwMDAwMDAwMDAwMDAwMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuNTI2IHN1YnRyYWN0ICAwICAjNzgwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjUyNyBzdWJ0cmFjdCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotLS0tLS0gVG9JbnRlZ3JhbDoNCi1kcWNhbjYwMSB0b2ludGVncmFseCAgIzZlMDgwZmYzZmRmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjNmUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjYwMiB0b2ludGVncmFseCAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjZWUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjYwMyB0b2ludGVncmFseCAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjYwNCB0b2ludGVncmFseCAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjYxNCB0b2ludGVncmFseCAgIzdjMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjYxNSB0b2ludGVncmFseCAgI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmICAtPiAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjYxNiB0b2ludGVncmFseCAgIzdlMDEwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjYW42MTcgdG9pbnRlZ3JhbHggICNmZTAwMGZmM2ZjZmYzZmNmZjNmZGZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHVuY2Fub25pY2FsIDM5OTksIDM5Ljk5LCAzLjk5LCAwLjM5OSwgICAgICAgICAgICAgICAgICBhbmQgbmVnYXRpdmVzDQotZHFjYW42MTggdG9pbnRlZ3JhbHggICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwY2ZmDQotZHFjYW42MTkgdG9pbnRlZ3JhbHggICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWNhbjYyMCB0b2ludGVncmFseCAgIzIyMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIEluZXhhY3QgUm91bmRlZA0KLWRxY2FuNjIxIHRvaW50ZWdyYWx4ICAjMjIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotZHFjYW42MjIgdG9pbnRlZ3JhbHggICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwY2ZmDQotZHFjYW42MjMgdG9pbnRlZ3JhbHggICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWNhbjYyNCB0b2ludGVncmFseCAgI2EyMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIEluZXhhY3QgUm91bmRlZA0KLWRxY2FuNjI1IHRvaW50ZWdyYWx4ICAjYTIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotDQotDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNhbm9uaWNhbC5kZWNUZXN0IC0tIHRlc3QgZGVjUXVhZCBjYW5vbmljYWwgcmVzdWx0cyAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZmlsZSB0ZXN0cyB0aGF0IGNvcHkgb3BlcmF0aW9ucyBsZWF2ZSB1bmNhbm9uaWNhbCBvcGVyYW5kcworLS0gdW5jaGFuZ2VkLCBhbmQgdmljZSB2ZXJzYQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gVW5jYW5vbmljYWwgZGVjbGV0cyBhcmU6IGFiYywgd2hlcmU6CistLSAgIGE9MSwyLDMKKy0tICAgYj02LDcsZSxmCistLSAgIGM9ZSxmCisKKy0tIGFzc2VydCBzb21lIHN0YW5kYXJkIChjYW5vbmljYWwpIHZhbHVlczsgdGhpcyB0ZXN0cyB0aGF0IEZyb21TdHJpbmcKKy0tIHByb2R1Y2VzIGNhbm9uaWNhbCByZXN1bHRzIChtYW55IG1vcmUgaW4gZGVjaW1hbE5OKQorZHFjYW4wMDEgYXBwbHkgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMDIgYXBwbHkgMCAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMDAzIGFwcGx5IDEgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWNhbjAwNCBhcHBseSAtMSAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFjYW4wMDUgYXBwbHkgSW5maW5pdHkgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMDA2IGFwcGx5IC1JbmZpbml0eSAgICAgICAgICAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjAwNyBhcHBseSAtTmFOICAgICAgICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4wMDggYXBwbHkgLXNOYU4gICAgICAgICAgICAgICAgICAtPiAjZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMDA5IGFwcGx5ICBOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMTAgYXBwbHkgc05hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkZWNhbjAxMSBhcHBseSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAtPiAjNmUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDEyIGFwcGx5IDcuNTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNkMAorZHFjYW4wMTMgYXBwbHkgOS45OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmCisKKy0tIEJhc2UgdGVzdHMgZm9yIGNhbm9uaWNhbCBlbmNvZGluZ3MgKGluZGl2aWR1YWwgb3BlcmF0b3IKKy0tIHByb3BhZ2F0aW9uIGlzIHRlc3RlZCBsYXRlcikKKworLS0gRmluaXRlczogZGVjbGV0cyBpbiBjb2VmZmljaWVudAorZHFjYW4wMjEgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyMiBjYW5vbmljYWwgICM3N2ZmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDIzIGNhbm9uaWNhbCAgIzc3ZmZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMjQgY2Fub25pY2FsICAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyNSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDI2IGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMjcgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyOCBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDI5IGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMzAgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAzMSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDMyIGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4wNjEgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2MiBjYW5vbmljYWwgICM3YzAwMGZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDYzIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNjQgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2NSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDY2IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNjcgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2OCBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDY5IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNzAgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA3MSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW4wODEgY2Fub25pY2FsICAjN2QwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4MiBjYW5vbmljYWwgICM3YzgwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDgzIGNhbm9uaWNhbCAgIzdjNDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wODQgY2Fub25pY2FsICAjN2MyMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4NSBjYW5vbmljYWwgICM3YzEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDg2IGNhbm9uaWNhbCAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wODcgY2Fub25pY2FsICAjN2MwNDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4OCBjYW5vbmljYWwgICM3YzAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDg5IGNhbm9uaWNhbCAgIzdjMDEwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wOTAgY2Fub25pY2FsICAjN2MwMDhmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA5MSBjYW5vbmljYWwgICM3YzAwNGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKworLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkcWNhbjEwMSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTAyIGNhbm9uaWNhbCAgIzdlMDAwZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDMgY2Fub25pY2FsICAjN2UwMDBmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwNCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTA1IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDYgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwNyBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTA4IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDkgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwMCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTExIGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW4xMjEgY2Fub25pY2FsICAjN2YwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyMiBjYW5vbmljYWwgICM3ZTgwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTIzIGNhbm9uaWNhbCAgIzdlNDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMjQgY2Fub25pY2FsICAjN2UyMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyNSBjYW5vbmljYWwgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTI2IGNhbm9uaWNhbCAgIzdlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMjcgY2Fub25pY2FsICAjN2UwNDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyOCBjYW5vbmljYWwgICM3ZTAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTI5IGNhbm9uaWNhbCAgIzdlMDEwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMzAgY2Fub25pY2FsICAjN2UwMDhmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEzMSBjYW5vbmljYWwgICM3ZTAwNGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKworLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZHFjYW4xMzcgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjEzOCBjYW5vbmljYWwgICM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTM5IGNhbm9uaWNhbCAgIzdhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDAgY2Fub25pY2FsICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0MSBjYW5vbmljYWwgICM3ODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQyIGNhbm9uaWNhbCAgIzc4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDMgY2Fub25pY2FsICAjNzgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0NCBjYW5vbmljYWwgICM3ODA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQ1IGNhbm9uaWNhbCAgIzc4MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDYgY2Fub25pY2FsICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0NyBjYW5vbmljYWwgICM3ODAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQ4IGNhbm9uaWNhbCAgIzc4MDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDkgY2Fub25pY2FsICAjNzgwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMgKGZpcnN0LCBsYXN0LCBhbmQgYSBmZXcgb3RoZXJzKQorZHFjYW4xNTAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1MSBjYW5vbmljYWwgICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTUyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTMgY2Fub25pY2FsICAjNzgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1NCBjYW5vbmljYWwgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTU1IGNhbm9uaWNhbCAgIzc4MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTYgY2Fub25pY2FsICAjNzgwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1NyBjYW5vbmljYWwgICM3ODAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTU4IGNhbm9uaWNhbCAgIzc4MDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTkgY2Fub25pY2FsICAjNzgwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTYxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2MyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTY0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjUgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2NiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTY3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjggY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2OSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTcwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3MiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTczIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzQgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3NSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTc2IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzcgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3OCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTc5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xODAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE4MSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworCistLSBOb3cgdGhlIG9wZXJhdG9ycyAtLSB0cnlpbmcgdG8gY2hlY2sgcGF0aHMgdGhhdCBtaWdodCBmYWlsIHRvCistLSBjYW5vbmljYWxpemUgcHJvcGFnYXRlZCBvcGVyYW5kcworCistLS0tLSBBZGQ6CistLSBGaW5pdGVzOiBuZXV0cmFsIDAKK2RxY2FuMjAyIGFkZCAgMEUrNjE0NCAjNzdmZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMjAzIGFkZCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgMEUrNjE0NCAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHRpbnkgemVybworZHFjYW4yMDQgYWRkICAwRS02MTc2ICM3N2ZmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkCitkcWNhbjIwNSBhZGQgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIDBFLTYxNzYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKKy0tIHRpbnkgbm9uIHplcm8KK2RxY2FuMjA2IGFkZCAtMUUtNjE3NiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZmZmYgICAgICAgICAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorZHFjYW4yMDcgYWRkICAgICAgICAgICM3N2ZmY2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzZmNmZiAtMUUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4yMTEgYWRkICAwICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMjEyIGFkZCAgICAgIzdjMDAwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMjEzIGFkZCAgMCAgIzdjNDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjIxNCBhZGQgICAgICM3YzAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkcWNhbjIxNSBhZGQgIDAgICM3ZTAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuMjE2IGFkZCAgICAgIzdlMDAzZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW4yMTcgYWRkICAwICAjN2U1MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjIxOCBhZGQgICAgICM3ZTBlMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RxY2FuMjIwIGFkZCAgMCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjIyMSBhZGQgICAgICM3ODY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cworZHFjYW4yMjIgYWRkICAwICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjIzIGFkZCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjIyNCBhZGQgIDAgICM3ODAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yMjUgYWRkICAgICAjNzgwMDAwMDAwMDAwZjAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjI2IGFkZCAgMCAgIzc4MDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjIyNyBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLS0tLSBDbGFzczogW2RvZXMgbm90IHJldHVybiBlbmNvZGVkXQorCistLS0tLSBDb21wYXJlOgorZHFjYW4yMzEgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFjYW4yMzIgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yMzMgY29tcGFyZSAgMSAgICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFjYW4yMzQgY29tcGFyZSAgIzdjMDEwZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZmZmY2ZmICAgICAtMTAwMCAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjIzNSBjb21wYXJlICAjN2UwMDRmZjNmY2ZmM2ZjZmYzZmZmZmZmY2ZmM2ZjZmYgICAgIC0xMDAwICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKworLS0tLS0gQ29tcGFyZVNpZzoKK2RxY2FuMjQxIGNvbXBhcmVzaWcgLUluZiAgIDEgICAgIC0+ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxY2FuMjQyIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjQzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxY2FuMjQ0IGNvbXBhcmVzaWcgICM3YzQwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0xMDAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW4yNDUgY29tcGFyZXNpZyAgIzdlMDUwZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZjNmY2ZmICAgLTEwMDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIENvcHk6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RxY2FuMjUwIGNvcHkgICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZiAtPiAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYKK2RxY2FuMjUxIGNvcHkgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYKKy0tIE5hTnMKK2RxY2FuMjUyIGNvcHkgICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKK2RxY2FuMjUzIGNvcHkgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RxY2FuMjU0IGNvcHkgICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtPiAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKK2RxY2FuMjU1IGNvcHkgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIEluZgorZHFjYW4yNTggY29weSAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yNTkgY29weSAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwIC0+ICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMAorCistLS0tLSBDb3B5QWJzOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdCistLSBmaW5pdGVzCitkcWNhbjI2MCBjb3B5YWJzICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmCitkcWNhbjI2MSBjb3B5YWJzICAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYgLT4gIzZlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmCistLSBOYU5zCitkcWNhbjI2MiBjb3B5YWJzICAjZmMwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI2MyBjb3B5YWJzICAjZmMwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBzTmFOCitkcWNhbjI2NCBjb3B5YWJzICAjZmUwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI2NSBjb3B5YWJzICAjZmUxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RxY2FuMjY4IGNvcHlhYnMgICNmODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjY5IGNvcHlhYnMgICNmODAwMDAwMDAwMDAwMDcwMDcwMDcwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDA3MDA3MDA3MDAwMDAwMDAwMDAKKworLS0tLS0gQ29weU5lZ2F0ZTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZHFjYW4yNzAgY29weW5lZ2F0ZSAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZgorZHFjYW4yNzEgY29weW5lZ2F0ZSAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZgorLS0gTmFOcworZHFjYW4yNzIgY29weW5lZ2F0ZSAgIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmYzZmNmZjNmY2ZmIC0+ICNmYzAwMGZmM2ZjZmZmZmZmZmZmZmZmM2ZjZmYzZmNmZgorZHFjYW4yNzMgY29weW5lZ2F0ZSAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICNmYzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTgorZHFjYW4yNzQgY29weW5lZ2F0ZSAgIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICNmZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgorZHFjYW4yNzUgY29weW5lZ2F0ZSAgIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICNmZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gSW5mCitkcWNhbjI3OCBjb3B5bmVnYXRlICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gI2Y4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjI3OSBjb3B5bmVnYXRlICAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAgLT4gI2Y4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwCisKKy0tLS0tIENvcHlTaWduOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdCistLSBmaW5pdGVzCitkcWNhbjI4MCBjb3B5c2lnbiAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0xIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZgorZHFjYW4yODEgY29weXNpZ24gICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAgMSAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYKKy0tIE5hTnMKK2RxY2FuMjgyIGNvcHlzaWduICAjN2MwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLTEgLT4gI2ZjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI4MyBjb3B5c2lnbiAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxIC0+ICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTgorZHFjYW4yODQgY29weXNpZ24gICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtMSAtPiAjZmUwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKK2RxY2FuMjg1IGNvcHlzaWduICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgLT4gIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RxY2FuMjg4IGNvcHlzaWduICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLTEgLT4gI2Y4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjI4OSBjb3B5c2lnbiAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwICAxIC0+ICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMAorCistLS0tLSBNdWx0aXBseToKKy0tIEZpbml0ZXM6IG5ldXRyYWwgMAorZHFjYW4zMDIgbXVsdGlwbHkgIDEgICM3N2ZmZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3N2ZmZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMDMgbXVsdGlwbHkgICAgICM3N2ZjZmZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3N2ZjY2ZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAorLS0gbmVnYXRpdmUKK2RxY2FuMzA2IG11bHRpcGx5IC0xICAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjZjdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzA3IG11bHRpcGx5ICAgICAjNzdmY2ZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgLTEgICAgICAgICAgICAtPiAjZjdmY2NmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkcWNhbjMxMSBtdWx0aXBseSAgMSAgIzdjMDNmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjMxMiBtdWx0aXBseSAgICAgIzdjMDNmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMzEzIG11bHRpcGx5ICAxICAjN2M0MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzE0IG11bHRpcGx5ICAgICAjN2M0MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4zMTUgbXVsdGlwbHkgIDEgICM3ZTAwZmZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwMGZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW4zMTYgbXVsdGlwbHkgICAgICM3ZTAwZmZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3YzAwMGZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW4zMTcgbXVsdGlwbHkgIDEgICM3ZTgwZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW4zMTggbXVsdGlwbHkgICAgICM3ZTgwZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCBJbnZhbGlkX29wZXJhdGlvbgorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZHFjYW4zMjAgbXVsdGlwbHkgIDEgICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjEgbXVsdGlwbHkgICAgICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cworZHFjYW4zMjIgbXVsdGlwbHkgIDEgICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjMgbXVsdGlwbHkgICAgICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjQgbXVsdGlwbHkgIDEgICM3ODAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjUgbXVsdGlwbHkgICAgICM3ODAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjYgbXVsdGlwbHkgIDEgICM3ODAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjcgbXVsdGlwbHkgICAgICM3ODAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLS0tLSBRdWFudGl6ZToKK2RxY2FuNDAxIHF1YW50aXplICAjZWUwODBmZjNmY2ZmM2ZjZmYzZmZmZmZmZmZmM2ZjZmYgMCAgICAtPiAjZWUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNDAyIHF1YW50aXplICAjZWUwODBmZjNmZmZmZmZmZmZmZmNmZjNmY2ZmM2ZjZmYgMCAgICAtPiAjZWUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNDAzIHF1YW50aXplICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5mICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuNDA0IHF1YW50aXplICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLUluZiAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuNDEwIHF1YW50aXplICAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNDExIHF1YW50aXplICAjZmMwMDBmZjNmY2ZmZmZmZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNDEyIHF1YW50aXplICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuNDEzIHF1YW50aXplICAjZmUwMDBmZjNmY2ZmM2ZjZmYzZmZmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKworLS0tLS0gU3VidHJhY3Q6CistLSBGaW5pdGVzOiBuZXV0cmFsIDAKK2RxY2FuNTAyIHN1YnRyYWN0ICAwRSs2MTQ0ICM3N2ZmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICNmN2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW41MDMgc3VidHJhY3QgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIDBFKzYxNDQgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSB0aW55IHplcm8KK2RxY2FuNTA0IHN1YnRyYWN0ICAwRS02MTc2ICM3N2ZmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICNmN2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkCitkcWNhbjUwNSBzdWJ0cmFjdCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgMEUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorLS0gdGlueSBub24gemVybworZHFjYW41MDYgc3VidHJhY3QgLTFFLTYxNzYgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmICAgICAgICAgIC0+ICNmN2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKK2RxY2FuNTA3IHN1YnRyYWN0ICAgICAgICAgICM3N2ZmY2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzZmNmZiAtMUUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW41MTEgc3VidHJhY3QgIDAgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW41MTIgc3VidHJhY3QgICAgICM3YzAwMGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkcWNhbjUxMyBzdWJ0cmFjdCAgMCAgIzdjNDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjUxNCBzdWJ0cmFjdCAgICAgIzdjMDIwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RxY2FuNTE1IHN1YnRyYWN0ICAwICAjN2UwMDBmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjUxNiBzdWJ0cmFjdCAgICAgIzdlMDAzZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW41MTcgc3VidHJhY3QgIDAgICM3ZTUwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuNTE4IHN1YnRyYWN0ICAgICAjN2UwZTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCistLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkcWNhbjUyMCBzdWJ0cmFjdCAgMCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyMSBzdWJ0cmFjdCAgICAgIzc4NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkcWNhbjUyMiBzdWJ0cmFjdCAgMCAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyMyBzdWJ0cmFjdCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyNCBzdWJ0cmFjdCAgMCAgIzc4MDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyNSBzdWJ0cmFjdCAgICAgIzc4MDAwMDAwMDAwMGYwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyNiBzdWJ0cmFjdCAgMCAgIzc4MDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyNyBzdWJ0cmFjdCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKy0tLS0tIFRvSW50ZWdyYWw6CitkcWNhbjYwMSB0b2ludGVncmFseCAgIzZlMDgwZmYzZmRmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjNmUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNjAyIHRvaW50ZWdyYWx4ICAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYgIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW42MDMgdG9pbnRlZ3JhbHggICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjYwNCB0b2ludGVncmFseCAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuNjE0IHRvaW50ZWdyYWx4ICAjN2MxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW42MTUgdG9pbnRlZ3JhbHggICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjYxNiB0b2ludGVncmFseCAgIzdlMDEwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjYxNyB0b2ludGVncmFseCAgI2ZlMDAwZmYzZmNmZjNmY2ZmM2ZkZmYzZmNmZjNmY2ZmICAtPiAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCistLSB1bmNhbm9uaWNhbCAzOTk5LCAzOS45OSwgMy45OSwgMC4zOTksICAgICAgICAgICAgICAgICAgYW5kIG5lZ2F0aXZlcworZHFjYW42MTggdG9pbnRlZ3JhbHggICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwY2ZmCitkcWNhbjYxOSB0b2ludGVncmFseCAgIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAgIEluZXhhY3QgUm91bmRlZAorZHFjYW42MjAgdG9pbnRlZ3JhbHggICMyMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxY2FuNjIxIHRvaW50ZWdyYWx4ICAjMjIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitkcWNhbjYyMiB0b2ludGVncmFseCAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBjZmYKK2RxY2FuNjIzIHRvaW50ZWdyYWx4ICAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCAgSW5leGFjdCBSb3VuZGVkCitkcWNhbjYyNCB0b2ludGVncmFseCAgI2EyMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIEluZXhhY3QgUm91bmRlZAorZHFjYW42MjUgdG9pbnRlZ3JhbHggICNhMjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKKworCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNsYXNzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDbGFzcy5kZWNUZXN0CmluZGV4IGYzNDE5MzMuLmQ3ZTE5YjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNsYXNzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2xhc3MuZGVjVGVzdApAQCAtMSw3NyArMSw3NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFDbGFzcy5kZWNUZXN0IC0tIGRlY1F1YWQgQ2xhc3Mgb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFtOZXcgMjAwNi4xMS4yN10NCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZHFjbGEwMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KLWRxY2xhMDAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCi1kcWNsYTAwMyAgY2xhc3MgICAgMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQotZHFjbGEwMDQgIGNsYXNzICAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsDQotZHFjbGEwMDUgIGNsYXNzICAwLjFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsDQotZHFjbGEwMDYgIGNsYXNzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAgICAtPiArU3Vibm9ybWFsDQotZHFjbGEwMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtPiArTm9ybWFsDQotZHFjbGEwMDggIGNsYXNzICAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZHFjbGEwMDkgIGNsYXNzICAgMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZHFjbGEwMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZHFjbGEwMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZHFjbGEwMTMgIGNsYXNzICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZHFjbGEwMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZHFjbGEwMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZHFjbGEwMTYgIGNsYXNzICAgMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZHFjbGEwMTcgIGNsYXNzICAgMUUrNjE0NCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQotZHFjbGEwMTggIGNsYXNzICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAtPiArTm9ybWFsDQotZHFjbGEwMTkgIGNsYXNzICAgSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiArSW5maW5pdHkNCi0NCi1kcWNsYTAyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQotZHFjbGEwMjIgIGNsYXNzICAgLTAuMDAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KLWRxY2xhMDIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCi1kcWNsYTAyNCAgY2xhc3MgICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwNCi1kcWNsYTAyNSAgY2xhc3MgIC0wLjFFLTYxNDMgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwNCi1kcWNsYTAyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAgIC0+IC1TdWJub3JtYWwNCi1kcWNsYTAyNyAgY2xhc3MgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgIC0+IC1Ob3JtYWwNCi1kcWNsYTAyOCAgY2xhc3MgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kcWNsYTAyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kcWNsYTAzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kcWNsYTAzMiAgY2xhc3MgIC0xRS0xICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kcWNsYTAzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kcWNsYTAzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kcWNsYTAzNSAgY2xhc3MgIC0xMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kcWNsYTAzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kcWNsYTAzNyAgY2xhc3MgIC0xRSs2MTQ0ICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCi1kcWNsYTA2MTQgIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAtPiAtTm9ybWFsDQotZHFjbGEwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi0NCi1kcWNsYTA0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTg0KLWRxY2xhMDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFODQotZHFjbGEwNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4NCi1kcWNsYTA0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi1kcWNsYTA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi1kcWNsYTA0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi0NCi0NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ2xhc3MuZGVjVGVzdCAtLSBkZWNRdWFkIENsYXNzIG9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gW05ldyAyMDA2LjExLjI3XQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkcWNsYTAwMSAgY2xhc3MgICAgMCAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitkcWNsYTAwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitkcWNsYTAwMyAgY2xhc3MgICAgMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitkcWNsYTAwNCAgY2xhc3MgICAgMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2RxY2xhMDA1ICBjbGFzcyAgMC4xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorZHFjbGEwMDYgIGNsYXNzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAgICAtPiArU3Vibm9ybWFsCitkcWNsYTAwNyAgY2xhc3MgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDA4ICBjbGFzcyAgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMDkgIGNsYXNzICAgMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxMCAgY2xhc3MgICAxRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMTMgIGNsYXNzICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxNCAgY2xhc3MgICAyLjUwICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMTYgIGNsYXNzICAgMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxNyAgY2xhc3MgICAxRSs2MTQ0ICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDE4ICBjbGFzcyAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgLT4gK05vcm1hbAorZHFjbGEwMTkgIGNsYXNzICAgSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiArSW5maW5pdHkKKworZHFjbGEwMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworZHFjbGEwMjIgIGNsYXNzICAgLTAuMDAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworZHFjbGEwMjMgIGNsYXNzICAgLTBFKzUgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworZHFjbGEwMjQgIGNsYXNzICAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitkcWNsYTAyNSAgY2xhc3MgIC0wLjFFLTYxNDMgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2RxY2xhMDI2ICBjbGFzcyAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgICAgLT4gLVN1Ym5vcm1hbAorZHFjbGEwMjcgIGNsYXNzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAtPiAtTm9ybWFsCitkcWNsYTAyOCAgY2xhc3MgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDI5ICBjbGFzcyAgLTFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTAzMiAgY2xhc3MgIC0xRS0xICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDMzICBjbGFzcyAgLTEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTAzNSAgY2xhc3MgIC0xMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDM2ICBjbGFzcyAgLTFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMzcgIGNsYXNzICAtMUUrNjE0NCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTA2MTQgIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAtPiAtTm9ybWFsCitkcWNsYTAzOSAgY2xhc3MgIC1JbmYgICAgICAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorCitkcWNsYTA0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgorZHFjbGEwNDIgIGNsYXNzICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2RxY2xhMDQzICBjbGFzcyAgK05hTjEyMzQ1ICAgICAgICAgICAgICAgICAgLT4gTmFOCitkcWNsYTA0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2RxY2xhMDQ1ICBjbGFzcyAgLXNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgorZHFjbGEwNDYgIGNsYXNzICArc05hTjEyMzQ1ICAgICAgICAgICAgICAgICAtPiBzTmFOCisKKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlLmRlY1Rlc3QKaW5kZXggYTYxN2FkMS4uYjdiNWVlNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmUuZGVjVGVzdApAQCAtMSw3NTMgKzEsNzUzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcUNvbXBhcmUuZGVjVGVzdCAtLSBkZWNRdWFkIGNvbXBhcmlzb24gdGhhdCBhbGxvd3MgcXVpZXQgTmFOcyAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksDQotLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90DQotLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4NCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZHFjb20wMDEgY29tcGFyZSAgLTIgIC0yICAtPiAwDQotZHFjb20wMDIgY29tcGFyZSAgLTIgIC0xICAtPiAtMQ0KLWRxY29tMDAzIGNvbXBhcmUgIC0yICAgMCAgLT4gLTENCi1kcWNvbTAwNCBjb21wYXJlICAtMiAgIDEgIC0+IC0xDQotZHFjb20wMDUgY29tcGFyZSAgLTIgICAyICAtPiAtMQ0KLWRxY29tMDA2IGNvbXBhcmUgIC0xICAtMiAgLT4gMQ0KLWRxY29tMDA3IGNvbXBhcmUgIC0xICAtMSAgLT4gMA0KLWRxY29tMDA4IGNvbXBhcmUgIC0xICAgMCAgLT4gLTENCi1kcWNvbTAwOSBjb21wYXJlICAtMSAgIDEgIC0+IC0xDQotZHFjb20wMTAgY29tcGFyZSAgLTEgICAyICAtPiAtMQ0KLWRxY29tMDExIGNvbXBhcmUgICAwICAtMiAgLT4gMQ0KLWRxY29tMDEyIGNvbXBhcmUgICAwICAtMSAgLT4gMQ0KLWRxY29tMDEzIGNvbXBhcmUgICAwICAgMCAgLT4gMA0KLWRxY29tMDE0IGNvbXBhcmUgICAwICAgMSAgLT4gLTENCi1kcWNvbTAxNSBjb21wYXJlICAgMCAgIDIgIC0+IC0xDQotZHFjb20wMTYgY29tcGFyZSAgIDEgIC0yICAtPiAxDQotZHFjb20wMTcgY29tcGFyZSAgIDEgIC0xICAtPiAxDQotZHFjb20wMTggY29tcGFyZSAgIDEgICAwICAtPiAxDQotZHFjb20wMTkgY29tcGFyZSAgIDEgICAxICAtPiAwDQotZHFjb20wMjAgY29tcGFyZSAgIDEgICAyICAtPiAtMQ0KLWRxY29tMDIxIGNvbXBhcmUgICAyICAtMiAgLT4gMQ0KLWRxY29tMDIyIGNvbXBhcmUgICAyICAtMSAgLT4gMQ0KLWRxY29tMDIzIGNvbXBhcmUgICAyICAgMCAgLT4gMQ0KLWRxY29tMDI1IGNvbXBhcmUgICAyICAgMSAgLT4gMQ0KLWRxY29tMDI2IGNvbXBhcmUgICAyICAgMiAgLT4gMA0KLQ0KLWRxY29tMDMxIGNvbXBhcmUgIC0yMCAgLTIwICAtPiAwDQotZHFjb20wMzIgY29tcGFyZSAgLTIwICAtMTAgIC0+IC0xDQotZHFjb20wMzMgY29tcGFyZSAgLTIwICAgMDAgIC0+IC0xDQotZHFjb20wMzQgY29tcGFyZSAgLTIwICAgMTAgIC0+IC0xDQotZHFjb20wMzUgY29tcGFyZSAgLTIwICAgMjAgIC0+IC0xDQotZHFjb20wMzYgY29tcGFyZSAgLTEwICAtMjAgIC0+IDENCi1kcWNvbTAzNyBjb21wYXJlICAtMTAgIC0xMCAgLT4gMA0KLWRxY29tMDM4IGNvbXBhcmUgIC0xMCAgIDAwICAtPiAtMQ0KLWRxY29tMDM5IGNvbXBhcmUgIC0xMCAgIDEwICAtPiAtMQ0KLWRxY29tMDQwIGNvbXBhcmUgIC0xMCAgIDIwICAtPiAtMQ0KLWRxY29tMDQxIGNvbXBhcmUgICAwMCAgLTIwICAtPiAxDQotZHFjb20wNDIgY29tcGFyZSAgIDAwICAtMTAgIC0+IDENCi1kcWNvbTA0MyBjb21wYXJlICAgMDAgICAwMCAgLT4gMA0KLWRxY29tMDQ0IGNvbXBhcmUgICAwMCAgIDEwICAtPiAtMQ0KLWRxY29tMDQ1IGNvbXBhcmUgICAwMCAgIDIwICAtPiAtMQ0KLWRxY29tMDQ2IGNvbXBhcmUgICAxMCAgLTIwICAtPiAxDQotZHFjb20wNDcgY29tcGFyZSAgIDEwICAtMTAgIC0+IDENCi1kcWNvbTA0OCBjb21wYXJlICAgMTAgICAwMCAgLT4gMQ0KLWRxY29tMDQ5IGNvbXBhcmUgICAxMCAgIDEwICAtPiAwDQotZHFjb20wNTAgY29tcGFyZSAgIDEwICAgMjAgIC0+IC0xDQotZHFjb20wNTEgY29tcGFyZSAgIDIwICAtMjAgIC0+IDENCi1kcWNvbTA1MiBjb21wYXJlICAgMjAgIC0xMCAgLT4gMQ0KLWRxY29tMDUzIGNvbXBhcmUgICAyMCAgIDAwICAtPiAxDQotZHFjb20wNTUgY29tcGFyZSAgIDIwICAgMTAgIC0+IDENCi1kcWNvbTA1NiBjb21wYXJlICAgMjAgICAyMCAgLT4gMA0KLQ0KLWRxY29tMDYxIGNvbXBhcmUgIC0yLjAgIC0yLjAgIC0+IDANCi1kcWNvbTA2MiBjb21wYXJlICAtMi4wICAtMS4wICAtPiAtMQ0KLWRxY29tMDYzIGNvbXBhcmUgIC0yLjAgICAwLjAgIC0+IC0xDQotZHFjb20wNjQgY29tcGFyZSAgLTIuMCAgIDEuMCAgLT4gLTENCi1kcWNvbTA2NSBjb21wYXJlICAtMi4wICAgMi4wICAtPiAtMQ0KLWRxY29tMDY2IGNvbXBhcmUgIC0xLjAgIC0yLjAgIC0+IDENCi1kcWNvbTA2NyBjb21wYXJlICAtMS4wICAtMS4wICAtPiAwDQotZHFjb20wNjggY29tcGFyZSAgLTEuMCAgIDAuMCAgLT4gLTENCi1kcWNvbTA2OSBjb21wYXJlICAtMS4wICAgMS4wICAtPiAtMQ0KLWRxY29tMDcwIGNvbXBhcmUgIC0xLjAgICAyLjAgIC0+IC0xDQotZHFjb20wNzEgY29tcGFyZSAgIDAuMCAgLTIuMCAgLT4gMQ0KLWRxY29tMDcyIGNvbXBhcmUgICAwLjAgIC0xLjAgIC0+IDENCi1kcWNvbTA3MyBjb21wYXJlICAgMC4wICAgMC4wICAtPiAwDQotZHFjb20wNzQgY29tcGFyZSAgIDAuMCAgIDEuMCAgLT4gLTENCi1kcWNvbTA3NSBjb21wYXJlICAgMC4wICAgMi4wICAtPiAtMQ0KLWRxY29tMDc2IGNvbXBhcmUgICAxLjAgIC0yLjAgIC0+IDENCi1kcWNvbTA3NyBjb21wYXJlICAgMS4wICAtMS4wICAtPiAxDQotZHFjb20wNzggY29tcGFyZSAgIDEuMCAgIDAuMCAgLT4gMQ0KLWRxY29tMDc5IGNvbXBhcmUgICAxLjAgICAxLjAgIC0+IDANCi1kcWNvbTA4MCBjb21wYXJlICAgMS4wICAgMi4wICAtPiAtMQ0KLWRxY29tMDgxIGNvbXBhcmUgICAyLjAgIC0yLjAgIC0+IDENCi1kcWNvbTA4MiBjb21wYXJlICAgMi4wICAtMS4wICAtPiAxDQotZHFjb20wODMgY29tcGFyZSAgIDIuMCAgIDAuMCAgLT4gMQ0KLWRxY29tMDg1IGNvbXBhcmUgICAyLjAgICAxLjAgIC0+IDENCi1kcWNvbTA4NiBjb21wYXJlICAgMi4wICAgMi4wICAtPiAwDQotDQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQotZHFjb20wOTAgY29tcGFyZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IDANCi1kcWNvbTA5MSBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTENCi1kcWNvbTA5MiBjb21wYXJlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQ0KLWRxY29tMDkzIGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwDQotDQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzDQotZHFjb20xMDAgY29tcGFyZSAgIDcuMCAgICA3LjAgICAgLT4gMA0KLWRxY29tMTAxIGNvbXBhcmUgICA3LjAgICAgNyAgICAgIC0+IDANCi1kcWNvbTEwMiBjb21wYXJlICAgNyAgICAgIDcuMCAgICAtPiAwDQotZHFjb20xMDMgY29tcGFyZSAgIDdFKzAgICA3LjAgICAgLT4gMA0KLWRxY29tMTA0IGNvbXBhcmUgICA3MEUtMSAgNy4wICAgIC0+IDANCi1kcWNvbTEwNSBjb21wYXJlICAgMC43RSsxIDcgICAgICAtPiAwDQotZHFjb20xMDYgY29tcGFyZSAgIDcwRS0xICA3ICAgICAgLT4gMA0KLWRxY29tMTA3IGNvbXBhcmUgICA3LjAgICAgN0UrMCAgIC0+IDANCi1kcWNvbTEwOCBjb21wYXJlICAgNy4wICAgIDcwRS0xICAtPiAwDQotZHFjb20xMDkgY29tcGFyZSAgIDcgICAgICAwLjdFKzEgLT4gMA0KLWRxY29tMTEwIGNvbXBhcmUgICA3ICAgICAgNzBFLTEgIC0+IDANCi0NCi1kcWNvbTEyMCBjb21wYXJlICAgOC4wICAgIDcuMCAgICAtPiAxDQotZHFjb20xMjEgY29tcGFyZSAgIDguMCAgICA3ICAgICAgLT4gMQ0KLWRxY29tMTIyIGNvbXBhcmUgICA4ICAgICAgNy4wICAgIC0+IDENCi1kcWNvbTEyMyBjb21wYXJlICAgOEUrMCAgIDcuMCAgICAtPiAxDQotZHFjb20xMjQgY29tcGFyZSAgIDgwRS0xICA3LjAgICAgLT4gMQ0KLWRxY29tMTI1IGNvbXBhcmUgICAwLjhFKzEgNyAgICAgIC0+IDENCi1kcWNvbTEyNiBjb21wYXJlICAgODBFLTEgIDcgICAgICAtPiAxDQotZHFjb20xMjcgY29tcGFyZSAgIDguMCAgICA3RSswICAgLT4gMQ0KLWRxY29tMTI4IGNvbXBhcmUgICA4LjAgICAgNzBFLTEgIC0+IDENCi1kcWNvbTEyOSBjb21wYXJlICAgOCAgICAgIDAuN0UrMSAgLT4gMQ0KLWRxY29tMTMwIGNvbXBhcmUgICA4ICAgICAgNzBFLTEgIC0+IDENCi0NCi1kcWNvbTE0MCBjb21wYXJlICAgOC4wICAgIDkuMCAgICAtPiAtMQ0KLWRxY29tMTQxIGNvbXBhcmUgICA4LjAgICAgOSAgICAgIC0+IC0xDQotZHFjb20xNDIgY29tcGFyZSAgIDggICAgICA5LjAgICAgLT4gLTENCi1kcWNvbTE0MyBjb21wYXJlICAgOEUrMCAgIDkuMCAgICAtPiAtMQ0KLWRxY29tMTQ0IGNvbXBhcmUgICA4MEUtMSAgOS4wICAgIC0+IC0xDQotZHFjb20xNDUgY29tcGFyZSAgIDAuOEUrMSA5ICAgICAgLT4gLTENCi1kcWNvbTE0NiBjb21wYXJlICAgODBFLTEgIDkgICAgICAtPiAtMQ0KLWRxY29tMTQ3IGNvbXBhcmUgICA4LjAgICAgOUUrMCAgIC0+IC0xDQotZHFjb20xNDggY29tcGFyZSAgIDguMCAgICA5MEUtMSAgLT4gLTENCi1kcWNvbTE0OSBjb21wYXJlICAgOCAgICAgIDAuOUUrMSAtPiAtMQ0KLWRxY29tMTUwIGNvbXBhcmUgICA4ICAgICAgOTBFLTEgIC0+IC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLg0KLWRxY29tMjAwIGNvbXBhcmUgIC03LjAgICAgNy4wICAgIC0+IC0xDQotZHFjb20yMDEgY29tcGFyZSAgLTcuMCAgICA3ICAgICAgLT4gLTENCi1kcWNvbTIwMiBjb21wYXJlICAtNyAgICAgIDcuMCAgICAtPiAtMQ0KLWRxY29tMjAzIGNvbXBhcmUgIC03RSswICAgNy4wICAgIC0+IC0xDQotZHFjb20yMDQgY29tcGFyZSAgLTcwRS0xICA3LjAgICAgLT4gLTENCi1kcWNvbTIwNSBjb21wYXJlICAtMC43RSsxIDcgICAgICAtPiAtMQ0KLWRxY29tMjA2IGNvbXBhcmUgIC03MEUtMSAgNyAgICAgIC0+IC0xDQotZHFjb20yMDcgY29tcGFyZSAgLTcuMCAgICA3RSswICAgLT4gLTENCi1kcWNvbTIwOCBjb21wYXJlICAtNy4wICAgIDcwRS0xICAtPiAtMQ0KLWRxY29tMjA5IGNvbXBhcmUgIC03ICAgICAgMC43RSsxIC0+IC0xDQotZHFjb20yMTAgY29tcGFyZSAgLTcgICAgICA3MEUtMSAgLT4gLTENCi0NCi1kcWNvbTIyMCBjb21wYXJlICAtOC4wICAgIDcuMCAgICAtPiAtMQ0KLWRxY29tMjIxIGNvbXBhcmUgIC04LjAgICAgNyAgICAgIC0+IC0xDQotZHFjb20yMjIgY29tcGFyZSAgLTggICAgICA3LjAgICAgLT4gLTENCi1kcWNvbTIyMyBjb21wYXJlICAtOEUrMCAgIDcuMCAgICAtPiAtMQ0KLWRxY29tMjI0IGNvbXBhcmUgIC04MEUtMSAgNy4wICAgIC0+IC0xDQotZHFjb20yMjUgY29tcGFyZSAgLTAuOEUrMSA3ICAgICAgLT4gLTENCi1kcWNvbTIyNiBjb21wYXJlICAtODBFLTEgIDcgICAgICAtPiAtMQ0KLWRxY29tMjI3IGNvbXBhcmUgIC04LjAgICAgN0UrMCAgIC0+IC0xDQotZHFjb20yMjggY29tcGFyZSAgLTguMCAgICA3MEUtMSAgLT4gLTENCi1kcWNvbTIyOSBjb21wYXJlICAtOCAgICAgIDAuN0UrMSAtPiAtMQ0KLWRxY29tMjMwIGNvbXBhcmUgIC04ICAgICAgNzBFLTEgIC0+IC0xDQotDQotZHFjb20yNDAgY29tcGFyZSAgLTguMCAgICA5LjAgICAgLT4gLTENCi1kcWNvbTI0MSBjb21wYXJlICAtOC4wICAgIDkgICAgICAtPiAtMQ0KLWRxY29tMjQyIGNvbXBhcmUgIC04ICAgICAgOS4wICAgIC0+IC0xDQotZHFjb20yNDMgY29tcGFyZSAgLThFKzAgICA5LjAgICAgLT4gLTENCi1kcWNvbTI0NCBjb21wYXJlICAtODBFLTEgIDkuMCAgICAtPiAtMQ0KLWRxY29tMjQ1IGNvbXBhcmUgIC0wLjhFKzEgOSAgICAgIC0+IC0xDQotZHFjb20yNDYgY29tcGFyZSAgLTgwRS0xICA5ICAgICAgLT4gLTENCi1kcWNvbTI0NyBjb21wYXJlICAtOC4wICAgIDlFKzAgICAtPiAtMQ0KLWRxY29tMjQ4IGNvbXBhcmUgIC04LjAgICAgOTBFLTEgIC0+IC0xDQotZHFjb20yNDkgY29tcGFyZSAgLTggICAgICAwLjlFKzEgLT4gLTENCi1kcWNvbTI1MCBjb21wYXJlICAtOCAgICAgIDkwRS0xICAtPiAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4NCi1kcWNvbTMwMCBjb21wYXJlICAgNy4wICAgIC03LjAgICAgLT4gMQ0KLWRxY29tMzAxIGNvbXBhcmUgICA3LjAgICAgLTcgICAgICAtPiAxDQotZHFjb20zMDIgY29tcGFyZSAgIDcgICAgICAtNy4wICAgIC0+IDENCi1kcWNvbTMwMyBjb21wYXJlICAgN0UrMCAgIC03LjAgICAgLT4gMQ0KLWRxY29tMzA0IGNvbXBhcmUgICA3MEUtMSAgLTcuMCAgICAtPiAxDQotZHFjb20zMDUgY29tcGFyZSAgIC43RSsxICAtNyAgICAgIC0+IDENCi1kcWNvbTMwNiBjb21wYXJlICAgNzBFLTEgIC03ICAgICAgLT4gMQ0KLWRxY29tMzA3IGNvbXBhcmUgICA3LjAgICAgLTdFKzAgICAtPiAxDQotZHFjb20zMDggY29tcGFyZSAgIDcuMCAgICAtNzBFLTEgIC0+IDENCi1kcWNvbTMwOSBjb21wYXJlICAgNyAgICAgIC0uN0UrMSAgLT4gMQ0KLWRxY29tMzEwIGNvbXBhcmUgICA3ICAgICAgLTcwRS0xICAtPiAxDQotDQotZHFjb20zMjAgY29tcGFyZSAgIDguMCAgICAtNy4wICAgIC0+IDENCi1kcWNvbTMyMSBjb21wYXJlICAgOC4wICAgIC03ICAgICAgLT4gMQ0KLWRxY29tMzIyIGNvbXBhcmUgICA4ICAgICAgLTcuMCAgICAtPiAxDQotZHFjb20zMjMgY29tcGFyZSAgIDhFKzAgICAtNy4wICAgIC0+IDENCi1kcWNvbTMyNCBjb21wYXJlICAgODBFLTEgIC03LjAgICAgLT4gMQ0KLWRxY29tMzI1IGNvbXBhcmUgICAuOEUrMSAgLTcgICAgICAtPiAxDQotZHFjb20zMjYgY29tcGFyZSAgIDgwRS0xICAtNyAgICAgIC0+IDENCi1kcWNvbTMyNyBjb21wYXJlICAgOC4wICAgIC03RSswICAgLT4gMQ0KLWRxY29tMzI4IGNvbXBhcmUgICA4LjAgICAgLTcwRS0xICAtPiAxDQotZHFjb20zMjkgY29tcGFyZSAgIDggICAgICAtLjdFKzEgIC0+IDENCi1kcWNvbTMzMCBjb21wYXJlICAgOCAgICAgIC03MEUtMSAgLT4gMQ0KLQ0KLWRxY29tMzQwIGNvbXBhcmUgICA4LjAgICAgLTkuMCAgICAtPiAxDQotZHFjb20zNDEgY29tcGFyZSAgIDguMCAgICAtOSAgICAgIC0+IDENCi1kcWNvbTM0MiBjb21wYXJlICAgOCAgICAgIC05LjAgICAgLT4gMQ0KLWRxY29tMzQzIGNvbXBhcmUgICA4RSswICAgLTkuMCAgICAtPiAxDQotZHFjb20zNDQgY29tcGFyZSAgIDgwRS0xICAtOS4wICAgIC0+IDENCi1kcWNvbTM0NSBjb21wYXJlICAgLjhFKzEgIC05ICAgICAgLT4gMQ0KLWRxY29tMzQ2IGNvbXBhcmUgICA4MEUtMSAgLTkgICAgICAtPiAxDQotZHFjb20zNDcgY29tcGFyZSAgIDguMCAgICAtOUUrMCAgIC0+IDENCi1kcWNvbTM0OCBjb21wYXJlICAgOC4wICAgIC05MEUtMSAgLT4gMQ0KLWRxY29tMzQ5IGNvbXBhcmUgICA4ICAgICAgLS45RSsxICAtPiAxDQotZHFjb20zNTAgY29tcGFyZSAgIDggICAgICAtOTBFLTEgIC0+IDENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uDQotZHFjb200MDAgY29tcGFyZSAgIC03LjAgICAgLTcuMCAgICAtPiAwDQotZHFjb200MDEgY29tcGFyZSAgIC03LjAgICAgLTcgICAgICAtPiAwDQotZHFjb200MDIgY29tcGFyZSAgIC03ICAgICAgLTcuMCAgICAtPiAwDQotZHFjb200MDMgY29tcGFyZSAgIC03RSswICAgLTcuMCAgICAtPiAwDQotZHFjb200MDQgY29tcGFyZSAgIC03MEUtMSAgLTcuMCAgICAtPiAwDQotZHFjb200MDUgY29tcGFyZSAgIC0uN0UrMSAgLTcgICAgICAtPiAwDQotZHFjb200MDYgY29tcGFyZSAgIC03MEUtMSAgLTcgICAgICAtPiAwDQotZHFjb200MDcgY29tcGFyZSAgIC03LjAgICAgLTdFKzAgICAtPiAwDQotZHFjb200MDggY29tcGFyZSAgIC03LjAgICAgLTcwRS0xICAtPiAwDQotZHFjb200MDkgY29tcGFyZSAgIC03ICAgICAgLS43RSsxICAtPiAwDQotZHFjb200MTAgY29tcGFyZSAgIC03ICAgICAgLTcwRS0xICAtPiAwDQotDQotZHFjb200MjAgY29tcGFyZSAgIC04LjAgICAgLTcuMCAgICAtPiAtMQ0KLWRxY29tNDIxIGNvbXBhcmUgICAtOC4wICAgIC03ICAgICAgLT4gLTENCi1kcWNvbTQyMiBjb21wYXJlICAgLTggICAgICAtNy4wICAgIC0+IC0xDQotZHFjb200MjMgY29tcGFyZSAgIC04RSswICAgLTcuMCAgICAtPiAtMQ0KLWRxY29tNDI0IGNvbXBhcmUgICAtODBFLTEgIC03LjAgICAgLT4gLTENCi1kcWNvbTQyNSBjb21wYXJlICAgLS44RSsxICAtNyAgICAgIC0+IC0xDQotZHFjb200MjYgY29tcGFyZSAgIC04MEUtMSAgLTcgICAgICAtPiAtMQ0KLWRxY29tNDI3IGNvbXBhcmUgICAtOC4wICAgIC03RSswICAgLT4gLTENCi1kcWNvbTQyOCBjb21wYXJlICAgLTguMCAgICAtNzBFLTEgIC0+IC0xDQotZHFjb200MjkgY29tcGFyZSAgIC04ICAgICAgLS43RSsxICAtPiAtMQ0KLWRxY29tNDMwIGNvbXBhcmUgICAtOCAgICAgIC03MEUtMSAgLT4gLTENCi0NCi1kcWNvbTQ0MCBjb21wYXJlICAgLTguMCAgICAtOS4wICAgIC0+IDENCi1kcWNvbTQ0MSBjb21wYXJlICAgLTguMCAgICAtOSAgICAgIC0+IDENCi1kcWNvbTQ0MiBjb21wYXJlICAgLTggICAgICAtOS4wICAgIC0+IDENCi1kcWNvbTQ0MyBjb21wYXJlICAgLThFKzAgICAtOS4wICAgIC0+IDENCi1kcWNvbTQ0NCBjb21wYXJlICAgLTgwRS0xICAtOS4wICAgIC0+IDENCi1kcWNvbTQ0NSBjb21wYXJlICAgLS44RSsxICAtOSAgICAgIC0+IDENCi1kcWNvbTQ0NiBjb21wYXJlICAgLTgwRS0xICAtOSAgICAgIC0+IDENCi1kcWNvbTQ0NyBjb21wYXJlICAgLTguMCAgICAtOUUrMCAgIC0+IDENCi1kcWNvbTQ0OCBjb21wYXJlICAgLTguMCAgICAtOTBFLTEgIC0+IDENCi1kcWNvbTQ0OSBjb21wYXJlICAgLTggICAgICAtLjlFKzEgIC0+IDENCi1kcWNvbTQ1MCBjb21wYXJlICAgLTggICAgICAtOTBFLTEgIC0+IDENCi0NCi0tLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4NCi1kcWNvbTQ1MSBjb21wYXJlICAgICAgMS4wICAgICAgIDAuMSAgLT4gMQ0KLWRxY29tNDUyIGNvbXBhcmUgICAgICAwLjEgICAgICAgMS4wICAtPiAtMQ0KLWRxY29tNDUzIGNvbXBhcmUgICAgIDEwLjAgICAgICAgMC4xICAtPiAxDQotZHFjb200NTQgY29tcGFyZSAgICAgIDAuMSAgICAgIDEwLjAgIC0+IC0xDQotZHFjb200NTUgY29tcGFyZSAgICAgIDEwMCAgICAgICAxLjAgIC0+IDENCi1kcWNvbTQ1NiBjb21wYXJlICAgICAgMS4wICAgICAgIDEwMCAgLT4gLTENCi1kcWNvbTQ1NyBjb21wYXJlICAgICAxMDAwICAgICAgMTAuMCAgLT4gMQ0KLWRxY29tNDU4IGNvbXBhcmUgICAgIDEwLjAgICAgICAxMDAwICAtPiAtMQ0KLWRxY29tNDU5IGNvbXBhcmUgICAgMTAwMDAgICAgIDEwMC4wICAtPiAxDQotZHFjb200NjAgY29tcGFyZSAgICAxMDAuMCAgICAgMTAwMDAgIC0+IC0xDQotZHFjb200NjEgY29tcGFyZSAgIDEwMDAwMCAgICAxMDAwLjAgIC0+IDENCi1kcWNvbTQ2MiBjb21wYXJlICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gLTENCi1kcWNvbTQ2MyBjb21wYXJlICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMQ0KLWRxY29tNDY0IGNvbXBhcmUgIDEwMDAwLjAgICAxMDAwMDAwICAtPiAtMQ0KLQ0KLS0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQ0KLWRxY29tNDczIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCi1kcWNvbTQ3NCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCi1kcWNvbTQ3NSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KLWRxY29tNDc2IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCi1kcWNvbTQ3NyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCi1kcWNvbTQ3OCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KLWRxY29tNDc5IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCi1kcWNvbTQ4MCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCi1kcWNvbTQ4MSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KLWRxY29tNDgyIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCi1kcWNvbTQ4MyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCi1kcWNvbTQ4NyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRSs4OSAtPiAwDQotZHFjb200ODggY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwRS04OSAtPiAwDQotZHFjb200ODkgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDBFKzg5IC0+IDANCi1kcWNvbTQ5MCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRS04OSAtPiAwDQotZHFjb200OTEgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwRSs4OSAtPiAwDQotZHFjb200OTIgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDBFLTg5IC0+IDANCi1kcWNvbTQ5MyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRSs4OSAtPiAwDQotZHFjb200OTQgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwRS04OSAtPiAwDQotZHFjb200OTUgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDBFKzg5IC0+IDANCi1kcWNvbTQ5NiBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRS04OSAtPiAwDQotZHFjb200OTcgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwDQotDQotLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbA0KLWRxY29tNTAwIGNvbXBhcmUgICAgMSAgICAgMUUtMTUgICAgLT4gMQ0KLWRxY29tNTAxIGNvbXBhcmUgICAgMSAgICAgMUUtMTQgICAgLT4gMQ0KLWRxY29tNTAyIGNvbXBhcmUgICAgMSAgICAgMUUtMTMgICAgLT4gMQ0KLWRxY29tNTAzIGNvbXBhcmUgICAgMSAgICAgMUUtMTIgICAgLT4gMQ0KLWRxY29tNTA0IGNvbXBhcmUgICAgMSAgICAgMUUtMTEgICAgLT4gMQ0KLWRxY29tNTA1IGNvbXBhcmUgICAgMSAgICAgMUUtMTAgICAgLT4gMQ0KLWRxY29tNTA2IGNvbXBhcmUgICAgMSAgICAgMUUtOSAgICAgLT4gMQ0KLWRxY29tNTA3IGNvbXBhcmUgICAgMSAgICAgMUUtOCAgICAgLT4gMQ0KLWRxY29tNTA4IGNvbXBhcmUgICAgMSAgICAgMUUtNyAgICAgLT4gMQ0KLWRxY29tNTA5IGNvbXBhcmUgICAgMSAgICAgMUUtNiAgICAgLT4gMQ0KLWRxY29tNTEwIGNvbXBhcmUgICAgMSAgICAgMUUtNSAgICAgLT4gMQ0KLWRxY29tNTExIGNvbXBhcmUgICAgMSAgICAgMUUtNCAgICAgLT4gMQ0KLWRxY29tNTEyIGNvbXBhcmUgICAgMSAgICAgMUUtMyAgICAgLT4gMQ0KLWRxY29tNTEzIGNvbXBhcmUgICAgMSAgICAgMUUtMiAgICAgLT4gMQ0KLWRxY29tNTE0IGNvbXBhcmUgICAgMSAgICAgMUUtMSAgICAgLT4gMQ0KLWRxY29tNTE1IGNvbXBhcmUgICAgMSAgICAgMUUtMCAgICAgLT4gMA0KLWRxY29tNTE2IGNvbXBhcmUgICAgMSAgICAgMUUrMSAgICAgLT4gLTENCi1kcWNvbTUxNyBjb21wYXJlICAgIDEgICAgIDFFKzIgICAgIC0+IC0xDQotZHFjb201MTggY29tcGFyZSAgICAxICAgICAxRSszICAgICAtPiAtMQ0KLWRxY29tNTE5IGNvbXBhcmUgICAgMSAgICAgMUUrNCAgICAgLT4gLTENCi1kcWNvbTUyMSBjb21wYXJlICAgIDEgICAgIDFFKzUgICAgIC0+IC0xDQotZHFjb201MjIgY29tcGFyZSAgICAxICAgICAxRSs2ICAgICAtPiAtMQ0KLWRxY29tNTIzIGNvbXBhcmUgICAgMSAgICAgMUUrNyAgICAgLT4gLTENCi1kcWNvbTUyNCBjb21wYXJlICAgIDEgICAgIDFFKzggICAgIC0+IC0xDQotZHFjb201MjUgY29tcGFyZSAgICAxICAgICAxRSs5ICAgICAtPiAtMQ0KLWRxY29tNTI2IGNvbXBhcmUgICAgMSAgICAgMUUrMTAgICAgLT4gLTENCi1kcWNvbTUyNyBjb21wYXJlICAgIDEgICAgIDFFKzExICAgIC0+IC0xDQotZHFjb201MjggY29tcGFyZSAgICAxICAgICAxRSsxMiAgICAtPiAtMQ0KLWRxY29tNTI5IGNvbXBhcmUgICAgMSAgICAgMUUrMTMgICAgLT4gLTENCi1kcWNvbTUzMCBjb21wYXJlICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xDQotZHFjb201MzEgY29tcGFyZSAgICAxICAgICAxRSsxNSAgICAtPiAtMQ0KLS0tIExSIHN3YXANCi1kcWNvbTU0MCBjb21wYXJlICAgIDFFLTE1ICAxICAgICAgIC0+IC0xDQotZHFjb201NDEgY29tcGFyZSAgICAxRS0xNCAgMSAgICAgICAtPiAtMQ0KLWRxY29tNTQyIGNvbXBhcmUgICAgMUUtMTMgIDEgICAgICAgLT4gLTENCi1kcWNvbTU0MyBjb21wYXJlICAgIDFFLTEyICAxICAgICAgIC0+IC0xDQotZHFjb201NDQgY29tcGFyZSAgICAxRS0xMSAgMSAgICAgICAtPiAtMQ0KLWRxY29tNTQ1IGNvbXBhcmUgICAgMUUtMTAgIDEgICAgICAgLT4gLTENCi1kcWNvbTU0NiBjb21wYXJlICAgIDFFLTkgICAxICAgICAgIC0+IC0xDQotZHFjb201NDcgY29tcGFyZSAgICAxRS04ICAgMSAgICAgICAtPiAtMQ0KLWRxY29tNTQ4IGNvbXBhcmUgICAgMUUtNyAgIDEgICAgICAgLT4gLTENCi1kcWNvbTU0OSBjb21wYXJlICAgIDFFLTYgICAxICAgICAgIC0+IC0xDQotZHFjb201NTAgY29tcGFyZSAgICAxRS01ICAgMSAgICAgICAtPiAtMQ0KLWRxY29tNTUxIGNvbXBhcmUgICAgMUUtNCAgIDEgICAgICAgLT4gLTENCi1kcWNvbTU1MiBjb21wYXJlICAgIDFFLTMgICAxICAgICAgIC0+IC0xDQotZHFjb201NTMgY29tcGFyZSAgICAxRS0yICAgMSAgICAgICAtPiAtMQ0KLWRxY29tNTU0IGNvbXBhcmUgICAgMUUtMSAgIDEgICAgICAgLT4gLTENCi1kcWNvbTU1NSBjb21wYXJlICAgIDFFLTAgICAxICAgICAgIC0+ICAwDQotZHFjb201NTYgY29tcGFyZSAgICAxRSsxICAgMSAgICAgICAtPiAgMQ0KLWRxY29tNTU3IGNvbXBhcmUgICAgMUUrMiAgIDEgICAgICAgLT4gIDENCi1kcWNvbTU1OCBjb21wYXJlICAgIDFFKzMgICAxICAgICAgIC0+ICAxDQotZHFjb201NTkgY29tcGFyZSAgICAxRSs0ICAgMSAgICAgICAtPiAgMQ0KLWRxY29tNTYxIGNvbXBhcmUgICAgMUUrNSAgIDEgICAgICAgLT4gIDENCi1kcWNvbTU2MiBjb21wYXJlICAgIDFFKzYgICAxICAgICAgIC0+ICAxDQotZHFjb201NjMgY29tcGFyZSAgICAxRSs3ICAgMSAgICAgICAtPiAgMQ0KLWRxY29tNTY0IGNvbXBhcmUgICAgMUUrOCAgIDEgICAgICAgLT4gIDENCi1kcWNvbTU2NSBjb21wYXJlICAgIDFFKzkgICAxICAgICAgIC0+ICAxDQotZHFjb201NjYgY29tcGFyZSAgICAxRSsxMCAgMSAgICAgICAtPiAgMQ0KLWRxY29tNTY3IGNvbXBhcmUgICAgMUUrMTEgIDEgICAgICAgLT4gIDENCi1kcWNvbTU2OCBjb21wYXJlICAgIDFFKzEyICAxICAgICAgIC0+ICAxDQotZHFjb201NjkgY29tcGFyZSAgICAxRSsxMyAgMSAgICAgICAtPiAgMQ0KLWRxY29tNTcwIGNvbXBhcmUgICAgMUUrMTQgIDEgICAgICAgLT4gIDENCi1kcWNvbTU3MSBjb21wYXJlICAgIDFFKzE1ICAxICAgICAgIC0+ICAxDQotLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5DQotZHFjb201ODAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDENCi1kcWNvbTU4MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQ0KLWRxY29tNTgyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxDQotZHFjb201ODMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDENCi1kcWNvbTU4NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQ0KLWRxY29tNTg1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxDQotZHFjb201ODYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDENCi1kcWNvbTU4NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQ0KLWRxY29tNTg4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxDQotZHFjb201ODkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xDQotZHFjb201OTAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xDQotZHFjb201OTEgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xDQotZHFjb201OTIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xDQotZHFjb201OTMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xDQotZHFjb201OTQgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xDQotZHFjb201OTUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xDQotZHFjb201OTYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xDQotZHFjb201OTcgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xDQotZHFjb201OTggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xDQotZHFjb201OTkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xDQotDQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCi1kcWNvbTYwMCBjb21wYXJlICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb202MDEgY29tcGFyZSAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY29tNjAyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kcWNvbTYwMyBjb21wYXJlICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb202MDQgY29tcGFyZSAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY29tNjA1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTENCi1kcWNvbTYwNiBjb21wYXJlICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb202MDcgY29tcGFyZSAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY29tNjA4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTENCi1kcWNvbTYwOSBjb21wYXJlICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xDQotZHFjb202MTAgY29tcGFyZSAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQ0KLWRxY29tNjExIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDENCi1kcWNvbTYxMiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxDQotZHFjb202MTMgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQ0KLWRxY29tNjE0IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDENCi1kcWNvbTYxNSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxDQotZHFjb202MTYgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQ0KLWRxY29tNjE3IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDENCi1kcWNvbTYxOCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxDQotZHFjb202MTkgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQ0KLWRxY29tNjIwIGNvbXBhcmUgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kcWNvbTYyMSBjb21wYXJlICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb202MjIgY29tcGFyZSAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY29tNjIzIGNvbXBhcmUgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kcWNvbTYyNCBjb21wYXJlICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb202MjUgY29tcGFyZSAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY29tNjI2IGNvbXBhcmUgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDENCi1kcWNvbTYyNyBjb21wYXJlICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb202MjggY29tcGFyZSAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQ0KLWRxY29tNjI5IGNvbXBhcmUgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDENCi1kcWNvbTYzMCBjb21wYXJlICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xDQotZHFjb202MzEgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQ0KLWRxY29tNjMyIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTENCi1kcWNvbTYzMyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xDQotZHFjb202MzQgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQ0KLWRxY29tNjM1IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTENCi1kcWNvbTYzNiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xDQotZHFjb202MzcgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQ0KLWRxY29tNjM4IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTENCi1kcWNvbTYzOSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kcWNvbTY0MCBjb21wYXJlICAgMCAgICAgMCAgIC0+IDANCi1kcWNvbTY0MSBjb21wYXJlICAgMCAgICAtMCAgIC0+IDANCi1kcWNvbTY0MiBjb21wYXJlICAgMCAgICAtMC4wIC0+IDANCi1kcWNvbTY0MyBjb21wYXJlICAgMCAgICAgMC4wIC0+IDANCi1kcWNvbTY0NCBjb21wYXJlICAtMCAgICAgMCAgIC0+IDANCi1kcWNvbTY0NSBjb21wYXJlICAtMCAgICAtMCAgIC0+IDANCi1kcWNvbTY0NiBjb21wYXJlICAtMCAgICAtMC4wIC0+IDANCi1kcWNvbTY0NyBjb21wYXJlICAtMCAgICAgMC4wIC0+IDANCi1kcWNvbTY0OCBjb21wYXJlICAgMC4wICAgMCAgIC0+IDANCi1kcWNvbTY0OSBjb21wYXJlICAgMC4wICAtMCAgIC0+IDANCi1kcWNvbTY1MCBjb21wYXJlICAgMC4wICAtMC4wIC0+IDANCi1kcWNvbTY1MSBjb21wYXJlICAgMC4wICAgMC4wIC0+IDANCi1kcWNvbTY1MiBjb21wYXJlICAtMC4wICAgMCAgIC0+IDANCi1kcWNvbTY1MyBjb21wYXJlICAtMC4wICAtMCAgIC0+IDANCi1kcWNvbTY1NCBjb21wYXJlICAtMC4wICAtMC4wIC0+IDANCi1kcWNvbTY1NSBjb21wYXJlICAtMC4wICAgMC4wIC0+IDANCi0NCi1kcWNvbTY1NiBjb21wYXJlICAtMEUxICAgMC4wIC0+IDANCi1kcWNvbTY1NyBjb21wYXJlICAtMEUyICAgMC4wIC0+IDANCi1kcWNvbTY1OCBjb21wYXJlICAgMEUxICAgMC4wIC0+IDANCi1kcWNvbTY1OSBjb21wYXJlICAgMEUyICAgMC4wIC0+IDANCi1kcWNvbTY2MCBjb21wYXJlICAtMEUxICAgMCAgIC0+IDANCi1kcWNvbTY2MSBjb21wYXJlICAtMEUyICAgMCAgIC0+IDANCi1kcWNvbTY2MiBjb21wYXJlICAgMEUxICAgMCAgIC0+IDANCi1kcWNvbTY2MyBjb21wYXJlICAgMEUyICAgMCAgIC0+IDANCi1kcWNvbTY2NCBjb21wYXJlICAtMEUxICAtMEUxIC0+IDANCi1kcWNvbTY2NSBjb21wYXJlICAtMEUyICAtMEUxIC0+IDANCi1kcWNvbTY2NiBjb21wYXJlICAgMEUxICAtMEUxIC0+IDANCi1kcWNvbTY2NyBjb21wYXJlICAgMEUyICAtMEUxIC0+IDANCi1kcWNvbTY2OCBjb21wYXJlICAtMEUxICAtMEUyIC0+IDANCi1kcWNvbTY2OSBjb21wYXJlICAtMEUyICAtMEUyIC0+IDANCi1kcWNvbTY3MCBjb21wYXJlICAgMEUxICAtMEUyIC0+IDANCi1kcWNvbTY3MSBjb21wYXJlICAgMEUyICAtMEUyIC0+IDANCi1kcWNvbTY3MiBjb21wYXJlICAtMEUxICAgMEUxIC0+IDANCi1kcWNvbTY3MyBjb21wYXJlICAtMEUyICAgMEUxIC0+IDANCi1kcWNvbTY3NCBjb21wYXJlICAgMEUxICAgMEUxIC0+IDANCi1kcWNvbTY3NSBjb21wYXJlICAgMEUyICAgMEUxIC0+IDANCi1kcWNvbTY3NiBjb21wYXJlICAtMEUxICAgMEUyIC0+IDANCi1kcWNvbTY3NyBjb21wYXJlICAtMEUyICAgMEUyIC0+IDANCi1kcWNvbTY3OCBjb21wYXJlICAgMEUxICAgMEUyIC0+IDANCi1kcWNvbTY3OSBjb21wYXJlICAgMEUyICAgMEUyIC0+IDANCi0NCi0tLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQotZHFjb202ODAgY29tcGFyZSAgIDEyICAgIDEyICAgICAgICAgICAtPiAwDQotZHFjb202ODEgY29tcGFyZSAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwDQotZHFjb202ODIgY29tcGFyZSAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwDQotZHFjb202ODMgY29tcGFyZSAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAwDQotZHFjb202ODQgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwDQotZHFjb202ODUgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwDQotZHFjb202ODYgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAwDQotZHFjb202ODcgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwDQotZHFjb202ODggY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwDQotZHFjb202ODkgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAwDQotZHFjb202OTAgY29tcGFyZSAgIDEyICAgICAgICAgICAgICAxMiAtPiAwDQotZHFjb202OTEgY29tcGFyZSAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwDQotZHFjb202OTIgY29tcGFyZSAgIDEyLjAwICAgICAgICAgICAxMiAtPiAwDQotZHFjb202OTMgY29tcGFyZSAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwDQotZHFjb202OTQgY29tcGFyZSAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwDQotZHFjb202OTUgY29tcGFyZSAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAwDQotZHFjb202OTYgY29tcGFyZSAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwDQotZHFjb202OTcgY29tcGFyZSAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwDQotZHFjb202OTggY29tcGFyZSAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAwDQotZHFjb202OTkgY29tcGFyZSAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwDQotDQotLS0gZmlyc3QsIHNlY29uZCwgJiBsYXN0IGRpZ2l0DQotZHFjb203MDAgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NSAtPiAxDQotZHFjb203MDEgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwDQotZHFjb203MDIgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NyAtPiAtMQ0KLWRxY29tNzAzIGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDAyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQ0KLWRxY29tNzA0IGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMA0KLWRxY29tNzA1IGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDIyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTENCi1kcWNvbTcwNiBjb21wYXJlICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMDM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDENCi1kcWNvbTcwNyBjb21wYXJlICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDANCi1kcWNvbTcwOCBjb21wYXJlICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IC0xDQotDQotLS0gbWlzY2VsbGFuZW91cw0KLWRxY29tNzIxIGNvbXBhcmUgMTIzNDU2NzgwMDAgMSAtPiAxDQotZHFjb203MjIgY29tcGFyZSAxIDEyMzQ1Njc4MDAwIC0+IC0xDQotZHFjb203MjMgY29tcGFyZSAxMjM0NTY3ODAwICAxIC0+IDENCi1kcWNvbTcyNCBjb21wYXJlIDEgMTIzNDU2NzgwMCAgLT4gLTENCi1kcWNvbTcyNSBjb21wYXJlIDEyMzQ1Njc4OTAgIDEgLT4gMQ0KLWRxY29tNzI2IGNvbXBhcmUgMSAxMjM0NTY3ODkwICAtPiAtMQ0KLWRxY29tNzI3IGNvbXBhcmUgMTIzNDU2Nzg5MSAgMSAtPiAxDQotZHFjb203MjggY29tcGFyZSAxIDEyMzQ1Njc4OTEgIC0+IC0xDQotZHFjb203MjkgY29tcGFyZSAxMjM0NTY3ODkwMSAxIC0+IDENCi1kcWNvbTczMCBjb21wYXJlIDEgMTIzNDU2Nzg5MDEgLT4gLTENCi1kcWNvbTczMSBjb21wYXJlIDEyMzQ1Njc4OTYgIDEgLT4gMQ0KLWRxY29tNzMyIGNvbXBhcmUgMSAxMjM0NTY3ODk2ICAtPiAtMQ0KLQ0KLS0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uDQotZHFjb203NDAgY29tcGFyZSAgMSAgMC45OTk5OTk5ICAtPiAxDQotZHFjb203NDEgY29tcGFyZSAgMSAgMC45OTk5OTkgICAtPiAxDQotZHFjb203NDIgY29tcGFyZSAgMSAgMC45OTk5OSAgICAtPiAxDQotZHFjb203NDMgY29tcGFyZSAgMSAgMS4wMDAwICAgICAtPiAwDQotZHFjb203NDQgY29tcGFyZSAgMSAgMS4wMDAwMSAgICAtPiAtMQ0KLWRxY29tNzQ1IGNvbXBhcmUgIDEgIDEuMDAwMDAxICAgLT4gLTENCi1kcWNvbTc0NiBjb21wYXJlICAxICAxLjAwMDAwMDEgIC0+IC0xDQotZHFjb203NTAgY29tcGFyZSAgMC45OTk5OTk5ICAxICAtPiAtMQ0KLWRxY29tNzUxIGNvbXBhcmUgIDAuOTk5OTk5ICAgMSAgLT4gLTENCi1kcWNvbTc1MiBjb21wYXJlICAwLjk5OTk5ICAgIDEgIC0+IC0xDQotZHFjb203NTMgY29tcGFyZSAgMS4wMDAwICAgICAxICAtPiAwDQotZHFjb203NTQgY29tcGFyZSAgMS4wMDAwMSAgICAxICAtPiAxDQotZHFjb203NTUgY29tcGFyZSAgMS4wMDAwMDEgICAxICAtPiAxDQotZHFjb203NTYgY29tcGFyZSAgMS4wMDAwMDAxICAxICAtPiAxDQotDQotLS0gU3BlY2lhbHMNCi1kcWNvbTc4MCBjb21wYXJlICBJbmYgIC1JbmYgICAtPiAgMQ0KLWRxY29tNzgxIGNvbXBhcmUgIEluZiAgLTEwMDAgIC0+ICAxDQotZHFjb203ODIgY29tcGFyZSAgSW5mICAtMSAgICAgLT4gIDENCi1kcWNvbTc4MyBjb21wYXJlICBJbmYgIC0wICAgICAtPiAgMQ0KLWRxY29tNzg0IGNvbXBhcmUgIEluZiAgIDAgICAgIC0+ICAxDQotZHFjb203ODUgY29tcGFyZSAgSW5mICAgMSAgICAgLT4gIDENCi1kcWNvbTc4NiBjb21wYXJlICBJbmYgICAxMDAwICAtPiAgMQ0KLWRxY29tNzg3IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwDQotZHFjb203ODggY29tcGFyZSAtMTAwMCAgSW5mICAgLT4gLTENCi1kcWNvbTc4OSBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQ0KLWRxY29tNzkwIGNvbXBhcmUgLTEgICAgIEluZiAgIC0+IC0xDQotZHFjb203OTEgY29tcGFyZSAtMCAgICAgSW5mICAgLT4gLTENCi1kcWNvbTc5MiBjb21wYXJlICAwICAgICBJbmYgICAtPiAtMQ0KLWRxY29tNzkzIGNvbXBhcmUgIDEgICAgIEluZiAgIC0+IC0xDQotZHFjb203OTQgY29tcGFyZSAgMTAwMCAgSW5mICAgLT4gLTENCi1kcWNvbTc5NSBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMA0KLQ0KLWRxY29tODAwIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwDQotZHFjb204MDEgY29tcGFyZSAtSW5mICAtMTAwMCAgLT4gLTENCi1kcWNvbTgwMiBjb21wYXJlIC1JbmYgIC0xICAgICAtPiAtMQ0KLWRxY29tODAzIGNvbXBhcmUgLUluZiAgLTAgICAgIC0+IC0xDQotZHFjb204MDQgY29tcGFyZSAtSW5mICAgMCAgICAgLT4gLTENCi1kcWNvbTgwNSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAtMQ0KLWRxY29tODA2IGNvbXBhcmUgLUluZiAgIDEwMDAgIC0+IC0xDQotZHFjb204MDcgY29tcGFyZSAtSW5mICAgSW5mICAgLT4gLTENCi1kcWNvbTgwOCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMA0KLWRxY29tODA5IGNvbXBhcmUgLTEwMDAgLUluZiAgIC0+ICAxDQotZHFjb204MTAgY29tcGFyZSAtMSAgICAtSW5mICAgLT4gIDENCi1kcWNvbTgxMSBjb21wYXJlIC0wICAgIC1JbmYgICAtPiAgMQ0KLWRxY29tODEyIGNvbXBhcmUgIDAgICAgLUluZiAgIC0+ICAxDQotZHFjb204MTMgY29tcGFyZSAgMSAgICAtSW5mICAgLT4gIDENCi1kcWNvbTgxNCBjb21wYXJlICAxMDAwIC1JbmYgICAtPiAgMQ0KLWRxY29tODE1IGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxDQotDQotZHFjb204MjEgY29tcGFyZSAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRxY29tODIyIGNvbXBhcmUgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kcWNvbTgyMyBjb21wYXJlICBOYU4gLTEgICAgICAtPiAgTmFODQotZHFjb204MjQgY29tcGFyZSAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRxY29tODI1IGNvbXBhcmUgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kcWNvbTgyNiBjb21wYXJlICBOYU4gIDEgICAgICAtPiAgTmFODQotZHFjb204MjcgY29tcGFyZSAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRxY29tODI4IGNvbXBhcmUgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kcWNvbTgyOSBjb21wYXJlICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFjb204MzAgY29tcGFyZSAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRxY29tODMxIGNvbXBhcmUgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcWNvbTgzMiBjb21wYXJlIC0xICAgIE5hTiAgICAtPiAgTmFODQotZHFjb204MzMgY29tcGFyZSAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxY29tODM0IGNvbXBhcmUgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kcWNvbTgzNSBjb21wYXJlICAxICAgIE5hTiAgICAtPiAgTmFODQotZHFjb204MzYgY29tcGFyZSAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxY29tODM3IGNvbXBhcmUgIEluZiAgTmFOICAgIC0+ICBOYU4NCi1kcWNvbTgzOCBjb21wYXJlIC1OYU4gLU5hTiAgICAtPiAtTmFODQotZHFjb204MzkgY29tcGFyZSArTmFOIC1OYU4gICAgLT4gIE5hTg0KLWRxY29tODQwIGNvbXBhcmUgLU5hTiArTmFOICAgIC0+IC1OYU4NCi0NCi1kcWNvbTg0MSBjb21wYXJlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODQyIGNvbXBhcmUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NDMgY29tcGFyZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg0NCBjb21wYXJlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODQ1IGNvbXBhcmUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NDYgY29tcGFyZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg0NyBjb21wYXJlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODQ4IGNvbXBhcmUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NDkgY29tcGFyZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg1MCBjb21wYXJlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODUxIGNvbXBhcmUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NTIgY29tcGFyZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg1MyBjb21wYXJlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODU0IGNvbXBhcmUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NTUgY29tcGFyZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg1NiBjb21wYXJlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODU3IGNvbXBhcmUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NTggY29tcGFyZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg1OSBjb21wYXJlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcWNvbTg2MCBjb21wYXJlICBOYU45IC1JbmYgICAtPiAgTmFOOQ0KLWRxY29tODYxIGNvbXBhcmUgIE5hTjggIDk5OSAgIC0+ICBOYU44DQotZHFjb204NjIgY29tcGFyZSAgTmFONzcgSW5mICAgLT4gIE5hTjc3DQotZHFjb204NjMgY29tcGFyZSAtTmFONjcgTmFONSAgLT4gLU5hTjY3DQotZHFjb204NjQgY29tcGFyZSAtSW5mICAtTmFONCAgLT4gLU5hTjQNCi1kcWNvbTg2NSBjb21wYXJlIC05OTkgIC1OYU4zMyAtPiAtTmFOMzMNCi1kcWNvbTg2NiBjb21wYXJlICBJbmYgICBOYU4yICAtPiAgTmFOMg0KLWRxY29tODY3IGNvbXBhcmUgLU5hTjQxIC1OYU40MiAtPiAtTmFONDENCi1kcWNvbTg2OCBjb21wYXJlICtOYU40MSAtTmFONDIgLT4gIE5hTjQxDQotZHFjb204NjkgY29tcGFyZSAtTmFONDEgK05hTjQyIC0+IC1OYU40MQ0KLWRxY29tODcwIGNvbXBhcmUgK05hTjQxICtOYU40MiAtPiAgTmFONDENCi0NCi1kcWNvbTg3MSBjb21wYXJlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg3MiBjb21wYXJlICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg3MyBjb21wYXJlICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg3NCBjb21wYXJlICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg3NSBjb21wYXJlICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg3NiBjb21wYXJlIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg3NyBjb21wYXJlICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg3OCBjb21wYXJlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg3OSBjb21wYXJlICBOYU4gICAtc05hTjg5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSB3aWRlIHJhbmdlDQotZHFjb204ODAgY29tcGFyZSArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xDQotZHFjb204ODEgY29tcGFyZSA5RSs2MTQ0ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQotZHFjb204ODIgY29tcGFyZSArMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+ICAxDQotZHFjb204ODMgY29tcGFyZSA5RS02MTQzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xDQotZHFjb204ODUgY29tcGFyZSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xDQotZHFjb204ODYgY29tcGFyZSA5RSs2MTQ0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQotZHFjb204ODcgY29tcGFyZSAtMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+IC0xDQotZHFjb204ODggY29tcGFyZSA5RS02MTQzIC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxDQotDQotLS0gc2lnbnMNCi1kcWNvbTkwMSBjb21wYXJlICAxZSs3NyAgMWUrMTEgLT4gIDENCi1kcWNvbTkwMiBjb21wYXJlICAxZSs3NyAtMWUrMTEgLT4gIDENCi1kcWNvbTkwMyBjb21wYXJlIC0xZSs3NyAgMWUrMTEgLT4gLTENCi1kcWNvbTkwNCBjb21wYXJlIC0xZSs3NyAtMWUrMTEgLT4gLTENCi1kcWNvbTkwNSBjb21wYXJlICAxZS03NyAgMWUtMTEgLT4gLTENCi1kcWNvbTkwNiBjb21wYXJlICAxZS03NyAtMWUtMTEgLT4gIDENCi1kcWNvbTkwNyBjb21wYXJlIC0xZS03NyAgMWUtMTEgLT4gLTENCi1kcWNvbTkwOCBjb21wYXJlIC0xZS03NyAtMWUtMTEgLT4gIDENCi0NCi0tLSBmdWxsIGFsaWdubWVudCByYW5nZSwgYm90aCB3YXlzDQotZHFjb21wMTAwMSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDANCi1kcWNvbXAxMDAyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMA0KLWRxY29tcDEwMDMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAwDQotZHFjb21wMTAwNCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIC0+IDANCi1kcWNvbXAxMDA1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgLT4gMA0KLWRxY29tcDEwMDYgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwDQotZHFjb21wMTAwNyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIC0+IDANCi1kcWNvbXAxMDA4IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgLT4gMA0KLWRxY29tcDEwMDkgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAwDQotZHFjb21wMTAxMCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgIC0+IDANCi1kcWNvbXAxMDExIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMTIgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAtPiAwDQotZHFjb21wMTAxMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgIC0+IDANCi1kcWNvbXAxMDE0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMTUgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAtPiAwDQotZHFjb21wMTAxNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgIC0+IDANCi1kcWNvbXAxMDE3IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMTggY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgICAtPiAwDQotZHFjb21wMTAxOSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAgIC0+IDANCi1kcWNvbXAxMDIwIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwICAgLT4gMA0KLWRxY29tcDEwMjEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMCAgICAtPiAwDQotZHFjb21wMTAyMiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAgICAgIC0+IDANCi1kcWNvbXAxMDIzIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwICAgICAgLT4gMA0KLWRxY29tcDEwMjQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMCAgICAgICAtPiAwDQotZHFjb21wMTAyNSBjb21wYXJlIDEgMS4wMDAwMDAwMDAgICAgICAgIC0+IDANCi1kcWNvbXAxMDI2IGNvbXBhcmUgMSAxLjAwMDAwMDAwICAgICAgICAgLT4gMA0KLWRxY29tcDEwMjcgY29tcGFyZSAxIDEuMDAwMDAwMCAgICAgICAgICAtPiAwDQotZHFjb21wMTAyOCBjb21wYXJlIDEgMS4wMDAwMDAgICAgICAgICAgIC0+IDANCi1kcWNvbXAxMDI5IGNvbXBhcmUgMSAxLjAwMDAwICAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMzAgY29tcGFyZSAxIDEuMDAwMCAgICAgICAgICAgICAtPiAwDQotZHFjb21wMTAzMSBjb21wYXJlIDEgMS4wMDAgICAgICAgICAgICAgIC0+IDANCi1kcWNvbXAxMDMyIGNvbXBhcmUgMSAxLjAwICAgICAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMzMgY29tcGFyZSAxIDEuMCAgICAgICAgICAgICAgICAtPiAwDQotDQotZHFjb21wMTA0MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAxIC0+IDANCi1kcWNvbXAxMDQyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIDEgLT4gMA0KLWRxY29tcDEwNDMgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMSAtPiAwDQotZHFjb21wMTA0NCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAxIC0+IDANCi1kcWNvbXAxMDQ1IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIDEgLT4gMA0KLWRxY29tcDEwNDYgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgMSAtPiAwDQotZHFjb21wMTA0NyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDQ4IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNDkgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA1MCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDUxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNTIgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA1MyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDU0IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNTUgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA1NiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDU3IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNTggY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA1OSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwICAxIC0+IDANCi1kcWNvbXAxMDYwIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMCAgIDEgLT4gMA0KLWRxY29tcDEwNjEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAgICAgMSAtPiAwDQotZHFjb21wMTA2MiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwICAgICAxIC0+IDANCi1kcWNvbXAxMDYzIGNvbXBhcmUgMS4wMDAwMDAwMDAwMCAgICAgIDEgLT4gMA0KLWRxY29tcDEwNjQgY29tcGFyZSAxLjAwMDAwMDAwMDAgICAgICAgMSAtPiAwDQotZHFjb21wMTA2NSBjb21wYXJlIDEuMDAwMDAwMDAwICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDY2IGNvbXBhcmUgMS4wMDAwMDAwMCAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNjcgY29tcGFyZSAxLjAwMDAwMDAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA2OCBjb21wYXJlIDEuMDAwMDAwICAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDY5IGNvbXBhcmUgMS4wMDAwMCAgICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNzAgY29tcGFyZSAxLjAwMDAgICAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA3MSBjb21wYXJlIDEuMDAwICAgICAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDcyIGNvbXBhcmUgMS4wMCAgICAgICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNzMgY29tcGFyZSAxLjAgICAgICAgICAgICAgICAgMSAtPiAwDQotDQotLS0gY2hlY2sgTVNEIGFsd2F5cyBkZXRlY3RlZCBub24temVybw0KLWRxY29tcDEwODAgY29tcGFyZSAwIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAwDQotZHFjb21wMTA4MSBjb21wYXJlIDAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZHFjb21wMTA4MiBjb21wYXJlIDAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZHFjb21wMTA4MyBjb21wYXJlIDAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZHFjb21wMTA4NCBjb21wYXJlIDAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZHFjb21wMTA4NSBjb21wYXJlIDAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZHFjb21wMTA4NiBjb21wYXJlIDAgNi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZHFjb21wMTA4NyBjb21wYXJlIDAgNy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZHFjb21wMTA4OCBjb21wYXJlIDAgOC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZHFjb21wMTA4OSBjb21wYXJlIDAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZHFjb21wMTA5MCBjb21wYXJlIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDANCi1kcWNvbXAxMDkxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRxY29tcDEwOTIgY29tcGFyZSAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZHFjb21wMTA5MyBjb21wYXJlIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi1kcWNvbXAxMDk0IGNvbXBhcmUgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRxY29tcDEwOTUgY29tcGFyZSA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZHFjb21wMTA5NiBjb21wYXJlIDYuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi1kcWNvbXAxMDk3IGNvbXBhcmUgNy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRxY29tcDEwOTggY29tcGFyZSA4LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZHFjb21wMTA5OSBjb21wYXJlIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFjb205OTAgY29tcGFyZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTk5MSBjb21wYXJlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb21wYXJlLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uIHRoYXQgYWxsb3dzIHF1aWV0IE5hTnMgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwKKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdAorLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4KKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxY29tMDAxIGNvbXBhcmUgIC0yICAtMiAgLT4gMAorZHFjb20wMDIgY29tcGFyZSAgLTIgIC0xICAtPiAtMQorZHFjb20wMDMgY29tcGFyZSAgLTIgICAwICAtPiAtMQorZHFjb20wMDQgY29tcGFyZSAgLTIgICAxICAtPiAtMQorZHFjb20wMDUgY29tcGFyZSAgLTIgICAyICAtPiAtMQorZHFjb20wMDYgY29tcGFyZSAgLTEgIC0yICAtPiAxCitkcWNvbTAwNyBjb21wYXJlICAtMSAgLTEgIC0+IDAKK2RxY29tMDA4IGNvbXBhcmUgIC0xICAgMCAgLT4gLTEKK2RxY29tMDA5IGNvbXBhcmUgIC0xICAgMSAgLT4gLTEKK2RxY29tMDEwIGNvbXBhcmUgIC0xICAgMiAgLT4gLTEKK2RxY29tMDExIGNvbXBhcmUgICAwICAtMiAgLT4gMQorZHFjb20wMTIgY29tcGFyZSAgIDAgIC0xICAtPiAxCitkcWNvbTAxMyBjb21wYXJlICAgMCAgIDAgIC0+IDAKK2RxY29tMDE0IGNvbXBhcmUgICAwICAgMSAgLT4gLTEKK2RxY29tMDE1IGNvbXBhcmUgICAwICAgMiAgLT4gLTEKK2RxY29tMDE2IGNvbXBhcmUgICAxICAtMiAgLT4gMQorZHFjb20wMTcgY29tcGFyZSAgIDEgIC0xICAtPiAxCitkcWNvbTAxOCBjb21wYXJlICAgMSAgIDAgIC0+IDEKK2RxY29tMDE5IGNvbXBhcmUgICAxICAgMSAgLT4gMAorZHFjb20wMjAgY29tcGFyZSAgIDEgICAyICAtPiAtMQorZHFjb20wMjEgY29tcGFyZSAgIDIgIC0yICAtPiAxCitkcWNvbTAyMiBjb21wYXJlICAgMiAgLTEgIC0+IDEKK2RxY29tMDIzIGNvbXBhcmUgICAyICAgMCAgLT4gMQorZHFjb20wMjUgY29tcGFyZSAgIDIgICAxICAtPiAxCitkcWNvbTAyNiBjb21wYXJlICAgMiAgIDIgIC0+IDAKKworZHFjb20wMzEgY29tcGFyZSAgLTIwICAtMjAgIC0+IDAKK2RxY29tMDMyIGNvbXBhcmUgIC0yMCAgLTEwICAtPiAtMQorZHFjb20wMzMgY29tcGFyZSAgLTIwICAgMDAgIC0+IC0xCitkcWNvbTAzNCBjb21wYXJlICAtMjAgICAxMCAgLT4gLTEKK2RxY29tMDM1IGNvbXBhcmUgIC0yMCAgIDIwICAtPiAtMQorZHFjb20wMzYgY29tcGFyZSAgLTEwICAtMjAgIC0+IDEKK2RxY29tMDM3IGNvbXBhcmUgIC0xMCAgLTEwICAtPiAwCitkcWNvbTAzOCBjb21wYXJlICAtMTAgICAwMCAgLT4gLTEKK2RxY29tMDM5IGNvbXBhcmUgIC0xMCAgIDEwICAtPiAtMQorZHFjb20wNDAgY29tcGFyZSAgLTEwICAgMjAgIC0+IC0xCitkcWNvbTA0MSBjb21wYXJlICAgMDAgIC0yMCAgLT4gMQorZHFjb20wNDIgY29tcGFyZSAgIDAwICAtMTAgIC0+IDEKK2RxY29tMDQzIGNvbXBhcmUgICAwMCAgIDAwICAtPiAwCitkcWNvbTA0NCBjb21wYXJlICAgMDAgICAxMCAgLT4gLTEKK2RxY29tMDQ1IGNvbXBhcmUgICAwMCAgIDIwICAtPiAtMQorZHFjb20wNDYgY29tcGFyZSAgIDEwICAtMjAgIC0+IDEKK2RxY29tMDQ3IGNvbXBhcmUgICAxMCAgLTEwICAtPiAxCitkcWNvbTA0OCBjb21wYXJlICAgMTAgICAwMCAgLT4gMQorZHFjb20wNDkgY29tcGFyZSAgIDEwICAgMTAgIC0+IDAKK2RxY29tMDUwIGNvbXBhcmUgICAxMCAgIDIwICAtPiAtMQorZHFjb20wNTEgY29tcGFyZSAgIDIwICAtMjAgIC0+IDEKK2RxY29tMDUyIGNvbXBhcmUgICAyMCAgLTEwICAtPiAxCitkcWNvbTA1MyBjb21wYXJlICAgMjAgICAwMCAgLT4gMQorZHFjb20wNTUgY29tcGFyZSAgIDIwICAgMTAgIC0+IDEKK2RxY29tMDU2IGNvbXBhcmUgICAyMCAgIDIwICAtPiAwCisKK2RxY29tMDYxIGNvbXBhcmUgIC0yLjAgIC0yLjAgIC0+IDAKK2RxY29tMDYyIGNvbXBhcmUgIC0yLjAgIC0xLjAgIC0+IC0xCitkcWNvbTA2MyBjb21wYXJlICAtMi4wICAgMC4wICAtPiAtMQorZHFjb20wNjQgY29tcGFyZSAgLTIuMCAgIDEuMCAgLT4gLTEKK2RxY29tMDY1IGNvbXBhcmUgIC0yLjAgICAyLjAgIC0+IC0xCitkcWNvbTA2NiBjb21wYXJlICAtMS4wICAtMi4wICAtPiAxCitkcWNvbTA2NyBjb21wYXJlICAtMS4wICAtMS4wICAtPiAwCitkcWNvbTA2OCBjb21wYXJlICAtMS4wICAgMC4wICAtPiAtMQorZHFjb20wNjkgY29tcGFyZSAgLTEuMCAgIDEuMCAgLT4gLTEKK2RxY29tMDcwIGNvbXBhcmUgIC0xLjAgICAyLjAgIC0+IC0xCitkcWNvbTA3MSBjb21wYXJlICAgMC4wICAtMi4wICAtPiAxCitkcWNvbTA3MiBjb21wYXJlICAgMC4wICAtMS4wICAtPiAxCitkcWNvbTA3MyBjb21wYXJlICAgMC4wICAgMC4wICAtPiAwCitkcWNvbTA3NCBjb21wYXJlICAgMC4wICAgMS4wICAtPiAtMQorZHFjb20wNzUgY29tcGFyZSAgIDAuMCAgIDIuMCAgLT4gLTEKK2RxY29tMDc2IGNvbXBhcmUgICAxLjAgIC0yLjAgIC0+IDEKK2RxY29tMDc3IGNvbXBhcmUgICAxLjAgIC0xLjAgIC0+IDEKK2RxY29tMDc4IGNvbXBhcmUgICAxLjAgICAwLjAgIC0+IDEKK2RxY29tMDc5IGNvbXBhcmUgICAxLjAgICAxLjAgIC0+IDAKK2RxY29tMDgwIGNvbXBhcmUgICAxLjAgICAyLjAgIC0+IC0xCitkcWNvbTA4MSBjb21wYXJlICAgMi4wICAtMi4wICAtPiAxCitkcWNvbTA4MiBjb21wYXJlICAgMi4wICAtMS4wICAtPiAxCitkcWNvbTA4MyBjb21wYXJlICAgMi4wICAgMC4wICAtPiAxCitkcWNvbTA4NSBjb21wYXJlICAgMi4wICAgMS4wICAtPiAxCitkcWNvbTA4NiBjb21wYXJlICAgMi4wICAgMi4wICAtPiAwCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorZHFjb20wOTAgY29tcGFyZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IDAKK2RxY29tMDkxIGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtMQorZHFjb20wOTIgY29tcGFyZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKK2RxY29tMDkzIGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworZHFjb20xMDAgY29tcGFyZSAgIDcuMCAgICA3LjAgICAgLT4gMAorZHFjb20xMDEgY29tcGFyZSAgIDcuMCAgICA3ICAgICAgLT4gMAorZHFjb20xMDIgY29tcGFyZSAgIDcgICAgICA3LjAgICAgLT4gMAorZHFjb20xMDMgY29tcGFyZSAgIDdFKzAgICA3LjAgICAgLT4gMAorZHFjb20xMDQgY29tcGFyZSAgIDcwRS0xICA3LjAgICAgLT4gMAorZHFjb20xMDUgY29tcGFyZSAgIDAuN0UrMSA3ICAgICAgLT4gMAorZHFjb20xMDYgY29tcGFyZSAgIDcwRS0xICA3ICAgICAgLT4gMAorZHFjb20xMDcgY29tcGFyZSAgIDcuMCAgICA3RSswICAgLT4gMAorZHFjb20xMDggY29tcGFyZSAgIDcuMCAgICA3MEUtMSAgLT4gMAorZHFjb20xMDkgY29tcGFyZSAgIDcgICAgICAwLjdFKzEgLT4gMAorZHFjb20xMTAgY29tcGFyZSAgIDcgICAgICA3MEUtMSAgLT4gMAorCitkcWNvbTEyMCBjb21wYXJlICAgOC4wICAgIDcuMCAgICAtPiAxCitkcWNvbTEyMSBjb21wYXJlICAgOC4wICAgIDcgICAgICAtPiAxCitkcWNvbTEyMiBjb21wYXJlICAgOCAgICAgIDcuMCAgICAtPiAxCitkcWNvbTEyMyBjb21wYXJlICAgOEUrMCAgIDcuMCAgICAtPiAxCitkcWNvbTEyNCBjb21wYXJlICAgODBFLTEgIDcuMCAgICAtPiAxCitkcWNvbTEyNSBjb21wYXJlICAgMC44RSsxIDcgICAgICAtPiAxCitkcWNvbTEyNiBjb21wYXJlICAgODBFLTEgIDcgICAgICAtPiAxCitkcWNvbTEyNyBjb21wYXJlICAgOC4wICAgIDdFKzAgICAtPiAxCitkcWNvbTEyOCBjb21wYXJlICAgOC4wICAgIDcwRS0xICAtPiAxCitkcWNvbTEyOSBjb21wYXJlICAgOCAgICAgIDAuN0UrMSAgLT4gMQorZHFjb20xMzAgY29tcGFyZSAgIDggICAgICA3MEUtMSAgLT4gMQorCitkcWNvbTE0MCBjb21wYXJlICAgOC4wICAgIDkuMCAgICAtPiAtMQorZHFjb20xNDEgY29tcGFyZSAgIDguMCAgICA5ICAgICAgLT4gLTEKK2RxY29tMTQyIGNvbXBhcmUgICA4ICAgICAgOS4wICAgIC0+IC0xCitkcWNvbTE0MyBjb21wYXJlICAgOEUrMCAgIDkuMCAgICAtPiAtMQorZHFjb20xNDQgY29tcGFyZSAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2RxY29tMTQ1IGNvbXBhcmUgICAwLjhFKzEgOSAgICAgIC0+IC0xCitkcWNvbTE0NiBjb21wYXJlICAgODBFLTEgIDkgICAgICAtPiAtMQorZHFjb20xNDcgY29tcGFyZSAgIDguMCAgICA5RSswICAgLT4gLTEKK2RxY29tMTQ4IGNvbXBhcmUgICA4LjAgICAgOTBFLTEgIC0+IC0xCitkcWNvbTE0OSBjb21wYXJlICAgOCAgICAgIDAuOUUrMSAtPiAtMQorZHFjb20xNTAgY29tcGFyZSAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZHFjb20yMDAgY29tcGFyZSAgLTcuMCAgICA3LjAgICAgLT4gLTEKK2RxY29tMjAxIGNvbXBhcmUgIC03LjAgICAgNyAgICAgIC0+IC0xCitkcWNvbTIwMiBjb21wYXJlICAtNyAgICAgIDcuMCAgICAtPiAtMQorZHFjb20yMDMgY29tcGFyZSAgLTdFKzAgICA3LjAgICAgLT4gLTEKK2RxY29tMjA0IGNvbXBhcmUgIC03MEUtMSAgNy4wICAgIC0+IC0xCitkcWNvbTIwNSBjb21wYXJlICAtMC43RSsxIDcgICAgICAtPiAtMQorZHFjb20yMDYgY29tcGFyZSAgLTcwRS0xICA3ICAgICAgLT4gLTEKK2RxY29tMjA3IGNvbXBhcmUgIC03LjAgICAgN0UrMCAgIC0+IC0xCitkcWNvbTIwOCBjb21wYXJlICAtNy4wICAgIDcwRS0xICAtPiAtMQorZHFjb20yMDkgY29tcGFyZSAgLTcgICAgICAwLjdFKzEgLT4gLTEKK2RxY29tMjEwIGNvbXBhcmUgIC03ICAgICAgNzBFLTEgIC0+IC0xCisKK2RxY29tMjIwIGNvbXBhcmUgIC04LjAgICAgNy4wICAgIC0+IC0xCitkcWNvbTIyMSBjb21wYXJlICAtOC4wICAgIDcgICAgICAtPiAtMQorZHFjb20yMjIgY29tcGFyZSAgLTggICAgICA3LjAgICAgLT4gLTEKK2RxY29tMjIzIGNvbXBhcmUgIC04RSswICAgNy4wICAgIC0+IC0xCitkcWNvbTIyNCBjb21wYXJlICAtODBFLTEgIDcuMCAgICAtPiAtMQorZHFjb20yMjUgY29tcGFyZSAgLTAuOEUrMSA3ICAgICAgLT4gLTEKK2RxY29tMjI2IGNvbXBhcmUgIC04MEUtMSAgNyAgICAgIC0+IC0xCitkcWNvbTIyNyBjb21wYXJlICAtOC4wICAgIDdFKzAgICAtPiAtMQorZHFjb20yMjggY29tcGFyZSAgLTguMCAgICA3MEUtMSAgLT4gLTEKK2RxY29tMjI5IGNvbXBhcmUgIC04ICAgICAgMC43RSsxIC0+IC0xCitkcWNvbTIzMCBjb21wYXJlICAtOCAgICAgIDcwRS0xICAtPiAtMQorCitkcWNvbTI0MCBjb21wYXJlICAtOC4wICAgIDkuMCAgICAtPiAtMQorZHFjb20yNDEgY29tcGFyZSAgLTguMCAgICA5ICAgICAgLT4gLTEKK2RxY29tMjQyIGNvbXBhcmUgIC04ICAgICAgOS4wICAgIC0+IC0xCitkcWNvbTI0MyBjb21wYXJlICAtOEUrMCAgIDkuMCAgICAtPiAtMQorZHFjb20yNDQgY29tcGFyZSAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2RxY29tMjQ1IGNvbXBhcmUgIC0wLjhFKzEgOSAgICAgIC0+IC0xCitkcWNvbTI0NiBjb21wYXJlICAtODBFLTEgIDkgICAgICAtPiAtMQorZHFjb20yNDcgY29tcGFyZSAgLTguMCAgICA5RSswICAgLT4gLTEKK2RxY29tMjQ4IGNvbXBhcmUgIC04LjAgICAgOTBFLTEgIC0+IC0xCitkcWNvbTI0OSBjb21wYXJlICAtOCAgICAgIDAuOUUrMSAtPiAtMQorZHFjb20yNTAgY29tcGFyZSAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZHFjb20zMDAgY29tcGFyZSAgIDcuMCAgICAtNy4wICAgIC0+IDEKK2RxY29tMzAxIGNvbXBhcmUgICA3LjAgICAgLTcgICAgICAtPiAxCitkcWNvbTMwMiBjb21wYXJlICAgNyAgICAgIC03LjAgICAgLT4gMQorZHFjb20zMDMgY29tcGFyZSAgIDdFKzAgICAtNy4wICAgIC0+IDEKK2RxY29tMzA0IGNvbXBhcmUgICA3MEUtMSAgLTcuMCAgICAtPiAxCitkcWNvbTMwNSBjb21wYXJlICAgLjdFKzEgIC03ICAgICAgLT4gMQorZHFjb20zMDYgY29tcGFyZSAgIDcwRS0xICAtNyAgICAgIC0+IDEKK2RxY29tMzA3IGNvbXBhcmUgICA3LjAgICAgLTdFKzAgICAtPiAxCitkcWNvbTMwOCBjb21wYXJlICAgNy4wICAgIC03MEUtMSAgLT4gMQorZHFjb20zMDkgY29tcGFyZSAgIDcgICAgICAtLjdFKzEgIC0+IDEKK2RxY29tMzEwIGNvbXBhcmUgICA3ICAgICAgLTcwRS0xICAtPiAxCisKK2RxY29tMzIwIGNvbXBhcmUgICA4LjAgICAgLTcuMCAgICAtPiAxCitkcWNvbTMyMSBjb21wYXJlICAgOC4wICAgIC03ICAgICAgLT4gMQorZHFjb20zMjIgY29tcGFyZSAgIDggICAgICAtNy4wICAgIC0+IDEKK2RxY29tMzIzIGNvbXBhcmUgICA4RSswICAgLTcuMCAgICAtPiAxCitkcWNvbTMyNCBjb21wYXJlICAgODBFLTEgIC03LjAgICAgLT4gMQorZHFjb20zMjUgY29tcGFyZSAgIC44RSsxICAtNyAgICAgIC0+IDEKK2RxY29tMzI2IGNvbXBhcmUgICA4MEUtMSAgLTcgICAgICAtPiAxCitkcWNvbTMyNyBjb21wYXJlICAgOC4wICAgIC03RSswICAgLT4gMQorZHFjb20zMjggY29tcGFyZSAgIDguMCAgICAtNzBFLTEgIC0+IDEKK2RxY29tMzI5IGNvbXBhcmUgICA4ICAgICAgLS43RSsxICAtPiAxCitkcWNvbTMzMCBjb21wYXJlICAgOCAgICAgIC03MEUtMSAgLT4gMQorCitkcWNvbTM0MCBjb21wYXJlICAgOC4wICAgIC05LjAgICAgLT4gMQorZHFjb20zNDEgY29tcGFyZSAgIDguMCAgICAtOSAgICAgIC0+IDEKK2RxY29tMzQyIGNvbXBhcmUgICA4ICAgICAgLTkuMCAgICAtPiAxCitkcWNvbTM0MyBjb21wYXJlICAgOEUrMCAgIC05LjAgICAgLT4gMQorZHFjb20zNDQgY29tcGFyZSAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2RxY29tMzQ1IGNvbXBhcmUgICAuOEUrMSAgLTkgICAgICAtPiAxCitkcWNvbTM0NiBjb21wYXJlICAgODBFLTEgIC05ICAgICAgLT4gMQorZHFjb20zNDcgY29tcGFyZSAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2RxY29tMzQ4IGNvbXBhcmUgICA4LjAgICAgLTkwRS0xICAtPiAxCitkcWNvbTM0OSBjb21wYXJlICAgOCAgICAgIC0uOUUrMSAgLT4gMQorZHFjb20zNTAgY29tcGFyZSAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZHFjb200MDAgY29tcGFyZSAgIC03LjAgICAgLTcuMCAgICAtPiAwCitkcWNvbTQwMSBjb21wYXJlICAgLTcuMCAgICAtNyAgICAgIC0+IDAKK2RxY29tNDAyIGNvbXBhcmUgICAtNyAgICAgIC03LjAgICAgLT4gMAorZHFjb200MDMgY29tcGFyZSAgIC03RSswICAgLTcuMCAgICAtPiAwCitkcWNvbTQwNCBjb21wYXJlICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2RxY29tNDA1IGNvbXBhcmUgICAtLjdFKzEgIC03ICAgICAgLT4gMAorZHFjb200MDYgY29tcGFyZSAgIC03MEUtMSAgLTcgICAgICAtPiAwCitkcWNvbTQwNyBjb21wYXJlICAgLTcuMCAgICAtN0UrMCAgIC0+IDAKK2RxY29tNDA4IGNvbXBhcmUgICAtNy4wICAgIC03MEUtMSAgLT4gMAorZHFjb200MDkgY29tcGFyZSAgIC03ICAgICAgLS43RSsxICAtPiAwCitkcWNvbTQxMCBjb21wYXJlICAgLTcgICAgICAtNzBFLTEgIC0+IDAKKworZHFjb200MjAgY29tcGFyZSAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorZHFjb200MjEgY29tcGFyZSAgIC04LjAgICAgLTcgICAgICAtPiAtMQorZHFjb200MjIgY29tcGFyZSAgIC04ICAgICAgLTcuMCAgICAtPiAtMQorZHFjb200MjMgY29tcGFyZSAgIC04RSswICAgLTcuMCAgICAtPiAtMQorZHFjb200MjQgY29tcGFyZSAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQorZHFjb200MjUgY29tcGFyZSAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQorZHFjb200MjYgY29tcGFyZSAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorZHFjb200MjcgY29tcGFyZSAgIC04LjAgICAgLTdFKzAgICAtPiAtMQorZHFjb200MjggY29tcGFyZSAgIC04LjAgICAgLTcwRS0xICAtPiAtMQorZHFjb200MjkgY29tcGFyZSAgIC04ICAgICAgLS43RSsxICAtPiAtMQorZHFjb200MzAgY29tcGFyZSAgIC04ICAgICAgLTcwRS0xICAtPiAtMQorCitkcWNvbTQ0MCBjb21wYXJlICAgLTguMCAgICAtOS4wICAgIC0+IDEKK2RxY29tNDQxIGNvbXBhcmUgICAtOC4wICAgIC05ICAgICAgLT4gMQorZHFjb200NDIgY29tcGFyZSAgIC04ICAgICAgLTkuMCAgICAtPiAxCitkcWNvbTQ0MyBjb21wYXJlICAgLThFKzAgICAtOS4wICAgIC0+IDEKK2RxY29tNDQ0IGNvbXBhcmUgICAtODBFLTEgIC05LjAgICAgLT4gMQorZHFjb200NDUgY29tcGFyZSAgIC0uOEUrMSAgLTkgICAgICAtPiAxCitkcWNvbTQ0NiBjb21wYXJlICAgLTgwRS0xICAtOSAgICAgIC0+IDEKK2RxY29tNDQ3IGNvbXBhcmUgICAtOC4wICAgIC05RSswICAgLT4gMQorZHFjb200NDggY29tcGFyZSAgIC04LjAgICAgLTkwRS0xICAtPiAxCitkcWNvbTQ0OSBjb21wYXJlICAgLTggICAgICAtLjlFKzEgIC0+IDEKK2RxY29tNDUwIGNvbXBhcmUgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KK2RxY29tNDUxIGNvbXBhcmUgICAgICAxLjAgICAgICAgMC4xICAtPiAxCitkcWNvbTQ1MiBjb21wYXJlICAgICAgMC4xICAgICAgIDEuMCAgLT4gLTEKK2RxY29tNDUzIGNvbXBhcmUgICAgIDEwLjAgICAgICAgMC4xICAtPiAxCitkcWNvbTQ1NCBjb21wYXJlICAgICAgMC4xICAgICAgMTAuMCAgLT4gLTEKK2RxY29tNDU1IGNvbXBhcmUgICAgICAxMDAgICAgICAgMS4wICAtPiAxCitkcWNvbTQ1NiBjb21wYXJlICAgICAgMS4wICAgICAgIDEwMCAgLT4gLTEKK2RxY29tNDU3IGNvbXBhcmUgICAgIDEwMDAgICAgICAxMC4wICAtPiAxCitkcWNvbTQ1OCBjb21wYXJlICAgICAxMC4wICAgICAgMTAwMCAgLT4gLTEKK2RxY29tNDU5IGNvbXBhcmUgICAgMTAwMDAgICAgIDEwMC4wICAtPiAxCitkcWNvbTQ2MCBjb21wYXJlICAgIDEwMC4wICAgICAxMDAwMCAgLT4gLTEKK2RxY29tNDYxIGNvbXBhcmUgICAxMDAwMDAgICAgMTAwMC4wICAtPiAxCitkcWNvbTQ2MiBjb21wYXJlICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gLTEKK2RxY29tNDYzIGNvbXBhcmUgIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxCitkcWNvbTQ2NCBjb21wYXJlICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gLTEKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitkcWNvbTQ3MyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNvbTQ3NCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY29tNDc1IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNvbTQ3NiBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNvbTQ3NyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY29tNDc4IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNvbTQ3OSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNvbTQ4MCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY29tNDgxIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNvbTQ4MiBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNvbTQ4MyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY29tNDg3IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFKzg5IC0+IDAKK2RxY29tNDg4IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMEUtODkgLT4gMAorZHFjb200ODkgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDBFKzg5IC0+IDAKK2RxY29tNDkwIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFLTg5IC0+IDAKK2RxY29tNDkxIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMEUrODkgLT4gMAorZHFjb200OTIgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDBFLTg5IC0+IDAKK2RxY29tNDkzIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFKzg5IC0+IDAKK2RxY29tNDk0IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMEUtODkgLT4gMAorZHFjb200OTUgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDBFKzg5IC0+IDAKK2RxY29tNDk2IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFLTg5IC0+IDAKK2RxY29tNDk3IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitkcWNvbTUwMCBjb21wYXJlICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2RxY29tNTAxIGNvbXBhcmUgICAgMSAgICAgMUUtMTQgICAgLT4gMQorZHFjb201MDIgY29tcGFyZSAgICAxICAgICAxRS0xMyAgICAtPiAxCitkcWNvbTUwMyBjb21wYXJlICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2RxY29tNTA0IGNvbXBhcmUgICAgMSAgICAgMUUtMTEgICAgLT4gMQorZHFjb201MDUgY29tcGFyZSAgICAxICAgICAxRS0xMCAgICAtPiAxCitkcWNvbTUwNiBjb21wYXJlICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2RxY29tNTA3IGNvbXBhcmUgICAgMSAgICAgMUUtOCAgICAgLT4gMQorZHFjb201MDggY29tcGFyZSAgICAxICAgICAxRS03ICAgICAtPiAxCitkcWNvbTUwOSBjb21wYXJlICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2RxY29tNTEwIGNvbXBhcmUgICAgMSAgICAgMUUtNSAgICAgLT4gMQorZHFjb201MTEgY29tcGFyZSAgICAxICAgICAxRS00ICAgICAtPiAxCitkcWNvbTUxMiBjb21wYXJlICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2RxY29tNTEzIGNvbXBhcmUgICAgMSAgICAgMUUtMiAgICAgLT4gMQorZHFjb201MTQgY29tcGFyZSAgICAxICAgICAxRS0xICAgICAtPiAxCitkcWNvbTUxNSBjb21wYXJlICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2RxY29tNTE2IGNvbXBhcmUgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKK2RxY29tNTE3IGNvbXBhcmUgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2RxY29tNTE4IGNvbXBhcmUgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2RxY29tNTE5IGNvbXBhcmUgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKK2RxY29tNTIxIGNvbXBhcmUgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2RxY29tNTIyIGNvbXBhcmUgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2RxY29tNTIzIGNvbXBhcmUgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKK2RxY29tNTI0IGNvbXBhcmUgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2RxY29tNTI1IGNvbXBhcmUgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2RxY29tNTI2IGNvbXBhcmUgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKK2RxY29tNTI3IGNvbXBhcmUgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2RxY29tNTI4IGNvbXBhcmUgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2RxY29tNTI5IGNvbXBhcmUgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKK2RxY29tNTMwIGNvbXBhcmUgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2RxY29tNTMxIGNvbXBhcmUgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKKy0tIExSIHN3YXAKK2RxY29tNTQwIGNvbXBhcmUgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2RxY29tNTQxIGNvbXBhcmUgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKK2RxY29tNTQyIGNvbXBhcmUgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2RxY29tNTQzIGNvbXBhcmUgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2RxY29tNTQ0IGNvbXBhcmUgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKK2RxY29tNTQ1IGNvbXBhcmUgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2RxY29tNTQ2IGNvbXBhcmUgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2RxY29tNTQ3IGNvbXBhcmUgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKK2RxY29tNTQ4IGNvbXBhcmUgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2RxY29tNTQ5IGNvbXBhcmUgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2RxY29tNTUwIGNvbXBhcmUgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKK2RxY29tNTUxIGNvbXBhcmUgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2RxY29tNTUyIGNvbXBhcmUgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2RxY29tNTUzIGNvbXBhcmUgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKK2RxY29tNTU0IGNvbXBhcmUgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2RxY29tNTU1IGNvbXBhcmUgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2RxY29tNTU2IGNvbXBhcmUgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKK2RxY29tNTU3IGNvbXBhcmUgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2RxY29tNTU4IGNvbXBhcmUgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2RxY29tNTU5IGNvbXBhcmUgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKK2RxY29tNTYxIGNvbXBhcmUgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2RxY29tNTYyIGNvbXBhcmUgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2RxY29tNTYzIGNvbXBhcmUgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKK2RxY29tNTY0IGNvbXBhcmUgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2RxY29tNTY1IGNvbXBhcmUgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2RxY29tNTY2IGNvbXBhcmUgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKK2RxY29tNTY3IGNvbXBhcmUgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2RxY29tNTY4IGNvbXBhcmUgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2RxY29tNTY5IGNvbXBhcmUgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKK2RxY29tNTcwIGNvbXBhcmUgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2RxY29tNTcxIGNvbXBhcmUgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorZHFjb201ODAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2RxY29tNTgxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCitkcWNvbTU4MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQorZHFjb201ODMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2RxY29tNTg0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCitkcWNvbTU4NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQorZHFjb201ODYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2RxY29tNTg3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCitkcWNvbTU4OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQorZHFjb201ODkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitkcWNvbTU5MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKK2RxY29tNTkxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQorZHFjb201OTIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitkcWNvbTU5MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKK2RxY29tNTk0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQorZHFjb201OTUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitkcWNvbTU5NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKK2RxY29tNTk3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQorZHFjb201OTggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitkcWNvbTU5OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK2RxY29tNjAwIGNvbXBhcmUgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY29tNjAxIGNvbXBhcmUgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY29tNjAyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY29tNjAzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY29tNjA0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY29tNjA1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY29tNjA2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY29tNjA3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2RxY29tNjA4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKK2RxY29tNjA5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKK2RxY29tNjEwIGNvbXBhcmUgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2RxY29tNjExIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKK2RxY29tNjEyIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKK2RxY29tNjEzIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2RxY29tNjE0IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKK2RxY29tNjE1IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKK2RxY29tNjE2IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2RxY29tNjE3IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKK2RxY29tNjE4IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKK2RxY29tNjE5IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2RxY29tNjIwIGNvbXBhcmUgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY29tNjIxIGNvbXBhcmUgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY29tNjIyIGNvbXBhcmUgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY29tNjIzIGNvbXBhcmUgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY29tNjI0IGNvbXBhcmUgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY29tNjI1IGNvbXBhcmUgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY29tNjI2IGNvbXBhcmUgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY29tNjI3IGNvbXBhcmUgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKK2RxY29tNjI4IGNvbXBhcmUgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2RxY29tNjI5IGNvbXBhcmUgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKK2RxY29tNjMwIGNvbXBhcmUgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKK2RxY29tNjMxIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2RxY29tNjMyIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKK2RxY29tNjMzIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKK2RxY29tNjM0IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2RxY29tNjM1IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKK2RxY29tNjM2IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKK2RxY29tNjM3IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2RxY29tNjM4IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKK2RxY29tNjM5IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RxY29tNjQwIGNvbXBhcmUgICAwICAgICAwICAgLT4gMAorZHFjb202NDEgY29tcGFyZSAgIDAgICAgLTAgICAtPiAwCitkcWNvbTY0MiBjb21wYXJlICAgMCAgICAtMC4wIC0+IDAKK2RxY29tNjQzIGNvbXBhcmUgICAwICAgICAwLjAgLT4gMAorZHFjb202NDQgY29tcGFyZSAgLTAgICAgIDAgICAtPiAwCitkcWNvbTY0NSBjb21wYXJlICAtMCAgICAtMCAgIC0+IDAKK2RxY29tNjQ2IGNvbXBhcmUgIC0wICAgIC0wLjAgLT4gMAorZHFjb202NDcgY29tcGFyZSAgLTAgICAgIDAuMCAtPiAwCitkcWNvbTY0OCBjb21wYXJlICAgMC4wICAgMCAgIC0+IDAKK2RxY29tNjQ5IGNvbXBhcmUgICAwLjAgIC0wICAgLT4gMAorZHFjb202NTAgY29tcGFyZSAgIDAuMCAgLTAuMCAtPiAwCitkcWNvbTY1MSBjb21wYXJlICAgMC4wICAgMC4wIC0+IDAKK2RxY29tNjUyIGNvbXBhcmUgIC0wLjAgICAwICAgLT4gMAorZHFjb202NTMgY29tcGFyZSAgLTAuMCAgLTAgICAtPiAwCitkcWNvbTY1NCBjb21wYXJlICAtMC4wICAtMC4wIC0+IDAKK2RxY29tNjU1IGNvbXBhcmUgIC0wLjAgICAwLjAgLT4gMAorCitkcWNvbTY1NiBjb21wYXJlICAtMEUxICAgMC4wIC0+IDAKK2RxY29tNjU3IGNvbXBhcmUgIC0wRTIgICAwLjAgLT4gMAorZHFjb202NTggY29tcGFyZSAgIDBFMSAgIDAuMCAtPiAwCitkcWNvbTY1OSBjb21wYXJlICAgMEUyICAgMC4wIC0+IDAKK2RxY29tNjYwIGNvbXBhcmUgIC0wRTEgICAwICAgLT4gMAorZHFjb202NjEgY29tcGFyZSAgLTBFMiAgIDAgICAtPiAwCitkcWNvbTY2MiBjb21wYXJlICAgMEUxICAgMCAgIC0+IDAKK2RxY29tNjYzIGNvbXBhcmUgICAwRTIgICAwICAgLT4gMAorZHFjb202NjQgY29tcGFyZSAgLTBFMSAgLTBFMSAtPiAwCitkcWNvbTY2NSBjb21wYXJlICAtMEUyICAtMEUxIC0+IDAKK2RxY29tNjY2IGNvbXBhcmUgICAwRTEgIC0wRTEgLT4gMAorZHFjb202NjcgY29tcGFyZSAgIDBFMiAgLTBFMSAtPiAwCitkcWNvbTY2OCBjb21wYXJlICAtMEUxICAtMEUyIC0+IDAKK2RxY29tNjY5IGNvbXBhcmUgIC0wRTIgIC0wRTIgLT4gMAorZHFjb202NzAgY29tcGFyZSAgIDBFMSAgLTBFMiAtPiAwCitkcWNvbTY3MSBjb21wYXJlICAgMEUyICAtMEUyIC0+IDAKK2RxY29tNjcyIGNvbXBhcmUgIC0wRTEgICAwRTEgLT4gMAorZHFjb202NzMgY29tcGFyZSAgLTBFMiAgIDBFMSAtPiAwCitkcWNvbTY3NCBjb21wYXJlICAgMEUxICAgMEUxIC0+IDAKK2RxY29tNjc1IGNvbXBhcmUgICAwRTIgICAwRTEgLT4gMAorZHFjb202NzYgY29tcGFyZSAgLTBFMSAgIDBFMiAtPiAwCitkcWNvbTY3NyBjb21wYXJlICAtMEUyICAgMEUyIC0+IDAKK2RxY29tNjc4IGNvbXBhcmUgICAwRTEgICAwRTIgLT4gMAorZHFjb202NzkgY29tcGFyZSAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RxY29tNjgwIGNvbXBhcmUgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorZHFjb202ODEgY29tcGFyZSAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwCitkcWNvbTY4MiBjb21wYXJlICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDAKK2RxY29tNjgzIGNvbXBhcmUgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMAorZHFjb202ODQgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwCitkcWNvbTY4NSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDAKK2RxY29tNjg2IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMAorZHFjb202ODcgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwCitkcWNvbTY4OCBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDAKK2RxY29tNjg5IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMAorZHFjb202OTAgY29tcGFyZSAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCitkcWNvbTY5MSBjb21wYXJlICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDAKK2RxY29tNjkyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMAorZHFjb202OTMgY29tcGFyZSAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwCitkcWNvbTY5NCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDAKK2RxY29tNjk1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMAorZHFjb202OTYgY29tcGFyZSAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwCitkcWNvbTY5NyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDAKK2RxY29tNjk4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMAorZHFjb202OTkgY29tcGFyZSAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwCisKKy0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdAorZHFjb203MDAgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NSAtPiAxCitkcWNvbTcwMSBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDAKK2RxY29tNzAyIGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTcgLT4gLTEKK2RxY29tNzAzIGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDAyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQorZHFjb203MDQgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwCitkcWNvbTcwNSBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAyMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IC0xCitkcWNvbTcwNiBjb21wYXJlICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMDM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDEKK2RxY29tNzA3IGNvbXBhcmUgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMAorZHFjb203MDggY29tcGFyZSAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQorCistLSBtaXNjZWxsYW5lb3VzCitkcWNvbTcyMSBjb21wYXJlIDEyMzQ1Njc4MDAwIDEgLT4gMQorZHFjb203MjIgY29tcGFyZSAxIDEyMzQ1Njc4MDAwIC0+IC0xCitkcWNvbTcyMyBjb21wYXJlIDEyMzQ1Njc4MDAgIDEgLT4gMQorZHFjb203MjQgY29tcGFyZSAxIDEyMzQ1Njc4MDAgIC0+IC0xCitkcWNvbTcyNSBjb21wYXJlIDEyMzQ1Njc4OTAgIDEgLT4gMQorZHFjb203MjYgY29tcGFyZSAxIDEyMzQ1Njc4OTAgIC0+IC0xCitkcWNvbTcyNyBjb21wYXJlIDEyMzQ1Njc4OTEgIDEgLT4gMQorZHFjb203MjggY29tcGFyZSAxIDEyMzQ1Njc4OTEgIC0+IC0xCitkcWNvbTcyOSBjb21wYXJlIDEyMzQ1Njc4OTAxIDEgLT4gMQorZHFjb203MzAgY29tcGFyZSAxIDEyMzQ1Njc4OTAxIC0+IC0xCitkcWNvbTczMSBjb21wYXJlIDEyMzQ1Njc4OTYgIDEgLT4gMQorZHFjb203MzIgY29tcGFyZSAxIDEyMzQ1Njc4OTYgIC0+IC0xCisKKy0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uCitkcWNvbTc0MCBjb21wYXJlICAxICAwLjk5OTk5OTkgIC0+IDEKK2RxY29tNzQxIGNvbXBhcmUgIDEgIDAuOTk5OTk5ICAgLT4gMQorZHFjb203NDIgY29tcGFyZSAgMSAgMC45OTk5OSAgICAtPiAxCitkcWNvbTc0MyBjb21wYXJlICAxICAxLjAwMDAgICAgIC0+IDAKK2RxY29tNzQ0IGNvbXBhcmUgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2RxY29tNzQ1IGNvbXBhcmUgIDEgIDEuMDAwMDAxICAgLT4gLTEKK2RxY29tNzQ2IGNvbXBhcmUgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2RxY29tNzUwIGNvbXBhcmUgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2RxY29tNzUxIGNvbXBhcmUgIDAuOTk5OTk5ICAgMSAgLT4gLTEKK2RxY29tNzUyIGNvbXBhcmUgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2RxY29tNzUzIGNvbXBhcmUgIDEuMDAwMCAgICAgMSAgLT4gMAorZHFjb203NTQgY29tcGFyZSAgMS4wMDAwMSAgICAxICAtPiAxCitkcWNvbTc1NSBjb21wYXJlICAxLjAwMDAwMSAgIDEgIC0+IDEKK2RxY29tNzU2IGNvbXBhcmUgIDEuMDAwMDAwMSAgMSAgLT4gMQorCistLSBTcGVjaWFscworZHFjb203ODAgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDEKK2RxY29tNzgxIGNvbXBhcmUgIEluZiAgLTEwMDAgIC0+ICAxCitkcWNvbTc4MiBjb21wYXJlICBJbmYgIC0xICAgICAtPiAgMQorZHFjb203ODMgY29tcGFyZSAgSW5mICAtMCAgICAgLT4gIDEKK2RxY29tNzg0IGNvbXBhcmUgIEluZiAgIDAgICAgIC0+ICAxCitkcWNvbTc4NSBjb21wYXJlICBJbmYgICAxICAgICAtPiAgMQorZHFjb203ODYgY29tcGFyZSAgSW5mICAgMTAwMCAgLT4gIDEKK2RxY29tNzg3IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwCitkcWNvbTc4OCBjb21wYXJlIC0xMDAwICBJbmYgICAtPiAtMQorZHFjb203ODkgY29tcGFyZSAtSW5mICAgSW5mICAgLT4gLTEKK2RxY29tNzkwIGNvbXBhcmUgLTEgICAgIEluZiAgIC0+IC0xCitkcWNvbTc5MSBjb21wYXJlIC0wICAgICBJbmYgICAtPiAtMQorZHFjb203OTIgY29tcGFyZSAgMCAgICAgSW5mICAgLT4gLTEKK2RxY29tNzkzIGNvbXBhcmUgIDEgICAgIEluZiAgIC0+IC0xCitkcWNvbTc5NCBjb21wYXJlICAxMDAwICBJbmYgICAtPiAtMQorZHFjb203OTUgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDAKKworZHFjb204MDAgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDAKK2RxY29tODAxIGNvbXBhcmUgLUluZiAgLTEwMDAgIC0+IC0xCitkcWNvbTgwMiBjb21wYXJlIC1JbmYgIC0xICAgICAtPiAtMQorZHFjb204MDMgY29tcGFyZSAtSW5mICAtMCAgICAgLT4gLTEKK2RxY29tODA0IGNvbXBhcmUgLUluZiAgIDAgICAgIC0+IC0xCitkcWNvbTgwNSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAtMQorZHFjb204MDYgY29tcGFyZSAtSW5mICAgMTAwMCAgLT4gLTEKK2RxY29tODA3IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xCitkcWNvbTgwOCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjb204MDkgY29tcGFyZSAtMTAwMCAtSW5mICAgLT4gIDEKK2RxY29tODEwIGNvbXBhcmUgLTEgICAgLUluZiAgIC0+ICAxCitkcWNvbTgxMSBjb21wYXJlIC0wICAgIC1JbmYgICAtPiAgMQorZHFjb204MTIgY29tcGFyZSAgMCAgICAtSW5mICAgLT4gIDEKK2RxY29tODEzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAxCitkcWNvbTgxNCBjb21wYXJlICAxMDAwIC1JbmYgICAtPiAgMQorZHFjb204MTUgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDEKKworZHFjb204MjEgY29tcGFyZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFjb204MjIgY29tcGFyZSAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFjb204MjMgY29tcGFyZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFjb204MjQgY29tcGFyZSAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFjb204MjUgY29tcGFyZSAgTmFOICAwICAgICAgLT4gIE5hTgorZHFjb204MjYgY29tcGFyZSAgTmFOICAxICAgICAgLT4gIE5hTgorZHFjb204MjcgY29tcGFyZSAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFjb204MjggY29tcGFyZSAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFjb204MjkgY29tcGFyZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFjb204MzAgY29tcGFyZSAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFjb204MzEgY29tcGFyZSAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFjb204MzIgY29tcGFyZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFjb204MzMgY29tcGFyZSAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFjb204MzQgY29tcGFyZSAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFjb204MzUgY29tcGFyZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFjb204MzYgY29tcGFyZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFjb204MzcgY29tcGFyZSAgSW5mICBOYU4gICAgLT4gIE5hTgorZHFjb204MzggY29tcGFyZSAtTmFOIC1OYU4gICAgLT4gLU5hTgorZHFjb204MzkgY29tcGFyZSArTmFOIC1OYU4gICAgLT4gIE5hTgorZHFjb204NDAgY29tcGFyZSAtTmFOICtOYU4gICAgLT4gLU5hTgorCitkcWNvbTg0MSBjb21wYXJlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NDIgY29tcGFyZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQzIGNvbXBhcmUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0NCBjb21wYXJlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NDUgY29tcGFyZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQ2IGNvbXBhcmUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0NyBjb21wYXJlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NDggY29tcGFyZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQ5IGNvbXBhcmUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1MCBjb21wYXJlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTEgY29tcGFyZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODUyIGNvbXBhcmUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1MyBjb21wYXJlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTQgY29tcGFyZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODU1IGNvbXBhcmUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1NiBjb21wYXJlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTcgY29tcGFyZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODU4IGNvbXBhcmUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1OSBjb21wYXJlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWNvbTg2MCBjb21wYXJlICBOYU45IC1JbmYgICAtPiAgTmFOOQorZHFjb204NjEgY29tcGFyZSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgKK2RxY29tODYyIGNvbXBhcmUgIE5hTjc3IEluZiAgIC0+ICBOYU43NworZHFjb204NjMgY29tcGFyZSAtTmFONjcgTmFONSAgLT4gLU5hTjY3CitkcWNvbTg2NCBjb21wYXJlIC1JbmYgIC1OYU40ICAtPiAtTmFONAorZHFjb204NjUgY29tcGFyZSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzCitkcWNvbTg2NiBjb21wYXJlICBJbmYgICBOYU4yICAtPiAgTmFOMgorZHFjb204NjcgY29tcGFyZSAtTmFONDEgLU5hTjQyIC0+IC1OYU40MQorZHFjb204NjggY29tcGFyZSArTmFONDEgLU5hTjQyIC0+ICBOYU40MQorZHFjb204NjkgY29tcGFyZSAtTmFONDEgK05hTjQyIC0+IC1OYU40MQorZHFjb204NzAgY29tcGFyZSArTmFONDEgK05hTjQyIC0+ICBOYU40MQorCitkcWNvbTg3MSBjb21wYXJlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODcyIGNvbXBhcmUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NzMgY29tcGFyZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3NCBjb21wYXJlICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODc1IGNvbXBhcmUgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NzYgY29tcGFyZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3NyBjb21wYXJlICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODc4IGNvbXBhcmUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NzkgY29tcGFyZSAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHdpZGUgcmFuZ2UKK2RxY29tODgwIGNvbXBhcmUgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrNjE0NCAtPiAtMQorZHFjb204ODEgY29tcGFyZSA5RSs2MTQ0ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkcWNvbTg4MiBjb21wYXJlICswLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gIDEKK2RxY29tODgzIGNvbXBhcmUgOUUtNjE0MyArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQorZHFjb204ODUgY29tcGFyZSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xCitkcWNvbTg4NiBjb21wYXJlIDlFKzYxNDQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RxY29tODg3IGNvbXBhcmUgLTAuMTAwIDlFLTYxNDMgICAgICAgICAgICAgICAtPiAtMQorZHFjb204ODggY29tcGFyZSA5RS02MTQzIC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxCisKKy0tIHNpZ25zCitkcWNvbTkwMSBjb21wYXJlICAxZSs3NyAgMWUrMTEgLT4gIDEKK2RxY29tOTAyIGNvbXBhcmUgIDFlKzc3IC0xZSsxMSAtPiAgMQorZHFjb205MDMgY29tcGFyZSAtMWUrNzcgIDFlKzExIC0+IC0xCitkcWNvbTkwNCBjb21wYXJlIC0xZSs3NyAtMWUrMTEgLT4gLTEKK2RxY29tOTA1IGNvbXBhcmUgIDFlLTc3ICAxZS0xMSAtPiAtMQorZHFjb205MDYgY29tcGFyZSAgMWUtNzcgLTFlLTExIC0+ICAxCitkcWNvbTkwNyBjb21wYXJlIC0xZS03NyAgMWUtMTEgLT4gLTEKK2RxY29tOTA4IGNvbXBhcmUgLTFlLTc3IC0xZS0xMSAtPiAgMQorCistLSBmdWxsIGFsaWdubWVudCByYW5nZSwgYm90aCB3YXlzCitkcWNvbXAxMDAxIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMAorZHFjb21wMTAwMiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDAKK2RxY29tcDEwMDMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAwCitkcWNvbXAxMDA0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgLT4gMAorZHFjb21wMTAwNSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIC0+IDAKK2RxY29tcDEwMDYgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwCitkcWNvbXAxMDA3IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgLT4gMAorZHFjb21wMTAwOCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgIC0+IDAKK2RxY29tcDEwMDkgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAwCitkcWNvbXAxMDEwIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgLT4gMAorZHFjb21wMTAxMSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTIgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDEzIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxNCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTUgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDE2IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxNyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTggY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDE5IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gMAorZHFjb21wMTAyMCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMCAgIC0+IDAKK2RxY29tcDEwMjEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMCAgICAtPiAwCitkcWNvbXAxMDIyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMCAgICAgLT4gMAorZHFjb21wMTAyMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMCAgICAgIC0+IDAKK2RxY29tcDEwMjQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMCAgICAgICAtPiAwCitkcWNvbXAxMDI1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMCAgICAgICAgLT4gMAorZHFjb21wMTAyNiBjb21wYXJlIDEgMS4wMDAwMDAwMCAgICAgICAgIC0+IDAKK2RxY29tcDEwMjcgY29tcGFyZSAxIDEuMDAwMDAwMCAgICAgICAgICAtPiAwCitkcWNvbXAxMDI4IGNvbXBhcmUgMSAxLjAwMDAwMCAgICAgICAgICAgLT4gMAorZHFjb21wMTAyOSBjb21wYXJlIDEgMS4wMDAwMCAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMzAgY29tcGFyZSAxIDEuMDAwMCAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDMxIGNvbXBhcmUgMSAxLjAwMCAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAzMiBjb21wYXJlIDEgMS4wMCAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMzMgY29tcGFyZSAxIDEuMCAgICAgICAgICAgICAgICAtPiAwCisKK2RxY29tcDEwNDEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMSAtPiAwCitkcWNvbXAxMDQyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIDEgLT4gMAorZHFjb21wMTA0MyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAxIC0+IDAKK2RxY29tcDEwNDQgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMSAtPiAwCitkcWNvbXAxMDQ1IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIDEgLT4gMAorZHFjb21wMTA0NiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAxIC0+IDAKK2RxY29tcDEwNDcgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgMSAtPiAwCitkcWNvbXAxMDQ4IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgIDEgLT4gMAorZHFjb21wMTA0OSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTAgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDUxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1MiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTMgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDU0IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1NSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTYgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDU3IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1OCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTkgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMCAgMSAtPiAwCitkcWNvbXAxMDYwIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMCAgIDEgLT4gMAorZHFjb21wMTA2MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMCAgICAxIC0+IDAKK2RxY29tcDEwNjIgY29tcGFyZSAxLjAwMDAwMDAwMDAwMCAgICAgMSAtPiAwCitkcWNvbXAxMDYzIGNvbXBhcmUgMS4wMDAwMDAwMDAwMCAgICAgIDEgLT4gMAorZHFjb21wMTA2NCBjb21wYXJlIDEuMDAwMDAwMDAwMCAgICAgICAxIC0+IDAKK2RxY29tcDEwNjUgY29tcGFyZSAxLjAwMDAwMDAwMCAgICAgICAgMSAtPiAwCitkcWNvbXAxMDY2IGNvbXBhcmUgMS4wMDAwMDAwMCAgICAgICAgIDEgLT4gMAorZHFjb21wMTA2NyBjb21wYXJlIDEuMDAwMDAwMCAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNjggY29tcGFyZSAxLjAwMDAwMCAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDY5IGNvbXBhcmUgMS4wMDAwMCAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA3MCBjb21wYXJlIDEuMDAwMCAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNzEgY29tcGFyZSAxLjAwMCAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDcyIGNvbXBhcmUgMS4wMCAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA3MyBjb21wYXJlIDEuMCAgICAgICAgICAgICAgICAxIC0+IDAKKworLS0gY2hlY2sgTVNEIGFsd2F5cyBkZXRlY3RlZCBub24temVybworZHFjb21wMTA4MCBjb21wYXJlIDAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDAKK2RxY29tcDEwODEgY29tcGFyZSAwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4MiBjb21wYXJlIDAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDgzIGNvbXBhcmUgMCAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODQgY29tcGFyZSAwIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4NSBjb21wYXJlIDAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDg2IGNvbXBhcmUgMCA2LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODcgY29tcGFyZSAwIDcuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4OCBjb21wYXJlIDAgOC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDg5IGNvbXBhcmUgMCA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwOTAgY29tcGFyZSAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAwCitkcWNvbXAxMDkxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZHFjb21wMTA5MiBjb21wYXJlIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTMgY29tcGFyZSAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDk0IGNvbXBhcmUgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZHFjb21wMTA5NSBjb21wYXJlIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTYgY29tcGFyZSA2LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDk3IGNvbXBhcmUgNy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZHFjb21wMTA5OCBjb21wYXJlIDguMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTkgY29tcGFyZSA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCisKKy0tIE51bGwgdGVzdHMKK2RxY29tOTkwIGNvbXBhcmUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTk5MSBjb21wYXJlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVNpZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVNpZy5kZWNUZXN0CmluZGV4IGMwNjhkNDcuLjc5NWYwOTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVTaWcuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlU2lnLmRlY1Rlc3QKQEAgLTEsNjQ3ICsxLDY0NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFDb21wYXJlU2lnLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uOyBhbGwgTmFOcyBzaWduYWwgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KLS0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxY21zMDAxIGNvbXBhcmVzaWcgIC0yICAtMiAgLT4gMA0KLWRxY21zMDAyIGNvbXBhcmVzaWcgIC0yICAtMSAgLT4gLTENCi1kcWNtczAwMyBjb21wYXJlc2lnICAtMiAgIDAgIC0+IC0xDQotZHFjbXMwMDQgY29tcGFyZXNpZyAgLTIgICAxICAtPiAtMQ0KLWRxY21zMDA1IGNvbXBhcmVzaWcgIC0yICAgMiAgLT4gLTENCi1kcWNtczAwNiBjb21wYXJlc2lnICAtMSAgLTIgIC0+IDENCi1kcWNtczAwNyBjb21wYXJlc2lnICAtMSAgLTEgIC0+IDANCi1kcWNtczAwOCBjb21wYXJlc2lnICAtMSAgIDAgIC0+IC0xDQotZHFjbXMwMDkgY29tcGFyZXNpZyAgLTEgICAxICAtPiAtMQ0KLWRxY21zMDEwIGNvbXBhcmVzaWcgIC0xICAgMiAgLT4gLTENCi1kcWNtczAxMSBjb21wYXJlc2lnICAgMCAgLTIgIC0+IDENCi1kcWNtczAxMiBjb21wYXJlc2lnICAgMCAgLTEgIC0+IDENCi1kcWNtczAxMyBjb21wYXJlc2lnICAgMCAgIDAgIC0+IDANCi1kcWNtczAxNCBjb21wYXJlc2lnICAgMCAgIDEgIC0+IC0xDQotZHFjbXMwMTUgY29tcGFyZXNpZyAgIDAgICAyICAtPiAtMQ0KLWRxY21zMDE2IGNvbXBhcmVzaWcgICAxICAtMiAgLT4gMQ0KLWRxY21zMDE3IGNvbXBhcmVzaWcgICAxICAtMSAgLT4gMQ0KLWRxY21zMDE4IGNvbXBhcmVzaWcgICAxICAgMCAgLT4gMQ0KLWRxY21zMDE5IGNvbXBhcmVzaWcgICAxICAgMSAgLT4gMA0KLWRxY21zMDIwIGNvbXBhcmVzaWcgICAxICAgMiAgLT4gLTENCi1kcWNtczAyMSBjb21wYXJlc2lnICAgMiAgLTIgIC0+IDENCi1kcWNtczAyMiBjb21wYXJlc2lnICAgMiAgLTEgIC0+IDENCi1kcWNtczAyMyBjb21wYXJlc2lnICAgMiAgIDAgIC0+IDENCi1kcWNtczAyNSBjb21wYXJlc2lnICAgMiAgIDEgIC0+IDENCi1kcWNtczAyNiBjb21wYXJlc2lnICAgMiAgIDIgIC0+IDANCi0NCi1kcWNtczAzMSBjb21wYXJlc2lnICAtMjAgIC0yMCAgLT4gMA0KLWRxY21zMDMyIGNvbXBhcmVzaWcgIC0yMCAgLTEwICAtPiAtMQ0KLWRxY21zMDMzIGNvbXBhcmVzaWcgIC0yMCAgIDAwICAtPiAtMQ0KLWRxY21zMDM0IGNvbXBhcmVzaWcgIC0yMCAgIDEwICAtPiAtMQ0KLWRxY21zMDM1IGNvbXBhcmVzaWcgIC0yMCAgIDIwICAtPiAtMQ0KLWRxY21zMDM2IGNvbXBhcmVzaWcgIC0xMCAgLTIwICAtPiAxDQotZHFjbXMwMzcgY29tcGFyZXNpZyAgLTEwICAtMTAgIC0+IDANCi1kcWNtczAzOCBjb21wYXJlc2lnICAtMTAgICAwMCAgLT4gLTENCi1kcWNtczAzOSBjb21wYXJlc2lnICAtMTAgICAxMCAgLT4gLTENCi1kcWNtczA0MCBjb21wYXJlc2lnICAtMTAgICAyMCAgLT4gLTENCi1kcWNtczA0MSBjb21wYXJlc2lnICAgMDAgIC0yMCAgLT4gMQ0KLWRxY21zMDQyIGNvbXBhcmVzaWcgICAwMCAgLTEwICAtPiAxDQotZHFjbXMwNDMgY29tcGFyZXNpZyAgIDAwICAgMDAgIC0+IDANCi1kcWNtczA0NCBjb21wYXJlc2lnICAgMDAgICAxMCAgLT4gLTENCi1kcWNtczA0NSBjb21wYXJlc2lnICAgMDAgICAyMCAgLT4gLTENCi1kcWNtczA0NiBjb21wYXJlc2lnICAgMTAgIC0yMCAgLT4gMQ0KLWRxY21zMDQ3IGNvbXBhcmVzaWcgICAxMCAgLTEwICAtPiAxDQotZHFjbXMwNDggY29tcGFyZXNpZyAgIDEwICAgMDAgIC0+IDENCi1kcWNtczA0OSBjb21wYXJlc2lnICAgMTAgICAxMCAgLT4gMA0KLWRxY21zMDUwIGNvbXBhcmVzaWcgICAxMCAgIDIwICAtPiAtMQ0KLWRxY21zMDUxIGNvbXBhcmVzaWcgICAyMCAgLTIwICAtPiAxDQotZHFjbXMwNTIgY29tcGFyZXNpZyAgIDIwICAtMTAgIC0+IDENCi1kcWNtczA1MyBjb21wYXJlc2lnICAgMjAgICAwMCAgLT4gMQ0KLWRxY21zMDU1IGNvbXBhcmVzaWcgICAyMCAgIDEwICAtPiAxDQotZHFjbXMwNTYgY29tcGFyZXNpZyAgIDIwICAgMjAgIC0+IDANCi0NCi1kcWNtczA2MSBjb21wYXJlc2lnICAtMi4wICAtMi4wICAtPiAwDQotZHFjbXMwNjIgY29tcGFyZXNpZyAgLTIuMCAgLTEuMCAgLT4gLTENCi1kcWNtczA2MyBjb21wYXJlc2lnICAtMi4wICAgMC4wICAtPiAtMQ0KLWRxY21zMDY0IGNvbXBhcmVzaWcgIC0yLjAgICAxLjAgIC0+IC0xDQotZHFjbXMwNjUgY29tcGFyZXNpZyAgLTIuMCAgIDIuMCAgLT4gLTENCi1kcWNtczA2NiBjb21wYXJlc2lnICAtMS4wICAtMi4wICAtPiAxDQotZHFjbXMwNjcgY29tcGFyZXNpZyAgLTEuMCAgLTEuMCAgLT4gMA0KLWRxY21zMDY4IGNvbXBhcmVzaWcgIC0xLjAgICAwLjAgIC0+IC0xDQotZHFjbXMwNjkgY29tcGFyZXNpZyAgLTEuMCAgIDEuMCAgLT4gLTENCi1kcWNtczA3MCBjb21wYXJlc2lnICAtMS4wICAgMi4wICAtPiAtMQ0KLWRxY21zMDcxIGNvbXBhcmVzaWcgICAwLjAgIC0yLjAgIC0+IDENCi1kcWNtczA3MiBjb21wYXJlc2lnICAgMC4wICAtMS4wICAtPiAxDQotZHFjbXMwNzMgY29tcGFyZXNpZyAgIDAuMCAgIDAuMCAgLT4gMA0KLWRxY21zMDc0IGNvbXBhcmVzaWcgICAwLjAgICAxLjAgIC0+IC0xDQotZHFjbXMwNzUgY29tcGFyZXNpZyAgIDAuMCAgIDIuMCAgLT4gLTENCi1kcWNtczA3NiBjb21wYXJlc2lnICAgMS4wICAtMi4wICAtPiAxDQotZHFjbXMwNzcgY29tcGFyZXNpZyAgIDEuMCAgLTEuMCAgLT4gMQ0KLWRxY21zMDc4IGNvbXBhcmVzaWcgICAxLjAgICAwLjAgIC0+IDENCi1kcWNtczA3OSBjb21wYXJlc2lnICAgMS4wICAgMS4wICAtPiAwDQotZHFjbXMwODAgY29tcGFyZXNpZyAgIDEuMCAgIDIuMCAgLT4gLTENCi1kcWNtczA4MSBjb21wYXJlc2lnICAgMi4wICAtMi4wICAtPiAxDQotZHFjbXMwODIgY29tcGFyZXNpZyAgIDIuMCAgLTEuMCAgLT4gMQ0KLWRxY21zMDgzIGNvbXBhcmVzaWcgICAyLjAgICAwLjAgIC0+IDENCi1kcWNtczA4NSBjb21wYXJlc2lnICAgMi4wICAgMS4wICAtPiAxDQotZHFjbXMwODYgY29tcGFyZXNpZyAgIDIuMCAgIDIuMCAgLT4gMA0KLQ0KLS0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KLWRxY21zMDkwIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAwDQotZHFjbXMwOTEgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC0xDQotZHFjbXMwOTIgY29tcGFyZXNpZyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDENCi1kcWNtczA5MyBjb21wYXJlc2lnIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMA0KLQ0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KLWRxY21zMTAwIGNvbXBhcmVzaWcgICA3LjAgICAgNy4wICAgIC0+IDANCi1kcWNtczEwMSBjb21wYXJlc2lnICAgNy4wICAgIDcgICAgICAtPiAwDQotZHFjbXMxMDIgY29tcGFyZXNpZyAgIDcgICAgICA3LjAgICAgLT4gMA0KLWRxY21zMTAzIGNvbXBhcmVzaWcgICA3RSswICAgNy4wICAgIC0+IDANCi1kcWNtczEwNCBjb21wYXJlc2lnICAgNzBFLTEgIDcuMCAgICAtPiAwDQotZHFjbXMxMDUgY29tcGFyZXNpZyAgIDAuN0UrMSA3ICAgICAgLT4gMA0KLWRxY21zMTA2IGNvbXBhcmVzaWcgICA3MEUtMSAgNyAgICAgIC0+IDANCi1kcWNtczEwNyBjb21wYXJlc2lnICAgNy4wICAgIDdFKzAgICAtPiAwDQotZHFjbXMxMDggY29tcGFyZXNpZyAgIDcuMCAgICA3MEUtMSAgLT4gMA0KLWRxY21zMTA5IGNvbXBhcmVzaWcgICA3ICAgICAgMC43RSsxIC0+IDANCi1kcWNtczExMCBjb21wYXJlc2lnICAgNyAgICAgIDcwRS0xICAtPiAwDQotDQotZHFjbXMxMjAgY29tcGFyZXNpZyAgIDguMCAgICA3LjAgICAgLT4gMQ0KLWRxY21zMTIxIGNvbXBhcmVzaWcgICA4LjAgICAgNyAgICAgIC0+IDENCi1kcWNtczEyMiBjb21wYXJlc2lnICAgOCAgICAgIDcuMCAgICAtPiAxDQotZHFjbXMxMjMgY29tcGFyZXNpZyAgIDhFKzAgICA3LjAgICAgLT4gMQ0KLWRxY21zMTI0IGNvbXBhcmVzaWcgICA4MEUtMSAgNy4wICAgIC0+IDENCi1kcWNtczEyNSBjb21wYXJlc2lnICAgMC44RSsxIDcgICAgICAtPiAxDQotZHFjbXMxMjYgY29tcGFyZXNpZyAgIDgwRS0xICA3ICAgICAgLT4gMQ0KLWRxY21zMTI3IGNvbXBhcmVzaWcgICA4LjAgICAgN0UrMCAgIC0+IDENCi1kcWNtczEyOCBjb21wYXJlc2lnICAgOC4wICAgIDcwRS0xICAtPiAxDQotZHFjbXMxMjkgY29tcGFyZXNpZyAgIDggICAgICAwLjdFKzEgIC0+IDENCi1kcWNtczEzMCBjb21wYXJlc2lnICAgOCAgICAgIDcwRS0xICAtPiAxDQotDQotZHFjbXMxNDAgY29tcGFyZXNpZyAgIDguMCAgICA5LjAgICAgLT4gLTENCi1kcWNtczE0MSBjb21wYXJlc2lnICAgOC4wICAgIDkgICAgICAtPiAtMQ0KLWRxY21zMTQyIGNvbXBhcmVzaWcgICA4ICAgICAgOS4wICAgIC0+IC0xDQotZHFjbXMxNDMgY29tcGFyZXNpZyAgIDhFKzAgICA5LjAgICAgLT4gLTENCi1kcWNtczE0NCBjb21wYXJlc2lnICAgODBFLTEgIDkuMCAgICAtPiAtMQ0KLWRxY21zMTQ1IGNvbXBhcmVzaWcgICAwLjhFKzEgOSAgICAgIC0+IC0xDQotZHFjbXMxNDYgY29tcGFyZXNpZyAgIDgwRS0xICA5ICAgICAgLT4gLTENCi1kcWNtczE0NyBjb21wYXJlc2lnICAgOC4wICAgIDlFKzAgICAtPiAtMQ0KLWRxY21zMTQ4IGNvbXBhcmVzaWcgICA4LjAgICAgOTBFLTEgIC0+IC0xDQotZHFjbXMxNDkgY29tcGFyZXNpZyAgIDggICAgICAwLjlFKzEgLT4gLTENCi1kcWNtczE1MCBjb21wYXJlc2lnICAgOCAgICAgIDkwRS0xICAtPiAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCi1kcWNtczIwMCBjb21wYXJlc2lnICAtNy4wICAgIDcuMCAgICAtPiAtMQ0KLWRxY21zMjAxIGNvbXBhcmVzaWcgIC03LjAgICAgNyAgICAgIC0+IC0xDQotZHFjbXMyMDIgY29tcGFyZXNpZyAgLTcgICAgICA3LjAgICAgLT4gLTENCi1kcWNtczIwMyBjb21wYXJlc2lnICAtN0UrMCAgIDcuMCAgICAtPiAtMQ0KLWRxY21zMjA0IGNvbXBhcmVzaWcgIC03MEUtMSAgNy4wICAgIC0+IC0xDQotZHFjbXMyMDUgY29tcGFyZXNpZyAgLTAuN0UrMSA3ICAgICAgLT4gLTENCi1kcWNtczIwNiBjb21wYXJlc2lnICAtNzBFLTEgIDcgICAgICAtPiAtMQ0KLWRxY21zMjA3IGNvbXBhcmVzaWcgIC03LjAgICAgN0UrMCAgIC0+IC0xDQotZHFjbXMyMDggY29tcGFyZXNpZyAgLTcuMCAgICA3MEUtMSAgLT4gLTENCi1kcWNtczIwOSBjb21wYXJlc2lnICAtNyAgICAgIDAuN0UrMSAtPiAtMQ0KLWRxY21zMjEwIGNvbXBhcmVzaWcgIC03ICAgICAgNzBFLTEgIC0+IC0xDQotDQotZHFjbXMyMjAgY29tcGFyZXNpZyAgLTguMCAgICA3LjAgICAgLT4gLTENCi1kcWNtczIyMSBjb21wYXJlc2lnICAtOC4wICAgIDcgICAgICAtPiAtMQ0KLWRxY21zMjIyIGNvbXBhcmVzaWcgIC04ICAgICAgNy4wICAgIC0+IC0xDQotZHFjbXMyMjMgY29tcGFyZXNpZyAgLThFKzAgICA3LjAgICAgLT4gLTENCi1kcWNtczIyNCBjb21wYXJlc2lnICAtODBFLTEgIDcuMCAgICAtPiAtMQ0KLWRxY21zMjI1IGNvbXBhcmVzaWcgIC0wLjhFKzEgNyAgICAgIC0+IC0xDQotZHFjbXMyMjYgY29tcGFyZXNpZyAgLTgwRS0xICA3ICAgICAgLT4gLTENCi1kcWNtczIyNyBjb21wYXJlc2lnICAtOC4wICAgIDdFKzAgICAtPiAtMQ0KLWRxY21zMjI4IGNvbXBhcmVzaWcgIC04LjAgICAgNzBFLTEgIC0+IC0xDQotZHFjbXMyMjkgY29tcGFyZXNpZyAgLTggICAgICAwLjdFKzEgLT4gLTENCi1kcWNtczIzMCBjb21wYXJlc2lnICAtOCAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRxY21zMjQwIGNvbXBhcmVzaWcgIC04LjAgICAgOS4wICAgIC0+IC0xDQotZHFjbXMyNDEgY29tcGFyZXNpZyAgLTguMCAgICA5ICAgICAgLT4gLTENCi1kcWNtczI0MiBjb21wYXJlc2lnICAtOCAgICAgIDkuMCAgICAtPiAtMQ0KLWRxY21zMjQzIGNvbXBhcmVzaWcgIC04RSswICAgOS4wICAgIC0+IC0xDQotZHFjbXMyNDQgY29tcGFyZXNpZyAgLTgwRS0xICA5LjAgICAgLT4gLTENCi1kcWNtczI0NSBjb21wYXJlc2lnICAtMC44RSsxIDkgICAgICAtPiAtMQ0KLWRxY21zMjQ2IGNvbXBhcmVzaWcgIC04MEUtMSAgOSAgICAgIC0+IC0xDQotZHFjbXMyNDcgY29tcGFyZXNpZyAgLTguMCAgICA5RSswICAgLT4gLTENCi1kcWNtczI0OCBjb21wYXJlc2lnICAtOC4wICAgIDkwRS0xICAtPiAtMQ0KLWRxY21zMjQ5IGNvbXBhcmVzaWcgIC04ICAgICAgMC45RSsxIC0+IC0xDQotZHFjbXMyNTAgY29tcGFyZXNpZyAgLTggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQotZHFjbXMzMDAgY29tcGFyZXNpZyAgIDcuMCAgICAtNy4wICAgIC0+IDENCi1kcWNtczMwMSBjb21wYXJlc2lnICAgNy4wICAgIC03ICAgICAgLT4gMQ0KLWRxY21zMzAyIGNvbXBhcmVzaWcgICA3ICAgICAgLTcuMCAgICAtPiAxDQotZHFjbXMzMDMgY29tcGFyZXNpZyAgIDdFKzAgICAtNy4wICAgIC0+IDENCi1kcWNtczMwNCBjb21wYXJlc2lnICAgNzBFLTEgIC03LjAgICAgLT4gMQ0KLWRxY21zMzA1IGNvbXBhcmVzaWcgICAuN0UrMSAgLTcgICAgICAtPiAxDQotZHFjbXMzMDYgY29tcGFyZXNpZyAgIDcwRS0xICAtNyAgICAgIC0+IDENCi1kcWNtczMwNyBjb21wYXJlc2lnICAgNy4wICAgIC03RSswICAgLT4gMQ0KLWRxY21zMzA4IGNvbXBhcmVzaWcgICA3LjAgICAgLTcwRS0xICAtPiAxDQotZHFjbXMzMDkgY29tcGFyZXNpZyAgIDcgICAgICAtLjdFKzEgIC0+IDENCi1kcWNtczMxMCBjb21wYXJlc2lnICAgNyAgICAgIC03MEUtMSAgLT4gMQ0KLQ0KLWRxY21zMzIwIGNvbXBhcmVzaWcgICA4LjAgICAgLTcuMCAgICAtPiAxDQotZHFjbXMzMjEgY29tcGFyZXNpZyAgIDguMCAgICAtNyAgICAgIC0+IDENCi1kcWNtczMyMiBjb21wYXJlc2lnICAgOCAgICAgIC03LjAgICAgLT4gMQ0KLWRxY21zMzIzIGNvbXBhcmVzaWcgICA4RSswICAgLTcuMCAgICAtPiAxDQotZHFjbXMzMjQgY29tcGFyZXNpZyAgIDgwRS0xICAtNy4wICAgIC0+IDENCi1kcWNtczMyNSBjb21wYXJlc2lnICAgLjhFKzEgIC03ICAgICAgLT4gMQ0KLWRxY21zMzI2IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcgICAgICAtPiAxDQotZHFjbXMzMjcgY29tcGFyZXNpZyAgIDguMCAgICAtN0UrMCAgIC0+IDENCi1kcWNtczMyOCBjb21wYXJlc2lnICAgOC4wICAgIC03MEUtMSAgLT4gMQ0KLWRxY21zMzI5IGNvbXBhcmVzaWcgICA4ICAgICAgLS43RSsxICAtPiAxDQotZHFjbXMzMzAgY29tcGFyZXNpZyAgIDggICAgICAtNzBFLTEgIC0+IDENCi0NCi1kcWNtczM0MCBjb21wYXJlc2lnICAgOC4wICAgIC05LjAgICAgLT4gMQ0KLWRxY21zMzQxIGNvbXBhcmVzaWcgICA4LjAgICAgLTkgICAgICAtPiAxDQotZHFjbXMzNDIgY29tcGFyZXNpZyAgIDggICAgICAtOS4wICAgIC0+IDENCi1kcWNtczM0MyBjb21wYXJlc2lnICAgOEUrMCAgIC05LjAgICAgLT4gMQ0KLWRxY21zMzQ0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTkuMCAgICAtPiAxDQotZHFjbXMzNDUgY29tcGFyZXNpZyAgIC44RSsxICAtOSAgICAgIC0+IDENCi1kcWNtczM0NiBjb21wYXJlc2lnICAgODBFLTEgIC05ICAgICAgLT4gMQ0KLWRxY21zMzQ3IGNvbXBhcmVzaWcgICA4LjAgICAgLTlFKzAgICAtPiAxDQotZHFjbXMzNDggY29tcGFyZXNpZyAgIDguMCAgICAtOTBFLTEgIC0+IDENCi1kcWNtczM0OSBjb21wYXJlc2lnICAgOCAgICAgIC0uOUUrMSAgLT4gMQ0KLWRxY21zMzUwIGNvbXBhcmVzaWcgICA4ICAgICAgLTkwRS0xICAtPiAxDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KLWRxY21zNDAwIGNvbXBhcmVzaWcgICAtNy4wICAgIC03LjAgICAgLT4gMA0KLWRxY21zNDAxIGNvbXBhcmVzaWcgICAtNy4wICAgIC03ICAgICAgLT4gMA0KLWRxY21zNDAyIGNvbXBhcmVzaWcgICAtNyAgICAgIC03LjAgICAgLT4gMA0KLWRxY21zNDAzIGNvbXBhcmVzaWcgICAtN0UrMCAgIC03LjAgICAgLT4gMA0KLWRxY21zNDA0IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03LjAgICAgLT4gMA0KLWRxY21zNDA1IGNvbXBhcmVzaWcgICAtLjdFKzEgIC03ICAgICAgLT4gMA0KLWRxY21zNDA2IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03ICAgICAgLT4gMA0KLWRxY21zNDA3IGNvbXBhcmVzaWcgICAtNy4wICAgIC03RSswICAgLT4gMA0KLWRxY21zNDA4IGNvbXBhcmVzaWcgICAtNy4wICAgIC03MEUtMSAgLT4gMA0KLWRxY21zNDA5IGNvbXBhcmVzaWcgICAtNyAgICAgIC0uN0UrMSAgLT4gMA0KLWRxY21zNDEwIGNvbXBhcmVzaWcgICAtNyAgICAgIC03MEUtMSAgLT4gMA0KLQ0KLWRxY21zNDIwIGNvbXBhcmVzaWcgICAtOC4wICAgIC03LjAgICAgLT4gLTENCi1kcWNtczQyMSBjb21wYXJlc2lnICAgLTguMCAgICAtNyAgICAgIC0+IC0xDQotZHFjbXM0MjIgY29tcGFyZXNpZyAgIC04ICAgICAgLTcuMCAgICAtPiAtMQ0KLWRxY21zNDIzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC03LjAgICAgLT4gLTENCi1kcWNtczQyNCBjb21wYXJlc2lnICAgLTgwRS0xICAtNy4wICAgIC0+IC0xDQotZHFjbXM0MjUgY29tcGFyZXNpZyAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQ0KLWRxY21zNDI2IGNvbXBhcmVzaWcgICAtODBFLTEgIC03ICAgICAgLT4gLTENCi1kcWNtczQyNyBjb21wYXJlc2lnICAgLTguMCAgICAtN0UrMCAgIC0+IC0xDQotZHFjbXM0MjggY29tcGFyZXNpZyAgIC04LjAgICAgLTcwRS0xICAtPiAtMQ0KLWRxY21zNDI5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uN0UrMSAgLT4gLTENCi1kcWNtczQzMCBjb21wYXJlc2lnICAgLTggICAgICAtNzBFLTEgIC0+IC0xDQotDQotZHFjbXM0NDAgY29tcGFyZXNpZyAgIC04LjAgICAgLTkuMCAgICAtPiAxDQotZHFjbXM0NDEgY29tcGFyZXNpZyAgIC04LjAgICAgLTkgICAgICAtPiAxDQotZHFjbXM0NDIgY29tcGFyZXNpZyAgIC04ICAgICAgLTkuMCAgICAtPiAxDQotZHFjbXM0NDMgY29tcGFyZXNpZyAgIC04RSswICAgLTkuMCAgICAtPiAxDQotZHFjbXM0NDQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkuMCAgICAtPiAxDQotZHFjbXM0NDUgY29tcGFyZXNpZyAgIC0uOEUrMSAgLTkgICAgICAtPiAxDQotZHFjbXM0NDYgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkgICAgICAtPiAxDQotZHFjbXM0NDcgY29tcGFyZXNpZyAgIC04LjAgICAgLTlFKzAgICAtPiAxDQotZHFjbXM0NDggY29tcGFyZXNpZyAgIC04LjAgICAgLTkwRS0xICAtPiAxDQotZHFjbXM0NDkgY29tcGFyZXNpZyAgIC04ICAgICAgLS45RSsxICAtPiAxDQotZHFjbXM0NTAgY29tcGFyZXNpZyAgIC04ICAgICAgLTkwRS0xICAtPiAxDQotDQotDQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQotZHFjbXM0NzMgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KLWRxY21zNDc0IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KLWRxY21zNDc1IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwDQotZHFjbXM0NzYgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KLWRxY21zNDc3IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KLWRxY21zNDc4IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwDQotZHFjbXM0NzkgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KLWRxY21zNDgwIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KLWRxY21zNDgxIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwDQotZHFjbXM0ODIgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KLWRxY21zNDgzIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KLWRxY21zNDg3IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFKzg5IC0+IDANCi1kcWNtczQ4OCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFLTg5IC0+IDANCi1kcWNtczQ4OSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUrODkgLT4gMA0KLWRxY21zNDkwIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFLTg5IC0+IDANCi1kcWNtczQ5MSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFKzg5IC0+IDANCi1kcWNtczQ5MiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUtODkgLT4gMA0KLWRxY21zNDkzIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFKzg5IC0+IDANCi1kcWNtczQ5NCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFLTg5IC0+IDANCi1kcWNtczQ5NSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUrODkgLT4gMA0KLWRxY21zNDk2IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFLTg5IC0+IDANCi1kcWNtczQ5NyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCi0NCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQotZHFjbXM1MDAgY29tcGFyZXNpZyAgICAxICAgICAxRS0xNSAgICAtPiAxDQotZHFjbXM1MDEgY29tcGFyZXNpZyAgICAxICAgICAxRS0xNCAgICAtPiAxDQotZHFjbXM1MDIgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMyAgICAtPiAxDQotZHFjbXM1MDMgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMiAgICAtPiAxDQotZHFjbXM1MDQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMSAgICAtPiAxDQotZHFjbXM1MDUgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMCAgICAtPiAxDQotZHFjbXM1MDYgY29tcGFyZXNpZyAgICAxICAgICAxRS05ICAgICAtPiAxDQotZHFjbXM1MDcgY29tcGFyZXNpZyAgICAxICAgICAxRS04ICAgICAtPiAxDQotZHFjbXM1MDggY29tcGFyZXNpZyAgICAxICAgICAxRS03ICAgICAtPiAxDQotZHFjbXM1MDkgY29tcGFyZXNpZyAgICAxICAgICAxRS02ICAgICAtPiAxDQotZHFjbXM1MTAgY29tcGFyZXNpZyAgICAxICAgICAxRS01ICAgICAtPiAxDQotZHFjbXM1MTEgY29tcGFyZXNpZyAgICAxICAgICAxRS00ICAgICAtPiAxDQotZHFjbXM1MTIgY29tcGFyZXNpZyAgICAxICAgICAxRS0zICAgICAtPiAxDQotZHFjbXM1MTMgY29tcGFyZXNpZyAgICAxICAgICAxRS0yICAgICAtPiAxDQotZHFjbXM1MTQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xICAgICAtPiAxDQotZHFjbXM1MTUgY29tcGFyZXNpZyAgICAxICAgICAxRS0wICAgICAtPiAwDQotZHFjbXM1MTYgY29tcGFyZXNpZyAgICAxICAgICAxRSsxICAgICAtPiAtMQ0KLWRxY21zNTE3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMiAgICAgLT4gLTENCi1kcWNtczUxOCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzMgICAgIC0+IC0xDQotZHFjbXM1MTkgY29tcGFyZXNpZyAgICAxICAgICAxRSs0ICAgICAtPiAtMQ0KLWRxY21zNTIxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNSAgICAgLT4gLTENCi1kcWNtczUyMiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzYgICAgIC0+IC0xDQotZHFjbXM1MjMgY29tcGFyZXNpZyAgICAxICAgICAxRSs3ICAgICAtPiAtMQ0KLWRxY21zNTI0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOCAgICAgLT4gLTENCi1kcWNtczUyNSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzkgICAgIC0+IC0xDQotZHFjbXM1MjYgY29tcGFyZXNpZyAgICAxICAgICAxRSsxMCAgICAtPiAtMQ0KLWRxY21zNTI3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTEgICAgLT4gLTENCi1kcWNtczUyOCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEyICAgIC0+IC0xDQotZHFjbXM1MjkgY29tcGFyZXNpZyAgICAxICAgICAxRSsxMyAgICAtPiAtMQ0KLWRxY21zNTMwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTQgICAgLT4gLTENCi1kcWNtczUzMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xDQotLS0gTFIgc3dhcA0KLWRxY21zNTQwIGNvbXBhcmVzaWcgICAgMUUtMTUgIDEgICAgICAgLT4gLTENCi1kcWNtczU0MSBjb21wYXJlc2lnICAgIDFFLTE0ICAxICAgICAgIC0+IC0xDQotZHFjbXM1NDIgY29tcGFyZXNpZyAgICAxRS0xMyAgMSAgICAgICAtPiAtMQ0KLWRxY21zNTQzIGNvbXBhcmVzaWcgICAgMUUtMTIgIDEgICAgICAgLT4gLTENCi1kcWNtczU0NCBjb21wYXJlc2lnICAgIDFFLTExICAxICAgICAgIC0+IC0xDQotZHFjbXM1NDUgY29tcGFyZXNpZyAgICAxRS0xMCAgMSAgICAgICAtPiAtMQ0KLWRxY21zNTQ2IGNvbXBhcmVzaWcgICAgMUUtOSAgIDEgICAgICAgLT4gLTENCi1kcWNtczU0NyBjb21wYXJlc2lnICAgIDFFLTggICAxICAgICAgIC0+IC0xDQotZHFjbXM1NDggY29tcGFyZXNpZyAgICAxRS03ICAgMSAgICAgICAtPiAtMQ0KLWRxY21zNTQ5IGNvbXBhcmVzaWcgICAgMUUtNiAgIDEgICAgICAgLT4gLTENCi1kcWNtczU1MCBjb21wYXJlc2lnICAgIDFFLTUgICAxICAgICAgIC0+IC0xDQotZHFjbXM1NTEgY29tcGFyZXNpZyAgICAxRS00ICAgMSAgICAgICAtPiAtMQ0KLWRxY21zNTUyIGNvbXBhcmVzaWcgICAgMUUtMyAgIDEgICAgICAgLT4gLTENCi1kcWNtczU1MyBjb21wYXJlc2lnICAgIDFFLTIgICAxICAgICAgIC0+IC0xDQotZHFjbXM1NTQgY29tcGFyZXNpZyAgICAxRS0xICAgMSAgICAgICAtPiAtMQ0KLWRxY21zNTU1IGNvbXBhcmVzaWcgICAgMUUtMCAgIDEgICAgICAgLT4gIDANCi1kcWNtczU1NiBjb21wYXJlc2lnICAgIDFFKzEgICAxICAgICAgIC0+ICAxDQotZHFjbXM1NTcgY29tcGFyZXNpZyAgICAxRSsyICAgMSAgICAgICAtPiAgMQ0KLWRxY21zNTU4IGNvbXBhcmVzaWcgICAgMUUrMyAgIDEgICAgICAgLT4gIDENCi1kcWNtczU1OSBjb21wYXJlc2lnICAgIDFFKzQgICAxICAgICAgIC0+ICAxDQotZHFjbXM1NjEgY29tcGFyZXNpZyAgICAxRSs1ICAgMSAgICAgICAtPiAgMQ0KLWRxY21zNTYyIGNvbXBhcmVzaWcgICAgMUUrNiAgIDEgICAgICAgLT4gIDENCi1kcWNtczU2MyBjb21wYXJlc2lnICAgIDFFKzcgICAxICAgICAgIC0+ICAxDQotZHFjbXM1NjQgY29tcGFyZXNpZyAgICAxRSs4ICAgMSAgICAgICAtPiAgMQ0KLWRxY21zNTY1IGNvbXBhcmVzaWcgICAgMUUrOSAgIDEgICAgICAgLT4gIDENCi1kcWNtczU2NiBjb21wYXJlc2lnICAgIDFFKzEwICAxICAgICAgIC0+ICAxDQotZHFjbXM1NjcgY29tcGFyZXNpZyAgICAxRSsxMSAgMSAgICAgICAtPiAgMQ0KLWRxY21zNTY4IGNvbXBhcmVzaWcgICAgMUUrMTIgIDEgICAgICAgLT4gIDENCi1kcWNtczU2OSBjb21wYXJlc2lnICAgIDFFKzEzICAxICAgICAgIC0+ICAxDQotZHFjbXM1NzAgY29tcGFyZXNpZyAgICAxRSsxNCAgMSAgICAgICAtPiAgMQ0KLWRxY21zNTcxIGNvbXBhcmVzaWcgICAgMUUrMTUgIDEgICAgICAgLT4gIDENCi0tLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkNCi1kcWNtczU4MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQ0KLWRxY21zNTgxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxDQotZHFjbXM1ODIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDENCi1kcWNtczU4MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQ0KLWRxY21zNTg0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxDQotZHFjbXM1ODUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDENCi1kcWNtczU4NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQ0KLWRxY21zNTg3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxDQotZHFjbXM1ODggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDENCi1kcWNtczU4OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTENCi1kcWNtczU5MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTENCi1kcWNtczU5MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTENCi1kcWNtczU5MiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTENCi1kcWNtczU5MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTENCi1kcWNtczU5NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTENCi1kcWNtczU5NSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTENCi1kcWNtczU5NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTENCi1kcWNtczU5NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTENCi1kcWNtczU5OCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTENCi1kcWNtczU5OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTENCi0NCi0tLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcw0KLWRxY21zNjAwIGNvbXBhcmVzaWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kcWNtczYwMSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjbXM2MDIgY29tcGFyZXNpZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY21zNjAzIGNvbXBhcmVzaWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kcWNtczYwNCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjbXM2MDUgY29tcGFyZXNpZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY21zNjA2IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTENCi1kcWNtczYwNyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xDQotZHFjbXM2MDggY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQ0KLWRxY21zNjA5IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTENCi1kcWNtczYxMCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxDQotZHFjbXM2MTEgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQ0KLWRxY21zNjEyIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDENCi1kcWNtczYxMyBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxDQotZHFjbXM2MTQgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQ0KLWRxY21zNjE1IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDENCi1kcWNtczYxNiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxDQotZHFjbXM2MTcgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQ0KLWRxY21zNjE4IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDENCi1kcWNtczYxOSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxDQotZHFjbXM2MjAgY29tcGFyZXNpZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY21zNjIxIGNvbXBhcmVzaWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kcWNtczYyMiBjb21wYXJlc2lnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjbXM2MjMgY29tcGFyZXNpZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY21zNjI0IGNvbXBhcmVzaWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDENCi1kcWNtczYyNSBjb21wYXJlc2lnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjbXM2MjYgY29tcGFyZXNpZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY21zNjI3IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDENCi1kcWNtczYyOCBjb21wYXJlc2lnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjbXM2MjkgY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQ0KLWRxY21zNjMwIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTENCi1kcWNtczYzMSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xDQotZHFjbXM2MzIgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQ0KLWRxY21zNjMzIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTENCi1kcWNtczYzNCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xDQotZHFjbXM2MzUgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQ0KLWRxY21zNjM2IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTENCi1kcWNtczYzNyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xDQotZHFjbXM2MzggY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQ0KLWRxY21zNjM5IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTENCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWRxY21zNjQwIGNvbXBhcmVzaWcgICAwICAgICAwICAgLT4gMA0KLWRxY21zNjQxIGNvbXBhcmVzaWcgICAwICAgIC0wICAgLT4gMA0KLWRxY21zNjQyIGNvbXBhcmVzaWcgICAwICAgIC0wLjAgLT4gMA0KLWRxY21zNjQzIGNvbXBhcmVzaWcgICAwICAgICAwLjAgLT4gMA0KLWRxY21zNjQ0IGNvbXBhcmVzaWcgIC0wICAgICAwICAgLT4gMA0KLWRxY21zNjQ1IGNvbXBhcmVzaWcgIC0wICAgIC0wICAgLT4gMA0KLWRxY21zNjQ2IGNvbXBhcmVzaWcgIC0wICAgIC0wLjAgLT4gMA0KLWRxY21zNjQ3IGNvbXBhcmVzaWcgIC0wICAgICAwLjAgLT4gMA0KLWRxY21zNjQ4IGNvbXBhcmVzaWcgICAwLjAgICAwICAgLT4gMA0KLWRxY21zNjQ5IGNvbXBhcmVzaWcgICAwLjAgIC0wICAgLT4gMA0KLWRxY21zNjUwIGNvbXBhcmVzaWcgICAwLjAgIC0wLjAgLT4gMA0KLWRxY21zNjUxIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgLT4gMA0KLWRxY21zNjUyIGNvbXBhcmVzaWcgIC0wLjAgICAwICAgLT4gMA0KLWRxY21zNjUzIGNvbXBhcmVzaWcgIC0wLjAgIC0wICAgLT4gMA0KLWRxY21zNjU0IGNvbXBhcmVzaWcgIC0wLjAgIC0wLjAgLT4gMA0KLWRxY21zNjU1IGNvbXBhcmVzaWcgIC0wLjAgICAwLjAgLT4gMA0KLQ0KLWRxY21zNjU2IGNvbXBhcmVzaWcgIC0wRTEgICAwLjAgLT4gMA0KLWRxY21zNjU3IGNvbXBhcmVzaWcgIC0wRTIgICAwLjAgLT4gMA0KLWRxY21zNjU4IGNvbXBhcmVzaWcgICAwRTEgICAwLjAgLT4gMA0KLWRxY21zNjU5IGNvbXBhcmVzaWcgICAwRTIgICAwLjAgLT4gMA0KLWRxY21zNjYwIGNvbXBhcmVzaWcgIC0wRTEgICAwICAgLT4gMA0KLWRxY21zNjYxIGNvbXBhcmVzaWcgIC0wRTIgICAwICAgLT4gMA0KLWRxY21zNjYyIGNvbXBhcmVzaWcgICAwRTEgICAwICAgLT4gMA0KLWRxY21zNjYzIGNvbXBhcmVzaWcgICAwRTIgICAwICAgLT4gMA0KLWRxY21zNjY0IGNvbXBhcmVzaWcgIC0wRTEgIC0wRTEgLT4gMA0KLWRxY21zNjY1IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTEgLT4gMA0KLWRxY21zNjY2IGNvbXBhcmVzaWcgICAwRTEgIC0wRTEgLT4gMA0KLWRxY21zNjY3IGNvbXBhcmVzaWcgICAwRTIgIC0wRTEgLT4gMA0KLWRxY21zNjY4IGNvbXBhcmVzaWcgIC0wRTEgIC0wRTIgLT4gMA0KLWRxY21zNjY5IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTIgLT4gMA0KLWRxY21zNjcwIGNvbXBhcmVzaWcgICAwRTEgIC0wRTIgLT4gMA0KLWRxY21zNjcxIGNvbXBhcmVzaWcgICAwRTIgIC0wRTIgLT4gMA0KLWRxY21zNjcyIGNvbXBhcmVzaWcgIC0wRTEgICAwRTEgLT4gMA0KLWRxY21zNjczIGNvbXBhcmVzaWcgIC0wRTIgICAwRTEgLT4gMA0KLWRxY21zNjc0IGNvbXBhcmVzaWcgICAwRTEgICAwRTEgLT4gMA0KLWRxY21zNjc1IGNvbXBhcmVzaWcgICAwRTIgICAwRTEgLT4gMA0KLWRxY21zNjc2IGNvbXBhcmVzaWcgIC0wRTEgICAwRTIgLT4gMA0KLWRxY21zNjc3IGNvbXBhcmVzaWcgIC0wRTIgICAwRTIgLT4gMA0KLWRxY21zNjc4IGNvbXBhcmVzaWcgICAwRTEgICAwRTIgLT4gMA0KLWRxY21zNjc5IGNvbXBhcmVzaWcgICAwRTIgICAwRTIgLT4gMA0KLQ0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCi1kcWNtczY4MCBjb21wYXJlc2lnICAgMTIgICAgMTIgICAgICAgICAgIC0+IDANCi1kcWNtczY4MSBjb21wYXJlc2lnICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDANCi1kcWNtczY4MiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDANCi1kcWNtczY4MyBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDANCi1kcWNtczY4NCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDANCi1kcWNtczY4NSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDANCi1kcWNtczY4NiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDANCi1kcWNtczY4NyBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDANCi1kcWNtczY4OCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDANCi1kcWNtczY4OSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDANCi1kcWNtczY5MCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAgIDEyIC0+IDANCi1kcWNtczY5MSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDANCi1kcWNtczY5MiBjb21wYXJlc2lnICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDANCi1kcWNtczY5MyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAgIDEyIC0+IDANCi1kcWNtczY5NCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDANCi1kcWNtczY5NSBjb21wYXJlc2lnICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDANCi1kcWNtczY5NiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IDANCi1kcWNtczY5NyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDANCi1kcWNtczY5OCBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDANCi1kcWNtczY5OSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IDANCi0NCi0tLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQNCi1kcWNtczcwMCBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU1IC0+IDENCi1kcWNtczcwMSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDANCi1kcWNtczcwMiBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU3IC0+IC0xDQotZHFjbXM3MDMgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMDIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAxDQotZHFjbXM3MDQgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwDQotZHFjbXM3MDUgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMjIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQ0KLWRxY21zNzA2IGNvbXBhcmVzaWcgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEwMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQ0KLWRxY21zNzA3IGNvbXBhcmVzaWcgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMA0KLWRxY21zNzA4IGNvbXBhcmVzaWcgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTENCi0NCi0tLSBtaXNjZWxsYW5lb3VzDQotZHFjbXM3MjEgY29tcGFyZXNpZyAxMjM0NTY3ODAwMCAxIC0+IDENCi1kcWNtczcyMiBjb21wYXJlc2lnIDEgMTIzNDU2NzgwMDAgLT4gLTENCi1kcWNtczcyMyBjb21wYXJlc2lnIDEyMzQ1Njc4MDAgIDEgLT4gMQ0KLWRxY21zNzI0IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODAwICAtPiAtMQ0KLWRxY21zNzI1IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MCAgMSAtPiAxDQotZHFjbXM3MjYgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAgIC0+IC0xDQotZHFjbXM3MjcgY29tcGFyZXNpZyAxMjM0NTY3ODkxICAxIC0+IDENCi1kcWNtczcyOCBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MSAgLT4gLTENCi1kcWNtczcyOSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAxIDEgLT4gMQ0KLWRxY21zNzMwIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwMSAtPiAtMQ0KLWRxY21zNzMxIGNvbXBhcmVzaWcgMTIzNDU2Nzg5NiAgMSAtPiAxDQotZHFjbXM3MzIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTYgIC0+IC0xDQotDQotLS0gcmVzaWR1ZSBjYXNlcyBhdCBsb3dlciBwcmVjaXNpb24NCi1kcWNtczc0MCBjb21wYXJlc2lnICAxICAwLjk5OTk5OTkgIC0+IDENCi1kcWNtczc0MSBjb21wYXJlc2lnICAxICAwLjk5OTk5OSAgIC0+IDENCi1kcWNtczc0MiBjb21wYXJlc2lnICAxICAwLjk5OTk5ICAgIC0+IDENCi1kcWNtczc0MyBjb21wYXJlc2lnICAxICAxLjAwMDAgICAgIC0+IDANCi1kcWNtczc0NCBjb21wYXJlc2lnICAxICAxLjAwMDAxICAgIC0+IC0xDQotZHFjbXM3NDUgY29tcGFyZXNpZyAgMSAgMS4wMDAwMDEgICAtPiAtMQ0KLWRxY21zNzQ2IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAwMSAgLT4gLTENCi1kcWNtczc1MCBjb21wYXJlc2lnICAwLjk5OTk5OTkgIDEgIC0+IC0xDQotZHFjbXM3NTEgY29tcGFyZXNpZyAgMC45OTk5OTkgICAxICAtPiAtMQ0KLWRxY21zNzUyIGNvbXBhcmVzaWcgIDAuOTk5OTkgICAgMSAgLT4gLTENCi1kcWNtczc1MyBjb21wYXJlc2lnICAxLjAwMDAgICAgIDEgIC0+IDANCi1kcWNtczc1NCBjb21wYXJlc2lnICAxLjAwMDAxICAgIDEgIC0+IDENCi1kcWNtczc1NSBjb21wYXJlc2lnICAxLjAwMDAwMSAgIDEgIC0+IDENCi1kcWNtczc1NiBjb21wYXJlc2lnICAxLjAwMDAwMDEgIDEgIC0+IDENCi0NCi0tLSBTcGVjaWFscw0KLWRxY21zNzgwIGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxDQotZHFjbXM3ODEgY29tcGFyZXNpZyAgSW5mICAtMTAwMCAgLT4gIDENCi1kcWNtczc4MiBjb21wYXJlc2lnICBJbmYgIC0xICAgICAtPiAgMQ0KLWRxY21zNzgzIGNvbXBhcmVzaWcgIEluZiAgLTAgICAgIC0+ICAxDQotZHFjbXM3ODQgY29tcGFyZXNpZyAgSW5mICAgMCAgICAgLT4gIDENCi1kcWNtczc4NSBjb21wYXJlc2lnICBJbmYgICAxICAgICAtPiAgMQ0KLWRxY21zNzg2IGNvbXBhcmVzaWcgIEluZiAgIDEwMDAgIC0+ICAxDQotZHFjbXM3ODcgY29tcGFyZXNpZyAgSW5mICAgSW5mICAgLT4gIDANCi1kcWNtczc4OCBjb21wYXJlc2lnIC0xMDAwICBJbmYgICAtPiAtMQ0KLWRxY21zNzg5IGNvbXBhcmVzaWcgLUluZiAgIEluZiAgIC0+IC0xDQotZHFjbXM3OTAgY29tcGFyZXNpZyAtMSAgICAgSW5mICAgLT4gLTENCi1kcWNtczc5MSBjb21wYXJlc2lnIC0wICAgICBJbmYgICAtPiAtMQ0KLWRxY21zNzkyIGNvbXBhcmVzaWcgIDAgICAgIEluZiAgIC0+IC0xDQotZHFjbXM3OTMgY29tcGFyZXNpZyAgMSAgICAgSW5mICAgLT4gLTENCi1kcWNtczc5NCBjb21wYXJlc2lnICAxMDAwICBJbmYgICAtPiAtMQ0KLWRxY21zNzk1IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwDQotDQotZHFjbXM4MDAgY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gIDANCi1kcWNtczgwMSBjb21wYXJlc2lnIC1JbmYgIC0xMDAwICAtPiAtMQ0KLWRxY21zODAyIGNvbXBhcmVzaWcgLUluZiAgLTEgICAgIC0+IC0xDQotZHFjbXM4MDMgY29tcGFyZXNpZyAtSW5mICAtMCAgICAgLT4gLTENCi1kcWNtczgwNCBjb21wYXJlc2lnIC1JbmYgICAwICAgICAtPiAtMQ0KLWRxY21zODA1IGNvbXBhcmVzaWcgLUluZiAgIDEgICAgIC0+IC0xDQotZHFjbXM4MDYgY29tcGFyZXNpZyAtSW5mICAgMTAwMCAgLT4gLTENCi1kcWNtczgwNyBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQ0KLWRxY21zODA4IGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwDQotZHFjbXM4MDkgY29tcGFyZXNpZyAtMTAwMCAtSW5mICAgLT4gIDENCi1kcWNtczgxMCBjb21wYXJlc2lnIC0xICAgIC1JbmYgICAtPiAgMQ0KLWRxY21zODExIGNvbXBhcmVzaWcgLTAgICAgLUluZiAgIC0+ICAxDQotZHFjbXM4MTIgY29tcGFyZXNpZyAgMCAgICAtSW5mICAgLT4gIDENCi1kcWNtczgxMyBjb21wYXJlc2lnICAxICAgIC1JbmYgICAtPiAgMQ0KLWRxY21zODE0IGNvbXBhcmVzaWcgIDEwMDAgLUluZiAgIC0+ICAxDQotZHFjbXM4MTUgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDENCi0NCi1kcWNtczgyMSBjb21wYXJlc2lnICBOYU4gLUluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODIyIGNvbXBhcmVzaWcgIE5hTiAtMTAwMCAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MjMgY29tcGFyZXNpZyAgTmFOIC0xICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgyNCBjb21wYXJlc2lnICBOYU4gLTAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODI1IGNvbXBhcmVzaWcgIE5hTiAgMCAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MjYgY29tcGFyZXNpZyAgTmFOICAxICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgyNyBjb21wYXJlc2lnICBOYU4gIDEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODI4IGNvbXBhcmVzaWcgIE5hTiAgSW5mICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MjkgY29tcGFyZXNpZyAgTmFOICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgzMCBjb21wYXJlc2lnIC1JbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODMxIGNvbXBhcmVzaWcgLTEwMDAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MzIgY29tcGFyZXNpZyAtMSAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgzMyBjb21wYXJlc2lnIC0wICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODM0IGNvbXBhcmVzaWcgIDAgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MzUgY29tcGFyZXNpZyAgMSAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgzNiBjb21wYXJlc2lnICAxMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODM3IGNvbXBhcmVzaWcgIEluZiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MzggY29tcGFyZXNpZyAtTmFOIC1OYU4gICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgzOSBjb21wYXJlc2lnICtOYU4gLU5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODQwIGNvbXBhcmVzaWcgLU5hTiArTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFjbXM4NDEgY29tcGFyZXNpZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg0MiBjb21wYXJlc2lnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODQzIGNvbXBhcmVzaWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NDQgY29tcGFyZXNpZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg0NSBjb21wYXJlc2lnICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODQ2IGNvbXBhcmVzaWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NDcgY29tcGFyZXNpZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg0OCBjb21wYXJlc2lnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODQ5IGNvbXBhcmVzaWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NTAgY29tcGFyZXNpZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg1MSBjb21wYXJlc2lnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODUyIGNvbXBhcmVzaWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NTMgY29tcGFyZXNpZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg1NCBjb21wYXJlc2lnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODU1IGNvbXBhcmVzaWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NTYgY29tcGFyZXNpZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg1NyBjb21wYXJlc2lnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODU4IGNvbXBhcmVzaWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NTkgY29tcGFyZXNpZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFjbXM4NjAgY29tcGFyZXNpZyAgTmFOOSAtSW5mICAgLT4gIE5hTjkgICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg2MSBjb21wYXJlc2lnICBOYU44ICA5OTkgICAtPiAgTmFOOCAgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODYyIGNvbXBhcmVzaWcgIE5hTjc3IEluZiAgIC0+ICBOYU43NyAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NjMgY29tcGFyZXNpZyAtTmFONjcgTmFONSAgLT4gLU5hTjY3ICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg2NCBjb21wYXJlc2lnIC1JbmYgIC1OYU40ICAtPiAtTmFONCAgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODY1IGNvbXBhcmVzaWcgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMyAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NjYgY29tcGFyZXNpZyAgSW5mICAgTmFOMiAgLT4gIE5hTjIgICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg2NyBjb21wYXJlc2lnIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODY4IGNvbXBhcmVzaWcgK05hTjQxIC1OYU40MiAtPiAgTmFONDEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NjkgY29tcGFyZXNpZyAtTmFONDEgK05hTjQyIC0+IC1OYU40MSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg3MCBjb21wYXJlc2lnICtOYU40MSArTmFONDIgLT4gIE5hTjQxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxY21zODcxIGNvbXBhcmVzaWcgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODcyIGNvbXBhcmVzaWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODczIGNvbXBhcmVzaWcgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODc0IGNvbXBhcmVzaWcgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODc1IGNvbXBhcmVzaWcgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODc2IGNvbXBhcmVzaWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODc3IGNvbXBhcmVzaWcgIDA4OCAgICBzTmFOODEgIC0+ICBOYU44MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODc4IGNvbXBhcmVzaWcgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODc5IGNvbXBhcmVzaWcgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHdpZGUgcmFuZ2UNCi1kcWNtczg4MCBjb21wYXJlc2lnICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzYxNDQgLT4gLTENCi1kcWNtczg4MSBjb21wYXJlc2lnIDlFKzYxNDQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDENCi1kcWNtczg4MiBjb21wYXJlc2lnICswLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gIDENCi1kcWNtczg4MyBjb21wYXJlc2lnIDlFLTYxNDMgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTENCi1kcWNtczg4NSBjb21wYXJlc2lnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzYxNDQgLT4gLTENCi1kcWNtczg4NiBjb21wYXJlc2lnIDlFKzYxNDQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDENCi1kcWNtczg4NyBjb21wYXJlc2lnIC0wLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gLTENCi1kcWNtczg4OCBjb21wYXJlc2lnIDlFLTYxNDMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDENCi0NCi0tLSBzaWducw0KLWRxY21zOTAxIGNvbXBhcmVzaWcgIDFlKzc3ICAxZSsxMSAtPiAgMQ0KLWRxY21zOTAyIGNvbXBhcmVzaWcgIDFlKzc3IC0xZSsxMSAtPiAgMQ0KLWRxY21zOTAzIGNvbXBhcmVzaWcgLTFlKzc3ICAxZSsxMSAtPiAtMQ0KLWRxY21zOTA0IGNvbXBhcmVzaWcgLTFlKzc3IC0xZSsxMSAtPiAtMQ0KLWRxY21zOTA1IGNvbXBhcmVzaWcgIDFlLTc3ICAxZS0xMSAtPiAtMQ0KLWRxY21zOTA2IGNvbXBhcmVzaWcgIDFlLTc3IC0xZS0xMSAtPiAgMQ0KLWRxY21zOTA3IGNvbXBhcmVzaWcgLTFlLTc3ICAxZS0xMSAtPiAtMQ0KLWRxY21zOTA4IGNvbXBhcmVzaWcgLTFlLTc3IC0xZS0xMSAtPiAgMQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcWNtczk5MCBjb21wYXJlc2lnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zOTkxIGNvbXBhcmVzaWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNvbXBhcmVTaWcuZGVjVGVzdCAtLSBkZWNRdWFkIGNvbXBhcmlzb247IGFsbCBOYU5zIHNpZ25hbCAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFjbXMwMDEgY29tcGFyZXNpZyAgLTIgIC0yICAtPiAwCitkcWNtczAwMiBjb21wYXJlc2lnICAtMiAgLTEgIC0+IC0xCitkcWNtczAwMyBjb21wYXJlc2lnICAtMiAgIDAgIC0+IC0xCitkcWNtczAwNCBjb21wYXJlc2lnICAtMiAgIDEgIC0+IC0xCitkcWNtczAwNSBjb21wYXJlc2lnICAtMiAgIDIgIC0+IC0xCitkcWNtczAwNiBjb21wYXJlc2lnICAtMSAgLTIgIC0+IDEKK2RxY21zMDA3IGNvbXBhcmVzaWcgIC0xICAtMSAgLT4gMAorZHFjbXMwMDggY29tcGFyZXNpZyAgLTEgICAwICAtPiAtMQorZHFjbXMwMDkgY29tcGFyZXNpZyAgLTEgICAxICAtPiAtMQorZHFjbXMwMTAgY29tcGFyZXNpZyAgLTEgICAyICAtPiAtMQorZHFjbXMwMTEgY29tcGFyZXNpZyAgIDAgIC0yICAtPiAxCitkcWNtczAxMiBjb21wYXJlc2lnICAgMCAgLTEgIC0+IDEKK2RxY21zMDEzIGNvbXBhcmVzaWcgICAwICAgMCAgLT4gMAorZHFjbXMwMTQgY29tcGFyZXNpZyAgIDAgICAxICAtPiAtMQorZHFjbXMwMTUgY29tcGFyZXNpZyAgIDAgICAyICAtPiAtMQorZHFjbXMwMTYgY29tcGFyZXNpZyAgIDEgIC0yICAtPiAxCitkcWNtczAxNyBjb21wYXJlc2lnICAgMSAgLTEgIC0+IDEKK2RxY21zMDE4IGNvbXBhcmVzaWcgICAxICAgMCAgLT4gMQorZHFjbXMwMTkgY29tcGFyZXNpZyAgIDEgICAxICAtPiAwCitkcWNtczAyMCBjb21wYXJlc2lnICAgMSAgIDIgIC0+IC0xCitkcWNtczAyMSBjb21wYXJlc2lnICAgMiAgLTIgIC0+IDEKK2RxY21zMDIyIGNvbXBhcmVzaWcgICAyICAtMSAgLT4gMQorZHFjbXMwMjMgY29tcGFyZXNpZyAgIDIgICAwICAtPiAxCitkcWNtczAyNSBjb21wYXJlc2lnICAgMiAgIDEgIC0+IDEKK2RxY21zMDI2IGNvbXBhcmVzaWcgICAyICAgMiAgLT4gMAorCitkcWNtczAzMSBjb21wYXJlc2lnICAtMjAgIC0yMCAgLT4gMAorZHFjbXMwMzIgY29tcGFyZXNpZyAgLTIwICAtMTAgIC0+IC0xCitkcWNtczAzMyBjb21wYXJlc2lnICAtMjAgICAwMCAgLT4gLTEKK2RxY21zMDM0IGNvbXBhcmVzaWcgIC0yMCAgIDEwICAtPiAtMQorZHFjbXMwMzUgY29tcGFyZXNpZyAgLTIwICAgMjAgIC0+IC0xCitkcWNtczAzNiBjb21wYXJlc2lnICAtMTAgIC0yMCAgLT4gMQorZHFjbXMwMzcgY29tcGFyZXNpZyAgLTEwICAtMTAgIC0+IDAKK2RxY21zMDM4IGNvbXBhcmVzaWcgIC0xMCAgIDAwICAtPiAtMQorZHFjbXMwMzkgY29tcGFyZXNpZyAgLTEwICAgMTAgIC0+IC0xCitkcWNtczA0MCBjb21wYXJlc2lnICAtMTAgICAyMCAgLT4gLTEKK2RxY21zMDQxIGNvbXBhcmVzaWcgICAwMCAgLTIwICAtPiAxCitkcWNtczA0MiBjb21wYXJlc2lnICAgMDAgIC0xMCAgLT4gMQorZHFjbXMwNDMgY29tcGFyZXNpZyAgIDAwICAgMDAgIC0+IDAKK2RxY21zMDQ0IGNvbXBhcmVzaWcgICAwMCAgIDEwICAtPiAtMQorZHFjbXMwNDUgY29tcGFyZXNpZyAgIDAwICAgMjAgIC0+IC0xCitkcWNtczA0NiBjb21wYXJlc2lnICAgMTAgIC0yMCAgLT4gMQorZHFjbXMwNDcgY29tcGFyZXNpZyAgIDEwICAtMTAgIC0+IDEKK2RxY21zMDQ4IGNvbXBhcmVzaWcgICAxMCAgIDAwICAtPiAxCitkcWNtczA0OSBjb21wYXJlc2lnICAgMTAgICAxMCAgLT4gMAorZHFjbXMwNTAgY29tcGFyZXNpZyAgIDEwICAgMjAgIC0+IC0xCitkcWNtczA1MSBjb21wYXJlc2lnICAgMjAgIC0yMCAgLT4gMQorZHFjbXMwNTIgY29tcGFyZXNpZyAgIDIwICAtMTAgIC0+IDEKK2RxY21zMDUzIGNvbXBhcmVzaWcgICAyMCAgIDAwICAtPiAxCitkcWNtczA1NSBjb21wYXJlc2lnICAgMjAgICAxMCAgLT4gMQorZHFjbXMwNTYgY29tcGFyZXNpZyAgIDIwICAgMjAgIC0+IDAKKworZHFjbXMwNjEgY29tcGFyZXNpZyAgLTIuMCAgLTIuMCAgLT4gMAorZHFjbXMwNjIgY29tcGFyZXNpZyAgLTIuMCAgLTEuMCAgLT4gLTEKK2RxY21zMDYzIGNvbXBhcmVzaWcgIC0yLjAgICAwLjAgIC0+IC0xCitkcWNtczA2NCBjb21wYXJlc2lnICAtMi4wICAgMS4wICAtPiAtMQorZHFjbXMwNjUgY29tcGFyZXNpZyAgLTIuMCAgIDIuMCAgLT4gLTEKK2RxY21zMDY2IGNvbXBhcmVzaWcgIC0xLjAgIC0yLjAgIC0+IDEKK2RxY21zMDY3IGNvbXBhcmVzaWcgIC0xLjAgIC0xLjAgIC0+IDAKK2RxY21zMDY4IGNvbXBhcmVzaWcgIC0xLjAgICAwLjAgIC0+IC0xCitkcWNtczA2OSBjb21wYXJlc2lnICAtMS4wICAgMS4wICAtPiAtMQorZHFjbXMwNzAgY29tcGFyZXNpZyAgLTEuMCAgIDIuMCAgLT4gLTEKK2RxY21zMDcxIGNvbXBhcmVzaWcgICAwLjAgIC0yLjAgIC0+IDEKK2RxY21zMDcyIGNvbXBhcmVzaWcgICAwLjAgIC0xLjAgIC0+IDEKK2RxY21zMDczIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgIC0+IDAKK2RxY21zMDc0IGNvbXBhcmVzaWcgICAwLjAgICAxLjAgIC0+IC0xCitkcWNtczA3NSBjb21wYXJlc2lnICAgMC4wICAgMi4wICAtPiAtMQorZHFjbXMwNzYgY29tcGFyZXNpZyAgIDEuMCAgLTIuMCAgLT4gMQorZHFjbXMwNzcgY29tcGFyZXNpZyAgIDEuMCAgLTEuMCAgLT4gMQorZHFjbXMwNzggY29tcGFyZXNpZyAgIDEuMCAgIDAuMCAgLT4gMQorZHFjbXMwNzkgY29tcGFyZXNpZyAgIDEuMCAgIDEuMCAgLT4gMAorZHFjbXMwODAgY29tcGFyZXNpZyAgIDEuMCAgIDIuMCAgLT4gLTEKK2RxY21zMDgxIGNvbXBhcmVzaWcgICAyLjAgIC0yLjAgIC0+IDEKK2RxY21zMDgyIGNvbXBhcmVzaWcgICAyLjAgIC0xLjAgIC0+IDEKK2RxY21zMDgzIGNvbXBhcmVzaWcgICAyLjAgICAwLjAgIC0+IDEKK2RxY21zMDg1IGNvbXBhcmVzaWcgICAyLjAgICAxLjAgIC0+IDEKK2RxY21zMDg2IGNvbXBhcmVzaWcgICAyLjAgICAyLjAgIC0+IDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkcWNtczA5MCBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMAorZHFjbXMwOTEgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC0xCitkcWNtczA5MiBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQorZHFjbXMwOTMgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCitkcWNtczEwMCBjb21wYXJlc2lnICAgNy4wICAgIDcuMCAgICAtPiAwCitkcWNtczEwMSBjb21wYXJlc2lnICAgNy4wICAgIDcgICAgICAtPiAwCitkcWNtczEwMiBjb21wYXJlc2lnICAgNyAgICAgIDcuMCAgICAtPiAwCitkcWNtczEwMyBjb21wYXJlc2lnICAgN0UrMCAgIDcuMCAgICAtPiAwCitkcWNtczEwNCBjb21wYXJlc2lnICAgNzBFLTEgIDcuMCAgICAtPiAwCitkcWNtczEwNSBjb21wYXJlc2lnICAgMC43RSsxIDcgICAgICAtPiAwCitkcWNtczEwNiBjb21wYXJlc2lnICAgNzBFLTEgIDcgICAgICAtPiAwCitkcWNtczEwNyBjb21wYXJlc2lnICAgNy4wICAgIDdFKzAgICAtPiAwCitkcWNtczEwOCBjb21wYXJlc2lnICAgNy4wICAgIDcwRS0xICAtPiAwCitkcWNtczEwOSBjb21wYXJlc2lnICAgNyAgICAgIDAuN0UrMSAtPiAwCitkcWNtczExMCBjb21wYXJlc2lnICAgNyAgICAgIDcwRS0xICAtPiAwCisKK2RxY21zMTIwIGNvbXBhcmVzaWcgICA4LjAgICAgNy4wICAgIC0+IDEKK2RxY21zMTIxIGNvbXBhcmVzaWcgICA4LjAgICAgNyAgICAgIC0+IDEKK2RxY21zMTIyIGNvbXBhcmVzaWcgICA4ICAgICAgNy4wICAgIC0+IDEKK2RxY21zMTIzIGNvbXBhcmVzaWcgICA4RSswICAgNy4wICAgIC0+IDEKK2RxY21zMTI0IGNvbXBhcmVzaWcgICA4MEUtMSAgNy4wICAgIC0+IDEKK2RxY21zMTI1IGNvbXBhcmVzaWcgICAwLjhFKzEgNyAgICAgIC0+IDEKK2RxY21zMTI2IGNvbXBhcmVzaWcgICA4MEUtMSAgNyAgICAgIC0+IDEKK2RxY21zMTI3IGNvbXBhcmVzaWcgICA4LjAgICAgN0UrMCAgIC0+IDEKK2RxY21zMTI4IGNvbXBhcmVzaWcgICA4LjAgICAgNzBFLTEgIC0+IDEKK2RxY21zMTI5IGNvbXBhcmVzaWcgICA4ICAgICAgMC43RSsxICAtPiAxCitkcWNtczEzMCBjb21wYXJlc2lnICAgOCAgICAgIDcwRS0xICAtPiAxCisKK2RxY21zMTQwIGNvbXBhcmVzaWcgICA4LjAgICAgOS4wICAgIC0+IC0xCitkcWNtczE0MSBjb21wYXJlc2lnICAgOC4wICAgIDkgICAgICAtPiAtMQorZHFjbXMxNDIgY29tcGFyZXNpZyAgIDggICAgICA5LjAgICAgLT4gLTEKK2RxY21zMTQzIGNvbXBhcmVzaWcgICA4RSswICAgOS4wICAgIC0+IC0xCitkcWNtczE0NCBjb21wYXJlc2lnICAgODBFLTEgIDkuMCAgICAtPiAtMQorZHFjbXMxNDUgY29tcGFyZXNpZyAgIDAuOEUrMSA5ICAgICAgLT4gLTEKK2RxY21zMTQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgOSAgICAgIC0+IC0xCitkcWNtczE0NyBjb21wYXJlc2lnICAgOC4wICAgIDlFKzAgICAtPiAtMQorZHFjbXMxNDggY29tcGFyZXNpZyAgIDguMCAgICA5MEUtMSAgLT4gLTEKK2RxY21zMTQ5IGNvbXBhcmVzaWcgICA4ICAgICAgMC45RSsxIC0+IC0xCitkcWNtczE1MCBjb21wYXJlc2lnICAgOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitkcWNtczIwMCBjb21wYXJlc2lnICAtNy4wICAgIDcuMCAgICAtPiAtMQorZHFjbXMyMDEgY29tcGFyZXNpZyAgLTcuMCAgICA3ICAgICAgLT4gLTEKK2RxY21zMjAyIGNvbXBhcmVzaWcgIC03ICAgICAgNy4wICAgIC0+IC0xCitkcWNtczIwMyBjb21wYXJlc2lnICAtN0UrMCAgIDcuMCAgICAtPiAtMQorZHFjbXMyMDQgY29tcGFyZXNpZyAgLTcwRS0xICA3LjAgICAgLT4gLTEKK2RxY21zMjA1IGNvbXBhcmVzaWcgIC0wLjdFKzEgNyAgICAgIC0+IC0xCitkcWNtczIwNiBjb21wYXJlc2lnICAtNzBFLTEgIDcgICAgICAtPiAtMQorZHFjbXMyMDcgY29tcGFyZXNpZyAgLTcuMCAgICA3RSswICAgLT4gLTEKK2RxY21zMjA4IGNvbXBhcmVzaWcgIC03LjAgICAgNzBFLTEgIC0+IC0xCitkcWNtczIwOSBjb21wYXJlc2lnICAtNyAgICAgIDAuN0UrMSAtPiAtMQorZHFjbXMyMTAgY29tcGFyZXNpZyAgLTcgICAgICA3MEUtMSAgLT4gLTEKKworZHFjbXMyMjAgY29tcGFyZXNpZyAgLTguMCAgICA3LjAgICAgLT4gLTEKK2RxY21zMjIxIGNvbXBhcmVzaWcgIC04LjAgICAgNyAgICAgIC0+IC0xCitkcWNtczIyMiBjb21wYXJlc2lnICAtOCAgICAgIDcuMCAgICAtPiAtMQorZHFjbXMyMjMgY29tcGFyZXNpZyAgLThFKzAgICA3LjAgICAgLT4gLTEKK2RxY21zMjI0IGNvbXBhcmVzaWcgIC04MEUtMSAgNy4wICAgIC0+IC0xCitkcWNtczIyNSBjb21wYXJlc2lnICAtMC44RSsxIDcgICAgICAtPiAtMQorZHFjbXMyMjYgY29tcGFyZXNpZyAgLTgwRS0xICA3ICAgICAgLT4gLTEKK2RxY21zMjI3IGNvbXBhcmVzaWcgIC04LjAgICAgN0UrMCAgIC0+IC0xCitkcWNtczIyOCBjb21wYXJlc2lnICAtOC4wICAgIDcwRS0xICAtPiAtMQorZHFjbXMyMjkgY29tcGFyZXNpZyAgLTggICAgICAwLjdFKzEgLT4gLTEKK2RxY21zMjMwIGNvbXBhcmVzaWcgIC04ICAgICAgNzBFLTEgIC0+IC0xCisKK2RxY21zMjQwIGNvbXBhcmVzaWcgIC04LjAgICAgOS4wICAgIC0+IC0xCitkcWNtczI0MSBjb21wYXJlc2lnICAtOC4wICAgIDkgICAgICAtPiAtMQorZHFjbXMyNDIgY29tcGFyZXNpZyAgLTggICAgICA5LjAgICAgLT4gLTEKK2RxY21zMjQzIGNvbXBhcmVzaWcgIC04RSswICAgOS4wICAgIC0+IC0xCitkcWNtczI0NCBjb21wYXJlc2lnICAtODBFLTEgIDkuMCAgICAtPiAtMQorZHFjbXMyNDUgY29tcGFyZXNpZyAgLTAuOEUrMSA5ICAgICAgLT4gLTEKK2RxY21zMjQ2IGNvbXBhcmVzaWcgIC04MEUtMSAgOSAgICAgIC0+IC0xCitkcWNtczI0NyBjb21wYXJlc2lnICAtOC4wICAgIDlFKzAgICAtPiAtMQorZHFjbXMyNDggY29tcGFyZXNpZyAgLTguMCAgICA5MEUtMSAgLT4gLTEKK2RxY21zMjQ5IGNvbXBhcmVzaWcgIC04ICAgICAgMC45RSsxIC0+IC0xCitkcWNtczI1MCBjb21wYXJlc2lnICAtOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitkcWNtczMwMCBjb21wYXJlc2lnICAgNy4wICAgIC03LjAgICAgLT4gMQorZHFjbXMzMDEgY29tcGFyZXNpZyAgIDcuMCAgICAtNyAgICAgIC0+IDEKK2RxY21zMzAyIGNvbXBhcmVzaWcgICA3ICAgICAgLTcuMCAgICAtPiAxCitkcWNtczMwMyBjb21wYXJlc2lnICAgN0UrMCAgIC03LjAgICAgLT4gMQorZHFjbXMzMDQgY29tcGFyZXNpZyAgIDcwRS0xICAtNy4wICAgIC0+IDEKK2RxY21zMzA1IGNvbXBhcmVzaWcgICAuN0UrMSAgLTcgICAgICAtPiAxCitkcWNtczMwNiBjb21wYXJlc2lnICAgNzBFLTEgIC03ICAgICAgLT4gMQorZHFjbXMzMDcgY29tcGFyZXNpZyAgIDcuMCAgICAtN0UrMCAgIC0+IDEKK2RxY21zMzA4IGNvbXBhcmVzaWcgICA3LjAgICAgLTcwRS0xICAtPiAxCitkcWNtczMwOSBjb21wYXJlc2lnICAgNyAgICAgIC0uN0UrMSAgLT4gMQorZHFjbXMzMTAgY29tcGFyZXNpZyAgIDcgICAgICAtNzBFLTEgIC0+IDEKKworZHFjbXMzMjAgY29tcGFyZXNpZyAgIDguMCAgICAtNy4wICAgIC0+IDEKK2RxY21zMzIxIGNvbXBhcmVzaWcgICA4LjAgICAgLTcgICAgICAtPiAxCitkcWNtczMyMiBjb21wYXJlc2lnICAgOCAgICAgIC03LjAgICAgLT4gMQorZHFjbXMzMjMgY29tcGFyZXNpZyAgIDhFKzAgICAtNy4wICAgIC0+IDEKK2RxY21zMzI0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcuMCAgICAtPiAxCitkcWNtczMyNSBjb21wYXJlc2lnICAgLjhFKzEgIC03ICAgICAgLT4gMQorZHFjbXMzMjYgY29tcGFyZXNpZyAgIDgwRS0xICAtNyAgICAgIC0+IDEKK2RxY21zMzI3IGNvbXBhcmVzaWcgICA4LjAgICAgLTdFKzAgICAtPiAxCitkcWNtczMyOCBjb21wYXJlc2lnICAgOC4wICAgIC03MEUtMSAgLT4gMQorZHFjbXMzMjkgY29tcGFyZXNpZyAgIDggICAgICAtLjdFKzEgIC0+IDEKK2RxY21zMzMwIGNvbXBhcmVzaWcgICA4ICAgICAgLTcwRS0xICAtPiAxCisKK2RxY21zMzQwIGNvbXBhcmVzaWcgICA4LjAgICAgLTkuMCAgICAtPiAxCitkcWNtczM0MSBjb21wYXJlc2lnICAgOC4wICAgIC05ICAgICAgLT4gMQorZHFjbXMzNDIgY29tcGFyZXNpZyAgIDggICAgICAtOS4wICAgIC0+IDEKK2RxY21zMzQzIGNvbXBhcmVzaWcgICA4RSswICAgLTkuMCAgICAtPiAxCitkcWNtczM0NCBjb21wYXJlc2lnICAgODBFLTEgIC05LjAgICAgLT4gMQorZHFjbXMzNDUgY29tcGFyZXNpZyAgIC44RSsxICAtOSAgICAgIC0+IDEKK2RxY21zMzQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgLTkgICAgICAtPiAxCitkcWNtczM0NyBjb21wYXJlc2lnICAgOC4wICAgIC05RSswICAgLT4gMQorZHFjbXMzNDggY29tcGFyZXNpZyAgIDguMCAgICAtOTBFLTEgIC0+IDEKK2RxY21zMzQ5IGNvbXBhcmVzaWcgICA4ICAgICAgLS45RSsxICAtPiAxCitkcWNtczM1MCBjb21wYXJlc2lnICAgOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitkcWNtczQwMCBjb21wYXJlc2lnICAgLTcuMCAgICAtNy4wICAgIC0+IDAKK2RxY21zNDAxIGNvbXBhcmVzaWcgICAtNy4wICAgIC03ICAgICAgLT4gMAorZHFjbXM0MDIgY29tcGFyZXNpZyAgIC03ICAgICAgLTcuMCAgICAtPiAwCitkcWNtczQwMyBjb21wYXJlc2lnICAgLTdFKzAgICAtNy4wICAgIC0+IDAKK2RxY21zNDA0IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03LjAgICAgLT4gMAorZHFjbXM0MDUgY29tcGFyZXNpZyAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitkcWNtczQwNiBjb21wYXJlc2lnICAgLTcwRS0xICAtNyAgICAgIC0+IDAKK2RxY21zNDA3IGNvbXBhcmVzaWcgICAtNy4wICAgIC03RSswICAgLT4gMAorZHFjbXM0MDggY29tcGFyZXNpZyAgIC03LjAgICAgLTcwRS0xICAtPiAwCitkcWNtczQwOSBjb21wYXJlc2lnICAgLTcgICAgICAtLjdFKzEgIC0+IDAKK2RxY21zNDEwIGNvbXBhcmVzaWcgICAtNyAgICAgIC03MEUtMSAgLT4gMAorCitkcWNtczQyMCBjb21wYXJlc2lnICAgLTguMCAgICAtNy4wICAgIC0+IC0xCitkcWNtczQyMSBjb21wYXJlc2lnICAgLTguMCAgICAtNyAgICAgIC0+IC0xCitkcWNtczQyMiBjb21wYXJlc2lnICAgLTggICAgICAtNy4wICAgIC0+IC0xCitkcWNtczQyMyBjb21wYXJlc2lnICAgLThFKzAgICAtNy4wICAgIC0+IC0xCitkcWNtczQyNCBjb21wYXJlc2lnICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCitkcWNtczQyNSBjb21wYXJlc2lnICAgLS44RSsxICAtNyAgICAgIC0+IC0xCitkcWNtczQyNiBjb21wYXJlc2lnICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCitkcWNtczQyNyBjb21wYXJlc2lnICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCitkcWNtczQyOCBjb21wYXJlc2lnICAgLTguMCAgICAtNzBFLTEgIC0+IC0xCitkcWNtczQyOSBjb21wYXJlc2lnICAgLTggICAgICAtLjdFKzEgIC0+IC0xCitkcWNtczQzMCBjb21wYXJlc2lnICAgLTggICAgICAtNzBFLTEgIC0+IC0xCisKK2RxY21zNDQwIGNvbXBhcmVzaWcgICAtOC4wICAgIC05LjAgICAgLT4gMQorZHFjbXM0NDEgY29tcGFyZXNpZyAgIC04LjAgICAgLTkgICAgICAtPiAxCitkcWNtczQ0MiBjb21wYXJlc2lnICAgLTggICAgICAtOS4wICAgIC0+IDEKK2RxY21zNDQzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC05LjAgICAgLT4gMQorZHFjbXM0NDQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkuMCAgICAtPiAxCitkcWNtczQ0NSBjb21wYXJlc2lnICAgLS44RSsxICAtOSAgICAgIC0+IDEKK2RxY21zNDQ2IGNvbXBhcmVzaWcgICAtODBFLTEgIC05ICAgICAgLT4gMQorZHFjbXM0NDcgY29tcGFyZXNpZyAgIC04LjAgICAgLTlFKzAgICAtPiAxCitkcWNtczQ0OCBjb21wYXJlc2lnICAgLTguMCAgICAtOTBFLTEgIC0+IDEKK2RxY21zNDQ5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uOUUrMSAgLT4gMQorZHFjbXM0NTAgY29tcGFyZXNpZyAgIC04ICAgICAgLTkwRS0xICAtPiAxCisKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitkcWNtczQ3MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNtczQ3NCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY21zNDc1IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNtczQ3NiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNtczQ3NyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY21zNDc4IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNtczQ3OSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNtczQ4MCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY21zNDgxIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNtczQ4MiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNtczQ4MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY21zNDg3IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFKzg5IC0+IDAKK2RxY21zNDg4IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMEUtODkgLT4gMAorZHFjbXM0ODkgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDBFKzg5IC0+IDAKK2RxY21zNDkwIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFLTg5IC0+IDAKK2RxY21zNDkxIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMEUrODkgLT4gMAorZHFjbXM0OTIgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDBFLTg5IC0+IDAKK2RxY21zNDkzIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFKzg5IC0+IDAKK2RxY21zNDk0IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMEUtODkgLT4gMAorZHFjbXM0OTUgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDBFKzg5IC0+IDAKK2RxY21zNDk2IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFLTg5IC0+IDAKK2RxY21zNDk3IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitkcWNtczUwMCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2RxY21zNTAxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTQgICAgLT4gMQorZHFjbXM1MDIgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMyAgICAtPiAxCitkcWNtczUwMyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2RxY21zNTA0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTEgICAgLT4gMQorZHFjbXM1MDUgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMCAgICAtPiAxCitkcWNtczUwNiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2RxY21zNTA3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOCAgICAgLT4gMQorZHFjbXM1MDggY29tcGFyZXNpZyAgICAxICAgICAxRS03ICAgICAtPiAxCitkcWNtczUwOSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2RxY21zNTEwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNSAgICAgLT4gMQorZHFjbXM1MTEgY29tcGFyZXNpZyAgICAxICAgICAxRS00ICAgICAtPiAxCitkcWNtczUxMiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2RxY21zNTEzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMiAgICAgLT4gMQorZHFjbXM1MTQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xICAgICAtPiAxCitkcWNtczUxNSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2RxY21zNTE2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKK2RxY21zNTE3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2RxY21zNTE4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2RxY21zNTE5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKK2RxY21zNTIxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2RxY21zNTIyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2RxY21zNTIzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKK2RxY21zNTI0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2RxY21zNTI1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2RxY21zNTI2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKK2RxY21zNTI3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2RxY21zNTI4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2RxY21zNTI5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKK2RxY21zNTMwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2RxY21zNTMxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKKy0tIExSIHN3YXAKK2RxY21zNTQwIGNvbXBhcmVzaWcgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2RxY21zNTQxIGNvbXBhcmVzaWcgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKK2RxY21zNTQyIGNvbXBhcmVzaWcgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2RxY21zNTQzIGNvbXBhcmVzaWcgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ0IGNvbXBhcmVzaWcgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ1IGNvbXBhcmVzaWcgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ2IGNvbXBhcmVzaWcgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ3IGNvbXBhcmVzaWcgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ4IGNvbXBhcmVzaWcgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ5IGNvbXBhcmVzaWcgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2RxY21zNTUwIGNvbXBhcmVzaWcgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKK2RxY21zNTUxIGNvbXBhcmVzaWcgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2RxY21zNTUyIGNvbXBhcmVzaWcgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2RxY21zNTUzIGNvbXBhcmVzaWcgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKK2RxY21zNTU0IGNvbXBhcmVzaWcgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2RxY21zNTU1IGNvbXBhcmVzaWcgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2RxY21zNTU2IGNvbXBhcmVzaWcgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKK2RxY21zNTU3IGNvbXBhcmVzaWcgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2RxY21zNTU4IGNvbXBhcmVzaWcgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2RxY21zNTU5IGNvbXBhcmVzaWcgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKK2RxY21zNTYxIGNvbXBhcmVzaWcgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2RxY21zNTYyIGNvbXBhcmVzaWcgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2RxY21zNTYzIGNvbXBhcmVzaWcgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKK2RxY21zNTY0IGNvbXBhcmVzaWcgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2RxY21zNTY1IGNvbXBhcmVzaWcgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2RxY21zNTY2IGNvbXBhcmVzaWcgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKK2RxY21zNTY3IGNvbXBhcmVzaWcgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2RxY21zNTY4IGNvbXBhcmVzaWcgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2RxY21zNTY5IGNvbXBhcmVzaWcgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKK2RxY21zNTcwIGNvbXBhcmVzaWcgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2RxY21zNTcxIGNvbXBhcmVzaWcgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorZHFjbXM1ODAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2RxY21zNTgxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCitkcWNtczU4MiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQorZHFjbXM1ODMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2RxY21zNTg0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCitkcWNtczU4NSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQorZHFjbXM1ODYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2RxY21zNTg3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCitkcWNtczU4OCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQorZHFjbXM1ODkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitkcWNtczU5MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKK2RxY21zNTkxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQorZHFjbXM1OTIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitkcWNtczU5MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKK2RxY21zNTk0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQorZHFjbXM1OTUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitkcWNtczU5NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKK2RxY21zNTk3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQorZHFjbXM1OTggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitkcWNtczU5OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK2RxY21zNjAwIGNvbXBhcmVzaWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjAxIGNvbXBhcmVzaWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjAyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjAzIGNvbXBhcmVzaWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA0IGNvbXBhcmVzaWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA2IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA3IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA5IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjEwIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2RxY21zNjExIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKK2RxY21zNjEyIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKK2RxY21zNjEzIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2RxY21zNjE0IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKK2RxY21zNjE1IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKK2RxY21zNjE2IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2RxY21zNjE3IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKK2RxY21zNjE4IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKK2RxY21zNjE5IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2RxY21zNjIwIGNvbXBhcmVzaWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjIxIGNvbXBhcmVzaWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjIyIGNvbXBhcmVzaWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjIzIGNvbXBhcmVzaWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI0IGNvbXBhcmVzaWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI1IGNvbXBhcmVzaWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI2IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI3IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI4IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI5IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjMwIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKK2RxY21zNjMxIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2RxY21zNjMyIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKK2RxY21zNjMzIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKK2RxY21zNjM0IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2RxY21zNjM1IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKK2RxY21zNjM2IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKK2RxY21zNjM3IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2RxY21zNjM4IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKK2RxY21zNjM5IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RxY21zNjQwIGNvbXBhcmVzaWcgICAwICAgICAwICAgLT4gMAorZHFjbXM2NDEgY29tcGFyZXNpZyAgIDAgICAgLTAgICAtPiAwCitkcWNtczY0MiBjb21wYXJlc2lnICAgMCAgICAtMC4wIC0+IDAKK2RxY21zNjQzIGNvbXBhcmVzaWcgICAwICAgICAwLjAgLT4gMAorZHFjbXM2NDQgY29tcGFyZXNpZyAgLTAgICAgIDAgICAtPiAwCitkcWNtczY0NSBjb21wYXJlc2lnICAtMCAgICAtMCAgIC0+IDAKK2RxY21zNjQ2IGNvbXBhcmVzaWcgIC0wICAgIC0wLjAgLT4gMAorZHFjbXM2NDcgY29tcGFyZXNpZyAgLTAgICAgIDAuMCAtPiAwCitkcWNtczY0OCBjb21wYXJlc2lnICAgMC4wICAgMCAgIC0+IDAKK2RxY21zNjQ5IGNvbXBhcmVzaWcgICAwLjAgIC0wICAgLT4gMAorZHFjbXM2NTAgY29tcGFyZXNpZyAgIDAuMCAgLTAuMCAtPiAwCitkcWNtczY1MSBjb21wYXJlc2lnICAgMC4wICAgMC4wIC0+IDAKK2RxY21zNjUyIGNvbXBhcmVzaWcgIC0wLjAgICAwICAgLT4gMAorZHFjbXM2NTMgY29tcGFyZXNpZyAgLTAuMCAgLTAgICAtPiAwCitkcWNtczY1NCBjb21wYXJlc2lnICAtMC4wICAtMC4wIC0+IDAKK2RxY21zNjU1IGNvbXBhcmVzaWcgIC0wLjAgICAwLjAgLT4gMAorCitkcWNtczY1NiBjb21wYXJlc2lnICAtMEUxICAgMC4wIC0+IDAKK2RxY21zNjU3IGNvbXBhcmVzaWcgIC0wRTIgICAwLjAgLT4gMAorZHFjbXM2NTggY29tcGFyZXNpZyAgIDBFMSAgIDAuMCAtPiAwCitkcWNtczY1OSBjb21wYXJlc2lnICAgMEUyICAgMC4wIC0+IDAKK2RxY21zNjYwIGNvbXBhcmVzaWcgIC0wRTEgICAwICAgLT4gMAorZHFjbXM2NjEgY29tcGFyZXNpZyAgLTBFMiAgIDAgICAtPiAwCitkcWNtczY2MiBjb21wYXJlc2lnICAgMEUxICAgMCAgIC0+IDAKK2RxY21zNjYzIGNvbXBhcmVzaWcgICAwRTIgICAwICAgLT4gMAorZHFjbXM2NjQgY29tcGFyZXNpZyAgLTBFMSAgLTBFMSAtPiAwCitkcWNtczY2NSBjb21wYXJlc2lnICAtMEUyICAtMEUxIC0+IDAKK2RxY21zNjY2IGNvbXBhcmVzaWcgICAwRTEgIC0wRTEgLT4gMAorZHFjbXM2NjcgY29tcGFyZXNpZyAgIDBFMiAgLTBFMSAtPiAwCitkcWNtczY2OCBjb21wYXJlc2lnICAtMEUxICAtMEUyIC0+IDAKK2RxY21zNjY5IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTIgLT4gMAorZHFjbXM2NzAgY29tcGFyZXNpZyAgIDBFMSAgLTBFMiAtPiAwCitkcWNtczY3MSBjb21wYXJlc2lnICAgMEUyICAtMEUyIC0+IDAKK2RxY21zNjcyIGNvbXBhcmVzaWcgIC0wRTEgICAwRTEgLT4gMAorZHFjbXM2NzMgY29tcGFyZXNpZyAgLTBFMiAgIDBFMSAtPiAwCitkcWNtczY3NCBjb21wYXJlc2lnICAgMEUxICAgMEUxIC0+IDAKK2RxY21zNjc1IGNvbXBhcmVzaWcgICAwRTIgICAwRTEgLT4gMAorZHFjbXM2NzYgY29tcGFyZXNpZyAgLTBFMSAgIDBFMiAtPiAwCitkcWNtczY3NyBjb21wYXJlc2lnICAtMEUyICAgMEUyIC0+IDAKK2RxY21zNjc4IGNvbXBhcmVzaWcgICAwRTEgICAwRTIgLT4gMAorZHFjbXM2NzkgY29tcGFyZXNpZyAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RxY21zNjgwIGNvbXBhcmVzaWcgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorZHFjbXM2ODEgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwCitkcWNtczY4MiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDAKK2RxY21zNjgzIGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMAorZHFjbXM2ODQgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwCitkcWNtczY4NSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDAKK2RxY21zNjg2IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMAorZHFjbXM2ODcgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwCitkcWNtczY4OCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDAKK2RxY21zNjg5IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMAorZHFjbXM2OTAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCitkcWNtczY5MSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDAKK2RxY21zNjkyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMAorZHFjbXM2OTMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwCitkcWNtczY5NCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDAKK2RxY21zNjk1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMAorZHFjbXM2OTYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwCitkcWNtczY5NyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDAKK2RxY21zNjk4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMAorZHFjbXM2OTkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwCisKKy0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdAorZHFjbXM3MDAgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NSAtPiAxCitkcWNtczcwMSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDAKK2RxY21zNzAyIGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTcgLT4gLTEKK2RxY21zNzAzIGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDAyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQorZHFjbXM3MDQgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwCitkcWNtczcwNSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAyMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IC0xCitkcWNtczcwNiBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMDM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDEKK2RxY21zNzA3IGNvbXBhcmVzaWcgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMAorZHFjbXM3MDggY29tcGFyZXNpZyAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQorCistLSBtaXNjZWxsYW5lb3VzCitkcWNtczcyMSBjb21wYXJlc2lnIDEyMzQ1Njc4MDAwIDEgLT4gMQorZHFjbXM3MjIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAwIC0+IC0xCitkcWNtczcyMyBjb21wYXJlc2lnIDEyMzQ1Njc4MDAgIDEgLT4gMQorZHFjbXM3MjQgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAgIC0+IC0xCitkcWNtczcyNSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAgIDEgLT4gMQorZHFjbXM3MjYgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAgIC0+IC0xCitkcWNtczcyNyBjb21wYXJlc2lnIDEyMzQ1Njc4OTEgIDEgLT4gMQorZHFjbXM3MjggY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTEgIC0+IC0xCitkcWNtczcyOSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAxIDEgLT4gMQorZHFjbXM3MzAgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAxIC0+IC0xCitkcWNtczczMSBjb21wYXJlc2lnIDEyMzQ1Njc4OTYgIDEgLT4gMQorZHFjbXM3MzIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTYgIC0+IC0xCisKKy0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uCitkcWNtczc0MCBjb21wYXJlc2lnICAxICAwLjk5OTk5OTkgIC0+IDEKK2RxY21zNzQxIGNvbXBhcmVzaWcgIDEgIDAuOTk5OTk5ICAgLT4gMQorZHFjbXM3NDIgY29tcGFyZXNpZyAgMSAgMC45OTk5OSAgICAtPiAxCitkcWNtczc0MyBjb21wYXJlc2lnICAxICAxLjAwMDAgICAgIC0+IDAKK2RxY21zNzQ0IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2RxY21zNzQ1IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAxICAgLT4gLTEKK2RxY21zNzQ2IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2RxY21zNzUwIGNvbXBhcmVzaWcgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2RxY21zNzUxIGNvbXBhcmVzaWcgIDAuOTk5OTk5ICAgMSAgLT4gLTEKK2RxY21zNzUyIGNvbXBhcmVzaWcgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2RxY21zNzUzIGNvbXBhcmVzaWcgIDEuMDAwMCAgICAgMSAgLT4gMAorZHFjbXM3NTQgY29tcGFyZXNpZyAgMS4wMDAwMSAgICAxICAtPiAxCitkcWNtczc1NSBjb21wYXJlc2lnICAxLjAwMDAwMSAgIDEgIC0+IDEKK2RxY21zNzU2IGNvbXBhcmVzaWcgIDEuMDAwMDAwMSAgMSAgLT4gMQorCistLSBTcGVjaWFscworZHFjbXM3ODAgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDEKK2RxY21zNzgxIGNvbXBhcmVzaWcgIEluZiAgLTEwMDAgIC0+ICAxCitkcWNtczc4MiBjb21wYXJlc2lnICBJbmYgIC0xICAgICAtPiAgMQorZHFjbXM3ODMgY29tcGFyZXNpZyAgSW5mICAtMCAgICAgLT4gIDEKK2RxY21zNzg0IGNvbXBhcmVzaWcgIEluZiAgIDAgICAgIC0+ICAxCitkcWNtczc4NSBjb21wYXJlc2lnICBJbmYgICAxICAgICAtPiAgMQorZHFjbXM3ODYgY29tcGFyZXNpZyAgSW5mICAgMTAwMCAgLT4gIDEKK2RxY21zNzg3IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwCitkcWNtczc4OCBjb21wYXJlc2lnIC0xMDAwICBJbmYgICAtPiAtMQorZHFjbXM3ODkgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTEKK2RxY21zNzkwIGNvbXBhcmVzaWcgLTEgICAgIEluZiAgIC0+IC0xCitkcWNtczc5MSBjb21wYXJlc2lnIC0wICAgICBJbmYgICAtPiAtMQorZHFjbXM3OTIgY29tcGFyZXNpZyAgMCAgICAgSW5mICAgLT4gLTEKK2RxY21zNzkzIGNvbXBhcmVzaWcgIDEgICAgIEluZiAgIC0+IC0xCitkcWNtczc5NCBjb21wYXJlc2lnICAxMDAwICBJbmYgICAtPiAtMQorZHFjbXM3OTUgY29tcGFyZXNpZyAgSW5mICAgSW5mICAgLT4gIDAKKworZHFjbXM4MDAgY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gIDAKK2RxY21zODAxIGNvbXBhcmVzaWcgLUluZiAgLTEwMDAgIC0+IC0xCitkcWNtczgwMiBjb21wYXJlc2lnIC1JbmYgIC0xICAgICAtPiAtMQorZHFjbXM4MDMgY29tcGFyZXNpZyAtSW5mICAtMCAgICAgLT4gLTEKK2RxY21zODA0IGNvbXBhcmVzaWcgLUluZiAgIDAgICAgIC0+IC0xCitkcWNtczgwNSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAtMQorZHFjbXM4MDYgY29tcGFyZXNpZyAtSW5mICAgMTAwMCAgLT4gLTEKK2RxY21zODA3IGNvbXBhcmVzaWcgLUluZiAgIEluZiAgIC0+IC0xCitkcWNtczgwOCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjbXM4MDkgY29tcGFyZXNpZyAtMTAwMCAtSW5mICAgLT4gIDEKK2RxY21zODEwIGNvbXBhcmVzaWcgLTEgICAgLUluZiAgIC0+ICAxCitkcWNtczgxMSBjb21wYXJlc2lnIC0wICAgIC1JbmYgICAtPiAgMQorZHFjbXM4MTIgY29tcGFyZXNpZyAgMCAgICAtSW5mICAgLT4gIDEKK2RxY21zODEzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAxCitkcWNtczgxNCBjb21wYXJlc2lnICAxMDAwIC1JbmYgICAtPiAgMQorZHFjbXM4MTUgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDEKKworZHFjbXM4MjEgY29tcGFyZXNpZyAgTmFOIC1JbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODIyIGNvbXBhcmVzaWcgIE5hTiAtMTAwMCAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyMyBjb21wYXJlc2lnICBOYU4gLTEgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MjQgY29tcGFyZXNpZyAgTmFOIC0wICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODI1IGNvbXBhcmVzaWcgIE5hTiAgMCAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyNiBjb21wYXJlc2lnICBOYU4gIDEgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MjcgY29tcGFyZXNpZyAgTmFOICAxMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODI4IGNvbXBhcmVzaWcgIE5hTiAgSW5mICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyOSBjb21wYXJlc2lnICBOYU4gIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzAgY29tcGFyZXNpZyAtSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODMxIGNvbXBhcmVzaWcgLTEwMDAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzMiBjb21wYXJlc2lnIC0xICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzMgY29tcGFyZXNpZyAtMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODM0IGNvbXBhcmVzaWcgIDAgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzNSBjb21wYXJlc2lnICAxICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzYgY29tcGFyZXNpZyAgMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODM3IGNvbXBhcmVzaWcgIEluZiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzOCBjb21wYXJlc2lnIC1OYU4gLU5hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzkgY29tcGFyZXNpZyArTmFOIC1OYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQwIGNvbXBhcmVzaWcgLU5hTiArTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RxY21zODQxIGNvbXBhcmVzaWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0MiBjb21wYXJlc2lnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDMgY29tcGFyZXNpZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQ0IGNvbXBhcmVzaWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0NSBjb21wYXJlc2lnICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDYgY29tcGFyZXNpZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQ3IGNvbXBhcmVzaWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0OCBjb21wYXJlc2lnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDkgY29tcGFyZXNpZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODUwIGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1MSBjb21wYXJlc2lnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTIgY29tcGFyZXNpZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODUzIGNvbXBhcmVzaWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1NCBjb21wYXJlc2lnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTUgY29tcGFyZXNpZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODU2IGNvbXBhcmVzaWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1NyBjb21wYXJlc2lnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTggY29tcGFyZXNpZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODU5IGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxY21zODYwIGNvbXBhcmVzaWcgIE5hTjkgLUluZiAgIC0+ICBOYU45ICAgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2MSBjb21wYXJlc2lnICBOYU44ICA5OTkgICAtPiAgTmFOOCAgICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjIgY29tcGFyZXNpZyAgTmFONzcgSW5mICAgLT4gIE5hTjc3ICAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODYzIGNvbXBhcmVzaWcgLU5hTjY3IE5hTjUgIC0+IC1OYU42NyAgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2NCBjb21wYXJlc2lnIC1JbmYgIC1OYU40ICAtPiAtTmFONCAgICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjUgY29tcGFyZXNpZyAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzICAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODY2IGNvbXBhcmVzaWcgIEluZiAgIE5hTjIgIC0+ICBOYU4yICAgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2NyBjb21wYXJlc2lnIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjggY29tcGFyZXNpZyArTmFONDEgLU5hTjQyIC0+ICBOYU40MSAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODY5IGNvbXBhcmVzaWcgLU5hTjQxICtOYU40MiAtPiAtTmFONDEgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3MCBjb21wYXJlc2lnICtOYU40MSArTmFONDIgLT4gIE5hTjQxICBJbnZhbGlkX29wZXJhdGlvbgorCitkcWNtczg3MSBjb21wYXJlc2lnIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODcyIGNvbXBhcmVzaWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzMgY29tcGFyZXNpZyAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3NCBjb21wYXJlc2lnICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODc1IGNvbXBhcmVzaWcgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzYgY29tcGFyZXNpZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3NyBjb21wYXJlc2lnICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODc4IGNvbXBhcmVzaWcgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzkgY29tcGFyZXNpZyAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHdpZGUgcmFuZ2UKK2RxY21zODgwIGNvbXBhcmVzaWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrNjE0NCAtPiAtMQorZHFjbXM4ODEgY29tcGFyZXNpZyA5RSs2MTQ0ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkcWNtczg4MiBjb21wYXJlc2lnICswLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gIDEKK2RxY21zODgzIGNvbXBhcmVzaWcgOUUtNjE0MyArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQorZHFjbXM4ODUgY29tcGFyZXNpZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xCitkcWNtczg4NiBjb21wYXJlc2lnIDlFKzYxNDQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RxY21zODg3IGNvbXBhcmVzaWcgLTAuMTAwIDlFLTYxNDMgICAgICAgICAgICAgICAtPiAtMQorZHFjbXM4ODggY29tcGFyZXNpZyA5RS02MTQzIC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxCisKKy0tIHNpZ25zCitkcWNtczkwMSBjb21wYXJlc2lnICAxZSs3NyAgMWUrMTEgLT4gIDEKK2RxY21zOTAyIGNvbXBhcmVzaWcgIDFlKzc3IC0xZSsxMSAtPiAgMQorZHFjbXM5MDMgY29tcGFyZXNpZyAtMWUrNzcgIDFlKzExIC0+IC0xCitkcWNtczkwNCBjb21wYXJlc2lnIC0xZSs3NyAtMWUrMTEgLT4gLTEKK2RxY21zOTA1IGNvbXBhcmVzaWcgIDFlLTc3ICAxZS0xMSAtPiAtMQorZHFjbXM5MDYgY29tcGFyZXNpZyAgMWUtNzcgLTFlLTExIC0+ICAxCitkcWNtczkwNyBjb21wYXJlc2lnIC0xZS03NyAgMWUtMTEgLT4gLTEKK2RxY21zOTA4IGNvbXBhcmVzaWcgLTFlLTc3IC0xZS0xMSAtPiAgMQorCistLSBOdWxsIHRlc3RzCitkcWNtczk5MCBjb21wYXJlc2lnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM5OTEgY29tcGFyZXNpZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsLmRlY1Rlc3QKaW5kZXggYmFlMzc2MS4uMTM3MDFjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsLmRlY1Rlc3QKQEAgLTEsNzA2ICsxLDcwNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFDb21wYXJlVG90YWwuZGVjVGVzdCAtLSBkZWNRdWFkIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmcgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KLS0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQotLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocw0KLS0tIHRoYW4gY29tcGFyZS4NCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZHFjb3QwMDEgY29tcGFyZXRvdGFsICAtMiAgLTIgIC0+IDANCi1kcWNvdDAwMiBjb21wYXJldG90YWwgIC0yICAtMSAgLT4gLTENCi1kcWNvdDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTENCi1kcWNvdDAwNCBjb21wYXJldG90YWwgIC0yICAgMSAgLT4gLTENCi1kcWNvdDAwNSBjb21wYXJldG90YWwgIC0yICAgMiAgLT4gLTENCi1kcWNvdDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQ0KLWRxY290MDA3IGNvbXBhcmV0b3RhbCAgLTEgIC0xICAtPiAwDQotZHFjb3QwMDggY29tcGFyZXRvdGFsICAtMSAgIDAgIC0+IC0xDQotZHFjb3QwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xDQotZHFjb3QwMTAgY29tcGFyZXRvdGFsICAtMSAgIDIgIC0+IC0xDQotZHFjb3QwMTEgY29tcGFyZXRvdGFsICAgMCAgLTIgIC0+IDENCi1kcWNvdDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQ0KLWRxY290MDEzIGNvbXBhcmV0b3RhbCAgIDAgICAwICAtPiAwDQotZHFjb3QwMTQgY29tcGFyZXRvdGFsICAgMCAgIDEgIC0+IC0xDQotZHFjb3QwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xDQotZHFjb3QwMTYgY29tcGFyZXRvdGFsICAgMSAgLTIgIC0+IDENCi1kcWNvdDAxNyBjb21wYXJldG90YWwgICAxICAtMSAgLT4gMQ0KLWRxY290MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxDQotZHFjb3QwMTkgY29tcGFyZXRvdGFsICAgMSAgIDEgIC0+IDANCi1kcWNvdDAyMCBjb21wYXJldG90YWwgICAxICAgMiAgLT4gLTENCi1kcWNvdDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQ0KLWRxY290MDIyIGNvbXBhcmV0b3RhbCAgIDIgIC0xICAtPiAxDQotZHFjb3QwMjMgY29tcGFyZXRvdGFsICAgMiAgIDAgIC0+IDENCi1kcWNvdDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQ0KLWRxY290MDI2IGNvbXBhcmV0b3RhbCAgIDIgICAyICAtPiAwDQotDQotZHFjb3QwMzEgY29tcGFyZXRvdGFsICAtMjAgIC0yMCAgLT4gMA0KLWRxY290MDMyIGNvbXBhcmV0b3RhbCAgLTIwICAtMTAgIC0+IC0xDQotZHFjb3QwMzMgY29tcGFyZXRvdGFsICAtMjAgICAwMCAgLT4gLTENCi1kcWNvdDAzNCBjb21wYXJldG90YWwgIC0yMCAgIDEwICAtPiAtMQ0KLWRxY290MDM1IGNvbXBhcmV0b3RhbCAgLTIwICAgMjAgIC0+IC0xDQotZHFjb3QwMzYgY29tcGFyZXRvdGFsICAtMTAgIC0yMCAgLT4gMQ0KLWRxY290MDM3IGNvbXBhcmV0b3RhbCAgLTEwICAtMTAgIC0+IDANCi1kcWNvdDAzOCBjb21wYXJldG90YWwgIC0xMCAgIDAwICAtPiAtMQ0KLWRxY290MDM5IGNvbXBhcmV0b3RhbCAgLTEwICAgMTAgIC0+IC0xDQotZHFjb3QwNDAgY29tcGFyZXRvdGFsICAtMTAgICAyMCAgLT4gLTENCi1kcWNvdDA0MSBjb21wYXJldG90YWwgICAwMCAgLTIwICAtPiAxDQotZHFjb3QwNDIgY29tcGFyZXRvdGFsICAgMDAgIC0xMCAgLT4gMQ0KLWRxY290MDQzIGNvbXBhcmV0b3RhbCAgIDAwICAgMDAgIC0+IDANCi1kcWNvdDA0NCBjb21wYXJldG90YWwgICAwMCAgIDEwICAtPiAtMQ0KLWRxY290MDQ1IGNvbXBhcmV0b3RhbCAgIDAwICAgMjAgIC0+IC0xDQotZHFjb3QwNDYgY29tcGFyZXRvdGFsICAgMTAgIC0yMCAgLT4gMQ0KLWRxY290MDQ3IGNvbXBhcmV0b3RhbCAgIDEwICAtMTAgIC0+IDENCi1kcWNvdDA0OCBjb21wYXJldG90YWwgICAxMCAgIDAwICAtPiAxDQotZHFjb3QwNDkgY29tcGFyZXRvdGFsICAgMTAgICAxMCAgLT4gMA0KLWRxY290MDUwIGNvbXBhcmV0b3RhbCAgIDEwICAgMjAgIC0+IC0xDQotZHFjb3QwNTEgY29tcGFyZXRvdGFsICAgMjAgIC0yMCAgLT4gMQ0KLWRxY290MDUyIGNvbXBhcmV0b3RhbCAgIDIwICAtMTAgIC0+IDENCi1kcWNvdDA1MyBjb21wYXJldG90YWwgICAyMCAgIDAwICAtPiAxDQotZHFjb3QwNTUgY29tcGFyZXRvdGFsICAgMjAgICAxMCAgLT4gMQ0KLWRxY290MDU2IGNvbXBhcmV0b3RhbCAgIDIwICAgMjAgIC0+IDANCi0NCi1kcWNvdDA2MSBjb21wYXJldG90YWwgIC0yLjAgIC0yLjAgIC0+IDANCi1kcWNvdDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xDQotZHFjb3QwNjMgY29tcGFyZXRvdGFsICAtMi4wICAgMC4wICAtPiAtMQ0KLWRxY290MDY0IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDEuMCAgLT4gLTENCi1kcWNvdDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xDQotZHFjb3QwNjYgY29tcGFyZXRvdGFsICAtMS4wICAtMi4wICAtPiAxDQotZHFjb3QwNjcgY29tcGFyZXRvdGFsICAtMS4wICAtMS4wICAtPiAwDQotZHFjb3QwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQ0KLWRxY290MDY5IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDEuMCAgLT4gLTENCi1kcWNvdDA3MCBjb21wYXJldG90YWwgIC0xLjAgICAyLjAgIC0+IC0xDQotZHFjb3QwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxDQotZHFjb3QwNzIgY29tcGFyZXRvdGFsICAgMC4wICAtMS4wICAtPiAxDQotZHFjb3QwNzMgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wICAtPiAwDQotZHFjb3QwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQ0KLWRxY290MDc1IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDIuMCAgLT4gLTENCi1kcWNvdDA3NiBjb21wYXJldG90YWwgICAxLjAgIC0yLjAgIC0+IDENCi1kcWNvdDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDENCi1kcWNvdDA3OCBjb21wYXJldG90YWwgICAxLjAgICAwLjAgIC0+IDENCi1kcWNvdDA3OSBjb21wYXJldG90YWwgICAxLjAgICAxLjAgIC0+IDANCi1kcWNvdDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xDQotZHFjb3QwODEgY29tcGFyZXRvdGFsICAgMi4wICAtMi4wICAtPiAxDQotZHFjb3QwODIgY29tcGFyZXRvdGFsICAgMi4wICAtMS4wICAtPiAxDQotZHFjb3QwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxDQotZHFjb3QwODUgY29tcGFyZXRvdGFsICAgMi4wICAgMS4wICAtPiAxDQotZHFjb3QwODYgY29tcGFyZXRvdGFsICAgMi4wICAgMi4wICAtPiAwDQotDQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQotZHFjb3QwOTAgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IDANCi1kcWNvdDA5MSBjb21wYXJldG90YWwgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTENCi1kcWNvdDA5MiBjb21wYXJldG90YWwgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQ0KLWRxY290MDkzIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwDQotDQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzDQotLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbA0KLWRxY290MTAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3LjAgICAgLT4gMA0KLWRxY290MTAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3ICAgICAgLT4gLTENCi1kcWNvdDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDENCi1kcWNvdDEwMyBjb21wYXJldG90YWwgICA3RSswICAgNy4wICAgIC0+IDENCi1kcWNvdDEwNCBjb21wYXJldG90YWwgICA3MEUtMSAgNy4wICAgIC0+IDANCi1kcWNvdDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDANCi1kcWNvdDEwNiBjb21wYXJldG90YWwgICA3MEUtMSAgNyAgICAgIC0+IC0xDQotZHFjb3QxMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIDdFKzAgICAtPiAtMQ0KLWRxY290MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMA0KLWRxY290MTA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAwLjdFKzEgLT4gMA0KLWRxY290MTEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3MEUtMSAgLT4gMQ0KLQ0KLWRxY290MTIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3LjAgICAgLT4gMQ0KLWRxY290MTIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3ICAgICAgLT4gMQ0KLWRxY290MTIyIGNvbXBhcmV0b3RhbCAgIDggICAgICA3LjAgICAgLT4gMQ0KLWRxY290MTIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA3LjAgICAgLT4gMQ0KLWRxY290MTI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3LjAgICAgLT4gMQ0KLWRxY290MTI1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA3ICAgICAgLT4gMQ0KLWRxY290MTI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3ICAgICAgLT4gMQ0KLWRxY290MTI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3RSswICAgLT4gMQ0KLWRxY290MTI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3MEUtMSAgLT4gMQ0KLWRxY290MTI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjdFKzEgIC0+IDENCi1kcWNvdDEzMCBjb21wYXJldG90YWwgICA4ICAgICAgNzBFLTEgIC0+IDENCi0NCi1kcWNvdDE0MCBjb21wYXJldG90YWwgICA4LjAgICAgOS4wICAgIC0+IC0xDQotZHFjb3QxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQ0KLWRxY290MTQyIGNvbXBhcmV0b3RhbCAgIDggICAgICA5LjAgICAgLT4gLTENCi1kcWNvdDE0MyBjb21wYXJldG90YWwgICA4RSswICAgOS4wICAgIC0+IC0xDQotZHFjb3QxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQ0KLWRxY290MTQ1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA5ICAgICAgLT4gLTENCi1kcWNvdDE0NiBjb21wYXJldG90YWwgICA4MEUtMSAgOSAgICAgIC0+IC0xDQotZHFjb3QxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQ0KLWRxY290MTQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5MEUtMSAgLT4gLTENCi1kcWNvdDE0OSBjb21wYXJldG90YWwgICA4ICAgICAgMC45RSsxIC0+IC0xDQotZHFjb3QxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCi1kcWNvdDIwMCBjb21wYXJldG90YWwgIC03LjAgICAgNy4wICAgIC0+IC0xDQotZHFjb3QyMDEgY29tcGFyZXRvdGFsICAtNy4wICAgIDcgICAgICAtPiAtMQ0KLWRxY290MjAyIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3LjAgICAgLT4gLTENCi1kcWNvdDIwMyBjb21wYXJldG90YWwgIC03RSswICAgNy4wICAgIC0+IC0xDQotZHFjb3QyMDQgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcuMCAgICAtPiAtMQ0KLWRxY290MjA1IGNvbXBhcmV0b3RhbCAgLTAuN0UrMSA3ICAgICAgLT4gLTENCi1kcWNvdDIwNiBjb21wYXJldG90YWwgIC03MEUtMSAgNyAgICAgIC0+IC0xDQotZHFjb3QyMDcgY29tcGFyZXRvdGFsICAtNy4wICAgIDdFKzAgICAtPiAtMQ0KLWRxY290MjA4IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3MEUtMSAgLT4gLTENCi1kcWNvdDIwOSBjb21wYXJldG90YWwgIC03ICAgICAgMC43RSsxIC0+IC0xDQotZHFjb3QyMTAgY29tcGFyZXRvdGFsICAtNyAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRxY290MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTENCi1kcWNvdDIyMSBjb21wYXJldG90YWwgIC04LjAgICAgNyAgICAgIC0+IC0xDQotZHFjb3QyMjIgY29tcGFyZXRvdGFsICAtOCAgICAgIDcuMCAgICAtPiAtMQ0KLWRxY290MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTENCi1kcWNvdDIyNCBjb21wYXJldG90YWwgIC04MEUtMSAgNy4wICAgIC0+IC0xDQotZHFjb3QyMjUgY29tcGFyZXRvdGFsICAtMC44RSsxIDcgICAgICAtPiAtMQ0KLWRxY290MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTENCi1kcWNvdDIyNyBjb21wYXJldG90YWwgIC04LjAgICAgN0UrMCAgIC0+IC0xDQotZHFjb3QyMjggY29tcGFyZXRvdGFsICAtOC4wICAgIDcwRS0xICAtPiAtMQ0KLWRxY290MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTENCi1kcWNvdDIzMCBjb21wYXJldG90YWwgIC04ICAgICAgNzBFLTEgIC0+IC0xDQotDQotZHFjb3QyNDAgY29tcGFyZXRvdGFsICAtOC4wICAgIDkuMCAgICAtPiAtMQ0KLWRxY290MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTENCi1kcWNvdDI0MiBjb21wYXJldG90YWwgIC04ICAgICAgOS4wICAgIC0+IC0xDQotZHFjb3QyNDMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDkuMCAgICAtPiAtMQ0KLWRxY290MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTENCi1kcWNvdDI0NSBjb21wYXJldG90YWwgIC0wLjhFKzEgOSAgICAgIC0+IC0xDQotZHFjb3QyNDYgY29tcGFyZXRvdGFsICAtODBFLTEgIDkgICAgICAtPiAtMQ0KLWRxY290MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTENCi1kcWNvdDI0OCBjb21wYXJldG90YWwgIC04LjAgICAgOTBFLTEgIC0+IC0xDQotZHFjb3QyNDkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuOUUrMSAtPiAtMQ0KLWRxY290MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQotZHFjb3QzMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIC03LjAgICAgLT4gMQ0KLWRxY290MzAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNyAgICAgIC0+IDENCi1kcWNvdDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxDQotZHFjb3QzMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIC03LjAgICAgLT4gMQ0KLWRxY290MzA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNy4wICAgIC0+IDENCi1kcWNvdDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxDQotZHFjb3QzMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03ICAgICAgLT4gMQ0KLWRxY290MzA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtN0UrMCAgIC0+IDENCi1kcWNvdDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxDQotZHFjb3QzMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIC0uN0UrMSAgLT4gMQ0KLWRxY290MzEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNzBFLTEgIC0+IDENCi0NCi1kcWNvdDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxDQotZHFjb3QzMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIC03ICAgICAgLT4gMQ0KLWRxY290MzIyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNy4wICAgIC0+IDENCi1kcWNvdDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxDQotZHFjb3QzMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIC03LjAgICAgLT4gMQ0KLWRxY290MzI1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtNyAgICAgIC0+IDENCi1kcWNvdDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxDQotZHFjb3QzMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIC03RSswICAgLT4gMQ0KLWRxY290MzI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNzBFLTEgIC0+IDENCi1kcWNvdDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxDQotZHFjb3QzMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIC03MEUtMSAgLT4gMQ0KLQ0KLWRxY290MzQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOS4wICAgIC0+IDENCi1kcWNvdDM0MSBjb21wYXJldG90YWwgICA4LjAgICAgLTkgICAgICAtPiAxDQotZHFjb3QzNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIC05LjAgICAgLT4gMQ0KLWRxY290MzQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtOS4wICAgIC0+IDENCi1kcWNvdDM0NCBjb21wYXJldG90YWwgICA4MEUtMSAgLTkuMCAgICAtPiAxDQotZHFjb3QzNDUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC05ICAgICAgLT4gMQ0KLWRxY290MzQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOSAgICAgIC0+IDENCi1kcWNvdDM0NyBjb21wYXJldG90YWwgICA4LjAgICAgLTlFKzAgICAtPiAxDQotZHFjb3QzNDggY29tcGFyZXRvdGFsICAgOC4wICAgIC05MEUtMSAgLT4gMQ0KLWRxY290MzQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjlFKzEgIC0+IDENCi1kcWNvdDM1MCBjb21wYXJldG90YWwgICA4ICAgICAgLTkwRS0xICAtPiAxDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KLWRxY290NDAwIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcuMCAgICAtPiAwDQotZHFjb3Q0MDEgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNyAgICAgIC0+IDENCi1kcWNvdDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTENCi1kcWNvdDQwMyBjb21wYXJldG90YWwgICAtN0UrMCAgIC03LjAgICAgLT4gLTENCi1kcWNvdDQwNCBjb21wYXJldG90YWwgICAtNzBFLTEgIC03LjAgICAgLT4gMA0KLWRxY290NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwDQotZHFjb3Q0MDYgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNyAgICAgIC0+IDENCi1kcWNvdDQwNyBjb21wYXJldG90YWwgICAtNy4wICAgIC03RSswICAgLT4gMQ0KLWRxY290NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwDQotZHFjb3Q0MDkgY29tcGFyZXRvdGFsICAgLTcgICAgICAtLjdFKzEgIC0+IDANCi1kcWNvdDQxMCBjb21wYXJldG90YWwgICAtNyAgICAgIC03MEUtMSAgLT4gLTENCi0NCi1kcWNvdDQyMCBjb21wYXJldG90YWwgICAtOC4wICAgIC03LjAgICAgLT4gLTENCi1kcWNvdDQyMSBjb21wYXJldG90YWwgICAtOC4wICAgIC03ICAgICAgLT4gLTENCi1kcWNvdDQyMiBjb21wYXJldG90YWwgICAtOCAgICAgIC03LjAgICAgLT4gLTENCi1kcWNvdDQyMyBjb21wYXJldG90YWwgICAtOEUrMCAgIC03LjAgICAgLT4gLTENCi1kcWNvdDQyNCBjb21wYXJldG90YWwgICAtODBFLTEgIC03LjAgICAgLT4gLTENCi1kcWNvdDQyNSBjb21wYXJldG90YWwgICAtLjhFKzEgIC03ICAgICAgLT4gLTENCi1kcWNvdDQyNiBjb21wYXJldG90YWwgICAtODBFLTEgIC03ICAgICAgLT4gLTENCi1kcWNvdDQyNyBjb21wYXJldG90YWwgICAtOC4wICAgIC03RSswICAgLT4gLTENCi1kcWNvdDQyOCBjb21wYXJldG90YWwgICAtOC4wICAgIC03MEUtMSAgLT4gLTENCi1kcWNvdDQyOSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uN0UrMSAgLT4gLTENCi1kcWNvdDQzMCBjb21wYXJldG90YWwgICAtOCAgICAgIC03MEUtMSAgLT4gLTENCi0NCi1kcWNvdDQ0MCBjb21wYXJldG90YWwgICAtOC4wICAgIC05LjAgICAgLT4gMQ0KLWRxY290NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxDQotZHFjb3Q0NDIgY29tcGFyZXRvdGFsICAgLTggICAgICAtOS4wICAgIC0+IDENCi1kcWNvdDQ0MyBjb21wYXJldG90YWwgICAtOEUrMCAgIC05LjAgICAgLT4gMQ0KLWRxY290NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxDQotZHFjb3Q0NDUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtOSAgICAgIC0+IDENCi1kcWNvdDQ0NiBjb21wYXJldG90YWwgICAtODBFLTEgIC05ICAgICAgLT4gMQ0KLWRxY290NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxDQotZHFjb3Q0NDggY29tcGFyZXRvdGFsICAgLTguMCAgICAtOTBFLTEgIC0+IDENCi1kcWNvdDQ0OSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uOUUrMSAgLT4gMQ0KLWRxY290NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxDQotDQotDQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQotZHFjb3Q0NzMgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWRxY290NDc0IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KLWRxY290NDc1IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQotZHFjb3Q0NzYgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KLWRxY290NDc3IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWRxY290NDc4IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xDQotZHFjb3Q0NzkgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWRxY290NDgwIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KLWRxY290NDgxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQotZHFjb3Q0ODIgY29tcGFyZXRvdGFsIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KLWRxY290NDgzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwDQotZHFjb3Q0ODcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAxDQotZHFjb3Q0ODggY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDENCi1kcWNvdDQ4OSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAxDQotZHFjb3Q0OTAgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAxDQotZHFjb3Q0OTEgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDENCi1kcWNvdDQ5MiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAxDQotZHFjb3Q0OTMgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAxDQotZHFjb3Q0OTQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDENCi1kcWNvdDQ5NSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAxDQotZHFjb3Q0OTYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAxDQotZHFjb3Q0OTcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDANCi0NCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQotZHFjb3Q0OTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE3ICAgIC0+IDENCi1kcWNvdDQ5OSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTYgICAgLT4gMQ0KLWRxY290NTAwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNSAgICAtPiAxDQotZHFjb3Q1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDENCi1kcWNvdDUwMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTMgICAgLT4gMQ0KLWRxY290NTAzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMiAgICAtPiAxDQotZHFjb3Q1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDENCi1kcWNvdDUwNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTAgICAgLT4gMQ0KLWRxY290NTA2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS05ICAgICAtPiAxDQotZHFjb3Q1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDENCi1kcWNvdDUwOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNyAgICAgLT4gMQ0KLWRxY290NTA5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS02ICAgICAtPiAxDQotZHFjb3Q1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDENCi1kcWNvdDUxMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNCAgICAgLT4gMQ0KLWRxY290NTEyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0zICAgICAtPiAxDQotZHFjb3Q1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDENCi1kcWNvdDUxNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMSAgICAgLT4gMQ0KLWRxY290NTE1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0wICAgICAtPiAwDQotZHFjb3Q1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xDQotZHFjb3Q1MTcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzIgICAgIC0+IC0xDQotZHFjb3Q1MTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzMgICAgIC0+IC0xDQotZHFjb3Q1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xDQotZHFjb3Q1MjEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzUgICAgIC0+IC0xDQotZHFjb3Q1MjIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzYgICAgIC0+IC0xDQotZHFjb3Q1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xDQotZHFjb3Q1MjQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzggICAgIC0+IC0xDQotZHFjb3Q1MjUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzkgICAgIC0+IC0xDQotZHFjb3Q1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xDQotZHFjb3Q1MjcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzExICAgIC0+IC0xDQotZHFjb3Q1MjggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEyICAgIC0+IC0xDQotZHFjb3Q1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xDQotZHFjb3Q1MzAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xDQotZHFjb3Q1MzEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xDQotZHFjb3Q1MzIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE2ICAgIC0+IC0xDQotZHFjb3Q1MzMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE3ICAgIC0+IC0xDQotLS0gTFIgc3dhcA0KLWRxY290NTM4IGNvbXBhcmV0b3RhbCAgICAxRS0xNyAgMSAgICAgICAtPiAtMQ0KLWRxY290NTM5IGNvbXBhcmV0b3RhbCAgICAxRS0xNiAgMSAgICAgICAtPiAtMQ0KLWRxY290NTQwIGNvbXBhcmV0b3RhbCAgICAxRS0xNSAgMSAgICAgICAtPiAtMQ0KLWRxY290NTQxIGNvbXBhcmV0b3RhbCAgICAxRS0xNCAgMSAgICAgICAtPiAtMQ0KLWRxY290NTQyIGNvbXBhcmV0b3RhbCAgICAxRS0xMyAgMSAgICAgICAtPiAtMQ0KLWRxY290NTQzIGNvbXBhcmV0b3RhbCAgICAxRS0xMiAgMSAgICAgICAtPiAtMQ0KLWRxY290NTQ0IGNvbXBhcmV0b3RhbCAgICAxRS0xMSAgMSAgICAgICAtPiAtMQ0KLWRxY290NTQ1IGNvbXBhcmV0b3RhbCAgICAxRS0xMCAgMSAgICAgICAtPiAtMQ0KLWRxY290NTQ2IGNvbXBhcmV0b3RhbCAgICAxRS05ICAgMSAgICAgICAtPiAtMQ0KLWRxY290NTQ3IGNvbXBhcmV0b3RhbCAgICAxRS04ICAgMSAgICAgICAtPiAtMQ0KLWRxY290NTQ4IGNvbXBhcmV0b3RhbCAgICAxRS03ICAgMSAgICAgICAtPiAtMQ0KLWRxY290NTQ5IGNvbXBhcmV0b3RhbCAgICAxRS02ICAgMSAgICAgICAtPiAtMQ0KLWRxY290NTUwIGNvbXBhcmV0b3RhbCAgICAxRS01ICAgMSAgICAgICAtPiAtMQ0KLWRxY290NTUxIGNvbXBhcmV0b3RhbCAgICAxRS00ICAgMSAgICAgICAtPiAtMQ0KLWRxY290NTUyIGNvbXBhcmV0b3RhbCAgICAxRS0zICAgMSAgICAgICAtPiAtMQ0KLWRxY290NTUzIGNvbXBhcmV0b3RhbCAgICAxRS0yICAgMSAgICAgICAtPiAtMQ0KLWRxY290NTU0IGNvbXBhcmV0b3RhbCAgICAxRS0xICAgMSAgICAgICAtPiAtMQ0KLWRxY290NTU1IGNvbXBhcmV0b3RhbCAgICAxRS0wICAgMSAgICAgICAtPiAgMA0KLWRxY290NTU2IGNvbXBhcmV0b3RhbCAgICAxRSsxICAgMSAgICAgICAtPiAgMQ0KLWRxY290NTU3IGNvbXBhcmV0b3RhbCAgICAxRSsyICAgMSAgICAgICAtPiAgMQ0KLWRxY290NTU4IGNvbXBhcmV0b3RhbCAgICAxRSszICAgMSAgICAgICAtPiAgMQ0KLWRxY290NTU5IGNvbXBhcmV0b3RhbCAgICAxRSs0ICAgMSAgICAgICAtPiAgMQ0KLWRxY290NTYxIGNvbXBhcmV0b3RhbCAgICAxRSs1ICAgMSAgICAgICAtPiAgMQ0KLWRxY290NTYyIGNvbXBhcmV0b3RhbCAgICAxRSs2ICAgMSAgICAgICAtPiAgMQ0KLWRxY290NTYzIGNvbXBhcmV0b3RhbCAgICAxRSs3ICAgMSAgICAgICAtPiAgMQ0KLWRxY290NTY0IGNvbXBhcmV0b3RhbCAgICAxRSs4ICAgMSAgICAgICAtPiAgMQ0KLWRxY290NTY1IGNvbXBhcmV0b3RhbCAgICAxRSs5ICAgMSAgICAgICAtPiAgMQ0KLWRxY290NTY2IGNvbXBhcmV0b3RhbCAgICAxRSsxMCAgMSAgICAgICAtPiAgMQ0KLWRxY290NTY3IGNvbXBhcmV0b3RhbCAgICAxRSsxMSAgMSAgICAgICAtPiAgMQ0KLWRxY290NTY4IGNvbXBhcmV0b3RhbCAgICAxRSsxMiAgMSAgICAgICAtPiAgMQ0KLWRxY290NTY5IGNvbXBhcmV0b3RhbCAgICAxRSsxMyAgMSAgICAgICAtPiAgMQ0KLWRxY290NTcwIGNvbXBhcmV0b3RhbCAgICAxRSsxNCAgMSAgICAgICAtPiAgMQ0KLWRxY290NTcxIGNvbXBhcmV0b3RhbCAgICAxRSsxNSAgMSAgICAgICAtPiAgMQ0KLWRxY290NTcyIGNvbXBhcmV0b3RhbCAgICAxRSsxNiAgMSAgICAgICAtPiAgMQ0KLWRxY290NTczIGNvbXBhcmV0b3RhbCAgICAxRSsxNyAgMSAgICAgICAtPiAgMQ0KLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KLWRxY290NTc4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE3ICAgIC0+IDENCi1kcWNvdDU3OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNiAgICAtPiAxDQotZHFjb3Q1ODAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQ0KLWRxY290NTgxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDENCi1kcWNvdDU4MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxDQotZHFjb3Q1ODMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQ0KLWRxY290NTg0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDENCi1kcWNvdDU4NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxDQotZHFjb3Q1ODYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQ0KLWRxY290NTg3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDENCi1kcWNvdDU4OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxDQotZHFjb3Q1ODkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTENCi1kcWNvdDU5MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQ0KLWRxY290NTkxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xDQotZHFjb3Q1OTIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTENCi1kcWNvdDU5MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQ0KLWRxY290NTk0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xDQotZHFjb3Q1OTUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTENCi1kcWNvdDU5NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQ0KLWRxY290NTk3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xDQotZHFjb3Q1OTggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTENCi1kcWNvdDU5OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQ0KLQ0KLS0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzDQotZHFjb3Q2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb3Q2MDEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb3Q2MDIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb3Q2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb3Q2MDQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb3Q2MDUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb3Q2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb3Q2MDcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb3Q2MDggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb3Q2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xDQotZHFjb3Q2MTAgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxDQotZHFjb3Q2MTEgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxDQotZHFjb3Q2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxDQotZHFjb3Q2MTMgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxDQotZHFjb3Q2MTQgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxDQotZHFjb3Q2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxDQotZHFjb3Q2MTYgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxDQotZHFjb3Q2MTcgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxDQotZHFjb3Q2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxDQotZHFjb3Q2MTkgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxDQotZHFjb3Q2MjAgY29tcGFyZXRvdGFsICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb3Q2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb3Q2MjIgY29tcGFyZXRvdGFsICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb3Q2MjMgY29tcGFyZXRvdGFsICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb3Q2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb3Q2MjUgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb3Q2MjYgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb3Q2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb3Q2MjggY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb3Q2MjkgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxDQotZHFjb3Q2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xDQotZHFjb3Q2MzEgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xDQotZHFjb3Q2MzIgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xDQotZHFjb3Q2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xDQotZHFjb3Q2MzQgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xDQotZHFjb3Q2MzUgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xDQotZHFjb3Q2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xDQotZHFjb3Q2MzcgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xDQotZHFjb3Q2MzggY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xDQotZHFjb3Q2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kcWNvdDY0MCBjb21wYXJldG90YWwgICAwICAgICAwICAgLT4gMA0KLWRxY290NjQxIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAgICAtPiAxDQotZHFjb3Q2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDENCi1kcWNvdDY0MyBjb21wYXJldG90YWwgICAwICAgICAwLjAgLT4gMQ0KLWRxY290NjQ0IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAgICAtPiAtMQ0KLWRxY290NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwDQotZHFjb3Q2NDYgY29tcGFyZXRvdGFsICAtMCAgICAtMC4wIC0+IC0xDQotZHFjb3Q2NDcgY29tcGFyZXRvdGFsICAtMCAgICAgMC4wIC0+IC0xDQotZHFjb3Q2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xDQotZHFjb3Q2NDkgY29tcGFyZXRvdGFsICAgMC4wICAtMCAgIC0+IDENCi1kcWNvdDY1MCBjb21wYXJldG90YWwgICAwLjAgIC0wLjAgLT4gMQ0KLWRxY290NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwDQotZHFjb3Q2NTIgY29tcGFyZXRvdGFsICAtMC4wICAgMCAgIC0+IC0xDQotZHFjb3Q2NTMgY29tcGFyZXRvdGFsICAtMC4wICAtMCAgIC0+IDENCi1kcWNvdDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMA0KLWRxY290NjU1IGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAuMCAtPiAtMQ0KLQ0KLWRxY290NjU2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAuMCAtPiAtMQ0KLWRxY290NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQ0KLWRxY290NjU4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAuMCAtPiAxDQotZHFjb3Q2NTkgY29tcGFyZXRvdGFsICAgMEUyICAgMC4wIC0+IDENCi1kcWNvdDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTENCi1kcWNvdDY2MSBjb21wYXJldG90YWwgIC0wRTIgICAwICAgLT4gLTENCi1kcWNvdDY2MiBjb21wYXJldG90YWwgICAwRTEgICAwICAgLT4gMQ0KLWRxY290NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxDQotZHFjb3Q2NjQgY29tcGFyZXRvdGFsICAtMEUxICAtMEUxIC0+IDANCi1kcWNvdDY2NSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTEgLT4gLTENCi1kcWNvdDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQ0KLWRxY290NjY3IGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMSAtPiAxDQotZHFjb3Q2NjggY29tcGFyZXRvdGFsICAtMEUxICAtMEUyIC0+IDENCi1kcWNvdDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMA0KLWRxY290NjcwIGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMiAtPiAxDQotZHFjb3Q2NzEgY29tcGFyZXRvdGFsICAgMEUyICAtMEUyIC0+IDENCi1kcWNvdDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTENCi1kcWNvdDY3MyBjb21wYXJldG90YWwgIC0wRTIgICAwRTEgLT4gLTENCi1kcWNvdDY3NCBjb21wYXJldG90YWwgICAwRTEgICAwRTEgLT4gMA0KLWRxY290Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxDQotZHFjb3Q2NzYgY29tcGFyZXRvdGFsICAtMEUxICAgMEUyIC0+IC0xDQotZHFjb3Q2NzcgY29tcGFyZXRvdGFsICAtMEUyICAgMEUyIC0+IC0xDQotZHFjb3Q2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xDQotZHFjb3Q2NzkgY29tcGFyZXRvdGFsICAgMEUyICAgMEUyIC0+IDANCi0NCi0tLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQotZHFjb3Q2ODAgY29tcGFyZXRvdGFsICAgMTIgICAgMTIgICAgICAgICAgIC0+IDANCi1kcWNvdDY4MSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wICAgICAgICAgLT4gMQ0KLWRxY290NjgyIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwICAgICAgICAtPiAxDQotZHFjb3Q2ODMgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDENCi1kcWNvdDY4NCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMQ0KLWRxY290Njg1IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAxDQotZHFjb3Q2ODYgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDENCi1kcWNvdDY4NyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMQ0KLWRxY290Njg4IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAxDQotZHFjb3Q2ODkgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDENCi1kcWNvdDY5MCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgICAgMTIgLT4gMA0KLWRxY290NjkxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgICAxMiAtPiAtMQ0KLWRxY290NjkyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgICAxMiAtPiAtMQ0KLWRxY290NjkzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAtMQ0KLWRxY290Njk0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAtMQ0KLWRxY290Njk1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAtMQ0KLWRxY290Njk2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAtMQ0KLWRxY290Njk3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAtMQ0KLWRxY290Njk4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAtMQ0KLWRxY290Njk5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAtMQ0KLQ0KLS0tIG9sZCBsb25nIG9wZXJhbmQgY2hlY2tzDQotZHFjb3Q3MDEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAwICAxIC0+ICAxDQotZHFjb3Q3MDIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgIC0+IC0xDQotZHFjb3Q3MDMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgICAxIC0+ICAxDQotZHFjb3Q3MDQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgIC0+IC0xDQotZHFjb3Q3MDUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgICAxIC0+ICAxDQotZHFjb3Q3MDYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgIC0+IC0xDQotZHFjb3Q3MDcgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTEgICAxIC0+ICAxDQotZHFjb3Q3MDggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgIC0+IC0xDQotZHFjb3Q3MDkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxICAxIC0+ICAxDQotZHFjb3Q3MTAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgIC0+IC0xDQotZHFjb3Q3MTEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgICAxIC0+ICAxDQotZHFjb3Q3MTIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgIC0+IC0xDQotZHFjb3Q3MTMgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkxICAxIC0+IC0xDQotZHFjb3Q3MTQgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTEgIC0+ICAxDQotZHFjb3Q3MTUgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkwMSAxIC0+IC0xDQotZHFjb3Q3MTYgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTAxIC0+ICAxDQotZHFjb3Q3MTcgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODk2ICAxIC0+IC0xDQotZHFjb3Q3MTggY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTYgIC0+ICAxDQotDQotLS0gb2xkIHJlc2lkdWUgY2FzZXMNCi1kcWNvdDc0MCBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5OSAgLT4gMQ0KLWRxY290NzQxIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTkgICAtPiAxDQotZHFjb3Q3NDIgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5ICAgIC0+IDENCi1kcWNvdDc0MyBjb21wYXJldG90YWwgIDEgIDEuMDAwMCAgICAgLT4gMQ0KLWRxY290NzQ0IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMSAgICAtPiAtMQ0KLWRxY290NzQ1IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDEgICAtPiAtMQ0KLWRxY290NzQ2IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDAxICAtPiAtMQ0KLWRxY290NzUwIGNvbXBhcmV0b3RhbCAgMC45OTk5OTk5ICAxICAtPiAtMQ0KLWRxY290NzUxIGNvbXBhcmV0b3RhbCAgMC45OTk5OTkgICAxICAtPiAtMQ0KLWRxY290NzUyIGNvbXBhcmV0b3RhbCAgMC45OTk5OSAgICAxICAtPiAtMQ0KLWRxY290NzUzIGNvbXBhcmV0b3RhbCAgMS4wMDAwICAgICAxICAtPiAtMQ0KLWRxY290NzU0IGNvbXBhcmV0b3RhbCAgMS4wMDAwMSAgICAxICAtPiAxDQotZHFjb3Q3NTUgY29tcGFyZXRvdGFsICAxLjAwMDAwMSAgIDEgIC0+IDENCi1kcWNvdDc1NiBjb21wYXJldG90YWwgIDEuMDAwMDAwMSAgMSAgLT4gMQ0KLQ0KLS0tIFNwZWNpYWxzDQotZHFjb3Q3ODAgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQ0KLWRxY290NzgxIGNvbXBhcmV0b3RhbCAgSW5mICAtMTAwMCAgLT4gIDENCi1kcWNvdDc4MiBjb21wYXJldG90YWwgIEluZiAgLTEgICAgIC0+ICAxDQotZHFjb3Q3ODMgY29tcGFyZXRvdGFsICBJbmYgIC0wICAgICAtPiAgMQ0KLWRxY290Nzg0IGNvbXBhcmV0b3RhbCAgSW5mICAgMCAgICAgLT4gIDENCi1kcWNvdDc4NSBjb21wYXJldG90YWwgIEluZiAgIDEgICAgIC0+ICAxDQotZHFjb3Q3ODYgY29tcGFyZXRvdGFsICBJbmYgICAxMDAwICAtPiAgMQ0KLWRxY290Nzg3IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDANCi1kcWNvdDc4OCBjb21wYXJldG90YWwgLTEwMDAgIEluZiAgIC0+IC0xDQotZHFjb3Q3ODkgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQ0KLWRxY290NzkwIGNvbXBhcmV0b3RhbCAtMSAgICAgSW5mICAgLT4gLTENCi1kcWNvdDc5MSBjb21wYXJldG90YWwgLTAgICAgIEluZiAgIC0+IC0xDQotZHFjb3Q3OTIgY29tcGFyZXRvdGFsICAwICAgICBJbmYgICAtPiAtMQ0KLWRxY290NzkzIGNvbXBhcmV0b3RhbCAgMSAgICAgSW5mICAgLT4gLTENCi1kcWNvdDc5NCBjb21wYXJldG90YWwgIDEwMDAgIEluZiAgIC0+IC0xDQotZHFjb3Q3OTUgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMA0KLQ0KLWRxY290ODAwIGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDANCi1kcWNvdDgwMSBjb21wYXJldG90YWwgLUluZiAgLTEwMDAgIC0+IC0xDQotZHFjb3Q4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQ0KLWRxY290ODAzIGNvbXBhcmV0b3RhbCAtSW5mICAtMCAgICAgLT4gLTENCi1kcWNvdDgwNCBjb21wYXJldG90YWwgLUluZiAgIDAgICAgIC0+IC0xDQotZHFjb3Q4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQ0KLWRxY290ODA2IGNvbXBhcmV0b3RhbCAtSW5mICAgMTAwMCAgLT4gLTENCi1kcWNvdDgwNyBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xDQotZHFjb3Q4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMA0KLWRxY290ODA5IGNvbXBhcmV0b3RhbCAtMTAwMCAtSW5mICAgLT4gIDENCi1kcWNvdDgxMCBjb21wYXJldG90YWwgLTEgICAgLUluZiAgIC0+ICAxDQotZHFjb3Q4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQ0KLWRxY290ODEyIGNvbXBhcmV0b3RhbCAgMCAgICAtSW5mICAgLT4gIDENCi1kcWNvdDgxMyBjb21wYXJldG90YWwgIDEgICAgLUluZiAgIC0+ICAxDQotZHFjb3Q4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQ0KLWRxY290ODE1IGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDENCi0NCi1kcWNvdDgyMSBjb21wYXJldG90YWwgIE5hTiAtSW5mICAgIC0+ICAxDQotZHFjb3Q4MjIgY29tcGFyZXRvdGFsICBOYU4gLTEwMDAgICAtPiAgMQ0KLWRxY290ODIzIGNvbXBhcmV0b3RhbCAgTmFOIC0xICAgICAgLT4gIDENCi1kcWNvdDgyNCBjb21wYXJldG90YWwgIE5hTiAtMCAgICAgIC0+ICAxDQotZHFjb3Q4MjUgY29tcGFyZXRvdGFsICBOYU4gIDAgICAgICAtPiAgMQ0KLWRxY290ODI2IGNvbXBhcmV0b3RhbCAgTmFOICAxICAgICAgLT4gIDENCi1kcWNvdDgyNyBjb21wYXJldG90YWwgIE5hTiAgMTAwMCAgIC0+ICAxDQotZHFjb3Q4MjggY29tcGFyZXRvdGFsICBOYU4gIEluZiAgICAtPiAgMQ0KLWRxY290ODI5IGNvbXBhcmV0b3RhbCAgTmFOICBOYU4gICAgLT4gIDANCi1kcWNvdDgzMCBjb21wYXJldG90YWwgLUluZiAgTmFOICAgIC0+ICAtMQ0KLWRxY290ODMxIGNvbXBhcmV0b3RhbCAtMTAwMCBOYU4gICAgLT4gIC0xDQotZHFjb3Q4MzIgY29tcGFyZXRvdGFsIC0xICAgIE5hTiAgICAtPiAgLTENCi1kcWNvdDgzMyBjb21wYXJldG90YWwgLTAgICAgTmFOICAgIC0+ICAtMQ0KLWRxY290ODM0IGNvbXBhcmV0b3RhbCAgMCAgICBOYU4gICAgLT4gIC0xDQotZHFjb3Q4MzUgY29tcGFyZXRvdGFsICAxICAgIE5hTiAgICAtPiAgLTENCi1kcWNvdDgzNiBjb21wYXJldG90YWwgIDEwMDAgTmFOICAgIC0+ICAtMQ0KLWRxY290ODM3IGNvbXBhcmV0b3RhbCAgSW5mICBOYU4gICAgLT4gIC0xDQotZHFjb3Q4MzggY29tcGFyZXRvdGFsIC1OYU4gLU5hTiAgICAtPiAgMA0KLWRxY290ODM5IGNvbXBhcmV0b3RhbCArTmFOIC1OYU4gICAgLT4gIDENCi1kcWNvdDg0MCBjb21wYXJldG90YWwgLU5hTiArTmFOICAgIC0+ICAtMQ0KLQ0KLWRxY290ODQxIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgLT4gIDENCi1kcWNvdDg0MiBjb21wYXJldG90YWwgIHNOYU4gLU5hTiAgIC0+ICAxDQotZHFjb3Q4NDMgY29tcGFyZXRvdGFsICBzTmFOIC1JbmYgICAtPiAgMQ0KLWRxY290ODQ0IGNvbXBhcmV0b3RhbCAgc05hTiAtMTAwMCAgLT4gIDENCi1kcWNvdDg0NSBjb21wYXJldG90YWwgIHNOYU4gLTEgICAgIC0+ICAxDQotZHFjb3Q4NDYgY29tcGFyZXRvdGFsICBzTmFOIC0wICAgICAtPiAgMQ0KLWRxY290ODQ3IGNvbXBhcmV0b3RhbCAgc05hTiAgMCAgICAgLT4gIDENCi1kcWNvdDg0OCBjb21wYXJldG90YWwgIHNOYU4gIDEgICAgIC0+ICAxDQotZHFjb3Q4NDkgY29tcGFyZXRvdGFsICBzTmFOICAxMDAwICAtPiAgMQ0KLWRxY290ODUwIGNvbXBhcmV0b3RhbCAgc05hTiAgTmFOICAgLT4gIC0xDQotZHFjb3Q4NTEgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMA0KLQ0KLWRxY290ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xDQotZHFjb3Q4NTMgY29tcGFyZXRvdGFsIC1OYU4gIHNOYU4gICAtPiAgLTENCi1kcWNvdDg1NCBjb21wYXJldG90YWwgLUluZiAgc05hTiAgIC0+ICAtMQ0KLWRxY290ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xDQotZHFjb3Q4NTYgY29tcGFyZXRvdGFsIC0xICAgIHNOYU4gICAtPiAgLTENCi1kcWNvdDg1NyBjb21wYXJldG90YWwgLTAgICAgc05hTiAgIC0+ICAtMQ0KLWRxY290ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xDQotZHFjb3Q4NTkgY29tcGFyZXRvdGFsICAxICAgIHNOYU4gICAtPiAgLTENCi1kcWNvdDg2MCBjb21wYXJldG90YWwgIDEwMDAgc05hTiAgIC0+ICAtMQ0KLWRxY290ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xDQotZHFjb3Q4NjIgY29tcGFyZXRvdGFsICBOYU4gIHNOYU4gICAtPiAgMQ0KLWRxY290ODYzIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDANCi0NCi1kcWNvdDg3MSBjb21wYXJldG90YWwgIC1zTmFOIC1zTmFOICAtPiAgMA0KLWRxY290ODcyIGNvbXBhcmV0b3RhbCAgLXNOYU4gLU5hTiAgIC0+ICAxDQotZHFjb3Q4NzMgY29tcGFyZXRvdGFsICAtc05hTiAtSW5mICAgLT4gIC0xDQotZHFjb3Q4NzQgY29tcGFyZXRvdGFsICAtc05hTiAtMTAwMCAgLT4gIC0xDQotZHFjb3Q4NzUgY29tcGFyZXRvdGFsICAtc05hTiAtMSAgICAgLT4gIC0xDQotZHFjb3Q4NzYgY29tcGFyZXRvdGFsICAtc05hTiAtMCAgICAgLT4gIC0xDQotZHFjb3Q4NzcgY29tcGFyZXRvdGFsICAtc05hTiAgMCAgICAgLT4gIC0xDQotZHFjb3Q4NzggY29tcGFyZXRvdGFsICAtc05hTiAgMSAgICAgLT4gIC0xDQotZHFjb3Q4NzkgY29tcGFyZXRvdGFsICAtc05hTiAgMTAwMCAgLT4gIC0xDQotZHFjb3Q4ODAgY29tcGFyZXRvdGFsICAtc05hTiAgTmFOICAgLT4gIC0xDQotZHFjb3Q4ODEgY29tcGFyZXRvdGFsICAtc05hTiBzTmFOICAgLT4gIC0xDQotDQotZHFjb3Q4ODIgY29tcGFyZXRvdGFsIC1zTmFOIC1zTmFOICAgLT4gIDANCi1kcWNvdDg4MyBjb21wYXJldG90YWwgLU5hTiAgLXNOYU4gICAtPiAgLTENCi1kcWNvdDg4NCBjb21wYXJldG90YWwgLUluZiAgLXNOYU4gICAtPiAgMQ0KLWRxY290ODg1IGNvbXBhcmV0b3RhbCAtMTAwMCAtc05hTiAgIC0+ICAxDQotZHFjb3Q4ODYgY29tcGFyZXRvdGFsIC0xICAgIC1zTmFOICAgLT4gIDENCi1kcWNvdDg4NyBjb21wYXJldG90YWwgLTAgICAgLXNOYU4gICAtPiAgMQ0KLWRxY290ODg4IGNvbXBhcmV0b3RhbCAgMCAgICAtc05hTiAgIC0+ICAxDQotZHFjb3Q4ODkgY29tcGFyZXRvdGFsICAxICAgIC1zTmFOICAgLT4gIDENCi1kcWNvdDg5MCBjb21wYXJldG90YWwgIDEwMDAgLXNOYU4gICAtPiAgMQ0KLWRxY290ODkxIGNvbXBhcmV0b3RhbCAgSW5mICAtc05hTiAgIC0+ICAxDQotZHFjb3Q4OTIgY29tcGFyZXRvdGFsICBOYU4gIC1zTmFOICAgLT4gIDENCi1kcWNvdDg5MyBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gICAtPiAgMQ0KLQ0KLS0tIE5hTnMgd2l0aCBwYXlsb2FkDQotZHFjb3Q5NjAgY29tcGFyZXRvdGFsICBOYU45IC1JbmYgICAtPiAgMQ0KLWRxY290OTYxIGNvbXBhcmV0b3RhbCAgTmFOOCAgOTk5ICAgLT4gIDENCi1kcWNvdDk2MiBjb21wYXJldG90YWwgIE5hTjc3IEluZiAgIC0+ICAxDQotZHFjb3Q5NjMgY29tcGFyZXRvdGFsIC1OYU42NyBOYU41ICAtPiAgLTENCi1kcWNvdDk2NCBjb21wYXJldG90YWwgLUluZiAgLU5hTjQgIC0+ICAxDQotZHFjb3Q5NjUgY29tcGFyZXRvdGFsIC05OTkgIC1OYU4zMyAtPiAgMQ0KLWRxY290OTY2IGNvbXBhcmV0b3RhbCAgSW5mICAgTmFOMiAgLT4gIC0xDQotDQotZHFjb3Q5NzAgY29tcGFyZXRvdGFsIC1OYU40MSAtTmFONDIgLT4gMQ0KLWRxY290OTcxIGNvbXBhcmV0b3RhbCArTmFONDEgLU5hTjQyIC0+IDENCi1kcWNvdDk3MiBjb21wYXJldG90YWwgLU5hTjQxICtOYU40MiAtPiAtMQ0KLWRxY290OTczIGNvbXBhcmV0b3RhbCArTmFONDEgK05hTjQyIC0+IC0xDQotZHFjb3Q5NzQgY29tcGFyZXRvdGFsIC1OYU40MiAtTmFOMDEgLT4gLTENCi1kcWNvdDk3NSBjb21wYXJldG90YWwgK05hTjQyIC1OYU4wMSAtPiAgMQ0KLWRxY290OTc2IGNvbXBhcmV0b3RhbCAtTmFONDIgK05hTjAxIC0+IC0xDQotZHFjb3Q5NzcgY29tcGFyZXRvdGFsICtOYU40MiArTmFOMDEgLT4gIDENCi0NCi1kcWNvdDk4MCBjb21wYXJldG90YWwgLXNOYU43NzEgLXNOYU43NzIgLT4gMQ0KLWRxY290OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxDQotZHFjb3Q5ODIgY29tcGFyZXRvdGFsIC1zTmFONzcxICtzTmFONzcyIC0+IC0xDQotZHFjb3Q5ODMgY29tcGFyZXRvdGFsICtzTmFONzcxICtzTmFONzcyIC0+IC0xDQotZHFjb3Q5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xDQotZHFjb3Q5ODUgY29tcGFyZXRvdGFsICtzTmFONzcyIC1zTmFONzcxIC0+ICAxDQotZHFjb3Q5ODYgY29tcGFyZXRvdGFsIC1zTmFONzcyICtzTmFONzcxIC0+IC0xDQotZHFjb3Q5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQotDQotZHFjb3Q5OTEgY29tcGFyZXRvdGFsIC1zTmFOOTkgLUluZiAgICAtPiAtMQ0KLWRxY290OTkyIGNvbXBhcmV0b3RhbCAgc05hTjk4IC0xMSAgICAgLT4gIDENCi1kcWNvdDk5MyBjb21wYXJldG90YWwgIHNOYU45NyAgTmFOICAgIC0+IC0xDQotZHFjb3Q5OTQgY29tcGFyZXRvdGFsICBzTmFOMTYgc05hTjk0ICAtPiAtMQ0KLWRxY290OTk1IGNvbXBhcmV0b3RhbCAgTmFOODUgIHNOYU44MyAgLT4gIDENCi1kcWNvdDk5NiBjb21wYXJldG90YWwgLUluZiAgICBzTmFOOTIgIC0+IC0xDQotZHFjb3Q5OTcgY29tcGFyZXRvdGFsICAwODggICAgc05hTjgxICAtPiAtMQ0KLWRxY290OTk4IGNvbXBhcmV0b3RhbCAgSW5mICAgIHNOYU45MCAgLT4gLTENCi1kcWNvdDk5OSBjb21wYXJldG90YWwgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQotDQotLS0gc3ByZWFkIHplcm9zDQotZHFjb3QxMTEwIGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgIDAgICAgICAgLT4gLTENCi1kcWNvdDExMTEgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAtMCAgICAgICAtPiAgMQ0KLWRxY290MTExMiBjb21wYXJldG90YWwgIC0wRS02MTQzICAwICAgICAgIC0+IC0xDQotZHFjb3QxMTEzIGNvbXBhcmV0b3RhbCAgLTBFLTYxNDMgLTAgICAgICAgLT4gIDENCi1kcWNvdDExMTQgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAgMEUrNjE0NCAgLT4gLTENCi1kcWNvdDExMTUgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAtMEUrNjE0NCAgLT4gIDENCi1kcWNvdDExMTYgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAgMEUrNjE0NCAgLT4gLTENCi1kcWNvdDExMTcgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAtMEUrNjE0NCAgLT4gIDENCi1kcWNvdDExMTggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRSs2MTQ0ICAtPiAtMQ0KLWRxY290MTExOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFKzYxNDQgIC0+ICAxDQotZHFjb3QxMTIwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUrNjE0NCAgLT4gLTENCi1kcWNvdDExMjEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRSs2MTQ0ICAtPiAgMQ0KLQ0KLWRxY290MTEzMCBjb21wYXJldG90YWwgICAwRSs2MTQ0ICAwICAgICAgIC0+ICAxDQotZHFjb3QxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgLTAgICAgICAgLT4gIDENCi1kcWNvdDExMzIgY29tcGFyZXRvdGFsICAtMEUrNjE0NCAgMCAgICAgICAtPiAtMQ0KLWRxY290MTEzMyBjb21wYXJldG90YWwgIC0wRSs2MTQ0IC0wICAgICAgIC0+IC0xDQotZHFjb3QxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgIDBFLTYxNDMgIC0+ICAxDQotZHFjb3QxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgLTBFLTYxNDMgIC0+ICAxDQotZHFjb3QxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgIDBFLTYxNDMgIC0+IC0xDQotZHFjb3QxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgLTBFLTYxNDMgIC0+IC0xDQotZHFjb3QxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtNjE0MyAgLT4gIDENCi1kcWNvdDExMzkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRS02MTQzICAtPiAgMQ0KLWRxY290MTE0MCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFLTYxNDMgIC0+IC0xDQotZHFjb3QxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtNjE0MyAgLT4gLTENCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFjb3Q5OTkwIGNvbXBhcmV0b3RhbCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvdDk5OTEgY29tcGFyZXRvdGFsICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb21wYXJlVG90YWwuZGVjVGVzdCAtLSBkZWNRdWFkIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmcgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwKKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdAorLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4KKy0tIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMKKy0tIHRoYW4gY29tcGFyZS4KKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxY290MDAxIGNvbXBhcmV0b3RhbCAgLTIgIC0yICAtPiAwCitkcWNvdDAwMiBjb21wYXJldG90YWwgIC0yICAtMSAgLT4gLTEKK2RxY290MDAzIGNvbXBhcmV0b3RhbCAgLTIgICAwICAtPiAtMQorZHFjb3QwMDQgY29tcGFyZXRvdGFsICAtMiAgIDEgIC0+IC0xCitkcWNvdDAwNSBjb21wYXJldG90YWwgIC0yICAgMiAgLT4gLTEKK2RxY290MDA2IGNvbXBhcmV0b3RhbCAgLTEgIC0yICAtPiAxCitkcWNvdDAwNyBjb21wYXJldG90YWwgIC0xICAtMSAgLT4gMAorZHFjb3QwMDggY29tcGFyZXRvdGFsICAtMSAgIDAgIC0+IC0xCitkcWNvdDAwOSBjb21wYXJldG90YWwgIC0xICAgMSAgLT4gLTEKK2RxY290MDEwIGNvbXBhcmV0b3RhbCAgLTEgICAyICAtPiAtMQorZHFjb3QwMTEgY29tcGFyZXRvdGFsICAgMCAgLTIgIC0+IDEKK2RxY290MDEyIGNvbXBhcmV0b3RhbCAgIDAgIC0xICAtPiAxCitkcWNvdDAxMyBjb21wYXJldG90YWwgICAwICAgMCAgLT4gMAorZHFjb3QwMTQgY29tcGFyZXRvdGFsICAgMCAgIDEgIC0+IC0xCitkcWNvdDAxNSBjb21wYXJldG90YWwgICAwICAgMiAgLT4gLTEKK2RxY290MDE2IGNvbXBhcmV0b3RhbCAgIDEgIC0yICAtPiAxCitkcWNvdDAxNyBjb21wYXJldG90YWwgICAxICAtMSAgLT4gMQorZHFjb3QwMTggY29tcGFyZXRvdGFsICAgMSAgIDAgIC0+IDEKK2RxY290MDE5IGNvbXBhcmV0b3RhbCAgIDEgICAxICAtPiAwCitkcWNvdDAyMCBjb21wYXJldG90YWwgICAxICAgMiAgLT4gLTEKK2RxY290MDIxIGNvbXBhcmV0b3RhbCAgIDIgIC0yICAtPiAxCitkcWNvdDAyMiBjb21wYXJldG90YWwgICAyICAtMSAgLT4gMQorZHFjb3QwMjMgY29tcGFyZXRvdGFsICAgMiAgIDAgIC0+IDEKK2RxY290MDI1IGNvbXBhcmV0b3RhbCAgIDIgICAxICAtPiAxCitkcWNvdDAyNiBjb21wYXJldG90YWwgICAyICAgMiAgLT4gMAorCitkcWNvdDAzMSBjb21wYXJldG90YWwgIC0yMCAgLTIwICAtPiAwCitkcWNvdDAzMiBjb21wYXJldG90YWwgIC0yMCAgLTEwICAtPiAtMQorZHFjb3QwMzMgY29tcGFyZXRvdGFsICAtMjAgICAwMCAgLT4gLTEKK2RxY290MDM0IGNvbXBhcmV0b3RhbCAgLTIwICAgMTAgIC0+IC0xCitkcWNvdDAzNSBjb21wYXJldG90YWwgIC0yMCAgIDIwICAtPiAtMQorZHFjb3QwMzYgY29tcGFyZXRvdGFsICAtMTAgIC0yMCAgLT4gMQorZHFjb3QwMzcgY29tcGFyZXRvdGFsICAtMTAgIC0xMCAgLT4gMAorZHFjb3QwMzggY29tcGFyZXRvdGFsICAtMTAgICAwMCAgLT4gLTEKK2RxY290MDM5IGNvbXBhcmV0b3RhbCAgLTEwICAgMTAgIC0+IC0xCitkcWNvdDA0MCBjb21wYXJldG90YWwgIC0xMCAgIDIwICAtPiAtMQorZHFjb3QwNDEgY29tcGFyZXRvdGFsICAgMDAgIC0yMCAgLT4gMQorZHFjb3QwNDIgY29tcGFyZXRvdGFsICAgMDAgIC0xMCAgLT4gMQorZHFjb3QwNDMgY29tcGFyZXRvdGFsICAgMDAgICAwMCAgLT4gMAorZHFjb3QwNDQgY29tcGFyZXRvdGFsICAgMDAgICAxMCAgLT4gLTEKK2RxY290MDQ1IGNvbXBhcmV0b3RhbCAgIDAwICAgMjAgIC0+IC0xCitkcWNvdDA0NiBjb21wYXJldG90YWwgICAxMCAgLTIwICAtPiAxCitkcWNvdDA0NyBjb21wYXJldG90YWwgICAxMCAgLTEwICAtPiAxCitkcWNvdDA0OCBjb21wYXJldG90YWwgICAxMCAgIDAwICAtPiAxCitkcWNvdDA0OSBjb21wYXJldG90YWwgICAxMCAgIDEwICAtPiAwCitkcWNvdDA1MCBjb21wYXJldG90YWwgICAxMCAgIDIwICAtPiAtMQorZHFjb3QwNTEgY29tcGFyZXRvdGFsICAgMjAgIC0yMCAgLT4gMQorZHFjb3QwNTIgY29tcGFyZXRvdGFsICAgMjAgIC0xMCAgLT4gMQorZHFjb3QwNTMgY29tcGFyZXRvdGFsICAgMjAgICAwMCAgLT4gMQorZHFjb3QwNTUgY29tcGFyZXRvdGFsICAgMjAgICAxMCAgLT4gMQorZHFjb3QwNTYgY29tcGFyZXRvdGFsICAgMjAgICAyMCAgLT4gMAorCitkcWNvdDA2MSBjb21wYXJldG90YWwgIC0yLjAgIC0yLjAgIC0+IDAKK2RxY290MDYyIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTEuMCAgLT4gLTEKK2RxY290MDYzIGNvbXBhcmV0b3RhbCAgLTIuMCAgIDAuMCAgLT4gLTEKK2RxY290MDY0IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDEuMCAgLT4gLTEKK2RxY290MDY1IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDIuMCAgLT4gLTEKK2RxY290MDY2IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTIuMCAgLT4gMQorZHFjb3QwNjcgY29tcGFyZXRvdGFsICAtMS4wICAtMS4wICAtPiAwCitkcWNvdDA2OCBjb21wYXJldG90YWwgIC0xLjAgICAwLjAgIC0+IC0xCitkcWNvdDA2OSBjb21wYXJldG90YWwgIC0xLjAgICAxLjAgIC0+IC0xCitkcWNvdDA3MCBjb21wYXJldG90YWwgIC0xLjAgICAyLjAgIC0+IC0xCitkcWNvdDA3MSBjb21wYXJldG90YWwgICAwLjAgIC0yLjAgIC0+IDEKK2RxY290MDcyIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTEuMCAgLT4gMQorZHFjb3QwNzMgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wICAtPiAwCitkcWNvdDA3NCBjb21wYXJldG90YWwgICAwLjAgICAxLjAgIC0+IC0xCitkcWNvdDA3NSBjb21wYXJldG90YWwgICAwLjAgICAyLjAgIC0+IC0xCitkcWNvdDA3NiBjb21wYXJldG90YWwgICAxLjAgIC0yLjAgIC0+IDEKK2RxY290MDc3IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTEuMCAgLT4gMQorZHFjb3QwNzggY29tcGFyZXRvdGFsICAgMS4wICAgMC4wICAtPiAxCitkcWNvdDA3OSBjb21wYXJldG90YWwgICAxLjAgICAxLjAgIC0+IDAKK2RxY290MDgwIGNvbXBhcmV0b3RhbCAgIDEuMCAgIDIuMCAgLT4gLTEKK2RxY290MDgxIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTIuMCAgLT4gMQorZHFjb3QwODIgY29tcGFyZXRvdGFsICAgMi4wICAtMS4wICAtPiAxCitkcWNvdDA4MyBjb21wYXJldG90YWwgICAyLjAgICAwLjAgIC0+IDEKK2RxY290MDg1IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDEuMCAgLT4gMQorZHFjb3QwODYgY29tcGFyZXRvdGFsICAgMi4wICAgMi4wICAtPiAwCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorZHFjb3QwOTAgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IDAKK2RxY290MDkxIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtMQorZHFjb3QwOTIgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKK2RxY290MDkzIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbAorZHFjb3QxMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIDcuMCAgICAtPiAwCitkcWNvdDEwMSBjb21wYXJldG90YWwgICA3LjAgICAgNyAgICAgIC0+IC0xCitkcWNvdDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDEKK2RxY290MTAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICA3LjAgICAgLT4gMQorZHFjb3QxMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcuMCAgICAtPiAwCitkcWNvdDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDAKK2RxY290MTA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3ICAgICAgLT4gLTEKK2RxY290MTA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3RSswICAgLT4gLTEKK2RxY290MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMAorZHFjb3QxMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIDAuN0UrMSAtPiAwCitkcWNvdDExMCBjb21wYXJldG90YWwgICA3ICAgICAgNzBFLTEgIC0+IDEKKworZHFjb3QxMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIDcuMCAgICAtPiAxCitkcWNvdDEyMSBjb21wYXJldG90YWwgICA4LjAgICAgNyAgICAgIC0+IDEKK2RxY290MTIyIGNvbXBhcmV0b3RhbCAgIDggICAgICA3LjAgICAgLT4gMQorZHFjb3QxMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDcuMCAgICAtPiAxCitkcWNvdDEyNCBjb21wYXJldG90YWwgICA4MEUtMSAgNy4wICAgIC0+IDEKK2RxY290MTI1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA3ICAgICAgLT4gMQorZHFjb3QxMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIDcgICAgICAtPiAxCitkcWNvdDEyNyBjb21wYXJldG90YWwgICA4LjAgICAgN0UrMCAgIC0+IDEKK2RxY290MTI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3MEUtMSAgLT4gMQorZHFjb3QxMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuN0UrMSAgLT4gMQorZHFjb3QxMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIDcwRS0xICAtPiAxCisKK2RxY290MTQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5LjAgICAgLT4gLTEKK2RxY290MTQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5ICAgICAgLT4gLTEKK2RxY290MTQyIGNvbXBhcmV0b3RhbCAgIDggICAgICA5LjAgICAgLT4gLTEKK2RxY290MTQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2RxY290MTQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2RxY290MTQ1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA5ICAgICAgLT4gLTEKK2RxY290MTQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2RxY290MTQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5RSswICAgLT4gLTEKK2RxY290MTQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5MEUtMSAgLT4gLTEKK2RxY290MTQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjlFKzEgLT4gLTEKK2RxY290MTUwIGNvbXBhcmV0b3RhbCAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZHFjb3QyMDAgY29tcGFyZXRvdGFsICAtNy4wICAgIDcuMCAgICAtPiAtMQorZHFjb3QyMDEgY29tcGFyZXRvdGFsICAtNy4wICAgIDcgICAgICAtPiAtMQorZHFjb3QyMDIgY29tcGFyZXRvdGFsICAtNyAgICAgIDcuMCAgICAtPiAtMQorZHFjb3QyMDMgY29tcGFyZXRvdGFsICAtN0UrMCAgIDcuMCAgICAtPiAtMQorZHFjb3QyMDQgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcuMCAgICAtPiAtMQorZHFjb3QyMDUgY29tcGFyZXRvdGFsICAtMC43RSsxIDcgICAgICAtPiAtMQorZHFjb3QyMDYgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcgICAgICAtPiAtMQorZHFjb3QyMDcgY29tcGFyZXRvdGFsICAtNy4wICAgIDdFKzAgICAtPiAtMQorZHFjb3QyMDggY29tcGFyZXRvdGFsICAtNy4wICAgIDcwRS0xICAtPiAtMQorZHFjb3QyMDkgY29tcGFyZXRvdGFsICAtNyAgICAgIDAuN0UrMSAtPiAtMQorZHFjb3QyMTAgY29tcGFyZXRvdGFsICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitkcWNvdDIyMCBjb21wYXJldG90YWwgIC04LjAgICAgNy4wICAgIC0+IC0xCitkcWNvdDIyMSBjb21wYXJldG90YWwgIC04LjAgICAgNyAgICAgIC0+IC0xCitkcWNvdDIyMiBjb21wYXJldG90YWwgIC04ICAgICAgNy4wICAgIC0+IC0xCitkcWNvdDIyMyBjb21wYXJldG90YWwgIC04RSswICAgNy4wICAgIC0+IC0xCitkcWNvdDIyNCBjb21wYXJldG90YWwgIC04MEUtMSAgNy4wICAgIC0+IC0xCitkcWNvdDIyNSBjb21wYXJldG90YWwgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitkcWNvdDIyNiBjb21wYXJldG90YWwgIC04MEUtMSAgNyAgICAgIC0+IC0xCitkcWNvdDIyNyBjb21wYXJldG90YWwgIC04LjAgICAgN0UrMCAgIC0+IC0xCitkcWNvdDIyOCBjb21wYXJldG90YWwgIC04LjAgICAgNzBFLTEgIC0+IC0xCitkcWNvdDIyOSBjb21wYXJldG90YWwgIC04ICAgICAgMC43RSsxIC0+IC0xCitkcWNvdDIzMCBjb21wYXJldG90YWwgIC04ICAgICAgNzBFLTEgIC0+IC0xCisKK2RxY290MjQwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5LjAgICAgLT4gLTEKK2RxY290MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTEKK2RxY290MjQyIGNvbXBhcmV0b3RhbCAgLTggICAgICA5LjAgICAgLT4gLTEKK2RxY290MjQzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA5LjAgICAgLT4gLTEKK2RxY290MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2RxY290MjQ1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA5ICAgICAgLT4gLTEKK2RxY290MjQ2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2RxY290MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTEKK2RxY290MjQ4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5MEUtMSAgLT4gLTEKK2RxY290MjQ5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjlFKzEgLT4gLTEKK2RxY290MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZHFjb3QzMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIC03LjAgICAgLT4gMQorZHFjb3QzMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIC03ICAgICAgLT4gMQorZHFjb3QzMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIC03LjAgICAgLT4gMQorZHFjb3QzMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIC03LjAgICAgLT4gMQorZHFjb3QzMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03LjAgICAgLT4gMQorZHFjb3QzMDUgY29tcGFyZXRvdGFsICAgLjdFKzEgIC03ICAgICAgLT4gMQorZHFjb3QzMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03ICAgICAgLT4gMQorZHFjb3QzMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIC03RSswICAgLT4gMQorZHFjb3QzMDggY29tcGFyZXRvdGFsICAgNy4wICAgIC03MEUtMSAgLT4gMQorZHFjb3QzMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIC0uN0UrMSAgLT4gMQorZHFjb3QzMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitkcWNvdDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxCitkcWNvdDMyMSBjb21wYXJldG90YWwgICA4LjAgICAgLTcgICAgICAtPiAxCitkcWNvdDMyMiBjb21wYXJldG90YWwgICA4ICAgICAgLTcuMCAgICAtPiAxCitkcWNvdDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxCitkcWNvdDMyNCBjb21wYXJldG90YWwgICA4MEUtMSAgLTcuMCAgICAtPiAxCitkcWNvdDMyNSBjb21wYXJldG90YWwgICAuOEUrMSAgLTcgICAgICAtPiAxCitkcWNvdDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxCitkcWNvdDMyNyBjb21wYXJldG90YWwgICA4LjAgICAgLTdFKzAgICAtPiAxCitkcWNvdDMyOCBjb21wYXJldG90YWwgICA4LjAgICAgLTcwRS0xICAtPiAxCitkcWNvdDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxCitkcWNvdDMzMCBjb21wYXJldG90YWwgICA4ICAgICAgLTcwRS0xICAtPiAxCisKK2RxY290MzQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOS4wICAgIC0+IDEKK2RxY290MzQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOSAgICAgIC0+IDEKK2RxY290MzQyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOS4wICAgIC0+IDEKK2RxY290MzQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2RxY290MzQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2RxY290MzQ1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtOSAgICAgIC0+IDEKK2RxY290MzQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2RxY290MzQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2RxY290MzQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOTBFLTEgIC0+IDEKK2RxY290MzQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjlFKzEgIC0+IDEKK2RxY290MzUwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZHFjb3Q0MDAgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNy4wICAgIC0+IDAKK2RxY290NDAxIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcgICAgICAtPiAxCitkcWNvdDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTEKK2RxY290NDAzIGNvbXBhcmV0b3RhbCAgIC03RSswICAgLTcuMCAgICAtPiAtMQorZHFjb3Q0MDQgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2RxY290NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitkcWNvdDQwNiBjb21wYXJldG90YWwgICAtNzBFLTEgIC03ICAgICAgLT4gMQorZHFjb3Q0MDcgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtN0UrMCAgIC0+IDEKK2RxY290NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwCitkcWNvdDQwOSBjb21wYXJldG90YWwgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorZHFjb3Q0MTAgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNzBFLTEgIC0+IC0xCisKK2RxY290NDIwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorZHFjb3Q0MjEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNyAgICAgIC0+IC0xCitkcWNvdDQyMiBjb21wYXJldG90YWwgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2RxY290NDIzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTcuMCAgICAtPiAtMQorZHFjb3Q0MjQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCitkcWNvdDQyNSBjb21wYXJldG90YWwgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2RxY290NDI2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorZHFjb3Q0MjcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCitkcWNvdDQyOCBjb21wYXJldG90YWwgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2RxY290NDI5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS43RSsxICAtPiAtMQorZHFjb3Q0MzAgY29tcGFyZXRvdGFsICAgLTggICAgICAtNzBFLTEgIC0+IC0xCisKK2RxY290NDQwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkuMCAgICAtPiAxCitkcWNvdDQ0MSBjb21wYXJldG90YWwgICAtOC4wICAgIC05ICAgICAgLT4gMQorZHFjb3Q0NDIgY29tcGFyZXRvdGFsICAgLTggICAgICAtOS4wICAgIC0+IDEKK2RxY290NDQzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTkuMCAgICAtPiAxCitkcWNvdDQ0NCBjb21wYXJldG90YWwgICAtODBFLTEgIC05LjAgICAgLT4gMQorZHFjb3Q0NDUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtOSAgICAgIC0+IDEKK2RxY290NDQ2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkgICAgICAtPiAxCitkcWNvdDQ0NyBjb21wYXJldG90YWwgICAtOC4wICAgIC05RSswICAgLT4gMQorZHFjb3Q0NDggY29tcGFyZXRvdGFsICAgLTguMCAgICAtOTBFLTEgIC0+IDEKK2RxY290NDQ5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS45RSsxICAtPiAxCitkcWNvdDQ1MCBjb21wYXJldG90YWwgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZHFjb3Q0NzMgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZHFjb3Q0NzQgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkcWNvdDQ3NSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZHFjb3Q0NzYgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZHFjb3Q0NzcgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkcWNvdDQ3OCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZHFjb3Q0NzkgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZHFjb3Q0ODAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkcWNvdDQ4MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZHFjb3Q0ODIgY29tcGFyZXRvdGFsIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZHFjb3Q0ODMgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RxY290NDg3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgLT4gMQorZHFjb3Q0ODggY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDEKK2RxY290NDg5IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDEKK2RxY290NDkwIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMQorZHFjb3Q0OTEgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDEKK2RxY290NDkyIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDEKK2RxY290NDkzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgLT4gMQorZHFjb3Q0OTQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDEKK2RxY290NDk1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDEKK2RxY290NDk2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMQorZHFjb3Q0OTcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZHFjb3Q0OTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE3ICAgIC0+IDEKK2RxY290NDk5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNiAgICAtPiAxCitkcWNvdDUwMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTUgICAgLT4gMQorZHFjb3Q1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RxY290NTAyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMyAgICAtPiAxCitkcWNvdDUwMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTIgICAgLT4gMQorZHFjb3Q1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RxY290NTA1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMCAgICAtPiAxCitkcWNvdDUwNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOSAgICAgLT4gMQorZHFjb3Q1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RxY290NTA4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS03ICAgICAtPiAxCitkcWNvdDUwOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNiAgICAgLT4gMQorZHFjb3Q1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RxY290NTExIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS00ICAgICAtPiAxCitkcWNvdDUxMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMyAgICAgLT4gMQorZHFjb3Q1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RxY290NTE0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xICAgICAtPiAxCitkcWNvdDUxNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMCAgICAgLT4gMAorZHFjb3Q1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkcWNvdDUxNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2RxY290NTE4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSszICAgICAtPiAtMQorZHFjb3Q1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkcWNvdDUyMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2RxY290NTIyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs2ICAgICAtPiAtMQorZHFjb3Q1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkcWNvdDUyNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2RxY290NTI1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs5ICAgICAtPiAtMQorZHFjb3Q1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkcWNvdDUyNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2RxY290NTI4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMiAgICAtPiAtMQorZHFjb3Q1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkcWNvdDUzMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2RxY290NTMxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNSAgICAtPiAtMQorZHFjb3Q1MzIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE2ICAgIC0+IC0xCitkcWNvdDUzMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTcgICAgLT4gLTEKKy0tIExSIHN3YXAKK2RxY290NTM4IGNvbXBhcmV0b3RhbCAgICAxRS0xNyAgMSAgICAgICAtPiAtMQorZHFjb3Q1MzkgY29tcGFyZXRvdGFsICAgIDFFLTE2ICAxICAgICAgIC0+IC0xCitkcWNvdDU0MCBjb21wYXJldG90YWwgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2RxY290NTQxIGNvbXBhcmV0b3RhbCAgICAxRS0xNCAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDIgY29tcGFyZXRvdGFsICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkcWNvdDU0MyBjb21wYXJldG90YWwgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2RxY290NTQ0IGNvbXBhcmV0b3RhbCAgICAxRS0xMSAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDUgY29tcGFyZXRvdGFsICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkcWNvdDU0NiBjb21wYXJldG90YWwgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2RxY290NTQ3IGNvbXBhcmV0b3RhbCAgICAxRS04ICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDggY29tcGFyZXRvdGFsICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkcWNvdDU0OSBjb21wYXJldG90YWwgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2RxY290NTUwIGNvbXBhcmV0b3RhbCAgICAxRS01ICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NTEgY29tcGFyZXRvdGFsICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkcWNvdDU1MiBjb21wYXJldG90YWwgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2RxY290NTUzIGNvbXBhcmV0b3RhbCAgICAxRS0yICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NTQgY29tcGFyZXRvdGFsICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkcWNvdDU1NSBjb21wYXJldG90YWwgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2RxY290NTU2IGNvbXBhcmV0b3RhbCAgICAxRSsxICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NTcgY29tcGFyZXRvdGFsICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkcWNvdDU1OCBjb21wYXJldG90YWwgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2RxY290NTU5IGNvbXBhcmV0b3RhbCAgICAxRSs0ICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjEgY29tcGFyZXRvdGFsICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkcWNvdDU2MiBjb21wYXJldG90YWwgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2RxY290NTYzIGNvbXBhcmV0b3RhbCAgICAxRSs3ICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjQgY29tcGFyZXRvdGFsICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkcWNvdDU2NSBjb21wYXJldG90YWwgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2RxY290NTY2IGNvbXBhcmV0b3RhbCAgICAxRSsxMCAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjcgY29tcGFyZXRvdGFsICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkcWNvdDU2OCBjb21wYXJldG90YWwgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2RxY290NTY5IGNvbXBhcmV0b3RhbCAgICAxRSsxMyAgMSAgICAgICAtPiAgMQorZHFjb3Q1NzAgY29tcGFyZXRvdGFsICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkcWNvdDU3MSBjb21wYXJldG90YWwgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKK2RxY290NTcyIGNvbXBhcmV0b3RhbCAgICAxRSsxNiAgMSAgICAgICAtPiAgMQorZHFjb3Q1NzMgY29tcGFyZXRvdGFsICAgIDFFKzE3ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RxY290NTc4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE3ICAgIC0+IDEKK2RxY290NTc5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgIC0+IDEKK2RxY290NTgwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2RxY290NTgxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDEKK2RxY290NTgyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RxY290NTgzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2RxY290NTg0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDEKK2RxY290NTg1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RxY290NTg2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2RxY290NTg3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDEKK2RxY290NTg4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RxY290NTg5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitkcWNvdDU5MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQorZHFjb3Q1OTEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RxY290NTkyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitkcWNvdDU5MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQorZHFjb3Q1OTQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RxY290NTk1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitkcWNvdDU5NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQorZHFjb3Q1OTcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RxY290NTk4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitkcWNvdDU5OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZHFjb3Q2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwMSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjAyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwNCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjA1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwNyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjA4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYxMCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2RxY290NjExIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQorZHFjb3Q2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkcWNvdDYxMyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2RxY290NjE0IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQorZHFjb3Q2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkcWNvdDYxNiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2RxY290NjE3IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQorZHFjb3Q2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkcWNvdDYxOSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2RxY290NjIwIGNvbXBhcmV0b3RhbCAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyMiBjb21wYXJldG90YWwgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjIzIGNvbXBhcmV0b3RhbCAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyNSBjb21wYXJldG90YWwgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjI2IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyOCBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjI5IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkcWNvdDYzMSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2RxY290NjMyIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQorZHFjb3Q2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkcWNvdDYzNCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2RxY290NjM1IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQorZHFjb3Q2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkcWNvdDYzNyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2RxY290NjM4IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQorZHFjb3Q2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcWNvdDY0MCBjb21wYXJldG90YWwgICAwICAgICAwICAgLT4gMAorZHFjb3Q2NDEgY29tcGFyZXRvdGFsICAgMCAgICAtMCAgIC0+IDEKK2RxY290NjQyIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAuMCAtPiAxCitkcWNvdDY0MyBjb21wYXJldG90YWwgICAwICAgICAwLjAgLT4gMQorZHFjb3Q2NDQgY29tcGFyZXRvdGFsICAtMCAgICAgMCAgIC0+IC0xCitkcWNvdDY0NSBjb21wYXJldG90YWwgIC0wICAgIC0wICAgLT4gMAorZHFjb3Q2NDYgY29tcGFyZXRvdGFsICAtMCAgICAtMC4wIC0+IC0xCitkcWNvdDY0NyBjb21wYXJldG90YWwgIC0wICAgICAwLjAgLT4gLTEKK2RxY290NjQ4IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAgICAtPiAtMQorZHFjb3Q2NDkgY29tcGFyZXRvdGFsICAgMC4wICAtMCAgIC0+IDEKK2RxY290NjUwIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAuMCAtPiAxCitkcWNvdDY1MSBjb21wYXJldG90YWwgICAwLjAgICAwLjAgLT4gMAorZHFjb3Q2NTIgY29tcGFyZXRvdGFsICAtMC4wICAgMCAgIC0+IC0xCitkcWNvdDY1MyBjb21wYXJldG90YWwgIC0wLjAgIC0wICAgLT4gMQorZHFjb3Q2NTQgY29tcGFyZXRvdGFsICAtMC4wICAtMC4wIC0+IDAKK2RxY290NjU1IGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAuMCAtPiAtMQorCitkcWNvdDY1NiBjb21wYXJldG90YWwgIC0wRTEgICAwLjAgLT4gLTEKK2RxY290NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQorZHFjb3Q2NTggY29tcGFyZXRvdGFsICAgMEUxICAgMC4wIC0+IDEKK2RxY290NjU5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAuMCAtPiAxCitkcWNvdDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTEKK2RxY290NjYxIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAgICAtPiAtMQorZHFjb3Q2NjIgY29tcGFyZXRvdGFsICAgMEUxICAgMCAgIC0+IDEKK2RxY290NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxCitkcWNvdDY2NCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTEgLT4gMAorZHFjb3Q2NjUgY29tcGFyZXRvdGFsICAtMEUyICAtMEUxIC0+IC0xCitkcWNvdDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQorZHFjb3Q2NjcgY29tcGFyZXRvdGFsICAgMEUyICAtMEUxIC0+IDEKK2RxY290NjY4IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMiAtPiAxCitkcWNvdDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMAorZHFjb3Q2NzAgY29tcGFyZXRvdGFsICAgMEUxICAtMEUyIC0+IDEKK2RxY290NjcxIGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMiAtPiAxCitkcWNvdDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTEKK2RxY290NjczIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMSAtPiAtMQorZHFjb3Q2NzQgY29tcGFyZXRvdGFsICAgMEUxICAgMEUxIC0+IDAKK2RxY290Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxCitkcWNvdDY3NiBjb21wYXJldG90YWwgIC0wRTEgICAwRTIgLT4gLTEKK2RxY290Njc3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMiAtPiAtMQorZHFjb3Q2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xCitkcWNvdDY3OSBjb21wYXJldG90YWwgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkcWNvdDY4MCBjb21wYXJldG90YWwgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorZHFjb3Q2ODEgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDEKK2RxY290NjgyIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwICAgICAgICAtPiAxCitkcWNvdDY4MyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMQorZHFjb3Q2ODQgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDEKK2RxY290Njg1IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAxCitkcWNvdDY4NiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMQorZHFjb3Q2ODcgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDEKK2RxY290Njg4IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAxCitkcWNvdDY4OSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMQorZHFjb3Q2OTAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAgIDEyIC0+IDAKK2RxY290NjkxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgICAxMiAtPiAtMQorZHFjb3Q2OTIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAgIDEyIC0+IC0xCitkcWNvdDY5MyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgICAgMTIgLT4gLTEKK2RxY290Njk0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAtMQorZHFjb3Q2OTUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IC0xCitkcWNvdDY5NiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gLTEKK2RxY290Njk3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAtMQorZHFjb3Q2OTggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IC0xCitkcWNvdDY5OSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gLTEKKworLS0gb2xkIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RxY290NzAxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAgMSAtPiAgMQorZHFjb3Q3MDIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgIC0+IC0xCitkcWNvdDcwMyBjb21wYXJldG90YWwgMTIzNDU2NzgwMCAgIDEgLT4gIDEKK2RxY290NzA0IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAgICAtPiAtMQorZHFjb3Q3MDUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgICAxIC0+ICAxCitkcWNvdDcwNiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwICAgLT4gLTEKK2RxY290NzA3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAgMSAtPiAgMQorZHFjb3Q3MDggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgIC0+IC0xCitkcWNvdDcwOSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MDEgIDEgLT4gIDEKK2RxY290NzEwIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAxICAtPiAtMQorZHFjb3Q3MTEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgICAxIC0+ICAxCitkcWNvdDcxMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODk2ICAgLT4gLTEKK2RxY290NzEzIGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MSAgMSAtPiAtMQorZHFjb3Q3MTQgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTEgIC0+ICAxCitkcWNvdDcxNSBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTAxIDEgLT4gLTEKK2RxY290NzE2IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkwMSAtPiAgMQorZHFjb3Q3MTcgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODk2ICAxIC0+IC0xCitkcWNvdDcxOCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5NiAgLT4gIDEKKworLS0gb2xkIHJlc2lkdWUgY2FzZXMKK2RxY290NzQwIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTk5ICAtPiAxCitkcWNvdDc0MSBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5ICAgLT4gMQorZHFjb3Q3NDIgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5ICAgIC0+IDEKK2RxY290NzQzIGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwICAgICAtPiAxCitkcWNvdDc0NCBjb21wYXJldG90YWwgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2RxY290NzQ1IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDEgICAtPiAtMQorZHFjb3Q3NDYgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMDEgIC0+IC0xCitkcWNvdDc1MCBjb21wYXJldG90YWwgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2RxY290NzUxIGNvbXBhcmV0b3RhbCAgMC45OTk5OTkgICAxICAtPiAtMQorZHFjb3Q3NTIgY29tcGFyZXRvdGFsICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkcWNvdDc1MyBjb21wYXJldG90YWwgIDEuMDAwMCAgICAgMSAgLT4gLTEKK2RxY290NzU0IGNvbXBhcmV0b3RhbCAgMS4wMDAwMSAgICAxICAtPiAxCitkcWNvdDc1NSBjb21wYXJldG90YWwgIDEuMDAwMDAxICAgMSAgLT4gMQorZHFjb3Q3NTYgY29tcGFyZXRvdGFsICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RxY290NzgwIGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDEKK2RxY290NzgxIGNvbXBhcmV0b3RhbCAgSW5mICAtMTAwMCAgLT4gIDEKK2RxY290NzgyIGNvbXBhcmV0b3RhbCAgSW5mICAtMSAgICAgLT4gIDEKK2RxY290NzgzIGNvbXBhcmV0b3RhbCAgSW5mICAtMCAgICAgLT4gIDEKK2RxY290Nzg0IGNvbXBhcmV0b3RhbCAgSW5mICAgMCAgICAgLT4gIDEKK2RxY290Nzg1IGNvbXBhcmV0b3RhbCAgSW5mICAgMSAgICAgLT4gIDEKK2RxY290Nzg2IGNvbXBhcmV0b3RhbCAgSW5mICAgMTAwMCAgLT4gIDEKK2RxY290Nzg3IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKK2RxY290Nzg4IGNvbXBhcmV0b3RhbCAtMTAwMCAgSW5mICAgLT4gLTEKK2RxY290Nzg5IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTEKK2RxY290NzkwIGNvbXBhcmV0b3RhbCAtMSAgICAgSW5mICAgLT4gLTEKK2RxY290NzkxIGNvbXBhcmV0b3RhbCAtMCAgICAgSW5mICAgLT4gLTEKK2RxY290NzkyIGNvbXBhcmV0b3RhbCAgMCAgICAgSW5mICAgLT4gLTEKK2RxY290NzkzIGNvbXBhcmV0b3RhbCAgMSAgICAgSW5mICAgLT4gLTEKK2RxY290Nzk0IGNvbXBhcmV0b3RhbCAgMTAwMCAgSW5mICAgLT4gLTEKK2RxY290Nzk1IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKKworZHFjb3Q4MDAgY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjb3Q4MDEgY29tcGFyZXRvdGFsIC1JbmYgIC0xMDAwICAtPiAtMQorZHFjb3Q4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQorZHFjb3Q4MDMgY29tcGFyZXRvdGFsIC1JbmYgIC0wICAgICAtPiAtMQorZHFjb3Q4MDQgY29tcGFyZXRvdGFsIC1JbmYgICAwICAgICAtPiAtMQorZHFjb3Q4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQorZHFjb3Q4MDYgY29tcGFyZXRvdGFsIC1JbmYgICAxMDAwICAtPiAtMQorZHFjb3Q4MDcgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQorZHFjb3Q4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjb3Q4MDkgY29tcGFyZXRvdGFsIC0xMDAwIC1JbmYgICAtPiAgMQorZHFjb3Q4MTAgY29tcGFyZXRvdGFsIC0xICAgIC1JbmYgICAtPiAgMQorZHFjb3Q4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQorZHFjb3Q4MTIgY29tcGFyZXRvdGFsICAwICAgIC1JbmYgICAtPiAgMQorZHFjb3Q4MTMgY29tcGFyZXRvdGFsICAxICAgIC1JbmYgICAtPiAgMQorZHFjb3Q4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQorZHFjb3Q4MTUgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQorCitkcWNvdDgyMSBjb21wYXJldG90YWwgIE5hTiAtSW5mICAgIC0+ICAxCitkcWNvdDgyMiBjb21wYXJldG90YWwgIE5hTiAtMTAwMCAgIC0+ICAxCitkcWNvdDgyMyBjb21wYXJldG90YWwgIE5hTiAtMSAgICAgIC0+ICAxCitkcWNvdDgyNCBjb21wYXJldG90YWwgIE5hTiAtMCAgICAgIC0+ICAxCitkcWNvdDgyNSBjb21wYXJldG90YWwgIE5hTiAgMCAgICAgIC0+ICAxCitkcWNvdDgyNiBjb21wYXJldG90YWwgIE5hTiAgMSAgICAgIC0+ICAxCitkcWNvdDgyNyBjb21wYXJldG90YWwgIE5hTiAgMTAwMCAgIC0+ICAxCitkcWNvdDgyOCBjb21wYXJldG90YWwgIE5hTiAgSW5mICAgIC0+ICAxCitkcWNvdDgyOSBjb21wYXJldG90YWwgIE5hTiAgTmFOICAgIC0+ICAwCitkcWNvdDgzMCBjb21wYXJldG90YWwgLUluZiAgTmFOICAgIC0+ICAtMQorZHFjb3Q4MzEgY29tcGFyZXRvdGFsIC0xMDAwIE5hTiAgICAtPiAgLTEKK2RxY290ODMyIGNvbXBhcmV0b3RhbCAtMSAgICBOYU4gICAgLT4gIC0xCitkcWNvdDgzMyBjb21wYXJldG90YWwgLTAgICAgTmFOICAgIC0+ICAtMQorZHFjb3Q4MzQgY29tcGFyZXRvdGFsICAwICAgIE5hTiAgICAtPiAgLTEKK2RxY290ODM1IGNvbXBhcmV0b3RhbCAgMSAgICBOYU4gICAgLT4gIC0xCitkcWNvdDgzNiBjb21wYXJldG90YWwgIDEwMDAgTmFOICAgIC0+ICAtMQorZHFjb3Q4MzcgY29tcGFyZXRvdGFsICBJbmYgIE5hTiAgICAtPiAgLTEKK2RxY290ODM4IGNvbXBhcmV0b3RhbCAtTmFOIC1OYU4gICAgLT4gIDAKK2RxY290ODM5IGNvbXBhcmV0b3RhbCArTmFOIC1OYU4gICAgLT4gIDEKK2RxY290ODQwIGNvbXBhcmV0b3RhbCAtTmFOICtOYU4gICAgLT4gIC0xCisKK2RxY290ODQxIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgLT4gIDEKK2RxY290ODQyIGNvbXBhcmV0b3RhbCAgc05hTiAtTmFOICAgLT4gIDEKK2RxY290ODQzIGNvbXBhcmV0b3RhbCAgc05hTiAtSW5mICAgLT4gIDEKK2RxY290ODQ0IGNvbXBhcmV0b3RhbCAgc05hTiAtMTAwMCAgLT4gIDEKK2RxY290ODQ1IGNvbXBhcmV0b3RhbCAgc05hTiAtMSAgICAgLT4gIDEKK2RxY290ODQ2IGNvbXBhcmV0b3RhbCAgc05hTiAtMCAgICAgLT4gIDEKK2RxY290ODQ3IGNvbXBhcmV0b3RhbCAgc05hTiAgMCAgICAgLT4gIDEKK2RxY290ODQ4IGNvbXBhcmV0b3RhbCAgc05hTiAgMSAgICAgLT4gIDEKK2RxY290ODQ5IGNvbXBhcmV0b3RhbCAgc05hTiAgMTAwMCAgLT4gIDEKK2RxY290ODUwIGNvbXBhcmV0b3RhbCAgc05hTiAgTmFOICAgLT4gIC0xCitkcWNvdDg1MSBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RxY290ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xCitkcWNvdDg1MyBjb21wYXJldG90YWwgLU5hTiAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NTQgY29tcGFyZXRvdGFsIC1JbmYgIHNOYU4gICAtPiAgLTEKK2RxY290ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xCitkcWNvdDg1NiBjb21wYXJldG90YWwgLTEgICAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NTcgY29tcGFyZXRvdGFsIC0wICAgIHNOYU4gICAtPiAgLTEKK2RxY290ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xCitkcWNvdDg1OSBjb21wYXJldG90YWwgIDEgICAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NjAgY29tcGFyZXRvdGFsICAxMDAwIHNOYU4gICAtPiAgLTEKK2RxY290ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xCitkcWNvdDg2MiBjb21wYXJldG90YWwgIE5hTiAgc05hTiAgIC0+ICAxCitkcWNvdDg2MyBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RxY290ODcxIGNvbXBhcmV0b3RhbCAgLXNOYU4gLXNOYU4gIC0+ICAwCitkcWNvdDg3MiBjb21wYXJldG90YWwgIC1zTmFOIC1OYU4gICAtPiAgMQorZHFjb3Q4NzMgY29tcGFyZXRvdGFsICAtc05hTiAtSW5mICAgLT4gIC0xCitkcWNvdDg3NCBjb21wYXJldG90YWwgIC1zTmFOIC0xMDAwICAtPiAgLTEKK2RxY290ODc1IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEgICAgIC0+ICAtMQorZHFjb3Q4NzYgY29tcGFyZXRvdGFsICAtc05hTiAtMCAgICAgLT4gIC0xCitkcWNvdDg3NyBjb21wYXJldG90YWwgIC1zTmFOICAwICAgICAtPiAgLTEKK2RxY290ODc4IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEgICAgIC0+ICAtMQorZHFjb3Q4NzkgY29tcGFyZXRvdGFsICAtc05hTiAgMTAwMCAgLT4gIC0xCitkcWNvdDg4MCBjb21wYXJldG90YWwgIC1zTmFOICBOYU4gICAtPiAgLTEKK2RxY290ODgxIGNvbXBhcmV0b3RhbCAgLXNOYU4gc05hTiAgIC0+ICAtMQorCitkcWNvdDg4MiBjb21wYXJldG90YWwgLXNOYU4gLXNOYU4gICAtPiAgMAorZHFjb3Q4ODMgY29tcGFyZXRvdGFsIC1OYU4gIC1zTmFOICAgLT4gIC0xCitkcWNvdDg4NCBjb21wYXJldG90YWwgLUluZiAgLXNOYU4gICAtPiAgMQorZHFjb3Q4ODUgY29tcGFyZXRvdGFsIC0xMDAwIC1zTmFOICAgLT4gIDEKK2RxY290ODg2IGNvbXBhcmV0b3RhbCAtMSAgICAtc05hTiAgIC0+ICAxCitkcWNvdDg4NyBjb21wYXJldG90YWwgLTAgICAgLXNOYU4gICAtPiAgMQorZHFjb3Q4ODggY29tcGFyZXRvdGFsICAwICAgIC1zTmFOICAgLT4gIDEKK2RxY290ODg5IGNvbXBhcmV0b3RhbCAgMSAgICAtc05hTiAgIC0+ICAxCitkcWNvdDg5MCBjb21wYXJldG90YWwgIDEwMDAgLXNOYU4gICAtPiAgMQorZHFjb3Q4OTEgY29tcGFyZXRvdGFsICBJbmYgIC1zTmFOICAgLT4gIDEKK2RxY290ODkyIGNvbXBhcmV0b3RhbCAgTmFOICAtc05hTiAgIC0+ICAxCitkcWNvdDg5MyBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gICAtPiAgMQorCistLSBOYU5zIHdpdGggcGF5bG9hZAorZHFjb3Q5NjAgY29tcGFyZXRvdGFsICBOYU45IC1JbmYgICAtPiAgMQorZHFjb3Q5NjEgY29tcGFyZXRvdGFsICBOYU44ICA5OTkgICAtPiAgMQorZHFjb3Q5NjIgY29tcGFyZXRvdGFsICBOYU43NyBJbmYgICAtPiAgMQorZHFjb3Q5NjMgY29tcGFyZXRvdGFsIC1OYU42NyBOYU41ICAtPiAgLTEKK2RxY290OTY0IGNvbXBhcmV0b3RhbCAtSW5mICAtTmFONCAgLT4gIDEKK2RxY290OTY1IGNvbXBhcmV0b3RhbCAtOTk5ICAtTmFOMzMgLT4gIDEKK2RxY290OTY2IGNvbXBhcmV0b3RhbCAgSW5mICAgTmFOMiAgLT4gIC0xCisKK2RxY290OTcwIGNvbXBhcmV0b3RhbCAtTmFONDEgLU5hTjQyIC0+IDEKK2RxY290OTcxIGNvbXBhcmV0b3RhbCArTmFONDEgLU5hTjQyIC0+IDEKK2RxY290OTcyIGNvbXBhcmV0b3RhbCAtTmFONDEgK05hTjQyIC0+IC0xCitkcWNvdDk3MyBjb21wYXJldG90YWwgK05hTjQxICtOYU40MiAtPiAtMQorZHFjb3Q5NzQgY29tcGFyZXRvdGFsIC1OYU40MiAtTmFOMDEgLT4gLTEKK2RxY290OTc1IGNvbXBhcmV0b3RhbCArTmFONDIgLU5hTjAxIC0+ICAxCitkcWNvdDk3NiBjb21wYXJldG90YWwgLU5hTjQyICtOYU4wMSAtPiAtMQorZHFjb3Q5NzcgY29tcGFyZXRvdGFsICtOYU40MiArTmFOMDEgLT4gIDEKKworZHFjb3Q5ODAgY29tcGFyZXRvdGFsIC1zTmFONzcxIC1zTmFONzcyIC0+IDEKK2RxY290OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxCitkcWNvdDk4MiBjb21wYXJldG90YWwgLXNOYU43NzEgK3NOYU43NzIgLT4gLTEKK2RxY290OTgzIGNvbXBhcmV0b3RhbCArc05hTjc3MSArc05hTjc3MiAtPiAtMQorZHFjb3Q5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xCitkcWNvdDk4NSBjb21wYXJldG90YWwgK3NOYU43NzIgLXNOYU43NzEgLT4gIDEKK2RxY290OTg2IGNvbXBhcmV0b3RhbCAtc05hTjc3MiArc05hTjc3MSAtPiAtMQorZHFjb3Q5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxCisKK2RxY290OTkxIGNvbXBhcmV0b3RhbCAtc05hTjk5IC1JbmYgICAgLT4gLTEKK2RxY290OTkyIGNvbXBhcmV0b3RhbCAgc05hTjk4IC0xMSAgICAgLT4gIDEKK2RxY290OTkzIGNvbXBhcmV0b3RhbCAgc05hTjk3ICBOYU4gICAgLT4gLTEKK2RxY290OTk0IGNvbXBhcmV0b3RhbCAgc05hTjE2IHNOYU45NCAgLT4gLTEKK2RxY290OTk1IGNvbXBhcmV0b3RhbCAgTmFOODUgIHNOYU44MyAgLT4gIDEKK2RxY290OTk2IGNvbXBhcmV0b3RhbCAtSW5mICAgIHNOYU45MiAgLT4gLTEKK2RxY290OTk3IGNvbXBhcmV0b3RhbCAgMDg4ICAgIHNOYU44MSAgLT4gLTEKK2RxY290OTk4IGNvbXBhcmV0b3RhbCAgSW5mICAgIHNOYU45MCAgLT4gLTEKK2RxY290OTk5IGNvbXBhcmV0b3RhbCAgTmFOICAgLXNOYU44OSAgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitkcWNvdDExMTAgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAgMCAgICAgICAtPiAtMQorZHFjb3QxMTExIGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgLTAgICAgICAgLT4gIDEKK2RxY290MTExMiBjb21wYXJldG90YWwgIC0wRS02MTQzICAwICAgICAgIC0+IC0xCitkcWNvdDExMTMgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAtMCAgICAgICAtPiAgMQorZHFjb3QxMTE0IGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgIDBFKzYxNDQgIC0+IC0xCitkcWNvdDExMTUgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAtMEUrNjE0NCAgLT4gIDEKK2RxY290MTExNiBjb21wYXJldG90YWwgIC0wRS02MTQzICAwRSs2MTQ0ICAtPiAtMQorZHFjb3QxMTE3IGNvbXBhcmV0b3RhbCAgLTBFLTYxNDMgLTBFKzYxNDQgIC0+ICAxCitkcWNvdDExMTggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRSs2MTQ0ICAtPiAtMQorZHFjb3QxMTE5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUrNjE0NCAgLT4gIDEKK2RxY290MTEyMCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFKzYxNDQgIC0+IC0xCitkcWNvdDExMjEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRSs2MTQ0ICAtPiAgMQorCitkcWNvdDExMzAgY29tcGFyZXRvdGFsICAgMEUrNjE0NCAgMCAgICAgICAtPiAgMQorZHFjb3QxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgLTAgICAgICAgLT4gIDEKK2RxY290MTEzMiBjb21wYXJldG90YWwgIC0wRSs2MTQ0ICAwICAgICAgIC0+IC0xCitkcWNvdDExMzMgY29tcGFyZXRvdGFsICAtMEUrNjE0NCAtMCAgICAgICAtPiAtMQorZHFjb3QxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgIDBFLTYxNDMgIC0+ICAxCitkcWNvdDExMzUgY29tcGFyZXRvdGFsICAgMEUrNjE0NCAtMEUtNjE0MyAgLT4gIDEKK2RxY290MTEzNiBjb21wYXJldG90YWwgIC0wRSs2MTQ0ICAwRS02MTQzICAtPiAtMQorZHFjb3QxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgLTBFLTYxNDMgIC0+IC0xCitkcWNvdDExMzggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRS02MTQzICAtPiAgMQorZHFjb3QxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtNjE0MyAgLT4gIDEKK2RxY290MTE0MCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFLTYxNDMgIC0+IC0xCitkcWNvdDExNDEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRS02MTQzICAtPiAtMQorCistLSBOdWxsIHRlc3RzCitkcWNvdDk5OTAgY29tcGFyZXRvdGFsIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFjb3Q5OTkxIGNvbXBhcmV0b3RhbCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbE1hZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKaW5kZXggNDhiM2UwOC4uMGI4MWJmYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKQEAgLTEsNzA2ICsxLDcwNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFDb21wYXJlVG90YWxNYWcuZGVjVGVzdCAtLSBkZWNRdWFkIGNvbXBhcmlzb247IGFicy4gdG90YWwgb3JkZXIgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KLS0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQotLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocw0KLS0tIHRoYW4gY29tcGFyZS4NCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZHFjdG0wMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwDQotZHFjdG0wMDIgY29tcGFyZXRvdG1hZyAgLTIgIC0xICAgLT4gICAxDQotZHFjdG0wMDMgY29tcGFyZXRvdG1hZyAgLTIgICAwICAgLT4gICAxDQotZHFjdG0wMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxDQotZHFjdG0wMDUgY29tcGFyZXRvdG1hZyAgLTIgICAyICAgLT4gICAwDQotZHFjdG0wMDYgY29tcGFyZXRvdG1hZyAgLTEgIC0yICAgLT4gIC0xDQotZHFjdG0wMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwDQotZHFjdG0wMDggY29tcGFyZXRvdG1hZyAgLTEgICAwICAgLT4gICAxDQotZHFjdG0wMDkgY29tcGFyZXRvdG1hZyAgLTEgICAxICAgLT4gICAwDQotZHFjdG0wMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xDQotZHFjdG0wMTEgY29tcGFyZXRvdG1hZyAgIDAgIC0yICAgLT4gIC0xDQotZHFjdG0wMTIgY29tcGFyZXRvdG1hZyAgIDAgIC0xICAgLT4gIC0xDQotZHFjdG0wMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwDQotZHFjdG0wMTQgY29tcGFyZXRvdG1hZyAgIDAgICAxICAgLT4gIC0xDQotZHFjdG0wMTUgY29tcGFyZXRvdG1hZyAgIDAgICAyICAgLT4gIC0xDQotZHFjdG0wMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xDQotZHFjdG0wMTcgY29tcGFyZXRvdG1hZyAgIDEgIC0xICAgLT4gICAwDQotZHFjdG0wMTggY29tcGFyZXRvdG1hZyAgIDEgICAwICAgLT4gICAxDQotZHFjdG0wMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwDQotZHFjdG0wMjAgY29tcGFyZXRvdG1hZyAgIDEgICAyICAgLT4gIC0xDQotZHFjdG0wMjEgY29tcGFyZXRvdG1hZyAgIDIgIC0yICAgLT4gICAwDQotZHFjdG0wMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxDQotZHFjdG0wMjMgY29tcGFyZXRvdG1hZyAgIDIgICAwICAgLT4gICAxDQotZHFjdG0wMjUgY29tcGFyZXRvdG1hZyAgIDIgICAxICAgLT4gICAxDQotZHFjdG0wMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwDQotDQotZHFjdG0wMzEgY29tcGFyZXRvdG1hZyAgLTIwICAtMjAgICAtPiAgIDANCi1kcWN0bTAzMiBjb21wYXJldG90bWFnICAtMjAgIC0xMCAgIC0+ICAgMQ0KLWRxY3RtMDMzIGNvbXBhcmV0b3RtYWcgIC0yMCAgIDAwICAgLT4gICAxDQotZHFjdG0wMzQgY29tcGFyZXRvdG1hZyAgLTIwICAgMTAgICAtPiAgIDENCi1kcWN0bTAzNSBjb21wYXJldG90bWFnICAtMjAgICAyMCAgIC0+ICAgMA0KLWRxY3RtMDM2IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTIwICAgLT4gIC0xDQotZHFjdG0wMzcgY29tcGFyZXRvdG1hZyAgLTEwICAtMTAgICAtPiAgIDANCi1kcWN0bTAzOCBjb21wYXJldG90bWFnICAtMTAgICAwMCAgIC0+ICAgMQ0KLWRxY3RtMDM5IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDEwICAgLT4gICAwDQotZHFjdG0wNDAgY29tcGFyZXRvdG1hZyAgLTEwICAgMjAgICAtPiAgLTENCi1kcWN0bTA0MSBjb21wYXJldG90bWFnICAgMDAgIC0yMCAgIC0+ICAtMQ0KLWRxY3RtMDQyIGNvbXBhcmV0b3RtYWcgICAwMCAgLTEwICAgLT4gIC0xDQotZHFjdG0wNDMgY29tcGFyZXRvdG1hZyAgIDAwICAgMDAgICAtPiAgIDANCi1kcWN0bTA0NCBjb21wYXJldG90bWFnICAgMDAgICAxMCAgIC0+ICAtMQ0KLWRxY3RtMDQ1IGNvbXBhcmV0b3RtYWcgICAwMCAgIDIwICAgLT4gIC0xDQotZHFjdG0wNDYgY29tcGFyZXRvdG1hZyAgIDEwICAtMjAgICAtPiAgLTENCi1kcWN0bTA0NyBjb21wYXJldG90bWFnICAgMTAgIC0xMCAgIC0+ICAgMA0KLWRxY3RtMDQ4IGNvbXBhcmV0b3RtYWcgICAxMCAgIDAwICAgLT4gICAxDQotZHFjdG0wNDkgY29tcGFyZXRvdG1hZyAgIDEwICAgMTAgICAtPiAgIDANCi1kcWN0bTA1MCBjb21wYXJldG90bWFnICAgMTAgICAyMCAgIC0+ICAtMQ0KLWRxY3RtMDUxIGNvbXBhcmV0b3RtYWcgICAyMCAgLTIwICAgLT4gICAwDQotZHFjdG0wNTIgY29tcGFyZXRvdG1hZyAgIDIwICAtMTAgICAtPiAgIDENCi1kcWN0bTA1MyBjb21wYXJldG90bWFnICAgMjAgICAwMCAgIC0+ICAgMQ0KLWRxY3RtMDU1IGNvbXBhcmV0b3RtYWcgICAyMCAgIDEwICAgLT4gICAxDQotZHFjdG0wNTYgY29tcGFyZXRvdG1hZyAgIDIwICAgMjAgICAtPiAgIDANCi0NCi1kcWN0bTA2MSBjb21wYXJldG90bWFnICAtMi4wICAtMi4wICAgLT4gICAwDQotZHFjdG0wNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQ0KLWRxY3RtMDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDENCi1kcWN0bTA2NCBjb21wYXJldG90bWFnICAtMi4wICAgMS4wICAgLT4gICAxDQotZHFjdG0wNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMA0KLWRxY3RtMDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTENCi1kcWN0bTA2NyBjb21wYXJldG90bWFnICAtMS4wICAtMS4wICAgLT4gICAwDQotZHFjdG0wNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQ0KLWRxY3RtMDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDANCi1kcWN0bTA3MCBjb21wYXJldG90bWFnICAtMS4wICAgMi4wICAgLT4gIC0xDQotZHFjdG0wNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQ0KLWRxY3RtMDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTENCi1kcWN0bTA3MyBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAgLT4gICAwDQotZHFjdG0wNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQ0KLWRxY3RtMDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTENCi1kcWN0bTA3NiBjb21wYXJldG90bWFnICAgMS4wICAtMi4wICAgLT4gIC0xDQotZHFjdG0wNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMA0KLWRxY3RtMDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDENCi1kcWN0bTA3OSBjb21wYXJldG90bWFnICAgMS4wICAgMS4wICAgLT4gICAwDQotZHFjdG0wODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQ0KLWRxY3RtMDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDANCi1kcWN0bTA4MiBjb21wYXJldG90bWFnICAgMi4wICAtMS4wICAgLT4gICAxDQotZHFjdG0wODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQ0KLWRxY3RtMDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDENCi1kcWN0bTA4NiBjb21wYXJldG90bWFnICAgMi4wICAgMi4wICAgLT4gICAwDQotDQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQotZHFjdG0wOTAgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gICAwDQotZHFjdG0wOTEgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gICAwDQotZHFjdG0wOTIgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gICAwDQotZHFjdG0wOTMgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gICAwDQotDQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzDQotLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbA0KLWRxY3RtMTAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNy4wICAgICAtPiAgIDANCi1kcWN0bTEwMSBjb21wYXJldG90bWFnICAgNy4wICAgIDcgICAgICAgLT4gIC0xDQotZHFjdG0xMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3LjAgICAgIC0+ICAgMQ0KLWRxY3RtMTAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgNy4wICAgICAtPiAgIDENCi1kcWN0bTEwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIDcuMCAgICAgLT4gICAwDQotZHFjdG0xMDUgY29tcGFyZXRvdG1hZyAgIDAuN0UrMSA3ICAgICAgIC0+ICAgMA0KLWRxY3RtMTA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNyAgICAgICAtPiAgLTENCi1kcWN0bTEwNyBjb21wYXJldG90bWFnICAgNy4wICAgIDdFKzAgICAgLT4gIC0xDQotZHFjdG0xMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3MEUtMSAgIC0+ICAgMA0KLWRxY3RtMTA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgMC43RSsxICAtPiAgIDANCi1kcWN0bTExMCBjb21wYXJldG90bWFnICAgNyAgICAgIDcwRS0xICAgLT4gICAxDQotDQotZHFjdG0xMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3LjAgICAgIC0+ICAgMQ0KLWRxY3RtMTIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNyAgICAgICAtPiAgIDENCi1kcWN0bTEyMiBjb21wYXJldG90bWFnICAgOCAgICAgIDcuMCAgICAgLT4gICAxDQotZHFjdG0xMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA3LjAgICAgIC0+ICAgMQ0KLWRxY3RtMTI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNy4wICAgICAtPiAgIDENCi1kcWN0bTEyNSBjb21wYXJldG90bWFnICAgMC44RSsxIDcgICAgICAgLT4gICAxDQotZHFjdG0xMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3ICAgICAgIC0+ICAgMQ0KLWRxY3RtMTI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgN0UrMCAgICAtPiAgIDENCi1kcWN0bTEyOCBjb21wYXJldG90bWFnICAgOC4wICAgIDcwRS0xICAgLT4gICAxDQotZHFjdG0xMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjdFKzEgICAtPiAgIDENCi1kcWN0bTEzMCBjb21wYXJldG90bWFnICAgOCAgICAgIDcwRS0xICAgLT4gICAxDQotDQotZHFjdG0xNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5LjAgICAgIC0+ICAtMQ0KLWRxY3RtMTQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOSAgICAgICAtPiAgLTENCi1kcWN0bTE0MiBjb21wYXJldG90bWFnICAgOCAgICAgIDkuMCAgICAgLT4gIC0xDQotZHFjdG0xNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA5LjAgICAgIC0+ICAtMQ0KLWRxY3RtMTQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOS4wICAgICAtPiAgLTENCi1kcWN0bTE0NSBjb21wYXJldG90bWFnICAgMC44RSsxIDkgICAgICAgLT4gIC0xDQotZHFjdG0xNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5ICAgICAgIC0+ICAtMQ0KLWRxY3RtMTQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOUUrMCAgICAtPiAgLTENCi1kcWN0bTE0OCBjb21wYXJldG90bWFnICAgOC4wICAgIDkwRS0xICAgLT4gIC0xDQotZHFjdG0xNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjlFKzEgIC0+ICAtMQ0KLWRxY3RtMTUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOTBFLTEgICAtPiAgLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uDQotZHFjdG0yMDAgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3LjAgICAgIC0+ICAgMA0KLWRxY3RtMjAxIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNyAgICAgICAtPiAgLTENCi1kcWN0bTIwMiBjb21wYXJldG90bWFnICAtNyAgICAgIDcuMCAgICAgLT4gICAxDQotZHFjdG0yMDMgY29tcGFyZXRvdG1hZyAgLTdFKzAgICA3LjAgICAgIC0+ICAgMQ0KLWRxY3RtMjA0IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNy4wICAgICAtPiAgIDANCi1kcWN0bTIwNSBjb21wYXJldG90bWFnICAtMC43RSsxIDcgICAgICAgLT4gICAwDQotZHFjdG0yMDYgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3ICAgICAgIC0+ICAtMQ0KLWRxY3RtMjA3IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgN0UrMCAgICAtPiAgLTENCi1kcWN0bTIwOCBjb21wYXJldG90bWFnICAtNy4wICAgIDcwRS0xICAgLT4gICAwDQotZHFjdG0yMDkgY29tcGFyZXRvdG1hZyAgLTcgICAgICAwLjdFKzEgIC0+ICAgMA0KLWRxY3RtMjEwIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNzBFLTEgICAtPiAgIDENCi0NCi1kcWN0bTIyMCBjb21wYXJldG90bWFnICAtOC4wICAgIDcuMCAgICAgLT4gICAxDQotZHFjdG0yMjEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3ICAgICAgIC0+ICAgMQ0KLWRxY3RtMjIyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNy4wICAgICAtPiAgIDENCi1kcWN0bTIyMyBjb21wYXJldG90bWFnICAtOEUrMCAgIDcuMCAgICAgLT4gICAxDQotZHFjdG0yMjQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3LjAgICAgIC0+ICAgMQ0KLWRxY3RtMjI1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgNyAgICAgICAtPiAgIDENCi1kcWN0bTIyNiBjb21wYXJldG90bWFnICAtODBFLTEgIDcgICAgICAgLT4gICAxDQotZHFjdG0yMjcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3RSswICAgIC0+ICAgMQ0KLWRxY3RtMjI4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNzBFLTEgICAtPiAgIDENCi1kcWN0bTIyOSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuN0UrMSAgLT4gICAxDQotZHFjdG0yMzAgY29tcGFyZXRvdG1hZyAgLTggICAgICA3MEUtMSAgIC0+ICAgMQ0KLQ0KLWRxY3RtMjQwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOS4wICAgICAtPiAgLTENCi1kcWN0bTI0MSBjb21wYXJldG90bWFnICAtOC4wICAgIDkgICAgICAgLT4gIC0xDQotZHFjdG0yNDIgY29tcGFyZXRvdG1hZyAgLTggICAgICA5LjAgICAgIC0+ICAtMQ0KLWRxY3RtMjQzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgOS4wICAgICAtPiAgLTENCi1kcWN0bTI0NCBjb21wYXJldG90bWFnICAtODBFLTEgIDkuMCAgICAgLT4gIC0xDQotZHFjdG0yNDUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA5ICAgICAgIC0+ICAtMQ0KLWRxY3RtMjQ2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOSAgICAgICAtPiAgLTENCi1kcWN0bTI0NyBjb21wYXJldG90bWFnICAtOC4wICAgIDlFKzAgICAgLT4gIC0xDQotZHFjdG0yNDggY29tcGFyZXRvdG1hZyAgLTguMCAgICA5MEUtMSAgIC0+ICAtMQ0KLWRxY3RtMjQ5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC45RSsxICAtPiAgLTENCi1kcWN0bTI1MCBjb21wYXJldG90bWFnICAtOCAgICAgIDkwRS0xICAgLT4gIC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLg0KLWRxY3RtMzAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcuMCAgICAgLT4gICAwDQotZHFjdG0zMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNyAgICAgICAtPiAgLTENCi1kcWN0bTMwMiBjb21wYXJldG90bWFnICAgNyAgICAgIC03LjAgICAgIC0+ICAgMQ0KLWRxY3RtMzAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgLTcuMCAgICAgLT4gICAxDQotZHFjdG0zMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNy4wICAgICAtPiAgIDANCi1kcWN0bTMwNSBjb21wYXJldG90bWFnICAgLjdFKzEgIC03ICAgICAgIC0+ICAgMA0KLWRxY3RtMzA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcgICAgICAgLT4gIC0xDQotZHFjdG0zMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtN0UrMCAgICAtPiAgLTENCi1kcWN0bTMwOCBjb21wYXJldG90bWFnICAgNy4wICAgIC03MEUtMSAgIC0+ICAgMA0KLWRxY3RtMzA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLS43RSsxICAgLT4gICAwDQotZHFjdG0zMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNzBFLTEgICAtPiAgIDENCi0NCi1kcWN0bTMyMCBjb21wYXJldG90bWFnICAgOC4wICAgIC03LjAgICAgIC0+ICAgMQ0KLWRxY3RtMzIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcgICAgICAgLT4gICAxDQotZHFjdG0zMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNy4wICAgICAtPiAgIDENCi1kcWN0bTMyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIC03LjAgICAgIC0+ICAgMQ0KLWRxY3RtMzI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcuMCAgICAgLT4gICAxDQotZHFjdG0zMjUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtNyAgICAgICAtPiAgIDENCi1kcWN0bTMyNiBjb21wYXJldG90bWFnICAgODBFLTEgIC03ICAgICAgIC0+ICAgMQ0KLWRxY3RtMzI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTdFKzAgICAgLT4gICAxDQotZHFjdG0zMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNzBFLTEgICAtPiAgIDENCi1kcWN0bTMyOSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uN0UrMSAgIC0+ICAgMQ0KLWRxY3RtMzMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcwRS0xICAgLT4gICAxDQotDQotZHFjdG0zNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOS4wICAgICAtPiAgLTENCi1kcWN0bTM0MSBjb21wYXJldG90bWFnICAgOC4wICAgIC05ICAgICAgIC0+ICAtMQ0KLWRxY3RtMzQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkuMCAgICAgLT4gIC0xDQotZHFjdG0zNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtOS4wICAgICAtPiAgLTENCi1kcWN0bTM0NCBjb21wYXJldG90bWFnICAgODBFLTEgIC05LjAgICAgIC0+ICAtMQ0KLWRxY3RtMzQ1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTkgICAgICAgLT4gIC0xDQotZHFjdG0zNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOSAgICAgICAtPiAgLTENCi1kcWN0bTM0NyBjb21wYXJldG90bWFnICAgOC4wICAgIC05RSswICAgIC0+ICAtMQ0KLWRxY3RtMzQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkwRS0xICAgLT4gIC0xDQotZHFjdG0zNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjlFKzEgICAtPiAgLTENCi1kcWN0bTM1MCBjb21wYXJldG90bWFnICAgOCAgICAgIC05MEUtMSAgIC0+ICAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4NCi1kcWN0bTQwMCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNy4wICAgICAtPiAgIDANCi1kcWN0bTQwMSBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNyAgICAgICAtPiAgLTENCi1kcWN0bTQwMiBjb21wYXJldG90bWFnICAgLTcgICAgICAtNy4wICAgICAtPiAgIDENCi1kcWN0bTQwMyBjb21wYXJldG90bWFnICAgLTdFKzAgICAtNy4wICAgICAtPiAgIDENCi1kcWN0bTQwNCBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNy4wICAgICAtPiAgIDANCi1kcWN0bTQwNSBjb21wYXJldG90bWFnICAgLS43RSsxICAtNyAgICAgICAtPiAgIDANCi1kcWN0bTQwNiBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNyAgICAgICAtPiAgLTENCi1kcWN0bTQwNyBjb21wYXJldG90bWFnICAgLTcuMCAgICAtN0UrMCAgICAtPiAgLTENCi1kcWN0bTQwOCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNzBFLTEgICAtPiAgIDANCi1kcWN0bTQwOSBjb21wYXJldG90bWFnICAgLTcgICAgICAtLjdFKzEgICAtPiAgIDANCi1kcWN0bTQxMCBjb21wYXJldG90bWFnICAgLTcgICAgICAtNzBFLTEgICAtPiAgIDENCi0NCi1kcWN0bTQyMCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNy4wICAgICAtPiAgIDENCi1kcWN0bTQyMSBjb21wYXJldG90bWFnICAgLTguMCAgICAtNyAgICAgICAtPiAgIDENCi1kcWN0bTQyMiBjb21wYXJldG90bWFnICAgLTggICAgICAtNy4wICAgICAtPiAgIDENCi1kcWN0bTQyMyBjb21wYXJldG90bWFnICAgLThFKzAgICAtNy4wICAgICAtPiAgIDENCi1kcWN0bTQyNCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNy4wICAgICAtPiAgIDENCi1kcWN0bTQyNSBjb21wYXJldG90bWFnICAgLS44RSsxICAtNyAgICAgICAtPiAgIDENCi1kcWN0bTQyNiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNyAgICAgICAtPiAgIDENCi1kcWN0bTQyNyBjb21wYXJldG90bWFnICAgLTguMCAgICAtN0UrMCAgICAtPiAgIDENCi1kcWN0bTQyOCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNzBFLTEgICAtPiAgIDENCi1kcWN0bTQyOSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjdFKzEgICAtPiAgIDENCi1kcWN0bTQzMCBjb21wYXJldG90bWFnICAgLTggICAgICAtNzBFLTEgICAtPiAgIDENCi0NCi1kcWN0bTQ0MCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOS4wICAgICAtPiAgLTENCi1kcWN0bTQ0MSBjb21wYXJldG90bWFnICAgLTguMCAgICAtOSAgICAgICAtPiAgLTENCi1kcWN0bTQ0MiBjb21wYXJldG90bWFnICAgLTggICAgICAtOS4wICAgICAtPiAgLTENCi1kcWN0bTQ0MyBjb21wYXJldG90bWFnICAgLThFKzAgICAtOS4wICAgICAtPiAgLTENCi1kcWN0bTQ0NCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOS4wICAgICAtPiAgLTENCi1kcWN0bTQ0NSBjb21wYXJldG90bWFnICAgLS44RSsxICAtOSAgICAgICAtPiAgLTENCi1kcWN0bTQ0NiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOSAgICAgICAtPiAgLTENCi1kcWN0bTQ0NyBjb21wYXJldG90bWFnICAgLTguMCAgICAtOUUrMCAgICAtPiAgLTENCi1kcWN0bTQ0OCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOTBFLTEgICAtPiAgLTENCi1kcWN0bTQ0OSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjlFKzEgICAtPiAgLTENCi1kcWN0bTQ1MCBjb21wYXJldG90bWFnICAgLTggICAgICAtOTBFLTEgICAtPiAgLTENCi0NCi0NCi0tLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0NCi1kcWN0bTQ3MyBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQotZHFjdG00NzQgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xDQotZHFjdG00NzUgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTENCi1kcWN0bTQ3NiBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xDQotZHFjdG00NzcgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQotZHFjdG00NzggY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTENCi1kcWN0bTQ3OSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQotZHFjdG00ODAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xDQotZHFjdG00ODEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTENCi1kcWN0bTQ4MiBjb21wYXJldG90bWFnIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xDQotZHFjdG00ODMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAgLT4gICAwDQotZHFjdG00ODcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgIC0+ICAgMQ0KLWRxY3RtNDg4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgIC0+ICAgMQ0KLWRxY3RtNDg5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAgLT4gICAxDQotZHFjdG00OTAgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgIC0+ICAgMQ0KLWRxY3RtNDkxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgIC0+ICAgMQ0KLWRxY3RtNDkyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAgLT4gICAxDQotZHFjdG00OTMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgIC0+ICAgMQ0KLWRxY3RtNDk0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgIC0+ICAgMQ0KLWRxY3RtNDk1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAgLT4gICAxDQotZHFjdG00OTYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgIC0+ICAgMQ0KLWRxY3RtNDk3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgIC0+ICAgMA0KLQ0KLS0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwNCi1kcWN0bTQ5OCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE3ICAgICAtPiAgIDENCi1kcWN0bTQ5OSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE2ICAgICAtPiAgIDENCi1kcWN0bTUwMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE1ICAgICAtPiAgIDENCi1kcWN0bTUwMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE0ICAgICAtPiAgIDENCi1kcWN0bTUwMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEzICAgICAtPiAgIDENCi1kcWN0bTUwMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEyICAgICAtPiAgIDENCi1kcWN0bTUwNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTExICAgICAtPiAgIDENCi1kcWN0bTUwNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEwICAgICAtPiAgIDENCi1kcWN0bTUwNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTkgICAgICAtPiAgIDENCi1kcWN0bTUwNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTggICAgICAtPiAgIDENCi1kcWN0bTUwOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTcgICAgICAtPiAgIDENCi1kcWN0bTUwOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTYgICAgICAtPiAgIDENCi1kcWN0bTUxMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTUgICAgICAtPiAgIDENCi1kcWN0bTUxMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTQgICAgICAtPiAgIDENCi1kcWN0bTUxMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTMgICAgICAtPiAgIDENCi1kcWN0bTUxMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTIgICAgICAtPiAgIDENCi1kcWN0bTUxNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEgICAgICAtPiAgIDENCi1kcWN0bTUxNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTAgICAgICAtPiAgIDANCi1kcWN0bTUxNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEgICAgICAtPiAgLTENCi1kcWN0bTUxNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzIgICAgICAtPiAgLTENCi1kcWN0bTUxOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzMgICAgICAtPiAgLTENCi1kcWN0bTUxOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzQgICAgICAtPiAgLTENCi1kcWN0bTUyMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzUgICAgICAtPiAgLTENCi1kcWN0bTUyMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzYgICAgICAtPiAgLTENCi1kcWN0bTUyMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzcgICAgICAtPiAgLTENCi1kcWN0bTUyNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzggICAgICAtPiAgLTENCi1kcWN0bTUyNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzkgICAgICAtPiAgLTENCi1kcWN0bTUyNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEwICAgICAtPiAgLTENCi1kcWN0bTUyNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzExICAgICAtPiAgLTENCi1kcWN0bTUyOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEyICAgICAtPiAgLTENCi1kcWN0bTUyOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEzICAgICAtPiAgLTENCi1kcWN0bTUzMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE0ICAgICAtPiAgLTENCi1kcWN0bTUzMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE1ICAgICAtPiAgLTENCi1kcWN0bTUzMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE2ICAgICAtPiAgLTENCi1kcWN0bTUzMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE3ICAgICAtPiAgLTENCi0tLSBMUiBzd2FwDQotZHFjdG01MzggY29tcGFyZXRvdG1hZyAgICAxRS0xNyAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01MzkgY29tcGFyZXRvdG1hZyAgICAxRS0xNiAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NDAgY29tcGFyZXRvdG1hZyAgICAxRS0xNSAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NDEgY29tcGFyZXRvdG1hZyAgICAxRS0xNCAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NDIgY29tcGFyZXRvdG1hZyAgICAxRS0xMyAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NDMgY29tcGFyZXRvdG1hZyAgICAxRS0xMiAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NDQgY29tcGFyZXRvdG1hZyAgICAxRS0xMSAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NDUgY29tcGFyZXRvdG1hZyAgICAxRS0xMCAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NDYgY29tcGFyZXRvdG1hZyAgICAxRS05ICAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NDcgY29tcGFyZXRvdG1hZyAgICAxRS04ICAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NDggY29tcGFyZXRvdG1hZyAgICAxRS03ICAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NDkgY29tcGFyZXRvdG1hZyAgICAxRS02ICAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NTAgY29tcGFyZXRvdG1hZyAgICAxRS01ICAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NTEgY29tcGFyZXRvdG1hZyAgICAxRS00ICAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NTIgY29tcGFyZXRvdG1hZyAgICAxRS0zICAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NTMgY29tcGFyZXRvdG1hZyAgICAxRS0yICAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NTQgY29tcGFyZXRvdG1hZyAgICAxRS0xICAgMSAgICAgICAgLT4gIC0xDQotZHFjdG01NTUgY29tcGFyZXRvdG1hZyAgICAxRS0wICAgMSAgICAgICAgLT4gICAwDQotZHFjdG01NTYgY29tcGFyZXRvdG1hZyAgICAxRSsxICAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NTcgY29tcGFyZXRvdG1hZyAgICAxRSsyICAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NTggY29tcGFyZXRvdG1hZyAgICAxRSszICAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NTkgY29tcGFyZXRvdG1hZyAgICAxRSs0ICAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NjEgY29tcGFyZXRvdG1hZyAgICAxRSs1ICAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NjIgY29tcGFyZXRvdG1hZyAgICAxRSs2ICAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NjMgY29tcGFyZXRvdG1hZyAgICAxRSs3ICAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NjQgY29tcGFyZXRvdG1hZyAgICAxRSs4ICAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NjUgY29tcGFyZXRvdG1hZyAgICAxRSs5ICAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NjYgY29tcGFyZXRvdG1hZyAgICAxRSsxMCAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NjcgY29tcGFyZXRvdG1hZyAgICAxRSsxMSAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NjggY29tcGFyZXRvdG1hZyAgICAxRSsxMiAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NjkgY29tcGFyZXRvdG1hZyAgICAxRSsxMyAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NzAgY29tcGFyZXRvdG1hZyAgICAxRSsxNCAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NzEgY29tcGFyZXRvdG1hZyAgICAxRSsxNSAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NzIgY29tcGFyZXRvdG1hZyAgICAxRSsxNiAgMSAgICAgICAgLT4gICAxDQotZHFjdG01NzMgY29tcGFyZXRvdG1hZyAgICAxRSsxNyAgMSAgICAgICAgLT4gICAxDQotLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5DQotZHFjdG01NzggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE3ICAgICAtPiAgIDENCi1kcWN0bTU3OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTYgICAgIC0+ICAgMQ0KLWRxY3RtNTgwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAgLT4gICAxDQotZHFjdG01ODEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgICAtPiAgIDENCi1kcWN0bTU4MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgIC0+ICAgMQ0KLWRxY3RtNTgzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAgLT4gICAxDQotZHFjdG01ODQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgICAtPiAgIDENCi1kcWN0bTU4NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgIC0+ICAgMQ0KLWRxY3RtNTg2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAgLT4gICAxDQotZHFjdG01ODcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgICAtPiAgIDENCi1kcWN0bTU4OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgIC0+ICAgMQ0KLWRxY3RtNTg5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAgLT4gIC0xDQotZHFjdG01OTAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgICAtPiAgLTENCi1kcWN0bTU5MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgIC0+ICAtMQ0KLWRxY3RtNTkyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAgLT4gIC0xDQotZHFjdG01OTMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgICAtPiAgLTENCi1kcWN0bTU5NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgIC0+ICAtMQ0KLWRxY3RtNTk1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAgLT4gIC0xDQotZHFjdG01OTYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgICAtPiAgLTENCi1kcWN0bTU5NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgIC0+ICAtMQ0KLWRxY3RtNTk4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAgLT4gIC0xDQotZHFjdG01OTkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgICAtPiAgLTENCi0NCi0tLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcw0KLWRxY3RtNjAwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjAxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjAyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjAzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjA0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjA1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjA2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjA3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjA4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjA5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjEwIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjExIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjEyIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjEzIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjE0IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjE1IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgIC0+ICAgMQ0KLWRxY3RtNjE2IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgIC0+ICAgMQ0KLWRxY3RtNjE3IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgIC0+ICAgMQ0KLWRxY3RtNjE4IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgIC0+ICAgMQ0KLWRxY3RtNjE5IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgIC0+ICAgMQ0KLWRxY3RtNjIwIGNvbXBhcmV0b3RtYWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjIxIGNvbXBhcmV0b3RtYWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjIyIGNvbXBhcmV0b3RtYWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjIzIGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjI0IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjI1IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjI2IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjI3IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjI4IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjI5IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgIC0+ICAtMQ0KLWRxY3RtNjMwIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjMxIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjMyIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjMzIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjM0IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgIC0+ICAgMQ0KLWRxY3RtNjM1IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgIC0+ICAgMQ0KLWRxY3RtNjM2IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgIC0+ICAgMQ0KLWRxY3RtNjM3IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgIC0+ICAgMQ0KLWRxY3RtNjM4IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgIC0+ICAgMQ0KLWRxY3RtNjM5IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgIC0+ICAgMQ0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZHFjdG02NDAgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAgICAgLT4gICAwDQotZHFjdG02NDEgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAgICAgLT4gICAwDQotZHFjdG02NDIgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAuMCAgLT4gICAxDQotZHFjdG02NDMgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAuMCAgLT4gICAxDQotZHFjdG02NDQgY29tcGFyZXRvdG1hZyAgLTAgICAgIDAgICAgLT4gICAwDQotZHFjdG02NDUgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAgICAgLT4gICAwDQotZHFjdG02NDYgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAuMCAgLT4gICAxDQotZHFjdG02NDcgY29tcGFyZXRvdG1hZyAgLTAgICAgIDAuMCAgLT4gICAxDQotZHFjdG02NDggY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAgICAgLT4gIC0xDQotZHFjdG02NDkgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAgICAgLT4gIC0xDQotZHFjdG02NTAgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAuMCAgLT4gICAwDQotZHFjdG02NTEgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgLT4gICAwDQotZHFjdG02NTIgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAgICAgLT4gIC0xDQotZHFjdG02NTMgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAgICAgLT4gIC0xDQotZHFjdG02NTQgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAuMCAgLT4gICAwDQotZHFjdG02NTUgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAuMCAgLT4gICAwDQotDQotZHFjdG02NTYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAuMCAgLT4gICAxDQotZHFjdG02NTcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAuMCAgLT4gICAxDQotZHFjdG02NTggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAuMCAgLT4gICAxDQotZHFjdG02NTkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAuMCAgLT4gICAxDQotZHFjdG02NjAgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAgICAgLT4gICAxDQotZHFjdG02NjEgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAgICAgLT4gICAxDQotZHFjdG02NjIgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAgICAgLT4gICAxDQotZHFjdG02NjMgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAgICAgLT4gICAxDQotZHFjdG02NjQgY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMSAgLT4gICAwDQotZHFjdG02NjUgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMSAgLT4gICAxDQotZHFjdG02NjYgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMSAgLT4gICAwDQotZHFjdG02NjcgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMSAgLT4gICAxDQotZHFjdG02NjggY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMiAgLT4gIC0xDQotZHFjdG02NjkgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMiAgLT4gICAwDQotZHFjdG02NzAgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMiAgLT4gIC0xDQotZHFjdG02NzEgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMiAgLT4gICAwDQotZHFjdG02NzIgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMSAgLT4gICAwDQotZHFjdG02NzMgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMSAgLT4gICAxDQotZHFjdG02NzQgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMSAgLT4gICAwDQotZHFjdG02NzUgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMSAgLT4gICAxDQotZHFjdG02NzYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMiAgLT4gIC0xDQotZHFjdG02NzcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMiAgLT4gICAwDQotZHFjdG02NzggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMiAgLT4gIC0xDQotZHFjdG02NzkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMiAgLT4gICAwDQotDQotLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQ0KLWRxY3RtNjgwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMiAgICAgICAgICAgIC0+ICAgMA0KLWRxY3RtNjgxIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wICAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjgyIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMCAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjgzIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAgICAgICAgIC0+ICAgMQ0KLWRxY3RtNjg0IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwICAgICAgIC0+ICAgMQ0KLWRxY3RtNjg1IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMCAgICAgIC0+ICAgMQ0KLWRxY3RtNjg2IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAgICAgIC0+ICAgMQ0KLWRxY3RtNjg3IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwICAgIC0+ICAgMQ0KLWRxY3RtNjg4IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMCAgIC0+ICAgMQ0KLWRxY3RtNjg5IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMDAgIC0+ICAgMQ0KLWRxY3RtNjkwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgICAgMTIgIC0+ICAgMA0KLWRxY3RtNjkxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgICAgMTIgIC0+ICAtMQ0KLWRxY3RtNjkyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgICAgMTIgIC0+ICAtMQ0KLWRxY3RtNjkzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgICAgMTIgIC0+ICAtMQ0KLWRxY3RtNjk0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgICAgMTIgIC0+ICAtMQ0KLWRxY3RtNjk1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgICAgMTIgIC0+ICAtMQ0KLWRxY3RtNjk2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgICAgMTIgIC0+ICAtMQ0KLWRxY3RtNjk3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgICAgMTIgIC0+ICAtMQ0KLWRxY3RtNjk4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgICAgMTIgIC0+ICAtMQ0KLWRxY3RtNjk5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgICAgMTIgIC0+ICAtMQ0KLQ0KLS0tIG9sZCBsb25nIG9wZXJhbmQgY2hlY2tzDQotZHFjdG03MDEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAgMSAgLT4gICAxDQotZHFjdG03MDIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAwICAgLT4gIC0xDQotZHFjdG03MDMgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwICAgMSAgLT4gICAxDQotZHFjdG03MDQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAgLT4gIC0xDQotZHFjdG03MDUgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwICAgMSAgLT4gICAxDQotZHFjdG03MDYgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAgICAgLT4gIC0xDQotZHFjdG03MDcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAgMSAgLT4gICAxDQotZHFjdG03MDggY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gIC0xDQotZHFjdG03MDkgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwMSAgMSAgLT4gICAxDQotZHFjdG03MTAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gIC0xDQotZHFjdG03MTEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODk2ICAgMSAgLT4gICAxDQotZHFjdG03MTIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gIC0xDQotZHFjdG03MTMgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gICAxDQotZHFjdG03MTQgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkxICAgLT4gIC0xDQotZHFjdG03MTUgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gICAxDQotZHFjdG03MTYgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gIC0xDQotZHFjdG03MTcgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gICAxDQotZHFjdG03MTggY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gIC0xDQotDQotLS0gb2xkIHJlc2lkdWUgY2FzZXMNCi1kcWN0bTc0MCBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OTkgICAtPiAgIDENCi1kcWN0bTc0MSBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OSAgICAtPiAgIDENCi1kcWN0bTc0MiBjb21wYXJldG90bWFnICAxICAwLjk5OTk5ICAgICAtPiAgIDENCi1kcWN0bTc0MyBjb21wYXJldG90bWFnICAxICAxLjAwMDAgICAgICAtPiAgIDENCi1kcWN0bTc0NCBjb21wYXJldG90bWFnICAxICAxLjAwMDAxICAgICAtPiAgLTENCi1kcWN0bTc0NSBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMSAgICAtPiAgLTENCi1kcWN0bTc0NiBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMDEgICAtPiAgLTENCi1kcWN0bTc1MCBjb21wYXJldG90bWFnICAwLjk5OTk5OTkgIDEgICAtPiAgLTENCi1kcWN0bTc1MSBjb21wYXJldG90bWFnICAwLjk5OTk5OSAgIDEgICAtPiAgLTENCi1kcWN0bTc1MiBjb21wYXJldG90bWFnICAwLjk5OTk5ICAgIDEgICAtPiAgLTENCi1kcWN0bTc1MyBjb21wYXJldG90bWFnICAxLjAwMDAgICAgIDEgICAtPiAgLTENCi1kcWN0bTc1NCBjb21wYXJldG90bWFnICAxLjAwMDAxICAgIDEgICAtPiAgIDENCi1kcWN0bTc1NSBjb21wYXJldG90bWFnICAxLjAwMDAwMSAgIDEgICAtPiAgIDENCi1kcWN0bTc1NiBjb21wYXJldG90bWFnICAxLjAwMDAwMDEgIDEgICAtPiAgIDENCi0NCi0tLSBTcGVjaWFscw0KLWRxY3RtNzgwIGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwDQotZHFjdG03ODEgY29tcGFyZXRvdG1hZyAgSW5mICAtMTAwMCAgLT4gIDENCi1kcWN0bTc4MiBjb21wYXJldG90bWFnICBJbmYgIC0xICAgICAtPiAgMQ0KLWRxY3RtNzgzIGNvbXBhcmV0b3RtYWcgIEluZiAgLTAgICAgIC0+ICAxDQotZHFjdG03ODQgY29tcGFyZXRvdG1hZyAgSW5mICAgMCAgICAgLT4gIDENCi1kcWN0bTc4NSBjb21wYXJldG90bWFnICBJbmYgICAxICAgICAtPiAgMQ0KLWRxY3RtNzg2IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEwMDAgIC0+ICAxDQotZHFjdG03ODcgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDANCi1kcWN0bTc4OCBjb21wYXJldG90bWFnIC0xMDAwICBJbmYgICAtPiAtMQ0KLWRxY3RtNzg5IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwDQotZHFjdG03OTAgY29tcGFyZXRvdG1hZyAtMSAgICAgSW5mICAgLT4gLTENCi1kcWN0bTc5MSBjb21wYXJldG90bWFnIC0wICAgICBJbmYgICAtPiAtMQ0KLWRxY3RtNzkyIGNvbXBhcmV0b3RtYWcgIDAgICAgIEluZiAgIC0+IC0xDQotZHFjdG03OTMgY29tcGFyZXRvdG1hZyAgMSAgICAgSW5mICAgLT4gLTENCi1kcWN0bTc5NCBjb21wYXJldG90bWFnICAxMDAwICBJbmYgICAtPiAtMQ0KLWRxY3RtNzk1IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwDQotDQotZHFjdG04MDAgY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDANCi1kcWN0bTgwMSBjb21wYXJldG90bWFnIC1JbmYgIC0xMDAwICAtPiAgMQ0KLWRxY3RtODAyIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEgICAgIC0+ICAxDQotZHFjdG04MDMgY29tcGFyZXRvdG1hZyAtSW5mICAtMCAgICAgLT4gIDENCi1kcWN0bTgwNCBjb21wYXJldG90bWFnIC1JbmYgICAwICAgICAtPiAgMQ0KLWRxY3RtODA1IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEgICAgIC0+ICAxDQotZHFjdG04MDYgY29tcGFyZXRvdG1hZyAtSW5mICAgMTAwMCAgLT4gIDENCi1kcWN0bTgwNyBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMA0KLWRxY3RtODA4IGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwDQotZHFjdG04MDkgY29tcGFyZXRvdG1hZyAtMTAwMCAtSW5mICAgLT4gLTENCi1kcWN0bTgxMCBjb21wYXJldG90bWFnIC0xICAgIC1JbmYgICAtPiAtMQ0KLWRxY3RtODExIGNvbXBhcmV0b3RtYWcgLTAgICAgLUluZiAgIC0+IC0xDQotZHFjdG04MTIgY29tcGFyZXRvdG1hZyAgMCAgICAtSW5mICAgLT4gLTENCi1kcWN0bTgxMyBjb21wYXJldG90bWFnICAxICAgIC1JbmYgICAtPiAtMQ0KLWRxY3RtODE0IGNvbXBhcmV0b3RtYWcgIDEwMDAgLUluZiAgIC0+IC0xDQotZHFjdG04MTUgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDANCi0NCi1kcWN0bTgyMSBjb21wYXJldG90bWFnICBOYU4gLUluZiAgICAtPiAgMQ0KLWRxY3RtODIyIGNvbXBhcmV0b3RtYWcgIE5hTiAtMTAwMCAgIC0+ICAxDQotZHFjdG04MjMgY29tcGFyZXRvdG1hZyAgTmFOIC0xICAgICAgLT4gIDENCi1kcWN0bTgyNCBjb21wYXJldG90bWFnICBOYU4gLTAgICAgICAtPiAgMQ0KLWRxY3RtODI1IGNvbXBhcmV0b3RtYWcgIE5hTiAgMCAgICAgIC0+ICAxDQotZHFjdG04MjYgY29tcGFyZXRvdG1hZyAgTmFOICAxICAgICAgLT4gIDENCi1kcWN0bTgyNyBjb21wYXJldG90bWFnICBOYU4gIDEwMDAgICAtPiAgMQ0KLWRxY3RtODI4IGNvbXBhcmV0b3RtYWcgIE5hTiAgSW5mICAgIC0+ICAxDQotZHFjdG04MjkgY29tcGFyZXRvdG1hZyAgTmFOICBOYU4gICAgLT4gIDANCi1kcWN0bTgzMCBjb21wYXJldG90bWFnIC1JbmYgIE5hTiAgICAtPiAgLTENCi1kcWN0bTgzMSBjb21wYXJldG90bWFnIC0xMDAwIE5hTiAgICAtPiAgLTENCi1kcWN0bTgzMiBjb21wYXJldG90bWFnIC0xICAgIE5hTiAgICAtPiAgLTENCi1kcWN0bTgzMyBjb21wYXJldG90bWFnIC0wICAgIE5hTiAgICAtPiAgLTENCi1kcWN0bTgzNCBjb21wYXJldG90bWFnICAwICAgIE5hTiAgICAtPiAgLTENCi1kcWN0bTgzNSBjb21wYXJldG90bWFnICAxICAgIE5hTiAgICAtPiAgLTENCi1kcWN0bTgzNiBjb21wYXJldG90bWFnICAxMDAwIE5hTiAgICAtPiAgLTENCi1kcWN0bTgzNyBjb21wYXJldG90bWFnICBJbmYgIE5hTiAgICAtPiAgLTENCi1kcWN0bTgzOCBjb21wYXJldG90bWFnIC1OYU4gLU5hTiAgICAtPiAgMA0KLWRxY3RtODM5IGNvbXBhcmV0b3RtYWcgK05hTiAtTmFOICAgIC0+ICAwDQotZHFjdG04NDAgY29tcGFyZXRvdG1hZyAtTmFOICtOYU4gICAgLT4gIDANCi0NCi1kcWN0bTg0MSBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAtPiAgMA0KLWRxY3RtODQyIGNvbXBhcmV0b3RtYWcgIHNOYU4gLU5hTiAgIC0+ICAtMQ0KLWRxY3RtODQzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLUluZiAgIC0+ICAxDQotZHFjdG04NDQgY29tcGFyZXRvdG1hZyAgc05hTiAtMTAwMCAgLT4gIDENCi1kcWN0bTg0NSBjb21wYXJldG90bWFnICBzTmFOIC0xICAgICAtPiAgMQ0KLWRxY3RtODQ2IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTAgICAgIC0+ICAxDQotZHFjdG04NDcgY29tcGFyZXRvdG1hZyAgc05hTiAgMCAgICAgLT4gIDENCi1kcWN0bTg0OCBjb21wYXJldG90bWFnICBzTmFOICAxICAgICAtPiAgMQ0KLWRxY3RtODQ5IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEwMDAgIC0+ICAxDQotZHFjdG04NTAgY29tcGFyZXRvdG1hZyAgc05hTiAgTmFOICAgLT4gIC0xDQotZHFjdG04NTEgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDANCi0NCi1kcWN0bTg1MiBjb21wYXJldG90bWFnIC1zTmFOIHNOYU4gICAtPiAgMA0KLWRxY3RtODUzIGNvbXBhcmV0b3RtYWcgLU5hTiAgc05hTiAgIC0+ICAxDQotZHFjdG04NTQgY29tcGFyZXRvdG1hZyAtSW5mICBzTmFOICAgLT4gIC0xDQotZHFjdG04NTUgY29tcGFyZXRvdG1hZyAtMTAwMCBzTmFOICAgLT4gIC0xDQotZHFjdG04NTYgY29tcGFyZXRvdG1hZyAtMSAgICBzTmFOICAgLT4gIC0xDQotZHFjdG04NTcgY29tcGFyZXRvdG1hZyAtMCAgICBzTmFOICAgLT4gIC0xDQotZHFjdG04NTggY29tcGFyZXRvdG1hZyAgMCAgICBzTmFOICAgLT4gIC0xDQotZHFjdG04NTkgY29tcGFyZXRvdG1hZyAgMSAgICBzTmFOICAgLT4gIC0xDQotZHFjdG04NjAgY29tcGFyZXRvdG1hZyAgMTAwMCBzTmFOICAgLT4gIC0xDQotZHFjdG04NjEgY29tcGFyZXRvdG1hZyAgSW5mICBzTmFOICAgLT4gIC0xDQotZHFjdG04NjIgY29tcGFyZXRvdG1hZyAgTmFOICBzTmFOICAgLT4gIDENCi1kcWN0bTg2MyBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMA0KLQ0KLWRxY3RtODcxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1zTmFOICAtPiAgMA0KLWRxY3RtODcyIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1OYU4gICAtPiAgLTENCi1kcWN0bTg3MyBjb21wYXJldG90bWFnICAtc05hTiAtSW5mICAgLT4gIDENCi1kcWN0bTg3NCBjb21wYXJldG90bWFnICAtc05hTiAtMTAwMCAgLT4gIDENCi1kcWN0bTg3NSBjb21wYXJldG90bWFnICAtc05hTiAtMSAgICAgLT4gIDENCi1kcWN0bTg3NiBjb21wYXJldG90bWFnICAtc05hTiAtMCAgICAgLT4gIDENCi1kcWN0bTg3NyBjb21wYXJldG90bWFnICAtc05hTiAgMCAgICAgLT4gIDENCi1kcWN0bTg3OCBjb21wYXJldG90bWFnICAtc05hTiAgMSAgICAgLT4gIDENCi1kcWN0bTg3OSBjb21wYXJldG90bWFnICAtc05hTiAgMTAwMCAgLT4gIDENCi1kcWN0bTg4MCBjb21wYXJldG90bWFnICAtc05hTiAgTmFOICAgLT4gIC0xDQotZHFjdG04ODEgY29tcGFyZXRvdG1hZyAgLXNOYU4gc05hTiAgIC0+ICAwDQotDQotZHFjdG04ODIgY29tcGFyZXRvdG1hZyAtc05hTiAtc05hTiAgIC0+ICAwDQotZHFjdG04ODMgY29tcGFyZXRvdG1hZyAtTmFOICAtc05hTiAgIC0+ICAxDQotZHFjdG04ODQgY29tcGFyZXRvdG1hZyAtSW5mICAtc05hTiAgIC0+ICAtMQ0KLWRxY3RtODg1IGNvbXBhcmV0b3RtYWcgLTEwMDAgLXNOYU4gICAtPiAgLTENCi1kcWN0bTg4NiBjb21wYXJldG90bWFnIC0xICAgIC1zTmFOICAgLT4gIC0xDQotZHFjdG04ODcgY29tcGFyZXRvdG1hZyAtMCAgICAtc05hTiAgIC0+ICAtMQ0KLWRxY3RtODg4IGNvbXBhcmV0b3RtYWcgIDAgICAgLXNOYU4gICAtPiAgLTENCi1kcWN0bTg4OSBjb21wYXJldG90bWFnICAxICAgIC1zTmFOICAgLT4gIC0xDQotZHFjdG04OTAgY29tcGFyZXRvdG1hZyAgMTAwMCAtc05hTiAgIC0+ICAtMQ0KLWRxY3RtODkxIGNvbXBhcmV0b3RtYWcgIEluZiAgLXNOYU4gICAtPiAgLTENCi1kcWN0bTg5MiBjb21wYXJldG90bWFnICBOYU4gIC1zTmFOICAgLT4gIDENCi1kcWN0bTg5MyBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAgLT4gIDANCi0NCi0tLSBOYU5zIHdpdGggcGF5bG9hZA0KLWRxY3RtOTYwIGNvbXBhcmV0b3RtYWcgIE5hTjkgLUluZiAgIC0+ICAxDQotZHFjdG05NjEgY29tcGFyZXRvdG1hZyAgTmFOOCAgOTk5ICAgLT4gIDENCi1kcWN0bTk2MiBjb21wYXJldG90bWFnICBOYU43NyBJbmYgICAtPiAgMQ0KLWRxY3RtOTYzIGNvbXBhcmV0b3RtYWcgLU5hTjY3IE5hTjUgIC0+ICAxDQotZHFjdG05NjQgY29tcGFyZXRvdG1hZyAtSW5mICAtTmFONCAgLT4gIC0xDQotZHFjdG05NjUgY29tcGFyZXRvdG1hZyAtOTk5ICAtTmFOMzMgLT4gIC0xDQotZHFjdG05NjYgY29tcGFyZXRvdG1hZyAgSW5mICAgTmFOMiAgLT4gIC0xDQotDQotZHFjdG05NzAgY29tcGFyZXRvdG1hZyAtTmFONDEgLU5hTjQyIC0+IC0xDQotZHFjdG05NzEgY29tcGFyZXRvdG1hZyArTmFONDEgLU5hTjQyIC0+IC0xDQotZHFjdG05NzIgY29tcGFyZXRvdG1hZyAtTmFONDEgK05hTjQyIC0+IC0xDQotZHFjdG05NzMgY29tcGFyZXRvdG1hZyArTmFONDEgK05hTjQyIC0+IC0xDQotZHFjdG05NzQgY29tcGFyZXRvdG1hZyAtTmFONDIgLU5hTjAxIC0+ICAxDQotZHFjdG05NzUgY29tcGFyZXRvdG1hZyArTmFONDIgLU5hTjAxIC0+ICAxDQotZHFjdG05NzYgY29tcGFyZXRvdG1hZyAtTmFONDIgK05hTjAxIC0+ICAxDQotZHFjdG05NzcgY29tcGFyZXRvdG1hZyArTmFONDIgK05hTjAxIC0+ICAxDQotDQotZHFjdG05ODAgY29tcGFyZXRvdG1hZyAtc05hTjc3MSAtc05hTjc3MiAtPiAtMQ0KLWRxY3RtOTgxIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgLXNOYU43NzIgLT4gLTENCi1kcWN0bTk4MiBjb21wYXJldG90bWFnIC1zTmFONzcxICtzTmFONzcyIC0+IC0xDQotZHFjdG05ODMgY29tcGFyZXRvdG1hZyArc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWRxY3RtOTg0IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgLXNOYU43NzEgLT4gIDENCi1kcWN0bTk4NSBjb21wYXJldG90bWFnICtzTmFONzcyIC1zTmFONzcxIC0+ICAxDQotZHFjdG05ODYgY29tcGFyZXRvdG1hZyAtc05hTjc3MiArc05hTjc3MSAtPiAgMQ0KLWRxY3RtOTg3IGNvbXBhcmV0b3RtYWcgK3NOYU43NzIgK3NOYU43NzEgLT4gIDENCi0NCi1kcWN0bTk5MSBjb21wYXJldG90bWFnIC1zTmFOOTkgLUluZiAgICAtPiAgMQ0KLWRxY3RtOTkyIGNvbXBhcmV0b3RtYWcgIHNOYU45OCAtMTEgICAgIC0+ICAxDQotZHFjdG05OTMgY29tcGFyZXRvdG1hZyAgc05hTjk3ICBOYU4gICAgLT4gLTENCi1kcWN0bTk5NCBjb21wYXJldG90bWFnICBzTmFOMTYgc05hTjk0ICAtPiAtMQ0KLWRxY3RtOTk1IGNvbXBhcmV0b3RtYWcgIE5hTjg1ICBzTmFOODMgIC0+ICAxDQotZHFjdG05OTYgY29tcGFyZXRvdG1hZyAtSW5mICAgIHNOYU45MiAgLT4gLTENCi1kcWN0bTk5NyBjb21wYXJldG90bWFnICAwODggICAgc05hTjgxICAtPiAtMQ0KLWRxY3RtOTk4IGNvbXBhcmV0b3RtYWcgIEluZiAgICBzTmFOOTAgIC0+IC0xDQotZHFjdG05OTkgY29tcGFyZXRvdG1hZyAgTmFOICAgLXNOYU44OSAgLT4gIDENCi0NCi0tLSBzcHJlYWQgemVyb3MNCi1kcWN0bTExMTAgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgIDAgICAgICAgIC0+ICAtMQ0KLWRxY3RtMTExMSBjb21wYXJldG90bWFnICAgMEUtNjE0MyAtMCAgICAgICAgLT4gIC0xDQotZHFjdG0xMTEyIGNvbXBhcmV0b3RtYWcgIC0wRS02MTQzICAwICAgICAgICAtPiAgLTENCi1kcWN0bTExMTMgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgLTAgICAgICAgIC0+ICAtMQ0KLWRxY3RtMTExNCBjb21wYXJldG90bWFnICAgMEUtNjE0MyAgMEUrNjE0NCAgIC0+ICAtMQ0KLWRxY3RtMTExNSBjb21wYXJldG90bWFnICAgMEUtNjE0MyAtMEUrNjE0NCAgIC0+ICAtMQ0KLWRxY3RtMTExNiBjb21wYXJldG90bWFnICAtMEUtNjE0MyAgMEUrNjE0NCAgIC0+ICAtMQ0KLWRxY3RtMTExNyBjb21wYXJldG90bWFnICAtMEUtNjE0MyAtMEUrNjE0NCAgIC0+ICAtMQ0KLWRxY3RtMTExOCBjb21wYXJldG90bWFnICAgMCAgICAgICAwRSs2MTQ0ICAgLT4gIC0xDQotZHFjdG0xMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzYxNDQgICAtPiAgLTENCi1kcWN0bTExMjAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUrNjE0NCAgIC0+ICAtMQ0KLWRxY3RtMTEyMSBjb21wYXJldG90bWFnICAtMCAgICAgIC0wRSs2MTQ0ICAgLT4gIC0xDQotDQotZHFjdG0xMTMwIGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0ICAwICAgICAgICAtPiAgIDENCi1kcWN0bTExMzEgY29tcGFyZXRvdG1hZyAgIDBFKzYxNDQgLTAgICAgICAgIC0+ICAgMQ0KLWRxY3RtMTEzMiBjb21wYXJldG90bWFnICAtMEUrNjE0NCAgMCAgICAgICAgLT4gICAxDQotZHFjdG0xMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSs2MTQ0IC0wICAgICAgICAtPiAgIDENCi1kcWN0bTExMzQgY29tcGFyZXRvdG1hZyAgIDBFKzYxNDQgIDBFLTYxNDMgICAtPiAgIDENCi1kcWN0bTExMzUgY29tcGFyZXRvdG1hZyAgIDBFKzYxNDQgLTBFLTYxNDMgICAtPiAgIDENCi1kcWN0bTExMzYgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgIDBFLTYxNDMgICAtPiAgIDENCi1kcWN0bTExMzcgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgLTBFLTYxNDMgICAtPiAgIDENCi1kcWN0bTExMzggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUtNjE0MyAgIC0+ICAgMQ0KLWRxY3RtMTEzOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRS02MTQzICAgLT4gICAxDQotZHFjdG0xMTQwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFLTYxNDMgICAtPiAgIDENCi1kcWN0bTExNDEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUtNjE0MyAgIC0+ICAgMQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcWN0bTk5OTAgY29tcGFyZXRvdG1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWN0bTk5OTEgY29tcGFyZXRvdG1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uOyBhYnMuIHRvdGFsIG9yZGVyICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCistLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCistLSB0aGFuIGNvbXBhcmUuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWN0bTAwMSBjb21wYXJldG90bWFnICAtMiAgLTIgICAtPiAgIDAKK2RxY3RtMDAyIGNvbXBhcmV0b3RtYWcgIC0yICAtMSAgIC0+ICAgMQorZHFjdG0wMDMgY29tcGFyZXRvdG1hZyAgLTIgICAwICAgLT4gICAxCitkcWN0bTAwNCBjb21wYXJldG90bWFnICAtMiAgIDEgICAtPiAgIDEKK2RxY3RtMDA1IGNvbXBhcmV0b3RtYWcgIC0yICAgMiAgIC0+ICAgMAorZHFjdG0wMDYgY29tcGFyZXRvdG1hZyAgLTEgIC0yICAgLT4gIC0xCitkcWN0bTAwNyBjb21wYXJldG90bWFnICAtMSAgLTEgICAtPiAgIDAKK2RxY3RtMDA4IGNvbXBhcmV0b3RtYWcgIC0xICAgMCAgIC0+ICAgMQorZHFjdG0wMDkgY29tcGFyZXRvdG1hZyAgLTEgICAxICAgLT4gICAwCitkcWN0bTAxMCBjb21wYXJldG90bWFnICAtMSAgIDIgICAtPiAgLTEKK2RxY3RtMDExIGNvbXBhcmV0b3RtYWcgICAwICAtMiAgIC0+ICAtMQorZHFjdG0wMTIgY29tcGFyZXRvdG1hZyAgIDAgIC0xICAgLT4gIC0xCitkcWN0bTAxMyBjb21wYXJldG90bWFnICAgMCAgIDAgICAtPiAgIDAKK2RxY3RtMDE0IGNvbXBhcmV0b3RtYWcgICAwICAgMSAgIC0+ICAtMQorZHFjdG0wMTUgY29tcGFyZXRvdG1hZyAgIDAgICAyICAgLT4gIC0xCitkcWN0bTAxNiBjb21wYXJldG90bWFnICAgMSAgLTIgICAtPiAgLTEKK2RxY3RtMDE3IGNvbXBhcmV0b3RtYWcgICAxICAtMSAgIC0+ICAgMAorZHFjdG0wMTggY29tcGFyZXRvdG1hZyAgIDEgICAwICAgLT4gICAxCitkcWN0bTAxOSBjb21wYXJldG90bWFnICAgMSAgIDEgICAtPiAgIDAKK2RxY3RtMDIwIGNvbXBhcmV0b3RtYWcgICAxICAgMiAgIC0+ICAtMQorZHFjdG0wMjEgY29tcGFyZXRvdG1hZyAgIDIgIC0yICAgLT4gICAwCitkcWN0bTAyMiBjb21wYXJldG90bWFnICAgMiAgLTEgICAtPiAgIDEKK2RxY3RtMDIzIGNvbXBhcmV0b3RtYWcgICAyICAgMCAgIC0+ICAgMQorZHFjdG0wMjUgY29tcGFyZXRvdG1hZyAgIDIgICAxICAgLT4gICAxCitkcWN0bTAyNiBjb21wYXJldG90bWFnICAgMiAgIDIgICAtPiAgIDAKKworZHFjdG0wMzEgY29tcGFyZXRvdG1hZyAgLTIwICAtMjAgICAtPiAgIDAKK2RxY3RtMDMyIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTEwICAgLT4gICAxCitkcWN0bTAzMyBjb21wYXJldG90bWFnICAtMjAgICAwMCAgIC0+ICAgMQorZHFjdG0wMzQgY29tcGFyZXRvdG1hZyAgLTIwICAgMTAgICAtPiAgIDEKK2RxY3RtMDM1IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDIwICAgLT4gICAwCitkcWN0bTAzNiBjb21wYXJldG90bWFnICAtMTAgIC0yMCAgIC0+ICAtMQorZHFjdG0wMzcgY29tcGFyZXRvdG1hZyAgLTEwICAtMTAgICAtPiAgIDAKK2RxY3RtMDM4IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDAwICAgLT4gICAxCitkcWN0bTAzOSBjb21wYXJldG90bWFnICAtMTAgICAxMCAgIC0+ICAgMAorZHFjdG0wNDAgY29tcGFyZXRvdG1hZyAgLTEwICAgMjAgICAtPiAgLTEKK2RxY3RtMDQxIGNvbXBhcmV0b3RtYWcgICAwMCAgLTIwICAgLT4gIC0xCitkcWN0bTA0MiBjb21wYXJldG90bWFnICAgMDAgIC0xMCAgIC0+ICAtMQorZHFjdG0wNDMgY29tcGFyZXRvdG1hZyAgIDAwICAgMDAgICAtPiAgIDAKK2RxY3RtMDQ0IGNvbXBhcmV0b3RtYWcgICAwMCAgIDEwICAgLT4gIC0xCitkcWN0bTA0NSBjb21wYXJldG90bWFnICAgMDAgICAyMCAgIC0+ICAtMQorZHFjdG0wNDYgY29tcGFyZXRvdG1hZyAgIDEwICAtMjAgICAtPiAgLTEKK2RxY3RtMDQ3IGNvbXBhcmV0b3RtYWcgICAxMCAgLTEwICAgLT4gICAwCitkcWN0bTA0OCBjb21wYXJldG90bWFnICAgMTAgICAwMCAgIC0+ICAgMQorZHFjdG0wNDkgY29tcGFyZXRvdG1hZyAgIDEwICAgMTAgICAtPiAgIDAKK2RxY3RtMDUwIGNvbXBhcmV0b3RtYWcgICAxMCAgIDIwICAgLT4gIC0xCitkcWN0bTA1MSBjb21wYXJldG90bWFnICAgMjAgIC0yMCAgIC0+ICAgMAorZHFjdG0wNTIgY29tcGFyZXRvdG1hZyAgIDIwICAtMTAgICAtPiAgIDEKK2RxY3RtMDUzIGNvbXBhcmV0b3RtYWcgICAyMCAgIDAwICAgLT4gICAxCitkcWN0bTA1NSBjb21wYXJldG90bWFnICAgMjAgICAxMCAgIC0+ICAgMQorZHFjdG0wNTYgY29tcGFyZXRvdG1hZyAgIDIwICAgMjAgICAtPiAgIDAKKworZHFjdG0wNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMAorZHFjdG0wNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQorZHFjdG0wNjMgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDAuMCAgIC0+ICAgMQorZHFjdG0wNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQorZHFjdG0wNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMAorZHFjdG0wNjYgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTIuMCAgIC0+ICAtMQorZHFjdG0wNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMAorZHFjdG0wNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQorZHFjdG0wNjkgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDEuMCAgIC0+ICAgMAorZHFjdG0wNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQorZHFjdG0wNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQorZHFjdG0wNzIgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTEuMCAgIC0+ICAtMQorZHFjdG0wNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMAorZHFjdG0wNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQorZHFjdG0wNzUgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDIuMCAgIC0+ICAtMQorZHFjdG0wNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQorZHFjdG0wNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMAorZHFjdG0wNzggY29tcGFyZXRvdG1hZyAgIDEuMCAgIDAuMCAgIC0+ICAgMQorZHFjdG0wNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMAorZHFjdG0wODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQorZHFjdG0wODEgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTIuMCAgIC0+ICAgMAorZHFjdG0wODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQorZHFjdG0wODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQorZHFjdG0wODUgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDEuMCAgIC0+ICAgMQorZHFjdG0wODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RxY3RtMDkwIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgMAorZHFjdG0wOTEgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gICAwCitkcWN0bTA5MiBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgIDAKK2RxY3RtMDkzIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICAgMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKKy0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwKK2RxY3RtMTAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNy4wICAgICAtPiAgIDAKK2RxY3RtMTAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNyAgICAgICAtPiAgLTEKK2RxY3RtMTAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNy4wICAgICAtPiAgIDAKK2RxY3RtMTA1IGNvbXBhcmV0b3RtYWcgICAwLjdFKzEgNyAgICAgICAtPiAgIDAKK2RxY3RtMTA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNyAgICAgICAtPiAgLTEKK2RxY3RtMTA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgN0UrMCAgICAtPiAgLTEKK2RxY3RtMTA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNzBFLTEgICAtPiAgIDAKK2RxY3RtMTA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgMC43RSsxICAtPiAgIDAKK2RxY3RtMTEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNzBFLTEgICAtPiAgIDEKKworZHFjdG0xMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3LjAgICAgIC0+ICAgMQorZHFjdG0xMjEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3ICAgICAgIC0+ICAgMQorZHFjdG0xMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICA3LjAgICAgIC0+ICAgMQorZHFjdG0xMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA3LjAgICAgIC0+ICAgMQorZHFjdG0xMjQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3LjAgICAgIC0+ICAgMQorZHFjdG0xMjUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA3ICAgICAgIC0+ICAgMQorZHFjdG0xMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3ICAgICAgIC0+ICAgMQorZHFjdG0xMjcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3RSswICAgIC0+ICAgMQorZHFjdG0xMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICA3MEUtMSAgIC0+ICAgMQorZHFjdG0xMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjdFKzEgICAtPiAgIDEKK2RxY3RtMTMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNzBFLTEgICAtPiAgIDEKKworZHFjdG0xNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0xNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5ICAgICAgIC0+ICAtMQorZHFjdG0xNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0xNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0xNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5LjAgICAgIC0+ICAtMQorZHFjdG0xNDUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA5ICAgICAgIC0+ICAtMQorZHFjdG0xNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5ICAgICAgIC0+ICAtMQorZHFjdG0xNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5RSswICAgIC0+ICAtMQorZHFjdG0xNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICA5MEUtMSAgIC0+ICAtMQorZHFjdG0xNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjlFKzEgIC0+ICAtMQorZHFjdG0xNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICA5MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitkcWN0bTIwMCBjb21wYXJldG90bWFnICAtNy4wICAgIDcuMCAgICAgLT4gICAwCitkcWN0bTIwMSBjb21wYXJldG90bWFnICAtNy4wICAgIDcgICAgICAgLT4gIC0xCitkcWN0bTIwMiBjb21wYXJldG90bWFnICAtNyAgICAgIDcuMCAgICAgLT4gICAxCitkcWN0bTIwMyBjb21wYXJldG90bWFnICAtN0UrMCAgIDcuMCAgICAgLT4gICAxCitkcWN0bTIwNCBjb21wYXJldG90bWFnICAtNzBFLTEgIDcuMCAgICAgLT4gICAwCitkcWN0bTIwNSBjb21wYXJldG90bWFnICAtMC43RSsxIDcgICAgICAgLT4gICAwCitkcWN0bTIwNiBjb21wYXJldG90bWFnICAtNzBFLTEgIDcgICAgICAgLT4gIC0xCitkcWN0bTIwNyBjb21wYXJldG90bWFnICAtNy4wICAgIDdFKzAgICAgLT4gIC0xCitkcWN0bTIwOCBjb21wYXJldG90bWFnICAtNy4wICAgIDcwRS0xICAgLT4gICAwCitkcWN0bTIwOSBjb21wYXJldG90bWFnICAtNyAgICAgIDAuN0UrMSAgLT4gICAwCitkcWN0bTIxMCBjb21wYXJldG90bWFnICAtNyAgICAgIDcwRS0xICAgLT4gICAxCisKK2RxY3RtMjIwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMjIxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNyAgICAgICAtPiAgIDEKK2RxY3RtMjIyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMjIzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMjI0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNy4wICAgICAtPiAgIDEKK2RxY3RtMjI1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgNyAgICAgICAtPiAgIDEKK2RxY3RtMjI2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNyAgICAgICAtPiAgIDEKK2RxY3RtMjI3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgN0UrMCAgICAtPiAgIDEKK2RxY3RtMjI4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNzBFLTEgICAtPiAgIDEKK2RxY3RtMjI5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC43RSsxICAtPiAgIDEKK2RxY3RtMjMwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNzBFLTEgICAtPiAgIDEKKworZHFjdG0yNDAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0yNDEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5ICAgICAgIC0+ICAtMQorZHFjdG0yNDIgY29tcGFyZXRvdG1hZyAgLTggICAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0yNDMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0yNDQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5LjAgICAgIC0+ICAtMQorZHFjdG0yNDUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA5ICAgICAgIC0+ICAtMQorZHFjdG0yNDYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5ICAgICAgIC0+ICAtMQorZHFjdG0yNDcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5RSswICAgIC0+ICAtMQorZHFjdG0yNDggY29tcGFyZXRvdG1hZyAgLTguMCAgICA5MEUtMSAgIC0+ICAtMQorZHFjdG0yNDkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjlFKzEgIC0+ICAtMQorZHFjdG0yNTAgY29tcGFyZXRvdG1hZyAgLTggICAgICA5MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitkcWN0bTMwMCBjb21wYXJldG90bWFnICAgNy4wICAgIC03LjAgICAgIC0+ICAgMAorZHFjdG0zMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNyAgICAgICAtPiAgLTEKK2RxY3RtMzAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTMwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIC03LjAgICAgIC0+ICAgMQorZHFjdG0zMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNy4wICAgICAtPiAgIDAKK2RxY3RtMzA1IGNvbXBhcmV0b3RtYWcgICAuN0UrMSAgLTcgICAgICAgLT4gICAwCitkcWN0bTMwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIC03ICAgICAgIC0+ICAtMQorZHFjdG0zMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtN0UrMCAgICAtPiAgLTEKK2RxY3RtMzA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcwRS0xICAgLT4gICAwCitkcWN0bTMwOSBjb21wYXJldG90bWFnICAgNyAgICAgIC0uN0UrMSAgIC0+ICAgMAorZHFjdG0zMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNzBFLTEgICAtPiAgIDEKKworZHFjdG0zMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtMzIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcgICAgICAgLT4gICAxCitkcWN0bTMyMiBjb21wYXJldG90bWFnICAgOCAgICAgIC03LjAgICAgIC0+ICAgMQorZHFjdG0zMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtMzI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcuMCAgICAgLT4gICAxCitkcWN0bTMyNSBjb21wYXJldG90bWFnICAgLjhFKzEgIC03ICAgICAgIC0+ICAgMQorZHFjdG0zMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNyAgICAgICAtPiAgIDEKK2RxY3RtMzI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTdFKzAgICAgLT4gICAxCitkcWN0bTMyOCBjb21wYXJldG90bWFnICAgOC4wICAgIC03MEUtMSAgIC0+ICAgMQorZHFjdG0zMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjdFKzEgICAtPiAgIDEKK2RxY3RtMzMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2RxY3RtMzQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTM0MSBjb21wYXJldG90bWFnICAgOC4wICAgIC05ICAgICAgIC0+ICAtMQorZHFjdG0zNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOS4wICAgICAtPiAgLTEKK2RxY3RtMzQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTM0NCBjb21wYXJldG90bWFnICAgODBFLTEgIC05LjAgICAgIC0+ICAtMQorZHFjdG0zNDUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtOSAgICAgICAtPiAgLTEKK2RxY3RtMzQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkgICAgICAgLT4gIC0xCitkcWN0bTM0NyBjb21wYXJldG90bWFnICAgOC4wICAgIC05RSswICAgIC0+ICAtMQorZHFjdG0zNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOTBFLTEgICAtPiAgLTEKK2RxY3RtMzQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS45RSsxICAgLT4gIC0xCitkcWN0bTM1MCBjb21wYXJldG90bWFnICAgOCAgICAgIC05MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitkcWN0bTQwMCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNy4wICAgICAtPiAgIDAKK2RxY3RtNDAxIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03ICAgICAgIC0+ICAtMQorZHFjdG00MDIgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTQwMyBjb21wYXJldG90bWFnICAgLTdFKzAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtNDA0IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03LjAgICAgIC0+ICAgMAorZHFjdG00MDUgY29tcGFyZXRvdG1hZyAgIC0uN0UrMSAgLTcgICAgICAgLT4gICAwCitkcWN0bTQwNiBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNyAgICAgICAtPiAgLTEKK2RxY3RtNDA3IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03RSswICAgIC0+ICAtMQorZHFjdG00MDggY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcwRS0xICAgLT4gICAwCitkcWN0bTQwOSBjb21wYXJldG90bWFnICAgLTcgICAgICAtLjdFKzEgICAtPiAgIDAKK2RxY3RtNDEwIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkcWN0bTQyMCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtNDIxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03ICAgICAgIC0+ICAgMQorZHFjdG00MjIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTQyMyBjb21wYXJldG90bWFnICAgLThFKzAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtNDI0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03LjAgICAgIC0+ICAgMQorZHFjdG00MjUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTcgICAgICAgLT4gICAxCitkcWN0bTQyNiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNyAgICAgICAtPiAgIDEKK2RxY3RtNDI3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03RSswICAgIC0+ICAgMQorZHFjdG00MjggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcwRS0xICAgLT4gICAxCitkcWN0bTQyOSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjdFKzEgICAtPiAgIDEKK2RxY3RtNDMwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkcWN0bTQ0MCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOS4wICAgICAtPiAgLTEKK2RxY3RtNDQxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05ICAgICAgIC0+ICAtMQorZHFjdG00NDIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTQ0MyBjb21wYXJldG90bWFnICAgLThFKzAgICAtOS4wICAgICAtPiAgLTEKK2RxY3RtNDQ0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05LjAgICAgIC0+ICAtMQorZHFjdG00NDUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTkgICAgICAgLT4gIC0xCitkcWN0bTQ0NiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOSAgICAgICAtPiAgLTEKK2RxY3RtNDQ3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05RSswICAgIC0+ICAtMQorZHFjdG00NDggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkwRS0xICAgLT4gIC0xCitkcWN0bTQ0OSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjlFKzEgICAtPiAgLTEKK2RxY3RtNDUwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05MEUtMSAgIC0+ICAtMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZHFjdG00NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZHFjdG00NzQgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCitkcWN0bTQ3NSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZHFjdG00NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZHFjdG00NzcgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitkcWN0bTQ3OCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZHFjdG00NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZHFjdG00ODAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCitkcWN0bTQ4MSBjb21wYXJldG90bWFnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZHFjdG00ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZHFjdG00ODMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAgLT4gICAwCitkcWN0bTQ4NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAgLT4gICAxCitkcWN0bTQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDEKK2RxY3RtNDg5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAgLT4gICAxCitkcWN0bTQ5MCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAgLT4gICAxCitkcWN0bTQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5ICAtPiAgIDEKK2RxY3RtNDkyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAgLT4gICAxCitkcWN0bTQ5MyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAgLT4gICAxCitkcWN0bTQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDEKK2RxY3RtNDk1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAgLT4gICAxCitkcWN0bTQ5NiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAgLT4gICAxCitkcWN0bTQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5ICAtPiAgIDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZHFjdG00OTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNyAgICAgLT4gICAxCitkcWN0bTQ5OSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE2ICAgICAtPiAgIDEKK2RxY3RtNTAwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTUgICAgIC0+ICAgMQorZHFjdG01MDEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNCAgICAgLT4gICAxCitkcWN0bTUwMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEzICAgICAtPiAgIDEKK2RxY3RtNTAzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTIgICAgIC0+ICAgMQorZHFjdG01MDQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMSAgICAgLT4gICAxCitkcWN0bTUwNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEwICAgICAtPiAgIDEKK2RxY3RtNTA2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOSAgICAgIC0+ICAgMQorZHFjdG01MDcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS04ICAgICAgLT4gICAxCitkcWN0bTUwOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTcgICAgICAtPiAgIDEKK2RxY3RtNTA5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNiAgICAgIC0+ICAgMQorZHFjdG01MTAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS01ICAgICAgLT4gICAxCitkcWN0bTUxMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTQgICAgICAtPiAgIDEKK2RxY3RtNTEyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMyAgICAgIC0+ICAgMQorZHFjdG01MTMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0yICAgICAgLT4gICAxCitkcWN0bTUxNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEgICAgICAtPiAgIDEKK2RxY3RtNTE1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMCAgICAgIC0+ICAgMAorZHFjdG01MTYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxICAgICAgLT4gIC0xCitkcWN0bTUxNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzIgICAgICAtPiAgLTEKK2RxY3RtNTE4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMyAgICAgIC0+ICAtMQorZHFjdG01MTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs0ICAgICAgLT4gIC0xCitkcWN0bTUyMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzUgICAgICAtPiAgLTEKK2RxY3RtNTIyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNiAgICAgIC0+ICAtMQorZHFjdG01MjMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs3ICAgICAgLT4gIC0xCitkcWN0bTUyNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzggICAgICAtPiAgLTEKK2RxY3RtNTI1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOSAgICAgIC0+ICAtMQorZHFjdG01MjYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMCAgICAgLT4gIC0xCitkcWN0bTUyNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzExICAgICAtPiAgLTEKK2RxY3RtNTI4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTIgICAgIC0+ICAtMQorZHFjdG01MjkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMyAgICAgLT4gIC0xCitkcWN0bTUzMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE0ICAgICAtPiAgLTEKK2RxY3RtNTMxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTUgICAgIC0+ICAtMQorZHFjdG01MzIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNiAgICAgLT4gIC0xCitkcWN0bTUzMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE3ICAgICAtPiAgLTEKKy0tIExSIHN3YXAKK2RxY3RtNTM4IGNvbXBhcmV0b3RtYWcgICAgMUUtMTcgIDEgICAgICAgIC0+ICAtMQorZHFjdG01MzkgY29tcGFyZXRvdG1hZyAgICAxRS0xNiAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0MCBjb21wYXJldG90bWFnICAgIDFFLTE1ICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDIgY29tcGFyZXRvdG1hZyAgICAxRS0xMyAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0MyBjb21wYXJldG90bWFnICAgIDFFLTEyICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDUgY29tcGFyZXRvdG1hZyAgICAxRS0xMCAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0NiBjb21wYXJldG90bWFnICAgIDFFLTkgICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDggY29tcGFyZXRvdG1hZyAgICAxRS03ICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0OSBjb21wYXJldG90bWFnICAgIDFFLTYgICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NTEgY29tcGFyZXRvdG1hZyAgICAxRS00ICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU1MiBjb21wYXJldG90bWFnICAgIDFFLTMgICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NTQgY29tcGFyZXRvdG1hZyAgICAxRS0xICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU1NSBjb21wYXJldG90bWFnICAgIDFFLTAgICAxICAgICAgICAtPiAgIDAKK2RxY3RtNTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NTcgY29tcGFyZXRvdG1hZyAgICAxRSsyICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU1OCBjb21wYXJldG90bWFnICAgIDFFKzMgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjEgY29tcGFyZXRvdG1hZyAgICAxRSs1ICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2MiBjb21wYXJldG90bWFnICAgIDFFKzYgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjQgY29tcGFyZXRvdG1hZyAgICAxRSs4ICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2NSBjb21wYXJldG90bWFnICAgIDFFKzkgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjcgY29tcGFyZXRvdG1hZyAgICAxRSsxMSAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2OCBjb21wYXJldG90bWFnICAgIDFFKzEyICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NzAgY29tcGFyZXRvdG1hZyAgICAxRSsxNCAgMSAgICAgICAgLT4gICAxCitkcWN0bTU3MSBjb21wYXJldG90bWFnICAgIDFFKzE1ICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTcyIGNvbXBhcmV0b3RtYWcgICAgMUUrMTYgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NzMgY29tcGFyZXRvdG1hZyAgICAxRSsxNyAgMSAgICAgICAgLT4gICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RxY3RtNTc4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAgLT4gICAxCitkcWN0bTU3OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTYgICAgIC0+ICAgMQorZHFjdG01ODAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgICAtPiAgIDEKK2RxY3RtNTgxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAgLT4gICAxCitkcWN0bTU4MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgIC0+ICAgMQorZHFjdG01ODMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgICAtPiAgIDEKK2RxY3RtNTg0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAgLT4gICAxCitkcWN0bTU4NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgIC0+ICAgMQorZHFjdG01ODYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgICAtPiAgIDEKK2RxY3RtNTg3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAgLT4gICAxCitkcWN0bTU4OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgIC0+ICAgMQorZHFjdG01ODkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgICAtPiAgLTEKK2RxY3RtNTkwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAgLT4gIC0xCitkcWN0bTU5MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgIC0+ICAtMQorZHFjdG01OTIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgICAtPiAgLTEKK2RxY3RtNTkzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAgLT4gIC0xCitkcWN0bTU5NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgIC0+ICAtMQorZHFjdG01OTUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgICAtPiAgLTEKK2RxY3RtNTk2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAgLT4gIC0xCitkcWN0bTU5NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgIC0+ICAtMQorZHFjdG01OTggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgICAtPiAgLTEKK2RxY3RtNTk5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAgLT4gIC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkcWN0bTYwMCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjAxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwMyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjA0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwNiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjA3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwOSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjEwIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgIC0+ICAgMQorZHFjdG02MTEgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAgLT4gICAxCitkcWN0bTYxMiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgICAtPiAgIDEKK2RxY3RtNjEzIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgIC0+ICAgMQorZHFjdG02MTQgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAgLT4gICAxCitkcWN0bTYxNSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgICAtPiAgIDEKK2RxY3RtNjE2IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgIC0+ICAgMQorZHFjdG02MTcgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAgLT4gICAxCitkcWN0bTYxOCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgICAtPiAgIDEKK2RxY3RtNjE5IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgIC0+ICAgMQorZHFjdG02MjAgY29tcGFyZXRvdG1hZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyMSBjb21wYXJldG90bWFnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjIyIGNvbXBhcmV0b3RtYWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjMgY29tcGFyZXRvdG1hZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyNCBjb21wYXJldG90bWFnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjI1IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjYgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyNyBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjI4IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjkgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYzMCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIgICAgICAgICAgICAtPiAgIDEKK2RxY3RtNjMxIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgIC0+ICAgMQorZHFjdG02MzIgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAgLT4gICAxCitkcWN0bTYzMyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgICAtPiAgIDEKK2RxY3RtNjM0IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgIC0+ICAgMQorZHFjdG02MzUgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAgLT4gICAxCitkcWN0bTYzNiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgICAtPiAgIDEKK2RxY3RtNjM3IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgIC0+ICAgMQorZHFjdG02MzggY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAgLT4gICAxCitkcWN0bTYzOSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwICAtPiAgIDEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RxY3RtNjQwIGNvbXBhcmV0b3RtYWcgICAwICAgICAwICAgIC0+ICAgMAorZHFjdG02NDEgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAgICAgLT4gICAwCitkcWN0bTY0MiBjb21wYXJldG90bWFnICAgMCAgICAtMC4wICAtPiAgIDEKK2RxY3RtNjQzIGNvbXBhcmV0b3RtYWcgICAwICAgICAwLjAgIC0+ICAgMQorZHFjdG02NDQgY29tcGFyZXRvdG1hZyAgLTAgICAgIDAgICAgLT4gICAwCitkcWN0bTY0NSBjb21wYXJldG90bWFnICAtMCAgICAtMCAgICAtPiAgIDAKK2RxY3RtNjQ2IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wLjAgIC0+ICAgMQorZHFjdG02NDcgY29tcGFyZXRvdG1hZyAgLTAgICAgIDAuMCAgLT4gICAxCitkcWN0bTY0OCBjb21wYXJldG90bWFnICAgMC4wICAgMCAgICAtPiAgLTEKK2RxY3RtNjQ5IGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wICAgIC0+ICAtMQorZHFjdG02NTAgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAuMCAgLT4gICAwCitkcWN0bTY1MSBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAtPiAgIDAKK2RxY3RtNjUyIGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwICAgIC0+ICAtMQorZHFjdG02NTMgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAgICAgLT4gIC0xCitkcWN0bTY1NCBjb21wYXJldG90bWFnICAtMC4wICAtMC4wICAtPiAgIDAKK2RxY3RtNjU1IGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwLjAgIC0+ICAgMAorCitkcWN0bTY1NiBjb21wYXJldG90bWFnICAtMEUxICAgMC4wICAtPiAgIDEKK2RxY3RtNjU3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwLjAgIC0+ICAgMQorZHFjdG02NTggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAuMCAgLT4gICAxCitkcWN0bTY1OSBjb21wYXJldG90bWFnICAgMEUyICAgMC4wICAtPiAgIDEKK2RxY3RtNjYwIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwICAgIC0+ICAgMQorZHFjdG02NjEgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAgICAgLT4gICAxCitkcWN0bTY2MiBjb21wYXJldG90bWFnICAgMEUxICAgMCAgICAtPiAgIDEKK2RxY3RtNjYzIGNvbXBhcmV0b3RtYWcgICAwRTIgICAwICAgIC0+ICAgMQorZHFjdG02NjQgY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMSAgLT4gICAwCitkcWN0bTY2NSBjb21wYXJldG90bWFnICAtMEUyICAtMEUxICAtPiAgIDEKK2RxY3RtNjY2IGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTEgIC0+ICAgMAorZHFjdG02NjcgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMSAgLT4gICAxCitkcWN0bTY2OCBjb21wYXJldG90bWFnICAtMEUxICAtMEUyICAtPiAgLTEKK2RxY3RtNjY5IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTIgIC0+ICAgMAorZHFjdG02NzAgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMiAgLT4gIC0xCitkcWN0bTY3MSBjb21wYXJldG90bWFnICAgMEUyICAtMEUyICAtPiAgIDAKK2RxY3RtNjcyIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTEgIC0+ICAgMAorZHFjdG02NzMgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMSAgLT4gICAxCitkcWN0bTY3NCBjb21wYXJldG90bWFnICAgMEUxICAgMEUxICAtPiAgIDAKK2RxY3RtNjc1IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTEgIC0+ICAgMQorZHFjdG02NzYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMiAgLT4gIC0xCitkcWN0bTY3NyBjb21wYXJldG90bWFnICAtMEUyICAgMEUyICAtPiAgIDAKK2RxY3RtNjc4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTIgIC0+ICAtMQorZHFjdG02NzkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMiAgLT4gICAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RxY3RtNjgwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMiAgICAgICAgICAgIC0+ICAgMAorZHFjdG02ODEgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAgICAgICAgICAgLT4gICAxCitkcWN0bTY4MiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAgICAgICAgICAtPiAgIDEKK2RxY3RtNjgzIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAgICAgICAgIC0+ICAgMQorZHFjdG02ODQgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAgICAgICAgLT4gICAxCitkcWN0bTY4NSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAgICAgICAtPiAgIDEKK2RxY3RtNjg2IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAgICAgIC0+ICAgMQorZHFjdG02ODcgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAgICAgLT4gICAxCitkcWN0bTY4OCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAgICAtPiAgIDEKK2RxY3RtNjg5IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMDAgIC0+ICAgMQorZHFjdG02OTAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgICAxMiAgLT4gICAwCitkcWN0bTY5MSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjkyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgICAgMTIgIC0+ICAtMQorZHFjdG02OTMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgICAxMiAgLT4gIC0xCitkcWN0bTY5NCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjk1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgICAgMTIgIC0+ICAtMQorZHFjdG02OTYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgICAxMiAgLT4gIC0xCitkcWN0bTY5NyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjk4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgICAgMTIgIC0+ICAtMQorZHFjdG02OTkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAgLT4gIC0xCisKKy0tIG9sZCBsb25nIG9wZXJhbmQgY2hlY2tzCitkcWN0bTcwMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAwICAxICAtPiAgIDEKK2RxY3RtNzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQorZHFjdG03MDMgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwICAgMSAgLT4gICAxCitkcWN0bTcwNCBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMCAgICAtPiAgLTEKK2RxY3RtNzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQorZHFjdG03MDYgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAgICAgLT4gIC0xCitkcWN0bTcwNyBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTEgICAxICAtPiAgIDEKK2RxY3RtNzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQorZHFjdG03MDkgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwMSAgMSAgLT4gICAxCitkcWN0bTcxMCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAgLTEKK2RxY3RtNzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQorZHFjdG03MTIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gIC0xCitkcWN0bTcxMyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkxICAxICAtPiAgIDEKK2RxY3RtNzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQorZHFjdG03MTUgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gICAxCitkcWN0bTcxNiBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAgLTEKK2RxY3RtNzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQorZHFjdG03MTggY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gIC0xCisKKy0tIG9sZCByZXNpZHVlIGNhc2VzCitkcWN0bTc0MCBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OTkgICAtPiAgIDEKK2RxY3RtNzQxIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5ICAgIC0+ICAgMQorZHFjdG03NDIgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OSAgICAgLT4gICAxCitkcWN0bTc0MyBjb21wYXJldG90bWFnICAxICAxLjAwMDAgICAgICAtPiAgIDEKK2RxY3RtNzQ0IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDEgICAgIC0+ICAtMQorZHFjdG03NDUgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDEgICAgLT4gIC0xCitkcWN0bTc0NiBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMDEgICAtPiAgLTEKK2RxY3RtNzUwIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5OSAgMSAgIC0+ICAtMQorZHFjdG03NTEgY29tcGFyZXRvdG1hZyAgMC45OTk5OTkgICAxICAgLT4gIC0xCitkcWN0bTc1MiBjb21wYXJldG90bWFnICAwLjk5OTk5ICAgIDEgICAtPiAgLTEKK2RxY3RtNzUzIGNvbXBhcmV0b3RtYWcgIDEuMDAwMCAgICAgMSAgIC0+ICAtMQorZHFjdG03NTQgY29tcGFyZXRvdG1hZyAgMS4wMDAwMSAgICAxICAgLT4gICAxCitkcWN0bTc1NSBjb21wYXJldG90bWFnICAxLjAwMDAwMSAgIDEgICAtPiAgIDEKK2RxY3RtNzU2IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAwMSAgMSAgIC0+ICAgMQorCistLSBTcGVjaWFscworZHFjdG03ODAgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDAKK2RxY3RtNzgxIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEwMDAgIC0+ICAxCitkcWN0bTc4MiBjb21wYXJldG90bWFnICBJbmYgIC0xICAgICAtPiAgMQorZHFjdG03ODMgY29tcGFyZXRvdG1hZyAgSW5mICAtMCAgICAgLT4gIDEKK2RxY3RtNzg0IGNvbXBhcmV0b3RtYWcgIEluZiAgIDAgICAgIC0+ICAxCitkcWN0bTc4NSBjb21wYXJldG90bWFnICBJbmYgICAxICAgICAtPiAgMQorZHFjdG03ODYgY29tcGFyZXRvdG1hZyAgSW5mICAgMTAwMCAgLT4gIDEKK2RxY3RtNzg3IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwCitkcWN0bTc4OCBjb21wYXJldG90bWFnIC0xMDAwICBJbmYgICAtPiAtMQorZHFjdG03ODkgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDAKK2RxY3RtNzkwIGNvbXBhcmV0b3RtYWcgLTEgICAgIEluZiAgIC0+IC0xCitkcWN0bTc5MSBjb21wYXJldG90bWFnIC0wICAgICBJbmYgICAtPiAtMQorZHFjdG03OTIgY29tcGFyZXRvdG1hZyAgMCAgICAgSW5mICAgLT4gLTEKK2RxY3RtNzkzIGNvbXBhcmV0b3RtYWcgIDEgICAgIEluZiAgIC0+IC0xCitkcWN0bTc5NCBjb21wYXJldG90bWFnICAxMDAwICBJbmYgICAtPiAtMQorZHFjdG03OTUgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDAKKworZHFjdG04MDAgY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDAKK2RxY3RtODAxIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEwMDAgIC0+ICAxCitkcWN0bTgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQorZHFjdG04MDMgY29tcGFyZXRvdG1hZyAtSW5mICAtMCAgICAgLT4gIDEKK2RxY3RtODA0IGNvbXBhcmV0b3RtYWcgLUluZiAgIDAgICAgIC0+ICAxCitkcWN0bTgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQorZHFjdG04MDYgY29tcGFyZXRvdG1hZyAtSW5mICAgMTAwMCAgLT4gIDEKK2RxY3RtODA3IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCitkcWN0bTgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjdG04MDkgY29tcGFyZXRvdG1hZyAtMTAwMCAtSW5mICAgLT4gLTEKK2RxY3RtODEwIGNvbXBhcmV0b3RtYWcgLTEgICAgLUluZiAgIC0+IC0xCitkcWN0bTgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQorZHFjdG04MTIgY29tcGFyZXRvdG1hZyAgMCAgICAtSW5mICAgLT4gLTEKK2RxY3RtODEzIGNvbXBhcmV0b3RtYWcgIDEgICAgLUluZiAgIC0+IC0xCitkcWN0bTgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQorZHFjdG04MTUgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDAKKworZHFjdG04MjEgY29tcGFyZXRvdG1hZyAgTmFOIC1JbmYgICAgLT4gIDEKK2RxY3RtODIyIGNvbXBhcmV0b3RtYWcgIE5hTiAtMTAwMCAgIC0+ICAxCitkcWN0bTgyMyBjb21wYXJldG90bWFnICBOYU4gLTEgICAgICAtPiAgMQorZHFjdG04MjQgY29tcGFyZXRvdG1hZyAgTmFOIC0wICAgICAgLT4gIDEKK2RxY3RtODI1IGNvbXBhcmV0b3RtYWcgIE5hTiAgMCAgICAgIC0+ICAxCitkcWN0bTgyNiBjb21wYXJldG90bWFnICBOYU4gIDEgICAgICAtPiAgMQorZHFjdG04MjcgY29tcGFyZXRvdG1hZyAgTmFOICAxMDAwICAgLT4gIDEKK2RxY3RtODI4IGNvbXBhcmV0b3RtYWcgIE5hTiAgSW5mICAgIC0+ICAxCitkcWN0bTgyOSBjb21wYXJldG90bWFnICBOYU4gIE5hTiAgICAtPiAgMAorZHFjdG04MzAgY29tcGFyZXRvdG1hZyAtSW5mICBOYU4gICAgLT4gIC0xCitkcWN0bTgzMSBjb21wYXJldG90bWFnIC0xMDAwIE5hTiAgICAtPiAgLTEKK2RxY3RtODMyIGNvbXBhcmV0b3RtYWcgLTEgICAgTmFOICAgIC0+ICAtMQorZHFjdG04MzMgY29tcGFyZXRvdG1hZyAtMCAgICBOYU4gICAgLT4gIC0xCitkcWN0bTgzNCBjb21wYXJldG90bWFnICAwICAgIE5hTiAgICAtPiAgLTEKK2RxY3RtODM1IGNvbXBhcmV0b3RtYWcgIDEgICAgTmFOICAgIC0+ICAtMQorZHFjdG04MzYgY29tcGFyZXRvdG1hZyAgMTAwMCBOYU4gICAgLT4gIC0xCitkcWN0bTgzNyBjb21wYXJldG90bWFnICBJbmYgIE5hTiAgICAtPiAgLTEKK2RxY3RtODM4IGNvbXBhcmV0b3RtYWcgLU5hTiAtTmFOICAgIC0+ICAwCitkcWN0bTgzOSBjb21wYXJldG90bWFnICtOYU4gLU5hTiAgICAtPiAgMAorZHFjdG04NDAgY29tcGFyZXRvdG1hZyAtTmFOICtOYU4gICAgLT4gIDAKKworZHFjdG04NDEgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgLT4gIDAKK2RxY3RtODQyIGNvbXBhcmV0b3RtYWcgIHNOYU4gLU5hTiAgIC0+ICAtMQorZHFjdG04NDMgY29tcGFyZXRvdG1hZyAgc05hTiAtSW5mICAgLT4gIDEKK2RxY3RtODQ0IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEwMDAgIC0+ICAxCitkcWN0bTg0NSBjb21wYXJldG90bWFnICBzTmFOIC0xICAgICAtPiAgMQorZHFjdG04NDYgY29tcGFyZXRvdG1hZyAgc05hTiAtMCAgICAgLT4gIDEKK2RxY3RtODQ3IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDAgICAgIC0+ICAxCitkcWN0bTg0OCBjb21wYXJldG90bWFnICBzTmFOICAxICAgICAtPiAgMQorZHFjdG04NDkgY29tcGFyZXRvdG1hZyAgc05hTiAgMTAwMCAgLT4gIDEKK2RxY3RtODUwIGNvbXBhcmV0b3RtYWcgIHNOYU4gIE5hTiAgIC0+ICAtMQorZHFjdG04NTEgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDAKKworZHFjdG04NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDAKK2RxY3RtODUzIGNvbXBhcmV0b3RtYWcgLU5hTiAgc05hTiAgIC0+ICAxCitkcWN0bTg1NCBjb21wYXJldG90bWFnIC1JbmYgIHNOYU4gICAtPiAgLTEKK2RxY3RtODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQorZHFjdG04NTYgY29tcGFyZXRvdG1hZyAtMSAgICBzTmFOICAgLT4gIC0xCitkcWN0bTg1NyBjb21wYXJldG90bWFnIC0wICAgIHNOYU4gICAtPiAgLTEKK2RxY3RtODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQorZHFjdG04NTkgY29tcGFyZXRvdG1hZyAgMSAgICBzTmFOICAgLT4gIC0xCitkcWN0bTg2MCBjb21wYXJldG90bWFnICAxMDAwIHNOYU4gICAtPiAgLTEKK2RxY3RtODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQorZHFjdG04NjIgY29tcGFyZXRvdG1hZyAgTmFOICBzTmFOICAgLT4gIDEKK2RxY3RtODYzIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RxY3RtODcxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1zTmFOICAtPiAgMAorZHFjdG04NzIgY29tcGFyZXRvdG1hZyAgLXNOYU4gLU5hTiAgIC0+ICAtMQorZHFjdG04NzMgY29tcGFyZXRvdG1hZyAgLXNOYU4gLUluZiAgIC0+ICAxCitkcWN0bTg3NCBjb21wYXJldG90bWFnICAtc05hTiAtMTAwMCAgLT4gIDEKK2RxY3RtODc1IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xICAgICAtPiAgMQorZHFjdG04NzYgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTAgICAgIC0+ICAxCitkcWN0bTg3NyBjb21wYXJldG90bWFnICAtc05hTiAgMCAgICAgLT4gIDEKK2RxY3RtODc4IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxICAgICAtPiAgMQorZHFjdG04NzkgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEwMDAgIC0+ICAxCitkcWN0bTg4MCBjb21wYXJldG90bWFnICAtc05hTiAgTmFOICAgLT4gIC0xCitkcWN0bTg4MSBjb21wYXJldG90bWFnICAtc05hTiBzTmFOICAgLT4gIDAKKworZHFjdG04ODIgY29tcGFyZXRvdG1hZyAtc05hTiAtc05hTiAgIC0+ICAwCitkcWN0bTg4MyBjb21wYXJldG90bWFnIC1OYU4gIC1zTmFOICAgLT4gIDEKK2RxY3RtODg0IGNvbXBhcmV0b3RtYWcgLUluZiAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODg1IGNvbXBhcmV0b3RtYWcgLTEwMDAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODg2IGNvbXBhcmV0b3RtYWcgLTEgICAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODg3IGNvbXBhcmV0b3RtYWcgLTAgICAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODg4IGNvbXBhcmV0b3RtYWcgIDAgICAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODg5IGNvbXBhcmV0b3RtYWcgIDEgICAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODkwIGNvbXBhcmV0b3RtYWcgIDEwMDAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODkxIGNvbXBhcmV0b3RtYWcgIEluZiAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODkyIGNvbXBhcmV0b3RtYWcgIE5hTiAgLXNOYU4gICAtPiAgMQorZHFjdG04OTMgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgIC0+ICAwCisKKy0tIE5hTnMgd2l0aCBwYXlsb2FkCitkcWN0bTk2MCBjb21wYXJldG90bWFnICBOYU45IC1JbmYgICAtPiAgMQorZHFjdG05NjEgY29tcGFyZXRvdG1hZyAgTmFOOCAgOTk5ICAgLT4gIDEKK2RxY3RtOTYyIGNvbXBhcmV0b3RtYWcgIE5hTjc3IEluZiAgIC0+ICAxCitkcWN0bTk2MyBjb21wYXJldG90bWFnIC1OYU42NyBOYU41ICAtPiAgMQorZHFjdG05NjQgY29tcGFyZXRvdG1hZyAtSW5mICAtTmFONCAgLT4gIC0xCitkcWN0bTk2NSBjb21wYXJldG90bWFnIC05OTkgIC1OYU4zMyAtPiAgLTEKK2RxY3RtOTY2IGNvbXBhcmV0b3RtYWcgIEluZiAgIE5hTjIgIC0+ICAtMQorCitkcWN0bTk3MCBjb21wYXJldG90bWFnIC1OYU40MSAtTmFONDIgLT4gLTEKK2RxY3RtOTcxIGNvbXBhcmV0b3RtYWcgK05hTjQxIC1OYU40MiAtPiAtMQorZHFjdG05NzIgY29tcGFyZXRvdG1hZyAtTmFONDEgK05hTjQyIC0+IC0xCitkcWN0bTk3MyBjb21wYXJldG90bWFnICtOYU40MSArTmFONDIgLT4gLTEKK2RxY3RtOTc0IGNvbXBhcmV0b3RtYWcgLU5hTjQyIC1OYU4wMSAtPiAgMQorZHFjdG05NzUgY29tcGFyZXRvdG1hZyArTmFONDIgLU5hTjAxIC0+ICAxCitkcWN0bTk3NiBjb21wYXJldG90bWFnIC1OYU40MiArTmFOMDEgLT4gIDEKK2RxY3RtOTc3IGNvbXBhcmV0b3RtYWcgK05hTjQyICtOYU4wMSAtPiAgMQorCitkcWN0bTk4MCBjb21wYXJldG90bWFnIC1zTmFONzcxIC1zTmFONzcyIC0+IC0xCitkcWN0bTk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xCitkcWN0bTk4MiBjb21wYXJldG90bWFnIC1zTmFONzcxICtzTmFONzcyIC0+IC0xCitkcWN0bTk4MyBjb21wYXJldG90bWFnICtzTmFONzcxICtzTmFONzcyIC0+IC0xCitkcWN0bTk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxCitkcWN0bTk4NSBjb21wYXJldG90bWFnICtzTmFONzcyIC1zTmFONzcxIC0+ICAxCitkcWN0bTk4NiBjb21wYXJldG90bWFnIC1zTmFONzcyICtzTmFONzcxIC0+ICAxCitkcWN0bTk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxCisKK2RxY3RtOTkxIGNvbXBhcmV0b3RtYWcgLXNOYU45OSAtSW5mICAgIC0+ICAxCitkcWN0bTk5MiBjb21wYXJldG90bWFnICBzTmFOOTggLTExICAgICAtPiAgMQorZHFjdG05OTMgY29tcGFyZXRvdG1hZyAgc05hTjk3ICBOYU4gICAgLT4gLTEKK2RxY3RtOTk0IGNvbXBhcmV0b3RtYWcgIHNOYU4xNiBzTmFOOTQgIC0+IC0xCitkcWN0bTk5NSBjb21wYXJldG90bWFnICBOYU44NSAgc05hTjgzICAtPiAgMQorZHFjdG05OTYgY29tcGFyZXRvdG1hZyAtSW5mICAgIHNOYU45MiAgLT4gLTEKK2RxY3RtOTk3IGNvbXBhcmV0b3RtYWcgIDA4OCAgICBzTmFOODEgIC0+IC0xCitkcWN0bTk5OCBjb21wYXJldG90bWFnICBJbmYgICAgc05hTjkwICAtPiAtMQorZHFjdG05OTkgY29tcGFyZXRvdG1hZyAgTmFOICAgLXNOYU44OSAgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitkcWN0bTExMTAgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgIDAgICAgICAgIC0+ICAtMQorZHFjdG0xMTExIGNvbXBhcmV0b3RtYWcgICAwRS02MTQzIC0wICAgICAgICAtPiAgLTEKK2RxY3RtMTExMiBjb21wYXJldG90bWFnICAtMEUtNjE0MyAgMCAgICAgICAgLT4gIC0xCitkcWN0bTExMTMgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgLTAgICAgICAgIC0+ICAtMQorZHFjdG0xMTE0IGNvbXBhcmV0b3RtYWcgICAwRS02MTQzICAwRSs2MTQ0ICAgLT4gIC0xCitkcWN0bTExMTUgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgLTBFKzYxNDQgICAtPiAgLTEKK2RxY3RtMTExNiBjb21wYXJldG90bWFnICAtMEUtNjE0MyAgMEUrNjE0NCAgIC0+ICAtMQorZHFjdG0xMTE3IGNvbXBhcmV0b3RtYWcgIC0wRS02MTQzIC0wRSs2MTQ0ICAgLT4gIC0xCitkcWN0bTExMTggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUrNjE0NCAgIC0+ICAtMQorZHFjdG0xMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzYxNDQgICAtPiAgLTEKK2RxY3RtMTEyMCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRSs2MTQ0ICAgLT4gIC0xCitkcWN0bTExMjEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUrNjE0NCAgIC0+ICAtMQorCitkcWN0bTExMzAgY29tcGFyZXRvdG1hZyAgIDBFKzYxNDQgIDAgICAgICAgIC0+ICAgMQorZHFjdG0xMTMxIGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0IC0wICAgICAgICAtPiAgIDEKK2RxY3RtMTEzMiBjb21wYXJldG90bWFnICAtMEUrNjE0NCAgMCAgICAgICAgLT4gICAxCitkcWN0bTExMzMgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgLTAgICAgICAgIC0+ICAgMQorZHFjdG0xMTM0IGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0ICAwRS02MTQzICAgLT4gICAxCitkcWN0bTExMzUgY29tcGFyZXRvdG1hZyAgIDBFKzYxNDQgLTBFLTYxNDMgICAtPiAgIDEKK2RxY3RtMTEzNiBjb21wYXJldG90bWFnICAtMEUrNjE0NCAgMEUtNjE0MyAgIC0+ICAgMQorZHFjdG0xMTM3IGNvbXBhcmV0b3RtYWcgIC0wRSs2MTQ0IC0wRS02MTQzICAgLT4gICAxCitkcWN0bTExMzggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUtNjE0MyAgIC0+ICAgMQorZHFjdG0xMTM5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFLTYxNDMgICAtPiAgIDEKK2RxY3RtMTE0MCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRS02MTQzICAgLT4gICAxCitkcWN0bTExNDEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUtNjE0MyAgIC0+ICAgMQorCistLSBOdWxsIHRlc3RzCitkcWN0bTk5OTAgY29tcGFyZXRvdG1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxY3RtOTk5MSBjb21wYXJldG90bWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weS5kZWNUZXN0CmluZGV4IDcyNTRkNjguLjBjNjI0MzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHkuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5LmRlY1Rlc3QKQEAgLTEsODggKzEsODggQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQ29weS5kZWNUZXN0IC0tIHF1aWV0IGRlY1F1YWQgY29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1kcWNweTAwMSBjb3B5ICAgICAgICs3LjUwICAtPiA3LjUwDQotDQotLS0gSW5maW5pdGllcw0KLWRxY3B5MDExIGNvcHkgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQotZHFjcHkwMTIgY29weSAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZHFjcHkwMjEgY29weSAgICAgICAgIE5hTiAgLT4gTmFODQotZHFjcHkwMjIgY29weSAgICAgICAgLU5hTiAgLT4gLU5hTg0KLWRxY3B5MDIzIGNvcHkgICAgICAgIHNOYU4gIC0+IHNOYU4NCi1kcWNweTAyNCBjb3B5ICAgICAgIC1zTmFOICAtPiAtc05hTg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1kcWNweTAzMSBjb3B5ICAgICAgIE5hTjEwICAtPiBOYU4xMA0KLWRxY3B5MDMyIGNvcHkgICAgICAtTmFOMTAgIC0+IC1OYU4xMA0KLWRxY3B5MDMzIGNvcHkgICAgICBzTmFOMTAgIC0+IHNOYU4xMA0KLWRxY3B5MDM0IGNvcHkgICAgIC1zTmFOMTAgIC0+IC1zTmFOMTANCi1kcWNweTAzNSBjb3B5ICAgICAgIE5hTjcgICAtPiBOYU43DQotZHFjcHkwMzYgY29weSAgICAgIC1OYU43ICAgLT4gLU5hTjcNCi1kcWNweTAzNyBjb3B5ICAgICAgc05hTjEwMSAtPiBzTmFOMTAxDQotZHFjcHkwMzggY29weSAgICAgLXNOYU4xMDEgLT4gLXNOYU4xMDENCi0NCi0tLSBmaW5pdGVzDQotZHFjcHkxMDEgY29weSAgICAgICAgICA3ICAgLT4gNw0KLWRxY3B5MTAyIGNvcHkgICAgICAgICAtNyAgIC0+IC03DQotZHFjcHkxMDMgY29weSAgICAgICAgIDc1ICAgLT4gNzUNCi1kcWNweTEwNCBjb3B5ICAgICAgICAtNzUgICAtPiAtNzUNCi1kcWNweTEwNSBjb3B5ICAgICAgIDcuNTAgICAtPiA3LjUwDQotZHFjcHkxMDYgY29weSAgICAgIC03LjUwICAgLT4gLTcuNTANCi1kcWNweTEwNyBjb3B5ICAgICAgIDcuNTAwICAtPiA3LjUwMA0KLWRxY3B5MTA4IGNvcHkgICAgICAtNy41MDAgIC0+IC03LjUwMA0KLQ0KLS0tIHplcm9zDQotZHFjcHkxMTEgY29weSAgICAgICAgICAwICAgLT4gMA0KLWRxY3B5MTEyIGNvcHkgICAgICAgICAtMCAgIC0+IC0wDQotZHFjcHkxMTMgY29weSAgICAgICAwRSs0ICAgLT4gMEUrNA0KLWRxY3B5MTE0IGNvcHkgICAgICAtMEUrNCAgIC0+IC0wRSs0DQotZHFjcHkxMTUgY29weSAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQotZHFjcHkxMTYgY29weSAgICAtMC4wMDAwICAgLT4gLTAuMDAwMA0KLWRxY3B5MTE3IGNvcHkgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KLWRxY3B5MTE4IGNvcHkgICAgIC0wRS0xNDEgIC0+IC0wRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWRxY3B5MTIxIGNvcHkgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFjcHkxMjIgY29weSAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcWNweTEyMyBjb3B5ICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KLWRxY3B5MTI0IGNvcHkgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kcWNweTEzMSBjb3B5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxY3B5MTMyIGNvcHkgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMNCi1kcWNweTEzMyBjb3B5ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxY3B5MTM0IGNvcHkgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYNCi0NCi1kcWNweTEzNSBjb3B5ICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2DQotZHFjcHkxMzYgY29weSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcWNweTEzNyBjb3B5ICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzDQotZHFjcHkxMzggY29weSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29weS5kZWNUZXN0IC0tIHF1aWV0IGRlY1F1YWQgY29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFjcHkwMDEgY29weSAgICAgICArNy41MCAgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkcWNweTAxMSBjb3B5ICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorZHFjcHkwMTIgY29weSAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZHFjcHkwMjEgY29weSAgICAgICAgIE5hTiAgLT4gTmFOCitkcWNweTAyMiBjb3B5ICAgICAgICAtTmFOICAtPiAtTmFOCitkcWNweTAyMyBjb3B5ICAgICAgICBzTmFOICAtPiBzTmFOCitkcWNweTAyNCBjb3B5ICAgICAgIC1zTmFOICAtPiAtc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkcWNweTAzMSBjb3B5ICAgICAgIE5hTjEwICAtPiBOYU4xMAorZHFjcHkwMzIgY29weSAgICAgIC1OYU4xMCAgLT4gLU5hTjEwCitkcWNweTAzMyBjb3B5ICAgICAgc05hTjEwICAtPiBzTmFOMTAKK2RxY3B5MDM0IGNvcHkgICAgIC1zTmFOMTAgIC0+IC1zTmFOMTAKK2RxY3B5MDM1IGNvcHkgICAgICAgTmFONyAgIC0+IE5hTjcKK2RxY3B5MDM2IGNvcHkgICAgICAtTmFONyAgIC0+IC1OYU43CitkcWNweTAzNyBjb3B5ICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCitkcWNweTAzOCBjb3B5ICAgICAtc05hTjEwMSAtPiAtc05hTjEwMQorCistLSBmaW5pdGVzCitkcWNweTEwMSBjb3B5ICAgICAgICAgIDcgICAtPiA3CitkcWNweTEwMiBjb3B5ICAgICAgICAgLTcgICAtPiAtNworZHFjcHkxMDMgY29weSAgICAgICAgIDc1ICAgLT4gNzUKK2RxY3B5MTA0IGNvcHkgICAgICAgIC03NSAgIC0+IC03NQorZHFjcHkxMDUgY29weSAgICAgICA3LjUwICAgLT4gNy41MAorZHFjcHkxMDYgY29weSAgICAgIC03LjUwICAgLT4gLTcuNTAKK2RxY3B5MTA3IGNvcHkgICAgICAgNy41MDAgIC0+IDcuNTAwCitkcWNweTEwOCBjb3B5ICAgICAgLTcuNTAwICAtPiAtNy41MDAKKworLS0gemVyb3MKK2RxY3B5MTExIGNvcHkgICAgICAgICAgMCAgIC0+IDAKK2RxY3B5MTEyIGNvcHkgICAgICAgICAtMCAgIC0+IC0wCitkcWNweTExMyBjb3B5ICAgICAgIDBFKzQgICAtPiAwRSs0CitkcWNweTExNCBjb3B5ICAgICAgLTBFKzQgICAtPiAtMEUrNAorZHFjcHkxMTUgY29weSAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkcWNweTExNiBjb3B5ICAgIC0wLjAwMDAgICAtPiAtMC4wMDAwCitkcWNweTExNyBjb3B5ICAgICAgMEUtMTQxICAtPiAwRS0xNDEKK2RxY3B5MTE4IGNvcHkgICAgIC0wRS0xNDEgIC0+IC0wRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxY3B5MTIxIGNvcHkgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNweTEyMiBjb3B5ICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcHkxMjMgY29weSAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKK2RxY3B5MTI0IGNvcHkgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcWNweTEzMSBjb3B5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFjcHkxMzIgY29weSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFjcHkxMzMgY29weSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxY3B5MTM0IGNvcHkgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYKKworZHFjcHkxMzUgY29weSAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NgorZHFjcHkxMzYgY29weSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxY3B5MTM3IGNvcHkgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMKK2RxY3B5MTM4IGNvcHkgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5QWJzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5QWJzLmRlY1Rlc3QKaW5kZXggYmRlYzAyMC4uMTZiY2I0ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weUFicy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlBYnMuZGVjVGVzdApAQCAtMSw4OCArMSw4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFDb3B5QWJzLmRlY1Rlc3QgLS0gcXVpZXQgZGVjUXVhZCBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWRxY3BhMDAxIGNvcHlhYnMgICAgICAgKzcuNTAgIC0+IDcuNTANCi0NCi0tLSBJbmZpbml0aWVzDQotZHFjcGEwMTEgY29weWFicyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkNCi1kcWNwYTAxMiBjb3B5YWJzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWRxY3BhMDIxIGNvcHlhYnMgICAgICAgICBOYU4gIC0+IE5hTg0KLWRxY3BhMDIyIGNvcHlhYnMgICAgICAgIC1OYU4gIC0+IE5hTg0KLWRxY3BhMDIzIGNvcHlhYnMgICAgICAgIHNOYU4gIC0+IHNOYU4NCi1kcWNwYTAyNCBjb3B5YWJzICAgICAgIC1zTmFOICAtPiBzTmFODQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWRxY3BhMDMxIGNvcHlhYnMgICAgICAgTmFOMTAgIC0+IE5hTjEwDQotZHFjcGEwMzIgY29weWFicyAgICAgIC1OYU4xNSAgLT4gTmFOMTUNCi1kcWNwYTAzMyBjb3B5YWJzICAgICAgc05hTjE1ICAtPiBzTmFOMTUNCi1kcWNwYTAzNCBjb3B5YWJzICAgICAtc05hTjEwICAtPiBzTmFOMTANCi1kcWNwYTAzNSBjb3B5YWJzICAgICAgIE5hTjcgICAtPiBOYU43DQotZHFjcGEwMzYgY29weWFicyAgICAgIC1OYU43ICAgLT4gTmFONw0KLWRxY3BhMDM3IGNvcHlhYnMgICAgICBzTmFOMTAxIC0+IHNOYU4xMDENCi1kcWNwYTAzOCBjb3B5YWJzICAgICAtc05hTjEwMSAtPiBzTmFOMTAxDQotDQotLS0gZmluaXRlcw0KLWRxY3BhMTAxIGNvcHlhYnMgICAgICAgICAgNyAgIC0+IDcNCi1kcWNwYTEwMiBjb3B5YWJzICAgICAgICAgLTcgICAtPiA3DQotZHFjcGExMDMgY29weWFicyAgICAgICAgIDc1ICAgLT4gNzUNCi1kcWNwYTEwNCBjb3B5YWJzICAgICAgICAtNzUgICAtPiA3NQ0KLWRxY3BhMTA1IGNvcHlhYnMgICAgICAgNy4xMCAgIC0+IDcuMTANCi1kcWNwYTEwNiBjb3B5YWJzICAgICAgLTcuMTAgICAtPiA3LjEwDQotZHFjcGExMDcgY29weWFicyAgICAgICA3LjUwMCAgLT4gNy41MDANCi1kcWNwYTEwOCBjb3B5YWJzICAgICAgLTcuNTAwICAtPiA3LjUwMA0KLQ0KLS0tIHplcm9zDQotZHFjcGExMTEgY29weWFicyAgICAgICAgICAwICAgLT4gMA0KLWRxY3BhMTEyIGNvcHlhYnMgICAgICAgICAtMCAgIC0+IDANCi1kcWNwYTExMyBjb3B5YWJzICAgICAgIDBFKzYgICAtPiAwRSs2DQotZHFjcGExMTQgY29weWFicyAgICAgIC0wRSs2ICAgLT4gMEUrNg0KLWRxY3BhMTE1IGNvcHlhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMA0KLWRxY3BhMTE2IGNvcHlhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KLWRxY3BhMTE3IGNvcHlhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KLWRxY3BhMTE4IGNvcHlhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZHFjcGExMjEgY29weWFicyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcWNwYTEyMiBjb3B5YWJzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KLWRxY3BhMTIzIGNvcHlhYnMgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQotZHFjcGExMjQgY29weWFicyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRxY3BhMTMxIGNvcHlhYnMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFjcGExMzIgY29weWFicyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0Mw0KLWRxY3BhMTMzIGNvcHlhYnMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFjcGExMzQgY29weWFicyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3Ng0KLQ0KLWRxY3BhMTM1IGNvcHlhYnMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYNCi1kcWNwYTEzNiBjb3B5YWJzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxY3BhMTM3IGNvcHlhYnMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMNCi1kcWNwYTEzOCBjb3B5YWJzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb3B5QWJzLmRlY1Rlc3QgLS0gcXVpZXQgZGVjUXVhZCBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcWNwYTAwMSBjb3B5YWJzICAgICAgICs3LjUwICAtPiA3LjUwCisKKy0tIEluZmluaXRpZXMKK2RxY3BhMDExIGNvcHlhYnMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5CitkcWNwYTAxMiBjb3B5YWJzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RxY3BhMDIxIGNvcHlhYnMgICAgICAgICBOYU4gIC0+IE5hTgorZHFjcGEwMjIgY29weWFicyAgICAgICAgLU5hTiAgLT4gTmFOCitkcWNwYTAyMyBjb3B5YWJzICAgICAgICBzTmFOICAtPiBzTmFOCitkcWNwYTAyNCBjb3B5YWJzICAgICAgIC1zTmFOICAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RxY3BhMDMxIGNvcHlhYnMgICAgICAgTmFOMTAgIC0+IE5hTjEwCitkcWNwYTAzMiBjb3B5YWJzICAgICAgLU5hTjE1ICAtPiBOYU4xNQorZHFjcGEwMzMgY29weWFicyAgICAgIHNOYU4xNSAgLT4gc05hTjE1CitkcWNwYTAzNCBjb3B5YWJzICAgICAtc05hTjEwICAtPiBzTmFOMTAKK2RxY3BhMDM1IGNvcHlhYnMgICAgICAgTmFONyAgIC0+IE5hTjcKK2RxY3BhMDM2IGNvcHlhYnMgICAgICAtTmFONyAgIC0+IE5hTjcKK2RxY3BhMDM3IGNvcHlhYnMgICAgICBzTmFOMTAxIC0+IHNOYU4xMDEKK2RxY3BhMDM4IGNvcHlhYnMgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworZHFjcGExMDEgY29weWFicyAgICAgICAgICA3ICAgLT4gNworZHFjcGExMDIgY29weWFicyAgICAgICAgIC03ICAgLT4gNworZHFjcGExMDMgY29weWFicyAgICAgICAgIDc1ICAgLT4gNzUKK2RxY3BhMTA0IGNvcHlhYnMgICAgICAgIC03NSAgIC0+IDc1CitkcWNwYTEwNSBjb3B5YWJzICAgICAgIDcuMTAgICAtPiA3LjEwCitkcWNwYTEwNiBjb3B5YWJzICAgICAgLTcuMTAgICAtPiA3LjEwCitkcWNwYTEwNyBjb3B5YWJzICAgICAgIDcuNTAwICAtPiA3LjUwMAorZHFjcGExMDggY29weWFicyAgICAgIC03LjUwMCAgLT4gNy41MDAKKworLS0gemVyb3MKK2RxY3BhMTExIGNvcHlhYnMgICAgICAgICAgMCAgIC0+IDAKK2RxY3BhMTEyIGNvcHlhYnMgICAgICAgICAtMCAgIC0+IDAKK2RxY3BhMTEzIGNvcHlhYnMgICAgICAgMEUrNiAgIC0+IDBFKzYKK2RxY3BhMTE0IGNvcHlhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYKK2RxY3BhMTE1IGNvcHlhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZHFjcGExMTYgY29weWFicyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkcWNwYTExNyBjb3B5YWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDEKK2RxY3BhMTE4IGNvcHlhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFjcGExMjEgY29weWFicyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BhMTIyIGNvcHlhYnMgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNwYTEyMyBjb3B5YWJzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorZHFjcGExMjQgY29weWFicyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxY3BhMTMxIGNvcHlhYnMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWNwYTEzMiBjb3B5YWJzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCitkcWNwYTEzMyBjb3B5YWJzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcGExMzQgY29weWFicyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgorCitkcWNwYTEzNSBjb3B5YWJzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2CitkcWNwYTEzNiBjb3B5YWJzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcGExMzcgY29weWFicyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFjcGExMzggY29weWFicyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlOZWdhdGUuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlOZWdhdGUuZGVjVGVzdAppbmRleCBlYTAwODU1Li42MjUzZjVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5TmVnYXRlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weU5lZ2F0ZS5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcUNvcHlOZWdhdGUuZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgYW5kIG5lZ2F0ZSAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZHFjcG4wMDEgY29weW5lZ2F0ZSAgICAgICArNy41MCAgLT4gLTcuNTANCi0NCi0tLSBJbmZpbml0aWVzDQotZHFjcG4wMTEgY29weW5lZ2F0ZSAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5DQotZHFjcG4wMTIgY29weW5lZ2F0ZSAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kcWNwbjAyMSBjb3B5bmVnYXRlICAgICAgICAgTmFOICAtPiAtTmFODQotZHFjcG4wMjIgY29weW5lZ2F0ZSAgICAgICAgLU5hTiAgLT4gTmFODQotZHFjcG4wMjMgY29weW5lZ2F0ZSAgICAgICAgc05hTiAgLT4gLXNOYU4NCi1kcWNwbjAyNCBjb3B5bmVnYXRlICAgICAgIC1zTmFOICAtPiBzTmFODQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWRxY3BuMDMxIGNvcHluZWdhdGUgICAgICAgTmFOMTMgIC0+IC1OYU4xMw0KLWRxY3BuMDMyIGNvcHluZWdhdGUgICAgICAtTmFOMTMgIC0+IE5hTjEzDQotZHFjcG4wMzMgY29weW5lZ2F0ZSAgICAgIHNOYU4xMyAgLT4gLXNOYU4xMw0KLWRxY3BuMDM0IGNvcHluZWdhdGUgICAgIC1zTmFOMTMgIC0+IHNOYU4xMw0KLWRxY3BuMDM1IGNvcHluZWdhdGUgICAgICAgTmFONzAgIC0+IC1OYU43MA0KLWRxY3BuMDM2IGNvcHluZWdhdGUgICAgICAtTmFONzAgIC0+IE5hTjcwDQotZHFjcG4wMzcgY29weW5lZ2F0ZSAgICAgIHNOYU4xMDEgLT4gLXNOYU4xMDENCi1kcWNwbjAzOCBjb3B5bmVnYXRlICAgICAtc05hTjEwMSAtPiBzTmFOMTAxDQotDQotLS0gZmluaXRlcw0KLWRxY3BuMTAxIGNvcHluZWdhdGUgICAgICAgICAgNyAgIC0+IC03DQotZHFjcG4xMDIgY29weW5lZ2F0ZSAgICAgICAgIC03ICAgLT4gNw0KLWRxY3BuMTAzIGNvcHluZWdhdGUgICAgICAgICA3NSAgIC0+IC03NQ0KLWRxY3BuMTA0IGNvcHluZWdhdGUgICAgICAgIC03NSAgIC0+IDc1DQotZHFjcG4xMDUgY29weW5lZ2F0ZSAgICAgICA3LjUwICAgLT4gLTcuNTANCi1kcWNwbjEwNiBjb3B5bmVnYXRlICAgICAgLTcuNTAgICAtPiA3LjUwDQotZHFjcG4xMDcgY29weW5lZ2F0ZSAgICAgICA3LjUwMCAgLT4gLTcuNTAwDQotZHFjcG4xMDggY29weW5lZ2F0ZSAgICAgIC03LjUwMCAgLT4gNy41MDANCi0NCi0tLSB6ZXJvcw0KLWRxY3BuMTExIGNvcHluZWdhdGUgICAgICAgICAgMCAgIC0+IC0wDQotZHFjcG4xMTIgY29weW5lZ2F0ZSAgICAgICAgIC0wICAgLT4gMA0KLWRxY3BuMTEzIGNvcHluZWdhdGUgICAgICAgMEUrNCAgIC0+IC0wRSs0DQotZHFjcG4xMTQgY29weW5lZ2F0ZSAgICAgIC0wRSs0ICAgLT4gMEUrNA0KLWRxY3BuMTE1IGNvcHluZWdhdGUgICAgIDAuMDAwMCAgIC0+IC0wLjAwMDANCi1kcWNwbjExNiBjb3B5bmVnYXRlICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCi1kcWNwbjExNyBjb3B5bmVnYXRlICAgICAgMEUtMTQxICAtPiAtMEUtMTQxDQotZHFjcG4xMTggY29weW5lZ2F0ZSAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kcWNwbjEyMSBjb3B5bmVnYXRlICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KLWRxY3BuMTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFjcG4xMjMgY29weW5lZ2F0ZSAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi1kcWNwbjEyNCBjb3B5bmVnYXRlICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZHFjcG4xMzEgY29weW5lZ2F0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcWNwbjEzMiBjb3B5bmVnYXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzDQotZHFjcG4xMzMgY29weW5lZ2F0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcWNwbjEzNCBjb3B5bmVnYXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2DQotDQotZHFjcG4xMzUgY29weW5lZ2F0ZSAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3Ng0KLWRxY3BuMTM2IGNvcHluZWdhdGUgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFjcG4xMzcgY29weW5lZ2F0ZSAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0Mw0KLWRxY3BuMTM4IGNvcHluZWdhdGUgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNvcHlOZWdhdGUuZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgYW5kIG5lZ2F0ZSAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RxY3BuMDAxIGNvcHluZWdhdGUgICAgICAgKzcuNTAgIC0+IC03LjUwCisKKy0tIEluZmluaXRpZXMKK2RxY3BuMDExIGNvcHluZWdhdGUgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQorZHFjcG4wMTIgY29weW5lZ2F0ZSAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkcWNwbjAyMSBjb3B5bmVnYXRlICAgICAgICAgTmFOICAtPiAtTmFOCitkcWNwbjAyMiBjb3B5bmVnYXRlICAgICAgICAtTmFOICAtPiBOYU4KK2RxY3BuMDIzIGNvcHluZWdhdGUgICAgICAgIHNOYU4gIC0+IC1zTmFOCitkcWNwbjAyNCBjb3B5bmVnYXRlICAgICAgIC1zTmFOICAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RxY3BuMDMxIGNvcHluZWdhdGUgICAgICAgTmFOMTMgIC0+IC1OYU4xMworZHFjcG4wMzIgY29weW5lZ2F0ZSAgICAgIC1OYU4xMyAgLT4gTmFOMTMKK2RxY3BuMDMzIGNvcHluZWdhdGUgICAgICBzTmFOMTMgIC0+IC1zTmFOMTMKK2RxY3BuMDM0IGNvcHluZWdhdGUgICAgIC1zTmFOMTMgIC0+IHNOYU4xMworZHFjcG4wMzUgY29weW5lZ2F0ZSAgICAgICBOYU43MCAgLT4gLU5hTjcwCitkcWNwbjAzNiBjb3B5bmVnYXRlICAgICAgLU5hTjcwICAtPiBOYU43MAorZHFjcG4wMzcgY29weW5lZ2F0ZSAgICAgIHNOYU4xMDEgLT4gLXNOYU4xMDEKK2RxY3BuMDM4IGNvcHluZWdhdGUgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworZHFjcG4xMDEgY29weW5lZ2F0ZSAgICAgICAgICA3ICAgLT4gLTcKK2RxY3BuMTAyIGNvcHluZWdhdGUgICAgICAgICAtNyAgIC0+IDcKK2RxY3BuMTAzIGNvcHluZWdhdGUgICAgICAgICA3NSAgIC0+IC03NQorZHFjcG4xMDQgY29weW5lZ2F0ZSAgICAgICAgLTc1ICAgLT4gNzUKK2RxY3BuMTA1IGNvcHluZWdhdGUgICAgICAgNy41MCAgIC0+IC03LjUwCitkcWNwbjEwNiBjb3B5bmVnYXRlICAgICAgLTcuNTAgICAtPiA3LjUwCitkcWNwbjEwNyBjb3B5bmVnYXRlICAgICAgIDcuNTAwICAtPiAtNy41MDAKK2RxY3BuMTA4IGNvcHluZWdhdGUgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitkcWNwbjExMSBjb3B5bmVnYXRlICAgICAgICAgIDAgICAtPiAtMAorZHFjcG4xMTIgY29weW5lZ2F0ZSAgICAgICAgIC0wICAgLT4gMAorZHFjcG4xMTMgY29weW5lZ2F0ZSAgICAgICAwRSs0ICAgLT4gLTBFKzQKK2RxY3BuMTE0IGNvcHluZWdhdGUgICAgICAtMEUrNCAgIC0+IDBFKzQKK2RxY3BuMTE1IGNvcHluZWdhdGUgICAgIDAuMDAwMCAgIC0+IC0wLjAwMDAKK2RxY3BuMTE2IGNvcHluZWdhdGUgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZHFjcG4xMTcgY29weW5lZ2F0ZSAgICAgIDBFLTE0MSAgLT4gLTBFLTE0MQorZHFjcG4xMTggY29weW5lZ2F0ZSAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWNwbjEyMSBjb3B5bmVnYXRlICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcG4xMjIgY29weW5lZ2F0ZSAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BuMTIzIGNvcHluZWdhdGUgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcWNwbjEyNCBjb3B5bmVnYXRlICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZHFjcG4xMzEgY29weW5lZ2F0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxY3BuMTMyIGNvcHluZWdhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMKK2RxY3BuMTMzIGNvcHluZWdhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNwbjEzNCBjb3B5bmVnYXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2CisKK2RxY3BuMTM1IGNvcHluZWdhdGUgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYKK2RxY3BuMTM2IGNvcHluZWdhdGUgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNwbjEzNyBjb3B5bmVnYXRlICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCitkcWNwbjEzOCBjb3B5bmVnYXRlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weVNpZ24uZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlTaWduLmRlY1Rlc3QKaW5kZXggY2U3OTRiNy4uOTdiNWU2ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weVNpZ24uZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5U2lnbi5kZWNUZXN0CkBAIC0xLDE3NSArMSwxNzUgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQ29weVNpZ24uZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgd2l0aCBzaWduIGZyb20gcmhzICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1kcWNwczAwMSBjb3B5c2lnbiAgICAgICArNy41MCAgICAgMTEgLT4gNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1kcWNwczAxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgMTEgLT4gSW5maW5pdHkNCi1kcWNwczAxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgMTEgLT4gSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kcWNwczAyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgMTEgLT4gTmFODQotZHFjcHMwMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIDExIC0+IE5hTg0KLWRxY3BzMDIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAxMSAtPiBzTmFODQotZHFjcHMwMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIDExIC0+IHNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotZHFjcHMwMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIDExIC0+IE5hTjEwDQotZHFjcHMwMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIDExIC0+IE5hTjEwDQotZHFjcHMwMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIDExIC0+IHNOYU4xMA0KLWRxY3BzMDM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAxMSAtPiBzTmFOMTANCi1kcWNwczAzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgMTEgLT4gTmFONw0KLWRxY3BzMDM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAxMSAtPiBOYU43DQotZHFjcHMwMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIDExIC0+IHNOYU4xMDENCi1kcWNwczAzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQ0KLQ0KLS0tIGZpbml0ZXMNCi1kcWNwczEwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgMTEgLT4gNw0KLWRxY3BzMTAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAxMSAtPiA3DQotZHFjcHMxMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIDExIC0+IDc1DQotZHFjcHMxMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIDExIC0+IDc1DQotZHFjcHMxMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIDExIC0+IDcuNTANCi1kcWNwczEwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgMTEgLT4gNy41MA0KLWRxY3BzMTA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAxMSAtPiA3LjUwMA0KLWRxY3BzMTA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAxMSAtPiA3LjUwMA0KLQ0KLS0tIHplcm9zDQotZHFjcHMxMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIDExIC0+IDANCi1kcWNwczExMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgMTEgLT4gMA0KLWRxY3BzMTEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAxMSAtPiAwRSs0DQotZHFjcHMxMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIDExIC0+IDBFKzQNCi1kcWNwczExNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwDQotZHFjcHMxMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIDExIC0+IDAuMDAwMA0KLWRxY3BzMTE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAxMSAtPiAwRS0xNDENCi1kcWNwczExOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgMTEgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kcWNwczEyMSBjb3B5c2lnbiAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgOCAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcWNwczEyMiBjb3B5c2lnbiAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgOCAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcWNwczEyMyBjb3B5c2lnbiAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgOCAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi1kcWNwczEyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgOCAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRxY3BzMTMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxY3BzMTMyIGNvcHlzaWduICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC0+ICAxRS02MTQzDQotZHFjcHMxMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIDggLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFjcHMxMzQgY29weXNpZ24gIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNzYNCi0NCi1kcWNwczEzNSBjb3B5c2lnbiAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNzYNCi1kcWNwczEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIDggLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFjcHMxMzcgY29weXNpZ24gIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC0+ICAxRS02MTQzDQotZHFjcHMxMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLQ0KLS0tIHJlcGVhdCB3aXRoIG5lZ2F0aXZlIFJIUw0KLQ0KLS0tIEluZmluaXRpZXMNCi1kcWNwczIxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgLTM0IC0+IC1JbmZpbml0eQ0KLWRxY3BzMjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZHFjcHMyMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIC0zNCAtPiAtTmFODQotZHFjcHMyMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIC0zNCAtPiAtTmFODQotZHFjcHMyMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIC0zNCAtPiAtc05hTg0KLWRxY3BzMjI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAtMzQgLT4gLXNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotZHFjcHMyMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIC0zNCAtPiAtTmFOMTANCi1kcWNwczIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMA0KLWRxY3BzMjMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMA0KLWRxY3BzMjM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMA0KLWRxY3BzMjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcNCi1kcWNwczIzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgLTM0IC0+IC1OYU43DQotZHFjcHMyMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQ0KLWRxY3BzMjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDENCi0NCi0tLSBmaW5pdGVzDQotZHFjcHMzMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIC0zNCAtPiAtNw0KLWRxY3BzMzAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAtMzQgLT4gLTcNCi1kcWNwczMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQ0KLWRxY3BzMzA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAtMzQgLT4gLTc1DQotZHFjcHMzMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIC0zNCAtPiAtNy41MA0KLWRxY3BzMzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTANCi1kcWNwczMwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgLTM0IC0+IC03LjUwMA0KLWRxY3BzMzA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAtMzQgLT4gLTcuNTAwDQotDQotLS0gemVyb3MNCi1kcWNwczMxMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgLTM0IC0+IC0wDQotZHFjcHMzMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIC0zNCAtPiAtMA0KLWRxY3BzMzEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAtMzQgLT4gLTBFKzQNCi1kcWNwczMxNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgLTM0IC0+IC0wRSs0DQotZHFjcHMzMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwDQotZHFjcHMzMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwDQotZHFjcHMzMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxDQotZHFjcHMzMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kcWNwczMyMSBjb3B5c2lnbiAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgLTkgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcWNwczMyMiBjb3B5c2lnbiAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgLTkgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcWNwczMyMyBjb3B5c2lnbiAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgLTkgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi1kcWNwczMyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgLTkgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRxY3BzMzMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFjcHMzMzIgY29weXNpZ24gIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMUUtNjE0Mw0KLWRxY3BzMzMzIGNvcHlzaWduICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFjcHMzMzQgY29weXNpZ24gIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMUUtNjE3Ng0KLQ0KLWRxY3BzMzM1IGNvcHlzaWduICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMgLT4gLTFFLTYxNzYNCi1kcWNwczMzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0zIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxY3BzMzM3IGNvcHlzaWduICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMgLT4gLTFFLTYxNDMNCi1kcWNwczMzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0zIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLQ0KLS0tIE90aGVyIGtpbmRzIG9mIFJIUw0KLWRxY3BzNDAxIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMzQgLT4gLTcwMQ0KLWRxY3BzNDAyIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMzQgLT4gLTcyMA0KLWRxY3BzNDAzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMCAgLT4gLTcwMQ0KLWRxY3BzNDA0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMCAgLT4gLTcyMA0KLWRxY3BzNDA1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMCAgLT4gIDcwMQ0KLWRxY3BzNDA2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMCAgLT4gIDcyMA0KLWRxY3BzNDA3IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMzQgLT4gIDcwMQ0KLWRxY3BzNDA4IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMzQgLT4gIDcyMA0KLQ0KLWRxY3BzNDEzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtSW5mICAtPiAtNzAxDQotZHFjcHM0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjANCi1kcWNwczQxNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK0luZiAgLT4gIDcwMQ0KLWRxY3BzNDE2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArSW5mICAtPiAgNzIwDQotDQotZHFjcHM0MjAgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1OYU4gIC0+IC03MDENCi1kcWNwczQyMSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLU5hTiAgLT4gLTcyMA0KLWRxY3BzNDIyIGNvcHlzaWduICAgICAgICAgIDcwMSAgICArTmFOICAtPiAgNzAxDQotZHFjcHM0MjMgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU4gIC0+ICA3MjANCi1kcWNwczQyNSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTjggLT4gIDcyMA0KLQ0KLWRxY3BzNDI2IGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtc05hTiAgLT4gLTcwMQ0KLWRxY3BzNDI3IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtc05hTiAgLT4gLTcyMA0KLWRxY3BzNDI4IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArc05hTiAgLT4gIDcwMQ0KLWRxY3BzNDI5IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTiAgLT4gIDcyMA0KLWRxY3BzNDMwIGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTjMgLT4gIDcyMA0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb3B5U2lnbi5kZWNUZXN0IC0tIHF1aWV0IGRlY1F1YWQgY29weSB3aXRoIHNpZ24gZnJvbSByaHMgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcWNwczAwMSBjb3B5c2lnbiAgICAgICArNy41MCAgICAgMTEgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkcWNwczAxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgMTEgLT4gSW5maW5pdHkKK2RxY3BzMDEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAxMSAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RxY3BzMDIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAxMSAtPiBOYU4KK2RxY3BzMDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4KK2RxY3BzMDIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAxMSAtPiBzTmFOCitkcWNwczAyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgMTEgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkcWNwczAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTAKK2RxY3BzMDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMAorZHFjcHMwMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIDExIC0+IHNOYU4xMAorZHFjcHMwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMAorZHFjcHMwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcKK2RxY3BzMDM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAxMSAtPiBOYU43CitkcWNwczAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQorZHFjcHMwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworZHFjcHMxMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIDExIC0+IDcKK2RxY3BzMTAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAxMSAtPiA3CitkcWNwczEwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgMTEgLT4gNzUKK2RxY3BzMTA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAxMSAtPiA3NQorZHFjcHMxMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIDExIC0+IDcuNTAKK2RxY3BzMTA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAxMSAtPiA3LjUwCitkcWNwczEwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgMTEgLT4gNy41MDAKK2RxY3BzMTA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAxMSAtPiA3LjUwMAorCistLSB6ZXJvcworZHFjcHMxMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIDExIC0+IDAKK2RxY3BzMTEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAxMSAtPiAwCitkcWNwczExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNAorZHFjcHMxMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIDExIC0+IDBFKzQKK2RxY3BzMTE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2RxY3BzMTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2RxY3BzMTE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKK2RxY3BzMTE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxY3BzMTIxIGNvcHlzaWduICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiA4ICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcHMxMjIgY29weXNpZ24gIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyIDggIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNwczEyMyBjb3B5c2lnbiAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgOCAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKK2RxY3BzMTI0IGNvcHlzaWduICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSA4ICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZHFjcHMxMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDggLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWNwczEzMiBjb3B5c2lnbiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE0MworZHFjcHMxMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIDggLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNwczEzNCBjb3B5c2lnbiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE3NgorCitkcWNwczEzNSBjb3B5c2lnbiAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNzYKK2RxY3BzMTM2IGNvcHlzaWduICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgOCAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxY3BzMTM3IGNvcHlzaWduICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE0MworZHFjcHMxMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorCistLSByZXBlYXQgd2l0aCBuZWdhdGl2ZSBSSFMKKworLS0gSW5maW5pdGllcworZHFjcHMyMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIC0zNCAtPiAtSW5maW5pdHkKK2RxY3BzMjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZHFjcHMyMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIC0zNCAtPiAtTmFOCitkcWNwczIyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgLTM0IC0+IC1OYU4KK2RxY3BzMjIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAtMzQgLT4gLXNOYU4KK2RxY3BzMjI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAtMzQgLT4gLXNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZHFjcHMyMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIC0zNCAtPiAtTmFOMTAKK2RxY3BzMjMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAtMzQgLT4gLU5hTjEwCitkcWNwczIzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKK2RxY3BzMjM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMAorZHFjcHMyMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIC0zNCAtPiAtTmFONworZHFjcHMyMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIC0zNCAtPiAtTmFONworZHFjcHMyMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQorZHFjcHMyMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQorCistLSBmaW5pdGVzCitkcWNwczMwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgLTM0IC0+IC03CitkcWNwczMwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgLTM0IC0+IC03CitkcWNwczMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQorZHFjcHMzMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIC0zNCAtPiAtNzUKK2RxY3BzMzA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAtMzQgLT4gLTcuNTAKK2RxY3BzMzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTAKK2RxY3BzMzA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAtMzQgLT4gLTcuNTAwCitkcWNwczMwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgLTM0IC0+IC03LjUwMAorCistLSB6ZXJvcworZHFjcHMzMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIC0zNCAtPiAtMAorZHFjcHMzMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIC0zNCAtPiAtMAorZHFjcHMzMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIC0zNCAtPiAtMEUrNAorZHFjcHMzMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIC0zNCAtPiAtMEUrNAorZHFjcHMzMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCitkcWNwczMxNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDAKK2RxY3BzMzE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQorZHFjcHMzMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWNwczMyMSBjb3B5c2lnbiAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgLTkgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BzMzIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAtOSAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcHMzMjMgY29weXNpZ24gICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIC05IC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcWNwczMyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgLTkgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxY3BzMzMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWNwczMzMiBjb3B5c2lnbiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0xRS02MTQzCitkcWNwczMzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcHMzMzQgY29weXNpZ24gIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMUUtNjE3NgorCitkcWNwczMzNSBjb3B5c2lnbiAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zIC0+IC0xRS02MTc2CitkcWNwczMzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0zIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcHMzMzcgY29weXNpZ24gIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMyAtPiAtMUUtNjE0MworZHFjcHMzMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0gT3RoZXIga2luZHMgb2YgUkhTCitkcWNwczQwMSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTM0IC0+IC03MDEKK2RxY3BzNDAyIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMzQgLT4gLTcyMAorZHFjcHM0MDMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0wICAtPiAtNzAxCitkcWNwczQwNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTAgIC0+IC03MjAKK2RxY3BzNDA1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMCAgLT4gIDcwMQorZHFjcHM0MDYgY29weXNpZ24gICAgICAgICAtNzIwICAgICswICAtPiAgNzIwCitkcWNwczQwNyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzM0IC0+ICA3MDEKK2RxY3BzNDA4IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMzQgLT4gIDcyMAorCitkcWNwczQxMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLUluZiAgLT4gLTcwMQorZHFjcHM0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjAKK2RxY3BzNDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxCitkcWNwczQxNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK0luZiAgLT4gIDcyMAorCitkcWNwczQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQorZHFjcHM0MjEgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1OYU4gIC0+IC03MjAKK2RxY3BzNDIyIGNvcHlzaWduICAgICAgICAgIDcwMSAgICArTmFOICAtPiAgNzAxCitkcWNwczQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMAorZHFjcHM0MjUgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU44IC0+ICA3MjAKKworZHFjcHM0MjYgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1zTmFOICAtPiAtNzAxCitkcWNwczQyNyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLXNOYU4gIC0+IC03MjAKK2RxY3BzNDI4IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArc05hTiAgLT4gIDcwMQorZHFjcHM0MjkgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOICAtPiAgNzIwCitkcWNwczQzMCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4zIC0+ICA3MjAKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRGl2aWRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGUuZGVjVGVzdAppbmRleCAzY2Y2MGM2Li4yYWJiOTM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGUuZGVjVGVzdApAQCAtMSw4MDggKzEsODA4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcURpdmlkZS5kZWNUZXN0IC0tIGRlY1F1YWQgZGl2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kcWRpdjAwMSBkaXZpZGUgIDEgICAgIDEgICAgLT4gIDENCi1kcWRpdjAwMiBkaXZpZGUgIDIgICAgIDEgICAgLT4gIDINCi1kcWRpdjAwMyBkaXZpZGUgIDEgICAgIDIgICAgLT4gIDAuNQ0KLWRxZGl2MDA0IGRpdmlkZSAgMiAgICAgMiAgICAtPiAgMQ0KLWRxZGl2MDA1IGRpdmlkZSAgMCAgICAgMSAgICAtPiAgMA0KLWRxZGl2MDA2IGRpdmlkZSAgMCAgICAgMiAgICAtPiAgMA0KLWRxZGl2MDA3IGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MDA4IGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MDA5IGRpdmlkZSAgMyAgICAgMyAgICAtPiAgMQ0KLQ0KLWRxZGl2MDEwIGRpdmlkZSAgMi40ICAgMSAgICAtPiAgMi40DQotZHFkaXYwMTEgZGl2aWRlICAyLjQgICAtMSAgIC0+ICAtMi40DQotZHFkaXYwMTIgZGl2aWRlICAtMi40ICAxICAgIC0+ICAtMi40DQotZHFkaXYwMTMgZGl2aWRlICAtMi40ICAtMSAgIC0+ICAyLjQNCi1kcWRpdjAxNCBkaXZpZGUgIDIuNDAgIDEgICAgLT4gIDIuNDANCi1kcWRpdjAxNSBkaXZpZGUgIDIuNDAwIDEgICAgLT4gIDIuNDAwDQotZHFkaXYwMTYgZGl2aWRlICAyLjQgICAyICAgIC0+ICAxLjINCi1kcWRpdjAxNyBkaXZpZGUgIDIuNDAwIDIgICAgLT4gIDEuMjAwDQotZHFkaXYwMTggZGl2aWRlICAyLiAgICAyICAgIC0+ICAxDQotZHFkaXYwMTkgZGl2aWRlICAyMCAgICAyMCAgIC0+ICAxDQotDQotZHFkaXYwMjAgZGl2aWRlICAxODcgICAxODcgICAgLT4gIDENCi1kcWRpdjAyMSBkaXZpZGUgIDUgICAgIDIgICAgICAtPiAgMi41DQotZHFkaXYwMjIgZGl2aWRlICA1MCAgICAyMCAgICAgLT4gIDIuNQ0KLWRxZGl2MDIzIGRpdmlkZSAgNTAwICAgMjAwICAgIC0+ICAyLjUNCi1kcWRpdjAyNCBkaXZpZGUgIDUwLjAgIDIwLjAgICAtPiAgMi41DQotZHFkaXYwMjUgZGl2aWRlICA1LjAwICAyLjAwICAgLT4gIDIuNQ0KLWRxZGl2MDI2IGRpdmlkZSAgNSAgICAgMi4wICAgIC0+ICAyLjUNCi1kcWRpdjAyNyBkaXZpZGUgIDUgICAgIDIuMDAwICAtPiAgMi41DQotZHFkaXYwMjggZGl2aWRlICA1ICAgICAwLjIwICAgLT4gIDI1DQotZHFkaXYwMjkgZGl2aWRlICA1ICAgICAwLjIwMCAgLT4gIDI1DQotZHFkaXYwMzAgZGl2aWRlICAxMCAgICAxICAgICAgLT4gIDEwDQotZHFkaXYwMzEgZGl2aWRlICAxMDAgICAxICAgICAgLT4gIDEwMA0KLWRxZGl2MDMyIGRpdmlkZSAgMTAwMCAgMSAgICAgIC0+ICAxMDAwDQotZHFkaXYwMzMgZGl2aWRlICAxMDAwICAxMDAgICAgLT4gIDEwDQotDQotZHFkaXYwMzUgZGl2aWRlICAxICAgICAyICAgICAgLT4gIDAuNQ0KLWRxZGl2MDM2IGRpdmlkZSAgMSAgICAgNCAgICAgIC0+ICAwLjI1DQotZHFkaXYwMzcgZGl2aWRlICAxICAgICA4ICAgICAgLT4gIDAuMTI1DQotZHFkaXYwMzggZGl2aWRlICAxICAgICAxNiAgICAgLT4gIDAuMDYyNQ0KLWRxZGl2MDM5IGRpdmlkZSAgMSAgICAgMzIgICAgIC0+ICAwLjAzMTI1DQotZHFkaXYwNDAgZGl2aWRlICAxICAgICA2NCAgICAgLT4gIDAuMDE1NjI1DQotZHFkaXYwNDEgZGl2aWRlICAxICAgIC0yICAgICAgLT4gIC0wLjUNCi1kcWRpdjA0MiBkaXZpZGUgIDEgICAgLTQgICAgICAtPiAgLTAuMjUNCi1kcWRpdjA0MyBkaXZpZGUgIDEgICAgLTggICAgICAtPiAgLTAuMTI1DQotZHFkaXYwNDQgZGl2aWRlICAxICAgIC0xNiAgICAgLT4gIC0wLjA2MjUNCi1kcWRpdjA0NSBkaXZpZGUgIDEgICAgLTMyICAgICAtPiAgLTAuMDMxMjUNCi1kcWRpdjA0NiBkaXZpZGUgIDEgICAgLTY0ICAgICAtPiAgLTAuMDE1NjI1DQotZHFkaXYwNDcgZGl2aWRlIC0xICAgICAyICAgICAgLT4gIC0wLjUNCi1kcWRpdjA0OCBkaXZpZGUgLTEgICAgIDQgICAgICAtPiAgLTAuMjUNCi1kcWRpdjA0OSBkaXZpZGUgLTEgICAgIDggICAgICAtPiAgLTAuMTI1DQotZHFkaXYwNTAgZGl2aWRlIC0xICAgICAxNiAgICAgLT4gIC0wLjA2MjUNCi1kcWRpdjA1MSBkaXZpZGUgLTEgICAgIDMyICAgICAtPiAgLTAuMDMxMjUNCi1kcWRpdjA1MiBkaXZpZGUgLTEgICAgIDY0ICAgICAtPiAgLTAuMDE1NjI1DQotZHFkaXYwNTMgZGl2aWRlIC0xICAgIC0yICAgICAgLT4gIDAuNQ0KLWRxZGl2MDU0IGRpdmlkZSAtMSAgICAtNCAgICAgIC0+ICAwLjI1DQotZHFkaXYwNTUgZGl2aWRlIC0xICAgIC04ICAgICAgLT4gIDAuMTI1DQotZHFkaXYwNTYgZGl2aWRlIC0xICAgIC0xNiAgICAgLT4gIDAuMDYyNQ0KLWRxZGl2MDU3IGRpdmlkZSAtMSAgICAtMzIgICAgIC0+ICAwLjAzMTI1DQotZHFkaXYwNTggZGl2aWRlIC0xICAgIC02NCAgICAgLT4gIDAuMDE1NjI1DQotDQotLS0gYmNkVGltZQ0KLWRxZGl2MDYwIGRpdmlkZSAgMSA3ICAgICAgICAgICAgICAgICAgIC0+IDAuMTQyODU3MTQyODU3MTQyODU3MTQyODU3MTQyODU3MTQyOSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjA2MSBkaXZpZGUgMS4yMzQ1Njc4ICAxLjk4NzY1NDMgICAtPiAwLjYyMTExNzk2ODA0OTA3MTcxMjMxOTM5MDc1MTE5ODUzNTkgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZHFkaXYwNjcgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFkaXYwNjggZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcWRpdjA2OSBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFkaXYwNzAgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxZGl2MDcxIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OQ0KLWRxZGl2MDcyIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5DQotZHFkaXYwNzMgZGl2aWRlICA5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OQ0KLWRxZGl2MDc0IGRpdmlkZSAgOTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OQ0KLWRxZGl2MDc1IGRpdmlkZSAgOTk5OTk5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5DQotZHFkaXYwNzYgZGl2aWRlICA5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OQ0KLWRxZGl2MDc3IGRpdmlkZSAgOTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OQ0KLWRxZGl2MDc4IGRpdmlkZSAgOTk5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5DQotZHFkaXYwNzkgZGl2aWRlICA5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OQ0KLWRxZGl2MDgwIGRpdmlkZSAgOTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OQ0KLWRxZGl2MDgxIGRpdmlkZSAgOTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5DQotZHFkaXYwODIgZGl2aWRlICA5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OQ0KLWRxZGl2MDgzIGRpdmlkZSAgOTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OQ0KLWRxZGl2MDg0IGRpdmlkZSAgOTk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5DQotZHFkaXYwODUgZGl2aWRlICA5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OQ0KLWRxZGl2MDg2IGRpdmlkZSAgOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOQ0KLQ0KLWRxZGl2MDkwIGRpdmlkZSAgMC4gICAgICAgICAgICAxICAgIC0+ICAwDQotZHFkaXYwOTEgZGl2aWRlICAuMCAgICAgICAgICAgIDEgICAgLT4gIDAuMA0KLWRxZGl2MDkyIGRpdmlkZSAgMC4wMCAgICAgICAgICAxICAgIC0+ICAwLjAwDQotZHFkaXYwOTMgZGl2aWRlICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDBFKzcNCi1kcWRpdjA5NCBkaXZpZGUgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMEUtNTQNCi0NCi1kcWRpdjA5NSBkaXZpZGUgIDEgICAgICAgICAgICAxRS04ICAtPiAgMUUrOA0KLWRxZGl2MDk2IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTkgIC0+ICAxRSs5DQotZHFkaXYwOTcgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTAgLT4gIDFFKzEwDQotZHFkaXYwOTggZGl2aWRlICAxICAgICAgICAgICAgMUUtMTEgLT4gIDFFKzExDQotZHFkaXYwOTkgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTIgLT4gIDFFKzEyDQotDQotZHFkaXYxMDAgZGl2aWRlICAxICAxICAgLT4gMQ0KLWRxZGl2MTAxIGRpdmlkZSAgMSAgMiAgIC0+IDAuNQ0KLWRxZGl2MTAyIGRpdmlkZSAgMSAgMyAgIC0+IDAuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjEwMyBkaXZpZGUgIDEgIDQgICAtPiAwLjI1DQotZHFkaXYxMDQgZGl2aWRlICAxICA1ICAgLT4gMC4yDQotZHFkaXYxMDUgZGl2aWRlICAxICA2ICAgLT4gMC4xNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTA2IGRpdmlkZSAgMSAgNyAgIC0+IDAuMTQyODU3MTQyODU3MTQyODU3MTQyODU3MTQyODU3MTQyOSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjEwNyBkaXZpZGUgIDEgIDggICAtPiAwLjEyNQ0KLWRxZGl2MTA4IGRpdmlkZSAgMSAgOSAgIC0+IDAuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjEwOSBkaXZpZGUgIDEgIDEwICAtPiAwLjENCi1kcWRpdjExMCBkaXZpZGUgIDEgIDEgICAtPiAxDQotZHFkaXYxMTEgZGl2aWRlICAyICAxICAgLT4gMg0KLWRxZGl2MTEyIGRpdmlkZSAgMyAgMSAgIC0+IDMNCi1kcWRpdjExMyBkaXZpZGUgIDQgIDEgICAtPiA0DQotZHFkaXYxMTQgZGl2aWRlICA1ICAxICAgLT4gNQ0KLWRxZGl2MTE1IGRpdmlkZSAgNiAgMSAgIC0+IDYNCi1kcWRpdjExNiBkaXZpZGUgIDcgIDEgICAtPiA3DQotZHFkaXYxMTcgZGl2aWRlICA4ICAxICAgLT4gOA0KLWRxZGl2MTE4IGRpdmlkZSAgOSAgMSAgIC0+IDkNCi1kcWRpdjExOSBkaXZpZGUgIDEwIDEgICAtPiAxMA0KLQ0KLWRxZGl2MTIwIGRpdmlkZSAgM0UrMSAwLjAwMSAgLT4gM0UrNA0KLWRxZGl2MTIxIGRpdmlkZSAgMi4yMDAgMiAgICAgLT4gMS4xMDANCi0NCi1kcWRpdjEzMCBkaXZpZGUgIDEyMzQ1ICA0Ljk5OSAgLT4gMjQ2OS40OTM4OTg3Nzk3NTU5NTExOTAyMzgwNDc2MDk1MjIgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTMxIGRpdmlkZSAgMTIzNDUgIDQuOTkgICAtPiAyNDczLjk0Nzg5NTc5MTU4MzE2NjMzMjY2NTMzMDY2MTMyMyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxMzIgZGl2aWRlICAxMjM0NSAgNC45ICAgIC0+IDI1MTkuMzg3NzU1MTAyMDQwODE2MzI2NTMwNjEyMjQ0ODk4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjEzMyBkaXZpZGUgIDEyMzQ1ICA1ICAgICAgLT4gMjQ2OQ0KLWRxZGl2MTM0IGRpdmlkZSAgMTIzNDUgIDUuMSAgICAtPiAyNDIwLjU4ODIzNTI5NDExNzY0NzA1ODgyMzUyOTQxMTc2NSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxMzUgZGl2aWRlICAxMjM0NSAgNS4wMSAgIC0+IDI0NjQuMDcxODU2Mjg3NDI1MTQ5NzAwNTk4ODAyMzk1MjEwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjEzNiBkaXZpZGUgIDEyMzQ1ICA1LjAwMSAgLT4gMjQ2OC41MDYyOTg3NDAyNTE5NDk2MTAwNzc5ODQ0MDMxMTkgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHRlc3QgcG9zc2libHkgaW1wcmVjaXNlIHJlc3VsdHMNCi1kcWRpdjIyMCBkaXZpZGUgMzkxICAgNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjIxIGRpdmlkZSAzOTEgIC01OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4MzU4NDU4OTYxNDc0MDM2ODUwOSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMjIgZGl2aWRlIC0zOTEgIDU5NyAtPiAtMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIyMyBkaXZpZGUgLTM5MSAtNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdw0KLWRxZGl2MjcwIGRpdmlkZSAxIDFlNjE0NCAgICAgICAgICAgICAgICAgIC0+IDFFLTYxNDQgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KLWRxZGl2MjcxIGRpdmlkZSAxIDAuOWU2MTQ0ICAgICAgICAgICAgICAgIC0+IDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFFLTYxNDQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFkaXYyNzIgZGl2aWRlIDEgMC45OWU2MTQ0ICAgICAgICAgICAgICAgLT4gMS4wMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMUUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcWRpdjI3MyBkaXZpZGUgMSAwLjk5OTk5OTk5OTk5OTk5OTllNjE0NCAtPiAxLjAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxZGl2Mjc0IGRpdmlkZSA5ZTYxNDQgICAgMSAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQNCi1kcWRpdjI3NSBkaXZpZGUgOS45ZTYxNDQgIDEgICAgICAgICAgICAgICAtPiA5LjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCBDbGFtcGVkDQotZHFkaXYyNzYgZGl2aWRlIDkuOTllNjE0NCAxICAgICAgICAgICAgICAgLT4gOS45OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZA0KLWRxZGl2Mjc3IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OWU2MTQ0IDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQNCi0NCi1kcWRpdjI3OCBkaXZpZGUgMSAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllNjE0NCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxZGl2Mjc5IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWU2MTQ0IDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotDQotLS0gRGl2aWRlIGludG8gMCB0ZXN0cw0KLWRxZGl2MzAxIGRpdmlkZSAgICAwICAgIDcgICAgIC0+IDANCi1kcWRpdjMwMiBkaXZpZGUgICAgMCAgICA3RS01ICAtPiAwRSs1DQotZHFkaXYzMDMgZGl2aWRlICAgIDAgICAgN0UtMSAgLT4gMEUrMQ0KLWRxZGl2MzA0IGRpdmlkZSAgICAwICAgIDdFKzEgIC0+IDAuMA0KLWRxZGl2MzA1IGRpdmlkZSAgICAwICAgIDdFKzUgIC0+IDAuMDAwMDANCi1kcWRpdjMwNiBkaXZpZGUgICAgMCAgICA3RSs2ICAtPiAwLjAwMDAwMA0KLWRxZGl2MzA3IGRpdmlkZSAgICAwICAgIDdFKzcgIC0+IDBFLTcNCi1kcWRpdjMwOCBkaXZpZGUgICAgMCAgIDcwRS01ICAtPiAwRSs1DQotZHFkaXYzMDkgZGl2aWRlICAgIDAgICA3MEUtMSAgLT4gMEUrMQ0KLWRxZGl2MzEwIGRpdmlkZSAgICAwICAgNzBFKzAgIC0+IDANCi1kcWRpdjMxMSBkaXZpZGUgICAgMCAgIDcwRSsxICAtPiAwLjANCi1kcWRpdjMxMiBkaXZpZGUgICAgMCAgIDcwRSs1ICAtPiAwLjAwMDAwDQotZHFkaXYzMTMgZGl2aWRlICAgIDAgICA3MEUrNiAgLT4gMC4wMDAwMDANCi1kcWRpdjMxNCBkaXZpZGUgICAgMCAgIDcwRSs3ICAtPiAwRS03DQotZHFkaXYzMTUgZGl2aWRlICAgIDAgIDcwMEUtNSAgLT4gMEUrNQ0KLWRxZGl2MzE2IGRpdmlkZSAgICAwICA3MDBFLTEgIC0+IDBFKzENCi1kcWRpdjMxNyBkaXZpZGUgICAgMCAgNzAwRSswICAtPiAwDQotZHFkaXYzMTggZGl2aWRlICAgIDAgIDcwMEUrMSAgLT4gMC4wDQotZHFkaXYzMTkgZGl2aWRlICAgIDAgIDcwMEUrNSAgLT4gMC4wMDAwMA0KLWRxZGl2MzIwIGRpdmlkZSAgICAwICA3MDBFKzYgIC0+IDAuMDAwMDAwDQotZHFkaXYzMjEgZGl2aWRlICAgIDAgIDcwMEUrNyAgLT4gMEUtNw0KLWRxZGl2MzIyIGRpdmlkZSAgICAwICA3MDBFKzc3IC0+IDBFLTc3DQotDQotZHFkaXYzMzEgZGl2aWRlIDBFLTMgICAgN0UtNSAgLT4gMEUrMg0KLWRxZGl2MzMyIGRpdmlkZSAwRS0zICAgIDdFLTEgIC0+IDAuMDANCi1kcWRpdjMzMyBkaXZpZGUgMEUtMyAgICA3RSsxICAtPiAwLjAwMDANCi1kcWRpdjMzNCBkaXZpZGUgMEUtMyAgICA3RSs1ICAtPiAwRS04DQotZHFkaXYzMzUgZGl2aWRlIDBFLTEgICAgN0UtNSAgLT4gMEUrNA0KLWRxZGl2MzM2IGRpdmlkZSAwRS0xICAgIDdFLTEgIC0+IDANCi1kcWRpdjMzNyBkaXZpZGUgMEUtMSAgICA3RSsxICAtPiAwLjAwDQotZHFkaXYzMzggZGl2aWRlIDBFLTEgICAgN0UrNSAgLT4gMC4wMDAwMDANCi1kcWRpdjMzOSBkaXZpZGUgMEUrMSAgICA3RS01ICAtPiAwRSs2DQotZHFkaXYzNDAgZGl2aWRlIDBFKzEgICAgN0UtMSAgLT4gMEUrMg0KLWRxZGl2MzQxIGRpdmlkZSAwRSsxICAgIDdFKzEgIC0+IDANCi1kcWRpdjM0MiBkaXZpZGUgMEUrMSAgICA3RSs1ICAtPiAwLjAwMDANCi1kcWRpdjM0MyBkaXZpZGUgMEUrMyAgICA3RS01ICAtPiAwRSs4DQotZHFkaXYzNDQgZGl2aWRlIDBFKzMgICAgN0UtMSAgLT4gMEUrNA0KLWRxZGl2MzQ1IGRpdmlkZSAwRSszICAgIDdFKzEgIC0+IDBFKzINCi1kcWRpdjM0NiBkaXZpZGUgMEUrMyAgICA3RSs1ICAtPiAwLjAwDQotDQotLS0gVGhlc2Ugd2VyZSAnaW5wdXQgcm91bmRpbmcnDQotZHFkaXY0NDEgZGl2aWRlIDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDANCi1kcWRpdjQ0MiBkaXZpZGUgMSAxMjM0NTY3ODAwMCAtPiA4LjEwMDAwMDY2NDIwMDA1NDQ2NDQwNDQ2NjA4MTE2NjIxOUUtMTEgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0NDMgZGl2aWRlIDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMA0KLWRxZGl2NDQ0IGRpdmlkZSAxIDEyMzQ1Njc4MDAgIC0+IDguMTAwMDAwNjY0MjAwMDU0NDY0NDA0NDY2MDgxMTY2MjE5RS0xMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQ0NSBkaXZpZGUgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwDQotZHFkaXY0NDYgZGl2aWRlIDEgMTIzNDU2Nzg5MCAgLT4gOC4xMDAwMDAwNzM3MTAwMDA2NzA3NjEwMDYxMDM5MjUxNTZFLTEwIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDQ3IGRpdmlkZSAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTENCi1kcWRpdjQ0OCBkaXZpZGUgMSAxMjM0NTY3ODkxICAtPiA4LjEwMDAwMDA2NzE0OTAwMDU1NjY2NTIxNDYxNDc1NDYyOUUtMTAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0NDkgZGl2aWRlIDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDENCi1kcWRpdjQ1MCBkaXZpZGUgMSAxMjM0NTY3ODkwMSAtPiA4LjEwMDAwMDA3MzA1MzkwMDY1ODg3MzEzMDA0MjM3Njc2MEUtMTEgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0NTEgZGl2aWRlIDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5Ng0KLWRxZGl2NDUyIGRpdmlkZSAxIDEyMzQ1Njc4OTYgIC0+IDguMTAwMDAwMDM0MzQ0MDAwMTQ1NjE4NTYwNjE3NDIyNjk3RS0xMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBoaWdoLWxvd3MNCi1kcWRpdjQ1MyBkaXZpZGUgMWUrMSAgIDEgICAgLT4gICAxRSsxDQotZHFkaXY0NTQgZGl2aWRlIDFlKzEgICAxLjAgIC0+ICAgMUUrMQ0KLWRxZGl2NDU1IGRpdmlkZSAxZSsxICAgMS4wMCAtPiAgIDFFKzENCi1kcWRpdjQ1NiBkaXZpZGUgMWUrMiAgIDIgICAgLT4gICA1RSsxDQotZHFkaXY0NTcgZGl2aWRlIDFlKzIgICAyLjAgIC0+ICAgNUUrMQ0KLWRxZGl2NDU4IGRpdmlkZSAxZSsyICAgMi4wMCAtPiAgIDVFKzENCi0NCi0tLSBzb21lIGZyb20gSUVFRSBkaXNjdXNzaW9ucw0KLWRxZGl2NDYwIGRpdmlkZSAzZTAgICAgICAyZTAgICAgIC0+IDEuNQ0KLWRxZGl2NDYxIGRpdmlkZSAzMGUtMSAgICAyZTAgICAgIC0+IDEuNQ0KLWRxZGl2NDYyIGRpdmlkZSAzMDBlLTIgICAyZTAgICAgIC0+IDEuNTANCi1kcWRpdjQ2NCBkaXZpZGUgMzAwMGUtMyAgMmUwICAgICAtPiAxLjUwMA0KLWRxZGl2NDY1IGRpdmlkZSAzZTAgICAgICAyMGUtMSAgIC0+IDEuNQ0KLWRxZGl2NDY2IGRpdmlkZSAzMGUtMSAgICAyMGUtMSAgIC0+IDEuNQ0KLWRxZGl2NDY3IGRpdmlkZSAzMDBlLTIgICAyMGUtMSAgIC0+IDEuNQ0KLWRxZGl2NDY4IGRpdmlkZSAzMDAwZS0zICAyMGUtMSAgIC0+IDEuNTANCi1kcWRpdjQ2OSBkaXZpZGUgM2UwICAgICAgMjAwZS0yICAtPiAxLjUNCi1kcWRpdjQ3MCBkaXZpZGUgMzBlLTEgICAgMjAwZS0yICAtPiAxLjUNCi1kcWRpdjQ3MSBkaXZpZGUgMzAwZS0yICAgMjAwZS0yICAtPiAxLjUNCi1kcWRpdjQ3MiBkaXZpZGUgMzAwMGUtMyAgMjAwZS0yICAtPiAxLjUNCi1kcWRpdjQ3MyBkaXZpZGUgM2UwICAgICAgMjAwMGUtMyAtPiAxLjUNCi1kcWRpdjQ3NCBkaXZpZGUgMzBlLTEgICAgMjAwMGUtMyAtPiAxLjUNCi1kcWRpdjQ3NSBkaXZpZGUgMzAwZS0yICAgMjAwMGUtMyAtPiAxLjUNCi1kcWRpdjQ3NiBkaXZpZGUgMzAwMGUtMyAgMjAwMGUtMyAtPiAxLjUNCi0NCi0tLSBzb21lIHJlY2lwcm9jYWxzDQotZHFkaXY0ODAgZGl2aWRlIDEgICAgICAgIDEuMEUrMzMgLT4gMUUtMzMNCi1kcWRpdjQ4MSBkaXZpZGUgMSAgICAgICAgMTBFKzMzICAtPiAxRS0zNA0KLWRxZGl2NDgyIGRpdmlkZSAxICAgICAgICAxLjBFLTMzIC0+IDFFKzMzDQotZHFkaXY0ODMgZGl2aWRlIDEgICAgICAgIDEwRS0zMyAgLT4gMUUrMzINCi0NCi0tLSBSTVMgZGlzY3Vzc2lvbiB0YWJsZQ0KLWRxZGl2NDg0IGRpdmlkZSAwZTUgICAgIDFlMyAtPiAgIDBFKzINCi1kcWRpdjQ4NSBkaXZpZGUgMGU1ICAgICAyZTMgLT4gICAwRSsyDQotZHFkaXY0ODYgZGl2aWRlIDBlNSAgICAxMGUyIC0+ICAgMEUrMw0KLWRxZGl2NDg3IGRpdmlkZSAwZTUgICAgMjBlMiAtPiAgIDBFKzMNCi1kcWRpdjQ4OCBkaXZpZGUgMGU1ICAgMTAwZTEgLT4gICAwRSs0DQotZHFkaXY0ODkgZGl2aWRlIDBlNSAgIDIwMGUxIC0+ICAgMEUrNA0KLQ0KLWRxZGl2NDkxIGRpdmlkZSAxZTUgICAgIDFlMyAtPiAgIDFFKzINCi1kcWRpdjQ5MiBkaXZpZGUgMWU1ICAgICAyZTMgLT4gICA1RSsxDQotZHFkaXY0OTMgZGl2aWRlIDFlNSAgICAxMGUyIC0+ICAgMUUrMg0KLWRxZGl2NDk0IGRpdmlkZSAxZTUgICAgMjBlMiAtPiAgIDVFKzENCi1kcWRpdjQ5NSBkaXZpZGUgMWU1ICAgMTAwZTEgLT4gICAxRSsyDQotZHFkaXY0OTYgZGl2aWRlIDFlNSAgIDIwMGUxIC0+ICAgNUUrMQ0KLQ0KLS0tIHRyeXplcm9zIGNhc2VzDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kcWRpdjQ5NyAgZGl2aWRlICAwRSs2MTA4IDEwMDBFLTMzICAtPiAwRSs2MTExIENsYW1wZWQNCi1kcWRpdjQ5OCAgZGl2aWRlICAwRS02MTcwIDEwMDBFKzMzICAtPiAwRS02MTc2IENsYW1wZWQNCi0NCi1yb3VuZGluZzogICAgaGFsZl91cA0KLQ0KLS0tIGZvY3VzIG9uIHRyYWlsaW5nIHplcm9zIGlzc3Vlcw0KLWRxZGl2NTAwIGRpdmlkZSAgMSAgICAgIDkuOSAgICAtPiAgMC4xMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjUwMSBkaXZpZGUgIDEgICAgICA5LjA5ICAgLT4gIDAuMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY1MDIgZGl2aWRlICAxICAgICAgOS4wMDkgIC0+ICAwLjExMTAwMDExMTAwMDExMTAwMDExMTAwMDExMTAwMDExMTAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxZGl2NTExIGRpdmlkZSAxICAgICAgICAgMiAgICAtPiAwLjUNCi1kcWRpdjUxMiBkaXZpZGUgMS4wICAgICAgIDIgICAgLT4gMC41DQotZHFkaXY1MTMgZGl2aWRlIDEuMDAgICAgICAyICAgIC0+IDAuNTANCi1kcWRpdjUxNCBkaXZpZGUgMS4wMDAgICAgIDIgICAgLT4gMC41MDANCi1kcWRpdjUxNSBkaXZpZGUgMS4wMDAwICAgIDIgICAgLT4gMC41MDAwDQotZHFkaXY1MTYgZGl2aWRlIDEuMDAwMDAgICAyICAgIC0+IDAuNTAwMDANCi1kcWRpdjUxNyBkaXZpZGUgMS4wMDAwMDAgIDIgICAgLT4gMC41MDAwMDANCi1kcWRpdjUxOCBkaXZpZGUgMS4wMDAwMDAwIDIgICAgLT4gMC41MDAwMDAwDQotZHFkaXY1MTkgZGl2aWRlIDEuMDAgICAgICAyLjAwIC0+IDAuNQ0KLQ0KLWRxZGl2NTIxIGRpdmlkZSAyICAgIDEgICAgICAgICAtPiAyDQotZHFkaXY1MjIgZGl2aWRlIDIgICAgMS4wICAgICAgIC0+IDINCi1kcWRpdjUyMyBkaXZpZGUgMiAgICAxLjAwICAgICAgLT4gMg0KLWRxZGl2NTI0IGRpdmlkZSAyICAgIDEuMDAwICAgICAtPiAyDQotZHFkaXY1MjUgZGl2aWRlIDIgICAgMS4wMDAwICAgIC0+IDINCi1kcWRpdjUyNiBkaXZpZGUgMiAgICAxLjAwMDAwICAgLT4gMg0KLWRxZGl2NTI3IGRpdmlkZSAyICAgIDEuMDAwMDAwICAtPiAyDQotZHFkaXY1MjggZGl2aWRlIDIgICAgMS4wMDAwMDAwIC0+IDINCi1kcWRpdjUyOSBkaXZpZGUgMi4wMCAxLjAwICAgICAgLT4gMg0KLQ0KLWRxZGl2NTMwIGRpdmlkZSAgMi40MCAgIDIgICAgICAtPiAgMS4yMA0KLWRxZGl2NTMxIGRpdmlkZSAgMi40MCAgIDQgICAgICAtPiAgMC42MA0KLWRxZGl2NTMyIGRpdmlkZSAgMi40MCAgMTAgICAgICAtPiAgMC4yNA0KLWRxZGl2NTMzIGRpdmlkZSAgMi40MCAgIDIuMCAgICAtPiAgMS4yDQotZHFkaXY1MzQgZGl2aWRlICAyLjQwICAgNC4wICAgIC0+ICAwLjYNCi1kcWRpdjUzNSBkaXZpZGUgIDIuNDAgIDEwLjAgICAgLT4gIDAuMjQNCi1kcWRpdjUzNiBkaXZpZGUgIDIuNDAgICAyLjAwICAgLT4gIDEuMg0KLWRxZGl2NTM3IGRpdmlkZSAgMi40MCAgIDQuMDAgICAtPiAgMC42DQotZHFkaXY1MzggZGl2aWRlICAyLjQwICAxMC4wMCAgIC0+ICAwLjI0DQotZHFkaXY1MzkgZGl2aWRlICAwLjkgICAgMC4xICAgIC0+ICA5DQotZHFkaXY1NDAgZGl2aWRlICAwLjkgICAgMC4wMSAgIC0+ICA5RSsxDQotZHFkaXY1NDEgZGl2aWRlICAwLjkgICAgMC4wMDEgIC0+ICA5RSsyDQotZHFkaXY1NDIgZGl2aWRlICA1ICAgICAgMiAgICAgIC0+ICAyLjUNCi1kcWRpdjU0MyBkaXZpZGUgIDUgICAgICAyLjAgICAgLT4gIDIuNQ0KLWRxZGl2NTQ0IGRpdmlkZSAgNSAgICAgIDIuMDAgICAtPiAgMi41DQotZHFkaXY1NDUgZGl2aWRlICA1ICAgICAgMjAgICAgIC0+ICAwLjI1DQotZHFkaXY1NDYgZGl2aWRlICA1ICAgICAgMjAuMCAgIC0+ICAwLjI1DQotZHFkaXY1NDcgZGl2aWRlICAyLjQwMCAgMiAgICAgIC0+ICAxLjIwMA0KLWRxZGl2NTQ4IGRpdmlkZSAgMi40MDAgIDIuMCAgICAtPiAgMS4yMA0KLWRxZGl2NTQ5IGRpdmlkZSAgMi40MDAgIDIuNDAwICAtPiAgMQ0KLQ0KLWRxZGl2NTUwIGRpdmlkZSAgMjQwICAgIDEgICAgICAtPiAgMjQwDQotZHFkaXY1NTEgZGl2aWRlICAyNDAgICAgMTAgICAgIC0+ICAyNA0KLWRxZGl2NTUyIGRpdmlkZSAgMjQwICAgIDEwMCAgICAtPiAgMi40DQotZHFkaXY1NTMgZGl2aWRlICAyNDAgICAgMTAwMCAgIC0+ICAwLjI0DQotZHFkaXY1NTQgZGl2aWRlICAyNDAwICAgMSAgICAgIC0+ICAyNDAwDQotZHFkaXY1NTUgZGl2aWRlICAyNDAwICAgMTAgICAgIC0+ICAyNDANCi1kcWRpdjU1NiBkaXZpZGUgIDI0MDAgICAxMDAgICAgLT4gIDI0DQotZHFkaXY1NTcgZGl2aWRlICAyNDAwICAgMTAwMCAgIC0+ICAyLjQNCi0NCi0tLSArdmUgZXhwb25lbnQNCi1kcWRpdjYwMCBkaXZpZGUgIDIuNEUrOSAgICAgMiAgLT4gIDEuMkUrOQ0KLWRxZGl2NjAxIGRpdmlkZSAgMi40MEUrOSAgICAyICAtPiAgMS4yMEUrOQ0KLWRxZGl2NjAyIGRpdmlkZSAgMi40MDBFKzkgICAyICAtPiAgMS4yMDBFKzkNCi1kcWRpdjYwMyBkaXZpZGUgIDIuNDAwMEUrOSAgMiAgLT4gIDEuMjAwMEUrOQ0KLWRxZGl2NjA0IGRpdmlkZSAgMjRFKzggICAgICAyICAtPiAgMS4yRSs5DQotZHFkaXY2MDUgZGl2aWRlICAyNDBFKzcgICAgIDIgIC0+ICAxLjIwRSs5DQotZHFkaXY2MDYgZGl2aWRlICAyNDAwRSs2ICAgIDIgIC0+ICAxLjIwMEUrOQ0KLWRxZGl2NjA3IGRpdmlkZSAgMjQwMDBFKzUgICAyICAtPiAgMS4yMDAwRSs5DQotDQotLS0gbW9yZSB6ZXJvcywgZXRjLg0KLWRxZGl2NzMxIGRpdmlkZSA1LjAwIDFFLTMgICAgLT4gNS4wMEUrMw0KLWRxZGl2NzMyIGRpdmlkZSAwMC4wMCAwLjAwMCAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxZGl2NzMzIGRpdmlkZSAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxZGl2NzM0IGRpdmlkZSAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxZGl2NzM1IGRpdmlkZSAtMCAgICAgMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxZGl2NzM2IGRpdmlkZSAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLQ0KLWRxZGl2NzQxIGRpdmlkZSAgMCAgICAtMSAgICAgLT4gLTANCi1kcWRpdjc0MiBkaXZpZGUgLTAgICAgLTEgICAgIC0+ICAwDQotZHFkaXY3NDMgZGl2aWRlICAwICAgICAxICAgICAtPiAgMA0KLWRxZGl2NzQ0IGRpdmlkZSAtMCAgICAgMSAgICAgLT4gLTANCi1kcWRpdjc0NSBkaXZpZGUgLTEgICAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY3NDYgZGl2aWRlIC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2NzQ3IGRpdmlkZSAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWRpdjc0OCBkaXZpZGUgIDEgICAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZHFkaXY3NTEgZGl2aWRlICAwLjAgIC0xICAgICAtPiAtMC4wDQotZHFkaXY3NTIgZGl2aWRlIC0wLjAgIC0xICAgICAtPiAgMC4wDQotZHFkaXY3NTMgZGl2aWRlICAwLjAgICAxICAgICAtPiAgMC4wDQotZHFkaXY3NTQgZGl2aWRlIC0wLjAgICAxICAgICAtPiAtMC4wDQotZHFkaXY3NTUgZGl2aWRlIC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2NzU2IGRpdmlkZSAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWRpdjc1NyBkaXZpZGUgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY3NTggZGl2aWRlICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRxZGl2NzYxIGRpdmlkZSAgMCAgICAtMS4wICAgLT4gLTBFKzENCi1kcWRpdjc2MiBkaXZpZGUgLTAgICAgLTEuMCAgIC0+ICAwRSsxDQotZHFkaXY3NjMgZGl2aWRlICAwICAgICAxLjAgICAtPiAgMEUrMQ0KLWRxZGl2NzY0IGRpdmlkZSAtMCAgICAgMS4wICAgLT4gLTBFKzENCi1kcWRpdjc2NSBkaXZpZGUgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY3NjYgZGl2aWRlIC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2NzY3IGRpdmlkZSAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWRpdjc2OCBkaXZpZGUgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZHFkaXY3NzEgZGl2aWRlICAwLjAgIC0xLjAgICAtPiAtMA0KLWRxZGl2NzcyIGRpdmlkZSAtMC4wICAtMS4wICAgLT4gIDANCi1kcWRpdjc3MyBkaXZpZGUgIDAuMCAgIDEuMCAgIC0+ICAwDQotZHFkaXY3NzQgZGl2aWRlIC0wLjAgICAxLjAgICAtPiAtMA0KLWRxZGl2Nzc1IGRpdmlkZSAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWRpdjc3NiBkaXZpZGUgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY3NzcgZGl2aWRlICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2Nzc4IGRpdmlkZSAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi0tLSBTcGVjaWFscw0KLWRxZGl2NzgwIGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2NzgxIGRpdmlkZSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZHFkaXY3ODIgZGl2aWRlICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kcWRpdjc4MyBkaXZpZGUgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWRxZGl2Nzg0IGRpdmlkZSAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZHFkaXY3ODUgZGl2aWRlICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kcWRpdjc4NiBkaXZpZGUgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxZGl2Nzg3IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2Nzg4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2Nzg5IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2NzkwIGRpdmlkZSAtMSAgICAgSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2NzkxIGRpdmlkZSAtMCAgICAgSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2NzkyIGRpdmlkZSAgMCAgICAgSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2NzkzIGRpdmlkZSAgMSAgICAgSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2Nzk0IGRpdmlkZSAgMTAwMCAgSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2Nzk1IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxZGl2ODAwIGRpdmlkZSAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODAxIGRpdmlkZSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZHFkaXY4MDIgZGl2aWRlIC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1kcWRpdjgwMyBkaXZpZGUgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRxZGl2ODA0IGRpdmlkZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZHFkaXY4MDUgZGl2aWRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kcWRpdjgwNiBkaXZpZGUgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KLWRxZGl2ODA3IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODA4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2ODA5IGRpdmlkZSAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODEwIGRpdmlkZSAtMSAgICAtSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2ODExIGRpdmlkZSAtMCAgICAtSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2ODEyIGRpdmlkZSAgMCAgICAtSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2ODEzIGRpdmlkZSAgMSAgICAtSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2ODE0IGRpdmlkZSAgMTAwMCAtSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZA0KLWRxZGl2ODE1IGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxZGl2ODIxIGRpdmlkZSAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRxZGl2ODIyIGRpdmlkZSAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRxZGl2ODIzIGRpdmlkZSAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRxZGl2ODI0IGRpdmlkZSAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRxZGl2ODI1IGRpdmlkZSAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRxZGl2ODI2IGRpdmlkZSAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRxZGl2ODI3IGRpdmlkZSAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRxZGl2ODI4IGRpdmlkZSAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRxZGl2ODI5IGRpdmlkZSAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRxZGl2ODMwIGRpdmlkZSAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRxZGl2ODMxIGRpdmlkZSAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxZGl2ODMyIGRpdmlkZSAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxZGl2ODMzIGRpdmlkZSAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxZGl2ODM0IGRpdmlkZSAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxZGl2ODM1IGRpdmlkZSAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxZGl2ODM2IGRpdmlkZSAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxZGl2ODM3IGRpdmlkZSAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRxZGl2ODQxIGRpdmlkZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg0MiBkaXZpZGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NDMgZGl2aWRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODQ0IGRpdmlkZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg0NSBkaXZpZGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NDYgZGl2aWRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODQ3IGRpdmlkZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg0OCBkaXZpZGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NDkgZGl2aWRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODUwIGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg1MSBkaXZpZGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NTIgZGl2aWRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODUzIGRpdmlkZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg1NCBkaXZpZGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NTUgZGl2aWRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODU2IGRpdmlkZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg1NyBkaXZpZGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NTggZGl2aWRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODU5IGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFkaXY4NjEgZGl2aWRlICBOYU45IC1JbmYgICAtPiAgTmFOOQ0KLWRxZGl2ODYyIGRpdmlkZSAgTmFOOCAgMTAwMCAgLT4gIE5hTjgNCi1kcWRpdjg2MyBkaXZpZGUgIE5hTjcgIEluZiAgIC0+ICBOYU43DQotZHFkaXY4NjQgZGl2aWRlICBOYU42ICBOYU41ICAtPiAgTmFONg0KLWRxZGl2ODY1IGRpdmlkZSAtSW5mICAgTmFONCAgLT4gIE5hTjQNCi1kcWRpdjg2NiBkaXZpZGUgLTEwMDAgIE5hTjMgIC0+ICBOYU4zDQotZHFkaXY4NjcgZGl2aWRlICBJbmYgICBOYU4yICAtPiAgTmFOMg0KLQ0KLWRxZGl2ODcxIGRpdmlkZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NzIgZGl2aWRlICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg3MyBkaXZpZGUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODc0IGRpdmlkZSAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NzUgZGl2aWRlICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg3NiBkaXZpZGUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODc3IGRpdmlkZSAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NzggZGl2aWRlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg3OSBkaXZpZGUgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxZGl2ODgxIGRpdmlkZSAgLU5hTjkgIC1JbmYgICAtPiAgLU5hTjkNCi1kcWRpdjg4MiBkaXZpZGUgIC1OYU44ICAgMTAwMCAgLT4gIC1OYU44DQotZHFkaXY4ODMgZGl2aWRlICAtTmFONyAgIEluZiAgIC0+ICAtTmFONw0KLWRxZGl2ODg0IGRpdmlkZSAgLU5hTjYgIC1OYU41ICAtPiAgLU5hTjYNCi1kcWRpdjg4NSBkaXZpZGUgIC1JbmYgICAtTmFONCAgLT4gIC1OYU40DQotZHFkaXY4ODYgZGl2aWRlICAtMTAwMCAgLU5hTjMgIC0+ICAtTmFOMw0KLWRxZGl2ODg3IGRpdmlkZSAgIEluZiAgIC1OYU4yICAtPiAgLU5hTjINCi0NCi1kcWRpdjg5MSBkaXZpZGUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODkyIGRpdmlkZSAtc05hTjk4IC0xICAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4OTMgZGl2aWRlIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg5NCBkaXZpZGUgLXNOYU45NiAtc05hTjk0IC0+IC1OYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODk1IGRpdmlkZSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4OTYgZGl2aWRlIC1JbmYgICAgLXNOYU45MiAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg5NyBkaXZpZGUgIDAgICAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODk4IGRpdmlkZSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4OTkgZGl2aWRlIC1OYU4gICAgLXNOYU44OSAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBWYXJpb3VzIGZsYXZvdXJzIG9mIGRpdmlkZSBieSAwDQotZHFkaXY5MDEgZGl2aWRlICAgIDAgICAgICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFkaXY5MDIgZGl2aWRlICAgIDAuMEU1ICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFkaXY5MDMgZGl2aWRlICAgIDAuMDAwICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFkaXY5MDQgZGl2aWRlICAgIDAuMDAwMSAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MDUgZGl2aWRlICAgIDAuMDEgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MDYgZGl2aWRlICAgIDAuMSAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MDcgZGl2aWRlICAgIDEgICAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MDggZGl2aWRlICAgIDEgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MDkgZGl2aWRlICAgMTAgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MTAgZGl2aWRlICAgMUUrMTAwICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MTEgZGl2aWRlICAgMUUrMTAwICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZHFkaXY5MjEgZGl2aWRlICAgLTAuMDAwMSAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MjIgZGl2aWRlICAgLTAuMDEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MjMgZGl2aWRlICAgLTAuMSAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MjQgZGl2aWRlICAgLTEgICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MjUgZGl2aWRlICAgLTEgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MjYgZGl2aWRlICAtMTAgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MjcgZGl2aWRlICAtMUUrMTAwICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MjggZGl2aWRlICAtMUUrMTAwICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZHFkaXY5MzEgZGl2aWRlICAgIDAuMDAwMSAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MzIgZGl2aWRlICAgIDAuMDEgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MzMgZGl2aWRlICAgIDAuMSAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MzQgZGl2aWRlICAgIDEgICAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MzUgZGl2aWRlICAgIDEgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MzYgZGl2aWRlICAgMTAgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MzcgZGl2aWRlICAgMUUrMTAwICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5MzggZGl2aWRlICAgMUUrMTAwICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZHFkaXY5NDEgZGl2aWRlICAgLTAuMDAwMSAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5NDIgZGl2aWRlICAgLTAuMDEgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5NDMgZGl2aWRlICAgLTAuMSAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5NDQgZGl2aWRlICAgLTEgICAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5NDUgZGl2aWRlICAgLTEgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5NDYgZGl2aWRlICAtMTAgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5NDcgZGl2aWRlICAtMUUrMTAwICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY5NDggZGl2aWRlICAtMUUrMTAwICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQotZHFkaXYxMDIxICBkaXZpZGUgMUUwICAgICAgICAgIDFFMCAtPiAxDQotZHFkaXYxMDIyICBkaXZpZGUgMUUwICAgICAgICAgIDJFMCAtPiAwLjUNCi1kcWRpdjEwMjMgIGRpdmlkZSAxRTAgICAgICAgICAgM0UwIC0+IDAuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjEwMjQgIGRpdmlkZSAxMDBFLTIgICAxMDAwRS0zIC0+IDENCi1kcWRpdjEwMjUgIGRpdmlkZSAyNEUtMSAgICAgICAgMkUwIC0+IDEuMg0KLWRxZGl2MTAyNiAgZGl2aWRlIDI0MDBFLTMgICAgICAyRTAgLT4gMS4yMDANCi1kcWRpdjEwMjcgIGRpdmlkZSA1RTAgICAgICAgICAgMkUwIC0+IDIuNQ0KLWRxZGl2MTAyOCAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTEgLT4gMi41DQotZHFkaXYxMDI5ICBkaXZpZGUgNUUwICAgICAgMjAwMEUtMyAtPiAyLjUNCi1kcWRpdjEwMzAgIGRpdmlkZSA1RTAgICAgICAgICAyRS0xIC0+IDI1DQotZHFkaXYxMDMxICBkaXZpZGUgNUUwICAgICAgICAyMEUtMiAtPiAyNQ0KLWRxZGl2MTAzMiAgZGl2aWRlIDQ4MEUtMiAgICAgICAzRTAgLT4gMS42MA0KLWRxZGl2MTAzMyAgZGl2aWRlIDQ3RS0xICAgICAgICAyRTAgLT4gMi4zNQ0KLQ0KLS0tIEVDTUFTY3JpcHQgYmFkIGV4YW1wbGVzDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLWRxZGl2MTA0MCAgZGl2aWRlIDUgOSAgLT4gMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1kcWRpdjEwNDEgIGRpdmlkZSA2IDExIC0+IDAuNTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBHeXVyaXMgZXhhbXBsZQ0KLWRxZGl2MTA1MCAgZGl2aWRlIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MTI1NCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMNCi0tLSBzaWducw0KLWRxZGl2MTc1MSBkaXZpZGUgIDFlKzQyNzcgIDFlLTMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTc1MiBkaXZpZGUgIDFlKzQyNzcgLTFlLTMzMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTc1MyBkaXZpZGUgLTFlKzQyNzcgIDFlLTMzMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTc1NCBkaXZpZGUgLTFlKzQyNzcgLTFlLTMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTc1NSBkaXZpZGUgIDFlLTQyNzcgIDFlKzMzMTEgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZGl2MTc1NiBkaXZpZGUgIDFlLTQyNzcgLTFlKzMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZGl2MTc1NyBkaXZpZGUgLTFlLTQyNzcgIDFlKzMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZGl2MTc1OCBkaXZpZGUgLTFlLTQyNzcgLTFlKzMzMTEgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KLWRxZGl2MTc2MCBkaXZpZGUgMWUtNjA2OSAxZSsxMDEgLT4gMUUtNjE3MCBTdWJub3JtYWwNCi1kcWRpdjE3NjEgZGl2aWRlIDFlLTYwNjkgMWUrMTAyIC0+IDFFLTYxNzEgU3Vibm9ybWFsDQotZHFkaXYxNzYyIGRpdmlkZSAxZS02MDY5IDFlKzEwMyAtPiAxRS02MTcyIFN1Ym5vcm1hbA0KLWRxZGl2MTc2MyBkaXZpZGUgMWUtNjA2OSAxZSsxMDQgLT4gMUUtNjE3MyBTdWJub3JtYWwNCi1kcWRpdjE3NjQgZGl2aWRlIDFlLTYwNjkgMWUrMTA1IC0+IDFFLTYxNzQgU3Vibm9ybWFsDQotZHFkaXYxNzY1IGRpdmlkZSAxZS02MDY5IDFlKzEwNiAtPiAxRS02MTc1IFN1Ym5vcm1hbA0KLWRxZGl2MTc2NiBkaXZpZGUgMWUtNjA2OSAxZSsxMDcgLT4gMUUtNjE3NiBTdWJub3JtYWwNCi1kcWRpdjE3NjcgZGl2aWRlIDFlLTYwNjkgMWUrMTA4IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZGl2MTc2OCBkaXZpZGUgMWUtNjA2OSAxZSsxMDkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFkaXYxNzY5IGRpdmlkZSAxZS02MDY5IDFlKzExMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0tLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddDQotZHFkaXYxNzcwIGRpdmlkZSAxZSs0MCAxZS02MTAxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxIENsYW1wZWQNCi1kcWRpdjE3NzEgZGl2aWRlIDFlKzQwIDFlLTYxMDIgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyICBDbGFtcGVkDQotZHFkaXYxNzcyIGRpdmlkZSAxZSs0MCAxZS02MTAzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgIENsYW1wZWQNCi1kcWRpdjE3NzMgZGl2aWRlIDFlKzQwIDFlLTYxMDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQNCi1kcWRpdjE3NzQgZGl2aWRlIDFlKzQwIDFlLTYxMDUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxNzc1IGRpdmlkZSAxZSs0MCAxZS02MTA2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTc3NiBkaXZpZGUgMWUrNDAgMWUtNjEwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE3NzcgZGl2aWRlIDFlKzQwIDFlLTYxMDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxNzc4IGRpdmlkZSAxZSs0MCAxZS02MTA5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTc3OSBkaXZpZGUgMWUrNDAgMWUtNjExMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWRpdjE4MDEgZGl2aWRlICAxLjAwMDBFLTYxNzIgIDEgICAgIC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwNCi1kcWRpdjE4MDIgZGl2aWRlICAxLjAwMEUtNjE3MiAgIDFlKzEgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwNCi1kcWRpdjE4MDMgZGl2aWRlICAxLjAwRS02MTcyICAgIDFlKzIgIC0+IDEuMDBFLTYxNzQgICBTdWJub3JtYWwNCi1kcWRpdjE4MDQgZGl2aWRlICAxLjBFLTYxNzIgICAgIDFlKzMgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwNCi1kcWRpdjE4MDUgZGl2aWRlICAxLjBFLTYxNzIgICAgIDFlKzQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFkaXYxODA2IGRpdmlkZSAgMS4zRS02MTcyICAgICAxZSs0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgwNyBkaXZpZGUgIDEuNUUtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MDggZGl2aWRlICAxLjdFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxODA5IGRpdmlkZSAgMi4zRS02MTcyICAgICAxZSs0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgxMCBkaXZpZGUgIDIuNUUtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MTEgZGl2aWRlICAyLjdFLTYxNzIgICAgIDFlKzQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxODEyIGRpdmlkZSAgMS40OUUtNjE3MiAgICAxZSs0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgxMyBkaXZpZGUgIDEuNTBFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MTQgZGl2aWRlICAxLjUxRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxODE1IGRpdmlkZSAgMi40OUUtNjE3MiAgICAxZSs0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgxNiBkaXZpZGUgIDIuNTBFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MTcgZGl2aWRlICAyLjUxRS02MTcyICAgIDFlKzQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZHFkaXYxODE4IGRpdmlkZSAgMUUtNjE3MiAgICAgICAxZSs0ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwNCi1kcWRpdjE4MTkgZGl2aWRlICAzRS02MTcyICAgICAgIDFlKzUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWRpdjE4MjAgZGl2aWRlICA1RS02MTcyICAgICAgIDFlKzUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWRpdjE4MjEgZGl2aWRlICA3RS02MTcyICAgICAgIDFlKzUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxODIyIGRpdmlkZSAgOUUtNjE3MiAgICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgyMyBkaXZpZGUgIDkuOUUtNjE3MiAgICAgMWUrNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWRpdjE4MjQgZGl2aWRlICAxRS02MTcyICAgICAgLTFlKzQgIC0+IC0xRS02MTc2ICAgIFN1Ym5vcm1hbA0KLWRxZGl2MTgyNSBkaXZpZGUgIDNFLTYxNzIgICAgICAtMWUrNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZGl2MTgyNiBkaXZpZGUgLTVFLTYxNzIgICAgICAgMWUrNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZGl2MTgyNyBkaXZpZGUgIDdFLTYxNzIgICAgICAtMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MjggZGl2aWRlIC05RS02MTcyICAgICAgIDFlKzUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxODI5IGRpdmlkZSAgOS45RS02MTcyICAgIC0xZSs1ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgzMCBkaXZpZGUgIDMuMEUtNjE3MiAgICAtMWUrNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLWRxZGl2MTgzMSBkaXZpZGUgIDEuMEUtNTk3NyAgICAgMWUrMjAwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZGl2MTgzMiBkaXZpZGUgIDEuMEUtNTk3NyAgICAgMWUrMTk5IC0+IDFFLTYxNzYgICBTdWJub3JtYWwgUm91bmRlZA0KLWRxZGl2MTgzMyBkaXZpZGUgIDEuMEUtNTk3NyAgICAgMWUrMTk4IC0+IDEuMEUtNjE3NSBTdWJub3JtYWwNCi1kcWRpdjE4MzQgZGl2aWRlICAyLjBFLTU5NzcgICAgIDJlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsDQotZHFkaXYxODM1IGRpdmlkZSAgNC4wRS01OTc3ICAgICA0ZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbA0KLWRxZGl2MTgzNiBkaXZpZGUgMTAuMEUtNTk3NyAgICAxMGUrMTk4IC0+IDEuMEUtNjE3NSBTdWJub3JtYWwNCi1kcWRpdjE4MzcgZGl2aWRlIDMwLjBFLTU5NzcgICAgMzBlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsDQotZHFkaXYxODM4IGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjYgLT4gMS4wRS02MTQ4IFN1Ym5vcm1hbA0KLWRxZGl2MTgzOSBkaXZpZGUgNDAuMEUtNTk4MiAgICA0MGUrMTY1IC0+IDEuMEUtNjE0NyBTdWJub3JtYWwNCi1kcWRpdjE4NDAgZGl2aWRlIDQwLjBFLTU5ODIgICAgNDBlKzE2NCAtPiAxLjBFLTYxNDYgU3Vibm9ybWFsDQotDQotLS0gcmFuZG9tcw0KLXJvdW5kaW5nOiAgaGFsZl9ldmVuDQotZHFkaXYyMDEwICBkaXZpZGUgIC01MjMxMTk1NjUyOTMxNjUxOTY4MDM0MzU2MTE3MTE4ODUwICAgICAgICAgLTcyNDM3MTg2NjQ0MjI1NDg1NzMyMDMyNjA5NzAuMzQ5OTUgICAgICAgICAgLT4gICA3MjIxNjkuOTA5NTgzMTI4NDYyNDczNjA1MTQ2MDU1MDY4MCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMTEgIGRpdmlkZSAgLTg5NTg0NjY5NzczOTI3LjgyNzExMjM3MzUwMDIyNTE1MzUyICAgICAgICAtNDIwNzc5NDM3Mjg1Mjk2MzU4ODQuMjExNDI2Mjc1MzI5ODUgICAgICAgICAtPiAgIDAuMDAwMDAyMTI5MDE3MjkxMTQ2NDcxNTY1OTI4MTI1ODg3NTI3MjY2IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAxMiAgZGl2aWRlICAtMi44MjgyMDE2OTMzNjA3MjMyMDM4MDY5NzQ4OTE5NDYxODBFLTIzMiAgICA4MTI1OTY1NDEyMjE4MjM5NjAzODYzODQ0MDMwODkyNDAuOSAgICAgICAgIC0+ICAtMy40ODA0NTAwNzU2NDA1MjEzMjAwNDAwNTU3NTkxMjUxMjBFLTI2NSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMTMgIGRpdmlkZSAgLTY0NDI3NzUzNzI3NjEwNjkyNjc1MDI5Mzc1Mzk0MDg3MjAgICAgICAgICAgMjQ5MDQwODUwNTYuNjkxODU0NjUxNDUxODI2MDYwODkxOTYgICAgICAgICAtPiAgLTI1ODcwMzU1NjM4ODIyNjQ2MzY4NzcwMS40ODg0NzE5NTg5IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAxNCAgZGl2aWRlICAgNS41MzU1MjAwMTEyNzI2MjU2Mjk2MTAwNzk4Nzk3MTQ3MDUgICAgICAgIC00NDM0MzY2NDY1MC41NzIwMzA1MjAwMzA2ODExMzUzMTIwOCAgICAgICAgIC0+ICAtMS4yNDgzMjI2MzA3MjgwODkzMDg5NzU5NDA1MzM0OTM1NjJFLTEwIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAxNSAgZGl2aWRlICAgNjU5MTkyNzM3MTI1MTc4NjU5NjQzMjUuOTk0MTk2MjUwMTAgICAgICAgIC0zMTQ3MzMzNTQxNDEzODE3MzczNzg2MjI1MTUuNzc4OTA1NCAgICAgICAgIC0+ICAtMC4wMDAyMDk0NDQ4Mjk1NTIxNDkwNjE2Mzc5Nzg0NzU4OTExNjMyIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAxNiAgZGl2aWRlICAtNy43NzkxNzI1NjgxOTMxOTcxMDcxMTUyNzUxNDA0MzExMjlFKzc1OSAgIC0xNDA0NTMwMTU2MzkuMzk4ODk4NzY1Mjg5NTE3ODc4MjE0MyAgICAgICAgIC0+ICAgNS41Mzg2Mjk3OTIxNjE2NDE1MzQ5NjI3NzQyNDQyMzgxMTVFKzc0OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMTcgIGRpdmlkZSAgIDY0NDMxNDgzMjU5NzU2OS4wMTgxMjI2MDY3NTE4MTc4Nzk3ICAgICAgICAtMTE1MDI0NTg1MjU3NDI1LjE2MzU3NTk1MjE1NjUyMDEwNzUgICAgICAgICAtPiAgLTUuNjAxNTQwMTUwMzU2NDc5MjU3MzY3Njg3NDUwOTIyNzk1IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAxOCAgZGl2aWRlICAgNi44OTg2NDA5NDE1Nzk2MTE0NTA2NzY1OTI1NTMyODY4NzBFLTQ3ICAgIC0xMTI3MjQyOTg4MTQwNzg1MTQ4NTE2MzkxNDk5OS4yNTk0MyAgICAgICAgIC0+ICAtNi4xMTk5MjM1NzgyODUzMzg2ODkzNzExMzc2NDgzMTkyODBFLTc1IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAxOSAgZGl2aWRlICAtMzU5MTM0NDU0NDg4ODcyNzEzMy4zMDgxOTc1MDE2MzI1NCAgICAgICAgICA1MzI5Mzk1LjQyMzc5Mjc5NTY2MTQ0NjU2MTA5MDMzMTAzNyAgICAgICAgIC0+ICAtNjczODc0NjYyOTQxLjE5Njg1MjU1ODk0NjA1MzM3MjUyOTAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDIwICBkaXZpZGUgIC03LjY4MjM1Njc4MTM4NDYzMTMxMzE1NjQ2MjcyNDQyNTgzOEUrNzQ3ICAgLTYuNjAzNzU4NTU1MTIyMTkwNTcyODE5MjIxNDE4MDk5NDBFKzcwMyAgICAgLT4gICAxLjE2MzMzMDk2MDI3OTU1NjAxNjY3ODM3OTEyODg3NTE0OUUrNDQgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDIxICBkaXZpZGUgIC00NTExNDk1NTk2NTk2OTQxODIwODYzMjI0LjI3NDY3OTY5OSAgICAgICAgIDMzNjUzOTUwMTcuMjYzMzI5Nzk1NDQ5NjYxNjE2MDkwNzI0ICAgICAgICAgLT4gIC0xMzQwNTU0NTQ4MTE1MzA0LjkwNDE2Njg4ODAxODM0NjI5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMjIgIGRpdmlkZSAgIDUuMjExMTY0MTI3ODQwOTMxNTE3MjYzNjM5NjA4MTUxMjk5ICAgICAgICAgMTY0LjU1NjYzODEzNTYyNzY1NjcwMTI1MzM4NDcwMDY0NTMgICAgICAgICAtPiAgIDAuMDMxNjY3OTA1ODc2NTUyMjg4NjQ0NzgyNjAxNTcxNTY1MTAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDIzICBkaXZpZGUgIC00OTg5MS4yMjQzODkzNDU4ODMwMzg0MDc3Njg0NjIwMzgzICAgICAgICAgLTQ3MTc5LjkzMTI5NjE4NjA3NDc1NTQwNTMzNzExNzE1MzAgICAgICAgICAgLT4gICAxLjA1NzQ2NzA4NDM4Njc2NzI5MTYwMjE4OTY1NjQzMDI2OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMjQgIGRpdmlkZSAgIDE1MDY1NDc3LjQ3MjE0MjY4NDg4MDc3NDE1NDYyNDEzMzUzICAgICAgICAgNDM2NjIxMS4xMjA4OTI5NTMyNjEzMDk1Mjk3NDA1NTI1OTYgICAgICAgICAtPiAgIDMuNDUwNDY5MzA5NjYxMjI3OTg0MjQ0NTQ1NTEzNDQxMzU5IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAyNSAgZGl2aWRlICAgMS41NzU2NzAyNjk0NDA3NjE4NDYxMDk2MDI0Mjk2MTI2NDRFKzM3MCAgICA2NTMxOTk2NDkzMjQ3NDAzMDAuMDA2MTg1NDgyNjQzNDM5ICAgICAgICAgIC0+ICAgMi40MTIyMzM3OTU3MDAzNTkxNzA5MDQ1ODg1NDgwNDE0ODFFKzM1MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMjYgIGRpdmlkZSAgLTIxMTI0MjIzMTE3MzM0NDg5MjQ1NzM0MzIxOTIuNjIwMTQ1ICAgICAgICAtODAwNjcyMDYuMDM1OTA2OTMxNTM4NDgyMTU4NDg2MTM0MDYgICAgICAgICAtPiAgIDI2MzgzMTE1MDg5NDE3NjYwMTc1LjIwMTAyNjQ2NzU2NTc0IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAyNyAgZGl2aWRlICAtNjcwOTY1MzYwNTEyNzk4MDkuMzIyMTg2MTE1NDg3MjE4MzkgICAgICAgIC04Njk2ODU0MTI4ODE5NDEwODE2NjQyNTE5OTAxODEuMTA0OSAgICAgICAgIC0+ICAgNy43MTUwMzUyMzY1ODQ4MDU5MjEyNzg1NjYzNjUyMzExNjhFLTE0IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAyOCAgZGl2aWRlICAtNTg2MTI5MDg1NDg5NjIwNDcuMjE4NjY5MTM0MjU0ODg5NzIgICAgICAgIC05Nzg0NDk1OTc1MzEuMzg3MzY2NTU4MzQ3NTYzMzgzMTY0NCAgICAgICAgIC0+ICAgNTk5MDMuODYwODU5OTE3MDMwOTEyMzY1MDc4NTk4MzcwMjMgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDI5ICBkaXZpZGUgIC0xMzMwMzI0MTIwMTA5NDIuMTQ3Njg2NDEzODIxMzMxOTc5NiAgICAgICAgLTcuODgyMDU5MjkzNDk4NjcwNzA1NDQ2NTI4NjQ4MjAxMzU5RS00MjggICAgLT4gICAxLjY4Nzc4NzUwNjUwNDQzMzA2NDU0OTUxNTY4MTY5MzcxNUUrNDQxIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAzMCAgZGl2aWRlICAgMS44Mzc0NjY5ODMzODk2NjAyOTQ5MjI5OTcxNjM2MDUxM0UrOTc3ICAgIC05Ljg5NzkyNjYwODk3OTY0OTk1MTY3MjgzOTg3OTEyODYwM0UrMTU0ICAgIC0+ICAtMS44NTY0MTYwNTE1NDIyMTI1NTIwNDIzOTAyMTgwNjI0NThFKzgyMiBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMzEgIGRpdmlkZSAgLTExMzc0MjQ3NTg0MTM5OTIzNjMwNzEyODk2Mi4xNTA3MDYzICAgICAgICAgODI5ODYwMi4yMDMwNDk4MzQ3MzI2NTc1Njc5NjUyNjI5ODkgICAgICAgICAtPiAgLTEzNzA2MjIxMDA2NjY1MTM3ODI2LjE2NTU3MzkzOTE5OTI5IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAzMiAgZGl2aWRlICAgMTk2LjQ3ODc1NzQ2NTA3NTQxNTI5OTU5NDE4MDgzMzE4NjIgICAgICAgICA5MjkuNjU1MzM4ODQ3MjMxODA5NDQyNzQyMjExNzE3MjM5NCAgICAgICAgIC0+ICAgMC4yMTEzNDU4MDY2MTc2NTI2NjUxMDA2OTE3OTIyODE0MDE4IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAzMyAgZGl2aWRlICAgNzE5MzEyMjE0NjUuNDM4Njc5OTYyODI4MDM2MjgxMzAzNTAgICAgICAgICAzODM4Njg1OTM0MjA2NDI2MjU3MDkwNzE4LjQwMjI0ODg1MyAgICAgICAgIC0+ICAgMS44NzM4NTAxMzI1Mjc0MjM0MTM2MDcxOTk1MTMzMjQwMjFFLTE0IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAzNCAgZGl2aWRlICAgNDg4LjQyODI1MDIyODk2NTE2NTM3ODM1OTYyNDYzMTI4ODUgICAgICAgIC04MC42ODk0MDk1NjgwNjYzNDI4MDA3ODcwNjU3Nzk1MzE4OCAgICAgICAgIC0+ICAtNi4wNTMxODkwNDcyODA2OTMzMTg4NDQ4MDE4OTk0NzMyNzIgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDM1ICBkaXZpZGUgICA5LjAwMTc2NDM0NDk2MzkyMTc1NDk4MTc2MjkxMzI0NzM5NEUtMTYyICAgLTguNTg1NTQwOTczNjY3MjA1NzUzNzM0OTY3NjQ1Mzg2OTE5RS03MjkgICAgLT4gIC0xLjA0ODQ3OTU3NDI3MTgyNzMyNjM5NjAxMjU3MzIzMjkzNEUrNTY3IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAzNiAgZGl2aWRlICAtNy40MDQxMzM5NTk0MDk4OTQ3NDM3MDY0MDI4NTcxNDU0NzFFLTgyOCAgIC01MS4zODE1OTkyOTQ2MDI4OTcxMTEzNDY4NDg0MzA4NjI2NSAgICAgICAgIC0+ICAgMS40NDEwMDg4NTU1MTYwMjk0NjEwMzIwNjE3ODUyMTk3NzNFLTgyOSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMzcgIGRpdmlkZSAgIDIuOTY3NTIwMjM1NTc0NDE5Nzk0MDQ4OTk0NDM2MDQwNzE3RS02MTMgICAtNjI1MjUxMzg1NS45MTM5NDg5NDk0OTg3OTI2MjczMTg4OSAgICAgICAgICAtPiAgLTQuNzQ2MTIzNDA1NjU2NDA5MTI3NTcyOTk4NzUxODg1MzM4RS02MjMgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDM4ICBkaXZpZGUgIC0xODgyNjg1MjY1NDgyNDA0MDUwNS44MzkyMDM2Njc2NTA1MSAgICAgICAgLTYzMzY5MjQ4Nzc5NDI0Mzc5OTI1OTA1NTc0NjAxNDczNDAgICAgICAgICAgLT4gICAyLjk3MDk3NjE0NjU0NjQ5NDY2OTgwNzg4NjI3ODUxOTE5NEUtMTUgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDM5ICBkaXZpZGUgIC04LjEwMTQwNjc4NDgwOTE5NzYwNDk0OTU4NDAwMTczNTk0OUUrNTYxICAgIDQuODIzMzAwMzA2OTQ4OTQyODIxMDc2NjgxNjU4NzcxNjM1RSszNjEgICAgLT4gIC0xLjY3OTYzOTcyMTYxMDgzOTIwNDczODQ0NTc0NzIzODk4N0UrMjAwIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA0MCAgZGl2aWRlICAtNi4xMTk4MTk3Nzc3MzA5NDA1MjMzMTA2MjU4NTE5MTcyM0UrMjk1ICAgICAxLjUwNzYxMDI1Mzc1NTMzOTMyODMwMjc3OTAwNTU4NjUzNEUrMjM4ICAgIC0+ICAtNC4wNTkyODUwNTg5MTE1NzcyNDQwNDQ0MTg0MTYwNDQ3NjNFKzU3IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA0MSAgZGl2aWRlICAgNi40NzI2Mzg4NTAwNDY4MTU4ODA1OTkyMjA1MzQyNzQwNTVFLTU5NiAgIC00LjQ3NTIzMzcxMjA4MzA0NzUxNjkzMzkxMTc4NjE1OTk3MiAgICAgICAgIC0+ICAtMS40NDYzMjQyMDcwNjIyNjE3NDU1MjA0OTY0NzU3Nzg4NzlFLTU5NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNDIgIGRpdmlkZSAgLTg0NDM4NTkzMzMwLjcxMjc3ODM5NjMxMTQ0NTA5Mzk3MTEyICAgICAgICAtNTg2Njg0NTk2MjA0NDAxNjY0MjA4OTQ3LjQwNTQ4Nzk2MzMgICAgICAgICAtPiAgIDEuNDM5MjUwMjE4NTUwMDQxMjI4NzU5OTgzOTM3NzcyNTA0RS0xMyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNDMgIGRpdmlkZSAgIDkuMzU0NTMzMjMzMjk0MDIyNjE2Njk1ODE1NjU2NzA0MzY5RS0yNCAgICAgNDA1LjUwMDM5MDYyNjEzNTMwNDI1MjE0NDE2MzU5MTc0NiAgICAgICAgICAtPiAgIDIuMzA2OTExMDI4ODI3Nzc0NTQ5NzQwNTcxMjI5NzM2MTk4RS0yNiBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNDQgIGRpdmlkZSAgIDk4NTYwNjQyMzM1MDIxMC43Mzc0ODc2NjUwMTQ5OTU3ODgxICAgICAgICAtMzY4MTE1NjM2OTcuNDE5MjU2ODE4NjY2OTQ4NTk4Mjg3OTQgICAgICAgICAtPiAgLTI2Nzc0LjM2OTkwODY0MTE5NDQ1MzM1ODEzMzU0NzE3NzExIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA0NSAgZGl2aWRlICAtOC4xODcyODA3NzQxNzc3MTU3MDYyNzgwMDIyNDc3NjYzMTFFLTEyMyAgIC0zODc4NDEyNDM5My45MTIxMjg3MDgyODQzMDAwMTMwMDA2OCAgICAgICAgIC0+ICAgMi4xMTA5ODc2NTMzNTYxMzkxNDczNTcyNDA3Mjc3OTQzNjVFLTEzMyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNDYgIGRpdmlkZSAgLTQuNjEyMjAzMTI2MzUwMDcwOTAzNDU5MjQ1Nzk4MzcxNjU3RSs5MTIgICAgNy45NzE1NjIxODI3Mjc5NTYyOTA5MDE5ODQ3MzY4MDA1MTlFKzY0ICAgICAtPiAgLTUuNzg1ODIwOTIyNzA4NjgzMjM3MDk4ODI2NjYyNzY5NzQ4RSs4NDcgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDQ3ICBkaXZpZGUgICA0LjY2MTAxNTkwOTQyMTQ4NTI5ODI0NzkyODk2Nzk3NzA4OUUrODg4ICAgLTYuMzYwOTExMjUzMzIzOTIyMzM4NzM3MzExNTYzODQ1NTgxRSszODggICAgLT4gIC03LjMyNzU5MTQ3ODMyMTM2NTk4MDE1NjY1NDUzOTYzODgzNkUrNDk5IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA0OCAgZGl2aWRlICAgOTE1NjA3ODE3MjkwMy4yNTc1MDAwMDMyNjA3MTA4MzMwMzAgICAgICAgICA3LjE4OTc5NjY1MzI2MjE0NzEzOTA3MTYzNDIzNzk2NDA3NEUtOTAgICAgIC0+ICAgMS4yNzM0ODIyMTU3NjYwMDA5OTQzNjUyMDE1NDUwOTYwMjZFKzEwMiBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNDkgIGRpdmlkZSAgLTEuNzEwNzIyMzAzMzI3NDc2NTg2MzczNDc3NzgxMjc2NTg2RS0zMTEgICAtMzE2NzU2MTYyODI2MDE1NjgzNzMyOTMyMy43MjkzODA2OTUgICAgICAgICAtPiAgIDUuNDAwNzU0NTk5NTc4NjEzOTg0ODc1NzUyOTU4NjQ1NjU1RS0zMzYgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDUwICBkaXZpZGUgIC00LjY0NzkzNTIxMDg4MTgwNjIzODMyMTYxNjM0NTQxMzAyMUUtODc4ICAgIDIwOTM4OC41NDMxODY3NzQ0NjQ4MTc3MzA4NDYwNjM5NTgyICAgICAgICAgLT4gIC0yLjIxOTc2NTc3MTM5NDU5MzczMzE0MDQ5NDI5NzM4ODE0MEUtODgzIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA1MSAgZGl2aWRlICAgNTk1OC42OTQ3MjgzOTU3NjA5OTI3MTkwODQ3ODE1ODI3MDAgICAgICAgICA0LjU0MTUxMDE1NjU2NDMxNTYzMjUzNjM1MzE3MTg0NjA5NkUtNzQ2ICAgIC0+ICAgMS4zMTIwNTEzOTMyNTM2Mzg2NjQ5NDc4NTI2OTMwMDU0ODBFKzc0OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNTIgIGRpdmlkZSAgLTcuOTM1NzMyNTQ0NjQ5NzAyMTc1MjU2Njk5ODg2ODcyMDkzRS00ODkgICAtNy40MzMzMjkwNzM2NjQ3OTMxMzg5OTg3NjU2NDc0Njc5NzFFKzM2MCAgICAtPiAgIDEuMDY3NTg3OTQ5NjI2MDc2OTE3NjcyMjcxNjE5NjY0NjU2RS04NDkgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDUzICBkaXZpZGUgIC0yNzQ2NjUwODY0NjAxMTU3Ljg2MzU4OTk1OTkzOTkwMTM1MCAgICAgICAgIDcuMDE2Njg0OTQ1NTA3NjQ3NTI4OTA3MTg0Njk0MzU5NTk4RSs1NDggICAgLT4gIC0zLjkxNDQ1NjU5MzAwOTMwOTUyOTM1MTI1NDk1MDQyOTkzMkUtNTM0IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA1NCAgZGl2aWRlICAgMzYwNTE0OTQwODYzMTE5NzM2NTQ0Nzk1My45OTQ1NjkxNzggICAgICAgIC03NTYxNDAyNTgyNTY0OTA4Mi43ODI2NDg2NDQyODIzNzgzMyAgICAgICAgIC0+ICAtNDc2NzgzMTUuODg0NzI2OTM1MDcwNjAwNjMxODgwMjA1MzIgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDU1ICBkaXZpZGUgICA3ODgxOTQzMjA5MjE3OTg0MDQ5MDYzNzUyMTQuMTk2MzQ5ICAgICAgICAgLTYuMjIyNzE4MTQ4NDMzMjQ3Mzg0OTMyNTczNDAxOTc2MzM3RS00MTggICAgLT4gIC0xLjI2NjYzOTkxODYzNDY3MTgwMzk4MjIyMjI0NDk3NzI4N0UrNDQ0IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA1NiAgZGl2aWRlICAgNTYyMDcyMjczMDUzNDc1Mi43NTgyMDg5NDM0NDc2MDMyMTEgICAgICAgICA2Ljg0MzU1Mjg0MTE2ODUzODMxOTEyMzAwMDkxNzY1Nzc1OUUtMTM5ICAgIC0+ICAgOC4yMTMxNjQ4MDA0ODU0MzQ2NjY2Mjk5NzA0NDM3Mzk1NTRFKzE1MyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNTcgIGRpdmlkZSAgIDczMDQ1MzQ2NzY3MTM3MDM5MzgxMDIuNDAzOTQ5MDE5NDAyICAgICAgICAtNTc2MTY5LjM2ODUwMTA5MzUxMDgxNTMwMjM4MDM1OTA4MzUgICAgICAgICAtPiAgLTEyNjc3NzU2MDE0MjAxOTk1LjMxOTY5MjM3MTQ0Mzk0NzcyIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA1OCAgZGl2aWRlICAgODA2NzkxODc2Mi4xMzQ2MjE2MzkyNTQ5MTY3ODY5NDU1NDcgICAgICAgIC04Ljc3NDc3MTQ4MDA1NTUzNjAwOTEwNTU5NjE2Mzg2NDc1OEUrOTU0ICAgIC0+ICAtOS4xOTQ0NDg4NTg4MzYzMzIxNTY3NjY3NjQ2MDUxMjUyNDVFLTk0NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNTkgIGRpdmlkZSAgIDguNzAyMDkzNDU0MTIzMDQ2NTA3NTc4MjU2ODk5NTM3NTYzRS0zMjQgICAtNS44NzUzOTk3MzMwMTYwMTg0MDQ1ODAyMDExNzY1NzYyOTNFLTQwMSAgICAtPiAgLTEuNDgxMTA2NjIyNDUyMDUyNTgxNDcwNDQzNTI2OTU3MzM1RSs3NyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNjAgIGRpdmlkZSAgLTQxNDI2LjAxNjYyNTE4NDUxODYxMzg2MzUyNDE1MDkyMzU2ICAgICAgICAgOTAuMDAxNDY2MjE2ODQ0NzgzMDA1MTA3Njk4MDIwMTM0NjQgICAgICAgICAtPiAgLTQ2MC4yODE1NzUwMjg3MzE4NjkyNzMyMDY3NzA5MTc2MjAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHJhbmRvbSBkaXZpZGUgdGVzdHMgd2l0aCByZXN1bHQgbmVhciAxDQotZHFkaXY0MDAxIGRpdmlkZSAgMjAwMzEwMDM1Mjc3MDc1Mzk2OTg3ODkyNTY2NDUyNDkwMCAgIDIwMDMxMDAzNTI3NzA3NTM5Njk4Nzg5MjU2NjQ0OTc4MjQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMzUxNyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDAyIGRpdmlkZSAgNDgxNzc4NTc5MzkxNjQ5MDY1MjU3OTU1MjMxODM3MTY0NSAgIDQ4MTc3ODU3OTM5MTY0OTA2NTI1Nzk1NTIzMTgzNjIwOTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTk4MiAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDAzIGRpdmlkZSAgODI5OTE4NzQxMDkyMDA2NzMyNTY0ODA2ODQzOTU2MDI4MiAgIDgyOTkxODc0MTA5MjAwNjczMjU2NDgwNjg0Mzk1OTExNTkgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjI3OTUgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAwNCBkaXZpZGUgIDU2NDEwODg0NTU4OTc0MDcwNDQ1NDQ0NjE3ODUzNjU4OTkgICA1NjQxMDg4NDU1ODk3NDA3MDQ0NTQ0NDYxNzg1Mzg5OTY1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU3MzM4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMDUgZGl2aWRlICA1NzUyMjc0Njk0NzA2NTQ1MzU5MzI2MzYxMzEzNDkwNDI0ICAgNTc1MjI3NDY5NDcwNjU0NTM1OTMyNjM2MTMxMzUwMjcyMyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODYxOSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDA2IGRpdmlkZSAgNjc2MjA3OTQ3NzM3MzY3MDU5NDgyOTMxOTM0NjA5OTY2NSAgIDY3NjIwNzk0NzczNzM2NzA1OTQ4MjkzMTkzNDYxMzI1NzkgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTEzMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAwNyBkaXZpZGUgIDcyODY0MjUxNTM2OTE4OTAzNDE2MzMwMjMyMjI2MDI5MTYgICA3Mjg2NDI1MTUzNjkxODkwMzQxNjMzMDIzMjIyNjA2NTU2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDA0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMDggZGl2aWRlICA5NDgxMjMzOTkxOTAxMzA1NzI3NjQ4MzA2NDIxOTQ2NjU1ICAgOTQ4MTIzMzk5MTkwMTMwNTcyNzY0ODMwNjQyMTkxOTEyNCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTA0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMDkgZGl2aWRlICA0MjgyMDUzOTQxODkzOTUxNzQyMDI5NDQ0MDY1NjE0MzExICAgNDI4MjA1Mzk0MTg5Mzk1MTc0MjAyOTQ0NDA2NTU4MzA3NyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Mjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMTAgZGl2aWRlICAgNjI2ODg4MjI1NDQxMjUwNjM5NzQxNzgxODUwMzM4Njk1ICAgIDYyNjg4ODIyNTQ0MTI1MDYzOTc0MTc4MTg1MDMyNzI5OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MTc5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMTEgZGl2aWRlICAzODYwOTczNjQ5MjIyMDI4MDA5NDU2NTk4NjA0NDY4NTQ3ICAgMzg2MDk3MzY0OTIyMjAyODAwOTQ1NjU5ODYwNDQ3Njg0OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODQ5OCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDEyIGRpdmlkZSAgNDc1MzE1NzA4MDEyNzQ2ODEyNzkwODA2MDYwNzgyMTgzOSAgIDQ3NTMxNTcwODAxMjc0NjgxMjc5MDgwNjA2MDc3ODgzNzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzA0MCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDEzIGRpdmlkZSAgIDU1MjQ0ODU0NjIwMzc1NDA2MjgwNTcwNjI3Nzg4MDQxOSAgICA1NTI0NDg1NDYyMDM3NTQwNjI4MDU3MDYyNzc4ODE5MDMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzMxMzggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAxNCBkaXZpZGUgIDg0MDU5NTQ1Mjc5NTIxNTg0NTUzMjM3MTM3Mjg5MTczOTUgICA4NDA1OTU0NTI3OTUyMTU4NDU1MzIzNzEzNzI4OTMzODY2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgwNDA2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMTUgZGl2aWRlICA3NTU0MDk2NTAyMjM1MzIxMTQyNTU1ODAyMjM4MDE2MTE2ICAgNzU1NDA5NjUwMjIzNTMyMTE0MjU1NTgwMjIzODAyNjU0NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4NjE5MyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDE2IGRpdmlkZSAgNDA1MzI1NzY3NDEyNzUxODYwNjg3MTA1NDkzNDc0Njc4MiAgIDQwNTMyNTc2NzQxMjc1MTg2MDY4NzEwNTQ5MzQ3NjczNTUgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDkyNDMgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAxNyBkaXZpZGUgIDcxMTI0MTk0MjA3NTUwOTA0NTQ3MTY4ODg4NDQwMTE1ODIgICA3MTEyNDE5NDIwNzU1MDkwNDU0NzE2ODg4ODQ0MDM4MTA1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYyNzA5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMTggZGl2aWRlICAzMTMyMzAyMTM3NTIwMDcyNzI4MTY0NTQ5NzMwOTExODQ2ICAgMzEzMjMwMjEzNzUyMDA3MjcyODE2NDU0OTczMDkwODQxNiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDk1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMTkgZGl2aWRlICA0Nzg4Mzc0MDQ1ODQxNDE2MzU1NzA2NzE1MDQ4MTYxMDEzICAgNDc4ODM3NDA0NTg0MTQxNjM1NTcwNjcxNTA0ODE5MDA3NyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzOTMwMyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDIwIGRpdmlkZSAgOTQ2NjAyMTYzNjA0NzYzMDIxODIzODA3NTA5OTUxMDU5NyAgIDk0NjYwMjE2MzYwNDc2MzAyMTgyMzgwNzUwOTk0ODQwNTMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgwNCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDIxIGRpdmlkZSAgIDkxMjc0Mjc0NTY0Njc2NTYyNTU5NzM5OTY5MjEzODY1MCAgICA5MTI3NDI3NDU2NDY3NjU2MjU1OTczOTk2OTIxMzkwNDIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU3MDUgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAyMiBkaXZpZGUgIDk1MDg0MDI3NDI5MzM2NDMyMDg4MDYyNjQ4OTcxODg1MDQgICA5NTA4NDAyNzQyOTMzNjQzMjA4ODA2MjY0ODk3MTk1OTczICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMTQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMjMgZGl2aWRlICAxMTg2OTU2Nzk1NzI3MjMzNzA0OTYyMzYxOTE0MzYwODk1ICAgMTE4Njk1Njc5NTcyNzIzMzcwNDk2MjM2MTkxNDMyOTU3NyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Mzg1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMjQgZGl2aWRlICA1OTcyMjEwMjY4ODM5MDE0ODEyNjk2OTE2MTcwOTY3OTM4ICAgNTk3MjIxMDI2ODgzOTAxNDgxMjY5NjkxNjE3MDk1NDk3NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMTcxICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMjUgZGl2aWRlICAyMzAzODAxNjI1NTIxNjE5OTMwODk0NDYwMTM5NzkzMTQwICAgMjMwMzgwMTYyNTUyMTYxOTkzMDg5NDQ2MDEzOTc5OTY0MyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MTc3MyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDI2IGRpdmlkZSAgNjAyMjIzMTU2MDAwMjg5ODI2NDc3NzM5MzQ3Mzk2NjU5NSAgIDYwMjIyMzE1NjAwMDI4OTgyNjQ3NzczOTM0NzM5NDcxOTggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIyMSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDI3IGRpdmlkZSAgODQyNjE0ODMzNTgwMTM5NjE5OTk2OTM0NjAzMjIxMDg5MyAgIDg0MjYxNDgzMzU4MDEzOTYxOTk5NjkzNDYwMzIyMDMxNzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxNSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDI4IGRpdmlkZSAgODgxMjI3ODk0NzAyODc4NDYzNzM4Mjg0NzA5ODQxMTc0OSAgIDg4MTIyNzg5NDcwMjg3ODQ2MzczODI4NDcwOTgzODUzMTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk5OSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDI5IGRpdmlkZSAgODE0NTI4MjAwMjM0ODM2NzM4MzI2NDE5NzE3MDExNjE0NiAgIDgxNDUyODIwMDIzNDgzNjczODMyNjQxOTcxNzAwODM5ODggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzk0OCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDMwIGRpdmlkZSAgNjgyMTU3NzU3MTg3Njg0MDE1MzEyMzUxMDEwNzM4NzAyNiAgIDY4MjE1Nzc1NzE4NzY4NDAxNTMxMjM1MTAxMDc0MTgwMDggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTQ1ODIgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAzMSBkaXZpZGUgIDkwMTg1NTUzMTk1MTg5NjY5NzA0ODA1NjU0ODIwMjM3MjAgICA5MDE4NTU1MzE5NTE4OTY2OTcwNDgwNTY1NDgyMDEzMzQ2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExNTAgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAzMiBkaXZpZGUgIDQ2MDIxNTU3MTI5OTgyMjg0NDk2NDA3MTcyNTI3ODg4NjQgICA0NjAyMTU1NzEyOTk4MjI4NDQ5NjQwNzE3MjUyODE4NTAyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTM1NjAwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMzMgZGl2aWRlICA2Njc1NjA3NDgxNTIyNzg1NjE0NTA2ODI4MjkyMjY0NDcyICAgNjY3NTYwNzQ4MTUyMjc4NTYxNDUwNjgyODI5MjI3NzEwMCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4MTA4MyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDM0IGRpdmlkZSAgNDAxNTg4MTUxNjg3MTgzMzg5Nzc2Njk0NTgzNjI2NDQ3MiAgIDQwMTU4ODE1MTY4NzE4MzM4OTc3NjY5NDU4MzYyNjI2NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1NSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDM1IGRpdmlkZSAgMTQxNTU4MDIwNTkzMzQxMTgzNzU5NTQ1OTcxNjkxMDM2NSAgIDE0MTU1ODAyMDU5MzM0MTE4Mzc1OTU0NTk3MTY4ODAxMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMTM1MiAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDM2IGRpdmlkZSAgOTQzMjk2ODI5NzA2OTU0MjgxNjc1MjAzNTI3NjM2MTU1MiAgIDk0MzI5NjgyOTcwNjk1NDI4MTY3NTIwMzUyNzYzNTMwNTQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDM3IGRpdmlkZSAgNDc5OTMxOTU5MTMwMzg0ODUwMDUzMjc2NjY4MjE0MDY1OCAgIDQ3OTkzMTk1OTEzMDM4NDg1MDA1MzI3NjY2ODIxNzI2NTUgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MzMzMzAgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAzOCBkaXZpZGUgICAzMTY4NTQyNzA3MzI4Mzk1Mjk3OTA1ODQyODQ5ODc0NzIgICAgMzE2ODU0MjcwNzMyODM5NTI5NzkwNTg0Mjg1MDA0ODMyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDUyMTE0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMzkgZGl2aWRlICAzNTk4OTgxMzAwNTkyNDkwNDI3ODI2MDI3OTc1Njk3NDE1ICAgMzU5ODk4MTMwMDU5MjQ5MDQyNzgyNjAyNzk3NTY4NjcxMiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTc0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNDAgZGl2aWRlICAxNjY0MzE1NDM1Njk0NDYxMzcxMTU1ODAwNjgyMTk2NTIwICAgMTY2NDMxNTQzNTY5NDQ2MTM3MTE1NTgwMDY4MjE5NTYxNyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQzICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNDEgZGl2aWRlICAxNjgwODcyMzE2NTMxMTI4ODkwMTAyODU1MzE2NTEwNTgxICAgMTY4MDg3MjMxNjUzMTEyODg5MDEwMjg1NTMxNjQ5NTU0NSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNDIgZGl2aWRlICA5ODgxMjc0ODc5NTY2NDA1NDc1NzU1NDk5MjgxNjQ0NzMwICAgOTg4MTI3NDg3OTU2NjQwNTQ3NTc1NTQ5OTI4MTYxNTc0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTM0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNDMgZGl2aWRlICA0NzM3MjI1OTU3NzE3NDY2OTYwNDQ3MjA0MjMyMjc5MjE2ICAgNDczNzIyNTk1NzcxNzQ2Njk2MDQ0NzIwNDIzMjI3NzQ1MiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcyICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNDQgZGl2aWRlICAyNDgyMDk3Mzc5NDE0ODY3MDYxMjEzMzE5MzQ2NDE4Mjg4ICAgMjQ4MjA5NzM3OTQxNDg2NzA2MTIxMzMxOTM0NjM4NzkzNiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNDUgZGl2aWRlICA3NDA2OTc3NTk1MjMzNzYyNzIzNTc2NDM0MTIyMTYxODY4ICAgNzQwNjk3NzU5NTIzMzc2MjcyMzU3NjQzNDEyMjE4OTA0MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2MzMxMyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDQ2IGRpdmlkZSAgIDIyODc4MjA1Nzc1NzU2NjA0NzA4NjU5MzI4MTc3MzU3NyAgICAyMjg3ODIwNTc3NTc1NjYwNDcwODY1OTMyODE3Njk3MjcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNjgyOCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDQ3IGRpdmlkZSAgMjk1NjU5NDI3MDI0MDU3OTY0ODgyMzI3MDU0MDM2NzY1MyAgIDI5NTY1OTQyNzAyNDA1Nzk2NDg4MjMyNzA1NDAzNjg1NTYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY5NDYgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA0OCBkaXZpZGUgIDYzMjY5NjQwOTg4OTc2MjA2MjA1MzQxMzY3Njc2MzQzNDAgICA2MzI2OTY0MDk4ODk3NjIwNjIwNTM0MTM2NzY3NjE5MzM5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzNzEgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA0OSBkaXZpZGUgICA0MTQ1ODY0NDA0NTY1OTAyMTUyNDcwMDI2NzgzMjc4MDAgICAgNDE0NTg2NDQwNDU2NTkwMjE1MjQ3MDAyNjc4MzE2OTIyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYyMzggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA1MCBkaXZpZGUgIDczNjQ1NTIyMDg1NzAwMzkzODYyMjA1MDU2MzY3NzkxMjUgICA3MzY0NTUyMjA4NTcwMDM5Mzg2MjIwNTA1NjM2ODAzNTQ4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY2ODM3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNTEgZGl2aWRlICA1NjI2MjY2NzQ5OTAyMzY5NzEwMDIyODI0OTUwNTkwMDU2ICAgNTYyNjI2Njc0OTkwMjM2OTcxMDAyMjgyNDk1MDU5MTAwOCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODMwOCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDUyIGRpdmlkZSAgNDg2MzI3ODI5MzkxNjE5NzQ1NDk4NzQ4MTM0MzQ2MDQ4NCAgIDQ4NjMyNzgyOTM5MTYxOTc0NTQ5ODc0ODEzNDM0NDI1MjIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzY5MyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDUzIGRpdmlkZSAgMTE3MDcxMzU4MjAzMDYzNzM1OTcxMzI0OTc5NjgzNTQ4MyAgIDExNzA3MTM1ODIwMzA2MzczNTk3MTMyNDk3OTY4MjMzNDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDM2OCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDU0IGRpdmlkZSAgOTgzODA2MjQ5NDcyNTk2NTY2Nzc3NjMyNjU1NjA1MjkzMSAgIDk4MzgwNjI0OTQ3MjU5NjU2Njc3NzYzMjY1NTYwNjEwMDIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTE3OTYgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA1NSBkaXZpZGUgIDQwNzEzODg3MzEyOTg4NjEwOTMwMDU2ODcwOTE0OTg5MjIgICA0MDcxMzg4NzMxMjk4ODYxMDkzMDA1Njg3MDkxNDk4Mjc4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNTggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA1NiBkaXZpZGUgIDg3NTMxNTU3MjIzMjQ3MDY3OTU4NTUwMzg1OTAyNzI1MjYgICA4NzUzMTU1NzIyMzI0NzA2Nzk1ODU1MDM4NTkwMjc2NjU2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MjgyICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNTcgZGl2aWRlICA0Mzk5OTQxOTExNTMzMjczNDE4ODQ0NzQyNjU4MjQwNDg1ICAgNDM5OTk0MTkxMTUzMzI3MzQxODg0NDc0MjY1ODIxOTg5MSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NjgxICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNTggZGl2aWRlICA0MTI3ODg0MTU5OTQ5NTAzNjc3Nzc2NDMwNjIwMDUwMjY5ICAgNDEyNzg4NDE1OTk0OTUwMzY3Nzc3NjQzMDYyMDAyNjA5MSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ODU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNTkgZGl2aWRlICA1NTM2MTYwODIyMzYwODAwMDY3MDQyNTI4MzE3NDM4ODA4ICAgNTUzNjE2MDgyMjM2MDgwMDA2NzA0MjUyODMxNzQ1MDY4NyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODU0MyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDYwIGRpdmlkZSAgMzk3MzIzNDk5ODQ2ODY2NDkzNjY3MTA4ODIzNzcxMDI0NiAgIDM5NzMyMzQ5OTg0Njg2NjQ5MzY2NzEwODgyMzc3NDE4ODYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjAzNjcgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA2MSBkaXZpZGUgIDk4MjQ4NTU5MzU2MzgyNjM1OTM0MTA0NDQxNDIzMjczNTggICA5ODI0ODU1OTM1NjM4MjYzNTkzNDEwNDQ0MTQyMzI4NTc2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4NzYwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNjIgZGl2aWRlICA1OTE3MDc4NTE3MzQwMjE4MTMxODY3MzI3MzAwODE0ODY3ICAgNTkxNzA3ODUxNzM0MDIxODEzMTg2NzMyNzMwMDc4ODcwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NDIyICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNjMgZGl2aWRlICA0MzU0MjM2NjAxODMwNTQ0ODgyMjg2MTM5NjEyNTIxMzYyICAgNDM1NDIzNjYwMTgzMDU0NDg4MjI4NjEzOTYxMjU0MzIyMyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0OTc5NCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDY0IGRpdmlkZSAgODA1ODQ3NDc3MjM3NTI1OTAxNzM0MjExMDAxMzg5MTI5NCAgIDgwNTg0NzQ3NzIzNzUyNTkwMTczNDIxMTAwMTM5MDY3OTIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODA3NjggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA2NSBkaXZpZGUgIDU1MTk2MDQwMjA5ODE3NDgxNzA1MTcwOTM3NDYxNjYzMjggICA1NTE5NjA0MDIwOTgxNzQ4MTcwNTE3MDkzNzQ2MTgxNzYzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcyMDM2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNjYgZGl2aWRlICAxNTAyMTMwOTY2ODc5ODA1NDU4ODMxMzIzNzgyNDQzMTM5ICAgMTUwMjEzMDk2Njg3OTgwNTQ1ODgzMTMyMzc4MjQxMjIxMyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNTg4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNjcgZGl2aWRlICAgNTYyNzk1NjMzNzE5NDgxMjEyOTE1MTU5Nzg3OTgwMjcwICAgIDU2Mjc5NTYzMzcxOTQ4MTIxMjkxNTE1OTc4ODAwNzA2NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUyMzg3NyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDY4IGRpdmlkZSAgNjU4NDc0MzMyNDQ5NDY2NDI3Mzk0MTI4MTU1NzI2ODg3OCAgIDY1ODQ3NDMzMjQ0OTQ2NjQyNzM5NDEyODE1NTcyNTg5NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUwOCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDY5IGRpdmlkZSAgMzYzMjAwMDMyNzI4NTc0Mzk5Nzk3NjQzMTEwOTQxNjUwMCAgIDM2MzIwMDAzMjcyODU3NDM5OTc5NzY0MzExMDk0MDgxMDcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMxMSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDcwIGRpdmlkZSAgMTE0NTgyNzIzNzMxNTQzMDA4OTM4ODk1MzgzODU2MTQ1MCAgIDExNDU4MjcyMzczMTU0MzAwODkzODg5NTM4Mzg1MjczMzIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTc3NiAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDcxIGRpdmlkZSAgODg3NDQzMTAxMDM1NzY5MTg2OTcyNTM3MjMxNzM1MDM4MCAgIDg4NzQ0MzEwMTAzNTc2OTE4Njk3MjUzNzIzMTczMTY0NzIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgyMSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDcyIGRpdmlkZSAgIDk5Mjk0ODcxODkwMjgwNDY0ODExOTc1MzE0MTIwMjE5NiAgICA5OTI5NDg3MTg5MDI4MDQ2NDgxMTk3NTMxNDEyMzUyMjIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2NjczOTUgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA3MyBkaXZpZGUgIDI1MjI3MzUxODMzNzQyMTg1MDUxNDI0MTcyNjU0Mzk5ODkgICAyNTIyNzM1MTgzMzc0MjE4NTA1MTQyNDE3MjY1NDUzNzc5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ1MzM3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNzQgZGl2aWRlICAyNjY4NDE5MTYxOTEyOTM2NTA4MDA2ODcyMzAzNTAxMDUyICAgMjY2ODQxOTE2MTkxMjkzNjUwODAwNjg3MjMwMzQ3MTAzNiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMjQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNzUgZGl2aWRlICAzMDM2MTY5MDg1NjY1MTg2NzEyNTkwOTQxMTExNzc1MDkyICAgMzAzNjE2OTA4NTY2NTE4NjcxMjU5MDk0MTExMTgwODg0NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg4ODgyNyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDc2IGRpdmlkZSAgOTQ0MTYzNDYwNDkxNzIzMTYzODUwODg5ODkzNDAwNjE0NyAgIDk0NDE2MzQ2MDQ5MTcyMzE2Mzg1MDg4OTg5MzQwMDAyODggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyMSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDc3IGRpdmlkZSAgMjY3NzMwMTM1MzE2NDM3NzA5MTExMTQ1ODgxMTgzOTE5MCAgIDI2NzczMDEzNTMxNjQzNzcwOTExMTE0NTg4MTE4Njc3MjIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4OTM0MzAgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA3OCBkaXZpZGUgIDY4NDQ5NzkyMDMxMTIwNjYxNjY1ODM3NjU4NTcxNzE0MjYgICA2ODQ0OTc5MjAzMTEyMDY2MTY2NTgzNzY1ODU3MTg5NjgyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTczMzI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNzkgZGl2aWRlICAyMjIwMzM3NDM1MTQxNzk2NzI0MzIzNzgzOTYwMjMxNjYxICAgMjIyMDMzNzQzNTE0MTc5NjcyNDMyMzc4Mzk2MDIwODc3OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMzA2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwODAgZGl2aWRlICA2NDQ3NDI0NzAwMDE5NzgzOTMxNTY5OTk2OTg5NTYxMzgwICAgNjQ0NzQyNDcwMDAxOTc4MzkzMTU2OTk5Njk4OTU3MjQ1NCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4MjgyNCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDgxIGRpdmlkZSAgNzUxMjg1Njc2MjY5NjYwNzExOTg0NzA5MjE5NTU4NzE4MCAgIDc1MTI4NTY3NjI2OTY2MDcxMTk4NDcwOTIxOTU1NTczNDYgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzk3MSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDgyIGRpdmlkZSAgNzM5NTI2MTk4MTE5Mzk2MDM5OTA4NzgxOTA3NzIzNzQ4MiAgIDczOTUyNjE5ODExOTM5NjAzOTkwODc4MTkwNzcyNDI0ODcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMyMzIgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA4MyBkaXZpZGUgIDIyNTM0NDI0Njc2ODI1ODQwMzU3OTI3MjQ4ODQzNzY3MzUgICAyMjUzNDQyNDY3NjgyNTg0MDM1NzkyNzI0ODg0NDA3MTc4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODY0OTA0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwODQgZGl2aWRlICA4MTUzMTM4NjgwMzAwMjEzMTM1NTc3MzM2NDY2MTkwOTk3ICAgODE1MzEzODY4MDMwMDIxMzEzNTU3NzMzNjQ2NjIyMDYwNyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2MzY4MyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDg1IGRpdmlkZSAgNDY2ODczMTI1MjI1NDE0ODA3NDA0MTAyMjY4MTgwMTM5MCAgIDQ2Njg3MzEyNTIyNTQxNDgwNzQwNDEwMjI2ODE3NzgxMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDk4OCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDg2IGRpdmlkZSAgNjA3ODQwNDU1Nzk5MzY2OTY5NjA0MDQyNTUwMTgxNTA1NiAgIDYwNzg0MDQ1NTc5OTM2Njk2OTYwNDA0MjU1MDE3OTc2MTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjg3MCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDg3IGRpdmlkZSAgMjMwNjM1MjM1OTg3NDI2MTYyMzIyMzM1Njg3ODMxNjI3OCAgIDIzMDYzNTIzNTk4NzQyNjE2MjMyMjMzNTY4NzgzMzU2MTIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MTYxNzEgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA4OCBkaXZpZGUgIDMyNjQ4NDIxODY2Njg0ODAzNjI5MDA5MDk1NjQwOTE5MDggICAzMjY0ODQyMTg2NjY4NDgwMzYyOTAwOTA5NTY0MDU4NjU4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxODQgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA4OSBkaXZpZGUgIDY5NzE5ODUwNDcyNzk2MzY4Nzg5NTc5NTk2MDg2MTIyMDQgICA2OTcxOTg1MDQ3Mjc5NjM2ODc4OTU3OTU5NjA4NjE1MDg4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ODYzICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwOTAgZGl2aWRlICA1MjYyODEwODg5OTUyNzIxMjM1NDY2NDQ1OTczODE2MjU3ICAgNTI2MjgxMDg4OTk1MjcyMTIzNTQ2NjQ0NTk3Mzc4MzA3NyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MzA1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwOTEgZGl2aWRlICA3OTQ3OTQ0NzMxMDM1MjY3MTc4NTQ4MzU3MDcwMDgwMjg4ICAgNzk0Nzk0NDczMTAzNTI2NzE3ODU0ODM1NzA3MDA2MTMzOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzg0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwOTIgZGl2aWRlICA1MDcxODA4OTA4Mzk1Mzc1MTA4MzgzMDM1ODAwNDQzMjI5ICAgNTA3MTgwODkwODM5NTM3NTEwODM4MzAzNTgwMDQxMjQyOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDczICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwOTMgZGl2aWRlICAyMDQzMTQ2NTQyMDg0NTAzNjU1NTExNTA3MjA5MjYyOTY5ICAgMjA0MzE0NjU0MjA4NDUwMzY1NTUxMTUwNzIwOTI0OTI2MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NzA4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwOTQgZGl2aWRlICA0MDk3NjMyNzM1Mzg0NTM0MTgxNjYxOTU5NzMxMjY0ODAyICAgNDA5NzYzMjczNTM4NDUzNDE4MTY2MTk1OTczMTIzNDQ5OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Mzk1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwOTUgZGl2aWRlICAzMDYxNDc3NjQyODMxMzg3NDg5NzI5NDY0NTg3MDQ0NDMwICAgMzA2MTQ3NzY0MjgzMTM4NzQ4OTcyOTQ2NDU4NzA1OTQ1MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDkzMiAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDk2IGRpdmlkZSAgMzQyOTg1NDk0MTAzOTc3NjE1OTQ5ODgwMjkzNjI1MjYzOCAgIDM0Mjk4NTQ5NDEwMzk3NzYxNTk0OTg4MDI5MzYyNDY0MTUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgxNCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDk3IGRpdmlkZSAgNDg3NDMyNDk3OTU3ODU5OTcwMDAyNDEzMzI3ODI4NDU0NSAgIDQ4NzQzMjQ5Nzk1Nzg1OTk3MDAwMjQxMzMyNzgyNjIxMzEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDU5OCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDk4IGRpdmlkZSAgNTcwMTY1MjM2OTY5MTgzMzU0MTQ1NTk3ODUxNTgyMDg4MiAgIDU3MDE2NTIzNjk2OTE4MzM1NDE0NTU5Nzg1MTU4MzQ4NTQgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzU0OTUgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA5OSBkaXZpZGUgIDI5MjgyMDU3Mjg0MDI5NDUyNjY5NTMyNTU2MzIzNDMxMTMgICAyOTI4MjA1NzI4NDAyOTQ1MjY2OTUzMjU1NjMyMzczNzk0ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODk1MjIzICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFkaXY5OTk4IGRpdmlkZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjk5OTkgZGl2aWRlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFEaXZpZGUuZGVjVGVzdCAtLSBkZWNRdWFkIGRpdmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWRpdjAwMSBkaXZpZGUgIDEgICAgIDEgICAgLT4gIDEKK2RxZGl2MDAyIGRpdmlkZSAgMiAgICAgMSAgICAtPiAgMgorZHFkaXYwMDMgZGl2aWRlICAxICAgICAyICAgIC0+ICAwLjUKK2RxZGl2MDA0IGRpdmlkZSAgMiAgICAgMiAgICAtPiAgMQorZHFkaXYwMDUgZGl2aWRlICAwICAgICAxICAgIC0+ICAwCitkcWRpdjAwNiBkaXZpZGUgIDAgICAgIDIgICAgLT4gIDAKK2RxZGl2MDA3IGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZHFkaXYwMDggZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjAwOSBkaXZpZGUgIDMgICAgIDMgICAgLT4gIDEKKworZHFkaXYwMTAgZGl2aWRlICAyLjQgICAxICAgIC0+ICAyLjQKK2RxZGl2MDExIGRpdmlkZSAgMi40ICAgLTEgICAtPiAgLTIuNAorZHFkaXYwMTIgZGl2aWRlICAtMi40ICAxICAgIC0+ICAtMi40CitkcWRpdjAxMyBkaXZpZGUgIC0yLjQgIC0xICAgLT4gIDIuNAorZHFkaXYwMTQgZGl2aWRlICAyLjQwICAxICAgIC0+ICAyLjQwCitkcWRpdjAxNSBkaXZpZGUgIDIuNDAwIDEgICAgLT4gIDIuNDAwCitkcWRpdjAxNiBkaXZpZGUgIDIuNCAgIDIgICAgLT4gIDEuMgorZHFkaXYwMTcgZGl2aWRlICAyLjQwMCAyICAgIC0+ICAxLjIwMAorZHFkaXYwMTggZGl2aWRlICAyLiAgICAyICAgIC0+ICAxCitkcWRpdjAxOSBkaXZpZGUgIDIwICAgIDIwICAgLT4gIDEKKworZHFkaXYwMjAgZGl2aWRlICAxODcgICAxODcgICAgLT4gIDEKK2RxZGl2MDIxIGRpdmlkZSAgNSAgICAgMiAgICAgIC0+ICAyLjUKK2RxZGl2MDIyIGRpdmlkZSAgNTAgICAgMjAgICAgIC0+ICAyLjUKK2RxZGl2MDIzIGRpdmlkZSAgNTAwICAgMjAwICAgIC0+ICAyLjUKK2RxZGl2MDI0IGRpdmlkZSAgNTAuMCAgMjAuMCAgIC0+ICAyLjUKK2RxZGl2MDI1IGRpdmlkZSAgNS4wMCAgMi4wMCAgIC0+ICAyLjUKK2RxZGl2MDI2IGRpdmlkZSAgNSAgICAgMi4wICAgIC0+ICAyLjUKK2RxZGl2MDI3IGRpdmlkZSAgNSAgICAgMi4wMDAgIC0+ICAyLjUKK2RxZGl2MDI4IGRpdmlkZSAgNSAgICAgMC4yMCAgIC0+ICAyNQorZHFkaXYwMjkgZGl2aWRlICA1ICAgICAwLjIwMCAgLT4gIDI1CitkcWRpdjAzMCBkaXZpZGUgIDEwICAgIDEgICAgICAtPiAgMTAKK2RxZGl2MDMxIGRpdmlkZSAgMTAwICAgMSAgICAgIC0+ICAxMDAKK2RxZGl2MDMyIGRpdmlkZSAgMTAwMCAgMSAgICAgIC0+ICAxMDAwCitkcWRpdjAzMyBkaXZpZGUgIDEwMDAgIDEwMCAgICAtPiAgMTAKKworZHFkaXYwMzUgZGl2aWRlICAxICAgICAyICAgICAgLT4gIDAuNQorZHFkaXYwMzYgZGl2aWRlICAxICAgICA0ICAgICAgLT4gIDAuMjUKK2RxZGl2MDM3IGRpdmlkZSAgMSAgICAgOCAgICAgIC0+ICAwLjEyNQorZHFkaXYwMzggZGl2aWRlICAxICAgICAxNiAgICAgLT4gIDAuMDYyNQorZHFkaXYwMzkgZGl2aWRlICAxICAgICAzMiAgICAgLT4gIDAuMDMxMjUKK2RxZGl2MDQwIGRpdmlkZSAgMSAgICAgNjQgICAgIC0+ICAwLjAxNTYyNQorZHFkaXYwNDEgZGl2aWRlICAxICAgIC0yICAgICAgLT4gIC0wLjUKK2RxZGl2MDQyIGRpdmlkZSAgMSAgICAtNCAgICAgIC0+ICAtMC4yNQorZHFkaXYwNDMgZGl2aWRlICAxICAgIC04ICAgICAgLT4gIC0wLjEyNQorZHFkaXYwNDQgZGl2aWRlICAxICAgIC0xNiAgICAgLT4gIC0wLjA2MjUKK2RxZGl2MDQ1IGRpdmlkZSAgMSAgICAtMzIgICAgIC0+ICAtMC4wMzEyNQorZHFkaXYwNDYgZGl2aWRlICAxICAgIC02NCAgICAgLT4gIC0wLjAxNTYyNQorZHFkaXYwNDcgZGl2aWRlIC0xICAgICAyICAgICAgLT4gIC0wLjUKK2RxZGl2MDQ4IGRpdmlkZSAtMSAgICAgNCAgICAgIC0+ICAtMC4yNQorZHFkaXYwNDkgZGl2aWRlIC0xICAgICA4ICAgICAgLT4gIC0wLjEyNQorZHFkaXYwNTAgZGl2aWRlIC0xICAgICAxNiAgICAgLT4gIC0wLjA2MjUKK2RxZGl2MDUxIGRpdmlkZSAtMSAgICAgMzIgICAgIC0+ICAtMC4wMzEyNQorZHFkaXYwNTIgZGl2aWRlIC0xICAgICA2NCAgICAgLT4gIC0wLjAxNTYyNQorZHFkaXYwNTMgZGl2aWRlIC0xICAgIC0yICAgICAgLT4gIDAuNQorZHFkaXYwNTQgZGl2aWRlIC0xICAgIC00ICAgICAgLT4gIDAuMjUKK2RxZGl2MDU1IGRpdmlkZSAtMSAgICAtOCAgICAgIC0+ICAwLjEyNQorZHFkaXYwNTYgZGl2aWRlIC0xICAgIC0xNiAgICAgLT4gIDAuMDYyNQorZHFkaXYwNTcgZGl2aWRlIC0xICAgIC0zMiAgICAgLT4gIDAuMDMxMjUKK2RxZGl2MDU4IGRpdmlkZSAtMSAgICAtNjQgICAgIC0+ICAwLjAxNTYyNQorCistLSBiY2RUaW1lCitkcWRpdjA2MCBkaXZpZGUgIDEgNyAgICAgICAgICAgICAgICAgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjA2MSBkaXZpZGUgMS4yMzQ1Njc4ICAxLjk4NzY1NDMgICAtPiAwLjYyMTExNzk2ODA0OTA3MTcxMjMxOTM5MDc1MTE5ODUzNTkgSW5leGFjdCBSb3VuZGVkCisKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFkaXYwNjcgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcWRpdjA2OCBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgIDEgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNjkgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNzAgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNzEgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5CitkcWRpdjA3MiBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNzMgZGl2aWRlICA5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OQorZHFkaXYwNzQgZGl2aWRlICA5OTk5OTk5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5CitkcWRpdjA3NSBkaXZpZGUgIDk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OQorZHFkaXYwNzYgZGl2aWRlICA5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OQorZHFkaXYwNzcgZGl2aWRlICA5OTk5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5CitkcWRpdjA3OCBkaXZpZGUgIDk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OQorZHFkaXYwNzkgZGl2aWRlICA5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OQorZHFkaXYwODAgZGl2aWRlICA5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5CitkcWRpdjA4MSBkaXZpZGUgIDk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OQorZHFkaXYwODIgZGl2aWRlICA5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OQorZHFkaXYwODMgZGl2aWRlICA5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5CitkcWRpdjA4NCBkaXZpZGUgIDk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OQorZHFkaXYwODUgZGl2aWRlICA5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OQorZHFkaXYwODYgZGl2aWRlICA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5CisKK2RxZGl2MDkwIGRpdmlkZSAgMC4gICAgICAgICAgICAxICAgIC0+ICAwCitkcWRpdjA5MSBkaXZpZGUgIC4wICAgICAgICAgICAgMSAgICAtPiAgMC4wCitkcWRpdjA5MiBkaXZpZGUgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMC4wMAorZHFkaXYwOTMgZGl2aWRlICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDBFKzcKK2RxZGl2MDk0IGRpdmlkZSAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwRS01NAorCitkcWRpdjA5NSBkaXZpZGUgIDEgICAgICAgICAgICAxRS04ICAtPiAgMUUrOAorZHFkaXYwOTYgZGl2aWRlICAxICAgICAgICAgICAgMUUtOSAgLT4gIDFFKzkKK2RxZGl2MDk3IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEwIC0+ICAxRSsxMAorZHFkaXYwOTggZGl2aWRlICAxICAgICAgICAgICAgMUUtMTEgLT4gIDFFKzExCitkcWRpdjA5OSBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMiAtPiAgMUUrMTIKKworZHFkaXYxMDAgZGl2aWRlICAxICAxICAgLT4gMQorZHFkaXYxMDEgZGl2aWRlICAxICAyICAgLT4gMC41CitkcWRpdjEwMiBkaXZpZGUgIDEgIDMgICAtPiAwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEwMyBkaXZpZGUgIDEgIDQgICAtPiAwLjI1CitkcWRpdjEwNCBkaXZpZGUgIDEgIDUgICAtPiAwLjIKK2RxZGl2MTA1IGRpdmlkZSAgMSAgNiAgIC0+IDAuMTY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTA2IGRpdmlkZSAgMSAgNyAgIC0+IDAuMTQyODU3MTQyODU3MTQyODU3MTQyODU3MTQyODU3MTQyOSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTA3IGRpdmlkZSAgMSAgOCAgIC0+IDAuMTI1CitkcWRpdjEwOCBkaXZpZGUgIDEgIDkgICAtPiAwLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEwOSBkaXZpZGUgIDEgIDEwICAtPiAwLjEKK2RxZGl2MTEwIGRpdmlkZSAgMSAgMSAgIC0+IDEKK2RxZGl2MTExIGRpdmlkZSAgMiAgMSAgIC0+IDIKK2RxZGl2MTEyIGRpdmlkZSAgMyAgMSAgIC0+IDMKK2RxZGl2MTEzIGRpdmlkZSAgNCAgMSAgIC0+IDQKK2RxZGl2MTE0IGRpdmlkZSAgNSAgMSAgIC0+IDUKK2RxZGl2MTE1IGRpdmlkZSAgNiAgMSAgIC0+IDYKK2RxZGl2MTE2IGRpdmlkZSAgNyAgMSAgIC0+IDcKK2RxZGl2MTE3IGRpdmlkZSAgOCAgMSAgIC0+IDgKK2RxZGl2MTE4IGRpdmlkZSAgOSAgMSAgIC0+IDkKK2RxZGl2MTE5IGRpdmlkZSAgMTAgMSAgIC0+IDEwCisKK2RxZGl2MTIwIGRpdmlkZSAgM0UrMSAwLjAwMSAgLT4gM0UrNAorZHFkaXYxMjEgZGl2aWRlICAyLjIwMCAyICAgICAtPiAxLjEwMAorCitkcWRpdjEzMCBkaXZpZGUgIDEyMzQ1ICA0Ljk5OSAgLT4gMjQ2OS40OTM4OTg3Nzk3NTU5NTExOTAyMzgwNDc2MDk1MjIgIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMzEgZGl2aWRlICAxMjM0NSAgNC45OSAgIC0+IDI0NzMuOTQ3ODk1NzkxNTgzMTY2MzMyNjY1MzMwNjYxMzIzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTMyIGRpdmlkZSAgMTIzNDUgIDQuOSAgICAtPiAyNTE5LjM4Nzc1NTEwMjA0MDgxNjMyNjUzMDYxMjI0NDg5OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEzMyBkaXZpZGUgIDEyMzQ1ICA1ICAgICAgLT4gMjQ2OQorZHFkaXYxMzQgZGl2aWRlICAxMjM0NSAgNS4xICAgIC0+IDI0MjAuNTg4MjM1Mjk0MTE3NjQ3MDU4ODIzNTI5NDExNzY1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTM1IGRpdmlkZSAgMTIzNDUgIDUuMDEgICAtPiAyNDY0LjA3MTg1NjI4NzQyNTE0OTcwMDU5ODgwMjM5NTIxMCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEzNiBkaXZpZGUgIDEyMzQ1ICA1LjAwMSAgLT4gMjQ2OC41MDYyOTg3NDAyNTE5NDk2MTAwNzc5ODQ0MDMxMTkgIEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHBvc3NpYmx5IGltcHJlY2lzZSByZXN1bHRzCitkcWRpdjIyMCBkaXZpZGUgMzkxICAgNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMjEgZGl2aWRlIDM5MSAgLTU5NyAtPiAtMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjIyIGRpdmlkZSAtMzkxICA1OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4MzU4NDU4OTYxNDc0MDM2ODUwOSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIyMyBkaXZpZGUgLTM5MSAtNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKK2RxZGl2MjcwIGRpdmlkZSAxIDFlNjE0NCAgICAgICAgICAgICAgICAgIC0+IDFFLTYxNDQgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZHFkaXYyNzEgZGl2aWRlIDEgMC45ZTYxNDQgICAgICAgICAgICAgICAgLT4gMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMUUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZGl2MjcyIGRpdmlkZSAxIDAuOTllNjE0NCAgICAgICAgICAgICAgIC0+IDEuMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDFFLTYxNDQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWRpdjI3MyBkaXZpZGUgMSAwLjk5OTk5OTk5OTk5OTk5OTllNjE0NCAtPiAxLjAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFkaXYyNzQgZGl2aWRlIDllNjE0NCAgICAxICAgICAgICAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorZHFkaXYyNzUgZGl2aWRlIDkuOWU2MTQ0ICAxICAgICAgICAgICAgICAgLT4gOS45MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorZHFkaXYyNzYgZGl2aWRlIDkuOTllNjE0NCAxICAgICAgICAgICAgICAgLT4gOS45OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorZHFkaXYyNzcgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTk5ZTYxNDQgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorCitkcWRpdjI3OCBkaXZpZGUgMSAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllNjE0NCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFkaXYyNzkgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZTYxNDQgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0gRGl2aWRlIGludG8gMCB0ZXN0cworZHFkaXYzMDEgZGl2aWRlICAgIDAgICAgNyAgICAgLT4gMAorZHFkaXYzMDIgZGl2aWRlICAgIDAgICAgN0UtNSAgLT4gMEUrNQorZHFkaXYzMDMgZGl2aWRlICAgIDAgICAgN0UtMSAgLT4gMEUrMQorZHFkaXYzMDQgZGl2aWRlICAgIDAgICAgN0UrMSAgLT4gMC4wCitkcWRpdjMwNSBkaXZpZGUgICAgMCAgICA3RSs1ICAtPiAwLjAwMDAwCitkcWRpdjMwNiBkaXZpZGUgICAgMCAgICA3RSs2ICAtPiAwLjAwMDAwMAorZHFkaXYzMDcgZGl2aWRlICAgIDAgICAgN0UrNyAgLT4gMEUtNworZHFkaXYzMDggZGl2aWRlICAgIDAgICA3MEUtNSAgLT4gMEUrNQorZHFkaXYzMDkgZGl2aWRlICAgIDAgICA3MEUtMSAgLT4gMEUrMQorZHFkaXYzMTAgZGl2aWRlICAgIDAgICA3MEUrMCAgLT4gMAorZHFkaXYzMTEgZGl2aWRlICAgIDAgICA3MEUrMSAgLT4gMC4wCitkcWRpdjMxMiBkaXZpZGUgICAgMCAgIDcwRSs1ICAtPiAwLjAwMDAwCitkcWRpdjMxMyBkaXZpZGUgICAgMCAgIDcwRSs2ICAtPiAwLjAwMDAwMAorZHFkaXYzMTQgZGl2aWRlICAgIDAgICA3MEUrNyAgLT4gMEUtNworZHFkaXYzMTUgZGl2aWRlICAgIDAgIDcwMEUtNSAgLT4gMEUrNQorZHFkaXYzMTYgZGl2aWRlICAgIDAgIDcwMEUtMSAgLT4gMEUrMQorZHFkaXYzMTcgZGl2aWRlICAgIDAgIDcwMEUrMCAgLT4gMAorZHFkaXYzMTggZGl2aWRlICAgIDAgIDcwMEUrMSAgLT4gMC4wCitkcWRpdjMxOSBkaXZpZGUgICAgMCAgNzAwRSs1ICAtPiAwLjAwMDAwCitkcWRpdjMyMCBkaXZpZGUgICAgMCAgNzAwRSs2ICAtPiAwLjAwMDAwMAorZHFkaXYzMjEgZGl2aWRlICAgIDAgIDcwMEUrNyAgLT4gMEUtNworZHFkaXYzMjIgZGl2aWRlICAgIDAgIDcwMEUrNzcgLT4gMEUtNzcKKworZHFkaXYzMzEgZGl2aWRlIDBFLTMgICAgN0UtNSAgLT4gMEUrMgorZHFkaXYzMzIgZGl2aWRlIDBFLTMgICAgN0UtMSAgLT4gMC4wMAorZHFkaXYzMzMgZGl2aWRlIDBFLTMgICAgN0UrMSAgLT4gMC4wMDAwCitkcWRpdjMzNCBkaXZpZGUgMEUtMyAgICA3RSs1ICAtPiAwRS04CitkcWRpdjMzNSBkaXZpZGUgMEUtMSAgICA3RS01ICAtPiAwRSs0CitkcWRpdjMzNiBkaXZpZGUgMEUtMSAgICA3RS0xICAtPiAwCitkcWRpdjMzNyBkaXZpZGUgMEUtMSAgICA3RSsxICAtPiAwLjAwCitkcWRpdjMzOCBkaXZpZGUgMEUtMSAgICA3RSs1ICAtPiAwLjAwMDAwMAorZHFkaXYzMzkgZGl2aWRlIDBFKzEgICAgN0UtNSAgLT4gMEUrNgorZHFkaXYzNDAgZGl2aWRlIDBFKzEgICAgN0UtMSAgLT4gMEUrMgorZHFkaXYzNDEgZGl2aWRlIDBFKzEgICAgN0UrMSAgLT4gMAorZHFkaXYzNDIgZGl2aWRlIDBFKzEgICAgN0UrNSAgLT4gMC4wMDAwCitkcWRpdjM0MyBkaXZpZGUgMEUrMyAgICA3RS01ICAtPiAwRSs4CitkcWRpdjM0NCBkaXZpZGUgMEUrMyAgICA3RS0xICAtPiAwRSs0CitkcWRpdjM0NSBkaXZpZGUgMEUrMyAgICA3RSsxICAtPiAwRSsyCitkcWRpdjM0NiBkaXZpZGUgMEUrMyAgICA3RSs1ICAtPiAwLjAwCisKKy0tIFRoZXNlIHdlcmUgJ2lucHV0IHJvdW5kaW5nJworZHFkaXY0NDEgZGl2aWRlIDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDAKK2RxZGl2NDQyIGRpdmlkZSAxIDEyMzQ1Njc4MDAwIC0+IDguMTAwMDAwNjY0MjAwMDU0NDY0NDA0NDY2MDgxMTY2MjE5RS0xMSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDQzIGRpdmlkZSAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDAKK2RxZGl2NDQ0IGRpdmlkZSAxIDEyMzQ1Njc4MDAgIC0+IDguMTAwMDAwNjY0MjAwMDU0NDY0NDA0NDY2MDgxMTY2MjE5RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDQ1IGRpdmlkZSAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKK2RxZGl2NDQ2IGRpdmlkZSAxIDEyMzQ1Njc4OTAgIC0+IDguMTAwMDAwMDczNzEwMDAwNjcwNzYxMDA2MTAzOTI1MTU2RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDQ3IGRpdmlkZSAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTEKK2RxZGl2NDQ4IGRpdmlkZSAxIDEyMzQ1Njc4OTEgIC0+IDguMTAwMDAwMDY3MTQ5MDAwNTU2NjY1MjE0NjE0NzU0NjI5RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDQ5IGRpdmlkZSAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxCitkcWRpdjQ1MCBkaXZpZGUgMSAxMjM0NTY3ODkwMSAtPiA4LjEwMDAwMDA3MzA1MzkwMDY1ODg3MzEzMDA0MjM3Njc2MEUtMTEgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQ1MSBkaXZpZGUgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2CitkcWRpdjQ1MiBkaXZpZGUgMSAxMjM0NTY3ODk2ICAtPiA4LjEwMDAwMDAzNDM0NDAwMDE0NTYxODU2MDYxNzQyMjY5N0UtMTAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGhpZ2gtbG93cworZHFkaXY0NTMgZGl2aWRlIDFlKzEgICAxICAgIC0+ICAgMUUrMQorZHFkaXY0NTQgZGl2aWRlIDFlKzEgICAxLjAgIC0+ICAgMUUrMQorZHFkaXY0NTUgZGl2aWRlIDFlKzEgICAxLjAwIC0+ICAgMUUrMQorZHFkaXY0NTYgZGl2aWRlIDFlKzIgICAyICAgIC0+ICAgNUUrMQorZHFkaXY0NTcgZGl2aWRlIDFlKzIgICAyLjAgIC0+ICAgNUUrMQorZHFkaXY0NTggZGl2aWRlIDFlKzIgICAyLjAwIC0+ICAgNUUrMQorCistLSBzb21lIGZyb20gSUVFRSBkaXNjdXNzaW9ucworZHFkaXY0NjAgZGl2aWRlIDNlMCAgICAgIDJlMCAgICAgLT4gMS41CitkcWRpdjQ2MSBkaXZpZGUgMzBlLTEgICAgMmUwICAgICAtPiAxLjUKK2RxZGl2NDYyIGRpdmlkZSAzMDBlLTIgICAyZTAgICAgIC0+IDEuNTAKK2RxZGl2NDY0IGRpdmlkZSAzMDAwZS0zICAyZTAgICAgIC0+IDEuNTAwCitkcWRpdjQ2NSBkaXZpZGUgM2UwICAgICAgMjBlLTEgICAtPiAxLjUKK2RxZGl2NDY2IGRpdmlkZSAzMGUtMSAgICAyMGUtMSAgIC0+IDEuNQorZHFkaXY0NjcgZGl2aWRlIDMwMGUtMiAgIDIwZS0xICAgLT4gMS41CitkcWRpdjQ2OCBkaXZpZGUgMzAwMGUtMyAgMjBlLTEgICAtPiAxLjUwCitkcWRpdjQ2OSBkaXZpZGUgM2UwICAgICAgMjAwZS0yICAtPiAxLjUKK2RxZGl2NDcwIGRpdmlkZSAzMGUtMSAgICAyMDBlLTIgIC0+IDEuNQorZHFkaXY0NzEgZGl2aWRlIDMwMGUtMiAgIDIwMGUtMiAgLT4gMS41CitkcWRpdjQ3MiBkaXZpZGUgMzAwMGUtMyAgMjAwZS0yICAtPiAxLjUKK2RxZGl2NDczIGRpdmlkZSAzZTAgICAgICAyMDAwZS0zIC0+IDEuNQorZHFkaXY0NzQgZGl2aWRlIDMwZS0xICAgIDIwMDBlLTMgLT4gMS41CitkcWRpdjQ3NSBkaXZpZGUgMzAwZS0yICAgMjAwMGUtMyAtPiAxLjUKK2RxZGl2NDc2IGRpdmlkZSAzMDAwZS0zICAyMDAwZS0zIC0+IDEuNQorCistLSBzb21lIHJlY2lwcm9jYWxzCitkcWRpdjQ4MCBkaXZpZGUgMSAgICAgICAgMS4wRSszMyAtPiAxRS0zMworZHFkaXY0ODEgZGl2aWRlIDEgICAgICAgIDEwRSszMyAgLT4gMUUtMzQKK2RxZGl2NDgyIGRpdmlkZSAxICAgICAgICAxLjBFLTMzIC0+IDFFKzMzCitkcWRpdjQ4MyBkaXZpZGUgMSAgICAgICAgMTBFLTMzICAtPiAxRSszMgorCistLSBSTVMgZGlzY3Vzc2lvbiB0YWJsZQorZHFkaXY0ODQgZGl2aWRlIDBlNSAgICAgMWUzIC0+ICAgMEUrMgorZHFkaXY0ODUgZGl2aWRlIDBlNSAgICAgMmUzIC0+ICAgMEUrMgorZHFkaXY0ODYgZGl2aWRlIDBlNSAgICAxMGUyIC0+ICAgMEUrMworZHFkaXY0ODcgZGl2aWRlIDBlNSAgICAyMGUyIC0+ICAgMEUrMworZHFkaXY0ODggZGl2aWRlIDBlNSAgIDEwMGUxIC0+ICAgMEUrNAorZHFkaXY0ODkgZGl2aWRlIDBlNSAgIDIwMGUxIC0+ICAgMEUrNAorCitkcWRpdjQ5MSBkaXZpZGUgMWU1ICAgICAxZTMgLT4gICAxRSsyCitkcWRpdjQ5MiBkaXZpZGUgMWU1ICAgICAyZTMgLT4gICA1RSsxCitkcWRpdjQ5MyBkaXZpZGUgMWU1ICAgIDEwZTIgLT4gICAxRSsyCitkcWRpdjQ5NCBkaXZpZGUgMWU1ICAgIDIwZTIgLT4gICA1RSsxCitkcWRpdjQ5NSBkaXZpZGUgMWU1ICAgMTAwZTEgLT4gICAxRSsyCitkcWRpdjQ5NiBkaXZpZGUgMWU1ICAgMjAwZTEgLT4gICA1RSsxCisKKy0tIHRyeXplcm9zIGNhc2VzCityb3VuZGluZzogICAgaGFsZl91cAorZHFkaXY0OTcgIGRpdmlkZSAgMEUrNjEwOCAxMDAwRS0zMyAgLT4gMEUrNjExMSBDbGFtcGVkCitkcWRpdjQ5OCAgZGl2aWRlICAwRS02MTcwIDEwMDBFKzMzICAtPiAwRS02MTc2IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKworLS0gZm9jdXMgb24gdHJhaWxpbmcgemVyb3MgaXNzdWVzCitkcWRpdjUwMCBkaXZpZGUgIDEgICAgICA5LjkgICAgLT4gIDAuMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjUwMSBkaXZpZGUgIDEgICAgICA5LjA5ICAgLT4gIDAuMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjUwMiBkaXZpZGUgIDEgICAgICA5LjAwOSAgLT4gIDAuMTExMDAwMTExMDAwMTExMDAwMTExMDAwMTExMDAwMTExMCAgSW5leGFjdCBSb3VuZGVkCisKK2RxZGl2NTExIGRpdmlkZSAxICAgICAgICAgMiAgICAtPiAwLjUKK2RxZGl2NTEyIGRpdmlkZSAxLjAgICAgICAgMiAgICAtPiAwLjUKK2RxZGl2NTEzIGRpdmlkZSAxLjAwICAgICAgMiAgICAtPiAwLjUwCitkcWRpdjUxNCBkaXZpZGUgMS4wMDAgICAgIDIgICAgLT4gMC41MDAKK2RxZGl2NTE1IGRpdmlkZSAxLjAwMDAgICAgMiAgICAtPiAwLjUwMDAKK2RxZGl2NTE2IGRpdmlkZSAxLjAwMDAwICAgMiAgICAtPiAwLjUwMDAwCitkcWRpdjUxNyBkaXZpZGUgMS4wMDAwMDAgIDIgICAgLT4gMC41MDAwMDAKK2RxZGl2NTE4IGRpdmlkZSAxLjAwMDAwMDAgMiAgICAtPiAwLjUwMDAwMDAKK2RxZGl2NTE5IGRpdmlkZSAxLjAwICAgICAgMi4wMCAtPiAwLjUKKworZHFkaXY1MjEgZGl2aWRlIDIgICAgMSAgICAgICAgIC0+IDIKK2RxZGl2NTIyIGRpdmlkZSAyICAgIDEuMCAgICAgICAtPiAyCitkcWRpdjUyMyBkaXZpZGUgMiAgICAxLjAwICAgICAgLT4gMgorZHFkaXY1MjQgZGl2aWRlIDIgICAgMS4wMDAgICAgIC0+IDIKK2RxZGl2NTI1IGRpdmlkZSAyICAgIDEuMDAwMCAgICAtPiAyCitkcWRpdjUyNiBkaXZpZGUgMiAgICAxLjAwMDAwICAgLT4gMgorZHFkaXY1MjcgZGl2aWRlIDIgICAgMS4wMDAwMDAgIC0+IDIKK2RxZGl2NTI4IGRpdmlkZSAyICAgIDEuMDAwMDAwMCAtPiAyCitkcWRpdjUyOSBkaXZpZGUgMi4wMCAxLjAwICAgICAgLT4gMgorCitkcWRpdjUzMCBkaXZpZGUgIDIuNDAgICAyICAgICAgLT4gIDEuMjAKK2RxZGl2NTMxIGRpdmlkZSAgMi40MCAgIDQgICAgICAtPiAgMC42MAorZHFkaXY1MzIgZGl2aWRlICAyLjQwICAxMCAgICAgIC0+ICAwLjI0CitkcWRpdjUzMyBkaXZpZGUgIDIuNDAgICAyLjAgICAgLT4gIDEuMgorZHFkaXY1MzQgZGl2aWRlICAyLjQwICAgNC4wICAgIC0+ICAwLjYKK2RxZGl2NTM1IGRpdmlkZSAgMi40MCAgMTAuMCAgICAtPiAgMC4yNAorZHFkaXY1MzYgZGl2aWRlICAyLjQwICAgMi4wMCAgIC0+ICAxLjIKK2RxZGl2NTM3IGRpdmlkZSAgMi40MCAgIDQuMDAgICAtPiAgMC42CitkcWRpdjUzOCBkaXZpZGUgIDIuNDAgIDEwLjAwICAgLT4gIDAuMjQKK2RxZGl2NTM5IGRpdmlkZSAgMC45ICAgIDAuMSAgICAtPiAgOQorZHFkaXY1NDAgZGl2aWRlICAwLjkgICAgMC4wMSAgIC0+ICA5RSsxCitkcWRpdjU0MSBkaXZpZGUgIDAuOSAgICAwLjAwMSAgLT4gIDlFKzIKK2RxZGl2NTQyIGRpdmlkZSAgNSAgICAgIDIgICAgICAtPiAgMi41CitkcWRpdjU0MyBkaXZpZGUgIDUgICAgICAyLjAgICAgLT4gIDIuNQorZHFkaXY1NDQgZGl2aWRlICA1ICAgICAgMi4wMCAgIC0+ICAyLjUKK2RxZGl2NTQ1IGRpdmlkZSAgNSAgICAgIDIwICAgICAtPiAgMC4yNQorZHFkaXY1NDYgZGl2aWRlICA1ICAgICAgMjAuMCAgIC0+ICAwLjI1CitkcWRpdjU0NyBkaXZpZGUgIDIuNDAwICAyICAgICAgLT4gIDEuMjAwCitkcWRpdjU0OCBkaXZpZGUgIDIuNDAwICAyLjAgICAgLT4gIDEuMjAKK2RxZGl2NTQ5IGRpdmlkZSAgMi40MDAgIDIuNDAwICAtPiAgMQorCitkcWRpdjU1MCBkaXZpZGUgIDI0MCAgICAxICAgICAgLT4gIDI0MAorZHFkaXY1NTEgZGl2aWRlICAyNDAgICAgMTAgICAgIC0+ICAyNAorZHFkaXY1NTIgZGl2aWRlICAyNDAgICAgMTAwICAgIC0+ICAyLjQKK2RxZGl2NTUzIGRpdmlkZSAgMjQwICAgIDEwMDAgICAtPiAgMC4yNAorZHFkaXY1NTQgZGl2aWRlICAyNDAwICAgMSAgICAgIC0+ICAyNDAwCitkcWRpdjU1NSBkaXZpZGUgIDI0MDAgICAxMCAgICAgLT4gIDI0MAorZHFkaXY1NTYgZGl2aWRlICAyNDAwICAgMTAwICAgIC0+ICAyNAorZHFkaXY1NTcgZGl2aWRlICAyNDAwICAgMTAwMCAgIC0+ICAyLjQKKworLS0gK3ZlIGV4cG9uZW50CitkcWRpdjYwMCBkaXZpZGUgIDIuNEUrOSAgICAgMiAgLT4gIDEuMkUrOQorZHFkaXY2MDEgZGl2aWRlICAyLjQwRSs5ICAgIDIgIC0+ICAxLjIwRSs5CitkcWRpdjYwMiBkaXZpZGUgIDIuNDAwRSs5ICAgMiAgLT4gIDEuMjAwRSs5CitkcWRpdjYwMyBkaXZpZGUgIDIuNDAwMEUrOSAgMiAgLT4gIDEuMjAwMEUrOQorZHFkaXY2MDQgZGl2aWRlICAyNEUrOCAgICAgIDIgIC0+ICAxLjJFKzkKK2RxZGl2NjA1IGRpdmlkZSAgMjQwRSs3ICAgICAyICAtPiAgMS4yMEUrOQorZHFkaXY2MDYgZGl2aWRlICAyNDAwRSs2ICAgIDIgIC0+ICAxLjIwMEUrOQorZHFkaXY2MDcgZGl2aWRlICAyNDAwMEUrNSAgIDIgIC0+ICAxLjIwMDBFKzkKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorZHFkaXY3MzEgZGl2aWRlIDUuMDAgMUUtMyAgICAtPiA1LjAwRSszCitkcWRpdjczMiBkaXZpZGUgMDAuMDAgMC4wMDAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZGl2NzMzIGRpdmlkZSAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkaXY3MzQgZGl2aWRlICAwICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWRpdjczNSBkaXZpZGUgLTAgICAgIDAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZGl2NzM2IGRpdmlkZSAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorCitkcWRpdjc0MSBkaXZpZGUgIDAgICAgLTEgICAgIC0+IC0wCitkcWRpdjc0MiBkaXZpZGUgLTAgICAgLTEgICAgIC0+ICAwCitkcWRpdjc0MyBkaXZpZGUgIDAgICAgIDEgICAgIC0+ICAwCitkcWRpdjc0NCBkaXZpZGUgLTAgICAgIDEgICAgIC0+IC0wCitkcWRpdjc0NSBkaXZpZGUgLTEgICAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc0NiBkaXZpZGUgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc0NyBkaXZpZGUgIDEgICAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc0OCBkaXZpZGUgIDEgICAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZGl2NzUxIGRpdmlkZSAgMC4wICAtMSAgICAgLT4gLTAuMAorZHFkaXY3NTIgZGl2aWRlIC0wLjAgIC0xICAgICAtPiAgMC4wCitkcWRpdjc1MyBkaXZpZGUgIDAuMCAgIDEgICAgIC0+ICAwLjAKK2RxZGl2NzU0IGRpdmlkZSAtMC4wICAgMSAgICAgLT4gLTAuMAorZHFkaXY3NTUgZGl2aWRlIC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NTYgZGl2aWRlIC0xLjAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NTcgZGl2aWRlICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NTggZGl2aWRlICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjc2MSBkaXZpZGUgIDAgICAgLTEuMCAgIC0+IC0wRSsxCitkcWRpdjc2MiBkaXZpZGUgLTAgICAgLTEuMCAgIC0+ICAwRSsxCitkcWRpdjc2MyBkaXZpZGUgIDAgICAgIDEuMCAgIC0+ICAwRSsxCitkcWRpdjc2NCBkaXZpZGUgLTAgICAgIDEuMCAgIC0+IC0wRSsxCitkcWRpdjc2NSBkaXZpZGUgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc2NiBkaXZpZGUgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc2NyBkaXZpZGUgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc2OCBkaXZpZGUgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZGl2NzcxIGRpdmlkZSAgMC4wICAtMS4wICAgLT4gLTAKK2RxZGl2NzcyIGRpdmlkZSAtMC4wICAtMS4wICAgLT4gIDAKK2RxZGl2NzczIGRpdmlkZSAgMC4wICAgMS4wICAgLT4gIDAKK2RxZGl2Nzc0IGRpdmlkZSAtMC4wICAgMS4wICAgLT4gLTAKK2RxZGl2Nzc1IGRpdmlkZSAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2Nzc2IGRpdmlkZSAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2Nzc3IGRpdmlkZSAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2Nzc4IGRpdmlkZSAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworLS0gU3BlY2lhbHMKK2RxZGl2NzgwIGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY3ODEgZGl2aWRlICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxZGl2NzgyIGRpdmlkZSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcWRpdjc4MyBkaXZpZGUgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFkaXY3ODQgZGl2aWRlICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RxZGl2Nzg1IGRpdmlkZSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcWRpdjc4NiBkaXZpZGUgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFkaXY3ODcgZGl2aWRlICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjc4OCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQKK2RxZGl2Nzg5IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY3OTAgZGl2aWRlIC0xICAgICBJbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjc5MSBkaXZpZGUgLTAgICAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQKK2RxZGl2NzkyIGRpdmlkZSAgMCAgICAgSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZAorZHFkaXY3OTMgZGl2aWRlICAxICAgICBJbmYgICAtPiAgMEUtNjE3NiBDbGFtcGVkCitkcWRpdjc5NCBkaXZpZGUgIDEwMDAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQKK2RxZGl2Nzk1IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWRpdjgwMCBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODAxIGRpdmlkZSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcWRpdjgwMiBkaXZpZGUgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFkaXY4MDMgZGl2aWRlIC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RxZGl2ODA0IGRpdmlkZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcWRpdjgwNSBkaXZpZGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFkaXY4MDYgZGl2aWRlIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxZGl2ODA3IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4MDggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjgwOSBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODEwIGRpdmlkZSAtMSAgICAtSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZAorZHFkaXY4MTEgZGl2aWRlIC0wICAgIC1JbmYgICAtPiAgMEUtNjE3NiBDbGFtcGVkCitkcWRpdjgxMiBkaXZpZGUgIDAgICAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQKK2RxZGl2ODEzIGRpdmlkZSAgMSAgICAtSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAorZHFkaXY4MTQgZGl2aWRlICAxMDAwIC1JbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjgxNSBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFkaXY4MjEgZGl2aWRlICBOYU4gLUluZiAgICAtPiAgTmFOCitkcWRpdjgyMiBkaXZpZGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxZGl2ODIzIGRpdmlkZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFkaXY4MjQgZGl2aWRlICBOYU4gLTAgICAgICAtPiAgTmFOCitkcWRpdjgyNSBkaXZpZGUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxZGl2ODI2IGRpdmlkZSAgTmFOICAxICAgICAgLT4gIE5hTgorZHFkaXY4MjcgZGl2aWRlICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcWRpdjgyOCBkaXZpZGUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxZGl2ODI5IGRpdmlkZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzAgZGl2aWRlIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcWRpdjgzMSBkaXZpZGUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxZGl2ODMyIGRpdmlkZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzMgZGl2aWRlIC0wICAgIE5hTiAgICAtPiAgTmFOCitkcWRpdjgzNCBkaXZpZGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxZGl2ODM1IGRpdmlkZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzYgZGl2aWRlICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcWRpdjgzNyBkaXZpZGUgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFkaXY4NDEgZGl2aWRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDIgZGl2aWRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDMgZGl2aWRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDQgZGl2aWRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDUgZGl2aWRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDYgZGl2aWRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDcgZGl2aWRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDggZGl2aWRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDkgZGl2aWRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTAgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTEgZGl2aWRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTIgZGl2aWRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTMgZGl2aWRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTQgZGl2aWRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTUgZGl2aWRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTYgZGl2aWRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTcgZGl2aWRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTggZGl2aWRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTkgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWRpdjg2MSBkaXZpZGUgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkcWRpdjg2MiBkaXZpZGUgIE5hTjggIDEwMDAgIC0+ICBOYU44CitkcWRpdjg2MyBkaXZpZGUgIE5hTjcgIEluZiAgIC0+ICBOYU43CitkcWRpdjg2NCBkaXZpZGUgIE5hTjYgIE5hTjUgIC0+ICBOYU42CitkcWRpdjg2NSBkaXZpZGUgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkcWRpdjg2NiBkaXZpZGUgLTEwMDAgIE5hTjMgIC0+ICBOYU4zCitkcWRpdjg2NyBkaXZpZGUgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK2RxZGl2ODcxIGRpdmlkZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg3MiBkaXZpZGUgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzMgZGl2aWRlICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODc0IGRpdmlkZSAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg3NSBkaXZpZGUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzYgZGl2aWRlIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODc3IGRpdmlkZSAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg3OCBkaXZpZGUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzkgZGl2aWRlICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZHFkaXY4ODEgZGl2aWRlICAtTmFOOSAgLUluZiAgIC0+ICAtTmFOOQorZHFkaXY4ODIgZGl2aWRlICAtTmFOOCAgIDEwMDAgIC0+ICAtTmFOOAorZHFkaXY4ODMgZGl2aWRlICAtTmFONyAgIEluZiAgIC0+ICAtTmFONworZHFkaXY4ODQgZGl2aWRlICAtTmFONiAgLU5hTjUgIC0+ICAtTmFONgorZHFkaXY4ODUgZGl2aWRlICAtSW5mICAgLU5hTjQgIC0+ICAtTmFONAorZHFkaXY4ODYgZGl2aWRlICAtMTAwMCAgLU5hTjMgIC0+ICAtTmFOMworZHFkaXY4ODcgZGl2aWRlICAgSW5mICAgLU5hTjIgIC0+ICAtTmFOMgorCitkcWRpdjg5MSBkaXZpZGUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4OTIgZGl2aWRlIC1zTmFOOTggLTEgICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODkzIGRpdmlkZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg5NCBkaXZpZGUgLXNOYU45NiAtc05hTjk0IC0+IC1OYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4OTUgZGl2aWRlIC1OYU45NSAgLXNOYU45MyAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODk2IGRpdmlkZSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg5NyBkaXZpZGUgIDAgICAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4OTggZGl2aWRlICBJbmYgICAgLXNOYU45MCAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODk5IGRpdmlkZSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlIGJ5IDAKK2RxZGl2OTAxIGRpdmlkZSAgICAwICAgICAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkaXY5MDIgZGl2aWRlICAgIDAuMEU1ICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWRpdjkwMyBkaXZpZGUgICAgMC4wMDAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZGl2OTA0IGRpdmlkZSAgICAwLjAwMDEgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MDUgZGl2aWRlICAgIDAuMDEgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkwNiBkaXZpZGUgICAgMC4xICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTA3IGRpdmlkZSAgICAxICAgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MDggZGl2aWRlICAgIDEgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkwOSBkaXZpZGUgICAxMCAgICAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTEwIGRpdmlkZSAgIDFFKzEwMCAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MTEgZGl2aWRlICAgMUUrMTAwICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZGl2OTIxIGRpdmlkZSAgIC0wLjAwMDEgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MjIgZGl2aWRlICAgLTAuMDEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkyMyBkaXZpZGUgICAtMC4xICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTI0IGRpdmlkZSAgIC0xICAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MjUgZGl2aWRlICAgLTEgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkyNiBkaXZpZGUgIC0xMCAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTI3IGRpdmlkZSAgLTFFKzEwMCAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MjggZGl2aWRlICAtMUUrMTAwICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZGl2OTMxIGRpdmlkZSAgICAwLjAwMDEgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MzIgZGl2aWRlICAgIDAuMDEgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkzMyBkaXZpZGUgICAgMC4xICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTM0IGRpdmlkZSAgICAxICAgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MzUgZGl2aWRlICAgIDEgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkzNiBkaXZpZGUgICAxMCAgICAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTM3IGRpdmlkZSAgIDFFKzEwMCAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MzggZGl2aWRlICAgMUUrMTAwICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZGl2OTQxIGRpdmlkZSAgIC0wLjAwMDEgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5NDIgZGl2aWRlICAgLTAuMDEgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjk0MyBkaXZpZGUgICAtMC4xICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTQ0IGRpdmlkZSAgIC0xICAgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5NDUgZGl2aWRlICAgLTEgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjk0NiBkaXZpZGUgIC0xMCAgICAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTQ3IGRpdmlkZSAgLTFFKzEwMCAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5NDggZGl2aWRlICAtMUUrMTAwICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZHFkaXYxMDIxICBkaXZpZGUgMUUwICAgICAgICAgIDFFMCAtPiAxCitkcWRpdjEwMjIgIGRpdmlkZSAxRTAgICAgICAgICAgMkUwIC0+IDAuNQorZHFkaXYxMDIzICBkaXZpZGUgMUUwICAgICAgICAgIDNFMCAtPiAwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEwMjQgIGRpdmlkZSAxMDBFLTIgICAxMDAwRS0zIC0+IDEKK2RxZGl2MTAyNSAgZGl2aWRlIDI0RS0xICAgICAgICAyRTAgLT4gMS4yCitkcWRpdjEwMjYgIGRpdmlkZSAyNDAwRS0zICAgICAgMkUwIC0+IDEuMjAwCitkcWRpdjEwMjcgIGRpdmlkZSA1RTAgICAgICAgICAgMkUwIC0+IDIuNQorZHFkaXYxMDI4ICBkaXZpZGUgNUUwICAgICAgICAyMEUtMSAtPiAyLjUKK2RxZGl2MTAyOSAgZGl2aWRlIDVFMCAgICAgIDIwMDBFLTMgLT4gMi41CitkcWRpdjEwMzAgIGRpdmlkZSA1RTAgICAgICAgICAyRS0xIC0+IDI1CitkcWRpdjEwMzEgIGRpdmlkZSA1RTAgICAgICAgIDIwRS0yIC0+IDI1CitkcWRpdjEwMzIgIGRpdmlkZSA0ODBFLTIgICAgICAgM0UwIC0+IDEuNjAKK2RxZGl2MTAzMyAgZGl2aWRlIDQ3RS0xICAgICAgICAyRTAgLT4gMi4zNQorCistLSBFQ01BU2NyaXB0IGJhZCBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorZHFkaXYxMDQwICBkaXZpZGUgNSA5ICAtPiAwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogICAgaGFsZl9ldmVuCitkcWRpdjEwNDEgIGRpdmlkZSA2IDExIC0+IDAuNTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NSBJbmV4YWN0IFJvdW5kZWQKKworLS0gR3l1cmlzIGV4YW1wbGUKK2RxZGl2MTA1MCAgZGl2aWRlIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MTI1NCBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZHFkaXYxNzUxIGRpdmlkZSAgMWUrNDI3NyAgMWUtMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE3NTIgZGl2aWRlICAxZSs0Mjc3IC0xZS0zMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc1MyBkaXZpZGUgLTFlKzQyNzcgIDFlLTMzMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzU0IGRpdmlkZSAtMWUrNDI3NyAtMWUtMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE3NTUgZGl2aWRlICAxZS00Mjc3ICAxZSszMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTc1NiBkaXZpZGUgIDFlLTQyNzcgLTFlKzMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxNzU3IGRpdmlkZSAtMWUtNDI3NyAgMWUrMzMxMSAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWRpdjE3NTggZGl2aWRlIC0xZS00Mjc3IC0xZSszMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkcWRpdjE3NjAgZGl2aWRlIDFlLTYwNjkgMWUrMTAxIC0+IDFFLTYxNzAgU3Vibm9ybWFsCitkcWRpdjE3NjEgZGl2aWRlIDFlLTYwNjkgMWUrMTAyIC0+IDFFLTYxNzEgU3Vibm9ybWFsCitkcWRpdjE3NjIgZGl2aWRlIDFlLTYwNjkgMWUrMTAzIC0+IDFFLTYxNzIgU3Vibm9ybWFsCitkcWRpdjE3NjMgZGl2aWRlIDFlLTYwNjkgMWUrMTA0IC0+IDFFLTYxNzMgU3Vibm9ybWFsCitkcWRpdjE3NjQgZGl2aWRlIDFlLTYwNjkgMWUrMTA1IC0+IDFFLTYxNzQgU3Vibm9ybWFsCitkcWRpdjE3NjUgZGl2aWRlIDFlLTYwNjkgMWUrMTA2IC0+IDFFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE3NjYgZGl2aWRlIDFlLTYwNjkgMWUrMTA3IC0+IDFFLTYxNzYgU3Vibm9ybWFsCitkcWRpdjE3NjcgZGl2aWRlIDFlLTYwNjkgMWUrMTA4IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxNzY4IGRpdmlkZSAxZS02MDY5IDFlKzEwOSAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTc2OSBkaXZpZGUgMWUtNjA2OSAxZSsxMTAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkcWRpdjE3NzAgZGl2aWRlIDFlKzQwIDFlLTYxMDEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgQ2xhbXBlZAorZHFkaXYxNzcxIGRpdmlkZSAxZSs0MCAxZS02MTAyIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgQ2xhbXBlZAorZHFkaXYxNzcyIGRpdmlkZSAxZSs0MCAxZS02MTAzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgIENsYW1wZWQKK2RxZGl2MTc3MyBkaXZpZGUgMWUrNDAgMWUtNjEwNCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZAorZHFkaXYxNzc0IGRpdmlkZSAxZSs0MCAxZS02MTA1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzc1IGRpdmlkZSAxZSs0MCAxZS02MTA2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzc2IGRpdmlkZSAxZSs0MCAxZS02MTA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzc3IGRpdmlkZSAxZSs0MCAxZS02MTA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzc4IGRpdmlkZSAxZSs0MCAxZS02MTA5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzc5IGRpdmlkZSAxZSs0MCAxZS02MTEwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitkcWRpdjE4MDEgZGl2aWRlICAxLjAwMDBFLTYxNzIgIDEgICAgIC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwKK2RxZGl2MTgwMiBkaXZpZGUgIDEuMDAwRS02MTcyICAgMWUrMSAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFkaXYxODAzIGRpdmlkZSAgMS4wMEUtNjE3MiAgICAxZSsyICAtPiAxLjAwRS02MTc0ICAgU3Vibm9ybWFsCitkcWRpdjE4MDQgZGl2aWRlICAxLjBFLTYxNzIgICAgIDFlKzMgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxZGl2MTgwNSBkaXZpZGUgIDEuMEUtNjE3MiAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxZGl2MTgwNiBkaXZpZGUgIDEuM0UtNjE3MiAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgwNyBkaXZpZGUgIDEuNUUtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgwOCBkaXZpZGUgIDEuN0UtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgwOSBkaXZpZGUgIDIuM0UtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxMCBkaXZpZGUgIDIuNUUtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxMSBkaXZpZGUgIDIuN0UtNjE3MiAgICAgMWUrNCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxMiBkaXZpZGUgIDEuNDlFLTYxNzIgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxMyBkaXZpZGUgIDEuNTBFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxNCBkaXZpZGUgIDEuNTFFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxNSBkaXZpZGUgIDIuNDlFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxNiBkaXZpZGUgIDIuNTBFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxNyBkaXZpZGUgIDIuNTFFLTYxNzIgICAgMWUrNCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFkaXYxODE4IGRpdmlkZSAgMUUtNjE3MiAgICAgICAxZSs0ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwKK2RxZGl2MTgxOSBkaXZpZGUgIDNFLTYxNzIgICAgICAgMWUrNSAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxODIwIGRpdmlkZSAgNUUtNjE3MiAgICAgICAxZSs1ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWRpdjE4MjEgZGl2aWRlICA3RS02MTcyICAgICAgIDFlKzUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MjIgZGl2aWRlICA5RS02MTcyICAgICAgIDFlKzUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MjMgZGl2aWRlICA5LjlFLTYxNzIgICAgIDFlKzUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxZGl2MTgyNCBkaXZpZGUgIDFFLTYxNzIgICAgICAtMWUrNCAgLT4gLTFFLTYxNzYgICAgU3Vibm9ybWFsCitkcWRpdjE4MjUgZGl2aWRlICAzRS02MTcyICAgICAgLTFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTgyNiBkaXZpZGUgLTVFLTYxNzIgICAgICAgMWUrNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxODI3IGRpdmlkZSAgN0UtNjE3MiAgICAgIC0xZSs1ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFkaXYxODI4IGRpdmlkZSAtOUUtNjE3MiAgICAgICAxZSs1ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFkaXYxODI5IGRpdmlkZSAgOS45RS02MTcyICAgIC0xZSs1ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFkaXYxODMwIGRpdmlkZSAgMy4wRS02MTcyICAgIC0xZSs1ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RxZGl2MTgzMSBkaXZpZGUgIDEuMEUtNTk3NyAgICAgMWUrMjAwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxODMyIGRpdmlkZSAgMS4wRS01OTc3ICAgICAxZSsxOTkgLT4gMUUtNjE3NiAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcWRpdjE4MzMgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE4MzQgZGl2aWRlICAyLjBFLTU5NzcgICAgIDJlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE4MzUgZGl2aWRlICA0LjBFLTU5NzcgICAgIDRlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE4MzYgZGl2aWRlIDEwLjBFLTU5NzcgICAgMTBlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE4MzcgZGl2aWRlIDMwLjBFLTU5NzcgICAgMzBlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE4MzggZGl2aWRlIDQwLjBFLTU5ODIgICAgNDBlKzE2NiAtPiAxLjBFLTYxNDggU3Vibm9ybWFsCitkcWRpdjE4MzkgZGl2aWRlIDQwLjBFLTU5ODIgICAgNDBlKzE2NSAtPiAxLjBFLTYxNDcgU3Vibm9ybWFsCitkcWRpdjE4NDAgZGl2aWRlIDQwLjBFLTU5ODIgICAgNDBlKzE2NCAtPiAxLjBFLTYxNDYgU3Vibm9ybWFsCisKKy0tIHJhbmRvbXMKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkcWRpdjIwMTAgIGRpdmlkZSAgLTUyMzExOTU2NTI5MzE2NTE5NjgwMzQzNTYxMTcxMTg4NTAgICAgICAgICAtNzI0MzcxODY2NDQyMjU0ODU3MzIwMzI2MDk3MC4zNDk5NSAgICAgICAgICAtPiAgIDcyMjE2OS45MDk1ODMxMjg0NjI0NzM2MDUxNDYwNTUwNjgwIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDExICBkaXZpZGUgIC04OTU4NDY2OTc3MzkyNy44MjcxMTIzNzM1MDAyMjUxNTM1MiAgICAgICAgLTQyMDc3OTQzNzI4NTI5NjM1ODg0LjIxMTQyNjI3NTMyOTg1ICAgICAgICAgLT4gICAwLjAwMDAwMjEyOTAxNzI5MTE0NjQ3MTU2NTkyODEyNTg4NzUyNzI2NiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxMiAgZGl2aWRlICAtMi44MjgyMDE2OTMzNjA3MjMyMDM4MDY5NzQ4OTE5NDYxODBFLTIzMiAgICA4MTI1OTY1NDEyMjE4MjM5NjAzODYzODQ0MDMwODkyNDAuOSAgICAgICAgIC0+ICAtMy40ODA0NTAwNzU2NDA1MjEzMjAwNDAwNTU3NTkxMjUxMjBFLTI2NSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxMyAgZGl2aWRlICAtNjQ0Mjc3NTM3Mjc2MTA2OTI2NzUwMjkzNzUzOTQwODcyMCAgICAgICAgICAyNDkwNDA4NTA1Ni42OTE4NTQ2NTE0NTE4MjYwNjA4OTE5NiAgICAgICAgIC0+ICAtMjU4NzAzNTU2Mzg4MjI2NDYzNjg3NzAxLjQ4ODQ3MTk1ODkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMTQgIGRpdmlkZSAgIDUuNTM1NTIwMDExMjcyNjI1NjI5NjEwMDc5ODc5NzE0NzA1ICAgICAgICAtNDQzNDM2NjQ2NTAuNTcyMDMwNTIwMDMwNjgxMTM1MzEyMDggICAgICAgICAtPiAgLTEuMjQ4MzIyNjMwNzI4MDg5MzA4OTc1OTQwNTMzNDkzNTYyRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxNSAgZGl2aWRlICAgNjU5MTkyNzM3MTI1MTc4NjU5NjQzMjUuOTk0MTk2MjUwMTAgICAgICAgIC0zMTQ3MzMzNTQxNDEzODE3MzczNzg2MjI1MTUuNzc4OTA1NCAgICAgICAgIC0+ICAtMC4wMDAyMDk0NDQ4Mjk1NTIxNDkwNjE2Mzc5Nzg0NzU4OTExNjMyIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDE2ICBkaXZpZGUgIC03Ljc3OTE3MjU2ODE5MzE5NzEwNzExNTI3NTE0MDQzMTEyOUUrNzU5ICAgLTE0MDQ1MzAxNTYzOS4zOTg4OTg3NjUyODk1MTc4NzgyMTQzICAgICAgICAgLT4gICA1LjUzODYyOTc5MjE2MTY0MTUzNDk2Mjc3NDI0NDIzODExNUUrNzQ4IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDE3ICBkaXZpZGUgICA2NDQzMTQ4MzI1OTc1NjkuMDE4MTIyNjA2NzUxODE3ODc5NyAgICAgICAgLTExNTAyNDU4NTI1NzQyNS4xNjM1NzU5NTIxNTY1MjAxMDc1ICAgICAgICAgLT4gIC01LjYwMTU0MDE1MDM1NjQ3OTI1NzM2NzY4NzQ1MDkyMjc5NSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxOCAgZGl2aWRlICAgNi44OTg2NDA5NDE1Nzk2MTE0NTA2NzY1OTI1NTMyODY4NzBFLTQ3ICAgIC0xMTI3MjQyOTg4MTQwNzg1MTQ4NTE2MzkxNDk5OS4yNTk0MyAgICAgICAgIC0+ICAtNi4xMTk5MjM1NzgyODUzMzg2ODkzNzExMzc2NDgzMTkyODBFLTc1IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDE5ICBkaXZpZGUgIC0zNTkxMzQ0NTQ0ODg4NzI3MTMzLjMwODE5NzUwMTYzMjU0ICAgICAgICAgIDUzMjkzOTUuNDIzNzkyNzk1NjYxNDQ2NTYxMDkwMzMxMDM3ICAgICAgICAgLT4gIC02NzM4NzQ2NjI5NDEuMTk2ODUyNTU4OTQ2MDUzMzcyNTI5MCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyMCAgZGl2aWRlICAtNy42ODIzNTY3ODEzODQ2MzEzMTMxNTY0NjI3MjQ0MjU4MzhFKzc0NyAgIC02LjYwMzc1ODU1NTEyMjE5MDU3MjgxOTIyMTQxODA5OTQwRSs3MDMgICAgIC0+ICAgMS4xNjMzMzA5NjAyNzk1NTYwMTY2NzgzNzkxMjg4NzUxNDlFKzQ0IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDIxICBkaXZpZGUgIC00NTExNDk1NTk2NTk2OTQxODIwODYzMjI0LjI3NDY3OTY5OSAgICAgICAgIDMzNjUzOTUwMTcuMjYzMzI5Nzk1NDQ5NjYxNjE2MDkwNzI0ICAgICAgICAgLT4gIC0xMzQwNTU0NTQ4MTE1MzA0LjkwNDE2Njg4ODAxODM0NjI5OSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyMiAgZGl2aWRlICAgNS4yMTExNjQxMjc4NDA5MzE1MTcyNjM2Mzk2MDgxNTEyOTkgICAgICAgICAxNjQuNTU2NjM4MTM1NjI3NjU2NzAxMjUzMzg0NzAwNjQ1MyAgICAgICAgIC0+ICAgMC4wMzE2Njc5MDU4NzY1NTIyODg2NDQ3ODI2MDE1NzE1NjUxMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyMyAgZGl2aWRlICAtNDk4OTEuMjI0Mzg5MzQ1ODgzMDM4NDA3NzY4NDYyMDM4MyAgICAgICAgIC00NzE3OS45MzEyOTYxODYwNzQ3NTU0MDUzMzcxMTcxNTMwICAgICAgICAgIC0+ICAgMS4wNTc0NjcwODQzODY3NjcyOTE2MDIxODk2NTY0MzAyNjggSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjQgIGRpdmlkZSAgIDE1MDY1NDc3LjQ3MjE0MjY4NDg4MDc3NDE1NDYyNDEzMzUzICAgICAgICAgNDM2NjIxMS4xMjA4OTI5NTMyNjEzMDk1Mjk3NDA1NTI1OTYgICAgICAgICAtPiAgIDMuNDUwNDY5MzA5NjYxMjI3OTg0MjQ0NTQ1NTEzNDQxMzU5IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDI1ICBkaXZpZGUgICAxLjU3NTY3MDI2OTQ0MDc2MTg0NjEwOTYwMjQyOTYxMjY0NEUrMzcwICAgIDY1MzE5OTY0OTMyNDc0MDMwMC4wMDYxODU0ODI2NDM0MzkgICAgICAgICAgLT4gICAyLjQxMjIzMzc5NTcwMDM1OTE3MDkwNDU4ODU0ODA0MTQ4MUUrMzUyIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDI2ICBkaXZpZGUgIC0yMTEyNDIyMzExNzMzNDQ4OTI0NTczNDMyMTkyLjYyMDE0NSAgICAgICAgLTgwMDY3MjA2LjAzNTkwNjkzMTUzODQ4MjE1ODQ4NjEzNDA2ICAgICAgICAgLT4gICAyNjM4MzExNTA4OTQxNzY2MDE3NS4yMDEwMjY0Njc1NjU3NCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyNyAgZGl2aWRlICAtNjcwOTY1MzYwNTEyNzk4MDkuMzIyMTg2MTE1NDg3MjE4MzkgICAgICAgIC04Njk2ODU0MTI4ODE5NDEwODE2NjQyNTE5OTAxODEuMTA0OSAgICAgICAgIC0+ICAgNy43MTUwMzUyMzY1ODQ4MDU5MjEyNzg1NjYzNjUyMzExNjhFLTE0IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDI4ICBkaXZpZGUgIC01ODYxMjkwODU0ODk2MjA0Ny4yMTg2NjkxMzQyNTQ4ODk3MiAgICAgICAgLTk3ODQ0OTU5NzUzMS4zODczNjY1NTgzNDc1NjMzODMxNjQ0ICAgICAgICAgLT4gICA1OTkwMy44NjA4NTk5MTcwMzA5MTIzNjUwNzg1OTgzNzAyMyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyOSAgZGl2aWRlICAtMTMzMDMyNDEyMDEwOTQyLjE0NzY4NjQxMzgyMTMzMTk3OTYgICAgICAgIC03Ljg4MjA1OTI5MzQ5ODY3MDcwNTQ0NjUyODY0ODIwMTM1OUUtNDI4ICAgIC0+ICAgMS42ODc3ODc1MDY1MDQ0MzMwNjQ1NDk1MTU2ODE2OTM3MTVFKzQ0MSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzMCAgZGl2aWRlICAgMS44Mzc0NjY5ODMzODk2NjAyOTQ5MjI5OTcxNjM2MDUxM0UrOTc3ICAgIC05Ljg5NzkyNjYwODk3OTY0OTk1MTY3MjgzOTg3OTEyODYwM0UrMTU0ICAgIC0+ICAtMS44NTY0MTYwNTE1NDIyMTI1NTIwNDIzOTAyMTgwNjI0NThFKzgyMiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzMSAgZGl2aWRlICAtMTEzNzQyNDc1ODQxMzk5MjM2MzA3MTI4OTYyLjE1MDcwNjMgICAgICAgICA4Mjk4NjAyLjIwMzA0OTgzNDczMjY1NzU2Nzk2NTI2Mjk4OSAgICAgICAgIC0+ICAtMTM3MDYyMjEwMDY2NjUxMzc4MjYuMTY1NTczOTM5MTk5MjkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzIgIGRpdmlkZSAgIDE5Ni40Nzg3NTc0NjUwNzU0MTUyOTk1OTQxODA4MzMxODYyICAgICAgICAgOTI5LjY1NTMzODg0NzIzMTgwOTQ0Mjc0MjIxMTcxNzIzOTQgICAgICAgICAtPiAgIDAuMjExMzQ1ODA2NjE3NjUyNjY1MTAwNjkxNzkyMjgxNDAxOCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzMyAgZGl2aWRlICAgNzE5MzEyMjE0NjUuNDM4Njc5OTYyODI4MDM2MjgxMzAzNTAgICAgICAgICAzODM4Njg1OTM0MjA2NDI2MjU3MDkwNzE4LjQwMjI0ODg1MyAgICAgICAgIC0+ICAgMS44NzM4NTAxMzI1Mjc0MjM0MTM2MDcxOTk1MTMzMjQwMjFFLTE0IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDM0ICBkaXZpZGUgICA0ODguNDI4MjUwMjI4OTY1MTY1Mzc4MzU5NjI0NjMxMjg4NSAgICAgICAgLTgwLjY4OTQwOTU2ODA2NjM0MjgwMDc4NzA2NTc3OTUzMTg4ICAgICAgICAgLT4gIC02LjA1MzE4OTA0NzI4MDY5MzMxODg0NDgwMTg5OTQ3MzI3MiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzNSAgZGl2aWRlICAgOS4wMDE3NjQzNDQ5NjM5MjE3NTQ5ODE3NjI5MTMyNDczOTRFLTE2MiAgIC04LjU4NTU0MDk3MzY2NzIwNTc1MzczNDk2NzY0NTM4NjkxOUUtNzI5ICAgIC0+ICAtMS4wNDg0Nzk1NzQyNzE4MjczMjYzOTYwMTI1NzMyMzI5MzRFKzU2NyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzNiAgZGl2aWRlICAtNy40MDQxMzM5NTk0MDk4OTQ3NDM3MDY0MDI4NTcxNDU0NzFFLTgyOCAgIC01MS4zODE1OTkyOTQ2MDI4OTcxMTEzNDY4NDg0MzA4NjI2NSAgICAgICAgIC0+ICAgMS40NDEwMDg4NTU1MTYwMjk0NjEwMzIwNjE3ODUyMTk3NzNFLTgyOSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzNyAgZGl2aWRlICAgMi45Njc1MjAyMzU1NzQ0MTk3OTQwNDg5OTQ0MzYwNDA3MTdFLTYxMyAgIC02MjUyNTEzODU1LjkxMzk0ODk0OTQ5ODc5MjYyNzMxODg5ICAgICAgICAgIC0+ICAtNC43NDYxMjM0MDU2NTY0MDkxMjc1NzI5OTg3NTE4ODUzMzhFLTYyMyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzOCAgZGl2aWRlICAtMTg4MjY4NTI2NTQ4MjQwNDA1MDUuODM5MjAzNjY3NjUwNTEgICAgICAgIC02MzM2OTI0ODc3OTQyNDM3OTkyNTkwNTU3NDYwMTQ3MzQwICAgICAgICAgIC0+ICAgMi45NzA5NzYxNDY1NDY0OTQ2Njk4MDc4ODYyNzg1MTkxOTRFLTE1IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDM5ICBkaXZpZGUgIC04LjEwMTQwNjc4NDgwOTE5NzYwNDk0OTU4NDAwMTczNTk0OUUrNTYxICAgIDQuODIzMzAwMzA2OTQ4OTQyODIxMDc2NjgxNjU4NzcxNjM1RSszNjEgICAgLT4gIC0xLjY3OTYzOTcyMTYxMDgzOTIwNDczODQ0NTc0NzIzODk4N0UrMjAwIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDQwICBkaXZpZGUgIC02LjExOTgxOTc3NzczMDk0MDUyMzMxMDYyNTg1MTkxNzIzRSsyOTUgICAgIDEuNTA3NjEwMjUzNzU1MzM5MzI4MzAyNzc5MDA1NTg2NTM0RSsyMzggICAgLT4gIC00LjA1OTI4NTA1ODkxMTU3NzI0NDA0NDQxODQxNjA0NDc2M0UrNTcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDEgIGRpdmlkZSAgIDYuNDcyNjM4ODUwMDQ2ODE1ODgwNTk5MjIwNTM0Mjc0MDU1RS01OTYgICAtNC40NzUyMzM3MTIwODMwNDc1MTY5MzM5MTE3ODYxNTk5NzIgICAgICAgICAtPiAgLTEuNDQ2MzI0MjA3MDYyMjYxNzQ1NTIwNDk2NDc1Nzc4ODc5RS01OTYgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDIgIGRpdmlkZSAgLTg0NDM4NTkzMzMwLjcxMjc3ODM5NjMxMTQ0NTA5Mzk3MTEyICAgICAgICAtNTg2Njg0NTk2MjA0NDAxNjY0MjA4OTQ3LjQwNTQ4Nzk2MzMgICAgICAgICAtPiAgIDEuNDM5MjUwMjE4NTUwMDQxMjI4NzU5OTgzOTM3NzcyNTA0RS0xMyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0MyAgZGl2aWRlICAgOS4zNTQ1MzMyMzMyOTQwMjI2MTY2OTU4MTU2NTY3MDQzNjlFLTI0ICAgICA0MDUuNTAwMzkwNjI2MTM1MzA0MjUyMTQ0MTYzNTkxNzQ2ICAgICAgICAgIC0+ICAgMi4zMDY5MTEwMjg4Mjc3NzQ1NDk3NDA1NzEyMjk3MzYxOThFLTI2IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDQ0ICBkaXZpZGUgICA5ODU2MDY0MjMzNTAyMTAuNzM3NDg3NjY1MDE0OTk1Nzg4MSAgICAgICAgLTM2ODExNTYzNjk3LjQxOTI1NjgxODY2Njk0ODU5ODI4Nzk0ICAgICAgICAgLT4gIC0yNjc3NC4zNjk5MDg2NDExOTQ0NTMzNTgxMzM1NDcxNzcxMSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0NSAgZGl2aWRlICAtOC4xODcyODA3NzQxNzc3MTU3MDYyNzgwMDIyNDc3NjYzMTFFLTEyMyAgIC0zODc4NDEyNDM5My45MTIxMjg3MDgyODQzMDAwMTMwMDA2OCAgICAgICAgIC0+ICAgMi4xMTA5ODc2NTMzNTYxMzkxNDczNTcyNDA3Mjc3OTQzNjVFLTEzMyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0NiAgZGl2aWRlICAtNC42MTIyMDMxMjYzNTAwNzA5MDM0NTkyNDU3OTgzNzE2NTdFKzkxMiAgICA3Ljk3MTU2MjE4MjcyNzk1NjI5MDkwMTk4NDczNjgwMDUxOUUrNjQgICAgIC0+ICAtNS43ODU4MjA5MjI3MDg2ODMyMzcwOTg4MjY2NjI3Njk3NDhFKzg0NyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0NyAgZGl2aWRlICAgNC42NjEwMTU5MDk0MjE0ODUyOTgyNDc5Mjg5Njc5NzcwODlFKzg4OCAgIC02LjM2MDkxMTI1MzMyMzkyMjMzODczNzMxMTU2Mzg0NTU4MUUrMzg4ICAgIC0+ICAtNy4zMjc1OTE0NzgzMjEzNjU5ODAxNTY2NTQ1Mzk2Mzg4MzZFKzQ5OSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0OCAgZGl2aWRlICAgOTE1NjA3ODE3MjkwMy4yNTc1MDAwMDMyNjA3MTA4MzMwMzAgICAgICAgICA3LjE4OTc5NjY1MzI2MjE0NzEzOTA3MTYzNDIzNzk2NDA3NEUtOTAgICAgIC0+ICAgMS4yNzM0ODIyMTU3NjYwMDA5OTQzNjUyMDE1NDUwOTYwMjZFKzEwMiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0OSAgZGl2aWRlICAtMS43MTA3MjIzMDMzMjc0NzY1ODYzNzM0Nzc3ODEyNzY1ODZFLTMxMSAgIC0zMTY3NTYxNjI4MjYwMTU2ODM3MzI5MzIzLjcyOTM4MDY5NSAgICAgICAgIC0+ICAgNS40MDA3NTQ1OTk1Nzg2MTM5ODQ4NzU3NTI5NTg2NDU2NTVFLTMzNiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1MCAgZGl2aWRlICAtNC42NDc5MzUyMTA4ODE4MDYyMzgzMjE2MTYzNDU0MTMwMjFFLTg3OCAgICAyMDkzODguNTQzMTg2Nzc0NDY0ODE3NzMwODQ2MDYzOTU4MiAgICAgICAgIC0+ICAtMi4yMTk3NjU3NzEzOTQ1OTM3MzMxNDA0OTQyOTczODgxNDBFLTg4MyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1MSAgZGl2aWRlICAgNTk1OC42OTQ3MjgzOTU3NjA5OTI3MTkwODQ3ODE1ODI3MDAgICAgICAgICA0LjU0MTUxMDE1NjU2NDMxNTYzMjUzNjM1MzE3MTg0NjA5NkUtNzQ2ICAgIC0+ICAgMS4zMTIwNTEzOTMyNTM2Mzg2NjQ5NDc4NTI2OTMwMDU0ODBFKzc0OSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1MiAgZGl2aWRlICAtNy45MzU3MzI1NDQ2NDk3MDIxNzUyNTY2OTk4ODY4NzIwOTNFLTQ4OSAgIC03LjQzMzMyOTA3MzY2NDc5MzEzODk5ODc2NTY0NzQ2Nzk3MUUrMzYwICAgIC0+ICAgMS4wNjc1ODc5NDk2MjYwNzY5MTc2NzIyNzE2MTk2NjQ2NTZFLTg0OSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1MyAgZGl2aWRlICAtMjc0NjY1MDg2NDYwMTE1Ny44NjM1ODk5NTk5Mzk5MDEzNTAgICAgICAgICA3LjAxNjY4NDk0NTUwNzY0NzUyODkwNzE4NDY5NDM1OTU5OEUrNTQ4ICAgIC0+ICAtMy45MTQ0NTY1OTMwMDkzMDk1MjkzNTEyNTQ5NTA0Mjk5MzJFLTUzNCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1NCAgZGl2aWRlICAgMzYwNTE0OTQwODYzMTE5NzM2NTQ0Nzk1My45OTQ1NjkxNzggICAgICAgIC03NTYxNDAyNTgyNTY0OTA4Mi43ODI2NDg2NDQyODIzNzgzMyAgICAgICAgIC0+ICAtNDc2NzgzMTUuODg0NzI2OTM1MDcwNjAwNjMxODgwMjA1MzIgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTUgIGRpdmlkZSAgIDc4ODE5NDMyMDkyMTc5ODQwNDkwNjM3NTIxNC4xOTYzNDkgICAgICAgICAtNi4yMjI3MTgxNDg0MzMyNDczODQ5MzI1NzM0MDE5NzYzMzdFLTQxOCAgICAtPiAgLTEuMjY2NjM5OTE4NjM0NjcxODAzOTgyMjIyMjQ0OTc3Mjg3RSs0NDQgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTYgIGRpdmlkZSAgIDU2MjA3MjI3MzA1MzQ3NTIuNzU4MjA4OTQzNDQ3NjAzMjExICAgICAgICAgNi44NDM1NTI4NDExNjg1MzgzMTkxMjMwMDA5MTc2NTc3NTlFLTEzOSAgICAtPiAgIDguMjEzMTY0ODAwNDg1NDM0NjY2NjI5OTcwNDQzNzM5NTU0RSsxNTMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTcgIGRpdmlkZSAgIDczMDQ1MzQ2NzY3MTM3MDM5MzgxMDIuNDAzOTQ5MDE5NDAyICAgICAgICAtNTc2MTY5LjM2ODUwMTA5MzUxMDgxNTMwMjM4MDM1OTA4MzUgICAgICAgICAtPiAgLTEyNjc3NzU2MDE0MjAxOTk1LjMxOTY5MjM3MTQ0Mzk0NzcyIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDU4ICBkaXZpZGUgICA4MDY3OTE4NzYyLjEzNDYyMTYzOTI1NDkxNjc4Njk0NTU0NyAgICAgICAgLTguNzc0NzcxNDgwMDU1NTM2MDA5MTA1NTk2MTYzODY0NzU4RSs5NTQgICAgLT4gIC05LjE5NDQ0ODg1ODgzNjMzMjE1Njc2Njc2NDYwNTEyNTI0NUUtOTQ2IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDU5ICBkaXZpZGUgICA4LjcwMjA5MzQ1NDEyMzA0NjUwNzU3ODI1Njg5OTUzNzU2M0UtMzI0ICAgLTUuODc1Mzk5NzMzMDE2MDE4NDA0NTgwMjAxMTc2NTc2MjkzRS00MDEgICAgLT4gIC0xLjQ4MTEwNjYyMjQ1MjA1MjU4MTQ3MDQ0MzUyNjk1NzMzNUUrNzcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNjAgIGRpdmlkZSAgLTQxNDI2LjAxNjYyNTE4NDUxODYxMzg2MzUyNDE1MDkyMzU2ICAgICAgICAgOTAuMDAxNDY2MjE2ODQ0NzgzMDA1MTA3Njk4MDIwMTM0NjQgICAgICAgICAtPiAgLTQ2MC4yODE1NzUwMjg3MzE4NjkyNzMyMDY3NzA5MTc2MjAwIEluZXhhY3QgUm91bmRlZAorCistLSByYW5kb20gZGl2aWRlIHRlc3RzIHdpdGggcmVzdWx0IG5lYXIgMQorZHFkaXY0MDAxIGRpdmlkZSAgMjAwMzEwMDM1Mjc3MDc1Mzk2OTg3ODkyNTY2NDUyNDkwMCAgIDIwMDMxMDAzNTI3NzA3NTM5Njk4Nzg5MjU2NjQ0OTc4MjQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMzUxNyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDIgZGl2aWRlICA0ODE3Nzg1NzkzOTE2NDkwNjUyNTc5NTUyMzE4MzcxNjQ1ICAgNDgxNzc4NTc5MzkxNjQ5MDY1MjU3OTU1MjMxODM2MjA5NyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOTgyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwMyBkaXZpZGUgIDgyOTkxODc0MTA5MjAwNjczMjU2NDgwNjg0Mzk1NjAyODIgICA4Mjk5MTg3NDEwOTIwMDY3MzI1NjQ4MDY4NDM5NTkxMTU5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYyNzk1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwNCBkaXZpZGUgIDU2NDEwODg0NTU4OTc0MDcwNDQ1NDQ0NjE3ODUzNjU4OTkgICA1NjQxMDg4NDU1ODk3NDA3MDQ0NTQ0NDYxNzg1Mzg5OTY1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU3MzM4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwNSBkaXZpZGUgIDU3NTIyNzQ2OTQ3MDY1NDUzNTkzMjYzNjEzMTM0OTA0MjQgICA1NzUyMjc0Njk0NzA2NTQ1MzU5MzI2MzYxMzEzNTAyNzIzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTc4NjE5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwNiBkaXZpZGUgIDY3NjIwNzk0NzczNzM2NzA1OTQ4MjkzMTkzNDYwOTk2NjUgICA2NzYyMDc5NDc3MzczNjcwNTk0ODI5MzE5MzQ2MTMyNTc5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUxMzI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwNyBkaXZpZGUgIDcyODY0MjUxNTM2OTE4OTAzNDE2MzMwMjMyMjI2MDI5MTYgICA3Mjg2NDI1MTUzNjkxODkwMzQxNjMzMDIzMjIyNjA2NTU2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwOCBkaXZpZGUgIDk0ODEyMzM5OTE5MDEzMDU3Mjc2NDgzMDY0MjE5NDY2NTUgICA5NDgxMjMzOTkxOTAxMzA1NzI3NjQ4MzA2NDIxOTE5MTI0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MDQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDA5IGRpdmlkZSAgNDI4MjA1Mzk0MTg5Mzk1MTc0MjAyOTQ0NDA2NTYxNDMxMSAgIDQyODIwNTM5NDE4OTM5NTE3NDIwMjk0NDQwNjU1ODMwNzcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzI5NCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMTAgZGl2aWRlICAgNjI2ODg4MjI1NDQxMjUwNjM5NzQxNzgxODUwMzM4Njk1ICAgIDYyNjg4ODIyNTQ0MTI1MDYzOTc0MTc4MTg1MDMyNzI5OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MTc5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxMSBkaXZpZGUgIDM4NjA5NzM2NDkyMjIwMjgwMDk0NTY1OTg2MDQ0Njg1NDcgICAzODYwOTczNjQ5MjIyMDI4MDA5NDU2NTk4NjA0NDc2ODQ5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTc4NDk4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxMiBkaXZpZGUgIDQ3NTMxNTcwODAxMjc0NjgxMjc5MDgwNjA2MDc4MjE4MzkgICA0NzUzMTU3MDgwMTI3NDY4MTI3OTA4MDYwNjA3Nzg4Mzc5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwNDAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDEzIGRpdmlkZSAgIDU1MjQ0ODU0NjIwMzc1NDA2MjgwNTcwNjI3Nzg4MDQxOSAgICA1NTI0NDg1NDYyMDM3NTQwNjI4MDU3MDYyNzc4ODE5MDMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzMxMzggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE0IGRpdmlkZSAgODQwNTk1NDUyNzk1MjE1ODQ1NTMyMzcxMzcyODkxNzM5NSAgIDg0MDU5NTQ1Mjc5NTIxNTg0NTUzMjM3MTM3Mjg5MzM4NjYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODA0MDYgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE1IGRpdmlkZSAgNzU1NDA5NjUwMjIzNTMyMTE0MjU1NTgwMjIzODAxNjExNiAgIDc1NTQwOTY1MDIyMzUzMjExNDI1NTU4MDIyMzgwMjY1NDYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODYxOTMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE2IGRpdmlkZSAgNDA1MzI1NzY3NDEyNzUxODYwNjg3MTA1NDkzNDc0Njc4MiAgIDQwNTMyNTc2NzQxMjc1MTg2MDY4NzEwNTQ5MzQ3NjczNTUgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDkyNDMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE3IGRpdmlkZSAgNzExMjQxOTQyMDc1NTA5MDQ1NDcxNjg4ODg0NDAxMTU4MiAgIDcxMTI0MTk0MjA3NTUwOTA0NTQ3MTY4ODg4NDQwMzgxMDUgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjI3MDkgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE4IGRpdmlkZSAgMzEzMjMwMjEzNzUyMDA3MjcyODE2NDU0OTczMDkxMTg0NiAgIDMxMzIzMDIxMzc1MjAwNzI3MjgxNjQ1NDk3MzA5MDg0MTYgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMTkgZGl2aWRlICA0Nzg4Mzc0MDQ1ODQxNDE2MzU1NzA2NzE1MDQ4MTYxMDEzICAgNDc4ODM3NDA0NTg0MTQxNjM1NTcwNjcxNTA0ODE5MDA3NyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzOTMwMyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjAgZGl2aWRlICA5NDY2MDIxNjM2MDQ3NjMwMjE4MjM4MDc1MDk5NTEwNTk3ICAgOTQ2NjAyMTYzNjA0NzYzMDIxODIzODA3NTA5OTQ4NDA1MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyODA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyMSBkaXZpZGUgICA5MTI3NDI3NDU2NDY3NjU2MjU1OTczOTk2OTIxMzg2NTAgICAgOTEyNzQyNzQ1NjQ2NzY1NjI1NTk3Mzk5NjkyMTM5MDQyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NzA1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyMiBkaXZpZGUgIDk1MDg0MDI3NDI5MzM2NDMyMDg4MDYyNjQ4OTcxODg1MDQgICA5NTA4NDAyNzQyOTMzNjQzMjA4ODA2MjY0ODk3MTk1OTczICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMTQ1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyMyBkaXZpZGUgIDExODY5NTY3OTU3MjcyMzM3MDQ5NjIzNjE5MTQzNjA4OTUgICAxMTg2OTU2Nzk1NzI3MjMzNzA0OTYyMzYxOTE0MzI5NTc3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYzODUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDI0IGRpdmlkZSAgNTk3MjIxMDI2ODgzOTAxNDgxMjY5NjkxNjE3MDk2NzkzOCAgIDU5NzIyMTAyNjg4MzkwMTQ4MTI2OTY5MTYxNzA5NTQ5NzQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjE3MSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjUgZGl2aWRlICAyMzAzODAxNjI1NTIxNjE5OTMwODk0NDYwMTM5NzkzMTQwICAgMjMwMzgwMTYyNTUyMTYxOTkzMDg5NDQ2MDEzOTc5OTY0MyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MTc3MyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjYgZGl2aWRlICA2MDIyMjMxNTYwMDAyODk4MjY0Nzc3MzkzNDczOTY2NTk1ICAgNjAyMjIzMTU2MDAwMjg5ODI2NDc3NzM5MzQ3Mzk0NzE5OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyNyBkaXZpZGUgIDg0MjYxNDgzMzU4MDEzOTYxOTk5NjkzNDYwMzIyMTA4OTMgICA4NDI2MTQ4MzM1ODAxMzk2MTk5OTY5MzQ2MDMyMjAzMTc5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MTUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDI4IGRpdmlkZSAgODgxMjI3ODk0NzAyODc4NDYzNzM4Mjg0NzA5ODQxMTc0OSAgIDg4MTIyNzg5NDcwMjg3ODQ2MzczODI4NDcwOTgzODUzMTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk5OSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjkgZGl2aWRlICA4MTQ1MjgyMDAyMzQ4MzY3MzgzMjY0MTk3MTcwMTE2MTQ2ICAgODE0NTI4MjAwMjM0ODM2NzM4MzI2NDE5NzE3MDA4Mzk4OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOTQ4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzMCBkaXZpZGUgIDY4MjE1Nzc1NzE4NzY4NDAxNTMxMjM1MTAxMDczODcwMjYgICA2ODIxNTc3NTcxODc2ODQwMTUzMTIzNTEwMTA3NDE4MDA4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU0NTgyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzMSBkaXZpZGUgIDkwMTg1NTUzMTk1MTg5NjY5NzA0ODA1NjU0ODIwMjM3MjAgICA5MDE4NTU1MzE5NTE4OTY2OTcwNDgwNTY1NDgyMDEzMzQ2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExNTAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDMyIGRpdmlkZSAgNDYwMjE1NTcxMjk5ODIyODQ0OTY0MDcxNzI1Mjc4ODg2NCAgIDQ2MDIxNTU3MTI5OTgyMjg0NDk2NDA3MTcyNTI4MTg1MDIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MzU2MDAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDMzIGRpdmlkZSAgNjY3NTYwNzQ4MTUyMjc4NTYxNDUwNjgyODI5MjI2NDQ3MiAgIDY2NzU2MDc0ODE1MjI3ODU2MTQ1MDY4MjgyOTIyNzcxMDAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODEwODMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDM0IGRpdmlkZSAgNDAxNTg4MTUxNjg3MTgzMzg5Nzc2Njk0NTgzNjI2NDQ3MiAgIDQwMTU4ODE1MTY4NzE4MzM4OTc3NjY5NDU4MzYyNjI2NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMzUgZGl2aWRlICAxNDE1NTgwMjA1OTMzNDExODM3NTk1NDU5NzE2OTEwMzY1ICAgMTQxNTU4MDIwNTkzMzQxMTgzNzU5NTQ1OTcxNjg4MDEzOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxMzUyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzNiBkaXZpZGUgIDk0MzI5NjgyOTcwNjk1NDI4MTY3NTIwMzUyNzYzNjE1NTIgICA5NDMyOTY4Mjk3MDY5NTQyODE2NzUyMDM1Mjc2MzUzMDU0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDM3IGRpdmlkZSAgNDc5OTMxOTU5MTMwMzg0ODUwMDUzMjc2NjY4MjE0MDY1OCAgIDQ3OTkzMTk1OTEzMDM4NDg1MDA1MzI3NjY2ODIxNzI2NTUgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MzMzMzAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDM4IGRpdmlkZSAgIDMxNjg1NDI3MDczMjgzOTUyOTc5MDU4NDI4NDk4NzQ3MiAgICAzMTY4NTQyNzA3MzI4Mzk1Mjk3OTA1ODQyODUwMDQ4MzIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0NTIxMTQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDM5IGRpdmlkZSAgMzU5ODk4MTMwMDU5MjQ5MDQyNzgyNjAyNzk3NTY5NzQxNSAgIDM1OTg5ODEzMDA1OTI0OTA0Mjc4MjYwMjc5NzU2ODY3MTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk3NCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDAgZGl2aWRlICAxNjY0MzE1NDM1Njk0NDYxMzcxMTU1ODAwNjgyMTk2NTIwICAgMTY2NDMxNTQzNTY5NDQ2MTM3MTE1NTgwMDY4MjE5NTYxNyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0MSBkaXZpZGUgIDE2ODA4NzIzMTY1MzExMjg4OTAxMDI4NTUzMTY1MTA1ODEgICAxNjgwODcyMzE2NTMxMTI4ODkwMTAyODU1MzE2NDk1NTQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5NDUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQyIGRpdmlkZSAgOTg4MTI3NDg3OTU2NjQwNTQ3NTc1NTQ5OTI4MTY0NDczMCAgIDk4ODEyNzQ4Nzk1NjY0MDU0NzU3NTU0OTkyODE2MTU3NDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkzNCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDMgZGl2aWRlICA0NzM3MjI1OTU3NzE3NDY2OTYwNDQ3MjA0MjMyMjc5MjE2ICAgNDczNzIyNTk1NzcxNzQ2Njk2MDQ0NzIwNDIzMjI3NzQ1MiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0NCBkaXZpZGUgIDI0ODIwOTczNzk0MTQ4NjcwNjEyMTMzMTkzNDY0MTgyODggICAyNDgyMDk3Mzc5NDE0ODY3MDYxMjEzMzE5MzQ2Mzg3OTM2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIyMjggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQ1IGRpdmlkZSAgNzQwNjk3NzU5NTIzMzc2MjcyMzU3NjQzNDEyMjE2MTg2OCAgIDc0MDY5Nzc1OTUyMzM3NjI3MjM1NzY0MzQxMjIxODkwNDIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjMzMTMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQ2IGRpdmlkZSAgIDIyODc4MjA1Nzc1NzU2NjA0NzA4NjU5MzI4MTc3MzU3NyAgICAyMjg3ODIwNTc3NTc1NjYwNDcwODY1OTMyODE3Njk3MjcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNjgyOCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDcgZGl2aWRlICAyOTU2NTk0MjcwMjQwNTc5NjQ4ODIzMjcwNTQwMzY3NjUzICAgMjk1NjU5NDI3MDI0MDU3OTY0ODgyMzI3MDU0MDM2ODU1NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Njk0NiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDggZGl2aWRlICA2MzI2OTY0MDk4ODk3NjIwNjIwNTM0MTM2NzY3NjM0MzQwICAgNjMyNjk2NDA5ODg5NzYyMDYyMDUzNDEzNjc2NzYxOTMzOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzcxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0OSBkaXZpZGUgICA0MTQ1ODY0NDA0NTY1OTAyMTUyNDcwMDI2NzgzMjc4MDAgICAgNDE0NTg2NDQwNDU2NTkwMjE1MjQ3MDAyNjc4MzE2OTIyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYyMzggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDUwIGRpdmlkZSAgNzM2NDU1MjIwODU3MDAzOTM4NjIyMDUwNTYzNjc3OTEyNSAgIDczNjQ1NTIyMDg1NzAwMzkzODYyMjA1MDU2MzY4MDM1NDggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjY4MzcgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDUxIGRpdmlkZSAgNTYyNjI2Njc0OTkwMjM2OTcxMDAyMjgyNDk1MDU5MDA1NiAgIDU2MjYyNjY3NDk5MDIzNjk3MTAwMjI4MjQ5NTA1OTEwMDggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgzMDggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDUyIGRpdmlkZSAgNDg2MzI3ODI5MzkxNjE5NzQ1NDk4NzQ4MTM0MzQ2MDQ4NCAgIDQ4NjMyNzgyOTM5MTYxOTc0NTQ5ODc0ODEzNDM0NDI1MjIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzY5MyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNTMgZGl2aWRlICAxMTcwNzEzNTgyMDMwNjM3MzU5NzEzMjQ5Nzk2ODM1NDgzICAgMTE3MDcxMzU4MjAzMDYzNzM1OTcxMzI0OTc5NjgyMzM0NSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMzY4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1NCBkaXZpZGUgIDk4MzgwNjI0OTQ3MjU5NjU2Njc3NzYzMjY1NTYwNTI5MzEgICA5ODM4MDYyNDk0NzI1OTY1NjY3Nzc2MzI2NTU2MDYxMDAyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkxNzk2ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1NSBkaXZpZGUgIDQwNzEzODg3MzEyOTg4NjEwOTMwMDU2ODcwOTE0OTg5MjIgICA0MDcxMzg4NzMxMjk4ODYxMDkzMDA1Njg3MDkxNDk4Mjc4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNTggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDU2IGRpdmlkZSAgODc1MzE1NTcyMjMyNDcwNjc5NTg1NTAzODU5MDI3MjUyNiAgIDg3NTMxNTU3MjIzMjQ3MDY3OTU4NTUwMzg1OTAyNzY2NTYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUyODIgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDU3IGRpdmlkZSAgNDM5OTk0MTkxMTUzMzI3MzQxODg0NDc0MjY1ODI0MDQ4NSAgIDQzOTk5NDE5MTE1MzMyNzM0MTg4NDQ3NDI2NTgyMTk4OTEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDY4MSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNTggZGl2aWRlICA0MTI3ODg0MTU5OTQ5NTAzNjc3Nzc2NDMwNjIwMDUwMjY5ICAgNDEyNzg4NDE1OTk0OTUwMzY3Nzc3NjQzMDYyMDAyNjA5MSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ODU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1OSBkaXZpZGUgIDU1MzYxNjA4MjIzNjA4MDAwNjcwNDI1MjgzMTc0Mzg4MDggICA1NTM2MTYwODIyMzYwODAwMDY3MDQyNTI4MzE3NDUwNjg3ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTc4NTQzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2MCBkaXZpZGUgIDM5NzMyMzQ5OTg0Njg2NjQ5MzY2NzEwODgyMzc3MTAyNDYgICAzOTczMjM0OTk4NDY4NjY0OTM2NjcxMDg4MjM3NzQxODg2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIwMzY3ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2MSBkaXZpZGUgIDk4MjQ4NTU5MzU2MzgyNjM1OTM0MTA0NDQxNDIzMjczNTggICA5ODI0ODU1OTM1NjM4MjYzNTkzNDEwNDQ0MTQyMzI4NTc2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4NzYwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2MiBkaXZpZGUgIDU5MTcwNzg1MTczNDAyMTgxMzE4NjczMjczMDA4MTQ4NjcgICA1OTE3MDc4NTE3MzQwMjE4MTMxODY3MzI3MzAwNzg4NzAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0MjIgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDYzIGRpdmlkZSAgNDM1NDIzNjYwMTgzMDU0NDg4MjI4NjEzOTYxMjUyMTM2MiAgIDQzNTQyMzY2MDE4MzA1NDQ4ODIyODYxMzk2MTI1NDMyMjMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDk3OTQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDY0IGRpdmlkZSAgODA1ODQ3NDc3MjM3NTI1OTAxNzM0MjExMDAxMzg5MTI5NCAgIDgwNTg0NzQ3NzIzNzUyNTkwMTczNDIxMTAwMTM5MDY3OTIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODA3NjggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDY1IGRpdmlkZSAgNTUxOTYwNDAyMDk4MTc0ODE3MDUxNzA5Mzc0NjE2NjMyOCAgIDU1MTk2MDQwMjA5ODE3NDgxNzA1MTcwOTM3NDYxODE3NjMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzIwMzYgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDY2IGRpdmlkZSAgMTUwMjEzMDk2Njg3OTgwNTQ1ODgzMTMyMzc4MjQ0MzEzOSAgIDE1MDIxMzA5NjY4Nzk4MDU0NTg4MzEzMjM3ODI0MTIyMTMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDU4OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjcgZGl2aWRlICAgNTYyNzk1NjMzNzE5NDgxMjEyOTE1MTU5Nzg3OTgwMjcwICAgIDU2Mjc5NTYzMzcxOTQ4MTIxMjkxNTE1OTc4ODAwNzA2NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUyMzg3NyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjggZGl2aWRlICA2NTg0NzQzMzI0NDk0NjY0MjczOTQxMjgxNTU3MjY4ODc4ICAgNjU4NDc0MzMyNDQ5NDY2NDI3Mzk0MTI4MTU1NzI1ODk0NSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNTA4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2OSBkaXZpZGUgIDM2MzIwMDAzMjcyODU3NDM5OTc5NzY0MzExMDk0MTY1MDAgICAzNjMyMDAwMzI3Mjg1NzQzOTk3OTc2NDMxMTA5NDA4MTA3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzMTEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDcwIGRpdmlkZSAgMTE0NTgyNzIzNzMxNTQzMDA4OTM4ODk1MzgzODU2MTQ1MCAgIDExNDU4MjcyMzczMTU0MzAwODkzODg5NTM4Mzg1MjczMzIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTc3NiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzEgZGl2aWRlICA4ODc0NDMxMDEwMzU3NjkxODY5NzI1MzcyMzE3MzUwMzgwICAgODg3NDQzMTAxMDM1NzY5MTg2OTcyNTM3MjMxNzMxNjQ3MiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzODIxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3MiBkaXZpZGUgICA5OTI5NDg3MTg5MDI4MDQ2NDgxMTk3NTMxNDEyMDIxOTYgICAgOTkyOTQ4NzE4OTAyODA0NjQ4MTE5NzUzMTQxMjM1MjIyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjY3Mzk1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3MyBkaXZpZGUgIDI1MjI3MzUxODMzNzQyMTg1MDUxNDI0MTcyNjU0Mzk5ODkgICAyNTIyNzM1MTgzMzc0MjE4NTA1MTQyNDE3MjY1NDUzNzc5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ1MzM3ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3NCBkaXZpZGUgIDI2Njg0MTkxNjE5MTI5MzY1MDgwMDY4NzIzMDM1MDEwNTIgICAyNjY4NDE5MTYxOTEyOTM2NTA4MDA2ODcyMzAzNDcxMDM2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEyNDkgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDc1IGRpdmlkZSAgMzAzNjE2OTA4NTY2NTE4NjcxMjU5MDk0MTExMTc3NTA5MiAgIDMwMzYxNjkwODU2NjUxODY3MTI1OTA5NDExMTE4MDg4NDYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ODg4MjcgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDc2IGRpdmlkZSAgOTQ0MTYzNDYwNDkxNzIzMTYzODUwODg5ODkzNDAwNjE0NyAgIDk0NDE2MzQ2MDQ5MTcyMzE2Mzg1MDg4OTg5MzQwMDAyODggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyMSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzcgZGl2aWRlICAyNjc3MzAxMzUzMTY0Mzc3MDkxMTExNDU4ODExODM5MTkwICAgMjY3NzMwMTM1MzE2NDM3NzA5MTExMTQ1ODgxMTg2NzcyMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg5MzQzMCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzggZGl2aWRlICA2ODQ0OTc5MjAzMTEyMDY2MTY2NTgzNzY1ODU3MTcxNDI2ICAgNjg0NDk3OTIwMzExMjA2NjE2NjU4Mzc2NTg1NzE4OTY4MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MzMyOSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzkgZGl2aWRlICAyMjIwMzM3NDM1MTQxNzk2NzI0MzIzNzgzOTYwMjMxNjYxICAgMjIyMDMzNzQzNTE0MTc5NjcyNDMyMzc4Mzk2MDIwODc3OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMzA2ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4MCBkaXZpZGUgIDY0NDc0MjQ3MDAwMTk3ODM5MzE1Njk5OTY5ODk1NjEzODAgICA2NDQ3NDI0NzAwMDE5NzgzOTMxNTY5OTk2OTg5NTcyNDU0ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgyODI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4MSBkaXZpZGUgIDc1MTI4NTY3NjI2OTY2MDcxMTk4NDcwOTIxOTU1ODcxODAgICA3NTEyODU2NzYyNjk2NjA3MTE5ODQ3MDkyMTk1NTU3MzQ2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5NzEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDgyIGRpdmlkZSAgNzM5NTI2MTk4MTE5Mzk2MDM5OTA4NzgxOTA3NzIzNzQ4MiAgIDczOTUyNjE5ODExOTM5NjAzOTkwODc4MTkwNzcyNDI0ODcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMyMzIgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDgzIGRpdmlkZSAgMjI1MzQ0MjQ2NzY4MjU4NDAzNTc5MjcyNDg4NDM3NjczNSAgIDIyNTM0NDI0Njc2ODI1ODQwMzU3OTI3MjQ4ODQ0MDcxNzggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4NjQ5MDQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDg0IGRpdmlkZSAgODE1MzEzODY4MDMwMDIxMzEzNTU3NzMzNjQ2NjE5MDk5NyAgIDgxNTMxMzg2ODAzMDAyMTMxMzU1NzczMzY0NjYyMjA2MDcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjM2ODMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDg1IGRpdmlkZSAgNDY2ODczMTI1MjI1NDE0ODA3NDA0MTAyMjY4MTgwMTM5MCAgIDQ2Njg3MzEyNTIyNTQxNDgwNzQwNDEwMjI2ODE3NzgxMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDk4OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwODYgZGl2aWRlICA2MDc4NDA0NTU3OTkzNjY5Njk2MDQwNDI1NTAxODE1MDU2ICAgNjA3ODQwNDU1Nzk5MzY2OTY5NjA0MDQyNTUwMTc5NzYxMiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyODcwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4NyBkaXZpZGUgIDIzMDYzNTIzNTk4NzQyNjE2MjMyMjMzNTY4NzgzMTYyNzggICAyMzA2MzUyMzU5ODc0MjYxNjIzMjIzMzU2ODc4MzM1NjEyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTE2MTcxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4OCBkaXZpZGUgIDMyNjQ4NDIxODY2Njg0ODAzNjI5MDA5MDk1NjQwOTE5MDggICAzMjY0ODQyMTg2NjY4NDgwMzYyOTAwOTA5NTY0MDU4NjU4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxODQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDg5IGRpdmlkZSAgNjk3MTk4NTA0NzI3OTYzNjg3ODk1Nzk1OTYwODYxMjIwNCAgIDY5NzE5ODUwNDcyNzk2MzY4Nzg5NTc5NTk2MDg2MTUwODggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU4NjMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDkwIGRpdmlkZSAgNTI2MjgxMDg4OTk1MjcyMTIzNTQ2NjQ0NTk3MzgxNjI1NyAgIDUyNjI4MTA4ODk5NTI3MjEyMzU0NjY0NDU5NzM3ODMwNzcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMwNSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTEgZGl2aWRlICA3OTQ3OTQ0NzMxMDM1MjY3MTc4NTQ4MzU3MDcwMDgwMjg4ICAgNzk0Nzk0NDczMTAzNTI2NzE3ODU0ODM1NzA3MDA2MTMzOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzg0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5MiBkaXZpZGUgIDUwNzE4MDg5MDgzOTUzNzUxMDgzODMwMzU4MDA0NDMyMjkgICA1MDcxODA4OTA4Mzk1Mzc1MTA4MzgzMDM1ODAwNDEyNDI5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwNzMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDkzIGRpdmlkZSAgMjA0MzE0NjU0MjA4NDUwMzY1NTUxMTUwNzIwOTI2Mjk2OSAgIDIwNDMxNDY1NDIwODQ1MDM2NTU1MTE1MDcyMDkyNDkyNjMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcwOCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTQgZGl2aWRlICA0MDk3NjMyNzM1Mzg0NTM0MTgxNjYxOTU5NzMxMjY0ODAyICAgNDA5NzYzMjczNTM4NDUzNDE4MTY2MTk1OTczMTIzNDQ5OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Mzk1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5NSBkaXZpZGUgIDMwNjE0Nzc2NDI4MzEzODc0ODk3Mjk0NjQ1ODcwNDQ0MzAgICAzMDYxNDc3NjQyODMxMzg3NDg5NzI5NDY0NTg3MDU5NDUyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwOTMyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5NiBkaXZpZGUgIDM0Mjk4NTQ5NDEwMzk3NzYxNTk0OTg4MDI5MzYyNTI2MzggICAzNDI5ODU0OTQxMDM5Nzc2MTU5NDk4ODAyOTM2MjQ2NDE1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MTQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDk3IGRpdmlkZSAgNDg3NDMyNDk3OTU3ODU5OTcwMDAyNDEzMzI3ODI4NDU0NSAgIDQ4NzQzMjQ5Nzk1Nzg1OTk3MDAwMjQxMzMyNzgyNjIxMzEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDU5OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTggZGl2aWRlICA1NzAxNjUyMzY5NjkxODMzNTQxNDU1OTc4NTE1ODIwODgyICAgNTcwMTY1MjM2OTY5MTgzMzU0MTQ1NTk3ODUxNTgzNDg1NCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3NTQ5NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTkgZGl2aWRlICAyOTI4MjA1NzI4NDAyOTQ1MjY2OTUzMjU1NjMyMzQzMTEzICAgMjkyODIwNTcyODQwMjk0NTI2Njk1MzI1NTYzMjM3Mzc5NCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg5NTIyMyAgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bGwgdGVzdHMKK2RxZGl2OTk5OCBkaXZpZGUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjk5OTkgZGl2aWRlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGVJbnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZUludC5kZWNUZXN0CmluZGV4IDNmZWM2ZGIuLmMyOTAzNTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZUludC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZUludC5kZWNUZXN0CkBAIC0xLDQ1MyArMSw0NTMgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxRGl2aWRlSW50LmRlY1Rlc3QgLS0gZGVjUXVhZCBpbnRlZ2VyIGRpdmlzaW9uICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotDQotZHFkdmkwMDEgZGl2aWRlaW50ICAxICAgICAxICAgIC0+ICAxDQotZHFkdmkwMDIgZGl2aWRlaW50ICAyICAgICAxICAgIC0+ICAyDQotZHFkdmkwMDMgZGl2aWRlaW50ICAxICAgICAyICAgIC0+ICAwDQotZHFkdmkwMDQgZGl2aWRlaW50ICAyICAgICAyICAgIC0+ICAxDQotZHFkdmkwMDUgZGl2aWRlaW50ICAwICAgICAxICAgIC0+ICAwDQotZHFkdmkwMDYgZGl2aWRlaW50ICAwICAgICAyICAgIC0+ICAwDQotZHFkdmkwMDcgZGl2aWRlaW50ICAxICAgICAzICAgIC0+ICAwDQotZHFkdmkwMDggZGl2aWRlaW50ICAyICAgICAzICAgIC0+ICAwDQotZHFkdmkwMDkgZGl2aWRlaW50ICAzICAgICAzICAgIC0+ICAxDQotDQotZHFkdmkwMTAgZGl2aWRlaW50ICAyLjQgICAxICAgIC0+ICAyDQotZHFkdmkwMTEgZGl2aWRlaW50ICAyLjQgICAtMSAgIC0+ICAtMg0KLWRxZHZpMDEyIGRpdmlkZWludCAgLTIuNCAgMSAgICAtPiAgLTINCi1kcWR2aTAxMyBkaXZpZGVpbnQgIC0yLjQgIC0xICAgLT4gIDINCi1kcWR2aTAxNCBkaXZpZGVpbnQgIDIuNDAgIDEgICAgLT4gIDINCi1kcWR2aTAxNSBkaXZpZGVpbnQgIDIuNDAwIDEgICAgLT4gIDINCi1kcWR2aTAxNiBkaXZpZGVpbnQgIDIuNCAgIDIgICAgLT4gIDENCi1kcWR2aTAxNyBkaXZpZGVpbnQgIDIuNDAwIDIgICAgLT4gIDENCi1kcWR2aTAxOCBkaXZpZGVpbnQgIDIuICAgIDIgICAgLT4gIDENCi1kcWR2aTAxOSBkaXZpZGVpbnQgIDIwICAgIDIwICAgLT4gIDENCi0NCi1kcWR2aTAyMCBkaXZpZGVpbnQgIDE4NyAgIDE4NyAgLT4gIDENCi1kcWR2aTAyMSBkaXZpZGVpbnQgIDUgICAgIDIgICAgLT4gIDINCi1kcWR2aTAyMiBkaXZpZGVpbnQgIDUgICAgIDIuMCAgICAtPiAgMg0KLWRxZHZpMDIzIGRpdmlkZWludCAgNSAgICAgMi4wMDAgIC0+ICAyDQotZHFkdmkwMjQgZGl2aWRlaW50ICA1ICAgICAwLjIwMCAgLT4gIDI1DQotZHFkdmkwMjUgZGl2aWRlaW50ICA1ICAgICAwLjIwMCAgLT4gIDI1DQotDQotZHFkdmkwMzAgZGl2aWRlaW50ICAxICAgICAyICAgICAgLT4gIDANCi1kcWR2aTAzMSBkaXZpZGVpbnQgIDEgICAgIDQgICAgICAtPiAgMA0KLWRxZHZpMDMyIGRpdmlkZWludCAgMSAgICAgOCAgICAgIC0+ICAwDQotZHFkdmkwMzMgZGl2aWRlaW50ICAxICAgICAxNiAgICAgLT4gIDANCi1kcWR2aTAzNCBkaXZpZGVpbnQgIDEgICAgIDMyICAgICAtPiAgMA0KLWRxZHZpMDM1IGRpdmlkZWludCAgMSAgICAgNjQgICAgIC0+ICAwDQotZHFkdmkwNDAgZGl2aWRlaW50ICAxICAgIC0yICAgICAgLT4gLTANCi1kcWR2aTA0MSBkaXZpZGVpbnQgIDEgICAgLTQgICAgICAtPiAtMA0KLWRxZHZpMDQyIGRpdmlkZWludCAgMSAgICAtOCAgICAgIC0+IC0wDQotZHFkdmkwNDMgZGl2aWRlaW50ICAxICAgIC0xNiAgICAgLT4gLTANCi1kcWR2aTA0NCBkaXZpZGVpbnQgIDEgICAgLTMyICAgICAtPiAtMA0KLWRxZHZpMDQ1IGRpdmlkZWludCAgMSAgICAtNjQgICAgIC0+IC0wDQotZHFkdmkwNTAgZGl2aWRlaW50IC0xICAgICAyICAgICAgLT4gLTANCi1kcWR2aTA1MSBkaXZpZGVpbnQgLTEgICAgIDQgICAgICAtPiAtMA0KLWRxZHZpMDUyIGRpdmlkZWludCAtMSAgICAgOCAgICAgIC0+IC0wDQotZHFkdmkwNTMgZGl2aWRlaW50IC0xICAgICAxNiAgICAgLT4gLTANCi1kcWR2aTA1NCBkaXZpZGVpbnQgLTEgICAgIDMyICAgICAtPiAtMA0KLWRxZHZpMDU1IGRpdmlkZWludCAtMSAgICAgNjQgICAgIC0+IC0wDQotZHFkdmkwNjAgZGl2aWRlaW50IC0xICAgIC0yICAgICAgLT4gIDANCi1kcWR2aTA2MSBkaXZpZGVpbnQgLTEgICAgLTQgICAgICAtPiAgMA0KLWRxZHZpMDYyIGRpdmlkZWludCAtMSAgICAtOCAgICAgIC0+ICAwDQotZHFkdmkwNjMgZGl2aWRlaW50IC0xICAgIC0xNiAgICAgLT4gIDANCi1kcWR2aTA2NCBkaXZpZGVpbnQgLTEgICAgLTMyICAgICAtPiAgMA0KLWRxZHZpMDY1IGRpdmlkZWludCAtMSAgICAtNjQgICAgIC0+ICAwDQotDQotLS0gc2ltaWxhciB3aXRoIHBvd2VycyBvZiB0ZW4NCi1kcWR2aTE2MCBkaXZpZGVpbnQgIDEgICAgIDEgICAgICAgICAtPiAgMQ0KLWRxZHZpMTYxIGRpdmlkZWludCAgMSAgICAgMTAgICAgICAgIC0+ICAwDQotZHFkdmkxNjIgZGl2aWRlaW50ICAxICAgICAxMDAgICAgICAgLT4gIDANCi1kcWR2aTE2MyBkaXZpZGVpbnQgIDEgICAgIDEwMDAgICAgICAtPiAgMA0KLWRxZHZpMTY0IGRpdmlkZWludCAgMSAgICAgMTAwMDAgICAgIC0+ICAwDQotZHFkdmkxNjUgZGl2aWRlaW50ICAxICAgICAxMDAwMDAgICAgLT4gIDANCi1kcWR2aTE2NiBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAgICAtPiAgMA0KLWRxZHZpMTY3IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAgIC0+ICAwDQotZHFkdmkxNjggZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMDAgLT4gIDANCi1kcWR2aTE3MCBkaXZpZGVpbnQgIDEgICAgLTEgICAgICAgICAtPiAtMQ0KLWRxZHZpMTcxIGRpdmlkZWludCAgMSAgICAtMTAgICAgICAgIC0+IC0wDQotZHFkdmkxNzIgZGl2aWRlaW50ICAxICAgIC0xMDAgICAgICAgLT4gLTANCi1kcWR2aTE3MyBkaXZpZGVpbnQgIDEgICAgLTEwMDAgICAgICAtPiAtMA0KLWRxZHZpMTc0IGRpdmlkZWludCAgMSAgICAtMTAwMDAgICAgIC0+IC0wDQotZHFkdmkxNzUgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAgICAgLT4gLTANCi1kcWR2aTE3NiBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAgICAtPiAtMA0KLWRxZHZpMTc3IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAgIC0+IC0wDQotZHFkdmkxNzggZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMDAgLT4gLTANCi1kcWR2aTE4MCBkaXZpZGVpbnQgLTEgICAgIDEgICAgICAgICAtPiAtMQ0KLWRxZHZpMTgxIGRpdmlkZWludCAtMSAgICAgMTAgICAgICAgIC0+IC0wDQotZHFkdmkxODIgZGl2aWRlaW50IC0xICAgICAxMDAgICAgICAgLT4gLTANCi1kcWR2aTE4MyBkaXZpZGVpbnQgLTEgICAgIDEwMDAgICAgICAtPiAtMA0KLWRxZHZpMTg0IGRpdmlkZWludCAtMSAgICAgMTAwMDAgICAgIC0+IC0wDQotZHFkdmkxODUgZGl2aWRlaW50IC0xICAgICAxMDAwMDAgICAgLT4gLTANCi1kcWR2aTE4NiBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAgICAtPiAtMA0KLWRxZHZpMTg3IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAgIC0+IC0wDQotZHFkdmkxODggZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMDAgLT4gLTANCi1kcWR2aTE5MCBkaXZpZGVpbnQgLTEgICAgLTEgICAgICAgICAtPiAgMQ0KLWRxZHZpMTkxIGRpdmlkZWludCAtMSAgICAtMTAgICAgICAgIC0+ICAwDQotZHFkdmkxOTIgZGl2aWRlaW50IC0xICAgIC0xMDAgICAgICAgLT4gIDANCi1kcWR2aTE5MyBkaXZpZGVpbnQgLTEgICAgLTEwMDAgICAgICAtPiAgMA0KLWRxZHZpMTk0IGRpdmlkZWludCAtMSAgICAtMTAwMDAgICAgIC0+ICAwDQotZHFkdmkxOTUgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAgICAgLT4gIDANCi1kcWR2aTE5NiBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAgICAtPiAgMA0KLWRxZHZpMTk3IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAgIC0+ICAwDQotZHFkdmkxOTggZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMDAgLT4gIDANCi0NCi0tLSBzb21lIGxvbmcgb3BlcmFuZCAoYXQgcD05KSBjYXNlcw0KLWRxZHZpMDcwIGRpdmlkZWludCAgOTk5OTk5OTk5ICAgICAxICAtPiAgOTk5OTk5OTk5DQotZHFkdmkwNzEgZGl2aWRlaW50ICA5OTk5OTk5OTkuNCAgIDEgIC0+ICA5OTk5OTk5OTkNCi1kcWR2aTA3MiBkaXZpZGVpbnQgIDk5OTk5OTk5OS41ICAgMSAgLT4gIDk5OTk5OTk5OQ0KLWRxZHZpMDczIGRpdmlkZWludCAgOTk5OTk5OTk5LjkgICAxICAtPiAgOTk5OTk5OTk5DQotZHFkdmkwNzQgZGl2aWRlaW50ICA5OTk5OTk5OTkuOTk5IDEgIC0+ICA5OTk5OTk5OTkNCi0NCi1kcWR2aTA5MCBkaXZpZGVpbnQgIDAuICAgICAgICAgICAgMSAgICAtPiAgMA0KLWRxZHZpMDkxIGRpdmlkZWludCAgLjAgICAgICAgICAgICAxICAgIC0+ICAwDQotZHFkdmkwOTIgZGl2aWRlaW50ICAwLjAwICAgICAgICAgIDEgICAgLT4gIDANCi1kcWR2aTA5MyBkaXZpZGVpbnQgIDAuMDBFKzkgICAgICAgMSAgICAtPiAgMA0KLWRxZHZpMDk0IGRpdmlkZWludCAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwDQotDQotZHFkdmkxMDAgZGl2aWRlaW50ICAxICAxICAgLT4gMQ0KLWRxZHZpMTAxIGRpdmlkZWludCAgMSAgMiAgIC0+IDANCi1kcWR2aTEwMiBkaXZpZGVpbnQgIDEgIDMgICAtPiAwDQotZHFkdmkxMDMgZGl2aWRlaW50ICAxICA0ICAgLT4gMA0KLWRxZHZpMTA0IGRpdmlkZWludCAgMSAgNSAgIC0+IDANCi1kcWR2aTEwNSBkaXZpZGVpbnQgIDEgIDYgICAtPiAwDQotZHFkdmkxMDYgZGl2aWRlaW50ICAxICA3ICAgLT4gMA0KLWRxZHZpMTA3IGRpdmlkZWludCAgMSAgOCAgIC0+IDANCi1kcWR2aTEwOCBkaXZpZGVpbnQgIDEgIDkgICAtPiAwDQotZHFkdmkxMDkgZGl2aWRlaW50ICAxICAxMCAgLT4gMA0KLWRxZHZpMTEwIGRpdmlkZWludCAgMSAgMSAgIC0+IDENCi1kcWR2aTExMSBkaXZpZGVpbnQgIDIgIDEgICAtPiAyDQotZHFkdmkxMTIgZGl2aWRlaW50ICAzICAxICAgLT4gMw0KLWRxZHZpMTEzIGRpdmlkZWludCAgNCAgMSAgIC0+IDQNCi1kcWR2aTExNCBkaXZpZGVpbnQgIDUgIDEgICAtPiA1DQotZHFkdmkxMTUgZGl2aWRlaW50ICA2ICAxICAgLT4gNg0KLWRxZHZpMTE2IGRpdmlkZWludCAgNyAgMSAgIC0+IDcNCi1kcWR2aTExNyBkaXZpZGVpbnQgIDggIDEgICAtPiA4DQotZHFkdmkxMTggZGl2aWRlaW50ICA5ICAxICAgLT4gOQ0KLWRxZHZpMTE5IGRpdmlkZWludCAgMTAgMSAgIC0+IDEwDQotDQotLS0gZnJvbSBEaWFnQmlnRGVjaW1hbA0KLWRxZHZpMTMxIGRpdmlkZWludCAgMTAxLjMgICAxICAgICAtPiAgMTAxDQotZHFkdmkxMzIgZGl2aWRlaW50ICAxMDEuMCAgIDEgICAgIC0+ICAxMDENCi1kcWR2aTEzMyBkaXZpZGVpbnQgIDEwMS4zICAgMyAgICAgLT4gIDMzDQotZHFkdmkxMzQgZGl2aWRlaW50ICAxMDEuMCAgIDMgICAgIC0+ICAzMw0KLWRxZHZpMTM1IGRpdmlkZWludCAgMi40ICAgICAxICAgICAtPiAgMg0KLWRxZHZpMTM2IGRpdmlkZWludCAgMi40MDAgICAxICAgICAtPiAgMg0KLWRxZHZpMTM3IGRpdmlkZWludCAgMTggICAgICAxOCAgICAtPiAgMQ0KLWRxZHZpMTM4IGRpdmlkZWludCAgMTEyMCAgICAxMDAwICAtPiAgMQ0KLWRxZHZpMTM5IGRpdmlkZWludCAgMi40ICAgICAyICAgICAtPiAgMQ0KLWRxZHZpMTQwIGRpdmlkZWludCAgMi40MDAgICAyICAgICAtPiAgMQ0KLWRxZHZpMTQxIGRpdmlkZWludCAgMC41ICAgICAyLjAwMCAtPiAgMA0KLWRxZHZpMTQyIGRpdmlkZWludCAgOC4wMDUgICA3ICAgICAtPiAgMQ0KLWRxZHZpMTQzIGRpdmlkZWludCAgNSAgICAgICAyICAgICAtPiAgMg0KLWRxZHZpMTQ0IGRpdmlkZWludCAgMCAgICAgICAyICAgICAtPiAgMA0KLWRxZHZpMTQ1IGRpdmlkZWludCAgMC4wMCAgICAyICAgICAtPiAgMA0KLQ0KLS0tIE90aGVycw0KLWRxZHZpMTUwIGRpdmlkZWludCAgMTIzNDUgIDQuOTk5ICAtPiAgMjQ2OQ0KLWRxZHZpMTUxIGRpdmlkZWludCAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3Mw0KLWRxZHZpMTUyIGRpdmlkZWludCAgMTIzNDUgIDQuOSAgICAtPiAgMjUxOQ0KLWRxZHZpMTUzIGRpdmlkZWludCAgMTIzNDUgIDUgICAgICAtPiAgMjQ2OQ0KLWRxZHZpMTU0IGRpdmlkZWludCAgMTIzNDUgIDUuMSAgICAtPiAgMjQyMA0KLWRxZHZpMTU1IGRpdmlkZWludCAgMTIzNDUgIDUuMDEgICAtPiAgMjQ2NA0KLWRxZHZpMTU2IGRpdmlkZWludCAgMTIzNDUgIDUuMDAxICAtPiAgMjQ2OA0KLWRxZHZpMTU3IGRpdmlkZWludCAgICAxMDEgIDcuNiAgICAtPiAgMTMNCi0NCi0tLSBWYXJpb3VzIGZsYXZvdXJzIG9mIGRpdmlkZWludCBieSAwDQotZHFkdmkyMDEgZGl2aWRlaW50ICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcWR2aTIwMiBkaXZpZGVpbnQgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxZHZpMjAzIGRpdmlkZWludCAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFkdmkyMDQgZGl2aWRlaW50ICAwLjAwMDEgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIwNSBkaXZpZGVpbnQgIDAuMDEgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpMjA2IGRpdmlkZWludCAgMC4xICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmkyMDcgZGl2aWRlaW50ICAxICAgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIwOCBkaXZpZGVpbnQgIDEgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpMjA5IGRpdmlkZWludCAxMCAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmkyMTAgZGl2aWRlaW50IDFFKzEwMCAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIxMSBkaXZpZGVpbnQgMUUrMzgwICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpMjE0IGRpdmlkZWludCAgLTAuMDAwMSAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIxNSBkaXZpZGVpbnQgIC0wLjAxICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmkyMTYgZGl2aWRlaW50ICAtMC4xICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpMjE3IGRpdmlkZWludCAgLTEgICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIxOCBkaXZpZGVpbnQgIC0xICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmkyMTkgZGl2aWRlaW50IC0xMCAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpMjIwIGRpdmlkZWludCAtMUUrMTAwICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIyMSBkaXZpZGVpbnQgLTFFKzM4MCAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotLS0gdGVzdCBzb21lIGNhc2VzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cG9uZW50IG92ZXJmbG93DQotZHFkdmkyNzAgZGl2aWRlaW50IDEgMWUzODQgICAgICAgICAgLT4gMA0KLWRxZHZpMjcxIGRpdmlkZWludCAxIDAuOWUzODQgICAgICAgIC0+IDANCi1kcWR2aTI3MiBkaXZpZGVpbnQgMSAwLjk5ZTM4NCAgICAgICAtPiAwDQotZHFkdmkyNzMgZGl2aWRlaW50IDEgMC45OTk5OTk5OTk5OTk5OTk5ZTM4NCAgICAgICAtPiAwDQotZHFkdmkyNzQgZGl2aWRlaW50IDllMzg0ICAgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcWR2aTI3NSBkaXZpZGVpbnQgOS45ZTM4NCAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxZHZpMjc2IGRpdmlkZWludCA5Ljk5ZTM4NCAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFkdmkyNzcgZGl2aWRlaW50IDkuOTk5OTk5OTk5OTk5OTk5ZTM4NCAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotDQotZHFkdmkyODAgZGl2aWRlaW50IDAuMSA5ZS0zODMgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcWR2aTI4MSBkaXZpZGVpbnQgMC4xIDk5ZS0zODMgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxZHZpMjgyIGRpdmlkZWludCAwLjEgOTk5ZS0zODMgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFkdmkyODMgZGl2aWRlaW50IDAuMSA5ZS0zODIgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcWR2aTI4NCBkaXZpZGVpbnQgMC4xIDk5ZS0zODIgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLQ0KLS0tIEdEIGVkZ2UgY2FzZXM6IGxocyBzbWFsbGVyIHRoYW4gcmhzIGJ1dCBtb3JlIGRpZ2l0cw0KLWRxZHZpMzAxICBkaXZpZGVpbnQgIDAuOSAgICAgIDIgICAgICAtPiAgMA0KLWRxZHZpMzAyICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMCAgICAtPiAgMA0KLWRxZHZpMzAzICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMSAgICAtPiAgMA0KLWRxZHZpMzA0ICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMDAgICAtPiAgMA0KLWRxZHZpMzA1ICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMDEgICAtPiAgMA0KLWRxZHZpMzA2ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEgICAgICAtPiAgMA0KLWRxZHZpMzA3ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMA0KLWRxZHZpMzA4ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMDAgICAtPiAgMA0KLWRxZHZpMzA5ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMA0KLWRxZHZpMzEwICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMDAgICAtPiAgMA0KLWRxZHZpMzExICBkaXZpZGVpbnQgIDAuMTIgICAgIDIgICAgICAtPiAgMA0KLWRxZHZpMzEyICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMCAgICAtPiAgMA0KLWRxZHZpMzEzICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMSAgICAtPiAgMA0KLWRxZHZpMzE0ICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMDAgICAtPiAgMA0KLWRxZHZpMzE1ICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMDEgICAtPiAgMA0KLQ0KLS0tIGVkZ2UgY2FzZXMgb2YgaW1wb3NzaWJsZQ0KLWRxZHZpMzMwICBkaXZpZGVpbnQgIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYgIDEwICAgIC0+ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDUNCi1kcWR2aTMzMSAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMSAgICAtPiAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1Ng0KLWRxZHZpMzMyICBkaXZpZGVpbnQgIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxZHZpMzMzICBkaXZpZGVpbnQgIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLQ0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQ0KLWRxZHZpMTA1MSBkaXZpZGVpbnQgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxZHZpMTA1MiBkaXZpZGVpbnQgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxZHZpMTA1MyBkaXZpZGVpbnQgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxZHZpMTA1NCBkaXZpZGVpbnQgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxZHZpMTA1NSBkaXZpZGVpbnQgIDFlLTI3NyAgMWUrMzExIC0+ICAwDQotZHFkdmkxMDU2IGRpdmlkZWludCAgMWUtMjc3IC0xZSszMTEgLT4gLTANCi1kcWR2aTEwNTcgZGl2aWRlaW50IC0xZS0yNzcgIDFlKzMxMSAtPiAtMA0KLWRxZHZpMTA1OCBkaXZpZGVpbnQgLTFlLTI3NyAtMWUrMzExIC0+ICAwDQotDQotLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpDQotZHFkdmkxMDYwIGRpdmlkZWludCAxZS0yOTEgMWUrMTAxIC0+IDANCi1kcWR2aTEwNjEgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDIgLT4gMA0KLWRxZHZpMTA2MiBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMyAtPiAwDQotZHFkdmkxMDYzIGRpdmlkZWludCAxZS0yOTEgMWUrMTA0IC0+IDANCi1kcWR2aTEwNjQgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDUgLT4gMA0KLWRxZHZpMTA2NSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNiAtPiAwDQotZHFkdmkxMDY2IGRpdmlkZWludCAxZS0yOTEgMWUrMTA3IC0+IDANCi1kcWR2aTEwNjcgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDggLT4gMA0KLWRxZHZpMTA2OCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOSAtPiAwDQotZHFkdmkxMDY5IGRpdmlkZWludCAxZS0yOTEgMWUrMTEwIC0+IDANCi0NCi1kcWR2aTExMDEgZGl2aWRlaW50ICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMA0KLWRxZHZpMTEwMiBkaXZpZGVpbnQgIDEuMDAwRS0zOTQgICAxZSsxICAtPiAwDQotZHFkdmkxMTAzIGRpdmlkZWludCAgMS4wMEUtMzk0ICAgIDFlKzIgIC0+IDANCi0NCi1kcWR2aTExMTggZGl2aWRlaW50ICAxRS0zOTQgICAgICAgMWUrNCAgLT4gMA0KLWRxZHZpMTExOSBkaXZpZGVpbnQgIDNFLTM5NCAgICAgIC0xZSs1ICAtPiAtMA0KLWRxZHZpMTEyMCBkaXZpZGVpbnQgIDVFLTM5NCAgICAgICAxZSs1ICAtPiAwDQotDQotZHFkdmkxMTI0IGRpdmlkZWludCAgMUUtMzk0ICAgICAgLTFlKzQgIC0+IC0wDQotZHFkdmkxMTMwIGRpdmlkZWludCAgMy4wRS0zOTQgICAgLTFlKzUgIC0+IC0wDQotDQotZHFkdmkxMTMxIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzIwMCAtPiAwDQotZHFkdmkxMTMyIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OSAtPiAwDQotZHFkdmkxMTMzIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OCAtPiAwDQotZHFkdmkxMTM0IGRpdmlkZWludCAgMi4wRS0xOTkgICAgIDJlKzE5OCAtPiAwDQotZHFkdmkxMTM1IGRpdmlkZWludCAgNC4wRS0xOTkgICAgIDRlKzE5OCAtPiAwDQotDQotLS0gbG9uZyBvcGVyYW5kIGNoZWNrcw0KLWRxZHZpNDAxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxMDAgLT4gMTIzNDU2NzgwDQotZHFkdmk0MDIgZGl2aWRlaW50IDEgMTIzNDU2NzgwMDAgICAtPiAwDQotZHFkdmk0MDMgZGl2aWRlaW50IDEyMzQ1Njc4MDAgIDEwICAtPiAxMjM0NTY3ODANCi1kcWR2aTQwNCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAgIC0+IDANCi1kcWR2aTQwNSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMTAgIC0+IDEyMzQ1Njc4OQ0KLWRxZHZpNDA2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgICAgLT4gMA0KLWRxZHZpNDA3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxMCAgLT4gMTIzNDU2Nzg5DQotZHFkdmk0MDggZGl2aWRlaW50IDEgMTIzNDU2Nzg5MSAgICAtPiAwDQotZHFkdmk0MDkgZGl2aWRlaW50IDEyMzQ1Njc4OTAxIDEwMCAtPiAxMjM0NTY3ODkNCi1kcWR2aTQxMCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAgIC0+IDANCi1kcWR2aTQxMSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMTAgIC0+IDEyMzQ1Njc4OQ0KLWRxZHZpNDEyIGRpdmlkZWludCAxIDEyMzQ1Njc4OTYgICAgLT4gMA0KLWRxZHZpNDEzIGRpdmlkZWludCAxMjM0NTY3ODk0OCAxMDAgLT4gMTIzNDU2Nzg5DQotZHFkdmk0MTQgZGl2aWRlaW50IDEyMzQ1Njc4OTQ5IDEwMCAtPiAxMjM0NTY3ODkNCi1kcWR2aTQxNSBkaXZpZGVpbnQgMTIzNDU2Nzg5NTAgMTAwIC0+IDEyMzQ1Njc4OQ0KLWRxZHZpNDE2IGRpdmlkZWludCAxMjM0NTY3ODk1MSAxMDAgLT4gMTIzNDU2Nzg5DQotZHFkdmk0MTcgZGl2aWRlaW50IDEyMzQ1Njc4OTk5IDEwMCAtPiAxMjM0NTY3ODkNCi1kcWR2aTQ0MSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMSAtPiAxMjM0NTY3ODAwMA0KLWRxZHZpNDQyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwIC0+IDANCi1kcWR2aTQ0MyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwDQotZHFkdmk0NDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgLT4gMA0KLWRxZHZpNDQ1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTANCi1kcWR2aTQ0NiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAtPiAwDQotZHFkdmk0NDcgZGl2aWRlaW50IDEyMzQ1Njc4OTEgIDEgLT4gMTIzNDU2Nzg5MQ0KLWRxZHZpNDQ4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgIC0+IDANCi1kcWR2aTQ0OSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQ0KLWRxZHZpNDUwIGRpdmlkZWludCAxIDEyMzQ1Njc4OTAxIC0+IDANCi1kcWR2aTQ1MSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2DQotZHFkdmk0NTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgLT4gMA0KLQ0KLS0tIG1vcmUgemVyb3MsIGV0Yy4NCi1kcWR2aTUzMSBkaXZpZGVpbnQgNS4wMCAxRS0zICAgIC0+IDUwMDANCi1kcWR2aTUzMiBkaXZpZGVpbnQgMDAuMDAgMC4wMDAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcWR2aTUzMyBkaXZpZGVpbnQgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcWR2aTUzNCBkaXZpZGVpbnQgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcWR2aTUzNSBkaXZpZGVpbnQgLTAgICAgIDAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcWR2aTUzNiBkaXZpZGVpbnQgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi0NCi1kcWR2aTU0MSBkaXZpZGVpbnQgIDAgICAgLTEgICAgIC0+IC0wDQotZHFkdmk1NDIgZGl2aWRlaW50IC0wICAgIC0xICAgICAtPiAgMA0KLWRxZHZpNTQzIGRpdmlkZWludCAgMCAgICAgMSAgICAgLT4gIDANCi1kcWR2aTU0NCBkaXZpZGVpbnQgLTAgICAgIDEgICAgIC0+IC0wDQotZHFkdmk1NDUgZGl2aWRlaW50IC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpNTQ2IGRpdmlkZWludCAtMSAgICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTU0NyBkaXZpZGVpbnQgIDEgICAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmk1NDggZGl2aWRlaW50ICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRxZHZpNTUxIGRpdmlkZWludCAgMC4wICAtMSAgICAgLT4gLTANCi1kcWR2aTU1MiBkaXZpZGVpbnQgLTAuMCAgLTEgICAgIC0+ICAwDQotZHFkdmk1NTMgZGl2aWRlaW50ICAwLjAgICAxICAgICAtPiAgMA0KLWRxZHZpNTU0IGRpdmlkZWludCAtMC4wICAgMSAgICAgLT4gLTANCi1kcWR2aTU1NSBkaXZpZGVpbnQgLTEuMCAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmk1NTYgZGl2aWRlaW50IC0xLjAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpNTU3IGRpdmlkZWludCAgMS4wICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTU1OCBkaXZpZGVpbnQgIDEuMCAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZHFkdmk1NjEgZGl2aWRlaW50ICAwICAgIC0xLjAgICAtPiAtMA0KLWRxZHZpNTYyIGRpdmlkZWludCAtMCAgICAtMS4wICAgLT4gIDANCi1kcWR2aTU2MyBkaXZpZGVpbnQgIDAgICAgIDEuMCAgIC0+ICAwDQotZHFkdmk1NjQgZGl2aWRlaW50IC0wICAgICAxLjAgICAtPiAtMA0KLWRxZHZpNTY1IGRpdmlkZWludCAtMSAgICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTU2NiBkaXZpZGVpbnQgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmk1NjcgZGl2aWRlaW50ICAxICAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpNTY4IGRpdmlkZWludCAgMSAgICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi1kcWR2aTU3MSBkaXZpZGVpbnQgIDAuMCAgLTEuMCAgIC0+IC0wDQotZHFkdmk1NzIgZGl2aWRlaW50IC0wLjAgIC0xLjAgICAtPiAgMA0KLWRxZHZpNTczIGRpdmlkZWludCAgMC4wICAgMS4wICAgLT4gIDANCi1kcWR2aTU3NCBkaXZpZGVpbnQgLTAuMCAgIDEuMCAgIC0+IC0wDQotZHFkdmk1NzUgZGl2aWRlaW50IC0xLjAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpNTc2IGRpdmlkZWludCAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTU3NyBkaXZpZGVpbnQgIDEuMCAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmk1NzggZGl2aWRlaW50ICAxLjAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLS0tIFNwZWNpYWxzDQotZHFkdmk1ODAgZGl2aWRlaW50ICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk1ODEgZGl2aWRlaW50ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kcWR2aTU4MiBkaXZpZGVpbnQgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRxZHZpNTgzIGRpdmlkZWludCAgSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZHFkdmk1ODQgZGl2aWRlaW50ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCi1kcWR2aTU4NSBkaXZpZGVpbnQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWRxZHZpNTg2IGRpdmlkZWludCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZHFkdmk1ODcgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk1ODggZGl2aWRlaW50IC0xMDAwICBJbmYgICAtPiAtMA0KLWRxZHZpNTg5IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNTkwIGRpdmlkZWludCAtMSAgICAgSW5mICAgLT4gLTANCi1kcWR2aTU5MSBkaXZpZGVpbnQgLTAgICAgIEluZiAgIC0+IC0wDQotZHFkdmk1OTIgZGl2aWRlaW50ICAwICAgICBJbmYgICAtPiAgMA0KLWRxZHZpNTkzIGRpdmlkZWludCAgMSAgICAgSW5mICAgLT4gIDANCi1kcWR2aTU5NCBkaXZpZGVpbnQgIDEwMDAgIEluZiAgIC0+ICAwDQotZHFkdmk1OTUgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFkdmk2MDAgZGl2aWRlaW50IC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2MDEgZGl2aWRlaW50IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCi1kcWR2aTYwMiBkaXZpZGVpbnQgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRxZHZpNjAzIGRpdmlkZWludCAtSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZHFkdmk2MDQgZGl2aWRlaW50IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kcWR2aTYwNSBkaXZpZGVpbnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRxZHZpNjA2IGRpdmlkZWludCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZHFkdmk2MDcgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2MDggZGl2aWRlaW50IC0xMDAwICBJbmYgICAtPiAtMA0KLWRxZHZpNjA5IGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjEwIGRpdmlkZWludCAtMSAgICAtSW5mICAgLT4gIDANCi1kcWR2aTYxMSBkaXZpZGVpbnQgLTAgICAgLUluZiAgIC0+ICAwDQotZHFkdmk2MTIgZGl2aWRlaW50ICAwICAgIC1JbmYgICAtPiAtMA0KLWRxZHZpNjEzIGRpdmlkZWludCAgMSAgICAtSW5mICAgLT4gLTANCi1kcWR2aTYxNCBkaXZpZGVpbnQgIDEwMDAgLUluZiAgIC0+IC0wDQotZHFkdmk2MTUgZGl2aWRlaW50ICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFkdmk2MjEgZGl2aWRlaW50ICBOYU4gLUluZiAgICAtPiAgTmFODQotZHFkdmk2MjIgZGl2aWRlaW50ICBOYU4gLTEwMDAgICAtPiAgTmFODQotZHFkdmk2MjMgZGl2aWRlaW50ICBOYU4gLTEgICAgICAtPiAgTmFODQotZHFkdmk2MjQgZGl2aWRlaW50ICBOYU4gLTAgICAgICAtPiAgTmFODQotZHFkdmk2MjUgZGl2aWRlaW50ICBOYU4gIDAgICAgICAtPiAgTmFODQotZHFkdmk2MjYgZGl2aWRlaW50ICBOYU4gIDEgICAgICAtPiAgTmFODQotZHFkdmk2MjcgZGl2aWRlaW50ICBOYU4gIDEwMDAgICAtPiAgTmFODQotZHFkdmk2MjggZGl2aWRlaW50ICBOYU4gIEluZiAgICAtPiAgTmFODQotZHFkdmk2MjkgZGl2aWRlaW50ICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFkdmk2MzAgZGl2aWRlaW50IC1JbmYgIE5hTiAgICAtPiAgTmFODQotZHFkdmk2MzEgZGl2aWRlaW50IC0xMDAwIE5hTiAgICAtPiAgTmFODQotZHFkdmk2MzIgZGl2aWRlaW50IC0xICAgIE5hTiAgICAtPiAgTmFODQotZHFkdmk2MzMgZGl2aWRlaW50IC0wICAgIE5hTiAgICAtPiAgTmFODQotZHFkdmk2MzQgZGl2aWRlaW50ICAwICAgIE5hTiAgICAtPiAgTmFODQotZHFkdmk2MzUgZGl2aWRlaW50ICAxICAgIE5hTiAgICAtPiAgTmFODQotZHFkdmk2MzYgZGl2aWRlaW50ICAxMDAwIE5hTiAgICAtPiAgTmFODQotZHFkdmk2MzcgZGl2aWRlaW50ICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZHFkdmk2NDEgZGl2aWRlaW50ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjQyIGRpdmlkZWludCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY0MyBkaXZpZGVpbnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NDQgZGl2aWRlaW50ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjQ1IGRpdmlkZWludCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY0NiBkaXZpZGVpbnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NDcgZGl2aWRlaW50ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjQ4IGRpdmlkZWludCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY0OSBkaXZpZGVpbnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NTAgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjUxIGRpdmlkZWludCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY1MiBkaXZpZGVpbnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NTMgZGl2aWRlaW50IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjU0IGRpdmlkZWludCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY1NSBkaXZpZGVpbnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NTYgZGl2aWRlaW50ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjU3IGRpdmlkZWludCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY1OCBkaXZpZGVpbnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NTkgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcWR2aTY2MSBkaXZpZGVpbnQgIE5hTjkgLUluZiAgIC0+ICBOYU45DQotZHFkdmk2NjIgZGl2aWRlaW50ICBOYU44ICAxMDAwICAtPiAgTmFOOA0KLWRxZHZpNjYzIGRpdmlkZWludCAgTmFONyAgSW5mICAgLT4gIE5hTjcNCi1kcWR2aTY2NCBkaXZpZGVpbnQgLU5hTjYgIE5hTjUgIC0+IC1OYU42DQotZHFkdmk2NjUgZGl2aWRlaW50IC1JbmYgICBOYU40ICAtPiAgTmFONA0KLWRxZHZpNjY2IGRpdmlkZWludCAtMTAwMCAgTmFOMyAgLT4gIE5hTjMNCi1kcWR2aTY2NyBkaXZpZGVpbnQgIEluZiAgLU5hTjIgIC0+IC1OYU4yDQotDQotZHFkdmk2NzEgZGl2aWRlaW50IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY3MiBkaXZpZGVpbnQgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjczIGRpdmlkZWludCAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NzQgZGl2aWRlaW50ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY3NSBkaXZpZGVpbnQgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjc2IGRpdmlkZWludCAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NzcgZGl2aWRlaW50ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY3OCBkaXZpZGVpbnQgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjc5IGRpdmlkZWludCAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gR3l1cmlzIGV4YW1wbGUNCi1kcWR2aTcwMCBkaXZpZGVpbnQgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODkwMDBFLTYxNDMgLT4gMA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcWR2aTkwMCBkaXZpZGVpbnQgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpOTAxIGRpdmlkZWludCAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcURpdmlkZUludC5kZWNUZXN0IC0tIGRlY1F1YWQgaW50ZWdlciBkaXZpc2lvbiAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKworZHFkdmkwMDEgZGl2aWRlaW50ICAxICAgICAxICAgIC0+ICAxCitkcWR2aTAwMiBkaXZpZGVpbnQgIDIgICAgIDEgICAgLT4gIDIKK2RxZHZpMDAzIGRpdmlkZWludCAgMSAgICAgMiAgICAtPiAgMAorZHFkdmkwMDQgZGl2aWRlaW50ICAyICAgICAyICAgIC0+ICAxCitkcWR2aTAwNSBkaXZpZGVpbnQgIDAgICAgIDEgICAgLT4gIDAKK2RxZHZpMDA2IGRpdmlkZWludCAgMCAgICAgMiAgICAtPiAgMAorZHFkdmkwMDcgZGl2aWRlaW50ICAxICAgICAzICAgIC0+ICAwCitkcWR2aTAwOCBkaXZpZGVpbnQgIDIgICAgIDMgICAgLT4gIDAKK2RxZHZpMDA5IGRpdmlkZWludCAgMyAgICAgMyAgICAtPiAgMQorCitkcWR2aTAxMCBkaXZpZGVpbnQgIDIuNCAgIDEgICAgLT4gIDIKK2RxZHZpMDExIGRpdmlkZWludCAgMi40ICAgLTEgICAtPiAgLTIKK2RxZHZpMDEyIGRpdmlkZWludCAgLTIuNCAgMSAgICAtPiAgLTIKK2RxZHZpMDEzIGRpdmlkZWludCAgLTIuNCAgLTEgICAtPiAgMgorZHFkdmkwMTQgZGl2aWRlaW50ICAyLjQwICAxICAgIC0+ICAyCitkcWR2aTAxNSBkaXZpZGVpbnQgIDIuNDAwIDEgICAgLT4gIDIKK2RxZHZpMDE2IGRpdmlkZWludCAgMi40ICAgMiAgICAtPiAgMQorZHFkdmkwMTcgZGl2aWRlaW50ICAyLjQwMCAyICAgIC0+ICAxCitkcWR2aTAxOCBkaXZpZGVpbnQgIDIuICAgIDIgICAgLT4gIDEKK2RxZHZpMDE5IGRpdmlkZWludCAgMjAgICAgMjAgICAtPiAgMQorCitkcWR2aTAyMCBkaXZpZGVpbnQgIDE4NyAgIDE4NyAgLT4gIDEKK2RxZHZpMDIxIGRpdmlkZWludCAgNSAgICAgMiAgICAtPiAgMgorZHFkdmkwMjIgZGl2aWRlaW50ICA1ICAgICAyLjAgICAgLT4gIDIKK2RxZHZpMDIzIGRpdmlkZWludCAgNSAgICAgMi4wMDAgIC0+ICAyCitkcWR2aTAyNCBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUKK2RxZHZpMDI1IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQorCitkcWR2aTAzMCBkaXZpZGVpbnQgIDEgICAgIDIgICAgICAtPiAgMAorZHFkdmkwMzEgZGl2aWRlaW50ICAxICAgICA0ICAgICAgLT4gIDAKK2RxZHZpMDMyIGRpdmlkZWludCAgMSAgICAgOCAgICAgIC0+ICAwCitkcWR2aTAzMyBkaXZpZGVpbnQgIDEgICAgIDE2ICAgICAtPiAgMAorZHFkdmkwMzQgZGl2aWRlaW50ICAxICAgICAzMiAgICAgLT4gIDAKK2RxZHZpMDM1IGRpdmlkZWludCAgMSAgICAgNjQgICAgIC0+ICAwCitkcWR2aTA0MCBkaXZpZGVpbnQgIDEgICAgLTIgICAgICAtPiAtMAorZHFkdmkwNDEgZGl2aWRlaW50ICAxICAgIC00ICAgICAgLT4gLTAKK2RxZHZpMDQyIGRpdmlkZWludCAgMSAgICAtOCAgICAgIC0+IC0wCitkcWR2aTA0MyBkaXZpZGVpbnQgIDEgICAgLTE2ICAgICAtPiAtMAorZHFkdmkwNDQgZGl2aWRlaW50ICAxICAgIC0zMiAgICAgLT4gLTAKK2RxZHZpMDQ1IGRpdmlkZWludCAgMSAgICAtNjQgICAgIC0+IC0wCitkcWR2aTA1MCBkaXZpZGVpbnQgLTEgICAgIDIgICAgICAtPiAtMAorZHFkdmkwNTEgZGl2aWRlaW50IC0xICAgICA0ICAgICAgLT4gLTAKK2RxZHZpMDUyIGRpdmlkZWludCAtMSAgICAgOCAgICAgIC0+IC0wCitkcWR2aTA1MyBkaXZpZGVpbnQgLTEgICAgIDE2ICAgICAtPiAtMAorZHFkdmkwNTQgZGl2aWRlaW50IC0xICAgICAzMiAgICAgLT4gLTAKK2RxZHZpMDU1IGRpdmlkZWludCAtMSAgICAgNjQgICAgIC0+IC0wCitkcWR2aTA2MCBkaXZpZGVpbnQgLTEgICAgLTIgICAgICAtPiAgMAorZHFkdmkwNjEgZGl2aWRlaW50IC0xICAgIC00ICAgICAgLT4gIDAKK2RxZHZpMDYyIGRpdmlkZWludCAtMSAgICAtOCAgICAgIC0+ICAwCitkcWR2aTA2MyBkaXZpZGVpbnQgLTEgICAgLTE2ICAgICAtPiAgMAorZHFkdmkwNjQgZGl2aWRlaW50IC0xICAgIC0zMiAgICAgLT4gIDAKK2RxZHZpMDY1IGRpdmlkZWludCAtMSAgICAtNjQgICAgIC0+ICAwCisKKy0tIHNpbWlsYXIgd2l0aCBwb3dlcnMgb2YgdGVuCitkcWR2aTE2MCBkaXZpZGVpbnQgIDEgICAgIDEgICAgICAgICAtPiAgMQorZHFkdmkxNjEgZGl2aWRlaW50ICAxICAgICAxMCAgICAgICAgLT4gIDAKK2RxZHZpMTYyIGRpdmlkZWludCAgMSAgICAgMTAwICAgICAgIC0+ICAwCitkcWR2aTE2MyBkaXZpZGVpbnQgIDEgICAgIDEwMDAgICAgICAtPiAgMAorZHFkdmkxNjQgZGl2aWRlaW50ICAxICAgICAxMDAwMCAgICAgLT4gIDAKK2RxZHZpMTY1IGRpdmlkZWludCAgMSAgICAgMTAwMDAwICAgIC0+ICAwCitkcWR2aTE2NiBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAgICAtPiAgMAorZHFkdmkxNjcgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMCAgLT4gIDAKK2RxZHZpMTY4IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAwIC0+ICAwCitkcWR2aTE3MCBkaXZpZGVpbnQgIDEgICAgLTEgICAgICAgICAtPiAtMQorZHFkdmkxNzEgZGl2aWRlaW50ICAxICAgIC0xMCAgICAgICAgLT4gLTAKK2RxZHZpMTcyIGRpdmlkZWludCAgMSAgICAtMTAwICAgICAgIC0+IC0wCitkcWR2aTE3MyBkaXZpZGVpbnQgIDEgICAgLTEwMDAgICAgICAtPiAtMAorZHFkdmkxNzQgZGl2aWRlaW50ICAxICAgIC0xMDAwMCAgICAgLT4gLTAKK2RxZHZpMTc1IGRpdmlkZWludCAgMSAgICAtMTAwMDAwICAgIC0+IC0wCitkcWR2aTE3NiBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAgICAtPiAtMAorZHFkdmkxNzcgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMCAgLT4gLTAKK2RxZHZpMTc4IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAwIC0+IC0wCitkcWR2aTE4MCBkaXZpZGVpbnQgLTEgICAgIDEgICAgICAgICAtPiAtMQorZHFkdmkxODEgZGl2aWRlaW50IC0xICAgICAxMCAgICAgICAgLT4gLTAKK2RxZHZpMTgyIGRpdmlkZWludCAtMSAgICAgMTAwICAgICAgIC0+IC0wCitkcWR2aTE4MyBkaXZpZGVpbnQgLTEgICAgIDEwMDAgICAgICAtPiAtMAorZHFkdmkxODQgZGl2aWRlaW50IC0xICAgICAxMDAwMCAgICAgLT4gLTAKK2RxZHZpMTg1IGRpdmlkZWludCAtMSAgICAgMTAwMDAwICAgIC0+IC0wCitkcWR2aTE4NiBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAgICAtPiAtMAorZHFkdmkxODcgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMCAgLT4gLTAKK2RxZHZpMTg4IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAwIC0+IC0wCitkcWR2aTE5MCBkaXZpZGVpbnQgLTEgICAgLTEgICAgICAgICAtPiAgMQorZHFkdmkxOTEgZGl2aWRlaW50IC0xICAgIC0xMCAgICAgICAgLT4gIDAKK2RxZHZpMTkyIGRpdmlkZWludCAtMSAgICAtMTAwICAgICAgIC0+ICAwCitkcWR2aTE5MyBkaXZpZGVpbnQgLTEgICAgLTEwMDAgICAgICAtPiAgMAorZHFkdmkxOTQgZGl2aWRlaW50IC0xICAgIC0xMDAwMCAgICAgLT4gIDAKK2RxZHZpMTk1IGRpdmlkZWludCAtMSAgICAtMTAwMDAwICAgIC0+ICAwCitkcWR2aTE5NiBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAgICAtPiAgMAorZHFkdmkxOTcgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMCAgLT4gIDAKK2RxZHZpMTk4IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAwIC0+ICAwCisKKy0tIHNvbWUgbG9uZyBvcGVyYW5kIChhdCBwPTkpIGNhc2VzCitkcWR2aTA3MCBkaXZpZGVpbnQgIDk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OQorZHFkdmkwNzEgZGl2aWRlaW50ICA5OTk5OTk5OTkuNCAgIDEgIC0+ICA5OTk5OTk5OTkKK2RxZHZpMDcyIGRpdmlkZWludCAgOTk5OTk5OTk5LjUgICAxICAtPiAgOTk5OTk5OTk5CitkcWR2aTA3MyBkaXZpZGVpbnQgIDk5OTk5OTk5OS45ICAgMSAgLT4gIDk5OTk5OTk5OQorZHFkdmkwNzQgZGl2aWRlaW50ICA5OTk5OTk5OTkuOTk5IDEgIC0+ICA5OTk5OTk5OTkKKworZHFkdmkwOTAgZGl2aWRlaW50ICAwLiAgICAgICAgICAgIDEgICAgLT4gIDAKK2RxZHZpMDkxIGRpdmlkZWludCAgLjAgICAgICAgICAgICAxICAgIC0+ICAwCitkcWR2aTA5MiBkaXZpZGVpbnQgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMAorZHFkdmkwOTMgZGl2aWRlaW50ICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDAKK2RxZHZpMDk0IGRpdmlkZWludCAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwCisKK2RxZHZpMTAwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKK2RxZHZpMTAxIGRpdmlkZWludCAgMSAgMiAgIC0+IDAKK2RxZHZpMTAyIGRpdmlkZWludCAgMSAgMyAgIC0+IDAKK2RxZHZpMTAzIGRpdmlkZWludCAgMSAgNCAgIC0+IDAKK2RxZHZpMTA0IGRpdmlkZWludCAgMSAgNSAgIC0+IDAKK2RxZHZpMTA1IGRpdmlkZWludCAgMSAgNiAgIC0+IDAKK2RxZHZpMTA2IGRpdmlkZWludCAgMSAgNyAgIC0+IDAKK2RxZHZpMTA3IGRpdmlkZWludCAgMSAgOCAgIC0+IDAKK2RxZHZpMTA4IGRpdmlkZWludCAgMSAgOSAgIC0+IDAKK2RxZHZpMTA5IGRpdmlkZWludCAgMSAgMTAgIC0+IDAKK2RxZHZpMTEwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKK2RxZHZpMTExIGRpdmlkZWludCAgMiAgMSAgIC0+IDIKK2RxZHZpMTEyIGRpdmlkZWludCAgMyAgMSAgIC0+IDMKK2RxZHZpMTEzIGRpdmlkZWludCAgNCAgMSAgIC0+IDQKK2RxZHZpMTE0IGRpdmlkZWludCAgNSAgMSAgIC0+IDUKK2RxZHZpMTE1IGRpdmlkZWludCAgNiAgMSAgIC0+IDYKK2RxZHZpMTE2IGRpdmlkZWludCAgNyAgMSAgIC0+IDcKK2RxZHZpMTE3IGRpdmlkZWludCAgOCAgMSAgIC0+IDgKK2RxZHZpMTE4IGRpdmlkZWludCAgOSAgMSAgIC0+IDkKK2RxZHZpMTE5IGRpdmlkZWludCAgMTAgMSAgIC0+IDEwCisKKy0tIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2RxZHZpMTMxIGRpdmlkZWludCAgMTAxLjMgICAxICAgICAtPiAgMTAxCitkcWR2aTEzMiBkaXZpZGVpbnQgIDEwMS4wICAgMSAgICAgLT4gIDEwMQorZHFkdmkxMzMgZGl2aWRlaW50ICAxMDEuMyAgIDMgICAgIC0+ICAzMworZHFkdmkxMzQgZGl2aWRlaW50ICAxMDEuMCAgIDMgICAgIC0+ICAzMworZHFkdmkxMzUgZGl2aWRlaW50ICAyLjQgICAgIDEgICAgIC0+ICAyCitkcWR2aTEzNiBkaXZpZGVpbnQgIDIuNDAwICAgMSAgICAgLT4gIDIKK2RxZHZpMTM3IGRpdmlkZWludCAgMTggICAgICAxOCAgICAtPiAgMQorZHFkdmkxMzggZGl2aWRlaW50ICAxMTIwICAgIDEwMDAgIC0+ICAxCitkcWR2aTEzOSBkaXZpZGVpbnQgIDIuNCAgICAgMiAgICAgLT4gIDEKK2RxZHZpMTQwIGRpdmlkZWludCAgMi40MDAgICAyICAgICAtPiAgMQorZHFkdmkxNDEgZGl2aWRlaW50ICAwLjUgICAgIDIuMDAwIC0+ICAwCitkcWR2aTE0MiBkaXZpZGVpbnQgIDguMDA1ICAgNyAgICAgLT4gIDEKK2RxZHZpMTQzIGRpdmlkZWludCAgNSAgICAgICAyICAgICAtPiAgMgorZHFkdmkxNDQgZGl2aWRlaW50ICAwICAgICAgIDIgICAgIC0+ICAwCitkcWR2aTE0NSBkaXZpZGVpbnQgIDAuMDAgICAgMiAgICAgLT4gIDAKKworLS0gT3RoZXJzCitkcWR2aTE1MCBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkKK2RxZHZpMTUxIGRpdmlkZWludCAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3MworZHFkdmkxNTIgZGl2aWRlaW50ICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5CitkcWR2aTE1MyBkaXZpZGVpbnQgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkKK2RxZHZpMTU0IGRpdmlkZWludCAgMTIzNDUgIDUuMSAgICAtPiAgMjQyMAorZHFkdmkxNTUgZGl2aWRlaW50ICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0CitkcWR2aTE1NiBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjgKK2RxZHZpMTU3IGRpdmlkZWludCAgICAxMDEgIDcuNiAgICAtPiAgMTMKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGVpbnQgYnkgMAorZHFkdmkyMDEgZGl2aWRlaW50ICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZHZpMjAyIGRpdmlkZWludCAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWR2aTIwMyBkaXZpZGVpbnQgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkdmkyMDQgZGl2aWRlaW50ICAwLjAwMDEgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpMjA1IGRpdmlkZWludCAgMC4wMSAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIwNiBkaXZpZGVpbnQgIDAuMSAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMDcgZGl2aWRlaW50ICAxICAgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpMjA4IGRpdmlkZWludCAgMSAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIwOSBkaXZpZGVpbnQgMTAgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTAgZGl2aWRlaW50IDFFKzEwMCAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpMjExIGRpdmlkZWludCAxRSszODAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxNCBkaXZpZGVpbnQgIC0wLjAwMDEgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxNSBkaXZpZGVpbnQgIC0wLjAxICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxNiBkaXZpZGVpbnQgIC0wLjEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxNyBkaXZpZGVpbnQgIC0xICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxOCBkaXZpZGVpbnQgIC0xICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxOSBkaXZpZGVpbnQgLTEwICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIyMCBkaXZpZGVpbnQgLTFFKzEwMCAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIyMSBkaXZpZGVpbnQgLTFFKzM4MCAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdworZHFkdmkyNzAgZGl2aWRlaW50IDEgMWUzODQgICAgICAgICAgLT4gMAorZHFkdmkyNzEgZGl2aWRlaW50IDEgMC45ZTM4NCAgICAgICAgLT4gMAorZHFkdmkyNzIgZGl2aWRlaW50IDEgMC45OWUzODQgICAgICAgLT4gMAorZHFkdmkyNzMgZGl2aWRlaW50IDEgMC45OTk5OTk5OTk5OTk5OTk5ZTM4NCAgICAgICAtPiAwCitkcWR2aTI3NCBkaXZpZGVpbnQgOWUzODQgICAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkyNzUgZGl2aWRlaW50IDkuOWUzODQgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMjc2IGRpdmlkZWludCA5Ljk5ZTM4NCAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTI3NyBkaXZpZGVpbnQgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworZHFkdmkyODAgZGl2aWRlaW50IDAuMSA5ZS0zODMgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMjgxIGRpdmlkZWludCAwLjEgOTllLTM4MyAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTI4MiBkaXZpZGVpbnQgMC4xIDk5OWUtMzgzICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkyODMgZGl2aWRlaW50IDAuMSA5ZS0zODIgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMjg0IGRpdmlkZWludCAwLjEgOTllLTM4MiAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIEdEIGVkZ2UgY2FzZXM6IGxocyBzbWFsbGVyIHRoYW4gcmhzIGJ1dCBtb3JlIGRpZ2l0cworZHFkdmkzMDEgIGRpdmlkZWludCAgMC45ICAgICAgMiAgICAgIC0+ICAwCitkcWR2aTMwMiAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAgICAgLT4gIDAKK2RxZHZpMzAzICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMSAgICAtPiAgMAorZHFkdmkzMDQgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMCAgIC0+ICAwCitkcWR2aTMwNSAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAxICAgLT4gIDAKK2RxZHZpMzA2ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEgICAgICAtPiAgMAorZHFkdmkzMDcgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwCitkcWR2aTMwOCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDAKK2RxZHZpMzA5ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMAorZHFkdmkzMTAgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCitkcWR2aTMxMSAgZGl2aWRlaW50ICAwLjEyICAgICAyICAgICAgLT4gIDAKK2RxZHZpMzEyICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMCAgICAtPiAgMAorZHFkdmkzMTMgIGRpdmlkZWludCAgMC4xMiAgICAgMi4xICAgIC0+ICAwCitkcWR2aTMxNCAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAwICAgLT4gIDAKK2RxZHZpMzE1ICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMDEgICAtPiAgMAorCistLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKK2RxZHZpMzMwICBkaXZpZGVpbnQgIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYgIDEwICAgIC0+ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDUKK2RxZHZpMzMxICBkaXZpZGVpbnQgIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYgICAxICAgIC0+ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2CitkcWR2aTMzMiAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMzMzICBkaXZpZGVpbnQgIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KK2RxZHZpMTA1MSBkaXZpZGVpbnQgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkxMDUyIGRpdmlkZWludCAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTEwNTMgZGl2aWRlaW50IC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMTA1NCBkaXZpZGVpbnQgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkxMDU1IGRpdmlkZWludCAgMWUtMjc3ICAxZSszMTEgLT4gIDAKK2RxZHZpMTA1NiBkaXZpZGVpbnQgIDFlLTI3NyAtMWUrMzExIC0+IC0wCitkcWR2aTEwNTcgZGl2aWRlaW50IC0xZS0yNzcgIDFlKzMxMSAtPiAtMAorZHFkdmkxMDU4IGRpdmlkZWludCAtMWUtMjc3IC0xZSszMTEgLT4gIDAKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkcWR2aTEwNjAgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDEgLT4gMAorZHFkdmkxMDYxIGRpdmlkZWludCAxZS0yOTEgMWUrMTAyIC0+IDAKK2RxZHZpMTA2MiBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMyAtPiAwCitkcWR2aTEwNjMgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDQgLT4gMAorZHFkdmkxMDY0IGRpdmlkZWludCAxZS0yOTEgMWUrMTA1IC0+IDAKK2RxZHZpMTA2NSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNiAtPiAwCitkcWR2aTEwNjYgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDcgLT4gMAorZHFkdmkxMDY3IGRpdmlkZWludCAxZS0yOTEgMWUrMTA4IC0+IDAKK2RxZHZpMTA2OCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOSAtPiAwCitkcWR2aTEwNjkgZGl2aWRlaW50IDFlLTI5MSAxZSsxMTAgLT4gMAorCitkcWR2aTExMDEgZGl2aWRlaW50ICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMAorZHFkdmkxMTAyIGRpdmlkZWludCAgMS4wMDBFLTM5NCAgIDFlKzEgIC0+IDAKK2RxZHZpMTEwMyBkaXZpZGVpbnQgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAwCisKK2RxZHZpMTExOCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgICAxZSs0ICAtPiAwCitkcWR2aTExMTkgZGl2aWRlaW50ICAzRS0zOTQgICAgICAtMWUrNSAgLT4gLTAKK2RxZHZpMTEyMCBkaXZpZGVpbnQgIDVFLTM5NCAgICAgICAxZSs1ICAtPiAwCisKK2RxZHZpMTEyNCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMAorZHFkdmkxMTMwIGRpdmlkZWludCAgMy4wRS0zOTQgICAgLTFlKzUgIC0+IC0wCisKK2RxZHZpMTEzMSBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsyMDAgLT4gMAorZHFkdmkxMTMyIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OSAtPiAwCitkcWR2aTExMzMgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMTk4IC0+IDAKK2RxZHZpMTEzNCBkaXZpZGVpbnQgIDIuMEUtMTk5ICAgICAyZSsxOTggLT4gMAorZHFkdmkxMTM1IGRpdmlkZWludCAgNC4wRS0xOTkgICAgIDRlKzE5OCAtPiAwCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RxZHZpNDAxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxMDAgLT4gMTIzNDU2NzgwCitkcWR2aTQwMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAgIC0+IDAKK2RxZHZpNDAzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxMCAgLT4gMTIzNDU2NzgwCitkcWR2aTQwNCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAgIC0+IDAKK2RxZHZpNDA1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxMCAgLT4gMTIzNDU2Nzg5CitkcWR2aTQwNiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAgIC0+IDAKK2RxZHZpNDA3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxMCAgLT4gMTIzNDU2Nzg5CitkcWR2aTQwOCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAgIC0+IDAKK2RxZHZpNDA5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxMDAgLT4gMTIzNDU2Nzg5CitkcWR2aTQxMCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAgIC0+IDAKK2RxZHZpNDExIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxMCAgLT4gMTIzNDU2Nzg5CitkcWR2aTQxMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAgIC0+IDAKK2RxZHZpNDEzIGRpdmlkZWludCAxMjM0NTY3ODk0OCAxMDAgLT4gMTIzNDU2Nzg5CitkcWR2aTQxNCBkaXZpZGVpbnQgMTIzNDU2Nzg5NDkgMTAwIC0+IDEyMzQ1Njc4OQorZHFkdmk0MTUgZGl2aWRlaW50IDEyMzQ1Njc4OTUwIDEwMCAtPiAxMjM0NTY3ODkKK2RxZHZpNDE2IGRpdmlkZWludCAxMjM0NTY3ODk1MSAxMDAgLT4gMTIzNDU2Nzg5CitkcWR2aTQxNyBkaXZpZGVpbnQgMTIzNDU2Nzg5OTkgMTAwIC0+IDEyMzQ1Njc4OQorZHFkdmk0NDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDAKK2RxZHZpNDQyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwIC0+IDAKK2RxZHZpNDQzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDAKK2RxZHZpNDQ0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgIC0+IDAKK2RxZHZpNDQ1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKK2RxZHZpNDQ2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgIC0+IDAKK2RxZHZpNDQ3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTEKK2RxZHZpNDQ4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgIC0+IDAKK2RxZHZpNDQ5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxCitkcWR2aTQ1MCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAtPiAwCitkcWR2aTQ1MSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2CitkcWR2aTQ1MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAtPiAwCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK2RxZHZpNTMxIGRpdmlkZWludCA1LjAwIDFFLTMgICAgLT4gNTAwMAorZHFkdmk1MzIgZGl2aWRlaW50IDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWR2aTUzMyBkaXZpZGVpbnQgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZHZpNTM0IGRpdmlkZWludCAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkdmk1MzUgZGl2aWRlaW50IC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWR2aTUzNiBkaXZpZGVpbnQgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKworZHFkdmk1NDEgZGl2aWRlaW50ICAwICAgIC0xICAgICAtPiAtMAorZHFkdmk1NDIgZGl2aWRlaW50IC0wICAgIC0xICAgICAtPiAgMAorZHFkdmk1NDMgZGl2aWRlaW50ICAwICAgICAxICAgICAtPiAgMAorZHFkdmk1NDQgZGl2aWRlaW50IC0wICAgICAxICAgICAtPiAtMAorZHFkdmk1NDUgZGl2aWRlaW50IC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NDYgZGl2aWRlaW50IC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NDcgZGl2aWRlaW50ICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NDggZGl2aWRlaW50ICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWR2aTU1MSBkaXZpZGVpbnQgIDAuMCAgLTEgICAgIC0+IC0wCitkcWR2aTU1MiBkaXZpZGVpbnQgLTAuMCAgLTEgICAgIC0+ICAwCitkcWR2aTU1MyBkaXZpZGVpbnQgIDAuMCAgIDEgICAgIC0+ICAwCitkcWR2aTU1NCBkaXZpZGVpbnQgLTAuMCAgIDEgICAgIC0+IC0wCitkcWR2aTU1NSBkaXZpZGVpbnQgLTEuMCAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU1NiBkaXZpZGVpbnQgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU1NyBkaXZpZGVpbnQgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU1OCBkaXZpZGVpbnQgIDEuMCAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZHZpNTYxIGRpdmlkZWludCAgMCAgICAtMS4wICAgLT4gLTAKK2RxZHZpNTYyIGRpdmlkZWludCAtMCAgICAtMS4wICAgLT4gIDAKK2RxZHZpNTYzIGRpdmlkZWludCAgMCAgICAgMS4wICAgLT4gIDAKK2RxZHZpNTY0IGRpdmlkZWludCAtMCAgICAgMS4wICAgLT4gLTAKK2RxZHZpNTY1IGRpdmlkZWludCAtMSAgICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTY2IGRpdmlkZWludCAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTY3IGRpdmlkZWludCAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTY4IGRpdmlkZWludCAgMSAgICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZHFkdmk1NzEgZGl2aWRlaW50ICAwLjAgIC0xLjAgICAtPiAtMAorZHFkdmk1NzIgZGl2aWRlaW50IC0wLjAgIC0xLjAgICAtPiAgMAorZHFkdmk1NzMgZGl2aWRlaW50ICAwLjAgICAxLjAgICAtPiAgMAorZHFkdmk1NzQgZGl2aWRlaW50IC0wLjAgICAxLjAgICAtPiAtMAorZHFkdmk1NzUgZGl2aWRlaW50IC0xLjAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NzYgZGl2aWRlaW50IC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NzcgZGl2aWRlaW50ICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NzggZGl2aWRlaW50ICAxLjAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBTcGVjaWFscworZHFkdmk1ODAgZGl2aWRlaW50ICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTU4MSBkaXZpZGVpbnQgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZHFkdmk1ODIgZGl2aWRlaW50ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RxZHZpNTgzIGRpdmlkZWludCAgSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkcWR2aTU4NCBkaXZpZGVpbnQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZHFkdmk1ODUgZGl2aWRlaW50ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RxZHZpNTg2IGRpdmlkZWludCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkcWR2aTU4NyBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNTg4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTAKK2RxZHZpNTg5IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk1OTAgZGl2aWRlaW50IC0xICAgICBJbmYgICAtPiAtMAorZHFkdmk1OTEgZGl2aWRlaW50IC0wICAgICBJbmYgICAtPiAtMAorZHFkdmk1OTIgZGl2aWRlaW50ICAwICAgICBJbmYgICAtPiAgMAorZHFkdmk1OTMgZGl2aWRlaW50ICAxICAgICBJbmYgICAtPiAgMAorZHFkdmk1OTQgZGl2aWRlaW50ICAxMDAwICBJbmYgICAtPiAgMAorZHFkdmk1OTUgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxZHZpNjAwIGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2MDEgZGl2aWRlaW50IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RxZHZpNjAyIGRpdmlkZWludCAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcWR2aTYwMyBkaXZpZGVpbnQgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZHFkdmk2MDQgZGl2aWRlaW50IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RxZHZpNjA1IGRpdmlkZWludCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcWR2aTYwNiBkaXZpZGVpbnQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFkdmk2MDcgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTYwOCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wCitkcWR2aTYwOSBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjEwIGRpdmlkZWludCAtMSAgICAtSW5mICAgLT4gIDAKK2RxZHZpNjExIGRpdmlkZWludCAtMCAgICAtSW5mICAgLT4gIDAKK2RxZHZpNjEyIGRpdmlkZWludCAgMCAgICAtSW5mICAgLT4gLTAKK2RxZHZpNjEzIGRpdmlkZWludCAgMSAgICAtSW5mICAgLT4gLTAKK2RxZHZpNjE0IGRpdmlkZWludCAgMTAwMCAtSW5mICAgLT4gLTAKK2RxZHZpNjE1IGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWR2aTYyMSBkaXZpZGVpbnQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxZHZpNjIyIGRpdmlkZWludCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFkdmk2MjMgZGl2aWRlaW50ICBOYU4gLTEgICAgICAtPiAgTmFOCitkcWR2aTYyNCBkaXZpZGVpbnQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxZHZpNjI1IGRpdmlkZWludCAgTmFOICAwICAgICAgLT4gIE5hTgorZHFkdmk2MjYgZGl2aWRlaW50ICBOYU4gIDEgICAgICAtPiAgTmFOCitkcWR2aTYyNyBkaXZpZGVpbnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxZHZpNjI4IGRpdmlkZWludCAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFkdmk2MjkgZGl2aWRlaW50ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzMCBkaXZpZGVpbnQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxZHZpNjMxIGRpdmlkZWludCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFkdmk2MzIgZGl2aWRlaW50IC0xICAgIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzMyBkaXZpZGVpbnQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RxZHZpNjM0IGRpdmlkZWludCAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFkdmk2MzUgZGl2aWRlaW50ICAxICAgIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzNiBkaXZpZGVpbnQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxZHZpNjM3IGRpdmlkZWludCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcWR2aTY0MSBkaXZpZGVpbnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0MiBkaXZpZGVpbnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0MyBkaXZpZGVpbnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0NCBkaXZpZGVpbnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0NSBkaXZpZGVpbnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0NiBkaXZpZGVpbnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0NyBkaXZpZGVpbnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0OCBkaXZpZGVpbnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0OSBkaXZpZGVpbnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1MCBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1MSBkaXZpZGVpbnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1MiBkaXZpZGVpbnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1MyBkaXZpZGVpbnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1NCBkaXZpZGVpbnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1NSBkaXZpZGVpbnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1NiBkaXZpZGVpbnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1NyBkaXZpZGVpbnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1OCBkaXZpZGVpbnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1OSBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxZHZpNjYxIGRpdmlkZWludCAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RxZHZpNjYyIGRpdmlkZWludCAgTmFOOCAgMTAwMCAgLT4gIE5hTjgKK2RxZHZpNjYzIGRpdmlkZWludCAgTmFONyAgSW5mICAgLT4gIE5hTjcKK2RxZHZpNjY0IGRpdmlkZWludCAtTmFONiAgTmFONSAgLT4gLU5hTjYKK2RxZHZpNjY1IGRpdmlkZWludCAtSW5mICAgTmFONCAgLT4gIE5hTjQKK2RxZHZpNjY2IGRpdmlkZWludCAtMTAwMCAgTmFOMyAgLT4gIE5hTjMKK2RxZHZpNjY3IGRpdmlkZWludCAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworZHFkdmk2NzEgZGl2aWRlaW50IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjcyIGRpdmlkZWludCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3MyBkaXZpZGVpbnQgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NzQgZGl2aWRlaW50ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjc1IGRpdmlkZWludCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3NiBkaXZpZGVpbnQgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NzcgZGl2aWRlaW50ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjc4IGRpdmlkZWludCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3OSBkaXZpZGVpbnQgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBHeXVyaXMgZXhhbXBsZQorZHFkdmk3MDAgZGl2aWRlaW50IDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDAKKworLS0gTnVsbCB0ZXN0cworZHFkdmk5MDAgZGl2aWRlaW50ICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpOTAxIGRpdmlkZWludCAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFFbmNvZGUuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUVuY29kZS5kZWNUZXN0CmluZGV4IDhjNWQ3YjkuLjQ5ZWRmNWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUVuY29kZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUVuY29kZS5kZWNUZXN0CkBAIC0xLDQ3NyArMSw0NzcgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxRW5jb2RlLmRlY1Rlc3QgLS0gZGVjaW1hbCBzaXh0ZWVuLWJ5dGUgZm9ybWF0IHRlc3RjYXNlcyAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAwLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFtQcmV2aW91c2x5IGNhbGxlZCBkZWNpbWFsMTI4LmRlY1Rlc3RdDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciB0aGUgc2l4dGVlbi1ieXRlIGNvbmNyZXRlIHJlcHJlc2VudGF0aW9uLg0KLS0tIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlOg0KLS0tDQotLS0gICAxIGJpdCAgc2lnbg0KLS0tICAgNSBiaXRzIGNvbWJpbmF0aW9uIGZpZWxkDQotLS0gIDEyIGJpdHMgZXhwb25lbnQgY29udGludWF0aW9uDQotLS0gMTEwIGJpdHMgY29lZmZpY2llbnQgY29udGludWF0aW9uDQotLS0NCi0tLSBUb3RhbCBleHBvbmVudCBsZW5ndGggMTQgYml0cw0KLS0tIFRvdGFsIGNvZWZmaWNpZW50IGxlbmd0aCAxMTQgYml0cyAoMzQgZGlnaXRzKQ0KLS0tDQotLS0gRWxpbWl0ID0gMTIyODcgKG1heGltdW0gZW5jb2RlZCBleHBvbmVudCkNCi0tLSBFbWF4ICAgPSAgNjE0NCAobGFyZ2VzdCBleHBvbmVudCB2YWx1ZSkNCi0tLSBFbWluICAgPSAtNjE0MyAoc21hbGxlc3QgZXhwb25lbnQgdmFsdWUpDQotLS0gYmlhcyAgID0gIDYxNzYgKHN1YnRyYWN0ZWQgZnJvbSBlbmNvZGVkIGV4cG9uZW50KSA9IC1FdGlueQ0KLQ0KLS0tIFRoZSB0ZXN0Y2FzZXMgaGVyZSBoYXZlIG9ubHkgZXhhY3RseSByZXByZXNlbnRhYmxlIGRhdGEgb24gdGhlDQotLS0gJ2xlZnQtaGFuZC1zaWRlJzsgcm91bmRpbmcgZnJvbSBzdHJpbmdzIGlzIHRlc3RlZCBpbiAnYmFzZScNCi0tLSB0ZXN0Y2FzZSBncm91cHMuDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi0NCi0tLSBHZW5lcmFsIHRlc3RjYXNlcw0KLS0tIChtb3N0bHkgZGVyaXZlZCBmcm9tIHRoZSBTdHJhd21hbiA0IGRvY3VtZW50IGFuZCBleGFtcGxlcykNCi1kZWNxMDAxIGFwcGx5ICAgI0EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwDQotZGVjcTAwMiBhcHBseSAgIC03LjUwICAgICAgICAgICAgIC0+ICNBMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMA0KLS0tIGRlcml2YXRpdmUgY2Fub25pY2FsIHBsYWluIHN0cmluZ3MNCi1kZWNxMDAzIGFwcGx5ICAgI0EyMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwRSszDQotZGVjcTAwNCBhcHBseSAgIC03LjUwRSszICAgICAgICAgIC0+ICNBMjA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMA0KLWRlY3EwMDUgYXBwbHkgICAjQTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTc1MA0KLWRlY3EwMDYgYXBwbHkgICAtNzUwICAgICAgICAgICAgICAtPiAjQTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDANCi1kZWNxMDA3IGFwcGx5ICAgI0EyMDdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03NS4wDQotZGVjcTAwOCBhcHBseSAgIC03NS4wICAgICAgICAgICAgIC0+ICNBMjA3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMA0KLWRlY3EwMDkgYXBwbHkgICAjQTIwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuNzUwDQotZGVjcTAxMCBhcHBseSAgIC0wLjc1MCAgICAgICAgICAgIC0+ICNBMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMA0KLWRlY3EwMTEgYXBwbHkgICAjQTIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuMDc1MA0KLWRlY3EwMTIgYXBwbHkgICAtMC4wNzUwICAgICAgICAgICAtPiAjQTIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDANCi1kZWNxMDEzIGFwcGx5ICAgI0EyMDY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC0wLjAwMDc1MA0KLWRlY3EwMTQgYXBwbHkgICAtMC4wMDA3NTAgICAgICAgICAtPiAjQTIwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDANCi1kZWNxMDE1IGFwcGx5ICAgI0EyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC0wLjAwMDAwNzUwDQotZGVjcTAxNiBhcHBseSAgIC0wLjAwMDAwNzUwICAgICAgIC0+ICNBMjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMA0KLWRlY3EwMTcgYXBwbHkgICAjQTIwNWMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTcuNTBFLTcNCi1kZWNxMDE4IGFwcGx5ICAgLTcuNTBFLTcgICAgICAgICAgLT4gI0EyMDVjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwDQotDQotLS0gTm9ybWFsaXR5DQotZGVjcTAyMCBhcHBseSAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtPiAjMjYwODEzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQNCi1kZWNxMDIxIGFwcGx5ICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0+ICNhNjA4MTM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNA0KLWRlY3EwMjIgYXBwbHkgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAgLT4gIzI2MDgwOTEyNDQ5MTI0NDkxMjQ0OTEyNDQ5MTI0NDkxDQotDQotLS0gTm1heCBhbmQgc2ltaWxhcg0KLWRlY3EwMzEgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZGVjcTAzMiBhcHBseSAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRlY3EwMzMgYXBwbHkgICAxLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNEUrNjE0NCAtPiAjNDdmZmQzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQNCi1kZWNxMDM0IGFwcGx5ICAgIzQ3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0IC0+IDEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0DQotLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykNCi1kZWNxMDM1IGFwcGx5ICAgMS4yM0UrNjE0NCAgICAtPiAjNDdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3EwMzYgYXBwbHkgICAjNDdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4yMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQNCi1kZWNxMDM3IGFwcGx5ICAgMUUrNjE0NCAgICAgICAtPiAjNDdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3EwMzggYXBwbHkgICAjNDdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQNCi0NCi1kZWNxMDUxIGFwcGx5ICAgMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1DQotZGVjcTA1MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNSAgICAgICAtPiAxMjM0NQ0KLWRlY3EwNTMgYXBwbHkgICAxMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MzQNCi1kZWNxMDU0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0ICAgICAgIC0+IDEyMzQNCi1kZWNxMDU1IGFwcGx5ICAgMTIzICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzDQotZGVjcTA1NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAxMjMNCi1kZWNxMDU3IGFwcGx5ICAgMTIgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyDQotZGVjcTA1OCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgICAgICAtPiAxMg0KLWRlY3EwNTkgYXBwbHkgICAxICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kZWNxMDYwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDENCi1kZWNxMDYxIGFwcGx5ICAgMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzDQotZGVjcTA2MiBhcHBseSAgICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAxLjIzDQotZGVjcTA2MyBhcHBseSAgIDEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQ0KLWRlY3EwNjQgYXBwbHkgICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUgICAgICAgLT4gMTIzLjQ1DQotDQotLS0gTm1pbiBhbmQgYmVsb3cNCi1kZWNxMDcxIGFwcGx5ICAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMwMDA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRlY3EwNzIgYXBwbHkgICAjMDAwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gMUUtNjE0Mw0KLWRlY3EwNzMgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTA3NCBhcHBseSAgICMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRlY3EwNzUgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZGVjcTA3NiBhcHBseSAgICMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLQ0KLWRlY3EwNzcgYXBwbHkgICAwLjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgU3Vibm9ybWFsDQotZGVjcTA3OCBhcHBseSAgICMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0ICBTdWJub3JtYWwNCi1kZWNxMDc5IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTBFLTYxNDMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgIFN1Ym5vcm1hbA0KLWRlY3EwODAgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgICAgLT4gMS4wRS02MTc1ICAgICAgICAgICAgICBTdWJub3JtYWwNCi1kZWNxMDgxIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgIC0+ICMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbA0KLWRlY3EwODIgYXBwbHkgICAjMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gMUUtNjE3NSAgICAgICAgICAgICAgICBTdWJub3JtYWwNCi1kZWNxMDgzIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbA0KLWRlY3EwODQgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gMUUtNjE3NiAgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQotDQotLS0gdW5kZXJmbG93cyBjYW5ub3QgYmUgdGVzdGVkIGZvciBzaW1wbGUgY29waWVzLCBjaGVjayBlZGdlIGNhc2VzDQotZGVjcTA5MCBhcHBseSAgIDFlLTYxNzYgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbA0KLWRlY3ExMDAgYXBwbHkgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllLTYxNzYgLT4gIzAwMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBTdWJub3JtYWwNCi0NCi0tLSBzYW1lIGFnYWluLCBuZWdhdGl2ZXMNCi0tLSBObWF4IGFuZCBzaW1pbGFyDQotZGVjcTEyMiBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kZWNxMTIzIGFwcGx5ICAgI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRlY3ExMjQgYXBwbHkgIC0xLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNEUrNjE0NCAtPiAjYzdmZmQzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQNCi1kZWNxMTI1IGFwcGx5ICAgI2M3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0IC0+IC0xLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNEUrNjE0NA0KLS0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpDQotZGVjcTEzMCBhcHBseSAgLTEuMjNFKzYxNDQgICAgLT4gI2M3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxMTMxIGFwcGx5ICAgI2M3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NA0KLWRlY3ExMzIgYXBwbHkgIC0xRSs2MTQ0ICAgICAgIC0+ICNjN2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjcTEzMyBhcHBseSAgICNjN2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQNCi0NCi1kZWNxMTUxIGFwcGx5ICAtMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1DQotZGVjcTE1MiBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzNDUNCi1kZWNxMTUzIGFwcGx5ICAtMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0DQotZGVjcTE1NCBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzNCAgICAgICAtPiAtMTIzNA0KLWRlY3ExNTUgYXBwbHkgIC0xMjMgICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMNCi1kZWNxMTU2IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzICAgICAgIC0+IC0xMjMNCi1kZWNxMTU3IGFwcGx5ICAtMTIgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyDQotZGVjcTE1OCBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgICAgICAtPiAtMTINCi1kZWNxMTU5IGFwcGx5ICAtMSAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZGVjcTE2MCBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMQ0KLWRlY3ExNjEgYXBwbHkgIC0xLjIzICAgICAgICAgICAgICAgICAgICAtPiAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMNCi1kZWNxMTYyIGFwcGx5ICAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzICAgICAgIC0+IC0xLjIzDQotZGVjcTE2MyBhcHBseSAgLTEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQ0KLWRlY3ExNjQgYXBwbHkgICAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUgICAgICAgLT4gLTEyMy40NQ0KLQ0KLS0tIE5taW4gYW5kIGJlbG93DQotZGVjcTE3MSBhcHBseSAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjODAwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kZWNxMTcyIGFwcGx5ICAgIzgwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xRS02MTQzDQotZGVjcTE3MyBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxMTc0IGFwcGx5ICAgIzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRlY3ExNzUgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZGVjcTE3NiBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCi0NCi1kZWNxMTc3IGFwcGx5ICAtMC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICM4MDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIFN1Ym5vcm1hbA0KLWRlY3ExNzggYXBwbHkgICAjODAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgIFN1Ym5vcm1hbA0KLWRlY3ExNzkgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMEUtNjE0MyAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgU3Vibm9ybWFsDQotZGVjcTE4MCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAgICAtPiAtMS4wRS02MTc1ICAgICAgICAgICAgICBTdWJub3JtYWwNCi1kZWNxMTgxIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgIC0+ICM4MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbA0KLWRlY3ExODIgYXBwbHkgICAjODAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gLTFFLTYxNzUgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQotZGVjcTE4MyBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwNCi1kZWNxMTg0IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBTdWJub3JtYWwNCi0NCi0tLSB1bmRlcmZsb3cgZWRnZSBjYXNlcw0KLWRlY3ExOTAgYXBwbHkgICAtMWUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsDQotZGVjcTIwMCBhcHBseSAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllLTYxNzYgLT4gIzgwMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBTdWJub3JtYWwNCi0NCi0tLSB6ZXJvcw0KLWRlY3E0MDAgYXBwbHkgICAwRS04MDAwICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNxNDAxIGFwcGx5ICAgMEUtNjE3NyAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjcTQwMiBhcHBseSAgIDBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E0MDMgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUtNjE3Ng0KLWRlY3E0MDQgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTQwNSBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS02MTc2DQotZGVjcTQwNiBhcHBseSAgIDBFLTIgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E0MDcgYXBwbHkgICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMC4wMA0KLWRlY3E0MDggYXBwbHkgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNDA5IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDANCi1kZWNxNDEwIGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTQxMSBhcHBseSAgICMyMjA4YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszDQotZGVjcTQxMiBhcHBseSAgIDBFKzYxMTEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E0MTMgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQ0KLS0tIGNsYW1wZWQgemVyb3MuLi4NCi1kZWNxNDE0IGFwcGx5ICAgMEUrNjExMiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjcTQxNSBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSs2MTExDQotZGVjcTQxNiBhcHBseSAgIDBFKzYxNDQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY3E0MTcgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQ0KLWRlY3E0MTggYXBwbHkgICAwRSs4MDAwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNxNDE5IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTENCi0NCi0tLSBuZWdhdGl2ZSB6ZXJvcw0KLWRlY3E0MjAgYXBwbHkgIC0wRS04MDAwICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNxNDIxIGFwcGx5ICAtMEUtNjE3NyAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjcTQyMiBhcHBseSAgLTBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E0MjMgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTYxNzYNCi1kZWNxNDI0IGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E0MjUgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTYxNzYNCi1kZWNxNDI2IGFwcGx5ICAtMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTQyNyBhcHBseSAgICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMC4wMA0KLWRlY3E0MjggYXBwbHkgIC0wICAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNDI5IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wDQotZGVjcTQzMCBhcHBseSAgLTBFKzMgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E0MzEgYXBwbHkgICAjYTIwOGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzMNCi1kZWNxNDMyIGFwcGx5ICAtMEUrNjExMSAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTQzMyBhcHBseSAgICNjM2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrNjExMQ0KLS0tIGNsYW1wZWQgemVyb3MuLi4NCi1kZWNxNDM0IGFwcGx5ICAtMEUrNjExMiAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjcTQzNSBhcHBseSAgICNjM2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrNjExMQ0KLWRlY3E0MzYgYXBwbHkgIC0wRSs2MTQ0ICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNxNDM3IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExDQotZGVjcTQzOCBhcHBseSAgLTBFKzgwMDAgICAgICAgICAgICAgICAgIC0+ICNjM2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY3E0MzkgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTENCi0NCi0tLSBleHBvbmVudCBsZW5ndGhzDQotZGVjcTQ0MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3DQotZGVjcTQ0MSBhcHBseSAgIDcgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZGVjcTQ0MiBhcHBseSAgICMyMjBhNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3RSs5DQotZGVjcTQ0MyBhcHBseSAgIDdFKzkgLT4gIzIyMGE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZGVjcTQ0NCBhcHBseSAgICMyMjIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3RSs5OQ0KLWRlY3E0NDUgYXBwbHkgICA3RSs5OSAtPiAjMjIyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCi1kZWNxNDQ2IGFwcGx5ICAgIzIzMDFjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzk5OQ0KLWRlY3E0NDcgYXBwbHkgICA3RSs5OTkgLT4gIzIzMDFjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZGVjcTQ0OCBhcHBseSAgICM0M2UzYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3RSs1OTk5DQotZGVjcTQ0OSBhcHBseSAgIDdFKzU5OTkgLT4gIzQzZTNjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotDQotLS0gU3BlY2lhbHMNCi1kZWNxNTAwIGFwcGx5ICAgSW5maW5pdHkgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MDEgYXBwbHkgICAjNzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4NzggLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTUwMiBhcHBseSAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KLWRlY3E1MDMgYXBwbHkgICAjNzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5NzkgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTUwNCBhcHBseSAgICM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KLWRlY3E1MDUgYXBwbHkgICAjN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2EgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTUwNiBhcHBseSAgICM3YTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KLWRlY3E1MDcgYXBwbHkgICAjN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2IgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTUwOCBhcHBseSAgICM3YjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KLQ0KLWRlY3E1MDkgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTUxMCBhcHBseSAgICM3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YyAtPiAjN2MwMDNjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2MNCi1kZWNxNTExIGFwcGx5ICAgIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IE5hTg0KLWRlY3E1MTIgYXBwbHkgICAjN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gIzdjMDAzZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkDQotZGVjcTUxMyBhcHBseSAgICM3ZDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBOYU4NCi1kZWNxNTE0IGFwcGx5ICAgIzdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlIC0+ICM3ZTAwM2U3ZTdjN2U3ZTdlN2U3YzdlN2U3ZTdlN2M3ZQ0KLWRlY3E1MTUgYXBwbHkgICAjN2UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gc05hTg0KLWRlY3E1MTYgYXBwbHkgICAjN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2YgLT4gIzdlMDAzZjdmN2M3ZjdmN2Y3ZjdjN2Y3ZjdmN2Y3YzdmDQotZGVjcTUxNyBhcHBseSAgICM3ZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBzTmFODQotZGVjcTUxOCBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiBzTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZGVjcTUxOSBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0NCi1kZWNxNTIwIGFwcGx5ICAgLUluZmluaXR5ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MjEgYXBwbHkgICAjZjg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4NzggLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTUyMiBhcHBseSAgICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkNCi1kZWNxNTIzIGFwcGx5ICAgI2Y5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5IC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MjQgYXBwbHkgICAjZjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5DQotZGVjcTUyNSBhcHBseSAgICNmYTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YSAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNTI2IGFwcGx5ICAgI2ZhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQ0KLWRlY3E1MjcgYXBwbHkgICAjZmI3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2IgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTUyOCBhcHBseSAgICNmYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkNCi0NCi1kZWNxNTI5IGFwcGx5ICAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MzAgYXBwbHkgICAjZmM3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2MgLT4gI2ZjMDAzYzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjDQotZGVjcTUzMSBhcHBseSAgICNmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtTmFODQotZGVjcTUzMiBhcHBseSAgICNmZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZCAtPiAjZmMwMDNkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QNCi1kZWNxNTMzIGFwcGx5ICAgI2ZkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1OYU4NCi1kZWNxNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlIC0+ICNmZTAwM2U3ZTdjN2U3ZTdlN2U3YzdlN2U3ZTdlN2M3ZQ0KLWRlY3E1MzUgYXBwbHkgICAjZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4NCi1kZWNxNTM2IGFwcGx5ICAgI2ZmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmIC0+ICNmZTAwM2Y3ZjdjN2Y3ZjdmN2Y3YzdmN2Y3ZjdmN2M3Zg0KLWRlY3E1MzcgYXBwbHkgICAjZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4NCi1kZWNxNTM4IGFwcGx5ICAgI2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIC0+IC1zTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZGVjcTUzOSBhcHBseSAgICNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiAjZmUwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0NCi1kZWNxNTQwIGFwcGx5ICAgTmFOICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTU0MSBhcHBseSAgIE5hTjAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1NDIgYXBwbHkgICBOYU4xICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kZWNxNTQzIGFwcGx5ICAgTmFOMTIgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyDQotZGVjcTU0NCBhcHBseSAgIE5hTjc5ICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQ0KLWRlY3E1NDUgYXBwbHkgICBOYU4xMjM0NSAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUNCi1kZWNxNTQ2IGFwcGx5ICAgTmFOMTIzNDU2ICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4ZTU2DQotZGVjcTU0NyBhcHBseSAgIE5hTjc5OTc5OSAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmN2ZkZg0KLWRlY3E1NDggYXBwbHkgICBOYU43OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTkgIC0+ICM3YzAwM2RmZjdmZGZmN2ZkZmY3ZmRmZjdmZGZmN2ZkZg0KLWRlY3E1NDkgYXBwbHkgICBOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRlY3E1NTAgYXBwbHkgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLQ0KLS0tIGZvbGQtZG93biBmdWxsIHNlcXVlbmNlDQotZGVjcTYwMSBhcHBseSAgIDFFKzYxNDQgICAgICAgICAgICAgICAgIC0+ICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjcTYwMiBhcHBseSAgICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NA0KLWRlY3E2MDMgYXBwbHkgICAxRSs2MTQzICAgICAgICAgICAgICAgICAtPiAjNDNmZmM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MDQgYXBwbHkgICAjNDNmZmM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0Mw0KLWRlY3E2MDUgYXBwbHkgICAxRSs2MTQyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MDYgYXBwbHkgICAjNDNmZmMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyDQotZGVjcTYwNyBhcHBseSAgIDFFKzYxNDEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjcTYwOCBhcHBseSAgICM0M2ZmYzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MQ0KLWRlY3E2MDkgYXBwbHkgICAxRSs2MTQwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MTAgYXBwbHkgICAjNDNmZmMwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MA0KLWRlY3E2MTEgYXBwbHkgICAxRSs2MTM5ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MTIgYXBwbHkgICAjNDNmZmMwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM5DQotZGVjcTYxMyBhcHBseSAgIDFFKzYxMzggICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjcTYxNCBhcHBseSAgICM0M2ZmYzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOA0KLWRlY3E2MTUgYXBwbHkgICAxRSs2MTM3ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MTYgYXBwbHkgICAjNDNmZmMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNw0KLWRlY3E2MTcgYXBwbHkgICAxRSs2MTM2ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MTggYXBwbHkgICAjNDNmZmMwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM2DQotZGVjcTYxOSBhcHBseSAgIDFFKzYxMzUgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjcTYyMCBhcHBseSAgICM0M2ZmYzAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNQ0KLWRlY3E2MjEgYXBwbHkgICAxRSs2MTM0ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MjIgYXBwbHkgICAjNDNmZmMwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNA0KLWRlY3E2MjMgYXBwbHkgICAxRSs2MTMzICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MjQgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTMzDQotZGVjcTYyNSBhcHBseSAgIDFFKzYxMzIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjcTYyNiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMg0KLWRlY3E2MjcgYXBwbHkgICAxRSs2MTMxICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MjggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMQ0KLWRlY3E2MjkgYXBwbHkgICAxRSs2MTMwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MzAgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTMwDQotZGVjcTYzMSBhcHBseSAgIDFFKzYxMjkgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjcTYzMiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMEUrNjEyOQ0KLWRlY3E2MzMgYXBwbHkgICAxRSs2MTI4ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MzQgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMEUrNjEyOA0KLWRlY3E2MzUgYXBwbHkgICAxRSs2MTI3ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MzYgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwRSs2MTI3DQotZGVjcTYzNyBhcHBseSAgIDFFKzYxMjYgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjcTYzOCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrNjEyNg0KLWRlY3E2MzkgYXBwbHkgICAxRSs2MTI1ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2NDAgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMEUrNjEyNQ0KLWRlY3E2NDEgYXBwbHkgICAxRSs2MTI0ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2NDIgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwRSs2MTI0DQotZGVjcTY0MyBhcHBseSAgIDFFKzYxMjMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjcTY0NCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMEUrNjEyMw0KLWRlY3E2NDUgYXBwbHkgICAxRSs2MTIyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2NDYgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMEUrNjEyMg0KLWRlY3E2NDcgYXBwbHkgICAxRSs2MTIxICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2NDggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwRSs2MTIxDQotZGVjcTY0OSBhcHBseSAgIDFFKzYxMjAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMCBDbGFtcGVkDQotZGVjcTY1MCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMEUrNjEyMA0KLWRlY3E2NTEgYXBwbHkgICAxRSs2MTE5ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2NTIgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMEUrNjExOQ0KLWRlY3E2NTMgYXBwbHkgICAxRSs2MTE4ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2NTQgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwRSs2MTE4DQotZGVjcTY1NSBhcHBseSAgIDFFKzYxMTcgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMCBDbGFtcGVkDQotZGVjcTY1NiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMCAgICAgICAtPiAxLjAwMDAwMEUrNjExNw0KLWRlY3E2NTcgYXBwbHkgICAxRSs2MTE2ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAgQ2xhbXBlZA0KLWRlY3E2NTggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAgICAgICAgLT4gMS4wMDAwMEUrNjExNg0KLWRlY3E2NTkgYXBwbHkgICAxRSs2MTE1ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAgQ2xhbXBlZA0KLWRlY3E2NjAgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAgICAgICAgLT4gMS4wMDAwRSs2MTE1DQotZGVjcTY2MSBhcHBseSAgIDFFKzYxMTQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMCBDbGFtcGVkDQotZGVjcTY2MiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMCAgICAgICAtPiAxLjAwMEUrNjExNA0KLWRlY3E2NjMgYXBwbHkgICAxRSs2MTEzICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAgQ2xhbXBlZA0KLWRlY3E2NjQgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAgICAgICAgLT4gMS4wMEUrNjExMw0KLWRlY3E2NjUgYXBwbHkgICAxRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgQ2xhbXBlZA0KLWRlY3E2NjYgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgLT4gMS4wRSs2MTEyDQotZGVjcTY2NyBhcHBseSAgIDFFKzYxMTEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRlY3E2NjggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUrNjExMQ0KLWRlY3E2NjkgYXBwbHkgICAxRSs2MTEwICAgICAgICAgICAgICAgICAtPiAjNDNmZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kZWNxNjcwIGFwcGx5ICAgIzQzZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFKzYxMTANCi0NCi0tLSBTZWxlY3RlZCBEUEQgY29kZXMNCi1kZWNxNzAwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDANCi1kZWNxNzAxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgICAgIC0+IDkNCi1kZWNxNzAyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IDEwDQotZGVjcTcwMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOSAgICAgICAtPiAxOQ0KLWRlY3E3MDQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAgICAgICAgLT4gMjANCi1kZWNxNzA1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5ICAgICAgIC0+IDI5DQotZGVjcTcwNiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMCAgICAgICAtPiAzMA0KLWRlY3E3MDcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkgICAgICAgLT4gMzkNCi1kZWNxNzA4IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwICAgICAgIC0+IDQwDQotZGVjcTcwOSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OSAgICAgICAtPiA0OQ0KLWRlY3E3MTAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAgICAgICAgLT4gNTANCi1kZWNxNzExIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5ICAgICAgIC0+IDU5DQotZGVjcTcxMiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MCAgICAgICAtPiA2MA0KLWRlY3E3MTMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkgICAgICAgLT4gNjkNCi1kZWNxNzE0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwICAgICAgIC0+IDcwDQotZGVjcTcxNSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MSAgICAgICAtPiA3MQ0KLWRlY3E3MTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIgICAgICAgLT4gNzINCi1kZWNxNzE3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczICAgICAgIC0+IDczDQotZGVjcTcxOCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NCAgICAgICAtPiA3NA0KLWRlY3E3MTkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUgICAgICAgLT4gNzUNCi1kZWNxNzIwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2ICAgICAgIC0+IDc2DQotZGVjcTcyMSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NyAgICAgICAtPiA3Nw0KLWRlY3E3MjIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzggICAgICAgLT4gNzgNCi1kZWNxNzIzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5ICAgICAgIC0+IDc5DQotDQotZGVjcTczMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5ZSAgICAgICAtPiA5OTQNCi1kZWNxNzMxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjlmICAgICAgIC0+IDk5NQ0KLWRlY3E3MzIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYTAgICAgICAgLT4gNTIwDQotZGVjcTczMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJhMSAgICAgICAtPiA1MjENCi0NCi0tLSBEUEQ6IG9uZSBvZiBlYWNoIG9mIHRoZSBodWZmbWFuIGdyb3Vwcw0KLWRlY3E3NDAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZjcgICAgICAgLT4gNzc3DQotZGVjcTc0MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNmOCAgICAgICAtPiA3NzgNCi1kZWNxNzQyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2ViICAgICAgIC0+IDc4Nw0KLWRlY3E3NDMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN2QgICAgICAgLT4gODc3DQotZGVjcTc0NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5ZiAgICAgICAtPiA5OTcNCi1kZWNxNzQ1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2JmICAgICAgIC0+IDk3OQ0KLWRlY3E3NDYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZGYgICAgICAgLT4gNzk5DQotZGVjcTc0NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ZSAgICAgICAtPiA4ODgNCi0NCi0NCi0tLSBEUEQgYWxsLWhpZ2hzIGNhc2VzIChpbmNsdWRlcyB0aGUgMjQgcmVkdW5kYW50IGNvZGVzKQ0KLWRlY3E3NTAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4DQotZGVjcTc1MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2ZSAgICAgICAtPiA4ODgNCi1kZWNxNzUyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjZlICAgICAgIC0+IDg4OA0KLWRlY3E3NTMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNmUgICAgICAgLT4gODg4DQotZGVjcTc1NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ZiAgICAgICAtPiA4ODkNCi1kZWNxNzU1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTZmICAgICAgIC0+IDg4OQ0KLWRlY3E3NTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNmYgICAgICAgLT4gODg5DQotZGVjcTc1NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2ZiAgICAgICAtPiA4ODkNCi0NCi1kZWNxNzYwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdlICAgICAgIC0+IDg5OA0KLWRlY3E3NjEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxN2UgICAgICAgLT4gODk4DQotZGVjcTc2MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3ZSAgICAgICAtPiA4OTgNCi1kZWNxNzYzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzdlICAgICAgIC0+IDg5OA0KLWRlY3E3NjQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN2YgICAgICAgLT4gODk5DQotZGVjcTc2NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3ZiAgICAgICAtPiA4OTkNCi1kZWNxNzY2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjdmICAgICAgIC0+IDg5OQ0KLWRlY3E3NjcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN2YgICAgICAgLT4gODk5DQotDQotZGVjcTc3MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlZSAgICAgICAtPiA5ODgNCi1kZWNxNzcxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWVlICAgICAgIC0+IDk4OA0KLWRlY3E3NzIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZWUgICAgICAgLT4gOTg4DQotZGVjcTc3MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNlZSAgICAgICAtPiA5ODgNCi1kZWNxNzc0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGVmICAgICAgIC0+IDk4OQ0KLWRlY3E3NzUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZWYgICAgICAgLT4gOTg5DQotZGVjcTc3NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJlZiAgICAgICAtPiA5ODkNCi1kZWNxNzc3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2VmICAgICAgIC0+IDk4OQ0KLQ0KLWRlY3E3ODAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmUgICAgICAgLT4gOTk4DQotZGVjcTc4MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFmZSAgICAgICAtPiA5OTgNCi1kZWNxNzgyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmZlICAgICAgIC0+IDk5OA0KLWRlY3E3ODMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZmUgICAgICAgLT4gOTk4DQotZGVjcTc4NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZiAgICAgICAtPiA5OTkNCi1kZWNxNzg1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWZmICAgICAgIC0+IDk5OQ0KLWRlY3E3ODYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZmYgICAgICAgLT4gOTk5DQotZGVjcTc4NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNmZiAgICAgICAtPiA5OTkNCi0NCi0tLSBNaXNjZWxsYW5lb3VzICh0ZXN0ZXJzJyBxdWVyaWVzLCBldGMuKQ0KLQ0KLWRlY3E3OTAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGMwMDAgICAgICAgLT4gMzAwMDANCi1kZWNxNzkxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ODAwICAgICAgIC0+IDg5MDAwMA0KLWRlY3E3OTIgYXBwbHkgICAzMDAwMCAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGMwMDANCi1kZWNxNzkzIGFwcGx5ICAgODkwMDAwIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgwMA0KLQ0KLS0tIHZhbHVlcyBhcm91bmQgW3VdaW50MzIgZWRnZXMgKHplcm9zIGRvbmUgZWFybGllcikNCi1kZWNxODAwIGFwcGx5IC0yMTQ3NDgzNjQ2ICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYNCi1kZWNxODAxIGFwcGx5IC0yMTQ3NDgzNjQ3ICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcNCi1kZWNxODAyIGFwcGx5IC0yMTQ3NDgzNjQ4ICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDgNCi1kZWNxODAzIGFwcGx5IC0yMTQ3NDgzNjQ5ICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkNCi1kZWNxODA0IGFwcGx5ICAyMTQ3NDgzNjQ2ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYNCi1kZWNxODA1IGFwcGx5ICAyMTQ3NDgzNjQ3ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcNCi1kZWNxODA2IGFwcGx5ICAyMTQ3NDgzNjQ4ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDgNCi1kZWNxODA3IGFwcGx5ICAyMTQ3NDgzNjQ5ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkNCi1kZWNxODA4IGFwcGx5ICA0Mjk0OTY3Mjk0ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1NWENCi1kZWNxODA5IGFwcGx5ICA0Mjk0OTY3Mjk1ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1NWINCi1kZWNxODEwIGFwcGx5ICA0Mjk0OTY3Mjk2ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2ENCi1kZWNxODExIGFwcGx5ICA0Mjk0OTY3Mjk3ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2INCi0NCi1kZWNxODIwIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYgLT4gLTIxNDc0ODM2NDYNCi1kZWNxODIxIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcgLT4gLTIxNDc0ODM2NDcNCi1kZWNxODIyIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDggLT4gLTIxNDc0ODM2NDgNCi1kZWNxODIzIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkgLT4gLTIxNDc0ODM2NDkNCi1kZWNxODI0IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYgLT4gIDIxNDc0ODM2NDYNCi1kZWNxODI1IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcgLT4gIDIxNDc0ODM2NDcNCi1kZWNxODI2IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDggLT4gIDIxNDc0ODM2NDgNCi1kZWNxODI3IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkgLT4gIDIxNDc0ODM2NDkNCi1kZWNxODI4IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1NWEgLT4gIDQyOTQ5NjcyOTQNCi1kZWNxODI5IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1NWIgLT4gIDQyOTQ5NjcyOTUNCi1kZWNxODMwIGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2EgLT4gIDQyOTQ5NjcyOTYNCi1kZWNxODMxIGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2IgLT4gIDQyOTQ5NjcyOTcNCi0NCi0tLSBWRyB0ZXN0Y2FzZQ0KLWRlY3E4NDAgYXBwbHkgICAgIzIwODAwMDAwMDAwMDAwMDBGMjk0MDAwMDAwMTcyNjM2IC0+IDguODExMjUwMDAwMDAwMDEzNDk0MzZFLTE1NDgNCi1kZWNxODQxIGFwcGx5ICAgICMyMDgwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMCAtPiA4LjAwMDAwMDAwMDAwMDAwMDAwMEUtMTU1MA0KLWRlY3E4NDIgYXBwbHkgICAgIzFFRjk4NDkwMDAwMDAwMDEwRjZFNEUwMDAwMDAwMDAwIC0+IDcuMDQ5MDAwMDAwMDAwMDEwNzk1NDg4MDAwMDAwMDAwMDAwRS0zMDk3DQotZGVjcTg0MyBtdWx0aXBseSAjMjA4MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAgIzIwODAwMDAwMDAwMDAwMDBGMjk0MDAwMDAwMTcyNjM2IC0+ICMxRUY5ODQ5MDAwMDAwMDAxMEY2RTRFMDAwMDAwMDAwMCBSb3VuZGVkDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUVuY29kZS5kZWNUZXN0IC0tIGRlY2ltYWwgc2l4dGVlbi1ieXRlIGZvcm1hdCB0ZXN0Y2FzZXMgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAwLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBbUHJldmlvdXNseSBjYWxsZWQgZGVjaW1hbDEyOC5kZWNUZXN0XQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgdGhlIHNpeHRlZW4tYnl0ZSBjb25jcmV0ZSByZXByZXNlbnRhdGlvbi4KKy0tIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlOgorLS0KKy0tICAgMSBiaXQgIHNpZ24KKy0tICAgNSBiaXRzIGNvbWJpbmF0aW9uIGZpZWxkCistLSAgMTIgYml0cyBleHBvbmVudCBjb250aW51YXRpb24KKy0tIDExMCBiaXRzIGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbgorLS0KKy0tIFRvdGFsIGV4cG9uZW50IGxlbmd0aCAxNCBiaXRzCistLSBUb3RhbCBjb2VmZmljaWVudCBsZW5ndGggMTE0IGJpdHMgKDM0IGRpZ2l0cykKKy0tCistLSBFbGltaXQgPSAxMjI4NyAobWF4aW11bSBlbmNvZGVkIGV4cG9uZW50KQorLS0gRW1heCAgID0gIDYxNDQgKGxhcmdlc3QgZXhwb25lbnQgdmFsdWUpCistLSBFbWluICAgPSAtNjE0MyAoc21hbGxlc3QgZXhwb25lbnQgdmFsdWUpCistLSBiaWFzICAgPSAgNjE3NiAoc3VidHJhY3RlZCBmcm9tIGVuY29kZWQgZXhwb25lbnQpID0gLUV0aW55CisKKy0tIFRoZSB0ZXN0Y2FzZXMgaGVyZSBoYXZlIG9ubHkgZXhhY3RseSByZXByZXNlbnRhYmxlIGRhdGEgb24gdGhlCistLSAnbGVmdC1oYW5kLXNpZGUnOyByb3VuZGluZyBmcm9tIHN0cmluZ3MgaXMgdGVzdGVkIGluICdiYXNlJworLS0gdGVzdGNhc2UgZ3JvdXBzLgorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKKworLS0gR2VuZXJhbCB0ZXN0Y2FzZXMKKy0tIChtb3N0bHkgZGVyaXZlZCBmcm9tIHRoZSBTdHJhd21hbiA0IGRvY3VtZW50IGFuZCBleGFtcGxlcykKK2RlY3EwMDEgYXBwbHkgICAjQTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTcuNTAKK2RlY3EwMDIgYXBwbHkgICAtNy41MCAgICAgICAgICAgICAtPiAjQTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKKy0tIGRlcml2YXRpdmUgY2Fub25pY2FsIHBsYWluIHN0cmluZ3MKK2RlY3EwMDMgYXBwbHkgICAjQTIwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTcuNTBFKzMKK2RlY3EwMDQgYXBwbHkgICAtNy41MEUrMyAgICAgICAgICAtPiAjQTIwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMDUgYXBwbHkgICAjQTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTc1MAorZGVjcTAwNiBhcHBseSAgIC03NTAgICAgICAgICAgICAgIC0+ICNBMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMAorZGVjcTAwNyBhcHBseSAgICNBMjA3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtNzUuMAorZGVjcTAwOCBhcHBseSAgIC03NS4wICAgICAgICAgICAgIC0+ICNBMjA3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMAorZGVjcTAwOSBhcHBseSAgICNBMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtMC43NTAKK2RlY3EwMTAgYXBwbHkgICAtMC43NTAgICAgICAgICAgICAtPiAjQTIwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMTEgYXBwbHkgICAjQTIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuMDc1MAorZGVjcTAxMiBhcHBseSAgIC0wLjA3NTAgICAgICAgICAgIC0+ICNBMjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMAorZGVjcTAxMyBhcHBseSAgICNBMjA2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtMC4wMDA3NTAKK2RlY3EwMTQgYXBwbHkgICAtMC4wMDA3NTAgICAgICAgICAtPiAjQTIwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMTUgYXBwbHkgICAjQTIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuMDAwMDA3NTAKK2RlY3EwMTYgYXBwbHkgICAtMC4wMDAwMDc1MCAgICAgICAtPiAjQTIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMTcgYXBwbHkgICAjQTIwNWMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTcuNTBFLTcKK2RlY3EwMTggYXBwbHkgICAtNy41MEUtNyAgICAgICAgICAtPiAjQTIwNWMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKKworLS0gTm9ybWFsaXR5CitkZWNxMDIwIGFwcGx5ICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0+ICMyNjA4MTM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNAorZGVjcTAyMSBhcHBseSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtPiAjYTYwODEzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQKK2RlY3EwMjIgYXBwbHkgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAgLT4gIzI2MDgwOTEyNDQ5MTI0NDkxMjQ0OTEyNDQ5MTI0NDkxCisKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY3EwMzEgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkZWNxMDMyIGFwcGx5ICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkZWNxMDMzIGFwcGx5ICAgMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQgLT4gIzQ3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0CitkZWNxMDM0IGFwcGx5ICAgIzQ3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0IC0+IDEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0CistLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQorZGVjcTAzNSBhcHBseSAgIDEuMjNFKzYxNDQgICAgLT4gIzQ3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3EwMzYgYXBwbHkgICAjNDdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4yMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQKK2RlY3EwMzcgYXBwbHkgICAxRSs2MTQ0ICAgICAgIC0+ICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxMDM4IGFwcGx5ICAgIzQ3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0CisKK2RlY3EwNTEgYXBwbHkgICAxMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUKK2RlY3EwNTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUgICAgICAgLT4gMTIzNDUKK2RlY3EwNTMgYXBwbHkgICAxMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MzQKK2RlY3EwNTQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MzQgICAgICAgLT4gMTIzNAorZGVjcTA1NSBhcHBseSAgIDEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMworZGVjcTA1NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAxMjMKK2RlY3EwNTcgYXBwbHkgICAxMiAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKK2RlY3EwNTggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgICAgICAgLT4gMTIKK2RlY3EwNTkgYXBwbHkgICAxICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RlY3EwNjAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMQorZGVjcTA2MSBhcHBseSAgIDEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMworZGVjcTA2MiBhcHBseSAgICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAxLjIzCitkZWNxMDYzIGFwcGx5ICAgMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1CitkZWNxMDY0IGFwcGx5ICAgIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMy40NQorCistLSBObWluIGFuZCBiZWxvdworZGVjcTA3MSBhcHBseSAgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjMDAwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RlY3EwNzIgYXBwbHkgICAjMDAwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gMUUtNjE0MworZGVjcTA3MyBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3EwNzQgYXBwbHkgICAjMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RlY3EwNzUgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMDc2IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCisKK2RlY3EwNzcgYXBwbHkgICAwLjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgU3Vibm9ybWFsCitkZWNxMDc4IGFwcGx5ICAgIzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgIFN1Ym5vcm1hbAorZGVjcTA3OSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwRS02MTQzICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICBTdWJub3JtYWwKK2RlY3EwODAgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgICAgLT4gMS4wRS02MTc1ICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY3EwODEgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAgLT4gIzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsCitkZWNxMDgyIGFwcGx5ICAgIzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDFFLTYxNzUgICAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNxMDgzIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAorZGVjcTA4NCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxRS02MTc2ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKKworLS0gdW5kZXJmbG93cyBjYW5ub3QgYmUgdGVzdGVkIGZvciBzaW1wbGUgY29waWVzLCBjaGVjayBlZGdlIGNhc2VzCitkZWNxMDkwIGFwcGx5ICAgMWUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsCitkZWNxMTAwIGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZS02MTc2IC0+ICMwMDAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgU3Vibm9ybWFsCisKKy0tIHNhbWUgYWdhaW4sIG5lZ2F0aXZlcworLS0gTm1heCBhbmQgc2ltaWxhcgorZGVjcTEyMiBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RlY3ExMjMgYXBwbHkgICAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkZWNxMTI0IGFwcGx5ICAtMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQgLT4gI2M3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0CitkZWNxMTI1IGFwcGx5ICAgI2M3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0IC0+IC0xLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNEUrNjE0NAorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2RlY3ExMzAgYXBwbHkgIC0xLjIzRSs2MTQ0ICAgIC0+ICNjN2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxMTMxIGFwcGx5ICAgI2M3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorZGVjcTEzMiBhcHBseSAgLTFFKzYxNDQgICAgICAgLT4gI2M3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3ExMzMgYXBwbHkgICAjYzdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0CisKK2RlY3ExNTEgYXBwbHkgIC0xMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUKK2RlY3ExNTIgYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUgICAgICAgLT4gLTEyMzQ1CitkZWNxMTUzIGFwcGx5ICAtMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0CitkZWNxMTU0IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0ICAgICAgIC0+IC0xMjM0CitkZWNxMTU1IGFwcGx5ICAtMTIzICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzCitkZWNxMTU2IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzICAgICAgIC0+IC0xMjMKK2RlY3ExNTcgYXBwbHkgIC0xMiAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKK2RlY3ExNTggYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgICAgICAgLT4gLTEyCitkZWNxMTU5IGFwcGx5ICAtMSAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMTYwIGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IC0xCitkZWNxMTYxIGFwcGx5ICAtMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzCitkZWNxMTYyIGFwcGx5ICAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzICAgICAgIC0+IC0xLjIzCitkZWNxMTYzIGFwcGx5ICAtMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1CitkZWNxMTY0IGFwcGx5ICAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjMuNDUKKworLS0gTm1pbiBhbmQgYmVsb3cKK2RlY3ExNzEgYXBwbHkgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzgwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMTcyIGFwcGx5ICAgIzgwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xRS02MTQzCitkZWNxMTczIGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTE3NCBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RlY3ExNzUgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMTc2IGFwcGx5ICAgIzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworCitkZWNxMTc3IGFwcGx5ICAtMC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICM4MDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIFN1Ym5vcm1hbAorZGVjcTE3OCBhcHBseSAgICM4MDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCAgU3Vibm9ybWFsCitkZWNxMTc5IGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTBFLTYxNDMgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgIFN1Ym5vcm1hbAorZGVjcTE4MCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAgICAtPiAtMS4wRS02MTc1ICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY3ExODEgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAgLT4gIzgwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsCitkZWNxMTgyIGFwcGx5ICAgIzgwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xRS02MTc1ICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZGVjcTE4MyBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwKK2RlY3ExODQgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorCistLSB1bmRlcmZsb3cgZWRnZSBjYXNlcworZGVjcTE5MCBhcHBseSAgIC0xZS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwKK2RlY3EyMDAgYXBwbHkgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZS02MTc2IC0+ICM4MDAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgU3Vibm9ybWFsCisKKy0tIHplcm9zCitkZWNxNDAwIGFwcGx5ICAgMEUtODAwMCAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDAxIGFwcGx5ICAgMEUtNjE3NyAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDAyIGFwcGx5ICAgMEUtNjE3NiAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDAzIGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTYxNzYKK2RlY3E0MDQgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDA1IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTYxNzYKK2RlY3E0MDYgYXBwbHkgICAwRS0yICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MDcgYXBwbHkgICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMC4wMAorZGVjcTQwOCBhcHBseSAgIDAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTQwOSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwCitkZWNxNDEwIGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDExIGFwcGx5ICAgIzIyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzMKK2RlY3E0MTIgYXBwbHkgICAwRSs2MTExICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MTMgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQorLS0gY2xhbXBlZCB6ZXJvcy4uLgorZGVjcTQxNCBhcHBseSAgIDBFKzYxMTIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQxNSBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSs2MTExCitkZWNxNDE2IGFwcGx5ICAgMEUrNjE0NCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDE3IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTEKK2RlY3E0MTggYXBwbHkgICAwRSs4MDAwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MTkgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQorCistLSBuZWdhdGl2ZSB6ZXJvcworZGVjcTQyMCBhcHBseSAgLTBFLTgwMDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQyMSBhcHBseSAgLTBFLTYxNzcgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQyMiBhcHBseSAgLTBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTQyMyBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUtNjE3NgorZGVjcTQyNCBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MjUgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTYxNzYKK2RlY3E0MjYgYXBwbHkgIC0wRS0yICAgICAgICAgICAgICAgICAgICAtPiAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MjcgYXBwbHkgICAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTAuMDAKK2RlY3E0MjggYXBwbHkgIC0wICAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MjkgYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTAKK2RlY3E0MzAgYXBwbHkgIC0wRSszICAgICAgICAgICAgICAgICAgICAtPiAjYTIwOGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MzEgYXBwbHkgICAjYTIwOGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzMKK2RlY3E0MzIgYXBwbHkgIC0wRSs2MTExICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MzMgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTEKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY3E0MzQgYXBwbHkgIC0wRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MzUgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTEKK2RlY3E0MzYgYXBwbHkgIC0wRSs2MTQ0ICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MzcgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTEKK2RlY3E0MzggYXBwbHkgIC0wRSs4MDAwICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MzkgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTEKKworLS0gZXhwb25lbnQgbGVuZ3RocworZGVjcTQ0MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3CitkZWNxNDQxIGFwcGx5ICAgNyAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RlY3E0NDIgYXBwbHkgICAjMjIwYTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gN0UrOQorZGVjcTQ0MyBhcHBseSAgIDdFKzkgLT4gIzIyMGE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkZWNxNDQ0IGFwcGx5ICAgIzIyMjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzk5CitkZWNxNDQ1IGFwcGx5ICAgN0UrOTkgLT4gIzIyMjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkZWNxNDQ2IGFwcGx5ICAgIzIzMDFjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzk5OQorZGVjcTQ0NyBhcHBseSAgIDdFKzk5OSAtPiAjMjMwMWMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RlY3E0NDggYXBwbHkgICAjNDNlM2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gN0UrNTk5OQorZGVjcTQ0OSBhcHBseSAgIDdFKzU5OTkgLT4gIzQzZTNjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CisKKy0tIFNwZWNpYWxzCitkZWNxNTAwIGFwcGx5ICAgSW5maW5pdHkgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUwMSBhcHBseSAgICM3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3OCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MDIgYXBwbHkgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKK2RlY3E1MDMgYXBwbHkgICAjNzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5NzkgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTA0IGFwcGx5ICAgIzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CitkZWNxNTA1IGFwcGx5ICAgIzdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUwNiBhcHBseSAgICM3YTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQorZGVjcTUwNyBhcHBseSAgICM3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YiAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MDggYXBwbHkgICAjN2IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKKworZGVjcTUwOSBhcHBseSAgIE5hTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MTAgYXBwbHkgICAjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2MgLT4gIzdjMDAzYzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjCitkZWNxNTExIGFwcGx5ICAgIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IE5hTgorZGVjcTUxMiBhcHBseSAgICM3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZCAtPiAjN2MwMDNkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QKK2RlY3E1MTMgYXBwbHkgICAjN2QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gTmFOCitkZWNxNTE0IGFwcGx5ICAgIzdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlIC0+ICM3ZTAwM2U3ZTdjN2U3ZTdlN2U3YzdlN2U3ZTdlN2M3ZQorZGVjcTUxNSBhcHBseSAgICM3ZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBzTmFOCitkZWNxNTE2IGFwcGx5ICAgIzdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmIC0+ICM3ZTAwM2Y3ZjdjN2Y3ZjdmN2Y3YzdmN2Y3ZjdmN2M3ZgorZGVjcTUxNyBhcHBseSAgICM3ZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBzTmFOCitkZWNxNTE4IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIC0+IHNOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RlY3E1MTkgYXBwbHkgICAjN2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCisKK2RlY3E1MjAgYXBwbHkgICAtSW5maW5pdHkgICAgICAgICAgICAgICAgICAgICAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTIxIGFwcGx5ICAgI2Y4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4IC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUyMiBhcHBseSAgICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY3E1MjMgYXBwbHkgICAjZjk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5NzkgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTI0IGFwcGx5ICAgI2Y5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQorZGVjcTUyNSBhcHBseSAgICNmYTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YSAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MjYgYXBwbHkgICAjZmEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CitkZWNxNTI3IGFwcGx5ICAgI2ZiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUyOCBhcHBseSAgICNmYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKKworZGVjcTUyOSBhcHBseSAgIC1OYU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MzAgYXBwbHkgICAjZmM3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2MgLT4gI2ZjMDAzYzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjCitkZWNxNTMxIGFwcGx5ICAgI2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1OYU4KK2RlY3E1MzIgYXBwbHkgICAjZmQ3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gI2ZjMDAzZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkCitkZWNxNTMzIGFwcGx5ICAgI2ZkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1OYU4KK2RlY3E1MzQgYXBwbHkgICAjZmU3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2UgLT4gI2ZlMDAzZTdlN2M3ZTdlN2U3ZTdjN2U3ZTdlN2U3YzdlCitkZWNxNTM1IGFwcGx5ICAgI2ZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1zTmFOCitkZWNxNTM2IGFwcGx5ICAgI2ZmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmIC0+ICNmZTAwM2Y3ZjdjN2Y3ZjdmN2Y3YzdmN2Y3ZjdmN2M3ZgorZGVjcTUzNyBhcHBseSAgICNmZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtc05hTgorZGVjcTUzOCBhcHBseSAgICNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiAtc05hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZGVjcTUzOSBhcHBseSAgICNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiAjZmUwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKworZGVjcTU0MCBhcHBseSAgIE5hTiAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTU0MSBhcHBseSAgIE5hTjAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTU0MiBhcHBseSAgIE5hTjEgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTU0MyBhcHBseSAgIE5hTjEyICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorZGVjcTU0NCBhcHBseSAgIE5hTjc5ICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorZGVjcTU0NSBhcHBseSAgIE5hTjEyMzQ1ICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQorZGVjcTU0NiBhcHBseSAgIE5hTjEyMzQ1NiAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOGU1NgorZGVjcTU0NyBhcHBseSAgIE5hTjc5OTc5OSAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmN2ZkZgorZGVjcTU0OCBhcHBseSAgIE5hTjc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OSAgLT4gIzdjMDAzZGZmN2ZkZmY3ZmRmZjdmZGZmN2ZkZmY3ZmRmCitkZWNxNTQ5IGFwcGx5ICAgTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RlY3E1NTAgYXBwbHkgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorCistLSBmb2xkLWRvd24gZnVsbCBzZXF1ZW5jZQorZGVjcTYwMSBhcHBseSAgIDFFKzYxNDQgICAgICAgICAgICAgICAgIC0+ICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjAyIGFwcGx5ICAgIzQ3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0CitkZWNxNjAzIGFwcGx5ICAgMUUrNjE0MyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MDQgYXBwbHkgICAjNDNmZmM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MworZGVjcTYwNSBhcHBseSAgIDFFKzYxNDIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjA2IGFwcGx5ICAgIzQzZmZjMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MgorZGVjcTYwNyBhcHBseSAgIDFFKzYxNDEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjA4IGFwcGx5ICAgIzQzZmZjMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxCitkZWNxNjA5IGFwcGx5ICAgMUUrNjE0MCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MTAgYXBwbHkgICAjNDNmZmMwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MAorZGVjcTYxMSBhcHBseSAgIDFFKzYxMzkgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjEyIGFwcGx5ICAgIzQzZmZjMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOQorZGVjcTYxMyBhcHBseSAgIDFFKzYxMzggICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjE0IGFwcGx5ICAgIzQzZmZjMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM4CitkZWNxNjE1IGFwcGx5ICAgMUUrNjEzNyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MTYgYXBwbHkgICAjNDNmZmMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNworZGVjcTYxNyBhcHBseSAgIDFFKzYxMzYgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjE4IGFwcGx5ICAgIzQzZmZjMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNgorZGVjcTYxOSBhcHBseSAgIDFFKzYxMzUgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjIwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM1CitkZWNxNjIxIGFwcGx5ICAgMUUrNjEzNCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MjIgYXBwbHkgICAjNDNmZmMwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNAorZGVjcTYyMyBhcHBseSAgIDFFKzYxMzMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjI0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMworZGVjcTYyNSBhcHBseSAgIDFFKzYxMzIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjI2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTMyCitkZWNxNjI3IGFwcGx5ICAgMUUrNjEzMSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MjggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMQorZGVjcTYyOSBhcHBseSAgIDFFKzYxMzAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjMwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMAorZGVjcTYzMSBhcHBseSAgIDFFKzYxMjkgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjMyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTI5CitkZWNxNjMzIGFwcGx5ICAgMUUrNjEyOCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MzQgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMEUrNjEyOAorZGVjcTYzNSBhcHBseSAgIDFFKzYxMjcgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjM2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMEUrNjEyNworZGVjcTYzNyBhcHBseSAgIDFFKzYxMjYgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjM4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSs2MTI2CitkZWNxNjM5IGFwcGx5ICAgMUUrNjEyNSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2NDAgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMEUrNjEyNQorZGVjcTY0MSBhcHBseSAgIDFFKzYxMjQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjQyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMEUrNjEyNAorZGVjcTY0MyBhcHBseSAgIDFFKzYxMjMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjQ0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwRSs2MTIzCitkZWNxNjQ1IGFwcGx5ICAgMUUrNjEyMiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2NDYgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMEUrNjEyMgorZGVjcTY0NyBhcHBseSAgIDFFKzYxMjEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjQ4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMEUrNjEyMQorZGVjcTY0OSBhcHBseSAgIDFFKzYxMjAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMCBDbGFtcGVkCitkZWNxNjUwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwRSs2MTIwCitkZWNxNjUxIGFwcGx5ICAgMUUrNjExOSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwIENsYW1wZWQKK2RlY3E2NTIgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMEUrNjExOQorZGVjcTY1MyBhcHBseSAgIDFFKzYxMTggICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMCBDbGFtcGVkCitkZWNxNjU0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMEUrNjExOAorZGVjcTY1NSBhcHBseSAgIDFFKzYxMTcgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMCBDbGFtcGVkCitkZWNxNjU2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwICAgICAgIC0+IDEuMDAwMDAwRSs2MTE3CitkZWNxNjU3IGFwcGx5ICAgMUUrNjExNiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwIENsYW1wZWQKK2RlY3E2NTggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAgICAgICAgLT4gMS4wMDAwMEUrNjExNgorZGVjcTY1OSBhcHBseSAgIDFFKzYxMTUgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMCBDbGFtcGVkCitkZWNxNjYwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwICAgICAgIC0+IDEuMDAwMEUrNjExNQorZGVjcTY2MSBhcHBseSAgIDFFKzYxMTQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMCBDbGFtcGVkCitkZWNxNjYyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwICAgICAgIC0+IDEuMDAwRSs2MTE0CitkZWNxNjYzIGFwcGx5ICAgMUUrNjExMyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwIENsYW1wZWQKK2RlY3E2NjQgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAgICAgICAgLT4gMS4wMEUrNjExMworZGVjcTY2NSBhcHBseSAgIDFFKzYxMTIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCBDbGFtcGVkCitkZWNxNjY2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IDEuMEUrNjExMgorZGVjcTY2NyBhcHBseSAgIDFFKzYxMTEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTY2OCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSs2MTExCitkZWNxNjY5IGFwcGx5ICAgMUUrNjExMCAgICAgICAgICAgICAgICAgLT4gIzQzZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxNjcwIGFwcGx5ICAgIzQzZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFKzYxMTAKKworLS0gU2VsZWN0ZWQgRFBEIGNvZGVzCitkZWNxNzAwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDAKK2RlY3E3MDEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAgICAgLT4gOQorZGVjcTcwMiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAxMAorZGVjcTcwMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOSAgICAgICAtPiAxOQorZGVjcTcwNCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMCAgICAgICAtPiAyMAorZGVjcTcwNSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOSAgICAgICAtPiAyOQorZGVjcTcwNiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMCAgICAgICAtPiAzMAorZGVjcTcwNyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOSAgICAgICAtPiAzOQorZGVjcTcwOCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCAgICAgICAtPiA0MAorZGVjcTcwOSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OSAgICAgICAtPiA0OQorZGVjcTcxMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MCAgICAgICAtPiA1MAorZGVjcTcxMSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OSAgICAgICAtPiA1OQorZGVjcTcxMiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MCAgICAgICAtPiA2MAorZGVjcTcxMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OSAgICAgICAtPiA2OQorZGVjcTcxNCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MCAgICAgICAtPiA3MAorZGVjcTcxNSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MSAgICAgICAtPiA3MQorZGVjcTcxNiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MiAgICAgICAtPiA3MgorZGVjcTcxNyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MyAgICAgICAtPiA3MworZGVjcTcxOCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NCAgICAgICAtPiA3NAorZGVjcTcxOSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NSAgICAgICAtPiA3NQorZGVjcTcyMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NiAgICAgICAtPiA3NgorZGVjcTcyMSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NyAgICAgICAtPiA3NworZGVjcTcyMiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OCAgICAgICAtPiA3OAorZGVjcTcyMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OSAgICAgICAtPiA3OQorCitkZWNxNzMwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjllICAgICAgIC0+IDk5NAorZGVjcTczMSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5ZiAgICAgICAtPiA5OTUKK2RlY3E3MzIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYTAgICAgICAgLT4gNTIwCitkZWNxNzMzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmExICAgICAgIC0+IDUyMQorCistLSBEUEQ6IG9uZSBvZiBlYWNoIG9mIHRoZSBodWZmbWFuIGdyb3VwcworZGVjcTc0MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNmNyAgICAgICAtPiA3NzcKK2RlY3E3NDEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZjggICAgICAgLT4gNzc4CitkZWNxNzQyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2ViICAgICAgIC0+IDc4NworZGVjcTc0MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3ZCAgICAgICAtPiA4NzcKK2RlY3E3NDQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOWYgICAgICAgLT4gOTk3CitkZWNxNzQ1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2JmICAgICAgIC0+IDk3OQorZGVjcTc0NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNkZiAgICAgICAtPiA3OTkKK2RlY3E3NDcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4CisKKworLS0gRFBEIGFsbC1oaWdocyBjYXNlcyAoaW5jbHVkZXMgdGhlIDI0IHJlZHVuZGFudCBjb2RlcykKK2RlY3E3NTAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4CitkZWNxNzUxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTZlICAgICAgIC0+IDg4OAorZGVjcTc1MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2ZSAgICAgICAtPiA4ODgKK2RlY3E3NTMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNmUgICAgICAgLT4gODg4CitkZWNxNzU0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZmICAgICAgIC0+IDg4OQorZGVjcTc1NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2ZiAgICAgICAtPiA4ODkKK2RlY3E3NTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNmYgICAgICAgLT4gODg5CitkZWNxNzU3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzZmICAgICAgIC0+IDg4OQorCitkZWNxNzYwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdlICAgICAgIC0+IDg5OAorZGVjcTc2MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3ZSAgICAgICAtPiA4OTgKK2RlY3E3NjIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyN2UgICAgICAgLT4gODk4CitkZWNxNzYzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzdlICAgICAgIC0+IDg5OAorZGVjcTc2NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZiAgICAgICAtPiA4OTkKK2RlY3E3NjUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxN2YgICAgICAgLT4gODk5CitkZWNxNzY2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjdmICAgICAgIC0+IDg5OQorZGVjcTc2NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3ZiAgICAgICAtPiA4OTkKKworZGVjcTc3MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlZSAgICAgICAtPiA5ODgKK2RlY3E3NzEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZWUgICAgICAgLT4gOTg4CitkZWNxNzcyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmVlICAgICAgIC0+IDk4OAorZGVjcTc3MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNlZSAgICAgICAtPiA5ODgKK2RlY3E3NzQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZWYgICAgICAgLT4gOTg5CitkZWNxNzc1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWVmICAgICAgIC0+IDk4OQorZGVjcTc3NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJlZiAgICAgICAtPiA5ODkKK2RlY3E3NzcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZWYgICAgICAgLT4gOTg5CisKK2RlY3E3ODAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmUgICAgICAgLT4gOTk4CitkZWNxNzgxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWZlICAgICAgIC0+IDk5OAorZGVjcTc4MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJmZSAgICAgICAtPiA5OTgKK2RlY3E3ODMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZmUgICAgICAgLT4gOTk4CitkZWNxNzg0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmICAgICAgIC0+IDk5OQorZGVjcTc4NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFmZiAgICAgICAtPiA5OTkKK2RlY3E3ODYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZmYgICAgICAgLT4gOTk5CitkZWNxNzg3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2ZmICAgICAgIC0+IDk5OQorCistLSBNaXNjZWxsYW5lb3VzICh0ZXN0ZXJzJyBxdWVyaWVzLCBldGMuKQorCitkZWNxNzkwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBjMDAwICAgICAgIC0+IDMwMDAwCitkZWNxNzkxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ODAwICAgICAgIC0+IDg5MDAwMAorZGVjcTc5MiBhcHBseSAgIDMwMDAwIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzAwMAorZGVjcTc5MyBhcHBseSAgIDg5MDAwMCAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4MDAKKworLS0gdmFsdWVzIGFyb3VuZCBbdV1pbnQzMiBlZGdlcyAoemVyb3MgZG9uZSBlYXJsaWVyKQorZGVjcTgwMCBhcHBseSAtMjE0NzQ4MzY0NiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2CitkZWNxODAxIGFwcGx5IC0yMTQ3NDgzNjQ3ICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcKK2RlY3E4MDIgYXBwbHkgLTIxNDc0ODM2NDggIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OAorZGVjcTgwMyBhcHBseSAtMjE0NzQ4MzY0OSAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5CitkZWNxODA0IGFwcGx5ICAyMTQ3NDgzNjQ2ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYKK2RlY3E4MDUgYXBwbHkgIDIxNDc0ODM2NDcgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NworZGVjcTgwNiBhcHBseSAgMjE0NzQ4MzY0OCAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4CitkZWNxODA3IGFwcGx5ICAyMTQ3NDgzNjQ5ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkKK2RlY3E4MDggYXBwbHkgIDQyOTQ5NjcyOTQgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YQorZGVjcTgwOSBhcHBseSAgNDI5NDk2NzI5NSAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTViCitkZWNxODEwIGFwcGx5ICA0Mjk0OTY3Mjk2ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2EKK2RlY3E4MTEgYXBwbHkgIDQyOTQ5NjcyOTcgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3YgorCitkZWNxODIwIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYgLT4gLTIxNDc0ODM2NDYKK2RlY3E4MjEgYXBwbHkgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NyAtPiAtMjE0NzQ4MzY0NworZGVjcTgyMiBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4IC0+IC0yMTQ3NDgzNjQ4CitkZWNxODIzIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkgLT4gLTIxNDc0ODM2NDkKK2RlY3E4MjQgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NiAtPiAgMjE0NzQ4MzY0NgorZGVjcTgyNSBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ3IC0+ICAyMTQ3NDgzNjQ3CitkZWNxODI2IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDggLT4gIDIxNDc0ODM2NDgKK2RlY3E4MjcgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OSAtPiAgMjE0NzQ4MzY0OQorZGVjcTgyOCBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTVhIC0+ICA0Mjk0OTY3Mjk0CitkZWNxODI5IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1NWIgLT4gIDQyOTQ5NjcyOTUKK2RlY3E4MzAgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3YSAtPiAgNDI5NDk2NzI5NgorZGVjcTgzMSBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTdiIC0+ICA0Mjk0OTY3Mjk3CisKKy0tIFZHIHRlc3RjYXNlCitkZWNxODQwIGFwcGx5ICAgICMyMDgwMDAwMDAwMDAwMDAwRjI5NDAwMDAwMDE3MjYzNiAtPiA4LjgxMTI1MDAwMDAwMDAxMzQ5NDM2RS0xNTQ4CitkZWNxODQxIGFwcGx5ICAgICMyMDgwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMCAtPiA4LjAwMDAwMDAwMDAwMDAwMDAwMEUtMTU1MAorZGVjcTg0MiBhcHBseSAgICAjMUVGOTg0OTAwMDAwMDAwMTBGNkU0RTAwMDAwMDAwMDAgLT4gNy4wNDkwMDAwMDAwMDAwMTA3OTU0ODgwMDAwMDAwMDAwMDBFLTMwOTcKK2RlY3E4NDMgbXVsdGlwbHkgIzIwODAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwICMyMDgwMDAwMDAwMDAwMDAwRjI5NDAwMDAwMDE3MjYzNiAtPiAjMUVGOTg0OTAwMDAwMDAwMTBGNkU0RTAwMDAwMDAwMDAgUm91bmRlZAorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFGTUEuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUZNQS5kZWNUZXN0CmluZGV4IDIzNTNmMmYuLmQ4ODQ1NTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUZNQS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUZNQS5kZWNUZXN0CkBAIC0xLDE3ODYgKzEsMTc4NiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFGTUEuZGVjVGVzdCAtLSBkZWNRdWFkIEZ1c2VkIE11bHRpcGx5IEFkZCAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBUaGVzZSB0ZXN0cyBjb21wcmVzZSB0aHJlZSBwYXJ0czoNCi0tLSAgIDEuIFNhbml0eSBjaGVja3MgYW5kIG90aGVyIHRocmVlLW9wZXJhbmQgdGVzdHMgKGVzcGVjaWFsbHkgdGhvc2UNCi0tLSAgICAgIHdoZXJlIHRoZSBmdXNlZCBvcGVyYXRpb24gbWFrZXMgYSBkaWZmZXJlbmNlKQ0KLS0tICAgMi4gTXVsdGlwbHkgdGVzdHMgKHRoaXJkIG9wZXJhbmQgaXMgbmV1dHJhbCB6ZXJvIFswRStlbWF4XSkNCi0tLSAgIDMuIEFkZGl0aW9uIHRlc3RzIChmaXJzdCBvcGVyYW5kIGlzIDEpDQotLS0gVGhlIG11bHRpcGx5IGFuZCBhZGRpdGlvbiB0ZXN0cyBhcmUgZXh0ZW5zaXZlIGJlY2F1c2UgRk1BIG1heSBoYXZlDQotLS0gaXRzIG93biBkZWRpY2F0ZWQgbXVsdGlwbGljYXRpb24gb3IgYWRkaXRpb24gcm91dGluZShzKSwgYW5kIHRoZXkNCi0tLSBhbHNvIGluaGVyZW50bHkgY2hlY2sgdGhlIGxlZnQtdG8tcmlnaHQgcHJvcGVydGllcy4NCi0NCi0tLSBTYW5pdHkgY2hlY2tzDQotZHFmbWEwMDAxIGZtYSAgMSAgIDEgICAxIC0+ICAgMg0KLWRxZm1hMDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMNCi1kcWZtYTAwMDMgZm1hICAyICAgMiAgIDMgLT4gICA3DQotZHFmbWEwMDA0IGZtYSAgOSAgIDkgICA5IC0+ICA5MA0KLWRxZm1hMDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDANCi1kcWZtYTAwMDYgZm1hIC0xICAgMSAgIDIgLT4gICAxDQotZHFmbWEwMDA3IGZtYSAtMiAgIDIgICAzIC0+ICAtMQ0KLWRxZm1hMDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzINCi1kcWZtYTAwMTEgZm1hICAxICAtMSAgIDEgLT4gICAwDQotZHFmbWEwMDEyIGZtYSAgMSAgLTEgICAyIC0+ICAgMQ0KLWRxZm1hMDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTENCi1kcWZtYTAwMTQgZm1hICA5ICAtOSAgIDkgLT4gLTcyDQotZHFmbWEwMDE1IGZtYSAgMSAgIDEgIC0xIC0+ICAgMA0KLWRxZm1hMDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTENCi1kcWZtYTAwMTcgZm1hICAyICAgMiAgLTMgLT4gICAxDQotZHFmbWEwMDE4IGZtYSAgOSAgIDkgIC05IC0+ICA3Mg0KLQ0KLS0tIG5vbi1pbnRlZ2VyIGV4YWN0cw0KLWRxZm1hMDEwMCAgZm1hICAgIDI1LjIgICA2My42ICAgLTQzOCAgLT4gIDExNjQuNzINCi1kcWZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwDQotZHFmbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44Ng0KLWRxZm1hMDEwMyAgZm1hICAgIDQuMjIgIDAuMDc5ICAtOTQuNiAgLT4gIC05NC4yNjY2Mg0KLWRxZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgNCi1kcWZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzDQotZHFmbWEwMTA2ICBmbWEgICAgMjguMiAgICA3MjcgICA1LjQ1ICAtPiAgMjA1MDYuODUNCi1kcWZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4DQotZHFmbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzDQotZHFmbWEwMTA5ICBmbWEgICAwLjE2OSAgIC0zNDEgICA1LjYxICAtPiAgLTUyLjAxOQ0KLWRxZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjINCi1kcWZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMNCi1kcWZtYTAxMTIgIGZtYSAgICAgMzE3ICAgNzcuMCAgIDE5LjAgIC0+ICAyNDQyOC4wDQotZHFmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4DQotZHFmbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNA0KLWRxZm1hMDExNSAgZm1hICAgIDcyLjcgICAgMjc0ICAgMS41NiAgLT4gIDE5OTIxLjM2DQotZHFmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4DQotZHFmbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMg0KLWRxZm1hMDExOCAgZm1hICAgLTMuODcgICAzLjA2ICAgNzguMCAgLT4gIDY2LjE1NzgNCi1kcWZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0DQotZHFmbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTENCi0NCi0tLSBjYXNlcyB3aGVyZSByZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gc2VwYXJhdGUgbXVsdGlwbHkgKyBhZGQ7IGVhY2gNCi0tLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZA0KLS0tIFt0aGlzIGlzIGFib3V0IDIwJSBvZiBhbGwgc2ltaWxhciAgY2FzZXMgaW4gZ2VuZXJhbF0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA0LjUwMDExOTAwMjEwMDAwMDIwOTQ2OTcyOTM3NTY5ODc3OEUrMzgNCi1kcWZtYTAyMDIgIGZtYSAgICAgICA2ODUzNzk4NTg2MTM1NTg2NDQ1Ny41Njk0ICAgICAgNjU2NTg3NTc2Mjk3MjA4NjYwNS44NTk2OSAgICAgICAzNTg5MjYzNDQ0NzIzNjc1My4xNzI4MTIgIC0+ICA0LjUwMDExOTAwMjEwMDAwMDIwOTQ2OTcyOTM3NTY5ODc3OUUrMzggSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNS45OTYyNDg0Njk1ODQ1OTQzNDY4NTg4ODE2MjAxODU1MTRFKzQxDQotZHFmbWEwMjA4ICBmbWEgICAgICAgICAgODkyNjE4MjIzNDQ3Mjc2Mjg1NzEuOSAgICAgIDY3MTc1OTU4NDU2NTQxMzEzODMzMzYuODkgICAgICA1MDYxMDM2NDk3Mjg4Nzk2MDc2MjY2LjExICAtPiAgNS45OTYyNDg0Njk1ODQ1OTQzNDY4NTg4ODE2MjAxODU1MTNFKzQxIEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuODk5MjQyOTY4Njc4MjU2OTI0MDIxNTk0NzcwODc0MDcwRSszNA0KLWRxZm1hMDIxMCAgZm1hICAgICAgIDMyMDUwNjIzNzIzMjQ0ODY4NS40OTU5NzEgICAgICAgNTkyNTc1OTc3NjQwMTc5NjcuOTg0NDQ4ICAgICAgMzIwNTYxNTIzOTA3NzcxMTU4OTkxMi44NSAgLT4gIDEuODk5MjQyOTY4Njc4MjU2OTI0MDIxNTk0NzcwODc0MDcxRSszNCBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA3LjA3ODU5Njk3ODg0MjgwOTUzNzkyOTY5OTk1NDg2MDMwOUUrMzcNCi1kcWZtYTAyMTUgIGZtYSAgICAgICAgMjIwMjQ3ODQzMjU5MTEyMjYzLjE3OTk1ICAgICAgIDMyMTM5MjM0MDI4Nzk4Nzk3OTAwMi44MCAgICAgICAgNDc1MzMyNzk4MTk5OTcxNjc2NTU0NDAgIC0+ICA3LjA3ODU5Njk3ODg0MjgwOTUzNzkyOTY5OTk1NDg2MDMwOEUrMzcgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS4yMjQ5NTU2Njc1ODE0Mjc1NTk3NTQxMDY4NjIzNTA3NDNFKzM3DQotZHFmbWEwMjI2ICBmbWEgICAgICAgMjM4ODA3Mjk3OTAzNjg4ODA0MTIuMTQ0OSAgICAgICA1MTI5NDczMzM4MjcwNjQ3MTkuNTU0MDcgICAgICAyMTcxMTc0Mzg0MTk1OTA4MjQ1MDIuOTYzICAtPiAgMS4yMjQ5NTU2Njc1ODE0Mjc1NTk3NTQxMDY4NjIzNTA3NDRFKzM3IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0yLjUzMDA5NDA0MzI1MzE0ODgwNjI3MjI3NjM2ODU3OTE0NEUrNDINCi1kcWZtYTAyMjkgIGZtYSAgICAgICAgMjUzOTg5MjM1NzAxNjA5OTcwNi40MTI2ICAgICAgLTk5NjE0MjIzMjY2NzUwNDgxNzcxNzQzNSAgICAgICA1MzY4MjA4MjU5ODMxNTk0OTQyNS45MzcgIC0+ICAtMi41MzAwOTQwNDMyNTMxNDg4MDYyNzIyNzYzNjg1NzkxNDNFKzQyIEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuNzEzMzg3MDg1NzU5NzExOTU0MzE5MzkxNDEyNzg4NDU0RSszNw0KLWRxZm1hMDIzMyAgZm1hICAgICAgICA0NTQ2MzM5NDkxMzQxNjI0NDY0LjA4MDQgICAgICAgICAgICAzNzY4NzE3ODY0MTY5MjA1NTgxICAgICAgIDgzNTc4OTgwMjc4NjkwMzk1MTg0LjYyMCAgLT4gIDEuNzEzMzg3MDg1NzU5NzExOTU0MzE5MzkxNDEyNzg4NDUzRSszNyBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA0LjA2MjI3NTY2MzQwNTgyMzcxNjQxMTU3OTExNzc3MTU0N0UrMzUNCi1kcWZtYTAyMzUgIGZtYSAgICAgICAgNDA5MjQyMTE5NDMzODE2MTMxLjQyMjUzICAgICAgOTkyNjMzODE1MTY2NzQxNTAxLjQ3NzI0OSAgICAgICAgNzAxNzk2MzY1NDQ0MTY3NTYxMjk1NDYgIC0+ICA0LjA2MjI3NTY2MzQwNTgyMzcxNjQxMTU3OTExNzc3MTU0OEUrMzUgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNi4wMDI2MDQzMjc3MzI1Njg0OTA1NjIyNDk4NzUzMDY4MjNFKzQ3DQotZHFmbWEwMjU4ICBmbWEgICAgICAgIDgxNzk0MTMzNjU5MzU0MTc0MjE1OTY4NCAgICAgICA3MzM4NjczMzk3NjkzMTA3MjkyNjY1OTggICAgICA3ODU2Mzg0NDY1MDk0MjQxOTMxMTgzMC44ICAtPiAgNi4wMDI2MDQzMjc3MzI1Njg0OTA1NjIyNDk4NzUzMDY4MjJFKzQ3IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0yLjAyNzAyMjUxNDM4MTQ1MjE5NzUxMDEwMzM5NTI4Mzg3NEUrMzkNCi1kcWZtYTAyNjQgIGZtYSAgICAgICAzODc2MTczMTAxNjkxNjEyNzAuNzM3NTMyICAgICAtNTIyOTQ0MjcwMzQxNDk1NjA2MTIxNi42MiAgICAgIDU3NjY1NjY2ODE2NjUyOTY3MTUwNDczLjUgIC0+ICAtMi4wMjcwMjI1MTQzODE0NTIxOTc1MTAxMDMzOTUyODM4NzNFKzM5IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC03Ljg1NjUyNTAzOTgwMzU1NDAwMTE0NDA4OTg0MjczMDM2MUUrMzcNCi1kcWZtYTAyNjcgIGZtYSAgICAgIC04NDc2NTU4NDU3MjA1NjUyNzQ3MDEuMjEwICAgICAgICA5MjY4NTMxNjU2NDExNzczOS44Mzk4NCAgICAgIDIyNzgwOTUwMDQxMzc2NDI0NDI5LjU2ODYgIC0+ICAtNy44NTY1MjUwMzk4MDM1NTQwMDExNDQwODk4NDI3MzAzNjBFKzM3IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuNjk1NTE1NTYyMDExNTIwNzQ2MTI1NjA3NTAyMjM3NTU5RSszOA0KLWRxZm1hMDI2OCAgZm1hICAgICAgICAgIDIxNTkwMjkwMzY1MTI3Njg1LjM2NzUgICAgICAgNzg1MzEzOTIyNzU3NjU0MTM3OTQyNi44ICAgICAgIC0zMjc1ODU5NDM3MjM2MTgwLjc2MTU0NCAgLT4gIDEuNjk1NTE1NTYyMDExNTIwNzQ2MTI1NjA3NTAyMjM3NTU4RSszOCBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtOC40NDg0MjI5MzU3ODMyODkyMTk3NDgxMTUwMzgwMTQ3MTBFKzM4DQotZHFmbWEwMjY5ICBmbWEgICAgICAtOTc0MzIwNjM2MjcyODYyNjk3Ljk3MTU4NiAgICAgIDg2NzEwOTEwMzY0MTg2MDI0NzQ0MC43NTYgICAgICAgIC05Nzc1MTcwNzc1OTAyNDU0NzYyLjk4ICAtPiAgLTguNDQ4NDIyOTM1NzgzMjg5MjE5NzQ4MTE1MDM4MDE0NzA5RSszOCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBDYXNlcyB3aGVyZSBtdWx0aXBseSB3b3VsZCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaWYgc2VwYXJhdGUNCi1kcWZtYTAzMDAgIGZtYSAgIDllKzYxNDQgICAgMTAgICAwICAgICAgICAgLT4gSW5maW5pdHkgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMDMwMSAgZm1hICAgMWUrNjE0NCAgICAxMCAgIDAgICAgICAgICAtPiBJbmZpbml0eSAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEwMzAyICBmbWEgICAxZSs2MTQ0ICAgIDEwICAgLTFlKzYxNDQgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQNCi1kcWZtYTAzMDMgIGZtYSAgIDFlKzYxNDQgICAgMTAgICAtOWUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZA0KLS0tIHN1Ym5vcm1hbCBldGMuDQotZHFmbWEwMzA1ICBmbWEgICAxZS02MTc2ICAgIDAuMSAgMCAgICAgICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZm1hMDMwNiAgZm1hICAgMWUtNjE3NiAgICAwLjEgIDEgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTAzMDcgIGZtYSAgIDFlLTYxNzYgICAgMC4xICAxZS02MTc2ICAgLT4gMUUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEluZmluaXRlIGNvbWJpbmF0aW9ucw0KLWRxZm1hMDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkNCi1kcWZtYTA4MDEgZm1hICBJbmYgICBJbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMDgwMiBmbWEgIEluZiAgLUluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWRxZm1hMDgwNCBmbWEgLUluZiAgIEluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEwODA1IGZtYSAtSW5mICAgSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWRxZm1hMDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkNCi1kcWZtYTA4MDcgZm1hIC1JbmYgIC1JbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24NCi1kcWZtYTA5MDAgZm1hICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjINCi1kcWZtYTA5MDEgZm1hICAwICAgICBOYU4zICBOYU41ICAgLT4gIE5hTjMNCi1kcWZtYTA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUNCi0tLSBmaXJzdCBzTmFOIHdpbnMgKGNvbnNpZGVyIHFOYU4gZnJvbSBlYXJsaWVyIHNOYU4gYmVpbmcNCi0tLSBvdmVycmlkZGVuIGJ5IGFuIHNOYU4gaW4gdGhpcmQgb3BlcmFuZCkNCi1kcWZtYTA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTA5MDUgZm1hICAwICAgICAwICAgICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTA5MDggZm1hICBOYU43ICBOYU41ICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBNVUxUSVBMSUNBVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxZm1hMjAwMCBmbWEgIDIgICAgICAyICAgMGUrNjE0NCAgLT4gNA0KLWRxZm1hMjAwMSBmbWEgIDIgICAgICAzICAgMGUrNjE0NCAgLT4gNg0KLWRxZm1hMjAwMiBmbWEgIDUgICAgICAxICAgMGUrNjE0NCAgLT4gNQ0KLWRxZm1hMjAwMyBmbWEgIDUgICAgICAyICAgMGUrNjE0NCAgLT4gMTANCi1kcWZtYTIwMDQgZm1hICAxLjIwICAgMiAgIDBlKzYxNDQgIC0+IDIuNDANCi1kcWZtYTIwMDUgZm1hICAxLjIwICAgMCAgIDBlKzYxNDQgIC0+IDAuMDANCi1kcWZtYTIwMDYgZm1hICAxLjIwICAtMiAgIDBlKzYxNDQgIC0+IC0yLjQwDQotZHFmbWEyMDA3IGZtYSAgLTEuMjAgIDIgICAwZSs2MTQ0ICAtPiAtMi40MA0KLWRxZm1hMjAwOCBmbWEgIC0xLjIwICAwICAgMGUrNjE0NCAgLT4gMC4wMA0KLWRxZm1hMjAwOSBmbWEgIC0xLjIwIC0yICAgMGUrNjE0NCAgLT4gMi40MA0KLWRxZm1hMjAxMCBmbWEgIDUuMDkgNy4xICAgMGUrNjE0NCAgLT4gMzYuMTM5DQotZHFmbWEyMDExIGZtYSAgMi41ICAgIDQgICAwZSs2MTQ0ICAtPiAxMC4wDQotZHFmbWEyMDEyIGZtYSAgMi41MCAgIDQgICAwZSs2MTQ0ICAtPiAxMC4wMA0KLWRxZm1hMjAxMyBmbWEgIDEuMjM0NTY3ODkgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgMGUrNjE0NCAgLT4gMS4yMzQ1Njc4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZA0KLWRxZm1hMjAxNSBmbWEgIDIuNTAgICA0ICAgMGUrNjE0NCAgLT4gMTAuMDANCi1kcWZtYTIwMTYgZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTIwMTcgZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTIwMTggZm1hICAtOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTIwMTkgZm1hICAtOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB6ZXJvcywgZXRjLg0KLWRxZm1hMjAyMSBmbWEgICAwICAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KLWRxZm1hMjAyMiBmbWEgICAwICAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KLWRxZm1hMjAyMyBmbWEgIC0wICAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KLWRxZm1hMjAyNCBmbWEgIC0wICAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KLWRxZm1hMjAyNSBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjAyNiBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjAyNyBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjAyOCBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjAzMCBmbWEgICA1LjAwICAgMUUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDUwMA0KLWRxZm1hMjAzMSBmbWEgICAwMC4wMCAgMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMA0KLWRxZm1hMjAzMiBmbWEgICAwMC4wMCAgMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kcWZtYTIwMzMgZm1hICAgMEUtMyAgIDAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotZHFmbWEyMDM0IGZtYSAgLTUuMDAgICAxRS0zICAgIDBlKzYxNDQgIC0+IC0wLjAwNTAwDQotZHFmbWEyMDM1IGZtYSAgLTAwLjAwICAwLjAwMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwDQotZHFmbWEyMDM2IGZtYSAgLTAwLjAwICAwRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWRxZm1hMjAzNyBmbWEgIC0wRS0zICAgMDAuMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi1kcWZtYTIwMzggZm1hICAgNS4wMCAgLTFFLTMgICAgMGUrNjE0NCAgLT4gLTAuMDA1MDANCi1kcWZtYTIwMzkgZm1hICAgMDAuMDAgLTAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDANCi1kcWZtYTIwNDAgZm1hICAgMDAuMDAgLTBFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZHFmbWEyMDQxIGZtYSAgIDBFLTMgIC0wMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWRxZm1hMjA0MiBmbWEgIC01LjAwICAtMUUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDUwMA0KLWRxZm1hMjA0MyBmbWEgIC0wMC4wMCAtMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMA0KLWRxZm1hMjA0NCBmbWEgIC0wMC4wMCAtMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kcWZtYTIwNDUgZm1hICAtMEUtMyAgLTAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KLWRxZm1hMjA1MCBmbWEgIDEuMjAgMyAgICAgICAgICAwZSs2MTQ0ICAtPiAzLjYwDQotZHFmbWEyMDUxIGZtYSAgNyAgICAzICAgICAgICAgIDBlKzYxNDQgIC0+IDIxDQotZHFmbWEyMDUyIGZtYSAgMC45ICAwLjggICAgICAgIDBlKzYxNDQgIC0+IDAuNzINCi1kcWZtYTIwNTMgZm1hICAwLjkgIC0wICAgICAgICAgMGUrNjE0NCAgLT4gMC4wDQotZHFmbWEyMDU0IGZtYSAgNjU0MzIxIDY1NDMyMSAgIDBlKzYxNDQgIC0+IDQyODEzNTk3MTA0MQ0KLQ0KLWRxZm1hMjA2MCBmbWEgIDEyMy40NSAxZTcgICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrOQ0KLWRxZm1hMjA2MSBmbWEgIDEyMy40NSAxZTggICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTANCi1kcWZtYTIwNjIgZm1hICAxMjMuNDUgMWUrOSAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzExDQotZHFmbWEyMDYzIGZtYSAgMTIzLjQ1IDFlMTAgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxMg0KLWRxZm1hMjA2NCBmbWEgIDEyMy40NSAxZTExICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTMNCi1kcWZtYTIwNjUgZm1hICAxMjMuNDUgMWUxMiAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzE0DQotZHFmbWEyMDY2IGZtYSAgMTIzLjQ1IDFlMTMgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxNQ0KLQ0KLQ0KLS0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3Rocw0KLS0tICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZHFmbWEyMDgwIGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi1kcWZtYTIwODQgZm1hICAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgICAwZSs2MTQ0ICAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KLWRxZm1hMjA5MCBmbWEgIDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAgIDBlKzYxNDQgIC0+IDEyMzAxMjM0NTY0NTY3OC45DQotZHFmbWEyMDk0IGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi0NCi0tLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzDQotZHFmbWEyMTAxIGZtYSAgOSA5ICAgICAwZSs2MTQ0ICAtPiA4MQ0KLWRxZm1hMjEwMiBmbWEgIDkgOTAgICAgIDBlKzYxNDQgIC0+IDgxMA0KLWRxZm1hMjEwMyBmbWEgIDkgOTAwICAgICAwZSs2MTQ0ICAtPiA4MTAwDQotZHFmbWEyMTA0IGZtYSAgOSA5MDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMA0KLWRxZm1hMjEwNSBmbWEgIDkgOTAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMA0KLWRxZm1hMjEwNiBmbWEgIDkgOTAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwDQotZHFmbWEyMTA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMA0KLWRxZm1hMjEwOCBmbWEgIDkgOTAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMA0KLWRxZm1hMjEwOSBmbWEgIDkgOTAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwDQotZHFmbWEyMTEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMA0KLWRxZm1hMjExMSBmbWEgIDkgOTAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMA0KLWRxZm1hMjExMiBmbWEgIDkgOTAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwDQotZHFmbWEyMTEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMA0KLWRxZm1hMjExNCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjExNSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwDQotLS1kcWZtYTIxMTYgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwDQotLS1kcWZtYTIxMTcgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDANCi0tLWRxZm1hMjExOCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwDQotLS1kcWZtYTIxMTkgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kcWZtYTIxMjAgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRxZm1hMjEyMSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kcWZtYTIxMjIgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kcWZtYTIxMjMgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2Fycmllcw0KLWRxZm1hMjEzMSBmbWEgIDMgMyAgICAgMGUrNjE0NCAgLT4gOQ0KLWRxZm1hMjEzMiBmbWEgIDMgMzAgICAgIDBlKzYxNDQgIC0+IDkwDQotZHFmbWEyMTMzIGZtYSAgMyAzMDAgICAgIDBlKzYxNDQgIC0+IDkwMA0KLWRxZm1hMjEzNCBmbWEgIDMgMzAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMA0KLWRxZm1hMjEzNSBmbWEgIDMgMzAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwDQotZHFmbWEyMTM2IGZtYSAgMyAzMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMA0KLWRxZm1hMjEzNyBmbWEgIDMgMzAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMA0KLWRxZm1hMjEzOCBmbWEgIDMgMzAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwDQotZHFmbWEyMTM5IGZtYSAgMyAzMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMA0KLWRxZm1hMjE0MCBmbWEgIDMgMzAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMA0KLWRxZm1hMjE0MSBmbWEgIDMgMzAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwDQotZHFmbWEyMTQyIGZtYSAgMyAzMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMA0KLWRxZm1hMjE0MyBmbWEgIDMgMzAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMA0KLWRxZm1hMjE0NCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwDQotZHFmbWEyMTQ1IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjE0NiBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjE0NyBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMTQ4IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjE0OSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjE1MCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMTUxIGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjE1MiBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjE1MyBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotZHFmbWEyMjYzIGZtYSAgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgIDBlKzYxNDQgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4Mjk2IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcNCi1kcWZtYTIzMDEgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOSAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjMwMiBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMDMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMDQgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjMwNSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMDYgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMDcgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjMwOCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMDkgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMTAgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjMxMSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMTIgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMTMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjMxNCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMTUgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMTYgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjMxNyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBSb3VuZGVkDQotZHFmbWEyMzE4IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBSb3VuZGVkDQotZHFmbWEyMzE5IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgUm91bmRlZA0KLWRxZm1hMjMyMCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICBSb3VuZGVkDQotZHFmbWEyMzIxIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4ICBSb3VuZGVkDQotZHFmbWEyMzIyIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOSAgUm91bmRlZA0KLWRxZm1hMjMyMyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzQwICBSb3VuZGVkDQotDQotLS0gdHJ5emVyb3MgY2FzZXMNCi1kcWZtYTI1MDQgIGZtYSAgIDBFLTQyNjAgMTAwMEUtNDI2MCAgICAwZSs2MTQ0ICAtPiAwRS02MTc2IENsYW1wZWQNCi1kcWZtYTI1MDUgIGZtYSAgIDEwMEUrNDI2MCAwRSs0MjYwICAgICAwZSs2MTQ0ICAtPiAwRSs2MTExIENsYW1wZWQNCi0NCi0tLSBtaXhlZCB3aXRoIHplcm9zDQotZHFmbWEyNTQxIGZtYSAgIDAgICAgLTEgICAgICAgMGUrNjE0NCAgLT4gIDANCi1kcWZtYTI1NDIgZm1hICAtMCAgICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMA0KLWRxZm1hMjU0MyBmbWEgICAwICAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwDQotZHFmbWEyNTQ0IGZtYSAgLTAgICAgIDEgICAgICAgMGUrNjE0NCAgLT4gIDANCi1kcWZtYTI1NDUgZm1hICAtMSAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KLWRxZm1hMjU0NiBmbWEgIC0xICAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwDQotZHFmbWEyNTQ3IGZtYSAgIDEgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDANCi1kcWZtYTI1NDggZm1hICAgMSAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KLQ0KLWRxZm1hMjU1MSBmbWEgICAwLjAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi1kcWZtYTI1NTIgZm1hICAtMC4wICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotZHFmbWEyNTUzIGZtYSAgIDAuMCAgIDEgICAgICAgMGUrNjE0NCAgLT4gIDAuMA0KLWRxZm1hMjU1NCBmbWEgIC0wLjAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi1kcWZtYTI1NTUgZm1hICAtMS4wICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotZHFmbWEyNTU2IGZtYSAgLTEuMCAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAuMA0KLWRxZm1hMjU1NyBmbWEgICAxLjAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi1kcWZtYTI1NTggZm1hICAgMS4wICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotDQotZHFmbWEyNTYxIGZtYSAgIDAgICAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMA0KLWRxZm1hMjU2MiBmbWEgIC0wICAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi1kcWZtYTI1NjMgZm1hICAgMCAgICAgMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotZHFmbWEyNTY0IGZtYSAgLTAgICAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMA0KLWRxZm1hMjU2NSBmbWEgIC0xICAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi1kcWZtYTI1NjYgZm1hICAtMSAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotZHFmbWEyNTY3IGZtYSAgIDEgICAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMA0KLWRxZm1hMjU2OCBmbWEgICAxICAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi0NCi1kcWZtYTI1NzEgZm1hICAgMC4wICAtMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjU3MiBmbWEgIC0wLjAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQotZHFmbWEyNTczIGZtYSAgIDAuMCAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTI1NzQgZm1hICAtMC4wICAgMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjU3NSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQotZHFmbWEyNTc2IGZtYSAgLTEuMCAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTI1NzcgZm1hICAgMS4wICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjU3OCBmbWEgICAxLjAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQotZHFmbWEyNTc5IGZtYSAgIDEuMCAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTI1MzAgZm1hICAtMS4wICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjUzMSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQotZHFmbWEyNTMyIGZtYSAgIDEuMCAgLTAuMCAgICAtMGUrNjE0NCAgLT4gLTAuMDANCi1kcWZtYTI1MzMgZm1hICAgMS4wICAgMC4wICAgIC0wZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjUzNCBmbWEgIC0xLjAgIC0wLjAgICAgLTBlKzYxNDQgIC0+ICAwLjAwDQotZHFmbWEyNTM1IGZtYSAgLTEuMCAgIDAuMCAgICAtMGUrNjE0NCAgLT4gLTAuMDANCi0NCi0NCi0tLSBTcGVjaWFscw0KLWRxZm1hMjU4MCBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KLWRxZm1hMjU4MSBmbWEgICBJbmYgIC0xMDAwICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KLWRxZm1hMjU4MiBmbWEgICBJbmYgIC0xICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KLWRxZm1hMjU4MyBmbWEgICBJbmYgIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNTg0IGZtYSAgIEluZiAgIDAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI1ODUgZm1hICAgSW5mICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkNCi1kcWZtYTI1ODYgZm1hICAgSW5mICAgMTAwMCAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkNCi1kcWZtYTI1ODcgZm1hICAgSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkNCi1kcWZtYTI1ODggZm1hICAtMTAwMCAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI1ODkgZm1hICAtSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI1OTAgZm1hICAtMSAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI1OTEgZm1hICAtMCAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjU5MiBmbWEgICAwICAgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNTkzIGZtYSAgIDEgICAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQotZHFmbWEyNTk0IGZtYSAgIDEwMDAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQotZHFmbWEyNTk1IGZtYSAgIEluZiAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQotDQotZHFmbWEyNjAwIGZtYSAgLUluZiAgLUluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQotZHFmbWEyNjAxIGZtYSAgLUluZiAgLTEwMDAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQotZHFmbWEyNjAyIGZtYSAgLUluZiAgLTEgICAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQotZHFmbWEyNjAzIGZtYSAgLUluZiAgLTAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2MDQgZm1hICAtSW5mICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjYwNSBmbWEgIC1JbmYgICAxICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KLWRxZm1hMjYwNiBmbWEgIC1JbmYgICAxMDAwICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KLWRxZm1hMjYwNyBmbWEgIC1JbmYgICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KLWRxZm1hMjYwOCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KLWRxZm1hMjYwOSBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQ0KLWRxZm1hMjYxMCBmbWEgIC0xICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQ0KLWRxZm1hMjYxMSBmbWEgIC0wICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjEyIGZtYSAgIDAgICAgLUluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2MTMgZm1hICAgMSAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI2MTQgZm1hICAgMTAwMCAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI2MTUgZm1hICAgSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi0NCi1kcWZtYTI2MjEgZm1hICAgTmFOIC1JbmYgICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjIyIGZtYSAgIE5hTiAtMTAwMCAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYyMyBmbWEgICBOYU4gLTEgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi1kcWZtYTI2MjQgZm1hICAgTmFOIC0wICAgICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjI1IGZtYSAgIE5hTiAgMCAgICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYyNiBmbWEgICBOYU4gIDEgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi1kcWZtYTI2MjcgZm1hICAgTmFOICAxMDAwICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjI4IGZtYSAgIE5hTiAgSW5mICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYyOSBmbWEgICBOYU4gIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi1kcWZtYTI2MzAgZm1hICAtSW5mICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjMxIGZtYSAgLTEwMDAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYzMiBmbWEgIC0xICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi1kcWZtYTI2MzMgZm1hICAtMCAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjM0IGZtYSAgIDAgICAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYzNSBmbWEgICAxICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi1kcWZtYTI2MzYgZm1hICAgMTAwMCBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjM3IGZtYSAgIEluZiAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLQ0KLWRxZm1hMjY0MSBmbWEgICBzTmFOIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjQyIGZtYSAgIHNOYU4gLTEwMDAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NDMgZm1hICAgc05hTiAtMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY0NCBmbWEgICBzTmFOIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjQ1IGZtYSAgIHNOYU4gIDAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NDYgZm1hICAgc05hTiAgMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY0NyBmbWEgICBzTmFOICAxMDAwICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjQ4IGZtYSAgIHNOYU4gIE5hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NDkgZm1hICAgc05hTiBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY1MCBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjUxIGZtYSAgLUluZiAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NTIgZm1hICAtMTAwMCBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY1MyBmbWEgIC0xICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjU0IGZtYSAgLTAgICAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NTUgZm1hICAgMCAgICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY1NiBmbWEgICAxICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjU3IGZtYSAgIDEwMDAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NTggZm1hICAgSW5mICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY1OSBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxZm1hMjY2MSBmbWEgICBOYU45IC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU45DQotZHFmbWEyNjYyIGZtYSAgIE5hTjggIDk5OSAgICAgMGUrNjE0NCAgLT4gIE5hTjgNCi1kcWZtYTI2NjMgZm1hICAgTmFONzEgSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFONzENCi1kcWZtYTI2NjQgZm1hICAgTmFONiAgTmFONSAgICAwZSs2MTQ0ICAtPiAgTmFONg0KLWRxZm1hMjY2NSBmbWEgIC1JbmYgICBOYU40ICAgIDBlKzYxNDQgIC0+ICBOYU40DQotZHFmbWEyNjY2IGZtYSAgLTk5OSAgIE5hTjMzICAgMGUrNjE0NCAgLT4gIE5hTjMzDQotZHFmbWEyNjY3IGZtYSAgIEluZiAgIE5hTjIgICAgMGUrNjE0NCAgLT4gIE5hTjINCi0NCi1kcWZtYTI2NzEgZm1hICAgc05hTjk5IC1JbmYgICAgICAwZSs2MTQ0ICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NzIgZm1hICAgc05hTjk4IC0xMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NzMgZm1hICAgc05hTjk3ICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NzQgZm1hICAgc05hTjE2IHNOYU45NCAgICAwZSs2MTQ0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NzUgZm1hICAgTmFOOTUgIHNOYU45MyAgICAwZSs2MTQ0ICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NzYgZm1hICAtSW5mICAgIHNOYU45MiAgICAwZSs2MTQ0ICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NzcgZm1hICAgMDg4ICAgIHNOYU45MSAgICAwZSs2MTQ0ICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NzggZm1hICAgSW5mICAgIHNOYU45MCAgICAwZSs2MTQ0ICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NzkgZm1hICAgTmFOICAgIHNOYU44OSAgICAwZSs2MTQ0ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcWZtYTI2ODEgZm1hICAtTmFOOSAtSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFOOQ0KLWRxZm1hMjY4MiBmbWEgIC1OYU44ICA5OTkgICAgIDBlKzYxNDQgIC0+IC1OYU44DQotZHFmbWEyNjgzIGZtYSAgLU5hTjcxIEluZiAgICAgMGUrNjE0NCAgLT4gLU5hTjcxDQotZHFmbWEyNjg0IGZtYSAgLU5hTjYgLU5hTjUgICAgMGUrNjE0NCAgLT4gLU5hTjYNCi1kcWZtYTI2ODUgZm1hICAtSW5mICAtTmFONCAgICAwZSs2MTQ0ICAtPiAtTmFONA0KLWRxZm1hMjY4NiBmbWEgIC05OTkgIC1OYU4zMyAgIDBlKzYxNDQgIC0+IC1OYU4zMw0KLWRxZm1hMjY4NyBmbWEgICBJbmYgIC1OYU4yICAgIDBlKzYxNDQgIC0+IC1OYU4yDQotDQotZHFmbWEyNjkxIGZtYSAgLXNOYU45OSAtSW5mICAgICAgMGUrNjE0NCAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjkyIGZtYSAgLXNOYU45OCAtMTEgICAgICAgMGUrNjE0NCAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjkzIGZtYSAgLXNOYU45NyAgTmFOICAgICAgMGUrNjE0NCAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjk0IGZtYSAgLXNOYU4xNiAtc05hTjk0ICAgMGUrNjE0NCAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjk1IGZtYSAgLU5hTjk1ICAtc05hTjkzICAgMGUrNjE0NCAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjk2IGZtYSAgLUluZiAgICAtc05hTjkyICAgMGUrNjE0NCAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjk3IGZtYSAgIDA4OCAgICAtc05hTjkxICAgMGUrNjE0NCAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjk4IGZtYSAgIEluZiAgICAtc05hTjkwICAgMGUrNjE0NCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjk5IGZtYSAgLU5hTiAgICAtc05hTjg5ICAgMGUrNjE0NCAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFmbWEyNzAxIGZtYSAgLU5hTiAgLUluZiAgICAgMGUrNjE0NCAgLT4gLU5hTg0KLWRxZm1hMjcwMiBmbWEgIC1OYU4gICA5OTkgICAgIDBlKzYxNDQgIC0+IC1OYU4NCi1kcWZtYTI3MDMgZm1hICAtTmFOICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFODQotZHFmbWEyNzA0IGZtYSAgLU5hTiAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTg0KLWRxZm1hMjcwNSBmbWEgIC1JbmYgIC1OYU4wICAgIDBlKzYxNDQgIC0+IC1OYU4NCi1kcWZtYTI3MDYgZm1hICAtOTk5ICAtTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFODQotZHFmbWEyNzA3IGZtYSAgIEluZiAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTg0KLQ0KLWRxZm1hMjcxMSBmbWEgIC1zTmFOICAgLUluZiAgICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI3MTIgZm1hICAtc05hTiAgIC0xMSAgICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNzEzIGZtYSAgLXNOYU4wMCAgTmFOICAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjcxNCBmbWEgIC1zTmFOICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI3MTUgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNzE2IGZtYSAgLUluZiAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjcxNyBmbWEgICAwODggICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI3MTggZm1hICAgSW5mICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNzE5IGZtYSAgLU5hTiAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cw0KLS0tIHNpZ25zDQotZHFmbWEyNzUxIGZtYSAgIDFlKzQyNzcgIDFlKzMzMTEgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyNzUyIGZtYSAgIDFlKzQyNzcgLTFlKzMzMTEgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyNzUzIGZtYSAgLTFlKzQyNzcgIDFlKzMzMTEgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyNzU0IGZtYSAgLTFlKzQyNzcgLTFlKzMzMTEgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyNzU1IGZtYSAgIDFlLTQyNzcgIDFlLTMzMTEgICAwZSs2MTQ0ICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFmbWEyNzU2IGZtYSAgIDFlLTQyNzcgLTFlLTMzMTEgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFmbWEyNzU3IGZtYSAgLTFlLTQyNzcgIDFlLTMzMTEgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFmbWEyNzU4IGZtYSAgLTFlLTQyNzcgLTFlLTMzMTEgICAwZSs2MTQ0ICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpDQotZHFmbWEyNzYwIGZtYSAgMWUtNjA2OSAxZS0xMDEgICAwZSs2MTQ0ICAtPiAxRS02MTcwIFN1Ym5vcm1hbA0KLWRxZm1hMjc2MSBmbWEgIDFlLTYwNjkgMWUtMTAyICAgMGUrNjE0NCAgLT4gMUUtNjE3MSBTdWJub3JtYWwNCi1kcWZtYTI3NjIgZm1hICAxZS02MDY5IDFlLTEwMyAgIDBlKzYxNDQgIC0+IDFFLTYxNzIgU3Vibm9ybWFsDQotZHFmbWEyNzYzIGZtYSAgMWUtNjA2OSAxZS0xMDQgICAwZSs2MTQ0ICAtPiAxRS02MTczIFN1Ym5vcm1hbA0KLWRxZm1hMjc2NCBmbWEgIDFlLTYwNjkgMWUtMTA1ICAgMGUrNjE0NCAgLT4gMUUtNjE3NCBTdWJub3JtYWwNCi1kcWZtYTI3NjUgZm1hICAxZS02MDY5IDFlLTEwNiAgIDBlKzYxNDQgIC0+IDFFLTYxNzUgU3Vibm9ybWFsDQotZHFmbWEyNzY2IGZtYSAgMWUtNjA2OSAxZS0xMDcgICAwZSs2MTQ0ICAtPiAxRS02MTc2IFN1Ym5vcm1hbA0KLWRxZm1hMjc2NyBmbWEgIDFlLTYwNjkgMWUtMTA4ICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFmbWEyNzY4IGZtYSAgMWUtNjA2OSAxZS0xMDkgICAwZSs2MTQ0ICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWZtYTI3NjkgZm1hICAxZS02MDY5IDFlLTExMCAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLS0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10NCi1kcWZtYTI3NzAgZm1hICAxZSs0MCAxZSs2MTAxICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgQ2xhbXBlZA0KLWRxZm1hMjc3MSBmbWEgIDFlKzQwIDFlKzYxMDIgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgIENsYW1wZWQNCi1kcWZtYTI3NzIgZm1hICAxZSs0MCAxZSs2MTAzICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyAgQ2xhbXBlZA0KLWRxZm1hMjc3MyBmbWEgIDFlKzQwIDFlKzYxMDQgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZA0KLWRxZm1hMjc3NCBmbWEgIDFlKzQwIDFlKzYxMDUgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI3NzUgZm1hICAxZSs0MCAxZSs2MTA2ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyNzc2IGZtYSAgMWUrNDAgMWUrNjEwNyAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjc3NyBmbWEgIDFlKzQwIDFlKzYxMDggICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI3NzggZm1hICAxZSs0MCAxZSs2MTA5ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyNzc5IGZtYSAgMWUrNDAgMWUrNjExMCAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxZm1hMjgwMSBmbWEgICAxLjAwMDBFLTYxNzIgIDEgICAgICAgMGUrNjE0NCAgLT4gMS4wMDAwRS02MTcyIFN1Ym5vcm1hbA0KLWRxZm1hMjgwMiBmbWEgICAxLjAwMEUtNjE3MiAgIDFlLTEgICAgMGUrNjE0NCAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbA0KLWRxZm1hMjgwMyBmbWEgICAxLjAwRS02MTcyICAgIDFlLTIgICAgMGUrNjE0NCAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbA0KLWRxZm1hMjgwNCBmbWEgICAxLjBFLTYxNzIgICAgIDFlLTMgICAgMGUrNjE0NCAgLT4gMS4wRS02MTc1ICAgIFN1Ym5vcm1hbA0KLWRxZm1hMjgwNSBmbWEgICAxLjBFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcWZtYTI4MDYgZm1hICAgMS4zRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODA3IGZtYSAgIDEuNUUtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgwOCBmbWEgICAxLjdFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI4MDkgZm1hICAgMi4zRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODEwIGZtYSAgIDIuNUUtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgxMSBmbWEgICAyLjdFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI4MTIgZm1hICAgMS40OUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODEzIGZtYSAgIDEuNTBFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgxNCBmbWEgICAxLjUxRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI4MTUgZm1hICAgMi40OUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODE2IGZtYSAgIDIuNTBFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgxNyBmbWEgICAyLjUxRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWZtYTI4MTggZm1hICAgMUUtNjE3MiAgICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbA0KLWRxZm1hMjgxOSBmbWEgICAzRS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZm1hMjgyMCBmbWEgICA1RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZm1hMjgyMSBmbWEgICA3RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI4MjIgZm1hICAgOUUtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODIzIGZtYSAgIDkuOUUtNjE3MiAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxZm1hMjgyNCBmbWEgICAxRS02MTcyICAgICAgLTFlLTQgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgU3Vibm9ybWFsDQotZHFmbWEyODI1IGZtYSAgIDNFLTYxNzIgICAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFmbWEyODI2IGZtYSAgLTVFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFmbWEyODI3IGZtYSAgIDdFLTYxNzIgICAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgyOCBmbWEgIC05RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI4MjkgZm1hICAgOS45RS02MTcyICAgIC0xZS01ICAgIDBlKzYxNDQgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODMwIGZtYSAgIDMuMEUtNjE3MiAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotZHFmbWEyODMxIGZtYSAgIDEuMEUtNTk3NyAgICAgMWUtMjAwICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFmbWEyODMyIGZtYSAgIDEuMEUtNTk3NyAgICAgMWUtMTk5ICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRxZm1hMjgzMyBmbWEgICAxLjBFLTU5NzcgICAgIDFlLTE5OCAgIDBlKzYxNDQgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwNCi1kcWZtYTI4MzQgZm1hICAgMi4wRS01OTc3ICAgICAyZS0xOTggICAwZSs2MTQ0ICAtPiA0LjBFLTYxNzUgICAgU3Vibm9ybWFsDQotZHFmbWEyODM1IGZtYSAgIDQuMEUtNTk3NyAgICAgNGUtMTk4ICAgMGUrNjE0NCAgLT4gMS42MEUtNjE3NCAgIFN1Ym5vcm1hbA0KLWRxZm1hMjgzNiBmbWEgIDEwLjBFLTU5NzcgICAgMTBlLTE5OCAgIDBlKzYxNDQgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwNCi1kcWZtYTI4MzcgZm1hICAzMC4wRS01OTc3ICAgIDMwZS0xOTggICAwZSs2MTQ0ICAtPiA5LjAwMEUtNjE3MyAgU3Vibm9ybWFsDQotZHFmbWEyODM4IGZtYSAgNDAuMEUtNTk4MiAgICA0MGUtMTY2ICAgMGUrNjE0NCAgLT4gMS42MDAwRS02MTQ1IFN1Ym5vcm1hbA0KLWRxZm1hMjgzOSBmbWEgIDQwLjBFLTU5ODIgICAgNDBlLTE2NSAgIDBlKzYxNDQgIC0+IDEuNjAwMEUtNjE0NCBTdWJub3JtYWwNCi1kcWZtYTI4NDAgZm1hICA0MC4wRS01OTgyICAgIDQwZS0xNjQgICAwZSs2MTQ0ICAtPiAxLjYwMDBFLTYxNDMNCi0NCi0tLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgNCi1kcWZtYTI4NzAgZm1hICAxMDAgIDkuOTk5RSs2MTQzICAgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1kcWZtYTI4NzEgZm1hICAxMDAgLTkuOTk5RSs2MTQzICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1kcWZtYTI4NzIgZm1hICAgICAgIDkuOTk5RSs2MTQzIDEwMCAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1kcWZtYTI4NzMgZm1hICAgICAgLTkuOTk5RSs2MTQzIDEwMCAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi0NCi0tLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscw0KLWRxZm1hMjg4MSBmbWEgICAxLjIzNDdFLTYxMzMgMS4yMzQ3RS00MCAgICAwZSs2MTQ0ICAtPiAgMS41MjRFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcWZtYTI4ODIgZm1hICAgMS4yMzRFLTYxMzMgMS4yMzRFLTQwICAgICAgMGUrNjE0NCAgLT4gIDEuNTIzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFmbWEyODgzIGZtYSAgIDEuMjNFLTYxMzMgIDEuMjNFLTQwICAgICAgIDBlKzYxNDQgIC0+ICAxLjUxM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxZm1hMjg4NCBmbWEgICAxLjJFLTYxMzMgICAxLjJFLTQwICAgICAgICAwZSs2MTQ0ICAtPiAgMS40NEUtNjE3MyAgU3Vibm9ybWFsDQotZHFmbWEyODg1IGZtYSAgIDEuMkUtNjEzMyAgIDEuMkUtNDEgICAgICAgIDBlKzYxNDQgIC0+ICAxLjQ0RS02MTc0ICBTdWJub3JtYWwNCi1kcWZtYTI4ODYgZm1hICAgMS4yRS02MTMzICAgMS4yRS00MiAgICAgICAgMGUrNjE0NCAgLT4gIDEuNEUtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZHFmbWEyODg3IGZtYSAgIDEuMkUtNjEzMyAgIDEuM0UtNDIgICAgICAgIDBlKzYxNDQgIC0+ICAxLjZFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWRxZm1hMjg4OCBmbWEgICAxLjNFLTYxMzMgICAxLjNFLTQyICAgICAgICAwZSs2MTQ0ICAtPiAgMS43RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kcWZtYTI4ODkgZm1hICAgMS4zRS02MTMzICAgMS4zRS00MyAgICAgICAgMGUrNjE0NCAgLT4gICAgMkUtNjE3NiAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZHFmbWEyODkwIGZtYSAgIDEuM0UtNjEzNCAgIDEuM0UtNDMgICAgICAgIDBlKzYxNDQgIC0+ICAgIDBFLTYxNzYgICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotDQotZHFmbWEyODkxIGZtYSAgIDEuMjM0NUUtMzkgICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFmbWEyODkyIGZtYSAgIDEuMjM0NTZFLTM5ICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFmbWEyODkzIGZtYSAgIDEuMjM0NUUtNDAgICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcWZtYTI4OTQgZm1hICAgMS4yMzQ1NkUtNDAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTIzRS02MTczICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxZm1hMjg5NSBmbWEgICAxLjIzNDVFLTQxICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFmbWEyODk2IGZtYSAgIDEuMjM0NTZFLTQxICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi0NCi0tLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93DQotLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0DQotZHFmbWEyOTA2IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAxICAgICAgICAgICAgICAgICAgICAgICAgIDBlKzYxNDQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzDQotZHFmbWEyOTA3IGZtYSAgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrNjE0NCAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLS0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluDQotZHFmbWEyOTA4IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotDQotLS0gaHVnZXN0DQotZHFmbWEyOTA5IGZtYSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgMGUrNjE0NCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzY3IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KLXByZWNpc2lvbjogICAzNA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1kcWZtYTIxMDAxICBmbWEgIDEzMEUtMiAgMTIwRS0yICAgMGUrNjE0NCAgLT4gMS41NjAwDQotZHFmbWEyMTAwMiAgZm1hICAxMzBFLTIgIDEyRS0xICAgIDBlKzYxNDQgIC0+IDEuNTYwDQotZHFmbWEyMTAwMyAgZm1hICAxMzBFLTIgIDFFMCAgICAgIDBlKzYxNDQgIC0+IDEuMzANCi1kcWZtYTIxMDA0ICBmbWEgIDFFMiAgICAgMUU0ICAgICAgMGUrNjE0NCAgLT4gMUUrNg0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcWZtYTI5OTAgZm1hICAxMCAgIyAgIDBlKzYxNDQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjk5MSBmbWEgICAjIDEwICAgMGUrNjE0NCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotDQotLS0gQURESVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQ0KLWRxYWRkMzAwMSBmbWEgIDEgIDEgICAgICAgMSAgICAgICAtPiAgMg0KLWRxYWRkMzAwMiBmbWEgIDEgIDIgICAgICAgMyAgICAgICAtPiAgNQ0KLWRxYWRkMzAwMyBmbWEgIDEgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQ0KLWRxYWRkMzAwNCBmbWEgIDEgICc1JyAgICAgJy0zJyAgICAtPiAgMg0KLWRxYWRkMzAwNSBmbWEgIDEgICctNScgICAgJy0zJyAgICAtPiAgLTgNCi1kcWFkZDMwMDYgZm1hICAxICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUNCi1kcWFkZDMwMDcgZm1hICAxICAnMC43JyAgICcwLjMnICAgLT4gIDEuMA0KLWRxYWRkMzAwOCBmbWEgIDEgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MA0KLWRxYWRkMzAwOSBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5Jw0KLWRxYWRkMzAxMCBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJw0KLQ0KLS0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZHFhZGQzMDExIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMDEyIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWRxYWRkMzAxMyBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkMzAxNCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwMTUgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMDE2IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzAxNyBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwMTggZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMDE5IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzAyMCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDMwMjEgZm1hICAxICAwIDEgLT4gMQ0KLWRxYWRkMzAyMiBmbWEgIDEgIDEgMSAtPiAyDQotZHFhZGQzMDIzIGZtYSAgMSAgMiAxIC0+IDMNCi1kcWFkZDMwMjQgZm1hICAxICAzIDEgLT4gNA0KLWRxYWRkMzAyNSBmbWEgIDEgIDQgMSAtPiA1DQotZHFhZGQzMDI2IGZtYSAgMSAgNSAxIC0+IDYNCi1kcWFkZDMwMjcgZm1hICAxICA2IDEgLT4gNw0KLWRxYWRkMzAyOCBmbWEgIDEgIDcgMSAtPiA4DQotZHFhZGQzMDI5IGZtYSAgMSAgOCAxIC0+IDkNCi1kcWFkZDMwMzAgZm1hICAxICA5IDEgLT4gMTANCi0NCi0tLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMNCi1kcWFkZDMwMzEgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcNCi1kcWFkZDMwMzIgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScNCi1kcWFkZDMwMzMgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcNCi1kcWFkZDMwMzQgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScNCi0NCi1kcWFkZDMwMzUgZm1hICAxICAnNzAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwMzYgZm1hICAxICAnNzAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMDM3IGZtYSAgMSAgJzcwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwMzggZm1hICAxICAnNzAwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwMzkgZm1hICAxICAnNzAwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RSszOCcgUm91bmRlZA0KLQ0KLS0tIHN5bW1ldHJ5Og0KLWRxYWRkMzA0MCBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzA0MSBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwNDIgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzA0NCBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzA0NSBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkDQotDQotLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZw0KLWRxYWRkMzA0NiBmbWEgIDEgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnDQotZHFhZGQzMDQ3IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnDQotZHFhZGQzMDQ4IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJw0KLWRxYWRkMzA0OSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnDQotZHFhZGQzMDUwIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnDQotZHFhZGQzMDUxIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJw0KLWRxYWRkMzA1MiBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KLWRxYWRkMzA1MyBmbWEgIDEgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcNCi1kcWFkZDMwNTQgZm1hICAxICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJw0KLWRxYWRkMzA1NSBmbWEgIDEgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnDQotZHFhZGQzMDU2IGZtYSAgMSAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnDQotZHFhZGQzMDU3IGZtYSAgMSAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcNCi0NCi0tLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uDQotZHFhZGQzMDYxIGZtYSAgMSAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJw0KLWRxYWRkMzA2MiBmbWEgIDEgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJw0KLWRxYWRkMzA2MyBmbWEgIDEgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnDQotZHFhZGQzMDY0IGZtYSAgMSAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJw0KLWRxYWRkMzA2NSBmbWEgIDEgIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJw0KLQ0KLS0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCi1kcWFkZDMwNzAgZm1hICAxICAxICAwICAgIC0+IDENCi1kcWFkZDMwNzEgZm1hICAxICAxIDAuICAgIC0+IDENCi1kcWFkZDMwNzIgZm1hICAxICAxICAuMCAgIC0+IDEuMA0KLWRxYWRkMzA3MyBmbWEgIDEgIDEgMC4wICAgLT4gMS4wDQotZHFhZGQzMDc0IGZtYSAgMSAgMSAwLjAwICAtPiAxLjAwDQotZHFhZGQzMDc1IGZtYSAgMSAgIDAgIDEgICAtPiAxDQotZHFhZGQzMDc2IGZtYSAgMSAgMC4gIDEgICAtPiAxDQotZHFhZGQzMDc3IGZtYSAgMSAgIC4wIDEgICAtPiAxLjANCi1kcWFkZDMwNzggZm1hICAxICAwLjAgMSAgIC0+IDEuMA0KLWRxYWRkMzA3OSBmbWEgIDEgIDAuMDAgMSAgLT4gMS4wMA0KLQ0KLS0tIHNvbWUgY2Fycmllcw0KLWRxYWRkMzA4MCBmbWEgIDEgIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkNCi1kcWFkZDMwODEgZm1hICAxICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMA0KLWRxYWRkMzA4MiBmbWEgIDEgICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDANCi1kcWFkZDMwODMgZm1hICAxICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDANCi1kcWFkZDMwODQgZm1hICAxICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMA0KLWRxYWRkMzA4NSBmbWEgIDEgICAgICA5OTk5OSAxICAtPiAxMDAwMDANCi1kcWFkZDMwODYgZm1hICAxICAgICAgIDk5OTkgMSAgLT4gMTAwMDANCi1kcWFkZDMwODcgZm1hICAxICAgICAgICA5OTkgMSAgLT4gMTAwMA0KLWRxYWRkMzA4OCBmbWEgIDEgICAgICAgICA5OSAxICAtPiAxMDANCi1kcWFkZDMwODkgZm1hICAxICAgICAgICAgIDkgMSAgLT4gMTANCi0NCi0NCi0tLSBtb3JlIExIUyBzd2Fwcw0KLWRxYWRkMzA5MCBmbWEgIDEgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3Jw0KLWRxYWRkMzA5MSBmbWEgIDEgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnDQotZHFhZGQzMDkyIGZtYSAgMSAgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3Jw0KLWRxYWRkMzA5MyBmbWEgIDEgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3Jw0KLWRxYWRkMzA5NCBmbWEgIDEgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3Jw0KLWRxYWRkMzA5NSBmbWEgIDEgICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3Jw0KLWRxYWRkMzA5NiBmbWEgIDEgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43Jw0KLWRxYWRkMzA5NyBmbWEgIDEgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnDQotZHFhZGQzMDk4IGZtYSAgMSAgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcNCi1kcWFkZDMwOTkgZm1hICAxICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnDQotZHFhZGQzMTAwIGZtYSAgMSAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScNCi1kcWFkZDMxMDEgZm1hICAxICAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnDQotZHFhZGQzMTAyIGZtYSAgMSAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnDQotZHFhZGQzMTAzIGZtYSAgMSAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnDQotZHFhZGQzMTA0IGZtYSAgMSAgJy01RTAnICAgICAgICAgMCAtPiAgJy01Jw0KLWRxYWRkMzEwNSBmbWEgIDEgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnDQotZHFhZGQzMTA2IGZtYSAgMSAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnDQotZHFhZGQzMTA3IGZtYSAgMSAgJy01RTMzJyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KLWRxYWRkMzEwOCBmbWEgIDEgICctNUUzNCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgUm91bmRlZA0KLWRxYWRkMzEwOSBmbWEgIDEgICctNUUzNScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgUm91bmRlZA0KLWRxYWRkMzExMCBmbWEgIDEgICctNUUzNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgUm91bmRlZA0KLWRxYWRkMzExMSBmbWEgIDEgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KLQ0KLS0tIG1vcmUgUkhTIHN3YXBzDQotZHFhZGQzMTEzIGZtYSAgMSAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycNCi1kcWFkZDMxMTQgZm1hICAxICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnDQotZHFhZGQzMTE2IGZtYSAgMSAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnDQotZHFhZGQzMTE3IGZtYSAgMSAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycNCi1kcWFkZDMxMTkgZm1hICAxICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3Jw0KLWRxYWRkMzEyMCBmbWEgIDEgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnDQotZHFhZGQzMTIxIGZtYSAgMSAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycNCi1kcWFkZDMxMjIgZm1hICAxICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnDQotZHFhZGQzMTIzIGZtYSAgMSAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJw0KLWRxYWRkMzEyNCBmbWEgIDEgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03Jw0KLWRxYWRkMzEyNSBmbWEgIDEgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScNCi1kcWFkZDMxMjYgZm1hICAxICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScNCi1kcWFkZDMxMjcgZm1hICAxICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1Jw0KLWRxYWRkMzEyOCBmbWEgIDEgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnDQotZHFhZGQzMTI5IGZtYSAgMSAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnDQotZHFhZGQzMTMwIGZtYSAgMSAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJw0KLWRxYWRkMzEzMSBmbWEgIDEgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnDQotZHFhZGQzMTMyIGZtYSAgMSAgMCAgJy01RTMzJyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQotZHFhZGQzMTMzIGZtYSAgMSAgMCAgJy01RTM0JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgICBSb3VuZGVkDQotZHFhZGQzMTM0IGZtYSAgMSAgMCAgJy01RTM1JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgICBSb3VuZGVkDQotZHFhZGQzMTM1IGZtYSAgMSAgMCAgJy01RTM2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkDQotZHFhZGQzMTM2IGZtYSAgMSAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkDQotDQotLS0gcmVsYXRlZA0KLWRxYWRkMzEzNyBmbWEgIDEgICAxICAnMEUtMzknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCi1kcWFkZDMxMzggZm1hICAxICAtMSAgJzBFLTM5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZHFhZGQzMTM5IGZtYSAgMSAgJzBFLTM5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZA0KLWRxYWRkMzE0MCBmbWEgIDEgICcwRS0zOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1kcWFkZDMxNDEgZm1hICAxICAxRSsyOSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMDAnDQotZHFhZGQzMTQyIGZtYSAgMSAgMUUrMjkgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZA0KLWRxYWRkMzE0MyBmbWEgIDEgIDAuMDAwICAgMUUrMzAgICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMCcNCi1kcWFkZDMxNDQgZm1hICAxICAwLjAwMDAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkDQotDQotLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10NCi1kcWFkZDMxNDYgZm1hICAxICAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnDQotZHFhZGQzMTQ3IGZtYSAgMSAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcNCi1kcWFkZDMxNDggZm1hICAxICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJw0KLWRxYWRkMzE0OSBmbWEgIDEgICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcNCi1kcWFkZDMxNTAgZm1hICAxICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJw0KLWRxYWRkMzE1MSBmbWEgIDEgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnDQotZHFhZGQzMTUyIGZtYSAgMSAgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJw0KLWRxYWRkMzE1MyBmbWEgIDEgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycNCi1kcWFkZDMxNTQgZm1hICAxICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnDQotZHFhZGQzMTU1IGZtYSAgMSAgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcNCi1kcWFkZDMxNTYgZm1hICAxICAnMycgICAgICczJyAgICAgLT4gICc2Jw0KLWRxYWRkMzE1NyBmbWEgIDEgICczJyAgICAgJyszJyAgICAtPiAgJzYnDQotZHFhZGQzMTU4IGZtYSAgMSAgJzMnICAgICAnLTMnICAgIC0+ICAnMCcNCi1kcWFkZDMxNTkgZm1hICAxICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnDQotZHFhZGQzMTYwIGZtYSAgMSAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcNCi0NCi0tLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KLWRxYWRkMzE2MSBmbWEgIDEgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5Jw0KLWRxYWRkMzE2MiBmbWEgIDEgICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScNCi1kcWFkZDMxNjMgZm1hICAxICAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQotZHFhZGQzMTY0IGZtYSAgMSAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknDQotZHFhZGQzMTY1IGZtYSAgMSAgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5Jw0KLWRxYWRkMzE2NiBmbWEgIDEgICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCi1kcWFkZDMxNjcgZm1hICAxICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQotZHFhZGQzMTY4IGZtYSAgMSAgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5Jw0KLQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZHFhZGQzMTcwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMxNzEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzE3MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMTczIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMxNzQgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzE3NSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMTc2IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMxNzcgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQNCi1kcWFkZDMxNzggZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzE3OSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMTgwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMxODEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzE4MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMTgzIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkDQotDQotLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZHFhZGQzMjAwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknDQotZHFhZGQzMjAxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIwMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMDMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjA0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIwNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMDYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjA3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIwOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMDkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjEwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIxMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMTIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjEzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIxNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMTUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjE2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnDQotZHFhZGQzMjE3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIxOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMTkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRxYWRkMzIyMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5Jw0KLWRxYWRkMzIyMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMjIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjIzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIyNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMjUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjI2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIyNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMjggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjI5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIzMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMzEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjMyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIzMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMzQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjM1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIzNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJw0KLWRxYWRkMzIzNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMzggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjM5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZHFhZGQzMjQwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI0MSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNDIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kcWFkZDMyNTAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScNCi1kcWFkZDMyNTEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjUyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI1MyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNTQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjU1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI1NiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNTcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjU4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI1OSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNjAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjYxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI2MiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNjMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjY0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI2NSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNjYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcNCi1kcWFkZDMyNjcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjY4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI2OSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMNCi1yb3VuZGluZzogaGFsZl91cA0KLWRxYWRkMzMwMSBmbWEgIDEgICAtMSAgIDEgICAgICAtPiAgIDANCi1kcWFkZDMzMDIgZm1hICAxICAgIDAgICAxICAgICAgLT4gICAxDQotZHFhZGQzMzAzIGZtYSAgMSAgICAxICAgMSAgICAgIC0+ICAgMg0KLWRxYWRkMzMwNCBmbWEgIDEgICAxMiAgIDEgICAgICAtPiAgMTMNCi1kcWFkZDMzMDUgZm1hICAxICAgOTggICAxICAgICAgLT4gIDk5DQotZHFhZGQzMzA2IGZtYSAgMSAgIDk5ICAgMSAgICAgIC0+IDEwMA0KLWRxYWRkMzMwNyBmbWEgIDEgIDEwMCAgIDEgICAgICAtPiAxMDENCi1kcWFkZDMzMDggZm1hICAxICAxMDEgICAxICAgICAgLT4gMTAyDQotZHFhZGQzMzA5IGZtYSAgMSAgIC0xICAtMSAgICAgIC0+ICAtMg0KLWRxYWRkMzMxMCBmbWEgIDEgICAgMCAgLTEgICAgICAtPiAgLTENCi1kcWFkZDMzMTEgZm1hICAxICAgIDEgIC0xICAgICAgLT4gICAwDQotZHFhZGQzMzEyIGZtYSAgMSAgIDEyICAtMSAgICAgIC0+ICAxMQ0KLWRxYWRkMzMxMyBmbWEgIDEgICA5OCAgLTEgICAgICAtPiAgOTcNCi1kcWFkZDMzMTQgZm1hICAxICAgOTkgIC0xICAgICAgLT4gIDk4DQotZHFhZGQzMzE1IGZtYSAgMSAgMTAwICAtMSAgICAgIC0+ICA5OQ0KLWRxYWRkMzMxNiBmbWEgIDEgIDEwMSAgLTEgICAgICAtPiAxMDANCi0NCi1kcWFkZDMzMjEgZm1hICAxICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KLWRxYWRkMzMyMiBmbWEgIDEgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxDQotZHFhZGQzMzIzIGZtYSAgMSAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDINCi1kcWFkZDMzMjQgZm1hICAxICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KLWRxYWRkMzMyNSBmbWEgIDEgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5DQotZHFhZGQzMzI2IGZtYSAgMSAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDANCi1kcWFkZDMzMjcgZm1hICAxICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KLWRxYWRkMzMyOCBmbWEgIDEgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyDQotZHFhZGQzMzI5IGZtYSAgMSAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDINCi1kcWFkZDMzMzAgZm1hICAxICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KLWRxYWRkMzMzMSBmbWEgIDEgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwDQotZHFhZGQzMzMyIGZtYSAgMSAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTENCi1kcWFkZDMzMzMgZm1hICAxICAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KLWRxYWRkMzMzNCBmbWEgIDEgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4DQotZHFhZGQzMzM1IGZtYSAgMSAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkNCi1kcWFkZDMzMzYgZm1hICAxICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KLQ0KLS0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudA0KLWRxYWRkMzM0MCBmbWEgIDEgIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDANCi1kcWFkZDMzNDEgZm1hICAxICAxRSszMyAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxYWRkMzM0MiBmbWEgIDEgIDFFKzM0ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZA0KLWRxYWRkMzM0MyBmbWEgIDEgIDFFKzM1ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgUm91bmRlZA0KLS0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4NCi1kcWFkZDMzNDQgZm1hICAxICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxDQotZHFhZGQzMzQ1IGZtYSAgMSAgMUUrMzMgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcWFkZDMzNDYgZm1hICAxICAxRSszNCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzM0NyBmbWEgIDEgIDFFKzM1ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMzQ4IGZtYSAgMSAgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNw0KLWRxYWRkMzM0OSBmbWEgIDEgIDFFKzMzICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZHFhZGQzMzUwIGZtYSAgMSAgMUUrMzQgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMzNTEgZm1hICAxICAxRSszNSAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHRyeXplcm9zIGNhc2VzDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kcWFkZDMzNjAgIGZtYSAgMSAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQ0KLWRxYWRkMzM2MSAgZm1hICAxICAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZA0KLWRxYWRkMzM2MiAgZm1hICAxICAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZA0KLWRxYWRkMzM2MyAgZm1hICAxICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzM2NCAgZm1hICAxICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMEUrNjExMQ0KLS0tICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi0NCi0tLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLWRxYWRkMzM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQNCi1kcWFkZDMzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kcWFkZDMzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0DQotZHFhZGQzMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1kcWFkZDMzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0DQotZHFhZGQzMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdA0KLQ0KLS0tIHVscCByZXBsYWNlbWVudCB0ZXN0cw0KLWRxYWRkMzQwMCBmbWEgIDEgICAgMSAgIDc3ZS0zMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQotZHFhZGQzNDAxIGZtYSAgMSAgICAxICAgNzdlLTMzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQotZHFhZGQzNDAyIGZtYSAgMSAgICAxICAgNzdlLTM0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQwMyBmbWEgIDEgICAgMSAgIDc3ZS0zNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MDQgZm1hICAxICAgIDEgICA3N2UtMzYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDA1IGZtYSAgMSAgICAxICAgNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQwNiBmbWEgIDEgICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDM0MTAgZm1hICAxICAgMTAgICA3N2UtMzIgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcNCi1kcWFkZDM0MTEgZm1hICAxICAgMTAgICA3N2UtMzMgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDEyIGZtYSAgMSAgIDEwICAgNzdlLTM0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQxMyBmbWEgIDEgICAxMCAgIDc3ZS0zNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MTQgZm1hICAxICAgMTAgICA3N2UtMzYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDE1IGZtYSAgMSAgIDEwICAgNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQxNiBmbWEgIDEgICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDM0MjAgZm1hICAxICAgNzdlLTMyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KLWRxYWRkMzQyMSBmbWEgIDEgICA3N2UtMzMgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KLWRxYWRkMzQyMiBmbWEgIDEgICA3N2UtMzQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MjMgZm1hICAxICAgNzdlLTM1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDI0IGZtYSAgMSAgIDc3ZS0zNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQyNSBmbWEgIDEgICA3N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MjYgZm1hICAxICAgNzdlLTI5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQzNDMwIGZtYSAgMSAgIDc3ZS0zMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQotZHFhZGQzNDMxIGZtYSAgMSAgIDc3ZS0zMyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQzMiBmbWEgIDEgICA3N2UtMzQgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MzMgZm1hICAxICAgNzdlLTM1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDM0IGZtYSAgMSAgIDc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQzNSBmbWEgIDEgICA3N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MzYgZm1hICAxICAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbmVnYXRpdmUgdWxwcw0KLWRxYWRkMzY0NDAgZm1hICAxICAgIDEgICAtNzdlLTMyICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDQxIGZtYSAgMSAgICAxICAgLTc3ZS0zMyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY0NDIgZm1hICAxICAgIDEgICAtNzdlLTM0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY0NDMgZm1hICAxICAgIDEgICAtNzdlLTM1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDQ0IGZtYSAgMSAgICAxICAgLTc3ZS0zNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ0NSBmbWEgIDEgICAgMSAgIC03N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ0NiBmbWEgIDEgICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQzNjQ1MCBmbWEgIDEgICAxMCAgIC03N2UtMzIgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDUxIGZtYSAgMSAgIDEwICAgLTc3ZS0zMyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDUyIGZtYSAgMSAgIDEwICAgLTc3ZS0zNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ1MyBmbWEgIDEgICAxMCAgIC03N2UtMzUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NTQgZm1hICAxICAgMTAgICAtNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NTUgZm1hICAxICAgMTAgICAtNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NTYgZm1hICAxICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkMzY0NjAgZm1hICAxICAgLTc3ZS0zMiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDYxIGZtYSAgMSAgIC03N2UtMzMgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY0NjIgZm1hICAxICAgLTc3ZS0zNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY0NjMgZm1hICAxICAgLTc3ZS0zNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDY0IGZtYSAgMSAgIC03N2UtMzYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ2NSBmbWEgIDEgICAtNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ2NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQzNjQ3MCBmbWEgIDEgICAtNzdlLTMyICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDcxIGZtYSAgMSAgIC03N2UtMzMgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDcyIGZtYSAgMSAgIC03N2UtMzQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ3MyBmbWEgIDEgICAtNzdlLTM1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NzQgZm1hICAxICAgLTc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NzUgZm1hICAxICAgLTc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NzYgZm1hICAxICAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG5lZ2F0aXZlIHVscHMNCi1kcWFkZDM2NDgwIGZtYSAgMSAgIC0xICAgIDc3ZS0zMiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY0ODEgZm1hICAxICAgLTEgICAgNzdlLTMzICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY0ODIgZm1hICAxICAgLTEgICAgNzdlLTM0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDgzIGZtYSAgMSAgIC0xICAgIDc3ZS0zNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0ODQgZm1hICAxICAgLTEgICAgNzdlLTM2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ4NSBmbWEgIDEgICAtMSAgICA3N2UtMzcgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0ODYgZm1hICAxICAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDM2NDkwIGZtYSAgMSAgLTEwICAgIDc3ZS0zMiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDkxIGZtYSAgMSAgLTEwICAgIDc3ZS0zMyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjQ5MiBmbWEgIDEgIC0xMCAgICA3N2UtMzQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDkzIGZtYSAgMSAgLTEwICAgIDc3ZS0zNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0OTQgZm1hICAxICAtMTAgICAgNzdlLTM2ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDk1IGZtYSAgMSAgLTEwICAgIDc3ZS0zNyAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ5NiBmbWEgIDEgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkMzY1MDAgZm1hICAxICAgIDc3ZS0zMiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjUwMSBmbWEgIDEgICAgNzdlLTMzICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjUwMiBmbWEgIDEgICAgNzdlLTM0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY1MDMgZm1hICAxICAgIDc3ZS0zNSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjUwNCBmbWEgIDEgICAgNzdlLTM2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTA1IGZtYSAgMSAgICA3N2UtMzcgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjUwNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkMzY1MTAgZm1hICAxICAgIDc3ZS0zMiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY1MTEgZm1hICAxICAgIDc3ZS0zMyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NTEyIGZtYSAgMSAgICA3N2UtMzQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1MTMgZm1hICAxICAgIDc3ZS0zNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjUxNCBmbWEgIDEgICAgNzdlLTM2ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1MTUgZm1hICAxICAgIDc3ZS0zNyAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTE2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCi1yb3VuZGluZzogaGFsZl91cA0KLWRxYWRkMzY1NDAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScNCi1kcWFkZDM2NTQxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NDIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU0MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTQ0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NDUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU0NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTQ3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NDggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU0OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTUwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NTEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU1MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTUzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NTQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU1NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTU2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnDQotZHFhZGQzNjU1NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTU4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NTkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRxYWRkMzY1NjAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScNCi1kcWFkZDM2NTYxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NjIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU2MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTY0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NjUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU2NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTY3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NjggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU2OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTcwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NzEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU3MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTczIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NzQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU3NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTc2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnDQotZHFhZGQzNjU3NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTc4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NzkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCi1kcWFkZDM3NTQwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NDEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU0MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRxYWRkMzc1NTAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScNCi1kcWFkZDM3NTUxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NTIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU1MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTU0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NTUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU1NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTU3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NTggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU1OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTYwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NjEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU2MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTYzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NjQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU2NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTY2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnDQotZHFhZGQzNzU2NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTY4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NjkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbW9yZSB6ZXJvcywgZXRjLg0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi0NCi1kcWFkZDM3NzAxIGZtYSAgMSAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDANCi1kcWFkZDM3NzAyIGZtYSAgMSAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwDQotZHFhZGQzNzcwMyBmbWEgIDEgIDAwLjAwIDBFLTMgICAtPiAwLjAwMA0KLWRxYWRkMzc3MDQgZm1hICAxICAwRS0zICAwMC4wMCAgLT4gMC4wMDANCi0NCi1kcWFkZDM3NzEwIGZtYSAgMSAgMEUrMyAgMDAuMDAgIC0+IDAuMDANCi1kcWFkZDM3NzExIGZtYSAgMSAgMEUrMyAgMDAuMCAgIC0+IDAuMA0KLWRxYWRkMzc3MTIgZm1hICAxICAwRSszICAwMC4gICAgLT4gMA0KLWRxYWRkMzc3MTMgZm1hICAxICAwRSszICAwMC5FKzEgLT4gMEUrMQ0KLWRxYWRkMzc3MTQgZm1hICAxICAwRSszICAwMC5FKzIgLT4gMEUrMg0KLWRxYWRkMzc3MTUgZm1hICAxICAwRSszICAwMC5FKzMgLT4gMEUrMw0KLWRxYWRkMzc3MTYgZm1hICAxICAwRSszICAwMC5FKzQgLT4gMEUrMw0KLWRxYWRkMzc3MTcgZm1hICAxICAwRSszICAwMC5FKzUgLT4gMEUrMw0KLWRxYWRkMzc3MTggZm1hICAxICAwRSszICAtMDAuMCAgIC0+IDAuMA0KLWRxYWRkMzc3MTkgZm1hICAxICAwRSszICAtMDAuICAgIC0+IDANCi1kcWFkZDM3NzMxIGZtYSAgMSAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxDQotDQotZHFhZGQzNzcyMCBmbWEgIDEgIDAwLjAwICAwRSszICAtPiAwLjAwDQotZHFhZGQzNzcyMSBmbWEgIDEgIDAwLjAgICAwRSszICAtPiAwLjANCi1kcWFkZDM3NzIyIGZtYSAgMSAgMDAuICAgIDBFKzMgIC0+IDANCi1kcWFkZDM3NzIzIGZtYSAgMSAgMDAuRSsxIDBFKzMgIC0+IDBFKzENCi1kcWFkZDM3NzI0IGZtYSAgMSAgMDAuRSsyIDBFKzMgIC0+IDBFKzINCi1kcWFkZDM3NzI1IGZtYSAgMSAgMDAuRSszIDBFKzMgIC0+IDBFKzMNCi1kcWFkZDM3NzI2IGZtYSAgMSAgMDAuRSs0IDBFKzMgIC0+IDBFKzMNCi1kcWFkZDM3NzI3IGZtYSAgMSAgMDAuRSs1IDBFKzMgIC0+IDBFKzMNCi1kcWFkZDM3NzI4IGZtYSAgMSAgLTAwLjAwIDBFKzMgIC0+IDAuMDANCi1kcWFkZDM3NzI5IGZtYSAgMSAgLTAwLjAgIDBFKzMgIC0+IDAuMA0KLWRxYWRkMzc3MzAgZm1hICAxICAtMDAuICAgMEUrMyAgLT4gMA0KLQ0KLWRxYWRkMzc3MzIgZm1hICAxICAgMCAgICAgMCAgICAgLT4gIDANCi1kcWFkZDM3NzMzIGZtYSAgMSAgIDAgICAgLTAgICAgIC0+ICAwDQotZHFhZGQzNzczNCBmbWEgIDEgIC0wICAgICAwICAgICAtPiAgMA0KLWRxYWRkMzc3MzUgZm1hICAxICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQ0KLQ0KLWRxYWRkMzc3MzYgZm1hICAxICAgMSAgICAtMSAgICAgLT4gIDANCi1kcWFkZDM3NzM3IGZtYSAgMSAgLTEgICAgLTEgICAgIC0+IC0yDQotZHFhZGQzNzczOCBmbWEgIDEgICAxICAgICAxICAgICAtPiAgMg0KLWRxYWRkMzc3MzkgZm1hICAxICAtMSAgICAgMSAgICAgLT4gIDANCi0NCi1kcWFkZDM3NzQxIGZtYSAgMSAgIDAgICAgLTEgICAgIC0+IC0xDQotZHFhZGQzNzc0MiBmbWEgIDEgIC0wICAgIC0xICAgICAtPiAtMQ0KLWRxYWRkMzc3NDMgZm1hICAxICAgMCAgICAgMSAgICAgLT4gIDENCi1kcWFkZDM3NzQ0IGZtYSAgMSAgLTAgICAgIDEgICAgIC0+ICAxDQotZHFhZGQzNzc0NSBmbWEgIDEgIC0xICAgICAwICAgICAtPiAtMQ0KLWRxYWRkMzc3NDYgZm1hICAxICAtMSAgICAtMCAgICAgLT4gLTENCi1kcWFkZDM3NzQ3IGZtYSAgMSAgIDEgICAgIDAgICAgIC0+ICAxDQotZHFhZGQzNzc0OCBmbWEgIDEgICAxICAgIC0wICAgICAtPiAgMQ0KLQ0KLWRxYWRkMzc3NTEgZm1hICAxICAgMC4wICAtMSAgICAgLT4gLTEuMA0KLWRxYWRkMzc3NTIgZm1hICAxICAtMC4wICAtMSAgICAgLT4gLTEuMA0KLWRxYWRkMzc3NTMgZm1hICAxICAgMC4wICAgMSAgICAgLT4gIDEuMA0KLWRxYWRkMzc3NTQgZm1hICAxICAtMC4wICAgMSAgICAgLT4gIDEuMA0KLWRxYWRkMzc3NTUgZm1hICAxICAtMS4wICAgMCAgICAgLT4gLTEuMA0KLWRxYWRkMzc3NTYgZm1hICAxICAtMS4wICAtMCAgICAgLT4gLTEuMA0KLWRxYWRkMzc3NTcgZm1hICAxICAgMS4wICAgMCAgICAgLT4gIDEuMA0KLWRxYWRkMzc3NTggZm1hICAxICAgMS4wICAtMCAgICAgLT4gIDEuMA0KLQ0KLWRxYWRkMzc3NjEgZm1hICAxICAgMCAgICAtMS4wICAgLT4gLTEuMA0KLWRxYWRkMzc3NjIgZm1hICAxICAtMCAgICAtMS4wICAgLT4gLTEuMA0KLWRxYWRkMzc3NjMgZm1hICAxICAgMCAgICAgMS4wICAgLT4gIDEuMA0KLWRxYWRkMzc3NjQgZm1hICAxICAtMCAgICAgMS4wICAgLT4gIDEuMA0KLWRxYWRkMzc3NjUgZm1hICAxICAtMSAgICAgMC4wICAgLT4gLTEuMA0KLWRxYWRkMzc3NjYgZm1hICAxICAtMSAgICAtMC4wICAgLT4gLTEuMA0KLWRxYWRkMzc3NjcgZm1hICAxICAgMSAgICAgMC4wICAgLT4gIDEuMA0KLWRxYWRkMzc3NjggZm1hICAxICAgMSAgICAtMC4wICAgLT4gIDEuMA0KLQ0KLWRxYWRkMzc3NzEgZm1hICAxICAgMC4wICAtMS4wICAgLT4gLTEuMA0KLWRxYWRkMzc3NzIgZm1hICAxICAtMC4wICAtMS4wICAgLT4gLTEuMA0KLWRxYWRkMzc3NzMgZm1hICAxICAgMC4wICAgMS4wICAgLT4gIDEuMA0KLWRxYWRkMzc3NzQgZm1hICAxICAtMC4wICAgMS4wICAgLT4gIDEuMA0KLWRxYWRkMzc3NzUgZm1hICAxICAtMS4wICAgMC4wICAgLT4gLTEuMA0KLWRxYWRkMzc3NzYgZm1hICAxICAtMS4wICAtMC4wICAgLT4gLTEuMA0KLWRxYWRkMzc3NzcgZm1hICAxICAgMS4wICAgMC4wICAgLT4gIDEuMA0KLWRxYWRkMzc3NzggZm1hICAxICAgMS4wICAtMC4wICAgLT4gIDEuMA0KLQ0KLS0tIFNwZWNpYWxzDQotZHFhZGQzNzc4MCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDM3NzgxIGZtYSAgMSAgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLWRxYWRkMzc3ODIgZm1hICAxICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZHFhZGQzNzc4MyBmbWEgIDEgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kcWFkZDM3Nzg0IGZtYSAgMSAgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLWRxYWRkMzc3ODUgZm1hICAxICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZHFhZGQzNzc4NiBmbWEgIDEgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1kcWFkZDM3Nzg3IGZtYSAgMSAgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxYWRkMzc3ODggZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQzNzc4OSBmbWEgIDEgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDM3NzkwIGZtYSAgMSAgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxYWRkMzc3OTEgZm1hICAxICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQzNzc5MiBmbWEgIDEgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDM3NzkzIGZtYSAgMSAgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxYWRkMzc3OTQgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcWFkZDM3ODAwIGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzgwMSBmbWEgIDEgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCi1kcWFkZDM3ODAyIGZtYSAgMSAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkMzc4MDMgZm1hICAxICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZHFhZGQzNzgwNCBmbWEgIDEgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCi1kcWFkZDM3ODA1IGZtYSAgMSAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkMzc4MDYgZm1hICAxICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZHFhZGQzNzgwNyBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcWFkZDM3ODA4IGZtYSAgMSAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkMzc4MDkgZm1hICAxICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODEwIGZtYSAgMSAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkMzc4MTEgZm1hICAxICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQzNzgxMiBmbWEgIDEgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcWFkZDM3ODEzIGZtYSAgMSAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkMzc4MTQgZm1hICAxICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQzNzgxNSBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcWFkZDM3ODIxIGZtYSAgMSAgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kcWFkZDM3ODIyIGZtYSAgMSAgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kcWFkZDM3ODIzIGZtYSAgMSAgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kcWFkZDM3ODI0IGZtYSAgMSAgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kcWFkZDM3ODI1IGZtYSAgMSAgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kcWFkZDM3ODI2IGZtYSAgMSAgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kcWFkZDM3ODI3IGZtYSAgMSAgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kcWFkZDM3ODI4IGZtYSAgMSAgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kcWFkZDM3ODI5IGZtYSAgMSAgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDM3ODMwIGZtYSAgMSAgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDM3ODMxIGZtYSAgMSAgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDM3ODMyIGZtYSAgMSAgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDM3ODMzIGZtYSAgMSAgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDM3ODM0IGZtYSAgMSAgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDM3ODM1IGZtYSAgMSAgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDM3ODM2IGZtYSAgMSAgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDM3ODM3IGZtYSAgMSAgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kcWFkZDM3ODQxIGZtYSAgMSAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg0MiBmbWEgIDEgICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NDMgZm1hICAxICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODQ0IGZtYSAgMSAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg0NSBmbWEgIDEgICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NDYgZm1hICAxICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODQ3IGZtYSAgMSAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg0OCBmbWEgIDEgICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NDkgZm1hICAxICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODUwIGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg1MSBmbWEgIDEgIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NTIgZm1hICAxICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODUzIGZtYSAgMSAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg1NCBmbWEgIDEgIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NTUgZm1hICAxICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODU2IGZtYSAgMSAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg1NyBmbWEgIDEgICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NTggZm1hICAxICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODU5IGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxYWRkMzc4NjEgZm1hICAxICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCi1kcWFkZDM3ODYyIGZtYSAgMSAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotZHFhZGQzNzg2MyBmbWEgIDEgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLWRxYWRkMzc4NjQgZm1hICAxICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCi1kcWFkZDM3ODY1IGZtYSAgMSAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotZHFhZGQzNzg2NiBmbWEgIDEgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLWRxYWRkMzc4NjcgZm1hICAxICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCi1kcWFkZDM3ODY4IGZtYSAgMSAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotZHFhZGQzNzg2OSBmbWEgIDEgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1kcWFkZDM3ODcxIGZtYSAgMSAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODcyIGZtYSAgMSAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODczIGZtYSAgMSAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODc0IGZtYSAgMSAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODc1IGZtYSAgMSAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODc2IGZtYSAgMSAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODc3IGZtYSAgMSAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODc4IGZtYSAgMSAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODc5IGZtYSAgMSAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODgwIGZtYSAgMSAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODgxIGZtYSAgMSAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODgyIGZtYSAgMSAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLWRxYWRkMzc4ODMgZm1hICAxICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4ODQgZm1hICAxICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotZHFhZGQzNzg4NSBmbWEgIDEgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4NCi1kcWFkZDM3NTc1IGZtYSAgMSAgIDFFLTYxNDMgLTFFLTYxNzYgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgU3Vibm9ybWFsDQotZHFhZGQzNzU3NiBmbWEgIDEgIC0xRS02MTQzICsxRS02MTc2IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbA0KLQ0KLS0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQ0KLS0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYWRkMzc5NzIgYXBwbHkgICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxYWRkMzc5NzMgZm1hICAxICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3OTc0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk3NSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk3NiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk3NyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOEUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk3OCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgN0UrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk3OSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNkUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk4MCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk4MSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNEUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk4MiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgM0UrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk4MyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMkUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk4NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQzNzk4NSBhcHBseSAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxYWRkMzc5ODYgZm1hICAxICAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk4NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3OTg4IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTExICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk4OSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtOUUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5OTAgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLThFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3OTkxIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC03RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk5MiBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNkUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5OTMgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTVFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3OTk0IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC00RSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk5NSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtM0UrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5OTYgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTJFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3OTk3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzDQotcm91bmRpbmc6ICAgICBkb3duDQotZHFhZGQzNzExMDAgZm1hICAxICAxZSsyIC0xZS02MTQzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTAxIGZtYSAgMSAgMWUrMSAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQzNzExMDMgZm1hICAxICAgICsxIC0xZS02MTQzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQzNzExMDQgZm1hICAxICAxZS0xIC0xZS02MTQzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTA1IGZtYSAgMSAgMWUtMiAtMWUtNjE0MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQzNzExMDYgZm1hICAxICAxZS0zIC0xZS02MTQzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQzNzExMDcgZm1hICAxICAxZS00IC0xZS02MTQzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTA4IGZtYSAgMSAgMWUtNSAtMWUtNjE0MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQzNzExMDkgZm1hICAxICAxZS02IC0xZS02MTQzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCi0NCi1yb3VuZGluZzogICAgIGNlaWxpbmcNCi1kcWFkZDM3MTExMCBmbWEgIDEgIC0xZSsyICsxZS02MTQzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTExIGZtYSAgMSAgLTFlKzEgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTEzIGZtYSAgMSAgICAgLTEgKzFlLTYxNDMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTExNCBmbWEgIDEgIC0xZS0xICsxZS02MTQzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTE1IGZtYSAgMSAgLTFlLTIgKzFlLTYxNDMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTE2IGZtYSAgMSAgLTFlLTMgKzFlLTYxNDMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTExNyBmbWEgIDEgIC0xZS00ICsxZS02MTQzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTE4IGZtYSAgMSAgLTFlLTUgKzFlLTYxNDMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTE5IGZtYSAgMSAgLTFlLTYgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KLQ0KLS0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlDQotcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4NCi0NCi1kcWFkZDM3MTMwMCBmbWEgIDEgIDFFMzQgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMTAgZm1hICAxICAxRTM0ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzExIGZtYSAgMSAgMUUzNCAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMxMiBmbWEgIDEgIDFFMzQgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMTMgZm1hICAxICAxRTM0ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzE0IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMxNSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMTYgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzE3IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMxOCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMTkgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzIwIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMyMSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMjIgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzIzIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMyNCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMjUgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzI2IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMyNyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMjggZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzI5IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMzMCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMzEgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzMyIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMzMyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMzQgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzM1IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMzNiBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMzcgZm1hICAxICAxRTM0ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzM4IGZtYSAgMSAgMUUzNCAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMzOSBmbWEgIDEgIDFFMzQgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQzNzEzNDAgZm1hICAxICAxRTM0ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzQxIGZtYSAgMSAgMUUzNCAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDM3MTM0OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzUwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM1MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzUzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM1NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzU2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNTcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM1OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzU5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNjAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM2MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzYyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNjMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM2NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzY1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNjcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM2OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzY5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNzAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzcyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM3NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNzYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM3NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzc4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNzkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM4MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzgxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzODIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM4MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzg0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzODUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM4NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzg3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzODggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM4OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzkwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzOTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM5MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzkzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzOTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM5NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzk2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQNCi0tLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwDQotZHFhZGQzNzE0MjAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDM3MTQyMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDM3MTQyMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0MjMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDM3MTQyNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDM3MTQyNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0MjYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDM3MTQyNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNw0KLWRxYWRkMzcxNDI4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04DQotZHFhZGQzNzE0MjkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkNCi1kcWFkZDM3MTQzMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTANCi1kcWFkZDM3MTQzMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTENCi1kcWFkZDM3MTQzMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTINCi1kcWFkZDM3MTQzMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMNCi1kcWFkZDM3MTQzNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQNCi1kcWFkZDM3MTQzNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUNCi1kcWFkZDM3MTQzNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYNCi1kcWFkZDM3MTQzNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcNCi1kcWFkZDM3MTQzOCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgNCi1kcWFkZDM3MTQzOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkNCi1kcWFkZDM3MTQ0MCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjANCi1kcWFkZDM3MTQ0MSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjENCi1kcWFkZDM3MTQ0MiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjINCi1kcWFkZDM3MTQ0MyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMNCi1kcWFkZDM3MTQ0NCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQNCi1kcWFkZDM3MTQ0NSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUNCi1kcWFkZDM3MTQ0NiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYNCi1kcWFkZDM3MTQ0NyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcNCi1kcWFkZDM3MTQ0OCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgNCi1kcWFkZDM3MTQ0OSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkNCi1kcWFkZDM3MTQ1MCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzANCi1kcWFkZDM3MTQ1MSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzENCi1kcWFkZDM3MTQ1MiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzINCi1kcWFkZDM3MTQ1MyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMNCi1kcWFkZDM3MTQ1NCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQNCi1kcWFkZDM3MTQ1NSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUNCi1kcWFkZDM3MTQ1NiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYNCi0NCi0tLSBzYW1lLCByZXZlcnNlZCAwDQotZHFhZGQzNzE0NjAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNDYxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0NjIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0NjMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNDY0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0NjUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0NjYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNDY3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcNCi1kcWFkZDM3MTQ2OCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04DQotZHFhZGQzNzE0NjkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQ0KLWRxYWRkMzcxNDcwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwDQotZHFhZGQzNzE0NzEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTENCi1kcWFkZDM3MTQ3MiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KLWRxYWRkMzcxNDczIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzDQotZHFhZGQzNzE0NzQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQNCi1kcWFkZDM3MTQ3NSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KLWRxYWRkMzcxNDc2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2DQotZHFhZGQzNzE0NzcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcNCi1kcWFkZDM3MTQ3OCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KLWRxYWRkMzcxNDc5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5DQotZHFhZGQzNzE0ODAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjANCi1kcWFkZDM3MTQ4MSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQ0KLWRxYWRkMzcxNDgyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyDQotZHFhZGQzNzE0ODMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMNCi1kcWFkZDM3MTQ4NCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNA0KLWRxYWRkMzcxNDg1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1DQotZHFhZGQzNzE0ODYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYNCi1kcWFkZDM3MTQ4NyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNw0KLWRxYWRkMzcxNDg4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4DQotZHFhZGQzNzE0ODkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkNCi1kcWFkZDM3MTQ5MCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMA0KLWRxYWRkMzcxNDkxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxDQotZHFhZGQzNzE0OTIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzINCi1kcWFkZDM3MTQ5MyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMw0KLWRxYWRkMzcxNDk0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0DQotZHFhZGQzNzE0OTUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUNCi1kcWFkZDM3MTQ5NiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNg0KLQ0KLS0tIHNhbWUsIEVzIG9uIHRoZSAwDQotZHFhZGQzNzE1MDAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MDEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MDIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MDMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MDQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MDUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MDYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MDcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MDggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MDkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MTAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MTEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MTIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MTMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MTQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MTUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MTYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MTcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MTggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MTkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MjAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MjEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MjIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MjMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MjQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MjUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MjYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MjcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MjggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MjkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MzAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MzEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MzIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE1MzMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdA0KLWRxYWRkMzcxNTM0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZHFhZGQzNzE1MzUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1kcWFkZDM3MTUzNiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWRxYWRkMzcxNTM3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotDQotLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTANCi1yb3VuZGluZzogICAgaGFsZl91cA0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kcWFkZDM3MTYwMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE2MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNjAyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTYwMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDM3MTYxMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQotZHFhZGQzNzE2MTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KLS0tIG92ZXJmbG93DQotZHFhZGQzNzE2MTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzE2MTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kcWFkZDM3MTYyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE2MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNjIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTYyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDM3MTYzMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQotZHFhZGQzNzE2MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KLS0tIG92ZXJmbG93DQotZHFhZGQzNzE2MzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzE2MzQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kcWFkZDM3MTY0MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE2NDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNjQyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTY0MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDM3MTY1MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQotZHFhZGQzNzE2NTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KLS0tIG92ZXJmbG93DQotZHFhZGQzNzE2NTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzE2NTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIHVwDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRxYWRkMzcxNjYwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTY2MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE2NjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNjYzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRxYWRkMzcxNjcxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDANCi1kcWFkZDM3MTY3MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwDQotLS0gb3ZlcmZsb3cNCi1kcWFkZDM3MTY3MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTY3NCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgZG93bg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kcWFkZDM3MTY4MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE2ODEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNjgyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTY4MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDM3MTY5MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQotZHFhZGQzNzE2OTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KLS0tIG92ZXJmbG93DQotZHFhZGQzNzE2OTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzE2OTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGNlaWxpbmcNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQzNzE3MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNzAxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTcwMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE3MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQzNzE3MTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRxYWRkMzcxNzEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCi0tLSBvdmVyZmxvdw0KLWRxYWRkMzcxNzEzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxNzE0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKg0KLXJvdW5kaW5nOiAgICBmbG9vcg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kcWFkZDM3MTcyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE3MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KLWRxYWRkMzcxNzIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCi1kcWFkZDM3MTcyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDM3MTczMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqDQotZHFhZGQzNzE3MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKg0KLS0tIG92ZXJmbG93DQotZHFhZGQzNzE3MzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzE3MzQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIDA1dXANCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQzNzE3NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNzQxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTc0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE3NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQzNzE3NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRxYWRkMzcxNzUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCi0tLSBvdmVyZmxvdw0KLWRxYWRkMzcxNzUzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxNzU0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KLWRxYWRkMzcxNzYxIGZtYSAgMSAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwDQotZHFhZGQzNzE3NjIgZm1hICAxICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTANCi1kcWFkZDM3MTc2MyBmbWEgIDEgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMA0KLWRxYWRkMzcxNzY0IGZtYSAgMSAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0DQotZHFhZGQzNzE3NjUgZm1hICAxICAxMzBFLTIgICAtMTIwRS0yIC0+IDAuMTANCi1kcWFkZDM3MTc2NiBmbWEgIDEgIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMA0KLWRxYWRkMzcxNzY3IGZtYSAgMSAgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwDQotZHFhZGQzNzE3NjggZm1hICAxICAxRTIgICAgICAtMUU0ICAgIC0+IC05LjlFKzMNCi0NCi0tLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLQ0KLWRxYWRkMzc1MDAxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1Nw0KLWRxYWRkMzc1MDAyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMDMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAwNCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDA1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMDYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAwNyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDA4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMDkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAxMCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDExIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMTIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAxMyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDE0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMTUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAxNiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDE3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMTggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAxOSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDIwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMjEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwDQotZHFhZGQzNzUwMzAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OQ0KLWRxYWRkMzc1MDMxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMQ0KLWRxYWRkMzc1MDMyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTINCi1kcWFkZDM3NTAzMyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMw0KLWRxYWRkMzc1MDM0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNA0KLWRxYWRkMzc1MDM1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDUNCi1kcWFkZDM3NTAzNiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Ng0KLWRxYWRkMzc1MDM3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2Nw0KLWRxYWRkMzc1MDM4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzgNCi1kcWFkZDM3NTAzOSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDQwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNDEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA0MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDQzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNDQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA0NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDQ2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNDcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA0OCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDQ5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYNCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZHFhZGQzNzUwNTAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA1MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDUyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNTMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA1NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDU1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNTYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA1NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDYwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNjEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA2MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDYzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNjQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA2NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDY2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNjcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpDQotcm91bmRpbmc6IHVwDQotZHFhZGQzNzUwNzAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMQ0KLWRxYWRkMzc1MDcxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNzIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA3MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDc0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNzUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA3NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDc3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNzggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA3OSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDgwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwODEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA4MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDgzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwODQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA4NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDg2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwODcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA4OCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDg5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gRGVzdHJ1Y3RpdmUgc3VidHJhY3QgKGZyb20gcmVtYWluZGVyIHRlc3RzKQ0KLQ0KLS0tICsrKyBzb21lIG9mIHRoZXNlIHdpbGwgYmUgb2ZmLWJ5LW9uZSByZW1haW5kZXIgdnMgcmVtYWluZGVyTmVhcg0KLQ0KLWRxZm1hNDAwMCAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMyAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzMNCi1kcWZtYTQwMDEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjIgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjINCi1kcWZtYTQwMDIgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTEgICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTExMQ0KLWRxZm1hNDAwMyAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxNCAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTQNCi1kcWZtYTQwMDQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMDggICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTINCi1kcWZtYTQwMDUgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTIgICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTEuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc0OA0KLWRxZm1hNDAwNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3DQotZHFmbWE0MDA3ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjc1MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1Mw0KLWRxZm1hNDAwOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMS4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcNCi1kcWZtYTQwMDkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS41MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1NA0KLWRxZm1hNDAxMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0MiAgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQyDQotZHFmbWE0MDExICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMyICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY4DQotZHFmbWE0MDEyICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIxICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NzkNCi1kcWZtYTQwMTMgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTAgICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMC41NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4ODkwDQotZHFmbWE0MDE0ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzEzICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0Njg3DQotZHFmbWE0MDE1ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyDQotZHFmbWE0MDE2ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUxICAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDMuNjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI1MQ0KLWRxZm1hNDAxNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3DQotZHFmbWE0MDE4ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDQuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2DQotZHFmbWE0MDE5ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQxICAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDQuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1OQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcWFkZDM5OTkwIGZtYSAgMSAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzOTk5MSBmbWEgIDEgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFGTUEuZGVjVGVzdCAtLSBkZWNRdWFkIEZ1c2VkIE11bHRpcGx5IEFkZCAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBUaGVzZSB0ZXN0cyBjb21wcmVzZSB0aHJlZSBwYXJ0czoKKy0tICAgMS4gU2FuaXR5IGNoZWNrcyBhbmQgb3RoZXIgdGhyZWUtb3BlcmFuZCB0ZXN0cyAoZXNwZWNpYWxseSB0aG9zZQorLS0gICAgICB3aGVyZSB0aGUgZnVzZWQgb3BlcmF0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSkKKy0tICAgMi4gTXVsdGlwbHkgdGVzdHMgKHRoaXJkIG9wZXJhbmQgaXMgbmV1dHJhbCB6ZXJvIFswRStlbWF4XSkKKy0tICAgMy4gQWRkaXRpb24gdGVzdHMgKGZpcnN0IG9wZXJhbmQgaXMgMSkKKy0tIFRoZSBtdWx0aXBseSBhbmQgYWRkaXRpb24gdGVzdHMgYXJlIGV4dGVuc2l2ZSBiZWNhdXNlIEZNQSBtYXkgaGF2ZQorLS0gaXRzIG93biBkZWRpY2F0ZWQgbXVsdGlwbGljYXRpb24gb3IgYWRkaXRpb24gcm91dGluZShzKSwgYW5kIHRoZXkKKy0tIGFsc28gaW5oZXJlbnRseSBjaGVjayB0aGUgbGVmdC10by1yaWdodCBwcm9wZXJ0aWVzLgorCistLSBTYW5pdHkgY2hlY2tzCitkcWZtYTAwMDEgZm1hICAxICAgMSAgIDEgLT4gICAyCitkcWZtYTAwMDIgZm1hICAxICAgMSAgIDIgLT4gICAzCitkcWZtYTAwMDMgZm1hICAyICAgMiAgIDMgLT4gICA3CitkcWZtYTAwMDQgZm1hICA5ICAgOSAgIDkgLT4gIDkwCitkcWZtYTAwMDUgZm1hIC0xICAgMSAgIDEgLT4gICAwCitkcWZtYTAwMDYgZm1hIC0xICAgMSAgIDIgLT4gICAxCitkcWZtYTAwMDcgZm1hIC0yICAgMiAgIDMgLT4gIC0xCitkcWZtYTAwMDggZm1hIC05ICAgOSAgIDkgLT4gLTcyCitkcWZtYTAwMTEgZm1hICAxICAtMSAgIDEgLT4gICAwCitkcWZtYTAwMTIgZm1hICAxICAtMSAgIDIgLT4gICAxCitkcWZtYTAwMTMgZm1hICAyICAtMiAgIDMgLT4gIC0xCitkcWZtYTAwMTQgZm1hICA5ICAtOSAgIDkgLT4gLTcyCitkcWZtYTAwMTUgZm1hICAxICAgMSAgLTEgLT4gICAwCitkcWZtYTAwMTYgZm1hICAxICAgMSAgLTIgLT4gIC0xCitkcWZtYTAwMTcgZm1hICAyICAgMiAgLTMgLT4gICAxCitkcWZtYTAwMTggZm1hICA5ICAgOSAgLTkgLT4gIDcyCisKKy0tIG5vbi1pbnRlZ2VyIGV4YWN0cworZHFmbWEwMTAwICBmbWEgICAgMjUuMiAgIDYzLjYgICAtNDM4ICAtPiAgMTE2NC43MgorZHFmbWEwMTAxICBmbWEgICAwLjMwMSAgMC4zODAgICAgMzM0ICAtPiAgMzM0LjExNDM4MAorZHFmbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44NgorZHFmbWEwMTAzICBmbWEgICAgNC4yMiAgMC4wNzkgIC05NC42ICAtPiAgLTk0LjI2NjYyCitkcWZtYTAxMDQgIGZtYSAgICAgOTAzICAwLjc5NyAgMC44ODcgIC0+ICA3MjAuNTc4CitkcWZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzCitkcWZtYTAxMDYgIGZtYSAgICAyOC4yICAgIDcyNyAgIDUuNDUgIC0+ICAyMDUwNi44NQorZHFmbWEwMTA3ICBmbWEgICAgICAgNCAgICA2MDUgICAgNjg4ICAtPiAgMzEwOAorZHFmbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzCitkcWZtYTAxMDkgIGZtYSAgIDAuMTY5ICAgLTM0MSAgIDUuNjEgIC0+ICAtNTIuMDE5CitkcWZtYTAxMTAgIGZtYSAgIC03Mi4yICAgICAzMCAgLTUxLjIgIC0+ICAtMjIxNy4yCitkcWZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMKK2RxZm1hMDExMiAgZm1hICAgICAzMTcgICA3Ny4wICAgMTkuMCAgLT4gIDI0NDI4LjAKK2RxZm1hMDExMyAgZm1hICAgICAgNDcgICA2LjU4ICAgMS42MiAgLT4gIDMxMC44OAorZHFmbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNAorZHFmbWEwMTE1ICBmbWEgICAgNzIuNyAgICAyNzQgICAxLjU2ICAtPiAgMTk5MjEuMzYKK2RxZm1hMDExNiAgZm1hICAgICAzMzUgICAgODQ3ICAgICA4MyAgLT4gIDI4MzgyOAorZHFmbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMgorZHFmbWEwMTE4ICBmbWEgICAtMy44NyAgIDMuMDYgICA3OC4wICAtPiAgNjYuMTU3OAorZHFmbWEwMTE5ICBmbWEgICAwLjc0MiAgICAxOTIgICAzNS42ICAtPiAgMTc4LjA2NAorZHFmbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTEKKworLS0gY2FzZXMgd2hlcmUgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHNlcGFyYXRlIG11bHRpcGx5ICsgYWRkOyBlYWNoCistLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZAorLS0gW3RoaXMgaXMgYWJvdXQgMjAlIG9mIGFsbCBzaW1pbGFyICBjYXNlcyBpbiBnZW5lcmFsXQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNC41MDAxMTkwMDIxMDAwMDAyMDk0Njk3MjkzNzU2OTg3NzhFKzM4CitkcWZtYTAyMDIgIGZtYSAgICAgICA2ODUzNzk4NTg2MTM1NTg2NDQ1Ny41Njk0ICAgICAgNjU2NTg3NTc2Mjk3MjA4NjYwNS44NTk2OSAgICAgICAzNTg5MjYzNDQ0NzIzNjc1My4xNzI4MTIgIC0+ICA0LjUwMDExOTAwMjEwMDAwMDIwOTQ2OTcyOTM3NTY5ODc3OUUrMzggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA1Ljk5NjI0ODQ2OTU4NDU5NDM0Njg1ODg4MTYyMDE4NTUxNEUrNDEKK2RxZm1hMDIwOCAgZm1hICAgICAgICAgIDg5MjYxODIyMzQ0NzI3NjI4NTcxLjkgICAgICA2NzE3NTk1ODQ1NjU0MTMxMzgzMzM2Ljg5ICAgICAgNTA2MTAzNjQ5NzI4ODc5NjA3NjI2Ni4xMSAgLT4gIDUuOTk2MjQ4NDY5NTg0NTk0MzQ2ODU4ODgxNjIwMTg1NTEzRSs0MSBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuODk5MjQyOTY4Njc4MjU2OTI0MDIxNTk0NzcwODc0MDcwRSszNAorZHFmbWEwMjEwICBmbWEgICAgICAgMzIwNTA2MjM3MjMyNDQ4Njg1LjQ5NTk3MSAgICAgICA1OTI1NzU5Nzc2NDAxNzk2Ny45ODQ0NDggICAgICAzMjA1NjE1MjM5MDc3NzExNTg5OTEyLjg1ICAtPiAgMS44OTkyNDI5Njg2NzgyNTY5MjQwMjE1OTQ3NzA4NzQwNzFFKzM0IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNy4wNzg1OTY5Nzg4NDI4MDk1Mzc5Mjk2OTk5NTQ4NjAzMDlFKzM3CitkcWZtYTAyMTUgIGZtYSAgICAgICAgMjIwMjQ3ODQzMjU5MTEyMjYzLjE3OTk1ICAgICAgIDMyMTM5MjM0MDI4Nzk4Nzk3OTAwMi44MCAgICAgICAgNDc1MzMyNzk4MTk5OTcxNjc2NTU0NDAgIC0+ICA3LjA3ODU5Njk3ODg0MjgwOTUzNzkyOTY5OTk1NDg2MDMwOEUrMzcgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjIyNDk1NTY2NzU4MTQyNzU1OTc1NDEwNjg2MjM1MDc0M0UrMzcKK2RxZm1hMDIyNiAgZm1hICAgICAgIDIzODgwNzI5NzkwMzY4ODgwNDEyLjE0NDkgICAgICAgNTEyOTQ3MzMzODI3MDY0NzE5LjU1NDA3ICAgICAgMjE3MTE3NDM4NDE5NTkwODI0NTAyLjk2MyAgLT4gIDEuMjI0OTU1NjY3NTgxNDI3NTU5NzU0MTA2ODYyMzUwNzQ0RSszNyBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0yLjUzMDA5NDA0MzI1MzE0ODgwNjI3MjI3NjM2ODU3OTE0NEUrNDIKK2RxZm1hMDIyOSAgZm1hICAgICAgICAyNTM5ODkyMzU3MDE2MDk5NzA2LjQxMjYgICAgICAtOTk2MTQyMjMyNjY3NTA0ODE3NzE3NDM1ICAgICAgIDUzNjgyMDgyNTk4MzE1OTQ5NDI1LjkzNyAgLT4gIC0yLjUzMDA5NDA0MzI1MzE0ODgwNjI3MjI3NjM2ODU3OTE0M0UrNDIgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjcxMzM4NzA4NTc1OTcxMTk1NDMxOTM5MTQxMjc4ODQ1NEUrMzcKK2RxZm1hMDIzMyAgZm1hICAgICAgICA0NTQ2MzM5NDkxMzQxNjI0NDY0LjA4MDQgICAgICAgICAgICAzNzY4NzE3ODY0MTY5MjA1NTgxICAgICAgIDgzNTc4OTgwMjc4NjkwMzk1MTg0LjYyMCAgLT4gIDEuNzEzMzg3MDg1NzU5NzExOTU0MzE5MzkxNDEyNzg4NDUzRSszNyBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDQuMDYyMjc1NjYzNDA1ODIzNzE2NDExNTc5MTE3NzcxNTQ3RSszNQorZHFmbWEwMjM1ICBmbWEgICAgICAgIDQwOTI0MjExOTQzMzgxNjEzMS40MjI1MyAgICAgIDk5MjYzMzgxNTE2Njc0MTUwMS40NzcyNDkgICAgICAgIDcwMTc5NjM2NTQ0NDE2NzU2MTI5NTQ2ICAtPiAgNC4wNjIyNzU2NjM0MDU4MjM3MTY0MTE1NzkxMTc3NzE1NDhFKzM1IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNi4wMDI2MDQzMjc3MzI1Njg0OTA1NjIyNDk4NzUzMDY4MjNFKzQ3CitkcWZtYTAyNTggIGZtYSAgICAgICAgODE3OTQxMzM2NTkzNTQxNzQyMTU5Njg0ICAgICAgIDczMzg2NzMzOTc2OTMxMDcyOTI2NjU5OCAgICAgIDc4NTYzODQ0NjUwOTQyNDE5MzExODMwLjggIC0+ICA2LjAwMjYwNDMyNzczMjU2ODQ5MDU2MjI0OTg3NTMwNjgyMkUrNDcgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi4wMjcwMjI1MTQzODE0NTIxOTc1MTAxMDMzOTUyODM4NzRFKzM5CitkcWZtYTAyNjQgIGZtYSAgICAgICAzODc2MTczMTAxNjkxNjEyNzAuNzM3NTMyICAgICAtNTIyOTQ0MjcwMzQxNDk1NjA2MTIxNi42MiAgICAgIDU3NjY1NjY2ODE2NjUyOTY3MTUwNDczLjUgIC0+ICAtMi4wMjcwMjI1MTQzODE0NTIxOTc1MTAxMDMzOTUyODM4NzNFKzM5IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTcuODU2NTI1MDM5ODAzNTU0MDAxMTQ0MDg5ODQyNzMwMzYxRSszNworZHFmbWEwMjY3ICBmbWEgICAgICAtODQ3NjU1ODQ1NzIwNTY1Mjc0NzAxLjIxMCAgICAgICAgOTI2ODUzMTY1NjQxMTc3MzkuODM5ODQgICAgICAyMjc4MDk1MDA0MTM3NjQyNDQyOS41Njg2ICAtPiAgLTcuODU2NTI1MDM5ODAzNTU0MDAxMTQ0MDg5ODQyNzMwMzYwRSszNyBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuNjk1NTE1NTYyMDExNTIwNzQ2MTI1NjA3NTAyMjM3NTU5RSszOAorZHFmbWEwMjY4ICBmbWEgICAgICAgICAgMjE1OTAyOTAzNjUxMjc2ODUuMzY3NSAgICAgICA3ODUzMTM5MjI3NTc2NTQxMzc5NDI2LjggICAgICAgLTMyNzU4NTk0MzcyMzYxODAuNzYxNTQ0ICAtPiAgMS42OTU1MTU1NjIwMTE1MjA3NDYxMjU2MDc1MDIyMzc1NThFKzM4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTguNDQ4NDIyOTM1NzgzMjg5MjE5NzQ4MTE1MDM4MDE0NzEwRSszOAorZHFmbWEwMjY5ICBmbWEgICAgICAtOTc0MzIwNjM2MjcyODYyNjk3Ljk3MTU4NiAgICAgIDg2NzEwOTEwMzY0MTg2MDI0NzQ0MC43NTYgICAgICAgIC05Nzc1MTcwNzc1OTAyNDU0NzYyLjk4ICAtPiAgLTguNDQ4NDIyOTM1NzgzMjg5MjE5NzQ4MTE1MDM4MDE0NzA5RSszOCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQ2FzZXMgd2hlcmUgbXVsdGlwbHkgd291bGQgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlmIHNlcGFyYXRlCitkcWZtYTAzMDAgIGZtYSAgIDllKzYxNDQgICAgMTAgICAwICAgICAgICAgLT4gSW5maW5pdHkgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEwMzAxICBmbWEgICAxZSs2MTQ0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMDMwMiAgZm1hICAgMWUrNjE0NCAgICAxMCAgIC0xZSs2MTQ0ICAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCBDbGFtcGVkCitkcWZtYTAzMDMgIGZtYSAgIDFlKzYxNDQgICAgMTAgICAtOWUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorLS0gc3Vibm9ybWFsIGV0Yy4KK2RxZm1hMDMwNSAgZm1hICAgMWUtNjE3NiAgICAwLjEgIDAgICAgICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMDMwNiAgZm1hICAgMWUtNjE3NiAgICAwLjEgIDEgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMDMwNyAgZm1hICAgMWUtNjE3NiAgICAwLjEgIDFlLTYxNzYgICAtPiAxRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIEluZmluaXRlIGNvbWJpbmF0aW9ucworZHFmbWEwODAwIGZtYSAgSW5mICAgSW5mICAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFmbWEwODAxIGZtYSAgSW5mICAgSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMDgwMiBmbWEgIEluZiAgLUluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTA4MDMgZm1hICBJbmYgIC1JbmYgIC1JbmYgICAgLT4gLUluZmluaXR5CitkcWZtYTA4MDQgZm1hIC1JbmYgICBJbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwODA1IGZtYSAtSW5mICAgSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQorZHFmbWEwODA2IGZtYSAtSW5mICAtSW5mICAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFmbWEwODA3IGZtYSAtSW5mICAtSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gVHJpcGxlIE5hTiBwcm9wYWdhdGlvbgorZHFmbWEwOTAwIGZtYSAgTmFOMiAgTmFOMyAgTmFONSAgIC0+ICBOYU4yCitkcWZtYTA5MDEgZm1hICAwICAgICBOYU4zICBOYU41ICAgLT4gIE5hTjMKK2RxZm1hMDkwMiBmbWEgIDAgICAgIDAgICAgIE5hTjUgICAtPiAgTmFONQorLS0gZmlyc3Qgc05hTiB3aW5zIChjb25zaWRlciBxTmFOIGZyb20gZWFybGllciBzTmFOIGJlaW5nCistLSBvdmVycmlkZGVuIGJ5IGFuIHNOYU4gaW4gdGhpcmQgb3BlcmFuZCkKK2RxZm1hMDkwMyBmbWEgIHNOYU4xIHNOYU4yIHNOYU4zICAtPiAgTmFOMSBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwOTA0IGZtYSAgMCAgICAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTA5MDUgZm1hICAwICAgICAwICAgICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMDkwNiBmbWEgIHNOYU4xIHNOYU4yIHNOYU4zICAtPiAgTmFOMSBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwOTA3IGZtYSAgTmFONyAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTA5MDggZm1hICBOYU43ICBOYU41ICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTVVMVElQTElDQVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxZm1hMjAwMCBmbWEgIDIgICAgICAyICAgMGUrNjE0NCAgLT4gNAorZHFmbWEyMDAxIGZtYSAgMiAgICAgIDMgICAwZSs2MTQ0ICAtPiA2CitkcWZtYTIwMDIgZm1hICA1ICAgICAgMSAgIDBlKzYxNDQgIC0+IDUKK2RxZm1hMjAwMyBmbWEgIDUgICAgICAyICAgMGUrNjE0NCAgLT4gMTAKK2RxZm1hMjAwNCBmbWEgIDEuMjAgICAyICAgMGUrNjE0NCAgLT4gMi40MAorZHFmbWEyMDA1IGZtYSAgMS4yMCAgIDAgICAwZSs2MTQ0ICAtPiAwLjAwCitkcWZtYTIwMDYgZm1hICAxLjIwICAtMiAgIDBlKzYxNDQgIC0+IC0yLjQwCitkcWZtYTIwMDcgZm1hICAtMS4yMCAgMiAgIDBlKzYxNDQgIC0+IC0yLjQwCitkcWZtYTIwMDggZm1hICAtMS4yMCAgMCAgIDBlKzYxNDQgIC0+IDAuMDAKK2RxZm1hMjAwOSBmbWEgIC0xLjIwIC0yICAgMGUrNjE0NCAgLT4gMi40MAorZHFmbWEyMDEwIGZtYSAgNS4wOSA3LjEgICAwZSs2MTQ0ICAtPiAzNi4xMzkKK2RxZm1hMjAxMSBmbWEgIDIuNSAgICA0ICAgMGUrNjE0NCAgLT4gMTAuMAorZHFmbWEyMDEyIGZtYSAgMi41MCAgIDQgICAwZSs2MTQ0ICAtPiAxMC4wMAorZHFmbWEyMDEzIGZtYSAgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAwZSs2MTQ0ICAtPiAxLjIzNDU2Nzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkCitkcWZtYTIwMTUgZm1hICAyLjUwICAgNCAgIDBlKzYxNDQgIC0+IDEwLjAwCitkcWZtYTIwMTYgZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjAxNyBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC05Ljk5OTk5OTk5OTk5OTk5OTk5ICAgMGUrNjE0NCAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFmbWEyMDE4IGZtYSAgLTkuOTk5OTk5OTk5OTk5OTk5OTkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWZtYTIwMTkgZm1hICAtOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gemVyb3MsIGV0Yy4KK2RxZm1hMjAyMSBmbWEgICAwICAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyMDIyIGZtYSAgIDAgICAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTIwMjMgZm1hICAtMCAgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjAyNCBmbWEgIC0wICAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyMDI1IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTIwMjYgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjAyNyBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyMDI4IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTIwMzAgZm1hICAgNS4wMCAgIDFFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDA1MDAKK2RxZm1hMjAzMSBmbWEgICAwMC4wMCAgMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMAorZHFmbWEyMDMyIGZtYSAgIDAwLjAwICAwRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFmbWEyMDMzIGZtYSAgIDBFLTMgICAwMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZHFmbWEyMDM0IGZtYSAgLTUuMDAgICAxRS0zICAgIDBlKzYxNDQgIC0+IC0wLjAwNTAwCitkcWZtYTIwMzUgZm1hICAtMDAuMDAgIDAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAKK2RxZm1hMjAzNiBmbWEgIC0wMC4wMCAgMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxZm1hMjAzNyBmbWEgIC0wRS0zICAgMDAuMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RxZm1hMjAzOCBmbWEgICA1LjAwICAtMUUtMyAgICAwZSs2MTQ0ICAtPiAtMC4wMDUwMAorZHFmbWEyMDM5IGZtYSAgIDAwLjAwIC0wLjAwMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwCitkcWZtYTIwNDAgZm1hICAgMDAuMDAgLTBFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkcWZtYTIwNDEgZm1hICAgMEUtMyAgLTAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkcWZtYTIwNDIgZm1hICAtNS4wMCAgLTFFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDA1MDAKK2RxZm1hMjA0MyBmbWEgIC0wMC4wMCAtMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMAorZHFmbWEyMDQ0IGZtYSAgLTAwLjAwIC0wRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFmbWEyMDQ1IGZtYSAgLTBFLTMgIC0wMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitkcWZtYTIwNTAgZm1hICAxLjIwIDMgICAgICAgICAgMGUrNjE0NCAgLT4gMy42MAorZHFmbWEyMDUxIGZtYSAgNyAgICAzICAgICAgICAgIDBlKzYxNDQgIC0+IDIxCitkcWZtYTIwNTIgZm1hICAwLjkgIDAuOCAgICAgICAgMGUrNjE0NCAgLT4gMC43MgorZHFmbWEyMDUzIGZtYSAgMC45ICAtMCAgICAgICAgIDBlKzYxNDQgIC0+IDAuMAorZHFmbWEyMDU0IGZtYSAgNjU0MzIxIDY1NDMyMSAgIDBlKzYxNDQgIC0+IDQyODEzNTk3MTA0MQorCitkcWZtYTIwNjAgZm1hICAxMjMuNDUgMWU3ICAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzkKK2RxZm1hMjA2MSBmbWEgIDEyMy40NSAxZTggICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTAKK2RxZm1hMjA2MiBmbWEgIDEyMy40NSAxZSs5ICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTEKK2RxZm1hMjA2MyBmbWEgIDEyMy40NSAxZTEwICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTIKK2RxZm1hMjA2NCBmbWEgIDEyMy40NSAxZTExICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTMKK2RxZm1hMjA2NSBmbWEgIDEyMy40NSAxZTEyICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTQKK2RxZm1hMjA2NiBmbWEgIDEyMy40NSAxZTEzICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTUKKworCistLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMKKy0tICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcWZtYTIwODAgZm1hICAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgICAwZSs2MTQ0ICAtPiAxMjMwMTIzNDU2NDU2NzguOQorZHFmbWEyMDg0IGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RxZm1hMjA5MCBmbWEgIDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAgIDBlKzYxNDQgIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkcWZtYTIwOTQgZm1hICAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgICAwZSs2MTQ0ICAtPiAxMjMwMTIzNDU2NDU2NzguOQorCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzCitkcWZtYTIxMDEgZm1hICA5IDkgICAgIDBlKzYxNDQgIC0+IDgxCitkcWZtYTIxMDIgZm1hICA5IDkwICAgICAwZSs2MTQ0ICAtPiA4MTAKK2RxZm1hMjEwMyBmbWEgIDkgOTAwICAgICAwZSs2MTQ0ICAtPiA4MTAwCitkcWZtYTIxMDQgZm1hICA5IDkwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwCitkcWZtYTIxMDUgZm1hICA5IDkwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAKK2RxZm1hMjEwNiBmbWEgIDkgOTAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwCitkcWZtYTIxMDcgZm1hICA5IDkwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwCitkcWZtYTIxMDggZm1hICA5IDkwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAKK2RxZm1hMjEwOSBmbWEgIDkgOTAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwCitkcWZtYTIxMTAgZm1hICA5IDkwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwCitkcWZtYTIxMTEgZm1hICA5IDkwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAKK2RxZm1hMjExMiBmbWEgIDkgOTAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwCitkcWZtYTIxMTMgZm1hICA5IDkwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwCitkcWZtYTIxMTQgZm1hICA5IDkwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAKK2RxZm1hMjExNSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjExNiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAKKy0tZHFmbWEyMTE3IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjExOCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjExOSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZHFmbWEyMTIwIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjEyMSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjEyMiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZHFmbWEyMTIzIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2FycmllcworZHFmbWEyMTMxIGZtYSAgMyAzICAgICAwZSs2MTQ0ICAtPiA5CitkcWZtYTIxMzIgZm1hICAzIDMwICAgICAwZSs2MTQ0ICAtPiA5MAorZHFmbWEyMTMzIGZtYSAgMyAzMDAgICAgIDBlKzYxNDQgIC0+IDkwMAorZHFmbWEyMTM0IGZtYSAgMyAzMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwCitkcWZtYTIxMzUgZm1hICAzIDMwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMAorZHFmbWEyMTM2IGZtYSAgMyAzMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMAorZHFmbWEyMTM3IGZtYSAgMyAzMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwCitkcWZtYTIxMzggZm1hICAzIDMwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMAorZHFmbWEyMTM5IGZtYSAgMyAzMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMAorZHFmbWEyMTQwIGZtYSAgMyAzMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwCitkcWZtYTIxNDEgZm1hICAzIDMwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMAorZHFmbWEyMTQyIGZtYSAgMyAzMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMAorZHFmbWEyMTQzIGZtYSAgMyAzMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwCitkcWZtYTIxNDQgZm1hICAzIDMwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMAorZHFmbWEyMTQ1IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTQ2IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwCitkcWZtYTIxNDcgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTQ4IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTQ5IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIxNTAgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTUxIGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTUyIGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIxNTMgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitkcWZtYTIyNjMgZm1hICAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAgMGUrNjE0NCAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgyOTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcKK2RxZm1hMjMwMSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5ICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDIgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjMwNCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDUgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDYgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjMwNyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDggZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDkgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjMxMCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTEgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTIgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjMxMyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTQgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTUgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjMxNiBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTcgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZAorZHFmbWEyMzE4IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBSb3VuZGVkCitkcWZtYTIzMTkgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2ICBSb3VuZGVkCitkcWZtYTIzMjAgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgUm91bmRlZAorZHFmbWEyMzIxIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4ICBSb3VuZGVkCitkcWZtYTIzMjIgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM5ICBSb3VuZGVkCitkcWZtYTIzMjMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs0MCAgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworZHFmbWEyNTA0ICBmbWEgICAwRS00MjYwIDEwMDBFLTQyNjAgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBDbGFtcGVkCitkcWZtYTI1MDUgIGZtYSAgIDEwMEUrNDI2MCAwRSs0MjYwICAgICAwZSs2MTQ0ICAtPiAwRSs2MTExIENsYW1wZWQKKworLS0gbWl4ZWQgd2l0aCB6ZXJvcworZHFmbWEyNTQxIGZtYSAgIDAgICAgLTEgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjU0MiBmbWEgIC0wICAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTI1NDMgZm1hICAgMCAgICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyNTQ0IGZtYSAgLTAgICAgIDEgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjU0NSBmbWEgIC0xICAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTI1NDYgZm1hICAtMSAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyNTQ3IGZtYSAgIDEgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjU0OCBmbWEgICAxICAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwCisKK2RxZm1hMjU1MSBmbWEgICAwLjAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1MiBmbWEgIC0wLjAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1MyBmbWEgICAwLjAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1NCBmbWEgIC0wLjAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1NSBmbWEgIC0xLjAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1NiBmbWEgIC0xLjAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1NyBmbWEgICAxLjAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1OCBmbWEgICAxLjAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKKworZHFmbWEyNTYxIGZtYSAgIDAgICAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTYyIGZtYSAgLTAgICAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTYzIGZtYSAgIDAgICAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTY0IGZtYSAgLTAgICAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTY1IGZtYSAgLTEgICAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTY2IGZtYSAgLTEgICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTY3IGZtYSAgIDEgICAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTY4IGZtYSAgIDEgICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorCitkcWZtYTI1NzEgZm1hICAgMC4wICAtMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTcyIGZtYSAgLTAuMCAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3MyBmbWEgICAwLjAgICAxLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1NzQgZm1hICAtMC4wICAgMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTc1IGZtYSAgLTEuMCAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3NiBmbWEgIC0xLjAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1NzcgZm1hICAgMS4wICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTc4IGZtYSAgIDEuMCAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3OSBmbWEgICAxLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1MzAgZm1hICAtMS4wICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTMxIGZtYSAgLTEuMCAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjUzMiBmbWEgICAxLjAgIC0wLjAgICAgLTBlKzYxNDQgIC0+IC0wLjAwCitkcWZtYTI1MzMgZm1hICAgMS4wICAgMC4wICAgIC0wZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTM0IGZtYSAgLTEuMCAgLTAuMCAgICAtMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjUzNSBmbWEgIC0xLjAgICAwLjAgICAgLTBlKzYxNDQgIC0+IC0wLjAwCisKKworLS0gU3BlY2lhbHMKK2RxZm1hMjU4MCBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNTgxIGZtYSAgIEluZiAgLTEwMDAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI1ODIgZm1hICAgSW5mICAtMSAgICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjU4MyBmbWEgICBJbmYgIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI1ODQgZm1hICAgSW5mICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNTg1IGZtYSAgIEluZiAgIDEgICAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI1ODYgZm1hICAgSW5mICAgMTAwMCAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjU4NyBmbWEgICBJbmYgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNTg4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI1ODkgZm1hICAtSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjU5MCBmbWEgIC0xICAgICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNTkxIGZtYSAgLTAgICAgIEluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjU5MiBmbWEgICAwICAgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI1OTMgZm1hICAgMSAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjU5NCBmbWEgICAxMDAwICBJbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNTk1IGZtYSAgIEluZiAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CisKK2RxZm1hMjYwMCBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNjAxIGZtYSAgLUluZiAgLTEwMDAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI2MDIgZm1hICAtSW5mICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjYwMyBmbWEgIC1JbmYgIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2MDQgZm1hICAtSW5mICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjA1IGZtYSAgLUluZiAgIDEgICAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI2MDYgZm1hICAtSW5mICAgMTAwMCAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjYwNyBmbWEgIC1JbmYgICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNjA4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI2MDkgZm1hICAtSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjYxMCBmbWEgIC0xICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNjExIGZtYSAgLTAgICAgLUluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjYxMiBmbWEgICAwICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2MTMgZm1hICAgMSAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjYxNCBmbWEgICAxMDAwIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNjE1IGZtYSAgIEluZiAgLUluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CisKK2RxZm1hMjYyMSBmbWEgICBOYU4gLUluZiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyMiBmbWEgICBOYU4gLTEwMDAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyMyBmbWEgICBOYU4gLTEgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyNCBmbWEgICBOYU4gLTAgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyNSBmbWEgICBOYU4gIDAgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyNiBmbWEgICBOYU4gIDEgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyNyBmbWEgICBOYU4gIDEwMDAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyOCBmbWEgICBOYU4gIEluZiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyOSBmbWEgICBOYU4gIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzMCBmbWEgIC1JbmYgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzMSBmbWEgIC0xMDAwIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzMiBmbWEgIC0xICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzMyBmbWEgIC0wICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzNCBmbWEgICAwICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzNSBmbWEgICAxICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzNiBmbWEgICAxMDAwIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzNyBmbWEgICBJbmYgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KKworZHFmbWEyNjQxIGZtYSAgIHNOYU4gLUluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY0MiBmbWEgICBzTmFOIC0xMDAwICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDMgZm1hICAgc05hTiAtMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjQ0IGZtYSAgIHNOYU4gLTAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY0NSBmbWEgICBzTmFOICAwICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDYgZm1hICAgc05hTiAgMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjQ3IGZtYSAgIHNOYU4gIDEwMDAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY0OCBmbWEgICBzTmFOICBOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDkgZm1hICAgc05hTiBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjUwIGZtYSAgIE5hTiAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1MSBmbWEgIC1JbmYgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTIgZm1hICAtMTAwMCBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjUzIGZtYSAgLTEgICAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1NCBmbWEgIC0wICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTUgZm1hICAgMCAgICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjU2IGZtYSAgIDEgICAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1NyBmbWEgICAxMDAwIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTggZm1hICAgSW5mICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjU5IGZtYSAgIE5hTiAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFmbWEyNjYxIGZtYSAgIE5hTjkgLUluZiAgICAgMGUrNjE0NCAgLT4gIE5hTjkKK2RxZm1hMjY2MiBmbWEgICBOYU44ICA5OTkgICAgIDBlKzYxNDQgIC0+ICBOYU44CitkcWZtYTI2NjMgZm1hICAgTmFONzEgSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFONzEKK2RxZm1hMjY2NCBmbWEgICBOYU42ICBOYU41ICAgIDBlKzYxNDQgIC0+ICBOYU42CitkcWZtYTI2NjUgZm1hICAtSW5mICAgTmFONCAgICAwZSs2MTQ0ICAtPiAgTmFONAorZHFmbWEyNjY2IGZtYSAgLTk5OSAgIE5hTjMzICAgMGUrNjE0NCAgLT4gIE5hTjMzCitkcWZtYTI2NjcgZm1hICAgSW5mICAgTmFOMiAgICAwZSs2MTQ0ICAtPiAgTmFOMgorCitkcWZtYTI2NzEgZm1hICAgc05hTjk5IC1JbmYgICAgICAwZSs2MTQ0ICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3MiBmbWEgICBzTmFOOTggLTExICAgICAgIDBlKzYxNDQgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjczIGZtYSAgIHNOYU45NyAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NzQgZm1hICAgc05hTjE2IHNOYU45NCAgICAwZSs2MTQ0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3NSBmbWEgICBOYU45NSAgc05hTjkzICAgIDBlKzYxNDQgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjc2IGZtYSAgLUluZiAgICBzTmFOOTIgICAgMGUrNjE0NCAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NzcgZm1hICAgMDg4ICAgIHNOYU45MSAgICAwZSs2MTQ0ICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3OCBmbWEgICBJbmYgICAgc05hTjkwICAgIDBlKzYxNDQgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjc5IGZtYSAgIE5hTiAgICBzTmFOODkgICAgMGUrNjE0NCAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RxZm1hMjY4MSBmbWEgIC1OYU45IC1JbmYgICAgIDBlKzYxNDQgIC0+IC1OYU45CitkcWZtYTI2ODIgZm1hICAtTmFOOCAgOTk5ICAgICAwZSs2MTQ0ICAtPiAtTmFOOAorZHFmbWEyNjgzIGZtYSAgLU5hTjcxIEluZiAgICAgMGUrNjE0NCAgLT4gLU5hTjcxCitkcWZtYTI2ODQgZm1hICAtTmFONiAtTmFONSAgICAwZSs2MTQ0ICAtPiAtTmFONgorZHFmbWEyNjg1IGZtYSAgLUluZiAgLU5hTjQgICAgMGUrNjE0NCAgLT4gLU5hTjQKK2RxZm1hMjY4NiBmbWEgIC05OTkgIC1OYU4zMyAgIDBlKzYxNDQgIC0+IC1OYU4zMworZHFmbWEyNjg3IGZtYSAgIEluZiAgLU5hTjIgICAgMGUrNjE0NCAgLT4gLU5hTjIKKworZHFmbWEyNjkxIGZtYSAgLXNOYU45OSAtSW5mICAgICAgMGUrNjE0NCAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTIgZm1hICAtc05hTjk4IC0xMSAgICAgICAwZSs2MTQ0ICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY5MyBmbWEgIC1zTmFOOTcgIE5hTiAgICAgIDBlKzYxNDQgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjk0IGZtYSAgLXNOYU4xNiAtc05hTjk0ICAgMGUrNjE0NCAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTUgZm1hICAtTmFOOTUgIC1zTmFOOTMgICAwZSs2MTQ0ICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY5NiBmbWEgIC1JbmYgICAgLXNOYU45MiAgIDBlKzYxNDQgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjk3IGZtYSAgIDA4OCAgICAtc05hTjkxICAgMGUrNjE0NCAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTggZm1hICAgSW5mICAgIC1zTmFOOTAgICAwZSs2MTQ0ICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY5OSBmbWEgIC1OYU4gICAgLXNOYU44OSAgIDBlKzYxNDQgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkcWZtYTI3MDEgZm1hICAtTmFOICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDIgZm1hICAtTmFOICAgOTk5ICAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDMgZm1hICAtTmFOICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDQgZm1hICAtTmFOICAtTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDUgZm1hICAtSW5mICAtTmFOMCAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDYgZm1hICAtOTk5ICAtTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDcgZm1hICAgSW5mICAtTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOCisKK2RxZm1hMjcxMSBmbWEgIC1zTmFOICAgLUluZiAgICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxMiBmbWEgIC1zTmFOICAgLTExICAgICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxMyBmbWEgIC1zTmFOMDAgIE5hTiAgICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxNCBmbWEgIC1zTmFOICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxNSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxNiBmbWEgIC1JbmYgICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxNyBmbWEgICAwODggICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxOCBmbWEgICBJbmYgICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxOSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZHFmbWEyNzUxIGZtYSAgIDFlKzQyNzcgIDFlKzMzMTEgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI3NTIgZm1hICAgMWUrNDI3NyAtMWUrMzMxMSAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc1MyBmbWEgIC0xZSs0Mjc3ICAxZSszMzExICAgMGUrNjE0NCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzU0IGZtYSAgLTFlKzQyNzcgLTFlKzMzMTEgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI3NTUgZm1hICAgMWUtNDI3NyAgMWUtMzMxMSAgIDBlKzYxNDQgIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjc1NiBmbWEgICAxZS00Mjc3IC0xZS0zMzExICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyNzU3IGZtYSAgLTFlLTQyNzcgIDFlLTMzMTEgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTI3NTggZm1hICAtMWUtNDI3NyAtMWUtMzMxMSAgIDBlKzYxNDQgIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkcWZtYTI3NjAgZm1hICAxZS02MDY5IDFlLTEwMSAgIDBlKzYxNDQgIC0+IDFFLTYxNzAgU3Vibm9ybWFsCitkcWZtYTI3NjEgZm1hICAxZS02MDY5IDFlLTEwMiAgIDBlKzYxNDQgIC0+IDFFLTYxNzEgU3Vibm9ybWFsCitkcWZtYTI3NjIgZm1hICAxZS02MDY5IDFlLTEwMyAgIDBlKzYxNDQgIC0+IDFFLTYxNzIgU3Vibm9ybWFsCitkcWZtYTI3NjMgZm1hICAxZS02MDY5IDFlLTEwNCAgIDBlKzYxNDQgIC0+IDFFLTYxNzMgU3Vibm9ybWFsCitkcWZtYTI3NjQgZm1hICAxZS02MDY5IDFlLTEwNSAgIDBlKzYxNDQgIC0+IDFFLTYxNzQgU3Vibm9ybWFsCitkcWZtYTI3NjUgZm1hICAxZS02MDY5IDFlLTEwNiAgIDBlKzYxNDQgIC0+IDFFLTYxNzUgU3Vibm9ybWFsCitkcWZtYTI3NjYgZm1hICAxZS02MDY5IDFlLTEwNyAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgU3Vibm9ybWFsCitkcWZtYTI3NjcgZm1hICAxZS02MDY5IDFlLTEwOCAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyNzY4IGZtYSAgMWUtNjA2OSAxZS0xMDkgICAwZSs2MTQ0ICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjc2OSBmbWEgIDFlLTYwNjkgMWUtMTEwICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkcWZtYTI3NzAgZm1hICAxZSs0MCAxZSs2MTAxICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgQ2xhbXBlZAorZHFmbWEyNzcxIGZtYSAgMWUrNDAgMWUrNjEwMiAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgQ2xhbXBlZAorZHFmbWEyNzcyIGZtYSAgMWUrNDAgMWUrNjEwMyAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgIENsYW1wZWQKK2RxZm1hMjc3MyBmbWEgIDFlKzQwIDFlKzYxMDQgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZAorZHFmbWEyNzc0IGZtYSAgMWUrNDAgMWUrNjEwNSAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzc1IGZtYSAgMWUrNDAgMWUrNjEwNiAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzc2IGZtYSAgMWUrNDAgMWUrNjEwNyAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzc3IGZtYSAgMWUrNDAgMWUrNjEwOCAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzc4IGZtYSAgMWUrNDAgMWUrNjEwOSAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzc5IGZtYSAgMWUrNDAgMWUrNjExMCAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitkcWZtYTI4MDEgZm1hICAgMS4wMDAwRS02MTcyICAxICAgICAgIDBlKzYxNDQgIC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwKK2RxZm1hMjgwMiBmbWEgICAxLjAwMEUtNjE3MiAgIDFlLTEgICAgMGUrNjE0NCAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFmbWEyODAzIGZtYSAgIDEuMDBFLTYxNzIgICAgMWUtMiAgICAwZSs2MTQ0ICAtPiAxLjAwRS02MTc0ICAgU3Vibm9ybWFsCitkcWZtYTI4MDQgZm1hICAgMS4wRS02MTcyICAgICAxZS0zICAgIDBlKzYxNDQgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxZm1hMjgwNSBmbWEgICAxLjBFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxZm1hMjgwNiBmbWEgICAxLjNFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgwNyBmbWEgICAxLjVFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgwOCBmbWEgICAxLjdFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgwOSBmbWEgICAyLjNFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxMCBmbWEgICAyLjVFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxMSBmbWEgICAyLjdFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxMiBmbWEgICAxLjQ5RS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxMyBmbWEgICAxLjUwRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxNCBmbWEgICAxLjUxRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxNSBmbWEgICAyLjQ5RS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxNiBmbWEgICAyLjUwRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxNyBmbWEgICAyLjUxRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFmbWEyODE4IGZtYSAgIDFFLTYxNzIgICAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwKK2RxZm1hMjgxOSBmbWEgICAzRS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyODIwIGZtYSAgIDVFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTI4MjEgZm1hICAgN0UtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MjIgZm1hICAgOUUtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MjMgZm1hICAgOS45RS02MTcyICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxZm1hMjgyNCBmbWEgICAxRS02MTcyICAgICAgLTFlLTQgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgU3Vibm9ybWFsCitkcWZtYTI4MjUgZm1hICAgM0UtNjE3MiAgICAgIC0xZS01ICAgIDBlKzYxNDQgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjgyNiBmbWEgIC01RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyODI3IGZtYSAgIDdFLTYxNzIgICAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFmbWEyODI4IGZtYSAgLTlFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFmbWEyODI5IGZtYSAgIDkuOUUtNjE3MiAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFmbWEyODMwIGZtYSAgIDMuMEUtNjE3MiAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RxZm1hMjgzMSBmbWEgICAxLjBFLTU5NzcgICAgIDFlLTIwMCAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyODMyIGZtYSAgIDEuMEUtNTk3NyAgICAgMWUtMTk5ICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICBTdWJub3JtYWwgUm91bmRlZAorZHFmbWEyODMzIGZtYSAgIDEuMEUtNTk3NyAgICAgMWUtMTk4ICAgMGUrNjE0NCAgLT4gMS4wRS02MTc1ICAgIFN1Ym5vcm1hbAorZHFmbWEyODM0IGZtYSAgIDIuMEUtNTk3NyAgICAgMmUtMTk4ICAgMGUrNjE0NCAgLT4gNC4wRS02MTc1ICAgIFN1Ym5vcm1hbAorZHFmbWEyODM1IGZtYSAgIDQuMEUtNTk3NyAgICAgNGUtMTk4ICAgMGUrNjE0NCAgLT4gMS42MEUtNjE3NCAgIFN1Ym5vcm1hbAorZHFmbWEyODM2IGZtYSAgMTAuMEUtNTk3NyAgICAxMGUtMTk4ICAgMGUrNjE0NCAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFmbWEyODM3IGZtYSAgMzAuMEUtNTk3NyAgICAzMGUtMTk4ICAgMGUrNjE0NCAgLT4gOS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFmbWEyODM4IGZtYSAgNDAuMEUtNTk4MiAgICA0MGUtMTY2ICAgMGUrNjE0NCAgLT4gMS42MDAwRS02MTQ1IFN1Ym5vcm1hbAorZHFmbWEyODM5IGZtYSAgNDAuMEUtNTk4MiAgICA0MGUtMTY1ICAgMGUrNjE0NCAgLT4gMS42MDAwRS02MTQ0IFN1Ym5vcm1hbAorZHFmbWEyODQwIGZtYSAgNDAuMEUtNTk4MiAgICA0MGUtMTY0ICAgMGUrNjE0NCAgLT4gMS42MDAwRS02MTQzCisKKy0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aAorZHFmbWEyODcwIGZtYSAgMTAwICA5Ljk5OUUrNjE0MyAgICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkcWZtYTI4NzEgZm1hICAxMDAgLTkuOTk5RSs2MTQzICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RxZm1hMjg3MiBmbWEgICAgICAgOS45OTlFKzYxNDMgMTAwICAgMGUrNjE0NCAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZHFmbWEyODczIGZtYSAgICAgIC05Ljk5OUUrNjE0MyAxMDAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitkcWZtYTI4ODEgZm1hICAgMS4yMzQ3RS02MTMzIDEuMjM0N0UtNDAgICAgMGUrNjE0NCAgLT4gIDEuNTI0RS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4ODIgZm1hICAgMS4yMzRFLTYxMzMgMS4yMzRFLTQwICAgICAgMGUrNjE0NCAgLT4gIDEuNTIzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4ODMgZm1hICAgMS4yM0UtNjEzMyAgMS4yM0UtNDAgICAgICAgMGUrNjE0NCAgLT4gIDEuNTEzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4ODQgZm1hICAgMS4yRS02MTMzICAgMS4yRS00MCAgICAgICAgMGUrNjE0NCAgLT4gIDEuNDRFLTYxNzMgIFN1Ym5vcm1hbAorZHFmbWEyODg1IGZtYSAgIDEuMkUtNjEzMyAgIDEuMkUtNDEgICAgICAgIDBlKzYxNDQgIC0+ICAxLjQ0RS02MTc0ICBTdWJub3JtYWwKK2RxZm1hMjg4NiBmbWEgICAxLjJFLTYxMzMgICAxLjJFLTQyICAgICAgICAwZSs2MTQ0ICAtPiAgMS40RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxZm1hMjg4NyBmbWEgICAxLjJFLTYxMzMgICAxLjNFLTQyICAgICAgICAwZSs2MTQ0ICAtPiAgMS42RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxZm1hMjg4OCBmbWEgICAxLjNFLTYxMzMgICAxLjNFLTQyICAgICAgICAwZSs2MTQ0ICAtPiAgMS43RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxZm1hMjg4OSBmbWEgICAxLjNFLTYxMzMgICAxLjNFLTQzICAgICAgICAwZSs2MTQ0ICAtPiAgICAyRS02MTc2ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxZm1hMjg5MCBmbWEgICAxLjNFLTYxMzQgICAxLjNFLTQzICAgICAgICAwZSs2MTQ0ICAtPiAgICAwRS02MTc2ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCitkcWZtYTI4OTEgZm1hICAgMS4yMzQ1RS0zOSAgICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyMzRFLTYxNzIgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZm1hMjg5MiBmbWEgICAxLjIzNDU2RS0zOSAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODkzIGZtYSAgIDEuMjM0NUUtNDAgICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZm1hMjg5NCBmbWEgICAxLjIzNDU2RS00MCAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjNFLTYxNzMgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4OTUgZm1hICAgMS4yMzQ1RS00MSAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTJFLTYxNzQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODk2IGZtYSAgIDEuMjM0NTZFLTQxICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdworLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0CitkcWZtYTI5MDYgZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgIDEgICAgICAgICAgICAgICAgICAgICAgICAgMGUrNjE0NCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMKK2RxZm1hMjkwNyBmbWEgICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgIDBlKzYxNDQgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKKy0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluCitkcWZtYTI5MDggZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gaHVnZXN0CitkcWZtYTI5MDkgZm1hICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjcgSW5leGFjdCBSb3VuZGVkCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorcHJlY2lzaW9uOiAgIDM0Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0MworZHFmbWEyMTAwMSAgZm1hICAxMzBFLTIgIDEyMEUtMiAgIDBlKzYxNDQgIC0+IDEuNTYwMAorZHFmbWEyMTAwMiAgZm1hICAxMzBFLTIgIDEyRS0xICAgIDBlKzYxNDQgIC0+IDEuNTYwCitkcWZtYTIxMDAzICBmbWEgIDEzMEUtMiAgMUUwICAgICAgMGUrNjE0NCAgLT4gMS4zMAorZHFmbWEyMTAwNCAgZm1hICAxRTIgICAgIDFFNCAgICAgIDBlKzYxNDQgIC0+IDFFKzYKKworLS0gTnVsbCB0ZXN0cworZHFmbWEyOTkwIGZtYSAgMTAgICMgICAwZSs2MTQ0ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjk5MSBmbWEgICAjIDEwICAgMGUrNjE0NCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKworLS0gQURESVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZHFhZGQzMDAxIGZtYSAgMSAgMSAgICAgICAxICAgICAgIC0+ICAyCitkcWFkZDMwMDIgZm1hICAxICAyICAgICAgIDMgICAgICAgLT4gIDUKK2RxYWRkMzAwMyBmbWEgIDEgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQorZHFhZGQzMDA0IGZtYSAgMSAgJzUnICAgICAnLTMnICAgIC0+ICAyCitkcWFkZDMwMDUgZm1hICAxICAnLTUnICAgICctMycgICAgLT4gIC04CitkcWFkZDMwMDYgZm1hICAxICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUKK2RxYWRkMzAwNyBmbWEgIDEgICcwLjcnICAgJzAuMycgICAtPiAgMS4wCitkcWFkZDMwMDggZm1hICAxICAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTAKK2RxYWRkMzAwOSBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5JworZHFhZGQzMDEwIGZtYSAgMSAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnCisKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcWFkZDMwMTEgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ2JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxMiBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RxYWRkMzAxMyBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQzMDE0IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDknICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDE1IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5JyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDE2IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDE3IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMCcgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDE4IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDE5IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDIwIGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTEnICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDMwMjEgZm1hICAxICAwIDEgLT4gMQorZHFhZGQzMDIyIGZtYSAgMSAgMSAxIC0+IDIKK2RxYWRkMzAyMyBmbWEgIDEgIDIgMSAtPiAzCitkcWFkZDMwMjQgZm1hICAxICAzIDEgLT4gNAorZHFhZGQzMDI1IGZtYSAgMSAgNCAxIC0+IDUKK2RxYWRkMzAyNiBmbWEgIDEgIDUgMSAtPiA2CitkcWFkZDMwMjcgZm1hICAxICA2IDEgLT4gNworZHFhZGQzMDI4IGZtYSAgMSAgNyAxIC0+IDgKK2RxYWRkMzAyOSBmbWEgIDEgIDggMSAtPiA5CitkcWFkZDMwMzAgZm1hICAxICA5IDEgLT4gMTAKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitkcWFkZDMwMzEgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2RxYWRkMzAzMiBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5JworZHFhZGQzMDMzIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnCitkcWFkZDMwMzQgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKKworZHFhZGQzMDM1IGZtYSAgMSAgJzcwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMwMzYgZm1hICAxICAnNzAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMwMzcgZm1hICAxICAnNzAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDM4IGZtYSAgMSAgJzcwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMwMzkgZm1hICAxICAnNzAwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RSszOCcgUm91bmRlZAorCistLSBzeW1tZXRyeToKK2RxYWRkMzA0MCBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDQxIGZtYSAgMSAgJzEwMDAwZSszNCcgICc3MDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDQyIGZtYSAgMSAgJzEwMDAwZSszNCcgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzA0NCBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDQ1IGZtYSAgMSAgJzEwMDAwZSszNCcgICc3MDAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UrMzgnIFJvdW5kZWQKKworLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZworZHFhZGQzMDQ2IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycKK2RxYWRkMzA0NyBmbWEgIDEgICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJworZHFhZGQzMDQ4IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJworZHFhZGQzMDQ5IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcKK2RxYWRkMzA1MCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJworZHFhZGQzMDUxIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJworZHFhZGQzMDUyIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICcxMDAwMDAwNzAwMDAwMCcKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZHFhZGQzMDUzIGZtYSAgMSAgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJworZHFhZGQzMDU0IGZtYSAgMSAgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycKK2RxYWRkMzA1NSBmbWEgIDEgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnCitkcWFkZDMwNTYgZm1hICAxICAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycKK2RxYWRkMzA1NyBmbWEgIDEgICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnCisKKy0tIGxlYWRpbmcgemVybyBwcmVzZXJ2YXRpb24KK2RxYWRkMzA2MSBmbWEgIDEgIDEgJzAuMDAwMScgLT4gJzEuMDAwMScKK2RxYWRkMzA2MiBmbWEgIDEgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJworZHFhZGQzMDYzIGZtYSAgMSAgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwMScKK2RxYWRkMzA2NCBmbWEgIDEgIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScKK2RxYWRkMzA2NSBmbWEgIDEgIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJworCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitkcWFkZDMwNzAgZm1hICAxICAxICAwICAgIC0+IDEKK2RxYWRkMzA3MSBmbWEgIDEgIDEgMC4gICAgLT4gMQorZHFhZGQzMDcyIGZtYSAgMSAgMSAgLjAgICAtPiAxLjAKK2RxYWRkMzA3MyBmbWEgIDEgIDEgMC4wICAgLT4gMS4wCitkcWFkZDMwNzQgZm1hICAxICAxIDAuMDAgIC0+IDEuMDAKK2RxYWRkMzA3NSBmbWEgIDEgICAwICAxICAgLT4gMQorZHFhZGQzMDc2IGZtYSAgMSAgMC4gIDEgICAtPiAxCitkcWFkZDMwNzcgZm1hICAxICAgLjAgMSAgIC0+IDEuMAorZHFhZGQzMDc4IGZtYSAgMSAgMC4wIDEgICAtPiAxLjAKK2RxYWRkMzA3OSBmbWEgIDEgIDAuMDAgMSAgLT4gMS4wMAorCistLSBzb21lIGNhcnJpZXMKK2RxYWRkMzA4MCBmbWEgIDEgIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkKK2RxYWRkMzA4MSBmbWEgIDEgIDk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwCitkcWFkZDMwODIgZm1hICAxICAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwCitkcWFkZDMwODMgZm1hICAxICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDAKK2RxYWRkMzA4NCBmbWEgIDEgICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwCitkcWFkZDMwODUgZm1hICAxICAgICAgOTk5OTkgMSAgLT4gMTAwMDAwCitkcWFkZDMwODYgZm1hICAxICAgICAgIDk5OTkgMSAgLT4gMTAwMDAKK2RxYWRkMzA4NyBmbWEgIDEgICAgICAgIDk5OSAxICAtPiAxMDAwCitkcWFkZDMwODggZm1hICAxICAgICAgICAgOTkgMSAgLT4gMTAwCitkcWFkZDMwODkgZm1hICAxICAgICAgICAgIDkgMSAgLT4gMTAKKworCistLSBtb3JlIExIUyBzd2FwcworZHFhZGQzMDkwIGZtYSAgMSAgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitkcWFkZDMwOTEgZm1hICAxICAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3JworZHFhZGQzMDkyIGZtYSAgMSAgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JworZHFhZGQzMDkzIGZtYSAgMSAgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitkcWFkZDMwOTQgZm1hICAxICAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycKK2RxYWRkMzA5NSBmbWEgIDEgICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JworZHFhZGQzMDk2IGZtYSAgMSAgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitkcWFkZDMwOTcgZm1hICAxICAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3JworZHFhZGQzMDk4IGZtYSAgMSAgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK2RxYWRkMzA5OSBmbWEgIDEgICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK2RxYWRkMzEwMCBmbWEgIDEgICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnCitkcWFkZDMxMDEgZm1hICAxICAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCitkcWFkZDMxMDIgZm1hICAxICAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK2RxYWRkMzEwMyBmbWEgIDEgICctNUUtMScgICAgICAgIDAgLT4gICctMC41JworZHFhZGQzMTA0IGZtYSAgMSAgJy01RTAnICAgICAgICAgMCAtPiAgJy01JworZHFhZGQzMTA1IGZtYSAgMSAgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK2RxYWRkMzEwNiBmbWEgIDEgICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJworZHFhZGQzMTA3IGZtYSAgMSAgJy01RTMzJyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQzMTA4IGZtYSAgMSAgJy01RTM0JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICBSb3VuZGVkCitkcWFkZDMxMDkgZm1hICAxICAnLTVFMzUnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgIFJvdW5kZWQKK2RxYWRkMzExMCBmbWEgIDEgICctNUUzNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgUm91bmRlZAorZHFhZGQzMTExIGZtYSAgMSAgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzCitkcWFkZDMxMTMgZm1hICAxICAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3JworZHFhZGQzMTE0IGZtYSAgMSAgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3JworZHFhZGQzMTE2IGZtYSAgMSAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnCitkcWFkZDMxMTcgZm1hICAxICAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3JworZHFhZGQzMTE5IGZtYSAgMSAgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycKK2RxYWRkMzEyMCBmbWEgIDEgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnCitkcWFkZDMxMjEgZm1hICAxICAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43JworZHFhZGQzMTIyIGZtYSAgMSAgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3JworZHFhZGQzMTIzIGZtYSAgMSAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJworZHFhZGQzMTI0IGZtYSAgMSAgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnCitkcWFkZDMxMjUgZm1hICAxICAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnCitkcWFkZDMxMjYgZm1hICAxICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScKK2RxYWRkMzEyNyBmbWEgIDEgIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnCitkcWFkZDMxMjggZm1hICAxICAwICAnLTVFLTEnICAgICAgLT4gICctMC41JworZHFhZGQzMTI5IGZtYSAgMSAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnCitkcWFkZDMxMzAgZm1hICAxICAwICAnLTVFMScgICAgICAgLT4gICctNTAnCitkcWFkZDMxMzEgZm1hICAxICAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJworZHFhZGQzMTMyIGZtYSAgMSAgMCAgJy01RTMzJyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDMxMzMgZm1hICAxICAwICAnLTVFMzQnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgIFJvdW5kZWQKK2RxYWRkMzEzNCBmbWEgIDEgIDAgICctNUUzNScgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICAgUm91bmRlZAorZHFhZGQzMTM1IGZtYSAgMSAgMCAgJy01RTM2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkCitkcWFkZDMxMzYgZm1hICAxICAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKKworLS0gcmVsYXRlZAorZHFhZGQzMTM3IGZtYSAgMSAgIDEgICcwRS0zOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZHFhZGQzMTM4IGZtYSAgMSAgLTEgICcwRS0zOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFhZGQzMTM5IGZtYSAgMSAgJzBFLTM5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZHFhZGQzMTQwIGZtYSAgMSAgJzBFLTM5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFhZGQzMTQxIGZtYSAgMSAgMUUrMjkgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJworZHFhZGQzMTQyIGZtYSAgMSAgMUUrMjkgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZAorZHFhZGQzMTQzIGZtYSAgMSAgMC4wMDAgICAxRSszMCAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwJworZHFhZGQzMTQ0IGZtYSAgMSAgMC4wMDAwICAxRSszMCAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZAorCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQorZHFhZGQzMTQ2IGZtYSAgMSAgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJworZHFhZGQzMTQ3IGZtYSAgMSAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcKK2RxYWRkMzE0OCBmbWEgIDEgICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnCitkcWFkZDMxNDkgZm1hICAxICAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnCitkcWFkZDMxNTAgZm1hICAxICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJworZHFhZGQzMTUxIGZtYSAgMSAgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcKK2RxYWRkMzE1MiBmbWEgIDEgICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycKK2RxYWRkMzE1MyBmbWEgIDEgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycKK2RxYWRkMzE1NCBmbWEgIDEgICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycKK2RxYWRkMzE1NSBmbWEgIDEgICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnCitkcWFkZDMxNTYgZm1hICAxICAnMycgICAgICczJyAgICAgLT4gICc2JworZHFhZGQzMTU3IGZtYSAgMSAgJzMnICAgICAnKzMnICAgIC0+ICAnNicKK2RxYWRkMzE1OCBmbWEgIDEgICczJyAgICAgJy0zJyAgICAtPiAgJzAnCitkcWFkZDMxNTkgZm1hICAxICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnCitkcWFkZDMxNjAgZm1hICAxICAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorZHFhZGQzMTYxIGZtYSAgMSAgJzFFKzEyJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTknCitkcWFkZDMxNjIgZm1hICAxICAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDMxNjMgZm1hICAxICAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDMxNjQgZm1hICAxICAnLTEnICAgICcxRSsxMicgLT4gJzk5OTk5OTk5OTk5OScKK2RxYWRkMzE2NSBmbWEgIDEgICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScKK2RxYWRkMzE2NiBmbWEgIDEgICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2RxYWRkMzE2NyBmbWEgIDEgICcxLjExJyAgJzdFKzEyJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2RxYWRkMzE2OCBmbWEgIDEgICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScKKworcm91bmRpbmc6IGhhbGZfdXAKK2RxYWRkMzE3MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTcyIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NScgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE3MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzQgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTc1IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE3NiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzcgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQKK2RxYWRkMzE3OCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDUnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzkgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTgwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE4MSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxODIgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTgzIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDMyMDAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScKK2RxYWRkMzIwMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwOSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQzMjE3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjE4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjE5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcWFkZDMyMjAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScKK2RxYWRkMzIyMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyOSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQzMjM3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjM4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjM5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RxYWRkMzI0MCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI0MSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI0MiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RxYWRkMzI1MCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JworZHFhZGQzMjUxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjUyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjUzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjYwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjYxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjYyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjYzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjY0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjY1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjY2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnCitkcWFkZDMyNjcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyNjggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyNjkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cworcm91bmRpbmc6IGhhbGZfdXAKK2RxYWRkMzMwMSBmbWEgIDEgICAtMSAgIDEgICAgICAtPiAgIDAKK2RxYWRkMzMwMiBmbWEgIDEgICAgMCAgIDEgICAgICAtPiAgIDEKK2RxYWRkMzMwMyBmbWEgIDEgICAgMSAgIDEgICAgICAtPiAgIDIKK2RxYWRkMzMwNCBmbWEgIDEgICAxMiAgIDEgICAgICAtPiAgMTMKK2RxYWRkMzMwNSBmbWEgIDEgICA5OCAgIDEgICAgICAtPiAgOTkKK2RxYWRkMzMwNiBmbWEgIDEgICA5OSAgIDEgICAgICAtPiAxMDAKK2RxYWRkMzMwNyBmbWEgIDEgIDEwMCAgIDEgICAgICAtPiAxMDEKK2RxYWRkMzMwOCBmbWEgIDEgIDEwMSAgIDEgICAgICAtPiAxMDIKK2RxYWRkMzMwOSBmbWEgIDEgICAtMSAgLTEgICAgICAtPiAgLTIKK2RxYWRkMzMxMCBmbWEgIDEgICAgMCAgLTEgICAgICAtPiAgLTEKK2RxYWRkMzMxMSBmbWEgIDEgICAgMSAgLTEgICAgICAtPiAgIDAKK2RxYWRkMzMxMiBmbWEgIDEgICAxMiAgLTEgICAgICAtPiAgMTEKK2RxYWRkMzMxMyBmbWEgIDEgICA5OCAgLTEgICAgICAtPiAgOTcKK2RxYWRkMzMxNCBmbWEgIDEgICA5OSAgLTEgICAgICAtPiAgOTgKK2RxYWRkMzMxNSBmbWEgIDEgIDEwMCAgLTEgICAgICAtPiAgOTkKK2RxYWRkMzMxNiBmbWEgIDEgIDEwMSAgLTEgICAgICAtPiAxMDAKKworZHFhZGQzMzIxIGZtYSAgMSAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2RxYWRkMzMyMiBmbWEgIDEgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCitkcWFkZDMzMjMgZm1hICAxICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgorZHFhZGQzMzI0IGZtYSAgMSAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2RxYWRkMzMyNSBmbWEgIDEgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5CitkcWFkZDMzMjYgZm1hICAxICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAorZHFhZGQzMzI3IGZtYSAgMSAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2RxYWRkMzMyOCBmbWEgIDEgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCitkcWFkZDMzMjkgZm1hICAxICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgorZHFhZGQzMzMwIGZtYSAgMSAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2RxYWRkMzMzMSBmbWEgIDEgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCitkcWFkZDMzMzIgZm1hICAxICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQorZHFhZGQzMzMzIGZtYSAgMSAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2RxYWRkMzMzNCBmbWEgIDEgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4CitkcWFkZDMzMzUgZm1hICAxICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQorZHFhZGQzMzM2IGZtYSAgMSAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CitkcWFkZDMzNDAgZm1hICAxICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCitkcWFkZDMzNDEgZm1hICAxICAxRSszMyAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFhZGQzMzQyIGZtYSAgMSAgMUUrMzQgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBSb3VuZGVkCitkcWFkZDMzNDMgZm1hICAxICAxRSszNSAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQKKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KK2RxYWRkMzM0NCBmbWEgIDEgIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKK2RxYWRkMzM0NSBmbWEgIDEgIDFFKzMzICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWFkZDMzNDYgZm1hICAxICAxRSszNCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMzQ3IGZtYSAgMSAgMUUrMzUgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzM0OCBmbWEgIDEgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2RxYWRkMzM0OSBmbWEgIDEgIDFFKzMzICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcWFkZDMzNTAgZm1hICAxICAxRSszNCAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzQgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMzUxIGZtYSAgMSAgMUUrMzUgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkcWFkZDMzNjAgIGZtYSAgMSAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQorZHFhZGQzMzYxICBmbWEgIDEgIDBFLTUwIDEwMDAwRSsxICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkCitkcWFkZDMzNjIgIGZtYSAgMSAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQKK2RxYWRkMzM2MyAgZm1hICAxICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzMzY0ICBmbWEgIDEgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwRSs2MTExCistLSAgICAgICAgICAgIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CisKKy0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK2RxYWRkMzM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQKK2RxYWRkMzM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkcWFkZDMzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0CitkcWFkZDMzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl9ldmVuCitkcWFkZDMzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0CitkcWFkZDMzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0CisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworZHFhZGQzNDAwIGZtYSAgMSAgICAxICAgNzdlLTMyICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQwMSBmbWEgIDEgICAgMSAgIDc3ZS0zMyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQzNDAyIGZtYSAgMSAgICAxICAgNzdlLTM0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDAzIGZtYSAgMSAgICAxICAgNzdlLTM1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDA0IGZtYSAgMSAgICAxICAgNzdlLTM2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDA1IGZtYSAgMSAgICAxICAgNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDA2IGZtYSAgMSAgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM0MTAgZm1hICAxICAgMTAgICA3N2UtMzIgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQxMSBmbWEgIDEgICAxMCAgIDc3ZS0zMyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQxMiBmbWEgIDEgICAxMCAgIDc3ZS0zNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQxMyBmbWEgIDEgICAxMCAgIDc3ZS0zNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQxNCBmbWEgIDEgICAxMCAgIDc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQxNSBmbWEgIDEgICAxMCAgIDc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQxNiBmbWEgIDEgICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNDIwIGZtYSAgMSAgIDc3ZS0zMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQyMSBmbWEgIDEgICA3N2UtMzMgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQzNDIyIGZtYSAgMSAgIDc3ZS0zNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDIzIGZtYSAgMSAgIDc3ZS0zNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDI0IGZtYSAgMSAgIDc3ZS0zNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDI1IGZtYSAgMSAgIDc3ZS0zNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDI2IGZtYSAgMSAgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM0MzAgZm1hICAxICAgNzdlLTMyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQzMSBmbWEgIDEgICA3N2UtMzMgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQzMiBmbWEgIDEgICA3N2UtMzQgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQzMyBmbWEgIDEgICA3N2UtMzUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQzNCBmbWEgIDEgICA3N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQzNSBmbWEgIDEgICA3N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQzNiBmbWEgIDEgICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZHFhZGQzNjQ0MCBmbWEgIDEgICAgMSAgIC03N2UtMzIgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ0MSBmbWEgIDEgICAgMSAgIC03N2UtMzMgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NDIgZm1hICAxICAgIDEgICAtNzdlLTM0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ0MyBmbWEgIDEgICAgMSAgIC03N2UtMzUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ0NCBmbWEgIDEgICAgMSAgIC03N2UtMzYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ0NSBmbWEgIDEgICAgMSAgIC03N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDQ2IGZtYSAgMSAgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjQ1MCBmbWEgIDEgICAxMCAgIC03N2UtMzIgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NTEgZm1hICAxICAgMTAgICAtNzdlLTMzICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ1MiBmbWEgIDEgICAxMCAgIC03N2UtMzQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ1MyBmbWEgIDEgICAxMCAgIC03N2UtMzUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ1NCBmbWEgIDEgICAxMCAgIC03N2UtMzYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDU1IGZtYSAgMSAgIDEwICAgLTc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NTYgZm1hICAxICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM2NDYwIGZtYSAgMSAgIC03N2UtMzIgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDYxIGZtYSAgMSAgIC03N2UtMzMgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ2MiBmbWEgIDEgICAtNzdlLTM0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDYzIGZtYSAgMSAgIC03N2UtMzUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDY0IGZtYSAgMSAgIC03N2UtMzYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDY1IGZtYSAgMSAgIC03N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NjYgZm1hICAxICAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM2NDcwIGZtYSAgMSAgIC03N2UtMzIgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ3MSBmbWEgIDEgICAtNzdlLTMzICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDcyIGZtYSAgMSAgIC03N2UtMzQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDczIGZtYSAgMSAgIC03N2UtMzUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDc0IGZtYSAgMSAgIC03N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NzUgZm1hICAxICAgLTc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ3NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RxYWRkMzY0ODAgZm1hICAxICAgLTEgICAgNzdlLTMyICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDgxIGZtYSAgMSAgIC0xICAgIDc3ZS0zMyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0ODIgZm1hICAxICAgLTEgICAgNzdlLTM0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0ODMgZm1hICAxICAgLTEgICAgNzdlLTM1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDg0IGZtYSAgMSAgIC0xICAgIDc3ZS0zNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ4NSBmbWEgIDEgICAtMSAgICA3N2UtMzcgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ4NiBmbWEgIDEgICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM2NDkwIGZtYSAgMSAgLTEwICAgIDc3ZS0zMiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0OTEgZm1hICAxICAtMTAgICAgNzdlLTMzICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0OTIgZm1hICAxICAtMTAgICAgNzdlLTM0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDkzIGZtYSAgMSAgLTEwICAgIDc3ZS0zNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ5NCBmbWEgIDEgIC0xMCAgICA3N2UtMzYgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ5NSBmbWEgIDEgIC0xMCAgICA3N2UtMzcgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ5NiBmbWEgIDEgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM2NTAwIGZtYSAgMSAgICA3N2UtMzIgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjUwMSBmbWEgIDEgICAgNzdlLTMzICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NTAyIGZtYSAgMSAgICA3N2UtMzQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NTAzIGZtYSAgMSAgICA3N2UtMzUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjUwNCBmbWEgIDEgICAgNzdlLTM2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MDUgZm1hICAxICAgIDc3ZS0zNyAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MDYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjUxMCBmbWEgIDEgICAgNzdlLTMyICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NTExIGZtYSAgMSAgICA3N2UtMzMgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NTEyIGZtYSAgMSAgICA3N2UtMzQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjUxMyBmbWEgIDEgICAgNzdlLTM1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MTQgZm1hICAxICAgIDc3ZS0zNiAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MTUgZm1hICAxICAgIDc3ZS0zNyAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MTYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDM2NTQwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDM2NTQxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU0MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTQ0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU0NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTQ3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU0OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTUwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTUzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTU2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCitkcWFkZDM2NTU3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RxYWRkMzY1NjAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScKK2RxYWRkMzY1NjEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTYyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NjQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTY1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NjcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTY4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTcxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTc0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcKK2RxYWRkMzY1NzcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTc4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RxYWRkMzc1NDAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTQxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU0MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RxYWRkMzc1NTAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScKK2RxYWRkMzc1NTEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTUyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NTQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTU1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NTcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTU4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTYxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTY0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcKK2RxYWRkMzc1NjcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTY4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorcm91bmRpbmc6IGhhbGZfZXZlbgorCitkcWFkZDM3NzAxIGZtYSAgMSAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDAKK2RxYWRkMzc3MDIgZm1hICAxICAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKK2RxYWRkMzc3MDMgZm1hICAxICAwMC4wMCAwRS0zICAgLT4gMC4wMDAKK2RxYWRkMzc3MDQgZm1hICAxICAwRS0zICAwMC4wMCAgLT4gMC4wMDAKKworZHFhZGQzNzcxMCBmbWEgIDEgIDBFKzMgIDAwLjAwICAtPiAwLjAwCitkcWFkZDM3NzExIGZtYSAgMSAgMEUrMyAgMDAuMCAgIC0+IDAuMAorZHFhZGQzNzcxMiBmbWEgIDEgIDBFKzMgIDAwLiAgICAtPiAwCitkcWFkZDM3NzEzIGZtYSAgMSAgMEUrMyAgMDAuRSsxIC0+IDBFKzEKK2RxYWRkMzc3MTQgZm1hICAxICAwRSszICAwMC5FKzIgLT4gMEUrMgorZHFhZGQzNzcxNSBmbWEgIDEgIDBFKzMgIDAwLkUrMyAtPiAwRSszCitkcWFkZDM3NzE2IGZtYSAgMSAgMEUrMyAgMDAuRSs0IC0+IDBFKzMKK2RxYWRkMzc3MTcgZm1hICAxICAwRSszICAwMC5FKzUgLT4gMEUrMworZHFhZGQzNzcxOCBmbWEgIDEgIDBFKzMgIC0wMC4wICAgLT4gMC4wCitkcWFkZDM3NzE5IGZtYSAgMSAgMEUrMyAgLTAwLiAgICAtPiAwCitkcWFkZDM3NzMxIGZtYSAgMSAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxCisKK2RxYWRkMzc3MjAgZm1hICAxICAwMC4wMCAgMEUrMyAgLT4gMC4wMAorZHFhZGQzNzcyMSBmbWEgIDEgIDAwLjAgICAwRSszICAtPiAwLjAKK2RxYWRkMzc3MjIgZm1hICAxICAwMC4gICAgMEUrMyAgLT4gMAorZHFhZGQzNzcyMyBmbWEgIDEgIDAwLkUrMSAwRSszICAtPiAwRSsxCitkcWFkZDM3NzI0IGZtYSAgMSAgMDAuRSsyIDBFKzMgIC0+IDBFKzIKK2RxYWRkMzc3MjUgZm1hICAxICAwMC5FKzMgMEUrMyAgLT4gMEUrMworZHFhZGQzNzcyNiBmbWEgIDEgIDAwLkUrNCAwRSszICAtPiAwRSszCitkcWFkZDM3NzI3IGZtYSAgMSAgMDAuRSs1IDBFKzMgIC0+IDBFKzMKK2RxYWRkMzc3MjggZm1hICAxICAtMDAuMDAgMEUrMyAgLT4gMC4wMAorZHFhZGQzNzcyOSBmbWEgIDEgIC0wMC4wICAwRSszICAtPiAwLjAKK2RxYWRkMzc3MzAgZm1hICAxICAtMDAuICAgMEUrMyAgLT4gMAorCitkcWFkZDM3NzMyIGZtYSAgMSAgIDAgICAgIDAgICAgIC0+ICAwCitkcWFkZDM3NzMzIGZtYSAgMSAgIDAgICAgLTAgICAgIC0+ICAwCitkcWFkZDM3NzM0IGZtYSAgMSAgLTAgICAgIDAgICAgIC0+ICAwCitkcWFkZDM3NzM1IGZtYSAgMSAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UKKworZHFhZGQzNzczNiBmbWEgIDEgICAxICAgIC0xICAgICAtPiAgMAorZHFhZGQzNzczNyBmbWEgIDEgIC0xICAgIC0xICAgICAtPiAtMgorZHFhZGQzNzczOCBmbWEgIDEgICAxICAgICAxICAgICAtPiAgMgorZHFhZGQzNzczOSBmbWEgIDEgIC0xICAgICAxICAgICAtPiAgMAorCitkcWFkZDM3NzQxIGZtYSAgMSAgIDAgICAgLTEgICAgIC0+IC0xCitkcWFkZDM3NzQyIGZtYSAgMSAgLTAgICAgLTEgICAgIC0+IC0xCitkcWFkZDM3NzQzIGZtYSAgMSAgIDAgICAgIDEgICAgIC0+ICAxCitkcWFkZDM3NzQ0IGZtYSAgMSAgLTAgICAgIDEgICAgIC0+ICAxCitkcWFkZDM3NzQ1IGZtYSAgMSAgLTEgICAgIDAgICAgIC0+IC0xCitkcWFkZDM3NzQ2IGZtYSAgMSAgLTEgICAgLTAgICAgIC0+IC0xCitkcWFkZDM3NzQ3IGZtYSAgMSAgIDEgICAgIDAgICAgIC0+ICAxCitkcWFkZDM3NzQ4IGZtYSAgMSAgIDEgICAgLTAgICAgIC0+ICAxCisKK2RxYWRkMzc3NTEgZm1hICAxICAgMC4wICAtMSAgICAgLT4gLTEuMAorZHFhZGQzNzc1MiBmbWEgIDEgIC0wLjAgIC0xICAgICAtPiAtMS4wCitkcWFkZDM3NzUzIGZtYSAgMSAgIDAuMCAgIDEgICAgIC0+ICAxLjAKK2RxYWRkMzc3NTQgZm1hICAxICAtMC4wICAgMSAgICAgLT4gIDEuMAorZHFhZGQzNzc1NSBmbWEgIDEgIC0xLjAgICAwICAgICAtPiAtMS4wCitkcWFkZDM3NzU2IGZtYSAgMSAgLTEuMCAgLTAgICAgIC0+IC0xLjAKK2RxYWRkMzc3NTcgZm1hICAxICAgMS4wICAgMCAgICAgLT4gIDEuMAorZHFhZGQzNzc1OCBmbWEgIDEgICAxLjAgIC0wICAgICAtPiAgMS4wCisKK2RxYWRkMzc3NjEgZm1hICAxICAgMCAgICAtMS4wICAgLT4gLTEuMAorZHFhZGQzNzc2MiBmbWEgIDEgIC0wICAgIC0xLjAgICAtPiAtMS4wCitkcWFkZDM3NzYzIGZtYSAgMSAgIDAgICAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NjQgZm1hICAxICAtMCAgICAgMS4wICAgLT4gIDEuMAorZHFhZGQzNzc2NSBmbWEgIDEgIC0xICAgICAwLjAgICAtPiAtMS4wCitkcWFkZDM3NzY2IGZtYSAgMSAgLTEgICAgLTAuMCAgIC0+IC0xLjAKK2RxYWRkMzc3NjcgZm1hICAxICAgMSAgICAgMC4wICAgLT4gIDEuMAorZHFhZGQzNzc2OCBmbWEgIDEgICAxICAgIC0wLjAgICAtPiAgMS4wCisKK2RxYWRkMzc3NzEgZm1hICAxICAgMC4wICAtMS4wICAgLT4gLTEuMAorZHFhZGQzNzc3MiBmbWEgIDEgIC0wLjAgIC0xLjAgICAtPiAtMS4wCitkcWFkZDM3NzczIGZtYSAgMSAgIDAuMCAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NzQgZm1hICAxICAtMC4wICAgMS4wICAgLT4gIDEuMAorZHFhZGQzNzc3NSBmbWEgIDEgIC0xLjAgICAwLjAgICAtPiAtMS4wCitkcWFkZDM3Nzc2IGZtYSAgMSAgLTEuMCAgLTAuMCAgIC0+IC0xLjAKK2RxYWRkMzc3NzcgZm1hICAxICAgMS4wICAgMC4wICAgLT4gIDEuMAorZHFhZGQzNzc3OCBmbWEgIDEgICAxLjAgIC0wLjAgICAtPiAgMS4wCisKKy0tIFNwZWNpYWxzCitkcWFkZDM3NzgwIGZtYSAgMSAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4MSBmbWEgIDEgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODIgZm1hICAxICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcWFkZDM3NzgzIGZtYSAgMSAgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4NCBmbWEgIDEgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODUgZm1hICAxICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcWFkZDM3Nzg2IGZtYSAgMSAgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4NyBmbWEgIDEgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODggZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDM3Nzg5IGZtYSAgMSAgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc5MCBmbWEgIDEgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3OTEgZm1hICAxICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDM3NzkyIGZtYSAgMSAgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc5MyBmbWEgIDEgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3OTQgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZHFhZGQzNzgwMCBmbWEgIDEgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzgwMSBmbWEgIDEgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MDIgZm1hICAxICAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODAzIGZtYSAgMSAgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgwNCBmbWEgIDEgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MDUgZm1hICAxICAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODA2IGZtYSAgMSAgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgwNyBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MDggZm1hICAxICAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODA5IGZtYSAgMSAgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODEwIGZtYSAgMSAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgxMSBmbWEgIDEgIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MTIgZm1hICAxICAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODEzIGZtYSAgMSAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgxNCBmbWEgIDEgICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MTUgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxYWRkMzc4MjEgZm1hICAxICAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFhZGQzNzgyMiBmbWEgIDEgICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcWFkZDM3ODIzIGZtYSAgMSAgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxYWRkMzc4MjQgZm1hICAxICAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFhZGQzNzgyNSBmbWEgIDEgICBOYU4gIDAgICAgICAtPiAgTmFOCitkcWFkZDM3ODI2IGZtYSAgMSAgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxYWRkMzc4MjcgZm1hICAxICAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFhZGQzNzgyOCBmbWEgIDEgICBOYU4gIEluZiAgICAtPiAgTmFOCitkcWFkZDM3ODI5IGZtYSAgMSAgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzAgZm1hICAxICAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFhZGQzNzgzMSBmbWEgIDEgIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcWFkZDM3ODMyIGZtYSAgMSAgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzMgZm1hICAxICAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFhZGQzNzgzNCBmbWEgIDEgICAwICAgIE5hTiAgICAtPiAgTmFOCitkcWFkZDM3ODM1IGZtYSAgMSAgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzYgZm1hICAxICAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFhZGQzNzgzNyBmbWEgIDEgICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RxYWRkMzc4NDEgZm1hICAxICAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDIgZm1hICAxICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDMgZm1hICAxICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDQgZm1hICAxICAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDUgZm1hICAxICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDYgZm1hICAxICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDcgZm1hICAxICAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDggZm1hICAxICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDkgZm1hICAxICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTAgZm1hICAxICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTEgZm1hICAxICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTIgZm1hICAxICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTMgZm1hICAxICAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTQgZm1hICAxICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTUgZm1hICAxICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTYgZm1hICAxICAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTcgZm1hICAxICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTggZm1hICAxICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTkgZm1hICAxICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFhZGQzNzg2MSBmbWEgIDEgICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZHFhZGQzNzg2MiBmbWEgIDEgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZHFhZGQzNzg2MyBmbWEgIDEgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZHFhZGQzNzg2NCBmbWEgIDEgICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZHFhZGQzNzg2NSBmbWEgIDEgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZHFhZGQzNzg2NiBmbWEgIDEgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZHFhZGQzNzg2NyBmbWEgIDEgIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZHFhZGQzNzg2OCBmbWEgIDEgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZHFhZGQzNzg2OSBmbWEgIDEgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2RxYWRkMzc4NzEgZm1hICAxICAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3MiBmbWEgIDEgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODczIGZtYSAgMSAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NzQgZm1hICAxICAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3NSBmbWEgIDEgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODc2IGZtYSAgMSAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NzcgZm1hICAxICAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3OCBmbWEgIDEgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODc5IGZtYSAgMSAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4ODAgZm1hICAxICAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg4MSBmbWEgIDEgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODgyIGZtYSAgMSAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZHFhZGQzNzg4MyBmbWEgIDEgIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODg0IGZtYSAgMSAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZHFhZGQzNzg4NSBmbWEgIDEgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEhlcmUgd2UgZXhwbG9yZSBuZWFyIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluCitkcWFkZDM3NTc1IGZtYSAgMSAgIDFFLTYxNDMgLTFFLTYxNzYgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgU3Vibm9ybWFsCitkcWFkZDM3NTc2IGZtYSAgMSAgLTFFLTYxNDMgKzFFLTYxNzYgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgU3Vibm9ybWFsCisKKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQorLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcWFkZDM3OTcyIGFwcGx5ICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxYWRkMzc5NzMgZm1hICAxICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5NzQgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5NzUgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTEgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk3NiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTc3IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA4RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5NzggZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDdFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk3OSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNkUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTgwIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA1RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODEgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDRFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk4MiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgM0UrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTgzIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAyRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODQgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM3OTg1IGFwcGx5ICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWFkZDM3OTg2IGZtYSAgMSAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk4NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODggZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTEgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODkgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTlFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTAgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLThFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTEgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTdFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTIgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTZFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTMgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTVFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTQgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTRFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTUgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTNFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTYgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTJFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTcgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzCityb3VuZGluZzogICAgIGRvd24KK2RxYWRkMzcxMTAwIGZtYSAgMSAgMWUrMiAtMWUtNjE0MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTAxIGZtYSAgMSAgMWUrMSAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwMyBmbWEgIDEgICAgKzEgLTFlLTYxNDMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTA0IGZtYSAgMSAgMWUtMSAtMWUtNjE0MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTA1IGZtYSAgMSAgMWUtMiAtMWUtNjE0MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwNiBmbWEgIDEgIDFlLTMgLTFlLTYxNDMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTA3IGZtYSAgMSAgMWUtNCAtMWUtNjE0MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTA4IGZtYSAgMSAgMWUtNSAtMWUtNjE0MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwOSBmbWEgIDEgIDFlLTYgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgIGNlaWxpbmcKK2RxYWRkMzcxMTEwIGZtYSAgMSAgLTFlKzIgKzFlLTYxNDMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExMSBmbWEgIDEgIC0xZSsxICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTEzIGZtYSAgMSAgICAgLTEgKzFlLTYxNDMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTE0IGZtYSAgMSAgLTFlLTEgKzFlLTYxNDMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExNSBmbWEgIDEgIC0xZS0yICsxZS02MTQzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTE2IGZtYSAgMSAgLTFlLTMgKzFlLTYxNDMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTE3IGZtYSAgMSAgLTFlLTQgKzFlLTYxNDMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExOCBmbWEgIDEgIC0xZS01ICsxZS02MTQzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTE5IGZtYSAgMSAgLTFlLTYgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCistLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQorcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4KKworZHFhZGQzNzEzMDAgZm1hICAxICAxRTM0ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTAgZm1hICAxICAxRTM0ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTEgZm1hICAxICAxRTM0ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTIgZm1hICAxICAxRTM0ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTMgZm1hICAxICAxRTM0ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTQgZm1hICAxICAxRTM0ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTUgZm1hICAxICAxRTM0ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTYgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTcgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTggZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTkgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjAgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjEgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjIgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjMgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjQgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjUgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjYgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjcgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjggZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjkgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzAgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzEgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzIgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzMgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzQgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzUgZm1hICAxICAxRTM0ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzYgZm1hICAxICAxRTM0ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzcgZm1hICAxICAxRTM0ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzggZm1hICAxICAxRTM0ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzkgZm1hICAxICAxRTM0ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM3MTM0MCBmbWEgIDEgIDFFMzQgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM0MSBmbWEgIDEgIDFFMzQgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkMzcxMzQ5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzUyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzU1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzU4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzYxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzY0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzY4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzcxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzc0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzc3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzgwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzgzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzg2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzg5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM5MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzOTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzkyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM5MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzOTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzk1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM5NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZAorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMAorZHFhZGQzNzE0MjAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDIxIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0MjIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0MjMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDI0IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0MjUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0MjYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDI3IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03CitkcWFkZDM3MTQyOCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOAorZHFhZGQzNzE0MjkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkKK2RxYWRkMzcxNDMwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZHFhZGQzNzE0MzEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExCitkcWFkZDM3MTQzMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIKK2RxYWRkMzcxNDMzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMworZHFhZGQzNzE0MzQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0CitkcWFkZDM3MTQzNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUKK2RxYWRkMzcxNDM2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZHFhZGQzNzE0MzcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3CitkcWFkZDM3MTQzOCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgKK2RxYWRkMzcxNDM5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOQorZHFhZGQzNzE0NDAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwCitkcWFkZDM3MTQ0MSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEKK2RxYWRkMzcxNDQyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMgorZHFhZGQzNzE0NDMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzCitkcWFkZDM3MTQ0NCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQKK2RxYWRkMzcxNDQ1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNQorZHFhZGQzNzE0NDYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2CitkcWFkZDM3MTQ0NyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcKK2RxYWRkMzcxNDQ4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOAorZHFhZGQzNzE0NDkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5CitkcWFkZDM3MTQ1MCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAKK2RxYWRkMzcxNDUxIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMQorZHFhZGQzNzE0NTIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyCitkcWFkZDM3MTQ1MyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMKK2RxYWRkMzcxNDU0IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNAorZHFhZGQzNzE0NTUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1CitkcWFkZDM3MTQ1NiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYKKworLS0gc2FtZSwgcmV2ZXJzZWQgMAorZHFhZGQzNzE0NjAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0NjEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDYyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0NjMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0NjQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDY1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0NjYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0NjcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNworZHFhZGQzNzE0NjggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOAorZHFhZGQzNzE0NjkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQorZHFhZGQzNzE0NzAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RxYWRkMzcxNDcxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExCitkcWFkZDM3MTQ3MiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZHFhZGQzNzE0NzMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RxYWRkMzcxNDc0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0CitkcWFkZDM3MTQ3NSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZHFhZGQzNzE0NzYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RxYWRkMzcxNDc3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3CitkcWFkZDM3MTQ3OCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZHFhZGQzNzE0NzkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkKK2RxYWRkMzcxNDgwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwCitkcWFkZDM3MTQ4MSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQorZHFhZGQzNzE0ODIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIKK2RxYWRkMzcxNDgzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzCitkcWFkZDM3MTQ4NCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNAorZHFhZGQzNzE0ODUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUKK2RxYWRkMzcxNDg2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2CitkcWFkZDM3MTQ4NyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNworZHFhZGQzNzE0ODggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjggMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgKK2RxYWRkMzcxNDg5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5CitkcWFkZDM3MTQ5MCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMAorZHFhZGQzNzE0OTEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEKK2RxYWRkMzcxNDkyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyCitkcWFkZDM3MTQ5MyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMworZHFhZGQzNzE0OTQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQKK2RxYWRkMzcxNDk1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1CitkcWFkZDM3MTQ5NiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNgorCistLSBzYW1lLCBFcyBvbiB0aGUgMAorZHFhZGQzNzE1MDAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwMSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTAyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwNCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTA1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwNyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTA4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxMCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTExIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxMyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTE0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxNiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTE3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxOSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTIwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyMiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTIzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyNSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTI2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyOCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTI5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI5ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MzAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUzMSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTMyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MzMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CistLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0CitkcWFkZDM3MTUzNCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZHFhZGQzNzE1MzUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RxYWRkMzcxNTM2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkcWFkZDM3MTUzNyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMAorcm91bmRpbmc6ICAgIGhhbGZfdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNjAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjAxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjAyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTYxMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTYxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE2MTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTYxNCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE2MjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2MjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2MjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNjMxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNjMyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTYzMyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNjM0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDM3MTY0MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTY0MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTY0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTY0MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQzNzE2NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQzNzE2NTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorLS0gb3ZlcmZsb3cKK2RxYWRkMzcxNjUzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzE2NTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICB1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE2NjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNjcxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNjcyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTY3MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNjc0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE2ODAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2ODEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2ODIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2ODMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNjkxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNjkyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTY5MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNjk0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgY2VpbGluZworLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE3MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNzExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNzEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTcxMyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNzE0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoKK3JvdW5kaW5nOiAgICBmbG9vcgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE3MjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZHFhZGQzNzE3MjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZHFhZGQzNzE3MjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNzMxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKK2RxYWRkMzcxNzMyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKKy0tIG92ZXJmbG93CitkcWFkZDM3MTczMyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNzM0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgMDV1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE3NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3NDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3NDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNzUxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNzUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTc1MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNzU0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2RxYWRkMzcxNzYxIGZtYSAgMSAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCitkcWFkZDM3MTc2MiBmbWEgIDEgIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorZHFhZGQzNzE3NjMgZm1hICAxICAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKK2RxYWRkMzcxNzY0IGZtYSAgMSAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CitkcWFkZDM3MTc2NSBmbWEgIDEgIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMAorZHFhZGQzNzE3NjYgZm1hICAxICAxMzBFLTIgICAtMTJFLTEgIC0+IDAuMTAKK2RxYWRkMzcxNzY3IGZtYSAgMSAgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwCitkcWFkZDM3MTc2OCBmbWEgIDEgIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMworCistLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RxYWRkMzc1MDAxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NworZHFhZGQzNzUwMDIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDAzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAwNCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMDUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDA2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAwNyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMDggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDA5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxMCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDEyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxMyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDE1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxNiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDE4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxOSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMjAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDIxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXAKK2RxYWRkMzc1MDMwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzkKK2RxYWRkMzc1MDMxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMQorZHFhZGQzNzUwMzIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMgorZHFhZGQzNzUwMzMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjMKK2RxYWRkMzc1MDM0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNAorZHFhZGQzNzUwMzUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NQorZHFhZGQzNzUwMzYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTYKK2RxYWRkMzc1MDM3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NworZHFhZGQzNzUwMzggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OAorZHFhZGQzNzUwMzkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQ2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQ5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ngorcm91bmRpbmc6IGhhbGZfZXZlbgorZHFhZGQzNzUwNTAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDUxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA1MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNTMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDU0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA1NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNTYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDU3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA2MCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDYyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA2MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDY1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA2NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykKK3JvdW5kaW5nOiB1cAorZHFhZGQzNzUwNzAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMQorZHFhZGQzNzUwNzEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDcyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNzQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDc1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNzcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDc4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3OSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDgxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDg0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDg3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4OCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gRGVzdHJ1Y3RpdmUgc3VidHJhY3QgKGZyb20gcmVtYWluZGVyIHRlc3RzKQorCistLSArKysgc29tZSBvZiB0aGVzZSB3aWxsIGJlIG9mZi1ieS1vbmUgcmVtYWluZGVyIHZzIHJlbWFpbmRlck5lYXIKKworZHFmbWE0MDAwICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMzICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMworZHFmbWE0MDAxICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIyICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIyCitkcWZtYTQwMDIgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTEgICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTExMQorZHFmbWE0MDAzICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzE0ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgLT4gIC0xLjMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxNAorZHFmbWE0MDA0ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyCitkcWZtYTQwMDUgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTIgICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTEuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc0OAorZHFmbWE0MDA2ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3ICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKK2RxZm1hNDAwNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC43NTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMKK2RxZm1hNDAwOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMS4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKK2RxZm1hNDAwOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NiAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjUzMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzU0CitkcWZtYTQwMTAgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDIgICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuNjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0MgorZHFmbWE0MDExICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMyICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY4CitkcWZtYTQwMTIgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjEgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMC42NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc3OQorZHFmbWE0MDEzICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMTEwICAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODg5MAorZHFmbWE0MDE0ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzEzICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0Njg3CitkcWZtYTQwMTUgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMDggICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTIKK2RxZm1hNDAxNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI1MSAgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAzLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTEKK2RxZm1hNDAxNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3CitkcWZtYTQwMTggIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgNC4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYKK2RxZm1hNDAxOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0MSAgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICA0LjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTkKKworLS0gTnVsbCB0ZXN0cworZHFhZGQzOTk5MCBmbWEgIDEgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzOTk5MSBmbWEgIDEgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUludmVydC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxSW52ZXJ0LmRlY1Rlc3QKaW5kZXggM2ExZTI5ZS4uNTIyY2ZjOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxSW52ZXJ0LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxSW52ZXJ0LmRlY1Rlc3QKQEAgLTEsMjQ1ICsxLDI0NSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFJbnZlcnQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBJTlZFUlQgZm9yIGRlY1F1YWRzICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQ0KLWRxaW52MDAxIGludmVydCAgICAgICAgICAgICAwIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWludjAwMiBpbnZlcnQgICAgICAgICAgICAgMSAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwDQotZHFpbnYwMDMgaW52ZXJ0ICAgICAgICAgICAgMTAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMQ0KLWRxaW52MDA0IGludmVydCAgICAgMTExMTExMTExIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDANCi1kcWludjAwNSBpbnZlcnQgICAgIDAwMDAwMDAwMCAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCi1kcWludjAwNyBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWludjAwOCBpbnZlcnQgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWludjAwOSBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWludjAxMCBpbnZlcnQgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWludjAxMSBpbnZlcnQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWludjAxMiBpbnZlcnQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgIDANCi1kcWludjAxMyBpbnZlcnQgMDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWludjAxNCBpbnZlcnQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi1kcWludjYwMCBpbnZlcnQgMDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDANCi1kcWludjYwMSBpbnZlcnQgMDAxMTExMTExMTExMTExMTExMDEwMTExMTExMTExMTExMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAwMDEwMTAwMDAwMDAwMDAwMDANCi1kcWludjYwMiBpbnZlcnQgMDEwMTExMTExMTExMTExMTEwMTExMDExMTExMTExMTExMSAtPiAgIDEwMTAwMDAwMDAwMDAwMDAwMTAwMDEwMDAwMDAwMDAwMDANCi1kcWludjYwMyBpbnZlcnQgMDExMDExMTExMTExMTExMTAxMTExMTAxMTExMTExMTExMSAtPiAgIDEwMDEwMDAwMDAwMDAwMDAxMDAwMDAxMDAwMDAwMDAwMDANCi1kcWludjYwNCBpbnZlcnQgMDExMTAxMTExMTExMTExMDExMTExMTEwMTExMTExMTExMSAtPiAgIDEwMDAxMDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAwMDANCi1kcWludjYwNSBpbnZlcnQgMDExMTEwMTExMTExMTEwMTExMTExMTExMDExMTExMTExMSAtPiAgIDEwMDAwMTAwMDAwMDAwMTAwMDAwMDAwMDEwMDAwMDAwMDANCi1kcWludjYwNiBpbnZlcnQgMDExMTExMDExMTExMTAxMTExMTExMTExMTAxMTExMTExMSAtPiAgIDEwMDAwMDEwMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDAwMDANCi1kcWludjYwNyBpbnZlcnQgMDExMTExMTAxMTExMDExMTExMTExMTExMTEwMTExMTExMSAtPiAgIDEwMDAwMDAxMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwMDANCi1kcWludjYwOCBpbnZlcnQgMDExMTExMTEwMTEwMTExMTExMTExMTExMTExMDExMTExMSAtPiAgIDEwMDAwMDAwMTAwMTAwMDAwMDAwMDAwMDAwMDEwMDAwMDANCi1kcWludjYwOSBpbnZlcnQgMDExMTExMTExMDAxMTExMTExMTExMTExMTExMTAxMTExMSAtPiAgIDEwMDAwMDAwMDExMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDANCi1kcWludjYxMCBpbnZlcnQgMDExMTExMTExMDAxMTExMTExMTExMTExMTExMTEwMTExMSAtPiAgIDEwMDAwMDAwMDExMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDANCi1kcWludjYxMSBpbnZlcnQgMDExMTExMTEwMTEwMTExMTExMTExMTExMTExMTExMDExMSAtPiAgIDEwMDAwMDAwMTAwMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDANCi1kcWludjYxMiBpbnZlcnQgMDExMTExMTAxMTExMDExMTExMTExMTExMTExMTExMTAxMSAtPiAgIDEwMDAwMDAxMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAxMDANCi1kcWludjYxMyBpbnZlcnQgMDExMTExMDExMTExMTAxMTExMTExMTExMTExMTExMTEwMSAtPiAgIDEwMDAwMDEwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMTANCi1kcWludjYxNCBpbnZlcnQgMDExMTEwMTExMTExMTEwMTExMTExMTExMTExMTExMTExMCAtPiAgIDEwMDAwMTAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcWludjYxNSBpbnZlcnQgMDExMTAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAtPiAgIDEwMDAxMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWludjYxNiBpbnZlcnQgMDExMDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMCAtPiAgIDEwMDEwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDENCi1kcWludjYxNyBpbnZlcnQgMDEwMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEwMSAtPiAgIDEwMTAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMTANCi1kcWludjYxOCBpbnZlcnQgMDAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTAxMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAxMDANCi1kcWludjYxOSBpbnZlcnQgMDEwMTExMTExMTExMTExMTExMTAxMTExMTExMTExMDExMSAtPiAgIDEwMTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDEwMDANCi1kcWludjYyMCBpbnZlcnQgMDExMDExMTExMTExMTExMTExMTEwMTExMTExMTEwMTExMSAtPiAgIDEwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMTAwMDANCi1kcWludjYyMSBpbnZlcnQgMDExMTAxMTExMTExMTExMTExMTExMDExMTExMTAxMTExMSAtPiAgIDEwMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAxMDAwMDANCi1kcWludjYyMiBpbnZlcnQgMDExMTEwMTExMTExMTExMTExMTExMTAxMTExMDExMTExMSAtPiAgIDEwMDAwMTAwMDAwMDAwMDAwMDAwMDAxMDAwMDEwMDAwMDANCi1kcWludjYyMyBpbnZlcnQgMDExMTExMDExMTExMTExMTExMTExMTEwMTEwMTExMTExMSAtPiAgIDEwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMTAwMDAwMDANCi1kcWludjYyNCBpbnZlcnQgMDExMTExMTAxMTExMTExMTExMTExMTExMDAxMTExMTExMSAtPiAgIDEwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDExMDAwMDAwMDANCi1kcWludjYyNSBpbnZlcnQgMDExMTExMTEwMTExMTExMTExMTExMTExMDAxMTExMTExMSAtPiAgIDEwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDExMDAwMDAwMDANCi1kcWludjYyNiBpbnZlcnQgMDExMTExMTExMDExMTExMTExMTExMTEwMTEwMTExMTExMSAtPiAgIDEwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMTAwMDAwMDANCi1kcWludjYyNyBpbnZlcnQgMDExMTExMTExMTAxMTExMTExMTExMTAxMTExMDExMTExMSAtPiAgIDEwMDAwMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDEwMDAwMDANCi1kcWludjYyOCBpbnZlcnQgMDExMTExMTExMTEwMTExMTExMTExMDExMTExMTAxMTExMSAtPiAgIDEwMDAwMDAwMDAwMTAwMDAwMDAwMDEwMDAwMDAxMDAwMDANCi1kcWludjYyOSBpbnZlcnQgMDExMTExMTExMTExMDExMTExMTEwMTExMTExMTEwMTExMSAtPiAgIDEwMDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAwMTAwMDANCi1kcWludjYzMCBpbnZlcnQgMDExMTExMTExMTExMTAxMTExMTAxMTExMTExMTExMDExMSAtPiAgIDEwMDAwMDAwMDAwMDAxMDAwMDAxMDAwMDAwMDAwMDEwMDANCi1kcWludjYzMSBpbnZlcnQgMDExMTExMTExMTExMTEwMTExMDExMTExMTExMTExMTAxMSAtPiAgIDEwMDAwMDAwMDAwMDAwMTAwMDEwMDAwMDAwMDAwMDAxMDANCi1kcWludjYzMiBpbnZlcnQgMDExMTExMTExMTExMTExMDEwMTExMTExMTExMTExMTEwMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDEwMTAwMDAwMDAwMDAwMDAwMTANCi1kcWludjYzMyBpbnZlcnQgMDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDENCi0NCi1kcWludjAyMSBpbnZlcnQgMTExMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwDQotZHFpbnYwMjIgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMA0KLWRxaW52MDIzIGludmVydCAgMTExMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDANCi1kcWludjAyNSBpbnZlcnQgICAxMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwDQotZHFpbnYwMjYgaW52ZXJ0ICAgIDExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMA0KLWRxaW52MDI3IGludmVydCAgICAgMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDANCi1kcWludjAyOCBpbnZlcnQgICAgICAxMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwDQotZHFpbnYwMjkgaW52ZXJ0ICAgICAgIDExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMA0KLWRxaW52MDMxIGludmVydCAgICAgICAgMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDANCi1kcWludjAzMiBpbnZlcnQgICAgICAgICAxICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwDQotZHFpbnYwMzMgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMA0KLWRxaW52MDM0IGludmVydCAxMTExMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDANCi1kcWludjAzNSBpbnZlcnQgMTExMTExMTExMSAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwDQotZHFpbnYwMzYgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMA0KLQ0KLWRxaW52MDQwIGludmVydCAwMTExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwDQotZHFpbnYwNDEgaW52ZXJ0IDEwMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMDANCi1kcWludjA0MiBpbnZlcnQgMTEwMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMTAwMDAwMA0KLWRxaW52MDQzIGludmVydCAxMTEwMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMTAwMDAwDQotZHFpbnYwNDQgaW52ZXJ0IDExMTEwMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMTAwMDANCi1kcWludjA0NSBpbnZlcnQgMTExMTEwMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMTAwMA0KLWRxaW52MDQ2IGludmVydCAxMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMTAwDQotZHFpbnYwNDcgaW52ZXJ0IDExMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMTANCi1kcWludjA0OCBpbnZlcnQgMTExMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMQ0KLWRxaW52MDQ5IGludmVydCAwMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMTAwDQotZHFpbnYwNTAgaW52ZXJ0IDEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMTANCi1kcWludjA1MSBpbnZlcnQgMTEwMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMTAwMDAwMQ0KLWRxaW52MDUyIGludmVydCAxMTEwMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMTAwMDEwDQotZHFpbnYwNTMgaW52ZXJ0IDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMTAxMDANCi1kcWludjA1NCBpbnZlcnQgMTExMTEwMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMTAwMA0KLWRxaW52MDU1IGludmVydCAxMTExMDEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDEwMTAwDQotZHFpbnYwNTYgaW52ZXJ0IDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAxMDAwMTANCi1kcWludjA1NyBpbnZlcnQgMTEwMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMTAwMDAwMQ0KLWRxaW52MDU4IGludmVydCAxMDExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDEwDQotZHFpbnYwNTkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDANCi0NCi1kcWludjA4MCBpbnZlcnQgMTAwMDAwMDAxMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMDAwMDAwMDANCi1kcWludjA4MSBpbnZlcnQgMDEwMDAwMDEwMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTEwMTAwMDAwMDANCi1kcWludjA4MiBpbnZlcnQgMDAxMDAwMDExMDExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTEwMDEwMDAwMDANCi1kcWludjA4MyBpbnZlcnQgMDAwMTAwMDExMTAxMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTEwMDAxMDAwMDANCi1kcWludjA4NCBpbnZlcnQgMDAwMDEwMDExMTEwMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAwMTAwMDANCi1kcWludjA4NSBpbnZlcnQgMDAwMDAxMDExMTExMDExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDEwMDANCi1kcWludjA4NiBpbnZlcnQgMDAwMDAwMTExMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAxMDANCi1kcWludjA4NyBpbnZlcnQgMDAwMDAxMDExMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDAwMTANCi1kcWludjA4OCBpbnZlcnQgMDAwMDEwMDExMTExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAwMDAwMDENCi1kcWludjA4OSBpbnZlcnQgMDAwMTAwMDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMDAwMDAxMDANCi1kcWludjA5MCBpbnZlcnQgMDAxMDAwMDEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTEwMTAwMDAwMTANCi1kcWludjA5MSBpbnZlcnQgMDEwMDAwMDExMDExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTEwMDEwMDAwMDENCi1kcWludjA5MiBpbnZlcnQgMTAwMDAwMDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTEwMDAxMDAwMTANCi1kcWludjA5MyBpbnZlcnQgMDEwMDAwMDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTEwMDAwMTAxMDANCi1kcWludjA5NCBpbnZlcnQgMDAxMDAwMDExMTExMDExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTEwMDAwMDEwMDANCi1kcWludjA5NSBpbnZlcnQgMDAwMTAwMDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTEwMDAwMTAxMDANCi1kcWludjA5NiBpbnZlcnQgMDAwMDEwMDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAxMDAwMTANCi1kcWludjA5NyBpbnZlcnQgMDAwMDAxMDExMDExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDEwMDEwMDAwMDENCi1kcWludjA5OCBpbnZlcnQgMDAwMDAwMTEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAwMTAwMDAwMTANCi1kcWludjA5OSBpbnZlcnQgMDAwMDAxMDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDExMDAwMDAxMDANCi0NCi0tLSBhbmQgbW9yZSB0aG9yb3VnaCBNU0QvTFNEIHRlc3RzIFs4IGFuZCA5IG1naHQgYmUgZW5jb2RlZCBkaWZmZXJlbnRseS4uLl0NCi1kcWludjE1MSBpbnZlcnQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQ0KLWRxaW52MTUyIGludmVydCAxMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgICAxMTExMTExMTExMTExMTExDQotZHFpbnYxNTMgaW52ZXJ0IDEwMDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMDANCi1kcWludjE1NCBpbnZlcnQgMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgICAgIDExMTExMTExMTExMTExMQ0KLWRxaW52MTU1IGludmVydCAwMTAwMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExIC0+ICAxMDExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwDQotZHFpbnYxNTYgaW52ZXJ0IDEwMTExMTExMTExMTExMTExMTAxMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDEwMTExMTExMTExMTExMTENCi1kcWludjE1NyBpbnZlcnQgMTEwMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMA0KLWRxaW52MTU4IGludmVydCAxMTEwMTExMTExMTExMTExMTEwMDExMTExMTExMTExMTExIC0+ICAgICAxMDAwMDAwMDAwMDAwMDAxMTAwMDAwMDAwMDAwMDAwDQotDQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zDQotZHFpbnYyMjAgaW52ZXJ0IDExMTExMTExMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjIyMSBpbnZlcnQgMzMzMzMzMzMzICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjIyIGludmVydCA1NTU1NTU1NTUgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyMjMgaW52ZXJ0IDc3Nzc3Nzc3NyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjIyNCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjI1IGludmVydCAyMjIyMjIyMjIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyMjYgaW52ZXJ0IDQ0NDQ0NDQ0NCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjIyNyBpbnZlcnQgNjY2NjY2NjY2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjI4IGludmVydCA4ODg4ODg4ODggICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyMjkgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjIzMCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjMxIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyMzIgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhIGZldyByYW5kb21zDQotZHFpbnYyNDAgaW52ZXJ0ICA1Njc0Njg2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI0MSBpbnZlcnQgIDU2NzM2NzY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjQyIGludmVydCAtNjMxOTE3NzcyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNDMgaW52ZXJ0IC03NTYyNTMyNTcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI0NCBpbnZlcnQgIDgzNTU5MDE0OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNEDQotZHFpbnYyNTAgaW52ZXJ0ICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI1MSBpbnZlcnQgIDMwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjUyIGludmVydCAgNDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNTMgaW52ZXJ0ICA1MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI1NCBpbnZlcnQgIDYwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjU1IGludmVydCAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNTYgaW52ZXJ0ICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI1NyBpbnZlcnQgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNELTENCi1kcWludjI3MCBpbnZlcnQgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjcxIGludmVydCAgMDMwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNzIgaW52ZXJ0ICAwNDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI3MyBpbnZlcnQgIDA1MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52Mjc0IGludmVydCAgMTYwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNzUgaW52ZXJ0ICAxNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI3NiBpbnZlcnQgIDE4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52Mjc3IGludmVydCAgMTkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi1kcWludjI4MCBpbnZlcnQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjgxIGludmVydCAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyODIgaW52ZXJ0ICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI4MyBpbnZlcnQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDUgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52Mjg0IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwNiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyODUgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI4NiBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52Mjg3IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNaWRkaWUNCi1kcWludjI4OCBpbnZlcnQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52Mjg5IGludmVydCAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAzMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyOTAgaW52ZXJ0ICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDQwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI5MSBpbnZlcnQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwNTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjkyIGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTA2MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyOTMgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI5NCBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwODAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52Mjk1IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA5MTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc2lnbnMNCi1kcWludjI5NiBpbnZlcnQgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI5OSBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIC0+ICAxMTExMTEwMDAxMTEwMDAxMTEwMDAxMTExMTAxMTExMTENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueS1saWtlDQotZHFpbnYzNDEgaW52ZXJ0ICA5Ljk5OTk5OTk5RSsyOTk4ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjM0MiBpbnZlcnQgIDFFLTI5OTggICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MzQzIGludmVydCAgMS4wMDAwMDAwMEUtMjk5OCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYzNDQgaW52ZXJ0ICAxRS0yMDc4ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjM0NSBpbnZlcnQgIC0xRS0yMDc4ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MzQ2IGludmVydCAgLTEuMDAwMDAwMDBFLTI5OTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYzNDcgaW52ZXJ0ICAtMUUtMjk5OCAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjM0OCBpbnZlcnQgIC05Ljk5OTk5OTk5RSsyOTk4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KLWRxaW52MzYxIGludmVydCAgMS4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYzNjIgaW52ZXJ0ICAxRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjM2MyBpbnZlcnQgIDAuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MzY0IGludmVydCAgMEUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYzNjUgaW52ZXJ0ICA5LjkgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjM2NiBpbnZlcnQgIDlFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCi1kcWludjc4OCBpbnZlcnQgLUluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52Nzk0IGludmVydCAgSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4MjEgaW52ZXJ0ICBOYU4gICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjg0MSBpbnZlcnQgIHNOYU4gICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcWludjg2MSBpbnZlcnQgIE5hTjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4NjIgaW52ZXJ0ICtOYU4yICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52ODYzIGludmVydCAgTmFOMyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjg2NCBpbnZlcnQgIE5hTjQgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4NjUgaW52ZXJ0ICBOYU41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52ODcxIGludmVydCAgc05hTjExICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjg3MiBpbnZlcnQgIHNOYU4xMiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4NzMgaW52ZXJ0ICBzTmFOMTMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52ODc0IGludmVydCAgc05hTjE0ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjg3NSBpbnZlcnQgIHNOYU4xNSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4NzYgaW52ZXJ0ICBOYU4xNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52ODgxIGludmVydCArTmFOMjUgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjg4MiBpbnZlcnQgLU5hTjI2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4ODMgaW52ZXJ0IC1zTmFOMjcgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFJbnZlcnQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBJTlZFUlQgZm9yIGRlY1F1YWRzICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorZHFpbnYwMDEgaW52ZXJ0ICAgICAgICAgICAgIDAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFpbnYwMDIgaW52ZXJ0ICAgICAgICAgICAgIDEgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorZHFpbnYwMDMgaW52ZXJ0ICAgICAgICAgICAgMTAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMQorZHFpbnYwMDQgaW52ZXJ0ICAgICAxMTExMTExMTEgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMAorZHFpbnYwMDUgaW52ZXJ0ICAgICAwMDAwMDAwMDAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2RxaW52MDA3IGludmVydCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFpbnYwMDggaW52ZXJ0IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWludjAwOSBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxaW52MDEwIGludmVydCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFpbnYwMTEgaW52ZXJ0IDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWludjAxMiBpbnZlcnQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgIDAKK2RxaW52MDEzIGludmVydCAwMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFpbnYwMTQgaW52ZXJ0IDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworZHFpbnY2MDAgaW52ZXJ0IDAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwCitkcWludjYwMSBpbnZlcnQgMDAxMTExMTExMTExMTExMTExMDEwMTExMTExMTExMTExMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAwMDEwMTAwMDAwMDAwMDAwMDAKK2RxaW52NjAyIGludmVydCAwMTAxMTExMTExMTExMTExMTAxMTEwMTExMTExMTExMTExIC0+ICAgMTAxMDAwMDAwMDAwMDAwMDAxMDAwMTAwMDAwMDAwMDAwMAorZHFpbnY2MDMgaW52ZXJ0IDAxMTAxMTExMTExMTExMTEwMTExMTEwMTExMTExMTExMTEgLT4gICAxMDAxMDAwMDAwMDAwMDAwMTAwMDAwMTAwMDAwMDAwMDAwCitkcWludjYwNCBpbnZlcnQgMDExMTAxMTExMTExMTExMDExMTExMTEwMTExMTExMTExMSAtPiAgIDEwMDAxMDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAwMDAKK2RxaW52NjA1IGludmVydCAwMTExMTAxMTExMTExMTAxMTExMTExMTEwMTExMTExMTExIC0+ICAgMTAwMDAxMDAwMDAwMDAxMDAwMDAwMDAwMTAwMDAwMDAwMAorZHFpbnY2MDYgaW52ZXJ0IDAxMTExMTAxMTExMTEwMTExMTExMTExMTEwMTExMTExMTEgLT4gICAxMDAwMDAxMDAwMDAwMTAwMDAwMDAwMDAwMTAwMDAwMDAwCitkcWludjYwNyBpbnZlcnQgMDExMTExMTAxMTExMDExMTExMTExMTExMTEwMTExMTExMSAtPiAgIDEwMDAwMDAxMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwMDAKK2RxaW52NjA4IGludmVydCAwMTExMTExMTAxMTAxMTExMTExMTExMTExMTEwMTExMTExIC0+ICAgMTAwMDAwMDAxMDAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMAorZHFpbnY2MDkgaW52ZXJ0IDAxMTExMTExMTAwMTExMTExMTExMTExMTExMTEwMTExMTEgLT4gICAxMDAwMDAwMDAxMTAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwCitkcWludjYxMCBpbnZlcnQgMDExMTExMTExMDAxMTExMTExMTExMTExMTExMTEwMTExMSAtPiAgIDEwMDAwMDAwMDExMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAKK2RxaW52NjExIGludmVydCAwMTExMTExMTAxMTAxMTExMTExMTExMTExMTExMTEwMTExIC0+ICAgMTAwMDAwMDAxMDAxMDAwMDAwMDAwMDAwMDAwMDAwMTAwMAorZHFpbnY2MTIgaW52ZXJ0IDAxMTExMTEwMTExMTAxMTExMTExMTExMTExMTExMTEwMTEgLT4gICAxMDAwMDAwMTAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMTAwCitkcWludjYxMyBpbnZlcnQgMDExMTExMDExMTExMTAxMTExMTExMTExMTExMTExMTEwMSAtPiAgIDEwMDAwMDEwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxaW52NjE0IGludmVydCAwMTExMTAxMTExMTExMTAxMTExMTExMTExMTExMTExMTEwIC0+ICAgMTAwMDAxMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFpbnY2MTUgaW52ZXJ0IDAxMTEwMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgLT4gICAxMDAwMTAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwCitkcWludjYxNiBpbnZlcnQgMDExMDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMCAtPiAgIDEwMDEwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDEKK2RxaW52NjE3IGludmVydCAwMTAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTAxIC0+ICAgMTAxMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAxMAorZHFpbnY2MTggaW52ZXJ0IDAwMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEwMTEgLT4gICAxMTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMTAwCitkcWludjYxOSBpbnZlcnQgMDEwMTExMTExMTExMTExMTExMTAxMTExMTExMTExMDExMSAtPiAgIDEwMTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDEwMDAKK2RxaW52NjIwIGludmVydCAwMTEwMTExMTExMTExMTExMTExMTAxMTExMTExMTAxMTExIC0+ICAgMTAwMTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAxMDAwMAorZHFpbnY2MjEgaW52ZXJ0IDAxMTEwMTExMTExMTExMTExMTExMTAxMTExMTEwMTExMTEgLT4gICAxMDAwMTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMTAwMDAwCitkcWludjYyMiBpbnZlcnQgMDExMTEwMTExMTExMTExMTExMTExMTAxMTExMDExMTExMSAtPiAgIDEwMDAwMTAwMDAwMDAwMDAwMDAwMDAxMDAwMDEwMDAwMDAKK2RxaW52NjIzIGludmVydCAwMTExMTEwMTExMTExMTExMTExMTExMTAxMTAxMTExMTExIC0+ICAgMTAwMDAwMTAwMDAwMDAwMDAwMDAwMDAxMDAxMDAwMDAwMAorZHFpbnY2MjQgaW52ZXJ0IDAxMTExMTEwMTExMTExMTExMTExMTExMTAwMTExMTExMTEgLT4gICAxMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAxMTAwMDAwMDAwCitkcWludjYyNSBpbnZlcnQgMDExMTExMTEwMTExMTExMTExMTExMTExMDAxMTExMTExMSAtPiAgIDEwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDExMDAwMDAwMDAKK2RxaW52NjI2IGludmVydCAwMTExMTExMTEwMTExMTExMTExMTExMTAxMTAxMTExMTExIC0+ICAgMTAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAxMDAwMDAwMAorZHFpbnY2MjcgaW52ZXJ0IDAxMTExMTExMTEwMTExMTExMTExMTEwMTExMTAxMTExMTEgLT4gICAxMDAwMDAwMDAwMTAwMDAwMDAwMDAwMTAwMDAxMDAwMDAwCitkcWludjYyOCBpbnZlcnQgMDExMTExMTExMTEwMTExMTExMTExMDExMTExMTAxMTExMSAtPiAgIDEwMDAwMDAwMDAwMTAwMDAwMDAwMDEwMDAwMDAxMDAwMDAKK2RxaW52NjI5IGludmVydCAwMTExMTExMTExMTEwMTExMTExMTAxMTExMTExMTAxMTExIC0+ICAgMTAwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDAxMDAwMAorZHFpbnY2MzAgaW52ZXJ0IDAxMTExMTExMTExMTEwMTExMTEwMTExMTExMTExMTAxMTEgLT4gICAxMDAwMDAwMDAwMDAwMTAwMDAwMTAwMDAwMDAwMDAxMDAwCitkcWludjYzMSBpbnZlcnQgMDExMTExMTExMTExMTEwMTExMDExMTExMTExMTExMTAxMSAtPiAgIDEwMDAwMDAwMDAwMDAwMTAwMDEwMDAwMDAwMDAwMDAxMDAKK2RxaW52NjMyIGludmVydCAwMTExMTExMTExMTExMTEwMTAxMTExMTExMTExMTExMTAxIC0+ICAgMTAwMDAwMDAwMDAwMDAwMTAxMDAwMDAwMDAwMDAwMDAxMAorZHFpbnY2MzMgaW52ZXJ0IDAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAxCisKK2RxaW52MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAKK2RxaW52MDIyIGludmVydCAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAKK2RxaW52MDIzIGludmVydCAgMTExMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAKK2RxaW52MDI1IGludmVydCAgIDExMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAKK2RxaW52MDI2IGludmVydCAgICAxMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAKK2RxaW52MDI3IGludmVydCAgICAgMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAKK2RxaW52MDI4IGludmVydCAgICAgIDExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAKK2RxaW52MDI5IGludmVydCAgICAgICAxMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAKK2RxaW52MDMxIGludmVydCAgICAgICAgMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAKK2RxaW52MDMyIGludmVydCAgICAgICAgIDEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKK2RxaW52MDMzIGludmVydCAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAKK2RxaW52MDM0IGludmVydCAxMTExMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAKK2RxaW52MDM1IGludmVydCAxMTExMTExMTExICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAKK2RxaW52MDM2IGludmVydCAxMTExMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAKKworZHFpbnYwNDAgaW52ZXJ0IDAxMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAKK2RxaW52MDQxIGludmVydCAxMDExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDAwCitkcWludjA0MiBpbnZlcnQgMTEwMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMTAwMDAwMAorZHFpbnYwNDMgaW52ZXJ0IDExMTAxMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAxMDAwMDAKK2RxaW52MDQ0IGludmVydCAxMTExMDExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDEwMDAwCitkcWludjA0NSBpbnZlcnQgMTExMTEwMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMTAwMAorZHFpbnYwNDYgaW52ZXJ0IDExMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAxMDAKK2RxaW52MDQ3IGludmVydCAxMTExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDEwCitkcWludjA0OCBpbnZlcnQgMTExMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMQorZHFpbnYwNDkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDAKK2RxaW52MDUwIGludmVydCAxMDExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDEwCitkcWludjA1MSBpbnZlcnQgMTEwMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMTAwMDAwMQorZHFpbnYwNTIgaW52ZXJ0IDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAxMDAwMTAKK2RxaW52MDUzIGludmVydCAxMTExMDEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDEwMTAwCitkcWludjA1NCBpbnZlcnQgMTExMTEwMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMTAwMAorZHFpbnYwNTUgaW52ZXJ0IDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMTAxMDAKK2RxaW52MDU2IGludmVydCAxMTEwMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMTAwMDEwCitkcWludjA1NyBpbnZlcnQgMTEwMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMTAwMDAwMQorZHFpbnYwNTggaW52ZXJ0IDEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMTAKK2RxaW52MDU5IGludmVydCAwMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMTAwCisKK2RxaW52MDgwIGludmVydCAxMDAwMDAwMDExMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTEwMDAwMDAwMAorZHFpbnYwODEgaW52ZXJ0IDAxMDAwMDAxMDExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMDEwMDAwMDAwCitkcWludjA4MiBpbnZlcnQgMDAxMDAwMDExMDExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTEwMDEwMDAwMDAKK2RxaW52MDgzIGludmVydCAwMDAxMDAwMTExMDExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTAwMDEwMDAwMAorZHFpbnYwODQgaW52ZXJ0IDAwMDAxMDAxMTExMDExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMDAwMDEwMDAwCitkcWludjA4NSBpbnZlcnQgMDAwMDAxMDExMTExMDExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDEwMDAKK2RxaW52MDg2IGludmVydCAwMDAwMDAxMTExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDEwMAorZHFpbnYwODcgaW52ZXJ0IDAwMDAwMTAxMTExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAwMDEwCitkcWludjA4OCBpbnZlcnQgMDAwMDEwMDExMTExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAwMDAwMDEKK2RxaW52MDg5IGludmVydCAwMDAxMDAwMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTEwMDAwMDEwMAorZHFpbnYwOTAgaW52ZXJ0IDAwMTAwMDAxMDExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMDEwMDAwMDEwCitkcWludjA5MSBpbnZlcnQgMDEwMDAwMDExMDExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTEwMDEwMDAwMDEKK2RxaW52MDkyIGludmVydCAxMDAwMDAwMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTAwMDEwMDAxMAorZHFpbnYwOTMgaW52ZXJ0IDAxMDAwMDAxMTExMDEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMDAwMDEwMTAwCitkcWludjA5NCBpbnZlcnQgMDAxMDAwMDExMTExMDExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTEwMDAwMDEwMDAKK2RxaW52MDk1IGludmVydCAwMDAxMDAwMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTAwMDAxMDEwMAorZHFpbnYwOTYgaW52ZXJ0IDAwMDAxMDAxMTEwMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMDAwMTAwMDEwCitkcWludjA5NyBpbnZlcnQgMDAwMDAxMDExMDExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDEwMDEwMDAwMDEKK2RxaW52MDk4IGludmVydCAwMDAwMDAxMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAxMAorZHFpbnYwOTkgaW52ZXJ0IDAwMDAwMTAwMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDAwMTAwCisKKy0tIGFuZCBtb3JlIHRob3JvdWdoIE1TRC9MU0QgdGVzdHMgWzggYW5kIDkgbWdodCBiZSBlbmNvZGVkIGRpZmZlcmVudGx5Li4uXQorZHFpbnYxNTEgaW52ZXJ0IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK2RxaW52MTUyIGludmVydCAxMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgICAxMTExMTExMTExMTExMTExCitkcWludjE1MyBpbnZlcnQgMTAwMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwMAorZHFpbnYxNTQgaW52ZXJ0IDExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAgICAxMTExMTExMTExMTExMTEKK2RxaW52MTU1IGludmVydCAwMTAwMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExIC0+ICAxMDExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwCitkcWludjE1NiBpbnZlcnQgMTAxMTExMTExMTExMTExMTExMDEwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMTAxMTExMTExMTExMTExMQorZHFpbnYxNTcgaW52ZXJ0IDExMDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAKK2RxaW52MTU4IGludmVydCAxMTEwMTExMTExMTExMTExMTEwMDExMTExMTExMTExMTExIC0+ICAgICAxMDAwMDAwMDAwMDAwMDAxMTAwMDAwMDAwMDAwMDAwCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworZHFpbnYyMjAgaW52ZXJ0IDExMTExMTExMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjIxIGludmVydCAzMzMzMzMzMzMgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjMgaW52ZXJ0IDc3Nzc3Nzc3NyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjI0IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjYgaW52ZXJ0IDQ0NDQ0NDQ0NCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjI3IGludmVydCA2NjY2NjY2NjYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjkgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjMwIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMzIgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2RxaW52MjQwIGludmVydCAgNTY3NDY4Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI0MSBpbnZlcnQgIDU2NzM2NzY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNDIgaW52ZXJ0IC02MzE5MTc3NzIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjQzIGludmVydCAtNzU2MjUzMjU3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI0NCBpbnZlcnQgIDgzNTU5MDE0OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2RxaW52MjUwIGludmVydCAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI1MSBpbnZlcnQgIDMwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNTIgaW52ZXJ0ICA0MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjUzIGludmVydCAgNTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI1NCBpbnZlcnQgIDYwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNTUgaW52ZXJ0ICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjU2IGludmVydCAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI1NyBpbnZlcnQgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZHFpbnYyNzAgaW52ZXJ0ICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjcxIGludmVydCAgMDMwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI3MiBpbnZlcnQgIDA0MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNzMgaW52ZXJ0ICAwNTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjc0IGludmVydCAgMTYwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI3NSBpbnZlcnQgIDE3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNzYgaW52ZXJ0ICAxODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjc3IGludmVydCAgMTkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZHFpbnYyODAgaW52ZXJ0ICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjgxIGludmVydCAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4MiBpbnZlcnQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyODMgaW52ZXJ0ICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDA1IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjg0IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwNiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4NSBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyODYgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjg3IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorZHFpbnYyODggaW52ZXJ0ICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjg5IGludmVydCAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAzMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI5MCBpbnZlcnQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwNDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyOTEgaW52ZXJ0ICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDUwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjkyIGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTA2MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI5MyBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyOTQgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDgwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjk1IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA5MTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworZHFpbnYyOTYgaW52ZXJ0IC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI5OSBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIC0+ICAxMTExMTEwMDAxMTEwMDAxMTEwMDAxMTExMTAxMTExMTEKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZHFpbnYzNDEgaW52ZXJ0ICA5Ljk5OTk5OTk5RSsyOTk4ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzQyIGludmVydCAgMUUtMjk5OCAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTI5OTggIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNDQgaW52ZXJ0ICAxRS0yMDc4ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzQ1IGludmVydCAgLTFFLTIwNzggICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS0yOTk4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNDcgaW52ZXJ0ICAtMUUtMjk5OCAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzQ4IGludmVydCAgLTkuOTk5OTk5OTlFKzI5OTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZHFpbnYzNjEgaW52ZXJ0ICAxLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzYyIGludmVydCAgMUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM2MyBpbnZlcnQgIDAuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNjQgaW52ZXJ0ICAwRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzY1IGludmVydCAgOS45ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM2NiBpbnZlcnQgIDlFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkcWludjc4OCBpbnZlcnQgLUluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY3OTQgaW52ZXJ0ICBJbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODIxIGludmVydCAgTmFOICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg0MSBpbnZlcnQgIHNOYU4gICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworZHFpbnY4NjEgaW52ZXJ0ICBOYU4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NjIgaW52ZXJ0ICtOYU4yICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NjMgaW52ZXJ0ICBOYU4zICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NjQgaW52ZXJ0ICBOYU40ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NjUgaW52ZXJ0ICBOYU41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NzEgaW52ZXJ0ICBzTmFOMTEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NzIgaW52ZXJ0ICBzTmFOMTIgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NzMgaW52ZXJ0ICBzTmFOMTMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NzQgaW52ZXJ0ICBzTmFOMTQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NzUgaW52ZXJ0ICBzTmFOMTUgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NzYgaW52ZXJ0ICBOYU4xNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4ODEgaW52ZXJ0ICtOYU4yNSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4ODIgaW52ZXJ0IC1OYU4yNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4ODMgaW52ZXJ0IC1zTmFOMjcgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTG9nQi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTG9nQi5kZWNUZXN0CmluZGV4IGExODMxM2QuLjQ0OWYzZGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUxvZ0IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFMb2dCLmRlY1Rlc3QKQEAgLTEsMTYwICsxLDE2MCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFMb2dCLmRlY1Rlc3QgLS0gaW50ZWdyYWwgNzU0ciBhZGp1c3RlZCBleHBvbmVudCwgZm9yIGRlY1F1YWRzICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBiYXNpY3MNCi1kcWxvZ2IwMDAgbG9nYiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZHFsb2diMDAxIGxvZ2IgIDFFLTYxNzYgICAgICAgICAgIC0+IC02MTc2DQotZHFsb2diMDAyIGxvZ2IgIDFFLTYxNDMgICAgICAgICAgIC0+IC02MTQzDQotZHFsb2diMDAzIGxvZ2IgIDAuMDAxICAgICAgICAgICAgIC0+IC0zDQotZHFsb2diMDA0IGxvZ2IgIDAuMDMgICAgICAgICAgICAgIC0+IC0yDQotZHFsb2diMDA1IGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAwDQotZHFsb2diMDA2IGxvZ2IgIDIgICAgICAgICAgICAgICAgIC0+ICAwDQotZHFsb2diMDA3IGxvZ2IgIDIuNSAgICAgICAgICAgICAgIC0+ICAwDQotZHFsb2diMDA4IGxvZ2IgIDIuNTAgICAgICAgICAgICAgIC0+ICAwDQotZHFsb2diMDA5IGxvZ2IgIDIuNTAwICAgICAgICAgICAgIC0+ICAwDQotZHFsb2diMDEwIGxvZ2IgIDEwICAgICAgICAgICAgICAgIC0+ICAxDQotZHFsb2diMDExIGxvZ2IgIDcwICAgICAgICAgICAgICAgIC0+ICAxDQotZHFsb2diMDEyIGxvZ2IgIDEwMCAgICAgICAgICAgICAgIC0+ICAyDQotZHFsb2diMDEzIGxvZ2IgIDI1MCAgICAgICAgICAgICAgIC0+ICAyDQotZHFsb2diMDE0IGxvZ2IgIDlFKzYxNDQgICAgICAgICAgIC0+ICA2MTQ0DQotZHFsb2diMDE1IGxvZ2IgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KLQ0KLS0tIG5lZ2F0aXZlcyBhcHBlYXIgdG8gYmUgdHJlYXRlZCBhcyBwb3NpdGl2ZXMNCi1kcWxvZ2IwMjEgbG9nYiAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZHFsb2diMDIyIGxvZ2IgLTFFLTYxNzYgICAgICAgICAgIC0+IC02MTc2DQotZHFsb2diMDIzIGxvZ2IgLTlFLTYxNDMgICAgICAgICAgIC0+IC02MTQzDQotZHFsb2diMDI0IGxvZ2IgLTAuMDAxICAgICAgICAgICAgIC0+IC0zDQotZHFsb2diMDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwDQotZHFsb2diMDI2IGxvZ2IgLTIgICAgICAgICAgICAgICAgIC0+ICAwDQotZHFsb2diMDI3IGxvZ2IgLTEwICAgICAgICAgICAgICAgIC0+ICAxDQotZHFsb2diMDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxDQotZHFsb2diMDI5IGxvZ2IgLTEwMCAgICAgICAgICAgICAgIC0+ICAyDQotZHFsb2diMDMwIGxvZ2IgLTlFKzYxNDQgICAgICAgICAgIC0+ICA2MTQ0DQotZHFsb2diMDMxIGxvZ2IgLUluZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KLQ0KLS0tIHplcm9zDQotZHFsb2diMTExIGxvZ2IgICAgICAgICAgMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRxbG9nYjExMiBsb2diICAgICAgICAgLTAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kcWxvZ2IxMTMgbG9nYiAgICAgICAwRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZHFsb2diMTE0IGxvZ2IgICAgICAtMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRxbG9nYjExNSBsb2diICAgICAwLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kcWxvZ2IxMTYgbG9nYiAgICAtMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZHFsb2diMTE3IGxvZ2IgICAgICAwRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRxbG9nYjExOCBsb2diICAgICAtMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWRxbG9nYjEyMSBsb2diICAgMjY4MjY4MjY4ICAgICAgICAtPiA4DQotZHFsb2diMTIyIGxvZ2IgIC0yNjgyNjgyNjggICAgICAgIC0+IDgNCi1kcWxvZ2IxMjMgbG9nYiAgIDEzNDEzNDEzNCAgICAgICAgLT4gOA0KLWRxbG9nYjEyNCBsb2diICAtMTM0MTM0MTM0ICAgICAgICAtPiA4DQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kcWxvZ2IxMzEgbG9nYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgNjE0NA0KLWRxbG9nYjEzMiBsb2diICAxRS02MTQzICAgICAgICAgICAgICAgICAgIC0+IC02MTQzDQotZHFsb2diMTMzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gLTYxNDMNCi1kcWxvZ2IxMzQgbG9nYiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAtNjE3Ng0KLQ0KLWRxbG9nYjEzNSBsb2diICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC02MTc2DQotZHFsb2diMTM2IGxvZ2IgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTYxNDMNCi1kcWxvZ2IxMzcgbG9nYiAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiAtNjE0Mw0KLWRxbG9nYjE2MTQgbG9nYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgNjE0NA0KLQ0KLS0tIG9uZXMNCi1kcWxvZ2IwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMA0KLWRxbG9nYjAwNjIgbG9nYiAgMS4wICAgICAgICAgICAgICAgLT4gICAwDQotZHFsb2diMDA2MyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDANCi0NCi0tLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMA0KLWRxbG9nYjExMDAgbG9nYiAxICAgICAgICAgICAgIC0+IDANCi1kcWxvZ2IxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxDQotZHFsb2diMTEwMiBsb2diIDEwMCAgICAgICAgICAgLT4gMg0KLWRxbG9nYjExMDMgbG9nYiAxMDAwICAgICAgICAgIC0+IDMNCi1kcWxvZ2IxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0DQotZHFsb2diMTEwNSBsb2diIDEwMDAwMCAgICAgICAgLT4gNQ0KLWRxbG9nYjExMDYgbG9nYiAxMDAwMDAwICAgICAgIC0+IDYNCi1kcWxvZ2IxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3DQotZHFsb2diMTEwOCBsb2diIDEwMDAwMDAwMCAgICAgLT4gOA0KLWRxbG9nYjExMDkgbG9nYiAxMDAwMDAwMDAwICAgIC0+IDkNCi1kcWxvZ2IxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMA0KLWRxbG9nYjExMTEgbG9nYiAxMDAwMDAwMDAwMDAgIC0+IDExDQotZHFsb2diMTExMiBsb2diIDEwMDAwMDAwMDAwMDAgLT4gMTINCi1kcWxvZ2IxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTENCi1kcWxvZ2IxMTE0IGxvZ2IgMC4wMDAwMDAwMDAxIC0+IC0xMA0KLWRxbG9nYjExMTUgbG9nYiAwLjAwMDAwMDAwMSAtPiAtOQ0KLWRxbG9nYjExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04DQotZHFsb2diMTExNyBsb2diIDAuMDAwMDAwMSAtPiAtNw0KLWRxbG9nYjExMTggbG9nYiAwLjAwMDAwMSAtPiAtNg0KLWRxbG9nYjExMTkgbG9nYiAwLjAwMDAxIC0+IC01DQotZHFsb2diMTEyMCBsb2diIDAuMDAwMSAtPiAtNA0KLWRxbG9nYjExMjEgbG9nYiAwLjAwMSAtPiAtMw0KLWRxbG9nYjExMjIgbG9nYiAwLjAxIC0+IC0yDQotZHFsb2diMTEyMyBsb2diIDAuMSAtPiAtMQ0KLWRxbG9nYjExMjQgbG9nYiAxRS05OSAgLT4gLTk5DQotZHFsb2diMTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwDQotZHFsb2diMTEyNyBsb2diIDFFLTI5OSAtPiAtMjk5DQotZHFsb2diMTEyNiBsb2diIDFFLTYxNDMgLT4gLTYxNDMNCi0NCi0tLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hDQotZHFsb2diMTQwMCBsb2diIDEwRS0zICAgIC0+IC0yDQotZHFsb2diMTQwMSBsb2diIDEwRS0yICAgIC0+IC0xDQotZHFsb2diMTQwMiBsb2diIDEwMEUtMiAgIC0+ICAwDQotZHFsb2diMTQwMyBsb2diIDEwMDBFLTIgIC0+ICAxDQotZHFsb2diMTQwNCBsb2diIDEwMDAwRS0yIC0+ICAyDQotZHFsb2diMTQwNSBsb2diIDEwRS0xICAgIC0+ICAwDQotZHFsb2diMTQwNiBsb2diIDEwMEUtMSAgIC0+ICAxDQotZHFsb2diMTQwNyBsb2diIDEwMDBFLTEgIC0+ICAyDQotZHFsb2diMTQwOCBsb2diIDEwMDAwRS0xIC0+ICAzDQotZHFsb2diMTQwOSBsb2diIDEwRTAgICAgIC0+ICAxDQotZHFsb2diMTQxMCBsb2diIDEwMEUwICAgIC0+ICAyDQotZHFsb2diMTQxMSBsb2diIDEwMDBFMCAgIC0+ICAzDQotZHFsb2diMTQxMiBsb2diIDEwMDAwRTAgIC0+ICA0DQotZHFsb2diMTQxMyBsb2diIDEwRTEgICAgIC0+ICAyDQotZHFsb2diMTQxNCBsb2diIDEwMEUxICAgIC0+ICAzDQotZHFsb2diMTQxNSBsb2diIDEwMDBFMSAgIC0+ICA0DQotZHFsb2diMTQxNiBsb2diIDEwMDAwRTEgIC0+ICA1DQotZHFsb2diMTQxNyBsb2diIDEwRTIgICAgIC0+ICAzDQotZHFsb2diMTQxOCBsb2diIDEwMEUyICAgIC0+ICA0DQotZHFsb2diMTQxOSBsb2diIDEwMDBFMiAgIC0+ICA1DQotZHFsb2diMTQyMCBsb2diIDEwMDAwRTIgIC0+ICA2DQotDQotLS0gc3BlY2lhbCB2YWx1ZXMNCi1kcWxvZ2I4MjAgIGxvZ2IgICBJbmZpbml0eSAtPiAgIEluZmluaXR5DQotZHFsb2diODIxICBsb2diICAgMCAgICAgICAgLT4gIC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFsb2diODIyICBsb2diICAgTmFOICAgICAgLT4gICBOYU4NCi1kcWxvZ2I4MjMgIGxvZ2IgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFsb2diODI0ICBsb2diICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFsb2diODI1ICBsb2diICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFsb2diODI2ICBsb2diICAgTmFONDU2ICAgLT4gICBOYU40NTYNCi1kcWxvZ2I4MjcgIGxvZ2IgICAtTmFONjU0ICAtPiAgLU5hTjY1NA0KLWRxbG9nYjgyOCAgbG9nYiAgIE5hTjEgICAgIC0+ICAgTmFOMQ0KLQ0KLS0tIE51bGwgdGVzdA0KLWRxbG9nYjkwMCAgbG9nYiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUxvZ0IuZGVjVGVzdCAtLSBpbnRlZ3JhbCA3NTRyIGFkanVzdGVkIGV4cG9uZW50LCBmb3IgZGVjUXVhZHMgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIGJhc2ljcworZHFsb2diMDAwIGxvZ2IgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMDAxIGxvZ2IgIDFFLTYxNzYgICAgICAgICAgIC0+IC02MTc2CitkcWxvZ2IwMDIgbG9nYiAgMUUtNjE0MyAgICAgICAgICAgLT4gLTYxNDMKK2RxbG9nYjAwMyBsb2diICAwLjAwMSAgICAgICAgICAgICAtPiAtMworZHFsb2diMDA0IGxvZ2IgIDAuMDMgICAgICAgICAgICAgIC0+IC0yCitkcWxvZ2IwMDUgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gIDAKK2RxbG9nYjAwNiBsb2diICAyICAgICAgICAgICAgICAgICAtPiAgMAorZHFsb2diMDA3IGxvZ2IgIDIuNSAgICAgICAgICAgICAgIC0+ICAwCitkcWxvZ2IwMDggbG9nYiAgMi41MCAgICAgICAgICAgICAgLT4gIDAKK2RxbG9nYjAwOSBsb2diICAyLjUwMCAgICAgICAgICAgICAtPiAgMAorZHFsb2diMDEwIGxvZ2IgIDEwICAgICAgICAgICAgICAgIC0+ICAxCitkcWxvZ2IwMTEgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDEKK2RxbG9nYjAxMiBsb2diICAxMDAgICAgICAgICAgICAgICAtPiAgMgorZHFsb2diMDEzIGxvZ2IgIDI1MCAgICAgICAgICAgICAgIC0+ICAyCitkcWxvZ2IwMTQgbG9nYiAgOUUrNjE0NCAgICAgICAgICAgLT4gIDYxNDQKK2RxbG9nYjAxNSBsb2diICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gbmVnYXRpdmVzIGFwcGVhciB0byBiZSB0cmVhdGVkIGFzIHBvc2l0aXZlcworZHFsb2diMDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMDIyIGxvZ2IgLTFFLTYxNzYgICAgICAgICAgIC0+IC02MTc2CitkcWxvZ2IwMjMgbG9nYiAtOUUtNjE0MyAgICAgICAgICAgLT4gLTYxNDMKK2RxbG9nYjAyNCBsb2diIC0wLjAwMSAgICAgICAgICAgICAtPiAtMworZHFsb2diMDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwCitkcWxvZ2IwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDAKK2RxbG9nYjAyNyBsb2diIC0xMCAgICAgICAgICAgICAgICAtPiAgMQorZHFsb2diMDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxCitkcWxvZ2IwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDIKK2RxbG9nYjAzMCBsb2diIC05RSs2MTQ0ICAgICAgICAgICAtPiAgNjE0NAorZHFsb2diMDMxIGxvZ2IgLUluZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSB6ZXJvcworZHFsb2diMTExIGxvZ2IgICAgICAgICAgMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTEyIGxvZ2IgICAgICAgICAtMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTE0IGxvZ2IgICAgICAtMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTE1IGxvZ2IgICAgIDAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTE3IGxvZ2IgICAgICAwRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTE4IGxvZ2IgICAgIC0wRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFsb2diMTIxIGxvZ2IgICAyNjgyNjgyNjggICAgICAgIC0+IDgKK2RxbG9nYjEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4CitkcWxvZ2IxMjMgbG9nYiAgIDEzNDEzNDEzNCAgICAgICAgLT4gOAorZHFsb2diMTI0IGxvZ2IgIC0xMzQxMzQxMzQgICAgICAgIC0+IDgKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxbG9nYjEzMSBsb2diICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA2MTQ0CitkcWxvZ2IxMzIgbG9nYiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAtNjE0MworZHFsb2diMTMzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gLTYxNDMKK2RxbG9nYjEzNCBsb2diICAxRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IC02MTc2CisKK2RxbG9nYjEzNSBsb2diICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC02MTc2CitkcWxvZ2IxMzYgbG9nYiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtNjE0MworZHFsb2diMTM3IGxvZ2IgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTYxNDMKK2RxbG9nYjE2MTQgbG9nYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgNjE0NAorCistLSBvbmVzCitkcWxvZ2IwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorZHFsb2diMDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKK2RxbG9nYjAwNjMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwCisKKy0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwCitkcWxvZ2IxMTAwIGxvZ2IgMSAgICAgICAgICAgICAtPiAwCitkcWxvZ2IxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxCitkcWxvZ2IxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyCitkcWxvZ2IxMTAzIGxvZ2IgMTAwMCAgICAgICAgICAtPiAzCitkcWxvZ2IxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0CitkcWxvZ2IxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1CitkcWxvZ2IxMTA2IGxvZ2IgMTAwMDAwMCAgICAgICAtPiA2CitkcWxvZ2IxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3CitkcWxvZ2IxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4CitkcWxvZ2IxMTA5IGxvZ2IgMTAwMDAwMDAwMCAgICAtPiA5CitkcWxvZ2IxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMAorZHFsb2diMTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTEKK2RxbG9nYjExMTIgbG9nYiAxMDAwMDAwMDAwMDAwIC0+IDEyCitkcWxvZ2IxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTEKK2RxbG9nYjExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwCitkcWxvZ2IxMTE1IGxvZ2IgMC4wMDAwMDAwMDEgLT4gLTkKK2RxbG9nYjExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04CitkcWxvZ2IxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03CitkcWxvZ2IxMTE4IGxvZ2IgMC4wMDAwMDEgLT4gLTYKK2RxbG9nYjExMTkgbG9nYiAwLjAwMDAxIC0+IC01CitkcWxvZ2IxMTIwIGxvZ2IgMC4wMDAxIC0+IC00CitkcWxvZ2IxMTIxIGxvZ2IgMC4wMDEgLT4gLTMKK2RxbG9nYjExMjIgbG9nYiAwLjAxIC0+IC0yCitkcWxvZ2IxMTIzIGxvZ2IgMC4xIC0+IC0xCitkcWxvZ2IxMTI0IGxvZ2IgMUUtOTkgIC0+IC05OQorZHFsb2diMTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwCitkcWxvZ2IxMTI3IGxvZ2IgMUUtMjk5IC0+IC0yOTkKK2RxbG9nYjExMjYgbG9nYiAxRS02MTQzIC0+IC02MTQzCisKKy0tIHN1Z2dlc3Rpb25zIGZyb20gSWxhbiBOZWhhbWEKK2RxbG9nYjE0MDAgbG9nYiAxMEUtMyAgICAtPiAtMgorZHFsb2diMTQwMSBsb2diIDEwRS0yICAgIC0+IC0xCitkcWxvZ2IxNDAyIGxvZ2IgMTAwRS0yICAgLT4gIDAKK2RxbG9nYjE0MDMgbG9nYiAxMDAwRS0yICAtPiAgMQorZHFsb2diMTQwNCBsb2diIDEwMDAwRS0yIC0+ICAyCitkcWxvZ2IxNDA1IGxvZ2IgMTBFLTEgICAgLT4gIDAKK2RxbG9nYjE0MDYgbG9nYiAxMDBFLTEgICAtPiAgMQorZHFsb2diMTQwNyBsb2diIDEwMDBFLTEgIC0+ICAyCitkcWxvZ2IxNDA4IGxvZ2IgMTAwMDBFLTEgLT4gIDMKK2RxbG9nYjE0MDkgbG9nYiAxMEUwICAgICAtPiAgMQorZHFsb2diMTQxMCBsb2diIDEwMEUwICAgIC0+ICAyCitkcWxvZ2IxNDExIGxvZ2IgMTAwMEUwICAgLT4gIDMKK2RxbG9nYjE0MTIgbG9nYiAxMDAwMEUwICAtPiAgNAorZHFsb2diMTQxMyBsb2diIDEwRTEgICAgIC0+ICAyCitkcWxvZ2IxNDE0IGxvZ2IgMTAwRTEgICAgLT4gIDMKK2RxbG9nYjE0MTUgbG9nYiAxMDAwRTEgICAtPiAgNAorZHFsb2diMTQxNiBsb2diIDEwMDAwRTEgIC0+ICA1CitkcWxvZ2IxNDE3IGxvZ2IgMTBFMiAgICAgLT4gIDMKK2RxbG9nYjE0MTggbG9nYiAxMDBFMiAgICAtPiAgNAorZHFsb2diMTQxOSBsb2diIDEwMDBFMiAgIC0+ICA1CitkcWxvZ2IxNDIwIGxvZ2IgMTAwMDBFMiAgLT4gIDYKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2RxbG9nYjgyMCAgbG9nYiAgIEluZmluaXR5IC0+ICAgSW5maW5pdHkKK2RxbG9nYjgyMSAgbG9nYiAgIDAgICAgICAgIC0+ICAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFsb2diODIyICBsb2diICAgTmFOICAgICAgLT4gICBOYU4KK2RxbG9nYjgyMyAgbG9nYiAgIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworZHFsb2diODI0ICBsb2diICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uCitkcWxvZ2I4MjUgIGxvZ2IgICAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxbG9nYjgyNiAgbG9nYiAgIE5hTjQ1NiAgIC0+ICAgTmFONDU2CitkcWxvZ2I4MjcgIGxvZ2IgICAtTmFONjU0ICAtPiAgLU5hTjY1NAorZHFsb2diODI4ICBsb2diICAgTmFOMSAgICAgLT4gICBOYU4xCisKKy0tIE51bGwgdGVzdAorZHFsb2diOTAwICBsb2diICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXguZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heC5kZWNUZXN0CmluZGV4IGRjNmExYWIuLjE2MmQ0YmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heC5kZWNUZXN0CkBAIC0xLDMyMiArMSwzMjIgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxTWF4LmRlY1Rlc3QgLS0gZGVjUXVhZCBtYXhudW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCi0tLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxbWF4MDAxIG1heCAgLTIgIC0yICAtPiAtMg0KLWRxbWF4MDAyIG1heCAgLTIgIC0xICAtPiAtMQ0KLWRxbWF4MDAzIG1heCAgLTIgICAwICAtPiAgMA0KLWRxbWF4MDA0IG1heCAgLTIgICAxICAtPiAgMQ0KLWRxbWF4MDA1IG1heCAgLTIgICAyICAtPiAgMg0KLWRxbWF4MDA2IG1heCAgLTEgIC0yICAtPiAtMQ0KLWRxbWF4MDA3IG1heCAgLTEgIC0xICAtPiAtMQ0KLWRxbWF4MDA4IG1heCAgLTEgICAwICAtPiAgMA0KLWRxbWF4MDA5IG1heCAgLTEgICAxICAtPiAgMQ0KLWRxbWF4MDEwIG1heCAgLTEgICAyICAtPiAgMg0KLWRxbWF4MDExIG1heCAgIDAgIC0yICAtPiAgMA0KLWRxbWF4MDEyIG1heCAgIDAgIC0xICAtPiAgMA0KLWRxbWF4MDEzIG1heCAgIDAgICAwICAtPiAgMA0KLWRxbWF4MDE0IG1heCAgIDAgICAxICAtPiAgMQ0KLWRxbWF4MDE1IG1heCAgIDAgICAyICAtPiAgMg0KLWRxbWF4MDE2IG1heCAgIDEgIC0yICAtPiAgMQ0KLWRxbWF4MDE3IG1heCAgIDEgIC0xICAtPiAgMQ0KLWRxbWF4MDE4IG1heCAgIDEgICAwICAtPiAgMQ0KLWRxbWF4MDE5IG1heCAgIDEgICAxICAtPiAgMQ0KLWRxbWF4MDIwIG1heCAgIDEgICAyICAtPiAgMg0KLWRxbWF4MDIxIG1heCAgIDIgIC0yICAtPiAgMg0KLWRxbWF4MDIyIG1heCAgIDIgIC0xICAtPiAgMg0KLWRxbWF4MDIzIG1heCAgIDIgICAwICAtPiAgMg0KLWRxbWF4MDI1IG1heCAgIDIgICAxICAtPiAgMg0KLWRxbWF4MDI2IG1heCAgIDIgICAyICAtPiAgMg0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZHFtYXgwMzAgbWF4ICAgMCAgICAgMCAgIC0+ICAwDQotZHFtYXgwMzEgbWF4ICAgMCAgICAtMCAgIC0+ICAwDQotZHFtYXgwMzIgbWF4ICAgMCAgICAtMC4wIC0+ICAwDQotZHFtYXgwMzMgbWF4ICAgMCAgICAgMC4wIC0+ICAwDQotZHFtYXgwMzQgbWF4ICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuDQotZHFtYXgwMzUgbWF4ICAtMCAgICAtMCAgIC0+IC0wDQotZHFtYXgwMzYgbWF4ICAtMCAgICAtMC4wIC0+IC0wLjANCi1kcW1heDAzNyBtYXggIC0wICAgICAwLjAgLT4gIDAuMA0KLWRxbWF4MDM4IG1heCAgIDAuMCAgIDAgICAtPiAgMA0KLWRxbWF4MDM5IG1heCAgIDAuMCAgLTAgICAtPiAgMC4wDQotZHFtYXgwNDAgbWF4ICAgMC4wICAtMC4wIC0+ICAwLjANCi1kcW1heDA0MSBtYXggICAwLjAgICAwLjAgLT4gIDAuMA0KLWRxbWF4MDQyIG1heCAgLTAuMCAgIDAgICAtPiAgMA0KLWRxbWF4MDQzIG1heCAgLTAuMCAgLTAgICAtPiAtMC4wDQotZHFtYXgwNDQgbWF4ICAtMC4wICAtMC4wIC0+IC0wLjANCi1kcW1heDA0NSBtYXggIC0wLjAgICAwLjAgLT4gIDAuMA0KLQ0KLWRxbWF4MDUwIG1heCAgLTBFMSAgIDBFMSAtPiAgMEUrMQ0KLWRxbWF4MDUxIG1heCAgLTBFMiAgIDBFMiAtPiAgMEUrMg0KLWRxbWF4MDUyIG1heCAgLTBFMiAgIDBFMSAtPiAgMEUrMQ0KLWRxbWF4MDUzIG1heCAgLTBFMSAgIDBFMiAtPiAgMEUrMg0KLWRxbWF4MDU0IG1heCAgIDBFMSAgLTBFMSAtPiAgMEUrMQ0KLWRxbWF4MDU1IG1heCAgIDBFMiAgLTBFMiAtPiAgMEUrMg0KLWRxbWF4MDU2IG1heCAgIDBFMiAgLTBFMSAtPiAgMEUrMg0KLWRxbWF4MDU3IG1heCAgIDBFMSAgLTBFMiAtPiAgMEUrMQ0KLQ0KLWRxbWF4MDU4IG1heCAgIDBFMSAgIDBFMSAtPiAgMEUrMQ0KLWRxbWF4MDU5IG1heCAgIDBFMiAgIDBFMiAtPiAgMEUrMg0KLWRxbWF4MDYwIG1heCAgIDBFMiAgIDBFMSAtPiAgMEUrMg0KLWRxbWF4MDYxIG1heCAgIDBFMSAgIDBFMiAtPiAgMEUrMg0KLWRxbWF4MDYyIG1heCAgLTBFMSAgLTBFMSAtPiAtMEUrMQ0KLWRxbWF4MDYzIG1heCAgLTBFMiAgLTBFMiAtPiAtMEUrMg0KLWRxbWF4MDY0IG1heCAgLTBFMiAgLTBFMSAtPiAtMEUrMQ0KLWRxbWF4MDY1IG1heCAgLTBFMSAgLTBFMiAtPiAtMEUrMQ0KLQ0KLS0tIFNwZWNpYWxzDQotZHFtYXgwOTAgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcW1heDA5MSBtYXggIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MDkyIG1heCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZHFtYXgwOTMgbWF4ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCi1kcW1heDA5NCBtYXggIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MDk1IG1heCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZHFtYXgwOTYgbWF4ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1kcW1heDA5NyBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MDk4IG1heCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZHFtYXgwOTkgbWF4IC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW1heDEwMCBtYXggLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MTAxIG1heCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFtYXgxMDIgbWF4ICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW1heDEwMyBtYXggIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MTA0IG1heCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZHFtYXgxMDUgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcW1heDEyMCBtYXggLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWF4MTIxIG1heCAtSW5mICAtMTAwMCAgLT4gLTEwMDANCi1kcW1heDEyMiBtYXggLUluZiAgLTEgICAgIC0+IC0xDQotZHFtYXgxMjMgbWF4IC1JbmYgIC0wICAgICAtPiAtMA0KLWRxbWF4MTI0IG1heCAtSW5mICAgMCAgICAgLT4gIDANCi1kcW1heDEyNSBtYXggLUluZiAgIDEgICAgIC0+ICAxDQotZHFtYXgxMjYgbWF4IC1JbmYgICAxMDAwICAtPiAgMTAwMA0KLWRxbWF4MTI3IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFtYXgxMjggbWF4IC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5DQotZHFtYXgxMjkgbWF4IC0xMDAwIC1JbmYgICAtPiAgLTEwMDANCi1kcW1heDEzMCBtYXggLTEgICAgLUluZiAgIC0+ICAtMQ0KLWRxbWF4MTMxIG1heCAtMCAgICAtSW5mICAgLT4gIC0wDQotZHFtYXgxMzIgbWF4ICAwICAgIC1JbmYgICAtPiAgMA0KLWRxbWF4MTMzIG1heCAgMSAgICAtSW5mICAgLT4gIDENCi1kcW1heDEzNCBtYXggIDEwMDAgLUluZiAgIC0+ICAxMDAwDQotZHFtYXgxMzUgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi0NCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCi1kcW1heDE0MSBtYXggIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWRxbWF4MTQyIG1heCAgTmFOIC0xMDAwICAgLT4gLTEwMDANCi1kcW1heDE0MyBtYXggIE5hTiAtMSAgICAgIC0+IC0xDQotZHFtYXgxNDQgbWF4ICBOYU4gLTAgICAgICAtPiAtMA0KLWRxbWF4MTQ1IG1heCAgTmFOICAwICAgICAgLT4gIDANCi1kcW1heDE0NiBtYXggIE5hTiAgMSAgICAgIC0+ICAxDQotZHFtYXgxNDcgbWF4ICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KLWRxbWF4MTQ4IG1heCAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5DQotZHFtYXgxNDkgbWF4ICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFtYXgxNTAgbWF4IC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCi1kcW1heDE1MSBtYXggLTEwMDAgTmFOICAgIC0+IC0xMDAwDQotZHFtYXgxNTIgbWF4IC0xICAgIE5hTiAgICAtPiAtMQ0KLWRxbWF4MTUzIG1heCAtMCAgICBOYU4gICAgLT4gLTANCi1kcW1heDE1NCBtYXggIDAgICAgTmFOICAgIC0+ICAwDQotZHFtYXgxNTUgbWF4ICAxICAgIE5hTiAgICAtPiAgMQ0KLWRxbWF4MTU2IG1heCAgMTAwMCBOYU4gICAgLT4gIDEwMDANCi1kcW1heDE1NyBtYXggIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbWF4MTYxIG1heCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE2MiBtYXggIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNjMgbWF4ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTY0IG1heCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE2NSBtYXggIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNjYgbWF4ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTY3IG1heCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE2OCBtYXggIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNjkgbWF4ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTcwIG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE3MSBtYXggLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNzIgbWF4IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTczIG1heCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE3NCBtYXggLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNzUgbWF4ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTc2IG1heCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE3NyBtYXggIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNzggbWF4ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTc5IG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFtYXgxODEgbWF4ICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtYXgxODIgbWF4ICBOYU44ICAgICA5ICAgLT4gIDkNCi1kcW1heDE4MyBtYXggLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcW1heDE4NCBtYXggLU5hTjEgICBOYU4xMSAtPiAtTmFOMQ0KLWRxbWF4MTg1IG1heCAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yDQotZHFtYXgxODYgbWF4IC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzDQotZHFtYXgxODcgbWF4ICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0DQotDQotZHFtYXgxODggbWF4IC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5DQotZHFtYXgxODkgbWF4IC05ICAgICAtTmFOMyAgLT4gLTkNCi1kcW1heDE5MCBtYXggIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkNCi0NCi1kcW1heDE5MSBtYXggIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTkyIG1heCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxOTMgbWF4IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE5NCBtYXggIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTk1IG1heCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxOTYgbWF4IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE5NyBtYXggIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTk4IG1heCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxOTkgbWF4ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvbGQgcm91bmRpbmcgY2hlY2tzDQotZHFtYXgyMjEgbWF4IDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwDQotZHFtYXgyMjIgbWF4IDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwDQotZHFtYXgyMjMgbWF4IDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDANCi1kcW1heDIyNCBtYXggMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMA0KLWRxbWF4MjI1IG1heCAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwDQotZHFtYXgyMjYgbWF4IDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTANCi1kcW1heDIyNyBtYXggMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQ0KLWRxbWF4MjI4IG1heCAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxDQotZHFtYXgyMjkgbWF4IDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxDQotZHFtYXgyMzAgbWF4IDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxDQotZHFtYXgyMzEgbWF4IDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYNCi1kcW1heDIzMiBtYXggMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5Ng0KLWRxbWF4MjMzIG1heCAtMTIzNDU2Nzg5MSAgMSAtPiAxDQotZHFtYXgyMzQgbWF4IDEgLTEyMzQ1Njc4OTEgIC0+IDENCi1kcW1heDIzNSBtYXggLTEyMzQ1Njc4OTAxIDEgLT4gMQ0KLWRxbWF4MjM2IG1heCAxIC0xMjM0NTY3ODkwMSAtPiAxDQotZHFtYXgyMzcgbWF4IC0xMjM0NTY3ODk2ICAxIC0+IDENCi1kcW1heDIzOCBtYXggMSAtMTIzNDU2Nzg5NiAgLT4gMQ0KLQ0KLS0tIGZyb20gZXhhbXBsZXMNCi1kcW1heDI4MCBtYXggJzMnICAgJzInICAtPiAgJzMnDQotZHFtYXgyODEgbWF4ICctMTAnICczJyAgLT4gICczJw0KLWRxbWF4MjgyIG1heCAnMS4wJyAnMScgIC0+ICAnMScNCi1kcW1heDI4MyBtYXggJzEnICcxLjAnICAtPiAgJzEnDQotZHFtYXgyODQgbWF4ICc3JyAnTmFOJyAgLT4gICc3Jw0KLQ0KLS0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlDQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10NCi1kcW1heDQwMSBtYXggIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4NDAyIG1heCAgMS4xICAgIDEgICAgICAgLT4gIDEuMQ0KLWRxbWF4NDAzIG1heCAgMSAgICAgIDEuMCAgICAgLT4gIDENCi1kcW1heDQwNCBtYXggIDEuMCAgICAwLjEgICAgIC0+ICAxLjANCi1kcW1heDQwNSBtYXggIDAuMSAgICAwLjEwICAgIC0+ICAwLjENCi1kcW1heDQwNiBtYXggIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwDQotZHFtYXg0MDcgbWF4ICAwLjEwICAgMCAgICAgICAtPiAgMC4xMA0KLWRxbWF4NDA4IG1heCAgMCAgICAgIDAuMCAgICAgLT4gIDANCi1kcW1heDQwOSBtYXggIDAuMCAgIC0wICAgICAgIC0+ICAwLjANCi1kcW1heDQxMCBtYXggIDAuMCAgIC0wLjAgICAgIC0+ICAwLjANCi1kcW1heDQxMSBtYXggIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwDQotZHFtYXg0MTIgbWF4ICAwLjAgICAtMC4wMCAgICAtPiAgMC4wDQotZHFtYXg0MTMgbWF4ICAwICAgICAtMC4wICAgICAtPiAgMA0KLWRxbWF4NDE0IG1heCAgMCAgICAgLTAgICAgICAgLT4gIDANCi1kcW1heDQxNSBtYXggLTAuMCAgIC0wICAgICAgIC0+IC0wLjANCi1kcW1heDQxNiBtYXggLTAgICAgIC0wLjEwMCAgIC0+IC0wDQotZHFtYXg0MTcgbWF4IC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDANCi1kcW1heDQxOCBtYXggLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwDQotZHFtYXg0MTkgbWF4IC0wLjEgICAtMS4wICAgICAtPiAtMC4xDQotZHFtYXg0MjAgbWF4IC0xLjAgICAtMSAgICAgICAtPiAtMS4wDQotZHFtYXg0MjEgbWF4IC0xICAgICAtMS4xICAgICAtPiAtMQ0KLWRxbWF4NDIzIG1heCAtMS4xICAgLUluZiAgICAgLT4gLTEuMQ0KLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KLWRxbWF4NDMxIG1heCAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5DQotZHFtYXg0MzIgbWF4ICAxICAgICAgMS4xICAgICAtPiAgMS4xDQotZHFtYXg0MzMgbWF4ICAxLjAgICAgMSAgICAgICAtPiAgMQ0KLWRxbWF4NDM0IG1heCAgMC4xICAgIDEuMCAgICAgLT4gIDEuMA0KLWRxbWF4NDM1IG1heCAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQ0KLWRxbWF4NDM2IG1heCAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTANCi1kcW1heDQzNyBtYXggIDAgICAgICAwLjEwICAgIC0+ICAwLjEwDQotZHFtYXg0MzggbWF4ICAwLjAgICAgMCAgICAgICAtPiAgMA0KLWRxbWF4NDM5IG1heCAtMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KLWRxbWF4NDQwIG1heCAtMC4wICAgIDAuMCAgICAgLT4gIDAuMA0KLWRxbWF4NDQxIG1heCAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDANCi1kcW1heDQ0MiBtYXggLTAuMDAgICAwLjAgICAgIC0+ICAwLjANCi1kcW1heDQ0MyBtYXggLTAuMCAgICAwICAgICAgIC0+ICAwDQotZHFtYXg0NDQgbWF4IC0wICAgICAgMCAgICAgICAtPiAgMA0KLWRxbWF4NDQ1IG1heCAtMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KLWRxbWF4NDQ2IG1heCAtMC4xMDAgLTAgICAgICAgLT4gLTANCi1kcW1heDQ0NyBtYXggLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KLWRxbWF4NDQ4IG1heCAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTANCi1kcW1heDQ0OSBtYXggLTEuMCAgIC0wLjEgICAgIC0+IC0wLjENCi1kcW1heDQ1MCBtYXggLTEgICAgIC0xLjAgICAgIC0+IC0xLjANCi1kcW1heDQ1MSBtYXggLTEuMSAgIC0xICAgICAgIC0+IC0xDQotZHFtYXg0NTMgbWF4IC1JbmYgICAtMS4xICAgICAtPiAtMS4xDQotLS0gbGFyZ2llcw0KLWRxbWF4NDYwIG1heCAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMNCi1kcW1heDQ2MSBtYXggIDFFKzMgICAxMDAwICAgIC0+ICAxRSszDQotZHFtYXg0NjIgbWF4ICAxMDAwICAtMUUrMyAgICAtPiAgMTAwMA0KLWRxbWF4NDYzIG1heCAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMNCi1kcW1heDQ2NCBtYXggLTEwMDAgICAxRSszICAgIC0+ICAxRSszDQotZHFtYXg0NjUgbWF4IC0xRSszICAgMTAwMCAgICAtPiAgMTAwMA0KLWRxbWF4NDY2IG1heCAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDANCi1kcW1heDQ2NyBtYXggLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwDQotDQotLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuDQotZHFtYXg0NzEgbWF4ICAgICAgMS4wICAgICAgIDAuMSAgLT4gMS4wDQotZHFtYXg0NzIgbWF4ICAgICAgMC4xICAgICAgIDEuMCAgLT4gMS4wDQotZHFtYXg0NzMgbWF4ICAgICAxMC4wICAgICAgIDAuMSAgLT4gMTAuMA0KLWRxbWF4NDc0IG1heCAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDEwLjANCi1kcW1heDQ3NSBtYXggICAgICAxMDAgICAgICAgMS4wICAtPiAxMDANCi1kcW1heDQ3NiBtYXggICAgICAxLjAgICAgICAgMTAwICAtPiAxMDANCi1kcW1heDQ3NyBtYXggICAgIDEwMDAgICAgICAxMC4wICAtPiAxMDAwDQotZHFtYXg0NzggbWF4ICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAwMA0KLWRxbWF4NDc5IG1heCAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMDAwDQotZHFtYXg0ODAgbWF4ICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwMDANCi1kcW1heDQ4MSBtYXggICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwMDANCi1kcW1heDQ4MiBtYXggICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwMDANCi1kcW1heDQ4MyBtYXggIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMDAwDQotZHFtYXg0ODQgbWF4ICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAwMA0KLQ0KLS0tIHN1Ym5vcm1hbHMNCi1kcW1heDUxMCBtYXggIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAxLjAwRS02MTQzDQotZHFtYXg1MTEgbWF4ICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMUUtNjE0NCAgICBTdWJub3JtYWwNCi1kcW1heDUxMiBtYXggIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAxLjBFLTYxNDQgIFN1Ym5vcm1hbA0KLWRxbWF4NTEzIG1heCAgMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDEuMDBFLTYxNDQgU3Vibm9ybWFsDQotZHFtYXg1MTQgbWF4ICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMUUtNjE0NSAgICBTdWJub3JtYWwNCi1kcW1heDUxNSBtYXggIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICA5Ljk5RS02MTQ0IFN1Ym5vcm1hbA0KLWRxbWF4NTE2IG1heCAgMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDkuOUUtNjE0NSAgU3Vibm9ybWFsDQotZHFtYXg1MTcgbWF4ICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgOUUtNjE0NiAgICBTdWJub3JtYWwNCi1kcW1heDUxOCBtYXggIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAxRS02MTQ2ICAgIFN1Ym5vcm1hbA0KLWRxbWF4NTE5IG1heCAgMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDlFLTYxNDcgICAgU3Vibm9ybWFsDQotZHFtYXg1MjAgbWF4ICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMUUtNjE0NyAgICBTdWJub3JtYWwNCi0NCi1kcW1heDUzMCBtYXggLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAwDQotZHFtYXg1MzEgbWF4IC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMA0KLWRxbWF4NTMyIG1heCAtMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDANCi1kcW1heDUzMyBtYXggLTAuMTAwRS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtYXg1MzQgbWF4IC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMA0KLWRxbWF4NTM1IG1heCAtMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1heDUzNiBtYXggLTAuMDk5RS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtYXg1MzcgbWF4IC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbWF4NTM4IG1heCAtMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1heDUzOSBtYXggLTAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICAwDQotZHFtYXg1NDAgbWF4IC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcW1heDkwMCBtYXggMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4OTAxIG1heCAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcU1heC5kZWNUZXN0IC0tIGRlY1F1YWQgbWF4bnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcW1heDAwMSBtYXggIC0yICAtMiAgLT4gLTIKK2RxbWF4MDAyIG1heCAgLTIgIC0xICAtPiAtMQorZHFtYXgwMDMgbWF4ICAtMiAgIDAgIC0+ICAwCitkcW1heDAwNCBtYXggIC0yICAgMSAgLT4gIDEKK2RxbWF4MDA1IG1heCAgLTIgICAyICAtPiAgMgorZHFtYXgwMDYgbWF4ICAtMSAgLTIgIC0+IC0xCitkcW1heDAwNyBtYXggIC0xICAtMSAgLT4gLTEKK2RxbWF4MDA4IG1heCAgLTEgICAwICAtPiAgMAorZHFtYXgwMDkgbWF4ICAtMSAgIDEgIC0+ICAxCitkcW1heDAxMCBtYXggIC0xICAgMiAgLT4gIDIKK2RxbWF4MDExIG1heCAgIDAgIC0yICAtPiAgMAorZHFtYXgwMTIgbWF4ICAgMCAgLTEgIC0+ICAwCitkcW1heDAxMyBtYXggICAwICAgMCAgLT4gIDAKK2RxbWF4MDE0IG1heCAgIDAgICAxICAtPiAgMQorZHFtYXgwMTUgbWF4ICAgMCAgIDIgIC0+ICAyCitkcW1heDAxNiBtYXggICAxICAtMiAgLT4gIDEKK2RxbWF4MDE3IG1heCAgIDEgIC0xICAtPiAgMQorZHFtYXgwMTggbWF4ICAgMSAgIDAgIC0+ICAxCitkcW1heDAxOSBtYXggICAxICAgMSAgLT4gIDEKK2RxbWF4MDIwIG1heCAgIDEgICAyICAtPiAgMgorZHFtYXgwMjEgbWF4ICAgMiAgLTIgIC0+ICAyCitkcW1heDAyMiBtYXggICAyICAtMSAgLT4gIDIKK2RxbWF4MDIzIG1heCAgIDIgICAwICAtPiAgMgorZHFtYXgwMjUgbWF4ICAgMiAgIDEgIC0+ICAyCitkcW1heDAyNiBtYXggICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RxbWF4MDMwIG1heCAgIDAgICAgIDAgICAtPiAgMAorZHFtYXgwMzEgbWF4ICAgMCAgICAtMCAgIC0+ICAwCitkcW1heDAzMiBtYXggICAwICAgIC0wLjAgLT4gIDAKK2RxbWF4MDMzIG1heCAgIDAgICAgIDAuMCAtPiAgMAorZHFtYXgwMzQgbWF4ICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuCitkcW1heDAzNSBtYXggIC0wICAgIC0wICAgLT4gLTAKK2RxbWF4MDM2IG1heCAgLTAgICAgLTAuMCAtPiAtMC4wCitkcW1heDAzNyBtYXggIC0wICAgICAwLjAgLT4gIDAuMAorZHFtYXgwMzggbWF4ICAgMC4wICAgMCAgIC0+ICAwCitkcW1heDAzOSBtYXggICAwLjAgIC0wICAgLT4gIDAuMAorZHFtYXgwNDAgbWF4ICAgMC4wICAtMC4wIC0+ICAwLjAKK2RxbWF4MDQxIG1heCAgIDAuMCAgIDAuMCAtPiAgMC4wCitkcW1heDA0MiBtYXggIC0wLjAgICAwICAgLT4gIDAKK2RxbWF4MDQzIG1heCAgLTAuMCAgLTAgICAtPiAtMC4wCitkcW1heDA0NCBtYXggIC0wLjAgIC0wLjAgLT4gLTAuMAorZHFtYXgwNDUgbWF4ICAtMC4wICAgMC4wIC0+ICAwLjAKKworZHFtYXgwNTAgbWF4ICAtMEUxICAgMEUxIC0+ICAwRSsxCitkcW1heDA1MSBtYXggIC0wRTIgICAwRTIgLT4gIDBFKzIKK2RxbWF4MDUyIG1heCAgLTBFMiAgIDBFMSAtPiAgMEUrMQorZHFtYXgwNTMgbWF4ICAtMEUxICAgMEUyIC0+ICAwRSsyCitkcW1heDA1NCBtYXggICAwRTEgIC0wRTEgLT4gIDBFKzEKK2RxbWF4MDU1IG1heCAgIDBFMiAgLTBFMiAtPiAgMEUrMgorZHFtYXgwNTYgbWF4ICAgMEUyICAtMEUxIC0+ICAwRSsyCitkcW1heDA1NyBtYXggICAwRTEgIC0wRTIgLT4gIDBFKzEKKworZHFtYXgwNTggbWF4ICAgMEUxICAgMEUxIC0+ICAwRSsxCitkcW1heDA1OSBtYXggICAwRTIgICAwRTIgLT4gIDBFKzIKK2RxbWF4MDYwIG1heCAgIDBFMiAgIDBFMSAtPiAgMEUrMgorZHFtYXgwNjEgbWF4ICAgMEUxICAgMEUyIC0+ICAwRSsyCitkcW1heDA2MiBtYXggIC0wRTEgIC0wRTEgLT4gLTBFKzEKK2RxbWF4MDYzIG1heCAgLTBFMiAgLTBFMiAtPiAtMEUrMgorZHFtYXgwNjQgbWF4ICAtMEUyICAtMEUxIC0+IC0wRSsxCitkcW1heDA2NSBtYXggIC0wRTEgIC0wRTIgLT4gLTBFKzEKKworLS0gU3BlY2lhbHMKK2RxbWF4MDkwIG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkcW1heDA5MSBtYXggIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTIgbWF4ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RxbWF4MDkzIG1heCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkcW1heDA5NCBtYXggIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTUgbWF4ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RxbWF4MDk2IG1heCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkcW1heDA5NyBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTggbWF4IC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MDk5IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDEwMCBtYXggLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgxMDEgbWF4IC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MTAyIG1heCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDEwMyBtYXggIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgxMDQgbWF4ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MTA1IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbWF4MTIwIG1heCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1heDEyMSBtYXggLUluZiAgLTEwMDAgIC0+IC0xMDAwCitkcW1heDEyMiBtYXggLUluZiAgLTEgICAgIC0+IC0xCitkcW1heDEyMyBtYXggLUluZiAgLTAgICAgIC0+IC0wCitkcW1heDEyNCBtYXggLUluZiAgIDAgICAgIC0+ICAwCitkcW1heDEyNSBtYXggLUluZiAgIDEgICAgIC0+ICAxCitkcW1heDEyNiBtYXggLUluZiAgIDEwMDAgIC0+ICAxMDAwCitkcW1heDEyNyBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgxMjggbWF4IC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5CitkcW1heDEyOSBtYXggLTEwMDAgLUluZiAgIC0+ICAtMTAwMAorZHFtYXgxMzAgbWF4IC0xICAgIC1JbmYgICAtPiAgLTEKK2RxbWF4MTMxIG1heCAtMCAgICAtSW5mICAgLT4gIC0wCitkcW1heDEzMiBtYXggIDAgICAgLUluZiAgIC0+ICAwCitkcW1heDEzMyBtYXggIDEgICAgLUluZiAgIC0+ICAxCitkcW1heDEzNCBtYXggIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkcW1heDEzNSBtYXggIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RxbWF4MTQxIG1heCAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5CitkcW1heDE0MiBtYXggIE5hTiAtMTAwMCAgIC0+IC0xMDAwCitkcW1heDE0MyBtYXggIE5hTiAtMSAgICAgIC0+IC0xCitkcW1heDE0NCBtYXggIE5hTiAtMCAgICAgIC0+IC0wCitkcW1heDE0NSBtYXggIE5hTiAgMCAgICAgIC0+ICAwCitkcW1heDE0NiBtYXggIE5hTiAgMSAgICAgIC0+ICAxCitkcW1heDE0NyBtYXggIE5hTiAgMTAwMCAgIC0+ICAxMDAwCitkcW1heDE0OCBtYXggIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFtYXgxNDkgbWF4ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcW1heDE1MCBtYXggLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorZHFtYXgxNTEgbWF4IC0xMDAwIE5hTiAgICAtPiAtMTAwMAorZHFtYXgxNTIgbWF4IC0xICAgIE5hTiAgICAtPiAtMQorZHFtYXgxNTMgbWF4IC0wICAgIE5hTiAgICAtPiAtMAorZHFtYXgxNTQgbWF4ICAwICAgIE5hTiAgICAtPiAgMAorZHFtYXgxNTUgbWF4ICAxICAgIE5hTiAgICAtPiAgMQorZHFtYXgxNTYgbWF4ICAxMDAwIE5hTiAgICAtPiAgMTAwMAorZHFtYXgxNTcgbWF4ICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworZHFtYXgxNjEgbWF4ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjIgbWF4ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjMgbWF4ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjQgbWF4ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjUgbWF4ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjYgbWF4ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjcgbWF4ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjggbWF4ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjkgbWF4ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzAgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzEgbWF4IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzIgbWF4IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzMgbWF4IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzQgbWF4IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzUgbWF4ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzYgbWF4ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzcgbWF4ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzggbWF4ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzkgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcW1heDE4MSBtYXggIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWF4MTgyIG1heCAgTmFOOCAgICAgOSAgIC0+ICA5CitkcW1heDE4MyBtYXggLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFtYXgxODQgbWF4IC1OYU4xICAgTmFOMTEgLT4gLU5hTjEKK2RxbWF4MTg1IG1heCAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yCitkcW1heDE4NiBtYXggLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMKK2RxbWF4MTg3IG1heCAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNAorCitkcW1heDE4OCBtYXggLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkKK2RxbWF4MTg5IG1heCAtOSAgICAgLU5hTjMgIC0+IC05CitkcW1heDE5MCBtYXggIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkKKworZHFtYXgxOTEgbWF4ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTkyIG1heCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5MyBtYXggLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxOTQgbWF4ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTk1IG1heCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5NiBtYXggLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxOTcgbWF4ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTk4IG1heCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5OSBtYXggIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvbGQgcm91bmRpbmcgY2hlY2tzCitkcW1heDIyMSBtYXggMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDAKK2RxbWF4MjIyIG1heCAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAorZHFtYXgyMjMgbWF4IDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDAKK2RxbWF4MjI0IG1heCAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCitkcW1heDIyNSBtYXggMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MAorZHFtYXgyMjYgbWF4IDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK2RxbWF4MjI3IG1heCAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxCitkcW1heDIyOCBtYXggMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQorZHFtYXgyMjkgbWF4IDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxCitkcW1heDIzMCBtYXggMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK2RxbWF4MjMxIG1heCAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2CitkcW1heDIzMiBtYXggMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorZHFtYXgyMzMgbWF4IC0xMjM0NTY3ODkxICAxIC0+IDEKK2RxbWF4MjM0IG1heCAxIC0xMjM0NTY3ODkxICAtPiAxCitkcW1heDIzNSBtYXggLTEyMzQ1Njc4OTAxIDEgLT4gMQorZHFtYXgyMzYgbWF4IDEgLTEyMzQ1Njc4OTAxIC0+IDEKK2RxbWF4MjM3IG1heCAtMTIzNDU2Nzg5NiAgMSAtPiAxCitkcW1heDIzOCBtYXggMSAtMTIzNDU2Nzg5NiAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCitkcW1heDI4MCBtYXggJzMnICAgJzInICAtPiAgJzMnCitkcW1heDI4MSBtYXggJy0xMCcgJzMnICAtPiAgJzMnCitkcW1heDI4MiBtYXggJzEuMCcgJzEnICAtPiAgJzEnCitkcW1heDI4MyBtYXggJzEnICcxLjAnICAtPiAgJzEnCitkcW1heDI4NCBtYXggJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZHFtYXg0MDEgbWF4ICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKK2RxbWF4NDAyIG1heCAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorZHFtYXg0MDMgbWF4ICAxICAgICAgMS4wICAgICAtPiAgMQorZHFtYXg0MDQgbWF4ICAxLjAgICAgMC4xICAgICAtPiAgMS4wCitkcW1heDQwNSBtYXggIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK2RxbWF4NDA2IG1heCAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAKK2RxbWF4NDA3IG1heCAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKK2RxbWF4NDA4IG1heCAgMCAgICAgIDAuMCAgICAgLT4gIDAKK2RxbWF4NDA5IG1heCAgMC4wICAgLTAgICAgICAgLT4gIDAuMAorZHFtYXg0MTAgbWF4ICAwLjAgICAtMC4wICAgICAtPiAgMC4wCitkcW1heDQxMSBtYXggIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCitkcW1heDQxMiBtYXggIDAuMCAgIC0wLjAwICAgIC0+ICAwLjAKK2RxbWF4NDEzIG1heCAgMCAgICAgLTAuMCAgICAgLT4gIDAKK2RxbWF4NDE0IG1heCAgMCAgICAgLTAgICAgICAgLT4gIDAKK2RxbWF4NDE1IG1heCAtMC4wICAgLTAgICAgICAgLT4gLTAuMAorZHFtYXg0MTYgbWF4IC0wICAgICAtMC4xMDAgICAtPiAtMAorZHFtYXg0MTcgbWF4IC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKK2RxbWF4NDE4IG1heCAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKK2RxbWF4NDE5IG1heCAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQorZHFtYXg0MjAgbWF4IC0xLjAgICAtMSAgICAgICAtPiAtMS4wCitkcW1heDQyMSBtYXggLTEgICAgIC0xLjEgICAgIC0+IC0xCitkcW1heDQyMyBtYXggLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZHFtYXg0MzEgbWF4ICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkKK2RxbWF4NDMyIG1heCAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQorZHFtYXg0MzMgbWF4ICAxLjAgICAgMSAgICAgICAtPiAgMQorZHFtYXg0MzQgbWF4ICAwLjEgICAgMS4wICAgICAtPiAgMS4wCitkcW1heDQzNSBtYXggIDAuMTAgICAwLjEgICAgIC0+ICAwLjEKK2RxbWF4NDM2IG1heCAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAKK2RxbWF4NDM3IG1heCAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTAKK2RxbWF4NDM4IG1heCAgMC4wICAgIDAgICAgICAgLT4gIDAKK2RxbWF4NDM5IG1heCAtMCAgICAgIDAuMCAgICAgLT4gIDAuMAorZHFtYXg0NDAgbWF4IC0wLjAgICAgMC4wICAgICAtPiAgMC4wCitkcW1heDQ0MSBtYXggLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwCitkcW1heDQ0MiBtYXggLTAuMDAgICAwLjAgICAgIC0+ICAwLjAKK2RxbWF4NDQzIG1heCAtMC4wICAgIDAgICAgICAgLT4gIDAKK2RxbWF4NDQ0IG1heCAtMCAgICAgIDAgICAgICAgLT4gIDAKK2RxbWF4NDQ1IG1heCAtMCAgICAgLTAuMCAgICAgLT4gLTAuMAorZHFtYXg0NDYgbWF4IC0wLjEwMCAtMCAgICAgICAtPiAtMAorZHFtYXg0NDcgbWF4IC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDAKK2RxbWF4NDQ4IG1heCAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKK2RxbWF4NDQ5IG1heCAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQorZHFtYXg0NTAgbWF4IC0xICAgICAtMS4wICAgICAtPiAtMS4wCitkcW1heDQ1MSBtYXggLTEuMSAgIC0xICAgICAgIC0+IC0xCitkcW1heDQ1MyBtYXggLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKKy0tIGxhcmdpZXMKK2RxbWF4NDYwIG1heCAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RxbWF4NDYxIG1heCAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMKK2RxbWF4NDYyIG1heCAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKK2RxbWF4NDYzIG1heCAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKK2RxbWF4NDY0IG1heCAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RxbWF4NDY1IG1heCAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RxbWF4NDY2IG1heCAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKK2RxbWF4NDY3IG1heCAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitkcW1heDQ3MSBtYXggICAgICAxLjAgICAgICAgMC4xICAtPiAxLjAKK2RxbWF4NDcyIG1heCAgICAgIDAuMSAgICAgICAxLjAgIC0+IDEuMAorZHFtYXg0NzMgbWF4ICAgICAxMC4wICAgICAgIDAuMSAgLT4gMTAuMAorZHFtYXg0NzQgbWF4ICAgICAgMC4xICAgICAgMTAuMCAgLT4gMTAuMAorZHFtYXg0NzUgbWF4ICAgICAgMTAwICAgICAgIDEuMCAgLT4gMTAwCitkcW1heDQ3NiBtYXggICAgICAxLjAgICAgICAgMTAwICAtPiAxMDAKK2RxbWF4NDc3IG1heCAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwMDAKK2RxbWF4NDc4IG1heCAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwMDAKK2RxbWF4NDc5IG1heCAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMDAwCitkcW1heDQ4MCBtYXggICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAwMAorZHFtYXg0ODEgbWF4ICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMDAwCitkcW1heDQ4MiBtYXggICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwMDAKK2RxbWF4NDgzIG1heCAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwMDAKK2RxbWF4NDg0IG1heCAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwMDAKKworLS0gc3Vibm9ybWFscworZHFtYXg1MTAgbWF4ICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wMEUtNjE0MworZHFtYXg1MTEgbWF4ICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMUUtNjE0NCAgICBTdWJub3JtYWwKK2RxbWF4NTEyIG1heCAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDEuMEUtNjE0NCAgU3Vibm9ybWFsCitkcW1heDUxMyBtYXggIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAxLjAwRS02MTQ0IFN1Ym5vcm1hbAorZHFtYXg1MTQgbWF4ICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMUUtNjE0NSAgICBTdWJub3JtYWwKK2RxbWF4NTE1IG1heCAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDkuOTlFLTYxNDQgU3Vibm9ybWFsCitkcW1heDUxNiBtYXggIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICA5LjlFLTYxNDUgIFN1Ym5vcm1hbAorZHFtYXg1MTcgbWF4ICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgOUUtNjE0NiAgICBTdWJub3JtYWwKK2RxbWF4NTE4IG1heCAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDFFLTYxNDYgICAgU3Vibm9ybWFsCitkcW1heDUxOSBtYXggIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICA5RS02MTQ3ICAgIFN1Ym5vcm1hbAorZHFtYXg1MjAgbWF4ICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMUUtNjE0NyAgICBTdWJub3JtYWwKKworZHFtYXg1MzAgbWF4IC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzEgbWF4IC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzIgbWF4IC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzMgbWF4IC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzQgbWF4IC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzUgbWF4IC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzYgbWF4IC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzcgbWF4IC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzggbWF4IC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzkgbWF4IC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMAorZHFtYXg1NDAgbWF4IC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMAorCistLSBOdWxsIHRlc3RzCitkcW1heDkwMCBtYXggMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXg5MDEgbWF4ICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heE1hZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWF4TWFnLmRlY1Rlc3QKaW5kZXggNmY1YmUyNC4uNjYyMWU4MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWF4TWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWF4TWFnLmRlY1Rlc3QKQEAgLTEsMzA0ICsxLDMwNCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFNYXhNYWcuZGVjVGVzdCAtLSBkZWNRdWFkIG1heG51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbw0KLS0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZHFteGcwMDEgbWF4bWFnICAtMiAgLTIgIC0+IC0yDQotZHFteGcwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yDQotZHFteGcwMDMgbWF4bWFnICAtMiAgIDAgIC0+IC0yDQotZHFteGcwMDQgbWF4bWFnICAtMiAgIDEgIC0+IC0yDQotZHFteGcwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyDQotZHFteGcwMDYgbWF4bWFnICAtMSAgLTIgIC0+IC0yDQotZHFteGcwMDcgbWF4bWFnICAtMSAgLTEgIC0+IC0xDQotZHFteGcwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xDQotZHFteGcwMDkgbWF4bWFnICAtMSAgIDEgIC0+ICAxDQotZHFteGcwMTAgbWF4bWFnICAtMSAgIDIgIC0+ICAyDQotZHFteGcwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yDQotZHFteGcwMTIgbWF4bWFnICAgMCAgLTEgIC0+IC0xDQotZHFteGcwMTMgbWF4bWFnICAgMCAgIDAgIC0+ICAwDQotZHFteGcwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxDQotZHFteGcwMTUgbWF4bWFnICAgMCAgIDIgIC0+ICAyDQotZHFteGcwMTYgbWF4bWFnICAgMSAgLTIgIC0+IC0yDQotZHFteGcwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxDQotZHFteGcwMTggbWF4bWFnICAgMSAgIDAgIC0+ICAxDQotZHFteGcwMTkgbWF4bWFnICAgMSAgIDEgIC0+ICAxDQotZHFteGcwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyDQotZHFteGcwMjEgbWF4bWFnICAgMiAgLTIgIC0+ICAyDQotZHFteGcwMjIgbWF4bWFnICAgMiAgLTEgIC0+ICAyDQotZHFteGcwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyDQotZHFteGcwMjUgbWF4bWFnICAgMiAgIDEgIC0+ICAyDQotZHFteGcwMjYgbWF4bWFnICAgMiAgIDIgIC0+ICAyDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kcW14ZzAzMCBtYXhtYWcgICAwICAgICAwICAgLT4gIDANCi1kcW14ZzAzMSBtYXhtYWcgICAwICAgIC0wICAgLT4gIDANCi1kcW14ZzAzMiBtYXhtYWcgICAwICAgIC0wLjAgLT4gIDANCi1kcW14ZzAzMyBtYXhtYWcgICAwICAgICAwLjAgLT4gIDANCi1kcW14ZzAzNCBtYXhtYWcgIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4NCi1kcW14ZzAzNSBtYXhtYWcgIC0wICAgIC0wICAgLT4gLTANCi1kcW14ZzAzNiBtYXhtYWcgIC0wICAgIC0wLjAgLT4gLTAuMA0KLWRxbXhnMDM3IG1heG1hZyAgLTAgICAgIDAuMCAtPiAgMC4wDQotZHFteGcwMzggbWF4bWFnICAgMC4wICAgMCAgIC0+ICAwDQotZHFteGcwMzkgbWF4bWFnICAgMC4wICAtMCAgIC0+ICAwLjANCi1kcW14ZzA0MCBtYXhtYWcgICAwLjAgIC0wLjAgLT4gIDAuMA0KLWRxbXhnMDQxIG1heG1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wDQotZHFteGcwNDIgbWF4bWFnICAtMC4wICAgMCAgIC0+ICAwDQotZHFteGcwNDMgbWF4bWFnICAtMC4wICAtMCAgIC0+IC0wLjANCi1kcW14ZzA0NCBtYXhtYWcgIC0wLjAgIC0wLjAgLT4gLTAuMA0KLWRxbXhnMDQ1IG1heG1hZyAgLTAuMCAgIDAuMCAtPiAgMC4wDQotDQotZHFteGcwNTAgbWF4bWFnICAtMEUxICAgMEUxIC0+ICAwRSsxDQotZHFteGcwNTEgbWF4bWFnICAtMEUyICAgMEUyIC0+ICAwRSsyDQotZHFteGcwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxDQotZHFteGcwNTMgbWF4bWFnICAtMEUxICAgMEUyIC0+ICAwRSsyDQotZHFteGcwNTQgbWF4bWFnICAgMEUxICAtMEUxIC0+ICAwRSsxDQotZHFteGcwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyDQotZHFteGcwNTYgbWF4bWFnICAgMEUyICAtMEUxIC0+ICAwRSsyDQotZHFteGcwNTcgbWF4bWFnICAgMEUxICAtMEUyIC0+ICAwRSsxDQotDQotZHFteGcwNTggbWF4bWFnICAgMEUxICAgMEUxIC0+ICAwRSsxDQotZHFteGcwNTkgbWF4bWFnICAgMEUyICAgMEUyIC0+ICAwRSsyDQotZHFteGcwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyDQotZHFteGcwNjEgbWF4bWFnICAgMEUxICAgMEUyIC0+ICAwRSsyDQotZHFteGcwNjIgbWF4bWFnICAtMEUxICAtMEUxIC0+IC0wRSsxDQotZHFteGcwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyDQotZHFteGcwNjQgbWF4bWFnICAtMEUyICAtMEUxIC0+IC0wRSsxDQotZHFteGcwNjUgbWF4bWFnICAtMEUxICAtMEUyIC0+IC0wRSsxDQotDQotLS0gU3BlY2lhbHMNCi1kcW14ZzA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnMDkxIG1heG1hZyAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZHFteGcwOTIgbWF4bWFnICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1kcW14ZzA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnMDk0IG1heG1hZyAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZHFteGcwOTUgbWF4bWFnICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kcW14ZzA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnMDk3IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFteGcwOTggbWF4bWFnIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW14ZzA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnMTAwIG1heG1hZyAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFteGcxMDEgbWF4bWFnIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW14ZzEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnMTAzIG1heG1hZyAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFteGcxMDQgbWF4bWFnICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW14ZzEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbXhnMTIwIG1heG1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFteGcxMjEgbWF4bWFnIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kcW14ZzEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTIzIG1heG1hZyAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZHFteGcxMjQgbWF4bWFnIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kcW14ZzEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTI2IG1heG1hZyAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZHFteGcxMjcgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW14ZzEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkNCi1kcW14ZzEyOSBtYXhtYWcgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFteGcxMzEgbWF4bWFnIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW14ZzEzMiBtYXhtYWcgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFteGcxMzQgbWF4bWFnICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW14ZzEzNSBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLS0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcw0KLWRxbXhnMTQxIG1heG1hZyAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5DQotZHFteGcxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMA0KLWRxbXhnMTQzIG1heG1hZyAgTmFOIC0xICAgICAgLT4gLTENCi1kcW14ZzE0NCBtYXhtYWcgIE5hTiAtMCAgICAgIC0+IC0wDQotZHFteGcxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMA0KLWRxbXhnMTQ2IG1heG1hZyAgTmFOICAxICAgICAgLT4gIDENCi1kcW14ZzE0NyBtYXhtYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwDQotZHFteGcxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkNCi1kcW14ZzE0OSBtYXhtYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kcW14ZzE1MCBtYXhtYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDANCi1kcW14ZzE1MiBtYXhtYWcgLTEgICAgTmFOICAgIC0+IC0xDQotZHFteGcxNTMgbWF4bWFnIC0wICAgIE5hTiAgICAtPiAtMA0KLWRxbXhnMTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDANCi1kcW14ZzE1NSBtYXhtYWcgIDEgICAgTmFOICAgIC0+ICAxDQotZHFteGcxNTYgbWF4bWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMA0KLWRxbXhnMTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5DQotDQotZHFteGcxNjEgbWF4bWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE2MyBtYXhtYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNjQgbWF4bWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE2NiBtYXhtYWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNjcgbWF4bWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE2OSBtYXhtYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNzAgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE3MiBtYXhtYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNzMgbWF4bWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE3NSBtYXhtYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNzYgbWF4bWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE3OCBtYXhtYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNzkgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcW14ZzE4MSBtYXhtYWcgIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW14ZzE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQ0KLWRxbXhnMTgzIG1heG1hZyAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbXhnMTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xDQotZHFteGcxODUgbWF4bWFnICBOYU4yICAgTmFOMTIgLT4gIE5hTjINCi1kcW14ZzE4NiBtYXhtYWcgLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMNCi1kcW14ZzE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQNCi0NCi1kcW14ZzE4OCBtYXhtYWcgLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkNCi1kcW14ZzE4OSBtYXhtYWcgLTkgICAgIC1OYU4zICAtPiAtOQ0KLWRxbXhnMTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbXhnMTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxOTIgbWF4bWFnICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE5MyBtYXhtYWcgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxOTUgbWF4bWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE5NiBtYXhtYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxOTggbWF4bWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE5OSBtYXhtYWcgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG9sZCByb3VuZGluZyBjaGVja3MNCi1kcW14ZzIyMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDANCi1kcW14ZzIyMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDANCi1kcW14ZzIyMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMA0KLWRxbXhnMjI0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwDQotZHFteGcyMjUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTANCi1kcW14ZzIyNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MA0KLWRxbXhnMjI3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxDQotZHFteGcyMjggbWF4bWFnIDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTENCi1kcW14ZzIyOSBtYXhtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDENCi1kcW14ZzIzMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDENCi1kcW14ZzIzMSBtYXhtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5Ng0KLWRxbXhnMjMyIG1heG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2DQotZHFteGcyMzMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xMjM0NTY3ODkxDQotZHFteGcyMzQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxDQotZHFteGcyMzUgbWF4bWFnIC0xMjM0NTY3ODkwMSAxIC0+IC0xMjM0NTY3ODkwMQ0KLWRxbXhnMjM2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMTIzNDU2Nzg5MDENCi1kcW14ZzIzNyBtYXhtYWcgLTEyMzQ1Njc4OTYgIDEgLT4gLTEyMzQ1Njc4OTYNCi1kcW14ZzIzOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEyMzQ1Njc4OTYNCi0NCi0tLSBmcm9tIGV4YW1wbGVzDQotZHFteGcyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJw0KLWRxbXhnMjgxIG1heG1hZyAnLTEwJyAnMycgIC0+ICAnLTEwJw0KLWRxbXhnMjgyIG1heG1hZyAnMS4wJyAnMScgIC0+ICAnMScNCi1kcW14ZzI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnDQotZHFteGcyODQgbWF4bWFnICc3JyAnTmFOJyAgLT4gICc3Jw0KLQ0KLS0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlDQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10NCi1kcW14ZzQwMSBtYXhtYWcgIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnNDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQ0KLWRxbXhnNDAzIG1heG1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDENCi1kcW14ZzQwNCBtYXhtYWcgIDEuMCAgICAwLjEgICAgIC0+ICAxLjANCi1kcW14ZzQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjENCi1kcW14ZzQwNiBtYXhtYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwDQotZHFteGc0MDcgbWF4bWFnICAwLjEwICAgMCAgICAgICAtPiAgMC4xMA0KLWRxbXhnNDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDANCi1kcW14ZzQwOSBtYXhtYWcgIDAuMCAgIC0wICAgICAgIC0+ICAwLjANCi1kcW14ZzQxMCBtYXhtYWcgIDAuMCAgIC0wLjAgICAgIC0+ICAwLjANCi1kcW14ZzQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwDQotZHFteGc0MTIgbWF4bWFnICAwLjAgICAtMC4wMCAgICAtPiAgMC4wDQotZHFteGc0MTMgbWF4bWFnICAwICAgICAtMC4wICAgICAtPiAgMA0KLWRxbXhnNDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDANCi1kcW14ZzQxNSBtYXhtYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wLjANCi1kcW14ZzQxNiBtYXhtYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KLWRxbXhnNDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwDQotZHFteGc0MTggbWF4bWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xMA0KLWRxbXhnNDE5IG1heG1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTEuMA0KLWRxbXhnNDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMA0KLWRxbXhnNDIxIG1heG1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQ0KLWRxbXhnNDIzIG1heG1hZyAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5DQotLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkDQotZHFteGc0MzEgbWF4bWFnICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkNCi1kcW14ZzQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjENCi1kcW14ZzQzMyBtYXhtYWcgIDEuMCAgICAxICAgICAgIC0+ICAxDQotZHFteGc0MzQgbWF4bWFnICAwLjEgICAgMS4wICAgICAtPiAgMS4wDQotZHFteGc0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xDQotZHFteGc0MzYgbWF4bWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMA0KLWRxbXhnNDM3IG1heG1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTANCi1kcW14ZzQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwDQotZHFteGc0MzkgbWF4bWFnIC0wICAgICAgMC4wICAgICAtPiAgMC4wDQotZHFteGc0NDAgbWF4bWFnIC0wLjAgICAgMC4wICAgICAtPiAgMC4wDQotZHFteGc0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMA0KLWRxbXhnNDQyIG1heG1hZyAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMA0KLWRxbXhnNDQzIG1heG1hZyAtMC4wICAgIDAgICAgICAgLT4gIDANCi1kcW14ZzQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwDQotZHFteGc0NDUgbWF4bWFnIC0wICAgICAtMC4wICAgICAtPiAtMC4wDQotZHFteGc0NDYgbWF4bWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDANCi1kcW14ZzQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KLWRxbXhnNDQ4IG1heG1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTANCi1kcW14ZzQ0OSBtYXhtYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0xLjANCi1kcW14ZzQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjANCi1kcW14ZzQ1MSBtYXhtYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xLjENCi1kcW14ZzQ1MyBtYXhtYWcgLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQ0KLS0tIGxhcmdpZXMNCi1kcW14ZzQ2MCBtYXhtYWcgIDEwMDAgICAxRSszICAgIC0+ICAxRSszDQotZHFteGc0NjEgbWF4bWFnICAxRSszICAgMTAwMCAgICAtPiAgMUUrMw0KLWRxbXhnNDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDANCi1kcW14ZzQ2MyBtYXhtYWcgIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszDQotZHFteGc0NjQgbWF4bWFnIC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMw0KLWRxbXhnNDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCi1kcW14ZzQ2NiBtYXhtYWcgLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwDQotZHFteGc0NjcgbWF4bWFnIC0xRSszICAtMTAwMCAgICAtPiAtMTAwMA0KLQ0KLS0tIHN1Ym5vcm1hbHMNCi1kcW14ZzUxMCBtYXhtYWcgIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAxLjAwRS02MTQzDQotZHFteGc1MTEgbWF4bWFnICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMUUtNjE0NCAgICBTdWJub3JtYWwNCi1kcW14ZzUxMiBtYXhtYWcgIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAxLjBFLTYxNDQgIFN1Ym5vcm1hbA0KLWRxbXhnNTEzIG1heG1hZyAgMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDEuMDBFLTYxNDQgU3Vibm9ybWFsDQotZHFteGc1MTQgbWF4bWFnICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMUUtNjE0NSAgICBTdWJub3JtYWwNCi1kcW14ZzUxNSBtYXhtYWcgIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICA5Ljk5RS02MTQ0IFN1Ym5vcm1hbA0KLWRxbXhnNTE2IG1heG1hZyAgMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDkuOUUtNjE0NSAgU3Vibm9ybWFsDQotZHFteGc1MTcgbWF4bWFnICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgOUUtNjE0NiAgICBTdWJub3JtYWwNCi1kcW14ZzUxOCBtYXhtYWcgIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAxRS02MTQ2ICAgIFN1Ym5vcm1hbA0KLWRxbXhnNTE5IG1heG1hZyAgMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDlFLTYxNDcgICAgU3Vibm9ybWFsDQotZHFteGc1MjAgbWF4bWFnICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMUUtNjE0NyAgICBTdWJub3JtYWwNCi0NCi1kcW14ZzUzMCBtYXhtYWcgLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjAwRS02MTQzDQotZHFteGc1MzEgbWF4bWFnIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwNCi1kcW14ZzUzMiBtYXhtYWcgLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbA0KLWRxbXhnNTMzIG1heG1hZyAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgLTEuMDBFLTYxNDQgU3Vibm9ybWFsDQotZHFteGc1MzQgbWF4bWFnIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAtMUUtNjE0NSAgICBTdWJub3JtYWwNCi1kcW14ZzUzNSBtYXhtYWcgLTAuOTk5RS02MTQzICAgICAgMCAgLT4gIC05Ljk5RS02MTQ0IFN1Ym5vcm1hbA0KLWRxbXhnNTM2IG1heG1hZyAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgLTkuOUUtNjE0NSAgU3Vibm9ybWFsDQotZHFteGc1MzcgbWF4bWFnIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAtOUUtNjE0NiAgICBTdWJub3JtYWwNCi1kcW14ZzUzOCBtYXhtYWcgLTAuMDAxRS02MTQzICAgICAgMCAgLT4gIC0xRS02MTQ2ICAgIFN1Ym5vcm1hbA0KLWRxbXhnNTM5IG1heG1hZyAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgLTlFLTYxNDcgICAgU3Vibm9ybWFsDQotZHFteGc1NDAgbWF4bWFnIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAtMUUtNjE0NyAgICBTdWJub3JtYWwNCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFteGc5MDAgbWF4bWFnIDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzkwMSBtYXhtYWcgICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFNYXhNYWcuZGVjVGVzdCAtLSBkZWNRdWFkIG1heG51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFteGcwMDEgbWF4bWFnICAtMiAgLTIgIC0+IC0yCitkcW14ZzAwMiBtYXhtYWcgIC0yICAtMSAgLT4gLTIKK2RxbXhnMDAzIG1heG1hZyAgLTIgICAwICAtPiAtMgorZHFteGcwMDQgbWF4bWFnICAtMiAgIDEgIC0+IC0yCitkcW14ZzAwNSBtYXhtYWcgIC0yICAgMiAgLT4gIDIKK2RxbXhnMDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMgorZHFteGcwMDcgbWF4bWFnICAtMSAgLTEgIC0+IC0xCitkcW14ZzAwOCBtYXhtYWcgIC0xICAgMCAgLT4gLTEKK2RxbXhnMDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQorZHFteGcwMTAgbWF4bWFnICAtMSAgIDIgIC0+ICAyCitkcW14ZzAxMSBtYXhtYWcgICAwICAtMiAgLT4gLTIKK2RxbXhnMDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQorZHFteGcwMTMgbWF4bWFnICAgMCAgIDAgIC0+ICAwCitkcW14ZzAxNCBtYXhtYWcgICAwICAgMSAgLT4gIDEKK2RxbXhnMDE1IG1heG1hZyAgIDAgICAyICAtPiAgMgorZHFteGcwMTYgbWF4bWFnICAgMSAgLTIgIC0+IC0yCitkcW14ZzAxNyBtYXhtYWcgICAxICAtMSAgLT4gIDEKK2RxbXhnMDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQorZHFteGcwMTkgbWF4bWFnICAgMSAgIDEgIC0+ICAxCitkcW14ZzAyMCBtYXhtYWcgICAxICAgMiAgLT4gIDIKK2RxbXhnMDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMgorZHFteGcwMjIgbWF4bWFnICAgMiAgLTEgIC0+ICAyCitkcW14ZzAyMyBtYXhtYWcgICAyICAgMCAgLT4gIDIKK2RxbXhnMDI1IG1heG1hZyAgIDIgICAxICAtPiAgMgorZHFteGcwMjYgbWF4bWFnICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcW14ZzAzMCBtYXhtYWcgICAwICAgICAwICAgLT4gIDAKK2RxbXhnMDMxIG1heG1hZyAgIDAgICAgLTAgICAtPiAgMAorZHFteGcwMzIgbWF4bWFnICAgMCAgICAtMC4wIC0+ICAwCitkcW14ZzAzMyBtYXhtYWcgICAwICAgICAwLjAgLT4gIDAKK2RxbXhnMDM0IG1heG1hZyAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgorZHFteGcwMzUgbWF4bWFnICAtMCAgICAtMCAgIC0+IC0wCitkcW14ZzAzNiBtYXhtYWcgIC0wICAgIC0wLjAgLT4gLTAuMAorZHFteGcwMzcgbWF4bWFnICAtMCAgICAgMC4wIC0+ICAwLjAKK2RxbXhnMDM4IG1heG1hZyAgIDAuMCAgIDAgICAtPiAgMAorZHFteGcwMzkgbWF4bWFnICAgMC4wICAtMCAgIC0+ICAwLjAKK2RxbXhnMDQwIG1heG1hZyAgIDAuMCAgLTAuMCAtPiAgMC4wCitkcW14ZzA0MSBtYXhtYWcgICAwLjAgICAwLjAgLT4gIDAuMAorZHFteGcwNDIgbWF4bWFnICAtMC4wICAgMCAgIC0+ICAwCitkcW14ZzA0MyBtYXhtYWcgIC0wLjAgIC0wICAgLT4gLTAuMAorZHFteGcwNDQgbWF4bWFnICAtMC4wICAtMC4wIC0+IC0wLjAKK2RxbXhnMDQ1IG1heG1hZyAgLTAuMCAgIDAuMCAtPiAgMC4wCisKK2RxbXhnMDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQorZHFteGcwNTEgbWF4bWFnICAtMEUyICAgMEUyIC0+ICAwRSsyCitkcW14ZzA1MiBtYXhtYWcgIC0wRTIgICAwRTEgLT4gIDBFKzEKK2RxbXhnMDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMgorZHFteGcwNTQgbWF4bWFnICAgMEUxICAtMEUxIC0+ICAwRSsxCitkcW14ZzA1NSBtYXhtYWcgICAwRTIgIC0wRTIgLT4gIDBFKzIKK2RxbXhnMDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMgorZHFteGcwNTcgbWF4bWFnICAgMEUxICAtMEUyIC0+ICAwRSsxCisKK2RxbXhnMDU4IG1heG1hZyAgIDBFMSAgIDBFMSAtPiAgMEUrMQorZHFteGcwNTkgbWF4bWFnICAgMEUyICAgMEUyIC0+ICAwRSsyCitkcW14ZzA2MCBtYXhtYWcgICAwRTIgICAwRTEgLT4gIDBFKzIKK2RxbXhnMDYxIG1heG1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMgorZHFteGcwNjIgbWF4bWFnICAtMEUxICAtMEUxIC0+IC0wRSsxCitkcW14ZzA2MyBtYXhtYWcgIC0wRTIgIC0wRTIgLT4gLTBFKzIKK2RxbXhnMDY0IG1heG1hZyAgLTBFMiAgLTBFMSAtPiAtMEUrMQorZHFteGcwNjUgbWF4bWFnICAtMEUxICAtMEUyIC0+IC0wRSsxCisKKy0tIFNwZWNpYWxzCitkcW14ZzA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFteGcwOTEgbWF4bWFnICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RxbXhnMDkyIG1heG1hZyAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcW14ZzA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZHFteGcwOTQgbWF4bWFnICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RxbXhnMDk1IG1heG1hZyAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcW14ZzA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFteGcwOTcgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMDk4IG1heG1hZyAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFteGcxMDAgbWF4bWFnIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMTAxIG1heG1hZyAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFteGcxMDMgbWF4bWFnICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMTA0IG1heG1hZyAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW14ZzEyMCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxMjEgbWF4bWFnIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxbXhnMTIyIG1heG1hZyAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcW14ZzEyMyBtYXhtYWcgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFteGcxMjQgbWF4bWFnIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RxbXhnMTI1IG1heG1hZyAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcW14ZzEyNiBtYXhtYWcgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFteGcxMjcgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMTI4IG1heG1hZyAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQorZHFteGcxMjkgbWF4bWFnIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXhnMTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW14ZzEzMSBtYXhtYWcgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxMzIgbWF4bWFnICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXhnMTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW14ZzEzNCBtYXhtYWcgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxMzUgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCitkcW14ZzE0MSBtYXhtYWcgIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQorZHFteGcxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMAorZHFteGcxNDMgbWF4bWFnICBOYU4gLTEgICAgICAtPiAtMQorZHFteGcxNDQgbWF4bWFnICBOYU4gLTAgICAgICAtPiAtMAorZHFteGcxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMAorZHFteGcxNDYgbWF4bWFnICBOYU4gIDEgICAgICAtPiAgMQorZHFteGcxNDcgbWF4bWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZHFteGcxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RxbXhnMTQ5IG1heG1hZyAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFteGcxNTAgbWF4bWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RxbXhnMTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RxbXhnMTUyIG1heG1hZyAtMSAgICBOYU4gICAgLT4gLTEKK2RxbXhnMTUzIG1heG1hZyAtMCAgICBOYU4gICAgLT4gLTAKK2RxbXhnMTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDAKK2RxbXhnMTU1IG1heG1hZyAgMSAgICBOYU4gICAgLT4gIDEKK2RxbXhnMTU2IG1heG1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RxbXhnMTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RxbXhnMTYxIG1heG1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTYzIG1heG1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY0IG1heG1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY2IG1heG1hZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY3IG1heG1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY5IG1heG1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTcwIG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTcyIG1heG1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTczIG1heG1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc1IG1heG1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc2IG1heG1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc4IG1heG1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc5IG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFteGcxODEgbWF4bWFnICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5CitkcW14ZzE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQorZHFteGcxODMgbWF4bWFnIC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbXhnMTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xCitkcW14ZzE4NSBtYXhtYWcgIE5hTjIgICBOYU4xMiAtPiAgTmFOMgorZHFteGcxODYgbWF4bWFnIC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzCitkcW14ZzE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQKKworZHFteGcxODggbWF4bWFnIC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5CitkcW14ZzE4OSBtYXhtYWcgLTkgICAgIC1OYU4zICAtPiAtOQorZHFteGcxOTAgbWF4bWFnICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK2RxbXhnMTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE5MiBtYXhtYWcgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTMgbWF4bWFnIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE5NSBtYXhtYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTYgbWF4bWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE5OCBtYXhtYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTkgbWF4bWFnICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb2xkIHJvdW5kaW5nIGNoZWNrcworZHFteGcyMjEgbWF4bWFnIDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwCitkcW14ZzIyMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK2RxbXhnMjIzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwCitkcW14ZzIyNCBtYXhtYWcgMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAorZHFteGcyMjUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTAKK2RxbXhnMjI2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCitkcW14ZzIyNyBtYXhtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQorZHFteGcyMjggbWF4bWFnIDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK2RxbXhnMjI5IG1heG1hZyAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQorZHFteGcyMzAgbWF4bWFnIDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCitkcW14ZzIzMSBtYXhtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5NgorZHFteGcyMzIgbWF4bWFnIDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKK2RxbXhnMjMzIG1heG1hZyAtMTIzNDU2Nzg5MSAgMSAtPiAtMTIzNDU2Nzg5MQorZHFteGcyMzQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxCitkcW14ZzIzNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEyMzQ1Njc4OTAxCitkcW14ZzIzNiBtYXhtYWcgMSAtMTIzNDU2Nzg5MDEgLT4gLTEyMzQ1Njc4OTAxCitkcW14ZzIzNyBtYXhtYWcgLTEyMzQ1Njc4OTYgIDEgLT4gLTEyMzQ1Njc4OTYKK2RxbXhnMjM4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMTIzNDU2Nzg5NgorCistLSBmcm9tIGV4YW1wbGVzCitkcW14ZzI4MCBtYXhtYWcgJzMnICAgJzInICAtPiAgJzMnCitkcW14ZzI4MSBtYXhtYWcgJy0xMCcgJzMnICAtPiAgJy0xMCcKK2RxbXhnMjgyIG1heG1hZyAnMS4wJyAnMScgIC0+ICAnMScKK2RxbXhnMjgzIG1heG1hZyAnMScgJzEuMCcgIC0+ICAnMScKK2RxbXhnMjg0IG1heG1hZyAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkcW14ZzQwMSBtYXhtYWcgIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQorZHFteGc0MDIgbWF4bWFnICAxLjEgICAgMSAgICAgICAtPiAgMS4xCitkcW14ZzQwMyBtYXhtYWcgIDEgICAgICAxLjAgICAgIC0+ICAxCitkcW14ZzQwNCBtYXhtYWcgIDEuMCAgICAwLjEgICAgIC0+ICAxLjAKK2RxbXhnNDA1IG1heG1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMQorZHFteGc0MDYgbWF4bWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMAorZHFteGc0MDcgbWF4bWFnICAwLjEwICAgMCAgICAgICAtPiAgMC4xMAorZHFteGc0MDggbWF4bWFnICAwICAgICAgMC4wICAgICAtPiAgMAorZHFteGc0MDkgbWF4bWFnICAwLjAgICAtMCAgICAgICAtPiAgMC4wCitkcW14ZzQxMCBtYXhtYWcgIDAuMCAgIC0wLjAgICAgIC0+ICAwLjAKK2RxbXhnNDExIG1heG1hZyAgMC4wMCAgLTAuMCAgICAgLT4gIDAuMDAKK2RxbXhnNDEyIG1heG1hZyAgMC4wICAgLTAuMDAgICAgLT4gIDAuMAorZHFteGc0MTMgbWF4bWFnICAwICAgICAtMC4wICAgICAtPiAgMAorZHFteGc0MTQgbWF4bWFnICAwICAgICAtMCAgICAgICAtPiAgMAorZHFteGc0MTUgbWF4bWFnIC0wLjAgICAtMCAgICAgICAtPiAtMC4wCitkcW14ZzQxNiBtYXhtYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZHFteGc0MTcgbWF4bWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKK2RxbXhnNDE4IG1heG1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKK2RxbXhnNDE5IG1heG1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTEuMAorZHFteGc0MjAgbWF4bWFnIC0xLjAgICAtMSAgICAgICAtPiAtMS4wCitkcW14ZzQyMSBtYXhtYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKK2RxbXhnNDIzIG1heG1hZyAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5CistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK2RxbXhnNDMxIG1heG1hZyAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5CitkcW14ZzQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjEKK2RxbXhnNDMzIG1heG1hZyAgMS4wICAgIDEgICAgICAgLT4gIDEKK2RxbXhnNDM0IG1heG1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDEuMAorZHFteGc0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xCitkcW14ZzQzNiBtYXhtYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwCitkcW14ZzQzNyBtYXhtYWcgIDAgICAgICAwLjEwICAgIC0+ICAwLjEwCitkcW14ZzQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwCitkcW14ZzQzOSBtYXhtYWcgLTAgICAgICAwLjAgICAgIC0+ICAwLjAKK2RxbXhnNDQwIG1heG1hZyAtMC4wICAgIDAuMCAgICAgLT4gIDAuMAorZHFteGc0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMAorZHFteGc0NDIgbWF4bWFnIC0wLjAwICAgMC4wICAgICAtPiAgMC4wCitkcW14ZzQ0MyBtYXhtYWcgLTAuMCAgICAwICAgICAgIC0+ICAwCitkcW14ZzQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwCitkcW14ZzQ0NSBtYXhtYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbXhnNDQ2IG1heG1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwCitkcW14ZzQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZHFteGc0NDggbWF4bWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xMAorZHFteGc0NDkgbWF4bWFnIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCitkcW14ZzQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjAKK2RxbXhnNDUxIG1heG1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEuMQorZHFteGc0NTMgbWF4bWFnIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkKKy0tIGxhcmdpZXMKK2RxbXhnNDYwIG1heG1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RxbXhnNDYxIG1heG1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMKK2RxbXhnNDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKK2RxbXhnNDYzIG1heG1hZyAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKK2RxbXhnNDY0IG1heG1hZyAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RxbXhnNDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RxbXhnNDY2IG1heG1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKK2RxbXhnNDY3IG1heG1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKKworLS0gc3Vibm9ybWFscworZHFteGc1MTAgbWF4bWFnICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wMEUtNjE0MworZHFteGc1MTEgbWF4bWFnICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMUUtNjE0NCAgICBTdWJub3JtYWwKK2RxbXhnNTEyIG1heG1hZyAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDEuMEUtNjE0NCAgU3Vibm9ybWFsCitkcW14ZzUxMyBtYXhtYWcgIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAxLjAwRS02MTQ0IFN1Ym5vcm1hbAorZHFteGc1MTQgbWF4bWFnICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMUUtNjE0NSAgICBTdWJub3JtYWwKK2RxbXhnNTE1IG1heG1hZyAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDkuOTlFLTYxNDQgU3Vibm9ybWFsCitkcW14ZzUxNiBtYXhtYWcgIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICA5LjlFLTYxNDUgIFN1Ym5vcm1hbAorZHFteGc1MTcgbWF4bWFnICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgOUUtNjE0NiAgICBTdWJub3JtYWwKK2RxbXhnNTE4IG1heG1hZyAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDFFLTYxNDYgICAgU3Vibm9ybWFsCitkcW14ZzUxOSBtYXhtYWcgIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICA5RS02MTQ3ICAgIFN1Ym5vcm1hbAorZHFteGc1MjAgbWF4bWFnICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMUUtNjE0NyAgICBTdWJub3JtYWwKKworZHFteGc1MzAgbWF4bWFnIC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAtMS4wMEUtNjE0MworZHFteGc1MzEgbWF4bWFnIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwKK2RxbXhnNTMyIG1heG1hZyAtMC4xMEUtNjE0MyAgICAgICAwICAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsCitkcW14ZzUzMyBtYXhtYWcgLTAuMTAwRS02MTQzICAgICAgMCAgLT4gIC0xLjAwRS02MTQ0IFN1Ym5vcm1hbAorZHFteGc1MzQgbWF4bWFnIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAtMUUtNjE0NSAgICBTdWJub3JtYWwKK2RxbXhnNTM1IG1heG1hZyAtMC45OTlFLTYxNDMgICAgICAwICAtPiAgLTkuOTlFLTYxNDQgU3Vibm9ybWFsCitkcW14ZzUzNiBtYXhtYWcgLTAuMDk5RS02MTQzICAgICAgMCAgLT4gIC05LjlFLTYxNDUgIFN1Ym5vcm1hbAorZHFteGc1MzcgbWF4bWFnIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAtOUUtNjE0NiAgICBTdWJub3JtYWwKK2RxbXhnNTM4IG1heG1hZyAtMC4wMDFFLTYxNDMgICAgICAwICAtPiAgLTFFLTYxNDYgICAgU3Vibm9ybWFsCitkcW14ZzUzOSBtYXhtYWcgLTAuMDAwOUUtNjE0MyAgICAgMCAgLT4gIC05RS02MTQ3ICAgIFN1Ym5vcm1hbAorZHFteGc1NDAgbWF4bWFnIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAtMUUtNjE0NyAgICBTdWJub3JtYWwKKworLS0gTnVsbCB0ZXN0cworZHFteGc5MDAgbWF4bWFnIDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnOTAxIG1heG1hZyAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWluLmRlY1Rlc3QKaW5kZXggNTMwMjAzOS4uYzg3ZjRjNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWluLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWluLmRlY1Rlc3QKQEAgLTEsMzA5ICsxLDMwOSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFNaW4uZGVjVGVzdCAtLSBkZWNRdWFkIG1pbm51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbw0KLS0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZHFtaW4wMDEgbWluICAtMiAgLTIgIC0+IC0yDQotZHFtaW4wMDIgbWluICAtMiAgLTEgIC0+IC0yDQotZHFtaW4wMDMgbWluICAtMiAgIDAgIC0+IC0yDQotZHFtaW4wMDQgbWluICAtMiAgIDEgIC0+IC0yDQotZHFtaW4wMDUgbWluICAtMiAgIDIgIC0+IC0yDQotZHFtaW4wMDYgbWluICAtMSAgLTIgIC0+IC0yDQotZHFtaW4wMDcgbWluICAtMSAgLTEgIC0+IC0xDQotZHFtaW4wMDggbWluICAtMSAgIDAgIC0+IC0xDQotZHFtaW4wMDkgbWluICAtMSAgIDEgIC0+IC0xDQotZHFtaW4wMTAgbWluICAtMSAgIDIgIC0+IC0xDQotZHFtaW4wMTEgbWluICAgMCAgLTIgIC0+IC0yDQotZHFtaW4wMTIgbWluICAgMCAgLTEgIC0+IC0xDQotZHFtaW4wMTMgbWluICAgMCAgIDAgIC0+ICAwDQotZHFtaW4wMTQgbWluICAgMCAgIDEgIC0+ICAwDQotZHFtaW4wMTUgbWluICAgMCAgIDIgIC0+ICAwDQotZHFtaW4wMTYgbWluICAgMSAgLTIgIC0+IC0yDQotZHFtaW4wMTcgbWluICAgMSAgLTEgIC0+IC0xDQotZHFtaW4wMTggbWluICAgMSAgIDAgIC0+ICAwDQotZHFtaW4wMTkgbWluICAgMSAgIDEgIC0+ICAxDQotZHFtaW4wMjAgbWluICAgMSAgIDIgIC0+ICAxDQotZHFtaW4wMjEgbWluICAgMiAgLTIgIC0+IC0yDQotZHFtaW4wMjIgbWluICAgMiAgLTEgIC0+IC0xDQotZHFtaW4wMjMgbWluICAgMiAgIDAgIC0+ICAwDQotZHFtaW4wMjUgbWluICAgMiAgIDEgIC0+ICAxDQotZHFtaW4wMjYgbWluICAgMiAgIDIgIC0+ICAyDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kcW1pbjAzMCBtaW4gICAwICAgICAwICAgLT4gIDANCi1kcW1pbjAzMSBtaW4gICAwICAgIC0wICAgLT4gLTANCi1kcW1pbjAzMiBtaW4gICAwICAgIC0wLjAgLT4gLTAuMA0KLWRxbWluMDMzIG1pbiAgIDAgICAgIDAuMCAtPiAgMC4wDQotZHFtaW4wMzQgbWluICAtMCAgICAgMCAgIC0+IC0wDQotZHFtaW4wMzUgbWluICAtMCAgICAtMCAgIC0+IC0wDQotZHFtaW4wMzYgbWluICAtMCAgICAtMC4wIC0+IC0wDQotZHFtaW4wMzcgbWluICAtMCAgICAgMC4wIC0+IC0wDQotZHFtaW4wMzggbWluICAgMC4wICAgMCAgIC0+ICAwLjANCi1kcW1pbjAzOSBtaW4gICAwLjAgIC0wICAgLT4gLTANCi1kcW1pbjA0MCBtaW4gICAwLjAgIC0wLjAgLT4gLTAuMA0KLWRxbWluMDQxIG1pbiAgIDAuMCAgIDAuMCAtPiAgMC4wDQotZHFtaW4wNDIgbWluICAtMC4wICAgMCAgIC0+IC0wLjANCi1kcW1pbjA0MyBtaW4gIC0wLjAgIC0wICAgLT4gLTANCi1kcW1pbjA0NCBtaW4gIC0wLjAgIC0wLjAgLT4gLTAuMA0KLWRxbWluMDQ1IG1pbiAgLTAuMCAgIDAuMCAtPiAtMC4wDQotDQotZHFtaW4wNDYgbWluICAgMEUxICAtMEUxIC0+IC0wRSsxDQotZHFtaW4wNDcgbWluICAtMEUxICAgMEUyIC0+IC0wRSsxDQotZHFtaW4wNDggbWluICAgMEUyICAgMEUxIC0+ICAwRSsxDQotZHFtaW4wNDkgbWluICAgMEUxICAgMEUyIC0+ICAwRSsxDQotZHFtaW4wNTAgbWluICAtMEUzICAtMEUyIC0+IC0wRSszDQotZHFtaW4wNTEgbWluICAtMEUyICAtMEUzIC0+IC0wRSszDQotDQotLS0gU3BlY2lhbHMNCi1kcW1pbjA5MCBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMDkxIG1pbiAgSW5mICAtMTAwMCAgLT4gLTEwMDANCi1kcW1pbjA5MiBtaW4gIEluZiAgLTEgICAgIC0+IC0xDQotZHFtaW4wOTMgbWluICBJbmYgIC0wICAgICAtPiAtMA0KLWRxbWluMDk0IG1pbiAgSW5mICAgMCAgICAgLT4gIDANCi1kcW1pbjA5NSBtaW4gIEluZiAgIDEgICAgIC0+ICAxDQotZHFtaW4wOTYgbWluICBJbmYgICAxMDAwICAtPiAgMTAwMA0KLWRxbWluMDk3IG1pbiAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFtaW4wOTggbWluIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KLWRxbWluMDk5IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZHFtaW4xMDAgbWluIC0xICAgICBJbmYgICAtPiAtMQ0KLWRxbWluMTAxIG1pbiAtMCAgICAgSW5mICAgLT4gLTANCi1kcW1pbjEwMiBtaW4gIDAgICAgIEluZiAgIC0+ICAwDQotZHFtaW4xMDMgbWluICAxICAgICBJbmYgICAtPiAgMQ0KLWRxbWluMTA0IG1pbiAgMTAwMCAgSW5mICAgLT4gIDEwMDANCi1kcW1pbjEwNSBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbWluMTIwIG1pbiAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtaW4xMjEgbWluIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kcW1pbjEyMiBtaW4gLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTIzIG1pbiAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZHFtaW4xMjQgbWluIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kcW1pbjEyNSBtaW4gLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTI2IG1pbiAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZHFtaW4xMjcgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcW1pbjEyOCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTI5IG1pbiAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtaW4xMzAgbWluIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1pbjEzMSBtaW4gLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTMyIG1pbiAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtaW4xMzMgbWluICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1pbjEzNCBtaW4gIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTM1IG1pbiAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotDQotLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzDQotZHFtaW4xNDEgbWluICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5DQotZHFtaW4xNDIgbWluICBOYU4gLTEwMDAgICAtPiAgLTEwMDANCi1kcW1pbjE0MyBtaW4gIE5hTiAtMSAgICAgIC0+ICAtMQ0KLWRxbWluMTQ0IG1pbiAgTmFOIC0wICAgICAgLT4gIC0wDQotZHFtaW4xNDUgbWluICBOYU4gIDAgICAgICAtPiAgMA0KLWRxbWluMTQ2IG1pbiAgTmFOICAxICAgICAgLT4gIDENCi1kcW1pbjE0NyBtaW4gIE5hTiAgMTAwMCAgIC0+ICAxMDAwDQotZHFtaW4xNDggbWluICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkNCi1kcW1pbjE0OSBtaW4gIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kcW1pbjE1MCBtaW4gLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTUxIG1pbiAtMTAwMCBOYU4gICAgLT4gLTEwMDANCi1kcW1pbjE1MiBtaW4gLTEgICAtTmFOICAgIC0+IC0xDQotZHFtaW4xNTMgbWluIC0wICAgIE5hTiAgICAtPiAtMA0KLWRxbWluMTU0IG1pbiAgMCAgIC1OYU4gICAgLT4gIDANCi1kcW1pbjE1NSBtaW4gIDEgICAgTmFOICAgIC0+ICAxDQotZHFtaW4xNTYgbWluICAxMDAwIE5hTiAgICAtPiAgMTAwMA0KLWRxbWluMTU3IG1pbiAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5DQotDQotZHFtaW4xNjEgbWluICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTYyIG1pbiAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE2MyBtaW4gIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNjQgbWluICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTY1IG1pbiAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE2NiBtaW4gLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNjcgbWluICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTY4IG1pbiAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE2OSBtaW4gIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNzAgbWluICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTcxIG1pbiAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE3MiBtaW4gLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNzMgbWluIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTc0IG1pbiAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE3NSBtaW4gIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNzYgbWluICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTc3IG1pbiAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE3OCBtaW4gIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNzkgbWluICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcW1pbjE4MSBtaW4gIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtaW4xODIgbWluIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwDQotZHFtaW4xODMgbWluICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbWluMTg0IG1pbiAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQ0KLWRxbWluMTg1IG1pbiAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjINCi1kcW1pbjE4NiBtaW4gLU5hTjMgICAgTmFONiAgLT4gLU5hTjMNCi1kcW1pbjE4NyBtaW4gLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0DQotDQotZHFtaW4xODggbWluIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQ0KLWRxbWluMTg5IG1pbiAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQ0KLWRxbWluMTkwIG1pbiAgSW5mICAgICBOYU4yICAtPiAgSW5maW5pdHkNCi0NCi1kcW1pbjE5MSBtaW4gIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTkyIG1pbiAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xOTMgbWluIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE5NCBtaW4gIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTk1IG1pbiAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xOTYgbWluIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE5NyBtaW4gIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTk4IG1pbiAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xOTkgbWluICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvbGQgcm91bmRpbmcgY2hlY2tzDQotZHFtaW4yMjEgbWluIC0xMjM0NTY3ODAwMCAxICAtPiAtMTIzNDU2NzgwMDANCi1kcW1pbjIyMiBtaW4gMSAtMTIzNDU2NzgwMDAgIC0+IC0xMjM0NTY3ODAwMA0KLWRxbWluMjIzIG1pbiAtMTIzNDU2NzgwMCAgMSAgLT4gLTEyMzQ1Njc4MDANCi1kcW1pbjIyNCBtaW4gMSAtMTIzNDU2NzgwMCAgIC0+IC0xMjM0NTY3ODAwDQotZHFtaW4yMjUgbWluIC0xMjM0NTY3ODkwICAxICAtPiAtMTIzNDU2Nzg5MA0KLWRxbWluMjI2IG1pbiAxIC0xMjM0NTY3ODkwICAgLT4gLTEyMzQ1Njc4OTANCi1kcW1pbjIyNyBtaW4gLTEyMzQ1Njc4OTEgIDEgIC0+IC0xMjM0NTY3ODkxDQotZHFtaW4yMjggbWluIDEgLTEyMzQ1Njc4OTEgICAtPiAtMTIzNDU2Nzg5MQ0KLWRxbWluMjI5IG1pbiAtMTIzNDU2Nzg5MDEgMSAgLT4gLTEyMzQ1Njc4OTAxDQotZHFtaW4yMzAgbWluIDEgLTEyMzQ1Njc4OTAxICAtPiAtMTIzNDU2Nzg5MDENCi1kcW1pbjIzMSBtaW4gLTEyMzQ1Njc4OTYgIDEgIC0+IC0xMjM0NTY3ODk2DQotZHFtaW4yMzIgbWluIDEgLTEyMzQ1Njc4OTYgICAtPiAtMTIzNDU2Nzg5Ng0KLWRxbWluMjMzIG1pbiAxMjM0NTY3ODkxICAxICAgLT4gMQ0KLWRxbWluMjM0IG1pbiAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLWRxbWluMjM1IG1pbiAxMjM0NTY3ODkwMSAxICAgLT4gMQ0KLWRxbWluMjM2IG1pbiAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRxbWluMjM3IG1pbiAxMjM0NTY3ODk2ICAxICAgLT4gMQ0KLWRxbWluMjM4IG1pbiAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLS0tIGZyb20gZXhhbXBsZXMNCi1kcW1pbjI4MCBtaW4gJzMnICAgJzInICAtPiAgJzInDQotZHFtaW4yODEgbWluICctMTAnICczJyAgLT4gICctMTAnDQotZHFtaW4yODIgbWluICcxLjAnICcxJyAgLT4gICcxLjAnDQotZHFtaW4yODMgbWluICcxJyAnMS4wJyAgLT4gICcxLjAnDQotZHFtaW4yODQgbWluICc3JyAnTmFOJyAgLT4gICc3Jw0KLQ0KLS0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlDQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10NCi1kcW1pbjQwMSBtaW4gIEluZiAgICAxLjEgICAgIC0+ICAxLjENCi1kcW1pbjQwMiBtaW4gIDEuMSAgICAxICAgICAgIC0+ICAxDQotZHFtaW40MDMgbWluICAxICAgICAgMS4wICAgICAtPiAgMS4wDQotZHFtaW40MDQgbWluICAxLjAgICAgMC4xICAgICAtPiAgMC4xDQotZHFtaW40MDUgbWluICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMA0KLWRxbWluNDA2IG1pbiAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwDQotZHFtaW40MDcgbWluICAwLjEwICAgMCAgICAgICAtPiAgMA0KLWRxbWluNDA4IG1pbiAgMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KLWRxbWluNDA5IG1pbiAgMC4wICAgLTAgICAgICAgLT4gLTANCi1kcW1pbjQxMCBtaW4gIDAuMCAgIC0wLjAgICAgIC0+IC0wLjANCi1kcW1pbjQxMSBtaW4gIDAuMDAgIC0wLjAgICAgIC0+IC0wLjANCi1kcW1pbjQxMiBtaW4gIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwDQotZHFtaW40MTMgbWluICAwICAgICAtMC4wICAgICAtPiAtMC4wDQotZHFtaW40MTQgbWluICAwICAgICAtMCAgICAgICAtPiAtMA0KLWRxbWluNDE1IG1pbiAtMC4wICAgLTAgICAgICAgLT4gLTANCi1kcW1pbjQxNiBtaW4gLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KLWRxbWluNDE3IG1pbiAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTANCi1kcW1pbjQxOCBtaW4gLTAuMTAgIC0wLjEgICAgIC0+IC0wLjENCi1kcW1pbjQxOSBtaW4gLTAuMSAgIC0xLjAgICAgIC0+IC0xLjANCi1kcW1pbjQyMCBtaW4gLTEuMCAgIC0xICAgICAgIC0+IC0xDQotZHFtaW40MjEgbWluIC0xICAgICAtMS4xICAgICAtPiAtMS4xDQotZHFtaW40MjMgbWluIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkNCi0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCi1kcW1pbjQzMSBtaW4gIDEuMSAgICBJbmYgICAgIC0+ICAxLjENCi1kcW1pbjQzMiBtaW4gIDEgICAgICAxLjEgICAgIC0+ICAxDQotZHFtaW40MzMgbWluICAxLjAgICAgMSAgICAgICAtPiAgMS4wDQotZHFtaW40MzQgbWluICAwLjEgICAgMS4wICAgICAtPiAgMC4xDQotZHFtaW40MzUgbWluICAwLjEwICAgMC4xICAgICAtPiAgMC4xMA0KLWRxbWluNDM2IG1pbiAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwDQotZHFtaW40MzcgbWluICAwICAgICAgMC4xMCAgICAtPiAgMA0KLWRxbWluNDM4IG1pbiAgMC4wICAgIDAgICAgICAgLT4gIDAuMA0KLWRxbWluNDM5IG1pbiAtMCAgICAgIDAuMCAgICAgLT4gLTANCi1kcW1pbjQ0MCBtaW4gLTAuMCAgICAwLjAgICAgIC0+IC0wLjANCi1kcW1pbjQ0MSBtaW4gLTAuMCAgICAwLjAwICAgIC0+IC0wLjANCi1kcW1pbjQ0MiBtaW4gLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwDQotZHFtaW40NDMgbWluIC0wLjAgICAgMCAgICAgICAtPiAtMC4wDQotZHFtaW40NDQgbWluIC0wICAgICAgMCAgICAgICAtPiAtMA0KLWRxbWluNDQ1IG1pbiAtMCAgICAgLTAuMCAgICAgLT4gLTANCi1kcW1pbjQ0NiBtaW4gLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMA0KLWRxbWluNDQ3IG1pbiAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTANCi1kcW1pbjQ0OCBtaW4gLTAuMSAgIC0wLjEwICAgIC0+IC0wLjENCi1kcW1pbjQ0OSBtaW4gLTEuMCAgIC0wLjEgICAgIC0+IC0xLjANCi1kcW1pbjQ1MCBtaW4gLTEgICAgIC0xLjAgICAgIC0+IC0xDQotZHFtaW40NTEgbWluIC0xLjEgICAtMSAgICAgICAtPiAtMS4xDQotZHFtaW40NTMgbWluIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkNCi0tLSBsYXJnaWVzDQotZHFtaW40NjAgbWluICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMA0KLWRxbWluNDYxIG1pbiAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCi1kcW1pbjQ2MiBtaW4gIDEwMDAgIC0xRSszICAgIC0+IC0xRSszDQotZHFtaW40NjMgbWluICAxRSszICAtMzg0ICAgIC0+IC0zODQNCi1kcW1pbjQ2NCBtaW4gLTM4NCAgIDFFKzMgICAgLT4gLTM4NA0KLWRxbWluNDY1IG1pbiAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMNCi1kcW1pbjQ2NiBtaW4gLTM4NCAgLTFFKzMgICAgLT4gLTFFKzMNCi1kcW1pbjQ2NyBtaW4gLTFFKzMgIC0zODQgICAgLT4gLTFFKzMNCi0NCi0tLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4NCi1kcW1pbjQ3MSBtaW4gICAgICAxLjAgICAgICAgMC4xICAtPiAwLjENCi1kcW1pbjQ3MiBtaW4gICAgICAwLjEgICAgICAgMS4wICAtPiAwLjENCi1kcW1pbjQ3MyBtaW4gICAgIDEwLjAgICAgICAgMC4xICAtPiAwLjENCi1kcW1pbjQ3NCBtaW4gICAgICAwLjEgICAgICAxMC4wICAtPiAwLjENCi1kcW1pbjQ3NSBtaW4gICAgICAxMDAgICAgICAgMS4wICAtPiAxLjANCi1kcW1pbjQ3NiBtaW4gICAgICAxLjAgICAgICAgMTAwICAtPiAxLjANCi1kcW1pbjQ3NyBtaW4gICAgIDEwMDAgICAgICAxMC4wICAtPiAxMC4wDQotZHFtaW40NzggbWluICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAuMA0KLWRxbWluNDc5IG1pbiAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMC4wDQotZHFtaW40ODAgbWluICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwLjANCi1kcW1pbjQ4MSBtaW4gICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwLjANCi1kcW1pbjQ4MiBtaW4gICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwLjANCi1kcW1pbjQ4MyBtaW4gIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMC4wDQotZHFtaW40ODQgbWluICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAuMA0KLQ0KLS0tIHN1Ym5vcm1hbHMNCi1kcW1pbjUxMCBtaW4gIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAwDQotZHFtaW41MTEgbWluICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMA0KLWRxbWluNTEyIG1pbiAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDANCi1kcW1pbjUxMyBtaW4gIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtaW41MTQgbWluICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMA0KLWRxbWluNTE1IG1pbiAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1pbjUxNiBtaW4gIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtaW41MTcgbWluICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbWluNTE4IG1pbiAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1pbjUxOSBtaW4gIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICAwDQotZHFtaW41MjAgbWluICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMA0KLQ0KLWRxbWluNTMwIG1pbiAtMS4wMEUtNjE0MyAgICAgICAwICAtPiAgLTEuMDBFLTYxNDMNCi1kcW1pbjUzMSBtaW4gLTAuMUUtNjE0MyAgICAgICAgMCAgLT4gIC0xRS02MTQ0ICAgIFN1Ym5vcm1hbA0KLWRxbWluNTMyIG1pbiAtMC4xMEUtNjE0MyAgICAgICAwICAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsDQotZHFtaW41MzMgbWluIC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAtMS4wMEUtNjE0NCBTdWJub3JtYWwNCi1kcW1pbjUzNCBtaW4gLTAuMDFFLTYxNDMgICAgICAgMCAgLT4gIC0xRS02MTQ1ICAgIFN1Ym5vcm1hbA0KLWRxbWluNTM1IG1pbiAtMC45OTlFLTYxNDMgICAgICAwICAtPiAgLTkuOTlFLTYxNDQgU3Vibm9ybWFsDQotZHFtaW41MzYgbWluIC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAtOS45RS02MTQ1ICBTdWJub3JtYWwNCi1kcW1pbjUzNyBtaW4gLTAuMDA5RS02MTQzICAgICAgMCAgLT4gIC05RS02MTQ2ICAgIFN1Ym5vcm1hbA0KLWRxbWluNTM4IG1pbiAtMC4wMDFFLTYxNDMgICAgICAwICAtPiAgLTFFLTYxNDYgICAgU3Vibm9ybWFsDQotZHFtaW41MzkgbWluIC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAtOUUtNjE0NyAgICBTdWJub3JtYWwNCi1kcW1pbjU0MCBtaW4gLTAuMDAwMUUtNjE0MyAgICAgMCAgLT4gIC0xRS02MTQ3ICAgIFN1Ym5vcm1hbA0KLQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcW1pbjkwMCBtaW4gMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW45MDEgbWluICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFNaW4uZGVjVGVzdCAtLSBkZWNRdWFkIG1pbm51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFtaW4wMDEgbWluICAtMiAgLTIgIC0+IC0yCitkcW1pbjAwMiBtaW4gIC0yICAtMSAgLT4gLTIKK2RxbWluMDAzIG1pbiAgLTIgICAwICAtPiAtMgorZHFtaW4wMDQgbWluICAtMiAgIDEgIC0+IC0yCitkcW1pbjAwNSBtaW4gIC0yICAgMiAgLT4gLTIKK2RxbWluMDA2IG1pbiAgLTEgIC0yICAtPiAtMgorZHFtaW4wMDcgbWluICAtMSAgLTEgIC0+IC0xCitkcW1pbjAwOCBtaW4gIC0xICAgMCAgLT4gLTEKK2RxbWluMDA5IG1pbiAgLTEgICAxICAtPiAtMQorZHFtaW4wMTAgbWluICAtMSAgIDIgIC0+IC0xCitkcW1pbjAxMSBtaW4gICAwICAtMiAgLT4gLTIKK2RxbWluMDEyIG1pbiAgIDAgIC0xICAtPiAtMQorZHFtaW4wMTMgbWluICAgMCAgIDAgIC0+ICAwCitkcW1pbjAxNCBtaW4gICAwICAgMSAgLT4gIDAKK2RxbWluMDE1IG1pbiAgIDAgICAyICAtPiAgMAorZHFtaW4wMTYgbWluICAgMSAgLTIgIC0+IC0yCitkcW1pbjAxNyBtaW4gICAxICAtMSAgLT4gLTEKK2RxbWluMDE4IG1pbiAgIDEgICAwICAtPiAgMAorZHFtaW4wMTkgbWluICAgMSAgIDEgIC0+ICAxCitkcW1pbjAyMCBtaW4gICAxICAgMiAgLT4gIDEKK2RxbWluMDIxIG1pbiAgIDIgIC0yICAtPiAtMgorZHFtaW4wMjIgbWluICAgMiAgLTEgIC0+IC0xCitkcW1pbjAyMyBtaW4gICAyICAgMCAgLT4gIDAKK2RxbWluMDI1IG1pbiAgIDIgICAxICAtPiAgMQorZHFtaW4wMjYgbWluICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcW1pbjAzMCBtaW4gICAwICAgICAwICAgLT4gIDAKK2RxbWluMDMxIG1pbiAgIDAgICAgLTAgICAtPiAtMAorZHFtaW4wMzIgbWluICAgMCAgICAtMC4wIC0+IC0wLjAKK2RxbWluMDMzIG1pbiAgIDAgICAgIDAuMCAtPiAgMC4wCitkcW1pbjAzNCBtaW4gIC0wICAgICAwICAgLT4gLTAKK2RxbWluMDM1IG1pbiAgLTAgICAgLTAgICAtPiAtMAorZHFtaW4wMzYgbWluICAtMCAgICAtMC4wIC0+IC0wCitkcW1pbjAzNyBtaW4gIC0wICAgICAwLjAgLT4gLTAKK2RxbWluMDM4IG1pbiAgIDAuMCAgIDAgICAtPiAgMC4wCitkcW1pbjAzOSBtaW4gICAwLjAgIC0wICAgLT4gLTAKK2RxbWluMDQwIG1pbiAgIDAuMCAgLTAuMCAtPiAtMC4wCitkcW1pbjA0MSBtaW4gICAwLjAgICAwLjAgLT4gIDAuMAorZHFtaW4wNDIgbWluICAtMC4wICAgMCAgIC0+IC0wLjAKK2RxbWluMDQzIG1pbiAgLTAuMCAgLTAgICAtPiAtMAorZHFtaW4wNDQgbWluICAtMC4wICAtMC4wIC0+IC0wLjAKK2RxbWluMDQ1IG1pbiAgLTAuMCAgIDAuMCAtPiAtMC4wCisKK2RxbWluMDQ2IG1pbiAgIDBFMSAgLTBFMSAtPiAtMEUrMQorZHFtaW4wNDcgbWluICAtMEUxICAgMEUyIC0+IC0wRSsxCitkcW1pbjA0OCBtaW4gICAwRTIgICAwRTEgLT4gIDBFKzEKK2RxbWluMDQ5IG1pbiAgIDBFMSAgIDBFMiAtPiAgMEUrMQorZHFtaW4wNTAgbWluICAtMEUzICAtMEUyIC0+IC0wRSszCitkcW1pbjA1MSBtaW4gIC0wRTIgIC0wRTMgLT4gLTBFKzMKKworLS0gU3BlY2lhbHMKK2RxbWluMDkwIG1pbiAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjA5MSBtaW4gIEluZiAgLTEwMDAgIC0+IC0xMDAwCitkcW1pbjA5MiBtaW4gIEluZiAgLTEgICAgIC0+IC0xCitkcW1pbjA5MyBtaW4gIEluZiAgLTAgICAgIC0+IC0wCitkcW1pbjA5NCBtaW4gIEluZiAgIDAgICAgIC0+ICAwCitkcW1pbjA5NSBtaW4gIEluZiAgIDEgICAgIC0+ICAxCitkcW1pbjA5NiBtaW4gIEluZiAgIDEwMDAgIC0+ICAxMDAwCitkcW1pbjA5NyBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtaW4wOTggbWluIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZHFtaW4wOTkgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTAwIG1pbiAtMSAgICAgSW5mICAgLT4gLTEKK2RxbWluMTAxIG1pbiAtMCAgICAgSW5mICAgLT4gLTAKK2RxbWluMTAyIG1pbiAgMCAgICAgSW5mICAgLT4gIDAKK2RxbWluMTAzIG1pbiAgMSAgICAgSW5mICAgLT4gIDEKK2RxbWluMTA0IG1pbiAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK2RxbWluMTA1IG1pbiAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbWluMTIwIG1pbiAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEyMSBtaW4gLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjIgbWluIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RxbWluMTIzIG1pbiAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkcW1pbjEyNCBtaW4gLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjUgbWluIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RxbWluMTI2IG1pbiAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkcW1pbjEyNyBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjggbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTI5IG1pbiAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEzMCBtaW4gLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMzEgbWluIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTMyIG1pbiAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEzMyBtaW4gIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMzQgbWluICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTM1IG1pbiAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZHFtaW4xNDEgbWluICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5CitkcW1pbjE0MiBtaW4gIE5hTiAtMTAwMCAgIC0+ICAtMTAwMAorZHFtaW4xNDMgbWluICBOYU4gLTEgICAgICAtPiAgLTEKK2RxbWluMTQ0IG1pbiAgTmFOIC0wICAgICAgLT4gIC0wCitkcW1pbjE0NSBtaW4gIE5hTiAgMCAgICAgIC0+ICAwCitkcW1pbjE0NiBtaW4gIE5hTiAgMSAgICAgIC0+ICAxCitkcW1pbjE0NyBtaW4gIE5hTiAgMTAwMCAgIC0+ICAxMDAwCitkcW1pbjE0OCBtaW4gIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFtaW4xNDkgbWluICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcW1pbjE1MCBtaW4gLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorZHFtaW4xNTEgbWluIC0xMDAwIE5hTiAgICAtPiAtMTAwMAorZHFtaW4xNTIgbWluIC0xICAgLU5hTiAgICAtPiAtMQorZHFtaW4xNTMgbWluIC0wICAgIE5hTiAgICAtPiAtMAorZHFtaW4xNTQgbWluICAwICAgLU5hTiAgICAtPiAgMAorZHFtaW4xNTUgbWluICAxICAgIE5hTiAgICAtPiAgMQorZHFtaW4xNTYgbWluICAxMDAwIE5hTiAgICAtPiAgMTAwMAorZHFtaW4xNTcgbWluICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworZHFtaW4xNjEgbWluICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNjIgbWluICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNjMgbWluICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNjQgbWluICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNjUgbWluIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNjYgbWluIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNjcgbWluICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNjggbWluICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNjkgbWluICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNzAgbWluICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNzEgbWluIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNzIgbWluIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNzMgbWluIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNzQgbWluIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNzUgbWluICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNzYgbWluICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNzcgbWluICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNzggbWluICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xNzkgbWluICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcW1pbjE4MSBtaW4gIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjE4MiBtaW4gLU5hTjggICAgOTk5MCAgLT4gIDk5OTAKK2RxbWluMTgzIG1pbiAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFtaW4xODQgbWluICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xCitkcW1pbjE4NSBtaW4gIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyCitkcW1pbjE4NiBtaW4gLU5hTjMgICAgTmFONiAgLT4gLU5hTjMKK2RxbWluMTg3IG1pbiAtTmFONDQgICBOYU43ICAtPiAtTmFONDQKKworZHFtaW4xODggbWluIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQorZHFtaW4xODkgbWluIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5CitkcW1pbjE5MCBtaW4gIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK2RxbWluMTkxIG1pbiAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE5MiBtaW4gIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTMgbWluIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTk0IG1pbiAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE5NSBtaW4gIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTYgbWluIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTk3IG1pbiAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE5OCBtaW4gIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTkgbWluICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb2xkIHJvdW5kaW5nIGNoZWNrcworZHFtaW4yMjEgbWluIC0xMjM0NTY3ODAwMCAxICAtPiAtMTIzNDU2NzgwMDAKK2RxbWluMjIyIG1pbiAxIC0xMjM0NTY3ODAwMCAgLT4gLTEyMzQ1Njc4MDAwCitkcW1pbjIyMyBtaW4gLTEyMzQ1Njc4MDAgIDEgIC0+IC0xMjM0NTY3ODAwCitkcW1pbjIyNCBtaW4gMSAtMTIzNDU2NzgwMCAgIC0+IC0xMjM0NTY3ODAwCitkcW1pbjIyNSBtaW4gLTEyMzQ1Njc4OTAgIDEgIC0+IC0xMjM0NTY3ODkwCitkcW1pbjIyNiBtaW4gMSAtMTIzNDU2Nzg5MCAgIC0+IC0xMjM0NTY3ODkwCitkcW1pbjIyNyBtaW4gLTEyMzQ1Njc4OTEgIDEgIC0+IC0xMjM0NTY3ODkxCitkcW1pbjIyOCBtaW4gMSAtMTIzNDU2Nzg5MSAgIC0+IC0xMjM0NTY3ODkxCitkcW1pbjIyOSBtaW4gLTEyMzQ1Njc4OTAxIDEgIC0+IC0xMjM0NTY3ODkwMQorZHFtaW4yMzAgbWluIDEgLTEyMzQ1Njc4OTAxICAtPiAtMTIzNDU2Nzg5MDEKK2RxbWluMjMxIG1pbiAtMTIzNDU2Nzg5NiAgMSAgLT4gLTEyMzQ1Njc4OTYKK2RxbWluMjMyIG1pbiAxIC0xMjM0NTY3ODk2ICAgLT4gLTEyMzQ1Njc4OTYKK2RxbWluMjMzIG1pbiAxMjM0NTY3ODkxICAxICAgLT4gMQorZHFtaW4yMzQgbWluIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkcW1pbjIzNSBtaW4gMTIzNDU2Nzg5MDEgMSAgIC0+IDEKK2RxbWluMjM2IG1pbiAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZHFtaW4yMzcgbWluIDEyMzQ1Njc4OTYgIDEgICAtPiAxCitkcW1pbjIzOCBtaW4gMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBleGFtcGxlcworZHFtaW4yODAgbWluICczJyAgICcyJyAgLT4gICcyJworZHFtaW4yODEgbWluICctMTAnICczJyAgLT4gICctMTAnCitkcW1pbjI4MiBtaW4gJzEuMCcgJzEnICAtPiAgJzEuMCcKK2RxbWluMjgzIG1pbiAnMScgJzEuMCcgIC0+ICAnMS4wJworZHFtaW4yODQgbWluICc3JyAnTmFOJyAgLT4gICc3JworCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK2RxbWluNDAxIG1pbiAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQorZHFtaW40MDIgbWluICAxLjEgICAgMSAgICAgICAtPiAgMQorZHFtaW40MDMgbWluICAxICAgICAgMS4wICAgICAtPiAgMS4wCitkcW1pbjQwNCBtaW4gIDEuMCAgICAwLjEgICAgIC0+ICAwLjEKK2RxbWluNDA1IG1pbiAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTAKK2RxbWluNDA2IG1pbiAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwCitkcW1pbjQwNyBtaW4gIDAuMTAgICAwICAgICAgIC0+ICAwCitkcW1pbjQwOCBtaW4gIDAgICAgICAwLjAgICAgIC0+ICAwLjAKK2RxbWluNDA5IG1pbiAgMC4wICAgLTAgICAgICAgLT4gLTAKK2RxbWluNDEwIG1pbiAgMC4wICAgLTAuMCAgICAgLT4gLTAuMAorZHFtaW40MTEgbWluICAwLjAwICAtMC4wICAgICAtPiAtMC4wCitkcW1pbjQxMiBtaW4gIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwCitkcW1pbjQxMyBtaW4gIDAgICAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbWluNDE0IG1pbiAgMCAgICAgLTAgICAgICAgLT4gLTAKK2RxbWluNDE1IG1pbiAtMC4wICAgLTAgICAgICAgLT4gLTAKK2RxbWluNDE2IG1pbiAtMCAgICAgLTAuMTAwICAgLT4gLTAuMTAwCitkcW1pbjQxNyBtaW4gLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwCitkcW1pbjQxOCBtaW4gLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEKK2RxbWluNDE5IG1pbiAtMC4xICAgLTEuMCAgICAgLT4gLTEuMAorZHFtaW40MjAgbWluIC0xLjAgICAtMSAgICAgICAtPiAtMQorZHFtaW40MjEgbWluIC0xICAgICAtMS4xICAgICAtPiAtMS4xCitkcW1pbjQyMyBtaW4gLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitkcW1pbjQzMSBtaW4gIDEuMSAgICBJbmYgICAgIC0+ICAxLjEKK2RxbWluNDMyIG1pbiAgMSAgICAgIDEuMSAgICAgLT4gIDEKK2RxbWluNDMzIG1pbiAgMS4wICAgIDEgICAgICAgLT4gIDEuMAorZHFtaW40MzQgbWluICAwLjEgICAgMS4wICAgICAtPiAgMC4xCitkcW1pbjQzNSBtaW4gIDAuMTAgICAwLjEgICAgIC0+ICAwLjEwCitkcW1pbjQzNiBtaW4gIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwMAorZHFtaW40MzcgbWluICAwICAgICAgMC4xMCAgICAtPiAgMAorZHFtaW40MzggbWluICAwLjAgICAgMCAgICAgICAtPiAgMC4wCitkcW1pbjQzOSBtaW4gLTAgICAgICAwLjAgICAgIC0+IC0wCitkcW1pbjQ0MCBtaW4gLTAuMCAgICAwLjAgICAgIC0+IC0wLjAKK2RxbWluNDQxIG1pbiAtMC4wICAgIDAuMDAgICAgLT4gLTAuMAorZHFtaW40NDIgbWluIC0wLjAwICAgMC4wICAgICAtPiAtMC4wMAorZHFtaW40NDMgbWluIC0wLjAgICAgMCAgICAgICAtPiAtMC4wCitkcW1pbjQ0NCBtaW4gLTAgICAgICAwICAgICAgIC0+IC0wCitkcW1pbjQ0NSBtaW4gLTAgICAgIC0wLjAgICAgIC0+IC0wCitkcW1pbjQ0NiBtaW4gLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMAorZHFtaW40NDcgbWluIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMAorZHFtaW40NDggbWluIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xCitkcW1pbjQ0OSBtaW4gLTEuMCAgIC0wLjEgICAgIC0+IC0xLjAKK2RxbWluNDUwIG1pbiAtMSAgICAgLTEuMCAgICAgLT4gLTEKK2RxbWluNDUxIG1pbiAtMS4xICAgLTEgICAgICAgLT4gLTEuMQorZHFtaW40NTMgbWluIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkKKy0tIGxhcmdpZXMKK2RxbWluNDYwIG1pbiAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDAKK2RxbWluNDYxIG1pbiAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RxbWluNDYyIG1pbiAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKK2RxbWluNDYzIG1pbiAgMUUrMyAgLTM4NCAgICAtPiAtMzg0CitkcW1pbjQ2NCBtaW4gLTM4NCAgIDFFKzMgICAgLT4gLTM4NAorZHFtaW40NjUgbWluIC0xRSszICAgMTAwMCAgICAtPiAtMUUrMworZHFtaW40NjYgbWluIC0zODQgIC0xRSszICAgIC0+IC0xRSszCitkcW1pbjQ2NyBtaW4gLTFFKzMgIC0zODQgICAgLT4gLTFFKzMKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitkcW1pbjQ3MSBtaW4gICAgICAxLjAgICAgICAgMC4xICAtPiAwLjEKK2RxbWluNDcyIG1pbiAgICAgIDAuMSAgICAgICAxLjAgIC0+IDAuMQorZHFtaW40NzMgbWluICAgICAxMC4wICAgICAgIDAuMSAgLT4gMC4xCitkcW1pbjQ3NCBtaW4gICAgICAwLjEgICAgICAxMC4wICAtPiAwLjEKK2RxbWluNDc1IG1pbiAgICAgIDEwMCAgICAgICAxLjAgIC0+IDEuMAorZHFtaW40NzYgbWluICAgICAgMS4wICAgICAgIDEwMCAgLT4gMS4wCitkcW1pbjQ3NyBtaW4gICAgIDEwMDAgICAgICAxMC4wICAtPiAxMC4wCitkcW1pbjQ3OCBtaW4gICAgIDEwLjAgICAgICAxMDAwICAtPiAxMC4wCitkcW1pbjQ3OSBtaW4gICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAuMAorZHFtaW40ODAgbWluICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwLjAKK2RxbWluNDgxIG1pbiAgIDEwMDAwMCAgICAxMDAwLjAgIC0+IDEwMDAuMAorZHFtaW40ODIgbWluICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMC4wCitkcW1pbjQ4MyBtaW4gIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMC4wCitkcW1pbjQ4NCBtaW4gIDEwMDAwLjAgICAxMDAwMDAwICAtPiAxMDAwMC4wCisKKy0tIHN1Ym5vcm1hbHMKK2RxbWluNTEwIG1pbiAgMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbWluNTExIG1pbiAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDAKK2RxbWluNTEyIG1pbiAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbWluNTEzIG1pbiAgMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbWluNTE0IG1pbiAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbWluNTE1IG1pbiAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbWluNTE2IG1pbiAgMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbWluNTE3IG1pbiAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbWluNTE4IG1pbiAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbWluNTE5IG1pbiAgMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDAKK2RxbWluNTIwIG1pbiAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDAKKworZHFtaW41MzAgbWluIC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAtMS4wMEUtNjE0MworZHFtaW41MzEgbWluIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwKK2RxbWluNTMyIG1pbiAtMC4xMEUtNjE0MyAgICAgICAwICAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsCitkcW1pbjUzMyBtaW4gLTAuMTAwRS02MTQzICAgICAgMCAgLT4gIC0xLjAwRS02MTQ0IFN1Ym5vcm1hbAorZHFtaW41MzQgbWluIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAtMUUtNjE0NSAgICBTdWJub3JtYWwKK2RxbWluNTM1IG1pbiAtMC45OTlFLTYxNDMgICAgICAwICAtPiAgLTkuOTlFLTYxNDQgU3Vibm9ybWFsCitkcW1pbjUzNiBtaW4gLTAuMDk5RS02MTQzICAgICAgMCAgLT4gIC05LjlFLTYxNDUgIFN1Ym5vcm1hbAorZHFtaW41MzcgbWluIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAtOUUtNjE0NiAgICBTdWJub3JtYWwKK2RxbWluNTM4IG1pbiAtMC4wMDFFLTYxNDMgICAgICAwICAtPiAgLTFFLTYxNDYgICAgU3Vibm9ybWFsCitkcW1pbjUzOSBtaW4gLTAuMDAwOUUtNjE0MyAgICAgMCAgLT4gIC05RS02MTQ3ICAgIFN1Ym5vcm1hbAorZHFtaW41NDAgbWluIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAtMUUtNjE0NyAgICBTdWJub3JtYWwKKworCistLSBOdWxsIHRlc3RzCitkcW1pbjkwMCBtaW4gMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjkwMSBtaW4gICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW5NYWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbk1hZy5kZWNUZXN0CmluZGV4IDcxYjg4NmYuLmVkYzJlNDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbk1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbk1hZy5kZWNUZXN0CkBAIC0xLDI5MyArMSwyOTMgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxTWluTWFnLmRlY1Rlc3QgLS0gZGVjUXVhZCBtaW5udW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCi0tLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxbW5nMDAxIG1pbm1hZyAgLTIgIC0yICAtPiAtMg0KLWRxbW5nMDAyIG1pbm1hZyAgLTIgIC0xICAtPiAtMQ0KLWRxbW5nMDAzIG1pbm1hZyAgLTIgICAwICAtPiAgMA0KLWRxbW5nMDA0IG1pbm1hZyAgLTIgICAxICAtPiAgMQ0KLWRxbW5nMDA1IG1pbm1hZyAgLTIgICAyICAtPiAtMg0KLWRxbW5nMDA2IG1pbm1hZyAgLTEgIC0yICAtPiAtMQ0KLWRxbW5nMDA3IG1pbm1hZyAgLTEgIC0xICAtPiAtMQ0KLWRxbW5nMDA4IG1pbm1hZyAgLTEgICAwICAtPiAgMA0KLWRxbW5nMDA5IG1pbm1hZyAgLTEgICAxICAtPiAtMQ0KLWRxbW5nMDEwIG1pbm1hZyAgLTEgICAyICAtPiAtMQ0KLWRxbW5nMDExIG1pbm1hZyAgIDAgIC0yICAtPiAgMA0KLWRxbW5nMDEyIG1pbm1hZyAgIDAgIC0xICAtPiAgMA0KLWRxbW5nMDEzIG1pbm1hZyAgIDAgICAwICAtPiAgMA0KLWRxbW5nMDE0IG1pbm1hZyAgIDAgICAxICAtPiAgMA0KLWRxbW5nMDE1IG1pbm1hZyAgIDAgICAyICAtPiAgMA0KLWRxbW5nMDE2IG1pbm1hZyAgIDEgIC0yICAtPiAgMQ0KLWRxbW5nMDE3IG1pbm1hZyAgIDEgIC0xICAtPiAtMQ0KLWRxbW5nMDE4IG1pbm1hZyAgIDEgICAwICAtPiAgMA0KLWRxbW5nMDE5IG1pbm1hZyAgIDEgICAxICAtPiAgMQ0KLWRxbW5nMDIwIG1pbm1hZyAgIDEgICAyICAtPiAgMQ0KLWRxbW5nMDIxIG1pbm1hZyAgIDIgIC0yICAtPiAtMg0KLWRxbW5nMDIyIG1pbm1hZyAgIDIgIC0xICAtPiAtMQ0KLWRxbW5nMDIzIG1pbm1hZyAgIDIgICAwICAtPiAgMA0KLWRxbW5nMDI1IG1pbm1hZyAgIDIgICAxICAtPiAgMQ0KLWRxbW5nMDI2IG1pbm1hZyAgIDIgICAyICAtPiAgMg0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZHFtbmcwMzAgbWlubWFnICAgMCAgICAgMCAgIC0+ICAwDQotZHFtbmcwMzEgbWlubWFnICAgMCAgICAtMCAgIC0+IC0wDQotZHFtbmcwMzIgbWlubWFnICAgMCAgICAtMC4wIC0+IC0wLjANCi1kcW1uZzAzMyBtaW5tYWcgICAwICAgICAwLjAgLT4gIDAuMA0KLWRxbW5nMDM0IG1pbm1hZyAgLTAgICAgIDAgICAtPiAtMA0KLWRxbW5nMDM1IG1pbm1hZyAgLTAgICAgLTAgICAtPiAtMA0KLWRxbW5nMDM2IG1pbm1hZyAgLTAgICAgLTAuMCAtPiAtMA0KLWRxbW5nMDM3IG1pbm1hZyAgLTAgICAgIDAuMCAtPiAtMA0KLWRxbW5nMDM4IG1pbm1hZyAgIDAuMCAgIDAgICAtPiAgMC4wDQotZHFtbmcwMzkgbWlubWFnICAgMC4wICAtMCAgIC0+IC0wDQotZHFtbmcwNDAgbWlubWFnICAgMC4wICAtMC4wIC0+IC0wLjANCi1kcW1uZzA0MSBtaW5tYWcgICAwLjAgICAwLjAgLT4gIDAuMA0KLWRxbW5nMDQyIG1pbm1hZyAgLTAuMCAgIDAgICAtPiAtMC4wDQotZHFtbmcwNDMgbWlubWFnICAtMC4wICAtMCAgIC0+IC0wDQotZHFtbmcwNDQgbWlubWFnICAtMC4wICAtMC4wIC0+IC0wLjANCi1kcW1uZzA0NSBtaW5tYWcgIC0wLjAgICAwLjAgLT4gLTAuMA0KLQ0KLWRxbW5nMDQ2IG1pbm1hZyAgIDBFMSAgLTBFMSAtPiAtMEUrMQ0KLWRxbW5nMDQ3IG1pbm1hZyAgLTBFMSAgIDBFMiAtPiAtMEUrMQ0KLWRxbW5nMDQ4IG1pbm1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMQ0KLWRxbW5nMDQ5IG1pbm1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMQ0KLWRxbW5nMDUwIG1pbm1hZyAgLTBFMyAgLTBFMiAtPiAtMEUrMw0KLWRxbW5nMDUxIG1pbm1hZyAgLTBFMiAgLTBFMyAtPiAtMEUrMw0KLQ0KLS0tIFNwZWNpYWxzDQotZHFtbmcwOTAgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1uZzA5MSBtaW5tYWcgIEluZiAgLTEwMDAgIC0+IC0xMDAwDQotZHFtbmcwOTIgbWlubWFnICBJbmYgIC0xICAgICAtPiAtMQ0KLWRxbW5nMDkzIG1pbm1hZyAgSW5mICAtMCAgICAgLT4gLTANCi1kcW1uZzA5NCBtaW5tYWcgIEluZiAgIDAgICAgIC0+ICAwDQotZHFtbmcwOTUgbWlubWFnICBJbmYgICAxICAgICAtPiAgMQ0KLWRxbW5nMDk2IG1pbm1hZyAgSW5mICAgMTAwMCAgLT4gIDEwMDANCi1kcW1uZzA5NyBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbW5nMDk4IG1pbm1hZyAtMTAwMCAgSW5mICAgLT4gLTEwMDANCi1kcW1uZzA5OSBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbW5nMTAwIG1pbm1hZyAtMSAgICAgSW5mICAgLT4gLTENCi1kcW1uZzEwMSBtaW5tYWcgLTAgICAgIEluZiAgIC0+IC0wDQotZHFtbmcxMDIgbWlubWFnICAwICAgICBJbmYgICAtPiAgMA0KLWRxbW5nMTAzIG1pbm1hZyAgMSAgICAgSW5mICAgLT4gIDENCi1kcW1uZzEwNCBtaW5tYWcgIDEwMDAgIEluZiAgIC0+ICAxMDAwDQotZHFtbmcxMDUgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcW1uZzEyMCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbW5nMTIxIG1pbm1hZyAtSW5mICAtMTAwMCAgLT4gLTEwMDANCi1kcW1uZzEyMiBtaW5tYWcgLUluZiAgLTEgICAgIC0+IC0xDQotZHFtbmcxMjMgbWlubWFnIC1JbmYgIC0wICAgICAtPiAtMA0KLWRxbW5nMTI0IG1pbm1hZyAtSW5mICAgMCAgICAgLT4gIDANCi1kcW1uZzEyNSBtaW5tYWcgLUluZiAgIDEgICAgIC0+ICAxDQotZHFtbmcxMjYgbWlubWFnIC1JbmYgICAxMDAwICAtPiAgMTAwMA0KLWRxbW5nMTI3IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZHFtbmcxMjggbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1uZzEyOSBtaW5tYWcgLTEwMDAgLUluZiAgIC0+IC0xMDAwDQotZHFtbmcxMzAgbWlubWFnIC0xICAgIC1JbmYgICAtPiAtMQ0KLWRxbW5nMTMxIG1pbm1hZyAtMCAgICAtSW5mICAgLT4gLTANCi1kcW1uZzEzMiBtaW5tYWcgIDAgICAgLUluZiAgIC0+ICAwDQotZHFtbmcxMzMgbWlubWFnICAxICAgIC1JbmYgICAtPiAgMQ0KLWRxbW5nMTM0IG1pbm1hZyAgMTAwMCAtSW5mICAgLT4gIDEwMDANCi1kcW1uZzEzNSBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcw0KLWRxbW5nMTQxIG1pbm1hZyAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQ0KLWRxbW5nMTQyIG1pbm1hZyAgTmFOIC0xMDAwICAgLT4gIC0xMDAwDQotZHFtbmcxNDMgbWlubWFnICBOYU4gLTEgICAgICAtPiAgLTENCi1kcW1uZzE0NCBtaW5tYWcgIE5hTiAtMCAgICAgIC0+ICAtMA0KLWRxbW5nMTQ1IG1pbm1hZyAgTmFOICAwICAgICAgLT4gIDANCi1kcW1uZzE0NiBtaW5tYWcgIE5hTiAgMSAgICAgIC0+ICAxDQotZHFtbmcxNDcgbWlubWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KLWRxbW5nMTQ4IG1pbm1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5DQotZHFtbmcxNDkgbWlubWFnICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFtbmcxNTAgbWlubWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCi1kcW1uZzE1MSBtaW5tYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwDQotZHFtbmcxNTIgbWlubWFnIC0xICAgLU5hTiAgICAtPiAtMQ0KLWRxbW5nMTUzIG1pbm1hZyAtMCAgICBOYU4gICAgLT4gLTANCi1kcW1uZzE1NCBtaW5tYWcgIDAgICAtTmFOICAgIC0+ICAwDQotZHFtbmcxNTUgbWlubWFnICAxICAgIE5hTiAgICAtPiAgMQ0KLWRxbW5nMTU2IG1pbm1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDANCi1kcW1uZzE1NyBtaW5tYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbW5nMTYxIG1pbm1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE2MiBtaW5tYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNjMgbWlubWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTY0IG1pbm1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE2NSBtaW5tYWcgLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNjYgbWlubWFnIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTY3IG1pbm1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE2OCBtaW5tYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNjkgbWlubWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTcwIG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE3MSBtaW5tYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNzIgbWlubWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTczIG1pbm1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE3NCBtaW5tYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNzUgbWlubWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTc2IG1pbm1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE3NyBtaW5tYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNzggbWlubWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTc5IG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFtbmcxODEgbWlubWFnICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbW5nMTgyIG1pbm1hZyAtTmFOOCAgICA5OTkwICAtPiAgOTk5MA0KLWRxbW5nMTgzIG1pbm1hZyAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcW1uZzE4NCBtaW5tYWcgIE5hTjEgICAgTmFONTQgLT4gIE5hTjENCi1kcW1uZzE4NSBtaW5tYWcgIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyDQotZHFtbmcxODYgbWlubWFnIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zDQotZHFtbmcxODcgbWlubWFnIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NA0KLQ0KLWRxbW5nMTg4IG1pbm1hZyAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkNCi1kcW1uZzE4OSBtaW5tYWcgLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkNCi1kcW1uZzE5MCBtaW5tYWcgIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5DQotDQotZHFtbmcxOTEgbWlubWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE5MiBtaW5tYWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTkzIG1pbm1hZyAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxOTQgbWlubWFnICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE5NSBtaW5tYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTk2IG1pbm1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxOTcgbWlubWFnICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE5OCBtaW5tYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTk5IG1pbm1hZyAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb2xkIHJvdW5kaW5nIGNoZWNrcw0KLWRxbW5nMjIxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQ0KLWRxbW5nMjIyIG1pbm1hZyAxIC0xMjM0NTY3ODAwMCAgLT4gMQ0KLWRxbW5nMjIzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQ0KLWRxbW5nMjI0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQ0KLWRxbW5nMjI1IG1pbm1hZyAtMTIzNDU2Nzg5MCAgMSAgLT4gMQ0KLWRxbW5nMjI2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQ0KLWRxbW5nMjI3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQ0KLWRxbW5nMjI4IG1pbm1hZyAxIC0xMjM0NTY3ODkxICAgLT4gMQ0KLWRxbW5nMjI5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQ0KLWRxbW5nMjMwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQ0KLWRxbW5nMjMxIG1pbm1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gMQ0KLWRxbW5nMjMyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQ0KLWRxbW5nMjMzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQ0KLWRxbW5nMjM0IG1pbm1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLWRxbW5nMjM1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQ0KLWRxbW5nMjM2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRxbW5nMjM3IG1pbm1hZyAxMjM0NTY3ODk2ICAxICAgLT4gMQ0KLWRxbW5nMjM4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLS0tIGZyb20gZXhhbXBsZXMNCi1kcW1uZzI4MCBtaW5tYWcgJzMnICAgJzInICAtPiAgJzInDQotZHFtbmcyODEgbWlubWFnICctMTAnICczJyAgLT4gICczJw0KLWRxbW5nMjgyIG1pbm1hZyAnMS4wJyAnMScgIC0+ICAnMS4wJw0KLWRxbW5nMjgzIG1pbm1hZyAnMScgJzEuMCcgIC0+ICAnMS4wJw0KLWRxbW5nMjg0IG1pbm1hZyAnNycgJ05hTicgIC0+ICAnNycNCi0NCi0tLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQ0KLS0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddDQotZHFtbmc0MDEgbWlubWFnICBJbmYgICAgMS4xICAgICAtPiAgMS4xDQotZHFtbmc0MDIgbWlubWFnICAxLjEgICAgMSAgICAgICAtPiAgMQ0KLWRxbW5nNDAzIG1pbm1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEuMA0KLWRxbW5nNDA0IG1pbm1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQ0KLWRxbW5nNDA1IG1pbm1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTANCi1kcW1uZzQwNiBtaW5tYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMA0KLWRxbW5nNDA3IG1pbm1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDANCi1kcW1uZzQwOCBtaW5tYWcgIDAgICAgICAwLjAgICAgIC0+ICAwLjANCi1kcW1uZzQwOSBtaW5tYWcgIDAuMCAgIC0wICAgICAgIC0+IC0wDQotZHFtbmc0MTAgbWlubWFnICAwLjAgICAtMC4wICAgICAtPiAtMC4wDQotZHFtbmc0MTEgbWlubWFnICAwLjAwICAtMC4wICAgICAtPiAtMC4wDQotZHFtbmc0MTIgbWlubWFnICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMA0KLWRxbW5nNDEzIG1pbm1hZyAgMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KLWRxbW5nNDE0IG1pbm1hZyAgMCAgICAgLTAgICAgICAgLT4gLTANCi1kcW1uZzQxNSBtaW5tYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wDQotZHFtbmc0MTYgbWlubWFnIC0wICAgICAtMC4xMDAgICAtPiAtMA0KLWRxbW5nNDE3IG1pbm1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTANCi1kcW1uZzQxOCBtaW5tYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjENCi1kcW1uZzQxOSBtaW5tYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0wLjENCi1kcW1uZzQyMCBtaW5tYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xDQotZHFtbmc0MjEgbWlubWFnIC0xICAgICAtMS4xICAgICAtPiAtMQ0KLWRxbW5nNDIzIG1pbm1hZyAtMS4xICAgLUluZiAgICAgLT4gLTEuMQ0KLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KLWRxbW5nNDMxIG1pbm1hZyAgMS4xICAgIEluZiAgICAgLT4gIDEuMQ0KLWRxbW5nNDMyIG1pbm1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDENCi1kcW1uZzQzMyBtaW5tYWcgIDEuMCAgICAxICAgICAgIC0+ICAxLjANCi1kcW1uZzQzNCBtaW5tYWcgIDAuMSAgICAxLjAgICAgIC0+ICAwLjENCi1kcW1uZzQzNSBtaW5tYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjEwDQotZHFtbmc0MzYgbWlubWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDANCi1kcW1uZzQzNyBtaW5tYWcgIDAgICAgICAwLjEwICAgIC0+ICAwDQotZHFtbmc0MzggbWlubWFnICAwLjAgICAgMCAgICAgICAtPiAgMC4wDQotZHFtbmc0MzkgbWlubWFnIC0wICAgICAgMC4wICAgICAtPiAtMA0KLWRxbW5nNDQwIG1pbm1hZyAtMC4wICAgIDAuMCAgICAgLT4gLTAuMA0KLWRxbW5nNDQxIG1pbm1hZyAtMC4wICAgIDAuMDAgICAgLT4gLTAuMA0KLWRxbW5nNDQyIG1pbm1hZyAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDANCi1kcW1uZzQ0MyBtaW5tYWcgLTAuMCAgICAwICAgICAgIC0+IC0wLjANCi1kcW1uZzQ0NCBtaW5tYWcgLTAgICAgICAwICAgICAgIC0+IC0wDQotZHFtbmc0NDUgbWlubWFnIC0wICAgICAtMC4wICAgICAtPiAtMA0KLWRxbW5nNDQ2IG1pbm1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTANCi1kcW1uZzQ0NyBtaW5tYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwDQotZHFtbmc0NDggbWlubWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xDQotZHFtbmc0NDkgbWlubWFnIC0xLjAgICAtMC4xICAgICAtPiAtMC4xDQotZHFtbmc0NTAgbWlubWFnIC0xICAgICAtMS4wICAgICAtPiAtMQ0KLWRxbW5nNDUxIG1pbm1hZyAtMS4xICAgLTEgICAgICAgLT4gLTENCi1kcW1uZzQ1MyBtaW5tYWcgLUluZiAgIC0xLjEgICAgIC0+IC0xLjENCi0tLSBsYXJnaWVzDQotZHFtbmc0NjAgbWlubWFnICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMA0KLWRxbW5nNDYxIG1pbm1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCi1kcW1uZzQ2MiBtaW5tYWcgIDEwMDAgIC0xRSszICAgIC0+IC0xRSszDQotZHFtbmc0NjMgbWlubWFnICAxRSszICAgLTM4NCAgICAtPiAtMzg0DQotZHFtbmc0NjQgbWlubWFnIC0zODQgICAgMUUrMyAgICAtPiAtMzg0DQotZHFtbmc0NjUgbWlubWFnIC0xRSszICAgMTAwMCAgICAtPiAtMUUrMw0KLWRxbW5nNDY2IG1pbm1hZyAtMzg0ICAgLTFFKzMgICAgLT4gLTM4NA0KLWRxbW5nNDY3IG1pbm1hZyAtMUUrMyAgIC0zODQgICAgLT4gLTM4NA0KLQ0KLS0tIHN1Ym5vcm1hbHMNCi1kcW1uZzUxMCBtaW5tYWcgIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAwDQotZHFtbmc1MTEgbWlubWFnICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTEyIG1pbm1hZyAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDANCi1kcW1uZzUxMyBtaW5tYWcgIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtbmc1MTQgbWlubWFnICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTE1IG1pbm1hZyAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1uZzUxNiBtaW5tYWcgIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtbmc1MTcgbWlubWFnICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTE4IG1pbm1hZyAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1uZzUxOSBtaW5tYWcgIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICAwDQotZHFtbmc1MjAgbWlubWFnICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMA0KLQ0KLWRxbW5nNTMwIG1pbm1hZyAtMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDANCi1kcW1uZzUzMSBtaW5tYWcgLTAuMUUtNjE0MyAgICAgICAgMCAgLT4gICAwDQotZHFtbmc1MzIgbWlubWFnIC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTMzIG1pbm1hZyAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1uZzUzNCBtaW5tYWcgLTAuMDFFLTYxNDMgICAgICAgMCAgLT4gICAwDQotZHFtbmc1MzUgbWlubWFnIC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTM2IG1pbm1hZyAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1uZzUzNyBtaW5tYWcgLTAuMDA5RS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtbmc1MzggbWlubWFnIC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTM5IG1pbm1hZyAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDANCi1kcW1uZzU0MCBtaW5tYWcgLTAuMDAwMUUtNjE0MyAgICAgMCAgLT4gICAwDQotDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzkwMSBtaW5tYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcU1pbk1hZy5kZWNUZXN0IC0tIGRlY1F1YWQgbWlubnVtbWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcW1uZzAwMSBtaW5tYWcgIC0yICAtMiAgLT4gLTIKK2RxbW5nMDAyIG1pbm1hZyAgLTIgIC0xICAtPiAtMQorZHFtbmcwMDMgbWlubWFnICAtMiAgIDAgIC0+ICAwCitkcW1uZzAwNCBtaW5tYWcgIC0yICAgMSAgLT4gIDEKK2RxbW5nMDA1IG1pbm1hZyAgLTIgICAyICAtPiAtMgorZHFtbmcwMDYgbWlubWFnICAtMSAgLTIgIC0+IC0xCitkcW1uZzAwNyBtaW5tYWcgIC0xICAtMSAgLT4gLTEKK2RxbW5nMDA4IG1pbm1hZyAgLTEgICAwICAtPiAgMAorZHFtbmcwMDkgbWlubWFnICAtMSAgIDEgIC0+IC0xCitkcW1uZzAxMCBtaW5tYWcgIC0xICAgMiAgLT4gLTEKK2RxbW5nMDExIG1pbm1hZyAgIDAgIC0yICAtPiAgMAorZHFtbmcwMTIgbWlubWFnICAgMCAgLTEgIC0+ICAwCitkcW1uZzAxMyBtaW5tYWcgICAwICAgMCAgLT4gIDAKK2RxbW5nMDE0IG1pbm1hZyAgIDAgICAxICAtPiAgMAorZHFtbmcwMTUgbWlubWFnICAgMCAgIDIgIC0+ICAwCitkcW1uZzAxNiBtaW5tYWcgICAxICAtMiAgLT4gIDEKK2RxbW5nMDE3IG1pbm1hZyAgIDEgIC0xICAtPiAtMQorZHFtbmcwMTggbWlubWFnICAgMSAgIDAgIC0+ICAwCitkcW1uZzAxOSBtaW5tYWcgICAxICAgMSAgLT4gIDEKK2RxbW5nMDIwIG1pbm1hZyAgIDEgICAyICAtPiAgMQorZHFtbmcwMjEgbWlubWFnICAgMiAgLTIgIC0+IC0yCitkcW1uZzAyMiBtaW5tYWcgICAyICAtMSAgLT4gLTEKK2RxbW5nMDIzIG1pbm1hZyAgIDIgICAwICAtPiAgMAorZHFtbmcwMjUgbWlubWFnICAgMiAgIDEgIC0+ICAxCitkcW1uZzAyNiBtaW5tYWcgICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RxbW5nMDMwIG1pbm1hZyAgIDAgICAgIDAgICAtPiAgMAorZHFtbmcwMzEgbWlubWFnICAgMCAgICAtMCAgIC0+IC0wCitkcW1uZzAzMiBtaW5tYWcgICAwICAgIC0wLjAgLT4gLTAuMAorZHFtbmcwMzMgbWlubWFnICAgMCAgICAgMC4wIC0+ICAwLjAKK2RxbW5nMDM0IG1pbm1hZyAgLTAgICAgIDAgICAtPiAtMAorZHFtbmcwMzUgbWlubWFnICAtMCAgICAtMCAgIC0+IC0wCitkcW1uZzAzNiBtaW5tYWcgIC0wICAgIC0wLjAgLT4gLTAKK2RxbW5nMDM3IG1pbm1hZyAgLTAgICAgIDAuMCAtPiAtMAorZHFtbmcwMzggbWlubWFnICAgMC4wICAgMCAgIC0+ICAwLjAKK2RxbW5nMDM5IG1pbm1hZyAgIDAuMCAgLTAgICAtPiAtMAorZHFtbmcwNDAgbWlubWFnICAgMC4wICAtMC4wIC0+IC0wLjAKK2RxbW5nMDQxIG1pbm1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wCitkcW1uZzA0MiBtaW5tYWcgIC0wLjAgICAwICAgLT4gLTAuMAorZHFtbmcwNDMgbWlubWFnICAtMC4wICAtMCAgIC0+IC0wCitkcW1uZzA0NCBtaW5tYWcgIC0wLjAgIC0wLjAgLT4gLTAuMAorZHFtbmcwNDUgbWlubWFnICAtMC4wICAgMC4wIC0+IC0wLjAKKworZHFtbmcwNDYgbWlubWFnICAgMEUxICAtMEUxIC0+IC0wRSsxCitkcW1uZzA0NyBtaW5tYWcgIC0wRTEgICAwRTIgLT4gLTBFKzEKK2RxbW5nMDQ4IG1pbm1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMQorZHFtbmcwNDkgbWlubWFnICAgMEUxICAgMEUyIC0+ICAwRSsxCitkcW1uZzA1MCBtaW5tYWcgIC0wRTMgIC0wRTIgLT4gLTBFKzMKK2RxbW5nMDUxIG1pbm1hZyAgLTBFMiAgLTBFMyAtPiAtMEUrMworCistLSBTcGVjaWFscworZHFtbmcwOTAgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbW5nMDkxIG1pbm1hZyAgSW5mICAtMTAwMCAgLT4gLTEwMDAKK2RxbW5nMDkyIG1pbm1hZyAgSW5mICAtMSAgICAgLT4gLTEKK2RxbW5nMDkzIG1pbm1hZyAgSW5mICAtMCAgICAgLT4gLTAKK2RxbW5nMDk0IG1pbm1hZyAgSW5mICAgMCAgICAgLT4gIDAKK2RxbW5nMDk1IG1pbm1hZyAgSW5mICAgMSAgICAgLT4gIDEKK2RxbW5nMDk2IG1pbm1hZyAgSW5mICAgMTAwMCAgLT4gIDEwMDAKK2RxbW5nMDk3IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1uZzA5OCBtaW5tYWcgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkcW1uZzA5OSBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtbmcxMDAgbWlubWFnIC0xICAgICBJbmYgICAtPiAtMQorZHFtbmcxMDEgbWlubWFnIC0wICAgICBJbmYgICAtPiAtMAorZHFtbmcxMDIgbWlubWFnICAwICAgICBJbmYgICAtPiAgMAorZHFtbmcxMDMgbWlubWFnICAxICAgICBJbmYgICAtPiAgMQorZHFtbmcxMDQgbWlubWFnICAxMDAwICBJbmYgICAtPiAgMTAwMAorZHFtbmcxMDUgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFtbmcxMjAgbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbW5nMTIxIG1pbm1hZyAtSW5mICAtMTAwMCAgLT4gLTEwMDAKK2RxbW5nMTIyIG1pbm1hZyAtSW5mICAtMSAgICAgLT4gLTEKK2RxbW5nMTIzIG1pbm1hZyAtSW5mICAtMCAgICAgLT4gLTAKK2RxbW5nMTI0IG1pbm1hZyAtSW5mICAgMCAgICAgLT4gIDAKK2RxbW5nMTI1IG1pbm1hZyAtSW5mICAgMSAgICAgLT4gIDEKK2RxbW5nMTI2IG1pbm1hZyAtSW5mICAgMTAwMCAgLT4gIDEwMDAKK2RxbW5nMTI3IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkcW1uZzEyOCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtbmcxMjkgbWlubWFnIC0xMDAwIC1JbmYgICAtPiAtMTAwMAorZHFtbmcxMzAgbWlubWFnIC0xICAgIC1JbmYgICAtPiAtMQorZHFtbmcxMzEgbWlubWFnIC0wICAgIC1JbmYgICAtPiAtMAorZHFtbmcxMzIgbWlubWFnICAwICAgIC1JbmYgICAtPiAgMAorZHFtbmcxMzMgbWlubWFnICAxICAgIC1JbmYgICAtPiAgMQorZHFtbmcxMzQgbWlubWFnICAxMDAwIC1JbmYgICAtPiAgMTAwMAorZHFtbmcxMzUgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCitkcW1uZzE0MSBtaW5tYWcgIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkKK2RxbW5nMTQyIG1pbm1hZyAgTmFOIC0xMDAwICAgLT4gIC0xMDAwCitkcW1uZzE0MyBtaW5tYWcgIE5hTiAtMSAgICAgIC0+ICAtMQorZHFtbmcxNDQgbWlubWFnICBOYU4gLTAgICAgICAtPiAgLTAKK2RxbW5nMTQ1IG1pbm1hZyAgTmFOICAwICAgICAgLT4gIDAKK2RxbW5nMTQ2IG1pbm1hZyAgTmFOICAxICAgICAgLT4gIDEKK2RxbW5nMTQ3IG1pbm1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKK2RxbW5nMTQ4IG1pbm1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CitkcW1uZzE0OSBtaW5tYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxbW5nMTUwIG1pbm1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitkcW1uZzE1MSBtaW5tYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwCitkcW1uZzE1MiBtaW5tYWcgLTEgICAtTmFOICAgIC0+IC0xCitkcW1uZzE1MyBtaW5tYWcgLTAgICAgTmFOICAgIC0+IC0wCitkcW1uZzE1NCBtaW5tYWcgIDAgICAtTmFOICAgIC0+ICAwCitkcW1uZzE1NSBtaW5tYWcgIDEgICAgTmFOICAgIC0+ICAxCitkcW1uZzE1NiBtaW5tYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCitkcW1uZzE1NyBtaW5tYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCitkcW1uZzE2MSBtaW5tYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE2MiBtaW5tYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE2MyBtaW5tYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE2NCBtaW5tYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE2NSBtaW5tYWcgLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE2NiBtaW5tYWcgLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE2NyBtaW5tYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE2OCBtaW5tYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE2OSBtaW5tYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE3MCBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE3MSBtaW5tYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE3MiBtaW5tYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE3MyBtaW5tYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE3NCBtaW5tYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE3NSBtaW5tYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE3NiBtaW5tYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE3NyBtaW5tYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE3OCBtaW5tYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE3OSBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxbW5nMTgxIG1pbm1hZyAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbW5nMTgyIG1pbm1hZyAtTmFOOCAgICA5OTkwICAtPiAgOTk5MAorZHFtbmcxODMgbWlubWFnICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW1uZzE4NCBtaW5tYWcgIE5hTjEgICAgTmFONTQgLT4gIE5hTjEKK2RxbW5nMTg1IG1pbm1hZyAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjIKK2RxbW5nMTg2IG1pbm1hZyAtTmFOMyAgICBOYU42ICAtPiAtTmFOMworZHFtbmcxODcgbWlubWFnIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NAorCitkcW1uZzE4OCBtaW5tYWcgLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5CitkcW1uZzE4OSBtaW5tYWcgLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkKK2RxbW5nMTkwIG1pbm1hZyAgSW5mICAgICBOYU4yICAtPiAgSW5maW5pdHkKKworZHFtbmcxOTEgbWlubWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTkyIG1pbm1hZyAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5MyBtaW5tYWcgLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTQgbWlubWFnICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTk1IG1pbm1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5NiBtaW5tYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTcgbWlubWFnICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTk4IG1pbm1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5OSBtaW5tYWcgIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvbGQgcm91bmRpbmcgY2hlY2tzCitkcW1uZzIyMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDEKK2RxbW5nMjIyIG1pbm1hZyAxIC0xMjM0NTY3ODAwMCAgLT4gMQorZHFtbmcyMjMgbWlubWFnIC0xMjM0NTY3ODAwICAxICAtPiAxCitkcW1uZzIyNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDEKK2RxbW5nMjI1IG1pbm1hZyAtMTIzNDU2Nzg5MCAgMSAgLT4gMQorZHFtbmcyMjYgbWlubWFnIDEgLTEyMzQ1Njc4OTAgICAtPiAxCitkcW1uZzIyNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDEKK2RxbW5nMjI4IG1pbm1hZyAxIC0xMjM0NTY3ODkxICAgLT4gMQorZHFtbmcyMjkgbWlubWFnIC0xMjM0NTY3ODkwMSAxICAtPiAxCitkcW1uZzIzMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDEKK2RxbW5nMjMxIG1pbm1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gMQorZHFtbmcyMzIgbWlubWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAxCitkcW1uZzIzMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK2RxbW5nMjM0IG1pbm1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZHFtbmcyMzUgbWlubWFnIDEyMzQ1Njc4OTAxIDEgICAtPiAxCitkcW1uZzIzNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RxbW5nMjM3IG1pbm1hZyAxMjM0NTY3ODk2ICAxICAgLT4gMQorZHFtbmcyMzggbWlubWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK2RxbW5nMjgwIG1pbm1hZyAnMycgICAnMicgIC0+ICAnMicKK2RxbW5nMjgxIG1pbm1hZyAnLTEwJyAnMycgIC0+ICAnMycKK2RxbW5nMjgyIG1pbm1hZyAnMS4wJyAnMScgIC0+ICAnMS4wJworZHFtbmcyODMgbWlubWFnICcxJyAnMS4wJyAgLT4gICcxLjAnCitkcW1uZzI4NCBtaW5tYWcgJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZHFtbmc0MDEgbWlubWFnICBJbmYgICAgMS4xICAgICAtPiAgMS4xCitkcW1uZzQwMiBtaW5tYWcgIDEuMSAgICAxICAgICAgIC0+ICAxCitkcW1uZzQwMyBtaW5tYWcgIDEgICAgICAxLjAgICAgIC0+ICAxLjAKK2RxbW5nNDA0IG1pbm1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQorZHFtbmc0MDUgbWlubWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMAorZHFtbmc0MDYgbWlubWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDAKK2RxbW5nNDA3IG1pbm1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAKK2RxbW5nNDA4IG1pbm1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAuMAorZHFtbmc0MDkgbWlubWFnICAwLjAgICAtMCAgICAgICAtPiAtMAorZHFtbmc0MTAgbWlubWFnICAwLjAgICAtMC4wICAgICAtPiAtMC4wCitkcW1uZzQxMSBtaW5tYWcgIDAuMDAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbW5nNDEyIG1pbm1hZyAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDAKK2RxbW5nNDEzIG1pbm1hZyAgMCAgICAgLTAuMCAgICAgLT4gLTAuMAorZHFtbmc0MTQgbWlubWFnICAwICAgICAtMCAgICAgICAtPiAtMAorZHFtbmc0MTUgbWlubWFnIC0wLjAgICAtMCAgICAgICAtPiAtMAorZHFtbmc0MTYgbWlubWFnIC0wICAgICAtMC4xMDAgICAtPiAtMAorZHFtbmc0MTcgbWlubWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMAorZHFtbmc0MTggbWlubWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xCitkcW1uZzQxOSBtaW5tYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0wLjEKK2RxbW5nNDIwIG1pbm1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEKK2RxbW5nNDIxIG1pbm1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEKK2RxbW5nNDIzIG1pbm1hZyAtMS4xICAgLUluZiAgICAgLT4gLTEuMQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitkcW1uZzQzMSBtaW5tYWcgIDEuMSAgICBJbmYgICAgIC0+ICAxLjEKK2RxbW5nNDMyIG1pbm1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDEKK2RxbW5nNDMzIG1pbm1hZyAgMS4wICAgIDEgICAgICAgLT4gIDEuMAorZHFtbmc0MzQgbWlubWFnICAwLjEgICAgMS4wICAgICAtPiAgMC4xCitkcW1uZzQzNSBtaW5tYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjEwCitkcW1uZzQzNiBtaW5tYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwMAorZHFtbmc0MzcgbWlubWFnICAwICAgICAgMC4xMCAgICAtPiAgMAorZHFtbmc0MzggbWlubWFnICAwLjAgICAgMCAgICAgICAtPiAgMC4wCitkcW1uZzQzOSBtaW5tYWcgLTAgICAgICAwLjAgICAgIC0+IC0wCitkcW1uZzQ0MCBtaW5tYWcgLTAuMCAgICAwLjAgICAgIC0+IC0wLjAKK2RxbW5nNDQxIG1pbm1hZyAtMC4wICAgIDAuMDAgICAgLT4gLTAuMAorZHFtbmc0NDIgbWlubWFnIC0wLjAwICAgMC4wICAgICAtPiAtMC4wMAorZHFtbmc0NDMgbWlubWFnIC0wLjAgICAgMCAgICAgICAtPiAtMC4wCitkcW1uZzQ0NCBtaW5tYWcgLTAgICAgICAwICAgICAgIC0+IC0wCitkcW1uZzQ0NSBtaW5tYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wCitkcW1uZzQ0NiBtaW5tYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wCitkcW1uZzQ0NyBtaW5tYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwCitkcW1uZzQ0OCBtaW5tYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEKK2RxbW5nNDQ5IG1pbm1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQorZHFtbmc0NTAgbWlubWFnIC0xICAgICAtMS4wICAgICAtPiAtMQorZHFtbmc0NTEgbWlubWFnIC0xLjEgICAtMSAgICAgICAtPiAtMQorZHFtbmc0NTMgbWlubWFnIC1JbmYgICAtMS4xICAgICAtPiAtMS4xCistLSBsYXJnaWVzCitkcW1uZzQ2MCBtaW5tYWcgIDEwMDAgICAxRSszICAgIC0+ICAxMDAwCitkcW1uZzQ2MSBtaW5tYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkcW1uZzQ2MiBtaW5tYWcgIDEwMDAgIC0xRSszICAgIC0+IC0xRSszCitkcW1uZzQ2MyBtaW5tYWcgIDFFKzMgICAtMzg0ICAgIC0+IC0zODQKK2RxbW5nNDY0IG1pbm1hZyAtMzg0ICAgIDFFKzMgICAgLT4gLTM4NAorZHFtbmc0NjUgbWlubWFnIC0xRSszICAgMTAwMCAgICAtPiAtMUUrMworZHFtbmc0NjYgbWlubWFnIC0zODQgICAtMUUrMyAgICAtPiAtMzg0CitkcW1uZzQ2NyBtaW5tYWcgLTFFKzMgICAtMzg0ICAgIC0+IC0zODQKKworLS0gc3Vibm9ybWFscworZHFtbmc1MTAgbWlubWFnICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MTEgbWlubWFnICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MTIgbWlubWFnICAwLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MTMgbWlubWFnICAwLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MTQgbWlubWFnICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MTUgbWlubWFnICAwLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MTYgbWlubWFnICAwLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MTcgbWlubWFnICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MTggbWlubWFnICAwLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MTkgbWlubWFnICAwLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMAorZHFtbmc1MjAgbWlubWFnICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMAorCitkcW1uZzUzMCBtaW5tYWcgLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1uZzUzMSBtaW5tYWcgLTAuMUUtNjE0MyAgICAgICAgMCAgLT4gICAwCitkcW1uZzUzMiBtaW5tYWcgLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1uZzUzMyBtaW5tYWcgLTAuMTAwRS02MTQzICAgICAgMCAgLT4gICAwCitkcW1uZzUzNCBtaW5tYWcgLTAuMDFFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1uZzUzNSBtaW5tYWcgLTAuOTk5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1uZzUzNiBtaW5tYWcgLTAuMDk5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1uZzUzNyBtaW5tYWcgLTAuMDA5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1uZzUzOCBtaW5tYWcgLTAuMDAxRS02MTQzICAgICAgMCAgLT4gICAwCitkcW1uZzUzOSBtaW5tYWcgLTAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICAwCitkcW1uZzU0MCBtaW5tYWcgLTAuMDAwMUUtNjE0MyAgICAgMCAgLT4gICAwCisKKworLS0gTnVsbCB0ZXN0cworZHFtbmc5MDAgbWlubWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmc5MDEgbWlubWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWludXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbnVzLmRlY1Rlc3QKaW5kZXggN2EwMDc3OS4uMDJlNDYyZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWludXMuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW51cy5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcU1pbnVzLmRlY1Rlc3QgLS0gZGVjUXVhZCAwLXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZHFtbnMwMDEgbWludXMgICAgICAgKzcuNTAgIC0+IC03LjUwDQotDQotLS0gSW5maW5pdGllcw0KLWRxbW5zMDExIG1pbnVzICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkNCi1kcW1uczAxMiBtaW51cyAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kcW1uczAyMSBtaW51cyAgICAgICAgIE5hTiAgLT4gTmFODQotZHFtbnMwMjIgbWludXMgICAgICAgIC1OYU4gIC0+IC1OYU4NCi1kcW1uczAyMyBtaW51cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5zMDI0IG1pbnVzICAgICAgIC1zTmFOICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWRxbW5zMDMxIG1pbnVzICAgICAgIE5hTjEzICAtPiBOYU4xMw0KLWRxbW5zMDMyIG1pbnVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMNCi1kcW1uczAzMyBtaW51cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5zMDM0IG1pbnVzICAgICAtc05hTjEzICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbnMwMzUgbWludXMgICAgICAgTmFONzAgIC0+IE5hTjcwDQotZHFtbnMwMzYgbWludXMgICAgICAtTmFONzAgIC0+IC1OYU43MA0KLWRxbW5zMDM3IG1pbnVzICAgICAgc05hTjEwMSAtPiBOYU4xMDEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbnMwMzggbWludXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmaW5pdGVzDQotZHFtbnMxMDEgbWludXMgICAgICAgICAgNyAgIC0+IC03DQotZHFtbnMxMDIgbWludXMgICAgICAgICAtNyAgIC0+IDcNCi1kcW1uczEwMyBtaW51cyAgICAgICAgIDc1ICAgLT4gLTc1DQotZHFtbnMxMDQgbWludXMgICAgICAgIC03NSAgIC0+IDc1DQotZHFtbnMxMDUgbWludXMgICAgICAgNy41MCAgIC0+IC03LjUwDQotZHFtbnMxMDYgbWludXMgICAgICAtNy41MCAgIC0+IDcuNTANCi1kcW1uczEwNyBtaW51cyAgICAgICA3LjUwMCAgLT4gLTcuNTAwDQotZHFtbnMxMDggbWludXMgICAgICAtNy41MDAgIC0+IDcuNTAwDQotDQotLS0gemVyb3MNCi1kcW1uczExMSBtaW51cyAgICAgICAgICAwICAgLT4gMA0KLWRxbW5zMTEyIG1pbnVzICAgICAgICAgLTAgICAtPiAwDQotZHFtbnMxMTMgbWludXMgICAgICAgMEUrNCAgIC0+IDBFKzQNCi1kcW1uczExNCBtaW51cyAgICAgIC0wRSs0ICAgLT4gMEUrNA0KLWRxbW5zMTE1IG1pbnVzICAgICAwLjAwMDAgICAtPiAwLjAwMDANCi1kcW1uczExNiBtaW51cyAgICAtMC4wMDAwICAgLT4gMC4wMDAwDQotZHFtbnMxMTcgbWludXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KLWRxbW5zMTE4IG1pbnVzICAgICAtMEUtMTQxICAtPiAwRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWRxbW5zMTIxIG1pbnVzICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KLWRxbW5zMTIyIG1pbnVzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KLWRxbW5zMTIzIG1pbnVzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KLWRxbW5zMTI0IG1pbnVzICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZHFtbnMxMzEgbWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFtbnMxMzIgbWludXMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMNCi1kcW1uczEzMyBtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcW1uczEzNCBtaW51cyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NiBTdWJub3JtYWwNCi0NCi1kcW1uczEzNSBtaW51cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwNCi1kcW1uczEzNiBtaW51cyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcW1uczEzNyBtaW51cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0Mw0KLWRxbW5zMTM4IG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFNaW51cy5kZWNUZXN0IC0tIGRlY1F1YWQgMC14ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcW1uczAwMSBtaW51cyAgICAgICArNy41MCAgLT4gLTcuNTAKKworLS0gSW5maW5pdGllcworZHFtbnMwMTEgbWludXMgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQorZHFtbnMwMTIgbWludXMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZHFtbnMwMjEgbWludXMgICAgICAgICBOYU4gIC0+IE5hTgorZHFtbnMwMjIgbWludXMgICAgICAgIC1OYU4gIC0+IC1OYU4KK2RxbW5zMDIzIG1pbnVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uczAyNCBtaW51cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkcW1uczAzMSBtaW51cyAgICAgICBOYU4xMyAgLT4gTmFOMTMKK2RxbW5zMDMyIG1pbnVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMKK2RxbW5zMDMzIG1pbnVzICAgICAgc05hTjEzICAtPiBOYU4xMyAgIEludmFsaWRfb3BlcmF0aW9uCitkcW1uczAzNCBtaW51cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbnMwMzUgbWludXMgICAgICAgTmFONzAgIC0+IE5hTjcwCitkcW1uczAzNiBtaW51cyAgICAgIC1OYU43MCAgLT4gLU5hTjcwCitkcW1uczAzNyBtaW51cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbnMwMzggbWludXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworZHFtbnMxMDEgbWludXMgICAgICAgICAgNyAgIC0+IC03CitkcW1uczEwMiBtaW51cyAgICAgICAgIC03ICAgLT4gNworZHFtbnMxMDMgbWludXMgICAgICAgICA3NSAgIC0+IC03NQorZHFtbnMxMDQgbWludXMgICAgICAgIC03NSAgIC0+IDc1CitkcW1uczEwNSBtaW51cyAgICAgICA3LjUwICAgLT4gLTcuNTAKK2RxbW5zMTA2IG1pbnVzICAgICAgLTcuNTAgICAtPiA3LjUwCitkcW1uczEwNyBtaW51cyAgICAgICA3LjUwMCAgLT4gLTcuNTAwCitkcW1uczEwOCBtaW51cyAgICAgIC03LjUwMCAgLT4gNy41MDAKKworLS0gemVyb3MKK2RxbW5zMTExIG1pbnVzICAgICAgICAgIDAgICAtPiAwCitkcW1uczExMiBtaW51cyAgICAgICAgIC0wICAgLT4gMAorZHFtbnMxMTMgbWludXMgICAgICAgMEUrNCAgIC0+IDBFKzQKK2RxbW5zMTE0IG1pbnVzICAgICAgLTBFKzQgICAtPiAwRSs0CitkcW1uczExNSBtaW51cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkcW1uczExNiBtaW51cyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkcW1uczExNyBtaW51cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkcW1uczExOCBtaW51cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcW1uczEyMSBtaW51cyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxbW5zMTIyIG1pbnVzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFtbnMxMjMgbWludXMgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcW1uczEyNCBtaW51cyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxbW5zMTMxIG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFtbnMxMzIgbWludXMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMKK2RxbW5zMTMzIG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFtbnMxMzQgbWludXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYgU3Vibm9ybWFsCisKK2RxbW5zMTM1IG1pbnVzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2IFN1Ym5vcm1hbAorZHFtbnMxMzYgbWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcW1uczEzNyBtaW51cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFtbnMxMzggbWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNdWx0aXBseS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTXVsdGlwbHkuZGVjVGVzdAppbmRleCA2NzZjMWY1Li44Mzg3YTg1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNdWx0aXBseS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU11bHRpcGx5LmRlY1Rlc3QKQEAgLTEsNTg5ICsxLDU4OSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFNdWx0aXBseS5kZWNUZXN0IC0tIGRlY1F1YWQgbXVsdGlwbGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUNCi0tLSByZXByZXNlbnRhYmxlIGluIGEgZGVjUXVhZA0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZHFtdWwwMDAgbXVsdGlwbHkgMiAgICAgIDIgLT4gNA0KLWRxbXVsMDAxIG11bHRpcGx5IDIgICAgICAzIC0+IDYNCi1kcW11bDAwMiBtdWx0aXBseSA1ICAgICAgMSAtPiA1DQotZHFtdWwwMDMgbXVsdGlwbHkgNSAgICAgIDIgLT4gMTANCi1kcW11bDAwNCBtdWx0aXBseSAxLjIwICAgMiAtPiAyLjQwDQotZHFtdWwwMDUgbXVsdGlwbHkgMS4yMCAgIDAgLT4gMC4wMA0KLWRxbXVsMDA2IG11bHRpcGx5IDEuMjAgIC0yIC0+IC0yLjQwDQotZHFtdWwwMDcgbXVsdGlwbHkgLTEuMjAgIDIgLT4gLTIuNDANCi1kcW11bDAwOCBtdWx0aXBseSAtMS4yMCAgMCAtPiAtMC4wMA0KLWRxbXVsMDA5IG11bHRpcGx5IC0xLjIwIC0yIC0+IDIuNDANCi1kcW11bDAxMCBtdWx0aXBseSA1LjA5IDcuMSAtPiAzNi4xMzkNCi1kcW11bDAxMSBtdWx0aXBseSAyLjUgICAgNCAtPiAxMC4wDQotZHFtdWwwMTIgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDANCi1kcW11bDAxMyBtdWx0aXBseSAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxLjIzNDU2Nzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkDQotZHFtdWwwMTUgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDANCi1kcW11bDAxNiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFtdWwwMTcgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsMDE4IG11bHRpcGx5IC05Ljk5OTk5OTk5OTk5OTk5OTk5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDAxOSBtdWx0aXBseSAtOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gemVyb3MsIGV0Yy4NCi1kcW11bDAyMSBtdWx0aXBseSAgMCAgICAgIDAgICAgIC0+ICAwDQotZHFtdWwwMjIgbXVsdGlwbHkgIDAgICAgIC0wICAgICAtPiAtMA0KLWRxbXVsMDIzIG11bHRpcGx5IC0wICAgICAgMCAgICAgLT4gLTANCi1kcW11bDAyNCBtdWx0aXBseSAtMCAgICAgLTAgICAgIC0+ICAwDQotZHFtdWwwMjUgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMA0KLWRxbXVsMDI2IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDANCi1kcW11bDAyNyBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwDQotZHFtdWwwMjggbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMA0KLWRxbXVsMDMwIG11bHRpcGx5ICA1LjAwICAgMUUtMyAgLT4gIDAuMDA1MDANCi1kcW11bDAzMSBtdWx0aXBseSAgMDAuMDAgIDAuMDAwIC0+ICAwLjAwMDAwDQotZHFtdWwwMzIgbXVsdGlwbHkgIDAwLjAwICAwRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kcW11bDAzMyBtdWx0aXBseSAgMEUtMyAgIDAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWRxbXVsMDM0IG11bHRpcGx5IC01LjAwICAgMUUtMyAgLT4gLTAuMDA1MDANCi1kcW11bDAzNSBtdWx0aXBseSAtMDAuMDAgIDAuMDAwIC0+IC0wLjAwMDAwDQotZHFtdWwwMzYgbXVsdGlwbHkgLTAwLjAwICAwRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kcW11bDAzNyBtdWx0aXBseSAtMEUtMyAgIDAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWRxbXVsMDM4IG11bHRpcGx5ICA1LjAwICAtMUUtMyAgLT4gLTAuMDA1MDANCi1kcW11bDAzOSBtdWx0aXBseSAgMDAuMDAgLTAuMDAwIC0+IC0wLjAwMDAwDQotZHFtdWwwNDAgbXVsdGlwbHkgIDAwLjAwIC0wRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kcW11bDA0MSBtdWx0aXBseSAgMEUtMyAgLTAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWRxbXVsMDQyIG11bHRpcGx5IC01LjAwICAtMUUtMyAgLT4gIDAuMDA1MDANCi1kcW11bDA0MyBtdWx0aXBseSAtMDAuMDAgLTAuMDAwIC0+ICAwLjAwMDAwDQotZHFtdWwwNDQgbXVsdGlwbHkgLTAwLjAwIC0wRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kcW11bDA0NSBtdWx0aXBseSAtMEUtMyAgLTAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCi1kcW11bDA1MCBtdWx0aXBseSAxLjIwIDMgICAgICAgIC0+IDMuNjANCi1kcW11bDA1MSBtdWx0aXBseSA3ICAgIDMgICAgICAgIC0+IDIxDQotZHFtdWwwNTIgbXVsdGlwbHkgMC45ICAwLjggICAgICAtPiAwLjcyDQotZHFtdWwwNTMgbXVsdGlwbHkgMC45ICAtMCAgICAgICAtPiAtMC4wDQotZHFtdWwwNTQgbXVsdGlwbHkgNjU0MzIxIDY1NDMyMSAtPiA0MjgxMzU5NzEwNDENCi0NCi1kcW11bDA2MCBtdWx0aXBseSAxMjMuNDUgMWU3ICAtPiAgMS4yMzQ1RSs5DQotZHFtdWwwNjEgbXVsdGlwbHkgMTIzLjQ1IDFlOCAgLT4gIDEuMjM0NUUrMTANCi1kcW11bDA2MiBtdWx0aXBseSAxMjMuNDUgMWUrOSAtPiAgMS4yMzQ1RSsxMQ0KLWRxbXVsMDYzIG11bHRpcGx5IDEyMy40NSAxZTEwIC0+ICAxLjIzNDVFKzEyDQotZHFtdWwwNjQgbXVsdGlwbHkgMTIzLjQ1IDFlMTEgLT4gIDEuMjM0NUUrMTMNCi1kcW11bDA2NSBtdWx0aXBseSAxMjMuNDUgMWUxMiAtPiAgMS4yMzQ1RSsxNA0KLWRxbXVsMDY2IG11bHRpcGx5IDEyMy40NSAxZTEzIC0+ICAxLjIzNDVFKzE1DQotDQotDQotLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzDQotLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kcW11bDA4MCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi1kcW11bDA4NCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi1kcW11bDA5MCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi1kcW11bDA5NCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi0NCi0tLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzDQotZHFtdWwxMDEgbXVsdGlwbHkgOSA5ICAgLT4gODENCi1kcW11bDEwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwDQotZHFtdWwxMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwDQotZHFtdWwxMDQgbXVsdGlwbHkgOSA5MDAwICAgLT4gODEwMDANCi1kcW11bDEwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwDQotZHFtdWwxMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwDQotZHFtdWwxMDcgbXVsdGlwbHkgOSA5MDAwMDAwICAgLT4gODEwMDAwMDANCi1kcW11bDEwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwDQotZHFtdWwxMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwDQotZHFtdWwxMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDANCi1kcW11bDExMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwDQotZHFtdWwxMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwDQotZHFtdWwxMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDANCi1kcW11bDExNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwDQotZHFtdWwxMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwDQotLS1kcW11bDExNiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMA0KLS0tZHFtdWwxMTcgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMA0KLS0tZHFtdWwxMTggbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwDQotLS1kcW11bDExOSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZHFtdWwxMjAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZHFtdWwxMjEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kcW11bDEyMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZHFtdWwxMjMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzDQotZHFtdWwxMzEgbXVsdGlwbHkgMyAzICAgLT4gOQ0KLWRxbXVsMTMyIG11bHRpcGx5IDMgMzAgICAtPiA5MA0KLWRxbXVsMTMzIG11bHRpcGx5IDMgMzAwICAgLT4gOTAwDQotZHFtdWwxMzQgbXVsdGlwbHkgMyAzMDAwICAgLT4gOTAwMA0KLWRxbXVsMTM1IG11bHRpcGx5IDMgMzAwMDAgICAtPiA5MDAwMA0KLWRxbXVsMTM2IG11bHRpcGx5IDMgMzAwMDAwICAgLT4gOTAwMDAwDQotZHFtdWwxMzcgbXVsdGlwbHkgMyAzMDAwMDAwICAgLT4gOTAwMDAwMA0KLWRxbXVsMTM4IG11bHRpcGx5IDMgMzAwMDAwMDAgICAtPiA5MDAwMDAwMA0KLWRxbXVsMTM5IG11bHRpcGx5IDMgMzAwMDAwMDAwICAgLT4gOTAwMDAwMDAwDQotZHFtdWwxNDAgbXVsdGlwbHkgMyAzMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMA0KLWRxbXVsMTQxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMA0KLWRxbXVsMTQyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwDQotZHFtdWwxNDMgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMA0KLWRxbXVsMTQ0IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMA0KLWRxbXVsMTQ1IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwDQotZHFtdWwxNDYgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTQ3IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTQ4IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxNDkgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTUwIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTUxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxNTIgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTUzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLWRxbXVsMjYzIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgyOTYgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZw0KLWRxbXVsMzAxIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5ICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzAyIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwzMDMgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzA0IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzA1IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwzMDYgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzA3IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzA4IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwzMDkgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzEwIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzExIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwzMTIgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzEzIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzE0IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwzMTUgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzE2IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzE3IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZA0KLWRxbXVsMzE4IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQNCi1kcW11bDMxOSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgUm91bmRlZA0KLWRxbXVsMzIwIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgUm91bmRlZA0KLWRxbXVsMzIxIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzggIFJvdW5kZWQNCi1kcW11bDMyMiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOSAgUm91bmRlZA0KLWRxbXVsMzIzIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs0MCAgUm91bmRlZA0KLQ0KLS0tIHRyeXplcm9zIGNhc2VzDQotZHFtdWw1MDQgIG11bHRpcGx5ICAwRS00MjYwIDEwMDBFLTQyNjAgIC0+IDBFLTYxNzYgQ2xhbXBlZA0KLWRxbXVsNTA1ICBtdWx0aXBseSAgMTAwRSs0MjYwIDBFKzQyNjAgICAtPiAwRSs2MTExIENsYW1wZWQNCi0NCi0tLSBtaXhlZCB3aXRoIHplcm9zDQotZHFtdWw1NDEgbXVsdGlwbHkgIDAgICAgLTEgICAgIC0+IC0wDQotZHFtdWw1NDIgbXVsdGlwbHkgLTAgICAgLTEgICAgIC0+ICAwDQotZHFtdWw1NDMgbXVsdGlwbHkgIDAgICAgIDEgICAgIC0+ICAwDQotZHFtdWw1NDQgbXVsdGlwbHkgLTAgICAgIDEgICAgIC0+IC0wDQotZHFtdWw1NDUgbXVsdGlwbHkgLTEgICAgIDAgICAgIC0+IC0wDQotZHFtdWw1NDYgbXVsdGlwbHkgLTEgICAgLTAgICAgIC0+ICAwDQotZHFtdWw1NDcgbXVsdGlwbHkgIDEgICAgIDAgICAgIC0+ICAwDQotZHFtdWw1NDggbXVsdGlwbHkgIDEgICAgLTAgICAgIC0+IC0wDQotDQotZHFtdWw1NTEgbXVsdGlwbHkgIDAuMCAgLTEgICAgIC0+IC0wLjANCi1kcW11bDU1MiBtdWx0aXBseSAtMC4wICAtMSAgICAgLT4gIDAuMA0KLWRxbXVsNTUzIG11bHRpcGx5ICAwLjAgICAxICAgICAtPiAgMC4wDQotZHFtdWw1NTQgbXVsdGlwbHkgLTAuMCAgIDEgICAgIC0+IC0wLjANCi1kcW11bDU1NSBtdWx0aXBseSAtMS4wICAgMCAgICAgLT4gLTAuMA0KLWRxbXVsNTU2IG11bHRpcGx5IC0xLjAgIC0wICAgICAtPiAgMC4wDQotZHFtdWw1NTcgbXVsdGlwbHkgIDEuMCAgIDAgICAgIC0+ICAwLjANCi1kcW11bDU1OCBtdWx0aXBseSAgMS4wICAtMCAgICAgLT4gLTAuMA0KLQ0KLWRxbXVsNTYxIG11bHRpcGx5ICAwICAgIC0xLjAgICAtPiAtMC4wDQotZHFtdWw1NjIgbXVsdGlwbHkgLTAgICAgLTEuMCAgIC0+ICAwLjANCi1kcW11bDU2MyBtdWx0aXBseSAgMCAgICAgMS4wICAgLT4gIDAuMA0KLWRxbXVsNTY0IG11bHRpcGx5IC0wICAgICAxLjAgICAtPiAtMC4wDQotZHFtdWw1NjUgbXVsdGlwbHkgLTEgICAgIDAuMCAgIC0+IC0wLjANCi1kcW11bDU2NiBtdWx0aXBseSAtMSAgICAtMC4wICAgLT4gIDAuMA0KLWRxbXVsNTY3IG11bHRpcGx5ICAxICAgICAwLjAgICAtPiAgMC4wDQotZHFtdWw1NjggbXVsdGlwbHkgIDEgICAgLTAuMCAgIC0+IC0wLjANCi0NCi1kcW11bDU3MSBtdWx0aXBseSAgMC4wICAtMS4wICAgLT4gLTAuMDANCi1kcW11bDU3MiBtdWx0aXBseSAtMC4wICAtMS4wICAgLT4gIDAuMDANCi1kcW11bDU3MyBtdWx0aXBseSAgMC4wICAgMS4wICAgLT4gIDAuMDANCi1kcW11bDU3NCBtdWx0aXBseSAtMC4wICAgMS4wICAgLT4gLTAuMDANCi1kcW11bDU3NSBtdWx0aXBseSAtMS4wICAgMC4wICAgLT4gLTAuMDANCi1kcW11bDU3NiBtdWx0aXBseSAtMS4wICAtMC4wICAgLT4gIDAuMDANCi1kcW11bDU3NyBtdWx0aXBseSAgMS4wICAgMC4wICAgLT4gIDAuMDANCi1kcW11bDU3OCBtdWx0aXBseSAgMS4wICAtMC4wICAgLT4gLTAuMDANCi0NCi0NCi0tLSBTcGVjaWFscw0KLWRxbXVsNTgwIG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW11bDU4MSBtdWx0aXBseSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZHFtdWw1ODIgbXVsdGlwbHkgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRxbXVsNTgzIG11bHRpcGx5ICBJbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNTg0IG11bHRpcGx5ICBJbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNTg1IG11bHRpcGx5ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kcW11bDU4NiBtdWx0aXBseSAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZHFtdWw1ODcgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbXVsNTg4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcW11bDU4OSBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZHFtdWw1OTAgbXVsdGlwbHkgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbXVsNTkxIG11bHRpcGx5IC0wICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNTkyIG11bHRpcGx5ICAwICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNTkzIG11bHRpcGx5ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW11bDU5NCBtdWx0aXBseSAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZHFtdWw1OTUgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbXVsNjAwIG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcW11bDYwMSBtdWx0aXBseSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZHFtdWw2MDIgbXVsdGlwbHkgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRxbXVsNjAzIG11bHRpcGx5IC1JbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjA0IG11bHRpcGx5IC1JbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjA1IG11bHRpcGx5IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kcW11bDYwNiBtdWx0aXBseSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZHFtdWw2MDcgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbXVsNjA4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcW11bDYwOSBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotZHFtdWw2MTAgbXVsdGlwbHkgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbXVsNjExIG11bHRpcGx5IC0wICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjEyIG11bHRpcGx5ICAwICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjEzIG11bHRpcGx5ICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW11bDYxNCBtdWx0aXBseSAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtdWw2MTUgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLQ0KLWRxbXVsNjIxIG11bHRpcGx5ICBOYU4gLUluZiAgICAtPiAgTmFODQotZHFtdWw2MjIgbXVsdGlwbHkgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kcW11bDYyMyBtdWx0aXBseSAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRxbXVsNjI0IG11bHRpcGx5ICBOYU4gLTAgICAgICAtPiAgTmFODQotZHFtdWw2MjUgbXVsdGlwbHkgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kcW11bDYyNiBtdWx0aXBseSAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRxbXVsNjI3IG11bHRpcGx5ICBOYU4gIDEwMDAgICAtPiAgTmFODQotZHFtdWw2MjggbXVsdGlwbHkgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kcW11bDYyOSBtdWx0aXBseSAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRxbXVsNjMwIG11bHRpcGx5IC1JbmYgIE5hTiAgICAtPiAgTmFODQotZHFtdWw2MzEgbXVsdGlwbHkgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcW11bDYzMiBtdWx0aXBseSAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxbXVsNjMzIG11bHRpcGx5IC0wICAgIE5hTiAgICAtPiAgTmFODQotZHFtdWw2MzQgbXVsdGlwbHkgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kcW11bDYzNSBtdWx0aXBseSAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxbXVsNjM2IG11bHRpcGx5ICAxMDAwIE5hTiAgICAtPiAgTmFODQotZHFtdWw2MzcgbXVsdGlwbHkgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kcW11bDY0MSBtdWx0aXBseSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY0MiBtdWx0aXBseSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY0MyBtdWx0aXBseSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY0NCBtdWx0aXBseSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY0NSBtdWx0aXBseSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY0NiBtdWx0aXBseSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY0NyBtdWx0aXBseSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY0OCBtdWx0aXBseSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY0OSBtdWx0aXBseSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY1MCBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY1MSBtdWx0aXBseSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY1MiBtdWx0aXBseSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY1MyBtdWx0aXBseSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY1NCBtdWx0aXBseSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY1NSBtdWx0aXBseSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY1NiBtdWx0aXBseSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY1NyBtdWx0aXBseSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY1OCBtdWx0aXBseSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY1OSBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFtdWw2NjEgbXVsdGlwbHkgIE5hTjkgLUluZiAgIC0+ICBOYU45DQotZHFtdWw2NjIgbXVsdGlwbHkgIE5hTjggIDk5OSAgIC0+ICBOYU44DQotZHFtdWw2NjMgbXVsdGlwbHkgIE5hTjcxIEluZiAgIC0+ICBOYU43MQ0KLWRxbXVsNjY0IG11bHRpcGx5ICBOYU42ICBOYU41ICAtPiAgTmFONg0KLWRxbXVsNjY1IG11bHRpcGx5IC1JbmYgICBOYU40ICAtPiAgTmFONA0KLWRxbXVsNjY2IG11bHRpcGx5IC05OTkgICBOYU4zMyAtPiAgTmFOMzMNCi1kcW11bDY2NyBtdWx0aXBseSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCi0NCi1kcW11bDY3MSBtdWx0aXBseSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NzIgbXVsdGlwbHkgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjczIG11bHRpcGx5ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY3NCBtdWx0aXBseSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NzUgbXVsdGlwbHkgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjc2IG11bHRpcGx5IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY3NyBtdWx0aXBseSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NzggbXVsdGlwbHkgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjc5IG11bHRpcGx5ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcW11bDY4MSBtdWx0aXBseSAtTmFOOSAtSW5mICAgLT4gLU5hTjkNCi1kcW11bDY4MiBtdWx0aXBseSAtTmFOOCAgOTk5ICAgLT4gLU5hTjgNCi1kcW11bDY4MyBtdWx0aXBseSAtTmFONzEgSW5mICAgLT4gLU5hTjcxDQotZHFtdWw2ODQgbXVsdGlwbHkgLU5hTjYgLU5hTjUgIC0+IC1OYU42DQotZHFtdWw2ODUgbXVsdGlwbHkgLUluZiAgLU5hTjQgIC0+IC1OYU40DQotZHFtdWw2ODYgbXVsdGlwbHkgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMw0KLWRxbXVsNjg3IG11bHRpcGx5ICBJbmYgIC1OYU4yICAtPiAtTmFOMg0KLQ0KLWRxbXVsNjkxIG11bHRpcGx5IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY5MiBtdWx0aXBseSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2OTMgbXVsdGlwbHkgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjk0IG11bHRpcGx5IC1zTmFOMTYgLXNOYU45NCAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY5NSBtdWx0aXBseSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2OTYgbXVsdGlwbHkgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjk3IG11bHRpcGx5ICAwODggICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY5OCBtdWx0aXBseSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2OTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxbXVsNzAxIG11bHRpcGx5IC1OYU4gIC1JbmYgICAtPiAtTmFODQotZHFtdWw3MDIgbXVsdGlwbHkgLU5hTiAgIDk5OSAgIC0+IC1OYU4NCi1kcW11bDcwMyBtdWx0aXBseSAtTmFOICAgSW5mICAgLT4gLU5hTg0KLWRxbXVsNzA0IG11bHRpcGx5IC1OYU4gIC1OYU4gICAtPiAtTmFODQotZHFtdWw3MDUgbXVsdGlwbHkgLUluZiAgLU5hTjAgIC0+IC1OYU4NCi1kcW11bDcwNiBtdWx0aXBseSAtOTk5ICAtTmFOICAgLT4gLU5hTg0KLWRxbXVsNzA3IG11bHRpcGx5ICBJbmYgIC1OYU4gICAtPiAtTmFODQotDQotZHFtdWw3MTEgbXVsdGlwbHkgLXNOYU4gICAtSW5mICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDcxMiBtdWx0aXBseSAtc05hTiAgIC0xMSAgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNzEzIG11bHRpcGx5IC1zTmFOMDAgIE5hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw3MTQgbXVsdGlwbHkgLXNOYU4gICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDcxNSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNzE2IG11bHRpcGx5IC1JbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw3MTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDcxOCBtdWx0aXBseSAgSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNzE5IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzDQotLS0gc2lnbnMNCi1kcW11bDc1MSBtdWx0aXBseSAgMWUrNDI3NyAgMWUrMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw3NTIgbXVsdGlwbHkgIDFlKzQyNzcgLTFlKzMzMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxbXVsNzUzIG11bHRpcGx5IC0xZSs0Mjc3ICAxZSszMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDc1NCBtdWx0aXBseSAtMWUrNDI3NyAtMWUrMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw3NTUgbXVsdGlwbHkgIDFlLTQyNzcgIDFlLTMzMTEgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxbXVsNzU2IG11bHRpcGx5ICAxZS00Mjc3IC0xZS0zMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcW11bDc1NyBtdWx0aXBseSAtMWUtNDI3NyAgMWUtMzMxMSAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFtdWw3NTggbXVsdGlwbHkgLTFlLTQyNzcgLTFlLTMzMTEgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KLWRxbXVsNzYwIG11bHRpcGx5IDFlLTYwNjkgMWUtMTAxIC0+IDFFLTYxNzAgU3Vibm9ybWFsDQotZHFtdWw3NjEgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDIgLT4gMUUtNjE3MSBTdWJub3JtYWwNCi1kcW11bDc2MiBtdWx0aXBseSAxZS02MDY5IDFlLTEwMyAtPiAxRS02MTcyIFN1Ym5vcm1hbA0KLWRxbXVsNzYzIG11bHRpcGx5IDFlLTYwNjkgMWUtMTA0IC0+IDFFLTYxNzMgU3Vibm9ybWFsDQotZHFtdWw3NjQgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDUgLT4gMUUtNjE3NCBTdWJub3JtYWwNCi1kcW11bDc2NSBtdWx0aXBseSAxZS02MDY5IDFlLTEwNiAtPiAxRS02MTc1IFN1Ym5vcm1hbA0KLWRxbXVsNzY2IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA3IC0+IDFFLTYxNzYgU3Vibm9ybWFsDQotZHFtdWw3NjcgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDggLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFtdWw3NjggbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFtdWw3NjkgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMTAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQ0KLWRxbXVsNzcwIG11bHRpcGx5IDFlKzQwIDFlKzYxMDEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgQ2xhbXBlZA0KLWRxbXVsNzcxIG11bHRpcGx5IDFlKzQwIDFlKzYxMDIgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyICBDbGFtcGVkDQotZHFtdWw3NzIgbXVsdGlwbHkgMWUrNDAgMWUrNjEwMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICBDbGFtcGVkDQotZHFtdWw3NzMgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZA0KLWRxbXVsNzc0IG11bHRpcGx5IDFlKzQwIDFlKzYxMDUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw3NzUgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDc3NiBtdWx0aXBseSAxZSs0MCAxZSs2MTA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxbXVsNzc3IG11bHRpcGx5IDFlKzQwIDFlKzYxMDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw3NzggbXVsdGlwbHkgMWUrNDAgMWUrNjEwOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDc3OSBtdWx0aXBseSAxZSs0MCAxZSs2MTEwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxbXVsODAxIG11bHRpcGx5ICAxLjAwMDBFLTYxNzIgIDEgICAgIC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwNCi1kcW11bDgwMiBtdWx0aXBseSAgMS4wMDBFLTYxNzIgICAxZS0xICAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsDQotZHFtdWw4MDMgbXVsdGlwbHkgIDEuMDBFLTYxNzIgICAgMWUtMiAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbA0KLWRxbXVsODA0IG11bHRpcGx5ICAxLjBFLTYxNzIgICAgIDFlLTMgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwNCi1kcW11bDgwNSBtdWx0aXBseSAgMS4wRS02MTcyICAgICAxZS00ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRxbXVsODA2IG11bHRpcGx5ICAxLjNFLTYxNzIgICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MDcgbXVsdGlwbHkgIDEuNUUtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgwOCBtdWx0aXBseSAgMS43RS02MTcyICAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsODA5IG11bHRpcGx5ICAyLjNFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MTAgbXVsdGlwbHkgIDIuNUUtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgxMSBtdWx0aXBseSAgMi43RS02MTcyICAgICAxZS00ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsODEyIG11bHRpcGx5ICAxLjQ5RS02MTcyICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MTMgbXVsdGlwbHkgIDEuNTBFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgxNCBtdWx0aXBseSAgMS41MUUtNjE3MiAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsODE1IG11bHRpcGx5ICAyLjQ5RS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MTYgbXVsdGlwbHkgIDIuNTBFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgxNyBtdWx0aXBseSAgMi41MUUtNjE3MiAgICAxZS00ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxbXVsODE4IG11bHRpcGx5ICAxRS02MTcyICAgICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbA0KLWRxbXVsODE5IG11bHRpcGx5ICAzRS02MTcyICAgICAgIDFlLTUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcW11bDgyMCBtdWx0aXBseSAgNUUtNjE3MiAgICAgICAxZS01ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFtdWw4MjEgbXVsdGlwbHkgIDdFLTYxNzIgICAgICAgMWUtNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgyMiBtdWx0aXBseSAgOUUtNjE3MiAgICAgICAxZS01ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsODIzIG11bHRpcGx5ICA5LjlFLTYxNzIgICAgIDFlLTUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZHFtdWw4MjQgbXVsdGlwbHkgIDFFLTYxNzIgICAgICAtMWUtNCAgLT4gLTFFLTYxNzYgICAgU3Vibm9ybWFsDQotZHFtdWw4MjUgbXVsdGlwbHkgIDNFLTYxNzIgICAgICAtMWUtNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxbXVsODI2IG11bHRpcGx5IC01RS02MTcyICAgICAgIDFlLTUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcW11bDgyNyBtdWx0aXBseSAgN0UtNjE3MiAgICAgIC0xZS01ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsODI4IG11bHRpcGx5IC05RS02MTcyICAgICAgIDFlLTUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MjkgbXVsdGlwbHkgIDkuOUUtNjE3MiAgICAtMWUtNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgzMCBtdWx0aXBseSAgMy4wRS02MTcyICAgIC0xZS01ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotZHFtdWw4MzEgbXVsdGlwbHkgIDEuMEUtNTk3NyAgICAgMWUtMjAwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxbXVsODMyIG11bHRpcGx5ICAxLjBFLTU5NzcgICAgIDFlLTE5OSAtPiAxRS02MTc2ICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFtdWw4MzMgbXVsdGlwbHkgIDEuMEUtNTk3NyAgICAgMWUtMTk4IC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwNCi1kcW11bDgzNCBtdWx0aXBseSAgMi4wRS01OTc3ICAgICAyZS0xOTggLT4gNC4wRS02MTc1ICAgIFN1Ym5vcm1hbA0KLWRxbXVsODM1IG11bHRpcGx5ICA0LjBFLTU5NzcgICAgIDRlLTE5OCAtPiAxLjYwRS02MTc0ICAgU3Vibm9ybWFsDQotZHFtdWw4MzYgbXVsdGlwbHkgMTAuMEUtNTk3NyAgICAxMGUtMTk4IC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwNCi1kcW11bDgzNyBtdWx0aXBseSAzMC4wRS01OTc3ICAgIDMwZS0xOTggLT4gOS4wMDBFLTYxNzMgIFN1Ym5vcm1hbA0KLWRxbXVsODM4IG11bHRpcGx5IDQwLjBFLTU5ODIgICAgNDBlLTE2NiAtPiAxLjYwMDBFLTYxNDUgU3Vibm9ybWFsDQotZHFtdWw4MzkgbXVsdGlwbHkgNDAuMEUtNTk4MiAgICA0MGUtMTY1IC0+IDEuNjAwMEUtNjE0NCBTdWJub3JtYWwNCi1kcW11bDg0MCBtdWx0aXBseSA0MC4wRS01OTgyICAgIDQwZS0xNjQgLT4gMS42MDAwRS02MTQzDQotDQotLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoDQotZHFtdWw4NzAgbXVsdGlwbHkgMTAwICA5Ljk5OUUrNjE0MyAgICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWRxbXVsODcxIG11bHRpcGx5IDEwMCAtOS45OTlFKzYxNDMgICAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1kcW11bDg3MiBtdWx0aXBseSAgICAgIDkuOTk5RSs2MTQzIDEwMCAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZHFtdWw4NzMgbXVsdGlwbHkgICAgIC05Ljk5OUUrNjE0MyAxMDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLQ0KLS0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQotZHFtdWw4ODEgbXVsdGlwbHkgIDEuMjM0N0UtNjEzMyAxLjIzNDdFLTQwICAtPiAgMS41MjRFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcW11bDg4MiBtdWx0aXBseSAgMS4yMzRFLTYxMzMgMS4yMzRFLTQwICAgIC0+ICAxLjUyM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxbXVsODgzIG11bHRpcGx5ICAxLjIzRS02MTMzICAxLjIzRS00MCAgICAgLT4gIDEuNTEzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFtdWw4ODQgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDAgICAgICAtPiAgMS40NEUtNjE3MyAgU3Vibm9ybWFsDQotZHFtdWw4ODUgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDEgICAgICAtPiAgMS40NEUtNjE3NCAgU3Vibm9ybWFsDQotZHFtdWw4ODYgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDIgICAgICAtPiAgMS40RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kcW11bDg4NyBtdWx0aXBseSAgMS4yRS02MTMzICAgMS4zRS00MiAgICAgIC0+ICAxLjZFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWRxbXVsODg4IG11bHRpcGx5ICAxLjNFLTYxMzMgICAxLjNFLTQyICAgICAgLT4gIDEuN0UtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZHFtdWw4ODkgbXVsdGlwbHkgIDEuM0UtNjEzMyAgIDEuM0UtNDMgICAgICAtPiAgICAyRS02MTc2ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kcW11bDg5MCBtdWx0aXBseSAgMS4zRS02MTM0ICAgMS4zRS00MyAgICAgIC0+ICAgIDBFLTYxNzYgICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotDQotZHFtdWw4OTEgbXVsdGlwbHkgIDEuMjM0NUUtMzkgICAgMS4yMzRFLTYxMzMgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxbXVsODkyIG11bHRpcGx5ICAxLjIzNDU2RS0zOSAgIDEuMjM0RS02MTMzIC0+ICAxLjUyMzRFLTYxNzIgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcW11bDg5MyBtdWx0aXBseSAgMS4yMzQ1RS00MCAgIDEuMjM0RS02MTMzIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcW11bDg5NCBtdWx0aXBseSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS02MTMzIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcW11bDg5NSBtdWx0aXBseSAgMS4yMzQ1RS00MSAgIDEuMjM0RS02MTMzIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcW11bDg5NiBtdWx0aXBseSAgMS4yMzQ1NkUtNDEgIDEuMjM0RS02MTMzIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi0NCi0tLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93DQotLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0DQotZHFtdWw5MDYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAxICAgICAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0Mw0KLWRxbXVsOTA3IG11bHRpcGx5ICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4NCi1kcW11bDkwOCBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotDQotLS0gaHVnZXN0DQotZHFtdWw5MDkgbXVsdGlwbHkgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2NyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBWRyBjYXNlDQotZHFtdWw5MTAgbXVsdGlwbHkgOC44MTEyNTAwMDAwMDAwMTM0OTQzNkUtMTU0OCA4LjAwMDAwMDAwMDAwMDAwMDAwMEUtMTU1MCAtPiA3LjA0OTAwMDAwMDAwMDAxMDc5NTQ4ODAwMDAwMDAwMDAwMEUtMzA5NyBSb3VuZGVkDQotDQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQotcHJlY2lzaW9uOiAgIDM0DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLWRxbXVsOTExICBtdWx0aXBseSAxMzBFLTIgIDEyMEUtMiAtPiAxLjU2MDANCi1kcW11bDkxMiAgbXVsdGlwbHkgMTMwRS0yICAxMkUtMSAgLT4gMS41NjANCi1kcW11bDkxMyAgbXVsdGlwbHkgMTMwRS0yICAxRTAgICAgLT4gMS4zMA0KLWRxbXVsOTE0ICBtdWx0aXBseSAxRTIgICAgIDFFNCAgICAtPiAxRSs2DQotDQotLS0gcG93ZXItb2YtdGVuIGVkZ2UgY2FzZXMNCi1kcW11bDEwMDEgbXVsdGlwbHkgIDEgICAgICAxMCAgICAgICAgICAgICAgIC0+IDEwDQotZHFtdWwxMDAyIG11bHRpcGx5ICAxICAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDANCi1kcW11bDEwMDMgbXVsdGlwbHkgIDEgICAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDANCi1kcW11bDEwMDQgbXVsdGlwbHkgIDEgICAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwDQotZHFtdWwxMDA1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDANCi1kcW11bDEwMDYgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDANCi1kcW11bDEwMDcgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwDQotZHFtdWwxMDA4IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDANCi1kcW11bDEwMDkgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDANCi1kcW11bDEwMTAgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwDQotZHFtdWwxMDExIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDANCi1kcW11bDEwMTIgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDANCi1kcW11bDEwMTMgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDE0IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwMTUgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDANCi0NCi1kcW11bDEwMTYgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwMTcgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDE4IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDE5IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwMjAgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0NCi1kcW11bDEwMjEgbXVsdGlwbHkgIDEwICAgICAxICAgICAgICAgICAgICAgIC0+IDEwDQotZHFtdWwxMDIyIG11bHRpcGx5ICAxMCAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDANCi1kcW11bDEwMjMgbXVsdGlwbHkgIDEwICAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDANCi1kcW11bDEwMjQgbXVsdGlwbHkgIDEwICAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwDQotZHFtdWwxMDI1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDANCi1kcW11bDEwMjYgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDANCi1kcW11bDEwMjcgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwDQotZHFtdWwxMDI4IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDANCi1kcW11bDEwMjkgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDANCi1kcW11bDEwMzAgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwDQotZHFtdWwxMDMxIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDANCi1kcW11bDEwMzIgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDANCi1kcW11bDEwMzMgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDM0IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwMzUgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAgIC0+IDEwMDAwMDAwMDAwMDAwMDANCi0NCi1kcW11bDEwMzYgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTAzNyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTAzOCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDM5IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA0MCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotZHFtdWwxMDQxIG11bHRpcGx5ICAxMDAgICAgMC4xICAgICAgICAgICAgICAtPiAxMC4wDQotZHFtdWwxMDQyIG11bHRpcGx5ICAxMDAgICAgMSAgICAgICAgICAgICAgICAtPiAxMDANCi1kcW11bDEwNDMgbXVsdGlwbHkgIDEwMCAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDANCi1kcW11bDEwNDQgbXVsdGlwbHkgIDEwMCAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwDQotZHFtdWwxMDQ1IG11bHRpcGx5ICAxMDAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDANCi1kcW11bDEwNDYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDANCi1kcW11bDEwNDcgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwDQotZHFtdWwxMDQ4IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDANCi1kcW11bDEwNDkgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDANCi1kcW11bDEwNTAgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwDQotZHFtdWwxMDUxIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDANCi1kcW11bDEwNTIgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDANCi1kcW11bDEwNTMgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDU0IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwNTUgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMDANCi0NCi1kcW11bDEwNTYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDU3IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwNTggbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDU5IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDYwIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLWRxbXVsMTA2MSBtdWx0aXBseSAgMTAwMCAgIDAuMDEgICAgICAgICAgICAgLT4gMTAuMDANCi1kcW11bDEwNjIgbXVsdGlwbHkgIDEwMDAgICAwLjEgICAgICAgICAgICAgIC0+IDEwMC4wDQotZHFtdWwxMDYzIG11bHRpcGx5ICAxMDAwICAgMSAgICAgICAgICAgICAgICAtPiAxMDAwDQotZHFtdWwxMDY0IG11bHRpcGx5ICAxMDAwICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwMA0KLWRxbXVsMTA2NSBtdWx0aXBseSAgMTAwMCAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwDQotZHFtdWwxMDY2IG11bHRpcGx5ICAxMDAwICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAwDQotZHFtdWwxMDY3IG11bHRpcGx5ICAxMDAwICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwMA0KLWRxbXVsMTA2OCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwDQotZHFtdWwxMDY5IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAwDQotZHFtdWwxMDcwIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwMA0KLWRxbXVsMTA3MSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwDQotZHFtdWwxMDcyIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwDQotZHFtdWwxMDczIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA3NCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDc1IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDAwDQotDQotZHFtdWwxMDc2IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDc3IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA3OCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA3OSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDgwIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotZHFtdWwxMDgxIG11bHRpcGx5ICAxMDAwMCAgMC4wMDEgICAgICAgICAgICAtPiAxMC4wMDANCi1kcW11bDEwODIgbXVsdGlwbHkgIDEwMDAwICAwLjAxICAgICAgICAgICAgIC0+IDEwMC4wMA0KLWRxbXVsMTA4MyBtdWx0aXBseSAgMTAwMDAgIDAuMSAgICAgICAgICAgICAgLT4gMTAwMC4wDQotZHFtdWwxMDg0IG11bHRpcGx5ICAxMDAwMCAgMSAgICAgICAgICAgICAgICAtPiAxMDAwMA0KLWRxbXVsMTA4NSBtdWx0aXBseSAgMTAwMDAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDAwDQotZHFtdWwxMDg2IG11bHRpcGx5ICAxMDAwMCAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMDAwDQotZHFtdWwxMDg3IG11bHRpcGx5ICAxMDAwMCAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAwMA0KLWRxbXVsMTA4OCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDAwDQotZHFtdWwxMDg5IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMDAwDQotZHFtdWwxMDkwIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAwMA0KLWRxbXVsMTA5MSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDAwDQotZHFtdWwxMDkyIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAwDQotZHFtdWwxMDkzIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA5NCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDk1IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwDQotDQotZHFtdWwxMDk2IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwOTcgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwOTggbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA5OSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDExMDAgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLWRxbXVsMTEwNyBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMA0KLWRxbXVsMTEwOCBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcW11bDk5OTAgbXVsdGlwbHkgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw5OTkxIG11bHRpcGx5ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFNdWx0aXBseS5kZWNUZXN0IC0tIGRlY1F1YWQgbXVsdGlwbGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY1F1YWRzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjUXVhZAorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFtdWwwMDAgbXVsdGlwbHkgMiAgICAgIDIgLT4gNAorZHFtdWwwMDEgbXVsdGlwbHkgMiAgICAgIDMgLT4gNgorZHFtdWwwMDIgbXVsdGlwbHkgNSAgICAgIDEgLT4gNQorZHFtdWwwMDMgbXVsdGlwbHkgNSAgICAgIDIgLT4gMTAKK2RxbXVsMDA0IG11bHRpcGx5IDEuMjAgICAyIC0+IDIuNDAKK2RxbXVsMDA1IG11bHRpcGx5IDEuMjAgICAwIC0+IDAuMDAKK2RxbXVsMDA2IG11bHRpcGx5IDEuMjAgIC0yIC0+IC0yLjQwCitkcW11bDAwNyBtdWx0aXBseSAtMS4yMCAgMiAtPiAtMi40MAorZHFtdWwwMDggbXVsdGlwbHkgLTEuMjAgIDAgLT4gLTAuMDAKK2RxbXVsMDA5IG11bHRpcGx5IC0xLjIwIC0yIC0+IDIuNDAKK2RxbXVsMDEwIG11bHRpcGx5IDUuMDkgNy4xIC0+IDM2LjEzOQorZHFtdWwwMTEgbXVsdGlwbHkgMi41ICAgIDQgLT4gMTAuMAorZHFtdWwwMTIgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDAKK2RxbXVsMDEzIG11bHRpcGx5IDEuMjM0NTY3ODkgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEuMjM0NTY3ODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQKK2RxbXVsMDE1IG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwCitkcW11bDAxNiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcW11bDAxNyBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcW11bDAxOCBtdWx0aXBseSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcW11bDAxOSBtdWx0aXBseSAtOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHplcm9zLCBldGMuCitkcW11bDAyMSBtdWx0aXBseSAgMCAgICAgIDAgICAgIC0+ICAwCitkcW11bDAyMiBtdWx0aXBseSAgMCAgICAgLTAgICAgIC0+IC0wCitkcW11bDAyMyBtdWx0aXBseSAtMCAgICAgIDAgICAgIC0+IC0wCitkcW11bDAyNCBtdWx0aXBseSAtMCAgICAgLTAgICAgIC0+ICAwCitkcW11bDAyNSBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkcW11bDAyNiBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkcW11bDAyNyBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkcW11bDAyOCBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkcW11bDAzMCBtdWx0aXBseSAgNS4wMCAgIDFFLTMgIC0+ICAwLjAwNTAwCitkcW11bDAzMSBtdWx0aXBseSAgMDAuMDAgIDAuMDAwIC0+ICAwLjAwMDAwCitkcW11bDAzMiBtdWx0aXBseSAgMDAuMDAgIDBFLTMgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFtdWwwMzMgbXVsdGlwbHkgIDBFLTMgICAwMC4wMCAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RxbXVsMDM0IG11bHRpcGx5IC01LjAwICAgMUUtMyAgLT4gLTAuMDA1MDAKK2RxbXVsMDM1IG11bHRpcGx5IC0wMC4wMCAgMC4wMDAgLT4gLTAuMDAwMDAKK2RxbXVsMDM2IG11bHRpcGx5IC0wMC4wMCAgMEUtMyAgLT4gLTAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkcW11bDAzNyBtdWx0aXBseSAtMEUtMyAgIDAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZHFtdWwwMzggbXVsdGlwbHkgIDUuMDAgIC0xRS0zICAtPiAtMC4wMDUwMAorZHFtdWwwMzkgbXVsdGlwbHkgIDAwLjAwIC0wLjAwMCAtPiAtMC4wMDAwMAorZHFtdWwwNDAgbXVsdGlwbHkgIDAwLjAwIC0wRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxbXVsMDQxIG11bHRpcGx5ICAwRS0zICAtMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkcW11bDA0MiBtdWx0aXBseSAtNS4wMCAgLTFFLTMgIC0+ICAwLjAwNTAwCitkcW11bDA0MyBtdWx0aXBseSAtMDAuMDAgLTAuMDAwIC0+ICAwLjAwMDAwCitkcW11bDA0NCBtdWx0aXBseSAtMDAuMDAgLTBFLTMgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFtdWwwNDUgbXVsdGlwbHkgLTBFLTMgIC0wMC4wMCAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZHFtdWwwNTAgbXVsdGlwbHkgMS4yMCAzICAgICAgICAtPiAzLjYwCitkcW11bDA1MSBtdWx0aXBseSA3ICAgIDMgICAgICAgIC0+IDIxCitkcW11bDA1MiBtdWx0aXBseSAwLjkgIDAuOCAgICAgIC0+IDAuNzIKK2RxbXVsMDUzIG11bHRpcGx5IDAuOSAgLTAgICAgICAgLT4gLTAuMAorZHFtdWwwNTQgbXVsdGlwbHkgNjU0MzIxIDY1NDMyMSAtPiA0MjgxMzU5NzEwNDEKKworZHFtdWwwNjAgbXVsdGlwbHkgMTIzLjQ1IDFlNyAgLT4gIDEuMjM0NUUrOQorZHFtdWwwNjEgbXVsdGlwbHkgMTIzLjQ1IDFlOCAgLT4gIDEuMjM0NUUrMTAKK2RxbXVsMDYyIG11bHRpcGx5IDEyMy40NSAxZSs5IC0+ICAxLjIzNDVFKzExCitkcW11bDA2MyBtdWx0aXBseSAxMjMuNDUgMWUxMCAtPiAgMS4yMzQ1RSsxMgorZHFtdWwwNjQgbXVsdGlwbHkgMTIzLjQ1IDFlMTEgLT4gIDEuMjM0NUUrMTMKK2RxbXVsMDY1IG11bHRpcGx5IDEyMy40NSAxZTEyIC0+ICAxLjIzNDVFKzE0CitkcW11bDA2NiBtdWx0aXBseSAxMjMuNDUgMWUxMyAtPiAgMS4yMzQ1RSsxNQorCisKKy0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3RocworLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RxbXVsMDgwIG11bHRpcGx5IDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAtPiAxMjMwMTIzNDU2NDU2NzguOQorZHFtdWwwODQgbXVsdGlwbHkgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkcW11bDA5MCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RxbXVsMDk0IG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQorCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzCitkcW11bDEwMSBtdWx0aXBseSA5IDkgICAtPiA4MQorZHFtdWwxMDIgbXVsdGlwbHkgOSA5MCAgIC0+IDgxMAorZHFtdWwxMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwCitkcW11bDEwNCBtdWx0aXBseSA5IDkwMDAgICAtPiA4MTAwMAorZHFtdWwxMDUgbXVsdGlwbHkgOSA5MDAwMCAgIC0+IDgxMDAwMAorZHFtdWwxMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwCitkcW11bDEwNyBtdWx0aXBseSA5IDkwMDAwMDAgICAtPiA4MTAwMDAwMAorZHFtdWwxMDggbXVsdGlwbHkgOSA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMAorZHFtdWwxMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwCitkcW11bDExMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMAorZHFtdWwxMTEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMAorZHFtdWwxMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwCitkcW11bDExMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMAorZHFtdWwxMTQgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMAorZHFtdWwxMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTE2IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTE3IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAKKy0tZHFtdWwxMTggbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTE5IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTIwIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZHFtdWwxMjEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTIyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTIzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzCitkcW11bDEzMSBtdWx0aXBseSAzIDMgICAtPiA5CitkcW11bDEzMiBtdWx0aXBseSAzIDMwICAgLT4gOTAKK2RxbXVsMTMzIG11bHRpcGx5IDMgMzAwICAgLT4gOTAwCitkcW11bDEzNCBtdWx0aXBseSAzIDMwMDAgICAtPiA5MDAwCitkcW11bDEzNSBtdWx0aXBseSAzIDMwMDAwICAgLT4gOTAwMDAKK2RxbXVsMTM2IG11bHRpcGx5IDMgMzAwMDAwICAgLT4gOTAwMDAwCitkcW11bDEzNyBtdWx0aXBseSAzIDMwMDAwMDAgICAtPiA5MDAwMDAwCitkcW11bDEzOCBtdWx0aXBseSAzIDMwMDAwMDAwICAgLT4gOTAwMDAwMDAKK2RxbXVsMTM5IG11bHRpcGx5IDMgMzAwMDAwMDAwICAgLT4gOTAwMDAwMDAwCitkcW11bDE0MCBtdWx0aXBseSAzIDMwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwCitkcW11bDE0MSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAKK2RxbXVsMTQyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwCitkcW11bDE0MyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwCitkcW11bDE0NCBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAKK2RxbXVsMTQ1IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwCitkcW11bDE0NiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwCitkcW11bDE0NyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTQ4IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDE0OSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDE1MCBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTUxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDE1MiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDE1MyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwyNjMgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyODI5NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZworZHFtdWwzMDEgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwMiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDMgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDQgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwNSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDYgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDcgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwOCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDkgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTAgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxMSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTIgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTMgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxNCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTUgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTYgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxNyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIFJvdW5kZWQKK2RxbXVsMzE4IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQKK2RxbXVsMzE5IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2ICBSb3VuZGVkCitkcW11bDMyMCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgIFJvdW5kZWQKK2RxbXVsMzIxIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzggIFJvdW5kZWQKK2RxbXVsMzIyIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM5ICBSb3VuZGVkCitkcW11bDMyMyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNDAgIFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK2RxbXVsNTA0ICBtdWx0aXBseSAgMEUtNDI2MCAxMDAwRS00MjYwICAtPiAwRS02MTc2IENsYW1wZWQKK2RxbXVsNTA1ICBtdWx0aXBseSAgMTAwRSs0MjYwIDBFKzQyNjAgICAtPiAwRSs2MTExIENsYW1wZWQKKworLS0gbWl4ZWQgd2l0aCB6ZXJvcworZHFtdWw1NDEgbXVsdGlwbHkgIDAgICAgLTEgICAgIC0+IC0wCitkcW11bDU0MiBtdWx0aXBseSAtMCAgICAtMSAgICAgLT4gIDAKK2RxbXVsNTQzIG11bHRpcGx5ICAwICAgICAxICAgICAtPiAgMAorZHFtdWw1NDQgbXVsdGlwbHkgLTAgICAgIDEgICAgIC0+IC0wCitkcW11bDU0NSBtdWx0aXBseSAtMSAgICAgMCAgICAgLT4gLTAKK2RxbXVsNTQ2IG11bHRpcGx5IC0xICAgIC0wICAgICAtPiAgMAorZHFtdWw1NDcgbXVsdGlwbHkgIDEgICAgIDAgICAgIC0+ICAwCitkcW11bDU0OCBtdWx0aXBseSAgMSAgICAtMCAgICAgLT4gLTAKKworZHFtdWw1NTEgbXVsdGlwbHkgIDAuMCAgLTEgICAgIC0+IC0wLjAKK2RxbXVsNTUyIG11bHRpcGx5IC0wLjAgIC0xICAgICAtPiAgMC4wCitkcW11bDU1MyBtdWx0aXBseSAgMC4wICAgMSAgICAgLT4gIDAuMAorZHFtdWw1NTQgbXVsdGlwbHkgLTAuMCAgIDEgICAgIC0+IC0wLjAKK2RxbXVsNTU1IG11bHRpcGx5IC0xLjAgICAwICAgICAtPiAtMC4wCitkcW11bDU1NiBtdWx0aXBseSAtMS4wICAtMCAgICAgLT4gIDAuMAorZHFtdWw1NTcgbXVsdGlwbHkgIDEuMCAgIDAgICAgIC0+ICAwLjAKK2RxbXVsNTU4IG11bHRpcGx5ICAxLjAgIC0wICAgICAtPiAtMC4wCisKK2RxbXVsNTYxIG11bHRpcGx5ICAwICAgIC0xLjAgICAtPiAtMC4wCitkcW11bDU2MiBtdWx0aXBseSAtMCAgICAtMS4wICAgLT4gIDAuMAorZHFtdWw1NjMgbXVsdGlwbHkgIDAgICAgIDEuMCAgIC0+ICAwLjAKK2RxbXVsNTY0IG11bHRpcGx5IC0wICAgICAxLjAgICAtPiAtMC4wCitkcW11bDU2NSBtdWx0aXBseSAtMSAgICAgMC4wICAgLT4gLTAuMAorZHFtdWw1NjYgbXVsdGlwbHkgLTEgICAgLTAuMCAgIC0+ICAwLjAKK2RxbXVsNTY3IG11bHRpcGx5ICAxICAgICAwLjAgICAtPiAgMC4wCitkcW11bDU2OCBtdWx0aXBseSAgMSAgICAtMC4wICAgLT4gLTAuMAorCitkcW11bDU3MSBtdWx0aXBseSAgMC4wICAtMS4wICAgLT4gLTAuMDAKK2RxbXVsNTcyIG11bHRpcGx5IC0wLjAgIC0xLjAgICAtPiAgMC4wMAorZHFtdWw1NzMgbXVsdGlwbHkgIDAuMCAgIDEuMCAgIC0+ICAwLjAwCitkcW11bDU3NCBtdWx0aXBseSAtMC4wICAgMS4wICAgLT4gLTAuMDAKK2RxbXVsNTc1IG11bHRpcGx5IC0xLjAgICAwLjAgICAtPiAtMC4wMAorZHFtdWw1NzYgbXVsdGlwbHkgLTEuMCAgLTAuMCAgIC0+ICAwLjAwCitkcW11bDU3NyBtdWx0aXBseSAgMS4wICAgMC4wICAgLT4gIDAuMDAKK2RxbXVsNTc4IG11bHRpcGx5ICAxLjAgIC0wLjAgICAtPiAtMC4wMAorCisKKy0tIFNwZWNpYWxzCitkcW11bDU4MCBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW11bDU4MSBtdWx0aXBseSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcW11bDU4MiBtdWx0aXBseSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcW11bDU4MyBtdWx0aXBseSAgSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNTg0IG11bHRpcGx5ICBJbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw1ODUgbXVsdGlwbHkgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHFtdWw1ODYgbXVsdGlwbHkgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFtdWw1ODcgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtdWw1ODggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw1ODkgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw1OTAgbXVsdGlwbHkgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw1OTEgbXVsdGlwbHkgLTAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDU5MiBtdWx0aXBseSAgMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNTkzIG11bHRpcGx5ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXVsNTk0IG11bHRpcGx5ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXVsNTk1IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFtdWw2MDAgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFtdWw2MDEgbXVsdGlwbHkgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZHFtdWw2MDIgbXVsdGlwbHkgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFtdWw2MDMgbXVsdGlwbHkgLUluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDYwNCBtdWx0aXBseSAtSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjA1IG11bHRpcGx5IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RxbXVsNjA2IG11bHRpcGx5IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxbXVsNjA3IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbXVsNjA4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbXVsNjA5IG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RxbXVsNjEwIG11bHRpcGx5IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RxbXVsNjExIG11bHRpcGx5IC0wICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2MTIgbXVsdGlwbHkgIDAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDYxMyBtdWx0aXBseSAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW11bDYxNCBtdWx0aXBseSAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcW11bDYxNSBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CisKK2RxbXVsNjIxIG11bHRpcGx5ICBOYU4gLUluZiAgICAtPiAgTmFOCitkcW11bDYyMiBtdWx0aXBseSAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFtdWw2MjMgbXVsdGlwbHkgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxbXVsNjI0IG11bHRpcGx5ICBOYU4gLTAgICAgICAtPiAgTmFOCitkcW11bDYyNSBtdWx0aXBseSAgTmFOICAwICAgICAgLT4gIE5hTgorZHFtdWw2MjYgbXVsdGlwbHkgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxbXVsNjI3IG11bHRpcGx5ICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcW11bDYyOCBtdWx0aXBseSAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFtdWw2MjkgbXVsdGlwbHkgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjMwIG11bHRpcGx5IC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcW11bDYzMSBtdWx0aXBseSAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFtdWw2MzIgbXVsdGlwbHkgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjMzIG11bHRpcGx5IC0wICAgIE5hTiAgICAtPiAgTmFOCitkcW11bDYzNCBtdWx0aXBseSAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFtdWw2MzUgbXVsdGlwbHkgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjM2IG11bHRpcGx5ICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcW11bDYzNyBtdWx0aXBseSAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcW11bDY0MSBtdWx0aXBseSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQyIG11bHRpcGx5ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDMgbXVsdGlwbHkgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY0NCBtdWx0aXBseSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQ1IG11bHRpcGx5ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDYgbXVsdGlwbHkgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY0NyBtdWx0aXBseSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQ4IG11bHRpcGx5ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDkgbXVsdGlwbHkgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1MCBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjUxIG11bHRpcGx5IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTIgbXVsdGlwbHkgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1MyBtdWx0aXBseSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjU0IG11bHRpcGx5IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTUgbXVsdGlwbHkgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1NiBtdWx0aXBseSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjU3IG11bHRpcGx5ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTggbXVsdGlwbHkgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1OSBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFtdWw2NjEgbXVsdGlwbHkgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkcW11bDY2MiBtdWx0aXBseSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgKK2RxbXVsNjYzIG11bHRpcGx5ICBOYU43MSBJbmYgICAtPiAgTmFONzEKK2RxbXVsNjY0IG11bHRpcGx5ICBOYU42ICBOYU41ICAtPiAgTmFONgorZHFtdWw2NjUgbXVsdGlwbHkgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkcW11bDY2NiBtdWx0aXBseSAtOTk5ICAgTmFOMzMgLT4gIE5hTjMzCitkcW11bDY2NyBtdWx0aXBseSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKKworZHFtdWw2NzEgbXVsdGlwbHkgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzIgbXVsdGlwbHkgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzMgbXVsdGlwbHkgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzQgbXVsdGlwbHkgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzUgbXVsdGlwbHkgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzYgbXVsdGlwbHkgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzcgbXVsdGlwbHkgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzggbXVsdGlwbHkgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzkgbXVsdGlwbHkgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkcW11bDY4MSBtdWx0aXBseSAtTmFOOSAtSW5mICAgLT4gLU5hTjkKK2RxbXVsNjgyIG11bHRpcGx5IC1OYU44ICA5OTkgICAtPiAtTmFOOAorZHFtdWw2ODMgbXVsdGlwbHkgLU5hTjcxIEluZiAgIC0+IC1OYU43MQorZHFtdWw2ODQgbXVsdGlwbHkgLU5hTjYgLU5hTjUgIC0+IC1OYU42CitkcW11bDY4NSBtdWx0aXBseSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK2RxbXVsNjg2IG11bHRpcGx5IC05OTkgIC1OYU4zMyAtPiAtTmFOMzMKK2RxbXVsNjg3IG11bHRpcGx5ICBJbmYgIC1OYU4yICAtPiAtTmFOMgorCitkcW11bDY5MSBtdWx0aXBseSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5MiBtdWx0aXBseSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5MyBtdWx0aXBseSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5NCBtdWx0aXBseSAtc05hTjE2IC1zTmFOOTQgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5NSBtdWx0aXBseSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5NiBtdWx0aXBseSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5NyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOOTEgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5OCBtdWx0aXBseSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5OSBtdWx0aXBseSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RxbXVsNzAxIG11bHRpcGx5IC1OYU4gIC1JbmYgICAtPiAtTmFOCitkcW11bDcwMiBtdWx0aXBseSAtTmFOICAgOTk5ICAgLT4gLU5hTgorZHFtdWw3MDMgbXVsdGlwbHkgLU5hTiAgIEluZiAgIC0+IC1OYU4KK2RxbXVsNzA0IG11bHRpcGx5IC1OYU4gIC1OYU4gICAtPiAtTmFOCitkcW11bDcwNSBtdWx0aXBseSAtSW5mICAtTmFOMCAgLT4gLU5hTgorZHFtdWw3MDYgbXVsdGlwbHkgLTk5OSAgLU5hTiAgIC0+IC1OYU4KK2RxbXVsNzA3IG11bHRpcGx5ICBJbmYgIC1OYU4gICAtPiAtTmFOCisKK2RxbXVsNzExIG11bHRpcGx5IC1zTmFOICAgLUluZiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxMiBtdWx0aXBseSAtc05hTiAgIC0xMSAgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTMgbXVsdGlwbHkgLXNOYU4wMCAgTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNzE0IG11bHRpcGx5IC1zTmFOICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxNSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTYgbXVsdGlwbHkgLUluZiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNzE3IG11bHRpcGx5ICAwODggICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxOCBtdWx0aXBseSAgSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZHFtdWw3NTEgbXVsdGlwbHkgIDFlKzQyNzcgIDFlKzMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NTIgbXVsdGlwbHkgIDFlKzQyNzcgLTFlKzMzMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NTMgbXVsdGlwbHkgLTFlKzQyNzcgIDFlKzMzMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NTQgbXVsdGlwbHkgLTFlKzQyNzcgLTFlKzMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NTUgbXVsdGlwbHkgIDFlLTQyNzcgIDFlLTMzMTEgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw3NTYgbXVsdGlwbHkgIDFlLTQyNzcgLTFlLTMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw3NTcgbXVsdGlwbHkgLTFlLTQyNzcgIDFlLTMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw3NTggbXVsdGlwbHkgLTFlLTQyNzcgLTFlLTMzMTEgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykKK2RxbXVsNzYwIG11bHRpcGx5IDFlLTYwNjkgMWUtMTAxIC0+IDFFLTYxNzAgU3Vibm9ybWFsCitkcW11bDc2MSBtdWx0aXBseSAxZS02MDY5IDFlLTEwMiAtPiAxRS02MTcxIFN1Ym5vcm1hbAorZHFtdWw3NjIgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDMgLT4gMUUtNjE3MiBTdWJub3JtYWwKK2RxbXVsNzYzIG11bHRpcGx5IDFlLTYwNjkgMWUtMTA0IC0+IDFFLTYxNzMgU3Vibm9ybWFsCitkcW11bDc2NCBtdWx0aXBseSAxZS02MDY5IDFlLTEwNSAtPiAxRS02MTc0IFN1Ym5vcm1hbAorZHFtdWw3NjUgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDYgLT4gMUUtNjE3NSBTdWJub3JtYWwKK2RxbXVsNzY2IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA3IC0+IDFFLTYxNzYgU3Vibm9ybWFsCitkcW11bDc2NyBtdWx0aXBseSAxZS02MDY5IDFlLTEwOCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsNzY4IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA5IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw3NjkgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMTAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkcW11bDc3MCBtdWx0aXBseSAxZSs0MCAxZSs2MTAxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxIENsYW1wZWQKK2RxbXVsNzcxIG11bHRpcGx5IDFlKzQwIDFlKzYxMDIgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyICBDbGFtcGVkCitkcW11bDc3MiBtdWx0aXBseSAxZSs0MCAxZSs2MTAzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgIENsYW1wZWQKK2RxbXVsNzczIG11bHRpcGx5IDFlKzQwIDFlKzYxMDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKK2RxbXVsNzc0IG11bHRpcGx5IDFlKzQwIDFlKzYxMDUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc3NSBtdWx0aXBseSAxZSs0MCAxZSs2MTA2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NzYgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsNzc3IG11bHRpcGx5IDFlKzQwIDFlKzYxMDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc3OCBtdWx0aXBseSAxZSs0MCAxZSs2MTA5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NzkgbXVsdGlwbHkgMWUrNDAgMWUrNjExMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZHFtdWw4MDEgbXVsdGlwbHkgIDEuMDAwMEUtNjE3MiAgMSAgICAgLT4gMS4wMDAwRS02MTcyIFN1Ym5vcm1hbAorZHFtdWw4MDIgbXVsdGlwbHkgIDEuMDAwRS02MTcyICAgMWUtMSAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFtdWw4MDMgbXVsdGlwbHkgIDEuMDBFLTYxNzIgICAgMWUtMiAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbAorZHFtdWw4MDQgbXVsdGlwbHkgIDEuMEUtNjE3MiAgICAgMWUtMyAgLT4gMS4wRS02MTc1ICAgIFN1Ym5vcm1hbAorZHFtdWw4MDUgbXVsdGlwbHkgIDEuMEUtNjE3MiAgICAgMWUtNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxbXVsODA2IG11bHRpcGx5ICAxLjNFLTYxNzIgICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgwNyBtdWx0aXBseSAgMS41RS02MTcyICAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MDggbXVsdGlwbHkgIDEuN0UtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODA5IG11bHRpcGx5ICAyLjNFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxMCBtdWx0aXBseSAgMi41RS02MTcyICAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTEgbXVsdGlwbHkgIDIuN0UtNjE3MiAgICAgMWUtNCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODEyIG11bHRpcGx5ICAxLjQ5RS02MTcyICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxMyBtdWx0aXBseSAgMS41MEUtNjE3MiAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTQgbXVsdGlwbHkgIDEuNTFFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODE1IG11bHRpcGx5ICAyLjQ5RS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxNiBtdWx0aXBseSAgMi41MEUtNjE3MiAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTcgbXVsdGlwbHkgIDIuNTFFLTYxNzIgICAgMWUtNCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFtdWw4MTggbXVsdGlwbHkgIDFFLTYxNzIgICAgICAgMWUtNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsCitkcW11bDgxOSBtdWx0aXBseSAgM0UtNjE3MiAgICAgICAxZS01ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDgyMCBtdWx0aXBseSAgNUUtNjE3MiAgICAgICAxZS01ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDgyMSBtdWx0aXBseSAgN0UtNjE3MiAgICAgICAxZS01ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MjIgbXVsdGlwbHkgIDlFLTYxNzIgICAgICAgMWUtNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODIzIG11bHRpcGx5ICA5LjlFLTYxNzIgICAgIDFlLTUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxbXVsODI0IG11bHRpcGx5ICAxRS02MTcyICAgICAgLTFlLTQgIC0+IC0xRS02MTc2ICAgIFN1Ym5vcm1hbAorZHFtdWw4MjUgbXVsdGlwbHkgIDNFLTYxNzIgICAgICAtMWUtNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw4MjYgbXVsdGlwbHkgLTVFLTYxNzIgICAgICAgMWUtNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw4MjcgbXVsdGlwbHkgIDdFLTYxNzIgICAgICAtMWUtNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODI4IG11bHRpcGx5IC05RS02MTcyICAgICAgIDFlLTUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgyOSBtdWx0aXBseSAgOS45RS02MTcyICAgIC0xZS01ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MzAgbXVsdGlwbHkgIDMuMEUtNjE3MiAgICAtMWUtNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkcW11bDgzMSBtdWx0aXBseSAgMS4wRS01OTc3ICAgICAxZS0yMDAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDgzMiBtdWx0aXBseSAgMS4wRS01OTc3ICAgICAxZS0xOTkgLT4gMUUtNjE3NiAgICBTdWJub3JtYWwgUm91bmRlZAorZHFtdWw4MzMgbXVsdGlwbHkgIDEuMEUtNTk3NyAgICAgMWUtMTk4IC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxbXVsODM0IG11bHRpcGx5ICAyLjBFLTU5NzcgICAgIDJlLTE5OCAtPiA0LjBFLTYxNzUgICAgU3Vibm9ybWFsCitkcW11bDgzNSBtdWx0aXBseSAgNC4wRS01OTc3ICAgICA0ZS0xOTggLT4gMS42MEUtNjE3NCAgIFN1Ym5vcm1hbAorZHFtdWw4MzYgbXVsdGlwbHkgMTAuMEUtNTk3NyAgICAxMGUtMTk4IC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwKK2RxbXVsODM3IG11bHRpcGx5IDMwLjBFLTU5NzcgICAgMzBlLTE5OCAtPiA5LjAwMEUtNjE3MyAgU3Vibm9ybWFsCitkcW11bDgzOCBtdWx0aXBseSA0MC4wRS01OTgyICAgIDQwZS0xNjYgLT4gMS42MDAwRS02MTQ1IFN1Ym5vcm1hbAorZHFtdWw4MzkgbXVsdGlwbHkgNDAuMEUtNTk4MiAgICA0MGUtMTY1IC0+IDEuNjAwMEUtNjE0NCBTdWJub3JtYWwKK2RxbXVsODQwIG11bHRpcGx5IDQwLjBFLTU5ODIgICAgNDBlLTE2NCAtPiAxLjYwMDBFLTYxNDMKKworLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoCitkcW11bDg3MCBtdWx0aXBseSAxMDAgIDkuOTk5RSs2MTQzICAgICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkcW11bDg3MSBtdWx0aXBseSAxMDAgLTkuOTk5RSs2MTQzICAgICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkcW11bDg3MiBtdWx0aXBseSAgICAgIDkuOTk5RSs2MTQzIDEwMCAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkcW11bDg3MyBtdWx0aXBseSAgICAgLTkuOTk5RSs2MTQzIDEwMCAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitkcW11bDg4MSBtdWx0aXBseSAgMS4yMzQ3RS02MTMzIDEuMjM0N0UtNDAgIC0+ICAxLjUyNEUtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4ODIgbXVsdGlwbHkgIDEuMjM0RS02MTMzIDEuMjM0RS00MCAgICAtPiAgMS41MjNFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxbXVsODgzIG11bHRpcGx5ICAxLjIzRS02MTMzICAxLjIzRS00MCAgICAgLT4gIDEuNTEzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcW11bDg4NCBtdWx0aXBseSAgMS4yRS02MTMzICAgMS4yRS00MCAgICAgIC0+ICAxLjQ0RS02MTczICBTdWJub3JtYWwKK2RxbXVsODg1IG11bHRpcGx5ICAxLjJFLTYxMzMgICAxLjJFLTQxICAgICAgLT4gIDEuNDRFLTYxNzQgIFN1Ym5vcm1hbAorZHFtdWw4ODYgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDIgICAgICAtPiAgMS40RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxbXVsODg3IG11bHRpcGx5ICAxLjJFLTYxMzMgICAxLjNFLTQyICAgICAgLT4gIDEuNkUtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcW11bDg4OCBtdWx0aXBseSAgMS4zRS02MTMzICAgMS4zRS00MiAgICAgIC0+ICAxLjdFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZHFtdWw4ODkgbXVsdGlwbHkgIDEuM0UtNjEzMyAgIDEuM0UtNDMgICAgICAtPiAgICAyRS02MTc2ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxbXVsODkwIG11bHRpcGx5ICAxLjNFLTYxMzQgICAxLjNFLTQzICAgICAgLT4gICAgMEUtNjE3NiAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworZHFtdWw4OTEgbXVsdGlwbHkgIDEuMjM0NUUtMzkgICAgMS4yMzRFLTYxMzMgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4OTIgbXVsdGlwbHkgIDEuMjM0NTZFLTM5ICAgMS4yMzRFLTYxMzMgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4OTMgbXVsdGlwbHkgIDEuMjM0NUUtNDAgICAxLjIzNEUtNjEzMyAtPiAgMS41MjNFLTYxNzMgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcW11bDg5NCBtdWx0aXBseSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS02MTMzIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxbXVsODk1IG11bHRpcGx5ICAxLjIzNDVFLTQxICAgMS4yMzRFLTYxMzMgLT4gIDEuNTJFLTYxNzQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4OTYgbXVsdGlwbHkgIDEuMjM0NTZFLTQxICAxLjIzNEUtNjEzMyAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cKKy0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdAorZHFtdWw5MDYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAxICAgICAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MworZHFtdWw5MDcgbXVsdGlwbHkgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKKy0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluCitkcW11bDkwOCBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCisKKy0tIGh1Z2VzdAorZHFtdWw5MDkgbXVsdGlwbHkgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2NyBJbmV4YWN0IFJvdW5kZWQKKy0tIFZHIGNhc2UKK2RxbXVsOTEwIG11bHRpcGx5IDguODExMjUwMDAwMDAwMDEzNDk0MzZFLTE1NDggOC4wMDAwMDAwMDAwMDAwMDAwMDBFLTE1NTAgLT4gNy4wNDkwMDAwMDAwMDAwMTA3OTU0ODgwMDAwMDAwMDAwMDBFLTMwOTcgUm91bmRlZAorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK2RxbXVsOTExICBtdWx0aXBseSAxMzBFLTIgIDEyMEUtMiAtPiAxLjU2MDAKK2RxbXVsOTEyICBtdWx0aXBseSAxMzBFLTIgIDEyRS0xICAtPiAxLjU2MAorZHFtdWw5MTMgIG11bHRpcGx5IDEzMEUtMiAgMUUwICAgIC0+IDEuMzAKK2RxbXVsOTE0ICBtdWx0aXBseSAxRTIgICAgIDFFNCAgICAtPiAxRSs2CisKKy0tIHBvd2VyLW9mLXRlbiBlZGdlIGNhc2VzCitkcW11bDEwMDEgbXVsdGlwbHkgIDEgICAgICAxMCAgICAgICAgICAgICAgIC0+IDEwCitkcW11bDEwMDIgbXVsdGlwbHkgIDEgICAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMAorZHFtdWwxMDAzIG11bHRpcGx5ICAxICAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwCitkcW11bDEwMDQgbXVsdGlwbHkgIDEgICAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwCitkcW11bDEwMDUgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMAorZHFtdWwxMDA2IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwCitkcW11bDEwMDcgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwCitkcW11bDEwMDggbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMAorZHFtdWwxMDA5IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwCitkcW11bDEwMTAgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwCitkcW11bDEwMTEgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMAorZHFtdWwxMDEyIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwCitkcW11bDEwMTMgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwCitkcW11bDEwMTQgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDE1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTAxNiBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDE3IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDE4IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwMTkgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDIwIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTAyMSBtdWx0aXBseSAgMTAgICAgIDEgICAgICAgICAgICAgICAgLT4gMTAKK2RxbXVsMTAyMiBtdWx0aXBseSAgMTAgICAgIDEwICAgICAgICAgICAgICAgLT4gMTAwCitkcW11bDEwMjMgbXVsdGlwbHkgIDEwICAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAKK2RxbXVsMTAyNCBtdWx0aXBseSAgMTAgICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAKK2RxbXVsMTAyNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwCitkcW11bDEwMjYgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RxbXVsMTAyNyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RxbXVsMTAyOCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwCitkcW11bDEwMjkgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RxbXVsMTAzMCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RxbXVsMTAzMSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwCitkcW11bDEwMzIgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RxbXVsMTAzMyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RxbXVsMTAzNCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkcW11bDEwMzUgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMDM2IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAzNyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDM4IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAzOSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA0MCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTA0MSBtdWx0aXBseSAgMTAwICAgIDAuMSAgICAgICAgICAgICAgLT4gMTAuMAorZHFtdWwxMDQyIG11bHRpcGx5ICAxMDAgICAgMSAgICAgICAgICAgICAgICAtPiAxMDAKK2RxbXVsMTA0MyBtdWx0aXBseSAgMTAwICAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMAorZHFtdWwxMDQ0IG11bHRpcGx5ICAxMDAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMAorZHFtdWwxMDQ1IG11bHRpcGx5ICAxMDAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAKK2RxbXVsMTA0NiBtdWx0aXBseSAgMTAwICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMAorZHFtdWwxMDQ3IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMAorZHFtdWwxMDQ4IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RxbXVsMTA0OSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMAorZHFtdWwxMDUwIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMAorZHFtdWwxMDUxIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RxbXVsMTA1MiBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMAorZHFtdWwxMDUzIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMAorZHFtdWwxMDU0IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA1NSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwNTYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwNTcgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDU4IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDU5IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwNjAgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTA2MSBtdWx0aXBseSAgMTAwMCAgIDAuMDEgICAgICAgICAgICAgLT4gMTAuMDAKK2RxbXVsMTA2MiBtdWx0aXBseSAgMTAwMCAgIDAuMSAgICAgICAgICAgICAgLT4gMTAwLjAKK2RxbXVsMTA2MyBtdWx0aXBseSAgMTAwMCAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMAorZHFtdWwxMDY0IG11bHRpcGx5ICAxMDAwICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwMAorZHFtdWwxMDY1IG11bHRpcGx5ICAxMDAwICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMDAKK2RxbXVsMTA2NiBtdWx0aXBseSAgMTAwMCAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMAorZHFtdWwxMDY3IG11bHRpcGx5ICAxMDAwICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwMAorZHFtdWwxMDY4IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RxbXVsMTA2OSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMAorZHFtdWwxMDcwIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwMAorZHFtdWwxMDcxIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RxbXVsMTA3MiBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMAorZHFtdWwxMDczIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMAorZHFtdWwxMDc0IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA3NSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwNzYgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA3NyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA3OCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDc5IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA4MCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwODEgbXVsdGlwbHkgIDEwMDAwICAwLjAwMSAgICAgICAgICAgIC0+IDEwLjAwMAorZHFtdWwxMDgyIG11bHRpcGx5ICAxMDAwMCAgMC4wMSAgICAgICAgICAgICAtPiAxMDAuMDAKK2RxbXVsMTA4MyBtdWx0aXBseSAgMTAwMDAgIDAuMSAgICAgICAgICAgICAgLT4gMTAwMC4wCitkcW11bDEwODQgbXVsdGlwbHkgIDEwMDAwICAxICAgICAgICAgICAgICAgIC0+IDEwMDAwCitkcW11bDEwODUgbXVsdGlwbHkgIDEwMDAwICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAwMAorZHFtdWwxMDg2IG11bHRpcGx5ICAxMDAwMCAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMDAwCitkcW11bDEwODcgbXVsdGlwbHkgIDEwMDAwICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMDAwCitkcW11bDEwODggbXVsdGlwbHkgIDEwMDAwICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAwMAorZHFtdWwxMDg5IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMDAwCitkcW11bDEwOTAgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMDAwCitkcW11bDEwOTEgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAwMAorZHFtdWwxMDkyIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAwCitkcW11bDEwOTMgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAwCitkcW11bDEwOTQgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDk1IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTA5NiBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwOTcgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA5OCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwOTkgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDExMDAgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitkcW11bDExMDcgbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDAKK2RxbXVsMTEwOCBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMAorCistLSBOdWxsIHRlc3RzCitkcW11bDk5OTAgbXVsdGlwbHkgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDk5OTEgbXVsdGlwbHkgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRNaW51cy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dE1pbnVzLmRlY1Rlc3QKaW5kZXggMzRmMzk1OC4uODE3N2I1OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dE1pbnVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dE1pbnVzLmRlY1Rlc3QKQEAgLTEsMTI2ICsxLDEyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFOZXh0TWludXMuZGVjVGVzdCAtLSBkZWNRdWFkIG5leHQgdGhhdCBpcyBsZXNzIFs3NTRyIG5leHRkb3duXSAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRxbmV4dG0wMDEgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQNCi1kcW5leHRtMDAyIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1DQotZHFuZXh0bTAwMyBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ng0KLWRxbmV4dG0wMDQgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcNCi1kcW5leHRtMDA1IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4DQotZHFuZXh0bTAwNiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dG0wMDcgbmV4dG1pbnVzICAxLjAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dG0wMDggbmV4dG1pbnVzICAxICAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dG0wMDkgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbmV4dG0wMTAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dG0wMTEgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMg0KLWRxbmV4dG0wMTIgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMw0KLWRxbmV4dG0wMTMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNA0KLWRxbmV4dG0wMTQgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQ0KLWRxbmV4dG0wMTUgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNg0KLWRxbmV4dG0wMTYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRxbmV4dG0wMTcgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOA0KLWRxbmV4dG0wMTggbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQ0KLWRxbmV4dG0wMTkgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMA0KLWRxbmV4dG0wMjAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQ0KLQ0KLWRxbmV4dG0wMjEgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYNCi1kcW5leHRtMDIyIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3DQotZHFuZXh0bTAyMyBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OA0KLWRxbmV4dG0wMjQgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHRtMDI1IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW5leHRtMDI2IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHRtMDI3IG5leHRtaW51cyAtMS4wICAgICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dG0wMjggbmV4dG1pbnVzIC0xICAgICAgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0bTAyOSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyDQotZHFuZXh0bTAzMCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzDQotZHFuZXh0bTAzMSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0DQotZHFuZXh0bTAzMiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1DQotZHFuZXh0bTAzMyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2DQotZHFuZXh0bTAzNCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZHFuZXh0bTAzNSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4DQotZHFuZXh0bTAzNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5DQotZHFuZXh0bTAzNyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwDQotZHFuZXh0bTAzOCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExDQotZHFuZXh0bTAzOSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyDQotDQotLS0gdWx0cmEtdGlueSBpbnB1dHMNCi1kcW5leHRtMDYyIG5leHRtaW51cyAgMUUtNjE3NiAgICAgICAgIC0+ICAgMEUtNjE3Ng0KLWRxbmV4dG0wNjUgbmV4dG1pbnVzIC0xRS02MTc2ICAgICAgICAgLT4gIC0yRS02MTc2DQotDQotLS0gWmVyb3MNCi1kcW5leHRtMTAwIG5leHRtaW51cyAtMCAgICAgICAgICAgLT4gLTFFLTYxNzYNCi1kcW5leHRtMTAxIG5leHRtaW51cyAgMCAgICAgICAgICAgLT4gLTFFLTYxNzYNCi1kcW5leHRtMTAyIG5leHRtaW51cyAgMC4wMCAgICAgICAgLT4gLTFFLTYxNzYNCi1kcW5leHRtMTAzIG5leHRtaW51cyAtMC4wMCAgICAgICAgLT4gLTFFLTYxNzYNCi1kcW5leHRtMTA0IG5leHRtaW51cyAgMEUtMzAwICAgICAgLT4gLTFFLTYxNzYNCi1kcW5leHRtMTA1IG5leHRtaW51cyAgMEUrMzAwICAgICAgLT4gLTFFLTYxNzYNCi1kcW5leHRtMTA2IG5leHRtaW51cyAgMEUrMzAwMDAgICAgLT4gLTFFLTYxNzYNCi1kcW5leHRtMTA3IG5leHRtaW51cyAtMEUrMzAwMDAgICAgLT4gLTFFLTYxNzYNCi0NCi0tLSBzcGVjaWFscw0KLWRxbmV4dG0xNTAgbmV4dG1pbnVzICAgSW5mICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dG0xNTEgbmV4dG1pbnVzICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWRxbmV4dG0xNTIgbmV4dG1pbnVzICAgTmFOICAgIC0+ICBOYU4NCi1kcW5leHRtMTUzIG5leHRtaW51cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHRtMTU0IG5leHRtaW51cyAgIE5hTjc3ICAtPiAgTmFONzcNCi1kcW5leHRtMTU1IG5leHRtaW51cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHRtMTU2IG5leHRtaW51cyAgLU5hTiAgICAtPiAtTmFODQotZHFuZXh0bTE1NyBuZXh0bWludXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0bTE1OCBuZXh0bWludXMgIC1OYU43NyAgLT4gLU5hTjc3DQotZHFuZXh0bTE1OSBuZXh0bWludXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1kcW5leHRtMTcwIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NA0KLWRxbmV4dG0xNzEgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0DQotZHFuZXh0bTE3MiBuZXh0bWludXMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NA0KLWRxbmV4dG0xNzMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQNCi1kcW5leHRtMTc0IG5leHRtaW51cyAgOUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiA4RS02MTc2DQotZHFuZXh0bTE3NSBuZXh0bWludXMgIDkuOUUtNjE3NSAgICAgICAgICAgICAgICAgLT4gOS44RS02MTc1DQotZHFuZXh0bTE3NiBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDcgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0Nw0KLWRxbmV4dG0xNzcgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQNCi1kcW5leHRtMTc4IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0DQotZHFuZXh0bTE3OSBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NkUtNjE0NA0KLWRxbmV4dG0xODAgbmV4dG1pbnVzICAwRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2DQotZHFuZXh0bTE4MSBuZXh0bWludXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gMEUtNjE3Ng0KLWRxbmV4dG0xODIgbmV4dG1pbnVzICAyRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IDFFLTYxNzYNCi0NCi1kcW5leHRtMTgzIG5leHRtaW51cyAgLTBFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3Ng0KLWRxbmV4dG0xODQgbmV4dG1pbnVzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0yRS02MTc2DQotZHFuZXh0bTE4NSBuZXh0bWludXMgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTNFLTYxNzYNCi1kcW5leHRtMTg2IG5leHRtaW51cyAgLTEwRS02MTc2ICAgICAgICAgICAgICAgICAtPiAtMS4xRS02MTc1DQotZHFuZXh0bTE4NyBuZXh0bWludXMgIC0xMDBFLTYxNzYgICAgICAgICAgICAgICAgLT4gLTEuMDFFLTYxNzQNCi1kcW5leHRtMTg4IG5leHRtaW51cyAgLTEwMDAwMEUtNjE3NiAgICAgICAgICAgICAtPiAtMS4wMDAwMUUtNjE3MQ0KLWRxbmV4dG0xODkgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLWRxbmV4dG0xOTAgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLWRxbmV4dG0xOTEgbmV4dG1pbnVzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLWRxbmV4dG0xOTIgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dG0xOTMgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcW5leHRtOTAwIG5leHRtaW51cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTmV4dE1pbnVzLmRlY1Rlc3QgLS0gZGVjUXVhZCBuZXh0IHRoYXQgaXMgbGVzcyBbNzU0ciBuZXh0ZG93bl0gICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RxbmV4dG0wMDEgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKK2RxbmV4dG0wMDIgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKK2RxbmV4dG0wMDMgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKK2RxbmV4dG0wMDQgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dG0wMDUgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dG0wMDYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dG0wMDcgbmV4dG1pbnVzICAxLjAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0bTAwOCBuZXh0bWludXMgIDEgICAgICAgICAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRtMDA5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dG0wMTAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0bTAxMSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHRtMDEyIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dG0wMTMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorZHFuZXh0bTAxNCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHRtMDE1IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dG0wMTYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFuZXh0bTAxNyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHRtMDE4IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dG0wMTkgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFuZXh0bTAyMCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCisKK2RxbmV4dG0wMjEgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKK2RxbmV4dG0wMjIgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dG0wMjMgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dG0wMjQgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dG0wMjUgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0bTAyNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRtMDI3IG5leHRtaW51cyAtMS4wICAgICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0bTAyOCBuZXh0bWludXMgLTEgICAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dG0wMjkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorZHFuZXh0bTAzMCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHRtMDMxIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dG0wMzIgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorZHFuZXh0bTAzMyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHRtMDM0IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dG0wMzUgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorZHFuZXh0bTAzNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHRtMDM3IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dG0wMzggbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorZHFuZXh0bTAzOSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCisKKy0tIHVsdHJhLXRpbnkgaW5wdXRzCitkcW5leHRtMDYyIG5leHRtaW51cyAgMUUtNjE3NiAgICAgICAgIC0+ICAgMEUtNjE3NgorZHFuZXh0bTA2NSBuZXh0bWludXMgLTFFLTYxNzYgICAgICAgICAtPiAgLTJFLTYxNzYKKworLS0gWmVyb3MKK2RxbmV4dG0xMDAgbmV4dG1pbnVzIC0wICAgICAgICAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTEwMSBuZXh0bWludXMgIDAgICAgICAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTAyIG5leHRtaW51cyAgMC4wMCAgICAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xMDMgbmV4dG1pbnVzIC0wLjAwICAgICAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTEwNCBuZXh0bWludXMgIDBFLTMwMCAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTA1IG5leHRtaW51cyAgMEUrMzAwICAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xMDYgbmV4dG1pbnVzICAwRSszMDAwMCAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTEwNyBuZXh0bWludXMgLTBFKzMwMDAwICAgIC0+IC0xRS02MTc2CisKKy0tIHNwZWNpYWxzCitkcW5leHRtMTUwIG5leHRtaW51cyAgIEluZiAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dG0xNTEgbmV4dG1pbnVzICAtSW5mICAgIC0+IC1JbmZpbml0eQorZHFuZXh0bTE1MiBuZXh0bWludXMgICBOYU4gICAgLT4gIE5hTgorZHFuZXh0bTE1MyBuZXh0bWludXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHRtMTU0IG5leHRtaW51cyAgIE5hTjc3ICAtPiAgTmFONzcKK2RxbmV4dG0xNTUgbmV4dG1pbnVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0bTE1NiBuZXh0bWludXMgIC1OYU4gICAgLT4gLU5hTgorZHFuZXh0bTE1NyBuZXh0bWludXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHRtMTU4IG5leHRtaW51cyAgLU5hTjc3ICAtPiAtTmFONzcKK2RxbmV4dG0xNTkgbmV4dG1pbnVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZHFuZXh0bTE3MCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKK2RxbmV4dG0xNzEgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0CitkcW5leHRtMTcyIG5leHRtaW51cyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0CitkcW5leHRtMTczIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0CitkcW5leHRtMTc0IG5leHRtaW51cyAgOUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiA4RS02MTc2CitkcW5leHRtMTc1IG5leHRtaW51cyAgOS45RS02MTc1ICAgICAgICAgICAgICAgICAtPiA5LjhFLTYxNzUKK2RxbmV4dG0xNzYgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcKK2RxbmV4dG0xNzcgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQKK2RxbmV4dG0xNzggbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQKK2RxbmV4dG0xNzkgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQKK2RxbmV4dG0xODAgbmV4dG1pbnVzICAwRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTgxIG5leHRtaW51cyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAwRS02MTc2CitkcW5leHRtMTgyIG5leHRtaW51cyAgMkUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAxRS02MTc2CisKK2RxbmV4dG0xODMgbmV4dG1pbnVzICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTg0IG5leHRtaW51cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMkUtNjE3NgorZHFuZXh0bTE4NSBuZXh0bWludXMgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTNFLTYxNzYKK2RxbmV4dG0xODYgbmV4dG1pbnVzICAtMTBFLTYxNzYgICAgICAgICAgICAgICAgIC0+IC0xLjFFLTYxNzUKK2RxbmV4dG0xODcgbmV4dG1pbnVzICAtMTAwRS02MTc2ICAgICAgICAgICAgICAgIC0+IC0xLjAxRS02MTc0CitkcW5leHRtMTg4IG5leHRtaW51cyAgLTEwMDAwMEUtNjE3NiAgICAgICAgICAgICAtPiAtMS4wMDAwMUUtNjE3MQorZHFuZXh0bTE4OSBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHRtMTkwIG5leHRtaW51cyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dG0xOTEgbmV4dG1pbnVzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0bTE5MiBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHRtMTkzIG5leHRtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtSW5maW5pdHkKKworLS0gTnVsbCB0ZXN0cworZHFuZXh0bTkwMCBuZXh0bWludXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRQbHVzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0UGx1cy5kZWNUZXN0CmluZGV4IGFjM2YwNGUuLjhjOGU5Y2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRQbHVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dFBsdXMuZGVjVGVzdApAQCAtMSwxMjQgKzEsMTI0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcU5leHRQbHVzLmRlY1Rlc3QgLS0gZGVjUXVhZCBuZXh0IHRoYXQgaXMgZ3JlYXRlciBbNzU0ciBuZXh0dXBdICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZHFuZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2DQotZHFuZXh0cDAwMiBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3DQotZHFuZXh0cDAwMyBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4DQotZHFuZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0cDAwNSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW5leHRwMDA2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHRwMDA4IG5leHRwbHVzICAxICAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0cDAwOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDINCi1kcW5leHRwMDEwIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMw0KLWRxbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0DQotZHFuZXh0cDAxMiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUNCi1kcW5leHRwMDEzIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNg0KLWRxbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZHFuZXh0cDAxNSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgNCi1kcW5leHRwMDE2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQ0KLWRxbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwDQotZHFuZXh0cDAxOCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTENCi1kcW5leHRwMDE5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMg0KLQ0KLWRxbmV4dHAwMjEgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NA0KLWRxbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQ0KLWRxbmV4dHAwMjMgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ng0KLWRxbmV4dHAwMjQgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nw0KLWRxbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OA0KLWRxbmV4dHAwMjYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHAwMjcgbmV4dHBsdXMgLTEuMCAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0cDAyOCBuZXh0cGx1cyAtMSAgICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbmV4dHAwMzAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0cDAzMSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDINCi1kcW5leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMw0KLWRxbmV4dHAwMzMgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0DQotZHFuZXh0cDAzNCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUNCi1kcW5leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNg0KLWRxbmV4dHAwMzYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZHFuZXh0cDAzNyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgNCi1kcW5leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQ0KLWRxbmV4dHAwMzkgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwDQotZHFuZXh0cDA0MCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTENCi0NCi0tLSBaZXJvcw0KLWRxbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS02MTc2DQotZHFuZXh0cDEwMSBuZXh0cGx1cyAgMC4wMCAgICAgICAgLT4gIDFFLTYxNzYNCi1kcW5leHRwMTAyIG5leHRwbHVzICAwRS0zMDAgICAgICAtPiAgMUUtNjE3Ng0KLWRxbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS02MTc2DQotZHFuZXh0cDEwNCBuZXh0cGx1cyAgMEUrMzAwMDAgICAgLT4gIDFFLTYxNzYNCi1kcW5leHRwMTA1IG5leHRwbHVzIC0wICAgICAgICAgICAtPiAgMUUtNjE3Ng0KLWRxbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS02MTc2DQotZHFuZXh0cDEwNyBuZXh0cGx1cyAtMEUtMzAwICAgICAgLT4gIDFFLTYxNzYNCi1kcW5leHRwMTA4IG5leHRwbHVzIC0wRSszMDAgICAgICAtPiAgMUUtNjE3Ng0KLWRxbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS02MTc2DQotDQotLS0gc3BlY2lhbHMNCi1kcW5leHRwMTUwIG5leHRwbHVzICAgSW5mICAgIC0+ICBJbmZpbml0eQ0KLWRxbmV4dHAxNTEgbmV4dHBsdXMgIC1JbmYgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0cDE1MiBuZXh0cGx1cyAgIE5hTiAgICAtPiAgTmFODQotZHFuZXh0cDE1MyBuZXh0cGx1cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHRwMTU0IG5leHRwbHVzICAgTmFONzcgIC0+ICBOYU43Nw0KLWRxbmV4dHAxNTUgbmV4dHBsdXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0cDE1NiBuZXh0cGx1cyAgLU5hTiAgICAtPiAtTmFODQotZHFuZXh0cDE1NyBuZXh0cGx1cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHRwMTU4IG5leHRwbHVzICAtTmFONzcgIC0+IC1OYU43Nw0KLWRxbmV4dHAxNTkgbmV4dHBsdXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1kcW5leHRwMTcwIG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NA0KLWRxbmV4dHAxNzEgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0DQotZHFuZXh0cDE3MiBuZXh0cGx1cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NA0KLWRxbmV4dHAxNzMgbmV4dHBsdXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQNCi1kcW5leHRwMTc0IG5leHRwbHVzICAtOUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC04RS02MTc2DQotZHFuZXh0cDE3NSBuZXh0cGx1cyAgLTkuOUUtNjE3NSAgICAgICAgICAgICAgICAtPiAtOS44RS02MTc1DQotZHFuZXh0cDE3NiBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDcgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0Nw0KLWRxbmV4dHAxNzcgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQNCi1kcW5leHRwMTc4IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0DQotZHFuZXh0cDE3OSBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NkUtNjE0NA0KLWRxbmV4dHAxODAgbmV4dHBsdXMgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYNCi1kcW5leHRwMTgxIG5leHRwbHVzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0wRS02MTc2DQotZHFuZXh0cDE4MiBuZXh0cGx1cyAgLTJFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3Ng0KLQ0KLWRxbmV4dHAxODMgbmV4dHBsdXMgICAwRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYNCi1kcW5leHRwMTg0IG5leHRwbHVzICAgMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAyRS02MTc2DQotZHFuZXh0cDE4NSBuZXh0cGx1cyAgIDJFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgM0UtNjE3Ng0KLWRxbmV4dHAxODYgbmV4dHBsdXMgICAxMEUtNjE3NiAgICAgICAgICAgICAgICAgLT4gIDEuMUUtNjE3NQ0KLWRxbmV4dHAxODcgbmV4dHBsdXMgICAxMDBFLTYxNzYgICAgICAgICAgICAgICAgLT4gIDEuMDFFLTYxNzQNCi1kcW5leHRwMTg4IG5leHRwbHVzICAgMTAwMDAwRS02MTc2ICAgICAgICAgICAgIC0+ICAxLjAwMDAxRS02MTcxDQotZHFuZXh0cDE4OSBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCi1kcW5leHRwMTkwIG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLWRxbmV4dHAxOTEgbmV4dHBsdXMgICAxRS02MTQzICAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQotZHFuZXh0cDE5MiBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHRwMTkzIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICBJbmZpbml0eQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcW5leHRwOTAwIG5leHRwbHVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFOZXh0UGx1cy5kZWNUZXN0IC0tIGRlY1F1YWQgbmV4dCB0aGF0IGlzIGdyZWF0ZXIgWzc1NHIgbmV4dHVwXSAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFuZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHRwMDAyIG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHAwMDMgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAorZHFuZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRwMDA1IG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0cDAwNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHAwMDggbmV4dHBsdXMgIDEgICAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHRwMDEwIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworZHFuZXh0cDAxMSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHRwMDEzIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorZHFuZXh0cDAxNCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHRwMDE2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorZHFuZXh0cDAxNyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCitkcW5leHRwMDE5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorCitkcW5leHRwMDIxIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKK2RxbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQorZHFuZXh0cDAyMyBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHRwMDI0IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAorZHFuZXh0cDAyNiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRwMDI3IG5leHRwbHVzIC0xLjAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0cDAyOCBuZXh0cGx1cyAtMSAgICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHAwMjkgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0cDAzMSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK2RxbmV4dHAwMzIgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorZHFuZXh0cDAzNCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKK2RxbmV4dHAwMzUgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFuZXh0cDAzNyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKK2RxbmV4dHAwMzggbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFuZXh0cDA0MCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKworLS0gWmVyb3MKK2RxbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTAxIG5leHRwbHVzICAwLjAwICAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTA0IG5leHRwbHVzICAwRSszMDAwMCAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTA3IG5leHRwbHVzIC0wRS0zMDAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS02MTc2CisKKy0tIHNwZWNpYWxzCitkcW5leHRwMTUwIG5leHRwbHVzICAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFuZXh0cDE1MSBuZXh0cGx1cyAgLUluZiAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTgorZHFuZXh0cDE1MyBuZXh0cGx1cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHAxNTQgbmV4dHBsdXMgICBOYU43NyAgLT4gIE5hTjc3CitkcW5leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0cDE1NiBuZXh0cGx1cyAgLU5hTiAgICAtPiAtTmFOCitkcW5leHRwMTU3IG5leHRwbHVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcKK2RxbmV4dHAxNTkgbmV4dHBsdXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkcW5leHRwMTcwIG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NAorZHFuZXh0cDE3MSBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQKK2RxbmV4dHAxNzIgbmV4dHBsdXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQKK2RxbmV4dHAxNzMgbmV4dHBsdXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQKK2RxbmV4dHAxNzQgbmV4dHBsdXMgIC05RS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLThFLTYxNzYKK2RxbmV4dHAxNzUgbmV4dHBsdXMgIC05LjlFLTYxNzUgICAgICAgICAgICAgICAgLT4gLTkuOEUtNjE3NQorZHFuZXh0cDE3NiBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDcgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NworZHFuZXh0cDE3NyBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NAorZHFuZXh0cDE3OCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NAorZHFuZXh0cDE3OSBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NkUtNjE0NAorZHFuZXh0cDE4MCBuZXh0cGx1cyAgLTBFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDE4MSBuZXh0cGx1cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMEUtNjE3NgorZHFuZXh0cDE4MiBuZXh0cGx1cyAgLTJFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NgorCitkcW5leHRwMTgzIG5leHRwbHVzICAgMEUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTg0IG5leHRwbHVzICAgMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAyRS02MTc2CitkcW5leHRwMTg1IG5leHRwbHVzICAgMkUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAzRS02MTc2CitkcW5leHRwMTg2IG5leHRwbHVzICAgMTBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICAxLjFFLTYxNzUKK2RxbmV4dHAxODcgbmV4dHBsdXMgICAxMDBFLTYxNzYgICAgICAgICAgICAgICAgLT4gIDEuMDFFLTYxNzQKK2RxbmV4dHAxODggbmV4dHBsdXMgICAxMDAwMDBFLTYxNzYgICAgICAgICAgICAgLT4gIDEuMDAwMDFFLTYxNzEKK2RxbmV4dHAxODkgbmV4dHBsdXMgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHRwMTkwIG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0cDE5MSBuZXh0cGx1cyAgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHAxOTIgbmV4dHBsdXMgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHRwMTkzIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICBJbmZpbml0eQorCistLSBOdWxsIHRlc3RzCitkcW5leHRwOTAwIG5leHRwbHVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0VG93YXJkLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0VG93YXJkLmRlY1Rlc3QKaW5kZXggZTZkMWUwYi4uMTA3ZTdmNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dFRvd2FyZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRUb3dhcmQuZGVjVGVzdApAQCAtMSwzNzUgKzEsMzc1IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcU5leHRUb3dhcmQuZGVjVGVzdCAtLSBkZWNRdWFkIG5leHQgdG93YXJkIHJocyBbNzU0ciBuZXh0YWZ0ZXJdICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotDQotLS0gU2FuaXR5IGNoZWNrIHdpdGggYSBzY2F0dGVyaW5nIG9mIG51bWVyaWNzDQotZHFuZXh0dDAwMSBuZXh0dG93YXJkICAgMTAgICAgMTAgICAtPiAgMTANCi1kcW5leHR0MDAyIG5leHR0b3dhcmQgIC0xMCAgIC0xMCAgIC0+IC0xMA0KLWRxbmV4dHQwMDMgbmV4dHRvd2FyZCAgIDEgICAgIDEwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDAwNCBuZXh0dG93YXJkICAgMSAgICAtMTAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDAwNSBuZXh0dG93YXJkICAtMSAgICAgMTAgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDAwNiBuZXh0dG93YXJkICAtMSAgICAtMTAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHR0MDA3IG5leHR0b3dhcmQgICAwICAgICAxMCAgIC0+ICAxRS02MTc2ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDAwOCBuZXh0dG93YXJkICAgMCAgICAtMTAgICAtPiAtMUUtNjE3NiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQwMDkgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICtJbmZpbml0eSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDAxMCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0MDExIG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIDEwICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW5leHR0MDEyIG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0MDEzIG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLTEwICAtPiAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW5leHR0MDE0IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0MDE1IG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggIDEwICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0MDE2IG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0MDE3IG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0MDE4IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi0NCi0tLS0tLS0tIGxocz1yaHMNCi0tLSBmaW5pdGVzDQotZHFuZXh0dDEwMSBuZXh0dG93YXJkICAgICAgICAgIDcgICAgICAgNyAtPiAgNw0KLWRxbmV4dHQxMDIgbmV4dHRvd2FyZCAgICAgICAgIC03ICAgICAgLTcgLT4gLTcNCi1kcW5leHR0MTAzIG5leHR0b3dhcmQgICAgICAgICA3NSAgICAgIDc1IC0+ICA3NQ0KLWRxbmV4dHQxMDQgbmV4dHRvd2FyZCAgICAgICAgLTc1ICAgICAtNzUgLT4gLTc1DQotZHFuZXh0dDEwNSBuZXh0dG93YXJkICAgICAgIDcuNTAgICAgIDcuNSAtPiAgNy41MA0KLWRxbmV4dHQxMDYgbmV4dHRvd2FyZCAgICAgIC03LjUwICAgLTcuNTAgLT4gLTcuNTANCi1kcW5leHR0MTA3IG5leHR0b3dhcmQgICAgICAgNy41MDAgNy41MDAwIC0+ICA3LjUwMA0KLWRxbmV4dHQxMDggbmV4dHRvd2FyZCAgICAgIC03LjUwMCAgIC03LjUgLT4gLTcuNTAwDQotDQotLS0gemVyb3MNCi1kcW5leHR0MTExIG5leHR0b3dhcmQgICAgICAgICAgMCAgICAgICAwIC0+ICAwDQotZHFuZXh0dDExMiBuZXh0dG93YXJkICAgICAgICAgLTAgICAgICAtMCAtPiAtMA0KLWRxbmV4dHQxMTMgbmV4dHRvd2FyZCAgICAgICAwRSs0ICAgICAgIDAgLT4gIDBFKzQNCi1kcW5leHR0MTE0IG5leHR0b3dhcmQgICAgICAtMEUrNCAgICAgIC0wIC0+IC0wRSs0DQotZHFuZXh0dDExNSBuZXh0dG93YXJkICAgICAwLjAwMDAwMDAwMDAwICAgMC4wMDAwMDAwMDAwMDAgLT4gIDBFLTExDQotZHFuZXh0dDExNiBuZXh0dG93YXJkICAgIC0wLjAwMDAwMDAwMDAwICAtMC4wMCAgICAgICAgICAgLT4gLTBFLTExDQotZHFuZXh0dDExNyBuZXh0dG93YXJkICAgICAgMEUtMTQxICAgICAgMCAtPiAgMEUtMTQxDQotZHFuZXh0dDExOCBuZXh0dG93YXJkICAgICAtMEUtMTQxICAgLTAwMCAtPiAtMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kcW5leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4DQotZHFuZXh0dDEyMiBuZXh0dG93YXJkICAtMjY4MjY4MjY4ICAgLTI2ODI2ODI2OCAtPiAgLTI2ODI2ODI2OA0KLWRxbmV4dHQxMjMgbmV4dHRvd2FyZCAgIDEzNDEzNDEzNCAgICAxMzQxMzQxMzQgLT4gICAxMzQxMzQxMzQNCi1kcW5leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0DQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kcW5leHR0MTMxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0MTMyIG5leHR0b3dhcmQgIDFFLTYxNDMgICAgICAgICAgIDFFLTYxNDMgICAgICAgICAgICAtPiAgIDFFLTYxNDMNCi1kcW5leHR0MTMzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcW5leHR0MTM0IG5leHR0b3dhcmQgIDFFLTYxNzYgICAgICAgICAgIDFFLTYxNzYgICAgICAgICAgICAtPiAgIDFFLTYxNzYNCi0NCi1kcW5leHR0MTM1IG5leHR0b3dhcmQgIC0xRS02MTc2ICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgICAtPiAgLTFFLTYxNzYNCi1kcW5leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcW5leHR0MTM3IG5leHR0b3dhcmQgIC0xRS02MTQzICAgICAgICAgIC0xRS02MTQzICAgICAgICAgICAtPiAgLTFFLTYxNDMNCi1kcW5leHR0MTM4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi0NCi0tLS0tLS0tIGxoczxyaHMNCi1kcW5leHR0MjAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ng0KLWRxbmV4dHQyMDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3DQotZHFuZXh0dDIwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgNCi1kcW5leHR0MjA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHQyMDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW5leHR0MjA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDIwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDIwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMg0KLWRxbmV4dHQyMTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMNCi1kcW5leHR0MjExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0DQotZHFuZXh0dDIxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQ0KLWRxbmV4dHQyMTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYNCi1kcW5leHR0MjE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZHFuZXh0dDIxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOA0KLWRxbmV4dHQyMTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkNCi1kcW5leHR0MjE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwDQotZHFuZXh0dDIxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQ0KLWRxbmV4dHQyMTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTINCi0NCi1kcW5leHR0MjIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NA0KLWRxbmV4dHQyMjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUNCi1kcW5leHR0MjIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ng0KLWRxbmV4dHQyMjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3DQotZHFuZXh0dDIyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgNCi1kcW5leHR0MjI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHQyMjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0MjI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDIyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbmV4dHQyMzAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHR0MjMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyDQotZHFuZXh0dDIzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMw0KLWRxbmV4dHQyMzMgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQNCi1kcW5leHR0MjM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1DQotZHFuZXh0dDIzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNg0KLWRxbmV4dHQyMzYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCi1kcW5leHR0MjM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4DQotZHFuZXh0dDIzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQ0KLWRxbmV4dHQyMzkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTANCi1kcW5leHR0MjQwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExDQotDQotLS0gWmVyb3MNCi1kcW5leHR0MzAwIG5leHR0b3dhcmQgIDAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzMDEgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDMwMiBuZXh0dG93YXJkICAwRS0zMDAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0MzAzIG5leHR0b3dhcmQgIDBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzMDQgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDMwNSBuZXh0dG93YXJkIC0wICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0MzA2IG5leHR0b3dhcmQgLTAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzMDcgbmV4dHRvd2FyZCAtMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDMwOCBuZXh0dG93YXJkIC0wRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0MzA5IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNwZWNpYWxzDQotZHFuZXh0dDM1MCBuZXh0dG93YXJkICAgSW5mICAgIEluZmluaXR5IC0+ICBJbmZpbml0eQ0KLWRxbmV4dHQzNTEgbmV4dHRvd2FyZCAgLUluZiAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0MzUyIG5leHR0b3dhcmQgICBOYU4gICAgSW5maW5pdHkgLT4gIE5hTg0KLWRxbmV4dHQzNTMgbmV4dHRvd2FyZCAgc05hTiAgICBJbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0MzU0IG5leHR0b3dhcmQgICBOYU43NyAgSW5maW5pdHkgLT4gIE5hTjc3DQotZHFuZXh0dDM1NSBuZXh0dG93YXJkICBzTmFOODggIEluZmluaXR5IC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQzNTYgbmV4dHRvd2FyZCAgLU5hTiAgICBJbmZpbml0eSAtPiAtTmFODQotZHFuZXh0dDM1NyBuZXh0dG93YXJkIC1zTmFOICAgIEluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQzNTggbmV4dHRvd2FyZCAgLU5hTjc3ICBJbmZpbml0eSAtPiAtTmFONzcNCi1kcW5leHR0MzU5IG5leHR0b3dhcmQgLXNOYU44OCAgSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1kcW5leHR0MzcwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NA0KLWRxbmV4dHQzNzEgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0DQotZHFuZXh0dDM3MiBuZXh0dG93YXJkICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0MzczIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzNzQgbmV4dHRvd2FyZCAgLTlFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLThFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDM3NSBuZXh0dG93YXJkICAtOS45RS02MTc1ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS44RS02MTc1ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Mzc2IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ3ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzNzcgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDM3OCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Mzc5IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzODAgbmV4dHRvd2FyZCAgLTBFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDM4MSBuZXh0dG93YXJkICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFuZXh0dDM4MiBuZXh0dG93YXJkICAtMkUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcW5leHR0MzgzIG5leHR0b3dhcmQgICAwRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzODQgbmV4dHRvd2FyZCAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDJFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDM4NSBuZXh0dG93YXJkICAgMkUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgM0UtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Mzg2IG5leHR0b3dhcmQgICAxMEUtNjE3NiAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjFFLTYxNzUgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzODcgbmV4dHRvd2FyZCAgIDEwMEUtNjE3NiAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDFFLTYxNzQgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDM4OCBuZXh0dG93YXJkICAgMTAwMDAwRS02MTc2ICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMUUtNjE3MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Mzg5IG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLWRxbmV4dHQzOTAgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQotZHFuZXh0dDM5MSBuZXh0dG93YXJkICAgMUUtNjE0MyAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCi1kcW5leHR0MzkyIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NCAgSW5maW5pdHkgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NA0KLWRxbmV4dHQzOTMgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDM5NCBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIEluZmluaXR5ICAtPiAgSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLS0tLS0tIGxocz5yaHMNCi1kcW5leHR0NDAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0DQotZHFuZXh0dDQwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQ0KLWRxbmV4dHQ0MDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYNCi1kcW5leHR0NDA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3DQotZHFuZXh0dDQwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OA0KLWRxbmV4dHQ0MDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0NDA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0NDA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0NDA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW5leHR0NDEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHR0NDExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDINCi1kcW5leHR0NDEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMNCi1kcW5leHR0NDEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQNCi1kcW5leHR0NDE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUNCi1kcW5leHR0NDE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYNCi1kcW5leHR0NDE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCi1kcW5leHR0NDE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgNCi1kcW5leHR0NDE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkNCi1kcW5leHR0NDE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTANCi1kcW5leHR0NDIwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTENCi0NCi1kcW5leHR0NDIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2DQotZHFuZXh0dDQyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nw0KLWRxbmV4dHQ0MjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgNCi1kcW5leHR0NDI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDQyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFuZXh0dDQyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDQyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHR0NDI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHQ0MjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMg0KLWRxbmV4dHQ0MzAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMw0KLWRxbmV4dHQ0MzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNA0KLWRxbmV4dHQ0MzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQ0KLWRxbmV4dHQ0MzMgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNg0KLWRxbmV4dHQ0MzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRxbmV4dHQ0MzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOA0KLWRxbmV4dHQ0MzYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQ0KLWRxbmV4dHQ0MzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMA0KLWRxbmV4dHQ0MzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQ0KLWRxbmV4dHQ0MzkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMg0KLQ0KLS0tIFplcm9zDQotZHFuZXh0dDUwMCBuZXh0dG93YXJkIC0wICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0NTAxIG5leHR0b3dhcmQgIDAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ1MDIgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDUwMyBuZXh0dG93YXJkIC0wLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0NTA0IG5leHR0b3dhcmQgIDBFLTMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ1MDUgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDUwNiBuZXh0dG93YXJkICAwRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0NTA3IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNwZWNpYWxzDQotZHFuZXh0dDU1MCBuZXh0dG93YXJkICAgSW5mICAgICAtSW5maW5pdHkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDU1MSBuZXh0dG93YXJkICAtSW5mICAgICAtSW5maW5pdHkgLT4gLUluZmluaXR5DQotZHFuZXh0dDU1MiBuZXh0dG93YXJkICAgTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTg0KLWRxbmV4dHQ1NTMgbmV4dHRvd2FyZCAgc05hTiAgICAgLUluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ1NTQgbmV4dHRvd2FyZCAgIE5hTjc3ICAgLUluZmluaXR5IC0+ICBOYU43Nw0KLWRxbmV4dHQ1NTUgbmV4dHRvd2FyZCAgc05hTjg4ICAgLUluZmluaXR5IC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ1NTYgbmV4dHRvd2FyZCAgLU5hTiAgICAgLUluZmluaXR5IC0+IC1OYU4NCi1kcW5leHR0NTU3IG5leHR0b3dhcmQgLXNOYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0NTU4IG5leHR0b3dhcmQgIC1OYU43NyAgIC1JbmZpbml0eSAtPiAtTmFONzcNCi1kcW5leHR0NTU5IG5leHR0b3dhcmQgLXNOYU44OCAgIC1JbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KLWRxbmV4dHQ2NzAgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0DQotZHFuZXh0dDY3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQNCi1kcW5leHR0NjcyIG5leHR0b3dhcmQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDY3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ2NzQgbmV4dHRvd2FyZCAgOUUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDhFLTYxNzYgICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Njc1IG5leHR0b3dhcmQgIDkuOUUtNjE3NSAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5LjhFLTYxNzUgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDY3NiBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NyAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ2NzcgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Njc4IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDY3OSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NkUtNjE0NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ2ODAgbmV4dHRvd2FyZCAgMEUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0NjgxIG5leHR0b3dhcmQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAwRS02MTc2ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcW5leHR0NjgyIG5leHR0b3dhcmQgIDJFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAxRS02MTc2ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFuZXh0dDY4MyBuZXh0dG93YXJkICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ2ODQgbmV4dHRvd2FyZCAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0yRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Njg1IG5leHR0b3dhcmQgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtM0UtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDY4NiBuZXh0dG93YXJkICAtMTBFLTYxNzYgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMUUtNjE3NSAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ2ODcgbmV4dHRvd2FyZCAgLTEwMEUtNjE3NiAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAxRS02MTc0ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Njg4IG5leHR0b3dhcmQgIC0xMDAwMDBFLTYxNzYgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMUUtNjE3MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDY4OSBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQotZHFuZXh0dDY5MCBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQotZHFuZXh0dDY5MSBuZXh0dG93YXJkICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQotZHFuZXh0dDY5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC1JbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDY5MyBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC1JbmZpbml0eSAgLT4gLUluZmluaXR5ICAgICAgICAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotLS0tLS0tLSBTcGVjaWFscw0KLWRxbmV4dHQ3ODAgbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFuZXh0dDc4MSBuZXh0dG93YXJkIC1JbmYgIC0xMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0NzgyIG5leHR0b3dhcmQgLUluZiAgLTEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ3ODMgbmV4dHRvd2FyZCAtSW5mICAtMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDc4NCBuZXh0dG93YXJkIC1JbmYgICAwICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0Nzg1IG5leHR0b3dhcmQgLUluZiAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ3ODYgbmV4dHRvd2FyZCAtSW5mICAgMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDc4NyBuZXh0dG93YXJkIC0xMDAwIC1JbmYgICAtPiAtMTAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHR0Nzg4IG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbmV4dHQ3ODkgbmV4dHRvd2FyZCAtMSAgICAtSW5mICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDc5MCBuZXh0dG93YXJkIC0wICAgIC1JbmYgICAtPiAtMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0NzkxIG5leHR0b3dhcmQgIDAgICAgLUluZiAgIC0+IC0xRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ3OTIgbmV4dHRvd2FyZCAgMSAgICAtSW5mICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHQ3OTMgbmV4dHRvd2FyZCAgMTAwMCAtSW5mICAgLT4gIDk5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDc5NCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi0NCi1kcW5leHR0ODAwIG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ4MDEgbmV4dHRvd2FyZCAgSW5mICAtMTAwMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDgwMiBuZXh0dG93YXJkICBJbmYgIC0xICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0ODAzIG5leHR0b3dhcmQgIEluZiAgLTAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ4MDQgbmV4dHRvd2FyZCAgSW5mICAgMCAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDgwNSBuZXh0dG93YXJkICBJbmYgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0ODA2IG5leHR0b3dhcmQgIEluZiAgIDEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ4MDcgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFuZXh0dDgwOCBuZXh0dG93YXJkIC0xMDAwICBJbmYgICAtPiAtOTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0ODA5IG5leHR0b3dhcmQgLUluZiAgIEluZiAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDgxMiBuZXh0dG93YXJkICAwICAgICBJbmYgICAtPiAgMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0ODEzIG5leHR0b3dhcmQgIDEgICAgIEluZiAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHQ4MTQgbmV4dHRvd2FyZCAgMTAwMCAgSW5mICAgLT4gIDEwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDgxNSBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcW5leHR0ODIxIG5leHR0b3dhcmQgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kcW5leHR0ODIyIG5leHR0b3dhcmQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kcW5leHR0ODIzIG5leHR0b3dhcmQgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kcW5leHR0ODI0IG5leHR0b3dhcmQgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kcW5leHR0ODI1IG5leHR0b3dhcmQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kcW5leHR0ODI2IG5leHR0b3dhcmQgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kcW5leHR0ODI3IG5leHR0b3dhcmQgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kcW5leHR0ODI4IG5leHR0b3dhcmQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kcW5leHR0ODI5IG5leHR0b3dhcmQgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kcW5leHR0ODMwIG5leHR0b3dhcmQgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kcW5leHR0ODMxIG5leHR0b3dhcmQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcW5leHR0ODMyIG5leHR0b3dhcmQgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kcW5leHR0ODMzIG5leHR0b3dhcmQgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kcW5leHR0ODM0IG5leHR0b3dhcmQgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kcW5leHR0ODM1IG5leHR0b3dhcmQgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kcW5leHR0ODM2IG5leHR0b3dhcmQgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcW5leHR0ODM3IG5leHR0b3dhcmQgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kcW5leHR0ODQxIG5leHR0b3dhcmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg0MiBuZXh0dG93YXJkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NDMgbmV4dHRvd2FyZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODQ0IG5leHR0b3dhcmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg0NSBuZXh0dG93YXJkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NDYgbmV4dHRvd2FyZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODQ3IG5leHR0b3dhcmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg0OCBuZXh0dG93YXJkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NDkgbmV4dHRvd2FyZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODUwIG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg1MSBuZXh0dG93YXJkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NTIgbmV4dHRvd2FyZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODUzIG5leHR0b3dhcmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg1NCBuZXh0dG93YXJkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NTUgbmV4dHRvd2FyZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODU2IG5leHR0b3dhcmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg1NyBuZXh0dG93YXJkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NTggbmV4dHRvd2FyZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODU5IG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxbmV4dHQ4NjEgbmV4dHRvd2FyZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCi1kcW5leHR0ODYyIG5leHR0b3dhcmQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotZHFuZXh0dDg2MyBuZXh0dG93YXJkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLWRxbmV4dHQ4NjQgbmV4dHRvd2FyZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCi1kcW5leHR0ODY1IG5leHR0b3dhcmQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotZHFuZXh0dDg2NiBuZXh0dG93YXJkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLWRxbmV4dHQ4NjcgbmV4dHRvd2FyZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCi1kcW5leHR0ODY4IG5leHR0b3dhcmQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotZHFuZXh0dDg2OSBuZXh0dG93YXJkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1kcW5leHR0ODcxIG5leHR0b3dhcmQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODcyIG5leHR0b3dhcmQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODczIG5leHR0b3dhcmQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODc0IG5leHR0b3dhcmQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODc1IG5leHR0b3dhcmQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODc2IG5leHR0b3dhcmQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODc3IG5leHR0b3dhcmQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODc4IG5leHR0b3dhcmQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODc5IG5leHR0b3dhcmQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODgwIG5leHR0b3dhcmQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODgxIG5leHR0b3dhcmQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODgyIG5leHR0b3dhcmQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLWRxbmV4dHQ4ODMgbmV4dHRvd2FyZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4ODQgbmV4dHRvd2FyZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotZHFuZXh0dDg4NSBuZXh0dG93YXJkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxbmV4dHQ5MDAgbmV4dHRvd2FyZCAxICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ5MDEgbmV4dHRvd2FyZCAjICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFOZXh0VG93YXJkLmRlY1Rlc3QgLS0gZGVjUXVhZCBuZXh0IHRvd2FyZCByaHMgWzc1NHIgbmV4dGFmdGVyXSAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworCistLSBTYW5pdHkgY2hlY2sgd2l0aCBhIHNjYXR0ZXJpbmcgb2YgbnVtZXJpY3MKK2RxbmV4dHQwMDEgbmV4dHRvd2FyZCAgIDEwICAgIDEwICAgLT4gIDEwCitkcW5leHR0MDAyIG5leHR0b3dhcmQgIC0xMCAgIC0xMCAgIC0+IC0xMAorZHFuZXh0dDAwMyBuZXh0dG93YXJkICAgMSAgICAgMTAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDAwNSBuZXh0dG93YXJkICAtMSAgICAgMTAgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MDA2IG5leHR0b3dhcmQgIC0xICAgIC0xMCAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtNjE3NiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDAwOCBuZXh0dG93YXJkICAgMCAgICAtMTAgICAtPiAtMUUtNjE3NiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDAwOSBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQwMTAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MDExIG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIDEwICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dHQwMTIgbmV4dHRvd2FyZCAgIDEwICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDAxMyBuZXh0dG93YXJkICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0xMCAgLT4gLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHR0MDE0IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQwMTUgbmV4dHRvd2FyZCAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgMTAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDAxNiBuZXh0dG93YXJkICAgMTAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MDE3IG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQwMTggbmV4dHRvd2FyZCAgLTEwIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorCistLS0tLS0tIGxocz1yaHMKKy0tIGZpbml0ZXMKK2RxbmV4dHQxMDEgbmV4dHRvd2FyZCAgICAgICAgICA3ICAgICAgIDcgLT4gIDcKK2RxbmV4dHQxMDIgbmV4dHRvd2FyZCAgICAgICAgIC03ICAgICAgLTcgLT4gLTcKK2RxbmV4dHQxMDMgbmV4dHRvd2FyZCAgICAgICAgIDc1ICAgICAgNzUgLT4gIDc1CitkcW5leHR0MTA0IG5leHR0b3dhcmQgICAgICAgIC03NSAgICAgLTc1IC0+IC03NQorZHFuZXh0dDEwNSBuZXh0dG93YXJkICAgICAgIDcuNTAgICAgIDcuNSAtPiAgNy41MAorZHFuZXh0dDEwNiBuZXh0dG93YXJkICAgICAgLTcuNTAgICAtNy41MCAtPiAtNy41MAorZHFuZXh0dDEwNyBuZXh0dG93YXJkICAgICAgIDcuNTAwIDcuNTAwMCAtPiAgNy41MDAKK2RxbmV4dHQxMDggbmV4dHRvd2FyZCAgICAgIC03LjUwMCAgIC03LjUgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkcW5leHR0MTExIG5leHR0b3dhcmQgICAgICAgICAgMCAgICAgICAwIC0+ICAwCitkcW5leHR0MTEyIG5leHR0b3dhcmQgICAgICAgICAtMCAgICAgIC0wIC0+IC0wCitkcW5leHR0MTEzIG5leHR0b3dhcmQgICAgICAgMEUrNCAgICAgICAwIC0+ICAwRSs0CitkcW5leHR0MTE0IG5leHR0b3dhcmQgICAgICAtMEUrNCAgICAgIC0wIC0+IC0wRSs0CitkcW5leHR0MTE1IG5leHR0b3dhcmQgICAgIDAuMDAwMDAwMDAwMDAgICAwLjAwMDAwMDAwMDAwMCAtPiAgMEUtMTEKK2RxbmV4dHQxMTYgbmV4dHRvd2FyZCAgICAtMC4wMDAwMDAwMDAwMCAgLTAuMDAgICAgICAgICAgIC0+IC0wRS0xMQorZHFuZXh0dDExNyBuZXh0dG93YXJkICAgICAgMEUtMTQxICAgICAgMCAtPiAgMEUtMTQxCitkcW5leHR0MTE4IG5leHR0b3dhcmQgICAgIC0wRS0xNDEgICAtMDAwIC0+IC0wRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxbmV4dHQxMjEgbmV4dHRvd2FyZCAgIDI2ODI2ODI2OCAgICAyNjgyNjgyNjggLT4gICAyNjgyNjgyNjgKK2RxbmV4dHQxMjIgbmV4dHRvd2FyZCAgLTI2ODI2ODI2OCAgIC0yNjgyNjgyNjggLT4gIC0yNjgyNjgyNjgKK2RxbmV4dHQxMjMgbmV4dHRvd2FyZCAgIDEzNDEzNDEzNCAgICAxMzQxMzQxMzQgLT4gICAxMzQxMzQxMzQKK2RxbmV4dHQxMjQgbmV4dHRvd2FyZCAgLTEzNDEzNDEzNCAgIC0xMzQxMzQxMzQgLT4gIC0xMzQxMzQxMzQKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxbmV4dHQxMzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDEzMiBuZXh0dG93YXJkICAxRS02MTQzICAgICAgICAgICAxRS02MTQzICAgICAgICAgICAgLT4gICAxRS02MTQzCitkcW5leHR0MTMzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxbmV4dHQxMzQgbmV4dHRvd2FyZCAgMUUtNjE3NiAgICAgICAgICAgMUUtNjE3NiAgICAgICAgICAgIC0+ICAgMUUtNjE3NgorCitkcW5leHR0MTM1IG5leHR0b3dhcmQgIC0xRS02MTc2ICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgICAtPiAgLTFFLTYxNzYKK2RxbmV4dHQxMzYgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFuZXh0dDEzNyBuZXh0dG93YXJkICAtMUUtNjE0MyAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAgLT4gIC0xRS02MTQzCitkcW5leHR0MTM4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0tLS0tLSBsaHM8cmhzCitkcW5leHR0MjAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0dDIwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHQyMDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4CitkcW5leHR0MjA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDIwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0dDIwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDIwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0MjA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQyMDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK2RxbmV4dHQyMTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dHQyMTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dHQyMTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKK2RxbmV4dHQyMTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dHQyMTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dHQyMTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKK2RxbmV4dHQyMTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dHQyMTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dHQyMTggbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKK2RxbmV4dHQyMTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKworZHFuZXh0dDIyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKK2RxbmV4dHQyMjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKK2RxbmV4dHQyMjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHR0MjI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NworZHFuZXh0dDIyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHQyMjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MjI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MjI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0MjMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0CitkcW5leHR0MjM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcW5leHR0MjM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcW5leHR0MjQwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCisKKy0tIFplcm9zCitkcW5leHR0MzAwIG5leHR0b3dhcmQgIDAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwMSBuZXh0dG93YXJkICAwLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDIgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzAzIG5leHR0b3dhcmQgIDBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwNCBuZXh0dG93YXJkICAwRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDUgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzA2IG5leHR0b3dhcmQgLTAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwNyBuZXh0dG93YXJkIC0wRS0zMDAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDggbmV4dHRvd2FyZCAtMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzA5IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBzcGVjaWFscworZHFuZXh0dDM1MCBuZXh0dG93YXJkICAgSW5mICAgIEluZmluaXR5IC0+ICBJbmZpbml0eQorZHFuZXh0dDM1MSBuZXh0dG93YXJkICAtSW5mICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDM1MiBuZXh0dG93YXJkICAgTmFOICAgIEluZmluaXR5IC0+ICBOYU4KK2RxbmV4dHQzNTMgbmV4dHRvd2FyZCAgc05hTiAgICBJbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQzNTQgbmV4dHRvd2FyZCAgIE5hTjc3ICBJbmZpbml0eSAtPiAgTmFONzcKK2RxbmV4dHQzNTUgbmV4dHRvd2FyZCAgc05hTjg4ICBJbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQzNTYgbmV4dHRvd2FyZCAgLU5hTiAgICBJbmZpbml0eSAtPiAtTmFOCitkcW5leHR0MzU3IG5leHR0b3dhcmQgLXNOYU4gICAgSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0MzU4IG5leHR0b3dhcmQgIC1OYU43NyAgSW5maW5pdHkgLT4gLU5hTjc3CitkcW5leHR0MzU5IG5leHR0b3dhcmQgLXNOYU44OCAgSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkcW5leHR0MzcwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NAorZHFuZXh0dDM3MSBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQKK2RxbmV4dHQzNzIgbmV4dHRvd2FyZCAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzczIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM3NCBuZXh0dG93YXJkICAtOUUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOEUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzNzUgbmV4dHRvd2FyZCAgLTkuOUUtNjE3NSAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTkuOEUtNjE3NSAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzc2IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ3ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM3NyBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzNzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzc5IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4MCBuZXh0dG93YXJkICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODEgbmV4dHRvd2FyZCAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFuZXh0dDM4MiBuZXh0dG93YXJkICAtMkUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFuZXh0dDM4MyBuZXh0dG93YXJkICAgMEUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODQgbmV4dHRvd2FyZCAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDJFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzg1IG5leHR0b3dhcmQgICAyRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAzRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4NiBuZXh0dG93YXJkICAgMTBFLTYxNzYgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4xRS02MTc1ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODcgbmV4dHRvd2FyZCAgIDEwMEUtNjE3NiAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDFFLTYxNzQgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzg4IG5leHR0b3dhcmQgICAxMDAwMDBFLTYxNzYgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAxRS02MTcxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4OSBuZXh0dG93YXJkICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHQzOTAgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHR0MzkxIG5leHR0b3dhcmQgICAxRS02MTQzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0dDM5MiBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQgIEluZmluaXR5ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKK2RxbmV4dHQzOTMgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0Mzk0IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgSW5maW5pdHkgIC0+ICBJbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tIGxocz5yaHMKK2RxbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKK2RxbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKK2RxbmV4dHQ0MDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKK2RxbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHQ0MDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDQwOCBuZXh0dG93YXJkICAxICAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0NDA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dHQ0MTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDQxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHR0NDEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dHQ0MTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorZHFuZXh0dDQxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHR0NDE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dHQ0MTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFuZXh0dDQxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHR0NDE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dHQ0MTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFuZXh0dDQyMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCisKK2RxbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKK2RxbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHQ0MjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0dDQyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDQyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQ0MjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorZHFuZXh0dDQzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHR0NDMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dHQ0MzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorZHFuZXh0dDQzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHR0NDM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dHQ0MzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorZHFuZXh0dDQzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHR0NDM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dHQ0MzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorZHFuZXh0dDQzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCisKKy0tIFplcm9zCitkcW5leHR0NTAwIG5leHR0b3dhcmQgLTAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDUwMSBuZXh0dG93YXJkICAwICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ1MDIgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NTAzIG5leHR0b3dhcmQgLTAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDUwNCBuZXh0dG93YXJkICAwRS0zMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ1MDUgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NTA2IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDUwNyBuZXh0dG93YXJkIC0wRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3BlY2lhbHMKK2RxbmV4dHQ1NTAgbmV4dHRvd2FyZCAgIEluZiAgICAgLUluZmluaXR5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDU1MSBuZXh0dG93YXJkICAtSW5mICAgICAtSW5maW5pdHkgLT4gLUluZmluaXR5CitkcW5leHR0NTUyIG5leHR0b3dhcmQgICBOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOCitkcW5leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ1NTQgbmV4dHRvd2FyZCAgIE5hTjc3ICAgLUluZmluaXR5IC0+ICBOYU43NworZHFuZXh0dDU1NSBuZXh0dG93YXJkICBzTmFOODggICAtSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOCitkcW5leHR0NTU3IG5leHR0b3dhcmQgLXNOYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ1NTggbmV4dHRvd2FyZCAgLU5hTjc3ICAgLUluZmluaXR5IC0+IC1OYU43NworZHFuZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkcW5leHR0NjcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NAorZHFuZXh0dDY3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQKK2RxbmV4dHQ2NzIgbmV4dHRvd2FyZCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzQgbmV4dHRvd2FyZCAgOUUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDhFLTYxNzYgICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzUgbmV4dHRvd2FyZCAgOS45RS02MTc1ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOEUtNjE3NSAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzYgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NyAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzcgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzggbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzkgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2ODAgbmV4dHRvd2FyZCAgMEUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2ODEgbmV4dHRvd2FyZCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDBFLTYxNzYgICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFuZXh0dDY4MiBuZXh0dG93YXJkICAyRS02MTc2ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gMUUtNjE3NiAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorCitkcW5leHR0NjgzIG5leHR0b3dhcmQgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg0IG5leHR0b3dhcmQgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMkUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg1IG5leHR0b3dhcmQgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtM0UtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg2IG5leHR0b3dhcmQgIC0xMEUtNjE3NiAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4xRS02MTc1ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg3IG5leHR0b3dhcmQgIC0xMDBFLTYxNzYgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMUUtNjE3NCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg4IG5leHR0b3dhcmQgIC0xMDAwMDBFLTYxNzYgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMUUtNjE3MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg5IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHQ2OTAgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0dDY5MSBuZXh0dG93YXJkICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHR0NjkyIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLUluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ2OTMgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtSW5maW5pdHkgIC0+IC1JbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tIFNwZWNpYWxzCitkcW5leHR0NzgwIG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFuZXh0dDc4MSBuZXh0dG93YXJkIC1JbmYgIC0xMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ3ODIgbmV4dHRvd2FyZCAtSW5mICAtMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0NzgzIG5leHR0b3dhcmQgLUluZiAgLTAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDc4NCBuZXh0dG93YXJkIC1JbmYgICAwICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ3ODUgbmV4dHRvd2FyZCAtSW5mICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0Nzg2IG5leHR0b3dhcmQgLUluZiAgIDEwMDAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDc4NyBuZXh0dG93YXJkIC0xMDAwIC1JbmYgICAtPiAtMTAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQ3ODggbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW5leHR0Nzg5IG5leHR0b3dhcmQgLTEgICAgLUluZiAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDc5MCBuZXh0dG93YXJkIC0wICAgIC1JbmYgICAtPiAtMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NzkyIG5leHR0b3dhcmQgIDEgICAgLUluZiAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ3OTMgbmV4dHRvd2FyZCAgMTAwMCAtSW5mICAgLT4gIDk5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0Nzk0IG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorCitkcW5leHR0ODAwIG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgwMSBuZXh0dG93YXJkICBJbmYgIC0xMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ4MDIgbmV4dHRvd2FyZCAgSW5mICAtMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0ODAzIG5leHR0b3dhcmQgIEluZiAgLTAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgwNCBuZXh0dG93YXJkICBJbmYgICAwICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ4MDUgbmV4dHRvd2FyZCAgSW5mICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0ODA2IG5leHR0b3dhcmQgIEluZiAgIDEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgwNyBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0ODA5IG5leHR0b3dhcmQgLUluZiAgIEluZiAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgxMCBuZXh0dG93YXJkIC0xICAgICBJbmYgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0ODExIG5leHR0b3dhcmQgLTAgICAgIEluZiAgIC0+ICAxRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDgxMiBuZXh0dG93YXJkICAwICAgICBJbmYgICAtPiAgMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ4MTMgbmV4dHRvd2FyZCAgMSAgICAgSW5mICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0ODE0IG5leHR0b3dhcmQgIDEwMDAgIEluZiAgIC0+ICAxMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDgxNSBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFuZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFOCitkcW5leHR0ODIyIG5leHR0b3dhcmQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxbmV4dHQ4MjMgbmV4dHRvd2FyZCAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFuZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFOCitkcW5leHR0ODI1IG5leHR0b3dhcmQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxbmV4dHQ4MjYgbmV4dHRvd2FyZCAgTmFOICAxICAgICAgLT4gIE5hTgorZHFuZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcW5leHR0ODI4IG5leHR0b3dhcmQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxbmV4dHQ4MjkgbmV4dHRvd2FyZCAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODMxIG5leHR0b3dhcmQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHQ4MzIgbmV4dHRvd2FyZCAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODM0IG5leHR0b3dhcmQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHQ4MzUgbmV4dHRvd2FyZCAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODM3IG5leHR0b3dhcmQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFuZXh0dDg0MSBuZXh0dG93YXJkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0MiBuZXh0dG93YXJkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0NCBuZXh0dG93YXJkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0NSBuZXh0dG93YXJkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0NyBuZXh0dG93YXJkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0OCBuZXh0dG93YXJkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1MCBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1MSBuZXh0dG93YXJkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1MyBuZXh0dG93YXJkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1NCBuZXh0dG93YXJkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1NiBuZXh0dG93YXJkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1NyBuZXh0dG93YXJkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1OSBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcW5leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkcW5leHR0ODYyIG5leHR0b3dhcmQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkcW5leHR0ODYzIG5leHR0b3dhcmQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkcW5leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkcW5leHR0ODY1IG5leHR0b3dhcmQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkcW5leHR0ODY2IG5leHR0b3dhcmQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkcW5leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkcW5leHR0ODY4IG5leHR0b3dhcmQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkcW5leHR0ODY5IG5leHR0b3dhcmQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZHFuZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODcyIG5leHR0b3dhcmQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzMgbmV4dHRvd2FyZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODc1IG5leHR0b3dhcmQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzYgbmV4dHRvd2FyZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODc4IG5leHR0b3dhcmQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzkgbmV4dHRvd2FyZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODgxIG5leHR0b3dhcmQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4ODIgbmV4dHRvd2FyZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkcW5leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4ODQgbmV4dHRvd2FyZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkcW5leHR0ODg1IG5leHR0b3dhcmQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworZHFuZXh0dDkwMCBuZXh0dG93YXJkIDEgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0OTAxIG5leHR0b3dhcmQgIyAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxT3IuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU9yLmRlY1Rlc3QKaW5kZXggZGFhM2M4Ni4uMWZkMzRiMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxT3IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFPci5kZWNUZXN0CkBAIC0xLDQwMSArMSw0MDEgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxT3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBPUiBmb3IgZGVjUXVhZHMgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCi1kcW9yMDAxIG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwDQotZHFvcjAwMiBvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQ0KLWRxb3IwMDMgb3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDENCi1kcW9yMDA0IG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxDQotZHFvcjAwNSBvciAgICAgICAgICAxMTAwIDEwMTAgLT4gMTExMA0KLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQotZHFvcjAwNiBvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1kcW9yMDA3IG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW9yMDA4IG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW9yMDA5IG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW9yMDEwIG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLWRxb3IwMTEgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxb3IwMTIgb3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxb3IwMTMgb3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tIFZhcmlvdXMgbGVuZ3Rocw0KLWRxb3I2MDEgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYwMiBvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjAzIG9yIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MDQgb3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYwNSBvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjA2IG9yIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MDcgb3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYwOCBvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjA5IG9yIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MTAgb3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYxMSBvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjEyIG9yIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MTMgb3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYxNCBvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjE1IG9yIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MTYgb3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYxNyBvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjE4IG9yIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MTkgb3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYyMCBvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjIxIG9yIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MjIgb3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYyMyBvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjI0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MjUgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYyNiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjI3IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2Mjggb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYyOSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjMwIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MzEgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYzMiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjMzIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MzQgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotDQotZHFvcjY0MSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjQyIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NDMgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY0NCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjQ1IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NDYgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY0NyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjQ4IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NDkgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY1MCBvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjUxIG9yIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NTIgb3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY1MyBvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjU0IG9yIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NTUgb3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY1NiBvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjU3IG9yIDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAgMTAxMDEwMTAxMDEwMTAxMDAwMTAxMDEwMTAxMDEwMTAxMCAgLT4gMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMA0KLWRxb3I2NTggb3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY1OSBvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjYwIG9yIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NjEgb3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY2MiBvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjYzIG9yIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NjQgb3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY2NSBvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjY2IG9yIDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEgMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDAwMTAxMDEwMSAgLT4gIDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMQ0KLWRxb3I2Njcgb3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY2OCBvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjY5IG9yIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NzAgb3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY3MSBvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjcyIG9yIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NzMgb3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY3NCBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjc1IG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMA0KLWRxb3I2NzYgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwDQotDQotZHFvcjY4MSBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjgyIG9yIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTAxMTExMTExMDEwMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2ODMgb3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTAxMTExMTAxMTEwMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY4NCBvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTEwMTExMTEwMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjg1IG9yIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTAxMDExMTExMTEwMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2ODYgb3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTAxMTExMTExMTEwMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY4NyBvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTAxMTExMTExMTEwMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjg4IG9yIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMDExMTAxMTExMTExMTEwMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2ODkgb3IgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTAxMTExMTAxMTExMTExMTEwMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY5MCBvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTAxMTExMTExMTEwMTExMTAxMTExMTExMTAgIC0+IDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjkxIG9yIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMDExMTExMTExMTAxMTExMTExMTEwMTEwMTExMTExMTEwMSAgLT4gMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2OTIgb3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTEwMDExMTExMTExMDExICAtPiAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY5MyBvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTAwMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjk0IG9yIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTEwMTEwMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2OTUgb3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMDExMTEwMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExDQotZHFvcjY5NiBvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTAxMTExMTEwMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTENCi1kcW9yNjk3IG9yIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAwMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMQ0KLWRxb3I2OTggb3IgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDAxMTExMTExMDEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExDQotZHFvcjY5OSBvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTAxMTExMTAxMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTENCi1kcW9yNzAwIG9yIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTAxMTEwMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMQ0KLWRxb3I3MDEgb3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTAxMDExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExDQotZHFvcjcwMiBvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTAxMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTENCi1kcW9yNzAzIG9yIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTEwMTAxMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMQ0KLWRxb3I3MDQgb3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMDExMTAxMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExDQotZHFvcjcwNSBvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDAxMTExMTExMTAxMTExMTExMTAxMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTENCi1kcW9yNzA2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTAxMTExMTEwMTExMTExMTEwMTExMTExMTAxMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMQ0KLWRxb3I3MDcgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTAxMTExMDExMTExMTExMDExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExDQotZHFvcjcwOCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTAxMTAxMTExMTExMTAxMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTENCi1kcW9yNzA5IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTAwMTExMTExMTEwMTExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMQ0KLWRxb3I3MTAgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMDAxMTExMTExMDExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExDQotZHFvcjcxMSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTAxMTAxMTExMTAxMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTENCi1kcW9yNzEyIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTEwMTExMTAxMTEwMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMQ0KLWRxb3I3MTMgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMDExMTExMTAxMDExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxDQotZHFvcjcxNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTANCi0NCi0NCi0NCi0tLSAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxb3IwMjAgb3IgMTExMTExMTExMTExMTExMSAgICAgMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTENCi1kcW9yMDIxIG9yICAxMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExDQotZHFvcjAyMiBvciAgIDExMTExMTExMTExMTExICAgICAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQ0KLWRxb3IwMjMgb3IgICAgMTExMTExMTExMTExMSAgICAgICAgMTExMTExMTExMTExMSAgLT4gICAgIDExMTExMTExMTExMTENCi1kcW9yMDI0IG9yICAgICAxMTExMTExMTExMTEgICAgICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExDQotZHFvcjAyNSBvciAgICAgIDExMTExMTExMTExICAgICAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQ0KLWRxb3IwMjYgb3IgICAgICAgMTExMTExMTExMSAgICAgICAgICAgMTExMTExMTExMSAgLT4gICAgICAgIDExMTExMTExMTENCi1kcW9yMDI3IG9yICAgICAgICAxMTExMTExMTEgICAgICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExDQotZHFvcjAyOCBvciAgICAgICAgIDExMTExMTExICAgICAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQ0KLWRxb3IwMjkgb3IgICAgICAgICAgMTExMTExMSAgICAgICAgICAgICAgMTExMTExMSAgLT4gICAgICAgICAgIDExMTExMTENCi1kcW9yMDMwIG9yICAgICAgICAgICAxMTExMTEgICAgICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExDQotZHFvcjAzMSBvciAgICAgICAgICAgIDExMTExICAgICAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQ0KLWRxb3IwMzIgb3IgICAgICAgICAgICAgMTExMSAgICAgICAgICAgICAgICAgMTExMSAgLT4gICAgICAgICAgICAgIDExMTENCi1kcW9yMDMzIG9yICAgICAgICAgICAgICAxMTEgICAgICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExDQotZHFvcjAzNCBvciAgICAgICAgICAgICAgIDExICAgICAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQ0KLWRxb3IwMzUgb3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgICAgICAgIDENCi1kcW9yMDM2IG9yICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwDQotDQotZHFvcjA0MiBvciAgMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMTExMTExMTExMDAwMDAwMA0KLWRxb3IwNDMgb3IgICAxMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMDEwMDAwMDAwMCAgLT4gIDEwMTExMTExMTAwMDAwMDANCi1kcW9yMDQ0IG9yICAgIDExMTExMTAwMDAwMDAgICAgIDEwMDAwMDEwMDAwMDAwMDAgIC0+ICAxMDAxMTExMTEwMDAwMDAwDQotZHFvcjA0NSBvciAgICAgMTExMTEwMDAwMDAwICAgICAxMDAwMDEwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMA0KLWRxb3IwNDYgb3IgICAgICAxMTExMDAwMDAwMCAgICAgMTAwMDEwMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDANCi1kcW9yMDQ3IG9yICAgICAgIDExMTAwMDAwMDAgICAgIDEwMDEwMDAwMDAwMDAwMDAgIC0+ICAxMDAxMDAxMTEwMDAwMDAwDQotZHFvcjA0OCBvciAgICAgICAgMTEwMDAwMDAwICAgICAxMDEwMDAwMDAwMDAwMDAwICAtPiAgMTAxMDAwMDExMDAwMDAwMA0KLWRxb3IwNDkgb3IgICAgICAgICAxMDAwMDAwMCAgICAgMTEwMDAwMDAwMDAwMDAwMCAgLT4gIDExMDAwMDAwMTAwMDAwMDANCi0NCi1kcW9yMDkwIG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotZHFvcjA5MSBvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLWRxb3IwOTIgb3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1kcW9yMDkzIG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotZHFvcjA5NCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQ0KLWRxb3IwOTUgb3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1kcW9yMDk2IG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotZHFvcjA5NyBvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLWRxb3IwOTggb3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi0NCi1kcW9yMTAwIG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTExMTExMTExDQotZHFvcjEwMSBvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gIDExMTExMTExMQ0KLWRxb3IxMDIgb3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAxMTExMTExMTENCi1kcW9yMTAzIG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgMTExMTExMTExDQotZHFvcjEwNCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQ0KLWRxb3IxMDUgb3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTExMTENCi1kcW9yMTA2IG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMTExDQotZHFvcjEwNyBvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTExMQ0KLWRxb3IxMDggb3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTENCi0NCi0tLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCi1kcW9yMjIwIG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjIyMSBvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyMjIgb3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjIzIG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjIyNCBvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyMjUgb3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjI2IG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjIyNyBvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyMjggb3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjI5IG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjIzMCBvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyMzEgb3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjMyIG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYSBmZXcgcmFuZG9tcw0KLWRxb3IyNDAgb3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjQxIG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI0MiBvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNDMgb3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjQ0IG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QNCi1kcW9yMjUwIG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNTEgb3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI1MiBvciAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjUzIG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNTQgb3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI1NSBvciAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjU2IG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNTcgb3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI1OCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjU5IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNjAgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI2MSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjYyIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNjMgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI2NCBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjY1IG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNELTENCi1kcW9yMjcwIG9yICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNzEgb3IgIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI3MiBvciAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjczIG9yICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNzQgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI3NSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjc2IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNzcgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi1kcW9yMjgwIG9yICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyODEgb3IgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI4MiBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwOCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjgzIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDA5IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyODQgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI4NSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjg2IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDAxMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyODcgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNaWRkaWUNCi1kcW9yMjg4IG9yICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyODkgb3IgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMDAwMDEgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI5MCBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA4MDAwMDAxMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjkxIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDkwMDAwMTAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyOTIgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI5MyBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjk0IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyOTUgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc2lnbnMNCi1kcW9yMjk2IG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjk3IG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjk4IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjk5IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAxMTExMDAxMTExMDAxMTExMDAwMDExMDAwMTAwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQ0KLWRxb3IzMzEgb3IgIDIgICA5Ljk5OTk5OTk5RSsxOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzMzIgb3IgIDMgICAxRS0xOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzMzMgb3IgIDQgICAxLjAwMDAwMDAwRS0xOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzMzQgb3IgIDUgICAxRS0xMDA5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzMzUgb3IgIDYgICAtMUUtMTAwOSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzMzYgb3IgIDcgICAtMS4wMDAwMDAwMEUtMTk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzMzcgb3IgIDggICAtMUUtMTk5OSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzMzggb3IgIDkgICAtOS45OTk5OTk5OUUrMTk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNDEgb3IgIDkuOTk5OTk5OTlFKzI5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNDIgb3IgIDFFLTI5OTkgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNDMgb3IgIDEuMDAwMDAwMDBFLTI5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNDQgb3IgIDFFLTEwMDkgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNDUgb3IgIC0xRS0xMDA5ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNDYgb3IgIC0xLjAwMDAwMDAwRS0yOTk5ICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNDcgb3IgIC0xRS0yOTk5ICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNDggb3IgIC05Ljk5OTk5OTk5RSsyOTk5ICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KLWRxb3IzNjEgb3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNjIgb3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNjMgb3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNjQgb3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNjUgb3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNjYgb3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNzEgb3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNzIgb3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNzMgb3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNzQgb3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNzUgb3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IzNzYgb3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCi1kcW9yNzgwIG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzgxIG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzgyIG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzgzIG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzg0IG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzg1IG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzg2IG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzg3IG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzg4IG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzg5IG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzkwIG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzkxIG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzkyIG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzkzIG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yNzk0IG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcW9yODAwIG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODAxIG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODAyIG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODAzIG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODA0IG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODA1IG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODA2IG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODA3IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODA4IG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODA5IG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODEwIG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODExIG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODEyIG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODEzIG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODE0IG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODE1IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcW9yODIxIG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODIyIG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODIzIG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODI0IG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODI1IG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODI2IG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODI3IG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODI4IG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODI5IG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODMwIG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODMxIG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODMyIG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODMzIG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODM0IG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODM1IG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODM2IG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODM3IG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcW9yODQxIG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NDIgb3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg0MyBvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODQ0IG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NDUgb3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg0NiBvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODQ3IG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NDggb3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg0OSBvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODUwIG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NTEgb3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg1MiBvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODUzIG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NTQgb3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg1NSBvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODU2IG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NTcgb3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg1OCBvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODU5IG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcW9yODYxIG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODYyIG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODYzIG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODY0IG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODY1IG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODY2IG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODY3IG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODY4IG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODY5IG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODcxIG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODcyIG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODczIG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODc0IG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODc1IG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODc2IG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODc3IG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODc4IG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODc5IG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODgwIG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODgxIG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODgyIG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODgzIG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODg0IG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODg1IG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxT3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBPUiBmb3IgZGVjUXVhZHMgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2Rxb3IwMDEgb3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2Rxb3IwMDIgb3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDEKK2Rxb3IwMDMgb3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDEKK2Rxb3IwMDQgb3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK2Rxb3IwMDUgb3IgICAgICAgICAgMTEwMCAxMDEwIC0+IDExMTAKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitkcW9yMDA2IG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZHFvcjAwNyBvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW9yMDA4IG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxb3IwMDkgb3IgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFvcjAxMCBvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2Rxb3IwMTEgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFvcjAxMiBvciAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW9yMDEzIG9yIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCitkcW9yNjAxIG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYwMiBvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDMgb3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjA0IG9yIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYwNSBvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDYgb3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjA3IG9yIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYwOCBvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDkgb3IgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjEwIG9yIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxMSBvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTIgb3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjEzIG9yIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxNCBvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTUgb3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjE2IG9yIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxNyBvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTggb3IgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjE5IG9yIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyMCBvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MjEgb3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjIyIG9yIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyMyBvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MjQgb3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjI1IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyNiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2Mjcgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjI4IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyOSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MzAgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjMxIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYzMiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MzMgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjM0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorCitkcW9yNjQxIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY0MiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDMgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQ0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY0NSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDYgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQ3IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY0OCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDkgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjUwIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1MSBvciAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTIgb3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjUzIG9yIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1NCBvciAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTUgb3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjU2IG9yIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1NyBvciAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwIDEwMTAxMDEwMTAxMDEwMTAwMDEwMTAxMDEwMTAxMDEwMTAgIC0+IDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAKK2Rxb3I2NTggb3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjU5IG9yIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2MCBvciAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NjEgb3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjYyIG9yIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2MyBvciAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NjQgb3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjY1IG9yIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2NiBvciAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxIDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAwMDEwMTAxMDEgIC0+ICAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEKK2Rxb3I2Njcgb3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjY4IG9yIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2OSBvciAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NzAgb3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjcxIG9yIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY3MiBvciAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NzMgb3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjc0IG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY3NSBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKK2Rxb3I2NzYgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCisKK2Rxb3I2ODEgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAwMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEwICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjgyIG9yIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTAxMTExMTExMDEwMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4MyBvciAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMDExMTAxMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODQgb3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTEwMTExMDExMTExMDExMTExMTExMTExMTExMTEwMTExICAtPiAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjg1IG9yIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTAxMDExMTExMTEwMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4NiBvciAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMDExMTExMTExMTAxMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODcgb3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMDEwMTExMTExMTExMDExMTExMTExMTEwMTExMTExICAtPiAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjg4IG9yIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMDExMTAxMTExMTExMTEwMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4OSBvciAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMDExMTExMTExMTAxMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTAgb3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMDExMTExMTEwMTExMTExMTExMDExMTEwMTExMTExMTEwICAtPiAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjkxIG9yIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMDExMTExMTExMTAxMTExMTExMTEwMTEwMTExMTExMTEwMSAgLT4gMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY5MiBvciAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTAwMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTMgb3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTEwMDExMTExMTEwMTExICAtPiAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjk0IG9yIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTEwMTEwMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMQorZHFvcjY5NSBvciAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTEwMTExMTAxMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTYgb3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTEwMTExMTExMDEwMTExMTExICAtPiAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExCitkcW9yNjk3IG9yIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAwMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMQorZHFvcjY5OCBvciAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMDExMTExMTEwMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEKK2Rxb3I2OTkgb3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTEwMTExMTEwMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExCitkcW9yNzAwIG9yIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTAxMTEwMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMQorZHFvcjcwMSBvciAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMDEwMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEKK2Rxb3I3MDIgb3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTEwMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExCitkcW9yNzAzIG9yIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTEwMTAxMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMQorZHFvcjcwNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTEwMTExMDExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEKK2Rxb3I3MDUgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAwMTExMTExMTEwMTExMTExMTEwMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExCitkcW9yNzA2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTAxMTExMTEwMTExMTExMTEwMTExMTExMTAxMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMQorZHFvcjcwNyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMDExMTEwMTExMTExMTEwMTExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEKK2Rxb3I3MDggb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTEwMTEwMTExMTExMTEwMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExCitkcW9yNzA5IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTAwMTExMTExMTEwMTExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMQorZHFvcjcxMCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTEwMDExMTExMTEwMTExMTExMTExMTExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEKK2Rxb3I3MTEgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTEwMTEwMTExMTEwMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExCitkcW9yNzEyIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTEwMTExMTAxMTEwMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMQorZHFvcjcxMyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDEwMTExMTExMDEwMTExMTExMTExMTExMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEKK2Rxb3I3MTQgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAwMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCisKKworCistLSAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NgorZHFvcjAyMCBvciAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQorZHFvcjAyMSBvciAgMTExMTExMTExMTExMTExICAgICAgMTExMTExMTExMTExMTExICAtPiAgIDExMTExMTExMTExMTExMQorZHFvcjAyMiBvciAgIDExMTExMTExMTExMTExICAgICAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQorZHFvcjAyMyBvciAgICAxMTExMTExMTExMTExICAgICAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQorZHFvcjAyNCBvciAgICAgMTExMTExMTExMTExICAgICAgICAgMTExMTExMTExMTExICAtPiAgICAgIDExMTExMTExMTExMQorZHFvcjAyNSBvciAgICAgIDExMTExMTExMTExICAgICAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQorZHFvcjAyNiBvciAgICAgICAxMTExMTExMTExICAgICAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQorZHFvcjAyNyBvciAgICAgICAgMTExMTExMTExICAgICAgICAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExMTExMTExMQorZHFvcjAyOCBvciAgICAgICAgIDExMTExMTExICAgICAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQorZHFvcjAyOSBvciAgICAgICAgICAxMTExMTExICAgICAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQorZHFvcjAzMCBvciAgICAgICAgICAgMTExMTExICAgICAgICAgICAgICAgMTExMTExICAtPiAgICAgICAgICAgIDExMTExMQorZHFvcjAzMSBvciAgICAgICAgICAgIDExMTExICAgICAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQorZHFvcjAzMiBvciAgICAgICAgICAgICAxMTExICAgICAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQorZHFvcjAzMyBvciAgICAgICAgICAgICAgMTExICAgICAgICAgICAgICAgICAgMTExICAtPiAgICAgICAgICAgICAgIDExMQorZHFvcjAzNCBvciAgICAgICAgICAgICAgIDExICAgICAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQorZHFvcjAzNSBvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQorZHFvcjAzNiBvciAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAwICAtPiAgICAgICAgICAgICAgICAgMAorCitkcW9yMDQyIG9yICAxMTExMTExMTAwMDAwMDAgICAgIDExMTExMTExMTAwMDAwMDAgIC0+ICAxMTExMTExMTEwMDAwMDAwCitkcW9yMDQzIG9yICAgMTExMTExMTAwMDAwMDAgICAgIDEwMDAwMDAxMDAwMDAwMDAgIC0+ICAxMDExMTExMTEwMDAwMDAwCitkcW9yMDQ0IG9yICAgIDExMTExMTAwMDAwMDAgICAgIDEwMDAwMDEwMDAwMDAwMDAgIC0+ICAxMDAxMTExMTEwMDAwMDAwCitkcW9yMDQ1IG9yICAgICAxMTExMTAwMDAwMDAgICAgIDEwMDAwMTAwMDAwMDAwMDAgIC0+ICAxMDAwMTExMTEwMDAwMDAwCitkcW9yMDQ2IG9yICAgICAgMTExMTAwMDAwMDAgICAgIDEwMDAxMDAwMDAwMDAwMDAgIC0+ICAxMDAwMTExMTEwMDAwMDAwCitkcW9yMDQ3IG9yICAgICAgIDExMTAwMDAwMDAgICAgIDEwMDEwMDAwMDAwMDAwMDAgIC0+ICAxMDAxMDAxMTEwMDAwMDAwCitkcW9yMDQ4IG9yICAgICAgICAxMTAwMDAwMDAgICAgIDEwMTAwMDAwMDAwMDAwMDAgIC0+ICAxMDEwMDAwMTEwMDAwMDAwCitkcW9yMDQ5IG9yICAgICAgICAgMTAwMDAwMDAgICAgIDExMDAwMDAwMDAwMDAwMDAgIC0+ICAxMTAwMDAwMDEwMDAwMDAwCisKK2Rxb3IwOTAgb3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IwOTEgb3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IwOTIgb3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IwOTMgb3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IwOTQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2Rxb3IwOTUgb3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IwOTYgb3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IwOTcgb3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IwOTggb3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKKworZHFvcjEwMCBvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDExMTExMTExMQorZHFvcjEwMSBvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gIDExMTExMTExMQorZHFvcjEwMiBvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gIDExMTExMTExMQorZHFvcjEwMyBvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gIDExMTExMTExMQorZHFvcjEwNCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorZHFvcjEwNSBvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gIDExMTExMTExMQorZHFvcjEwNiBvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTExMQorZHFvcjEwNyBvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTExMQorZHFvcjEwOCBvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMQorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2Rxb3IyMjAgb3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMjEgb3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMjIgb3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMjMgb3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMjQgb3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMjUgb3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMjYgb3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMjcgb3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMjggb3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMjkgb3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMzAgb3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMzEgb3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyMzIgb3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2Rxb3IyNDAgb3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNDEgb3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNDIgb3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNDMgb3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNDQgb3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkcW9yMjUwIG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1MSBvciAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTIgb3IgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjUzIG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1NCBvciAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTUgb3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjU2IG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1NyBvciAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTggb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjU5IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI2MCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNjEgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjYyIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI2MyBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNjQgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjY1IG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZHFvcjI3MCBvciAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNzEgb3IgIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjcyIG9yICAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI3MyBvciAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNzQgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjc1IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI3NiBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMTAwMCAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNzcgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZHFvcjI4MCBvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyODEgb3IgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjgyIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA4IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI4MyBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwOSAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyODQgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjg1IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI4NiBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAwMTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyODcgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorZHFvcjI4OCBvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyODkgb3IgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMDAwMDEgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjkwIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDgwMDAwMDEwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5MSBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDA5MDAwMDEwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTIgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjkzIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDEwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5NCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTUgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworZHFvcjI5NiBvciAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjk3IG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTggb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5OSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMTAwMDEwMCAtPiAgMTAwMDAwMTExMTAwMTExMTAwMTExMTAwMDAxMTAwMDEwMAorCistLSBObWF4LCBObWluLCBOdGlueS1saWtlCitkcW9yMzMxIG9yICAyICAgOS45OTk5OTk5OUUrMTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzMzIgb3IgIDMgICAxRS0xOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjMzMyBvciAgNCAgIDEuMDAwMDAwMDBFLTE5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzM0IG9yICA1ICAgMUUtMTAwOSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzMzUgb3IgIDYgICAtMUUtMTAwOSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjMzNiBvciAgNyAgIC0xLjAwMDAwMDAwRS0xOTk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzM3IG9yICA4ICAgLTFFLTE5OTkgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzMzggb3IgIDkgICAtOS45OTk5OTk5OUUrMTk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0MSBvciAgOS45OTk5OTk5OUUrMjk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzQyIG9yICAxRS0yOTk5ICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDMgb3IgIDEuMDAwMDAwMDBFLTI5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0NCBvciAgMUUtMTAwOSAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzQ1IG9yICAtMUUtMTAwOSAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDYgb3IgIC0xLjAwMDAwMDAwRS0yOTk5ICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0NyBvciAgLTFFLTI5OTkgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzQ4IG9yICAtOS45OTk5OTk5OUUrMjk5OSAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkcW9yMzYxIG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNjIgb3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM2MyBvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzY0IG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNjUgb3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM2NiBvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzcxIG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNzIgb3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM3MyBvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzc0IG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNzUgb3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM3NiBvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2Rxb3I3ODAgb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4MSBvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzgyIG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODMgb3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4NCBvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzg1IG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODYgb3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4NyBvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzg4IG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODkgb3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc5MCBvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzkxIG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3OTIgb3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc5MyBvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzk0IG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFvcjgwMCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODAxIG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDIgb3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwMyBvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODA0IG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDUgb3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwNiBvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODA3IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDggb3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwOSBvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODEwIG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MTEgb3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgxMiBvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODEzIG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MTQgb3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgxNSBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxb3I4MjEgb3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyMiBvciAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODIzIG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MjQgb3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyNSBvciAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODI2IG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Mjcgb3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyOCBvciAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODI5IG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MzAgb3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgzMSBvciAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODMyIG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MzMgb3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgzNCBvciAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODM1IG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MzYgb3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgzNyBvciAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxb3I4NDEgb3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODQyIG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0MyBvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDQgb3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODQ1IG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0NiBvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDcgb3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODQ4IG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0OSBvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTAgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODUxIG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1MiBvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTMgb3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODU0IG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1NSBvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTYgb3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODU3IG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1OCBvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTkgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rxb3I4NjEgb3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2MiBvciArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODYzIG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NjQgb3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2NSBvciAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODY2IG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Njcgb3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2OCBvciAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODY5IG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NzEgb3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3MiBvciAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODczIG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NzQgb3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3NSBvciAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODc2IG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Nzcgb3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3OCBvciAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODc5IG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4ODAgb3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg4MSBvciArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODgyIG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4ODMgb3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg4NCBvciAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODg1IG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVBsdXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVBsdXMuZGVjVGVzdAppbmRleCBkZjFhMTVjLi44YWVjYWFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFQbHVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUGx1cy5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcVBsdXMuZGVjVGVzdCAtLSBkZWNRdWFkIDAreCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZHFwbHMwMDEgcGx1cyAgICAgICArNy41MCAgLT4gNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1kcXBsczAxMSBwbHVzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQ0KLWRxcGxzMDEyIHBsdXMgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWRkcWxzMDIxIHBsdXMgICAgICAgICBOYU4gIC0+IE5hTg0KLWRkcWxzMDIyIHBsdXMgICAgICAgIC1OYU4gIC0+IC1OYU4NCi1kZHFsczAyMyBwbHVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxbHMwMjQgcGx1cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1kZHFsczAzMSBwbHVzICAgICAgIE5hTjEzICAtPiBOYU4xMw0KLWRkcWxzMDMyIHBsdXMgICAgICAtTmFOMTMgIC0+IC1OYU4xMw0KLWRkcWxzMDMzIHBsdXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHFsczAzNCBwbHVzICAgICAtc05hTjEzICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRxbHMwMzUgcGx1cyAgICAgICBOYU43MCAgLT4gTmFONzANCi1kZHFsczAzNiBwbHVzICAgICAgLU5hTjcwICAtPiAtTmFONzANCi1kZHFsczAzNyBwbHVzICAgICAgc05hTjEwMSAtPiBOYU4xMDEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRxbHMwMzggcGx1cyAgICAgLXNOYU4xMDEgLT4gLU5hTjEwMSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIGZpbml0ZXMNCi1kcXBsczEwMSBwbHVzICAgICAgICAgIDcgICAtPiA3DQotZHFwbHMxMDIgcGx1cyAgICAgICAgIC03ICAgLT4gLTcNCi1kcXBsczEwMyBwbHVzICAgICAgICAgNzUgICAtPiA3NQ0KLWRxcGxzMTA0IHBsdXMgICAgICAgIC03NSAgIC0+IC03NQ0KLWRxcGxzMTA1IHBsdXMgICAgICAgNy41MCAgIC0+IDcuNTANCi1kcXBsczEwNiBwbHVzICAgICAgLTcuNTAgICAtPiAtNy41MA0KLWRxcGxzMTA3IHBsdXMgICAgICAgNy41MDAgIC0+IDcuNTAwDQotZHFwbHMxMDggcGx1cyAgICAgIC03LjUwMCAgLT4gLTcuNTAwDQotDQotLS0gemVyb3MNCi1kcXBsczExMSBwbHVzICAgICAgICAgIDAgICAtPiAwDQotZHFwbHMxMTIgcGx1cyAgICAgICAgIC0wICAgLT4gMA0KLWRxcGxzMTEzIHBsdXMgICAgICAgMEUrNCAgIC0+IDBFKzQNCi1kcXBsczExNCBwbHVzICAgICAgLTBFKzQgICAtPiAwRSs0DQotZHFwbHMxMTUgcGx1cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQotZHFwbHMxMTYgcGx1cyAgICAtMC4wMDAwICAgLT4gMC4wMDAwDQotZHFwbHMxMTcgcGx1cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxDQotZHFwbHMxMTggcGx1cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kcXBsczEyMSBwbHVzICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KLWRxcGxzMTIyIHBsdXMgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFwbHMxMjMgcGx1cyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi1kcXBsczEyNCBwbHVzICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZHFwbHMxMzEgcGx1cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcXBsczEzMiBwbHVzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzDQotZHFwbHMxMzMgcGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcXBsczEzNCBwbHVzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2IFN1Ym5vcm1hbA0KLQ0KLWRxcGxzMTM1IHBsdXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYgU3Vibm9ybWFsDQotZHFwbHMxMzYgcGx1cyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcXBsczEzNyBwbHVzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzDQotZHFwbHMxMzggcGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxUGx1cy5kZWNUZXN0IC0tIGRlY1F1YWQgMCt4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFwbHMwMDEgcGx1cyAgICAgICArNy41MCAgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkcXBsczAxMSBwbHVzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorZHFwbHMwMTIgcGx1cyAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRxbHMwMjEgcGx1cyAgICAgICAgIE5hTiAgLT4gTmFOCitkZHFsczAyMiBwbHVzICAgICAgICAtTmFOICAtPiAtTmFOCitkZHFsczAyMyBwbHVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHFsczAyNCBwbHVzICAgICAgIC1zTmFOICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RkcWxzMDMxIHBsdXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCitkZHFsczAzMiBwbHVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMKK2RkcWxzMDMzIHBsdXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24KK2RkcWxzMDM0IHBsdXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkcWxzMDM1IHBsdXMgICAgICAgTmFONzAgIC0+IE5hTjcwCitkZHFsczAzNiBwbHVzICAgICAgLU5hTjcwICAtPiAtTmFONzAKK2RkcWxzMDM3IHBsdXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkcWxzMDM4IHBsdXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworZHFwbHMxMDEgcGx1cyAgICAgICAgICA3ICAgLT4gNworZHFwbHMxMDIgcGx1cyAgICAgICAgIC03ICAgLT4gLTcKK2RxcGxzMTAzIHBsdXMgICAgICAgICA3NSAgIC0+IDc1CitkcXBsczEwNCBwbHVzICAgICAgICAtNzUgICAtPiAtNzUKK2RxcGxzMTA1IHBsdXMgICAgICAgNy41MCAgIC0+IDcuNTAKK2RxcGxzMTA2IHBsdXMgICAgICAtNy41MCAgIC0+IC03LjUwCitkcXBsczEwNyBwbHVzICAgICAgIDcuNTAwICAtPiA3LjUwMAorZHFwbHMxMDggcGx1cyAgICAgIC03LjUwMCAgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkcXBsczExMSBwbHVzICAgICAgICAgIDAgICAtPiAwCitkcXBsczExMiBwbHVzICAgICAgICAgLTAgICAtPiAwCitkcXBsczExMyBwbHVzICAgICAgIDBFKzQgICAtPiAwRSs0CitkcXBsczExNCBwbHVzICAgICAgLTBFKzQgICAtPiAwRSs0CitkcXBsczExNSBwbHVzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RxcGxzMTE2IHBsdXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZHFwbHMxMTcgcGx1cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkcXBsczExOCBwbHVzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxcGxzMTIxIHBsdXMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcXBsczEyMiBwbHVzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFwbHMxMjMgcGx1cyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKK2RxcGxzMTI0IHBsdXMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcXBsczEzMSBwbHVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFwbHMxMzIgcGx1cyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFwbHMxMzMgcGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxcGxzMTM0IHBsdXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsCisKK2RxcGxzMTM1IHBsdXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYgU3Vibm9ybWFsCitkcXBsczEzNiBwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFwbHMxMzcgcGx1cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0MworZHFwbHMxMzggcGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVF1YW50aXplLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFRdWFudGl6ZS5kZWNUZXN0CmluZGV4IDRlZDM5YjQuLjUxNDcxYzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVF1YW50aXplLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUXVhbnRpemUuZGVjVGVzdApAQCAtMSw4MzYgKzEsODM2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcVF1YW50aXplLmRlY1Rlc3QgLS0gZGVjUXVhZCBxdWFudGl6ZSBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gTW9zdCBvZiB0aGUgdGVzdHMgaGVyZSBhc3N1bWUgYSAicmVndWxhciBwYXR0ZXJuIiwgd2hlcmUgdGhlDQotLS0gc2lnbiBhbmQgY29lZmZpY2llbnQgYXJlICsxLg0KLS0tIDIwMDQuMDMuMTUgVW5kZXJmbG93IGZvciBxdWFudGl6ZSBpcyBzdXBwcmVzc2VkDQotLS0gMjAwNS4wNi4wOCBNb3JlIGV4dGVuc2l2ZSB0ZXN0cyBmb3IgJ2RvZXMgbm90IGZpdCcNCi0tLSBbRm9ya2VkIGZyb20gcXVhbnRpemUuZGVjVGVzdCAyMDA2LjExLjI1XQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZHFxdWEwMDEgcXVhbnRpemUgMCAgICAgICAxZTAgICAtPiAwDQotZHFxdWEwMDIgcXVhbnRpemUgMSAgICAgICAxZTAgICAtPiAxDQotZHFxdWEwMDMgcXVhbnRpemUgMC4xICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDA1IHF1YW50aXplIDAuMSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTAwNiBxdWFudGl6ZSAwLjEgICAgIDFlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwMDcgcXVhbnRpemUgMC4xICAgIDFlLTEgICAtPiAwLjENCi1kcXF1YTAwOCBxdWFudGl6ZSAwLjEgICAgMWUtMiAgIC0+IDAuMTANCi1kcXF1YTAwOSBxdWFudGl6ZSAwLjEgICAgMWUtMyAgIC0+IDAuMTAwDQotZHFxdWEwMTAgcXVhbnRpemUgMC45ICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDExIHF1YW50aXplIDAuOSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTAxMiBxdWFudGl6ZSAwLjkgICAgMWUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwMTMgcXVhbnRpemUgMC45ICAgIDFlLTEgICAtPiAwLjkNCi1kcXF1YTAxNCBxdWFudGl6ZSAwLjkgICAgMWUtMiAgIC0+IDAuOTANCi1kcXF1YTAxNSBxdWFudGl6ZSAwLjkgICAgMWUtMyAgIC0+IDAuOTAwDQotLS0gbmVnYXRpdmVzDQotZHFxdWEwMjEgcXVhbnRpemUgLTAgICAgICAxZTAgICAtPiAtMA0KLWRxcXVhMDIyIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gLTENCi1kcXF1YTAyMyBxdWFudGl6ZSAtMC4xICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDI1IHF1YW50aXplIC0wLjEgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwMjYgcXVhbnRpemUgLTAuMSAgICAxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTAyNyBxdWFudGl6ZSAtMC4xICAgMWUtMSAgIC0+IC0wLjENCi1kcXF1YTAyOCBxdWFudGl6ZSAtMC4xICAgMWUtMiAgIC0+IC0wLjEwDQotZHFxdWEwMjkgcXVhbnRpemUgLTAuMSAgIDFlLTMgICAtPiAtMC4xMDANCi1kcXF1YTAzMCBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDMxIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwMzIgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTAzMyBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkNCi1kcXF1YTAzNCBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwDQotZHFxdWEwMzUgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDANCi1kcXF1YTAzNiBxdWFudGl6ZSAtMC41ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDM3IHF1YW50aXplIC0wLjUgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwMzggcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTAzOSBxdWFudGl6ZSAtMC41ICAgMWUtMSAgIC0+IC0wLjUNCi1kcXF1YTA0MCBxdWFudGl6ZSAtMC41ICAgMWUtMiAgIC0+IC0wLjUwDQotZHFxdWEwNDEgcXVhbnRpemUgLTAuNSAgIDFlLTMgICAtPiAtMC41MDANCi1kcXF1YTA0MiBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDQzIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwNDQgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA0NSBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkNCi1kcXF1YTA0NiBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwDQotZHFxdWEwNDcgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDANCi0NCi0tLSBleGFtcGxlcyBmcm9tIFNwZWNpZmljYXRpb24NCi1kcXF1YTA2MCBxdWFudGl6ZSAyLjE3ICAgMC4wMDEgIC0+IDIuMTcwDQotZHFxdWEwNjEgcXVhbnRpemUgMi4xNyAgIDAuMDEgICAtPiAyLjE3DQotZHFxdWEwNjIgcXVhbnRpemUgMi4xNyAgIDAuMSAgICAtPiAyLjIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwNjMgcXVhbnRpemUgMi4xNyAgIDFlKzAgICAtPiAyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDY0IHF1YW50aXplIDIuMTcgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA2NSBxdWFudGl6ZSAtSW5mICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxcXVhMDY2IHF1YW50aXplIDIgICAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWEwNjcgcXVhbnRpemUgLTAuMSAgICAxICAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA2OCBxdWFudGl6ZSAtMCAgICAgIDFlKzUgICAgIC0+IC0wRSs1DQotZHFxdWEwNjkgcXVhbnRpemUgKzEyMzQ1MTIzNDU2Nzg5OTg3NjU0MzIxNjc4OTAxMjM0NS42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWEwNzAgcXVhbnRpemUgLTk4NzY1MTIzNDU2Nzg5OTg3NjU0MzIxNDMzNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWEwNzEgcXVhbnRpemUgMjE3ICAgIDFlLTEgICAtPiAyMTcuMA0KLWRxcXVhMDcyIHF1YW50aXplIDIxNyAgICAxZSswICAgLT4gMjE3DQotZHFxdWEwNzMgcXVhbnRpemUgMjE3ICAgIDFlKzEgICAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwNzQgcXVhbnRpemUgMjE3ICAgIDFlKzIgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGdlbmVyYWwgdGVzdHMgLi4NCi1kcXF1YTA4OSBxdWFudGl6ZSAxMiAgICAgMWUrNCAgIC0+IDBFKzQgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwOTAgcXVhbnRpemUgMTIgICAgIDFlKzMgICAtPiAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDkxIHF1YW50aXplIDEyICAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA5MiBxdWFudGl6ZSAxMiAgICAgMWUrMSAgIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwOTMgcXVhbnRpemUgMS4yMzQ1IDFlLTIgICAtPiAxLjIzIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDk0IHF1YW50aXplIDEuMjM1NSAxZS0yICAgLT4gMS4yNCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA5NSBxdWFudGl6ZSAxLjIzNDUgMWUtNiAgIC0+IDEuMjM0NTAwDQotZHFxdWEwOTYgcXVhbnRpemUgOS45OTk5IDFlLTIgICAtPiAxMC4wMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA5NyBxdWFudGl6ZSAwLjAwMDEgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwOTggcXVhbnRpemUgMC4wMDEgIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDk5IHF1YW50aXplIDAuMDA5ICAxZS0yICAgLT4gMC4wMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEwMCBxdWFudGl6ZSA5MiAgICAgMWUrMiAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWExMDEgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAgLTENCi1kcXF1YTEwMiBxdWFudGl6ZSAtMSAgICAgMWUtMSAgIC0+ICAtMS4wDQotZHFxdWExMDMgcXVhbnRpemUgLTEgICAgIDFlLTIgICAtPiAgLTEuMDANCi1kcXF1YTEwNCBxdWFudGl6ZSAgMCAgICAgIDFlMCAgIC0+ICAwDQotZHFxdWExMDUgcXVhbnRpemUgIDAgICAgIDFlLTEgICAtPiAgMC4wDQotZHFxdWExMDYgcXVhbnRpemUgIDAgICAgIDFlLTIgICAtPiAgMC4wMA0KLWRxcXVhMTA3IHF1YW50aXplICAwLjAwICAgMWUwICAgLT4gIDANCi1kcXF1YTEwOCBxdWFudGl6ZSAgMCAgICAgMWUrMSAgIC0+ICAwRSsxDQotZHFxdWExMDkgcXVhbnRpemUgIDAgICAgIDFlKzIgICAtPiAgMEUrMg0KLWRxcXVhMTEwIHF1YW50aXplICsxICAgICAgMWUwICAgLT4gIDENCi1kcXF1YTExMSBxdWFudGl6ZSArMSAgICAgMWUtMSAgIC0+ICAxLjANCi1kcXF1YTExMiBxdWFudGl6ZSArMSAgICAgMWUtMiAgIC0+ICAxLjAwDQotDQotZHFxdWExMjAgcXVhbnRpemUgICAxLjA0ICAxZS0zIC0+ICAxLjA0MA0KLWRxcXVhMTIxIHF1YW50aXplICAgMS4wNCAgMWUtMiAtPiAgMS4wNA0KLWRxcXVhMTIyIHF1YW50aXplICAgMS4wNCAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTIzIHF1YW50aXplICAgMS4wNCAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEyNCBxdWFudGl6ZSAgIDEuMDUgIDFlLTMgLT4gIDEuMDUwDQotZHFxdWExMjUgcXVhbnRpemUgICAxLjA1ICAxZS0yIC0+ICAxLjA1DQotZHFxdWExMjYgcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMzEgcXVhbnRpemUgICAxLjA1ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTMyIHF1YW50aXplICAgMS4wNiAgMWUtMyAtPiAgMS4wNjANCi1kcXF1YTEzMyBxdWFudGl6ZSAgIDEuMDYgIDFlLTIgLT4gIDEuMDYNCi1kcXF1YTEzNCBxdWFudGl6ZSAgIDEuMDYgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEzNSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWExNDAgcXVhbnRpemUgICAtMTAgICAgMWUtMiAgLT4gIC0xMC4wMA0KLWRxcXVhMTQxIHF1YW50aXplICAgKzEgICAgIDFlLTIgIC0+ICAxLjAwDQotZHFxdWExNDIgcXVhbnRpemUgICArMTAgICAgMWUtMiAgLT4gIDEwLjAwDQotZHFxdWExNDMgcXVhbnRpemUgICAxRSszNyAgMWUtMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhMTQ0IHF1YW50aXplICAgMUUtMzcgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTQ1IHF1YW50aXplICAgMUUtMyAgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTQ2IHF1YW50aXplICAgMUUtMiAgIDFlLTIgIC0+ICAwLjAxDQotZHFxdWExNDcgcXVhbnRpemUgICAxRS0xICAgMWUtMiAgLT4gIDAuMTANCi1kcXF1YTE0OCBxdWFudGl6ZSAgIDBFLTM3ICAxZS0yICAtPiAgMC4wMA0KLQ0KLWRxcXVhMTUwIHF1YW50aXplICAgMS4wNjAwIDFlLTUgLT4gIDEuMDYwMDANCi1kcXF1YTE1MSBxdWFudGl6ZSAgIDEuMDYwMCAxZS00IC0+ICAxLjA2MDANCi1kcXF1YTE1MiBxdWFudGl6ZSAgIDEuMDYwMCAxZS0zIC0+ICAxLjA2MCBSb3VuZGVkDQotZHFxdWExNTMgcXVhbnRpemUgICAxLjA2MDAgMWUtMiAtPiAgMS4wNiBSb3VuZGVkDQotZHFxdWExNTQgcXVhbnRpemUgICAxLjA2MDAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTU1IHF1YW50aXplICAgMS4wNjAwICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gYSBjb3VwbGUgd2hlcmUgcm91bmRpbmcgd2FzIGRpZmZlcmVudCBpbiBiYXNlIHRlc3RzDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kcXF1YTE1NyBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTU4IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTU5IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gYmFzZSB0ZXN0cyB3aXRoIG5vbi0xIGNvZWZmaWNpZW50cw0KLWRxcXVhMTYxIHF1YW50aXplIDAgICAgICAtOWUwICAgLT4gMA0KLWRxcXVhMTYyIHF1YW50aXplIDEgICAgICAtN2UwICAgLT4gMQ0KLWRxcXVhMTYzIHF1YW50aXplIDAuMSAgIC0xZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2NSBxdWFudGl6ZSAwLjEgICAgMGUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjYgcXVhbnRpemUgMC4xICAgICAyZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTY3IHF1YW50aXplIDAuMSAgICAzZS0xICAgLT4gMC4xDQotZHFxdWExNjggcXVhbnRpemUgMC4xICAgNDRlLTIgICAtPiAwLjEwDQotZHFxdWExNjkgcXVhbnRpemUgMC4xICA1NTVlLTMgICAtPiAwLjEwMA0KLWRxcXVhMTcwIHF1YW50aXplIDAuOSA2NjY2ZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE3MSBxdWFudGl6ZSAwLjkgLTc3N2UrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzIgcXVhbnRpemUgMC45ICAtODhlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTczIHF1YW50aXplIDAuOSAgIC05ZS0xICAgLT4gMC45DQotZHFxdWExNzQgcXVhbnRpemUgMC45ICAgIDBlLTIgICAtPiAwLjkwDQotZHFxdWExNzUgcXVhbnRpemUgMC45ICAxLjFlLTMgICAtPiAwLjkwMDANCi0tLSBuZWdhdGl2ZXMNCi1kcXF1YTE4MSBxdWFudGl6ZSAtMCAgICAxLjFlMCAgIC0+IC0wLjANCi1kcXF1YTE4MiBxdWFudGl6ZSAtMSAgICAgLTFlMCAgIC0+IC0xDQotZHFxdWExODMgcXVhbnRpemUgLTAuMSAgMTFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE4NSBxdWFudGl6ZSAtMC4xIDExMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTg2IHF1YW50aXplIC0wLjEgICA3MWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExODcgcXVhbnRpemUgLTAuMSAtOTFlLTEgICAtPiAtMC4xDQotZHFxdWExODggcXVhbnRpemUgLTAuMSAtLjFlLTIgICAtPiAtMC4xMDANCi1kcXF1YTE4OSBxdWFudGl6ZSAtMC4xICAtMWUtMyAgIC0+IC0wLjEwMA0KLWRxcXVhMTkwIHF1YW50aXplIC0wLjkgICAwZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExOTEgcXVhbnRpemUgLTAuOSAgLTBlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE5MiBxdWFudGl6ZSAtMC45IC0xMGUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTkzIHF1YW50aXplIC0wLjkgMTAwZS0xICAgLT4gLTAuOQ0KLWRxcXVhMTk0IHF1YW50aXplIC0wLjkgOTk5ZS0yICAgLT4gLTAuOTANCi0NCi0tLSArdmUgZXhwb25lbnRzIC4uDQotZHFxdWEyMDEgcXVhbnRpemUgICAtMSAgIDFlKzAgLT4gIC0xDQotZHFxdWEyMDIgcXVhbnRpemUgICAtMSAgIDFlKzEgLT4gIC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjAzIHF1YW50aXplICAgLTEgICAxZSsyIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIwNCBxdWFudGl6ZSAgICAwICAgMWUrMCAtPiAgMA0KLWRxcXVhMjA1IHF1YW50aXplICAgIDAgICAxZSsxIC0+ICAwRSsxDQotZHFxdWEyMDYgcXVhbnRpemUgICAgMCAgIDFlKzIgLT4gIDBFKzINCi1kcXF1YTIwNyBxdWFudGl6ZSAgICsxICAgMWUrMCAtPiAgMQ0KLWRxcXVhMjA4IHF1YW50aXplICAgKzEgICAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjA5IHF1YW50aXplICAgKzEgICAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMjIwIHF1YW50aXplICAgMS4wNCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjIxIHF1YW50aXplICAgMS4wNCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjIyIHF1YW50aXplICAgMS4wNCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjIzIHF1YW50aXplICAgMS4wNCAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjI0IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjI1IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjI2IHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjI3IHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjI4IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjI5IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjMwIHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjMxIHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjMyIHF1YW50aXplICAgMS4wNiAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjMzIHF1YW50aXplICAgMS4wNiAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjM0IHF1YW50aXplICAgMS4wNiAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjM1IHF1YW50aXplICAgMS4wNiAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMjQwIHF1YW50aXplICAgLTEwICAgMWUrMSAgLT4gIC0xRSsxIFJvdW5kZWQNCi1kcXF1YTI0MSBxdWFudGl6ZSAgICsxICAgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjQyIHF1YW50aXplICAgKzEwICAgMWUrMSAgLT4gIDFFKzEgUm91bmRlZA0KLWRxcXVhMjQzIHF1YW50aXplICAgMUUrMSAgMWUrMSAgLT4gIDFFKzEgICAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRxcXVhMjQ0IHF1YW50aXplICAgMUUrMiAgMWUrMSAgLT4gIDEuMEUrMiAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRxcXVhMjQ1IHF1YW50aXplICAgMUUrMyAgMWUrMSAgLT4gIDEuMDBFKzMgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRxcXVhMjQ2IHF1YW50aXplICAgMUUrNCAgMWUrMSAgLT4gIDEuMDAwRSs0ICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRxcXVhMjQ3IHF1YW50aXplICAgMUUrNSAgMWUrMSAgLT4gIDEuMDAwMEUrNSAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRxcXVhMjQ4IHF1YW50aXplICAgMUUrNiAgMWUrMSAgLT4gIDEuMDAwMDBFKzYgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRxcXVhMjQ5IHF1YW50aXplICAgMUUrNyAgMWUrMSAgLT4gIDEuMDAwMDAwRSs3ICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRxcXVhMjUwIHF1YW50aXplICAgMUUrOCAgMWUrMSAgLT4gIDEuMDAwMDAwMEUrOCAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRxcXVhMjUxIHF1YW50aXplICAgMUUrOSAgMWUrMSAgLT4gIDEuMDAwMDAwMDBFKzkgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLS0tIG5leHQgb25lIHRyaWVzIHRvIGFkZCA5IHplcm9zDQotZHFxdWEyNTIgcXVhbnRpemUgICAxRSszNyAxZSsxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWEyNTMgcXVhbnRpemUgICAxRS0zNyAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI1NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjU1IHF1YW50aXplICAgMEUtMzcgMWUrMSAgLT4gIDBFKzENCi1kcXF1YTI1NiBxdWFudGl6ZSAgLTBFLTM3IDFlKzEgIC0+IC0wRSsxDQotZHFxdWEyNTcgcXVhbnRpemUgIC0wRS0xICAxZSsxICAtPiAtMEUrMQ0KLWRxcXVhMjU4IHF1YW50aXplICAtMCAgICAgMWUrMSAgLT4gLTBFKzENCi1kcXF1YTI1OSBxdWFudGl6ZSAgLTBFKzEgIDFlKzEgIC0+IC0wRSsxDQotDQotZHFxdWEyNjAgcXVhbnRpemUgICAtMTAgICAxZSsyICAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyNjEgcXVhbnRpemUgICArMSAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI2MiBxdWFudGl6ZSAgICsxMCAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjYzIHF1YW50aXplICAgMUUrMSAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyNjQgcXVhbnRpemUgICAxRSsyICAxZSsyICAtPiAgMUUrMg0KLWRxcXVhMjY1IHF1YW50aXplICAgMUUrMyAgMWUrMiAgLT4gIDEuMEUrMw0KLWRxcXVhMjY2IHF1YW50aXplICAgMUUrNCAgMWUrMiAgLT4gIDEuMDBFKzQNCi1kcXF1YTI2NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzIgIC0+ICAxLjAwMEUrNQ0KLWRxcXVhMjY4IHF1YW50aXplICAgMUUrNiAgMWUrMiAgLT4gIDEuMDAwMEUrNg0KLWRxcXVhMjY5IHF1YW50aXplICAgMUUrNyAgMWUrMiAgLT4gIDEuMDAwMDBFKzcNCi1kcXF1YTI3MCBxdWFudGl6ZSAgIDFFKzggIDFlKzIgIC0+ICAxLjAwMDAwMEUrOA0KLWRxcXVhMjcxIHF1YW50aXplICAgMUUrOSAgMWUrMiAgLT4gIDEuMDAwMDAwMEUrOQ0KLWRxcXVhMjcyIHF1YW50aXplICAgMUUrMTAgMWUrMiAgLT4gIDEuMDAwMDAwMDBFKzEwDQotZHFxdWEyNzMgcXVhbnRpemUgICAxRS0xMCAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI3NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjc1IHF1YW50aXplICAgMEUtMTAgMWUrMiAgLT4gIDBFKzINCi0NCi1kcXF1YTI4MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzMgIC0+ICAtMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI4MSBxdWFudGl6ZSAgICsxICAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjgyIHF1YW50aXplICAgKzEwICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyODMgcXVhbnRpemUgICAxRSsxICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI4NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjg1IHF1YW50aXplICAgMUUrMyAgMWUrMyAgLT4gIDFFKzMNCi1kcXF1YTI4NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzMgIC0+ICAxLjBFKzQNCi1kcXF1YTI4NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzMgIC0+ICAxLjAwRSs1DQotZHFxdWEyODggcXVhbnRpemUgICAxRSs2ICAxZSszICAtPiAgMS4wMDBFKzYNCi1kcXF1YTI4OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzMgIC0+ICAxLjAwMDBFKzcNCi1kcXF1YTI5MCBxdWFudGl6ZSAgIDFFKzggIDFlKzMgIC0+ICAxLjAwMDAwRSs4DQotZHFxdWEyOTEgcXVhbnRpemUgICAxRSs5ICAxZSszICAtPiAgMS4wMDAwMDBFKzkNCi1kcXF1YTI5MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzMgIC0+ICAxLjAwMDAwMDBFKzEwDQotZHFxdWEyOTMgcXVhbnRpemUgICAxRS0xMCAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI5NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjk1IHF1YW50aXplICAgMEUtMTAgMWUrMyAgLT4gIDBFKzMNCi0NCi0tLSByb3VuZCB1cCBmcm9tIGJlbG93IFtzaWduIHdyb25nIGluIEpJVCBjb21waWxlciBvbmNlXQ0KLWRxcXVhMzAwIHF1YW50aXplICAgMC4wMDc4IDFlLTUgLT4gIDAuMDA3ODANCi1kcXF1YTMwMSBxdWFudGl6ZSAgIDAuMDA3OCAxZS00IC0+ICAwLjAwNzgNCi1kcXF1YTMwMiBxdWFudGl6ZSAgIDAuMDA3OCAxZS0zIC0+ICAwLjAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMwMyBxdWFudGl6ZSAgIDAuMDA3OCAxZS0yIC0+ICAwLjAxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzA0IHF1YW50aXplICAgMC4wMDc4IDFlLTEgLT4gIDAuMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMwNSBxdWFudGl6ZSAgIDAuMDA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzA2IHF1YW50aXplICAgMC4wMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMDcgcXVhbnRpemUgICAwLjAwNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTMxMCBxdWFudGl6ZSAgLTAuMDA3OCAxZS01IC0+IC0wLjAwNzgwDQotZHFxdWEzMTEgcXVhbnRpemUgIC0wLjAwNzggMWUtNCAtPiAtMC4wMDc4DQotZHFxdWEzMTIgcXVhbnRpemUgIC0wLjAwNzggMWUtMyAtPiAtMC4wMDggSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMTMgcXVhbnRpemUgIC0wLjAwNzggMWUtMiAtPiAtMC4wMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMxNCBxdWFudGl6ZSAgLTAuMDA3OCAxZS0xIC0+IC0wLjAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMTUgcXVhbnRpemUgIC0wLjAwNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMxNiBxdWFudGl6ZSAgLTAuMDA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzE3IHF1YW50aXplICAtMC4wMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWEzMjAgcXVhbnRpemUgICAwLjA3OCAxZS01IC0+ICAwLjA3ODAwDQotZHFxdWEzMjEgcXVhbnRpemUgICAwLjA3OCAxZS00IC0+ICAwLjA3ODANCi1kcXF1YTMyMiBxdWFudGl6ZSAgIDAuMDc4IDFlLTMgLT4gIDAuMDc4DQotZHFxdWEzMjMgcXVhbnRpemUgICAwLjA3OCAxZS0yIC0+ICAwLjA4IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzI0IHF1YW50aXplICAgMC4wNzggMWUtMSAtPiAgMC4xIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzI1IHF1YW50aXplICAgMC4wNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMyNiBxdWFudGl6ZSAgIDAuMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMjcgcXVhbnRpemUgICAwLjA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMzMwIHF1YW50aXplICAtMC4wNzggMWUtNSAtPiAtMC4wNzgwMA0KLWRxcXVhMzMxIHF1YW50aXplICAtMC4wNzggMWUtNCAtPiAtMC4wNzgwDQotZHFxdWEzMzIgcXVhbnRpemUgIC0wLjA3OCAxZS0zIC0+IC0wLjA3OA0KLWRxcXVhMzMzIHF1YW50aXplICAtMC4wNzggMWUtMiAtPiAtMC4wOCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMzNCBxdWFudGl6ZSAgLTAuMDc4IDFlLTEgLT4gLTAuMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMzNSBxdWFudGl6ZSAgLTAuMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMzYgcXVhbnRpemUgIC0wLjA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzM3IHF1YW50aXplICAtMC4wNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTM0MCBxdWFudGl6ZSAgIDAuNzggMWUtNSAtPiAgMC43ODAwMA0KLWRxcXVhMzQxIHF1YW50aXplICAgMC43OCAxZS00IC0+ICAwLjc4MDANCi1kcXF1YTM0MiBxdWFudGl6ZSAgIDAuNzggMWUtMyAtPiAgMC43ODANCi1kcXF1YTM0MyBxdWFudGl6ZSAgIDAuNzggMWUtMiAtPiAgMC43OA0KLWRxcXVhMzQ0IHF1YW50aXplICAgMC43OCAxZS0xIC0+ICAwLjggSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzNDUgcXVhbnRpemUgICAwLjc4ICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzNDYgcXVhbnRpemUgICAwLjc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzNDcgcXVhbnRpemUgICAwLjc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWEzNTAgcXVhbnRpemUgIC0wLjc4IDFlLTUgLT4gLTAuNzgwMDANCi1kcXF1YTM1MSBxdWFudGl6ZSAgLTAuNzggMWUtNCAtPiAtMC43ODAwDQotZHFxdWEzNTIgcXVhbnRpemUgIC0wLjc4IDFlLTMgLT4gLTAuNzgwDQotZHFxdWEzNTMgcXVhbnRpemUgIC0wLjc4IDFlLTIgLT4gLTAuNzgNCi1kcXF1YTM1NCBxdWFudGl6ZSAgLTAuNzggMWUtMSAtPiAtMC44IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzU1IHF1YW50aXplICAtMC43OCAgMWUwIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzU2IHF1YW50aXplICAtMC43OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzU3IHF1YW50aXplICAtMC43OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMzYwIHF1YW50aXplICAgNy44IDFlLTUgLT4gIDcuODAwMDANCi1kcXF1YTM2MSBxdWFudGl6ZSAgIDcuOCAxZS00IC0+ICA3LjgwMDANCi1kcXF1YTM2MiBxdWFudGl6ZSAgIDcuOCAxZS0zIC0+ICA3LjgwMA0KLWRxcXVhMzYzIHF1YW50aXplICAgNy44IDFlLTIgLT4gIDcuODANCi1kcXF1YTM2NCBxdWFudGl6ZSAgIDcuOCAxZS0xIC0+ICA3LjgNCi1kcXF1YTM2NSBxdWFudGl6ZSAgIDcuOCAgMWUwIC0+ICA4IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzY2IHF1YW50aXplICAgNy44IDFlKzEgLT4gIDFFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzNjcgcXVhbnRpemUgICA3LjggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM2OCBxdWFudGl6ZSAgIDcuOCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMzcwIHF1YW50aXplICAtNy44IDFlLTUgLT4gLTcuODAwMDANCi1kcXF1YTM3MSBxdWFudGl6ZSAgLTcuOCAxZS00IC0+IC03LjgwMDANCi1kcXF1YTM3MiBxdWFudGl6ZSAgLTcuOCAxZS0zIC0+IC03LjgwMA0KLWRxcXVhMzczIHF1YW50aXplICAtNy44IDFlLTIgLT4gLTcuODANCi1kcXF1YTM3NCBxdWFudGl6ZSAgLTcuOCAxZS0xIC0+IC03LjgNCi1kcXF1YTM3NSBxdWFudGl6ZSAgLTcuOCAgMWUwIC0+IC04IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzc2IHF1YW50aXplICAtNy44IDFlKzEgLT4gLTFFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzNzcgcXVhbnRpemUgIC03LjggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM3OCBxdWFudGl6ZSAgLTcuOCAxZSszIC0+IC0wRSszIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNvbWUgaW5kaXZpZHVhbHMNCi1kcXF1YTM4MCBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM4MSBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUuMDYNCi1kcXF1YTM4MiBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWEzODMgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhMzg0IHF1YW50aXplICAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM4NSBxdWFudGl6ZSAgLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2DQotZHFxdWEzODYgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhMzg3IHF1YW50aXplICAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1yb3VuZGluZzogZG93bg0KLWRxcXVhMzg5IHF1YW50aXplICAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3VuZGluZzogaGFsZl91cA0KLQ0KLS0tIGFuZCBhIGZldyBtb3JlIGZyb20gZS1tYWlsIGRpc2N1c3Npb25zDQotZHFxdWEzOTEgcXVhbnRpemUgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1Njc4OTEyLjM0NTY3ICAxZS0zIC0+IDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1Njc4OTEyLjM0NiAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzkyIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjMuNDU2NyAgMWUtMyAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjMuNDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM5MyBxdWFudGl6ZSAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2Nzg5MTIzNDU2Ny4gIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gc29tZSA5OTk5IHJvdW5kLXVwIGNhc2VzDQotZHFxdWE0MDAgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNSAgLT4gIDkuOTk5MDANCi1kcXF1YTQwMSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS00ICAtPiAgOS45OTkwDQotZHFxdWE0MDIgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMyAgLT4gIDkuOTk5DQotZHFxdWE0MDMgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMiAgLT4gMTAuMDAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDA0IHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTEgIC0+IDEwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQwNSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUwICAtPiAxMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0MDYgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMSAgLT4gMUUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDA3IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTIgIC0+IDBFKzIgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTQxMCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS01ICAtPiAgMC45OTkwMA0KLWRxcXVhNDExIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTQgIC0+ICAwLjk5OTANCi1kcXF1YTQxMiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0zICAtPiAgMC45OTkNCi1kcXF1YTQxMyBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0yICAtPiAgMS4wMCAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0MTQgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMSAgLT4gIDEuMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDE1IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTAgIC0+ICAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQxNiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWE0MjAgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNSAgLT4gIDAuMDk5OTANCi1kcXF1YTQyMSBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS00ICAtPiAgMC4wOTk5DQotZHFxdWE0MjIgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMyAgLT4gIDAuMTAwICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDIzIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQyNCBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0xICAtPiAgMC4xICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0MjUgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDI2IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTQzMCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS01ICAtPiAgMC4wMDk5OQ0KLWRxcXVhNDMxIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTQgIC0+ICAwLjAxMDAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQzMiBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0zICAtPiAgMC4wMTAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0MzMgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMiAgLT4gIDAuMDEgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDM0IHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQzNSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0MzYgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhNDQwIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTUgIC0+ICAwLjAwMTAwICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQ0MSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS00ICAtPiAgMC4wMDEwICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0NDIgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMyAgLT4gIDAuMDAxICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDQzIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTIgIC0+ICAwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQ0NCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0NDUgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDQ2IHF1YW50aXplICAgMC4wMDA5OTkgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTEwMDEgcXVhbnRpemUgIDAuMDAwICAgICAgICAwLjAwMSAtPiAgMC4wMDANCi1kcXF1YTEwMDIgcXVhbnRpemUgIDAuMDAxICAgICAgICAwLjAwMSAtPiAgMC4wMDENCi1kcXF1YTEwMDMgcXVhbnRpemUgIDAuMDAxMiAgICAgICAwLjAwMSAtPiAgMC4wMDEgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTAwNCBxdWFudGl6ZSAgMC4wMDE4ICAgICAgIDAuMDAxIC0+ICAwLjAwMiAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMDA1IHF1YW50aXplICAwLjUwMSAgICAgICAgMC4wMDEgLT4gIDAuNTAxDQotZHFxdWExMDA2IHF1YW50aXplICAwLjUwMTIgICAgICAgMC4wMDEgLT4gIDAuNTAxICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEwMDcgcXVhbnRpemUgIDAuNTAxOCAgICAgICAwLjAwMSAtPiAgMC41MDIgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTAwOCBxdWFudGl6ZSAgMC45OTkgICAgICAgIDAuMDAxIC0+ICAwLjk5OQ0KLQ0KLWRxcXVhNDgxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkDQotZHFxdWE0ODIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQNCi1kcXF1YTQ4MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZA0KLWRxcXVhNDg0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQ4NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDg2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQNCi1kcXF1YTQ4NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQ4OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTQ5MSBxdWFudGl6ZSAxMjM0NTY3ODAwMCAxZSszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZA0KLWRxcXVhNDkyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQotZHFxdWE0OTMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQNCi1kcXF1YTQ5NCBxdWFudGl6ZSAxMjM0NTY3ODkxICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0OTUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQ5NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0OTcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0OTggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gWmVyb3MNCi1kcXF1YTUwMCBxdWFudGl6ZSAgIDAgICAgIDFlMSAtPiAgMEUrMQ0KLWRxcXVhNTAxIHF1YW50aXplICAgMCAgICAgMWUwIC0+ICAwDQotZHFxdWE1MDIgcXVhbnRpemUgICAwICAgIDFlLTEgLT4gIDAuMA0KLWRxcXVhNTAzIHF1YW50aXplICAgMC4wICAxZS0xIC0+ICAwLjANCi1kcXF1YTUwNCBxdWFudGl6ZSAgIDAuMCAgIDFlMCAtPiAgMA0KLWRxcXVhNTA1IHF1YW50aXplICAgMC4wICAxZSsxIC0+ICAwRSsxDQotZHFxdWE1MDYgcXVhbnRpemUgICAwRSsxIDFlLTEgLT4gIDAuMA0KLWRxcXVhNTA3IHF1YW50aXplICAgMEUrMSAgMWUwIC0+ICAwDQotZHFxdWE1MDggcXVhbnRpemUgICAwRSsxIDFlKzEgLT4gIDBFKzENCi1kcXF1YTUwOSBxdWFudGl6ZSAgLTAgICAgIDFlMSAtPiAtMEUrMQ0KLWRxcXVhNTEwIHF1YW50aXplICAtMCAgICAgMWUwIC0+IC0wDQotZHFxdWE1MTEgcXVhbnRpemUgIC0wICAgIDFlLTEgLT4gLTAuMA0KLWRxcXVhNTEyIHF1YW50aXplICAtMC4wICAxZS0xIC0+IC0wLjANCi1kcXF1YTUxMyBxdWFudGl6ZSAgLTAuMCAgIDFlMCAtPiAtMA0KLWRxcXVhNTE0IHF1YW50aXplICAtMC4wICAxZSsxIC0+IC0wRSsxDQotZHFxdWE1MTUgcXVhbnRpemUgIC0wRSsxIDFlLTEgLT4gLTAuMA0KLWRxcXVhNTE2IHF1YW50aXplICAtMEUrMSAgMWUwIC0+IC0wDQotZHFxdWE1MTcgcXVhbnRpemUgIC0wRSsxIDFlKzEgLT4gLTBFKzENCi0tLSAjNTE5IGhlcmUgb25jZSBhIHByb2JsZW0NCi1kcXF1YTUxOCBxdWFudGl6ZSAgMCAgICAwRS0zICAtPiAwLjAwMA0KLWRxcXVhNTE5IHF1YW50aXplICAwICAgIDBFLTMzIC0+IDBFLTMzDQotZHFxdWE1MjAgcXVhbnRpemUgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAwRS0zMyAtPiAwRS0zMw0KLWRxcXVhNTIxIHF1YW50aXplICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMEUtMzMgLT4gMEUtMzMNCi0NCi0tLSBTb21lIG5vbi16ZXJvcyB3aXRoIGxvdHMgb2YgcGFkZGluZyBvbiB0aGUgcmlnaHQNCi1kcXF1YTUyMyBxdWFudGl6ZSAgIDEgICAwRS0zMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxcXVhNTI0IHF1YW50aXplICAxMiAgIDBFLTMyIC0+IDEyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFxdWE1MjUgcXVhbnRpemUgMTIzICAgMEUtMzEgLT4gMTIzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXF1YTUyNiBxdWFudGl6ZSAxMjMgICAwRS0zMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTUyNyBxdWFudGl6ZSAxMjMuNCAwRS0zMSAtPiAxMjMuNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxcXVhNTI4IHF1YW50aXplIDEyMy40IDBFLTMyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIFN1c3BpY2lvdXMgUkhTIHZhbHVlcw0KLWRxcXVhNTMwIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNTMxIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNTMyIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNTMzIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KLS0tIG5leHQgZm91ciBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzDQotZHFxdWE1MzYgcXVhbnRpemUgICAxLjIzNCAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTUzNyBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNTM4IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1MzkgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcXF1YTU0MiBxdWFudGl6ZSAgIDEuMjM0RSsyOTkgICAgMWUyOTkgLT4gMUUrMjk5ICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNTQzIHF1YW50aXplICAgMS4yMzRFKzI5OCAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE1NDQgcXVhbnRpemUgICAxLjIzNCAgICAgICAgIDFlMjk5IC0+IDBFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTU0NyBxdWFudGl6ZSAgIDAgICAgICAgICAgICAxZS0yOTkgLT4gMEUtMjk5DQotLS0gbmV4dCB0d28gYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cw0KLWRxcXVhNTQ4IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTU0OSBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0zMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gW21vcmUgYmVsb3ddDQotDQotLS0gU3BlY2lhbHMNCi1kcXF1YTU4MCBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcXF1YTU4MSBxdWFudGl6ZSAgSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNTgyIHF1YW50aXplICBJbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1ODMgcXVhbnRpemUgIEluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTU4NCBxdWFudGl6ZSAgSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNTg1IHF1YW50aXplICBJbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1ODYgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFxdWE1ODcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTU4OCBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5DQotZHFxdWE1ODkgcXVhbnRpemUgLTEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTU5MCBxdWFudGl6ZSAgMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNTkxIHF1YW50aXplICAxICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1OTIgcXVhbnRpemUgIDEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTU5MyBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcXF1YTU5NCBxdWFudGl6ZSAgSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNTk1IHF1YW50aXplIC0wICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFxdWE2MDAgcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQ0KLWRxcXVhNjAxIHF1YW50aXplIC1JbmYgIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2MDIgcXVhbnRpemUgLUluZiAgMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTYwMyBxdWFudGl6ZSAtSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjA0IHF1YW50aXplIC1JbmYgICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2MDUgcXVhbnRpemUgLUluZiAgIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTYwNiBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5DQotZHFxdWE2MDcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTYwOCBxdWFudGl6ZSAtSW5mICAgIC1JbmYgICAtPiAgLUluZmluaXR5DQotZHFxdWE2MDkgcXVhbnRpemUgLTEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTYxMCBxdWFudGl6ZSAgMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjExIHF1YW50aXplICAxICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2MTIgcXVhbnRpemUgIDEwMDAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTYxMyBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcXF1YTYxNCBxdWFudGl6ZSAtSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjE1IHF1YW50aXplIC0wICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFxdWE2MjEgcXVhbnRpemUgIE5hTiAgIC1JbmYgICAgLT4gIE5hTg0KLWRxcXVhNjIyIHF1YW50aXplICBOYU4gMWUtMjk5ICAgIC0+ICBOYU4NCi1kcXF1YTYyMyBxdWFudGl6ZSAgTmFOIDFlLTEgICAgICAtPiAgTmFODQotZHFxdWE2MjQgcXVhbnRpemUgIE5hTiAgMWUwICAgICAgLT4gIE5hTg0KLWRxcXVhNjI1IHF1YW50aXplICBOYU4gIDFlMSAgICAgIC0+ICBOYU4NCi1kcXF1YTYyNiBxdWFudGl6ZSAgTmFOICAxZTI5OSAgICAtPiAgTmFODQotZHFxdWE2MjcgcXVhbnRpemUgIE5hTiAgICBJbmYgICAgLT4gIE5hTg0KLWRxcXVhNjI4IHF1YW50aXplICBOYU4gICAgTmFOICAgIC0+ICBOYU4NCi1kcXF1YTYyOSBxdWFudGl6ZSAtSW5mICAgIE5hTiAgICAtPiAgTmFODQotZHFxdWE2MzAgcXVhbnRpemUgLTEwMDAgICBOYU4gICAgLT4gIE5hTg0KLWRxcXVhNjMxIHF1YW50aXplIC0xICAgICAgTmFOICAgIC0+ICBOYU4NCi1kcXF1YTYzMiBxdWFudGl6ZSAgMCAgICAgIE5hTiAgICAtPiAgTmFODQotZHFxdWE2MzMgcXVhbnRpemUgIDEgICAgICBOYU4gICAgLT4gIE5hTg0KLWRxcXVhNjM0IHF1YW50aXplICAxMDAwICAgTmFOICAgIC0+ICBOYU4NCi1kcXF1YTYzNSBxdWFudGl6ZSAgSW5mICAgIE5hTiAgICAtPiAgTmFODQotZHFxdWE2MzYgcXVhbnRpemUgIE5hTiAxZS0wICAgICAgLT4gIE5hTg0KLWRxcXVhNjM3IHF1YW50aXplIC0wICAgICAgTmFOICAgIC0+ICBOYU4NCi0NCi1kcXF1YTY0MSBxdWFudGl6ZSAgc05hTiAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjQyIHF1YW50aXplICBzTmFOIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NDMgcXVhbnRpemUgIHNOYU4gMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY0NCBxdWFudGl6ZSAgc05hTiAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjQ1IHF1YW50aXplICBzTmFOICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NDYgcXVhbnRpemUgIHNOYU4gIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY0NyBxdWFudGl6ZSAgc05hTiAgICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjQ4IHF1YW50aXplICBzTmFOICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NDkgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY1MCBxdWFudGl6ZSAtSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjUxIHF1YW50aXplIC0xMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NTIgcXVhbnRpemUgLTEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY1MyBxdWFudGl6ZSAgMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjU0IHF1YW50aXplICAxICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NTUgcXVhbnRpemUgIDEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY1NiBxdWFudGl6ZSAgSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjU3IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NTggcXVhbnRpemUgIHNOYU4gMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY1OSBxdWFudGl6ZSAtMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcXF1YTY2MSBxdWFudGl6ZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCi1kcXF1YTY2MiBxdWFudGl6ZSAgTmFOOCAgOTE5ICAgLT4gIE5hTjgNCi1kcXF1YTY2MyBxdWFudGl6ZSAgTmFONzEgSW5mICAgLT4gIE5hTjcxDQotZHFxdWE2NjQgcXVhbnRpemUgIE5hTjYgIE5hTjUgIC0+ICBOYU42DQotZHFxdWE2NjUgcXVhbnRpemUgLUluZiAgIE5hTjQgIC0+ICBOYU40DQotZHFxdWE2NjYgcXVhbnRpemUgLTkxOSAgIE5hTjMxIC0+ICBOYU4zMQ0KLWRxcXVhNjY3IHF1YW50aXplICBJbmYgICBOYU4yICAtPiAgTmFOMg0KLQ0KLWRxcXVhNjcxIHF1YW50aXplICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY3MiBxdWFudGl6ZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NzMgcXVhbnRpemUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjc0IHF1YW50aXplICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY3NSBxdWFudGl6ZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NzYgcXVhbnRpemUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjc3IHF1YW50aXplICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY3OCBxdWFudGl6ZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NzkgcXVhbnRpemUgIE5hTiAgICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxcXVhNjgxIHF1YW50aXplIC1OYU45IC1JbmYgICAtPiAtTmFOOQ0KLWRxcXVhNjgyIHF1YW50aXplIC1OYU44ICA5MTkgICAtPiAtTmFOOA0KLWRxcXVhNjgzIHF1YW50aXplIC1OYU43MSBJbmYgICAtPiAtTmFONzENCi1kcXF1YTY4NCBxdWFudGl6ZSAtTmFONiAtTmFONSAgLT4gLU5hTjYNCi1kcXF1YTY4NSBxdWFudGl6ZSAtSW5mICAtTmFONCAgLT4gLU5hTjQNCi1kcXF1YTY4NiBxdWFudGl6ZSAtOTE5ICAtTmFOMzEgLT4gLU5hTjMxDQotZHFxdWE2ODcgcXVhbnRpemUgIEluZiAgLU5hTjIgIC0+IC1OYU4yDQotDQotZHFxdWE2OTEgcXVhbnRpemUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjkyIHF1YW50aXplIC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY5MyBxdWFudGl6ZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2OTQgcXVhbnRpemUgLXNOYU4xNiBzTmFOOTQgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjk1IHF1YW50aXplIC1OYU45NSAtc05hTjkzICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY5NiBxdWFudGl6ZSAtSW5mICAgLXNOYU45MiAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2OTcgcXVhbnRpemUgIDA4OCAgIC1zTmFOOTEgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjk4IHF1YW50aXplICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY5OSBxdWFudGl6ZSAgTmFOICAgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93DQotZHFxdWE3MTAgcXVhbnRpemUgIDEuMDBFLTYxNDMgICAxZS02MTQzICAtPiAgIDFFLTYxNDMgICBSb3VuZGVkDQotZHFxdWE3MTEgcXVhbnRpemUgIDAuMUUtNjE0MyAgICAyZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwNCi1kcXF1YTcxMiBxdWFudGl6ZSAgMC4xMEUtNjE0MyAgIDNlLTYxNDQgIC0+ICAgMUUtNjE0NCAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFxdWE3MTMgcXVhbnRpemUgIDAuMTAwRS02MTQzICA0ZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwgUm91bmRlZA0KLWRxcXVhNzE0IHF1YW50aXplICAwLjAxRS02MTQzICAgNWUtNjE0NSAgLT4gICAxRS02MTQ1ICAgU3Vibm9ybWFsDQotLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4NCi1kcXF1YTcxNSBxdWFudGl6ZSAgMC45OTlFLTYxNDMgIDFlLTYxNDMgIC0+ICAgMUUtNjE0MyAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNzE2IHF1YW50aXplICAwLjA5OUUtNjE0MyAxMGUtNjE0NCAgLT4gICAxRS02MTQ0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbA0KLQ0KLWRxcXVhNzE3IHF1YW50aXplICAwLjAwOUUtNjE0MyAgMWUtNjE0NSAgLT4gICAxRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbA0KLWRxcXVhNzE4IHF1YW50aXplICAwLjAwMUUtNjE0MyAgMWUtNjE0NSAgLT4gICAwRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE3MTkgcXVhbnRpemUgIDAuMDAwOUUtNjE0MyAxZS02MTQ1ICAtPiAgIDBFLTYxNDUgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTcyMCBxdWFudGl6ZSAgMC4wMDAxRS02MTQzIDFlLTYxNDUgIC0+ICAgMEUtNjE0NSAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhNzMwIHF1YW50aXplIC0xLjAwRS02MTQzICAgMWUtNjE0MyAgLT4gIC0xRS02MTQzICAgICBSb3VuZGVkDQotZHFxdWE3MzEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdA0KLWRxcXVhNzMyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBSb3VuZGVkIEluZXhhY3QNCi1kcXF1YTczMyBxdWFudGl6ZSAtMC4xMDBFLTYxNDMgIDFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgUm91bmRlZCBJbmV4YWN0DQotZHFxdWE3MzQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZA0KLS0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluDQotZHFxdWE3MzUgcXVhbnRpemUgLTAuOTk5RS02MTQzIDkwZS02MTQzICAtPiAgLTFFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNzM2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAtMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTczNyBxdWFudGl6ZSAtMC4wMDlFLTYxNDMgLTFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE3MzggcXVhbnRpemUgLTAuMDAxRS02MTQzIC0wZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNzM5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMGUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTc0MCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDQgLT4gIC0xLjBFLTYxNDMgICBSb3VuZGVkDQotZHFxdWE3NDEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwNCi1kcXF1YTc0MiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDQgLT4gIC0xRS02MTQ0ICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFxdWE3NDMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRxcXVhNzQ0IHF1YW50aXplIC0wLjAxRS02MTQzICAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkDQotLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4NCi1kcXF1YTc0NSBxdWFudGl6ZSAtMC45OTlFLTYxNDMgIDFlLTYxNDQgLT4gIC0xLjBFLTYxNDMgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTc0NiBxdWFudGl6ZSAtMC4wOTlFLTYxNDMgIDFlLTYxNDQgLT4gIC0xRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwNCi1kcXF1YTc0NyBxdWFudGl6ZSAtMC4wMDlFLTYxNDMgIDFlLTYxNDQgLT4gIC0wRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNzQ4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE3NDkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAxZS02MTQ0IC0+ICAtMEUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTc1MCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xLjAwRS02MTQzDQotZHFxdWE3NTEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwNCi1kcXF1YTc1MiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbA0KLWRxcXVhNzUzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NSAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXF1YTc1NCBxdWFudGl6ZSAtMC4wMUUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xRS02MTQ1ICAgIFN1Ym5vcm1hbA0KLS0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluDQotZHFxdWE3NTUgcXVhbnRpemUgLTAuOTk5RS02MTQzICAxZS02MTQ1IC0+ICAtMS4wMEUtNjE0MyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE3NTYgcXVhbnRpemUgLTAuMDk5RS02MTQzICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsDQotZHFxdWE3NTcgcXVhbnRpemUgLTAuMDA5RS02MTQzICAxZS02MTQ1IC0+ICAtMUUtNjE0NSAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsDQotZHFxdWE3NTggcXVhbnRpemUgLTAuMDAxRS02MTQzICAxZS02MTQ1IC0+ICAtMEUtNjE0NSAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTc1OSBxdWFudGl6ZSAtMC4wMDAxRS02MTQzIDFlLTYxNDUgLT4gIC0wRS02MTQ1ICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhNzYwIHF1YW50aXplIC0xLjAwRS02MTQzICAgMWUtNjE0NiAtPiAgLTEuMDAwRS02MTQzDQotZHFxdWE3NjEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsDQotZHFxdWE3NjIgcXVhbnRpemUgLTAuMTBFLTYxNDMgICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsDQotZHFxdWE3NjMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsDQotZHFxdWE3NjQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQ2IC0+ICAtMS4wRS02MTQ1ICAgU3Vibm9ybWFsDQotZHFxdWE3NjUgcXVhbnRpemUgLTAuOTk5RS02MTQzICAxZS02MTQ2IC0+ICAtOS45OUUtNjE0NCAgU3Vibm9ybWFsDQotZHFxdWE3NjYgcXVhbnRpemUgLTAuMDk5RS02MTQzICAxZS02MTQ2IC0+ICAtOS45RS02MTQ1ICAgU3Vibm9ybWFsDQotZHFxdWE3NjcgcXVhbnRpemUgLTAuMDA5RS02MTQzICAxZS02MTQ2IC0+ICAtOUUtNjE0NiAgICAgU3Vibm9ybWFsDQotZHFxdWE3NjggcXVhbnRpemUgLTAuMDAxRS02MTQzICAxZS02MTQ2IC0+ICAtMUUtNjE0NiAgICAgU3Vibm9ybWFsDQotZHFxdWE3NjkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAxZS02MTQ2IC0+ICAtMEUtNjE0NiAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTW9yZSBmcm9tIEZ1bmcgTGVlDQotLS0gdGhlIG5leHQgZm91ciB3b3VsZCBhcHBlYXIgdG8gYmUgaW4gZXJyb3IsIGJ1dCB0aGV5IGFyZSBtaXNsZWFkaW5nICh0aGUNCi0tLSBvcGVyYW5kcyB3aWxsIGJlIGNsYW1wZWQgdG8gYSBsb3dlciBleHBvbmVudCkgYW5kIHNvIGFyZSBvbWl0dGVkDQotLS0gZHFxdWExMDIxIHF1YW50aXplICA4LjY2NjY2NjY2NjY2NjAwMEUrNjE0NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzYxNDQgLT4gIDguNjY2NjY2NjY2NjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICBDbGFtcGVkDQotLS0gZHFxdWExMDIyIHF1YW50aXplIC04LjY2NjY2NjY2NjY2NjAwMEUrNjE0NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzYxNDQgLT4gLTguNjY2NjY2NjY2NjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICBDbGFtcGVkDQotLS0gZHFxdWExMDI3IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszMjMgIDFFKzMxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGRxcXVhMTAzMCBxdWFudGl6ZSA4LjY2NjY2NjY2RSszICAgICAgICAgICAxRSszICAgICAtPiA5RSszIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zDQotZHFxdWExMDQwIHF1YW50aXplIC0yMTQ3NDgzNjQ2ICAgICAwIC0+IC0yMTQ3NDgzNjQ2DQotZHFxdWExMDQxIHF1YW50aXplIC0yMTQ3NDgzNjQ3ICAgICAwIC0+IC0yMTQ3NDgzNjQ3DQotZHFxdWExMDQyIHF1YW50aXplIC0yMTQ3NDgzNjQ4ICAgICAwIC0+IC0yMTQ3NDgzNjQ4DQotZHFxdWExMDQzIHF1YW50aXplIC0yMTQ3NDgzNjQ5ICAgICAwIC0+IC0yMTQ3NDgzNjQ5DQotZHFxdWExMDQ0IHF1YW50aXplICAyMTQ3NDgzNjQ2ICAgICAwIC0+ICAyMTQ3NDgzNjQ2DQotZHFxdWExMDQ1IHF1YW50aXplICAyMTQ3NDgzNjQ3ICAgICAwIC0+ICAyMTQ3NDgzNjQ3DQotZHFxdWExMDQ2IHF1YW50aXplICAyMTQ3NDgzNjQ4ICAgICAwIC0+ICAyMTQ3NDgzNjQ4DQotZHFxdWExMDQ3IHF1YW50aXplICAyMTQ3NDgzNjQ5ICAgICAwIC0+ICAyMTQ3NDgzNjQ5DQotZHFxdWExMDQ4IHF1YW50aXplICA0Mjk0OTY3Mjk0ICAgICAwIC0+ICA0Mjk0OTY3Mjk0DQotZHFxdWExMDQ5IHF1YW50aXplICA0Mjk0OTY3Mjk1ICAgICAwIC0+ICA0Mjk0OTY3Mjk1DQotZHFxdWExMDUwIHF1YW50aXplICA0Mjk0OTY3Mjk2ICAgICAwIC0+ICA0Mjk0OTY3Mjk2DQotZHFxdWExMDUxIHF1YW50aXplICA0Mjk0OTY3Mjk3ICAgICAwIC0+ICA0Mjk0OTY3Mjk3DQotDQotLS0gUm91bmRpbmcgc3dhdGhlDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRxcXVhMTEwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kcXF1YTExMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTExMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTExMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTExMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTExMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTExMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTExMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTExMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTExMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl91cA0KLWRxcXVhMTIwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kcXF1YTEyMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEyMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEyMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEyMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEyMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEyMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEyMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEyMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEyMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9kb3duDQotZHFxdWExMzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZA0KLWRxcXVhMTMwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTMwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTMwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTMwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTMwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTMwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTMwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTMwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTMwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiB1cA0KLWRxcXVhMTQwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kcXF1YTE0MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRxcXVhMTUwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kcXF1YTE1MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogY2VpbGluZw0KLWRxcXVhMTYwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kcXF1YTE2MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZmxvb3INCi1kcXF1YTE3MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZHFxdWExNzAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IDA1dXANCi1kcXF1YTE4MDAgcXVhbnRpemUgIDEuMjAwMCAgICAxLjAwICAgIC0+ICAxLjIwICBSb3VuZGVkDQotZHFxdWExODAxIHF1YW50aXplICAxLjIwMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExODAyIHF1YW50aXplICAxLjIwMTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExODAzIHF1YW50aXplICAxLjIwNTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExODA0IHF1YW50aXplICAxLjIwNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExODA3IHF1YW50aXplICAxLjIwNjAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExODA4IHF1YW50aXplICAxLjIwNzAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExODA5IHF1YW50aXplICAxLjIwOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExODExIHF1YW50aXplIC0xLjIwOTkgICAgMS4wMCAgICAtPiAtMS4yMSAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWExOTAwIHF1YW50aXplICAxLjIxMDAgICAgMS4wMCAgICAtPiAgMS4yMSAgUm91bmRlZA0KLWRxcXVhMTkwMSBxdWFudGl6ZSAgMS4yMTAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTkwMiBxdWFudGl6ZSAgMS4yMTEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTkwMyBxdWFudGl6ZSAgMS4yMTUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTkwNCBxdWFudGl6ZSAgMS4yMTUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTkwNyBxdWFudGl6ZSAgMS4yMTYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTkwOCBxdWFudGl6ZSAgMS4yMTcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTkwOSBxdWFudGl6ZSAgMS4yMTk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTkxMSBxdWFudGl6ZSAtMS4yMTk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMjAwMCBxdWFudGl6ZSAgMS4yNDAwICAgIDEuMDAgICAgLT4gIDEuMjQgIFJvdW5kZWQNCi1kcXF1YTIwMDEgcXVhbnRpemUgIDEuMjQwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIwMDIgcXVhbnRpemUgIDEuMjQxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIwMDMgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIwMDQgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIwMDcgcXVhbnRpemUgIDEuMjQ2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIwMDggcXVhbnRpemUgIDEuMjQ3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIwMDkgcXVhbnRpemUgIDEuMjQ5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIwMTEgcXVhbnRpemUgLTEuMjQ5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTIxMDAgcXVhbnRpemUgIDEuMjUwMCAgICAxLjAwICAgIC0+ICAxLjI1ICBSb3VuZGVkDQotZHFxdWEyMTAxIHF1YW50aXplICAxLjI1MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMTAyIHF1YW50aXplICAxLjI1MTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMTAzIHF1YW50aXplICAxLjI1NTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMTA0IHF1YW50aXplICAxLjI1NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMTA3IHF1YW50aXplICAxLjI1NjAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMTA4IHF1YW50aXplICAxLjI1NzAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMTA5IHF1YW50aXplICAxLjI1OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMTExIHF1YW50aXplIC0xLjI1OTkgICAgMS4wMCAgICAtPiAtMS4yNiAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWEyMjAwIHF1YW50aXplICAxLjI2MDAgICAgMS4wMCAgICAtPiAgMS4yNiAgUm91bmRlZA0KLWRxcXVhMjIwMSBxdWFudGl6ZSAgMS4yNjAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjIwMiBxdWFudGl6ZSAgMS4yNjEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjIwMyBxdWFudGl6ZSAgMS4yNjUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjIwNCBxdWFudGl6ZSAgMS4yNjUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjIwNyBxdWFudGl6ZSAgMS4yNjYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjIwOCBxdWFudGl6ZSAgMS4yNjcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjIwOSBxdWFudGl6ZSAgMS4yNjk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjIxMSBxdWFudGl6ZSAtMS4yNjk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMjMwMCBxdWFudGl6ZSAgMS4yOTAwICAgIDEuMDAgICAgLT4gIDEuMjkgIFJvdW5kZWQNCi1kcXF1YTIzMDEgcXVhbnRpemUgIDEuMjkwMSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMDIgcXVhbnRpemUgIDEuMjkxMCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMDMgcXVhbnRpemUgIDEuMjk1MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMDQgcXVhbnRpemUgIDEuMjk1MSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMDcgcXVhbnRpemUgIDEuMjk2MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMDggcXVhbnRpemUgIDEuMjk3MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMDkgcXVhbnRpemUgIDEuMjk5OSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMTEgcXVhbnRpemUgLTEuMjk5OSAgICAxLjAwICAgIC0+IC0xLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFxdWE5OTggcXVhbnRpemUgMTAgICAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTk5OSBxdWFudGl6ZSAgIyAxZTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFRdWFudGl6ZS5kZWNUZXN0IC0tIGRlY1F1YWQgcXVhbnRpemUgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBNb3N0IG9mIHRoZSB0ZXN0cyBoZXJlIGFzc3VtZSBhICJyZWd1bGFyIHBhdHRlcm4iLCB3aGVyZSB0aGUKKy0tIHNpZ24gYW5kIGNvZWZmaWNpZW50IGFyZSArMS4KKy0tIDIwMDQuMDMuMTUgVW5kZXJmbG93IGZvciBxdWFudGl6ZSBpcyBzdXBwcmVzc2VkCistLSAyMDA1LjA2LjA4IE1vcmUgZXh0ZW5zaXZlIHRlc3RzIGZvciAnZG9lcyBub3QgZml0JworLS0gW0ZvcmtlZCBmcm9tIHF1YW50aXplLmRlY1Rlc3QgMjAwNi4xMS4yNV0KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFxdWEwMDEgcXVhbnRpemUgMCAgICAgICAxZTAgICAtPiAwCitkcXF1YTAwMiBxdWFudGl6ZSAxICAgICAgIDFlMCAgIC0+IDEKK2RxcXVhMDAzIHF1YW50aXplIDAuMSAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDA1IHF1YW50aXplIDAuMSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDA2IHF1YW50aXplIDAuMSAgICAgMWUwICAgLT4gMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDA3IHF1YW50aXplIDAuMSAgICAxZS0xICAgLT4gMC4xCitkcXF1YTAwOCBxdWFudGl6ZSAwLjEgICAgMWUtMiAgIC0+IDAuMTAKK2RxcXVhMDA5IHF1YW50aXplIDAuMSAgICAxZS0zICAgLT4gMC4xMDAKK2RxcXVhMDEwIHF1YW50aXplIDAuOSAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDExIHF1YW50aXplIDAuOSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDEyIHF1YW50aXplIDAuOSAgICAxZSswICAgLT4gMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDEzIHF1YW50aXplIDAuOSAgICAxZS0xICAgLT4gMC45CitkcXF1YTAxNCBxdWFudGl6ZSAwLjkgICAgMWUtMiAgIC0+IDAuOTAKK2RxcXVhMDE1IHF1YW50aXplIDAuOSAgICAxZS0zICAgLT4gMC45MDAKKy0tIG5lZ2F0aXZlcworZHFxdWEwMjEgcXVhbnRpemUgLTAgICAgICAxZTAgICAtPiAtMAorZHFxdWEwMjIgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAtMQorZHFxdWEwMjMgcXVhbnRpemUgLTAuMSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDI1IHF1YW50aXplIC0wLjEgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAyNiBxdWFudGl6ZSAtMC4xICAgIDFlMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMjcgcXVhbnRpemUgLTAuMSAgIDFlLTEgICAtPiAtMC4xCitkcXF1YTAyOCBxdWFudGl6ZSAtMC4xICAgMWUtMiAgIC0+IC0wLjEwCitkcXF1YTAyOSBxdWFudGl6ZSAtMC4xICAgMWUtMyAgIC0+IC0wLjEwMAorZHFxdWEwMzAgcXVhbnRpemUgLTAuOSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDMxIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAzMiBxdWFudGl6ZSAtMC45ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMzMgcXVhbnRpemUgLTAuOSAgIDFlLTEgICAtPiAtMC45CitkcXF1YTAzNCBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwCitkcXF1YTAzNSBxdWFudGl6ZSAtMC45ICAgMWUtMyAgIC0+IC0wLjkwMAorZHFxdWEwMzYgcXVhbnRpemUgLTAuNSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDM3IHF1YW50aXplIC0wLjUgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAzOCBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMzkgcXVhbnRpemUgLTAuNSAgIDFlLTEgICAtPiAtMC41CitkcXF1YTA0MCBxdWFudGl6ZSAtMC41ICAgMWUtMiAgIC0+IC0wLjUwCitkcXF1YTA0MSBxdWFudGl6ZSAtMC41ICAgMWUtMyAgIC0+IC0wLjUwMAorZHFxdWEwNDIgcXVhbnRpemUgLTAuOSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDQzIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA0NCBxdWFudGl6ZSAtMC45ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNDUgcXVhbnRpemUgLTAuOSAgIDFlLTEgICAtPiAtMC45CitkcXF1YTA0NiBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwCitkcXF1YTA0NyBxdWFudGl6ZSAtMC45ICAgMWUtMyAgIC0+IC0wLjkwMAorCistLSBleGFtcGxlcyBmcm9tIFNwZWNpZmljYXRpb24KK2RxcXVhMDYwIHF1YW50aXplIDIuMTcgICAwLjAwMSAgLT4gMi4xNzAKK2RxcXVhMDYxIHF1YW50aXplIDIuMTcgICAwLjAxICAgLT4gMi4xNworZHFxdWEwNjIgcXVhbnRpemUgMi4xNyAgIDAuMSAgICAtPiAyLjIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA2MyBxdWFudGl6ZSAyLjE3ICAgMWUrMCAgIC0+IDIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA2NCBxdWFudGl6ZSAyLjE3ICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA2NSBxdWFudGl6ZSAtSW5mICAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFxdWEwNjYgcXVhbnRpemUgMiAgICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMDY3IHF1YW50aXplIC0wLjEgICAgMSAgICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA2OCBxdWFudGl6ZSAtMCAgICAgIDFlKzUgICAgIC0+IC0wRSs1CitkcXF1YTA2OSBxdWFudGl6ZSArMTIzNDUxMjM0NTY3ODk5ODc2NTQzMjE2Nzg5MDEyMzQ1LjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMDcwIHF1YW50aXplIC05ODc2NTEyMzQ1Njc4OTk4NzY1NDMyMTQzMzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWEwNzEgcXVhbnRpemUgMjE3ICAgIDFlLTEgICAtPiAyMTcuMAorZHFxdWEwNzIgcXVhbnRpemUgMjE3ICAgIDFlKzAgICAtPiAyMTcKK2RxcXVhMDczIHF1YW50aXplIDIxNyAgICAxZSsxICAgLT4gMi4yRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNzQgcXVhbnRpemUgMjE3ICAgIDFlKzIgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZAorCistLSBnZW5lcmFsIHRlc3RzIC4uCitkcXF1YTA4OSBxdWFudGl6ZSAxMiAgICAgMWUrNCAgIC0+IDBFKzQgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA5MCBxdWFudGl6ZSAxMiAgICAgMWUrMyAgIC0+IDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA5MSBxdWFudGl6ZSAxMiAgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA5MiBxdWFudGl6ZSAxMiAgICAgMWUrMSAgIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA5MyBxdWFudGl6ZSAxLjIzNDUgMWUtMiAgIC0+IDEuMjMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA5NCBxdWFudGl6ZSAxLjIzNTUgMWUtMiAgIC0+IDEuMjQgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA5NSBxdWFudGl6ZSAxLjIzNDUgMWUtNiAgIC0+IDEuMjM0NTAwCitkcXF1YTA5NiBxdWFudGl6ZSA5Ljk5OTkgMWUtMiAgIC0+IDEwLjAwIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTcgcXVhbnRpemUgMC4wMDAxIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTggcXVhbnRpemUgMC4wMDEgIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTkgcXVhbnRpemUgMC4wMDkgIDFlLTIgICAtPiAwLjAxIEluZXhhY3QgUm91bmRlZAorZHFxdWExMDAgcXVhbnRpemUgOTIgICAgIDFlKzIgICAtPiAxRSsyIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTEwMSBxdWFudGl6ZSAtMSAgICAgIDFlMCAgIC0+ICAtMQorZHFxdWExMDIgcXVhbnRpemUgLTEgICAgIDFlLTEgICAtPiAgLTEuMAorZHFxdWExMDMgcXVhbnRpemUgLTEgICAgIDFlLTIgICAtPiAgLTEuMDAKK2RxcXVhMTA0IHF1YW50aXplICAwICAgICAgMWUwICAgLT4gIDAKK2RxcXVhMTA1IHF1YW50aXplICAwICAgICAxZS0xICAgLT4gIDAuMAorZHFxdWExMDYgcXVhbnRpemUgIDAgICAgIDFlLTIgICAtPiAgMC4wMAorZHFxdWExMDcgcXVhbnRpemUgIDAuMDAgICAxZTAgICAtPiAgMAorZHFxdWExMDggcXVhbnRpemUgIDAgICAgIDFlKzEgICAtPiAgMEUrMQorZHFxdWExMDkgcXVhbnRpemUgIDAgICAgIDFlKzIgICAtPiAgMEUrMgorZHFxdWExMTAgcXVhbnRpemUgKzEgICAgICAxZTAgICAtPiAgMQorZHFxdWExMTEgcXVhbnRpemUgKzEgICAgIDFlLTEgICAtPiAgMS4wCitkcXF1YTExMiBxdWFudGl6ZSArMSAgICAgMWUtMiAgIC0+ICAxLjAwCisKK2RxcXVhMTIwIHF1YW50aXplICAgMS4wNCAgMWUtMyAtPiAgMS4wNDAKK2RxcXVhMTIxIHF1YW50aXplICAgMS4wNCAgMWUtMiAtPiAgMS4wNAorZHFxdWExMjIgcXVhbnRpemUgICAxLjA0ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMyBxdWFudGl6ZSAgIDEuMDQgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyNCBxdWFudGl6ZSAgIDEuMDUgIDFlLTMgLT4gIDEuMDUwCitkcXF1YTEyNSBxdWFudGl6ZSAgIDEuMDUgIDFlLTIgLT4gIDEuMDUKK2RxcXVhMTI2IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzEgcXVhbnRpemUgICAxLjA1ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzIgcXVhbnRpemUgICAxLjA2ICAxZS0zIC0+ICAxLjA2MAorZHFxdWExMzMgcXVhbnRpemUgICAxLjA2ICAxZS0yIC0+ICAxLjA2CitkcXF1YTEzNCBxdWFudGl6ZSAgIDEuMDYgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTM1IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWExNDAgcXVhbnRpemUgICAtMTAgICAgMWUtMiAgLT4gIC0xMC4wMAorZHFxdWExNDEgcXVhbnRpemUgICArMSAgICAgMWUtMiAgLT4gIDEuMDAKK2RxcXVhMTQyIHF1YW50aXplICAgKzEwICAgIDFlLTIgIC0+ICAxMC4wMAorZHFxdWExNDMgcXVhbnRpemUgICAxRSszNyAgMWUtMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWExNDQgcXVhbnRpemUgICAxRS0zNyAgMWUtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0NSBxdWFudGl6ZSAgIDFFLTMgICAxZS0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQ2IHF1YW50aXplICAgMUUtMiAgIDFlLTIgIC0+ICAwLjAxCitkcXF1YTE0NyBxdWFudGl6ZSAgIDFFLTEgICAxZS0yICAtPiAgMC4xMAorZHFxdWExNDggcXVhbnRpemUgICAwRS0zNyAgMWUtMiAgLT4gIDAuMDAKKworZHFxdWExNTAgcXVhbnRpemUgICAxLjA2MDAgMWUtNSAtPiAgMS4wNjAwMAorZHFxdWExNTEgcXVhbnRpemUgICAxLjA2MDAgMWUtNCAtPiAgMS4wNjAwCitkcXF1YTE1MiBxdWFudGl6ZSAgIDEuMDYwMCAxZS0zIC0+ICAxLjA2MCBSb3VuZGVkCitkcXF1YTE1MyBxdWFudGl6ZSAgIDEuMDYwMCAxZS0yIC0+ICAxLjA2IFJvdW5kZWQKK2RxcXVhMTU0IHF1YW50aXplICAgMS4wNjAwIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTU1IHF1YW50aXplICAgMS4wNjAwICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIGEgY291cGxlIHdoZXJlIHJvdW5kaW5nIHdhcyBkaWZmZXJlbnQgaW4gYmFzZSB0ZXN0cworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RxcXVhMTU3IHF1YW50aXplIC0wLjUgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1OCBxdWFudGl6ZSAgIDEuMDUgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTU5IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gYmFzZSB0ZXN0cyB3aXRoIG5vbi0xIGNvZWZmaWNpZW50cworZHFxdWExNjEgcXVhbnRpemUgMCAgICAgIC05ZTAgICAtPiAwCitkcXF1YTE2MiBxdWFudGl6ZSAxICAgICAgLTdlMCAgIC0+IDEKK2RxcXVhMTYzIHF1YW50aXplIDAuMSAgIC0xZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTY1IHF1YW50aXplIDAuMSAgICAwZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTY2IHF1YW50aXplIDAuMSAgICAgMmUwICAgLT4gMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTY3IHF1YW50aXplIDAuMSAgICAzZS0xICAgLT4gMC4xCitkcXF1YTE2OCBxdWFudGl6ZSAwLjEgICA0NGUtMiAgIC0+IDAuMTAKK2RxcXVhMTY5IHF1YW50aXplIDAuMSAgNTU1ZS0zICAgLT4gMC4xMDAKK2RxcXVhMTcwIHF1YW50aXplIDAuOSA2NjY2ZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcxIHF1YW50aXplIDAuOSAtNzc3ZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcyIHF1YW50aXplIDAuOSAgLTg4ZSswICAgLT4gMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTczIHF1YW50aXplIDAuOSAgIC05ZS0xICAgLT4gMC45CitkcXF1YTE3NCBxdWFudGl6ZSAwLjkgICAgMGUtMiAgIC0+IDAuOTAKK2RxcXVhMTc1IHF1YW50aXplIDAuOSAgMS4xZS0zICAgLT4gMC45MDAwCistLSBuZWdhdGl2ZXMKK2RxcXVhMTgxIHF1YW50aXplIC0wICAgIDEuMWUwICAgLT4gLTAuMAorZHFxdWExODIgcXVhbnRpemUgLTEgICAgIC0xZTAgICAtPiAtMQorZHFxdWExODMgcXVhbnRpemUgLTAuMSAgMTFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTg1IHF1YW50aXplIC0wLjEgMTExZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4NiBxdWFudGl6ZSAtMC4xICAgNzFlMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZHFxdWExODcgcXVhbnRpemUgLTAuMSAtOTFlLTEgICAtPiAtMC4xCitkcXF1YTE4OCBxdWFudGl6ZSAtMC4xIC0uMWUtMiAgIC0+IC0wLjEwMAorZHFxdWExODkgcXVhbnRpemUgLTAuMSAgLTFlLTMgICAtPiAtMC4xMDAKK2RxcXVhMTkwIHF1YW50aXplIC0wLjkgICAwZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MSBxdWFudGl6ZSAtMC45ICAtMGUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTIgcXVhbnRpemUgLTAuOSAtMTBlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkzIHF1YW50aXplIC0wLjkgMTAwZS0xICAgLT4gLTAuOQorZHFxdWExOTQgcXVhbnRpemUgLTAuOSA5OTllLTIgICAtPiAtMC45MAorCistLSArdmUgZXhwb25lbnRzIC4uCitkcXF1YTIwMSBxdWFudGl6ZSAgIC0xICAgMWUrMCAtPiAgLTEKK2RxcXVhMjAyIHF1YW50aXplICAgLTEgICAxZSsxIC0+ICAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjAzIHF1YW50aXplICAgLTEgICAxZSsyIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjA0IHF1YW50aXplICAgIDAgICAxZSswIC0+ICAwCitkcXF1YTIwNSBxdWFudGl6ZSAgICAwICAgMWUrMSAtPiAgMEUrMQorZHFxdWEyMDYgcXVhbnRpemUgICAgMCAgIDFlKzIgLT4gIDBFKzIKK2RxcXVhMjA3IHF1YW50aXplICAgKzEgICAxZSswIC0+ICAxCitkcXF1YTIwOCBxdWFudGl6ZSAgICsxICAgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjA5IHF1YW50aXplICAgKzEgICAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTIyMCBxdWFudGl6ZSAgIDEuMDQgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIxIHF1YW50aXplICAgMS4wNCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjIgcXVhbnRpemUgICAxLjA0IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMyBxdWFudGl6ZSAgIDEuMDQgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjI0IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjUgcXVhbnRpemUgICAxLjA1IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyNiBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjI3IHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjggcXVhbnRpemUgICAxLjA1IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyOSBxdWFudGl6ZSAgIDEuMDUgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMwIHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzEgcXVhbnRpemUgICAxLjA1IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMiBxdWFudGl6ZSAgIDEuMDYgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMzIHF1YW50aXplICAgMS4wNiAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzQgcXVhbnRpemUgICAxLjA2IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzNSBxdWFudGl6ZSAgIDEuMDYgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyNDAgcXVhbnRpemUgICAtMTAgICAxZSsxICAtPiAgLTFFKzEgUm91bmRlZAorZHFxdWEyNDEgcXVhbnRpemUgICArMSAgICAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjQyIHF1YW50aXplICAgKzEwICAgMWUrMSAgLT4gIDFFKzEgUm91bmRlZAorZHFxdWEyNDMgcXVhbnRpemUgICAxRSsxICAxZSsxICAtPiAgMUUrMSAgICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI0NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzEgIC0+ICAxLjBFKzIgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RxcXVhMjQ1IHF1YW50aXplICAgMUUrMyAgMWUrMSAgLT4gIDEuMDBFKzMgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNDYgcXVhbnRpemUgICAxRSs0ICAxZSsxICAtPiAgMS4wMDBFKzQgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI0NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzEgIC0+ICAxLjAwMDBFKzUgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RxcXVhMjQ4IHF1YW50aXplICAgMUUrNiAgMWUrMSAgLT4gIDEuMDAwMDBFKzYgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNDkgcXVhbnRpemUgICAxRSs3ICAxZSsxICAtPiAgMS4wMDAwMDBFKzcgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI1MCBxdWFudGl6ZSAgIDFFKzggIDFlKzEgIC0+ICAxLjAwMDAwMDBFKzggIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RxcXVhMjUxIHF1YW50aXplICAgMUUrOSAgMWUrMSAgLT4gIDEuMDAwMDAwMDBFKzkgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorLS0gbmV4dCBvbmUgdHJpZXMgdG8gYWRkIDkgemVyb3MKK2RxcXVhMjUyIHF1YW50aXplICAgMUUrMzcgMWUrMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWEyNTMgcXVhbnRpemUgICAxRS0zNyAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjU0IHF1YW50aXplICAgMUUtMiAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI1NSBxdWFudGl6ZSAgIDBFLTM3IDFlKzEgIC0+ICAwRSsxCitkcXF1YTI1NiBxdWFudGl6ZSAgLTBFLTM3IDFlKzEgIC0+IC0wRSsxCitkcXF1YTI1NyBxdWFudGl6ZSAgLTBFLTEgIDFlKzEgIC0+IC0wRSsxCitkcXF1YTI1OCBxdWFudGl6ZSAgLTAgICAgIDFlKzEgIC0+IC0wRSsxCitkcXF1YTI1OSBxdWFudGl6ZSAgLTBFKzEgIDFlKzEgIC0+IC0wRSsxCisKK2RxcXVhMjYwIHF1YW50aXplICAgLTEwICAgMWUrMiAgLT4gIC0wRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNjEgcXVhbnRpemUgICArMSAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjYyIHF1YW50aXplICAgKzEwICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI2MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNjQgcXVhbnRpemUgICAxRSsyICAxZSsyICAtPiAgMUUrMgorZHFxdWEyNjUgcXVhbnRpemUgICAxRSszICAxZSsyICAtPiAgMS4wRSszCitkcXF1YTI2NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzIgIC0+ICAxLjAwRSs0CitkcXF1YTI2NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzIgIC0+ICAxLjAwMEUrNQorZHFxdWEyNjggcXVhbnRpemUgICAxRSs2ICAxZSsyICAtPiAgMS4wMDAwRSs2CitkcXF1YTI2OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzIgIC0+ICAxLjAwMDAwRSs3CitkcXF1YTI3MCBxdWFudGl6ZSAgIDFFKzggIDFlKzIgIC0+ICAxLjAwMDAwMEUrOAorZHFxdWEyNzEgcXVhbnRpemUgICAxRSs5ICAxZSsyICAtPiAgMS4wMDAwMDAwRSs5CitkcXF1YTI3MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzIgIC0+ICAxLjAwMDAwMDAwRSsxMAorZHFxdWEyNzMgcXVhbnRpemUgICAxRS0xMCAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjc0IHF1YW50aXplICAgMUUtMiAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI3NSBxdWFudGl6ZSAgIDBFLTEwIDFlKzIgIC0+ICAwRSsyCisKK2RxcXVhMjgwIHF1YW50aXplICAgLTEwICAgMWUrMyAgLT4gIC0wRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyODEgcXVhbnRpemUgICArMSAgICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjgyIHF1YW50aXplICAgKzEwICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI4MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyODQgcXVhbnRpemUgICAxRSsyICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjg1IHF1YW50aXplICAgMUUrMyAgMWUrMyAgLT4gIDFFKzMKK2RxcXVhMjg2IHF1YW50aXplICAgMUUrNCAgMWUrMyAgLT4gIDEuMEUrNAorZHFxdWEyODcgcXVhbnRpemUgICAxRSs1ICAxZSszICAtPiAgMS4wMEUrNQorZHFxdWEyODggcXVhbnRpemUgICAxRSs2ICAxZSszICAtPiAgMS4wMDBFKzYKK2RxcXVhMjg5IHF1YW50aXplICAgMUUrNyAgMWUrMyAgLT4gIDEuMDAwMEUrNworZHFxdWEyOTAgcXVhbnRpemUgICAxRSs4ICAxZSszICAtPiAgMS4wMDAwMEUrOAorZHFxdWEyOTEgcXVhbnRpemUgICAxRSs5ICAxZSszICAtPiAgMS4wMDAwMDBFKzkKK2RxcXVhMjkyIHF1YW50aXplICAgMUUrMTAgMWUrMyAgLT4gIDEuMDAwMDAwMEUrMTAKK2RxcXVhMjkzIHF1YW50aXplICAgMUUtMTAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI5NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyOTUgcXVhbnRpemUgICAwRS0xMCAxZSszICAtPiAgMEUrMworCistLSByb3VuZCB1cCBmcm9tIGJlbG93IFtzaWduIHdyb25nIGluIEpJVCBjb21waWxlciBvbmNlXQorZHFxdWEzMDAgcXVhbnRpemUgICAwLjAwNzggMWUtNSAtPiAgMC4wMDc4MAorZHFxdWEzMDEgcXVhbnRpemUgICAwLjAwNzggMWUtNCAtPiAgMC4wMDc4CitkcXF1YTMwMiBxdWFudGl6ZSAgIDAuMDA3OCAxZS0zIC0+ICAwLjAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzAzIHF1YW50aXplICAgMC4wMDc4IDFlLTIgLT4gIDAuMDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMwNCBxdWFudGl6ZSAgIDAuMDA3OCAxZS0xIC0+ICAwLjAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMwNSBxdWFudGl6ZSAgIDAuMDA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMDYgcXVhbnRpemUgICAwLjAwNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzA3IHF1YW50aXplICAgMC4wMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMzEwIHF1YW50aXplICAtMC4wMDc4IDFlLTUgLT4gLTAuMDA3ODAKK2RxcXVhMzExIHF1YW50aXplICAtMC4wMDc4IDFlLTQgLT4gLTAuMDA3OAorZHFxdWEzMTIgcXVhbnRpemUgIC0wLjAwNzggMWUtMyAtPiAtMC4wMDggSW5leGFjdCBSb3VuZGVkCitkcXF1YTMxMyBxdWFudGl6ZSAgLTAuMDA3OCAxZS0yIC0+IC0wLjAxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMTQgcXVhbnRpemUgIC0wLjAwNzggMWUtMSAtPiAtMC4wIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMTUgcXVhbnRpemUgIC0wLjAwNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzE2IHF1YW50aXplICAtMC4wMDc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMxNyBxdWFudGl6ZSAgLTAuMDA3OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTMyMCBxdWFudGl6ZSAgIDAuMDc4IDFlLTUgLT4gIDAuMDc4MDAKK2RxcXVhMzIxIHF1YW50aXplICAgMC4wNzggMWUtNCAtPiAgMC4wNzgwCitkcXF1YTMyMiBxdWFudGl6ZSAgIDAuMDc4IDFlLTMgLT4gIDAuMDc4CitkcXF1YTMyMyBxdWFudGl6ZSAgIDAuMDc4IDFlLTIgLT4gIDAuMDggSW5leGFjdCBSb3VuZGVkCitkcXF1YTMyNCBxdWFudGl6ZSAgIDAuMDc4IDFlLTEgLT4gIDAuMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzI1IHF1YW50aXplICAgMC4wNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzI2IHF1YW50aXplICAgMC4wNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzI3IHF1YW50aXplICAgMC4wNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEzMzAgcXVhbnRpemUgIC0wLjA3OCAxZS01IC0+IC0wLjA3ODAwCitkcXF1YTMzMSBxdWFudGl6ZSAgLTAuMDc4IDFlLTQgLT4gLTAuMDc4MAorZHFxdWEzMzIgcXVhbnRpemUgIC0wLjA3OCAxZS0zIC0+IC0wLjA3OAorZHFxdWEzMzMgcXVhbnRpemUgIC0wLjA3OCAxZS0yIC0+IC0wLjA4IEluZXhhY3QgUm91bmRlZAorZHFxdWEzMzQgcXVhbnRpemUgIC0wLjA3OCAxZS0xIC0+IC0wLjEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMzNSBxdWFudGl6ZSAgLTAuMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMzNiBxdWFudGl6ZSAgLTAuMDc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMzNyBxdWFudGl6ZSAgLTAuMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMzQwIHF1YW50aXplICAgMC43OCAxZS01IC0+ICAwLjc4MDAwCitkcXF1YTM0MSBxdWFudGl6ZSAgIDAuNzggMWUtNCAtPiAgMC43ODAwCitkcXF1YTM0MiBxdWFudGl6ZSAgIDAuNzggMWUtMyAtPiAgMC43ODAKK2RxcXVhMzQzIHF1YW50aXplICAgMC43OCAxZS0yIC0+ICAwLjc4CitkcXF1YTM0NCBxdWFudGl6ZSAgIDAuNzggMWUtMSAtPiAgMC44IEluZXhhY3QgUm91bmRlZAorZHFxdWEzNDUgcXVhbnRpemUgICAwLjc4ICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM0NiBxdWFudGl6ZSAgIDAuNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzQ3IHF1YW50aXplICAgMC43OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTM1MCBxdWFudGl6ZSAgLTAuNzggMWUtNSAtPiAtMC43ODAwMAorZHFxdWEzNTEgcXVhbnRpemUgIC0wLjc4IDFlLTQgLT4gLTAuNzgwMAorZHFxdWEzNTIgcXVhbnRpemUgIC0wLjc4IDFlLTMgLT4gLTAuNzgwCitkcXF1YTM1MyBxdWFudGl6ZSAgLTAuNzggMWUtMiAtPiAtMC43OAorZHFxdWEzNTQgcXVhbnRpemUgIC0wLjc4IDFlLTEgLT4gLTAuOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzU1IHF1YW50aXplICAtMC43OCAgMWUwIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNTYgcXVhbnRpemUgIC0wLjc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM1NyBxdWFudGl6ZSAgLTAuNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEzNjAgcXVhbnRpemUgICA3LjggMWUtNSAtPiAgNy44MDAwMAorZHFxdWEzNjEgcXVhbnRpemUgICA3LjggMWUtNCAtPiAgNy44MDAwCitkcXF1YTM2MiBxdWFudGl6ZSAgIDcuOCAxZS0zIC0+ICA3LjgwMAorZHFxdWEzNjMgcXVhbnRpemUgICA3LjggMWUtMiAtPiAgNy44MAorZHFxdWEzNjQgcXVhbnRpemUgICA3LjggMWUtMSAtPiAgNy44CitkcXF1YTM2NSBxdWFudGl6ZSAgIDcuOCAgMWUwIC0+ICA4IEluZXhhY3QgUm91bmRlZAorZHFxdWEzNjYgcXVhbnRpemUgICA3LjggMWUrMSAtPiAgMUUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzY3IHF1YW50aXplICAgNy44IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM2OCBxdWFudGl6ZSAgIDcuOCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTM3MCBxdWFudGl6ZSAgLTcuOCAxZS01IC0+IC03LjgwMDAwCitkcXF1YTM3MSBxdWFudGl6ZSAgLTcuOCAxZS00IC0+IC03LjgwMDAKK2RxcXVhMzcyIHF1YW50aXplICAtNy44IDFlLTMgLT4gLTcuODAwCitkcXF1YTM3MyBxdWFudGl6ZSAgLTcuOCAxZS0yIC0+IC03LjgwCitkcXF1YTM3NCBxdWFudGl6ZSAgLTcuOCAxZS0xIC0+IC03LjgKK2RxcXVhMzc1IHF1YW50aXplICAtNy44ICAxZTAgLT4gLTggSW5leGFjdCBSb3VuZGVkCitkcXF1YTM3NiBxdWFudGl6ZSAgLTcuOCAxZSsxIC0+IC0xRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNzcgcXVhbnRpemUgIC03LjggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzc4IHF1YW50aXplICAtNy44IDFlKzMgLT4gLTBFKzMgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgaW5kaXZpZHVhbHMKK2RxcXVhMzgwIHF1YW50aXplICAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzODEgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNiAxZS0yIC0+IDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2CitkcXF1YTM4MiBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTM4MyBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1MDYgIDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTM4NCBxdWFudGl6ZSAgLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM4NSBxdWFudGl6ZSAgLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2CitkcXF1YTM4NiBxdWFudGl6ZSAgLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTM4NyBxdWFudGl6ZSAgLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1MDYgIDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3JvdW5kaW5nOiBkb3duCitkcXF1YTM4OSBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3VuZGluZzogaGFsZl91cAorCistLSBhbmQgYSBmZXcgbW9yZSBmcm9tIGUtbWFpbCBkaXNjdXNzaW9ucworZHFxdWEzOTEgcXVhbnRpemUgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1Njc4OTEyLjM0NTY3ICAxZS0zIC0+IDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1Njc4OTEyLjM0NiAgIEluZXhhY3QgUm91bmRlZAorZHFxdWEzOTIgcXVhbnRpemUgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1Njc4OTEyMy40NTY3ICAxZS0zIC0+IDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1Njc4OTEyMy40NTcgIEluZXhhY3QgUm91bmRlZAorZHFxdWEzOTMgcXVhbnRpemUgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1Njc4OTEyMzQ1NjcuICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzb21lIDk5OTkgcm91bmQtdXAgY2FzZXMKK2RxcXVhNDAwIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTUgIC0+ICA5Ljk5OTAwCitkcXF1YTQwMSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS00ICAtPiAgOS45OTkwCitkcXF1YTQwMiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0zICAtPiAgOS45OTkKK2RxcXVhNDAzIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTIgIC0+IDEwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDA0IHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTEgIC0+IDEwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDA1IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTAgIC0+IDEwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDA2IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTEgIC0+IDFFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDA3IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTIgIC0+IDBFKzIgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE0MTAgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtNSAgLT4gIDAuOTk5MDAKK2RxcXVhNDExIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTQgIC0+ICAwLjk5OTAKK2RxcXVhNDEyIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTMgIC0+ICAwLjk5OQorZHFxdWE0MTMgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMiAgLT4gIDEuMDAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MTQgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMSAgLT4gIDEuMCAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MTUgcXVhbnRpemUgICAwLjk5OSAgICAgICAgIDFlMCAgLT4gIDEgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MTYgcXVhbnRpemUgICAwLjk5OSAgICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTQyMCBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS01ICAtPiAgMC4wOTk5MAorZHFxdWE0MjEgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNCAgLT4gIDAuMDk5OQorZHFxdWE0MjIgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMyAgLT4gIDAuMTAwICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MjMgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMiAgLT4gIDAuMTAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MjQgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMSAgLT4gIDAuMSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MjUgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MjYgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTQzMCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS01ICAtPiAgMC4wMDk5OQorZHFxdWE0MzEgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNCAgLT4gIDAuMDEwMCAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MzIgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMyAgLT4gIDAuMDEwICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MzMgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMiAgLT4gIDAuMDEgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MzQgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MzUgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MzYgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTQ0MCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS01ICAtPiAgMC4wMDEwMCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ0MSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS00ICAtPiAgMC4wMDEwICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ0MiBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0zICAtPiAgMC4wMDEgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ0MyBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0yICAtPiAgMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ0NCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ0NSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ0NiBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMTAwMSBxdWFudGl6ZSAgMC4wMDAgICAgICAgIDAuMDAxIC0+ICAwLjAwMAorZHFxdWExMDAyIHF1YW50aXplICAwLjAwMSAgICAgICAgMC4wMDEgLT4gIDAuMDAxCitkcXF1YTEwMDMgcXVhbnRpemUgIDAuMDAxMiAgICAgICAwLjAwMSAtPiAgMC4wMDEgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMDA0IHF1YW50aXplICAwLjAwMTggICAgICAgMC4wMDEgLT4gIDAuMDAyICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTAwNSBxdWFudGl6ZSAgMC41MDEgICAgICAgIDAuMDAxIC0+ICAwLjUwMQorZHFxdWExMDA2IHF1YW50aXplICAwLjUwMTIgICAgICAgMC4wMDEgLT4gIDAuNTAxICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTAwNyBxdWFudGl6ZSAgMC41MDE4ICAgICAgIDAuMDAxIC0+ICAwLjUwMiAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEwMDggcXVhbnRpemUgIDAuOTk5ICAgICAgICAwLjAwMSAtPiAgMC45OTkKKworZHFxdWE0ODEgcXVhbnRpemUgMTIzNDU2NzgwMDAgMWUrMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQKK2RxcXVhNDgyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitkcXF1YTQ4MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorZHFxdWE0ODQgcXVhbnRpemUgMTIzNDU2Nzg5MSAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZHFxdWE0ODUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDg2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKKy0tIGEgcG90ZW50aWFsIGRvdWJsZS1yb3VuZAorZHFxdWE0ODcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ4OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE0OTEgcXVhbnRpemUgMTIzNDU2NzgwMDAgMWUrMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQKK2RxcXVhNDkyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitkcXF1YTQ5MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorZHFxdWE0OTQgcXVhbnRpemUgMTIzNDU2Nzg5MSAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZHFxdWE0OTUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDk2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDk3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorZHFxdWE0OTggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCisKKy0tIFplcm9zCitkcXF1YTUwMCBxdWFudGl6ZSAgIDAgICAgIDFlMSAtPiAgMEUrMQorZHFxdWE1MDEgcXVhbnRpemUgICAwICAgICAxZTAgLT4gIDAKK2RxcXVhNTAyIHF1YW50aXplICAgMCAgICAxZS0xIC0+ICAwLjAKK2RxcXVhNTAzIHF1YW50aXplICAgMC4wICAxZS0xIC0+ICAwLjAKK2RxcXVhNTA0IHF1YW50aXplICAgMC4wICAgMWUwIC0+ICAwCitkcXF1YTUwNSBxdWFudGl6ZSAgIDAuMCAgMWUrMSAtPiAgMEUrMQorZHFxdWE1MDYgcXVhbnRpemUgICAwRSsxIDFlLTEgLT4gIDAuMAorZHFxdWE1MDcgcXVhbnRpemUgICAwRSsxICAxZTAgLT4gIDAKK2RxcXVhNTA4IHF1YW50aXplICAgMEUrMSAxZSsxIC0+ICAwRSsxCitkcXF1YTUwOSBxdWFudGl6ZSAgLTAgICAgIDFlMSAtPiAtMEUrMQorZHFxdWE1MTAgcXVhbnRpemUgIC0wICAgICAxZTAgLT4gLTAKK2RxcXVhNTExIHF1YW50aXplICAtMCAgICAxZS0xIC0+IC0wLjAKK2RxcXVhNTEyIHF1YW50aXplICAtMC4wICAxZS0xIC0+IC0wLjAKK2RxcXVhNTEzIHF1YW50aXplICAtMC4wICAgMWUwIC0+IC0wCitkcXF1YTUxNCBxdWFudGl6ZSAgLTAuMCAgMWUrMSAtPiAtMEUrMQorZHFxdWE1MTUgcXVhbnRpemUgIC0wRSsxIDFlLTEgLT4gLTAuMAorZHFxdWE1MTYgcXVhbnRpemUgIC0wRSsxICAxZTAgLT4gLTAKK2RxcXVhNTE3IHF1YW50aXplICAtMEUrMSAxZSsxIC0+IC0wRSsxCistLSAjNTE5IGhlcmUgb25jZSBhIHByb2JsZW0KK2RxcXVhNTE4IHF1YW50aXplICAwICAgIDBFLTMgIC0+IDAuMDAwCitkcXF1YTUxOSBxdWFudGl6ZSAgMCAgICAwRS0zMyAtPiAwRS0zMworZHFxdWE1MjAgcXVhbnRpemUgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAwRS0zMyAtPiAwRS0zMworZHFxdWE1MjEgcXVhbnRpemUgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwRS0zMyAtPiAwRS0zMworCistLSBTb21lIG5vbi16ZXJvcyB3aXRoIGxvdHMgb2YgcGFkZGluZyBvbiB0aGUgcmlnaHQKK2RxcXVhNTIzIHF1YW50aXplICAgMSAgIDBFLTMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXF1YTUyNCBxdWFudGl6ZSAgMTIgICAwRS0zMiAtPiAxMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFxdWE1MjUgcXVhbnRpemUgMTIzICAgMEUtMzEgLT4gMTIzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxcXVhNTI2IHF1YW50aXplIDEyMyAgIDBFLTMyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1MjcgcXVhbnRpemUgMTIzLjQgMEUtMzEgLT4gMTIzLjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxcXVhNTI4IHF1YW50aXplIDEyMy40IDBFLTMyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBTdXNwaWNpb3VzIFJIUyB2YWx1ZXMKK2RxcXVhNTMwIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorZHFxdWE1MzEgcXVhbnRpemUgMTIzLjQ1NiAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCitkcXF1YTUzMiBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNTMzIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBmb3VyIGFyZSAid29uJ3QgZml0IiBvdmVyZmxvd3MKK2RxcXVhNTM2IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTUzNyBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1MzggcXVhbnRpemUgICAxLjIzNCAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTM5IHF1YW50aXplIDEyMy40NTYgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxcXVhNTQyIHF1YW50aXplICAgMS4yMzRFKzI5OSAgICAxZTI5OSAtPiAxRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTU0MyBxdWFudGl6ZSAgIDEuMjM0RSsyOTggICAgMWUyOTkgLT4gMEUrMjk5ICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE1NDQgcXVhbnRpemUgICAxLjIzNCAgICAgICAgIDFlMjk5IC0+IDBFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNTQ3IHF1YW50aXplICAgMCAgICAgICAgICAgIDFlLTI5OSAtPiAwRS0yOTkKKy0tIG5leHQgdHdvIGFyZSAid29uJ3QgZml0IiBvdmVyZmxvd3MKK2RxcXVhNTQ4IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTQ5IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlLTMwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIFttb3JlIGJlbG93XQorCistLSBTcGVjaWFscworZHFxdWE1ODAgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5CitkcXF1YTU4MSBxdWFudGl6ZSAgSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1ODIgcXVhbnRpemUgIEluZiAgMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTgzIHF1YW50aXplICBJbmYgICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU4NCBxdWFudGl6ZSAgSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1ODUgcXVhbnRpemUgIEluZiAgIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTg2IHF1YW50aXplICBJbmYgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFxdWE1ODcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTg4IHF1YW50aXplIC1JbmYgICAgIEluZiAgIC0+ICAtSW5maW5pdHkKK2RxcXVhNTg5IHF1YW50aXplIC0xICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU5MCBxdWFudGl6ZSAgMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1OTEgcXVhbnRpemUgIDEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTkyIHF1YW50aXplICAxMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU5MyBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxcXVhNTk0IHF1YW50aXplICBJbmYgIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU5NSBxdWFudGl6ZSAtMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkcXF1YTYwMCBxdWFudGl6ZSAtSW5mICAgIC1JbmYgICAtPiAgLUluZmluaXR5CitkcXF1YTYwMSBxdWFudGl6ZSAtSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MDIgcXVhbnRpemUgLUluZiAgMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjAzIHF1YW50aXplIC1JbmYgICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYwNCBxdWFudGl6ZSAtSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MDUgcXVhbnRpemUgLUluZiAgIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjA2IHF1YW50aXplIC1JbmYgICAgIEluZiAgIC0+ICAtSW5maW5pdHkKK2RxcXVhNjA3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYwOCBxdWFudGl6ZSAtSW5mICAgIC1JbmYgICAtPiAgLUluZmluaXR5CitkcXF1YTYwOSBxdWFudGl6ZSAtMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MTAgcXVhbnRpemUgIDAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjExIHF1YW50aXplICAxICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYxMiBxdWFudGl6ZSAgMTAwMCAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MTMgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5CitkcXF1YTYxNCBxdWFudGl6ZSAtSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MTUgcXVhbnRpemUgLTAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZHFxdWE2MjEgcXVhbnRpemUgIE5hTiAgIC1JbmYgICAgLT4gIE5hTgorZHFxdWE2MjIgcXVhbnRpemUgIE5hTiAxZS0yOTkgICAgLT4gIE5hTgorZHFxdWE2MjMgcXVhbnRpemUgIE5hTiAxZS0xICAgICAgLT4gIE5hTgorZHFxdWE2MjQgcXVhbnRpemUgIE5hTiAgMWUwICAgICAgLT4gIE5hTgorZHFxdWE2MjUgcXVhbnRpemUgIE5hTiAgMWUxICAgICAgLT4gIE5hTgorZHFxdWE2MjYgcXVhbnRpemUgIE5hTiAgMWUyOTkgICAgLT4gIE5hTgorZHFxdWE2MjcgcXVhbnRpemUgIE5hTiAgICBJbmYgICAgLT4gIE5hTgorZHFxdWE2MjggcXVhbnRpemUgIE5hTiAgICBOYU4gICAgLT4gIE5hTgorZHFxdWE2MjkgcXVhbnRpemUgLUluZiAgICBOYU4gICAgLT4gIE5hTgorZHFxdWE2MzAgcXVhbnRpemUgLTEwMDAgICBOYU4gICAgLT4gIE5hTgorZHFxdWE2MzEgcXVhbnRpemUgLTEgICAgICBOYU4gICAgLT4gIE5hTgorZHFxdWE2MzIgcXVhbnRpemUgIDAgICAgICBOYU4gICAgLT4gIE5hTgorZHFxdWE2MzMgcXVhbnRpemUgIDEgICAgICBOYU4gICAgLT4gIE5hTgorZHFxdWE2MzQgcXVhbnRpemUgIDEwMDAgICBOYU4gICAgLT4gIE5hTgorZHFxdWE2MzUgcXVhbnRpemUgIEluZiAgICBOYU4gICAgLT4gIE5hTgorZHFxdWE2MzYgcXVhbnRpemUgIE5hTiAxZS0wICAgICAgLT4gIE5hTgorZHFxdWE2MzcgcXVhbnRpemUgLTAgICAgICBOYU4gICAgLT4gIE5hTgorCitkcXF1YTY0MSBxdWFudGl6ZSAgc05hTiAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NDIgcXVhbnRpemUgIHNOYU4gMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQzIHF1YW50aXplICBzTmFOIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0NCBxdWFudGl6ZSAgc05hTiAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NDUgcXVhbnRpemUgIHNOYU4gIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQ2IHF1YW50aXplICBzTmFOICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0NyBxdWFudGl6ZSAgc05hTiAgICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NDggcXVhbnRpemUgIHNOYU4gICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQ5IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1MCBxdWFudGl6ZSAtSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTEgcXVhbnRpemUgLTEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjUyIHF1YW50aXplIC0xICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1MyBxdWFudGl6ZSAgMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTQgcXVhbnRpemUgIDEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjU1IHF1YW50aXplICAxMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1NiBxdWFudGl6ZSAgSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTcgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjU4IHF1YW50aXplICBzTmFOIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1OSBxdWFudGl6ZSAtMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcXF1YTY2MSBxdWFudGl6ZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RxcXVhNjYyIHF1YW50aXplICBOYU44ICA5MTkgICAtPiAgTmFOOAorZHFxdWE2NjMgcXVhbnRpemUgIE5hTjcxIEluZiAgIC0+ICBOYU43MQorZHFxdWE2NjQgcXVhbnRpemUgIE5hTjYgIE5hTjUgIC0+ICBOYU42CitkcXF1YTY2NSBxdWFudGl6ZSAtSW5mICAgTmFONCAgLT4gIE5hTjQKK2RxcXVhNjY2IHF1YW50aXplIC05MTkgICBOYU4zMSAtPiAgTmFOMzEKK2RxcXVhNjY3IHF1YW50aXplICBJbmYgICBOYU4yICAtPiAgTmFOMgorCitkcXF1YTY3MSBxdWFudGl6ZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY3MiBxdWFudGl6ZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY3MyBxdWFudGl6ZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY3NCBxdWFudGl6ZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY3NSBxdWFudGl6ZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY3NiBxdWFudGl6ZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY3NyBxdWFudGl6ZSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY3OCBxdWFudGl6ZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY3OSBxdWFudGl6ZSAgTmFOICAgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKK2RxcXVhNjgxIHF1YW50aXplIC1OYU45IC1JbmYgICAtPiAtTmFOOQorZHFxdWE2ODIgcXVhbnRpemUgLU5hTjggIDkxOSAgIC0+IC1OYU44CitkcXF1YTY4MyBxdWFudGl6ZSAtTmFONzEgSW5mICAgLT4gLU5hTjcxCitkcXF1YTY4NCBxdWFudGl6ZSAtTmFONiAtTmFONSAgLT4gLU5hTjYKK2RxcXVhNjg1IHF1YW50aXplIC1JbmYgIC1OYU40ICAtPiAtTmFONAorZHFxdWE2ODYgcXVhbnRpemUgLTkxOSAgLU5hTjMxIC0+IC1OYU4zMQorZHFxdWE2ODcgcXVhbnRpemUgIEluZiAgLU5hTjIgIC0+IC1OYU4yCisKK2RxcXVhNjkxIHF1YW50aXplIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjkyIHF1YW50aXplIC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjkzIHF1YW50aXplIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjk0IHF1YW50aXplIC1zTmFOMTYgc05hTjk0ICAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjk1IHF1YW50aXplIC1OYU45NSAtc05hTjkzICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjk2IHF1YW50aXplIC1JbmYgICAtc05hTjkyICAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjk3IHF1YW50aXplICAwODggICAtc05hTjkxICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjk4IHF1YW50aXplICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjk5IHF1YW50aXplICBOYU4gICAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CitkcXF1YTcxMCBxdWFudGl6ZSAgMS4wMEUtNjE0MyAgIDFlLTYxNDMgIC0+ICAgMUUtNjE0MyAgIFJvdW5kZWQKK2RxcXVhNzExIHF1YW50aXplICAwLjFFLTYxNDMgICAgMmUtNjE0NCAgLT4gICAxRS02MTQ0ICAgU3Vibm9ybWFsCitkcXF1YTcxMiBxdWFudGl6ZSAgMC4xMEUtNjE0MyAgIDNlLTYxNDQgIC0+ICAgMUUtNjE0NCAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXF1YTcxMyBxdWFudGl6ZSAgMC4xMDBFLTYxNDMgIDRlLTYxNDQgIC0+ICAgMUUtNjE0NCAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXF1YTcxNCBxdWFudGl6ZSAgMC4wMUUtNjE0MyAgIDVlLTYxNDUgIC0+ICAgMUUtNjE0NSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RxcXVhNzE1IHF1YW50aXplICAwLjk5OUUtNjE0MyAgMWUtNjE0MyAgLT4gICAxRS02MTQzICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTcxNiBxdWFudGl6ZSAgMC4wOTlFLTYxNDMgMTBlLTYxNDQgIC0+ICAgMUUtNjE0NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKKworZHFxdWE3MTcgcXVhbnRpemUgIDAuMDA5RS02MTQzICAxZS02MTQ1ICAtPiAgIDFFLTYxNDUgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitkcXF1YTcxOCBxdWFudGl6ZSAgMC4wMDFFLTYxNDMgIDFlLTYxNDUgIC0+ICAgMEUtNjE0NSAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3MTkgcXVhbnRpemUgIDAuMDAwOUUtNjE0MyAxZS02MTQ1ICAtPiAgIDBFLTYxNDUgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzIwIHF1YW50aXplICAwLjAwMDFFLTYxNDMgMWUtNjE0NSAgLT4gICAwRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNzMwIHF1YW50aXplIC0xLjAwRS02MTQzICAgMWUtNjE0MyAgLT4gIC0xRS02MTQzICAgICBSb3VuZGVkCitkcXF1YTczMSBxdWFudGl6ZSAtMC4xRS02MTQzICAgIDFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgUm91bmRlZCBJbmV4YWN0CitkcXF1YTczMiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgUm91bmRlZCBJbmV4YWN0CitkcXF1YTczMyBxdWFudGl6ZSAtMC4xMDBFLTYxNDMgIDFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgUm91bmRlZCBJbmV4YWN0CitkcXF1YTczNCBxdWFudGl6ZSAtMC4wMUUtNjE0MyAgIDFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZHFxdWE3MzUgcXVhbnRpemUgLTAuOTk5RS02MTQzIDkwZS02MTQzICAtPiAgLTFFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3MzYgcXVhbnRpemUgLTAuMDk5RS02MTQzIC0xZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3MzcgcXVhbnRpemUgLTAuMDA5RS02MTQzIC0xZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3MzggcXVhbnRpemUgLTAuMDAxRS02MTQzIC0wZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3MzkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAwZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTc0MCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDQgLT4gIC0xLjBFLTYxNDMgICBSb3VuZGVkCitkcXF1YTc0MSBxdWFudGl6ZSAtMC4xRS02MTQzICAgIDFlLTYxNDQgLT4gIC0xRS02MTQ0ICAgIFN1Ym5vcm1hbAorZHFxdWE3NDIgcXVhbnRpemUgLTAuMTBFLTYxNDMgICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwgUm91bmRlZAorZHFxdWE3NDMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwgUm91bmRlZAorZHFxdWE3NDQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQ0IC0+ICAtMEUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitkcXF1YTc0NSBxdWFudGl6ZSAtMC45OTlFLTYxNDMgIDFlLTYxNDQgLT4gIC0xLjBFLTYxNDMgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzQ2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAgMWUtNjE0NCAtPiAgLTFFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorZHFxdWE3NDcgcXVhbnRpemUgLTAuMDA5RS02MTQzICAxZS02MTQ0IC0+ICAtMEUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzQ4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTc0OSBxdWFudGl6ZSAtMC4wMDAxRS02MTQzIDFlLTYxNDQgLT4gIC0wRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTc1MCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xLjAwRS02MTQzCitkcXF1YTc1MSBxdWFudGl6ZSAtMC4xRS02MTQzICAgIDFlLTYxNDUgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbAorZHFxdWE3NTIgcXVhbnRpemUgLTAuMTBFLTYxNDMgICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwKK2RxcXVhNzUzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NSAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxcXVhNzU0IHF1YW50aXplIC0wLjAxRS02MTQzICAgMWUtNjE0NSAtPiAgLTFFLTYxNDUgICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZHFxdWE3NTUgcXVhbnRpemUgLTAuOTk5RS02MTQzICAxZS02MTQ1IC0+ICAtMS4wMEUtNjE0MyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTc1NiBxdWFudGl6ZSAtMC4wOTlFLTYxNDMgIDFlLTYxNDUgLT4gIC0xLjBFLTYxNDQgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RxcXVhNzU3IHF1YW50aXplIC0wLjAwOUUtNjE0MyAgMWUtNjE0NSAtPiAgLTFFLTYxNDUgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorZHFxdWE3NTggcXVhbnRpemUgLTAuMDAxRS02MTQzICAxZS02MTQ1IC0+ICAtMEUtNjE0NSAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzU5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMWUtNjE0NSAtPiAgLTBFLTYxNDUgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNzYwIHF1YW50aXplIC0xLjAwRS02MTQzICAgMWUtNjE0NiAtPiAgLTEuMDAwRS02MTQzCitkcXF1YTc2MSBxdWFudGl6ZSAtMC4xRS02MTQzICAgIDFlLTYxNDYgLT4gIC0xLjAwRS02MTQ0ICBTdWJub3JtYWwKK2RxcXVhNzYyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0NiAtPiAgLTEuMDBFLTYxNDQgIFN1Ym5vcm1hbAorZHFxdWE3NjMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsCitkcXF1YTc2NCBxdWFudGl6ZSAtMC4wMUUtNjE0MyAgIDFlLTYxNDYgLT4gIC0xLjBFLTYxNDUgICBTdWJub3JtYWwKK2RxcXVhNzY1IHF1YW50aXplIC0wLjk5OUUtNjE0MyAgMWUtNjE0NiAtPiAgLTkuOTlFLTYxNDQgIFN1Ym5vcm1hbAorZHFxdWE3NjYgcXVhbnRpemUgLTAuMDk5RS02MTQzICAxZS02MTQ2IC0+ICAtOS45RS02MTQ1ICAgU3Vibm9ybWFsCitkcXF1YTc2NyBxdWFudGl6ZSAtMC4wMDlFLTYxNDMgIDFlLTYxNDYgLT4gIC05RS02MTQ2ICAgICBTdWJub3JtYWwKK2RxcXVhNzY4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAgMWUtNjE0NiAtPiAgLTFFLTYxNDYgICAgIFN1Ym5vcm1hbAorZHFxdWE3NjkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAxZS02MTQ2IC0+ICAtMEUtNjE0NiAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgZnJvbSBGdW5nIExlZQorLS0gdGhlIG5leHQgZm91ciB3b3VsZCBhcHBlYXIgdG8gYmUgaW4gZXJyb3IsIGJ1dCB0aGV5IGFyZSBtaXNsZWFkaW5nICh0aGUKKy0tIG9wZXJhbmRzIHdpbGwgYmUgY2xhbXBlZCB0byBhIGxvd2VyIGV4cG9uZW50KSBhbmQgc28gYXJlIG9taXR0ZWQKKy0tIGRxcXVhMTAyMSBxdWFudGl6ZSAgOC42NjY2NjY2NjY2NjYwMDBFKzYxNDQgIDEuMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IC0+ICA4LjY2NjY2NjY2NjY2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZAorLS0gZHFxdWExMDIyIHF1YW50aXplIC04LjY2NjY2NjY2NjY2NjAwMEUrNjE0NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzYxNDQgLT4gLTguNjY2NjY2NjY2NjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICBDbGFtcGVkCistLSBkcXF1YTEwMjcgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzMyMyAgMUUrMzEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBkcXF1YTEwMzAgcXVhbnRpemUgOC42NjY2NjY2NkUrMyAgICAgICAgICAgMUUrMyAgICAgLT4gOUUrMyBJbmV4YWN0IFJvdW5kZWQKKworLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMKK2RxcXVhMTA0MCBxdWFudGl6ZSAtMjE0NzQ4MzY0NiAgICAgMCAtPiAtMjE0NzQ4MzY0NgorZHFxdWExMDQxIHF1YW50aXplIC0yMTQ3NDgzNjQ3ICAgICAwIC0+IC0yMTQ3NDgzNjQ3CitkcXF1YTEwNDIgcXVhbnRpemUgLTIxNDc0ODM2NDggICAgIDAgLT4gLTIxNDc0ODM2NDgKK2RxcXVhMTA0MyBxdWFudGl6ZSAtMjE0NzQ4MzY0OSAgICAgMCAtPiAtMjE0NzQ4MzY0OQorZHFxdWExMDQ0IHF1YW50aXplICAyMTQ3NDgzNjQ2ICAgICAwIC0+ICAyMTQ3NDgzNjQ2CitkcXF1YTEwNDUgcXVhbnRpemUgIDIxNDc0ODM2NDcgICAgIDAgLT4gIDIxNDc0ODM2NDcKK2RxcXVhMTA0NiBxdWFudGl6ZSAgMjE0NzQ4MzY0OCAgICAgMCAtPiAgMjE0NzQ4MzY0OAorZHFxdWExMDQ3IHF1YW50aXplICAyMTQ3NDgzNjQ5ICAgICAwIC0+ICAyMTQ3NDgzNjQ5CitkcXF1YTEwNDggcXVhbnRpemUgIDQyOTQ5NjcyOTQgICAgIDAgLT4gIDQyOTQ5NjcyOTQKK2RxcXVhMTA0OSBxdWFudGl6ZSAgNDI5NDk2NzI5NSAgICAgMCAtPiAgNDI5NDk2NzI5NQorZHFxdWExMDUwIHF1YW50aXplICA0Mjk0OTY3Mjk2ICAgICAwIC0+ICA0Mjk0OTY3Mjk2CitkcXF1YTEwNTEgcXVhbnRpemUgIDQyOTQ5NjcyOTcgICAgIDAgLT4gIDQyOTQ5NjcyOTcKKworLS0gUm91bmRpbmcgc3dhdGhlCityb3VuZGluZzogaGFsZl9ldmVuCitkcXF1YTExMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkcXF1YTExMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitkcXF1YTEyMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkcXF1YTEyMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2RxcXVhMTMwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RxcXVhMTMwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IHVwCitkcXF1YTE0MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkcXF1YTE0MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RxcXVhMTUwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RxcXVhMTUwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjMgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogY2VpbGluZworZHFxdWExNjAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZHFxdWExNjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBmbG9vcgorZHFxdWExNzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZHFxdWExNzAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAwNXVwCitkcXF1YTE4MDAgcXVhbnRpemUgIDEuMjAwMCAgICAxLjAwICAgIC0+ICAxLjIwICBSb3VuZGVkCitkcXF1YTE4MDEgcXVhbnRpemUgIDEuMjAwMSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTgwMiBxdWFudGl6ZSAgMS4yMDEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExODAzIHF1YW50aXplICAxLjIwNTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4MDQgcXVhbnRpemUgIDEuMjA1MSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTgwNyBxdWFudGl6ZSAgMS4yMDYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExODA4IHF1YW50aXplICAxLjIwNzAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4MDkgcXVhbnRpemUgIDEuMjA5OSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTgxMSBxdWFudGl6ZSAtMS4yMDk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTE5MDAgcXVhbnRpemUgIDEuMjEwMCAgICAxLjAwICAgIC0+ICAxLjIxICBSb3VuZGVkCitkcXF1YTE5MDEgcXVhbnRpemUgIDEuMjEwMSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkwMiBxdWFudGl6ZSAgMS4yMTEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTAzIHF1YW50aXplICAxLjIxNTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MDQgcXVhbnRpemUgIDEuMjE1MSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkwNyBxdWFudGl6ZSAgMS4yMTYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTA4IHF1YW50aXplICAxLjIxNzAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MDkgcXVhbnRpemUgIDEuMjE5OSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkxMSBxdWFudGl6ZSAtMS4yMTk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTIwMDAgcXVhbnRpemUgIDEuMjQwMCAgICAxLjAwICAgIC0+ICAxLjI0ICBSb3VuZGVkCitkcXF1YTIwMDEgcXVhbnRpemUgIDEuMjQwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjAwMiBxdWFudGl6ZSAgMS4yNDEwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDAzIHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMDQgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjAwNyBxdWFudGl6ZSAgMS4yNDYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDA4IHF1YW50aXplICAxLjI0NzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMDkgcXVhbnRpemUgIDEuMjQ5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjAxMSBxdWFudGl6ZSAtMS4yNDk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTIxMDAgcXVhbnRpemUgIDEuMjUwMCAgICAxLjAwICAgIC0+ICAxLjI1ICBSb3VuZGVkCitkcXF1YTIxMDEgcXVhbnRpemUgIDEuMjUwMSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjEwMiBxdWFudGl6ZSAgMS4yNTEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMTAzIHF1YW50aXplICAxLjI1NTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIxMDQgcXVhbnRpemUgIDEuMjU1MSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjEwNyBxdWFudGl6ZSAgMS4yNTYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMTA4IHF1YW50aXplICAxLjI1NzAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIxMDkgcXVhbnRpemUgIDEuMjU5OSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjExMSBxdWFudGl6ZSAtMS4yNTk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTIyMDAgcXVhbnRpemUgIDEuMjYwMCAgICAxLjAwICAgIC0+ICAxLjI2ICBSb3VuZGVkCitkcXF1YTIyMDEgcXVhbnRpemUgIDEuMjYwMSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIwMiBxdWFudGl6ZSAgMS4yNjEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjAzIHF1YW50aXplICAxLjI2NTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMDQgcXVhbnRpemUgIDEuMjY1MSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIwNyBxdWFudGl6ZSAgMS4yNjYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjA4IHF1YW50aXplICAxLjI2NzAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMDkgcXVhbnRpemUgIDEuMjY5OSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIxMSBxdWFudGl6ZSAtMS4yNjk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTIzMDAgcXVhbnRpemUgIDEuMjkwMCAgICAxLjAwICAgIC0+ICAxLjI5ICBSb3VuZGVkCitkcXF1YTIzMDEgcXVhbnRpemUgIDEuMjkwMSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMwMiBxdWFudGl6ZSAgMS4yOTEwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzAzIHF1YW50aXplICAxLjI5NTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMDQgcXVhbnRpemUgIDEuMjk1MSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMwNyBxdWFudGl6ZSAgMS4yOTYwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzA4IHF1YW50aXplICAxLjI5NzAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMDkgcXVhbnRpemUgIDEuMjk5OSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMxMSBxdWFudGl6ZSAtMS4yOTk5ICAgIDEuMDAgICAgLT4gLTEuMjkgIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCitkcXF1YTk5OCBxdWFudGl6ZSAxMCAgICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE5OTkgcXVhbnRpemUgICMgMWUxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlZHVjZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVkdWNlLmRlY1Rlc3QKaW5kZXggMjM2NTc0Zi4uNTYzNWU2YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVkdWNlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVkdWNlLmRlY1Rlc3QKQEAgLTEsMTgzICsxLDE4MyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFSZWR1Y2UuZGVjVGVzdCAtLSByZW1vdmUgdHJhaWxpbmcgemVyb3MgZnJvbSBhIGRlY1F1YWQgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDMsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kcXJlZDAwMSByZWR1Y2UgJzEnICAgICAgLT4gJzEnDQotZHFyZWQwMDIgcmVkdWNlICctMScgICAgIC0+ICctMScNCi1kcXJlZDAwMyByZWR1Y2UgJzEuMDAnICAgLT4gJzEnDQotZHFyZWQwMDQgcmVkdWNlICctMS4wMCcgIC0+ICctMScNCi1kcXJlZDAwNSByZWR1Y2UgJzAnICAgICAgLT4gJzAnDQotZHFyZWQwMDYgcmVkdWNlICcwLjAwJyAgIC0+ICcwJw0KLWRxcmVkMDA3IHJlZHVjZSAnMDAuMCcgICAtPiAnMCcNCi1kcXJlZDAwOCByZWR1Y2UgJzAwLjAwJyAgLT4gJzAnDQotZHFyZWQwMDkgcmVkdWNlICcwMCcgICAgIC0+ICcwJw0KLWRxcmVkMDEwIHJlZHVjZSAnMEUrMScgICAtPiAnMCcNCi1kcXJlZDAxMSByZWR1Y2UgJzBFKzUnICAgLT4gJzAnDQotDQotZHFyZWQwMTIgcmVkdWNlICctMicgICAgIC0+ICctMicNCi1kcXJlZDAxMyByZWR1Y2UgJzInICAgICAgLT4gJzInDQotZHFyZWQwMTQgcmVkdWNlICctMi4wMCcgIC0+ICctMicNCi1kcXJlZDAxNSByZWR1Y2UgJzIuMDAnICAgLT4gJzInDQotZHFyZWQwMTYgcmVkdWNlICctMCcgICAgIC0+ICctMCcNCi1kcXJlZDAxNyByZWR1Y2UgJy0wLjAwJyAgLT4gJy0wJw0KLWRxcmVkMDE4IHJlZHVjZSAnLTAwLjAnICAtPiAnLTAnDQotZHFyZWQwMTkgcmVkdWNlICctMDAuMDAnIC0+ICctMCcNCi1kcXJlZDAyMCByZWR1Y2UgJy0wMCcgICAgLT4gJy0wJw0KLWRxcmVkMDIxIHJlZHVjZSAnLTBFKzUnICAgLT4gJy0wJw0KLWRxcmVkMDIyIHJlZHVjZSAnLTBFKzEnICAtPiAnLTAnDQotDQotZHFyZWQwMzAgcmVkdWNlICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnDQotZHFyZWQwMzEgcmVkdWNlICctMC4xJyAgICAgICAgICAgIC0+ICctMC4xJw0KLWRxcmVkMDMyIHJlZHVjZSAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScNCi1kcXJlZDAzMyByZWR1Y2UgJy0wLjAxJyAgICAgICAgICAgLT4gJy0wLjAxJw0KLWRxcmVkMDM0IHJlZHVjZSAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnDQotZHFyZWQwMzUgcmVkdWNlICctMC4wMDEnICAgICAgICAgIC0+ICctMC4wMDEnDQotZHFyZWQwMzYgcmVkdWNlICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScNCi1kcXJlZDAzNyByZWR1Y2UgJy0wLjAwMDAwMScgICAgICAgLT4gJy0wLjAwMDAwMScNCi1kcXJlZDAzOCByZWR1Y2UgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJw0KLWRxcmVkMDM5IHJlZHVjZSAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnLTFFLTEyJw0KLQ0KLWRxcmVkMDQxIHJlZHVjZSAxLjEgICAgICAgIC0+IDEuMQ0KLWRxcmVkMDQyIHJlZHVjZSAxLjEwICAgICAgIC0+IDEuMQ0KLWRxcmVkMDQzIHJlZHVjZSAxLjEwMCAgICAgIC0+IDEuMQ0KLWRxcmVkMDQ0IHJlZHVjZSAxLjExMCAgICAgIC0+IDEuMTENCi1kcXJlZDA0NSByZWR1Y2UgLTEuMSAgICAgICAtPiAtMS4xDQotZHFyZWQwNDYgcmVkdWNlIC0xLjEwICAgICAgLT4gLTEuMQ0KLWRxcmVkMDQ3IHJlZHVjZSAtMS4xMDAgICAgIC0+IC0xLjENCi1kcXJlZDA0OCByZWR1Y2UgLTEuMTEwICAgICAtPiAtMS4xMQ0KLWRxcmVkMDQ5IHJlZHVjZSA5LjkgICAgICAgIC0+IDkuOQ0KLWRxcmVkMDUwIHJlZHVjZSA5LjkwICAgICAgIC0+IDkuOQ0KLWRxcmVkMDUxIHJlZHVjZSA5LjkwMCAgICAgIC0+IDkuOQ0KLWRxcmVkMDUyIHJlZHVjZSA5Ljk5MCAgICAgIC0+IDkuOTkNCi1kcXJlZDA1MyByZWR1Y2UgLTkuOSAgICAgICAtPiAtOS45DQotZHFyZWQwNTQgcmVkdWNlIC05LjkwICAgICAgLT4gLTkuOQ0KLWRxcmVkMDU1IHJlZHVjZSAtOS45MDAgICAgIC0+IC05LjkNCi1kcXJlZDA1NiByZWR1Y2UgLTkuOTkwICAgICAtPiAtOS45OQ0KLQ0KLS0tIHNvbWUgdHJhaWxpbmcgZnJhY3Rpb25hbCB6ZXJvcyB3aXRoIHplcm9zIGluIHVuaXRzDQotZHFyZWQwNjAgcmVkdWNlICAxMC4wICAgICAgICAtPiAxRSsxDQotZHFyZWQwNjEgcmVkdWNlICAxMC4wMCAgICAgICAtPiAxRSsxDQotZHFyZWQwNjIgcmVkdWNlICAxMDAuMCAgICAgICAtPiAxRSsyDQotZHFyZWQwNjMgcmVkdWNlICAxMDAuMDAgICAgICAtPiAxRSsyDQotZHFyZWQwNjQgcmVkdWNlICAxLjEwMDBFKzMgICAtPiAxLjFFKzMNCi1kcXJlZDA2NSByZWR1Y2UgIDEuMTAwMDBFKzMgIC0+IDEuMUUrMw0KLWRxcmVkMDY2IHJlZHVjZSAtMTAuMCAgICAgICAgLT4gLTFFKzENCi1kcXJlZDA2NyByZWR1Y2UgLTEwLjAwICAgICAgIC0+IC0xRSsxDQotZHFyZWQwNjggcmVkdWNlIC0xMDAuMCAgICAgICAtPiAtMUUrMg0KLWRxcmVkMDY5IHJlZHVjZSAtMTAwLjAwICAgICAgLT4gLTFFKzINCi1kcXJlZDA3MCByZWR1Y2UgLTEuMTAwMEUrMyAgIC0+IC0xLjFFKzMNCi1kcXJlZDA3MSByZWR1Y2UgLTEuMTAwMDBFKzMgIC0+IC0xLjFFKzMNCi0NCi0tLSBzb21lIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3Mgd2l0aCBwb3NpdGl2ZSBleHBvbmVudA0KLWRxcmVkMDgwIHJlZHVjZSAgMTBFKzEgICAgICAgLT4gMUUrMg0KLWRxcmVkMDgxIHJlZHVjZSAgMTAwRSsxICAgICAgLT4gMUUrMw0KLWRxcmVkMDgyIHJlZHVjZSAgMS4wRSsyICAgICAgLT4gMUUrMg0KLWRxcmVkMDgzIHJlZHVjZSAgMS4wRSszICAgICAgLT4gMUUrMw0KLWRxcmVkMDg0IHJlZHVjZSAgMS4xRSszICAgICAgLT4gMS4xRSszDQotZHFyZWQwODUgcmVkdWNlICAxLjAwRSszICAgICAtPiAxRSszDQotZHFyZWQwODYgcmVkdWNlICAxLjEwRSszICAgICAtPiAxLjFFKzMNCi1kcXJlZDA4NyByZWR1Y2UgLTEwRSsxICAgICAgIC0+IC0xRSsyDQotZHFyZWQwODggcmVkdWNlIC0xMDBFKzEgICAgICAtPiAtMUUrMw0KLWRxcmVkMDg5IHJlZHVjZSAtMS4wRSsyICAgICAgLT4gLTFFKzINCi1kcXJlZDA5MCByZWR1Y2UgLTEuMEUrMyAgICAgIC0+IC0xRSszDQotZHFyZWQwOTEgcmVkdWNlIC0xLjFFKzMgICAgICAtPiAtMS4xRSszDQotZHFyZWQwOTIgcmVkdWNlIC0xLjAwRSszICAgICAtPiAtMUUrMw0KLWRxcmVkMDkzIHJlZHVjZSAtMS4xMEUrMyAgICAgLT4gLTEuMUUrMw0KLQ0KLS0tIHNvbWUgc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MsIHdlcmUgd2UgdG8gYmUgdHJpbW1pbmcNCi1kcXJlZDEwMCByZWR1Y2UgIDExICAgICAgICAgIC0+IDExDQotZHFyZWQxMDEgcmVkdWNlICAxMCAgICAgICAgICAtPiAxRSsxDQotZHFyZWQxMDIgcmVkdWNlICAxMC4gICAgICAgICAtPiAxRSsxDQotZHFyZWQxMDMgcmVkdWNlICAxLjFFKzEgICAgICAtPiAxMQ0KLWRxcmVkMTA0IHJlZHVjZSAgMS4wRSsxICAgICAgLT4gMUUrMQ0KLWRxcmVkMTA1IHJlZHVjZSAgMS4xMEUrMiAgICAgLT4gMS4xRSsyDQotZHFyZWQxMDYgcmVkdWNlICAxLjAwRSsyICAgICAtPiAxRSsyDQotZHFyZWQxMDcgcmVkdWNlICAxLjEwMEUrMyAgICAtPiAxLjFFKzMNCi1kcXJlZDEwOCByZWR1Y2UgIDEuMDAwRSszICAgIC0+IDFFKzMNCi1kcXJlZDEwOSByZWR1Y2UgIDEuMDAwMDAwRSs2IC0+IDFFKzYNCi1kcXJlZDExMCByZWR1Y2UgLTExICAgICAgICAgIC0+IC0xMQ0KLWRxcmVkMTExIHJlZHVjZSAtMTAgICAgICAgICAgLT4gLTFFKzENCi1kcXJlZDExMiByZWR1Y2UgLTEwLiAgICAgICAgIC0+IC0xRSsxDQotZHFyZWQxMTMgcmVkdWNlIC0xLjFFKzEgICAgICAtPiAtMTENCi1kcXJlZDExNCByZWR1Y2UgLTEuMEUrMSAgICAgIC0+IC0xRSsxDQotZHFyZWQxMTUgcmVkdWNlIC0xLjEwRSsyICAgICAtPiAtMS4xRSsyDQotZHFyZWQxMTYgcmVkdWNlIC0xLjAwRSsyICAgICAtPiAtMUUrMg0KLWRxcmVkMTE3IHJlZHVjZSAtMS4xMDBFKzMgICAgLT4gLTEuMUUrMw0KLWRxcmVkMTE4IHJlZHVjZSAtMS4wMDBFKzMgICAgLT4gLTFFKzMNCi1kcXJlZDExOSByZWR1Y2UgLTEuMDAwMDBFKzUgIC0+IC0xRSs1DQotZHFyZWQxMjAgcmVkdWNlIC0xLjAwMDAwMEUrNiAtPiAtMUUrNg0KLWRxcmVkMTIxIHJlZHVjZSAtMTAuMDAwMDBFKzYgLT4gLTFFKzcNCi1kcXJlZDEyMiByZWR1Y2UgLTEwMC4wMDAwRSs2IC0+IC0xRSs4DQotZHFyZWQxMjMgcmVkdWNlIC0xMDAwLjAwMEUrNiAtPiAtMUUrOQ0KLWRxcmVkMTI0IHJlZHVjZSAtMTAwMDAuMDBFKzYgLT4gLTFFKzEwDQotZHFyZWQxMjUgcmVkdWNlIC0xMDAwMDAuMEUrNiAtPiAtMUUrMTENCi1kcXJlZDEyNiByZWR1Y2UgLTEwMDAwMDAuRSs2IC0+IC0xRSsxMg0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgNCi1kcXJlZDE0MCByZWR1Y2UgJzIuMScgICAgIC0+ICAnMi4xJw0KLWRxcmVkMTQxIHJlZHVjZSAnLTIuMCcgICAgLT4gICctMicNCi1kcXJlZDE0MiByZWR1Y2UgJzEuMjAwJyAgIC0+ICAnMS4yJw0KLWRxcmVkMTQzIHJlZHVjZSAnLTEyMCcgICAgLT4gICctMS4yRSsyJw0KLWRxcmVkMTQ0IHJlZHVjZSAnMTIwLjAwJyAgLT4gICcxLjJFKzInDQotZHFyZWQxNDUgcmVkdWNlICcwLjAwJyAgICAtPiAgJzAnDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi0tLSBub3RlIG9yaWdhbWkgZWZmZWN0IG9uIHNvbWUgb2YgdGhlc2UNCi1kcXJlZDE1MSByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcXJlZDE1MiByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwRSs2MTQwICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMEUrNjE0MA0KLWRxcmVkMTUzIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMEUrNjE0NA0KLWRxcmVkMTU0IHJlZHVjZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAxRS02MTQzDQotZHFyZWQxNTUgcmVkdWNlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+IDFFLTYxNDMNCi1kcXJlZDE1NiByZWR1Y2UgIDIuMDAwRS02MTczICAgICAgICAgICAgICAgLT4gMkUtNjE3MyAgIFN1Ym5vcm1hbA0KLWRxcmVkMTU3IHJlZHVjZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAxRS02MTc2ICAgU3Vibm9ybWFsDQotDQotZHFyZWQxNjEgcmVkdWNlICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2ICBTdWJub3JtYWwNCi1kcXJlZDE2MiByZWR1Y2UgIC0yLjAwMEUtNjE3MyAgICAgICAgICAgICAgLT4gLTJFLTYxNzMgIFN1Ym5vcm1hbA0KLWRxcmVkMTYzIHJlZHVjZSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMUUtNjE0Mw0KLWRxcmVkMTY0IHJlZHVjZSAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0Mw0KLWRxcmVkMTY1IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwRSs2MTQwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMEUrNjE0MA0KLWRxcmVkMTY2IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwRSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQNCi1kcXJlZDE2NyByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0DQotZHFyZWQxNjggcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxcmVkMTY5IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQNCi0NCi0NCi0tLSBzcGVjaWFscyAocmVkdWNlIGRvZXMgbm90IGFmZmVjdCBwYXlsb2FkKQ0KLWRxcmVkODIwIHJlZHVjZSAnSW5mJyAgICAtPiAnSW5maW5pdHknDQotZHFyZWQ4MjEgcmVkdWNlICctSW5mJyAgIC0+ICctSW5maW5pdHknDQotZHFyZWQ4MjIgcmVkdWNlICAgTmFOICAgIC0+ICBOYU4NCi1kcXJlZDgyMyByZWR1Y2UgIHNOYU4gICAgLT4gIE5hTiAgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVkODI0IHJlZHVjZSAgIE5hTjEwMSAtPiAgTmFOMTAxDQotZHFyZWQ4MjUgcmVkdWNlICBzTmFOMDEwIC0+ICBOYU4xMCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlZDgyNyByZWR1Y2UgIC1OYU4gICAgLT4gLU5hTg0KLWRxcmVkODI4IHJlZHVjZSAtc05hTiAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZWQ4MjkgcmVkdWNlICAtTmFOMTAxIC0+IC1OYU4xMDENCi1kcXJlZDgzMCByZWR1Y2UgLXNOYU4wMTAgLT4gLU5hTjEwICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE51bGwgdGVzdA0KLWRxcmVkOTAwIHJlZHVjZSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxUmVkdWNlLmRlY1Rlc3QgLS0gcmVtb3ZlIHRyYWlsaW5nIHplcm9zIGZyb20gYSBkZWNRdWFkICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDMsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkcXJlZDAwMSByZWR1Y2UgJzEnICAgICAgLT4gJzEnCitkcXJlZDAwMiByZWR1Y2UgJy0xJyAgICAgLT4gJy0xJworZHFyZWQwMDMgcmVkdWNlICcxLjAwJyAgIC0+ICcxJworZHFyZWQwMDQgcmVkdWNlICctMS4wMCcgIC0+ICctMScKK2RxcmVkMDA1IHJlZHVjZSAnMCcgICAgICAtPiAnMCcKK2RxcmVkMDA2IHJlZHVjZSAnMC4wMCcgICAtPiAnMCcKK2RxcmVkMDA3IHJlZHVjZSAnMDAuMCcgICAtPiAnMCcKK2RxcmVkMDA4IHJlZHVjZSAnMDAuMDAnICAtPiAnMCcKK2RxcmVkMDA5IHJlZHVjZSAnMDAnICAgICAtPiAnMCcKK2RxcmVkMDEwIHJlZHVjZSAnMEUrMScgICAtPiAnMCcKK2RxcmVkMDExIHJlZHVjZSAnMEUrNScgICAtPiAnMCcKKworZHFyZWQwMTIgcmVkdWNlICctMicgICAgIC0+ICctMicKK2RxcmVkMDEzIHJlZHVjZSAnMicgICAgICAtPiAnMicKK2RxcmVkMDE0IHJlZHVjZSAnLTIuMDAnICAtPiAnLTInCitkcXJlZDAxNSByZWR1Y2UgJzIuMDAnICAgLT4gJzInCitkcXJlZDAxNiByZWR1Y2UgJy0wJyAgICAgLT4gJy0wJworZHFyZWQwMTcgcmVkdWNlICctMC4wMCcgIC0+ICctMCcKK2RxcmVkMDE4IHJlZHVjZSAnLTAwLjAnICAtPiAnLTAnCitkcXJlZDAxOSByZWR1Y2UgJy0wMC4wMCcgLT4gJy0wJworZHFyZWQwMjAgcmVkdWNlICctMDAnICAgIC0+ICctMCcKK2RxcmVkMDIxIHJlZHVjZSAnLTBFKzUnICAgLT4gJy0wJworZHFyZWQwMjIgcmVkdWNlICctMEUrMScgIC0+ICctMCcKKworZHFyZWQwMzAgcmVkdWNlICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCitkcXJlZDAzMSByZWR1Y2UgJy0wLjEnICAgICAgICAgICAgLT4gJy0wLjEnCitkcXJlZDAzMiByZWR1Y2UgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCitkcXJlZDAzMyByZWR1Y2UgJy0wLjAxJyAgICAgICAgICAgLT4gJy0wLjAxJworZHFyZWQwMzQgcmVkdWNlICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKK2RxcmVkMDM1IHJlZHVjZSAnLTAuMDAxJyAgICAgICAgICAtPiAnLTAuMDAxJworZHFyZWQwMzYgcmVkdWNlICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK2RxcmVkMDM3IHJlZHVjZSAnLTAuMDAwMDAxJyAgICAgICAtPiAnLTAuMDAwMDAxJworZHFyZWQwMzggcmVkdWNlICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKK2RxcmVkMDM5IHJlZHVjZSAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnLTFFLTEyJworCitkcXJlZDA0MSByZWR1Y2UgMS4xICAgICAgICAtPiAxLjEKK2RxcmVkMDQyIHJlZHVjZSAxLjEwICAgICAgIC0+IDEuMQorZHFyZWQwNDMgcmVkdWNlIDEuMTAwICAgICAgLT4gMS4xCitkcXJlZDA0NCByZWR1Y2UgMS4xMTAgICAgICAtPiAxLjExCitkcXJlZDA0NSByZWR1Y2UgLTEuMSAgICAgICAtPiAtMS4xCitkcXJlZDA0NiByZWR1Y2UgLTEuMTAgICAgICAtPiAtMS4xCitkcXJlZDA0NyByZWR1Y2UgLTEuMTAwICAgICAtPiAtMS4xCitkcXJlZDA0OCByZWR1Y2UgLTEuMTEwICAgICAtPiAtMS4xMQorZHFyZWQwNDkgcmVkdWNlIDkuOSAgICAgICAgLT4gOS45CitkcXJlZDA1MCByZWR1Y2UgOS45MCAgICAgICAtPiA5LjkKK2RxcmVkMDUxIHJlZHVjZSA5LjkwMCAgICAgIC0+IDkuOQorZHFyZWQwNTIgcmVkdWNlIDkuOTkwICAgICAgLT4gOS45OQorZHFyZWQwNTMgcmVkdWNlIC05LjkgICAgICAgLT4gLTkuOQorZHFyZWQwNTQgcmVkdWNlIC05LjkwICAgICAgLT4gLTkuOQorZHFyZWQwNTUgcmVkdWNlIC05LjkwMCAgICAgLT4gLTkuOQorZHFyZWQwNTYgcmVkdWNlIC05Ljk5MCAgICAgLT4gLTkuOTkKKworLS0gc29tZSB0cmFpbGluZyBmcmFjdGlvbmFsIHplcm9zIHdpdGggemVyb3MgaW4gdW5pdHMKK2RxcmVkMDYwIHJlZHVjZSAgMTAuMCAgICAgICAgLT4gMUUrMQorZHFyZWQwNjEgcmVkdWNlICAxMC4wMCAgICAgICAtPiAxRSsxCitkcXJlZDA2MiByZWR1Y2UgIDEwMC4wICAgICAgIC0+IDFFKzIKK2RxcmVkMDYzIHJlZHVjZSAgMTAwLjAwICAgICAgLT4gMUUrMgorZHFyZWQwNjQgcmVkdWNlICAxLjEwMDBFKzMgICAtPiAxLjFFKzMKK2RxcmVkMDY1IHJlZHVjZSAgMS4xMDAwMEUrMyAgLT4gMS4xRSszCitkcXJlZDA2NiByZWR1Y2UgLTEwLjAgICAgICAgIC0+IC0xRSsxCitkcXJlZDA2NyByZWR1Y2UgLTEwLjAwICAgICAgIC0+IC0xRSsxCitkcXJlZDA2OCByZWR1Y2UgLTEwMC4wICAgICAgIC0+IC0xRSsyCitkcXJlZDA2OSByZWR1Y2UgLTEwMC4wMCAgICAgIC0+IC0xRSsyCitkcXJlZDA3MCByZWR1Y2UgLTEuMTAwMEUrMyAgIC0+IC0xLjFFKzMKK2RxcmVkMDcxIHJlZHVjZSAtMS4xMDAwMEUrMyAgLT4gLTEuMUUrMworCistLSBzb21lIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3Mgd2l0aCBwb3NpdGl2ZSBleHBvbmVudAorZHFyZWQwODAgcmVkdWNlICAxMEUrMSAgICAgICAtPiAxRSsyCitkcXJlZDA4MSByZWR1Y2UgIDEwMEUrMSAgICAgIC0+IDFFKzMKK2RxcmVkMDgyIHJlZHVjZSAgMS4wRSsyICAgICAgLT4gMUUrMgorZHFyZWQwODMgcmVkdWNlICAxLjBFKzMgICAgICAtPiAxRSszCitkcXJlZDA4NCByZWR1Y2UgIDEuMUUrMyAgICAgIC0+IDEuMUUrMworZHFyZWQwODUgcmVkdWNlICAxLjAwRSszICAgICAtPiAxRSszCitkcXJlZDA4NiByZWR1Y2UgIDEuMTBFKzMgICAgIC0+IDEuMUUrMworZHFyZWQwODcgcmVkdWNlIC0xMEUrMSAgICAgICAtPiAtMUUrMgorZHFyZWQwODggcmVkdWNlIC0xMDBFKzEgICAgICAtPiAtMUUrMworZHFyZWQwODkgcmVkdWNlIC0xLjBFKzIgICAgICAtPiAtMUUrMgorZHFyZWQwOTAgcmVkdWNlIC0xLjBFKzMgICAgICAtPiAtMUUrMworZHFyZWQwOTEgcmVkdWNlIC0xLjFFKzMgICAgICAtPiAtMS4xRSszCitkcXJlZDA5MiByZWR1Y2UgLTEuMDBFKzMgICAgIC0+IC0xRSszCitkcXJlZDA5MyByZWR1Y2UgLTEuMTBFKzMgICAgIC0+IC0xLjFFKzMKKworLS0gc29tZSBzaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcywgd2VyZSB3ZSB0byBiZSB0cmltbWluZworZHFyZWQxMDAgcmVkdWNlICAxMSAgICAgICAgICAtPiAxMQorZHFyZWQxMDEgcmVkdWNlICAxMCAgICAgICAgICAtPiAxRSsxCitkcXJlZDEwMiByZWR1Y2UgIDEwLiAgICAgICAgIC0+IDFFKzEKK2RxcmVkMTAzIHJlZHVjZSAgMS4xRSsxICAgICAgLT4gMTEKK2RxcmVkMTA0IHJlZHVjZSAgMS4wRSsxICAgICAgLT4gMUUrMQorZHFyZWQxMDUgcmVkdWNlICAxLjEwRSsyICAgICAtPiAxLjFFKzIKK2RxcmVkMTA2IHJlZHVjZSAgMS4wMEUrMiAgICAgLT4gMUUrMgorZHFyZWQxMDcgcmVkdWNlICAxLjEwMEUrMyAgICAtPiAxLjFFKzMKK2RxcmVkMTA4IHJlZHVjZSAgMS4wMDBFKzMgICAgLT4gMUUrMworZHFyZWQxMDkgcmVkdWNlICAxLjAwMDAwMEUrNiAtPiAxRSs2CitkcXJlZDExMCByZWR1Y2UgLTExICAgICAgICAgIC0+IC0xMQorZHFyZWQxMTEgcmVkdWNlIC0xMCAgICAgICAgICAtPiAtMUUrMQorZHFyZWQxMTIgcmVkdWNlIC0xMC4gICAgICAgICAtPiAtMUUrMQorZHFyZWQxMTMgcmVkdWNlIC0xLjFFKzEgICAgICAtPiAtMTEKK2RxcmVkMTE0IHJlZHVjZSAtMS4wRSsxICAgICAgLT4gLTFFKzEKK2RxcmVkMTE1IHJlZHVjZSAtMS4xMEUrMiAgICAgLT4gLTEuMUUrMgorZHFyZWQxMTYgcmVkdWNlIC0xLjAwRSsyICAgICAtPiAtMUUrMgorZHFyZWQxMTcgcmVkdWNlIC0xLjEwMEUrMyAgICAtPiAtMS4xRSszCitkcXJlZDExOCByZWR1Y2UgLTEuMDAwRSszICAgIC0+IC0xRSszCitkcXJlZDExOSByZWR1Y2UgLTEuMDAwMDBFKzUgIC0+IC0xRSs1CitkcXJlZDEyMCByZWR1Y2UgLTEuMDAwMDAwRSs2IC0+IC0xRSs2CitkcXJlZDEyMSByZWR1Y2UgLTEwLjAwMDAwRSs2IC0+IC0xRSs3CitkcXJlZDEyMiByZWR1Y2UgLTEwMC4wMDAwRSs2IC0+IC0xRSs4CitkcXJlZDEyMyByZWR1Y2UgLTEwMDAuMDAwRSs2IC0+IC0xRSs5CitkcXJlZDEyNCByZWR1Y2UgLTEwMDAwLjAwRSs2IC0+IC0xRSsxMAorZHFyZWQxMjUgcmVkdWNlIC0xMDAwMDAuMEUrNiAtPiAtMUUrMTEKK2RxcmVkMTI2IHJlZHVjZSAtMTAwMDAwMC5FKzYgLT4gLTFFKzEyCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK2RxcmVkMTQwIHJlZHVjZSAnMi4xJyAgICAgLT4gICcyLjEnCitkcXJlZDE0MSByZWR1Y2UgJy0yLjAnICAgIC0+ICAnLTInCitkcXJlZDE0MiByZWR1Y2UgJzEuMjAwJyAgIC0+ICAnMS4yJworZHFyZWQxNDMgcmVkdWNlICctMTIwJyAgICAtPiAgJy0xLjJFKzInCitkcXJlZDE0NCByZWR1Y2UgJzEyMC4wMCcgIC0+ICAnMS4yRSsyJworZHFyZWQxNDUgcmVkdWNlICcwLjAwJyAgICAtPiAgJzAnCisKKy0tIE5tYXgsIE5taW4sIE50aW55CistLSBub3RlIG9yaWdhbWkgZWZmZWN0IG9uIHNvbWUgb2YgdGhlc2UKK2RxcmVkMTUxIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyZWQxNTIgcmVkdWNlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwMDAwMEUrNjE0MCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDBFKzYxNDAKK2RxcmVkMTUzIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMEUrNjE0NAorZHFyZWQxNTQgcmVkdWNlICAxRS02MTQzICAgICAgICAgICAgICAgICAgIC0+IDFFLTYxNDMKK2RxcmVkMTU1IHJlZHVjZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAxRS02MTQzCitkcXJlZDE1NiByZWR1Y2UgIDIuMDAwRS02MTczICAgICAgICAgICAgICAgLT4gMkUtNjE3MyAgIFN1Ym5vcm1hbAorZHFyZWQxNTcgcmVkdWNlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IDFFLTYxNzYgICBTdWJub3JtYWwKKworZHFyZWQxNjEgcmVkdWNlICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2ICBTdWJub3JtYWwKK2RxcmVkMTYyIHJlZHVjZSAgLTIuMDAwRS02MTczICAgICAgICAgICAgICAtPiAtMkUtNjE3MyAgU3Vibm9ybWFsCitkcXJlZDE2MyByZWR1Y2UgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTFFLTYxNDMKK2RxcmVkMTY0IHJlZHVjZSAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0MworZHFyZWQxNjUgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDBFKzYxNDAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwRSs2MTQwCitkcXJlZDE2NiByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwRSs2MTQ0CitkcXJlZDE2NyByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0CitkcXJlZDE2OCByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJlZDE2OSByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0CisKKworLS0gc3BlY2lhbHMgKHJlZHVjZSBkb2VzIG5vdCBhZmZlY3QgcGF5bG9hZCkKK2RxcmVkODIwIHJlZHVjZSAnSW5mJyAgICAtPiAnSW5maW5pdHknCitkcXJlZDgyMSByZWR1Y2UgJy1JbmYnICAgLT4gJy1JbmZpbml0eScKK2RxcmVkODIyIHJlZHVjZSAgIE5hTiAgICAtPiAgTmFOCitkcXJlZDgyMyByZWR1Y2UgIHNOYU4gICAgLT4gIE5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZWQ4MjQgcmVkdWNlICAgTmFOMTAxIC0+ICBOYU4xMDEKK2RxcmVkODI1IHJlZHVjZSAgc05hTjAxMCAtPiAgTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uCitkcXJlZDgyNyByZWR1Y2UgIC1OYU4gICAgLT4gLU5hTgorZHFyZWQ4MjggcmVkdWNlIC1zTmFOICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVkODI5IHJlZHVjZSAgLU5hTjEwMSAtPiAtTmFOMTAxCitkcXJlZDgzMCByZWR1Y2UgLXNOYU4wMTAgLT4gLU5hTjEwICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3QKK2RxcmVkOTAwIHJlZHVjZSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlci5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyLmRlY1Rlc3QKaW5kZXggYmFlOGVhZS4uMDkwZDNjZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyLmRlY1Rlc3QKQEAgLTEsNTk3ICsxLDU5NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFSZW1haW5kZXIuZGVjVGVzdCAtLSBkZWNRdWFkIHJlbWFpbmRlciAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkNCi1kcXJlbTAwMSByZW1haW5kZXIgIDEgICAgIDEgICAgLT4gIDANCi1kcXJlbTAwMiByZW1haW5kZXIgIDIgICAgIDEgICAgLT4gIDANCi1kcXJlbTAwMyByZW1haW5kZXIgIDEgICAgIDIgICAgLT4gIDENCi1kcXJlbTAwNCByZW1haW5kZXIgIDIgICAgIDIgICAgLT4gIDANCi1kcXJlbTAwNSByZW1haW5kZXIgIDAgICAgIDEgICAgLT4gIDANCi1kcXJlbTAwNiByZW1haW5kZXIgIDAgICAgIDIgICAgLT4gIDANCi1kcXJlbTAwNyByZW1haW5kZXIgIDEgICAgIDMgICAgLT4gIDENCi1kcXJlbTAwOCByZW1haW5kZXIgIDIgICAgIDMgICAgLT4gIDINCi1kcXJlbTAwOSByZW1haW5kZXIgIDMgICAgIDMgICAgLT4gIDANCi0NCi1kcXJlbTAxMCByZW1haW5kZXIgIDIuNCAgIDEgICAgLT4gIDAuNA0KLWRxcmVtMDExIHJlbWFpbmRlciAgMi40ICAgLTEgICAtPiAgMC40DQotZHFyZW0wMTIgcmVtYWluZGVyICAtMi40ICAxICAgIC0+ICAtMC40DQotZHFyZW0wMTMgcmVtYWluZGVyICAtMi40ICAtMSAgIC0+ICAtMC40DQotZHFyZW0wMTQgcmVtYWluZGVyICAyLjQwICAxICAgIC0+ICAwLjQwDQotZHFyZW0wMTUgcmVtYWluZGVyICAyLjQwMCAxICAgIC0+ICAwLjQwMA0KLWRxcmVtMDE2IHJlbWFpbmRlciAgMi40ICAgMiAgICAtPiAgMC40DQotZHFyZW0wMTcgcmVtYWluZGVyICAyLjQwMCAyICAgIC0+ICAwLjQwMA0KLWRxcmVtMDE4IHJlbWFpbmRlciAgMi4gICAgMiAgICAtPiAgMA0KLWRxcmVtMDE5IHJlbWFpbmRlciAgMjAgICAgMjAgICAtPiAgMA0KLQ0KLWRxcmVtMDIwIHJlbWFpbmRlciAgMTg3ICAgMTg3ICAgIC0+ICAwDQotZHFyZW0wMjEgcmVtYWluZGVyICA1ICAgICAyICAgICAgLT4gIDENCi1kcXJlbTAyMiByZW1haW5kZXIgIDUgICAgIDIuMCAgICAtPiAgMS4wDQotZHFyZW0wMjMgcmVtYWluZGVyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwDQotZHFyZW0wMjQgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwDQotZHFyZW0wMjUgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwDQotDQotZHFyZW0wMzAgcmVtYWluZGVyICAxICAgICAyICAgICAgLT4gIDENCi1kcXJlbTAzMSByZW1haW5kZXIgIDEgICAgIDQgICAgICAtPiAgMQ0KLWRxcmVtMDMyIHJlbWFpbmRlciAgMSAgICAgOCAgICAgIC0+ICAxDQotDQotZHFyZW0wMzMgcmVtYWluZGVyICAxICAgICAxNiAgICAgLT4gIDENCi1kcXJlbTAzNCByZW1haW5kZXIgIDEgICAgIDMyICAgICAtPiAgMQ0KLWRxcmVtMDM1IHJlbWFpbmRlciAgMSAgICAgNjQgICAgIC0+ICAxDQotZHFyZW0wNDAgcmVtYWluZGVyICAxICAgIC0yICAgICAgLT4gIDENCi1kcXJlbTA0MSByZW1haW5kZXIgIDEgICAgLTQgICAgICAtPiAgMQ0KLWRxcmVtMDQyIHJlbWFpbmRlciAgMSAgICAtOCAgICAgIC0+ICAxDQotZHFyZW0wNDMgcmVtYWluZGVyICAxICAgIC0xNiAgICAgLT4gIDENCi1kcXJlbTA0NCByZW1haW5kZXIgIDEgICAgLTMyICAgICAtPiAgMQ0KLWRxcmVtMDQ1IHJlbWFpbmRlciAgMSAgICAtNjQgICAgIC0+ICAxDQotZHFyZW0wNTAgcmVtYWluZGVyIC0xICAgICAyICAgICAgLT4gIC0xDQotZHFyZW0wNTEgcmVtYWluZGVyIC0xICAgICA0ICAgICAgLT4gIC0xDQotZHFyZW0wNTIgcmVtYWluZGVyIC0xICAgICA4ICAgICAgLT4gIC0xDQotZHFyZW0wNTMgcmVtYWluZGVyIC0xICAgICAxNiAgICAgLT4gIC0xDQotZHFyZW0wNTQgcmVtYWluZGVyIC0xICAgICAzMiAgICAgLT4gIC0xDQotZHFyZW0wNTUgcmVtYWluZGVyIC0xICAgICA2NCAgICAgLT4gIC0xDQotZHFyZW0wNjAgcmVtYWluZGVyIC0xICAgIC0yICAgICAgLT4gIC0xDQotZHFyZW0wNjEgcmVtYWluZGVyIC0xICAgIC00ICAgICAgLT4gIC0xDQotZHFyZW0wNjIgcmVtYWluZGVyIC0xICAgIC04ICAgICAgLT4gIC0xDQotZHFyZW0wNjMgcmVtYWluZGVyIC0xICAgIC0xNiAgICAgLT4gIC0xDQotZHFyZW0wNjQgcmVtYWluZGVyIC0xICAgIC0zMiAgICAgLT4gIC0xDQotZHFyZW0wNjUgcmVtYWluZGVyIC0xICAgIC02NCAgICAgLT4gIC0xDQotDQotZHFyZW0wNjYgcmVtYWluZGVyICA5OTk5OTk5OTkgICAgIDEgIC0+IDANCi1kcXJlbTA2NyByZW1haW5kZXIgIDk5OTk5OTk5OS40ICAgMSAgLT4gMC40DQotZHFyZW0wNjggcmVtYWluZGVyICA5OTk5OTk5OTkuNSAgIDEgIC0+IDAuNQ0KLWRxcmVtMDY5IHJlbWFpbmRlciAgOTk5OTk5OTk5LjkgICAxICAtPiAwLjkNCi1kcXJlbTA3MCByZW1haW5kZXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gMC45OTkNCi1kcXJlbTA3MSByZW1haW5kZXIgIDk5OTk5OS45OTk5OTkgMSAgLT4gMC45OTk5OTkNCi1kcXJlbTA3MiByZW1haW5kZXIgIDkgICAgICAgICAgICAgMSAgLT4gMA0KLQ0KLWRxcmVtMDgwIHJlbWFpbmRlciAgMC4gICAgICAgICAgICAxICAtPiAwDQotZHFyZW0wODEgcmVtYWluZGVyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMA0KLWRxcmVtMDgyIHJlbWFpbmRlciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwDQotZHFyZW0wODMgcmVtYWluZGVyICAwLjAwRSs5ICAgICAgIDEgIC0+IDANCi1kcXJlbTA4NCByZW1haW5kZXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMA0KLWRxcmVtMDg1IHJlbWFpbmRlciAgMC4wMEUrMiAgICAgICAxICAtPiAwDQotZHFyZW0wODYgcmVtYWluZGVyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMA0KLWRxcmVtMDg3IHJlbWFpbmRlciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwDQotZHFyZW0wODggcmVtYWluZGVyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDANCi1kcXJlbTA4OSByZW1haW5kZXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDANCi1kcXJlbTA5MCByZW1haW5kZXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwDQotZHFyZW0wOTEgcmVtYWluZGVyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDANCi1kcXJlbTA5MiByZW1haW5kZXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDANCi1kcXJlbTA5MyByZW1haW5kZXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNw0KLWRxcmVtMDk0IHJlbWFpbmRlciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04DQotZHFyZW0wOTUgcmVtYWluZGVyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0DQotDQotLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMA0KLWRxcmVtMTAxIHJlbWFpbmRlciAgMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcmVtMTAyIHJlbWFpbmRlciAgMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcmVtMTAzIHJlbWFpbmRlciAtMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcmVtMTA0IHJlbWFpbmRlciAtMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcmVtMTA1IHJlbWFpbmRlciAgMC4wRTUgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcmVtMTA2IHJlbWFpbmRlciAgMC4wMDAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLS0tIFtTb21lIHRoaW5rIHRoaXMgbmV4dCBncm91cCBzaG91bGQgYmUgRGl2aXNpb25fYnlfemVybyBleGNlcHRpb24sIGJ1dA0KLS0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yDQotLS0gcmVtYWluZGVyLW5lYXIsIGFueXdheV0NCi1kcXJlbTEwNyByZW1haW5kZXIgIDAuMDAwMSAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTA4IHJlbWFpbmRlciAgMC4wMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMDkgcmVtYWluZGVyICAwLjEgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTExMCByZW1haW5kZXIgIDEgICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTExIHJlbWFpbmRlciAgMSAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMTIgcmVtYWluZGVyIDEwICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTExMyByZW1haW5kZXIgMUUrMTAwICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTE0IHJlbWFpbmRlciAxRSszODAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMTUgcmVtYWluZGVyICAwLjAwMDEgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTExNiByZW1haW5kZXIgIDAuMDEgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTE5IHJlbWFpbmRlciAgMC4xICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMjAgcmVtYWluZGVyICAxICAgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTEyMSByZW1haW5kZXIgIDEgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTIyIHJlbWFpbmRlciAxMCAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMjMgcmVtYWluZGVyIDFFKzEwMCAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTEyNCByZW1haW5kZXIgMUUrMzg0ICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGFuZCB6ZXJvcyBvbiBsZWZ0DQotZHFyZW0xMzAgcmVtYWluZGVyICAwICAgICAgMSAgIC0+ICAwDQotZHFyZW0xMzEgcmVtYWluZGVyICAwICAgICAtMSAgIC0+ICAwDQotZHFyZW0xMzIgcmVtYWluZGVyICAwLjAgICAgMSAgIC0+ICAwLjANCi1kcXJlbTEzMyByZW1haW5kZXIgIDAuMCAgIC0xICAgLT4gIDAuMA0KLWRxcmVtMTM0IHJlbWFpbmRlciAtMCAgICAgIDEgICAtPiAtMA0KLWRxcmVtMTM1IHJlbWFpbmRlciAtMCAgICAgLTEgICAtPiAtMA0KLWRxcmVtMTM2IHJlbWFpbmRlciAtMC4wICAgIDEgICAtPiAtMC4wDQotZHFyZW0xMzcgcmVtYWluZGVyIC0wLjAgICAtMSAgIC0+IC0wLjANCi0NCi0tLSAwLjVlcnMNCi1kcXJlbTE0MyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUNCi1kcXJlbTE0NCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUNCi1kcXJlbTE0NSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwDQotZHFyZW0xNDYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDANCi1kcXJlbTE0NyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwDQotZHFyZW0xNDggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MA0KLWRxcmVtMTQ5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwDQotDQotLS0gc3RlYWRpZXMNCi1kcXJlbTE1MCByZW1haW5kZXIgIDEgIDEgICAtPiAwDQotZHFyZW0xNTEgcmVtYWluZGVyICAxICAyICAgLT4gMQ0KLWRxcmVtMTUyIHJlbWFpbmRlciAgMSAgMyAgIC0+IDENCi1kcXJlbTE1MyByZW1haW5kZXIgIDEgIDQgICAtPiAxDQotZHFyZW0xNTQgcmVtYWluZGVyICAxICA1ICAgLT4gMQ0KLWRxcmVtMTU1IHJlbWFpbmRlciAgMSAgNiAgIC0+IDENCi1kcXJlbTE1NiByZW1haW5kZXIgIDEgIDcgICAtPiAxDQotZHFyZW0xNTcgcmVtYWluZGVyICAxICA4ICAgLT4gMQ0KLWRxcmVtMTU4IHJlbWFpbmRlciAgMSAgOSAgIC0+IDENCi1kcXJlbTE1OSByZW1haW5kZXIgIDEgIDEwICAtPiAxDQotZHFyZW0xNjAgcmVtYWluZGVyICAxICAxICAgLT4gMA0KLWRxcmVtMTYxIHJlbWFpbmRlciAgMiAgMSAgIC0+IDANCi1kcXJlbTE2MiByZW1haW5kZXIgIDMgIDEgICAtPiAwDQotZHFyZW0xNjMgcmVtYWluZGVyICA0ICAxICAgLT4gMA0KLWRxcmVtMTY0IHJlbWFpbmRlciAgNSAgMSAgIC0+IDANCi1kcXJlbTE2NSByZW1haW5kZXIgIDYgIDEgICAtPiAwDQotZHFyZW0xNjYgcmVtYWluZGVyICA3ICAxICAgLT4gMA0KLWRxcmVtMTY3IHJlbWFpbmRlciAgOCAgMSAgIC0+IDANCi1kcXJlbTE2OCByZW1haW5kZXIgIDkgIDEgICAtPiAwDQotZHFyZW0xNjkgcmVtYWluZGVyICAxMCAxICAgLT4gMA0KLQ0KLS0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyDQotZHFyZW0xNzEgcmVtYWluZGVyICAgMC40ICAxLjAyMCAtPiAgMC40MDANCi1kcXJlbTE3MiByZW1haW5kZXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMA0KLWRxcmVtMTczIHJlbWFpbmRlciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwDQotZHFyZW0xNzQgcmVtYWluZGVyICAgMC41MiAxLjAyMCAtPiAgMC41MjANCi1kcXJlbTE3NSByZW1haW5kZXIgICAwLjYgIDEuMDIwIC0+ICAwLjYwMA0KLQ0KLS0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDANCi1kcXJlbTIwMSByZW1haW5kZXIgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcmVtMjAyIHJlbWFpbmRlciAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFyZW0yMDMgcmVtYWluZGVyICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJlbTIwNCByZW1haW5kZXIgIDAuMDAwMSAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0yMDUgcmVtYWluZGVyICAwLjAxICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMjA2IHJlbWFpbmRlciAgMC4xICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTIwNyByZW1haW5kZXIgIDEgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0yMDggcmVtYWluZGVyICAxICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMjA5IHJlbWFpbmRlciAxMCAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTIxMCByZW1haW5kZXIgMUUrMTAwICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0yMTEgcmVtYWluZGVyIDFFKzM4MCAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyDQotZHFyZW0yMzEgcmVtYWluZGVyICAtMC40ICAxLjAyMCAtPiAtMC40MDANCi1kcXJlbTIzMiByZW1haW5kZXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMA0KLWRxcmVtMjMzIHJlbWFpbmRlciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwDQotZHFyZW0yMzQgcmVtYWluZGVyICAtMC41MiAxLjAyMCAtPiAtMC41MjANCi1kcXJlbTIzNSByZW1haW5kZXIgIC0wLjYgIDEuMDIwIC0+IC0wLjYwMA0KLQ0KLS0tIGhpZ2ggWHMNCi1kcXJlbTI0MCByZW1haW5kZXIgIDFFKzIgIDEuMDAgIC0+ICAwLjAwDQotDQotLS0gZHFyZW0zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwNCi1kcXJlbTMwMSByZW1haW5kZXIgICAxICAgIDMgICAgIC0+ICAxDQotZHFyZW0zMDIgcmVtYWluZGVyICAgNSAgICA1ICAgICAtPiAgMA0KLWRxcmVtMzAzIHJlbWFpbmRlciAgIDEzICAgMTAgICAgLT4gIDMNCi1kcXJlbTMwNCByZW1haW5kZXIgICAxMyAgIDUwICAgIC0+ICAxMw0KLWRxcmVtMzA1IHJlbWFpbmRlciAgIDEzICAgMTAwICAgLT4gIDEzDQotZHFyZW0zMDYgcmVtYWluZGVyICAgMTMgICAxMDAwICAtPiAgMTMNCi1kcXJlbTMwNyByZW1haW5kZXIgICAuMTMgICAgMSAgIC0+ICAwLjEzDQotZHFyZW0zMDggcmVtYWluZGVyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMNCi1kcXJlbTMwOSByZW1haW5kZXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMNCi1kcXJlbTMxMCByZW1haW5kZXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMw0KLWRxcmVtMzExIHJlbWFpbmRlciAgIDEwLjMzICAxICAgLT4gIDAuMzMNCi1kcXJlbTMxMiByZW1haW5kZXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzDQotZHFyZW0zMTMgcmVtYWluZGVyICAgMTAzLjMgIDEgICAtPiAgMC4zDQotZHFyZW0zMTQgcmVtYWluZGVyICAgMTMzICAgMTAgICAtPiAgMw0KLWRxcmVtMzE1IHJlbWFpbmRlciAgIDEwMzMgIDEwICAgLT4gIDMNCi1kcXJlbTMxNiByZW1haW5kZXIgICAxMDMzICA1MCAgIC0+ICAzMw0KLWRxcmVtMzE3IHJlbWFpbmRlciAgIDEwMS4wICAzICAgLT4gIDIuMA0KLWRxcmVtMzE4IHJlbWFpbmRlciAgIDEwMi4wICAzICAgLT4gIDAuMA0KLWRxcmVtMzE5IHJlbWFpbmRlciAgIDEwMy4wICAzICAgLT4gIDEuMA0KLWRxcmVtMzIwIHJlbWFpbmRlciAgIDIuNDAgICAxICAgLT4gIDAuNDANCi1kcXJlbTMyMSByZW1haW5kZXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMA0KLWRxcmVtMzIyIHJlbWFpbmRlciAgIDIuNCAgICAxICAgLT4gIDAuNA0KLWRxcmVtMzIzIHJlbWFpbmRlciAgIDIuNCAgICAyICAgLT4gIDAuNA0KLWRxcmVtMzI0IHJlbWFpbmRlciAgIDIuNDAwICAyICAgLT4gIDAuNDAwDQotZHFyZW0zMjUgcmVtYWluZGVyICAgMSAgIDAuMyAgICAtPiAgMC4xDQotZHFyZW0zMjYgcmVtYWluZGVyICAgMSAgIDAuMzAgICAtPiAgMC4xMA0KLWRxcmVtMzI3IHJlbWFpbmRlciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwDQotZHFyZW0zMjggcmVtYWluZGVyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwDQotZHFyZW0zMjkgcmVtYWluZGVyICAgMS4wICAgIDAuMyAtPiAgMC4xDQotZHFyZW0zMzAgcmVtYWluZGVyICAgMS4wMCAgIDAuMyAtPiAgMC4xMA0KLWRxcmVtMzMxIHJlbWFpbmRlciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwDQotZHFyZW0zMzIgcmVtYWluZGVyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwDQotZHFyZW0zMzMgcmVtYWluZGVyICAgMC41ICAyICAgICAtPiAgMC41DQotZHFyZW0zMzQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41DQotZHFyZW0zMzUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MA0KLWRxcmVtMzM2IHJlbWFpbmRlciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwDQotZHFyZW0zMzcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MA0KLWRxcmVtMzM4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTANCi1kcXJlbTMzOSByZW1haW5kZXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMA0KLQ0KLWRxcmVtMzQwIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgMC41MDAwMDAwDQotZHFyZW0zNDEgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMA0KLWRxcmVtMzQyIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMA0KLWRxcmVtMzQzIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwDQotZHFyZW0zNDQgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwMA0KLWRxcmVtMzQ1IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNw0KLWRxcmVtMzQ2IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgNCi1kcXJlbTM0NyByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OSAgICAtPiAgMUUtOQ0KLWRxcmVtMzQ4IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTANCi1kcXJlbTM0OSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQ0KLWRxcmVtMzUwIHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMg0KLQ0KLWRxcmVtMzUxIHJlbWFpbmRlciAgIDAuMDMgIDcgIC0+ICAwLjAzDQotZHFyZW0zNTIgcmVtYWluZGVyICAgNSAgIDIgICAgLT4gIDENCi1kcXJlbTM1MyByZW1haW5kZXIgICA0LjEgICAyICAgIC0+ICAwLjENCi1kcXJlbTM1NCByZW1haW5kZXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQ0KLWRxcmVtMzU1IHJlbWFpbmRlciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDENCi1kcXJlbTM1NiByZW1haW5kZXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDENCi1kcXJlbTM1NyByZW1haW5kZXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQ0KLWRxcmVtMzU4IHJlbWFpbmRlciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDENCi1kcXJlbTM1OSByZW1haW5kZXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03DQotDQotZHFyZW0zNjAgcmVtYWluZGVyICAgMS4yICAgMC43MzQ1IC0+ICAwLjQ2NTUNCi1kcXJlbTM2MSByZW1haW5kZXIgICAwLjggICAxMiAgICAgLT4gIDAuOA0KLWRxcmVtMzYyIHJlbWFpbmRlciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wDQotZHFyZW0zNjMgcmVtYWluZGVyICAgMC44ICAgMC4zICAgIC0+ICAwLjINCi1kcXJlbTM2NCByZW1haW5kZXIgICAwLjgwMCAgIDEyICAgLT4gIDAuODAwDQotZHFyZW0zNjUgcmVtYWluZGVyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMA0KLWRxcmVtMzY2IHJlbWFpbmRlciAgIDIuNDAwICAgMiAgICAtPiAgMC40MDANCi0NCi1kcXJlbTM3MSByZW1haW5kZXIgICAyLjQwMCAgMiAgICAgICAgLT4gIDAuNDAwDQotDQotZHFyZW0zODEgcmVtYWluZGVyIDEyMzQ1ICAxICAgICAgICAgLT4gIDANCi1kcXJlbTM4MiByZW1haW5kZXIgMTIzNDUgIDEuMDAwMSAgICAtPiAgMC43NjU3DQotZHFyZW0zODMgcmVtYWluZGVyIDEyMzQ1ICAxLjAwMSAgICAgLT4gIDAuNjY4DQotZHFyZW0zODQgcmVtYWluZGVyIDEyMzQ1ICAxLjAxICAgICAgLT4gIDAuNzgNCi1kcXJlbTM4NSByZW1haW5kZXIgMTIzNDUgIDEuMSAgICAgICAtPiAgMC44DQotZHFyZW0zODYgcmVtYWluZGVyIDEyMzU1ICA0ICAgICAgICAgLT4gIDMNCi1kcXJlbTM4NyByZW1haW5kZXIgMTIzNDUgIDQgICAgICAgICAtPiAgMQ0KLWRxcmVtMzg4IHJlbWFpbmRlciAxMjM1NSAgNC4wMDAxICAgIC0+ICAyLjY5MTINCi1kcXJlbTM4OSByZW1haW5kZXIgMTIzNDUgIDQuMDAwMSAgICAtPiAgMC42OTE0DQotZHFyZW0zOTAgcmVtYWluZGVyIDEyMzQ1ICA0LjkgICAgICAgLT4gIDEuOQ0KLWRxcmVtMzkxIHJlbWFpbmRlciAxMjM0NSAgNC45OSAgICAgIC0+ICA0LjczDQotZHFyZW0zOTIgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDIuNDY5DQotZHFyZW0zOTMgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDAuMjQ2OQ0KLWRxcmVtMzk0IHJlbWFpbmRlciAxMjM0NSAgNSAgICAgICAgIC0+ICAwDQotZHFyZW0zOTUgcmVtYWluZGVyIDEyMzQ1ICA1LjAwMDEgICAgLT4gIDQuNzUzMg0KLWRxcmVtMzk2IHJlbWFpbmRlciAxMjM0NSAgNS4wMDEgICAgIC0+ICAyLjUzMg0KLWRxcmVtMzk3IHJlbWFpbmRlciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2DQotZHFyZW0zOTggcmVtYWluZGVyIDEyMzQ1ICA1LjEgICAgICAgLT4gIDMuMA0KLQ0KLS0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzDQotZHFyZW00MDEgcmVtYWluZGVyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUNCi1kcXJlbTQwMiByZW1haW5kZXIgICAwLjU1ICAgICAgICAxICAgLT4gIDAuNTUNCi1kcXJlbTQwMyByZW1haW5kZXIgICAwLjU1NSAgICAgICAxICAgLT4gIDAuNTU1DQotZHFyZW00MDQgcmVtYWluZGVyICAgMC41NTU1ICAgICAgMSAgIC0+ICAwLjU1NTUNCi1kcXJlbTQwNSByZW1haW5kZXIgICAwLjU1NTU1ICAgICAxICAgLT4gIDAuNTU1NTUNCi1kcXJlbTQwNiByZW1haW5kZXIgICAwLjU1NTU1NSAgICAxICAgLT4gIDAuNTU1NTU1DQotZHFyZW00MDcgcmVtYWluZGVyICAgMC41NTU1NTU1ICAgMSAgIC0+ICAwLjU1NTU1NTUNCi1kcXJlbTQwOCByZW1haW5kZXIgICAwLjU1NTU1NTU1ICAxICAgLT4gIDAuNTU1NTU1NTUNCi1kcXJlbTQwOSByZW1haW5kZXIgICAwLjU1NTU1NTU1NSAxICAgLT4gIDAuNTU1NTU1NTU1DQotDQotLS0gZm9sZGRvd25zDQotZHFyZW00MjEgcmVtYWluZGVyICAgMUUrNjE0NCAgICAgICAgMSAgLT4gICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcmVtNDIyIHJlbWFpbmRlciAgIDFFKzYxNDQgIDFFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkDQotZHFyZW00MjMgcmVtYWluZGVyICAgMUUrNjE0NCAgMkUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQNCi1kcXJlbTQyNCByZW1haW5kZXIgICAxRSs2MTQ0ICAzRSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLWRxcmVtNDI1IHJlbWFpbmRlciAgIDFFKzYxNDQgIDRFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQotZHFyZW00MjYgcmVtYWluZGVyICAgMUUrNjE0NCAgNUUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQNCi1kcXJlbTQyNyByZW1haW5kZXIgICAxRSs2MTQ0ICA2RSs2MTQzICAtPiAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLWRxcmVtNDI4IHJlbWFpbmRlciAgIDFFKzYxNDQgIDdFKzYxNDMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQotZHFyZW00MjkgcmVtYWluZGVyICAgMUUrNjE0NCAgOEUrNjE0MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCi1kcXJlbTQzMCByZW1haW5kZXIgICAxRSs2MTQ0ICA5RSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLS0tIHRpbmllcw0KLWRxcmVtNDMxIHJlbWFpbmRlciAgIDFFLTYxNzUgIDFFLTYxNzYgIC0+ICAgMEUtNjE3Ng0KLWRxcmVtNDMyIHJlbWFpbmRlciAgIDFFLTYxNzUgIDJFLTYxNzYgIC0+ICAgMEUtNjE3Ng0KLWRxcmVtNDMzIHJlbWFpbmRlciAgIDFFLTYxNzUgIDNFLTYxNzYgIC0+ICAgMUUtNjE3NiBTdWJub3JtYWwNCi1kcXJlbTQzNCByZW1haW5kZXIgICAxRS02MTc1ICA0RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsDQotZHFyZW00MzUgcmVtYWluZGVyICAgMUUtNjE3NSAgNUUtNjE3NiAgLT4gICAwRS02MTc2DQotZHFyZW00MzYgcmVtYWluZGVyICAgMUUtNjE3NSAgNkUtNjE3NiAgLT4gICA0RS02MTc2IFN1Ym5vcm1hbA0KLWRxcmVtNDM3IHJlbWFpbmRlciAgIDFFLTYxNzUgIDdFLTYxNzYgIC0+ICAgM0UtNjE3NiBTdWJub3JtYWwNCi1kcXJlbTQzOCByZW1haW5kZXIgICAxRS02MTc1ICA4RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsDQotZHFyZW00MzkgcmVtYWluZGVyICAgMUUtNjE3NSAgOUUtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbA0KLWRxcmVtNDQwIHJlbWFpbmRlciAgIDFFLTYxNzUgMTBFLTYxNzYgIC0+ICAgMEUtNjE3Ng0KLWRxcmVtNDQxIHJlbWFpbmRlciAgIDFFLTYxNzUgMTFFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwNCi1kcXJlbTQ0MiByZW1haW5kZXIgMTAwRS02MTc1IDExRS02MTc2ICAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsDQotZHFyZW00NDMgcmVtYWluZGVyIDEwMEUtNjE3NSAyMEUtNjE3NiAgLT4gICAwRS02MTc2DQotZHFyZW00NDQgcmVtYWluZGVyIDEwMEUtNjE3NSAyMUUtNjE3NiAgLT4gMS4zRS02MTc1IFN1Ym5vcm1hbA0KLWRxcmVtNDQ1IHJlbWFpbmRlciAxMDBFLTYxNzUgMzBFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwNCi0NCi0tLSB6ZXJvIHNpZ25zDQotZHFyZW02NTAgcmVtYWluZGVyICAxICAxIC0+ICAwDQotZHFyZW02NTEgcmVtYWluZGVyIC0xICAxIC0+IC0wDQotZHFyZW02NTIgcmVtYWluZGVyICAxIC0xIC0+ICAwDQotZHFyZW02NTMgcmVtYWluZGVyIC0xIC0xIC0+IC0wDQotZHFyZW02NTQgcmVtYWluZGVyICAwICAxIC0+ICAwDQotZHFyZW02NTUgcmVtYWluZGVyIC0wICAxIC0+IC0wDQotZHFyZW02NTYgcmVtYWluZGVyICAwIC0xIC0+ICAwDQotZHFyZW02NTcgcmVtYWluZGVyIC0wIC0xIC0+IC0wDQotZHFyZW02NTggcmVtYWluZGVyICAwLjAwICAxICAtPiAgMC4wMA0KLWRxcmVtNjU5IHJlbWFpbmRlciAtMC4wMCAgMSAgLT4gLTAuMDANCi0NCi0tLSBTcGVjaWFscw0KLWRxcmVtNjgwIHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNjgxIHJlbWFpbmRlciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNjgyIHJlbWFpbmRlciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNjgzIHJlbWFpbmRlciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNjg0IHJlbWFpbmRlciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNjg1IHJlbWFpbmRlciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNjg2IHJlbWFpbmRlciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNjg3IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNjg4IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDANCi1kcXJlbTY4OSByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTY5MSByZW1haW5kZXIgLTEgICAgIEluZiAgIC0+IC0xDQotZHFyZW02OTIgcmVtYWluZGVyICAwICAgICBJbmYgICAtPiAgMA0KLWRxcmVtNjkzIHJlbWFpbmRlciAtMCAgICAgSW5mICAgLT4gLTANCi1kcXJlbTY5NCByZW1haW5kZXIgIDEgICAgIEluZiAgIC0+ICAxDQotZHFyZW02OTUgcmVtYWluZGVyICAxMDAwICBJbmYgICAtPiAgMTAwMA0KLWRxcmVtNjk2IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxcmVtNzAwIHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzAxIHJlbWFpbmRlciAtSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzAyIHJlbWFpbmRlciAtSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzAzIHJlbWFpbmRlciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzA0IHJlbWFpbmRlciAtSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzA1IHJlbWFpbmRlciAtSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzA2IHJlbWFpbmRlciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzA3IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzA4IHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzA5IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDANCi1kcXJlbTcxMCByZW1haW5kZXIgLTEgICAgLUluZiAgIC0+IC0xDQotZHFyZW03MTEgcmVtYWluZGVyIC0wICAgIC1JbmYgICAtPiAtMA0KLWRxcmVtNzEyIHJlbWFpbmRlciAgMCAgICAtSW5mICAgLT4gIDANCi1kcXJlbTcxMyByZW1haW5kZXIgIDEgICAgLUluZiAgIC0+ICAxDQotZHFyZW03MTQgcmVtYWluZGVyICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KLWRxcmVtNzE1IHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxcmVtNzIxIHJlbWFpbmRlciAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRxcmVtNzIyIHJlbWFpbmRlciAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRxcmVtNzIzIHJlbWFpbmRlciAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRxcmVtNzI0IHJlbWFpbmRlciAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRxcmVtNzI1IHJlbWFpbmRlciAtTmFOICAwICAgICAgLT4gLU5hTg0KLWRxcmVtNzI2IHJlbWFpbmRlciAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRxcmVtNzI3IHJlbWFpbmRlciAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRxcmVtNzI4IHJlbWFpbmRlciAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRxcmVtNzI5IHJlbWFpbmRlciAgTmFOIC1OYU4gICAgLT4gIE5hTg0KLWRxcmVtNzMwIHJlbWFpbmRlciAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRxcmVtNzMxIHJlbWFpbmRlciAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxcmVtNzMyIHJlbWFpbmRlciAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxcmVtNzMzIHJlbWFpbmRlciAtMCAgIC1OYU4gICAgLT4gLU5hTg0KLWRxcmVtNzM0IHJlbWFpbmRlciAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxcmVtNzM1IHJlbWFpbmRlciAgMSAgIC1OYU4gICAgLT4gLU5hTg0KLWRxcmVtNzM2IHJlbWFpbmRlciAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxcmVtNzM3IHJlbWFpbmRlciAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRxcmVtNzQxIHJlbWFpbmRlciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc0MiByZW1haW5kZXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NDMgcmVtYWluZGVyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzQ0IHJlbWFpbmRlciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc0NSByZW1haW5kZXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NDYgcmVtYWluZGVyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzQ3IHJlbWFpbmRlciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc0OSByZW1haW5kZXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NTAgcmVtYWluZGVyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzUxIHJlbWFpbmRlciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc1MiByZW1haW5kZXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NTMgcmVtYWluZGVyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzU0IHJlbWFpbmRlciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc1NSByZW1haW5kZXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NTYgcmVtYWluZGVyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzU3IHJlbWFpbmRlciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc1OCByZW1haW5kZXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NTkgcmVtYWluZGVyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2luZyBOYU5zDQotZHFyZW03NjAgcmVtYWluZGVyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xDQotZHFyZW03NjEgcmVtYWluZGVyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NjIgcmVtYWluZGVyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NjMgcmVtYWluZGVyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NjQgcmVtYWluZGVyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQ0KLWRxcmVtNzY1IHJlbWFpbmRlciAgTmFONiAgIE5hTjEyICAtPiAgTmFONg0KLWRxcmVtNzY2IHJlbWFpbmRlciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMNCi1kcXJlbTc2NyByZW1haW5kZXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0DQotZHFyZW03NjggcmVtYWluZGVyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQ0KLWRxcmVtNzY5IHJlbWFpbmRlciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYNCi0NCi0tLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUNCi1kcXJlbTc3MCAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAxMCAgICAtPiAgNg0KLWRxcmVtNzcxICByZW1haW5kZXIgIDEyMzQ1Njg4ODg4ODg4ODc3Nzc3Nzc3Nzc4OTAxMjM0NTYgICAxICAgIC0+ICAwDQotZHFyZW03NzIgIHJlbWFpbmRlciAgMTIzNDU2ODg4ODg4ODg4Nzc3Nzc3Nzc3Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFyZW03NzMgIHJlbWFpbmRlciAgMTIzNDU2ODg4ODg4ODg4Nzc3Nzc3Nzc3Nzg5MDEyMzQ1NiAgIDAuMDEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotDQotLS0gbG9uZyBvcGVyYW5kIGNoZWNrcw0KLWRxcmVtODAxIHJlbWFpbmRlciAxMjM0NTY3ODAwMCAxMDAgLT4gMA0KLWRxcmVtODAyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQ0KLWRxcmVtODAzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMA0KLWRxcmVtODA0IHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAgICAgLT4gMQ0KLWRxcmVtODA1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMA0KLWRxcmVtODA2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQ0KLWRxcmVtODA3IHJlbWFpbmRlciAxMjM0NTY3ODkxICAxMCAgLT4gMQ0KLWRxcmVtODA4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLWRxcmVtODA5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQ0KLWRxcmVtODEwIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRxcmVtODExIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNg0KLWRxcmVtODEyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLWRxcmVtODIxIHJlbWFpbmRlciAxMjM0NTY3ODAwMCAxMDAgLT4gMA0KLWRxcmVtODIyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQ0KLWRxcmVtODIzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMA0KLWRxcmVtODI0IHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAgICAgLT4gMQ0KLWRxcmVtODI1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMA0KLWRxcmVtODI2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQ0KLWRxcmVtODI3IHJlbWFpbmRlciAxMjM0NTY3ODkxICAxMCAgLT4gMQ0KLWRxcmVtODI4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLWRxcmVtODI5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQ0KLWRxcmVtODMwIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRxcmVtODMxIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNg0KLWRxcmVtODMyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLS0tIGZyb20gZGl2aWRlaW50DQotZHFyZW04NDAgcmVtYWluZGVyICAxMDAwMDAwMDAuMCAgIDEgIC0+ICAwLjANCi1kcXJlbTg0MSByZW1haW5kZXIgIDEwMDAwMDAwMC40ICAgMSAgLT4gIDAuNA0KLWRxcmVtODQyIHJlbWFpbmRlciAgMTAwMDAwMDAwLjUgICAxICAtPiAgMC41DQotZHFyZW04NDMgcmVtYWluZGVyICAxMDAwMDAwMDAuOSAgIDEgIC0+ICAwLjkNCi1kcXJlbTg0NCByZW1haW5kZXIgIDEwMDAwMDAwMC45OTkgMSAgLT4gIDAuOTk5DQotZHFyZW04NTAgcmVtYWluZGVyICAxMDAwMDAwMDMgICAgIDUgIC0+ICAzDQotZHFyZW04NTEgcmVtYWluZGVyICAxMDAwMDAwMyAgICAgIDUgIC0+ICAzDQotZHFyZW04NTIgcmVtYWluZGVyICAxMDAwMDAzICAgICAgIDUgIC0+ICAzDQotZHFyZW04NTMgcmVtYWluZGVyICAxMDAwMDMgICAgICAgIDUgIC0+ICAzDQotZHFyZW04NTQgcmVtYWluZGVyICAxMDAwMyAgICAgICAgIDUgIC0+ICAzDQotZHFyZW04NTUgcmVtYWluZGVyICAxMDAzICAgICAgICAgIDUgIC0+ICAzDQotZHFyZW04NTYgcmVtYWluZGVyICAxMDMgICAgICAgICAgIDUgIC0+ICAzDQotZHFyZW04NTcgcmVtYWluZGVyICAxMyAgICAgICAgICAgIDUgIC0+ICAzDQotZHFyZW04NTggcmVtYWluZGVyICAxICAgICAgICAgICAgIDUgIC0+ICAxDQotDQotLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kcXJlbTg2MCByZW1haW5kZXIgMTIzLjBlMSAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZHFyZW04NjEgcmVtYWluZGVyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRxcmVtODYyIHJlbWFpbmRlciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kcXJlbTg2MyByZW1haW5kZXIgMS4yM2UzICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZHFyZW04NjQgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRxcmVtODcwIHJlbWFpbmRlciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg3MSByZW1haW5kZXIgMTIzZTEgICAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04NzIgcmVtYWluZGVyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODczIHJlbWFpbmRlciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg3NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDEwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04NzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODc2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg3NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04NzggcmVtYWluZGVyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODc5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg4MCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMTAwMDAwMCAtPiAxMjMwDQotZHFyZW04ODEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMA0KLWRxcmVtODgyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzANCi1kcXJlbTg4MyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMTAwMCAtPiAgMjMwDQotZHFyZW04ODQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMA0KLWRxcmVtODg1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDANCi1kcXJlbTg4NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMSAtPiAgICAwDQotDQotZHFyZW04OTAgcmVtYWluZGVyIDEyM2UxICAgIDIwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODkxIHJlbWFpbmRlciAxMjNlMSAgICAgMjAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg5MiByZW1haW5kZXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04OTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDIwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODk0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgMjAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg5NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04OTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDIwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODk3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgMjAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg5OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDIwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTAxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgMjAwMDAwIC0+IDEyMzANCi1kcXJlbTkwMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwDQotZHFyZW05MDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDIwMDAgLT4gMTIzMA0KLWRxcmVtOTA0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgMjAwIC0+ICAgMzANCi1kcXJlbTkwNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgIDEwDQotZHFyZW05MDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDIgLT4gICAgMA0KLQ0KLWRxcmVtOTEwIHJlbWFpbmRlciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkxMSByZW1haW5kZXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MTIgcmVtYWluZGVyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTEzIHJlbWFpbmRlciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkxNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MTUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTE2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkxNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MTkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTIwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzANCi1kcXJlbTkyMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwDQotZHFyZW05MjIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMA0KLWRxcmVtOTIzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzANCi1kcXJlbTkyNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwDQotZHFyZW05MjUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gICAzMA0KLWRxcmVtOTI2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDANCi0NCi1kcXJlbTkzMCByZW1haW5kZXIgMTIzZTEgICAgOTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MzEgcmVtYWluZGVyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTMyIHJlbWFpbmRlciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkzMyByZW1haW5kZXIgMTIzZTEgICAgICAgOTAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MzQgcmVtYWluZGVyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTM1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkzNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgOTAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTM5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTk0MCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgOTAwMDAwMCAtPiAxMjMwDQotZHFyZW05NDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMA0KLWRxcmVtOTQyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzANCi1kcXJlbTk0MyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgOTAwMCAtPiAxMjMwDQotZHFyZW05NDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMA0KLWRxcmVtOTQ1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAgNjANCi1kcXJlbTk0NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgOSAtPiAgICA2DQotDQotZHFyZW05NTAgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05NjEgcmVtYWluZGVyIDEyM2UxICAgMjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFyZW05NjIgcmVtYWluZGVyIDEyM2UxICAgMzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFyZW05NjMgcmVtYWluZGVyIDEyM2UxICAgNDk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFyZW05NjQgcmVtYWluZGVyIDEyM2UxICAgNTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFyZW05NjUgcmVtYWluZGVyIDEyM2UxICAgNjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFyZW05NjYgcmVtYWluZGVyIDEyM2UxICAgNzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFyZW05NjcgcmVtYWluZGVyIDEyM2UxICAgODk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFyZW05NjggcmVtYWluZGVyIDEyM2UxICAgOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFyZW05NjkgcmVtYWluZGVyIDEyM2UxICAgOTg3NjU0MzIxMDk4NzY1NCAtPiAxMjMwDQotDQotZHFyZW05ODAgcmVtYWluZGVyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5DQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdDQotZHFyZW0xMDUxIHJlbWFpbmRlciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFyZW0xMDUyIHJlbWFpbmRlciAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFyZW0xMDUzIHJlbWFpbmRlciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFyZW0xMDU0IHJlbWFpbmRlciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFyZW0xMDU1IHJlbWFpbmRlciAgMWUtMjc3ICAxZSszMTEgLT4gIDFFLTI3Nw0KLWRxcmVtMTA1NiByZW1haW5kZXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcNCi1kcXJlbTEwNTcgcmVtYWluZGVyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3DQotZHFyZW0xMDU4IHJlbWFpbmRlciAtMWUtMjc3IC0xZSszMTEgLT4gLTFFLTI3Nw0KLQ0KLS0tIEd5dXJpcyBleGFtcGxlDQotZHFyZW0xMDcwIHJlbWFpbmRlciA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0Mw0KLQ0KLS0tIGRlc3RydWN0aXZlIHN1YnRyYWN0DQotZHFyZW0xMTIwICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgMC43NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjgNCi1kcXJlbTExMjEgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgMC42NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc3OQ0KLWRxcmVtMTEyMiAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgMC41NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4ODkwDQotZHFyZW0xMTIzICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgMi42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2ODcNCi1kcXJlbTExMjQgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY5Mg0KLWRxcmVtMTEyNSAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gICAgMy42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUxDQotZHFyZW0xMTI2ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgIDEuNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcNCi1kcXJlbTExMjcgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICA0LjI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0Ng0KLWRxcmVtMTEyOCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgNC4zMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzU5DQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxcmVtMTAwMCByZW1haW5kZXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMDAxIHJlbWFpbmRlciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxUmVtYWluZGVyLmRlY1Rlc3QgLS0gZGVjUXVhZCByZW1haW5kZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpCitkcXJlbTAwMSByZW1haW5kZXIgIDEgICAgIDEgICAgLT4gIDAKK2RxcmVtMDAyIHJlbWFpbmRlciAgMiAgICAgMSAgICAtPiAgMAorZHFyZW0wMDMgcmVtYWluZGVyICAxICAgICAyICAgIC0+ICAxCitkcXJlbTAwNCByZW1haW5kZXIgIDIgICAgIDIgICAgLT4gIDAKK2RxcmVtMDA1IHJlbWFpbmRlciAgMCAgICAgMSAgICAtPiAgMAorZHFyZW0wMDYgcmVtYWluZGVyICAwICAgICAyICAgIC0+ICAwCitkcXJlbTAwNyByZW1haW5kZXIgIDEgICAgIDMgICAgLT4gIDEKK2RxcmVtMDA4IHJlbWFpbmRlciAgMiAgICAgMyAgICAtPiAgMgorZHFyZW0wMDkgcmVtYWluZGVyICAzICAgICAzICAgIC0+ICAwCisKK2RxcmVtMDEwIHJlbWFpbmRlciAgMi40ICAgMSAgICAtPiAgMC40CitkcXJlbTAxMSByZW1haW5kZXIgIDIuNCAgIC0xICAgLT4gIDAuNAorZHFyZW0wMTIgcmVtYWluZGVyICAtMi40ICAxICAgIC0+ICAtMC40CitkcXJlbTAxMyByZW1haW5kZXIgIC0yLjQgIC0xICAgLT4gIC0wLjQKK2RxcmVtMDE0IHJlbWFpbmRlciAgMi40MCAgMSAgICAtPiAgMC40MAorZHFyZW0wMTUgcmVtYWluZGVyICAyLjQwMCAxICAgIC0+ICAwLjQwMAorZHFyZW0wMTYgcmVtYWluZGVyICAyLjQgICAyICAgIC0+ICAwLjQKK2RxcmVtMDE3IHJlbWFpbmRlciAgMi40MDAgMiAgICAtPiAgMC40MDAKK2RxcmVtMDE4IHJlbWFpbmRlciAgMi4gICAgMiAgICAtPiAgMAorZHFyZW0wMTkgcmVtYWluZGVyICAyMCAgICAyMCAgIC0+ICAwCisKK2RxcmVtMDIwIHJlbWFpbmRlciAgMTg3ICAgMTg3ICAgIC0+ICAwCitkcXJlbTAyMSByZW1haW5kZXIgIDUgICAgIDIgICAgICAtPiAgMQorZHFyZW0wMjIgcmVtYWluZGVyICA1ICAgICAyLjAgICAgLT4gIDEuMAorZHFyZW0wMjMgcmVtYWluZGVyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwCitkcXJlbTAyNCByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKK2RxcmVtMDI1IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorCitkcXJlbTAzMCByZW1haW5kZXIgIDEgICAgIDIgICAgICAtPiAgMQorZHFyZW0wMzEgcmVtYWluZGVyICAxICAgICA0ICAgICAgLT4gIDEKK2RxcmVtMDMyIHJlbWFpbmRlciAgMSAgICAgOCAgICAgIC0+ICAxCisKK2RxcmVtMDMzIHJlbWFpbmRlciAgMSAgICAgMTYgICAgIC0+ICAxCitkcXJlbTAzNCByZW1haW5kZXIgIDEgICAgIDMyICAgICAtPiAgMQorZHFyZW0wMzUgcmVtYWluZGVyICAxICAgICA2NCAgICAgLT4gIDEKK2RxcmVtMDQwIHJlbWFpbmRlciAgMSAgICAtMiAgICAgIC0+ICAxCitkcXJlbTA0MSByZW1haW5kZXIgIDEgICAgLTQgICAgICAtPiAgMQorZHFyZW0wNDIgcmVtYWluZGVyICAxICAgIC04ICAgICAgLT4gIDEKK2RxcmVtMDQzIHJlbWFpbmRlciAgMSAgICAtMTYgICAgIC0+ICAxCitkcXJlbTA0NCByZW1haW5kZXIgIDEgICAgLTMyICAgICAtPiAgMQorZHFyZW0wNDUgcmVtYWluZGVyICAxICAgIC02NCAgICAgLT4gIDEKK2RxcmVtMDUwIHJlbWFpbmRlciAtMSAgICAgMiAgICAgIC0+ICAtMQorZHFyZW0wNTEgcmVtYWluZGVyIC0xICAgICA0ICAgICAgLT4gIC0xCitkcXJlbTA1MiByZW1haW5kZXIgLTEgICAgIDggICAgICAtPiAgLTEKK2RxcmVtMDUzIHJlbWFpbmRlciAtMSAgICAgMTYgICAgIC0+ICAtMQorZHFyZW0wNTQgcmVtYWluZGVyIC0xICAgICAzMiAgICAgLT4gIC0xCitkcXJlbTA1NSByZW1haW5kZXIgLTEgICAgIDY0ICAgICAtPiAgLTEKK2RxcmVtMDYwIHJlbWFpbmRlciAtMSAgICAtMiAgICAgIC0+ICAtMQorZHFyZW0wNjEgcmVtYWluZGVyIC0xICAgIC00ICAgICAgLT4gIC0xCitkcXJlbTA2MiByZW1haW5kZXIgLTEgICAgLTggICAgICAtPiAgLTEKK2RxcmVtMDYzIHJlbWFpbmRlciAtMSAgICAtMTYgICAgIC0+ICAtMQorZHFyZW0wNjQgcmVtYWluZGVyIC0xICAgIC0zMiAgICAgLT4gIC0xCitkcXJlbTA2NSByZW1haW5kZXIgLTEgICAgLTY0ICAgICAtPiAgLTEKKworZHFyZW0wNjYgcmVtYWluZGVyICA5OTk5OTk5OTkgICAgIDEgIC0+IDAKK2RxcmVtMDY3IHJlbWFpbmRlciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQKK2RxcmVtMDY4IHJlbWFpbmRlciAgOTk5OTk5OTk5LjUgICAxICAtPiAwLjUKK2RxcmVtMDY5IHJlbWFpbmRlciAgOTk5OTk5OTk5LjkgICAxICAtPiAwLjkKK2RxcmVtMDcwIHJlbWFpbmRlciAgOTk5OTk5OTk5Ljk5OSAxICAtPiAwLjk5OQorZHFyZW0wNzEgcmVtYWluZGVyICA5OTk5OTkuOTk5OTk5IDEgIC0+IDAuOTk5OTk5CitkcXJlbTA3MiByZW1haW5kZXIgIDkgICAgICAgICAgICAgMSAgLT4gMAorCitkcXJlbTA4MCByZW1haW5kZXIgIDAuICAgICAgICAgICAgMSAgLT4gMAorZHFyZW0wODEgcmVtYWluZGVyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMAorZHFyZW0wODIgcmVtYWluZGVyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDAKK2RxcmVtMDgzIHJlbWFpbmRlciAgMC4wMEUrOSAgICAgICAxICAtPiAwCitkcXJlbTA4NCByZW1haW5kZXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMAorZHFyZW0wODUgcmVtYWluZGVyICAwLjAwRSsyICAgICAgIDEgIC0+IDAKK2RxcmVtMDg2IHJlbWFpbmRlciAgMC4wMEUrMSAgICAgICAxICAtPiAwLjAKK2RxcmVtMDg3IHJlbWFpbmRlciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwCitkcXJlbTA4OCByZW1haW5kZXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMAorZHFyZW0wODkgcmVtYWluZGVyICAwLjAwRS0xICAgICAgIDEgIC0+IDAuMDAwCitkcXJlbTA5MCByZW1haW5kZXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwCitkcXJlbTA5MSByZW1haW5kZXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMAorZHFyZW0wOTIgcmVtYWluZGVyICAwLjAwRS00ICAgICAgIDEgIC0+IDAuMDAwMDAwCitkcXJlbTA5MyByZW1haW5kZXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNworZHFyZW0wOTQgcmVtYWluZGVyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgKK2RxcmVtMDk1IHJlbWFpbmRlciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NAorCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwCitkcXJlbTEwMSByZW1haW5kZXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMTAyIHJlbWFpbmRlciAgMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFyZW0xMDMgcmVtYWluZGVyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTEwNCByZW1haW5kZXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMTA1IHJlbWFpbmRlciAgMC4wRTUgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFyZW0xMDYgcmVtYWluZGVyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCistLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQKKy0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yCistLSByZW1haW5kZXItbmVhciwgYW55d2F5XQorZHFyZW0xMDcgcmVtYWluZGVyICAwLjAwMDEgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTA4IHJlbWFpbmRlciAgMC4wMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEwOSByZW1haW5kZXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMTAgcmVtYWluZGVyICAxICAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTExIHJlbWFpbmRlciAgMSAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExMiByZW1haW5kZXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMTMgcmVtYWluZGVyIDFFKzEwMCAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTE0IHJlbWFpbmRlciAxRSszODAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExNSByZW1haW5kZXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMTYgcmVtYWluZGVyICAwLjAxICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTE5IHJlbWFpbmRlciAgMC4xICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEyMCByZW1haW5kZXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMjEgcmVtYWluZGVyICAxICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTIyIHJlbWFpbmRlciAxMCAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEyMyByZW1haW5kZXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMjQgcmVtYWluZGVyIDFFKzM4NCAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB6ZXJvcyBvbiBsZWZ0CitkcXJlbTEzMCByZW1haW5kZXIgIDAgICAgICAxICAgLT4gIDAKK2RxcmVtMTMxIHJlbWFpbmRlciAgMCAgICAgLTEgICAtPiAgMAorZHFyZW0xMzIgcmVtYWluZGVyICAwLjAgICAgMSAgIC0+ICAwLjAKK2RxcmVtMTMzIHJlbWFpbmRlciAgMC4wICAgLTEgICAtPiAgMC4wCitkcXJlbTEzNCByZW1haW5kZXIgLTAgICAgICAxICAgLT4gLTAKK2RxcmVtMTM1IHJlbWFpbmRlciAtMCAgICAgLTEgICAtPiAtMAorZHFyZW0xMzYgcmVtYWluZGVyIC0wLjAgICAgMSAgIC0+IC0wLjAKK2RxcmVtMTM3IHJlbWFpbmRlciAtMC4wICAgLTEgICAtPiAtMC4wCisKKy0tIDAuNWVycworZHFyZW0xNDMgcmVtYWluZGVyICAgMC41ICAyICAgICAtPiAgMC41CitkcXJlbTE0NCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK2RxcmVtMTQ1IHJlbWFpbmRlciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK2RxcmVtMTQ2IHJlbWFpbmRlciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkcXJlbTE0NyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCitkcXJlbTE0OCByZW1haW5kZXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCitkcXJlbTE0OSByZW1haW5kZXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCistLSBzdGVhZGllcworZHFyZW0xNTAgcmVtYWluZGVyICAxICAxICAgLT4gMAorZHFyZW0xNTEgcmVtYWluZGVyICAxICAyICAgLT4gMQorZHFyZW0xNTIgcmVtYWluZGVyICAxICAzICAgLT4gMQorZHFyZW0xNTMgcmVtYWluZGVyICAxICA0ICAgLT4gMQorZHFyZW0xNTQgcmVtYWluZGVyICAxICA1ICAgLT4gMQorZHFyZW0xNTUgcmVtYWluZGVyICAxICA2ICAgLT4gMQorZHFyZW0xNTYgcmVtYWluZGVyICAxICA3ICAgLT4gMQorZHFyZW0xNTcgcmVtYWluZGVyICAxICA4ICAgLT4gMQorZHFyZW0xNTggcmVtYWluZGVyICAxICA5ICAgLT4gMQorZHFyZW0xNTkgcmVtYWluZGVyICAxICAxMCAgLT4gMQorZHFyZW0xNjAgcmVtYWluZGVyICAxICAxICAgLT4gMAorZHFyZW0xNjEgcmVtYWluZGVyICAyICAxICAgLT4gMAorZHFyZW0xNjIgcmVtYWluZGVyICAzICAxICAgLT4gMAorZHFyZW0xNjMgcmVtYWluZGVyICA0ICAxICAgLT4gMAorZHFyZW0xNjQgcmVtYWluZGVyICA1ICAxICAgLT4gMAorZHFyZW0xNjUgcmVtYWluZGVyICA2ICAxICAgLT4gMAorZHFyZW0xNjYgcmVtYWluZGVyICA3ICAxICAgLT4gMAorZHFyZW0xNjcgcmVtYWluZGVyICA4ICAxICAgLT4gMAorZHFyZW0xNjggcmVtYWluZGVyICA5ICAxICAgLT4gMAorZHFyZW0xNjkgcmVtYWluZGVyICAxMCAxICAgLT4gMAorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcgorZHFyZW0xNzEgcmVtYWluZGVyICAgMC40ICAxLjAyMCAtPiAgMC40MDAKK2RxcmVtMTcyIHJlbWFpbmRlciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwCitkcXJlbTE3MyByZW1haW5kZXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMAorZHFyZW0xNzQgcmVtYWluZGVyICAgMC41MiAxLjAyMCAtPiAgMC41MjAKK2RxcmVtMTc1IHJlbWFpbmRlciAgIDAuNiAgMS4wMjAgLT4gIDAuNjAwCisKKy0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDAKK2RxcmVtMjAxIHJlbWFpbmRlciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTIwMiByZW1haW5kZXIgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFyZW0yMDMgcmVtYWluZGVyICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMjA0IHJlbWFpbmRlciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMjA1IHJlbWFpbmRlciAgMC4wMSAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMjA2IHJlbWFpbmRlciAgMC4xICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMjA3IHJlbWFpbmRlciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMjA4IHJlbWFpbmRlciAgMSAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMjA5IHJlbWFpbmRlciAxMCAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMjEwIHJlbWFpbmRlciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMjExIHJlbWFpbmRlciAxRSszODAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXIKK2RxcmVtMjMxIHJlbWFpbmRlciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwCitkcXJlbTIzMiByZW1haW5kZXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMAorZHFyZW0yMzMgcmVtYWluZGVyICAtMC41MSAxLjAyMCAtPiAtMC41MTAKK2RxcmVtMjM0IHJlbWFpbmRlciAgLTAuNTIgMS4wMjAgLT4gLTAuNTIwCitkcXJlbTIzNSByZW1haW5kZXIgIC0wLjYgIDEuMDIwIC0+IC0wLjYwMAorCistLSBoaWdoIFhzCitkcXJlbTI0MCByZW1haW5kZXIgIDFFKzIgIDEuMDAgIC0+ICAwLjAwCisKKy0tIGRxcmVtM3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsCitkcXJlbTMwMSByZW1haW5kZXIgICAxICAgIDMgICAgIC0+ICAxCitkcXJlbTMwMiByZW1haW5kZXIgICA1ICAgIDUgICAgIC0+ICAwCitkcXJlbTMwMyByZW1haW5kZXIgICAxMyAgIDEwICAgIC0+ICAzCitkcXJlbTMwNCByZW1haW5kZXIgICAxMyAgIDUwICAgIC0+ICAxMworZHFyZW0zMDUgcmVtYWluZGVyICAgMTMgICAxMDAgICAtPiAgMTMKK2RxcmVtMzA2IHJlbWFpbmRlciAgIDEzICAgMTAwMCAgLT4gIDEzCitkcXJlbTMwNyByZW1haW5kZXIgICAuMTMgICAgMSAgIC0+ICAwLjEzCitkcXJlbTMwOCByZW1haW5kZXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMworZHFyZW0zMDkgcmVtYWluZGVyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzCitkcXJlbTMxMCByZW1haW5kZXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMworZHFyZW0zMTEgcmVtYWluZGVyICAgMTAuMzMgIDEgICAtPiAgMC4zMworZHFyZW0zMTIgcmVtYWluZGVyICAgMTAuMzMgMTAgICAtPiAgMC4zMworZHFyZW0zMTMgcmVtYWluZGVyICAgMTAzLjMgIDEgICAtPiAgMC4zCitkcXJlbTMxNCByZW1haW5kZXIgICAxMzMgICAxMCAgIC0+ICAzCitkcXJlbTMxNSByZW1haW5kZXIgICAxMDMzICAxMCAgIC0+ICAzCitkcXJlbTMxNiByZW1haW5kZXIgICAxMDMzICA1MCAgIC0+ICAzMworZHFyZW0zMTcgcmVtYWluZGVyICAgMTAxLjAgIDMgICAtPiAgMi4wCitkcXJlbTMxOCByZW1haW5kZXIgICAxMDIuMCAgMyAgIC0+ICAwLjAKK2RxcmVtMzE5IHJlbWFpbmRlciAgIDEwMy4wICAzICAgLT4gIDEuMAorZHFyZW0zMjAgcmVtYWluZGVyICAgMi40MCAgIDEgICAtPiAgMC40MAorZHFyZW0zMjEgcmVtYWluZGVyICAgMi40MDAgIDEgICAtPiAgMC40MDAKK2RxcmVtMzIyIHJlbWFpbmRlciAgIDIuNCAgICAxICAgLT4gIDAuNAorZHFyZW0zMjMgcmVtYWluZGVyICAgMi40ICAgIDIgICAtPiAgMC40CitkcXJlbTMyNCByZW1haW5kZXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMAorZHFyZW0zMjUgcmVtYWluZGVyICAgMSAgIDAuMyAgICAtPiAgMC4xCitkcXJlbTMyNiByZW1haW5kZXIgICAxICAgMC4zMCAgIC0+ICAwLjEwCitkcXJlbTMyNyByZW1haW5kZXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMAorZHFyZW0zMjggcmVtYWluZGVyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwCitkcXJlbTMyOSByZW1haW5kZXIgICAxLjAgICAgMC4zIC0+ICAwLjEKK2RxcmVtMzMwIHJlbWFpbmRlciAgIDEuMDAgICAwLjMgLT4gIDAuMTAKK2RxcmVtMzMxIHJlbWFpbmRlciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwCitkcXJlbTMzMiByZW1haW5kZXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDAKK2RxcmVtMzMzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZHFyZW0zMzQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41CitkcXJlbTMzNSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitkcXJlbTMzNiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZHFyZW0zMzcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MAorZHFyZW0zMzggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MAorZHFyZW0zMzkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworZHFyZW0zNDAgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAwLjUwMDAwMDAKK2RxcmVtMzQxIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAKK2RxcmVtMzQyIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMAorZHFyZW0zNDMgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDAKK2RxcmVtMzQ0IHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwMDAKK2RxcmVtMzQ1IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNworZHFyZW0zNDYgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OSAgICAtPiAgMUUtOAorZHFyZW0zNDcgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkKK2RxcmVtMzQ4IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTAKK2RxcmVtMzQ5IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OTkgICAgLT4gIDFFLTExCitkcXJlbTM1MCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTIKKworZHFyZW0zNTEgcmVtYWluZGVyICAgMC4wMyAgNyAgLT4gIDAuMDMKK2RxcmVtMzUyIHJlbWFpbmRlciAgIDUgICAyICAgIC0+ICAxCitkcXJlbTM1MyByZW1haW5kZXIgICA0LjEgICAyICAgIC0+ICAwLjEKK2RxcmVtMzU0IHJlbWFpbmRlciAgIDQuMDEgICAyICAgIC0+ICAwLjAxCitkcXJlbTM1NSByZW1haW5kZXIgICA0LjAwMSAgIDIgICAgLT4gIDAuMDAxCitkcXJlbTM1NiByZW1haW5kZXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDEKK2RxcmVtMzU3IHJlbWFpbmRlciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxCitkcXJlbTM1OCByZW1haW5kZXIgICA0LjAwMDAwMSAgIDIgICAgLT4gIDAuMDAwMDAxCitkcXJlbTM1OSByZW1haW5kZXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03CisKK2RxcmVtMzYwIHJlbWFpbmRlciAgIDEuMiAgIDAuNzM0NSAtPiAgMC40NjU1CitkcXJlbTM2MSByZW1haW5kZXIgICAwLjggICAxMiAgICAgLT4gIDAuOAorZHFyZW0zNjIgcmVtYWluZGVyICAgMC44ICAgMC4yICAgIC0+ICAwLjAKK2RxcmVtMzYzIHJlbWFpbmRlciAgIDAuOCAgIDAuMyAgICAtPiAgMC4yCitkcXJlbTM2NCByZW1haW5kZXIgICAwLjgwMCAgIDEyICAgLT4gIDAuODAwCitkcXJlbTM2NSByZW1haW5kZXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwCitkcXJlbTM2NiByZW1haW5kZXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwCisKK2RxcmVtMzcxIHJlbWFpbmRlciAgIDIuNDAwICAyICAgICAgICAtPiAgMC40MDAKKworZHFyZW0zODEgcmVtYWluZGVyIDEyMzQ1ICAxICAgICAgICAgLT4gIDAKK2RxcmVtMzgyIHJlbWFpbmRlciAxMjM0NSAgMS4wMDAxICAgIC0+ICAwLjc2NTcKK2RxcmVtMzgzIHJlbWFpbmRlciAxMjM0NSAgMS4wMDEgICAgIC0+ICAwLjY2OAorZHFyZW0zODQgcmVtYWluZGVyIDEyMzQ1ICAxLjAxICAgICAgLT4gIDAuNzgKK2RxcmVtMzg1IHJlbWFpbmRlciAxMjM0NSAgMS4xICAgICAgIC0+ICAwLjgKK2RxcmVtMzg2IHJlbWFpbmRlciAxMjM1NSAgNCAgICAgICAgIC0+ICAzCitkcXJlbTM4NyByZW1haW5kZXIgMTIzNDUgIDQgICAgICAgICAtPiAgMQorZHFyZW0zODggcmVtYWluZGVyIDEyMzU1ICA0LjAwMDEgICAgLT4gIDIuNjkxMgorZHFyZW0zODkgcmVtYWluZGVyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNAorZHFyZW0zOTAgcmVtYWluZGVyIDEyMzQ1ICA0LjkgICAgICAgLT4gIDEuOQorZHFyZW0zOTEgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDQuNzMKK2RxcmVtMzkyIHJlbWFpbmRlciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQorZHFyZW0zOTMgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDAuMjQ2OQorZHFyZW0zOTQgcmVtYWluZGVyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDAKK2RxcmVtMzk1IHJlbWFpbmRlciAxMjM0NSAgNS4wMDAxICAgIC0+ICA0Ljc1MzIKK2RxcmVtMzk2IHJlbWFpbmRlciAxMjM0NSAgNS4wMDEgICAgIC0+ICAyLjUzMgorZHFyZW0zOTcgcmVtYWluZGVyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYKK2RxcmVtMzk4IHJlbWFpbmRlciAxMjM0NSAgNS4xICAgICAgIC0+ICAzLjAKKworLS0gdGhlIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMKK2RxcmVtNDAxIHJlbWFpbmRlciAgIDAuNSAgICAgICAgIDEgICAtPiAgMC41CitkcXJlbTQwMiByZW1haW5kZXIgICAwLjU1ICAgICAgICAxICAgLT4gIDAuNTUKK2RxcmVtNDAzIHJlbWFpbmRlciAgIDAuNTU1ICAgICAgIDEgICAtPiAgMC41NTUKK2RxcmVtNDA0IHJlbWFpbmRlciAgIDAuNTU1NSAgICAgIDEgICAtPiAgMC41NTU1CitkcXJlbTQwNSByZW1haW5kZXIgICAwLjU1NTU1ICAgICAxICAgLT4gIDAuNTU1NTUKK2RxcmVtNDA2IHJlbWFpbmRlciAgIDAuNTU1NTU1ICAgIDEgICAtPiAgMC41NTU1NTUKK2RxcmVtNDA3IHJlbWFpbmRlciAgIDAuNTU1NTU1NSAgIDEgICAtPiAgMC41NTU1NTU1CitkcXJlbTQwOCByZW1haW5kZXIgICAwLjU1NTU1NTU1ICAxICAgLT4gIDAuNTU1NTU1NTUKK2RxcmVtNDA5IHJlbWFpbmRlciAgIDAuNTU1NTU1NTU1IDEgICAtPiAgMC41NTU1NTU1NTUKKworLS0gZm9sZGRvd25zCitkcXJlbTQyMSByZW1haW5kZXIgICAxRSs2MTQ0ICAgICAgICAxICAtPiAgIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJlbTQyMiByZW1haW5kZXIgICAxRSs2MTQ0ICAxRSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZAorZHFyZW00MjMgcmVtYWluZGVyICAgMUUrNjE0NCAgMkUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQKK2RxcmVtNDI0IHJlbWFpbmRlciAgIDFFKzYxNDQgIDNFKzYxNDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJlbTQyNSByZW1haW5kZXIgICAxRSs2MTQ0ICA0RSs2MTQzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFyZW00MjYgcmVtYWluZGVyICAgMUUrNjE0NCAgNUUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQKK2RxcmVtNDI3IHJlbWFpbmRlciAgIDFFKzYxNDQgIDZFKzYxNDMgIC0+ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJlbTQyOCByZW1haW5kZXIgICAxRSs2MTQ0ICA3RSs2MTQzICAtPiAgIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFyZW00MjkgcmVtYWluZGVyICAgMUUrNjE0NCAgOEUrNjE0MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2RxcmVtNDMwIHJlbWFpbmRlciAgIDFFKzYxNDQgIDlFKzYxNDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCistLSB0aW5pZXMKK2RxcmVtNDMxIHJlbWFpbmRlciAgIDFFLTYxNzUgIDFFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFyZW00MzIgcmVtYWluZGVyICAgMUUtNjE3NSAgMkUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJlbTQzMyByZW1haW5kZXIgICAxRS02MTc1ICAzRS02MTc2ICAtPiAgIDFFLTYxNzYgU3Vibm9ybWFsCitkcXJlbTQzNCByZW1haW5kZXIgICAxRS02MTc1ICA0RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsCitkcXJlbTQzNSByZW1haW5kZXIgICAxRS02MTc1ICA1RS02MTc2ICAtPiAgIDBFLTYxNzYKK2RxcmVtNDM2IHJlbWFpbmRlciAgIDFFLTYxNzUgIDZFLTYxNzYgIC0+ICAgNEUtNjE3NiBTdWJub3JtYWwKK2RxcmVtNDM3IHJlbWFpbmRlciAgIDFFLTYxNzUgIDdFLTYxNzYgIC0+ICAgM0UtNjE3NiBTdWJub3JtYWwKK2RxcmVtNDM4IHJlbWFpbmRlciAgIDFFLTYxNzUgIDhFLTYxNzYgIC0+ICAgMkUtNjE3NiBTdWJub3JtYWwKK2RxcmVtNDM5IHJlbWFpbmRlciAgIDFFLTYxNzUgIDlFLTYxNzYgIC0+ICAgMUUtNjE3NiBTdWJub3JtYWwKK2RxcmVtNDQwIHJlbWFpbmRlciAgIDFFLTYxNzUgMTBFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFyZW00NDEgcmVtYWluZGVyICAgMUUtNjE3NSAxMUUtNjE3NiAgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFyZW00NDIgcmVtYWluZGVyIDEwMEUtNjE3NSAxMUUtNjE3NiAgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFyZW00NDMgcmVtYWluZGVyIDEwMEUtNjE3NSAyMEUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJlbTQ0NCByZW1haW5kZXIgMTAwRS02MTc1IDIxRS02MTc2ICAtPiAxLjNFLTYxNzUgU3Vibm9ybWFsCitkcXJlbTQ0NSByZW1haW5kZXIgMTAwRS02MTc1IDMwRS02MTc2ICAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCisKKy0tIHplcm8gc2lnbnMKK2RxcmVtNjUwIHJlbWFpbmRlciAgMSAgMSAtPiAgMAorZHFyZW02NTEgcmVtYWluZGVyIC0xICAxIC0+IC0wCitkcXJlbTY1MiByZW1haW5kZXIgIDEgLTEgLT4gIDAKK2RxcmVtNjUzIHJlbWFpbmRlciAtMSAtMSAtPiAtMAorZHFyZW02NTQgcmVtYWluZGVyICAwICAxIC0+ICAwCitkcXJlbTY1NSByZW1haW5kZXIgLTAgIDEgLT4gLTAKK2RxcmVtNjU2IHJlbWFpbmRlciAgMCAtMSAtPiAgMAorZHFyZW02NTcgcmVtYWluZGVyIC0wIC0xIC0+IC0wCitkcXJlbTY1OCByZW1haW5kZXIgIDAuMDAgIDEgIC0+ICAwLjAwCitkcXJlbTY1OSByZW1haW5kZXIgLTAuMDAgIDEgIC0+IC0wLjAwCisKKy0tIFNwZWNpYWxzCitkcXJlbTY4MCByZW1haW5kZXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjgxIHJlbWFpbmRlciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02ODIgcmVtYWluZGVyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4MyByZW1haW5kZXIgIEluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjg0IHJlbWFpbmRlciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02ODUgcmVtYWluZGVyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4NiByZW1haW5kZXIgIEluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjg3IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02ODggcmVtYWluZGVyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZHFyZW02ODkgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY5MSByZW1haW5kZXIgLTEgICAgIEluZiAgIC0+IC0xCitkcXJlbTY5MiByZW1haW5kZXIgIDAgICAgIEluZiAgIC0+ICAwCitkcXJlbTY5MyByZW1haW5kZXIgLTAgICAgIEluZiAgIC0+IC0wCitkcXJlbTY5NCByZW1haW5kZXIgIDEgICAgIEluZiAgIC0+ICAxCitkcXJlbTY5NSByZW1haW5kZXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkcXJlbTY5NiByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFyZW03MDAgcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwMSByZW1haW5kZXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzAyIHJlbWFpbmRlciAtSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDMgcmVtYWluZGVyIC1JbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwNCByZW1haW5kZXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzA1IHJlbWFpbmRlciAtSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDYgcmVtYWluZGVyIC1JbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwNyByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzA4IHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDkgcmVtYWluZGVyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZHFyZW03MTAgcmVtYWluZGVyIC0xICAgIC1JbmYgICAtPiAtMQorZHFyZW03MTEgcmVtYWluZGVyIC0wICAgIC1JbmYgICAtPiAtMAorZHFyZW03MTIgcmVtYWluZGVyICAwICAgIC1JbmYgICAtPiAgMAorZHFyZW03MTMgcmVtYWluZGVyICAxICAgIC1JbmYgICAtPiAgMQorZHFyZW03MTQgcmVtYWluZGVyICAxMDAwIC1JbmYgICAtPiAgMTAwMAorZHFyZW03MTUgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxcmVtNzIxIHJlbWFpbmRlciAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFyZW03MjIgcmVtYWluZGVyICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcXJlbTcyMyByZW1haW5kZXIgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxcmVtNzI0IHJlbWFpbmRlciAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFyZW03MjUgcmVtYWluZGVyIC1OYU4gIDAgICAgICAtPiAtTmFOCitkcXJlbTcyNiByZW1haW5kZXIgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxcmVtNzI3IHJlbWFpbmRlciAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFyZW03MjggcmVtYWluZGVyICBOYU4gIEluZiAgICAtPiAgTmFOCitkcXJlbTcyOSByZW1haW5kZXIgIE5hTiAtTmFOICAgIC0+ICBOYU4KK2RxcmVtNzMwIHJlbWFpbmRlciAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFyZW03MzEgcmVtYWluZGVyIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcXJlbTczMiByZW1haW5kZXIgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxcmVtNzMzIHJlbWFpbmRlciAtMCAgIC1OYU4gICAgLT4gLU5hTgorZHFyZW03MzQgcmVtYWluZGVyICAwICAgIE5hTiAgICAtPiAgTmFOCitkcXJlbTczNSByZW1haW5kZXIgIDEgICAtTmFOICAgIC0+IC1OYU4KK2RxcmVtNzM2IHJlbWFpbmRlciAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFyZW03MzcgcmVtYWluZGVyICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RxcmVtNzQxIHJlbWFpbmRlciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzQyIHJlbWFpbmRlciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzQzIHJlbWFpbmRlciAtc05hTiAtMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzQ0IHJlbWFpbmRlciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzQ1IHJlbWFpbmRlciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzQ2IHJlbWFpbmRlciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzQ3IHJlbWFpbmRlciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzQ5IHJlbWFpbmRlciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzUwIHJlbWFpbmRlciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzUxIHJlbWFpbmRlciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzUyIHJlbWFpbmRlciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzUzIHJlbWFpbmRlciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzU0IHJlbWFpbmRlciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzU1IHJlbWFpbmRlciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzU2IHJlbWFpbmRlciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzU3IHJlbWFpbmRlciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzU4IHJlbWFpbmRlciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzU5IHJlbWFpbmRlciAgSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnaW5nIE5hTnMKK2RxcmVtNzYwIHJlbWFpbmRlciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQorZHFyZW03NjEgcmVtYWluZGVyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc2MiByZW1haW5kZXIgIE5hTjMgIHNOYU45ICAgLT4gIE5hTjkgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzYzIHJlbWFpbmRlciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NjQgcmVtYWluZGVyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQorZHFyZW03NjUgcmVtYWluZGVyICBOYU42ICAgTmFOMTIgIC0+ICBOYU42CitkcXJlbTc2NiByZW1haW5kZXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzCitkcXJlbTc2NyByZW1haW5kZXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0CitkcXJlbTc2OCByZW1haW5kZXIgICAgMCAgICBOYU4xNSAgLT4gIE5hTjE1CitkcXJlbTc2OSByZW1haW5kZXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2CisKKy0tIGVkZ2UgY2FzZXMgb2YgaW1wb3NzaWJsZQorZHFyZW03NzAgIHJlbWFpbmRlciAgMTIzNDU2ODg4ODg4ODg4Nzc3Nzc3Nzc3Nzg5MDEyMzQ1NiAgMTAgICAgLT4gIDYKK2RxcmVtNzcxICByZW1haW5kZXIgIDEyMzQ1Njg4ODg4ODg4ODc3Nzc3Nzc3Nzc4OTAxMjM0NTYgICAxICAgIC0+ICAwCitkcXJlbTc3MiAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxcmVtNzczICByZW1haW5kZXIgIDEyMzQ1Njg4ODg4ODg4ODc3Nzc3Nzc3Nzc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCitkcXJlbTgwMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK2RxcmVtODAyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZHFyZW04MDMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkcXJlbTgwNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK2RxcmVtODA1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZHFyZW04MDYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkcXJlbTgwNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK2RxcmVtODA4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZHFyZW04MDkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkcXJlbTgxMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RxcmVtODExIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNgorZHFyZW04MTIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKK2RxcmVtODIxIHJlbWFpbmRlciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorZHFyZW04MjIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkcXJlbTgyMyByZW1haW5kZXIgMTIzNDU2NzgwMCAgMTAgIC0+IDAKK2RxcmVtODI0IHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorZHFyZW04MjUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkcXJlbTgyNiByZW1haW5kZXIgMSAxMjM0NTY3ODkwICAgIC0+IDEKK2RxcmVtODI3IHJlbWFpbmRlciAxMjM0NTY3ODkxICAxMCAgLT4gMQorZHFyZW04MjggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkcXJlbTgyOSByZW1haW5kZXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDEKK2RxcmVtODMwIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZHFyZW04MzEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2CitkcXJlbTgzMiByZW1haW5kZXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBkaXZpZGVpbnQKK2RxcmVtODQwIHJlbWFpbmRlciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wCitkcXJlbTg0MSByZW1haW5kZXIgIDEwMDAwMDAwMC40ICAgMSAgLT4gIDAuNAorZHFyZW04NDIgcmVtYWluZGVyICAxMDAwMDAwMDAuNSAgIDEgIC0+ICAwLjUKK2RxcmVtODQzIHJlbWFpbmRlciAgMTAwMDAwMDAwLjkgICAxICAtPiAgMC45CitkcXJlbTg0NCByZW1haW5kZXIgIDEwMDAwMDAwMC45OTkgMSAgLT4gIDAuOTk5CitkcXJlbTg1MCByZW1haW5kZXIgIDEwMDAwMDAwMyAgICAgNSAgLT4gIDMKK2RxcmVtODUxIHJlbWFpbmRlciAgMTAwMDAwMDMgICAgICA1ICAtPiAgMworZHFyZW04NTIgcmVtYWluZGVyICAxMDAwMDAzICAgICAgIDUgIC0+ICAzCitkcXJlbTg1MyByZW1haW5kZXIgIDEwMDAwMyAgICAgICAgNSAgLT4gIDMKK2RxcmVtODU0IHJlbWFpbmRlciAgMTAwMDMgICAgICAgICA1ICAtPiAgMworZHFyZW04NTUgcmVtYWluZGVyICAxMDAzICAgICAgICAgIDUgIC0+ICAzCitkcXJlbTg1NiByZW1haW5kZXIgIDEwMyAgICAgICAgICAgNSAgLT4gIDMKK2RxcmVtODU3IHJlbWFpbmRlciAgMTMgICAgICAgICAgICA1ICAtPiAgMworZHFyZW04NTggcmVtYWluZGVyICAxICAgICAgICAgICAgIDUgIC0+ICAxCisKKy0tIFZsYWRpbWlyJ3MgY2FzZXMgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcXJlbTg2MCByZW1haW5kZXIgMTIzLjBlMSAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJlbTg2MSByZW1haW5kZXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJlbTg2MiByZW1haW5kZXIgMTIuM2UyICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJlbTg2MyByZW1haW5kZXIgMS4yM2UzICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJlbTg2NCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJlbTg3MCByZW1haW5kZXIgMTIzZTEgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg3MSByZW1haW5kZXIgMTIzZTEgICAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg3MiByZW1haW5kZXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg3MyByZW1haW5kZXIgMTIzZTEgICAgICAgMTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg3NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDEwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg3NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg3NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMTAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg3NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg3OCByZW1haW5kZXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg3OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAxMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg4MCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMTAwMDAwMCAtPiAxMjMwCitkcXJlbTg4MSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwCitkcXJlbTg4MiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAxMDAwMCAtPiAxMjMwCitkcXJlbTg4MyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMTAwMCAtPiAgMjMwCitkcXJlbTg4NCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwCitkcXJlbTg4NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAxMCAtPiAgICAwCitkcXJlbTg4NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMSAtPiAgICAwCisKK2RxcmVtODkwIHJlbWFpbmRlciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODkxIHJlbWFpbmRlciAxMjNlMSAgICAgMjAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODkyIHJlbWFpbmRlciAxMjNlMSAgICAgIDIwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODkzIHJlbWFpbmRlciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODk0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgMjAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODk1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDIwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODk2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODk3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgMjAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODk5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDIwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTAwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTAxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgMjAwMDAwIC0+IDEyMzAKK2RxcmVtOTAyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDIwMDAwIC0+IDEyMzAKK2RxcmVtOTAzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IDEyMzAKK2RxcmVtOTA0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgMjAwIC0+ICAgMzAKK2RxcmVtOTA1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDIwIC0+ICAgMTAKK2RxcmVtOTA2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDAKKworZHFyZW05MTAgcmVtYWluZGVyIDEyM2UxICAgIDUwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MTEgcmVtYWluZGVyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MTIgcmVtYWluZGVyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDUwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MTQgcmVtYWluZGVyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MTUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDUwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MTkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMAorZHFyZW05MjAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDUwMDAwMDAgLT4gMTIzMAorZHFyZW05MjEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMAorZHFyZW05MjIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMAorZHFyZW05MjMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDUwMDAgLT4gMTIzMAorZHFyZW05MjQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMAorZHFyZW05MjUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gICAzMAorZHFyZW05MjYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDUgLT4gICAgMAorCitkcXJlbTkzMCByZW1haW5kZXIgMTIzZTEgICAgOTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkzMSByZW1haW5kZXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkzMiByZW1haW5kZXIgMTIzZTEgICAgICA5MDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkzMyByZW1haW5kZXIgMTIzZTEgICAgICAgOTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkzNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkzNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA5MDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkzNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgOTAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkzNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkzOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA5MDAwMDAwMCAtPiAxMjMwCitkcXJlbTk0MCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgOTAwMDAwMCAtPiAxMjMwCitkcXJlbTk0MSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwCitkcXJlbTk0MiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA5MDAwMCAtPiAxMjMwCitkcXJlbTk0MyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgOTAwMCAtPiAxMjMwCitkcXJlbTk0NCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwCitkcXJlbTk0NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA5MCAtPiAgIDYwCitkcXJlbTk0NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgOSAtPiAgICA2CisKK2RxcmVtOTUwIHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05NjEgcmVtYWluZGVyIDEyM2UxICAgMjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2MiByZW1haW5kZXIgMTIzZTEgICAzOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RxcmVtOTYzIHJlbWFpbmRlciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjQgcmVtYWluZGVyIDEyM2UxICAgNTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2NSByZW1haW5kZXIgMTIzZTEgICA2OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RxcmVtOTY2IHJlbWFpbmRlciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjcgcmVtYWluZGVyIDEyM2UxICAgODk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2OCByZW1haW5kZXIgMTIzZTEgICA5OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RxcmVtOTY5IHJlbWFpbmRlciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMAorCitkcXJlbTk4MCByZW1haW5kZXIgMTIzZTEgMTAwMEUyOTkgLT4gMS4yM0UrMyAgLS0gMTIzRSsxIGludGVybmFsbHkKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCitkcXJlbTEwNTEgcmVtYWluZGVyICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxcmVtMTA1MiByZW1haW5kZXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFyZW0xMDUzIHJlbWFpbmRlciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJlbTEwNTQgcmVtYWluZGVyIC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxcmVtMTA1NSByZW1haW5kZXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcKK2RxcmVtMTA1NiByZW1haW5kZXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcKK2RxcmVtMTA1NyByZW1haW5kZXIgLTFlLTI3NyAgMWUrMzExIC0+IC0xRS0yNzcKK2RxcmVtMTA1OCByZW1haW5kZXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcKKworLS0gR3l1cmlzIGV4YW1wbGUKK2RxcmVtMTA3MCByZW1haW5kZXIgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODkwMDBFLTYxNDMgLT4gOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMKKworLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QKK2RxcmVtMTEyMCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIDAuNzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY4CitkcXJlbTExMjEgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgMC42NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc3OQorZHFyZW0xMTIyICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgICAwLjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg4OTAKK2RxcmVtMTEyMyAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjU1ICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0Njg3CitkcXJlbTExMjQgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY5MgorZHFyZW0xMTI1ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgICAzLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTEKK2RxcmVtMTEyNiAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3CitkcXJlbTExMjcgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICA0LjI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NgorZHFyZW0xMTI4ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgICA0LjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTkKKworLS0gTnVsbCB0ZXN0cworZHFyZW0xMDAwIHJlbWFpbmRlciAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTAwMSByZW1haW5kZXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlck5lYXIuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlck5lYXIuZGVjVGVzdAppbmRleCBiODUwNjI2Li4wZGQyNzNmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSZW1haW5kZXJOZWFyLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyTmVhci5kZWNUZXN0CkBAIC0xLDYzMSArMSw2MzEgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxUmVtYWluZGVyTmVhci5kZWNUZXN0IC0tIGRlY1F1YWQgcmVtYWluZGVyLW5lYXIgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpDQotZHFybW4wMDEgcmVtYWluZGVybmVhciAgMSAgICAgMSAgICAtPiAgMA0KLWRxcm1uMDAyIHJlbWFpbmRlcm5lYXIgIDIgICAgIDEgICAgLT4gIDANCi1kcXJtbjAwMyByZW1haW5kZXJuZWFyICAxICAgICAyICAgIC0+ICAxDQotZHFybW4wMDQgcmVtYWluZGVybmVhciAgMiAgICAgMiAgICAtPiAgMA0KLWRxcm1uMDA1IHJlbWFpbmRlcm5lYXIgIDAgICAgIDEgICAgLT4gIDANCi1kcXJtbjAwNiByZW1haW5kZXJuZWFyICAwICAgICAyICAgIC0+ICAwDQotZHFybW4wMDcgcmVtYWluZGVybmVhciAgMSAgICAgMyAgICAtPiAgMQ0KLWRxcm1uMDA4IHJlbWFpbmRlcm5lYXIgIDIgICAgIDMgICAgLT4gLTENCi1kcXJtbjAwOSByZW1haW5kZXJuZWFyICAzICAgICAzICAgIC0+ICAwDQotDQotZHFybW4wMTAgcmVtYWluZGVybmVhciAgMi40ICAgMSAgICAtPiAgMC40DQotZHFybW4wMTEgcmVtYWluZGVybmVhciAgMi40ICAgLTEgICAtPiAgMC40DQotZHFybW4wMTIgcmVtYWluZGVybmVhciAgLTIuNCAgMSAgICAtPiAgLTAuNA0KLWRxcm1uMDEzIHJlbWFpbmRlcm5lYXIgIC0yLjQgIC0xICAgLT4gIC0wLjQNCi1kcXJtbjAxNCByZW1haW5kZXJuZWFyICAyLjQwICAxICAgIC0+ICAwLjQwDQotZHFybW4wMTUgcmVtYWluZGVybmVhciAgMi40MDAgMSAgICAtPiAgMC40MDANCi1kcXJtbjAxNiByZW1haW5kZXJuZWFyICAyLjQgICAyICAgIC0+ICAwLjQNCi1kcXJtbjAxNyByZW1haW5kZXJuZWFyICAyLjQwMCAyICAgIC0+ICAwLjQwMA0KLWRxcm1uMDE4IHJlbWFpbmRlcm5lYXIgIDIuICAgIDIgICAgLT4gIDANCi1kcXJtbjAxOSByZW1haW5kZXJuZWFyICAyMCAgICAyMCAgIC0+ICAwDQotDQotZHFybW4wMjAgcmVtYWluZGVybmVhciAgMTg3ICAgMTg3ICAgIC0+ICAwDQotZHFybW4wMjEgcmVtYWluZGVybmVhciAgNSAgICAgMiAgICAgIC0+ICAxDQotZHFybW4wMjIgcmVtYWluZGVybmVhciAgNSAgICAgMi4wICAgIC0+ICAxLjANCi1kcXJtbjAyMyByZW1haW5kZXJuZWFyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwDQotZHFybW4wMjQgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMA0KLWRxcm1uMDI1IHJlbWFpbmRlcm5lYXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDANCi0NCi1kcXJtbjAzMCByZW1haW5kZXJuZWFyICAxICAgICAyICAgICAgLT4gIDENCi1kcXJtbjAzMSByZW1haW5kZXJuZWFyICAxICAgICA0ICAgICAgLT4gIDENCi1kcXJtbjAzMiByZW1haW5kZXJuZWFyICAxICAgICA4ICAgICAgLT4gIDENCi0NCi1kcXJtbjAzMyByZW1haW5kZXJuZWFyICAxICAgICAxNiAgICAgLT4gIDENCi1kcXJtbjAzNCByZW1haW5kZXJuZWFyICAxICAgICAzMiAgICAgLT4gIDENCi1kcXJtbjAzNSByZW1haW5kZXJuZWFyICAxICAgICA2NCAgICAgLT4gIDENCi1kcXJtbjA0MCByZW1haW5kZXJuZWFyICAxICAgIC0yICAgICAgLT4gIDENCi1kcXJtbjA0MSByZW1haW5kZXJuZWFyICAxICAgIC00ICAgICAgLT4gIDENCi1kcXJtbjA0MiByZW1haW5kZXJuZWFyICAxICAgIC04ICAgICAgLT4gIDENCi1kcXJtbjA0MyByZW1haW5kZXJuZWFyICAxICAgIC0xNiAgICAgLT4gIDENCi1kcXJtbjA0NCByZW1haW5kZXJuZWFyICAxICAgIC0zMiAgICAgLT4gIDENCi1kcXJtbjA0NSByZW1haW5kZXJuZWFyICAxICAgIC02NCAgICAgLT4gIDENCi1kcXJtbjA1MCByZW1haW5kZXJuZWFyIC0xICAgICAyICAgICAgLT4gIC0xDQotZHFybW4wNTEgcmVtYWluZGVybmVhciAtMSAgICAgNCAgICAgIC0+ICAtMQ0KLWRxcm1uMDUyIHJlbWFpbmRlcm5lYXIgLTEgICAgIDggICAgICAtPiAgLTENCi1kcXJtbjA1MyByZW1haW5kZXJuZWFyIC0xICAgICAxNiAgICAgLT4gIC0xDQotZHFybW4wNTQgcmVtYWluZGVybmVhciAtMSAgICAgMzIgICAgIC0+ICAtMQ0KLWRxcm1uMDU1IHJlbWFpbmRlcm5lYXIgLTEgICAgIDY0ICAgICAtPiAgLTENCi1kcXJtbjA2MCByZW1haW5kZXJuZWFyIC0xICAgIC0yICAgICAgLT4gIC0xDQotZHFybW4wNjEgcmVtYWluZGVybmVhciAtMSAgICAtNCAgICAgIC0+ICAtMQ0KLWRxcm1uMDYyIHJlbWFpbmRlcm5lYXIgLTEgICAgLTggICAgICAtPiAgLTENCi1kcXJtbjA2MyByZW1haW5kZXJuZWFyIC0xICAgIC0xNiAgICAgLT4gIC0xDQotZHFybW4wNjQgcmVtYWluZGVybmVhciAtMSAgICAtMzIgICAgIC0+ICAtMQ0KLWRxcm1uMDY1IHJlbWFpbmRlcm5lYXIgLTEgICAgLTY0ICAgICAtPiAgLTENCi0NCi1kcXJtbjA2NiByZW1haW5kZXJuZWFyICAgICAgICAgIDkuOSAgIDEgIC0+IC0wLjENCi1kcXJtbjA2NyByZW1haW5kZXJuZWFyICAgICAgICAgOTkuNyAgIDEgIC0+IC0wLjMNCi1kcXJtbjA2OCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkgICAgIDEgIC0+IDANCi1kcXJtbjA2OSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNA0KLWRxcm1uMDcwIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gLTAuNQ0KLWRxcm1uMDcxIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gLTAuMQ0KLWRxcm1uMDcyIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gLTAuMDAxDQotZHFybW4wNzMgcmVtYWluZGVybmVhciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAtMC4wMDAwMDENCi1kcXJtbjA3NCByZW1haW5kZXJuZWFyICA5ICAgICAgICAgICAgIDEgIC0+IDANCi1kcXJtbjA3NSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDANCi1kcXJtbjA3NiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IC0xDQotZHFybW4wNzcgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAzICAtPiAwDQotZHFybW4wNzggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSA0ICAtPiAtMQ0KLQ0KLWRxcm1uMDgwIHJlbWFpbmRlcm5lYXIgIDAuICAgICAgICAgICAgMSAgLT4gMA0KLWRxcm1uMDgxIHJlbWFpbmRlcm5lYXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wDQotZHFybW4wODIgcmVtYWluZGVybmVhciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwDQotZHFybW4wODMgcmVtYWluZGVybmVhciAgMC4wMEUrOSAgICAgICAxICAtPiAwDQotZHFybW4wODQgcmVtYWluZGVybmVhciAgMC4wMEUrMyAgICAgICAxICAtPiAwDQotZHFybW4wODUgcmVtYWluZGVybmVhciAgMC4wMEUrMiAgICAgICAxICAtPiAwDQotZHFybW4wODYgcmVtYWluZGVybmVhciAgMC4wMEUrMSAgICAgICAxICAtPiAwLjANCi1kcXJtbjA4NyByZW1haW5kZXJuZWFyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDANCi1kcXJtbjA4OCByZW1haW5kZXJuZWFyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDANCi1kcXJtbjA4OSByZW1haW5kZXJuZWFyICAwLjAwRS0xICAgICAgIDEgIC0+IDAuMDAwDQotZHFybW4wOTAgcmVtYWluZGVybmVhciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDANCi1kcXJtbjA5MSByZW1haW5kZXJuZWFyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDANCi1kcXJtbjA5MiByZW1haW5kZXJuZWFyICAwLjAwRS00ICAgICAgIDEgIC0+IDAuMDAwMDAwDQotZHFybW4wOTMgcmVtYWluZGVybmVhciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03DQotZHFybW4wOTQgcmVtYWluZGVybmVhciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04DQotZHFybW4wOTUgcmVtYWluZGVybmVhciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NA0KLQ0KLS0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwDQotZHFybW4xMDEgcmVtYWluZGVybmVhciAgMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcm1uMTAyIHJlbWFpbmRlcm5lYXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJtbjEwMyByZW1haW5kZXJuZWFyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFybW4xMDQgcmVtYWluZGVybmVhciAtMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcm1uMTA1IHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJtbjEwNiByZW1haW5kZXJuZWFyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0DQotLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3INCi0tLSByZW1haW5kZXItbmVhciwgYW55d2F5XQ0KLWRxcm1uMTA3IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTA4IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTA5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTEwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTExIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTEyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTEzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTE0IHJlbWFpbmRlcm5lYXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTE1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTE2IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTE5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTIwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTIxIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTIyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTIzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTI0IHJlbWFpbmRlcm5lYXIgMUUrMzg0ICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGFuZCB6ZXJvcyBvbiBsZWZ0DQotZHFybW4xMzAgcmVtYWluZGVybmVhciAgMCAgICAgIDEgICAtPiAgMA0KLWRxcm1uMTMxIHJlbWFpbmRlcm5lYXIgIDAgICAgIC0xICAgLT4gIDANCi1kcXJtbjEzMiByZW1haW5kZXJuZWFyICAwLjAgICAgMSAgIC0+ICAwLjANCi1kcXJtbjEzMyByZW1haW5kZXJuZWFyICAwLjAgICAtMSAgIC0+ICAwLjANCi1kcXJtbjEzNCByZW1haW5kZXJuZWFyIC0wICAgICAgMSAgIC0+IC0wDQotZHFybW4xMzUgcmVtYWluZGVybmVhciAtMCAgICAgLTEgICAtPiAtMA0KLWRxcm1uMTM2IHJlbWFpbmRlcm5lYXIgLTAuMCAgICAxICAgLT4gLTAuMA0KLWRxcm1uMTM3IHJlbWFpbmRlcm5lYXIgLTAuMCAgIC0xICAgLT4gLTAuMA0KLQ0KLS0tIDAuNWVycw0KLWRxcm1uMTQzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUNCi1kcXJtbjE0NCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41DQotZHFybW4xNDUgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMSAgLT4gIDAuNTANCi1kcXJtbjE0NiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDANCi1kcXJtbjE0NyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MA0KLWRxcm1uMTQ4IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwDQotZHFybW4xNDkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwDQotDQotLS0gc3RlYWRpZXMNCi1kcXJtbjE1MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMA0KLWRxcm1uMTUxIHJlbWFpbmRlcm5lYXIgIDEgIDIgICAtPiAxDQotZHFybW4xNTIgcmVtYWluZGVybmVhciAgMSAgMyAgIC0+IDENCi1kcXJtbjE1MyByZW1haW5kZXJuZWFyICAxICA0ICAgLT4gMQ0KLWRxcm1uMTU0IHJlbWFpbmRlcm5lYXIgIDEgIDUgICAtPiAxDQotZHFybW4xNTUgcmVtYWluZGVybmVhciAgMSAgNiAgIC0+IDENCi1kcXJtbjE1NiByZW1haW5kZXJuZWFyICAxICA3ICAgLT4gMQ0KLWRxcm1uMTU3IHJlbWFpbmRlcm5lYXIgIDEgIDggICAtPiAxDQotZHFybW4xNTggcmVtYWluZGVybmVhciAgMSAgOSAgIC0+IDENCi1kcXJtbjE1OSByZW1haW5kZXJuZWFyICAxICAxMCAgLT4gMQ0KLWRxcm1uMTYwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwDQotZHFybW4xNjEgcmVtYWluZGVybmVhciAgMiAgMSAgIC0+IDANCi1kcXJtbjE2MiByZW1haW5kZXJuZWFyICAzICAxICAgLT4gMA0KLWRxcm1uMTYzIHJlbWFpbmRlcm5lYXIgIDQgIDEgICAtPiAwDQotZHFybW4xNjQgcmVtYWluZGVybmVhciAgNSAgMSAgIC0+IDANCi1kcXJtbjE2NSByZW1haW5kZXJuZWFyICA2ICAxICAgLT4gMA0KLWRxcm1uMTY2IHJlbWFpbmRlcm5lYXIgIDcgIDEgICAtPiAwDQotZHFybW4xNjcgcmVtYWluZGVybmVhciAgOCAgMSAgIC0+IDANCi1kcXJtbjE2OCByZW1haW5kZXJuZWFyICA5ICAxICAgLT4gMA0KLWRxcm1uMTY5IHJlbWFpbmRlcm5lYXIgIDEwIDEgICAtPiAwDQotDQotLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcg0KLWRxcm1uMTcxIHJlbWFpbmRlcm5lYXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMA0KLWRxcm1uMTcyIHJlbWFpbmRlcm5lYXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMA0KLWRxcm1uMTczIHJlbWFpbmRlcm5lYXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMA0KLWRxcm1uMTc0IHJlbWFpbmRlcm5lYXIgICAwLjUyIDEuMDIwIC0+IC0wLjUwMA0KLWRxcm1uMTc1IHJlbWFpbmRlcm5lYXIgICAwLjYgIDEuMDIwIC0+IC0wLjQyMA0KLQ0KLS0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwDQotZHFybW4yMDEgcmVtYWluZGVybmVhciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFybW4yMDIgcmVtYWluZGVybmVhciAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFybW4yMDMgcmVtYWluZGVybmVhciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFybW4yMDQgcmVtYWluZGVybmVhciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjIwNSByZW1haW5kZXJuZWFyICAwLjAxICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMjA2IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW4yMDcgcmVtYWluZGVybmVhciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjIwOCByZW1haW5kZXJuZWFyICAxICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMjA5IHJlbWFpbmRlcm5lYXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW4yMTAgcmVtYWluZGVybmVhciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjIxMSByZW1haW5kZXJuZWFyIDFFKzM4MCAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHRlc3RzIGZyb20gdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24NCi1kcXJtbjIyMSByZW1haW5kZXJuZWFyIDIuMSAgICAgMyAgIC0+IC0wLjkNCi1kcXJtbjIyMiByZW1haW5kZXJuZWFyICAxMCAgICAgNiAgIC0+IC0yDQotZHFybW4yMjMgcmVtYWluZGVybmVhciAgMTAgICAgIDMgICAtPiAgMQ0KLWRxcm1uMjI0IHJlbWFpbmRlcm5lYXIgLTEwICAgICAzICAgLT4gLTENCi1kcXJtbjIyNSByZW1haW5kZXJuZWFyICAxMC4yICAgMSAgIC0+IDAuMg0KLWRxcm1uMjI2IHJlbWFpbmRlcm5lYXIgIDEwICAgICAwLjMgLT4gMC4xDQotZHFybW4yMjcgcmVtYWluZGVybmVhciAgIDMuNiAgIDEuMyAtPiAtMC4zDQotDQotLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcg0KLWRxcm1uMjMxIHJlbWFpbmRlcm5lYXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMA0KLWRxcm1uMjMyIHJlbWFpbmRlcm5lYXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMA0KLWRxcm1uMjMzIHJlbWFpbmRlcm5lYXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMA0KLWRxcm1uMjM0IHJlbWFpbmRlcm5lYXIgIC0wLjUyIDEuMDIwIC0+ICAwLjUwMA0KLWRxcm1uMjM1IHJlbWFpbmRlcm5lYXIgIC0wLjYgIDEuMDIwIC0+ICAwLjQyMA0KLQ0KLS0tIGhpZ2ggWHMNCi1kcXJtbjI0MCByZW1haW5kZXJuZWFyICAxRSsyICAxLjAwICAtPiAgMC4wMA0KLQ0KLS0tIGRxcm1uM3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsDQotZHFybW4zMDEgcmVtYWluZGVybmVhciAgIDEgICAgMyAgICAgLT4gIDENCi1kcXJtbjMwMiByZW1haW5kZXJuZWFyICAgNSAgICA1ICAgICAtPiAgMA0KLWRxcm1uMzAzIHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwICAgIC0+ICAzDQotZHFybW4zMDQgcmVtYWluZGVybmVhciAgIDEzICAgNTAgICAgLT4gIDEzDQotZHFybW4zMDUgcmVtYWluZGVybmVhciAgIDEzICAgMTAwICAgLT4gIDEzDQotZHFybW4zMDYgcmVtYWluZGVybmVhciAgIDEzICAgMTAwMCAgLT4gIDEzDQotZHFybW4zMDcgcmVtYWluZGVybmVhciAgIC4xMyAgICAxICAgLT4gIDAuMTMNCi1kcXJtbjMwOCByZW1haW5kZXJuZWFyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMNCi1kcXJtbjMwOSByZW1haW5kZXJuZWFyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzDQotZHFybW4zMTAgcmVtYWluZGVybmVhciAgIDEuMDMzICAxICAgLT4gIDAuMDMzDQotZHFybW4zMTEgcmVtYWluZGVybmVhciAgIDEwLjMzICAxICAgLT4gIDAuMzMNCi1kcXJtbjMxMiByZW1haW5kZXJuZWFyICAgMTAuMzMgMTAgICAtPiAgMC4zMw0KLWRxcm1uMzEzIHJlbWFpbmRlcm5lYXIgICAxMDMuMyAgMSAgIC0+ICAwLjMNCi1kcXJtbjMxNCByZW1haW5kZXJuZWFyICAgMTMzICAgMTAgICAtPiAgMw0KLWRxcm1uMzE1IHJlbWFpbmRlcm5lYXIgICAxMDMzICAxMCAgIC0+ICAzDQotZHFybW4zMTYgcmVtYWluZGVybmVhciAgIDEwMzMgIDUwICAgLT4gLTE3DQotZHFybW4zMTcgcmVtYWluZGVybmVhciAgIDEwMS4wICAzICAgLT4gLTEuMA0KLWRxcm1uMzE4IHJlbWFpbmRlcm5lYXIgICAxMDIuMCAgMyAgIC0+ICAwLjANCi1kcXJtbjMxOSByZW1haW5kZXJuZWFyICAgMTAzLjAgIDMgICAtPiAgMS4wDQotZHFybW4zMjAgcmVtYWluZGVybmVhciAgIDIuNDAgICAxICAgLT4gIDAuNDANCi1kcXJtbjMyMSByZW1haW5kZXJuZWFyICAgMi40MDAgIDEgICAtPiAgMC40MDANCi1kcXJtbjMyMiByZW1haW5kZXJuZWFyICAgMi40ICAgIDEgICAtPiAgMC40DQotZHFybW4zMjMgcmVtYWluZGVybmVhciAgIDIuNCAgICAyICAgLT4gIDAuNA0KLWRxcm1uMzI0IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMA0KLWRxcm1uMzI1IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zICAgIC0+ICAwLjENCi1kcXJtbjMyNiByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAgICAtPiAgMC4xMA0KLWRxcm1uMzI3IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMA0KLWRxcm1uMzI4IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDANCi1kcXJtbjMyOSByZW1haW5kZXJuZWFyICAgMS4wICAgIDAuMyAtPiAgMC4xDQotZHFybW4zMzAgcmVtYWluZGVybmVhciAgIDEuMDAgICAwLjMgLT4gIDAuMTANCi1kcXJtbjMzMSByZW1haW5kZXJuZWFyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDANCi1kcXJtbjMzMiByZW1haW5kZXJuZWFyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwDQotZHFybW4zMzMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQ0KLWRxcm1uMzM0IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMSAgIC0+ICAwLjUNCi1kcXJtbjMzNSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MA0KLWRxcm1uMzM2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMA0KLWRxcm1uMzM3IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIgICAgIC0+ICAwLjUwDQotZHFybW4zMzggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTANCi1kcXJtbjMzOSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDANCi0NCi1kcXJtbjM0MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAtMUUtNw0KLWRxcm1uMzQxIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAtMUUtOA0KLWRxcm1uMzQyIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgLTFFLTkNCi1kcXJtbjM0MyByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAtMUUtMTANCi1kcXJtbjM0NCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAwMSAgICAtPiAgLTFFLTExDQotZHFybW4zNDUgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNw0KLWRxcm1uMzQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04DQotZHFybW4zNDcgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05DQotZHFybW4zNDggcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTANCi1kcXJtbjM0OSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTENCi1kcXJtbjM1MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyDQotDQotZHFybW4zNTEgcmVtYWluZGVybmVhciAgIDAuMDMgIDcgIC0+ICAwLjAzDQotZHFybW4zNTIgcmVtYWluZGVybmVhciAgIDUgICAyICAgIC0+ICAxDQotZHFybW4zNTMgcmVtYWluZGVybmVhciAgIDQuMSAgIDIgICAgLT4gIDAuMQ0KLWRxcm1uMzU0IHJlbWFpbmRlcm5lYXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQ0KLWRxcm1uMzU1IHJlbWFpbmRlcm5lYXIgICA0LjAwMSAgIDIgICAgLT4gIDAuMDAxDQotZHFybW4zNTYgcmVtYWluZGVybmVhciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQ0KLWRxcm1uMzU3IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQ0KLWRxcm1uMzU4IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMSAgIDIgICAgLT4gIDAuMDAwMDAxDQotZHFybW4zNTkgcmVtYWluZGVybmVhciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcNCi0NCi1kcXJtbjM2MCByZW1haW5kZXJuZWFyICAgMS4yICAgMC43MzQ1IC0+IC0wLjI2OTANCi1kcXJtbjM2MSByZW1haW5kZXJuZWFyICAgMC44ICAgMTIgICAgIC0+ICAwLjgNCi1kcXJtbjM2MiByZW1haW5kZXJuZWFyICAgMC44ICAgMC4yICAgIC0+ICAwLjANCi1kcXJtbjM2MyByZW1haW5kZXJuZWFyICAgMC44ICAgMC4zICAgIC0+IC0wLjENCi1kcXJtbjM2NCByZW1haW5kZXJuZWFyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMA0KLWRxcm1uMzY1IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwDQotZHFybW4zNjYgcmVtYWluZGVybmVhciAgIDIuNDAwICAgMiAgICAtPiAgMC40MDANCi0NCi0tLSByb3VuZCB0byBldmVuDQotZHFybW4zNzEgcmVtYWluZGVybmVhciAgIDEyMSAgICAgMiAgICAtPiAgMQ0KLWRxcm1uMzcyIHJlbWFpbmRlcm5lYXIgICAxMjIgICAgIDIgICAgLT4gIDANCi1kcXJtbjM3MyByZW1haW5kZXJuZWFyICAgMTIzICAgICAyICAgIC0+IC0xDQotZHFybW4zNzQgcmVtYWluZGVybmVhciAgIDEyNCAgICAgMiAgICAtPiAgMA0KLWRxcm1uMzc1IHJlbWFpbmRlcm5lYXIgICAxMjUgICAgIDIgICAgLT4gIDENCi1kcXJtbjM3NiByZW1haW5kZXJuZWFyICAgMTI2ICAgICAyICAgIC0+ICAwDQotZHFybW4zNzcgcmVtYWluZGVybmVhciAgIDEyNyAgICAgMiAgICAtPiAtMQ0KLQ0KLWRxcm1uMzgxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEgICAgICAgICAtPiAgMA0KLWRxcm1uMzgyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAwMSAgICAtPiAtMC4yMzQ0DQotZHFybW4zODMgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDEgICAgIC0+IC0wLjMzMw0KLWRxcm1uMzg0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDEgICAgICAtPiAtMC4yMw0KLWRxcm1uMzg1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMSAgICAgICAtPiAtMC4zDQotZHFybW4zODYgcmVtYWluZGVybmVhciAxMjM1NSAgNCAgICAgICAgIC0+IC0xDQotZHFybW4zODcgcmVtYWluZGVybmVhciAxMjM0NSAgNCAgICAgICAgIC0+ICAxDQotZHFybW4zODggcmVtYWluZGVybmVhciAxMjM1NSAgNC4wMDAxICAgIC0+IC0xLjMwODkNCi1kcXJtbjM4OSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNA0KLWRxcm1uMzkwIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45DQotZHFybW4zOTEgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OSAgICAgIC0+IC0wLjI2DQotZHFybW4zOTIgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQ0KLWRxcm1uMzkzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5DQotZHFybW4zOTQgcmVtYWluZGVybmVhciAxMjM0NSAgNSAgICAgICAgIC0+ICAwDQotZHFybW4zOTUgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDAxICAgIC0+IC0wLjI0NjkNCi1kcXJtbjM5NiByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMSAgICAgLT4gLTIuNDY5DQotZHFybW4zOTcgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2DQotZHFybW4zOTggcmVtYWluZGVybmVhciAxMjM0NSAgNS4xICAgICAgIC0+IC0yLjENCi0NCi0tLSB0aGUgbmFzdHkgZGl2aXNpb24tYnktMSBjYXNlcw0KLWRxcm1uNDAxIHJlbWFpbmRlcm5lYXIgICAwLjQgICAgICAgICAxICAgLT4gIDAuNA0KLWRxcm1uNDAyIHJlbWFpbmRlcm5lYXIgICAwLjQ1ICAgICAgICAxICAgLT4gIDAuNDUNCi1kcXJtbjQwMyByZW1haW5kZXJuZWFyICAgMC40NTUgICAgICAgMSAgIC0+ICAwLjQ1NQ0KLWRxcm1uNDA0IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTUgICAgICAxICAgLT4gIDAuNDU1NQ0KLWRxcm1uNDA1IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1ICAgICAxICAgLT4gIDAuNDU1NTUNCi1kcXJtbjQwNiByZW1haW5kZXJuZWFyICAgMC40NTU1NTUgICAgMSAgIC0+ICAwLjQ1NTU1NQ0KLWRxcm1uNDA3IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTUgICAxICAgLT4gIDAuNDU1NTU1NQ0KLWRxcm1uNDA4IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1ICAxICAgLT4gIDAuNDU1NTU1NTUNCi1kcXJtbjQwOSByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ1NTU1NTU1NQ0KLS0tIHdpdGggc3BpbGwuLi4gWzQxMiBleGVyY2lzZXMgc3RpY2t0YWIgbG9vcF0NCi1kcXJtbjQxMSByZW1haW5kZXJuZWFyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUNCi1kcXJtbjQxMiByZW1haW5kZXJuZWFyICAgMC41NSAgICAgICAgMSAgIC0+IC0wLjQ1DQotZHFybW40MTMgcmVtYWluZGVybmVhciAgIDAuNTU1ICAgICAgIDEgICAtPiAtMC40NDUNCi1kcXJtbjQxNCByZW1haW5kZXJuZWFyICAgMC41NTU1ICAgICAgMSAgIC0+IC0wLjQ0NDUNCi1kcXJtbjQxNSByZW1haW5kZXJuZWFyICAgMC41NTU1NSAgICAgMSAgIC0+IC0wLjQ0NDQ1DQotZHFybW40MTYgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1ICAgIDEgICAtPiAtMC40NDQ0NDUNCi1kcXJtbjQxNyByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1ICAgMSAgIC0+IC0wLjQ0NDQ0NDUNCi1kcXJtbjQxOCByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1NSAgMSAgIC0+IC0wLjQ0NDQ0NDQ1DQotZHFybW40MTkgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTU1IDEgICAtPiAtMC40NDQ0NDQ0NDUNCi0NCi0tLSBmb2xkZG93bnMNCi1kcXJtbjQyMSByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgICAgICAgMSAgLT4gICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcm1uNDIyIHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICAxRSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZA0KLWRxcm1uNDIzIHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICAyRSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZA0KLWRxcm1uNDI0IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICAzRSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLWRxcm1uNDI1IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA0RSs2MTQzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLWRxcm1uNDI2IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA1RSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZA0KLWRxcm1uNDI3IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA2RSs2MTQzICAtPiAgLTIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLWRxcm1uNDI4IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA3RSs2MTQzICAtPiAgIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLWRxcm1uNDI5IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA4RSs2MTQzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLWRxcm1uNDMwIHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA5RSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLS0tIHRpbmllcw0KLWRxcm1uNDMxIHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICAxRS02MTc2ICAtPiAgIDBFLTYxNzYNCi1kcXJtbjQzMiByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgMkUtNjE3NiAgLT4gICAwRS02MTc2DQotZHFybW40MzMgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDNFLTYxNzYgIC0+ICAgMUUtNjE3NiBTdWJub3JtYWwNCi1kcXJtbjQzNCByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgNEUtNjE3NiAgLT4gICAyRS02MTc2IFN1Ym5vcm1hbA0KLWRxcm1uNDM1IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA1RS02MTc2ICAtPiAgIDBFLTYxNzYNCi1kcXJtbjQzNiByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgNkUtNjE3NiAgLT4gIC0yRS02MTc2IFN1Ym5vcm1hbA0KLWRxcm1uNDM3IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA3RS02MTc2ICAtPiAgIDNFLTYxNzYgU3Vibm9ybWFsDQotZHFybW40MzggcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDhFLTYxNzYgIC0+ICAgMkUtNjE3NiBTdWJub3JtYWwNCi1kcXJtbjQzOSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgOUUtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbA0KLWRxcm1uNDQwIHJlbWFpbmRlcm5lYXIgICAxRS02MTc1IDEwRS02MTc2ICAtPiAgIDBFLTYxNzYNCi1kcXJtbjQ0MSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAxMUUtNjE3NiAgLT4gIC0xRS02MTc2IFN1Ym5vcm1hbA0KLWRxcm1uNDQyIHJlbWFpbmRlcm5lYXIgMTAwRS02MTc1IDExRS02MTc2ICAtPiAgLTFFLTYxNzYgU3Vibm9ybWFsDQotZHFybW40NDMgcmVtYWluZGVybmVhciAxMDBFLTYxNzUgMjBFLTYxNzYgIC0+ICAgMEUtNjE3Ng0KLWRxcm1uNDQ0IHJlbWFpbmRlcm5lYXIgMTAwRS02MTc1IDIxRS02MTc2ICAtPiAgLThFLTYxNzYgU3Vibm9ybWFsDQotZHFybW40NDUgcmVtYWluZGVybmVhciAxMDBFLTYxNzUgMzBFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwNCi0NCi0tLSB6ZXJvIHNpZ25zDQotZHFybW42NTAgcmVtYWluZGVybmVhciAgMSAgMSAtPiAgMA0KLWRxcm1uNjUxIHJlbWFpbmRlcm5lYXIgLTEgIDEgLT4gLTANCi1kcXJtbjY1MiByZW1haW5kZXJuZWFyICAxIC0xIC0+ICAwDQotZHFybW42NTMgcmVtYWluZGVybmVhciAtMSAtMSAtPiAtMA0KLWRxcm1uNjU0IHJlbWFpbmRlcm5lYXIgIDAgIDEgLT4gIDANCi1kcXJtbjY1NSByZW1haW5kZXJuZWFyIC0wICAxIC0+IC0wDQotZHFybW42NTYgcmVtYWluZGVybmVhciAgMCAtMSAtPiAgMA0KLWRxcm1uNjU3IHJlbWFpbmRlcm5lYXIgLTAgLTEgLT4gLTANCi1kcXJtbjY1OCByZW1haW5kZXJuZWFyICAwLjAwICAxICAtPiAgMC4wMA0KLWRxcm1uNjU5IHJlbWFpbmRlcm5lYXIgLTAuMDAgIDEgIC0+IC0wLjAwDQotDQotLS0gU3BlY2lhbHMNCi1kcXJtbjY4MCByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW42ODEgcmVtYWluZGVybmVhciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNjgyIHJlbWFpbmRlcm5lYXIgIEluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjY4MyByZW1haW5kZXJuZWFyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW42ODQgcmVtYWluZGVybmVhciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNjg1IHJlbWFpbmRlcm5lYXIgIEluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjY4NiByZW1haW5kZXJuZWFyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW42ODcgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNjg4IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQotZHFybW42ODkgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNjkxIHJlbWFpbmRlcm5lYXIgLTEgICAgIEluZiAgIC0+IC0xDQotZHFybW42OTIgcmVtYWluZGVybmVhciAgMCAgICAgSW5mICAgLT4gIDANCi1kcXJtbjY5MyByZW1haW5kZXJuZWFyIC0wICAgICBJbmYgICAtPiAtMA0KLWRxcm1uNjk0IHJlbWFpbmRlcm5lYXIgIDEgICAgIEluZiAgIC0+ICAxDQotZHFybW42OTUgcmVtYWluZGVybmVhciAgMTAwMCAgSW5mICAgLT4gIDEwMDANCi1kcXJtbjY5NiByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFybW43MDAgcmVtYWluZGVybmVhciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzAxIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjcwMiByZW1haW5kZXJuZWFyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43MDMgcmVtYWluZGVybmVhciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzA0IHJlbWFpbmRlcm5lYXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjcwNSByZW1haW5kZXJuZWFyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43MDYgcmVtYWluZGVybmVhciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzA3IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjcwOCByZW1haW5kZXJuZWFyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43MDkgcmVtYWluZGVybmVhciAtMTAwMCAgSW5mICAgLT4gLTEwMDANCi1kcXJtbjcxMCByZW1haW5kZXJuZWFyIC0xICAgIC1JbmYgICAtPiAtMQ0KLWRxcm1uNzExIHJlbWFpbmRlcm5lYXIgLTAgICAgLUluZiAgIC0+IC0wDQotZHFybW43MTIgcmVtYWluZGVybmVhciAgMCAgICAtSW5mICAgLT4gIDANCi1kcXJtbjcxMyByZW1haW5kZXJuZWFyICAxICAgIC1JbmYgICAtPiAgMQ0KLWRxcm1uNzE0IHJlbWFpbmRlcm5lYXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwDQotZHFybW43MTUgcmVtYWluZGVybmVhciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxcm1uNzIxIHJlbWFpbmRlcm5lYXIgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kcXJtbjcyMiByZW1haW5kZXJuZWFyICBOYU4gLTEwMDAgICAtPiAgTmFODQotZHFybW43MjMgcmVtYWluZGVybmVhciAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRxcm1uNzI0IHJlbWFpbmRlcm5lYXIgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kcXJtbjcyNSByZW1haW5kZXJuZWFyIC1OYU4gIDAgICAgICAtPiAtTmFODQotZHFybW43MjYgcmVtYWluZGVybmVhciAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRxcm1uNzI3IHJlbWFpbmRlcm5lYXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kcXJtbjcyOCByZW1haW5kZXJuZWFyICBOYU4gIEluZiAgICAtPiAgTmFODQotZHFybW43MjkgcmVtYWluZGVybmVhciAgTmFOIC1OYU4gICAgLT4gIE5hTg0KLWRxcm1uNzMwIHJlbWFpbmRlcm5lYXIgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kcXJtbjczMSByZW1haW5kZXJuZWFyIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZHFybW43MzIgcmVtYWluZGVybmVhciAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxcm1uNzMzIHJlbWFpbmRlcm5lYXIgLTAgICAtTmFOICAgIC0+IC1OYU4NCi1kcXJtbjczNCByZW1haW5kZXJuZWFyICAwICAgIE5hTiAgICAtPiAgTmFODQotZHFybW43MzUgcmVtYWluZGVybmVhciAgMSAgIC1OYU4gICAgLT4gLU5hTg0KLWRxcm1uNzM2IHJlbWFpbmRlcm5lYXIgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcXJtbjczNyByZW1haW5kZXJuZWFyICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZHFybW43NDEgcmVtYWluZGVybmVhciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc0MiByZW1haW5kZXJuZWFyICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzQzIHJlbWFpbmRlcm5lYXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NDQgcmVtYWluZGVybmVhciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc0NSByZW1haW5kZXJuZWFyICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzQ2IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NDcgcmVtYWluZGVybmVhciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc0OSByZW1haW5kZXJuZWFyICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzUwIHJlbWFpbmRlcm5lYXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NTEgcmVtYWluZGVybmVhciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc1MiByZW1haW5kZXJuZWFyIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzUzIHJlbWFpbmRlcm5lYXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NTQgcmVtYWluZGVybmVhciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc1NSByZW1haW5kZXJuZWFyIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzU2IHJlbWFpbmRlcm5lYXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NTcgcmVtYWluZGVybmVhciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc1OCByZW1haW5kZXJuZWFyICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzU5IHJlbWFpbmRlcm5lYXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnaW5nIE5hTnMNCi1kcXJtbjc2MCByZW1haW5kZXJuZWFyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xDQotZHFybW43NjEgcmVtYWluZGVybmVhciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzYyIHJlbWFpbmRlcm5lYXIgIE5hTjMgIHNOYU45ICAgLT4gIE5hTjkgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc2MyByZW1haW5kZXJuZWFyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NjQgcmVtYWluZGVybmVhciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTENCi1kcXJtbjc2NSByZW1haW5kZXJuZWFyICBOYU42ICAgTmFOMTIgIC0+ICBOYU42DQotZHFybW43NjYgcmVtYWluZGVybmVhciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMNCi1kcXJtbjc2NyByZW1haW5kZXJuZWFyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNA0KLWRxcm1uNzY4IHJlbWFpbmRlcm5lYXIgICAgMCAgICBOYU4xNSAgLT4gIE5hTjE1DQotZHFybW43NjkgcmVtYWluZGVybmVhciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYNCi0NCi0tLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUNCi1kcXJtbjc3MCAgcmVtYWluZGVybmVhciAgMTIzNDUwMDAwMDAwMDAwMDAwMDAwMDA2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gLTQNCi1kcXJtbjc3MSAgcmVtYWluZGVybmVhciAgMTIzNDUwMDAwMDAwMDAwMDAwMDAwMDA2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDANCi1kcXJtbjc3MiAgcmVtYWluZGVybmVhciAgMTIzNDUwMDAwMDAwMDAwMDAwMDAwMDA2Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFybW43NzMgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLQ0KLS0tIGxvbmcgb3BlcmFuZCBjaGVja3MNCi1kcXJtbjgwMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwDQotZHFybW44MDIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQ0KLWRxcm1uODAzIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMCAgMTAgIC0+IDANCi1kcXJtbjgwNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxDQotZHFybW44MDUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMA0KLWRxcm1uODA2IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwICAgIC0+IDENCi1kcXJtbjgwNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxDQotZHFybW44MDggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLWRxcm1uODA5IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDENCi1kcXJtbjgxMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxDQotZHFybW44MTEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQNCi1kcXJtbjgxMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQotDQotZHFybW44MjEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMA0KLWRxcm1uODIyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwMCAgIC0+IDENCi1kcXJtbjgyMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwDQotZHFybW44MjQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQ0KLWRxcm1uODI1IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDANCi1kcXJtbjgyNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxDQotZHFybW44MjcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQ0KLWRxcm1uODI4IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkxICAgIC0+IDENCi1kcXJtbjgyOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxDQotZHFybW44MzAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRxcm1uODMxIHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5NiAgMTAgIC0+IC00DQotZHFybW44MzIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLS0tIGZyb20gZGl2aWRlaW50DQotZHFybW44NDAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wDQotZHFybW44NDEgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjQgICAxICAtPiAgMC40DQotZHFybW44NDIgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjUgICAxICAtPiAgMC41DQotZHFybW44NDMgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjkgICAxICAtPiAtMC4xDQotZHFybW44NDQgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjk5OSAxICAtPiAtMC4wMDENCi1kcXJtbjg1MCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDMgICAgIDUgIC0+IC0yDQotZHFybW44NTEgcmVtYWluZGVybmVhciAgMTAwMDAwMDMgICAgICA1ICAtPiAtMg0KLWRxcm1uODUyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDMgICAgICAgNSAgLT4gLTINCi1kcXJtbjg1MyByZW1haW5kZXJuZWFyICAxMDAwMDMgICAgICAgIDUgIC0+IC0yDQotZHFybW44NTQgcmVtYWluZGVybmVhciAgMTAwMDMgICAgICAgICA1ICAtPiAtMg0KLWRxcm1uODU1IHJlbWFpbmRlcm5lYXIgIDEwMDMgICAgICAgICAgNSAgLT4gLTINCi1kcXJtbjg1NiByZW1haW5kZXJuZWFyICAxMDMgICAgICAgICAgIDUgIC0+IC0yDQotZHFybW44NTcgcmVtYWluZGVybmVhciAgMTMgICAgICAgICAgICA1ICAtPiAtMg0KLWRxcm1uODU4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAgICAgICAgNSAgLT4gIDENCi0NCi0tLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxcm1uODYwIHJlbWFpbmRlcm5lYXIgMTIzLjBlMSAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZHFybW44NjEgcmVtYWluZGVybmVhciAxMjMwICAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kcXJtbjg2MiByZW1haW5kZXJuZWFyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRxcm1uODYzIHJlbWFpbmRlcm5lYXIgMS4yM2UzICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZHFybW44NjQgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kcXJtbjg3MCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODcxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44NzIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDEwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg3MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODc0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDEwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44NzUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDEwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg3NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODc3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44NzggcmVtYWluZGVybmVhciAxMjMwICAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg3OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODgwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMTAwMDAwMCAtPiAxMjMwDQotZHFybW44ODEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgMTAwMDAwIC0+IDEyMzANCi1kcXJtbjg4MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMA0KLWRxcm1uODgzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMTAwMCAtPiAgMjMwDQotZHFybW44ODQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgMTAwIC0+ICAgMzANCi1kcXJtbjg4NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMA0KLWRxcm1uODg2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMSAtPiAgICAwDQotDQotZHFybW44OTAgcmVtYWluZGVybmVhciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg5MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODkyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44OTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg5NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODk1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44OTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg5NyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODk5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkwMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTAyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwDQotZHFybW45MDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IC03NzANCi1kcXJtbjkwNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMA0KLWRxcm1uOTA1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgLTEwDQotZHFybW45MDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDANCi0NCi1kcXJtbjkxMCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDUwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTExIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MTIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkxMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDUwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTE0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MTUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkxNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDUwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTE3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MTkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkyMCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDUwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTIxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwDQotZHFybW45MjIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzANCi1kcXJtbjkyMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDUwMDAgLT4gMTIzMA0KLWRxcm1uOTI0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwDQotZHFybW45MjUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAtMjANCi1kcXJtbjkyNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDUgLT4gICAgMA0KLQ0KLWRxcm1uOTMwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgOTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MzEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgOTAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkzMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTMzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgOTAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MzQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgOTAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkzNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTM2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgOTAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MzcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgOTAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkzOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTQwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgOTAwMDAwMCAtPiAxMjMwDQotZHFybW45NDEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgOTAwMDAwIC0+IDEyMzANCi1kcXJtbjk0MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMA0KLWRxcm1uOTQzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgOTAwMCAtPiAxMjMwDQotZHFybW45NDQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgOTAwIC0+ICAzMzANCi1kcXJtbjk0NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gIC0zMA0KLWRxcm1uOTQ2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgOSAtPiAgIC0zDQotDQotZHFybW45NTAgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTYxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAyOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kcXJtbjk2MiByZW1haW5kZXJuZWFyIDEyM2UxICAgMzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFybW45NjMgcmVtYWluZGVybmVhciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcm1uOTY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA1OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kcXJtbjk2NSByZW1haW5kZXJuZWFyIDEyM2UxICAgNjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFybW45NjYgcmVtYWluZGVybmVhciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcm1uOTY3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA4OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kcXJtbjk2OCByZW1haW5kZXJuZWFyIDEyM2UxICAgOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFybW45NjkgcmVtYWluZGVybmVhciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMA0KLQ0KLWRxcm1uOTgwIHJlbWFpbmRlcm5lYXIgMTIzZTEgMTAwMEUyOTkgLT4gMS4yM0UrMyAgLS0gMTIzRSsxIGludGVybmFsbHkNCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0NCi1kcXJtbjEwNTEgcmVtYWluZGVybmVhciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFybW4xMDUyIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcm1uMTA1MyByZW1haW5kZXJuZWFyIC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcXJtbjEwNTQgcmVtYWluZGVybmVhciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFybW4xMDU1IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcNCi1kcXJtbjEwNTYgcmVtYWluZGVybmVhciAgMWUtMjc3IC0xZSszMTEgLT4gIDFFLTI3Nw0KLWRxcm1uMTA1NyByZW1haW5kZXJuZWFyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3DQotZHFybW4xMDU4IHJlbWFpbmRlcm5lYXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcNCi0NCi0tLSBHeXVyaXMgZXhhbXBsZQ0KLWRxcm1uMTA3MCByZW1haW5kZXIgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODkwMDBFLTYxNDMgLT4gOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMNCi0NCi0tLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdA0KLWRxcm1uMTEwMSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzMNCi1kcXJtbjExMDIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIC0wLjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIyDQotZHFybW4xMTAzICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgLTAuNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTExMQ0KLWRxcm1uMTEwNCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTQNCi1kcXJtbjExMDUgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyDQotZHFybW4xMTA2ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gICAgLTEuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc0OA0KLWRxcm1uMTEwNyAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgIDEuNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcNCi1kcXJtbjExMDggIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgLTAuNzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzUzDQotZHFybW4xMTA5ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0Nw0KLWRxcm1uMTExMCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIDEuNTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTQNCi1kcXJtbjExMTEgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgICAtMC42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQyDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxcm1uMTAwMCByZW1haW5kZXJuZWFyIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMTAwMSByZW1haW5kZXJuZWFyICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFSZW1haW5kZXJOZWFyLmRlY1Rlc3QgLS0gZGVjUXVhZCByZW1haW5kZXItbmVhciAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK2Rxcm1uMDAxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDEgICAgLT4gIDAKK2Rxcm1uMDAyIHJlbWFpbmRlcm5lYXIgIDIgICAgIDEgICAgLT4gIDAKK2Rxcm1uMDAzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgLT4gIDEKK2Rxcm1uMDA0IHJlbWFpbmRlcm5lYXIgIDIgICAgIDIgICAgLT4gIDAKK2Rxcm1uMDA1IHJlbWFpbmRlcm5lYXIgIDAgICAgIDEgICAgLT4gIDAKK2Rxcm1uMDA2IHJlbWFpbmRlcm5lYXIgIDAgICAgIDIgICAgLT4gIDAKK2Rxcm1uMDA3IHJlbWFpbmRlcm5lYXIgIDEgICAgIDMgICAgLT4gIDEKK2Rxcm1uMDA4IHJlbWFpbmRlcm5lYXIgIDIgICAgIDMgICAgLT4gLTEKK2Rxcm1uMDA5IHJlbWFpbmRlcm5lYXIgIDMgICAgIDMgICAgLT4gIDAKKworZHFybW4wMTAgcmVtYWluZGVybmVhciAgMi40ICAgMSAgICAtPiAgMC40CitkcXJtbjAxMSByZW1haW5kZXJuZWFyICAyLjQgICAtMSAgIC0+ICAwLjQKK2Rxcm1uMDEyIHJlbWFpbmRlcm5lYXIgIC0yLjQgIDEgICAgLT4gIC0wLjQKK2Rxcm1uMDEzIHJlbWFpbmRlcm5lYXIgIC0yLjQgIC0xICAgLT4gIC0wLjQKK2Rxcm1uMDE0IHJlbWFpbmRlcm5lYXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKK2Rxcm1uMDE1IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwCitkcXJtbjAxNiByZW1haW5kZXJuZWFyICAyLjQgICAyICAgIC0+ICAwLjQKK2Rxcm1uMDE3IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCitkcXJtbjAxOCByZW1haW5kZXJuZWFyICAyLiAgICAyICAgIC0+ICAwCitkcXJtbjAxOSByZW1haW5kZXJuZWFyICAyMCAgICAyMCAgIC0+ICAwCisKK2Rxcm1uMDIwIHJlbWFpbmRlcm5lYXIgIDE4NyAgIDE4NyAgICAtPiAgMAorZHFybW4wMjEgcmVtYWluZGVybmVhciAgNSAgICAgMiAgICAgIC0+ICAxCitkcXJtbjAyMiByZW1haW5kZXJuZWFyICA1ICAgICAyLjAgICAgLT4gIDEuMAorZHFybW4wMjMgcmVtYWluZGVybmVhciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAorZHFybW4wMjQgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorZHFybW4wMjUgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorCitkcXJtbjAzMCByZW1haW5kZXJuZWFyICAxICAgICAyICAgICAgLT4gIDEKK2Rxcm1uMDMxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDQgICAgICAtPiAgMQorZHFybW4wMzIgcmVtYWluZGVybmVhciAgMSAgICAgOCAgICAgIC0+ICAxCisKK2Rxcm1uMDMzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDE2ICAgICAtPiAgMQorZHFybW4wMzQgcmVtYWluZGVybmVhciAgMSAgICAgMzIgICAgIC0+ICAxCitkcXJtbjAzNSByZW1haW5kZXJuZWFyICAxICAgICA2NCAgICAgLT4gIDEKK2Rxcm1uMDQwIHJlbWFpbmRlcm5lYXIgIDEgICAgLTIgICAgICAtPiAgMQorZHFybW4wNDEgcmVtYWluZGVybmVhciAgMSAgICAtNCAgICAgIC0+ICAxCitkcXJtbjA0MiByZW1haW5kZXJuZWFyICAxICAgIC04ICAgICAgLT4gIDEKK2Rxcm1uMDQzIHJlbWFpbmRlcm5lYXIgIDEgICAgLTE2ICAgICAtPiAgMQorZHFybW4wNDQgcmVtYWluZGVybmVhciAgMSAgICAtMzIgICAgIC0+ICAxCitkcXJtbjA0NSByZW1haW5kZXJuZWFyICAxICAgIC02NCAgICAgLT4gIDEKK2Rxcm1uMDUwIHJlbWFpbmRlcm5lYXIgLTEgICAgIDIgICAgICAtPiAgLTEKK2Rxcm1uMDUxIHJlbWFpbmRlcm5lYXIgLTEgICAgIDQgICAgICAtPiAgLTEKK2Rxcm1uMDUyIHJlbWFpbmRlcm5lYXIgLTEgICAgIDggICAgICAtPiAgLTEKK2Rxcm1uMDUzIHJlbWFpbmRlcm5lYXIgLTEgICAgIDE2ICAgICAtPiAgLTEKK2Rxcm1uMDU0IHJlbWFpbmRlcm5lYXIgLTEgICAgIDMyICAgICAtPiAgLTEKK2Rxcm1uMDU1IHJlbWFpbmRlcm5lYXIgLTEgICAgIDY0ICAgICAtPiAgLTEKK2Rxcm1uMDYwIHJlbWFpbmRlcm5lYXIgLTEgICAgLTIgICAgICAtPiAgLTEKK2Rxcm1uMDYxIHJlbWFpbmRlcm5lYXIgLTEgICAgLTQgICAgICAtPiAgLTEKK2Rxcm1uMDYyIHJlbWFpbmRlcm5lYXIgLTEgICAgLTggICAgICAtPiAgLTEKK2Rxcm1uMDYzIHJlbWFpbmRlcm5lYXIgLTEgICAgLTE2ICAgICAtPiAgLTEKK2Rxcm1uMDY0IHJlbWFpbmRlcm5lYXIgLTEgICAgLTMyICAgICAtPiAgLTEKK2Rxcm1uMDY1IHJlbWFpbmRlcm5lYXIgLTEgICAgLTY0ICAgICAtPiAgLTEKKworZHFybW4wNjYgcmVtYWluZGVybmVhciAgICAgICAgICA5LjkgICAxICAtPiAtMC4xCitkcXJtbjA2NyByZW1haW5kZXJuZWFyICAgICAgICAgOTkuNyAgIDEgIC0+IC0wLjMKK2Rxcm1uMDY4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMAorZHFybW4wNjkgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQKK2Rxcm1uMDcwIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gLTAuNQorZHFybW4wNzEgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjkgICAxICAtPiAtMC4xCitkcXJtbjA3MiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOTk5IDEgIC0+IC0wLjAwMQorZHFybW4wNzMgcmVtYWluZGVybmVhciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAtMC4wMDAwMDEKK2Rxcm1uMDc0IHJlbWFpbmRlcm5lYXIgIDkgICAgICAgICAgICAgMSAgLT4gMAorZHFybW4wNzUgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAwCitkcXJtbjA3NiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IC0xCitkcXJtbjA3NyByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDMgIC0+IDAKK2Rxcm1uMDc4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgNCAgLT4gLTEKKworZHFybW4wODAgcmVtYWluZGVybmVhciAgMC4gICAgICAgICAgICAxICAtPiAwCitkcXJtbjA4MSByZW1haW5kZXJuZWFyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMAorZHFybW4wODIgcmVtYWluZGVybmVhciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCitkcXJtbjA4MyByZW1haW5kZXJuZWFyICAwLjAwRSs5ICAgICAgIDEgIC0+IDAKK2Rxcm1uMDg0IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMAorZHFybW4wODUgcmVtYWluZGVybmVhciAgMC4wMEUrMiAgICAgICAxICAtPiAwCitkcXJtbjA4NiByZW1haW5kZXJuZWFyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMAorZHFybW4wODcgcmVtYWluZGVybmVhciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwCitkcXJtbjA4OCByZW1haW5kZXJuZWFyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKK2Rxcm1uMDg5IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDAKK2Rxcm1uMDkwIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwCitkcXJtbjA5MSByZW1haW5kZXJuZWFyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKK2Rxcm1uMDkyIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDAKK2Rxcm1uMDkzIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNworZHFybW4wOTQgcmVtYWluZGVybmVhciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04CitkcXJtbjA5NSByZW1haW5kZXJuZWFyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0CisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCitkcXJtbjEwMSByZW1haW5kZXJuZWFyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjEwMiByZW1haW5kZXJuZWFyICAwICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjEwMyByZW1haW5kZXJuZWFyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjEwNCByZW1haW5kZXJuZWFyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjEwNSByZW1haW5kZXJuZWFyICAwLjBFNSAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjEwNiByZW1haW5kZXJuZWFyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCistLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQKKy0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yCistLSByZW1haW5kZXItbmVhciwgYW55d2F5XQorZHFybW4xMDcgcmVtYWluZGVybmVhciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEwOCByZW1haW5kZXJuZWFyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTA5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTAgcmVtYWluZGVybmVhciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExMSByZW1haW5kZXJuZWFyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTEyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTMgcmVtYWluZGVybmVhciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExNCByZW1haW5kZXJuZWFyIDFFKzM4MCAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTE1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTYgcmVtYWluZGVybmVhciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExOSByZW1haW5kZXJuZWFyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTIwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMjEgcmVtYWluZGVybmVhciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEyMiByZW1haW5kZXJuZWFyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTIzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMjQgcmVtYWluZGVybmVhciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgemVyb3Mgb24gbGVmdAorZHFybW4xMzAgcmVtYWluZGVybmVhciAgMCAgICAgIDEgICAtPiAgMAorZHFybW4xMzEgcmVtYWluZGVybmVhciAgMCAgICAgLTEgICAtPiAgMAorZHFybW4xMzIgcmVtYWluZGVybmVhciAgMC4wICAgIDEgICAtPiAgMC4wCitkcXJtbjEzMyByZW1haW5kZXJuZWFyICAwLjAgICAtMSAgIC0+ICAwLjAKK2Rxcm1uMTM0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAxICAgLT4gLTAKK2Rxcm1uMTM1IHJlbWFpbmRlcm5lYXIgLTAgICAgIC0xICAgLT4gLTAKK2Rxcm1uMTM2IHJlbWFpbmRlcm5lYXIgLTAuMCAgICAxICAgLT4gLTAuMAorZHFybW4xMzcgcmVtYWluZGVybmVhciAtMC4wICAgLTEgICAtPiAtMC4wCisKKy0tIDAuNWVycworZHFybW4xNDMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZHFybW4xNDQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQorZHFybW4xNDUgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK2Rxcm1uMTQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZHFybW4xNDcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK2Rxcm1uMTQ4IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCitkcXJtbjE0OSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworLS0gc3RlYWRpZXMKK2Rxcm1uMTUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCitkcXJtbjE1MSByZW1haW5kZXJuZWFyICAxICAyICAgLT4gMQorZHFybW4xNTIgcmVtYWluZGVybmVhciAgMSAgMyAgIC0+IDEKK2Rxcm1uMTUzIHJlbWFpbmRlcm5lYXIgIDEgIDQgICAtPiAxCitkcXJtbjE1NCByZW1haW5kZXJuZWFyICAxICA1ICAgLT4gMQorZHFybW4xNTUgcmVtYWluZGVybmVhciAgMSAgNiAgIC0+IDEKK2Rxcm1uMTU2IHJlbWFpbmRlcm5lYXIgIDEgIDcgICAtPiAxCitkcXJtbjE1NyByZW1haW5kZXJuZWFyICAxICA4ICAgLT4gMQorZHFybW4xNTggcmVtYWluZGVybmVhciAgMSAgOSAgIC0+IDEKK2Rxcm1uMTU5IHJlbWFpbmRlcm5lYXIgIDEgIDEwICAtPiAxCitkcXJtbjE2MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMAorZHFybW4xNjEgcmVtYWluZGVybmVhciAgMiAgMSAgIC0+IDAKK2Rxcm1uMTYyIHJlbWFpbmRlcm5lYXIgIDMgIDEgICAtPiAwCitkcXJtbjE2MyByZW1haW5kZXJuZWFyICA0ICAxICAgLT4gMAorZHFybW4xNjQgcmVtYWluZGVybmVhciAgNSAgMSAgIC0+IDAKK2Rxcm1uMTY1IHJlbWFpbmRlcm5lYXIgIDYgIDEgICAtPiAwCitkcXJtbjE2NiByZW1haW5kZXJuZWFyICA3ICAxICAgLT4gMAorZHFybW4xNjcgcmVtYWluZGVybmVhciAgOCAgMSAgIC0+IDAKK2Rxcm1uMTY4IHJlbWFpbmRlcm5lYXIgIDkgIDEgICAtPiAwCitkcXJtbjE2OSByZW1haW5kZXJuZWFyICAxMCAxICAgLT4gMAorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyCitkcXJtbjE3MSByZW1haW5kZXJuZWFyICAgMC40ICAxLjAyMCAtPiAgMC40MDAKK2Rxcm1uMTcyIHJlbWFpbmRlcm5lYXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAorZHFybW4xNzMgcmVtYWluZGVybmVhciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwCitkcXJtbjE3NCByZW1haW5kZXJuZWFyICAgMC41MiAxLjAyMCAtPiAtMC41MDAKK2Rxcm1uMTc1IHJlbWFpbmRlcm5lYXIgICAwLjYgIDEuMDIwIC0+IC0wLjQyMAorCistLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlcm5lYXIgYnkgMAorZHFybW4yMDEgcmVtYWluZGVybmVhciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjIwMiByZW1haW5kZXJuZWFyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rxcm1uMjAzIHJlbWFpbmRlcm5lYXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFybW4yMDQgcmVtYWluZGVybmVhciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMjA1IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjIwNiByZW1haW5kZXJuZWFyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4yMDcgcmVtYWluZGVybmVhciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMjA4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjIwOSByZW1haW5kZXJuZWFyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4yMTAgcmVtYWluZGVybmVhciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMjExIHJlbWFpbmRlcm5lYXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHRlc3RzIGZyb20gdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24KK2Rxcm1uMjIxIHJlbWFpbmRlcm5lYXIgMi4xICAgICAzICAgLT4gLTAuOQorZHFybW4yMjIgcmVtYWluZGVybmVhciAgMTAgICAgIDYgICAtPiAtMgorZHFybW4yMjMgcmVtYWluZGVybmVhciAgMTAgICAgIDMgICAtPiAgMQorZHFybW4yMjQgcmVtYWluZGVybmVhciAtMTAgICAgIDMgICAtPiAtMQorZHFybW4yMjUgcmVtYWluZGVybmVhciAgMTAuMiAgIDEgICAtPiAwLjIKK2Rxcm1uMjI2IHJlbWFpbmRlcm5lYXIgIDEwICAgICAwLjMgLT4gMC4xCitkcXJtbjIyNyByZW1haW5kZXJuZWFyICAgMy42ICAgMS4zIC0+IC0wLjMKKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcgorZHFybW4yMzEgcmVtYWluZGVybmVhciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwCitkcXJtbjIzMiByZW1haW5kZXJuZWFyICAtMC41MCAxLjAyMCAtPiAtMC41MDAKK2Rxcm1uMjMzIHJlbWFpbmRlcm5lYXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMAorZHFybW4yMzQgcmVtYWluZGVybmVhciAgLTAuNTIgMS4wMjAgLT4gIDAuNTAwCitkcXJtbjIzNSByZW1haW5kZXJuZWFyICAtMC42ICAxLjAyMCAtPiAgMC40MjAKKworLS0gaGlnaCBYcworZHFybW4yNDAgcmVtYWluZGVybmVhciAgMUUrMiAgMS4wMCAgLT4gIDAuMDAKKworLS0gZHFybW4zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2Rxcm1uMzAxIHJlbWFpbmRlcm5lYXIgICAxICAgIDMgICAgIC0+ICAxCitkcXJtbjMwMiByZW1haW5kZXJuZWFyICAgNSAgICA1ICAgICAtPiAgMAorZHFybW4zMDMgcmVtYWluZGVybmVhciAgIDEzICAgMTAgICAgLT4gIDMKK2Rxcm1uMzA0IHJlbWFpbmRlcm5lYXIgICAxMyAgIDUwICAgIC0+ICAxMworZHFybW4zMDUgcmVtYWluZGVybmVhciAgIDEzICAgMTAwICAgLT4gIDEzCitkcXJtbjMwNiByZW1haW5kZXJuZWFyICAgMTMgICAxMDAwICAtPiAgMTMKK2Rxcm1uMzA3IHJlbWFpbmRlcm5lYXIgICAuMTMgICAgMSAgIC0+ICAwLjEzCitkcXJtbjMwOCByZW1haW5kZXJuZWFyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKK2Rxcm1uMzA5IHJlbWFpbmRlcm5lYXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMKK2Rxcm1uMzEwIHJlbWFpbmRlcm5lYXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMworZHFybW4zMTEgcmVtYWluZGVybmVhciAgIDEwLjMzICAxICAgLT4gIDAuMzMKK2Rxcm1uMzEyIHJlbWFpbmRlcm5lYXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzCitkcXJtbjMxMyByZW1haW5kZXJuZWFyICAgMTAzLjMgIDEgICAtPiAgMC4zCitkcXJtbjMxNCByZW1haW5kZXJuZWFyICAgMTMzICAgMTAgICAtPiAgMworZHFybW4zMTUgcmVtYWluZGVybmVhciAgIDEwMzMgIDEwICAgLT4gIDMKK2Rxcm1uMzE2IHJlbWFpbmRlcm5lYXIgICAxMDMzICA1MCAgIC0+IC0xNworZHFybW4zMTcgcmVtYWluZGVybmVhciAgIDEwMS4wICAzICAgLT4gLTEuMAorZHFybW4zMTggcmVtYWluZGVybmVhciAgIDEwMi4wICAzICAgLT4gIDAuMAorZHFybW4zMTkgcmVtYWluZGVybmVhciAgIDEwMy4wICAzICAgLT4gIDEuMAorZHFybW4zMjAgcmVtYWluZGVybmVhciAgIDIuNDAgICAxICAgLT4gIDAuNDAKK2Rxcm1uMzIxIHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMAorZHFybW4zMjIgcmVtYWluZGVybmVhciAgIDIuNCAgICAxICAgLT4gIDAuNAorZHFybW4zMjMgcmVtYWluZGVybmVhciAgIDIuNCAgICAyICAgLT4gIDAuNAorZHFybW4zMjQgcmVtYWluZGVybmVhciAgIDIuNDAwICAyICAgLT4gIDAuNDAwCitkcXJtbjMyNSByZW1haW5kZXJuZWFyICAgMSAgIDAuMyAgICAtPiAgMC4xCitkcXJtbjMyNiByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAgICAtPiAgMC4xMAorZHFybW4zMjcgcmVtYWluZGVybmVhciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwCitkcXJtbjMyOCByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwCitkcXJtbjMyOSByZW1haW5kZXJuZWFyICAgMS4wICAgIDAuMyAtPiAgMC4xCitkcXJtbjMzMCByZW1haW5kZXJuZWFyICAgMS4wMCAgIDAuMyAtPiAgMC4xMAorZHFybW4zMzEgcmVtYWluZGVybmVhciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwCitkcXJtbjMzMiByZW1haW5kZXJuZWFyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCitkcXJtbjMzMyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41CitkcXJtbjMzNCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41CitkcXJtbjMzNSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAorZHFybW4zMzYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkcXJtbjMzNyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAorZHFybW4zMzggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2Rxcm1uMzM5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCitkcXJtbjM0MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAtMUUtNworZHFybW4zNDEgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIC0xRS04CitkcXJtbjM0MiByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIC0xRS05CitkcXJtbjM0MyByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAtMUUtMTAKK2Rxcm1uMzQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAtMUUtMTEKK2Rxcm1uMzQ1IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcKK2Rxcm1uMzQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04CitkcXJtbjM0NyByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkKK2Rxcm1uMzQ4IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwCitkcXJtbjM0OSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTEKK2Rxcm1uMzUwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTIKKworZHFybW4zNTEgcmVtYWluZGVybmVhciAgIDAuMDMgIDcgIC0+ICAwLjAzCitkcXJtbjM1MiByZW1haW5kZXJuZWFyICAgNSAgIDIgICAgLT4gIDEKK2Rxcm1uMzUzIHJlbWFpbmRlcm5lYXIgICA0LjEgICAyICAgIC0+ICAwLjEKK2Rxcm1uMzU0IHJlbWFpbmRlcm5lYXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQorZHFybW4zNTUgcmVtYWluZGVybmVhciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDEKK2Rxcm1uMzU2IHJlbWFpbmRlcm5lYXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDEKK2Rxcm1uMzU3IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQorZHFybW4zNTggcmVtYWluZGVybmVhciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDEKK2Rxcm1uMzU5IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03CisKK2Rxcm1uMzYwIHJlbWFpbmRlcm5lYXIgICAxLjIgICAwLjczNDUgLT4gLTAuMjY5MAorZHFybW4zNjEgcmVtYWluZGVybmVhciAgIDAuOCAgIDEyICAgICAtPiAgMC44CitkcXJtbjM2MiByZW1haW5kZXJuZWFyICAgMC44ICAgMC4yICAgIC0+ICAwLjAKK2Rxcm1uMzYzIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjMgICAgLT4gLTAuMQorZHFybW4zNjQgcmVtYWluZGVybmVhciAgIDAuODAwICAgMTIgICAtPiAgMC44MDAKK2Rxcm1uMzY1IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwCitkcXJtbjM2NiByZW1haW5kZXJuZWFyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAorCistLSByb3VuZCB0byBldmVuCitkcXJtbjM3MSByZW1haW5kZXJuZWFyICAgMTIxICAgICAyICAgIC0+ICAxCitkcXJtbjM3MiByZW1haW5kZXJuZWFyICAgMTIyICAgICAyICAgIC0+ICAwCitkcXJtbjM3MyByZW1haW5kZXJuZWFyICAgMTIzICAgICAyICAgIC0+IC0xCitkcXJtbjM3NCByZW1haW5kZXJuZWFyICAgMTI0ICAgICAyICAgIC0+ICAwCitkcXJtbjM3NSByZW1haW5kZXJuZWFyICAgMTI1ICAgICAyICAgIC0+ICAxCitkcXJtbjM3NiByZW1haW5kZXJuZWFyICAgMTI2ICAgICAyICAgIC0+ICAwCitkcXJtbjM3NyByZW1haW5kZXJuZWFyICAgMTI3ICAgICAyICAgIC0+IC0xCisKK2Rxcm1uMzgxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEgICAgICAgICAtPiAgMAorZHFybW4zODIgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDAxICAgIC0+IC0wLjIzNDQKK2Rxcm1uMzgzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAxICAgICAtPiAtMC4zMzMKK2Rxcm1uMzg0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDEgICAgICAtPiAtMC4yMworZHFybW4zODUgcmVtYWluZGVybmVhciAxMjM0NSAgMS4xICAgICAgIC0+IC0wLjMKK2Rxcm1uMzg2IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQgICAgICAgICAtPiAtMQorZHFybW4zODcgcmVtYWluZGVybmVhciAxMjM0NSAgNCAgICAgICAgIC0+ICAxCitkcXJtbjM4OCByZW1haW5kZXJuZWFyIDEyMzU1ICA0LjAwMDEgICAgLT4gLTEuMzA4OQorZHFybW4zODkgcmVtYWluZGVybmVhciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKK2Rxcm1uMzkwIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45CitkcXJtbjM5MSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gLTAuMjYKK2Rxcm1uMzkyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKK2Rxcm1uMzkzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5CitkcXJtbjM5NCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDAKK2Rxcm1uMzk1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAwMSAgICAtPiAtMC4yNDY5CitkcXJtbjM5NiByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMSAgICAgLT4gLTIuNDY5CitkcXJtbjM5NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYKK2Rxcm1uMzk4IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMSAgICAgICAtPiAtMi4xCisKKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCitkcXJtbjQwMSByZW1haW5kZXJuZWFyICAgMC40ICAgICAgICAgMSAgIC0+ICAwLjQKK2Rxcm1uNDAyIHJlbWFpbmRlcm5lYXIgICAwLjQ1ICAgICAgICAxICAgLT4gIDAuNDUKK2Rxcm1uNDAzIHJlbWFpbmRlcm5lYXIgICAwLjQ1NSAgICAgICAxICAgLT4gIDAuNDU1CitkcXJtbjQwNCByZW1haW5kZXJuZWFyICAgMC40NTU1ICAgICAgMSAgIC0+ICAwLjQ1NTUKK2Rxcm1uNDA1IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1ICAgICAxICAgLT4gIDAuNDU1NTUKK2Rxcm1uNDA2IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NSAgICAxICAgLT4gIDAuNDU1NTU1CitkcXJtbjQwNyByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1ICAgMSAgIC0+ICAwLjQ1NTU1NTUKK2Rxcm1uNDA4IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1ICAxICAgLT4gIDAuNDU1NTU1NTUKK2Rxcm1uNDA5IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NTU1CistLSB3aXRoIHNwaWxsLi4uIFs0MTIgZXhlcmNpc2VzIHN0aWNrdGFiIGxvb3BdCitkcXJtbjQxMSByZW1haW5kZXJuZWFyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUKK2Rxcm1uNDEyIHJlbWFpbmRlcm5lYXIgICAwLjU1ICAgICAgICAxICAgLT4gLTAuNDUKK2Rxcm1uNDEzIHJlbWFpbmRlcm5lYXIgICAwLjU1NSAgICAgICAxICAgLT4gLTAuNDQ1CitkcXJtbjQxNCByZW1haW5kZXJuZWFyICAgMC41NTU1ICAgICAgMSAgIC0+IC0wLjQ0NDUKK2Rxcm1uNDE1IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1ICAgICAxICAgLT4gLTAuNDQ0NDUKK2Rxcm1uNDE2IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NSAgICAxICAgLT4gLTAuNDQ0NDQ1CitkcXJtbjQxNyByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1ICAgMSAgIC0+IC0wLjQ0NDQ0NDUKK2Rxcm1uNDE4IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1ICAxICAgLT4gLTAuNDQ0NDQ0NDUKK2Rxcm1uNDE5IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1NSAxICAgLT4gLTAuNDQ0NDQ0NDQ1CisKKy0tIGZvbGRkb3ducworZHFybW40MjEgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rxcm1uNDIyIHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICAxRSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZAorZHFybW40MjMgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDJFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCitkcXJtbjQyNCByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgM0UrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2Rxcm1uNDI1IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA0RSs2MTQzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFybW40MjYgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDVFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCitkcXJtbjQyNyByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgNkUrNjE0MyAgLT4gIC0yLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2Rxcm1uNDI4IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA3RSs2MTQzICAtPiAgIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFybW40MjkgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDhFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJtbjQzMCByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgOUUrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKKy0tIHRpbmllcworZHFybW40MzEgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDFFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFybW40MzIgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDJFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFybW40MzMgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDNFLTYxNzYgIC0+ICAgMUUtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDM0IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA0RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQzNSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgNUUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJtbjQzNiByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgNkUtNjE3NiAgLT4gIC0yRS02MTc2IFN1Ym5vcm1hbAorZHFybW40MzcgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDdFLTYxNzYgIC0+ICAgM0UtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDM4IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA4RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQzOSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgOUUtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbAorZHFybW40NDAgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgMTBFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFybW40NDEgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgMTFFLTYxNzYgIC0+ICAtMUUtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDQyIHJlbWFpbmRlcm5lYXIgMTAwRS02MTc1IDExRS02MTc2ICAtPiAgLTFFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQ0MyByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAyMEUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJtbjQ0NCByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAyMUUtNjE3NiAgLT4gIC04RS02MTc2IFN1Ym5vcm1hbAorZHFybW40NDUgcmVtYWluZGVybmVhciAxMDBFLTYxNzUgMzBFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwKKworLS0gemVybyBzaWducworZHFybW42NTAgcmVtYWluZGVybmVhciAgMSAgMSAtPiAgMAorZHFybW42NTEgcmVtYWluZGVybmVhciAtMSAgMSAtPiAtMAorZHFybW42NTIgcmVtYWluZGVybmVhciAgMSAtMSAtPiAgMAorZHFybW42NTMgcmVtYWluZGVybmVhciAtMSAtMSAtPiAtMAorZHFybW42NTQgcmVtYWluZGVybmVhciAgMCAgMSAtPiAgMAorZHFybW42NTUgcmVtYWluZGVybmVhciAtMCAgMSAtPiAtMAorZHFybW42NTYgcmVtYWluZGVybmVhciAgMCAtMSAtPiAgMAorZHFybW42NTcgcmVtYWluZGVybmVhciAtMCAtMSAtPiAtMAorZHFybW42NTggcmVtYWluZGVybmVhciAgMC4wMCAgMSAgLT4gIDAuMDAKK2Rxcm1uNjU5IHJlbWFpbmRlcm5lYXIgLTAuMDAgIDEgIC0+IC0wLjAwCisKKy0tIFNwZWNpYWxzCitkcXJtbjY4MCByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4MSByZW1haW5kZXJuZWFyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4MiByZW1haW5kZXJuZWFyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4MyByZW1haW5kZXJuZWFyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4NCByZW1haW5kZXJuZWFyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4NSByZW1haW5kZXJuZWFyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4NiByZW1haW5kZXJuZWFyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4NyByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4OCByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZHFybW42ODkgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW42OTEgcmVtYWluZGVybmVhciAtMSAgICAgSW5mICAgLT4gLTEKK2Rxcm1uNjkyIHJlbWFpbmRlcm5lYXIgIDAgICAgIEluZiAgIC0+ICAwCitkcXJtbjY5MyByZW1haW5kZXJuZWFyIC0wICAgICBJbmYgICAtPiAtMAorZHFybW42OTQgcmVtYWluZGVybmVhciAgMSAgICAgSW5mICAgLT4gIDEKK2Rxcm1uNjk1IHJlbWFpbmRlcm5lYXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkcXJtbjY5NiByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxcm1uNzAwIHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzAxIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzAyIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzAzIHJlbWFpbmRlcm5lYXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA0IHJlbWFpbmRlcm5lYXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA1IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA2IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA3IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA4IHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA5IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkcXJtbjcxMCByZW1haW5kZXJuZWFyIC0xICAgIC1JbmYgICAtPiAtMQorZHFybW43MTEgcmVtYWluZGVybmVhciAtMCAgICAtSW5mICAgLT4gLTAKK2Rxcm1uNzEyIHJlbWFpbmRlcm5lYXIgIDAgICAgLUluZiAgIC0+ICAwCitkcXJtbjcxMyByZW1haW5kZXJuZWFyICAxICAgIC1JbmYgICAtPiAgMQorZHFybW43MTQgcmVtYWluZGVybmVhciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2Rxcm1uNzE1IHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFybW43MjEgcmVtYWluZGVybmVhciAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFybW43MjIgcmVtYWluZGVybmVhciAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFybW43MjMgcmVtYWluZGVybmVhciAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFybW43MjQgcmVtYWluZGVybmVhciAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFybW43MjUgcmVtYWluZGVybmVhciAtTmFOICAwICAgICAgLT4gLU5hTgorZHFybW43MjYgcmVtYWluZGVybmVhciAgTmFOICAxICAgICAgLT4gIE5hTgorZHFybW43MjcgcmVtYWluZGVybmVhciAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFybW43MjggcmVtYWluZGVybmVhciAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFybW43MjkgcmVtYWluZGVybmVhciAgTmFOIC1OYU4gICAgLT4gIE5hTgorZHFybW43MzAgcmVtYWluZGVybmVhciAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFybW43MzEgcmVtYWluZGVybmVhciAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFybW43MzIgcmVtYWluZGVybmVhciAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFybW43MzMgcmVtYWluZGVybmVhciAtMCAgIC1OYU4gICAgLT4gLU5hTgorZHFybW43MzQgcmVtYWluZGVybmVhciAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFybW43MzUgcmVtYWluZGVybmVhciAgMSAgIC1OYU4gICAgLT4gLU5hTgorZHFybW43MzYgcmVtYWluZGVybmVhciAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFybW43MzcgcmVtYWluZGVybmVhciAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcXJtbjc0MSByZW1haW5kZXJuZWFyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NDIgcmVtYWluZGVybmVhciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzQzIHJlbWFpbmRlcm5lYXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc0NCByZW1haW5kZXJuZWFyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NDUgcmVtYWluZGVybmVhciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzQ2IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc0NyByZW1haW5kZXJuZWFyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NDkgcmVtYWluZGVybmVhciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzUwIHJlbWFpbmRlcm5lYXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1MSByZW1haW5kZXJuZWFyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTIgcmVtYWluZGVybmVhciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzUzIHJlbWFpbmRlcm5lYXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1NCByZW1haW5kZXJuZWFyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTUgcmVtYWluZGVybmVhciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzU2IHJlbWFpbmRlcm5lYXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1NyByZW1haW5kZXJuZWFyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTggcmVtYWluZGVybmVhciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzU5IHJlbWFpbmRlcm5lYXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2luZyBOYU5zCitkcXJtbjc2MCByZW1haW5kZXJuZWFyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xCitkcXJtbjc2MSByZW1haW5kZXJuZWFyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc2MiByZW1haW5kZXJuZWFyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc2MyByZW1haW5kZXJuZWFyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc2NCByZW1haW5kZXJuZWFyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQorZHFybW43NjUgcmVtYWluZGVybmVhciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgorZHFybW43NjYgcmVtYWluZGVybmVhciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMKK2Rxcm1uNzY3IHJlbWFpbmRlcm5lYXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0CitkcXJtbjc2OCByZW1haW5kZXJuZWFyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQorZHFybW43NjkgcmVtYWluZGVybmVhciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYKKworLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCitkcXJtbjc3MCAgcmVtYWluZGVybmVhciAgMTIzNDUwMDAwMDAwMDAwMDAwMDAwMDA2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gLTQKK2Rxcm1uNzcxICByZW1haW5kZXJuZWFyICAxMjM0NTAwMDAwMDAwMDAwMDAwMDAwMDY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAorZHFybW43NzIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW43NzMgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCitkcXJtbjgwMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkcXJtbjgwMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkcXJtbjgwMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkcXJtbjgwNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkcXJtbjgwNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkcXJtbjgwNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkcXJtbjgwNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkcXJtbjgwOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkcXJtbjgwOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkcXJtbjgxMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkcXJtbjgxMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAorZHFybW44MTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitkcXJtbjgyMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkcXJtbjgyMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkcXJtbjgyMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkcXJtbjgyNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkcXJtbjgyNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkcXJtbjgyNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkcXJtbjgyNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkcXJtbjgyOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkcXJtbjgyOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkcXJtbjgzMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkcXJtbjgzMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAorZHFybW44MzIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGRpdmlkZWludAorZHFybW44NDAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wCitkcXJtbjg0MSByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKK2Rxcm1uODQyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQorZHFybW44NDMgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjkgICAxICAtPiAtMC4xCitkcXJtbjg0NCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuOTk5IDEgIC0+IC0wLjAwMQorZHFybW44NTAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAzICAgICA1ICAtPiAtMgorZHFybW44NTEgcmVtYWluZGVybmVhciAgMTAwMDAwMDMgICAgICA1ICAtPiAtMgorZHFybW44NTIgcmVtYWluZGVybmVhciAgMTAwMDAwMyAgICAgICA1ICAtPiAtMgorZHFybW44NTMgcmVtYWluZGVybmVhciAgMTAwMDAzICAgICAgICA1ICAtPiAtMgorZHFybW44NTQgcmVtYWluZGVybmVhciAgMTAwMDMgICAgICAgICA1ICAtPiAtMgorZHFybW44NTUgcmVtYWluZGVybmVhciAgMTAwMyAgICAgICAgICA1ICAtPiAtMgorZHFybW44NTYgcmVtYWluZGVybmVhciAgMTAzICAgICAgICAgICA1ICAtPiAtMgorZHFybW44NTcgcmVtYWluZGVybmVhciAgMTMgICAgICAgICAgICA1ICAtPiAtMgorZHFybW44NTggcmVtYWluZGVybmVhciAgMSAgICAgICAgICAgICA1ICAtPiAgMQorCistLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFybW44NjAgcmVtYWluZGVybmVhciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rxcm1uODYxIHJlbWFpbmRlcm5lYXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJtbjg2MiByZW1haW5kZXJuZWFyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFybW44NjMgcmVtYWluZGVybmVhciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rxcm1uODY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJtbjg3MCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODcyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODc1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODc4IHJlbWFpbmRlcm5lYXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAorZHFybW44ODAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODgxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwCitkcXJtbjg4MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAorZHFybW44ODMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzAKK2Rxcm1uODg0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwCitkcXJtbjg4NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAorZHFybW44ODYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDAKKworZHFybW44OTAgcmVtYWluZGVybmVhciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODkxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44OTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODk0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44OTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODk3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMAorZHFybW45MDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTAxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCitkcXJtbjkwMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMAorZHFybW45MDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IC03NzAKK2Rxcm1uOTA0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCitkcXJtbjkwNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gIC0xMAorZHFybW45MDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDAKKworZHFybW45MTAgcmVtYWluZGVybmVhciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTExIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTE0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTE3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMAorZHFybW45MjAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTIxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwCitkcXJtbjkyMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMAorZHFybW45MjMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKK2Rxcm1uOTI0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwCitkcXJtbjkyNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gIC0yMAorZHFybW45MjYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKKworZHFybW45MzAgcmVtYWluZGVybmVhciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTMxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTM0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTM3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAorZHFybW45NDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTQxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwCitkcXJtbjk0MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAorZHFybW45NDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzAKK2Rxcm1uOTQ0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwCitkcXJtbjk0NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gIC0zMAorZHFybW45NDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgLTMKKworZHFybW45NTAgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45NjEgcmVtYWluZGVybmVhciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjIgcmVtYWluZGVybmVhciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjMgcmVtYWluZGVybmVhciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjQgcmVtYWluZGVybmVhciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjUgcmVtYWluZGVybmVhciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjYgcmVtYWluZGVybmVhciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjcgcmVtYWluZGVybmVhciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjggcmVtYWluZGVybmVhciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjkgcmVtYWluZGVybmVhciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMAorCitkcXJtbjk4MCByZW1haW5kZXJuZWFyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5CisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorZHFybW4xMDUxIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW4xMDUyIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW4xMDUzIHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW4xMDU0IHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW4xMDU1IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcKK2Rxcm1uMTA1NiByZW1haW5kZXJuZWFyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3CitkcXJtbjEwNTcgcmVtYWluZGVybmVhciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3NworZHFybW4xMDU4IHJlbWFpbmRlcm5lYXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcKKworLS0gR3l1cmlzIGV4YW1wbGUKK2Rxcm1uMTA3MCByZW1haW5kZXIgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODkwMDBFLTYxNDMgLT4gOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMKKworLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QKK2Rxcm1uMTEwMSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzMKK2Rxcm1uMTEwMiAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTAuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjIKK2Rxcm1uMTEwMyAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTEKK2Rxcm1uMTEwNCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTQKK2Rxcm1uMTEwNSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTIKK2Rxcm1uMTEwNiAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgIC0xLjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NDgKK2Rxcm1uMTEwNyAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgIDEuNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKK2Rxcm1uMTEwOCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAtMC43NTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMKK2Rxcm1uMTEwOSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKK2Rxcm1uMTExMCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIDEuNTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTQKK2Rxcm1uMTExMSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDIKKworLS0gTnVsbCB0ZXN0cworZHFybW4xMDAwIHJlbWFpbmRlcm5lYXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEwMDEgcmVtYWluZGVybmVhciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUm90YXRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSb3RhdGUuZGVjVGVzdAppbmRleCA4NThiODIzLi5lZGNmOWVlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSb3RhdGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSb3RhdGUuZGVjVGVzdApAQCAtMSwyOTggKzEsMjk4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcVJvdGF0ZS5kZWNUZXN0IC0tIHJvdGF0ZSBkZWNRdWFkIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWRxcm90MDAxIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAwICAtPiAgMA0KLWRxcm90MDAyIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAyICAtPiAgMA0KLWRxcm90MDAzIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwDQotZHFyb3QwMDQgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMzMgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFyb3QwMDUgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMzQgIC0+ICAxDQotZHFyb3QwMDYgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFyb3QwMDcgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgLTIgIC0+ICAwDQotZHFyb3QwMDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTEgIC0+ICA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQotZHFyb3QwMDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+ICAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxDQotZHFyb3QwMTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotZHFyb3QwMTEgcm90YXRlICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+ICA5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ5DQotZHFyb3QwMTIgcm90YXRlICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotDQotLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcg0KLWRxcm90MDE1IHJvdGF0ZSAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3QwMTYgcm90YXRlICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDAxNyByb3RhdGUgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90MDE4IHJvdGF0ZSAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3QwMTkgcm90YXRlICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDAyMCByb3RhdGUgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90MDIxIHJvdGF0ZSAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3QwMjIgcm90YXRlICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uDQotZHFyb3QwMjUgcm90YXRlICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDAyNiByb3RhdGUgICAgICAgIDEgICAgLTM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90MDI3IHJvdGF0ZSAgICAgICAgMSAgICAgMzUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3QwMjggcm90YXRlICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmdWxsIHBhdHRlcm4NCi1kcXJvdDAzMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi1kcXJvdDAzMSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzMgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDENCi1kcXJvdDAzMiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzIgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTINCi1kcXJvdDAzMyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzEgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjMNCi1kcXJvdDAzNCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQNCi1kcXJvdDAzNSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjkgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDUNCi1kcXJvdDAzNiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjggIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTYNCi1kcXJvdDAzNyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1NjcNCi1kcXJvdDAzOCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjYgIC0+IDkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2NzgNCi1kcXJvdDAzOSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjUgIC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkNCi1kcXJvdDA0MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTANCi1kcXJvdDA0MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjMgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDENCi1kcXJvdDA0MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjIgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTINCi1kcXJvdDA0MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjEgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjMNCi1kcXJvdDA0NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQNCi1kcXJvdDA0NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTkgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDUNCi1kcXJvdDA0NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTggIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTYNCi1kcXJvdDA0OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1NjcNCi1kcXJvdDA0OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTYgIC0+IDkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2NzgNCi1kcXJvdDA1MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTUgIC0+ICAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkNCi1kcXJvdDA1MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTANCi1kcXJvdDA1MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTMgIC0+IDIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDENCi1kcXJvdDA1MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTIgIC0+IDM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTINCi1kcXJvdDA1NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTEgIC0+IDQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMNCi1kcXJvdDA1NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTAgIC0+IDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi1kcXJvdDA1NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOSAgIC0+IDY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUNCi1kcXJvdDA1NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOCAgIC0+IDc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYNCi1kcXJvdDA1OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNyAgIC0+IDg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcNCi1kcXJvdDA1OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNiAgIC0+IDkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NzgNCi1kcXJvdDA2MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNSAgIC0+ICAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkNCi1kcXJvdDA2MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNCAgIC0+IDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTANCi1kcXJvdDA2MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMyAgIC0+IDIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDENCi1kcXJvdDA2MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMiAgIC0+IDM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTINCi1kcXJvdDA2NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMSAgIC0+IDQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMNCi1kcXJvdDA2NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi0NCi1kcXJvdDA2NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi1kcXJvdDA2NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDENCi1kcXJvdDA2OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMiAgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTINCi1kcXJvdDA2OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMyAgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjMNCi1kcXJvdDA3MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQNCi1kcXJvdDA3MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNSAgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDUNCi1kcXJvdDA3MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNiAgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTYNCi1kcXJvdDA3MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1NjcNCi1kcXJvdDA3NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArOCAgIC0+IDkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2NzgNCi1kcXJvdDA3NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArOSAgIC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkNCi1kcXJvdDA3NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTANCi1kcXJvdDA3NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTEgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDENCi1kcXJvdDA3OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTIgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTINCi1kcXJvdDA3OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTMgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjMNCi1kcXJvdDA4MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTQgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQNCi1kcXJvdDA4MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTUgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDUNCi1kcXJvdDA4MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTYgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTYNCi1kcXJvdDA4MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1NjcNCi1kcXJvdDA4NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTggIC0+IDkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2NzgNCi1kcXJvdDA4NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTkgIC0+ICAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkNCi1kcXJvdDA4NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjAgIC0+IDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTANCi1kcXJvdDA4NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjEgIC0+IDIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDENCi1kcXJvdDA4OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjIgIC0+IDM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTINCi1kcXJvdDA4OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjMgIC0+IDQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMNCi1kcXJvdDA5MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjQgIC0+IDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi1kcXJvdDA5MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjUgIC0+IDY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUNCi1kcXJvdDA5MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjYgIC0+IDc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYNCi1kcXJvdDA5MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjcgIC0+IDg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcNCi1kcXJvdDA5NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjggIC0+IDkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NzgNCi1kcXJvdDA5NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjkgIC0+ICAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkNCi1kcXJvdDA5NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzAgIC0+IDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTANCi1kcXJvdDA5NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzEgIC0+IDIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDENCi1kcXJvdDA5OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzIgIC0+IDM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTINCi1kcXJvdDA5OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzMgIC0+IDQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMNCi1kcXJvdDEwMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi0NCi0tLSB6ZXJvcw0KLWRxcm90MjcwIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMEUtMTANCi1kcXJvdDI3MSByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFLTEwDQotZHFyb3QyNzIgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwLjAwMA0KLWRxcm90MjczIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMC4wMDANCi1kcXJvdDI3NCByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFKzEwDQotZHFyb3QyNzUgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwRSsxMA0KLWRxcm90Mjc2IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMEUtMTANCi1kcXJvdDI3NyByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFLTEwDQotZHFyb3QyNzggcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wLjAwMA0KLWRxcm90Mjc5IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMC4wMDANCi1kcXJvdDI4MCByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFKzEwDQotZHFyb3QyODEgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wRSsxMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZHFyb3QxNDEgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFyb3QxNDIgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFyb3QxNDMgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFyb3QxNDQgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDMzIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFyb3QxNDUgcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwDQotZHFyb3QxNDYgcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IDEuMEUtNjE0Mg0KLWRxcm90MTQ3IHJvdGF0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTYxNDINCi1kcXJvdDE0OCByb3RhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTANCi1kcXJvdDE1MSByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KLWRxcm90MTUyIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAxRS02MTc2DQotZHFyb3QxNTMgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IDFFLTYxNzYNCi1kcXJvdDE1NCByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KLWRxcm90MTU1IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0DQotZHFyb3QxNTYgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IDlFLTYxNzYNCi1kcXJvdDE1NyByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gOUUtNjE3Ng0KLWRxcm90MTU4IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0DQotZHFyb3QxNjAgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFyb3QxNjEgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IDEuMEUtNjE3NQ0KLWRxcm90MTYyIHJvdGF0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTYxNzUNCi1kcXJvdDE2MyByb3RhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi0tLSAgbmVnYXRpdmVzDQotZHFyb3QxNzEgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxcm90MTcyIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcXJvdDE3MyByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFyb3QxNzQgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDMzIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxcm90MTc1IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTANCi1kcXJvdDE3NiByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gLTEuMEUtNjE0Mg0KLWRxcm90MTc3IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTQyDQotZHFyb3QxNzggcm90YXRlIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMA0KLWRxcm90MTgxIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KLWRxcm90MTgyIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtMUUtNjE3Ng0KLWRxcm90MTgzIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAtMUUtNjE3Ng0KLWRxcm90MTg0IHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KLWRxcm90MTg1IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KLWRxcm90MTg2IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtOUUtNjE3Ng0KLWRxcm90MTg3IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAtOUUtNjE3Ng0KLWRxcm90MTg4IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KLWRxcm90MTkwIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcXJvdDE5MSByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gLTEuMEUtNjE3NQ0KLWRxcm90MTkyIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTc1DQotZHFyb3QxOTMgcm90YXRlIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLQ0KLS0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykNCi1kcXJvdDIwMSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTANCi1kcXJvdDIwMiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMiAgLT4gLTANCi1kcXJvdDIwMyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAgMiAgLT4gLTEwMA0KLWRxcm90MjA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDMzICAtPiAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxcm90MjA1IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDM0ICAtPiAtMQ0KLWRxcm90MjA2IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIC0xICAtPiAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxcm90MjA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMA0KLWRxcm90MjA4IHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0xICAtPiAtNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMw0KLWRxcm90MjA5IHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MQ0KLWRxcm90MjEwIHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLWRxcm90MjExIHJvdGF0ZSAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtOTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OQ0KLWRxcm90MjEyIHJvdGF0ZSAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLQ0KLQ0KLS0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsDQotZHFyb3Q3ODEgcm90YXRlIC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkNCi1kcXJvdDc4MiByb3RhdGUgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRxcm90NzgzIHJvdGF0ZSAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZHFyb3Q3ODQgcm90YXRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kcXJvdDc4NSByb3RhdGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRxcm90Nzg2IHJvdGF0ZSAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5DQotZHFyb3Q3ODcgcm90YXRlIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDc4OCByb3RhdGUgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90Nzg5IHJvdGF0ZSAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q3OTAgcm90YXRlIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDc5MSByb3RhdGUgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90NzkyIHJvdGF0ZSAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q3OTMgcm90YXRlICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDc5NCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxcm90ODAwIHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4MDEgcm90YXRlICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQ0KLWRxcm90ODAyIHJvdGF0ZSAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkNCi1kcXJvdDgwMyByb3RhdGUgIEluZiAgLTAgICAgIC0+IEluZmluaXR5DQotZHFyb3Q4MDQgcm90YXRlICBJbmYgICAwICAgICAtPiBJbmZpbml0eQ0KLWRxcm90ODA1IHJvdGF0ZSAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkNCi1kcXJvdDgwNiByb3RhdGUgIEluZiAgIDggICAgIC0+IEluZmluaXR5DQotZHFyb3Q4MDcgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDgwOCByb3RhdGUgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODA5IHJvdGF0ZSAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4MTAgcm90YXRlIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDgxMSByb3RhdGUgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODEyIHJvdGF0ZSAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4MTMgcm90YXRlICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDgxNCByb3RhdGUgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODE1IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFyb3Q4MjEgcm90YXRlICBOYU4gLUluZiAgICAtPiAgTmFODQotZHFyb3Q4MjIgcm90YXRlICBOYU4gLTEwMDAgICAtPiAgTmFODQotZHFyb3Q4MjMgcm90YXRlICBOYU4gLTEgICAgICAtPiAgTmFODQotZHFyb3Q4MjQgcm90YXRlICBOYU4gLTAgICAgICAtPiAgTmFODQotZHFyb3Q4MjUgcm90YXRlICBOYU4gIDAgICAgICAtPiAgTmFODQotZHFyb3Q4MjYgcm90YXRlICBOYU4gIDEgICAgICAtPiAgTmFODQotZHFyb3Q4Mjcgcm90YXRlICBOYU4gIDEwMDAgICAtPiAgTmFODQotZHFyb3Q4Mjggcm90YXRlICBOYU4gIEluZiAgICAtPiAgTmFODQotZHFyb3Q4Mjkgcm90YXRlICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFyb3Q4MzAgcm90YXRlIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZHFyb3Q4MzEgcm90YXRlIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZHFyb3Q4MzIgcm90YXRlIC0xICAgIE5hTiAgICAtPiAgTmFODQotZHFyb3Q4MzMgcm90YXRlIC0wICAgIE5hTiAgICAtPiAgTmFODQotZHFyb3Q4MzQgcm90YXRlICAwICAgIE5hTiAgICAtPiAgTmFODQotZHFyb3Q4MzUgcm90YXRlICAxICAgIE5hTiAgICAtPiAgTmFODQotZHFyb3Q4MzYgcm90YXRlICAxMDAwIE5hTiAgICAtPiAgTmFODQotZHFyb3Q4Mzcgcm90YXRlICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZHFyb3Q4NDEgcm90YXRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODQyIHJvdGF0ZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg0MyByb3RhdGUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NDQgcm90YXRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODQ1IHJvdGF0ZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg0NiByb3RhdGUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NDcgcm90YXRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODQ4IHJvdGF0ZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg0OSByb3RhdGUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NTAgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODUxIHJvdGF0ZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg1MiByb3RhdGUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NTMgcm90YXRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODU0IHJvdGF0ZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg1NSByb3RhdGUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NTYgcm90YXRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODU3IHJvdGF0ZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg1OCByb3RhdGUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NTkgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcXJvdDg2MSByb3RhdGUgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZHFyb3Q4NjIgcm90YXRlICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KLWRxcm90ODYzIHJvdGF0ZSAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1kcXJvdDg2NCByb3RhdGUgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZHFyb3Q4NjUgcm90YXRlICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KLWRxcm90ODY2IHJvdGF0ZSAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1kcXJvdDg2NyByb3RhdGUgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZHFyb3Q4Njggcm90YXRlICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KLWRxcm90ODY5IHJvdGF0ZSAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZHFyb3Q4NzEgcm90YXRlICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NzIgcm90YXRlICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NzMgcm90YXRlICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NzQgcm90YXRlICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NzUgcm90YXRlICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NzYgcm90YXRlICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4Nzcgcm90YXRlIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4Nzggcm90YXRlIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4Nzkgcm90YXRlICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4ODAgcm90YXRlICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4ODEgcm90YXRlICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4ODIgcm90YXRlIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1kcXJvdDg4MyByb3RhdGUgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg4NCByb3RhdGUgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KLWRxcm90ODg1IHJvdGF0ZSAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFSb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgZGVjUXVhZCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2Rxcm90MDAxIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAwICAtPiAgMAorZHFyb3QwMDIgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwCitkcXJvdDAwMyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMAorZHFyb3QwMDQgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMzMgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXJvdDAwNSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAzNCAgLT4gIDEKK2Rxcm90MDA2IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFyb3QwMDcgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgLTIgIC0+ICAwCitkcXJvdDAwOCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gIDQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxcm90MDA5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MQorZHFyb3QwMTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDAxMSByb3RhdGUgIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gIDkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDkKK2Rxcm90MDEyIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCistLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyCitkcXJvdDAxNSByb3RhdGUgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMTYgcm90YXRlICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDE3IHJvdGF0ZSAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAxOCByb3RhdGUgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMTkgcm90YXRlICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDIwIHJvdGF0ZSAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAyMSByb3RhdGUgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMjIgcm90YXRlICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24KK2Rxcm90MDI1IHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAyNiByb3RhdGUgICAgICAgIDEgICAgLTM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMjcgcm90YXRlICAgICAgICAxICAgICAzNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDI4IHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZ1bGwgcGF0dGVybgorZHFyb3QwMzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTM0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDAzMSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzMgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEKK2Rxcm90MDMyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMiAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMgorZHFyb3QwMzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMxICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzCitkcXJvdDAzNCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQKK2Rxcm90MDM1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yOSAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NQorZHFyb3QwMzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI4ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2CitkcXJvdDAzNyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1NjcKK2Rxcm90MDM4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNiAgLT4gOTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3OAorZHFyb3QwMzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI1ICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5CitkcXJvdDA0MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAKK2Rxcm90MDQxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMyAgLT4gMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMQorZHFyb3QwNDIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyCitkcXJvdDA0MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjEgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjMKK2Rxcm90MDQ0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMCAgLT4gNTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNAorZHFyb3QwNDUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE5ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1CitkcXJvdDA0NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTggIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTYKK2Rxcm90MDQ4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNyAgLT4gODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2NworZHFyb3QwNDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE2ICAtPiA5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4CitkcXJvdDA1MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTUgIC0+ICAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkKK2Rxcm90MDUxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MAorZHFyb3QwNTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEzICAtPiAyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCitkcXJvdDA1MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTIgIC0+IDM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIKK2Rxcm90MDU0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMSAgLT4gNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFyb3QwNTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEwICAtPiA1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDA1NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOSAgIC0+IDY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUKK2Rxcm90MDU3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC04ICAgLT4gNzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NgorZHFyb3QwNTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTcgICAtPiA4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3CitkcXJvdDA1OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNiAgIC0+IDkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NzgKK2Rxcm90MDYwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC01ICAgLT4gIDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQorZHFyb3QwNjEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTQgICAtPiAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitkcXJvdDA2MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMyAgIC0+IDIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEKK2Rxcm90MDYzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yICAgLT4gMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMgorZHFyb3QwNjQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEgICAtPiA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXJvdDA2NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworZHFyb3QwNjYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDA2NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEKK2Rxcm90MDY4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMgorZHFyb3QwNjkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzCitkcXJvdDA3MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQKK2Rxcm90MDcxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs1ICAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NQorZHFyb3QwNzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2CitkcXJvdDA3MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1NjcKK2Rxcm90MDc0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs4ICAgLT4gOTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3OAorZHFyb3QwNzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzkgICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5CitkcXJvdDA3NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAKK2Rxcm90MDc3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMSAgLT4gMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMQorZHFyb3QwNzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyCitkcXJvdDA3OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTMgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjMKK2Rxcm90MDgwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNCAgLT4gNTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNAorZHFyb3QwODEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE1ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1CitkcXJvdDA4MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTYgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTYKK2Rxcm90MDgzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNyAgLT4gODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2NworZHFyb3QwODQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE4ICAtPiA5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4CitkcXJvdDA4NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTkgIC0+ICAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkKK2Rxcm90MDg2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMCAgLT4gMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MAorZHFyb3QwODcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIxICAtPiAyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCitkcXJvdDA4OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjIgIC0+IDM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIKK2Rxcm90MDg5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMyAgLT4gNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFyb3QwOTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI0ICAtPiA1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDA5MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjUgIC0+IDY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUKK2Rxcm90MDkyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNiAgLT4gNzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NgorZHFyb3QwOTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI3ICAtPiA4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3CitkcXJvdDA5NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjggIC0+IDkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NzgKK2Rxcm90MDk1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyOSAgLT4gIDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQorZHFyb3QwOTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMwICAtPiAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitkcXJvdDA5NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzEgIC0+IDIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEKK2Rxcm90MDk4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMiAgLT4gMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMgorZHFyb3QwOTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMzICAtPiA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXJvdDEwMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworLS0gemVyb3MKK2Rxcm90MjcwIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMEUtMTAKK2Rxcm90MjcxIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUtMTAKK2Rxcm90MjcyIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMC4wMDAKK2Rxcm90MjczIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMC4wMDAKK2Rxcm90Mjc0IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMEUrMTAKK2Rxcm90Mjc1IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUrMTAKK2Rxcm90Mjc2IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMEUtMTAKK2Rxcm90Mjc3IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUtMTAKK2Rxcm90Mjc4IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMC4wMDAKK2Rxcm90Mjc5IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMC4wMDAKK2Rxcm90MjgwIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMEUrMTAKK2Rxcm90MjgxIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUrMTAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rxcm90MTQxIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyb3QxNDIgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJvdDE0MyByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTQ0IHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyb3QxNDUgcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwCitkcXJvdDE0NiByb3RhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMS4wRS02MTQyCitkcXJvdDE0NyByb3RhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTQyCitkcXJvdDE0OCByb3RhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKK2Rxcm90MTUxIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE1MiByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gMUUtNjE3NgorZHFyb3QxNTMgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IDFFLTYxNzYKK2Rxcm90MTU0IHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE1NSByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFyb3QxNTYgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IDlFLTYxNzYKK2Rxcm90MTU3IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiA5RS02MTc2CitkcXJvdDE1OCByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFyb3QxNjAgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcXJvdDE2MSByb3RhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMS4wRS02MTc1CitkcXJvdDE2MiByb3RhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTc1CitkcXJvdDE2MyByb3RhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKKy0tICBuZWdhdGl2ZXMKK2Rxcm90MTcxIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTcyIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTczIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTc0IHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTc1IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKK2Rxcm90MTc2IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAtMS4wRS02MTQyCitkcXJvdDE3NyByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE0MgorZHFyb3QxNzggcm90YXRlIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMAorZHFyb3QxODEgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE4MiByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTFFLTYxNzYKK2Rxcm90MTgzIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAtMUUtNjE3NgorZHFyb3QxODQgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE4NSByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxcm90MTg2IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtOUUtNjE3NgorZHFyb3QxODcgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IC05RS02MTc2CitkcXJvdDE4OCByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxcm90MTkwIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2Rxcm90MTkxIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAtMS4wRS02MTc1CitkcXJvdDE5MiByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE3NQorZHFyb3QxOTMgcm90YXRlIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworCistLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCitkcXJvdDIwMSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTAKK2Rxcm90MjAyIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMAorZHFyb3QyMDMgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgIDIgIC0+IC0xMDAKK2Rxcm90MjA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDMzICAtPiAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFyb3QyMDUgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgMzQgIC0+IC0xCitkcXJvdDIwNiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAtMSAgLT4gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxcm90MjA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMAorZHFyb3QyMDggcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTEgIC0+IC00MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXJvdDIwOSByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEKK2Rxcm90MjEwIHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFyb3QyMTEgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+IC05MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ5CitkcXJvdDIxMiByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAorZHFyb3Q3ODEgcm90YXRlIC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKK2Rxcm90NzgyIHJvdGF0ZSAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcXJvdDc4MyByb3RhdGUgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFyb3Q3ODQgcm90YXRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2Rxcm90Nzg1IHJvdGF0ZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcXJvdDc4NiByb3RhdGUgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQorZHFyb3Q3ODcgcm90YXRlIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90Nzg4IHJvdGF0ZSAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDc4OSByb3RhdGUgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q3OTAgcm90YXRlIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90NzkxIHJvdGF0ZSAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDc5MiByb3RhdGUgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q3OTMgcm90YXRlICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90Nzk0IHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxcm90ODAwIHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgwMSByb3RhdGUgIEluZiAgLTggICAgIC0+IEluZmluaXR5CitkcXJvdDgwMiByb3RhdGUgIEluZiAgLTEgICAgIC0+IEluZmluaXR5CitkcXJvdDgwMyByb3RhdGUgIEluZiAgLTAgICAgIC0+IEluZmluaXR5CitkcXJvdDgwNCByb3RhdGUgIEluZiAgIDAgICAgIC0+IEluZmluaXR5CitkcXJvdDgwNSByb3RhdGUgIEluZiAgIDEgICAgIC0+IEluZmluaXR5CitkcXJvdDgwNiByb3RhdGUgIEluZiAgIDggICAgIC0+IEluZmluaXR5CitkcXJvdDgwNyByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MDggcm90YXRlIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODA5IHJvdGF0ZSAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgxMCByb3RhdGUgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MTEgcm90YXRlIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODEyIHJvdGF0ZSAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgxMyByb3RhdGUgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MTQgcm90YXRlICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODE1IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxcm90ODIxIHJvdGF0ZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFyb3Q4MjIgcm90YXRlICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcXJvdDgyMyByb3RhdGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2Rxcm90ODI0IHJvdGF0ZSAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFyb3Q4MjUgcm90YXRlICBOYU4gIDAgICAgICAtPiAgTmFOCitkcXJvdDgyNiByb3RhdGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2Rxcm90ODI3IHJvdGF0ZSAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFyb3Q4Mjggcm90YXRlICBOYU4gIEluZiAgICAtPiAgTmFOCitkcXJvdDgyOSByb3RhdGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODMwIHJvdGF0ZSAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFyb3Q4MzEgcm90YXRlIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcXJvdDgzMiByb3RhdGUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODMzIHJvdGF0ZSAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFyb3Q4MzQgcm90YXRlICAwICAgIE5hTiAgICAtPiAgTmFOCitkcXJvdDgzNSByb3RhdGUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODM2IHJvdGF0ZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFyb3Q4Mzcgcm90YXRlICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2Rxcm90ODQxIHJvdGF0ZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQyIHJvdGF0ZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQzIHJvdGF0ZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ0IHJvdGF0ZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ1IHJvdGF0ZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ2IHJvdGF0ZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ3IHJvdGF0ZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ4IHJvdGF0ZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ5IHJvdGF0ZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODUwIHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODUxIHJvdGF0ZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODUyIHJvdGF0ZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODUzIHJvdGF0ZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU0IHJvdGF0ZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU1IHJvdGF0ZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU2IHJvdGF0ZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU3IHJvdGF0ZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU4IHJvdGF0ZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU5IHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFyb3Q4NjEgcm90YXRlICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZHFyb3Q4NjIgcm90YXRlICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZHFyb3Q4NjMgcm90YXRlICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZHFyb3Q4NjQgcm90YXRlICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZHFyb3Q4NjUgcm90YXRlICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZHFyb3Q4NjYgcm90YXRlIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZHFyb3Q4Njcgcm90YXRlIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZHFyb3Q4Njggcm90YXRlICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZHFyb3Q4Njkgcm90YXRlICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2Rxcm90ODcxIHJvdGF0ZSAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NzIgcm90YXRlICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3MyByb3RhdGUgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODc0IHJvdGF0ZSAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NzUgcm90YXRlICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3NiByb3RhdGUgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODc3IHJvdGF0ZSAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4Nzggcm90YXRlIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3OSByb3RhdGUgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODgwIHJvdGF0ZSAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4ODEgcm90YXRlICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg4MiByb3RhdGUgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZHFyb3Q4ODMgcm90YXRlIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg4NCByb3RhdGUgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZHFyb3Q4ODUgcm90YXRlICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTYW1lUXVhbnR1bS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2FtZVF1YW50dW0uZGVjVGVzdAppbmRleCAyZjM1NmJiLi4yNTdjZGE4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTYW1lUXVhbnR1bS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNhbWVRdWFudHVtLmRlY1Rlc3QKQEAgLTEsMzg5ICsxLDM4OSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFTYW1lUXVhbnR1bS5kZWNUZXN0IC0tIGNoZWNrIGRlY1F1YWQgcXVhbnR1bXMgbWF0Y2ggICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRxc2FtcTAwMSBzYW1lcXVhbnR1bSAgMCAgICAgIDAgICAgICAtPiAgMQ0KLWRxc2FtcTAwMiBzYW1lcXVhbnR1bSAgMCAgICAgIDEgICAgICAtPiAgMQ0KLWRxc2FtcTAwMyBzYW1lcXVhbnR1bSAgMSAgICAgIDAgICAgICAtPiAgMQ0KLWRxc2FtcTAwNCBzYW1lcXVhbnR1bSAgMSAgICAgIDEgICAgICAtPiAgMQ0KLQ0KLWRxc2FtcTAxMSBzYW1lcXVhbnR1bSAgMTAgICAgIDFFKzEgICAtPiAwDQotZHFzYW1xMDEyIHNhbWVxdWFudHVtICAxMEUrMSAgMTBFKzEgIC0+IDENCi1kcXNhbXEwMTMgc2FtZXF1YW50dW0gIDEwMCAgICAxMEUrMSAgLT4gMA0KLWRxc2FtcTAxNCBzYW1lcXVhbnR1bSAgMTAwICAgIDFFKzIgICAtPiAwDQotZHFzYW1xMDE1IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMiAgIC0+IDANCi1kcXNhbXEwMTYgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0xICAgLT4gMQ0KLWRxc2FtcTAxNyBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTAgICAtPiAwDQotZHFzYW1xMDE4IHNhbWVxdWFudHVtICA5OTkgICAgOTk5ICAgIC0+IDENCi1kcXNhbXEwMTkgc2FtZXF1YW50dW0gIDk5OUUtMSA5OS45ICAgLT4gMQ0KLWRxc2FtcTAyMCBzYW1lcXVhbnR1bSAgMTExRS0xIDIyLjIgICAtPiAxDQotZHFzYW1xMDIxIHNhbWVxdWFudHVtICAxMTFFLTEgMTIzNC4yIC0+IDENCi0NCi0tLSB6ZXJvcw0KLWRxc2FtcTAzMCBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMSAgICAtPiAxDQotZHFzYW1xMDMxIHNhbWVxdWFudHVtICAwLjAgICAgMS4xMSAgIC0+IDANCi1kcXNhbXEwMzIgc2FtZXF1YW50dW0gIDAuMCAgICAwICAgICAgLT4gMA0KLWRxc2FtcTAzMyBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMCAgICAtPiAxDQotZHFzYW1xMDM0IHNhbWVxdWFudHVtICAwLjAgICAgMC4wMCAgIC0+IDANCi1kcXNhbXEwMzUgc2FtZXF1YW50dW0gIDBFKzEgICAwRSswICAgLT4gMA0KLWRxc2FtcTAzNiBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzEgICAtPiAxDQotZHFzYW1xMDM3IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMiAgIC0+IDANCi1kcXNhbXEwMzggc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNiAgLT4gMA0KLWRxc2FtcTAzOSBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE3ICAtPiAxDQotZHFzYW1xMDQwIHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTggIC0+IDANCi1kcXNhbXEwNDEgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE1IC0+IDANCi1kcXNhbXEwNDIgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE2IC0+IDENCi1kcXNhbXEwNDMgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE3IC0+IDANCi1kcXNhbXEwNDQgc2FtZXF1YW50dW0gLTBFLTE3ICAwLjBFLTE2IC0+IDENCi1kcXNhbXEwNDUgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE3IC0+IDANCi1kcXNhbXEwNDYgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE2IC0+IDENCi1kcXNhbXEwNDcgc2FtZXF1YW50dW0gLTBFLTE3ICAwLjBFLTE3IC0+IDANCi1kcXNhbXEwNDggc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE2IC0+IDENCi1kcXNhbXEwNDkgc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE3IC0+IDANCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRxc2FtcTA1MSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAxDQotZHFzYW1xMDUyIHNhbWVxdWFudHVtICAxRS02MTQzICAgICAgICAgICAgIDFFLTYxNDMgICAgICAgICAgIC0+IDENCi1kcXNhbXEwNTMgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gMQ0KLWRxc2FtcTA1NCBzYW1lcXVhbnR1bSAgMUUtNjE3NiAgICAgICAgICAgICAxRS02MTc2ICAgICAgICAgICAtPiAxDQotZHFzYW1xMDU1IHNhbWVxdWFudHVtICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IDENCi1kcXNhbXEwNTYgc2FtZXF1YW50dW0gIDFFLTYxNDMgICAgICAgICAgICAgMUUtNjE0MyAgICAgICAgICAgLT4gMQ0KLWRxc2FtcTA1NyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAxDQotZHFzYW1xMDU4IHNhbWVxdWFudHVtICAxRS02MTc2ICAgICAgICAgICAgIDFFLTYxNzYgICAgICAgICAgIC0+IDENCi0NCi1kcXNhbXEwNjEgc2FtZXF1YW50dW0gIC0xRS02MTc2ICAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMQ0KLWRxc2FtcTA2MiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtPiAxDQotZHFzYW1xMDYzIHNhbWVxdWFudHVtICAtMUUtNjE0MyAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDENCi1kcXNhbXEwNjQgc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQ0KLWRxc2FtcTA2NSBzYW1lcXVhbnR1bSAgLTFFLTYxNzYgICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAxDQotZHFzYW1xMDY2IHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0+IDENCi1kcXNhbXEwNjcgc2FtZXF1YW50dW0gIC0xRS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQ0KLWRxc2FtcTA2OCBzYW1lcXVhbnR1bSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxDQotDQotZHFzYW1xMDcxIHNhbWVxdWFudHVtICAtNEUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDENCi1kcXNhbXEwNzIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDBFLTYxNDMgLT4gMQ0KLWRxc2FtcTA3MyBzYW1lcXVhbnR1bSAgLTRFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxDQotZHFzYW1xMDc0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDENCi1kcXNhbXEwNzUgc2FtZXF1YW50dW0gIC00RS02MTc2ICAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMQ0KLWRxc2FtcTA3NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtPiAxDQotZHFzYW1xMDc3IHNhbWVxdWFudHVtICAtNEUtNjE0MyAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDENCi1kcXNhbXEwNzggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQ0KLQ0KLWRxc2FtcTA4MSBzYW1lcXVhbnR1bSAgLTRFLTEwMDYgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDANCi1kcXNhbXEwODIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMzYgLT4gMA0KLWRxc2FtcTA4MyBzYW1lcXVhbnR1bSAgLTRFLTYxNDAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDANCi1kcXNhbXEwODQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMzYgLT4gMA0KLWRxc2FtcTA4NSBzYW1lcXVhbnR1bSAgLTRFLTEwMDYgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDANCi1kcXNhbXEwODYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMzYgLT4gMA0KLWRxc2FtcTA4NyBzYW1lcXVhbnR1bSAgLTRFLTYxMzMgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDANCi1kcXNhbXEwODggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMzYgLT4gMA0KLQ0KLS0tIHNwZWNpYWxzICYgY29tYmluYXRpb25zDQotZHFzYW1xMDExMCBzYW1lcXVhbnR1bSAgLUluZiAgICAtSW5mICAgLT4gMQ0KLWRxc2FtcTAxMTEgc2FtZXF1YW50dW0gIC1JbmYgICAgIEluZiAgIC0+IDENCi1kcXNhbXEwMTEyIHNhbWVxdWFudHVtICAtSW5mICAgICBOYU4gICAtPiAwDQotZHFzYW1xMDExMyBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UrMyAgLT4gMA0KLWRxc2FtcTAxMTQgc2FtZXF1YW50dW0gIC1JbmYgICAgLTcgICAgIC0+IDANCi1kcXNhbXEwMTE1IHNhbWVxdWFudHVtICAtSW5mICAgIC03RS0zICAtPiAwDQotZHFzYW1xMDExNiBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUtMyAgLT4gMA0KLWRxc2FtcTAxMTcgc2FtZXF1YW50dW0gIC1JbmYgICAgLTAgICAgIC0+IDANCi1kcXNhbXEwMTE4IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRSszICAtPiAwDQotZHFzYW1xMDExOSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUtMyAgLT4gMA0KLWRxc2FtcTAxMjAgc2FtZXF1YW50dW0gIC1JbmYgICAgIDAgICAgIC0+IDANCi1kcXNhbXEwMTIxIHNhbWVxdWFudHVtICAtSW5mICAgICAwRSszICAtPiAwDQotZHFzYW1xMDEyMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UtMyAgLT4gMA0KLWRxc2FtcTAxMjMgc2FtZXF1YW50dW0gIC1JbmYgICAgIDcgICAgIC0+IDANCi1kcXNhbXEwMTI0IHNhbWVxdWFudHVtICAtSW5mICAgICA3RSszICAtPiAwDQotZHFzYW1xMDEyNSBzYW1lcXVhbnR1bSAgLUluZiAgICAgc05hTiAgLT4gMA0KLQ0KLWRxc2FtcTAyMTAgc2FtZXF1YW50dW0gICBJbmYgICAgLUluZiAgIC0+IDENCi1kcXNhbXEwMjExIHNhbWVxdWFudHVtICAgSW5mICAgICBJbmYgICAtPiAxDQotZHFzYW1xMDIxMiBzYW1lcXVhbnR1bSAgIEluZiAgICAgTmFOICAgLT4gMA0KLWRxc2FtcTAyMTMgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFKzMgIC0+IDANCi1kcXNhbXEwMjE0IHNhbWVxdWFudHVtICAgSW5mICAgIC03ICAgICAtPiAwDQotZHFzYW1xMDIxNSBzYW1lcXVhbnR1bSAgIEluZiAgICAtN0UtMyAgLT4gMA0KLWRxc2FtcTAyMTYgc2FtZXF1YW50dW0gICBJbmYgICAgLTBFLTMgIC0+IDANCi1kcXNhbXEwMjE3IHNhbWVxdWFudHVtICAgSW5mICAgIC0wICAgICAtPiAwDQotZHFzYW1xMDIxOCBzYW1lcXVhbnR1bSAgIEluZiAgICAtMEUrMyAgLT4gMA0KLWRxc2FtcTAyMTkgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFLTMgIC0+IDANCi1kcXNhbXEwMjIwIHNhbWVxdWFudHVtICAgSW5mICAgICAwICAgICAtPiAwDQotZHFzYW1xMDIyMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgMEUrMyAgLT4gMA0KLWRxc2FtcTAyMjIgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFLTMgIC0+IDANCi1kcXNhbXEwMjIzIHNhbWVxdWFudHVtICAgSW5mICAgICA3ICAgICAtPiAwDQotZHFzYW1xMDIyNCBzYW1lcXVhbnR1bSAgIEluZiAgICAgN0UrMyAgLT4gMA0KLWRxc2FtcTAyMjUgc2FtZXF1YW50dW0gICBJbmYgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXEwMzEwIHNhbWVxdWFudHVtICAgTmFOICAgIC1JbmYgICAtPiAwDQotZHFzYW1xMDMxMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTAzMTIgc2FtZXF1YW50dW0gICBOYU4gICAgIE5hTiAgIC0+IDENCi1kcXNhbXEwMzEzIHNhbWVxdWFudHVtICAgTmFOICAgIC03RSszICAtPiAwDQotZHFzYW1xMDMxNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtNyAgICAgLT4gMA0KLWRxc2FtcTAzMTUgc2FtZXF1YW50dW0gICBOYU4gICAgLTdFLTMgIC0+IDANCi1kcXNhbXEwMzE2IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRS0zICAtPiAwDQotZHFzYW1xMDMxNyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMCAgICAgLT4gMA0KLWRxc2FtcTAzMTggc2FtZXF1YW50dW0gICBOYU4gICAgLTBFKzMgIC0+IDANCi1kcXNhbXEwMzE5IHNhbWVxdWFudHVtICAgTmFOICAgICAwRS0zICAtPiAwDQotZHFzYW1xMDMyMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMCAgICAgLT4gMA0KLWRxc2FtcTAzMjEgc2FtZXF1YW50dW0gICBOYU4gICAgIDBFKzMgIC0+IDANCi1kcXNhbXEwMzIyIHNhbWVxdWFudHVtICAgTmFOICAgICA3RS0zICAtPiAwDQotZHFzYW1xMDMyMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAgNyAgICAgLT4gMA0KLWRxc2FtcTAzMjQgc2FtZXF1YW50dW0gICBOYU4gICAgIDdFKzMgIC0+IDANCi1kcXNhbXEwMzI1IHNhbWVxdWFudHVtICAgTmFOICAgICBzTmFOICAtPiAxDQotDQotZHFzYW1xMDQxMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLUluZiAgIC0+IDANCi1kcXNhbXEwNDExIHNhbWVxdWFudHVtICAtN0UrMyAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTA0MTIgc2FtZXF1YW50dW0gIC03RSszICAgICBOYU4gICAtPiAwDQotZHFzYW1xMDQxMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTdFKzMgIC0+IDENCi1kcXNhbXEwNDE0IHNhbWVxdWFudHVtICAtN0UrMyAgICAtNyAgICAgLT4gMA0KLWRxc2FtcTA0MTUgc2FtZXF1YW50dW0gIC03RSszICAgIC03RS0zICAtPiAwDQotZHFzYW1xMDQxNiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTBFLTMgIC0+IDANCi1kcXNhbXEwNDE3IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMCAgICAgLT4gMA0KLWRxc2FtcTA0MTggc2FtZXF1YW50dW0gIC03RSszICAgIC0wRSszICAtPiAxDQotZHFzYW1xMDQxOSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDBFLTMgIC0+IDANCi1kcXNhbXEwNDIwIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMCAgICAgLT4gMA0KLWRxc2FtcTA0MjEgc2FtZXF1YW50dW0gIC03RSszICAgICAwRSszICAtPiAxDQotZHFzYW1xMDQyMiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDdFLTMgIC0+IDANCi1kcXNhbXEwNDIzIHNhbWVxdWFudHVtICAtN0UrMyAgICAgNyAgICAgLT4gMA0KLWRxc2FtcTA0MjQgc2FtZXF1YW50dW0gIC03RSszICAgICA3RSszICAtPiAxDQotZHFzYW1xMDQyNSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXEwNTEwIHNhbWVxdWFudHVtICAtNyAgICAgIC1JbmYgICAtPiAwDQotZHFzYW1xMDUxMSBzYW1lcXVhbnR1bSAgLTcgICAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTA1MTIgc2FtZXF1YW50dW0gIC03ICAgICAgIE5hTiAgIC0+IDANCi1kcXNhbXEwNTEzIHNhbWVxdWFudHVtICAtNyAgICAgIC03RSszICAtPiAwDQotZHFzYW1xMDUxNCBzYW1lcXVhbnR1bSAgLTcgICAgICAtNyAgICAgLT4gMQ0KLWRxc2FtcTA1MTUgc2FtZXF1YW50dW0gIC03ICAgICAgLTdFLTMgIC0+IDANCi1kcXNhbXEwNTE2IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRS0zICAtPiAwDQotZHFzYW1xMDUxNyBzYW1lcXVhbnR1bSAgLTcgICAgICAtMCAgICAgLT4gMQ0KLWRxc2FtcTA1MTggc2FtZXF1YW50dW0gIC03ICAgICAgLTBFKzMgIC0+IDANCi1kcXNhbXEwNTE5IHNhbWVxdWFudHVtICAtNyAgICAgICAwRS0zICAtPiAwDQotZHFzYW1xMDUyMCBzYW1lcXVhbnR1bSAgLTcgICAgICAgMCAgICAgLT4gMQ0KLWRxc2FtcTA1MjEgc2FtZXF1YW50dW0gIC03ICAgICAgIDBFKzMgIC0+IDANCi1kcXNhbXEwNTIyIHNhbWVxdWFudHVtICAtNyAgICAgICA3RS0zICAtPiAwDQotZHFzYW1xMDUyMyBzYW1lcXVhbnR1bSAgLTcgICAgICAgNyAgICAgLT4gMQ0KLWRxc2FtcTA1MjQgc2FtZXF1YW50dW0gIC03ICAgICAgIDdFKzMgIC0+IDANCi1kcXNhbXEwNTI1IHNhbWVxdWFudHVtICAtNyAgICAgICBzTmFOICAtPiAwDQotDQotZHFzYW1xMDYxMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLUluZiAgIC0+IDANCi1kcXNhbXEwNjExIHNhbWVxdWFudHVtICAtN0UtMyAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTA2MTIgc2FtZXF1YW50dW0gIC03RS0zICAgICBOYU4gICAtPiAwDQotZHFzYW1xMDYxMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFKzMgIC0+IDANCi1kcXNhbXEwNjE0IHNhbWVxdWFudHVtICAtN0UtMyAgICAtNyAgICAgLT4gMA0KLWRxc2FtcTA2MTUgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RS0zICAtPiAxDQotZHFzYW1xMDYxNiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFLTMgIC0+IDENCi1kcXNhbXEwNjE3IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMCAgICAgLT4gMA0KLWRxc2FtcTA2MTggc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRSszICAtPiAwDQotZHFzYW1xMDYxOSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFLTMgIC0+IDENCi1kcXNhbXEwNjIwIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMCAgICAgLT4gMA0KLWRxc2FtcTA2MjEgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRSszICAtPiAwDQotZHFzYW1xMDYyMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFLTMgIC0+IDENCi1kcXNhbXEwNjIzIHNhbWVxdWFudHVtICAtN0UtMyAgICAgNyAgICAgLT4gMA0KLWRxc2FtcTA2MjQgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RSszICAtPiAwDQotZHFzYW1xMDYyNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXEwNzEwIHNhbWVxdWFudHVtICAtMEUtMyAgICAtSW5mICAgLT4gMA0KLWRxc2FtcTA3MTEgc2FtZXF1YW50dW0gIC0wRS0zICAgICBJbmYgICAtPiAwDQotZHFzYW1xMDcxMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIE5hTiAgIC0+IDANCi1kcXNhbXEwNzEzIHNhbWVxdWFudHVtICAtMEUtMyAgICAtN0UrMyAgLT4gMA0KLWRxc2FtcTA3MTQgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03ICAgICAtPiAwDQotZHFzYW1xMDcxNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFLTMgIC0+IDENCi1kcXNhbXEwNzE2IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMEUtMyAgLT4gMQ0KLWRxc2FtcTA3MTcgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wICAgICAtPiAwDQotZHFzYW1xMDcxOCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFKzMgIC0+IDANCi1kcXNhbXEwNzE5IHNhbWVxdWFudHVtICAtMEUtMyAgICAgMEUtMyAgLT4gMQ0KLWRxc2FtcTA3MjAgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwICAgICAtPiAwDQotZHFzYW1xMDcyMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFKzMgIC0+IDANCi1kcXNhbXEwNzIyIHNhbWVxdWFudHVtICAtMEUtMyAgICAgN0UtMyAgLT4gMQ0KLWRxc2FtcTA3MjMgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3ICAgICAtPiAwDQotZHFzYW1xMDcyNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFKzMgIC0+IDANCi1kcXNhbXEwNzI1IHNhbWVxdWFudHVtICAtMEUtMyAgICAgc05hTiAgLT4gMA0KLQ0KLWRxc2FtcTA4MTAgc2FtZXF1YW50dW0gIC0wICAgICAgLUluZiAgIC0+IDANCi1kcXNhbXEwODExIHNhbWVxdWFudHVtICAtMCAgICAgICBJbmYgICAtPiAwDQotZHFzYW1xMDgxMiBzYW1lcXVhbnR1bSAgLTAgICAgICAgTmFOICAgLT4gMA0KLWRxc2FtcTA4MTMgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFKzMgIC0+IDANCi1kcXNhbXEwODE0IHNhbWVxdWFudHVtICAtMCAgICAgIC03ICAgICAtPiAxDQotZHFzYW1xMDgxNSBzYW1lcXVhbnR1bSAgLTAgICAgICAtN0UtMyAgLT4gMA0KLWRxc2FtcTA4MTYgc2FtZXF1YW50dW0gIC0wICAgICAgLTBFLTMgIC0+IDANCi1kcXNhbXEwODE3IHNhbWVxdWFudHVtICAtMCAgICAgIC0wICAgICAtPiAxDQotZHFzYW1xMDgxOCBzYW1lcXVhbnR1bSAgLTAgICAgICAtMEUrMyAgLT4gMA0KLWRxc2FtcTA4MTkgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFLTMgIC0+IDANCi1kcXNhbXEwODIwIHNhbWVxdWFudHVtICAtMCAgICAgICAwICAgICAtPiAxDQotZHFzYW1xMDgyMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgMEUrMyAgLT4gMA0KLWRxc2FtcTA4MjIgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFLTMgIC0+IDANCi1kcXNhbXEwODIzIHNhbWVxdWFudHVtICAtMCAgICAgICA3ICAgICAtPiAxDQotZHFzYW1xMDgyNCBzYW1lcXVhbnR1bSAgLTAgICAgICAgN0UrMyAgLT4gMA0KLWRxc2FtcTA4MjUgc2FtZXF1YW50dW0gIC0wICAgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXEwOTEwIHNhbWVxdWFudHVtICAtMEUrMyAgICAtSW5mICAgLT4gMA0KLWRxc2FtcTA5MTEgc2FtZXF1YW50dW0gIC0wRSszICAgICBJbmYgICAtPiAwDQotZHFzYW1xMDkxMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIE5hTiAgIC0+IDANCi1kcXNhbXEwOTEzIHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UrMyAgLT4gMQ0KLWRxc2FtcTA5MTQgc2FtZXF1YW50dW0gIC0wRSszICAgIC03ICAgICAtPiAwDQotZHFzYW1xMDkxNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFLTMgIC0+IDANCi1kcXNhbXEwOTE2IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUtMyAgLT4gMA0KLWRxc2FtcTA5MTcgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wICAgICAtPiAwDQotZHFzYW1xMDkxOCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFKzMgIC0+IDENCi1kcXNhbXEwOTE5IHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUtMyAgLT4gMA0KLWRxc2FtcTA5MjAgc2FtZXF1YW50dW0gIC0wRSszICAgICAwICAgICAtPiAwDQotZHFzYW1xMDkyMSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFKzMgIC0+IDENCi1kcXNhbXEwOTIyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UtMyAgLT4gMA0KLWRxc2FtcTA5MjMgc2FtZXF1YW50dW0gIC0wRSszICAgICA3ICAgICAtPiAwDQotZHFzYW1xMDkyNCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFKzMgIC0+IDENCi1kcXNhbXEwOTI1IHNhbWVxdWFudHVtICAtMEUrMyAgICAgc05hTiAgLT4gMA0KLQ0KLWRxc2FtcTExMTAgc2FtZXF1YW50dW0gIDBFLTMgICAgLUluZiAgIC0+IDANCi1kcXNhbXExMTExIHNhbWVxdWFudHVtICAwRS0zICAgICBJbmYgICAtPiAwDQotZHFzYW1xMTExMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgTmFOICAgLT4gMA0KLWRxc2FtcTExMTMgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFKzMgIC0+IDANCi1kcXNhbXExMTE0IHNhbWVxdWFudHVtICAwRS0zICAgIC03ICAgICAtPiAwDQotZHFzYW1xMTExNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UtMyAgLT4gMQ0KLWRxc2FtcTExMTYgc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFLTMgIC0+IDENCi1kcXNhbXExMTE3IHNhbWVxdWFudHVtICAwRS0zICAgIC0wICAgICAtPiAwDQotZHFzYW1xMTExOCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUrMyAgLT4gMA0KLWRxc2FtcTExMTkgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFLTMgIC0+IDENCi1kcXNhbXExMTIwIHNhbWVxdWFudHVtICAwRS0zICAgICAwICAgICAtPiAwDQotZHFzYW1xMTEyMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUrMyAgLT4gMA0KLWRxc2FtcTExMjIgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFLTMgIC0+IDENCi1kcXNhbXExMTIzIHNhbWVxdWFudHVtICAwRS0zICAgICA3ICAgICAtPiAwDQotZHFzYW1xMTEyNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UrMyAgLT4gMA0KLWRxc2FtcTExMjUgc2FtZXF1YW50dW0gIDBFLTMgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXExMjEwIHNhbWVxdWFudHVtICAwICAgICAgIC1JbmYgICAtPiAwDQotZHFzYW1xMTIxMSBzYW1lcXVhbnR1bSAgMCAgICAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTEyMTIgc2FtZXF1YW50dW0gIDAgICAgICAgIE5hTiAgIC0+IDANCi1kcXNhbXExMjEzIHNhbWVxdWFudHVtICAwICAgICAgIC03RSszICAtPiAwDQotZHFzYW1xMTIxNCBzYW1lcXVhbnR1bSAgMCAgICAgICAtNyAgICAgLT4gMQ0KLWRxc2FtcTEyMTUgc2FtZXF1YW50dW0gIDAgICAgICAgLTdFLTMgIC0+IDANCi1kcXNhbXExMjE2IHNhbWVxdWFudHVtICAwICAgICAgIC0wRS0zICAtPiAwDQotZHFzYW1xMTIxNyBzYW1lcXVhbnR1bSAgMCAgICAgICAtMCAgICAgLT4gMQ0KLWRxc2FtcTEyMTggc2FtZXF1YW50dW0gIDAgICAgICAgLTBFKzMgIC0+IDANCi1kcXNhbXExMjE5IHNhbWVxdWFudHVtICAwICAgICAgICAwRS0zICAtPiAwDQotZHFzYW1xMTIyMCBzYW1lcXVhbnR1bSAgMCAgICAgICAgMCAgICAgLT4gMQ0KLWRxc2FtcTEyMjEgc2FtZXF1YW50dW0gIDAgICAgICAgIDBFKzMgIC0+IDANCi1kcXNhbXExMjIyIHNhbWVxdWFudHVtICAwICAgICAgICA3RS0zICAtPiAwDQotZHFzYW1xMTIyMyBzYW1lcXVhbnR1bSAgMCAgICAgICAgNyAgICAgLT4gMQ0KLWRxc2FtcTEyMjQgc2FtZXF1YW50dW0gIDAgICAgICAgIDdFKzMgIC0+IDANCi1kcXNhbXExMjI1IHNhbWVxdWFudHVtICAwICAgICAgICBzTmFOICAtPiAwDQotDQotZHFzYW1xMTMxMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtSW5mICAgLT4gMA0KLWRxc2FtcTEzMTEgc2FtZXF1YW50dW0gIDBFKzMgICAgIEluZiAgIC0+IDANCi1kcXNhbXExMzEyIHNhbWVxdWFudHVtICAwRSszICAgICBOYU4gICAtPiAwDQotZHFzYW1xMTMxMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UrMyAgLT4gMQ0KLWRxc2FtcTEzMTQgc2FtZXF1YW50dW0gIDBFKzMgICAgLTcgICAgIC0+IDANCi1kcXNhbXExMzE1IHNhbWVxdWFudHVtICAwRSszICAgIC03RS0zICAtPiAwDQotZHFzYW1xMTMxNiBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUtMyAgLT4gMA0KLWRxc2FtcTEzMTcgc2FtZXF1YW50dW0gIDBFKzMgICAgLTAgICAgIC0+IDANCi1kcXNhbXExMzE4IHNhbWVxdWFudHVtICAwRSszICAgIC0wRSszICAtPiAxDQotZHFzYW1xMTMxOSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUtMyAgLT4gMA0KLWRxc2FtcTEzMjAgc2FtZXF1YW50dW0gIDBFKzMgICAgIDAgICAgIC0+IDANCi1kcXNhbXExMzIxIHNhbWVxdWFudHVtICAwRSszICAgICAwRSszICAtPiAxDQotZHFzYW1xMTMyMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UtMyAgLT4gMA0KLWRxc2FtcTEzMjMgc2FtZXF1YW50dW0gIDBFKzMgICAgIDcgICAgIC0+IDANCi1kcXNhbXExMzI0IHNhbWVxdWFudHVtICAwRSszICAgICA3RSszICAtPiAxDQotZHFzYW1xMTMyNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgc05hTiAgLT4gMA0KLQ0KLWRxc2FtcTE0MTAgc2FtZXF1YW50dW0gIDdFLTMgICAgLUluZiAgIC0+IDANCi1kcXNhbXExNDExIHNhbWVxdWFudHVtICA3RS0zICAgICBJbmYgICAtPiAwDQotZHFzYW1xMTQxMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgTmFOICAgLT4gMA0KLWRxc2FtcTE0MTMgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFKzMgIC0+IDANCi1kcXNhbXExNDE0IHNhbWVxdWFudHVtICA3RS0zICAgIC03ICAgICAtPiAwDQotZHFzYW1xMTQxNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UtMyAgLT4gMQ0KLWRxc2FtcTE0MTYgc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFLTMgIC0+IDENCi1kcXNhbXExNDE3IHNhbWVxdWFudHVtICA3RS0zICAgIC0wICAgICAtPiAwDQotZHFzYW1xMTQxOCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUrMyAgLT4gMA0KLWRxc2FtcTE0MTkgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFLTMgIC0+IDENCi1kcXNhbXExNDIwIHNhbWVxdWFudHVtICA3RS0zICAgICAwICAgICAtPiAwDQotZHFzYW1xMTQyMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUrMyAgLT4gMA0KLWRxc2FtcTE0MjIgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFLTMgIC0+IDENCi1kcXNhbXExNDIzIHNhbWVxdWFudHVtICA3RS0zICAgICA3ICAgICAtPiAwDQotZHFzYW1xMTQyNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UrMyAgLT4gMA0KLWRxc2FtcTE0MjUgc2FtZXF1YW50dW0gIDdFLTMgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXExNTEwIHNhbWVxdWFudHVtICA3ICAgICAgLUluZiAgIC0+IDANCi1kcXNhbXExNTExIHNhbWVxdWFudHVtICA3ICAgICAgIEluZiAgIC0+IDANCi1kcXNhbXExNTEyIHNhbWVxdWFudHVtICA3ICAgICAgIE5hTiAgIC0+IDANCi1kcXNhbXExNTEzIHNhbWVxdWFudHVtICA3ICAgICAgLTdFKzMgIC0+IDANCi1kcXNhbXExNTE0IHNhbWVxdWFudHVtICA3ICAgICAgLTcgICAgIC0+IDENCi1kcXNhbXExNTE1IHNhbWVxdWFudHVtICA3ICAgICAgLTdFLTMgIC0+IDANCi1kcXNhbXExNTE2IHNhbWVxdWFudHVtICA3ICAgICAgLTBFLTMgIC0+IDANCi1kcXNhbXExNTE3IHNhbWVxdWFudHVtICA3ICAgICAgLTAgICAgIC0+IDENCi1kcXNhbXExNTE4IHNhbWVxdWFudHVtICA3ICAgICAgLTBFKzMgIC0+IDANCi1kcXNhbXExNTE5IHNhbWVxdWFudHVtICA3ICAgICAgIDBFLTMgIC0+IDANCi1kcXNhbXExNTIwIHNhbWVxdWFudHVtICA3ICAgICAgIDAgICAgIC0+IDENCi1kcXNhbXExNTIxIHNhbWVxdWFudHVtICA3ICAgICAgIDBFKzMgIC0+IDANCi1kcXNhbXExNTIyIHNhbWVxdWFudHVtICA3ICAgICAgIDdFLTMgIC0+IDANCi1kcXNhbXExNTIzIHNhbWVxdWFudHVtICA3ICAgICAgIDcgICAgIC0+IDENCi1kcXNhbXExNTI0IHNhbWVxdWFudHVtICA3ICAgICAgIDdFKzMgIC0+IDANCi1kcXNhbXExNTI1IHNhbWVxdWFudHVtICA3ICAgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXExNjEwIHNhbWVxdWFudHVtICA3RSszICAgIC1JbmYgICAtPiAwDQotZHFzYW1xMTYxMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTE2MTIgc2FtZXF1YW50dW0gIDdFKzMgICAgIE5hTiAgIC0+IDANCi1kcXNhbXExNjEzIHNhbWVxdWFudHVtICA3RSszICAgIC03RSszICAtPiAxDQotZHFzYW1xMTYxNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtNyAgICAgLT4gMA0KLWRxc2FtcTE2MTUgc2FtZXF1YW50dW0gIDdFKzMgICAgLTdFLTMgIC0+IDANCi1kcXNhbXExNjE2IHNhbWVxdWFudHVtICA3RSszICAgIC0wRS0zICAtPiAwDQotZHFzYW1xMTYxNyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMCAgICAgLT4gMA0KLWRxc2FtcTE2MTggc2FtZXF1YW50dW0gIDdFKzMgICAgLTBFKzMgIC0+IDENCi1kcXNhbXExNjE5IHNhbWVxdWFudHVtICA3RSszICAgICAwRS0zICAtPiAwDQotZHFzYW1xMTYyMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMCAgICAgLT4gMA0KLWRxc2FtcTE2MjEgc2FtZXF1YW50dW0gIDdFKzMgICAgIDBFKzMgIC0+IDENCi1kcXNhbXExNjIyIHNhbWVxdWFudHVtICA3RSszICAgICA3RS0zICAtPiAwDQotZHFzYW1xMTYyMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAgNyAgICAgLT4gMA0KLWRxc2FtcTE2MjQgc2FtZXF1YW50dW0gIDdFKzMgICAgIDdFKzMgIC0+IDENCi1kcXNhbXExNjI1IHNhbWVxdWFudHVtICA3RSszICAgICBzTmFOICAtPiAwDQotDQotZHFzYW1xMTcxMCBzYW1lcXVhbnR1bSAgc05hTiAgICAtSW5mICAgLT4gMA0KLWRxc2FtcTE3MTEgc2FtZXF1YW50dW0gIHNOYU4gICAgIEluZiAgIC0+IDANCi1kcXNhbXExNzEyIHNhbWVxdWFudHVtICBzTmFOICAgICBOYU4gICAtPiAxDQotZHFzYW1xMTcxMyBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UrMyAgLT4gMA0KLWRxc2FtcTE3MTQgc2FtZXF1YW50dW0gIHNOYU4gICAgLTcgICAgIC0+IDANCi1kcXNhbXExNzE1IHNhbWVxdWFudHVtICBzTmFOICAgIC03RS0zICAtPiAwDQotZHFzYW1xMTcxNiBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUtMyAgLT4gMA0KLWRxc2FtcTE3MTcgc2FtZXF1YW50dW0gIHNOYU4gICAgLTAgICAgIC0+IDANCi1kcXNhbXExNzE4IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRSszICAtPiAwDQotZHFzYW1xMTcxOSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUtMyAgLT4gMA0KLWRxc2FtcTE3MjAgc2FtZXF1YW50dW0gIHNOYU4gICAgIDAgICAgIC0+IDANCi1kcXNhbXExNzIxIHNhbWVxdWFudHVtICBzTmFOICAgICAwRSszICAtPiAwDQotZHFzYW1xMTcyMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UtMyAgLT4gMA0KLWRxc2FtcTE3MjMgc2FtZXF1YW50dW0gIHNOYU4gICAgIDcgICAgIC0+IDANCi1kcXNhbXExNzI0IHNhbWVxdWFudHVtICBzTmFOICAgICA3RSszICAtPiAwDQotZHFzYW1xMTcyNSBzYW1lcXVhbnR1bSAgc05hTiAgICAgc05hTiAgLT4gMQ0KLS0tIG5vaXN5IE5hTnMNCi1kcXNhbXExNzMwIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFOMyAtPiAxDQotZHFzYW1xMTczMSBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjQgLT4gMQ0KLWRxc2FtcTE3MzIgc2FtZXF1YW50dW0gICBOYU4zICAgICBOYU4zIC0+IDENCi1kcXNhbXExNzMzIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFONCAtPiAxDQotZHFzYW1xMTczNCBzYW1lcXVhbnR1bSAgc05hTjMgICAgIDMgICAgLT4gMA0KLWRxc2FtcTE3MzUgc2FtZXF1YW50dW0gICBOYU4zICAgICAzICAgIC0+IDANCi1kcXNhbXExNzM2IHNhbWVxdWFudHVtICAgICAgNCAgICBzTmFONCAtPiAwDQotZHFzYW1xMTczNyBzYW1lcXVhbnR1bSAgICAgIDMgICAgIE5hTjMgLT4gMA0KLWRxc2FtcTE3Mzggc2FtZXF1YW50dW0gICAgSW5mICAgIHNOYU40IC0+IDANCi1kcXNhbXExNzM5IHNhbWVxdWFudHVtICAgLUluZiAgICAgTmFOMyAtPiAwDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVNhbWVRdWFudHVtLmRlY1Rlc3QgLS0gY2hlY2sgZGVjUXVhZCBxdWFudHVtcyBtYXRjaCAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkcXNhbXEwMDEgc2FtZXF1YW50dW0gIDAgICAgICAwICAgICAgLT4gIDEKK2Rxc2FtcTAwMiBzYW1lcXVhbnR1bSAgMCAgICAgIDEgICAgICAtPiAgMQorZHFzYW1xMDAzIHNhbWVxdWFudHVtICAxICAgICAgMCAgICAgIC0+ICAxCitkcXNhbXEwMDQgc2FtZXF1YW50dW0gIDEgICAgICAxICAgICAgLT4gIDEKKworZHFzYW1xMDExIHNhbWVxdWFudHVtICAxMCAgICAgMUUrMSAgIC0+IDAKK2Rxc2FtcTAxMiBzYW1lcXVhbnR1bSAgMTBFKzEgIDEwRSsxICAtPiAxCitkcXNhbXEwMTMgc2FtZXF1YW50dW0gIDEwMCAgICAxMEUrMSAgLT4gMAorZHFzYW1xMDE0IHNhbWVxdWFudHVtICAxMDAgICAgMUUrMiAgIC0+IDAKK2Rxc2FtcTAxNSBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTIgICAtPiAwCitkcXNhbXEwMTYgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0xICAgLT4gMQorZHFzYW1xMDE3IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMCAgIC0+IDAKK2Rxc2FtcTAxOCBzYW1lcXVhbnR1bSAgOTk5ICAgIDk5OSAgICAtPiAxCitkcXNhbXEwMTkgc2FtZXF1YW50dW0gIDk5OUUtMSA5OS45ICAgLT4gMQorZHFzYW1xMDIwIHNhbWVxdWFudHVtICAxMTFFLTEgMjIuMiAgIC0+IDEKK2Rxc2FtcTAyMSBzYW1lcXVhbnR1bSAgMTExRS0xIDEyMzQuMiAtPiAxCisKKy0tIHplcm9zCitkcXNhbXEwMzAgc2FtZXF1YW50dW0gIDAuMCAgICAxLjEgICAgLT4gMQorZHFzYW1xMDMxIHNhbWVxdWFudHVtICAwLjAgICAgMS4xMSAgIC0+IDAKK2Rxc2FtcTAzMiBzYW1lcXVhbnR1bSAgMC4wICAgIDAgICAgICAtPiAwCitkcXNhbXEwMzMgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAgICAgLT4gMQorZHFzYW1xMDM0IHNhbWVxdWFudHVtICAwLjAgICAgMC4wMCAgIC0+IDAKK2Rxc2FtcTAzNSBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzAgICAtPiAwCitkcXNhbXEwMzYgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsxICAgLT4gMQorZHFzYW1xMDM3IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMiAgIC0+IDAKK2Rxc2FtcTAzOCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE2ICAtPiAwCitkcXNhbXEwMzkgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNyAgLT4gMQorZHFzYW1xMDQwIHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTggIC0+IDAKK2Rxc2FtcTA0MSBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTUgLT4gMAorZHFzYW1xMDQyIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNiAtPiAxCitkcXNhbXEwNDMgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE3IC0+IDAKK2Rxc2FtcTA0NCBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTYgLT4gMQorZHFzYW1xMDQ1IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNyAtPiAwCitkcXNhbXEwNDYgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE2IC0+IDEKK2Rxc2FtcTA0NyBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTcgLT4gMAorZHFzYW1xMDQ4IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNiAtPiAxCitkcXNhbXEwNDkgc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE3IC0+IDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rxc2FtcTA1MSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAxCitkcXNhbXEwNTIgc2FtZXF1YW50dW0gIDFFLTYxNDMgICAgICAgICAgICAgMUUtNjE0MyAgICAgICAgICAgLT4gMQorZHFzYW1xMDUzIHNhbWVxdWFudHVtICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IDEKK2Rxc2FtcTA1NCBzYW1lcXVhbnR1bSAgMUUtNjE3NiAgICAgICAgICAgICAxRS02MTc2ICAgICAgICAgICAtPiAxCitkcXNhbXEwNTUgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMQorZHFzYW1xMDU2IHNhbWVxdWFudHVtICAxRS02MTQzICAgICAgICAgICAgIDFFLTYxNDMgICAgICAgICAgIC0+IDEKK2Rxc2FtcTA1NyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAxCitkcXNhbXEwNTggc2FtZXF1YW50dW0gIDFFLTYxNzYgICAgICAgICAgICAgMUUtNjE3NiAgICAgICAgICAgLT4gMQorCitkcXNhbXEwNjEgc2FtZXF1YW50dW0gIC0xRS02MTc2ICAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMQorZHFzYW1xMDYyIHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0+IDEKK2Rxc2FtcTA2MyBzYW1lcXVhbnR1bSAgLTFFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxCitkcXNhbXEwNjQgc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQorZHFzYW1xMDY1IHNhbWVxdWFudHVtICAtMUUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDEKK2Rxc2FtcTA2NiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtPiAxCitkcXNhbXEwNjcgc2FtZXF1YW50dW0gIC0xRS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQorZHFzYW1xMDY4IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKKworZHFzYW1xMDcxIHNhbWVxdWFudHVtICAtNEUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDEKK2Rxc2FtcTA3MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMEUtNjE0MyAtPiAxCitkcXNhbXEwNzMgc2FtZXF1YW50dW0gIC00RS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQorZHFzYW1xMDc0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKK2Rxc2FtcTA3NSBzYW1lcXVhbnR1bSAgLTRFLTYxNzYgICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAxCitkcXNhbXEwNzYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLT4gMQorZHFzYW1xMDc3IHNhbWVxdWFudHVtICAtNEUtNjE0MyAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDEKK2Rxc2FtcTA3OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCisKK2Rxc2FtcTA4MSBzYW1lcXVhbnR1bSAgLTRFLTEwMDYgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDAKK2Rxc2FtcTA4MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjEzNiAtPiAwCitkcXNhbXEwODMgc2FtZXF1YW50dW0gIC00RS02MTQwICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAwCitkcXNhbXEwODQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMzYgLT4gMAorZHFzYW1xMDg1IHNhbWVxdWFudHVtICAtNEUtMTAwNiAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMAorZHFzYW1xMDg2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTM2IC0+IDAKK2Rxc2FtcTA4NyBzYW1lcXVhbnR1bSAgLTRFLTYxMzMgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDAKK2Rxc2FtcTA4OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjEzNiAtPiAwCisKKy0tIHNwZWNpYWxzICYgY29tYmluYXRpb25zCitkcXNhbXEwMTEwIHNhbWVxdWFudHVtICAtSW5mICAgIC1JbmYgICAtPiAxCitkcXNhbXEwMTExIHNhbWVxdWFudHVtICAtSW5mICAgICBJbmYgICAtPiAxCitkcXNhbXEwMTEyIHNhbWVxdWFudHVtICAtSW5mICAgICBOYU4gICAtPiAwCitkcXNhbXEwMTEzIHNhbWVxdWFudHVtICAtSW5mICAgIC03RSszICAtPiAwCitkcXNhbXEwMTE0IHNhbWVxdWFudHVtICAtSW5mICAgIC03ICAgICAtPiAwCitkcXNhbXEwMTE1IHNhbWVxdWFudHVtICAtSW5mICAgIC03RS0zICAtPiAwCitkcXNhbXEwMTE2IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRS0zICAtPiAwCitkcXNhbXEwMTE3IHNhbWVxdWFudHVtICAtSW5mICAgIC0wICAgICAtPiAwCitkcXNhbXEwMTE4IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRSszICAtPiAwCitkcXNhbXEwMTE5IHNhbWVxdWFudHVtICAtSW5mICAgICAwRS0zICAtPiAwCitkcXNhbXEwMTIwIHNhbWVxdWFudHVtICAtSW5mICAgICAwICAgICAtPiAwCitkcXNhbXEwMTIxIHNhbWVxdWFudHVtICAtSW5mICAgICAwRSszICAtPiAwCitkcXNhbXEwMTIyIHNhbWVxdWFudHVtICAtSW5mICAgICA3RS0zICAtPiAwCitkcXNhbXEwMTIzIHNhbWVxdWFudHVtICAtSW5mICAgICA3ICAgICAtPiAwCitkcXNhbXEwMTI0IHNhbWVxdWFudHVtICAtSW5mICAgICA3RSszICAtPiAwCitkcXNhbXEwMTI1IHNhbWVxdWFudHVtICAtSW5mICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTAyMTAgc2FtZXF1YW50dW0gICBJbmYgICAgLUluZiAgIC0+IDEKK2Rxc2FtcTAyMTEgc2FtZXF1YW50dW0gICBJbmYgICAgIEluZiAgIC0+IDEKK2Rxc2FtcTAyMTIgc2FtZXF1YW50dW0gICBJbmYgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTAyMTMgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTAyMTQgc2FtZXF1YW50dW0gICBJbmYgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTAyMTUgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTAyMTYgc2FtZXF1YW50dW0gICBJbmYgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTAyMTcgc2FtZXF1YW50dW0gICBJbmYgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTAyMTggc2FtZXF1YW50dW0gICBJbmYgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTAyMTkgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTAyMjAgc2FtZXF1YW50dW0gICBJbmYgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTAyMjEgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTAyMjIgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTAyMjMgc2FtZXF1YW50dW0gICBJbmYgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTAyMjQgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTAyMjUgc2FtZXF1YW50dW0gICBJbmYgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMDMxMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtSW5mICAgLT4gMAorZHFzYW1xMDMxMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgSW5mICAgLT4gMAorZHFzYW1xMDMxMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgTmFOICAgLT4gMQorZHFzYW1xMDMxMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UrMyAgLT4gMAorZHFzYW1xMDMxNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtNyAgICAgLT4gMAorZHFzYW1xMDMxNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UtMyAgLT4gMAorZHFzYW1xMDMxNiBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUtMyAgLT4gMAorZHFzYW1xMDMxNyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMCAgICAgLT4gMAorZHFzYW1xMDMxOCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUrMyAgLT4gMAorZHFzYW1xMDMxOSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUtMyAgLT4gMAorZHFzYW1xMDMyMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMCAgICAgLT4gMAorZHFzYW1xMDMyMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUrMyAgLT4gMAorZHFzYW1xMDMyMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UtMyAgLT4gMAorZHFzYW1xMDMyMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAgNyAgICAgLT4gMAorZHFzYW1xMDMyNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UrMyAgLT4gMAorZHFzYW1xMDMyNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgc05hTiAgLT4gMQorCitkcXNhbXEwNDEwIHNhbWVxdWFudHVtICAtN0UrMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMDQxMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTA0MTIgc2FtZXF1YW50dW0gIC03RSszICAgICBOYU4gICAtPiAwCitkcXNhbXEwNDEzIHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UrMyAgLT4gMQorZHFzYW1xMDQxNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTA0MTUgc2FtZXF1YW50dW0gIC03RSszICAgIC03RS0zICAtPiAwCitkcXNhbXEwNDE2IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUtMyAgLT4gMAorZHFzYW1xMDQxNyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTA0MTggc2FtZXF1YW50dW0gIC03RSszICAgIC0wRSszICAtPiAxCitkcXNhbXEwNDE5IHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUtMyAgLT4gMAorZHFzYW1xMDQyMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTA0MjEgc2FtZXF1YW50dW0gIC03RSszICAgICAwRSszICAtPiAxCitkcXNhbXEwNDIyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UtMyAgLT4gMAorZHFzYW1xMDQyMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTA0MjQgc2FtZXF1YW50dW0gIC03RSszICAgICA3RSszICAtPiAxCitkcXNhbXEwNDI1IHNhbWVxdWFudHVtICAtN0UrMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXEwNTEwIHNhbWVxdWFudHVtICAtNyAgICAgIC1JbmYgICAtPiAwCitkcXNhbXEwNTExIHNhbWVxdWFudHVtICAtNyAgICAgICBJbmYgICAtPiAwCitkcXNhbXEwNTEyIHNhbWVxdWFudHVtICAtNyAgICAgICBOYU4gICAtPiAwCitkcXNhbXEwNTEzIHNhbWVxdWFudHVtICAtNyAgICAgIC03RSszICAtPiAwCitkcXNhbXEwNTE0IHNhbWVxdWFudHVtICAtNyAgICAgIC03ICAgICAtPiAxCitkcXNhbXEwNTE1IHNhbWVxdWFudHVtICAtNyAgICAgIC03RS0zICAtPiAwCitkcXNhbXEwNTE2IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRS0zICAtPiAwCitkcXNhbXEwNTE3IHNhbWVxdWFudHVtICAtNyAgICAgIC0wICAgICAtPiAxCitkcXNhbXEwNTE4IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRSszICAtPiAwCitkcXNhbXEwNTE5IHNhbWVxdWFudHVtICAtNyAgICAgICAwRS0zICAtPiAwCitkcXNhbXEwNTIwIHNhbWVxdWFudHVtICAtNyAgICAgICAwICAgICAtPiAxCitkcXNhbXEwNTIxIHNhbWVxdWFudHVtICAtNyAgICAgICAwRSszICAtPiAwCitkcXNhbXEwNTIyIHNhbWVxdWFudHVtICAtNyAgICAgICA3RS0zICAtPiAwCitkcXNhbXEwNTIzIHNhbWVxdWFudHVtICAtNyAgICAgICA3ICAgICAtPiAxCitkcXNhbXEwNTI0IHNhbWVxdWFudHVtICAtNyAgICAgICA3RSszICAtPiAwCitkcXNhbXEwNTI1IHNhbWVxdWFudHVtICAtNyAgICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTA2MTAgc2FtZXF1YW50dW0gIC03RS0zICAgIC1JbmYgICAtPiAwCitkcXNhbXEwNjExIHNhbWVxdWFudHVtICAtN0UtMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMDYxMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTA2MTMgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RSszICAtPiAwCitkcXNhbXEwNjE0IHNhbWVxdWFudHVtICAtN0UtMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMDYxNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFLTMgIC0+IDEKK2Rxc2FtcTA2MTYgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRS0zICAtPiAxCitkcXNhbXEwNjE3IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMDYxOCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTA2MTkgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRS0zICAtPiAxCitkcXNhbXEwNjIwIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMDYyMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTA2MjIgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RS0zICAtPiAxCitkcXNhbXEwNjIzIHNhbWVxdWFudHVtICAtN0UtMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMDYyNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTA2MjUgc2FtZXF1YW50dW0gIC03RS0zICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTA3MTAgc2FtZXF1YW50dW0gIC0wRS0zICAgIC1JbmYgICAtPiAwCitkcXNhbXEwNzExIHNhbWVxdWFudHVtICAtMEUtMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMDcxMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTA3MTMgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RSszICAtPiAwCitkcXNhbXEwNzE0IHNhbWVxdWFudHVtICAtMEUtMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMDcxNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFLTMgIC0+IDEKK2Rxc2FtcTA3MTYgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRS0zICAtPiAxCitkcXNhbXEwNzE3IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMDcxOCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTA3MTkgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRS0zICAtPiAxCitkcXNhbXEwNzIwIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMDcyMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTA3MjIgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RS0zICAtPiAxCitkcXNhbXEwNzIzIHNhbWVxdWFudHVtICAtMEUtMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMDcyNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTA3MjUgc2FtZXF1YW50dW0gIC0wRS0zICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTA4MTAgc2FtZXF1YW50dW0gIC0wICAgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTA4MTEgc2FtZXF1YW50dW0gIC0wICAgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTA4MTIgc2FtZXF1YW50dW0gIC0wICAgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTA4MTMgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTA4MTQgc2FtZXF1YW50dW0gIC0wICAgICAgLTcgICAgIC0+IDEKK2Rxc2FtcTA4MTUgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTA4MTYgc2FtZXF1YW50dW0gIC0wICAgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTA4MTcgc2FtZXF1YW50dW0gIC0wICAgICAgLTAgICAgIC0+IDEKK2Rxc2FtcTA4MTggc2FtZXF1YW50dW0gIC0wICAgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTA4MTkgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTA4MjAgc2FtZXF1YW50dW0gIC0wICAgICAgIDAgICAgIC0+IDEKK2Rxc2FtcTA4MjEgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTA4MjIgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTA4MjMgc2FtZXF1YW50dW0gIC0wICAgICAgIDcgICAgIC0+IDEKK2Rxc2FtcTA4MjQgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTA4MjUgc2FtZXF1YW50dW0gIC0wICAgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMDkxMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTA5MTEgc2FtZXF1YW50dW0gIC0wRSszICAgICBJbmYgICAtPiAwCitkcXNhbXEwOTEyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMDkxMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFKzMgIC0+IDEKK2Rxc2FtcTA5MTQgc2FtZXF1YW50dW0gIC0wRSszICAgIC03ICAgICAtPiAwCitkcXNhbXEwOTE1IHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UtMyAgLT4gMAorZHFzYW1xMDkxNiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTA5MTcgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wICAgICAtPiAwCitkcXNhbXEwOTE4IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUrMyAgLT4gMQorZHFzYW1xMDkxOSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTA5MjAgc2FtZXF1YW50dW0gIC0wRSszICAgICAwICAgICAtPiAwCitkcXNhbXEwOTIxIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUrMyAgLT4gMQorZHFzYW1xMDkyMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTA5MjMgc2FtZXF1YW50dW0gIC0wRSszICAgICA3ICAgICAtPiAwCitkcXNhbXEwOTI0IHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UrMyAgLT4gMQorZHFzYW1xMDkyNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMTExMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMTExMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMTExMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMTExMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UrMyAgLT4gMAorZHFzYW1xMTExNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMTExNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UtMyAgLT4gMQorZHFzYW1xMTExNiBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUtMyAgLT4gMQorZHFzYW1xMTExNyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMTExOCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUrMyAgLT4gMAorZHFzYW1xMTExOSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUtMyAgLT4gMQorZHFzYW1xMTEyMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMTEyMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUrMyAgLT4gMAorZHFzYW1xMTEyMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UtMyAgLT4gMQorZHFzYW1xMTEyMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMTEyNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UrMyAgLT4gMAorZHFzYW1xMTEyNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXExMjEwIHNhbWVxdWFudHVtICAwICAgICAgIC1JbmYgICAtPiAwCitkcXNhbXExMjExIHNhbWVxdWFudHVtICAwICAgICAgICBJbmYgICAtPiAwCitkcXNhbXExMjEyIHNhbWVxdWFudHVtICAwICAgICAgICBOYU4gICAtPiAwCitkcXNhbXExMjEzIHNhbWVxdWFudHVtICAwICAgICAgIC03RSszICAtPiAwCitkcXNhbXExMjE0IHNhbWVxdWFudHVtICAwICAgICAgIC03ICAgICAtPiAxCitkcXNhbXExMjE1IHNhbWVxdWFudHVtICAwICAgICAgIC03RS0zICAtPiAwCitkcXNhbXExMjE2IHNhbWVxdWFudHVtICAwICAgICAgIC0wRS0zICAtPiAwCitkcXNhbXExMjE3IHNhbWVxdWFudHVtICAwICAgICAgIC0wICAgICAtPiAxCitkcXNhbXExMjE4IHNhbWVxdWFudHVtICAwICAgICAgIC0wRSszICAtPiAwCitkcXNhbXExMjE5IHNhbWVxdWFudHVtICAwICAgICAgICAwRS0zICAtPiAwCitkcXNhbXExMjIwIHNhbWVxdWFudHVtICAwICAgICAgICAwICAgICAtPiAxCitkcXNhbXExMjIxIHNhbWVxdWFudHVtICAwICAgICAgICAwRSszICAtPiAwCitkcXNhbXExMjIyIHNhbWVxdWFudHVtICAwICAgICAgICA3RS0zICAtPiAwCitkcXNhbXExMjIzIHNhbWVxdWFudHVtICAwICAgICAgICA3ICAgICAtPiAxCitkcXNhbXExMjI0IHNhbWVxdWFudHVtICAwICAgICAgICA3RSszICAtPiAwCitkcXNhbXExMjI1IHNhbWVxdWFudHVtICAwICAgICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTEzMTAgc2FtZXF1YW50dW0gIDBFKzMgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTEzMTEgc2FtZXF1YW50dW0gIDBFKzMgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTEzMTIgc2FtZXF1YW50dW0gIDBFKzMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTEzMTMgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFKzMgIC0+IDEKK2Rxc2FtcTEzMTQgc2FtZXF1YW50dW0gIDBFKzMgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTEzMTUgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTEzMTYgc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTEzMTcgc2FtZXF1YW50dW0gIDBFKzMgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTEzMTggc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFKzMgIC0+IDEKK2Rxc2FtcTEzMTkgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTEzMjAgc2FtZXF1YW50dW0gIDBFKzMgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTEzMjEgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFKzMgIC0+IDEKK2Rxc2FtcTEzMjIgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTEzMjMgc2FtZXF1YW50dW0gIDBFKzMgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTEzMjQgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFKzMgIC0+IDEKK2Rxc2FtcTEzMjUgc2FtZXF1YW50dW0gIDBFKzMgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMTQxMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMTQxMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMTQxMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMTQxMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UrMyAgLT4gMAorZHFzYW1xMTQxNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMTQxNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UtMyAgLT4gMQorZHFzYW1xMTQxNiBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUtMyAgLT4gMQorZHFzYW1xMTQxNyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMTQxOCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUrMyAgLT4gMAorZHFzYW1xMTQxOSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUtMyAgLT4gMQorZHFzYW1xMTQyMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMTQyMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUrMyAgLT4gMAorZHFzYW1xMTQyMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UtMyAgLT4gMQorZHFzYW1xMTQyMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMTQyNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UrMyAgLT4gMAorZHFzYW1xMTQyNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXExNTEwIHNhbWVxdWFudHVtICA3ICAgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTE1MTEgc2FtZXF1YW50dW0gIDcgICAgICAgSW5mICAgLT4gMAorZHFzYW1xMTUxMiBzYW1lcXVhbnR1bSAgNyAgICAgICBOYU4gICAtPiAwCitkcXNhbXExNTEzIHNhbWVxdWFudHVtICA3ICAgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTE1MTQgc2FtZXF1YW50dW0gIDcgICAgICAtNyAgICAgLT4gMQorZHFzYW1xMTUxNSBzYW1lcXVhbnR1bSAgNyAgICAgIC03RS0zICAtPiAwCitkcXNhbXExNTE2IHNhbWVxdWFudHVtICA3ICAgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTE1MTcgc2FtZXF1YW50dW0gIDcgICAgICAtMCAgICAgLT4gMQorZHFzYW1xMTUxOCBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRSszICAtPiAwCitkcXNhbXExNTE5IHNhbWVxdWFudHVtICA3ICAgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTE1MjAgc2FtZXF1YW50dW0gIDcgICAgICAgMCAgICAgLT4gMQorZHFzYW1xMTUyMSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRSszICAtPiAwCitkcXNhbXExNTIyIHNhbWVxdWFudHVtICA3ICAgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTE1MjMgc2FtZXF1YW50dW0gIDcgICAgICAgNyAgICAgLT4gMQorZHFzYW1xMTUyNCBzYW1lcXVhbnR1bSAgNyAgICAgICA3RSszICAtPiAwCitkcXNhbXExNTI1IHNhbWVxdWFudHVtICA3ICAgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMTYxMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMTYxMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMTYxMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMTYxMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UrMyAgLT4gMQorZHFzYW1xMTYxNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMTYxNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UtMyAgLT4gMAorZHFzYW1xMTYxNiBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUtMyAgLT4gMAorZHFzYW1xMTYxNyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMTYxOCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUrMyAgLT4gMQorZHFzYW1xMTYxOSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUtMyAgLT4gMAorZHFzYW1xMTYyMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMTYyMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUrMyAgLT4gMQorZHFzYW1xMTYyMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UtMyAgLT4gMAorZHFzYW1xMTYyMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMTYyNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UrMyAgLT4gMQorZHFzYW1xMTYyNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXExNzEwIHNhbWVxdWFudHVtICBzTmFOICAgIC1JbmYgICAtPiAwCitkcXNhbXExNzExIHNhbWVxdWFudHVtICBzTmFOICAgICBJbmYgICAtPiAwCitkcXNhbXExNzEyIHNhbWVxdWFudHVtICBzTmFOICAgICBOYU4gICAtPiAxCitkcXNhbXExNzEzIHNhbWVxdWFudHVtICBzTmFOICAgIC03RSszICAtPiAwCitkcXNhbXExNzE0IHNhbWVxdWFudHVtICBzTmFOICAgIC03ICAgICAtPiAwCitkcXNhbXExNzE1IHNhbWVxdWFudHVtICBzTmFOICAgIC03RS0zICAtPiAwCitkcXNhbXExNzE2IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRS0zICAtPiAwCitkcXNhbXExNzE3IHNhbWVxdWFudHVtICBzTmFOICAgIC0wICAgICAtPiAwCitkcXNhbXExNzE4IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRSszICAtPiAwCitkcXNhbXExNzE5IHNhbWVxdWFudHVtICBzTmFOICAgICAwRS0zICAtPiAwCitkcXNhbXExNzIwIHNhbWVxdWFudHVtICBzTmFOICAgICAwICAgICAtPiAwCitkcXNhbXExNzIxIHNhbWVxdWFudHVtICBzTmFOICAgICAwRSszICAtPiAwCitkcXNhbXExNzIyIHNhbWVxdWFudHVtICBzTmFOICAgICA3RS0zICAtPiAwCitkcXNhbXExNzIzIHNhbWVxdWFudHVtICBzTmFOICAgICA3ICAgICAtPiAwCitkcXNhbXExNzI0IHNhbWVxdWFudHVtICBzTmFOICAgICA3RSszICAtPiAwCitkcXNhbXExNzI1IHNhbWVxdWFudHVtICBzTmFOICAgICBzTmFOICAtPiAxCistLSBub2lzeSBOYU5zCitkcXNhbXExNzMwIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFOMyAtPiAxCitkcXNhbXExNzMxIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFONCAtPiAxCitkcXNhbXExNzMyIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFOMyAtPiAxCitkcXNhbXExNzMzIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFONCAtPiAxCitkcXNhbXExNzM0IHNhbWVxdWFudHVtICBzTmFOMyAgICAgMyAgICAtPiAwCitkcXNhbXExNzM1IHNhbWVxdWFudHVtICAgTmFOMyAgICAgMyAgICAtPiAwCitkcXNhbXExNzM2IHNhbWVxdWFudHVtICAgICAgNCAgICBzTmFONCAtPiAwCitkcXNhbXExNzM3IHNhbWVxdWFudHVtICAgICAgMyAgICAgTmFOMyAtPiAwCitkcXNhbXExNzM4IHNhbWVxdWFudHVtICAgIEluZiAgICBzTmFONCAtPiAwCitkcXNhbXExNzM5IHNhbWVxdWFudHVtICAgLUluZiAgICAgTmFOMyAtPiAwCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNjYWxlQi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2NhbGVCLmRlY1Rlc3QKaW5kZXggMDFlMTE5MS4uMDQ1ZGM1OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2NhbGVCLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2NhbGVCLmRlY1Rlc3QKQEAgLTEsMjYwICsxLDI2MCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFTY2FsZWJCLmRlY1Rlc3QgLS0gc2NhbGUgYSBkZWNRdWFkIGJ5IHBvd2VycyBvZiAxMCAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBNYXggfHJoc3wgaXMgMiooNjE0NCszNCkgPSAxMjM1Ng0KLQ0KLS0tIFNhbml0eSBjaGVja3MNCi1kcXNjYjAwMSBzY2FsZWIgICAgICAgNy41MCAgIDEwIC0+IDcuNTBFKzEwDQotZHFzY2IwMDIgc2NhbGViICAgICAgIDcuNTAgICAgMyAtPiA3LjUwRSszDQotZHFzY2IwMDMgc2NhbGViICAgICAgIDcuNTAgICAgMiAtPiA3NTANCi1kcXNjYjAwNCBzY2FsZWIgICAgICAgNy41MCAgICAxIC0+IDc1LjANCi1kcXNjYjAwNSBzY2FsZWIgICAgICAgNy41MCAgICAwIC0+IDcuNTANCi1kcXNjYjAwNiBzY2FsZWIgICAgICAgNy41MCAgIC0xIC0+IDAuNzUwDQotZHFzY2IwMDcgc2NhbGViICAgICAgIDcuNTAgICAtMiAtPiAwLjA3NTANCi1kcXNjYjAwOCBzY2FsZWIgICAgICAgNy41MCAgLTEwIC0+IDcuNTBFLTEwDQotZHFzY2IwMDkgc2NhbGViICAgICAgLTcuNTAgICAgMyAtPiAtNy41MEUrMw0KLWRxc2NiMDEwIHNjYWxlYiAgICAgIC03LjUwICAgIDIgLT4gLTc1MA0KLWRxc2NiMDExIHNjYWxlYiAgICAgIC03LjUwICAgIDEgLT4gLTc1LjANCi1kcXNjYjAxMiBzY2FsZWIgICAgICAtNy41MCAgICAwIC0+IC03LjUwDQotZHFzY2IwMTMgc2NhbGViICAgICAgLTcuNTAgICAtMSAtPiAtMC43NTANCi0NCi0tLSBJbmZpbml0aWVzDQotZHFzY2IwMTQgc2NhbGViICBJbmZpbml0eSAgIDEgLT4gSW5maW5pdHkNCi1kcXNjYjAxNSBzY2FsZWIgIC1JbmZpbml0eSAgMiAtPiAtSW5maW5pdHkNCi1kcXNjYjAxNiBzY2FsZWIgIEluZmluaXR5ICAtMSAtPiBJbmZpbml0eQ0KLWRxc2NiMDE3IHNjYWxlYiAgLUluZmluaXR5IC0yIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE5leHQgdHdvIGFyZSBzb21ld2hhdCB1bmRlZmluZWQgaW4gNzU0cjsgdHJlYXQgYXMgbm9uLWludGVnZXINCi1kcXNjYjAxOCBzY2FsZWIgIDEwICBJbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjAxOSBzY2FsZWIgIDEwIC1JbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOYU5zIGFyZSB1bmRlZmluZWQgaW4gNzU0cjsgYXNzdW1lIHVzdWFsIHByb2Nlc3NpbmcNCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kcXNjYjAyMSBzY2FsZWIgICAgICAgICBOYU4gIDEgLT4gTmFODQotZHFzY2IwMjIgc2NhbGViICAgICAgICAtTmFOIC0xIC0+IC1OYU4NCi1kcXNjYjAyMyBzY2FsZWIgICAgICAgIHNOYU4gIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwMjQgc2NhbGViICAgICAgIC1zTmFOICAxIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjAyNSBzY2FsZWIgICAgNCAgICBOYU4gICAgLT4gTmFODQotZHFzY2IwMjYgc2NhbGViIC1JbmYgICAtTmFOICAgIC0+IC1OYU4NCi1kcXNjYjAyNyBzY2FsZWIgICAgNCAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwMjggc2NhbGViICBJbmYgIC1zTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBub24taW50ZWdlciBSSFMNCi1kcXNjYjAzMCBzY2FsZWIgIDEuMjMgICAgMSAgICAtPiAgMTIuMw0KLWRxc2NiMDMxIHNjYWxlYiAgMS4yMyAgICAxLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjAzMiBzY2FsZWIgIDEuMjMgICAgMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwMzMgc2NhbGViICAxLjIzICAgIDEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDM0IHNjYWxlYiAgMS4yMyAgICAwLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjAzNSBzY2FsZWIgIDEuMjMgICAgMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwMzYgc2NhbGViICAxLjIzICAgIDAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjAzNyBzY2FsZWIgIDEuMjMgICAtMSAgICAtPiAgMC4xMjMNCi1kcXNjYjA2MTQgc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDM5IHNjYWxlYiAgMS4yMyAgIC0xLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjA0MCBzY2FsZWIgIDEuMjMgICAtMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDQyIHNjYWxlYiAgMS4yMyAgIC0wLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjA0MyBzY2FsZWIgIDEuMjMgICAtMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwNDUgc2NhbGViICAxLjIzICAgIDFFKzEgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjA0NiBzY2FsZWIgIDEuMjMgICAgMS4xMjM0RSs2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb3V0LW9mIHJhbmdlIFJIUw0KLWRxc2NiMTIwIHNjYWxlYiAgMS4yMyAgICAxMjM1NSAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFzY2IxMjEgc2NhbGViICAxLjIzICAgIDEyMzU2ICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcXNjYjEyMiBzY2FsZWIgIDEuMjMgICAgMTIzNTcgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMTIzIHNjYWxlYiAgMS4yMyAgICAxMjM1OCAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IxMjQgc2NhbGViICAxLjIzICAgLTEyMzU1ICAgICAgIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcXNjYjEyNSBzY2FsZWIgIDEuMjMgICAtMTIzNTYgICAgICAgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxc2NiMTI2IHNjYWxlYiAgMS4yMyAgIC0xMjM1NyAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IxMjcgc2NhbGViICAxLjIzICAgLTEyMzU4ICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxc2NiODYxIHNjYWxlYiAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQ0KLWRxc2NiODYyIHNjYWxlYiAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMg0KLWRxc2NiODYzIHNjYWxlYiAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMw0KLWRxc2NiODY0IHNjYWxlYiAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONA0KLWRxc2NiODY1IHNjYWxlYiAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQ0KLWRxc2NiODY2IHNjYWxlYiAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzENCi1kcXNjYjg2NyBzY2FsZWIgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxDQotZHFzY2I4Njggc2NhbGViICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQ0KLWRxc2NiODY5IHNjYWxlYiAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxDQotZHFzY2I4NzEgc2NhbGViICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjg3MiBzY2FsZWIgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiODczIHNjYWxlYiAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2I4NzQgc2NhbGViICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjg3NSBzY2FsZWIgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiODc2IHNjYWxlYiAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2I4Nzcgc2NhbGViIC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjg3OCBzY2FsZWIgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiODc5IHNjYWxlYiAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2I4ODAgc2NhbGViICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjg4MSBzY2FsZWIgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIGZpbml0ZXMNCi1kcXNjYjA1MSBzY2FsZWIgICAgICAgICAgNyAgIC0yICAtPiAwLjA3DQotZHFzY2IwNTIgc2NhbGViICAgICAgICAgLTcgICAtMiAgLT4gLTAuMDcNCi1kcXNjYjA1MyBzY2FsZWIgICAgICAgICA3NSAgIC0yICAtPiAwLjc1DQotZHFzY2IwNTQgc2NhbGViICAgICAgICAtNzUgICAtMiAgLT4gLTAuNzUNCi1kcXNjYjA1NSBzY2FsZWIgICAgICAgNy41MCAgIC0yICAtPiAwLjA3NTANCi1kcXNjYjA1NiBzY2FsZWIgICAgICAtNy41MCAgIC0yICAtPiAtMC4wNzUwDQotZHFzY2IwNTcgc2NhbGViICAgICAgIDcuNTAwICAtMiAgLT4gMC4wNzUwMA0KLWRxc2NiMDU4IHNjYWxlYiAgICAgIC03LjUwMCAgLTIgIC0+IC0wLjA3NTAwDQotZHFzY2IwNjEgc2NhbGViICAgICAgICAgIDcgICAtMSAgLT4gMC43DQotZHFzY2IwNjIgc2NhbGViICAgICAgICAgLTcgICAtMSAgLT4gLTAuNw0KLWRxc2NiMDYzIHNjYWxlYiAgICAgICAgIDc1ICAgLTEgIC0+IDcuNQ0KLWRxc2NiMDY0IHNjYWxlYiAgICAgICAgLTc1ICAgLTEgIC0+IC03LjUNCi1kcXNjYjA2NSBzY2FsZWIgICAgICAgNy41MCAgIC0xICAtPiAwLjc1MA0KLWRxc2NiMDY2IHNjYWxlYiAgICAgIC03LjUwICAgLTEgIC0+IC0wLjc1MA0KLWRxc2NiMDY3IHNjYWxlYiAgICAgICA3LjUwMCAgLTEgIC0+IDAuNzUwMA0KLWRxc2NiMDY4IHNjYWxlYiAgICAgIC03LjUwMCAgLTEgIC0+IC0wLjc1MDANCi1kcXNjYjA3MSBzY2FsZWIgICAgICAgICAgNyAgICAwICAtPiA3DQotZHFzY2IwNzIgc2NhbGViICAgICAgICAgLTcgICAgMCAgLT4gLTcNCi1kcXNjYjA3MyBzY2FsZWIgICAgICAgICA3NSAgICAwICAtPiA3NQ0KLWRxc2NiMDc0IHNjYWxlYiAgICAgICAgLTc1ICAgIDAgIC0+IC03NQ0KLWRxc2NiMDc1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgIC0+IDcuNTANCi1kcXNjYjA3NiBzY2FsZWIgICAgICAtNy41MCAgICAwICAtPiAtNy41MA0KLWRxc2NiMDc3IHNjYWxlYiAgICAgICA3LjUwMCAgIDAgIC0+IDcuNTAwDQotZHFzY2IwNzggc2NhbGViICAgICAgLTcuNTAwICAgMCAgLT4gLTcuNTAwDQotZHFzY2IwODEgc2NhbGViICAgICAgICAgIDcgICAgMSAgLT4gN0UrMQ0KLWRxc2NiMDgyIHNjYWxlYiAgICAgICAgIC03ICAgIDEgIC0+IC03RSsxDQotZHFzY2IwODMgc2NhbGViICAgICAgICAgNzUgICAgMSAgLT4gNy41RSsyDQotZHFzY2IwODQgc2NhbGViICAgICAgICAtNzUgICAgMSAgLT4gLTcuNUUrMg0KLWRxc2NiMDg1IHNjYWxlYiAgICAgICA3LjUwICAgIDEgIC0+IDc1LjANCi1kcXNjYjA4NiBzY2FsZWIgICAgICAtNy41MCAgICAxICAtPiAtNzUuMA0KLWRxc2NiMDg3IHNjYWxlYiAgICAgICA3LjUwMCAgIDEgIC0+IDc1LjAwDQotZHFzY2IwODggc2NhbGViICAgICAgLTcuNTAwICAgMSAgLT4gLTc1LjAwDQotZHFzY2IwOTEgc2NhbGViICAgICAgICAgIDcgICAgMiAgLT4gN0UrMg0KLWRxc2NiMDkyIHNjYWxlYiAgICAgICAgIC03ICAgIDIgIC0+IC03RSsyDQotZHFzY2IwOTMgc2NhbGViICAgICAgICAgNzUgICAgMiAgLT4gNy41RSszDQotZHFzY2IwOTQgc2NhbGViICAgICAgICAtNzUgICAgMiAgLT4gLTcuNUUrMw0KLWRxc2NiMDk1IHNjYWxlYiAgICAgICA3LjUwICAgIDIgIC0+IDc1MA0KLWRxc2NiMDk2IHNjYWxlYiAgICAgIC03LjUwICAgIDIgIC0+IC03NTANCi1kcXNjYjA5NyBzY2FsZWIgICAgICAgNy41MDAgICAyICAtPiA3NTAuMA0KLWRxc2NiMDk4IHNjYWxlYiAgICAgIC03LjUwMCAgIDIgIC0+IC03NTAuMA0KLQ0KLS0tIHplcm9zDQotZHFzY2IxMTEgc2NhbGViICAgICAgICAgIDAgIDEgLT4gMEUrMQ0KLWRxc2NiMTEyIHNjYWxlYiAgICAgICAgIC0wICAyIC0+IC0wRSsyDQotZHFzY2IxMTMgc2NhbGViICAgICAgIDBFKzQgIDMgLT4gMEUrNw0KLWRxc2NiMTE0IHNjYWxlYiAgICAgIC0wRSs0ICA0IC0+IC0wRSs4DQotZHFzY2IxMTUgc2NhbGViICAgICAwLjAwMDAgIDUgLT4gMEUrMQ0KLWRxc2NiMTE2IHNjYWxlYiAgICAtMC4wMDAwICA2IC0+IC0wRSsyDQotZHFzY2IxMTcgc2NhbGViICAgICAgMEUtMTQxIDcgLT4gMEUtMTM0DQotZHFzY2IxMTggc2NhbGViICAgICAtMEUtMTQxIDggLT4gLTBFLTEzMw0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZHFzY2IxMzIgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgKzYxNDQgLT4gSW5maW5pdHkgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFzY2IxMzMgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgKzEwIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcXNjYjEzNCBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxc2NiMTM1IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxc2NiMTM2IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0Mw0KLWRxc2NiMTM3IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgKzEgIC0+IDFFLTYxNDINCi1kcXNjYjE2MTQgc2NhbGViICAxRS02MTQzICAgICAgICAgICAtMCAgLT4gMUUtNjE0Mw0KLWRxc2NiMTM5IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgLTEgIC0+IDFFLTYxNDQgICAgICAgICAgU3Vibm9ybWFsDQotZHFzY2IxNDAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgKzEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQyDQotZHFzY2IxNDEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFzY2IxNDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjE0MyBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgKzEgIC0+IDFFLTYxNzUgICAgICAgICBTdWJub3JtYWwNCi1kcXNjYjE0NCBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgLTAgIC0+IDFFLTYxNzYgICAgICAgICBTdWJub3JtYWwNCi1kcXNjYjE0NSBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgLTEgIC0+IDBFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotZHFzY2IxNTAgc2NhbGViICAtMUUtNjE3NiAgICAgICAgICsxICAtPiAtMUUtNjE3NSAgICAgICAgU3Vibm9ybWFsDQotZHFzY2IxNTEgc2NhbGViICAtMUUtNjE3NiAgICAgICAgIC0wICAtPiAtMUUtNjE3NiAgICAgICAgU3Vibm9ybWFsDQotZHFzY2IxNTIgc2NhbGViICAtMUUtNjE3NiAgICAgICAgIC0xICAtPiAtMEUtNjE3NiAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxc2NiMTUzIHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICsxICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDINCi1kcXNjYjE1NCBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyArMCAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFzY2IxNTUgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IxNTYgc2NhbGViICAtMUUtNjE0MyAgICAgICAgICArMSAgLT4gLTFFLTYxNDINCi1kcXNjYjE1NyBzY2FsZWIgIC0xRS02MTQzICAgICAgICAgIC0wICAtPiAtMUUtNjE0Mw0KLWRxc2NiMTU4IHNjYWxlYiAgLTFFLTYxNDMgICAgICAgICAgLTEgIC0+IC0xRS02MTQ0ICAgICAgICAgIFN1Ym5vcm1hbA0KLWRxc2NiMTU5IHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxc2NiMTYwIHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICswICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcXNjYjE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQzDQotZHFzY2IxNjIgc2NhbGViICAtOUUrNjE0NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcXNjYjE2MyBzY2FsZWIgIC0xRSs2MTQ0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNvbWUgT3JpZ2FtaQ0KLS0tICh0aGVzZSBjaGVjayB0aGF0IG92ZXJmbG93IGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5KQ0KLWRxc2NiMTcxIHNjYWxlYiAgIDEwMDBFKzYxMDkgICsxIC0+IDEuMDAwRSs2MTEzDQotZHFzY2IxNzIgc2NhbGViICAgMTAwMEUrNjExMCAgKzEgLT4gMS4wMDBFKzYxMTQNCi1kcXNjYjE3MyBzY2FsZWIgICAxMDAwRSs2MTExICArMSAtPiAxLjAwMDBFKzYxMTUgICAgICAgICAgICAgICAgICAgIENsYW1wZWQNCi1kcXNjYjE3NCBzY2FsZWIgICAxMDAwRSs2MTEyICArMSAtPiAxLjAwMDAwRSs2MTE2ICAgICAgICAgICAgICAgICAgIENsYW1wZWQNCi1kcXNjYjE3NSBzY2FsZWIgICAxMDAwRSs2MTEzICArMSAtPiAxLjAwMDAwMEUrNjExNyAgICAgICAgICAgICAgICAgIENsYW1wZWQNCi1kcXNjYjE3NiBzY2FsZWIgICAxMDAwRSs2MTE0ICArMSAtPiAxLjAwMDAwMDBFKzYxMTggICAgICAgICAgICAgICAgIENsYW1wZWQNCi1kcXNjYjE3NyBzY2FsZWIgICAxMDAwRSs2MTMxICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNSAgICAgICAgICAgICAgICBDbGFtcGVkDQotZHFzY2IxNzggc2NhbGViICAgMTAwMEUrNjEzMiAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM2ICAgICAgICAgICAgICAgQ2xhbXBlZA0KLWRxc2NiMTc5IHNjYWxlYiAgIDEwMDBFKzYxMzMgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzcgICAgICAgICAgICAgIENsYW1wZWQNCi1kcXNjYjE4MCBzY2FsZWIgICAxMDAwRSs2MTM0ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOCAgICAgICAgICAgICBDbGFtcGVkDQotZHFzY2IxODEgc2NhbGViICAgMTAwMEUrNjEzNSAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM5ICAgICAgICAgICAgQ2xhbXBlZA0KLWRxc2NiMTgyIHNjYWxlYiAgIDEwMDBFKzYxMzYgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDAgICAgICAgICAgIENsYW1wZWQNCi1kcXNjYjE4MyBzY2FsZWIgICAxMDAwRSs2MTM3ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MSAgICAgICAgICBDbGFtcGVkDQotZHFzY2IxODQgc2NhbGViICAgMTAwMEUrNjEzOCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyICAgICAgICAgQ2xhbXBlZA0KLWRxc2NiMTg1IHNjYWxlYiAgIDEwMDBFKzYxMzkgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgICAgICAgIENsYW1wZWQNCi1kcXNjYjE4NiBzY2FsZWIgICAxMDAwRSs2MTQwICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgICAgICBDbGFtcGVkDQotZHFzY2IxODcgc2NhbGViICAgMTAwMEUrNjE0MSAgKzEgLT4gSW5maW5pdHkgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gYW5kIGEgZmV3IG1vcmUgc3Vibm9ybWFsIHRydW5jYXRpb25zDQotLS0gKHRoZXNlIGNoZWNrIHRoYXQgdW5kZXJmbG93IGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5KQ0KLWRxc2NiMjIxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxc2NiMjIyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMjMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NSBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjI0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NiBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjI1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC00ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ3IFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMjYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTUgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0OCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjI3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC02ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0OSBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjI4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC03ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUwIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMjkgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTggIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MSBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjMwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC05ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MiBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjMxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUzIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMzIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTExIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjMzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NSBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjM0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTU2IFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMzUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE0IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NyBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjM2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1OCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjM3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwRS02MTU5IFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMzggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE3IC0+IDEuMDAwMDAwMDAwMDAwMDAwMEUtNjE2MCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjM5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xOCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtNjE2MSBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjAyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xOSAtPiAxLjAwMDAwMDAwMDAwMDAwRS02MTYyIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMDMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIwIC0+IDEuMDAwMDAwMDAwMDAwMEUtNjE2MyBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjA0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMSAtPiAxLjAwMDAwMDAwMDAwMEUtNjE2NCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjA1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMiAtPiAxLjAwMDAwMDAwMDAwRS02MTY1IFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMDYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIzIC0+IDEuMDAwMDAwMDAwMEUtNjE2NiBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjA3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNCAtPiAxLjAwMDAwMDAwMEUtNjE2NyBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjA4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNSAtPiAxLjAwMDAwMDAwRS02MTY4IFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMDkgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI2IC0+IDEuMDAwMDAwMEUtNjE2OSBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjEwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNyAtPiAxLjAwMDAwMEUtNjE3MCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjExIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yOCAtPiAxLjAwMDAwRS02MTcxIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMTIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI5IC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjEzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMCAtPiAxLjAwMEUtNjE3MyBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjE0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMSAtPiAxLjAwRS02MTc0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMTUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTMyIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjE2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMyAtPiAxRS02MTc2IFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IyMTcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTM0IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxc2NiMjE4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zNSAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxU2NhbGViQi5kZWNUZXN0IC0tIHNjYWxlIGEgZGVjUXVhZCBieSBwb3dlcnMgb2YgMTAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gTWF4IHxyaHN8IGlzIDIqKDYxNDQrMzQpID0gMTIzNTYKKworLS0gU2FuaXR5IGNoZWNrcworZHFzY2IwMDEgc2NhbGViICAgICAgIDcuNTAgICAxMCAtPiA3LjUwRSsxMAorZHFzY2IwMDIgc2NhbGViICAgICAgIDcuNTAgICAgMyAtPiA3LjUwRSszCitkcXNjYjAwMyBzY2FsZWIgICAgICAgNy41MCAgICAyIC0+IDc1MAorZHFzY2IwMDQgc2NhbGViICAgICAgIDcuNTAgICAgMSAtPiA3NS4wCitkcXNjYjAwNSBzY2FsZWIgICAgICAgNy41MCAgICAwIC0+IDcuNTAKK2Rxc2NiMDA2IHNjYWxlYiAgICAgICA3LjUwICAgLTEgLT4gMC43NTAKK2Rxc2NiMDA3IHNjYWxlYiAgICAgICA3LjUwICAgLTIgLT4gMC4wNzUwCitkcXNjYjAwOCBzY2FsZWIgICAgICAgNy41MCAgLTEwIC0+IDcuNTBFLTEwCitkcXNjYjAwOSBzY2FsZWIgICAgICAtNy41MCAgICAzIC0+IC03LjUwRSszCitkcXNjYjAxMCBzY2FsZWIgICAgICAtNy41MCAgICAyIC0+IC03NTAKK2Rxc2NiMDExIHNjYWxlYiAgICAgIC03LjUwICAgIDEgLT4gLTc1LjAKK2Rxc2NiMDEyIHNjYWxlYiAgICAgIC03LjUwICAgIDAgLT4gLTcuNTAKK2Rxc2NiMDEzIHNjYWxlYiAgICAgIC03LjUwICAgLTEgLT4gLTAuNzUwCisKKy0tIEluZmluaXRpZXMKK2Rxc2NiMDE0IHNjYWxlYiAgSW5maW5pdHkgICAxIC0+IEluZmluaXR5CitkcXNjYjAxNSBzY2FsZWIgIC1JbmZpbml0eSAgMiAtPiAtSW5maW5pdHkKK2Rxc2NiMDE2IHNjYWxlYiAgSW5maW5pdHkgIC0xIC0+IEluZmluaXR5CitkcXNjYjAxNyBzY2FsZWIgIC1JbmZpbml0eSAtMiAtPiAtSW5maW5pdHkKKworLS0gTmV4dCB0d28gYXJlIHNvbWV3aGF0IHVuZGVmaW5lZCBpbiA3NTRyOyB0cmVhdCBhcyBub24taW50ZWdlcgorZHFzY2IwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAxOSBzY2FsZWIgIDEwIC1JbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcyBhcmUgdW5kZWZpbmVkIGluIDc1NHI7IGFzc3VtZSB1c3VhbCBwcm9jZXNzaW5nCistLSBOYU5zLCAwIHBheWxvYWQKK2Rxc2NiMDIxIHNjYWxlYiAgICAgICAgIE5hTiAgMSAtPiBOYU4KK2Rxc2NiMDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFOCitkcXNjYjAyMyBzY2FsZWIgICAgICAgIHNOYU4gIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAyNCBzY2FsZWIgICAgICAgLXNOYU4gIDEgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTgorZHFzY2IwMjYgc2NhbGViIC1JbmYgICAtTmFOICAgIC0+IC1OYU4KK2Rxc2NiMDI3IHNjYWxlYiAgICA0ICAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG5vbi1pbnRlZ2VyIFJIUworZHFzY2IwMzAgc2NhbGViICAxLjIzICAgIDEgICAgLT4gIDEyLjMKK2Rxc2NiMDMxIHNjYWxlYiAgMS4yMyAgICAxLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDMyIHNjYWxlYiAgMS4yMyAgICAxLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDMzIHNjYWxlYiAgMS4yMyAgICAxLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDM0IHNjYWxlYiAgMS4yMyAgICAwLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDM1IHNjYWxlYiAgMS4yMyAgICAwLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDM2IHNjYWxlYiAgMS4yMyAgICAwLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAzNyBzY2FsZWIgIDEuMjMgICAtMSAgICAtPiAgMC4xMjMKK2Rxc2NiMDYxNCBzY2FsZWIgIDEuMjMgICAtMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAzOSBzY2FsZWIgIDEuMjMgICAtMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0MCBzY2FsZWIgIDEuMjMgICAtMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0MSBzY2FsZWIgIDEuMjMgICAtMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0MiBzY2FsZWIgIDEuMjMgICAtMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0MyBzY2FsZWIgIDEuMjMgICAtMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwNDQgc2NhbGViICAxLjIzICAgIDAuMSAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDQ1IHNjYWxlYiAgMS4yMyAgICAxRSsxICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0NiBzY2FsZWIgIDEuMjMgICAgMS4xMjM0RSs2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwNDcgc2NhbGViICAxLjIzICAgIDEuMTIzRSs0ICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3V0LW9mIHJhbmdlIFJIUworZHFzY2IxMjAgc2NhbGViICAxLjIzICAgIDEyMzU1ICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rxc2NiMTIxIHNjYWxlYiAgMS4yMyAgICAxMjM1NiAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcXNjYjEyMiBzY2FsZWIgIDEuMjMgICAgMTIzNTcgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IxMjMgc2NhbGViICAxLjIzICAgIDEyMzU4ICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMTI0IHNjYWxlYiAgMS4yMyAgIC0xMjM1NSAgICAgICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcXNjYjEyNSBzY2FsZWIgIDEuMjMgICAtMTIzNTYgICAgICAgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFzY2IxMjYgc2NhbGViICAxLjIzICAgLTEyMzU3ICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMTI3IHNjYWxlYiAgMS4yMyAgIC0xMjM1OCAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rxc2NiODYxIHNjYWxlYiAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQorZHFzY2I4NjIgc2NhbGViIC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yCitkcXNjYjg2MyBzY2FsZWIgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMKK2Rxc2NiODY0IHNjYWxlYiAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONAorZHFzY2I4NjUgc2NhbGViICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41CitkcXNjYjg2NiBzY2FsZWIgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxCitkcXNjYjg2NyBzY2FsZWIgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxCitkcXNjYjg2OCBzY2FsZWIgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxCitkcXNjYjg2OSBzY2FsZWIgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQorZHFzY2I4NzEgc2NhbGViICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODcyIHNjYWxlYiAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3MyBzY2FsZWIgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4NzQgc2NhbGViICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODc1IHNjYWxlYiAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3NiBzY2FsZWIgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4Nzcgc2NhbGViIC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODc4IHNjYWxlYiAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3OSBzY2FsZWIgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4ODAgc2NhbGViICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODgxIHNjYWxlYiAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2Rxc2NiMDUxIHNjYWxlYiAgICAgICAgICA3ICAgLTIgIC0+IDAuMDcKK2Rxc2NiMDUyIHNjYWxlYiAgICAgICAgIC03ICAgLTIgIC0+IC0wLjA3CitkcXNjYjA1MyBzY2FsZWIgICAgICAgICA3NSAgIC0yICAtPiAwLjc1CitkcXNjYjA1NCBzY2FsZWIgICAgICAgIC03NSAgIC0yICAtPiAtMC43NQorZHFzY2IwNTUgc2NhbGViICAgICAgIDcuNTAgICAtMiAgLT4gMC4wNzUwCitkcXNjYjA1NiBzY2FsZWIgICAgICAtNy41MCAgIC0yICAtPiAtMC4wNzUwCitkcXNjYjA1NyBzY2FsZWIgICAgICAgNy41MDAgIC0yICAtPiAwLjA3NTAwCitkcXNjYjA1OCBzY2FsZWIgICAgICAtNy41MDAgIC0yICAtPiAtMC4wNzUwMAorZHFzY2IwNjEgc2NhbGViICAgICAgICAgIDcgICAtMSAgLT4gMC43CitkcXNjYjA2MiBzY2FsZWIgICAgICAgICAtNyAgIC0xICAtPiAtMC43CitkcXNjYjA2MyBzY2FsZWIgICAgICAgICA3NSAgIC0xICAtPiA3LjUKK2Rxc2NiMDY0IHNjYWxlYiAgICAgICAgLTc1ICAgLTEgIC0+IC03LjUKK2Rxc2NiMDY1IHNjYWxlYiAgICAgICA3LjUwICAgLTEgIC0+IDAuNzUwCitkcXNjYjA2NiBzY2FsZWIgICAgICAtNy41MCAgIC0xICAtPiAtMC43NTAKK2Rxc2NiMDY3IHNjYWxlYiAgICAgICA3LjUwMCAgLTEgIC0+IDAuNzUwMAorZHFzY2IwNjggc2NhbGViICAgICAgLTcuNTAwICAtMSAgLT4gLTAuNzUwMAorZHFzY2IwNzEgc2NhbGViICAgICAgICAgIDcgICAgMCAgLT4gNworZHFzY2IwNzIgc2NhbGViICAgICAgICAgLTcgICAgMCAgLT4gLTcKK2Rxc2NiMDczIHNjYWxlYiAgICAgICAgIDc1ICAgIDAgIC0+IDc1CitkcXNjYjA3NCBzY2FsZWIgICAgICAgIC03NSAgICAwICAtPiAtNzUKK2Rxc2NiMDc1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgIC0+IDcuNTAKK2Rxc2NiMDc2IHNjYWxlYiAgICAgIC03LjUwICAgIDAgIC0+IC03LjUwCitkcXNjYjA3NyBzY2FsZWIgICAgICAgNy41MDAgICAwICAtPiA3LjUwMAorZHFzY2IwNzggc2NhbGViICAgICAgLTcuNTAwICAgMCAgLT4gLTcuNTAwCitkcXNjYjA4MSBzY2FsZWIgICAgICAgICAgNyAgICAxICAtPiA3RSsxCitkcXNjYjA4MiBzY2FsZWIgICAgICAgICAtNyAgICAxICAtPiAtN0UrMQorZHFzY2IwODMgc2NhbGViICAgICAgICAgNzUgICAgMSAgLT4gNy41RSsyCitkcXNjYjA4NCBzY2FsZWIgICAgICAgIC03NSAgICAxICAtPiAtNy41RSsyCitkcXNjYjA4NSBzY2FsZWIgICAgICAgNy41MCAgICAxICAtPiA3NS4wCitkcXNjYjA4NiBzY2FsZWIgICAgICAtNy41MCAgICAxICAtPiAtNzUuMAorZHFzY2IwODcgc2NhbGViICAgICAgIDcuNTAwICAgMSAgLT4gNzUuMDAKK2Rxc2NiMDg4IHNjYWxlYiAgICAgIC03LjUwMCAgIDEgIC0+IC03NS4wMAorZHFzY2IwOTEgc2NhbGViICAgICAgICAgIDcgICAgMiAgLT4gN0UrMgorZHFzY2IwOTIgc2NhbGViICAgICAgICAgLTcgICAgMiAgLT4gLTdFKzIKK2Rxc2NiMDkzIHNjYWxlYiAgICAgICAgIDc1ICAgIDIgIC0+IDcuNUUrMworZHFzY2IwOTQgc2NhbGViICAgICAgICAtNzUgICAgMiAgLT4gLTcuNUUrMworZHFzY2IwOTUgc2NhbGViICAgICAgIDcuNTAgICAgMiAgLT4gNzUwCitkcXNjYjA5NiBzY2FsZWIgICAgICAtNy41MCAgICAyICAtPiAtNzUwCitkcXNjYjA5NyBzY2FsZWIgICAgICAgNy41MDAgICAyICAtPiA3NTAuMAorZHFzY2IwOTggc2NhbGViICAgICAgLTcuNTAwICAgMiAgLT4gLTc1MC4wCisKKy0tIHplcm9zCitkcXNjYjExMSBzY2FsZWIgICAgICAgICAgMCAgMSAtPiAwRSsxCitkcXNjYjExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMgorZHFzY2IxMTMgc2NhbGViICAgICAgIDBFKzQgIDMgLT4gMEUrNworZHFzY2IxMTQgc2NhbGViICAgICAgLTBFKzQgIDQgLT4gLTBFKzgKK2Rxc2NiMTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzEKK2Rxc2NiMTE2IHNjYWxlYiAgICAtMC4wMDAwICA2IC0+IC0wRSsyCitkcXNjYjExNyBzY2FsZWIgICAgICAwRS0xNDEgNyAtPiAwRS0xMzQKK2Rxc2NiMTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rxc2NiMTMyIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICs2MTQ0IC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFzY2IxMzMgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgKzEwIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rxc2NiMTM0IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICsxICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcXNjYjEzNSBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxc2NiMTM2IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0MworZHFzY2IxMzcgc2NhbGViICAxRS02MTQzICAgICAgICAgICArMSAgLT4gMUUtNjE0MgorZHFzY2IxNjE0IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgLTAgIC0+IDFFLTYxNDMKK2Rxc2NiMTM5IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgLTEgIC0+IDFFLTYxNDQgICAgICAgICAgU3Vibm9ybWFsCitkcXNjYjE0MCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICArMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDIKK2Rxc2NiMTQxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFzY2IxNDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMTQzIHNjYWxlYiAgMUUtNjE3NiAgICAgICAgICArMSAgLT4gMUUtNjE3NSAgICAgICAgIFN1Ym5vcm1hbAorZHFzY2IxNDQgc2NhbGViICAxRS02MTc2ICAgICAgICAgIC0wICAtPiAxRS02MTc2ICAgICAgICAgU3Vibm9ybWFsCitkcXNjYjE0NSBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgLTEgIC0+IDBFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2Rxc2NiMTUwIHNjYWxlYiAgLTFFLTYxNzYgICAgICAgICArMSAgLT4gLTFFLTYxNzUgICAgICAgIFN1Ym5vcm1hbAorZHFzY2IxNTEgc2NhbGViICAtMUUtNjE3NiAgICAgICAgIC0wICAtPiAtMUUtNjE3NiAgICAgICAgU3Vibm9ybWFsCitkcXNjYjE1MiBzY2FsZWIgIC0xRS02MTc2ICAgICAgICAgLTEgIC0+IC0wRS02MTc2ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcXNjYjE1MyBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyArMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQyCitkcXNjYjE1NCBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyArMCAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcXNjYjE1NSBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMTU2IHNjYWxlYiAgLTFFLTYxNDMgICAgICAgICAgKzEgIC0+IC0xRS02MTQyCitkcXNjYjE1NyBzY2FsZWIgIC0xRS02MTQzICAgICAgICAgIC0wICAtPiAtMUUtNjE0MworZHFzY2IxNTggc2NhbGViICAtMUUtNjE0MyAgICAgICAgICAtMSAgLT4gLTFFLTYxNDQgICAgICAgICAgU3Vibm9ybWFsCitkcXNjYjE1OSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rxc2NiMTYwIHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICswICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxc2NiMTYxIHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMKK2Rxc2NiMTYyIHNjYWxlYiAgLTlFKzYxNDQgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcXNjYjE2MyBzY2FsZWIgIC0xRSs2MTQ0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIE9yaWdhbWkKKy0tICh0aGVzZSBjaGVjayB0aGF0IG92ZXJmbG93IGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5KQorZHFzY2IxNzEgc2NhbGViICAgMTAwMEUrNjEwOSAgKzEgLT4gMS4wMDBFKzYxMTMKK2Rxc2NiMTcyIHNjYWxlYiAgIDEwMDBFKzYxMTAgICsxIC0+IDEuMDAwRSs2MTE0CitkcXNjYjE3MyBzY2FsZWIgICAxMDAwRSs2MTExICArMSAtPiAxLjAwMDBFKzYxMTUgICAgICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTc0IHNjYWxlYiAgIDEwMDBFKzYxMTIgICsxIC0+IDEuMDAwMDBFKzYxMTYgICAgICAgICAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxNzUgc2NhbGViICAgMTAwMEUrNjExMyAgKzEgLT4gMS4wMDAwMDBFKzYxMTcgICAgICAgICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE3NiBzY2FsZWIgICAxMDAwRSs2MTE0ICArMSAtPiAxLjAwMDAwMDBFKzYxMTggICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTc3IHNjYWxlYiAgIDEwMDBFKzYxMzEgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM1ICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTc4IHNjYWxlYiAgIDEwMDBFKzYxMzIgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNiAgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTc5IHNjYWxlYiAgIDEwMDBFKzYxMzMgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzcgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTgwIHNjYWxlYiAgIDEwMDBFKzYxMzQgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM4ICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTgxIHNjYWxlYiAgIDEwMDBFKzYxMzUgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOSAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTgyIHNjYWxlYiAgIDEwMDBFKzYxMzYgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTgzIHNjYWxlYiAgIDEwMDBFKzYxMzcgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTg0IHNjYWxlYiAgIDEwMDBFKzYxMzggICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTg1IHNjYWxlYiAgIDEwMDBFKzYxMzkgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgICAgICAgIENsYW1wZWQKK2Rxc2NiMTg2IHNjYWxlYiAgIDEwMDBFKzYxNDAgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICAgICAgIENsYW1wZWQKK2Rxc2NiMTg3IHNjYWxlYiAgIDEwMDBFKzYxNDEgICsxIC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgYSBmZXcgbW9yZSBzdWJub3JtYWwgdHJ1bmNhdGlvbnMKKy0tICh0aGVzZSBjaGVjayB0aGF0IHVuZGVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkKK2Rxc2NiMjIxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFzY2IyMjIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjIzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjI0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NiBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMjUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDcgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjI2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC01ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDggU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjI3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC02ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0OSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMjggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTcgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTAgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjI5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC04ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTEgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjMwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC05ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MiBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTMgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjMyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjMzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTYgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjM1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTcgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjM2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1OCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE2IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTkgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjM4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNyAtPiAxLjAwMDAwMDAwMDAwMDAwMDBFLTYxNjAgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjM5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xOCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtNjE2MSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE5IC0+IDEuMDAwMDAwMDAwMDAwMDBFLTYxNjIgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjAzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMCAtPiAxLjAwMDAwMDAwMDAwMDBFLTYxNjMgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjA0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMSAtPiAxLjAwMDAwMDAwMDAwMEUtNjE2NCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIyIC0+IDEuMDAwMDAwMDAwMDBFLTYxNjUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjA2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMyAtPiAxLjAwMDAwMDAwMDBFLTYxNjYgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjA3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNCAtPiAxLjAwMDAwMDAwMEUtNjE2NyBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI1IC0+IDEuMDAwMDAwMDBFLTYxNjggU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjA5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNiAtPiAxLjAwMDAwMDBFLTYxNjkgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjEwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNyAtPiAxLjAwMDAwMEUtNjE3MCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMTEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI4IC0+IDEuMDAwMDBFLTYxNzEgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjEyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yOSAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjEzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMCAtPiAxLjAwMEUtNjE3MyBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMTQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTMxIC0+IDEuMDBFLTYxNzQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjE1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMiAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjE2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMyAtPiAxRS02MTc2IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIxNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzQgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcXNjYjIxOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzUgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTaGlmdC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2hpZnQuZGVjVGVzdAppbmRleCA0ZWU4MzZlLi42ZDY5MjEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTaGlmdC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNoaWZ0LmRlY1Rlc3QKQEAgLTEsMjk4ICsxLDI5OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFTaGlmdC5kZWNUZXN0IC0tIHNoaWZ0IGRlY1F1YWQgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1kcXNoaTAwMSBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAwICAtPiAgMA0KLWRxc2hpMDAyIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwDQotZHFzaGkwMDMgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMA0KLWRxc2hpMDA0IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMzMgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwMDUgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAzNCAgLT4gIDANCi1kcXNoaTAwNiBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMA0KLWRxc2hpMDA3IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgLTIgIC0+ICAwDQotZHFzaGkwMDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMw0KLWRxc2hpMDA5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+ICAxDQotZHFzaGkwMTAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gIDANCi1kcXNoaTAxMSBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgOQ0KLWRxc2hpMDEyIHNoaWZ0ICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICAwDQotDQotLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcg0KLWRxc2hpMDE1IHNoaWZ0ICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTAxNiBzaGlmdCAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGkwMTcgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpMDE4IHNoaWZ0ICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTAxOSBzaGlmdCAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGkwMjAgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpMDIxIHNoaWZ0ICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTAyMiBzaGlmdCAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbg0KLWRxc2hpMDI1IHNoaWZ0ICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTAyNiBzaGlmdCAgICAgICAgMSAgICAtMzUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGkwMjcgc2hpZnQgICAgICAgIDEgICAgIDM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpMDI4IHNoaWZ0ICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4NCi1kcXNoaTAzMCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zNCAgLT4gMA0KLWRxc2hpMDMxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMzICAtPiAxDQotZHFzaGkwMzIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzIgIC0+IDEyDQotZHFzaGkwMzMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzEgIC0+IDEyMw0KLWRxc2hpMDM0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMwICAtPiAxMjM0DQotZHFzaGkwMzUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjkgIC0+IDEyMzQ1DQotZHFzaGkwMzYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjggIC0+IDEyMzQ1Ng0KLWRxc2hpMDM3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI3ICAtPiAxMjM0NTY3DQotZHFzaGkwMzggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjYgIC0+IDEyMzQ1Njc4DQotZHFzaGkwMzkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjUgIC0+IDEyMzQ1Njc4OQ0KLWRxc2hpMDQwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI0ICAtPiAxMjM0NTY3ODkwDQotZHFzaGkwNDEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjMgIC0+IDEyMzQ1Njc4OTAxDQotZHFzaGkwNDIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjIgIC0+IDEyMzQ1Njc4OTAxMg0KLWRxc2hpMDQzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIxICAtPiAxMjM0NTY3ODkwMTIzDQotZHFzaGkwNDQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0DQotZHFzaGkwNDUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NQ0KLWRxc2hpMDQ3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE4ICAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZHFzaGkwNDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3DQotZHFzaGkwNDkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3OA0KLWRxc2hpMDUwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE1ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5DQotZHFzaGkwNTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwDQotZHFzaGkwNTIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQ0KLWRxc2hpMDUzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEyICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyDQotZHFzaGkwNTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQotZHFzaGkwNTUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLWRxc2hpMDU2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTkgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1DQotZHFzaGkwNTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2DQotZHFzaGkwNTggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nw0KLWRxc2hpMDU5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTYgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4DQotZHFzaGkwNjAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5DQotZHFzaGkwNjEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MA0KLWRxc2hpMDYyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQotZHFzaGkwNjMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyDQotZHFzaGkwNjQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMw0KLWRxc2hpMDY1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotDQotZHFzaGkwNjYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi1kcXNoaTA2NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MA0KLWRxc2hpMDY4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwDQotZHFzaGkwNjkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMyAgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDANCi1kcXNoaTA3MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs0ICAgLT4gNTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMA0KLWRxc2hpMDcxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwDQotZHFzaGkwNzIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNiAgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDANCi1kcXNoaTA3MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs3ICAgLT4gODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMA0KLWRxc2hpMDc0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzggICAtPiA5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwDQotZHFzaGkwNzUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArOSAgIC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDANCi1kcXNoaTA3NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMA0KLWRxc2hpMDc3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzExICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwDQotZHFzaGkwNzggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTIgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDANCi1kcXNoaTA3OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMyAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMA0KLWRxc2hpMDgwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE0ICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwODEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTUgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA4MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNiAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDgzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwODQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTggIC0+IDkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA4NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxOSAgLT4gIDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDg2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIwICAtPiAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwODcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjEgIC0+IDIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA4OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMiAgLT4gMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDg5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIzICAtPiA0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwOTAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjQgIC0+IDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA5MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNSAgLT4gNjc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDkyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI2ICAtPiA3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwOTMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjcgIC0+IDg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA5NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyOCAgLT4gOTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDk1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI5ICAtPiAgMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwOTYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzAgIC0+IDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA5NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMSAgLT4gMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDk4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMyICAtPiAzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwOTkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzMgIC0+IDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTEwMCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszNCAgLT4gMA0KLQ0KLS0tIHplcm9zDQotZHFzaGkyNzAgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFLTEwDQotZHFzaGkyNzEgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFLTEwDQotZHFzaGkyNzIgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICArMjkgICAtPiAgIDAuMDAwDQotZHFzaGkyNzMgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgIDAuMDAwDQotZHFzaGkyNzQgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFKzEwDQotZHFzaGkyNzUgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFKzEwDQotZHFzaGkyNzYgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFLTEwDQotZHFzaGkyNzcgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFLTEwDQotZHFzaGkyNzggc2hpZnQgLTAuMDAwICAgICAgICAgICAgICArMjkgICAtPiAgLTAuMDAwDQotZHFzaGkyNzkgc2hpZnQgLTAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgLTAuMDAwDQotZHFzaGkyODAgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFKzEwDQotZHFzaGkyODEgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFKzEwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kcXNoaTE0MSBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQzDQotZHFzaGkxNDIgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMzMgLT4gOUUrNjExMQ0KLWRxc2hpMTQzIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0DQotZHFzaGkxNDQgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMzMgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQNCi1kcXNoaTE0NSBzaGlmdCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAwRS02MTQzDQotZHFzaGkxNDYgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMEUtNjE0Mw0KLWRxc2hpMTQ3IHNoaWZ0ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtNjE0Mg0KLWRxc2hpMTQ4IHNoaWZ0ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwDQotZHFzaGkxNTEgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KLWRxc2hpMTUyIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IDFFLTYxNzYNCi1kcXNoaTE1MyBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAwRS02MTc2DQotZHFzaGkxNTQgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMEUtNjE3Ng0KLWRxc2hpMTU1IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCi1kcXNoaTE1NiBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiA5RS02MTc2DQotZHFzaGkxNTcgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gMEUtNjE3Ng0KLWRxc2hpMTU4IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IDBFLTYxNzYNCi1kcXNoaTE2MCBzaGlmdCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAwRS02MTc2DQotZHFzaGkxNjEgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMEUtNjE3Ng0KLWRxc2hpMTYyIHNoaWZ0ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtNjE3NQ0KLWRxc2hpMTYzIHNoaWZ0ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotLS0gIG5lZ2F0aXZlcw0KLWRxc2hpMTcxIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQzDQotZHFzaGkxNzIgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMzMgLT4gLTlFKzYxMTENCi1kcXNoaTE3MyBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQNCi1kcXNoaTE3NCBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQNCi1kcXNoaTE3NSBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtNjE0Mw0KLWRxc2hpMTc2IHNoaWZ0IC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0wRS02MTQzDQotZHFzaGkxNzcgc2hpZnQgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE0Mg0KLWRxc2hpMTc4IHNoaWZ0IC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMA0KLWRxc2hpMTgxIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0DQotZHFzaGkxODIgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTFFLTYxNzYNCi1kcXNoaTE4MyBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAtMEUtNjE3Ng0KLWRxc2hpMTg0IHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IC0wRS02MTc2DQotZHFzaGkxODUgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCi1kcXNoaTE4NiBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtOUUtNjE3Ng0KLWRxc2hpMTg3IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IC0wRS02MTc2DQotZHFzaGkxODggc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTBFLTYxNzYNCi1kcXNoaTE5MCBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtNjE3Ng0KLWRxc2hpMTkxIHNoaWZ0IC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0wRS02MTc2DQotZHFzaGkxOTIgc2hpZnQgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE3NQ0KLWRxc2hpMTkzIHNoaWZ0IC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLQ0KLS0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykNCi1kcXNoaTIwMSBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgICAwICAtPiAtMA0KLWRxc2hpMjAyIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDIgIC0+IC0wDQotZHFzaGkyMDMgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAgMiAgLT4gLTEwMA0KLWRxc2hpMjA0IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgMzMgIC0+IC0xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkyMDUgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzNCAgLT4gLTANCi1kcXNoaTIwNiBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIC0xICAtPiAtMA0KLWRxc2hpMjA3IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgLTIgIC0+IC0wDQotZHFzaGkyMDggc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMw0KLWRxc2hpMjA5IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+IC0xDQotZHFzaGkyMTAgc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTANCi1kcXNoaTIxMSBzaGlmdCAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtOQ0KLWRxc2hpMjEyIHNoaWZ0IC05OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+IC0wDQotDQotDQotLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwNCi1kcXNoaTc4MSBzaGlmdCAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5DQotZHFzaGk3ODIgc2hpZnQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRxc2hpNzgzIHNoaWZ0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kcXNoaTc4NCBzaGlmdCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZHFzaGk3ODUgc2hpZnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRxc2hpNzg2IHNoaWZ0IC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkNCi1kcXNoaTc4NyBzaGlmdCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk3ODggc2hpZnQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpNzg5IHNoaWZ0IC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTc5MCBzaGlmdCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk3OTEgc2hpZnQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpNzkyIHNoaWZ0ICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTc5MyBzaGlmdCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk3OTQgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxc2hpODAwIHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTgwMSBzaGlmdCAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkNCi1kcXNoaTgwMiBzaGlmdCAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkNCi1kcXNoaTgwMyBzaGlmdCAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkNCi1kcXNoaTgwNCBzaGlmdCAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkNCi1kcXNoaTgwNSBzaGlmdCAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkNCi1kcXNoaTgwNiBzaGlmdCAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkNCi1kcXNoaTgwNyBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4MDggc2hpZnQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODA5IHNoaWZ0IC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTgxMCBzaGlmdCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4MTEgc2hpZnQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODEyIHNoaWZ0ICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTgxMyBzaGlmdCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4MTQgc2hpZnQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODE1IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcXNoaTgyMSBzaGlmdCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRxc2hpODIyIHNoaWZ0ICBOYU4gLTEwMDAgICAtPiAgTmFODQotZHFzaGk4MjMgc2hpZnQgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kcXNoaTgyNCBzaGlmdCAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRxc2hpODI1IHNoaWZ0ICBOYU4gIDAgICAgICAtPiAgTmFODQotZHFzaGk4MjYgc2hpZnQgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kcXNoaTgyNyBzaGlmdCAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRxc2hpODI4IHNoaWZ0ICBOYU4gIEluZiAgICAtPiAgTmFODQotZHFzaGk4Mjkgc2hpZnQgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kcXNoaTgzMCBzaGlmdCAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRxc2hpODMxIHNoaWZ0IC0xMDAwIE5hTiAgICAtPiAgTmFODQotZHFzaGk4MzIgc2hpZnQgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kcXNoaTgzMyBzaGlmdCAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxc2hpODM0IHNoaWZ0ICAwICAgIE5hTiAgICAtPiAgTmFODQotZHFzaGk4MzUgc2hpZnQgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kcXNoaTgzNiBzaGlmdCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxc2hpODM3IHNoaWZ0ICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZHFzaGk4NDEgc2hpZnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NDIgc2hpZnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NDMgc2hpZnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NDQgc2hpZnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NDUgc2hpZnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NDYgc2hpZnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NDcgc2hpZnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NDggc2hpZnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NDkgc2hpZnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NTAgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NTEgc2hpZnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NTIgc2hpZnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NTMgc2hpZnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NTQgc2hpZnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NTUgc2hpZnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NTYgc2hpZnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NTcgc2hpZnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NTggc2hpZnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NTkgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxc2hpODYxIHNoaWZ0ICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KLWRxc2hpODYyIHNoaWZ0ICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KLWRxc2hpODYzIHNoaWZ0ICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLWRxc2hpODY0IHNoaWZ0ICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KLWRxc2hpODY1IHNoaWZ0ICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KLWRxc2hpODY2IHNoaWZ0IC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLWRxc2hpODY3IHNoaWZ0IC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KLWRxc2hpODY4IHNoaWZ0ICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KLWRxc2hpODY5IHNoaWZ0ICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1kcXNoaTg3MSBzaGlmdCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODcyIHNoaWZ0ICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NzMgc2hpZnQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTg3NCBzaGlmdCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODc1IHNoaWZ0ICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NzYgc2hpZnQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTg3NyBzaGlmdCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODc4IHNoaWZ0IC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4Nzkgc2hpZnQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTg4MCBzaGlmdCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODgxIHNoaWZ0ICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4ODIgc2hpZnQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLWRxc2hpODgzIHNoaWZ0IC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4ODQgc2hpZnQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KLWRxc2hpODg1IHNoaWZ0ICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVNoaWZ0LmRlY1Rlc3QgLS0gc2hpZnQgZGVjUXVhZCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFzaGkwMDEgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDAKK2Rxc2hpMDAyIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwCitkcXNoaTAwMyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwCitkcXNoaTAwNCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDMzICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwMDUgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAzNCAgLT4gIDAKK2Rxc2hpMDA2IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAwCitkcXNoaTAwNyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMAorZHFzaGkwMDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFzaGkwMDkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gIDEKK2Rxc2hpMDEwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICAwCitkcXNoaTAxMSBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgOQorZHFzaGkwMTIgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gIDAKKworLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgorZHFzaGkwMTUgc2hpZnQgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMTYgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMTcgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMTggc2hpZnQgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMTkgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjAgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjEgc2hpZnQgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjIgc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgorZHFzaGkwMjUgc2hpZnQgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjYgc2hpZnQgICAgICAgIDEgICAgLTM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjcgc2hpZnQgICAgICAgIDEgICAgIDM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjggc2hpZnQgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4KK2Rxc2hpMDMwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTM0ICAtPiAwCitkcXNoaTAzMSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMyAgLT4gMQorZHFzaGkwMzIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzIgIC0+IDEyCitkcXNoaTAzMyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMSAgLT4gMTIzCitkcXNoaTAzNCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMCAgLT4gMTIzNAorZHFzaGkwMzUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjkgIC0+IDEyMzQ1CitkcXNoaTAzNiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yOCAgLT4gMTIzNDU2CitkcXNoaTAzNyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNyAgLT4gMTIzNDU2NworZHFzaGkwMzggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjYgIC0+IDEyMzQ1Njc4CitkcXNoaTAzOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNSAgLT4gMTIzNDU2Nzg5CitkcXNoaTA0MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNCAgLT4gMTIzNDU2Nzg5MAorZHFzaGkwNDEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjMgIC0+IDEyMzQ1Njc4OTAxCitkcXNoaTA0MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMiAgLT4gMTIzNDU2Nzg5MDEyCitkcXNoaTA0MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMSAgLT4gMTIzNDU2Nzg5MDEyMworZHFzaGkwNDQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0CitkcXNoaTA0NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1CitkcXNoaTA0NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFzaGkwNDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3CitkcXNoaTA0OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4CitkcXNoaTA1MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OQorZHFzaGkwNTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitkcXNoaTA1MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCitkcXNoaTA1MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMgorZHFzaGkwNTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXNoaTA1NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXNoaTA1NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NQorZHFzaGkwNTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2CitkcXNoaTA1OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3CitkcXNoaTA1OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3OAorZHFzaGkwNjAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CitkcXNoaTA2MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitkcXNoaTA2MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQorZHFzaGkwNjMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyCitkcXNoaTA2NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXNoaTA2NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCitkcXNoaTA2NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFzaGkwNjcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAKK2Rxc2hpMDY4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwCitkcXNoaTA2OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMAorZHFzaGkwNzAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAKK2Rxc2hpMDcxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwCitkcXNoaTA3MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMAorZHFzaGkwNzMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAKK2Rxc2hpMDc0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzggICAtPiA5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwCitkcXNoaTA3NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs5ICAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMAorZHFzaGkwNzYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAKK2Rxc2hpMDc3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzExICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwCitkcXNoaTA3OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMiAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMAorZHFzaGkwNzkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTMgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDgwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE0ICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNSAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTYgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDgzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxOCAgLT4gOTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTkgIC0+ICAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDg2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIwICAtPiAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMSAgLT4gMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjIgIC0+IDM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDg5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIzICAtPiA0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNCAgLT4gNTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjUgIC0+IDY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDkyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI2ICAtPiA3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNyAgLT4gODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjggIC0+IDkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDk1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI5ICAtPiAgMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMCAgLT4gMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzEgIC0+IDIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDk4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMyICAtPiAzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMyAgLT4gNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkxMDAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzQgIC0+IDAKKworLS0gemVyb3MKK2Rxc2hpMjcwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwRS0xMAorZHFzaGkyNzEgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFLTEwCitkcXNoaTI3MiBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMC4wMDAKK2Rxc2hpMjczIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwLjAwMAorZHFzaGkyNzQgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFKzEwCitkcXNoaTI3NSBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUrMTAKK2Rxc2hpMjc2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wRS0xMAorZHFzaGkyNzcgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFLTEwCitkcXNoaTI3OCBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMC4wMDAKK2Rxc2hpMjc5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wLjAwMAorZHFzaGkyODAgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFKzEwCitkcXNoaTI4MSBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUrMTAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rxc2hpMTQxIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMKK2Rxc2hpMTQyIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IDlFKzYxMTEKK2Rxc2hpMTQzIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0CitkcXNoaTE0NCBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorZHFzaGkxNDUgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtNjE0MworZHFzaGkxNDYgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMEUtNjE0MworZHFzaGkxNDcgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTQyCitkcXNoaTE0OCBzaGlmdCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMAorZHFzaGkxNTEgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFzaGkxNTIgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gMUUtNjE3NgorZHFzaGkxNTMgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gMEUtNjE3NgorZHFzaGkxNTQgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMEUtNjE3NgorZHFzaGkxNTUgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFzaGkxNTYgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gOUUtNjE3NgorZHFzaGkxNTcgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gMEUtNjE3NgorZHFzaGkxNTggc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMEUtNjE3NgorZHFzaGkxNjAgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtNjE3NgorZHFzaGkxNjEgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMEUtNjE3NgorZHFzaGkxNjIgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTc1CitkcXNoaTE2MyBzaGlmdCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworLS0gIG5lZ2F0aXZlcworZHFzaGkxNzEgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMKK2Rxc2hpMTcyIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IC05RSs2MTExCitkcXNoaTE3MyBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQKK2Rxc2hpMTc0IHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDMzIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorZHFzaGkxNzUgc2hpZnQgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTBFLTYxNDMKK2Rxc2hpMTc2IHNoaWZ0IC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0wRS02MTQzCitkcXNoaTE3NyBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTQyCitkcXNoaTE3OCBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKK2Rxc2hpMTgxIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXNoaTE4MiBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtMUUtNjE3NgorZHFzaGkxODMgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTBFLTYxNzYKK2Rxc2hpMTg0IHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IC0wRS02MTc2CitkcXNoaTE4NSBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFzaGkxODYgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTlFLTYxNzYKK2Rxc2hpMTg3IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IC0wRS02MTc2CitkcXNoaTE4OCBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtMEUtNjE3NgorZHFzaGkxOTAgc2hpZnQgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTBFLTYxNzYKK2Rxc2hpMTkxIHNoaWZ0IC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0wRS02MTc2CitkcXNoaTE5MiBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTc1CitkcXNoaTE5MyBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKKworLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQorZHFzaGkyMDEgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTAKK2Rxc2hpMjAyIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDIgIC0+IC0wCitkcXNoaTIwMyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwCitkcXNoaTIwNCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDMzICAtPiAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkyMDUgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzNCAgLT4gLTAKK2Rxc2hpMjA2IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0wCitkcXNoaTIwNyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMAorZHFzaGkyMDggc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFzaGkyMDkgc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTEKK2Rxc2hpMjEwIHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+IC0wCitkcXNoaTIxMSBzaGlmdCAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtOQorZHFzaGkyMTIgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTAKKworCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAorZHFzaGk3ODEgc2hpZnQgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODIgc2hpZnQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODMgc2hpZnQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODQgc2hpZnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODUgc2hpZnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODYgc2hpZnQgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODcgc2hpZnQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3ODggc2hpZnQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3ODkgc2hpZnQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3OTAgc2hpZnQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3OTEgc2hpZnQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3OTIgc2hpZnQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3OTMgc2hpZnQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3OTQgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXNoaTgwMCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgwMSBzaGlmdCAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKK2Rxc2hpODAyIHNoaWZ0ICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQorZHFzaGk4MDMgc2hpZnQgIEluZiAgLTAgICAgIC0+IEluZmluaXR5CitkcXNoaTgwNCBzaGlmdCAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKK2Rxc2hpODA1IHNoaWZ0ICBJbmYgICAxICAgICAtPiBJbmZpbml0eQorZHFzaGk4MDYgc2hpZnQgIEluZiAgIDggICAgIC0+IEluZmluaXR5CitkcXNoaTgwNyBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgwOCBzaGlmdCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgwOSBzaGlmdCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxMCBzaGlmdCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxMSBzaGlmdCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxMiBzaGlmdCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxMyBzaGlmdCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxNCBzaGlmdCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxNSBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxc2hpODIxIHNoaWZ0ICBOYU4gLUluZiAgICAtPiAgTmFOCitkcXNoaTgyMiBzaGlmdCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFzaGk4MjMgc2hpZnQgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2Rxc2hpODI0IHNoaWZ0ICBOYU4gLTAgICAgICAtPiAgTmFOCitkcXNoaTgyNSBzaGlmdCAgTmFOICAwICAgICAgLT4gIE5hTgorZHFzaGk4MjYgc2hpZnQgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2Rxc2hpODI3IHNoaWZ0ICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcXNoaTgyOCBzaGlmdCAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFzaGk4Mjkgc2hpZnQgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODMwIHNoaWZ0IC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzMSBzaGlmdCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFzaGk4MzIgc2hpZnQgLTEgICAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODMzIHNoaWZ0IC0wICAgIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzNCBzaGlmdCAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFzaGk4MzUgc2hpZnQgIDEgICAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODM2IHNoaWZ0ICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzNyBzaGlmdCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcXNoaTg0MSBzaGlmdCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQyIHNoaWZ0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDMgc2hpZnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg0NCBzaGlmdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQ1IHNoaWZ0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDYgc2hpZnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg0NyBzaGlmdCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQ4IHNoaWZ0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDkgc2hpZnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1MCBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODUxIHNoaWZ0IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTIgc2hpZnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1MyBzaGlmdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODU0IHNoaWZ0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTUgc2hpZnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1NiBzaGlmdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODU3IHNoaWZ0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTggc2hpZnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1OSBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFzaGk4NjEgc2hpZnQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkcXNoaTg2MiBzaGlmdCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2Rxc2hpODYzIHNoaWZ0ICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZHFzaGk4NjQgc2hpZnQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkcXNoaTg2NSBzaGlmdCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2Rxc2hpODY2IHNoaWZ0IC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZHFzaGk4Njcgc2hpZnQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkcXNoaTg2OCBzaGlmdCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2Rxc2hpODY5IHNoaWZ0ICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2Rxc2hpODcxIHNoaWZ0ICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3MiBzaGlmdCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NzMgc2hpZnQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODc0IHNoaWZ0ICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3NSBzaGlmdCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NzYgc2hpZnQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODc3IHNoaWZ0IC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3OCBzaGlmdCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4Nzkgc2hpZnQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODgwIHNoaWZ0ICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg4MSBzaGlmdCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4ODIgc2hpZnQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZHFzaGk4ODMgc2hpZnQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODg0IHNoaWZ0ICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2Rxc2hpODg1IHNoaWZ0ICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTdWJ0cmFjdC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU3VidHJhY3QuZGVjVGVzdAppbmRleCBmM2I5MjI3Li4zNDU3MmY2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTdWJ0cmFjdC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVN1YnRyYWN0LmRlY1Rlc3QKQEAgLTEsNjM1ICsxLDYzNSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFTdWJ0cmFjdC5kZWNUZXN0IC0tIGRlY1F1YWQgc3VidHJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUNCi0tLSByZXByZXNlbnRhYmxlIGluIGEgZGVjUXVhZA0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCi1kcXN1YjAwMSBzdWJ0cmFjdCAgMCAgIDAgIC0+ICcwJw0KLWRxc3ViMDAyIHN1YnRyYWN0ICAxICAgMSAgLT4gJzAnDQotZHFzdWIwMDMgc3VidHJhY3QgIDEgICAyICAtPiAnLTEnDQotZHFzdWIwMDQgc3VidHJhY3QgIDIgICAxICAtPiAnMScNCi1kcXN1YjAwNSBzdWJ0cmFjdCAgMiAgIDIgIC0+ICcwJw0KLWRxc3ViMDA2IHN1YnRyYWN0ICAzICAgMiAgLT4gJzEnDQotZHFzdWIwMDcgc3VidHJhY3QgIDIgICAzICAtPiAnLTEnDQotDQotZHFzdWIwMTEgc3VidHJhY3QgLTAgICAwICAtPiAnLTAnDQotZHFzdWIwMTIgc3VidHJhY3QgLTEgICAxICAtPiAnLTInDQotZHFzdWIwMTMgc3VidHJhY3QgLTEgICAyICAtPiAnLTMnDQotZHFzdWIwMTQgc3VidHJhY3QgLTIgICAxICAtPiAnLTMnDQotZHFzdWIwMTUgc3VidHJhY3QgLTIgICAyICAtPiAnLTQnDQotZHFzdWIwMTYgc3VidHJhY3QgLTMgICAyICAtPiAnLTUnDQotZHFzdWIwMTcgc3VidHJhY3QgLTIgICAzICAtPiAnLTUnDQotDQotZHFzdWIwMjEgc3VidHJhY3QgIDAgIC0wICAtPiAnMCcNCi1kcXN1YjAyMiBzdWJ0cmFjdCAgMSAgLTEgIC0+ICcyJw0KLWRxc3ViMDIzIHN1YnRyYWN0ICAxICAtMiAgLT4gJzMnDQotZHFzdWIwMjQgc3VidHJhY3QgIDIgIC0xICAtPiAnMycNCi1kcXN1YjAyNSBzdWJ0cmFjdCAgMiAgLTIgIC0+ICc0Jw0KLWRxc3ViMDI2IHN1YnRyYWN0ICAzICAtMiAgLT4gJzUnDQotZHFzdWIwMjcgc3VidHJhY3QgIDIgIC0zICAtPiAnNScNCi0NCi1kcXN1YjAzMCBzdWJ0cmFjdCAgMTEgIDEgIC0+IDEwDQotZHFzdWIwMzEgc3VidHJhY3QgIDEwICAxICAtPiAgOQ0KLWRxc3ViMDMyIHN1YnRyYWN0ICA5ICAgMSAgLT4gIDgNCi1kcXN1YjAzMyBzdWJ0cmFjdCAgMSAgIDEgIC0+ICAwDQotZHFzdWIwMzQgc3VidHJhY3QgIDAgICAxICAtPiAtMQ0KLWRxc3ViMDM1IHN1YnRyYWN0IC0xICAgMSAgLT4gLTINCi1kcXN1YjAzNiBzdWJ0cmFjdCAtOSAgIDEgIC0+IC0xMA0KLWRxc3ViMDM3IHN1YnRyYWN0IC0xMCAgMSAgLT4gLTExDQotZHFzdWIwMzggc3VidHJhY3QgLTExICAxICAtPiAtMTINCi0NCi1kcXN1YjA0MCBzdWJ0cmFjdCAnNS43NScgJzMuMycgIC0+ICcyLjQ1Jw0KLWRxc3ViMDQxIHN1YnRyYWN0ICc1JyAgICAnLTMnICAgLT4gJzgnDQotZHFzdWIwNDIgc3VidHJhY3QgJy01JyAgICctMycgICAtPiAnLTInDQotZHFzdWIwNDMgc3VidHJhY3QgJy03JyAgICcyLjUnICAtPiAnLTkuNScNCi1kcXN1YjA0NCBzdWJ0cmFjdCAnMC43JyAgJzAuMycgIC0+ICcwLjQnDQotZHFzdWIwNDUgc3VidHJhY3QgJzEuMycgICcwLjMnICAtPiAnMS4wJw0KLWRxc3ViMDQ2IHN1YnRyYWN0ICcxLjI1JyAnMS4yNScgLT4gJzAuMDAnDQotDQotZHFzdWIwNTAgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScNCi1kcXN1YjA1MSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwODknIC0+ICcwLjIzNDU2NzAwJw0KLQ0KLWRxc3ViMDYwIHN1YnRyYWN0ICc3MCcgICAgJzEwMDAwZSszNCcgLT4gJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViMDYxIHN1YnRyYWN0ICc3MDAnICAgICcxMDAwMGUrMzQnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjA2MiBzdWJ0cmFjdCAnNzAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMzcnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViMDYzIHN1YnRyYWN0ICc3MDAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5M0UrMzcnIFJvdW5kZWQNCi1kcXN1YjA2NCBzdWJ0cmFjdCAnNzAwMDAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMwRSszNycgUm91bmRlZA0KLSAgLS0gc3ltbWV0cnk6DQotZHFzdWIwNjUgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjA2NiBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjA2NyBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSszNycgSW5leGFjdCBSb3VuZGVkDQotZHFzdWIwNjggc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTNFKzM3JyBSb3VuZGVkDQotZHFzdWIwNjkgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMwRSszNycgUm91bmRlZA0KLQ0KLSAgLS0gc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzDQotZHFzdWIwOTAgc3VidHJhY3QgJzAwLjAnICAgICcwLjAnICAtPiAnMC4wJw0KLWRxc3ViMDkxIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnDQotZHFzdWIwOTIgc3VidHJhY3QgJzAuMDAnICAgICcwMC4wJyAtPiAnMC4wMCcNCi1kcXN1YjA5MyBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJw0KLWRxc3ViMDk0IHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnDQotZHFzdWIwOTUgc3VidHJhY3QgJzMnICAgICcuMycgICAtPiAnMi43Jw0KLWRxc3ViMDk2IHN1YnRyYWN0ICczLicgICAnLjMnICAgLT4gJzIuNycNCi1kcXN1YjA5NyBzdWJ0cmFjdCAnMy4wJyAgJy4zJyAgIC0+ICcyLjcnDQotZHFzdWIwOTggc3VidHJhY3QgJzMuMDAnICcuMycgICAtPiAnMi43MCcNCi1kcXN1YjA5OSBzdWJ0cmFjdCAnMycgICAgJzMnICAgIC0+ICcwJw0KLWRxc3ViMTAwIHN1YnRyYWN0ICczJyAgICAnKzMnICAgLT4gJzAnDQotZHFzdWIxMDEgc3VidHJhY3QgJzMnICAgICctMycgICAtPiAnNicNCi1kcXN1YjEwMiBzdWJ0cmFjdCAnMycgICAgJzAuMycgIC0+ICcyLjcnDQotZHFzdWIxMDMgc3VidHJhY3QgJzMuJyAgICcwLjMnICAtPiAnMi43Jw0KLWRxc3ViMTA0IHN1YnRyYWN0ICczLjAnICAnMC4zJyAgLT4gJzIuNycNCi1kcXN1YjEwNSBzdWJ0cmFjdCAnMy4wMCcgJzAuMycgIC0+ICcyLjcwJw0KLWRxc3ViMTA2IHN1YnRyYWN0ICczJyAgICAnMy4wJyAgLT4gJzAuMCcNCi1kcXN1YjEwNyBzdWJ0cmFjdCAnMycgICAgJyszLjAnIC0+ICcwLjAnDQotZHFzdWIxMDggc3VidHJhY3QgJzMnICAgICctMy4wJyAtPiAnNi4wJw0KLQ0KLS0tIHRoZSBhYm92ZSBhbGwgZnJvbSBhZGQ7IG1hc3NhZ2VkIGFuZCBleHRlbmRlZC4gIE5vdyBzb21lIG5ldyBvbmVzLi4uDQotLS0gW3BhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGNvbXBhcmlzb25zXQ0KLS0tIE5COiAteEUtOCBiZWxvdyB3ZXJlIG5vbi1leHBvbmVudHMgcHJlLUFOU0kgWDMtMjc0LCBhbmQgLTFFLTcgb3IgMEUtNw0KLS0tIHdpdGggaW5wdXQgcm91bmRpbmcuDQotZHFzdWIxMjAgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy01RS04Jw0KLWRxc3ViMTIxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNEUtOCcNCi1kcXN1YjEyMiBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg2JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTNFLTgnDQotZHFzdWIxMjMgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0yRS04Jw0KLWRxc3ViMTI0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMUUtOCcNCi1kcXN1YjEyNSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg5JyAgICAnMTAuMjM0NTY3ODknICAtPiAnMEUtOCcNCi1kcXN1YjEyNiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMUUtOCcNCi1kcXN1YjEyNyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMkUtOCcNCi1kcXN1YjEyOCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkyJyAgICAnMTAuMjM0NTY3ODknICAtPiAnM0UtOCcNCi1kcXN1YjEyOSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkzJyAgICAnMTAuMjM0NTY3ODknICAtPiAnNEUtOCcNCi1kcXN1YjEzMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzk0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnNUUtOCcNCi1kcXN1YjEzMSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTVFLTgnDQotZHFzdWIxMzIgc3VidHJhY3QgICcxMC4yMzQ1Njc4MicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy00RS04Jw0KLWRxc3ViMTMzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODMnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctM0UtOCcNCi1kcXN1YjEzNCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg0JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTJFLTgnDQotZHFzdWIxMzUgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0xRS04Jw0KLWRxc3ViMTM2IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcwRS04Jw0KLWRxc3ViMTM3IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcxRS04Jw0KLWRxc3ViMTM4IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcyRS04Jw0KLWRxc3ViMTM5IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4NicgIC0+ICczRS04Jw0KLWRxc3ViMTQwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTAnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc0RS04Jw0KLWRxc3ViMTQxIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc1RS04Jw0KLWRxc3ViMTQyIHN1YnRyYWN0ICAnMScgICAgICAgICAgICAgICcwLjk5OTk5OTk5OScgIC0+ICcxRS05Jw0KLWRxc3ViMTQzIHN1YnRyYWN0ICAnMC45OTk5OTk5OTknICAgICcxJyAgICAgICAgICAgIC0+ICctMUUtOScNCi1kcXN1YjE0NCBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc4MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnNkUtOCcNCi1kcXN1YjE0NSBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTRFLTgnDQotZHFzdWIxNDYgc3VidHJhY3QgICctMTAuMjM0NTY3OTEnICAgJy0xMC4yMzQ1Njc4NicgLT4gJy01RS04Jw0KLQ0KLS0tIGFkZGl0aW9uYWwgc2NhbGVkIGFyaXRobWV0aWMgdGVzdHMgWzAuOTcgcHJvYmxlbV0NCi1kcXN1YjE2MCBzdWJ0cmFjdCAnMCcgICAgICcuMScgICAgICAtPiAnLTAuMScNCi1kcXN1YjE2MSBzdWJ0cmFjdCAnMDAnICAgICcuOTc5ODMnICAtPiAnLTAuOTc5ODMnDQotZHFzdWIxNjIgc3VidHJhY3QgJzAnICAgICAnLjknICAgICAgLT4gJy0wLjknDQotZHFzdWIxNjMgc3VidHJhY3QgJzAnICAgICAnMC4xMDInICAgLT4gJy0wLjEwMicNCi1kcXN1YjE2NCBzdWJ0cmFjdCAnMCcgICAgICcuNCcgICAgICAtPiAnLTAuNCcNCi1kcXN1YjE2NSBzdWJ0cmFjdCAnMCcgICAgICcuMzA3JyAgICAtPiAnLTAuMzA3Jw0KLWRxc3ViMTY2IHN1YnRyYWN0ICcwJyAgICAgJy40MzgyMicgIC0+ICctMC40MzgyMicNCi1kcXN1YjE2NyBzdWJ0cmFjdCAnMCcgICAgICcuOTExJyAgICAtPiAnLTAuOTExJw0KLWRxc3ViMTY4IHN1YnRyYWN0ICcuMCcgICAgJy4wMicgICAgIC0+ICctMC4wMicNCi1kcXN1YjE2OSBzdWJ0cmFjdCAnMDAnICAgICcuMzkyJyAgICAtPiAnLTAuMzkyJw0KLWRxc3ViMTcwIHN1YnRyYWN0ICcwJyAgICAgJy4yNicgICAgIC0+ICctMC4yNicNCi1kcXN1YjE3MSBzdWJ0cmFjdCAnMCcgICAgICcwLjUxJyAgICAtPiAnLTAuNTEnDQotZHFzdWIxNzIgc3VidHJhY3QgJzAnICAgICAnLjIyMzQnICAgLT4gJy0wLjIyMzQnDQotZHFzdWIxNzMgc3VidHJhY3QgJzAnICAgICAnLjInICAgICAgLT4gJy0wLjInDQotZHFzdWIxNzQgc3VidHJhY3QgJy4wJyAgICAnLjAwMDgnICAgLT4gJy0wLjAwMDgnDQotLS0gMC4gb24gbGVmdA0KLWRxc3ViMTgwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnDQotZHFzdWIxODEgc3VidHJhY3QgJzAuMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnDQotZHFzdWIxODIgc3VidHJhY3QgJzAuMCcgICAgICctLjknICAgICAgLT4gJzAuOScNCi1kcXN1YjE4MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInDQotZHFzdWIxODQgc3VidHJhY3QgJzAuMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcNCi1kcXN1YjE4NSBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnDQotZHFzdWIxODYgc3VidHJhY3QgJzAuMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInDQotZHFzdWIxODcgc3VidHJhY3QgJzAuMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJw0KLWRxc3ViMTg4IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMicgICAgIC0+ICcwLjAyJw0KLWRxc3ViMTg5IHN1YnRyYWN0ICcwLjAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicNCi1kcXN1YjE5MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicNCi1kcXN1YjE5MSBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScNCi1kcXN1YjE5MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0Jw0KLWRxc3ViMTkzIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInDQotZHFzdWIxOTQgc3VidHJhY3QgJzAuMCcgICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcNCi0tLSBuZWdhdGl2ZXMgb2Ygc2FtZQ0KLWRxc3ViMjAwIHN1YnRyYWN0ICcwJyAgICAgJy0uMScgICAgICAtPiAnMC4xJw0KLWRxc3ViMjAxIHN1YnRyYWN0ICcwMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycNCi1kcXN1YjIwMiBzdWJ0cmFjdCAnMCcgICAgICctLjknICAgICAgLT4gJzAuOScNCi1kcXN1YjIwMyBzdWJ0cmFjdCAnMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJw0KLWRxc3ViMjA0IHN1YnRyYWN0ICcwJyAgICAgJy0uNCcgICAgICAtPiAnMC40Jw0KLWRxc3ViMjA1IHN1YnRyYWN0ICcwJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnDQotZHFzdWIyMDYgc3VidHJhY3QgJzAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJw0KLWRxc3ViMjA3IHN1YnRyYWN0ICcwJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnDQotZHFzdWIyMDggc3VidHJhY3QgJy4wJyAgICAnLS4wMicgICAgIC0+ICcwLjAyJw0KLWRxc3ViMjA5IHN1YnRyYWN0ICcwMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInDQotZHFzdWIyMTAgc3VidHJhY3QgJzAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2Jw0KLWRxc3ViMjExIHN1YnRyYWN0ICcwJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScNCi1kcXN1YjIxMiBzdWJ0cmFjdCAnMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcNCi1kcXN1YjIxMyBzdWJ0cmFjdCAnMCcgICAgICctLjInICAgICAgLT4gJzAuMicNCi1kcXN1YjIxNCBzdWJ0cmFjdCAnLjAnICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcNCi0NCi0tLSBtb3JlIGZpeGVkLCBMSFMgc3dhcHMgW3JlYWxseSB0aGUgc2FtZSBhcyB0ZXN0Y2FzZXMgdW5kZXIgYWRkXQ0KLWRxc3ViMjIwIHN1YnRyYWN0ICctNTYyNjdFLTEyJyAwICAtPiAnLTUuNjI2N0UtOCcNCi1kcXN1YjIyMSBzdWJ0cmFjdCAnLTU2MjY3RS0xMScgMCAgLT4gJy01LjYyNjdFLTcnDQotZHFzdWIyMjIgc3VidHJhY3QgJy01NjI2N0UtMTAnIDAgIC0+ICctMC4wMDAwMDU2MjY3Jw0KLWRxc3ViMjIzIHN1YnRyYWN0ICctNTYyNjdFLTknICAwICAtPiAnLTAuMDAwMDU2MjY3Jw0KLWRxc3ViMjI0IHN1YnRyYWN0ICctNTYyNjdFLTgnICAwICAtPiAnLTAuMDAwNTYyNjcnDQotZHFzdWIyMjUgc3VidHJhY3QgJy01NjI2N0UtNycgIDAgIC0+ICctMC4wMDU2MjY3Jw0KLWRxc3ViMjI2IHN1YnRyYWN0ICctNTYyNjdFLTYnICAwICAtPiAnLTAuMDU2MjY3Jw0KLWRxc3ViMjI3IHN1YnRyYWN0ICctNTYyNjdFLTUnICAwICAtPiAnLTAuNTYyNjcnDQotZHFzdWIyMjggc3VidHJhY3QgJy01NjI2N0UtMicgIDAgIC0+ICctNTYyLjY3Jw0KLWRxc3ViMjI5IHN1YnRyYWN0ICctNTYyNjdFLTEnICAwICAtPiAnLTU2MjYuNycNCi1kcXN1YjIzMCBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgMCAgLT4gJy01NjI2NycNCi0tLSBzeW1tZXRyeSAuLi4NCi1kcXN1YjI0MCBzdWJ0cmFjdCAwICctNTYyNjdFLTEyJyAgLT4gJzUuNjI2N0UtOCcNCi1kcXN1YjI0MSBzdWJ0cmFjdCAwICctNTYyNjdFLTExJyAgLT4gJzUuNjI2N0UtNycNCi1kcXN1YjI0MiBzdWJ0cmFjdCAwICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycNCi1kcXN1YjI0MyBzdWJ0cmFjdCAwICctNTYyNjdFLTknICAgLT4gJzAuMDAwMDU2MjY3Jw0KLWRxc3ViMjQ0IHN1YnRyYWN0IDAgJy01NjI2N0UtOCcgICAtPiAnMC4wMDA1NjI2NycNCi1kcXN1YjI0NSBzdWJ0cmFjdCAwICctNTYyNjdFLTcnICAgLT4gJzAuMDA1NjI2NycNCi1kcXN1YjI0NiBzdWJ0cmFjdCAwICctNTYyNjdFLTYnICAgLT4gJzAuMDU2MjY3Jw0KLWRxc3ViMjQ3IHN1YnRyYWN0IDAgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycNCi1kcXN1YjI0OCBzdWJ0cmFjdCAwICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycNCi1kcXN1YjI0OSBzdWJ0cmFjdCAwICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycNCi1kcXN1YjI1MCBzdWJ0cmFjdCAwICctNTYyNjdFLTAnICAgLT4gJzU2MjY3Jw0KLQ0KLS0tIG5vdyBzb21lIG1vcmUgZnJvbSB0aGUgJ25ldycgYWRkDQotZHFzdWIzMDEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknDQotZHFzdWIzMDIgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzAuMjM0NTY3NzgnDQotDQotLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQotZHFzdWIzMjEgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnDQotZHFzdWIzMjIgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTcnDQotZHFzdWIzMjMgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcwLjk5OTYnDQotZHFzdWIzMjQgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcwLjk5OTUnDQotZHFzdWIzMjUgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAwJyAtPiAnMC45OTk4Jw0KLWRxc3ViMzI2IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMScgLT4gJzAuOTk5OScNCi1kcXN1YjMyNyBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDInIC0+ICcxLjAwMDAnDQotZHFzdWIzMjggc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAzJyAtPiAnMS4wMDAxJw0KLQ0KLS0tIGludGVybmFsIGJvdW5kYXJpZXMNCi1kcXN1YjM0NiBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNycgICAtPiAnOTk5OTk5OTk5OTk5MycNCi1kcXN1YjM0NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnICAgLT4gJzk5OTk5OTk5OTk5MzAnDQotZHFzdWIzNDggc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMCcgICAtPiAnOTk5OTk5OTk5OTMwMCcNCi1kcXN1YjM0OSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMCcgICAtPiAnOTk5OTk5OTk5MzAwMCcNCi1kcXN1YjM1MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnICAgLT4gJzk5OTk5OTk5MzAwMDAnDQotZHFzdWIzNTEgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAwMCcgICAtPiAnOTk5OTk5OTMwMDAwMCcNCi1kcXN1YjM1MiBzdWJ0cmFjdCAnNycgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTk5MycNCi1kcXN1YjM1MyBzdWJ0cmFjdCAnNzAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5MzAnDQotZHFzdWIzNTQgc3VidHJhY3QgJzcwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTMwMCcNCi1kcXN1YjM1NSBzdWJ0cmFjdCAnNzAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5MzAwMCcNCi1kcXN1YjM1NiBzdWJ0cmFjdCAnNzAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5MzAwMDAnDQotZHFzdWIzNTcgc3VidHJhY3QgJzcwMDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTMwMDAwMCcNCi0NCi0tLSB6ZXJvIHByZXNlcnZhdGlvbg0KLWRxc3ViMzYxIHN1YnRyYWN0IDEgJzAuMDAwMScgLT4gJzAuOTk5OScNCi1kcXN1YjM2MiBzdWJ0cmFjdCAxICcwLjAwMDAxJyAtPiAnMC45OTk5OScNCi1kcXN1YjM2MyBzdWJ0cmFjdCAxICcwLjAwMDAwMScgLT4gJzAuOTk5OTk5Jw0KLWRxc3ViMzY0IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcXN1YjM2NSBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViMzY2IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCi1kcXN1YjM3MCBzdWJ0cmFjdCAxICAwICAtPiAxDQotZHFzdWIzNzEgc3VidHJhY3QgMSAwLiAgLT4gMQ0KLWRxc3ViMzcyIHN1YnRyYWN0IDEgIC4wIC0+IDEuMA0KLWRxc3ViMzczIHN1YnRyYWN0IDEgMC4wIC0+IDEuMA0KLWRxc3ViMzc0IHN1YnRyYWN0ICAwICAxIC0+IC0xDQotZHFzdWIzNzUgc3VidHJhY3QgMC4gIDEgLT4gLTENCi1kcXN1YjM3NiBzdWJ0cmFjdCAgLjAgMSAtPiAtMS4wDQotZHFzdWIzNzcgc3VidHJhY3QgMC4wIDEgLT4gLTEuMA0KLQ0KLS0tIGxlYWRpbmcgMCBkaWdpdCBiZWZvcmUgcm91bmQNCi1kcXN1YjkxMCBzdWJ0cmFjdCAtMTAzNTE5MzYyIC01MTg5Nzk1NS4zIC0+IC01MTYyMTQwNi43DQotZHFzdWI5MTEgc3VidHJhY3QgMTU5NTc5LjQ0NCA4OTgyNy41MjI5IC0+IDY5NzUxLjkyMTENCi0NCi1kcXN1YjkyMCBzdWJ0cmFjdCAzMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NiAtPiAyOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjkyMSBzdWJ0cmFjdCAzMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NSAtPiAzMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjkyMiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUNCi1kcXN1YjkyMyBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NCAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYNCi1kcXN1YjkyNCBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU0MCAtPiAxMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiBSb3VuZGVkDQotZHFzdWI5MjUgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjAgLT4gIDkwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzdWI5MjYgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjEgLT4gIDg5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFzdWI5Mjcgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gIDg5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0DQotZHFzdWI5Mjggc3VidHJhY3QgMTAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgOTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0DQotZHFzdWI5Mjkgc3VidHJhY3QgMTAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgOTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gICAxLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0DQotDQotLS0gbW9yZSBMSFMgc3dhcHMgW3dlcmUgZml4ZWRdDQotZHFzdWIzOTAgc3VidHJhY3QgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnDQotZHFzdWIzOTEgc3VidHJhY3QgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycNCi1kcXN1YjM5MiBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQotZHFzdWIzOTMgc3VidHJhY3QgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnDQotZHFzdWIzOTQgc3VidHJhY3QgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnDQotZHFzdWIzOTUgc3VidHJhY3QgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQotZHFzdWIzOTYgc3VidHJhY3QgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnDQotZHFzdWIzOTcgc3VidHJhY3QgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycNCi1kcXN1YjM5OCBzdWJ0cmFjdCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KLWRxc3ViMzk5IHN1YnRyYWN0ICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycNCi1kcXN1YjQwMCBzdWJ0cmFjdCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1Jw0KLWRxc3ViNDAxIHN1YnRyYWN0ICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCi1kcXN1YjQwMiBzdWJ0cmFjdCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScNCi1kcXN1YjQwMyBzdWJ0cmFjdCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScNCi1kcXN1YjQwNCBzdWJ0cmFjdCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQotZHFzdWI0MDUgc3VidHJhY3QgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcNCi1kcXN1YjQwNiBzdWJ0cmFjdCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcNCi1kcXN1YjQwNyBzdWJ0cmFjdCAnLTVFMzMnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQotZHFzdWI0MDggc3VidHJhY3QgJy01RTM0JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICBSb3VuZGVkDQotZHFzdWI0MDkgc3VidHJhY3QgJy01RTM1JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICBSb3VuZGVkDQotZHFzdWI0MTAgc3VidHJhY3QgJy01RTM2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICBSb3VuZGVkDQotZHFzdWI0MTEgc3VidHJhY3QgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkDQotDQotLS0gbW9yZSBSSFMgc3dhcHMgW3dlcmUgZml4ZWRdDQotZHFzdWI0MjAgc3VidHJhY3QgMCAgJy01NjI2N0UtMTAnIC0+ICAnMC4wMDAwMDU2MjY3Jw0KLWRxc3ViNDIxIHN1YnRyYWN0IDAgICctNTYyNjdFLTYnICAtPiAgJzAuMDU2MjY3Jw0KLWRxc3ViNDIyIHN1YnRyYWN0IDAgICctNTYyNjdFLTUnICAtPiAgJzAuNTYyNjcnDQotZHFzdWI0MjMgc3VidHJhY3QgMCAgJy01NjI2N0UtNCcgIC0+ICAnNS42MjY3Jw0KLWRxc3ViNDI0IHN1YnRyYWN0IDAgICctNTYyNjdFLTMnICAtPiAgJzU2LjI2NycNCi1kcXN1YjQyNSBzdWJ0cmFjdCAwICAnLTU2MjY3RS0yJyAgLT4gICc1NjIuNjcnDQotZHFzdWI0MjYgc3VidHJhY3QgMCAgJy01NjI2N0UtMScgIC0+ICAnNTYyNi43Jw0KLWRxc3ViNDI3IHN1YnRyYWN0IDAgICctNTYyNjdFLTAnICAtPiAgJzU2MjY3Jw0KLWRxc3ViNDI4IHN1YnRyYWN0IDAgICctNUUtMTAnICAgICAtPiAgJzVFLTEwJw0KLWRxc3ViNDI5IHN1YnRyYWN0IDAgICctNUUtNycgICAgICAtPiAgJzVFLTcnDQotZHFzdWI0MzAgc3VidHJhY3QgMCAgJy01RS02JyAgICAgIC0+ICAnMC4wMDAwMDUnDQotZHFzdWI0MzEgc3VidHJhY3QgMCAgJy01RS01JyAgICAgIC0+ICAnMC4wMDAwNScNCi1kcXN1YjQzMiBzdWJ0cmFjdCAwICAnLTVFLTQnICAgICAgLT4gICcwLjAwMDUnDQotZHFzdWI0MzMgc3VidHJhY3QgMCAgJy01RS0xJyAgICAgIC0+ICAnMC41Jw0KLWRxc3ViNDM0IHN1YnRyYWN0IDAgICctNUUwJyAgICAgICAtPiAgJzUnDQotZHFzdWI0MzUgc3VidHJhY3QgMCAgJy01RTEnICAgICAgIC0+ICAnNTAnDQotZHFzdWI0MzYgc3VidHJhY3QgMCAgJy01RTUnICAgICAgIC0+ICAnNTAwMDAwJw0KLWRxc3ViNDM3IHN1YnRyYWN0IDAgICctNUUzMycgICAgICAtPiAgJzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQotZHFzdWI0Mzggc3VidHJhY3QgMCAgJy01RTM0JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgIFJvdW5kZWQNCi1kcXN1YjQzOSBzdWJ0cmFjdCAwICAnLTVFMzUnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICAgUm91bmRlZA0KLWRxc3ViNDQwIHN1YnRyYWN0IDAgICctNUUzNicgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkDQotZHFzdWI0NDEgc3VidHJhY3QgMCAgJy01RTEwMCcgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQNCi0NCi0NCi0tLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KLWRxc3ViNDYxIHN1YnRyYWN0ICcxRSsxNicgJzEnICAgICAgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScNCi1kcXN1YjQ2MiBzdWJ0cmFjdCAnMUUrMTInICctMS4xMTEnICAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJw0KLWRxc3ViNDYzIHN1YnRyYWN0ICcxLjExMScgICctMUUrMTInICAtPiAnMTAwMDAwMDAwMDAwMS4xMTEnDQotZHFzdWI0NjQgc3VidHJhY3QgJy0xJyAgICAnLTFFKzE2JyAgIC0+ICc5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxc3ViNDY1IHN1YnRyYWN0ICc3RSsxNScgJzEnICAgICAgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScNCi1kcXN1YjQ2NiBzdWJ0cmFjdCAnN0UrMTInICctMS4xMTEnICAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJw0KLWRxc3ViNDY3IHN1YnRyYWN0ICcxLjExMScgICctN0UrMTInICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnDQotZHFzdWI0Njggc3VidHJhY3QgJy0xJyAgICAnLTdFKzE1JyAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5Jw0KLQ0KLS0tICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDUNCi1kcXN1YjQ3MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI0NzEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNDcyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjQ3MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI0NzQgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNDc1IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjQ3NiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI0Nzcgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1kcXN1YjQ3OCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFzdWI0Nzkgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4Jw0KLWRxc3ViNDgwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NycNCi1kcXN1YjQ4MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYnDQotZHFzdWI0ODIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1Jw0KLWRxc3ViNDgzIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NCcNCi0NCi0tLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzDQotcm91bmRpbmc6IGhhbGZfdXANCi1kcXN1YjUwMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScNCi1kcXN1YjUwMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MDIgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTAzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUwNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MDUgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTA2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUwNyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MDggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTA5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUxMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MTEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTEyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUxMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MTQgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTE1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUxNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcNCi1kcXN1YjUxNyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MTggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTE5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZHFzdWI1MjAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknDQotZHFzdWI1MjEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTIyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUyMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MjQgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTI1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUyNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1Mjcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTI4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUyOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MzAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTMxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUzMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MzMgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTM0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUzNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MzYgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnDQotZHFzdWI1Mzcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTM4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUzOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCi1kcXN1YjU0MCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NDEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTQyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRxc3ViNTUwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5Jw0KLWRxc3ViNTUxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU1MiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NTMgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTU0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU1NSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NTYgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTU3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU1OCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NTkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTYwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU2MSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NjIgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTYzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU2NCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NjUgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTY2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4Jw0KLWRxc3ViNTY3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU2OCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1Njkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHN5bW1ldHJ5Li4uDQotcm91bmRpbmc6IGhhbGZfdXANCi1kcXN1YjYwMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknDQotZHFzdWI2MDEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYwMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjAzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MDQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYwNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjA2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MDcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYwOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjA5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MTAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYxMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjEyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MTMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYxNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjE1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MTYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4Jw0KLWRxc3ViNjE3IHN1YnRyYWN0IDEuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MTggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYxOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kcXN1YjYyMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknDQotZHFzdWI2MjEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYyMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjIzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MjQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYyNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjI2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2Mjcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYyOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjI5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MzAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYzMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjMyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MzMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYzNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjM1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MzYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4Jw0KLWRxc3ViNjM3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2Mzggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYzOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZHFzdWI2NDAgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY0MSBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjQyIHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kcXN1YjY1MCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknDQotZHFzdWI2NTEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY1MiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjUzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NTQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY1NSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjU2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NTcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY1OCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjU5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NjAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY2MSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjYyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NjMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY2NCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjY1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NjYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4Jw0KLWRxc3ViNjY3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2Njggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY2OSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLQ0KLQ0KLS0tIGxvdHMgb2YgbGVhZGluZyB6ZXJvcyBpbiBpbnRlcm1lZGlhdGUgcmVzdWx0LCBhbmQgc2hvd2luZyBlZmZlY3RzIG9mDQotLS0gaW5wdXQgcm91bmRpbmcgd291bGQgaGF2ZSBhZmZlY3RlZCB0aGUgZm9sbG93aW5nDQotcm91bmRpbmc6IGhhbGZfdXANCi1kcXN1YjY3MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45DQotZHFzdWI2NzEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQ0KLWRxc3ViNjcyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xDQotZHFzdWI2NzMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUNCi1kcXN1YjY3NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQ0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kcXN1YjY4MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45DQotZHFzdWI2ODEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQ0KLWRxc3ViNjgyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xDQotZHFzdWI2ODMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUNCi1kcXN1YjY4NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQ0KLQ0KLWRxc3ViNjg1IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny4xJyAtPiAwLjkNCi1kcXN1YjY4NiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODcuOScgLT4gMC4xDQotZHFzdWI2ODcgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjEnIC0+IC0wLjENCi1kcXN1YjY4OCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguNScgLT4gLTAuNQ0KLWRxc3ViNjg5IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAtMC45DQotDQotcm91bmRpbmc6IGRvd24NCi1kcXN1YjY5MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45DQotZHFzdWI2OTEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQ0KLWRxc3ViNjkyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xDQotZHFzdWI2OTMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUNCi1kcXN1YjY5NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQ0KLQ0KLS0tIFNwZWNpYWxzDQotZHFzdWI3ODAgc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxc3ViNzgxIHN1YnRyYWN0IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1kcXN1Yjc4MiBzdWJ0cmFjdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZHFzdWI3ODMgc3VidHJhY3QgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWRxc3ViNzg0IHN1YnRyYWN0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kcXN1Yjc4NSBzdWJ0cmFjdCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZHFzdWI3ODcgc3VidHJhY3QgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxc3ViNzg4IHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcXN1Yjc4OSBzdWJ0cmFjdCAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5DQotZHFzdWI3OTAgc3VidHJhY3QgIDAgICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxc3ViNzkxIHN1YnRyYWN0ICAxICAgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcXN1Yjc5MiBzdWJ0cmFjdCAgMTAwMCAgSW5mICAgLT4gLUluZmluaXR5DQotDQotZHFzdWI4MDAgc3VidHJhY3QgIEluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4MDEgc3VidHJhY3QgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxc3ViODAyIHN1YnRyYWN0ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kcXN1YjgwMyBzdWJ0cmFjdCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZHFzdWI4MDQgc3VidHJhY3QgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRxc3ViODA1IHN1YnRyYWN0ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1kcXN1YjgwNiBzdWJ0cmFjdCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZHFzdWI4MDcgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRxc3ViODA4IHN1YnRyYWN0IC0xMDAwIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcXN1YjgwOSBzdWJ0cmFjdCAtSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXN1YjgxMCBzdWJ0cmFjdCAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5DQotZHFzdWI4MTEgc3VidHJhY3QgLTAgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRxc3ViODEyIHN1YnRyYWN0ICAwICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcXN1YjgxMyBzdWJ0cmFjdCAgMSAgICAtSW5mICAgLT4gIEluZmluaXR5DQotZHFzdWI4MTQgc3VidHJhY3QgIDEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRxc3ViODE1IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcXN1YjgyMSBzdWJ0cmFjdCAgTmFOICAgSW5mICAgLT4gIE5hTg0KLWRxc3ViODIyIHN1YnRyYWN0IC1OYU4gICAxMDAwICAtPiAtTmFODQotZHFzdWI4MjMgc3VidHJhY3QgIE5hTiAgIDEgICAgIC0+ICBOYU4NCi1kcXN1YjgyNCBzdWJ0cmFjdCAgTmFOICAgMCAgICAgLT4gIE5hTg0KLWRxc3ViODI1IHN1YnRyYWN0ICBOYU4gIC0wICAgICAtPiAgTmFODQotZHFzdWI4MjYgc3VidHJhY3QgIE5hTiAgLTEgICAgIC0+ICBOYU4NCi1kcXN1YjgyNyBzdWJ0cmFjdCAgTmFOICAtMTAwMCAgLT4gIE5hTg0KLWRxc3ViODI4IHN1YnRyYWN0ICBOYU4gIC1JbmYgICAtPiAgTmFODQotZHFzdWI4Mjkgc3VidHJhY3QgLU5hTiAgIE5hTiAgIC0+IC1OYU4NCi1kcXN1YjgzMCBzdWJ0cmFjdCAtSW5mICAgTmFOICAgLT4gIE5hTg0KLWRxc3ViODMxIHN1YnRyYWN0IC0xMDAwICBOYU4gICAtPiAgTmFODQotZHFzdWI4MzIgc3VidHJhY3QgLTEgICAgIE5hTiAgIC0+ICBOYU4NCi1kcXN1YjgzMyBzdWJ0cmFjdCAtMCAgICAgTmFOICAgLT4gIE5hTg0KLWRxc3ViODM0IHN1YnRyYWN0ICAwICAgICBOYU4gICAtPiAgTmFODQotZHFzdWI4MzUgc3VidHJhY3QgIDEgICAgIE5hTiAgIC0+ICBOYU4NCi1kcXN1YjgzNiBzdWJ0cmFjdCAgMTAwMCAtTmFOICAgLT4gLU5hTg0KLWRxc3ViODM3IHN1YnRyYWN0ICBJbmYgICBOYU4gICAtPiAgTmFODQotDQotZHFzdWI4NDEgc3VidHJhY3QgIHNOYU4gIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NDIgc3VidHJhY3QgLXNOYU4gIDEwMDAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NDMgc3VidHJhY3QgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NDQgc3VidHJhY3QgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NDUgc3VidHJhY3QgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NDYgc3VidHJhY3QgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NDcgc3VidHJhY3QgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NDggc3VidHJhY3QgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NDkgc3VidHJhY3QgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NTAgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NTEgc3VidHJhY3QgLUluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NTIgc3VidHJhY3QgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NTMgc3VidHJhY3QgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NTQgc3VidHJhY3QgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NTUgc3VidHJhY3QgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NTYgc3VidHJhY3QgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NTcgc3VidHJhY3QgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NTggc3VidHJhY3QgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NTkgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxc3ViODYxIHN1YnRyYWN0ICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xDQotZHFzdWI4NjIgc3VidHJhY3QgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjINCi1kcXN1Yjg2MyBzdWJ0cmFjdCAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMw0KLWRxc3ViODY0IHN1YnRyYWN0ICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40DQotZHFzdWI4NjUgc3VidHJhY3QgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUNCi1kcXN1Yjg2NiBzdWJ0cmFjdCAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzENCi1kcXN1Yjg2NyBzdWJ0cmFjdCAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODENCi1kcXN1Yjg2OCBzdWJ0cmFjdCAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTENCi1kcXN1Yjg2OSBzdWJ0cmFjdCAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxDQotZHFzdWI4NzEgc3VidHJhY3QgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODcyIHN1YnRyYWN0ICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXN1Yjg3MyBzdWJ0cmFjdCAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NzQgc3VidHJhY3QgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODc1IHN1YnRyYWN0ICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXN1Yjg3NiBzdWJ0cmFjdCAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4Nzcgc3VidHJhY3QgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODc4IHN1YnRyYWN0IC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcXN1Yjg3OSBzdWJ0cmFjdCAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4ODAgc3VidHJhY3QgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODgxIHN1YnRyYWN0ICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBlZGdlIGNhc2Ugc3BpbGxzDQotZHFzdWI5MDEgc3VidHJhY3QgIDIuRS0zICAxLjAwMiAgLT4gLTEuMDAwDQotZHFzdWI5MDIgc3VidHJhY3QgIDIuMEUtMyAgMS4wMDIgIC0+IC0xLjAwMDANCi1kcXN1YjkwMyBzdWJ0cmFjdCAgMi4wMEUtMyAgMS4wMDIwICAtPiAtMS4wMDAwMA0KLWRxc3ViOTA0IHN1YnRyYWN0ICAyLjAwMEUtMyAgMS4wMDIwMCAgLT4gLTEuMDAwMDAwDQotZHFzdWI5MDUgc3VidHJhY3QgIDIuMDAwMEUtMyAgMS4wMDIwMDAgIC0+IC0xLjAwMDAwMDANCi1kcXN1YjkwNiBzdWJ0cmFjdCAgMi4wMDAwMEUtMyAgMS4wMDIwMDAwICAtPiAtMS4wMDAwMDAwMA0KLWRxc3ViOTA3IHN1YnRyYWN0ICAyLjAwMDAwMEUtMyAgMS4wMDIwMDAwMCAgLT4gLTEuMDAwMDAwMDAwDQotZHFzdWI5MDggc3VidHJhY3QgIDIuMDAwMDAwMEUtMyAgMS4wMDIwMDAwMDAgIC0+IC0xLjAwMDAwMDAwMDANCi0NCi0tLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MgY292ZXJlZCB1bmRlciBBZGQNCi0NCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkNCi1kcXN1YjExMjUgIHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTANCi1kcXN1YjExMjYgIHN1YnRyYWN0IDEzMEUtMiAgMTJFLTEgIC0+IDAuMTANCi1kcXN1YjExMjcgIHN1YnRyYWN0IDEzMEUtMiAgMUUwICAgIC0+IDAuMzANCi1kcXN1YjExMjggIHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMNCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFzdWI5OTkwIHN1YnRyYWN0IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViOTk5MSBzdWJ0cmFjdCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxU3VidHJhY3QuZGVjVGVzdCAtLSBkZWNRdWFkIHN1YnRyYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgYXJlIGZvciBkZWNRdWFkcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQorLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY1F1YWQKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZHFzdWIwMDEgc3VidHJhY3QgIDAgICAwICAtPiAnMCcKK2Rxc3ViMDAyIHN1YnRyYWN0ICAxICAgMSAgLT4gJzAnCitkcXN1YjAwMyBzdWJ0cmFjdCAgMSAgIDIgIC0+ICctMScKK2Rxc3ViMDA0IHN1YnRyYWN0ICAyICAgMSAgLT4gJzEnCitkcXN1YjAwNSBzdWJ0cmFjdCAgMiAgIDIgIC0+ICcwJworZHFzdWIwMDYgc3VidHJhY3QgIDMgICAyICAtPiAnMScKK2Rxc3ViMDA3IHN1YnRyYWN0ICAyICAgMyAgLT4gJy0xJworCitkcXN1YjAxMSBzdWJ0cmFjdCAtMCAgIDAgIC0+ICctMCcKK2Rxc3ViMDEyIHN1YnRyYWN0IC0xICAgMSAgLT4gJy0yJworZHFzdWIwMTMgc3VidHJhY3QgLTEgICAyICAtPiAnLTMnCitkcXN1YjAxNCBzdWJ0cmFjdCAtMiAgIDEgIC0+ICctMycKK2Rxc3ViMDE1IHN1YnRyYWN0IC0yICAgMiAgLT4gJy00JworZHFzdWIwMTYgc3VidHJhY3QgLTMgICAyICAtPiAnLTUnCitkcXN1YjAxNyBzdWJ0cmFjdCAtMiAgIDMgIC0+ICctNScKKworZHFzdWIwMjEgc3VidHJhY3QgIDAgIC0wICAtPiAnMCcKK2Rxc3ViMDIyIHN1YnRyYWN0ICAxICAtMSAgLT4gJzInCitkcXN1YjAyMyBzdWJ0cmFjdCAgMSAgLTIgIC0+ICczJworZHFzdWIwMjQgc3VidHJhY3QgIDIgIC0xICAtPiAnMycKK2Rxc3ViMDI1IHN1YnRyYWN0ICAyICAtMiAgLT4gJzQnCitkcXN1YjAyNiBzdWJ0cmFjdCAgMyAgLTIgIC0+ICc1JworZHFzdWIwMjcgc3VidHJhY3QgIDIgIC0zICAtPiAnNScKKworZHFzdWIwMzAgc3VidHJhY3QgIDExICAxICAtPiAxMAorZHFzdWIwMzEgc3VidHJhY3QgIDEwICAxICAtPiAgOQorZHFzdWIwMzIgc3VidHJhY3QgIDkgICAxICAtPiAgOAorZHFzdWIwMzMgc3VidHJhY3QgIDEgICAxICAtPiAgMAorZHFzdWIwMzQgc3VidHJhY3QgIDAgICAxICAtPiAtMQorZHFzdWIwMzUgc3VidHJhY3QgLTEgICAxICAtPiAtMgorZHFzdWIwMzYgc3VidHJhY3QgLTkgICAxICAtPiAtMTAKK2Rxc3ViMDM3IHN1YnRyYWN0IC0xMCAgMSAgLT4gLTExCitkcXN1YjAzOCBzdWJ0cmFjdCAtMTEgIDEgIC0+IC0xMgorCitkcXN1YjA0MCBzdWJ0cmFjdCAnNS43NScgJzMuMycgIC0+ICcyLjQ1JworZHFzdWIwNDEgc3VidHJhY3QgJzUnICAgICctMycgICAtPiAnOCcKK2Rxc3ViMDQyIHN1YnRyYWN0ICctNScgICAnLTMnICAgLT4gJy0yJworZHFzdWIwNDMgc3VidHJhY3QgJy03JyAgICcyLjUnICAtPiAnLTkuNScKK2Rxc3ViMDQ0IHN1YnRyYWN0ICcwLjcnICAnMC4zJyAgLT4gJzAuNCcKK2Rxc3ViMDQ1IHN1YnRyYWN0ICcxLjMnICAnMC4zJyAgLT4gJzEuMCcKK2Rxc3ViMDQ2IHN1YnRyYWN0ICcxLjI1JyAnMS4yNScgLT4gJzAuMDAnCisKK2Rxc3ViMDUwIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknCitkcXN1YjA1MSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwODknIC0+ICcwLjIzNDU2NzAwJworCitkcXN1YjA2MCBzdWJ0cmFjdCAnNzAnICAgICcxMDAwMGUrMzQnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViMDYxIHN1YnRyYWN0ICc3MDAnICAgICcxMDAwMGUrMzQnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViMDYyIHN1YnRyYWN0ICc3MDAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSszNycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2MyBzdWJ0cmFjdCAnNzAwMDAnICAgICcxMDAwMGUrMzQnIC0+ICctOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTNFKzM3JyBSb3VuZGVkCitkcXN1YjA2NCBzdWJ0cmFjdCAnNzAwMDAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMwRSszNycgUm91bmRlZAorICAtLSBzeW1tZXRyeToKK2Rxc3ViMDY1IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2NiBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViMDY3IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzM3JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViMDY4IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzRSszNycgUm91bmRlZAorZHFzdWIwNjkgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMwRSszNycgUm91bmRlZAorCisgIC0tIHNvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0cworZHFzdWIwOTAgc3VidHJhY3QgJzAwLjAnICAgICcwLjAnICAtPiAnMC4wJworZHFzdWIwOTEgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcKK2Rxc3ViMDkyIHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCitkcXN1YjA5MyBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJworZHFzdWIwOTQgc3VidHJhY3QgJzAuMDAnICAgICcwMC4wJyAtPiAnMC4wMCcKK2Rxc3ViMDk1IHN1YnRyYWN0ICczJyAgICAnLjMnICAgLT4gJzIuNycKK2Rxc3ViMDk2IHN1YnRyYWN0ICczLicgICAnLjMnICAgLT4gJzIuNycKK2Rxc3ViMDk3IHN1YnRyYWN0ICczLjAnICAnLjMnICAgLT4gJzIuNycKK2Rxc3ViMDk4IHN1YnRyYWN0ICczLjAwJyAnLjMnICAgLT4gJzIuNzAnCitkcXN1YjA5OSBzdWJ0cmFjdCAnMycgICAgJzMnICAgIC0+ICcwJworZHFzdWIxMDAgc3VidHJhY3QgJzMnICAgICcrMycgICAtPiAnMCcKK2Rxc3ViMTAxIHN1YnRyYWN0ICczJyAgICAnLTMnICAgLT4gJzYnCitkcXN1YjEwMiBzdWJ0cmFjdCAnMycgICAgJzAuMycgIC0+ICcyLjcnCitkcXN1YjEwMyBzdWJ0cmFjdCAnMy4nICAgJzAuMycgIC0+ICcyLjcnCitkcXN1YjEwNCBzdWJ0cmFjdCAnMy4wJyAgJzAuMycgIC0+ICcyLjcnCitkcXN1YjEwNSBzdWJ0cmFjdCAnMy4wMCcgJzAuMycgIC0+ICcyLjcwJworZHFzdWIxMDYgc3VidHJhY3QgJzMnICAgICczLjAnICAtPiAnMC4wJworZHFzdWIxMDcgc3VidHJhY3QgJzMnICAgICcrMy4wJyAtPiAnMC4wJworZHFzdWIxMDggc3VidHJhY3QgJzMnICAgICctMy4wJyAtPiAnNi4wJworCistLSB0aGUgYWJvdmUgYWxsIGZyb20gYWRkOyBtYXNzYWdlZCBhbmQgZXh0ZW5kZWQuICBOb3cgc29tZSBuZXcgb25lcy4uLgorLS0gW3BhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGNvbXBhcmlzb25zXQorLS0gTkI6IC14RS04IGJlbG93IHdlcmUgbm9uLWV4cG9uZW50cyBwcmUtQU5TSSBYMy0yNzQsIGFuZCAtMUUtNyBvciAwRS03CistLSB3aXRoIGlucHV0IHJvdW5kaW5nLgorZHFzdWIxMjAgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy01RS04JworZHFzdWIxMjEgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy00RS04JworZHFzdWIxMjIgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0zRS04JworZHFzdWIxMjMgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0yRS04JworZHFzdWIxMjQgc3VidHJhY3QgICcxMC4yMzQ1Njc4OCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0xRS04JworZHFzdWIxMjUgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzBFLTgnCitkcXN1YjEyNiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMUUtOCcKK2Rxc3ViMTI3IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4OScgIC0+ICcyRS04JworZHFzdWIxMjggc3VidHJhY3QgICcxMC4yMzQ1Njc5MicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzNFLTgnCitkcXN1YjEyOSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkzJyAgICAnMTAuMjM0NTY3ODknICAtPiAnNEUtOCcKK2Rxc3ViMTMwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICc1RS04JworZHFzdWIxMzEgc3VidHJhY3QgICcxMC4yMzQ1Njc4MScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy01RS04JworZHFzdWIxMzIgc3VidHJhY3QgICcxMC4yMzQ1Njc4MicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy00RS04JworZHFzdWIxMzMgc3VidHJhY3QgICcxMC4yMzQ1Njc4MycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0zRS04JworZHFzdWIxMzQgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0yRS04JworZHFzdWIxMzUgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0xRS04JworZHFzdWIxMzYgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzBFLTgnCitkcXN1YjEzNyBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg3JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMUUtOCcKK2Rxc3ViMTM4IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcyRS04JworZHFzdWIxMzkgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzNFLTgnCitkcXN1YjE0MCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNEUtOCcKK2Rxc3ViMTQxIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc1RS04JworZHFzdWIxNDIgc3VidHJhY3QgICcxJyAgICAgICAgICAgICAgJzAuOTk5OTk5OTk5JyAgLT4gJzFFLTknCitkcXN1YjE0MyBzdWJ0cmFjdCAgJzAuOTk5OTk5OTk5JyAgICAnMScgICAgICAgICAgICAtPiAnLTFFLTknCitkcXN1YjE0NCBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc4MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnNkUtOCcKK2Rxc3ViMTQ1IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkwJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNEUtOCcKK2Rxc3ViMTQ2IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkxJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNUUtOCcKKworLS0gYWRkaXRpb25hbCBzY2FsZWQgYXJpdGhtZXRpYyB0ZXN0cyBbMC45NyBwcm9ibGVtXQorZHFzdWIxNjAgc3VidHJhY3QgJzAnICAgICAnLjEnICAgICAgLT4gJy0wLjEnCitkcXN1YjE2MSBzdWJ0cmFjdCAnMDAnICAgICcuOTc5ODMnICAtPiAnLTAuOTc5ODMnCitkcXN1YjE2MiBzdWJ0cmFjdCAnMCcgICAgICcuOScgICAgICAtPiAnLTAuOScKK2Rxc3ViMTYzIHN1YnRyYWN0ICcwJyAgICAgJzAuMTAyJyAgIC0+ICctMC4xMDInCitkcXN1YjE2NCBzdWJ0cmFjdCAnMCcgICAgICcuNCcgICAgICAtPiAnLTAuNCcKK2Rxc3ViMTY1IHN1YnRyYWN0ICcwJyAgICAgJy4zMDcnICAgIC0+ICctMC4zMDcnCitkcXN1YjE2NiBzdWJ0cmFjdCAnMCcgICAgICcuNDM4MjInICAtPiAnLTAuNDM4MjInCitkcXN1YjE2NyBzdWJ0cmFjdCAnMCcgICAgICcuOTExJyAgICAtPiAnLTAuOTExJworZHFzdWIxNjggc3VidHJhY3QgJy4wJyAgICAnLjAyJyAgICAgLT4gJy0wLjAyJworZHFzdWIxNjkgc3VidHJhY3QgJzAwJyAgICAnLjM5MicgICAgLT4gJy0wLjM5MicKK2Rxc3ViMTcwIHN1YnRyYWN0ICcwJyAgICAgJy4yNicgICAgIC0+ICctMC4yNicKK2Rxc3ViMTcxIHN1YnRyYWN0ICcwJyAgICAgJzAuNTEnICAgIC0+ICctMC41MScKK2Rxc3ViMTcyIHN1YnRyYWN0ICcwJyAgICAgJy4yMjM0JyAgIC0+ICctMC4yMjM0JworZHFzdWIxNzMgc3VidHJhY3QgJzAnICAgICAnLjInICAgICAgLT4gJy0wLjInCitkcXN1YjE3NCBzdWJ0cmFjdCAnLjAnICAgICcuMDAwOCcgICAtPiAnLTAuMDAwOCcKKy0tIDAuIG9uIGxlZnQKK2Rxc3ViMTgwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnCitkcXN1YjE4MSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycKK2Rxc3ViMTgyIHN1YnRyYWN0ICcwLjAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCitkcXN1YjE4MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInCitkcXN1YjE4NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uNCcgICAgICAtPiAnMC40JworZHFzdWIxODUgc3VidHJhY3QgJzAuMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3JworZHFzdWIxODYgc3VidHJhY3QgJzAuMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInCitkcXN1YjE4NyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnCitkcXN1YjE4OCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDInICAgICAtPiAnMC4wMicKK2Rxc3ViMTg5IHN1YnRyYWN0ICcwLjAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicKK2Rxc3ViMTkwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2JworZHFzdWIxOTEgc3VidHJhY3QgJzAuMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCitkcXN1YjE5MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0JworZHFzdWIxOTMgc3VidHJhY3QgJzAuMCcgICAgICctLjInICAgICAgLT4gJzAuMicKK2Rxc3ViMTk0IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCistLSBuZWdhdGl2ZXMgb2Ygc2FtZQorZHFzdWIyMDAgc3VidHJhY3QgJzAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnCitkcXN1YjIwMSBzdWJ0cmFjdCAnMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnCitkcXN1YjIwMiBzdWJ0cmFjdCAnMCcgICAgICctLjknICAgICAgLT4gJzAuOScKK2Rxc3ViMjAzIHN1YnRyYWN0ICcwJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInCitkcXN1YjIwNCBzdWJ0cmFjdCAnMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcKK2Rxc3ViMjA1IHN1YnRyYWN0ICcwJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnCitkcXN1YjIwNiBzdWJ0cmFjdCAnMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInCitkcXN1YjIwNyBzdWJ0cmFjdCAnMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJworZHFzdWIyMDggc3VidHJhY3QgJy4wJyAgICAnLS4wMicgICAgIC0+ICcwLjAyJworZHFzdWIyMDkgc3VidHJhY3QgJzAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicKK2Rxc3ViMjEwIHN1YnRyYWN0ICcwJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicKK2Rxc3ViMjExIHN1YnRyYWN0ICcwJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScKK2Rxc3ViMjEyIHN1YnRyYWN0ICcwJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0JworZHFzdWIyMTMgc3VidHJhY3QgJzAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInCitkcXN1YjIxNCBzdWJ0cmFjdCAnLjAnICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcKKworLS0gbW9yZSBmaXhlZCwgTEhTIHN3YXBzIFtyZWFsbHkgdGhlIHNhbWUgYXMgdGVzdGNhc2VzIHVuZGVyIGFkZF0KK2Rxc3ViMjIwIHN1YnRyYWN0ICctNTYyNjdFLTEyJyAwICAtPiAnLTUuNjI2N0UtOCcKK2Rxc3ViMjIxIHN1YnRyYWN0ICctNTYyNjdFLTExJyAwICAtPiAnLTUuNjI2N0UtNycKK2Rxc3ViMjIyIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAwICAtPiAnLTAuMDAwMDA1NjI2NycKK2Rxc3ViMjIzIHN1YnRyYWN0ICctNTYyNjdFLTknICAwICAtPiAnLTAuMDAwMDU2MjY3JworZHFzdWIyMjQgc3VidHJhY3QgJy01NjI2N0UtOCcgIDAgIC0+ICctMC4wMDA1NjI2NycKK2Rxc3ViMjI1IHN1YnRyYWN0ICctNTYyNjdFLTcnICAwICAtPiAnLTAuMDA1NjI2NycKK2Rxc3ViMjI2IHN1YnRyYWN0ICctNTYyNjdFLTYnICAwICAtPiAnLTAuMDU2MjY3JworZHFzdWIyMjcgc3VidHJhY3QgJy01NjI2N0UtNScgIDAgIC0+ICctMC41NjI2NycKK2Rxc3ViMjI4IHN1YnRyYWN0ICctNTYyNjdFLTInICAwICAtPiAnLTU2Mi42NycKK2Rxc3ViMjI5IHN1YnRyYWN0ICctNTYyNjdFLTEnICAwICAtPiAnLTU2MjYuNycKK2Rxc3ViMjMwIHN1YnRyYWN0ICctNTYyNjdFLTAnICAwICAtPiAnLTU2MjY3JworLS0gc3ltbWV0cnkgLi4uCitkcXN1YjI0MCBzdWJ0cmFjdCAwICctNTYyNjdFLTEyJyAgLT4gJzUuNjI2N0UtOCcKK2Rxc3ViMjQxIHN1YnRyYWN0IDAgJy01NjI2N0UtMTEnICAtPiAnNS42MjY3RS03JworZHFzdWIyNDIgc3VidHJhY3QgMCAnLTU2MjY3RS0xMCcgIC0+ICcwLjAwMDAwNTYyNjcnCitkcXN1YjI0MyBzdWJ0cmFjdCAwICctNTYyNjdFLTknICAgLT4gJzAuMDAwMDU2MjY3JworZHFzdWIyNDQgc3VidHJhY3QgMCAnLTU2MjY3RS04JyAgIC0+ICcwLjAwMDU2MjY3JworZHFzdWIyNDUgc3VidHJhY3QgMCAnLTU2MjY3RS03JyAgIC0+ICcwLjAwNTYyNjcnCitkcXN1YjI0NiBzdWJ0cmFjdCAwICctNTYyNjdFLTYnICAgLT4gJzAuMDU2MjY3JworZHFzdWIyNDcgc3VidHJhY3QgMCAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3JworZHFzdWIyNDggc3VidHJhY3QgMCAnLTU2MjY3RS0yJyAgIC0+ICc1NjIuNjcnCitkcXN1YjI0OSBzdWJ0cmFjdCAwICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycKK2Rxc3ViMjUwIHN1YnRyYWN0IDAgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnCisKKy0tIG5vdyBzb21lIG1vcmUgZnJvbSB0aGUgJ25ldycgYWRkCitkcXN1YjMwMSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScKK2Rxc3ViMzAyIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcwLjIzNDU2Nzc4JworCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2Rxc3ViMzIxIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworZHFzdWIzMjIgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTcnCitkcXN1YjMyMyBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzAuOTk5NicKK2Rxc3ViMzI0IHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMC45OTk1JworZHFzdWIzMjUgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAwJyAtPiAnMC45OTk4JworZHFzdWIzMjYgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAxJyAtPiAnMC45OTk5JworZHFzdWIzMjcgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAyJyAtPiAnMS4wMDAwJworZHFzdWIzMjggc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAzJyAtPiAnMS4wMDAxJworCistLSBpbnRlcm5hbCBib3VuZGFyaWVzCitkcXN1YjM0NiBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNycgICAtPiAnOTk5OTk5OTk5OTk5MycKK2Rxc3ViMzQ3IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MCcgICAtPiAnOTk5OTk5OTk5OTkzMCcKK2Rxc3ViMzQ4IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAnICAgLT4gJzk5OTk5OTk5OTkzMDAnCitkcXN1YjM0OSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMCcgICAtPiAnOTk5OTk5OTk5MzAwMCcKK2Rxc3ViMzUwIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMCcgICAtPiAnOTk5OTk5OTkzMDAwMCcKK2Rxc3ViMzUxIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMDAnICAgLT4gJzk5OTk5OTkzMDAwMDAnCitkcXN1YjM1MiBzdWJ0cmFjdCAnNycgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTk5MycKK2Rxc3ViMzUzIHN1YnRyYWN0ICc3MCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTkzMCcKK2Rxc3ViMzU0IHN1YnRyYWN0ICc3MDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTkzMDAnCitkcXN1YjM1NSBzdWJ0cmFjdCAnNzAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5MzAwMCcKK2Rxc3ViMzU2IHN1YnRyYWN0ICc3MDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTkzMDAwMCcKK2Rxc3ViMzU3IHN1YnRyYWN0ICc3MDAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTkzMDAwMDAnCisKKy0tIHplcm8gcHJlc2VydmF0aW9uCitkcXN1YjM2MSBzdWJ0cmFjdCAxICcwLjAwMDEnIC0+ICcwLjk5OTknCitkcXN1YjM2MiBzdWJ0cmFjdCAxICcwLjAwMDAxJyAtPiAnMC45OTk5OScKK2Rxc3ViMzYzIHN1YnRyYWN0IDEgJzAuMDAwMDAxJyAtPiAnMC45OTk5OTknCitkcXN1YjM2NCBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcXN1YjM2NSBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZHFzdWIzNjYgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2Rxc3ViMzcwIHN1YnRyYWN0IDEgIDAgIC0+IDEKK2Rxc3ViMzcxIHN1YnRyYWN0IDEgMC4gIC0+IDEKK2Rxc3ViMzcyIHN1YnRyYWN0IDEgIC4wIC0+IDEuMAorZHFzdWIzNzMgc3VidHJhY3QgMSAwLjAgLT4gMS4wCitkcXN1YjM3NCBzdWJ0cmFjdCAgMCAgMSAtPiAtMQorZHFzdWIzNzUgc3VidHJhY3QgMC4gIDEgLT4gLTEKK2Rxc3ViMzc2IHN1YnRyYWN0ICAuMCAxIC0+IC0xLjAKK2Rxc3ViMzc3IHN1YnRyYWN0IDAuMCAxIC0+IC0xLjAKKworLS0gbGVhZGluZyAwIGRpZ2l0IGJlZm9yZSByb3VuZAorZHFzdWI5MTAgc3VidHJhY3QgLTEwMzUxOTM2MiAtNTE4OTc5NTUuMyAtPiAtNTE2MjE0MDYuNworZHFzdWI5MTEgc3VidHJhY3QgMTU5NTc5LjQ0NCA4OTgyNy41MjI5IC0+IDY5NzUxLjkyMTEKKworZHFzdWI5MjAgc3VidHJhY3QgMzMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gMjk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcXN1YjkyMSBzdWJ0cmFjdCAzMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NSAtPiAzMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViOTIyIHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY1IC0+ICA5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQorZHFzdWI5MjMgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjQgLT4gIDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcXN1YjkyNCBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU0MCAtPiAxMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiBSb3VuZGVkCitkcXN1YjkyNSBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2MCAtPiAgOTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc3ViOTI2IHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYxIC0+ICA4OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFzdWI5Mjcgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gIDg5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0CitkcXN1YjkyOCBzdWJ0cmFjdCAxMDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiA5MS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NiAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKK2Rxc3ViOTI5IHN1YnRyYWN0IDEwMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDk5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+ICAgMS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NAorCistLSBtb3JlIExIUyBzd2FwcyBbd2VyZSBmaXhlZF0KK2Rxc3ViMzkwIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZHFzdWIzOTEgc3VidHJhY3QgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2Rxc3ViMzkyIHN1YnRyYWN0ICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2Rxc3ViMzkzIHN1YnRyYWN0ICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZHFzdWIzOTQgc3VidHJhY3QgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitkcXN1YjM5NSBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2Rxc3ViMzk2IHN1YnRyYWN0ICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZHFzdWIzOTcgc3VidHJhY3QgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2Rxc3ViMzk4IHN1YnRyYWN0ICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitkcXN1YjM5OSBzdWJ0cmFjdCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitkcXN1YjQwMCBzdWJ0cmFjdCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZHFzdWI0MDEgc3VidHJhY3QgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZHFzdWI0MDIgc3VidHJhY3QgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitkcXN1YjQwMyBzdWJ0cmFjdCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2Rxc3ViNDA0IHN1YnRyYWN0ICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2Rxc3ViNDA1IHN1YnRyYWN0ICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitkcXN1YjQwNiBzdWJ0cmFjdCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2Rxc3ViNDA3IHN1YnRyYWN0ICctNUUzMycgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2Rxc3ViNDA4IHN1YnRyYWN0ICctNUUzNCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgUm91bmRlZAorZHFzdWI0MDkgc3VidHJhY3QgJy01RTM1JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICBSb3VuZGVkCitkcXN1YjQxMCBzdWJ0cmFjdCAnLTVFMzYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgIFJvdW5kZWQKK2Rxc3ViNDExIHN1YnRyYWN0ICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcyBbd2VyZSBmaXhlZF0KK2Rxc3ViNDIwIHN1YnRyYWN0IDAgICctNTYyNjdFLTEwJyAtPiAgJzAuMDAwMDA1NjI2NycKK2Rxc3ViNDIxIHN1YnRyYWN0IDAgICctNTYyNjdFLTYnICAtPiAgJzAuMDU2MjY3JworZHFzdWI0MjIgc3VidHJhY3QgMCAgJy01NjI2N0UtNScgIC0+ICAnMC41NjI2NycKK2Rxc3ViNDIzIHN1YnRyYWN0IDAgICctNTYyNjdFLTQnICAtPiAgJzUuNjI2NycKK2Rxc3ViNDI0IHN1YnRyYWN0IDAgICctNTYyNjdFLTMnICAtPiAgJzU2LjI2NycKK2Rxc3ViNDI1IHN1YnRyYWN0IDAgICctNTYyNjdFLTInICAtPiAgJzU2Mi42NycKK2Rxc3ViNDI2IHN1YnRyYWN0IDAgICctNTYyNjdFLTEnICAtPiAgJzU2MjYuNycKK2Rxc3ViNDI3IHN1YnRyYWN0IDAgICctNTYyNjdFLTAnICAtPiAgJzU2MjY3JworZHFzdWI0Mjggc3VidHJhY3QgMCAgJy01RS0xMCcgICAgIC0+ICAnNUUtMTAnCitkcXN1YjQyOSBzdWJ0cmFjdCAwICAnLTVFLTcnICAgICAgLT4gICc1RS03JworZHFzdWI0MzAgc3VidHJhY3QgMCAgJy01RS02JyAgICAgIC0+ICAnMC4wMDAwMDUnCitkcXN1YjQzMSBzdWJ0cmFjdCAwICAnLTVFLTUnICAgICAgLT4gICcwLjAwMDA1JworZHFzdWI0MzIgc3VidHJhY3QgMCAgJy01RS00JyAgICAgIC0+ICAnMC4wMDA1JworZHFzdWI0MzMgc3VidHJhY3QgMCAgJy01RS0xJyAgICAgIC0+ICAnMC41JworZHFzdWI0MzQgc3VidHJhY3QgMCAgJy01RTAnICAgICAgIC0+ICAnNScKK2Rxc3ViNDM1IHN1YnRyYWN0IDAgICctNUUxJyAgICAgICAtPiAgJzUwJworZHFzdWI0MzYgc3VidHJhY3QgMCAgJy01RTUnICAgICAgIC0+ICAnNTAwMDAwJworZHFzdWI0Mzcgc3VidHJhY3QgMCAgJy01RTMzJyAgICAgIC0+ICAnNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2Rxc3ViNDM4IHN1YnRyYWN0IDAgICctNUUzNCcgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgICBSb3VuZGVkCitkcXN1YjQzOSBzdWJ0cmFjdCAwICAnLTVFMzUnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICAgUm91bmRlZAorZHFzdWI0NDAgc3VidHJhY3QgMCAgJy01RTM2JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgIFJvdW5kZWQKK2Rxc3ViNDQxIHN1YnRyYWN0IDAgICctNUUxMDAnICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2Rxc3ViNDYxIHN1YnRyYWN0ICcxRSsxNicgJzEnICAgICAgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScKK2Rxc3ViNDYyIHN1YnRyYWN0ICcxRSsxMicgJy0xLjExMScgICAtPiAnMTAwMDAwMDAwMDAwMS4xMTEnCitkcXN1YjQ2MyBzdWJ0cmFjdCAnMS4xMTEnICAnLTFFKzEyJyAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJworZHFzdWI0NjQgc3VidHJhY3QgJy0xJyAgICAnLTFFKzE2JyAgIC0+ICc5OTk5OTk5OTk5OTk5OTk5JworZHFzdWI0NjUgc3VidHJhY3QgJzdFKzE1JyAnMScgICAgICAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5JworZHFzdWI0NjYgc3VidHJhY3QgJzdFKzEyJyAnLTEuMTExJyAgIC0+ICc3MDAwMDAwMDAwMDAxLjExMScKK2Rxc3ViNDY3IHN1YnRyYWN0ICcxLjExMScgICctN0UrMTInICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnCitkcXN1YjQ2OCBzdWJ0cmFjdCAnLTEnICAgICctN0UrMTUnICAgLT4gJzY5OTk5OTk5OTk5OTk5OTknCisKKy0tICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDUKK2Rxc3ViNDcwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDcxIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDcyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDczIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDc0IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDc1IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDc2IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDc3IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkcXN1YjQ3OCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcXN1YjQ3OSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnCitkcXN1YjQ4MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcnCitkcXN1YjQ4MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYnCitkcXN1YjQ4MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUnCitkcXN1YjQ4MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQnCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkcXN1YjUwMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKK2Rxc3ViNTAxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTAyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTAzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTEwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTExIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTEyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTEzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTE0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTE1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTE2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI1MTcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1MTggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1MTkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcXN1YjUyMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKK2Rxc3ViNTIxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTIyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTIzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTMwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTMxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTMyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTMzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTM0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTM1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTM2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI1Mzcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1Mzggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1Mzkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2Rxc3ViNTQwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTQxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTQyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2Rxc3ViNTUwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JworZHFzdWI1NTEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTIgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTMgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTQgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTUgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTYgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjIgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjMgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjQgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjUgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjYgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnCitkcXN1YjU2NyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjU2OCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjU2OSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5Li4uCityb3VuZGluZzogaGFsZl91cAorZHFzdWI2MDAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JworZHFzdWI2MDEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjAyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MDQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjA1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MDcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjA4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjExIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjE0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI2MTcgc3VidHJhY3QgMS4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjE4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcXN1YjYyMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknCitkcXN1YjYyMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MjIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjIzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYyNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MjUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjI2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYyNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2Mjggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjI5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MzEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjMyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MzQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjM1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnCitkcXN1YjYzNyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2Mzggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjM5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZHFzdWI2NDAgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjQxIHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY0MiBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZHFzdWI2NTAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JworZHFzdWI2NTEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjUyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1MyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NTQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjU1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1NiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NTcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjU4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1OSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NjAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjYxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2MiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NjMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjY0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2NSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NjYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI2Njcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjY4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2OSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGxvdHMgb2YgbGVhZGluZyB6ZXJvcyBpbiBpbnRlcm1lZGlhdGUgcmVzdWx0LCBhbmQgc2hvd2luZyBlZmZlY3RzIG9mCistLSBpbnB1dCByb3VuZGluZyB3b3VsZCBoYXZlIGFmZmVjdGVkIHRoZSBmb2xsb3dpbmcKK3JvdW5kaW5nOiBoYWxmX3VwCitkcXN1YjY3MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45CitkcXN1YjY3MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xCitkcXN1YjY3MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQorZHFzdWI2NzMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUKK2Rxc3ViNjc0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45CisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2Rxc3ViNjgwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkKK2Rxc3ViNjgxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjEKK2Rxc3ViNjgyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xCitkcXN1YjY4MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQorZHFzdWI2ODQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkKKworZHFzdWI2ODUgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjEnIC0+IDAuOQorZHFzdWI2ODYgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjknIC0+IDAuMQorZHFzdWI2ODcgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjEnIC0+IC0wLjEKK2Rxc3ViNjg4IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC41JyAtPiAtMC41CitkcXN1YjY4OSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguOScgLT4gLTAuOQorCityb3VuZGluZzogZG93bgorZHFzdWI2OTAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQorZHFzdWI2OTEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQorZHFzdWI2OTIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjEKK2Rxc3ViNjkzIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41CitkcXN1YjY5NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQorCistLSBTcGVjaWFscworZHFzdWI3ODAgc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODEgc3VidHJhY3QgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODIgc3VidHJhY3QgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODMgc3VidHJhY3QgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODQgc3VidHJhY3QgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODUgc3VidHJhY3QgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODcgc3VidHJhY3QgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODggc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODkgc3VidHJhY3QgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3OTAgc3VidHJhY3QgIDAgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3OTEgc3VidHJhY3QgIDEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3OTIgc3VidHJhY3QgIDEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorCitkcXN1YjgwMCBzdWJ0cmFjdCAgSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODAxIHN1YnRyYWN0ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2Rxc3ViODAyIHN1YnRyYWN0ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2Rxc3ViODAzIHN1YnRyYWN0ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2Rxc3ViODA0IHN1YnRyYWN0ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2Rxc3ViODA1IHN1YnRyYWN0ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2Rxc3ViODA2IHN1YnRyYWN0ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2Rxc3ViODA3IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODA4IHN1YnRyYWN0IC0xMDAwIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODA5IHN1YnRyYWN0IC1JbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4MTAgc3VidHJhY3QgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFzdWI4MTEgc3VidHJhY3QgLTAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFzdWI4MTIgc3VidHJhY3QgIDAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFzdWI4MTMgc3VidHJhY3QgIDEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFzdWI4MTQgc3VidHJhY3QgIDEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFzdWI4MTUgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCitkcXN1YjgyMSBzdWJ0cmFjdCAgTmFOICAgSW5mICAgLT4gIE5hTgorZHFzdWI4MjIgc3VidHJhY3QgLU5hTiAgIDEwMDAgIC0+IC1OYU4KK2Rxc3ViODIzIHN1YnRyYWN0ICBOYU4gICAxICAgICAtPiAgTmFOCitkcXN1YjgyNCBzdWJ0cmFjdCAgTmFOICAgMCAgICAgLT4gIE5hTgorZHFzdWI4MjUgc3VidHJhY3QgIE5hTiAgLTAgICAgIC0+ICBOYU4KK2Rxc3ViODI2IHN1YnRyYWN0ICBOYU4gIC0xICAgICAtPiAgTmFOCitkcXN1YjgyNyBzdWJ0cmFjdCAgTmFOICAtMTAwMCAgLT4gIE5hTgorZHFzdWI4Mjggc3VidHJhY3QgIE5hTiAgLUluZiAgIC0+ICBOYU4KK2Rxc3ViODI5IHN1YnRyYWN0IC1OYU4gICBOYU4gICAtPiAtTmFOCitkcXN1YjgzMCBzdWJ0cmFjdCAtSW5mICAgTmFOICAgLT4gIE5hTgorZHFzdWI4MzEgc3VidHJhY3QgLTEwMDAgIE5hTiAgIC0+ICBOYU4KK2Rxc3ViODMyIHN1YnRyYWN0IC0xICAgICBOYU4gICAtPiAgTmFOCitkcXN1YjgzMyBzdWJ0cmFjdCAtMCAgICAgTmFOICAgLT4gIE5hTgorZHFzdWI4MzQgc3VidHJhY3QgIDAgICAgIE5hTiAgIC0+ICBOYU4KK2Rxc3ViODM1IHN1YnRyYWN0ICAxICAgICBOYU4gICAtPiAgTmFOCitkcXN1YjgzNiBzdWJ0cmFjdCAgMTAwMCAtTmFOICAgLT4gLU5hTgorZHFzdWI4Mzcgc3VidHJhY3QgIEluZiAgIE5hTiAgIC0+ICBOYU4KKworZHFzdWI4NDEgc3VidHJhY3QgIHNOYU4gIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0MiBzdWJ0cmFjdCAtc05hTiAgMTAwMCAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODQzIHN1YnRyYWN0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NDQgc3VidHJhY3QgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0NSBzdWJ0cmFjdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODQ2IHN1YnRyYWN0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NDcgc3VidHJhY3QgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0OCBzdWJ0cmFjdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODQ5IHN1YnRyYWN0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTAgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1MSBzdWJ0cmFjdCAtSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODUyIHN1YnRyYWN0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTMgc3VidHJhY3QgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1NCBzdWJ0cmFjdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODU1IHN1YnRyYWN0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTYgc3VidHJhY3QgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1NyBzdWJ0cmFjdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODU4IHN1YnRyYWN0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTkgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rxc3ViODYxIHN1YnRyYWN0ICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xCitkcXN1Yjg2MiBzdWJ0cmFjdCAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMgorZHFzdWI4NjMgc3VidHJhY3QgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMKK2Rxc3ViODY0IHN1YnRyYWN0ICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40CitkcXN1Yjg2NSBzdWJ0cmFjdCAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQorZHFzdWI4NjYgc3VidHJhY3QgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxCitkcXN1Yjg2NyBzdWJ0cmFjdCAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODEKK2Rxc3ViODY4IHN1YnRyYWN0ICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQorZHFzdWI4Njkgc3VidHJhY3QgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQorZHFzdWI4NzEgc3VidHJhY3QgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NzIgc3VidHJhY3QgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NzMgc3VidHJhY3QgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NzQgc3VidHJhY3QgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NzUgc3VidHJhY3QgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NzYgc3VidHJhY3QgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4Nzcgc3VidHJhY3QgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4Nzggc3VidHJhY3QgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4Nzkgc3VidHJhY3QgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4ODAgc3VidHJhY3QgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4ODEgc3VidHJhY3QgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBlZGdlIGNhc2Ugc3BpbGxzCitkcXN1YjkwMSBzdWJ0cmFjdCAgMi5FLTMgIDEuMDAyICAtPiAtMS4wMDAKK2Rxc3ViOTAyIHN1YnRyYWN0ICAyLjBFLTMgIDEuMDAyICAtPiAtMS4wMDAwCitkcXN1YjkwMyBzdWJ0cmFjdCAgMi4wMEUtMyAgMS4wMDIwICAtPiAtMS4wMDAwMAorZHFzdWI5MDQgc3VidHJhY3QgIDIuMDAwRS0zICAxLjAwMjAwICAtPiAtMS4wMDAwMDAKK2Rxc3ViOTA1IHN1YnRyYWN0ICAyLjAwMDBFLTMgIDEuMDAyMDAwICAtPiAtMS4wMDAwMDAwCitkcXN1YjkwNiBzdWJ0cmFjdCAgMi4wMDAwMEUtMyAgMS4wMDIwMDAwICAtPiAtMS4wMDAwMDAwMAorZHFzdWI5MDcgc3VidHJhY3QgIDIuMDAwMDAwRS0zICAxLjAwMjAwMDAwICAtPiAtMS4wMDAwMDAwMDAKK2Rxc3ViOTA4IHN1YnRyYWN0ICAyLjAwMDAwMDBFLTMgIDEuMDAyMDAwMDAwICAtPiAtMS4wMDAwMDAwMDAwCisKKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cyBjb3ZlcmVkIHVuZGVyIEFkZAorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2Rxc3ViMTEyNSAgc3VidHJhY3QgMTMwRS0yICAxMjBFLTIgLT4gMC4xMAorZHFzdWIxMTI2ICBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwCitkcXN1YjExMjcgIHN1YnRyYWN0IDEzMEUtMiAgMUUwICAgIC0+IDAuMzAKK2Rxc3ViMTEyOCAgc3VidHJhY3QgMUUyICAgICAxRTQgICAgLT4gLTkuOUUrMworCistLSBOdWxsIHRlc3RzCitkcXN1Yjk5OTAgc3VidHJhY3QgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjk5OTEgc3VidHJhY3QgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFUb0ludGVncmFsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFUb0ludGVncmFsLmRlY1Rlc3QKaW5kZXggZWIxMjM4Ny4uMzA1NWRlNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxVG9JbnRlZ3JhbC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVRvSW50ZWdyYWwuZGVjVGVzdApAQCAtMSwyNTcgKzEsMjU3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcVRvSW50ZWdyYWwuZGVjVGVzdCAtLSByb3VuZCBRdWFkIHRvIGludGVncmFsIHZhbHVlICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBzZXQgb2YgdGVzdHMgdGVzdHMgdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24gJ3JvdW5kLXRvLWludGVncmFsDQotLS0gdmFsdWUtZXhhY3QnIG9wZXJhdGlvbnMgKGZyb20gSUVFRSA4NTQsIGxhdGVyIG1vZGlmaWVkIGluIDc1NHIpLg0KLS0tIEFsbCBub24temVybyByZXN1bHRzIGFyZSBkZWZpbmVkIGFzIGJlaW5nIHRob3NlIGZyb20gZWl0aGVyIGNvcHkgb3INCi0tLSBxdWFudGl6ZSwgc28gdGhvc2UgYXJlIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHRlc3RlZCBleHRlbnNpdmVseQ0KLS0tIGVsc2V3aGVyZTsgdGhlIHRlc3RzIGhlcmUgYXJlIGZvciBpbnRlZ3JpdHksIHJvdW5kaW5nIG1vZGUsIGV0Yy4NCi0tLSBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCB1c2UgdGhlc2UgdGVzdHMgZm9yIGJvdGgNCi0tLSBUb0ludGVncmFsRXhhY3QgKHdoaWNoIGRvZXMgc2V0IEluZXhhY3QpIGFuZCB0aGUgZml4ZWQtbmFtZQ0KLS0tIGZ1bmN0aW9ucyAod2hpY2ggZG8gbm90IHNldCBJbmV4YWN0KS4NCi0NCi0tLSBOb3RlIHRoYXQgZGVjTnVtYmVyIGltcGxlbWVudHMgYW4gZWFybGllciBkZWZpbml0aW9uIG9mIHRvSW50ZWdyYWwNCi0tLSB3aGljaCBuZXZlciBzZXRzIEluZXhhY3Q7IHRoZSBkZWNUZXN0IG9wZXJhdG9yIGZvciB0aGF0IGlzIGNhbGxlZA0KLS0tICd0b2ludGVncmFsJyBpbnN0ZWFkIG9mICd0b2ludGVncmFseCcuDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRxaW50eDAwMSB0b2ludGVncmFseCAgICAgIDAgICAgIC0+ICAwDQotZHFpbnR4MDAyIHRvaW50ZWdyYWx4ICAgICAgMC4wICAgLT4gIDANCi1kcWludHgwMDMgdG9pbnRlZ3JhbHggICAgICAwLjEgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDA0IHRvaW50ZWdyYWx4ICAgICAgMC4yICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAwNSB0b2ludGVncmFseCAgICAgIDAuMyAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMDYgdG9pbnRlZ3JhbHggICAgICAwLjQgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDA3IHRvaW50ZWdyYWx4ICAgICAgMC41ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAwOCB0b2ludGVncmFseCAgICAgIDAuNiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMDkgdG9pbnRlZ3JhbHggICAgICAwLjcgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDEwIHRvaW50ZWdyYWx4ICAgICAgMC44ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAxMSB0b2ludGVncmFseCAgICAgIDAuOSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMTIgdG9pbnRlZ3JhbHggICAgICAxICAgICAtPiAgMQ0KLWRxaW50eDAxMyB0b2ludGVncmFseCAgICAgIDEuMCAgIC0+ICAxICBSb3VuZGVkDQotZHFpbnR4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAxNSB0b2ludGVncmFseCAgICAgIDEuMiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMTYgdG9pbnRlZ3JhbHggICAgICAxLjMgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAxOCB0b2ludGVncmFseCAgICAgIDEuNSAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMTkgdG9pbnRlZ3JhbHggICAgICAxLjYgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAyMSB0b2ludGVncmFseCAgICAgIDEuOCAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMjIgdG9pbnRlZ3JhbHggICAgICAxLjkgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQotLS0gbmVnYXRpdmVzDQotZHFpbnR4MDMxIHRvaW50ZWdyYWx4ICAgICAtMCAgICAgLT4gLTANCi1kcWludHgwMzIgdG9pbnRlZ3JhbHggICAgIC0wLjAgICAtPiAtMA0KLWRxaW50eDAzMyB0b2ludGVncmFseCAgICAgLTAuMSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMzQgdG9pbnRlZ3JhbHggICAgIC0wLjIgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDM1IHRvaW50ZWdyYWx4ICAgICAtMC4zICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAzNiB0b2ludGVncmFseCAgICAgLTAuNCAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMzcgdG9pbnRlZ3JhbHggICAgIC0wLjUgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDM4IHRvaW50ZWdyYWx4ICAgICAtMC42ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAzOSB0b2ludGVncmFseCAgICAgLTAuNyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNDAgdG9pbnRlZ3JhbHggICAgIC0wLjggICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDQxIHRvaW50ZWdyYWx4ICAgICAtMC45ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA0MiB0b2ludGVncmFseCAgICAgLTEgICAgIC0+IC0xDQotZHFpbnR4MDQzIHRvaW50ZWdyYWx4ICAgICAtMS4wICAgLT4gLTEgIFJvdW5kZWQNCi1kcWludHgwNDQgdG9pbnRlZ3JhbHggICAgIC0xLjEgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDQ1IHRvaW50ZWdyYWx4ICAgICAtMS4yICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA0NiB0b2ludGVncmFseCAgICAgLTEuMyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNDcgdG9pbnRlZ3JhbHggICAgIC0xLjQgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDQ4IHRvaW50ZWdyYWx4ICAgICAtMS41ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA0OSB0b2ludGVncmFseCAgICAgLTEuNiAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNTAgdG9pbnRlZ3JhbHggICAgIC0xLjcgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDUxIHRvaW50ZWdyYWx4ICAgICAtMS44ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA1MiB0b2ludGVncmFseCAgICAgLTEuOSAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZXh0IHR3byB3b3VsZCBiZSBOYU4gdXNpbmcgcXVhbnRpemUoeCwgMCkNCi1kcWludHgwNTMgdG9pbnRlZ3JhbHggICAgMTBFKzYwICAtPiAxLjBFKzYxDQotZHFpbnR4MDU0IHRvaW50ZWdyYWx4ICAgLTEwRSs2MCAgLT4gLTEuMEUrNjENCi0NCi0tLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24NCi1kcWludHgwNjAgdG9pbnRlZ3JhbHggJzU2MjY3RS0xNycgICAtPiAnMCcgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNjEgdG9pbnRlZ3JhbHggJzU2MjY3RS01JyAgICAtPiAnMScgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNjMgdG9pbnRlZ3JhbHggJzU2MjY3RS0xJyAgICAtPiAnNTYyNycgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNjUgdG9pbnRlZ3JhbHggJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnDQotZHFpbnR4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3Jw0KLWRxaW50eDA2NyB0b2ludGVncmFseCAnNTYyNjdFKzEnICAgIC0+ICc1LjYyNjdFKzUnDQotZHFpbnR4MDY4IHRvaW50ZWdyYWx4ICc1NjI2N0UrOScgICAgLT4gJzUuNjI2N0UrMTMnDQotZHFpbnR4MDY5IHRvaW50ZWdyYWx4ICc1NjI2N0UrMTAnICAgLT4gJzUuNjI2N0UrMTQnDQotZHFpbnR4MDcwIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTEnICAgLT4gJzUuNjI2N0UrMTUnDQotZHFpbnR4MDcxIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTInICAgLT4gJzUuNjI2N0UrMTYnDQotZHFpbnR4MDcyIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTMnICAgLT4gJzUuNjI2N0UrMTcnDQotZHFpbnR4MDczIHRvaW50ZWdyYWx4ICcxLjIzRSs5NicgICAgLT4gJzEuMjNFKzk2Jw0KLWRxaW50eDA3NCB0b2ludGVncmFseCAnMS4yM0UrNjE0NCcgIC0+ICM0N2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotDQotZHFpbnR4MDgwIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEwJyAgLT4gJy0wJyAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA4MSB0b2ludGVncmFseCAnLTU2MjY3RS01JyAgIC0+ICctMScgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwODIgdG9pbnRlZ3JhbHggJy01NjI2N0UtMicgICAtPiAnLTU2MycgICAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDgzIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEnICAgLT4gJy01NjI3JyAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA4NSB0b2ludGVncmFseCAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnDQotZHFpbnR4MDg2IHRvaW50ZWdyYWx4ICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycNCi1kcWludHgwODcgdG9pbnRlZ3JhbHggJy01NjI2N0UrMScgICAtPiAnLTUuNjI2N0UrNScNCi1kcWludHgwODggdG9pbnRlZ3JhbHggJy01NjI2N0UrOScgICAtPiAnLTUuNjI2N0UrMTMnDQotZHFpbnR4MDg5IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEwJyAgLT4gJy01LjYyNjdFKzE0Jw0KLWRxaW50eDA5MCB0b2ludGVncmFseCAnLTU2MjY3RSsxMScgIC0+ICctNS42MjY3RSsxNScNCi1kcWludHgwOTEgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTInICAtPiAnLTUuNjI2N0UrMTYnDQotZHFpbnR4MDkyIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEzJyAgLT4gJy01LjYyNjdFKzE3Jw0KLWRxaW50eDA5MyB0b2ludGVncmFseCAnLTEuMjNFKzk2JyAgIC0+ICctMS4yM0UrOTYnDQotZHFpbnR4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrNjE0NCcgLT4gI2M3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi0NCi0tLSBzdWJub3JtYWwgaW5wdXRzDQotZHFpbnR4MTAwIHRvaW50ZWdyYWx4ICAgICAgICAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MTAxIHRvaW50ZWdyYWx4ICAgICAgMC4xRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MTAyIHRvaW50ZWdyYWx4ICAgICAwLjAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MTAzIHRvaW50ZWdyYWx4ICAgICAgICAwRS0yOTkgLT4gMA0KLQ0KLS0tIHNwZWNpYWxzIGFuZCB6ZXJvcw0KLWRxaW50eDEyMCB0b2ludGVncmFseCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkNCi1kcWludHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5DQotZHFpbnR4MTIyIHRvaW50ZWdyYWx4ICAgTmFOICAgICAgIC0+ICBOYU4NCi1kcWludHgxMjMgdG9pbnRlZ3JhbHggIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWludHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDANCi1kcWludHgxMjUgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTANCi1kcWludHgxMjYgdG9pbnRlZ3JhbHggICAgIDAuMDAwICAgLT4gIDANCi1kcWludHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDANCi1kcWludHgxMjggdG9pbnRlZ3JhbHggICAgIDAuMCAgICAgLT4gIDANCi1kcWludHgxMjkgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDANCi1kcWludHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDANCi1kcWludHgxMzEgdG9pbnRlZ3JhbHggICAgIDBFLTIgICAgLT4gIDANCi1kcWludHgxMzIgdG9pbnRlZ3JhbHggICAgIDBFLTEgICAgLT4gIDANCi1kcWludHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDANCi1kcWludHgxMzQgdG9pbnRlZ3JhbHggICAgIDBFKzEgICAgLT4gIDBFKzENCi1kcWludHgxMzUgdG9pbnRlZ3JhbHggICAgIDBFKzIgICAgLT4gIDBFKzINCi1kcWludHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMNCi1kcWludHgxMzcgdG9pbnRlZ3JhbHggICAgIDBFKzQgICAgLT4gIDBFKzQNCi1kcWludHgxMzggdG9pbnRlZ3JhbHggICAgIDBFKzUgICAgLT4gIDBFKzUNCi1kcWludHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTANCi1kcWludHgxNDAgdG9pbnRlZ3JhbHggICAgLTAuMDAgICAgLT4gLTANCi1kcWludHgxNDEgdG9pbnRlZ3JhbHggICAgLTAuMCAgICAgLT4gLTANCi1kcWludHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTANCi1kcWludHgxNDMgdG9pbnRlZ3JhbHggICAgLTBFLTMgICAgLT4gLTANCi1kcWludHgxNDQgdG9pbnRlZ3JhbHggICAgLTBFLTIgICAgLT4gLTANCi1kcWludHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTANCi1kcWludHgxNDYgdG9pbnRlZ3JhbHggICAgLTBFLTAgICAgLT4gLTANCi1kcWludHgxNDcgdG9pbnRlZ3JhbHggICAgLTBFKzEgICAgLT4gLTBFKzENCi1kcWludHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzINCi1kcWludHgxNDkgdG9pbnRlZ3JhbHggICAgLTBFKzMgICAgLT4gLTBFKzMNCi1kcWludHgxNTAgdG9pbnRlZ3JhbHggICAgLTBFKzQgICAgLT4gLTBFKzQNCi1kcWludHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUNCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFpbnR4MTUyIHRvaW50ZWdyYWx4ICAgTmFOODA4ICAgIC0+ICBOYU44MDgNCi1kcWludHgxNTMgdG9pbnRlZ3JhbHggIHNOYU4wODAgICAgLT4gIE5hTjgwICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW50eDE1NCB0b2ludGVncmFseCAgLU5hTjgwOCAgICAtPiAtTmFOODA4DQotZHFpbnR4MTU1IHRvaW50ZWdyYWx4IC1zTmFOMDgwICAgIC0+IC1OYU44MCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWludHgxNTYgdG9pbnRlZ3JhbHggIC1OYU4gICAgICAgLT4gLU5hTg0KLWRxaW50eDE1NyB0b2ludGVncmFseCAtc05hTiAgICAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZXhhbXBsZXMNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLWRxaW50eDIwMCB0b2ludGVncmFseCAgICAgMi4xICAgIC0+IDIgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMDEgdG9pbnRlZ3JhbHggICAxMDAgICAgICAtPiAxMDANCi1kcWludHgyMDIgdG9pbnRlZ3JhbHggICAxMDAuMCAgICAtPiAxMDAgICAgICAgICAgUm91bmRlZA0KLWRxaW50eDIwMyB0b2ludGVncmFseCAgIDEwMS41ICAgIC0+IDEwMiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjA1IHRvaW50ZWdyYWx4ICAgMTBFKzUgICAgLT4gMS4wRSs2DQotZHFpbnR4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcNCi1kcWludHgyMDcgdG9pbnRlZ3JhbHggICAtSW5mICAgICAtPiAtSW5maW5pdHkNCi0NCi0NCi0tLSBhbGwgcm91bmRpbmcgbW9kZXMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotZHFpbnR4MjEwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMTEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIxMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjEzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMTQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIxNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi0NCi1kcWludHgyMjAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIyMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjIyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMjMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIyNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjI1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgaGFsZl9kb3duDQotDQotZHFpbnR4MjMwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMzEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIzMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjMzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMzQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIzNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIHVwDQotDQotZHFpbnR4MjQwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNDEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI0MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjQzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNDQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI0NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGRvd24NCi0NCi1kcWludHgyNTAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI1MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjUyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNTMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI1NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjU1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgY2VpbGluZw0KLQ0KLWRxaW50eDI2MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjYxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNjIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI2MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjY0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNjUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBmbG9vcg0KLQ0KLWRxaW50eDI3MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjcxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNzIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI3MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4Mjc0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNzUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zDQotZHFpbnR4MzAwIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ2ICAtPiAtMjE0NzQ4MzY0Ng0KLWRxaW50eDMwMSB0b2ludGVncmFseCAtMjE0NzQ4MzY0NyAgLT4gLTIxNDc0ODM2NDcNCi1kcWludHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4DQotZHFpbnR4MzAzIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ5ICAtPiAtMjE0NzQ4MzY0OQ0KLWRxaW50eDMwNCB0b2ludGVncmFseCAgMjE0NzQ4MzY0NiAgLT4gIDIxNDc0ODM2NDYNCi1kcWludHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3DQotZHFpbnR4MzA2IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ4ICAtPiAgMjE0NzQ4MzY0OA0KLWRxaW50eDMwNyB0b2ludGVncmFseCAgMjE0NzQ4MzY0OSAgLT4gIDIxNDc0ODM2NDkNCi1kcWludHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0DQotZHFpbnR4MzA5IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk1ICAtPiAgNDI5NDk2NzI5NQ0KLWRxaW50eDMxMCB0b2ludGVncmFseCAgNDI5NDk2NzI5NiAgLT4gIDQyOTQ5NjcyOTYNCi1kcWludHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3DQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVRvSW50ZWdyYWwuZGVjVGVzdCAtLSByb3VuZCBRdWFkIHRvIGludGVncmFsIHZhbHVlICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIHRlc3RzIHRoZSBleHRlbmRlZCBzcGVjaWZpY2F0aW9uICdyb3VuZC10by1pbnRlZ3JhbAorLS0gdmFsdWUtZXhhY3QnIG9wZXJhdGlvbnMgKGZyb20gSUVFRSA4NTQsIGxhdGVyIG1vZGlmaWVkIGluIDc1NHIpLgorLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcgorLS0gcXVhbnRpemUsIHNvIHRob3NlIGFyZSBhc3N1bWVkIHRvIGhhdmUgYmVlbiB0ZXN0ZWQgZXh0ZW5zaXZlbHkKKy0tIGVsc2V3aGVyZTsgdGhlIHRlc3RzIGhlcmUgYXJlIGZvciBpbnRlZ3JpdHksIHJvdW5kaW5nIG1vZGUsIGV0Yy4KKy0tIEFsc28sIGl0IGlzIGFzc3VtZWQgdGhlIHRlc3QgaGFybmVzcyB3aWxsIHVzZSB0aGVzZSB0ZXN0cyBmb3IgYm90aAorLS0gVG9JbnRlZ3JhbEV4YWN0ICh3aGljaCBkb2VzIHNldCBJbmV4YWN0KSBhbmQgdGhlIGZpeGVkLW5hbWUKKy0tIGZ1bmN0aW9ucyAod2hpY2ggZG8gbm90IHNldCBJbmV4YWN0KS4KKworLS0gTm90ZSB0aGF0IGRlY051bWJlciBpbXBsZW1lbnRzIGFuIGVhcmxpZXIgZGVmaW5pdGlvbiBvZiB0b0ludGVncmFsCistLSB3aGljaCBuZXZlciBzZXRzIEluZXhhY3Q7IHRoZSBkZWNUZXN0IG9wZXJhdG9yIGZvciB0aGF0IGlzIGNhbGxlZAorLS0gJ3RvaW50ZWdyYWwnIGluc3RlYWQgb2YgJ3RvaW50ZWdyYWx4Jy4KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFpbnR4MDAxIHRvaW50ZWdyYWx4ICAgICAgMCAgICAgLT4gIDAKK2RxaW50eDAwMiB0b2ludGVncmFseCAgICAgIDAuMCAgIC0+ICAwCitkcWludHgwMDMgdG9pbnRlZ3JhbHggICAgICAwLjEgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDQgdG9pbnRlZ3JhbHggICAgICAwLjIgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDUgdG9pbnRlZ3JhbHggICAgICAwLjMgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDYgdG9pbnRlZ3JhbHggICAgICAwLjQgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDcgdG9pbnRlZ3JhbHggICAgICAwLjUgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDggdG9pbnRlZ3JhbHggICAgICAwLjYgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDkgdG9pbnRlZ3JhbHggICAgICAwLjcgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTAgdG9pbnRlZ3JhbHggICAgICAwLjggICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTEgdG9pbnRlZ3JhbHggICAgICAwLjkgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTIgdG9pbnRlZ3JhbHggICAgICAxICAgICAtPiAgMQorZHFpbnR4MDEzIHRvaW50ZWdyYWx4ICAgICAgMS4wICAgLT4gIDEgIFJvdW5kZWQKK2RxaW50eDAxNCB0b2ludGVncmFseCAgICAgIDEuMSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAxNSB0b2ludGVncmFseCAgICAgIDEuMiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAxNiB0b2ludGVncmFseCAgICAgIDEuMyAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAxNyB0b2ludGVncmFseCAgICAgIDEuNCAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAxOCB0b2ludGVncmFseCAgICAgIDEuNSAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAxOSB0b2ludGVncmFseCAgICAgIDEuNiAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAyMCB0b2ludGVncmFseCAgICAgIDEuNyAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAyMSB0b2ludGVncmFseCAgICAgIDEuOCAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAyMiB0b2ludGVncmFseCAgICAgIDEuOSAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5lZ2F0aXZlcworZHFpbnR4MDMxIHRvaW50ZWdyYWx4ICAgICAtMCAgICAgLT4gLTAKK2RxaW50eDAzMiB0b2ludGVncmFseCAgICAgLTAuMCAgIC0+IC0wCitkcWludHgwMzMgdG9pbnRlZ3JhbHggICAgIC0wLjEgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzQgdG9pbnRlZ3JhbHggICAgIC0wLjIgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzUgdG9pbnRlZ3JhbHggICAgIC0wLjMgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzYgdG9pbnRlZ3JhbHggICAgIC0wLjQgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzcgdG9pbnRlZ3JhbHggICAgIC0wLjUgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzggdG9pbnRlZ3JhbHggICAgIC0wLjYgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzkgdG9pbnRlZ3JhbHggICAgIC0wLjcgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDAgdG9pbnRlZ3JhbHggICAgIC0wLjggICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDEgdG9pbnRlZ3JhbHggICAgIC0wLjkgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDIgdG9pbnRlZ3JhbHggICAgIC0xICAgICAtPiAtMQorZHFpbnR4MDQzIHRvaW50ZWdyYWx4ICAgICAtMS4wICAgLT4gLTEgIFJvdW5kZWQKK2RxaW50eDA0NCB0b2ludGVncmFseCAgICAgLTEuMSAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA0NSB0b2ludGVncmFseCAgICAgLTEuMiAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA0NiB0b2ludGVncmFseCAgICAgLTEuMyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA0NyB0b2ludGVncmFseCAgICAgLTEuNCAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA0OCB0b2ludGVncmFseCAgICAgLTEuNSAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA0OSB0b2ludGVncmFseCAgICAgLTEuNiAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA1MCB0b2ludGVncmFseCAgICAgLTEuNyAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA1MSB0b2ludGVncmFseCAgICAgLTEuOCAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA1MiB0b2ludGVncmFseCAgICAgLTEuOSAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgdHdvIHdvdWxkIGJlIE5hTiB1c2luZyBxdWFudGl6ZSh4LCAwKQorZHFpbnR4MDUzIHRvaW50ZWdyYWx4ICAgIDEwRSs2MCAgLT4gMS4wRSs2MQorZHFpbnR4MDU0IHRvaW50ZWdyYWx4ICAgLTEwRSs2MCAgLT4gLTEuMEUrNjEKKworLS0gbnVtYmVycyBhcm91bmQgcHJlY2lzaW9uCitkcWludHgwNjAgdG9pbnRlZ3JhbHggJzU2MjY3RS0xNycgICAtPiAnMCcgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA2MSB0b2ludGVncmFseCAnNTYyNjdFLTUnICAgIC0+ICcxJyAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDYyIHRvaW50ZWdyYWx4ICc1NjI2N0UtMicgICAgLT4gJzU2MycgICAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNjMgdG9pbnRlZ3JhbHggJzU2MjY3RS0xJyAgICAtPiAnNTYyNycgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA2NSB0b2ludGVncmFseCAnNTYyNjdFLTAnICAgIC0+ICc1NjI2NycKK2RxaW50eDA2NiB0b2ludGVncmFseCAnNTYyNjdFKzAnICAgIC0+ICc1NjI2NycKK2RxaW50eDA2NyB0b2ludGVncmFseCAnNTYyNjdFKzEnICAgIC0+ICc1LjYyNjdFKzUnCitkcWludHgwNjggdG9pbnRlZ3JhbHggJzU2MjY3RSs5JyAgICAtPiAnNS42MjY3RSsxMycKK2RxaW50eDA2OSB0b2ludGVncmFseCAnNTYyNjdFKzEwJyAgIC0+ICc1LjYyNjdFKzE0JworZHFpbnR4MDcwIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTEnICAgLT4gJzUuNjI2N0UrMTUnCitkcWludHgwNzEgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMicgICAtPiAnNS42MjY3RSsxNicKK2RxaW50eDA3MiB0b2ludGVncmFseCAnNTYyNjdFKzEzJyAgIC0+ICc1LjYyNjdFKzE3JworZHFpbnR4MDczIHRvaW50ZWdyYWx4ICcxLjIzRSs5NicgICAgLT4gJzEuMjNFKzk2JworZHFpbnR4MDc0IHRvaW50ZWdyYWx4ICcxLjIzRSs2MTQ0JyAgLT4gIzQ3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKKworZHFpbnR4MDgwIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEwJyAgLT4gJy0wJyAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDgxIHRvaW50ZWdyYWx4ICctNTYyNjdFLTUnICAgLT4gJy0xJyAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDgyIHRvaW50ZWdyYWx4ICctNTYyNjdFLTInICAgLT4gJy01NjMnICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDgzIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEnICAgLT4gJy01NjI3JyAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDg1IHRvaW50ZWdyYWx4ICctNTYyNjdFLTAnICAgLT4gJy01NjI2NycKK2RxaW50eDA4NiB0b2ludGVncmFseCAnLTU2MjY3RSswJyAgIC0+ICctNTYyNjcnCitkcWludHgwODcgdG9pbnRlZ3JhbHggJy01NjI2N0UrMScgICAtPiAnLTUuNjI2N0UrNScKK2RxaW50eDA4OCB0b2ludGVncmFseCAnLTU2MjY3RSs5JyAgIC0+ICctNS42MjY3RSsxMycKK2RxaW50eDA4OSB0b2ludGVncmFseCAnLTU2MjY3RSsxMCcgIC0+ICctNS42MjY3RSsxNCcKK2RxaW50eDA5MCB0b2ludGVncmFseCAnLTU2MjY3RSsxMScgIC0+ICctNS42MjY3RSsxNScKK2RxaW50eDA5MSB0b2ludGVncmFseCAnLTU2MjY3RSsxMicgIC0+ICctNS42MjY3RSsxNicKK2RxaW50eDA5MiB0b2ludGVncmFseCAnLTU2MjY3RSsxMycgIC0+ICctNS42MjY3RSsxNycKK2RxaW50eDA5MyB0b2ludGVncmFseCAnLTEuMjNFKzk2JyAgIC0+ICctMS4yM0UrOTYnCitkcWludHgwOTQgdG9pbnRlZ3JhbHggJy0xLjIzRSs2MTQ0JyAtPiAjYzdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorCistLSBzdWJub3JtYWwgaW5wdXRzCitkcWludHgxMDAgdG9pbnRlZ3JhbHggICAgICAgIDFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDEwMSB0b2ludGVncmFseCAgICAgIDAuMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MTAyIHRvaW50ZWdyYWx4ICAgICAwLjAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgxMDMgdG9pbnRlZ3JhbHggICAgICAgIDBFLTI5OSAtPiAwCisKKy0tIHNwZWNpYWxzIGFuZCB6ZXJvcworZHFpbnR4MTIwIHRvaW50ZWdyYWx4ICdJbmYnICAgICAgIC0+ICBJbmZpbml0eQorZHFpbnR4MTIxIHRvaW50ZWdyYWx4ICctSW5mJyAgICAgIC0+IC1JbmZpbml0eQorZHFpbnR4MTIyIHRvaW50ZWdyYWx4ICAgTmFOICAgICAgIC0+ICBOYU4KK2RxaW50eDEyMyB0b2ludGVncmFseCAgc05hTiAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnR4MTI0IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwCitkcWludHgxMjUgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTAKK2RxaW50eDEyNiB0b2ludGVncmFseCAgICAgMC4wMDAgICAtPiAgMAorZHFpbnR4MTI3IHRvaW50ZWdyYWx4ICAgICAwLjAwICAgIC0+ICAwCitkcWludHgxMjggdG9pbnRlZ3JhbHggICAgIDAuMCAgICAgLT4gIDAKK2RxaW50eDEyOSB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMAorZHFpbnR4MTMwIHRvaW50ZWdyYWx4ICAgICAwRS0zICAgIC0+ICAwCitkcWludHgxMzEgdG9pbnRlZ3JhbHggICAgIDBFLTIgICAgLT4gIDAKK2RxaW50eDEzMiB0b2ludGVncmFseCAgICAgMEUtMSAgICAtPiAgMAorZHFpbnR4MTMzIHRvaW50ZWdyYWx4ICAgICAwRS0wICAgIC0+ICAwCitkcWludHgxMzQgdG9pbnRlZ3JhbHggICAgIDBFKzEgICAgLT4gIDBFKzEKK2RxaW50eDEzNSB0b2ludGVncmFseCAgICAgMEUrMiAgICAtPiAgMEUrMgorZHFpbnR4MTM2IHRvaW50ZWdyYWx4ICAgICAwRSszICAgIC0+ICAwRSszCitkcWludHgxMzcgdG9pbnRlZ3JhbHggICAgIDBFKzQgICAgLT4gIDBFKzQKK2RxaW50eDEzOCB0b2ludGVncmFseCAgICAgMEUrNSAgICAtPiAgMEUrNQorZHFpbnR4MTM5IHRvaW50ZWdyYWx4ICAgIC0wLjAwMCAgIC0+IC0wCitkcWludHgxNDAgdG9pbnRlZ3JhbHggICAgLTAuMDAgICAgLT4gLTAKK2RxaW50eDE0MSB0b2ludGVncmFseCAgICAtMC4wICAgICAtPiAtMAorZHFpbnR4MTQyIHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wCitkcWludHgxNDMgdG9pbnRlZ3JhbHggICAgLTBFLTMgICAgLT4gLTAKK2RxaW50eDE0NCB0b2ludGVncmFseCAgICAtMEUtMiAgICAtPiAtMAorZHFpbnR4MTQ1IHRvaW50ZWdyYWx4ICAgIC0wRS0xICAgIC0+IC0wCitkcWludHgxNDYgdG9pbnRlZ3JhbHggICAgLTBFLTAgICAgLT4gLTAKK2RxaW50eDE0NyB0b2ludGVncmFseCAgICAtMEUrMSAgICAtPiAtMEUrMQorZHFpbnR4MTQ4IHRvaW50ZWdyYWx4ICAgIC0wRSsyICAgIC0+IC0wRSsyCitkcWludHgxNDkgdG9pbnRlZ3JhbHggICAgLTBFKzMgICAgLT4gLTBFKzMKK2RxaW50eDE1MCB0b2ludGVncmFseCAgICAtMEUrNCAgICAtPiAtMEUrNAorZHFpbnR4MTUxIHRvaW50ZWdyYWx4ICAgIC0wRSs1ICAgIC0+IC0wRSs1CistLSBwcm9wYWdhdGluZyBOYU5zCitkcWludHgxNTIgdG9pbnRlZ3JhbHggICBOYU44MDggICAgLT4gIE5hTjgwOAorZHFpbnR4MTUzIHRvaW50ZWdyYWx4ICBzTmFOMDgwICAgIC0+ICBOYU44MCAgSW52YWxpZF9vcGVyYXRpb24KK2RxaW50eDE1NCB0b2ludGVncmFseCAgLU5hTjgwOCAgICAtPiAtTmFOODA4CitkcWludHgxNTUgdG9pbnRlZ3JhbHggLXNOYU4wODAgICAgLT4gLU5hTjgwICBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnR4MTU2IHRvaW50ZWdyYWx4ICAtTmFOICAgICAgIC0+IC1OYU4KK2RxaW50eDE1NyB0b2ludGVncmFseCAtc05hTiAgICAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGV4YW1wbGVzCityb3VuZGluZzogICAgaGFsZl91cAorZHFpbnR4MjAwIHRvaW50ZWdyYWx4ICAgICAyLjEgICAgLT4gMiAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjAxIHRvaW50ZWdyYWx4ICAgMTAwICAgICAgLT4gMTAwCitkcWludHgyMDIgdG9pbnRlZ3JhbHggICAxMDAuMCAgICAtPiAxMDAgICAgICAgICAgUm91bmRlZAorZHFpbnR4MjAzIHRvaW50ZWdyYWx4ICAgMTAxLjUgICAgLT4gMTAyICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjA0IHRvaW50ZWdyYWx4ICAtMTAxLjUgICAgLT4gLTEwMiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjA1IHRvaW50ZWdyYWx4ICAgMTBFKzUgICAgLT4gMS4wRSs2CitkcWludHgyMDYgdG9pbnRlZ3JhbHggIDcuODlFKzc3ICAtPiA3Ljg5RSs3NworZHFpbnR4MjA3IHRvaW50ZWdyYWx4ICAgLUluZiAgICAgLT4gLUluZmluaXR5CisKKworLS0gYWxsIHJvdW5kaW5nIG1vZGVzCityb3VuZGluZzogICAgaGFsZl9ldmVuCitkcWludHgyMTAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjExIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIxMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMTMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjE0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIxNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX3VwCisKK2RxaW50eDIyMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMjEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjIyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIyMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMjQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjI1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorCitkcWludHgyMzAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjMxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIzMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMzMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjM0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIzNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICB1cAorCitkcWludHgyNDAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjQxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI0MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNDMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjQ0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI0NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBkb3duCisKK2RxaW50eDI1MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNTEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjUyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI1MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNTQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjU1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKworZHFpbnR4MjYwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI2MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNjIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjYzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI2NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNjUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZmxvb3IKKworZHFpbnR4MjcwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI3MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNzIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjczIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI3NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNzUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCistLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucworZHFpbnR4MzAwIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ2ICAtPiAtMjE0NzQ4MzY0NgorZHFpbnR4MzAxIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ3ICAtPiAtMjE0NzQ4MzY0NworZHFpbnR4MzAyIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ4ICAtPiAtMjE0NzQ4MzY0OAorZHFpbnR4MzAzIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ5ICAtPiAtMjE0NzQ4MzY0OQorZHFpbnR4MzA0IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ2ICAtPiAgMjE0NzQ4MzY0NgorZHFpbnR4MzA1IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ3ICAtPiAgMjE0NzQ4MzY0NworZHFpbnR4MzA2IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ4ICAtPiAgMjE0NzQ4MzY0OAorZHFpbnR4MzA3IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ5ICAtPiAgMjE0NzQ4MzY0OQorZHFpbnR4MzA4IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk0ICAtPiAgNDI5NDk2NzI5NAorZHFpbnR4MzA5IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk1ICAtPiAgNDI5NDk2NzI5NQorZHFpbnR4MzEwIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk2ICAtPiAgNDI5NDk2NzI5NgorZHFpbnR4MzExIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk3ICAtPiAgNDI5NDk2NzI5NworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFYb3IuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVhvci5kZWNUZXN0CmluZGV4IGZiYjMyZTQuLjIyMTZlOWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVhvci5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVhvci5kZWNUZXN0CkBAIC0xLDQxMCArMSw0MTAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxWG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgWE9SIGZvciBkZWNRdWFkcyAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCi1kcXhvcjAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDANCi1kcXhvcjAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDENCi1kcXhvcjAwMyB4b3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDENCi1kcXhvcjAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDANCi1kcXhvcjAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTANCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQ0KLWRxeG9yMDA2IHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1kcXhvcjAwNyB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yMDA4IHhvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3IwMDkgeG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLWRxeG9yMDEwIHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1kcXhvcjAxMSB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yMDEyIHhvciAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3IwMTMgeG9yIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLQ0KLS0tIFZhcmlvdXMgbGVuZ3Rocw0KLS0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotZHF4b3I2MDEgeG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjAyIHhvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYwMyB4b3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MDQgeG9yIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjA1IHhvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYwNiB4b3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MDcgeG9yIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjA4IHhvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYwOSB4b3IgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MTAgeG9yIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjExIHhvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYxMiB4b3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MTMgeG9yIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjE0IHhvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYxNSB4b3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MTYgeG9yIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjE3IHhvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYxOCB4b3IgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MTkgeG9yIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjIwIHhvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYyMSB4b3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwDQotZHF4b3I2MjIgeG9yIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMA0KLWRxeG9yNjIzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDANCi1kcXhvcjYyNCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwDQotZHF4b3I2MjUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMA0KLWRxeG9yNjI2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDANCi1kcXhvcjYyNyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwDQotZHF4b3I2MjggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMA0KLWRxeG9yNjI5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDANCi1kcXhvcjYzMCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwDQotZHF4b3I2MzEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMA0KLWRxeG9yNjMyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDANCi1kcXhvcjYzMyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwDQotZHF4b3I2MzQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQ0KLQ0KLWRxeG9yNjQxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY0MiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NDMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjQ0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY0NSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NDYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjQ3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY0OCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NDkgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjUwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY1MSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NTIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjUzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY1NCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NTUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjU2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY1NyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NTggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjU5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY2MCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NjEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjYyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDANCi1kcXhvcjY2MyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwDQotZHF4b3I2NjQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMA0KLWRxeG9yNjY1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDANCi1kcXhvcjY2NiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwDQotZHF4b3I2NjcgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMA0KLWRxeG9yNjY4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDANCi1kcXhvcjY2OSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwDQotZHF4b3I2NzAgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMA0KLWRxeG9yNjcxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDANCi1kcXhvcjY3MiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwDQotZHF4b3I2NzMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMA0KLWRxeG9yNjc0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCi1kcXhvcjY3NSB4b3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHF4b3I2NzYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQ0KLQ0KLQ0KLWRxeG9yMDIxIHhvciAxMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMA0KLWRxeG9yMDIyIHhvciAgMTExMTExMTEwMDAwMDAwICAgICAgMTExMTExMTEwMDAwMDAwICAtPiAgMA0KLWRxeG9yMDIzIHhvciAgIDExMTExMTEwMDAwMDAwICAgICAgIDExMTExMTEwMDAwMDAwICAtPiAgMA0KLWRxeG9yMDI0IHhvciAgICAxMTExMTEwMDAwMDAwICAgICAgICAxMTExMTEwMDAwMDAwICAtPiAgMA0KLWRxeG9yMDI1IHhvciAgICAgMTExMTEwMDAwMDAwICAgICAgICAgMTExMTEwMDAwMDAwICAtPiAgMA0KLWRxeG9yMDI2IHhvciAgICAgIDExMTEwMDAwMDAwICAgICAgICAgIDExMTEwMDAwMDAwICAtPiAgMA0KLWRxeG9yMDI3IHhvciAgICAgICAxMTEwMDAwMDAwICAgICAgICAgICAxMTEwMDAwMDAwICAtPiAgMA0KLWRxeG9yMDI4IHhvciAgICAgICAgMTEwMDAwMDAwICAgICAgICAgICAgMTEwMDAwMDAwICAtPiAgMA0KLWRxeG9yMDI5IHhvciAgICAgICAgIDEwMDAwMDAwICAgICAgICAgICAgIDEwMDAwMDAwICAtPiAgMA0KLWRxeG9yMDMwIHhvciAgICAgICAgICAxMDAwMDAwICAgICAgICAgICAgICAxMDAwMDAwICAtPiAgMA0KLWRxeG9yMDMxIHhvciAgICAgICAgICAgMTAwMDAwICAgICAgICAgICAgICAgMTAwMDAwICAtPiAgMA0KLWRxeG9yMDMyIHhvciAgICAgICAgICAgIDEwMDAwICAgICAgICAgICAgICAgIDEwMDAwICAtPiAgMA0KLWRxeG9yMDMzIHhvciAgICAgICAgICAgICAxMDAwICAgICAgICAgICAgICAgICAxMDAwICAtPiAgMA0KLWRxeG9yMDM0IHhvciAgICAgICAgICAgICAgMTAwICAgICAgICAgICAgICAgICAgMTAwICAtPiAgMA0KLWRxeG9yMDM1IHhvciAgICAgICAgICAgICAgIDEwICAgICAgICAgICAgICAgICAgIDEwICAtPiAgMA0KLWRxeG9yMDM2IHhvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgMA0KLQ0KLWRxeG9yMDQwIHhvciAxMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTAwMDAwMDAwMA0KLWRxeG9yMDQxIHhvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTEwMDAwMDAwMA0KLWRxeG9yMDQyIHhvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDEwMDAwMDAwMA0KLWRxeG9yMDQzIHhvciAgIDExMTExMTEgICAgIDEwMDAwMDAxMCAgLT4gIDEwMTExMTEwMQ0KLWRxeG9yMDQ0IHhvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTAxMQ0KLWRxeG9yMDQ1IHhvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMDExMQ0KLWRxeG9yMDQ2IHhvciAgICAgIDExMTEgICAgIDEwMDAxMDAwMCAgLT4gIDEwMDAxMTExMQ0KLWRxeG9yMDQ3IHhvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQ0KLWRxeG9yMDQ4IHhvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQ0KLWRxeG9yMDQ5IHhvciAgICAgICAgIDEgICAgIDExMDAwMDAwMCAgLT4gIDExMDAwMDAwMQ0KLQ0KLWRxeG9yMDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExMA0KLWRxeG9yMDUxIHhvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTEwDQotZHF4b3IwNTIgeG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMA0KLWRxeG9yMDUzIHhvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMA0KLWRxeG9yMDU0IHhvciAgICAgMTExMTExICAxICAtPiAgMTExMTEwDQotZHF4b3IwNTUgeG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMA0KLWRxeG9yMDU2IHhvciAgICAgICAxMTExICAxICAtPiAgMTExMA0KLWRxeG9yMDU3IHhvciAgICAgICAgMTExICAxICAtPiAgMTEwDQotZHF4b3IwNTggeG9yICAgICAgICAgMTEgIDEgIC0+ICAxMA0KLWRxeG9yMDU5IHhvciAgICAgICAgICAxICAxICAtPiAgMA0KLQ0KLWRxeG9yMDYwIHhvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExMQ0KLWRxeG9yMDYxIHhvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExDQotZHF4b3IwNjIgeG9yICAgMTExMTExMTEgIDAgIC0+ICAxMTExMTExMQ0KLWRxeG9yMDYzIHhvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQ0KLWRxeG9yMDY0IHhvciAgICAgMTExMTExICAwICAtPiAgMTExMTExDQotZHF4b3IwNjUgeG9yICAgICAgMTExMTEgIDAgIC0+ICAxMTExMQ0KLWRxeG9yMDY2IHhvciAgICAgICAxMTExICAwICAtPiAgMTExMQ0KLWRxeG9yMDY3IHhvciAgICAgICAgMTExICAwICAtPiAgMTExDQotZHF4b3IwNjggeG9yICAgICAgICAgMTEgIDAgIC0+ICAxMQ0KLWRxeG9yMDY5IHhvciAgICAgICAgICAxICAwICAtPiAgMQ0KLQ0KLWRxeG9yMDcwIHhvciAxICAxMTExMTExMTExICAtPiAgMTExMTExMTExMA0KLWRxeG9yMDcxIHhvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTEwDQotZHF4b3IwNzIgeG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMA0KLWRxeG9yMDczIHhvciAxICAgICAxMTExMTExICAtPiAgMTExMTExMA0KLWRxeG9yMDc0IHhvciAxICAgICAgMTExMTExICAtPiAgMTExMTEwDQotZHF4b3IwNzUgeG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMA0KLWRxeG9yMDc2IHhvciAxICAgICAgICAxMTExICAtPiAgMTExMA0KLWRxeG9yMDc3IHhvciAxICAgICAgICAgMTExICAtPiAgMTEwDQotZHF4b3IwNzggeG9yIDEgICAgICAgICAgMTEgIC0+ICAxMA0KLWRxeG9yMDc5IHhvciAxICAgICAgICAgICAxICAtPiAgMA0KLQ0KLWRxeG9yMDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExMQ0KLWRxeG9yMDgxIHhvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExDQotZHF4b3IwODIgeG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQ0KLWRxeG9yMDgzIHhvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQ0KLWRxeG9yMDg0IHhvciAwICAgICAgMTExMTExICAtPiAgMTExMTExDQotZHF4b3IwODUgeG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQ0KLWRxeG9yMDg2IHhvciAwICAgICAgICAxMTExICAtPiAgMTExMQ0KLWRxeG9yMDg3IHhvciAwICAgICAgICAgMTExICAtPiAgMTExDQotZHF4b3IwODggeG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQ0KLWRxeG9yMDg5IHhvciAwICAgICAgICAgICAxICAtPiAgMQ0KLQ0KLWRxeG9yMDkwIHhvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDEwMDAxMDAwMA0KLWRxeG9yMDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMA0KLWRxeG9yMDkyIHhvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gICAgMTAxMDAwMA0KLWRxeG9yMDkzIHhvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gICAgIDExMDAwMA0KLWRxeG9yMDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMA0KLWRxeG9yMDk1IHhvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gICAgICAxMTAwMA0KLWRxeG9yMDk2IHhvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gICAgICAxMDEwMA0KLWRxeG9yMDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMA0KLWRxeG9yMDk4IHhvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gICAgICAxMDAwMQ0KLQ0KLWRxeG9yMTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMA0KLWRxeG9yMTAxIHhvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gICAxMDAxMDAwMA0KLWRxeG9yMTAyIHhvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gICAgMTAxMDAwMA0KLWRxeG9yMTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMA0KLWRxeG9yMTA0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMA0KLWRxeG9yMTA1IHhvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gICAgICAxMTAwMA0KLWRxeG9yMTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMA0KLWRxeG9yMTA3IHhvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gICAgICAxMDAxMA0KLWRxeG9yMTA4IHhvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gICAgICAxMDAwMQ0KLQ0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KLWRxeG9yMjIwIHhvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjIyIHhvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjIzIHhvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjI1IHhvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjI2IHhvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjI4IHhvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjI5IHhvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjMxIHhvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjMyIHhvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGEgZmV3IHJhbmRvbXMNCi1kcXhvcjI0MCB4b3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI0MSB4b3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI0MyB4b3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI0NCB4b3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRA0KLWRxeG9yMjUwIHhvciAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI1MSB4b3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNTIgeG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjUzIHhvciAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI1NCB4b3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNTUgeG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjU2IHhvciAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI1NyB4b3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNTggeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjU5IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI2MCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNjEgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjYyIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI2MyB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNjQgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjY1IHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRC0xDQotZHF4b3IyNzAgeG9yICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjcxIHhvciAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI3MiB4b3IgIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNzMgeG9yICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjc0IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDEwMDAwMCAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI3NSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNzYgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjc3IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDEwMCAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IExTRA0KLWRxeG9yMjgwIHhvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI4MSB4b3IgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyODIgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA4IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjgzIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwOSAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI4NCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyODUgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjg2IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAwMTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI4NyB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNaWRkaWUNCi1kcXhvcjI4OCB4b3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyODkgeG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDAwMDAxIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjkwIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA4MDAwMDAxMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI5MSB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyOTIgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjkzIHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI5NCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyOTUgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHNpZ25zDQotZHF4b3IyOTYgeG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI5NyB4b3IgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjk4IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyOTkgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAxMDAxMDAxMDAxMDAxMDAxMDAwMDEwMDAwMTAwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQ0KLWRxeG9yMzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzMzIgeG9yICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjMzMyB4b3IgIDQgICAxLjAwMDAwMDAwRS0yODIxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzM0IHhvciAgNSAgIDFFLTkwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzMzUgeG9yICA2ICAgLTFFLTkwMCAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjMzNiB4b3IgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzM3IHhvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzMzggeG9yICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM0MSB4b3IgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzQyIHhvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNDMgeG9yICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM0NCB4b3IgIDFFLTkwOCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzQ1IHhvciAgLTFFLTkwNyAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNDYgeG9yICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM0NyB4b3IgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzQ4IHhvciAgLTkuOTk5OTk5OTlFKzI5OTEgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQotZHF4b3IzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM2MiB4b3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzYzIHhvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM2NSB4b3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzY2IHhvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM3MiB4b3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzczIHhvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM3NSB4b3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzc2IHhvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KLWRxeG9yNzgwIHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I3ODEgeG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjc4MiB4b3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yNzgzIHhvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I3ODQgeG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjc4NSB4b3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yNzg2IHhvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I3ODcgeG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjc4OCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yNzg5IHhvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I3OTAgeG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjc5MSB4b3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yNzkyIHhvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I3OTMgeG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjc5NCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxeG9yODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MDEgeG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgwMiB4b3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MDQgeG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgwNSB4b3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MDcgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgwOCB4b3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MTAgeG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgxMSB4b3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MTMgeG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgxNCB4b3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHF4b3I4MjEgeG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODIzIHhvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MjQgeG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODI2IHhvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MjcgeG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODI5IHhvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MzAgeG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODMyIHhvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MzMgeG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODM1IHhvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MzYgeG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxeG9yODQxIHhvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg0MiB4b3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NDMgeG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODQ0IHhvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg0NSB4b3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NDYgeG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODQ3IHhvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg0OCB4b3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NDkgeG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODUwIHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg1MSB4b3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NTIgeG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODUzIHhvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg1NCB4b3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NTUgeG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODU2IHhvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg1NyB4b3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NTggeG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODU5IHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHF4b3I4NjEgeG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODYzIHhvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NjQgeG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODY2IHhvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NjcgeG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODY5IHhvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NzEgeG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODczIHhvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NzQgeG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODc2IHhvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NzcgeG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODc5IHhvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4ODAgeG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODgyIHhvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4ODMgeG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODg1IHhvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVhvci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIFhPUiBmb3IgZGVjUXVhZHMgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkcXhvcjAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2RxeG9yMDAyIHhvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQorZHF4b3IwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCitkcXhvcjAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDAKK2RxeG9yMDA1IHhvciAgICAgICAgICAxMTAwIDEwMTAgLT4gIDExMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2RxeG9yMDA2IHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2RxeG9yMDA3IHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjAwOCB4b3IgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3IwMDkgeG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZHF4b3IwMTAgeG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZHF4b3IwMTEgeG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yMDEyIHhvciAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjAxMyB4b3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2RxeG9yNjAxIHhvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjAyIHhvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjAzIHhvciAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA0IHhvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA1IHhvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA2IHhvciAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA3IHhvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA4IHhvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA5IHhvciAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjEwIHhvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjExIHhvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjEyIHhvciAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjEzIHhvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE0IHhvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE1IHhvciAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE2IHhvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE3IHhvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE4IHhvciAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE5IHhvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjIwIHhvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjIxIHhvciAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAKK2RxeG9yNjIyIHhvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAKK2RxeG9yNjIzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAKK2RxeG9yNjI0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAKK2RxeG9yNjI1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAKK2RxeG9yNjI2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAKK2RxeG9yNjI3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAKK2RxeG9yNjI4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAKK2RxeG9yNjI5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAKK2RxeG9yNjMwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAKK2RxeG9yNjMxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAKK2RxeG9yNjMyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKK2RxeG9yNjMzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKK2RxeG9yNjM0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworZHF4b3I2NDEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDcgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDkgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTAgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTcgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTkgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NjAgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMAorZHF4b3I2NjEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMAorZHF4b3I2NjIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMAorZHF4b3I2NjMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMAorZHF4b3I2NjQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMAorZHF4b3I2NjUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMAorZHF4b3I2NjYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMAorZHF4b3I2NjcgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMAorZHF4b3I2NjggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMAorZHF4b3I2NjkgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMAorZHF4b3I2NzAgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMAorZHF4b3I2NzEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMAorZHF4b3I2NzIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMAorZHF4b3I2NzMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorZHF4b3I2NzQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorZHF4b3I2NzUgeG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHF4b3I2NzYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisKK2RxeG9yMDIxIHhvciAxMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjIgeG9yICAxMTExMTExMTAwMDAwMDAgICAgICAxMTExMTExMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAyMyB4b3IgICAxMTExMTExMDAwMDAwMCAgICAgICAxMTExMTExMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDI0IHhvciAgICAxMTExMTEwMDAwMDAwICAgICAgICAxMTExMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjUgeG9yICAgICAxMTExMTAwMDAwMDAgICAgICAgICAxMTExMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAyNiB4b3IgICAgICAxMTExMDAwMDAwMCAgICAgICAgICAxMTExMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDI3IHhvciAgICAgICAxMTEwMDAwMDAwICAgICAgICAgICAxMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjggeG9yICAgICAgICAxMTAwMDAwMDAgICAgICAgICAgICAxMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAyOSB4b3IgICAgICAgICAxMDAwMDAwMCAgICAgICAgICAgICAxMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDMwIHhvciAgICAgICAgICAxMDAwMDAwICAgICAgICAgICAgICAxMDAwMDAwICAtPiAgMAorZHF4b3IwMzEgeG9yICAgICAgICAgICAxMDAwMDAgICAgICAgICAgICAgICAxMDAwMDAgIC0+ICAwCitkcXhvcjAzMiB4b3IgICAgICAgICAgICAxMDAwMCAgICAgICAgICAgICAgICAxMDAwMCAgLT4gIDAKK2RxeG9yMDMzIHhvciAgICAgICAgICAgICAxMDAwICAgICAgICAgICAgICAgICAxMDAwICAtPiAgMAorZHF4b3IwMzQgeG9yICAgICAgICAgICAgICAxMDAgICAgICAgICAgICAgICAgICAxMDAgIC0+ICAwCitkcXhvcjAzNSB4b3IgICAgICAgICAgICAgICAxMCAgICAgICAgICAgICAgICAgICAxMCAgLT4gIDAKK2RxeG9yMDM2IHhvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgMAorCitkcXhvcjA0MCB4b3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTEwMDAwMDAwMDAKK2RxeG9yMDQxIHhvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTEwMDAwMDAwMAorZHF4b3IwNDIgeG9yICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTAwMDAwMDAwCitkcXhvcjA0MyB4b3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMDEKK2RxeG9yMDQ0IHhvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTAxMQorZHF4b3IwNDUgeG9yICAgICAxMTExMSAgICAgMTAwMDAxMDAwICAtPiAgMTAwMDEwMTExCitkcXhvcjA0NiB4b3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTEKK2RxeG9yMDQ3IHhvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQorZHF4b3IwNDggeG9yICAgICAgICAxMSAgICAgMTAxMDAwMDAwICAtPiAgMTAxMDAwMDExCitkcXhvcjA0OSB4b3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDEKKworZHF4b3IwNTAgeG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTEwCitkcXhvcjA1MSB4b3IgIDExMTExMTExMSAgMSAgLT4gIDExMTExMTExMAorZHF4b3IwNTIgeG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMAorZHF4b3IwNTMgeG9yICAgIDExMTExMTEgIDEgIC0+ICAxMTExMTEwCitkcXhvcjA1NCB4b3IgICAgIDExMTExMSAgMSAgLT4gIDExMTExMAorZHF4b3IwNTUgeG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMAorZHF4b3IwNTYgeG9yICAgICAgIDExMTEgIDEgIC0+ICAxMTEwCitkcXhvcjA1NyB4b3IgICAgICAgIDExMSAgMSAgLT4gIDExMAorZHF4b3IwNTggeG9yICAgICAgICAgMTEgIDEgIC0+ICAxMAorZHF4b3IwNTkgeG9yICAgICAgICAgIDEgIDEgIC0+ICAwCisKK2RxeG9yMDYwIHhvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExMQorZHF4b3IwNjEgeG9yICAxMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTEKK2RxeG9yMDYyIHhvciAgIDExMTExMTExICAwICAtPiAgMTExMTExMTEKK2RxeG9yMDYzIHhvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQorZHF4b3IwNjQgeG9yICAgICAxMTExMTEgIDAgIC0+ICAxMTExMTEKK2RxeG9yMDY1IHhvciAgICAgIDExMTExICAwICAtPiAgMTExMTEKK2RxeG9yMDY2IHhvciAgICAgICAxMTExICAwICAtPiAgMTExMQorZHF4b3IwNjcgeG9yICAgICAgICAxMTEgIDAgIC0+ICAxMTEKK2RxeG9yMDY4IHhvciAgICAgICAgIDExICAwICAtPiAgMTEKK2RxeG9yMDY5IHhvciAgICAgICAgICAxICAwICAtPiAgMQorCitkcXhvcjA3MCB4b3IgMSAgMTExMTExMTExMSAgLT4gIDExMTExMTExMTAKK2RxeG9yMDcxIHhvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTEwCitkcXhvcjA3MiB4b3IgMSAgICAxMTExMTExMSAgLT4gIDExMTExMTEwCitkcXhvcjA3MyB4b3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTAKK2RxeG9yMDc0IHhvciAxICAgICAgMTExMTExICAtPiAgMTExMTEwCitkcXhvcjA3NSB4b3IgMSAgICAgICAxMTExMSAgLT4gIDExMTEwCitkcXhvcjA3NiB4b3IgMSAgICAgICAgMTExMSAgLT4gIDExMTAKK2RxeG9yMDc3IHhvciAxICAgICAgICAgMTExICAtPiAgMTEwCitkcXhvcjA3OCB4b3IgMSAgICAgICAgICAxMSAgLT4gIDEwCitkcXhvcjA3OSB4b3IgMSAgICAgICAgICAgMSAgLT4gIDAKKworZHF4b3IwODAgeG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTExCitkcXhvcjA4MSB4b3IgMCAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorZHF4b3IwODIgeG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQorZHF4b3IwODMgeG9yIDAgICAgIDExMTExMTEgIC0+ICAxMTExMTExCitkcXhvcjA4NCB4b3IgMCAgICAgIDExMTExMSAgLT4gIDExMTExMQorZHF4b3IwODUgeG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQorZHF4b3IwODYgeG9yIDAgICAgICAgIDExMTEgIC0+ICAxMTExCitkcXhvcjA4NyB4b3IgMCAgICAgICAgIDExMSAgLT4gIDExMQorZHF4b3IwODggeG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQorZHF4b3IwODkgeG9yIDAgICAgICAgICAgIDEgIC0+ICAxCisKK2RxeG9yMDkwIHhvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDEwMDAxMDAwMAorZHF4b3IwOTEgeG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgIDEwMDEwMDAwCitkcXhvcjA5MiB4b3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAgIDEwMTAwMDAKK2RxeG9yMDkzIHhvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gICAgIDExMDAwMAorZHF4b3IwOTQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCitkcXhvcjA5NSB4b3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAgICAgMTEwMDAKK2RxeG9yMDk2IHhvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gICAgICAxMDEwMAorZHF4b3IwOTcgeG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgICAgIDEwMDEwCitkcXhvcjA5OCB4b3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAgICAgMTAwMDEKKworZHF4b3IxMDAgeG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTAwMDEwMDAwCitkcXhvcjEwMSB4b3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAgMTAwMTAwMDAKK2RxeG9yMTAyIHhvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gICAgMTAxMDAwMAorZHF4b3IxMDMgeG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgICAgMTEwMDAwCitkcXhvcjEwNCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDAKK2RxeG9yMTA1IHhvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gICAgICAxMTAwMAorZHF4b3IxMDYgeG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgICAgIDEwMTAwCitkcXhvcjEwNyB4b3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAgICAgMTAwMTAKK2RxeG9yMTA4IHhvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gICAgICAxMDAwMQorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2RxeG9yMjIwIHhvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjEgeG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyMiB4b3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjIzIHhvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjQgeG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyNSB4b3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjI2IHhvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjcgeG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyOCB4b3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjI5IHhvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMzAgeG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIzMSB4b3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjMyIHhvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZHF4b3IyNDAgeG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI0MSB4b3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjQyIHhvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNDMgeG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI0NCB4b3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkcXhvcjI1MCB4b3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1MSB4b3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1MiB4b3IgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1MyB4b3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1NCB4b3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1NSB4b3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1NiB4b3IgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1NyB4b3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1OCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1OSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2MCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2MSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2MiB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2MyB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2NCB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2NSB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkcXhvcjI3MCB4b3IgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3MSB4b3IgIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3MiB4b3IgIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3MyB4b3IgIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3NCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3NSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3NiB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3NyB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZHF4b3IyODAgeG9yICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODEgeG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODIgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA4IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODMgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDA5IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODQgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODUgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODYgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDAxMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODcgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2RxeG9yMjg4IHhvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjg5IHhvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjkwIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA4MDAwMDAxMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjkxIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDA5MDAwMDEwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjkyIHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjkzIHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjk0IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjk1IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitkcXhvcjI5NiB4b3IgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyOTcgeG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjk4IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5OSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDEwMDEwMDEwMDEwMDEwMDEwMDAwMTAwMDAxMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZHF4b3IzMzEgeG9yICAyICAgOS45OTk5OTk5OUUrOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzMyIHhvciAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjMzMyB4b3IgIDQgICAxLjAwMDAwMDAwRS0yODIxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzMzQgeG9yICA1ICAgMUUtOTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzM1IHhvciAgNiAgIC0xRS05MDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjMzNiB4b3IgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzMzcgeG9yICA4ICAgLTFFLTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzM4IHhvciAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM0MSB4b3IgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDIgeG9yICAxRS05OTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzQzIHhvciAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM0NCB4b3IgIDFFLTkwOCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDUgeG9yICAtMUUtOTA3ICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzQ2IHhvciAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM0NyB4b3IgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDggeG9yICAtOS45OTk5OTk5OUUrMjk5MSAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkcXhvcjM2MSB4b3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNjIgeG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzYzIHhvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM2NCB4b3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNjUgeG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzY2IHhvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM3MSB4b3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNzIgeG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzczIHhvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM3NCB4b3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNzUgeG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzc2IHhvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2RxeG9yNzgwIHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4MSB4b3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODIgeG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzgzIHhvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4NCB4b3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODUgeG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzg2IHhvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4NyB4b3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODggeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzg5IHhvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc5MCB4b3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3OTEgeG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzkyIHhvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc5MyB4b3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3OTQgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHF4b3I4MDAgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODAxIHhvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwMiB4b3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDMgeG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODA0IHhvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwNSB4b3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDYgeG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODA3IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwOCB4b3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDkgeG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODEwIHhvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgxMSB4b3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MTIgeG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODEzIHhvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgxNCB4b3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MTUgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHF4b3I4MjEgeG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODIyIHhvciAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyMyB4b3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MjQgeG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODI1IHhvciAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyNiB4b3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MjcgeG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODI4IHhvciAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyOSB4b3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MzAgeG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODMxIHhvciAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgzMiB4b3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MzMgeG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODM0IHhvciAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgzNSB4b3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MzYgeG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODM3IHhvciAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxeG9yODQxIHhvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQyIHhvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQzIHhvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ0IHhvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ1IHhvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ2IHhvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ3IHhvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ4IHhvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ5IHhvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODUwIHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODUxIHhvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODUyIHhvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODUzIHhvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU0IHhvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU1IHhvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU2IHhvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU3IHhvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU4IHhvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU5IHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHF4b3I4NjEgeG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODYyIHhvciArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2MyB4b3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NjQgeG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODY1IHhvciAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2NiB4b3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NjcgeG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODY4IHhvciAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2OSB4b3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzEgeG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODcyIHhvciAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3MyB4b3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzQgeG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODc1IHhvciAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3NiB4b3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzcgeG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODc4IHhvciAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3OSB4b3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4ODAgeG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODgxIHhvciArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg4MiB4b3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4ODMgeG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODg0IHhvciAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg4NSB4b3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzQmFzZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzQmFzZS5kZWNUZXN0CmluZGV4IDhhYzQ1ZmMuLjVlNWU1YTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0Jhc2UuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNCYXNlLmRlY1Rlc3QKQEAgLTEsMTA2MiArMSwxMDYyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkc0Jhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY1NpbmdsZSA8LS0+IHN0cmluZyBjb252ZXJzaW9ucyAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcg0KLS0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBTY2llbnRpZmljIGZvcm0pDQotDQotLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcNCi0tLSB0byBjb25mb3JtIHRvIGVtYXggYW5kIHByZWNpc2lvbiBzZXR0aW5ncyAodGhhdCBpcywgbnVtYmVycyB3aWxsDQotLS0gY29uZm9ybSB0byBydWxlcyBhbmQgZXhwb25lbnQgd2lsbCBiZSBpbiBwZXJtaXR0ZWQgcmFuZ2UpLiAgVGhlDQotLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlDQotLS0gcmVwcmVzZW50ZWQgaW4gYSBkZWNTaW5nbGUuICBTb21lIHRlc3RjYXNlcyBnbyB0byB0aGUgbGltaXQgb2YgdGhlDQotLS0gbmV4dC13aWRlciBmb3JtYXQsIGFuZCBoZW5jZSB0aGVzZSB0ZXN0Y2FzZXMgbWF5IGFsc28gYmUgdXNlZCB0bw0KLS0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLg0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgNw0KLW1heEV4cG9uZW50OiA5Ng0KLW1pbkV4cG9uZW50OiAtOTUNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZHNiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwDQotZHNiYXMwMDIgdG9TY2kgICAgICAgMSAtPiAxDQotZHNiYXMwMDMgdG9TY2kgICAgIDEuMCAtPiAxLjANCi1kc2JhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDANCi1kc2JhczAwNSB0b1NjaSAgICAgIDEwIC0+IDEwDQotZHNiYXMwMDYgdG9TY2kgICAgMTAwMCAtPiAxMDAwDQotZHNiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wDQotZHNiYXMwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xDQotZHNiYXMwMDkgdG9TY2kgICAgMTAuNCAtPiAxMC40DQotZHNiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41DQotZHNiYXMwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42DQotZHNiYXMwMTIgdG9TY2kgICAgMTAuOSAtPiAxMC45DQotZHNiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wDQotZHNiYXMwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0DQotZHNiYXMwMTUgdG9TY2kgIDAuMTIzIC0+IDAuMTIzDQotZHNiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyDQotZHNiYXMwMTcgdG9TY2kgIC0wICAgIC0+IC0wDQotZHNiYXMwMTggdG9TY2kgIC0wLjAgIC0+IC0wLjANCi1kc2JhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDANCi0NCi1kc2JhczAyMSB0b1NjaSAgICAgLTEgLT4gLTENCi1kc2JhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMA0KLWRzYmFzMDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xDQotZHNiYXMwMjQgdG9TY2kgICAtOS4xIC0+IC05LjENCi1kc2JhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExDQotZHNiYXMwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5DQotZHNiYXMwMjcgdG9TY2kgICAtOS45OTkgLT4gLTkuOTk5DQotDQotZHNiYXMwMzAgdG9TY2kgICcxMjM0LjU2NycgICAtPiAnMTIzNC41NjcnDQotZHNiYXMwMzEgdG9TY2kgICcxMjM0LjAwMCcgICAtPiAnMTIzNC4wMDAnDQotZHNiYXMwMzIgdG9TY2kgICAnMTIzNDkxMicgICAtPiAnMTIzNDkxMicNCi1kc2JhczAzMyB0b1NjaSAgICcwLjAwMDAxMjM0NTY3JyAgIC0+ICcwLjAwMDAxMjM0NTY3Jw0KLWRzYmFzMDM0IHRvU2NpICAnMC4wMDAwMDEyMzQ1NjcnICAgLT4gJzAuMDAwMDAxMjM0NTY3Jw0KLWRzYmFzMDM1IHRvU2NpICcwLjAwMDAwMDEyMzQ1NjcnICAgLT4gJzEuMjM0NTY3RS03Jw0KLWRzYmFzMDM2IHRvU2NpICcwLjAwMDAwMDAxMjM0NTY3JyAgLT4gJzEuMjM0NTY3RS04Jw0KLQ0KLWRzYmFzMDM3IHRvU2NpICcwLjEyMzQ1NjQnICAgLT4gJzAuMTIzNDU2NCcNCi1kc2JhczAzOCB0b1NjaSAnMC4xMjM0NTY1JyAgIC0+ICcwLjEyMzQ1NjUnDQotDQotLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkNCi1kc2JzbjAwMSB0b1NjaSAtOS45OTk5OTlFKzk2IC0+IC05Ljk5OTk5OUUrOTYNCi1kc2JzbjAwMiB0b1NjaSAtMUUtOTUgLT4gLTFFLTk1DQotZHNic24wMDMgdG9TY2kgLTFFLTEwMSAtPiAtMUUtMTAxIFN1Ym5vcm1hbA0KLWRzYnNuMDA0IHRvU2NpIC0wIC0+IC0wDQotZHNic24wMDUgdG9TY2kgKzAgLT4gIDANCi1kc2JzbjAwNiB0b1NjaSArMUUtMTAxIC0+ICAxRS0xMDEgU3Vibm9ybWFsDQotZHNic24wMDcgdG9TY2kgKzFFLTk1IC0+ICAxRS05NQ0KLWRzYnNuMDA4IHRvU2NpICs5Ljk5OTk5OUUrOTYgLT4gIDkuOTk5OTk5RSs5Ng0KLQ0KLS0tIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCBlbHNld2hlcmVdDQotLS0gc3RyaW5ncyB3aXRob3V0IEUgY2Fubm90IGdlbmVyYXRlIEUgaW4gcmVzdWx0DQotZHNiYXMwNDAgdG9TY2kgIjEyIiAgICAgICAgLT4gJzEyJw0KLWRzYmFzMDQxIHRvU2NpICItNzYiICAgICAgIC0+ICctNzYnDQotZHNiYXMwNDIgdG9TY2kgIjEyLjc2IiAgICAgLT4gJzEyLjc2Jw0KLWRzYmFzMDQzIHRvU2NpICIrMTIuNzYiICAgIC0+ICcxMi43NicNCi1kc2JhczA0NCB0b1NjaSAiMDEyLjc2IiAgICAtPiAnMTIuNzYnDQotZHNiYXMwNDUgdG9TY2kgIiswLjAwMyIgICAgLT4gJzAuMDAzJw0KLWRzYmFzMDQ2IHRvU2NpICIxNy4iICAgICAgIC0+ICcxNycNCi1kc2JhczA0NyB0b1NjaSAiLjUiICAgICAgICAtPiAnMC41Jw0KLWRzYmFzMDQ4IHRvU2NpICIwNDQiICAgICAgIC0+ICc0NCcNCi1kc2JhczA0OSB0b1NjaSAiMDA0NCIgICAgICAtPiAnNDQnDQotZHNiYXMwNTAgdG9TY2kgIjAuMDAwNSIgICAgICAtPiAnMC4wMDA1Jw0KLWRzYmFzMDUxIHRvU2NpICIwMC4wMDAwNSIgICAgLT4gJzAuMDAwMDUnDQotZHNiYXMwNTIgdG9TY2kgIjAuMDAwMDA1IiAgICAtPiAnMC4wMDAwMDUnDQotZHNiYXMwNTMgdG9TY2kgIjAuMDAwMDA1MCIgICAtPiAnMC4wMDAwMDUwJw0KLWRzYmFzMDU0IHRvU2NpICIwLjAwMDAwMDUiICAgLT4gJzVFLTcnDQotZHNiYXMwNTUgdG9TY2kgIjAuMDAwMDAwMDUiICAtPiAnNUUtOCcNCi1kc2JhczA1NiB0b1NjaSAiMTI2NzguNTQiIC0+ICcxMjY3OC41NCcNCi1kc2JhczA1NyB0b1NjaSAiMjY3OC41NDMiIC0+ICcyNjc4LjU0MycNCi1kc2JhczA1OCB0b1NjaSAiMzQ1Njc4LjUiIC0+ICczNDU2NzguNScNCi1kc2JhczA1OSB0b1NjaSAiMDY3OC41NDMyIiAtPiAnNjc4LjU0MzInDQotZHNiYXMwNjAgdG9TY2kgIjY3OC41NDMyIiAtPiAnNjc4LjU0MzInDQotZHNiYXMwNjEgdG9TY2kgIis2NzguNTQzMiIgLT4gJzY3OC41NDMyJw0KLWRzYmFzMDYyIHRvU2NpICIrMDY3OC41NDMyIiAtPiAnNjc4LjU0MzInDQotZHNiYXMwNjMgdG9TY2kgIiswMDY3OC41NDMyIiAtPiAnNjc4LjU0MzInDQotZHNiYXMwNjQgdG9TY2kgIi02NzguNTQzMiIgIC0+ICctNjc4LjU0MzInDQotZHNiYXMwNjUgdG9TY2kgIi0wNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJw0KLWRzYmFzMDY2IHRvU2NpICItMDA2NzguNTQzMiIgIC0+ICctNjc4LjU0MzInDQotLS0gZXhhbXBsZXMNCi1kc2JhczA2NyB0b1NjaSAiNUUtNiIgICAgICAgIC0+ICcwLjAwMDAwNScNCi1kc2JhczA2OCB0b1NjaSAiNTBFLTciICAgICAgIC0+ICcwLjAwMDAwNTAnDQotZHNiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycNCi0NCi0tLSBbTm8gZXhvdGljcyBhcyBubyBVbmljb2RlXQ0KLQ0KLS0tIHJvdW5kZWQgd2l0aCBkb3RzIGluIGFsbCAoaW5jbHVkaW5nIGVkZ2UpIHBsYWNlcw0KLWRzYmFzMDcxIHRvU2NpICAuMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gMC4xMjM0NTY4IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MDEyMzQ1NiAgLT4gMS4yMzQ1NjggSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkwMTIzNDU2ICAtPiAxMi4zNDU2OCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczA3NCB0b1NjaSAgMTIzLjQ1Njc4OTAxMjM0NTYgIC0+IDEyMy40NTY4IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MDEyMzQ1NiAgLT4gMTIzNC41NjggSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkwMTIzNDU2ICAtPiAxMjM0NS42OCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczA3NyB0b1NjaSAgMTIzNDU2Ljc4OTAxMjM0NTYgIC0+IDEyMzQ1Ni44IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MDEyMzQ1NiAgLT4gMTIzNDU2OCAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkwMTIzNDU2ICAtPiAxLjIzNDU2OEUrNyBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczA4MCB0b1NjaSAgMTIzNDU2Nzg5LjAxMjM0NTYgIC0+IDEuMjM0NTY4RSs4IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkwLjEyMzQ1NiAgLT4gMS4yMzQ1NjhFKzkgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTAxLjIzNDU2ICAtPiAxLjIzNDU2OEUrMTAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwODMgdG9TY2kgIDEyMzQ1Njc4OTAxMi4zNDU2ICAtPiAxLjIzNDU2OEUrMTEgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwODQgdG9TY2kgIDEyMzQ1Njc4OTAxMjMuNDU2ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0LjU2ICAtPiAxLjIzNDU2OEUrMTMgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwODYgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NS42ICAtPiAxLjIzNDU2OEUrMTQgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwODcgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYuICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYgICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTnVtYmVycyB3aXRoIEUNCi1kc2JhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJw0KLWRzYmFzMTMxIHRvU2NpICIwLjAwMEUtMiIgIC0+ICcwLjAwMDAwJw0KLWRzYmFzMTMyIHRvU2NpICIwLjAwMEUtMyIgIC0+ICcwLjAwMDAwMCcNCi1kc2JhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycNCi1kc2JhczEzNCB0b1NjaSAiMC4wMEUtMiIgICAtPiAnMC4wMDAwJw0KLWRzYmFzMTM1IHRvU2NpICIwLjAwRS0zIiAgIC0+ICcwLjAwMDAwJw0KLWRzYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcNCi1kc2JhczEzNyB0b1NjaSAiMC4wMEUtNSIgICAtPiAnMEUtNycNCi1kc2JhczEzOCB0b1NjaSAiKzBFKzkiICAgICAtPiAnMEUrOScNCi1kc2JhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknDQotZHNiYXMxNDAgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknDQotZHNiYXMxNDEgdG9TY2kgIjFlKzA5IiAgICAgLT4gJzFFKzknDQotZHNiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJw0KLWRzYmFzMTQzIHRvU2NpICIrMUUrMDA5IiAgIC0+ICcxRSs5Jw0KLWRzYmFzMTQ0IHRvU2NpICIwRSs5IiAgICAgIC0+ICcwRSs5Jw0KLWRzYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5Jw0KLWRzYmFzMTQ2IHRvU2NpICIxRSswOSIgICAgIC0+ICcxRSs5Jw0KLWRzYmFzMTQ3IHRvU2NpICIxZSs5MCIgICAgIC0+ICcxRSs5MCcNCi1kc2JhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScNCi1kc2JhczE0OSB0b1NjaSAiMDAwRSs5IiAgICAtPiAnMEUrOScNCi1kc2JhczE1MCB0b1NjaSAiMUU5IiAgICAgICAtPiAnMUUrOScNCi1kc2JhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScNCi1kc2JhczE1MiB0b1NjaSAiMUU5MCIgICAgICAtPiAnMUUrOTAnDQotZHNiYXMxNTMgdG9TY2kgIjFFMDA5IiAgICAgLT4gJzFFKzknDQotZHNiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknDQotZHNiYXMxNTUgdG9TY2kgIjAuMDAwZSswIiAgLT4gJzAuMDAwJw0KLWRzYmFzMTU2IHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnDQotZHNiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknDQotZHNiYXMxNTggdG9TY2kgIjQ0RSs5IiAgICAgLT4gJzQuNEUrMTAnDQotZHNiYXMxNTkgdG9TY2kgIjAuNzNlLTciICAgLT4gJzcuM0UtOCcNCi1kc2JhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScNCi1kc2JhczE2MSB0b1NjaSAiMDBFLTkiICAgICAtPiAnMEUtOScNCi1kc2JhczE2MiB0b1NjaSAiMTBFKzkiICAgICAtPiAnMS4wRSsxMCcNCi1kc2JhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcNCi1kc2JhczE2NCB0b1NjaSAiMTBlKzkwIiAgICAtPiAnMS4wRSs5MScNCi1kc2JhczE2NSB0b1NjaSAiMTBFKzAwOSIgICAtPiAnMS4wRSsxMCcNCi1kc2JhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnDQotZHNiYXMxNjcgdG9TY2kgIjEwMGUrMDkiICAgLT4gJzEuMDBFKzExJw0KLWRzYmFzMTY4IHRvU2NpICIxMDBFKzkwIiAgIC0+ICcxLjAwRSs5MicNCi1kc2JhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnDQotDQotZHNiYXMxNzAgdG9TY2kgIjEuMjY1IiAgICAgLT4gJzEuMjY1Jw0KLWRzYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnDQotZHNiYXMxNzIgdG9TY2kgIjEuMjY1RS04IiAgLT4gJzEuMjY1RS04Jw0KLWRzYmFzMTczIHRvU2NpICIxLjI2NUUtNCIgIC0+ICcwLjAwMDEyNjUnDQotZHNiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1Jw0KLWRzYmFzMTc1IHRvU2NpICIxLjI2NUUtMiIgIC0+ICcwLjAxMjY1Jw0KLWRzYmFzMTc2IHRvU2NpICIxLjI2NUUtMSIgIC0+ICcwLjEyNjUnDQotZHNiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1Jw0KLWRzYmFzMTc4IHRvU2NpICIxLjI2NUUrMSIgIC0+ICcxMi42NScNCi1kc2JhczE3OSB0b1NjaSAiMS4yNjVFKzIiICAtPiAnMTI2LjUnDQotZHNiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnDQotZHNiYXMxODEgdG9TY2kgIjEuMjY1RSs0IiAgLT4gJzEuMjY1RSs0Jw0KLWRzYmFzMTgyIHRvU2NpICIxLjI2NUUrOCIgIC0+ICcxLjI2NUUrOCcNCi1kc2JhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJw0KLQ0KLWRzYmFzMTkwIHRvU2NpICIxMi42NSIgICAgIC0+ICcxMi42NScNCi1kc2JhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5Jw0KLWRzYmFzMTkyIHRvU2NpICIxMi42NUUtOCIgIC0+ICcxLjI2NUUtNycNCi1kc2JhczE5MyB0b1NjaSAiMTIuNjVFLTQiICAtPiAnMC4wMDEyNjUnDQotZHNiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnDQotZHNiYXMxOTUgdG9TY2kgIjEyLjY1RS0yIiAgLT4gJzAuMTI2NScNCi1kc2JhczE5NiB0b1NjaSAiMTIuNjVFLTEiICAtPiAnMS4yNjUnDQotZHNiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1Jw0KLWRzYmFzMTk4IHRvU2NpICIxMi42NUUrMSIgIC0+ICcxMjYuNScNCi1kc2JhczE5OSB0b1NjaSAiMTIuNjVFKzIiICAtPiAnMTI2NScNCi1kc2JhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnDQotZHNiYXMyMDEgdG9TY2kgIjEyLjY1RSs0IiAgLT4gJzEuMjY1RSs1Jw0KLWRzYmFzMjAyIHRvU2NpICIxMi42NUUrOCIgIC0+ICcxLjI2NUUrOScNCi1kc2JhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJw0KLQ0KLWRzYmFzMjEwIHRvU2NpICIxMjYuNSIgICAgIC0+ICcxMjYuNScNCi1kc2JhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4Jw0KLWRzYmFzMjEyIHRvU2NpICIxMjYuNUUtOCIgIC0+ICcwLjAwMDAwMTI2NScNCi1kc2JhczIxMyB0b1NjaSAiMTI2LjVFLTQiICAtPiAnMC4wMTI2NScNCi1kc2JhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1Jw0KLWRzYmFzMjE1IHRvU2NpICIxMjYuNUUtMiIgIC0+ICcxLjI2NScNCi1kc2JhczIxNiB0b1NjaSAiMTI2LjVFLTEiICAtPiAnMTIuNjUnDQotZHNiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41Jw0KLWRzYmFzMjE4IHRvU2NpICIxMjYuNUUrMSIgIC0+ICcxMjY1Jw0KLWRzYmFzMjE5IHRvU2NpICIxMjYuNUUrMiIgIC0+ICcxLjI2NUUrNCcNCi1kc2JhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnDQotZHNiYXMyMjEgdG9TY2kgIjEyNi41RSs0IiAgLT4gJzEuMjY1RSs2Jw0KLWRzYmFzMjIyIHRvU2NpICIxMjYuNUUrOCIgIC0+ICcxLjI2NUUrMTAnDQotZHNiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicNCi0NCi1kc2JhczIzMCB0b1NjaSAiMTI2NSIgICAgIC0+ICcxMjY1Jw0KLWRzYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycNCi1kc2JhczIzMiB0b1NjaSAiMTI2NUUtOCIgIC0+ICcwLjAwMDAxMjY1Jw0KLWRzYmFzMjMzIHRvU2NpICIxMjY1RS00IiAgLT4gJzAuMTI2NScNCi1kc2JhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScNCi1kc2JhczIzNSB0b1NjaSAiMTI2NUUtMiIgIC0+ICcxMi42NScNCi1kc2JhczIzNiB0b1NjaSAiMTI2NUUtMSIgIC0+ICcxMjYuNScNCi1kc2JhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1Jw0KLWRzYmFzMjM4IHRvU2NpICIxMjY1RSsxIiAgLT4gJzEuMjY1RSs0Jw0KLWRzYmFzMjM5IHRvU2NpICIxMjY1RSsyIiAgLT4gJzEuMjY1RSs1Jw0KLWRzYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2Jw0KLWRzYmFzMjQxIHRvU2NpICIxMjY1RSs0IiAgLT4gJzEuMjY1RSs3Jw0KLWRzYmFzMjQyIHRvU2NpICIxMjY1RSs4IiAgLT4gJzEuMjY1RSsxMScNCi1kc2JhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnDQotDQotZHNiYXMyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnDQotZHNiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnDQotZHNiYXMyNTIgdG9TY2kgIjAuMTI2NUUtOCIgIC0+ICcxLjI2NUUtOScNCi1kc2JhczI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnDQotZHNiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnDQotZHNiYXMyNTUgdG9TY2kgIjAuMTI2NUUtMiIgIC0+ICcwLjAwMTI2NScNCi1kc2JhczI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnDQotZHNiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnDQotZHNiYXMyNTggdG9TY2kgIjAuMTI2NUUrMSIgIC0+ICcxLjI2NScNCi1kc2JhczI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1Jw0KLWRzYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnDQotZHNiYXMyNjEgdG9TY2kgIjAuMTI2NUUrNCIgIC0+ICcxMjY1Jw0KLWRzYmFzMjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnDQotZHNiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknDQotDQotLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQ0KLWRzYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcNCi1kc2JhczI5MSB0b1NjaSAiLTAuMDAwRS0yIiAgLT4gJy0wLjAwMDAwJw0KLWRzYmFzMjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJw0KLWRzYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnDQotZHNiYXMyOTQgdG9TY2kgIi0wLjAwRS0yIiAgIC0+ICctMC4wMDAwJw0KLWRzYmFzMjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnDQotZHNiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnDQotZHNiYXMyOTcgdG9TY2kgIi0wLjBFLTMiICAgIC0+ICctMC4wMDAwJw0KLWRzYmFzMjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnDQotZHNiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnDQotDQotLS0gRW5naW5lZXJpbmcgbm90YXRpb24gdGVzdHMNCi1kc2JhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMNCi1kc2JhczMwMiAgdG9FbmcgMTBlMTIgIC0+IDEwRSsxMg0KLWRzYmFzMzAzICB0b1NjaSAxMGUxMSAgLT4gMS4wRSsxMg0KLWRzYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMg0KLWRzYmFzMzA1ICB0b1NjaSAxMGUxMCAgLT4gMS4wRSsxMQ0KLWRzYmFzMzA2ICB0b0VuZyAxMGUxMCAgLT4gMTAwRSs5DQotZHNiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwDQotZHNiYXMzMDggIHRvRW5nIDEwZTkgICAtPiAxMEUrOQ0KLWRzYmFzMzA5ICB0b1NjaSAxMGU4ICAgLT4gMS4wRSs5DQotZHNiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkNCi1kc2JhczMxMSAgdG9TY2kgMTBlNyAgIC0+IDEuMEUrOA0KLWRzYmFzMzEyICB0b0VuZyAxMGU3ICAgLT4gMTAwRSs2DQotZHNiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcNCi1kc2JhczMxNCAgdG9FbmcgMTBlNiAgIC0+IDEwRSs2DQotZHNiYXMzMTUgIHRvU2NpIDEwZTUgICAtPiAxLjBFKzYNCi1kc2JhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNg0KLWRzYmFzMzE3ICB0b1NjaSAxMGU0ICAgLT4gMS4wRSs1DQotZHNiYXMzMTggIHRvRW5nIDEwZTQgICAtPiAxMDBFKzMNCi1kc2JhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNA0KLWRzYmFzMzIwICB0b0VuZyAxMGUzICAgLT4gMTBFKzMNCi1kc2JhczMyMSAgdG9TY2kgMTBlMiAgIC0+IDEuMEUrMw0KLWRzYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszDQotZHNiYXMzMjMgIHRvU2NpIDEwZTEgICAtPiAxLjBFKzINCi1kc2JhczMyNCAgdG9FbmcgMTBlMSAgIC0+IDEwMA0KLWRzYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTANCi1kc2JhczMyNiAgdG9FbmcgMTBlMCAgIC0+IDEwDQotZHNiYXMzMjcgIHRvU2NpIDEwZS0xICAtPiAxLjANCi1kc2JhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMA0KLWRzYmFzMzI5ICB0b1NjaSAxMGUtMiAgLT4gMC4xMA0KLWRzYmFzMzMwICB0b0VuZyAxMGUtMiAgLT4gMC4xMA0KLWRzYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTANCi1kc2JhczMzMiAgdG9FbmcgMTBlLTMgIC0+IDAuMDEwDQotZHNiYXMzMzMgIHRvU2NpIDEwZS00ICAtPiAwLjAwMTANCi1kc2JhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMA0KLWRzYmFzMzM1ICB0b1NjaSAxMGUtNSAgLT4gMC4wMDAxMA0KLWRzYmFzMzM2ICB0b0VuZyAxMGUtNSAgLT4gMC4wMDAxMA0KLWRzYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTANCi1kc2JhczMzOCAgdG9FbmcgMTBlLTYgIC0+IDAuMDAwMDEwDQotZHNiYXMzMzkgIHRvU2NpIDEwZS03ICAtPiAwLjAwMDAwMTANCi1kc2JhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMA0KLWRzYmFzMzQxICB0b1NjaSAxMGUtOCAgLT4gMS4wRS03DQotZHNiYXMzNDIgIHRvRW5nIDEwZS04ICAtPiAxMDBFLTkNCi1kc2JhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOA0KLWRzYmFzMzQ0ICB0b0VuZyAxMGUtOSAgLT4gMTBFLTkNCi1kc2JhczM0NSAgdG9TY2kgMTBlLTEwIC0+IDEuMEUtOQ0KLWRzYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05DQotZHNiYXMzNDcgIHRvU2NpIDEwZS0xMSAtPiAxLjBFLTEwDQotZHNiYXMzNDggIHRvRW5nIDEwZS0xMSAtPiAxMDBFLTEyDQotZHNiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExDQotZHNiYXMzNTAgIHRvRW5nIDEwZS0xMiAtPiAxMEUtMTINCi1kc2JhczM1MSAgdG9TY2kgMTBlLTEzIC0+IDEuMEUtMTINCi1kc2JhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTINCi0NCi1kc2JhczM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTINCi1kc2JhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTINCi1kc2JhczM2MyAgdG9TY2kgN0UxMSAgLT4gN0UrMTENCi1kc2JhczM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5DQotZHNiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwDQotZHNiYXMzNjYgIHRvRW5nIDdFMTAgIC0+IDcwRSs5DQotZHNiYXMzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkNCi1kc2JhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQ0KLWRzYmFzMzY5ICB0b1NjaSA3RTggICAtPiA3RSs4DQotZHNiYXMzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNg0KLWRzYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3DQotZHNiYXMzNzIgIHRvRW5nIDdFNyAgIC0+IDcwRSs2DQotZHNiYXMzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYNCi1kc2JhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNg0KLWRzYmFzMzc1ICB0b1NjaSA3RTUgICAtPiA3RSs1DQotZHNiYXMzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMw0KLWRzYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0DQotZHNiYXMzNzggIHRvRW5nIDdFNCAgIC0+IDcwRSszDQotZHNiYXMzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMNCi1kc2JhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMw0KLWRzYmFzMzgxICB0b1NjaSA3RTIgICAtPiA3RSsyDQotZHNiYXMzODIgIHRvRW5nIDdFMiAgIC0+IDcwMA0KLWRzYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxDQotZHNiYXMzODQgIHRvRW5nIDdFMSAgIC0+IDcwDQotZHNiYXMzODUgIHRvU2NpIDdFMCAgIC0+IDcNCi1kc2JhczM4NiAgdG9FbmcgN0UwICAgLT4gNw0KLWRzYmFzMzg3ICB0b1NjaSA3RS0xICAtPiAwLjcNCi1kc2JhczM4OCAgdG9FbmcgN0UtMSAgLT4gMC43DQotZHNiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcNCi1kc2JhczM5MCAgdG9FbmcgN0UtMiAgLT4gMC4wNw0KLWRzYmFzMzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNw0KLWRzYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNw0KLWRzYmFzMzkzICB0b1NjaSA3RS00ICAtPiAwLjAwMDcNCi1kc2JhczM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3DQotZHNiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcNCi1kc2JhczM5NiAgdG9FbmcgN0UtNSAgLT4gMC4wMDAwNw0KLWRzYmFzMzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNw0KLWRzYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNw0KLWRzYmFzMzk5ICB0b1NjaSA3RS03ICAtPiA3RS03DQotZHNiYXM0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQ0KLWRzYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04DQotZHNiYXM0MDIgIHRvRW5nIDdFLTggIC0+IDcwRS05DQotZHNiYXM0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkNCi1kc2JhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQ0KLWRzYmFzNDA1ICB0b1NjaSA3RS0xMCAtPiA3RS0xMA0KLWRzYmFzNDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyDQotZHNiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExDQotZHNiYXM0MDggIHRvRW5nIDdFLTExIC0+IDcwRS0xMg0KLWRzYmFzNDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMg0KLWRzYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMg0KLWRzYmFzNDExICB0b1NjaSA3RS0xMyAtPiA3RS0xMw0KLWRzYmFzNDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1DQotDQotLS0gRXhhY3RzIHJlbWFpbiBleGFjdCB1cCB0byBwcmVjaXNpb24gLi4NCi1kc2JhczQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMA0KLWRzYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMA0KLWRzYmFzNDI0ICB0b1NjaSAgOTk5LjkgLT4gIDk5OS45DQotZHNiYXM0MjYgIHRvU2NpIDEwMDAuMCAtPiAxMDAwLjANCi1kc2JhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQ0KLWRzYmFzNDMwICB0b1NjaSAxMDAwMCAtPiAxMDAwMA0KLWRzYmFzNDMyICB0b1NjaSAxMDAwICAgICAgICAtPiAxMDAwDQotZHNiYXM0MzQgIHRvU2NpIDEwMDAwICAgICAgIC0+IDEwMDAwDQotZHNiYXM0MzYgIHRvU2NpIDEwMDAwMCAgICAgIC0+IDEwMDAwMA0KLWRzYmFzNDM4ICB0b1NjaSAxMDAwMDAwICAgICAtPiAxMDAwMDAwDQotZHNiYXM0NDAgIHRvU2NpIDEwMDAwMDAwICAgIC0+IDEuMDAwMDAwRSs3ICAgUm91bmRlZA0KLWRzYmFzNDQyICB0b1NjaSAxMDAwMDAwMCAgICAtPiAxLjAwMDAwMEUrNyAgIFJvdW5kZWQNCi1kc2JhczQ0NCAgdG9TY2kgMTAwMDAwMDMgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkIEluZXhhY3QNCi1kc2JhczQ0NiAgdG9TY2kgMTAwMDAwMDUgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkIEluZXhhY3QNCi1kc2JhczQ0OCAgdG9TY2kgMTAwMDAwMDUwICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkIEluZXhhY3QNCi1kc2JhczQ1MCAgdG9TY2kgMTAwMDAwMDkgICAgLT4gMS4wMDAwMDFFKzcgICBSb3VuZGVkIEluZXhhY3QNCi1kc2JhczQ1MiAgdG9TY2kgMTAwMDAwMDAwICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkDQotZHNiYXM0NTQgIHRvU2NpIDEwMDAwMDAwMyAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0DQotZHNiYXM0NTYgIHRvU2NpIDEwMDAwMDAwNSAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0DQotZHNiYXM0NTggIHRvU2NpIDEwMDAwMDAwOSAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0DQotZHNiYXM0NjAgIHRvU2NpIDEwMDAwMDAwMDAgIC0+IDEuMDAwMDAwRSs5ICAgUm91bmRlZA0KLWRzYmFzNDYyICB0b1NjaSAxMDAwMDAwMzAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQgSW5leGFjdA0KLWRzYmFzNDY0ICB0b1NjaSAxMDAwMDAwNTAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQgSW5leGFjdA0KLWRzYmFzNDY2ICB0b1NjaSAxMDAwMDAwOTAwICAtPiAxLjAwMDAwMUUrOSAgIFJvdW5kZWQgSW5leGFjdA0KLWRzYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMCAtPiAxLjAwMDAwMEUrMTAgIFJvdW5kZWQNCi1kc2JhczQ3MCAgdG9TY2kgMTAwMDAwMDMwMDAgLT4gMS4wMDAwMDBFKzEwICBSb3VuZGVkIEluZXhhY3QNCi1kc2JhczQ3MiAgdG9TY2kgMTAwMDAwMDUwMDAgLT4gMS4wMDAwMDBFKzEwICBSb3VuZGVkIEluZXhhY3QNCi1kc2JhczQ3NCAgdG9TY2kgMTAwMDAwMDkwMDAgLT4gMS4wMDAwMDFFKzEwICBSb3VuZGVkIEluZXhhY3QNCi0NCi0tLSBjaGVjayByb3VuZGluZyBtb2RlcyBoZWVkZWQNCi1yb3VuZGluZzogIGNlaWxpbmcNCi1kc2JzcjQwMSAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQNCi1kc2JzcjQwMiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDAzICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MDQgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIHVwDQotZHNic3I0MDUgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkDQotZHNic3I0MDYgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQwNyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDA4ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBmbG9vcg0KLWRzYnNyNDEwICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNDExICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MTIgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQxMyAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl9kb3duDQotZHNic3I0MTUgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkDQotZHNic3I0MTYgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQxNyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDE4ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MTkgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfZXZlbg0KLWRzYnNyNDIxICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNDIyICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MjMgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQyNCAgdG9TY2kgIDEuMTEyMzQ2NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDI1ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBkb3duDQotZHNic3I0MjYgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkDQotZHNic3I0MjcgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQyOCAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDI5ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX3VwDQotZHNic3I0MzEgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkDQotZHNic3I0MzIgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQzMyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDM0ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NyAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MzUgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi0tLSBuZWdhdGl2ZXMNCi1yb3VuZGluZzogIGNlaWxpbmcNCi1kc2JzcjUwMSAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQNCi1kc2JzcjUwMiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTAzICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MDQgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIHVwDQotZHNic3I1MDUgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkDQotZHNic3I1MDYgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUwNyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTA4ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBmbG9vcg0KLWRzYnNyNTEwICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNTExICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MTIgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUxMyAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl9kb3duDQotZHNic3I1MTUgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkDQotZHNic3I1MTYgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUxNyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTE4ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MTkgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfZXZlbg0KLWRzYnNyNTIxICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNTIyICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MjMgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUyNCAgdG9TY2kgLTEuMTEyMzQ2NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTI1ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBkb3duDQotZHNic3I1MjYgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkDQotZHNic3I1MjcgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUyOCAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTI5ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX3VwDQotZHNic3I1MzEgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkDQotZHNic3I1MzIgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUzMyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTM0ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NyAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MzUgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi0NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gVGhlICdiYWRkaWVzJyB0ZXN0cyBmcm9tIERpYWdCaWdEZWNpbWFsLCBwbHVzIHNvbWUgbmV3IG9uZXMNCi1kc2JhczUwMCB0b1NjaSAnMS4uMicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUwMiB0b1NjaSAnLi4nICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUwMyB0b1NjaSAnKysxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUwNSB0b1NjaSAnLSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUwNiB0b1NjaSAnKy0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUwOCB0b1NjaSAnMTJlKysnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUwOSB0b1NjaSAnMTJmNCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUxMSB0b1NjaSAnKyAxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUxMiB0b1NjaSAnMTIgJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUxNCB0b1NjaSAnIC0gMSAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUxNSB0b1NjaSAneCcgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUxNyB0b1NjaSAnMTItJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUxOCB0b1NjaSAnMysnICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUyMCB0b1NjaSAnMWUtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUyMSB0b1NjaSAnN2U5OTk5OWEnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUyMyB0b1NjaSAnN2UxMjM1Njc4OTAxMngnICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUyNCB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUyNiB0b1NjaSAnXHUwZTVhJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUyNyB0b1NjaSAnXHUwYjY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUyOSB0b1NjaSAnMS4zNC41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUzMCB0b1NjaSAnLjEyMy41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUzMiB0b1NjaSAnMDEuMzUtJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUzMyB0b1NjaSAnMDAwMC4uJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUzNSB0b1NjaSAnMDAuLjAwJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUzNiB0b1NjaSAnMTExZSoxMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUzOCB0b1NjaSAnMTExZSsxMisnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczUzOSB0b1NjaSAnMTExZTEtMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU0MSB0b1NjaSAnMTExZTFlKzMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU0MiB0b1NjaSAnMWUxLjAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU0NCB0b1NjaSAndGVuJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU0NSB0b1NjaSAnT05FJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU0NyB0b1NjaSAnMWUxLicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU0OCB0b1NjaSAnMWVlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU1MCB0b1NjaSAnMS4yMy40JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU1MSB0b1NjaSAnMS4yLjEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU1MyB0b1NjaSAnMUUrMS4yLjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU1NCB0b1NjaSAnMUUrKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU1NiB0b1NjaSAnMUUrLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU1NyB0b1NjaSAnMUUtKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU1OSB0b1NjaSAiMUUiIjEiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU2MCB0b1NjaSAiMUUiIiIiIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0tLSBOZWFyLXNwZWNpYWxzDQotZHNiYXM1NjEgdG9TY2kgInFOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NjIgdG9TY2kgIk5hTnEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NjQgdG9TY2kgIkluZmkiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NjUgdG9TY2kgIkluZmluIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NjcgdG9TY2kgIkluZmluaXQiICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NjggdG9TY2kgIi1JbmZpbml0IiAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NzAgdG9TY2kgIjlJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NzEgdG9TY2kgIi0wSW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NzMgdG9TY2kgIi1zTmEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NzQgdG9TY2kgInhOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotDQotLS0gc29tZSBiYWRkaWVzIHdpdGggZG90cyBhbmQgRXMgYW5kIGRvdHMgYW5kIHNwZWNpYWxzDQotZHNiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTc3IHRvU2NpICAnLmUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU3OCB0b1NjaSAgJysuZSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTgwIHRvU2NpICAnLS5lJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU4MSB0b1NjaSAgJ0UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTgzIHRvU2NpICAnKy5FKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU4NCB0b1NjaSAgJy0uRSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLWRzYmFzNTg2IHRvU2NpICAnLk5hTicgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1ODggdG9TY2kgICcrLnNOYU4nICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTg5IHRvU2NpICAnKy5JbmYnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotDQotLS0gWmVyb3MNCi1kc2JhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05DQotZHNiYXM2MDIgdG9TY2kgMC4wMDAwMDAwMCAgICAgICAgLT4gMEUtOA0KLWRzYmFzNjAzIHRvU2NpIDAuMDAwMDAwMCAgICAgICAgIC0+IDBFLTcNCi1kc2JhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRzYmFzNjA1IHRvU2NpIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDANCi1kc2JhczYwNiB0b1NjaSAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDANCi1kc2JhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMA0KLWRzYmFzNjA4IHRvU2NpIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDANCi1kc2JhczYwOSB0b1NjaSAwLjAgICAgICAgICAgICAgICAtPiAwLjANCi1kc2JhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjANCi1kc2JhczYxMSB0b1NjaSAwLiAgICAgICAgICAgICAgICAtPiAwDQotZHNiYXM2MTIgdG9TY2kgLS4wICAgICAgICAgICAgICAgLT4gLTAuMA0KLWRzYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wDQotZHNiYXM2MTQgdG9TY2kgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMA0KLWRzYmFzNjE1IHRvU2NpIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwDQotZHNiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwDQotZHNiYXM2MTcgdG9TY2kgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMA0KLWRzYmFzNjE4IHRvU2NpIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwDQotZHNiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwDQotZHNiYXM2MjAgdG9TY2kgLTAuMDAwMDAwMCAgICAgICAgLT4gLTBFLTcNCi1kc2JhczYyMSB0b1NjaSAtMC4wMDAwMDAwMCAgICAgICAtPiAtMEUtOA0KLWRzYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05DQotDQotZHNiYXM2MzAgdG9TY2kgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMA0KLWRzYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMA0KLWRzYmFzNjMyIHRvU2NpICAwLjAwRSsyICAgICAgICAgIC0+IDANCi1kc2JhczYzMyB0b1NjaSAgMC4wMEUrMyAgICAgICAgICAtPiAwRSsxDQotZHNiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMg0KLWRzYmFzNjM1IHRvU2NpICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMNCi1kc2JhczYzNiB0b1NjaSAgMC4wMEUrNiAgICAgICAgICAtPiAwRSs0DQotZHNiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQ0KLWRzYmFzNjM4IHRvU2NpICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYNCi1kc2JhczYzOSB0b1NjaSAgMC4wMEUrOSAgICAgICAgICAtPiAwRSs3DQotDQotZHNiYXM2NDAgdG9TY2kgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wDQotZHNiYXM2NDEgdG9TY2kgIDAuMEUrMSAgICAgICAgICAgLT4gMA0KLWRzYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzENCi1kc2JhczY0MyB0b1NjaSAgMC4wRSszICAgICAgICAgICAtPiAwRSsyDQotZHNiYXM2NDQgdG9TY2kgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMw0KLWRzYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQNCi1kc2JhczY0NiB0b1NjaSAgMC4wRSs2ICAgICAgICAgICAtPiAwRSs1DQotZHNiYXM2NDcgdG9TY2kgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNg0KLWRzYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcNCi1kc2JhczY0OSB0b1NjaSAgMC4wRSs5ICAgICAgICAgICAtPiAwRSs4DQotDQotZHNiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMA0KLWRzYmFzNjUxIHRvU2NpICAwRSsxICAgICAgICAgICAgIC0+IDBFKzENCi1kc2JhczY1MiB0b1NjaSAgMEUrMiAgICAgICAgICAgICAtPiAwRSsyDQotZHNiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMw0KLWRzYmFzNjU0IHRvU2NpICAwRSs0ICAgICAgICAgICAgIC0+IDBFKzQNCi1kc2JhczY1NSB0b1NjaSAgMEUrNSAgICAgICAgICAgICAtPiAwRSs1DQotZHNiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNg0KLWRzYmFzNjU3IHRvU2NpICAwRSs3ICAgICAgICAgICAgIC0+IDBFKzcNCi1kc2JhczY1OCB0b1NjaSAgMEUrOCAgICAgICAgICAgICAtPiAwRSs4DQotZHNiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQ0KLQ0KLWRzYmFzNjYwIHRvU2NpICAwLjBFLTAgICAgICAgICAgIC0+IDAuMA0KLWRzYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDANCi1kc2JhczY2MiB0b1NjaSAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMA0KLWRzYmFzNjYzIHRvU2NpICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMA0KLWRzYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDANCi1kc2JhczY2NSB0b1NjaSAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRzYmFzNjY2IHRvU2NpICAwLjBFLTYgICAgICAgICAgIC0+IDBFLTcNCi1kc2JhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04DQotZHNiYXM2NjggdG9TY2kgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQ0KLWRzYmFzNjY5IHRvU2NpICAwLjBFLTkgICAgICAgICAgIC0+IDBFLTEwDQotDQotZHNiYXM2NzAgdG9TY2kgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMA0KLWRzYmFzNjcxIHRvU2NpICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwDQotZHNiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwDQotZHNiYXM2NzMgdG9TY2kgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMA0KLWRzYmFzNjc0IHRvU2NpICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwDQotZHNiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNw0KLWRzYmFzNjc2IHRvU2NpICAwLjAwRS02ICAgICAgICAgIC0+IDBFLTgNCi1kc2JhczY3NyB0b1NjaSAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05DQotZHNiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTANCi1kc2JhczY3OSB0b1NjaSAgMC4wMEUtOSAgICAgICAgICAtPiAwRS0xMQ0KLQ0KLWRzYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwDQotZHNiYXM2ODEgdG9TY2kgICAwMDAwMC4gICAgICAgICAgLT4gIDANCi1kc2JhczY4MiB0b1NjaSAgICAwMDAwLiAgICAgICAgICAtPiAgMA0KLWRzYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwDQotZHNiYXM2ODQgdG9TY2kgICAgICAwMC4gICAgICAgICAgLT4gIDANCi1kc2JhczY4NSB0b1NjaSAgICAgICAwLiAgICAgICAgICAtPiAgMA0KLWRzYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwDQotZHNiYXM2ODcgdG9TY2kgIC0wMDAwMC4gICAgICAgICAgLT4gLTANCi1kc2JhczY4OCB0b1NjaSAgKzAuICAgICAgICAgICAgICAtPiAgMA0KLWRzYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wDQotDQotLS0gU3BlY2lhbHMNCi1kc2JhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4NCi1kc2JhczcwMSB0b1NjaSAibmFuIiAgICAgICAgICAgICAtPiBOYU4NCi1kc2JhczcwMiB0b1NjaSAibkFuIiAgICAgICAgICAgICAtPiBOYU4NCi1kc2JhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4NCi1kc2JhczcwNCB0b1NjaSAiK05hTiIgICAgICAgICAgICAtPiBOYU4NCi1kc2JhczcwNSB0b1NjaSAiK25hbiIgICAgICAgICAgICAtPiBOYU4NCi1kc2JhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4NCi1kc2JhczcwNyB0b1NjaSAiK05BTiIgICAgICAgICAgICAtPiBOYU4NCi1kc2JhczcwOCB0b1NjaSAiLU5hTiIgICAgICAgICAgICAtPiAtTmFODQotZHNiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTg0KLWRzYmFzNzEwIHRvU2NpICItbkFuIiAgICAgICAgICAgIC0+IC1OYU4NCi1kc2JhczcxMSB0b1NjaSAiLU5BTiIgICAgICAgICAgICAtPiAtTmFODQotZHNiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFODQotZHNiYXM3MTMgdG9TY2kgJ05hTjEnICAgICAgICAgICAgLT4gTmFOMQ0KLWRzYmFzNzE0IHRvU2NpICdOYU4xMicgICAgICAgICAgIC0+IE5hTjEyDQotZHNiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzDQotZHNiYXM3MTYgdG9TY2kgJ05hTjEyMzQnICAgICAgICAgLT4gTmFOMTIzNA0KLWRzYmFzNzE3IHRvU2NpICdOYU4wMScgICAgICAgICAgIC0+IE5hTjENCi1kc2JhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMg0KLWRzYmFzNzE5IHRvU2NpICdOYU4wMTIzJyAgICAgICAgIC0+IE5hTjEyMw0KLWRzYmFzNzIwIHRvU2NpICdOYU4wMTIzNCcgICAgICAgIC0+IE5hTjEyMzQNCi1kc2JhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xDQotZHNiYXM3MjIgdG9TY2kgJ05hTjAwMTInICAgICAgICAgLT4gTmFOMTINCi1kc2JhczcyMyB0b1NjaSAnTmFOMDAxMjMnICAgICAgICAtPiBOYU4xMjMNCi1kc2JhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0DQotZHNiYXM3MjUgdG9TY2kgJ05hTjEyMzQ1Njc4OTAxMjM0NTYnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNzI2IHRvU2NpICdOYU4xMjNlKzEnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNzI4IHRvU2NpICdOYU4tMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNzI5IHRvU2NpICdOYU4rMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLWRzYmFzNzMwIHRvU2NpICJzTmFOIiAgICAgICAgICAgIC0+IHNOYU4NCi1kc2JhczczMSB0b1NjaSAic25hbiIgICAgICAgICAgICAtPiBzTmFODQotZHNiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTg0KLWRzYmFzNzMzIHRvU2NpICJTTkFOIiAgICAgICAgICAgIC0+IHNOYU4NCi1kc2JhczczNCB0b1NjaSAiK3NOYU4iICAgICAgICAgICAtPiBzTmFODQotZHNiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTg0KLWRzYmFzNzM2IHRvU2NpICIrU25BbiIgICAgICAgICAgIC0+IHNOYU4NCi1kc2JhczczNyB0b1NjaSAiK1NOQU4iICAgICAgICAgICAtPiBzTmFODQotZHNiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4NCi1kc2JhczczOSB0b1NjaSAiLXNuYW4iICAgICAgICAgICAtPiAtc05hTg0KLWRzYmFzNzQwIHRvU2NpICItU25BbiIgICAgICAgICAgIC0+IC1zTmFODQotZHNiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4NCi1kc2Jhczc0MiB0b1NjaSAnc05hTjAwMDAnICAgICAgICAtPiBzTmFODQotZHNiYXM3NDMgdG9TY2kgJ3NOYU43JyAgICAgICAgICAgLT4gc05hTjcNCi1kc2Jhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNA0KLWRzYmFzNzQ1IHRvU2NpICdzTmFONzIzNDU2MTIzNDU2Nzg5MCcgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM3NDYgdG9TY2kgJ3NOYU43Mi40NScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotDQotZHNiYXM3NDggdG9TY2kgIkluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzNzUwIHRvU2NpICJpTmYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NTEgdG9TY2kgIklORiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzNzUzIHRvU2NpICIraW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NTQgdG9TY2kgIitpTmYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzNzU2IHRvU2NpICItSW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWRzYmFzNzU3IHRvU2NpICItaW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWRzYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWRzYmFzNzU5IHRvU2NpICItSU5GIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLQ0KLWRzYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NjEgdG9TY2kgImluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc2MiB0b1NjaSAiaU5mSW5JdFkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NjQgdG9TY2kgIitJbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc2NSB0b1NjaSAiK2luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NjcgdG9TY2kgIitJTkZJTklUWSIgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc2OCB0b1NjaSAiLUluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkNCi1kc2Jhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkNCi1kc2Jhczc3MCB0b1NjaSAiLWlOZkluSXRZIiAgICAgICAtPiAtSW5maW5pdHkNCi1kc2Jhczc3MSB0b1NjaSAiLUlORklOSVRZIiAgICAgICAtPiAtSW5maW5pdHkNCi0NCi0tLSBTcGVjaWFscyBhbmQgemVyb3MgZm9yIHRvRW5nDQotZHNiYXN0NzcyIHRvRW5nICJOYU4iICAgICAgICAgICAgICAtPiBOYU4NCi1kc2Jhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQ0KLWRzYmFzdDc3NCB0b0VuZyAiLXNOYU4iICAgICAgICAgICAgLT4gLXNOYU4NCi1kc2Jhc3Q3NzUgdG9FbmcgIi1OYU4iICAgICAgICAgICAgIC0+IC1OYU4NCi1kc2Jhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXN0Nzc4IHRvRW5nICIrc05hTiIgICAgICAgICAgICAtPiBzTmFODQotZHNiYXN0Nzc5IHRvRW5nICIrTmFOIiAgICAgICAgICAgICAtPiBOYU4NCi1kc2Jhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXN0NzgxIHRvRW5nICJTTkFOIiAgICAgICAgICAgICAtPiBzTmFODQotZHNiYXN0NzgyIHRvRW5nICJOQU4iICAgICAgICAgICAgICAtPiBOYU4NCi1kc2Jhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXN0Nzg0IHRvRW5nICJzbmFuIiAgICAgICAgICAgICAtPiBzTmFODQotZHNiYXN0Nzg1IHRvRW5nICJuYW4iICAgICAgICAgICAgICAtPiBOYU4NCi1kc2Jhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXN0Nzg3IHRvRW5nICJTbkFOIiAgICAgICAgICAgICAtPiBzTmFODQotZHNiYXN0Nzg4IHRvRW5nICJuQU4iICAgICAgICAgICAgICAtPiBOYU4NCi1kc2Jhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXN0NzkwIHRvRW5nICJzTmFuIiAgICAgICAgICAgICAtPiBzTmFODQotZHNiYXN0NzkxIHRvRW5nICJOYW4iICAgICAgICAgICAgICAtPiBOYU4NCi1kc2Jhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXN0NzkzIHRvRW5nICJzTmFOIiAgICAgICAgICAgICAtPiBzTmFODQotDQotLS0gWmVybyB0b0VuZywgZXRjLg0KLWRzYmFzdDgwMCB0b0VuZyAwZSsxICAgICAgICAgICAgICAtPiAiMC4wMEUrMyIgIC0tIGRvYyBleGFtcGxlDQotDQotZHNiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkNCi1kc2Jhc3Q4MDIgdG9FbmcgMC4wMDAwMDAwMCAgICAgICAgLT4gMC4wMEUtNg0KLWRzYmFzdDgwMyB0b0VuZyAwLjAwMDAwMDAgICAgICAgICAtPiAwLjBFLTYNCi1kc2Jhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDANCi1kc2Jhc3Q4MDUgdG9FbmcgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMA0KLWRzYmFzdDgwNiB0b0VuZyAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDANCi1kc2Jhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDANCi1kc2Jhc3Q4MDggdG9FbmcgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMA0KLWRzYmFzdDgwOSB0b0VuZyAwLjAgICAgICAgICAgICAgICAtPiAwLjANCi1kc2Jhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZHNiYXN0ODExIHRvRW5nIDAuICAgICAgICAgICAgICAgIC0+IDANCi1kc2Jhc3Q4MTIgdG9FbmcgLS4wICAgICAgICAgICAgICAgLT4gLTAuMA0KLWRzYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMA0KLWRzYmFzdDgxNCB0b0VuZyAtMC4wICAgICAgICAgICAgICAtPiAtMC4wDQotZHNiYXN0ODE1IHRvRW5nIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwDQotZHNiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMA0KLWRzYmFzdDgxNyB0b0VuZyAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwDQotZHNiYXN0ODE4IHRvRW5nIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwDQotZHNiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMA0KLWRzYmFzdDgyMCB0b0VuZyAtMC4wMDAwMDAwICAgICAgICAtPiAtMC4wRS02DQotZHNiYXN0ODIxIHRvRW5nIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wLjAwRS02DQotZHNiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05DQotDQotZHNiYXN0ODMwIHRvRW5nICAwLjAwRSswICAgICAgICAgIC0+IDAuMDANCi1kc2Jhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wDQotZHNiYXN0ODMyIHRvRW5nICAwLjAwRSsyICAgICAgICAgIC0+IDANCi1kc2Jhc3Q4MzMgdG9FbmcgIDAuMDBFKzMgICAgICAgICAgLT4gMC4wMEUrMw0KLWRzYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMNCi1kc2Jhc3Q4MzUgdG9FbmcgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMw0KLWRzYmFzdDgzNiB0b0VuZyAgMC4wMEUrNiAgICAgICAgICAtPiAwLjAwRSs2DQotZHNiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNg0KLWRzYmFzdDgzOCB0b0VuZyAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2DQotZHNiYXN0ODM5IHRvRW5nICAwLjAwRSs5ICAgICAgICAgIC0+IDAuMDBFKzkNCi0NCi1kc2Jhc3Q4NDAgdG9FbmcgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wDQotZHNiYXN0ODQxIHRvRW5nICAwLjBFKzEgICAgICAgICAgIC0+IDANCi1kc2Jhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMw0KLWRzYmFzdDg0MyB0b0VuZyAgMC4wRSszICAgICAgICAgICAtPiAwLjBFKzMNCi1kc2Jhc3Q4NDQgdG9FbmcgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMw0KLWRzYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2DQotZHNiYXN0ODQ2IHRvRW5nICAwLjBFKzYgICAgICAgICAgIC0+IDAuMEUrNg0KLWRzYmFzdDg0NyB0b0VuZyAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2DQotZHNiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkNCi1kc2Jhc3Q4NDkgdG9FbmcgIDAuMEUrOSAgICAgICAgICAgLT4gMC4wRSs5DQotDQotZHNiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDANCi1kc2Jhc3Q4NTEgdG9FbmcgIDBFKzEgICAgICAgICAgICAgLT4gMC4wMEUrMw0KLWRzYmFzdDg1MiB0b0VuZyAgMEUrMiAgICAgICAgICAgICAtPiAwLjBFKzMNCi1kc2Jhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMw0KLWRzYmFzdDg1NCB0b0VuZyAgMEUrNCAgICAgICAgICAgICAtPiAwLjAwRSs2DQotZHNiYXN0ODU1IHRvRW5nICAwRSs1ICAgICAgICAgICAgIC0+IDAuMEUrNg0KLWRzYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2DQotZHNiYXN0ODU3IHRvRW5nICAwRSs3ICAgICAgICAgICAgIC0+IDAuMDBFKzkNCi1kc2Jhc3Q4NTggdG9FbmcgIDBFKzggICAgICAgICAgICAgLT4gMC4wRSs5DQotZHNiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkNCi0NCi1kc2Jhc3Q4NjAgdG9FbmcgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wDQotZHNiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDANCi1kc2Jhc3Q4NjIgdG9FbmcgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDANCi1kc2Jhc3Q4NjMgdG9FbmcgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwDQotZHNiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDANCi1kc2Jhc3Q4NjUgdG9FbmcgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDANCi1kc2Jhc3Q4NjYgdG9FbmcgIDAuMEUtNiAgICAgICAgICAgLT4gMC4wRS02DQotZHNiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYNCi1kc2Jhc3Q4NjggdG9FbmcgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQ0KLWRzYmFzdDg2OSB0b0VuZyAgMC4wRS05ICAgICAgICAgICAtPiAwLjBFLTkNCi0NCi1kc2Jhc3Q4NzAgdG9FbmcgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMA0KLWRzYmFzdDg3MSB0b0VuZyAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMA0KLWRzYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDANCi1kc2Jhc3Q4NzMgdG9FbmcgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMA0KLWRzYmFzdDg3NCB0b0VuZyAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRzYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYNCi1kc2Jhc3Q4NzYgdG9FbmcgIDAuMDBFLTYgICAgICAgICAgLT4gMC4wMEUtNg0KLWRzYmFzdDg3NyB0b0VuZyAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05DQotZHNiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQ0KLWRzYmFzdDg3OSB0b0VuZyAgMC4wMEUtOSAgICAgICAgICAtPiAwLjAwRS05DQotDQotLS0gbG9uZyBpbnB1dCBzdHJpbmdzDQotZHNiYXM4MDEgdG9zY2kgICAgICAgICAgJzAxMjM0NTY3JyAtPiAxMjM0NTY3DQotZHNiYXM4MDIgdG9zY2kgICAgICAgICAnMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQotZHNiYXM4MDMgdG9zY2kgICAgICAgICcwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQotZHNiYXM4MDQgdG9zY2kgICAgICAgJzAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQotZHNiYXM4MDUgdG9zY2kgICAgICAnMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQotZHNiYXM4MDYgdG9zY2kgICAgICcwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQotZHNiYXM4MDcgdG9zY2kgICAgJzAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQotZHNiYXM4MDggdG9zY2kgICAnMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQotZHNiYXM4MDkgdG9zY2kgICcwMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQotZHNiYXM4MTAgdG9zY2kgJzAwMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQotDQotZHNiYXM4MTEgdG9zY2kgICAgICAgICAgJzAuMTIzNDU2NycgLT4gICAgICAwLjEyMzQ1NjcNCi1kc2JhczgxMiB0b3NjaSAgICAgICAgICcwLjAxMjM0NTY3JyAtPiAgICAgMC4wMTIzNDU2Nw0KLWRzYmFzODEzIHRvc2NpICAgICAgICAnMC4wMDEyMzQ1NjcnIC0+ICAgIDAuMDAxMjM0NTY3DQotZHNiYXM4MTQgdG9zY2kgICAgICAgJzAuMDAwMTIzNDU2NycgLT4gICAwLjAwMDEyMzQ1NjcNCi1kc2JhczgxNSB0b3NjaSAgICAgICcwLjAwMDAxMjM0NTY3JyAtPiAgMC4wMDAwMTIzNDU2Nw0KLWRzYmFzODE2IHRvc2NpICAgICAnMC4wMDAwMDEyMzQ1NjcnIC0+IDAuMDAwMDAxMjM0NTY3DQotZHNiYXM4MTcgdG9zY2kgICAgJzAuMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTcNCi1kc2JhczgxOCB0b3NjaSAgICcwLjAwMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtOA0KLWRzYmFzODE5IHRvc2NpICAnMC4wMDAwMDAwMDEyMzQ1NjcnIC0+ICAgICAgIDEuMjM0NTY3RS05DQotZHNiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTEwDQotDQotZHNiYXM4MjEgdG9zY2kgJzEyMzQ1Njc5MCcgICAgICAgICAtPiAxLjIzNDU2OEUrOCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczgyMiB0b3NjaSAnMTIzNDU2NzkwMScgICAgICAgIC0+IDEuMjM0NTY4RSs5ICBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczgyMyB0b3NjaSAnMTIzNDU2NzkwMTInICAgICAgIC0+IDEuMjM0NTY4RSsxMCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczgyNCB0b3NjaSAnMTIzNDU2NzkwMTIzJyAgICAgIC0+IDEuMjM0NTY4RSsxMSBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczgyNSB0b3NjaSAnMTIzNDU2NzkwMTIzNCcgICAgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczgyNiB0b3NjaSAnMTIzNDU2NzkwMTIzNDUnICAgIC0+IDEuMjM0NTY4RSsxMyBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczgyNyB0b3NjaSAnMTIzNDU2NzkwMTIzNDU2JyAgIC0+IDEuMjM0NTY4RSsxNCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczgyOCB0b3NjaSAnMTIzNDU2NzkwMTIzNDU2NycgIC0+IDEuMjM0NTY4RSsxNSBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczgyOSB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1NicgIC0+IDEuMjM0NTY4RSsxNSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MNCi1kc2JhczkwNiB0b1NjaSAnOTllOTk5OTk5OTk5JyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MDcgdG9TY2kgJzk5OWU5OTk5OTk5OTknICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTA4IHRvU2NpICcwLjllLTk5OTk5OTk5OScgICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXM5MDkgdG9TY2kgJzAuMDllLTk5OTk5OTk5OScgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JhczkxMCB0b1NjaSAnMC4xZTEwMDAwMDAwMDAnICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MTEgdG9TY2kgJzEwZS0xMDAwMDAwMDAwJyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JhczkxMiB0b1NjaSAnMC45ZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MTMgdG9TY2kgJzk5ZS05OTk5OTk5OTk5JyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JhczkxNCB0b1NjaSAnMTExZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MTUgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTknICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JhczkxNiB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OTknICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmFzOTE3IHRvU2NpICc3ZTEwMDAwMDAwMDAnICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZWdhdGl2ZXMgdGhlIHNhbWUNCi1kc2JhczkxOCB0b1NjaSAnLTk5ZTk5OTk5OTk5OScgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTE5IHRvU2NpICctOTk5ZTk5OTk5OTk5OScgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MjAgdG9TY2kgJy0wLjllLTk5OTk5OTk5OScgICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXM5MjIgdG9TY2kgJy0wLjFlMTAwMDAwMDAwMCcgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczkyMyB0b1NjaSAnLTEwZS0xMDAwMDAwMDAwJyAgICAtPiAtMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JhczkyNCB0b1NjaSAnLTAuOWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTI1IHRvU2NpICctOTllLTk5OTk5OTk5OTknICAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmFzOTI2IHRvU2NpICctMTExZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXM5MjggdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5OScgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXM5MjkgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBvdmVyZmxvdyByZXN1bHRzIGF0IGRpZmZlcmVudCByb3VuZGluZyBtb2Rlcw0KLXJvdW5kaW5nOiAgY2VpbGluZw0KLWRzYmFzOTMwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MzEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICB1cA0KLWRzYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogIGRvd24NCi1kc2JhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczkzNSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogIGZsb29yDQotZHNiYXM5MzYgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogIGhhbGZfdXANCi1kc2JhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTM5IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi1kc2Jhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTQxIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICBoYWxmX2Rvd24NCi1kc2Jhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTQzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi0NCi0tLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMA0KLWRzYmVtNDAwIHRvU2NpICAxLjAwMDBFLTg2ICAgICAtPiAxLjAwMDBFLTg2DQotZHNiZW00MDEgdG9TY2kgIDAuMUUtOTcgICAgICAgIC0+IDFFLTk4ICAgICAgIFN1Ym5vcm1hbA0KLWRzYmVtNDAyIHRvU2NpICAwLjEwMDBFLTk3ICAgICAtPiAxLjAwMEUtOTggICBTdWJub3JtYWwNCi1kc2JlbTQwMyB0b1NjaSAgMC4wMTAwRS05NyAgICAgLT4gMS4wMEUtOTkgICAgU3Vibm9ybWFsDQotZHNiZW00MDQgdG9TY2kgIDAuMDAxMEUtOTcgICAgIC0+IDEuMEUtMTAwICAgICBTdWJub3JtYWwNCi1kc2JlbTQwNSB0b1NjaSAgMC4wMDAxRS05NyAgICAgLT4gMUUtMTAxICAgICAgIFN1Ym5vcm1hbA0KLWRzYmVtNDA2IHRvU2NpICAwLjAwMDEwRS05NyAgICAtPiAxRS0xMDEgICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHNiZW00MDcgdG9TY2kgIDAuMDAwMTNFLTk3ICAgIC0+IDFFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQwOCB0b1NjaSAgMC4wMDAxNUUtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDA5IHRvU2NpICAwLjAwMDE3RS05NyAgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MTAgdG9TY2kgIDAuMDAwMjNFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQxMSB0b1NjaSAgMC4wMDAyNUUtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDEyIHRvU2NpICAwLjAwMDI3RS05NyAgICAtPiAzRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MTMgdG9TY2kgIDAuMDAwMTQ5RS05NyAgIC0+IDFFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDE1IHRvU2NpICAwLjAwMDE1MUUtOTcgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MTYgdG9TY2kgIDAuMDAwMjQ5RS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDE4IHRvU2NpICAwLjAwMDI1MUUtOTcgICAtPiAzRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MTkgdG9TY2kgIDAuMDAwMDlFLTk3ICAgIC0+IDFFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQyMCB0b1NjaSAgMC4wMDAwNUUtOTcgICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiZW00MjEgdG9TY2kgIDAuMDAwMDNFLTk3ICAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmVtNDIyIHRvU2NpICAwLjAwMDAwOUUtOTcgICAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiZW00MjQgdG9TY2kgIDAuMDAwMDAzRS05NyAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLWRzYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtOTcgICAtPiAxLjBFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MjYgdG9TY2kgIDAuMDAxMDUwRS05NyAgIC0+IDEuMEUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQyNyB0b1NjaSAgMC4wMDEwNTFFLTk3ICAgLT4gMS4xRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtOTcgICAtPiAxLjFFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MjkgdG9TY2kgIDAuMDAxMTUwRS05NyAgIC0+IDEuMkUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQzMCB0b1NjaSAgMC4wMDExNTFFLTk3ICAgLT4gMS4yRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRzYmVtNDMyIHRvU2NpICAwLjAxMDA0OUUtOTcgICAtPiAxLjAwRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQzMyB0b1NjaSAgMC4wMTAwNTBFLTk3ICAgLT4gMS4wMEUtOTkgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS05NyAgIC0+IDEuMDFFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDM1IHRvU2NpICAwLjAxMDE0OUUtOTcgICAtPiAxLjAxRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQzNiB0b1NjaSAgMC4wMTAxNTBFLTk3ICAgLT4gMS4wMkUtOTkgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS05NyAgIC0+IDEuMDJFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRzYmVtNDQwIHRvU2NpICAwLjEwMTAzRS05NyAgICAtPiAxLjAxMEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ0MSB0b1NjaSAgMC4xMDEwNUUtOTcgICAgLT4gMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NDIgdG9TY2kgIDAuMTAxMDdFLTk3ICAgIC0+IDEuMDExRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDQzIHRvU2NpICAwLjEwMTEzRS05NyAgICAtPiAxLjAxMUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ0NCB0b1NjaSAgMC4xMDExNUUtOTcgICAgLT4gMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NDUgdG9TY2kgIDAuMTAxMTdFLTk3ICAgIC0+IDEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRzYmVtNDUwIHRvU2NpICAxLjEwNzMwRS05OCAgICAtPiAxLjEwN0UtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ1MSB0b1NjaSAgMS4xMDc1MEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NTIgdG9TY2kgIDEuMTA3NzBFLTk4ICAgIC0+IDEuMTA4RS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDUzIHRvU2NpICAxLjEwODMwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ1NCB0b1NjaSAgMS4xMDg1MEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NTUgdG9TY2kgIDEuMTA4NzBFLTk4ICAgIC0+IDEuMTA5RS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG1ha2Ugc3VyZSBzaWduIE9LDQotZHNiZW00NTYgdG9TY2kgIC0wLjEwMTAzRS05NyAgIC0+IC0xLjAxMEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ1NyB0b1NjaSAgLTAuMTAxMDVFLTk3ICAgLT4gLTEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDU4IHRvU2NpICAtMC4xMDEwN0UtOTcgICAtPiAtMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NTkgdG9TY2kgIC0wLjEwMTEzRS05NyAgIC0+IC0xLjAxMUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ2MCB0b1NjaSAgLTAuMTAxMTVFLTk3ICAgLT4gLTEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDYxIHRvU2NpICAtMC4xMDExN0UtOTcgICAtPiAtMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gJzk5OXMnIGNhc2VzDQotZHNiZW00NjQgdG9TY2kgIDk5OTk5OUUtOTggICAgICAgICAtPiA5Ljk5OTk5RS05Mw0KLWRzYmVtNDY1IHRvU2NpICA5OTk5OS4wRS05NyAgICAgICAgLT4gOS45OTk5MEUtOTMNCi1kc2JlbTQ2NiB0b1NjaSAgOTk5OTkuRS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTMNCi1kc2JlbTQ2NyB0b1NjaSAgOTk5OS45RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTQNCi1kc2JlbTQ2OCB0b1NjaSAgOTk5Ljk5RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTUNCi1kc2JlbTQ2OSB0b1NjaSAgOTkuOTk5RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTYgU3Vibm9ybWFsDQotZHNiZW00NzAgdG9TY2kgIDkuOTk5OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk3IFN1Ym5vcm1hbA0KLWRzYmVtNDcxIHRvU2NpICAwLjk5OTk5RS05NyAgICAgICAgLT4gMS4wMDAwRS05NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtOTcgICAgICAgLT4gMS4wMDBFLTk4ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDczIHRvU2NpICAwLjAwOTk5OTlFLTk3ICAgICAgLT4gMS4wMEUtOTkgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDc0IHRvU2NpICAwLjAwMDk5OTk5RS05NyAgICAgLT4gMS4wRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtOTcgICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDc2IHRvU2NpICAwLjAwMDAwOTk5OTlFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiZW00NzcgdG9TY2kgIDAuMDAwMDAwOTk5OTlFLTk3ICAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTk3IC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tIEV4cG9uZW50cyB3aXRoIGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcw0KLWRzYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMxMDAyIHRvU2NpICAxZTA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMxMDAzIHRvU2NpICAxZTAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMxMDA1IHRvU2NpICAxZTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczEwMDYgdG9TY2kgIDFlMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXMxMDA4IHRvU2NpICAxZS0wOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JhczEwMDkgdG9TY2kgIDFlLTAwOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXMxMDExIHRvU2NpICAxZS0wMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JhczEwMTIgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQotZHNiYXMxMDQxIHRvU2NpICAgICAxLjExNTI0NDRFLTk2IC0+ICAxLjExNTI0RS05NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRzYmFzMTA0MiB0b1NjaSAgICAgMS4xMTUyNDQ1RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kc2JhczEwNDMgdG9TY2kgICAgIDEuMTE1MjQ0NkUtOTYgLT4gIDEuMTE1MjRFLTk2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotDQotLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0NCi1kc2JhczEwNzUgdG9TY2kgICAwZSsxMDAwMCAgLT4gIDBFKzkwICAgQ2xhbXBlZA0KLWRzYmFzMTA3NiB0b1NjaSAgIDBlLTEwMDAwICAtPiAgMEUtMTAxICBDbGFtcGVkDQotZHNiYXMxMDc3IHRvU2NpICAtMGUrMTAwMDAgIC0+IC0wRSs5MCAgIENsYW1wZWQNCi1kc2JhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTEwMSAgQ2xhbXBlZA0KLQ0KLS0tIGV4dHJlbWUgdmFsdWVzIGZyb20gbmV4dC13aWRlcg0KLWRzYmFzMTEwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMxMTAyIHRvU2NpIC0xRS0zODMgLT4gLTBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZHNiYXMxMTAzIHRvU2NpIC0xRS0zOTggLT4gLTBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZHNiYXMxMTA0IHRvU2NpIC0wIC0+IC0wDQotZHNiYXMxMTA1IHRvU2NpICswIC0+ICAwDQotZHNiYXMxMTA2IHRvU2NpICsxRS0zOTggLT4gIDBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZHNiYXMxMTA3IHRvU2NpICsxRS0zODMgLT4gIDBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZHNiYXMxMTA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBuYXJyb3dpbmcgY2FzZQ0KLWRzYmFzMTExMCB0b1NjaSAyLjAwMDAwMDAwMDAwMDAwMEUtOTkgLT4gMi4wMEUtOTkgUm91bmRlZCBTdWJub3JtYWwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRzQmFzZS5kZWNUZXN0IC0tIGJhc2UgZGVjU2luZ2xlIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcgorLS0gYW5kIGJhY2sgdG8gYSBzdHJpbmcgKGluIFNjaWVudGlmaWMgZm9ybSkKKworLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcKKy0tIHRvIGNvbmZvcm0gdG8gZW1heCBhbmQgcHJlY2lzaW9uIHNldHRpbmdzICh0aGF0IGlzLCBudW1iZXJzIHdpbGwKKy0tIGNvbmZvcm0gdG8gcnVsZXMgYW5kIGV4cG9uZW50IHdpbGwgYmUgaW4gcGVybWl0dGVkIHJhbmdlKS4gIFRoZQorLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlCistLSByZXByZXNlbnRlZCBpbiBhIGRlY1NpbmdsZS4gIFNvbWUgdGVzdGNhc2VzIGdvIHRvIHRoZSBsaW1pdCBvZiB0aGUKKy0tIG5leHQtd2lkZXIgZm9ybWF0LCBhbmQgaGVuY2UgdGhlc2UgdGVzdGNhc2VzIG1heSBhbHNvIGJlIHVzZWQgdG8KKy0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLgorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICA3CittYXhFeHBvbmVudDogOTYKK21pbkV4cG9uZW50OiAtOTUKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHNiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwCitkc2JhczAwMiB0b1NjaSAgICAgICAxIC0+IDEKK2RzYmFzMDAzIHRvU2NpICAgICAxLjAgLT4gMS4wCitkc2JhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDAKK2RzYmFzMDA1IHRvU2NpICAgICAgMTAgLT4gMTAKK2RzYmFzMDA2IHRvU2NpICAgIDEwMDAgLT4gMTAwMAorZHNiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wCitkc2JhczAwOCB0b1NjaSAgICAxMC4xIC0+IDEwLjEKK2RzYmFzMDA5IHRvU2NpICAgIDEwLjQgLT4gMTAuNAorZHNiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41Citkc2JhczAxMSB0b1NjaSAgICAxMC42IC0+IDEwLjYKK2RzYmFzMDEyIHRvU2NpICAgIDEwLjkgLT4gMTAuOQorZHNiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wCitkc2JhczAxNCB0b1NjaSAgMS4yMzQgLT4gMS4yMzQKK2RzYmFzMDE1IHRvU2NpICAwLjEyMyAtPiAwLjEyMworZHNiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyCitkc2JhczAxNyB0b1NjaSAgLTAgICAgLT4gLTAKK2RzYmFzMDE4IHRvU2NpICAtMC4wICAtPiAtMC4wCitkc2JhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDAKKworZHNiYXMwMjEgdG9TY2kgICAgIC0xIC0+IC0xCitkc2JhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMAorZHNiYXMwMjMgdG9TY2kgICAtMC4xIC0+IC0wLjEKK2RzYmFzMDI0IHRvU2NpICAgLTkuMSAtPiAtOS4xCitkc2JhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExCitkc2JhczAyNiB0b1NjaSAgIC05LjExOSAtPiAtOS4xMTkKK2RzYmFzMDI3IHRvU2NpICAgLTkuOTk5IC0+IC05Ljk5OQorCitkc2JhczAzMCB0b1NjaSAgJzEyMzQuNTY3JyAgIC0+ICcxMjM0LjU2NycKK2RzYmFzMDMxIHRvU2NpICAnMTIzNC4wMDAnICAgLT4gJzEyMzQuMDAwJworZHNiYXMwMzIgdG9TY2kgICAnMTIzNDkxMicgICAtPiAnMTIzNDkxMicKK2RzYmFzMDMzIHRvU2NpICAgJzAuMDAwMDEyMzQ1NjcnICAgLT4gJzAuMDAwMDEyMzQ1NjcnCitkc2JhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3JyAgIC0+ICcwLjAwMDAwMTIzNDU2NycKK2RzYmFzMDM1IHRvU2NpICcwLjAwMDAwMDEyMzQ1NjcnICAgLT4gJzEuMjM0NTY3RS03JworZHNiYXMwMzYgdG9TY2kgJzAuMDAwMDAwMDEyMzQ1NjcnICAtPiAnMS4yMzQ1NjdFLTgnCisKK2RzYmFzMDM3IHRvU2NpICcwLjEyMzQ1NjQnICAgLT4gJzAuMTIzNDU2NCcKK2RzYmFzMDM4IHRvU2NpICcwLjEyMzQ1NjUnICAgLT4gJzAuMTIzNDU2NScKKworLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkKK2RzYnNuMDAxIHRvU2NpIC05Ljk5OTk5OUUrOTYgLT4gLTkuOTk5OTk5RSs5NgorZHNic24wMDIgdG9TY2kgLTFFLTk1IC0+IC0xRS05NQorZHNic24wMDMgdG9TY2kgLTFFLTEwMSAtPiAtMUUtMTAxIFN1Ym5vcm1hbAorZHNic24wMDQgdG9TY2kgLTAgLT4gLTAKK2RzYnNuMDA1IHRvU2NpICswIC0+ICAwCitkc2JzbjAwNiB0b1NjaSArMUUtMTAxIC0+ICAxRS0xMDEgU3Vibm9ybWFsCitkc2JzbjAwNyB0b1NjaSArMUUtOTUgLT4gIDFFLTk1Citkc2JzbjAwOCB0b1NjaSArOS45OTk5OTlFKzk2IC0+ICA5Ljk5OTk5OUUrOTYKKworLS0gU3RyaW5nIFttYW55IG1vcmUgZXhhbXBsZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIGVsc2V3aGVyZV0KKy0tIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdAorZHNiYXMwNDAgdG9TY2kgIjEyIiAgICAgICAgLT4gJzEyJworZHNiYXMwNDEgdG9TY2kgIi03NiIgICAgICAgLT4gJy03NicKK2RzYmFzMDQyIHRvU2NpICIxMi43NiIgICAgIC0+ICcxMi43NicKK2RzYmFzMDQzIHRvU2NpICIrMTIuNzYiICAgIC0+ICcxMi43NicKK2RzYmFzMDQ0IHRvU2NpICIwMTIuNzYiICAgIC0+ICcxMi43NicKK2RzYmFzMDQ1IHRvU2NpICIrMC4wMDMiICAgIC0+ICcwLjAwMycKK2RzYmFzMDQ2IHRvU2NpICIxNy4iICAgICAgIC0+ICcxNycKK2RzYmFzMDQ3IHRvU2NpICIuNSIgICAgICAgIC0+ICcwLjUnCitkc2JhczA0OCB0b1NjaSAiMDQ0IiAgICAgICAtPiAnNDQnCitkc2JhczA0OSB0b1NjaSAiMDA0NCIgICAgICAtPiAnNDQnCitkc2JhczA1MCB0b1NjaSAiMC4wMDA1IiAgICAgIC0+ICcwLjAwMDUnCitkc2JhczA1MSB0b1NjaSAiMDAuMDAwMDUiICAgIC0+ICcwLjAwMDA1JworZHNiYXMwNTIgdG9TY2kgIjAuMDAwMDA1IiAgICAtPiAnMC4wMDAwMDUnCitkc2JhczA1MyB0b1NjaSAiMC4wMDAwMDUwIiAgIC0+ICcwLjAwMDAwNTAnCitkc2JhczA1NCB0b1NjaSAiMC4wMDAwMDA1IiAgIC0+ICc1RS03JworZHNiYXMwNTUgdG9TY2kgIjAuMDAwMDAwMDUiICAtPiAnNUUtOCcKK2RzYmFzMDU2IHRvU2NpICIxMjY3OC41NCIgLT4gJzEyNjc4LjU0JworZHNiYXMwNTcgdG9TY2kgIjI2NzguNTQzIiAtPiAnMjY3OC41NDMnCitkc2JhczA1OCB0b1NjaSAiMzQ1Njc4LjUiIC0+ICczNDU2NzguNScKK2RzYmFzMDU5IHRvU2NpICIwNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKK2RzYmFzMDYwIHRvU2NpICI2NzguNTQzMiIgLT4gJzY3OC41NDMyJworZHNiYXMwNjEgdG9TY2kgIis2NzguNTQzMiIgLT4gJzY3OC41NDMyJworZHNiYXMwNjIgdG9TY2kgIiswNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKK2RzYmFzMDYzIHRvU2NpICIrMDA2NzguNTQzMiIgLT4gJzY3OC41NDMyJworZHNiYXMwNjQgdG9TY2kgIi02NzguNTQzMiIgIC0+ICctNjc4LjU0MzInCitkc2JhczA2NSB0b1NjaSAiLTA2NzguNTQzMiIgIC0+ICctNjc4LjU0MzInCitkc2JhczA2NiB0b1NjaSAiLTAwNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJworLS0gZXhhbXBsZXMKK2RzYmFzMDY3IHRvU2NpICI1RS02IiAgICAgICAgLT4gJzAuMDAwMDA1JworZHNiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJworZHNiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycKKworLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0KKworLS0gcm91bmRlZCB3aXRoIGRvdHMgaW4gYWxsIChpbmNsdWRpbmcgZWRnZSkgcGxhY2VzCitkc2JhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTAxMjM0NTYgIC0+IDAuMTIzNDU2OCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MDEyMzQ1NiAgLT4gMS4yMzQ1NjggSW5leGFjdCBSb3VuZGVkCitkc2JhczA3MyB0b1NjaSAgMTIuMzQ1Njc4OTAxMjM0NTYgIC0+IDEyLjM0NTY4IEluZXhhY3QgUm91bmRlZAorZHNiYXMwNzQgdG9TY2kgIDEyMy40NTY3ODkwMTIzNDU2ICAtPiAxMjMuNDU2OCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MDEyMzQ1NiAgLT4gMTIzNC41NjggSW5leGFjdCBSb3VuZGVkCitkc2JhczA3NiB0b1NjaSAgMTIzNDUuNjc4OTAxMjM0NTYgIC0+IDEyMzQ1LjY4IEluZXhhY3QgUm91bmRlZAorZHNiYXMwNzcgdG9TY2kgIDEyMzQ1Ni43ODkwMTIzNDU2ICAtPiAxMjM0NTYuOCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MDEyMzQ1NiAgLT4gMTIzNDU2OCAgSW5leGFjdCBSb3VuZGVkCitkc2JhczA3OSB0b1NjaSAgMTIzNDU2NzguOTAxMjM0NTYgIC0+IDEuMjM0NTY4RSs3IEluZXhhY3QgUm91bmRlZAorZHNiYXMwODAgdG9TY2kgIDEyMzQ1Njc4OS4wMTIzNDU2ICAtPiAxLjIzNDU2OEUrOCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkwLjEyMzQ1NiAgLT4gMS4yMzQ1NjhFKzkgSW5leGFjdCBSb3VuZGVkCitkc2JhczA4MiB0b1NjaSAgMTIzNDU2Nzg5MDEuMjM0NTYgIC0+IDEuMjM0NTY4RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDgzIHRvU2NpICAxMjM0NTY3ODkwMTIuMzQ1NiAgLT4gMS4yMzQ1NjhFKzExIEluZXhhY3QgUm91bmRlZAorZHNiYXMwODQgdG9TY2kgIDEyMzQ1Njc4OTAxMjMuNDU2ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkCitkc2JhczA4NSB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQuNTYgIC0+IDEuMjM0NTY4RSsxMyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDg2IHRvU2NpICAxMjM0NTY3ODkwMTIzNDUuNiAgLT4gMS4yMzQ1NjhFKzE0IEluZXhhY3QgUm91bmRlZAorZHNiYXMwODcgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYuICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkCitkc2JhczA4OCB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0+IDEuMjM0NTY4RSsxNSBJbmV4YWN0IFJvdW5kZWQKKworLS0gTnVtYmVycyB3aXRoIEUKK2RzYmFzMTMwIHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCitkc2JhczEzMSB0b1NjaSAiMC4wMDBFLTIiICAtPiAnMC4wMDAwMCcKK2RzYmFzMTMyIHRvU2NpICIwLjAwMEUtMyIgIC0+ICcwLjAwMDAwMCcKK2RzYmFzMTMzIHRvU2NpICIwLjAwMEUtNCIgIC0+ICcwRS03JworZHNiYXMxMzQgdG9TY2kgIjAuMDBFLTIiICAgLT4gJzAuMDAwMCcKK2RzYmFzMTM1IHRvU2NpICIwLjAwRS0zIiAgIC0+ICcwLjAwMDAwJworZHNiYXMxMzYgdG9TY2kgIjAuMDBFLTQiICAgLT4gJzAuMDAwMDAwJworZHNiYXMxMzcgdG9TY2kgIjAuMDBFLTUiICAgLT4gJzBFLTcnCitkc2JhczEzOCB0b1NjaSAiKzBFKzkiICAgICAtPiAnMEUrOScKK2RzYmFzMTM5IHRvU2NpICItMEUrOSIgICAgIC0+ICctMEUrOScKK2RzYmFzMTQwIHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworZHNiYXMxNDEgdG9TY2kgIjFlKzA5IiAgICAgLT4gJzFFKzknCitkc2JhczE0MiB0b1NjaSAiMUUrOTAiICAgICAtPiAnMUUrOTAnCitkc2JhczE0MyB0b1NjaSAiKzFFKzAwOSIgICAtPiAnMUUrOScKK2RzYmFzMTQ0IHRvU2NpICIwRSs5IiAgICAgIC0+ICcwRSs5JworZHNiYXMxNDUgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknCitkc2JhczE0NiB0b1NjaSAiMUUrMDkiICAgICAtPiAnMUUrOScKK2RzYmFzMTQ3IHRvU2NpICIxZSs5MCIgICAgIC0+ICcxRSs5MCcKK2RzYmFzMTQ4IHRvU2NpICIxRSswMDkiICAgIC0+ICcxRSs5JworZHNiYXMxNDkgdG9TY2kgIjAwMEUrOSIgICAgLT4gJzBFKzknCitkc2JhczE1MCB0b1NjaSAiMUU5IiAgICAgICAtPiAnMUUrOScKK2RzYmFzMTUxIHRvU2NpICIxZTA5IiAgICAgIC0+ICcxRSs5JworZHNiYXMxNTIgdG9TY2kgIjFFOTAiICAgICAgLT4gJzFFKzkwJworZHNiYXMxNTMgdG9TY2kgIjFFMDA5IiAgICAgLT4gJzFFKzknCitkc2JhczE1NCB0b1NjaSAiMEU5IiAgICAgICAtPiAnMEUrOScKK2RzYmFzMTU1IHRvU2NpICIwLjAwMGUrMCIgIC0+ICcwLjAwMCcKK2RzYmFzMTU2IHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCitkc2JhczE1NyB0b1NjaSAiNEUrOSIgICAgICAtPiAnNEUrOScKK2RzYmFzMTU4IHRvU2NpICI0NEUrOSIgICAgIC0+ICc0LjRFKzEwJworZHNiYXMxNTkgdG9TY2kgIjAuNzNlLTciICAgLT4gJzcuM0UtOCcKK2RzYmFzMTYwIHRvU2NpICIwMEUrOSIgICAgIC0+ICcwRSs5JworZHNiYXMxNjEgdG9TY2kgIjAwRS05IiAgICAgLT4gJzBFLTknCitkc2JhczE2MiB0b1NjaSAiMTBFKzkiICAgICAtPiAnMS4wRSsxMCcKK2RzYmFzMTYzIHRvU2NpICIxMEUrMDkiICAgIC0+ICcxLjBFKzEwJworZHNiYXMxNjQgdG9TY2kgIjEwZSs5MCIgICAgLT4gJzEuMEUrOTEnCitkc2JhczE2NSB0b1NjaSAiMTBFKzAwOSIgICAtPiAnMS4wRSsxMCcKK2RzYmFzMTY2IHRvU2NpICIxMDBlKzkiICAgIC0+ICcxLjAwRSsxMScKK2RzYmFzMTY3IHRvU2NpICIxMDBlKzA5IiAgIC0+ICcxLjAwRSsxMScKK2RzYmFzMTY4IHRvU2NpICIxMDBFKzkwIiAgIC0+ICcxLjAwRSs5MicKK2RzYmFzMTY5IHRvU2NpICIxMDBlKzAwOSIgIC0+ICcxLjAwRSsxMScKKworZHNiYXMxNzAgdG9TY2kgIjEuMjY1IiAgICAgLT4gJzEuMjY1JworZHNiYXMxNzEgdG9TY2kgIjEuMjY1RS0yMCIgLT4gJzEuMjY1RS0yMCcKK2RzYmFzMTcyIHRvU2NpICIxLjI2NUUtOCIgIC0+ICcxLjI2NUUtOCcKK2RzYmFzMTczIHRvU2NpICIxLjI2NUUtNCIgIC0+ICcwLjAwMDEyNjUnCitkc2JhczE3NCB0b1NjaSAiMS4yNjVFLTMiICAtPiAnMC4wMDEyNjUnCitkc2JhczE3NSB0b1NjaSAiMS4yNjVFLTIiICAtPiAnMC4wMTI2NScKK2RzYmFzMTc2IHRvU2NpICIxLjI2NUUtMSIgIC0+ICcwLjEyNjUnCitkc2JhczE3NyB0b1NjaSAiMS4yNjVFLTAiICAtPiAnMS4yNjUnCitkc2JhczE3OCB0b1NjaSAiMS4yNjVFKzEiICAtPiAnMTIuNjUnCitkc2JhczE3OSB0b1NjaSAiMS4yNjVFKzIiICAtPiAnMTI2LjUnCitkc2JhczE4MCB0b1NjaSAiMS4yNjVFKzMiICAtPiAnMTI2NScKK2RzYmFzMTgxIHRvU2NpICIxLjI2NUUrNCIgIC0+ICcxLjI2NUUrNCcKK2RzYmFzMTgyIHRvU2NpICIxLjI2NUUrOCIgIC0+ICcxLjI2NUUrOCcKK2RzYmFzMTgzIHRvU2NpICIxLjI2NUUrMjAiIC0+ICcxLjI2NUUrMjAnCisKK2RzYmFzMTkwIHRvU2NpICIxMi42NSIgICAgIC0+ICcxMi42NScKK2RzYmFzMTkxIHRvU2NpICIxMi42NUUtMjAiIC0+ICcxLjI2NUUtMTknCitkc2JhczE5MiB0b1NjaSAiMTIuNjVFLTgiICAtPiAnMS4yNjVFLTcnCitkc2JhczE5MyB0b1NjaSAiMTIuNjVFLTQiICAtPiAnMC4wMDEyNjUnCitkc2JhczE5NCB0b1NjaSAiMTIuNjVFLTMiICAtPiAnMC4wMTI2NScKK2RzYmFzMTk1IHRvU2NpICIxMi42NUUtMiIgIC0+ICcwLjEyNjUnCitkc2JhczE5NiB0b1NjaSAiMTIuNjVFLTEiICAtPiAnMS4yNjUnCitkc2JhczE5NyB0b1NjaSAiMTIuNjVFLTAiICAtPiAnMTIuNjUnCitkc2JhczE5OCB0b1NjaSAiMTIuNjVFKzEiICAtPiAnMTI2LjUnCitkc2JhczE5OSB0b1NjaSAiMTIuNjVFKzIiICAtPiAnMTI2NScKK2RzYmFzMjAwIHRvU2NpICIxMi42NUUrMyIgIC0+ICcxLjI2NUUrNCcKK2RzYmFzMjAxIHRvU2NpICIxMi42NUUrNCIgIC0+ICcxLjI2NUUrNScKK2RzYmFzMjAyIHRvU2NpICIxMi42NUUrOCIgIC0+ICcxLjI2NUUrOScKK2RzYmFzMjAzIHRvU2NpICIxMi42NUUrMjAiIC0+ICcxLjI2NUUrMjEnCisKK2RzYmFzMjEwIHRvU2NpICIxMjYuNSIgICAgIC0+ICcxMjYuNScKK2RzYmFzMjExIHRvU2NpICIxMjYuNUUtMjAiIC0+ICcxLjI2NUUtMTgnCitkc2JhczIxMiB0b1NjaSAiMTI2LjVFLTgiICAtPiAnMC4wMDAwMDEyNjUnCitkc2JhczIxMyB0b1NjaSAiMTI2LjVFLTQiICAtPiAnMC4wMTI2NScKK2RzYmFzMjE0IHRvU2NpICIxMjYuNUUtMyIgIC0+ICcwLjEyNjUnCitkc2JhczIxNSB0b1NjaSAiMTI2LjVFLTIiICAtPiAnMS4yNjUnCitkc2JhczIxNiB0b1NjaSAiMTI2LjVFLTEiICAtPiAnMTIuNjUnCitkc2JhczIxNyB0b1NjaSAiMTI2LjVFLTAiICAtPiAnMTI2LjUnCitkc2JhczIxOCB0b1NjaSAiMTI2LjVFKzEiICAtPiAnMTI2NScKK2RzYmFzMjE5IHRvU2NpICIxMjYuNUUrMiIgIC0+ICcxLjI2NUUrNCcKK2RzYmFzMjIwIHRvU2NpICIxMjYuNUUrMyIgIC0+ICcxLjI2NUUrNScKK2RzYmFzMjIxIHRvU2NpICIxMjYuNUUrNCIgIC0+ICcxLjI2NUUrNicKK2RzYmFzMjIyIHRvU2NpICIxMjYuNUUrOCIgIC0+ICcxLjI2NUUrMTAnCitkc2JhczIyMyB0b1NjaSAiMTI2LjVFKzIwIiAtPiAnMS4yNjVFKzIyJworCitkc2JhczIzMCB0b1NjaSAiMTI2NSIgICAgIC0+ICcxMjY1JworZHNiYXMyMzEgdG9TY2kgIjEyNjVFLTIwIiAtPiAnMS4yNjVFLTE3JworZHNiYXMyMzIgdG9TY2kgIjEyNjVFLTgiICAtPiAnMC4wMDAwMTI2NScKK2RzYmFzMjMzIHRvU2NpICIxMjY1RS00IiAgLT4gJzAuMTI2NScKK2RzYmFzMjM0IHRvU2NpICIxMjY1RS0zIiAgLT4gJzEuMjY1JworZHNiYXMyMzUgdG9TY2kgIjEyNjVFLTIiICAtPiAnMTIuNjUnCitkc2JhczIzNiB0b1NjaSAiMTI2NUUtMSIgIC0+ICcxMjYuNScKK2RzYmFzMjM3IHRvU2NpICIxMjY1RS0wIiAgLT4gJzEyNjUnCitkc2JhczIzOCB0b1NjaSAiMTI2NUUrMSIgIC0+ICcxLjI2NUUrNCcKK2RzYmFzMjM5IHRvU2NpICIxMjY1RSsyIiAgLT4gJzEuMjY1RSs1JworZHNiYXMyNDAgdG9TY2kgIjEyNjVFKzMiICAtPiAnMS4yNjVFKzYnCitkc2JhczI0MSB0b1NjaSAiMTI2NUUrNCIgIC0+ICcxLjI2NUUrNycKK2RzYmFzMjQyIHRvU2NpICIxMjY1RSs4IiAgLT4gJzEuMjY1RSsxMScKK2RzYmFzMjQzIHRvU2NpICIxMjY1RSsyMCIgLT4gJzEuMjY1RSsyMycKKworZHNiYXMyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnCitkc2JhczI1MSB0b1NjaSAiMC4xMjY1RS0yMCIgLT4gJzEuMjY1RS0yMScKK2RzYmFzMjUyIHRvU2NpICIwLjEyNjVFLTgiICAtPiAnMS4yNjVFLTknCitkc2JhczI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnCitkc2JhczI1NCB0b1NjaSAiMC4xMjY1RS0zIiAgLT4gJzAuMDAwMTI2NScKK2RzYmFzMjU1IHRvU2NpICIwLjEyNjVFLTIiICAtPiAnMC4wMDEyNjUnCitkc2JhczI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnCitkc2JhczI1NyB0b1NjaSAiMC4xMjY1RS0wIiAgLT4gJzAuMTI2NScKK2RzYmFzMjU4IHRvU2NpICIwLjEyNjVFKzEiICAtPiAnMS4yNjUnCitkc2JhczI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1JworZHNiYXMyNjAgdG9TY2kgIjAuMTI2NUUrMyIgIC0+ICcxMjYuNScKK2RzYmFzMjYxIHRvU2NpICIwLjEyNjVFKzQiICAtPiAnMTI2NScKK2RzYmFzMjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnCitkc2JhczI2MyB0b1NjaSAiMC4xMjY1RSsyMCIgLT4gJzEuMjY1RSsxOScKKworLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQorZHNiYXMyOTAgdG9TY2kgIi0wLjAwMEUtMSIgIC0+ICctMC4wMDAwJworZHNiYXMyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcKK2RzYmFzMjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJworZHNiYXMyOTMgdG9TY2kgIi0wLjAwMEUtNCIgIC0+ICctMEUtNycKK2RzYmFzMjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcKK2RzYmFzMjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnCitkc2JhczI5NiB0b1NjaSAiLTAuMEUtMiIgICAgLT4gJy0wLjAwMCcKK2RzYmFzMjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcKK2RzYmFzMjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnCitkc2JhczI5OSB0b1NjaSAiLTBFLTMiICAgICAgLT4gJy0wLjAwMCcKKworLS0gRW5naW5lZXJpbmcgbm90YXRpb24gdGVzdHMKK2RzYmFzMzAxICB0b1NjaSAxMGUxMiAgLT4gMS4wRSsxMworZHNiYXMzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTIKK2RzYmFzMzAzICB0b1NjaSAxMGUxMSAgLT4gMS4wRSsxMgorZHNiYXMzMDQgIHRvRW5nIDEwZTExICAtPiAxLjBFKzEyCitkc2JhczMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTEKK2RzYmFzMzA2ICB0b0VuZyAxMGUxMCAgLT4gMTAwRSs5Citkc2JhczMwNyAgdG9TY2kgMTBlOSAgIC0+IDEuMEUrMTAKK2RzYmFzMzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkKK2RzYmFzMzA5ICB0b1NjaSAxMGU4ICAgLT4gMS4wRSs5Citkc2JhczMxMCAgdG9FbmcgMTBlOCAgIC0+IDEuMEUrOQorZHNiYXMzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgKK2RzYmFzMzEyICB0b0VuZyAxMGU3ICAgLT4gMTAwRSs2Citkc2JhczMxMyAgdG9TY2kgMTBlNiAgIC0+IDEuMEUrNworZHNiYXMzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNgorZHNiYXMzMTUgIHRvU2NpIDEwZTUgICAtPiAxLjBFKzYKK2RzYmFzMzE2ICB0b0VuZyAxMGU1ICAgLT4gMS4wRSs2Citkc2JhczMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQorZHNiYXMzMTggIHRvRW5nIDEwZTQgICAtPiAxMDBFKzMKK2RzYmFzMzE5ICB0b1NjaSAxMGUzICAgLT4gMS4wRSs0Citkc2JhczMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszCitkc2JhczMyMSAgdG9TY2kgMTBlMiAgIC0+IDEuMEUrMworZHNiYXMzMjIgIHRvRW5nIDEwZTIgICAtPiAxLjBFKzMKK2RzYmFzMzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyCitkc2JhczMyNCAgdG9FbmcgMTBlMSAgIC0+IDEwMAorZHNiYXMzMjUgIHRvU2NpIDEwZTAgICAtPiAxMAorZHNiYXMzMjYgIHRvRW5nIDEwZTAgICAtPiAxMAorZHNiYXMzMjcgIHRvU2NpIDEwZS0xICAtPiAxLjAKK2RzYmFzMzI4ICB0b0VuZyAxMGUtMSAgLT4gMS4wCitkc2JhczMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTAKK2RzYmFzMzMwICB0b0VuZyAxMGUtMiAgLT4gMC4xMAorZHNiYXMzMzEgIHRvU2NpIDEwZS0zICAtPiAwLjAxMAorZHNiYXMzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMAorZHNiYXMzMzMgIHRvU2NpIDEwZS00ICAtPiAwLjAwMTAKK2RzYmFzMzM0ICB0b0VuZyAxMGUtNCAgLT4gMC4wMDEwCitkc2JhczMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTAKK2RzYmFzMzM2ICB0b0VuZyAxMGUtNSAgLT4gMC4wMDAxMAorZHNiYXMzMzcgIHRvU2NpIDEwZS02ICAtPiAwLjAwMDAxMAorZHNiYXMzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMAorZHNiYXMzMzkgIHRvU2NpIDEwZS03ICAtPiAwLjAwMDAwMTAKK2RzYmFzMzQwICB0b0VuZyAxMGUtNyAgLT4gMC4wMDAwMDEwCitkc2JhczM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNworZHNiYXMzNDIgIHRvRW5nIDEwZS04ICAtPiAxMDBFLTkKK2RzYmFzMzQzICB0b1NjaSAxMGUtOSAgLT4gMS4wRS04Citkc2JhczM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05Citkc2JhczM0NSAgdG9TY2kgMTBlLTEwIC0+IDEuMEUtOQorZHNiYXMzNDYgIHRvRW5nIDEwZS0xMCAtPiAxLjBFLTkKK2RzYmFzMzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMAorZHNiYXMzNDggIHRvRW5nIDEwZS0xMSAtPiAxMDBFLTEyCitkc2JhczM0OSAgdG9TY2kgMTBlLTEyIC0+IDEuMEUtMTEKK2RzYmFzMzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyCitkc2JhczM1MSAgdG9TY2kgMTBlLTEzIC0+IDEuMEUtMTIKK2RzYmFzMzUyICB0b0VuZyAxMGUtMTMgLT4gMS4wRS0xMgorCitkc2JhczM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTIKK2RzYmFzMzYyICB0b0VuZyA3RTEyICAtPiA3RSsxMgorZHNiYXMzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExCitkc2JhczM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5Citkc2JhczM2NSAgdG9TY2kgN0UxMCAgLT4gN0UrMTAKK2RzYmFzMzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQorZHNiYXMzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkKK2RzYmFzMzY4ICB0b0VuZyA3RTkgICAtPiA3RSs5Citkc2JhczM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOAorZHNiYXMzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNgorZHNiYXMzNzEgIHRvU2NpIDdFNyAgIC0+IDdFKzcKK2RzYmFzMzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNgorZHNiYXMzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYKK2RzYmFzMzc0ICB0b0VuZyA3RTYgICAtPiA3RSs2Citkc2JhczM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQorZHNiYXMzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMworZHNiYXMzNzcgIHRvU2NpIDdFNCAgIC0+IDdFKzQKK2RzYmFzMzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMworZHNiYXMzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMKK2RzYmFzMzgwICB0b0VuZyA3RTMgICAtPiA3RSszCitkc2JhczM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMgorZHNiYXMzODIgIHRvRW5nIDdFMiAgIC0+IDcwMAorZHNiYXMzODMgIHRvU2NpIDdFMSAgIC0+IDdFKzEKK2RzYmFzMzg0ICB0b0VuZyA3RTEgICAtPiA3MAorZHNiYXMzODUgIHRvU2NpIDdFMCAgIC0+IDcKK2RzYmFzMzg2ICB0b0VuZyA3RTAgICAtPiA3Citkc2JhczM4NyAgdG9TY2kgN0UtMSAgLT4gMC43Citkc2JhczM4OCAgdG9FbmcgN0UtMSAgLT4gMC43Citkc2JhczM4OSAgdG9TY2kgN0UtMiAgLT4gMC4wNworZHNiYXMzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcKK2RzYmFzMzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNworZHNiYXMzOTIgIHRvRW5nIDdFLTMgIC0+IDAuMDA3Citkc2JhczM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3Citkc2JhczM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3Citkc2JhczM5NSAgdG9TY2kgN0UtNSAgLT4gMC4wMDAwNworZHNiYXMzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcKK2RzYmFzMzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNworZHNiYXMzOTggIHRvRW5nIDdFLTYgIC0+IDAuMDAwMDA3Citkc2JhczM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNworZHNiYXM0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQorZHNiYXM0MDEgIHRvU2NpIDdFLTggIC0+IDdFLTgKK2RzYmFzNDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQorZHNiYXM0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkKK2RzYmFzNDA0ICB0b0VuZyA3RS05ICAtPiA3RS05Citkc2JhczQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTAKK2RzYmFzNDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyCitkc2JhczQwNyAgdG9TY2kgN0UtMTEgLT4gN0UtMTEKK2RzYmFzNDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTIKK2RzYmFzNDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMgorZHNiYXM0MTAgIHRvRW5nIDdFLTEyIC0+IDdFLTEyCitkc2JhczQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMKK2RzYmFzNDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1CisKKy0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uCitkc2JhczQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMAorZHNiYXM0MjIgIHRvU2NpICAgMTAwMCAtPiAxMDAwCitkc2JhczQyNCAgdG9TY2kgIDk5OS45IC0+ICA5OTkuOQorZHNiYXM0MjYgIHRvU2NpIDEwMDAuMCAtPiAxMDAwLjAKK2RzYmFzNDI4ICB0b1NjaSAxMDAwLjEgLT4gMTAwMC4xCitkc2JhczQzMCAgdG9TY2kgMTAwMDAgLT4gMTAwMDAKK2RzYmFzNDMyICB0b1NjaSAxMDAwICAgICAgICAtPiAxMDAwCitkc2JhczQzNCAgdG9TY2kgMTAwMDAgICAgICAgLT4gMTAwMDAKK2RzYmFzNDM2ICB0b1NjaSAxMDAwMDAgICAgICAtPiAxMDAwMDAKK2RzYmFzNDM4ICB0b1NjaSAxMDAwMDAwICAgICAtPiAxMDAwMDAwCitkc2JhczQ0MCAgdG9TY2kgMTAwMDAwMDAgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkCitkc2JhczQ0MiAgdG9TY2kgMTAwMDAwMDAgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkCitkc2JhczQ0NCAgdG9TY2kgMTAwMDAwMDMgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDQ2ICB0b1NjaSAxMDAwMDAwNSAgICAtPiAxLjAwMDAwMEUrNyAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NDggIHRvU2NpIDEwMDAwMDA1MCAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ1MCAgdG9TY2kgMTAwMDAwMDkgICAgLT4gMS4wMDAwMDFFKzcgICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDUyICB0b1NjaSAxMDAwMDAwMDAgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQKK2RzYmFzNDU0ICB0b1NjaSAxMDAwMDAwMDMgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NTYgIHRvU2NpIDEwMDAwMDAwNSAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ1OCAgdG9TY2kgMTAwMDAwMDA5ICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDYwICB0b1NjaSAxMDAwMDAwMDAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQKK2RzYmFzNDYyICB0b1NjaSAxMDAwMDAwMzAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NjQgIHRvU2NpIDEwMDAwMDA1MDAgIC0+IDEuMDAwMDAwRSs5ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ2NiAgdG9TY2kgMTAwMDAwMDkwMCAgLT4gMS4wMDAwMDFFKzkgICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMCAtPiAxLjAwMDAwMEUrMTAgIFJvdW5kZWQKK2RzYmFzNDcwICB0b1NjaSAxMDAwMDAwMzAwMCAtPiAxLjAwMDAwMEUrMTAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NzIgIHRvU2NpIDEwMDAwMDA1MDAwIC0+IDEuMDAwMDAwRSsxMCAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ3NCAgdG9TY2kgMTAwMDAwMDkwMDAgLT4gMS4wMDAwMDFFKzEwICBSb3VuZGVkIEluZXhhY3QKKworLS0gY2hlY2sgcm91bmRpbmcgbW9kZXMgaGVlZGVkCityb3VuZGluZzogIGNlaWxpbmcKK2RzYnNyNDAxICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZAorZHNic3I0MDIgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDAzICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQwNCAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICB1cAorZHNic3I0MDUgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQwNiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MDcgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDA4ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGZsb29yCitkc2JzcjQxMCAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNDExICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQxMiAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MTMgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkc2JzcjQxNSAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNDE2ICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQxNyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MTggIHRvU2NpICAxLjExMjM0NjUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDE5ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZXZlbgorZHNic3I0MjEgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQyMiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MjMgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDI0ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQyNSAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBkb3duCitkc2JzcjQyNiAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNDI3ICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQyOCAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MjkgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl91cAorZHNic3I0MzEgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQzMiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MzMgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDM0ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NyAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQzNSAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorLS0gbmVnYXRpdmVzCityb3VuZGluZzogIGNlaWxpbmcKK2RzYnNyNTAxICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZAorZHNic3I1MDIgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTAzICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUwNCAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICB1cAorZHNic3I1MDUgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUwNiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MDcgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTA4ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGZsb29yCitkc2JzcjUxMCAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNTExICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUxMiAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MTMgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkc2JzcjUxNSAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNTE2ICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUxNyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MTggIHRvU2NpIC0xLjExMjM0NjUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTE5ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZXZlbgorZHNic3I1MjEgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUyMiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MjMgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTI0ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUyNSAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBkb3duCitkc2JzcjUyNiAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNTI3ICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUyOCAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MjkgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl91cAorZHNic3I1MzEgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUzMiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MzMgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTM0ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NyAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUzNSAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFRoZSAnYmFkZGllcycgdGVzdHMgZnJvbSBEaWFnQmlnRGVjaW1hbCwgcGx1cyBzb21lIG5ldyBvbmVzCitkc2JhczUwMCB0b1NjaSAnMS4uMicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTAxIHRvU2NpICcuJyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDIgdG9TY2kgJy4uJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwMyB0b1NjaSAnKysxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTA0IHRvU2NpICctLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDUgdG9TY2kgJy0rMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwNiB0b1NjaSAnKy0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTA3IHRvU2NpICcxMmUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDggdG9TY2kgJzEyZSsrJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwOSB0b1NjaSAnMTJmNCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTEwIHRvU2NpICcgKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTEgdG9TY2kgJysgMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxMiB0b1NjaSAnMTIgJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTEzIHRvU2NpICcgKyAxJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTQgdG9TY2kgJyAtIDEgJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxNSB0b1NjaSAneCcgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTE2IHRvU2NpICctMS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTcgdG9TY2kgJzEyLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxOCB0b1NjaSAnMysnICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTE5IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjAgdG9TY2kgJzFlLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyMSB0b1NjaSAnN2U5OTk5OWEnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTIyIHRvU2NpICc3ZTEyMzU2Nzg5MHgnICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjMgdG9TY2kgJzdlMTIzNTY3ODkwMTJ4JyAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyNCB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTI1IHRvU2NpICdlMTAwJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjYgdG9TY2kgJ1x1MGU1YScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyNyB0b1NjaSAnXHUwYjY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTI4IHRvU2NpICcxMjMsNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjkgdG9TY2kgJzEuMzQuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzMCB0b1NjaSAnLjEyMy41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTMxIHRvU2NpICcwMS4zNS4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzIgdG9TY2kgJzAxLjM1LScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzMyB0b1NjaSAnMDAwMC4uJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTM0IHRvU2NpICcuMDAwMC4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzUgdG9TY2kgJzAwLi4wMCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzNiB0b1NjaSAnMTExZSoxMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTM3IHRvU2NpICcxMTFlMTIzLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzggdG9TY2kgJzExMWUrMTIrJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzOSB0b1NjaSAnMTExZTEtMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQwIHRvU2NpICcxMTFlMSoyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDEgdG9TY2kgJzExMWUxZSszJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0MiB0b1NjaSAnMWUxLjAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQzIHRvU2NpICcxZTEyM2UnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDQgdG9TY2kgJ3RlbicgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0NSB0b1NjaSAnT05FJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQ2IHRvU2NpICcxZS4xJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDcgdG9TY2kgJzFlMS4nICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0OCB0b1NjaSAnMWVlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQ5IHRvU2NpICdlKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTAgdG9TY2kgJzEuMjMuNCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1MSB0b1NjaSAnMS4yLjEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTUyIHRvU2NpICcxRSsxLjInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTMgdG9TY2kgJzFFKzEuMi4zJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1NCB0b1NjaSAnMUUrKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTU1IHRvU2NpICcxRS0tMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTYgdG9TY2kgJzFFKy0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1NyB0b1NjaSAnMUUtKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTU4IHRvU2NpICcxRScnMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTkgdG9TY2kgIjFFIiIxIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2MCB0b1NjaSAiMUUiIiIiIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKy0tIE5lYXItc3BlY2lhbHMKK2RzYmFzNTYxIHRvU2NpICJxTmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjIgdG9TY2kgIk5hTnEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2MyB0b1NjaSAiTmFOcyIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTY0IHRvU2NpICJJbmZpIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjUgdG9TY2kgIkluZmluIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2NiB0b1NjaSAiSW5maW5pIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTY3IHRvU2NpICJJbmZpbml0IiAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjggdG9TY2kgIi1JbmZpbml0IiAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2OSB0b1NjaSAiMEluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTcwIHRvU2NpICI5SW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzEgdG9TY2kgIi0wSW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3MiB0b1NjaSAiLTlJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTczIHRvU2NpICItc05hIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzQgdG9TY2kgInhOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3NSB0b1NjaSAiMHNOYU4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworLS0gc29tZSBiYWRkaWVzIHdpdGggZG90cyBhbmQgRXMgYW5kIGRvdHMgYW5kIHNwZWNpYWxzCitkc2JhczU3NiB0b1NjaSAgJ2UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3NyB0b1NjaSAgJy5lKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3OCB0b1NjaSAgJysuZSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3OSB0b1NjaSAgJy0uZSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4MCB0b1NjaSAgJy0uZScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4MSB0b1NjaSAgJ0UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4MiB0b1NjaSAgJy5FKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4MyB0b1NjaSAgJysuRSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4NCB0b1NjaSAgJy0uRSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4NSB0b1NjaSAgJy0uRScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RzYmFzNTg2IHRvU2NpICAnLk5hTicgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTg3IHRvU2NpICAnLS5OYU4nICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTg4IHRvU2NpICAnKy5zTmFOJyAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTg5IHRvU2NpICAnKy5JbmYnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTkwIHRvU2NpICAnLkluZmluaXR5JyAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworLS0gWmVyb3MKK2RzYmFzNjAxIHRvU2NpIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2RzYmFzNjAyIHRvU2NpIDAuMDAwMDAwMDAgICAgICAgIC0+IDBFLTgKK2RzYmFzNjAzIHRvU2NpIDAuMDAwMDAwMCAgICAgICAgIC0+IDBFLTcKK2RzYmFzNjA0IHRvU2NpIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwCitkc2JhczYwNSB0b1NjaSAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCitkc2JhczYwNiB0b1NjaSAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKK2RzYmFzNjA3IHRvU2NpIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwCitkc2JhczYwOCB0b1NjaSAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCitkc2JhczYwOSB0b1NjaSAwLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RzYmFzNjEwIHRvU2NpICAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZHNiYXM2MTEgdG9TY2kgMC4gICAgICAgICAgICAgICAgLT4gMAorZHNiYXM2MTIgdG9TY2kgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAorZHNiYXM2MTMgdG9TY2kgLTAuICAgICAgICAgICAgICAgLT4gLTAKK2RzYmFzNjE0IHRvU2NpIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKK2RzYmFzNjE1IHRvU2NpIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCitkc2JhczYxNiB0b1NjaSAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDAKK2RzYmFzNjE3IHRvU2NpIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKK2RzYmFzNjE4IHRvU2NpIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCitkc2JhczYxOSB0b1NjaSAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDAKK2RzYmFzNjIwIHRvU2NpIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wRS03Citkc2JhczYyMSB0b1NjaSAtMC4wMDAwMDAwMCAgICAgICAtPiAtMEUtOAorZHNiYXM2MjIgdG9TY2kgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKKworZHNiYXM2MzAgdG9TY2kgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMAorZHNiYXM2MzEgdG9TY2kgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCitkc2JhczYzMiB0b1NjaSAgMC4wMEUrMiAgICAgICAgICAtPiAwCitkc2JhczYzMyB0b1NjaSAgMC4wMEUrMyAgICAgICAgICAtPiAwRSsxCitkc2JhczYzNCB0b1NjaSAgMC4wMEUrNCAgICAgICAgICAtPiAwRSsyCitkc2JhczYzNSB0b1NjaSAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitkc2JhczYzNiB0b1NjaSAgMC4wMEUrNiAgICAgICAgICAtPiAwRSs0Citkc2JhczYzNyB0b1NjaSAgMC4wMEUrNyAgICAgICAgICAtPiAwRSs1Citkc2JhczYzOCB0b1NjaSAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2Citkc2JhczYzOSB0b1NjaSAgMC4wMEUrOSAgICAgICAgICAtPiAwRSs3CisKK2RzYmFzNjQwIHRvU2NpICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAorZHNiYXM2NDEgdG9TY2kgIDAuMEUrMSAgICAgICAgICAgLT4gMAorZHNiYXM2NDIgdG9TY2kgIDAuMEUrMiAgICAgICAgICAgLT4gMEUrMQorZHNiYXM2NDMgdG9TY2kgIDAuMEUrMyAgICAgICAgICAgLT4gMEUrMgorZHNiYXM2NDQgdG9TY2kgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMworZHNiYXM2NDUgdG9TY2kgIDAuMEUrNSAgICAgICAgICAgLT4gMEUrNAorZHNiYXM2NDYgdG9TY2kgIDAuMEUrNiAgICAgICAgICAgLT4gMEUrNQorZHNiYXM2NDcgdG9TY2kgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorZHNiYXM2NDggdG9TY2kgIDAuMEUrOCAgICAgICAgICAgLT4gMEUrNworZHNiYXM2NDkgdG9TY2kgIDAuMEUrOSAgICAgICAgICAgLT4gMEUrOAorCitkc2JhczY1MCB0b1NjaSAgMEUrMCAgICAgICAgICAgICAtPiAwCitkc2JhczY1MSB0b1NjaSAgMEUrMSAgICAgICAgICAgICAtPiAwRSsxCitkc2JhczY1MiB0b1NjaSAgMEUrMiAgICAgICAgICAgICAtPiAwRSsyCitkc2JhczY1MyB0b1NjaSAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCitkc2JhczY1NCB0b1NjaSAgMEUrNCAgICAgICAgICAgICAtPiAwRSs0Citkc2JhczY1NSB0b1NjaSAgMEUrNSAgICAgICAgICAgICAtPiAwRSs1Citkc2JhczY1NiB0b1NjaSAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2Citkc2JhczY1NyB0b1NjaSAgMEUrNyAgICAgICAgICAgICAtPiAwRSs3Citkc2JhczY1OCB0b1NjaSAgMEUrOCAgICAgICAgICAgICAtPiAwRSs4Citkc2JhczY1OSB0b1NjaSAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5CisKK2RzYmFzNjYwIHRvU2NpICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAorZHNiYXM2NjEgdG9TY2kgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAorZHNiYXM2NjIgdG9TY2kgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDAKK2RzYmFzNjYzIHRvU2NpICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAorZHNiYXM2NjQgdG9TY2kgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAorZHNiYXM2NjUgdG9TY2kgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RzYmFzNjY2IHRvU2NpICAwLjBFLTYgICAgICAgICAgIC0+IDBFLTcKK2RzYmFzNjY3IHRvU2NpICAwLjBFLTcgICAgICAgICAgIC0+IDBFLTgKK2RzYmFzNjY4IHRvU2NpICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKK2RzYmFzNjY5IHRvU2NpICAwLjBFLTkgICAgICAgICAgIC0+IDBFLTEwCisKK2RzYmFzNjcwIHRvU2NpICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKK2RzYmFzNjcxIHRvU2NpICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwCitkc2JhczY3MiB0b1NjaSAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKK2RzYmFzNjczIHRvU2NpICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKK2RzYmFzNjc0IHRvU2NpICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwCitkc2JhczY3NSB0b1NjaSAgMC4wMEUtNSAgICAgICAgICAtPiAwRS03Citkc2JhczY3NiB0b1NjaSAgMC4wMEUtNiAgICAgICAgICAtPiAwRS04Citkc2JhczY3NyB0b1NjaSAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05Citkc2JhczY3OCB0b1NjaSAgMC4wMEUtOCAgICAgICAgICAtPiAwRS0xMAorZHNiYXM2NzkgdG9TY2kgIDAuMDBFLTkgICAgICAgICAgLT4gMEUtMTEKKworZHNiYXM2ODAgdG9TY2kgIDAwMDAwMC4gICAgICAgICAgLT4gIDAKK2RzYmFzNjgxIHRvU2NpICAgMDAwMDAuICAgICAgICAgIC0+ICAwCitkc2JhczY4MiB0b1NjaSAgICAwMDAwLiAgICAgICAgICAtPiAgMAorZHNiYXM2ODMgdG9TY2kgICAgIDAwMC4gICAgICAgICAgLT4gIDAKK2RzYmFzNjg0IHRvU2NpICAgICAgMDAuICAgICAgICAgIC0+ICAwCitkc2JhczY4NSB0b1NjaSAgICAgICAwLiAgICAgICAgICAtPiAgMAorZHNiYXM2ODYgdG9TY2kgICswMDAwMC4gICAgICAgICAgLT4gIDAKK2RzYmFzNjg3IHRvU2NpICAtMDAwMDAuICAgICAgICAgIC0+IC0wCitkc2JhczY4OCB0b1NjaSAgKzAuICAgICAgICAgICAgICAtPiAgMAorZHNiYXM2ODkgdG9TY2kgIC0wLiAgICAgICAgICAgICAgLT4gLTAKKworLS0gU3BlY2lhbHMKK2RzYmFzNzAwIHRvU2NpICJOYU4iICAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDEgdG9TY2kgIm5hbiIgICAgICAgICAgICAgLT4gTmFOCitkc2JhczcwMiB0b1NjaSAibkFuIiAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzAzIHRvU2NpICJOQU4iICAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDQgdG9TY2kgIitOYU4iICAgICAgICAgICAgLT4gTmFOCitkc2JhczcwNSB0b1NjaSAiK25hbiIgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzA2IHRvU2NpICIrbkFuIiAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDcgdG9TY2kgIitOQU4iICAgICAgICAgICAgLT4gTmFOCitkc2JhczcwOCB0b1NjaSAiLU5hTiIgICAgICAgICAgICAtPiAtTmFOCitkc2JhczcwOSB0b1NjaSAiLW5hbiIgICAgICAgICAgICAtPiAtTmFOCitkc2JhczcxMCB0b1NjaSAiLW5BbiIgICAgICAgICAgICAtPiAtTmFOCitkc2JhczcxMSB0b1NjaSAiLU5BTiIgICAgICAgICAgICAtPiAtTmFOCitkc2JhczcxMiB0b1NjaSAnTmFOMCcgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzEzIHRvU2NpICdOYU4xJyAgICAgICAgICAgIC0+IE5hTjEKK2RzYmFzNzE0IHRvU2NpICdOYU4xMicgICAgICAgICAgIC0+IE5hTjEyCitkc2JhczcxNSB0b1NjaSAnTmFOMTIzJyAgICAgICAgICAtPiBOYU4xMjMKK2RzYmFzNzE2IHRvU2NpICdOYU4xMjM0JyAgICAgICAgIC0+IE5hTjEyMzQKK2RzYmFzNzE3IHRvU2NpICdOYU4wMScgICAgICAgICAgIC0+IE5hTjEKK2RzYmFzNzE4IHRvU2NpICdOYU4wMTInICAgICAgICAgIC0+IE5hTjEyCitkc2JhczcxOSB0b1NjaSAnTmFOMDEyMycgICAgICAgICAtPiBOYU4xMjMKK2RzYmFzNzIwIHRvU2NpICdOYU4wMTIzNCcgICAgICAgIC0+IE5hTjEyMzQKK2RzYmFzNzIxIHRvU2NpICdOYU4wMDEnICAgICAgICAgIC0+IE5hTjEKK2RzYmFzNzIyIHRvU2NpICdOYU4wMDEyJyAgICAgICAgIC0+IE5hTjEyCitkc2JhczcyMyB0b1NjaSAnTmFOMDAxMjMnICAgICAgICAtPiBOYU4xMjMKK2RzYmFzNzI0IHRvU2NpICdOYU4wMDEyMzQnICAgICAgIC0+IE5hTjEyMzQKK2RzYmFzNzI1IHRvU2NpICdOYU4xMjM0NTY3ODkwMTIzNDU2JyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNzI2IHRvU2NpICdOYU4xMjNlKzEnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM3MjcgdG9TY2kgJ05hTjEyLjQ1JyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczcyOCB0b1NjaSAnTmFOLTEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNzI5IHRvU2NpICdOYU4rMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkc2JhczczMCB0b1NjaSAic05hTiIgICAgICAgICAgICAtPiBzTmFOCitkc2JhczczMSB0b1NjaSAic25hbiIgICAgICAgICAgICAtPiBzTmFOCitkc2JhczczMiB0b1NjaSAiU25BbiIgICAgICAgICAgICAtPiBzTmFOCitkc2JhczczMyB0b1NjaSAiU05BTiIgICAgICAgICAgICAtPiBzTmFOCitkc2JhczczNCB0b1NjaSAiK3NOYU4iICAgICAgICAgICAtPiBzTmFOCitkc2JhczczNSB0b1NjaSAiK3NuYW4iICAgICAgICAgICAtPiBzTmFOCitkc2JhczczNiB0b1NjaSAiK1NuQW4iICAgICAgICAgICAtPiBzTmFOCitkc2JhczczNyB0b1NjaSAiK1NOQU4iICAgICAgICAgICAtPiBzTmFOCitkc2JhczczOCB0b1NjaSAiLXNOYU4iICAgICAgICAgICAtPiAtc05hTgorZHNiYXM3MzkgdG9TY2kgIi1zbmFuIiAgICAgICAgICAgLT4gLXNOYU4KK2RzYmFzNzQwIHRvU2NpICItU25BbiIgICAgICAgICAgIC0+IC1zTmFOCitkc2Jhczc0MSB0b1NjaSAiLVNOQU4iICAgICAgICAgICAtPiAtc05hTgorZHNiYXM3NDIgdG9TY2kgJ3NOYU4wMDAwJyAgICAgICAgLT4gc05hTgorZHNiYXM3NDMgdG9TY2kgJ3NOYU43JyAgICAgICAgICAgLT4gc05hTjcKK2RzYmFzNzQ0IHRvU2NpICdzTmFOMDA3MjM0JyAgICAgIC0+IHNOYU43MjM0Citkc2Jhczc0NSB0b1NjaSAnc05hTjcyMzQ1NjEyMzQ1Njc4OTAnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM3NDYgdG9TY2kgJ3NOYU43Mi40NScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2Jhczc0NyB0b1NjaSAnc05hTi03MicgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZHNiYXM3NDggdG9TY2kgIkluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzQ5IHRvU2NpICJpbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc1MCB0b1NjaSAiaU5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NTEgdG9TY2kgIklORiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzUyIHRvU2NpICIrSW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc1MyB0b1NjaSAiK2luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NTQgdG9TY2kgIitpTmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzU1IHRvU2NpICIrSU5GIiAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc1NiB0b1NjaSAiLUluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RzYmFzNzU3IHRvU2NpICItaW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZHNiYXM3NTggdG9TY2kgIi1pTmYiICAgICAgICAgICAgLT4gLUluZmluaXR5Citkc2Jhczc1OSB0b1NjaSAiLUlORiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKKworZHNiYXM3NjAgdG9TY2kgIkluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzYxIHRvU2NpICJpbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2MiB0b1NjaSAiaU5mSW5JdFkiICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NjMgdG9TY2kgIklORklOSVRZIiAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzY0IHRvU2NpICIrSW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2NSB0b1NjaSAiK2luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NjYgdG9TY2kgIitpTmZJbkl0WSIgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzY3IHRvU2NpICIrSU5GSU5JVFkiICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2OCB0b1NjaSAiLUluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKK2RzYmFzNzY5IHRvU2NpICItaW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQorZHNiYXM3NzAgdG9TY2kgIi1pTmZJbkl0WSIgICAgICAgLT4gLUluZmluaXR5Citkc2Jhczc3MSB0b1NjaSAiLUlORklOSVRZIiAgICAgICAtPiAtSW5maW5pdHkKKworLS0gU3BlY2lhbHMgYW5kIHplcm9zIGZvciB0b0VuZworZHNiYXN0NzcyIHRvRW5nICJOYU4iICAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc3MyB0b0VuZyAiLUluZmluaXR5IiAgICAgICAgLT4gLUluZmluaXR5Citkc2Jhc3Q3NzQgdG9FbmcgIi1zTmFOIiAgICAgICAgICAgIC0+IC1zTmFOCitkc2Jhc3Q3NzUgdG9FbmcgIi1OYU4iICAgICAgICAgICAgIC0+IC1OYU4KK2RzYmFzdDc3NiB0b0VuZyAiK0luZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc3OCB0b0VuZyAiK3NOYU4iICAgICAgICAgICAgLT4gc05hTgorZHNiYXN0Nzc5IHRvRW5nICIrTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc4MCB0b0VuZyAiSU5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc4MSB0b0VuZyAiU05BTiIgICAgICAgICAgICAgLT4gc05hTgorZHNiYXN0NzgyIHRvRW5nICJOQU4iICAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc4MyB0b0VuZyAiaW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc4NCB0b0VuZyAic25hbiIgICAgICAgICAgICAgLT4gc05hTgorZHNiYXN0Nzg1IHRvRW5nICJuYW4iICAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc4NiB0b0VuZyAiSW5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc4NyB0b0VuZyAiU25BTiIgICAgICAgICAgICAgLT4gc05hTgorZHNiYXN0Nzg4IHRvRW5nICJuQU4iICAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc4OSB0b0VuZyAiaU5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc5MCB0b0VuZyAic05hbiIgICAgICAgICAgICAgLT4gc05hTgorZHNiYXN0NzkxIHRvRW5nICJOYW4iICAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc5MiB0b0VuZyAiSW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc5MyB0b0VuZyAic05hTiIgICAgICAgICAgICAgLT4gc05hTgorCistLSBaZXJvIHRvRW5nLCBldGMuCitkc2Jhc3Q4MDAgdG9FbmcgMGUrMSAgICAgICAgICAgICAgLT4gIjAuMDBFKzMiICAtLSBkb2MgZXhhbXBsZQorCitkc2Jhc3Q4MDEgdG9FbmcgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQorZHNiYXN0ODAyIHRvRW5nIDAuMDAwMDAwMDAgICAgICAgIC0+IDAuMDBFLTYKK2RzYmFzdDgwMyB0b0VuZyAwLjAwMDAwMDAgICAgICAgICAtPiAwLjBFLTYKK2RzYmFzdDgwNCB0b0VuZyAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAorZHNiYXN0ODA1IHRvRW5nIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDAKK2RzYmFzdDgwNiB0b0VuZyAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKK2RzYmFzdDgwNyB0b0VuZyAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAorZHNiYXN0ODA4IHRvRW5nIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDAKK2RzYmFzdDgwOSB0b0VuZyAwLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RzYmFzdDgxMCB0b0VuZyAgLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RzYmFzdDgxMSB0b0VuZyAwLiAgICAgICAgICAgICAgICAtPiAwCitkc2Jhc3Q4MTIgdG9FbmcgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAorZHNiYXN0ODEzIHRvRW5nIC0wLiAgICAgICAgICAgICAgIC0+IC0wCitkc2Jhc3Q4MTQgdG9FbmcgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMAorZHNiYXN0ODE1IHRvRW5nIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCitkc2Jhc3Q4MTYgdG9FbmcgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCitkc2Jhc3Q4MTcgdG9FbmcgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMAorZHNiYXN0ODE4IHRvRW5nIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCitkc2Jhc3Q4MTkgdG9FbmcgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCitkc2Jhc3Q4MjAgdG9FbmcgLTAuMDAwMDAwMCAgICAgICAgLT4gLTAuMEUtNgorZHNiYXN0ODIxIHRvRW5nIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wLjAwRS02Citkc2Jhc3Q4MjIgdG9FbmcgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKKworZHNiYXN0ODMwIHRvRW5nICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKK2RzYmFzdDgzMSB0b0VuZyAgMC4wMEUrMSAgICAgICAgICAtPiAwLjAKK2RzYmFzdDgzMiB0b0VuZyAgMC4wMEUrMiAgICAgICAgICAtPiAwCitkc2Jhc3Q4MzMgdG9FbmcgIDAuMDBFKzMgICAgICAgICAgLT4gMC4wMEUrMworZHNiYXN0ODM0IHRvRW5nICAwLjAwRSs0ICAgICAgICAgIC0+IDAuMEUrMworZHNiYXN0ODM1IHRvRW5nICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMKK2RzYmFzdDgzNiB0b0VuZyAgMC4wMEUrNiAgICAgICAgICAtPiAwLjAwRSs2Citkc2Jhc3Q4MzcgdG9FbmcgIDAuMDBFKzcgICAgICAgICAgLT4gMC4wRSs2Citkc2Jhc3Q4MzggdG9FbmcgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgorZHNiYXN0ODM5IHRvRW5nICAwLjAwRSs5ICAgICAgICAgIC0+IDAuMDBFKzkKKworZHNiYXN0ODQwIHRvRW5nICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAorZHNiYXN0ODQxIHRvRW5nICAwLjBFKzEgICAgICAgICAgIC0+IDAKK2RzYmFzdDg0MiB0b0VuZyAgMC4wRSsyICAgICAgICAgICAtPiAwLjAwRSszCitkc2Jhc3Q4NDMgdG9FbmcgIDAuMEUrMyAgICAgICAgICAgLT4gMC4wRSszCitkc2Jhc3Q4NDQgdG9FbmcgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMworZHNiYXN0ODQ1IHRvRW5nICAwLjBFKzUgICAgICAgICAgIC0+IDAuMDBFKzYKK2RzYmFzdDg0NiB0b0VuZyAgMC4wRSs2ICAgICAgICAgICAtPiAwLjBFKzYKK2RzYmFzdDg0NyB0b0VuZyAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2Citkc2Jhc3Q4NDggdG9FbmcgIDAuMEUrOCAgICAgICAgICAgLT4gMC4wMEUrOQorZHNiYXN0ODQ5IHRvRW5nICAwLjBFKzkgICAgICAgICAgIC0+IDAuMEUrOQorCitkc2Jhc3Q4NTAgdG9FbmcgIDBFKzAgICAgICAgICAgICAgLT4gMAorZHNiYXN0ODUxIHRvRW5nICAwRSsxICAgICAgICAgICAgIC0+IDAuMDBFKzMKK2RzYmFzdDg1MiB0b0VuZyAgMEUrMiAgICAgICAgICAgICAtPiAwLjBFKzMKK2RzYmFzdDg1MyB0b0VuZyAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCitkc2Jhc3Q4NTQgdG9FbmcgIDBFKzQgICAgICAgICAgICAgLT4gMC4wMEUrNgorZHNiYXN0ODU1IHRvRW5nICAwRSs1ICAgICAgICAgICAgIC0+IDAuMEUrNgorZHNiYXN0ODU2IHRvRW5nICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYKK2RzYmFzdDg1NyB0b0VuZyAgMEUrNyAgICAgICAgICAgICAtPiAwLjAwRSs5Citkc2Jhc3Q4NTggdG9FbmcgIDBFKzggICAgICAgICAgICAgLT4gMC4wRSs5Citkc2Jhc3Q4NTkgdG9FbmcgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQorCitkc2Jhc3Q4NjAgdG9FbmcgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wCitkc2Jhc3Q4NjEgdG9FbmcgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAorZHNiYXN0ODYyIHRvRW5nICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCitkc2Jhc3Q4NjMgdG9FbmcgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwCitkc2Jhc3Q4NjQgdG9FbmcgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAorZHNiYXN0ODY1IHRvRW5nICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCitkc2Jhc3Q4NjYgdG9FbmcgIDAuMEUtNiAgICAgICAgICAgLT4gMC4wRS02Citkc2Jhc3Q4NjcgdG9FbmcgIDAuMEUtNyAgICAgICAgICAgLT4gMC4wMEUtNgorZHNiYXN0ODY4IHRvRW5nICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKK2RzYmFzdDg2OSB0b0VuZyAgMC4wRS05ICAgICAgICAgICAtPiAwLjBFLTkKKworZHNiYXN0ODcwIHRvRW5nICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKK2RzYmFzdDg3MSB0b0VuZyAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAorZHNiYXN0ODcyIHRvRW5nICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMAorZHNiYXN0ODczIHRvRW5nICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKK2RzYmFzdDg3NCB0b0VuZyAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAorZHNiYXN0ODc1IHRvRW5nICAwLjAwRS01ICAgICAgICAgIC0+IDAuMEUtNgorZHNiYXN0ODc2IHRvRW5nICAwLjAwRS02ICAgICAgICAgIC0+IDAuMDBFLTYKK2RzYmFzdDg3NyB0b0VuZyAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05Citkc2Jhc3Q4NzggdG9FbmcgIDAuMDBFLTggICAgICAgICAgLT4gMC4wRS05Citkc2Jhc3Q4NzkgdG9FbmcgIDAuMDBFLTkgICAgICAgICAgLT4gMC4wMEUtOQorCistLSBsb25nIGlucHV0IHN0cmluZ3MKK2RzYmFzODAxIHRvc2NpICAgICAgICAgICcwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDIgdG9zY2kgICAgICAgICAnMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgwMyB0b3NjaSAgICAgICAgJzAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODA0IHRvc2NpICAgICAgICcwMDAwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDUgdG9zY2kgICAgICAnMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgwNiB0b3NjaSAgICAgJzAwMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODA3IHRvc2NpICAgICcwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDggdG9zY2kgICAnMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgwOSB0b3NjaSAgJzAwMDAwMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODEwIHRvc2NpICcwMDAwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2NworCitkc2JhczgxMSB0b3NjaSAgICAgICAgICAnMC4xMjM0NTY3JyAtPiAgICAgIDAuMTIzNDU2NworZHNiYXM4MTIgdG9zY2kgICAgICAgICAnMC4wMTIzNDU2NycgLT4gICAgIDAuMDEyMzQ1NjcKK2RzYmFzODEzIHRvc2NpICAgICAgICAnMC4wMDEyMzQ1NjcnIC0+ICAgIDAuMDAxMjM0NTY3Citkc2JhczgxNCB0b3NjaSAgICAgICAnMC4wMDAxMjM0NTY3JyAtPiAgIDAuMDAwMTIzNDU2NworZHNiYXM4MTUgdG9zY2kgICAgICAnMC4wMDAwMTIzNDU2NycgLT4gIDAuMDAwMDEyMzQ1NjcKK2RzYmFzODE2IHRvc2NpICAgICAnMC4wMDAwMDEyMzQ1NjcnIC0+IDAuMDAwMDAxMjM0NTY3Citkc2JhczgxNyB0b3NjaSAgICAnMC4wMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtNworZHNiYXM4MTggdG9zY2kgICAnMC4wMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTgKK2RzYmFzODE5IHRvc2NpICAnMC4wMDAwMDAwMDEyMzQ1NjcnIC0+ICAgICAgIDEuMjM0NTY3RS05Citkc2JhczgyMCB0b3NjaSAnMC4wMDAwMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtMTAKKworZHNiYXM4MjEgdG9zY2kgJzEyMzQ1Njc5MCcgICAgICAgICAtPiAxLjIzNDU2OEUrOCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODIyIHRvc2NpICcxMjM0NTY3OTAxJyAgICAgICAgLT4gMS4yMzQ1NjhFKzkgIEluZXhhY3QgUm91bmRlZAorZHNiYXM4MjMgdG9zY2kgJzEyMzQ1Njc5MDEyJyAgICAgICAtPiAxLjIzNDU2OEUrMTAgSW5leGFjdCBSb3VuZGVkCitkc2JhczgyNCB0b3NjaSAnMTIzNDU2NzkwMTIzJyAgICAgIC0+IDEuMjM0NTY4RSsxMSBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODI1IHRvc2NpICcxMjM0NTY3OTAxMjM0JyAgICAgLT4gMS4yMzQ1NjhFKzEyIEluZXhhY3QgUm91bmRlZAorZHNiYXM4MjYgdG9zY2kgJzEyMzQ1Njc5MDEyMzQ1JyAgICAtPiAxLjIzNDU2OEUrMTMgSW5leGFjdCBSb3VuZGVkCitkc2JhczgyNyB0b3NjaSAnMTIzNDU2NzkwMTIzNDU2JyAgIC0+IDEuMjM0NTY4RSsxNCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODI4IHRvc2NpICcxMjM0NTY3OTAxMjM0NTY3JyAgLT4gMS4yMzQ1NjhFKzE1IEluZXhhY3QgUm91bmRlZAorZHNiYXM4MjkgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTYnICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cworZHNiYXM5MDYgdG9TY2kgJzk5ZTk5OTk5OTk5OScgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MDcgdG9TY2kgJzk5OWU5OTk5OTk5OTknICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MDggdG9TY2kgJzAuOWUtOTk5OTk5OTk5JyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkxMCB0b1NjaSAnMC4xZTEwMDAwMDAwMDAnICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkxMSB0b1NjaSAnMTBlLTEwMDAwMDAwMDAnICAgICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MTIgdG9TY2kgJzAuOWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MTMgdG9TY2kgJzk5ZS05OTk5OTk5OTk5JyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkxNiB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OTknICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MTcgdG9TY2kgJzdlMTAwMDAwMDAwMCcgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorLS0gbmVnYXRpdmVzIHRoZSBzYW1lCitkc2JhczkxOCB0b1NjaSAnLTk5ZTk5OTk5OTk5OScgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MTkgdG9TY2kgJy05OTllOTk5OTk5OTk5JyAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTIwIHRvU2NpICctMC45ZS05OTk5OTk5OTknICAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkyMiB0b1NjaSAnLTAuMWUxMDAwMDAwMDAwJyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MjMgdG9TY2kgJy0xMGUtMTAwMDAwMDAwMCcgICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkyNCB0b1NjaSAnLTAuOWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MjUgdG9TY2kgJy05OWUtOTk5OTk5OTk5OScgICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkyOCB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTk5JyAtPiAtMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTI5IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG92ZXJmbG93IHJlc3VsdHMgYXQgZGlmZmVyZW50IHJvdW5kaW5nIG1vZGVzCityb3VuZGluZzogIGNlaWxpbmcKK2RzYmFzOTMwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkzMSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgdXAKK2RzYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkzMyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBkb3duCitkc2JhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTM1IHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OUUrOTYgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBmbG9vcgorZHNiYXM5MzYgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkzNyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfdXAKK2RzYmFzOTM4IHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkzOSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RzYmFzOTQwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2Jhczk0MSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RzYmFzOTQyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2Jhczk0MyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfZXZlbgorCistLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMAorZHNiZW00MDAgdG9TY2kgIDEuMDAwMEUtODYgICAgIC0+IDEuMDAwMEUtODYKK2RzYmVtNDAxIHRvU2NpICAwLjFFLTk3ICAgICAgICAtPiAxRS05OCAgICAgICBTdWJub3JtYWwKK2RzYmVtNDAyIHRvU2NpICAwLjEwMDBFLTk3ICAgICAtPiAxLjAwMEUtOTggICBTdWJub3JtYWwKK2RzYmVtNDAzIHRvU2NpICAwLjAxMDBFLTk3ICAgICAtPiAxLjAwRS05OSAgICBTdWJub3JtYWwKK2RzYmVtNDA0IHRvU2NpICAwLjAwMTBFLTk3ICAgICAtPiAxLjBFLTEwMCAgICAgU3Vibm9ybWFsCitkc2JlbTQwNSB0b1NjaSAgMC4wMDAxRS05NyAgICAgLT4gMUUtMTAxICAgICAgIFN1Ym5vcm1hbAorZHNiZW00MDYgdG9TY2kgIDAuMDAwMTBFLTk3ICAgIC0+IDFFLTEwMSAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RzYmVtNDA3IHRvU2NpICAwLjAwMDEzRS05NyAgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQwOCB0b1NjaSAgMC4wMDAxNUUtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MDkgdG9TY2kgIDAuMDAwMTdFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDEwIHRvU2NpICAwLjAwMDIzRS05NyAgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxMSB0b1NjaSAgMC4wMDAyNUUtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTIgdG9TY2kgIDAuMDAwMjdFLTk3ICAgIC0+IDNFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtOTcgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTUgdG9TY2kgIDAuMDAwMTUxRS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtOTcgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTggdG9TY2kgIDAuMDAwMjUxRS05NyAgIC0+IDNFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDE5IHRvU2NpICAwLjAwMDA5RS05NyAgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQyMCB0b1NjaSAgMC4wMDAwNUUtOTcgICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQyMSB0b1NjaSAgMC4wMDAwM0UtOTcgICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQyNCB0b1NjaSAgMC4wMDAwMDNFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RzYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtOTcgICAtPiAxLjBFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQyNiB0b1NjaSAgMC4wMDEwNTBFLTk3ICAgLT4gMS4wRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS05NyAgIC0+IDEuMUUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtOTcgICAtPiAxLjFFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQyOSB0b1NjaSAgMC4wMDExNTBFLTk3ICAgLT4gMS4yRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS05NyAgIC0+IDEuMkUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHNiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS05NyAgIC0+IDEuMDBFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzMgdG9TY2kgIDAuMDEwMDUwRS05NyAgIC0+IDEuMDBFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS05NyAgIC0+IDEuMDFFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS05NyAgIC0+IDEuMDFFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzYgdG9TY2kgIDAuMDEwMTUwRS05NyAgIC0+IDEuMDJFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS05NyAgIC0+IDEuMDJFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkc2JlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtOTcgICAgLT4gMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ0MSB0b1NjaSAgMC4xMDEwNUUtOTcgICAgLT4gMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ0MiB0b1NjaSAgMC4xMDEwN0UtOTcgICAgLT4gMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ0MyB0b1NjaSAgMC4xMDExM0UtOTcgICAgLT4gMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ0NCB0b1NjaSAgMC4xMDExNUUtOTcgICAgLT4gMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ0NSB0b1NjaSAgMC4xMDExN0UtOTcgICAgLT4gMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RzYmVtNDUwIHRvU2NpICAxLjEwNzMwRS05OCAgICAtPiAxLjEwN0UtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDUxIHRvU2NpICAxLjEwNzUwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDUyIHRvU2NpICAxLjEwNzcwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDUzIHRvU2NpICAxLjEwODMwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDU0IHRvU2NpICAxLjEwODUwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDU1IHRvU2NpICAxLjEwODcwRS05OCAgICAtPiAxLjEwOUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbWFrZSBzdXJlIHNpZ24gT0sKK2RzYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtOTcgICAtPiAtMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1NyB0b1NjaSAgLTAuMTAxMDVFLTk3ICAgLT4gLTEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NTggdG9TY2kgIC0wLjEwMTA3RS05NyAgIC0+IC0xLjAxMUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtOTcgICAtPiAtMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ2MCB0b1NjaSAgLTAuMTAxMTVFLTk3ICAgLT4gLTEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NjEgdG9TY2kgIC0wLjEwMTE3RS05NyAgIC0+IC0xLjAxMkUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gJzk5OXMnIGNhc2VzCitkc2JlbTQ2NCB0b1NjaSAgOTk5OTk5RS05OCAgICAgICAgIC0+IDkuOTk5OTlFLTkzCitkc2JlbTQ2NSB0b1NjaSAgOTk5OTkuMEUtOTcgICAgICAgIC0+IDkuOTk5OTBFLTkzCitkc2JlbTQ2NiB0b1NjaSAgOTk5OTkuRS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTMKK2RzYmVtNDY3IHRvU2NpICA5OTk5LjlFLTk3ICAgICAgICAgLT4gOS45OTk5RS05NAorZHNiZW00NjggdG9TY2kgIDk5OS45OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk1Citkc2JlbTQ2OSB0b1NjaSAgOTkuOTk5RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTYgU3Vibm9ybWFsCitkc2JlbTQ3MCB0b1NjaSAgOS45OTk5RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTcgU3Vibm9ybWFsCitkc2JlbTQ3MSB0b1NjaSAgMC45OTk5OUUtOTcgICAgICAgIC0+IDEuMDAwMEUtOTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtOTcgICAgICAgLT4gMS4wMDBFLTk4ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtOTcgICAgICAtPiAxLjAwRS05OSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtOTcgICAgIC0+IDEuMEUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtOTcgICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtOTcgICAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmVtNDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS05NyAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTk3IC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MKK2RzYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHNiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczEwMDggdG9TY2kgIDFlLTA5OTk5OTk5OTkgLT4gMEUtMTAxICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXMxMDA5IHRvU2NpICAxZS0wMDk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczEwMTEgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXMxMDEyIHRvU2NpICAxZS0wMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RzYmFzMTA0MSB0b1NjaSAgICAgMS4xMTUyNDQ0RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RzYmFzMTA0MiB0b1NjaSAgICAgMS4xMTUyNDQ1RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RzYmFzMTA0MyB0b1NjaSAgICAgMS4xMTUyNDQ2RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0KK2RzYmFzMTA3NSB0b1NjaSAgIDBlKzEwMDAwICAtPiAgMEUrOTAgICBDbGFtcGVkCitkc2JhczEwNzYgdG9TY2kgICAwZS0xMDAwMCAgLT4gIDBFLTEwMSAgQ2xhbXBlZAorZHNiYXMxMDc3IHRvU2NpICAtMGUrMTAwMDAgIC0+IC0wRSs5MCAgIENsYW1wZWQKK2RzYmFzMTA3OCB0b1NjaSAgLTBlLTEwMDAwICAtPiAtMEUtMTAxICBDbGFtcGVkCisKKy0tIGV4dHJlbWUgdmFsdWVzIGZyb20gbmV4dC13aWRlcgorZHNiYXMxMTAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMTEwMiB0b1NjaSAtMUUtMzgzIC0+IC0wRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHNiYXMxMTAzIHRvU2NpIC0xRS0zOTggLT4gLTBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkc2JhczExMDQgdG9TY2kgLTAgLT4gLTAKK2RzYmFzMTEwNSB0b1NjaSArMCAtPiAgMAorZHNiYXMxMTA2IHRvU2NpICsxRS0zOTggLT4gIDBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkc2JhczExMDcgdG9TY2kgKzFFLTM4MyAtPiAgMEUtMTAxIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RzYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5hcnJvd2luZyBjYXNlCitkc2JhczExMTAgdG9TY2kgMi4wMDAwMDAwMDAwMDAwMDBFLTk5IC0+IDIuMDBFLTk5IFJvdW5kZWQgU3Vibm9ybWFsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNFbmNvZGUuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0VuY29kZS5kZWNUZXN0CmluZGV4IDcyNjQ3NDguLjgxODU3OGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0VuY29kZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0VuY29kZS5kZWNUZXN0CkBAIC0xLDM3MiArMSwzNzIgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRzRW5jb2RlLmRlY1Rlc3QgLS0gZGVjaW1hbCBmb3VyLWJ5dGUgZm9ybWF0IHRlc3RjYXNlcyAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAwLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFtQcmV2aW91c2x5IGNhbGxlZCBkZWNpbWFsMzIuZGVjVGVzdF0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIHRoZSBmb3VyLWJ5dGUgY29uY3JldGUgcmVwcmVzZW50YXRpb24uDQotLS0gSXRzIGNoYXJhY3RlcmlzdGljcyBhcmU6DQotLS0NCi0tLSAgMSBiaXQgIHNpZ24NCi0tLSAgNSBiaXRzIGNvbWJpbmF0aW9uIGZpZWxkDQotLS0gIDYgYml0cyBleHBvbmVudCBjb250aW51YXRpb24NCi0tLSAyMCBiaXRzIGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbg0KLS0tDQotLS0gVG90YWwgZXhwb25lbnQgbGVuZ3RoIDggYml0cw0KLS0tIFRvdGFsIGNvZWZmaWNpZW50IGxlbmd0aCAyNCBiaXRzICg3IGRpZ2l0cykNCi0tLQ0KLS0tIEVsaW1pdCA9ICAxOTEgKG1heGltdW0gZW5jb2RlZCBleHBvbmVudCkNCi0tLSBFbWF4ICAgPSAgIDk2IChsYXJnZXN0IGV4cG9uZW50IHZhbHVlKQ0KLS0tIEVtaW4gICA9ICAtOTUgKHNtYWxsZXN0IGV4cG9uZW50IHZhbHVlKQ0KLS0tIGJpYXMgICA9ICAxMDEgKHN1YnRyYWN0ZWQgZnJvbSBlbmNvZGVkIGV4cG9uZW50KSA9IC1FdGlueQ0KLQ0KLS0tIFRoZSB0ZXN0Y2FzZXMgaGVyZSBoYXZlIG9ubHkgZXhhY3RseSByZXByZXNlbnRhYmxlIGRhdGEgb24gdGhlDQotLS0gJ2xlZnQtaGFuZC1zaWRlJzsgcm91bmRpbmcgZnJvbSBzdHJpbmdzIGlzIHRlc3RlZCBpbiAnYmFzZScNCi0tLSB0ZXN0Y2FzZSBncm91cHMuDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICA3DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogOTYNCi1taW5FeHBvbmVudDogLTk1DQotDQotLS0gR2VuZXJhbCB0ZXN0Y2FzZXMNCi0tLSAobW9zdGx5IGRlcml2ZWQgZnJvbSB0aGUgU3RyYXdtYW4gNCBkb2N1bWVudCBhbmQgZXhhbXBsZXMpDQotZGVjczAwMSBhcHBseSAgICNBMjMwMDNEMCAgICAgICAgICAtPiAtNy41MA0KLWRlY3MwMDIgYXBwbHkgICAtNy41MCAgICAgICAgICAgICAgLT4gI0EyMzAwM0QwDQotLS0gZGVyaXZhdGl2ZSBjYW5vbmljYWwgcGxhaW4gc3RyaW5ncw0KLWRlY3MwMDMgYXBwbHkgICAjQTI2MDAzRDAgICAgICAgICAtPiAtNy41MEUrMw0KLWRlY3MwMDQgYXBwbHkgICAtNy41MEUrMyAgICAgICAgICAtPiAjQTI2MDAzRDANCi1kZWNzMDA1IGFwcGx5ICAgI0EyNTAwM0QwICAgICAgICAgLT4gLTc1MA0KLWRlY3MwMDYgYXBwbHkgICAtNzUwICAgICAgICAgICAgICAtPiAjQTI1MDAzRDANCi1kZWNzMDA3IGFwcGx5ICAgI0EyNDAwM0QwICAgICAgICAgLT4gLTc1LjANCi1kZWNzMDA4IGFwcGx5ICAgLTc1LjAgICAgICAgICAgICAgLT4gI0EyNDAwM0QwDQotZGVjczAwOSBhcHBseSAgICNBMjIwMDNEMCAgICAgICAgIC0+IC0wLjc1MA0KLWRlY3MwMTAgYXBwbHkgICAtMC43NTAgICAgICAgICAgICAtPiAjQTIyMDAzRDANCi1kZWNzMDExIGFwcGx5ICAgI0EyMTAwM0QwICAgICAgICAgLT4gLTAuMDc1MA0KLWRlY3MwMTIgYXBwbHkgICAtMC4wNzUwICAgICAgICAgICAtPiAjQTIxMDAzRDANCi1kZWNzMDEzIGFwcGx5ICAgI0ExZjAwM0QwICAgICAgICAgLT4gLTAuMDAwNzUwDQotZGVjczAxNCBhcHBseSAgIC0wLjAwMDc1MCAgICAgICAgIC0+ICNBMWYwMDNEMA0KLWRlY3MwMTUgYXBwbHkgICAjQTFkMDAzRDAgICAgICAgICAtPiAtMC4wMDAwMDc1MA0KLWRlY3MwMTYgYXBwbHkgICAtMC4wMDAwMDc1MCAgICAgICAtPiAjQTFkMDAzRDANCi1kZWNzMDE3IGFwcGx5ICAgI0ExYzAwM0QwICAgICAgICAgLT4gLTcuNTBFLTcNCi1kZWNzMDE4IGFwcGx5ICAgLTcuNTBFLTcgICAgICAgICAgLT4gI0ExYzAwM0QwDQotDQotLS0gTm9ybWFsaXR5DQotZGVjczAyMCBhcHBseSAgIDEyMzQ1NjcgICAgICAgICAgICAtPiAjMjY1NGQyZTcNCi1kZWNzMDIxIGFwcGx5ICAtMTIzNDU2NyAgICAgICAgICAgIC0+ICNhNjU0ZDJlNw0KLWRlY3MwMjIgYXBwbHkgICAxMTExMTExICAgICAgICAgICAgLT4gIzI2NTI0NDkxDQotDQotLS0gTm1heCBhbmQgc2ltaWxhcg0KLWRlY3MwMzEgYXBwbHkgICA5Ljk5OTk5OUUrOTYgICAgICAgICAgICAtPiAjNzdmM2ZjZmYNCi1kZWNzMDMyIGFwcGx5ICAgIzc3ZjNmY2ZmICAgICAgICAgICAgICAgLT4gOS45OTk5OTlFKzk2DQotZGVjczAzMyBhcHBseSAgIDEuMjM0NTY3RSs5NiAgICAgICAgICAgIC0+ICM0N2Y0ZDJlNw0KLWRlY3MwMzQgYXBwbHkgICAjNDdmNGQyZTcgICAgICAgICAgICAgICAtPiAxLjIzNDU2N0UrOTYNCi0tLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQ0KLWRlY3MwMzUgYXBwbHkgICAxLjIzRSs5NiAgICAgICAgICAgICAgICAtPiAjNDdmNGMwMDAgQ2xhbXBlZA0KLWRlY3MwMzYgYXBwbHkgICAjNDdmNGMwMDAgICAgICAgICAgICAgICAtPiAxLjIzMDAwMEUrOTYNCi1kZWNzMDM3IGFwcGx5ICAgMUUrOTYgICAgICAgICAgICAgICAgICAgLT4gIzQ3ZjAwMDAwIENsYW1wZWQNCi1kZWNzMDM4IGFwcGx5ICAgIzQ3ZjAwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMDBFKzk2DQotDQotZGVjczA1MSBhcHBseSAgIDEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwNDljNQ0KLWRlY3MwNTIgYXBwbHkgICAjMjI1MDQ5YzUgICAgICAgICAgICAgICAtPiAxMjM0NQ0KLWRlY3MwNTMgYXBwbHkgICAxMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDA1MzQNCi1kZWNzMDU0IGFwcGx5ICAgIzIyNTAwNTM0ICAgICAgICAgICAgICAgLT4gMTIzNA0KLWRlY3MwNTUgYXBwbHkgICAxMjMgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwYTMNCi1kZWNzMDU2IGFwcGx5ICAgIzIyNTAwMGEzICAgICAgICAgICAgICAgLT4gMTIzDQotZGVjczA1NyBhcHBseSAgIDEyICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwMDAxMg0KLWRlY3MwNTggYXBwbHkgICAjMjI1MDAwMTIgICAgICAgICAgICAgICAtPiAxMg0KLWRlY3MwNTkgYXBwbHkgICAxICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwMDENCi1kZWNzMDYwIGFwcGx5ICAgIzIyNTAwMDAxICAgICAgICAgICAgICAgLT4gMQ0KLWRlY3MwNjEgYXBwbHkgICAxLjIzICAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwYTMNCi1kZWNzMDYyIGFwcGx5ICAgIzIyMzAwMGEzICAgICAgICAgICAgICAgLT4gMS4yMw0KLWRlY3MwNjMgYXBwbHkgICAxMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjMjIzMDQ5YzUNCi1kZWNzMDY0IGFwcGx5ICAgIzIyMzA0OWM1ICAgICAgICAgICAgICAgLT4gMTIzLjQ1DQotDQotLS0gTm1pbiBhbmQgYmVsb3cNCi1kZWNzMDcxIGFwcGx5ICAgMUUtOTUgICAgICAgICAgICAgICAgICAgLT4gIzAwNjAwMDAxDQotZGVjczA3MiBhcHBseSAgICMwMDYwMDAwMSAgICAgICAgICAgICAgIC0+IDFFLTk1DQotZGVjczA3MyBhcHBseSAgIDEuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICMwNDAwMDAwMA0KLWRlY3MwNzQgYXBwbHkgICAjMDQwMDAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMEUtOTUNCi1kZWNzMDc1IGFwcGx5ICAgMS4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzA0MDAwMDAxDQotZGVjczA3NiBhcHBseSAgICMwNDAwMDAwMSAgICAgICAgICAgICAgIC0+IDEuMDAwMDAxRS05NQ0KLQ0KLWRlY3MwNzcgYXBwbHkgICAwLjEwMDAwMEUtOTUgICAgICAgICAgICAtPiAjMDAwMjAwMDAgICAgIFN1Ym5vcm1hbA0KLWRlY3MwN3ggYXBwbHkgICAxLjAwMDAwRS05NiAgICAgICAgICAgICAtPiAxLjAwMDAwRS05NiAgIFN1Ym5vcm1hbA0KLWRlY3MwNzggYXBwbHkgICAjMDAwMjAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwRS05NiAgIFN1Ym5vcm1hbA0KLWRlY3MwNzkgYXBwbHkgICAwLjAwMDAxMEUtOTUgICAgICAgICAgICAtPiAjMDAwMDAwMTAgICAgIFN1Ym5vcm1hbA0KLWRlY3MwODAgYXBwbHkgICAjMDAwMDAwMTAgICAgICAgICAgICAgICAtPiAxLjBFLTEwMCAgICAgIFN1Ym5vcm1hbA0KLWRlY3MwODEgYXBwbHkgICAwLjAwMDAwMUUtOTUgICAgICAgICAgICAtPiAjMDAwMDAwMDEgICAgIFN1Ym5vcm1hbA0KLWRlY3MwODIgYXBwbHkgICAjMDAwMDAwMDEgICAgICAgICAgICAgICAtPiAxRS0xMDEgICAgICAgIFN1Ym5vcm1hbA0KLWRlY3MwODMgYXBwbHkgICAxZS0xMDEgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDEgICAgIFN1Ym5vcm1hbA0KLWRlY3MwODQgYXBwbHkgICAjMDAwMDAwMDEgICAgICAgICAgICAgICAtPiAxRS0xMDEgICAgICAgIFN1Ym5vcm1hbA0KLWRlY3MwOHggYXBwbHkgICAxZS0xMDEgICAgICAgICAgICAgICAgICAtPiAxRS0xMDEgICAgICAgIFN1Ym5vcm1hbA0KLQ0KLS0tIHVuZGVyZmxvd3MgY2Fubm90IGJlIHRlc3RlZDsganVzdCBjaGVjayBlZGdlIGNhc2UNCi1kZWNzMDkwIGFwcGx5ICAgMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAxICBTdWJub3JtYWwNCi0NCi0tLSBzYW1lIGFnYWluLCBuZWdhdGl2ZXMgLS0NCi0NCi0tLSBObWF4IGFuZCBzaW1pbGFyDQotZGVjczEyMiBhcHBseSAgLTkuOTk5OTk5RSs5NiAgICAgICAgICAgIC0+ICNmN2YzZmNmZg0KLWRlY3MxMjMgYXBwbHkgICAjZjdmM2ZjZmYgICAgICAgICAgICAgICAtPiAtOS45OTk5OTlFKzk2DQotZGVjczEyNCBhcHBseSAgLTEuMjM0NTY3RSs5NiAgICAgICAgICAgIC0+ICNjN2Y0ZDJlNw0KLWRlY3MxMjUgYXBwbHkgICAjYzdmNGQyZTcgICAgICAgICAgICAgICAtPiAtMS4yMzQ1NjdFKzk2DQotLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykNCi1kZWNzMTMwIGFwcGx5ICAtMS4yM0UrOTYgICAgICAgICAgICAgICAgLT4gI2M3ZjRjMDAwIENsYW1wZWQNCi1kZWNzMTMxIGFwcGx5ICAgI2M3ZjRjMDAwICAgICAgICAgICAgICAgLT4gLTEuMjMwMDAwRSs5Ng0KLWRlY3MxMzIgYXBwbHkgIC0xRSs5NiAgICAgICAgICAgICAgICAgICAtPiAjYzdmMDAwMDAgQ2xhbXBlZA0KLWRlY3MxMzMgYXBwbHkgICAjYzdmMDAwMDAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDBFKzk2DQotDQotZGVjczE1MSBhcHBseSAgLTEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwNDljNQ0KLWRlY3MxNTIgYXBwbHkgICAjYTI1MDQ5YzUgICAgICAgICAgICAgICAtPiAtMTIzNDUNCi1kZWNzMTUzIGFwcGx5ICAtMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwNTM0DQotZGVjczE1NCBhcHBseSAgICNhMjUwMDUzNCAgICAgICAgICAgICAgIC0+IC0xMjM0DQotZGVjczE1NSBhcHBseSAgLTEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDBhMw0KLWRlY3MxNTYgYXBwbHkgICAjYTI1MDAwYTMgICAgICAgICAgICAgICAtPiAtMTIzDQotZGVjczE1NyBhcHBseSAgLTEyICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDAxMg0KLWRlY3MxNTggYXBwbHkgICAjYTI1MDAwMTIgICAgICAgICAgICAgICAtPiAtMTINCi1kZWNzMTU5IGFwcGx5ICAtMSAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwMDAxDQotZGVjczE2MCBhcHBseSAgICNhMjUwMDAwMSAgICAgICAgICAgICAgIC0+IC0xDQotZGVjczE2MSBhcHBseSAgLTEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDBhMw0KLWRlY3MxNjIgYXBwbHkgICAjYTIzMDAwYTMgICAgICAgICAgICAgICAtPiAtMS4yMw0KLWRlY3MxNjMgYXBwbHkgIC0xMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjYTIzMDQ5YzUNCi1kZWNzMTY0IGFwcGx5ICAgI2EyMzA0OWM1ICAgICAgICAgICAgICAgLT4gLTEyMy40NQ0KLQ0KLS0tIE5taW4gYW5kIGJlbG93DQotZGVjczE3MSBhcHBseSAgLTFFLTk1ICAgICAgICAgICAgICAgICAgIC0+ICM4MDYwMDAwMQ0KLWRlY3MxNzIgYXBwbHkgICAjODA2MDAwMDEgICAgICAgICAgICAgICAtPiAtMUUtOTUNCi1kZWNzMTczIGFwcGx5ICAtMS4wMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzg0MDAwMDAwDQotZGVjczE3NCBhcHBseSAgICM4NDAwMDAwMCAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMEUtOTUNCi1kZWNzMTc1IGFwcGx5ICAtMS4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzg0MDAwMDAxDQotZGVjczE3NiBhcHBseSAgICM4NDAwMDAwMSAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMUUtOTUNCi0NCi1kZWNzMTc3IGFwcGx5ICAtMC4xMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzgwMDIwMDAwICAgICBTdWJub3JtYWwNCi1kZWNzMTc4IGFwcGx5ICAgIzgwMDIwMDAwICAgICAgICAgICAgICAgLT4gLTEuMDAwMDBFLTk2ICBTdWJub3JtYWwNCi1kZWNzMTc5IGFwcGx5ICAtMC4wMDAwMTBFLTk1ICAgICAgICAgICAgLT4gIzgwMDAwMDEwICAgICBTdWJub3JtYWwNCi1kZWNzMTgwIGFwcGx5ICAgIzgwMDAwMDEwICAgICAgICAgICAgICAgLT4gLTEuMEUtMTAwICAgICBTdWJub3JtYWwNCi1kZWNzMTgxIGFwcGx5ICAtMC4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzgwMDAwMDAxICAgICBTdWJub3JtYWwNCi1kZWNzMTgyIGFwcGx5ICAgIzgwMDAwMDAxICAgICAgICAgICAgICAgLT4gLTFFLTEwMSAgICAgICBTdWJub3JtYWwNCi1kZWNzMTgzIGFwcGx5ICAtMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAxICAgICBTdWJub3JtYWwNCi1kZWNzMTg0IGFwcGx5ICAgIzgwMDAwMDAxICAgICAgICAgICAgICAgLT4gLTFFLTEwMSAgICAgICBTdWJub3JtYWwNCi0NCi0tLSB1bmRlcmZsb3cgZWRnZSBjYXNlDQotZGVjczE5MCBhcHBseSAgLTFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgU3Vibm9ybWFsDQotDQotLS0gemVyb3MNCi1kZWNzNDAwIGFwcGx5ICAgMEUtNDAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwICBDbGFtcGVkDQotZGVjczQwMSBhcHBseSAgIDBFLTEwMSAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMA0KLWRlY3M0MDIgYXBwbHkgICAjMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAwRS0xMDENCi1kZWNzNDAzIGFwcGx5ICAgMC4wMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDAwDQotZGVjczQwNCBhcHBseSAgICMwMDAwMDAwMCAgICAgICAgICAgICAgIC0+IDBFLTEwMQ0KLWRlY3M0MDUgYXBwbHkgICAwRS0yICAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDANCi1kZWNzNDA2IGFwcGx5ICAgIzIyMzAwMDAwICAgICAgICAgICAgICAgLT4gMC4wMA0KLWRlY3M0MDcgYXBwbHkgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwMDANCi1kZWNzNDA4IGFwcGx5ICAgIzIyNTAwMDAwICAgICAgICAgICAgICAgLT4gMA0KLWRlY3M0MDkgYXBwbHkgICAwRSszICAgICAgICAgICAgICAgICAgICAtPiAjMjI4MDAwMDANCi1kZWNzNDEwIGFwcGx5ICAgIzIyODAwMDAwICAgICAgICAgICAgICAgLT4gMEUrMw0KLWRlY3M0MTEgYXBwbHkgICAwRSs5MCAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDANCi1kZWNzNDEyIGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTANCi0tLSBjbGFtcGVkIHplcm9zLi4uDQotZGVjczQxMyBhcHBseSAgIDBFKzkxICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMCAgQ2xhbXBlZA0KLWRlY3M0MTQgYXBwbHkgICAjNDNmMDAwMDAgICAgICAgICAgICAgICAtPiAwRSs5MA0KLWRlY3M0MTUgYXBwbHkgICAwRSs5NiAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDAgIENsYW1wZWQNCi1kZWNzNDE2IGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTANCi1kZWNzNDE3IGFwcGx5ICAgMEUrNDAwICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwICBDbGFtcGVkDQotZGVjczQxOCBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwDQotDQotLS0gbmVnYXRpdmUgemVyb3MNCi1kZWNzNDIwIGFwcGx5ICAgLTBFLTQwMCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwICBDbGFtcGVkDQotZGVjczQyMSBhcHBseSAgIC0wRS0xMDEgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMA0KLWRlY3M0MjIgYXBwbHkgICAjODAwMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUtMTAxDQotZGVjczQyMyBhcHBseSAgIC0wLjAwMDAwMEUtOTUgICAgICAgICAgIC0+ICM4MDAwMDAwMA0KLWRlY3M0MjQgYXBwbHkgICAjODAwMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUtMTAxDQotZGVjczQyNSBhcHBseSAgIC0wRS0yICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMA0KLWRlY3M0MjYgYXBwbHkgICAjYTIzMDAwMDAgICAgICAgICAgICAgICAtPiAtMC4wMA0KLWRlY3M0MjcgYXBwbHkgICAtMCAgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwMDANCi1kZWNzNDI4IGFwcGx5ICAgI2EyNTAwMDAwICAgICAgICAgICAgICAgLT4gLTANCi1kZWNzNDI5IGFwcGx5ICAgLTBFKzMgICAgICAgICAgICAgICAgICAgLT4gI2EyODAwMDAwDQotZGVjczQzMCBhcHBseSAgICNhMjgwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSszDQotZGVjczQzMSBhcHBseSAgIC0wRSs5MCAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMA0KLWRlY3M0MzIgYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTANCi0tLSBjbGFtcGVkIHplcm9zLi4uDQotZGVjczQzMyBhcHBseSAgIC0wRSs5MSAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMCAgQ2xhbXBlZA0KLWRlY3M0MzQgYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTANCi1kZWNzNDM1IGFwcGx5ICAgLTBFKzk2ICAgICAgICAgICAgICAgICAgLT4gI2MzZjAwMDAwICBDbGFtcGVkDQotZGVjczQzNiBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MA0KLWRlY3M0MzcgYXBwbHkgICAtMEUrNDAwICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAgIENsYW1wZWQNCi1kZWNzNDM4IGFwcGx5ICAgI2MzZjAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzkwDQotDQotLS0gU3BlY2lhbHMNCi1kZWNzNTAwIGFwcGx5ICAgSW5maW5pdHkgIC0+ICM3ODAwMDAwMA0KLWRlY3M1MDEgYXBwbHkgICAjNzg3ODc4NzggLT4gIzc4MDAwMDAwDQotZGVjczUwMiBhcHBseSAgICM3ODAwMDAwMCAtPiBJbmZpbml0eQ0KLWRlY3M1MDMgYXBwbHkgICAjNzk3OTc5NzkgLT4gIzc4MDAwMDAwDQotZGVjczUwNCBhcHBseSAgICM3OTAwMDAwMCAtPiBJbmZpbml0eQ0KLWRlY3M1MDUgYXBwbHkgICAjN2E3YTdhN2EgLT4gIzc4MDAwMDAwDQotZGVjczUwNiBhcHBseSAgICM3YTAwMDAwMCAtPiBJbmZpbml0eQ0KLWRlY3M1MDcgYXBwbHkgICAjN2I3YjdiN2IgLT4gIzc4MDAwMDAwDQotZGVjczUwOCBhcHBseSAgICM3YjAwMDAwMCAtPiBJbmZpbml0eQ0KLWRlY3M1MDkgYXBwbHkgICAjN2M3YzdjN2MgLT4gIzdjMGM3YzdjDQotDQotZGVjczUxMCBhcHBseSAgIE5hTiAgICAgICAtPiAjN2MwMDAwMDANCi1kZWNzNTExIGFwcGx5ICAgIzdjMDAwMDAwIC0+IE5hTg0KLWRlY3M1MTIgYXBwbHkgICAjN2Q3ZDdkN2QgLT4gIzdjMGQ3ZDdkDQotZGVjczUxMyBhcHBseSAgICM3ZDAwMDAwMCAtPiBOYU4NCi1kZWNzNTE0IGFwcGx5ICAgIzdlN2U3ZTdlIC0+ICM3ZTBlN2M3ZQ0KLWRlY3M1MTUgYXBwbHkgICAjN2UwMDAwMDAgLT4gc05hTg0KLWRlY3M1MTYgYXBwbHkgICAjN2Y3ZjdmN2YgLT4gIzdlMGY3YzdmDQotZGVjczUxNyBhcHBseSAgICM3ZjAwMDAwMCAtPiBzTmFODQotZGVjczUxOCBhcHBseSAgICM3ZmZmZmZmZiAtPiBzTmFOOTk5OTk5DQotZGVjczUxOSBhcHBseSAgICM3ZmZmZmZmZiAtPiAjN2UwM2ZjZmYNCi0NCi1kZWNzNTIwIGFwcGx5ICAgLUluZmluaXR5IC0+ICNmODAwMDAwMA0KLWRlY3M1MjEgYXBwbHkgICAjZjg3ODc4NzggLT4gI2Y4MDAwMDAwDQotZGVjczUyMiBhcHBseSAgICNmODAwMDAwMCAtPiAtSW5maW5pdHkNCi1kZWNzNTIzIGFwcGx5ICAgI2Y5Nzk3OTc5IC0+ICNmODAwMDAwMA0KLWRlY3M1MjQgYXBwbHkgICAjZjkwMDAwMDAgLT4gLUluZmluaXR5DQotZGVjczUyNSBhcHBseSAgICNmYTdhN2E3YSAtPiAjZjgwMDAwMDANCi1kZWNzNTI2IGFwcGx5ICAgI2ZhMDAwMDAwIC0+IC1JbmZpbml0eQ0KLWRlY3M1MjcgYXBwbHkgICAjZmI3YjdiN2IgLT4gI2Y4MDAwMDAwDQotZGVjczUyOCBhcHBseSAgICNmYjAwMDAwMCAtPiAtSW5maW5pdHkNCi0NCi1kZWNzNTI5IGFwcGx5ICAgLU5hTiAgICAgIC0+ICNmYzAwMDAwMA0KLWRlY3M1MzAgYXBwbHkgICAjZmM3YzdjN2MgLT4gI2ZjMGM3YzdjDQotZGVjczUzMSBhcHBseSAgICNmYzAwMDAwMCAtPiAtTmFODQotZGVjczUzMiBhcHBseSAgICNmZDdkN2Q3ZCAtPiAjZmMwZDdkN2QNCi1kZWNzNTMzIGFwcGx5ICAgI2ZkMDAwMDAwIC0+IC1OYU4NCi1kZWNzNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlIC0+ICNmZTBlN2M3ZQ0KLWRlY3M1MzUgYXBwbHkgICAjZmUwMDAwMDAgLT4gLXNOYU4NCi1kZWNzNTM2IGFwcGx5ICAgI2ZmN2Y3ZjdmIC0+ICNmZTBmN2M3Zg0KLWRlY3M1MzcgYXBwbHkgICAjZmYwMDAwMDAgLT4gLXNOYU4NCi1kZWNzNTM4IGFwcGx5ICAgI2ZmZmZmZmZmIC0+IC1zTmFOOTk5OTk5DQotZGVjczUzOSBhcHBseSAgICNmZmZmZmZmZiAtPiAjZmUwM2ZjZmYNCi0NCi0tLSBkaWFnbm9zdGljIE5hTnMNCi1kZWNzNTQwIGFwcGx5ICAgTmFOICAgICAgIC0+ICM3YzAwMDAwMA0KLWRlY3M1NDEgYXBwbHkgICBOYU4wICAgICAgLT4gIzdjMDAwMDAwDQotZGVjczU0MiBhcHBseSAgIE5hTjEgICAgICAtPiAjN2MwMDAwMDENCi1kZWNzNTQzIGFwcGx5ICAgTmFOMTIgICAgIC0+ICM3YzAwMDAxMg0KLWRlY3M1NDQgYXBwbHkgICBOYU43OSAgICAgLT4gIzdjMDAwMDc5DQotZGVjczU0NSBhcHBseSAgIE5hTjEyMzQ1ICAgLT4gIzdjMDA0OWM1DQotZGVjczU0NiBhcHBseSAgIE5hTjEyMzQ1NiAgLT4gIzdjMDI4ZTU2DQotZGVjczU0NyBhcHBseSAgIE5hTjc5OTc5OSAgLT4gIzdjMGY3ZmRmDQotZGVjczU0OCBhcHBseSAgIE5hTjk5OTk5OSAgLT4gIzdjMDNmY2ZmDQotDQotDQotLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UNCi1kZWNzNjAxIGFwcGx5ICAgMUUrOTYgICAgICAgICAgICAgICAgICAgLT4gIzQ3ZjAwMDAwIENsYW1wZWQNCi1kZWNzNjAyIGFwcGx5ICAgIzQ3ZjAwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMDBFKzk2DQotZGVjczYwMyBhcHBseSAgIDFFKzk1ICAgICAgICAgICAgICAgICAgIC0+ICM0M2YyMDAwMCBDbGFtcGVkDQotZGVjczYwNCBhcHBseSAgICM0M2YyMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDBFKzk1DQotZGVjczYwNSBhcHBseSAgIDFFKzk0ICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwNDAwMCBDbGFtcGVkDQotZGVjczYwNiBhcHBseSAgICM0M2YwNDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMEUrOTQNCi1kZWNzNjA3IGFwcGx5ICAgMUUrOTMgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwNDAwIENsYW1wZWQNCi1kZWNzNjA4IGFwcGx5ICAgIzQzZjAwNDAwICAgICAgICAgICAgICAgLT4gMS4wMDBFKzkzDQotZGVjczYwOSBhcHBseSAgIDFFKzkyICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDA4MCBDbGFtcGVkDQotZGVjczYxMCBhcHBseSAgICM0M2YwMDA4MCAgICAgICAgICAgICAgIC0+IDEuMDBFKzkyDQotZGVjczYxMSBhcHBseSAgIDFFKzkxICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAxMCBDbGFtcGVkDQotZGVjczYxMiBhcHBseSAgICM0M2YwMDAxMCAgICAgICAgICAgICAgIC0+IDEuMEUrOTENCi1kZWNzNjEzIGFwcGx5ICAgMUUrOTAgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAxDQotZGVjczYxNCBhcHBseSAgICM0M2YwMDAwMSAgICAgICAgICAgICAgIC0+IDFFKzkwDQotDQotDQotLS0gU2VsZWN0ZWQgRFBEIGNvZGVzDQotZGVjczcwMCBhcHBseSAgICMyMjUwMDAwMCAgICAgICAtPiAwDQotZGVjczcwMSBhcHBseSAgICMyMjUwMDAwOSAgICAgICAtPiA5DQotZGVjczcwMiBhcHBseSAgICMyMjUwMDAxMCAgICAgICAtPiAxMA0KLWRlY3M3MDMgYXBwbHkgICAjMjI1MDAwMTkgICAgICAgLT4gMTkNCi1kZWNzNzA0IGFwcGx5ICAgIzIyNTAwMDIwICAgICAgIC0+IDIwDQotZGVjczcwNSBhcHBseSAgICMyMjUwMDAyOSAgICAgICAtPiAyOQ0KLWRlY3M3MDYgYXBwbHkgICAjMjI1MDAwMzAgICAgICAgLT4gMzANCi1kZWNzNzA3IGFwcGx5ICAgIzIyNTAwMDM5ICAgICAgIC0+IDM5DQotZGVjczcwOCBhcHBseSAgICMyMjUwMDA0MCAgICAgICAtPiA0MA0KLWRlY3M3MDkgYXBwbHkgICAjMjI1MDAwNDkgICAgICAgLT4gNDkNCi1kZWNzNzEwIGFwcGx5ICAgIzIyNTAwMDUwICAgICAgIC0+IDUwDQotZGVjczcxMSBhcHBseSAgICMyMjUwMDA1OSAgICAgICAtPiA1OQ0KLWRlY3M3MTIgYXBwbHkgICAjMjI1MDAwNjAgICAgICAgLT4gNjANCi1kZWNzNzEzIGFwcGx5ICAgIzIyNTAwMDY5ICAgICAgIC0+IDY5DQotZGVjczcxNCBhcHBseSAgICMyMjUwMDA3MCAgICAgICAtPiA3MA0KLWRlY3M3MTUgYXBwbHkgICAjMjI1MDAwNzEgICAgICAgLT4gNzENCi1kZWNzNzE2IGFwcGx5ICAgIzIyNTAwMDcyICAgICAgIC0+IDcyDQotZGVjczcxNyBhcHBseSAgICMyMjUwMDA3MyAgICAgICAtPiA3Mw0KLWRlY3M3MTggYXBwbHkgICAjMjI1MDAwNzQgICAgICAgLT4gNzQNCi1kZWNzNzE5IGFwcGx5ICAgIzIyNTAwMDc1ICAgICAgIC0+IDc1DQotZGVjczcyMCBhcHBseSAgICMyMjUwMDA3NiAgICAgICAtPiA3Ng0KLWRlY3M3MjEgYXBwbHkgICAjMjI1MDAwNzcgICAgICAgLT4gNzcNCi1kZWNzNzIyIGFwcGx5ICAgIzIyNTAwMDc4ICAgICAgIC0+IDc4DQotZGVjczcyMyBhcHBseSAgICMyMjUwMDA3OSAgICAgICAtPiA3OQ0KLQ0KLWRlY3M3MzAgYXBwbHkgICAjMjI1MDAyOWUgICAgICAgLT4gOTk0DQotZGVjczczMSBhcHBseSAgICMyMjUwMDI5ZiAgICAgICAtPiA5OTUNCi1kZWNzNzMyIGFwcGx5ICAgIzIyNTAwMmEwICAgICAgIC0+IDUyMA0KLWRlY3M3MzMgYXBwbHkgICAjMjI1MDAyYTEgICAgICAgLT4gNTIxDQotDQotLS0gRFBEOiBvbmUgb2YgZWFjaCBvZiB0aGUgaHVmZm1hbiBncm91cHMNCi1kZWNzNzQwIGFwcGx5ICAgIzIyNTAwM2Y3ICAgICAgIC0+IDc3Nw0KLWRlY3M3NDEgYXBwbHkgICAjMjI1MDAzZjggICAgICAgLT4gNzc4DQotZGVjczc0MiBhcHBseSAgICMyMjUwMDNlYiAgICAgICAtPiA3ODcNCi1kZWNzNzQzIGFwcGx5ICAgIzIyNTAwMzdkICAgICAgIC0+IDg3Nw0KLWRlY3M3NDQgYXBwbHkgICAjMjI1MDAzOWYgICAgICAgLT4gOTk3DQotZGVjczc0NSBhcHBseSAgICMyMjUwMDNiZiAgICAgICAtPiA5NzkNCi1kZWNzNzQ2IGFwcGx5ICAgIzIyNTAwM2RmICAgICAgIC0+IDc5OQ0KLWRlY3M3NDcgYXBwbHkgICAjMjI1MDAwNmUgICAgICAgLT4gODg4DQotDQotDQotLS0gRFBEIGFsbC1oaWdocyBjYXNlcyAoaW5jbHVkZXMgdGhlIDI0IHJlZHVuZGFudCBjb2RlcykNCi1kZWNzNzUwIGFwcGx5ICAgIzIyNTAwMDZlICAgICAgIC0+IDg4OA0KLWRlY3M3NTEgYXBwbHkgICAjMjI1MDAxNmUgICAgICAgLT4gODg4DQotZGVjczc1MiBhcHBseSAgICMyMjUwMDI2ZSAgICAgICAtPiA4ODgNCi1kZWNzNzUzIGFwcGx5ICAgIzIyNTAwMzZlICAgICAgIC0+IDg4OA0KLWRlY3M3NTQgYXBwbHkgICAjMjI1MDAwNmYgICAgICAgLT4gODg5DQotZGVjczc1NSBhcHBseSAgICMyMjUwMDE2ZiAgICAgICAtPiA4ODkNCi1kZWNzNzU2IGFwcGx5ICAgIzIyNTAwMjZmICAgICAgIC0+IDg4OQ0KLWRlY3M3NTcgYXBwbHkgICAjMjI1MDAzNmYgICAgICAgLT4gODg5DQotDQotZGVjczc2MCBhcHBseSAgICMyMjUwMDA3ZSAgICAgICAtPiA4OTgNCi1kZWNzNzYxIGFwcGx5ICAgIzIyNTAwMTdlICAgICAgIC0+IDg5OA0KLWRlY3M3NjIgYXBwbHkgICAjMjI1MDAyN2UgICAgICAgLT4gODk4DQotZGVjczc2MyBhcHBseSAgICMyMjUwMDM3ZSAgICAgICAtPiA4OTgNCi1kZWNzNzY0IGFwcGx5ICAgIzIyNTAwMDdmICAgICAgIC0+IDg5OQ0KLWRlY3M3NjUgYXBwbHkgICAjMjI1MDAxN2YgICAgICAgLT4gODk5DQotZGVjczc2NiBhcHBseSAgICMyMjUwMDI3ZiAgICAgICAtPiA4OTkNCi1kZWNzNzY3IGFwcGx5ICAgIzIyNTAwMzdmICAgICAgIC0+IDg5OQ0KLQ0KLWRlY3M3NzAgYXBwbHkgICAjMjI1MDAwZWUgICAgICAgLT4gOTg4DQotZGVjczc3MSBhcHBseSAgICMyMjUwMDFlZSAgICAgICAtPiA5ODgNCi1kZWNzNzcyIGFwcGx5ICAgIzIyNTAwMmVlICAgICAgIC0+IDk4OA0KLWRlY3M3NzMgYXBwbHkgICAjMjI1MDAzZWUgICAgICAgLT4gOTg4DQotZGVjczc3NCBhcHBseSAgICMyMjUwMDBlZiAgICAgICAtPiA5ODkNCi1kZWNzNzc1IGFwcGx5ICAgIzIyNTAwMWVmICAgICAgIC0+IDk4OQ0KLWRlY3M3NzYgYXBwbHkgICAjMjI1MDAyZWYgICAgICAgLT4gOTg5DQotZGVjczc3NyBhcHBseSAgICMyMjUwMDNlZiAgICAgICAtPiA5ODkNCi0NCi1kZWNzNzgwIGFwcGx5ICAgIzIyNTAwMGZlICAgICAgIC0+IDk5OA0KLWRlY3M3ODEgYXBwbHkgICAjMjI1MDAxZmUgICAgICAgLT4gOTk4DQotZGVjczc4MiBhcHBseSAgICMyMjUwMDJmZSAgICAgICAtPiA5OTgNCi1kZWNzNzgzIGFwcGx5ICAgIzIyNTAwM2ZlICAgICAgIC0+IDk5OA0KLWRlY3M3ODQgYXBwbHkgICAjMjI1MDAwZmYgICAgICAgLT4gOTk5DQotZGVjczc4NSBhcHBseSAgICMyMjUwMDFmZiAgICAgICAtPiA5OTkNCi1kZWNzNzg2IGFwcGx5ICAgIzIyNTAwMmZmICAgICAgIC0+IDk5OQ0KLWRlY3M3ODcgYXBwbHkgICAjMjI1MDAzZmYgICAgICAgLT4gOTk5DQotDQotLS0gbmFycm93aW5nIGNhc2UNCi1kZWNzNzkwIGFwcGx5IDIuMDBFLTk5IC0+ICMwMDAwMDEwMCBTdWJub3JtYWwNCi1kZWNzNzkxIGFwcGx5ICMwMDAwMDEwMCAtPiAyLjAwRS05OSBTdWJub3JtYWwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRzRW5jb2RlLmRlY1Rlc3QgLS0gZGVjaW1hbCBmb3VyLWJ5dGUgZm9ybWF0IHRlc3RjYXNlcyAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDAsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFtQcmV2aW91c2x5IGNhbGxlZCBkZWNpbWFsMzIuZGVjVGVzdF0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIHRoZSBmb3VyLWJ5dGUgY29uY3JldGUgcmVwcmVzZW50YXRpb24uCistLSBJdHMgY2hhcmFjdGVyaXN0aWNzIGFyZToKKy0tCistLSAgMSBiaXQgIHNpZ24KKy0tICA1IGJpdHMgY29tYmluYXRpb24gZmllbGQKKy0tICA2IGJpdHMgZXhwb25lbnQgY29udGludWF0aW9uCistLSAyMCBiaXRzIGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbgorLS0KKy0tIFRvdGFsIGV4cG9uZW50IGxlbmd0aCA4IGJpdHMKKy0tIFRvdGFsIGNvZWZmaWNpZW50IGxlbmd0aCAyNCBiaXRzICg3IGRpZ2l0cykKKy0tCistLSBFbGltaXQgPSAgMTkxIChtYXhpbXVtIGVuY29kZWQgZXhwb25lbnQpCistLSBFbWF4ICAgPSAgIDk2IChsYXJnZXN0IGV4cG9uZW50IHZhbHVlKQorLS0gRW1pbiAgID0gIC05NSAoc21hbGxlc3QgZXhwb25lbnQgdmFsdWUpCistLSBiaWFzICAgPSAgMTAxIChzdWJ0cmFjdGVkIGZyb20gZW5jb2RlZCBleHBvbmVudCkgPSAtRXRpbnkKKworLS0gVGhlIHRlc3RjYXNlcyBoZXJlIGhhdmUgb25seSBleGFjdGx5IHJlcHJlc2VudGFibGUgZGF0YSBvbiB0aGUKKy0tICdsZWZ0LWhhbmQtc2lkZSc7IHJvdW5kaW5nIGZyb20gc3RyaW5ncyBpcyB0ZXN0ZWQgaW4gJ2Jhc2UnCistLSB0ZXN0Y2FzZSBncm91cHMuCisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDcKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTYKK21pbkV4cG9uZW50OiAtOTUKKworLS0gR2VuZXJhbCB0ZXN0Y2FzZXMKKy0tIChtb3N0bHkgZGVyaXZlZCBmcm9tIHRoZSBTdHJhd21hbiA0IGRvY3VtZW50IGFuZCBleGFtcGxlcykKK2RlY3MwMDEgYXBwbHkgICAjQTIzMDAzRDAgICAgICAgICAgLT4gLTcuNTAKK2RlY3MwMDIgYXBwbHkgICAtNy41MCAgICAgICAgICAgICAgLT4gI0EyMzAwM0QwCistLSBkZXJpdmF0aXZlIGNhbm9uaWNhbCBwbGFpbiBzdHJpbmdzCitkZWNzMDAzIGFwcGx5ICAgI0EyNjAwM0QwICAgICAgICAgLT4gLTcuNTBFKzMKK2RlY3MwMDQgYXBwbHkgICAtNy41MEUrMyAgICAgICAgICAtPiAjQTI2MDAzRDAKK2RlY3MwMDUgYXBwbHkgICAjQTI1MDAzRDAgICAgICAgICAtPiAtNzUwCitkZWNzMDA2IGFwcGx5ICAgLTc1MCAgICAgICAgICAgICAgLT4gI0EyNTAwM0QwCitkZWNzMDA3IGFwcGx5ICAgI0EyNDAwM0QwICAgICAgICAgLT4gLTc1LjAKK2RlY3MwMDggYXBwbHkgICAtNzUuMCAgICAgICAgICAgICAtPiAjQTI0MDAzRDAKK2RlY3MwMDkgYXBwbHkgICAjQTIyMDAzRDAgICAgICAgICAtPiAtMC43NTAKK2RlY3MwMTAgYXBwbHkgICAtMC43NTAgICAgICAgICAgICAtPiAjQTIyMDAzRDAKK2RlY3MwMTEgYXBwbHkgICAjQTIxMDAzRDAgICAgICAgICAtPiAtMC4wNzUwCitkZWNzMDEyIGFwcGx5ICAgLTAuMDc1MCAgICAgICAgICAgLT4gI0EyMTAwM0QwCitkZWNzMDEzIGFwcGx5ICAgI0ExZjAwM0QwICAgICAgICAgLT4gLTAuMDAwNzUwCitkZWNzMDE0IGFwcGx5ICAgLTAuMDAwNzUwICAgICAgICAgLT4gI0ExZjAwM0QwCitkZWNzMDE1IGFwcGx5ICAgI0ExZDAwM0QwICAgICAgICAgLT4gLTAuMDAwMDA3NTAKK2RlY3MwMTYgYXBwbHkgICAtMC4wMDAwMDc1MCAgICAgICAtPiAjQTFkMDAzRDAKK2RlY3MwMTcgYXBwbHkgICAjQTFjMDAzRDAgICAgICAgICAtPiAtNy41MEUtNworZGVjczAxOCBhcHBseSAgIC03LjUwRS03ICAgICAgICAgIC0+ICNBMWMwMDNEMAorCistLSBOb3JtYWxpdHkKK2RlY3MwMjAgYXBwbHkgICAxMjM0NTY3ICAgICAgICAgICAgLT4gIzI2NTRkMmU3CitkZWNzMDIxIGFwcGx5ICAtMTIzNDU2NyAgICAgICAgICAgIC0+ICNhNjU0ZDJlNworZGVjczAyMiBhcHBseSAgIDExMTExMTEgICAgICAgICAgICAtPiAjMjY1MjQ0OTEKKworLS0gTm1heCBhbmQgc2ltaWxhcgorZGVjczAzMSBhcHBseSAgIDkuOTk5OTk5RSs5NiAgICAgICAgICAgIC0+ICM3N2YzZmNmZgorZGVjczAzMiBhcHBseSAgICM3N2YzZmNmZiAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5RSs5NgorZGVjczAzMyBhcHBseSAgIDEuMjM0NTY3RSs5NiAgICAgICAgICAgIC0+ICM0N2Y0ZDJlNworZGVjczAzNCBhcHBseSAgICM0N2Y0ZDJlNyAgICAgICAgICAgICAgIC0+IDEuMjM0NTY3RSs5NgorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2RlY3MwMzUgYXBwbHkgICAxLjIzRSs5NiAgICAgICAgICAgICAgICAtPiAjNDdmNGMwMDAgQ2xhbXBlZAorZGVjczAzNiBhcHBseSAgICM0N2Y0YzAwMCAgICAgICAgICAgICAgIC0+IDEuMjMwMDAwRSs5NgorZGVjczAzNyBhcHBseSAgIDFFKzk2ICAgICAgICAgICAgICAgICAgIC0+ICM0N2YwMDAwMCBDbGFtcGVkCitkZWNzMDM4IGFwcGx5ICAgIzQ3ZjAwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMDBFKzk2CisKK2RlY3MwNTEgYXBwbHkgICAxMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDQ5YzUKK2RlY3MwNTIgYXBwbHkgICAjMjI1MDQ5YzUgICAgICAgICAgICAgICAtPiAxMjM0NQorZGVjczA1MyBhcHBseSAgIDEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwMDUzNAorZGVjczA1NCBhcHBseSAgICMyMjUwMDUzNCAgICAgICAgICAgICAgIC0+IDEyMzQKK2RlY3MwNTUgYXBwbHkgICAxMjMgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwYTMKK2RlY3MwNTYgYXBwbHkgICAjMjI1MDAwYTMgICAgICAgICAgICAgICAtPiAxMjMKK2RlY3MwNTcgYXBwbHkgICAxMiAgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwMTIKK2RlY3MwNTggYXBwbHkgICAjMjI1MDAwMTIgICAgICAgICAgICAgICAtPiAxMgorZGVjczA1OSBhcHBseSAgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwMDAwMQorZGVjczA2MCBhcHBseSAgICMyMjUwMDAwMSAgICAgICAgICAgICAgIC0+IDEKK2RlY3MwNjEgYXBwbHkgICAxLjIzICAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwYTMKK2RlY3MwNjIgYXBwbHkgICAjMjIzMDAwYTMgICAgICAgICAgICAgICAtPiAxLjIzCitkZWNzMDYzIGFwcGx5ICAgMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gIzIyMzA0OWM1CitkZWNzMDY0IGFwcGx5ICAgIzIyMzA0OWM1ICAgICAgICAgICAgICAgLT4gMTIzLjQ1CisKKy0tIE5taW4gYW5kIGJlbG93CitkZWNzMDcxIGFwcGx5ICAgMUUtOTUgICAgICAgICAgICAgICAgICAgLT4gIzAwNjAwMDAxCitkZWNzMDcyIGFwcGx5ICAgIzAwNjAwMDAxICAgICAgICAgICAgICAgLT4gMUUtOTUKK2RlY3MwNzMgYXBwbHkgICAxLjAwMDAwMEUtOTUgICAgICAgICAgICAtPiAjMDQwMDAwMDAKK2RlY3MwNzQgYXBwbHkgICAjMDQwMDAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMEUtOTUKK2RlY3MwNzUgYXBwbHkgICAxLjAwMDAwMUUtOTUgICAgICAgICAgICAtPiAjMDQwMDAwMDEKK2RlY3MwNzYgYXBwbHkgICAjMDQwMDAwMDEgICAgICAgICAgICAgICAtPiAxLjAwMDAwMUUtOTUKKworZGVjczA3NyBhcHBseSAgIDAuMTAwMDAwRS05NSAgICAgICAgICAgIC0+ICMwMDAyMDAwMCAgICAgU3Vibm9ybWFsCitkZWNzMDd4IGFwcGx5ICAgMS4wMDAwMEUtOTYgICAgICAgICAgICAgLT4gMS4wMDAwMEUtOTYgICBTdWJub3JtYWwKK2RlY3MwNzggYXBwbHkgICAjMDAwMjAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwRS05NiAgIFN1Ym5vcm1hbAorZGVjczA3OSBhcHBseSAgIDAuMDAwMDEwRS05NSAgICAgICAgICAgIC0+ICMwMDAwMDAxMCAgICAgU3Vibm9ybWFsCitkZWNzMDgwIGFwcGx5ICAgIzAwMDAwMDEwICAgICAgICAgICAgICAgLT4gMS4wRS0xMDAgICAgICBTdWJub3JtYWwKK2RlY3MwODEgYXBwbHkgICAwLjAwMDAwMUUtOTUgICAgICAgICAgICAtPiAjMDAwMDAwMDEgICAgIFN1Ym5vcm1hbAorZGVjczA4MiBhcHBseSAgICMwMDAwMDAwMSAgICAgICAgICAgICAgIC0+IDFFLTEwMSAgICAgICAgU3Vibm9ybWFsCitkZWNzMDgzIGFwcGx5ICAgMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAxICAgICBTdWJub3JtYWwKK2RlY3MwODQgYXBwbHkgICAjMDAwMDAwMDEgICAgICAgICAgICAgICAtPiAxRS0xMDEgICAgICAgIFN1Ym5vcm1hbAorZGVjczA4eCBhcHBseSAgIDFlLTEwMSAgICAgICAgICAgICAgICAgIC0+IDFFLTEwMSAgICAgICAgU3Vibm9ybWFsCisKKy0tIHVuZGVyZmxvd3MgY2Fubm90IGJlIHRlc3RlZDsganVzdCBjaGVjayBlZGdlIGNhc2UKK2RlY3MwOTAgYXBwbHkgICAxZS0xMDEgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDEgIFN1Ym5vcm1hbAorCistLSBzYW1lIGFnYWluLCBuZWdhdGl2ZXMgLS0KKworLS0gTm1heCBhbmQgc2ltaWxhcgorZGVjczEyMiBhcHBseSAgLTkuOTk5OTk5RSs5NiAgICAgICAgICAgIC0+ICNmN2YzZmNmZgorZGVjczEyMyBhcHBseSAgICNmN2YzZmNmZiAgICAgICAgICAgICAgIC0+IC05Ljk5OTk5OUUrOTYKK2RlY3MxMjQgYXBwbHkgIC0xLjIzNDU2N0UrOTYgICAgICAgICAgICAtPiAjYzdmNGQyZTcKK2RlY3MxMjUgYXBwbHkgICAjYzdmNGQyZTcgICAgICAgICAgICAgICAtPiAtMS4yMzQ1NjdFKzk2CistLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQorZGVjczEzMCBhcHBseSAgLTEuMjNFKzk2ICAgICAgICAgICAgICAgIC0+ICNjN2Y0YzAwMCBDbGFtcGVkCitkZWNzMTMxIGFwcGx5ICAgI2M3ZjRjMDAwICAgICAgICAgICAgICAgLT4gLTEuMjMwMDAwRSs5NgorZGVjczEzMiBhcHBseSAgLTFFKzk2ICAgICAgICAgICAgICAgICAgIC0+ICNjN2YwMDAwMCBDbGFtcGVkCitkZWNzMTMzIGFwcGx5ICAgI2M3ZjAwMDAwICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwRSs5NgorCitkZWNzMTUxIGFwcGx5ICAtMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gI2EyNTA0OWM1CitkZWNzMTUyIGFwcGx5ICAgI2EyNTA0OWM1ICAgICAgICAgICAgICAgLT4gLTEyMzQ1CitkZWNzMTUzIGFwcGx5ICAtMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwNTM0CitkZWNzMTU0IGFwcGx5ICAgI2EyNTAwNTM0ICAgICAgICAgICAgICAgLT4gLTEyMzQKK2RlY3MxNTUgYXBwbHkgIC0xMjMgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwYTMKK2RlY3MxNTYgYXBwbHkgICAjYTI1MDAwYTMgICAgICAgICAgICAgICAtPiAtMTIzCitkZWNzMTU3IGFwcGx5ICAtMTIgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwMDEyCitkZWNzMTU4IGFwcGx5ICAgI2EyNTAwMDEyICAgICAgICAgICAgICAgLT4gLTEyCitkZWNzMTU5IGFwcGx5ICAtMSAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwMDAxCitkZWNzMTYwIGFwcGx5ICAgI2EyNTAwMDAxICAgICAgICAgICAgICAgLT4gLTEKK2RlY3MxNjEgYXBwbHkgIC0xLjIzICAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwYTMKK2RlY3MxNjIgYXBwbHkgICAjYTIzMDAwYTMgICAgICAgICAgICAgICAtPiAtMS4yMworZGVjczE2MyBhcHBseSAgLTEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICNhMjMwNDljNQorZGVjczE2NCBhcHBseSAgICNhMjMwNDljNSAgICAgICAgICAgICAgIC0+IC0xMjMuNDUKKworLS0gTm1pbiBhbmQgYmVsb3cKK2RlY3MxNzEgYXBwbHkgIC0xRS05NSAgICAgICAgICAgICAgICAgICAtPiAjODA2MDAwMDEKK2RlY3MxNzIgYXBwbHkgICAjODA2MDAwMDEgICAgICAgICAgICAgICAtPiAtMUUtOTUKK2RlY3MxNzMgYXBwbHkgIC0xLjAwMDAwMEUtOTUgICAgICAgICAgICAtPiAjODQwMDAwMDAKK2RlY3MxNzQgYXBwbHkgICAjODQwMDAwMDAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDBFLTk1CitkZWNzMTc1IGFwcGx5ICAtMS4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzg0MDAwMDAxCitkZWNzMTc2IGFwcGx5ICAgIzg0MDAwMDAxICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAxRS05NQorCitkZWNzMTc3IGFwcGx5ICAtMC4xMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzgwMDIwMDAwICAgICBTdWJub3JtYWwKK2RlY3MxNzggYXBwbHkgICAjODAwMjAwMDAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMEUtOTYgIFN1Ym5vcm1hbAorZGVjczE3OSBhcHBseSAgLTAuMDAwMDEwRS05NSAgICAgICAgICAgIC0+ICM4MDAwMDAxMCAgICAgU3Vibm9ybWFsCitkZWNzMTgwIGFwcGx5ICAgIzgwMDAwMDEwICAgICAgICAgICAgICAgLT4gLTEuMEUtMTAwICAgICBTdWJub3JtYWwKK2RlY3MxODEgYXBwbHkgIC0wLjAwMDAwMUUtOTUgICAgICAgICAgICAtPiAjODAwMDAwMDEgICAgIFN1Ym5vcm1hbAorZGVjczE4MiBhcHBseSAgICM4MDAwMDAwMSAgICAgICAgICAgICAgIC0+IC0xRS0xMDEgICAgICAgU3Vibm9ybWFsCitkZWNzMTgzIGFwcGx5ICAtMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAxICAgICBTdWJub3JtYWwKK2RlY3MxODQgYXBwbHkgICAjODAwMDAwMDEgICAgICAgICAgICAgICAtPiAtMUUtMTAxICAgICAgIFN1Ym5vcm1hbAorCistLSB1bmRlcmZsb3cgZWRnZSBjYXNlCitkZWNzMTkwIGFwcGx5ICAtMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAxICBTdWJub3JtYWwKKworLS0gemVyb3MKK2RlY3M0MDAgYXBwbHkgICAwRS00MDAgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAgIENsYW1wZWQKK2RlY3M0MDEgYXBwbHkgICAwRS0xMDEgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAKK2RlY3M0MDIgYXBwbHkgICAjMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAwRS0xMDEKK2RlY3M0MDMgYXBwbHkgICAwLjAwMDAwMEUtOTUgICAgICAgICAgICAtPiAjMDAwMDAwMDAKK2RlY3M0MDQgYXBwbHkgICAjMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAwRS0xMDEKK2RlY3M0MDUgYXBwbHkgICAwRS0yICAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAKK2RlY3M0MDYgYXBwbHkgICAjMjIzMDAwMDAgICAgICAgICAgICAgICAtPiAwLjAwCitkZWNzNDA3IGFwcGx5ICAgMCAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMDAwCitkZWNzNDA4IGFwcGx5ICAgIzIyNTAwMDAwICAgICAgICAgICAgICAgLT4gMAorZGVjczQwOSBhcHBseSAgIDBFKzMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjgwMDAwMAorZGVjczQxMCBhcHBseSAgICMyMjgwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzMKK2RlY3M0MTEgYXBwbHkgICAwRSs5MCAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDAKK2RlY3M0MTIgYXBwbHkgICAjNDNmMDAwMDAgICAgICAgICAgICAgICAtPiAwRSs5MAorLS0gY2xhbXBlZCB6ZXJvcy4uLgorZGVjczQxMyBhcHBseSAgIDBFKzkxICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMCAgQ2xhbXBlZAorZGVjczQxNCBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwCitkZWNzNDE1IGFwcGx5ICAgMEUrOTYgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwICBDbGFtcGVkCitkZWNzNDE2IGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTAKK2RlY3M0MTcgYXBwbHkgICAwRSs0MDAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDAgIENsYW1wZWQKK2RlY3M0MTggYXBwbHkgICAjNDNmMDAwMDAgICAgICAgICAgICAgICAtPiAwRSs5MAorCistLSBuZWdhdGl2ZSB6ZXJvcworZGVjczQyMCBhcHBseSAgIC0wRS00MDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMCAgQ2xhbXBlZAorZGVjczQyMSBhcHBseSAgIC0wRS0xMDEgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMAorZGVjczQyMiBhcHBseSAgICM4MDAwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRS0xMDEKK2RlY3M0MjMgYXBwbHkgICAtMC4wMDAwMDBFLTk1ICAgICAgICAgICAtPiAjODAwMDAwMDAKK2RlY3M0MjQgYXBwbHkgICAjODAwMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUtMTAxCitkZWNzNDI1IGFwcGx5ICAgLTBFLTIgICAgICAgICAgICAgICAgICAgLT4gI2EyMzAwMDAwCitkZWNzNDI2IGFwcGx5ICAgI2EyMzAwMDAwICAgICAgICAgICAgICAgLT4gLTAuMDAKK2RlY3M0MjcgYXBwbHkgICAtMCAgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwMDAKK2RlY3M0MjggYXBwbHkgICAjYTI1MDAwMDAgICAgICAgICAgICAgICAtPiAtMAorZGVjczQyOSBhcHBseSAgIC0wRSszICAgICAgICAgICAgICAgICAgIC0+ICNhMjgwMDAwMAorZGVjczQzMCBhcHBseSAgICNhMjgwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSszCitkZWNzNDMxIGFwcGx5ICAgLTBFKzkwICAgICAgICAgICAgICAgICAgLT4gI2MzZjAwMDAwCitkZWNzNDMyIGFwcGx5ICAgI2MzZjAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzkwCistLSBjbGFtcGVkIHplcm9zLi4uCitkZWNzNDMzIGFwcGx5ICAgLTBFKzkxICAgICAgICAgICAgICAgICAgLT4gI2MzZjAwMDAwICBDbGFtcGVkCitkZWNzNDM0IGFwcGx5ICAgI2MzZjAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzkwCitkZWNzNDM1IGFwcGx5ICAgLTBFKzk2ICAgICAgICAgICAgICAgICAgLT4gI2MzZjAwMDAwICBDbGFtcGVkCitkZWNzNDM2IGFwcGx5ICAgI2MzZjAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzkwCitkZWNzNDM3IGFwcGx5ICAgLTBFKzQwMCAgICAgICAgICAgICAgICAgLT4gI2MzZjAwMDAwICBDbGFtcGVkCitkZWNzNDM4IGFwcGx5ICAgI2MzZjAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzkwCisKKy0tIFNwZWNpYWxzCitkZWNzNTAwIGFwcGx5ICAgSW5maW5pdHkgIC0+ICM3ODAwMDAwMAorZGVjczUwMSBhcHBseSAgICM3ODc4Nzg3OCAtPiAjNzgwMDAwMDAKK2RlY3M1MDIgYXBwbHkgICAjNzgwMDAwMDAgLT4gSW5maW5pdHkKK2RlY3M1MDMgYXBwbHkgICAjNzk3OTc5NzkgLT4gIzc4MDAwMDAwCitkZWNzNTA0IGFwcGx5ICAgIzc5MDAwMDAwIC0+IEluZmluaXR5CitkZWNzNTA1IGFwcGx5ICAgIzdhN2E3YTdhIC0+ICM3ODAwMDAwMAorZGVjczUwNiBhcHBseSAgICM3YTAwMDAwMCAtPiBJbmZpbml0eQorZGVjczUwNyBhcHBseSAgICM3YjdiN2I3YiAtPiAjNzgwMDAwMDAKK2RlY3M1MDggYXBwbHkgICAjN2IwMDAwMDAgLT4gSW5maW5pdHkKK2RlY3M1MDkgYXBwbHkgICAjN2M3YzdjN2MgLT4gIzdjMGM3YzdjCisKK2RlY3M1MTAgYXBwbHkgICBOYU4gICAgICAgLT4gIzdjMDAwMDAwCitkZWNzNTExIGFwcGx5ICAgIzdjMDAwMDAwIC0+IE5hTgorZGVjczUxMiBhcHBseSAgICM3ZDdkN2Q3ZCAtPiAjN2MwZDdkN2QKK2RlY3M1MTMgYXBwbHkgICAjN2QwMDAwMDAgLT4gTmFOCitkZWNzNTE0IGFwcGx5ICAgIzdlN2U3ZTdlIC0+ICM3ZTBlN2M3ZQorZGVjczUxNSBhcHBseSAgICM3ZTAwMDAwMCAtPiBzTmFOCitkZWNzNTE2IGFwcGx5ICAgIzdmN2Y3ZjdmIC0+ICM3ZTBmN2M3ZgorZGVjczUxNyBhcHBseSAgICM3ZjAwMDAwMCAtPiBzTmFOCitkZWNzNTE4IGFwcGx5ICAgIzdmZmZmZmZmIC0+IHNOYU45OTk5OTkKK2RlY3M1MTkgYXBwbHkgICAjN2ZmZmZmZmYgLT4gIzdlMDNmY2ZmCisKK2RlY3M1MjAgYXBwbHkgICAtSW5maW5pdHkgLT4gI2Y4MDAwMDAwCitkZWNzNTIxIGFwcGx5ICAgI2Y4Nzg3ODc4IC0+ICNmODAwMDAwMAorZGVjczUyMiBhcHBseSAgICNmODAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY3M1MjMgYXBwbHkgICAjZjk3OTc5NzkgLT4gI2Y4MDAwMDAwCitkZWNzNTI0IGFwcGx5ICAgI2Y5MDAwMDAwIC0+IC1JbmZpbml0eQorZGVjczUyNSBhcHBseSAgICNmYTdhN2E3YSAtPiAjZjgwMDAwMDAKK2RlY3M1MjYgYXBwbHkgICAjZmEwMDAwMDAgLT4gLUluZmluaXR5CitkZWNzNTI3IGFwcGx5ICAgI2ZiN2I3YjdiIC0+ICNmODAwMDAwMAorZGVjczUyOCBhcHBseSAgICNmYjAwMDAwMCAtPiAtSW5maW5pdHkKKworZGVjczUyOSBhcHBseSAgIC1OYU4gICAgICAtPiAjZmMwMDAwMDAKK2RlY3M1MzAgYXBwbHkgICAjZmM3YzdjN2MgLT4gI2ZjMGM3YzdjCitkZWNzNTMxIGFwcGx5ICAgI2ZjMDAwMDAwIC0+IC1OYU4KK2RlY3M1MzIgYXBwbHkgICAjZmQ3ZDdkN2QgLT4gI2ZjMGQ3ZDdkCitkZWNzNTMzIGFwcGx5ICAgI2ZkMDAwMDAwIC0+IC1OYU4KK2RlY3M1MzQgYXBwbHkgICAjZmU3ZTdlN2UgLT4gI2ZlMGU3YzdlCitkZWNzNTM1IGFwcGx5ICAgI2ZlMDAwMDAwIC0+IC1zTmFOCitkZWNzNTM2IGFwcGx5ICAgI2ZmN2Y3ZjdmIC0+ICNmZTBmN2M3ZgorZGVjczUzNyBhcHBseSAgICNmZjAwMDAwMCAtPiAtc05hTgorZGVjczUzOCBhcHBseSAgICNmZmZmZmZmZiAtPiAtc05hTjk5OTk5OQorZGVjczUzOSBhcHBseSAgICNmZmZmZmZmZiAtPiAjZmUwM2ZjZmYKKworLS0gZGlhZ25vc3RpYyBOYU5zCitkZWNzNTQwIGFwcGx5ICAgTmFOICAgICAgIC0+ICM3YzAwMDAwMAorZGVjczU0MSBhcHBseSAgIE5hTjAgICAgICAtPiAjN2MwMDAwMDAKK2RlY3M1NDIgYXBwbHkgICBOYU4xICAgICAgLT4gIzdjMDAwMDAxCitkZWNzNTQzIGFwcGx5ICAgTmFOMTIgICAgIC0+ICM3YzAwMDAxMgorZGVjczU0NCBhcHBseSAgIE5hTjc5ICAgICAtPiAjN2MwMDAwNzkKK2RlY3M1NDUgYXBwbHkgICBOYU4xMjM0NSAgIC0+ICM3YzAwNDljNQorZGVjczU0NiBhcHBseSAgIE5hTjEyMzQ1NiAgLT4gIzdjMDI4ZTU2CitkZWNzNTQ3IGFwcGx5ICAgTmFONzk5Nzk5ICAtPiAjN2MwZjdmZGYKK2RlY3M1NDggYXBwbHkgICBOYU45OTk5OTkgIC0+ICM3YzAzZmNmZgorCisKKy0tIGZvbGQtZG93biBmdWxsIHNlcXVlbmNlCitkZWNzNjAxIGFwcGx5ICAgMUUrOTYgICAgICAgICAgICAgICAgICAgLT4gIzQ3ZjAwMDAwIENsYW1wZWQKK2RlY3M2MDIgYXBwbHkgICAjNDdmMDAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMEUrOTYKK2RlY3M2MDMgYXBwbHkgICAxRSs5NSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMjAwMDAgQ2xhbXBlZAorZGVjczYwNCBhcHBseSAgICM0M2YyMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDBFKzk1CitkZWNzNjA1IGFwcGx5ICAgMUUrOTQgICAgICAgICAgICAgICAgICAgLT4gIzQzZjA0MDAwIENsYW1wZWQKK2RlY3M2MDYgYXBwbHkgICAjNDNmMDQwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDBFKzk0CitkZWNzNjA3IGFwcGx5ICAgMUUrOTMgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwNDAwIENsYW1wZWQKK2RlY3M2MDggYXBwbHkgICAjNDNmMDA0MDAgICAgICAgICAgICAgICAtPiAxLjAwMEUrOTMKK2RlY3M2MDkgYXBwbHkgICAxRSs5MiAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwODAgQ2xhbXBlZAorZGVjczYxMCBhcHBseSAgICM0M2YwMDA4MCAgICAgICAgICAgICAgIC0+IDEuMDBFKzkyCitkZWNzNjExIGFwcGx5ICAgMUUrOTEgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDEwIENsYW1wZWQKK2RlY3M2MTIgYXBwbHkgICAjNDNmMDAwMTAgICAgICAgICAgICAgICAtPiAxLjBFKzkxCitkZWNzNjEzIGFwcGx5ICAgMUUrOTAgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAxCitkZWNzNjE0IGFwcGx5ICAgIzQzZjAwMDAxICAgICAgICAgICAgICAgLT4gMUUrOTAKKworCistLSBTZWxlY3RlZCBEUEQgY29kZXMKK2RlY3M3MDAgYXBwbHkgICAjMjI1MDAwMDAgICAgICAgLT4gMAorZGVjczcwMSBhcHBseSAgICMyMjUwMDAwOSAgICAgICAtPiA5CitkZWNzNzAyIGFwcGx5ICAgIzIyNTAwMDEwICAgICAgIC0+IDEwCitkZWNzNzAzIGFwcGx5ICAgIzIyNTAwMDE5ICAgICAgIC0+IDE5CitkZWNzNzA0IGFwcGx5ICAgIzIyNTAwMDIwICAgICAgIC0+IDIwCitkZWNzNzA1IGFwcGx5ICAgIzIyNTAwMDI5ICAgICAgIC0+IDI5CitkZWNzNzA2IGFwcGx5ICAgIzIyNTAwMDMwICAgICAgIC0+IDMwCitkZWNzNzA3IGFwcGx5ICAgIzIyNTAwMDM5ICAgICAgIC0+IDM5CitkZWNzNzA4IGFwcGx5ICAgIzIyNTAwMDQwICAgICAgIC0+IDQwCitkZWNzNzA5IGFwcGx5ICAgIzIyNTAwMDQ5ICAgICAgIC0+IDQ5CitkZWNzNzEwIGFwcGx5ICAgIzIyNTAwMDUwICAgICAgIC0+IDUwCitkZWNzNzExIGFwcGx5ICAgIzIyNTAwMDU5ICAgICAgIC0+IDU5CitkZWNzNzEyIGFwcGx5ICAgIzIyNTAwMDYwICAgICAgIC0+IDYwCitkZWNzNzEzIGFwcGx5ICAgIzIyNTAwMDY5ICAgICAgIC0+IDY5CitkZWNzNzE0IGFwcGx5ICAgIzIyNTAwMDcwICAgICAgIC0+IDcwCitkZWNzNzE1IGFwcGx5ICAgIzIyNTAwMDcxICAgICAgIC0+IDcxCitkZWNzNzE2IGFwcGx5ICAgIzIyNTAwMDcyICAgICAgIC0+IDcyCitkZWNzNzE3IGFwcGx5ICAgIzIyNTAwMDczICAgICAgIC0+IDczCitkZWNzNzE4IGFwcGx5ICAgIzIyNTAwMDc0ICAgICAgIC0+IDc0CitkZWNzNzE5IGFwcGx5ICAgIzIyNTAwMDc1ICAgICAgIC0+IDc1CitkZWNzNzIwIGFwcGx5ICAgIzIyNTAwMDc2ICAgICAgIC0+IDc2CitkZWNzNzIxIGFwcGx5ICAgIzIyNTAwMDc3ICAgICAgIC0+IDc3CitkZWNzNzIyIGFwcGx5ICAgIzIyNTAwMDc4ICAgICAgIC0+IDc4CitkZWNzNzIzIGFwcGx5ICAgIzIyNTAwMDc5ICAgICAgIC0+IDc5CisKK2RlY3M3MzAgYXBwbHkgICAjMjI1MDAyOWUgICAgICAgLT4gOTk0CitkZWNzNzMxIGFwcGx5ICAgIzIyNTAwMjlmICAgICAgIC0+IDk5NQorZGVjczczMiBhcHBseSAgICMyMjUwMDJhMCAgICAgICAtPiA1MjAKK2RlY3M3MzMgYXBwbHkgICAjMjI1MDAyYTEgICAgICAgLT4gNTIxCisKKy0tIERQRDogb25lIG9mIGVhY2ggb2YgdGhlIGh1ZmZtYW4gZ3JvdXBzCitkZWNzNzQwIGFwcGx5ICAgIzIyNTAwM2Y3ICAgICAgIC0+IDc3NworZGVjczc0MSBhcHBseSAgICMyMjUwMDNmOCAgICAgICAtPiA3NzgKK2RlY3M3NDIgYXBwbHkgICAjMjI1MDAzZWIgICAgICAgLT4gNzg3CitkZWNzNzQzIGFwcGx5ICAgIzIyNTAwMzdkICAgICAgIC0+IDg3NworZGVjczc0NCBhcHBseSAgICMyMjUwMDM5ZiAgICAgICAtPiA5OTcKK2RlY3M3NDUgYXBwbHkgICAjMjI1MDAzYmYgICAgICAgLT4gOTc5CitkZWNzNzQ2IGFwcGx5ICAgIzIyNTAwM2RmICAgICAgIC0+IDc5OQorZGVjczc0NyBhcHBseSAgICMyMjUwMDA2ZSAgICAgICAtPiA4ODgKKworCistLSBEUEQgYWxsLWhpZ2hzIGNhc2VzIChpbmNsdWRlcyB0aGUgMjQgcmVkdW5kYW50IGNvZGVzKQorZGVjczc1MCBhcHBseSAgICMyMjUwMDA2ZSAgICAgICAtPiA4ODgKK2RlY3M3NTEgYXBwbHkgICAjMjI1MDAxNmUgICAgICAgLT4gODg4CitkZWNzNzUyIGFwcGx5ICAgIzIyNTAwMjZlICAgICAgIC0+IDg4OAorZGVjczc1MyBhcHBseSAgICMyMjUwMDM2ZSAgICAgICAtPiA4ODgKK2RlY3M3NTQgYXBwbHkgICAjMjI1MDAwNmYgICAgICAgLT4gODg5CitkZWNzNzU1IGFwcGx5ICAgIzIyNTAwMTZmICAgICAgIC0+IDg4OQorZGVjczc1NiBhcHBseSAgICMyMjUwMDI2ZiAgICAgICAtPiA4ODkKK2RlY3M3NTcgYXBwbHkgICAjMjI1MDAzNmYgICAgICAgLT4gODg5CisKK2RlY3M3NjAgYXBwbHkgICAjMjI1MDAwN2UgICAgICAgLT4gODk4CitkZWNzNzYxIGFwcGx5ICAgIzIyNTAwMTdlICAgICAgIC0+IDg5OAorZGVjczc2MiBhcHBseSAgICMyMjUwMDI3ZSAgICAgICAtPiA4OTgKK2RlY3M3NjMgYXBwbHkgICAjMjI1MDAzN2UgICAgICAgLT4gODk4CitkZWNzNzY0IGFwcGx5ICAgIzIyNTAwMDdmICAgICAgIC0+IDg5OQorZGVjczc2NSBhcHBseSAgICMyMjUwMDE3ZiAgICAgICAtPiA4OTkKK2RlY3M3NjYgYXBwbHkgICAjMjI1MDAyN2YgICAgICAgLT4gODk5CitkZWNzNzY3IGFwcGx5ICAgIzIyNTAwMzdmICAgICAgIC0+IDg5OQorCitkZWNzNzcwIGFwcGx5ICAgIzIyNTAwMGVlICAgICAgIC0+IDk4OAorZGVjczc3MSBhcHBseSAgICMyMjUwMDFlZSAgICAgICAtPiA5ODgKK2RlY3M3NzIgYXBwbHkgICAjMjI1MDAyZWUgICAgICAgLT4gOTg4CitkZWNzNzczIGFwcGx5ICAgIzIyNTAwM2VlICAgICAgIC0+IDk4OAorZGVjczc3NCBhcHBseSAgICMyMjUwMDBlZiAgICAgICAtPiA5ODkKK2RlY3M3NzUgYXBwbHkgICAjMjI1MDAxZWYgICAgICAgLT4gOTg5CitkZWNzNzc2IGFwcGx5ICAgIzIyNTAwMmVmICAgICAgIC0+IDk4OQorZGVjczc3NyBhcHBseSAgICMyMjUwMDNlZiAgICAgICAtPiA5ODkKKworZGVjczc4MCBhcHBseSAgICMyMjUwMDBmZSAgICAgICAtPiA5OTgKK2RlY3M3ODEgYXBwbHkgICAjMjI1MDAxZmUgICAgICAgLT4gOTk4CitkZWNzNzgyIGFwcGx5ICAgIzIyNTAwMmZlICAgICAgIC0+IDk5OAorZGVjczc4MyBhcHBseSAgICMyMjUwMDNmZSAgICAgICAtPiA5OTgKK2RlY3M3ODQgYXBwbHkgICAjMjI1MDAwZmYgICAgICAgLT4gOTk5CitkZWNzNzg1IGFwcGx5ICAgIzIyNTAwMWZmICAgICAgIC0+IDk5OQorZGVjczc4NiBhcHBseSAgICMyMjUwMDJmZiAgICAgICAtPiA5OTkKK2RlY3M3ODcgYXBwbHkgICAjMjI1MDAzZmYgICAgICAgLT4gOTk5CisKKy0tIG5hcnJvd2luZyBjYXNlCitkZWNzNzkwIGFwcGx5IDIuMDBFLTk5IC0+ICMwMDAwMDEwMCBTdWJub3JtYWwKK2RlY3M3OTEgYXBwbHkgIzAwMDAwMTAwIC0+IDIuMDBFLTk5IFN1Ym5vcm1hbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4cC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4cC5kZWNUZXN0CmluZGV4IDAyMWI0NzguLmVhYjk5MGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9leHAuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZXhwLmRlY1Rlc3QKQEAgLTEsNjc0ICsxLDY3NCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZXhwLmRlY1Rlc3QgLS0gZGVjaW1hbCBuYXR1cmFsIGV4cG9uZW50aWF0aW9uICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRlc3RzIG9mIHRoZSBleHBvbmVudGlhbCBmdW50aW9uLiAgQ3VycmVudGx5IGFsbCB0ZXN0Y2FzZXMgaGVyZQ0KLS0tIHNob3cgcmVzdWx0cyB3aGljaCBhcmUgY29ycmVjdGx5IHJvdW5kZWQgKHdpdGhpbiA8PSAwLjUgdWxwKS4NCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLS0tIGJhc2ljcyAoZXhhbXBsZXMgaW4gc3BlY2lmaWNpYXRpb24sIGV0Yy4pDQotZXhweDAwMSBleHAgIC1JbmZpbml0eSAgICAgLT4gMA0KLWV4cHgwMDIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDQ1Mzk5OTI5OCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDAzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjM2Nzg3OTQ0MSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDA0IGV4cCAgIDAgICAgICAgICAgICAtPiAxDQotZXhweDAwNSBleHAgIC0wICAgICAgICAgICAgLT4gMQ0KLWV4cHgwMDYgZXhwICAgMSAgICAgICAgICAgIC0+IDIuNzE4MjgxODMgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMDcgZXhwICAgMC42OTMxNDcxODEgIC0+IDIuMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMDggZXhwICAgMTAgICAgICAgICAgIC0+IDIyMDI2LjQ2NTggIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMDkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5DQotDQotLS0gdGlueSBlZGdlIGNhc2VzDQotcHJlY2lzaW9uOiAgIDcNCi1leHB4MDExIGV4cCAgMC4xICAgICAgICAgIC0+ICAxLjEwNTE3MSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAxMiBleHAgIDAuMDEgICAgICAgICAtPiAgMS4wMTAwNTAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMTMgZXhwICAwLjAwMSAgICAgICAgLT4gIDEuMDAxMDAxICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDE0IGV4cCAgMC4wMDAxICAgICAgIC0+ICAxLjAwMDEwMCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAxNSBleHAgIDAuMDAwMDEgICAgICAtPiAgMS4wMDAwMTAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMTYgZXhwICAwLjAwMDAwMSAgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDE3IGV4cCAgMC4wMDAwMDAxICAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAxOCBleHAgIDAuMDAwMDAwMyAgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMTkgZXhwICAwLjAwMDAwMDQgICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDIwIGV4cCAgMC4wMDAwMDA1ICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAyMSBleHAgIDAuMDAwMDAwOCAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMjIgZXhwICAwLjAwMDAwMDkgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDIzIGV4cCAgMC4wMDAwMDEwICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAyNCBleHAgIDAuMDAwMDAxMSAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMjUgZXhwICAwLjAwMDAwMDA5ICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDI2IGV4cCAgMC4wMDAwMDAwNSAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAyNyBleHAgIDAuMDAwMDAwMDQgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMjggZXhwICAwLjAwMDAwMDAxICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBhbmQgc29tZSBtb3JlIHplcm9zDQotZXhweDAzMCBleHAgIDAuMDAwMDAwMDAgICAtPiAgMQ0KLWV4cHgwMzEgZXhwICAwRSsxMDAgICAgICAgLT4gIDENCi1leHB4MDMyIGV4cCAgMEUtMTAwICAgICAgIC0+ICAxDQotZXhweDAzMyBleHAgLTAuMDAwMDAwMDAgICAtPiAgMQ0KLWV4cHgwMzQgZXhwIC0wRSsxMDAgICAgICAgLT4gIDENCi1leHB4MDM1IGV4cCAtMEUtMTAwICAgICAgIC0+ICAxDQotDQotLS0gYmFzaWMgZT0wLCBlPTEsIGU9MiwgZT00LCBlPj04IGNhc2VzDQotcHJlY2lzaW9uOiAgIDcNCi1leHB4MDQxIGV4cCAgMSAgICAgICAgICAtPiAgMi43MTgyODIgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwNDIgZXhwIC0xICAgICAgICAgIC0+ICAwLjM2Nzg3OTQgSW5leGFjdCBSb3VuZGVkDQotZXhweDA0MyBleHAgIDEwICAgICAgICAgLT4gIDIyMDI2LjQ3ICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDQ0IGV4cCAtMTAgICAgICAgICAtPiAgMC4wMDAwNDUzOTk5MyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDQ1IGV4cCAgMTAwICAgICAgICAtPiAgMi42ODgxMTdFKzQzICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDQ2IGV4cCAtMTAwICAgICAgICAtPiAgMy43MjAwNzZFLTQ0ICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDQ3IGV4cCAgMTAwMCAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDA0OCBleHAgLTEwMDAgICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsDQotZXhweDA0OSBleHAgIDEwMDAwMDAwMCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHgwNTAgZXhwIC0xMDAwMDAwMDAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbA0KLQ0KLS0tIG1pc2NlbGxhbmVhDQotLS0gc2ltaWxhciB0byAnVkYgYnVnJyB0ZXN0LCBhdCAxNywgYnV0IHdpdGggbGFzdCBkaWdpdCBjb3JyZWN0ZWQgZm9yIGRlY2ltYWwNCi1wcmVjaXNpb246IDE2DQotZXhweDA1NSBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzJFLTIzNiBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgcmVzdWx0IGZyb20gTmV0UmV4eC9KYXZhIHByb3RvdHlwZSAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMTc2Nzc5Mjk2Mjg2MTcyNDYwNTQ0NTk2NDQ3MTExMDhFLTIzNg0KLS0tICAgcmVzdWx0IGZyb20gUmV4eCAoc2VyaWVzKSB2ZXJzaW9uIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTExNzY3NzkyOTYyODYxNzI0NjA1NDQ2RS0yMzYNCi1wcmVjaXNpb246IDE3DQotZXhweDA1NiBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzIxRS0yMzYgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxOA0KLWV4cHgwNTcgZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTFFLTIzNiBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE5DQotZXhweDA1OCBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzIxMTJFLTIzNiBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDIwDQotZXhweDA1OSBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzIxMTE4RS0yMzYgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gcm91bmRpbmcgaW4gYXJlYXMgb2YgLi41MDAuLiwgLi40OTkuLiwgLi4xMDAuLiwgLi45OTkuLiBzZXF1ZW5jZXMNCi1wcmVjaXNpb246ICAgNTANCi1leHB4MTAxIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMjczMzc0OTk1MDc5MjUwMDczODExIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAzMQ0KLWV4cHgxMDIgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNyBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMzANCi1leHB4MTAzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMyAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDI5DQotZXhweDEwNCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMCAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyOA0KLWV4cHgxMDUgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMCAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjcNCi1leHB4MTA2IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMCAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDI2DQotZXhweDEwNyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MCAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyNQ0KLWV4cHgxMDggZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjQNCi1leHB4MTA5IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3OSAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDIzDQotZXhweDExMCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4OCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyMg0KLWV4cHgxMTEgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5OSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjENCi1leHB4MTEyIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDIwDQotZXhweDExMyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAwMCAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxOQ0KLWV4cHgxMTQgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUwMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTgNCi1leHB4MTE1IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MCAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDE3DQotZXhweDExNiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNSAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxNg0KLWV4cHgxMTcgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTUNCi1leHB4MTE4IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDE0DQotZXhweDExOSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxMw0KLWV4cHgxMjAgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMCAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTINCi1leHB4MTIxIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMCAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDExDQotZXhweDEyMiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMCAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxMA0KLWV4cHgxMjMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMCAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDkNCi1leHB4MTI0IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMCAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICA4DQotZXhweDEyNSBleHAgLTlFLTggLT4gMC45OTk5OTk5MSAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgNw0KLWV4cHgxMjYgZXhwIC05RS04IC0+IDAuOTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDYNCi1leHB4MTI3IGV4cCAtOUUtOCAtPiAxLjAwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICA1DQotZXhweDEyOCBleHAgLTlFLTggLT4gMS4wMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgNA0KLWV4cHgxMjkgZXhwIC05RS04IC0+IDEuMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDMNCi1leHB4MTMwIGV4cCAtOUUtOCAtPiAxLjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAyDQotZXhweDEzMSBleHAgLTlFLTggLT4gMS4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgMQ0KLWV4cHgxMzIgZXhwIC05RS04IC0+IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSBzYW5pdHkgY2hlY2tzLCB3aXRoIGl0ZXJhdGlvbiBjb3VudHMgW25vcm1hbGl6ZWQgc28gMDw9fHh8PDFdDQotcHJlY2lzaW9uOiAgIDUwDQotDQotZXhweDIxMCBleHAgMCAtPiAxDQotLS0gaXRlcmF0aW9uczogMg0KLWV4cHgyMTEgZXhwIC0xRS00MCAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDgNCi1leHB4MjEyIGV4cCAtOUUtNyAtPiAwLjk5OTk5OTEwMDAwMDQwNDk5OTg3ODUwMDAyNzMzNzQ5NTA3OTI1MDczODExMjQwNTEwIEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDYNCi1leHB4MjEzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMjczMzc0OTk1MDc5MjUwMDczODExIEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDE1DQotZXhweDIxNCBleHAgLTAuMDAzIC0+IDAuOTk3MDA0NDk1NTAzMzcyOTc2MDEyMDY2MjM0MDk3NTYwOTEwNzQxNzc0ODA0ODk4NDUgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMTQNCi1leHB4MjE1IGV4cCAtMC4wMDEgLT4gMC45OTkwMDA0OTk4MzMzNzQ5OTE2NjgwNTUzNTcxNjc2NTU5NzQ3MDIzNTU5MDIzNjAwOCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyNg0KLWV4cHgyMTYgZXhwIC0wLjEgLT4gMC45MDQ4Mzc0MTgwMzU5NTk1NzMxNjQyNDkwNTk0NDY0MzY2MjExOTQ3MDUzNjA5ODA0MCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAzOQ0KLWV4cHgyMTcgZXhwIC0wLjcgLT4gMC40OTY1ODUzMDM3OTE0MDk1MTQ3MDQ4MDAwOTMzOTc1Mjg5NjE3MDc2NjcxNjU3MTE4MiBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiA0MQ0KLWV4cHgyMTggZXhwIC0wLjkgLT4gMC40MDY1Njk2NTk3NDA1OTkxMTE4ODM0NTQyMzk2NDU2MjU5ODc4MzM3MDMzNzYxNzAzOCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiA0Mw0KLWV4cHgyMTkgZXhwIC0wLjk5IC0+IDAuMzcxNTc2NjkxMDIyMDQ1NjkwNTMxNTI0MTE5OTA4MjAxMzg2OTE4MDI4ODU0OTA1MDEgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjYNCi1leHB4MjIwIGV4cCAtMSAtPiAwLjM2Nzg3OTQ0MTE3MTQ0MjMyMTU5NTUyMzc3MDE2MTQ2MDg2NzQ0NTgxMTEzMTAzMTc3IEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDI2DQotZXhweDIyMSBleHAgLTEuMDEgLT4gMC4zNjQyMTg5Nzk1NzE1MjMzMTk3NTcwNDYyOTU2MzczNDU0ODk1OTU4OTEzOTE5MjQ4MiBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyNw0KLWV4cHgyMjIgZXhwIC0xLjEgLT4gMC4zMzI4NzEwODM2OTgwNzk1NTMyODg4NDY5MDY0MzEzMTU1MjE2MTI0Nzk1MjE1NjkyMSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyOA0KLWV4cHgyMjMgZXhwIC0xLjUgLT4gMC4yMjMxMzAxNjAxNDg0Mjk4Mjg5MzMyODA0NzA3NjQwMTI1MjEzNDIxNzE2MjkzNjEwOCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAzMA0KLWV4cHgyMjQgZXhwIC0yIC0+IDAuMTM1MzM1MjgzMjM2NjEyNjkxODkzOTk5NDk0OTcyNDg0NDAzNDA3NjMxNTQ1OTA5NTggSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMzYNCi1leHB4MjI1IGV4cCAtNSAtPiAwLjAwNjczNzk0Njk5OTA4NTQ2NzA5NjYzNjA0ODQyMzE0ODQyNDI0ODg0OTU4NTAyNzM1NTEgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjYNCi1leHB4MjI2IGV4cCAtMTAgLT4gMC4wMDAwNDUzOTk5Mjk3NjI0ODQ4NTE1MzU1OTE1MTU1NjA1NTA2MTAyMzc5MTgwODg4NjY1NjUgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjgNCi1leHB4MjI3IGV4cCAtMTQgLT4gOC4zMTUyODcxOTEwMzU2Nzg4NDA2Mzk4NTE0MjU2NTI2MjI5NDYwNzY1ODM2NDk4NDU3RS03IEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDI5DQotZXhweDIyOCBleHAgLTE1IC0+IDMuMDU5MDIzMjA1MDE4MjU3ODgzNzE0Nzk0OTc3MDIyODk2MzkzNzA4MjA3ODA4MTg1NkUtNyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAzMA0KLWV4cHgyMzMgZXhwIDAgLT4gMQ0KLS0tIGl0ZXJhdGlvbnM6IDINCi1leHB4MjM0IGV4cCAxRS00MCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogNw0KLWV4cHgyMzUgZXhwIDlFLTcgLT4gMS4wMDAwMDA5MDAwMDA0MDUwMDAxMjE1MDAwMjczMzc1MDQ5MjA3NTA3MzgxMTI1OTQ5IEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDYNCi1leHB4MjM2IGV4cCA5RS04IC0+IDEuMDAwMDAwMDkwMDAwMDA0MDUwMDAwMTIxNTAwMDAyNzMzNzUwMDQ5MjA3NTAwNzM4MSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAxNQ0KLWV4cHgyMzcgZXhwIDAuMDAzIC0+IDEuMDAzMDA0NTA0NTAzMzc3MDI2MDEyOTM0MDkxMzQ4OTAwMjA1MzMxODcyNzE5NTYxOSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAxMw0KLWV4cHgyMzggZXhwIDAuMDAxIC0+IDEuMDAxMDAwNTAwMTY2NzA4MzQxNjY4MDU1NzUzOTkzMDU4MzExNTYzMDc2MjAwNTgwNyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyNQ0KLWV4cHgyMzkgZXhwIDAuMSAtPiAxLjEwNTE3MDkxODA3NTY0NzYyNDgxMTcwNzgyNjQ5MDI0NjY2ODIyNDU0NzE5NDczNzUgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMzgNCi1leHB4MjQwIGV4cCAwLjcgLT4gMi4wMTM3NTI3MDc0NzA0NzY1MjE2MjQ1NDkzODg1ODMwNjUyNzAwMTc1NDIzOTQxNDU5IEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDQxDQotZXhweDI0MSBleHAgMC45IC0+IDIuNDU5NjAzMTExMTU2OTQ5NjYzODAwMTI2NTYzNjAyNDcwNjk1NDIxNzcyMzA2NDQwMSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiA0Mg0KLWV4cHgyNDIgZXhwIDAuOTkgLT4gMi42OTEyMzQ0NzIzNDkyNjIyODkwOTk4Nzk0MDQwNzEwMTM5NzIxODAyOTMxODQxMDMwIEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDI2DQotZXhweDI0MyBleHAgMSAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MjQ5Nzc1NzI0NzA5MzcwMDAgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjYNCi1leHB4MjQ0IGV4cCAxLjAxIC0+IDIuNzQ1NjAxMDE1MDE2OTE2NDkzOTg5Nzc2MzE2NjYwMzg3NjI0MDczNzUwODE5NTk2MCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyNg0KLWV4cHgyNDUgZXhwIDEuMSAtPiAzLjAwNDE2NjAyMzk0NjQzMzExMjA1ODQwNzk1MzU4ODY3MjM5MzI4MjY4MTAyNjAxNjMgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjgNCi1leHB4MjQ2IGV4cCAxLjUgLT4gNC40ODE2ODkwNzAzMzgwNjQ4MjI2MDIwNTU0NjAxMTkyNzU4MTkwMDU3NDk4NjgzNjk3IEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDI5DQotZXhweDI0NyBleHAgMiAtPiA3LjM4OTA1NjA5ODkzMDY1MDIyNzIzMDQyNzQ2MDU3NTAwNzgxMzE4MDMxNTU3MDU1MTggSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMzYNCi1leHB4MjQ4IGV4cCA1IC0+IDE0OC40MTMxNTkxMDI1NzY2MDM0MjExMTU1ODAwNDA1NTIyNzk2MjM0ODc2Njc1OTM4OCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyNg0KLWV4cHgyNDkgZXhwIDEwIC0+IDIyMDI2LjQ2NTc5NDgwNjcxNjUxNjk1NzkwMDY0NTI4NDI0NDM2NjM1MzUxMjYxODU1NyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyOA0KLWV4cHgyNTAgZXhwIDE0IC0+IDEyMDI2MDQuMjg0MTY0Nzc2Nzc3NzQ5MjM2NzcwNzY3ODU5NDQ5NDEyNDg2NTQzMzc2MSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyOA0KLWV4cHgyNTEgZXhwIDE1IC0+IDMyNjkwMTcuMzcyNDcyMTEwNjM5MzAxODU1MDQ2MDkxNzIxMzE1NTA1NzM4NTQzODIwMCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyOQ0KLQ0KLS0tIGEgYmlnZ2llIFtyZXN1bHQgdmVyaWZpZWQgMyB3YXlzXQ0KLXByZWNpc2lvbjogMjUwDQotZXhweDI2MCBleHAgMSAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MjQ5Nzc1NzI0NzA5MzY5OTk1OTU3NDk2Njk2NzYyNzcyNDA3NjYzMDM1MzU0NzU5NDU3MTM4MjE3ODUyNTE2NjQyNzQyNzQ2NjM5MTkzMjAwMzA1OTkyMTgxNzQxMzU5NjYyOTA0MzU3MjkwMDMzNDI5NTI2MDU5NTYzMDczODEzMjMyODYyNzk0MzQ5MDc2MzIzMzgyOTg4MDc1MzE5NTI1MTAxOTAxMTU3MzgzNDE4NzkzMDcwMjE1NDA4OTE0OTkzNDg4NDE2NzUwOTI0NDc2MTQ2MDY2OCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBleHRyZW1lIHJhbmdlIGJvdW5kYXJpZXMNCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogOTk5OTk5DQotbWluRXhwb25lbnQ6IC05OTk5OTkNCi0tLSBOdGlueSBib3VuZGFyeQ0KLWV4cHgyOTAgZXhwICAtMjMwMjYxOC4wMjIzMzI1MjkgLT4gMEUtMTAwMDAxNCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZXhweDI5MSBleHAgIC0yMzAyNjE4LjAyMjMzMjUyOCAtPiAxRS0xMDAwMDE0IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotLS0gTm1heC8xMCBhbmQgTm1heCBib3VuZGFyeQ0KLWV4cHgyOTIgZXhwICAyMzAyNTgyLjc5MDQwODk1MiAtPiA5Ljk5OTk5OTk5MzEwMDI3N0UrOTk5OTk4ICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MjkzIGV4cCAgMjMwMjU4Mi43OTA0MDg5NTMgLT4gMS4wMDAwMDAwMDAzMTAwMjhFKzk5OTk5OSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDI5NCBleHAgIDIzMDI1ODUuMDkyOTkzOTQ2IC0+IDkuOTk5OTk5MDAzMTU5ODcwRSs5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZXhweDI5NSBleHAgIDIzMDI1ODUuMDkyOTk0MDM2IC0+IDkuOTk5OTk5OTAzMTU5ODIxRSs5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZXhweDI5NiBleHAgIDIzMDI1ODUuMDkyOTk0MDQ1IC0+IDkuOTk5OTk5OTkzMTU5ODIwRSs5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZXhweDI5NyBleHAgIDIzMDI1ODUuMDkyOTk0MDQ2IC0+IEluZmluaXR5IE92ZXJmbG93ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gMDwteDw8MSBlZmZlY3RzDQotcHJlY2lzaW9uOiAgICAzMA0KLWV4cHgzMjAgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMDA5NzkxNjY2MTcgSW5leGFjdCBSb3VuZGVkDQotZXhweDMyMSBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI0OTk5OTk3OTE2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzIyIGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjQ5OTk4OTc5MTY2NzE3IEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgMjANCi1leHB4MzIzIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAgSW5leGFjdCBSb3VuZGVkDQotZXhweDMyNCBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI1MDAwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzMjUgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDE0DQotZXhweDMyNiBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzMjcgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NTAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzI4IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotLS0gb3ZlcnByZWNpc2UgYW5kIDA8LXg8PDENCi1wcmVjaXNpb246ICAgIDgNCi1leHB4MzMwIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDMzMSBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAwLjk5OTk5OTk1ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzMzIgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDcNCi1leHB4MzMzIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDMzNCBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzMzUgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDMNCi1leHB4MzM2IGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDMzNyBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzMzggZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSAwPHg8PDEgZWZmZWN0cw0KLXByZWNpc2lvbjogICAgMzANCi1leHB4MzQwIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjQ5OTk5MDIwODMzMjggIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzNDEgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwMDAwMjA4MzMzMyAgSW5leGFjdCBSb3VuZGVkDQotZXhweDM0MiBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAwMTAyMDgzMzM4ICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDIwDQotZXhweDM0MyBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzNDQgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzQ1IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMCAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAxNA0KLWV4cHgzNDYgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAwNTAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzQ3IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMDUwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDM0OCBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLS0tIG92ZXJwcmVjaXNlIGFuZCAwPHg8PDENCi1wcmVjaXNpb246ICAgIDgNCi1leHB4MzUwIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDM1MSBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDEgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzNTIgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDcNCi1leHB4MzUzIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDM1NCBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzNTUgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDMNCi1leHB4MzU2IGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDM1NyBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzNTggZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBjYXNlcyBuZWFyIDEgICAgICAgICAgICAgIC0tICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTANCi1wcmVjaXNpb246ICAgIDIwDQotZXhweDQwMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43MTgyODE4Mjg0NTg5MzY1MDQxICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDAyIGV4cCAwLjk5OTk5OTk5OTk5OTk3ICAtPiAyLjcxODI4MTgyODQ1ODk2MzY4NjkgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MDMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNzE4MjgxODI4NDU4OTkwODY5NyAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQwNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43MTgyODE4Mjg0NTkwMTgwNTI1ICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDA1IGV4cCAxLjAwMDAwMDAwMDAwMDAgICAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTQgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MDYgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNzE4MjgxODI4NDU5MzE3MDYzNSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQwNyBleHAgMS4wMDAwMDAwMDAwMDAyICAgLT4gMi43MTgyODE4Mjg0NTk1ODg4OTE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDE0DQotZXhweDQxMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43MTgyODE4Mjg0NTg5ICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDEyIGV4cCAwLjk5OTk5OTk5OTk5OTk3ICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MTMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNzE4MjgxODI4NDU5MCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQxNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDE1IGV4cCAxLjAwMDAwMDAwMDAwMDAgICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MTYgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNzE4MjgxODI4NDU5MyAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQxNyBleHAgMS4wMDAwMDAwMDAwMDAyICAgLT4gMi43MTgyODE4Mjg0NTk2ICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBvdmVycHJlY2lzZS4uLg0KLXByZWNpc2lvbjogICAgNw0KLWV4cHg0MjEgZXhwIDAuOTk5OTk5OTk5OTk5OTYgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQyMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDIzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MjQgZXhwIDAuOTk5OTk5OTk5OTk5OTkgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQyNSBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDI2IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MjcgZXhwIDEuMDAwMDAwMDAwMDAwMyAgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAyDQotZXhweDQzMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDMyIGV4cCAwLjk5OTk5OTk5OTk5OTk3ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MzMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQzNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDM1IGV4cCAxLjAwMDAwMDAwMDAwMDEgICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MzYgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQzNyBleHAgMS4wMDAwMDAwMDAwMDAzICAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBiYXNpY3MgYXQgbG93IHByZWNpc2lvbnMNCi1wcmVjaXNpb246IDMNCi1leHB4NTAxIGV4cCAgLUluZmluaXR5ICAgICAtPiAwDQotZXhweDUwMiBleHAgIC0xMCAgICAgICAgICAgLT4gMC4wMDAwNDU0ICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDUwMyBleHAgIC0xICAgICAgICAgICAgLT4gMC4zNjggICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDUwNCBleHAgICAwICAgICAgICAgICAgLT4gMQ0KLWV4cHg1MDUgZXhwICAtMCAgICAgICAgICAgIC0+IDENCi1leHB4NTA2IGV4cCAgIDEgICAgICAgICAgICAtPiAyLjcyICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NTA3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyLjAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NTA4IGV4cCAgIDEwICAgICAgICAgICAtPiAyLjIwRSs0ICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NTA5IGV4cCAgK0luZmluaXR5ICAgICAtPiBJbmZpbml0eQ0KLXByZWNpc2lvbjogMg0KLWV4cHg1MTEgZXhwICAtSW5maW5pdHkgICAgIC0+IDANCi1leHB4NTEyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA0NSAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NTEzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjM3ICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NTE0IGV4cCAgIDAgICAgICAgICAgICAtPiAxDQotZXhweDUxNSBleHAgIC0wICAgICAgICAgICAgLT4gMQ0KLWV4cHg1MTYgZXhwICAgMSAgICAgICAgICAgIC0+IDIuNyAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg1MTcgZXhwICAgMC42OTMxNDcxODEgIC0+IDIuMCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg1MTggZXhwICAgMTAgICAgICAgICAgIC0+IDIuMkUrNCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg1MTkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5DQotcHJlY2lzaW9uOiAxDQotZXhweDUyMSBleHAgIC1JbmZpbml0eSAgICAgLT4gMA0KLWV4cHg1MjIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDUgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg1MjMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuNCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg1MjQgZXhwICAgMCAgICAgICAgICAgIC0+IDENCi1leHB4NTI1IGV4cCAgLTAgICAgICAgICAgICAtPiAxDQotZXhweDUyNiBleHAgICAxICAgICAgICAgICAgLT4gMyAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDUyNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMiAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDUyOCBleHAgICAxMCAgICAgICAgICAgLT4gMkUrNCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDUyOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkNCi0NCi0tLSBvdmVyZmxvd3MsIGluY2x1ZGluZyBzb21lIG92ZXJwcmVjaXNlIGJvcmRlcmxpbmVzDQotcHJlY2lzaW9uOiAgIDcNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHB4NzAxIGV4cCAgMTAwMDAwMDAwMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDcwMiBleHAgIDEwMDAwMDAwMCAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MDMgZXhwICAxMDAwMDAwMCAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzA0IGV4cCAgMTAwMDAwMCAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDcwNSBleHAgIDEwMDAwMCAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MDYgZXhwICAxMDAwMCAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzA3IGV4cCAgMTAwMCAgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDcwOCBleHAgIDg4Ni40OTUyNjA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MDkgZXhwICA4ODYuNDk1MjYwNyAtPiA5Ljk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MTAgZXhwICA4ODYuNDk1MjcgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzExIGV4cCAgODg2LjQ5NTI2ICAgLT4gOS45OTk5OTJFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTYNCi1leHB4NzIxIGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU4ODMgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDcyMiBleHAgIDg4Ni40OTUyNjA4MDI3MDc1ODgyIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZXhweDcyMyBleHAgIDg4Ni40OTUyNjA4MDI3MDc1OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MjQgZXhwICA4ODYuNDk1MjYwODAyNzA3NTggICAtPiA5Ljk5OTk5OTk5OTk5OTkxN0UrMzg0IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MjUgZXhwICA4ODYuNDk1MjYwODAyNzA3NiAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzI2IGV4cCAgODg2LjQ5NTI2MDgwMjcwNzUgICAgLT4gOS45OTk5OTk5OTk5OTkxMTdFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBhbmQgYnkgc3BlY2lhbCByZXF1ZXN0IC4uLg0KLXByZWNpc2lvbjogICAxNQ0KLWV4cHg3MzEgZXhwICA4ODYuNDk1MjYwODAyNzA4ICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzMyIGV4cCAgODg2LjQ5NTI2MDgwMjcwNyAgICAgLT4gOS45OTk5OTk5OTk5OTQxMkUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MzMgZXhwICA4ODYuNDk1MjYwODAyNzA2ICAgICAtPiA5Ljk5OTk5OTk5OTk4NDEyRSszODQgSW5leGFjdCBSb3VuZGVkDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotZXhweDczNSBleHAgIDIzMDIuNTg1MDkyOTk0MDUgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDczNiBleHAgIDIzMDIuNTg1MDkyOTk0MDQgICAgLT4gOS45OTk5OTk5OTk5NDMxNkUrOTk5IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MzcgZXhwICAyMzAyLjU4NTA5Mjk5NDAzICAgIC0+IDkuOTk5OTk5OTk5ODQzMTZFKzk5OSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3dzLCBpbmNsdWRpbmcgdW5kZXJmbG93LXRvLXplcm8gZWRnZSBwb2ludA0KLXByZWNpc2lvbjogICA3DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXhweDc1MSBleHAgLTEwMDAwMDAwMDAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwNCi1leHB4NzUyIGV4cCAtMTAwMDAwMDAwICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbA0KLWV4cHg3NTMgZXhwIC0xMDAwMDAwMCAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsDQotZXhweDc1NCBleHAgLTEwMDAwMDAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwNCi1leHB4NzU1IGV4cCAtMTAwMDAwICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbA0KLWV4cHg3NTYgZXhwIC0xMDAwMCAgICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsDQotZXhweDc1NyBleHAgLTEwMDAgICAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwNCi1leHB4NzU4IGV4cCAtODgxLjg5MDA5ICAgIC0+ICAxLjAwMDAwMUUtMzgzIEluZXhhY3QgUm91bmRlZA0KLWV4cHg3NTkgZXhwIC04ODEuODkwMSAgICAgLT4gIDkuOTk5OTFFLTM4NCAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCi1leHB4NzYwIGV4cCAtODg1ICAgICAgICAgIC0+ICA0LjQ2MDVFLTM4NSAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQotZXhweDc2MSBleHAgLTg4OCAgICAgICAgICAtPiAgMi4yMjFFLTM4NiAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KLWV4cHg3NjIgZXhwIC04OTAgICAgICAgICAgLT4gIDMuMDFFLTM4NyAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCi1leHB4NzYzIGV4cCAtODkyLjkgICAgICAgIC0+ICAxLjdFLTM4OCAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQotZXhweDc2NCBleHAgLTg5MyAgICAgICAgICAtPiAgMS41RS0zODggICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KLWV4cHg3NjUgZXhwIC04OTMuNSAgICAgICAgLT4gIDlFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCi1leHB4NzY2IGV4cCAtODk1LjcwNTYgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQotZXhweDc2OSBleHAgLTg5NS44ICAgICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KLWV4cHg3NzAgZXhwIC04OTUuNzMgICAgICAgLT4gIDFFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCi1leHB4NzcxIGV4cCAtODk2LjM5ODcgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQotZXhweDc3MiBleHAgLTg5Ni4zOTg4ICAgICAtPiAgMEUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkDQotZXhweDc3MyBleHAgLTg5OC4wMDgxICAgICAtPiAgMEUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkDQotZXhweDc3NCBleHAgLTg5OC4wMDgyICAgICAtPiAgMEUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkDQotDQotLS0gc3BlY2lhbCB2YWx1ZXMNCi1tYXhleHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1leHB4ODIwIGV4cCAgIEluZiAgICAtPiBJbmZpbml0eQ0KLWV4cHg4MjEgZXhwICAtSW5mICAgIC0+IDANCi1leHB4ODIyIGV4cCAgIE5hTiAgICAtPiBOYU4NCi1leHB4ODIzIGV4cCAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZXhweDgyNCBleHAgIHNOYU4xMjMgLT4gIE5hTjEyMyBJbnZhbGlkX29wZXJhdGlvbg0KLWV4cHg4MjUgZXhwIC1zTmFOMzIxIC0+IC1OYU4zMjEgSW52YWxpZF9vcGVyYXRpb24NCi1leHB4ODI2IGV4cCAgIE5hTjQ1NiAtPiAgTmFONDU2DQotZXhweDgyNyBleHAgIC1OYU42NTQgLT4gLU5hTjY1NA0KLWV4cHg4MjggZXhwICAgTmFOMSAgIC0+ICBOYU4xDQotDQotLS0gSW52YWxpZCBvcGVyYXRpb25zIGR1ZSB0byByZXN0cmljdGlvbnMNCi0tLSBbbmV4dCB0d28gcHJvYmFibHkgc2tpcHBlZCBieSBtb3N0IHRlc3QgaGFybmVzc2VzXQ0KLXByZWNpc2lvbjogMTAwMDAwMDAwDQotZXhweDkwMSBleHAgIC1JbmZpbml0eSAgICAgLT4gTmFOIEludmFsaWRfY29udGV4dA0KLXByZWNpc2lvbjogIDk5OTk5OTk5DQotZXhweDkwMiBleHAgIC1JbmZpbml0eSAgICAgLT4gTmFOIEludmFsaWRfY29udGV4dA0KLQ0KLXByZWNpc2lvbjogOQ0KLW1heEV4cG9uZW50OiAgIDEwMDAwMDANCi1taW5FeHBvbmVudDogICAtOTk5OTk5DQotZXhweDkwMyBleHAgIC1JbmZpbml0eSAgICAgLT4gTmFOIEludmFsaWRfY29udGV4dA0KLW1heEV4cG9uZW50OiAgICA5OTk5OTkNCi1taW5FeHBvbmVudDogICAtOTk5OTk5DQotZXhweDkwNCBleHAgIC1JbmZpbml0eSAgICAgLT4gMA0KLW1heEV4cG9uZW50OiAgICA5OTk5OTkNCi1taW5FeHBvbmVudDogIC0xMDAwMDAwDQotZXhweDkwNSBleHAgIC1JbmZpbml0eSAgICAgLT4gTmFOIEludmFsaWRfY29udGV4dA0KLW1heEV4cG9uZW50OiAgICA5OTk5OTkNCi1taW5FeHBvbmVudDogICAtOTk5OTk4DQotZXhweDkwNiBleHAgIC1JbmZpbml0eSAgICAgLT4gMA0KLQ0KLS0tDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotcHJlY2lzaW9uOiAgIDE2DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIE51bGwgdGVzdA0KLWV4cHg5MDAgZXhwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KLS0tIFJhbmRvbXMgUD01MCwgd2l0aGluIDAtOTk5DQotUHJlY2lzaW9uOiA1MA0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4cHgxNTAxIGV4cCA2NTYuMzUzOTc5NTA1OTAyODU2MTIyNjYwOTU1OTY1Mzk5MzQyMTM5NDM4NzI4ODU3MjggIC0+IDEuMTI0Mzc1NzYxMDY0MDMxOTc4MzYxMTE3ODUyODgzOTY1MjY3MjA2MjgyMDA0MDMxNEUrMjg1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTAyIGV4cCAwLjkzNjIwNTcxMDkzNjUyODAwMjI1MDM4NTUwNjAwNzgwMzIyODMxMjM2MDgyNzgxNDcxIC0+IDIuNTUwMjg2NTEzMDk4NjE3NjY4OTE5OTcxMTg1NzgyNTc3MTMxMTE3ODA0Njg0MjAwOSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUwMyBleHAgMC4wMDAwMDAwMDAwMDAwMDAwODM0MDc4NTg1NjYwMTUxNDcxNDE4MzM3Mzg3NDEwNTc5MSAtPiAxLjAwMDAwMDAwMDAwMDAwMDA4MzQwNzg1ODU2NjAxNTE1MDYyMDI2OTE3NDAyNTI1MTIgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MDQgZXhwIDAuMDAwMDkxNzQwNTcyNjI4ODc3ODk2MjU3NDU1NzQ2ODY1NDUxNjMxNjg3ODg0NTYyMDMgLT4gMS4wMDAwOTE3NDQ3ODA5MjM5MDA1MTQ2NzIyMzQxMjUxNTI0MDgxMDA2MDUxNDczMjczIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTA1IGV4cCAzMy45MDkxMTY4OTc5NzM3OTc3MzU2NTc3NTE1OTEwMTQ5MjY2MjkwNTExMTc1NDEyNDMgIC0+IDUzMjc3MzE4MTAyNTAwMi4wMzU0MzYxODkwMTMwNjcyNjQ5NTg3MDQ3NjYxNzIzMjIyOSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUwNiBleHAgMC4wMDAwMDc0MDQ3MDQxMzAwNDQwNjU5MjEyNDU3NTI5NTI3ODQ1NjkzNjgwOTU4NzMxMSAtPiAxLjAwMDAwNzQwNDczMTU0NDkzMzM1OTAwNjYzOTU2NzAzMDYxMzU1Njc4ODkyMTA4MTQgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MDcgZXhwIDAuMDAwMDAwMDAwMDAxMjQ4NTQ5MjIyMjIxMDg4MDI0NTM3NDY5MjI0ODMwNzE0NDU0OTIgLT4gMS4wMDAwMDAwMDAwMDEyNDg1NDkyMjIyMjE4Njc0NjIxMTc2MjM5OTExNDI0OTY4MjYzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTA4IGV4cCA0LjE3OTMyODA2NzQxNTU2NTk3OTQyODY5NTExNTk0MzA2NTEyNTgzNTYwMTQzOTEzODIgIC0+IDY1LjMyMTk0NjUyMDE0NzE5OTQwNDE5OTc4NzgxMTMzNjg2MDA4Nzk3NTExODI3ODE4NSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUwOSBleHAgNDg1LjQzNTk1NzQ1NDYwNjU1ODkzNzQ2MTc5ODkwMjU1NTI5OTE5MjIxNTUwMjAxNjg2ICAtPiA2LjYzOTg0MDM5MjA0NTk2MTcyNTU5NTA0NzY5NTMxMjkzNzc0NTk4NDUzNjY1ODU0NjNFKzIxMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUxMCBleHAgMC4wMDAwMDAwMDAwMzU0NzI1OTgwNjU5MDg1NjAzMjUyNzg3NTE1NzgzMDMyODE1NjU5NyAtPiAxLjAwMDAwMDAwMDAzNTQ3MjU5ODA2NjUzNzcxMjkzMjA1ODk0MDY3MTUwMDA2ODU1MTUgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MTEgZXhwIDAuMDAwMDAwMDAwMDAwMDA3NTk2MjE0OTczMzkxMDQwNDc5MzA2MTY0Nzg2MzUwNDI2NzggLT4gMS4wMDAwMDAwMDAwMDAwMDc1OTYyMTQ5NzMzOTEwNjkzMzA1NDcxMjU3NzE1NDYzODg3IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTEyIGV4cCA5Ljc5NTkxNjg4MjE3NjAzMzkzMDQ1NzE1OTU0NzQ0ODA2NDAyODYwNzI3MjAyMzM3OTYgIC0+IDE3OTYwLjI2MTE0NjA0Mjk1NTE3OTE2NDMwMzY1MzQxMjY1MDc1MTY4MTQzNjM1MjQzNyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUxMyBleHAgMC4wMDAwMDAwMDU2NjY0MjAwNjI1ODI5MDUyNjc4MzkwMTQ1MTE5NDk0MzE2NDUzNTU4MSAtPiAxLjAwMDAwMDAwNTY2NjQyMDA3ODYzNzA2MzQ2MDk4MzI0Mzg4MTU2NjUyNDkzNDc2NTAgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MTQgZXhwIDc0MS4yOTg4ODc5MTEzNDI5ODE5NDA4ODgyNzU3MjM3NDcxODk0MDkyNTgyMDAyNzM1NCAgLT4gOC43NTAxNjk0MDA2MzE3MzMyODA4MTI4OTQ2NjY2NDAyNjIyNDMyMDY0OTIzMTk4NzMxRSszMjEgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MTUgZXhwIDAzMi43NTU3MzAwMzU1MjUxNzY2ODgwODUyOTA5OTg5NzE1MzcxMDg4NzAxNDk0NzkzNSAgLT4gMTY4MTI1MTk2NTc4Njc4LjE3NzI1ODQxMTA4NjE3OTU1OTA0NDI1MzQ1NjMxMDkyMzM5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTE2IGV4cCA0Mi4zMzM3MDA3MjY0MjkzMzMzMDg1OTQyNjU1NTM0MjI5MDI0NjM3MzczOTk0Mzc2NDQgIC0+IDI0MjgyNDU2NzU4NjQxNzI0NzUuNDY4MTExOTQ5MzA0NTY1Nzc5NzMwOTM2OTY3MjAxMiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUxNyBleHAgMC4wMDAwMDAwMDAwMDAwMDU1OTY4MjYxNjg3NjQ5MTg4ODE5NzYwOTE1ODgwMjgzNTc5OCAtPiAxLjAwMDAwMDAwMDAwMDAwNTU5NjgyNjE2ODc2NDkzNDU0NDIwNzY3MzI3Mzk1NzcwNDkgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MTggZXhwIDAuMDAwMDAwMDAwMDAwODA3MDM2ODg2NjgyODAxOTM1ODQ3NTgzMDA5NzM1NDk0ODYzMTIgLT4gMS4wMDAwMDAwMDAwMDA4MDcwMzY4ODY2ODMxMjc1OTAxMTU4MTY0MzIxODY3OTE0MzQyIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTE5IGV4cCA2NDAuNzIzOTYwMTI3OTY1MDk0ODIzODI3MTI4OTE3MDkwNzI1NzA2NTM2MDY4MzgyNTEgIC0+IDEuODMxODA5NDk5MDY4MzM5NDIyOTMwNDEzMzA2ODk4MzkxNDIzNjk5NTMyNjg5MTA0NUUrMjc4IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTIwIGV4cCAwLjAwMDAwMDAwMDAwMDAwNTA5NDU4OTIyMTY3NjMxMDcxNDE2OTQ4MTEyMjE5NTEyMjI0IC0+IDEuMDAwMDAwMDAwMDAwMDA1MDk0NTg5MjIxNjc2MzIzNjkxNTg5MTQ5OTMyNDM1ODU1NiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUyMSBleHAgNi43NjcwMzk0MzE0MzE1MjA2Mzc4NjI1MjIxNTgzOTczNDE0NjYwNzI3OTYwMjQxMzk1ICAtPiA4NjguNzM2MTMwMTI4MjIwMzEzNjc4MDYyNDg2OTcwOTI4ODQ0MTUxMTk1NjgyNzEzMTUgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MjIgZXhwIDA0LjgyMzIxNzQwNzQxMjk2MzUwNjYzODI2NzIyNjg5MTAyNDEzODA1NDc4MzEyMjU0OCAgLT4gMTI0LjM2NDU3OTI5NTg4ODM3MTI5NzMxODIxMDc3NTg2NzA1NTA1NTY1OTA0MjA1MzY2IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTIzIGV4cCAxOTMuNTEzMDc4Nzg3MDExOTY0MDM5OTEyMDg0ODI1MjAxMTUzNTk2OTAxMDYxNDM2MTUgIC0+IDEuMTAwNjgzMDg3Mjg1NDcxNTY3NzM5MDkxNDY1NTQ1MjI2MTU1MDc2ODk1NzU3NjAzNEUrODQgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MjQgZXhwIDUuNzMwNzc0OTAzODMwMzY1MDUzOTIwMDM0NTkwMTIxMDQ5NzAxNTYxNzM5Mzk3MDQ2MyAgLT4gMzA4LjIwODAwNzQzMTA2ODQzMDgzNTIyNzIxNTIzNzE1NjQ1OTUwNTc0ODY2NDk1MTk2IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTI1IGV4cCAwLjAwMDAwMDAwMDAwMDk1MjE3ODI1MTk5Nzk3OTY1MjAwNTQxMTY5MTIzNzQzNTAwMjY3IC0+IDEuMDAwMDAwMDAwMDAwOTUyMTc4MjUxOTk4NDMyOTczNzE3MjAwNzk5MTM5MDM4MTI3MyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUyNiBleHAgMC4wMDAyNzEzMTQ0MDk0OTE4MzM3MDk2NjM5MzY4MjYxNzkzMDE1MzQ5NTAyODkxOTE0MCAtPiAxLjAwMDI3MTM1MTIxODU3NTEwMjI5MDYwNTgxNjA0ODA2MDY1OTg3NTQ5MTM2MDczNjQgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MjcgZXhwIDAuMDAwMDAwMDAwNjQ1MDMwNTkxMTQ2ODA2ODIzNDMwMDIzMTU2NjIwNjkyNzI3MDcxMjMgLT4gMS4wMDAwMDAwMDA2NDUwMzA1OTEzNTQ4MzkwNTUyMzIzNTE3NDAzNjEzMTM1NDk2NjMzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTI4IGV4cCAwLjAwMDAwMDAwMDAwMDAwMDk1NjE2NjQzNTA2NTI3Mjg4ODY2MjM1MjM4NTQ4NDQwNTkzIC0+IDEuMDAwMDAwMDAwMDAwMDAwOTU2MTY2NDM1MDY1MjczMzQ1Nzg5NDc4MTU4MjAwOTA5NCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUyOSBleHAgMC4wMDAwMDAwMDAwMDAwMDA4NjQ0OTk0MjgxMTY3ODY1MDI0NDQ1OTU1MDI1Mjc0MzQzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDg2NDQ5OTQyODExNjc4Njg3NjEyNDIyNjEwOTY1Mjk5ODYgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MzAgZXhwIDAuMDYyMjM0ODgzNTU2MzUzNTk5NjU2ODMwNTMxNTc3MjkyMDQ5ODgzODE4ODc2MjE4NTAgLT4gMS4wNjQyMTIyODEzMzkyNDA2NjU3Nzg5Njg4OTMxODM4OTE5MzIzODI2MjUwNjMwODMxIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTMxIGV4cCAwLjAwMDAwNDAwNzEwODA3ODA0NDI5NDM1NTAyNjU3MTMxOTEyMzA4NjgwNjc0MDU3MDUzIC0+IDEuMDAwMDA0MDA3MTE2MTA2NTEyNTkyNTYyMDg5MDAxOTMxOTgzMjEyNzg2MzU1OTI2MCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUzMiBleHAgODUuNTIyNzk2ODk0NzQ0NTc2MjExNTczMjMyMDU1NDk0NTUxNDI5Mjk3ODc4NDEzMDE3ICAtPiAxMzg3MDA3MzY4NjQwNDIyODQ1Mjc1Nzc5OTc3MDI1MTA4NTE3Ny44NTMzMzczNjg5MzUgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MzMgZXhwIDkuMTQ5NjcyMDgxMTM2MzY3ODY5NjkzODAzNjM3OTc1NjY2MzU0ODM1MzM5OTk1NDM2MyAgLT4gOTQxMS4zNTM3MTIyODMyNzQzMzg2NzgzNTk3NjI5MTYxNzYzMDU3MzcwMDM0NDk1MTU3IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTM0IGV4cCA4LjIyMTU3MDUyNDA3ODgyOTQ0NzI5NDQzODIwNTYzMzA1MTY3Mzg1Nzc3ODUxNzc5NDIgIC0+IDM3MjAuMzQwNjgxMzM4MzA3Njk1Mzg5OTY1NDcwMTYxNTA4NDQyNTU5ODM3Nzc1ODE4OSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUzNSBleHAgMC4wMDAwMDAwMDAxNTc3MjA2NDU2OTY0MDYxMzE0MjgyMzIwMzcyNjgyMTA3NjIzOTU2MSAtPiAxLjAwMDAwMDAwMDE1NzcyMDY0NTcwODg0NDAzMjQ2ODMzMTU3ODgzNTg5MjYxMjk4MzAgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MzYgZXhwIDAuNTgxNzkzNDY0NzM5NTk1MzE0MzI2MjQxNTM1NzY4ODM0NDA2MjU1MzgwMTc1MzI0ODAgLT4gMS43ODkyNDQ1MDE4Mjc1MzYwMTYzNzk3MDIyMzcyNjU1ODM3MTg4NDIzMTk0ODYzNjA1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTM3IGV4cCAzMy41NTU3MjYxOTcxNDk1MjUwNjE0NTU1MTc3ODQ4NzA1NzA0NzA4MzM0OTgwOTY1NTkgIC0+IDM3NDE2ODA2OTg5NjMyNC42MjU3ODA3MzE0ODk5MzUyNjYyNjMwNzA5NTg1NDQwNzk1MiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUzOCBleHAgOS43ODk4MDc5ODAzOTA2MjE1MDk0MTQwMDEwMDA5NTgzMzc1NTM3MjU5ODEwMzk4NjU5ICAtPiAxNzg1MC44NzgxMTk5MTIyMDg4ODgyMTcxMDA5OTgwMTk5ODY2MzQ2MjAzNjg1Mzg0MjYgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MzkgZXhwIDg5LjE1NzY5NzMyNzE3NDUyMTU0MjUwMjQ0Nzk1MzAzMjUzNjU0MTAzODYzNjk2NjM0NyAgLT4gNTI1NjQ5MTUyMzIwMTY2NTAzNzcxMjI0MTQ5MzMwNDQ4MDg5NTUwLjY3MjkzODI5MjI3IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTQwIGV4cCAyNS4wMjI5NDc2MDAxMjMzMjg5MTIwMjkwNTE4OTcxNzEzMTk1NzMzMjI4ODg1MTQ4ODUgIC0+IDczNjc2MzQzNDQyLjk1MjUxNzgyNDM0NTQzMTQzNzY4MzE1MzMwNDY0NTg1MTk2MDUyNCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBleHAoMSkgYXQgMzQNCi1QcmVjaXNpb246IDM0DQotZXhweDEyMDAgZXhwIDEgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjIgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gUmFuZG9tcyBQPTM0LCB3aXRoaW4gMC05OTkNCi1QcmVjaXNpb246IDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1leHB4MTIwMSBleHAgMzA5LjU5NDg4NTU4MjE1MTAyMTI5OTY3MDA2NDUwODcxODggIC0+IDIuODUzMzE5NjkyOTAxMzg3NTIxMjAxNzM4MDE1MDUwNzI0RSsxMzQgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMDIgZXhwIDkuOTM2NTQzMDY4NzA2MjExNDIwNDIyODAzOTYyNjgwMTY0ICAtPiAyMDY3Mi4xNTgzOTIwMzE3MTg3NzQ3NjUxMTA5MzI3NjAyMiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIwMyBleHAgNi4zMDc4NzAzMjM4ODE1MDU2ODQ0Mjk4Mzk0OTE3MDc5MDggIC0+IDU0OC44NzQ3Nzc3MDU0NjM3Mjk2MTM3Mjc3MzkxNzU0NjY1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjA0IGV4cCAwLjAwMDM1NDMyODEzODk0Mzg0MjA1MzUyMDEzMDgyODI1MDMgLT4gMS4wMDAzNTQzOTA5MjA1NzM3NDYxNjQ3MzMzNTA4NDMxNTUgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMDUgZXhwIDAuMDAwMDAzNzA4NzQ1MzM2MzkxODM3NTU5ODM5NDkyMDIyOSAtPiAxLjAwMDAwMzcwODc1MjIxMzc5NjMyNDg0MTkyMDE4OTMyMyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIwNiBleHAgMC4wMDIwNDMyMzEyNjg3NTEyNDM4MDQwMjIyNDQ0MTE2NTg1IC0+IDEuMDAyMDQ1MzIwMDg4MTY0ODI2MDEzNTYxNjMwOTc1MzA4IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjA3IGV4cCA2Ljg1NjMxMzM0MDAzMjE3NzY3MjU1MDM0MzIxNjEyOTU4NiAgLT4gOTQ5Ljg1ODc5ODE2MDQxNDQxNDc5ODM1ODk2NjA1MjQzOTYgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMDggZXhwIDAuMDAwMDAwMDAwMDQwMjA5NDkyODMzMzgxNTY0MzMyNjQxOCAtPiAxLjAwMDAwMDAwMDA0MDIwOTQ5MjgzNDE4OTk2NTk4OTYxMiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIwOSBleHAgMC4wMDQ5NjEwNzg0NzIyNDEyMTE3NjMyNjQ3MDAzNTQ1ODM5IC0+IDEuMDA0OTczNDA0OTk3OTAxOTg3MDM5NTg5MDI5Mjc3ODMzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjEwIGV4cCAwLjAwMDA4OTE0NzE4ODM3MjQwNjY5MDk3NDY3ODY3MDI2ODYgLT4gMS4wMDAwODkxNTExNjIxMDEwODU0MTI3ODAwODgyNjY2OTkgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMTEgZXhwIDA4LjU5OTc5MTcwMzc2MDYxODkwNjg0NzIzMjExMTEyNTY2ICAtPiA1NDMwLjUyODMxNDkyMDkwNTcxNDYxNTMzOTI3MzczODA5NyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIxMiBleHAgOS40NzMxMTcwMzkzNDEwMDM4NTQ4NzI3NzgxMTI3NTI1OTAgIC0+IDEzMDA1LjM2MjM0MzMxMjI0OTUzNDYwMDU1ODk3OTEzOTE3IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjEzIGV4cCAwLjA5OTkwNjA3MjQ2OTIyMDc2NDg0Mjk5Njk5OTkzMTAxMTggLT4gMS4xMDUwNjcxMTY5NzUxOTA2MDIyOTYwNTI3MDA3MjY4MDIgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMTQgZXhwIDAuMDAwMDAwMDkyNzgwNDUzMzU1NTg3Nzg4NDA4MjI2OTI0NyAtPiAxLjAwMDAwMDA5Mjc4MDQ1NzY1OTY5NDE4Mzk1NDc0MDc3MiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIxNSBleHAgMC4wMzc2NTc4NTgzODcyODg5OTE2Mjk4NzcyODE4MjY1Njc3IC0+IDEuMDM4Mzc1OTAwNDg5NzcxOTQ2NDc3ODU3ODE4NDQ3NTU2IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjE2IGV4cCAyNjEuNjg5NjQxMTY5NzUzOTUyNDkxMTUzNjExNjcxMjMwNyAgLT4gNC40NzA2MTM1NjIxMjc0NjUwOTUyNDE2MDAxNzQ5NDE0NjBFKzExMyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIxNyBleHAgMC4wNzA5OTk3NDIzMjY5MTYyOTgwODc1ODI0MjEzODg5NjI2IC0+IDEuMDczNTgwOTQ5MjM1NDA3OTQ5NDE3ODE0NDg1NTMzMTcyIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjE4IGV4cCAwLjAwMDAwMDA0NDQ2MDU1ODMyOTUxNjk4OTUyMzU2NTg3MzEgLT4gMS4wMDAwMDAwNDQ0NjA1NTkzMTc4ODc2Mjc2NTc1OTM5MDAgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMTkgZXhwIDAuMDAwMDAyMTIyNDA3Mjg1NDc3NzUxMjI4MTM2OTgxNTE4NSAtPiAxLjAwMDAwMjEyMjQwOTUzNzc4NTY4NzM5MDYzMTA3MDkwNiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIyMCBleHAgNTQ3LjUxNzQ0NjI1NzQxNTY4ODU0NzM1NTg0ODU0NzUwNTIgIC0+IDYuMDc4NjI5MjQ3MzgzODA3OTQyNjEyMTE0NTc5NzI4NjcyRSsyMzcgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMjEgZXhwIDAuMDAwMDAwOTA2NzU5ODA0MTYxNTE5MjAwMjMzOTg0NDY3MCAtPiAxLjAwMDAwMDkwNjc2MDIxNTI2ODMxNDY4MDExNTM3NDM4NyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIyMiBleHAgMC4wMzE2NDc2NTAwMzA4MDY1MzY1ODAzNDU1NTMzMjQ0NjAzIC0+IDEuMDMyMTUzNzYxODgwMTg3OTc3NjU4Mzg3OTYxNzY5MDM0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjIzIGV4cCA4NC40NjE2MDUzMDM3NzY0NTEwMTgzMzk5NjcwNjM4NDQ3MyAgLT4gNC43OTk2NDQ5OTU4OTc5NjgzODM1MDMyNjk4NzE2OTc4NTZFKzM2IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjI0IGV4cCAwLjAwMDAwMDAwMDA1MjA1OTk3NDAyOTA4NDgwMTg5MDQxNDUgLT4gMS4wMDAwMDAwMDAwNTIwNTk5NzQwMzA0Mzk5MjIzMzgzOTMgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMjUgZXhwIDAuMDAwMDAwNjc0ODUzMDY0MDA5MzYyMDY2NTY1MTcyNjcwOCAtPiAxLjAwMDAwMDY3NDg1MzI5MTcyMjc0MjI5MjMzMTgxMjk5NyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIyNiBleHAgMC4wMDAwMDAwMTE2ODUzMTE5NzYxMDQyMDIwNTA3OTE2MTY5IC0+IDEuMDAwMDAwMDExNjg1MzEyMDQ0Mzc3NDYwMzA2MTY1MjAzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjI3IGV4cCAwLjAwMjI1OTM4MTgwOTQyNTg2MzY3Mjc2MTY4ODY2OTMyODAgLT4gMS4wMDIyNjE5MzYxMzU4NzY4OTM3MDcwOTQ4NDU1NDM0NjEgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMjggZXhwIDAuMDAyOTM5ODg1NzY3MzQ3ODkxMjI0OTg1NjUwOTY2NzUxNyAtPiAxLjAwMjk0NDIxMTQ2OTQ5NTA4NjgxMzA4NzY1MTI4NzAxMiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIyOSBleHAgMC43NTExNDgwMDI5OTI4ODAyNzc1Mzc2MjcwNTU3NjM2OTYzIC0+IDIuMTE5NDMxNzM0NTEwMzIwMTY5ODA2OTc2NTY5MzY2Nzg5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjMwIGV4cCAxNzQuOTQzMTk1MjE3Njc1MDY3MTE1MDg4NjQyMzA0ODQ0NyAgLT4gOS40ODEyMjIzMDUzNzQ5NTUwMTE0NjQ2MTk0NjgwNDQwNTFFKzc1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjMxIGV4cCAwLjAwMDA4MTA2MTI0NTE2OTQxMzYxMjkxOTk4OTUxNjQ0MjQgLT4gMS4wMDAwODEwNjQ1MzA3MjA5MjQxODY2MTUxNDk2NDY5MjAgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMzIgZXhwIDUxLjA2ODg4OTg5NzAyNjY5Mjg4MTgwOTQ2MjcyNDk5MDM1ICAtPiAxNTA5ODYxMzg4ODYxOTE2NTA3Mzk1OS44OTg5NjAxODc0OSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIzMyBleHAgMC4wMDAwMDAwMDA1OTkyODg3NTk5NDM3MDkzNjUxNDk0NTEwIC0+IDEuMDAwMDAwMDAwNTk5Mjg4NzYwMTIzMjgyODc0MDgyNzU4IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjM0IGV4cCA3MTQuODU0OTA0Njc2MTA1NDg1NjMxMTEwODgyODkwMzk3MiAgLT4gMi44Njc3NDQ1NDQ4OTEwODExMTczODE1OTUwODA0ODA3ODRFKzMxMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIzNSBleHAgMC4wMDAwMDAwMDA0NDY4MjQ3ODAyOTkwNjQzNjQ1NjA3MTEwIC0+IDEuMDAwMDAwMDAwNDQ2ODI0NzgwMzk4ODkwNTU2NzIwMjMzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjM2IGV4cCA4MzEuNTgxODE1MTU4OTg5MDM2NjMyMzU1MTY3MjA0MzcwOSAgLT4gMS40MTcwNzc0MDkxODI2MjQ5Njk0MzU5MzgwNjIyNjE2NTVFKzM2MSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIzNyBleHAgMC4wMDAwMDAwMDA2ODY4MzIzODI1MTc5NjA1NzQ3MTA4MDQ0IC0+IDEuMDAwMDAwMDAwNjg2ODMyMzgyNzUzODI5OTM1NjAyNDU0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjM4IGV4cCAwLjAwMDAwMDEzMDY3NDAyNjY0MDg5NzY4NDAyMjg0NDAyNTUgLT4gMS4wMDAwMDAxMzA2NzQwMzUxNzg3NDg2NzUxODc2NDgwOTggSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMzkgZXhwIDAuMzE4MjIxMDYwOTAyMjI2NzcwNDgxMTUwMjQxMjMzNTE2MyAtPiAxLjM3NDY4MDExNTY2Nzc5ODE4NTc1ODkyNzI0Nzg5NDg1OSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTI0MCBleHAgMC4wMTQ3NzQxMjM0MTc5MTA0NDM3NDQwMjY0NjQ0Mjk1NTAxIC0+IDEuMDE0ODgzODAwMjM5OTUwNjgyNjI4Mjc3NTM0ODM5MjIyIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIFJhbmRvbXMgUD0xNiwgd2l0aGluIDAtOTkNCi1QcmVjaXNpb246IDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXhweDExMDEgZXhwIDguNDczMDExNTI3MDEzNzI0ICAtPiA0NzgzLjkwMDY0Mzk2OTI0NiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEwMiBleHAgMC4wMDAwMDU1NzUzMDIyNzY0IC0+IDEuMDAwMDA1NTc1MzE3ODE4IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTAzIGV4cCAwLjAwMDAzMjM0NzQxMTQ0ODIgLT4gMS4wMDAwMzIzNDc5MzQ2MzEgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMDQgZXhwIDY0LjU0Mzc0MTM4NTQ0MTY2ICAtPiAxLjA3Mzk2NjQ3NjE3MzUzMUUrMjggSW5leGFjdCBSb3VuZGVkDQotZXhweDExMDUgZXhwIDkwLjQ3MjAzMjQ2NDE2NTY5ICAtPiAxLjk1NjYxMDg4NzI1MDY0M0UrMzkgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMDYgZXhwIDkuMjk5OTMxNTMyMzQyNzU3ICAtPiAxMDkzNy4yNzAzMzMyNTIyNyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEwNyBleHAgOC43NTk2Nzg0Mzc4NTIyMDMgIC0+IDYzNzIuMDYyMjM0NDk1MzgxIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTA4IGV4cCAwLjAwMDA5MzE3NTUxMjcxNzIgLT4gMS4wMDAwOTMxNzk4NTM2OTAgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMDkgZXhwIDAuMDAwMDAyODEwMTE1ODM3MyAtPiAxLjAwMDAwMjgxMDExOTc4NiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTExMCBleHAgMC4wMDAwMDA4MDA4MTMwOTE5IC0+IDEuMDAwMDAwODAwODEzNDEzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTExIGV4cCA4LjMzOTc3MTcyMjI5OTA0OSAgLT4gNDE4Ny4xMzM4MDMwODE4NzggSW5leGFjdCBSb3VuZGVkDQotZXhweDExMTIgZXhwIDAuMDAyNjE0MDQ5Nzk5NTQ3NCAtPiAxLjAwMjYxNzQ2OTQwNjc1MCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTExMyBleHAgMC43NDc4MDMzMzU2MjYxNzcxIC0+IDIuMTEyMzU0NzgxOTc1NDE4IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTE0IGV4cCA1MS43NzY2Mzc2MTgyNzk2NiAgLT4gMy4wNjQxMzU4MDExMjAzNjVFKzIyIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTE1IGV4cCAwLjE1MjQ5ODk3ODMwNjEwMTIgLT4gMS4xNjQ3NDEyNzIwODQ5NTUgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMTYgZXhwIDAuMDA2NjI5ODc5ODY2OTIxOSAtPiAxLjAwNjY1MTkwNjE3MDc5MSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTExNyBleHAgOS45NTUxNDE4NjU1MzQ5NjAgIC0+IDIxMDYwLjIzMzM0Mjg3MDM4IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTE4IGV4cCA5Mi4zNDUwMzA1OTE5ODQ4MyAgLT4gMS4yNzMzMTg5OTM0ODEyMjZFKzQwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTE5IGV4cCAwLjAwMDA3MDkzODg2NzczNDYgLT4gMS4wMDAwNzA5NDEzODM5NTYgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMjAgZXhwIDc5LjEyODgzMDM2NDMzMjA0ICAtPiAyLjMxODUzODg5OTM4OTI0M0UrMzQgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMjEgZXhwIDAuMDAwMDA5MDg4MTU0ODg3MyAtPiAxLjAwMDAwOTA4ODE5NjE4NSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEyMiBleHAgMC4wNDI0ODI4ODA5NjAzNDExIC0+IDEuMDQzMzk4MTk0MjQ1NzIwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTIzIGV4cCAwLjgwMDkwMzU4OTE0Mjc0MTYgLT4gMi4yMjc1NTI4MTE5MzMzMTAgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMjQgZXhwIDguODI1Nzg2MTY3MjgzMTAyICAtPiA2ODA3LjU0MDQ1NTI4OTk5NSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEyNSBleHAgMS41MzU0NTcyNDk3NDYyNzUgIC0+IDQuNjQzNDQ4MjYwMTQ2ODQ5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTI2IGV4cCA2OS4wMjI1NDI1NDM1NTgwMCAgLT4gOS40NjQ3NTQ1MDA2NzA2NTNFKzI5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTI3IGV4cCAwLjAwMDcwNTA1NTQzNjg3MTMgLT4gMS4wMDA3MDUzMDQwNDY4ODAgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMjggZXhwIDAuMDAwMDA4MTIwNjU0OTUwNCAtPiAxLjAwMDAwODEyMDY4NzkyMyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEyOSBleHAgMC42MjE3NzQ4NTQ2NDExMzcgIC0+IDEuODYyMjMwMjk4NTU0OTAzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTMwIGV4cCAzLjg0NzYyOTAzMTQwNDM1NCAgLT4gNDYuODgxNzc2MTM1NjgyMDMgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMzEgZXhwIDI0LjgxMjUwMTg0Njk3NzMyICAtPiA1OTY5NDI2ODQ1Ni4xOTk2NiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEzMiBleHAgNS4xMDc1NDY1MDA1MTYwNDQgIC0+IDE2NS4yNjQzODA5NzU1NjcwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTMzIGV4cCA3OS4xNzgxMDk0Mzk1MTk4NiAgLT4gMi40MzU2NTYzNzI1NDEzNjBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTM0IGV4cCAwLjAwNTEzOTQ2OTU2NjcwMTUgLT4gMS4wMDUxNTI2OTkyOTUzMDEgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMzUgZXhwIDU3LjQ0NTA0NDg4NTAxNzI1ICAtPiA4Ljg3MjkwODU2NjkyOTY4OEUrMjQgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMzYgZXhwIDAuMDAwMDUwODM4ODk2ODAzNiAtPiAxLjAwMDA1MDg0MDE4OTEyMiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEzNyBleHAgNjkuNzEzMDk5MzIxNDg5OTcgIC0+IDEuODg4MDUzNzQwNjkzNTQxRSszMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEzOCBleHAgMC4wMDY0MTgzNDEyOTgxNTAyIC0+IDEuMDA2NDM4OTgyOTg4ODM1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTM5IGV4cCA5LjM0Njk5MTIyMDgxNDY3NyAgLT4gMTE0NjQuMjc4MDIwMzUwODIgSW5leGFjdCBSb3VuZGVkDQotZXhweDExNDAgZXhwIDMzLjA5MDg3MTM5OTk5MTUyICAtPiAyMzUwNjIyMjkxNjg3NjMuNSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBSYW5kb21zIFA9Nywgd2l0aGluIDAtOQ0KLVByZWNpc2lvbjogNw0KLW1heEV4cG9uZW50OiA5Ng0KLW1pbkV4cG9uZW50OiAtOTUNCi1leHB4MTAwMSBleHAgMi4zOTU0NDEgIC0+IDEwLjk3MzA0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDAyIGV4cCAwLjY0MDY3NzkgLT4gMS44OTc3NjcgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMDMgZXhwIDAuNTYxODIxOCAtPiAxLjc1Mzg2NSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAwNCBleHAgMy4wNTUxMjAgIC0+IDIxLjIyMzczIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDA1IGV4cCAxLjUzNjc5MiAgLT4gNC42NDk2NTAgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMDYgZXhwIDAuMDgwMTU5MSAtPiAxLjA4MzQ1OSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAwNyBleHAgMC4wOTY2ODc1IC0+IDEuMTAxNTE2IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDA4IGV4cCAwLjA2NDY3NjEgLT4gMS4wNjY4MTMgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMDkgZXhwIDAuMDA5NTY3MCAtPiAxLjAwOTYxMyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAxMCBleHAgMi45NTY4NTkgIC0+IDE5LjIzNzQ1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDExIGV4cCA3LjUwNDY3OSAgLT4gMTgxNi41MjIgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMTIgZXhwIDAuMDA0NTI1OSAtPiAxLjAwNDUzNiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAxMyBleHAgMy44MTAwNzEgIC0+IDQ1LjE1MzY0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDE0IGV4cCAxLjUwMjM5MCAgLT4gNC40OTI0MTMgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMTUgZXhwIDAuMDMyMTUyMyAtPiAxLjAzMjY3NSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAxNiBleHAgMC4wMDU3MjE0IC0+IDEuMDA1NzM4IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDE3IGV4cCA5LjgxMTQ0NSAgLT4gMTgyNDEuMzMgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMTggZXhwIDMuMjQ1MjQ5ICAtPiAyNS42NjgxMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAxOSBleHAgMC4zMTg5NzQyIC0+IDEuMzc1NzE2IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDIwIGV4cCAwLjg2MjE2MTAgLT4gMi4zNjgyNzMgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMjEgZXhwIDAuMDEyMjUxMSAtPiAxLjAxMjMyNiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAyMiBleHAgMi4yMDIwODggIC0+IDkuMDQzODc3IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDIzIGV4cCA4Ljc3ODIwMyAgLT4gNjQ5MS4yMDIgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMjQgZXhwIDAuMTg5NjI3OSAtPiAxLjIwODgwMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAyNSBleHAgMC40NTEwOTQ3IC0+IDEuNTcwMDMwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDI2IGV4cCAwLjI3NjQxMyAgLT4gMS4zMTgzOTIgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMjcgZXhwIDQuNDkwMDY3ICAtPiA4OS4xMjc0MiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAyOCBleHAgMC4wNDM5Nzg2IC0+IDEuMDQ0OTYwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDI5IGV4cCAwLjgxNjgyNDUgLT4gMi4yNjMzMDEgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMzAgZXhwIDAuMDM5MTY1OCAtPiAxLjAzOTk0MyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAzMSBleHAgOS4yNjE4MTYgIC0+IDEwNTI4LjI0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDMyIGV4cCA5LjYxMTE4NiAgLT4gMTQ5MzAuODcgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMzMgZXhwIDkuMTE4MTI1ICAtPiA5MTE5LjA4NyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAzNCBleHAgOS40NjkwODMgIC0+IDEyOTUzLjAwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDM1IGV4cCAwLjA0OTk5ODMgLT4gMS4wNTEyNjkgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMzYgZXhwIDAuMDA1MDc0NiAtPiAxLjAwNTA4NyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAzNyBleHAgMC4wMDE0Njk2IC0+IDEuMDAxNDcxIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDM4IGV4cCA5LjEzODQ5NCAgLT4gOTMwNi43MzkgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMzkgZXhwIDAuMDA2NTQzNiAtPiAxLjAwNjU2NSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTA0MCBleHAgMC43Mjg0ODAzIC0+IDIuMDcxOTMwIEluZXhhY3QgUm91bmRlZA0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZXhwLmRlY1Rlc3QgLS0gZGVjaW1hbCBuYXR1cmFsIGV4cG9uZW50aWF0aW9uICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUZXN0cyBvZiB0aGUgZXhwb25lbnRpYWwgZnVudGlvbi4gIEN1cnJlbnRseSBhbGwgdGVzdGNhc2VzIGhlcmUKKy0tIHNob3cgcmVzdWx0cyB3aGljaCBhcmUgY29ycmVjdGx5IHJvdW5kZWQgKHdpdGhpbiA8PSAwLjUgdWxwKS4KKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBiYXNpY3MgKGV4YW1wbGVzIGluIHNwZWNpZmljaWF0aW9uLCBldGMuKQorZXhweDAwMSBleHAgIC1JbmZpbml0eSAgICAgLT4gMAorZXhweDAwMiBleHAgIC0xMCAgICAgICAgICAgLT4gMC4wMDAwNDUzOTk5Mjk4IEluZXhhY3QgUm91bmRlZAorZXhweDAwMyBleHAgIC0xICAgICAgICAgICAgLT4gMC4zNjc4Nzk0NDEgSW5leGFjdCBSb3VuZGVkCitleHB4MDA0IGV4cCAgIDAgICAgICAgICAgICAtPiAxCitleHB4MDA1IGV4cCAgLTAgICAgICAgICAgICAtPiAxCitleHB4MDA2IGV4cCAgIDEgICAgICAgICAgICAtPiAyLjcxODI4MTgzICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMDcgZXhwICAgMC42OTMxNDcxODEgIC0+IDIuMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAwOCBleHAgICAxMCAgICAgICAgICAgLT4gMjIwMjYuNDY1OCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDA5IGV4cCAgK0luZmluaXR5ICAgICAtPiBJbmZpbml0eQorCistLSB0aW55IGVkZ2UgY2FzZXMKK3ByZWNpc2lvbjogICA3CitleHB4MDExIGV4cCAgMC4xICAgICAgICAgIC0+ICAxLjEwNTE3MSAgSW5leGFjdCBSb3VuZGVkCitleHB4MDEyIGV4cCAgMC4wMSAgICAgICAgIC0+ICAxLjAxMDA1MCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDEzIGV4cCAgMC4wMDEgICAgICAgIC0+ICAxLjAwMTAwMSAgSW5leGFjdCBSb3VuZGVkCitleHB4MDE0IGV4cCAgMC4wMDAxICAgICAgIC0+ICAxLjAwMDEwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDE1IGV4cCAgMC4wMDAwMSAgICAgIC0+ICAxLjAwMDAxMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDE2IGV4cCAgMC4wMDAwMDEgICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitleHB4MDE3IGV4cCAgMC4wMDAwMDAxICAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDE4IGV4cCAgMC4wMDAwMDAzICAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDE5IGV4cCAgMC4wMDAwMDA0ICAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDIwIGV4cCAgMC4wMDAwMDA1ICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitleHB4MDIxIGV4cCAgMC4wMDAwMDA4ICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitleHB4MDIyIGV4cCAgMC4wMDAwMDA5ICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitleHB4MDIzIGV4cCAgMC4wMDAwMDEwICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitleHB4MDI0IGV4cCAgMC4wMDAwMDExICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitleHB4MDI1IGV4cCAgMC4wMDAwMDAwOSAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDI2IGV4cCAgMC4wMDAwMDAwNSAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDI3IGV4cCAgMC4wMDAwMDAwNCAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDI4IGV4cCAgMC4wMDAwMDAwMSAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUgemVyb3MKK2V4cHgwMzAgZXhwICAwLjAwMDAwMDAwICAgLT4gIDEKK2V4cHgwMzEgZXhwICAwRSsxMDAgICAgICAgLT4gIDEKK2V4cHgwMzIgZXhwICAwRS0xMDAgICAgICAgLT4gIDEKK2V4cHgwMzMgZXhwIC0wLjAwMDAwMDAwICAgLT4gIDEKK2V4cHgwMzQgZXhwIC0wRSsxMDAgICAgICAgLT4gIDEKK2V4cHgwMzUgZXhwIC0wRS0xMDAgICAgICAgLT4gIDEKKworLS0gYmFzaWMgZT0wLCBlPTEsIGU9MiwgZT00LCBlPj04IGNhc2VzCitwcmVjaXNpb246ICAgNworZXhweDA0MSBleHAgIDEgICAgICAgICAgLT4gIDIuNzE4MjgyICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNDIgZXhwIC0xICAgICAgICAgIC0+ICAwLjM2Nzg3OTQgSW5leGFjdCBSb3VuZGVkCitleHB4MDQzIGV4cCAgMTAgICAgICAgICAtPiAgMjIwMjYuNDcgIEluZXhhY3QgUm91bmRlZAorZXhweDA0NCBleHAgLTEwICAgICAgICAgLT4gIDAuMDAwMDQ1Mzk5OTMgSW5leGFjdCBSb3VuZGVkCitleHB4MDQ1IGV4cCAgMTAwICAgICAgICAtPiAgMi42ODgxMTdFKzQzICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNDYgZXhwIC0xMDAgICAgICAgIC0+ICAzLjcyMDA3NkUtNDQgIEluZXhhY3QgUm91bmRlZAorZXhweDA0NyBleHAgIDEwMDAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDA0OCBleHAgLTEwMDAgICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCitleHB4MDQ5IGV4cCAgMTAwMDAwMDAwICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4MDUwIGV4cCAtMTAwMDAwMDAwICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKKworLS0gbWlzY2VsbGFuZWEKKy0tIHNpbWlsYXIgdG8gJ1ZGIGJ1ZycgdGVzdCwgYXQgMTcsIGJ1dCB3aXRoIGxhc3QgZGlnaXQgY29ycmVjdGVkIGZvciBkZWNpbWFsCitwcmVjaXNpb246IDE2CitleHB4MDU1IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MkUtMjM2IEluZXhhY3QgUm91bmRlZAorLS0gIHJlc3VsdCBmcm9tIE5ldFJleHgvSmF2YSBwcm90b3R5cGUgLT4gMi43MTc2NTg0ODY4ODQ1NzIxMTE3Njc3OTI5NjI4NjE3MjQ2MDU0NDU5NjQ0NzExMTA4RS0yMzYKKy0tICAgcmVzdWx0IGZyb20gUmV4eCAoc2VyaWVzKSB2ZXJzaW9uIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTExNzY3NzkyOTYyODYxNzI0NjA1NDQ2RS0yMzYKK3ByZWNpc2lvbjogMTcKK2V4cHgwNTYgZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyMUUtMjM2IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOAorZXhweDA1NyBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzIxMUUtMjM2IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOQorZXhweDA1OCBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzIxMTJFLTIzNiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK2V4cHgwNTkgZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTExOEUtMjM2IEluZXhhY3QgUm91bmRlZAorCistLSByb3VuZGluZyBpbiBhcmVhcyBvZiAuLjUwMC4uLCAuLjQ5OS4uLCAuLjEwMC4uLCAuLjk5OS4uIHNlcXVlbmNlcworcHJlY2lzaW9uOiAgIDUwCitleHB4MTAxIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMjczMzc0OTk1MDc5MjUwMDczODExIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDMxCitleHB4MTAyIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMjcgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMzAKK2V4cHgxMDMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAzICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyOQorZXhweDEwNCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMCAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI4CitleHB4MTA1IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjcKK2V4cHgxMDYgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyNgorZXhweDEwNyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MCAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI1CitleHB4MTA4IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjQKK2V4cHgxMDkgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMworZXhweDExMCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4OCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDIyCitleHB4MTExIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTkgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjEKK2V4cHgxMTIgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUwMDAwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMAorZXhweDExMyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAwMCAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE5CitleHB4MTE0IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTgKK2V4cHgxMTUgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUwICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNworZXhweDExNiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNSAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE2CitleHB4MTE3IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTUKK2V4cHgxMTggZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNAorZXhweDExOSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDEzCitleHB4MTIwIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTIKK2V4cHgxMjEgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMQorZXhweDEyMiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMCAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDEwCitleHB4MTIzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDkKK2V4cHgxMjQgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgOAorZXhweDEyNSBleHAgLTlFLTggLT4gMC45OTk5OTk5MSAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA3CitleHB4MTI2IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDYKK2V4cHgxMjcgZXhwIC05RS04IC0+IDEuMDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNQorZXhweDEyOCBleHAgLTlFLTggLT4gMS4wMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA0CitleHB4MTI5IGV4cCAtOUUtOCAtPiAxLjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDMKK2V4cHgxMzAgZXhwIC05RS04IC0+IDEuMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMgorZXhweDEzMSBleHAgLTlFLTggLT4gMS4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAxCitleHB4MTMyIGV4cCAtOUUtOCAtPiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKworLS0gc2FuaXR5IGNoZWNrcywgd2l0aCBpdGVyYXRpb24gY291bnRzIFtub3JtYWxpemVkIHNvIDA8PXx4fDwxXQorcHJlY2lzaW9uOiAgIDUwCisKK2V4cHgyMTAgZXhwIDAgLT4gMQorLS0gaXRlcmF0aW9uczogMgorZXhweDIxMSBleHAgLTFFLTQwIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiA4CitleHB4MjEyIGV4cCAtOUUtNyAtPiAwLjk5OTk5OTEwMDAwMDQwNDk5OTg3ODUwMDAyNzMzNzQ5NTA3OTI1MDczODExMjQwNTEwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogNgorZXhweDIxMyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDI3MzM3NDk5NTA3OTI1MDA3MzgxMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDE1CitleHB4MjE0IGV4cCAtMC4wMDMgLT4gMC45OTcwMDQ0OTU1MDMzNzI5NzYwMTIwNjYyMzQwOTc1NjA5MTA3NDE3NzQ4MDQ4OTg0NSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDE0CitleHB4MjE1IGV4cCAtMC4wMDEgLT4gMC45OTkwMDA0OTk4MzMzNzQ5OTE2NjgwNTUzNTcxNjc2NTU5NzQ3MDIzNTU5MDIzNjAwOCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjE2IGV4cCAtMC4xIC0+IDAuOTA0ODM3NDE4MDM1OTU5NTczMTY0MjQ5MDU5NDQ2NDM2NjIxMTk0NzA1MzYwOTgwNDAgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAzOQorZXhweDIxNyBleHAgLTAuNyAtPiAwLjQ5NjU4NTMwMzc5MTQwOTUxNDcwNDgwMDA5MzM5NzUyODk2MTcwNzY2NzE2NTcxMTgyIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogNDEKK2V4cHgyMTggZXhwIC0wLjkgLT4gMC40MDY1Njk2NTk3NDA1OTkxMTE4ODM0NTQyMzk2NDU2MjU5ODc4MzM3MDMzNzYxNzAzOCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDQzCitleHB4MjE5IGV4cCAtMC45OSAtPiAwLjM3MTU3NjY5MTAyMjA0NTY5MDUzMTUyNDExOTkwODIwMTM4NjkxODAyODg1NDkwNTAxIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyMjAgZXhwIC0xIC0+IDAuMzY3ODc5NDQxMTcxNDQyMzIxNTk1NTIzNzcwMTYxNDYwODY3NDQ1ODExMTMxMDMxNzcgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNgorZXhweDIyMSBleHAgLTEuMDEgLT4gMC4zNjQyMTg5Nzk1NzE1MjMzMTk3NTcwNDYyOTU2MzczNDU0ODk1OTU4OTEzOTE5MjQ4MiBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI3CitleHB4MjIyIGV4cCAtMS4xIC0+IDAuMzMyODcxMDgzNjk4MDc5NTUzMjg4ODQ2OTA2NDMxMzE1NTIxNjEyNDc5NTIxNTY5MjEgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOAorZXhweDIyMyBleHAgLTEuNSAtPiAwLjIyMzEzMDE2MDE0ODQyOTgyODkzMzI4MDQ3MDc2NDAxMjUyMTM0MjE3MTYyOTM2MTA4IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMzAKK2V4cHgyMjQgZXhwIC0yIC0+IDAuMTM1MzM1MjgzMjM2NjEyNjkxODkzOTk5NDk0OTcyNDg0NDAzNDA3NjMxNTQ1OTA5NTggSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAzNgorZXhweDIyNSBleHAgLTUgLT4gMC4wMDY3Mzc5NDY5OTkwODU0NjcwOTY2MzYwNDg0MjMxNDg0MjQyNDg4NDk1ODUwMjczNTUxIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyMjYgZXhwIC0xMCAtPiAwLjAwMDA0NTM5OTkyOTc2MjQ4NDg1MTUzNTU5MTUxNTU2MDU1MDYxMDIzNzkxODA4ODg2NjU2NSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI4CitleHB4MjI3IGV4cCAtMTQgLT4gOC4zMTUyODcxOTEwMzU2Nzg4NDA2Mzk4NTE0MjU2NTI2MjI5NDYwNzY1ODM2NDk4NDU3RS03IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjkKK2V4cHgyMjggZXhwIC0xNSAtPiAzLjA1OTAyMzIwNTAxODI1Nzg4MzcxNDc5NDk3NzAyMjg5NjM5MzcwODIwNzgwODE4NTZFLTcgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAzMAorZXhweDIzMyBleHAgMCAtPiAxCistLSBpdGVyYXRpb25zOiAyCitleHB4MjM0IGV4cCAxRS00MCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiA3CitleHB4MjM1IGV4cCA5RS03IC0+IDEuMDAwMDAwOTAwMDAwNDA1MDAwMTIxNTAwMDI3MzM3NTA0OTIwNzUwNzM4MTEyNTk0OSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDYKK2V4cHgyMzYgZXhwIDlFLTggLT4gMS4wMDAwMDAwOTAwMDAwMDQwNTAwMDAxMjE1MDAwMDI3MzM3NTAwNDkyMDc1MDA3MzgxIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMTUKK2V4cHgyMzcgZXhwIDAuMDAzIC0+IDEuMDAzMDA0NTA0NTAzMzc3MDI2MDEyOTM0MDkxMzQ4OTAwMjA1MzMxODcyNzE5NTYxOSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDEzCitleHB4MjM4IGV4cCAwLjAwMSAtPiAxLjAwMTAwMDUwMDE2NjcwODM0MTY2ODA1NTc1Mzk5MzA1ODMxMTU2MzA3NjIwMDU4MDcgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNQorZXhweDIzOSBleHAgMC4xIC0+IDEuMTA1MTcwOTE4MDc1NjQ3NjI0ODExNzA3ODI2NDkwMjQ2NjY4MjI0NTQ3MTk0NzM3NSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDM4CitleHB4MjQwIGV4cCAwLjcgLT4gMi4wMTM3NTI3MDc0NzA0NzY1MjE2MjQ1NDkzODg1ODMwNjUyNzAwMTc1NDIzOTQxNDU5IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogNDEKK2V4cHgyNDEgZXhwIDAuOSAtPiAyLjQ1OTYwMzExMTE1Njk0OTY2MzgwMDEyNjU2MzYwMjQ3MDY5NTQyMTc3MjMwNjQ0MDEgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiA0MgorZXhweDI0MiBleHAgMC45OSAtPiAyLjY5MTIzNDQ3MjM0OTI2MjI4OTA5OTg3OTQwNDA3MTAxMzk3MjE4MDI5MzE4NDEwMzAgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNgorZXhweDI0MyBleHAgMSAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MjQ5Nzc1NzI0NzA5MzcwMDAgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNgorZXhweDI0NCBleHAgMS4wMSAtPiAyLjc0NTYwMTAxNTAxNjkxNjQ5Mzk4OTc3NjMxNjY2MDM4NzYyNDA3Mzc1MDgxOTU5NjAgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNgorZXhweDI0NSBleHAgMS4xIC0+IDMuMDA0MTY2MDIzOTQ2NDMzMTEyMDU4NDA3OTUzNTg4NjcyMzkzMjgyNjgxMDI2MDE2MyBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI4CitleHB4MjQ2IGV4cCAxLjUgLT4gNC40ODE2ODkwNzAzMzgwNjQ4MjI2MDIwNTU0NjAxMTkyNzU4MTkwMDU3NDk4NjgzNjk3IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjkKK2V4cHgyNDcgZXhwIDIgLT4gNy4zODkwNTYwOTg5MzA2NTAyMjcyMzA0Mjc0NjA1NzUwMDc4MTMxODAzMTU1NzA1NTE4IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMzYKK2V4cHgyNDggZXhwIDUgLT4gMTQ4LjQxMzE1OTEwMjU3NjYwMzQyMTExNTU4MDA0MDU1MjI3OTYyMzQ4NzY2NzU5Mzg4IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyNDkgZXhwIDEwIC0+IDIyMDI2LjQ2NTc5NDgwNjcxNjUxNjk1NzkwMDY0NTI4NDI0NDM2NjM1MzUxMjYxODU1NyBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI4CitleHB4MjUwIGV4cCAxNCAtPiAxMjAyNjA0LjI4NDE2NDc3Njc3Nzc0OTIzNjc3MDc2Nzg1OTQ0OTQxMjQ4NjU0MzM3NjEgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOAorZXhweDI1MSBleHAgMTUgLT4gMzI2OTAxNy4zNzI0NzIxMTA2MzkzMDE4NTUwNDYwOTE3MjEzMTU1MDU3Mzg1NDM4MjAwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjkKKworLS0gYSBiaWdnaWUgW3Jlc3VsdCB2ZXJpZmllZCAzIHdheXNdCitwcmVjaXNpb246IDI1MAorZXhweDI2MCBleHAgMSAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MjQ5Nzc1NzI0NzA5MzY5OTk1OTU3NDk2Njk2NzYyNzcyNDA3NjYzMDM1MzU0NzU5NDU3MTM4MjE3ODUyNTE2NjQyNzQyNzQ2NjM5MTkzMjAwMzA1OTkyMTgxNzQxMzU5NjYyOTA0MzU3MjkwMDMzNDI5NTI2MDU5NTYzMDczODEzMjMyODYyNzk0MzQ5MDc2MzIzMzgyOTg4MDc1MzE5NTI1MTAxOTAxMTU3MzgzNDE4NzkzMDcwMjE1NDA4OTE0OTkzNDg4NDE2NzUwOTI0NDc2MTQ2MDY2OCBJbmV4YWN0IFJvdW5kZWQKKworLS0gZXh0cmVtZSByYW5nZSBib3VuZGFyaWVzCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiA5OTk5OTkKK21pbkV4cG9uZW50OiAtOTk5OTk5CistLSBOdGlueSBib3VuZGFyeQorZXhweDI5MCBleHAgIC0yMzAyNjE4LjAyMjMzMjUyOSAtPiAwRS0xMDAwMDE0IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2V4cHgyOTEgZXhwICAtMjMwMjYxOC4wMjIzMzI1MjggLT4gMUUtMTAwMDAxNCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorLS0gTm1heC8xMCBhbmQgTm1heCBib3VuZGFyeQorZXhweDI5MiBleHAgIDIzMDI1ODIuNzkwNDA4OTUyIC0+IDkuOTk5OTk5OTkzMTAwMjc3RSs5OTk5OTggIEluZXhhY3QgUm91bmRlZAorZXhweDI5MyBleHAgIDIzMDI1ODIuNzkwNDA4OTUzIC0+IDEuMDAwMDAwMDAwMzEwMDI4RSs5OTk5OTkgIEluZXhhY3QgUm91bmRlZAorZXhweDI5NCBleHAgIDIzMDI1ODUuMDkyOTkzOTQ2IC0+IDkuOTk5OTk5MDAzMTU5ODcwRSs5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitleHB4Mjk1IGV4cCAgMjMwMjU4NS4wOTI5OTQwMzYgLT4gOS45OTk5OTk5MDMxNTk4MjFFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgyOTYgZXhwICAyMzAyNTg1LjA5Mjk5NDA0NSAtPiA5Ljk5OTk5OTk5MzE1OTgyMEUrOTk5OTk5IEluZXhhY3QgUm91bmRlZAorZXhweDI5NyBleHAgIDIzMDI1ODUuMDkyOTk0MDQ2IC0+IEluZmluaXR5IE92ZXJmbG93ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIDA8LXg8PDEgZWZmZWN0cworcHJlY2lzaW9uOiAgICAzMAorZXhweDMyMCBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI1MDAwMDk3OTE2NjYxNyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMjEgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNDk5OTk5NzkxNjY2NjcgSW5leGFjdCBSb3VuZGVkCitleHB4MzIyIGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjQ5OTk4OTc5MTY2NzE3IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAyMAorZXhweDMyMyBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI1MDAwIEluZXhhY3QgUm91bmRlZAorZXhweDMyNCBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI1MDAwIEluZXhhY3QgUm91bmRlZAorZXhweDMyNSBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI1MDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAxNAorZXhweDMyNiBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwIEluZXhhY3QgUm91bmRlZAorZXhweDMyNyBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwIEluZXhhY3QgUm91bmRlZAorZXhweDMyOCBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwIEluZXhhY3QgUm91bmRlZAorLS0gb3ZlcnByZWNpc2UgYW5kIDA8LXg8PDEKK3ByZWNpc2lvbjogICAgOAorZXhweDMzMCBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAwLjk5OTk5OTk1ICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDMzMSBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAwLjk5OTk5OTk1ICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDMzMiBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAwLjk5OTk5OTk1ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA3CitleHB4MzMzIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzM0IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzM1IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDMKK2V4cHgzMzYgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMzcgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMzggZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gMDx4PDwxIGVmZmVjdHMKK3ByZWNpc2lvbjogICAgMzAKK2V4cHgzNDAgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNDk5OTkwMjA4MzMyOCAgSW5leGFjdCBSb3VuZGVkCitleHB4MzQxIGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMDAwMDIwODMzMzMgIEluZXhhY3QgUm91bmRlZAorZXhweDM0MiBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAwMTAyMDgzMzM4ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMjAKK2V4cHgzNDMgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNDQgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNDUgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMTQKK2V4cHgzNDYgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAwNTAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNDcgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAwNTAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNDggZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAwNTAwMDAwICBJbmV4YWN0IFJvdW5kZWQKKy0tIG92ZXJwcmVjaXNlIGFuZCAwPHg8PDEKK3ByZWNpc2lvbjogICAgOAorZXhweDM1MCBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDEgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDM1MSBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDEgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDM1MiBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMDEgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA3CitleHB4MzUzIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzU0IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzU1IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDMKK2V4cHgzNTYgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNTcgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNTggZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gY2FzZXMgbmVhciAxICAgICAgICAgICAgICAtLSAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwCitwcmVjaXNpb246ICAgIDIwCitleHB4NDAxIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcxODI4MTgyODQ1ODkzNjUwNDEgIEluZXhhY3QgUm91bmRlZAorZXhweDQwMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43MTgyODE4Mjg0NTg5NjM2ODY5ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MDMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNzE4MjgxODI4NDU4OTkwODY5NyAgSW5leGFjdCBSb3VuZGVkCitleHB4NDA0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcxODI4MTgyODQ1OTAxODA1MjUgIEluZXhhY3QgUm91bmRlZAorZXhweDQwNSBleHAgMS4wMDAwMDAwMDAwMDAwICAgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzU0ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MDYgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNzE4MjgxODI4NDU5MzE3MDYzNSAgSW5leGFjdCBSb3VuZGVkCitleHB4NDA3IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcxODI4MTgyODQ1OTU4ODg5MTcgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAxNAorZXhweDQxMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43MTgyODE4Mjg0NTg5ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MTIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNzE4MjgxODI4NDU5MCAgSW5leGFjdCBSb3VuZGVkCitleHB4NDEzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZAorZXhweDQxNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MTUgZXhwIDEuMDAwMDAwMDAwMDAwMCAgIC0+IDIuNzE4MjgxODI4NDU5MCAgSW5leGFjdCBSb3VuZGVkCitleHB4NDE2IGV4cCAxLjAwMDAwMDAwMDAwMDEgICAtPiAyLjcxODI4MTgyODQ1OTMgIEluZXhhY3QgUm91bmRlZAorZXhweDQxNyBleHAgMS4wMDAwMDAwMDAwMDAyICAgLT4gMi43MTgyODE4Mjg0NTk2ICBJbmV4YWN0IFJvdW5kZWQKKy0tIG92ZXJwcmVjaXNlLi4uCitwcmVjaXNpb246ICAgIDcKK2V4cHg0MjEgZXhwIDAuOTk5OTk5OTk5OTk5OTYgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDIyIGV4cCAwLjk5OTk5OTk5OTk5OTk3ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQyMyBleHAgMC45OTk5OTk5OTk5OTk5OCAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MjQgZXhwIDAuOTk5OTk5OTk5OTk5OTkgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDI1IGV4cCAxLjAwMDAwMDAwMDAwMDEgICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQyNiBleHAgMS4wMDAwMDAwMDAwMDAyICAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MjcgZXhwIDEuMDAwMDAwMDAwMDAwMyAgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDIKK2V4cHg0MzEgZXhwIDAuOTk5OTk5OTk5OTk5OTYgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDMyIGV4cCAwLjk5OTk5OTk5OTk5OTk3ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQzMyBleHAgMC45OTk5OTk5OTk5OTk5OCAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MzQgZXhwIDAuOTk5OTk5OTk5OTk5OTkgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDM1IGV4cCAxLjAwMDAwMDAwMDAwMDEgICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQzNiBleHAgMS4wMDAwMDAwMDAwMDAyICAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MzcgZXhwIDEuMDAwMDAwMDAwMDAwMyAgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGJhc2ljcyBhdCBsb3cgcHJlY2lzaW9ucworcHJlY2lzaW9uOiAzCitleHB4NTAxIGV4cCAgLUluZmluaXR5ICAgICAtPiAwCitleHB4NTAyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA0NTQgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MDMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuMzY4ICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUwNCBleHAgICAwICAgICAgICAgICAgLT4gMQorZXhweDUwNSBleHAgIC0wICAgICAgICAgICAgLT4gMQorZXhweDUwNiBleHAgICAxICAgICAgICAgICAgLT4gMi43MiAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTA3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyLjAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MDggZXhwICAgMTAgICAgICAgICAgIC0+IDIuMjBFKzQgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUwOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkKK3ByZWNpc2lvbjogMgorZXhweDUxMSBleHAgIC1JbmZpbml0eSAgICAgLT4gMAorZXhweDUxMiBleHAgIC0xMCAgICAgICAgICAgLT4gMC4wMDAwNDUgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTEzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjM3ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MTQgZXhwICAgMCAgICAgICAgICAgIC0+IDEKK2V4cHg1MTUgZXhwICAtMCAgICAgICAgICAgIC0+IDEKK2V4cHg1MTYgZXhwICAgMSAgICAgICAgICAgIC0+IDIuNyAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUxNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMi4wICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTE4IGV4cCAgIDEwICAgICAgICAgICAtPiAyLjJFKzQgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MTkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5CitwcmVjaXNpb246IDEKK2V4cHg1MjEgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKK2V4cHg1MjIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDUgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUyMyBleHAgIC0xICAgICAgICAgICAgLT4gMC40ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTI0IGV4cCAgIDAgICAgICAgICAgICAtPiAxCitleHB4NTI1IGV4cCAgLTAgICAgICAgICAgICAtPiAxCitleHB4NTI2IGV4cCAgIDEgICAgICAgICAgICAtPiAzICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MjcgZXhwICAgMC42OTMxNDcxODEgIC0+IDIgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUyOCBleHAgICAxMCAgICAgICAgICAgLT4gMkUrNCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTI5IGV4cCAgK0luZmluaXR5ICAgICAtPiBJbmZpbml0eQorCistLSBvdmVyZmxvd3MsIGluY2x1ZGluZyBzb21lIG92ZXJwcmVjaXNlIGJvcmRlcmxpbmVzCitwcmVjaXNpb246ICAgNworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4cHg3MDEgZXhwICAxMDAwMDAwMDAwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MDIgZXhwICAxMDAwMDAwMDAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MDMgZXhwICAxMDAwMDAwMCAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MDQgZXhwICAxMDAwMDAwICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MDUgZXhwICAxMDAwMDAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MDYgZXhwICAxMDAwMCAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MDcgZXhwICAxMDAwICAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MDggZXhwICA4ODYuNDk1MjYwOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MDkgZXhwICA4ODYuNDk1MjYwNyAtPiA5Ljk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZXhweDcxMCBleHAgIDg4Ni40OTUyNyAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcxMSBleHAgIDg4Ni40OTUyNiAgIC0+IDkuOTk5OTkyRSszODQgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTYKK2V4cHg3MjEgZXhwICA4ODYuNDk1MjYwODAyNzA3NTg4MyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MjIgZXhwICA4ODYuNDk1MjYwODAyNzA3NTg4MiAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZXhweDcyMyBleHAgIDg4Ni40OTUyNjA4MDI3MDc1OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcyNCBleHAgIDg4Ni40OTUyNjA4MDI3MDc1OCAgIC0+IDkuOTk5OTk5OTk5OTk5OTE3RSszODQgSW5leGFjdCBSb3VuZGVkCitleHB4NzI1IGV4cCAgODg2LjQ5NTI2MDgwMjcwNzYgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzI2IGV4cCAgODg2LjQ5NTI2MDgwMjcwNzUgICAgLT4gOS45OTk5OTk5OTk5OTkxMTdFKzM4NCBJbmV4YWN0IFJvdW5kZWQKKy0tIGFuZCBieSBzcGVjaWFsIHJlcXVlc3QgLi4uCitwcmVjaXNpb246ICAgMTUKK2V4cHg3MzEgZXhwICA4ODYuNDk1MjYwODAyNzA4ICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MzIgZXhwICA4ODYuNDk1MjYwODAyNzA3ICAgICAtPiA5Ljk5OTk5OTk5OTk5NDEyRSszODQgSW5leGFjdCBSb3VuZGVkCitleHB4NzMzIGV4cCAgODg2LjQ5NTI2MDgwMjcwNiAgICAgLT4gOS45OTk5OTk5OTk5ODQxMkUrMzg0IEluZXhhY3QgUm91bmRlZAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKK2V4cHg3MzUgZXhwICAyMzAyLjU4NTA5Mjk5NDA1ICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDczNiBleHAgIDIzMDIuNTg1MDkyOTk0MDQgICAgLT4gOS45OTk5OTk5OTk5NDMxNkUrOTk5IEluZXhhY3QgUm91bmRlZAorZXhweDczNyBleHAgIDIzMDIuNTg1MDkyOTk0MDMgICAgLT4gOS45OTk5OTk5OTk4NDMxNkUrOTk5IEluZXhhY3QgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3dzLCBpbmNsdWRpbmcgdW5kZXJmbG93LXRvLXplcm8gZWRnZSBwb2ludAorcHJlY2lzaW9uOiAgIDcKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHB4NzUxIGV4cCAtMTAwMDAwMDAwMCAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDc1MiBleHAgLTEwMDAwMDAwMCAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHg3NTMgZXhwIC0xMDAwMDAwMCAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCitleHB4NzU0IGV4cCAtMTAwMDAwMCAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDc1NSBleHAgLTEwMDAwMCAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHg3NTYgZXhwIC0xMDAwMCAgICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCitleHB4NzU3IGV4cCAtMTAwMCAgICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDc1OCBleHAgLTg4MS44OTAwOSAgICAtPiAgMS4wMDAwMDFFLTM4MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3NTkgZXhwIC04ODEuODkwMSAgICAgLT4gIDkuOTk5OTFFLTM4NCAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NjAgZXhwIC04ODUgICAgICAgICAgLT4gIDQuNDYwNUUtMzg1ICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NjEgZXhwIC04ODggICAgICAgICAgLT4gIDIuMjIxRS0zODYgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NjIgZXhwIC04OTAgICAgICAgICAgLT4gIDMuMDFFLTM4NyAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NjMgZXhwIC04OTIuOSAgICAgICAgLT4gIDEuN0UtMzg4ICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NjQgZXhwIC04OTMgICAgICAgICAgLT4gIDEuNUUtMzg4ICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NjUgZXhwIC04OTMuNSAgICAgICAgLT4gIDlFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NjYgZXhwIC04OTUuNzA1NiAgICAgLT4gIDFFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NjkgZXhwIC04OTUuOCAgICAgICAgLT4gIDFFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NzAgZXhwIC04OTUuNzMgICAgICAgLT4gIDFFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NzEgZXhwIC04OTYuMzk4NyAgICAgLT4gIDFFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2V4cHg3NzIgZXhwIC04OTYuMzk4OCAgICAgLT4gIDBFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAorZXhweDc3MyBleHAgLTg5OC4wMDgxICAgICAtPiAgMEUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCitleHB4Nzc0IGV4cCAtODk4LjAwODIgICAgIC0+ICAwRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKKworLS0gc3BlY2lhbCB2YWx1ZXMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitleHB4ODIwIGV4cCAgIEluZiAgICAtPiBJbmZpbml0eQorZXhweDgyMSBleHAgIC1JbmYgICAgLT4gMAorZXhweDgyMiBleHAgICBOYU4gICAgLT4gTmFOCitleHB4ODIzIGV4cCAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2V4cHg4MjQgZXhwICBzTmFOMTIzIC0+ICBOYU4xMjMgSW52YWxpZF9vcGVyYXRpb24KK2V4cHg4MjUgZXhwIC1zTmFOMzIxIC0+IC1OYU4zMjEgSW52YWxpZF9vcGVyYXRpb24KK2V4cHg4MjYgZXhwICAgTmFONDU2IC0+ICBOYU40NTYKK2V4cHg4MjcgZXhwICAtTmFONjU0IC0+IC1OYU42NTQKK2V4cHg4MjggZXhwICAgTmFOMSAgIC0+ICBOYU4xCisKKy0tIEludmFsaWQgb3BlcmF0aW9ucyBkdWUgdG8gcmVzdHJpY3Rpb25zCistLSBbbmV4dCB0d28gcHJvYmFibHkgc2tpcHBlZCBieSBtb3N0IHRlc3QgaGFybmVzc2VzXQorcHJlY2lzaW9uOiAxMDAwMDAwMDAKK2V4cHg5MDEgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQKK3ByZWNpc2lvbjogIDk5OTk5OTk5CitleHB4OTAyIGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0CisKK3ByZWNpc2lvbjogOQorbWF4RXhwb25lbnQ6ICAgMTAwMDAwMAorbWluRXhwb25lbnQ6ICAgLTk5OTk5OQorZXhweDkwMyBleHAgIC1JbmZpbml0eSAgICAgLT4gTmFOIEludmFsaWRfY29udGV4dAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAgLTk5OTk5OQorZXhweDkwNCBleHAgIC1JbmZpbml0eSAgICAgLT4gMAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAtMTAwMDAwMAorZXhweDkwNSBleHAgIC1JbmZpbml0eSAgICAgLT4gTmFOIEludmFsaWRfY29udGV4dAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAgLTk5OTk5OAorZXhweDkwNiBleHAgIC1JbmZpbml0eSAgICAgLT4gMAorCistLQorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBOdWxsIHRlc3QKK2V4cHg5MDAgZXhwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKKy0tIFJhbmRvbXMgUD01MCwgd2l0aGluIDAtOTk5CitQcmVjaXNpb246IDUwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXhweDE1MDEgZXhwIDY1Ni4zNTM5Nzk1MDU5MDI4NTYxMjI2NjA5NTU5NjUzOTkzNDIxMzk0Mzg3Mjg4NTcyOCAgLT4gMS4xMjQzNzU3NjEwNjQwMzE5NzgzNjExMTc4NTI4ODM5NjUyNjcyMDYyODIwMDQwMzE0RSsyODUgSW5leGFjdCBSb3VuZGVkCitleHB4MTUwMiBleHAgMC45MzYyMDU3MTA5MzY1MjgwMDIyNTAzODU1MDYwMDc4MDMyMjgzMTIzNjA4Mjc4MTQ3MSAtPiAyLjU1MDI4NjUxMzA5ODYxNzY2ODkxOTk3MTE4NTc4MjU3NzEzMTExNzgwNDY4NDIwMDkgSW5leGFjdCBSb3VuZGVkCitleHB4MTUwMyBleHAgMC4wMDAwMDAwMDAwMDAwMDAwODM0MDc4NTg1NjYwMTUxNDcxNDE4MzM3Mzg3NDEwNTc5MSAtPiAxLjAwMDAwMDAwMDAwMDAwMDA4MzQwNzg1ODU2NjAxNTE1MDYyMDI2OTE3NDAyNTI1MTIgSW5leGFjdCBSb3VuZGVkCitleHB4MTUwNCBleHAgMC4wMDAwOTE3NDA1NzI2Mjg4Nzc4OTYyNTc0NTU3NDY4NjU0NTE2MzE2ODc4ODQ1NjIwMyAtPiAxLjAwMDA5MTc0NDc4MDkyMzkwMDUxNDY3MjIzNDEyNTE1MjQwODEwMDYwNTE0NzMyNzMgSW5leGFjdCBSb3VuZGVkCitleHB4MTUwNSBleHAgMzMuOTA5MTE2ODk3OTczNzk3NzM1NjU3NzUxNTkxMDE0OTI2NjI5MDUxMTE3NTQxMjQzICAtPiA1MzI3NzMxODEwMjUwMDIuMDM1NDM2MTg5MDEzMDY3MjY0OTU4NzA0NzY2MTcyMzIyMjkgSW5leGFjdCBSb3VuZGVkCitleHB4MTUwNiBleHAgMC4wMDAwMDc0MDQ3MDQxMzAwNDQwNjU5MjEyNDU3NTI5NTI3ODQ1NjkzNjgwOTU4NzMxMSAtPiAxLjAwMDAwNzQwNDczMTU0NDkzMzM1OTAwNjYzOTU2NzAzMDYxMzU1Njc4ODkyMTA4MTQgSW5leGFjdCBSb3VuZGVkCitleHB4MTUwNyBleHAgMC4wMDAwMDAwMDAwMDEyNDg1NDkyMjIyMjEwODgwMjQ1Mzc0NjkyMjQ4MzA3MTQ0NTQ5MiAtPiAxLjAwMDAwMDAwMDAwMTI0ODU0OTIyMjIyMTg2NzQ2MjExNzYyMzk5MTE0MjQ5NjgyNjMgSW5leGFjdCBSb3VuZGVkCitleHB4MTUwOCBleHAgNC4xNzkzMjgwNjc0MTU1NjU5Nzk0Mjg2OTUxMTU5NDMwNjUxMjU4MzU2MDE0MzkxMzgyICAtPiA2NS4zMjE5NDY1MjAxNDcxOTk0MDQxOTk3ODc4MTEzMzY4NjAwODc5NzUxMTgyNzgxODUgSW5leGFjdCBSb3VuZGVkCitleHB4MTUwOSBleHAgNDg1LjQzNTk1NzQ1NDYwNjU1ODkzNzQ2MTc5ODkwMjU1NTI5OTE5MjIxNTUwMjAxNjg2ICAtPiA2LjYzOTg0MDM5MjA0NTk2MTcyNTU5NTA0NzY5NTMxMjkzNzc0NTk4NDUzNjY1ODU0NjNFKzIxMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTEwIGV4cCAwLjAwMDAwMDAwMDAzNTQ3MjU5ODA2NTkwODU2MDMyNTI3ODc1MTU3ODMwMzI4MTU2NTk3IC0+IDEuMDAwMDAwMDAwMDM1NDcyNTk4MDY2NTM3NzEyOTMyMDU4OTQwNjcxNTAwMDY4NTUxNSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTExIGV4cCAwLjAwMDAwMDAwMDAwMDAwNzU5NjIxNDk3MzM5MTA0MDQ3OTMwNjE2NDc4NjM1MDQyNjc4IC0+IDEuMDAwMDAwMDAwMDAwMDA3NTk2MjE0OTczMzkxMDY5MzMwNTQ3MTI1NzcxNTQ2Mzg4NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTEyIGV4cCA5Ljc5NTkxNjg4MjE3NjAzMzkzMDQ1NzE1OTU0NzQ0ODA2NDAyODYwNzI3MjAyMzM3OTYgIC0+IDE3OTYwLjI2MTE0NjA0Mjk1NTE3OTE2NDMwMzY1MzQxMjY1MDc1MTY4MTQzNjM1MjQzNyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTEzIGV4cCAwLjAwMDAwMDAwNTY2NjQyMDA2MjU4MjkwNTI2NzgzOTAxNDUxMTk0OTQzMTY0NTM1NTgxIC0+IDEuMDAwMDAwMDA1NjY2NDIwMDc4NjM3MDYzNDYwOTgzMjQzODgxNTY2NTI0OTM0NzY1MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE0IGV4cCA3NDEuMjk4ODg3OTExMzQyOTgxOTQwODg4Mjc1NzIzNzQ3MTg5NDA5MjU4MjAwMjczNTQgIC0+IDguNzUwMTY5NDAwNjMxNzMzMjgwODEyODk0NjY2NjQwMjYyMjQzMjA2NDkyMzE5ODczMUUrMzIxIEluZXhhY3QgUm91bmRlZAorZXhweDE1MTUgZXhwIDAzMi43NTU3MzAwMzU1MjUxNzY2ODgwODUyOTA5OTg5NzE1MzcxMDg4NzAxNDk0NzkzNSAgLT4gMTY4MTI1MTk2NTc4Njc4LjE3NzI1ODQxMTA4NjE3OTU1OTA0NDI1MzQ1NjMxMDkyMzM5IEluZXhhY3QgUm91bmRlZAorZXhweDE1MTYgZXhwIDQyLjMzMzcwMDcyNjQyOTMzMzMwODU5NDI2NTU1MzQyMjkwMjQ2MzczNzM5OTQzNzY0NCAgLT4gMjQyODI0NTY3NTg2NDE3MjQ3NS40NjgxMTE5NDkzMDQ1NjU3Nzk3MzA5MzY5NjcyMDEyIEluZXhhY3QgUm91bmRlZAorZXhweDE1MTcgZXhwIDAuMDAwMDAwMDAwMDAwMDA1NTk2ODI2MTY4NzY0OTE4ODgxOTc2MDkxNTg4MDI4MzU3OTggLT4gMS4wMDAwMDAwMDAwMDAwMDU1OTY4MjYxNjg3NjQ5MzQ1NDQyMDc2NzMyNzM5NTc3MDQ5IEluZXhhY3QgUm91bmRlZAorZXhweDE1MTggZXhwIDAuMDAwMDAwMDAwMDAwODA3MDM2ODg2NjgyODAxOTM1ODQ3NTgzMDA5NzM1NDk0ODYzMTIgLT4gMS4wMDAwMDAwMDAwMDA4MDcwMzY4ODY2ODMxMjc1OTAxMTU4MTY0MzIxODY3OTE0MzQyIEluZXhhY3QgUm91bmRlZAorZXhweDE1MTkgZXhwIDY0MC43MjM5NjAxMjc5NjUwOTQ4MjM4MjcxMjg5MTcwOTA3MjU3MDY1MzYwNjgzODI1MSAgLT4gMS44MzE4MDk0OTkwNjgzMzk0MjI5MzA0MTMzMDY4OTgzOTE0MjM2OTk1MzI2ODkxMDQ1RSsyNzggSW5leGFjdCBSb3VuZGVkCitleHB4MTUyMCBleHAgMC4wMDAwMDAwMDAwMDAwMDUwOTQ1ODkyMjE2NzYzMTA3MTQxNjk0ODExMjIxOTUxMjIyNCAtPiAxLjAwMDAwMDAwMDAwMDAwNTA5NDU4OTIyMTY3NjMyMzY5MTU4OTE0OTkzMjQzNTg1NTYgSW5leGFjdCBSb3VuZGVkCitleHB4MTUyMSBleHAgNi43NjcwMzk0MzE0MzE1MjA2Mzc4NjI1MjIxNTgzOTczNDE0NjYwNzI3OTYwMjQxMzk1ICAtPiA4NjguNzM2MTMwMTI4MjIwMzEzNjc4MDYyNDg2OTcwOTI4ODQ0MTUxMTk1NjgyNzEzMTUgSW5leGFjdCBSb3VuZGVkCitleHB4MTUyMiBleHAgMDQuODIzMjE3NDA3NDEyOTYzNTA2NjM4MjY3MjI2ODkxMDI0MTM4MDU0NzgzMTIyNTQ4ICAtPiAxMjQuMzY0NTc5Mjk1ODg4MzcxMjk3MzE4MjEwNzc1ODY3MDU1MDU1NjU5MDQyMDUzNjYgSW5leGFjdCBSb3VuZGVkCitleHB4MTUyMyBleHAgMTkzLjUxMzA3ODc4NzAxMTk2NDAzOTkxMjA4NDgyNTIwMTE1MzU5NjkwMTA2MTQzNjE1ICAtPiAxLjEwMDY4MzA4NzI4NTQ3MTU2NzczOTA5MTQ2NTU0NTIyNjE1NTA3Njg5NTc1NzYwMzRFKzg0IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjQgZXhwIDUuNzMwNzc0OTAzODMwMzY1MDUzOTIwMDM0NTkwMTIxMDQ5NzAxNTYxNzM5Mzk3MDQ2MyAgLT4gMzA4LjIwODAwNzQzMTA2ODQzMDgzNTIyNzIxNTIzNzE1NjQ1OTUwNTc0ODY2NDk1MTk2IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjUgZXhwIDAuMDAwMDAwMDAwMDAwOTUyMTc4MjUxOTk3OTc5NjUyMDA1NDExNjkxMjM3NDM1MDAyNjcgLT4gMS4wMDAwMDAwMDAwMDA5NTIxNzgyNTE5OTg0MzI5NzM3MTcyMDA3OTkxMzkwMzgxMjczIEluZXhhY3QgUm91bmRlZAorZXhweDE1MjYgZXhwIDAuMDAwMjcxMzE0NDA5NDkxODMzNzA5NjYzOTM2ODI2MTc5MzAxNTM0OTUwMjg5MTkxNDAgLT4gMS4wMDAyNzEzNTEyMTg1NzUxMDIyOTA2MDU4MTYwNDgwNjA2NTk4NzU0OTEzNjA3MzY0IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjcgZXhwIDAuMDAwMDAwMDAwNjQ1MDMwNTkxMTQ2ODA2ODIzNDMwMDIzMTU2NjIwNjkyNzI3MDcxMjMgLT4gMS4wMDAwMDAwMDA2NDUwMzA1OTEzNTQ4MzkwNTUyMzIzNTE3NDAzNjEzMTM1NDk2NjMzIEluZXhhY3QgUm91bmRlZAorZXhweDE1MjggZXhwIDAuMDAwMDAwMDAwMDAwMDAwOTU2MTY2NDM1MDY1MjcyODg4NjYyMzUyMzg1NDg0NDA1OTMgLT4gMS4wMDAwMDAwMDAwMDAwMDA5NTYxNjY0MzUwNjUyNzMzNDU3ODk0NzgxNTgyMDA5MDk0IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjkgZXhwIDAuMDAwMDAwMDAwMDAwMDAwODY0NDk5NDI4MTE2Nzg2NTAyNDQ0NTk1NTAyNTI3NDM0MzMgLT4gMS4wMDAwMDAwMDAwMDAwMDA4NjQ0OTk0MjgxMTY3ODY4NzYxMjQyMjYxMDk2NTI5OTg2IEluZXhhY3QgUm91bmRlZAorZXhweDE1MzAgZXhwIDAuMDYyMjM0ODgzNTU2MzUzNTk5NjU2ODMwNTMxNTc3MjkyMDQ5ODgzODE4ODc2MjE4NTAgLT4gMS4wNjQyMTIyODEzMzkyNDA2NjU3Nzg5Njg4OTMxODM4OTE5MzIzODI2MjUwNjMwODMxIEluZXhhY3QgUm91bmRlZAorZXhweDE1MzEgZXhwIDAuMDAwMDA0MDA3MTA4MDc4MDQ0Mjk0MzU1MDI2NTcxMzE5MTIzMDg2ODA2NzQwNTcwNTMgLT4gMS4wMDAwMDQwMDcxMTYxMDY1MTI1OTI1NjIwODkwMDE5MzE5ODMyMTI3ODYzNTU5MjYwIEluZXhhY3QgUm91bmRlZAorZXhweDE1MzIgZXhwIDg1LjUyMjc5Njg5NDc0NDU3NjIxMTU3MzIzMjA1NTQ5NDU1MTQyOTI5Nzg3ODQxMzAxNyAgLT4gMTM4NzAwNzM2ODY0MDQyMjg0NTI3NTc3OTk3NzAyNTEwODUxNzcuODUzMzM3MzY4OTM1IEluZXhhY3QgUm91bmRlZAorZXhweDE1MzMgZXhwIDkuMTQ5NjcyMDgxMTM2MzY3ODY5NjkzODAzNjM3OTc1NjY2MzU0ODM1MzM5OTk1NDM2MyAgLT4gOTQxMS4zNTM3MTIyODMyNzQzMzg2NzgzNTk3NjI5MTYxNzYzMDU3MzcwMDM0NDk1MTU3IEluZXhhY3QgUm91bmRlZAorZXhweDE1MzQgZXhwIDguMjIxNTcwNTI0MDc4ODI5NDQ3Mjk0NDM4MjA1NjMzMDUxNjczODU3Nzc4NTE3Nzk0MiAgLT4gMzcyMC4zNDA2ODEzMzgzMDc2OTUzODk5NjU0NzAxNjE1MDg0NDI1NTk4Mzc3NzU4MTg5IEluZXhhY3QgUm91bmRlZAorZXhweDE1MzUgZXhwIDAuMDAwMDAwMDAwMTU3NzIwNjQ1Njk2NDA2MTMxNDI4MjMyMDM3MjY4MjEwNzYyMzk1NjEgLT4gMS4wMDAwMDAwMDAxNTc3MjA2NDU3MDg4NDQwMzI0NjgzMzE1Nzg4MzU4OTI2MTI5ODMwIEluZXhhY3QgUm91bmRlZAorZXhweDE1MzYgZXhwIDAuNTgxNzkzNDY0NzM5NTk1MzE0MzI2MjQxNTM1NzY4ODM0NDA2MjU1MzgwMTc1MzI0ODAgLT4gMS43ODkyNDQ1MDE4Mjc1MzYwMTYzNzk3MDIyMzcyNjU1ODM3MTg4NDIzMTk0ODYzNjA1IEluZXhhY3QgUm91bmRlZAorZXhweDE1MzcgZXhwIDMzLjU1NTcyNjE5NzE0OTUyNTA2MTQ1NTUxNzc4NDg3MDU3MDQ3MDgzMzQ5ODA5NjU1OSAgLT4gMzc0MTY4MDY5ODk2MzI0LjYyNTc4MDczMTQ4OTkzNTI2NjI2MzA3MDk1ODU0NDA3OTUyIEluZXhhY3QgUm91bmRlZAorZXhweDE1MzggZXhwIDkuNzg5ODA3OTgwMzkwNjIxNTA5NDE0MDAxMDAwOTU4MzM3NTUzNzI1OTgxMDM5ODY1OSAgLT4gMTc4NTAuODc4MTE5OTEyMjA4ODg4MjE3MTAwOTk4MDE5OTg2NjM0NjIwMzY4NTM4NDI2IEluZXhhY3QgUm91bmRlZAorZXhweDE1MzkgZXhwIDg5LjE1NzY5NzMyNzE3NDUyMTU0MjUwMjQ0Nzk1MzAzMjUzNjU0MTAzODYzNjk2NjM0NyAgLT4gNTI1NjQ5MTUyMzIwMTY2NTAzNzcxMjI0MTQ5MzMwNDQ4MDg5NTUwLjY3MjkzODI5MjI3IEluZXhhY3QgUm91bmRlZAorZXhweDE1NDAgZXhwIDI1LjAyMjk0NzYwMDEyMzMyODkxMjAyOTA1MTg5NzE3MTMxOTU3MzMyMjg4ODUxNDg4NSAgLT4gNzM2NzYzNDM0NDIuOTUyNTE3ODI0MzQ1NDMxNDM3NjgzMTUzMzA0NjQ1ODUxOTYwNTI0IEluZXhhY3QgUm91bmRlZAorCistLSBleHAoMSkgYXQgMzQKK1ByZWNpc2lvbjogMzQKK2V4cHgxMjAwIGV4cCAxIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyIEluZXhhY3QgUm91bmRlZAorCistLSBSYW5kb21zIFA9MzQsIHdpdGhpbiAwLTk5OQorUHJlY2lzaW9uOiAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0MworZXhweDEyMDEgZXhwIDMwOS41OTQ4ODU1ODIxNTEwMjEyOTk2NzAwNjQ1MDg3MTg4ICAtPiAyLjg1MzMxOTY5MjkwMTM4NzUyMTIwMTczODAxNTA1MDcyNEUrMTM0IEluZXhhY3QgUm91bmRlZAorZXhweDEyMDIgZXhwIDkuOTM2NTQzMDY4NzA2MjExNDIwNDIyODAzOTYyNjgwMTY0ICAtPiAyMDY3Mi4xNTgzOTIwMzE3MTg3NzQ3NjUxMTA5MzI3NjAyMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjAzIGV4cCA2LjMwNzg3MDMyMzg4MTUwNTY4NDQyOTgzOTQ5MTcwNzkwOCAgLT4gNTQ4Ljg3NDc3NzcwNTQ2MzcyOTYxMzcyNzczOTE3NTQ2NjUgSW5leGFjdCBSb3VuZGVkCitleHB4MTIwNCBleHAgMC4wMDAzNTQzMjgxMzg5NDM4NDIwNTM1MjAxMzA4MjgyNTAzIC0+IDEuMDAwMzU0MzkwOTIwNTczNzQ2MTY0NzMzMzUwODQzMTU1IEluZXhhY3QgUm91bmRlZAorZXhweDEyMDUgZXhwIDAuMDAwMDAzNzA4NzQ1MzM2MzkxODM3NTU5ODM5NDkyMDIyOSAtPiAxLjAwMDAwMzcwODc1MjIxMzc5NjMyNDg0MTkyMDE4OTMyMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjA2IGV4cCAwLjAwMjA0MzIzMTI2ODc1MTI0MzgwNDAyMjI0NDQxMTY1ODUgLT4gMS4wMDIwNDUzMjAwODgxNjQ4MjYwMTM1NjE2MzA5NzUzMDggSW5leGFjdCBSb3VuZGVkCitleHB4MTIwNyBleHAgNi44NTYzMTMzNDAwMzIxNzc2NzI1NTAzNDMyMTYxMjk1ODYgIC0+IDk0OS44NTg3OTgxNjA0MTQ0MTQ3OTgzNTg5NjYwNTI0Mzk2IEluZXhhY3QgUm91bmRlZAorZXhweDEyMDggZXhwIDAuMDAwMDAwMDAwMDQwMjA5NDkyODMzMzgxNTY0MzMyNjQxOCAtPiAxLjAwMDAwMDAwMDA0MDIwOTQ5MjgzNDE4OTk2NTk4OTYxMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjA5IGV4cCAwLjAwNDk2MTA3ODQ3MjI0MTIxMTc2MzI2NDcwMDM1NDU4MzkgLT4gMS4wMDQ5NzM0MDQ5OTc5MDE5ODcwMzk1ODkwMjkyNzc4MzMgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxMCBleHAgMC4wMDAwODkxNDcxODgzNzI0MDY2OTA5NzQ2Nzg2NzAyNjg2IC0+IDEuMDAwMDg5MTUxMTYyMTAxMDg1NDEyNzgwMDg4MjY2Njk5IEluZXhhY3QgUm91bmRlZAorZXhweDEyMTEgZXhwIDA4LjU5OTc5MTcwMzc2MDYxODkwNjg0NzIzMjExMTEyNTY2ICAtPiA1NDMwLjUyODMxNDkyMDkwNTcxNDYxNTMzOTI3MzczODA5NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjEyIGV4cCA5LjQ3MzExNzAzOTM0MTAwMzg1NDg3Mjc3ODExMjc1MjU5MCAgLT4gMTMwMDUuMzYyMzQzMzEyMjQ5NTM0NjAwNTU4OTc5MTM5MTcgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxMyBleHAgMC4wOTk5MDYwNzI0NjkyMjA3NjQ4NDI5OTY5OTk5MzEwMTE4IC0+IDEuMTA1MDY3MTE2OTc1MTkwNjAyMjk2MDUyNzAwNzI2ODAyIEluZXhhY3QgUm91bmRlZAorZXhweDEyMTQgZXhwIDAuMDAwMDAwMDkyNzgwNDUzMzU1NTg3Nzg4NDA4MjI2OTI0NyAtPiAxLjAwMDAwMDA5Mjc4MDQ1NzY1OTY5NDE4Mzk1NDc0MDc3MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjE1IGV4cCAwLjAzNzY1Nzg1ODM4NzI4ODk5MTYyOTg3NzI4MTgyNjU2NzcgLT4gMS4wMzgzNzU5MDA0ODk3NzE5NDY0Nzc4NTc4MTg0NDc1NTYgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxNiBleHAgMjYxLjY4OTY0MTE2OTc1Mzk1MjQ5MTE1MzYxMTY3MTIzMDcgIC0+IDQuNDcwNjEzNTYyMTI3NDY1MDk1MjQxNjAwMTc0OTQxNDYwRSsxMTMgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxNyBleHAgMC4wNzA5OTk3NDIzMjY5MTYyOTgwODc1ODI0MjEzODg5NjI2IC0+IDEuMDczNTgwOTQ5MjM1NDA3OTQ5NDE3ODE0NDg1NTMzMTcyIEluZXhhY3QgUm91bmRlZAorZXhweDEyMTggZXhwIDAuMDAwMDAwMDQ0NDYwNTU4MzI5NTE2OTg5NTIzNTY1ODczMSAtPiAxLjAwMDAwMDA0NDQ2MDU1OTMxNzg4NzYyNzY1NzU5MzkwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjE5IGV4cCAwLjAwMDAwMjEyMjQwNzI4NTQ3Nzc1MTIyODEzNjk4MTUxODUgLT4gMS4wMDAwMDIxMjI0MDk1Mzc3ODU2ODczOTA2MzEwNzA5MDYgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyMCBleHAgNTQ3LjUxNzQ0NjI1NzQxNTY4ODU0NzM1NTg0ODU0NzUwNTIgIC0+IDYuMDc4NjI5MjQ3MzgzODA3OTQyNjEyMTE0NTc5NzI4NjcyRSsyMzcgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyMSBleHAgMC4wMDAwMDA5MDY3NTk4MDQxNjE1MTkyMDAyMzM5ODQ0NjcwIC0+IDEuMDAwMDAwOTA2NzYwMjE1MjY4MzE0NjgwMTE1Mzc0Mzg3IEluZXhhY3QgUm91bmRlZAorZXhweDEyMjIgZXhwIDAuMDMxNjQ3NjUwMDMwODA2NTM2NTgwMzQ1NTUzMzI0NDYwMyAtPiAxLjAzMjE1Mzc2MTg4MDE4Nzk3NzY1ODM4Nzk2MTc2OTAzNCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjIzIGV4cCA4NC40NjE2MDUzMDM3NzY0NTEwMTgzMzk5NjcwNjM4NDQ3MyAgLT4gNC43OTk2NDQ5OTU4OTc5NjgzODM1MDMyNjk4NzE2OTc4NTZFKzM2IEluZXhhY3QgUm91bmRlZAorZXhweDEyMjQgZXhwIDAuMDAwMDAwMDAwMDUyMDU5OTc0MDI5MDg0ODAxODkwNDE0NSAtPiAxLjAwMDAwMDAwMDA1MjA1OTk3NDAzMDQzOTkyMjMzODM5MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjI1IGV4cCAwLjAwMDAwMDY3NDg1MzA2NDAwOTM2MjA2NjU2NTE3MjY3MDggLT4gMS4wMDAwMDA2NzQ4NTMyOTE3MjI3NDIyOTIzMzE4MTI5OTcgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyNiBleHAgMC4wMDAwMDAwMTE2ODUzMTE5NzYxMDQyMDIwNTA3OTE2MTY5IC0+IDEuMDAwMDAwMDExNjg1MzEyMDQ0Mzc3NDYwMzA2MTY1MjAzIEluZXhhY3QgUm91bmRlZAorZXhweDEyMjcgZXhwIDAuMDAyMjU5MzgxODA5NDI1ODYzNjcyNzYxNjg4NjY5MzI4MCAtPiAxLjAwMjI2MTkzNjEzNTg3Njg5MzcwNzA5NDg0NTU0MzQ2MSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjI4IGV4cCAwLjAwMjkzOTg4NTc2NzM0Nzg5MTIyNDk4NTY1MDk2Njc1MTcgLT4gMS4wMDI5NDQyMTE0Njk0OTUwODY4MTMwODc2NTEyODcwMTIgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyOSBleHAgMC43NTExNDgwMDI5OTI4ODAyNzc1Mzc2MjcwNTU3NjM2OTYzIC0+IDIuMTE5NDMxNzM0NTEwMzIwMTY5ODA2OTc2NTY5MzY2Nzg5IEluZXhhY3QgUm91bmRlZAorZXhweDEyMzAgZXhwIDE3NC45NDMxOTUyMTc2NzUwNjcxMTUwODg2NDIzMDQ4NDQ3ICAtPiA5LjQ4MTIyMjMwNTM3NDk1NTAxMTQ2NDYxOTQ2ODA0NDA1MUUrNzUgSW5leGFjdCBSb3VuZGVkCitleHB4MTIzMSBleHAgMC4wMDAwODEwNjEyNDUxNjk0MTM2MTI5MTk5ODk1MTY0NDI0IC0+IDEuMDAwMDgxMDY0NTMwNzIwOTI0MTg2NjE1MTQ5NjQ2OTIwIEluZXhhY3QgUm91bmRlZAorZXhweDEyMzIgZXhwIDUxLjA2ODg4OTg5NzAyNjY5Mjg4MTgwOTQ2MjcyNDk5MDM1ICAtPiAxNTA5ODYxMzg4ODYxOTE2NTA3Mzk1OS44OTg5NjAxODc0OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjMzIGV4cCAwLjAwMDAwMDAwMDU5OTI4ODc1OTk0MzcwOTM2NTE0OTQ1MTAgLT4gMS4wMDAwMDAwMDA1OTkyODg3NjAxMjMyODI4NzQwODI3NTggSW5leGFjdCBSb3VuZGVkCitleHB4MTIzNCBleHAgNzE0Ljg1NDkwNDY3NjEwNTQ4NTYzMTExMDg4Mjg5MDM5NzIgIC0+IDIuODY3NzQ0NTQ0ODkxMDgxMTE3MzgxNTk1MDgwNDgwNzg0RSszMTAgSW5leGFjdCBSb3VuZGVkCitleHB4MTIzNSBleHAgMC4wMDAwMDAwMDA0NDY4MjQ3ODAyOTkwNjQzNjQ1NjA3MTEwIC0+IDEuMDAwMDAwMDAwNDQ2ODI0NzgwMzk4ODkwNTU2NzIwMjMzIEluZXhhY3QgUm91bmRlZAorZXhweDEyMzYgZXhwIDgzMS41ODE4MTUxNTg5ODkwMzY2MzIzNTUxNjcyMDQzNzA5ICAtPiAxLjQxNzA3NzQwOTE4MjYyNDk2OTQzNTkzODA2MjI2MTY1NUUrMzYxIEluZXhhY3QgUm91bmRlZAorZXhweDEyMzcgZXhwIDAuMDAwMDAwMDAwNjg2ODMyMzgyNTE3OTYwNTc0NzEwODA0NCAtPiAxLjAwMDAwMDAwMDY4NjgzMjM4Mjc1MzgyOTkzNTYwMjQ1NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjM4IGV4cCAwLjAwMDAwMDEzMDY3NDAyNjY0MDg5NzY4NDAyMjg0NDAyNTUgLT4gMS4wMDAwMDAxMzA2NzQwMzUxNzg3NDg2NzUxODc2NDgwOTggSW5leGFjdCBSb3VuZGVkCitleHB4MTIzOSBleHAgMC4zMTgyMjEwNjA5MDIyMjY3NzA0ODExNTAyNDEyMzM1MTYzIC0+IDEuMzc0NjgwMTE1NjY3Nzk4MTg1NzU4OTI3MjQ3ODk0ODU5IEluZXhhY3QgUm91bmRlZAorZXhweDEyNDAgZXhwIDAuMDE0Nzc0MTIzNDE3OTEwNDQzNzQ0MDI2NDY0NDI5NTUwMSAtPiAxLjAxNDg4MzgwMDIzOTk1MDY4MjYyODI3NzUzNDgzOTIyMiBJbmV4YWN0IFJvdW5kZWQKKworLS0gUmFuZG9tcyBQPTE2LCB3aXRoaW4gMC05OQorUHJlY2lzaW9uOiAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4cHgxMTAxIGV4cCA4LjQ3MzAxMTUyNzAxMzcyNCAgLT4gNDc4My45MDA2NDM5NjkyNDYgSW5leGFjdCBSb3VuZGVkCitleHB4MTEwMiBleHAgMC4wMDAwMDU1NzUzMDIyNzY0IC0+IDEuMDAwMDA1NTc1MzE3ODE4IEluZXhhY3QgUm91bmRlZAorZXhweDExMDMgZXhwIDAuMDAwMDMyMzQ3NDExNDQ4MiAtPiAxLjAwMDAzMjM0NzkzNDYzMSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTA0IGV4cCA2NC41NDM3NDEzODU0NDE2NiAgLT4gMS4wNzM5NjY0NzYxNzM1MzFFKzI4IEluZXhhY3QgUm91bmRlZAorZXhweDExMDUgZXhwIDkwLjQ3MjAzMjQ2NDE2NTY5ICAtPiAxLjk1NjYxMDg4NzI1MDY0M0UrMzkgSW5leGFjdCBSb3VuZGVkCitleHB4MTEwNiBleHAgOS4yOTk5MzE1MzIzNDI3NTcgIC0+IDEwOTM3LjI3MDMzMzI1MjI3IEluZXhhY3QgUm91bmRlZAorZXhweDExMDcgZXhwIDguNzU5Njc4NDM3ODUyMjAzICAtPiA2MzcyLjA2MjIzNDQ5NTM4MSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTA4IGV4cCAwLjAwMDA5MzE3NTUxMjcxNzIgLT4gMS4wMDAwOTMxNzk4NTM2OTAgSW5leGFjdCBSb3VuZGVkCitleHB4MTEwOSBleHAgMC4wMDAwMDI4MTAxMTU4MzczIC0+IDEuMDAwMDAyODEwMTE5Nzg2IEluZXhhY3QgUm91bmRlZAorZXhweDExMTAgZXhwIDAuMDAwMDAwODAwODEzMDkxOSAtPiAxLjAwMDAwMDgwMDgxMzQxMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTExIGV4cCA4LjMzOTc3MTcyMjI5OTA0OSAgLT4gNDE4Ny4xMzM4MDMwODE4NzggSW5leGFjdCBSb3VuZGVkCitleHB4MTExMiBleHAgMC4wMDI2MTQwNDk3OTk1NDc0IC0+IDEuMDAyNjE3NDY5NDA2NzUwIEluZXhhY3QgUm91bmRlZAorZXhweDExMTMgZXhwIDAuNzQ3ODAzMzM1NjI2MTc3MSAtPiAyLjExMjM1NDc4MTk3NTQxOCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTE0IGV4cCA1MS43NzY2Mzc2MTgyNzk2NiAgLT4gMy4wNjQxMzU4MDExMjAzNjVFKzIyIEluZXhhY3QgUm91bmRlZAorZXhweDExMTUgZXhwIDAuMTUyNDk4OTc4MzA2MTAxMiAtPiAxLjE2NDc0MTI3MjA4NDk1NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTE2IGV4cCAwLjAwNjYyOTg3OTg2NjkyMTkgLT4gMS4wMDY2NTE5MDYxNzA3OTEgSW5leGFjdCBSb3VuZGVkCitleHB4MTExNyBleHAgOS45NTUxNDE4NjU1MzQ5NjAgIC0+IDIxMDYwLjIzMzM0Mjg3MDM4IEluZXhhY3QgUm91bmRlZAorZXhweDExMTggZXhwIDkyLjM0NTAzMDU5MTk4NDgzICAtPiAxLjI3MzMxODk5MzQ4MTIyNkUrNDAgSW5leGFjdCBSb3VuZGVkCitleHB4MTExOSBleHAgMC4wMDAwNzA5Mzg4Njc3MzQ2IC0+IDEuMDAwMDcwOTQxMzgzOTU2IEluZXhhY3QgUm91bmRlZAorZXhweDExMjAgZXhwIDc5LjEyODgzMDM2NDMzMjA0ICAtPiAyLjMxODUzODg5OTM4OTI0M0UrMzQgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyMSBleHAgMC4wMDAwMDkwODgxNTQ4ODczIC0+IDEuMDAwMDA5MDg4MTk2MTg1IEluZXhhY3QgUm91bmRlZAorZXhweDExMjIgZXhwIDAuMDQyNDgyODgwOTYwMzQxMSAtPiAxLjA0MzM5ODE5NDI0NTcyMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTIzIGV4cCAwLjgwMDkwMzU4OTE0Mjc0MTYgLT4gMi4yMjc1NTI4MTE5MzMzMTAgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyNCBleHAgOC44MjU3ODYxNjcyODMxMDIgIC0+IDY4MDcuNTQwNDU1Mjg5OTk1IEluZXhhY3QgUm91bmRlZAorZXhweDExMjUgZXhwIDEuNTM1NDU3MjQ5NzQ2Mjc1ICAtPiA0LjY0MzQ0ODI2MDE0Njg0OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTI2IGV4cCA2OS4wMjI1NDI1NDM1NTgwMCAgLT4gOS40NjQ3NTQ1MDA2NzA2NTNFKzI5IEluZXhhY3QgUm91bmRlZAorZXhweDExMjcgZXhwIDAuMDAwNzA1MDU1NDM2ODcxMyAtPiAxLjAwMDcwNTMwNDA0Njg4MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTI4IGV4cCAwLjAwMDAwODEyMDY1NDk1MDQgLT4gMS4wMDAwMDgxMjA2ODc5MjMgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyOSBleHAgMC42MjE3NzQ4NTQ2NDExMzcgIC0+IDEuODYyMjMwMjk4NTU0OTAzIEluZXhhY3QgUm91bmRlZAorZXhweDExMzAgZXhwIDMuODQ3NjI5MDMxNDA0MzU0ICAtPiA0Ni44ODE3NzYxMzU2ODIwMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTMxIGV4cCAyNC44MTI1MDE4NDY5NzczMiAgLT4gNTk2OTQyNjg0NTYuMTk5NjYgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzMiBleHAgNS4xMDc1NDY1MDA1MTYwNDQgIC0+IDE2NS4yNjQzODA5NzU1NjcwIEluZXhhY3QgUm91bmRlZAorZXhweDExMzMgZXhwIDc5LjE3ODEwOTQzOTUxOTg2ICAtPiAyLjQzNTY1NjM3MjU0MTM2MEUrMzQgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzNCBleHAgMC4wMDUxMzk0Njk1NjY3MDE1IC0+IDEuMDA1MTUyNjk5Mjk1MzAxIEluZXhhY3QgUm91bmRlZAorZXhweDExMzUgZXhwIDU3LjQ0NTA0NDg4NTAxNzI1ICAtPiA4Ljg3MjkwODU2NjkyOTY4OEUrMjQgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzNiBleHAgMC4wMDAwNTA4Mzg4OTY4MDM2IC0+IDEuMDAwMDUwODQwMTg5MTIyIEluZXhhY3QgUm91bmRlZAorZXhweDExMzcgZXhwIDY5LjcxMzA5OTMyMTQ4OTk3ICAtPiAxLjg4ODA1Mzc0MDY5MzU0MUUrMzAgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzOCBleHAgMC4wMDY0MTgzNDEyOTgxNTAyIC0+IDEuMDA2NDM4OTgyOTg4ODM1IEluZXhhY3QgUm91bmRlZAorZXhweDExMzkgZXhwIDkuMzQ2OTkxMjIwODE0Njc3ICAtPiAxMTQ2NC4yNzgwMjAzNTA4MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTQwIGV4cCAzMy4wOTA4NzEzOTk5OTE1MiAgLT4gMjM1MDYyMjI5MTY4NzYzLjUgSW5leGFjdCBSb3VuZGVkCisKKy0tIFJhbmRvbXMgUD03LCB3aXRoaW4gMC05CitQcmVjaXNpb246IDcKK21heEV4cG9uZW50OiA5NgorbWluRXhwb25lbnQ6IC05NQorZXhweDEwMDEgZXhwIDIuMzk1NDQxICAtPiAxMC45NzMwNCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDAyIGV4cCAwLjY0MDY3NzkgLT4gMS44OTc3NjcgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwMyBleHAgMC41NjE4MjE4IC0+IDEuNzUzODY1IEluZXhhY3QgUm91bmRlZAorZXhweDEwMDQgZXhwIDMuMDU1MTIwICAtPiAyMS4yMjM3MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDA1IGV4cCAxLjUzNjc5MiAgLT4gNC42NDk2NTAgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwNiBleHAgMC4wODAxNTkxIC0+IDEuMDgzNDU5IEluZXhhY3QgUm91bmRlZAorZXhweDEwMDcgZXhwIDAuMDk2Njg3NSAtPiAxLjEwMTUxNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDA4IGV4cCAwLjA2NDY3NjEgLT4gMS4wNjY4MTMgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwOSBleHAgMC4wMDk1NjcwIC0+IDEuMDA5NjEzIEluZXhhY3QgUm91bmRlZAorZXhweDEwMTAgZXhwIDIuOTU2ODU5ICAtPiAxOS4yMzc0NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDExIGV4cCA3LjUwNDY3OSAgLT4gMTgxNi41MjIgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxMiBleHAgMC4wMDQ1MjU5IC0+IDEuMDA0NTM2IEluZXhhY3QgUm91bmRlZAorZXhweDEwMTMgZXhwIDMuODEwMDcxICAtPiA0NS4xNTM2NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDE0IGV4cCAxLjUwMjM5MCAgLT4gNC40OTI0MTMgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxNSBleHAgMC4wMzIxNTIzIC0+IDEuMDMyNjc1IEluZXhhY3QgUm91bmRlZAorZXhweDEwMTYgZXhwIDAuMDA1NzIxNCAtPiAxLjAwNTczOCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDE3IGV4cCA5LjgxMTQ0NSAgLT4gMTgyNDEuMzMgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxOCBleHAgMy4yNDUyNDkgIC0+IDI1LjY2ODEwIEluZXhhY3QgUm91bmRlZAorZXhweDEwMTkgZXhwIDAuMzE4OTc0MiAtPiAxLjM3NTcxNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDIwIGV4cCAwLjg2MjE2MTAgLT4gMi4zNjgyNzMgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyMSBleHAgMC4wMTIyNTExIC0+IDEuMDEyMzI2IEluZXhhY3QgUm91bmRlZAorZXhweDEwMjIgZXhwIDIuMjAyMDg4ICAtPiA5LjA0Mzg3NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDIzIGV4cCA4Ljc3ODIwMyAgLT4gNjQ5MS4yMDIgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyNCBleHAgMC4xODk2Mjc5IC0+IDEuMjA4ODAwIEluZXhhY3QgUm91bmRlZAorZXhweDEwMjUgZXhwIDAuNDUxMDk0NyAtPiAxLjU3MDAzMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDI2IGV4cCAwLjI3NjQxMyAgLT4gMS4zMTgzOTIgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyNyBleHAgNC40OTAwNjcgIC0+IDg5LjEyNzQyIEluZXhhY3QgUm91bmRlZAorZXhweDEwMjggZXhwIDAuMDQzOTc4NiAtPiAxLjA0NDk2MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDI5IGV4cCAwLjgxNjgyNDUgLT4gMi4yNjMzMDEgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzMCBleHAgMC4wMzkxNjU4IC0+IDEuMDM5OTQzIEluZXhhY3QgUm91bmRlZAorZXhweDEwMzEgZXhwIDkuMjYxODE2ICAtPiAxMDUyOC4yNCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDMyIGV4cCA5LjYxMTE4NiAgLT4gMTQ5MzAuODcgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzMyBleHAgOS4xMTgxMjUgIC0+IDkxMTkuMDg3IEluZXhhY3QgUm91bmRlZAorZXhweDEwMzQgZXhwIDkuNDY5MDgzICAtPiAxMjk1My4wMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDM1IGV4cCAwLjA0OTk5ODMgLT4gMS4wNTEyNjkgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzNiBleHAgMC4wMDUwNzQ2IC0+IDEuMDA1MDg3IEluZXhhY3QgUm91bmRlZAorZXhweDEwMzcgZXhwIDAuMDAxNDY5NiAtPiAxLjAwMTQ3MSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDM4IGV4cCA5LjEzODQ5NCAgLT4gOTMwNi43MzkgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzOSBleHAgMC4wMDY1NDM2IC0+IDEuMDA2NTY1IEluZXhhY3QgUm91bmRlZAorZXhweDEwNDAgZXhwIDAuNzI4NDgwMyAtPiAyLjA3MTkzMCBJbmV4YWN0IFJvdW5kZWQKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ZtYS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ZtYS5kZWNUZXN0CmluZGV4IGIwYTgxY2EuLmE4MTk3ZWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9mbWEuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZm1hLmRlY1Rlc3QKQEAgLTEsMzQyNiArMSwzNDI2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBmbWEuZGVjVGVzdCAtLSBkZWNpbWFsIGZ1c2VkIG11bHRpcGx5IGFkZCAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotLS0gVGhlc2UgdGVzdHMgY29tcHJlc2UgdGhyZWUgcGFydHM6DQotLS0gICAxLiBTYW5pdHkgY2hlY2tzIGFuZCBvdGhlciB0aHJlZS1vcGVyYW5kIHRlc3RzIChlc3BlY2lhbGx5IHRob3NlDQotLS0gICAgICB3aGVyZSB0aGUgZnVzZWQgb3BlcmF0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSkNCi0tLSAgIDIuIE11bHRpcGx5IHRlc3RzICh0aGlyZCBvcGVyYW5kIGlzIG5ldXRyYWwgemVybyBbMEUrZW1heF0pDQotLS0gICAzLiBBZGRpdGlvbiB0ZXN0cyAoZmlyc3Qgb3BlcmFuZCBpcyAxKQ0KLS0tIFRoZSBtdWx0aXBseSBhbmQgYWRkaXRpb24gdGVzdHMgYXJlIGV4dGVuc2l2ZSBiZWNhdXNlIEZNQSBtYXkgaGF2ZQ0KLS0tIGl0cyBvd24gZGVkaWNhdGVkIG11bHRpcGxpY2F0aW9uIG9yIGFkZGl0aW9uIHJvdXRpbmUocyksIGFuZCB0aGV5DQotLS0gYWxzbyBpbmhlcmVudGx5IGNoZWNrIHRoZSBsZWZ0LXRvLXJpZ2h0IHByb3BlcnRpZXMuDQotDQotLS0gU2FuaXR5IGNoZWNrcw0KLWZtYXgwMDAxIGZtYSAgMSAgIDEgICAxIC0+ICAgMg0KLWZtYXgwMDAyIGZtYSAgMSAgIDEgICAyIC0+ICAgMw0KLWZtYXgwMDAzIGZtYSAgMiAgIDIgICAzIC0+ICAgNw0KLWZtYXgwMDA0IGZtYSAgOSAgIDkgICA5IC0+ICA5MA0KLWZtYXgwMDA1IGZtYSAtMSAgIDEgICAxIC0+ICAgMA0KLWZtYXgwMDA2IGZtYSAtMSAgIDEgICAyIC0+ICAgMQ0KLWZtYXgwMDA3IGZtYSAtMiAgIDIgICAzIC0+ICAtMQ0KLWZtYXgwMDA4IGZtYSAtOSAgIDkgICA5IC0+IC03Mg0KLWZtYXgwMDExIGZtYSAgMSAgLTEgICAxIC0+ICAgMA0KLWZtYXgwMDEyIGZtYSAgMSAgLTEgICAyIC0+ICAgMQ0KLWZtYXgwMDEzIGZtYSAgMiAgLTIgICAzIC0+ICAtMQ0KLWZtYXgwMDE0IGZtYSAgOSAgLTkgICA5IC0+IC03Mg0KLWZtYXgwMDE1IGZtYSAgMSAgIDEgIC0xIC0+ICAgMA0KLWZtYXgwMDE2IGZtYSAgMSAgIDEgIC0yIC0+ICAtMQ0KLWZtYXgwMDE3IGZtYSAgMiAgIDIgIC0zIC0+ICAgMQ0KLWZtYXgwMDE4IGZtYSAgOSAgIDkgIC05IC0+ICA3Mg0KLWZtYXgwMDE5IGZtYSAgMyAgIDUgICA3IC0+ICAyMg0KLWZtYXgwMDI5IGZtYSAgMyAgLTUgICA3IC0+ICAtOA0KLQ0KLS0tIG5vbi1pbnRlZ2VyIGV4YWN0cw0KLWZtYTAxMDAgIGZtYSAgICAyNS4yICAgNjMuNiAgIC00MzggIC0+ICAxMTY0LjcyDQotZm1hMDEwMSAgZm1hICAgMC4zMDEgIDAuMzgwICAgIDMzNCAgLT4gIDMzNC4xMTQzODANCi1mbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44Ng0KLWZtYTAxMDMgIGZtYSAgICA0LjIyICAwLjA3OSAgLTk0LjYgIC0+ICAtOTQuMjY2NjINCi1mbWEwMTA0ICBmbWEgICAgIDkwMyAgMC43OTcgIDAuODg3ICAtPiAgNzIwLjU3OA0KLWZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzDQotZm1hMDEwNiAgZm1hICAgIDI4LjIgICAgNzI3ICAgNS40NSAgLT4gIDIwNTA2Ljg1DQotZm1hMDEwNyAgZm1hICAgICAgIDQgICAgNjA1ICAgIDY4OCAgLT4gIDMxMDgNCi1mbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzDQotZm1hMDEwOSAgZm1hICAgMC4xNjkgICAtMzQxICAgNS42MSAgLT4gIC01Mi4wMTkNCi1mbWEwMTEwICBmbWEgICAtNzIuMiAgICAgMzAgIC01MS4yICAtPiAgLTIyMTcuMg0KLWZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMNCi1mbWEwMTEyICBmbWEgICAgIDMxNyAgIDc3LjAgICAxOS4wICAtPiAgMjQ0MjguMA0KLWZtYTAxMTMgIGZtYSAgICAgIDQ3ICAgNi41OCAgIDEuNjIgIC0+ICAzMTAuODgNCi1mbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNA0KLWZtYTAxMTUgIGZtYSAgICA3Mi43ICAgIDI3NCAgIDEuNTYgIC0+ICAxOTkyMS4zNg0KLWZtYTAxMTYgIGZtYSAgICAgMzM1ICAgIDg0NyAgICAgODMgIC0+ICAyODM4MjgNCi1mbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMg0KLWZtYTAxMTggIGZtYSAgIC0zLjg3ICAgMy4wNiAgIDc4LjAgIC0+ICA2Ni4xNTc4DQotZm1hMDExOSAgZm1hICAgMC43NDIgICAgMTkyICAgMzUuNiAgLT4gIDE3OC4wNjQNCi1mbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTENCi0NCi0tLSBjYXNlcyB3aGVyZSByZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gc2VwYXJhdGUgbXVsdGlwbHkgKyBhZGQ7IGVhY2gNCi0tLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZA0KLS0tIFt0aGlzIGlzIGFib3V0IDIwJSBvZiBhbGwgc2ltaWxhciAgY2FzZXMgaW4gZ2VuZXJhbF0NCi0tLSAgICAgICAgICAgICAgIDg4ODU2NTI5MCAgIDE1NTcuOTY5MzAgIC04NjA4Ny43NTc4ICAtPiAxLjM4NDM1NzM1RSsxMg0KLWZtYTAyMDEgIGZtYSAgICAgODg4NTY1MjkwICAgMTU1Ny45NjkzMCAgLTg2MDg3Ljc1NzggIC0+IDEuMzg0MzU3MzZFKzEyICBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAtODU1MTkzNDIuOSAgICA3MzUxNTU0MTkgICAgIDQyMDEwNDMxICAtPiAtNi4yODcwMDA4NEUrMTYNCi1mbWEwMjA1ICBmbWEgICAtODU1MTkzNDIuOSAgICA3MzUxNTU0MTkgICAgIDQyMDEwNDMxICAtPiAtNi4yODcwMDA4M0UrMTYgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgLTk4MDI1LjUgIC0yOTQ2MDMuNDcyICAgMTA0MTQzNDguMiAgLT4gMi44ODg5MDY2OUUrMTANCi1mbWEwMjA4ICBmbWEgICAgICAtOTgwMjUuNSAgLTI5NDYwMy40NzIgICAxMDQxNDM0OC4yICAtPiAyLjg4ODkwNjcwRSsxMCAgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgIDU5Njc2MjcuMzkgICA4MzUyNjU0MC42ICAgNDk4NDk0LjgxMCAgLT4gNC45ODQ1NTI3MUUrMTQNCi1mbWEwMjExICBmbWEgICAgNTk2NzYyNy4zOSAgIDgzNTI2NTQwLjYgICA0OTg0OTQuODEwICAtPiA0Ljk4NDU1MjcyRSsxNCAgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAzNDU2Ljk0MzMgICAgODc0LjM5NTE4ICAgMTk3ODY2LjYxNSAgLT4gIDMyMjA2MDEuMTgNCi1mbWEwMjE2ICBmbWEgICAgIDM0NTYuOTQzMyAgICA4NzQuMzk1MTggICAxOTc4NjYuNjE1ICAtPiAgMzIyMDYwMS4xNyAgICAgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgIDYyNzY5LjgyODcgICAyMDk2Ljk4OTI3ICAgIDQ4LjQyMDMxNyAgLT4gIDEzMTYyNzcwNQ0KLWZtYTAyMTggIGZtYSAgICA2Mjc2OS44Mjg3ICAgMjA5Ni45ODkyNyAgICA0OC40MjAzMTcgIC0+ICAxMzE2Mjc3MDYgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgIC02OC44MTUwMCAgIDU5OTYxMTEzLjkgICAgIC04OTg4ODYyICAtPiAtNC4xMzUyMTI5MUUrOQ0KLWZtYTAyMTkgIGZtYSAgICAgLTY4LjgxNTAwICAgNTk5NjExMTMuOSAgICAgLTg5ODg4NjIgIC0+IC00LjEzNTIxMjkyRSs5ICBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgMjEyNjM0MS4wMiAgIDYzNDkxLjUxNTIgICAgMzAyNDI3NDU1ICAtPiAxLjM1MzA3MDQwRSsxMQ0KLWZtYTAyMjYgIGZtYSAgICAyMTI2MzQxLjAyICAgNjM0OTEuNTE1MiAgICAzMDI0Mjc0NTUgIC0+IDEuMzUzMDcwNDFFKzExICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSBJbmZpbml0ZSBjb21iaW5hdGlvbnMNCi1mbWF4MDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkNCi1mbWF4MDgwMSBmbWEgIEluZiAgIEluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDA4MDIgZm1hICBJbmYgIC1JbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWZtYXgwODA0IGZtYSAtSW5mICAgSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MDgwNSBmbWEgLUluZiAgIEluZiAgLUluZiAgICAtPiAtSW5maW5pdHkNCi1mbWF4MDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkNCi1mbWF4MDgwNyBmbWEgLUluZiAgLUluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDA4MDggZm1hIC1JbmYgICAwICAgICAgIDEgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgwODA5IGZtYSAtSW5mICAgMCAgICAgTmFOICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBUcmlwbGUgTmFOIHByb3BhZ2F0aW9uDQotZm1heDA5MDAgZm1hICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjINCi1mbWF4MDkwMSBmbWEgIDAgICAgIE5hTjMgIE5hTjUgICAtPiAgTmFOMw0KLWZtYXgwOTAyIGZtYSAgMCAgICAgMCAgICAgTmFONSAgIC0+ICBOYU41DQotLS0gZmlyc3Qgc05hTiB3aW5zIChjb25zaWRlciBxTmFOIGZyb20gZWFybGllciBzTmFOIGJlaW5nDQotLS0gb3ZlcnJpZGRlbiBieSBhbiBzTmFOIGluIHRoaXJkIG9wZXJhbmQpDQotZm1heDA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MDkwNCBmbWEgIDAgICAgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgwOTA1IGZtYSAgMCAgICAgMCAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MDkwNyBmbWEgIE5hTjcgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgwOTA4IGZtYSAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTVVMVElQTElDQVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpDQotZm1heDIwMDAgZm1hIDIgICAgICAyICAwRSs5OTk5OTkgIC0+IDQNCi1mbWF4MjAwMSBmbWEgMiAgICAgIDMgIDBFKzk5OTk5OSAgLT4gNg0KLWZtYXgyMDAyIGZtYSA1ICAgICAgMSAgMEUrOTk5OTk5ICAtPiA1DQotZm1heDIwMDMgZm1hIDUgICAgICAyICAwRSs5OTk5OTkgIC0+IDEwDQotZm1heDIwMDQgZm1hIDEuMjAgICAyICAwRSs5OTk5OTkgIC0+IDIuNDANCi1mbWF4MjAwNSBmbWEgMS4yMCAgIDAgIDBFKzk5OTk5OSAgLT4gMC4wMA0KLWZtYXgyMDA2IGZtYSAxLjIwICAtMiAgMEUrOTk5OTk5ICAtPiAtMi40MA0KLWZtYXgyMDA3IGZtYSAtMS4yMCAgMiAgMEUrOTk5OTk5ICAtPiAtMi40MA0KLWZtYXgyMDA4IGZtYSAtMS4yMCAgMCAgMEUrOTk5OTk5ICAtPiAwLjAwDQotZm1heDIwMDkgZm1hIC0xLjIwIC0yICAwRSs5OTk5OTkgIC0+IDIuNDANCi1mbWF4MjAxMCBmbWEgNS4wOSA3LjEgIDBFKzk5OTk5OSAgLT4gMzYuMTM5DQotZm1heDIwMTEgZm1hIDIuNSAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjANCi1mbWF4MjAxMiBmbWEgMi41MCAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMDANCi1mbWF4MjAxMyBmbWEgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODkgUm91bmRlZA0KLWZtYXgyMDE0IGZtYSA5Ljk5OTk5OTk5OSA5Ljk5OTk5OTk5OSAgMEUrOTk5OTk5ICAtPiAxMDAuMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDE1IGZtYSAyLjUwICAgNCAgMEUrOTk5OTk5ICAtPiAxMC4wMA0KLXByZWNpc2lvbjogNg0KLWZtYXgyMDE2IGZtYSAyLjUwICAgNCAgMEUrOTk5OTk5ICAtPiAxMC4wMA0KLWZtYXgyMDE3IGZtYSAgOS45OTk5OTkgIDkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+ICAxMDAuMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDE4IGZtYSAgOS45OTk5OTkgLTkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC0xMDAuMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDE5IGZtYSAtOS45OTk5OTkgIDkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC0xMDAuMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDIwIGZtYSAtOS45OTk5OTkgLTkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+ICAxMDAuMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIDE5OTkuMTIuMjE6IG5leHQgb25lIGlzIGEgZWRnZSBjYXNlIGlmIGludGVybWVkaWF0ZSBsb25ncyBhcmUgdXNlZA0KLXByZWNpc2lvbjogMTUNCi1mbWF4MjA1OSBmbWEgOTk5OTk5OTk5OTk5IDk3NjU2MjUgIDBFKzk5OTk5OSAgLT4gOS43NjU2MjQ5OTk5OTAyM0UrMTggSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzMA0KLWZtYXgyMTYwIGZtYSA5OTk5OTk5OTk5OTkgOTc2NTYyNSAgMEUrOTk5OTk5ICAtPiA5NzY1NjI0OTk5OTkwMjM0Mzc1DQotcHJlY2lzaW9uOiA5DQotLS0tLS0NCi0NCi0tLSB6ZXJvcywgZXRjLg0KLWZtYXgyMDIxIGZtYSAgMCAgICAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwDQotZm1heDIwMjIgZm1hICAwICAgICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDANCi1mbWF4MjAyMyBmbWEgLTAgICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KLWZtYXgyMDI0IGZtYSAtMCAgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwDQotZm1heDIwMjUgZm1hIC0wLjAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCi1mbWF4MjAyNiBmbWEgLTAuMCAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KLWZtYXgyMDI3IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQotZm1heDIwMjggZm1hIC0wLjAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCi1mbWF4MjAzMCBmbWEgIDUuMDAgICAxRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDUwMA0KLWZtYXgyMDMxIGZtYSAgMDAuMDAgIDAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwDQotZm1heDIwMzIgZm1hICAwMC4wMCAgMEUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZm1heDIwMzMgZm1hICAwRS0zICAgMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotZm1heDIwMzQgZm1hIC01LjAwICAgMUUtMyAgIDBFKzk5OTk5OSAgLT4gLTAuMDA1MDANCi1mbWF4MjAzNSBmbWEgLTAwLjAwICAwLjAwMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMA0KLWZtYXgyMDM2IGZtYSAtMDAuMDAgIDBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWZtYXgyMDM3IGZtYSAtMEUtMyAgIDAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWZtYXgyMDM4IGZtYSAgNS4wMCAgLTFFLTMgICAwRSs5OTk5OTkgIC0+IC0wLjAwNTAwDQotZm1heDIwMzkgZm1hICAwMC4wMCAtMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDANCi1mbWF4MjA0MCBmbWEgIDAwLjAwIC0wRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1mbWF4MjA0MSBmbWEgIDBFLTMgIC0wMC4wMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi1mbWF4MjA0MiBmbWEgLTUuMDAgIC0xRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDUwMA0KLWZtYXgyMDQzIGZtYSAtMDAuMDAgLTAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwDQotZm1heDIwNDQgZm1hIC0wMC4wMCAtMEUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZm1heDIwNDUgZm1hIC0wRS0zICAtMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aCBtdWx0aXBseQ0KLWZtYXgyMDUwIGZtYSAxLjIwIDMgICAgICAgICAwRSs5OTk5OTkgIC0+IDMuNjANCi1mbWF4MjA1MSBmbWEgNyAgICAzICAgICAgICAgMEUrOTk5OTk5ICAtPiAyMQ0KLWZtYXgyMDUyIGZtYSAwLjkgIDAuOCAgICAgICAwRSs5OTk5OTkgIC0+IDAuNzINCi1mbWF4MjA1MyBmbWEgMC45ICAtMCAgICAgICAgMEUrOTk5OTk5ICAtPiAwLjANCi1mbWF4MjA1NCBmbWEgNjU0MzIxIDY1NDMyMSAgMEUrOTk5OTk5ICAtPiA0LjI4MTM1OTcxRSsxMSAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDIwNjAgZm1hIDEyMy40NSAxZTcgICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzkNCi1mbWF4MjA2MSBmbWEgMTIzLjQ1IDFlOCAgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTANCi1mbWF4MjA2MiBmbWEgMTIzLjQ1IDFlKzkgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTENCi1mbWF4MjA2MyBmbWEgMTIzLjQ1IDFlMTAgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTINCi1mbWF4MjA2NCBmbWEgMTIzLjQ1IDFlMTEgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTMNCi1mbWF4MjA2NSBmbWEgMTIzLjQ1IDFlMTIgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTQNCi1mbWF4MjA2NiBmbWEgMTIzLjQ1IDFlMTMgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTUNCi0NCi0NCi0tLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMNCi1wcmVjaXNpb246IDkNCi1mbWF4MjA4MCBmbWEgMC4xIDEyMzQ1Njc4OSAgICAgICAgICAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3OC45DQotZm1heDIwODEgZm1hIDAuMSAxMjM0NTY3ODkxICAgICAgICAgIDBFKzk5OTk5OSAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDgyIGZtYSAwLjEgMTIzNDU2Nzg5MTIgICAgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDIwODMgZm1hIDAuMSAxMjM0NTY3ODkxMjM0NSAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc4OUUrMTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDIwODQgZm1hIDAuMSAxMjM0NTY3ODkgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQ0KLXByZWNpc2lvbjogOA0KLWZtYXgyMDg1IGZtYSAwLjEgMTIzNDU2Nzg5MTIgICAgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3OUUrOSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjA4NiBmbWEgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzEyIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNw0KLWZtYXgyMDg3IGZtYSAwLjEgMTIzNDU2Nzg5MTIgICAgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSs5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDg4IGZtYSAwLjEgMTIzNDU2Nzg5MTIzNDUgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1wcmVjaXNpb246IDkNCi1mbWF4MjA5MCBmbWEgMTIzNDU2Nzg5ICAgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3OC45DQotZm1heDIwOTEgZm1hIDEyMzQ1Njc4OTEgICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDkyIGZtYSAxMjM0NTY3ODkxMiAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDIwOTMgZm1hIDEyMzQ1Njc4OTEyMzQ1ICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc4OUUrMTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDIwOTQgZm1hIDEyMzQ1Njc4OSAgICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQ0KLXByZWNpc2lvbjogOA0KLWZtYXgyMDk1IGZtYSAxMjM0NTY3ODkxMiAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3OUUrOSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjA5NiBmbWEgMTIzNDU2Nzg5MTIzNDUgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzEyIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNw0KLWZtYXgyMDk3IGZtYSAxMjM0NTY3ODkxMiAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSs5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDk4IGZtYSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzDQotbWF4ZXhwb25lbnQ6IDk5OTkNCi1taW5leHBvbmVudDogLTk5OTkNCi1wcmVjaXNpb246IDMzDQotZm1heDIxMDEgZm1hIDkgOSAgICAwRSs5OTk5OTkgIC0+IDgxDQotZm1heDIxMDIgZm1hIDkgOTAgICAgMEUrOTk5OTk5ICAtPiA4MTANCi1mbWF4MjEwMyBmbWEgOSA5MDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwDQotZm1heDIxMDQgZm1hIDkgOTAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwDQotZm1heDIxMDUgZm1hIDkgOTAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDANCi1mbWF4MjEwNiBmbWEgOSA5MDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwDQotZm1heDIxMDcgZm1hIDkgOTAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwDQotZm1heDIxMDggZm1hIDkgOTAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDANCi1mbWF4MjEwOSBmbWEgOSA5MDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwDQotZm1heDIxMTAgZm1hIDkgOTAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwDQotZm1heDIxMTEgZm1hIDkgOTAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDANCi1mbWF4MjExMiBmbWEgOSA5MDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwDQotZm1heDIxMTMgZm1hIDkgOTAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwDQotZm1heDIxMTQgZm1hIDkgOTAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDANCi1mbWF4MjExNSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwDQotZm1heDIxMTYgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwDQotZm1heDIxMTcgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDANCi1mbWF4MjExOCBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwDQotZm1heDIxMTkgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwDQotZm1heDIxMjAgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDANCi1mbWF4MjEyMSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZm1heDIxMjIgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZm1heDIxMjMgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2Fycmllcw0KLWZtYXgyMTMxIGZtYSAzIDMgICAgMEUrOTk5OTk5ICAtPiA5DQotZm1heDIxMzIgZm1hIDMgMzAgICAgMEUrOTk5OTk5ICAtPiA5MA0KLWZtYXgyMTMzIGZtYSAzIDMwMCAgICAwRSs5OTk5OTkgIC0+IDkwMA0KLWZtYXgyMTM0IGZtYSAzIDMwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwDQotZm1heDIxMzUgZm1hIDMgMzAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMA0KLWZtYXgyMTM2IGZtYSAzIDMwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMA0KLWZtYXgyMTM3IGZtYSAzIDMwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwDQotZm1heDIxMzggZm1hIDMgMzAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMA0KLWZtYXgyMTM5IGZtYSAzIDMwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMA0KLWZtYXgyMTQwIGZtYSAzIDMwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwDQotZm1heDIxNDEgZm1hIDMgMzAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMA0KLWZtYXgyMTQyIGZtYSAzIDMwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMA0KLWZtYXgyMTQzIGZtYSAzIDMwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwDQotZm1heDIxNDQgZm1hIDMgMzAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMA0KLWZtYXgyMTQ1IGZtYSAzIDMwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTQ2IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwDQotZm1heDIxNDcgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTQ4IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTQ5IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwDQotZm1heDIxNTAgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTUxIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTUyIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZm1heDIxNTMgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLW1heGV4cG9uZW50OiA5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OQ0KLXByZWNpc2lvbjogOQ0KLS0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdy91bmRlcmZsb3cNCi1mbWF4MjE3MCBmbWEgMSA5ZTk5OTk5OSAgICAgMEUrOTk5OTk5ICAtPiA5RSs5OTk5OTkNCi1mbWF4MjE3MSBmbWEgMSA5LjllOTk5OTk5ICAgMEUrOTk5OTk5ICAtPiA5LjlFKzk5OTk5OQ0KLWZtYXgyMTcyIGZtYSAxIDkuOTllOTk5OTk5ICAwRSs5OTk5OTkgIC0+IDkuOTlFKzk5OTk5OQ0KLWZtYXgyMTczIGZtYSA5ZTk5OTk5OSAgICAxICAwRSs5OTk5OTkgIC0+IDlFKzk5OTk5OQ0KLWZtYXgyMTc0IGZtYSA5LjllOTk5OTk5ICAxICAwRSs5OTk5OTkgIC0+IDkuOUUrOTk5OTk5DQotZm1heDIxNzYgZm1hIDkuOTllOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gOS45OUUrOTk5OTk5DQotZm1heDIxNzcgZm1hIDEgOS45OTk5OWU5OTk5OTkgIDBFKzk5OTk5OSAgLT4gOS45OTk5OUUrOTk5OTk5DQotZm1heDIxNzggZm1hIDkuOTk5OTllOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gOS45OTk5OUUrOTk5OTk5DQotDQotZm1heDIxODAgZm1hIDAuMSA5ZS05OTk5OTggICAgMEUrOTk5OTk5ICAtPiA5RS05OTk5OTkNCi1mbWF4MjE4MSBmbWEgMC4xIDk5ZS05OTk5OTggICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk4DQotZm1heDIxODIgZm1hIDAuMSA5OTllLTk5OTk5OCAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTcNCi0NCi1mbWF4MjE4MyBmbWEgMC4xIDllLTk5OTk5OCAgICAgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk5DQotZm1heDIxODQgZm1hIDAuMSA5OWUtOTk5OTk4ICAgICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk4DQotZm1heDIxODUgZm1hIDAuMSA5OTllLTk5OTk5OCAgICAwRSs5OTk5OTkgIC0+IDkuOTlFLTk5OTk5Nw0KLWZtYXgyMTg2IGZtYSAwLjEgOTk5ZS05OTk5OTcgICAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTYNCi1mbWF4MjE4NyBmbWEgMC4xIDk5OTllLTk5OTk5NyAgIDBFKzk5OTk5OSAgLT4gOS45OTlFLTk5OTk5NQ0KLWZtYXgyMTg4IGZtYSAwLjEgOTk5OTllLTk5OTk5NyAgMEUrOTk5OTk5ICAtPiA5Ljk5OTlFLTk5OTk5NA0KLQ0KLWZtYXgyMTkwIGZtYSAxIDllLTk5OTk5OCAgICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OA0KLWZtYXgyMTkxIGZtYSAxIDk5ZS05OTk5OTggICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk3DQotZm1heDIxOTIgZm1hIDEgOTk5ZS05OTk5OTggIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2DQotZm1heDIxOTMgZm1hIDllLTk5OTk5OCAgIDEgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk4DQotZm1heDIxOTQgZm1hIDk5ZS05OTk5OTggIDEgIDBFKzk5OTk5OSAgLT4gOS45RS05OTk5OTcNCi1mbWF4MjE5NSBmbWEgOTk5ZS05OTk5OTggMSAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTYNCi0NCi0tLSBsb25nIG9wZXJhbmQgdHJpYW5nbGUNCi1wcmVjaXNpb246IDMzDQotZm1heDIyNDYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgzMCBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDMyDQotZm1heDIyNDcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgzICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDMxDQotZm1heDIyNDggZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjggICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDMwDQotZm1heDIyNDkgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MyAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDI5DQotZm1heDIyNTAgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5ICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDI4DQotZm1heDIyNTEgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDI3DQotZm1heDIyNTIgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMiAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDI2DQotZm1heDIyNTMgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDI1DQotZm1heDIyNTQgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDI0DQotZm1heDIyNTUgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNyAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDIzDQotZm1heDIyNTYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkyICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDIyDQotZm1heDIyNTcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDIxDQotZm1heDIyNTggZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDIwDQotZm1heDIyNTkgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE5DQotZm1heDIyNjAgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTcgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE4DQotZm1heDIyNjEgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM3MCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE3DQotZm1heDIyNjIgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM3ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE2DQotZm1heDIyNjMgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzQgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE1DQotZm1heDIyNjQgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MyAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE0DQotZm1heDIyNjUgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5ICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDEzDQotZm1heDIyNjYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTIgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDEyDQotZm1heDIyNjcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMSAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDExDQotZm1heDIyNjggZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDEwDQotZm1heDIyNjkgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDggICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICA5DQotZm1heDIyNzAgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICA4DQotZm1heDIyNzEgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICA3DQotZm1heDIyNzIgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjMgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICA2DQotZm1heDIyNzMgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDUNCi1mbWF4MjI3NCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjQ1NDNFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgNA0KLWZtYXgyMjc1IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDEuNDU0RSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDMNCi1mbWF4MjI3NiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjQ1RSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDINCi1mbWF4MjI3NyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjVFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMQ0KLWZtYXgyMjc4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDFFKzUgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcNCi1tYXhleHBvbmVudDogOTk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5OQ0KLXByZWNpc2lvbjogOQ0KLWZtYXgyMzAxIGZtYSA5IDkgICAgMEUrOTk5OTk5ICAtPiA4MQ0KLWZtYXgyMzAyIGZtYSA5IDkwICAgIDBFKzk5OTk5OSAgLT4gODEwDQotZm1heDIzMDMgZm1hIDkgOTAwICAgIDBFKzk5OTk5OSAgLT4gODEwMA0KLWZtYXgyMzA0IGZtYSA5IDkwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMA0KLWZtYXgyMzA1IGZtYSA5IDkwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwDQotZm1heDIzMDYgZm1hIDkgOTAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMA0KLWZtYXgyMzA3IGZtYSA5IDkwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMA0KLWZtYXgyMzA4IGZtYSA5IDkwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwDQotZm1heDIzMDkgZm1hIDkgOTAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrOSAgIFJvdW5kZWQNCi1mbWF4MjMxMCBmbWEgOSA5MDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTAgIFJvdW5kZWQNCi1mbWF4MjMxMSBmbWEgOSA5MDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzExICBSb3VuZGVkDQotZm1heDIzMTIgZm1hIDkgOTAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTIgIFJvdW5kZWQNCi1mbWF4MjMxMyBmbWEgOSA5MDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTMgIFJvdW5kZWQNCi1mbWF4MjMxNCBmbWEgOSA5MDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE0ICBSb3VuZGVkDQotZm1heDIzMTUgZm1hIDkgOTAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTUgIFJvdW5kZWQNCi1mbWF4MjMxNiBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTYgIFJvdW5kZWQNCi1mbWF4MjMxNyBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE3ICBSb3VuZGVkDQotZm1heDIzMTggZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTggIFJvdW5kZWQNCi1mbWF4MjMxOSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTkgIFJvdW5kZWQNCi1mbWF4MjMyMCBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIwICBSb3VuZGVkDQotZm1heDIzMjEgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMjEgIFJvdW5kZWQNCi1mbWF4MjMyMiBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMjIgIFJvdW5kZWQNCi1mbWF4MjMyMyBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIzICBSb3VuZGVkDQotDQotLS0gZmFzdHBhdGggYnJlYWtlcnMNCi1wcmVjaXNpb246ICAgMjkNCi1mbWF4MjMzMCBmbWEgMS40OTE4MjQ2OTc2NDEyNzAzMTc4MjQ4NTI5NTI4MzcyMjQgMS4xMDUxNzA5MTgwNzU2NDc2MjQ4MTE3MDc4MjY0OTAyNDY1MTQ2NzU2Mjg2MTQ1NjI4ODM1MzczNDU3NDc2MDMgIDBFKzk5OTk5OSAgLT4gMS42NDg3MjEyNzA3MDAxMjgxNDY4NDg2NTA3ODc4IEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICA1NQ0KLWZtYXgyMzMxIGZtYSAwLjg5NTgzNDEzNTI5NjUyODI1MDY3Njg1NDU4Mjg3NjUxMTc4MDM4NzM3MTcyODQ4OTEwNDA0MjggMC44OTU4MzQxMzUyOTY1MjgyNTA2NzY4NTQ1ODI4NzY1MTE3ODAzODczNzE3Mjg0ODkxMDQwNDI4ICAwRSs5OTk5OTkgIC0+IDAuODAyNTE4Nzk3OTYyNDc4NDgyOTg0MjU1MzgyOTkzNDA2OTk1NTg5MDk4MzY5Njc1MjIyODI5OSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSB0cnl6ZXJvcyBjYXNlcw0KLXByZWNpc2lvbjogICA3DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogOTINCi1taW5leHBvbmVudDogLTkyDQotZm1heDI1MDQgIGZtYSAgMEUtNjAgMTAwMEUtNjAgICAwRSs5OTk5OTkgIC0+IDBFLTk4IENsYW1wZWQNCi1mbWF4MjUwNSAgZm1hICAxMDBFKzYwIDBFKzYwICAgIDBFKzk5OTk5OSAgLT4gMEUrOTIgQ2xhbXBlZA0KLQ0KLS0tIG1peGVkIHdpdGggemVyb3MNCi1tYXhleHBvbmVudDogOTk5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5OTkNCi1wcmVjaXNpb246IDkNCi1mbWF4MjU0MSBmbWEgIDAgICAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwDQotZm1heDI1NDIgZm1hIC0wICAgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KLWZtYXgyNTQzIGZtYSAgMCAgICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIDANCi1mbWF4MjU0NCBmbWEgLTAgICAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwDQotZm1heDI1NDUgZm1hIC0xICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KLWZtYXgyNTQ2IGZtYSAtMSAgICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDANCi1mbWF4MjU0NyBmbWEgIDEgICAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwDQotZm1heDI1NDggZm1hICAxICAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KLQ0KLWZtYXgyNTUxIGZtYSAgMC4wICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTUyIGZtYSAtMC4wICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTUzIGZtYSAgMC4wICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTU0IGZtYSAtMC4wICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTU1IGZtYSAtMS4wICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTU2IGZtYSAtMS4wICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTU3IGZtYSAgMS4wICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTU4IGZtYSAgMS4wICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLQ0KLWZtYXgyNTYxIGZtYSAgMCAgICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTYyIGZtYSAtMCAgICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTYzIGZtYSAgMCAgICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTY0IGZtYSAtMCAgICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTY1IGZtYSAtMSAgICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTY2IGZtYSAtMSAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTY3IGZtYSAgMSAgICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLWZtYXgyNTY4IGZtYSAgMSAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMA0KLQ0KLWZtYXgyNTcxIGZtYSAgMC4wICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCi1mbWF4MjU3MiBmbWEgLTAuMCAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQotZm1heDI1NzMgZm1hICAwLjAgICAxLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KLWZtYXgyNTc0IGZtYSAtMC4wICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCi1mbWF4MjU3NSBmbWEgLTEuMCAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQotZm1heDI1NzYgZm1hIC0xLjAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KLWZtYXgyNTc3IGZtYSAgMS4wICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCi1mbWF4MjU3OCBmbWEgIDEuMCAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQotDQotDQotLS0gU3BlY2lhbHMNCi1mbWF4MjU4MCBmbWEgIEluZiAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KLWZtYXgyNTgxIGZtYSAgSW5mICAtMTAwMCAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQotZm1heDI1ODIgZm1hICBJbmYgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCi1mbWF4MjU4MyBmbWEgIEluZiAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI1ODQgZm1hICBJbmYgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNTg1IGZtYSAgSW5mICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQotZm1heDI1ODYgZm1hICBJbmYgICAxMDAwICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkNCi1mbWF4MjU4NyBmbWEgIEluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KLWZtYXgyNTg4IGZtYSAtMTAwMCAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQotZm1heDI1ODkgZm1hIC1JbmYgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCi1mbWF4MjU5MCBmbWEgLTEgICAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KLWZtYXgyNTkxIGZtYSAtMCAgICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjU5MiBmbWEgIDAgICAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI1OTMgZm1hICAxICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkNCi1mbWF4MjU5NCBmbWEgIDEwMDAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KLWZtYXgyNTk1IGZtYSAgSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQotDQotZm1heDI2MDAgZm1hIC1JbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkNCi1mbWF4MjYwMSBmbWEgLUluZiAgLTEwMDAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KLWZtYXgyNjAyIGZtYSAtSW5mICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQotZm1heDI2MDMgZm1hIC1JbmYgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjA0IGZtYSAtSW5mICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjYwNSBmbWEgLUluZiAgIDEgICAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KLWZtYXgyNjA2IGZtYSAtSW5mICAgMTAwMCAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQotZm1heDI2MDcgZm1hIC1JbmYgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCi1mbWF4MjYwOCBmbWEgLTEwMDAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KLWZtYXgyNjA5IGZtYSAtSW5mICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQotZm1heDI2MTAgZm1hIC0xICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkNCi1mbWF4MjYxMSBmbWEgLTAgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2MTIgZm1hICAwICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjEzIGZtYSAgMSAgICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQotZm1heDI2MTQgZm1hICAxMDAwIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCi1mbWF4MjYxNSBmbWEgIEluZiAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KLQ0KLWZtYXgyNjIxIGZtYSAgTmFOIC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjIyIGZtYSAgTmFOIC0xMDAwICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjIzIGZtYSAgTmFOIC0xICAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjI0IGZtYSAgTmFOIC0wICAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjI1IGZtYSAgTmFOICAwICAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjI2IGZtYSAgTmFOICAxICAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjI3IGZtYSAgTmFOICAxMDAwICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjI4IGZtYSAgTmFOICBJbmYgICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjI5IGZtYSAgTmFOICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjMwIGZtYSAtSW5mICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjMxIGZtYSAtMTAwMCBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjMyIGZtYSAtMSAgICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjMzIGZtYSAtMCAgICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjM0IGZtYSAgMCAgICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjM1IGZtYSAgMSAgICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjM2IGZtYSAgMTAwMCBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLWZtYXgyNjM3IGZtYSAgSW5mICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTg0KLQ0KLWZtYXgyNjQxIGZtYSAgc05hTiAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY0MiBmbWEgIHNOYU4gLTEwMDAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NDMgZm1hICBzTmFOIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjQ0IGZtYSAgc05hTiAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY0NSBmbWEgIHNOYU4gIDAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NDYgZm1hICBzTmFOICAxICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjQ3IGZtYSAgc05hTiAgMTAwMCAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY0OCBmbWEgIHNOYU4gIE5hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NDkgZm1hICBzTmFOIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjUwIGZtYSAgTmFOICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY1MSBmbWEgLUluZiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NTIgZm1hIC0xMDAwIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjUzIGZtYSAtMSAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY1NCBmbWEgLTAgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NTUgZm1hICAwICAgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjU2IGZtYSAgMSAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY1NyBmbWEgIDEwMDAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NTggZm1hICBJbmYgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjU5IGZtYSAgTmFOICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZm1heDI2NjEgZm1hICBOYU45IC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOOQ0KLWZtYXgyNjYyIGZtYSAgTmFOOCAgOTk5ICAgIDBFKzk5OTk5OSAgLT4gIE5hTjgNCi1mbWF4MjY2MyBmbWEgIE5hTjcxIEluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU43MQ0KLWZtYXgyNjY0IGZtYSAgTmFONiAgTmFONSAgIDBFKzk5OTk5OSAgLT4gIE5hTjYNCi1mbWF4MjY2NSBmbWEgLUluZiAgIE5hTjQgICAwRSs5OTk5OTkgIC0+ICBOYU40DQotZm1heDI2NjYgZm1hIC05OTkgICBOYU4zMyAgMEUrOTk5OTk5ICAtPiAgTmFOMzMNCi1mbWF4MjY2NyBmbWEgIEluZiAgIE5hTjIgICAwRSs5OTk5OTkgIC0+ICBOYU4yDQotDQotZm1heDI2NzEgZm1hICBzTmFOOTkgLUluZiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY3MiBmbWEgIHNOYU45OCAtMTEgICAgICAwRSs5OTk5OTkgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjczIGZtYSAgc05hTjk3ICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NzQgZm1hICBzTmFOMTYgc05hTjk0ICAgMEUrOTk5OTk5ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY3NSBmbWEgIE5hTjk1ICBzTmFOOTMgICAwRSs5OTk5OTkgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjc2IGZtYSAtSW5mICAgIHNOYU45MiAgIDBFKzk5OTk5OSAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NzcgZm1hICAwODggICAgc05hTjkxICAgMEUrOTk5OTk5ICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY3OCBmbWEgIEluZiAgICBzTmFOOTAgICAwRSs5OTk5OTkgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjc5IGZtYSAgTmFOICAgIHNOYU44OSAgIDBFKzk5OTk5OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotZm1heDI2ODEgZm1hIC1OYU45IC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFOOQ0KLWZtYXgyNjgyIGZtYSAtTmFOOCAgOTk5ICAgIDBFKzk5OTk5OSAgLT4gLU5hTjgNCi1mbWF4MjY4MyBmbWEgLU5hTjcxIEluZiAgICAwRSs5OTk5OTkgIC0+IC1OYU43MQ0KLWZtYXgyNjg0IGZtYSAtTmFONiAtTmFONSAgIDBFKzk5OTk5OSAgLT4gLU5hTjYNCi1mbWF4MjY4NSBmbWEgLUluZiAgLU5hTjQgICAwRSs5OTk5OTkgIC0+IC1OYU40DQotZm1heDI2ODYgZm1hIC05OTkgIC1OYU4zMyAgMEUrOTk5OTk5ICAtPiAtTmFOMzMNCi1mbWF4MjY4NyBmbWEgIEluZiAgLU5hTjIgICAwRSs5OTk5OTkgIC0+IC1OYU4yDQotDQotZm1heDI2OTEgZm1hIC1zTmFOOTkgLUluZiAgICAgMEUrOTk5OTk5ICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY5MiBmbWEgLXNOYU45OCAtMTEgICAgICAwRSs5OTk5OTkgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjkzIGZtYSAtc05hTjk3ICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2OTQgZm1hIC1zTmFOMTYgLXNOYU45NCAgMEUrOTk5OTk5ICAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY5NSBmbWEgLU5hTjk1ICAtc05hTjkzICAwRSs5OTk5OTkgIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjk2IGZtYSAtSW5mICAgIC1zTmFOOTIgIDBFKzk5OTk5OSAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2OTcgZm1hICAwODggICAgLXNOYU45MSAgMEUrOTk5OTk5ICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY5OCBmbWEgIEluZiAgICAtc05hTjkwICAwRSs5OTk5OTkgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjk5IGZtYSAtTmFOICAgIC1zTmFOODkgIDBFKzk5OTk5OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotZm1heDI3MDEgZm1hIC1OYU4gIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFODQotZm1heDI3MDIgZm1hIC1OYU4gICA5OTkgICAgMEUrOTk5OTk5ICAtPiAtTmFODQotZm1heDI3MDMgZm1hIC1OYU4gICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFODQotZm1heDI3MDQgZm1hIC1OYU4gIC1OYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFODQotZm1heDI3MDUgZm1hIC1JbmYgIC1OYU4wICAgMEUrOTk5OTk5ICAtPiAtTmFODQotZm1heDI3MDYgZm1hIC05OTkgIC1OYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFODQotZm1heDI3MDcgZm1hICBJbmYgIC1OYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFODQotDQotZm1heDI3MTEgZm1hIC1zTmFOICAgLUluZiAgICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI3MTIgZm1hIC1zTmFOICAgLTExICAgICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI3MTMgZm1hIC1zTmFOMDAgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI3MTQgZm1hIC1zTmFOICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI3MTUgZm1hIC1OYU4gICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI3MTYgZm1hIC1JbmYgICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI3MTcgZm1hICAwODggICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI3MTggZm1hICBJbmYgICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI3MTkgZm1hIC1OYU4gICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzDQotbWF4ZXhwb25lbnQ6IDk5OTk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5OTk5DQotZm1heDI3MzAgZm1hICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1mbWF4MjczMSBmbWEgOUUrOTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWZtYXgyNzMyIGZtYSArMC4xMDAgOUUtOTk5OTk5ICAwRSs5OTk5OTkgIC0+IDkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsDQotZm1heDI3MzMgZm1hIDlFLTk5OTk5OSArMC4xMDAgIDBFKzk5OTk5OSAgLT4gOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwNCi1mbWF4MjczNSBmbWEgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1mbWF4MjczNiBmbWEgOUUrOTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1mbWF4MjczNyBmbWEgLTAuMTAwIDlFLTk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwNCi1mbWF4MjczOCBmbWEgOUUtOTk5OTk5IC0wLjEwMCAgMEUrOTk5OTk5ICAtPiAtOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwNCi0NCi0tLSBzaWducw0KLWZtYXgyNzUxIGZtYSAgMWUrNzc3Nzc3ICAxZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzUyIGZtYSAgMWUrNzc3Nzc3IC0xZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzUzIGZtYSAtMWUrNzc3Nzc3ICAxZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzU0IGZtYSAtMWUrNzc3Nzc3IC0xZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzU1IGZtYSAgMWUtNzc3Nzc3ICAxZS00MTExMTEgIDBFKzk5OTk5OSAgLT4gIDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWZtYXgyNzU2IGZtYSAgMWUtNzc3Nzc3IC0xZS00MTExMTEgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWZtYXgyNzU3IGZtYSAtMWUtNzc3Nzc3ICAxZS00MTExMTEgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWZtYXgyNzU4IGZtYSAtMWUtNzc3Nzc3IC0xZS00MTExMTEgIDBFKzk5OTk5OSAgLT4gIDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KLXByZWNpc2lvbjogOQ0KLWZtYXgyNzYwIGZtYSAxZS02MDAwMDAgMWUtNDAwMDAxICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDEgU3Vibm9ybWFsDQotZm1heDI3NjEgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDIgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwMiBTdWJub3JtYWwNCi1mbWF4Mjc2MiBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwMyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDAzIFN1Ym5vcm1hbA0KLWZtYXgyNzYzIGZtYSAxZS02MDAwMDAgMWUtNDAwMDA0ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDQgU3Vibm9ybWFsDQotZm1heDI3NjQgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDUgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNSBTdWJub3JtYWwNCi1mbWF4Mjc2NSBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNiAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA2IFN1Ym5vcm1hbA0KLWZtYXgyNzY2IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDcgU3Vibm9ybWFsDQotZm1heDI3NjcgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDggIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZm1heDI3NjggZm1hIDFlLTYwMDAwMCAxZS00MDAwMDkgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZm1heDI3NjkgZm1hIDFlLTYwMDAwMCAxZS00MDAwMTAgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQ0KLWZtYXgyNzcwIGZtYSAxZSs2MDAwMDAgMWUrNDAwMDAxICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzcxIGZtYSAxZSs2MDAwMDAgMWUrNDAwMDAyICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzcyIGZtYSAxZSs2MDAwMDAgMWUrNDAwMDAzICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzczIGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA0ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzc0IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA1ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzc1IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA2ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzc2IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA3ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzc3IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA4ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzc4IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA5ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyNzc5IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDEwICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tICdzdWJub3JtYWwnIHRlc3QgZWRnZSBjb25kaXRpb24gYXQgaGlnaGVyIHByZWNpc2lvbnMNCi1wcmVjaXNpb246IDk5DQotZm1heDI3ODAgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDcgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNyBTdWJub3JtYWwNCi1mbWF4Mjc4MSBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwOCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA4IFN1Ym5vcm1hbA0KLWZtYXgyNzgyIGZtYSAxZS02MDAwMDAgMWUtNDAwMDk3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwOTcgU3Vibm9ybWFsDQotZm1heDI3ODMgZm1hIDFlLTYwMDAwMCAxZS00MDAwOTggIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDA5NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotcHJlY2lzaW9uOiA5OTkNCi1mbWF4Mjc4NCBmbWEgMWUtNjAwMDAwIDFlLTQwMDk5NyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwOTk3IFN1Ym5vcm1hbA0KLWZtYXgyNzg1IGZtYSAxZS02MDAwMDAgMWUtNDAwOTk4ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDA5OTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tIHRlc3Qgc3Vibm9ybWFscyByb3VuZGluZw0KLXByZWNpc2lvbjogICA1DQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWZtYXgyODAxIGZtYSAgMS4wMDAwRS05OTkgIDEgICAgICAwRSs5OTk5OTkgIC0+IDEuMDAwMEUtOTk5DQotZm1heDI4MDIgZm1hICAxLjAwMEUtOTk5ICAgMWUtMSAgIDBFKzk5OTk5OSAgLT4gMS4wMDBFLTEwMDAgU3Vibm9ybWFsDQotZm1heDI4MDMgZm1hICAxLjAwRS05OTkgICAgMWUtMiAgIDBFKzk5OTk5OSAgLT4gMS4wMEUtMTAwMSAgU3Vibm9ybWFsDQotZm1heDI4MDQgZm1hICAxLjBFLTk5OSAgICAgMWUtMyAgIDBFKzk5OTk5OSAgLT4gMS4wRS0xMDAyICAgU3Vibm9ybWFsDQotZm1heDI4MDUgZm1hICAxLjBFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MjgwNiBmbWEgIDEuM0UtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODA3IGZtYSAgMS41RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MDggZm1hICAxLjdFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjgwOSBmbWEgIDIuM0UtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODEwIGZtYSAgMi41RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MTEgZm1hICAyLjdFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gM0UtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjgxMiBmbWEgIDEuNDlFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODEzIGZtYSAgMS41MEUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MTQgZm1hICAxLjUxRS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjgxNSBmbWEgIDIuNDlFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODE2IGZtYSAgMi41MEUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MTcgZm1hICAyLjUxRS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gM0UtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MjgxOCBmbWEgIDFFLTk5OSAgICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBTdWJub3JtYWwNCi1mbWF4MjgxOSBmbWEgIDNFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZm1heDI4MjAgZm1hICA1RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWZtYXgyODIxIGZtYSAgN0UtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MjIgZm1hICA5RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjgyMyBmbWEgIDkuOUUtOTk5ICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgyODI0IGZtYSAgMUUtOTk5ICAgICAgLTFlLTQgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFN1Ym5vcm1hbA0KLWZtYXgyODI1IGZtYSAgM0UtOTk5ICAgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1mbWF4MjgyNiBmbWEgLTVFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAtMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZm1heDI4MjcgZm1hICA3RS05OTkgICAgICAtMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTFFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjgyOCBmbWEgLTlFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODI5IGZtYSAgOS45RS05OTkgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MzAgZm1hICAzLjBFLTk5OSAgICAtMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLWZtYXgyODMxIGZtYSAgMS4wRS01MDEgICAgIDFlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjBFLTEwMDIgICBTdWJub3JtYWwNCi1mbWF4MjgzMiBmbWEgIDIuMEUtNTAxICAgICAyZS01MDEgIDBFKzk5OTk5OSAgLT4gNC4wRS0xMDAyICAgU3Vibm9ybWFsDQotZm1heDI4MzMgZm1hICA0LjBFLTUwMSAgICAgNGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNjBFLTEwMDEgIFN1Ym5vcm1hbA0KLWZtYXgyODM0IGZtYSAxMC4wRS01MDEgICAgMTBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjAwMEUtMTAwMCBTdWJub3JtYWwNCi1mbWF4MjgzNSBmbWEgMzAuMEUtNTAxICAgIDMwZS01MDEgIDBFKzk5OTk5OSAgLT4gOS4wMDBFLTEwMDAgU3Vibm9ybWFsDQotZm1heDI4MzYgZm1hIDQwLjBFLTUwMSAgICA0MGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNjAwMEUtOTk5DQotDQotLS0gc3F1YXJlcw0KLWZtYXgyODQwIGZtYSAgMUUtNTAyICAgICAgIDFlLTUwMiAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZm1heDI4NDEgZm1hICAxRS01MDEgICAgICAgMWUtNTAxICAwRSs5OTk5OTkgIC0+IDFFLTEwMDIgICAgIFN1Ym5vcm1hbA0KLWZtYXgyODQyIGZtYSAgMkUtNTAxICAgICAgIDJlLTUwMSAgMEUrOTk5OTk5ICAtPiA0RS0xMDAyICAgICBTdWJub3JtYWwNCi1mbWF4Mjg0MyBmbWEgIDRFLTUwMSAgICAgICA0ZS01MDEgIDBFKzk5OTk5OSAgLT4gMS42RS0xMDAxICAgU3Vibm9ybWFsDQotZm1heDI4NDQgZm1hIDEwRS01MDEgICAgICAxMGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuMDBFLTEwMDAgIFN1Ym5vcm1hbA0KLWZtYXgyODQ1IGZtYSAzMEUtNTAxICAgICAgMzBlLTUwMSAgMEUrOTk5OTk5ICAtPiA5LjAwRS0xMDAwICBTdWJub3JtYWwNCi1mbWF4Mjg0NiBmbWEgNDBFLTUwMSAgICAgIDQwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS42MDBFLTk5OQ0KLQ0KLS0tIGN1YmVzDQotZm1heDI4NTAgZm1hICAxRS02NzAgICAgIDFlLTMzNSAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1mbWF4Mjg1MSBmbWEgIDFFLTY2OCAgICAgMWUtMzM0ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDIgICAgU3Vibm9ybWFsDQotZm1heDI4NTIgZm1hICA0RS02NjggICAgIDJlLTMzNCAgMEUrOTk5OTk5ICAtPiA4RS0xMDAyICAgIFN1Ym5vcm1hbA0KLWZtYXgyODUzIGZtYSAgOUUtNjY4ICAgICAzZS0zMzQgIDBFKzk5OTk5OSAgLT4gMi43RS0xMDAxICBTdWJub3JtYWwNCi1mbWF4Mjg1NCBmbWEgMTZFLTY2OCAgICAgNGUtMzM0ICAwRSs5OTk5OTkgIC0+IDYuNEUtMTAwMSAgU3Vibm9ybWFsDQotZm1heDI4NTUgZm1hIDI1RS02NjggICAgIDVlLTMzNCAgMEUrOTk5OTk5ICAtPiAxLjI1RS0xMDAwIFN1Ym5vcm1hbA0KLWZtYXgyODU2IGZtYSAxMEUtNjY4ICAgMTAwZS0zMzQgIDBFKzk5OTk5OSAgLT4gMS4wMDBFLTk5OQ0KLQ0KLS0tIHRlc3QgZGVyaXZlZCBmcm9tIHJlc3VsdCBvZiAwLjA5OSAqKiA5OTkgYXQgMTUgZGlnaXRzIHdpdGggdW5saW1pdGVkIGV4cG9uZW50DQotcHJlY2lzaW9uOiAxOQ0KLWZtYXgyODYwIGZtYSAgNjYzNjg1MTU1Nzk5NDU3ODcxNkUtNTIwIDY2MzY4NTE1NTc5OTQ1Nzg3MTZFLTUyMCAgMEUrOTk5OTk5ICAtPiA0LjQwNDc3OTg2MDI4NTUxRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoDQotcHJlY2lzaW9uOiAzDQotbWF4RXhwb25lbnQ6IDk5OTk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5OTk5DQotZm1heDI4NzAgZm1hIDEgIDkuOTk5RSs5OTk5OTkgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZm1heDI4NzEgZm1hIDEgLTkuOTk5RSs5OTk5OTkgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZm1heDI4NzIgZm1hICAgIDkuOTk5RSs5OTk5OTkgMSAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZm1heDI4NzMgZm1hICAgLTkuOTk5RSs5OTk5OTkgMSAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotDQotLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMNCi1wcmVjaXNpb246ICAgNQ0KLW1heGV4cG9uZW50OiA3OQ0KLW1pbmV4cG9uZW50OiAtNzkNCi1mbWF4Mjg4MSBmbWEgIDEuMjM0N0UtNDAgIDEuMjM0N0UtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyNEUtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDI4ODIgZm1hICAxLjIzNEUtNDAgIDEuMjM0RS00MCAgICAgMEUrOTk5OTk5ICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgyODgzIGZtYSAgMS4yM0UtNDAgICAxLjIzRS00MCAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNTEzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4Mjg4NCBmbWEgIDEuMkUtNDAgICAgMS4yRS00MCAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjQ0RS04MCAgIFN1Ym5vcm1hbA0KLWZtYXgyODg1IGZtYSAgMS4yRS00MCAgICAxLjJFLTQxICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNDRFLTgxICAgU3Vibm9ybWFsDQotZm1heDI4ODYgZm1hICAxLjJFLTQwICAgIDEuMkUtNDIgICAgICAgMEUrOTk5OTk5ICAtPiAgMS40RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgyODg3IGZtYSAgMS4yRS00MCAgICAxLjNFLTQyICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNkUtODIgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4Mjg4OCBmbWEgIDEuM0UtNDAgICAgMS4zRS00MiAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjdFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDI4ODkgZm1hICAxLjNFLTQwICAgIDEuM0UtNDMgICAgICAgMEUrOTk5OTk5ICAtPiAgICAyRS04MyAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgyODkwIGZtYSAgMS4zRS00MSAgICAxLjNFLTQzICAgICAgIDBFKzk5OTk5OSAgLT4gICAgMEUtODMgICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLQ0KLWZtYXgyODkxIGZtYSAgMS4yMzQ1RS0zOSAgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzNEUtNzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4OTIgZm1hICAxLjIzNDU2RS0zOSAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjM0RS03OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjg5MyBmbWEgIDEuMjM0NUUtNDAgICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDI4OTQgZm1hICAxLjIzNDU2RS00MCAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgyODk1IGZtYSAgMS4yMzQ1RS00MSAgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTJFLTgxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4Mjg5NiBmbWEgIDEuMjM0NTZFLTQxICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyRS04MSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotDQotLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdw0KLXByZWNpc2lvbjogICAxNg0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotDQotZm1heDI5MDAgZm1hICAwLjMwMDAwMDAwMDBFLTE5MSAwLjMwMDAwMDAwMDBFLTE5MSAgMEUrOTk5OTk5ICAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MjkwMSBmbWEgIDAuMzAwMDAwMDAwMUUtMTkxIDAuMzAwMDAwMDAwMUUtMTkxICAwRSs5OTk5OTkgIC0+IDkuMDAwMDAwMDA2MDAwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgyOTAyIGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5ICAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDI5MDMgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5ICAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MjkwNCBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5ICAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgyOTA1IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5ICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0DQotZm1heDI5MDYgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAxICAgICAgICAgICAgICAgICAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzDQotZm1heDI5MDcgZm1hICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAgMEUrOTk5OTk5ICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5DQotLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4NCi1mbWF4MjkwOCBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MjkwOSBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5ICAgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MjkxMCBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OSAgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MjkxMSBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTkgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi0NCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkNCi1wcmVjaXNpb246ICAgMzQNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotZm1heDI5MjEgIGZtYSAxMzBFLTIgIDEyMEUtMiAgMEUrOTk5OTk5ICAtPiAxLjU2MDANCi1mbWF4MjkyMiAgZm1hIDEzMEUtMiAgMTJFLTEgICAwRSs5OTk5OTkgIC0+IDEuNTYwDQotZm1heDI5MjMgIGZtYSAxMzBFLTIgIDFFMCAgICAgMEUrOTk5OTk5ICAtPiAxLjMwDQotDQotLS0gTnVsbCB0ZXN0cw0KLWZtYXgyOTkwIGZtYSAgIyAxMCAgMEUrOTk5OTk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mjk5MSBmbWEgMTAgICMgIDBFKzk5OTk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQURESVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLS0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQ0KLWZtYXgzMDAxIGZtYSAgMSAgIDEgICAgICAgMSAgICAgICAtPiAgMg0KLWZtYXgzMDAyIGZtYSAgMSAgIDIgICAgICAgMyAgICAgICAtPiAgNQ0KLWZtYXgzMDAzIGZtYSAgMSAgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQ0KLWZtYXgzMDA0IGZtYSAgMSAgICc1JyAgICAgJy0zJyAgICAtPiAgMg0KLWZtYXgzMDA1IGZtYSAgMSAgICctNScgICAgJy0zJyAgICAtPiAgLTgNCi1mbWF4MzAwNiBmbWEgIDEgICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUNCi1mbWF4MzAwNyBmbWEgIDEgICAnMC43JyAgICcwLjMnICAgLT4gIDEuMA0KLWZtYXgzMDA4IGZtYSAgMSAgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MA0KLWZtYXgzMDA5IGZtYSAgMSAgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5Jw0KLWZtYXgzMDEwIGZtYSAgMSAgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJw0KLQ0KLWZtYXgzMDExIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwMTIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0MCcgICcwLjU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzAxMyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzAxNCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0OScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwMTUgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDk5JyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDE2IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ5OTknICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzAxNyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MDAwJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwMTggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTAwMScgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDE5IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDUwMScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzAyMCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDMwMjEgZm1hICAxICAgMCAxIC0+IDENCi1mbWF4MzAyMiBmbWEgIDEgICAxIDEgLT4gMg0KLWZtYXgzMDIzIGZtYSAgMSAgIDIgMSAtPiAzDQotZm1heDMwMjQgZm1hICAxICAgMyAxIC0+IDQNCi1mbWF4MzAyNSBmbWEgIDEgICA0IDEgLT4gNQ0KLWZtYXgzMDI2IGZtYSAgMSAgIDUgMSAtPiA2DQotZm1heDMwMjcgZm1hICAxICAgNiAxIC0+IDcNCi1mbWF4MzAyOCBmbWEgIDEgICA3IDEgLT4gOA0KLWZtYXgzMDI5IGZtYSAgMSAgIDggMSAtPiA5DQotZm1heDMwMzAgZm1hICAxICAgOSAxIC0+IDEwDQotDQotLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQotZm1heDMwMzEgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnDQotZm1heDMwMzIgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknDQotZm1heDMwMzMgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnDQotZm1heDMwMzQgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnDQotDQotZm1heDMwMzUgZm1hICAxICAgJzcwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDM2IGZtYSAgMSAgICc3MDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwMzcgZm1hICAxICAgJzcwMDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwMzggZm1hICAxICAgJzcwMDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMUUrMTMnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDM5IGZtYSAgMSAgICc3MDAwMDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDA3RSsxMycgUm91bmRlZA0KLQ0KLS0tIHN5bW1ldHJ5Og0KLWZtYXgzMDQwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzA0MSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDQyIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDQ0IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDFFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzA0NSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwN0UrMTMnIFJvdW5kZWQNCi0NCi0tLSBzYW1lLCBoaWdoZXIgcHJlY2lzaW9uDQotcHJlY2lzaW9uOiAxNQ0KLWZtYXgzMDQ2IGZtYSAgMSAgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnDQotZm1heDMwNDcgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnDQotZm1heDMwNDggZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJw0KLWZtYXgzMDQ5IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnDQotZm1heDMwNTAgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnDQotZm1heDMwNTEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJw0KLWZtYXgzMDUyIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KLWZtYXgzMDUzIGZtYSAgMSAgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcNCi1mbWF4MzA1NCBmbWEgIDEgICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJw0KLWZtYXgzMDU1IGZtYSAgMSAgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnDQotZm1heDMwNTYgZm1hICAxICAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnDQotZm1heDMwNTcgZm1hICAxICAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcNCi0NCi0tLSB6ZXJvIHByZXNlcnZhdGlvbg0KLXByZWNpc2lvbjogNg0KLWZtYXgzMDYwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEuMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzA2MSBmbWEgIDEgICAxICcwLjAwMDEnIC0+ICcxLjAwMDEnDQotZm1heDMwNjIgZm1hICAxICAgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnDQotZm1heDMwNjMgZm1hICAxICAgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzA2NCBmbWEgIDEgICAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzA2NSBmbWEgIDEgICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQ0KLWZtYXgzMDcwIGZtYSAgMSAgIDEgIDAgICAgLT4gMQ0KLWZtYXgzMDcxIGZtYSAgMSAgIDEgMC4gICAgLT4gMQ0KLWZtYXgzMDcyIGZtYSAgMSAgIDEgIC4wICAgLT4gMS4wDQotZm1heDMwNzMgZm1hICAxICAgMSAwLjAgICAtPiAxLjANCi1mbWF4MzA3NCBmbWEgIDEgICAxIDAuMDAgIC0+IDEuMDANCi1mbWF4MzA3NSBmbWEgIDEgICAgMCAgMSAgIC0+IDENCi1mbWF4MzA3NiBmbWEgIDEgICAwLiAgMSAgIC0+IDENCi1mbWF4MzA3NyBmbWEgIDEgICAgLjAgMSAgIC0+IDEuMA0KLWZtYXgzMDc4IGZtYSAgMSAgIDAuMCAxICAgLT4gMS4wDQotZm1heDMwNzkgZm1hICAxICAgMC4wMCAxICAtPiAxLjAwDQotDQotcHJlY2lzaW9uOiA5DQotDQotLS0gc29tZSBjYXJyaWVzDQotZm1heDMwODAgZm1hICAxICAgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQ0KLWZtYXgzMDgxIGZtYSAgMSAgIDk5OTk5OTk5OSAxICAtPiAxLjAwMDAwMDAwRSs5IFJvdW5kZWQNCi1mbWF4MzA4MiBmbWEgIDEgICAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwDQotZm1heDMwODMgZm1hICAxICAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwDQotZm1heDMwODQgZm1hICAxICAgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDANCi1mbWF4MzA4NSBmbWEgIDEgICAgICAgOTk5OTkgMSAgLT4gMTAwMDAwDQotZm1heDMwODYgZm1hICAxICAgICAgICA5OTk5IDEgIC0+IDEwMDAwDQotZm1heDMwODcgZm1hICAxICAgICAgICAgOTk5IDEgIC0+IDEwMDANCi1mbWF4MzA4OCBmbWEgIDEgICAgICAgICAgOTkgMSAgLT4gMTAwDQotZm1heDMwODkgZm1hICAxICAgICAgICAgICA5IDEgIC0+IDEwDQotDQotDQotLS0gbW9yZSBMSFMgc3dhcHMNCi1mbWF4MzA5MCBmbWEgIDEgICAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycNCi1mbWF4MzA5MSBmbWEgIDEgICAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3Jw0KLWZtYXgzMDkyIGZtYSAgMSAgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycNCi1mbWF4MzA5MyBmbWEgIDEgICAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycNCi1mbWF4MzA5NCBmbWEgIDEgICAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycNCi1mbWF4MzA5NSBmbWEgIDEgICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycNCi1mbWF4MzA5NiBmbWEgIDEgICAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycNCi1mbWF4MzA5NyBmbWEgIDEgICAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3Jw0KLWZtYXgzMDk4IGZtYSAgMSAgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnDQotZm1heDMwOTkgZm1hICAxICAgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03Jw0KLWZtYXgzMTAwIGZtYSAgMSAgICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnDQotZm1heDMxMDEgZm1hICAxICAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1Jw0KLWZtYXgzMTAyIGZtYSAgMSAgICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1Jw0KLWZtYXgzMTAzIGZtYSAgMSAgICctNUUtMScgICAgICAgIDAgLT4gICctMC41Jw0KLWZtYXgzMTA0IGZtYSAgMSAgICctNUUwJyAgICAgICAgIDAgLT4gICctNScNCi1mbWF4MzEwNSBmbWEgIDEgICAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJw0KLWZtYXgzMTA2IGZtYSAgMSAgICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJw0KLWZtYXgzMTA3IGZtYSAgMSAgICctNUU4JyAgICAgICAgIDAgLT4gICctNTAwMDAwMDAwJw0KLWZtYXgzMTA4IGZtYSAgMSAgICctNUU5JyAgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrOScgICBSb3VuZGVkDQotZm1heDMxMDkgZm1hICAxICAgJy01RTEwJyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSsxMCcgIFJvdW5kZWQNCi1mbWF4MzExMCBmbWEgIDEgICAnLTVFMTEnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzExJyAgUm91bmRlZA0KLWZtYXgzMTExIGZtYSAgMSAgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTAwJyBSb3VuZGVkDQotDQotLS0gbW9yZSBSSFMgc3dhcHMNCi1mbWF4MzExMyBmbWEgIDEgICAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3Jw0KLWZtYXgzMTE0IGZtYSAgMSAgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycNCi1mbWF4MzExNiBmbWEgIDEgICAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycNCi1mbWF4MzExNyBmbWEgIDEgICAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3Jw0KLWZtYXgzMTE5IGZtYSAgMSAgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnDQotZm1heDMxMjAgZm1hICAxICAgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycNCi1mbWF4MzEyMSBmbWEgIDEgICAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43Jw0KLWZtYXgzMTIyIGZtYSAgMSAgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycNCi1mbWF4MzEyMyBmbWEgIDEgICAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnDQotZm1heDMxMjQgZm1hICAxICAgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnDQotZm1heDMxMjUgZm1hICAxICAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1Jw0KLWZtYXgzMTI2IGZtYSAgMSAgIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1Jw0KLWZtYXgzMTI3IGZtYSAgMSAgIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnDQotZm1heDMxMjggZm1hICAxICAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScNCi1mbWF4MzEyOSBmbWEgIDEgICAwICAnLTVFMCcgICAgICAgLT4gICctNScNCi1mbWF4MzEzMCBmbWEgIDEgICAwICAnLTVFMScgICAgICAgLT4gICctNTAnDQotZm1heDMxMzEgZm1hICAxICAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcNCi1mbWF4MzEzMiBmbWEgIDEgICAwICAnLTVFOCcgICAgICAgLT4gICctNTAwMDAwMDAwJw0KLWZtYXgzMTMzIGZtYSAgMSAgIDAgICctNUU5JyAgICAgICAtPiAgJy01LjAwMDAwMDAwRSs5JyAgICBSb3VuZGVkDQotZm1heDMxMzQgZm1hICAxICAgMCAgJy01RTEwJyAgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzEwJyAgIFJvdW5kZWQNCi1mbWF4MzEzNSBmbWEgIDEgICAwICAnLTVFMTEnICAgICAgLT4gICctNS4wMDAwMDAwMEUrMTEnICAgUm91bmRlZA0KLWZtYXgzMTM2IGZtYSAgMSAgIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwRSsxMDAnICBSb3VuZGVkDQotDQotLS0gcmVsYXRlZA0KLWZtYXgzMTM3IGZtYSAgMSAgICAxICAnMEUtMTInICAgICAgLT4gICcxLjAwMDAwMDAwJyAgUm91bmRlZA0KLWZtYXgzMTM4IGZtYSAgMSAgIC0xICAnMEUtMTInICAgICAgLT4gICctMS4wMDAwMDAwMCcgUm91bmRlZA0KLWZtYXgzMTM5IGZtYSAgMSAgICcwRS0xMicgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwJyAgUm91bmRlZA0KLWZtYXgzMTQwIGZtYSAgMSAgICcwRS0xMicgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMCcgUm91bmRlZA0KLWZtYXgzMTQxIGZtYSAgMSAgIDFFKzQgICAgMC4wMDAwICAgLT4gICcxMDAwMC4wMDAwJw0KLWZtYXgzMTQyIGZtYSAgMSAgIDFFKzQgICAgMC4wMDAwMCAgLT4gICcxMDAwMC4wMDAwJyAgUm91bmRlZA0KLWZtYXgzMTQzIGZtYSAgMSAgIDAuMDAwICAgMUUrNSAgICAgLT4gICcxMDAwMDAuMDAwJw0KLWZtYXgzMTQ0IGZtYSAgMSAgIDAuMDAwMCAgMUUrNSAgICAgLT4gICcxMDAwMDAuMDAwJyAgUm91bmRlZA0KLQ0KLS0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdDQotZm1heDMxNDYgZm1hICAxICAgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJw0KLWZtYXgzMTQ3IGZtYSAgMSAgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnDQotZm1heDMxNDggZm1hICAxICAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcNCi1mbWF4MzE0OSBmbWEgIDEgICAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnDQotZm1heDMxNTAgZm1hICAxICAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcNCi1mbWF4MzE1MSBmbWEgIDEgICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJw0KLWZtYXgzMTUyIGZtYSAgMSAgICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycNCi1mbWF4MzE1MyBmbWEgIDEgICAnMy4nICAgICcuMycgICAgLT4gICczLjMnDQotZm1heDMxNTQgZm1hICAxICAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJw0KLWZtYXgzMTU1IGZtYSAgMSAgICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnDQotZm1heDMxNTYgZm1hICAxICAgJzMnICAgICAnMycgICAgIC0+ICAnNicNCi1mbWF4MzE1NyBmbWEgIDEgICAnMycgICAgICcrMycgICAgLT4gICc2Jw0KLWZtYXgzMTU4IGZtYSAgMSAgICczJyAgICAgJy0zJyAgICAtPiAgJzAnDQotZm1heDMxNTkgZm1hICAxICAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJw0KLWZtYXgzMTYwIGZtYSAgMSAgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnDQotDQotLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4NCi1wcmVjaXNpb246IDE1DQotZm1heDMxNjEgZm1hICAxICAgJzFFKzEyJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTknDQotZm1heDMxNjIgZm1hICAxICAgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJw0KLWZtYXgzMTYzIGZtYSAgMSAgICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScNCi1mbWF4MzE2NCBmbWEgIDEgICAnLTEnICAgICcxRSsxMicgLT4gJzk5OTk5OTk5OTk5OScNCi1mbWF4MzE2NSBmbWEgIDEgICAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknDQotZm1heDMxNjYgZm1hICAxICAgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJw0KLWZtYXgzMTY3IGZtYSAgMSAgICcxLjExJyAgJzdFKzEyJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCi1mbWF4MzE2OCBmbWEgIDEgICAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknDQotDQotLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1ICAgICAgMTIzNDU2Nzg5MDEyMzQ1ICAgICAgMSAyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTcwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTcxIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTcyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTczIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTc0IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTc1IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTc2IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTc3IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1mbWF4MzE3OCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OScNCi1mbWF4MzE3OSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OCcNCi1mbWF4MzE4MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NycNCi1mbWF4MzE4MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5NicNCi1mbWF4MzE4MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NScNCi1mbWF4MzE4MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NCcNCi0NCi0tLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzDQotcHJlY2lzaW9uOiA5DQotcm91bmRpbmc6IGhhbGZfdXANCi1mbWF4MzIwMCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknDQotZm1heDMyMDEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIwMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjAzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMDQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIwNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjA2IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMDcgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIwOCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjA5IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMTAgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIxMSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjEyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMTMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIxNCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjE1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMTYgZm1hICAxICAgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2NzkwJw0KLWZtYXgzMjE3IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMTggZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIxOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1mbWF4MzIyMCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknDQotZm1heDMyMjEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIyMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjIzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMjQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIyNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjI2IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMjcgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIyOCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjI5IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMzAgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIzMSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjMyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMzMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIzNCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjM1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMzYgZm1hICAxICAgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2NzkwJw0KLWZtYXgzMjM3IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMzggZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIzOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZm1heDMyNDAgZm1hICAxICAgJzEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI0MSBmbWEgIDEgICAnMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjQyIGZtYSAgMSAgICcxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1mbWF4MzI1MCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknDQotZm1heDMyNTEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI1MiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjUzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNTQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI1NSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjU2IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNTcgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI1OCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjU5IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNjAgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI2MSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjYyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNjMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI2NCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjY1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNjYgZm1hICAxICAgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2NzkwJw0KLWZtYXgzMjY3IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNjggZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI2OSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGlucHV0IHByZXBhcmF0aW9uIHRlc3RzIChvcGVyYW5kcyBzaG91bGQgbm90IGJlIHJvdW5kZWQpDQotcHJlY2lzaW9uOiAzDQotcm91bmRpbmc6IGhhbGZfdXANCi0NCi1mbWF4MzI3MCBmbWEgIDEgICAnMTIzNDU2Nzg5MDAwMDAnICA5OTk5OTk5OTk5OTk5IC0+ICAnMi4yM0UrMTMnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjcxIGZtYSAgMSAgICAnOTk5OTk5OTk5OTk5OScgMTIzNDU2Nzg5MDAwMDAgLT4gICcyLjIzRSsxMycgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDMyNzIgZm1hICAxICAgJzEyRSszJyAgJzM0NDQnICAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI3MyBmbWEgIDEgICAnMTJFKzMnICAnMzQ0NicgICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjc0IGZtYSAgMSAgICcxMkUrMycgICczNDQ5LjknIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNzUgZm1hICAxICAgJzEyRSszJyAgJzM0NTAuMCcgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI3NiBmbWEgIDEgICAnMTJFKzMnICAnMzQ1MC4xJyAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjc3IGZtYSAgMSAgICcxMkUrMycgICczNDU0JyAgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNzggZm1hICAxICAgJzEyRSszJyAgJzM0NTYnICAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzI4MSBmbWEgIDEgICAnMzQ0NCcgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjgyIGZtYSAgMSAgICczNDQ2JyAgICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyODMgZm1hICAxICAgJzM0NDkuOScgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI4NCBmbWEgIDEgICAnMzQ1MC4wJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjg1IGZtYSAgMSAgICczNDUwLjEnICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyODYgZm1hICAxICAgJzM0NTQnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI4NyBmbWEgIDEgICAnMzQ1NicgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2Rvd24NCi1mbWF4MzI5MSBmbWEgIDEgICAnMzQ0NCcgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjkyIGZtYSAgMSAgICczNDQ2JyAgICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyOTMgZm1hICAxICAgJzM0NDkuOScgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI5NCBmbWEgIDEgICAnMzQ1MC4wJyAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjk1IGZtYSAgMSAgICczNDUwLjEnICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyOTYgZm1hICAxICAgJzM0NTQnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI5NyBmbWEgIDEgICAnMzQ1NicgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZm1heDMzMDEgZm1hICAxICAgIC0xICAgMSAgICAgIC0+ICAgMA0KLWZtYXgzMzAyIGZtYSAgMSAgICAgMCAgIDEgICAgICAtPiAgIDENCi1mbWF4MzMwMyBmbWEgIDEgICAgIDEgICAxICAgICAgLT4gICAyDQotZm1heDMzMDQgZm1hICAxICAgIDEyICAgMSAgICAgIC0+ICAxMw0KLWZtYXgzMzA1IGZtYSAgMSAgICA5OCAgIDEgICAgICAtPiAgOTkNCi1mbWF4MzMwNiBmbWEgIDEgICAgOTkgICAxICAgICAgLT4gMTAwDQotZm1heDMzMDcgZm1hICAxICAgMTAwICAgMSAgICAgIC0+IDEwMQ0KLWZtYXgzMzA4IGZtYSAgMSAgIDEwMSAgIDEgICAgICAtPiAxMDINCi1mbWF4MzMwOSBmbWEgIDEgICAgLTEgIC0xICAgICAgLT4gIC0yDQotZm1heDMzMTAgZm1hICAxICAgICAwICAtMSAgICAgIC0+ICAtMQ0KLWZtYXgzMzExIGZtYSAgMSAgICAgMSAgLTEgICAgICAtPiAgIDANCi1mbWF4MzMxMiBmbWEgIDEgICAgMTIgIC0xICAgICAgLT4gIDExDQotZm1heDMzMTMgZm1hICAxICAgIDk4ICAtMSAgICAgIC0+ICA5Nw0KLWZtYXgzMzE0IGZtYSAgMSAgICA5OSAgLTEgICAgICAtPiAgOTgNCi1mbWF4MzMxNSBmbWEgIDEgICAxMDAgIC0xICAgICAgLT4gIDk5DQotZm1heDMzMTYgZm1hICAxICAgMTAxICAtMSAgICAgIC0+IDEwMA0KLQ0KLWZtYXgzMzIxIGZtYSAgMSAgIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwDQotZm1heDMzMjIgZm1hICAxICAgIDAuMDAgIDAuMDEgICAgLT4gIDAuMDENCi1mbWF4MzMyMyBmbWEgIDEgICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMg0KLWZtYXgzMzI0IGZtYSAgMSAgICAwLjEyICAwLjAxICAgIC0+ICAwLjEzDQotZm1heDMzMjUgZm1hICAxICAgIDAuOTggIDAuMDEgICAgLT4gIDAuOTkNCi1mbWF4MzMyNiBmbWEgIDEgICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMA0KLWZtYXgzMzI3IGZtYSAgMSAgICAxLjAwICAwLjAxICAgIC0+ICAxLjAxDQotZm1heDMzMjggZm1hICAxICAgIDEuMDEgIDAuMDEgICAgLT4gIDEuMDINCi1mbWF4MzMyOSBmbWEgIDEgICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMg0KLWZtYXgzMzMwIGZtYSAgMSAgICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxDQotZm1heDMzMzEgZm1hICAxICAgIDAuMDEgLTAuMDEgICAgLT4gIDAuMDANCi1mbWF4MzMzMiBmbWEgIDEgICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQ0KLWZtYXgzMzMzIGZtYSAgMSAgICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3DQotZm1heDMzMzQgZm1hICAxICAgIDAuOTkgLTAuMDEgICAgLT4gIDAuOTgNCi1mbWF4MzMzNSBmbWEgIDEgICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQ0KLWZtYXgzMzM2IGZtYSAgMSAgICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwDQotDQotLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGZtYSAgMSAgaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQNCi1wcmVjaXNpb246IDkNCi1mbWF4MzM0MCBmbWEgIDEgICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwDQotZm1heDMzNDEgZm1hICAxICAgMUUrOCAgICAwICAgIC0+ICAgIDEwMDAwMDAwMA0KLWZtYXgzMzQyIGZtYSAgMSAgIDFFKzkgICAgMCAgICAtPiAgIDEuMDAwMDAwMDBFKzkgICBSb3VuZGVkDQotZm1heDMzNDMgZm1hICAxICAgMUUrMTAgICAwICAgIC0+ICAgMS4wMDAwMDAwMEUrMTAgIFJvdW5kZWQNCi0tLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uDQotZm1heDMzNDQgZm1hICAxICAgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQ0KLWZtYXgzMzQ1IGZtYSAgMSAgIDFFKzggICAgMSAgICAtPiAgICAxMDAwMDAwMDENCi1mbWF4MzM0NiBmbWEgIDEgICAxRSs5ICAgIDEgICAgLT4gICAxLjAwMDAwMDAwRSs5ICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMzNDcgZm1hICAxICAgMUUrMTAgICAxICAgIC0+ICAgMS4wMDAwMDAwMEUrMTAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMzQ4IGZtYSAgMSAgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcNCi1mbWF4MzM0OSBmbWEgIDEgICAxRSs4ICAgIDcgICAgLT4gICAgMTAwMDAwMDA3DQotZm1heDMzNTAgZm1hICAxICAgMUUrOSAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMUUrOSAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMzUxIGZtYSAgMSAgIDFFKzEwICAgNyAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0cnl6ZXJvcyBjYXNlcw0KLXByZWNpc2lvbjogICA3DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogOTINCi1taW5leHBvbmVudDogLTkyDQotZm1heDMzNjEgIGZtYSAgMSAgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUNCi1mbWF4MzM2MiAgZm1hICAxICAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wICBSb3VuZGVkDQotZm1heDMzNjMgIGZtYSAgMSAgIDEwMDAwRSsxIDEwMDAwRS01MCAgLT4gMTAwMDAwLjAgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMzY0ICBmbWEgIDEgICA5Ljk5OTk5OUUrOTIgLTkuOTk5OTk5RSs5MiAtPiAwRSs4Ng0KLQ0KLS0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcNCi1yb3VuZGluZzogICAgaGFsZl9kb3duDQotcHJlY2lzaW9uOiAgIDEwDQotZm1heDMzNzAgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMTAwMDgxNTExDQotcHJlY2lzaW9uOiAgICAgIDYNCi1mbWF4MzM3MSBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotcHJlY2lzaW9uOiAgIDEwDQotZm1heDMzNzIgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMTAwMDgxNTExDQotcHJlY2lzaW9uOiAgICAgIDYNCi1mbWF4MzM3MyBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1wcmVjaXNpb246ICAgMTANCi1mbWF4MzM3NCBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxMDAwODE1MTENCi1wcmVjaXNpb246ICAgICAgNg0KLWZtYXgzMzc1IGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEuMDAwODJFKzggUm91bmRlZCBJbmV4YWN0DQotDQotLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzDQotcHJlY2lzaW9uOiA5DQotbWF4ZXhwb25lbnQ6IDk5OTk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5OTk5DQotZm1heDM0MDAgZm1hICAxICAgICAxICAgNzdlLTcgICAgICAgLT4gIDEuMDAwMDA3Nw0KLWZtYXgzNDAxIGZtYSAgMSAgICAgMSAgIDc3ZS04ICAgICAgIC0+ICAxLjAwMDAwMDc3DQotZm1heDM0MDIgZm1hICAxICAgICAxICAgNzdlLTkgICAgICAgLT4gIDEuMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MDMgZm1hICAxICAgICAxICAgNzdlLTEwICAgICAgLT4gIDEuMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MDQgZm1hICAxICAgICAxICAgNzdlLTExICAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MDUgZm1hICAxICAgICAxICAgNzdlLTEyICAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MDYgZm1hICAxICAgICAxICAgNzdlLTk5OSAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MDcgZm1hICAxICAgICAxICAgNzdlLTk5OTk5OSAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM0MTAgZm1hICAxICAgIDEwICAgNzdlLTcgICAgICAgLT4gIDEwLjAwMDAwNzcNCi1mbWF4MzQxMSBmbWEgIDEgICAgMTAgICA3N2UtOCAgICAgICAtPiAgMTAuMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQxMiBmbWEgIDEgICAgMTAgICA3N2UtOSAgICAgICAtPiAgMTAuMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQxMyBmbWEgIDEgICAgMTAgICA3N2UtMTAgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQxNCBmbWEgIDEgICAgMTAgICA3N2UtMTEgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQxNSBmbWEgIDEgICAgMTAgICA3N2UtMTIgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQxNiBmbWEgIDEgICAgMTAgICA3N2UtOTk5ICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQxNyBmbWEgIDEgICAgMTAgICA3N2UtOTk5OTk5ICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzQyMCBmbWEgIDEgICAgNzdlLTcgICAgICAgIDEgICAtPiAgMS4wMDAwMDc3DQotZm1heDM0MjEgZm1hICAxICAgIDc3ZS04ICAgICAgICAxICAgLT4gIDEuMDAwMDAwNzcNCi1mbWF4MzQyMiBmbWEgIDEgICAgNzdlLTkgICAgICAgIDEgICAtPiAgMS4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQyMyBmbWEgIDEgICAgNzdlLTEwICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQyNCBmbWEgIDEgICAgNzdlLTExICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQyNSBmbWEgIDEgICAgNzdlLTEyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQyNiBmbWEgIDEgICAgNzdlLTk5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQyNyBmbWEgIDEgICAgNzdlLTk5OTk5OSAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzQzMCBmbWEgIDEgICAgNzdlLTcgICAgICAgMTAgICAtPiAgMTAuMDAwMDA3Nw0KLWZtYXgzNDMxIGZtYSAgMSAgICA3N2UtOCAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDMyIGZtYSAgMSAgICA3N2UtOSAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDMzIGZtYSAgMSAgICA3N2UtMTAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDM0IGZtYSAgMSAgICA3N2UtMTEgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDM1IGZtYSAgMSAgICA3N2UtMTIgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDM2IGZtYSAgMSAgICA3N2UtOTk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDM3IGZtYSAgMSAgICA3N2UtOTk5OTk5ICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG5lZ2F0aXZlIHVscHMNCi1mbWF4MzQ0MCBmbWEgIDEgICAgIDEgICAtNzdlLTcgICAgICAgLT4gIDAuOTk5OTkyMw0KLWZtYXgzNDQxIGZtYSAgMSAgICAgMSAgIC03N2UtOCAgICAgICAtPiAgMC45OTk5OTkyMw0KLWZtYXgzNDQyIGZtYSAgMSAgICAgMSAgIC03N2UtOSAgICAgICAtPiAgMC45OTk5OTk5MjMNCi1mbWF4MzQ0MyBmbWEgIDEgICAgIDEgICAtNzdlLTEwICAgICAgLT4gIDAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDQ0IGZtYSAgMSAgICAgMSAgIC03N2UtMTEgICAgICAtPiAgMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NDUgZm1hICAxICAgICAxICAgLTc3ZS0xMiAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDQ2IGZtYSAgMSAgICAgMSAgIC03N2UtOTk5ICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ0NyBmbWEgIDEgICAgIDEgICAtNzdlLTk5OTk5OSAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM0NTAgZm1hICAxICAgIDEwICAgLTc3ZS03ICAgICAgIC0+ICAgOS45OTk5OTIzDQotZm1heDM0NTEgZm1hICAxICAgIDEwICAgLTc3ZS04ICAgICAgIC0+ICAgOS45OTk5OTkyMw0KLWZtYXgzNDUyIGZtYSAgMSAgICAxMCAgIC03N2UtOSAgICAgICAtPiAgIDkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NTMgZm1hICAxICAgIDEwICAgLTc3ZS0xMCAgICAgIC0+ICAgOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ1NCBmbWEgIDEgICAgMTAgICAtNzdlLTExICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NTUgZm1hICAxICAgIDEwICAgLTc3ZS0xMiAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDU2IGZtYSAgMSAgICAxMCAgIC03N2UtOTk5ICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ1NyBmbWEgIDEgICAgMTAgICAtNzdlLTk5OTk5OSAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM0NjAgZm1hICAxICAgIC03N2UtNyAgICAgICAgMSAgIC0+ICAwLjk5OTk5MjMNCi1mbWF4MzQ2MSBmbWEgIDEgICAgLTc3ZS04ICAgICAgICAxICAgLT4gIDAuOTk5OTk5MjMNCi1mbWF4MzQ2MiBmbWEgIDEgICAgLTc3ZS05ICAgICAgICAxICAgLT4gIDAuOTk5OTk5OTIzDQotZm1heDM0NjMgZm1hICAxICAgIC03N2UtMTAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ2NCBmbWEgIDEgICAgLTc3ZS0xMSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDY1IGZtYSAgMSAgICAtNzdlLTEyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ2NiBmbWEgIDEgICAgLTc3ZS05OTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NjcgZm1hICAxICAgIC03N2UtOTk5OTk5ICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNDcwIGZtYSAgMSAgICAtNzdlLTcgICAgICAgMTAgICAtPiAgIDkuOTk5OTkyMw0KLWZtYXgzNDcxIGZtYSAgMSAgICAtNzdlLTggICAgICAgMTAgICAtPiAgIDkuOTk5OTk5MjMNCi1mbWF4MzQ3MiBmbWEgIDEgICAgLTc3ZS05ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDczIGZtYSAgMSAgICAtNzdlLTEwICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NzQgZm1hICAxICAgIC03N2UtMTEgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDc1IGZtYSAgMSAgICAtNzdlLTEyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ3NiBmbWEgIDEgICAgLTc3ZS05OTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NzcgZm1hICAxICAgIC03N2UtOTk5OTk5ICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG5lZ2F0aXZlIHVscHMNCi1mbWF4MzQ4MCBmbWEgIDEgICAgLTEgICAgNzdlLTcgICAgICAgLT4gIC0wLjk5OTk5MjMNCi1mbWF4MzQ4MSBmbWEgIDEgICAgLTEgICAgNzdlLTggICAgICAgLT4gIC0wLjk5OTk5OTIzDQotZm1heDM0ODIgZm1hICAxICAgIC0xICAgIDc3ZS05ICAgICAgIC0+ICAtMC45OTk5OTk5MjMNCi1mbWF4MzQ4MyBmbWEgIDEgICAgLTEgICAgNzdlLTEwICAgICAgLT4gIC0wLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ4NCBmbWEgIDEgICAgLTEgICAgNzdlLTExICAgICAgLT4gIC0wLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ4NSBmbWEgIDEgICAgLTEgICAgNzdlLTEyICAgICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDg2IGZtYSAgMSAgICAtMSAgICA3N2UtOTk5ICAgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0ODcgZm1hICAxICAgIC0xICAgIDc3ZS05OTk5OTkgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzQ5MCBmbWEgIDEgICAtMTAgICAgNzdlLTcgICAgICAgLT4gICAtOS45OTk5OTIzDQotZm1heDM0OTEgZm1hICAxICAgLTEwICAgIDc3ZS04ICAgICAgIC0+ICAgLTkuOTk5OTk5MjMNCi1mbWF4MzQ5MiBmbWEgIDEgICAtMTAgICAgNzdlLTkgICAgICAgLT4gICAtOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ5MyBmbWEgIDEgICAtMTAgICAgNzdlLTEwICAgICAgLT4gICAtOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ5NCBmbWEgIDEgICAtMTAgICAgNzdlLTExICAgICAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDk1IGZtYSAgMSAgIC0xMCAgICA3N2UtMTIgICAgICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0OTYgZm1hICAxICAgLTEwICAgIDc3ZS05OTkgICAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ5NyBmbWEgIDEgICAtMTAgICAgNzdlLTk5OTk5OSAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNTAwIGZtYSAgMSAgICAgNzdlLTcgICAgICAgLTEgICAtPiAgLTAuOTk5OTkyMw0KLWZtYXgzNTAxIGZtYSAgMSAgICAgNzdlLTggICAgICAgLTEgICAtPiAgLTAuOTk5OTk5MjMNCi1mbWF4MzUwMiBmbWEgIDEgICAgIDc3ZS05ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTkyMw0KLWZtYXgzNTAzIGZtYSAgMSAgICAgNzdlLTEwICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTA0IGZtYSAgMSAgICAgNzdlLTExICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTA1IGZtYSAgMSAgICAgNzdlLTEyICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM1MDYgZm1hICAxICAgICA3N2UtOTk5ICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUwNyBmbWEgIDEgICAgIDc3ZS05OTk5OTkgIC0xICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNTEwIGZtYSAgMSAgICAgNzdlLTcgICAgICAgLTEwICAtPiAgIC05Ljk5OTk5MjMNCi1mbWF4MzUxMSBmbWEgIDEgICAgIDc3ZS04ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTkyMw0KLWZtYXgzNTEyIGZtYSAgMSAgICAgNzdlLTkgICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTEzIGZtYSAgMSAgICAgNzdlLTEwICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTE0IGZtYSAgMSAgICAgNzdlLTExICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM1MTUgZm1hICAxICAgICA3N2UtMTIgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUxNiBmbWEgIDEgICAgIDc3ZS05OTkgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTE3IGZtYSAgMSAgICAgNzdlLTk5OTk5OSAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gbG9uZyBvcGVyYW5kcw0KLW1heGV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLXByZWNpc2lvbjogOQ0KLWZtYXgzNTIxIGZtYSAgMSAgIDEyMzQ1Njc4MDAwIDAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZA0KLWZtYXgzNTIyIGZtYSAgMSAgIDAgMTIzNDU2NzgwMDAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZA0KLWZtYXgzNTIzIGZtYSAgMSAgIDEyMzQ1Njc4MDAgIDAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQotZm1heDM1MjQgZm1hICAxICAgMCAxMjM0NTY3ODAwICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQNCi1mbWF4MzUyNSBmbWEgIDEgICAxMjM0NTY3ODkwICAwIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZA0KLWZtYXgzNTI2IGZtYSAgMSAgIDAgMTIzNDU2Nzg5MCAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkDQotZm1heDM1MjcgZm1hICAxICAgMTIzNDU2Nzg5MSAgMCAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTI4IGZtYSAgMSAgIDAgMTIzNDU2Nzg5MSAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUyOSBmbWEgIDEgICAxMjM0NTY3ODkwMSAwIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTMwIGZtYSAgMSAgIDAgMTIzNDU2Nzg5MDEgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM1MzEgZm1hICAxICAgMTIzNDU2Nzg5NiAgMCAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTMyIGZtYSAgMSAgIDAgMTIzNDU2Nzg5NiAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQNCi0NCi1wcmVjaXNpb246IDE1DQotLS0gc3RpbGwgY2hlY2tpbmcNCi1mbWF4MzU0MSBmbWEgIDEgICAxMjM0NTY3ODAwMCAwIC0+IDEyMzQ1Njc4MDAwDQotZm1heDM1NDIgZm1hICAxICAgMCAxMjM0NTY3ODAwMCAtPiAxMjM0NTY3ODAwMA0KLWZtYXgzNTQzIGZtYSAgMSAgIDEyMzQ1Njc4MDAgIDAgLT4gMTIzNDU2NzgwMA0KLWZtYXgzNTQ0IGZtYSAgMSAgIDAgMTIzNDU2NzgwMCAgLT4gMTIzNDU2NzgwMA0KLWZtYXgzNTQ1IGZtYSAgMSAgIDEyMzQ1Njc4OTAgIDAgLT4gMTIzNDU2Nzg5MA0KLWZtYXgzNTQ2IGZtYSAgMSAgIDAgMTIzNDU2Nzg5MCAgLT4gMTIzNDU2Nzg5MA0KLWZtYXgzNTQ3IGZtYSAgMSAgIDEyMzQ1Njc4OTEgIDAgLT4gMTIzNDU2Nzg5MQ0KLWZtYXgzNTQ4IGZtYSAgMSAgIDAgMTIzNDU2Nzg5MSAgLT4gMTIzNDU2Nzg5MQ0KLWZtYXgzNTQ5IGZtYSAgMSAgIDEyMzQ1Njc4OTAxIDAgLT4gMTIzNDU2Nzg5MDENCi1mbWF4MzU1MCBmbWEgIDEgICAwIDEyMzQ1Njc4OTAxIC0+IDEyMzQ1Njc4OTAxDQotZm1heDM1NTEgZm1hICAxICAgMTIzNDU2Nzg5NiAgMCAtPiAxMjM0NTY3ODk2DQotZm1heDM1NTIgZm1hICAxICAgMCAxMjM0NTY3ODk2ICAtPiAxMjM0NTY3ODk2DQotDQotLS0gdmVyaWZ5IGEgcXVlcnkNCi1wcmVjaXNpb246ICAgIDE2DQotbWF4RXhwb25lbnQ6ICszOTQNCi1taW5FeHBvbmVudDogLTM5Mw0KLXJvdW5kaW5nOiAgICAgZG93bg0KLWZtYXgzNTYxIGZtYSAgMSAgIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM1NjIgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkDQotLS0gYW5kIHVzaW5nIGRlY2ltYWw2NCBib3VuZHMuLi4NCi1wcmVjaXNpb246ICAgIDE2DQotbWF4RXhwb25lbnQ6ICszODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLXJvdW5kaW5nOiAgICAgZG93bg0KLWZtYXgzNTYzIGZtYSAgMSAgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM1NjQgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkDQotDQotDQotLS0gc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyB3aXRoIGV4dHJlbWUgcm91bmRpbmcNCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZm1heDM2MDEgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWZtYXgzNjAyIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBoYWxmX2Rvd24NCi1mbWF4MzYwMyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogZmxvb3INCi1mbWF4MzYwNCBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogY2VpbGluZw0KLWZtYXgzNjA1IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiB1cA0KLWZtYXgzNjA2IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBkb3duDQotZm1heDM2MDcgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfdXANCi1mbWF4MzYxMSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZm1heDM2MTIgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGhhbGZfZG93bg0KLWZtYXgzNjEzIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBmbG9vcg0KLWZtYXgzNjE0IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBjZWlsaW5nDQotZm1heDM2MTUgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IHVwDQotZm1heDM2MTYgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGRvd24NCi1mbWF4MzYxNyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl91cA0KLWZtYXgzNjIxIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1mbWF4MzYyMiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogaGFsZl9kb3duDQotZm1heDM2MjMgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGZsb29yDQotZm1heDM2MjQgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGNlaWxpbmcNCi1mbWF4MzYyNSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogdXANCi1mbWF4MzYyNiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogZG93bg0KLWZtYXgzNjI3IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZm1heDM2MzEgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWZtYXgzNjMyIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBoYWxmX2Rvd24NCi1mbWF4MzYzMyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogZmxvb3INCi1mbWF4MzYzNCBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogY2VpbGluZw0KLWZtYXgzNjM1IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiB1cA0KLWZtYXgzNjM2IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBkb3duDQotZm1heDM2MzcgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfdXANCi1mbWF4MzY0MSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZm1heDM2NDIgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGhhbGZfZG93bg0KLWZtYXgzNjQzIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBmbG9vcg0KLWZtYXgzNjQ0IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBjZWlsaW5nDQotZm1heDM2NDUgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IHVwDQotZm1heDM2NDYgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGRvd24NCi1mbWF4MzY0NyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl91cA0KLWZtYXgzNjUxIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1mbWF4MzY1MiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogaGFsZl9kb3duDQotZm1heDM2NTMgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGZsb29yDQotZm1heDM2NTQgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGNlaWxpbmcNCi1mbWF4MzY1NSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogdXANCi1mbWF4MzY1NiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogZG93bg0KLWZtYXgzNjU3IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGxvbmcgb3BlcmFuZCB0cmlhbmdsZQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotcHJlY2lzaW9uOiAgMzcNCi1mbWF4MzY2MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1MzgNCi1wcmVjaXNpb246ICAzNg0KLWZtYXgzNjYxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNDU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAzNQ0KLWZtYXgzNjYyIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNDUgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAzNA0KLWZtYXgzNjYzIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNSAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAzMw0KLWZtYXgzNjY0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAzMg0KLWZtYXgzNjY1IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDggICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAzMQ0KLWZtYXgzNjY2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAzMA0KLWZtYXgzNjY3IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyOQ0KLWZtYXgzNjY4IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzEgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyOA0KLWZtYXgzNjY5IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNyAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyNw0KLWZtYXgzNjcwIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjM0ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyNg0KLWZtYXgzNjcxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyNQ0KLWZtYXgzNjcyIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyNA0KLWZtYXgzNjczIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyMw0KLWZtYXgzNjc0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyMg0KLWZtYXgzNjc1IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzOSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyMQ0KLWZtYXgzNjc2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzY0ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyMA0KLWZtYXgzNjc3IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAxOQ0KLWZtYXgzNjc4IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyNCAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAxOA0KLWZtYXgzNjc5IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAxNw0KLWZtYXgzNjgwIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAxNg0KLWZtYXgzNjgxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMSAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAxNQ0KLWZtYXgzNjgyIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAxNA0KLWZtYXgzNjgzIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAxMw0KLWZtYXgzNjg0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MiAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAxMg0KLWZtYXgzNjg1IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAxMQ0KLWZtYXgzNjg2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2NiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAxMA0KLWZtYXgzNjg3IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExNzQxN0UrMTAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgOQ0KLWZtYXgzNjg4IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExNzQyRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgOA0KLWZtYXgzNjg5IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExNzRFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgNw0KLWZtYXgzNjkwIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExN0UrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICA2DQotZm1heDM2OTEgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTJFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgNQ0KLWZtYXgzNjkyIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzFFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgNA0KLWZtYXgzNjkzIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0N0UrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAzDQotZm1heDM2OTQgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODVFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMg0KLWZtYXgzNjk1IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5LjhFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMQ0KLWZtYXgzNjk2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiAxRSsxMSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbW9yZSB6ZXJvcywgZXRjLg0KLXJvdW5kaW5nOiBoYWxmX3VwDQotcHJlY2lzaW9uOiAgIDkNCi0NCi1mbWF4MzcwMSBmbWEgIDEgICA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMA0KLWZtYXgzNzAyIGZtYSAgMSAgIDAwLjAwIDAuMDAwICAtPiAwLjAwMA0KLWZtYXgzNzAzIGZtYSAgMSAgIDAwLjAwIDBFLTMgICAtPiAwLjAwMA0KLWZtYXgzNzA0IGZtYSAgMSAgIDBFLTMgIDAwLjAwICAtPiAwLjAwMA0KLQ0KLWZtYXgzNzEwIGZtYSAgMSAgIDBFKzMgIDAwLjAwICAtPiAwLjAwDQotZm1heDM3MTEgZm1hICAxICAgMEUrMyAgMDAuMCAgIC0+IDAuMA0KLWZtYXgzNzEyIGZtYSAgMSAgIDBFKzMgIDAwLiAgICAtPiAwDQotZm1heDM3MTMgZm1hICAxICAgMEUrMyAgMDAuRSsxIC0+IDBFKzENCi1mbWF4MzcxNCBmbWEgIDEgICAwRSszICAwMC5FKzIgLT4gMEUrMg0KLWZtYXgzNzE1IGZtYSAgMSAgIDBFKzMgIDAwLkUrMyAtPiAwRSszDQotZm1heDM3MTYgZm1hICAxICAgMEUrMyAgMDAuRSs0IC0+IDBFKzMNCi1mbWF4MzcxNyBmbWEgIDEgICAwRSszICAwMC5FKzUgLT4gMEUrMw0KLWZtYXgzNzE4IGZtYSAgMSAgIDBFKzMgIC0wMC4wICAgLT4gMC4wDQotZm1heDM3MTkgZm1hICAxICAgMEUrMyAgLTAwLiAgICAtPiAwDQotZm1heDM3MzEgZm1hICAxICAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxDQotDQotZm1heDM3MjAgZm1hICAxICAgMDAuMDAgIDBFKzMgIC0+IDAuMDANCi1mbWF4MzcyMSBmbWEgIDEgICAwMC4wICAgMEUrMyAgLT4gMC4wDQotZm1heDM3MjIgZm1hICAxICAgMDAuICAgIDBFKzMgIC0+IDANCi1mbWF4MzcyMyBmbWEgIDEgICAwMC5FKzEgMEUrMyAgLT4gMEUrMQ0KLWZtYXgzNzI0IGZtYSAgMSAgIDAwLkUrMiAwRSszICAtPiAwRSsyDQotZm1heDM3MjUgZm1hICAxICAgMDAuRSszIDBFKzMgIC0+IDBFKzMNCi1mbWF4MzcyNiBmbWEgIDEgICAwMC5FKzQgMEUrMyAgLT4gMEUrMw0KLWZtYXgzNzI3IGZtYSAgMSAgIDAwLkUrNSAwRSszICAtPiAwRSszDQotZm1heDM3MjggZm1hICAxICAgLTAwLjAwIDBFKzMgIC0+IDAuMDANCi1mbWF4MzcyOSBmbWEgIDEgICAtMDAuMCAgMEUrMyAgLT4gMC4wDQotZm1heDM3MzAgZm1hICAxICAgLTAwLiAgIDBFKzMgIC0+IDANCi0NCi1mbWF4MzczMiBmbWEgIDEgICAgMCAgICAgMCAgICAgLT4gIDANCi1mbWF4MzczMyBmbWEgIDEgICAgMCAgICAtMCAgICAgLT4gIDANCi1mbWF4MzczNCBmbWEgIDEgICAtMCAgICAgMCAgICAgLT4gIDANCi1mbWF4MzczNSBmbWEgIDEgICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQ0KLQ0KLWZtYXgzNzM2IGZtYSAgMSAgICAxICAgIC0xICAgICAtPiAgMA0KLWZtYXgzNzM3IGZtYSAgMSAgIC0xICAgIC0xICAgICAtPiAtMg0KLWZtYXgzNzM4IGZtYSAgMSAgICAxICAgICAxICAgICAtPiAgMg0KLWZtYXgzNzM5IGZtYSAgMSAgIC0xICAgICAxICAgICAtPiAgMA0KLQ0KLWZtYXgzNzQxIGZtYSAgMSAgICAwICAgIC0xICAgICAtPiAtMQ0KLWZtYXgzNzQyIGZtYSAgMSAgIC0wICAgIC0xICAgICAtPiAtMQ0KLWZtYXgzNzQzIGZtYSAgMSAgICAwICAgICAxICAgICAtPiAgMQ0KLWZtYXgzNzQ0IGZtYSAgMSAgIC0wICAgICAxICAgICAtPiAgMQ0KLWZtYXgzNzQ1IGZtYSAgMSAgIC0xICAgICAwICAgICAtPiAtMQ0KLWZtYXgzNzQ2IGZtYSAgMSAgIC0xICAgIC0wICAgICAtPiAtMQ0KLWZtYXgzNzQ3IGZtYSAgMSAgICAxICAgICAwICAgICAtPiAgMQ0KLWZtYXgzNzQ4IGZtYSAgMSAgICAxICAgIC0wICAgICAtPiAgMQ0KLQ0KLWZtYXgzNzUxIGZtYSAgMSAgICAwLjAgIC0xICAgICAtPiAtMS4wDQotZm1heDM3NTIgZm1hICAxICAgLTAuMCAgLTEgICAgIC0+IC0xLjANCi1mbWF4Mzc1MyBmbWEgIDEgICAgMC4wICAgMSAgICAgLT4gIDEuMA0KLWZtYXgzNzU0IGZtYSAgMSAgIC0wLjAgICAxICAgICAtPiAgMS4wDQotZm1heDM3NTUgZm1hICAxICAgLTEuMCAgIDAgICAgIC0+IC0xLjANCi1mbWF4Mzc1NiBmbWEgIDEgICAtMS4wICAtMCAgICAgLT4gLTEuMA0KLWZtYXgzNzU3IGZtYSAgMSAgICAxLjAgICAwICAgICAtPiAgMS4wDQotZm1heDM3NTggZm1hICAxICAgIDEuMCAgLTAgICAgIC0+ICAxLjANCi0NCi1mbWF4Mzc2MSBmbWEgIDEgICAgMCAgICAtMS4wICAgLT4gLTEuMA0KLWZtYXgzNzYyIGZtYSAgMSAgIC0wICAgIC0xLjAgICAtPiAtMS4wDQotZm1heDM3NjMgZm1hICAxICAgIDAgICAgIDEuMCAgIC0+ICAxLjANCi1mbWF4Mzc2NCBmbWEgIDEgICAtMCAgICAgMS4wICAgLT4gIDEuMA0KLWZtYXgzNzY1IGZtYSAgMSAgIC0xICAgICAwLjAgICAtPiAtMS4wDQotZm1heDM3NjYgZm1hICAxICAgLTEgICAgLTAuMCAgIC0+IC0xLjANCi1mbWF4Mzc2NyBmbWEgIDEgICAgMSAgICAgMC4wICAgLT4gIDEuMA0KLWZtYXgzNzY4IGZtYSAgMSAgICAxICAgIC0wLjAgICAtPiAgMS4wDQotDQotZm1heDM3NzEgZm1hICAxICAgIDAuMCAgLTEuMCAgIC0+IC0xLjANCi1mbWF4Mzc3MiBmbWEgIDEgICAtMC4wICAtMS4wICAgLT4gLTEuMA0KLWZtYXgzNzczIGZtYSAgMSAgICAwLjAgICAxLjAgICAtPiAgMS4wDQotZm1heDM3NzQgZm1hICAxICAgLTAuMCAgIDEuMCAgIC0+ICAxLjANCi1mbWF4Mzc3NSBmbWEgIDEgICAtMS4wICAgMC4wICAgLT4gLTEuMA0KLWZtYXgzNzc2IGZtYSAgMSAgIC0xLjAgIC0wLjAgICAtPiAtMS4wDQotZm1heDM3NzcgZm1hICAxICAgIDEuMCAgIDAuMCAgIC0+ICAxLjANCi1mbWF4Mzc3OCBmbWEgIDEgICAgMS4wICAtMC4wICAgLT4gIDEuMA0KLQ0KLS0tIFNwZWNpYWxzDQotZm1heDM3ODAgZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNzgxIGZtYSAgMSAgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1mbWF4Mzc4MiBmbWEgIDEgICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZm1heDM3ODMgZm1hICAxICAgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNzg0IGZtYSAgMSAgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1mbWF4Mzc4NSBmbWEgIDEgICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZm1heDM3ODYgZm1hICAxICAgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNzg3IGZtYSAgMSAgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4Mzc4OCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZm1heDM3ODkgZm1hICAxICAgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNzkwIGZtYSAgMSAgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4Mzc5MSBmbWEgIDEgICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZm1heDM3OTIgZm1hICAxICAgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNzkzIGZtYSAgMSAgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4Mzc5NCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1mbWF4MzgwMCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzgwMSBmbWEgIDEgICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZm1heDM4MDIgZm1hICAxICAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzODAzIGZtYSAgMSAgICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCi1mbWF4MzgwNCBmbWEgIDEgICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZm1heDM4MDUgZm1hICAxICAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzODA2IGZtYSAgMSAgICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1mbWF4MzgwNyBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZm1heDM4MDggZm1hICAxICAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzODA5IGZtYSAgMSAgIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzODEwIGZtYSAgMSAgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1mbWF4MzgxMSBmbWEgIDEgICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZm1heDM4MTIgZm1hICAxICAgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzODEzIGZtYSAgMSAgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1mbWF4MzgxNCBmbWEgIDEgICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZm1heDM4MTUgZm1hICAxICAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWZtYXgzODIxIGZtYSAgMSAgICBOYU4gLUluZiAgICAtPiAgTmFODQotZm1heDM4MjIgZm1hICAxICAgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1mbWF4MzgyMyBmbWEgIDEgICAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWZtYXgzODI0IGZtYSAgMSAgICBOYU4gLTAgICAgICAtPiAgTmFODQotZm1heDM4MjUgZm1hICAxICAgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1mbWF4MzgyNiBmbWEgIDEgICAgTmFOICAxICAgICAgLT4gIE5hTg0KLWZtYXgzODI3IGZtYSAgMSAgICBOYU4gIDEwMDAgICAtPiAgTmFODQotZm1heDM4MjggZm1hICAxICAgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1mbWF4MzgyOSBmbWEgIDEgICAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWZtYXgzODMwIGZtYSAgMSAgIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZm1heDM4MzEgZm1hICAxICAgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzgzMiBmbWEgIDEgICAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWZtYXgzODMzIGZtYSAgMSAgIC0wICAgIE5hTiAgICAtPiAgTmFODQotZm1heDM4MzQgZm1hICAxICAgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzgzNSBmbWEgIDEgICAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWZtYXgzODM2IGZtYSAgMSAgICAxMDAwIE5hTiAgICAtPiAgTmFODQotZm1heDM4MzcgZm1hICAxICAgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1mbWF4Mzg0MSBmbWEgIDEgICAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg0MiBmbWEgIDEgICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg0MyBmbWEgIDEgICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg0NCBmbWEgIDEgICAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg0NSBmbWEgIDEgICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg0NiBmbWEgIDEgICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg0NyBmbWEgIDEgICAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg0OCBmbWEgIDEgICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg0OSBmbWEgIDEgICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg1MCBmbWEgIDEgICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg1MSBmbWEgIDEgICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg1MiBmbWEgIDEgICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg1MyBmbWEgIDEgICAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg1NCBmbWEgIDEgICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg1NSBmbWEgIDEgICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg1NiBmbWEgIDEgICAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg1NyBmbWEgIDEgICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg1OCBmbWEgIDEgICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg1OSBmbWEgIDEgICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZm1heDM4NjEgZm1hICAxICAgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZm1heDM4NjIgZm1hICAxICAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotZm1heDM4NjMgZm1hICAxICAgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQotZm1heDM4NjQgZm1hICAxICAgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZm1heDM4NjUgZm1hICAxICAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotZm1heDM4NjYgZm1hICAxICAgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQotZm1heDM4NjcgZm1hICAxICAgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZm1heDM4NjggZm1hICAxICAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotZm1heDM4NjkgZm1hICAxICAgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KLWZtYXgzODcxIGZtYSAgMSAgICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NzIgZm1hICAxICAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg3MyBmbWEgIDEgICAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzODc0IGZtYSAgMSAgICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NzUgZm1hICAxICAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg3NiBmbWEgIDEgICAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzODc3IGZtYSAgMSAgIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NzggZm1hICAxICAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg3OSBmbWEgIDEgICAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzODgwIGZtYSAgMSAgICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4ODEgZm1hICAxICAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg4MiBmbWEgIDEgICAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQotZm1heDM4ODMgZm1hICAxICAgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg4NCBmbWEgIDEgICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotZm1heDM4ODUgZm1hICAxICAgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvdmVyZmxvdywgdW5kZXJmbG93IGFuZCBzdWJub3JtYWwgdGVzdHMNCi1tYXhleHBvbmVudDogOTk5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5OTkNCi1wcmVjaXNpb246IDkNCi1mbWF4Mzg5MCBmbWEgIDEgICAxRSs5OTk5OTkgICAgIDlFKzk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzODkxIGZtYSAgMSAgIDlFKzk5OTk5OSAgICAgMUUrOTk5OTk5ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM4OTIgZm1hICAxICAgLTEuMUUtOTk5OTk5ICAxRS05OTk5OTkgICAtPiAtMUUtMTAwMDAwMCAgICBTdWJub3JtYWwNCi1mbWF4Mzg5MyBmbWEgIDEgICAxRS05OTk5OTkgICAgLTEuMWUtOTk5OTk5IC0+IC0xRS0xMDAwMDAwICAgIFN1Ym5vcm1hbA0KLWZtYXgzODk0IGZtYSAgMSAgIC0xLjAwMDFFLTk5OTk5OSAgMUUtOTk5OTk5ICAgLT4gLTFFLTEwMDAwMDMgU3Vibm9ybWFsDQotZm1heDM4OTUgZm1hICAxICAgMUUtOTk5OTk5ICAgIC0xLjAwMDFlLTk5OTk5OSAtPiAtMUUtMTAwMDAwMyBTdWJub3JtYWwNCi1mbWF4Mzg5NiBmbWEgIDEgICAtMUUrOTk5OTk5ICAgLTlFKzk5OTk5OSAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mzg5NyBmbWEgIDEgICAtOUUrOTk5OTk5ICAgLTFFKzk5OTk5OSAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mzg5OCBmbWEgIDEgICArMS4xRS05OTk5OTkgLTFFLTk5OTk5OSAgIC0+IDFFLTEwMDAwMDAgICBTdWJub3JtYWwNCi1mbWF4Mzg5OSBmbWEgIDEgICAtMUUtOTk5OTk5ICAgKzEuMWUtOTk5OTk5IC0+IDFFLTEwMDAwMDAgICAgU3Vibm9ybWFsDQotZm1heDM5MDAgZm1hICAxICAgKzEuMDAwMUUtOTk5OTk5IC0xRS05OTk5OTkgICAtPiAxRS0xMDAwMDAzIFN1Ym5vcm1hbA0KLWZtYXgzOTAxIGZtYSAgMSAgIC0xRS05OTk5OTkgICArMS4wMDAxZS05OTk5OTkgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwNCi1mbWF4MzkwMiBmbWEgIDEgICAtMUUrOTk5OTk5ICAgKzlFKzk5OTk5OSAgIC0+ICA4RSs5OTk5OTkNCi1mbWF4MzkwMyBmbWEgIDEgICAtOUUrOTk5OTk5ICAgKzFFKzk5OTk5OSAgIC0+IC04RSs5OTk5OTkNCi0NCi1wcmVjaXNpb246IDMNCi1mbWF4MzkwNCBmbWEgIDEgICAgICAgIDAgLTkuOTk5RSs5OTk5OTkgICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZm1heDM5MDUgZm1hICAxICAgICAgICAgIC05Ljk5OUUrOTk5OTk5IDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWZtYXgzOTA2IGZtYSAgMSAgICAgICAgMCAgOS45OTlFKzk5OTk5OSAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1mbWF4MzkwNyBmbWEgIDEgICAgICAgICAgIDkuOTk5RSs5OTk5OTkgMCAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotDQotcHJlY2lzaW9uOiAzDQotbWF4ZXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotZm1heDM5MTAgZm1hICAxICAgIDEuMDBFLTk5OSAgIDAgICAgLT4gICAxLjAwRS05OTkNCi1mbWF4MzkxMSBmbWEgIDEgICAgMC4xRS05OTkgICAgMCAgICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwNCi1mbWF4MzkxMiBmbWEgIDEgICAgMC4xMEUtOTk5ICAgMCAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwNCi1mbWF4MzkxMyBmbWEgIDEgICAgMC4xMDBFLTk5OSAgMCAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgzOTE0IGZtYSAgMSAgICAwLjAxRS05OTkgICAwICAgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbA0KLS0tIG5leHQgaXMgcm91bmRlZCB0byBObWluDQotZm1heDM5MTUgZm1hICAxICAgIDAuOTk5RS05OTkgIDAgICAgLT4gICAxLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzkxNiBmbWEgIDEgICAgMC4wOTlFLTk5OSAgMCAgICAtPiAgIDEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTE3IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAwICAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5MTggZm1hICAxICAgIDAuMDAxRS05OTkgIDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzOTE5IGZtYSAgMSAgICAwLjAwMDlFLTk5OSAwICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzkyMCBmbWEgIDEgICAgMC4wMDAxRS05OTkgMCAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotZm1heDM5MzAgZm1hICAxICAgLTEuMDBFLTk5OSAgIDAgICAgLT4gIC0xLjAwRS05OTkNCi1mbWF4MzkzMSBmbWEgIDEgICAtMC4xRS05OTkgICAgMCAgICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwNCi1mbWF4MzkzMiBmbWEgIDEgICAtMC4xMEUtOTk5ICAgMCAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwNCi1mbWF4MzkzMyBmbWEgIDEgICAtMC4xMDBFLTk5OSAgMCAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgzOTM0IGZtYSAgMSAgIC0wLjAxRS05OTkgICAwICAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbA0KLS0tIG5leHQgaXMgcm91bmRlZCB0byBObWluDQotZm1heDM5MzUgZm1hICAxICAgLTAuOTk5RS05OTkgIDAgICAgLT4gIC0xLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzkzNiBmbWEgIDEgICAtMC4wOTlFLTk5OSAgMCAgICAtPiAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTM3IGZtYSAgMSAgIC0wLjAwOUUtOTk5ICAwICAgIC0+ICAtMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5MzggZm1hICAxICAgLTAuMDAxRS05OTkgIDAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzOTM5IGZtYSAgMSAgIC0wLjAwMDlFLTk5OSAwICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4Mzk0MCBmbWEgIDEgICAtMC4wMDAxRS05OTkgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotLS0gc29tZSBub24temVybyBzdWJub3JtYWwgZm1hICAxICBzDQotZm1heDM5NTAgZm1hICAxICAgIDEuMDBFLTk5OSAgICAwLjFFLTk5OSAgLT4gICAxLjEwRS05OTkNCi1mbWF4Mzk1MSBmbWEgIDEgICAgMC4xRS05OTkgICAgIDAuMUUtOTk5ICAtPiAgIDJFLTEwMDAgICAgU3Vibm9ybWFsDQotZm1heDM5NTIgZm1hICAxICAgIDAuMTBFLTk5OSAgICAwLjFFLTk5OSAgLT4gICAyLjBFLTEwMDAgIFN1Ym5vcm1hbA0KLWZtYXgzOTUzIGZtYSAgMSAgICAwLjEwMEUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgzOTU0IGZtYSAgMSAgICAwLjAxRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMS4xRS0xMDAwICBTdWJub3JtYWwNCi1mbWF4Mzk1NSBmbWEgIDEgICAgMC45OTlFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDEuMTBFLTk5OSAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM5NTYgZm1hICAxICAgIDAuMDk5RS05OTkgICAwLjFFLTk5OSAgLT4gICAyLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5NTcgZm1hICAxICAgIDAuMDA5RS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjFFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5NTggZm1hICAxICAgIDAuMDAxRS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5NTkgZm1hICAxICAgIDAuMDAwOUUtOTk5ICAwLjFFLTk5OSAgLT4gICAxLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5NjAgZm1hICAxICAgIDAuMDAwMUUtOTk5ICAwLjFFLTk5OSAgLT4gICAxLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotLS0gbmVnYXRpdmVzLi4uDQotZm1heDM5NjEgZm1hICAxICAgIDEuMDBFLTk5OSAgIC0wLjFFLTk5OSAgLT4gICA5LjBFLTEwMDAgIFN1Ym5vcm1hbA0KLWZtYXgzOTYyIGZtYSAgMSAgICAwLjFFLTk5OSAgICAtMC4xRS05OTkgIC0+ICAgMEUtMTAwMA0KLWZtYXgzOTYzIGZtYSAgMSAgICAwLjEwRS05OTkgICAtMC4xRS05OTkgIC0+ICAgMEUtMTAwMQ0KLWZtYXgzOTY0IGZtYSAgMSAgICAwLjEwMEUtOTk5ICAtMC4xRS05OTkgIC0+ICAgMEUtMTAwMSAgICBDbGFtcGVkDQotZm1heDM5NjUgZm1hICAxICAgIDAuMDFFLTk5OSAgIC0wLjFFLTk5OSAgLT4gICAtOUUtMTAwMSAgIFN1Ym5vcm1hbA0KLWZtYXgzOTY2IGZtYSAgMSAgICAwLjk5OUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgOS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTY3IGZtYSAgMSAgICAwLjA5OUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM5NjggZm1hICAxICAgIDAuMDA5RS05OTkgIC0wLjFFLTk5OSAgLT4gICAtOUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5NjkgZm1hICAxICAgIDAuMDAxRS05OTkgIC0wLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5NzAgZm1hICAxICAgIDAuMDAwOUUtOTk5IC0wLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5NzEgZm1hICAxICAgIDAuMDAwMUUtOTk5IC0wLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotDQotLS0gc29tZSAncmVhbCcgbnVtYmVycw0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLXByZWNpc2lvbjogOA0KLWZtYXgzNTY2IGZtYSAgMSAgIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTkwNkUtMzg0IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQotcHJlY2lzaW9uOiA3DQotZm1heDM1NjcgZm1hICAxICAgOTk5OTkwNjE3MzVFLTM5NCAgMEUtMzk0IC0+IDkuOTk5OTFFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KLXByZWNpc2lvbjogNg0KLWZtYXgzNTY4IGZtYSAgMSAgIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTlFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KLQ0KLS0tIG5vdyB0aGUgY2FzZSB3aGVyZSB3ZSBjYW4gZ2V0IHVuZGVyZmxvdyBidXQgdGhlIHJlc3VsdCBpcyBub3JtYWwNCi0tLSBbbm90ZSB0aGlzIGNhbid0IGhhcHBlbiBpZiB0aGUgb3BlcmFuZHMgYXJlIGFsc28gYm91bmRlZCwgYXMgd2UNCi0tLSBjYW5ub3QgcmVwcmVzZW50IDFFLTM5OSwgZm9yIGV4YW1wbGVdDQotcHJlY2lzaW9uOiAgIDE2DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi0NCi1mbWF4MzU3MSBmbWEgIDEgICAgICAgICAxRS0zODMgICAgICAgMCAgLT4gMUUtMzgzDQotZm1heDM1NzIgZm1hICAxICAgICAgICAgMUUtMzg0ICAgICAgIDAgIC0+IDFFLTM4NCAgIFN1Ym5vcm1hbA0KLWZtYXgzNTczIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgMUUtMzg0ICAtPiAxLjFFLTM4Mw0KLWZtYXgzNTc0IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM4NCAgLT4gICA5RS0zODQgU3Vibm9ybWFsDQotDQotLS0gSGVyZSB3ZSBleHBsb3JlIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluDQotZm1heDM1NzUgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsDQotZm1heDM1NzYgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsDQotZm1heDM1Nzcgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MzU3OCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgzNTc5IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDM1ODAgc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi0NCi0tLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscw0KLXByZWNpc2lvbjogICA1DQotbWF4ZXhwb25lbnQ6IDc5DQotbWluZXhwb25lbnQ6IC03OQ0KLS0tIEFkZDogbGhzIGFuZCByaHMgMA0KLWZtYXgzMTAwMSBmbWEgIDEgICAgICAgICAxLjUyNDQ0RS04MCAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAwMiBmbWEgIDEgICAgICAgICAxLjUyNDQ1RS04MCAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAwMyBmbWEgIDEgICAgICAgICAxLjUyNDQ2RS04MCAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAwNCBmbWEgIDEgICAgICAgICAwIDEuNTI0NDRFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAwNSBmbWEgIDEgICAgICAgICAwIDEuNTI0NDVFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAwNiBmbWEgIDEgICAgICAgICAwIDEuNTI0NDZFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLQ0KLS0tIEFkZDogbGhzID4+IHJocyBhbmQgdmljZSB2ZXJzYQ0KLWZtYXgzMTAxMSBmbWEgIDEgICAgICAgICAxLjUyNDQ0RS04MCAxRS0xMDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMDEyIGZtYSAgMSAgICAgICAgIDEuNTI0NDVFLTgwIDFFLTEwMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMTMgZm1hICAxICAgICAgICAgMS41MjQ0NkUtODAgMUUtMTAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAxNCBmbWEgIDEgICAgICAgICAxRS0xMDAgMS41MjQ0NEUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMDE1IGZtYSAgMSAgICAgICAgIDFFLTEwMCAxLjUyNDQ1RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMTYgZm1hICAxICAgICAgICAgMUUtMTAwIDEuNTI0NDZFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLQ0KLS0tIEFkZDogbGhzICsgcmhzIGZtYSAgMSAgaXRpb24gY2FycmllZCBvdXQNCi1mbWF4MzEwMjEgZm1hICAxICAgICAgICAgMS41MjQ0M0UtODAgMS4wMDAwMUUtODAgIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAyMiBmbWEgIDEgICAgICAgICAxLjUyNDQ0RS04MCAxLjAwMDAxRS04MCAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMDIzIGZtYSAgMSAgICAgICAgIDEuNTI0NDVFLTgwIDEuMDAwMDFFLTgwICAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMjQgZm1hICAxICAgICAgICAgMS4wMDAwMUUtODAgIDEuNTI0NDNFLTgwIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAyNSBmbWEgIDEgICAgICAgICAxLjAwMDAxRS04MCAgMS41MjQ0NEUtODAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMDI2IGZtYSAgMSAgICAgICAgIDEuMDAwMDFFLTgwICAxLjUyNDQ1RS04MCAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi0NCi0tLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMNCi1wcmVjaXNpb246ICAgIDE2DQotbWF4RXhwb25lbnQ6ICszODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLXJvdW5kaW5nOiAgICAgZG93bg0KLQ0KLWZtYXgzMTEwMCBmbWEgIDEgICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTAxIGZtYSAgMSAgIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTAzIGZtYSAgMSAgICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTEwNCBmbWEgIDEgICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTA1IGZtYSAgMSAgIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTA2IGZtYSAgMSAgIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTEwNyBmbWEgIDEgICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTA4IGZtYSAgMSAgIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTA5IGZtYSAgMSAgIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQotDQotcm91bmRpbmc6ICAgICBjZWlsaW5nDQotZm1heDMxMTEwIGZtYSAgMSAgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTExIGZtYSAgMSAgIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTExMyBmbWEgIDEgICAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTE0IGZtYSAgMSAgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTE1IGZtYSAgMSAgIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTExNiBmbWEgIDEgICAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTE3IGZtYSAgMSAgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTE4IGZtYSAgMSAgIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTExOSBmbWEgIDEgICAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCi0NCi1yb3VuZGluZzogICAgIGRvd24NCi1wcmVjaXNpb246ICAgIDcNCi1tYXhFeHBvbmVudDogKzk2DQotbWluRXhwb25lbnQ6IC05NQ0KLWZtYXgzMTEzMCBmbWEgIDEgICAgIDEgICAgICAgICAgICAtMWUtMjAwICAtPiAwLjk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLS0tIHN1Ym5vcm1hbCBib3VuZGFyeQ0KLWZtYXgzMTEzMSBmbWEgIDEgICAgIDEuMDAwMDAwRS05NCAgLTFlLTIwMCAgLT4gIDkuOTk5OTk5RS05NSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTMyIGZtYSAgMSAgICAgMS4wMDAwMDFFLTk1ICAtMWUtMjAwICAtPiAgMS4wMDAwMDBFLTk1ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzExMzMgZm1hICAxICAgICAxLjAwMDAwMEUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk5OTk5RS05NiAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzExMzQgZm1hICAxICAgICAwLjk5OTk5OUUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk5OTk4RS05NiAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzExMzUgZm1hICAxICAgICAwLjAwMTAwMEUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzExMzYgZm1hICAxICAgICAwLjAwMDk5OUUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk4RS05OSAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzExMzcgZm1hICAxICAgICAxLjAwMDAwMEUtOTUgIC0xZS0xMDEgIC0+ICA5Ljk5OTk5RS05NiAgU3Vibm9ybWFsDQotZm1heDMxMTM4IGZtYSAgMSAgICAgICAgMTAwMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45OTlFLTk4ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTEzOSBmbWEgIDEgICAgICAgICAxMDAwRS0xMDEgLTFlLTIwMCAgLT4gIDkuOTlFLTk5ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzExNDAgZm1hICAxICAgICAgICAgIDEwMEUtMTAxIC0xZS0yMDAgIC0+ICA5LjlFLTEwMCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDMxMTQxIGZtYSAgMSAgICAgICAgICAgMTBFLTEwMSAtMWUtMjAwICAtPiAgOUUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTE0MiBmbWEgIDEgICAgICAgICAgICAxRS0xMDEgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTE0MyBmbWEgIDEgICAgICAgICAgICAwRS0xMDEgLTFlLTIwMCAgLT4gLTBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTE0NCBmbWEgIDEgICAgICAgICAgICAxRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLWZtYXgzMTE1MSBmbWEgIDEgICAgICAgIDEwMDAwRS0xMDIgLTFlLTIwMCAgLT4gIDkuOTlFLTk5ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTE1MiBmbWEgIDEgICAgICAgICAxMDAwRS0xMDIgLTFlLTIwMCAgLT4gIDkuOUUtMTAwICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTE1MyBmbWEgIDEgICAgICAgICAgMTAwRS0xMDIgLTFlLTIwMCAgLT4gIDlFLTEwMSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDMxMTU0IGZtYSAgMSAgICAgICAgICAgMTBFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxMTU1IGZtYSAgMSAgICAgICAgICAgIDFFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxMTU2IGZtYSAgMSAgICAgICAgICAgIDBFLTEwMiAtMWUtMjAwICAtPiAtMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxMTU3IGZtYSAgMSAgICAgICAgICAgIDFFLTEwMyAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotZm1heDMxMTYwIGZtYSAgMSAgICAgICAgICAxMDBFLTEwNSAtMWUtMTAxICAtPiAtMEUtMTAxIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzExNjEgZm1hICAxICAgICAgICAgIDEwMEUtMTA1IC0xZS0yMDEgIC0+ICAwRS0xMDEgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLS0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlDQotcHJlY2lzaW9uOiAgIDE1DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi1mbWF4MzEyMDAgZm1hICAxICAgMUUxNSAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDBFKzE1IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIwMSBmbWEgIDEgICAxRTE1ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMTUgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjEwIGZtYSAgMSAgIDFFMTUgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMTEgZm1hICAxICAgMUUxNSAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIxMiBmbWEgIDEgICAxRTE1ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjEzIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMTQgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIxNSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjE2IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMTcgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIxOCBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjE5IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMjAgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIyMSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjIyIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMjMgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIyNCBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjI1IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSsxNSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMzAgZm1hICAxICAgMUUxNSAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXByZWNpc2lvbjogICAxNg0KLQ0KLWZtYXgzMTMwMCBmbWEgIDEgICAxRTE2ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMxMCBmbWEgIDEgICAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMxMSBmbWEgIDEgICAxRTE2ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMxMiBmbWEgIDEgICAxRTE2ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMxMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMxNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMxNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMxNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMxNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMxOCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMxOSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMyMCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMyMSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMyMiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMyMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMyNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMyNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMyNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMyNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMyOCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMyOSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMzMCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMzMSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMzMiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMzMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMzNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMzNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMzNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMzNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMzOCBmbWEgIDEgICAxRTE2ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTMzOSBmbWEgIDEgICAxRTE2ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzMTM0MCBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM0MSBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzMTM0OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzUxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM1MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzU0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM1NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzU3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM1OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNTkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzYwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM2MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNjIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzYzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM2NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNjUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzY3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM2OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNjkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzcwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM3MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzczIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM3NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNzUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzc2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM3NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNzggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzc5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM4MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzgyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM4MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzODQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzg1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM4NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzODcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzg4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM4OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzOTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzkxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM5MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzOTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzk0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM5NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzOTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQNCi0tLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwDQotcHJlY2lzaW9uOiAgIDE1DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi1mbWF4MzE0MDAgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4yMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQwMSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQwMiBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0MDMgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQwNCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQwNSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0MDYgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQwNyBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS03DQotZm1heDMxNDA4IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTgNCi1mbWF4MzE0MDkgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtOQ0KLWZtYXgzMTQxMCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMA0KLWZtYXgzMTQxMSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMQ0KLWZtYXgzMTQxMiBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMg0KLWZtYXgzMTQxMyBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMw0KLWZtYXgzMTQxNCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNA0KLWZtYXgzMTQxNSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNQ0KLWZtYXgzMTQxNiBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNg0KLWZtYXgzMTQxNyBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNw0KLWZtYXgzMTQxOCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xOA0KLWZtYXgzMTQxOSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xOQ0KLQ0KLS0tIHNhbWUsIHByZWNpc2lvbiAxNi4uDQotcHJlY2lzaW9uOiAgIDE2DQotZm1heDMxNDIwIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQyMSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDIyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDIzIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQyNCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDI1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDI2IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQyNyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcNCi1mbWF4MzE0MjggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQotZm1heDMxNDI5IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQ0KLWZtYXgzMTQzMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwDQotZm1heDMxNDMxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCi1mbWF4MzE0MzIgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KLWZtYXgzMTQzMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzDQotZm1heDMxNDM0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCi1mbWF4MzE0MzUgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KLWZtYXgzMTQzNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2DQotZm1heDMxNDM3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCi1mbWF4MzE0MzggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KLWZtYXgzMTQzOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5DQotDQotLS0gc2FtZSwgcmV2ZXJzZWQgMA0KLWZtYXgzMTQ0MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ0MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NDIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ0MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ0NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NDUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ0NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ0NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNw0KLWZtYXgzMTQ0OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOA0KLWZtYXgzMTQ0OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQ0KLWZtYXgzMTQ1MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTANCi1mbWF4MzE0NTEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExDQotZm1heDMxNDUyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KLWZtYXgzMTQ1MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMNCi1mbWF4MzE0NTQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0DQotZm1heDMxNDU1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KLWZtYXgzMTQ1NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYNCi1mbWF4MzE0NTcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3DQotZm1heDMxNDU4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KLWZtYXgzMTQ1OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkNCi0NCi0tLSBzYW1lLCBFcyBvbiB0aGUgMA0KLWZtYXgzMTQ2MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDYxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NjIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ2MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDY0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NjUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ2NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDY3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NjggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ2OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDcwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NzEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ3MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDczIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NzQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ3NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdA0KLWZtYXgzMTQ3NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1mbWF4MzE0NzcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZm1heDMxNDc4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWZtYXgzMTQ3OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi0NCi0tLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMA0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWZtYXgzMTUwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTUwMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTUwMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTUwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzMTUwNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTUwNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTUwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTUwNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLS0tIGluZXhhY3QgemVyb3MNCi1mbWF4MzE1MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE1MTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE1MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE1MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZm1heDMxNTE1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1mbWF4MzE1MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE1MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE1MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE1MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi1mbWF4MzE1MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDMxNTMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWZtYXgzMTUzNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTUzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTUzNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTUzOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZm1heDMxNTQwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTQxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTQyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTQzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotZm1heDMxNTQ0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTQ1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTQ2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTQ3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQotLS0gaW5leGFjdCB6ZXJvcw0KLWZtYXgzMTU1MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTU1MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTU1MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTU1NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1mbWF4MzE1NTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE1NTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1NTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1NTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0NCi1yb3VuZGluZzogICAgdXANCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZm1heDMxNTYwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTYxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTYyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTYzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotZm1heDMxNTY0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTY1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTY2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTY3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQotLS0gaW5leGFjdCB6ZXJvcw0KLWZtYXgzMTU3MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzE1NzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDMxNTczIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTU3NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZm1heDMxNTc1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTU3NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTU3NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTU3OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi0NCi1yb3VuZGluZzogICAgZG93bg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1mbWF4MzE1ODAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE1ODEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE1ODIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE1ODMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi1mbWF4MzE1ODQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1ODUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1ODYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1ODcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDMxNTkxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTkyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTkzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTk0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWZtYXgzMTU5NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTU5NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTU5NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTU5OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLXJvdW5kaW5nOiAgICBjZWlsaW5nDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWZtYXgzMTYwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTYwMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTYwMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTYwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzMTYwNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTYwNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTYwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTYwNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLS0tIGluZXhhY3QgemVyb3MNCi1mbWF4MzE2MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDMxNjEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTYxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTYxNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1mbWF4MzE2MTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDMxNjE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNjE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNjE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqDQotcm91bmRpbmc6ICAgIGZsb29yDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWZtYXgzMTYyMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTYyMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KLWZtYXgzMTYyMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KLWZtYXgzMTYyMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzMTYyNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTYyNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKg0KLWZtYXgzMTYyNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKg0KLWZtYXgzMTYyNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLS0tIGluZXhhY3QgemVyb3MNCi1mbWF4MzE2MzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE2MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE2MzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDMxNjM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1mbWF4MzE2MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE2MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoNCi1mbWF4MzE2MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoNCi1mbWF4MzE2MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotDQotLS0gQmlnRGVjaW1hbCBwcm9ibGVtIHRlc3RjYXNlcyAyMDA2LjAxLjIzDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotcm91bmRpbmc6ICBkb3duDQotcHJlY2lzaW9uOiA3DQotZm1heDMxNjUxIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNg0KLXByZWNpc2lvbjogNg0KLWZtYXgzMTY1MiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYNCi1wcmVjaXNpb246IDUNCi1mbWF4MzE2NTMgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDBFKzYgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQNCi1mbWF4MzE2NTQgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMEUrNiAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDMNCi1mbWF4MzE2NTUgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwRSs2ICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDINCi1mbWF4MzE2NTYgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjBFKzYgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDENCi1mbWF4MzE2NTcgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxRSs2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogIGhhbGZfZXZlbg0KLXByZWNpc2lvbjogNw0KLWZtYXgzMTY2MSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYNCi1wcmVjaXNpb246IDYNCi1mbWF4MzE2NjIgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2DQotcHJlY2lzaW9uOiA1DQotZm1heDMxNjYzIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAxRSs2ICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0DQotZm1heDMxNjY0IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDBFKzYgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzDQotZm1heDMxNjY1IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMEUrNiAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyDQotZm1heDMxNjY2IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wRSs2ICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxDQotZm1heDMxNjY3IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMUUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICB1cA0KLXByZWNpc2lvbjogNw0KLWZtYXgzMTY3MSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYNCi1wcmVjaXNpb246IDYNCi1mbWF4MzE2NzIgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2DQotcHJlY2lzaW9uOiA1DQotZm1heDMxNjczIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAxRSs2ICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0DQotZm1heDMxNjc0IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDFFKzYgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzDQotZm1heDMxNjc1IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMUUrNiAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyDQotZm1heDMxNjc2IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4xRSs2ICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxDQotZm1heDMxNjc3IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMkUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotcHJlY2lzaW9uOiAgIDM0DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KLWZtYXgzMTcwMSAgZm1hICAxICAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwDQotZm1heDMxNzAyICBmbWEgIDEgICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTANCi1mbWF4MzE3MDMgIGZtYSAgMSAgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMA0KLWZtYXgzMTcwNCAgZm1hICAxICAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0DQotZm1heDMxNzA1ICBzdWJ0cmFjdCAxMzBFLTIgIDEyMEUtMiAtPiAwLjEwDQotZm1heDMxNzA2ICBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwDQotZm1heDMxNzA3ICBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwDQotZm1heDMxNzA4ICBzdWJ0cmFjdCAxRTIgICAgIDFFNCAgICAtPiAtOS45RSszDQotDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gU2FtZSBhcyBhYm92ZSwgdXNpbmcgZGVjaW1hbDY0IGRlZmF1bHQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotcHJlY2lzaW9uOiAgIDE2DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLS0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQ0KLWZtYXgzNjAwMSBmbWEgIDEgICAxICAgICAgIDEgICAgICAgLT4gIDINCi1mbWF4MzYwMDIgZm1hICAxICAgMiAgICAgICAzICAgICAgIC0+ICA1DQotZm1heDM2MDAzIGZtYSAgMSAgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQ0KLWZtYXgzNjAwNCBmbWEgIDEgICAnNScgICAgICctMycgICAgLT4gIDINCi1mbWF4MzYwMDUgZm1hICAxICAgJy01JyAgICAnLTMnICAgIC0+ICAtOA0KLWZtYXgzNjAwNiBmbWEgIDEgICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUNCi1mbWF4MzYwMDcgZm1hICAxICAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjANCi1mbWF4MzYwMDggZm1hICAxICAgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwDQotZm1heDM2MDA5IGZtYSAgMSAgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5Jw0KLWZtYXgzNjAxMCBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcNCi0NCi1mbWF4MzYwMTEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwMTIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDAnICAnMC41NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwMTMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDE0IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0OScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjAxNSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDk5JyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwMTYgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ5OTknICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDE3IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MDAwJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjAxOCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAwMScgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwMTkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUwMScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDIwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNjAyMSBmbWEgIDEgICAwIDEgLT4gMQ0KLWZtYXgzNjAyMiBmbWEgIDEgICAxIDEgLT4gMg0KLWZtYXgzNjAyMyBmbWEgIDEgICAyIDEgLT4gMw0KLWZtYXgzNjAyNCBmbWEgIDEgICAzIDEgLT4gNA0KLWZtYXgzNjAyNSBmbWEgIDEgICA0IDEgLT4gNQ0KLWZtYXgzNjAyNiBmbWEgIDEgICA1IDEgLT4gNg0KLWZtYXgzNjAyNyBmbWEgIDEgICA2IDEgLT4gNw0KLWZtYXgzNjAyOCBmbWEgIDEgICA3IDEgLT4gOA0KLWZtYXgzNjAyOSBmbWEgIDEgICA4IDEgLT4gOQ0KLWZtYXgzNjAzMCBmbWEgIDEgICA5IDEgLT4gMTANCi0NCi0tLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMNCi1mbWF4MzYwMzEgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnDQotZm1heDM2MDMyIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5Jw0KLWZtYXgzNjAzMyBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcNCi1mbWF4MzYwMzQgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnDQotDQotZm1heDM2MDM1IGZtYSAgMSAgICc3MCcgICAgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwMzYgZm1hICAxICAgJzcwMCcgICAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjAzNyBmbWEgIDEgICAnNzAwMCcgICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDM4IGZtYSAgMSAgICc3MDAwMCcgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwMzkgZm1hICAxICAgJzcwMDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQNCi0NCi0tLSBzeW1tZXRyeToNCi1mbWF4MzYwNDAgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDQxIGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwNDIgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwNDQgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDQ1IGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkDQotDQotZm1heDM2MDQ2IGZtYSAgMSAgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnDQotZm1heDM2MDQ3IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJw0KLWZtYXgzNjA0OCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnDQotZm1heDM2MDQ5IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnDQotZm1heDM2MDUwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJw0KLWZtYXgzNjA1MSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KLWZtYXgzNjA1MyBmbWEgIDEgICAnMTInICc3LjAwJyAtPiAnMTkuMDAnDQotZm1heDM2MDU0IGZtYSAgMSAgICcxLjMnICctMS4wNycgLT4gJzAuMjMnDQotZm1heDM2MDU1IGZtYSAgMSAgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnDQotZm1heDM2MDU2IGZtYSAgMSAgICcxLjMnICctMi4wNycgLT4gJy0wLjc3Jw0KLWZtYXgzNjA1NyBmbWEgIDEgICAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0Jw0KLQ0KLS0tIGZyb20gYWJvdmUNCi1mbWF4MzYwNjEgZm1hICAxICAgMSAnMC4xJyAtPiAnMS4xJw0KLWZtYXgzNjA2MiBmbWEgIDEgICAxICcwLjAxJyAtPiAnMS4wMScNCi1mbWF4MzYwNjMgZm1hICAxICAgMSAnMC4wMDEnIC0+ICcxLjAwMScNCi1mbWF4MzYwNjQgZm1hICAxICAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJw0KLWZtYXgzNjA2NSBmbWEgIDEgICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScNCi1mbWF4MzYwNjYgZm1hICAxICAgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwMScNCi1mbWF4MzYwNjcgZm1hICAxICAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJw0KLWZtYXgzNjA2OCBmbWEgIDEgICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScNCi0NCi0tLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dDQotZm1heDM2MDcwIGZtYSAgMSAgIDEgIDAgICAgLT4gMQ0KLWZtYXgzNjA3MSBmbWEgIDEgICAxIDAuICAgIC0+IDENCi1mbWF4MzYwNzIgZm1hICAxICAgMSAgLjAgICAtPiAxLjANCi1mbWF4MzYwNzMgZm1hICAxICAgMSAwLjAgICAtPiAxLjANCi1mbWF4MzYwNzQgZm1hICAxICAgMSAwLjAwICAtPiAxLjAwDQotZm1heDM2MDc1IGZtYSAgMSAgICAwICAxICAgLT4gMQ0KLWZtYXgzNjA3NiBmbWEgIDEgICAwLiAgMSAgIC0+IDENCi1mbWF4MzYwNzcgZm1hICAxICAgIC4wIDEgICAtPiAxLjANCi1mbWF4MzYwNzggZm1hICAxICAgMC4wIDEgICAtPiAxLjANCi1mbWF4MzYwNzkgZm1hICAxICAgMC4wMCAxICAtPiAxLjAwDQotDQotLS0gc29tZSBjYXJyaWVzDQotZm1heDM2MDgwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5OTk5OTk5OQ0KLWZtYXgzNjA4MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBSb3VuZGVkDQotZm1heDM2MDgyIGZtYSAgMSAgICA5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KLWZtYXgzNjA4MyBmbWEgIDEgICAgICA5OTk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMDAwDQotZm1heDM2MDg0IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMDAwDQotZm1heDM2MDg1IGZtYSAgMSAgICAgICAgICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMA0KLWZtYXgzNjA4NiBmbWEgIDEgICAgICAgICAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwDQotZm1heDM2MDg3IGZtYSAgMSAgICAgICAgICAgICAgOTk5OTkgMSAgLT4gMTAwMDAwDQotZm1heDM2MDg4IGZtYSAgMSAgICAgICAgICAgICAgICA5OTkgMSAgLT4gMTAwMA0KLWZtYXgzNjA4OSBmbWEgIDEgICAgICAgICAgICAgICAgICA5IDEgIC0+IDEwDQotDQotDQotLS0gbW9yZSBMSFMgc3dhcHMNCi1mbWF4MzYwOTAgZm1hICAxICAgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnDQotZm1heDM2MDkxIGZtYSAgMSAgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnDQotZm1heDM2MDkyIGZtYSAgMSAgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycNCi1mbWF4MzYwOTMgZm1hICAxICAgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnDQotZm1heDM2MDk0IGZtYSAgMSAgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3Jw0KLWZtYXgzNjA5NSBmbWEgIDEgICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycNCi1mbWF4MzYwOTYgZm1hICAxICAgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnDQotZm1heDM2MDk3IGZtYSAgMSAgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnDQotZm1heDM2MDk4IGZtYSAgMSAgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnDQotZm1heDM2MDk5IGZtYSAgMSAgICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycNCi1mbWF4MzYxMDAgZm1hICAxICAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScNCi1mbWF4MzYxMDEgZm1hICAxICAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1Jw0KLWZtYXgzNjEwMiBmbWEgIDEgICAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScNCi1mbWF4MzYxMDMgZm1hICAxICAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnDQotZm1heDM2MTA0IGZtYSAgMSAgICctNUUwJyAgICAgICAgIDAgLT4gICctNScNCi1mbWF4MzYxMDUgZm1hICAxICAgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcNCi1mbWF4MzYxMDYgZm1hICAxICAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnDQotZm1heDM2MTA3IGZtYSAgMSAgICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcNCi1mbWF4MzYxMDggZm1hICAxICAgJy01RTE2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZA0KLWZtYXgzNjEwOSBmbWEgIDEgICAnLTVFMTcnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgIFJvdW5kZWQNCi1mbWF4MzYxMTAgZm1hICAxICAgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkDQotZm1heDM2MTExIGZtYSAgMSAgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KLQ0KLS0tIG1vcmUgUkhTIHN3YXBzDQotZm1heDM2MTEzIGZtYSAgMSAgIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnDQotZm1heDM2MTE0IGZtYSAgMSAgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycNCi1mbWF4MzYxMTYgZm1hICAxICAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnDQotZm1heDM2MTE3IGZtYSAgMSAgIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnDQotZm1heDM2MTE5IGZtYSAgMSAgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnDQotZm1heDM2MTIwIGZtYSAgMSAgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnDQotZm1heDM2MTIxIGZtYSAgMSAgIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnDQotZm1heDM2MTIyIGZtYSAgMSAgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycNCi1mbWF4MzYxMjMgZm1hICAxICAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJw0KLWZtYXgzNjEyNCBmbWEgIDEgICAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycNCi1mbWF4MzYxMjUgZm1hICAxICAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1Jw0KLWZtYXgzNjEyNiBmbWEgIDEgICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScNCi1mbWF4MzYxMjcgZm1hICAxICAgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScNCi1mbWF4MzYxMjggZm1hICAxICAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScNCi1mbWF4MzYxMjkgZm1hICAxICAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnDQotZm1heDM2MTMwIGZtYSAgMSAgIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcNCi1mbWF4MzYxMzEgZm1hICAxICAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcNCi1mbWF4MzYxMzIgZm1hICAxICAgMCAgJy01RTE1JyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnDQotZm1heDM2MTMzIGZtYSAgMSAgIDAgICctNUUxNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZA0KLWZtYXgzNjEzNCBmbWEgIDEgICAwICAnLTVFMTcnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQNCi1mbWF4MzYxMzUgZm1hICAxICAgMCAgJy01RTE4JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkDQotZm1heDM2MTM2IGZtYSAgMSAgIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZA0KLQ0KLS0tIHJlbGF0ZWQNCi1mbWF4MzYxMzcgZm1hICAxICAgIDEgICcwRS0xOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZA0KLWZtYXgzNjEzOCBmbWEgIDEgICAtMSAgJzBFLTE5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZm1heDM2MTM5IGZtYSAgMSAgICcwRS0xOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCi1mbWF4MzYxNDAgZm1hICAxICAgJzBFLTE5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWZtYXgzNjE0MSBmbWEgIDEgICAxRSsxMSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnDQotZm1heDM2MTQyIGZtYSAgMSAgIDFFKzExICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQNCi1mbWF4MzYxNDMgZm1hICAxICAgMC4wMDAgICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJw0KLWZtYXgzNjE0NCBmbWEgIDEgICAwLjAwMDAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkDQotDQotLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10NCi1mbWF4MzYxNDYgZm1hICAxICAgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJw0KLWZtYXgzNjE0NyBmbWEgIDEgICAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJw0KLWZtYXgzNjE0OCBmbWEgIDEgICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJw0KLWZtYXgzNjE0OSBmbWEgIDEgICAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnDQotZm1heDM2MTUwIGZtYSAgMSAgICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnDQotZm1heDM2MTUxIGZtYSAgMSAgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnDQotZm1heDM2MTUyIGZtYSAgMSAgICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycNCi1mbWF4MzYxNTMgZm1hICAxICAgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJw0KLWZtYXgzNjE1NCBmbWEgIDEgICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnDQotZm1heDM2MTU1IGZtYSAgMSAgICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnDQotZm1heDM2MTU2IGZtYSAgMSAgICczJyAgICAgJzMnICAgICAtPiAgJzYnDQotZm1heDM2MTU3IGZtYSAgMSAgICczJyAgICAgJyszJyAgICAtPiAgJzYnDQotZm1heDM2MTU4IGZtYSAgMSAgICczJyAgICAgJy0zJyAgICAtPiAgJzAnDQotZm1heDM2MTU5IGZtYSAgMSAgICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcNCi1mbWF4MzYxNjAgZm1hICAxICAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcNCi0NCi0tLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KLWZtYXgzNjE2MSBmbWEgIDEgICAnMUUrMTMnICctMScgICAgLT4gJzk5OTk5OTk5OTk5OTknDQotZm1heDM2MTYyIGZtYSAgMSAgICcxRSsxMycgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMDEuMTEnDQotZm1heDM2MTYzIGZtYSAgMSAgICcxLjExJyAgJzFFKzEzJyAtPiAnMTAwMDAwMDAwMDAwMDEuMTEnDQotZm1heDM2MTY0IGZtYSAgMSAgICctMScgICAgJzFFKzEzJyAtPiAnOTk5OTk5OTk5OTk5OScNCi1mbWF4MzYxNjUgZm1hICAxICAgJzdFKzEzJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5OScNCi1mbWF4MzYxNjYgZm1hICAxICAgJzdFKzEzJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAwMS4xMScNCi1mbWF4MzYxNjcgZm1hICAxICAgJzEuMTEnICAnN0UrMTMnIC0+ICc3MDAwMDAwMDAwMDAwMS4xMScNCi1mbWF4MzYxNjggZm1hICAxICAgJy0xJyAgICAnN0UrMTMnIC0+ICc2OTk5OTk5OTk5OTk5OScNCi0NCi0tLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1Ng0KLWZtYXgzNjE3MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxNzEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTcyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjE3MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxNzQgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTc1IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjE3NiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxNzcgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWZtYXgzNjE3OCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScNCi1mbWF4MzYxNzkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTgnDQotZm1heDM2MTgwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk3Jw0KLWZtYXgzNjE4MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NicNCi1mbWF4MzYxODIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTUnDQotZm1heDM2MTgzIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk0Jw0KLQ0KLS0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCi1yb3VuZGluZzogaGFsZl91cA0KLWZtYXgzNjIwMCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScNCi1mbWF4MzYyMDEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwOCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMTAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIxMSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjEyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMTMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIxNCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjE1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMTYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnDQotZm1heDM2MjE3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMTggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIxOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWZtYXgzNjIyMCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScNCi1mbWF4MzYyMjEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIyMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjIzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMjQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIyNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjI2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMjcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIyOCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjI5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMzAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIzMSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjMyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMzMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIzNCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjM1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMzYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnDQotZm1heDM2MjM3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMzggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIzOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCi1mbWF4MzYyNDAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI0MSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjQyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWZtYXgzNjI1MCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScNCi1mbWF4MzYyNTEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI1MiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjUzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNTQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI1NSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjU2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNTcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI1OCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjU5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNjAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI2MSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjYyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNjMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI2NCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjY1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNjYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnDQotZm1heDM2MjY3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNjggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI2OSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWZtYXgzNjMwMSBmbWEgIDEgICAgLTEgICAxICAgICAgLT4gICAwDQotZm1heDM2MzAyIGZtYSAgMSAgICAgMCAgIDEgICAgICAtPiAgIDENCi1mbWF4MzYzMDMgZm1hICAxICAgICAxICAgMSAgICAgIC0+ICAgMg0KLWZtYXgzNjMwNCBmbWEgIDEgICAgMTIgICAxICAgICAgLT4gIDEzDQotZm1heDM2MzA1IGZtYSAgMSAgICA5OCAgIDEgICAgICAtPiAgOTkNCi1mbWF4MzYzMDYgZm1hICAxICAgIDk5ICAgMSAgICAgIC0+IDEwMA0KLWZtYXgzNjMwNyBmbWEgIDEgICAxMDAgICAxICAgICAgLT4gMTAxDQotZm1heDM2MzA4IGZtYSAgMSAgIDEwMSAgIDEgICAgICAtPiAxMDINCi1mbWF4MzYzMDkgZm1hICAxICAgIC0xICAtMSAgICAgIC0+ICAtMg0KLWZtYXgzNjMxMCBmbWEgIDEgICAgIDAgIC0xICAgICAgLT4gIC0xDQotZm1heDM2MzExIGZtYSAgMSAgICAgMSAgLTEgICAgICAtPiAgIDANCi1mbWF4MzYzMTIgZm1hICAxICAgIDEyICAtMSAgICAgIC0+ICAxMQ0KLWZtYXgzNjMxMyBmbWEgIDEgICAgOTggIC0xICAgICAgLT4gIDk3DQotZm1heDM2MzE0IGZtYSAgMSAgICA5OSAgLTEgICAgICAtPiAgOTgNCi1mbWF4MzYzMTUgZm1hICAxICAgMTAwICAtMSAgICAgIC0+ICA5OQ0KLWZtYXgzNjMxNiBmbWEgIDEgICAxMDEgIC0xICAgICAgLT4gMTAwDQotDQotZm1heDM2MzIxIGZtYSAgMSAgIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwDQotZm1heDM2MzIyIGZtYSAgMSAgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxDQotZm1heDM2MzIzIGZtYSAgMSAgICAwLjAxICAwLjAxICAgIC0+ICAwLjAyDQotZm1heDM2MzI0IGZtYSAgMSAgICAwLjEyICAwLjAxICAgIC0+ICAwLjEzDQotZm1heDM2MzI1IGZtYSAgMSAgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5DQotZm1heDM2MzI2IGZtYSAgMSAgICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwDQotZm1heDM2MzI3IGZtYSAgMSAgICAxLjAwICAwLjAxICAgIC0+ICAxLjAxDQotZm1heDM2MzI4IGZtYSAgMSAgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyDQotZm1heDM2MzI5IGZtYSAgMSAgIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyDQotZm1heDM2MzMwIGZtYSAgMSAgICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxDQotZm1heDM2MzMxIGZtYSAgMSAgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwDQotZm1heDM2MzMyIGZtYSAgMSAgICAwLjEyIC0wLjAxICAgIC0+ICAwLjExDQotZm1heDM2MzMzIGZtYSAgMSAgICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3DQotZm1heDM2MzM0IGZtYSAgMSAgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4DQotZm1heDM2MzM1IGZtYSAgMSAgICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5DQotZm1heDM2MzM2IGZtYSAgMSAgICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwDQotDQotLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGZtYSAgMSAgaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQNCi1mbWF4MzYzNDAgZm1hICAxICAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMA0KLWZtYXgzNjM0MSBmbWEgIDEgICAxRSsxNSAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMA0KLWZtYXgzNjM0MiBmbWEgIDEgICAxRSsxNiAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQNCi1mbWF4MzYzNDMgZm1hICAxICAgMUUrMTcgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICBSb3VuZGVkDQotLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLg0KLWZtYXgzNjM0NCBmbWEgIDEgICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxDQotZm1heDM2MzQ1IGZtYSAgMSAgIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxDQotZm1heDM2MzQ2IGZtYSAgMSAgIDFFKzE2ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MzQ3IGZtYSAgMSAgIDFFKzE3ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MzQ4IGZtYSAgMSAgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcNCi1mbWF4MzYzNDkgZm1hICAxICAgMUUrMTUgICA3ICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDcNCi1mbWF4MzYzNTAgZm1hICAxICAgMUUrMTYgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYzNTEgZm1hICAxICAgMUUrMTcgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0cnl6ZXJvcyBjYXNlcw0KLWZtYXgzNjM2MSAgZm1hICAxICAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQ0KLWZtYXgzNjM2MiAgZm1hICAxICAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwICBSb3VuZGVkDQotZm1heDM2MzYzICBmbWEgIDEgICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYzNjQgIGZtYSAgMSAgIDEyLjM0ICAgIDBlLTM5OCAgLT4gMTIuMzQwMDAwMDAwMDAwMDAgIFJvdW5kZWQNCi0NCi0tLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMNCi1mbWF4MzY0MDAgZm1hICAxICAgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcNCi1mbWF4MzY0MDEgZm1hICAxICAgICAxICAgNzdlLTE1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3DQotZm1heDM2NDAyIGZtYSAgMSAgICAgMSAgIDc3ZS0xNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MDMgZm1hICAxICAgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQwNCBmbWEgIDEgICAgIDEgICA3N2UtMTggICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDA1IGZtYSAgMSAgICAgMSAgIDc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MDYgZm1hICAxICAgICAxICAgNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNjQxMCBmbWEgIDEgICAgMTAgICA3N2UtMTQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcNCi1mbWF4MzY0MTEgZm1hICAxICAgIDEwICAgNzdlLTE1ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQxMiBmbWEgIDEgICAgMTAgICA3N2UtMTYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDEzIGZtYSAgMSAgICAxMCAgIDc3ZS0xNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MTQgZm1hICAxICAgIDEwICAgNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQxNSBmbWEgIDEgICAgMTAgICA3N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDE2IGZtYSAgMSAgICAxMCAgIDc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzY0MjAgZm1hICAxICAgIDc3ZS0xNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcNCi1mbWF4MzY0MjEgZm1hICAxICAgIDc3ZS0xNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3DQotZm1heDM2NDIyIGZtYSAgMSAgICA3N2UtMTYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MjMgZm1hICAxICAgIDc3ZS0xNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQyNCBmbWEgIDEgICAgNzdlLTE4ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDI1IGZtYSAgMSAgICA3N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MjYgZm1hICAxICAgIDc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNjQzMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcNCi1mbWF4MzY0MzEgZm1hICAxICAgIDc3ZS0xNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQzMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDMzIGZtYSAgMSAgICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MzQgZm1hICAxICAgIDc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQzNSBmbWEgIDEgICAgNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDM2IGZtYSAgMSAgICA3N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBuZWdhdGl2ZSB1bHBzDQotZm1heDM2NDQwIGZtYSAgMSAgICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ0MSBmbWEgIDEgICAgIDEgICAtNzdlLTE1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzDQotZm1heDM2NDQyIGZtYSAgMSAgICAgMSAgIC03N2UtMTYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzDQotZm1heDM2NDQzIGZtYSAgMSAgICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ0NCBmbWEgIDEgICAgIDEgICAtNzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0NDUgZm1hICAxICAgICAxICAgLTc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0NDYgZm1hICAxICAgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzY0NTAgZm1hICAxICAgIDEwICAgLTc3ZS0xNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ1MSBmbWEgIDEgICAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ1MiBmbWEgIDEgICAgMTAgICAtNzdlLTE2ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0NTMgZm1hICAxICAgIDEwICAgLTc3ZS0xNyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDU0IGZtYSAgMSAgICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDU1IGZtYSAgMSAgICAxMCAgIC03N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDU2IGZtYSAgMSAgICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM2NDYwIGZtYSAgMSAgICAtNzdlLTE0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ2MSBmbWEgIDEgICAgLTc3ZS0xNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzDQotZm1heDM2NDYyIGZtYSAgMSAgICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzDQotZm1heDM2NDYzIGZtYSAgMSAgICAtNzdlLTE3ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ2NCBmbWEgIDEgICAgLTc3ZS0xOCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0NjUgZm1hICAxICAgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0NjYgZm1hICAxICAgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzY0NzAgZm1hICAxICAgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ3MSBmbWEgIDEgICAgLTc3ZS0xNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ3MiBmbWEgIDEgICAgLTc3ZS0xNiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0NzMgZm1hICAxICAgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDc0IGZtYSAgMSAgICAtNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDc1IGZtYSAgMSAgICAtNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDc2IGZtYSAgMSAgICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbmVnYXRpdmUgdWxwcw0KLWZtYXgzNjQ4MCBmbWEgIDEgICAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzDQotZm1heDM2NDgxIGZtYSAgMSAgICAtMSAgICA3N2UtMTUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzDQotZm1heDM2NDgyIGZtYSAgMSAgICAtMSAgICA3N2UtMTYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ4MyBmbWEgIDEgICAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDg0IGZtYSAgMSAgICAtMSAgICA3N2UtMTggICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0ODUgZm1hICAxICAgIC0xICAgIDc3ZS0xOSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDg2IGZtYSAgMSAgICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNjQ5MCBmbWEgIDEgICAtMTAgICAgNzdlLTE0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ5MSBmbWEgIDEgICAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY0OTIgZm1hICAxICAgLTEwICAgIDc3ZS0xNiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ5MyBmbWEgIDEgICAtMTAgICAgNzdlLTE3ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDk0IGZtYSAgMSAgIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ5NSBmbWEgIDEgICAtMTAgICAgNzdlLTE5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0OTYgZm1hICAxICAgLTEwICAgIDc3ZS05OSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM2NTAwIGZtYSAgMSAgICAgNzdlLTE0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY1MDEgZm1hICAxICAgICA3N2UtMTUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY1MDIgZm1hICAxICAgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzDQotZm1heDM2NTAzIGZtYSAgMSAgICAgNzdlLTE3ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1MDQgZm1hICAxICAgICA3N2UtMTggICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjUwNSBmbWEgIDEgICAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1MDYgZm1hICAxICAgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM2NTEwIGZtYSAgMSAgICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzDQotZm1heDM2NTExIGZtYSAgMSAgICAgNzdlLTE1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjUxMiBmbWEgIDEgICAgIDc3ZS0xNiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NTEzIGZtYSAgMSAgICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1MTQgZm1hICAxICAgICA3N2UtMTggICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NTE1IGZtYSAgMSAgICAgNzdlLTE5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjUxNiBmbWEgIDEgICAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSBsb25nIG9wZXJhbmRzDQotZm1heDM2NTIxIGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODAwMCAwIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNyBSb3VuZGVkDQotZm1heDM2NTIyIGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4MDAwIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNyBSb3VuZGVkDQotZm1heDM2NTIzIGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODAwICAwIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNiBSb3VuZGVkDQotZm1heDM2NTI0IGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4MDAgIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNiBSb3VuZGVkDQotZm1heDM2NTI1IGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODkwICAwIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBSb3VuZGVkDQotZm1heDM2NTI2IGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTAgIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBSb3VuZGVkDQotZm1heDM2NTI3IGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODkxICAwIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1MjggZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2Nzg5MSAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjUyOSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MDEgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NTMwIGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTAxIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1MzEgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4OTYgIDAgLT4gMS4wMTIzNDU2MjM0NTY3OTBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjUzMiBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODk2ICAtPiAxLjAxMjM0NTYyMzQ1Njc5MEUrMTYgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gdmVyaWZ5IGEgcXVlcnkNCi1yb3VuZGluZzogICAgIGRvd24NCi1mbWF4MzY1NjEgZm1hICAxICAgMWUtMzk4IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1NjIgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkDQotLS0gYW5kIHVzaW5nIGRlY2ltYWw2NCBib3VuZHMuLi4NCi1yb3VuZGluZzogICAgIGRvd24NCi1mbWF4MzY1NjMgZm1hICAxICAgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1NjQgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkDQotDQotLS0gbW9yZSB6ZXJvcywgZXRjLg0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi0NCi1mbWF4MzY3MDEgZm1hICAxICAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDANCi1mbWF4MzY3MDIgZm1hICAxICAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwDQotZm1heDM2NzAzIGZtYSAgMSAgIDAwLjAwIDBFLTMgICAtPiAwLjAwMA0KLWZtYXgzNjcwNCBmbWEgIDEgICAwRS0zICAwMC4wMCAgLT4gMC4wMDANCi0NCi1mbWF4MzY3MTAgZm1hICAxICAgMEUrMyAgMDAuMDAgIC0+IDAuMDANCi1mbWF4MzY3MTEgZm1hICAxICAgMEUrMyAgMDAuMCAgIC0+IDAuMA0KLWZtYXgzNjcxMiBmbWEgIDEgICAwRSszICAwMC4gICAgLT4gMA0KLWZtYXgzNjcxMyBmbWEgIDEgICAwRSszICAwMC5FKzEgLT4gMEUrMQ0KLWZtYXgzNjcxNCBmbWEgIDEgICAwRSszICAwMC5FKzIgLT4gMEUrMg0KLWZtYXgzNjcxNSBmbWEgIDEgICAwRSszICAwMC5FKzMgLT4gMEUrMw0KLWZtYXgzNjcxNiBmbWEgIDEgICAwRSszICAwMC5FKzQgLT4gMEUrMw0KLWZtYXgzNjcxNyBmbWEgIDEgICAwRSszICAwMC5FKzUgLT4gMEUrMw0KLWZtYXgzNjcxOCBmbWEgIDEgICAwRSszICAtMDAuMCAgIC0+IDAuMA0KLWZtYXgzNjcxOSBmbWEgIDEgICAwRSszICAtMDAuICAgIC0+IDANCi1mbWF4MzY3MzEgZm1hICAxICAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxDQotDQotZm1heDM2NzIwIGZtYSAgMSAgIDAwLjAwICAwRSszICAtPiAwLjAwDQotZm1heDM2NzIxIGZtYSAgMSAgIDAwLjAgICAwRSszICAtPiAwLjANCi1mbWF4MzY3MjIgZm1hICAxICAgMDAuICAgIDBFKzMgIC0+IDANCi1mbWF4MzY3MjMgZm1hICAxICAgMDAuRSsxIDBFKzMgIC0+IDBFKzENCi1mbWF4MzY3MjQgZm1hICAxICAgMDAuRSsyIDBFKzMgIC0+IDBFKzINCi1mbWF4MzY3MjUgZm1hICAxICAgMDAuRSszIDBFKzMgIC0+IDBFKzMNCi1mbWF4MzY3MjYgZm1hICAxICAgMDAuRSs0IDBFKzMgIC0+IDBFKzMNCi1mbWF4MzY3MjcgZm1hICAxICAgMDAuRSs1IDBFKzMgIC0+IDBFKzMNCi1mbWF4MzY3MjggZm1hICAxICAgLTAwLjAwIDBFKzMgIC0+IDAuMDANCi1mbWF4MzY3MjkgZm1hICAxICAgLTAwLjAgIDBFKzMgIC0+IDAuMA0KLWZtYXgzNjczMCBmbWEgIDEgICAtMDAuICAgMEUrMyAgLT4gMA0KLQ0KLWZtYXgzNjczMiBmbWEgIDEgICAgMCAgICAgMCAgICAgLT4gIDANCi1mbWF4MzY3MzMgZm1hICAxICAgIDAgICAgLTAgICAgIC0+ICAwDQotZm1heDM2NzM0IGZtYSAgMSAgIC0wICAgICAwICAgICAtPiAgMA0KLWZtYXgzNjczNSBmbWEgIDEgICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQ0KLQ0KLWZtYXgzNjczNiBmbWEgIDEgICAgMSAgICAtMSAgICAgLT4gIDANCi1mbWF4MzY3MzcgZm1hICAxICAgLTEgICAgLTEgICAgIC0+IC0yDQotZm1heDM2NzM4IGZtYSAgMSAgICAxICAgICAxICAgICAtPiAgMg0KLWZtYXgzNjczOSBmbWEgIDEgICAtMSAgICAgMSAgICAgLT4gIDANCi0NCi1mbWF4MzY3NDEgZm1hICAxICAgIDAgICAgLTEgICAgIC0+IC0xDQotZm1heDM2NzQyIGZtYSAgMSAgIC0wICAgIC0xICAgICAtPiAtMQ0KLWZtYXgzNjc0MyBmbWEgIDEgICAgMCAgICAgMSAgICAgLT4gIDENCi1mbWF4MzY3NDQgZm1hICAxICAgLTAgICAgIDEgICAgIC0+ICAxDQotZm1heDM2NzQ1IGZtYSAgMSAgIC0xICAgICAwICAgICAtPiAtMQ0KLWZtYXgzNjc0NiBmbWEgIDEgICAtMSAgICAtMCAgICAgLT4gLTENCi1mbWF4MzY3NDcgZm1hICAxICAgIDEgICAgIDAgICAgIC0+ICAxDQotZm1heDM2NzQ4IGZtYSAgMSAgICAxICAgIC0wICAgICAtPiAgMQ0KLQ0KLWZtYXgzNjc1MSBmbWEgIDEgICAgMC4wICAtMSAgICAgLT4gLTEuMA0KLWZtYXgzNjc1MiBmbWEgIDEgICAtMC4wICAtMSAgICAgLT4gLTEuMA0KLWZtYXgzNjc1MyBmbWEgIDEgICAgMC4wICAgMSAgICAgLT4gIDEuMA0KLWZtYXgzNjc1NCBmbWEgIDEgICAtMC4wICAgMSAgICAgLT4gIDEuMA0KLWZtYXgzNjc1NSBmbWEgIDEgICAtMS4wICAgMCAgICAgLT4gLTEuMA0KLWZtYXgzNjc1NiBmbWEgIDEgICAtMS4wICAtMCAgICAgLT4gLTEuMA0KLWZtYXgzNjc1NyBmbWEgIDEgICAgMS4wICAgMCAgICAgLT4gIDEuMA0KLWZtYXgzNjc1OCBmbWEgIDEgICAgMS4wICAtMCAgICAgLT4gIDEuMA0KLQ0KLWZtYXgzNjc2MSBmbWEgIDEgICAgMCAgICAtMS4wICAgLT4gLTEuMA0KLWZtYXgzNjc2MiBmbWEgIDEgICAtMCAgICAtMS4wICAgLT4gLTEuMA0KLWZtYXgzNjc2MyBmbWEgIDEgICAgMCAgICAgMS4wICAgLT4gIDEuMA0KLWZtYXgzNjc2NCBmbWEgIDEgICAtMCAgICAgMS4wICAgLT4gIDEuMA0KLWZtYXgzNjc2NSBmbWEgIDEgICAtMSAgICAgMC4wICAgLT4gLTEuMA0KLWZtYXgzNjc2NiBmbWEgIDEgICAtMSAgICAtMC4wICAgLT4gLTEuMA0KLWZtYXgzNjc2NyBmbWEgIDEgICAgMSAgICAgMC4wICAgLT4gIDEuMA0KLWZtYXgzNjc2OCBmbWEgIDEgICAgMSAgICAtMC4wICAgLT4gIDEuMA0KLQ0KLWZtYXgzNjc3MSBmbWEgIDEgICAgMC4wICAtMS4wICAgLT4gLTEuMA0KLWZtYXgzNjc3MiBmbWEgIDEgICAtMC4wICAtMS4wICAgLT4gLTEuMA0KLWZtYXgzNjc3MyBmbWEgIDEgICAgMC4wICAgMS4wICAgLT4gIDEuMA0KLWZtYXgzNjc3NCBmbWEgIDEgICAtMC4wICAgMS4wICAgLT4gIDEuMA0KLWZtYXgzNjc3NSBmbWEgIDEgICAtMS4wICAgMC4wICAgLT4gLTEuMA0KLWZtYXgzNjc3NiBmbWEgIDEgICAtMS4wICAtMC4wICAgLT4gLTEuMA0KLWZtYXgzNjc3NyBmbWEgIDEgICAgMS4wICAgMC4wICAgLT4gIDEuMA0KLWZtYXgzNjc3OCBmbWEgIDEgICAgMS4wICAtMC4wICAgLT4gIDEuMA0KLQ0KLS0tIFNwZWNpYWxzDQotZm1heDM2NzgwIGZtYSAgMSAgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4MzY3ODEgZm1hICAxICAgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNjc4MiBmbWEgIDEgICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZm1heDM2NzgzIGZtYSAgMSAgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1mbWF4MzY3ODQgZm1hICAxICAgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNjc4NSBmbWEgIDEgICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZm1heDM2Nzg2IGZtYSAgMSAgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1mbWF4MzY3ODcgZm1hICAxICAgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNjc4OCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZm1heDM2Nzg5IGZtYSAgMSAgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4MzY3OTAgZm1hICAxICAgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNjc5MSBmbWEgIDEgICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZm1heDM2NzkyIGZtYSAgMSAgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4MzY3OTMgZm1hICAxICAgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNjc5NCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1mbWF4MzY4MDAgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODAxIGZtYSAgMSAgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCi1mbWF4MzY4MDIgZm1hICAxICAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzNjgwMyBmbWEgIDEgICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZm1heDM2ODA0IGZtYSAgMSAgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCi1mbWF4MzY4MDUgZm1hICAxICAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzNjgwNiBmbWEgIDEgICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZm1heDM2ODA3IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1mbWF4MzY4MDggZm1hICAxICAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzNjgwOSBmbWEgIDEgICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4MTAgZm1hICAxICAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzNjgxMSBmbWEgIDEgICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZm1heDM2ODEyIGZtYSAgMSAgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1mbWF4MzY4MTMgZm1hICAxICAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzNjgxNCBmbWEgIDEgICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZm1heDM2ODE1IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1mbWF4MzY4MjEgZm1hICAxICAgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1mbWF4MzY4MjIgZm1hICAxICAgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1mbWF4MzY4MjMgZm1hICAxICAgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1mbWF4MzY4MjQgZm1hICAxICAgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1mbWF4MzY4MjUgZm1hICAxICAgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1mbWF4MzY4MjYgZm1hICAxICAgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1mbWF4MzY4MjcgZm1hICAxICAgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1mbWF4MzY4MjggZm1hICAxICAgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1mbWF4MzY4MjkgZm1hICAxICAgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzY4MzAgZm1hICAxICAgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzY4MzEgZm1hICAxICAgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzY4MzIgZm1hICAxICAgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzY4MzMgZm1hICAxICAgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzY4MzQgZm1hICAxICAgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzY4MzUgZm1hICAxICAgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzY4MzYgZm1hICAxICAgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzY4MzcgZm1hICAxICAgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1mbWF4MzY4NDEgZm1hICAxICAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODQyIGZtYSAgMSAgICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg0MyBmbWEgIDEgICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NDQgZm1hICAxICAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODQ1IGZtYSAgMSAgICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg0NiBmbWEgIDEgICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NDcgZm1hICAxICAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODQ4IGZtYSAgMSAgICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg0OSBmbWEgIDEgICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NTAgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODUxIGZtYSAgMSAgIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg1MiBmbWEgIDEgICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NTMgZm1hICAxICAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODU0IGZtYSAgMSAgIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg1NSBmbWEgIDEgICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NTYgZm1hICAxICAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODU3IGZtYSAgMSAgICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg1OCBmbWEgIDEgICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NTkgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWZtYXgzNjg2MSBmbWEgIDEgICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCi1mbWF4MzY4NjIgZm1hICAxICAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotZm1heDM2ODYzIGZtYSAgMSAgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLWZtYXgzNjg2NCBmbWEgIDEgICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCi1mbWF4MzY4NjUgZm1hICAxICAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotZm1heDM2ODY2IGZtYSAgMSAgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLWZtYXgzNjg2NyBmbWEgIDEgICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCi1mbWF4MzY4NjggZm1hICAxICAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotZm1heDM2ODY5IGZtYSAgMSAgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1mbWF4MzY4NzEgZm1hICAxICAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NzIgZm1hICAxICAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NzMgZm1hICAxICAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NzQgZm1hICAxICAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NzUgZm1hICAxICAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NzYgZm1hICAxICAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NzcgZm1hICAxICAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NzggZm1hICAxICAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NzkgZm1hICAxICAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4ODAgZm1hICAxICAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4ODEgZm1hICAxICAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4ODIgZm1hICAxICAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLWZtYXgzNjg4MyBmbWEgIDEgICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg4NCBmbWEgIDEgICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotZm1heDM2ODg1IGZtYSAgMSAgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gbm93IHRoZSBjYXNlIHdoZXJlIHdlIGNhbiBnZXQgdW5kZXJmbG93IGJ1dCB0aGUgcmVzdWx0IGlzIG5vcm1hbA0KLS0tIFtub3RlIHRoaXMgY2FuJ3QgaGFwcGVuIGlmIHRoZSBvcGVyYW5kcyBhcmUgYWxzbyBib3VuZGVkLCBhcyB3ZQ0KLS0tIGNhbm5vdCByZXByZXNlbnQgMUUtMzk5LCBmb3IgZXhhbXBsZV0NCi0NCi1mbWF4MzY1NzEgZm1hICAxICAgICAgICAgMUUtMzgzICAgICAgIDAgIC0+IDFFLTM4Mw0KLWZtYXgzNjU3MiBmbWEgIDEgICAgICAgICAxRS0zODQgICAgICAgMCAgLT4gMUUtMzg0ICAgU3Vibm9ybWFsDQotZm1heDM2NTczIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgMUUtMzg0ICAtPiAxLjFFLTM4Mw0KLWZtYXgzNjU3NCBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zODQgIC0+ICAgOUUtMzg0IFN1Ym5vcm1hbA0KLQ0KLS0tIEhlcmUgd2UgZXhwbG9yZSB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbg0KLWZtYXgzNjU3NSBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwNCi1mbWF4MzY1NzYgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsDQotZm1heDM2NTc3IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDM2NTc4IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDM2NTc5IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDM2NTgwIHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotDQotLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlDQotLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZm1heDM2OTcyIGFwcGx5ICAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWZtYXgzNjk3MyBmbWEgIDEgICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTc0IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5NzUgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTc2IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk3NyBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOEUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5NzggZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDdFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTc5IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA2RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk4MCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5ODEgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDRFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5ODIgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDNFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5ODMgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDJFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5ODQgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzY5ODUgYXBwbHkgICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWZtYXgzNjk4NiBmbWEgIDEgICAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk4NyBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk4OCBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMUUrMzY5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTg5IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5OTAgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLThFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk5MSBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtN0UrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTkyIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC02RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5OTMgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTVFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk5NCBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNEUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5OTUgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTNFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTk2IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0yRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk5NyBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMUUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMNCi1yb3VuZGluZzogICAgIGRvd24NCi1mbWF4MzYxMTAwIGZtYSAgMSAgIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTAxIGZtYSAgMSAgIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTEwMyBmbWEgIDEgICAgICsxIC0xZS0zODMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTA0IGZtYSAgMSAgIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTA1IGZtYSAgMSAgIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTEwNiBmbWEgIDEgICAxZS0zIC0xZS0zODMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTA3IGZtYSAgMSAgIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTA4IGZtYSAgMSAgIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTEwOSBmbWEgIDEgICAxZS02IC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KLQ0KLXJvdW5kaW5nOiAgICAgY2VpbGluZw0KLWZtYXgzNjExMTAgZm1hICAxICAgLTFlKzIgKzFlLTM4MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTExIGZtYSAgMSAgIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzNjExMTMgZm1hICAxICAgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzNjExMTQgZm1hICAxICAgLTFlLTEgKzFlLTM4MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTE1IGZtYSAgMSAgIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzNjExMTYgZm1hICAxICAgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzNjExMTcgZm1hICAxICAgLTFlLTQgKzFlLTM4MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTE4IGZtYSAgMSAgIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzNjExMTkgZm1hICAxICAgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQotDQotLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UNCi1yb3VuZGluZzogICAgIGhhbGZfZXZlbg0KLQ0KLWZtYXgzNjEzMDAgZm1hICAxICAgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzEwIGZtYSAgMSAgIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMxMSBmbWEgIDEgICAxRTE2ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMTIgZm1hICAxICAgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzEzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMxNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMTUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzE2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMxNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMTggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzE5IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMyMCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMjEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzIyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMyMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMjQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzI1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMyNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMjcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzI4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMyOSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMzAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzMxIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMzMiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMzMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzM0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMzNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMzYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzM3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMzOCBmbWEgIDEgICAxRTE2ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMzkgZm1hICAxICAgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzYxMzQwIGZtYSAgMSAgIDFFMTYgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM0MSBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNjEzNDkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM1MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzUxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM1MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzU0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM1NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzU3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNTggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM1OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzYwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNjEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM2MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzYzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNjQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM2NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzY3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNjggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM2OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzcwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNzEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM3MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzczIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM3NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzc2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNzcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM3OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzc5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzODAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM4MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzgyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzODMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM4NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzg1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzODYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM4NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzg4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzODkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM5MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzkxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzOTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM5MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzk0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzOTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM5NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZA0KLS0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDANCi1mbWF4MzYxNDIwIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0MjEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0MjIgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDIzIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0MjQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0MjUgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDI2IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0MjcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03DQotZm1heDM2MTQyOCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgNCi1mbWF4MzYxNDI5IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQ0KLWZtYXgzNjE0MzAgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMA0KLWZtYXgzNjE0MzEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQ0KLWZtYXgzNjE0MzIgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KLWZtYXgzNjE0MzMgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMw0KLWZtYXgzNjE0MzQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNA0KLWZtYXgzNjE0MzUgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KLWZtYXgzNjE0MzYgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNg0KLWZtYXgzNjE0MzcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNw0KLWZtYXgzNjE0MzggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KLWZtYXgzNjE0MzkgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQ0KLQ0KLS0tIHNhbWUsIHJldmVyc2VkIDANCi1mbWF4MzYxNDQwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDM2MTQ0MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDQyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDQzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAwIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDM2MTQ0NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDQ1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDQ2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAwIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDM2MTQ0NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNw0KLWZtYXgzNjE0NDggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgNCi1mbWF4MzYxNDQ5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05DQotZm1heDM2MTQ1MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTANCi1mbWF4MzYxNDUxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQ0KLWZtYXgzNjE0NTIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyDQotZm1heDM2MTQ1MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMNCi1mbWF4MzYxNDU0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNA0KLWZtYXgzNjE0NTUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1DQotZm1heDM2MTQ1NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYNCi1mbWF4MzYxNDU3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNw0KLWZtYXgzNjE0NTggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4DQotZm1heDM2MTQ1OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkNCi0NCi0tLSBzYW1lLCBFcyBvbiB0aGUgMA0KLWZtYXgzNjE0NjAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NjEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NjIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NjMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NjQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NjUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NjYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NjcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NjggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NjkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NzAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NzEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NzIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NzMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NzQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NzUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLS0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQNCi1mbWF4MzYxNDc2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWZtYXgzNjE0NzcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZm1heDM2MTQ3OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1mbWF4MzYxNDc5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLQ0KLS0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZm1heDM2MTUwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE1MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNTAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTUwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzNjE1MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTUwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDM2MTUxMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE1MTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTEzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTUxNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1mbWF4MzYxNTE1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTUxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1MTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1mbWF4MzYxNTIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTUyMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE1MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNTIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotZm1heDM2MTUyNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTUyNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLS0tIGluZXhhY3QgemVyb3MNCi1mbWF4MzYxNTMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTUzMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE1MzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWZtYXgzNjE1MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTM2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTUzNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWZtYXgzNjE1NDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNTQxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTU0MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE1NDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi1mbWF4MzYxNTQ0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU0NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1NDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTQ3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQotLS0gaW5leGFjdCB6ZXJvcw0KLWZtYXgzNjE1NTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTUyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTU1MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE1NTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZm1heDM2MTU1NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE1NTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTU3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU1OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLXJvdW5kaW5nOiAgICB1cA0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1mbWF4MzYxNTYwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTU2MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE1NjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNTYzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotZm1heDM2MTU2NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1NjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTY2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU2NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLS0tIGluZXhhY3QgemVyb3MNCi1mbWF4MzYxNTcxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzNjE1NzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDM2MTU3MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzYxNTc0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1mbWF4MzYxNTc1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzNjE1NzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTc3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU3OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi0NCi1yb3VuZGluZzogICAgZG93bg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1mbWF4MzYxNTgwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTU4MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE1ODIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNTgzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotZm1heDM2MTU4NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1ODUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTg2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU4NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLS0tIGluZXhhY3QgemVyb3MNCi1mbWF4MzYxNTkxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTU5MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE1OTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTk0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWZtYXgzNjE1OTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTk2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU5NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1OTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0NCi1yb3VuZGluZzogICAgY2VpbGluZw0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1mbWF4MzYxNjAwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTYwMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE2MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNjAzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotZm1heDM2MTYwNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE2MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNjA2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTYwNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLS0tIGluZXhhY3QgemVyb3MNCi1mbWF4MzYxNjExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzNjE2MTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDM2MTYxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE2MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZm1heDM2MTYxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzYxNjE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTYxNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE2MTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0NCi0tLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoNCi1yb3VuZGluZzogICAgZmxvb3INCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZm1heDM2MTYyMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE2MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCi1mbWF4MzYxNjIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqDQotZm1heDM2MTYyMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzNjE2MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNjI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqDQotZm1heDM2MTYyNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKg0KLWZtYXgzNjE2MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDM2MTYzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE2MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNjMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzNjE2MzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWZtYXgzNjE2MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNjM2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqDQotZm1heDM2MTYzNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKg0KLWZtYXgzNjE2MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotDQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQotZm1heDM2MTcwMSBmbWEgIDEgICAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTANCi1mbWF4MzYxNzAyIGZtYSAgMSAgIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MA0KLWZtYXgzNjE3MDMgZm1hICAxICAgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwDQotZm1heDM2MTcwNCBmbWEgIDEgICAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQNCi1mbWF4MzYxNzA1IHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTANCi1mbWF4MzYxNzA2IHN1YnRyYWN0IDEzMEUtMiAgMTJFLTEgIC0+IDAuMTANCi1mbWF4MzYxNzA3IHN1YnRyYWN0IDEzMEUtMiAgMUUwICAgIC0+IDAuMzANCi1mbWF4MzYxNzA4IHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMNCi0NCi0tLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLQ0KLWZtYXgzNjIwMDEgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Nw0KLWZtYXgzNjIwMDIgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAwMyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDA0IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMDUgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAwNiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDA3IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMDggZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAwOSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDEwIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMTEgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAxMiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDEzIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMTQgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAxNSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDE2IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMTcgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAxOCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDE5IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMjAgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAyMSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwDQotZm1heDM2MjAzMCBmbWEgIDEgICAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQ0KLWZtYXgzNjIwMzEgZm1hICAxICAgMTIzNDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMQ0KLWZtYXgzNjIwMzIgZm1hICAxICAgMTIzNDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTINCi1mbWF4MzYyMDMzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMw0KLWZtYXgzNjIwMzQgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNA0KLWZtYXgzNjIwMzUgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDUNCi1mbWF4MzYyMDM2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Ng0KLWZtYXgzNjIwMzcgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2Nw0KLWZtYXgzNjIwMzggZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzgNCi1mbWF4MzYyMDM5IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNDAgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA0MSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDQyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNDMgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA0NCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDQ1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNDYgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA0NyBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDQ4IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNDkgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYNCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZm1heDM2MjA1MCBmbWEgIDEgICAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDUxIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNTIgZm1hICAxICAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA1MyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDU0IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNTUgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA1NiBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDU3IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNjAgZm1hICAxICAgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA2MSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDYyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNjMgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA2NCBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDY1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNjYgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA2NyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpDQotcm91bmRpbmc6IHVwDQotZm1heDM2MjA3MCBmbWEgIDEgICAxMjM0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMQ0KLWZtYXgzNjIwNzEgZm1hICAxICAgMTIzNDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA3MiBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDczIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNzQgZm1hICAxICAgMTIzNDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA3NSBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDc2IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNzcgZm1hICAxICAgMTIzNDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA3OCBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDc5IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwODAgZm1hICAxICAgMTIzNDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA4MSBmbWEgIDEgICAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDgyIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwODMgZm1hICAxICAgMTIzNDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA4NCBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDg1IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwODYgZm1hICAxICAgMTIzNDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA4NyBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDg4IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwODkgZm1hICAxICAgMTIzNDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gcGF5bG9hZCBkZWNhcGl0YXRlIHgzDQotcHJlY2lzaW9uOiA1DQotZm1heDM2MzAwMCBmbWEgIDEgMSAgc05hTjEyMzQ1Njc4OTAgICAgIC0+ICBOYU42Nzg5MCAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzYzMDAxIGZtYSAgICAxIC1zTmFOMTIzNDUxMjM0NSAxICAgLT4gLU5hTjEyMzQ1ICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjMwMDIgZm1hICAgICAgIHNOYU4xMjM0NTU0MzIxIDEgMSAtPiAgTmFONTQzMjEgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTnVsbCB0ZXN0cw0KLWZtYXgzOTk5MCBmbWEgIDEgICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzk5OTEgZm1hICAxICAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBmbWEuZGVjVGVzdCAtLSBkZWNpbWFsIGZ1c2VkIG11bHRpcGx5IGFkZCAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIFRoZXNlIHRlc3RzIGNvbXByZXNlIHRocmVlIHBhcnRzOgorLS0gICAxLiBTYW5pdHkgY2hlY2tzIGFuZCBvdGhlciB0aHJlZS1vcGVyYW5kIHRlc3RzIChlc3BlY2lhbGx5IHRob3NlCistLSAgICAgIHdoZXJlIHRoZSBmdXNlZCBvcGVyYXRpb24gbWFrZXMgYSBkaWZmZXJlbmNlKQorLS0gICAyLiBNdWx0aXBseSB0ZXN0cyAodGhpcmQgb3BlcmFuZCBpcyBuZXV0cmFsIHplcm8gWzBFK2VtYXhdKQorLS0gICAzLiBBZGRpdGlvbiB0ZXN0cyAoZmlyc3Qgb3BlcmFuZCBpcyAxKQorLS0gVGhlIG11bHRpcGx5IGFuZCBhZGRpdGlvbiB0ZXN0cyBhcmUgZXh0ZW5zaXZlIGJlY2F1c2UgRk1BIG1heSBoYXZlCistLSBpdHMgb3duIGRlZGljYXRlZCBtdWx0aXBsaWNhdGlvbiBvciBhZGRpdGlvbiByb3V0aW5lKHMpLCBhbmQgdGhleQorLS0gYWxzbyBpbmhlcmVudGx5IGNoZWNrIHRoZSBsZWZ0LXRvLXJpZ2h0IHByb3BlcnRpZXMuCisKKy0tIFNhbml0eSBjaGVja3MKK2ZtYXgwMDAxIGZtYSAgMSAgIDEgICAxIC0+ICAgMgorZm1heDAwMDIgZm1hICAxICAgMSAgIDIgLT4gICAzCitmbWF4MDAwMyBmbWEgIDIgICAyICAgMyAtPiAgIDcKK2ZtYXgwMDA0IGZtYSAgOSAgIDkgICA5IC0+ICA5MAorZm1heDAwMDUgZm1hIC0xICAgMSAgIDEgLT4gICAwCitmbWF4MDAwNiBmbWEgLTEgICAxICAgMiAtPiAgIDEKK2ZtYXgwMDA3IGZtYSAtMiAgIDIgICAzIC0+ICAtMQorZm1heDAwMDggZm1hIC05ICAgOSAgIDkgLT4gLTcyCitmbWF4MDAxMSBmbWEgIDEgIC0xICAgMSAtPiAgIDAKK2ZtYXgwMDEyIGZtYSAgMSAgLTEgICAyIC0+ICAgMQorZm1heDAwMTMgZm1hICAyICAtMiAgIDMgLT4gIC0xCitmbWF4MDAxNCBmbWEgIDkgIC05ICAgOSAtPiAtNzIKK2ZtYXgwMDE1IGZtYSAgMSAgIDEgIC0xIC0+ICAgMAorZm1heDAwMTYgZm1hICAxICAgMSAgLTIgLT4gIC0xCitmbWF4MDAxNyBmbWEgIDIgICAyICAtMyAtPiAgIDEKK2ZtYXgwMDE4IGZtYSAgOSAgIDkgIC05IC0+ICA3MgorZm1heDAwMTkgZm1hICAzICAgNSAgIDcgLT4gIDIyCitmbWF4MDAyOSBmbWEgIDMgIC01ICAgNyAtPiAgLTgKKworLS0gbm9uLWludGVnZXIgZXhhY3RzCitmbWEwMTAwICBmbWEgICAgMjUuMiAgIDYzLjYgICAtNDM4ICAtPiAgMTE2NC43MgorZm1hMDEwMSAgZm1hICAgMC4zMDEgIDAuMzgwICAgIDMzNCAgLT4gIDMzNC4xMTQzODAKK2ZtYTAxMDIgIGZtYSAgICA0OS4yICAgLTQuOCAgIDIzLjMgIC0+ICAtMjEyLjg2CitmbWEwMTAzICBmbWEgICAgNC4yMiAgMC4wNzkgIC05NC42ICAtPiAgLTk0LjI2NjYyCitmbWEwMTA0ICBmbWEgICAgIDkwMyAgMC43OTcgIDAuODg3ICAtPiAgNzIwLjU3OAorZm1hMDEwNSAgZm1hICAgIDYuMTMgICAtMTYxICAgNjUuOSAgLT4gIC05MjEuMDMKK2ZtYTAxMDYgIGZtYSAgICAyOC4yICAgIDcyNyAgIDUuNDUgIC0+ICAyMDUwNi44NQorZm1hMDEwNyAgZm1hICAgICAgIDQgICAgNjA1ICAgIDY4OCAgLT4gIDMxMDgKK2ZtYTAxMDggIGZtYSAgICA5My4zICAgMC4xOSAgMC4yMjYgIC0+ICAxNy45NTMKK2ZtYTAxMDkgIGZtYSAgIDAuMTY5ICAgLTM0MSAgIDUuNjEgIC0+ICAtNTIuMDE5CitmbWEwMTEwICBmbWEgICAtNzIuMiAgICAgMzAgIC01MS4yICAtPiAgLTIyMTcuMgorZm1hMDExMSAgZm1hICAtMC40MDkgICAgIDEzICAgMjAuNCAgLT4gIDE1LjA4MworZm1hMDExMiAgZm1hICAgICAzMTcgICA3Ny4wICAgMTkuMCAgLT4gIDI0NDI4LjAKK2ZtYTAxMTMgIGZtYSAgICAgIDQ3ICAgNi41OCAgIDEuNjIgIC0+ICAzMTAuODgKK2ZtYTAxMTQgIGZtYSAgICAxLjM2ICAwLjk4NCAgMC40OTMgIC0+ICAxLjgzMTI0CitmbWEwMTE1ICBmbWEgICAgNzIuNyAgICAyNzQgICAxLjU2ICAtPiAgMTk5MjEuMzYKK2ZtYTAxMTYgIGZtYSAgICAgMzM1ICAgIDg0NyAgICAgODMgIC0+ICAyODM4MjgKK2ZtYTAxMTcgIGZtYSAgICAgNjY2ICAwLjI0NyAgIDI1LjQgIC0+ICAxODkuOTAyCitmbWEwMTE4ICBmbWEgICAtMy44NyAgIDMuMDYgICA3OC4wICAtPiAgNjYuMTU3OAorZm1hMDExOSAgZm1hICAgMC43NDIgICAgMTkyICAgMzUuNiAgLT4gIDE3OC4wNjQKK2ZtYTAxMjAgIGZtYSAgIC05MS42ICAgNS4yOSAgMC4xNTMgIC0+ICAtNDg0LjQxMQorCistLSBjYXNlcyB3aGVyZSByZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gc2VwYXJhdGUgbXVsdGlwbHkgKyBhZGQ7IGVhY2gKKy0tIGlzIHByZWNlZGVkIGJ5IHRoZSByZXN1bHQgb2YgdW5mdXNlZCBtdWx0aXBseSBhbmQgYWRkCistLSBbdGhpcyBpcyBhYm91dCAyMCUgb2YgYWxsIHNpbWlsYXIgIGNhc2VzIGluIGdlbmVyYWxdCistLSAgICAgICAgICAgICAgIDg4ODU2NTI5MCAgIDE1NTcuOTY5MzAgIC04NjA4Ny43NTc4ICAtPiAxLjM4NDM1NzM1RSsxMgorZm1hMDIwMSAgZm1hICAgICA4ODg1NjUyOTAgICAxNTU3Ljk2OTMwICAtODYwODcuNzU3OCAgLT4gMS4zODQzNTczNkUrMTIgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgLTg1NTE5MzQyLjkgICAgNzM1MTU1NDE5ICAgICA0MjAxMDQzMSAgLT4gLTYuMjg3MDAwODRFKzE2CitmbWEwMjA1ICBmbWEgICAtODU1MTkzNDIuOSAgICA3MzUxNTU0MTkgICAgIDQyMDEwNDMxICAtPiAtNi4yODcwMDA4M0UrMTYgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAtOTgwMjUuNSAgLTI5NDYwMy40NzIgICAxMDQxNDM0OC4yICAtPiAyLjg4ODkwNjY5RSsxMAorZm1hMDIwOCAgZm1hICAgICAgLTk4MDI1LjUgIC0yOTQ2MDMuNDcyICAgMTA0MTQzNDguMiAgLT4gMi44ODg5MDY3MEUrMTAgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgIDU5Njc2MjcuMzkgICA4MzUyNjU0MC42ICAgNDk4NDk0LjgxMCAgLT4gNC45ODQ1NTI3MUUrMTQKK2ZtYTAyMTEgIGZtYSAgICA1OTY3NjI3LjM5ICAgODM1MjY1NDAuNiAgIDQ5ODQ5NC44MTAgIC0+IDQuOTg0NTUyNzJFKzE0ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgMzQ1Ni45NDMzICAgIDg3NC4zOTUxOCAgIDE5Nzg2Ni42MTUgIC0+ICAzMjIwNjAxLjE4CitmbWEwMjE2ICBmbWEgICAgIDM0NTYuOTQzMyAgICA4NzQuMzk1MTggICAxOTc4NjYuNjE1ICAtPiAgMzIyMDYwMS4xNyAgICAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgNjI3NjkuODI4NyAgIDIwOTYuOTg5MjcgICAgNDguNDIwMzE3ICAtPiAgMTMxNjI3NzA1CitmbWEwMjE4ICBmbWEgICAgNjI3NjkuODI4NyAgIDIwOTYuOTg5MjcgICAgNDguNDIwMzE3ICAtPiAgMTMxNjI3NzA2ICAgICAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgIC02OC44MTUwMCAgIDU5OTYxMTEzLjkgICAgIC04OTg4ODYyICAtPiAtNC4xMzUyMTI5MUUrOQorZm1hMDIxOSAgZm1hICAgICAtNjguODE1MDAgICA1OTk2MTExMy45ICAgICAtODk4ODg2MiAgLT4gLTQuMTM1MjEyOTJFKzkgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgIDIxMjYzNDEuMDIgICA2MzQ5MS41MTUyICAgIDMwMjQyNzQ1NSAgLT4gMS4zNTMwNzA0MEUrMTEKK2ZtYTAyMjYgIGZtYSAgICAyMTI2MzQxLjAyICAgNjM0OTEuNTE1MiAgICAzMDI0Mjc0NTUgIC0+IDEuMzUzMDcwNDFFKzExICBJbmV4YWN0IFJvdW5kZWQKKworCistLSBJbmZpbml0ZSBjb21iaW5hdGlvbnMKK2ZtYXgwODAwIGZtYSAgSW5mICAgSW5mICAgSW5mICAgIC0+ICBJbmZpbml0eQorZm1heDA4MDEgZm1hICBJbmYgICBJbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA4MDIgZm1hICBJbmYgIC1JbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA4MDMgZm1hICBJbmYgIC1JbmYgIC1JbmYgICAgLT4gLUluZmluaXR5CitmbWF4MDgwNCBmbWEgLUluZiAgIEluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDgwNSBmbWEgLUluZiAgIEluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKK2ZtYXgwODA2IGZtYSAtSW5mICAtSW5mICAgSW5mICAgIC0+ICBJbmZpbml0eQorZm1heDA4MDcgZm1hIC1JbmYgIC1JbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA4MDggZm1hIC1JbmYgICAwICAgICAgIDEgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA4MDkgZm1hIC1JbmYgICAwICAgICBOYU4gICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBUcmlwbGUgTmFOIHByb3BhZ2F0aW9uCitmbWF4MDkwMCBmbWEgIE5hTjIgIE5hTjMgIE5hTjUgICAtPiAgTmFOMgorZm1heDA5MDEgZm1hICAwICAgICBOYU4zICBOYU41ICAgLT4gIE5hTjMKK2ZtYXgwOTAyIGZtYSAgMCAgICAgMCAgICAgTmFONSAgIC0+ICBOYU41CistLSBmaXJzdCBzTmFOIHdpbnMgKGNvbnNpZGVyIHFOYU4gZnJvbSBlYXJsaWVyIHNOYU4gYmVpbmcKKy0tIG92ZXJyaWRkZW4gYnkgYW4gc05hTiBpbiB0aGlyZCBvcGVyYW5kKQorZm1heDA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwOTA0IGZtYSAgMCAgICAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDkwNSBmbWEgIDAgICAgIDAgICAgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwOTA3IGZtYSAgTmFONyAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDkwOCBmbWEgIE5hTjcgIE5hTjUgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbgorCistLSBNVUxUSVBMSUNBVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQorZm1heDIwMDAgZm1hIDIgICAgICAyICAwRSs5OTk5OTkgIC0+IDQKK2ZtYXgyMDAxIGZtYSAyICAgICAgMyAgMEUrOTk5OTk5ICAtPiA2CitmbWF4MjAwMiBmbWEgNSAgICAgIDEgIDBFKzk5OTk5OSAgLT4gNQorZm1heDIwMDMgZm1hIDUgICAgICAyICAwRSs5OTk5OTkgIC0+IDEwCitmbWF4MjAwNCBmbWEgMS4yMCAgIDIgIDBFKzk5OTk5OSAgLT4gMi40MAorZm1heDIwMDUgZm1hIDEuMjAgICAwICAwRSs5OTk5OTkgIC0+IDAuMDAKK2ZtYXgyMDA2IGZtYSAxLjIwICAtMiAgMEUrOTk5OTk5ICAtPiAtMi40MAorZm1heDIwMDcgZm1hIC0xLjIwICAyICAwRSs5OTk5OTkgIC0+IC0yLjQwCitmbWF4MjAwOCBmbWEgLTEuMjAgIDAgIDBFKzk5OTk5OSAgLT4gMC4wMAorZm1heDIwMDkgZm1hIC0xLjIwIC0yICAwRSs5OTk5OTkgIC0+IDIuNDAKK2ZtYXgyMDEwIGZtYSA1LjA5IDcuMSAgMEUrOTk5OTk5ICAtPiAzNi4xMzkKK2ZtYXgyMDExIGZtYSAyLjUgICAgNCAgMEUrOTk5OTk5ICAtPiAxMC4wCitmbWF4MjAxMiBmbWEgMi41MCAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMDAKK2ZtYXgyMDEzIGZtYSAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc4OSBSb3VuZGVkCitmbWF4MjAxNCBmbWEgOS45OTk5OTk5OTkgOS45OTk5OTk5OTkgIDBFKzk5OTk5OSAgLT4gMTAwLjAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDE1IGZtYSAyLjUwICAgNCAgMEUrOTk5OTk5ICAtPiAxMC4wMAorcHJlY2lzaW9uOiA2CitmbWF4MjAxNiBmbWEgMi41MCAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMDAKK2ZtYXgyMDE3IGZtYSAgOS45OTk5OTkgIDkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+ICAxMDAuMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDIwMTggZm1hICA5Ljk5OTk5OSAtOS45OTk5OTkgIDBFKzk5OTk5OSAgLT4gLTEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MjAxOSBmbWEgLTkuOTk5OTk5ICA5Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDIwIGZtYSAtOS45OTk5OTkgLTkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+ICAxMDAuMDAwIEluZXhhY3QgUm91bmRlZAorCistLSAxOTk5LjEyLjIxOiBuZXh0IG9uZSBpcyBhIGVkZ2UgY2FzZSBpZiBpbnRlcm1lZGlhdGUgbG9uZ3MgYXJlIHVzZWQKK3ByZWNpc2lvbjogMTUKK2ZtYXgyMDU5IGZtYSA5OTk5OTk5OTk5OTkgOTc2NTYyNSAgMEUrOTk5OTk5ICAtPiA5Ljc2NTYyNDk5OTk5MDIzRSsxOCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzAKK2ZtYXgyMTYwIGZtYSA5OTk5OTk5OTk5OTkgOTc2NTYyNSAgMEUrOTk5OTk5ICAtPiA5NzY1NjI0OTk5OTkwMjM0Mzc1CitwcmVjaXNpb246IDkKKy0tLS0tCisKKy0tIHplcm9zLCBldGMuCitmbWF4MjAyMSBmbWEgIDAgICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDIwMjIgZm1hICAwICAgICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyMDIzIGZtYSAtMCAgICAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjAyNCBmbWEgLTAgICAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDIwMjUgZm1hIC0wLjAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyMDI2IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjAyNyBmbWEgLTAuMCAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDIwMjggZm1hIC0wLjAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyMDMwIGZtYSAgNS4wMCAgIDFFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwNTAwCitmbWF4MjAzMSBmbWEgIDAwLjAwICAwLjAwMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMAorZm1heDIwMzIgZm1hICAwMC4wMCAgMEUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitmbWF4MjAzMyBmbWEgIDBFLTMgICAwMC4wMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2ZtYXgyMDM0IGZtYSAtNS4wMCAgIDFFLTMgICAwRSs5OTk5OTkgIC0+IC0wLjAwNTAwCitmbWF4MjAzNSBmbWEgLTAwLjAwICAwLjAwMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMAorZm1heDIwMzYgZm1hIC0wMC4wMCAgMEUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitmbWF4MjAzNyBmbWEgLTBFLTMgICAwMC4wMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2ZtYXgyMDM4IGZtYSAgNS4wMCAgLTFFLTMgICAwRSs5OTk5OTkgIC0+IC0wLjAwNTAwCitmbWF4MjAzOSBmbWEgIDAwLjAwIC0wLjAwMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMAorZm1heDIwNDAgZm1hICAwMC4wMCAtMEUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitmbWF4MjA0MSBmbWEgIDBFLTMgIC0wMC4wMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2ZtYXgyMDQyIGZtYSAtNS4wMCAgLTFFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwNTAwCitmbWF4MjA0MyBmbWEgLTAwLjAwIC0wLjAwMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMAorZm1heDIwNDQgZm1hIC0wMC4wMCAtMEUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitmbWF4MjA0NSBmbWEgLTBFLTMgIC0wMC4wMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aCBtdWx0aXBseQorZm1heDIwNTAgZm1hIDEuMjAgMyAgICAgICAgIDBFKzk5OTk5OSAgLT4gMy42MAorZm1heDIwNTEgZm1hIDcgICAgMyAgICAgICAgIDBFKzk5OTk5OSAgLT4gMjEKK2ZtYXgyMDUyIGZtYSAwLjkgIDAuOCAgICAgICAwRSs5OTk5OTkgIC0+IDAuNzIKK2ZtYXgyMDUzIGZtYSAwLjkgIC0wICAgICAgICAwRSs5OTk5OTkgIC0+IDAuMAorZm1heDIwNTQgZm1hIDY1NDMyMSA2NTQzMjEgIDBFKzk5OTk5OSAgLT4gNC4yODEzNTk3MUUrMTEgIEluZXhhY3QgUm91bmRlZAorCitmbWF4MjA2MCBmbWEgMTIzLjQ1IDFlNyAgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrOQorZm1heDIwNjEgZm1hIDEyMy40NSAxZTggICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzEwCitmbWF4MjA2MiBmbWEgMTIzLjQ1IDFlKzkgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTEKK2ZtYXgyMDYzIGZtYSAxMjMuNDUgMWUxMCAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSsxMgorZm1heDIwNjQgZm1hIDEyMy40NSAxZTExICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzEzCitmbWF4MjA2NSBmbWEgMTIzLjQ1IDFlMTIgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTQKK2ZtYXgyMDY2IGZtYSAxMjMuNDUgMWUxMyAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSsxNQorCisKKy0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3RocworcHJlY2lzaW9uOiA5CitmbWF4MjA4MCBmbWEgMC4xIDEyMzQ1Njc4OSAgICAgICAgICAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3OC45CitmbWF4MjA4MSBmbWEgMC4xIDEyMzQ1Njc4OTEgICAgICAgICAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA4MiBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDIwODMgZm1hIDAuMSAxMjM0NTY3ODkxMjM0NSAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc4OUUrMTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA4NCBmbWEgMC4xIDEyMzQ1Njc4OSAgICAgICAgICAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3OC45CitwcmVjaXNpb246IDgKK2ZtYXgyMDg1IGZtYSAwLjEgMTIzNDU2Nzg5MTIgICAgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDg2IGZtYSAwLjEgMTIzNDU2Nzg5MTIzNDUgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3OUUrMTIgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDcKK2ZtYXgyMDg3IGZtYSAwLjEgMTIzNDU2Nzg5MTIgICAgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDIwODggZm1hIDAuMSAxMjM0NTY3ODkxMjM0NSAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1NjhFKzEyIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDkKK2ZtYXgyMDkwIGZtYSAxMjM0NTY3ODkgICAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4LjkKK2ZtYXgyMDkxIGZtYSAxMjM0NTY3ODkxICAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDkyIGZtYSAxMjM0NTY3ODkxMiAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA5MyBmbWEgMTIzNDU2Nzg5MTIzNDUgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5RSsxMiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDk0IGZtYSAxMjM0NTY3ODkgICAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4LjkKK3ByZWNpc2lvbjogOAorZm1heDIwOTUgZm1hIDEyMzQ1Njc4OTEyICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc5RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDIwOTYgZm1hIDEyMzQ1Njc4OTEyMzQ1ICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc5RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNworZm1heDIwOTcgZm1hIDEyMzQ1Njc4OTEyICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1NjhFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA5OCBmbWEgMTIzNDU2Nzg5MTIzNDUgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMKK21heGV4cG9uZW50OiA5OTk5CittaW5leHBvbmVudDogLTk5OTkKK3ByZWNpc2lvbjogMzMKK2ZtYXgyMTAxIGZtYSA5IDkgICAgMEUrOTk5OTk5ICAtPiA4MQorZm1heDIxMDIgZm1hIDkgOTAgICAgMEUrOTk5OTk5ICAtPiA4MTAKK2ZtYXgyMTAzIGZtYSA5IDkwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAKK2ZtYXgyMTA0IGZtYSA5IDkwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMAorZm1heDIxMDUgZm1hIDkgOTAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAKK2ZtYXgyMTA2IGZtYSA5IDkwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAKK2ZtYXgyMTA3IGZtYSA5IDkwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMAorZm1heDIxMDggZm1hIDkgOTAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAKK2ZtYXgyMTA5IGZtYSA5IDkwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAKK2ZtYXgyMTEwIGZtYSA5IDkwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMAorZm1heDIxMTEgZm1hIDkgOTAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAKK2ZtYXgyMTEyIGZtYSA5IDkwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAKK2ZtYXgyMTEzIGZtYSA5IDkwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMAorZm1heDIxMTQgZm1hIDkgOTAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAKK2ZtYXgyMTE1IGZtYSA5IDkwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTE2IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMAorZm1heDIxMTcgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTE4IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTE5IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxMjAgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTIxIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTIyIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxMjMgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzCitmbWF4MjEzMSBmbWEgMyAzICAgIDBFKzk5OTk5OSAgLT4gOQorZm1heDIxMzIgZm1hIDMgMzAgICAgMEUrOTk5OTk5ICAtPiA5MAorZm1heDIxMzMgZm1hIDMgMzAwICAgIDBFKzk5OTk5OSAgLT4gOTAwCitmbWF4MjEzNCBmbWEgMyAzMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMAorZm1heDIxMzUgZm1hIDMgMzAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMAorZm1heDIxMzYgZm1hIDMgMzAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwCitmbWF4MjEzNyBmbWEgMyAzMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMAorZm1heDIxMzggZm1hIDMgMzAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMAorZm1heDIxMzkgZm1hIDMgMzAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwCitmbWF4MjE0MCBmbWEgMyAzMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMAorZm1heDIxNDEgZm1hIDMgMzAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMAorZm1heDIxNDIgZm1hIDMgMzAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwCitmbWF4MjE0MyBmbWEgMyAzMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMAorZm1heDIxNDQgZm1hIDMgMzAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMAorZm1heDIxNDUgZm1hIDMgMzAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwCitmbWF4MjE0NiBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMAorZm1heDIxNDcgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMAorZm1heDIxNDggZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjE0OSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxNTAgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxNTEgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjE1MiBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxNTMgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCittYXhleHBvbmVudDogOTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OQorcHJlY2lzaW9uOiA5CistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cvdW5kZXJmbG93CitmbWF4MjE3MCBmbWEgMSA5ZTk5OTk5OSAgICAgMEUrOTk5OTk5ICAtPiA5RSs5OTk5OTkKK2ZtYXgyMTcxIGZtYSAxIDkuOWU5OTk5OTkgICAwRSs5OTk5OTkgIC0+IDkuOUUrOTk5OTk5CitmbWF4MjE3MiBmbWEgMSA5Ljk5ZTk5OTk5OSAgMEUrOTk5OTk5ICAtPiA5Ljk5RSs5OTk5OTkKK2ZtYXgyMTczIGZtYSA5ZTk5OTk5OSAgICAxICAwRSs5OTk5OTkgIC0+IDlFKzk5OTk5OQorZm1heDIxNzQgZm1hIDkuOWU5OTk5OTkgIDEgIDBFKzk5OTk5OSAgLT4gOS45RSs5OTk5OTkKK2ZtYXgyMTc2IGZtYSA5Ljk5ZTk5OTk5OSAxICAwRSs5OTk5OTkgIC0+IDkuOTlFKzk5OTk5OQorZm1heDIxNzcgZm1hIDEgOS45OTk5OWU5OTk5OTkgIDBFKzk5OTk5OSAgLT4gOS45OTk5OUUrOTk5OTk5CitmbWF4MjE3OCBmbWEgOS45OTk5OWU5OTk5OTkgMSAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5RSs5OTk5OTkKKworZm1heDIxODAgZm1hIDAuMSA5ZS05OTk5OTggICAgMEUrOTk5OTk5ICAtPiA5RS05OTk5OTkKK2ZtYXgyMTgxIGZtYSAwLjEgOTllLTk5OTk5OCAgIDBFKzk5OTk5OSAgLT4gOS45RS05OTk5OTgKK2ZtYXgyMTgyIGZtYSAwLjEgOTk5ZS05OTk5OTggIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk3CisKK2ZtYXgyMTgzIGZtYSAwLjEgOWUtOTk5OTk4ICAgICAgMEUrOTk5OTk5ICAtPiA5RS05OTk5OTkKK2ZtYXgyMTg0IGZtYSAwLjEgOTllLTk5OTk5OCAgICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5OAorZm1heDIxODUgZm1hIDAuMSA5OTllLTk5OTk5OCAgICAwRSs5OTk5OTkgIC0+IDkuOTlFLTk5OTk5NworZm1heDIxODYgZm1hIDAuMSA5OTllLTk5OTk5NyAgICAwRSs5OTk5OTkgIC0+IDkuOTlFLTk5OTk5NgorZm1heDIxODcgZm1hIDAuMSA5OTk5ZS05OTk5OTcgICAwRSs5OTk5OTkgIC0+IDkuOTk5RS05OTk5OTUKK2ZtYXgyMTg4IGZtYSAwLjEgOTk5OTllLTk5OTk5NyAgMEUrOTk5OTk5ICAtPiA5Ljk5OTlFLTk5OTk5NAorCitmbWF4MjE5MCBmbWEgMSA5ZS05OTk5OTggICAgMEUrOTk5OTk5ICAtPiA5RS05OTk5OTgKK2ZtYXgyMTkxIGZtYSAxIDk5ZS05OTk5OTggICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk3CitmbWF4MjE5MiBmbWEgMSA5OTllLTk5OTk5OCAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTYKK2ZtYXgyMTkzIGZtYSA5ZS05OTk5OTggICAxICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OAorZm1heDIxOTQgZm1hIDk5ZS05OTk5OTggIDEgIDBFKzk5OTk5OSAgLT4gOS45RS05OTk5OTcKK2ZtYXgyMTk1IGZtYSA5OTllLTk5OTk5OCAxICAwRSs5OTk5OTkgIC0+IDkuOTlFLTk5OTk5NgorCistLSBsb25nIG9wZXJhbmQgdHJpYW5nbGUKK3ByZWNpc2lvbjogMzMKK2ZtYXgyMjQ2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4MzAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMyCitmbWF4MjI0NyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyODMgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMQorZm1heDIyNDggZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjggICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzAKK2ZtYXgyMjQ5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTMgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI5CitmbWF4MjI1MCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOAorZm1heDIyNTEgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjcKK2ZtYXgyMjUyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTIgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI2CitmbWF4MjI1MyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTEgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNQorZm1heDIyNTQgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjQKK2ZtYXgyMjU1IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTcgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIzCitmbWF4MjI1NiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTIgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMgorZm1heDIyNTcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjEKK2ZtYXgyMjU4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzIgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIwCitmbWF4MjI1OSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOQorZm1heDIyNjAgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTcgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTgKK2ZtYXgyMjYxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNzAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE3CitmbWF4MjI2MiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzcgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNgorZm1heDIyNjMgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzQgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTUKK2ZtYXgyMjY0IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE0CitmbWF4MjI2NSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMworZm1heDIyNjYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTIgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTIKK2ZtYXgyMjY3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDEgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDExCitmbWF4MjI2OCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMAorZm1heDIyNjkgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDggICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDkKK2ZtYXgyMjcwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTEgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA4CitmbWF4MjI3MSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNworZm1heDIyNzIgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjMgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDYKK2ZtYXgyMjczIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDUKK2ZtYXgyMjc0IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDEuNDU0M0UrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDQKK2ZtYXgyMjc1IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDEuNDU0RSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMworZm1heDIyNzYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS40NUUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIKK2ZtYXgyMjc3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDEuNUUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDEKK2ZtYXgyMjc4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDFFKzUgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nCittYXhleHBvbmVudDogOTk5OQorbWluZXhwb25lbnQ6IC05OTk5CitwcmVjaXNpb246IDkKK2ZtYXgyMzAxIGZtYSA5IDkgICAgMEUrOTk5OTk5ICAtPiA4MQorZm1heDIzMDIgZm1hIDkgOTAgICAgMEUrOTk5OTk5ICAtPiA4MTAKK2ZtYXgyMzAzIGZtYSA5IDkwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAKK2ZtYXgyMzA0IGZtYSA5IDkwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMAorZm1heDIzMDUgZm1hIDkgOTAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAKK2ZtYXgyMzA2IGZtYSA5IDkwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAKK2ZtYXgyMzA3IGZtYSA5IDkwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMAorZm1heDIzMDggZm1hIDkgOTAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAKK2ZtYXgyMzA5IGZtYSA5IDkwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzkgICBSb3VuZGVkCitmbWF4MjMxMCBmbWEgOSA5MDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTAgIFJvdW5kZWQKK2ZtYXgyMzExIGZtYSA5IDkwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTEgIFJvdW5kZWQKK2ZtYXgyMzEyIGZtYSA5IDkwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEyICBSb3VuZGVkCitmbWF4MjMxMyBmbWEgOSA5MDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTMgIFJvdW5kZWQKK2ZtYXgyMzE0IGZtYSA5IDkwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTQgIFJvdW5kZWQKK2ZtYXgyMzE1IGZtYSA5IDkwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE1ICBSb3VuZGVkCitmbWF4MjMxNiBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTYgIFJvdW5kZWQKK2ZtYXgyMzE3IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTcgIFJvdW5kZWQKK2ZtYXgyMzE4IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE4ICBSb3VuZGVkCitmbWF4MjMxOSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTkgIFJvdW5kZWQKK2ZtYXgyMzIwIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMjAgIFJvdW5kZWQKK2ZtYXgyMzIxIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIxICBSb3VuZGVkCitmbWF4MjMyMiBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMjIgIFJvdW5kZWQKK2ZtYXgyMzIzIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMjMgIFJvdW5kZWQKKworLS0gZmFzdHBhdGggYnJlYWtlcnMKK3ByZWNpc2lvbjogICAyOQorZm1heDIzMzAgZm1hIDEuNDkxODI0Njk3NjQxMjcwMzE3ODI0ODUyOTUyODM3MjI0IDEuMTA1MTcwOTE4MDc1NjQ3NjI0ODExNzA3ODI2NDkwMjQ2NTE0Njc1NjI4NjE0NTYyODgzNTM3MzQ1NzQ3NjAzICAwRSs5OTk5OTkgIC0+IDEuNjQ4NzIxMjcwNzAwMTI4MTQ2ODQ4NjUwNzg3OCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA1NQorZm1heDIzMzEgZm1hIDAuODk1ODM0MTM1Mjk2NTI4MjUwNjc2ODU0NTgyODc2NTExNzgwMzg3MzcxNzI4NDg5MTA0MDQyOCAwLjg5NTgzNDEzNTI5NjUyODI1MDY3Njg1NDU4Mjg3NjUxMTc4MDM4NzM3MTcyODQ4OTEwNDA0MjggIDBFKzk5OTk5OSAgLT4gMC44MDI1MTg3OTc5NjI0Nzg0ODI5ODQyNTUzODI5OTM0MDY5OTU1ODkwOTgzNjk2NzUyMjI4Mjk5IEluZXhhY3QgUm91bmRlZAorCisKKy0tIHRyeXplcm9zIGNhc2VzCitwcmVjaXNpb246ICAgNworcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5MgorbWluZXhwb25lbnQ6IC05MgorZm1heDI1MDQgIGZtYSAgMEUtNjAgMTAwMEUtNjAgICAwRSs5OTk5OTkgIC0+IDBFLTk4IENsYW1wZWQKK2ZtYXgyNTA1ICBmbWEgIDEwMEUrNjAgMEUrNjAgICAgMEUrOTk5OTk5ICAtPiAwRSs5MiBDbGFtcGVkCisKKy0tIG1peGVkIHdpdGggemVyb3MKK21heGV4cG9uZW50OiA5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5CitwcmVjaXNpb246IDkKK2ZtYXgyNTQxIGZtYSAgMCAgICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyNTQyIGZtYSAtMCAgICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyNTQzIGZtYSAgMCAgICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyNTQ0IGZtYSAtMCAgICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyNTQ1IGZtYSAtMSAgICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyNTQ2IGZtYSAtMSAgICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyNTQ3IGZtYSAgMSAgICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyNTQ4IGZtYSAgMSAgICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKKworZm1heDI1NTEgZm1hICAwLjAgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU1MiBmbWEgLTAuMCAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTUzIGZtYSAgMC4wICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NTQgZm1hIC0wLjAgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU1NSBmbWEgLTEuMCAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTU2IGZtYSAtMS4wICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NTcgZm1hICAxLjAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU1OCBmbWEgIDEuMCAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKKworZm1heDI1NjEgZm1hICAwICAgIC0xLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU2MiBmbWEgLTAgICAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTYzIGZtYSAgMCAgICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NjQgZm1hIC0wICAgICAxLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU2NSBmbWEgLTEgICAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTY2IGZtYSAtMSAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NjcgZm1hICAxICAgICAwLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU2OCBmbWEgIDEgICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKKworZm1heDI1NzEgZm1hICAwLjAgIC0xLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDI1NzIgZm1hIC0wLjAgIC0xLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDI1NzMgZm1hICAwLjAgICAxLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDI1NzQgZm1hIC0wLjAgICAxLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDI1NzUgZm1hIC0xLjAgICAwLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDI1NzYgZm1hIC0xLjAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDI1NzcgZm1hICAxLjAgICAwLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDI1NzggZm1hICAxLjAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorCisKKy0tIFNwZWNpYWxzCitmbWF4MjU4MCBmbWEgIEluZiAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI1ODEgZm1hICBJbmYgIC0xMDAwICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNTgyIGZtYSAgSW5mICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjU4MyBmbWEgIEluZiAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjU4NCBmbWEgIEluZiAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjU4NSBmbWEgIEluZiAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI1ODYgZm1hICBJbmYgICAxMDAwICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNTg3IGZtYSAgSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjU4OCBmbWEgLTEwMDAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI1ODkgZm1hIC1JbmYgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNTkwIGZtYSAtMSAgICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjU5MSBmbWEgLTAgICAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjU5MiBmbWEgIDAgICAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjU5MyBmbWEgIDEgICAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI1OTQgZm1hICAxMDAwICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNTk1IGZtYSAgSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CisKK2ZtYXgyNjAwIGZtYSAtSW5mICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjYwMSBmbWEgLUluZiAgLTEwMDAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI2MDIgZm1hIC1JbmYgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNjAzIGZtYSAtSW5mICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjA0IGZtYSAtSW5mICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjA1IGZtYSAtSW5mICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjYwNiBmbWEgLUluZiAgIDEwMDAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI2MDcgZm1hIC1JbmYgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNjA4IGZtYSAtMTAwMCAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjYwOSBmbWEgLUluZiAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI2MTAgZm1hIC0xICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNjExIGZtYSAtMCAgICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjEyIGZtYSAgMCAgICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjEzIGZtYSAgMSAgICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjYxNCBmbWEgIDEwMDAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI2MTUgZm1hICBJbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKKworZm1heDI2MjEgZm1hICBOYU4gLUluZiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyMiBmbWEgIE5hTiAtMTAwMCAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjIzIGZtYSAgTmFOIC0xICAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjQgZm1hICBOYU4gLTAgICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyNSBmbWEgIE5hTiAgMCAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjI2IGZtYSAgTmFOICAxICAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjcgZm1hICBOYU4gIDEwMDAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyOCBmbWEgIE5hTiAgSW5mICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjI5IGZtYSAgTmFOICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzAgZm1hIC1JbmYgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYzMSBmbWEgLTEwMDAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjMyIGZtYSAtMSAgICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzMgZm1hIC0wICAgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYzNCBmbWEgIDAgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjM1IGZtYSAgMSAgICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzYgZm1hICAxMDAwIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYzNyBmbWEgIEluZiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KKworZm1heDI2NDEgZm1hICBzTmFOIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NDIgZm1hICBzTmFOIC0xMDAwICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NDMgZm1hICBzTmFOIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NDQgZm1hICBzTmFOIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NDUgZm1hICBzTmFOICAwICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NDYgZm1hICBzTmFOICAxICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NDcgZm1hICBzTmFOICAxMDAwICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NDggZm1hICBzTmFOICBOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NDkgZm1hICBzTmFOIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NTAgZm1hICBOYU4gIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NTEgZm1hIC1JbmYgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NTIgZm1hIC0xMDAwIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NTMgZm1hIC0xICAgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NTQgZm1hIC0wICAgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NTUgZm1hICAwICAgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NTYgZm1hICAxICAgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NTcgZm1hICAxMDAwIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NTggZm1hICBJbmYgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NTkgZm1hICBOYU4gIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitmbWF4MjY2MSBmbWEgIE5hTjkgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU45CitmbWF4MjY2MiBmbWEgIE5hTjggIDk5OSAgICAwRSs5OTk5OTkgIC0+ICBOYU44CitmbWF4MjY2MyBmbWEgIE5hTjcxIEluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU43MQorZm1heDI2NjQgZm1hICBOYU42ICBOYU41ICAgMEUrOTk5OTk5ICAtPiAgTmFONgorZm1heDI2NjUgZm1hIC1JbmYgICBOYU40ICAgMEUrOTk5OTk5ICAtPiAgTmFONAorZm1heDI2NjYgZm1hIC05OTkgICBOYU4zMyAgMEUrOTk5OTk5ICAtPiAgTmFOMzMKK2ZtYXgyNjY3IGZtYSAgSW5mICAgTmFOMiAgIDBFKzk5OTk5OSAgLT4gIE5hTjIKKworZm1heDI2NzEgZm1hICBzTmFOOTkgLUluZiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjcyIGZtYSAgc05hTjk4IC0xMSAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3MyBmbWEgIHNOYU45NyAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzQgZm1hICBzTmFOMTYgc05hTjk0ICAgMEUrOTk5OTk5ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjc1IGZtYSAgTmFOOTUgIHNOYU45MyAgIDBFKzk5OTk5OSAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3NiBmbWEgLUluZiAgICBzTmFOOTIgICAwRSs5OTk5OTkgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzcgZm1hICAwODggICAgc05hTjkxICAgMEUrOTk5OTk5ICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjc4IGZtYSAgSW5mICAgIHNOYU45MCAgIDBFKzk5OTk5OSAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3OSBmbWEgIE5hTiAgICBzTmFOODkgICAwRSs5OTk5OTkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitmbWF4MjY4MSBmbWEgLU5hTjkgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1OYU45CitmbWF4MjY4MiBmbWEgLU5hTjggIDk5OSAgICAwRSs5OTk5OTkgIC0+IC1OYU44CitmbWF4MjY4MyBmbWEgLU5hTjcxIEluZiAgICAwRSs5OTk5OTkgIC0+IC1OYU43MQorZm1heDI2ODQgZm1hIC1OYU42IC1OYU41ICAgMEUrOTk5OTk5ICAtPiAtTmFONgorZm1heDI2ODUgZm1hIC1JbmYgIC1OYU40ICAgMEUrOTk5OTk5ICAtPiAtTmFONAorZm1heDI2ODYgZm1hIC05OTkgIC1OYU4zMyAgMEUrOTk5OTk5ICAtPiAtTmFOMzMKK2ZtYXgyNjg3IGZtYSAgSW5mICAtTmFOMiAgIDBFKzk5OTk5OSAgLT4gLU5hTjIKKworZm1heDI2OTEgZm1hIC1zTmFOOTkgLUluZiAgICAgMEUrOTk5OTk5ICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjkyIGZtYSAtc05hTjk4IC0xMSAgICAgIDBFKzk5OTk5OSAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5MyBmbWEgLXNOYU45NyAgTmFOICAgICAwRSs5OTk5OTkgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTQgZm1hIC1zTmFOMTYgLXNOYU45NCAgMEUrOTk5OTk5ICAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjk1IGZtYSAtTmFOOTUgIC1zTmFOOTMgIDBFKzk5OTk5OSAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5NiBmbWEgLUluZiAgICAtc05hTjkyICAwRSs5OTk5OTkgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTcgZm1hICAwODggICAgLXNOYU45MSAgMEUrOTk5OTk5ICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjk4IGZtYSAgSW5mICAgIC1zTmFOOTAgIDBFKzk5OTk5OSAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5OSBmbWEgLU5hTiAgICAtc05hTjg5ICAwRSs5OTk5OTkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitmbWF4MjcwMSBmbWEgLU5hTiAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1OYU4KK2ZtYXgyNzAyIGZtYSAtTmFOICAgOTk5ICAgIDBFKzk5OTk5OSAgLT4gLU5hTgorZm1heDI3MDMgZm1hIC1OYU4gICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFOCitmbWF4MjcwNCBmbWEgLU5hTiAgLU5hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4KK2ZtYXgyNzA1IGZtYSAtSW5mICAtTmFOMCAgIDBFKzk5OTk5OSAgLT4gLU5hTgorZm1heDI3MDYgZm1hIC05OTkgIC1OYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOCitmbWF4MjcwNyBmbWEgIEluZiAgLU5hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4KKworZm1heDI3MTEgZm1hIC1zTmFOICAgLUluZiAgICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxMiBmbWEgLXNOYU4gICAtMTEgICAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNzEzIGZtYSAtc05hTjAwICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTQgZm1hIC1zTmFOICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxNSBmbWEgLU5hTiAgICAtc05hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNzE2IGZtYSAtSW5mICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTcgZm1hICAwODggICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxOCBmbWEgIEluZiAgICAtc05hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNzE5IGZtYSAtTmFOICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMKK21heGV4cG9uZW50OiA5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5CitmbWF4MjczMCBmbWEgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDI3MzEgZm1hIDlFKzk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgyNzMyIGZtYSArMC4xMDAgOUUtOTk5OTk5ICAwRSs5OTk5OTkgIC0+IDkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsCitmbWF4MjczMyBmbWEgOUUtOTk5OTk5ICswLjEwMCAgMEUrOTk5OTk5ICAtPiA5LjAwRS0xMDAwMDAwIFN1Ym5vcm1hbAorZm1heDI3MzUgZm1hIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4MjczNiBmbWEgOUUrOTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgyNzM3IGZtYSAtMC4xMDAgOUUtOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC05LjAwRS0xMDAwMDAwIFN1Ym5vcm1hbAorZm1heDI3MzggZm1hIDlFLTk5OTk5OSAtMC4xMDAgIDBFKzk5OTk5OSAgLT4gLTkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsCisKKy0tIHNpZ25zCitmbWF4Mjc1MSBmbWEgIDFlKzc3Nzc3NyAgMWUrNDExMTExICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzUyIGZtYSAgMWUrNzc3Nzc3IC0xZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NTMgZm1hIC0xZSs3Nzc3NzcgIDFlKzQxMTExMSAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc1NCBmbWEgLTFlKzc3Nzc3NyAtMWUrNDExMTExICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzU1IGZtYSAgMWUtNzc3Nzc3ICAxZS00MTExMTEgIDBFKzk5OTk5OSAgLT4gIDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI3NTYgZm1hICAxZS03Nzc3NzcgLTFlLTQxMTExMSAgMEUrOTk5OTk5ICAtPiAtMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4Mjc1NyBmbWEgLTFlLTc3Nzc3NyAgMWUtNDExMTExICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyNzU4IGZtYSAtMWUtNzc3Nzc3IC0xZS00MTExMTEgIDBFKzk5OTk5OSAgLT4gIDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykKK3ByZWNpc2lvbjogOQorZm1heDI3NjAgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDEgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwMSBTdWJub3JtYWwKK2ZtYXgyNzYxIGZtYSAxZS02MDAwMDAgMWUtNDAwMDAyICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDIgU3Vibm9ybWFsCitmbWF4Mjc2MiBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwMyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDAzIFN1Ym5vcm1hbAorZm1heDI3NjMgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDQgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNCBTdWJub3JtYWwKK2ZtYXgyNzY0IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA1ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDUgU3Vibm9ybWFsCitmbWF4Mjc2NSBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNiAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA2IFN1Ym5vcm1hbAorZm1heDI3NjYgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDcgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNyBTdWJub3JtYWwKK2ZtYXgyNzY3IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA4ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI3NjggZm1hIDFlLTYwMDAwMCAxZS00MDAwMDkgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4Mjc2OSBmbWEgMWUtNjAwMDAwIDFlLTQwMDAxMCAgMEUrOTk5OTk5ICAtPiAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KK2ZtYXgyNzcwIGZtYSAxZSs2MDAwMDAgMWUrNDAwMDAxICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzEgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDIgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3MiBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMyAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzczIGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA0ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzQgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDUgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3NSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNiAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzc2IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA3ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzcgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDggIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3OCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwOSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzc5IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDEwICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSAnc3Vibm9ybWFsJyB0ZXN0IGVkZ2UgY29uZGl0aW9uIGF0IGhpZ2hlciBwcmVjaXNpb25zCitwcmVjaXNpb246IDk5CitmbWF4Mjc4MCBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA3IFN1Ym5vcm1hbAorZm1heDI3ODEgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDggIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwOCBTdWJub3JtYWwKK2ZtYXgyNzgyIGZtYSAxZS02MDAwMDAgMWUtNDAwMDk3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwOTcgU3Vibm9ybWFsCitmbWF4Mjc4MyBmbWEgMWUtNjAwMDAwIDFlLTQwMDA5OCAgMEUrOTk5OTk5ICAtPiAwRS0xMDAwMDk3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3ByZWNpc2lvbjogOTk5CitmbWF4Mjc4NCBmbWEgMWUtNjAwMDAwIDFlLTQwMDk5NyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwOTk3IFN1Ym5vcm1hbAorZm1heDI3ODUgZm1hIDFlLTYwMDAwMCAxZS00MDA5OTggIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDk5NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIHRlc3Qgc3Vibm9ybWFscyByb3VuZGluZworcHJlY2lzaW9uOiAgIDUKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5Cityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2ZtYXgyODAxIGZtYSAgMS4wMDAwRS05OTkgIDEgICAgICAwRSs5OTk5OTkgIC0+IDEuMDAwMEUtOTk5CitmbWF4MjgwMiBmbWEgIDEuMDAwRS05OTkgICAxZS0xICAgMEUrOTk5OTk5ICAtPiAxLjAwMEUtMTAwMCBTdWJub3JtYWwKK2ZtYXgyODAzIGZtYSAgMS4wMEUtOTk5ICAgIDFlLTIgICAwRSs5OTk5OTkgIC0+IDEuMDBFLTEwMDEgIFN1Ym5vcm1hbAorZm1heDI4MDQgZm1hICAxLjBFLTk5OSAgICAgMWUtMyAgIDBFKzk5OTk5OSAgLT4gMS4wRS0xMDAyICAgU3Vibm9ybWFsCitmbWF4MjgwNSBmbWEgIDEuMEUtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBTdWJub3JtYWwgUm91bmRlZAorZm1heDI4MDYgZm1hICAxLjNFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODA3IGZtYSAgMS41RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgwOCBmbWEgIDEuN0UtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MDkgZm1hICAyLjNFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODEwIGZtYSAgMi41RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxMSBmbWEgIDIuN0UtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAzRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTIgZm1hICAxLjQ5RS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODEzIGZtYSAgMS41MEUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxNCBmbWEgIDEuNTFFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTUgZm1hICAyLjQ5RS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODE2IGZtYSAgMi41MEUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxNyBmbWEgIDIuNTFFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAzRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitmbWF4MjgxOCBmbWEgIDFFLTk5OSAgICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBTdWJub3JtYWwKK2ZtYXgyODE5IGZtYSAgM0UtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyODIwIGZtYSAgNUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyODIxIGZtYSAgN0UtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgyMiBmbWEgIDlFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MjMgZm1hICA5LjlFLTk5OSAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDI4MjQgZm1hICAxRS05OTkgICAgICAtMWUtNCAgIDBFKzk5OTk5OSAgLT4gLTFFLTEwMDMgICAgU3Vibm9ybWFsCitmbWF4MjgyNSBmbWEgIDNFLTk5OSAgICAgIC0xZS01ICAgMEUrOTk5OTk5ICAtPiAtMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4MjgyNiBmbWEgLTVFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAtMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4MjgyNyBmbWEgIDdFLTk5OSAgICAgIC0xZS01ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MjggZm1hIC05RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTFFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODI5IGZtYSAgOS45RS05OTkgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgzMCBmbWEgIDMuMEUtOTk5ICAgIC0xZS01ICAgMEUrOTk5OTk5ICAtPiAtMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2ZtYXgyODMxIGZtYSAgMS4wRS01MDEgICAgIDFlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjBFLTEwMDIgICBTdWJub3JtYWwKK2ZtYXgyODMyIGZtYSAgMi4wRS01MDEgICAgIDJlLTUwMSAgMEUrOTk5OTk5ICAtPiA0LjBFLTEwMDIgICBTdWJub3JtYWwKK2ZtYXgyODMzIGZtYSAgNC4wRS01MDEgICAgIDRlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjYwRS0xMDAxICBTdWJub3JtYWwKK2ZtYXgyODM0IGZtYSAxMC4wRS01MDEgICAgMTBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjAwMEUtMTAwMCBTdWJub3JtYWwKK2ZtYXgyODM1IGZtYSAzMC4wRS01MDEgICAgMzBlLTUwMSAgMEUrOTk5OTk5ICAtPiA5LjAwMEUtMTAwMCBTdWJub3JtYWwKK2ZtYXgyODM2IGZtYSA0MC4wRS01MDEgICAgNDBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjYwMDBFLTk5OQorCistLSBzcXVhcmVzCitmbWF4Mjg0MCBmbWEgIDFFLTUwMiAgICAgICAxZS01MDIgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI4NDEgZm1hICAxRS01MDEgICAgICAgMWUtNTAxICAwRSs5OTk5OTkgIC0+IDFFLTEwMDIgICAgIFN1Ym5vcm1hbAorZm1heDI4NDIgZm1hICAyRS01MDEgICAgICAgMmUtNTAxICAwRSs5OTk5OTkgIC0+IDRFLTEwMDIgICAgIFN1Ym5vcm1hbAorZm1heDI4NDMgZm1hICA0RS01MDEgICAgICAgNGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNkUtMTAwMSAgIFN1Ym5vcm1hbAorZm1heDI4NDQgZm1hIDEwRS01MDEgICAgICAxMGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuMDBFLTEwMDAgIFN1Ym5vcm1hbAorZm1heDI4NDUgZm1hIDMwRS01MDEgICAgICAzMGUtNTAxICAwRSs5OTk5OTkgIC0+IDkuMDBFLTEwMDAgIFN1Ym5vcm1hbAorZm1heDI4NDYgZm1hIDQwRS01MDEgICAgICA0MGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNjAwRS05OTkKKworLS0gY3ViZXMKK2ZtYXgyODUwIGZtYSAgMUUtNjcwICAgICAxZS0zMzUgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4Mjg1MSBmbWEgIDFFLTY2OCAgICAgMWUtMzM0ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDIgICAgU3Vibm9ybWFsCitmbWF4Mjg1MiBmbWEgIDRFLTY2OCAgICAgMmUtMzM0ICAwRSs5OTk5OTkgIC0+IDhFLTEwMDIgICAgU3Vibm9ybWFsCitmbWF4Mjg1MyBmbWEgIDlFLTY2OCAgICAgM2UtMzM0ICAwRSs5OTk5OTkgIC0+IDIuN0UtMTAwMSAgU3Vibm9ybWFsCitmbWF4Mjg1NCBmbWEgMTZFLTY2OCAgICAgNGUtMzM0ICAwRSs5OTk5OTkgIC0+IDYuNEUtMTAwMSAgU3Vibm9ybWFsCitmbWF4Mjg1NSBmbWEgMjVFLTY2OCAgICAgNWUtMzM0ICAwRSs5OTk5OTkgIC0+IDEuMjVFLTEwMDAgU3Vibm9ybWFsCitmbWF4Mjg1NiBmbWEgMTBFLTY2OCAgIDEwMGUtMzM0ICAwRSs5OTk5OTkgIC0+IDEuMDAwRS05OTkKKworLS0gdGVzdCBkZXJpdmVkIGZyb20gcmVzdWx0IG9mIDAuMDk5ICoqIDk5OSBhdCAxNSBkaWdpdHMgd2l0aCB1bmxpbWl0ZWQgZXhwb25lbnQKK3ByZWNpc2lvbjogMTkKK2ZtYXgyODYwIGZtYSAgNjYzNjg1MTU1Nzk5NDU3ODcxNkUtNTIwIDY2MzY4NTE1NTc5OTQ1Nzg3MTZFLTUyMCAgMEUrOTk5OTk5ICAtPiA0LjQwNDc3OTg2MDI4NTUxRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aAorcHJlY2lzaW9uOiAzCittYXhFeHBvbmVudDogOTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OQorZm1heDI4NzAgZm1hIDEgIDkuOTk5RSs5OTk5OTkgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4Mjg3MSBmbWEgMSAtOS45OTlFKzk5OTk5OSAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgyODcyIGZtYSAgICA5Ljk5OUUrOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDI4NzMgZm1hICAgLTkuOTk5RSs5OTk5OTkgMSAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitwcmVjaXNpb246ICAgNQorbWF4ZXhwb25lbnQ6IDc5CittaW5leHBvbmVudDogLTc5CitmbWF4Mjg4MSBmbWEgIDEuMjM0N0UtNDAgIDEuMjM0N0UtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyNEUtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mjg4MiBmbWEgIDEuMjM0RS00MCAgMS4yMzRFLTQwICAgICAwRSs5OTk5OTkgIC0+ICAxLjUyM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mjg4MyBmbWEgIDEuMjNFLTQwICAgMS4yM0UtNDAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjUxM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mjg4NCBmbWEgIDEuMkUtNDAgICAgMS4yRS00MCAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjQ0RS04MCAgIFN1Ym5vcm1hbAorZm1heDI4ODUgZm1hICAxLjJFLTQwICAgIDEuMkUtNDEgICAgICAgMEUrOTk5OTk5ICAtPiAgMS40NEUtODEgICBTdWJub3JtYWwKK2ZtYXgyODg2IGZtYSAgMS4yRS00MCAgICAxLjJFLTQyICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNEUtODIgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgyODg3IGZtYSAgMS4yRS00MCAgICAxLjNFLTQyICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNkUtODIgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgyODg4IGZtYSAgMS4zRS00MCAgICAxLjNFLTQyICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuN0UtODIgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgyODg5IGZtYSAgMS4zRS00MCAgICAxLjNFLTQzICAgICAgIDBFKzk5OTk5OSAgLT4gICAgMkUtODMgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgyODkwIGZtYSAgMS4zRS00MSAgICAxLjNFLTQzICAgICAgIDBFKzk5OTk5OSAgLT4gICAgMEUtODMgICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCitmbWF4Mjg5MSBmbWEgIDEuMjM0NUUtMzkgICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyMzRFLTc5IEluZXhhY3QgUm91bmRlZAorZm1heDI4OTIgZm1hICAxLjIzNDU2RS0zOSAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjM0RS03OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODkzIGZtYSAgMS4yMzQ1RS00MCAgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgyODk0IGZtYSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgyODk1IGZtYSAgMS4yMzQ1RS00MSAgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTJFLTgxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgyODk2IGZtYSAgMS4yMzQ1NkUtNDEgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTJFLTgxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdworcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworZm1heDI5MDAgZm1hICAwLjMwMDAwMDAwMDBFLTE5MSAwLjMwMDAwMDAwMDBFLTE5MSAgMEUrOTk5OTk5ICAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyOTAxIGZtYSAgMC4zMDAwMDAwMDAxRS0xOTEgMC4zMDAwMDAwMDAxRS0xOTEgIDBFKzk5OTk5OSAgLT4gOS4wMDAwMDAwMDYwMDAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkwMiBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OSAgICAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MDMgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5ICAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyOTA0IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTkgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTk5MEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkwNSBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OSAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0CitmbWF4MjkwNiBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDEgICAgICAgICAgICAgICAgICAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS0zODMKK2ZtYXgyOTA3IGZtYSAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgIDBFKzk5OTk5OSAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OQorLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4KK2ZtYXgyOTA4IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgIDBFKzk5OTk5OSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MDkgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OSAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkxMCBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OSAgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyOTExIGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OSAgIDBFKzk5OTk5OSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK2ZtYXgyOTIxICBmbWEgMTMwRS0yICAxMjBFLTIgIDBFKzk5OTk5OSAgLT4gMS41NjAwCitmbWF4MjkyMiAgZm1hIDEzMEUtMiAgMTJFLTEgICAwRSs5OTk5OTkgIC0+IDEuNTYwCitmbWF4MjkyMyAgZm1hIDEzMEUtMiAgMUUwICAgICAwRSs5OTk5OTkgIC0+IDEuMzAKKworLS0gTnVsbCB0ZXN0cworZm1heDI5OTAgZm1hICAjIDEwICAwRSs5OTk5OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI5OTEgZm1hIDEwICAjICAwRSs5OTk5OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBRERJVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCitmbWF4MzAwMSBmbWEgIDEgICAxICAgICAgIDEgICAgICAgLT4gIDIKK2ZtYXgzMDAyIGZtYSAgMSAgIDIgICAgICAgMyAgICAgICAtPiAgNQorZm1heDMwMDMgZm1hICAxICAgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1CitmbWF4MzAwNCBmbWEgIDEgICAnNScgICAgICctMycgICAgLT4gIDIKK2ZtYXgzMDA1IGZtYSAgMSAgICctNScgICAgJy0zJyAgICAtPiAgLTgKK2ZtYXgzMDA2IGZtYSAgMSAgICctNycgICAgJzIuNScgICAtPiAgLTQuNQorZm1heDMwMDcgZm1hICAxICAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKK2ZtYXgzMDA4IGZtYSAgMSAgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MAorZm1heDMwMDkgZm1hICAxICAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCitmbWF4MzAxMCBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKKworZm1heDMwMTEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDEyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDAnICAnMC41NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxMyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDE0IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ5JyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDE1IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ5OScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDE2IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ5OTknICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDE3IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDUwMDAnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDE4IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDUwMDEnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDE5IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDUwMScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDIwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDUxJyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworZm1heDMwMjEgZm1hICAxICAgMCAxIC0+IDEKK2ZtYXgzMDIyIGZtYSAgMSAgIDEgMSAtPiAyCitmbWF4MzAyMyBmbWEgIDEgICAyIDEgLT4gMworZm1heDMwMjQgZm1hICAxICAgMyAxIC0+IDQKK2ZtYXgzMDI1IGZtYSAgMSAgIDQgMSAtPiA1CitmbWF4MzAyNiBmbWEgIDEgICA1IDEgLT4gNgorZm1heDMwMjcgZm1hICAxICAgNiAxIC0+IDcKK2ZtYXgzMDI4IGZtYSAgMSAgIDcgMSAtPiA4CitmbWF4MzAyOSBmbWEgIDEgICA4IDEgLT4gOQorZm1heDMwMzAgZm1hICAxICAgOSAxIC0+IDEwCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworZm1heDMwMzEgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitmbWF4MzAzMiBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2ZtYXgzMDMzIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJworZm1heDMwMzQgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCisKK2ZtYXgzMDM1IGZtYSAgMSAgICc3MCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDM2IGZtYSAgMSAgICc3MDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAzNyBmbWEgIDEgICAnNzAwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDM4IGZtYSAgMSAgICc3MDAwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDFFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDM5IGZtYSAgMSAgICc3MDAwMDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDA3RSsxMycgUm91bmRlZAorCistLSBzeW1tZXRyeToKK2ZtYXgzMDQwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDQxIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzA0MiBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDQ0IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDFFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDQ1IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxLjAwMDAwMDA3RSsxMycgUm91bmRlZAorCistLSBzYW1lLCBoaWdoZXIgcHJlY2lzaW9uCitwcmVjaXNpb246IDE1CitmbWF4MzA0NiBmbWEgIDEgICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JworZm1heDMwNDcgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnCitmbWF4MzA0OCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCitmbWF4MzA0OSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJworZm1heDMwNTAgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnCitmbWF4MzA1MSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCitmbWF4MzA1MiBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJworCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitmbWF4MzA1MyBmbWEgIDEgICAnMTInICc3LjAwJyAtPiAnMTkuMDAnCitmbWF4MzA1NCBmbWEgIDEgICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJworZm1heDMwNTUgZm1hICAxICAgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKK2ZtYXgzMDU2IGZtYSAgMSAgICcxLjMnICctMi4wNycgLT4gJy0wLjc3JworZm1heDMwNTcgZm1hICAxICAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcKKworLS0gemVybyBwcmVzZXJ2YXRpb24KK3ByZWNpc2lvbjogNgorZm1heDMwNjAgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMS4wMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwNjEgZm1hICAxICAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJworZm1heDMwNjIgZm1hICAxICAgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCitmbWF4MzA2MyBmbWEgIDEgICAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMwNjQgZm1hICAxICAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzA2NSBmbWEgIDEgICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2ZtYXgzMDcwIGZtYSAgMSAgIDEgIDAgICAgLT4gMQorZm1heDMwNzEgZm1hICAxICAgMSAwLiAgICAtPiAxCitmbWF4MzA3MiBmbWEgIDEgICAxICAuMCAgIC0+IDEuMAorZm1heDMwNzMgZm1hICAxICAgMSAwLjAgICAtPiAxLjAKK2ZtYXgzMDc0IGZtYSAgMSAgIDEgMC4wMCAgLT4gMS4wMAorZm1heDMwNzUgZm1hICAxICAgIDAgIDEgICAtPiAxCitmbWF4MzA3NiBmbWEgIDEgICAwLiAgMSAgIC0+IDEKK2ZtYXgzMDc3IGZtYSAgMSAgICAuMCAxICAgLT4gMS4wCitmbWF4MzA3OCBmbWEgIDEgICAwLjAgMSAgIC0+IDEuMAorZm1heDMwNzkgZm1hICAxICAgMC4wMCAxICAtPiAxLjAwCisKK3ByZWNpc2lvbjogOQorCistLSBzb21lIGNhcnJpZXMKK2ZtYXgzMDgwIGZtYSAgMSAgIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkKK2ZtYXgzMDgxIGZtYSAgMSAgIDk5OTk5OTk5OSAxICAtPiAxLjAwMDAwMDAwRSs5IFJvdW5kZWQKK2ZtYXgzMDgyIGZtYSAgMSAgICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAKK2ZtYXgzMDgzIGZtYSAgMSAgICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAorZm1heDMwODQgZm1hICAxICAgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDAKK2ZtYXgzMDg1IGZtYSAgMSAgICAgICA5OTk5OSAxICAtPiAxMDAwMDAKK2ZtYXgzMDg2IGZtYSAgMSAgICAgICAgOTk5OSAxICAtPiAxMDAwMAorZm1heDMwODcgZm1hICAxICAgICAgICAgOTk5IDEgIC0+IDEwMDAKK2ZtYXgzMDg4IGZtYSAgMSAgICAgICAgICA5OSAxICAtPiAxMDAKK2ZtYXgzMDg5IGZtYSAgMSAgICAgICAgICAgOSAxICAtPiAxMAorCisKKy0tIG1vcmUgTEhTIHN3YXBzCitmbWF4MzA5MCBmbWEgIDEgICAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2ZtYXgzMDkxIGZtYSAgMSAgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitmbWF4MzA5MiBmbWEgIDEgICAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitmbWF4MzA5MyBmbWEgIDEgICAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2ZtYXgzMDk0IGZtYSAgMSAgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZm1heDMwOTUgZm1hICAxICAgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitmbWF4MzA5NiBmbWEgIDEgICAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2ZtYXgzMDk3IGZtYSAgMSAgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitmbWF4MzA5OCBmbWEgIDEgICAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZm1heDMwOTkgZm1hICAxICAgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworZm1heDMxMDAgZm1hICAxICAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2ZtYXgzMTAxIGZtYSAgMSAgICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2ZtYXgzMTAyIGZtYSAgMSAgICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworZm1heDMxMDMgZm1hICAxICAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitmbWF4MzEwNCBmbWEgIDEgICAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitmbWF4MzEwNSBmbWEgIDEgICAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworZm1heDMxMDYgZm1hICAxICAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitmbWF4MzEwNyBmbWEgIDEgICAnLTVFOCcgICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMCcKK2ZtYXgzMTA4IGZtYSAgMSAgICctNUU5JyAgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrOScgICBSb3VuZGVkCitmbWF4MzEwOSBmbWEgIDEgICAnLTVFMTAnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzEwJyAgUm91bmRlZAorZm1heDMxMTAgZm1hICAxICAgJy01RTExJyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSsxMScgIFJvdW5kZWQKK2ZtYXgzMTExIGZtYSAgMSAgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzCitmbWF4MzExMyBmbWEgIDEgICAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3JworZm1heDMxMTQgZm1hICAxICAgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3JworZm1heDMxMTYgZm1hICAxICAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnCitmbWF4MzExNyBmbWEgIDEgICAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3JworZm1heDMxMTkgZm1hICAxICAgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycKK2ZtYXgzMTIwIGZtYSAgMSAgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnCitmbWF4MzEyMSBmbWEgIDEgICAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43JworZm1heDMxMjIgZm1hICAxICAgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3JworZm1heDMxMjMgZm1hICAxICAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJworZm1heDMxMjQgZm1hICAxICAgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnCitmbWF4MzEyNSBmbWEgIDEgICAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnCitmbWF4MzEyNiBmbWEgIDEgICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScKK2ZtYXgzMTI3IGZtYSAgMSAgIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnCitmbWF4MzEyOCBmbWEgIDEgICAwICAnLTVFLTEnICAgICAgLT4gICctMC41JworZm1heDMxMjkgZm1hICAxICAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnCitmbWF4MzEzMCBmbWEgIDEgICAwICAnLTVFMScgICAgICAgLT4gICctNTAnCitmbWF4MzEzMSBmbWEgIDEgICAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJworZm1heDMxMzIgZm1hICAxICAgMCAgJy01RTgnICAgICAgIC0+ICAnLTUwMDAwMDAwMCcKK2ZtYXgzMTMzIGZtYSAgMSAgIDAgICctNUU5JyAgICAgICAtPiAgJy01LjAwMDAwMDAwRSs5JyAgICBSb3VuZGVkCitmbWF4MzEzNCBmbWEgIDEgICAwICAnLTVFMTAnICAgICAgLT4gICctNS4wMDAwMDAwMEUrMTAnICAgUm91bmRlZAorZm1heDMxMzUgZm1hICAxICAgMCAgJy01RTExJyAgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzExJyAgIFJvdW5kZWQKK2ZtYXgzMTM2IGZtYSAgMSAgIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2ZtYXgzMTM3IGZtYSAgMSAgICAxICAnMEUtMTInICAgICAgLT4gICcxLjAwMDAwMDAwJyAgUm91bmRlZAorZm1heDMxMzggZm1hICAxICAgLTEgICcwRS0xMicgICAgICAtPiAgJy0xLjAwMDAwMDAwJyBSb3VuZGVkCitmbWF4MzEzOSBmbWEgIDEgICAnMEUtMTInIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMCcgIFJvdW5kZWQKK2ZtYXgzMTQwIGZtYSAgMSAgICcwRS0xMicgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMCcgUm91bmRlZAorZm1heDMxNDEgZm1hICAxICAgMUUrNCAgICAwLjAwMDAgICAtPiAgJzEwMDAwLjAwMDAnCitmbWF4MzE0MiBmbWEgIDEgICAxRSs0ICAgIDAuMDAwMDAgIC0+ICAnMTAwMDAuMDAwMCcgIFJvdW5kZWQKK2ZtYXgzMTQzIGZtYSAgMSAgIDAuMDAwICAgMUUrNSAgICAgLT4gICcxMDAwMDAuMDAwJworZm1heDMxNDQgZm1hICAxICAgMC4wMDAwICAxRSs1ICAgICAtPiAgJzEwMDAwMC4wMDAnICBSb3VuZGVkCisKKy0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCitmbWF4MzE0NiBmbWEgIDEgICAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnCitmbWF4MzE0NyBmbWEgIDEgICAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJworZm1heDMxNDggZm1hICAxICAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKK2ZtYXgzMTQ5IGZtYSAgMSAgICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcKK2ZtYXgzMTUwIGZtYSAgMSAgICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCitmbWF4MzE1MSBmbWEgIDEgICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJworZm1heDMxNTIgZm1hICAxICAgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJworZm1heDMxNTMgZm1hICAxICAgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJworZm1heDMxNTQgZm1hICAxICAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJworZm1heDMxNTUgZm1hICAxICAgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcKK2ZtYXgzMTU2IGZtYSAgMSAgICczJyAgICAgJzMnICAgICAtPiAgJzYnCitmbWF4MzE1NyBmbWEgIDEgICAnMycgICAgICcrMycgICAgLT4gICc2JworZm1heDMxNTggZm1hICAxICAgJzMnICAgICAnLTMnICAgIC0+ICAnMCcKK2ZtYXgzMTU5IGZtYSAgMSAgICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKK2ZtYXgzMTYwIGZtYSAgMSAgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitwcmVjaXNpb246IDE1CitmbWF4MzE2MSBmbWEgIDEgICAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScKK2ZtYXgzMTYyIGZtYSAgMSAgICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzMTYzIGZtYSAgMSAgICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzMTY0IGZtYSAgMSAgICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5JworZm1heDMxNjUgZm1hICAxICAgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5JworZm1heDMxNjYgZm1hICAxICAgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZm1heDMxNjcgZm1hICAxICAgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZm1heDMxNjggZm1hICAxICAgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5JworCistLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDUgICAgICAxMjM0NTY3ODkwMTIzNDUgICAgICAxIDIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE3MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTcxIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZm1heDMxNzIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzE3MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTc0IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMxNzUgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzE3NiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTc3IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2ZtYXgzMTc4IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5JworZm1heDMxNzkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTgnCitmbWF4MzE4MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NycKK2ZtYXgzMTgxIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk2JworZm1heDMxODIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTUnCitmbWF4MzE4MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NCcKKworLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcHJlY2lzaW9uOiA5Cityb3VuZGluZzogaGFsZl91cAorZm1heDMyMDAgZm1hICAxICAgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JworZm1heDMyMDEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjAyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwMyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjA1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwNiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDcgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjA4IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTAgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjExIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjE0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTYgZm1hICAxICAgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2NzkwJworZm1heDMyMTcgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjE4IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzIyMCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknCitmbWF4MzIyMSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMjIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjIzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyNCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMjUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjI2IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyNyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMjggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjI5IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzMCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjMyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzMyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjM1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzNiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnCitmbWF4MzIzNyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzggZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjM5IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZm1heDMyNDAgZm1hICAxICAgJzEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjQxIGZtYSAgMSAgICcxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI0MiBmbWEgIDEgICAnMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZm1heDMyNTAgZm1hICAxICAgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JworZm1heDMyNTEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjUyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1MyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjU1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1NiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTcgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjU4IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1OSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjAgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjYxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2MiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjY0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2NSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjYgZm1hICAxICAgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2NzkwJworZm1heDMyNjcgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjY4IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2OSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSBpbnB1dCBwcmVwYXJhdGlvbiB0ZXN0cyAob3BlcmFuZHMgc2hvdWxkIG5vdCBiZSByb3VuZGVkKQorcHJlY2lzaW9uOiAzCityb3VuZGluZzogaGFsZl91cAorCitmbWF4MzI3MCBmbWEgIDEgICAnMTIzNDU2Nzg5MDAwMDAnICA5OTk5OTk5OTk5OTk5IC0+ICAnMi4yM0UrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNzEgZm1hICAxICAgICc5OTk5OTk5OTk5OTk5JyAxMjM0NTY3ODkwMDAwMCAtPiAgJzIuMjNFKzEzJyBJbmV4YWN0IFJvdW5kZWQKKworZm1heDMyNzIgZm1hICAxICAgJzEyRSszJyAgJzM0NDQnICAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjczIGZtYSAgMSAgICcxMkUrMycgICczNDQ2JyAgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI3NCBmbWEgIDEgICAnMTJFKzMnICAnMzQ0OS45JyAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNzUgZm1hICAxICAgJzEyRSszJyAgJzM0NTAuMCcgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjc2IGZtYSAgMSAgICcxMkUrMycgICczNDUwLjEnIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI3NyBmbWEgIDEgICAnMTJFKzMnICAnMzQ1NCcgICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNzggZm1hICAxICAgJzEyRSszJyAgJzM0NTYnICAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKKworZm1heDMyODEgZm1hICAxICAgJzM0NDQnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjgyIGZtYSAgMSAgICczNDQ2JyAgICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI4MyBmbWEgIDEgICAnMzQ0OS45JyAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyODQgZm1hICAxICAgJzM0NTAuMCcgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjg1IGZtYSAgMSAgICczNDUwLjEnICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI4NiBmbWEgIDEgICAnMzQ1NCcgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyODcgZm1hICAxICAgJzM0NTYnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorZm1heDMyOTEgZm1hICAxICAgJzM0NDQnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjkyIGZtYSAgMSAgICczNDQ2JyAgICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI5MyBmbWEgIDEgICAnMzQ0OS45JyAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyOTQgZm1hICAxICAgJzM0NTAuMCcgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjk1IGZtYSAgMSAgICczNDUwLjEnICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI5NiBmbWEgIDEgICAnMzQ1NCcgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyOTcgZm1hICAxICAgJzM0NTYnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKKworLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzCityb3VuZGluZzogaGFsZl91cAorZm1heDMzMDEgZm1hICAxICAgIC0xICAgMSAgICAgIC0+ICAgMAorZm1heDMzMDIgZm1hICAxICAgICAwICAgMSAgICAgIC0+ICAgMQorZm1heDMzMDMgZm1hICAxICAgICAxICAgMSAgICAgIC0+ICAgMgorZm1heDMzMDQgZm1hICAxICAgIDEyICAgMSAgICAgIC0+ICAxMworZm1heDMzMDUgZm1hICAxICAgIDk4ICAgMSAgICAgIC0+ICA5OQorZm1heDMzMDYgZm1hICAxICAgIDk5ICAgMSAgICAgIC0+IDEwMAorZm1heDMzMDcgZm1hICAxICAgMTAwICAgMSAgICAgIC0+IDEwMQorZm1heDMzMDggZm1hICAxICAgMTAxICAgMSAgICAgIC0+IDEwMgorZm1heDMzMDkgZm1hICAxICAgIC0xICAtMSAgICAgIC0+ICAtMgorZm1heDMzMTAgZm1hICAxICAgICAwICAtMSAgICAgIC0+ICAtMQorZm1heDMzMTEgZm1hICAxICAgICAxICAtMSAgICAgIC0+ICAgMAorZm1heDMzMTIgZm1hICAxICAgIDEyICAtMSAgICAgIC0+ICAxMQorZm1heDMzMTMgZm1hICAxICAgIDk4ICAtMSAgICAgIC0+ICA5NworZm1heDMzMTQgZm1hICAxICAgIDk5ICAtMSAgICAgIC0+ICA5OAorZm1heDMzMTUgZm1hICAxICAgMTAwICAtMSAgICAgIC0+ICA5OQorZm1heDMzMTYgZm1hICAxICAgMTAxICAtMSAgICAgIC0+IDEwMAorCitmbWF4MzMyMSBmbWEgIDEgICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMAorZm1heDMzMjIgZm1hICAxICAgIDAuMDAgIDAuMDEgICAgLT4gIDAuMDEKK2ZtYXgzMzIzIGZtYSAgMSAgICAwLjAxICAwLjAxICAgIC0+ICAwLjAyCitmbWF4MzMyNCBmbWEgIDEgICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMworZm1heDMzMjUgZm1hICAxICAgIDAuOTggIDAuMDEgICAgLT4gIDAuOTkKK2ZtYXgzMzI2IGZtYSAgMSAgICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwCitmbWF4MzMyNyBmbWEgIDEgICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQorZm1heDMzMjggZm1hICAxICAgIDEuMDEgIDAuMDEgICAgLT4gIDEuMDIKK2ZtYXgzMzI5IGZtYSAgMSAgIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyCitmbWF4MzMzMCBmbWEgIDEgICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQorZm1heDMzMzEgZm1hICAxICAgIDAuMDEgLTAuMDEgICAgLT4gIDAuMDAKK2ZtYXgzMzMyIGZtYSAgMSAgICAwLjEyIC0wLjAxICAgIC0+ICAwLjExCitmbWF4MzMzMyBmbWEgIDEgICAgMC45OCAtMC4wMSAgICAtPiAgMC45NworZm1heDMzMzQgZm1hICAxICAgIDAuOTkgLTAuMDEgICAgLT4gIDAuOTgKK2ZtYXgzMzM1IGZtYSAgMSAgICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5CitmbWF4MzMzNiBmbWEgIDEgICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMAorCistLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgZm1hICAxICBpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudAorcHJlY2lzaW9uOiA5CitmbWF4MzM0MCBmbWEgIDEgICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCitmbWF4MzM0MSBmbWEgIDEgICAxRSs4ICAgIDAgICAgLT4gICAgMTAwMDAwMDAwCitmbWF4MzM0MiBmbWEgIDEgICAxRSs5ICAgIDAgICAgLT4gICAxLjAwMDAwMDAwRSs5ICAgUm91bmRlZAorZm1heDMzNDMgZm1hICAxICAgMUUrMTAgICAwICAgIC0+ICAgMS4wMDAwMDAwMEUrMTAgIFJvdW5kZWQKKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KK2ZtYXgzMzQ0IGZtYSAgMSAgIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKK2ZtYXgzMzQ1IGZtYSAgMSAgIDFFKzggICAgMSAgICAtPiAgICAxMDAwMDAwMDEKK2ZtYXgzMzQ2IGZtYSAgMSAgIDFFKzkgICAgMSAgICAtPiAgIDEuMDAwMDAwMDBFKzkgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMzQ3IGZtYSAgMSAgIDFFKzEwICAgMSAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMzQ4IGZtYSAgMSAgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2ZtYXgzMzQ5IGZtYSAgMSAgIDFFKzggICAgNyAgICAtPiAgICAxMDAwMDAwMDcKK2ZtYXgzMzUwIGZtYSAgMSAgIDFFKzkgICAgNyAgICAtPiAgIDEuMDAwMDAwMDFFKzkgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMzUxIGZtYSAgMSAgIDFFKzEwICAgNyAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK3ByZWNpc2lvbjogICA3Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDkyCittaW5leHBvbmVudDogLTkyCitmbWF4MzM2MSAgZm1hICAxICAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQorZm1heDMzNjIgIGZtYSAgMSAgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMCAgUm91bmRlZAorZm1heDMzNjMgIGZtYSAgMSAgIDEwMDAwRSsxIDEwMDAwRS01MCAgLT4gMTAwMDAwLjAgIFJvdW5kZWQgSW5leGFjdAorZm1heDMzNjQgIGZtYSAgMSAgIDkuOTk5OTk5RSs5MiAtOS45OTk5OTlFKzkyIC0+IDBFKzg2CisKKy0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK3ByZWNpc2lvbjogICAxMAorZm1heDMzNzAgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMTAwMDgxNTExCitwcmVjaXNpb246ICAgICAgNgorZm1heDMzNzEgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMS4wMDA4MkUrOCBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitwcmVjaXNpb246ICAgMTAKK2ZtYXgzMzcyIGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQorcHJlY2lzaW9uOiAgICAgIDYKK2ZtYXgzMzczIGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEuMDAwODJFKzggUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl9ldmVuCitwcmVjaXNpb246ICAgMTAKK2ZtYXgzMzc0IGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQorcHJlY2lzaW9uOiAgICAgIDYKK2ZtYXgzMzc1IGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEuMDAwODJFKzggUm91bmRlZCBJbmV4YWN0CisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworcHJlY2lzaW9uOiA5CittYXhleHBvbmVudDogOTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OQorZm1heDM0MDAgZm1hICAxICAgICAxICAgNzdlLTcgICAgICAgLT4gIDEuMDAwMDA3NworZm1heDM0MDEgZm1hICAxICAgICAxICAgNzdlLTggICAgICAgLT4gIDEuMDAwMDAwNzcKK2ZtYXgzNDAyIGZtYSAgMSAgICAgMSAgIDc3ZS05ICAgICAgIC0+ICAxLjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM0MDMgZm1hICAxICAgICAxICAgNzdlLTEwICAgICAgLT4gIDEuMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQwNCBmbWEgIDEgICAgIDEgICA3N2UtMTEgICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDA1IGZtYSAgMSAgICAgMSAgIDc3ZS0xMiAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MDYgZm1hICAxICAgICAxICAgNzdlLTk5OSAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQwNyBmbWEgIDEgICAgIDEgICA3N2UtOTk5OTk5ICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0MTAgZm1hICAxICAgIDEwICAgNzdlLTcgICAgICAgLT4gIDEwLjAwMDAwNzcKK2ZtYXgzNDExIGZtYSAgMSAgICAxMCAgIDc3ZS04ICAgICAgIC0+ICAxMC4wMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM0MTIgZm1hICAxICAgIDEwICAgNzdlLTkgICAgICAgLT4gIDEwLjAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQxMyBmbWEgIDEgICAgMTAgICA3N2UtMTAgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDE0IGZtYSAgMSAgICAxMCAgIDc3ZS0xMSAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MTUgZm1hICAxICAgIDEwICAgNzdlLTEyICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQxNiBmbWEgIDEgICAgMTAgICA3N2UtOTk5ICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDE3IGZtYSAgMSAgICAxMCAgIDc3ZS05OTk5OTkgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzQyMCBmbWEgIDEgICAgNzdlLTcgICAgICAgIDEgICAtPiAgMS4wMDAwMDc3CitmbWF4MzQyMSBmbWEgIDEgICAgNzdlLTggICAgICAgIDEgICAtPiAgMS4wMDAwMDA3NworZm1heDM0MjIgZm1hICAxICAgIDc3ZS05ICAgICAgICAxICAgLT4gIDEuMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzQyMyBmbWEgIDEgICAgNzdlLTEwICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDI0IGZtYSAgMSAgICA3N2UtMTEgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MjUgZm1hICAxICAgIDc3ZS0xMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQyNiBmbWEgIDEgICAgNzdlLTk5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDI3IGZtYSAgMSAgICA3N2UtOTk5OTk5ICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzQzMCBmbWEgIDEgICAgNzdlLTcgICAgICAgMTAgICAtPiAgMTAuMDAwMDA3NworZm1heDM0MzEgZm1hICAxICAgIDc3ZS04ICAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzQzMiBmbWEgIDEgICAgNzdlLTkgICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDMzIGZtYSAgMSAgICA3N2UtMTAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MzQgZm1hICAxICAgIDc3ZS0xMSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQzNSBmbWEgIDEgICAgNzdlLTEyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDM2IGZtYSAgMSAgICA3N2UtOTk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MzcgZm1hICAxICAgIDc3ZS05OTk5OTkgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2ZtYXgzNDQwIGZtYSAgMSAgICAgMSAgIC03N2UtNyAgICAgICAtPiAgMC45OTk5OTIzCitmbWF4MzQ0MSBmbWEgIDEgICAgIDEgICAtNzdlLTggICAgICAgLT4gIDAuOTk5OTk5MjMKK2ZtYXgzNDQyIGZtYSAgMSAgICAgMSAgIC03N2UtOSAgICAgICAtPiAgMC45OTk5OTk5MjMKK2ZtYXgzNDQzIGZtYSAgMSAgICAgMSAgIC03N2UtMTAgICAgICAtPiAgMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ0NCBmbWEgIDEgICAgIDEgICAtNzdlLTExICAgICAgLT4gIDAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM0NDUgZm1hICAxICAgICAxICAgLTc3ZS0xMiAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0NDYgZm1hICAxICAgICAxICAgLTc3ZS05OTkgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0NDcgZm1hICAxICAgICAxICAgLTc3ZS05OTk5OTkgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzQ1MCBmbWEgIDEgICAgMTAgICAtNzdlLTcgICAgICAgLT4gICA5Ljk5OTk5MjMKK2ZtYXgzNDUxIGZtYSAgMSAgICAxMCAgIC03N2UtOCAgICAgICAtPiAgIDkuOTk5OTk5MjMKK2ZtYXgzNDUyIGZtYSAgMSAgICAxMCAgIC03N2UtOSAgICAgICAtPiAgIDkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ1MyBmbWEgIDEgICAgMTAgICAtNzdlLTEwICAgICAgLT4gICA5Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM0NTQgZm1hICAxICAgIDEwICAgLTc3ZS0xMSAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0NTUgZm1hICAxICAgIDEwICAgLTc3ZS0xMiAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0NTYgZm1hICAxICAgIDEwICAgLTc3ZS05OTkgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0NTcgZm1hICAxICAgIDEwICAgLTc3ZS05OTk5OTkgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzQ2MCBmbWEgIDEgICAgLTc3ZS03ICAgICAgICAxICAgLT4gIDAuOTk5OTkyMworZm1heDM0NjEgZm1hICAxICAgIC03N2UtOCAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTIzCitmbWF4MzQ2MiBmbWEgIDEgICAgLTc3ZS05ICAgICAgICAxICAgLT4gIDAuOTk5OTk5OTIzCitmbWF4MzQ2MyBmbWEgIDEgICAgLTc3ZS0xMCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM0NjQgZm1hICAxICAgIC03N2UtMTEgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDY1IGZtYSAgMSAgICAtNzdlLTEyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDY2IGZtYSAgMSAgICAtNzdlLTk5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDY3IGZtYSAgMSAgICAtNzdlLTk5OTk5OSAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0NzAgZm1hICAxICAgIC03N2UtNyAgICAgICAxMCAgIC0+ICAgOS45OTk5OTIzCitmbWF4MzQ3MSBmbWEgIDEgICAgLTc3ZS04ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTIzCitmbWF4MzQ3MiBmbWEgIDEgICAgLTc3ZS05ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM0NzMgZm1hICAxICAgIC03N2UtMTAgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDc0IGZtYSAgMSAgICAtNzdlLTExICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDc1IGZtYSAgMSAgICAtNzdlLTEyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDc2IGZtYSAgMSAgICAtNzdlLTk5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDc3IGZtYSAgMSAgICAtNzdlLTk5OTk5OSAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZm1heDM0ODAgZm1hICAxICAgIC0xICAgIDc3ZS03ICAgICAgIC0+ICAtMC45OTk5OTIzCitmbWF4MzQ4MSBmbWEgIDEgICAgLTEgICAgNzdlLTggICAgICAgLT4gIC0wLjk5OTk5OTIzCitmbWF4MzQ4MiBmbWEgIDEgICAgLTEgICAgNzdlLTkgICAgICAgLT4gIC0wLjk5OTk5OTkyMworZm1heDM0ODMgZm1hICAxICAgIC0xICAgIDc3ZS0xMCAgICAgIC0+ICAtMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ4NCBmbWEgIDEgICAgLTEgICAgNzdlLTExICAgICAgLT4gIC0wLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDg1IGZtYSAgMSAgICAtMSAgICA3N2UtMTIgICAgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ4NiBmbWEgIDEgICAgLTEgICAgNzdlLTk5OSAgICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0ODcgZm1hICAxICAgIC0xICAgIDc3ZS05OTk5OTkgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0OTAgZm1hICAxICAgLTEwICAgIDc3ZS03ICAgICAgIC0+ICAgLTkuOTk5OTkyMworZm1heDM0OTEgZm1hICAxICAgLTEwICAgIDc3ZS04ICAgICAgIC0+ICAgLTkuOTk5OTk5MjMKK2ZtYXgzNDkyIGZtYSAgMSAgIC0xMCAgICA3N2UtOSAgICAgICAtPiAgIC05Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM0OTMgZm1hICAxICAgLTEwICAgIDc3ZS0xMCAgICAgIC0+ICAgLTkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ5NCBmbWEgIDEgICAtMTAgICAgNzdlLTExICAgICAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0OTUgZm1hICAxICAgLTEwICAgIDc3ZS0xMiAgICAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDk2IGZtYSAgMSAgIC0xMCAgICA3N2UtOTk5ICAgICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ5NyBmbWEgIDEgICAtMTAgICAgNzdlLTk5OTk5OSAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzUwMCBmbWEgIDEgICAgIDc3ZS03ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5MjMKK2ZtYXgzNTAxIGZtYSAgMSAgICAgNzdlLTggICAgICAgLTEgICAtPiAgLTAuOTk5OTk5MjMKK2ZtYXgzNTAyIGZtYSAgMSAgICAgNzdlLTkgICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTIzCitmbWF4MzUwMyBmbWEgIDEgICAgIDc3ZS0xMCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTA0IGZtYSAgMSAgICAgNzdlLTExICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM1MDUgZm1hICAxICAgICA3N2UtMTIgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTA2IGZtYSAgMSAgICAgNzdlLTk5OSAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUwNyBmbWEgIDEgICAgIDc3ZS05OTk5OTkgIC0xICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzUxMCBmbWEgIDEgICAgIDc3ZS03ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTIzCitmbWF4MzUxMSBmbWEgIDEgICAgIDc3ZS04ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTkyMworZm1heDM1MTIgZm1hICAxICAgICA3N2UtOSAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUxMyBmbWEgIDEgICAgIDc3ZS0xMCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTE0IGZtYSAgMSAgICAgNzdlLTExICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUxNSBmbWEgIDEgICAgIDc3ZS0xMiAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM1MTYgZm1hICAxICAgICA3N2UtOTk5ICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTE3IGZtYSAgMSAgICAgNzdlLTk5OTk5OSAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKworLS0gbG9uZyBvcGVyYW5kcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorZm1heDM1MjEgZm1hICAxICAgMTIzNDU2NzgwMDAgMCAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitmbWF4MzUyMiBmbWEgIDEgICAwIDEyMzQ1Njc4MDAwIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQKK2ZtYXgzNTIzIGZtYSAgMSAgIDEyMzQ1Njc4MDAgIDAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitmbWF4MzUyNCBmbWEgIDEgICAwIDEyMzQ1Njc4MDAgIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZm1heDM1MjUgZm1hICAxICAgMTIzNDU2Nzg5MCAgMCAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2ZtYXgzNTI2IGZtYSAgMSAgIDAgMTIzNDU2Nzg5MCAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitmbWF4MzUyNyBmbWEgIDEgICAxMjM0NTY3ODkxICAwIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUyOCBmbWEgIDEgICAwIDEyMzQ1Njc4OTEgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUyOSBmbWEgIDEgICAxMjM0NTY3ODkwMSAwIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorZm1heDM1MzAgZm1hICAxICAgMCAxMjM0NTY3ODkwMSAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTMxIGZtYSAgMSAgIDEyMzQ1Njc4OTYgIDAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTMyIGZtYSAgMSAgIDAgMTIzNDU2Nzg5NiAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAxNQorLS0gc3RpbGwgY2hlY2tpbmcKK2ZtYXgzNTQxIGZtYSAgMSAgIDEyMzQ1Njc4MDAwIDAgLT4gMTIzNDU2NzgwMDAKK2ZtYXgzNTQyIGZtYSAgMSAgIDAgMTIzNDU2NzgwMDAgLT4gMTIzNDU2NzgwMDAKK2ZtYXgzNTQzIGZtYSAgMSAgIDEyMzQ1Njc4MDAgIDAgLT4gMTIzNDU2NzgwMAorZm1heDM1NDQgZm1hICAxICAgMCAxMjM0NTY3ODAwICAtPiAxMjM0NTY3ODAwCitmbWF4MzU0NSBmbWEgIDEgICAxMjM0NTY3ODkwICAwIC0+IDEyMzQ1Njc4OTAKK2ZtYXgzNTQ2IGZtYSAgMSAgIDAgMTIzNDU2Nzg5MCAgLT4gMTIzNDU2Nzg5MAorZm1heDM1NDcgZm1hICAxICAgMTIzNDU2Nzg5MSAgMCAtPiAxMjM0NTY3ODkxCitmbWF4MzU0OCBmbWEgIDEgICAwIDEyMzQ1Njc4OTEgIC0+IDEyMzQ1Njc4OTEKK2ZtYXgzNTQ5IGZtYSAgMSAgIDEyMzQ1Njc4OTAxIDAgLT4gMTIzNDU2Nzg5MDEKK2ZtYXgzNTUwIGZtYSAgMSAgIDAgMTIzNDU2Nzg5MDEgLT4gMTIzNDU2Nzg5MDEKK2ZtYXgzNTUxIGZtYSAgMSAgIDEyMzQ1Njc4OTYgIDAgLT4gMTIzNDU2Nzg5NgorZm1heDM1NTIgZm1hICAxICAgMCAxMjM0NTY3ODk2ICAtPiAxMjM0NTY3ODk2CisKKy0tIHZlcmlmeSBhIHF1ZXJ5CitwcmVjaXNpb246ICAgIDE2CittYXhFeHBvbmVudDogKzM5NAorbWluRXhwb25lbnQ6IC0zOTMKK3JvdW5kaW5nOiAgICAgZG93bgorZm1heDM1NjEgZm1hICAxICAgMWUtMzk4IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTYyIGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZAorLS0gYW5kIHVzaW5nIGRlY2ltYWw2NCBib3VuZHMuLi4KK3ByZWNpc2lvbjogICAgMTYKK21heEV4cG9uZW50OiArMzg0CittaW5FeHBvbmVudDogLTM4Mworcm91bmRpbmc6ICAgICBkb3duCitmbWF4MzU2MyBmbWEgIDEgICAxZS0zODggOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IEluZXhhY3QgUm91bmRlZAorZm1heDM1NjQgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkCisKKworLS0gc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyB3aXRoIGV4dHJlbWUgcm91bmRpbmcKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogaGFsZl91cAorZm1heDM2MDEgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzYwMiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2ZtYXgzNjAzIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCitmbWF4MzYwNCBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCitmbWF4MzYwNSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorZm1heDM2MDYgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorZm1heDM2MDcgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzYxMSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjEyIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorZm1heDM2MTMgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2ZtYXgzNjE0IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2ZtYXgzNjE1IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCitmbWF4MzYxNiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCitmbWF4MzYxNyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzNjIxIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2MjIgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCitmbWF4MzYyMyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorZm1heDM2MjQgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworZm1heDM2MjUgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2ZtYXgzNjI2IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2ZtYXgzNjI3IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZm1heDM2MzEgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzYzMiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2ZtYXgzNjMzIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCitmbWF4MzYzNCBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCitmbWF4MzYzNSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorZm1heDM2MzYgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorZm1heDM2MzcgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzY0MSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjQyIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorZm1heDM2NDMgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2ZtYXgzNjQ0IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2ZtYXgzNjQ1IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCitmbWF4MzY0NiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCitmbWF4MzY0NyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzNjUxIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2NTIgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCitmbWF4MzY1MyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorZm1heDM2NTQgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworZm1heDM2NTUgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2ZtYXgzNjU2IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2ZtYXgzNjU3IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorCistLSBsb25nIG9wZXJhbmQgdHJpYW5nbGUKK3JvdW5kaW5nOiBoYWxmX3VwCitwcmVjaXNpb246ICAzNworZm1heDM2NjAgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODM0NTM4CitwcmVjaXNpb246ICAzNgorZm1heDM2NjEgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODM0NTQgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzUKK2ZtYXgzNjYyIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNDUgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDM0CitmbWF4MzY2MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzUgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzMworZm1heDM2NjQgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODMgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzIKK2ZtYXgzNjY1IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDggICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMxCitmbWF4MzY2NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTUgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzMAorZm1heDM2NjcgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTEgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjkKK2ZtYXgzNjY4IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzEgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI4CitmbWF4MzY2OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyNworZm1heDM2NzAgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzQgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjYKK2ZtYXgzNjcxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI1CitmbWF4MzY3MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyNAorZm1heDM2NzMgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjMKK2ZtYXgzNjc0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIyCitmbWF4MzY3NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2MzkgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyMQorZm1heDM2NzYgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjQgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjAKK2ZtYXgzNjc3IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE5CitmbWF4MzY3OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjQgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxOAorZm1heDM2NzkgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTcKK2ZtYXgzNjgwIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE2CitmbWF4MzY4MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxNQorZm1heDM2ODIgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjEgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTQKK2ZtYXgzNjgzIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDEzCitmbWF4MzY4NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxMgorZm1heDM2ODUgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTEKK2ZtYXgzNjg2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2NiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDEwCitmbWF4MzY4NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0MTdFKzEwICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgOQorZm1heDM2ODggZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTE3NDJFKzEwICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDgKK2ZtYXgzNjg5IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExNzRFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA3CitmbWF4MzY5MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTdFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA2CitmbWF4MzY5MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMkUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDUKK2ZtYXgzNjkyIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzFFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA0CitmbWF4MzY5MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDdFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAzCitmbWF4MzY5NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NUUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDIKK2ZtYXgzNjk1IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5LjhFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxCitmbWF4MzY5NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gMUUrMTEgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBtb3JlIHplcm9zLCBldGMuCityb3VuZGluZzogaGFsZl91cAorcHJlY2lzaW9uOiAgIDkKKworZm1heDM3MDEgZm1hICAxICAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDAKK2ZtYXgzNzAyIGZtYSAgMSAgIDAwLjAwIDAuMDAwICAtPiAwLjAwMAorZm1heDM3MDMgZm1hICAxICAgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCitmbWF4MzcwNCBmbWEgIDEgICAwRS0zICAwMC4wMCAgLT4gMC4wMDAKKworZm1heDM3MTAgZm1hICAxICAgMEUrMyAgMDAuMDAgIC0+IDAuMDAKK2ZtYXgzNzExIGZtYSAgMSAgIDBFKzMgIDAwLjAgICAtPiAwLjAKK2ZtYXgzNzEyIGZtYSAgMSAgIDBFKzMgIDAwLiAgICAtPiAwCitmbWF4MzcxMyBmbWEgIDEgICAwRSszICAwMC5FKzEgLT4gMEUrMQorZm1heDM3MTQgZm1hICAxICAgMEUrMyAgMDAuRSsyIC0+IDBFKzIKK2ZtYXgzNzE1IGZtYSAgMSAgIDBFKzMgIDAwLkUrMyAtPiAwRSszCitmbWF4MzcxNiBmbWEgIDEgICAwRSszICAwMC5FKzQgLT4gMEUrMworZm1heDM3MTcgZm1hICAxICAgMEUrMyAgMDAuRSs1IC0+IDBFKzMKK2ZtYXgzNzE4IGZtYSAgMSAgIDBFKzMgIC0wMC4wICAgLT4gMC4wCitmbWF4MzcxOSBmbWEgIDEgICAwRSszICAtMDAuICAgIC0+IDAKK2ZtYXgzNzMxIGZtYSAgMSAgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQorCitmbWF4MzcyMCBmbWEgIDEgICAwMC4wMCAgMEUrMyAgLT4gMC4wMAorZm1heDM3MjEgZm1hICAxICAgMDAuMCAgIDBFKzMgIC0+IDAuMAorZm1heDM3MjIgZm1hICAxICAgMDAuICAgIDBFKzMgIC0+IDAKK2ZtYXgzNzIzIGZtYSAgMSAgIDAwLkUrMSAwRSszICAtPiAwRSsxCitmbWF4MzcyNCBmbWEgIDEgICAwMC5FKzIgMEUrMyAgLT4gMEUrMgorZm1heDM3MjUgZm1hICAxICAgMDAuRSszIDBFKzMgIC0+IDBFKzMKK2ZtYXgzNzI2IGZtYSAgMSAgIDAwLkUrNCAwRSszICAtPiAwRSszCitmbWF4MzcyNyBmbWEgIDEgICAwMC5FKzUgMEUrMyAgLT4gMEUrMworZm1heDM3MjggZm1hICAxICAgLTAwLjAwIDBFKzMgIC0+IDAuMDAKK2ZtYXgzNzI5IGZtYSAgMSAgIC0wMC4wICAwRSszICAtPiAwLjAKK2ZtYXgzNzMwIGZtYSAgMSAgIC0wMC4gICAwRSszICAtPiAwCisKK2ZtYXgzNzMyIGZtYSAgMSAgICAwICAgICAwICAgICAtPiAgMAorZm1heDM3MzMgZm1hICAxICAgIDAgICAgLTAgICAgIC0+ICAwCitmbWF4MzczNCBmbWEgIDEgICAtMCAgICAgMCAgICAgLT4gIDAKK2ZtYXgzNzM1IGZtYSAgMSAgIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCisKK2ZtYXgzNzM2IGZtYSAgMSAgICAxICAgIC0xICAgICAtPiAgMAorZm1heDM3MzcgZm1hICAxICAgLTEgICAgLTEgICAgIC0+IC0yCitmbWF4MzczOCBmbWEgIDEgICAgMSAgICAgMSAgICAgLT4gIDIKK2ZtYXgzNzM5IGZtYSAgMSAgIC0xICAgICAxICAgICAtPiAgMAorCitmbWF4Mzc0MSBmbWEgIDEgICAgMCAgICAtMSAgICAgLT4gLTEKK2ZtYXgzNzQyIGZtYSAgMSAgIC0wICAgIC0xICAgICAtPiAtMQorZm1heDM3NDMgZm1hICAxICAgIDAgICAgIDEgICAgIC0+ICAxCitmbWF4Mzc0NCBmbWEgIDEgICAtMCAgICAgMSAgICAgLT4gIDEKK2ZtYXgzNzQ1IGZtYSAgMSAgIC0xICAgICAwICAgICAtPiAtMQorZm1heDM3NDYgZm1hICAxICAgLTEgICAgLTAgICAgIC0+IC0xCitmbWF4Mzc0NyBmbWEgIDEgICAgMSAgICAgMCAgICAgLT4gIDEKK2ZtYXgzNzQ4IGZtYSAgMSAgICAxICAgIC0wICAgICAtPiAgMQorCitmbWF4Mzc1MSBmbWEgIDEgICAgMC4wICAtMSAgICAgLT4gLTEuMAorZm1heDM3NTIgZm1hICAxICAgLTAuMCAgLTEgICAgIC0+IC0xLjAKK2ZtYXgzNzUzIGZtYSAgMSAgICAwLjAgICAxICAgICAtPiAgMS4wCitmbWF4Mzc1NCBmbWEgIDEgICAtMC4wICAgMSAgICAgLT4gIDEuMAorZm1heDM3NTUgZm1hICAxICAgLTEuMCAgIDAgICAgIC0+IC0xLjAKK2ZtYXgzNzU2IGZtYSAgMSAgIC0xLjAgIC0wICAgICAtPiAtMS4wCitmbWF4Mzc1NyBmbWEgIDEgICAgMS4wICAgMCAgICAgLT4gIDEuMAorZm1heDM3NTggZm1hICAxICAgIDEuMCAgLTAgICAgIC0+ICAxLjAKKworZm1heDM3NjEgZm1hICAxICAgIDAgICAgLTEuMCAgIC0+IC0xLjAKK2ZtYXgzNzYyIGZtYSAgMSAgIC0wICAgIC0xLjAgICAtPiAtMS4wCitmbWF4Mzc2MyBmbWEgIDEgICAgMCAgICAgMS4wICAgLT4gIDEuMAorZm1heDM3NjQgZm1hICAxICAgLTAgICAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNzY1IGZtYSAgMSAgIC0xICAgICAwLjAgICAtPiAtMS4wCitmbWF4Mzc2NiBmbWEgIDEgICAtMSAgICAtMC4wICAgLT4gLTEuMAorZm1heDM3NjcgZm1hICAxICAgIDEgICAgIDAuMCAgIC0+ICAxLjAKK2ZtYXgzNzY4IGZtYSAgMSAgICAxICAgIC0wLjAgICAtPiAgMS4wCisKK2ZtYXgzNzcxIGZtYSAgMSAgICAwLjAgIC0xLjAgICAtPiAtMS4wCitmbWF4Mzc3MiBmbWEgIDEgICAtMC4wICAtMS4wICAgLT4gLTEuMAorZm1heDM3NzMgZm1hICAxICAgIDAuMCAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNzc0IGZtYSAgMSAgIC0wLjAgICAxLjAgICAtPiAgMS4wCitmbWF4Mzc3NSBmbWEgIDEgICAtMS4wICAgMC4wICAgLT4gLTEuMAorZm1heDM3NzYgZm1hICAxICAgLTEuMCAgLTAuMCAgIC0+IC0xLjAKK2ZtYXgzNzc3IGZtYSAgMSAgICAxLjAgICAwLjAgICAtPiAgMS4wCitmbWF4Mzc3OCBmbWEgIDEgICAgMS4wICAtMC4wICAgLT4gIDEuMAorCistLSBTcGVjaWFscworZm1heDM3ODAgZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM3ODEgZm1hICAxICAgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZm1heDM3ODIgZm1hICAxICAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZm1heDM3ODMgZm1hICAxICAgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZm1heDM3ODQgZm1hICAxICAgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZm1heDM3ODUgZm1hICAxICAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZm1heDM3ODYgZm1hICAxICAgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZm1heDM3ODcgZm1hICAxICAgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM3ODggZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM3ODkgZm1hICAxICAgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM3OTAgZm1hICAxICAgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM3OTEgZm1hICAxICAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM3OTIgZm1hICAxICAgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM3OTMgZm1hICAxICAgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM3OTQgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2ZtYXgzODAwIGZtYSAgMSAgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4MDEgZm1hICAxICAgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZm1heDM4MDIgZm1hICAxICAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZm1heDM4MDMgZm1hICAxICAgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZm1heDM4MDQgZm1hICAxICAgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZm1heDM4MDUgZm1hICAxICAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZm1heDM4MDYgZm1hICAxICAgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZm1heDM4MDcgZm1hICAxICAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MDggZm1hICAxICAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MDkgZm1hICAxICAgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzgxMCBmbWEgIDEgICAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzgxMSBmbWEgIDEgICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzgxMiBmbWEgIDEgICAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzgxMyBmbWEgIDEgICAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzgxNCBmbWEgIDEgICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzgxNSBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2ZtYXgzODIxIGZtYSAgMSAgICBOYU4gLUluZiAgICAtPiAgTmFOCitmbWF4MzgyMiBmbWEgIDEgICAgTmFOIC0xMDAwICAgLT4gIE5hTgorZm1heDM4MjMgZm1hICAxICAgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2ZtYXgzODI0IGZtYSAgMSAgICBOYU4gLTAgICAgICAtPiAgTmFOCitmbWF4MzgyNSBmbWEgIDEgICAgTmFOICAwICAgICAgLT4gIE5hTgorZm1heDM4MjYgZm1hICAxICAgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2ZtYXgzODI3IGZtYSAgMSAgICBOYU4gIDEwMDAgICAtPiAgTmFOCitmbWF4MzgyOCBmbWEgIDEgICAgTmFOICBJbmYgICAgLT4gIE5hTgorZm1heDM4MjkgZm1hICAxICAgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzODMwIGZtYSAgMSAgIC1JbmYgIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzMSBmbWEgIDEgICAtMTAwMCBOYU4gICAgLT4gIE5hTgorZm1heDM4MzIgZm1hICAxICAgLTEgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzODMzIGZtYSAgMSAgIC0wICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzNCBmbWEgIDEgICAgMCAgICBOYU4gICAgLT4gIE5hTgorZm1heDM4MzUgZm1hICAxICAgIDEgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzODM2IGZtYSAgMSAgICAxMDAwIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzNyBmbWEgIDEgICAgSW5mICBOYU4gICAgLT4gIE5hTgorCitmbWF4Mzg0MSBmbWEgIDEgICAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQyIGZtYSAgMSAgICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NDMgZm1hICAxICAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0NCBmbWEgIDEgICAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQ1IGZtYSAgMSAgICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NDYgZm1hICAxICAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0NyBmbWEgIDEgICAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQ4IGZtYSAgMSAgICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NDkgZm1hICAxICAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1MCBmbWEgIDEgICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODUxIGZtYSAgMSAgIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTIgZm1hICAxICAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1MyBmbWEgIDEgICAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODU0IGZtYSAgMSAgIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTUgZm1hICAxICAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1NiBmbWEgIDEgICAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODU3IGZtYSAgMSAgICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTggZm1hICAxICAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1OSBmbWEgIDEgICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZm1heDM4NjEgZm1hICAxICAgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitmbWF4Mzg2MiBmbWEgIDEgICArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2ZtYXgzODYzIGZtYSAgMSAgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZm1heDM4NjQgZm1hICAxICAgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitmbWF4Mzg2NSBmbWEgIDEgICAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2ZtYXgzODY2IGZtYSAgMSAgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZm1heDM4NjcgZm1hICAxICAgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitmbWF4Mzg2OCBmbWEgIDEgICAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2ZtYXgzODY5IGZtYSAgMSAgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2ZtYXgzODcxIGZtYSAgMSAgICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg3MiBmbWEgIDEgICAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzMgZm1hICAxICAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODc0IGZtYSAgMSAgICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg3NSBmbWEgIDEgICAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzYgZm1hICAxICAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODc3IGZtYSAgMSAgIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg3OCBmbWEgIDEgICAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzkgZm1hICAxICAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODgwIGZtYSAgMSAgICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg4MSBmbWEgIDEgICArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4ODIgZm1hICAxICAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZm1heDM4ODMgZm1hICAxICAgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODg0IGZtYSAgMSAgICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2ZtYXgzODg1IGZtYSAgMSAgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93LCB1bmRlcmZsb3cgYW5kIHN1Ym5vcm1hbCB0ZXN0cworbWF4ZXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK3ByZWNpc2lvbjogOQorZm1heDM4OTAgZm1hICAxICAgMUUrOTk5OTk5ICAgICA5RSs5OTk5OTkgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzODkxIGZtYSAgMSAgIDlFKzk5OTk5OSAgICAgMUUrOTk5OTk5ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mzg5MiBmbWEgIDEgICAtMS4xRS05OTk5OTkgIDFFLTk5OTk5OSAgIC0+IC0xRS0xMDAwMDAwICAgIFN1Ym5vcm1hbAorZm1heDM4OTMgZm1hICAxICAgMUUtOTk5OTk5ICAgIC0xLjFlLTk5OTk5OSAtPiAtMUUtMTAwMDAwMCAgICBTdWJub3JtYWwKK2ZtYXgzODk0IGZtYSAgMSAgIC0xLjAwMDFFLTk5OTk5OSAgMUUtOTk5OTk5ICAgLT4gLTFFLTEwMDAwMDMgU3Vibm9ybWFsCitmbWF4Mzg5NSBmbWEgIDEgICAxRS05OTk5OTkgICAgLTEuMDAwMWUtOTk5OTk5IC0+IC0xRS0xMDAwMDAzIFN1Ym5vcm1hbAorZm1heDM4OTYgZm1hICAxICAgLTFFKzk5OTk5OSAgIC05RSs5OTk5OTkgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mzg5NyBmbWEgIDEgICAtOUUrOTk5OTk5ICAgLTFFKzk5OTk5OSAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzODk4IGZtYSAgMSAgICsxLjFFLTk5OTk5OSAtMUUtOTk5OTk5ICAgLT4gMUUtMTAwMDAwMCAgIFN1Ym5vcm1hbAorZm1heDM4OTkgZm1hICAxICAgLTFFLTk5OTk5OSAgICsxLjFlLTk5OTk5OSAtPiAxRS0xMDAwMDAwICAgIFN1Ym5vcm1hbAorZm1heDM5MDAgZm1hICAxICAgKzEuMDAwMUUtOTk5OTk5IC0xRS05OTk5OTkgICAtPiAxRS0xMDAwMDAzIFN1Ym5vcm1hbAorZm1heDM5MDEgZm1hICAxICAgLTFFLTk5OTk5OSAgICsxLjAwMDFlLTk5OTk5OSAtPiAxRS0xMDAwMDAzIFN1Ym5vcm1hbAorZm1heDM5MDIgZm1hICAxICAgLTFFKzk5OTk5OSAgICs5RSs5OTk5OTkgICAtPiAgOEUrOTk5OTk5CitmbWF4MzkwMyBmbWEgIDEgICAtOUUrOTk5OTk5ICAgKzFFKzk5OTk5OSAgIC0+IC04RSs5OTk5OTkKKworcHJlY2lzaW9uOiAzCitmbWF4MzkwNCBmbWEgIDEgICAgICAgIDAgLTkuOTk5RSs5OTk5OTkgICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4MzkwNSBmbWEgIDEgICAgICAgICAgLTkuOTk5RSs5OTk5OTkgMCAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4MzkwNiBmbWEgIDEgICAgICAgIDAgIDkuOTk5RSs5OTk5OTkgICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4MzkwNyBmbWEgIDEgICAgICAgICAgIDkuOTk5RSs5OTk5OTkgMCAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK2ZtYXgzOTEwIGZtYSAgMSAgICAxLjAwRS05OTkgICAwICAgIC0+ICAgMS4wMEUtOTk5CitmbWF4MzkxMSBmbWEgIDEgICAgMC4xRS05OTkgICAgMCAgICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwKK2ZtYXgzOTEyIGZtYSAgMSAgICAwLjEwRS05OTkgICAwICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAorZm1heDM5MTMgZm1hICAxICAgIDAuMTAwRS05OTkgIDAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzOTE0IGZtYSAgMSAgICAwLjAxRS05OTkgICAwICAgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIE5taW4KK2ZtYXgzOTE1IGZtYSAgMSAgICAwLjk5OUUtOTk5ICAwICAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzkxNiBmbWEgIDEgICAgMC4wOTlFLTk5OSAgMCAgICAtPiAgIDEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5MTcgZm1hICAxICAgIDAuMDA5RS05OTkgIDAgICAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTE4IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAwICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzOTE5IGZtYSAgMSAgICAwLjAwMDlFLTk5OSAwICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzOTIwIGZtYSAgMSAgICAwLjAwMDFFLTk5OSAwICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworZm1heDM5MzAgZm1hICAxICAgLTEuMDBFLTk5OSAgIDAgICAgLT4gIC0xLjAwRS05OTkKK2ZtYXgzOTMxIGZtYSAgMSAgIC0wLjFFLTk5OSAgICAwICAgIC0+ICAtMUUtMTAwMCAgIFN1Ym5vcm1hbAorZm1heDM5MzIgZm1hICAxICAgLTAuMTBFLTk5OSAgIDAgICAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsCitmbWF4MzkzMyBmbWEgIDEgICAtMC4xMDBFLTk5OSAgMCAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorZm1heDM5MzQgZm1hICAxICAgLTAuMDFFLTk5OSAgIDAgICAgLT4gIC0xRS0xMDAxICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbgorZm1heDM5MzUgZm1hICAxICAgLTAuOTk5RS05OTkgIDAgICAgLT4gIC0xLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTM2IGZtYSAgMSAgIC0wLjA5OUUtOTk5ICAwICAgIC0+ICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzkzNyBmbWEgIDEgICAtMC4wMDlFLTk5OSAgMCAgICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5MzggZm1hICAxICAgLTAuMDAxRS05OTkgIDAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM5MzkgZm1hICAxICAgLTAuMDAwOUUtOTk5IDAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM5NDAgZm1hICAxICAgLTAuMDAwMUUtOTk5IDAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBzb21lIG5vbi16ZXJvIHN1Ym5vcm1hbCBmbWEgIDEgIHMKK2ZtYXgzOTUwIGZtYSAgMSAgICAxLjAwRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMS4xMEUtOTk5CitmbWF4Mzk1MSBmbWEgIDEgICAgMC4xRS05OTkgICAgIDAuMUUtOTk5ICAtPiAgIDJFLTEwMDAgICAgU3Vibm9ybWFsCitmbWF4Mzk1MiBmbWEgIDEgICAgMC4xMEUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDIuMEUtMTAwMCAgU3Vibm9ybWFsCitmbWF4Mzk1MyBmbWEgIDEgICAgMC4xMDBFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDIuMEUtMTAwMCAgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzOTU0IGZtYSAgMSAgICAwLjAxRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMS4xRS0xMDAwICBTdWJub3JtYWwKK2ZtYXgzOTU1IGZtYSAgMSAgICAwLjk5OUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4xMEUtOTk5ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzOTU2IGZtYSAgMSAgICAwLjA5OUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NTcgZm1hICAxICAgIDAuMDA5RS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjFFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mzk1OCBmbWEgIDEgICAgMC4wMDFFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDEuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTU5IGZtYSAgMSAgICAwLjAwMDlFLTk5OSAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NjAgZm1hICAxICAgIDAuMDAwMUUtOTk5ICAwLjFFLTk5OSAgLT4gICAxLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CistLSBuZWdhdGl2ZXMuLi4KK2ZtYXgzOTYxIGZtYSAgMSAgICAxLjAwRS05OTkgICAtMC4xRS05OTkgIC0+ICAgOS4wRS0xMDAwICBTdWJub3JtYWwKK2ZtYXgzOTYyIGZtYSAgMSAgICAwLjFFLTk5OSAgICAtMC4xRS05OTkgIC0+ICAgMEUtMTAwMAorZm1heDM5NjMgZm1hICAxICAgIDAuMTBFLTk5OSAgIC0wLjFFLTk5OSAgLT4gICAwRS0xMDAxCitmbWF4Mzk2NCBmbWEgIDEgICAgMC4xMDBFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDEgICAgQ2xhbXBlZAorZm1heDM5NjUgZm1hICAxICAgIDAuMDFFLTk5OSAgIC0wLjFFLTk5OSAgLT4gICAtOUUtMTAwMSAgIFN1Ym5vcm1hbAorZm1heDM5NjYgZm1hICAxICAgIDAuOTk5RS05OTkgIC0wLjFFLTk5OSAgLT4gICA5LjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mzk2NyBmbWEgIDEgICAgMC4wOTlFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM5NjggZm1hICAxICAgIDAuMDA5RS05OTkgIC0wLjFFLTk5OSAgLT4gICAtOUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mzk2OSBmbWEgIDEgICAgMC4wMDFFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTcwIGZtYSAgMSAgICAwLjAwMDlFLTk5OSAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NzEgZm1hICAxICAgIDAuMDAwMUUtOTk5IC0wLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIHNvbWUgJ3JlYWwnIG51bWJlcnMKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitwcmVjaXNpb246IDgKK2ZtYXgzNTY2IGZtYSAgMSAgIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTkwNkUtMzg0IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitwcmVjaXNpb246IDcKK2ZtYXgzNTY3IGZtYSAgMSAgIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTkxRS0zODQgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK3ByZWNpc2lvbjogNgorZm1heDM1NjggZm1hICAxICAgOTk5OTkwNjE3MzVFLTM5NCAgMEUtMzk0IC0+IDkuOTk5OUUtMzg0IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCisKKy0tIG5vdyB0aGUgY2FzZSB3aGVyZSB3ZSBjYW4gZ2V0IHVuZGVyZmxvdyBidXQgdGhlIHJlc3VsdCBpcyBub3JtYWwKKy0tIFtub3RlIHRoaXMgY2FuJ3QgaGFwcGVuIGlmIHRoZSBvcGVyYW5kcyBhcmUgYWxzbyBib3VuZGVkLCBhcyB3ZQorLS0gY2Fubm90IHJlcHJlc2VudCAxRS0zOTksIGZvciBleGFtcGxlXQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworZm1heDM1NzEgZm1hICAxICAgICAgICAgMUUtMzgzICAgICAgIDAgIC0+IDFFLTM4MworZm1heDM1NzIgZm1hICAxICAgICAgICAgMUUtMzg0ICAgICAgIDAgIC0+IDFFLTM4NCAgIFN1Ym5vcm1hbAorZm1heDM1NzMgZm1hICAxICAgICAgICAgMUUtMzgzICAxRS0zODQgIC0+IDEuMUUtMzgzCitmbWF4MzU3NCBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zODQgIC0+ICAgOUUtMzg0IFN1Ym5vcm1hbAorCistLSBIZXJlIHdlIGV4cGxvcmUgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KK2ZtYXgzNTc1IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorZm1heDM1NzYgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCitmbWF4MzU3NyBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDM1Nzggc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzNTc5IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzU4MCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworcHJlY2lzaW9uOiAgIDUKK21heGV4cG9uZW50OiA3OQorbWluZXhwb25lbnQ6IC03OQorLS0gQWRkOiBsaHMgYW5kIHJocyAwCitmbWF4MzEwMDEgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAwMiBmbWEgIDEgICAgICAgICAxLjUyNDQ1RS04MCAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDAzIGZtYSAgMSAgICAgICAgIDEuNTI0NDZFLTgwIDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMDQgZm1hICAxICAgICAgICAgMCAxLjUyNDQ0RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAwNSBmbWEgIDEgICAgICAgICAwIDEuNTI0NDVFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDA2IGZtYSAgMSAgICAgICAgIDAgMS41MjQ0NkUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIEFkZDogbGhzID4+IHJocyBhbmQgdmljZSB2ZXJzYQorZm1heDMxMDExIGZtYSAgMSAgICAgICAgIDEuNTI0NDRFLTgwIDFFLTEwMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAxMiBmbWEgIDEgICAgICAgICAxLjUyNDQ1RS04MCAxRS0xMDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMTMgZm1hICAxICAgICAgICAgMS41MjQ0NkUtODAgMUUtMTAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDE0IGZtYSAgMSAgICAgICAgIDFFLTEwMCAxLjUyNDQ0RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAxNSBmbWEgIDEgICAgICAgICAxRS0xMDAgMS41MjQ0NUUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMTYgZm1hICAxICAgICAgICAgMUUtMTAwIDEuNTI0NDZFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBBZGQ6IGxocyArIHJocyBmbWEgIDEgIGl0aW9uIGNhcnJpZWQgb3V0CitmbWF4MzEwMjEgZm1hICAxICAgICAgICAgMS41MjQ0M0UtODAgMS4wMDAwMUUtODAgIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDIyIGZtYSAgMSAgICAgICAgIDEuNTI0NDRFLTgwIDEuMDAwMDFFLTgwICAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAyMyBmbWEgIDEgICAgICAgICAxLjUyNDQ1RS04MCAxLjAwMDAxRS04MCAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMjQgZm1hICAxICAgICAgICAgMS4wMDAwMUUtODAgIDEuNTI0NDNFLTgwIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDI1IGZtYSAgMSAgICAgICAgIDEuMDAwMDFFLTgwICAxLjUyNDQ0RS04MCAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAyNiBmbWEgIDEgICAgICAgICAxLjAwMDAxRS04MCAgMS41MjQ0NUUtODAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcHJlY2lzaW9uOiAgICAxNgorbWF4RXhwb25lbnQ6ICszODQKK21pbkV4cG9uZW50OiAtMzgzCityb3VuZGluZzogICAgIGRvd24KKworZm1heDMxMTAwIGZtYSAgMSAgIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwMSBmbWEgIDEgICAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTAzIGZtYSAgMSAgICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTA0IGZtYSAgMSAgIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwNSBmbWEgIDEgICAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTA2IGZtYSAgMSAgIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTA3IGZtYSAgMSAgIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwOCBmbWEgIDEgICAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTA5IGZtYSAgMSAgIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICAgY2VpbGluZworZm1heDMxMTEwIGZtYSAgMSAgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMTEgZm1hICAxICAgLTFlKzEgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMTMgZm1hICAxICAgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTE0IGZtYSAgMSAgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMTUgZm1hICAxICAgLTFlLTIgKzFlLTM4MyAgIC0+IC0wLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMTYgZm1hICAxICAgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTE3IGZtYSAgMSAgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMTggZm1hICAxICAgLTFlLTUgKzFlLTM4MyAgIC0+IC0wLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMTkgZm1hICAxICAgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICAgZG93bgorcHJlY2lzaW9uOiAgICA3CittYXhFeHBvbmVudDogKzk2CittaW5FeHBvbmVudDogLTk1CitmbWF4MzExMzAgZm1hICAxICAgICAxICAgICAgICAgICAgLTFlLTIwMCAgLT4gMC45OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKKy0tIHN1Ym5vcm1hbCBib3VuZGFyeQorZm1heDMxMTMxIGZtYSAgMSAgICAgMS4wMDAwMDBFLTk0ICAtMWUtMjAwICAtPiAgOS45OTk5OTlFLTk1ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEzMiBmbWEgIDEgICAgIDEuMDAwMDAxRS05NSAgLTFlLTIwMCAgLT4gIDEuMDAwMDAwRS05NSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMzMgZm1hICAxICAgICAxLjAwMDAwMEUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk5OTk5RS05NiAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTEzNCBmbWEgIDEgICAgIDAuOTk5OTk5RS05NSAgLTFlLTIwMCAgLT4gIDkuOTk5OThFLTk2ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMTM1IGZtYSAgMSAgICAgMC4wMDEwMDBFLTk1ICAtMWUtMjAwICAtPiAgOS45OUUtOTkgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzExMzYgZm1hICAxICAgICAwLjAwMDk5OUUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk4RS05OSAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTEzNyBmbWEgIDEgICAgIDEuMDAwMDAwRS05NSAgLTFlLTEwMSAgLT4gIDkuOTk5OTlFLTk2ICBTdWJub3JtYWwKK2ZtYXgzMTEzOCBmbWEgIDEgICAgICAgIDEwMDAwRS0xMDEgLTFlLTIwMCAgLT4gIDkuOTk5RS05OCAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTEzOSBmbWEgIDEgICAgICAgICAxMDAwRS0xMDEgLTFlLTIwMCAgLT4gIDkuOTlFLTk5ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTE0MCBmbWEgIDEgICAgICAgICAgMTAwRS0xMDEgLTFlLTIwMCAgLT4gIDkuOUUtMTAwICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTE0MSBmbWEgIDEgICAgICAgICAgIDEwRS0xMDEgLTFlLTIwMCAgLT4gIDlFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTE0MiBmbWEgIDEgICAgICAgICAgICAxRS0xMDEgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxMTQzIGZtYSAgMSAgICAgICAgICAgIDBFLTEwMSAtMWUtMjAwICAtPiAtMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzExNDQgZm1hICAxICAgICAgICAgICAgMUUtMTAyIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworZm1heDMxMTUxIGZtYSAgMSAgICAgICAgMTAwMDBFLTEwMiAtMWUtMjAwICAtPiAgOS45OUUtOTkgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExNTIgZm1hICAxICAgICAgICAgMTAwMEUtMTAyIC0xZS0yMDAgIC0+ICA5LjlFLTEwMCAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTE1MyBmbWEgIDEgICAgICAgICAgMTAwRS0xMDIgLTFlLTIwMCAgLT4gIDlFLTEwMSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExNTQgZm1hICAxICAgICAgICAgICAxMEUtMTAyIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTE1NSBmbWEgIDEgICAgICAgICAgICAxRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxMTU2IGZtYSAgMSAgICAgICAgICAgIDBFLTEwMiAtMWUtMjAwICAtPiAtMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzExNTcgZm1hICAxICAgICAgICAgICAgMUUtMTAzIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworZm1heDMxMTYwIGZtYSAgMSAgICAgICAgICAxMDBFLTEwNSAtMWUtMTAxICAtPiAtMEUtMTAxIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTE2MSBmbWEgIDEgICAgICAgICAgMTAwRS0xMDUgLTFlLTIwMSAgLT4gIDBFLTEwMSBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlCitwcmVjaXNpb246ICAgMTUKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCitmbWF4MzEyMDAgZm1hICAxICAgMUUxNSAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDBFKzE1IEluZXhhY3QgUm91bmRlZAorZm1heDMxMjAxIGZtYSAgMSAgIDFFMTUgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSsxNSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxMCBmbWEgIDEgICAxRTE1ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTEgZm1hICAxICAgMUUxNSAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjEyIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxMyBmbWEgIDEgICAxRTE1ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTQgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjE1IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxNiBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTcgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjE4IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxOSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMjAgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjIxIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIyMiBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMjMgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjI0IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIyNSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMTUgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMzAgZm1hICAxICAgMUUxNSAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246ICAgMTYKKworZm1heDMxMzAwIGZtYSAgMSAgIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTAgZm1hICAxICAgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxMSBmbWEgIDEgICAxRTE2ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzEyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzE1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzE4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyMCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzIxIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzI0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzI3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyOSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzMwIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzMiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzMzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzM2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzcgZm1hICAxICAgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzOCBmbWEgIDEgICAxRTE2ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzM5IGZtYSAgMSAgIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzMTM0MCBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzQxIGZtYSAgMSAgIDFFMTYgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzMTM0OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM1MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM1MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM1MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM1MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM1NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM1NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM1NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM1NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM1OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM1OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM2MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM2MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM2MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM2MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM2NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM2NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM2NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM2OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM2OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM3MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM3MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM3MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM3NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM3NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM3NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM3NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM3OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM3OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM4MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM4MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM4MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM4MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM4NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM4NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM4NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM4NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM4OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM4OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM5MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM5MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM5MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM5MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM5NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM5NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM5NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKKy0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKK3ByZWNpc2lvbjogICAxNQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK2ZtYXgzMTQwMCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDEgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQwMiBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQwMyBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDQgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQwNSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQwNiBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDcgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtNworZm1heDMxNDA4IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTgKK2ZtYXgzMTQwOSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS05CitmbWF4MzE0MTAgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTAKK2ZtYXgzMTQxMSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMQorZm1heDMxNDEyIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTEyCitmbWF4MzE0MTMgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTMKK2ZtYXgzMTQxNCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNAorZm1heDMxNDE1IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE1CitmbWF4MzE0MTYgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTYKK2ZtYXgzMTQxNyBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNworZm1heDMxNDE4IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE4CitmbWF4MzE0MTkgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgcHJlY2lzaW9uIDE2Li4KK3ByZWNpc2lvbjogICAxNgorZm1heDMxNDIwIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDIxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyMiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDIzIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDI0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyNSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDI2IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDI3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZm1heDMxNDI4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorZm1heDMxNDI5IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZm1heDMxNDMwIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2ZtYXgzMTQzMSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCitmbWF4MzE0MzIgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZm1heDMxNDMzIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2ZtYXgzMTQzNCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CitmbWF4MzE0MzUgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZm1heDMxNDM2IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2ZtYXgzMTQzNyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CitmbWF4MzE0MzggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZm1heDMxNDM5IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgcmV2ZXJzZWQgMAorZm1heDMxNDQwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NDEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NDIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAwIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NDQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NDUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQ2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAwIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NDcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2ZtYXgzMTQ0OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorZm1heDMxNDQ5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitmbWF4MzE0NTAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitmbWF4MzE0NTEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCitmbWF4MzE0NTIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitmbWF4MzE0NTMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitmbWF4MzE0NTQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CitmbWF4MzE0NTUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitmbWF4MzE0NTYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitmbWF4MzE0NTcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CitmbWF4MzE0NTggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitmbWF4MzE0NTkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIEVzIG9uIHRoZSAwCitmbWF4MzE0NjAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDYxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDY0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDY3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDcwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ3MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NzIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDczIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ3NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NzUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAorZm1heDMxNDc2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZm1heDMxNDc3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZm1heDMxNDc4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZm1heDMxNDc5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMAorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCityb3VuZGluZzogICAgaGFsZl91cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDMxNTAwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTUwMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTAzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzE1MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUwNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTA2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzMTUxMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUxNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDMxNTE1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1MTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUxNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzMTUyMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTUyMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDMxNTI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUyNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzE1MzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUzMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1MzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzMTUzNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTM2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUzOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzE1NDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU0MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTQyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1NDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzMTU0NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTQ1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU0NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDMxNTUxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1NTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU1MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTU0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzE1NTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU1NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTU3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIHVwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzE1NjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU2MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTYyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1NjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzMTU2NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTY1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU2NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDMxNTcxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxNTcyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxNTczIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxNTc0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDMxNTc1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxNTc2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU3OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworcm91bmRpbmc6ICAgIGRvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzMTU4MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTgxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1ODIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU4MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDMxNTg0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1ODUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU4NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTg3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzE1OTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU5MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTkzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1OTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzMTU5NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTk2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1OTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU5OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgY2VpbGluZworLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDMxNjAwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE2MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTYwMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNjAzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzE2MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTYwNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNjA2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE2MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzMTYxMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTYxMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTYxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNjE0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzE2MTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE2MTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTYxNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNjE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKgorcm91bmRpbmc6ICAgIGZsb29yCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzE2MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTYyMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZm1heDMxNjIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitmbWF4MzE2MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzMTYyNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNjI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCitmbWF4MzE2MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2ZtYXgzMTYyNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDMxNjMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE2MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTYzMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTYzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzMTYzNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNjM2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCitmbWF4MzE2MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2ZtYXgzMTYzOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworLS0gQmlnRGVjaW1hbCBwcm9ibGVtIHRlc3RjYXNlcyAyMDA2LjAxLjIzCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK3JvdW5kaW5nOiAgZG93bgorcHJlY2lzaW9uOiA3CitmbWF4MzE2NTEgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDYKK2ZtYXgzMTY1MiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKK3ByZWNpc2lvbjogNQorZm1heDMxNjUzIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwRSs2ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQKK2ZtYXgzMTY1NCBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwRSs2ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzCitmbWF4MzE2NTUgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwRSs2ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMgorZm1heDMxNjU2IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wRSs2ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEKK2ZtYXgzMTY1NyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDFFKzYgICAgICAgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfZXZlbgorcHJlY2lzaW9uOiA3CitmbWF4MzE2NjEgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDYKK2ZtYXgzMTY2MiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKK3ByZWNpc2lvbjogNQorZm1heDMxNjYzIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAxRSs2ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQKK2ZtYXgzMTY2NCBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwRSs2ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzCitmbWF4MzE2NjUgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwRSs2ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMgorZm1heDMxNjY2IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wRSs2ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEKK2ZtYXgzMTY2NyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDFFKzYgICAgICAgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIHVwCitwcmVjaXNpb246IDcKK2ZtYXgzMTY3MSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKK3ByZWNpc2lvbjogNgorZm1heDMxNjcyIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA1CitmbWF4MzE2NzMgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDFFKzYgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNAorZm1heDMxNjc0IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDFFKzYgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMKK2ZtYXgzMTY3NSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDFFKzYgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyCitmbWF4MzE2NzYgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjFFKzYgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMQorZm1heDMxNjc3IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMkUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZm1heDMxNzAxICBmbWEgIDEgICAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKK2ZtYXgzMTcwMiAgZm1hICAxICAgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCitmbWF4MzE3MDMgIGZtYSAgMSAgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAorZm1heDMxNzA0ICBmbWEgIDEgICAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKK2ZtYXgzMTcwNSAgc3VidHJhY3QgMTMwRS0yICAxMjBFLTIgLT4gMC4xMAorZm1heDMxNzA2ICBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwCitmbWF4MzE3MDcgIHN1YnRyYWN0IDEzMEUtMiAgMUUwICAgIC0+IDAuMzAKK2ZtYXgzMTcwOCAgc3VidHJhY3QgMUUyICAgICAxRTQgICAgLT4gLTkuOUUrMworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFNhbWUgYXMgYWJvdmUsIHVzaW5nIGRlY2ltYWw2NCBkZWZhdWx0IHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZm1heDM2MDAxIGZtYSAgMSAgIDEgICAgICAgMSAgICAgICAtPiAgMgorZm1heDM2MDAyIGZtYSAgMSAgIDIgICAgICAgMyAgICAgICAtPiAgNQorZm1heDM2MDAzIGZtYSAgMSAgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQorZm1heDM2MDA0IGZtYSAgMSAgICc1JyAgICAgJy0zJyAgICAtPiAgMgorZm1heDM2MDA1IGZtYSAgMSAgICctNScgICAgJy0zJyAgICAtPiAgLTgKK2ZtYXgzNjAwNiBmbWEgIDEgICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUKK2ZtYXgzNjAwNyBmbWEgIDEgICAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorZm1heDM2MDA4IGZtYSAgMSAgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MAorZm1heDM2MDA5IGZtYSAgMSAgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5JworZm1heDM2MDEwIGZtYSAgMSAgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCitmbWF4MzYwMTEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxMiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0MCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDEzIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDE0IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0OScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDE1IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0OTknICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDE2IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0OTk5JyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDE3IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MDAwJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDE4IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MDAxJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDE5IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MDEnICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDIwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzYwMjEgZm1hICAxICAgMCAxIC0+IDEKK2ZtYXgzNjAyMiBmbWEgIDEgICAxIDEgLT4gMgorZm1heDM2MDIzIGZtYSAgMSAgIDIgMSAtPiAzCitmbWF4MzYwMjQgZm1hICAxICAgMyAxIC0+IDQKK2ZtYXgzNjAyNSBmbWEgIDEgICA0IDEgLT4gNQorZm1heDM2MDI2IGZtYSAgMSAgIDUgMSAtPiA2CitmbWF4MzYwMjcgZm1hICAxICAgNiAxIC0+IDcKK2ZtYXgzNjAyOCBmbWEgIDEgICA3IDEgLT4gOAorZm1heDM2MDI5IGZtYSAgMSAgIDggMSAtPiA5CitmbWF4MzYwMzAgZm1hICAxICAgOSAxIC0+IDEwCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworZm1heDM2MDMxIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworZm1heDM2MDMyIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5JworZm1heDM2MDMzIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJworZm1heDM2MDM0IGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJworCitmbWF4MzYwMzUgZm1hICAxICAgJzcwJyAgICAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDM2IGZtYSAgMSAgICc3MDAnICAgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAzNyBmbWEgIDEgICAnNzAwMCcgICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMzggZm1hICAxICAgJzcwMDAwJyAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDM5IGZtYSAgMSAgICc3MDAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5OgorZm1heDM2MDQwIGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDQxIGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjA0MiBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDQ0IGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDQ1IGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCisKK2ZtYXgzNjA0NiBmbWEgIDEgICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JworZm1heDM2MDQ3IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJworZm1heDM2MDQ4IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2ZtYXgzNjA0OSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJworZm1heDM2MDUwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJworZm1heDM2MDUxIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZm1heDM2MDUzIGZtYSAgMSAgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2ZtYXgzNjA1NCBmbWEgIDEgICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJworZm1heDM2MDU1IGZtYSAgMSAgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnCitmbWF4MzYwNTYgZm1hICAxICAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCitmbWF4MzYwNTcgZm1hICAxICAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcKKworLS0gZnJvbSBhYm92ZQorZm1heDM2MDYxIGZtYSAgMSAgIDEgJzAuMScgLT4gJzEuMScKK2ZtYXgzNjA2MiBmbWEgIDEgICAxICcwLjAxJyAtPiAnMS4wMScKK2ZtYXgzNjA2MyBmbWEgIDEgICAxICcwLjAwMScgLT4gJzEuMDAxJworZm1heDM2MDY0IGZtYSAgMSAgIDEgJzAuMDAwMScgLT4gJzEuMDAwMScKK2ZtYXgzNjA2NSBmbWEgIDEgICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2ZtYXgzNjA2NiBmbWEgIDEgICAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJworZm1heDM2MDY3IGZtYSAgMSAgIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScKK2ZtYXgzNjA2OCBmbWEgIDEgICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorZm1heDM2MDcwIGZtYSAgMSAgIDEgIDAgICAgLT4gMQorZm1heDM2MDcxIGZtYSAgMSAgIDEgMC4gICAgLT4gMQorZm1heDM2MDcyIGZtYSAgMSAgIDEgIC4wICAgLT4gMS4wCitmbWF4MzYwNzMgZm1hICAxICAgMSAwLjAgICAtPiAxLjAKK2ZtYXgzNjA3NCBmbWEgIDEgICAxIDAuMDAgIC0+IDEuMDAKK2ZtYXgzNjA3NSBmbWEgIDEgICAgMCAgMSAgIC0+IDEKK2ZtYXgzNjA3NiBmbWEgIDEgICAwLiAgMSAgIC0+IDEKK2ZtYXgzNjA3NyBmbWEgIDEgICAgLjAgMSAgIC0+IDEuMAorZm1heDM2MDc4IGZtYSAgMSAgIDAuMCAxICAgLT4gMS4wCitmbWF4MzYwNzkgZm1hICAxICAgMC4wMCAxICAtPiAxLjAwCisKKy0tIHNvbWUgY2FycmllcworZm1heDM2MDgwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5OTk5OTk5OQorZm1heDM2MDgxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE2IFJvdW5kZWQKK2ZtYXgzNjA4MiBmbWEgIDEgICAgOTk5OTk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2ZtYXgzNjA4MyBmbWEgIDEgICAgICA5OTk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMDAwCitmbWF4MzYwODQgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwMDAKK2ZtYXgzNjA4NSBmbWEgIDEgICAgICAgICAgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAKK2ZtYXgzNjA4NiBmbWEgIDEgICAgICAgICAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCitmbWF4MzYwODcgZm1hICAxICAgICAgICAgICAgICA5OTk5OSAxICAtPiAxMDAwMDAKK2ZtYXgzNjA4OCBmbWEgIDEgICAgICAgICAgICAgICAgOTk5IDEgIC0+IDEwMDAKK2ZtYXgzNjA4OSBmbWEgIDEgICAgICAgICAgICAgICAgICA5IDEgIC0+IDEwCisKKworLS0gbW9yZSBMSFMgc3dhcHMKK2ZtYXgzNjA5MCBmbWEgIDEgICAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2ZtYXgzNjA5MSBmbWEgIDEgICAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3JworZm1heDM2MDkyIGZtYSAgMSAgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2ZtYXgzNjA5MyBmbWEgIDEgICAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2ZtYXgzNjA5NCBmbWEgIDEgICAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycKK2ZtYXgzNjA5NSBmbWEgIDEgICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2ZtYXgzNjA5NiBmbWEgIDEgICAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2ZtYXgzNjA5NyBmbWEgIDEgICAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3JworZm1heDM2MDk4IGZtYSAgMSAgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitmbWF4MzYwOTkgZm1hICAxICAgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworZm1heDM2MTAwIGZtYSAgMSAgICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnCitmbWF4MzYxMDEgZm1hICAxICAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZm1heDM2MTAyIGZtYSAgMSAgICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworZm1heDM2MTAzIGZtYSAgMSAgICctNUUtMScgICAgICAgIDAgLT4gICctMC41JworZm1heDM2MTA0IGZtYSAgMSAgICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2ZtYXgzNjEwNSBmbWEgIDEgICAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworZm1heDM2MTA2IGZtYSAgMSAgICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJworZm1heDM2MTA3IGZtYSAgMSAgICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2ZtYXgzNjEwOCBmbWEgIDEgICAnLTVFMTYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCitmbWF4MzYxMDkgZm1hICAxICAgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkCitmbWF4MzYxMTAgZm1hICAxICAgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkCitmbWF4MzYxMTEgZm1hICAxICAgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzCitmbWF4MzYxMTMgZm1hICAxICAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2ZtYXgzNjExNCBmbWEgIDEgICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCitmbWF4MzYxMTYgZm1hICAxICAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnCitmbWF4MzYxMTcgZm1hICAxICAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2ZtYXgzNjExOSBmbWEgIDEgICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JworZm1heDM2MTIwIGZtYSAgMSAgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnCitmbWF4MzYxMjEgZm1hICAxICAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2ZtYXgzNjEyMiBmbWEgIDEgICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCitmbWF4MzYxMjMgZm1hICAxICAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJworZm1heDM2MTI0IGZtYSAgMSAgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworZm1heDM2MTI1IGZtYSAgMSAgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKK2ZtYXgzNjEyNiBmbWEgIDEgICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScKK2ZtYXgzNjEyNyBmbWEgIDEgICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworZm1heDM2MTI4IGZtYSAgMSAgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCitmbWF4MzYxMjkgZm1hICAxICAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnCitmbWF4MzYxMzAgZm1hICAxICAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworZm1heDM2MTMxIGZtYSAgMSAgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCitmbWF4MzYxMzIgZm1hICAxICAgMCAgJy01RTE1JyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCitmbWF4MzYxMzMgZm1hICAxICAgMCAgJy01RTE2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCitmbWF4MzYxMzQgZm1hICAxICAgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkCitmbWF4MzYxMzUgZm1hICAxICAgMCAgJy01RTE4JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkCitmbWF4MzYxMzYgZm1hICAxICAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2ZtYXgzNjEzNyBmbWEgIDEgICAgMSAgJzBFLTE5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitmbWF4MzYxMzggZm1hICAxICAgLTEgICcwRS0xOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZm1heDM2MTM5IGZtYSAgMSAgICcwRS0xOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2ZtYXgzNjE0MCBmbWEgIDEgICAnMEUtMTknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitmbWF4MzYxNDEgZm1hICAxICAgMUUrMTEgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJworZm1heDM2MTQyIGZtYSAgMSAgIDFFKzExICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKK2ZtYXgzNjE0MyBmbWEgIDEgICAwLjAwMCAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnCitmbWF4MzYxNDQgZm1hICAxICAgMC4wMDAwICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZAorCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQorZm1heDM2MTQ2IGZtYSAgMSAgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2ZtYXgzNjE0NyBmbWEgIDEgICAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJworZm1heDM2MTQ4IGZtYSAgMSAgICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnCitmbWF4MzYxNDkgZm1hICAxICAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworZm1heDM2MTUwIGZtYSAgMSAgICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCitmbWF4MzYxNTEgZm1hICAxICAgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcKK2ZtYXgzNjE1MiBmbWEgIDEgICAnMycgICAgICcuMycgICAgLT4gICczLjMnCitmbWF4MzYxNTMgZm1hICAxICAgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJworZm1heDM2MTU0IGZtYSAgMSAgICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycKK2ZtYXgzNjE1NSBmbWEgIDEgICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworZm1heDM2MTU2IGZtYSAgMSAgICczJyAgICAgJzMnICAgICAtPiAgJzYnCitmbWF4MzYxNTcgZm1hICAxICAgJzMnICAgICAnKzMnICAgIC0+ICAnNicKK2ZtYXgzNjE1OCBmbWEgIDEgICAnMycgICAgICctMycgICAgLT4gICcwJworZm1heDM2MTU5IGZtYSAgMSAgICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKK2ZtYXgzNjE2MCBmbWEgIDEgICAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorZm1heDM2MTYxIGZtYSAgMSAgICcxRSsxMycgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5OScKK2ZtYXgzNjE2MiBmbWEgIDEgICAnMUUrMTMnICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDAxLjExJworZm1heDM2MTYzIGZtYSAgMSAgICcxLjExJyAgJzFFKzEzJyAtPiAnMTAwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzYxNjQgZm1hICAxICAgJy0xJyAgICAnMUUrMTMnIC0+ICc5OTk5OTk5OTk5OTk5JworZm1heDM2MTY1IGZtYSAgMSAgICc3RSsxMycgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OTknCitmbWF4MzYxNjYgZm1hICAxICAgJzdFKzEzJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzNjE2NyBmbWEgIDEgICAnMS4xMScgICc3RSsxMycgLT4gJzcwMDAwMDAwMDAwMDAxLjExJworZm1heDM2MTY4IGZtYSAgMSAgICctMScgICAgJzdFKzEzJyAtPiAnNjk5OTk5OTk5OTk5OTknCisKKy0tICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDU2CitmbWF4MzYxNzAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxNzEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxNzIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxNzMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxNzQgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxNzUgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxNzYgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxNzcgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZm1heDM2MTc4IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5JworZm1heDM2MTc5IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk4JworZm1heDM2MTgwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk3JworZm1heDM2MTgxIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk2JworZm1heDM2MTgyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk1JworZm1heDM2MTgzIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk0JworCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZm1heDM2MjAwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZm1heDM2MjAxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwOCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjEwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxMSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjEzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxNCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjE2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZm1heDM2MjE3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxOCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzYyMjAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCitmbWF4MzYyMjEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjIyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjI1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjI4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjMxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjM0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCitmbWF4MzYyMzcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjM4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZm1heDM2MjQwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI0MSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNDIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZm1heDM2MjUwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZm1heDM2MjUxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI1MiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjU0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI1NSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjU3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI1OCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjYwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2MSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjYzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2NCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjY2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZm1heDM2MjY3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2OCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjMwMSBmbWEgIDEgICAgLTEgICAxICAgICAgLT4gICAwCitmbWF4MzYzMDIgZm1hICAxICAgICAwICAgMSAgICAgIC0+ICAgMQorZm1heDM2MzAzIGZtYSAgMSAgICAgMSAgIDEgICAgICAtPiAgIDIKK2ZtYXgzNjMwNCBmbWEgIDEgICAgMTIgICAxICAgICAgLT4gIDEzCitmbWF4MzYzMDUgZm1hICAxICAgIDk4ICAgMSAgICAgIC0+ICA5OQorZm1heDM2MzA2IGZtYSAgMSAgICA5OSAgIDEgICAgICAtPiAxMDAKK2ZtYXgzNjMwNyBmbWEgIDEgICAxMDAgICAxICAgICAgLT4gMTAxCitmbWF4MzYzMDggZm1hICAxICAgMTAxICAgMSAgICAgIC0+IDEwMgorZm1heDM2MzA5IGZtYSAgMSAgICAtMSAgLTEgICAgICAtPiAgLTIKK2ZtYXgzNjMxMCBmbWEgIDEgICAgIDAgIC0xICAgICAgLT4gIC0xCitmbWF4MzYzMTEgZm1hICAxICAgICAxICAtMSAgICAgIC0+ICAgMAorZm1heDM2MzEyIGZtYSAgMSAgICAxMiAgLTEgICAgICAtPiAgMTEKK2ZtYXgzNjMxMyBmbWEgIDEgICAgOTggIC0xICAgICAgLT4gIDk3CitmbWF4MzYzMTQgZm1hICAxICAgIDk5ICAtMSAgICAgIC0+ICA5OAorZm1heDM2MzE1IGZtYSAgMSAgIDEwMCAgLTEgICAgICAtPiAgOTkKK2ZtYXgzNjMxNiBmbWEgIDEgICAxMDEgIC0xICAgICAgLT4gMTAwCisKK2ZtYXgzNjMyMSBmbWEgIDEgICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMAorZm1heDM2MzIyIGZtYSAgMSAgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCitmbWF4MzYzMjMgZm1hICAxICAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKK2ZtYXgzNjMyNCBmbWEgIDEgICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMworZm1heDM2MzI1IGZtYSAgMSAgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5CitmbWF4MzYzMjYgZm1hICAxICAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKK2ZtYXgzNjMyNyBmbWEgIDEgICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQorZm1heDM2MzI4IGZtYSAgMSAgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCitmbWF4MzYzMjkgZm1hICAxICAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKK2ZtYXgzNjMzMCBmbWEgIDEgICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQorZm1heDM2MzMxIGZtYSAgMSAgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCitmbWF4MzYzMzIgZm1hICAxICAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKK2ZtYXgzNjMzMyBmbWEgIDEgICAgMC45OCAtMC4wMSAgICAtPiAgMC45NworZm1heDM2MzM0IGZtYSAgMSAgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4CitmbWF4MzYzMzUgZm1hICAxICAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKK2ZtYXgzNjMzNiBmbWEgIDEgICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMAorCistLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgZm1hICAxICBpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudAorZm1heDM2MzQwIGZtYSAgMSAgIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDAKK2ZtYXgzNjM0MSBmbWEgIDEgICAxRSsxNSAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMAorZm1heDM2MzQyIGZtYSAgMSAgIDFFKzE2ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZAorZm1heDM2MzQzIGZtYSAgMSAgIDFFKzE3ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZAorLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLgorZm1heDM2MzQ0IGZtYSAgMSAgIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKK2ZtYXgzNjM0NSBmbWEgIDEgICAxRSsxNSAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMQorZm1heDM2MzQ2IGZtYSAgMSAgIDFFKzE2ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYzNDcgZm1hICAxICAgMUUrMTcgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjM0OCBmbWEgIDEgICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CitmbWF4MzYzNDkgZm1hICAxICAgMUUrMTUgICA3ICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDcKK2ZtYXgzNjM1MCBmbWEgIDEgICAxRSsxNiAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MzUxIGZtYSAgMSAgIDFFKzE3ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCitmbWF4MzYzNjEgIGZtYSAgMSAgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2ZtYXgzNjM2MiAgZm1hICAxICAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwICBSb3VuZGVkCitmbWF4MzYzNjMgIGZtYSAgMSAgIDEwMDAwRSsxIDEwMDAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MzY0ICBmbWEgIDEgICAxMi4zNCAgICAwZS0zOTggIC0+IDEyLjM0MDAwMDAwMDAwMDAwICBSb3VuZGVkCisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworZm1heDM2NDAwIGZtYSAgMSAgICAgMSAgIDc3ZS0xNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CitmbWF4MzY0MDEgZm1hICAxICAgICAxICAgNzdlLTE1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3CitmbWF4MzY0MDIgZm1hICAxICAgICAxICAgNzdlLTE2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDAzIGZtYSAgMSAgICAgMSAgIDc3ZS0xNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQwNCBmbWEgIDEgICAgIDEgICA3N2UtMTggICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MDUgZm1hICAxICAgICAxICAgNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDA2IGZtYSAgMSAgICAgMSAgIDc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NDEwIGZtYSAgMSAgICAxMCAgIDc3ZS0xNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3NworZm1heDM2NDExIGZtYSAgMSAgICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQxMiBmbWEgIDEgICAgMTAgICA3N2UtMTYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MTMgZm1hICAxICAgIDEwICAgNzdlLTE3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDE0IGZtYSAgMSAgICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQxNSBmbWEgIDEgICAgMTAgICA3N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MTYgZm1hICAxICAgIDEwICAgNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY0MjAgZm1hICAxICAgIDc3ZS0xNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2ZtYXgzNjQyMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2ZtYXgzNjQyMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MjMgZm1hICAxICAgIDc3ZS0xNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDI0IGZtYSAgMSAgICA3N2UtMTggICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQyNSBmbWEgIDEgICAgNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MjYgZm1hICAxICAgIDc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY0MzAgZm1hICAxICAgIDc3ZS0xNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CitmbWF4MzY0MzEgZm1hICAxICAgIDc3ZS0xNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDMyIGZtYSAgMSAgICA3N2UtMTYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQzMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MzQgZm1hICAxICAgIDc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDM1IGZtYSAgMSAgICA3N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQzNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2ZtYXgzNjQ0MCBmbWEgIDEgICAgIDEgICAtNzdlLTE0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ0MSBmbWEgIDEgICAgIDEgICAtNzdlLTE1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NDIgZm1hICAxICAgICAxICAgLTc3ZS0xNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ0MyBmbWEgIDEgICAgIDEgICAtNzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ0NCBmbWEgIDEgICAgIDEgICAtNzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ0NSBmbWEgIDEgICAgIDEgICAtNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDQ2IGZtYSAgMSAgICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQ1MCBmbWEgIDEgICAgMTAgICAtNzdlLTE0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NTEgZm1hICAxICAgIDEwICAgLTc3ZS0xNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ1MiBmbWEgIDEgICAgMTAgICAtNzdlLTE2ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ1MyBmbWEgIDEgICAgMTAgICAtNzdlLTE3ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ1NCBmbWEgIDEgICAgMTAgICAtNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDU1IGZtYSAgMSAgICAxMCAgIC03N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NTYgZm1hICAxICAgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NDYwIGZtYSAgMSAgICAtNzdlLTE0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTkyMworZm1heDM2NDYxIGZtYSAgMSAgICAtNzdlLTE1ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ2MiBmbWEgIDEgICAgLTc3ZS0xNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMworZm1heDM2NDYzIGZtYSAgMSAgICAtNzdlLTE3ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDY0IGZtYSAgMSAgICAtNzdlLTE4ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDY1IGZtYSAgMSAgICAtNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NjYgZm1hICAxICAgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NDcwIGZtYSAgMSAgICAtNzdlLTE0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ3MSBmbWEgIDEgICAgLTc3ZS0xNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMworZm1heDM2NDcyIGZtYSAgMSAgICAtNzdlLTE2ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDczIGZtYSAgMSAgICAtNzdlLTE3ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDc0IGZtYSAgMSAgICAtNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NzUgZm1hICAxICAgIC03N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ3NiBmbWEgIDEgICAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitmbWF4MzY0ODAgZm1hICAxICAgIC0xICAgIDc3ZS0xNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMworZm1heDM2NDgxIGZtYSAgMSAgICAtMSAgICA3N2UtMTUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0ODIgZm1hICAxICAgIC0xICAgIDc3ZS0xNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0ODMgZm1hICAxICAgIC0xICAgIDc3ZS0xNyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDg0IGZtYSAgMSAgICAtMSAgICA3N2UtMTggICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ4NSBmbWEgIDEgICAgLTEgICAgNzdlLTE5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ4NiBmbWEgIDEgICAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NDkwIGZtYSAgMSAgIC0xMCAgICA3N2UtMTQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCitmbWF4MzY0OTEgZm1hICAxICAgLTEwICAgIDc3ZS0xNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0OTIgZm1hICAxICAgLTEwICAgIDc3ZS0xNiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDkzIGZtYSAgMSAgIC0xMCAgICA3N2UtMTcgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ5NCBmbWEgIDEgICAtMTAgICAgNzdlLTE4ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ5NSBmbWEgIDEgICAtMTAgICAgNzdlLTE5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ5NiBmbWEgIDEgICAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NTAwIGZtYSAgMSAgICAgNzdlLTE0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjUwMSBmbWEgIDEgICAgIDc3ZS0xNSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMworZm1heDM2NTAyIGZtYSAgMSAgICAgNzdlLTE2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMworZm1heDM2NTAzIGZtYSAgMSAgICAgNzdlLTE3ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUwNCBmbWEgIDEgICAgIDc3ZS0xOCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MDUgZm1hICAxICAgICA3N2UtMTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MDYgZm1hICAxICAgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjUxMCBmbWEgIDEgICAgIDc3ZS0xNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTkyMworZm1heDM2NTExIGZtYSAgMSAgICAgNzdlLTE1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMworZm1heDM2NTEyIGZtYSAgMSAgICAgNzdlLTE2ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUxMyBmbWEgIDEgICAgIDc3ZS0xNyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MTQgZm1hICAxICAgICA3N2UtMTggICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MTUgZm1hICAxICAgICA3N2UtMTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MTYgZm1hICAxICAgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKworLS0gbG9uZyBvcGVyYW5kcworZm1heDM2NTIxIGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODAwMCAwIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNyBSb3VuZGVkCitmbWF4MzY1MjIgZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2NzgwMDAgLT4gMS4wMTIzNDU2MjM0NTY3ODBFKzE3IFJvdW5kZWQKK2ZtYXgzNjUyMyBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2NzgwMCAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTYgUm91bmRlZAorZm1heDM2NTI0IGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4MDAgIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNiBSb3VuZGVkCitmbWF4MzY1MjUgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4OTAgIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE2IFJvdW5kZWQKK2ZtYXgzNjUyNiBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODkwICAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgUm91bmRlZAorZm1heDM2NTI3IGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODkxICAwIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUyOCBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODkxICAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MjkgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4OTAxIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE3IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTMwIGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTAxIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUzMSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5NiAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc5MEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MzIgZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2Nzg5NiAgLT4gMS4wMTIzNDU2MjM0NTY3OTBFKzE2IEluZXhhY3QgUm91bmRlZAorCistLSB2ZXJpZnkgYSBxdWVyeQorcm91bmRpbmc6ICAgICBkb3duCitmbWF4MzY1NjEgZm1hICAxICAgMWUtMzk4IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjU2MiBmbWEgIDEgICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQKKy0tIGFuZCB1c2luZyBkZWNpbWFsNjQgYm91bmRzLi4uCityb3VuZGluZzogICAgIGRvd24KK2ZtYXgzNjU2MyBmbWEgIDEgICAxZS0zODggOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTY0IGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZAorCistLSBtb3JlIHplcm9zLCBldGMuCityb3VuZGluZzogaGFsZl9ldmVuCisKK2ZtYXgzNjcwMSBmbWEgIDEgICA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAorZm1heDM2NzAyIGZtYSAgMSAgIDAwLjAwIDAuMDAwICAtPiAwLjAwMAorZm1heDM2NzAzIGZtYSAgMSAgIDAwLjAwIDBFLTMgICAtPiAwLjAwMAorZm1heDM2NzA0IGZtYSAgMSAgIDBFLTMgIDAwLjAwICAtPiAwLjAwMAorCitmbWF4MzY3MTAgZm1hICAxICAgMEUrMyAgMDAuMDAgIC0+IDAuMDAKK2ZtYXgzNjcxMSBmbWEgIDEgICAwRSszICAwMC4wICAgLT4gMC4wCitmbWF4MzY3MTIgZm1hICAxICAgMEUrMyAgMDAuICAgIC0+IDAKK2ZtYXgzNjcxMyBmbWEgIDEgICAwRSszICAwMC5FKzEgLT4gMEUrMQorZm1heDM2NzE0IGZtYSAgMSAgIDBFKzMgIDAwLkUrMiAtPiAwRSsyCitmbWF4MzY3MTUgZm1hICAxICAgMEUrMyAgMDAuRSszIC0+IDBFKzMKK2ZtYXgzNjcxNiBmbWEgIDEgICAwRSszICAwMC5FKzQgLT4gMEUrMworZm1heDM2NzE3IGZtYSAgMSAgIDBFKzMgIDAwLkUrNSAtPiAwRSszCitmbWF4MzY3MTggZm1hICAxICAgMEUrMyAgLTAwLjAgICAtPiAwLjAKK2ZtYXgzNjcxOSBmbWEgIDEgICAwRSszICAtMDAuICAgIC0+IDAKK2ZtYXgzNjczMSBmbWEgIDEgICAwRSszICAtMDAuRSsxIC0+IDBFKzEKKworZm1heDM2NzIwIGZtYSAgMSAgIDAwLjAwICAwRSszICAtPiAwLjAwCitmbWF4MzY3MjEgZm1hICAxICAgMDAuMCAgIDBFKzMgIC0+IDAuMAorZm1heDM2NzIyIGZtYSAgMSAgIDAwLiAgICAwRSszICAtPiAwCitmbWF4MzY3MjMgZm1hICAxICAgMDAuRSsxIDBFKzMgIC0+IDBFKzEKK2ZtYXgzNjcyNCBmbWEgIDEgICAwMC5FKzIgMEUrMyAgLT4gMEUrMgorZm1heDM2NzI1IGZtYSAgMSAgIDAwLkUrMyAwRSszICAtPiAwRSszCitmbWF4MzY3MjYgZm1hICAxICAgMDAuRSs0IDBFKzMgIC0+IDBFKzMKK2ZtYXgzNjcyNyBmbWEgIDEgICAwMC5FKzUgMEUrMyAgLT4gMEUrMworZm1heDM2NzI4IGZtYSAgMSAgIC0wMC4wMCAwRSszICAtPiAwLjAwCitmbWF4MzY3MjkgZm1hICAxICAgLTAwLjAgIDBFKzMgIC0+IDAuMAorZm1heDM2NzMwIGZtYSAgMSAgIC0wMC4gICAwRSszICAtPiAwCisKK2ZtYXgzNjczMiBmbWEgIDEgICAgMCAgICAgMCAgICAgLT4gIDAKK2ZtYXgzNjczMyBmbWEgIDEgICAgMCAgICAtMCAgICAgLT4gIDAKK2ZtYXgzNjczNCBmbWEgIDEgICAtMCAgICAgMCAgICAgLT4gIDAKK2ZtYXgzNjczNSBmbWEgIDEgICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQorCitmbWF4MzY3MzYgZm1hICAxICAgIDEgICAgLTEgICAgIC0+ICAwCitmbWF4MzY3MzcgZm1hICAxICAgLTEgICAgLTEgICAgIC0+IC0yCitmbWF4MzY3MzggZm1hICAxICAgIDEgICAgIDEgICAgIC0+ICAyCitmbWF4MzY3MzkgZm1hICAxICAgLTEgICAgIDEgICAgIC0+ICAwCisKK2ZtYXgzNjc0MSBmbWEgIDEgICAgMCAgICAtMSAgICAgLT4gLTEKK2ZtYXgzNjc0MiBmbWEgIDEgICAtMCAgICAtMSAgICAgLT4gLTEKK2ZtYXgzNjc0MyBmbWEgIDEgICAgMCAgICAgMSAgICAgLT4gIDEKK2ZtYXgzNjc0NCBmbWEgIDEgICAtMCAgICAgMSAgICAgLT4gIDEKK2ZtYXgzNjc0NSBmbWEgIDEgICAtMSAgICAgMCAgICAgLT4gLTEKK2ZtYXgzNjc0NiBmbWEgIDEgICAtMSAgICAtMCAgICAgLT4gLTEKK2ZtYXgzNjc0NyBmbWEgIDEgICAgMSAgICAgMCAgICAgLT4gIDEKK2ZtYXgzNjc0OCBmbWEgIDEgICAgMSAgICAtMCAgICAgLT4gIDEKKworZm1heDM2NzUxIGZtYSAgMSAgICAwLjAgIC0xICAgICAtPiAtMS4wCitmbWF4MzY3NTIgZm1hICAxICAgLTAuMCAgLTEgICAgIC0+IC0xLjAKK2ZtYXgzNjc1MyBmbWEgIDEgICAgMC4wICAgMSAgICAgLT4gIDEuMAorZm1heDM2NzU0IGZtYSAgMSAgIC0wLjAgICAxICAgICAtPiAgMS4wCitmbWF4MzY3NTUgZm1hICAxICAgLTEuMCAgIDAgICAgIC0+IC0xLjAKK2ZtYXgzNjc1NiBmbWEgIDEgICAtMS4wICAtMCAgICAgLT4gLTEuMAorZm1heDM2NzU3IGZtYSAgMSAgICAxLjAgICAwICAgICAtPiAgMS4wCitmbWF4MzY3NTggZm1hICAxICAgIDEuMCAgLTAgICAgIC0+ICAxLjAKKworZm1heDM2NzYxIGZtYSAgMSAgICAwICAgIC0xLjAgICAtPiAtMS4wCitmbWF4MzY3NjIgZm1hICAxICAgLTAgICAgLTEuMCAgIC0+IC0xLjAKK2ZtYXgzNjc2MyBmbWEgIDEgICAgMCAgICAgMS4wICAgLT4gIDEuMAorZm1heDM2NzY0IGZtYSAgMSAgIC0wICAgICAxLjAgICAtPiAgMS4wCitmbWF4MzY3NjUgZm1hICAxICAgLTEgICAgIDAuMCAgIC0+IC0xLjAKK2ZtYXgzNjc2NiBmbWEgIDEgICAtMSAgICAtMC4wICAgLT4gLTEuMAorZm1heDM2NzY3IGZtYSAgMSAgICAxICAgICAwLjAgICAtPiAgMS4wCitmbWF4MzY3NjggZm1hICAxICAgIDEgICAgLTAuMCAgIC0+ICAxLjAKKworZm1heDM2NzcxIGZtYSAgMSAgICAwLjAgIC0xLjAgICAtPiAtMS4wCitmbWF4MzY3NzIgZm1hICAxICAgLTAuMCAgLTEuMCAgIC0+IC0xLjAKK2ZtYXgzNjc3MyBmbWEgIDEgICAgMC4wICAgMS4wICAgLT4gIDEuMAorZm1heDM2Nzc0IGZtYSAgMSAgIC0wLjAgICAxLjAgICAtPiAgMS4wCitmbWF4MzY3NzUgZm1hICAxICAgLTEuMCAgIDAuMCAgIC0+IC0xLjAKK2ZtYXgzNjc3NiBmbWEgIDEgICAtMS4wICAtMC4wICAgLT4gLTEuMAorZm1heDM2Nzc3IGZtYSAgMSAgICAxLjAgICAwLjAgICAtPiAgMS4wCitmbWF4MzY3NzggZm1hICAxICAgIDEuMCAgLTAuMCAgIC0+ICAxLjAKKworLS0gU3BlY2lhbHMKK2ZtYXgzNjc4MCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4MzY3ODEgZm1hICAxICAgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZm1heDM2NzgyIGZtYSAgMSAgIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4MyBmbWEgIDEgICAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitmbWF4MzY3ODQgZm1hICAxICAgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZm1heDM2Nzg1IGZtYSAgMSAgIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4NiBmbWEgIDEgICAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitmbWF4MzY3ODcgZm1hICAxICAgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2Nzg4IGZtYSAgMSAgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4OSBmbWEgIDEgICAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4MzY3OTAgZm1hICAxICAgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2NzkxIGZtYSAgMSAgICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc5MiBmbWEgIDEgICAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4MzY3OTMgZm1hICAxICAgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2Nzk0IGZtYSAgMSAgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitmbWF4MzY4MDAgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4MDEgZm1hICAxICAgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZm1heDM2ODAyIGZtYSAgMSAgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwMyBmbWEgIDEgICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitmbWF4MzY4MDQgZm1hICAxICAgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZm1heDM2ODA1IGZtYSAgMSAgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwNiBmbWEgIDEgICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitmbWF4MzY4MDcgZm1hICAxICAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM2ODA4IGZtYSAgMSAgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwOSBmbWEgIDEgICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjgxMCBmbWEgIDEgICAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzY4MTEgZm1hICAxICAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM2ODEyIGZtYSAgMSAgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgxMyBmbWEgIDEgICAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzY4MTQgZm1hICAxICAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM2ODE1IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZm1heDM2ODIxIGZtYSAgMSAgICBOYU4gLUluZiAgICAtPiAgTmFOCitmbWF4MzY4MjIgZm1hICAxICAgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2ZtYXgzNjgyMyBmbWEgIDEgICAgTmFOIC0xICAgICAgLT4gIE5hTgorZm1heDM2ODI0IGZtYSAgMSAgICBOYU4gLTAgICAgICAtPiAgTmFOCitmbWF4MzY4MjUgZm1hICAxICAgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2ZtYXgzNjgyNiBmbWEgIDEgICAgTmFOICAxICAgICAgLT4gIE5hTgorZm1heDM2ODI3IGZtYSAgMSAgICBOYU4gIDEwMDAgICAtPiAgTmFOCitmbWF4MzY4MjggZm1hICAxICAgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2ZtYXgzNjgyOSBmbWEgIDEgICAgTmFOICBOYU4gICAgLT4gIE5hTgorZm1heDM2ODMwIGZtYSAgMSAgIC1JbmYgIE5hTiAgICAtPiAgTmFOCitmbWF4MzY4MzEgZm1hICAxICAgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzMiBmbWEgIDEgICAtMSAgICBOYU4gICAgLT4gIE5hTgorZm1heDM2ODMzIGZtYSAgMSAgIC0wICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzY4MzQgZm1hICAxICAgIDAgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzNSBmbWEgIDEgICAgMSAgICBOYU4gICAgLT4gIE5hTgorZm1heDM2ODM2IGZtYSAgMSAgICAxMDAwIE5hTiAgICAtPiAgTmFOCitmbWF4MzY4MzcgZm1hICAxICAgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZm1heDM2ODQxIGZtYSAgMSAgICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODQyIGZtYSAgMSAgICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODQzIGZtYSAgMSAgICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODQ0IGZtYSAgMSAgICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODQ1IGZtYSAgMSAgICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODQ2IGZtYSAgMSAgICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODQ3IGZtYSAgMSAgICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODQ4IGZtYSAgMSAgICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODQ5IGZtYSAgMSAgICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODUwIGZtYSAgMSAgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODUxIGZtYSAgMSAgIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODUyIGZtYSAgMSAgIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODUzIGZtYSAgMSAgIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODU0IGZtYSAgMSAgIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODU1IGZtYSAgMSAgICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODU2IGZtYSAgMSAgICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODU3IGZtYSAgMSAgICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODU4IGZtYSAgMSAgICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODU5IGZtYSAgMSAgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitmbWF4MzY4NjEgZm1hICAxICAgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitmbWF4MzY4NjIgZm1hICAxICAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitmbWF4MzY4NjMgZm1hICAxICAgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitmbWF4MzY4NjQgZm1hICAxICAgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitmbWF4MzY4NjUgZm1hICAxICAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitmbWF4MzY4NjYgZm1hICAxICAgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitmbWF4MzY4NjcgZm1hICAxICAgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitmbWF4MzY4NjggZm1hICAxICAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitmbWF4MzY4NjkgZm1hICAxICAgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZm1heDM2ODcxIGZtYSAgMSAgICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzIgZm1hICAxICAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg3MyBmbWEgIDEgICAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODc0IGZtYSAgMSAgICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzUgZm1hICAxICAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg3NiBmbWEgIDEgICAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODc3IGZtYSAgMSAgIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzggZm1hICAxICAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg3OSBmbWEgIDEgICAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODgwIGZtYSAgMSAgICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4ODEgZm1hICAxICAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg4MiBmbWEgIDEgICAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitmbWF4MzY4ODMgZm1hICAxICAgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg4NCBmbWEgIDEgICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitmbWF4MzY4ODUgZm1hICAxICAgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gbm93IHRoZSBjYXNlIHdoZXJlIHdlIGNhbiBnZXQgdW5kZXJmbG93IGJ1dCB0aGUgcmVzdWx0IGlzIG5vcm1hbAorLS0gW25vdGUgdGhpcyBjYW4ndCBoYXBwZW4gaWYgdGhlIG9wZXJhbmRzIGFyZSBhbHNvIGJvdW5kZWQsIGFzIHdlCistLSBjYW5ub3QgcmVwcmVzZW50IDFFLTM5OSwgZm9yIGV4YW1wbGVdCisKK2ZtYXgzNjU3MSBmbWEgIDEgICAgICAgICAxRS0zODMgICAgICAgMCAgLT4gMUUtMzgzCitmbWF4MzY1NzIgZm1hICAxICAgICAgICAgMUUtMzg0ICAgICAgIDAgIC0+IDFFLTM4NCAgIFN1Ym5vcm1hbAorZm1heDM2NTczIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgMUUtMzg0ICAtPiAxLjFFLTM4MworZm1heDM2NTc0IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM4NCAgLT4gICA5RS0zODQgU3Vibm9ybWFsCisKKy0tIEhlcmUgd2UgZXhwbG9yZSB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgorZm1heDM2NTc1IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorZm1heDM2NTc2IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorZm1heDM2NTc3IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzY1Nzggc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzNjU3OSBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDM2NTgwIHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCisKKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQorLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitmbWF4MzY5NzIgYXBwbHkgICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitmbWF4MzY5NzMgZm1hICAxICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTc0IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk3NSBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk3NiBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk3NyBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOEUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk3OCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgN0UrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk3OSBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNkUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk4MCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk4MSBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNEUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTgyIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAzRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODMgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDJFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk4NCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY5ODUgYXBwbHkgICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZm1heDM2OTg2IGZtYSAgMSAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODcgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk4OCBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMUUrMzY5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODkgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTkwIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC04RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk5MSBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtN0UrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTIgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTZFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTkzIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC01RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk5NCBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNEUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk5NSBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtM0UrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk5NiBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMkUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk5NyBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMUUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzCityb3VuZGluZzogICAgIGRvd24KK2ZtYXgzNjExMDAgZm1hICAxICAgMWUrMiAtMWUtMzgzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTEwMSBmbWEgIDEgICAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTEwMyBmbWEgIDEgICAgICsxIC0xZS0zODMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDQgZm1hICAxICAgMWUtMSAtMWUtMzgzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTEwNSBmbWEgIDEgICAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTEwNiBmbWEgIDEgICAxZS0zIC0xZS0zODMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDcgZm1hICAxICAgMWUtNCAtMWUtMzgzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTEwOCBmbWEgIDEgICAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTEwOSBmbWEgIDEgICAxZS02IC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgIGNlaWxpbmcKK2ZtYXgzNjExMTAgZm1hICAxICAgLTFlKzIgKzFlLTM4MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMTEgZm1hICAxICAgLTFlKzEgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTEzIGZtYSAgMSAgICAgIC0xICsxZS0zODMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMTQgZm1hICAxICAgLTFlLTEgKzFlLTM4MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMTUgZm1hICAxICAgLTFlLTIgKzFlLTM4MyAgIC0+IC0wLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTE2IGZtYSAgMSAgIC0xZS0zICsxZS0zODMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMTcgZm1hICAxICAgLTFlLTQgKzFlLTM4MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMTggZm1hICAxICAgLTFlLTUgKzFlLTM4MyAgIC0+IC0wLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTE5IGZtYSAgMSAgIC0xZS02ICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCistLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQorcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4KKworZm1heDM2MTMwMCBmbWEgIDEgICAxRTE2ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMxMCBmbWEgIDEgICAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMxMSBmbWEgIDEgICAxRTE2ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMxMiBmbWEgIDEgICAxRTE2ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMxMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMxNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMxNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMxNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMxNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMxOCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMxOSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMyMCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMyMSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMyMiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMyMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMyNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMyNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMyNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMyNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMyOCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMyOSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMzMCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMzMSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMzMiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMzMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMzNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMzNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMzNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMzNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMzOCBmbWEgIDEgICAxRTE2ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTMzOSBmbWEgIDEgICAxRTE2ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorCitmbWF4MzYxMzQwIGZtYSAgMSAgIDFFMTYgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzQxIGZtYSAgMSAgIDFFMTYgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjEzNDkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzUwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzUzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzU2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzU5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzYyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzY1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzY5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzcyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzc1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzc4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzgxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzg0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzg3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzkwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM5MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzOTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzkzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM5NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzOTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzk2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZAorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMAorZm1heDM2MTQyMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQyMiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQyMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQyNSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQyNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03CitmbWF4MzYxNDI4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorZm1heDM2MTQyOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2ZtYXgzNjE0MzAgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZm1heDM2MTQzMSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCitmbWF4MzYxNDMyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2ZtYXgzNjE0MzMgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMworZm1heDM2MTQzNCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CitmbWF4MzYxNDM1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2ZtYXgzNjE0MzYgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZm1heDM2MTQzNyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CitmbWF4MzYxNDM4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2ZtYXgzNjE0MzkgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCByZXZlcnNlZCAwCitmbWF4MzYxNDQwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDQxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDQzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAwIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDQ0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDQ2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAwIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDQ3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03CitmbWF4MzYxNDQ4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CitmbWF4MzYxNDQ5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitmbWF4MzYxNDUwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZm1heDM2MTQ1MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2ZtYXgzNjE0NTIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitmbWF4MzYxNDUzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMworZm1heDM2MTQ1NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2ZtYXgzNjE0NTUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitmbWF4MzYxNDU2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZm1heDM2MTQ1NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2ZtYXgzNjE0NTggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitmbWF4MzYxNDU5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCBFcyBvbiB0aGUgMAorZm1heDM2MTQ2MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDYxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDY0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDY3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDcwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NzEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ3MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDczIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NzQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ3NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CistLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0CitmbWF4MzYxNDc2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZm1heDM2MTQ3NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2ZtYXgzNjE0NzggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitmbWF4MzYxNDc5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMAorcm91bmRpbmc6ICAgIGhhbGZfdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE1MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE1MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE1MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzNjE1MTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDM2MTUyMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTUyMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTUyMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTUyMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDM2MTUyNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTUyNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTUyNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTUyNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDM2MTUzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTUzMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTUzMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTUzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDM2MTUzNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTUzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTUzNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTUzOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzYxNTQwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTQxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTQyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTQzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzYxNTQ0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTQ1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTQ2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTQ3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzYxNTUxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTUyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTUzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTU0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzYxNTU1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTU2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTU3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTU4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICB1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDM2MTU2MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU2MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU2MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU2MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDM2MTU2NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU2NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU2NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU2NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDM2MTU3MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzNjE1NzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNTczIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTU3NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzNjE1NzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNTc2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTc3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTc4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCityb3VuZGluZzogICAgZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDM2MTU4MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU4MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU4MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU4MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDM2MTU4NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU4NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU4NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU4NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDM2MTU5MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU5MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU5MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU5NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDM2MTU5NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU5NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU5NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU5OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgY2VpbGluZworLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDM2MTYwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTYwMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTYwMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTYwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDM2MTYwNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTYwNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTYwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTYwNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDM2MTYxMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzNjE2MTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNjEzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNjE0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzYxNjE1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTYxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTYxNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTYxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoKK3JvdW5kaW5nOiAgICBmbG9vcgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDM2MTYyMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTYyMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZm1heDM2MTYyMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZm1heDM2MTYyMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDM2MTYyNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTYyNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDM2MTYyNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDM2MTYyNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDM2MTYzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTYzMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTYzMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzNjE2MzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzYxNjM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNjM2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCitmbWF4MzYxNjM3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCitmbWF4MzYxNjM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2ZtYXgzNjE3MDEgZm1hICAxICAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCitmbWF4MzYxNzAyIGZtYSAgMSAgIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorZm1heDM2MTcwMyBmbWEgIDEgICAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKK2ZtYXgzNjE3MDQgZm1hICAxICAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CitmbWF4MzYxNzA1IHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTAKK2ZtYXgzNjE3MDYgc3VidHJhY3QgMTMwRS0yICAxMkUtMSAgLT4gMC4xMAorZm1heDM2MTcwNyBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwCitmbWF4MzYxNzA4IHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMKKworLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcAorcm91bmRpbmc6IGhhbGZfZXZlbgorCitmbWF4MzYyMDAxIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcKK2ZtYXgzNjIwMDIgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDAzIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAwNCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMDUgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDA2IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAwNyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMDggZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDA5IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxMCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTEgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDEyIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxMyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTQgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDE1IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxNiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTcgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDE4IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxOSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMjAgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDIxIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorCistLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwCitmbWF4MzYyMDMwIGZtYSAgMSAgIDEyMzQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc5CitmbWF4MzYyMDMxIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEKK2ZtYXgzNjIwMzIgZm1hICAxICAgMTIzNDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIKK2ZtYXgzNjIwMzMgZm1hICAxICAgMTIzNDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzCitmbWF4MzYyMDM0IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQKK2ZtYXgzNjIwMzUgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDUKK2ZtYXgzNjIwMzYgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2CitmbWF4MzYyMDM3IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NjcKK2ZtYXgzNjIwMzggZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzgKK2ZtYXgzNjIwMzkgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQwIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0MSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDIgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0NCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDUgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQ2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0NyBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDggZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQ5IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjIwNTAgZm1hICAxICAgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDUxIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1MiBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNTMgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDU0IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1NSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNTYgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDU3IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2MCBmbWEgIDEgICAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjEgZm1hICAxICAgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDYyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2MyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjQgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDY1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2NiBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjcgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCistLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpCityb3VuZGluZzogdXAKK2ZtYXgzNjIwNzAgZm1hICAxICAgMTIzNDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEKK2ZtYXgzNjIwNzEgZm1hICAxICAgMTIzNDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDcyIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3MyBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzQgZm1hICAxICAgMTIzNDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDc1IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3NiBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzcgZm1hICAxICAgMTIzNDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDc4IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3OSBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODAgZm1hICAxICAgMTIzNDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDgxIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4MiBmbWEgIDEgICAxMjM0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODMgZm1hICAxICAgMTIzNDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDg0IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4NSBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODYgZm1hICAxICAgMTIzNDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDg3IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4OCBmbWEgIDEgICAxMjM0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODkgZm1hICAxICAgMTIzNDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIHBheWxvYWQgZGVjYXBpdGF0ZSB4MworcHJlY2lzaW9uOiA1CitmbWF4MzYzMDAwIGZtYSAgMSAxICBzTmFOMTIzNDU2Nzg5MCAgICAgLT4gIE5hTjY3ODkwICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2MzAwMSBmbWEgICAgMSAtc05hTjEyMzQ1MTIzNDUgMSAgIC0+IC1OYU4xMjM0NSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjMwMDIgZm1hICAgICAgIHNOYU4xMjM0NTU0MzIxIDEgMSAtPiAgTmFONTQzMjEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK2ZtYXgzOTk5MCBmbWEgIDEgICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzOTk5MSBmbWEgIDEgICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9pbnZlcnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9pbnZlcnQuZGVjVGVzdAppbmRleCA5ZWY1YTkxLi5hMmY3YmU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvaW52ZXJ0LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ludmVydC5kZWNUZXN0CkBAIC0xLDE3NiArMSwxNzYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGludmVydC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIElOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogOTk5DQotbWluRXhwb25lbnQ6IC05OTkNCi0NCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKSwgYW5kIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgNCi1pbnZ4MDAxIGludmVydCAgICAgICAgICAgICAwIC0+IDExMTExMTExMQ0KLWludngwMDIgaW52ZXJ0ICAgICAgICAgICAgIDEgLT4gMTExMTExMTEwDQotaW52eDAwMyBpbnZlcnQgICAgICAgICAgICAxMCAtPiAxMTExMTExMDENCi1pbnZ4MDA0IGludmVydCAgICAgMTExMTExMTExIC0+ICAgICAgICAgMA0KLWludngwMDUgaW52ZXJ0ICAgICAwMDAwMDAwMDAgLT4gMTExMTExMTExDQotaW52eDAwNiBpbnZlcnQgICAgIDEwMTAxMDEwMSAtPiAnMTAxMDEwMTAnDQotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCi1pbnZ4MDA3IGludmVydCAwMDAwMDAwMDAgLT4gICAxMTExMTExMTENCi1pbnZ4MDA5IGludmVydCAxMDAwMDAwMDAgLT4gICAgMTExMTExMTENCi1pbnZ4MDExIGludmVydCAwMDAwMDAwMDAgLT4gICAxMTExMTExMTENCi1pbnZ4MDEzIGludmVydCAwMTAwMDAwMDAgLT4gICAxMDExMTExMTENCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi0tLSAgICAgICAgICAgICAxMjM0NTY3ODkgICAgICAgICAxMjM0NTY3ODkNCi1pbnZ4MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+ICAwDQotaW52eDAyMiBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMA0KLWludngwMjMgaW52ZXJ0ICAxMTExMTExMSAgICAgLT4gIDEwMDAwMDAwMA0KLWludngwMjUgaW52ZXJ0ICAgMTExMTExMSAgICAgLT4gIDExMDAwMDAwMA0KLWludngwMjYgaW52ZXJ0ICAgIDExMTExMSAgICAgLT4gIDExMTAwMDAwMA0KLWludngwMjcgaW52ZXJ0ICAgICAxMTExMSAgICAgLT4gIDExMTEwMDAwMA0KLWludngwMjggaW52ZXJ0ICAgICAgMTExMSAgICAgLT4gIDExMTExMDAwMA0KLWludngwMjkgaW52ZXJ0ICAgICAgIDExMSAgICAgLT4gIDExMTExMTAwMA0KLWludngwMzEgaW52ZXJ0ICAgICAgICAxMSAgICAgLT4gIDExMTExMTEwMA0KLWludngwMzIgaW52ZXJ0ICAgICAgICAgMSAgICAgLT4gIDExMTExMTExMA0KLWludngwMzMgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gIDANCi1pbnZ4MDM0IGludmVydCAxMTExMTExMTExMSAgIC0+ICAwDQotaW52eDAzNSBpbnZlcnQgMTExMTExMTExMSAgICAtPiAgMA0KLWludngwMzYgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gIDANCi0NCi1pbnZ4MDgwIGludmVydCAwMTExMTExMTEgICAtPiAgMTAwMDAwMDAwDQotaW52eDA4MSBpbnZlcnQgMTAxMTExMTExICAgLT4gICAxMDAwMDAwMA0KLWludngwODIgaW52ZXJ0IDExMDExMTExMSAgIC0+ICAgIDEwMDAwMDANCi1pbnZ4MDgzIGludmVydCAxMTEwMTExMTEgICAtPiAgICAgMTAwMDAwDQotaW52eDA4NCBpbnZlcnQgMTExMTAxMTExICAgLT4gICAgICAxMDAwMA0KLWludngwODUgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAgICAgIDEwMDANCi1pbnZ4MDg2IGludmVydCAxMTExMTEwMTEgICAtPiAgICAgICAgMTAwDQotaW52eDA4NyBpbnZlcnQgMTExMTExMTAxICAgLT4gICAgICAgICAxMA0KLWludngwODggaW52ZXJ0IDExMTExMTExMCAgIC0+ICAgICAgICAgIDENCi1pbnZ4MDg5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTAwMDAwMTAwDQotaW52eDA5MCBpbnZlcnQgMTAxMTExMTAxICAgLT4gICAxMDAwMDAxMA0KLWludngwOTEgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAgIDEwMDAwMDENCi1pbnZ4MDkyIGludmVydCAxMTEwMTExMDEgICAtPiAgICAgMTAwMDEwDQotaW52eDA5MyBpbnZlcnQgMTExMTAxMDExICAgLT4gICAgICAxMDEwMA0KLWludngwOTQgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAgICAgIDEwMDANCi1pbnZ4MDk1IGludmVydCAxMTExMDEwMTEgICAtPiAgICAgIDEwMTAwDQotaW52eDA5NiBpbnZlcnQgMTExMDExMTAxICAgLT4gICAgIDEwMDAxMA0KLWludngwOTcgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAgIDEwMDAwMDENCi1pbnZ4MDk4IGludmVydCAxMDExMTExMDEgICAtPiAgIDEwMDAwMDEwDQotaW52eDA5OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDEwMDAwMDEwMA0KLQ0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KLWludngyMjAgaW52ZXJ0IDExMTExMTExMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjIxIGludmVydCAzMzMzMzMzMzMgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyMjMgaW52ZXJ0IDc3Nzc3Nzc3NyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjI0IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyMjYgaW52ZXJ0IDQ0NDQ0NDQ0NCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjI3IGludmVydCA2NjY2NjY2NjYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyMjkgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjMwIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyMzIgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhIGZldyByYW5kb21zDQotaW52eDI0MCBpbnZlcnQgIDU2NzQ2ODY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNDEgaW52ZXJ0ICA1NjczNjc2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjQyIGludmVydCAtNjMxOTE3NzcyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI0MyBpbnZlcnQgLTc1NjI1MzI1NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNDQgaW52ZXJ0ICA4MzU1OTAxNDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRA0KLWludngyNTAgaW52ZXJ0ICAyMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjUxIGludmVydCAgMzAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI1MiBpbnZlcnQgIDQwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNTMgaW52ZXJ0ICA1MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjU0IGludmVydCAgNjAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI1NSBpbnZlcnQgIDcwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNTYgaW52ZXJ0ICA4MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjU3IGludmVydCAgOTAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QtMQ0KLWludngyNzAgaW52ZXJ0ICAwMjEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjcxIGludmVydCAgMDMwMTAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI3MiBpbnZlcnQgIDA0MDAxMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNzMgaW52ZXJ0ICAwNTAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4Mjc0IGludmVydCAgMTYwMDAwMTAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI3NSBpbnZlcnQgIDE3MDAwMDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNzYgaW52ZXJ0ICAxODAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4Mjc3IGludmVydCAgMTkwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi1pbnZ4MjgwIGludmVydCAgMDAwMDAwMDAyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI4MSBpbnZlcnQgIDAwMDAwMDAwMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyODIgaW52ZXJ0ICAwMDAwMDAwMDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjgzIGludmVydCAgMDAwMDAwMDA1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI4NCBpbnZlcnQgIDEwMTAwMDAwNiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyODUgaW52ZXJ0ICAxMDAxMDAwMDcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4Mjg2IGludmVydCAgMTAwMDEwMDA4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI4NyBpbnZlcnQgIDEwMDAwMTAwOSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTWlkZGllDQotaW52eDI4OCBpbnZlcnQgIDAwMDAyMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyODkgaW52ZXJ0ICAwMDAwMzAwMDEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjkwIGludmVydCAgMDAwMDQwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI5MSBpbnZlcnQgIDAwMDA1MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyOTIgaW52ZXJ0ICAxMDEwNjAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjkzIGludmVydCAgMTAwMTcwMDEwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI5NCBpbnZlcnQgIDEwMDA4MDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyOTUgaW52ZXJ0ICAxMDAwOTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzaWducw0KLWludngyOTYgaW52ZXJ0IC0xMDAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4Mjk5IGludmVydCAgMTAwMDAxMDAwICAtPiAgMTExMTAxMTENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWludngzNDEgaW52ZXJ0ICA5Ljk5OTk5OTk5RSs5OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MzQyIGludmVydCAgMUUtOTk5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngzNDQgaW52ZXJ0ICAxRS0xMDA3ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MzQ1IGludmVydCAgLTFFLTEwMDcgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS05OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngzNDcgaW52ZXJ0ICAtMUUtOTk5ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MzQ4IGludmVydCAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQotaW52eDM2MSBpbnZlcnQgIDEuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngzNjIgaW52ZXJ0ICAxRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MzYzIGludmVydCAgMC4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDM2NCBpbnZlcnQgIDBFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngzNjUgaW52ZXJ0ICA5LjkgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MzY2IGludmVydCAgOUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KLWludng3ODggaW52ZXJ0IC1JbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4Nzk0IGludmVydCAgSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDgyMSBpbnZlcnQgIE5hTiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NDEgaW52ZXJ0ICBzTmFOICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotaW52eDg2MSBpbnZlcnQgIE5hTjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg2MiBpbnZlcnQgK05hTjIgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg2MyBpbnZlcnQgIE5hTjMgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg2NCBpbnZlcnQgIE5hTjQgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg2NSBpbnZlcnQgIE5hTjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg3MSBpbnZlcnQgIHNOYU4xMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg3MiBpbnZlcnQgIHNOYU4xMiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg3MyBpbnZlcnQgIHNOYU4xMyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg3NCBpbnZlcnQgIHNOYU4xNCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg3NSBpbnZlcnQgIHNOYU4xNSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg3NiBpbnZlcnQgIE5hTjE2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg4MSBpbnZlcnQgK05hTjI1ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg4MiBpbnZlcnQgLU5hTjI2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDg4MyBpbnZlcnQgLXNOYU4yNyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBpbnZlcnQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpLCBhbmQgZXhhbXBsZXMgZnJvbSBkZWNBcml0aAoraW52eDAwMSBpbnZlcnQgICAgICAgICAgICAgMCAtPiAxMTExMTExMTEKK2ludngwMDIgaW52ZXJ0ICAgICAgICAgICAgIDEgLT4gMTExMTExMTEwCitpbnZ4MDAzIGludmVydCAgICAgICAgICAgIDEwIC0+IDExMTExMTEwMQoraW52eDAwNCBpbnZlcnQgICAgIDExMTExMTExMSAtPiAgICAgICAgIDAKK2ludngwMDUgaW52ZXJ0ICAgICAwMDAwMDAwMDAgLT4gMTExMTExMTExCitpbnZ4MDA2IGludmVydCAgICAgMTAxMDEwMTAxIC0+ICcxMDEwMTAxMCcKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitpbnZ4MDA3IGludmVydCAwMDAwMDAwMDAgLT4gICAxMTExMTExMTEKK2ludngwMDkgaW52ZXJ0IDEwMDAwMDAwMCAtPiAgICAxMTExMTExMQoraW52eDAxMSBpbnZlcnQgMDAwMDAwMDAwIC0+ICAgMTExMTExMTExCitpbnZ4MDEzIGludmVydCAwMTAwMDAwMDAgLT4gICAxMDExMTExMTEKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgICAgICAxMjM0NTY3ODkgICAgICAgICAxMjM0NTY3ODkKK2ludngwMjEgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gIDAKK2ludngwMjIgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gIDAKK2ludngwMjMgaW52ZXJ0ICAxMTExMTExMSAgICAgLT4gIDEwMDAwMDAwMAoraW52eDAyNSBpbnZlcnQgICAxMTExMTExICAgICAtPiAgMTEwMDAwMDAwCitpbnZ4MDI2IGludmVydCAgICAxMTExMTEgICAgIC0+ICAxMTEwMDAwMDAKK2ludngwMjcgaW52ZXJ0ICAgICAxMTExMSAgICAgLT4gIDExMTEwMDAwMAoraW52eDAyOCBpbnZlcnQgICAgICAxMTExICAgICAtPiAgMTExMTEwMDAwCitpbnZ4MDI5IGludmVydCAgICAgICAxMTEgICAgIC0+ICAxMTExMTEwMDAKK2ludngwMzEgaW52ZXJ0ICAgICAgICAxMSAgICAgLT4gIDExMTExMTEwMAoraW52eDAzMiBpbnZlcnQgICAgICAgICAxICAgICAtPiAgMTExMTExMTEwCitpbnZ4MDMzIGludmVydCAxMTExMTExMTExMTEgIC0+ICAwCitpbnZ4MDM0IGludmVydCAxMTExMTExMTExMSAgIC0+ICAwCitpbnZ4MDM1IGludmVydCAxMTExMTExMTExICAgIC0+ICAwCitpbnZ4MDM2IGludmVydCAxMTExMTExMTEgICAgIC0+ICAwCisKK2ludngwODAgaW52ZXJ0IDAxMTExMTExMSAgIC0+ICAxMDAwMDAwMDAKK2ludngwODEgaW52ZXJ0IDEwMTExMTExMSAgIC0+ICAgMTAwMDAwMDAKK2ludngwODIgaW52ZXJ0IDExMDExMTExMSAgIC0+ICAgIDEwMDAwMDAKK2ludngwODMgaW52ZXJ0IDExMTAxMTExMSAgIC0+ICAgICAxMDAwMDAKK2ludngwODQgaW52ZXJ0IDExMTEwMTExMSAgIC0+ICAgICAgMTAwMDAKK2ludngwODUgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAgICAgIDEwMDAKK2ludngwODYgaW52ZXJ0IDExMTExMTAxMSAgIC0+ICAgICAgICAxMDAKK2ludngwODcgaW52ZXJ0IDExMTExMTEwMSAgIC0+ICAgICAgICAgMTAKK2ludngwODggaW52ZXJ0IDExMTExMTExMCAgIC0+ICAgICAgICAgIDEKK2ludngwODkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+ICAxMDAwMDAxMDAKK2ludngwOTAgaW52ZXJ0IDEwMTExMTEwMSAgIC0+ICAgMTAwMDAwMTAKK2ludngwOTEgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAgIDEwMDAwMDEKK2ludngwOTIgaW52ZXJ0IDExMTAxMTEwMSAgIC0+ICAgICAxMDAwMTAKK2ludngwOTMgaW52ZXJ0IDExMTEwMTAxMSAgIC0+ICAgICAgMTAxMDAKK2ludngwOTQgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAgICAgIDEwMDAKK2ludngwOTUgaW52ZXJ0IDExMTEwMTAxMSAgIC0+ICAgICAgMTAxMDAKK2ludngwOTYgaW52ZXJ0IDExMTAxMTEwMSAgIC0+ICAgICAxMDAwMTAKK2ludngwOTcgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAgIDEwMDAwMDEKK2ludngwOTggaW52ZXJ0IDEwMTExMTEwMSAgIC0+ICAgMTAwMDAwMTAKK2ludngwOTkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+ICAxMDAwMDAxMDAKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitpbnZ4MjIwIGludmVydCAxMTExMTExMTIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjIxIGludmVydCAzMzMzMzMzMzMgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjIyIGludmVydCA1NTU1NTU1NTUgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjIzIGludmVydCA3Nzc3Nzc3NzcgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjI0IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjI1IGludmVydCAyMjIyMjIyMjIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjI2IGludmVydCA0NDQ0NDQ0NDQgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjI3IGludmVydCA2NjY2NjY2NjYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjI4IGludmVydCA4ODg4ODg4ODggICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjI5IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjMwIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjMxIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjMyIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitpbnZ4MjQwIGludmVydCAgNTY3NDY4Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjQxIGludmVydCAgNTY3MzY3Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjQyIGludmVydCAtNjMxOTE3NzcyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjQzIGludmVydCAtNzU2MjUzMjU3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjQ0IGludmVydCAgODM1NTkwMTQ5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAoraW52eDI1MCBpbnZlcnQgIDIwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI1MSBpbnZlcnQgIDMwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI1MiBpbnZlcnQgIDQwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI1MyBpbnZlcnQgIDUwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI1NCBpbnZlcnQgIDYwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI1NSBpbnZlcnQgIDcwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI1NiBpbnZlcnQgIDgwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI1NyBpbnZlcnQgIDkwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQoraW52eDI3MCBpbnZlcnQgIDAyMTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI3MSBpbnZlcnQgIDAzMDEwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI3MiBpbnZlcnQgIDA0MDAxMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI3MyBpbnZlcnQgIDA1MDAwMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI3NCBpbnZlcnQgIDE2MDAwMDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI3NSBpbnZlcnQgIDE3MDAwMDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI3NiBpbnZlcnQgIDE4MDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI3NyBpbnZlcnQgIDE5MDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2ludngyODAgaW52ZXJ0ICAwMDAwMDAwMDIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyODEgaW52ZXJ0ICAwMDAwMDAwMDMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyODIgaW52ZXJ0ICAwMDAwMDAwMDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyODMgaW52ZXJ0ICAwMDAwMDAwMDUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyODQgaW52ZXJ0ICAxMDEwMDAwMDYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyODUgaW52ZXJ0ICAxMDAxMDAwMDcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyODYgaW52ZXJ0ICAxMDAwMTAwMDggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyODcgaW52ZXJ0ICAxMDAwMDEwMDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitpbnZ4Mjg4IGludmVydCAgMDAwMDIwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjg5IGludmVydCAgMDAwMDMwMDAxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjkwIGludmVydCAgMDAwMDQwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjkxIGludmVydCAgMDAwMDUwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjkyIGludmVydCAgMTAxMDYwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjkzIGludmVydCAgMTAwMTcwMDEwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjk0IGludmVydCAgMTAwMDgwMTAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjk1IGludmVydCAgMTAwMDkxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworaW52eDI5NiBpbnZlcnQgLTEwMDAwMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5OSBpbnZlcnQgIDEwMDAwMTAwMCAgLT4gIDExMTEwMTExCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitpbnZ4MzQxIGludmVydCAgOS45OTk5OTk5OUUrOTk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzQyIGludmVydCAgMUUtOTk5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzQzIGludmVydCAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzQ0IGludmVydCAgMUUtMTAwNyAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzQ1IGludmVydCAgLTFFLTEwMDcgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzQ2IGludmVydCAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzQ3IGludmVydCAgLTFFLTk5OSAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzQ4IGludmVydCAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworaW52eDM2MSBpbnZlcnQgIDEuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM2MiBpbnZlcnQgIDFFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM2MyBpbnZlcnQgIDAuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM2NCBpbnZlcnQgIDBFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM2NSBpbnZlcnQgIDkuOSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM2NiBpbnZlcnQgIDlFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitpbnZ4Nzg4IGludmVydCAtSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Nzk0IGludmVydCAgSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODIxIGludmVydCAgTmFOICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODQxIGludmVydCAgc05hTiAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitpbnZ4ODYxIGludmVydCAgTmFOMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NjIgaW52ZXJ0ICtOYU4yICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg2MyBpbnZlcnQgIE5hTjMgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODY0IGludmVydCAgTmFONCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NjUgaW52ZXJ0ICBOYU41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg3MSBpbnZlcnQgIHNOYU4xMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODcyIGludmVydCAgc05hTjEyICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NzMgaW52ZXJ0ICBzTmFOMTMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg3NCBpbnZlcnQgIHNOYU4xNCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODc1IGludmVydCAgc05hTjE1ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NzYgaW52ZXJ0ICBOYU4xNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg4MSBpbnZlcnQgK05hTjI1ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODgyIGludmVydCAtTmFOMjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4ODMgaW52ZXJ0IC1zTmFOMjcgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xuLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG4uZGVjVGVzdAppbmRleCBlZmNiMmE2Li5mNjAyYWYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG4uZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG4uZGVjVGVzdApAQCAtMSw2MTEgKzEsNjExIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBsbi5kZWNUZXN0IC0tIGRlY2ltYWwgbmF0dXJhbCBsb2dhcml0aG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgMTYNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotLS0gYmFzaWNzIChleGFtcGxlcyBpbiBzcGVjaWZpY2F0aW9uKQ0KLXByZWNpc2lvbjogOQ0KLWxueHMwMDEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxueHMwMDIgbG4gIDEuMDAwICAgICAgICAgICAgIC0+ICAgMA0KLWxueHMwMDMgbG4gIDIuNzE4MjgxODMgICAgICAgIC0+ICAgMS4wMDAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueHMwMDQgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMi4zMDI1ODUwOSAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueHMwMDUgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KLQ0KLQ0KLS0tIGJhc2ljcw0KLXByZWNpc2lvbjogICAxNg0KLWxueDAwMDEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxueDAwMDIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yMC43MjMyNjU4MzY5NDY0MSAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMDMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNy4yNjQ0MzAyMjI5MjA4NjkgIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMDQgbG4gIDAuMSAgICAgICAgICAgICAgIC0+ICAtMi4zMDI1ODUwOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMDUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC4zNTY2NzQ5NDM5Mzg3MzI0IEluZXhhY3QgUm91bmRlZA0KLWxueDAwMDYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMA0KLWxueDAwMDcgbG4gIDEuMDAwICAgICAgICAgICAgIC0+ICAgMA0KLWxueDAwMDggbG4gIDEuNSAgICAgICAgICAgICAgIC0+ICAgMC40MDU0NjUxMDgxMDgxNjQ0IEluZXhhY3QgUm91bmRlZA0KLWxueDAwMDkgbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC42OTMxNDcxODA1NTk5NDUzIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMTAgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWxueDAwMTEgbG4gIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMTIgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMTMgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMi4zMDI1ODUwOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMTQgbG4gIDEwLjUgICAgICAgICAgICAgIC0+ICAgMi4zNTEzNzUyNTcxNjM0NzggIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMTUgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOS4yMTAyNDAzNjY5NzU4NDkgIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMTYgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxMy44MTU1MTA1NTc5NjQyNyAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMTcgbG4gIDFFKzkgICAgICAgICAgICAgIC0+ICAyMC43MjMyNjU4MzY5NDY0MSAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMTggbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KLQ0KLS0tIG5vdGFibGUgY2FzZXMNCi0tLSBuZWdhdGl2ZXMNCi1sbngwMDIxIGxuIC0xRS05ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDIyIGxuIC0wLjAwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDIzIGxuIC0wLjEgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDI0IGxuIC0wLjcgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDI1IGxuIC0xICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDI2IGxuIC0xLjUgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDI3IGxuIC0yICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDI5IGxuIC0xMC41ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDI4IGxuIC05OTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDMwIGxuIC0yLjcxODI4MTgyODQ1OTA0NSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDMxIGxuIC0yLjcxODI4MTgyODQ1OTA0NiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDMyIGxuIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1sbngwMDMzIGxuIC0wRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1sbngwMDM0IGxuIC0wRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi0tLSBvdGhlciB6ZXJvcw0KLWxueDAwNDEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxueDAwNDIgbG4gIDBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxueDAwNDMgbG4gIDBFLTE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLS0tIGluZmluaXRpZXMNCi1sbngwMDQ1IGxuIC1JbmZpbml0eSAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sbngwMDQ2IGxuICtJbmZpbml0eSAgICAgICAgICAtPiBJbmZpbml0eQ0KLS0tIG9uZXMNCi1sbngwMDUwIGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDANCi1sbngwMDUxIGxuICAxLjAgICAgICAgICAgICAgICAtPiAgIDANCi1sbngwMDUyIGxuICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDANCi1sbngwMDUzIGxuICAxLjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDANCi0NCi0tLSBsb3dlciBwcmVjaXNpb24gYmFzaWNzDQotUHJlY2lzaW9uOiA3DQotbG54MDEwMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotbG54MDEwMiBsbiAgMUUtOSAgICAgICAgICAgICAgLT4gLTIwLjcyMzI3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEwMyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03LjI2NDQzMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEwNCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yLjMwMjU4NSAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEwNSBsbiAgMC43ICAgICAgICAgICAgICAgLT4gIC0wLjM1NjY3NDkgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEwNiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwDQotbG54MDEwNyBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQwNTQ2NTEgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEwOCBsbiAgMiAgICAgICAgICAgICAgICAgLT4gICAwLjY5MzE0NzIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEwOSBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAxLjAwMDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDExMCBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxLjAwMDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDExMSBsbiAgMi43MTgyODE4Mjg0NTkwNDcgLT4gICAxLjAwMDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDExMiBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMwMjU4NSAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDExMyBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyLjM1MTM3NSAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDExNCBsbiAgOTk5OSAgICAgICAgICAgICAgLT4gICA5LjIxMDI0MCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDExNSBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDEzLjgxNTUxICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDExNiBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDIwLjcyMzI3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDExNyBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQotUHJlY2lzaW9uOiAyDQotbG54MDEyMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotbG54MDEyMiBsbiAgMUUtOSAgICAgICAgICAgICAgLT4gLTIxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEyMyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03LjMgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEyNCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yLjMgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEyNSBsbiAgMC43ICAgICAgICAgICAgICAgLT4gIC0wLjM2ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEyNiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwDQotbG54MDEyNyBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQxICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEyOCBsbiAgMiAgICAgICAgICAgICAgICAgLT4gICAwLjY5ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEyOSBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAxLjAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEzMCBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxLjAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEzMSBsbiAgMi43MTgyODE4Mjg0NTkwNDcgLT4gICAxLjAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEzMiBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEzMyBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyLjQgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEzNCBsbiAgOTk5OSAgICAgICAgICAgICAgLT4gICA5LjIgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEzNSBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDE0ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEzNiBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDIxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEzNyBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQotUHJlY2lzaW9uOiAxDQotbG54MDE0MSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotbG54MDE0MiBsbiAgMUUtOSAgICAgICAgICAgICAgLT4gLTJFKzEgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE0MyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE0NCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE0NSBsbiAgMC43ICAgICAgICAgICAgICAgLT4gIC0wLjQgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE0NiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwDQotbG54MDE0NyBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE0OCBsbiAgMiAgICAgICAgICAgICAgICAgLT4gICAwLjcgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE0OSBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE1MCBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE1MSBsbiAgMi43MTgyODE4Mjg0NTkwNDcgLT4gICAxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE1MiBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE1MyBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE1NCBsbiAgOTk5OSAgICAgICAgICAgICAgLT4gICA5ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE1NSBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDFFKzEgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE1NiBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDJFKzEgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE1NyBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQotDQotLS0gZ3JvdXAgbG93LXByZWNpc2lvbiBsbigxKXM6DQotcHJlY2lzaW9uOiAxDQotbG54MDE2MSBsbiAgMSAtPiAwDQotcHJlY2lzaW9uOiAyDQotbG54MDE2MiBsbiAgMSAtPiAwDQotcHJlY2lzaW9uOiAzDQotbG54MDE2MyBsbiAgMSAtPiAwDQotcHJlY2lzaW9uOiA0DQotbG54MDE2NCBsbiAgMSAtPiAwDQotcHJlY2lzaW9uOiA1DQotbG54MDE2NSBsbiAgMSAtPiAwDQotcHJlY2lzaW9uOiA2DQotbG54MDE2NiBsbiAgMSAtPiAwDQotcHJlY2lzaW9uOiA3DQotbG54MDE2NyBsbiAgMSAtPiAwDQotcHJlY2lzaW9uOiA4DQotbG54MDE2OCBsbiAgMSAtPiAwDQotDQotLS0gZWRnZS10ZXN0IGxuKDIpIGFuZCBsbigxMCkgaW4gY2FzZSBvZiBsb29rYXNpZGVzDQotcHJlY2lzaW9uOiA0NQ0KLWxueDIwMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAxMzQgIEluZXhhY3QgUm91bmRlZA0KLWxueDIwMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMDE0OSAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNDQNCi1sbngyMDMgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwMTMgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMDQgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNSAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQzDQotbG54MjA1ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwMDEgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MjA2ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwMSAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0Mg0KLWxueDIwNyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDIwOCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNDENCi1sbngyMDkgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMTAgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQwDQotbG54MjExICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MjEyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzOQ0KLWxueDIxMyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzYgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDIxNCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzgNCi1sbngyMTUgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDggICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMTYgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDM3DQotbG54MjE3ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODEgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MjE4ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwOCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzNg0KLWxueDIxOSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjggICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDIyMCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMSAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzUNCi1sbngyMjEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMjIgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDM0DQotbG54MjIzICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjYgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MjI0ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NCAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzMw0KLWxueDIyNSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDIyNiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNiAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzINCi1sbngyMjcgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMjggIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0NCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDMxDQotbG54MjI5ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODIgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MjMwICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzMA0KLWxueDIzMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTggICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDIzMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2OCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGV4dHJlbWUgaW5wdXQgcmFuZ2UgdmFsdWVzDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotUHJlY2lzaW9uOiAxNg0KLQ0KLWxueDA5MDEgbG4gMWUtNDAwICAgIC0+IC05MjEuMDM0MDM3MTk3NjE4MyAgSW5leGFjdCBSb3VuZGVkDQotbG54MDkwMiBsbiAxZSs0MDAgICAgLT4gIDkyMS4wMzQwMzcxOTc2MTgzICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwOTAzIGxuIDFlLTk5OTk5OSAtPiAtMjMwMjU4Mi43OTA0MDg5NTMgIEluZXhhY3QgUm91bmRlZA0KLWxueDA5MDQgbG4gMWUrOTk5OTk5IC0+ICAyMzAyNTgyLjc5MDQwODk1MyAgSW5leGFjdCBSb3VuZGVkDQotbG54MDkwNSBsbiAxZS0xMDAwMDEzICAgICAgICAgICAgICAgIC0+IC0yMzAyNjE1LjAyNjYwMDI1NSAgSW5leGFjdCBSb3VuZGVkDQotbG54MDkwNiBsbiAyZS0xMDAwMDEzICAgICAgICAgICAgICAgIC0+IC0yMzAyNjE0LjMzMzQ1MzA3NCAgSW5leGFjdCBSb3VuZGVkDQotDQotbG54MDkxMCBsbiA5Ljk5OTk5OWUrOTk5OTk5ICAgICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5Mzk0NiAgSW5leGFjdCBSb3VuZGVkDQotbG54MDkxMSBsbiA5Ljk5OTk5OTllKzk5OTk5OSAgICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDAzNiAgSW5leGFjdCBSb3VuZGVkDQotbG54MDkxMiBsbiA5Ljk5OTk5OTk5ZSs5OTk5OTkgICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDA0NSAgSW5leGFjdCBSb3VuZGVkDQotbG54MDkxMyBsbiA5Ljk5OTk5OTk5OWUrOTk5OTk5ICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkDQotbG54MDkxNCBsbiA5Ljk5OTk5OTk5OTk5OWUrOTk5OTk5ICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkDQotbG54MDkxNSBsbiA5Ljk5OTk5OTk5OTk5OTk5OWUrOTk5OTk5IC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkDQotbG54MDkxNiBsbiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUrOTk5OTk5IC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gcmFuZG9tcw0KLS0tIFA9NTAsIHdpdGhpbiAwLTk5OQ0KLVByZWNpc2lvbjogNTANCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1sbngxNTAxIGxuIDAuMDAwOTg4MDA5MDY1NzQ0ODYzODg2MDQ2MDg0Nzc4Njk4MTI1MTg4NTcwMjM3Njg5NTEgLT4gLTYuOTE5ODE4Njg0NDAzMzc4Nzk5NTk0NTE0NzgzNjk1NTU4NjAwOTU0ODUxMzA0MzY4OSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTAyIGxuIDE1OC4xNTg2NjYyNDY2NDYyMzA3MDE4NDU5NTA0NTMwNDE0NTk0OTkwMDcxNDk4NzgyNyAgLT4gNS4wNjM1OTg3NDU4ODk1NjQ3NDU0OTA3ODA2NTA3NTAzODI1NjAyNzU4MzkyMjg3Njg0IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MDMgbG4gMC4wMDU2NTY2MTQxMjA1OTU3MTkyNTA0MDI4NTgxNDAyMTc5OTc3NTI0OTI4ODMwOTMyMSAtPiAtNS4xNzQ5Mjk3Nzc2NzYwNjMyMTAyMDQ3NTQwMzAwNDkxNTUwOTMxNjUxMzE4OTc1MjM3IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MDQgbG4gMC4wMDAwMDAwNjkxNDIzMjUzMjYyMDQ4OTYwMjAwODQwMjA5MTY2NjU0NzkwMzE4MDYwNyAtPiAtMTYuNDg3MDk4NzcwODc3ODI1MzA4MTM4OTc2ODE4Njg4NzcxNjM4MTcyMzMzMDM0MzQ3IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MDUgbG4gMC4wMDAyNTM4MDM3NDYyMTI5NzY1NzUwNDY2MTU0MDc0OTM1NTI1MTIzMTc3MDA3MDcyMyAtPiAtOC4yNzg5NDkyNDIzMDA1MDAzMjA1MjQyMTYyNzQxNTY5MDMzMTI0MjYwMzIxOTU0NTg5IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MDYgbG4gODMuMDMzNjU0MDYzODc3NDI2MjYxMTA4NTkyNTk5MTgyNDE4OTUzNDQyNjc3NTU0ODA2ICAtPiA0LjQxOTI0NTk5NjI2NDcxMzc5NzY5NDkyNDk4MTA4MTU2OTg0NjUwMzE2MDk4NDM2NjkgSW5leGFjdCBSb3VuZGVkDQotbG54MTUwNyBsbiAwLjAwMDAwMDAwNDE2ODYzMjI4MDkyNDgxNjUxNjI3NzM0NjY4NDQwNjYzNjc4MTE4NzI5IC0+IC0xOS4yOTU2Nzc4NDUxMjIxNDE3NzI3OTEyOTQ1OTk3MTQ5NTAxNzUyODQ5MTU2NjY0MzAgSW5leGFjdCBSb3VuZGVkDQotbG54MTUwOCBsbiAwLjAwMDAwMTQwODQ3ODczMTg3ODIwNTcwMTgxMjE0MjcxOTYwNTExMDgwNTIzNDU3NjY5IC0+IC0xMy40NzMwMDAzNDk1ODE5NjcxODk2NjgzMDUzMTQzODQ5NTIyNTE1NTY4MDk0ODAzMzkgSW5leGFjdCBSb3VuZGVkDQotbG54MTUwOSBsbiA2Ni4xNzYxMDY1NTUxODE1MjcxMDE2MzAzNTExMjc1ODM5NDQ2ODk3NTIwNjkxMzI1MjIgIC0+IDQuMTkyMzE5NDY5NjIzMjUwNTg4MzY2NjE3MTExNjk2NjEzNzY5NDAxMzQzMTUwNDI1MiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTEwIGxuIDAuMDAwMDAwMDAwMDAwMDk4OTkwNDM0ODc0MDM1OTA5MDAxMTE2MDIwMjQ1NjIyOTc5MDggLT4gLTI5Ljk0Mzc1MzE2Njg3Nzg0MDk4NTgyMTUwODExMjkxNzk5MTUwNjY1NjU0NTE3NDE2MyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTExIGxuIDAuMDAwMDAwMDAwMDAzMjQ2MTgyOTY3MjE3NDcwOTc1MTA0NTMzODg2ODM5MTI3MzM1NjkgLT4gLTI2LjQ1MzU0MTI4MTQ0NDU4NjgxOTAwOTU0NjQxODU3NzUwNzE2MzM2MjU5MDEzOTQyMiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTEyIGxuIDcyLjY0Njk2ODgxODQ2MzU0NjQ0OTQ5OTE0NzU3OTAyMzU1NTAwODM5Mjg2MDQyMzM4NSAgLT4gNC4yODU2MTE2NjYwNjg5NjQ2ODgyODUyMTI4ODUzNDIzNTY2Mjc2NzE4MjMwNDI2NDc5IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MTMgbG4gMC4wMDAwMDAwMDAwMDAwMDA2Njc1NTQ4MzEyNDYzNTYxMjU3NDI2MzE1MzgyNTk5MDUyMyAtPiAtMzQuOTQyOTEwMTQyODAyNzY5MzE5MjYyODc1MDgwMzk4ODUyNDkxNTg4NzA3MTcyNDgzIEluZXhhY3QgUm91bmRlZA0KLWxueDE1MTQgbG4gNjEuMDAyOTEwNDQ3MjAyMzk4MjA0MTE0OTA5NDUxODUxMTExNDI0NjU3NjcxOTExMDAyICAtPiA0LjExMDkyMTU3NTI4NDMzNzczMjMzNjMxODIwNTE0NDYxNzcwNjY0MzQwMzgwOTY1MjkgSW5leGFjdCBSb3VuZGVkDQotbG54MTUxNSBsbiA5MTcuMDY5MTc2MTEzMzE5ODA5OTkyMjc4OTM1ODQwMTA1NDQ1NDIzMTIyMzkxNzQ3NzQgIC0+IDYuODIxMTgyOTA2ODMwMzExNDEyODc1MjQ1MzY2MTk0NjQ0Njk3OTc4NzgyNjI4MjkwNyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTE2IGxuIDAuMDAwMDAwMDAxNzA4MjM3OTQ4ODM2NzMwODMzNTg1NDk3NDkwNzg5NzIwMDM5NjUxOTQgLT4gLTIwLjE4NzgwMzQzNjk3NjE1MDQ3NzI5NzI0NjY2Njc3MTYyNjgyNzA1NzE5MTAyMzAwNCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTE3IGxuIDAuNTM3MzE3Njc4NDUzNTgyMjQ0NDU4MDk3NjEzMTUxNTkyNDk4OTg1NjY1NDI5MTA2NDkgLT4gLTAuNjIxMTY1Nzc5Mzk5Njg0MDkyMTE3MzY0MTM2MjgyMzYyODUxNjAwNDgzNTcwMDA5NjEgSW5leGFjdCBSb3VuZGVkDQotbG54MTUxOCBsbiAwLjAwMDAwMDAwMDAwMDAwMDA4OTY1MjkxMzkyODgyODA0MTYxMjk5NzU4NzA4MDMzMzczIC0+IC0zNi45NTA1ODU5NzA5ODA4NTczNzYwODEyNjUwNzMyNzYzMDM2NzA4MjAwNTY5MTYyMDYgSW5leGFjdCBSb3VuZGVkDQotbG54MTUxOSBsbiAwLjAwMDAwMDAwMDA2OTkwMjQ0OTE2MDI2NDI5OTA0NDk4Mjc4OTgyNTMwMTcwMjk1NjY4IC0+IC0yMy4zODM5MjA0MjkyNDQ0NTc1NzgzNzM1MjM1MDg0Mjc3ODMxNDQ1ODk0ODA0MjA3NTMgSW5leGFjdCBSb3VuZGVkDQotbG54MTUyMCBsbiA0LjAzMTI1NDI5NzcwNzAzMDAwNzA1MDYwNjQ2NjY1MzY0NzgzNzM4MDE5ODg1NDA2MTQgIC0+IDEuMzk0MDc3NTY3NjU5MjQ1MTk0NTc5NTc1Mjc5NjQyMTM5MTg3MTMwMjAyNDc2MzMwNSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTIxIGxuIDI3MS44NDk5MTMxMTU1MTg3NTYwMTQzMjUxODgxOTU2MjM5MTY5OTMyNDYzMjM5NjQyMyAgLT4gNS42MDUyNTAxMjM5ODczODYyNTE3OTE2Njc5NzQ3MTQ2NTM5ODA4MDc3NDMxODczNDc4IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MjIgbG4gNy40MTE4NjcxNjI5MzczODY0NjY3MjI5NDQ1NzQ2ODYyMzE0NDQzODk1NDA0ODE4Njg5ICAtPiAyLjAwMzA4MjM4NjM3MDYzNDQ2MjgyMzkxNDc2MzkzMTgyODk5NjE5MTcwNjAxMjExNDEgSW5leGFjdCBSb3VuZGVkDQotbG54MTUyMyBsbiAwLjAwMDAwMDAwMDAwMDAyMDI2MzExNDUyNjI1MzY0OTA1MzU3MzIxNjY0MTg2MDM0MjU4IC0+IC0zMS41Mjk5NzQxODAwNTQ0Mzg3OTIwNDM4NTY4NzczMTQwNDM3OTQzMjA5NTExMzQ3NTQgSW5leGFjdCBSb3VuZGVkDQotbG54MTUyNCBsbiAwLjAwMDAwMDAwMDAwMDA5NTYzMzk4NjUxMjYxNzU2OTUyMzk4MjUwNjI0NzM3ODA5MzQ3IC0+IC0yOS45NzgyNDgxMzA1NzY5NzI5NTMxNDEyODQxMzY5NjI2NzAwMjEzNjg4MzQ3OTI1NzkgSW5leGFjdCBSb3VuZGVkDQotbG54MTUyNSBsbiAwLjAwMDAwMDAwMDA5NTU2NzcyNjY5NDA5ODU4NjUzMDI2NTU4MjIzNDY1MTk3ODA4OTkxIC0+IC0yMy4wNzExODU5Mzk3NDgyODU1NDEyMjgyMDYxNjE0NzI5NTY2NjExOTY5NTY3NDExODYgSW5leGFjdCBSb3VuZGVkDQotbG54MTUyNiBsbiA2Ljg0NDE2NDgyOTgwMjczMDEyOTIzNDIwNTcyNDg3MzczMjYxNTIyNTA3OTQwMjY3NjEgIC0+IDEuOTIzMzk2NDM5NTgwMTk0NjU5NzI3MjU4OTQ3MzQxNzk0ODAyNDM2MTAwNTA4MjkwOCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTI3IGxuIDAuMDAwMDAwMDAwMDAwNzMwNTk2OTk4ODQ0Mzk5NzkzOTQ5NDU4MjIwMzU3MDQyNjQ1NzcgLT4gLTI3Ljk0NDkxNDM4ODM1MzcyNDcxODgzNjEwMTgyODY3Nzc3MTk2NzEyODUwOTYwMzE1OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTI4IGxuIDAuMDAwMDAwMDAwMDAwMDAwMDI2MTAwNzgyODA0MTkwODIyNjMxMzgwNjQ3NDU0MTY3ODcgLT4gLTM4LjE4NDU2NjM2NzUxNjIwNzg4NTU3Mzc3MzMyMDEzNTk2NTc5ODcxNzEyMDczNTExNSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTI5IGxuIDAuMDAwMDAwMDAwMDAwMDAwMDAxNTAyNTk1MTcxNjYyOTQyNDMwODg1NDY4MDYwODMyODMgLT4gLTQxLjAzOTMzNzk0NjI2NjY3NjEwODUzODE3MDgzNzU4MDA1MTY5OTYxODMzNDkyODQyMSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTMwIGxuIDAuMDAwMDAwMDAwMDAwMDAwODc5MTkxNjA1NDE3MTQ1ODA3MDcxODE5Njk3MDg1MDIwOTEgLT4gLTM0LjY2NzUyODgxODgyNzY3MTUwNzUxNDMxOTc0NDA0NzQ0MDY5NjE4NzM1ODY3Njg0OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTMxIGxuIDAuMDAwMDAwMDAwMDAzOTU3MjY3MjUxMjA3ODc3NjMyNzE4NDk1Nzc3MDgwNjg1ODQ1OTggLT4gLTI2LjI1NTQ2NzQxNjk2MTM1Nzc0MTgxODczNTc4NzIyNjY3MTkzODY3ODQyNDc0ODQzMSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTMyIGxuIDAuMDAwMDAwMDAwMDIwMTQzMzQ5MDE2NjkzNjYyMTgwMTgzNzcyMTMxNTA3MTU5MzgzNTUgLT4gLTI0LjYyODE0Njk1NTYzNTM1OTAzNTI4OTEyMzAyNzMxOTk2OTIwMTY5MzczNzE1OTEwOCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTMzIGxuIDAuMDAwMDAwMDgwOTc5MjcxMDExMDEwOTMxMTc3NTM5Mzg3NjYyNDE0NDI4OTYwMzA2MzcgLT4gLTE2LjMyOTA3MjYyODQ2OTcxNTE3ODYzNzE3ODM2NTcxMDM3MzM5ODIwMzE5MDkzNzQ1NCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTM0IGxuIDAuMDAwMDAwMDAwMDAwMTcxMTU4MzQxNjI2MzI4NjQzOTIwMzk2NjgxMTYyNDM5ODQxNzYgLT4gLTI5LjM5NjE4NzI5MjQzNDg5ODIyNTQ1MzYyNjc5NDQ1OTI4NTE1NzI2MzE3NzUyODAzNCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTM1IGxuIDAuMzkxNjgzMTc1OTM4NjYzMzQwODczMDU0NTk5MzM3MjM4NjQyOTQ4NTcwODYxMDUwMzUgLT4gLTAuOTM3MzAxOTkwNjI3NTcyNDA0ODU4MzY2MzczMDY3ODUwMzczNjg3NDY3Mzc2OTMwMjkgSW5leGFjdCBSb3VuZGVkDQotbG54MTUzNiBsbiA3OS4zMzUwMzY3OTg5NzE1MTUwMjY1MTk2MzAxMDMzMjUzNjk3Mjk2Mzc1MTQxMjc2MTcgIC0+IDQuMzczNjc5ODU3MDI4NzgyODgyMzc3MjE0OTczNTE3MDQzMTAxMDYxNjk2MTk3Njk2NSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTM3IGxuIDAuMDAwMDAwMDAwMDAwMDAwNTYwMDQ5NTIxMjk5MjYxMzc0MTM2MDIxMTY1OTE0OTM2MjUgLT4gLTM1LjExODUwNjQ2MzE4MTg3MDAyMDczMDY4NTg4NDMzMzAwMDI0MTAzOTAyODEyNzIxMyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTM4IGxuIDAuMDAwMDAwMDYwMDYwMzU5MDc4NDM4OTA5MTg4MzI0ODEwOTk2NjA2Mzk1NTM2NjYwNzggLT4gLTE2LjYyNzkxNTc5NTc0NzExMjU2NjUzMjcwNTk3NDg1MzExNDQ1NDQwNTAxMDQ3MjA0MyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTM5IGxuIDAuMDAwMDAwMDAwODUyNDIwMjQ5Mzc0MTQ5MDYzNzEzMzM4MjY1NzQ2MzI0NTA1ODc1OTAgLT4gLTIwLjg4Mjk0MTQ2MDI2ODEwMTA4MDE4NjQ4MjIzMDY1Nzc3NDk5NzI3MzQ5NDEwNzIyMSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTQwIGxuIDAuMDAwMDAwMDAwMDAwNDM2NzEwOTk0OTkyNjIzNTAzMTYxNzMyNDY1NTA3NzE5NTE1NjEgLT4gLTI4LjQ1OTUwNDc1NzI4NTYzOTIyMTc3NjMwNTk2ODQ2OTA1ODg1NDU1ODcyNjU5Mzk0NSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBQPTM0LCB3aXRoaW4gMC05OTkNCi1QcmVjaXNpb246IDM0DQotbG54MTIwMSBsbiAwLjAwODY3MzI4ODA4MTU5MjcxODI5OTc1NjY4MTAzMzQzOTQgLT4gLTQuNzQ3NTA3MzExOTIwODQ0NzUyNDg2OTM4MTg3OTczNzIxIEluZXhhY3QgUm91bmRlZA0KLWxueDEyMDIgbG4gMC4wMDA3MTA0MTAzNjkzNDYwMjYwNjA5NzkyMjIyNTY5ODU0IC0+IC03LjI0OTY2Nzc2OTkwMzUwMzAyMzAwNTU0OTI1MDM0NzY5NSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjAzIGxuIDc4Ni44Mzk4OTQ1Mzg1MTA1MTkwNjk3NTQxNDkzMzkyNzQyICAtPiA2LjY2ODAyNDc5MDAzMTgzNjM0MDQ3MTgyNDE0NzAxMDU0NiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjA0IGxuIDAuNzcyMzA3MzYyMDI4MjY4NzY1Njg5NTE5MDE3MTk2NzM5OSAtPiAtMC4yNTgzNzI2NzA4NTA2ODUwODY4Nzg2ODE2MjM4MjE3MzI2IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMDUgbG4gMC4wMDYxMDU3OTUxNTE3MTk3NjMxMjg3MTgzOTM4NDEyMjAwIC0+IC01LjA5ODUxNjkzMzkxODc5NzM0NzA2NDQ1NDEwMzc0MjYzNSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjA2IGxuIDAuNjE4MTM3OTcwODE4NDM5MzczMDEwMzkxNzU2MjQ5ODc0NSAtPiAtMC40ODEwNDM1OTI2OTAzMzY1MDg3NDYzMzg3NzYwMzUwMDIxIEluZXhhY3QgUm91bmRlZA0KLWxueDEyMDcgbG4gMDkuMTM4ODgyNjEyMjkwMzk5ODkxMTA3NTMzODkwOTY3NjAgIC0+IDIuMjEyNTM4MTI1NTA3OTc1NTc0NTA5NTYzMDI3Njk2MDIxIEluZXhhY3QgUm91bmRlZA0KLWxueDEyMDggbG4gODAyLjAxMDU0MTcwNjMxNDM2OTY0OTcyOTIxNTgxNDcxNzQgIC0+IDYuNjg3MTIxNzUyMDUyMzQxNzM3MjM0ODMyMjAzMzUwMjE0IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMDkgbG4gNzc4Ljc3NDk3MTAzODc3NzM3MTM1MjMwMjg0OTczMzMwNTggIC0+IDYuNjU3NzIyMTM1MTI2OTM1NDcyMDg2NjI1MDMxNDEzMDMxIEluZXhhY3QgUm91bmRlZA0KLWxueDEyMTAgbG4gMC4wMDI0NDU3Mjk1ODk1MzQ2NTAyNTEzNTY3Njc5MzkwNjE2IC0+IC02LjAxMzQxMTc5OTk0MDI0NTM0NTMyMTM0ODI5MDM5ODUxNyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjExIGxuIDAuMDAwMDUxMTI5Njk0Nzg3MjgyODMxMDMzODg2NDIxNzg2MCAtPiAtOS44ODExNDUxMTgyMzcyODE3OTgwODE1NzMxMzE3MTE2MzYgSW5leGFjdCBSb3VuZGVkDQotbG54MTIxMiBsbiAwLjAwMDAyNDY4MDM1MDg2MDI1NTQ5MjQ5Mzg2ODUxNTU2NTggLT4gLTEwLjYwOTUwMzE0MjY0ODI1NjYxODI1MzYwOTcxNDMwMjE4IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMTMgbG4gOS4wMjc4OTgxOTkyNTM1MTE2NjgyNDI5Nzc3NjY2MTYwODIgIC0+IDIuMjAwMzE5NTgyNzc4ODk5MDI5Nzg2MDE3ODMwNTU3MjkzIEluZXhhY3QgUm91bmRlZA0KLWxueDEyMTQgbG4gMC4wOTkxODEyMzk2NTQyNTA1NjMxODUwNjkyODAwOTA0MTg4IC0+IC0yLjMxMDgwNjM5ODk2NDY3MjI1ODgyMzA0MzE4MDQwMDM4NCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjE1IGxuIDAuMDAwMDAwMDAwMDA3MDIzODgxMDE0MzAyODgxMTIyMzkyNCAtPiAtMjUuNjgxNzA1MTk5NjE2MzY2NDcxNzQ3MTQ1MzgyOTAwNzUgSW5leGFjdCBSb3VuZGVkDQotbG54MTIxNiBsbiAyLjYzMDEwMTY2NTM0MjgyNjQ5NDczMDM5NDcyOTMxMzE2NyAgLT4gMC45NjcwMjI1MDE0NjY0MzY3NDY1MTI4MjQzMDM5NzQ5NTU5IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMTcgbG4gMC4wMDU2ODc4OTI4NTk0MzU5NTg3NjkxNTI2MDYzMjU0NjgzIC0+IC01LjE2OTQxNTQyMjkwNDAzNzgxOTczNjYzNzM5OTQ0NTA5NiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjE4IGxuIDU2Ny4zNDM2MDQ3MTIxMDU3ODQzOTA4MTA2NTczMDk1NTkwICAtPiA2LjM0MDk2NTEyNDk2NDI1ODQ4NjQ2MzQ0NDM2MDc4Nzk3MCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjE5IGxuIDEuMTk5MjkxMjQ4MTI0NjU1OTk2NjE0NjA1NzQ1NjQ5NzI1ICAtPiAwLjE4MTczMDc1NTc0MjU5MTE4MDU3NjUwODc3NTU2NzU2NTcgSW5leGFjdCBSb3VuZGVkDQotbG54MTIyMCBsbiAyNS4wMjA1MDQ0ODU4MjAzMTA5ODY5NjI2NzQ3OTEzNTU1NyAgLT4gMy4yMTk2OTU2NjgxMzc2NTkxMzk1NDQxNzg5MDU0NTkzMTcgSW5leGFjdCBSb3VuZGVkDQotbG54MTIyMSBsbiAwLjAwMDAwMDAwMDAwMDk5Mzk1OTcwMjM1NTg3NTY5NjEzMDAgLT4gLTI3LjYzNzA3OTcyOTk2NTM3NjM2NTA0Mzk2NTU4MjU5MDU4IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMjIgbG4gMC4wMDAwMDA3OTg4NTUxNjcwMTU5NDI5NzE2NTA2NDMwNDAzIC0+IC0xNC4wNDAwODYxNzU0MjU5NzIzMDk4ODE5ODYxMjM3NjQxNSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjIzIGxuIDQuNjgxNTE1ODAwMTc2MTI5MTg0ODczNzcwNjA1NTg5Nzk1ICAtPiAxLjU0MzYyMTk0NjQxNTM4MzMzODk3MjEyNDQ0NTQ0NTc0OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjI0IGxuIDE1Ljk1MTI2NjY5MTYxMTAzMDExMjA2NjU4NzQ5MzQ1NzgxICAtPiAyLjc2OTUzODI0MjQ3OTQ4MzUzOTI3NTk4NjM5NTQ0MzUzOSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjI1IGxuIDAuMDMwMTYyNjc4MzkyMjIxMTIxMzY3NTQ1NzI3OTA3NjA2NiAtPiAtMy41MDExNDk5MzM2NzcyODMzNDEwMjM5MzIyODE4MjYzNDEgSW5leGFjdCBSb3VuZGVkDQotbG54MTIyNiBsbiAwMDAuMDA0MDU0NDA2NDg4MTgyMTc3MDUyODQ3NTE4NTY3NCAgLT4gLTUuNTA3OTUwOTY3NTU3MDIxNjcxNjQ3MTY1ODg5NjA4MzI0IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMjcgbG4gMjkuMDE2MTcwOTU5MzU1OTM3OTIwOTU5MTM3ODUxMDAzNjAgIC0+IDMuMzY3ODUzMjkzODYyNzQ1NjUxODg4NDUwMDA0NDczMjk3IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMjggbG4gNzguMDE4MzYxNjczNDQ3MzY3MzMwMjQ4MDQyNDMxOTUzMjMgIC0+IDQuMzU2OTQ0MjA1MDU1NzY4NTc1OTg3NzgxMzc1MDAzOTkyIEluZXhhY3QgUm91bmRlZA0KLWxueDEyMjkgbG4gMC4wMDAwMDAwMDk2NTQ1MzE5MzE2OTY1MzIxMTU4NjM0ODkzIC0+IC0xOC40NTU4Mzg0MDE2MDk2NTgxNDQ2MjA5NTQ3NzM2NTAxMyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjMwIGxuIDk3Ljk1NDc1MjM3NzIwNTc5NzUyNzcwNTg3MTg1MDc0NDI4ICAtPiA0LjU4NDUwNTY2MTYxMjgxMjc0MjIwODYxOTM1ODIxNDcyOSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjMxIGxuIDUyOC4wNjA5MjYyMDUwNDIzMjQ2NDAyNTY0MjI4NDMyMzcxICAtPiA2LjI2OTIxMTY2NzU4OTEzODExMzM5NjU4Mzg5NDMxNTk1NiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjMyIGxuIDAuMDAwMDAwMjI1MDA2NDM0OTczMjk2OTY5NjY2MDQ1Mjk3MiAtPiAtMTUuMzA3MTM2ODM1MjY5NjM5OTY3MTIxNjc3MDE3Mzg3MjQgSW5leGFjdCBSb3VuZGVkDQotbG54MTIzMyBsbiA0Ny45NzA2MzYzNzc2Nzk5ODY1ODU2NzE5OTA0OTcyNTc1NCAgLT4gMy44NzA1ODkwODE1ODU2NjA2OTIxOTU5ODk4NTQ4NDIzNzIgSW5leGFjdCBSb3VuZGVkDQotbG54MTIzNCBsbiAwLjAwMDUzOTQzMTEzNDQ1NDE0MzIzMTg4NTM1MTM0MTQzNjEgLT4gLTcuNTI0OTk1NDI4MzkzOTI1OTM0MDg3MTI2NzAyOTc0MTIxIEluZXhhY3QgUm91bmRlZA0KLWxueDEyMzUgbG4gMC4wMDAwMDAwMDkwOTczMzg1NjQ5NTY3NDcxNjc0OTcyNjMzIC0+IC0xOC41MTUyODM5MzE1ODkzMTc4MzQ0NzAzNTAwNDEyNTc5MSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjM2IGxuIDAuMDAwMDAwMDAwMDIzODc3NjQ5MDIyNzU3NjE5NzMxNzk3NyAtPiAtMjQuNDU4MDc4MjgxODgzODk1NjEzMzExNTg4NzkyMDcyNjIgSW5leGFjdCBSb3VuZGVkDQotbG54MTIzNyBsbiAwLjAwMDAyMzY1ODcwMDAyMzE5MjE1MzIxNDUzMjYyMTg3NTggLT4gLTEwLjY1MTc3OTY0NDk5ODIzMzE0OTUyNDI5Mjc3OTc5MDM0IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMzggbG4gNDk5LjEyNzc0NDg4NDYxMzA3MDk4MjcxNTQ1NTYxMjU5NDIgIC0+IDYuMjEyODYyMDY0NzYxNDI3OTY3NDYxMTg4MDgzNTE0Nzc0IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMzkgbG4gMC4wMDAwMDAzOTYwMTkyMzAwMjg0Nzg3NjYzNzEyNDE3NjQ3IC0+IC0xNC43NDE4MDMwNjYxOTI5ODU0ODA5MzY5NzYwODI5MzI4NCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjQwIGxuIDQxLjA4MjY4MzUwODI5NDc3NDUxNjY3MjI4ODkyNDk1MTM2ICAtPiAzLjcxNTU4NjcwNjg4NzI3ODAzOTE3MzU4NDg1OTIxODk2MCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBQPTE2LCB3aXRoaW4gMC05OQ0KLVByZWNpc2lvbjogMTYNCi1sbngxMTAxIGxuIDcuOTY0ODc1MjYxMDMzOTQ4ICAtPiAyLjA3NTA0MTI4MjM1MjI0MSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTAyIGxuIDEzLjU0NTI3Mzk2ODQ1Mzk0ICAtPiAyLjYwNjAzNzcwMTg3MDI2MyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTAzIGxuIDAuMDAwODAyNjU1NDM0MTMzMSAtPiAtNy4xMjc1ODUwMzQzMjE4MTQgSW5leGFjdCBSb3VuZGVkDQotbG54MTEwNCBsbiAwLjAwMDAwMzA1ODIyMzMyNjEgLT4gLTEyLjY5NzY3NjQyMzAwNjI1IEluZXhhY3QgUm91bmRlZA0KLWxueDExMDUgbG4gMC4wMDA0NDc3NDk3NTA5NjcyIC0+IC03LjcxMTI3NjA3MzIxMDc2NiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTA2IGxuIDcuNjE2MjY4NjIyNDc0MzcxICAtPiAyLjAzMDI4NjU2NzY3NTE0OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTA3IGxuIDUxLjU4MzI5OTI1ODA2MzgxICAtPiAzLjk0MzE5Nzk2MjMwOTU2OSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTA4IGxuIDAuMDAxODE5NzQ5Nzk1MTI2MyAtPiAtNi4zMDkwNTYyNjI1NDkzNDUgSW5leGFjdCBSb3VuZGVkDQotbG54MTEwOSBsbiAyLjk1NjI4MjQ1NzA3Mjk4NCAgLT4gMS4wODM5MzI1NTIzMzQ1NzUgSW5leGFjdCBSb3VuZGVkDQotbG54MTExMCBsbiAwLjM4NDMzMjU1NzkxODk5MDYgLT4gLTAuOTU2MjQ3MDY0OTQwMDU1OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTExIGxuIDAuMDA3NDQ2NjMyOTI2NTY2MyAtPiAtNC44OTk5OTMzMDQ5MTkyMzcgSW5leGFjdCBSb3VuZGVkDQotbG54MTExMiBsbiAwLjAwMDMzNzI0Nzg1MzI5OTMgLT4gLTcuOTk0NjkyNDI4MjA2Mzc4IEluZXhhY3QgUm91bmRlZA0KLWxueDExMTMgbG4gMC4wMDg0NzkyMjYzMTY3ODA5IC0+IC00Ljc3MDEzNjA2OTU2OTI3MSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTE0IGxuIDUuOTI2NzU2OTk4MTUxMTAyICAtPiAxLjc3OTQ3NzE4MjgzNDMwNSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTE1IGxuIDkuMDI1Njk5MTUyMTgwODk3ICAtPiAyLjIwMDA3NTk2OTYwNDExOSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTE2IGxuIDEuOTEwMTI0NjQzNTMzNTI2ICAtPiAwLjY0NzE2ODQ5ODMyMzgxODMgSW5leGFjdCBSb3VuZGVkDQotbG54MTExNyBsbiAwLjgxNTg5MjI3MTE0MTEwMjAgLT4gLTAuMjAzNDcyOTUzMzkzOTM4NyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTE4IGxuIDAuMDA2NzA4MDAxNjQ3NTMyMiAtPiAtNS4wMDQ0NTQxODk0MTQxMzkgSW5leGFjdCBSb3VuZGVkDQotbG54MTExOSBsbiAwLjAwNDc1ODMyNDIwOTI3MTYgLT4gLTUuMzQ3ODU5NzI5NjAxMDk0IEluZXhhY3QgUm91bmRlZA0KLWxueDExMjAgbG4gMC4wMzg2NjQ3NDExNjQxMzM5IC0+IC0zLjI1MjgyNzE3NTI2MzExMyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTIxIGxuIDAuMDA1MDIyNjQyNzg0MTc2MSAtPiAtNS4yOTM3OTkwMzI3NzQxMzEgSW5leGFjdCBSb3VuZGVkDQotbG54MTEyMiBsbiA2LjkyNzkzNzU0MTYzNzI2MSAgLT4gMS45MzU1NjIxNTU4NjY5MDYgSW5leGFjdCBSb3VuZGVkDQotbG54MTEyMyBsbiAwLjAwMDAwOTU3NDUzNDM1MTMgLT4gLTExLjU1NjQwMzY1NTc5ODE0IEluZXhhY3QgUm91bmRlZA0KLWxueDExMjQgbG4gMS42MDI0NjU0OTI5NTY1MzggIC0+IDAuNDcxNTQzMzc2MzI0MzkzNiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTI1IGxuIDM4Ljk4NDE1NjI1MDg3NTM1ICAtPiAzLjY2MzE1NTMxMzYxMDIxMyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTI2IGxuIDUuMzQzMTgyMDQyMjc2NzM0ICAtPiAxLjY3NTgyMTM2MzU2ODExMiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTI3IGxuIDU1Ljg5NzYzNzAzMjQ1ODE2ICAtPiA0LjAyMzUyMjEwNzkzNDExMCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTI4IGxuIDAuNzQ0NTI1NzgxMDI4MDg0NyAtPiAtMC4yOTUwMDc3OTg4MTAxMDMwIEluZXhhY3QgUm91bmRlZA0KLWxueDExMjkgbG4gMS42MzE0MDczMTQ5NDYwOTQgIC0+IDAuNDg5NDQzMDI1NzIwMTI0OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTMwIGxuIDAuMDAwNTQ2MjQ1MTkzMjYwMiAtPiAtNy41MTI0NDI2MTExMTY4NTIgSW5leGFjdCBSb3VuZGVkDQotbG54MTEzMSBsbiAwLjAwMDA4NjQxNzMyNjkzNjIgLT4gLTkuMzU2MzIyMzU5MDE3MzE3IEluZXhhY3QgUm91bmRlZA0KLWxueDExMzIgbG4gNS4yMjcxNjE3MTkxMzI4NDkgIC0+IDEuNjUzODY4NDM4NDM5NjM3IEluZXhhY3QgUm91bmRlZA0KLWxueDExMzMgbG4gNjAuNTcwNzg0NjY5NDE5OTggIC0+IDQuMTAzODEyNjc1NjYyNDUyIEluZXhhY3QgUm91bmRlZA0KLWxueDExMzQgbG4gMC4wOTkyODY0MzI1MzMzMTYwIC0+IC0yLjMwOTc0NjM0ODM1MDMxOCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTM1IGxuIDA5LjQ4NTY0MjY4NDQ3MzI1ICAtPiAyLjI0OTc3OTM1OTA3NDk4MyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTM2IGxuIDAuMDAzNjEwNjA4OTM1NTYzNCAtPiAtNS42MjM4Nzg4NDA2NTA3ODcgSW5leGFjdCBSb3VuZGVkDQotbG54MTEzNyBsbiAxLjgwNTE3Njg2NTU4NzE3MiAgLT4gMC41OTA2NTg1NzM0NTkzNzA3IEluZXhhY3QgUm91bmRlZA0KLWxueDExMzggbG4gNjIuNTkzNjMyNTk2NDIyNTUgIC0+IDQuMTM2NjYzNTU3MjIwNTU5IEluZXhhY3QgUm91bmRlZA0KLWxueDExMzkgbG4gNC4zNzM4MjgyNjExMzcyMDEgIC0+IDEuNDc1NjM4NjU3OTEyMDAwIEluZXhhY3QgUm91bmRlZA0KLWxueDExNDAgbG4gMC45OTQ0ODM1MjQxNDg3MzggIC0+IC0wLjAwNTUzMTc0Nzc5NDkzODY5MCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBQPTcsIHdpdGhpbiAwLTkNCi1QcmVjaXNpb246IDcNCi1sbngxMDAxIGxuIDAuMDkxMjAyNSAtPiAtMi4zOTQ2NzMgSW5leGFjdCBSb3VuZGVkDQotbG54MTAwMiBsbiAwLjk3Mjg2MjYgLT4gLTAuMDI3NTEyNDIgSW5leGFjdCBSb3VuZGVkDQotbG54MTAwMyBsbiAwLjM4ODYwMzIgLT4gLTAuOTQ1MTk2NSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDA0IGxuIDguNzk4NjM5ICAtPiAyLjE3NDU5NyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDA1IGxuIDIuNDU5MTIxICAtPiAwLjg5OTgwNDAgSW5leGFjdCBSb3VuZGVkDQotbG54MTAwNiBsbiAyLjAxMzE5MyAgLT4gMC42OTk3MjIwIEluZXhhY3QgUm91bmRlZA0KLWxueDEwMDcgbG4gOS4wNjQ4NTcgIC0+IDIuMjA0NDA1IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMDggbG4gNS43OTY0MTcgIC0+IDEuNzU3MjQwIEluZXhhY3QgUm91bmRlZA0KLWxueDEwMDkgbG4gMC4xMTQzNDcxIC0+IC0yLjE2ODUxNyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDEwIGxuIDAuNTM0MTU0MiAtPiAtMC42MjcwNzA3IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMTEgbG4gNi42OTM3ODEgIC0+IDEuOTAxMTc5IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMTIgbG4gMC4wMDgxNzc5IC0+IC00LjgwNjMyMCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDEzIGxuIDguMzEzNjE2ICAtPiAyLjExNzg5NSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDE0IGxuIDMuNDg2OTI1ICAtPiAxLjI0OTAyMCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDE1IGxuIDAuMTgwMTQwMSAtPiAtMS43MTQwMjAgSW5leGFjdCBSb3VuZGVkDQotbG54MTAxNiBsbiAwLjUyMjcxNDggLT4gLTAuNjQ4NzE5MyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDE3IGxuIDcuODE4MTExICAtPiAyLjA1NjQ0MyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDE4IGxuIDAuMDg3MDY3MSAtPiAtMi40NDEwNzYgSW5leGFjdCBSb3VuZGVkDQotbG54MTAxOSBsbiA4LjE1Mzk2NiAgLT4gMi4wOTg1MDQgSW5leGFjdCBSb3VuZGVkDQotbG54MTAyMCBsbiAyLjA0MDk3NSAgLT4gMC43MTM0Mjc2IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMjEgbG4gMS40ODE2NDIgIC0+IDAuMzkzMTUwOSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDIyIGxuIDAuMjYxMDEyMyAtPiAtMS4zNDMxODggSW5leGFjdCBSb3VuZGVkDQotbG54MTAyMyBsbiAwLjQ2NjcyMyAgLT4gLTAuNzYyMDE5MyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDI0IGxuIDAuMDUxODc1NiAtPiAtMi45NTg5MDcgSW5leGFjdCBSb3VuZGVkDQotbG54MTAyNSBsbiAyLjA1NjQxMCAgLT4gMC43MjA5NjE3IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMjYgbG4gMC4xODE1MjIgIC0+IC0xLjcwNjM3OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDI3IGxuIDAuNTE1NTUxICAtPiAtMC42NjI1MTkwIEluZXhhY3QgUm91bmRlZA0KLWxueDEwMjggbG4gOC40MjUwODkgIC0+IDIuMTMxMjE0IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMjkgbG4gMi4wNzcwOTEgIC0+IDAuNzMwOTY4NCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDMwIGxuIDYuMjEyNzA1ICAtPiAxLjgyNjU5NiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDMxIGxuIDUuNzI5MzQzICAtPiAxLjc0NTYwMSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDMyIGxuIDQuODMxMjUxICAtPiAxLjU3NTEwNSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDMzIGxuIDIuMDI5NzYwICAtPiAwLjcwNzkxNzYgSW5leGFjdCBSb3VuZGVkDQotbG54MTAzNCBsbiA4LjYxNTA2MCAgLT4gMi4xNTM1MTIgSW5leGFjdCBSb3VuZGVkDQotbG54MTAzNSBsbiAwLjA2MTE1MTEgLT4gLTIuNzk0NDA3IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMzYgbG4gNS4xOTUyNjkgIC0+IDEuNjQ3NzQ4IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMzcgbG4gOS42MTc2ODYgIC0+IDIuMjYzNjA0IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMzggbG4gMC4wMDQ5MzgyIC0+IC01LjMxMDc1NCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDM5IGxuIDIuNzg2ODQwICAtPiAxLjAyNDkwOCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDQwIGxuIDAuMDA5MTA3MyAtPiAtNC42OTg2NzkgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gZnJvbSBoZXJlIDMtZGlnaXQgdGVzdHMgYXJlIGJhc2VkIG9uIHJldmVyc2UgZXhwIHRlc3RzDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotbG54MDAxICBsbiAwICAgICAgICAgICAtPiAgLUluZmluaXR5DQotbG54MDAyICBsbiAwLjM2Nzg3OTQ0MSAtPiAgLTEuMDAwMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDAzICBsbiAxICAgICAgICAgICAtPiAgIDANCi1sbngwMDUgIGxuIDIuNzE4MjgxODMgIC0+ICAgMS4wMDAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDYgIGxuIDIuMDAwMDAwMDAgIC0+ICAgMC42OTMxNDcxODEgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDcgIGxuICtJbmZpbml0eSAgIC0+ICAgSW5maW5pdHkNCi0NCi0tLSB0aW55IGVkZ2UgY2FzZXMNCi1wcmVjaXNpb246ICAgNw0KLWxueDAxMSAgbG4gMS4xMDUxNzEgLT4gIDAuMTAwMDAwMSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMTIgIGxuIDEuMDEwMDUwIC0+ICAwLjAwOTk5OTgzNSAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEzICBsbiAxLjAwMDAxMCAtPiAgMC4wMDAwMDk5OTk5NTAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNCAgbG4gMS4wMDAwMDEgLT4gIDkuOTk5OTk1RS03ICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMTUgIGxuIDEuMDAwMDAwIC0+ICAwDQotDQotLS0gYmFzaWMgZT0wLCBlPTEsIGU9MiwgZT00LCBlPj04IGNhc2VzDQotcHJlY2lzaW9uOiAgIDcNCi1sbngwNDEgIGxuIDIuNzE4MjgyICAgICAgLT4gIDEuMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDA0MiAgbG4gMC4zNjc4Nzk0ICAgICAtPiAtMS4wMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDQzICBsbiAyMjAyNi40NyAgICAgIC0+ICAxMC4wMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwNDQgIGxuIDAuMDAwMDQ1Mzk5OTMgLT4gLTEwLjAwMDAwICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDA0NSAgbG4gMi42ODgxMTdFKzQzICAtPiAgMTAwLjAwMDAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDQ2ICBsbiAzLjcyMDA3NkUtNDQgIC0+IC0xMDAuMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwNDcgIGxuIEluZmluaXR5ICAgICAgLT4gIEluZmluaXR5DQotbG54MDQ4ICBsbiAwRS0zODkgICAgICAgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIG1pc2NlbGxhbmVhDQotcHJlY2lzaW9uOiAxNg0KLWxueDA1NSAgbG4gMi43MTc2NTg0ODY4ODQ1NzJFLTIzNiAgICAgLT4gLTU0Mi40MTAzMTEyODc0NDE1ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTcNCi1sbngwNTYgIGxuIDIuNzE3NjU4NDg2ODg0NTcyMUUtMjM2ICAgIC0+IC01NDIuNDEwMzExMjg3NDQxNDYgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE4DQotbG54MDU3ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjExRS0yMzYgICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ1OSAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxOQ0KLWxueDA1OCAgbG4gMi43MTc2NTg0ODY4ODQ1NzIxMTJFLTIzNiAgLT4gLTU0Mi40MTAzMTEyODc0NDE0NTkyICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMjANCi1sbngwNTkgIGxuIDIuNzE3NjU4NDg2ODg0NTcyMTExOEUtMjM2IC0+IC01NDIuNDEwMzExMjg3NDQxNDU5MTcgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBpbnB1dHMgZW5kaW5nIGluIC4uNTAwLi4sIC4uNDk5Li4sIC4uMTAwLi4sIC4uOTk5Li4gc2VxdWVuY2VzDQotcHJlY2lzaW9uOiAgIDUwDQotbG54MTAyICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMjcgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMzc0OTk1MzgyOTk5NjQ0NjEyNDg2MTc1MEUtOCAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDMwDQotbG54MTAzICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMyAtPiAtOC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzMzNzQ5OUUtOCAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyOQ0KLWxueDEwNCAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMCAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzMzNzUwRS04ICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyOA0KLWxueDEwNSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzM3NUUtOCAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDI3DQotbG54MTA2ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMCAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzMzOEUtOCAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyNg0KLWxueDEwNyAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MCAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzM0RS04ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyNQ0KLWxueDEwOCAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1IC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3M0UtOCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDI0DQotbG54MTA5ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3OSAtPiAtOC45OTk5OTk5OTk5OTk5OTk5NTAwMDAyN0UtOCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyMw0KLWxueDExMCAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4OCAtPiAtOC45OTk5OTk5OTk5OTk5OTk4NTAwMDAzRS04ICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyMg0KLWxueDExMSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk5IC0+IC04Ljk5OTk5OTk5OTk5OTk5Nzg1MDAwMEUtOCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDIxDQotbG54MTEyICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwMCAtPiAtOC45OTk5OTk5OTk5OTk5ODc4NTAwMEUtOCAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyMA0KLWxueDExMyAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAwMCAtPiAtOC45OTk5OTk5OTk5OTk5ODc4NTAwRS04ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxOQ0KLWxueDExNCAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAwIC0+IC04Ljk5OTk5OTk5OTk5OTk4Nzg1MEUtOCAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDE4DQotbG54MTE1ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MCAtPiAtOC45OTk5OTk5OTk5OTk5ODc4NUUtOCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLS0tIG5leHQgbWF5IGJlIGEgPiAwLjV1bHAgY2FzZTsgYSBtb3JlIHByZWNpc2UgYW5zd2VyIGlzOg0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtOC45OTk5OTk5OTk5OTk5ODc4NDk5OTkxOEUtOA0KLXByZWNpc2lvbjogICAxNw0KLWxueDExNiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNSAtPiAtOC45OTk5OTk5OTk5OTk5ODc4RS04ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDE2DQotbG54MTE3ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDAgLT4gLTkuMDAwMDAwMDA0OTk5OTg4RS04ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDE1DQotbG54MTE4ICBsbiAwLjk5OTk5OTkxMDAwMDAwNCAtPiAtOS4wMDAwMDAwMDQ5OTk5OUUtOCAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxNA0KLWxueDExOSAgbG4gMC45OTk5OTk5MTAwMDAwMCAtPiAtOS4wMDAwMDA0MDUwMDAwRS04ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDEzDQotbG54MTIwICBsbiAwLjk5OTk5OTkxMDAwMDAgLT4gLTkuMDAwMDAwNDA1MDAwRS04ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxMg0KLWxueDEyMSAgbG4gMC45OTk5OTk5MTAwMDAgLT4gLTkuMDAwMDAwNDA1MDBFLTggICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxMQ0KLWxueDEyMiAgbG4gMC45OTk5OTk5MTAwMCAtPiAtOS4wMDAwMDA0MDUwRS04ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDEwDQotbG54MTIzICBsbiAwLjk5OTk5OTkxMDAgLT4gLTkuMDAwMDAwNDA1RS04ICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgOQ0KLWxueDEyNCAgbG4gMC45OTk5OTk5MTAgLT4gLTkuMDAwMDAwNDFFLTggICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgOA0KLWxueDEyNSAgbG4gMC45OTk5OTk5MSAtPiAtOS4wMDAwMDA0RS04ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICA3DQotbG54MTI2ICBsbiAwLjk5OTk5OTkgLT4gLTEuMDAwMDAwRS03ICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxNg0KLWxueDEyNmIgbG4gMC45OTk5OTk5IC0+IC0xLjAwMDAwMDA1MDAwMDAwM0UtNyAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDYNCi1sbngxMjcgIGxuIDAuOTk5OTk5IC0+IC0wLjAwMDAwMTAwMDAwICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICA1DQotbG54MTI4ICBsbiAwLjk5OTk5IC0+IC0wLjAwMDAxMDAwMCAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgNA0KLWxueDEyOSAgbG4gMC45OTk5IC0+IC0wLjAwMDEwMDAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDMNCi1sbngxMzAgIGxuIDAuOTk5IC0+IC0wLjAwMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAyDQotbG54MTMxICBsbiAwLjk5IC0+IC0wLjAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgMQ0KLWxueDEzMiAgbG4gMC45IC0+IC0wLjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSBjYXNlcyBuZWFyIDEgICAgICAgICAgICAgIC0tICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTANCi1wcmVjaXNpb246ICAgIDIwDQotbG54NDAxICBsbiAyLjcxODI4MTgyODQ1ODkzNjUwNDEgLT4gMC45OTk5OTk5OTk5OTk5NjAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1sbng0MDIgIGxuIDIuNzE4MjgxODI4NDU4OTYzNjg2OSAtPiAwLjk5OTk5OTk5OTk5OTk3MDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWxueDQwMyAgbG4gMi43MTgyODE4Mjg0NTg5OTA4Njk3IC0+IDAuOTk5OTk5OTk5OTk5OTc5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotbG54NDA0ICBsbiAyLjcxODI4MTgyODQ1OTAxODA1MjUgLT4gMC45OTk5OTk5OTk5OTk5ODk5OTk5OCBJbmV4YWN0IFJvdW5kZWQNCi1sbng0MDUgIGxuIDIuNzE4MjgxODI4NDU5MDQ1MjM1NCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLWxueDQwNiAgbG4gMi43MTgyODE4Mjg0NTkzMTcwNjM1IC0+IDEuMDAwMDAwMDAwMDAwMTAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotbG54NDA3ICBsbiAyLjcxODI4MTgyODQ1OTU4ODg5MTcgLT4gMS4wMDAwMDAwMDAwMDAyMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDE0DQotbG54NDExICBsbiAyLjcxODI4MTgyODQ1ODkgLT4gMC45OTk5OTk5OTk5OTk5NSAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbng0MTMgIGxuIDIuNzE4MjgxODI4NDU5MCAtPiAwLjk5OTk5OTk5OTk5OTk4ICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDQxNiAgbG4gMi43MTgyODE4Mjg0NTkxIC0+IDEuMDAwMDAwMDAwMDAwMCAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NDE3ICBsbiAyLjcxODI4MTgyODQ1OTIgLT4gMS4wMDAwMDAwMDAwMDAxICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBvdmVyZmxvd3MsIGluY2x1ZGluZyBzb21lIGV4cCBvdmVycHJlY2lzZSBib3JkZXJsaW5lcw0KLXByZWNpc2lvbjogICA3DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotbG54NzA5ICBsbiA5Ljk5OTk5OUUrMzg0IC0+ICA4ODYuNDk1MyAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NzExICBsbiA5Ljk5OTk5MkUrMzg0IC0+ICA4ODYuNDk1MyAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDE2DQotbG54NzIyICBsbiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICA4ODYuNDk1MjYwODAyNzA3NiAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NzI0ICBsbiA5Ljk5OTk5OTk5OTk5OTkxN0UrMzg0IC0+ICA4ODYuNDk1MjYwODAyNzA3NiAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NzI2ICBsbiA5Ljk5OTk5OTk5OTk5OTExN0UrMzg0IC0+ICA4ODYuNDk1MjYwODAyNzA3NSAgICAgSW5leGFjdCBSb3VuZGVkDQotLS0gYW5kIG1vcmUuLi4NCi1wcmVjaXNpb246ICAgMTUNCi1tYXhFeHBvbmVudDogOTk5DQotbWluRXhwb25lbnQ6IC05OTkNCi1sbng3MzEgIGxuIDkuOTk5OTk5OTk5OTk5OTlFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA1ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLS0tIG5leHQgbWF5IGJlIGEgPiAwLjV1bHAgY2FzZTsgYSBtb3JlIHByZWNpc2UgYW5zd2VyIGlzOg0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzMDIuNTg1MDkyOTk0MDQ0OTUwMDE3OTkxNDU0NDINCi1sbng3MzIgIGxuIDkuOTk5OTk5OTk5OTkyNjZFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA0ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDczMyAgbG4gOS45OTk5OTk5OTk5OTI2NUUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDQgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NzM0ICBsbiA5Ljk5OTk5OTk5OTk5MjY0RSs5OTkgLT4gMjMwMi41ODUwOTI5OTQwNCAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3dzIGZvciBleHAsIGluY2x1ZGluZyB1bmRlcmZsb3ctdG8temVybyBlZGdlIHBvaW50DQotcHJlY2lzaW9uOiAgIDcNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1sbng3NTEgIGxuIDBFLTM4OSAtPiAtSW5maW5pdHkNCi1sbng3NTggIGxuIDEuMDAwMDAxRS0zODMgLT4gLTg4MS44OTAxICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NzU5ICBsbiA5Ljk5OTkxRS0zODQgLT4gLTg4MS44OTAxICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDc2MCAgbG4gNC40NjA1RS0zODUgLT4gLTg4NS4wMDAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbng3NjEgIGxuIDIuMjIxRS0zODYgLT4gLTg4Ny45OTk5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NzYyICBsbiAzLjAxRS0zODcgLT4gLTg4OS45OTg1ICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDc2MyAgbG4gMS43RS0zODggLT4gLTg5Mi44NzI0ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbng3NjQgIGxuIDEuNUUtMzg4IC0+IC04OTIuOTk3NiAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NzY1ICBsbiA5RS0zODkgLT4gLTg5My41MDg0ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDc2NiAgbG4gMUUtMzg5IC0+IC04OTUuNzA1NiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbng3NzQgIGxuIDBFLTM4OSAtPiAtSW5maW5pdHkNCi0NCi0tLSBzcGVjaWFsIHZhbHVlcw0KLWxueDgyMCAgbG4gSW5maW5pdHkgLT4gICBJbmZpbml0eQ0KLWxueDgyMSAgbG4gMCAgICAgICAgLT4gIC1JbmZpbml0eQ0KLWxueDgyMiAgbG4gTmFOICAgICAgLT4gICBOYU4NCi1sbng4MjMgIGxuIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1sbng4MjQgIGxuIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbg0KLWxueDgyNSAgbG4gLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uDQotbG54ODI2ICBsbiBOYU40NTYgICAtPiAgIE5hTjQ1Ng0KLWxueDgyNyAgbG4gLU5hTjY1NCAgLT4gIC1OYU42NTQNCi1sbng4MjggIGxuIE5hTjEgICAgIC0+ICAgTmFOMQ0KLQ0KLS0tIEludmFsaWQgb3BlcmF0aW9ucyBkdWUgdG8gcmVzdHJpY3Rpb25zDQotLS0gW25leHQgdHdvIHByb2JhYmx5IHNraXBwZWQgYnkgbW9zdCB0ZXN0IGhhcm5lc3Nlc10NCi1wcmVjaXNpb246IDEwMDAwMDAwMA0KLWxueDkwMSAgbG4gMSAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0DQotcHJlY2lzaW9uOiAgOTk5OTk5OTkNCi1sbng5MDIgIGxuIDAgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dA0KLQ0KLXByZWNpc2lvbjogOQ0KLW1heEV4cG9uZW50OiAgIDEwMDAwMDANCi1taW5FeHBvbmVudDogICAtOTk5OTk5DQotbG54OTAzICBsbiAxICAgLT4gIE5hTiAgICAgICAgICBJbnZhbGlkX2NvbnRleHQNCi1tYXhFeHBvbmVudDogICAgOTk5OTk5DQotbWluRXhwb25lbnQ6ICAgLTk5OTk5OQ0KLWxueDkwNCAgbG4gMCAtPiAgLUluZmluaXR5DQotbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQ0KLW1pbkV4cG9uZW50OiAgLTEwMDAwMDANCi1sbng5MDUgIGxuIDEgICAtPiAgTmFOICAgICAgICAgIEludmFsaWRfY29udGV4dA0KLW1heEV4cG9uZW50OiAgICA5OTk5OTkNCi1taW5FeHBvbmVudDogICAtOTk5OTk4DQotbG54OTA2ICBsbiAwIC0+ICAtSW5maW5pdHkNCi0NCi0tLSBwYXlsb2FkIGRlY2FwaXRhdGUNCi1wcmVjaXNpb246IDUNCi1sbng5MTAgIGxuIC1zTmFOMTIzNDU2Nzg5MCAtPiAtTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTnVsbCB0ZXN0DQotbG54OTAwICBsbiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBsbi5kZWNUZXN0IC0tIGRlY2ltYWwgbmF0dXJhbCBsb2dhcml0aG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIGJhc2ljcyAoZXhhbXBsZXMgaW4gc3BlY2lmaWNhdGlvbikKK3ByZWNpc2lvbjogOQorbG54czAwMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbnhzMDAyIGxuICAxLjAwMCAgICAgICAgICAgICAtPiAgIDAKK2xueHMwMDMgbG4gIDIuNzE4MjgxODMgICAgICAgIC0+ICAgMS4wMDAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54czAwNCBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMwMjU4NTA5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbnhzMDA1IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworCistLSBiYXNpY3MKK3ByZWNpc2lvbjogICAxNgorbG54MDAwMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMDAyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMjAuNzIzMjY1ODM2OTQ2NDEgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMDMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNy4yNjQ0MzAyMjI5MjA4NjkgIEluZXhhY3QgUm91bmRlZAorbG54MDAwNCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yLjMwMjU4NTA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCitsbngwMDA1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuMzU2Njc0OTQzOTM4NzMyNCBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMDYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG54MDAwNyBsbiAgMS4wMDAgICAgICAgICAgICAgLT4gICAwCitsbngwMDA4IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNDA1NDY1MTA4MTA4MTY0NCBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMDkgbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC42OTMxNDcxODA1NTk5NDUzIEluZXhhY3QgUm91bmRlZAorbG54MDAxMCBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitsbngwMDExIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTIgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEgIEluZXhhY3QgUm91bmRlZAorbG54MDAxMyBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMwMjU4NTA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCitsbngwMDE0IGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIuMzUxMzc1MjU3MTYzNDc4ICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTUgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOS4yMTAyNDAzNjY5NzU4NDkgIEluZXhhY3QgUm91bmRlZAorbG54MDAxNiBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDEzLjgxNTUxMDU1Nzk2NDI3ICAgSW5leGFjdCBSb3VuZGVkCitsbngwMDE3IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMjAuNzIzMjY1ODM2OTQ2NDEgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTggbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSBub3RhYmxlIGNhc2VzCistLSBuZWdhdGl2ZXMKK2xueDAwMjEgbG4gLTFFLTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyMiBsbiAtMC4wMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDIzIGxuIC0wLjEgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMjQgbG4gLTAuNyAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyNSBsbiAtMSAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDI2IGxuIC0xLjUgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMjcgbG4gLTIgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyOSBsbiAtMTAuNSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDI4IGxuIC05OTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMzAgbG4gLTIuNzE4MjgxODI4NDU5MDQ1IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAzMSBsbiAtMi43MTgyODE4Mjg0NTkwNDYgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDMyIGxuIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueDAwMzMgbG4gLTBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG54MDAzNCBsbiAtMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5CistLSBvdGhlciB6ZXJvcworbG54MDA0MSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMDQyIGxuICAwRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueDAwNDMgbG4gIDBFLTE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorLS0gaW5maW5pdGllcworbG54MDA0NSBsbiAtSW5maW5pdHkgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDQ2IGxuICtJbmZpbml0eSAgICAgICAgICAtPiBJbmZpbml0eQorLS0gb25lcworbG54MDA1MCBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCitsbngwMDUxIGxuICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKK2xueDAwNTIgbG4gIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorbG54MDA1MyBsbiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAwCisKKy0tIGxvd2VyIHByZWNpc2lvbiBiYXNpY3MKK1ByZWNpc2lvbjogNworbG54MDEwMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMTAyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMjAuNzIzMjcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMDMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNy4yNjQ0MzAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEwNCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yLjMwMjU4NSAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTA1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuMzU2Njc0OSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMDYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG54MDEwNyBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQwNTQ2NTEgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTA4IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNjkzMTQ3MiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMDkgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMS4wMDAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExMCBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxLjAwMDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTExIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEuMDAwMDAwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMTIgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMi4zMDI1ODUgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExMyBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyLjM1MTM3NSAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTE0IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkuMjEwMjQwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMTUgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxMy44MTU1MSAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExNiBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDIwLjcyMzI3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTE3IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKK1ByZWNpc2lvbjogMgorbG54MDEyMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMTIyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMjEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMjMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNy4zICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEyNCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yLjMgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTI1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuMzYgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMjYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG54MDEyNyBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQxICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTI4IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNjkgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMjkgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMS4wICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzMCBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxLjAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTMxIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEuMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMzIgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMi4zICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzMyBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyLjQgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTM0IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkuMiAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMzUgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxNCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzNiBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDIxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTM3IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKK1ByZWNpc2lvbjogMQorbG54MDE0MSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMTQyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMkUrMSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNDMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNyAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE0NCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTQ1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuNCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNDYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG54MDE0NyBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTQ4IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNyAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNDkgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1MCBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTUxIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNTIgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1MyBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTU0IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNTUgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxRSsxICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1NiBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDJFKzEgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTU3IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gZ3JvdXAgbG93LXByZWNpc2lvbiBsbigxKXM6CitwcmVjaXNpb246IDEKK2xueDAxNjEgbG4gIDEgLT4gMAorcHJlY2lzaW9uOiAyCitsbngwMTYyIGxuICAxIC0+IDAKK3ByZWNpc2lvbjogMworbG54MDE2MyBsbiAgMSAtPiAwCitwcmVjaXNpb246IDQKK2xueDAxNjQgbG4gIDEgLT4gMAorcHJlY2lzaW9uOiA1CitsbngwMTY1IGxuICAxIC0+IDAKK3ByZWNpc2lvbjogNgorbG54MDE2NiBsbiAgMSAtPiAwCitwcmVjaXNpb246IDcKK2xueDAxNjcgbG4gIDEgLT4gMAorcHJlY2lzaW9uOiA4CitsbngwMTY4IGxuICAxIC0+IDAKKworLS0gZWRnZS10ZXN0IGxuKDIpIGFuZCBsbigxMCkgaW4gY2FzZSBvZiBsb29rYXNpZGVzCitwcmVjaXNpb246IDQ1CitsbngyMDEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwMTM0ICBJbmV4YWN0IFJvdW5kZWQKK2xueDIwMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMDE0OSAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0NAorbG54MjAzICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwMDEzICAgSW5leGFjdCBSb3VuZGVkCitsbngyMDQgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNSAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDMKK2xueDIwNSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAxICAgIEluZXhhY3QgUm91bmRlZAorbG54MjA2ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwMSAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQyCitsbngyMDcgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIwOCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMCAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MQorbG54MjA5ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMTAgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDAKK2xueDIxMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1ICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjEyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM5CitsbngyMTMgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIxNCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzOAorbG54MjE1ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA4ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMTYgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzcKK2xueDIxNyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgxICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjE4ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwOCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM2CitsbngyMTkgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIyMCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMSAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNQorbG54MjIxICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMjIgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzQKK2xueDIyMyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY2ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjI0ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NCAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMzCitsbngyMjUgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc3ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIyNiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNiAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMgorbG54MjI3ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE4ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMjggIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0NCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzEKK2xueDIyOSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgyICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjMwICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMwCitsbngyMzEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIzMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2OCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBleHRyZW1lIGlucHV0IHJhbmdlIHZhbHVlcworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK1ByZWNpc2lvbjogMTYKKworbG54MDkwMSBsbiAxZS00MDAgICAgLT4gLTkyMS4wMzQwMzcxOTc2MTgzICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MDIgbG4gMWUrNDAwICAgIC0+ICA5MjEuMDM0MDM3MTk3NjE4MyAgSW5leGFjdCBSb3VuZGVkCitsbngwOTAzIGxuIDFlLTk5OTk5OSAtPiAtMjMwMjU4Mi43OTA0MDg5NTMgIEluZXhhY3QgUm91bmRlZAorbG54MDkwNCBsbiAxZSs5OTk5OTkgLT4gIDIzMDI1ODIuNzkwNDA4OTUzICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MDUgbG4gMWUtMTAwMDAxMyAgICAgICAgICAgICAgICAtPiAtMjMwMjYxNS4wMjY2MDAyNTUgIEluZXhhY3QgUm91bmRlZAorbG54MDkwNiBsbiAyZS0xMDAwMDEzICAgICAgICAgICAgICAgIC0+IC0yMzAyNjE0LjMzMzQ1MzA3NCAgSW5leGFjdCBSb3VuZGVkCisKK2xueDA5MTAgbG4gOS45OTk5OTllKzk5OTk5OSAgICAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTM5NDYgIEluZXhhY3QgUm91bmRlZAorbG54MDkxMSBsbiA5Ljk5OTk5OTllKzk5OTk5OSAgICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDAzNiAgSW5leGFjdCBSb3VuZGVkCitsbngwOTEyIGxuIDkuOTk5OTk5OTllKzk5OTk5OSAgICAgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDQ1ICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MTMgbG4gOS45OTk5OTk5OTllKzk5OTk5OSAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZAorbG54MDkxNCBsbiA5Ljk5OTk5OTk5OTk5OWUrOTk5OTk5ICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCitsbngwOTE1IGxuIDkuOTk5OTk5OTk5OTk5OTk5ZSs5OTk5OTkgLT4gIDIzMDI1ODUuMDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MTYgbG4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllKzk5OTk5OSAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZAorCistLSByYW5kb21zCistLSBQPTUwLCB3aXRoaW4gMC05OTkKK1ByZWNpc2lvbjogNTAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitsbngxNTAxIGxuIDAuMDAwOTg4MDA5MDY1NzQ0ODYzODg2MDQ2MDg0Nzc4Njk4MTI1MTg4NTcwMjM3Njg5NTEgLT4gLTYuOTE5ODE4Njg0NDAzMzc4Nzk5NTk0NTE0NzgzNjk1NTU4NjAwOTU0ODUxMzA0MzY4OSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDIgbG4gMTU4LjE1ODY2NjI0NjY0NjIzMDcwMTg0NTk1MDQ1MzA0MTQ1OTQ5OTAwNzE0OTg3ODI3ICAtPiA1LjA2MzU5ODc0NTg4OTU2NDc0NTQ5MDc4MDY1MDc1MDM4MjU2MDI3NTgzOTIyODc2ODQgSW5leGFjdCBSb3VuZGVkCitsbngxNTAzIGxuIDAuMDA1NjU2NjE0MTIwNTk1NzE5MjUwNDAyODU4MTQwMjE3OTk3NzUyNDkyODgzMDkzMjEgLT4gLTUuMTc0OTI5Nzc3Njc2MDYzMjEwMjA0NzU0MDMwMDQ5MTU1MDkzMTY1MTMxODk3NTIzNyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDQgbG4gMC4wMDAwMDAwNjkxNDIzMjUzMjYyMDQ4OTYwMjAwODQwMjA5MTY2NjU0NzkwMzE4MDYwNyAtPiAtMTYuNDg3MDk4NzcwODc3ODI1MzA4MTM4OTc2ODE4Njg4NzcxNjM4MTcyMzMzMDM0MzQ3IEluZXhhY3QgUm91bmRlZAorbG54MTUwNSBsbiAwLjAwMDI1MzgwMzc0NjIxMjk3NjU3NTA0NjYxNTQwNzQ5MzU1MjUxMjMxNzcwMDcwNzIzIC0+IC04LjI3ODk0OTI0MjMwMDUwMDMyMDUyNDIxNjI3NDE1NjkwMzMxMjQyNjAzMjE5NTQ1ODkgSW5leGFjdCBSb3VuZGVkCitsbngxNTA2IGxuIDgzLjAzMzY1NDA2Mzg3NzQyNjI2MTEwODU5MjU5OTE4MjQxODk1MzQ0MjY3NzU1NDgwNiAgLT4gNC40MTkyNDU5OTYyNjQ3MTM3OTc2OTQ5MjQ5ODEwODE1Njk4NDY1MDMxNjA5ODQzNjY5IEluZXhhY3QgUm91bmRlZAorbG54MTUwNyBsbiAwLjAwMDAwMDAwNDE2ODYzMjI4MDkyNDgxNjUxNjI3NzM0NjY4NDQwNjYzNjc4MTE4NzI5IC0+IC0xOS4yOTU2Nzc4NDUxMjIxNDE3NzI3OTEyOTQ1OTk3MTQ5NTAxNzUyODQ5MTU2NjY0MzAgSW5leGFjdCBSb3VuZGVkCitsbngxNTA4IGxuIDAuMDAwMDAxNDA4NDc4NzMxODc4MjA1NzAxODEyMTQyNzE5NjA1MTEwODA1MjM0NTc2NjkgLT4gLTEzLjQ3MzAwMDM0OTU4MTk2NzE4OTY2ODMwNTMxNDM4NDk1MjI1MTU1NjgwOTQ4MDMzOSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDkgbG4gNjYuMTc2MTA2NTU1MTgxNTI3MTAxNjMwMzUxMTI3NTgzOTQ0Njg5NzUyMDY5MTMyNTIyICAtPiA0LjE5MjMxOTQ2OTYyMzI1MDU4ODM2NjYxNzExMTY5NjYxMzc2OTQwMTM0MzE1MDQyNTIgSW5leGFjdCBSb3VuZGVkCitsbngxNTEwIGxuIDAuMDAwMDAwMDAwMDAwMDk4OTkwNDM0ODc0MDM1OTA5MDAxMTE2MDIwMjQ1NjIyOTc5MDggLT4gLTI5Ljk0Mzc1MzE2Njg3Nzg0MDk4NTgyMTUwODExMjkxNzk5MTUwNjY1NjU0NTE3NDE2MyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTEgbG4gMC4wMDAwMDAwMDAwMDMyNDYxODI5NjcyMTc0NzA5NzUxMDQ1MzM4ODY4MzkxMjczMzU2OSAtPiAtMjYuNDUzNTQxMjgxNDQ0NTg2ODE5MDA5NTQ2NDE4NTc3NTA3MTYzMzYyNTkwMTM5NDIyIEluZXhhY3QgUm91bmRlZAorbG54MTUxMiBsbiA3Mi42NDY5Njg4MTg0NjM1NDY0NDk0OTkxNDc1NzkwMjM1NTUwMDgzOTI4NjA0MjMzODUgIC0+IDQuMjg1NjExNjY2MDY4OTY0Njg4Mjg1MjEyODg1MzQyMzU2NjI3NjcxODIzMDQyNjQ3OSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTMgbG4gMC4wMDAwMDAwMDAwMDAwMDA2Njc1NTQ4MzEyNDYzNTYxMjU3NDI2MzE1MzgyNTk5MDUyMyAtPiAtMzQuOTQyOTEwMTQyODAyNzY5MzE5MjYyODc1MDgwMzk4ODUyNDkxNTg4NzA3MTcyNDgzIEluZXhhY3QgUm91bmRlZAorbG54MTUxNCBsbiA2MS4wMDI5MTA0NDcyMDIzOTgyMDQxMTQ5MDk0NTE4NTExMTE0MjQ2NTc2NzE5MTEwMDIgIC0+IDQuMTEwOTIxNTc1Mjg0MzM3NzMyMzM2MzE4MjA1MTQ0NjE3NzA2NjQzNDAzODA5NjUyOSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTUgbG4gOTE3LjA2OTE3NjExMzMxOTgwOTk5MjI3ODkzNTg0MDEwNTQ0NTQyMzEyMjM5MTc0Nzc0ICAtPiA2LjgyMTE4MjkwNjgzMDMxMTQxMjg3NTI0NTM2NjE5NDY0NDY5Nzk3ODc4MjYyODI5MDcgSW5leGFjdCBSb3VuZGVkCitsbngxNTE2IGxuIDAuMDAwMDAwMDAxNzA4MjM3OTQ4ODM2NzMwODMzNTg1NDk3NDkwNzg5NzIwMDM5NjUxOTQgLT4gLTIwLjE4NzgwMzQzNjk3NjE1MDQ3NzI5NzI0NjY2Njc3MTYyNjgyNzA1NzE5MTAyMzAwNCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTcgbG4gMC41MzczMTc2Nzg0NTM1ODIyNDQ0NTgwOTc2MTMxNTE1OTI0OTg5ODU2NjU0MjkxMDY0OSAtPiAtMC42MjExNjU3NzkzOTk2ODQwOTIxMTczNjQxMzYyODIzNjI4NTE2MDA0ODM1NzAwMDk2MSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTggbG4gMC4wMDAwMDAwMDAwMDAwMDAwODk2NTI5MTM5Mjg4MjgwNDE2MTI5OTc1ODcwODAzMzM3MyAtPiAtMzYuOTUwNTg1OTcwOTgwODU3Mzc2MDgxMjY1MDczMjc2MzAzNjcwODIwMDU2OTE2MjA2IEluZXhhY3QgUm91bmRlZAorbG54MTUxOSBsbiAwLjAwMDAwMDAwMDA2OTkwMjQ0OTE2MDI2NDI5OTA0NDk4Mjc4OTgyNTMwMTcwMjk1NjY4IC0+IC0yMy4zODM5MjA0MjkyNDQ0NTc1NzgzNzM1MjM1MDg0Mjc3ODMxNDQ1ODk0ODA0MjA3NTMgSW5leGFjdCBSb3VuZGVkCitsbngxNTIwIGxuIDQuMDMxMjU0Mjk3NzA3MDMwMDA3MDUwNjA2NDY2NjUzNjQ3ODM3MzgwMTk4ODU0MDYxNCAgLT4gMS4zOTQwNzc1Njc2NTkyNDUxOTQ1Nzk1NzUyNzk2NDIxMzkxODcxMzAyMDI0NzYzMzA1IEluZXhhY3QgUm91bmRlZAorbG54MTUyMSBsbiAyNzEuODQ5OTEzMTE1NTE4NzU2MDE0MzI1MTg4MTk1NjIzOTE2OTkzMjQ2MzIzOTY0MjMgIC0+IDUuNjA1MjUwMTIzOTg3Mzg2MjUxNzkxNjY3OTc0NzE0NjUzOTgwODA3NzQzMTg3MzQ3OCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjIgbG4gNy40MTE4NjcxNjI5MzczODY0NjY3MjI5NDQ1NzQ2ODYyMzE0NDQzODk1NDA0ODE4Njg5ICAtPiAyLjAwMzA4MjM4NjM3MDYzNDQ2MjgyMzkxNDc2MzkzMTgyODk5NjE5MTcwNjAxMjExNDEgSW5leGFjdCBSb3VuZGVkCitsbngxNTIzIGxuIDAuMDAwMDAwMDAwMDAwMDIwMjYzMTE0NTI2MjUzNjQ5MDUzNTczMjE2NjQxODYwMzQyNTggLT4gLTMxLjUyOTk3NDE4MDA1NDQzODc5MjA0Mzg1Njg3NzMxNDA0Mzc5NDMyMDk1MTEzNDc1NCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjQgbG4gMC4wMDAwMDAwMDAwMDAwOTU2MzM5ODY1MTI2MTc1Njk1MjM5ODI1MDYyNDczNzgwOTM0NyAtPiAtMjkuOTc4MjQ4MTMwNTc2OTcyOTUzMTQxMjg0MTM2OTYyNjcwMDIxMzY4ODM0NzkyNTc5IEluZXhhY3QgUm91bmRlZAorbG54MTUyNSBsbiAwLjAwMDAwMDAwMDA5NTU2NzcyNjY5NDA5ODU4NjUzMDI2NTU4MjIzNDY1MTk3ODA4OTkxIC0+IC0yMy4wNzExODU5Mzk3NDgyODU1NDEyMjgyMDYxNjE0NzI5NTY2NjExOTY5NTY3NDExODYgSW5leGFjdCBSb3VuZGVkCitsbngxNTI2IGxuIDYuODQ0MTY0ODI5ODAyNzMwMTI5MjM0MjA1NzI0ODczNzMyNjE1MjI1MDc5NDAyNjc2MSAgLT4gMS45MjMzOTY0Mzk1ODAxOTQ2NTk3MjcyNTg5NDczNDE3OTQ4MDI0MzYxMDA1MDgyOTA4IEluZXhhY3QgUm91bmRlZAorbG54MTUyNyBsbiAwLjAwMDAwMDAwMDAwMDczMDU5Njk5ODg0NDM5OTc5Mzk0OTQ1ODIyMDM1NzA0MjY0NTc3IC0+IC0yNy45NDQ5MTQzODgzNTM3MjQ3MTg4MzYxMDE4Mjg2Nzc3NzE5NjcxMjg1MDk2MDMxNTggSW5leGFjdCBSb3VuZGVkCitsbngxNTI4IGxuIDAuMDAwMDAwMDAwMDAwMDAwMDI2MTAwNzgyODA0MTkwODIyNjMxMzgwNjQ3NDU0MTY3ODcgLT4gLTM4LjE4NDU2NjM2NzUxNjIwNzg4NTU3Mzc3MzMyMDEzNTk2NTc5ODcxNzEyMDczNTExNSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjkgbG4gMC4wMDAwMDAwMDAwMDAwMDAwMDE1MDI1OTUxNzE2NjI5NDI0MzA4ODU0NjgwNjA4MzI4MyAtPiAtNDEuMDM5MzM3OTQ2MjY2Njc2MTA4NTM4MTcwODM3NTgwMDUxNjk5NjE4MzM0OTI4NDIxIEluZXhhY3QgUm91bmRlZAorbG54MTUzMCBsbiAwLjAwMDAwMDAwMDAwMDAwMDg3OTE5MTYwNTQxNzE0NTgwNzA3MTgxOTY5NzA4NTAyMDkxIC0+IC0zNC42Njc1Mjg4MTg4Mjc2NzE1MDc1MTQzMTk3NDQwNDc0NDA2OTYxODczNTg2NzY4NDggSW5leGFjdCBSb3VuZGVkCitsbngxNTMxIGxuIDAuMDAwMDAwMDAwMDAzOTU3MjY3MjUxMjA3ODc3NjMyNzE4NDk1Nzc3MDgwNjg1ODQ1OTggLT4gLTI2LjI1NTQ2NzQxNjk2MTM1Nzc0MTgxODczNTc4NzIyNjY3MTkzODY3ODQyNDc0ODQzMSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzIgbG4gMC4wMDAwMDAwMDAwMjAxNDMzNDkwMTY2OTM2NjIxODAxODM3NzIxMzE1MDcxNTkzODM1NSAtPiAtMjQuNjI4MTQ2OTU1NjM1MzU5MDM1Mjg5MTIzMDI3MzE5OTY5MjAxNjkzNzM3MTU5MTA4IEluZXhhY3QgUm91bmRlZAorbG54MTUzMyBsbiAwLjAwMDAwMDA4MDk3OTI3MTAxMTAxMDkzMTE3NzUzOTM4NzY2MjQxNDQyODk2MDMwNjM3IC0+IC0xNi4zMjkwNzI2Mjg0Njk3MTUxNzg2MzcxNzgzNjU3MTAzNzMzOTgyMDMxOTA5Mzc0NTQgSW5leGFjdCBSb3VuZGVkCitsbngxNTM0IGxuIDAuMDAwMDAwMDAwMDAwMTcxMTU4MzQxNjI2MzI4NjQzOTIwMzk2NjgxMTYyNDM5ODQxNzYgLT4gLTI5LjM5NjE4NzI5MjQzNDg5ODIyNTQ1MzYyNjc5NDQ1OTI4NTE1NzI2MzE3NzUyODAzNCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzUgbG4gMC4zOTE2ODMxNzU5Mzg2NjMzNDA4NzMwNTQ1OTkzMzcyMzg2NDI5NDg1NzA4NjEwNTAzNSAtPiAtMC45MzczMDE5OTA2Mjc1NzI0MDQ4NTgzNjYzNzMwNjc4NTAzNzM2ODc0NjczNzY5MzAyOSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzYgbG4gNzkuMzM1MDM2Nzk4OTcxNTE1MDI2NTE5NjMwMTAzMzI1MzY5NzI5NjM3NTE0MTI3NjE3ICAtPiA0LjM3MzY3OTg1NzAyODc4Mjg4MjM3NzIxNDk3MzUxNzA0MzEwMTA2MTY5NjE5NzY5NjUgSW5leGFjdCBSb3VuZGVkCitsbngxNTM3IGxuIDAuMDAwMDAwMDAwMDAwMDAwNTYwMDQ5NTIxMjk5MjYxMzc0MTM2MDIxMTY1OTE0OTM2MjUgLT4gLTM1LjExODUwNjQ2MzE4MTg3MDAyMDczMDY4NTg4NDMzMzAwMDI0MTAzOTAyODEyNzIxMyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzggbG4gMC4wMDAwMDAwNjAwNjAzNTkwNzg0Mzg5MDkxODgzMjQ4MTA5OTY2MDYzOTU1MzY2NjA3OCAtPiAtMTYuNjI3OTE1Nzk1NzQ3MTEyNTY2NTMyNzA1OTc0ODUzMTE0NDU0NDA1MDEwNDcyMDQzIEluZXhhY3QgUm91bmRlZAorbG54MTUzOSBsbiAwLjAwMDAwMDAwMDg1MjQyMDI0OTM3NDE0OTA2MzcxMzMzODI2NTc0NjMyNDUwNTg3NTkwIC0+IC0yMC44ODI5NDE0NjAyNjgxMDEwODAxODY0ODIyMzA2NTc3NzQ5OTcyNzM0OTQxMDcyMjEgSW5leGFjdCBSb3VuZGVkCitsbngxNTQwIGxuIDAuMDAwMDAwMDAwMDAwNDM2NzEwOTk0OTkyNjIzNTAzMTYxNzMyNDY1NTA3NzE5NTE1NjEgLT4gLTI4LjQ1OTUwNDc1NzI4NTYzOTIyMTc3NjMwNTk2ODQ2OTA1ODg1NDU1ODcyNjU5Mzk0NSBJbmV4YWN0IFJvdW5kZWQKKworLS0gUD0zNCwgd2l0aGluIDAtOTk5CitQcmVjaXNpb246IDM0CitsbngxMjAxIGxuIDAuMDA4NjczMjg4MDgxNTkyNzE4Mjk5NzU2NjgxMDMzNDM5NCAtPiAtNC43NDc1MDczMTE5MjA4NDQ3NTI0ODY5MzgxODc5NzM3MjEgSW5leGFjdCBSb3VuZGVkCitsbngxMjAyIGxuIDAuMDAwNzEwNDEwMzY5MzQ2MDI2MDYwOTc5MjIyMjU2OTg1NCAtPiAtNy4yNDk2Njc3Njk5MDM1MDMwMjMwMDU1NDkyNTAzNDc2OTUgSW5leGFjdCBSb3VuZGVkCitsbngxMjAzIGxuIDc4Ni44Mzk4OTQ1Mzg1MTA1MTkwNjk3NTQxNDkzMzkyNzQyICAtPiA2LjY2ODAyNDc5MDAzMTgzNjM0MDQ3MTgyNDE0NzAxMDU0NiBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMDQgbG4gMC43NzIzMDczNjIwMjgyNjg3NjU2ODk1MTkwMTcxOTY3Mzk5IC0+IC0wLjI1ODM3MjY3MDg1MDY4NTA4Njg3ODY4MTYyMzgyMTczMjYgSW5leGFjdCBSb3VuZGVkCitsbngxMjA1IGxuIDAuMDA2MTA1Nzk1MTUxNzE5NzYzMTI4NzE4MzkzODQxMjIwMCAtPiAtNS4wOTg1MTY5MzM5MTg3OTczNDcwNjQ0NTQxMDM3NDI2MzUgSW5leGFjdCBSb3VuZGVkCitsbngxMjA2IGxuIDAuNjE4MTM3OTcwODE4NDM5MzczMDEwMzkxNzU2MjQ5ODc0NSAtPiAtMC40ODEwNDM1OTI2OTAzMzY1MDg3NDYzMzg3NzYwMzUwMDIxIEluZXhhY3QgUm91bmRlZAorbG54MTIwNyBsbiAwOS4xMzg4ODI2MTIyOTAzOTk4OTExMDc1MzM4OTA5Njc2MCAgLT4gMi4yMTI1MzgxMjU1MDc5NzU1NzQ1MDk1NjMwMjc2OTYwMjEgSW5leGFjdCBSb3VuZGVkCitsbngxMjA4IGxuIDgwMi4wMTA1NDE3MDYzMTQzNjk2NDk3MjkyMTU4MTQ3MTc0ICAtPiA2LjY4NzEyMTc1MjA1MjM0MTczNzIzNDgzMjIwMzM1MDIxNCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMDkgbG4gNzc4Ljc3NDk3MTAzODc3NzM3MTM1MjMwMjg0OTczMzMwNTggIC0+IDYuNjU3NzIyMTM1MTI2OTM1NDcyMDg2NjI1MDMxNDEzMDMxIEluZXhhY3QgUm91bmRlZAorbG54MTIxMCBsbiAwLjAwMjQ0NTcyOTU4OTUzNDY1MDI1MTM1Njc2NzkzOTA2MTYgLT4gLTYuMDEzNDExNzk5OTQwMjQ1MzQ1MzIxMzQ4MjkwMzk4NTE3IEluZXhhY3QgUm91bmRlZAorbG54MTIxMSBsbiAwLjAwMDA1MTEyOTY5NDc4NzI4MjgzMTAzMzg4NjQyMTc4NjAgLT4gLTkuODgxMTQ1MTE4MjM3MjgxNzk4MDgxNTczMTMxNzExNjM2IEluZXhhY3QgUm91bmRlZAorbG54MTIxMiBsbiAwLjAwMDAyNDY4MDM1MDg2MDI1NTQ5MjQ5Mzg2ODUxNTU2NTggLT4gLTEwLjYwOTUwMzE0MjY0ODI1NjYxODI1MzYwOTcxNDMwMjE4IEluZXhhY3QgUm91bmRlZAorbG54MTIxMyBsbiA5LjAyNzg5ODE5OTI1MzUxMTY2ODI0Mjk3Nzc2NjYxNjA4MiAgLT4gMi4yMDAzMTk1ODI3Nzg4OTkwMjk3ODYwMTc4MzA1NTcyOTMgSW5leGFjdCBSb3VuZGVkCitsbngxMjE0IGxuIDAuMDk5MTgxMjM5NjU0MjUwNTYzMTg1MDY5MjgwMDkwNDE4OCAtPiAtMi4zMTA4MDYzOTg5NjQ2NzIyNTg4MjMwNDMxODA0MDAzODQgSW5leGFjdCBSb3VuZGVkCitsbngxMjE1IGxuIDAuMDAwMDAwMDAwMDA3MDIzODgxMDE0MzAyODgxMTIyMzkyNCAtPiAtMjUuNjgxNzA1MTk5NjE2MzY2NDcxNzQ3MTQ1MzgyOTAwNzUgSW5leGFjdCBSb3VuZGVkCitsbngxMjE2IGxuIDIuNjMwMTAxNjY1MzQyODI2NDk0NzMwMzk0NzI5MzEzMTY3ICAtPiAwLjk2NzAyMjUwMTQ2NjQzNjc0NjUxMjgyNDMwMzk3NDk1NTkgSW5leGFjdCBSb3VuZGVkCitsbngxMjE3IGxuIDAuMDA1Njg3ODkyODU5NDM1OTU4NzY5MTUyNjA2MzI1NDY4MyAtPiAtNS4xNjk0MTU0MjI5MDQwMzc4MTk3MzY2MzczOTk0NDUwOTYgSW5leGFjdCBSb3VuZGVkCitsbngxMjE4IGxuIDU2Ny4zNDM2MDQ3MTIxMDU3ODQzOTA4MTA2NTczMDk1NTkwICAtPiA2LjM0MDk2NTEyNDk2NDI1ODQ4NjQ2MzQ0NDM2MDc4Nzk3MCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTkgbG4gMS4xOTkyOTEyNDgxMjQ2NTU5OTY2MTQ2MDU3NDU2NDk3MjUgIC0+IDAuMTgxNzMwNzU1NzQyNTkxMTgwNTc2NTA4Nzc1NTY3NTY1NyBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjAgbG4gMjUuMDIwNTA0NDg1ODIwMzEwOTg2OTYyNjc0NzkxMzU1NTcgIC0+IDMuMjE5Njk1NjY4MTM3NjU5MTM5NTQ0MTc4OTA1NDU5MzE3IEluZXhhY3QgUm91bmRlZAorbG54MTIyMSBsbiAwLjAwMDAwMDAwMDAwMDk5Mzk1OTcwMjM1NTg3NTY5NjEzMDAgLT4gLTI3LjYzNzA3OTcyOTk2NTM3NjM2NTA0Mzk2NTU4MjU5MDU4IEluZXhhY3QgUm91bmRlZAorbG54MTIyMiBsbiAwLjAwMDAwMDc5ODg1NTE2NzAxNTk0Mjk3MTY1MDY0MzA0MDMgLT4gLTE0LjA0MDA4NjE3NTQyNTk3MjMwOTg4MTk4NjEyMzc2NDE1IEluZXhhY3QgUm91bmRlZAorbG54MTIyMyBsbiA0LjY4MTUxNTgwMDE3NjEyOTE4NDg3Mzc3MDYwNTU4OTc5NSAgLT4gMS41NDM2MjE5NDY0MTUzODMzMzg5NzIxMjQ0NDU0NDU3NDggSW5leGFjdCBSb3VuZGVkCitsbngxMjI0IGxuIDE1Ljk1MTI2NjY5MTYxMTAzMDExMjA2NjU4NzQ5MzQ1NzgxICAtPiAyLjc2OTUzODI0MjQ3OTQ4MzUzOTI3NTk4NjM5NTQ0MzUzOSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjUgbG4gMC4wMzAxNjI2NzgzOTIyMjExMjEzNjc1NDU3Mjc5MDc2MDY2IC0+IC0zLjUwMTE0OTkzMzY3NzI4MzM0MTAyMzkzMjI4MTgyNjM0MSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjYgbG4gMDAwLjAwNDA1NDQwNjQ4ODE4MjE3NzA1Mjg0NzUxODU2NzQgIC0+IC01LjUwNzk1MDk2NzU1NzAyMTY3MTY0NzE2NTg4OTYwODMyNCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjcgbG4gMjkuMDE2MTcwOTU5MzU1OTM3OTIwOTU5MTM3ODUxMDAzNjAgIC0+IDMuMzY3ODUzMjkzODYyNzQ1NjUxODg4NDUwMDA0NDczMjk3IEluZXhhY3QgUm91bmRlZAorbG54MTIyOCBsbiA3OC4wMTgzNjE2NzM0NDczNjczMzAyNDgwNDI0MzE5NTMyMyAgLT4gNC4zNTY5NDQyMDUwNTU3Njg1NzU5ODc3ODEzNzUwMDM5OTIgSW5leGFjdCBSb3VuZGVkCitsbngxMjI5IGxuIDAuMDAwMDAwMDA5NjU0NTMxOTMxNjk2NTMyMTE1ODYzNDg5MyAtPiAtMTguNDU1ODM4NDAxNjA5NjU4MTQ0NjIwOTU0NzczNjUwMTMgSW5leGFjdCBSb3VuZGVkCitsbngxMjMwIGxuIDk3Ljk1NDc1MjM3NzIwNTc5NzUyNzcwNTg3MTg1MDc0NDI4ICAtPiA0LjU4NDUwNTY2MTYxMjgxMjc0MjIwODYxOTM1ODIxNDcyOSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzEgbG4gNTI4LjA2MDkyNjIwNTA0MjMyNDY0MDI1NjQyMjg0MzIzNzEgIC0+IDYuMjY5MjExNjY3NTg5MTM4MTEzMzk2NTgzODk0MzE1OTU2IEluZXhhY3QgUm91bmRlZAorbG54MTIzMiBsbiAwLjAwMDAwMDIyNTAwNjQzNDk3MzI5Njk2OTY2NjA0NTI5NzIgLT4gLTE1LjMwNzEzNjgzNTI2OTYzOTk2NzEyMTY3NzAxNzM4NzI0IEluZXhhY3QgUm91bmRlZAorbG54MTIzMyBsbiA0Ny45NzA2MzYzNzc2Nzk5ODY1ODU2NzE5OTA0OTcyNTc1NCAgLT4gMy44NzA1ODkwODE1ODU2NjA2OTIxOTU5ODk4NTQ4NDIzNzIgSW5leGFjdCBSb3VuZGVkCitsbngxMjM0IGxuIDAuMDAwNTM5NDMxMTM0NDU0MTQzMjMxODg1MzUxMzQxNDM2MSAtPiAtNy41MjQ5OTU0MjgzOTM5MjU5MzQwODcxMjY3MDI5NzQxMjEgSW5leGFjdCBSb3VuZGVkCitsbngxMjM1IGxuIDAuMDAwMDAwMDA5MDk3MzM4NTY0OTU2NzQ3MTY3NDk3MjYzMyAtPiAtMTguNTE1MjgzOTMxNTg5MzE3ODM0NDcwMzUwMDQxMjU3OTEgSW5leGFjdCBSb3VuZGVkCitsbngxMjM2IGxuIDAuMDAwMDAwMDAwMDIzODc3NjQ5MDIyNzU3NjE5NzMxNzk3NyAtPiAtMjQuNDU4MDc4MjgxODgzODk1NjEzMzExNTg4NzkyMDcyNjIgSW5leGFjdCBSb3VuZGVkCitsbngxMjM3IGxuIDAuMDAwMDIzNjU4NzAwMDIzMTkyMTUzMjE0NTMyNjIxODc1OCAtPiAtMTAuNjUxNzc5NjQ0OTk4MjMzMTQ5NTI0MjkyNzc5NzkwMzQgSW5leGFjdCBSb3VuZGVkCitsbngxMjM4IGxuIDQ5OS4xMjc3NDQ4ODQ2MTMwNzA5ODI3MTU0NTU2MTI1OTQyICAtPiA2LjIxMjg2MjA2NDc2MTQyNzk2NzQ2MTE4ODA4MzUxNDc3NCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzkgbG4gMC4wMDAwMDAzOTYwMTkyMzAwMjg0Nzg3NjYzNzEyNDE3NjQ3IC0+IC0xNC43NDE4MDMwNjYxOTI5ODU0ODA5MzY5NzYwODI5MzI4NCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyNDAgbG4gNDEuMDgyNjgzNTA4Mjk0Nzc0NTE2NjcyMjg4OTI0OTUxMzYgIC0+IDMuNzE1NTg2NzA2ODg3Mjc4MDM5MTczNTg0ODU5MjE4OTYwIEluZXhhY3QgUm91bmRlZAorCistLSBQPTE2LCB3aXRoaW4gMC05OQorUHJlY2lzaW9uOiAxNgorbG54MTEwMSBsbiA3Ljk2NDg3NTI2MTAzMzk0OCAgLT4gMi4wNzUwNDEyODIzNTIyNDEgSW5leGFjdCBSb3VuZGVkCitsbngxMTAyIGxuIDEzLjU0NTI3Mzk2ODQ1Mzk0ICAtPiAyLjYwNjAzNzcwMTg3MDI2MyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDMgbG4gMC4wMDA4MDI2NTU0MzQxMzMxIC0+IC03LjEyNzU4NTAzNDMyMTgxNCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDQgbG4gMC4wMDAwMDMwNTgyMjMzMjYxIC0+IC0xMi42OTc2NzY0MjMwMDYyNSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDUgbG4gMC4wMDA0NDc3NDk3NTA5NjcyIC0+IC03LjcxMTI3NjA3MzIxMDc2NiBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDYgbG4gNy42MTYyNjg2MjI0NzQzNzEgIC0+IDIuMDMwMjg2NTY3Njc1MTQ4IEluZXhhY3QgUm91bmRlZAorbG54MTEwNyBsbiA1MS41ODMyOTkyNTgwNjM4MSAgLT4gMy45NDMxOTc5NjIzMDk1NjkgSW5leGFjdCBSb3VuZGVkCitsbngxMTA4IGxuIDAuMDAxODE5NzQ5Nzk1MTI2MyAtPiAtNi4zMDkwNTYyNjI1NDkzNDUgSW5leGFjdCBSb3VuZGVkCitsbngxMTA5IGxuIDIuOTU2MjgyNDU3MDcyOTg0ICAtPiAxLjA4MzkzMjU1MjMzNDU3NSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTAgbG4gMC4zODQzMzI1NTc5MTg5OTA2IC0+IC0wLjk1NjI0NzA2NDk0MDA1NTggSW5leGFjdCBSb3VuZGVkCitsbngxMTExIGxuIDAuMDA3NDQ2NjMyOTI2NTY2MyAtPiAtNC44OTk5OTMzMDQ5MTkyMzcgSW5leGFjdCBSb3VuZGVkCitsbngxMTEyIGxuIDAuMDAwMzM3MjQ3ODUzMjk5MyAtPiAtNy45OTQ2OTI0MjgyMDYzNzggSW5leGFjdCBSb3VuZGVkCitsbngxMTEzIGxuIDAuMDA4NDc5MjI2MzE2NzgwOSAtPiAtNC43NzAxMzYwNjk1NjkyNzEgSW5leGFjdCBSb3VuZGVkCitsbngxMTE0IGxuIDUuOTI2NzU2OTk4MTUxMTAyICAtPiAxLjc3OTQ3NzE4MjgzNDMwNSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTUgbG4gOS4wMjU2OTkxNTIxODA4OTcgIC0+IDIuMjAwMDc1OTY5NjA0MTE5IEluZXhhY3QgUm91bmRlZAorbG54MTExNiBsbiAxLjkxMDEyNDY0MzUzMzUyNiAgLT4gMC42NDcxNjg0OTgzMjM4MTgzIEluZXhhY3QgUm91bmRlZAorbG54MTExNyBsbiAwLjgxNTg5MjI3MTE0MTEwMjAgLT4gLTAuMjAzNDcyOTUzMzkzOTM4NyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTggbG4gMC4wMDY3MDgwMDE2NDc1MzIyIC0+IC01LjAwNDQ1NDE4OTQxNDEzOSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTkgbG4gMC4wMDQ3NTgzMjQyMDkyNzE2IC0+IC01LjM0Nzg1OTcyOTYwMTA5NCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjAgbG4gMC4wMzg2NjQ3NDExNjQxMzM5IC0+IC0zLjI1MjgyNzE3NTI2MzExMyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjEgbG4gMC4wMDUwMjI2NDI3ODQxNzYxIC0+IC01LjI5Mzc5OTAzMjc3NDEzMSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjIgbG4gNi45Mjc5Mzc1NDE2MzcyNjEgIC0+IDEuOTM1NTYyMTU1ODY2OTA2IEluZXhhY3QgUm91bmRlZAorbG54MTEyMyBsbiAwLjAwMDAwOTU3NDUzNDM1MTMgLT4gLTExLjU1NjQwMzY1NTc5ODE0IEluZXhhY3QgUm91bmRlZAorbG54MTEyNCBsbiAxLjYwMjQ2NTQ5Mjk1NjUzOCAgLT4gMC40NzE1NDMzNzYzMjQzOTM2IEluZXhhY3QgUm91bmRlZAorbG54MTEyNSBsbiAzOC45ODQxNTYyNTA4NzUzNSAgLT4gMy42NjMxNTUzMTM2MTAyMTMgSW5leGFjdCBSb3VuZGVkCitsbngxMTI2IGxuIDUuMzQzMTgyMDQyMjc2NzM0ICAtPiAxLjY3NTgyMTM2MzU2ODExMiBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjcgbG4gNTUuODk3NjM3MDMyNDU4MTYgIC0+IDQuMDIzNTIyMTA3OTM0MTEwIEluZXhhY3QgUm91bmRlZAorbG54MTEyOCBsbiAwLjc0NDUyNTc4MTAyODA4NDcgLT4gLTAuMjk1MDA3Nzk4ODEwMTAzMCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjkgbG4gMS42MzE0MDczMTQ5NDYwOTQgIC0+IDAuNDg5NDQzMDI1NzIwMTI0OCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzAgbG4gMC4wMDA1NDYyNDUxOTMyNjAyIC0+IC03LjUxMjQ0MjYxMTExNjg1MiBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzEgbG4gMC4wMDAwODY0MTczMjY5MzYyIC0+IC05LjM1NjMyMjM1OTAxNzMxNyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzIgbG4gNS4yMjcxNjE3MTkxMzI4NDkgIC0+IDEuNjUzODY4NDM4NDM5NjM3IEluZXhhY3QgUm91bmRlZAorbG54MTEzMyBsbiA2MC41NzA3ODQ2Njk0MTk5OCAgLT4gNC4xMDM4MTI2NzU2NjI0NTIgSW5leGFjdCBSb3VuZGVkCitsbngxMTM0IGxuIDAuMDk5Mjg2NDMyNTMzMzE2MCAtPiAtMi4zMDk3NDYzNDgzNTAzMTggSW5leGFjdCBSb3VuZGVkCitsbngxMTM1IGxuIDA5LjQ4NTY0MjY4NDQ3MzI1ICAtPiAyLjI0OTc3OTM1OTA3NDk4MyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzYgbG4gMC4wMDM2MTA2MDg5MzU1NjM0IC0+IC01LjYyMzg3ODg0MDY1MDc4NyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzcgbG4gMS44MDUxNzY4NjU1ODcxNzIgIC0+IDAuNTkwNjU4NTczNDU5MzcwNyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzggbG4gNjIuNTkzNjMyNTk2NDIyNTUgIC0+IDQuMTM2NjYzNTU3MjIwNTU5IEluZXhhY3QgUm91bmRlZAorbG54MTEzOSBsbiA0LjM3MzgyODI2MTEzNzIwMSAgLT4gMS40NzU2Mzg2NTc5MTIwMDAgSW5leGFjdCBSb3VuZGVkCitsbngxMTQwIGxuIDAuOTk0NDgzNTI0MTQ4NzM4ICAtPiAtMC4wMDU1MzE3NDc3OTQ5Mzg2OTAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9Nywgd2l0aGluIDAtOQorUHJlY2lzaW9uOiA3CitsbngxMDAxIGxuIDAuMDkxMjAyNSAtPiAtMi4zOTQ2NzMgSW5leGFjdCBSb3VuZGVkCitsbngxMDAyIGxuIDAuOTcyODYyNiAtPiAtMC4wMjc1MTI0MiBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDMgbG4gMC4zODg2MDMyIC0+IC0wLjk0NTE5NjUgSW5leGFjdCBSb3VuZGVkCitsbngxMDA0IGxuIDguNzk4NjM5ICAtPiAyLjE3NDU5NyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDUgbG4gMi40NTkxMjEgIC0+IDAuODk5ODA0MCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDYgbG4gMi4wMTMxOTMgIC0+IDAuNjk5NzIyMCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDcgbG4gOS4wNjQ4NTcgIC0+IDIuMjA0NDA1IEluZXhhY3QgUm91bmRlZAorbG54MTAwOCBsbiA1Ljc5NjQxNyAgLT4gMS43NTcyNDAgSW5leGFjdCBSb3VuZGVkCitsbngxMDA5IGxuIDAuMTE0MzQ3MSAtPiAtMi4xNjg1MTcgSW5leGFjdCBSb3VuZGVkCitsbngxMDEwIGxuIDAuNTM0MTU0MiAtPiAtMC42MjcwNzA3IEluZXhhY3QgUm91bmRlZAorbG54MTAxMSBsbiA2LjY5Mzc4MSAgLT4gMS45MDExNzkgSW5leGFjdCBSb3VuZGVkCitsbngxMDEyIGxuIDAuMDA4MTc3OSAtPiAtNC44MDYzMjAgSW5leGFjdCBSb3VuZGVkCitsbngxMDEzIGxuIDguMzEzNjE2ICAtPiAyLjExNzg5NSBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTQgbG4gMy40ODY5MjUgIC0+IDEuMjQ5MDIwIEluZXhhY3QgUm91bmRlZAorbG54MTAxNSBsbiAwLjE4MDE0MDEgLT4gLTEuNzE0MDIwIEluZXhhY3QgUm91bmRlZAorbG54MTAxNiBsbiAwLjUyMjcxNDggLT4gLTAuNjQ4NzE5MyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTcgbG4gNy44MTgxMTEgIC0+IDIuMDU2NDQzIEluZXhhY3QgUm91bmRlZAorbG54MTAxOCBsbiAwLjA4NzA2NzEgLT4gLTIuNDQxMDc2IEluZXhhY3QgUm91bmRlZAorbG54MTAxOSBsbiA4LjE1Mzk2NiAgLT4gMi4wOTg1MDQgSW5leGFjdCBSb3VuZGVkCitsbngxMDIwIGxuIDIuMDQwOTc1ICAtPiAwLjcxMzQyNzYgSW5leGFjdCBSb3VuZGVkCitsbngxMDIxIGxuIDEuNDgxNjQyICAtPiAwLjM5MzE1MDkgSW5leGFjdCBSb3VuZGVkCitsbngxMDIyIGxuIDAuMjYxMDEyMyAtPiAtMS4zNDMxODggSW5leGFjdCBSb3VuZGVkCitsbngxMDIzIGxuIDAuNDY2NzIzICAtPiAtMC43NjIwMTkzIEluZXhhY3QgUm91bmRlZAorbG54MTAyNCBsbiAwLjA1MTg3NTYgLT4gLTIuOTU4OTA3IEluZXhhY3QgUm91bmRlZAorbG54MTAyNSBsbiAyLjA1NjQxMCAgLT4gMC43MjA5NjE3IEluZXhhY3QgUm91bmRlZAorbG54MTAyNiBsbiAwLjE4MTUyMiAgLT4gLTEuNzA2Mzc4IEluZXhhY3QgUm91bmRlZAorbG54MTAyNyBsbiAwLjUxNTU1MSAgLT4gLTAuNjYyNTE5MCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjggbG4gOC40MjUwODkgIC0+IDIuMTMxMjE0IEluZXhhY3QgUm91bmRlZAorbG54MTAyOSBsbiAyLjA3NzA5MSAgLT4gMC43MzA5Njg0IEluZXhhY3QgUm91bmRlZAorbG54MTAzMCBsbiA2LjIxMjcwNSAgLT4gMS44MjY1OTYgSW5leGFjdCBSb3VuZGVkCitsbngxMDMxIGxuIDUuNzI5MzQzICAtPiAxLjc0NTYwMSBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzIgbG4gNC44MzEyNTEgIC0+IDEuNTc1MTA1IEluZXhhY3QgUm91bmRlZAorbG54MTAzMyBsbiAyLjAyOTc2MCAgLT4gMC43MDc5MTc2IEluZXhhY3QgUm91bmRlZAorbG54MTAzNCBsbiA4LjYxNTA2MCAgLT4gMi4xNTM1MTIgSW5leGFjdCBSb3VuZGVkCitsbngxMDM1IGxuIDAuMDYxMTUxMSAtPiAtMi43OTQ0MDcgSW5leGFjdCBSb3VuZGVkCitsbngxMDM2IGxuIDUuMTk1MjY5ICAtPiAxLjY0Nzc0OCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzcgbG4gOS42MTc2ODYgIC0+IDIuMjYzNjA0IEluZXhhY3QgUm91bmRlZAorbG54MTAzOCBsbiAwLjAwNDkzODIgLT4gLTUuMzEwNzU0IEluZXhhY3QgUm91bmRlZAorbG54MTAzOSBsbiAyLjc4Njg0MCAgLT4gMS4wMjQ5MDggSW5leGFjdCBSb3VuZGVkCitsbngxMDQwIGxuIDAuMDA5MTA3MyAtPiAtNC42OTg2NzkgSW5leGFjdCBSb3VuZGVkCisKKy0tIGZyb20gaGVyZSAzLWRpZ2l0IHRlc3RzIGFyZSBiYXNlZCBvbiByZXZlcnNlIGV4cCB0ZXN0cworcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK2xueDAwMSAgbG4gMCAgICAgICAgICAgLT4gIC1JbmZpbml0eQorbG54MDAyICBsbiAwLjM2Nzg3OTQ0MSAtPiAgLTEuMDAwMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMDMgIGxuIDEgICAgICAgICAgIC0+ICAgMAorbG54MDA1ICBsbiAyLjcxODI4MTgzICAtPiAgIDEuMDAwMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMDYgIGxuIDIuMDAwMDAwMDAgIC0+ICAgMC42OTMxNDcxODEgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwNyAgbG4gK0luZmluaXR5ICAgLT4gICBJbmZpbml0eQorCistLSB0aW55IGVkZ2UgY2FzZXMKK3ByZWNpc2lvbjogICA3CitsbngwMTEgIGxuIDEuMTA1MTcxIC0+ICAwLjEwMDAwMDEgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTIgIGxuIDEuMDEwMDUwIC0+ICAwLjAwOTk5OTgzNSAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTMgIGxuIDEuMDAwMDEwIC0+ICAwLjAwMDAwOTk5OTk1MCAgSW5leGFjdCBSb3VuZGVkCitsbngwMTQgIGxuIDEuMDAwMDAxIC0+ICA5Ljk5OTk5NUUtNyAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTUgIGxuIDEuMDAwMDAwIC0+ICAwCisKKy0tIGJhc2ljIGU9MCwgZT0xLCBlPTIsIGU9NCwgZT49OCBjYXNlcworcHJlY2lzaW9uOiAgIDcKK2xueDA0MSAgbG4gMi43MTgyODIgICAgICAtPiAgMS4wMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwNDIgIGxuIDAuMzY3ODc5NCAgICAgLT4gLTEuMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorbG54MDQzICBsbiAyMjAyNi40NyAgICAgIC0+ICAxMC4wMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDA0NCAgbG4gMC4wMDAwNDUzOTk5MyAtPiAtMTAuMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwNDUgIGxuIDIuNjg4MTE3RSs0MyAgLT4gIDEwMC4wMDAwICAgIEluZXhhY3QgUm91bmRlZAorbG54MDQ2ICBsbiAzLjcyMDA3NkUtNDQgIC0+IC0xMDAuMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDA0NyAgbG4gSW5maW5pdHkgICAgICAtPiAgSW5maW5pdHkKK2xueDA0OCAgbG4gMEUtMzg5ICAgICAgICAtPiAtSW5maW5pdHkKKworLS0gbWlzY2VsbGFuZWEKK3ByZWNpc2lvbjogMTYKK2xueDA1NSAgbG4gMi43MTc2NTg0ODY4ODQ1NzJFLTIzNiAgICAgLT4gLTU0Mi40MTAzMTEyODc0NDE1ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNworbG54MDU2ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjFFLTIzNiAgICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ2ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE4CitsbngwNTcgIGxuIDIuNzE3NjU4NDg2ODg0NTcyMTFFLTIzNiAgIC0+IC01NDIuNDEwMzExMjg3NDQxNDU5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTkKK2xueDA1OCAgbG4gMi43MTc2NTg0ODY4ODQ1NzIxMTJFLTIzNiAgLT4gLTU0Mi40MTAzMTEyODc0NDE0NTkyICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMAorbG54MDU5ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjExMThFLTIzNiAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ1OTE3ICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGlucHV0cyBlbmRpbmcgaW4gLi41MDAuLiwgLi40OTkuLiwgLi4xMDAuLiwgLi45OTkuLiBzZXF1ZW5jZXMKK3ByZWNpc2lvbjogICA1MAorbG54MTAyICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMjcgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMzc0OTk1MzgyOTk5NjQ0NjEyNDg2MTc1MEUtOCAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMzAKK2xueDEwMyAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDMgLT4gLTguOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTczMzc0OTlFLTggICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyOQorbG54MTA0ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzM3NTBFLTggICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjgKK2xueDEwNSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzM3NUUtOCAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjcKK2xueDEwNiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczMzhFLTggICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyNgorbG54MTA3ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzRFLTggICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjUKK2xueDEwOCAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1IC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3M0UtOCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjQKK2xueDEwOSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4NzkgLT4gLTguOTk5OTk5OTk5OTk5OTk5OTUwMDAwMjdFLTggICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMworbG54MTEwICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg4IC0+IC04Ljk5OTk5OTk5OTk5OTk5OTg1MDAwMDNFLTggICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjIKK2xueDExMSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk5IC0+IC04Ljk5OTk5OTk5OTk5OTk5Nzg1MDAwMEUtOCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjEKK2xueDExMiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAwMDAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODUwMDBFLTggICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMAorbG54MTEzICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwIC0+IC04Ljk5OTk5OTk5OTk5OTk4Nzg1MDBFLTggICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTkKK2xueDExNCAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAwIC0+IC04Ljk5OTk5OTk5OTk5OTk4Nzg1MEUtOCAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTgKK2xueDExNSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODVFLTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgbWF5IGJlIGEgPiAwLjV1bHAgY2FzZTsgYSBtb3JlIHByZWNpc2UgYW5zd2VyIGlzOgorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC04Ljk5OTk5OTk5OTk5OTk4Nzg0OTk5OTE4RS04CitwcmVjaXNpb246ICAgMTcKK2xueDExNiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNSAtPiAtOC45OTk5OTk5OTk5OTk5ODc4RS04ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTYKK2xueDExNyAgbG4gMC45OTk5OTk5MTAwMDAwMDQwIC0+IC05LjAwMDAwMDAwNDk5OTk4OEUtOCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE1CitsbngxMTggIGxuIDAuOTk5OTk5OTEwMDAwMDA0IC0+IC05LjAwMDAwMDAwNDk5OTk5RS04ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTQKK2xueDExOSAgbG4gMC45OTk5OTk5MTAwMDAwMCAtPiAtOS4wMDAwMDA0MDUwMDAwRS04ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTMKK2xueDEyMCAgbG4gMC45OTk5OTk5MTAwMDAwIC0+IC05LjAwMDAwMDQwNTAwMEUtOCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMgorbG54MTIxICBsbiAwLjk5OTk5OTkxMDAwMCAtPiAtOS4wMDAwMDA0MDUwMEUtOCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTEKK2xueDEyMiAgbG4gMC45OTk5OTk5MTAwMCAtPiAtOS4wMDAwMDA0MDUwRS04ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTAKK2xueDEyMyAgbG4gMC45OTk5OTk5MTAwIC0+IC05LjAwMDAwMDQwNUUtOCAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgOQorbG54MTI0ICBsbiAwLjk5OTk5OTkxMCAtPiAtOS4wMDAwMDA0MUUtOCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDgKK2xueDEyNSAgbG4gMC45OTk5OTk5MSAtPiAtOS4wMDAwMDA0RS04ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDcKK2xueDEyNiAgbG4gMC45OTk5OTk5IC0+IC0xLjAwMDAwMEUtNyAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNgorbG54MTI2YiBsbiAwLjk5OTk5OTkgLT4gLTEuMDAwMDAwMDUwMDAwMDAzRS03ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA2CitsbngxMjcgIGxuIDAuOTk5OTk5IC0+IC0wLjAwMDAwMTAwMDAwICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDUKK2xueDEyOCAgbG4gMC45OTk5OSAtPiAtMC4wMDAwMTAwMDAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNAorbG54MTI5ICBsbiAwLjk5OTkgLT4gLTAuMDAwMTAwMCAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAzCitsbngxMzAgIGxuIDAuOTk5IC0+IC0wLjAwMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDIKK2xueDEzMSAgbG4gMC45OSAtPiAtMC4wMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMQorbG54MTMyICBsbiAwLjkgLT4gLTAuMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGNhc2VzIG5lYXIgMSAgICAgICAgICAgICAgLS0gIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MAorcHJlY2lzaW9uOiAgICAyMAorbG54NDAxICBsbiAyLjcxODI4MTgyODQ1ODkzNjUwNDEgLT4gMC45OTk5OTk5OTk5OTk5NjAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2xueDQwMiAgbG4gMi43MTgyODE4Mjg0NTg5NjM2ODY5IC0+IDAuOTk5OTk5OTk5OTk5OTcwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitsbng0MDMgIGxuIDIuNzE4MjgxODI4NDU4OTkwODY5NyAtPiAwLjk5OTk5OTk5OTk5OTk3OTk5OTk5IEluZXhhY3QgUm91bmRlZAorbG54NDA0ICBsbiAyLjcxODI4MTgyODQ1OTAxODA1MjUgLT4gMC45OTk5OTk5OTk5OTk5ODk5OTk5OCBJbmV4YWN0IFJvdW5kZWQKK2xueDQwNSAgbG4gMi43MTgyODE4Mjg0NTkwNDUyMzU0IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitsbng0MDYgIGxuIDIuNzE4MjgxODI4NDU5MzE3MDYzNSAtPiAxLjAwMDAwMDAwMDAwMDEwMDAwMDAgIEluZXhhY3QgUm91bmRlZAorbG54NDA3ICBsbiAyLjcxODI4MTgyODQ1OTU4ODg5MTcgLT4gMS4wMDAwMDAwMDAwMDAyMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMTQKK2xueDQxMSAgbG4gMi43MTgyODE4Mjg0NTg5IC0+IDAuOTk5OTk5OTk5OTk5OTUgICAgSW5leGFjdCBSb3VuZGVkCitsbng0MTMgIGxuIDIuNzE4MjgxODI4NDU5MCAtPiAwLjk5OTk5OTk5OTk5OTk4ICAgIEluZXhhY3QgUm91bmRlZAorbG54NDE2ICBsbiAyLjcxODI4MTgyODQ1OTEgLT4gMS4wMDAwMDAwMDAwMDAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDQxNyAgbG4gMi43MTgyODE4Mjg0NTkyIC0+IDEuMDAwMDAwMDAwMDAwMSAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG92ZXJmbG93cywgaW5jbHVkaW5nIHNvbWUgZXhwIG92ZXJwcmVjaXNlIGJvcmRlcmxpbmVzCitwcmVjaXNpb246ICAgNworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2xueDcwOSAgbG4gOS45OTk5OTlFKzM4NCAtPiAgODg2LjQ5NTMgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzExICBsbiA5Ljk5OTk5MkUrMzg0IC0+ICA4ODYuNDk1MyAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTYKK2xueDcyMiAgbG4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAgODg2LjQ5NTI2MDgwMjcwNzYgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzI0ICBsbiA5Ljk5OTk5OTk5OTk5OTkxN0UrMzg0IC0+ICA4ODYuNDk1MjYwODAyNzA3NiAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3MjYgIGxuIDkuOTk5OTk5OTk5OTk5MTE3RSszODQgLT4gIDg4Ni40OTUyNjA4MDI3MDc1ICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIGFuZCBtb3JlLi4uCitwcmVjaXNpb246ICAgMTUKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5Citsbng3MzEgIGxuIDkuOTk5OTk5OTk5OTk5OTlFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA1ICAgICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBtYXkgYmUgYSA+IDAuNXVscCBjYXNlOyBhIG1vcmUgcHJlY2lzZSBhbnN3ZXIgaXM6CistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzAyLjU4NTA5Mjk5NDA0NDk1MDAxNzk5MTQ1NDQyCitsbng3MzIgIGxuIDkuOTk5OTk5OTk5OTkyNjZFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA0ICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzMzICBsbiA5Ljk5OTk5OTk5OTk5MjY1RSs5OTkgLT4gMjMwMi41ODUwOTI5OTQwNCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDczNCAgbG4gOS45OTk5OTk5OTk5OTI2NEUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDQgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MgZm9yIGV4cCwgaW5jbHVkaW5nIHVuZGVyZmxvdy10by16ZXJvIGVkZ2UgcG9pbnQKK3ByZWNpc2lvbjogICA3CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworbG54NzUxICBsbiAwRS0zODkgLT4gLUluZmluaXR5Citsbng3NTggIGxuIDEuMDAwMDAxRS0zODMgLT4gLTg4MS44OTAxICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NTkgIGxuIDkuOTk5OTFFLTM4NCAtPiAtODgxLjg5MDEgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjAgIGxuIDQuNDYwNUUtMzg1IC0+IC04ODUuMDAwMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjEgIGxuIDIuMjIxRS0zODYgLT4gLTg4Ny45OTk5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjIgIGxuIDMuMDFFLTM4NyAtPiAtODg5Ljk5ODUgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjMgIGxuIDEuN0UtMzg4IC0+IC04OTIuODcyNCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjQgIGxuIDEuNUUtMzg4IC0+IC04OTIuOTk3NiAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjUgIGxuIDlFLTM4OSAtPiAtODkzLjUwODQgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjYgIGxuIDFFLTM4OSAtPiAtODk1LjcwNTYgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NzQgIGxuIDBFLTM4OSAtPiAtSW5maW5pdHkKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2xueDgyMCAgbG4gSW5maW5pdHkgLT4gICBJbmZpbml0eQorbG54ODIxICBsbiAwICAgICAgICAtPiAgLUluZmluaXR5Citsbng4MjIgIGxuIE5hTiAgICAgIC0+ICAgTmFOCitsbng4MjMgIGxuIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworbG54ODI0ICBsbiBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24KK2xueDgyNSAgbG4gLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uCitsbng4MjYgIGxuIE5hTjQ1NiAgIC0+ICAgTmFONDU2Citsbng4MjcgIGxuIC1OYU42NTQgIC0+ICAtTmFONjU0Citsbng4MjggIGxuIE5hTjEgICAgIC0+ICAgTmFOMQorCistLSBJbnZhbGlkIG9wZXJhdGlvbnMgZHVlIHRvIHJlc3RyaWN0aW9ucworLS0gW25leHQgdHdvIHByb2JhYmx5IHNraXBwZWQgYnkgbW9zdCB0ZXN0IGhhcm5lc3Nlc10KK3ByZWNpc2lvbjogMTAwMDAwMDAwCitsbng5MDEgIGxuIDEgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dAorcHJlY2lzaW9uOiAgOTk5OTk5OTkKK2xueDkwMiAgbG4gMCAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0CisKK3ByZWNpc2lvbjogOQorbWF4RXhwb25lbnQ6ICAgMTAwMDAwMAorbWluRXhwb25lbnQ6ICAgLTk5OTk5OQorbG54OTAzICBsbiAxICAgLT4gIE5hTiAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK2xueDkwNCAgbG4gMCAtPiAgLUluZmluaXR5CittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogIC0xMDAwMDAwCitsbng5MDUgIGxuIDEgICAtPiAgTmFOICAgICAgICAgIEludmFsaWRfY29udGV4dAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAgLTk5OTk5OAorbG54OTA2ICBsbiAwIC0+ICAtSW5maW5pdHkKKworLS0gcGF5bG9hZCBkZWNhcGl0YXRlCitwcmVjaXNpb246IDUKK2xueDkxMCAgbG4gLXNOYU4xMjM0NTY3ODkwIC0+IC1OYU42Nzg5MCAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0Citsbng5MDAgIGxuICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nMTAuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2cxMC5kZWNUZXN0CmluZGV4IDUxNjllYWIuLjY1MDJmMGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2cxMC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2cxMC5kZWNUZXN0CkBAIC0xLDU1MSArMSw1NTEgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGxvZzEwLmRlY1Rlc3QgLS0gZGVjaW1hbCBsb2dhcml0aG0gaW4gYmFzZSAxMCAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIGVtcGhhc2lzZXMgdGhlIHRlc3Rpbmcgb2Ygbm90YWJsZSBjYXNlcywgYXMgdGhleSB3aWxsIG9mdGVuDQotLS0gaGF2ZSB1bnVzdWFsIHBhdGhzIChlc3BlY2lhbGx5IHRoZSAxMCoqbiByZXN1bHRzKS4NCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICAxNg0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi0tLSBleGFtcGxlcyBpbiBzcGVjaWZpY2F0aW9uDQotcHJlY2lzaW9uOiAgIDkNCi1sb2d4czAwMCBsb2cxMCAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotbG9neHMwMDEgbG9nMTAgIDAuMDAxICAgICAgICAgICAgIC0+IC0zDQotbG9neHMwMDIgbG9nMTAgIDEgICAgICAgICAgICAgICAgIC0+ICAwDQotbG9neHMwMDMgbG9nMTAgIDIgICAgICAgICAgICAgICAgIC0+ICAwLjMwMTAyOTk5NiAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3hzMDA0IGxvZzEwICAxMCAgICAgICAgICAgICAgICAtPiAgMQ0KLWxvZ3hzMDA1IGxvZzEwICA3MCAgICAgICAgICAgICAgICAtPiAgMS44NDUwOTgwNCAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4czAwNiBsb2cxMCArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQotDQotDQotLS0gYmFzaWNzIChleGFtcGxlcyBpbiBzcGVjaWZpY2F0aW9uLCBldGMuKQ0KLXByZWNpc2lvbjogICAxNg0KLWxvZ3gwMDAwIGxvZzEwICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1sb2d4MDAwMSBsb2cxMCAgN0UtMTAwMCAgICAgICAgICAgLT4gLTk5OS4xNTQ5MDE5NTk5ODU3ICAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMDIgbG9nMTAgIDEuMUUtOSAgICAgICAgICAgIC0+IC04Ljk1ODYwNzMxNDg0MTc3NSAgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDAzIGxvZzEwICAwLjAwMDcgICAgICAgICAgICAtPiAtMy4xNTQ5MDE5NTk5ODU3NDMgICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAwNCBsb2cxMCAgMC4xMSAgICAgICAgICAgICAgLT4gLTAuOTU4NjA3MzE0ODQxNzc1MCAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMDUgbG9nMTAgIDAuNyAgICAgICAgICAgICAgIC0+IC0wLjE1NDkwMTk1OTk4NTc0MzIgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDA2IGxvZzEwICAxICAgICAgICAgICAgICAgICAtPiAgMA0KLWxvZ3gwMDA3IGxvZzEwICAxLjUgICAgICAgICAgICAgICAtPiAgMC4xNzYwOTEyNTkwNTU2ODEyICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAwOCBsb2cxMCAgMiAgICAgICAgICAgICAgICAgLT4gIDAuMzAxMDI5OTk1NjYzOTgxMiAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMDkgbG9nMTAgIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAwLjQzNDI5NDQ4MTkwMzI1MTggIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDEwIGxvZzEwICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgMC40MzQyOTQ0ODE5MDMyNTE5ICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAxMSBsb2cxMCAgMi43MTgyODE4Mjg0NTkwNDcgLT4gIDAuNDM0Mjk0NDgxOTAzMjUyMSAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMTIgbG9nMTAgIDcgICAgICAgICAgICAgICAgIC0+ICAwLjg0NTA5ODA0MDAxNDI1NjggIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDEzIGxvZzEwICAxMCAgICAgICAgICAgICAgICAtPiAgMQ0KLWxvZ3gwMDE0IGxvZzEwICAxMC41ICAgICAgICAgICAgICAtPiAgMS4wMjExODkyOTkwNjk5MzggICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAxNSBsb2cxMCAgMTEgICAgICAgICAgICAgICAgLT4gIDEuMDQxMzkyNjg1MTU4MjI1ICAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMTYgbG9nMTAgIDcwICAgICAgICAgICAgICAgIC0+ICAxLjg0NTA5ODA0MDAxNDI1NyAgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDE3IGxvZzEwICA5OTk5ICAgICAgICAgICAgICAtPiAgMy45OTk5NTY1NjgzODAxOTIgICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAxOCBsb2cxMCAgMS4yMUU2ICAgICAgICAgICAgLT4gIDYuMDgyNzg1MzcwMzE2NDUwICAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMTkgbG9nMTAgIDEuMUUrOSAgICAgICAgICAgIC0+ICA5LjA0MTM5MjY4NTE1ODIyNSAgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDIwIGxvZzEwICA3RSsxMDAwICAgICAgICAgICAtPiAgMTAwMC44NDUwOTgwNDAwMTQgICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAyMSBsb2cxMCArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQotDQotLS0gbm90YWJsZSBjYXNlcw0KLS0tIG5lZ2F0aXZlcw0KLWxvZ3gwMDMxIGxvZzEwIC0xRS05ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sb2d4MDAzMiBsb2cxMCAtMC4wMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG9neDAwMzMgbG9nMTAgLTAuMSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWxvZ3gwMDM0IGxvZzEwIC0wLjcgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sb2d4MDAzNSBsb2cxMCAtMSAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG9neDAwMzYgbG9nMTAgLTEuNSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWxvZ3gwMDM3IGxvZzEwIC0yICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sb2d4MDAzOCBsb2cxMCAtMTAuNSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG9neDAwMzkgbG9nMTAgLTEwLjUgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWxvZ3gwMDQwIGxvZzEwIC05OTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sb2d4MDA0MSBsb2cxMCAtMTAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG9neDAwNDIgbG9nMTAgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxvZ3gwMDQzIGxvZzEwIC0wRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1sb2d4MDA0NCBsb2cxMCAtMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotLS0gb3RoZXIgemVyb3MNCi1sb2d4MDA1MSBsb2cxMCAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotbG9neDAwNTIgbG9nMTAgIDBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxvZ3gwMDUzIGxvZzEwICAwRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi0tLSBpbmZpbml0aWVzDQotbG9neDAwNTUgbG9nMTAgLUluZmluaXR5ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWxvZ3gwMDU2IGxvZzEwICtJbmZpbml0eSAgICAgICAgICAtPiBJbmZpbml0eQ0KLS0tIG9uZXMNCi1sb2d4MDA2MSBsb2cxMCAgMSAgICAgICAgICAgICAgICAgLT4gICAwDQotbG9neDAwNjIgbG9nMTAgIDEuMCAgICAgICAgICAgICAgIC0+ICAgMA0KLWxvZ3gwMDYzIGxvZzEwICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDANCi1sb2d4MDA2NCBsb2cxMCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAwDQotDQotLS0gbm90YWJsZSBjYXNlcyAtLSBleGFjdCBwb3dlcnMgb2YgMTANCi1sb2d4MTEwMCBsb2cxMCAxICAgICAgICAgICAgIC0+IDANCi1sb2d4MTEwMSBsb2cxMCAxMCAgICAgICAgICAgIC0+IDENCi1sb2d4MTEwMiBsb2cxMCAxMDAgICAgICAgICAgIC0+IDINCi1sb2d4MTEwMyBsb2cxMCAxMDAwICAgICAgICAgIC0+IDMNCi1sb2d4MTEwNCBsb2cxMCAxMDAwMCAgICAgICAgIC0+IDQNCi1sb2d4MTEwNSBsb2cxMCAxMDAwMDAgICAgICAgIC0+IDUNCi1sb2d4MTEwNiBsb2cxMCAxMDAwMDAwICAgICAgIC0+IDYNCi1sb2d4MTEwNyBsb2cxMCAxMDAwMDAwMCAgICAgIC0+IDcNCi1sb2d4MTEwOCBsb2cxMCAxMDAwMDAwMDAgICAgIC0+IDgNCi1sb2d4MTEwOSBsb2cxMCAxMDAwMDAwMDAwICAgIC0+IDkNCi1sb2d4MTExMCBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDEwDQotbG9neDExMTEgbG9nMTAgMTAwMDAwMDAwMDAwICAtPiAxMQ0KLWxvZ3gxMTEyIGxvZzEwIDEwMDAwMDAwMDAwMDAgLT4gMTINCi1sb2d4MTExMyBsb2cxMCAwLjAwMDAwMDAwMDAxIC0+IC0xMQ0KLWxvZ3gxMTE0IGxvZzEwIDAuMDAwMDAwMDAwMSAtPiAtMTANCi1sb2d4MTExNSBsb2cxMCAwLjAwMDAwMDAwMSAtPiAtOQ0KLWxvZ3gxMTE2IGxvZzEwIDAuMDAwMDAwMDEgLT4gLTgNCi1sb2d4MTExNyBsb2cxMCAwLjAwMDAwMDEgLT4gLTcNCi1sb2d4MTExOCBsb2cxMCAwLjAwMDAwMSAtPiAtNg0KLWxvZ3gxMTE5IGxvZzEwIDAuMDAwMDEgLT4gLTUNCi1sb2d4MTEyMCBsb2cxMCAwLjAwMDEgLT4gLTQNCi1sb2d4MTEyMSBsb2cxMCAwLjAwMSAtPiAtMw0KLWxvZ3gxMTIyIGxvZzEwIDAuMDEgLT4gLTINCi1sb2d4MTEyMyBsb2cxMCAwLjEgLT4gLTENCi1sb2d4MTEyNCBsb2cxMCAxRS05OSAgLT4gLTk5DQotbG9neDExMjUgbG9nMTAgMUUtMTAwIC0+IC0xMDANCi1sb2d4MTEyNiBsb2cxMCAxRS0zODMgLT4gLTM4Mw0KLQ0KLS0tIGNoZWNrIG5vcm1hbGx5IGV4YWN0IGNhc2VzIHJvdW5kIHByb3Blcmx5DQotcHJlY2lzaW9uOiAxDQotbG9neDExNDEgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxRSsxICAgICAgICAgUm91bmRlZA0KLWxvZ3gxMTQyIGxvZzEwIDEwMDAwMDAwMDAwMDAgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTE0MyBsb2cxMCAxRSsxMDAgICAgICAgIC0+IDFFKzIgICAgICAgICBSb3VuZGVkDQotbG9neDExNDQgbG9nMTAgMUUrMTIzICAgICAgICAtPiAxRSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTQ1IGxvZzEwIDFFKzEyNiAgICAgICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTE0NiBsb2cxMCAxRSs5MTYgICAgICAgIC0+IDlFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNDcgbG9nMTAgMUUrOTk5ICAgICAgICAtPiAxRSszIEluZXhhY3QgUm91bmRlZA0KLQ0KLXByZWNpc2lvbjogMg0KLWxvZ3gxMTUxIGxvZzEwIDEwMDAwMDAwMDAwICAgLT4gMTANCi1sb2d4MTE1MiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDEyDQotbG9neDExNTMgbG9nMTAgMUUrMTAwICAgICAgICAtPiAxLjBFKzIgICAgICAgICBSb3VuZGVkDQotbG9neDExNTQgbG9nMTAgMUUrMTIzICAgICAgICAtPiAxLjJFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNTUgbG9nMTAgMUUrMTI2ICAgICAgICAtPiAxLjNFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNTYgbG9nMTAgMUUrOTE2ICAgICAgICAtPiA5LjJFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNTcgbG9nMTAgMUUrOTk5ICAgICAgICAtPiAxLjBFKzMgSW5leGFjdCBSb3VuZGVkDQotLS0gc29tZSBoYWxmLXdheSBwb2ludCByb3VuZHMsIG90aGVyIGNhc2VzLCBhbmQgbmVnYXRpdmVzDQotbG9neDExNTggbG9nMTAgMUUrMTI1ICAgICAgICAtPiAxLjJFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNTkgbG9nMTAgMUUrMTM1ICAgICAgICAtPiAxLjRFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNjAgbG9nMTAgMUUrMTI5ICAgICAgICAtPiAxLjNFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNjEgbG9nMTAgMUUrMTMxICAgICAgICAtPiAxLjNFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNjIgbG9nMTAgMUUtMTIzICAgICAgICAtPiAtMS4yRSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTYzIGxvZzEwIDFFLTEyNiAgICAgICAgLT4gLTEuM0UrMiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTE2NCBsb2cxMCAxRS05MTYgICAgICAgIC0+IC05LjJFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNjUgbG9nMTAgMUUtOTk5ICAgICAgICAtPiAtMS4wRSszIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTY2IGxvZzEwIDFFLTEyNSAgICAgICAgLT4gLTEuMkUrMiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTE2NyBsb2cxMCAxRS0xMzUgICAgICAgIC0+IC0xLjRFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNjggbG9nMTAgMUUtMTI5ICAgICAgICAtPiAtMS4zRSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTY5IGxvZzEwIDFFLTEzMSAgICAgICAgLT4gLTEuM0UrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1wcmVjaXNpb246IDMNCi1sb2d4MTE3MSBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDEwDQotbG9neDExNzIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxMg0KLWxvZ3gxMTczIGxvZzEwIDFFKzEwMCAgICAgICAgLT4gMTAwDQotbG9neDExNzQgbG9nMTAgMUUrMTIzICAgICAgICAtPiAxMjMNCi1sb2d4MTE3NSBsb2cxMCAxRSsxMjYgICAgICAgIC0+IDEyNg0KLWxvZ3gxMTc2IGxvZzEwIDFFKzkxNiAgICAgICAgLT4gOTE2DQotbG9neDExNzcgbG9nMTAgMUUrOTk5ICAgICAgICAtPiA5OTkNCi0NCi0tLSBsb2cxMCgyKSAuLiB0ZXN0cyBib3RoIGxuKDIpIGFuZCBsbigxMCkgY29uc3RhbnRzLCB0b28NCi1wcmVjaXNpb246IDUwDQotbG9neDEyMDEgbG9nMTAgMiAgICAgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxMSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTIwMiBsb2cxMCAyLjAwMCAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjExIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMjAzIGxvZzEwIDAuMkUxIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMTEgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0OQ0KLWxvZ3gxMjA0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNDgNCi1sb2d4MTIwNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQ3DQotbG9neDEyMDYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2ICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0Ng0KLWxvZ3gxMjA3IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE1ICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNDUNCi1sb2d4MTIwOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQ0DQotbG9neDEyMDkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4ICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0Mw0KLWxvZ3gxMjEwIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk5ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNDINCi1sb2d4MTIxMSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTkwICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQxDQotbG9neDEyMTIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0MA0KLWxvZ3gxMjEzIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgyICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzkNCi1sb2d4MTIxNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDM4DQotbG9neDEyMTUgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzNw0KLWxvZ3gxMjE2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY4ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzYNCi1sb2d4MTIxNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI3ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDM1DQotbG9neDEyMTggbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAzICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzNA0KLWxvZ3gxMjE5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzMNCi1sb2d4MTIyMCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDMyDQotbG9neDEyMjEgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzMQ0KLWxvZ3gxMjIyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ1ICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzANCi1sb2d4MTIyMyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0ICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDI5DQotbG9neDEyMjQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyOA0KLWxvZ3gxMjI1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3ICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMjcNCi1sb2d4MTIyNiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk1ICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDI2DQotbG9neDEyMjcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5ICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyNQ0KLWxvZ3gxMjI4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg5ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMjQNCi1sb2d4MTIyOSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM5ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDIzDQotbG9neDEyMzAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzc0ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyMg0KLWxvZ3gxMjMxIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMjENCi1sb2d4MTIzMiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDIwDQotbG9neDEyMzMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxOQ0KLWxvZ3gxMjM0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTgNCi1sb2d4MTIzNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE3DQotbG9neDEyMzYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxNg0KLWxvZ3gxMjM3IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTUNCi1sb2d4MTIzOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE0DQotbG9neDEyMzkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxMw0KLWxvZ3gxMjQwIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTINCi1sb2d4MTI0MSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDExDQotbG9neDEyNDIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxMA0KLWxvZ3gxMjQzIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDkNCi1sb2d4MTI0NCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICA4DQotbG9neDEyNDUgbG9nMTAgMiAtPiAwLjMwMTAzMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgNw0KLWxvZ3gxMjQ2IGxvZzEwIDIgLT4gMC4zMDEwMzAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDYNCi1sb2d4MTI0NyBsb2cxMCAyIC0+IDAuMzAxMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICA1DQotbG9neDEyNDggbG9nMTAgMiAtPiAwLjMwMTAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgNA0KLWxvZ3gxMjQ5IGxvZzEwIDIgLT4gMC4zMDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDMNCi1sb2d4MTI1MCBsb2cxMCAyIC0+IDAuMzAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyDQotbG9neDEyNTEgbG9nMTAgMiAtPiAwLjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMQ0KLWxvZ3gxMjUyIGxvZzEwIDIgLT4gMC4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLXByZWNpc2lvbjogICAxNg0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBNb3JlIGNsb3NlLXRvLWUsIGV0Yy4sIHRlc3RzDQotcHJlY2lzaW9uOiAgIDM0DQotbG9neDEzMDEgbG9nMTAgMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjEgIC0+IDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA0OCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTMwMiBsb2cxMCAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MiAgLT4gMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzAzIGxvZzEwIDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYzICAtPiAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTIgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMDQgbG9nMTAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgIC0+IC00LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA3M0UtMzMgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMDUgbG9nMTAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+IC00LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1M0UtMzQgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMDYgbG9nMTAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+IC00LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MUUtMzUgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMDcgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDANCi1sb2d4MTMwOCBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgLT4gNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTFFLTM1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzA5IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiA0LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA0OUUtMzQgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMTAgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgIC0+IDQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDI5RS0zMyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBsb3dlciBwDQotcHJlY2lzaW9uOiAgICA3DQotbG9neDEzMjAgbG9nMTAgMC45OTk5OTkgICAgLT4gLTQuMzQyOTQ3RS03ICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTMyMSBsb2cxMCAwLjk5OTk5OTkgICAtPiAtNC4zNDI5NDVFLTggIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzIyIGxvZzEwIDAuOTk5OTk5OTkgIC0+IC00LjM0Mjk0NUUtOSAgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMjMgbG9nMTAgMC45OTk5OTk5OTkgLT4gLTQuMzQyOTQ1RS0xMCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTMyNCBsb2cxMCAxLjAwMDAwMDAwICAtPiAgMA0KLWxvZ3gxMzI1IGxvZzEwIDEuMDAwMDAwMDEgIC0+ICA0LjM0Mjk0NUUtOSAgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMjYgbG9nMTAgMS4wMDAwMDAxICAgLT4gIDQuMzQyOTQ1RS04ICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTMyNyBsb2cxMCAxLjAwMDAwMSAgICAtPiAgNC4zNDI5NDNFLTcgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG5lYXIgMTBeMw0KLXByZWNpc2lvbjogICA5DQotbG9neDEzMzEgbG9nMTAgIDk5OS45OTk5OTk4ICAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzMyIGxvZzEwICA5OTkuOTk5OTk5OSAgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTMzMyBsb2cxMCAxMDAwLjAwMDAwMCAgIC0+IDMNCi1sb2d4MTMzNCBsb2cxMCAxMDAwLjAwMDAwMSAgIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMzUgbG9nMTAgMTAwMC4wMDAwMDIgICAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTYNCi1sb2d4MTM0MSBsb2cxMCAgOTk5Ljk5OTk5OTggIC0+IDIuOTk5OTk5OTk5OTEzMTQxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzQyIGxvZzEwICA5OTkuOTk5OTk5OSAgLT4gMi45OTk5OTk5OTk5NTY1NzEgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzNDMgbG9nMTAgMTAwMC4wMDAwMDAgICAtPiAzDQotbG9neDEzNDQgbG9nMTAgMTAwMC4wMDAwMDEgICAtPiAzLjAwMDAwMDAwMDQzNDI5NCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTM0NSBsb2cxMCAxMDAwLjAwMDAwMiAgIC0+IDMuMDAwMDAwMDAwODY4NTg5IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHN1Z2dlc3Rpb25zIGZyb20gSWxhbiBOZWhhbWENCi1sb2d4MTQwMCBsb2cxMCAxMEUtMyAgICAtPiAtMg0KLWxvZ3gxNDAxIGxvZzEwIDEwRS0yICAgIC0+IC0xDQotbG9neDE0MDIgbG9nMTAgMTAwRS0yICAgLT4gIDANCi1sb2d4MTQwMyBsb2cxMCAxMDAwRS0yICAtPiAgMQ0KLWxvZ3gxNDA0IGxvZzEwIDEwMDAwRS0yIC0+ICAyDQotbG9neDE0MDUgbG9nMTAgMTBFLTEgICAgLT4gIDANCi1sb2d4MTQwNiBsb2cxMCAxMDBFLTEgICAtPiAgMQ0KLWxvZ3gxNDA3IGxvZzEwIDEwMDBFLTEgIC0+ICAyDQotbG9neDE0MDggbG9nMTAgMTAwMDBFLTEgLT4gIDMNCi1sb2d4MTQwOSBsb2cxMCAxMEUwICAgICAtPiAgMQ0KLWxvZ3gxNDEwIGxvZzEwIDEwMEUwICAgIC0+ICAyDQotbG9neDE0MTEgbG9nMTAgMTAwMEUwICAgLT4gIDMNCi1sb2d4MTQxMiBsb2cxMCAxMDAwMEUwICAtPiAgNA0KLWxvZ3gxNDEzIGxvZzEwIDEwRTEgICAgIC0+ICAyDQotbG9neDE0MTQgbG9nMTAgMTAwRTEgICAgLT4gIDMNCi1sb2d4MTQxNSBsb2cxMCAxMDAwRTEgICAtPiAgNA0KLWxvZ3gxNDE2IGxvZzEwIDEwMDAwRTEgIC0+ICA1DQotbG9neDE0MTcgbG9nMTAgMTBFMiAgICAgLT4gIDMNCi1sb2d4MTQxOCBsb2cxMCAxMDBFMiAgICAtPiAgNA0KLWxvZ3gxNDE5IGxvZzEwIDEwMDBFMiAgIC0+ICA1DQotbG9neDE0MjAgbG9nMTAgMTAwMDBFMiAgLT4gIDYNCi0NCi0tLSBSYW5kb21zDQotLS0gUD01MCwgd2l0aGluIDAtOTk5OQ0KLVByZWNpc2lvbjogNTANCi1sb2d4MjUwMSBsb2cxMCAwLjAwMDM1NDQ4MDAxNjY3OTY4MTQxNzc1ODkxMjQ2OTkxOTEyNjU1OTYxMTYzMzQ1OTA0IC0+ICAtMy40NTA0MDgyNDI1NDExNzc1MjkwODY0MDUzMzE4MjQ3Mjc0OTQ0Njg1NTg2MTg4NTA1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTAyIGxvZzEwIDcwLjYzNjQ1NTcyNjQyNDMxMTIyODI1NTMzODYzNzkzNTMzMDgyNjk5NTEzNjU5NzY0NCAgLT4gICAxLjg0OTAyODg5OTg0MDg0OTIwNDU3OTMwNzAyNTUzMDIzMzU1NTgxNDA5NzU3MTkyNDcgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MDMgbG9nMTAgMC4wMDAwMDAwMDAwMDAwMDIzMzU1MDM2MjQ3MzgyMTg4OTA2MDgxMjgwNDA2MzA0MDE2OSAtPiAtMTQuNjMxNjE5NDU0MzQzODM0ODU4MDIzNTc4Mjk5MTQyODY2NTU3NzE3OTA0MjIzNjY3IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTA0IGxvZzEwIDk3Ljc4MzYyODYyMTUyMzI0NDY3OTkwMTI2MDM1ODI4Njg5ODk1ODgzMjEzNTQzMzc2NCAgLT4gICAxLjk5MDI2NjE0OTMyMjQyMTk1MTc4OTc2NTc5NjQzNjI1NzE2OTA1OTI3MzQ0MDczMzAgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MDUgbG9nMTAgMDA2Mi4yMzc3MTM1MzE1ODU4MzkyODAyNjEyODEyMDIyODA3ODM4NTk5NTcyMDE3MzQyICAtPiAgIDEuNzk0MDUzNjI5MzA4NTA2NjE5OTI4NzYzMjcyNTAyNjgzNzAxODQ4NjUzMzU0NDE0MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUwNiBsb2cxMCA2LjM3Njc2MzQ2NTIwNzEwNTM2MTk5Nzc2MDI4MDQ3MjQxMjk2NTI5ODE3NDc4Nzk1MzIgIC0+ICAgMC44MDQ2MDAzMDc4OTgyNTk2MTYxNTEwMDE2MzU3NjA4MDc2MTMyNjg1NzM3NDA5ODY0NCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUwNyBsb2cxMCA2My4yOTcwODg5ODEzMTMyNzg1MjkzMDY1MzM4MTQxOTUwNjg4NTA1MzI2NjY2NTg3OTggIC0+ICAgMS44MDEzODM3MzczNzI0NDI3MDkyNDE3MTcwMTQ5MDk4NjE0NDEwODQ5MzUzODM5NjczIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTA4IGxvZzEwIDAuMDAwMDAwNzcyMzk2OTMzMTY4ODE3OTc3MTc4MjAxMTA4OTgxNjc3MjE2MDIyOTkxODcgLT4gIC02LjExMjE1OTQ1OTI3MTg1NTA2MTM3NzM4ODYyNDE5NTE5NjYyNjQ4MjY3NjAzMTAwNDcgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MDkgbG9nMTAgMC4wMDAwMDAwMzk1MzU4MDM1OTc4MDE4NTUzNDgzMDU3MjQ2MTkyMjUyNzgzMTM5NTAwMiAtPiAgLTcuNDAzMDA5NDI5MzgzMzg0NzEzNjI1MjU0NzA2OTkwNTQ3NzIxMzU0MTc4NzE3NzU2MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUxMCBsb2cxMCA3NTQuNjI5MDU4MTczNjk5ODkxNjkxODg5OTgxMTE1MjcyNzI2ODg3OTE1NDQ1NzcyMDQgIC0+ICAgMi44Nzc3MzM1MjQzNzYxMzAwMDQ3NzU4NTM0MzA0MzcxOTEyMDk5OTU4MDU3NTQ1NDE2IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTExIGxvZzEwIDAuMDAwMDAwNDgzNjAzNzg0MTAyNDE0Mjg5MzY2MDcxNDcwNTYyODMyODI4NDkxNTgzMTIgLT4gIC02LjMxNTUxMDMwOTUzMDkzNTM0NTc2MDQwMzgzOTc5ODAwOTE2NTA3NjAzNDYzMzQ1MTIgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MTIgbG9nMTAgMC4wMDAwNzUwOTAzNzU4MzY0NTYxMjU3NzE5NjEwNDU5MTY3MjA4MDU0MjkzMjE2NjA4OSAtPiAgLTQuMTI0NDE1NzIxOTcwMDE2NjMxNDAxMjM0NDcwNTUzODA4ODAzMDU5Mjg5NjExMTAyNiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUxMyBsb2cxMCAwLjAwMDAwMDAwMDAwNzA1NDc1OTQ0NjM4OTE1MDUzNDE5ODM5MDYzNTY3ODk4MDkyMDY0IC0+IC0xMS4xNTE1MTc3OTAyNTY0NjYwNDg1NTM4MTAwMDI1MjU4NjgxOTgxNzgxNjc5NTAzNzcgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MTQgbG9nMTAgOS42MjEwMzAwNDYwNDk3NjU3OTE3NDQ1NDEwOTQ3MDk5NjMzNDc5NjA5MTY1MTIwNjYxICAtPiAgIDAuOTgzMjIxNTcwOTMyNjA5NzgyMDY2MzM5MjI4Nzc3MTYwNzg2ODM1MTg2MTc3Njg0MTEgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MTUgbG9nMTAgMC4wMDAwMDAwMDA1MDE1MDM2MTM4NjU1NTUyNzQ5NjYwNzI0NTk3NjEyMDg2NDk4NTYxMSAtPiAgLTkuMjk5NzI1OTMzMDc5ODI2MTA0MDQxMTA4NjgzNTU2MzIzNDM5MDkzNDkzNDYyOTM0MCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUxNiBsb2cxMCAwOTguMjQ3NTQwMjk3MzE5OTQxMjU3OTc3MjM1NDUzMzM2Nzc2MDQ0OTAwNzQ4MTA3NTEgIC0+ICAgMS45OTIzMjE2ODYyODc0MzM3MDc3Nzk1Mjc4NjI5MzUxMDYwODE5MTA1Njc5NjcwNjMzIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTE3IGxvZzEwIDcuNTA5MTk5ODE1MDA0Njk5NDMyMDQ0MTQ2Mzg1NDMwMTYyNDc0MjQ5MTAxNTc1Mjk4MCAgLT4gICAwLjg3NTU5MzY2MDc4MDA1OTI0MDgwNzY2NDY5MTU4NzYzNDk5NzI1NDE0MDI0MTI4NzgxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTE4IGxvZzEwIDAuMDAwMDAwMDAwMDAwNzk1NDA1NzEyNzMzMzAwNzUxOTM2Njg1OTY5NDIyNjg1NDI0MjUgLT4gLTEyLjA5OTQxMTI5NDE2NTE3NjAyODgxNzMwNTEwODQ3NTMyNjMyNTAwNjI1MDkzNjk2MyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUxOSBsb2cxMCAwLjAwMDAwMDQyMzk1MDM0Nzk5NTU1MjE1NzgyOTA3NTE1MDc0MTM0MTU0OTE1NDkxNzAxIC0+ICAtNi4zNzI2ODUwMDM5MTI1MzgxMTM0MDY5NDUwODAyMTA4ODkzMDc1NjA0NDY0MTM1Mjk3IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTIwIGxvZzEwIDU2LjY4MzM3NjMwNDY3NDM1NTQ4MTkwNTAyMzE0NTIzODc5OTkwOTMwMTczMjY5NDk4MiAgLT4gICAxLjc1MzQ1NTcxMDc4NTM0ODA0MzU3MDM0MjE4MjYwNzc2MDYyNTA2MzY1ODAwOTE3NTQgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MjEgbG9nMTAgNDguNzM0MDMzODExNDQ0MTk1MDcwODA3NjA2NzIxNTE3MTY5ODEwNDM4MDQ5NTgxMjI3ICAtPiAgIDEuNjg3ODMyMzYwMjc0MTA2NTE5MDk0MjY1NDcxMDA0OTQzMzgwODIwODI5MTU2NDA0OSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUyMiBsb2cxMCAwLjAwMDc0ODMwMzEwOTMwMDQ2ODY1MDA5ODUxNzA2OTg5NDMwMjI4NTYxODgwMjIxMDYzIC0+ICAtMy4xMjU5MjI0NTAyMjA5OTc0MDgyMjIzNjY3NzEyMDE2NDQ1NTcyNDMxNzkxOTIwNjE4IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTIzIGxvZzEwIDM2LjY3NzM0ODg4NTExMTU5MzM4NDAyMDgzNjcyMDM5NjI2MjQ5NzEyMjcwODU5ODM1OSAgLT4gICAxLjU2NDM5NzkzNjQyNjA3OTYwODY3NTQ1MzAyODIzMDI2MDU0Nzc1Njc0NjkzOTU0MjUgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MjQgbG9nMTAgMC4wMDAwMDAwMDAwMDAwMDAwNDQ5NTY3ODU2MDQ4MDQzMjg1ODgxMjQxOTE0NTgzMzc0NCAtPiAtMTYuMzQ3MjA0NzQ4MjM5NzQwNTEwMDE0MzIwNjMwMzYzMjQ0MDE1OTE2MDI5NjE5NTYxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTI1IGxvZzEwIDk1MDkuNTg1NDAxMzY1MDY0Mjc5OTM3NDE1OTEzMTk0MDEwODc0ODU5NDc3NDMwNzEwNCAgLT4gICAzLjk3ODE2MTU4Mjk5MTYzMjY3NDExMDAxNjY1MTk3MjY4MjQ0MzA5NDU0MDYzMDI2NjEgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MjYgbG9nMTAgMC4wNzgzNDg5MTI2ODY4OTE3NzAxNDA0NDQ1NDc5MzYwODcxNTI3NjYxNTc0MzgxOTA5NyAtPiAgLTEuMTA1OTY3MDI2MjE5NzY0MzE0NzgwNTUxNzM5ODYyMTI4ODg5NzY2OTg3Njk5NjM0OCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUyNyBsb2cxMCAwLjAwMDAwMDI5NTg0NTI5ODgwNzA2MTI4NDQ0NDU0Njg4NDU0OTk5MDMyODAxOTA0Nzk0IC0+ICAtNi41Mjg5MzUzMjc1ODE0MDQzNzEwMDc2NTI2OTIwNTY2NzIxNTcwMzc1MDI2OTE3MjA2IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTI4IGxvZzEwIDMuMDcxMzQ5NjU0NDQ5NzYxODA5ODc5NDMzMjc4Nzc3MjE4NjE3Njk4MTAxMTkwNDI5NCAgLT4gICAwLjQ4NzMyOTI2MTAzODk2ODI4NTQ2NDI0MzQxMDI5NDkyNDY4MTAwNDMxNDE0MDcyOTk0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTI5IGxvZzEwIDM1Mi42NjM5MjY3MDc4ODgxNjQ3NDQwNzQ0Mjc4NTQ2MDgwMzgzMzkyNzEzNjQxMzk0MyAgLT4gICAyLjU0NzM2MTAzODgxOTk1NjI3MTQ3MDk4MzYzOTgyNDM5MzMzMjAyODQwNzcwMDgzMTQgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MzAgbG9nMTAgMC4wMDMwNDc0MzEyNTE4MTg3NjI2NzIxMDUxNjUyNzM2MTc0MjE4NTYxNzA5MTgwMTY1MCAtPiAgLTIuNTE2MDY2MDgzMDE2Mzk4MTk2Nzc3NDEyNDc0NTMxMTQ5NzQ0NzA1MDA1NjQwMDIwNyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUzMSBsb2cxMCAwLjAwMDAwMDc2MTIwNTM1ODk0OTUyMTM2NDk5MjUwMzY0NjA0NTM4MTE3NzI5NDM3MTgzIC0+ICAtNi4xMTg0OTgxNjI5MDQ3MDUxNTMyNDQ4NDEzODYzOTUwNzc2NDk2NjUyNDgzMDE5NDE1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTMyIGxvZzEwIDc2OS44ODc5NTk3ODUzNDM1MzA1Mjk2NTI4NjE5NTA1MzczNTAwNzQ3MzE4NzczNTgxNSAgLT4gICAyLjg4NjQyNzUyNzc4NjI2NTI3MDk5ODY0OTg1ODEwNjQxMTc5NTAyODg3OTgyMjIxMDAgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MzMgbG9nMTAgMC4wMDAwMDAwMDAwMDAwMDA0MTI5NzQ5NDgwODYxMjIyNjMwNDYxOTU3MDAxNjMzNjE4OCAtPiAtMTUuMzg0MDc2MjkyNzQ1NDE1OTE3NTEwNjY4NDU0MzYxODY4NjU5NDY4NjY5ODA0NzEwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTM0IGxvZzEwIDg2MC44ODg2NDU5NTcxNDQyNjk0MDI0Nzk0MDk2MDI1ODU1ODg3NjkwMzc0MTk2Njk3NCAgLT4gICAyLjkzNDk0Njk4MDA1NTQyNzc5MTU5MjAyNzgwOTA2NDcyODMyMzM0NDA4NTkxNTUxNzYgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MzUgbG9nMTAgNTgzOS4wMzI4ODEyOTk0Nzg3MjM1OTAwMTc4NTg3MzcxMDUxMDk2ODk4NjgzOTcyNDQ0ICAtPiAgIDMuNzY2MzQwOTIwODk3MjM5MjU2OTI2OTEyNTUzOTQzODg3NDczNzE0NzkwNjIzODU0MyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUzNiBsb2cxMCAwLjAwMDAwMDI4NTMyNzEwMTUxMjg0ODQwNDcxNjcwNDk3MTEyODIxMjAxNTk4Mzc3ODQxIC0+ICAtNi41NDQ2NTY5NzUzNTE0MDI3Njc1ODc4ODc5ODQzMjM4MDY1NDg4NDkwNjE4MTU5NDkwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTM3IGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAwMDk3MzQ0OTAwNTk5MzE2Mzg0ODM0NDU2MzE4MzU2NTE1ODEgLT4gLTE2LjAxMTY4Njc5NDAxMTI3MTEzNTk3ODYzMzg4MDg2NDI3ODY5MjI1NDI0MzEwNjkzMSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUzOCBsb2cxMCA1Ljg2MTA5NDk1MjY0Mzk1Mjk0ODkyNTIzMDI0NjM0NTAzMDI5ODE1MTE3MTQxNDQzMzAgIC0+ICAgMC43Njc5Nzg3NTcyMjQ1MjU0OTI4MTAyODU1MjA2NzY0NTczMjQ5MDkyOTM2MTk1MjI3OCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUzOSBsb2cxMCA2LjYyODI0MzIyMjExMTU5MjMzNzIxNTExNDg5OTAxMzcxNzk2MTE5Nzc1NzYzMjcyMDYgIC0+ICAgMC44MjEzOTg0MzYzOTIyNzIxMzIxMTAxMjA0NDAwMDc4NTc1NzI2NzE1NTczNjA3MTM2MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjU0MCBsb2cxMCAwLjAwMDAwMDAwMDAxOTk0MDcxODYyMzg2ODQ2NjI2OTU0ODE5OTIzOTIzMzQ0NDEzNDU0IC0+IC0xMC43MDAyNTkxOTQ2MzIzMzk5ODAyNjY1NTkyMjQ0NDcyMTIyNjAxMTUwMjE2Mzc2MjYgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gUD0zNCwgd2l0aGluIDAtOTk5OQ0KLVByZWNpc2lvbjogMzQNCi1sb2d4MjIwMSBsb2cxMCAxLjUyMjUxMzIwMzg4OTcxNDE3OTA4ODMyNzMyODg2NDE4MyAgLT4gMC4xODI1NjEwNjc3MDk4ODk2MjUwNDk2NjUxMzMwNDkyMTA5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjAyIGxvZzEwIDAuMTcxMTIzNzc0NzY5NzE3MzE2MTU0MDgwODg4OTMwNDA0ICAtPiAtMC43NjY2ODk2NDgzNTQ4NDYyNTgyNDYxODk4MDkyNzY0NDA4IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjAzIGxvZzEwIDAuMDAwMDAwMDk5NzQ2NzIzNjI1MTcxNDI4MzEwNDk2MzgzOCAtPiAtNy4wMDExMDEzNjA2NTI1MTgyNzQyNzE1NjkwMTAzMTIxMTUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMDQgbG9nMTAgMC4wMDA4ODU2MTAzNjI0MTIyNDc5NzY5NjQ3NTQzNDY4NjMzIC0+IC0zLjA1Mjc1NzMxMDQ3NjA3MDg5MTgzMDQ5MDMyNzEzODE5MCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIwNSBsb2cxMCAxLjkzODI3NDg2ODczODAzMjkzMDcwOTQ5ODIyMTIzNjc1OCAgLT4gMC4yODc0MTUzNjQ4MjU5NDQ5NTIwMjAxNTM2MTcxNzE0NTk0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjA2IGxvZzEwIDQ3OS41NjY3ODQ3ODIzODI2NzEzMDgyNjEzNDQ1MDEwMDk3ICAtPiAyLjY4MDg0OTA5NTg1MDM2MTA2ODcwOTE2NTE1NzI4NjQzNSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIwNyBsb2cxMCA4ODU2LjEzNjU5OTE3ODgyMDIwMjE0MTgyMzE1NzMzNjgwNCAgLT4gMy45NDcyNDQzMDY1ODQ3NjcxMDE0ODA0NTQyNjE5NTA1NTkgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMDggbG9nMTAgMC4wMDAwOTExMDI2MzE4ODAxOTAzOTgyNjQyODcxMzQ0ODU4IC0+IC00LjA0MDQ2OTA3NjQzNDk3OTM5ODQzODYxNzQ2NDAzMzgyNiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIwOSBsb2cxMCAwLjAwMDAwMDAwMDAwMTcyNzExMTI2NTA0Mjc0MTQ3MzI2MzAgLT4gLTExLjc2MjY3OTY4MzE0MDM4NzQ4OTk1MTc4MjEyNjU0OTIxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjEwIGxvZzEwIDYuOTYyNjA1MzcwMDc4ODg1NjQ3NjM5NTAzNTQ4MjI5Njk1ICAtPiAwLjg0Mjc3MTc4MDcyMDAzMjIzNTI2ODYzOTY5MjU5OTIyNTAgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMTEgbG9nMTAgMC4zMzU0ODA0NDI4OTkyNzkzMTMyODU1OTIzNTQxNjkyNzgxIC0+IC0wLjQ3NDMzMjc5MjMwMTIxNTkxNzA5Njc2MzYwNzA4NDQ4MzQgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMTIgbG9nMTAgMi4wNzk4NjQyNTc0NzQ4NTkwMDgyNTIxNjU4MzY2NjM1MDQgIC0+IDAuMzE4MDM0OTkxNjE5ODA1OTA0NjgxMjUwNjc0MTM4ODg1NiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIxMyBsb2cxMCAyODA1LjQ3OTUyOTI5MjkzOTQ5OTIyMDI3Njk4NjYyMTk4OCAgLT4gMy40NDgwMDcxMDQxMzk5NzQzNDQ1NjU5Nzg3ODA2MjQ3NDQgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMTQgbG9nMTAgNjYuNDU3MzExMzMwMzQxODczNzQ1NTcwMjg1MzcyMTM5NDkgIC0+IDEuODIyNTQyNzY3MDA1NjQ0MDQxNjYxNTIwOTM2MjIzMDg2IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjE1IGxvZzEwIDAuMDAwMDAwMTIwNjUyMTI2MTc2MjY4MTczODI3NDgyMjgzNSAtPiAtNi45MTg0NjUwMjAzOTAyMTY5Njk1NjE0OTQ3NTU3NjczMTggSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMTYgbG9nMTAgMC4wMDAwMDAwMDAxODg0ODkxOTE2MjY0NDAxMTYwNDcyMzgxIC0+IC05LjcyNDcxMzU0ODExOTA2NTM4NjA5MTkzMzAwNzUyODYzMyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIxNyBsb2cxMCAwLjAwMDAwMTU0NjcyNzk1NTE3MjYzMjY1ODEzMTQ1ODI3NTkgLT4gLTUuODEwNTg2MDY1MDcwNDM1MzgzNzU1NzU5NTE0NjA4NzM4IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjE4IGxvZzEwIDAuMDA5MDc3NjMxNjcyODA2ODU4Njc0NDYzMzkxNDEzNTk1MiAtPiAtMi4wNDIwMjc0NDI4NDM3NDU4ODQ1MDMyODA5NTQzOTAxMTQgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMTkgbG9nMTAgMC4wMDAwMDAwMDAwMDI0NTQxMTA2NTI4NzEzMzkzNzQwMDMwIC0+IC0xMS42MTAxMDU4NTkzNTYzNTcxMzA5MDExOTE1NjA2OTQ3OSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIyMCBsb2cxMCAxNC4xMjkzNjg3OTM4NTg2MzQxMDA4MTA4Nzc1MDY0NTg1NiAgLT4gMS4xNTAxMjI3NjA4OTU0NjY5ODk4NDEwNTczODU3NDI2NjIgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMjEgbG9nMTAgMC4wMDAwMDM2OTEyNDgxODMxMzkyOTIyOTIyNjQ3MjMxMzkyIC0+IC01LjQzMjgyNjc1Mzc4OTg5MjI4MzU1NjIxMTM4MDgyNDIwMyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIyMiBsb2cxMCAwLjAwMDAwMDAwMDQwNjc0Nzc1MjU0MjA0MjQyNzAxMzg3MzQgLT4gLTkuMzkwNjc0ODM4MDUwMDczMTIyODU3ODY4MDEyNDc1MDYwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjIzIGxvZzEwIDcwODAuMTIyNTYyNzA1Mzk5NzQ0OTY5MzE5NTg5ODA2MTk0ICAtPiAzLjg1MDA0MDc3NTc0NzEwMzMxODcyNDMzMDA0NzU0NjkxNiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIyNCBsb2cxMCAyNjEuMzQ5MTQxMTM2MzY3OTIwOTE3NTUyNDc5MDI1NTcyNSAgLT4gMi40MTcyMjEwNzcyMjc1MzYzMTk2NTU2OTk1MTc1MzA4NTUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMjUgbG9nMTAgMDAzLjk5NDU1ODE0NDk5MTUyNDAwOTQ3MjgzODAwNDE0OTQgIC0+IDAuNjAxNDY4NzQ3MTUzMTk4ODI2MDgyMzA2Njk5Nzg0NTY5MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIyNiBsb2cxMCAwLjAwMDAwMDAwMDA1ODM1NDkxNjQ1ODg0OTUyMDY3Njc4NDAgLT4gLTEwLjIzMzkyMjU0ODM0MTgyNjc3MDIzMjMxNzEzNTE5MzQxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjI3IGxvZzEwIDk1NjcuOTYxODMyNjA3MjQwMjc4MzQyNzYxMDg4NDg3NDg0ICAtPiAzLjk4MDgxOTQzNDIxMTEwNzYzMTU2OTM4NjE0NzAxNjM2OCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIyOCBsb2cxMCAwNi4yNjU5Mjk3OTE2MDM0Mjk3Mjc3NzIxOTgyODg2NzAzMyAgLT4gMC43OTY5ODU1MjQzOTY2MjIxNDA4NTk1MDI0MDEyNTc0NzI5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjI5IGxvZzEwIDAuMDAwMDAwMDAwMDU4OTg0NzA0NjU5ODA2NzI3MzI4NzMxOSAtPiAtMTAuMjI5MjYwNTkwNzgyMDYyMTg3MTc3NTUyNTM1ODI5MDcgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMzAgbG9nMTAgNTY3LjkzODg2NDgyMzU1ODkyMDQ3Njk0NDI4NjM3MjQ5OTcgIC0+IDIuNzU0MzAxNTg5MDU4MzEzNTc2NDcyMzgwMjYyOTA3NjM4IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjMxIGxvZzEwIDAzOS43NzkwMzI1NDgwMDM3Nzc4OTE4MTYyMjY0ODgzNDE1ICAtPiAxLjU5OTY1NDIxNjU5MjAxOTE5OTYzOTI4NTMwODk5Nzg4NiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIzMiBsb2cxMCAwLjAwMDAwMDAwMDUxMjM5NTE5MjE4OTQxNjIxNDk4MTcyMDcgLT4gLTkuMjkwMzk0OTUzODk4ODYyNjk0ODQ3MzI3MTM3MjQyNjkwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjMzIGxvZzEwIDAuMDAwMDAwMDAwMDAzODUwMDk5OTcyMzYzNjkwNDI3NjcyMyAtPiAtMTEuNDE0NTI3OTkzMzc5MjQwNTYxODY4NjczMjQ4NTQ2OTEgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMzQgbG9nMTAgMC4wMDA2NzI2NTAwNjU4OTc3NzU5ODI1NjE2NTM3OTM1ODY0IC0+IC0zLjE3MjIxMDgxMDkyMjc2ODcyNTY4NzY3MTg0OTQyMTc5MiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIzNSBsb2cxMCAyNjAuMjQwMDI1MDQ3NTk2NzUyODQyOTk0Mzc3OTEyNjUwNyAgLT4gMi40MTUzNzQwOTIwNzM3OTkyMDQyMzY4MDEzODMwNzAwNjQgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMzYgbG9nMTAgMC4wMDAwMDAwMDA2MTAxOTQyMzM5Mzg1MTAyNTg1MDQyNTQ4IC0+IC05LjIxNDUzMTkwMDU2MjA0NjU1NzE5MTI2MTIyNjYzMjUwOSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIzNyBsb2cxMCAwLjAwMDAwMDAwMTA4NDY4Njc1MDEzODI3NDY3NjAwNjY1NTcgLT4gLTguOTY0Njk1NjY0ODgzMjgyNDA2MzU5ODc0MjQyMzg3MjM2IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjM4IGxvZzEwIDYwLjI0MDc4Mzc1NTY4ODE0NzY5MDEwMzMzNzExNTA5OTI4ICAtPiAxLjc3OTg5MDYxMzU2NzA4NDI1MzE2ODM3MzI2NjY0ODkyMiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIzOSBsb2cxMCAwLjAwMTIwNTg3Mzg3MTE3NTc2NjkzMzc2MDAyNTI5ODYwOTMgLT4gLTIuOTE4Njk4MTE1MDEyNjA1OTE1NzUzNzI4MjIwODk2MDEwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjQwIGxvZzEwIDIzMC45NDUwOTMwMTk3ODQxNjAwNjExNTAzMDk1MTg1NjAwICAtPiAyLjM2MzUwODczOTA1NjgyMjg0Njc0Mjk0MjU5OTYyODk2NiBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBQPTE2LCB3aXRoaW4gMC05OTkNCi1QcmVjaXNpb246IDE2DQotbG9neDIxMDEgbG9nMTAgMC4wMDcyMDY3MTE5NjA1MTg0IC0+IC0yLjE0MjI2MjgzNTU3MzAzOCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEwMiBsb2cxMCA1MDMuNjgyODQ4MjIyNjYyNCAgLT4gMi43MDIxNTcxNjIxOTU2NTIgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMDMgbG9nMTAgNjQuOTYwNzQ0NDc4MjE4MTUgIC0+IDEuODEyNjUwOTkzNDY0MTc0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTA0IGxvZzEwIDQ4Ljc1NDA4NTk3NDY3MjQ2ICAtPiAxLjY4ODAxMTAxODg0MjYwMCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEwNSBsb2cxMCAwLjAzMjkwMDk4MzkyNjk1ODcgLT4gLTEuNDgyNzkxMTEzOTc1MjgwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTA2IGxvZzEwIDIyMy41MzIwNDE1MDYwNjMzICAtPiAyLjM0OTMzOTc4NDUyMzQxMCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEwNyBsb2cxMCA3My4xMjc2NTAwMjI5MjE5NCAgLT4gMS44NjQwODE2MTc0NzYyNjggSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMDggbG9nMTAgNDg3LjM3NDkzNzgzNTg1MDkgIC0+IDIuNjg3ODYzMTkyODAyMjUyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTA5IGxvZzEwIDAuMDAwMDAxOTY3MTk4NzYyMSAtPiAtNS43MDYxNTE3NTc1NTc5MjYgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMTAgbG9nMTAgMC4wNTcwNjgwNjYwNjA5Nzg0IC0+IC0xLjI0MzYwNjg0NDY5Nzg3MyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjExMSBsb2cxMCAzMy4xMDMxMTYzODc4ODk5OCAgLT4gMS41MTk4Njg4ODA5NzY3NzMgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMTIgbG9nMTAgMC4wNjg3MzgyNjk5MTg3MDc3IC0+IC0xLjE2MjgwMTQwMjg2ODE4NSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjExMyBsb2cxMCAyNTguOTQxNjE5MzYyNjQ4NCAgLT4gMi40MTMyMDE4NTk2NTQxNDUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMTQgbG9nMTAgMC4wMDA1MzA2MTAwMTM2NzM2IC0+IC0zLjI3NTIyNDU1ODI2OTcyNSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjExNSBsb2cxMCA2NS43ODQ5MDM5MzQwODU3MiAgLT4gMS44MTgxMjYyNDQ4MjUxMDkgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMTYgbG9nMTAgNTA0LjIzMjg4NDIwNzM1MTAgIC0+IDIuNzAyNjMxMTY1MzQ2OTU4IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTE3IGxvZzEwIDkuNDE3NDMyNzU1ODE1MDI3ICAtPiAwLjk3MzkzMjUyNzg1MjQ1MDMgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMTggbG9nMTAgMDA2LjcwNTQ4MzUzNTU0OTggIC0+IDAuODI2NDMwMTAwNDk0NzY0MCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjExOSBsb2cxMCAwLjA5MTcwMTIyNzIzNjM5MTUgLT4gLTEuMDM3NjI0ODUyMTMzMzk5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTIwIGxvZzEwIDUuOTU5NDA0Mzg1MjQ0OTIxICAtPiAwLjc3NTIwMjg1NjE5NTM0MDEgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMjEgbG9nMTAgMC4wMDAxMjA5NzU5MTQ4NDg2IC0+IC0zLjkxNzMwMTA4NDk2ODkwMyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEyMiBsb2cxMCAwLjAwMDQ3MDYxMTIxMzk4MzggLT4gLTMuMzI3MzM3NzI4NDI4MDM5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTIzIGxvZzEwIDAuMDA2OTcwMDQ1NzM3NzA0NiAtPiAtMi4xNTY3NjQzNzIwMzU3NzEgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMjQgbG9nMTAgMC41MTU1NTg0NTY5ODUyNjE5IC0+IC0wLjI4NzcyMjA4NDc4MDUwMjUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMjUgbG9nMTAgODguMDYwMDU4ODU2MDc0MTQgIC0+IDEuOTQ0Nzc4OTcxMzg5OTEzIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTI2IGxvZzEwIDAuMDQ0ODI0MDAzODIxOTg2NiAtPiAtMS4zNDg0ODkzNTM1MDk3MDkgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMjcgbG9nMTAgMy40MTk2MjI0ODQwNTk1NjUgIC0+IDAuNTMzOTc4MTYzOTEwMTE0NSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEyOCBsb2cxMCA1LjE3MTEyMzM1Mzg1ODcyMSAgLT4gMC43MTM1ODQ4OTc3MTQyODU0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTI5IGxvZzEwIDAuMDAwMjEzMzE4ODMxOTgwNyAtPiAtMy42NzA5NzA4MDI5NDU4NzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMzAgbG9nMTAgNDYuMjEwODY3MDMxMzY5NjYgIC0+IDEuNjY0NzQ0MTE3MDQ1MTQ5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTMxIGxvZzEwIDAuMDAwMDYzMTA1MzcxNDQxNSAtPiAtNC4xOTk5MzM2NzI2Mzk4ODAgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMzIgbG9nMTAgNzguNjYwMTkxOTY4NzA2OTggIC0+IDEuODk1NzU1MDAxOTYyNDY5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTMzIGxvZzEwIDAuMDAwNzE1MjI3ODM1MTE4OCAtPiAtMy4xNDU1NTU1OTIwODIyOTcgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMzQgbG9nMTAgNDUuNTI1MDk4MTk5Mjg1MzYgIC0+IDEuNjU4MjUwODkxMjU2ODkyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTM1IGxvZzEwIDAuMDAwMDcwMzIyNzc5NTc0MCAtPiAtNC4xNTI5MDM5NzE2OTcxODMgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMzYgbG9nMTAgMjYuMjQ0Mzg2NDE0MjY2NjkgIC0+IDEuNDE5MDM2NDIzNTUwNTk5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTM3IGxvZzEwIDAuMDAwMDA0NDY1NDgyOTUzNSAtPiAtNS4zNTAxMzE1NjQxNjY4MTcgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMzggbG9nMTAgMC43MzYwNzAyNzMzMDYyNTI5IC0+IC0wLjEzMzA4MDcyMTE4OTM2MTEgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMzkgbG9nMTAgOC40MTcwNTkxNzY0Njk2NTUgIC0+IDAuOTI1MTYwMzgwNTExMjc3OCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjE0MCBsb2cxMCAwLjAwMDI5MjY1NzA3Njc5NjggLT4gLTMuNTMzNjQwOTY5NjY0ODE4IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIFA9Nywgd2l0aGluIDAtOTkNCi1QcmVjaXNpb246IDcNCi1sb2d4MjAwMSBsb2cxMCA1Ny4yNjA4OSAgLT4gMS43NTc4NTggSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMDIgbG9nMTAgMC4wNTc1NDIxIC0+IC0xLjI0MDAxNCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAwMyBsb2cxMCAwLjU5MTg0NjUgLT4gLTAuMjI3NzkwOSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAwNCBsb2cxMCAwLjAwNjg3NzYgLT4gLTIuMTYyNTYzIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDA1IGxvZzEwIDAuMDA2NjgzMyAtPiAtMi4xNzUwMDkgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMDYgbG9nMTAgOS45MjY5NjMgIC0+IDAuOTk2ODE2NCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAwNyBsb2cxMCAwLjAwNDE4NTIgLT4gLTIuMzc4Mjg0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDA4IGxvZzEwIDg0LjE1NDEyICAtPiAxLjkyNTA3NSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAwOSBsb2cxMCAyLjQ2Njg1NiAgLT4gMC4zOTIxNDM4IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDEwIGxvZzEwIDAuMDA1ODA0NyAtPiAtMi4yMzYyMjAgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMTEgbG9nMTAgOS44ODUxNTQgIC0+IDAuOTk0OTgzNCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAxMiBsb2cxMCAwLjY2Njc2NTQgLT4gLTAuMTc2MDI2OSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAxMyBsb2cxMCAzNC42NTczNiAgLT4gMS41Mzk3OTUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMTQgbG9nMTAgMC4wMDI2ODg0IC0+IC0yLjU3MDUwNiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAxNSBsb2cxMCAwLjA0MzI3NjcgLT4gLTEuMzYzNzQ2IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDE2IGxvZzEwIDY2LjAxNDA3ICAtPiAxLjgxOTYzNyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAxNyBsb2cxMCAwLjAwNzA1NzIgLT4gLTIuMTUxMzY4IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDE4IGxvZzEwIDAuMDczMTYxMyAtPiAtMS4xMzU3MTkgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMTkgbG9nMTAgOS44Mzg5ODMgIC0+IDAuOTkyOTUwMiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAyMCBsb2cxMCAxNS44OTY5NiAgLT4gMS4yMDEzMTQgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMjEgbG9nMTAgOC40NTkyNDcgIC0+IDAuOTI3MzMxNyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAyMiBsb2cxMCAwLjAwMTA4NzMgLT4gLTIuOTYzNjUxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDIzIGxvZzEwIDAuNjQ5ODYxOSAtPiAtMC4xODcxNzg5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDI0IGxvZzEwIDAuMDg0NzAwOCAtPiAtMS4wNzIxMTIgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMjUgbG9nMTAgMC4wMDc1NDg5IC0+IC0yLjEyMjExNiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAyNiBsb2cxMCA1MS4xMTE1MiAgLT4gMS43MDg1MTkgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMjcgbG9nMTAgMC43MjMzODY2IC0+IC0wLjE0MDYyOTUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMjggbG9nMTAgMi4yNTQ3MjEgIC0+IDAuMzUzMDkyOCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAyOSBsb2cxMCA2LjU2ODQ0NCAgLT4gMC44MTc0NjI1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDMwIGxvZzEwIDgzLjcyNjM5ICAtPiAxLjkyMjg2MiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAzMSBsb2cxMCA2LjcyMDU4NSAgLT4gMC44Mjc0MDcxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDMyIGxvZzEwIDg3LjkwMzY2ICAtPiAxLjk0NDAwNyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAzMyBsb2cxMCAwLjA0MzMzMjQgLT4gLTEuMzYzMTg3IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDM0IGxvZzEwIDM0LjYzOTEyICAtPiAxLjUzOTU2NyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAzNSBsb2cxMCAwLjgwODkwNTkgLT4gLTAuMDkyMTAyMDAgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMzYgbG9nMTAgNy43OTM0MDUgIC0+IDAuODkxNzI3MiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAzNyBsb2cxMCAwLjAwNDE3NTcgLT4gLTIuMzc5MjcxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDM4IGxvZzEwIDcuMTM1NDE3ICAtPiAwLjg1MzQxOTQgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMzkgbG9nMTAgMTIuNDk1NzAgIC0+IDEuMDk2NzYxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDQwIGxvZzEwIDYuMzU2Mjc2ICAtPiAwLjgwMzIwMjcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0tLS0tLS0NCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1wcmVjaXNpb246ICAgMTYNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc3BlY2lhbCB2YWx1ZXMNCi1sb2d4ODIwICBsb2cxMCAgIEluZmluaXR5IC0+ICAgSW5maW5pdHkNCi1sb2d4ODIxICBsb2cxMCAgIDAgICAgICAgIC0+ICAtSW5maW5pdHkNCi1sb2d4ODIyICBsb2cxMCAgIE5hTiAgICAgIC0+ICAgTmFODQotbG9neDgyMyAgbG9nMTAgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotbG9neDgyNCAgbG9nMTAgICBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24NCi1sb2d4ODI1ICBsb2cxMCAgIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWxvZ3g4MjYgIGxvZzEwICAgTmFONDU2ICAgLT4gICBOYU40NTYNCi1sb2d4ODI3ICBsb2cxMCAgIC1OYU42NTQgIC0+ICAtTmFONjU0DQotbG9neDgyOCAgbG9nMTAgICBOYU4xICAgICAtPiAgIE5hTjENCi0NCi0NCi0tLSBJbnZhbGlkIG9wZXJhdGlvbnMgZHVlIHRvIHJlc3RyaWN0aW9ucw0KLS0tIFtuZXh0IHR3byBwcm9iYWJseSBza2lwcGVkIGJ5IG1vc3QgdGVzdCBoYXJuZXNzZXNdDQotcHJlY2lzaW9uOiAxMDAwMDAwMDANCi1sb2d4OTAxICBsb2cxMCAxIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQNCi1wcmVjaXNpb246ICA5OTk5OTk5OQ0KLWxvZ3g5MDIgIGxvZzEwIDAgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dA0KLQ0KLXByZWNpc2lvbjogOQ0KLW1heEV4cG9uZW50OiAgIDEwMDAwMDANCi1taW5FeHBvbmVudDogICAtOTk5OTk5DQotbG9neDkwMyAgbG9nMTAgMSAgIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQNCi1tYXhFeHBvbmVudDogICAgOTk5OTk5DQotbWluRXhwb25lbnQ6ICAgLTk5OTk5OQ0KLWxvZ3g5MDQgIGxvZzEwIDAgLT4gIC1JbmZpbml0eQ0KLW1heEV4cG9uZW50OiAgICA5OTk5OTkNCi1taW5FeHBvbmVudDogIC0xMDAwMDAwDQotbG9neDkwNSAgbG9nMTAgMSAgIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQNCi1tYXhFeHBvbmVudDogICAgOTk5OTk5DQotbWluRXhwb25lbnQ6ICAgLTk5OTk5OA0KLWxvZ3g5MDYgIGxvZzEwIDAgLT4gIC1JbmZpbml0eQ0KLQ0KLS0tIE51bGwgdGVzdA0KLWxvZ3g5MDAgIGxvZzEwICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGxvZzEwLmRlY1Rlc3QgLS0gZGVjaW1hbCBsb2dhcml0aG0gaW4gYmFzZSAxMCAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBlbXBoYXNpc2VzIHRoZSB0ZXN0aW5nIG9mIG5vdGFibGUgY2FzZXMsIGFzIHRoZXkgd2lsbCBvZnRlbgorLS0gaGF2ZSB1bnVzdWFsIHBhdGhzIChlc3BlY2lhbGx5IHRoZSAxMCoqbiByZXN1bHRzKS4KKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gZXhhbXBsZXMgaW4gc3BlY2lmaWNhdGlvbgorcHJlY2lzaW9uOiAgIDkKK2xvZ3hzMDAwIGxvZzEwICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3hzMDAxIGxvZzEwICAwLjAwMSAgICAgICAgICAgICAtPiAtMworbG9neHMwMDIgbG9nMTAgIDEgICAgICAgICAgICAgICAgIC0+ICAwCitsb2d4czAwMyBsb2cxMCAgMiAgICAgICAgICAgICAgICAgLT4gIDAuMzAxMDI5OTk2ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsb2d4czAwNCBsb2cxMCAgMTAgICAgICAgICAgICAgICAgLT4gIDEKK2xvZ3hzMDA1IGxvZzEwICA3MCAgICAgICAgICAgICAgICAtPiAgMS44NDUwOTgwNCAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3hzMDA2IGxvZzEwICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworCistLSBiYXNpY3MgKGV4YW1wbGVzIGluIHNwZWNpZmljYXRpb24sIGV0Yy4pCitwcmVjaXNpb246ICAgMTYKK2xvZ3gwMDAwIGxvZzEwICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3gwMDAxIGxvZzEwICA3RS0xMDAwICAgICAgICAgICAtPiAtOTk5LjE1NDkwMTk1OTk4NTcgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDAyIGxvZzEwICAxLjFFLTkgICAgICAgICAgICAtPiAtOC45NTg2MDczMTQ4NDE3NzUgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDAzIGxvZzEwICAwLjAwMDcgICAgICAgICAgICAtPiAtMy4xNTQ5MDE5NTk5ODU3NDMgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDA0IGxvZzEwICAwLjExICAgICAgICAgICAgICAtPiAtMC45NTg2MDczMTQ4NDE3NzUwICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDA1IGxvZzEwICAwLjcgICAgICAgICAgICAgICAtPiAtMC4xNTQ5MDE5NTk5ODU3NDMyICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDA2IGxvZzEwICAxICAgICAgICAgICAgICAgICAtPiAgMAorbG9neDAwMDcgbG9nMTAgIDEuNSAgICAgICAgICAgICAgIC0+ICAwLjE3NjA5MTI1OTA1NTY4MTIgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMDggbG9nMTAgIDIgICAgICAgICAgICAgICAgIC0+ICAwLjMwMTAyOTk5NTY2Mzk4MTIgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMDkgbG9nMTAgIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAwLjQzNDI5NDQ4MTkwMzI1MTggIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTAgbG9nMTAgIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAwLjQzNDI5NDQ4MTkwMzI1MTkgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTEgbG9nMTAgIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAwLjQzNDI5NDQ4MTkwMzI1MjEgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTIgbG9nMTAgIDcgICAgICAgICAgICAgICAgIC0+ICAwLjg0NTA5ODA0MDAxNDI1NjggIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTMgbG9nMTAgIDEwICAgICAgICAgICAgICAgIC0+ICAxCitsb2d4MDAxNCBsb2cxMCAgMTAuNSAgICAgICAgICAgICAgLT4gIDEuMDIxMTg5Mjk5MDY5OTM4ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAxNSBsb2cxMCAgMTEgICAgICAgICAgICAgICAgLT4gIDEuMDQxMzkyNjg1MTU4MjI1ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAxNiBsb2cxMCAgNzAgICAgICAgICAgICAgICAgLT4gIDEuODQ1MDk4MDQwMDE0MjU3ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAxNyBsb2cxMCAgOTk5OSAgICAgICAgICAgICAgLT4gIDMuOTk5OTU2NTY4MzgwMTkyICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAxOCBsb2cxMCAgMS4yMUU2ICAgICAgICAgICAgLT4gIDYuMDgyNzg1MzcwMzE2NDUwICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAxOSBsb2cxMCAgMS4xRSs5ICAgICAgICAgICAgLT4gIDkuMDQxMzkyNjg1MTU4MjI1ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAyMCBsb2cxMCAgN0UrMTAwMCAgICAgICAgICAgLT4gIDEwMDAuODQ1MDk4MDQwMDE0ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAyMSBsb2cxMCArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKy0tIG5vdGFibGUgY2FzZXMKKy0tIG5lZ2F0aXZlcworbG9neDAwMzEgbG9nMTAgLTFFLTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzIgbG9nMTAgLTAuMDAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzMgbG9nMTAgLTAuMSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzQgbG9nMTAgLTAuNyAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzUgbG9nMTAgLTEgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzYgbG9nMTAgLTEuNSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzcgbG9nMTAgLTIgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzggbG9nMTAgLTEwLjUgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzkgbG9nMTAgLTEwLjUgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwNDAgbG9nMTAgLTk5OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwNDEgbG9nMTAgLTEwICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwNDIgbG9nMTAgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG9neDAwNDMgbG9nMTAgLTBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG9neDAwNDQgbG9nMTAgLTBFLTE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorLS0gb3RoZXIgemVyb3MKK2xvZ3gwMDUxIGxvZzEwICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3gwMDUyIGxvZzEwICAwRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3gwMDUzIGxvZzEwICAwRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKy0tIGluZmluaXRpZXMKK2xvZ3gwMDU1IGxvZzEwIC1JbmZpbml0eSAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDU2IGxvZzEwICtJbmZpbml0eSAgICAgICAgICAtPiBJbmZpbml0eQorLS0gb25lcworbG9neDAwNjEgbG9nMTAgIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG9neDAwNjIgbG9nMTAgIDEuMCAgICAgICAgICAgICAgIC0+ICAgMAorbG9neDAwNjMgbG9nMTAgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorbG9neDAwNjQgbG9nMTAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorCistLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMAorbG9neDExMDAgbG9nMTAgMSAgICAgICAgICAgICAtPiAwCitsb2d4MTEwMSBsb2cxMCAxMCAgICAgICAgICAgIC0+IDEKK2xvZ3gxMTAyIGxvZzEwIDEwMCAgICAgICAgICAgLT4gMgorbG9neDExMDMgbG9nMTAgMTAwMCAgICAgICAgICAtPiAzCitsb2d4MTEwNCBsb2cxMCAxMDAwMCAgICAgICAgIC0+IDQKK2xvZ3gxMTA1IGxvZzEwIDEwMDAwMCAgICAgICAgLT4gNQorbG9neDExMDYgbG9nMTAgMTAwMDAwMCAgICAgICAtPiA2Citsb2d4MTEwNyBsb2cxMCAxMDAwMDAwMCAgICAgIC0+IDcKK2xvZ3gxMTA4IGxvZzEwIDEwMDAwMDAwMCAgICAgLT4gOAorbG9neDExMDkgbG9nMTAgMTAwMDAwMDAwMCAgICAtPiA5Citsb2d4MTExMCBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDEwCitsb2d4MTExMSBsb2cxMCAxMDAwMDAwMDAwMDAgIC0+IDExCitsb2d4MTExMiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDEyCitsb2d4MTExMyBsb2cxMCAwLjAwMDAwMDAwMDAxIC0+IC0xMQorbG9neDExMTQgbG9nMTAgMC4wMDAwMDAwMDAxIC0+IC0xMAorbG9neDExMTUgbG9nMTAgMC4wMDAwMDAwMDEgLT4gLTkKK2xvZ3gxMTE2IGxvZzEwIDAuMDAwMDAwMDEgLT4gLTgKK2xvZ3gxMTE3IGxvZzEwIDAuMDAwMDAwMSAtPiAtNworbG9neDExMTggbG9nMTAgMC4wMDAwMDEgLT4gLTYKK2xvZ3gxMTE5IGxvZzEwIDAuMDAwMDEgLT4gLTUKK2xvZ3gxMTIwIGxvZzEwIDAuMDAwMSAtPiAtNAorbG9neDExMjEgbG9nMTAgMC4wMDEgLT4gLTMKK2xvZ3gxMTIyIGxvZzEwIDAuMDEgLT4gLTIKK2xvZ3gxMTIzIGxvZzEwIDAuMSAtPiAtMQorbG9neDExMjQgbG9nMTAgMUUtOTkgIC0+IC05OQorbG9neDExMjUgbG9nMTAgMUUtMTAwIC0+IC0xMDAKK2xvZ3gxMTI2IGxvZzEwIDFFLTM4MyAtPiAtMzgzCisKKy0tIGNoZWNrIG5vcm1hbGx5IGV4YWN0IGNhc2VzIHJvdW5kIHByb3Blcmx5CitwcmVjaXNpb246IDEKK2xvZ3gxMTQxIGxvZzEwIDEwMDAwMDAwMDAwICAgLT4gMUUrMSAgICAgICAgIFJvdW5kZWQKK2xvZ3gxMTQyIGxvZzEwIDEwMDAwMDAwMDAwMDAgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTQzIGxvZzEwIDFFKzEwMCAgICAgICAgLT4gMUUrMiAgICAgICAgIFJvdW5kZWQKK2xvZ3gxMTQ0IGxvZzEwIDFFKzEyMyAgICAgICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTQ1IGxvZzEwIDFFKzEyNiAgICAgICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTQ2IGxvZzEwIDFFKzkxNiAgICAgICAgLT4gOUUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTQ3IGxvZzEwIDFFKzk5OSAgICAgICAgLT4gMUUrMyBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAyCitsb2d4MTE1MSBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDEwCitsb2d4MTE1MiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDEyCitsb2d4MTE1MyBsb2cxMCAxRSsxMDAgICAgICAgIC0+IDEuMEUrMiAgICAgICAgIFJvdW5kZWQKK2xvZ3gxMTU0IGxvZzEwIDFFKzEyMyAgICAgICAgLT4gMS4yRSsyIEluZXhhY3QgUm91bmRlZAorbG9neDExNTUgbG9nMTAgMUUrMTI2ICAgICAgICAtPiAxLjNFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE1NiBsb2cxMCAxRSs5MTYgICAgICAgIC0+IDkuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTU3IGxvZzEwIDFFKzk5OSAgICAgICAgLT4gMS4wRSszIEluZXhhY3QgUm91bmRlZAorLS0gc29tZSBoYWxmLXdheSBwb2ludCByb3VuZHMsIG90aGVyIGNhc2VzLCBhbmQgbmVnYXRpdmVzCitsb2d4MTE1OCBsb2cxMCAxRSsxMjUgICAgICAgIC0+IDEuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTU5IGxvZzEwIDFFKzEzNSAgICAgICAgLT4gMS40RSsyIEluZXhhY3QgUm91bmRlZAorbG9neDExNjAgbG9nMTAgMUUrMTI5ICAgICAgICAtPiAxLjNFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2MSBsb2cxMCAxRSsxMzEgICAgICAgIC0+IDEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTYyIGxvZzEwIDFFLTEyMyAgICAgICAgLT4gLTEuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTYzIGxvZzEwIDFFLTEyNiAgICAgICAgLT4gLTEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY0IGxvZzEwIDFFLTkxNiAgICAgICAgLT4gLTkuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY1IGxvZzEwIDFFLTk5OSAgICAgICAgLT4gLTEuMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY2IGxvZzEwIDFFLTEyNSAgICAgICAgLT4gLTEuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY3IGxvZzEwIDFFLTEzNSAgICAgICAgLT4gLTEuNEUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY4IGxvZzEwIDFFLTEyOSAgICAgICAgLT4gLTEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY5IGxvZzEwIDFFLTEzMSAgICAgICAgLT4gLTEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAzCitsb2d4MTE3MSBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDEwCitsb2d4MTE3MiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDEyCitsb2d4MTE3MyBsb2cxMCAxRSsxMDAgICAgICAgIC0+IDEwMAorbG9neDExNzQgbG9nMTAgMUUrMTIzICAgICAgICAtPiAxMjMKK2xvZ3gxMTc1IGxvZzEwIDFFKzEyNiAgICAgICAgLT4gMTI2Citsb2d4MTE3NiBsb2cxMCAxRSs5MTYgICAgICAgIC0+IDkxNgorbG9neDExNzcgbG9nMTAgMUUrOTk5ICAgICAgICAtPiA5OTkKKworLS0gbG9nMTAoMikgLi4gdGVzdHMgYm90aCBsbigyKSBhbmQgbG4oMTApIGNvbnN0YW50cywgdG9vCitwcmVjaXNpb246IDUwCitsb2d4MTIwMSBsb2cxMCAyICAgICAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjExIEluZXhhY3QgUm91bmRlZAorbG9neDEyMDIgbG9nMTAgMi4wMDAgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMjAzIGxvZzEwIDAuMkUxIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMTEgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ5Citsb2d4MTIwNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMSBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDgKK2xvZ3gxMjA1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0NworbG9neDEyMDYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ2Citsb2d4MTIwNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNSAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDUKK2xvZ3gxMjA4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODEgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0NAorbG9neDEyMDkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQzCitsb2d4MTIxMCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5OSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDIKK2xvZ3gxMjExIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxOTAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MQorbG9neDEyMTIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQwCitsb2d4MTIxMyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzkKK2xvZ3gxMjE0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjggICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzOAorbG9neDEyMTUgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM3Citsb2d4MTIxNiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2OCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzYKK2xvZ3gxMjE3IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNQorbG9neDEyMTggbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAzICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM0Citsb2d4MTIxOSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzMKK2xvZ3gxMjIwIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMgorbG9neDEyMjEgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMxCitsb2d4MTIyMiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NSAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzAKK2xvZ3gxMjIzIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOQorbG9neDEyMjQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI4Citsb2d4MTIyNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NyAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjcKK2xvZ3gxMjI2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTUgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNgorbG9neDEyMjcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5ICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI1Citsb2d4MTIyOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4OSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjQKK2xvZ3gxMjI5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3MzkgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMworbG9neDEyMzAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzc0ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIyCitsb2d4MTIzMSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjEKK2xvZ3gxMjMyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMAorbG9neDEyMzMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE5Citsb2d4MTIzNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTgKK2xvZ3gxMjM1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNworbG9neDEyMzYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE2Citsb2d4MTIzNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTUKK2xvZ3gxMjM4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNAorbG9neDEyMzkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEzCitsb2d4MTI0MCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjY0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTIKK2xvZ3gxMjQxIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMQorbG9neDEyNDIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEwCitsb2d4MTI0MyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDkKK2xvZ3gxMjQ0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgOAorbG9neDEyNDUgbG9nMTAgMiAtPiAwLjMwMTAzMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA3Citsb2d4MTI0NiBsb2cxMCAyIC0+IDAuMzAxMDMwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDYKK2xvZ3gxMjQ3IGxvZzEwIDIgLT4gMC4zMDEwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNQorbG9neDEyNDggbG9nMTAgMiAtPiAwLjMwMTAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA0Citsb2d4MTI0OSBsb2cxMCAyIC0+IDAuMzAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMKK2xvZ3gxMjUwIGxvZzEwIDIgLT4gMC4zMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMgorbG9neDEyNTEgbG9nMTAgMiAtPiAwLjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxCitsb2d4MTI1MiBsb2cxMCAyIC0+IDAuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBNb3JlIGNsb3NlLXRvLWUsIGV0Yy4sIHRlc3RzCitwcmVjaXNpb246ICAgMzQKK2xvZ3gxMzAxIGxvZzEwIDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYxICAtPiAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNDggSW5leGFjdCBSb3VuZGVkCitsb2d4MTMwMiBsb2cxMCAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MiAgLT4gMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUwIEluZXhhY3QgUm91bmRlZAorbG9neDEzMDMgbG9nMTAgMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjMgIC0+IDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzA0IGxvZzEwIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAtPiAtNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNzNFLTMzIEluZXhhY3QgUm91bmRlZAorbG9neDEzMDUgbG9nMTAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+IC00LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1M0UtMzQgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMwNiBsb2cxMCAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gLTQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUxRS0zNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzA3IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAwCitsb2d4MTMwOCBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgLT4gNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTFFLTM1IEluZXhhY3QgUm91bmRlZAorbG9neDEzMDkgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+IDQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDQ5RS0zNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzEwIGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAtPiA0LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjAyOUUtMzMgSW5leGFjdCBSb3VuZGVkCistLSBsb3dlciBwCitwcmVjaXNpb246ICAgIDcKK2xvZ3gxMzIwIGxvZzEwIDAuOTk5OTk5ICAgIC0+IC00LjM0Mjk0N0UtNyAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMyMSBsb2cxMCAwLjk5OTk5OTkgICAtPiAtNC4zNDI5NDVFLTggIEluZXhhY3QgUm91bmRlZAorbG9neDEzMjIgbG9nMTAgMC45OTk5OTk5OSAgLT4gLTQuMzQyOTQ1RS05ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzIzIGxvZzEwIDAuOTk5OTk5OTk5IC0+IC00LjM0Mjk0NUUtMTAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMyNCBsb2cxMCAxLjAwMDAwMDAwICAtPiAgMAorbG9neDEzMjUgbG9nMTAgMS4wMDAwMDAwMSAgLT4gIDQuMzQyOTQ1RS05ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzI2IGxvZzEwIDEuMDAwMDAwMSAgIC0+ICA0LjM0Mjk0NUUtOCAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMyNyBsb2cxMCAxLjAwMDAwMSAgICAtPiAgNC4zNDI5NDNFLTcgIEluZXhhY3QgUm91bmRlZAorCistLSBuZWFyIDEwXjMKK3ByZWNpc2lvbjogICA5Citsb2d4MTMzMSBsb2cxMCAgOTk5Ljk5OTk5OTggIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMzMiBsb2cxMCAgOTk5Ljk5OTk5OTkgIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMzMyBsb2cxMCAxMDAwLjAwMDAwMCAgIC0+IDMKK2xvZ3gxMzM0IGxvZzEwIDEwMDAuMDAwMDAxICAgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzM1IGxvZzEwIDEwMDAuMDAwMDAyICAgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTYKK2xvZ3gxMzQxIGxvZzEwICA5OTkuOTk5OTk5OCAgLT4gMi45OTk5OTk5OTk5MTMxNDEgSW5leGFjdCBSb3VuZGVkCitsb2d4MTM0MiBsb2cxMCAgOTk5Ljk5OTk5OTkgIC0+IDIuOTk5OTk5OTk5OTU2NTcxIEluZXhhY3QgUm91bmRlZAorbG9neDEzNDMgbG9nMTAgMTAwMC4wMDAwMDAgICAtPiAzCitsb2d4MTM0NCBsb2cxMCAxMDAwLjAwMDAwMSAgIC0+IDMuMDAwMDAwMDAwNDM0Mjk0IEluZXhhY3QgUm91bmRlZAorbG9neDEzNDUgbG9nMTAgMTAwMC4wMDAwMDIgICAtPiAzLjAwMDAwMDAwMDg2ODU4OSBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQorbG9neDE0MDAgbG9nMTAgMTBFLTMgICAgLT4gLTIKK2xvZ3gxNDAxIGxvZzEwIDEwRS0yICAgIC0+IC0xCitsb2d4MTQwMiBsb2cxMCAxMDBFLTIgICAtPiAgMAorbG9neDE0MDMgbG9nMTAgMTAwMEUtMiAgLT4gIDEKK2xvZ3gxNDA0IGxvZzEwIDEwMDAwRS0yIC0+ICAyCitsb2d4MTQwNSBsb2cxMCAxMEUtMSAgICAtPiAgMAorbG9neDE0MDYgbG9nMTAgMTAwRS0xICAgLT4gIDEKK2xvZ3gxNDA3IGxvZzEwIDEwMDBFLTEgIC0+ICAyCitsb2d4MTQwOCBsb2cxMCAxMDAwMEUtMSAtPiAgMworbG9neDE0MDkgbG9nMTAgMTBFMCAgICAgLT4gIDEKK2xvZ3gxNDEwIGxvZzEwIDEwMEUwICAgIC0+ICAyCitsb2d4MTQxMSBsb2cxMCAxMDAwRTAgICAtPiAgMworbG9neDE0MTIgbG9nMTAgMTAwMDBFMCAgLT4gIDQKK2xvZ3gxNDEzIGxvZzEwIDEwRTEgICAgIC0+ICAyCitsb2d4MTQxNCBsb2cxMCAxMDBFMSAgICAtPiAgMworbG9neDE0MTUgbG9nMTAgMTAwMEUxICAgLT4gIDQKK2xvZ3gxNDE2IGxvZzEwIDEwMDAwRTEgIC0+ICA1Citsb2d4MTQxNyBsb2cxMCAxMEUyICAgICAtPiAgMworbG9neDE0MTggbG9nMTAgMTAwRTIgICAgLT4gIDQKK2xvZ3gxNDE5IGxvZzEwIDEwMDBFMiAgIC0+ICA1Citsb2d4MTQyMCBsb2cxMCAxMDAwMEUyICAtPiAgNgorCistLSBSYW5kb21zCistLSBQPTUwLCB3aXRoaW4gMC05OTk5CitQcmVjaXNpb246IDUwCitsb2d4MjUwMSBsb2cxMCAwLjAwMDM1NDQ4MDAxNjY3OTY4MTQxNzc1ODkxMjQ2OTkxOTEyNjU1OTYxMTYzMzQ1OTA0IC0+ICAtMy40NTA0MDgyNDI1NDExNzc1MjkwODY0MDUzMzE4MjQ3Mjc0OTQ0Njg1NTg2MTg4NTA1IEluZXhhY3QgUm91bmRlZAorbG9neDI1MDIgbG9nMTAgNzAuNjM2NDU1NzI2NDI0MzExMjI4MjU1MzM4NjM3OTM1MzMwODI2OTk1MTM2NTk3NjQ0ICAtPiAgIDEuODQ5MDI4ODk5ODQwODQ5MjA0NTc5MzA3MDI1NTMwMjMzNTU1ODE0MDk3NTcxOTI0NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTAzIGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAyMzM1NTAzNjI0NzM4MjE4ODkwNjA4MTI4MDQwNjMwNDAxNjkgLT4gLTE0LjYzMTYxOTQ1NDM0MzgzNDg1ODAyMzU3ODI5OTE0Mjg2NjU1NzcxNzkwNDIyMzY2NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTA0IGxvZzEwIDk3Ljc4MzYyODYyMTUyMzI0NDY3OTkwMTI2MDM1ODI4Njg5ODk1ODgzMjEzNTQzMzc2NCAgLT4gICAxLjk5MDI2NjE0OTMyMjQyMTk1MTc4OTc2NTc5NjQzNjI1NzE2OTA1OTI3MzQ0MDczMzAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUwNSBsb2cxMCAwMDYyLjIzNzcxMzUzMTU4NTgzOTI4MDI2MTI4MTIwMjI4MDc4Mzg1OTk1NzIwMTczNDIgIC0+ICAgMS43OTQwNTM2MjkzMDg1MDY2MTk5Mjg3NjMyNzI1MDI2ODM3MDE4NDg2NTMzNTQ0MTQxIEluZXhhY3QgUm91bmRlZAorbG9neDI1MDYgbG9nMTAgNi4zNzY3NjM0NjUyMDcxMDUzNjE5OTc3NjAyODA0NzI0MTI5NjUyOTgxNzQ3ODc5NTMyICAtPiAgIDAuODA0NjAwMzA3ODk4MjU5NjE2MTUxMDAxNjM1NzYwODA3NjEzMjY4NTczNzQwOTg2NDQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUwNyBsb2cxMCA2My4yOTcwODg5ODEzMTMyNzg1MjkzMDY1MzM4MTQxOTUwNjg4NTA1MzI2NjY2NTg3OTggIC0+ICAgMS44MDEzODM3MzczNzI0NDI3MDkyNDE3MTcwMTQ5MDk4NjE0NDEwODQ5MzUzODM5NjczIEluZXhhY3QgUm91bmRlZAorbG9neDI1MDggbG9nMTAgMC4wMDAwMDA3NzIzOTY5MzMxNjg4MTc5NzcxNzgyMDExMDg5ODE2NzcyMTYwMjI5OTE4NyAtPiAgLTYuMTEyMTU5NDU5MjcxODU1MDYxMzc3Mzg4NjI0MTk1MTk2NjI2NDgyNjc2MDMxMDA0NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTA5IGxvZzEwIDAuMDAwMDAwMDM5NTM1ODAzNTk3ODAxODU1MzQ4MzA1NzI0NjE5MjI1Mjc4MzEzOTUwMDIgLT4gIC03LjQwMzAwOTQyOTM4MzM4NDcxMzYyNTI1NDcwNjk5MDU0NzcyMTM1NDE3ODcxNzc1NjEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxMCBsb2cxMCA3NTQuNjI5MDU4MTczNjk5ODkxNjkxODg5OTgxMTE1MjcyNzI2ODg3OTE1NDQ1NzcyMDQgIC0+ICAgMi44Nzc3MzM1MjQzNzYxMzAwMDQ3NzU4NTM0MzA0MzcxOTEyMDk5OTU4MDU3NTQ1NDE2IEluZXhhY3QgUm91bmRlZAorbG9neDI1MTEgbG9nMTAgMC4wMDAwMDA0ODM2MDM3ODQxMDI0MTQyODkzNjYwNzE0NzA1NjI4MzI4Mjg0OTE1ODMxMiAtPiAgLTYuMzE1NTEwMzA5NTMwOTM1MzQ1NzYwNDAzODM5Nzk4MDA5MTY1MDc2MDM0NjMzNDUxMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTEyIGxvZzEwIDAuMDAwMDc1MDkwMzc1ODM2NDU2MTI1NzcxOTYxMDQ1OTE2NzIwODA1NDI5MzIxNjYwODkgLT4gIC00LjEyNDQxNTcyMTk3MDAxNjYzMTQwMTIzNDQ3MDU1MzgwODgwMzA1OTI4OTYxMTEwMjYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxMyBsb2cxMCAwLjAwMDAwMDAwMDAwNzA1NDc1OTQ0NjM4OTE1MDUzNDE5ODM5MDYzNTY3ODk4MDkyMDY0IC0+IC0xMS4xNTE1MTc3OTAyNTY0NjYwNDg1NTM4MTAwMDI1MjU4NjgxOTgxNzgxNjc5NTAzNzcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxNCBsb2cxMCA5LjYyMTAzMDA0NjA0OTc2NTc5MTc0NDU0MTA5NDcwOTk2MzM0Nzk2MDkxNjUxMjA2NjEgIC0+ICAgMC45ODMyMjE1NzA5MzI2MDk3ODIwNjYzMzkyMjg3NzcxNjA3ODY4MzUxODYxNzc2ODQxMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTE1IGxvZzEwIDAuMDAwMDAwMDAwNTAxNTAzNjEzODY1NTU1Mjc0OTY2MDcyNDU5NzYxMjA4NjQ5ODU2MTEgLT4gIC05LjI5OTcyNTkzMzA3OTgyNjEwNDA0MTEwODY4MzU1NjMyMzQzOTA5MzQ5MzQ2MjkzNDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxNiBsb2cxMCAwOTguMjQ3NTQwMjk3MzE5OTQxMjU3OTc3MjM1NDUzMzM2Nzc2MDQ0OTAwNzQ4MTA3NTEgIC0+ICAgMS45OTIzMjE2ODYyODc0MzM3MDc3Nzk1Mjc4NjI5MzUxMDYwODE5MTA1Njc5NjcwNjMzIEluZXhhY3QgUm91bmRlZAorbG9neDI1MTcgbG9nMTAgNy41MDkxOTk4MTUwMDQ2OTk0MzIwNDQxNDYzODU0MzAxNjI0NzQyNDkxMDE1NzUyOTgwICAtPiAgIDAuODc1NTkzNjYwNzgwMDU5MjQwODA3NjY0NjkxNTg3NjM0OTk3MjU0MTQwMjQxMjg3ODEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxOCBsb2cxMCAwLjAwMDAwMDAwMDAwMDc5NTQwNTcxMjczMzMwMDc1MTkzNjY4NTk2OTQyMjY4NTQyNDI1IC0+IC0xMi4wOTk0MTEyOTQxNjUxNzYwMjg4MTczMDUxMDg0NzUzMjYzMjUwMDYyNTA5MzY5NjMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxOSBsb2cxMCAwLjAwMDAwMDQyMzk1MDM0Nzk5NTU1MjE1NzgyOTA3NTE1MDc0MTM0MTU0OTE1NDkxNzAxIC0+ICAtNi4zNzI2ODUwMDM5MTI1MzgxMTM0MDY5NDUwODAyMTA4ODkzMDc1NjA0NDY0MTM1Mjk3IEluZXhhY3QgUm91bmRlZAorbG9neDI1MjAgbG9nMTAgNTYuNjgzMzc2MzA0Njc0MzU1NDgxOTA1MDIzMTQ1MjM4Nzk5OTA5MzAxNzMyNjk0OTgyICAtPiAgIDEuNzUzNDU1NzEwNzg1MzQ4MDQzNTcwMzQyMTgyNjA3NzYwNjI1MDYzNjU4MDA5MTc1NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTIxIGxvZzEwIDQ4LjczNDAzMzgxMTQ0NDE5NTA3MDgwNzYwNjcyMTUxNzE2OTgxMDQzODA0OTU4MTIyNyAgLT4gICAxLjY4NzgzMjM2MDI3NDEwNjUxOTA5NDI2NTQ3MTAwNDk0MzM4MDgyMDgyOTE1NjQwNDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyMiBsb2cxMCAwLjAwMDc0ODMwMzEwOTMwMDQ2ODY1MDA5ODUxNzA2OTg5NDMwMjI4NTYxODgwMjIxMDYzIC0+ICAtMy4xMjU5MjI0NTAyMjA5OTc0MDgyMjIzNjY3NzEyMDE2NDQ1NTcyNDMxNzkxOTIwNjE4IEluZXhhY3QgUm91bmRlZAorbG9neDI1MjMgbG9nMTAgMzYuNjc3MzQ4ODg1MTExNTkzMzg0MDIwODM2NzIwMzk2MjYyNDk3MTIyNzA4NTk4MzU5ICAtPiAgIDEuNTY0Mzk3OTM2NDI2MDc5NjA4Njc1NDUzMDI4MjMwMjYwNTQ3NzU2NzQ2OTM5NTQyNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTI0IGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAwMDQ0OTU2Nzg1NjA0ODA0MzI4NTg4MTI0MTkxNDU4MzM3NDQgLT4gLTE2LjM0NzIwNDc0ODIzOTc0MDUxMDAxNDMyMDYzMDM2MzI0NDAxNTkxNjAyOTYxOTU2MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTI1IGxvZzEwIDk1MDkuNTg1NDAxMzY1MDY0Mjc5OTM3NDE1OTEzMTk0MDEwODc0ODU5NDc3NDMwNzEwNCAgLT4gICAzLjk3ODE2MTU4Mjk5MTYzMjY3NDExMDAxNjY1MTk3MjY4MjQ0MzA5NDU0MDYzMDI2NjEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyNiBsb2cxMCAwLjA3ODM0ODkxMjY4Njg5MTc3MDE0MDQ0NDU0NzkzNjA4NzE1Mjc2NjE1NzQzODE5MDk3IC0+ICAtMS4xMDU5NjcwMjYyMTk3NjQzMTQ3ODA1NTE3Mzk4NjIxMjg4ODk3NjY5ODc2OTk2MzQ4IEluZXhhY3QgUm91bmRlZAorbG9neDI1MjcgbG9nMTAgMC4wMDAwMDAyOTU4NDUyOTg4MDcwNjEyODQ0NDQ1NDY4ODQ1NDk5OTAzMjgwMTkwNDc5NCAtPiAgLTYuNTI4OTM1MzI3NTgxNDA0MzcxMDA3NjUyNjkyMDU2NjcyMTU3MDM3NTAyNjkxNzIwNiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTI4IGxvZzEwIDMuMDcxMzQ5NjU0NDQ5NzYxODA5ODc5NDMzMjc4Nzc3MjE4NjE3Njk4MTAxMTkwNDI5NCAgLT4gICAwLjQ4NzMyOTI2MTAzODk2ODI4NTQ2NDI0MzQxMDI5NDkyNDY4MTAwNDMxNDE0MDcyOTk0IEluZXhhY3QgUm91bmRlZAorbG9neDI1MjkgbG9nMTAgMzUyLjY2MzkyNjcwNzg4ODE2NDc0NDA3NDQyNzg1NDYwODAzODMzOTI3MTM2NDEzOTQzICAtPiAgIDIuNTQ3MzYxMDM4ODE5OTU2MjcxNDcwOTgzNjM5ODI0MzkzMzMyMDI4NDA3NzAwODMxNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTMwIGxvZzEwIDAuMDAzMDQ3NDMxMjUxODE4NzYyNjcyMTA1MTY1MjczNjE3NDIxODU2MTcwOTE4MDE2NTAgLT4gIC0yLjUxNjA2NjA4MzAxNjM5ODE5Njc3NzQxMjQ3NDUzMTE0OTc0NDcwNTAwNTY0MDAyMDcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzMSBsb2cxMCAwLjAwMDAwMDc2MTIwNTM1ODk0OTUyMTM2NDk5MjUwMzY0NjA0NTM4MTE3NzI5NDM3MTgzIC0+ICAtNi4xMTg0OTgxNjI5MDQ3MDUxNTMyNDQ4NDEzODYzOTUwNzc2NDk2NjUyNDgzMDE5NDE1IEluZXhhY3QgUm91bmRlZAorbG9neDI1MzIgbG9nMTAgNzY5Ljg4Nzk1OTc4NTM0MzUzMDUyOTY1Mjg2MTk1MDUzNzM1MDA3NDczMTg3NzM1ODE1ICAtPiAgIDIuODg2NDI3NTI3Nzg2MjY1MjcwOTk4NjQ5ODU4MTA2NDExNzk1MDI4ODc5ODIyMjEwMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTMzIGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAwNDEyOTc0OTQ4MDg2MTIyMjYzMDQ2MTk1NzAwMTYzMzYxODggLT4gLTE1LjM4NDA3NjI5Mjc0NTQxNTkxNzUxMDY2ODQ1NDM2MTg2ODY1OTQ2ODY2OTgwNDcxMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTM0IGxvZzEwIDg2MC44ODg2NDU5NTcxNDQyNjk0MDI0Nzk0MDk2MDI1ODU1ODg3NjkwMzc0MTk2Njk3NCAgLT4gICAyLjkzNDk0Njk4MDA1NTQyNzc5MTU5MjAyNzgwOTA2NDcyODMyMzM0NDA4NTkxNTUxNzYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzNSBsb2cxMCA1ODM5LjAzMjg4MTI5OTQ3ODcyMzU5MDAxNzg1ODczNzEwNTEwOTY4OTg2ODM5NzI0NDQgIC0+ICAgMy43NjYzNDA5MjA4OTcyMzkyNTY5MjY5MTI1NTM5NDM4ODc0NzM3MTQ3OTA2MjM4NTQzIEluZXhhY3QgUm91bmRlZAorbG9neDI1MzYgbG9nMTAgMC4wMDAwMDAyODUzMjcxMDE1MTI4NDg0MDQ3MTY3MDQ5NzExMjgyMTIwMTU5ODM3Nzg0MSAtPiAgLTYuNTQ0NjU2OTc1MzUxNDAyNzY3NTg3ODg3OTg0MzIzODA2NTQ4ODQ5MDYxODE1OTQ5MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTM3IGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAwMDk3MzQ0OTAwNTk5MzE2Mzg0ODM0NDU2MzE4MzU2NTE1ODEgLT4gLTE2LjAxMTY4Njc5NDAxMTI3MTEzNTk3ODYzMzg4MDg2NDI3ODY5MjI1NDI0MzEwNjkzMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTM4IGxvZzEwIDUuODYxMDk0OTUyNjQzOTUyOTQ4OTI1MjMwMjQ2MzQ1MDMwMjk4MTUxMTcxNDE0NDMzMCAgLT4gICAwLjc2Nzk3ODc1NzIyNDUyNTQ5MjgxMDI4NTUyMDY3NjQ1NzMyNDkwOTI5MzYxOTUyMjc4IEluZXhhY3QgUm91bmRlZAorbG9neDI1MzkgbG9nMTAgNi42MjgyNDMyMjIxMTE1OTIzMzcyMTUxMTQ4OTkwMTM3MTc5NjExOTc3NTc2MzI3MjA2ICAtPiAgIDAuODIxMzk4NDM2MzkyMjcyMTMyMTEwMTIwNDQwMDA3ODU3NTcyNjcxNTU3MzYwNzEzNjEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjU0MCBsb2cxMCAwLjAwMDAwMDAwMDAxOTk0MDcxODYyMzg2ODQ2NjI2OTU0ODE5OTIzOTIzMzQ0NDEzNDU0IC0+IC0xMC43MDAyNTkxOTQ2MzIzMzk5ODAyNjY1NTkyMjQ0NDcyMTIyNjAxMTUwMjE2Mzc2MjYgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9MzQsIHdpdGhpbiAwLTk5OTkKK1ByZWNpc2lvbjogMzQKK2xvZ3gyMjAxIGxvZzEwIDEuNTIyNTEzMjAzODg5NzE0MTc5MDg4MzI3MzI4ODY0MTgzICAtPiAwLjE4MjU2MTA2NzcwOTg4OTYyNTA0OTY2NTEzMzA0OTIxMDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwMiBsb2cxMCAwLjE3MTEyMzc3NDc2OTcxNzMxNjE1NDA4MDg4ODkzMDQwNCAgLT4gLTAuNzY2Njg5NjQ4MzU0ODQ2MjU4MjQ2MTg5ODA5Mjc2NDQwOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjAzIGxvZzEwIDAuMDAwMDAwMDk5NzQ2NzIzNjI1MTcxNDI4MzEwNDk2MzgzOCAtPiAtNy4wMDExMDEzNjA2NTI1MTgyNzQyNzE1NjkwMTAzMTIxMTUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwNCBsb2cxMCAwLjAwMDg4NTYxMDM2MjQxMjI0Nzk3Njk2NDc1NDM0Njg2MzMgLT4gLTMuMDUyNzU3MzEwNDc2MDcwODkxODMwNDkwMzI3MTM4MTkwIEluZXhhY3QgUm91bmRlZAorbG9neDIyMDUgbG9nMTAgMS45MzgyNzQ4Njg3MzgwMzI5MzA3MDk0OTgyMjEyMzY3NTggIC0+IDAuMjg3NDE1MzY0ODI1OTQ0OTUyMDIwMTUzNjE3MTcxNDU5NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjA2IGxvZzEwIDQ3OS41NjY3ODQ3ODIzODI2NzEzMDgyNjEzNDQ1MDEwMDk3ICAtPiAyLjY4MDg0OTA5NTg1MDM2MTA2ODcwOTE2NTE1NzI4NjQzNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjA3IGxvZzEwIDg4NTYuMTM2NTk5MTc4ODIwMjAyMTQxODIzMTU3MzM2ODA0ICAtPiAzLjk0NzI0NDMwNjU4NDc2NzEwMTQ4MDQ1NDI2MTk1MDU1OSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjA4IGxvZzEwIDAuMDAwMDkxMTAyNjMxODgwMTkwMzk4MjY0Mjg3MTM0NDg1OCAtPiAtNC4wNDA0NjkwNzY0MzQ5NzkzOTg0Mzg2MTc0NjQwMzM4MjYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwOSBsb2cxMCAwLjAwMDAwMDAwMDAwMTcyNzExMTI2NTA0Mjc0MTQ3MzI2MzAgLT4gLTExLjc2MjY3OTY4MzE0MDM4NzQ4OTk1MTc4MjEyNjU0OTIxIEluZXhhY3QgUm91bmRlZAorbG9neDIyMTAgbG9nMTAgNi45NjI2MDUzNzAwNzg4ODU2NDc2Mzk1MDM1NDgyMjk2OTUgIC0+IDAuODQyNzcxNzgwNzIwMDMyMjM1MjY4NjM5NjkyNTk5MjI1MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjExIGxvZzEwIDAuMzM1NDgwNDQyODk5Mjc5MzEzMjg1NTkyMzU0MTY5Mjc4MSAtPiAtMC40NzQzMzI3OTIzMDEyMTU5MTcwOTY3NjM2MDcwODQ0ODM0IEluZXhhY3QgUm91bmRlZAorbG9neDIyMTIgbG9nMTAgMi4wNzk4NjQyNTc0NzQ4NTkwMDgyNTIxNjU4MzY2NjM1MDQgIC0+IDAuMzE4MDM0OTkxNjE5ODA1OTA0NjgxMjUwNjc0MTM4ODg1NiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjEzIGxvZzEwIDI4MDUuNDc5NTI5MjkyOTM5NDk5MjIwMjc2OTg2NjIxOTg4ICAtPiAzLjQ0ODAwNzEwNDEzOTk3NDM0NDU2NTk3ODc4MDYyNDc0NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjE0IGxvZzEwIDY2LjQ1NzMxMTMzMDM0MTg3Mzc0NTU3MDI4NTM3MjEzOTQ5ICAtPiAxLjgyMjU0Mjc2NzAwNTY0NDA0MTY2MTUyMDkzNjIyMzA4NiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjE1IGxvZzEwIDAuMDAwMDAwMTIwNjUyMTI2MTc2MjY4MTczODI3NDgyMjgzNSAtPiAtNi45MTg0NjUwMjAzOTAyMTY5Njk1NjE0OTQ3NTU3NjczMTggSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxNiBsb2cxMCAwLjAwMDAwMDAwMDE4ODQ4OTE5MTYyNjQ0MDExNjA0NzIzODEgLT4gLTkuNzI0NzEzNTQ4MTE5MDY1Mzg2MDkxOTMzMDA3NTI4NjMzIEluZXhhY3QgUm91bmRlZAorbG9neDIyMTcgbG9nMTAgMC4wMDAwMDE1NDY3Mjc5NTUxNzI2MzI2NTgxMzE0NTgyNzU5IC0+IC01LjgxMDU4NjA2NTA3MDQzNTM4Mzc1NTc1OTUxNDYwODczOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjE4IGxvZzEwIDAuMDA5MDc3NjMxNjcyODA2ODU4Njc0NDYzMzkxNDEzNTk1MiAtPiAtMi4wNDIwMjc0NDI4NDM3NDU4ODQ1MDMyODA5NTQzOTAxMTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxOSBsb2cxMCAwLjAwMDAwMDAwMDAwMjQ1NDExMDY1Mjg3MTMzOTM3NDAwMzAgLT4gLTExLjYxMDEwNTg1OTM1NjM1NzEzMDkwMTE5MTU2MDY5NDc5IEluZXhhY3QgUm91bmRlZAorbG9neDIyMjAgbG9nMTAgMTQuMTI5MzY4NzkzODU4NjM0MTAwODEwODc3NTA2NDU4NTYgIC0+IDEuMTUwMTIyNzYwODk1NDY2OTg5ODQxMDU3Mzg1NzQyNjYyIEluZXhhY3QgUm91bmRlZAorbG9neDIyMjEgbG9nMTAgMC4wMDAwMDM2OTEyNDgxODMxMzkyOTIyOTIyNjQ3MjMxMzkyIC0+IC01LjQzMjgyNjc1Mzc4OTg5MjI4MzU1NjIxMTM4MDgyNDIwMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjIyIGxvZzEwIDAuMDAwMDAwMDAwNDA2NzQ3NzUyNTQyMDQyNDI3MDEzODczNCAtPiAtOS4zOTA2NzQ4MzgwNTAwNzMxMjI4NTc4NjgwMTI0NzUwNjAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyMyBsb2cxMCA3MDgwLjEyMjU2MjcwNTM5OTc0NDk2OTMxOTU4OTgwNjE5NCAgLT4gMy44NTAwNDA3NzU3NDcxMDMzMTg3MjQzMzAwNDc1NDY5MTYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyNCBsb2cxMCAyNjEuMzQ5MTQxMTM2MzY3OTIwOTE3NTUyNDc5MDI1NTcyNSAgLT4gMi40MTcyMjEwNzcyMjc1MzYzMTk2NTU2OTk1MTc1MzA4NTUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyNSBsb2cxMCAwMDMuOTk0NTU4MTQ0OTkxNTI0MDA5NDcyODM4MDA0MTQ5NCAgLT4gMC42MDE0Njg3NDcxNTMxOTg4MjYwODIzMDY2OTk3ODQ1NjkxIEluZXhhY3QgUm91bmRlZAorbG9neDIyMjYgbG9nMTAgMC4wMDAwMDAwMDAwNTgzNTQ5MTY0NTg4NDk1MjA2NzY3ODQwIC0+IC0xMC4yMzM5MjI1NDgzNDE4MjY3NzAyMzIzMTcxMzUxOTM0MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjI3IGxvZzEwIDk1NjcuOTYxODMyNjA3MjQwMjc4MzQyNzYxMDg4NDg3NDg0ICAtPiAzLjk4MDgxOTQzNDIxMTEwNzYzMTU2OTM4NjE0NzAxNjM2OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjI4IGxvZzEwIDA2LjI2NTkyOTc5MTYwMzQyOTcyNzc3MjE5ODI4ODY3MDMzICAtPiAwLjc5Njk4NTUyNDM5NjYyMjE0MDg1OTUwMjQwMTI1NzQ3MjkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyOSBsb2cxMCAwLjAwMDAwMDAwMDA1ODk4NDcwNDY1OTgwNjcyNzMyODczMTkgLT4gLTEwLjIyOTI2MDU5MDc4MjA2MjE4NzE3NzU1MjUzNTgyOTA3IEluZXhhY3QgUm91bmRlZAorbG9neDIyMzAgbG9nMTAgNTY3LjkzODg2NDgyMzU1ODkyMDQ3Njk0NDI4NjM3MjQ5OTcgIC0+IDIuNzU0MzAxNTg5MDU4MzEzNTc2NDcyMzgwMjYyOTA3NjM4IEluZXhhY3QgUm91bmRlZAorbG9neDIyMzEgbG9nMTAgMDM5Ljc3OTAzMjU0ODAwMzc3Nzg5MTgxNjIyNjQ4ODM0MTUgIC0+IDEuNTk5NjU0MjE2NTkyMDE5MTk5NjM5Mjg1MzA4OTk3ODg2IEluZXhhY3QgUm91bmRlZAorbG9neDIyMzIgbG9nMTAgMC4wMDAwMDAwMDA1MTIzOTUxOTIxODk0MTYyMTQ5ODE3MjA3IC0+IC05LjI5MDM5NDk1Mzg5ODg2MjY5NDg0NzMyNzEzNzI0MjY5MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjMzIGxvZzEwIDAuMDAwMDAwMDAwMDAzODUwMDk5OTcyMzYzNjkwNDI3NjcyMyAtPiAtMTEuNDE0NTI3OTkzMzc5MjQwNTYxODY4NjczMjQ4NTQ2OTEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIzNCBsb2cxMCAwLjAwMDY3MjY1MDA2NTg5Nzc3NTk4MjU2MTY1Mzc5MzU4NjQgLT4gLTMuMTcyMjEwODEwOTIyNzY4NzI1Njg3NjcxODQ5NDIxNzkyIEluZXhhY3QgUm91bmRlZAorbG9neDIyMzUgbG9nMTAgMjYwLjI0MDAyNTA0NzU5Njc1Mjg0Mjk5NDM3NzkxMjY1MDcgIC0+IDIuNDE1Mzc0MDkyMDczNzk5MjA0MjM2ODAxMzgzMDcwMDY0IEluZXhhY3QgUm91bmRlZAorbG9neDIyMzYgbG9nMTAgMC4wMDAwMDAwMDA2MTAxOTQyMzM5Mzg1MTAyNTg1MDQyNTQ4IC0+IC05LjIxNDUzMTkwMDU2MjA0NjU1NzE5MTI2MTIyNjYzMjUwOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjM3IGxvZzEwIDAuMDAwMDAwMDAxMDg0Njg2NzUwMTM4Mjc0Njc2MDA2NjU1NyAtPiAtOC45NjQ2OTU2NjQ4ODMyODI0MDYzNTk4NzQyNDIzODcyMzYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIzOCBsb2cxMCA2MC4yNDA3ODM3NTU2ODgxNDc2OTAxMDMzMzcxMTUwOTkyOCAgLT4gMS43Nzk4OTA2MTM1NjcwODQyNTMxNjgzNzMyNjY2NDg5MjIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIzOSBsb2cxMCAwLjAwMTIwNTg3Mzg3MTE3NTc2NjkzMzc2MDAyNTI5ODYwOTMgLT4gLTIuOTE4Njk4MTE1MDEyNjA1OTE1NzUzNzI4MjIwODk2MDEwIEluZXhhY3QgUm91bmRlZAorbG9neDIyNDAgbG9nMTAgMjMwLjk0NTA5MzAxOTc4NDE2MDA2MTE1MDMwOTUxODU2MDAgIC0+IDIuMzYzNTA4NzM5MDU2ODIyODQ2NzQyOTQyNTk5NjI4OTY2IEluZXhhY3QgUm91bmRlZAorCistLSBQPTE2LCB3aXRoaW4gMC05OTkKK1ByZWNpc2lvbjogMTYKK2xvZ3gyMTAxIGxvZzEwIDAuMDA3MjA2NzExOTYwNTE4NCAtPiAtMi4xNDIyNjI4MzU1NzMwMzggSW5leGFjdCBSb3VuZGVkCitsb2d4MjEwMiBsb2cxMCA1MDMuNjgyODQ4MjIyNjYyNCAgLT4gMi43MDIxNTcxNjIxOTU2NTIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEwMyBsb2cxMCA2NC45NjA3NDQ0NzgyMTgxNSAgLT4gMS44MTI2NTA5OTM0NjQxNzQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEwNCBsb2cxMCA0OC43NTQwODU5NzQ2NzI0NiAgLT4gMS42ODgwMTEwMTg4NDI2MDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEwNSBsb2cxMCAwLjAzMjkwMDk4MzkyNjk1ODcgLT4gLTEuNDgyNzkxMTEzOTc1MjgwIEluZXhhY3QgUm91bmRlZAorbG9neDIxMDYgbG9nMTAgMjIzLjUzMjA0MTUwNjA2MzMgIC0+IDIuMzQ5MzM5Nzg0NTIzNDEwIEluZXhhY3QgUm91bmRlZAorbG9neDIxMDcgbG9nMTAgNzMuMTI3NjUwMDIyOTIxOTQgIC0+IDEuODY0MDgxNjE3NDc2MjY4IEluZXhhY3QgUm91bmRlZAorbG9neDIxMDggbG9nMTAgNDg3LjM3NDkzNzgzNTg1MDkgIC0+IDIuNjg3ODYzMTkyODAyMjUyIEluZXhhY3QgUm91bmRlZAorbG9neDIxMDkgbG9nMTAgMC4wMDAwMDE5NjcxOTg3NjIxIC0+IC01LjcwNjE1MTc1NzU1NzkyNiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTEwIGxvZzEwIDAuMDU3MDY4MDY2MDYwOTc4NCAtPiAtMS4yNDM2MDY4NDQ2OTc4NzMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExMSBsb2cxMCAzMy4xMDMxMTYzODc4ODk5OCAgLT4gMS41MTk4Njg4ODA5NzY3NzMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExMiBsb2cxMCAwLjA2ODczODI2OTkxODcwNzcgLT4gLTEuMTYyODAxNDAyODY4MTg1IEluZXhhY3QgUm91bmRlZAorbG9neDIxMTMgbG9nMTAgMjU4Ljk0MTYxOTM2MjY0ODQgIC0+IDIuNDEzMjAxODU5NjU0MTQ1IEluZXhhY3QgUm91bmRlZAorbG9neDIxMTQgbG9nMTAgMC4wMDA1MzA2MTAwMTM2NzM2IC0+IC0zLjI3NTIyNDU1ODI2OTcyNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTE1IGxvZzEwIDY1Ljc4NDkwMzkzNDA4NTcyICAtPiAxLjgxODEyNjI0NDgyNTEwOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTE2IGxvZzEwIDUwNC4yMzI4ODQyMDczNTEwICAtPiAyLjcwMjYzMTE2NTM0Njk1OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTE3IGxvZzEwIDkuNDE3NDMyNzU1ODE1MDI3ICAtPiAwLjk3MzkzMjUyNzg1MjQ1MDMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExOCBsb2cxMCAwMDYuNzA1NDgzNTM1NTQ5OCAgLT4gMC44MjY0MzAxMDA0OTQ3NjQwIEluZXhhY3QgUm91bmRlZAorbG9neDIxMTkgbG9nMTAgMC4wOTE3MDEyMjcyMzYzOTE1IC0+IC0xLjAzNzYyNDg1MjEzMzM5OSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTIwIGxvZzEwIDUuOTU5NDA0Mzg1MjQ0OTIxICAtPiAwLjc3NTIwMjg1NjE5NTM0MDEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyMSBsb2cxMCAwLjAwMDEyMDk3NTkxNDg0ODYgLT4gLTMuOTE3MzAxMDg0OTY4OTAzIEluZXhhY3QgUm91bmRlZAorbG9neDIxMjIgbG9nMTAgMC4wMDA0NzA2MTEyMTM5ODM4IC0+IC0zLjMyNzMzNzcyODQyODAzOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTIzIGxvZzEwIDAuMDA2OTcwMDQ1NzM3NzA0NiAtPiAtMi4xNTY3NjQzNzIwMzU3NzEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyNCBsb2cxMCAwLjUxNTU1ODQ1Njk4NTI2MTkgLT4gLTAuMjg3NzIyMDg0NzgwNTAyNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTI1IGxvZzEwIDg4LjA2MDA1ODg1NjA3NDE0ICAtPiAxLjk0NDc3ODk3MTM4OTkxMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTI2IGxvZzEwIDAuMDQ0ODI0MDAzODIxOTg2NiAtPiAtMS4zNDg0ODkzNTM1MDk3MDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyNyBsb2cxMCAzLjQxOTYyMjQ4NDA1OTU2NSAgLT4gMC41MzM5NzgxNjM5MTAxMTQ1IEluZXhhY3QgUm91bmRlZAorbG9neDIxMjggbG9nMTAgNS4xNzExMjMzNTM4NTg3MjEgIC0+IDAuNzEzNTg0ODk3NzE0Mjg1NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTI5IGxvZzEwIDAuMDAwMjEzMzE4ODMxOTgwNyAtPiAtMy42NzA5NzA4MDI5NDU4NzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzMCBsb2cxMCA0Ni4yMTA4NjcwMzEzNjk2NiAgLT4gMS42NjQ3NDQxMTcwNDUxNDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzMSBsb2cxMCAwLjAwMDA2MzEwNTM3MTQ0MTUgLT4gLTQuMTk5OTMzNjcyNjM5ODgwIEluZXhhY3QgUm91bmRlZAorbG9neDIxMzIgbG9nMTAgNzguNjYwMTkxOTY4NzA2OTggIC0+IDEuODk1NzU1MDAxOTYyNDY5IEluZXhhY3QgUm91bmRlZAorbG9neDIxMzMgbG9nMTAgMC4wMDA3MTUyMjc4MzUxMTg4IC0+IC0zLjE0NTU1NTU5MjA4MjI5NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTM0IGxvZzEwIDQ1LjUyNTA5ODE5OTI4NTM2ICAtPiAxLjY1ODI1MDg5MTI1Njg5MiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTM1IGxvZzEwIDAuMDAwMDcwMzIyNzc5NTc0MCAtPiAtNC4xNTI5MDM5NzE2OTcxODMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzNiBsb2cxMCAyNi4yNDQzODY0MTQyNjY2OSAgLT4gMS40MTkwMzY0MjM1NTA1OTkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzNyBsb2cxMCAwLjAwMDAwNDQ2NTQ4Mjk1MzUgLT4gLTUuMzUwMTMxNTY0MTY2ODE3IEluZXhhY3QgUm91bmRlZAorbG9neDIxMzggbG9nMTAgMC43MzYwNzAyNzMzMDYyNTI5IC0+IC0wLjEzMzA4MDcyMTE4OTM2MTEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzOSBsb2cxMCA4LjQxNzA1OTE3NjQ2OTY1NSAgLT4gMC45MjUxNjAzODA1MTEyNzc4IEluZXhhY3QgUm91bmRlZAorbG9neDIxNDAgbG9nMTAgMC4wMDAyOTI2NTcwNzY3OTY4IC0+IC0zLjUzMzY0MDk2OTY2NDgxOCBJbmV4YWN0IFJvdW5kZWQKKworLS0gUD03LCB3aXRoaW4gMC05OQorUHJlY2lzaW9uOiA3Citsb2d4MjAwMSBsb2cxMCA1Ny4yNjA4OSAgLT4gMS43NTc4NTggSW5leGFjdCBSb3VuZGVkCitsb2d4MjAwMiBsb2cxMCAwLjA1NzU0MjEgLT4gLTEuMjQwMDE0IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDMgbG9nMTAgMC41OTE4NDY1IC0+IC0wLjIyNzc5MDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAwNCBsb2cxMCAwLjAwNjg3NzYgLT4gLTIuMTYyNTYzIEluZXhhY3QgUm91bmRlZAorbG9neDIwMDUgbG9nMTAgMC4wMDY2ODMzIC0+IC0yLjE3NTAwOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDA2IGxvZzEwIDkuOTI2OTYzICAtPiAwLjk5NjgxNjQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAwNyBsb2cxMCAwLjAwNDE4NTIgLT4gLTIuMzc4Mjg0IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDggbG9nMTAgODQuMTU0MTIgIC0+IDEuOTI1MDc1IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDkgbG9nMTAgMi40NjY4NTYgIC0+IDAuMzkyMTQzOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDEwIGxvZzEwIDAuMDA1ODA0NyAtPiAtMi4yMzYyMjAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxMSBsb2cxMCA5Ljg4NTE1NCAgLT4gMC45OTQ5ODM0IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTIgbG9nMTAgMC42NjY3NjU0IC0+IC0wLjE3NjAyNjkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxMyBsb2cxMCAzNC42NTczNiAgLT4gMS41Mzk3OTUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxNCBsb2cxMCAwLjAwMjY4ODQgLT4gLTIuNTcwNTA2IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTUgbG9nMTAgMC4wNDMyNzY3IC0+IC0xLjM2Mzc0NiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDE2IGxvZzEwIDY2LjAxNDA3ICAtPiAxLjgxOTYzNyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDE3IGxvZzEwIDAuMDA3MDU3MiAtPiAtMi4xNTEzNjggSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxOCBsb2cxMCAwLjA3MzE2MTMgLT4gLTEuMTM1NzE5IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTkgbG9nMTAgOS44Mzg5ODMgIC0+IDAuOTkyOTUwMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDIwIGxvZzEwIDE1Ljg5Njk2ICAtPiAxLjIwMTMxNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDIxIGxvZzEwIDguNDU5MjQ3ICAtPiAwLjkyNzMzMTcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyMiBsb2cxMCAwLjAwMTA4NzMgLT4gLTIuOTYzNjUxIEluZXhhY3QgUm91bmRlZAorbG9neDIwMjMgbG9nMTAgMC42NDk4NjE5IC0+IC0wLjE4NzE3ODkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyNCBsb2cxMCAwLjA4NDcwMDggLT4gLTEuMDcyMTEyIEluZXhhY3QgUm91bmRlZAorbG9neDIwMjUgbG9nMTAgMC4wMDc1NDg5IC0+IC0yLjEyMjExNiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDI2IGxvZzEwIDUxLjExMTUyICAtPiAxLjcwODUxOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDI3IGxvZzEwIDAuNzIzMzg2NiAtPiAtMC4xNDA2Mjk1IEluZXhhY3QgUm91bmRlZAorbG9neDIwMjggbG9nMTAgMi4yNTQ3MjEgIC0+IDAuMzUzMDkyOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDI5IGxvZzEwIDYuNTY4NDQ0ICAtPiAwLjgxNzQ2MjUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzMCBsb2cxMCA4My43MjYzOSAgLT4gMS45MjI4NjIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzMSBsb2cxMCA2LjcyMDU4NSAgLT4gMC44Mjc0MDcxIEluZXhhY3QgUm91bmRlZAorbG9neDIwMzIgbG9nMTAgODcuOTAzNjYgIC0+IDEuOTQ0MDA3IEluZXhhY3QgUm91bmRlZAorbG9neDIwMzMgbG9nMTAgMC4wNDMzMzI0IC0+IC0xLjM2MzE4NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDM0IGxvZzEwIDM0LjYzOTEyICAtPiAxLjUzOTU2NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDM1IGxvZzEwIDAuODA4OTA1OSAtPiAtMC4wOTIxMDIwMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDM2IGxvZzEwIDcuNzkzNDA1ICAtPiAwLjg5MTcyNzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzNyBsb2cxMCAwLjAwNDE3NTcgLT4gLTIuMzc5MjcxIEluZXhhY3QgUm91bmRlZAorbG9neDIwMzggbG9nMTAgNy4xMzU0MTcgIC0+IDAuODUzNDE5NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDM5IGxvZzEwIDEyLjQ5NTcwICAtPiAxLjA5Njc2MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDQwIGxvZzEwIDYuMzU2Mjc2ICAtPiAwLjgwMzIwMjcgSW5leGFjdCBSb3VuZGVkCisKKy0tLS0tLS0tCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNwZWNpYWwgdmFsdWVzCitsb2d4ODIwICBsb2cxMCAgIEluZmluaXR5IC0+ICAgSW5maW5pdHkKK2xvZ3g4MjEgIGxvZzEwICAgMCAgICAgICAgLT4gIC1JbmZpbml0eQorbG9neDgyMiAgbG9nMTAgICBOYU4gICAgICAtPiAgIE5hTgorbG9neDgyMyAgbG9nMTAgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2xvZ3g4MjQgIGxvZzEwICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uCitsb2d4ODI1ICBsb2cxMCAgIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbgorbG9neDgyNiAgbG9nMTAgICBOYU40NTYgICAtPiAgIE5hTjQ1NgorbG9neDgyNyAgbG9nMTAgICAtTmFONjU0ICAtPiAgLU5hTjY1NAorbG9neDgyOCAgbG9nMTAgICBOYU4xICAgICAtPiAgIE5hTjEKKworCistLSBJbnZhbGlkIG9wZXJhdGlvbnMgZHVlIHRvIHJlc3RyaWN0aW9ucworLS0gW25leHQgdHdvIHByb2JhYmx5IHNraXBwZWQgYnkgbW9zdCB0ZXN0IGhhcm5lc3Nlc10KK3ByZWNpc2lvbjogMTAwMDAwMDAwCitsb2d4OTAxICBsb2cxMCAxIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKK3ByZWNpc2lvbjogIDk5OTk5OTk5Citsb2d4OTAyICBsb2cxMCAwIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKKworcHJlY2lzaW9uOiA5CittYXhFeHBvbmVudDogICAxMDAwMDAwCittaW5FeHBvbmVudDogICAtOTk5OTk5Citsb2d4OTAzICBsb2cxMCAxICAgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAgLTk5OTk5OQorbG9neDkwNCAgbG9nMTAgMCAtPiAgLUluZmluaXR5CittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogIC0xMDAwMDAwCitsb2d4OTA1ICBsb2cxMCAxICAgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAgLTk5OTk5OAorbG9neDkwNiAgbG9nMTAgMCAtPiAgLUluZmluaXR5CisKKy0tIE51bGwgdGVzdAorbG9neDkwMCAgbG9nMTAgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2diLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nYi5kZWNUZXN0CmluZGV4IGZmNDIwZDAuLjhiNzkwMDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2diLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xvZ2IuZGVjVGVzdApAQCAtMSwxODggKzEsMTg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBsb2diLmRlY1Rlc3QgLS0gcmV0dXJuIGludGVncmFsIGFkanVzdGVkIGV4cG9uZW50IGFzIHBlciA3NTRyICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBlbXBoYXNpc2VzIHRoZSB0ZXN0aW5nIG9mIG5vdGFibGUgY2FzZXMsIGFzIHRoZXkgd2lsbCBvZnRlbg0KLS0tIGhhdmUgdW51c3VhbCBwYXRocyAoZXNwZWNpYWxseSB0aGUgMTAqKm4gcmVzdWx0cykuDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotDQotLS0gYmFzaWNzICYgZXhhbXBsZXMNCi1wcmVjaXNpb246ICAgOQ0KLWxvZ2J4MDAxIGxvZ2IgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWxvZ2J4MDAyIGxvZ2IgIDFFLTk5OSAgICAgICAgICAgIC0+IC05OTkNCi1sb2dieDAwMyBsb2diICA5RS05OTkgICAgICAgICAgICAtPiAtOTk5DQotbG9nYngwMDQgbG9nYiAgMC4wMDEgICAgICAgICAgICAgLT4gLTMNCi1sb2dieDAwNSBsb2diICAwLjAzICAgICAgICAgICAgICAtPiAtMg0KLWxvZ2J4MDA2IGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAwDQotbG9nYngwMDcgbG9nYiAgMiAgICAgICAgICAgICAgICAgLT4gIDANCi1sb2dieDAwOCBsb2diICAyLjUgICAgICAgICAgICAgICAtPiAgMA0KLWxvZ2J4MDA5IGxvZ2IgIDIuNTAgICAgICAgICAgICAgIC0+ICAwDQotbG9nYngwMTAgbG9nYiAgMTAgICAgICAgICAgICAgICAgLT4gIDENCi1sb2dieDAxMSBsb2diICA3MCAgICAgICAgICAgICAgICAtPiAgMQ0KLWxvZ2J4MDEyIGxvZ2IgIDEwMCAgICAgICAgICAgICAgIC0+ICAyDQotbG9nYngwMTMgbG9nYiAgMjUwICAgICAgICAgICAgICAgLT4gIDINCi1sb2dieDAxNCBsb2diICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCi0NCi0tLSBuZWdhdGl2ZXMgYXJlIHRyZWF0ZWQgYXMgcG9zaXRpdmVzDQotbG9nYngwMjEgbG9nYiAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotbG9nYngwMjIgbG9nYiAtMUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQ0KLWxvZ2J4MDIzIGxvZ2IgLTlFLTk5OSAgICAgICAgICAgIC0+IC05OTkNCi1sb2dieDAyNCBsb2diIC0wLjAwMSAgICAgICAgICAgICAtPiAtMw0KLWxvZ2J4MDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwDQotbG9nYngwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDANCi1sb2dieDAyNyBsb2diIC0xMCAgICAgICAgICAgICAgICAtPiAgMQ0KLWxvZ2J4MDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxDQotbG9nYngwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDINCi1sb2dieDAzMCBsb2diIC0xMDAwMDAwMDAgICAgICAgICAtPiAgOA0KLWxvZ2J4MDMxIGxvZ2IgLUluZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KLQ0KLS0tIHplcm9zDQotbG9nYngxMTEgbG9nYiAgICAgICAgICAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotbG9nYngxMTIgbG9nYiAgICAgICAgIC0wICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotbG9nYngxMTMgbG9nYiAgICAgICAwRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotbG9nYngxMTQgbG9nYiAgICAgIC0wRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotbG9nYngxMTUgbG9nYiAgICAgMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotbG9nYngxMTYgbG9nYiAgICAtMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotbG9nYngxMTcgbG9nYiAgICAgIDBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotbG9nYngxMTggbG9nYiAgICAgLTBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1sb2dieDEyMSBsb2diICAgMjY4MjY4MjY4ICAgICAgICAtPiA4DQotbG9nYngxMjIgbG9nYiAgLTI2ODI2ODI2OCAgICAgICAgLT4gOA0KLWxvZ2J4MTIzIGxvZ2IgICAxMzQxMzQxMzQgICAgICAgIC0+IDgNCi1sb2dieDEyNCBsb2diICAtMTM0MTM0MTM0ICAgICAgICAtPiA4DQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1sb2dieDEzMSBsb2diICA5Ljk5OTk5OTk5RSs5OTkgICAtPiA5OTkNCi1sb2dieDEzMiBsb2diICAxRS05OTkgICAgICAgICAgICAtPiAtOTk5DQotbG9nYngxMzMgbG9nYiAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gLTk5OQ0KLWxvZ2J4MTM0IGxvZ2IgIDFFLTEwMDcgICAgICAgICAgIC0+IC0xMDA3DQotDQotbG9nYngxMzUgbG9nYiAgLTFFLTEwMDcgICAgICAgICAgLT4gLTEwMDcNCi1sb2dieDEzNiBsb2diICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtOTk5DQotbG9nYngxMzcgbG9nYiAgLTFFLTk5OSAgICAgICAgICAgLT4gLTk5OQ0KLWxvZ2J4MTM4IGxvZ2IgIC05Ljk5OTk5OTk5RSs5OTkgIC0+ICA5OTkNCi0NCi0tLSBvbmVzDQotbG9nYngwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMA0KLWxvZ2J4MDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDANCi1sb2dieDAwNjMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwDQotbG9nYngwMDY0IGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMA0KLQ0KLS0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwDQotbG9nYngxMTAwIGxvZ2IgMSAgICAgICAgICAgICAtPiAwDQotbG9nYngxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxDQotbG9nYngxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyDQotbG9nYngxMTAzIGxvZ2IgMTAwMCAgICAgICAgICAtPiAzDQotbG9nYngxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0DQotbG9nYngxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1DQotbG9nYngxMTA2IGxvZ2IgMTAwMDAwMCAgICAgICAtPiA2DQotbG9nYngxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3DQotbG9nYngxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4DQotbG9nYngxMTA5IGxvZ2IgMTAwMDAwMDAwMCAgICAtPiA5DQotbG9nYngxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMA0KLWxvZ2J4MTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTENCi1sb2dieDExMTIgbG9nYiAxMDAwMDAwMDAwMDAwIC0+IDEyDQotbG9nYngxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTENCi1sb2dieDExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwDQotbG9nYngxMTE1IGxvZ2IgMC4wMDAwMDAwMDEgLT4gLTkNCi1sb2dieDExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04DQotbG9nYngxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03DQotbG9nYngxMTE4IGxvZ2IgMC4wMDAwMDEgLT4gLTYNCi1sb2dieDExMTkgbG9nYiAwLjAwMDAxIC0+IC01DQotbG9nYngxMTIwIGxvZ2IgMC4wMDAxIC0+IC00DQotbG9nYngxMTIxIGxvZ2IgMC4wMDEgLT4gLTMNCi1sb2dieDExMjIgbG9nYiAwLjAxIC0+IC0yDQotbG9nYngxMTIzIGxvZ2IgMC4xIC0+IC0xDQotbG9nYngxMTI0IGxvZ2IgMUUtOTkgIC0+IC05OQ0KLWxvZ2J4MTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwDQotbG9nYngxMTI2IGxvZ2IgMUUtMzgzIC0+IC0zODMNCi1sb2dieDExMjcgbG9nYiAxRS05OTkgLT4gLTk5OQ0KLQ0KLS0tIHN1Z2dlc3Rpb25zIGZyb20gSWxhbiBOZWhhbWENCi1sb2dieDE0MDAgbG9nYiAxMEUtMyAgICAtPiAtMg0KLWxvZ2J4MTQwMSBsb2diIDEwRS0yICAgIC0+IC0xDQotbG9nYngxNDAyIGxvZ2IgMTAwRS0yICAgLT4gIDANCi1sb2dieDE0MDMgbG9nYiAxMDAwRS0yICAtPiAgMQ0KLWxvZ2J4MTQwNCBsb2diIDEwMDAwRS0yIC0+ICAyDQotbG9nYngxNDA1IGxvZ2IgMTBFLTEgICAgLT4gIDANCi1sb2dieDE0MDYgbG9nYiAxMDBFLTEgICAtPiAgMQ0KLWxvZ2J4MTQwNyBsb2diIDEwMDBFLTEgIC0+ICAyDQotbG9nYngxNDA4IGxvZ2IgMTAwMDBFLTEgLT4gIDMNCi1sb2dieDE0MDkgbG9nYiAxMEUwICAgICAtPiAgMQ0KLWxvZ2J4MTQxMCBsb2diIDEwMEUwICAgIC0+ICAyDQotbG9nYngxNDExIGxvZ2IgMTAwMEUwICAgLT4gIDMNCi1sb2dieDE0MTIgbG9nYiAxMDAwMEUwICAtPiAgNA0KLWxvZ2J4MTQxMyBsb2diIDEwRTEgICAgIC0+ICAyDQotbG9nYngxNDE0IGxvZ2IgMTAwRTEgICAgLT4gIDMNCi1sb2dieDE0MTUgbG9nYiAxMDAwRTEgICAtPiAgNA0KLWxvZ2J4MTQxNiBsb2diIDEwMDAwRTEgIC0+ICA1DQotbG9nYngxNDE3IGxvZ2IgMTBFMiAgICAgLT4gIDMNCi1sb2dieDE0MTggbG9nYiAxMDBFMiAgICAtPiAgNA0KLWxvZ2J4MTQxOSBsb2diIDEwMDBFMiAgIC0+ICA1DQotbG9nYngxNDIwIGxvZ2IgMTAwMDBFMiAgLT4gIDYNCi0NCi0tLSBpbmV4YWN0cw0KLXByZWNpc2lvbjogMg0KLWxvZ2J4MTUwMCBsb2diIDEwMDAwRTIgICAgICAgLT4gIDYNCi1sb2dieDE1MDEgbG9nYiAxRSs5OSAgICAgICAgIC0+ICA5OQ0KLWxvZ2J4MTUwMiBsb2diIDFFLTk5ICAgICAgICAgLT4gLTk5DQotbG9nYngxNTAzIGxvZ2IgMUUrMTAwICAgICAgICAtPiAgMS4wRSsyICBSb3VuZGVkDQotbG9nYngxNTA0IGxvZ2IgMUUrOTk5ICAgICAgICAtPiAgMS4wRSszICBJbmV4YWN0IFJvdW5kZWQNCi1sb2dieDE1MDUgbG9nYiAxRS0xMDAgICAgICAgIC0+IC0xLjBFKzIgIFJvdW5kZWQNCi1sb2dieDE1MDYgbG9nYiAxRS05OTkgICAgICAgIC0+IC0xLjBFKzMgIEluZXhhY3QgUm91bmRlZA0KLWxvZ2J4MTUwNyBsb2diIDFFLTExMTEgICAgICAgLT4gLTEuMUUrMyAgSW5leGFjdCBSb3VuZGVkDQotbG9nYngxNTA4IGxvZ2IgMUUtMzMzMyAgICAgICAtPiAtMy4zRSszICBJbmV4YWN0IFJvdW5kZWQNCi1sb2dieDE1MDkgbG9nYiAxRS02NjY2ICAgICAgIC0+IC02LjdFKzMgIEluZXhhY3QgUm91bmRlZA0KLWxvZ2J4MTUxMCBsb2diIDFFKzk5OTk5OTk5OSAgLT4gIDEuMEUrOSAgSW5leGFjdCBSb3VuZGVkDQotbG9nYngxNTExIGxvZ2IgMUUtOTk5OTk5OTk5ICAtPiAtMS4wRSs5ICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDENCi1sb2dieDE1MTcgbG9nYiAxRS0xMTExICAgICAgIC0+IC0xRSszICAgIEluZXhhY3QgUm91bmRlZA0KLWxvZ2J4MTUxOCBsb2diIDFFLTMzMzMgICAgICAgLT4gLTNFKzMgICAgSW5leGFjdCBSb3VuZGVkDQotbG9nYngxNTE5IGxvZ2IgMUUtNjY2NiAgICAgICAtPiAtN0UrMyAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDgNCi1sb2dieDE1MjAgbG9nYiAxRSs5OTk5OTk5OTkgIC0+ICAxLjAwMDAwMDBFKzkgSW5leGFjdCBSb3VuZGVkDQotbG9nYngxNTIxIGxvZ2IgMUUtOTk5OTk5OTk5ICAtPiAtMS4wMDAwMDAwRSs5IEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogOQ0KLWxvZ2J4MTUyMyBsb2diIDFFKzk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OQ0KLWxvZ2J4MTUyNCBsb2diIDFFLTk5OTk5OTk5OSAgLT4gLTk5OTk5OTk5OQ0KLQ0KLS0tIHNwZWNpYWwgdmFsdWVzDQotcHJlY2lzaW9uOiA5DQotbG9nYng4MjAgIGxvZ2IgICBJbmZpbml0eSAtPiAgIEluZmluaXR5DQotbG9nYng4MjEgIGxvZ2IgIC1JbmZpbml0eSAtPiAgIEluZmluaXR5DQotbG9nYng4MjIgIGxvZ2IgICAwICAgICAgICAtPiAgLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1sb2dieDgyMyAgbG9nYiAgIE5hTiAgICAgIC0+ICAgTmFODQotbG9nYng4MjQgIGxvZ2IgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotbG9nYng4MjUgIGxvZ2IgICBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24NCi1sb2dieDgyNiAgbG9nYiAgIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWxvZ2J4ODI3ICBsb2diICAgTmFONDU2ICAgLT4gICBOYU40NTYNCi1sb2dieDgyOCAgbG9nYiAgIC1OYU42NTQgIC0+ICAtTmFONjU0DQotbG9nYng4MjkgIGxvZ2IgICBOYU4xICAgICAtPiAgIE5hTjENCi0NCi0tLSBOdWxsIHRlc3QNCi1sb2dieDkwMCAgbG9nYiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBsb2diLmRlY1Rlc3QgLS0gcmV0dXJuIGludGVncmFsIGFkanVzdGVkIGV4cG9uZW50IGFzIHBlciA3NTRyICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA5LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZW1waGFzaXNlcyB0aGUgdGVzdGluZyBvZiBub3RhYmxlIGNhc2VzLCBhcyB0aGV5IHdpbGwgb2Z0ZW4KKy0tIGhhdmUgdW51c3VhbCBwYXRocyAoZXNwZWNpYWxseSB0aGUgMTAqKm4gcmVzdWx0cykuCisKK2V4dGVuZGVkOiAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorCistLSBiYXNpY3MgJiBleGFtcGxlcworcHJlY2lzaW9uOiAgIDkKK2xvZ2J4MDAxIGxvZ2IgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngwMDIgbG9nYiAgMUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQorbG9nYngwMDMgbG9nYiAgOUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQorbG9nYngwMDQgbG9nYiAgMC4wMDEgICAgICAgICAgICAgLT4gLTMKK2xvZ2J4MDA1IGxvZ2IgIDAuMDMgICAgICAgICAgICAgIC0+IC0yCitsb2dieDAwNiBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgMAorbG9nYngwMDcgbG9nYiAgMiAgICAgICAgICAgICAgICAgLT4gIDAKK2xvZ2J4MDA4IGxvZ2IgIDIuNSAgICAgICAgICAgICAgIC0+ICAwCitsb2dieDAwOSBsb2diICAyLjUwICAgICAgICAgICAgICAtPiAgMAorbG9nYngwMTAgbG9nYiAgMTAgICAgICAgICAgICAgICAgLT4gIDEKK2xvZ2J4MDExIGxvZ2IgIDcwICAgICAgICAgICAgICAgIC0+ICAxCitsb2dieDAxMiBsb2diICAxMDAgICAgICAgICAgICAgICAtPiAgMgorbG9nYngwMTMgbG9nYiAgMjUwICAgICAgICAgICAgICAgLT4gIDIKK2xvZ2J4MDE0IGxvZ2IgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSBuZWdhdGl2ZXMgYXJlIHRyZWF0ZWQgYXMgcG9zaXRpdmVzCitsb2dieDAyMSBsb2diIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MDIyIGxvZ2IgLTFFLTk5OSAgICAgICAgICAgIC0+IC05OTkKK2xvZ2J4MDIzIGxvZ2IgLTlFLTk5OSAgICAgICAgICAgIC0+IC05OTkKK2xvZ2J4MDI0IGxvZ2IgLTAuMDAxICAgICAgICAgICAgIC0+IC0zCitsb2dieDAyNSBsb2diIC0xICAgICAgICAgICAgICAgICAtPiAgMAorbG9nYngwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDAKK2xvZ2J4MDI3IGxvZ2IgLTEwICAgICAgICAgICAgICAgIC0+ICAxCitsb2dieDAyOCBsb2diIC03MCAgICAgICAgICAgICAgICAtPiAgMQorbG9nYngwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDIKK2xvZ2J4MDMwIGxvZ2IgLTEwMDAwMDAwMCAgICAgICAgIC0+ICA4Citsb2dieDAzMSBsb2diIC1JbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gemVyb3MKK2xvZ2J4MTExIGxvZ2IgICAgICAgICAgMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngxMTIgbG9nYiAgICAgICAgIC0wICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDExMyBsb2diICAgICAgIDBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MTE0IGxvZ2IgICAgICAtMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngxMTUgbG9nYiAgICAgMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDExNiBsb2diICAgIC0wLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MTE3IGxvZ2IgICAgICAwRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngxMTggbG9nYiAgICAgLTBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitsb2dieDEyMSBsb2diICAgMjY4MjY4MjY4ICAgICAgICAtPiA4Citsb2dieDEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4Citsb2dieDEyMyBsb2diICAgMTM0MTM0MTM0ICAgICAgICAtPiA4Citsb2dieDEyNCBsb2diICAtMTM0MTM0MTM0ICAgICAgICAtPiA4CisKKy0tIE5tYXgsIE5taW4sIE50aW55Citsb2dieDEzMSBsb2diICA5Ljk5OTk5OTk5RSs5OTkgICAtPiA5OTkKK2xvZ2J4MTMyIGxvZ2IgIDFFLTk5OSAgICAgICAgICAgIC0+IC05OTkKK2xvZ2J4MTMzIGxvZ2IgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IC05OTkKK2xvZ2J4MTM0IGxvZ2IgIDFFLTEwMDcgICAgICAgICAgIC0+IC0xMDA3CisKK2xvZ2J4MTM1IGxvZ2IgIC0xRS0xMDA3ICAgICAgICAgIC0+IC0xMDA3Citsb2dieDEzNiBsb2diICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtOTk5Citsb2dieDEzNyBsb2diICAtMUUtOTk5ICAgICAgICAgICAtPiAtOTk5Citsb2dieDEzOCBsb2diICAtOS45OTk5OTk5OUUrOTk5ICAtPiAgOTk5CisKKy0tIG9uZXMKK2xvZ2J4MDA2MSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2xvZ2J4MDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKK2xvZ2J4MDA2MyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKK2xvZ2J4MDA2NCBsb2diICAxLjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKKworLS0gbm90YWJsZSBjYXNlcyAtLSBleGFjdCBwb3dlcnMgb2YgMTAKK2xvZ2J4MTEwMCBsb2diIDEgICAgICAgICAgICAgLT4gMAorbG9nYngxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxCitsb2dieDExMDIgbG9nYiAxMDAgICAgICAgICAgIC0+IDIKK2xvZ2J4MTEwMyBsb2diIDEwMDAgICAgICAgICAgLT4gMworbG9nYngxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0Citsb2dieDExMDUgbG9nYiAxMDAwMDAgICAgICAgIC0+IDUKK2xvZ2J4MTEwNiBsb2diIDEwMDAwMDAgICAgICAgLT4gNgorbG9nYngxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3Citsb2dieDExMDggbG9nYiAxMDAwMDAwMDAgICAgIC0+IDgKK2xvZ2J4MTEwOSBsb2diIDEwMDAwMDAwMDAgICAgLT4gOQorbG9nYngxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMAorbG9nYngxMTExIGxvZ2IgMTAwMDAwMDAwMDAwICAtPiAxMQorbG9nYngxMTEyIGxvZ2IgMTAwMDAwMDAwMDAwMCAtPiAxMgorbG9nYngxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTEKK2xvZ2J4MTExNCBsb2diIDAuMDAwMDAwMDAwMSAtPiAtMTAKK2xvZ2J4MTExNSBsb2diIDAuMDAwMDAwMDAxIC0+IC05Citsb2dieDExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04Citsb2dieDExMTcgbG9nYiAwLjAwMDAwMDEgLT4gLTcKK2xvZ2J4MTExOCBsb2diIDAuMDAwMDAxIC0+IC02Citsb2dieDExMTkgbG9nYiAwLjAwMDAxIC0+IC01Citsb2dieDExMjAgbG9nYiAwLjAwMDEgLT4gLTQKK2xvZ2J4MTEyMSBsb2diIDAuMDAxIC0+IC0zCitsb2dieDExMjIgbG9nYiAwLjAxIC0+IC0yCitsb2dieDExMjMgbG9nYiAwLjEgLT4gLTEKK2xvZ2J4MTEyNCBsb2diIDFFLTk5ICAtPiAtOTkKK2xvZ2J4MTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwCitsb2dieDExMjYgbG9nYiAxRS0zODMgLT4gLTM4MworbG9nYngxMTI3IGxvZ2IgMUUtOTk5IC0+IC05OTkKKworLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQorbG9nYngxNDAwIGxvZ2IgMTBFLTMgICAgLT4gLTIKK2xvZ2J4MTQwMSBsb2diIDEwRS0yICAgIC0+IC0xCitsb2dieDE0MDIgbG9nYiAxMDBFLTIgICAtPiAgMAorbG9nYngxNDAzIGxvZ2IgMTAwMEUtMiAgLT4gIDEKK2xvZ2J4MTQwNCBsb2diIDEwMDAwRS0yIC0+ICAyCitsb2dieDE0MDUgbG9nYiAxMEUtMSAgICAtPiAgMAorbG9nYngxNDA2IGxvZ2IgMTAwRS0xICAgLT4gIDEKK2xvZ2J4MTQwNyBsb2diIDEwMDBFLTEgIC0+ICAyCitsb2dieDE0MDggbG9nYiAxMDAwMEUtMSAtPiAgMworbG9nYngxNDA5IGxvZ2IgMTBFMCAgICAgLT4gIDEKK2xvZ2J4MTQxMCBsb2diIDEwMEUwICAgIC0+ICAyCitsb2dieDE0MTEgbG9nYiAxMDAwRTAgICAtPiAgMworbG9nYngxNDEyIGxvZ2IgMTAwMDBFMCAgLT4gIDQKK2xvZ2J4MTQxMyBsb2diIDEwRTEgICAgIC0+ICAyCitsb2dieDE0MTQgbG9nYiAxMDBFMSAgICAtPiAgMworbG9nYngxNDE1IGxvZ2IgMTAwMEUxICAgLT4gIDQKK2xvZ2J4MTQxNiBsb2diIDEwMDAwRTEgIC0+ICA1Citsb2dieDE0MTcgbG9nYiAxMEUyICAgICAtPiAgMworbG9nYngxNDE4IGxvZ2IgMTAwRTIgICAgLT4gIDQKK2xvZ2J4MTQxOSBsb2diIDEwMDBFMiAgIC0+ICA1Citsb2dieDE0MjAgbG9nYiAxMDAwMEUyICAtPiAgNgorCistLSBpbmV4YWN0cworcHJlY2lzaW9uOiAyCitsb2dieDE1MDAgbG9nYiAxMDAwMEUyICAgICAgIC0+ICA2Citsb2dieDE1MDEgbG9nYiAxRSs5OSAgICAgICAgIC0+ICA5OQorbG9nYngxNTAyIGxvZ2IgMUUtOTkgICAgICAgICAtPiAtOTkKK2xvZ2J4MTUwMyBsb2diIDFFKzEwMCAgICAgICAgLT4gIDEuMEUrMiAgUm91bmRlZAorbG9nYngxNTA0IGxvZ2IgMUUrOTk5ICAgICAgICAtPiAgMS4wRSszICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUwNSBsb2diIDFFLTEwMCAgICAgICAgLT4gLTEuMEUrMiAgUm91bmRlZAorbG9nYngxNTA2IGxvZ2IgMUUtOTk5ICAgICAgICAtPiAtMS4wRSszICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUwNyBsb2diIDFFLTExMTEgICAgICAgLT4gLTEuMUUrMyAgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MDggbG9nYiAxRS0zMzMzICAgICAgIC0+IC0zLjNFKzMgIEluZXhhY3QgUm91bmRlZAorbG9nYngxNTA5IGxvZ2IgMUUtNjY2NiAgICAgICAtPiAtNi43RSszICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUxMCBsb2diIDFFKzk5OTk5OTk5OSAgLT4gIDEuMEUrOSAgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MTEgbG9nYiAxRS05OTk5OTk5OTkgIC0+IC0xLjBFKzkgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCitsb2dieDE1MTcgbG9nYiAxRS0xMTExICAgICAgIC0+IC0xRSszICAgIEluZXhhY3QgUm91bmRlZAorbG9nYngxNTE4IGxvZ2IgMUUtMzMzMyAgICAgICAtPiAtM0UrMyAgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUxOSBsb2diIDFFLTY2NjYgICAgICAgLT4gLTdFKzMgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDgKK2xvZ2J4MTUyMCBsb2diIDFFKzk5OTk5OTk5OSAgLT4gIDEuMDAwMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUyMSBsb2diIDFFLTk5OTk5OTk5OSAgLT4gLTEuMDAwMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOQorbG9nYngxNTIzIGxvZ2IgMUUrOTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5Citsb2dieDE1MjQgbG9nYiAxRS05OTk5OTk5OTkgIC0+IC05OTk5OTk5OTkKKworLS0gc3BlY2lhbCB2YWx1ZXMKK3ByZWNpc2lvbjogOQorbG9nYng4MjAgIGxvZ2IgICBJbmZpbml0eSAtPiAgIEluZmluaXR5Citsb2dieDgyMSAgbG9nYiAgLUluZmluaXR5IC0+ICAgSW5maW5pdHkKK2xvZ2J4ODIyICBsb2diICAgMCAgICAgICAgLT4gIC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDgyMyAgbG9nYiAgIE5hTiAgICAgIC0+ICAgTmFOCitsb2dieDgyNCAgbG9nYiAgIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworbG9nYng4MjUgIGxvZ2IgICBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24KK2xvZ2J4ODI2ICBsb2diICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uCitsb2dieDgyNyAgbG9nYiAgIE5hTjQ1NiAgIC0+ICAgTmFONDU2Citsb2dieDgyOCAgbG9nYiAgIC1OYU42NTQgIC0+ICAtTmFONjU0Citsb2dieDgyOSAgbG9nYiAgIE5hTjEgICAgIC0+ICAgTmFOMQorCistLSBOdWxsIHRlc3QKK2xvZ2J4OTAwICBsb2diICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWF4bWFnLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWF4bWFnLmRlY1Rlc3QKaW5kZXggNmI0NDIxMy4uMjY1ZTkxMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21heG1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tYXhtYWcuZGVjVGVzdApAQCAtMSw0MDQgKzEsNDA0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBtYXhtYWcuZGVjVGVzdCAtLSBkZWNpbWFsIG1heGltdW0gYnkgbWFnbml0dWRlICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvDQotLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLW14Z3gwMDEgbWF4bWFnICAtMiAgLTIgIC0+IC0yDQotbXhneDAwMiBtYXhtYWcgIC0yICAtMSAgLT4gLTINCi1teGd4MDAzIG1heG1hZyAgLTIgICAwICAtPiAtMg0KLW14Z3gwMDQgbWF4bWFnICAtMiAgIDEgIC0+IC0yDQotbXhneDAwNSBtYXhtYWcgIC0yICAgMiAgLT4gIDINCi1teGd4MDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMg0KLW14Z3gwMDcgbWF4bWFnICAtMSAgLTEgIC0+IC0xDQotbXhneDAwOCBtYXhtYWcgIC0xICAgMCAgLT4gLTENCi1teGd4MDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQ0KLW14Z3gwMTAgbWF4bWFnICAtMSAgIDIgIC0+ICAyDQotbXhneDAxMSBtYXhtYWcgICAwICAtMiAgLT4gLTINCi1teGd4MDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQ0KLW14Z3gwMTMgbWF4bWFnICAgMCAgIDAgIC0+ICAwDQotbXhneDAxNCBtYXhtYWcgICAwICAgMSAgLT4gIDENCi1teGd4MDE1IG1heG1hZyAgIDAgICAyICAtPiAgMg0KLW14Z3gwMTYgbWF4bWFnICAgMSAgLTIgIC0+IC0yDQotbXhneDAxNyBtYXhtYWcgICAxICAtMSAgLT4gIDENCi1teGd4MDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQ0KLW14Z3gwMTkgbWF4bWFnICAgMSAgIDEgIC0+ICAxDQotbXhneDAyMCBtYXhtYWcgICAxICAgMiAgLT4gIDINCi1teGd4MDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMg0KLW14Z3gwMjIgbWF4bWFnICAgMiAgLTEgIC0+ICAyDQotbXhneDAyMyBtYXhtYWcgICAyICAgMCAgLT4gIDINCi1teGd4MDI1IG1heG1hZyAgIDIgICAxICAtPiAgMg0KLW14Z3gwMjYgbWF4bWFnICAgMiAgIDIgIC0+ICAyDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1teGd4MDMwIG1heG1hZyAgIDAgICAgIDAgICAtPiAgMA0KLW14Z3gwMzEgbWF4bWFnICAgMCAgICAtMCAgIC0+ICAwDQotbXhneDAzMiBtYXhtYWcgICAwICAgIC0wLjAgLT4gIDANCi1teGd4MDMzIG1heG1hZyAgIDAgICAgIDAuMCAtPiAgMA0KLW14Z3gwMzQgbWF4bWFnICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuDQotbXhneDAzNSBtYXhtYWcgIC0wICAgIC0wICAgLT4gLTANCi1teGd4MDM2IG1heG1hZyAgLTAgICAgLTAuMCAtPiAtMC4wDQotbXhneDAzNyBtYXhtYWcgIC0wICAgICAwLjAgLT4gIDAuMA0KLW14Z3gwMzggbWF4bWFnICAgMC4wICAgMCAgIC0+ICAwDQotbXhneDAzOSBtYXhtYWcgICAwLjAgIC0wICAgLT4gIDAuMA0KLW14Z3gwNDAgbWF4bWFnICAgMC4wICAtMC4wIC0+ICAwLjANCi1teGd4MDQxIG1heG1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wDQotbXhneDA0MiBtYXhtYWcgIC0wLjAgICAwICAgLT4gIDANCi1teGd4MDQzIG1heG1hZyAgLTAuMCAgLTAgICAtPiAtMC4wDQotbXhneDA0NCBtYXhtYWcgIC0wLjAgIC0wLjAgLT4gLTAuMA0KLW14Z3gwNDUgbWF4bWFnICAtMC4wICAgMC4wIC0+ICAwLjANCi0NCi1teGd4MDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQ0KLW14Z3gwNTEgbWF4bWFnICAtMEUyICAgMEUyIC0+ICAwRSsyDQotbXhneDA1MiBtYXhtYWcgIC0wRTIgICAwRTEgLT4gIDBFKzENCi1teGd4MDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMg0KLW14Z3gwNTQgbWF4bWFnICAgMEUxICAtMEUxIC0+ICAwRSsxDQotbXhneDA1NSBtYXhtYWcgICAwRTIgIC0wRTIgLT4gIDBFKzINCi1teGd4MDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMg0KLW14Z3gwNTcgbWF4bWFnICAgMEUxICAtMEUyIC0+ICAwRSsxDQotDQotbXhneDA1OCBtYXhtYWcgICAwRTEgICAwRTEgLT4gIDBFKzENCi1teGd4MDU5IG1heG1hZyAgIDBFMiAgIDBFMiAtPiAgMEUrMg0KLW14Z3gwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyDQotbXhneDA2MSBtYXhtYWcgICAwRTEgICAwRTIgLT4gIDBFKzINCi1teGd4MDYyIG1heG1hZyAgLTBFMSAgLTBFMSAtPiAtMEUrMQ0KLW14Z3gwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyDQotbXhneDA2NCBtYXhtYWcgIC0wRTIgIC0wRTEgLT4gLTBFKzENCi1teGd4MDY1IG1heG1hZyAgLTBFMSAgLTBFMiAtPiAtMEUrMQ0KLQ0KLS0tIFNwZWNpYWxzDQotcHJlY2lzaW9uOiA5DQotbXhneDA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLW14Z3gwOTEgbWF4bWFnICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCi1teGd4MDkyIG1heG1hZyAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotbXhneDA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLW14Z3gwOTQgbWF4bWFnICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCi1teGd4MDk1IG1heG1hZyAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotbXhneDA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLW14Z3gwOTcgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1teGd4MDk4IG1heG1hZyAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotbXhneDA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLW14Z3gxMDAgbWF4bWFnIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1teGd4MTAxIG1heG1hZyAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotbXhneDEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLW14Z3gxMDMgbWF4bWFnICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1teGd4MTA0IG1heG1hZyAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotbXhneDEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLW14Z3gxMjAgbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1teGd4MTIxIG1heG1hZyAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotbXhneDEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxMjMgbWF4bWFnIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1teGd4MTI0IG1heG1hZyAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotbXhneDEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxMjYgbWF4bWFnIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1teGd4MTI3IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotbXhneDEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxMjkgbWF4bWFnIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1teGd4MTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotbXhneDEzMSBtYXhtYWcgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxMzIgbWF4bWFnICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1teGd4MTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotbXhneDEzNCBtYXhtYWcgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxMzUgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi0NCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCi1teGd4MTQxIG1heG1hZyAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5DQotbXhneDE0MiBtYXhtYWcgIE5hTiAtMTAwMCAgIC0+IC0xMDAwDQotbXhneDE0MyBtYXhtYWcgIE5hTiAtMSAgICAgIC0+IC0xDQotbXhneDE0NCBtYXhtYWcgIE5hTiAtMCAgICAgIC0+IC0wDQotbXhneDE0NSBtYXhtYWcgIE5hTiAgMCAgICAgIC0+ICAwDQotbXhneDE0NiBtYXhtYWcgIE5hTiAgMSAgICAgIC0+ICAxDQotbXhneDE0NyBtYXhtYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwDQotbXhneDE0OCBtYXhtYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQ0KLW14Z3gxNDkgbWF4bWFnICBOYU4gIE5hTiAgICAtPiAgTmFODQotbXhneDE1MCBtYXhtYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxNTEgbWF4bWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMA0KLW14Z3gxNTIgbWF4bWFnIC0xICAgIE5hTiAgICAtPiAtMQ0KLW14Z3gxNTMgbWF4bWFnIC0wICAgIE5hTiAgICAtPiAtMA0KLW14Z3gxNTQgbWF4bWFnICAwICAgIE5hTiAgICAtPiAgMA0KLW14Z3gxNTUgbWF4bWFnICAxICAgIE5hTiAgICAtPiAgMQ0KLW14Z3gxNTYgbWF4bWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMA0KLW14Z3gxNTcgbWF4bWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkNCi0NCi1teGd4MTYxIG1heG1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTYzIG1heG1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTY0IG1heG1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTY2IG1heG1hZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTY3IG1heG1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTY5IG1heG1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTcwIG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTcyIG1heG1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTczIG1heG1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTc1IG1heG1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTc2IG1heG1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTc4IG1heG1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTc5IG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotbXhneDE4MSBtYXhtYWcgIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1teGd4MTgyIG1heG1hZyAgTmFOOCAgICAgOSAgIC0+ICA5DQotbXhneDE4MyBtYXhtYWcgLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1teGd4MTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xDQotbXhneDE4NSBtYXhtYWcgIE5hTjIgICBOYU4xMiAtPiAgTmFOMg0KLW14Z3gxODYgbWF4bWFnIC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzDQotbXhneDE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQNCi0NCi1teGd4MTg4IG1heG1hZyAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQ0KLW14Z3gxODkgbWF4bWFnIC05ICAgICAtTmFOMyAgLT4gLTkNCi1teGd4MTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KLQ0KLW14Z3gxOTEgbWF4bWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTkyIG1heG1hZyAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE5MyBtYXhtYWcgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLW14Z3gxOTQgbWF4bWFnICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTk1IG1heG1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE5NiBtYXhtYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLW14Z3gxOTcgbWF4bWFnICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTk4IG1heG1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE5OSBtYXhtYWcgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHJvdW5kaW5nIGNoZWNrcw0KLW1heGV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLXByZWNpc2lvbjogOQ0KLW14Z3gyMDEgbWF4bWFnIDEyMzQ1Njc4MDAwIDEgIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQNCi1teGd4MjAyIG1heG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkDQotbXhneDIwMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQotbXhneDIwNCBtYXhtYWcgMSAxMjM0NTY3ODAwICAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQotbXhneDIwNSBtYXhtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkDQotbXhneDIwNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkDQotbXhneDIwNyBtYXhtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCi1teGd4MjA4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZA0KLW14Z3gyMDkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KLW14Z3gyMTAgbWF4bWFnIDEgMTIzNDU2Nzg5MDEgIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KLW14Z3gyMTEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkDQotbXhneDIxMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQNCi1teGd4MjEzIG1heG1hZyAtMTIzNDU2Nzg5MSAgMSAtPiAtMS4yMzQ1Njc4OUUrOSAgIEluZXhhY3QgUm91bmRlZA0KLW14Z3gyMTQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xLjIzNDU2Nzg5RSs5ICAgSW5leGFjdCBSb3VuZGVkDQotbXhneDIxNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEuMjM0NTY3ODlFKzEwICBJbmV4YWN0IFJvdW5kZWQNCi1teGd4MjE2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMS4yMzQ1Njc4OUUrMTAgIEluZXhhY3QgUm91bmRlZA0KLW14Z3gyMTcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xLjIzNDU2NzkwRSs5ICAgSW5leGFjdCBSb3VuZGVkDQotbXhneDIxOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEuMjM0NTY3OTBFKzkgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1wcmVjaXNpb246IDE1DQotbXhneDIyMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDANCi1teGd4MjIyIG1heG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMA0KLW14Z3gyMjMgbWF4bWFnIDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDANCi1teGd4MjI0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwDQotbXhneDIyNSBtYXhtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MA0KLW14Z3gyMjYgbWF4bWFnIDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTANCi1teGd4MjI3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxDQotbXhneDIyOCBtYXhtYWcgMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQ0KLW14Z3gyMjkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxDQotbXhneDIzMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDENCi1teGd4MjMxIG1heG1hZyAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2DQotbXhneDIzMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5Ng0KLW14Z3gyMzMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xMjM0NTY3ODkxDQotbXhneDIzNCBtYXhtYWcgMSAtMTIzNDU2Nzg5MSAgLT4gLTEyMzQ1Njc4OTENCi1teGd4MjM1IG1heG1hZyAtMTIzNDU2Nzg5MDEgMSAtPiAtMTIzNDU2Nzg5MDENCi1teGd4MjM2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMTIzNDU2Nzg5MDENCi1teGd4MjM3IG1heG1hZyAtMTIzNDU2Nzg5NiAgMSAtPiAtMTIzNDU2Nzg5Ng0KLW14Z3gyMzggbWF4bWFnIDEgLTEyMzQ1Njc4OTYgIC0+IC0xMjM0NTY3ODk2DQotDQotLS0gZnJvbSBleGFtcGxlcw0KLW14Z3gyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJw0KLW14Z3gyODEgbWF4bWFnICctMTAnICczJyAgLT4gICctMTAnDQotbXhneDI4MiBtYXhtYWcgJzEuMCcgJzEnICAtPiAgJzEnDQotbXhneDI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnDQotbXhneDI4NCBtYXhtYWcgJzcnICdOYU4nICAtPiAgJzcnDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLi4NCi1tYXhFeHBvbmVudDogOTk5OTk5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkNCi1teGd4MzMwIG1heG1hZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gIDlFKzk5OTk5OTk5OQ0KLW14Z3gzMzEgbWF4bWFnIDlFKzk5OTk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgOUUrOTk5OTk5OTk5DQotbXhneDMzMiBtYXhtYWcgKzAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAwLjEwMA0KLW14Z3gzMzMgbWF4bWFnIDlFLTk5OTk5OTk5OSArMC4xMDAgICAgICAgICAgICAgICAtPiAgMC4xMDANCi1teGd4MzM1IG1heG1hZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gIDlFKzk5OTk5OTk5OQ0KLW14Z3gzMzYgbWF4bWFnIDlFKzk5OTk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgOUUrOTk5OTk5OTk5DQotbXhneDMzNyBtYXhtYWcgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAtMC4xMDANCi1teGd4MzM4IG1heG1hZyA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gIC0wLjEwMA0KLQ0KLW14Z3gzMzkgbWF4bWFnIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAtPiAgMUUtNDAwMDAwMDAxDQotbXhneDM0MCBtYXhtYWcgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAgIC0+ICAxRS00MDAwMDAwMDANCi1teGd4MzQxIG1heG1hZyAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAwICAgLT4gIDFFLTQwMDAwMDAwMA0KLW14Z3gzNDIgbWF4bWFnIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAtPiAgMC4wMQ0KLW14Z3gzNDMgbWF4bWFnIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAtPiAgMC4xDQotbXhneDM0NCBtYXhtYWcgMC4wMSA5ZS05OTk5OTk5OTggICAgICAgICAgIC0+ICAwLjAxDQotbXhneDM0NSBtYXhtYWcgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDEgICAgIC0+ICAxRSs1OTk5OTk5OTkNCi1teGd4MzQ2IG1heG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDFFKzU5OTk5OTk5OQ0KLW14Z3gzNDcgbWF4bWFnIDFlNjAwMDAwMDAwIDFlNDAwMDAwMDAwICAgICAtPiAgMUUrNjAwMDAwMDAwDQotbXhneDM0OCBtYXhtYWcgOWU5OTk5OTk5OTggMTAwICAgICAgICAgICAgIC0+ICA5RSs5OTk5OTk5OTgNCi1teGd4MzQ5IG1heG1hZyA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDlFKzk5OTk5OTk5OA0KLW14Z3gzNTAgbWF4bWFnIDEwMCAgOWU5OTk5OTk5OTggICAgICAgICAgICAtPiAgOUUrOTk5OTk5OTk4DQotLS0gc2lnbnMNCi1teGd4MzUxIG1heG1hZyAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDFFKzc3Nzc3Nzc3Nw0KLW14Z3gzNTIgbWF4bWFnICAxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAgMUUrNzc3Nzc3Nzc3DQotbXhneDM1MyBtYXhtYWcgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+IC0xRSs3Nzc3Nzc3NzcNCi1teGd4MzU0IG1heG1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzc3Nzc3Nzc3Nw0KLW14Z3gzNTUgbWF4bWFnICAxZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAgMUUtNDExMTExMTExDQotbXhneDM1NiBtYXhtYWcgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS00MTExMTExMTENCi1teGd4MzU3IG1heG1hZyAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gIDFFLTQxMTExMTExMQ0KLW14Z3gzNTggbWF4bWFnIC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNDExMTExMTExDQotDQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UNCi0tLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQ0KLW14Z3g0MDEgbWF4bWFnICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkNCi1teGd4NDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQ0KLW14Z3g0MDMgbWF4bWFnICAxICAgICAgMS4wICAgICAtPiAgMQ0KLW14Z3g0MDQgbWF4bWFnICAxLjAgICAgMC4xICAgICAtPiAgMS4wDQotbXhneDQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjENCi1teGd4NDA2IG1heG1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTANCi1teGd4NDA3IG1heG1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTANCi1teGd4NDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDANCi1teGd4NDA5IG1heG1hZyAgMC4wICAgLTAgICAgICAgLT4gIDAuMA0KLW14Z3g0MTAgbWF4bWFnICAwLjAgICAtMC4wICAgICAtPiAgMC4wDQotbXhneDQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwDQotbXhneDQxMiBtYXhtYWcgIDAuMCAgIC0wLjAwICAgIC0+ICAwLjANCi1teGd4NDEzIG1heG1hZyAgMCAgICAgLTAuMCAgICAgLT4gIDANCi1teGd4NDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDANCi1teGd4NDE1IG1heG1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAuMA0KLW14Z3g0MTYgbWF4bWFnIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDANCi1teGd4NDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwDQotbXhneDQxOCBtYXhtYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwDQotbXhneDQxOSBtYXhtYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0xLjANCi1teGd4NDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMA0KLW14Z3g0MjEgbWF4bWFnIC0xICAgICAtMS4xICAgICAtPiAtMS4xDQotbXhneDQyMyBtYXhtYWcgLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQ0KLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KLW14Z3g0MzEgbWF4bWFnICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkNCi1teGd4NDMyIG1heG1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQ0KLW14Z3g0MzMgbWF4bWFnICAxLjAgICAgMSAgICAgICAtPiAgMQ0KLW14Z3g0MzQgbWF4bWFnICAwLjEgICAgMS4wICAgICAtPiAgMS4wDQotbXhneDQzNSBtYXhtYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjENCi1teGd4NDM2IG1heG1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTANCi1teGd4NDM3IG1heG1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTANCi1teGd4NDM4IG1heG1hZyAgMC4wICAgIDAgICAgICAgLT4gIDANCi1teGd4NDM5IG1heG1hZyAtMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KLW14Z3g0NDAgbWF4bWFnIC0wLjAgICAgMC4wICAgICAtPiAgMC4wDQotbXhneDQ0MSBtYXhtYWcgLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwDQotbXhneDQ0MiBtYXhtYWcgLTAuMDAgICAwLjAgICAgIC0+ICAwLjANCi1teGd4NDQzIG1heG1hZyAtMC4wICAgIDAgICAgICAgLT4gIDANCi1teGd4NDQ0IG1heG1hZyAtMCAgICAgIDAgICAgICAgLT4gIDANCi1teGd4NDQ1IG1heG1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KLW14Z3g0NDYgbWF4bWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDANCi1teGd4NDQ3IG1heG1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwDQotbXhneDQ0OCBtYXhtYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwDQotbXhneDQ0OSBtYXhtYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0xLjANCi1teGd4NDUwIG1heG1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEuMA0KLW14Z3g0NTEgbWF4bWFnIC0xLjEgICAtMSAgICAgICAtPiAtMS4xDQotbXhneDQ1MyBtYXhtYWcgLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQ0KLS0tIGxhcmdpZXMNCi1teGd4NDYwIG1heG1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMNCi1teGd4NDYxIG1heG1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMNCi1teGd4NDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDANCi1teGd4NDYzIG1heG1hZyAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMNCi1teGd4NDY0IG1heG1hZyAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMNCi1teGd4NDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCi1teGd4NDY2IG1heG1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDANCi1teGd4NDY3IG1heG1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDANCi0NCi0tLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQ0KLW1heGV4cG9uZW50OiA5OTk5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OTk5OQ0KLXByZWNpc2lvbjogMw0KLQ0KLW14Z3g0NzAgbWF4bWFnICAxICAgICAgLjUgICAgIC0+ICAxDQotbXhneDQ3MSBtYXhtYWcgIDEwICAgICA1ICAgICAgLT4gIDEwDQotbXhneDQ3MiBtYXhtYWcgIDEwMCAgICA1MCAgICAgLT4gIDEwMA0KLW14Z3g0NzMgbWF4bWFnICAxMDAwICAgNTAwICAgIC0+ICAxLjAwRSszIFJvdW5kZWQNCi1teGd4NDc0IG1heG1hZyAgMTAwMDAgIDUwMDAgICAtPiAgMS4wMEUrNCBSb3VuZGVkDQotbXhneDQ3NSBtYXhtYWcgIDYgICAgICAuNSAgICAgLT4gIDYNCi1teGd4NDc2IG1heG1hZyAgNjYgICAgIDUgICAgICAtPiAgNjYNCi1teGd4NDc3IG1heG1hZyAgNjY2ICAgIDUwICAgICAtPiAgNjY2DQotbXhneDQ3OCBtYXhtYWcgIDY2NjYgICA1MDAgICAgLT4gIDYuNjdFKzMgUm91bmRlZCBJbmV4YWN0DQotbXhneDQ3OSBtYXhtYWcgIDY2NjY2ICA1MDAwICAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0DQotbXhneDQ4MCBtYXhtYWcgIDMzMzMzICA1MDAwICAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0DQotbXhneDQ4MSBtYXhtYWcgIC41ICAgICAxICAgICAgLT4gIDENCi1teGd4NDgyIG1heG1hZyAgLjUgICAgIDEwICAgICAtPiAgMTANCi1teGd4NDgzIG1heG1hZyAgLjUgICAgIDEwMCAgICAtPiAgMTAwDQotbXhneDQ4NCBtYXhtYWcgIC41ICAgICAxMDAwICAgLT4gIDEuMDBFKzMgUm91bmRlZA0KLW14Z3g0ODUgbWF4bWFnICAuNSAgICAgMTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQNCi1teGd4NDg2IG1heG1hZyAgLjUgICAgIDYgICAgICAtPiAgNg0KLW14Z3g0ODcgbWF4bWFnICAuNSAgICAgNjYgICAgIC0+ICA2Ng0KLW14Z3g0ODggbWF4bWFnICAuNSAgICAgNjY2ICAgIC0+ICA2NjYNCi1teGd4NDg5IG1heG1hZyAgLjUgICAgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QNCi1teGd4NDkwIG1heG1hZyAgLjUgICAgIDY2NjY2ICAtPiAgNi42N0UrNCBSb3VuZGVkIEluZXhhY3QNCi1teGd4NDkxIG1heG1hZyAgLjUgICAgIDMzMzMzICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QNCi0NCi0tLSBvdmVyZmxvdyB0ZXN0cw0KLW1heGV4cG9uZW50OiA5OTk5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OTk5OQ0KLXByZWNpc2lvbjogMw0KLW14Z3g1MDAgbWF4bWFnIDkuOTk5RSs5OTk5OTk5OTkgIDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLW14Z3g1MDEgbWF4bWFnIC05Ljk5OUUrOTk5OTk5OTk5IDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLQ0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdw0KLXByZWNpc2lvbjogMw0KLW1heGV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLW14Z3g1MTAgbWF4bWFnICAxLjAwRS05OTkgICAgICAgMCAgLT4gICAxLjAwRS05OTkNCi1teGd4NTExIG1heG1hZyAgMC4xRS05OTkgICAgICAgIDAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbA0KLW14Z3g1MTIgbWF4bWFnICAwLjEwRS05OTkgICAgICAgMCAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsDQotbXhneDUxMyBtYXhtYWcgIDAuMTAwRS05OTkgICAgICAwICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZA0KLW14Z3g1MTQgbWF4bWFnICAwLjAxRS05OTkgICAgICAgMCAgLT4gICAxRS0xMDAxICAgU3Vibm9ybWFsDQotLS0gbmV4dCBpcyByb3VuZGVkIHRvIE5taW4NCi1teGd4NTE1IG1heG1hZyAgMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotbXhneDUxNiBtYXhtYWcgIDAuMDk5RS05OTkgICAgICAwICAtPiAgIDEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLW14Z3g1MTcgbWF4bWFnICAwLjAwOUUtOTk5ICAgICAgMCAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1teGd4NTE4IG1heG1hZyAgMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1teGd4NTE5IG1heG1hZyAgMC4wMDA5RS05OTkgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1teGd4NTIwIG1heG1hZyAgMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi0NCi1teGd4NTMwIG1heG1hZyAtMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAtMS4wMEUtOTk5DQotbXhneDUzMSBtYXhtYWcgLTAuMUUtOTk5ICAgICAgICAwICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwNCi1teGd4NTMyIG1heG1hZyAtMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbA0KLW14Z3g1MzMgbWF4bWFnIC0wLjEwMEUtOTk5ICAgICAgMCAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQNCi1teGd4NTM0IG1heG1hZyAtMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbA0KLS0tIG5leHQgaXMgcm91bmRlZCB0byAtTm1pbg0KLW14Z3g1MzUgbWF4bWFnIC0wLjk5OUUtOTk5ICAgICAgMCAgLT4gIC0xLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1teGd4NTM2IG1heG1hZyAtMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotbXhneDUzNyBtYXhtYWcgLTAuMDA5RS05OTkgICAgICAwICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLW14Z3g1MzggbWF4bWFnIC0wLjAwMUUtOTk5ICAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLW14Z3g1MzkgbWF4bWFnIC0wLjAwMDlFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLW14Z3g1NDAgbWF4bWFnIC0wLjAwMDFFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1teGd4OTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDkwMSBtYXhtYWcgICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbWF4bWFnLmRlY1Rlc3QgLS0gZGVjaW1hbCBtYXhpbXVtIGJ5IG1hZ25pdHVkZSAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBzYW5pdHkgY2hlY2tzCitteGd4MDAxIG1heG1hZyAgLTIgIC0yICAtPiAtMgorbXhneDAwMiBtYXhtYWcgIC0yICAtMSAgLT4gLTIKK214Z3gwMDMgbWF4bWFnICAtMiAgIDAgIC0+IC0yCitteGd4MDA0IG1heG1hZyAgLTIgICAxICAtPiAtMgorbXhneDAwNSBtYXhtYWcgIC0yICAgMiAgLT4gIDIKK214Z3gwMDYgbWF4bWFnICAtMSAgLTIgIC0+IC0yCitteGd4MDA3IG1heG1hZyAgLTEgIC0xICAtPiAtMQorbXhneDAwOCBtYXhtYWcgIC0xICAgMCAgLT4gLTEKK214Z3gwMDkgbWF4bWFnICAtMSAgIDEgIC0+ICAxCitteGd4MDEwIG1heG1hZyAgLTEgICAyICAtPiAgMgorbXhneDAxMSBtYXhtYWcgICAwICAtMiAgLT4gLTIKK214Z3gwMTIgbWF4bWFnICAgMCAgLTEgIC0+IC0xCitteGd4MDEzIG1heG1hZyAgIDAgICAwICAtPiAgMAorbXhneDAxNCBtYXhtYWcgICAwICAgMSAgLT4gIDEKK214Z3gwMTUgbWF4bWFnICAgMCAgIDIgIC0+ICAyCitteGd4MDE2IG1heG1hZyAgIDEgIC0yICAtPiAtMgorbXhneDAxNyBtYXhtYWcgICAxICAtMSAgLT4gIDEKK214Z3gwMTggbWF4bWFnICAgMSAgIDAgIC0+ICAxCitteGd4MDE5IG1heG1hZyAgIDEgICAxICAtPiAgMQorbXhneDAyMCBtYXhtYWcgICAxICAgMiAgLT4gIDIKK214Z3gwMjEgbWF4bWFnICAgMiAgLTIgIC0+ICAyCitteGd4MDIyIG1heG1hZyAgIDIgIC0xICAtPiAgMgorbXhneDAyMyBtYXhtYWcgICAyICAgMCAgLT4gIDIKK214Z3gwMjUgbWF4bWFnICAgMiAgIDEgIC0+ICAyCitteGd4MDI2IG1heG1hZyAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworbXhneDAzMCBtYXhtYWcgICAwICAgICAwICAgLT4gIDAKK214Z3gwMzEgbWF4bWFnICAgMCAgICAtMCAgIC0+ICAwCitteGd4MDMyIG1heG1hZyAgIDAgICAgLTAuMCAtPiAgMAorbXhneDAzMyBtYXhtYWcgICAwICAgICAwLjAgLT4gIDAKK214Z3gwMzQgbWF4bWFnICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuCitteGd4MDM1IG1heG1hZyAgLTAgICAgLTAgICAtPiAtMAorbXhneDAzNiBtYXhtYWcgIC0wICAgIC0wLjAgLT4gLTAuMAorbXhneDAzNyBtYXhtYWcgIC0wICAgICAwLjAgLT4gIDAuMAorbXhneDAzOCBtYXhtYWcgICAwLjAgICAwICAgLT4gIDAKK214Z3gwMzkgbWF4bWFnICAgMC4wICAtMCAgIC0+ICAwLjAKK214Z3gwNDAgbWF4bWFnICAgMC4wICAtMC4wIC0+ICAwLjAKK214Z3gwNDEgbWF4bWFnICAgMC4wICAgMC4wIC0+ICAwLjAKK214Z3gwNDIgbWF4bWFnICAtMC4wICAgMCAgIC0+ICAwCitteGd4MDQzIG1heG1hZyAgLTAuMCAgLTAgICAtPiAtMC4wCitteGd4MDQ0IG1heG1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCitteGd4MDQ1IG1heG1hZyAgLTAuMCAgIDAuMCAtPiAgMC4wCisKK214Z3gwNTAgbWF4bWFnICAtMEUxICAgMEUxIC0+ICAwRSsxCitteGd4MDUxIG1heG1hZyAgLTBFMiAgIDBFMiAtPiAgMEUrMgorbXhneDA1MiBtYXhtYWcgIC0wRTIgICAwRTEgLT4gIDBFKzEKK214Z3gwNTMgbWF4bWFnICAtMEUxICAgMEUyIC0+ICAwRSsyCitteGd4MDU0IG1heG1hZyAgIDBFMSAgLTBFMSAtPiAgMEUrMQorbXhneDA1NSBtYXhtYWcgICAwRTIgIC0wRTIgLT4gIDBFKzIKK214Z3gwNTYgbWF4bWFnICAgMEUyICAtMEUxIC0+ICAwRSsyCitteGd4MDU3IG1heG1hZyAgIDBFMSAgLTBFMiAtPiAgMEUrMQorCitteGd4MDU4IG1heG1hZyAgIDBFMSAgIDBFMSAtPiAgMEUrMQorbXhneDA1OSBtYXhtYWcgICAwRTIgICAwRTIgLT4gIDBFKzIKK214Z3gwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyCitteGd4MDYxIG1heG1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMgorbXhneDA2MiBtYXhtYWcgIC0wRTEgIC0wRTEgLT4gLTBFKzEKK214Z3gwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyCitteGd4MDY0IG1heG1hZyAgLTBFMiAgLTBFMSAtPiAtMEUrMQorbXhneDA2NSBtYXhtYWcgIC0wRTEgIC0wRTIgLT4gLTBFKzEKKworLS0gU3BlY2lhbHMKK3ByZWNpc2lvbjogOQorbXhneDA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorbXhneDA5MSBtYXhtYWcgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorbXhneDA5MiBtYXhtYWcgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorbXhneDA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorbXhneDA5NCBtYXhtYWcgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorbXhneDA5NSBtYXhtYWcgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorbXhneDA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorbXhneDA5NyBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDA5OCBtYXhtYWcgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwMCBtYXhtYWcgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwMSBtYXhtYWcgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwMyBtYXhtYWcgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwNCBtYXhtYWcgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitteGd4MTIwIG1heG1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTIxIG1heG1hZyAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitteGd4MTIyIG1heG1hZyAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitteGd4MTIzIG1heG1hZyAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitteGd4MTI0IG1heG1hZyAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitteGd4MTI1IG1heG1hZyAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitteGd4MTI2IG1heG1hZyAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitteGd4MTI3IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitteGd4MTI4IG1heG1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTI5IG1heG1hZyAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTMxIG1heG1hZyAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTMyIG1heG1hZyAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTM0IG1heG1hZyAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTM1IG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworbXhneDE0MSBtYXhtYWcgIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQorbXhneDE0MiBtYXhtYWcgIE5hTiAtMTAwMCAgIC0+IC0xMDAwCitteGd4MTQzIG1heG1hZyAgTmFOIC0xICAgICAgLT4gLTEKK214Z3gxNDQgbWF4bWFnICBOYU4gLTAgICAgICAtPiAtMAorbXhneDE0NSBtYXhtYWcgIE5hTiAgMCAgICAgIC0+ICAwCitteGd4MTQ2IG1heG1hZyAgTmFOICAxICAgICAgLT4gIDEKK214Z3gxNDcgbWF4bWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAorbXhneDE0OCBtYXhtYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorbXhneDE0OSBtYXhtYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4KK214Z3gxNTAgbWF4bWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK214Z3gxNTEgbWF4bWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMAorbXhneDE1MiBtYXhtYWcgLTEgICAgTmFOICAgIC0+IC0xCitteGd4MTUzIG1heG1hZyAtMCAgICBOYU4gICAgLT4gLTAKK214Z3gxNTQgbWF4bWFnICAwICAgIE5hTiAgICAtPiAgMAorbXhneDE1NSBtYXhtYWcgIDEgICAgTmFOICAgIC0+ICAxCitteGd4MTU2IG1heG1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK214Z3gxNTcgbWF4bWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworbXhneDE2MSBtYXhtYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNjMgbWF4bWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE2NCBtYXhtYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNjYgbWF4bWFnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE2NyBtYXhtYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNjkgbWF4bWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3MCBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzIgbWF4bWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3MyBtYXhtYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzUgbWF4bWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3NiBtYXhtYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzggbWF4bWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3OSBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK214Z3gxODEgbWF4bWFnICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTgyIG1heG1hZyAgTmFOOCAgICAgOSAgIC0+ICA5CitteGd4MTgzIG1heG1hZyAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQorCitteGd4MTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xCitteGd4MTg1IG1heG1hZyAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yCitteGd4MTg2IG1heG1hZyAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMworbXhneDE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQKKworbXhneDE4OCBtYXhtYWcgLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkKK214Z3gxODkgbWF4bWFnIC05ICAgICAtTmFOMyAgLT4gLTkKK214Z3gxOTAgbWF4bWFnICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK214Z3gxOTEgbWF4bWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTIgbWF4bWFnICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTMgbWF4bWFnIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTQgbWF4bWFnICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTUgbWF4bWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTYgbWF4bWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTcgbWF4bWFnICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTggbWF4bWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTkgbWF4bWFnICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcm91bmRpbmcgY2hlY2tzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5CitteGd4MjAxIG1heG1hZyAxMjM0NTY3ODAwMCAxICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitteGd4MjAyIG1heG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitteGd4MjAzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK214Z3gyMDQgbWF4bWFnIDEgMTIzNDU2NzgwMCAgIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorbXhneDIwNSBtYXhtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitteGd4MjA2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK214Z3gyMDcgbWF4bWFnIDEyMzQ1Njc4OTEgIDEgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitteGd4MjA4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorbXhneDIwOSBtYXhtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitteGd4MjEwIG1heG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMTEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitteGd4MjEyIG1heG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorbXhneDIxMyBtYXhtYWcgLTEyMzQ1Njc4OTEgIDEgLT4gLTEuMjM0NTY3ODlFKzkgICBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMTQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xLjIzNDU2Nzg5RSs5ICAgSW5leGFjdCBSb3VuZGVkCitteGd4MjE1IG1heG1hZyAtMTIzNDU2Nzg5MDEgMSAtPiAtMS4yMzQ1Njc4OUUrMTAgIEluZXhhY3QgUm91bmRlZAorbXhneDIxNiBtYXhtYWcgMSAtMTIzNDU2Nzg5MDEgLT4gLTEuMjM0NTY3ODlFKzEwICBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMTcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xLjIzNDU2NzkwRSs5ICAgSW5leGFjdCBSb3VuZGVkCitteGd4MjE4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMS4yMzQ1Njc5MEUrOSAgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDE1CitteGd4MjIxIG1heG1hZyAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMAorbXhneDIyMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK214Z3gyMjMgbWF4bWFnIDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDAKK214Z3gyMjQgbWF4bWFnIDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK214Z3gyMjUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTAKK214Z3gyMjYgbWF4bWFnIDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK214Z3gyMjcgbWF4bWFnIDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTEKK214Z3gyMjggbWF4bWFnIDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK214Z3gyMjkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxCitteGd4MjMwIG1heG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorbXhneDIzMSBtYXhtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5NgorbXhneDIzMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorbXhneDIzMyBtYXhtYWcgLTEyMzQ1Njc4OTEgIDEgLT4gLTEyMzQ1Njc4OTEKK214Z3gyMzQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxCitteGd4MjM1IG1heG1hZyAtMTIzNDU2Nzg5MDEgMSAtPiAtMTIzNDU2Nzg5MDEKK214Z3gyMzYgbWF4bWFnIDEgLTEyMzQ1Njc4OTAxIC0+IC0xMjM0NTY3ODkwMQorbXhneDIzNyBtYXhtYWcgLTEyMzQ1Njc4OTYgIDEgLT4gLTEyMzQ1Njc4OTYKK214Z3gyMzggbWF4bWFnIDEgLTEyMzQ1Njc4OTYgIC0+IC0xMjM0NTY3ODk2CisKKy0tIGZyb20gZXhhbXBsZXMKK214Z3gyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJworbXhneDI4MSBtYXhtYWcgJy0xMCcgJzMnICAtPiAgJy0xMCcKK214Z3gyODIgbWF4bWFnICcxLjAnICcxJyAgLT4gICcxJworbXhneDI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnCitteGd4Mjg0IG1heG1hZyAnNycgJ05hTicgIC0+ICAnNycKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLi4KK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitteGd4MzMwIG1heG1hZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gIDlFKzk5OTk5OTk5OQorbXhneDMzMSBtYXhtYWcgOUUrOTk5OTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICA5RSs5OTk5OTk5OTkKK214Z3gzMzIgbWF4bWFnICswLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgMC4xMDAKK214Z3gzMzMgbWF4bWFnIDlFLTk5OTk5OTk5OSArMC4xMDAgICAgICAgICAgICAgICAtPiAgMC4xMDAKK214Z3gzMzUgbWF4bWFnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAtPiAgOUUrOTk5OTk5OTk5CitteGd4MzM2IG1heG1hZyA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDlFKzk5OTk5OTk5OQorbXhneDMzNyBtYXhtYWcgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAtMC4xMDAKK214Z3gzMzggbWF4bWFnIDlFLTk5OTk5OTk5OSAtMC4xMDAgICAgICAgICAgICAgICAtPiAgLTAuMTAwCisKK214Z3gzMzkgbWF4bWFnIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAtPiAgMUUtNDAwMDAwMDAxCitteGd4MzQwIG1heG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAwICAgLT4gIDFFLTQwMDAwMDAwMAorbXhneDM0MSBtYXhtYWcgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwMCAgIC0+ICAxRS00MDAwMDAwMDAKK214Z3gzNDIgbWF4bWFnIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAtPiAgMC4wMQorbXhneDM0MyBtYXhtYWcgOWUtOTk5OTk5OTk4IDAuMSAgICAgICAgICAgIC0+ICAwLjEKK214Z3gzNDQgbWF4bWFnIDAuMDEgOWUtOTk5OTk5OTk4ICAgICAgICAgICAtPiAgMC4wMQorbXhneDM0NSBtYXhtYWcgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDEgICAgIC0+ICAxRSs1OTk5OTk5OTkKK214Z3gzNDYgbWF4bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwICAgICAtPiAgMUUrNTk5OTk5OTk5CitteGd4MzQ3IG1heG1hZyAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAgICAgLT4gIDFFKzYwMDAwMDAwMAorbXhneDM0OCBtYXhtYWcgOWU5OTk5OTk5OTggMTAwICAgICAgICAgICAgIC0+ICA5RSs5OTk5OTk5OTgKK214Z3gzNDkgbWF4bWFnIDllOTk5OTk5OTk4IDEwICAgICAgICAgICAgICAtPiAgOUUrOTk5OTk5OTk4CitteGd4MzUwIG1heG1hZyAxMDAgIDllOTk5OTk5OTk4ICAgICAgICAgICAgLT4gIDlFKzk5OTk5OTk5OAorLS0gc2lnbnMKK214Z3gzNTEgbWF4bWFnICAxZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAgMUUrNzc3Nzc3Nzc3CitteGd4MzUyIG1heG1hZyAgMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gIDFFKzc3Nzc3Nzc3NworbXhneDM1MyBtYXhtYWcgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+IC0xRSs3Nzc3Nzc3NzcKK214Z3gzNTQgbWF4bWFnIC0xZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAtMUUrNzc3Nzc3Nzc3CitteGd4MzU1IG1heG1hZyAgMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gIDFFLTQxMTExMTExMQorbXhneDM1NiBtYXhtYWcgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS00MTExMTExMTEKK214Z3gzNTcgbWF4bWFnIC0xZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAgMUUtNDExMTExMTExCitteGd4MzU4IG1heG1hZyAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gLTFFLTQxMTExMTExMQorCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK214Z3g0MDEgbWF4bWFnICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKK214Z3g0MDIgbWF4bWFnICAxLjEgICAgMSAgICAgICAtPiAgMS4xCitteGd4NDAzIG1heG1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEKK214Z3g0MDQgbWF4bWFnICAxLjAgICAgMC4xICAgICAtPiAgMS4wCitteGd4NDA1IG1heG1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMQorbXhneDQwNiBtYXhtYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwCitteGd4NDA3IG1heG1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKK214Z3g0MDggbWF4bWFnICAwICAgICAgMC4wICAgICAtPiAgMAorbXhneDQwOSBtYXhtYWcgIDAuMCAgIC0wICAgICAgIC0+ICAwLjAKK214Z3g0MTAgbWF4bWFnICAwLjAgICAtMC4wICAgICAtPiAgMC4wCitteGd4NDExIG1heG1hZyAgMC4wMCAgLTAuMCAgICAgLT4gIDAuMDAKK214Z3g0MTIgbWF4bWFnICAwLjAgICAtMC4wMCAgICAtPiAgMC4wCitteGd4NDEzIG1heG1hZyAgMCAgICAgLTAuMCAgICAgLT4gIDAKK214Z3g0MTQgbWF4bWFnICAwICAgICAtMCAgICAgICAtPiAgMAorbXhneDQxNSBtYXhtYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wLjAKK214Z3g0MTYgbWF4bWFnIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDAKK214Z3g0MTcgbWF4bWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKK214Z3g0MTggbWF4bWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xMAorbXhneDQxOSBtYXhtYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK214Z3g0MjAgbWF4bWFnIC0xLjAgICAtMSAgICAgICAtPiAtMS4wCitteGd4NDIxIG1heG1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQorbXhneDQyMyBtYXhtYWcgLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitteGd4NDMxIG1heG1hZyAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5CitteGd4NDMyIG1heG1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQorbXhneDQzMyBtYXhtYWcgIDEuMCAgICAxICAgICAgIC0+ICAxCitteGd4NDM0IG1heG1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDEuMAorbXhneDQzNSBtYXhtYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjEKK214Z3g0MzYgbWF4bWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMAorbXhneDQzNyBtYXhtYWcgIDAgICAgICAwLjEwICAgIC0+ICAwLjEwCitteGd4NDM4IG1heG1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAKK214Z3g0MzkgbWF4bWFnIC0wICAgICAgMC4wICAgICAtPiAgMC4wCitteGd4NDQwIG1heG1hZyAtMC4wICAgIDAuMCAgICAgLT4gIDAuMAorbXhneDQ0MSBtYXhtYWcgLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwCitteGd4NDQyIG1heG1hZyAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMAorbXhneDQ0MyBtYXhtYWcgLTAuMCAgICAwICAgICAgIC0+ICAwCitteGd4NDQ0IG1heG1hZyAtMCAgICAgIDAgICAgICAgLT4gIDAKK214Z3g0NDUgbWF4bWFnIC0wICAgICAtMC4wICAgICAtPiAtMC4wCitteGd4NDQ2IG1heG1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwCitteGd4NDQ3IG1heG1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwCitteGd4NDQ4IG1heG1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKK214Z3g0NDkgbWF4bWFnIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCitteGd4NDUwIG1heG1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEuMAorbXhneDQ1MSBtYXhtYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK214Z3g0NTMgbWF4bWFnIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkKKy0tIGxhcmdpZXMKK214Z3g0NjAgbWF4bWFnICAxMDAwICAgMUUrMyAgICAtPiAgMUUrMworbXhneDQ2MSBtYXhtYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxRSszCitteGd4NDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKK214Z3g0NjMgbWF4bWFnICAxRSszICAtMTAwMCAgICAtPiAgMUUrMworbXhneDQ2NCBtYXhtYWcgLTEwMDAgICAxRSszICAgIC0+ICAxRSszCitteGd4NDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK214Z3g0NjYgbWF4bWFnIC0xMDAwICAtMUUrMyAgICAtPiAtMTAwMAorbXhneDQ2NyBtYXhtYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCisKKy0tIHJvdW5kaW5nIChyZXN1bHRzIHRyZWF0ZWQgYXMgdGhvdWdoIHBsdXMpCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCisKK214Z3g0NzAgbWF4bWFnICAxICAgICAgLjUgICAgIC0+ICAxCitteGd4NDcxIG1heG1hZyAgMTAgICAgIDUgICAgICAtPiAgMTAKK214Z3g0NzIgbWF4bWFnICAxMDAgICAgNTAgICAgIC0+ICAxMDAKK214Z3g0NzMgbWF4bWFnICAxMDAwICAgNTAwICAgIC0+ICAxLjAwRSszIFJvdW5kZWQKK214Z3g0NzQgbWF4bWFnICAxMDAwMCAgNTAwMCAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKK214Z3g0NzUgbWF4bWFnICA2ICAgICAgLjUgICAgIC0+ICA2CitteGd4NDc2IG1heG1hZyAgNjYgICAgIDUgICAgICAtPiAgNjYKK214Z3g0NzcgbWF4bWFnICA2NjYgICAgNTAgICAgIC0+ICA2NjYKK214Z3g0NzggbWF4bWFnICA2NjY2ICAgNTAwICAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAorbXhneDQ3OSBtYXhtYWcgIDY2NjY2ICA1MDAwICAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0CitteGd4NDgwIG1heG1hZyAgMzMzMzMgIDUwMDAgICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKK214Z3g0ODEgbWF4bWFnICAuNSAgICAgMSAgICAgIC0+ICAxCitteGd4NDgyIG1heG1hZyAgLjUgICAgIDEwICAgICAtPiAgMTAKK214Z3g0ODMgbWF4bWFnICAuNSAgICAgMTAwICAgIC0+ICAxMDAKK214Z3g0ODQgbWF4bWFnICAuNSAgICAgMTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQKK214Z3g0ODUgbWF4bWFnICAuNSAgICAgMTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKK214Z3g0ODYgbWF4bWFnICAuNSAgICAgNiAgICAgIC0+ICA2CitteGd4NDg3IG1heG1hZyAgLjUgICAgIDY2ICAgICAtPiAgNjYKK214Z3g0ODggbWF4bWFnICAuNSAgICAgNjY2ICAgIC0+ICA2NjYKK214Z3g0ODkgbWF4bWFnICAuNSAgICAgNjY2NiAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAorbXhneDQ5MCBtYXhtYWcgIC41ICAgICA2NjY2NiAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0CitteGd4NDkxIG1heG1hZyAgLjUgICAgIDMzMzMzICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKKworLS0gb3ZlcmZsb3cgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDMKK214Z3g1MDAgbWF4bWFnIDkuOTk5RSs5OTk5OTk5OTkgIDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbXhneDUwMSBtYXhtYWcgLTkuOTk5RSs5OTk5OTk5OTkgMCAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorbXhneDUxMCBtYXhtYWcgIDEuMDBFLTk5OSAgICAgICAwICAtPiAgIDEuMDBFLTk5OQorbXhneDUxMSBtYXhtYWcgIDAuMUUtOTk5ICAgICAgICAwICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwKK214Z3g1MTIgbWF4bWFnICAwLjEwRS05OTkgICAgICAgMCAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsCitteGd4NTEzIG1heG1hZyAgMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitteGd4NTE0IG1heG1hZyAgMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIE5taW4KK214Z3g1MTUgbWF4bWFnICAwLjk5OUUtOTk5ICAgICAgMCAgLT4gICAxLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK214Z3g1MTYgbWF4bWFnICAwLjA5OUUtOTk5ICAgICAgMCAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK214Z3g1MTcgbWF4bWFnICAwLjAwOUUtOTk5ICAgICAgMCAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK214Z3g1MTggbWF4bWFnICAwLjAwMUUtOTk5ICAgICAgMCAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbXhneDUxOSBtYXhtYWcgIDAuMDAwOUUtOTk5ICAgICAwICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitteGd4NTIwIG1heG1hZyAgMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworbXhneDUzMCBtYXhtYWcgLTEuMDBFLTk5OSAgICAgICAwICAtPiAgLTEuMDBFLTk5OQorbXhneDUzMSBtYXhtYWcgLTAuMUUtOTk5ICAgICAgICAwICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwKK214Z3g1MzIgbWF4bWFnIC0wLjEwRS05OTkgICAgICAgMCAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsCitteGd4NTMzIG1heG1hZyAtMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitteGd4NTM0IG1heG1hZyAtMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIC1ObWluCitteGd4NTM1IG1heG1hZyAtMC45OTlFLTk5OSAgICAgIDAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTM2IG1heG1hZyAtMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTM3IG1heG1hZyAtMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAtMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTM4IG1heG1hZyAtMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK214Z3g1MzkgbWF4bWFnIC0wLjAwMDlFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbXhneDU0MCBtYXhtYWcgLTAuMDAwMUUtOTk5ICAgICAwICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIE51bGwgdGVzdHMKK214Z3g5MDAgbWF4bWFnIDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK214Z3g5MDEgbWF4bWFnICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW5tYWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW5tYWcuZGVjVGVzdAppbmRleCA5ZTU2MjMzLi5mMWFjMzg1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWlubWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbm1hZy5kZWNUZXN0CkBAIC0xLDM5MCArMSwzOTAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIG1pbm1hZy5kZWNUZXN0IC0tIGRlY2ltYWwgbWluaW11bSBieSBtYWduaXR1ZGUgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCi0tLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotbW5neDAwMSBtaW5tYWcgIC0yICAtMiAgLT4gLTINCi1tbmd4MDAyIG1pbm1hZyAgLTIgIC0xICAtPiAtMQ0KLW1uZ3gwMDMgbWlubWFnICAtMiAgIDAgIC0+ICAwDQotbW5neDAwNCBtaW5tYWcgIC0yICAgMSAgLT4gIDENCi1tbmd4MDA1IG1pbm1hZyAgLTIgICAyICAtPiAtMg0KLW1uZ3gwMDYgbWlubWFnICAtMSAgLTIgIC0+IC0xDQotbW5neDAwNyBtaW5tYWcgIC0xICAtMSAgLT4gLTENCi1tbmd4MDA4IG1pbm1hZyAgLTEgICAwICAtPiAgMA0KLW1uZ3gwMDkgbWlubWFnICAtMSAgIDEgIC0+IC0xDQotbW5neDAxMCBtaW5tYWcgIC0xICAgMiAgLT4gLTENCi1tbmd4MDExIG1pbm1hZyAgIDAgIC0yICAtPiAgMA0KLW1uZ3gwMTIgbWlubWFnICAgMCAgLTEgIC0+ICAwDQotbW5neDAxMyBtaW5tYWcgICAwICAgMCAgLT4gIDANCi1tbmd4MDE0IG1pbm1hZyAgIDAgICAxICAtPiAgMA0KLW1uZ3gwMTUgbWlubWFnICAgMCAgIDIgIC0+ICAwDQotbW5neDAxNiBtaW5tYWcgICAxICAtMiAgLT4gIDENCi1tbmd4MDE3IG1pbm1hZyAgIDEgIC0xICAtPiAtMQ0KLW1uZ3gwMTggbWlubWFnICAgMSAgIDAgIC0+ICAwDQotbW5neDAxOSBtaW5tYWcgICAxICAgMSAgLT4gIDENCi1tbmd4MDIwIG1pbm1hZyAgIDEgICAyICAtPiAgMQ0KLW1uZ3gwMjEgbWlubWFnICAgMiAgLTIgIC0+IC0yDQotbW5neDAyMiBtaW5tYWcgICAyICAtMSAgLT4gLTENCi1tbmd4MDIzIG1pbm1hZyAgIDIgICAwICAtPiAgMA0KLW1uZ3gwMjUgbWlubWFnICAgMiAgIDEgIC0+ICAxDQotbW5neDAyNiBtaW5tYWcgICAyICAgMiAgLT4gIDINCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLW1uZ3gwMzAgbWlubWFnICAgMCAgICAgMCAgIC0+ICAwDQotbW5neDAzMSBtaW5tYWcgICAwICAgIC0wICAgLT4gLTANCi1tbmd4MDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wDQotbW5neDAzMyBtaW5tYWcgICAwICAgICAwLjAgLT4gIDAuMA0KLW1uZ3gwMzQgbWlubWFnICAtMCAgICAgMCAgIC0+IC0wDQotbW5neDAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTANCi1tbmd4MDM2IG1pbm1hZyAgLTAgICAgLTAuMCAtPiAtMA0KLW1uZ3gwMzcgbWlubWFnICAtMCAgICAgMC4wIC0+IC0wDQotbW5neDAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMA0KLW1uZ3gwMzkgbWlubWFnICAgMC4wICAtMCAgIC0+IC0wDQotbW5neDA0MCBtaW5tYWcgICAwLjAgIC0wLjAgLT4gLTAuMA0KLW1uZ3gwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjANCi1tbmd4MDQyIG1pbm1hZyAgLTAuMCAgIDAgICAtPiAtMC4wDQotbW5neDA0MyBtaW5tYWcgIC0wLjAgIC0wICAgLT4gLTANCi1tbmd4MDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wDQotbW5neDA0NSBtaW5tYWcgIC0wLjAgICAwLjAgLT4gLTAuMA0KLQ0KLW1uZ3gwNDYgbWlubWFnICAgMEUxICAtMEUxIC0+IC0wRSsxDQotbW5neDA0NyBtaW5tYWcgIC0wRTEgICAwRTIgLT4gLTBFKzENCi1tbmd4MDQ4IG1pbm1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMQ0KLW1uZ3gwNDkgbWlubWFnICAgMEUxICAgMEUyIC0+ICAwRSsxDQotbW5neDA1MCBtaW5tYWcgIC0wRTMgIC0wRTIgLT4gLTBFKzMNCi1tbmd4MDUxIG1pbm1hZyAgLTBFMiAgLTBFMyAtPiAtMEUrMw0KLQ0KLS0tIFNwZWNpYWxzDQotcHJlY2lzaW9uOiA5DQotbW5neDA5MCBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLW1uZ3gwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMA0KLW1uZ3gwOTIgbWlubWFnICBJbmYgIC0xICAgICAtPiAtMQ0KLW1uZ3gwOTMgbWlubWFnICBJbmYgIC0wICAgICAtPiAtMA0KLW1uZ3gwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMA0KLW1uZ3gwOTUgbWlubWFnICBJbmYgICAxICAgICAtPiAgMQ0KLW1uZ3gwOTYgbWlubWFnICBJbmYgICAxMDAwICAtPiAgMTAwMA0KLW1uZ3gwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1tbmd4MDk4IG1pbm1hZyAtMTAwMCAgSW5mICAgLT4gLTEwMDANCi1tbmd4MDk5IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotbW5neDEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xDQotbW5neDEwMSBtaW5tYWcgLTAgICAgIEluZiAgIC0+IC0wDQotbW5neDEwMiBtaW5tYWcgIDAgICAgIEluZiAgIC0+ICAwDQotbW5neDEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxDQotbW5neDEwNCBtaW5tYWcgIDEwMDAgIEluZiAgIC0+ICAxMDAwDQotbW5neDEwNSBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLW1uZ3gxMjAgbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1tbmd4MTIxIG1pbm1hZyAtSW5mICAtMTAwMCAgLT4gLTEwMDANCi1tbmd4MTIyIG1pbm1hZyAtSW5mICAtMSAgICAgLT4gLTENCi1tbmd4MTIzIG1pbm1hZyAtSW5mICAtMCAgICAgLT4gLTANCi1tbmd4MTI0IG1pbm1hZyAtSW5mICAgMCAgICAgLT4gIDANCi1tbmd4MTI1IG1pbm1hZyAtSW5mICAgMSAgICAgLT4gIDENCi1tbmd4MTI2IG1pbm1hZyAtSW5mICAgMTAwMCAgLT4gIDEwMDANCi1tbmd4MTI3IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotbW5neDEyOCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLW1uZ3gxMjkgbWlubWFnIC0xMDAwIC1JbmYgICAtPiAtMTAwMA0KLW1uZ3gxMzAgbWlubWFnIC0xICAgIC1JbmYgICAtPiAtMQ0KLW1uZ3gxMzEgbWlubWFnIC0wICAgIC1JbmYgICAtPiAtMA0KLW1uZ3gxMzIgbWlubWFnICAwICAgIC1JbmYgICAtPiAgMA0KLW1uZ3gxMzMgbWlubWFnICAxICAgIC1JbmYgICAtPiAgMQ0KLW1uZ3gxMzQgbWlubWFnICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KLW1uZ3gxMzUgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi0NCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCi1tbmd4MTQxIG1pbm1hZyAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQ0KLW1uZ3gxNDIgbWlubWFnICBOYU4gLTEwMDAgICAtPiAgLTEwMDANCi1tbmd4MTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xDQotbW5neDE0NCBtaW5tYWcgIE5hTiAtMCAgICAgIC0+ICAtMA0KLW1uZ3gxNDUgbWlubWFnICBOYU4gIDAgICAgICAtPiAgMA0KLW1uZ3gxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQ0KLW1uZ3gxNDcgbWlubWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KLW1uZ3gxNDggbWlubWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkNCi1tbmd4MTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTg0KLW1uZ3gxNTAgbWlubWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCi1tbmd4MTUxIG1pbm1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDANCi1tbmd4MTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTENCi1tbmd4MTUzIG1pbm1hZyAtMCAgICBOYU4gICAgLT4gLTANCi1tbmd4MTU0IG1pbm1hZyAgMCAgIC1OYU4gICAgLT4gIDANCi1tbmd4MTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDENCi1tbmd4MTU2IG1pbm1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDANCi1tbmd4MTU3IG1pbm1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5DQotDQotbW5neDE2MSBtaW5tYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE2MiBtaW5tYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE2MyBtaW5tYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE2NCBtaW5tYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE2NSBtaW5tYWcgLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE2NiBtaW5tYWcgLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE2NyBtaW5tYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE2OCBtaW5tYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE2OSBtaW5tYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE3MCBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE3MSBtaW5tYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE3MiBtaW5tYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE3MyBtaW5tYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE3NCBtaW5tYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE3NSBtaW5tYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE3NiBtaW5tYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE3NyBtaW5tYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE3OCBtaW5tYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE3OSBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLW1uZ3gxODEgbWlubWFnICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLW1uZ3gxODIgbWlubWFnIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwDQotbW5neDE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotbW5neDE4NCBtaW5tYWcgIE5hTjEgICAgTmFONTQgLT4gIE5hTjENCi1tbmd4MTg1IG1pbm1hZyAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjINCi1tbmd4MTg2IG1pbm1hZyAtTmFOMyAgICBOYU42ICAtPiAtTmFOMw0KLW1uZ3gxODcgbWlubWFnIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NA0KLQ0KLW1uZ3gxODggbWlubWFnIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQ0KLW1uZ3gxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5DQotbW5neDE5MCBtaW5tYWcgIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5DQotDQotbW5neDE5MSBtaW5tYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1tbmd4MTkzIG1pbm1hZyAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE5NCBtaW5tYWcgIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1tbmd4MTk2IG1pbm1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE5NyBtaW5tYWcgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1tbmd4MTk5IG1pbm1hZyAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcm91bmRpbmcgY2hlY2tzIC0tIGNob3NlbiBpcyByb3VuZGVkLCBvciBub3QNCi1tYXhFeHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1wcmVjaXNpb246IDkNCi1tbmd4MjAxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQ0KLW1uZ3gyMDIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxDQotbW5neDIwMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDENCi1tbmd4MjA0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQ0KLW1uZ3gyMDUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxDQotbW5neDIwNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDENCi1tbmd4MjA3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQ0KLW1uZ3gyMDggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxDQotbW5neDIwOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDENCi1tbmd4MjEwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQ0KLW1uZ3gyMTEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxDQotbW5neDIxMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDENCi1tbmd4MjEzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQ0KLW1uZ3gyMTQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQotbW5neDIxNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDENCi1tbmd4MjE2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLW1uZ3gyMTcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxDQotbW5neDIxOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDENCi0NCi1wcmVjaXNpb246IDE1DQotbW5neDIyMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDENCi1tbmd4MjIyIG1pbm1hZyAxIC0xMjM0NTY3ODAwMCAgLT4gMQ0KLW1uZ3gyMjMgbWlubWFnIC0xMjM0NTY3ODAwICAxICAtPiAxDQotbW5neDIyNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDENCi1tbmd4MjI1IG1pbm1hZyAtMTIzNDU2Nzg5MCAgMSAgLT4gMQ0KLW1uZ3gyMjYgbWlubWFnIDEgLTEyMzQ1Njc4OTAgICAtPiAxDQotbW5neDIyNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDENCi1tbmd4MjI4IG1pbm1hZyAxIC0xMjM0NTY3ODkxICAgLT4gMQ0KLW1uZ3gyMjkgbWlubWFnIC0xMjM0NTY3ODkwMSAxICAtPiAxDQotbW5neDIzMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDENCi1tbmd4MjMxIG1pbm1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gMQ0KLW1uZ3gyMzIgbWlubWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAxDQotbW5neDIzMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDENCi1tbmd4MjM0IG1pbm1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLW1uZ3gyMzUgbWlubWFnIDEyMzQ1Njc4OTAxIDEgICAtPiAxDQotbW5neDIzNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDENCi1tbmd4MjM3IG1pbm1hZyAxMjM0NTY3ODk2ICAxICAgLT4gMQ0KLW1uZ3gyMzggbWlubWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQotDQotLS0gZnJvbSBleGFtcGxlcw0KLW1uZ3gyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJw0KLW1uZ3gyODEgbWlubWFnICctMTAnICczJyAgLT4gICczJw0KLW1uZ3gyODIgbWlubWFnICcxLjAnICcxJyAgLT4gICcxLjAnDQotbW5neDI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcNCi1tbmd4Mjg0IG1pbm1hZyAnNycgJ05hTicgIC0+ICAnNycNCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIHN1Ym5vcm1hbCByZXN1bHRzIFtpbnB1dHNdIG5vdyBhbGxvd2VkDQotbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5OTk5OTk5DQotbW5neDMzMCBtaW5tYWcgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLTlFKzk5OTk5OTk5OSAtPiAtMS4yMzQ1Njc4OTAxMjM0NQ0KLW1uZ3gzMzEgbWlubWFnIC05RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gLTEuMjM0NTY3ODkwMTIzNDUNCi1tbmd4MzMyIG1pbm1hZyAtMC4xMDAgLTlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkNCi1tbmd4MzMzIG1pbm1hZyAtOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkNCi1tbmd4MzM1IG1pbm1hZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtOUUrOTk5OTk5OTk5IC0+ICAxLjIzNDU2Nzg5MDEyMzQ1DQotbW5neDMzNiBtaW5tYWcgLTlFKzk5OTk5OTk5OSAxLjIzNDU2Nzg5MDEyMzQ1RS0wICAtPiAgMS4yMzQ1Njc4OTAxMjM0NQ0KLW1uZ3gzMzcgbWlubWFnICswLjEwMCAtOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQ0KLW1uZ3gzMzggbWlubWFnIC05RS05OTk5OTk5OTkgMC4xMDAgICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQ0KLQ0KLW1uZ3gzMzkgbWlubWFnIC0xZS01OTk5OTk5OTkgLTFlLTQwMDAwMDAwMSAgIC0+ICAtMUUtNTk5OTk5OTk5DQotbW5neDM0MCBtaW5tYWcgLTFlLTU5OTk5OTk5OSAtMWUtNDAwMDAwMDAwICAgLT4gIC0xRS01OTk5OTk5OTkNCi1tbmd4MzQxIG1pbm1hZyAtMWUtNjAwMDAwMDAwIC0xZS00MDAwMDAwMDAgICAtPiAgLTFFLTYwMDAwMDAwMA0KLW1uZ3gzNDIgbWlubWFnIC05ZS05OTk5OTk5OTggLTAuMDEgICAgICAgICAgIC0+ICAtOUUtOTk5OTk5OTk4DQotbW5neDM0MyBtaW5tYWcgLTllLTk5OTk5OTk5OCAtMC4xICAgICAgICAgICAgLT4gIC05RS05OTk5OTk5OTgNCi1tbmd4MzQ0IG1pbm1hZyAtMC4wMSAgICAgICAgIC05ZS05OTk5OTk5OTggICAtPiAgLTlFLTk5OTk5OTk5OA0KLW1uZ3gzNDUgbWlubWFnIC0xZTU5OTk5OTk5OSAgLTFlNDAwMDAwMDAxICAgIC0+ICAtMUUrNDAwMDAwMDAxDQotbW5neDM0NiBtaW5tYWcgLTFlNTk5OTk5OTk5ICAtMWU0MDAwMDAwMDAgICAgLT4gIC0xRSs0MDAwMDAwMDANCi1tbmd4MzQ3IG1pbm1hZyAtMWU2MDAwMDAwMDAgIC0xZTQwMDAwMDAwMCAgICAtPiAgLTFFKzQwMDAwMDAwMA0KLW1uZ3gzNDggbWlubWFnIC05ZTk5OTk5OTk5OCAgLTEwMCAgICAgICAgICAgIC0+ICAtMTAwDQotbW5neDM0OSBtaW5tYWcgLTllOTk5OTk5OTk4ICAtMTAgICAgICAgICAgICAgLT4gIC0xMA0KLW1uZ3gzNTAgbWlubWFnIC0xMDAgICAgICAgICAgLTllOTk5OTk5OTk4ICAgIC0+ICAtMTAwDQotLS0gc2lnbnMNCi1tbmd4MzUxIG1pbm1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzQxMTExMTExMQ0KLW1uZ3gzNTIgbWlubWFnIC0xZSs3Nzc3Nzc3NzcgKzFlKzQxMTExMTExMSAtPiAgMUUrNDExMTExMTExDQotbW5neDM1MyBtaW5tYWcgKzFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xRSs0MTExMTExMTENCi1tbmd4MzU0IG1pbm1hZyArMWUrNzc3Nzc3Nzc3ICsxZSs0MTExMTExMTEgLT4gIDFFKzQxMTExMTExMQ0KLW1uZ3gzNTUgbWlubWFnIC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNzc3Nzc3Nzc3DQotbW5neDM1NiBtaW5tYWcgLTFlLTc3Nzc3Nzc3NyArMWUtNDExMTExMTExIC0+IC0xRS03Nzc3Nzc3NzcNCi1tbmd4MzU3IG1pbm1hZyArMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDFFLTc3Nzc3Nzc3Nw0KLW1uZ3gzNTggbWlubWFnICsxZS03Nzc3Nzc3NzcgKzFlLTQxMTExMTExMSAtPiAgMUUtNzc3Nzc3Nzc3DQotDQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UNCi0tLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQ0KLW1uZ3g0MDEgbWlubWFnICBJbmYgICAgMS4xICAgICAtPiAgMS4xDQotbW5neDQwMiBtaW5tYWcgIDEuMSAgICAxICAgICAgIC0+ICAxDQotbW5neDQwMyBtaW5tYWcgIDEgICAgICAxLjAgICAgIC0+ICAxLjANCi1tbmd4NDA0IG1pbm1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQ0KLW1uZ3g0MDUgbWlubWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMA0KLW1uZ3g0MDYgbWlubWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDANCi1tbmd4NDA3IG1pbm1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDANCi1tbmd4NDA4IG1pbm1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KLW1uZ3g0MDkgbWlubWFnICAwLjAgICAtMCAgICAgICAtPiAtMA0KLW1uZ3g0MTAgbWlubWFnICAwLjAgICAtMC4wICAgICAtPiAtMC4wDQotbW5neDQxMSBtaW5tYWcgIDAuMDAgIC0wLjAgICAgIC0+IC0wLjANCi1tbmd4NDEyIG1pbm1hZyAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDANCi1tbmd4NDEzIG1pbm1hZyAgMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KLW1uZ3g0MTQgbWlubWFnICAwICAgICAtMCAgICAgICAtPiAtMA0KLW1uZ3g0MTUgbWlubWFnIC0wLjAgICAtMCAgICAgICAtPiAtMA0KLW1uZ3g0MTYgbWlubWFnIC0wICAgICAtMC4xMDAgICAtPiAtMA0KLW1uZ3g0MTcgbWlubWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMA0KLW1uZ3g0MTggbWlubWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xDQotbW5neDQxOSBtaW5tYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0wLjENCi1tbmd4NDIwIG1pbm1hZyAtMS4wICAgLTEgICAgICAgLT4gLTENCi1tbmd4NDIxIG1pbm1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTENCi1tbmd4NDIzIG1pbm1hZyAtMS4xICAgLUluZiAgICAgLT4gLTEuMQ0KLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KLW1uZ3g0MzEgbWlubWFnICAxLjEgICAgSW5mICAgICAtPiAgMS4xDQotbW5neDQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxDQotbW5neDQzMyBtaW5tYWcgIDEuMCAgICAxICAgICAgIC0+ICAxLjANCi1tbmd4NDM0IG1pbm1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQ0KLW1uZ3g0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMA0KLW1uZ3g0MzYgbWlubWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDANCi1tbmd4NDM3IG1pbm1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDANCi1tbmd4NDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMA0KLW1uZ3g0MzkgbWlubWFnIC0wICAgICAgMC4wICAgICAtPiAtMA0KLW1uZ3g0NDAgbWlubWFnIC0wLjAgICAgMC4wICAgICAtPiAtMC4wDQotbW5neDQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjANCi1tbmd4NDQyIG1pbm1hZyAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDANCi1tbmd4NDQzIG1pbm1hZyAtMC4wICAgIDAgICAgICAgLT4gLTAuMA0KLW1uZ3g0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMA0KLW1uZ3g0NDUgbWlubWFnIC0wICAgICAtMC4wICAgICAtPiAtMA0KLW1uZ3g0NDYgbWlubWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMA0KLW1uZ3g0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMA0KLW1uZ3g0NDggbWlubWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xDQotbW5neDQ0OSBtaW5tYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0wLjENCi1tbmd4NDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTENCi1tbmd4NDUxIG1pbm1hZyAtMS4xICAgLTEgICAgICAgLT4gLTENCi1tbmd4NDUzIG1pbm1hZyAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQ0KLS0tIGxhcmdpZXMNCi1tbmd4NDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDANCi1tbmd4NDYxIG1pbm1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCi1tbmd4NDYyIG1pbm1hZyAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMNCi1tbmd4NDYzIG1pbm1hZyAgMUUrMyAgLTEwMDAgICAgLT4gLTEwMDANCi1tbmd4NDY0IG1pbm1hZyAtMTAwMCAgIDFFKzMgICAgLT4gLTEwMDANCi1tbmd4NDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMNCi1tbmd4NDY2IG1pbm1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMNCi1tbmd4NDY3IG1pbm1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTFFKzMNCi0NCi0tLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQ0KLW1heGV4cG9uZW50OiA5OTk5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OTk5OQ0KLXByZWNpc2lvbjogMw0KLQ0KLW1uZ3g0NzAgbWlubWFnICAxICAgICAgNSAgICAgIC0+ICAxDQotbW5neDQ3MSBtaW5tYWcgIDEwICAgICA1MCAgICAgLT4gIDEwDQotbW5neDQ3MiBtaW5tYWcgIDEwMCAgICA1MDAgICAgLT4gIDEwMA0KLW1uZ3g0NzMgbWlubWFnICAxMDAwICAgNTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQNCi1tbmd4NDc0IG1pbm1hZyAgMTAwMDAgIDUwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkDQotbW5neDQ3NSBtaW5tYWcgIDYgICAgICA1MCAgICAgLT4gIDYNCi1tbmd4NDc2IG1pbm1hZyAgNjYgICAgIDUwMCAgICAtPiAgNjYNCi1tbmd4NDc3IG1pbm1hZyAgNjY2ICAgIDUwMDAgICAtPiAgNjY2DQotbW5neDQ3OCBtaW5tYWcgIDY2NjYgICA1MDAwMCAgLT4gIDYuNjdFKzMgUm91bmRlZCBJbmV4YWN0DQotbW5neDQ3OSBtaW5tYWcgIDY2NjY2ICA1MDAwMDAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0DQotbW5neDQ4MCBtaW5tYWcgIDMzMzMzICA1MDAwMDAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0DQotbW5neDQ4MSBtaW5tYWcgIDc1NDAxICAxICAgICAgLT4gIDENCi1tbmd4NDgyIG1pbm1hZyAgNzU0MDIgIDEwICAgICAtPiAgMTANCi1tbmd4NDgzIG1pbm1hZyAgNzU0MDMgIDEwMCAgICAtPiAgMTAwDQotbW5neDQ4NCBtaW5tYWcgIDc1NDA0ICAxMDAwICAgLT4gIDEuMDBFKzMgUm91bmRlZA0KLW1uZ3g0ODUgbWlubWFnICA3NTQwNSAgMTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQNCi1tbmd4NDg2IG1pbm1hZyAgNzU0MDYgIDYgICAgICAtPiAgNg0KLW1uZ3g0ODcgbWlubWFnICA3NTQwNyAgNjYgICAgIC0+ICA2Ng0KLW1uZ3g0ODggbWlubWFnICA3NTQwOCAgNjY2ICAgIC0+ICA2NjYNCi1tbmd4NDg5IG1pbm1hZyAgNzU0MDkgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QNCi1tbmd4NDkwIG1pbm1hZyAgNzU0MTAgIDY2NjY2ICAtPiAgNi42N0UrNCBSb3VuZGVkIEluZXhhY3QNCi1tbmd4NDkxIG1pbm1hZyAgNzU0MTEgIDMzMzMzICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QNCi0NCi0NCi0tLSBvdmVyZmxvdyB0ZXN0cw0KLW1heGV4cG9uZW50OiA5OTk5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OTk5OQ0KLXByZWNpc2lvbjogMw0KLW1uZ3g1MDAgbWlubWFnIDkuOTk5RSs5OTk5OTk5OTkgIDAgLT4gIDANCi1tbmd4NTAxIG1pbm1hZyAtOS45OTlFKzk5OTk5OTk5OSAwIC0+ICAwDQotDQotLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93DQotcHJlY2lzaW9uOiAzDQotbWF4ZXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotbW5neDUxMCBtaW5tYWcgIDEuMDBFLTk5OSAgICAgICAwICAtPiAgIDANCi1tbmd4NTExIG1pbm1hZyAgMC4xRS05OTkgICAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MTIgbWlubWFnICAwLjEwRS05OTkgICAgICAgMCAgLT4gICAwDQotbW5neDUxMyBtaW5tYWcgIDAuMTAwRS05OTkgICAgICAwICAtPiAgIDANCi1tbmd4NTE0IG1pbm1hZyAgMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MTUgbWlubWFnICAwLjk5OUUtOTk5ICAgICAgMCAgLT4gICAwDQotbW5neDUxNiBtaW5tYWcgIDAuMDk5RS05OTkgICAgICAwICAtPiAgIDANCi1tbmd4NTE3IG1pbm1hZyAgMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MTggbWlubWFnICAwLjAwMUUtOTk5ICAgICAgMCAgLT4gICAwDQotbW5neDUxOSBtaW5tYWcgIDAuMDAwOUUtOTk5ICAgICAwICAtPiAgIDANCi1tbmd4NTIwIG1pbm1hZyAgMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMA0KLQ0KLW1uZ3g1MzAgbWlubWFnIC0xLjAwRS05OTkgICAgICAgMCAgLT4gICAwDQotbW5neDUzMSBtaW5tYWcgLTAuMUUtOTk5ICAgICAgICAwICAtPiAgIDANCi1tbmd4NTMyIG1pbm1hZyAtMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MzMgbWlubWFnIC0wLjEwMEUtOTk5ICAgICAgMCAgLT4gICAwDQotbW5neDUzNCBtaW5tYWcgLTAuMDFFLTk5OSAgICAgICAwICAtPiAgIDANCi1tbmd4NTM1IG1pbm1hZyAtMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MzYgbWlubWFnIC0wLjA5OUUtOTk5ICAgICAgMCAgLT4gICAwDQotbW5neDUzNyBtaW5tYWcgLTAuMDA5RS05OTkgICAgICAwICAtPiAgIDANCi1tbmd4NTM4IG1pbm1hZyAtMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MzkgbWlubWFnIC0wLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwDQotbW5neDU0MCBtaW5tYWcgLTAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDANCi0NCi0NCi0tLSBOdWxsIHRlc3RzDQotbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1tbmc5MDEgbWlubWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbWlubWFnLmRlY1Rlc3QgLS0gZGVjaW1hbCBtaW5pbXVtIGJ5IG1hZ25pdHVkZSAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBzYW5pdHkgY2hlY2tzCittbmd4MDAxIG1pbm1hZyAgLTIgIC0yICAtPiAtMgorbW5neDAwMiBtaW5tYWcgIC0yICAtMSAgLT4gLTEKK21uZ3gwMDMgbWlubWFnICAtMiAgIDAgIC0+ICAwCittbmd4MDA0IG1pbm1hZyAgLTIgICAxICAtPiAgMQorbW5neDAwNSBtaW5tYWcgIC0yICAgMiAgLT4gLTIKK21uZ3gwMDYgbWlubWFnICAtMSAgLTIgIC0+IC0xCittbmd4MDA3IG1pbm1hZyAgLTEgIC0xICAtPiAtMQorbW5neDAwOCBtaW5tYWcgIC0xICAgMCAgLT4gIDAKK21uZ3gwMDkgbWlubWFnICAtMSAgIDEgIC0+IC0xCittbmd4MDEwIG1pbm1hZyAgLTEgICAyICAtPiAtMQorbW5neDAxMSBtaW5tYWcgICAwICAtMiAgLT4gIDAKK21uZ3gwMTIgbWlubWFnICAgMCAgLTEgIC0+ICAwCittbmd4MDEzIG1pbm1hZyAgIDAgICAwICAtPiAgMAorbW5neDAxNCBtaW5tYWcgICAwICAgMSAgLT4gIDAKK21uZ3gwMTUgbWlubWFnICAgMCAgIDIgIC0+ICAwCittbmd4MDE2IG1pbm1hZyAgIDEgIC0yICAtPiAgMQorbW5neDAxNyBtaW5tYWcgICAxICAtMSAgLT4gLTEKK21uZ3gwMTggbWlubWFnICAgMSAgIDAgIC0+ICAwCittbmd4MDE5IG1pbm1hZyAgIDEgICAxICAtPiAgMQorbW5neDAyMCBtaW5tYWcgICAxICAgMiAgLT4gIDEKK21uZ3gwMjEgbWlubWFnICAgMiAgLTIgIC0+IC0yCittbmd4MDIyIG1pbm1hZyAgIDIgIC0xICAtPiAtMQorbW5neDAyMyBtaW5tYWcgICAyICAgMCAgLT4gIDAKK21uZ3gwMjUgbWlubWFnICAgMiAgIDEgIC0+ICAxCittbmd4MDI2IG1pbm1hZyAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworbW5neDAzMCBtaW5tYWcgICAwICAgICAwICAgLT4gIDAKK21uZ3gwMzEgbWlubWFnICAgMCAgICAtMCAgIC0+IC0wCittbmd4MDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wCittbmd4MDMzIG1pbm1hZyAgIDAgICAgIDAuMCAtPiAgMC4wCittbmd4MDM0IG1pbm1hZyAgLTAgICAgIDAgICAtPiAtMAorbW5neDAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTAKK21uZ3gwMzYgbWlubWFnICAtMCAgICAtMC4wIC0+IC0wCittbmd4MDM3IG1pbm1hZyAgLTAgICAgIDAuMCAtPiAtMAorbW5neDAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMAorbW5neDAzOSBtaW5tYWcgICAwLjAgIC0wICAgLT4gLTAKK21uZ3gwNDAgbWlubWFnICAgMC4wICAtMC4wIC0+IC0wLjAKK21uZ3gwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjAKK21uZ3gwNDIgbWlubWFnICAtMC4wICAgMCAgIC0+IC0wLjAKK21uZ3gwNDMgbWlubWFnICAtMC4wICAtMCAgIC0+IC0wCittbmd4MDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCittbmd4MDQ1IG1pbm1hZyAgLTAuMCAgIDAuMCAtPiAtMC4wCisKK21uZ3gwNDYgbWlubWFnICAgMEUxICAtMEUxIC0+IC0wRSsxCittbmd4MDQ3IG1pbm1hZyAgLTBFMSAgIDBFMiAtPiAtMEUrMQorbW5neDA0OCBtaW5tYWcgICAwRTIgICAwRTEgLT4gIDBFKzEKK21uZ3gwNDkgbWlubWFnICAgMEUxICAgMEUyIC0+ICAwRSsxCittbmd4MDUwIG1pbm1hZyAgLTBFMyAgLTBFMiAtPiAtMEUrMworbW5neDA1MSBtaW5tYWcgIC0wRTIgIC0wRTMgLT4gLTBFKzMKKworLS0gU3BlY2lhbHMKK3ByZWNpc2lvbjogOQorbW5neDA5MCBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5neDA5MSBtaW5tYWcgIEluZiAgLTEwMDAgIC0+IC0xMDAwCittbmd4MDkyIG1pbm1hZyAgSW5mICAtMSAgICAgLT4gLTEKK21uZ3gwOTMgbWlubWFnICBJbmYgIC0wICAgICAtPiAtMAorbW5neDA5NCBtaW5tYWcgIEluZiAgIDAgICAgIC0+ICAwCittbmd4MDk1IG1pbm1hZyAgSW5mICAgMSAgICAgLT4gIDEKK21uZ3gwOTYgbWlubWFnICBJbmYgICAxMDAwICAtPiAgMTAwMAorbW5neDA5NyBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorbW5neDA5OCBtaW5tYWcgLTEwMDAgIEluZiAgIC0+IC0xMDAwCittbmd4MDk5IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5Cittbmd4MTAwIG1pbm1hZyAtMSAgICAgSW5mICAgLT4gLTEKK21uZ3gxMDEgbWlubWFnIC0wICAgICBJbmYgICAtPiAtMAorbW5neDEwMiBtaW5tYWcgIDAgICAgIEluZiAgIC0+ICAwCittbmd4MTAzIG1pbm1hZyAgMSAgICAgSW5mICAgLT4gIDEKK21uZ3gxMDQgbWlubWFnICAxMDAwICBJbmYgICAtPiAgMTAwMAorbW5neDEwNSBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCittbmd4MTIwIG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Cittbmd4MTIxIG1pbm1hZyAtSW5mICAtMTAwMCAgLT4gLTEwMDAKK21uZ3gxMjIgbWlubWFnIC1JbmYgIC0xICAgICAtPiAtMQorbW5neDEyMyBtaW5tYWcgLUluZiAgLTAgICAgIC0+IC0wCittbmd4MTI0IG1pbm1hZyAtSW5mICAgMCAgICAgLT4gIDAKK21uZ3gxMjUgbWlubWFnIC1JbmYgICAxICAgICAtPiAgMQorbW5neDEyNiBtaW5tYWcgLUluZiAgIDEwMDAgIC0+ICAxMDAwCittbmd4MTI3IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5Cittbmd4MTI4IG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Cittbmd4MTI5IG1pbm1hZyAtMTAwMCAtSW5mICAgLT4gLTEwMDAKK21uZ3gxMzAgbWlubWFnIC0xICAgIC1JbmYgICAtPiAtMQorbW5neDEzMSBtaW5tYWcgLTAgICAgLUluZiAgIC0+IC0wCittbmd4MTMyIG1pbm1hZyAgMCAgICAtSW5mICAgLT4gIDAKK21uZ3gxMzMgbWlubWFnICAxICAgIC1JbmYgICAtPiAgMQorbW5neDEzNCBtaW5tYWcgIDEwMDAgLUluZiAgIC0+ICAxMDAwCittbmd4MTM1IG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworbW5neDE0MSBtaW5tYWcgIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkKK21uZ3gxNDIgbWlubWFnICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKK21uZ3gxNDMgbWlubWFnICBOYU4gLTEgICAgICAtPiAgLTEKK21uZ3gxNDQgbWlubWFnICBOYU4gLTAgICAgICAtPiAgLTAKK21uZ3gxNDUgbWlubWFnICBOYU4gIDAgICAgICAtPiAgMAorbW5neDE0NiBtaW5tYWcgIE5hTiAgMSAgICAgIC0+ICAxCittbmd4MTQ3IG1pbm1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKK21uZ3gxNDggbWlubWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK21uZ3gxNDkgbWlubWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCittbmd4MTUwIG1pbm1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5Cittbmd4MTUxIG1pbm1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK21uZ3gxNTIgbWlubWFnIC0xICAgLU5hTiAgICAtPiAtMQorbW5neDE1MyBtaW5tYWcgLTAgICAgTmFOICAgIC0+IC0wCittbmd4MTU0IG1pbm1hZyAgMCAgIC1OYU4gICAgLT4gIDAKK21uZ3gxNTUgbWlubWFnICAxICAgIE5hTiAgICAtPiAgMQorbW5neDE1NiBtaW5tYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCittbmd4MTU3IG1pbm1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK21uZ3gxNjEgbWlubWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2MiBtaW5tYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTYzIG1pbm1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjQgbWlubWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2NSBtaW5tYWcgLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTY2IG1pbm1hZyAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjcgbWlubWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2OCBtaW5tYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTY5IG1pbm1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzAgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3MSBtaW5tYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTcyIG1pbm1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzMgbWlubWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3NCBtaW5tYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTc1IG1pbm1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzYgbWlubWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3NyBtaW5tYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTc4IG1pbm1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzkgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCittbmd4MTgxIG1pbm1hZyAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkKK21uZ3gxODIgbWlubWFnIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCittbmd4MTgzIG1pbm1hZyAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkKKworbW5neDE4NCBtaW5tYWcgIE5hTjEgICAgTmFONTQgLT4gIE5hTjEKK21uZ3gxODUgbWlubWFnICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgorbW5neDE4NiBtaW5tYWcgLU5hTjMgICAgTmFONiAgLT4gLU5hTjMKK21uZ3gxODcgbWlubWFnIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NAorCittbmd4MTg4IG1pbm1hZyAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKK21uZ3gxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5Cittbmd4MTkwIG1pbm1hZyAgSW5mICAgICBOYU4yICAtPiAgSW5maW5pdHkKKworbW5neDE5MSBtaW5tYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE5MiBtaW5tYWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE5MyBtaW5tYWcgLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE5NCBtaW5tYWcgIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE5NSBtaW5tYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE5NiBtaW5tYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE5NyBtaW5tYWcgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE5OCBtaW5tYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE5OSBtaW5tYWcgIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbgorCistLSByb3VuZGluZyBjaGVja3MgLS0gY2hvc2VuIGlzIHJvdW5kZWQsIG9yIG5vdAorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorbW5neDIwMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDEKK21uZ3gyMDIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxCittbmd4MjAzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQorbW5neDIwNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDEKK21uZ3gyMDUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxCittbmd4MjA2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQorbW5neDIwNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDEKK21uZ3gyMDggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxCittbmd4MjA5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQorbW5neDIxMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDEKK21uZ3gyMTEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxCittbmd4MjEyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQorbW5neDIxMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK21uZ3gyMTQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxCittbmd4MjE1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQorbW5neDIxNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK21uZ3gyMTcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxCittbmd4MjE4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitwcmVjaXNpb246IDE1Cittbmd4MjIxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQorbW5neDIyMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDEKK21uZ3gyMjMgbWlubWFnIC0xMjM0NTY3ODAwICAxICAtPiAxCittbmd4MjI0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQorbW5neDIyNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDEKK21uZ3gyMjYgbWlubWFnIDEgLTEyMzQ1Njc4OTAgICAtPiAxCittbmd4MjI3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQorbW5neDIyOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDEKK21uZ3gyMjkgbWlubWFnIC0xMjM0NTY3ODkwMSAxICAtPiAxCittbmd4MjMwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQorbW5neDIzMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDEKK21uZ3gyMzIgbWlubWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAxCittbmd4MjMzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQorbW5neDIzNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDEKK21uZ3gyMzUgbWlubWFnIDEyMzQ1Njc4OTAxIDEgICAtPiAxCittbmd4MjM2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQorbW5neDIzNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDEKK21uZ3gyMzggbWlubWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK21uZ3gyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJworbW5neDI4MSBtaW5tYWcgJy0xMCcgJzMnICAtPiAgJzMnCittbmd4MjgyIG1pbm1hZyAnMS4wJyAnMScgIC0+ICAnMS4wJworbW5neDI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcKK21uZ3gyODQgbWlubWFnICc3JyAnTmFOJyAgLT4gICc3JworCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIHN1Ym5vcm1hbCByZXN1bHRzIFtpbnB1dHNdIG5vdyBhbGxvd2VkCittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorbW5neDMzMCBtaW5tYWcgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLTlFKzk5OTk5OTk5OSAtPiAtMS4yMzQ1Njc4OTAxMjM0NQorbW5neDMzMSBtaW5tYWcgLTlFKzk5OTk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAtMS4yMzQ1Njc4OTAxMjM0NQorbW5neDMzMiBtaW5tYWcgLTAuMTAwIC05RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5Cittbmd4MzMzIG1pbm1hZyAtOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkKK21uZ3gzMzUgbWlubWFnICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC05RSs5OTk5OTk5OTkgLT4gIDEuMjM0NTY3ODkwMTIzNDUKK21uZ3gzMzYgbWlubWFnIC05RSs5OTk5OTk5OTkgMS4yMzQ1Njc4OTAxMjM0NUUtMCAgLT4gIDEuMjM0NTY3ODkwMTIzNDUKK21uZ3gzMzcgbWlubWFnICswLjEwMCAtOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQorbW5neDMzOCBtaW5tYWcgLTlFLTk5OTk5OTk5OSAwLjEwMCAgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5CisKK21uZ3gzMzkgbWlubWFnIC0xZS01OTk5OTk5OTkgLTFlLTQwMDAwMDAwMSAgIC0+ICAtMUUtNTk5OTk5OTk5Cittbmd4MzQwIG1pbm1hZyAtMWUtNTk5OTk5OTk5IC0xZS00MDAwMDAwMDAgICAtPiAgLTFFLTU5OTk5OTk5OQorbW5neDM0MSBtaW5tYWcgLTFlLTYwMDAwMDAwMCAtMWUtNDAwMDAwMDAwICAgLT4gIC0xRS02MDAwMDAwMDAKK21uZ3gzNDIgbWlubWFnIC05ZS05OTk5OTk5OTggLTAuMDEgICAgICAgICAgIC0+ICAtOUUtOTk5OTk5OTk4Cittbmd4MzQzIG1pbm1hZyAtOWUtOTk5OTk5OTk4IC0wLjEgICAgICAgICAgICAtPiAgLTlFLTk5OTk5OTk5OAorbW5neDM0NCBtaW5tYWcgLTAuMDEgICAgICAgICAtOWUtOTk5OTk5OTk4ICAgLT4gIC05RS05OTk5OTk5OTgKK21uZ3gzNDUgbWlubWFnIC0xZTU5OTk5OTk5OSAgLTFlNDAwMDAwMDAxICAgIC0+ICAtMUUrNDAwMDAwMDAxCittbmd4MzQ2IG1pbm1hZyAtMWU1OTk5OTk5OTkgIC0xZTQwMDAwMDAwMCAgICAtPiAgLTFFKzQwMDAwMDAwMAorbW5neDM0NyBtaW5tYWcgLTFlNjAwMDAwMDAwICAtMWU0MDAwMDAwMDAgICAgLT4gIC0xRSs0MDAwMDAwMDAKK21uZ3gzNDggbWlubWFnIC05ZTk5OTk5OTk5OCAgLTEwMCAgICAgICAgICAgIC0+ICAtMTAwCittbmd4MzQ5IG1pbm1hZyAtOWU5OTk5OTk5OTggIC0xMCAgICAgICAgICAgICAtPiAgLTEwCittbmd4MzUwIG1pbm1hZyAtMTAwICAgICAgICAgIC05ZTk5OTk5OTk5OCAgICAtPiAgLTEwMAorLS0gc2lnbnMKK21uZ3gzNTEgbWlubWFnIC0xZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAtMUUrNDExMTExMTExCittbmd4MzUyIG1pbm1hZyAtMWUrNzc3Nzc3Nzc3ICsxZSs0MTExMTExMTEgLT4gIDFFKzQxMTExMTExMQorbW5neDM1MyBtaW5tYWcgKzFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xRSs0MTExMTExMTEKK21uZ3gzNTQgbWlubWFnICsxZSs3Nzc3Nzc3NzcgKzFlKzQxMTExMTExMSAtPiAgMUUrNDExMTExMTExCittbmd4MzU1IG1pbm1hZyAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gLTFFLTc3Nzc3Nzc3NworbW5neDM1NiBtaW5tYWcgLTFlLTc3Nzc3Nzc3NyArMWUtNDExMTExMTExIC0+IC0xRS03Nzc3Nzc3NzcKK21uZ3gzNTcgbWlubWFnICsxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAgMUUtNzc3Nzc3Nzc3Cittbmd4MzU4IG1pbm1hZyArMWUtNzc3Nzc3Nzc3ICsxZS00MTExMTExMTEgLT4gIDFFLTc3Nzc3Nzc3NworCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK21uZ3g0MDEgbWlubWFnICBJbmYgICAgMS4xICAgICAtPiAgMS4xCittbmd4NDAyIG1pbm1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEKK21uZ3g0MDMgbWlubWFnICAxICAgICAgMS4wICAgICAtPiAgMS4wCittbmd4NDA0IG1pbm1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQorbW5neDQwNSBtaW5tYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCittbmd4NDA2IG1pbm1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwCittbmd4NDA3IG1pbm1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAKK21uZ3g0MDggbWlubWFnICAwICAgICAgMC4wICAgICAtPiAgMC4wCittbmd4NDA5IG1pbm1hZyAgMC4wICAgLTAgICAgICAgLT4gLTAKK21uZ3g0MTAgbWlubWFnICAwLjAgICAtMC4wICAgICAtPiAtMC4wCittbmd4NDExIG1pbm1hZyAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAorbW5neDQxMiBtaW5tYWcgIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwCittbmd4NDEzIG1pbm1hZyAgMCAgICAgLTAuMCAgICAgLT4gLTAuMAorbW5neDQxNCBtaW5tYWcgIDAgICAgIC0wICAgICAgIC0+IC0wCittbmd4NDE1IG1pbm1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAKK21uZ3g0MTYgbWlubWFnIC0wICAgICAtMC4xMDAgICAtPiAtMAorbW5neDQxNyBtaW5tYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwCittbmd4NDE4IG1pbm1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQorbW5neDQxOSBtaW5tYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0wLjEKK21uZ3g0MjAgbWlubWFnIC0xLjAgICAtMSAgICAgICAtPiAtMQorbW5neDQyMSBtaW5tYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xCittbmd4NDIzIG1pbm1hZyAtMS4xICAgLUluZiAgICAgLT4gLTEuMQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCittbmd4NDMxIG1pbm1hZyAgMS4xICAgIEluZiAgICAgLT4gIDEuMQorbW5neDQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxCittbmd4NDMzIG1pbm1hZyAgMS4wICAgIDEgICAgICAgLT4gIDEuMAorbW5neDQzNCBtaW5tYWcgIDAuMSAgICAxLjAgICAgIC0+ICAwLjEKK21uZ3g0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAorbW5neDQzNiBtaW5tYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwMAorbW5neDQzNyBtaW5tYWcgIDAgICAgICAwLjEwICAgIC0+ICAwCittbmd4NDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMAorbW5neDQzOSBtaW5tYWcgLTAgICAgICAwLjAgICAgIC0+IC0wCittbmd4NDQwIG1pbm1hZyAtMC4wICAgIDAuMCAgICAgLT4gLTAuMAorbW5neDQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKK21uZ3g0NDIgbWlubWFnIC0wLjAwICAgMC4wICAgICAtPiAtMC4wMAorbW5neDQ0MyBtaW5tYWcgLTAuMCAgICAwICAgICAgIC0+IC0wLjAKK21uZ3g0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMAorbW5neDQ0NSBtaW5tYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wCittbmd4NDQ2IG1pbm1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAKK21uZ3g0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMAorbW5neDQ0OCBtaW5tYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEKK21uZ3g0NDkgbWlubWFnIC0xLjAgICAtMC4xICAgICAtPiAtMC4xCittbmd4NDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEKK21uZ3g0NTEgbWlubWFnIC0xLjEgICAtMSAgICAgICAtPiAtMQorbW5neDQ1MyBtaW5tYWcgLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKKy0tIGxhcmdpZXMKK21uZ3g0NjAgbWlubWFnICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMAorbW5neDQ2MSBtaW5tYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwCittbmd4NDYyIG1pbm1hZyAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKK21uZ3g0NjMgbWlubWFnICAxRSszICAtMTAwMCAgICAtPiAtMTAwMAorbW5neDQ2NCBtaW5tYWcgLTEwMDAgICAxRSszICAgIC0+IC0xMDAwCittbmd4NDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKK21uZ3g0NjYgbWlubWFnIC0xMDAwICAtMUUrMyAgICAtPiAtMUUrMworbW5neDQ2NyBtaW5tYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xRSszCisKKy0tIHJvdW5kaW5nIChyZXN1bHRzIHRyZWF0ZWQgYXMgdGhvdWdoIHBsdXMpCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCisKK21uZ3g0NzAgbWlubWFnICAxICAgICAgNSAgICAgIC0+ICAxCittbmd4NDcxIG1pbm1hZyAgMTAgICAgIDUwICAgICAtPiAgMTAKK21uZ3g0NzIgbWlubWFnICAxMDAgICAgNTAwICAgIC0+ICAxMDAKK21uZ3g0NzMgbWlubWFnICAxMDAwICAgNTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQKK21uZ3g0NzQgbWlubWFnICAxMDAwMCAgNTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKK21uZ3g0NzUgbWlubWFnICA2ICAgICAgNTAgICAgIC0+ICA2Cittbmd4NDc2IG1pbm1hZyAgNjYgICAgIDUwMCAgICAtPiAgNjYKK21uZ3g0NzcgbWlubWFnICA2NjYgICAgNTAwMCAgIC0+ICA2NjYKK21uZ3g0NzggbWlubWFnICA2NjY2ICAgNTAwMDAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAorbW5neDQ3OSBtaW5tYWcgIDY2NjY2ICA1MDAwMDAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0Cittbmd4NDgwIG1pbm1hZyAgMzMzMzMgIDUwMDAwMCAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKK21uZ3g0ODEgbWlubWFnICA3NTQwMSAgMSAgICAgIC0+ICAxCittbmd4NDgyIG1pbm1hZyAgNzU0MDIgIDEwICAgICAtPiAgMTAKK21uZ3g0ODMgbWlubWFnICA3NTQwMyAgMTAwICAgIC0+ICAxMDAKK21uZ3g0ODQgbWlubWFnICA3NTQwNCAgMTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQKK21uZ3g0ODUgbWlubWFnICA3NTQwNSAgMTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKK21uZ3g0ODYgbWlubWFnICA3NTQwNiAgNiAgICAgIC0+ICA2Cittbmd4NDg3IG1pbm1hZyAgNzU0MDcgIDY2ICAgICAtPiAgNjYKK21uZ3g0ODggbWlubWFnICA3NTQwOCAgNjY2ICAgIC0+ICA2NjYKK21uZ3g0ODkgbWlubWFnICA3NTQwOSAgNjY2NiAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAorbW5neDQ5MCBtaW5tYWcgIDc1NDEwICA2NjY2NiAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0Cittbmd4NDkxIG1pbm1hZyAgNzU0MTEgIDMzMzMzICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKKworCistLSBvdmVyZmxvdyB0ZXN0cworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMworbW5neDUwMCBtaW5tYWcgOS45OTlFKzk5OTk5OTk5OSAgMCAtPiAgMAorbW5neDUwMSBtaW5tYWcgLTkuOTk5RSs5OTk5OTk5OTkgMCAtPiAgMAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK21uZ3g1MTAgbWlubWFnICAxLjAwRS05OTkgICAgICAgMCAgLT4gICAwCittbmd4NTExIG1pbm1hZyAgMC4xRS05OTkgICAgICAgIDAgIC0+ICAgMAorbW5neDUxMiBtaW5tYWcgIDAuMTBFLTk5OSAgICAgICAwICAtPiAgIDAKK21uZ3g1MTMgbWlubWFnICAwLjEwMEUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTE0IG1pbm1hZyAgMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAgMAorbW5neDUxNSBtaW5tYWcgIDAuOTk5RS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MTYgbWlubWFnICAwLjA5OUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTE3IG1pbm1hZyAgMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUxOCBtaW5tYWcgIDAuMDAxRS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MTkgbWlubWFnICAwLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwCittbmd4NTIwIG1pbm1hZyAgMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMAorCittbmd4NTMwIG1pbm1hZyAtMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAgMAorbW5neDUzMSBtaW5tYWcgLTAuMUUtOTk5ICAgICAgICAwICAtPiAgIDAKK21uZ3g1MzIgbWlubWFnIC0wLjEwRS05OTkgICAgICAgMCAgLT4gICAwCittbmd4NTMzIG1pbm1hZyAtMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUzNCBtaW5tYWcgLTAuMDFFLTk5OSAgICAgICAwICAtPiAgIDAKK21uZ3g1MzUgbWlubWFnIC0wLjk5OUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTM2IG1pbm1hZyAtMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUzNyBtaW5tYWcgLTAuMDA5RS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MzggbWlubWFnIC0wLjAwMUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTM5IG1pbm1hZyAtMC4wMDA5RS05OTkgICAgIDAgIC0+ICAgMAorbW5neDU0MCBtaW5tYWcgLTAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDAKKworCistLSBOdWxsIHRlc3RzCittbmc5MDAgbWlubWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbW5nOTAxIG1pbm1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0bWludXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0bWludXMuZGVjVGVzdAppbmRleCBiYTkzMDY2Li41MzFjNTI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dG1pbnVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHRtaW51cy5kZWNUZXN0CkBAIC0xLDE0OCArMSwxNDggQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIG5leHRtaW51cy5kZWNUZXN0IC0tIGRlY2ltYWwgbmV4dCB0aGF0IGlzIGxlc3MgWzc1NHIgbmV4dGRvd25dICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi1uZXh0bTAwMSBuZXh0bWludXMgIDAuOTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTQNCi1uZXh0bTAwMiBuZXh0bWludXMgIDAuOTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTUNCi1uZXh0bTAwMyBuZXh0bWludXMgIDAuOTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTYNCi1uZXh0bTAwNCBuZXh0bWludXMgIDAuOTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTcNCi1uZXh0bTAwNSBuZXh0bWludXMgIDAuOTk5OTk5OTk5IC0+ICAgMC45OTk5OTk5OTgNCi1uZXh0bTAwNiBuZXh0bWludXMgIDEuMDAwMDAwMDAgIC0+ICAgMC45OTk5OTk5OTkNCi1uZXh0bTAwNyBuZXh0bWludXMgIDEuMCAgICAgICAgIC0+ICAgMC45OTk5OTk5OTkNCi1uZXh0bTAwOCBuZXh0bWludXMgIDEgICAgICAgICAgIC0+ICAgMC45OTk5OTk5OTkNCi1uZXh0bTAwOSBuZXh0bWludXMgIDEuMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMA0KLW5leHRtMDEwIG5leHRtaW51cyAgMS4wMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAxDQotbmV4dG0wMTEgbmV4dG1pbnVzICAxLjAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDINCi1uZXh0bTAxMiBuZXh0bWludXMgIDEuMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMw0KLW5leHRtMDEzIG5leHRtaW51cyAgMS4wMDAwMDAwNSAgLT4gICAxLjAwMDAwMDA0DQotbmV4dG0wMTQgbmV4dG1pbnVzICAxLjAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDUNCi1uZXh0bTAxNSBuZXh0bWludXMgIDEuMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwNg0KLW5leHRtMDE2IG5leHRtaW51cyAgMS4wMDAwMDAwOCAgLT4gICAxLjAwMDAwMDA3DQotbmV4dG0wMTcgbmV4dG1pbnVzICAxLjAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDgNCi1uZXh0bTAxOCBuZXh0bWludXMgIDEuMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwOQ0KLW5leHRtMDE5IG5leHRtaW51cyAgMS4wMDAwMDAxMSAgLT4gICAxLjAwMDAwMDEwDQotbmV4dG0wMjAgbmV4dG1pbnVzICAxLjAwMDAwMDEyICAtPiAgIDEuMDAwMDAwMTENCi0NCi1uZXh0bTAyMSBuZXh0bWludXMgLTAuOTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTYNCi1uZXh0bTAyMiBuZXh0bWludXMgLTAuOTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTcNCi1uZXh0bTAyMyBuZXh0bWludXMgLTAuOTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTgNCi1uZXh0bTAyNCBuZXh0bWludXMgLTAuOTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTkNCi1uZXh0bTAyNSBuZXh0bWludXMgLTAuOTk5OTk5OTk5IC0+ICAtMS4wMDAwMDAwMA0KLW5leHRtMDI2IG5leHRtaW51cyAtMS4wMDAwMDAwMCAgLT4gIC0xLjAwMDAwMDAxDQotbmV4dG0wMjcgbmV4dG1pbnVzIC0xLjAgICAgICAgICAtPiAgLTEuMDAwMDAwMDENCi1uZXh0bTAyOCBuZXh0bWludXMgLTEgICAgICAgICAgIC0+ICAtMS4wMDAwMDAwMQ0KLW5leHRtMDI5IG5leHRtaW51cyAtMS4wMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAyDQotbmV4dG0wMzAgbmV4dG1pbnVzIC0xLjAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDMNCi1uZXh0bTAzMSBuZXh0bWludXMgLTEuMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwNA0KLW5leHRtMDMyIG5leHRtaW51cyAtMS4wMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDA1DQotbmV4dG0wMzMgbmV4dG1pbnVzIC0xLjAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDYNCi1uZXh0bTAzNCBuZXh0bWludXMgLTEuMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwNw0KLW5leHRtMDM1IG5leHRtaW51cyAtMS4wMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDA4DQotbmV4dG0wMzYgbmV4dG1pbnVzIC0xLjAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDkNCi1uZXh0bTAzNyBuZXh0bWludXMgLTEuMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAxMA0KLW5leHRtMDM4IG5leHRtaW51cyAtMS4wMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDExDQotbmV4dG0wMzkgbmV4dG1pbnVzIC0xLjAwMDAwMDExICAtPiAgLTEuMDAwMDAwMTINCi0NCi0tLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24NCi1uZXh0bTA0MSBuZXh0bWludXMgIDEuMDAwMDAwMTA5OTggIC0+ICAgMS4wMDAwMDAxMA0KLW5leHRtMDQyIG5leHRtaW51cyAgMS4wMDAwMDAxMDk5OSAgLT4gICAxLjAwMDAwMDEwDQotbmV4dG0wNDMgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAwICAtPiAgIDEuMDAwMDAwMTANCi1uZXh0bTA0NCBuZXh0bWludXMgIDEuMDAwMDAwMTEwMDEgIC0+ICAgMS4wMDAwMDAxMQ0KLW5leHRtMDQ1IG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDExDQotbmV4dG0wNDYgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAyICAtPiAgIDEuMDAwMDAwMTENCi1uZXh0bTA0NyBuZXh0bWludXMgIDEuMDAwMDAwMTEwNTIgIC0+ICAgMS4wMDAwMDAxMQ0KLW5leHRtMDQ4IG5leHRtaW51cyAgMS4wMDAwMDAxMTU1MiAgLT4gICAxLjAwMDAwMDExDQotbmV4dG0wNDkgbmV4dG1pbnVzIC0xLjAwMDAwMDEwOTk4ICAtPiAgLTEuMDAwMDAwMTENCi1uZXh0bTA1MCBuZXh0bWludXMgLTEuMDAwMDAwMTA5OTkgIC0+ICAtMS4wMDAwMDAxMQ0KLW5leHRtMDUxIG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMCAgLT4gIC0xLjAwMDAwMDEyDQotbmV4dG0wNTIgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDAxICAtPiAgLTEuMDAwMDAwMTINCi1uZXh0bTA1MyBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMg0KLW5leHRtMDU0IG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDEyDQotbmV4dG0wNTUgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDUyICAtPiAgLTEuMDAwMDAwMTINCi1uZXh0bTA1NiBuZXh0bWludXMgLTEuMDAwMDAwMTE1NTIgIC0+ICAtMS4wMDAwMDAxMg0KLS0tIHVsdHJhLXRpbnkgaW5wdXRzDQotbmV4dG0wNjAgbmV4dG1pbnVzICAxRS05OTk5OSAgICAgICAtPiAgIDBFLTM5MQ0KLW5leHRtMDYxIG5leHRtaW51cyAgMUUtOTk5OTk5OTk5ICAgLT4gICAwRS0zOTENCi1uZXh0bTA2MiBuZXh0bWludXMgIDFFLTM5MSAgICAgICAgIC0+ICAgMEUtMzkxDQotbmV4dG0wNjMgbmV4dG1pbnVzIC0xRS05OTk5OSAgICAgICAtPiAgLTFFLTM5MQ0KLW5leHRtMDY0IG5leHRtaW51cyAtMUUtOTk5OTk5OTk5ICAgLT4gIC0xRS0zOTENCi1uZXh0bTA2NSBuZXh0bWludXMgLTFFLTM5MSAgICAgICAgIC0+ICAtMkUtMzkxDQotDQotLS0gWmVyb3MNCi1uZXh0bTEwMCBuZXh0bWludXMgLTAgICAgICAgICAgIC0+IC0xRS0zOTENCi1uZXh0bTEwMSBuZXh0bWludXMgIDAgICAgICAgICAgIC0+IC0xRS0zOTENCi1uZXh0bTEwMiBuZXh0bWludXMgIDAuMDAgICAgICAgIC0+IC0xRS0zOTENCi1uZXh0bTEwMyBuZXh0bWludXMgLTAuMDAgICAgICAgIC0+IC0xRS0zOTENCi1uZXh0bTEwNCBuZXh0bWludXMgIDBFLTMwMCAgICAgIC0+IC0xRS0zOTENCi1uZXh0bTEwNSBuZXh0bWludXMgIDBFKzMwMCAgICAgIC0+IC0xRS0zOTENCi1uZXh0bTEwNiBuZXh0bWludXMgIDBFKzMwMDAwICAgIC0+IC0xRS0zOTENCi1uZXh0bTEwNyBuZXh0bWludXMgLTBFKzMwMDAwICAgIC0+IC0xRS0zOTENCi0NCi1wcmVjaXNpb246IDkNCi1tYXhFeHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi0tLSBzcGVjaWFscw0KLW5leHRtMTUwIG5leHRtaW51cyAgIEluZiAgICAtPiAgOS45OTk5OTk5OUUrOTk5DQotbmV4dG0xNTEgbmV4dG1pbnVzICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLW5leHRtMTUyIG5leHRtaW51cyAgIE5hTiAgICAtPiAgTmFODQotbmV4dG0xNTMgbmV4dG1pbnVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHRtMTU0IG5leHRtaW51cyAgIE5hTjc3ICAtPiAgTmFONzcNCi1uZXh0bTE1NSBuZXh0bWludXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotbmV4dG0xNTYgbmV4dG1pbnVzICAtTmFOICAgIC0+IC1OYU4NCi1uZXh0bTE1NyBuZXh0bWludXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dG0xNTggbmV4dG1pbnVzICAtTmFONzcgIC0+IC1OYU43Nw0KLW5leHRtMTU5IG5leHRtaW51cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KLW5leHRtMTcwIG5leHRtaW51cyAgOS45OTk5OTk5OUUrOTk5ICAgLT4gOS45OTk5OTk5OEUrOTk5DQotbmV4dG0xNzEgbmV4dG1pbnVzICA5Ljk5OTk5OTk4RSs5OTkgICAtPiA5Ljk5OTk5OTk3RSs5OTkNCi1uZXh0bTE3MiBuZXh0bWludXMgIDFFLTk5OSAgICAgICAgICAgIC0+IDkuOTk5OTk5OUUtMTAwMA0KLW5leHRtMTczIG5leHRtaW51cyAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gOS45OTk5OTk5RS0xMDAwDQotbmV4dG0xNzQgbmV4dG1pbnVzICA5RS0xMDA3ICAgICAgICAgICAtPiA4RS0xMDA3DQotbmV4dG0xNzUgbmV4dG1pbnVzICA5LjlFLTEwMDYgICAgICAgICAtPiA5LjhFLTEwMDYNCi1uZXh0bTE3NiBuZXh0bWludXMgIDkuOTk5OUUtMTAwMyAgICAgIC0+IDkuOTk5OEUtMTAwMw0KLW5leHRtMTc3IG5leHRtaW51cyAgOS45OTk5OTk5RS0xMDAwICAgLT4gOS45OTk5OTk4RS0xMDAwDQotbmV4dG0xNzggbmV4dG1pbnVzICA5Ljk5OTk5OThFLTEwMDAgICAtPiA5Ljk5OTk5OTdFLTEwMDANCi1uZXh0bTE3OSBuZXh0bWludXMgIDkuOTk5OTk5N0UtMTAwMCAgIC0+IDkuOTk5OTk5NkUtMTAwMA0KLW5leHRtMTgwIG5leHRtaW51cyAgMEUtMTAwNyAgICAgICAgICAgLT4gLTFFLTEwMDcNCi1uZXh0bTE4MSBuZXh0bWludXMgIDFFLTEwMDcgICAgICAgICAgIC0+IDBFLTEwMDcNCi1uZXh0bTE4MiBuZXh0bWludXMgIDJFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcNCi0NCi1uZXh0bTE4MyBuZXh0bWludXMgIC0wRS0xMDA3ICAgICAgICAgIC0+IC0xRS0xMDA3DQotbmV4dG0xODQgbmV4dG1pbnVzICAtMUUtMTAwNyAgICAgICAgICAtPiAtMkUtMTAwNw0KLW5leHRtMTg1IG5leHRtaW51cyAgLTJFLTEwMDcgICAgICAgICAgLT4gLTNFLTEwMDcNCi1uZXh0bTE4NiBuZXh0bWludXMgIC0xMEUtMTAwNyAgICAgICAgIC0+IC0xLjFFLTEwMDYNCi1uZXh0bTE4NyBuZXh0bWludXMgIC0xMDBFLTEwMDcgICAgICAgIC0+IC0xLjAxRS0xMDA1DQotbmV4dG0xODggbmV4dG1pbnVzICAtMTAwMDAwRS0xMDA3ICAgICAtPiAtMS4wMDAwMUUtMTAwMg0KLW5leHRtMTg5IG5leHRtaW51cyAgLTEuMDAwMEUtOTk5ICAgICAgLT4gLTEuMDAwMDAwMDFFLTk5OQ0KLW5leHRtMTkwIG5leHRtaW51cyAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTEuMDAwMDAwMDFFLTk5OQ0KLW5leHRtMTkxIG5leHRtaW51cyAgLTFFLTk5OSAgICAgICAgICAgLT4gLTEuMDAwMDAwMDFFLTk5OQ0KLW5leHRtMTkyIG5leHRtaW51cyAgLTkuOTk5OTk5OThFKzk5OSAgLT4gLTkuOTk5OTk5OTlFKzk5OQ0KLW5leHRtMTkzIG5leHRtaW51cyAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLUluZmluaXR5DQotDQotLS0gTnVsbCB0ZXN0cw0KLW5leHRtOTAwIG5leHRtaW51cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG5leHRtaW51cy5kZWNUZXN0IC0tIGRlY2ltYWwgbmV4dCB0aGF0IGlzIGxlc3MgWzc1NHIgbmV4dGRvd25dICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworbmV4dG0wMDEgbmV4dG1pbnVzICAwLjk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk0CituZXh0bTAwMiBuZXh0bWludXMgIDAuOTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTUKK25leHRtMDAzIG5leHRtaW51cyAgMC45OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5NgorbmV4dG0wMDQgbmV4dG1pbnVzICAwLjk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk3CituZXh0bTAwNSBuZXh0bWludXMgIDAuOTk5OTk5OTk5IC0+ICAgMC45OTk5OTk5OTgKK25leHRtMDA2IG5leHRtaW51cyAgMS4wMDAwMDAwMCAgLT4gICAwLjk5OTk5OTk5OQorbmV4dG0wMDcgbmV4dG1pbnVzICAxLjAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5CituZXh0bTAwOCBuZXh0bWludXMgIDEgICAgICAgICAgIC0+ICAgMC45OTk5OTk5OTkKK25leHRtMDA5IG5leHRtaW51cyAgMS4wMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAwCituZXh0bTAxMCBuZXh0bWludXMgIDEuMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMQorbmV4dG0wMTEgbmV4dG1pbnVzICAxLjAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDIKK25leHRtMDEyIG5leHRtaW51cyAgMS4wMDAwMDAwNCAgLT4gICAxLjAwMDAwMDAzCituZXh0bTAxMyBuZXh0bWludXMgIDEuMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwNAorbmV4dG0wMTQgbmV4dG1pbnVzICAxLjAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDUKK25leHRtMDE1IG5leHRtaW51cyAgMS4wMDAwMDAwNyAgLT4gICAxLjAwMDAwMDA2CituZXh0bTAxNiBuZXh0bWludXMgIDEuMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwNworbmV4dG0wMTcgbmV4dG1pbnVzICAxLjAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDgKK25leHRtMDE4IG5leHRtaW51cyAgMS4wMDAwMDAxMCAgLT4gICAxLjAwMDAwMDA5CituZXh0bTAxOSBuZXh0bWludXMgIDEuMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAxMAorbmV4dG0wMjAgbmV4dG1pbnVzICAxLjAwMDAwMDEyICAtPiAgIDEuMDAwMDAwMTEKKworbmV4dG0wMjEgbmV4dG1pbnVzIC0wLjk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk2CituZXh0bTAyMiBuZXh0bWludXMgLTAuOTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTcKK25leHRtMDIzIG5leHRtaW51cyAtMC45OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OAorbmV4dG0wMjQgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk5CituZXh0bTAyNSBuZXh0bWludXMgLTAuOTk5OTk5OTk5IC0+ICAtMS4wMDAwMDAwMAorbmV4dG0wMjYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwICAtPiAgLTEuMDAwMDAwMDEKK25leHRtMDI3IG5leHRtaW51cyAtMS4wICAgICAgICAgLT4gIC0xLjAwMDAwMDAxCituZXh0bTAyOCBuZXh0bWludXMgLTEgICAgICAgICAgIC0+ICAtMS4wMDAwMDAwMQorbmV4dG0wMjkgbmV4dG1pbnVzIC0xLjAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDIKK25leHRtMDMwIG5leHRtaW51cyAtMS4wMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAzCituZXh0bTAzMSBuZXh0bWludXMgLTEuMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwNAorbmV4dG0wMzIgbmV4dG1pbnVzIC0xLjAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDUKK25leHRtMDMzIG5leHRtaW51cyAtMS4wMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDA2CituZXh0bTAzNCBuZXh0bWludXMgLTEuMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwNworbmV4dG0wMzUgbmV4dG1pbnVzIC0xLjAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDgKK25leHRtMDM2IG5leHRtaW51cyAtMS4wMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDA5CituZXh0bTAzNyBuZXh0bWludXMgLTEuMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAxMAorbmV4dG0wMzggbmV4dG1pbnVzIC0xLjAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMTEKK25leHRtMDM5IG5leHRtaW51cyAtMS4wMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDEyCisKKy0tIGlucHV0IG9wZXJhbmQgaXMgPnByZWNpc2lvbgorbmV4dG0wNDEgbmV4dG1pbnVzICAxLjAwMDAwMDEwOTk4ICAtPiAgIDEuMDAwMDAwMTAKK25leHRtMDQyIG5leHRtaW51cyAgMS4wMDAwMDAxMDk5OSAgLT4gICAxLjAwMDAwMDEwCituZXh0bTA0MyBuZXh0bWludXMgIDEuMDAwMDAwMTEwMDAgIC0+ICAgMS4wMDAwMDAxMAorbmV4dG0wNDQgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAxICAtPiAgIDEuMDAwMDAwMTEKK25leHRtMDQ1IG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDExCituZXh0bTA0NiBuZXh0bWludXMgIDEuMDAwMDAwMTEwMDIgIC0+ICAgMS4wMDAwMDAxMQorbmV4dG0wNDcgbmV4dG1pbnVzICAxLjAwMDAwMDExMDUyICAtPiAgIDEuMDAwMDAwMTEKK25leHRtMDQ4IG5leHRtaW51cyAgMS4wMDAwMDAxMTU1MiAgLT4gICAxLjAwMDAwMDExCituZXh0bTA0OSBuZXh0bWludXMgLTEuMDAwMDAwMTA5OTggIC0+ICAtMS4wMDAwMDAxMQorbmV4dG0wNTAgbmV4dG1pbnVzIC0xLjAwMDAwMDEwOTk5ICAtPiAgLTEuMDAwMDAwMTEKK25leHRtMDUxIG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMCAgLT4gIC0xLjAwMDAwMDEyCituZXh0bTA1MiBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDEgIC0+ICAtMS4wMDAwMDAxMgorbmV4dG0wNTMgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDAyICAtPiAgLTEuMDAwMDAwMTIKK25leHRtMDU0IG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDEyCituZXh0bTA1NSBuZXh0bWludXMgLTEuMDAwMDAwMTEwNTIgIC0+ICAtMS4wMDAwMDAxMgorbmV4dG0wNTYgbmV4dG1pbnVzIC0xLjAwMDAwMDExNTUyICAtPiAgLTEuMDAwMDAwMTIKKy0tIHVsdHJhLXRpbnkgaW5wdXRzCituZXh0bTA2MCBuZXh0bWludXMgIDFFLTk5OTk5ICAgICAgIC0+ICAgMEUtMzkxCituZXh0bTA2MSBuZXh0bWludXMgIDFFLTk5OTk5OTk5OSAgIC0+ICAgMEUtMzkxCituZXh0bTA2MiBuZXh0bWludXMgIDFFLTM5MSAgICAgICAgIC0+ICAgMEUtMzkxCituZXh0bTA2MyBuZXh0bWludXMgLTFFLTk5OTk5ICAgICAgIC0+ICAtMUUtMzkxCituZXh0bTA2NCBuZXh0bWludXMgLTFFLTk5OTk5OTk5OSAgIC0+ICAtMUUtMzkxCituZXh0bTA2NSBuZXh0bWludXMgLTFFLTM5MSAgICAgICAgIC0+ICAtMkUtMzkxCisKKy0tIFplcm9zCituZXh0bTEwMCBuZXh0bWludXMgLTAgICAgICAgICAgIC0+IC0xRS0zOTEKK25leHRtMTAxIG5leHRtaW51cyAgMCAgICAgICAgICAgLT4gLTFFLTM5MQorbmV4dG0xMDIgbmV4dG1pbnVzICAwLjAwICAgICAgICAtPiAtMUUtMzkxCituZXh0bTEwMyBuZXh0bWludXMgLTAuMDAgICAgICAgIC0+IC0xRS0zOTEKK25leHRtMTA0IG5leHRtaW51cyAgMEUtMzAwICAgICAgLT4gLTFFLTM5MQorbmV4dG0xMDUgbmV4dG1pbnVzICAwRSszMDAgICAgICAtPiAtMUUtMzkxCituZXh0bTEwNiBuZXh0bWludXMgIDBFKzMwMDAwICAgIC0+IC0xRS0zOTEKK25leHRtMTA3IG5leHRtaW51cyAtMEUrMzAwMDAgICAgLT4gLTFFLTM5MQorCitwcmVjaXNpb246IDkKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CistLSBzcGVjaWFscworbmV4dG0xNTAgbmV4dG1pbnVzICAgSW5mICAgIC0+ICA5Ljk5OTk5OTk5RSs5OTkKK25leHRtMTUxIG5leHRtaW51cyAgLUluZiAgICAtPiAtSW5maW5pdHkKK25leHRtMTUyIG5leHRtaW51cyAgIE5hTiAgICAtPiAgTmFOCituZXh0bTE1MyBuZXh0bWludXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0bTE1NCBuZXh0bWludXMgICBOYU43NyAgLT4gIE5hTjc3CituZXh0bTE1NSBuZXh0bWludXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCituZXh0bTE1NiBuZXh0bWludXMgIC1OYU4gICAgLT4gLU5hTgorbmV4dG0xNTcgbmV4dG1pbnVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dG0xNTggbmV4dG1pbnVzICAtTmFONzcgIC0+IC1OYU43NworbmV4dG0xNTkgbmV4dG1pbnVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworbmV4dG0xNzAgbmV4dG1pbnVzICA5Ljk5OTk5OTk5RSs5OTkgICAtPiA5Ljk5OTk5OTk4RSs5OTkKK25leHRtMTcxIG5leHRtaW51cyAgOS45OTk5OTk5OEUrOTk5ICAgLT4gOS45OTk5OTk5N0UrOTk5CituZXh0bTE3MiBuZXh0bWludXMgIDFFLTk5OSAgICAgICAgICAgIC0+IDkuOTk5OTk5OUUtMTAwMAorbmV4dG0xNzMgbmV4dG1pbnVzICAxLjAwMDAwMDAwRS05OTkgICAtPiA5Ljk5OTk5OTlFLTEwMDAKK25leHRtMTc0IG5leHRtaW51cyAgOUUtMTAwNyAgICAgICAgICAgLT4gOEUtMTAwNworbmV4dG0xNzUgbmV4dG1pbnVzICA5LjlFLTEwMDYgICAgICAgICAtPiA5LjhFLTEwMDYKK25leHRtMTc2IG5leHRtaW51cyAgOS45OTk5RS0xMDAzICAgICAgLT4gOS45OTk4RS0xMDAzCituZXh0bTE3NyBuZXh0bWludXMgIDkuOTk5OTk5OUUtMTAwMCAgIC0+IDkuOTk5OTk5OEUtMTAwMAorbmV4dG0xNzggbmV4dG1pbnVzICA5Ljk5OTk5OThFLTEwMDAgICAtPiA5Ljk5OTk5OTdFLTEwMDAKK25leHRtMTc5IG5leHRtaW51cyAgOS45OTk5OTk3RS0xMDAwICAgLT4gOS45OTk5OTk2RS0xMDAwCituZXh0bTE4MCBuZXh0bWludXMgIDBFLTEwMDcgICAgICAgICAgIC0+IC0xRS0xMDA3CituZXh0bTE4MSBuZXh0bWludXMgIDFFLTEwMDcgICAgICAgICAgIC0+IDBFLTEwMDcKK25leHRtMTgyIG5leHRtaW51cyAgMkUtMTAwNyAgICAgICAgICAgLT4gMUUtMTAwNworCituZXh0bTE4MyBuZXh0bWludXMgIC0wRS0xMDA3ICAgICAgICAgIC0+IC0xRS0xMDA3CituZXh0bTE4NCBuZXh0bWludXMgIC0xRS0xMDA3ICAgICAgICAgIC0+IC0yRS0xMDA3CituZXh0bTE4NSBuZXh0bWludXMgIC0yRS0xMDA3ICAgICAgICAgIC0+IC0zRS0xMDA3CituZXh0bTE4NiBuZXh0bWludXMgIC0xMEUtMTAwNyAgICAgICAgIC0+IC0xLjFFLTEwMDYKK25leHRtMTg3IG5leHRtaW51cyAgLTEwMEUtMTAwNyAgICAgICAgLT4gLTEuMDFFLTEwMDUKK25leHRtMTg4IG5leHRtaW51cyAgLTEwMDAwMEUtMTAwNyAgICAgLT4gLTEuMDAwMDFFLTEwMDIKK25leHRtMTg5IG5leHRtaW51cyAgLTEuMDAwMEUtOTk5ICAgICAgLT4gLTEuMDAwMDAwMDFFLTk5OQorbmV4dG0xOTAgbmV4dG1pbnVzICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtMS4wMDAwMDAwMUUtOTk5CituZXh0bTE5MSBuZXh0bWludXMgIC0xRS05OTkgICAgICAgICAgIC0+IC0xLjAwMDAwMDAxRS05OTkKK25leHRtMTkyIG5leHRtaW51cyAgLTkuOTk5OTk5OThFKzk5OSAgLT4gLTkuOTk5OTk5OTlFKzk5OQorbmV4dG0xOTMgbmV4dG1pbnVzICAtOS45OTk5OTk5OUUrOTk5ICAtPiAtSW5maW5pdHkKKworLS0gTnVsbCB0ZXN0cworbmV4dG05MDAgbmV4dG1pbnVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHBsdXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0cGx1cy5kZWNUZXN0CmluZGV4IDQ0OTg5ZTUuLmM2NmUzMjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0cGx1cy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0cGx1cy5kZWNUZXN0CkBAIC0xLDE1MCArMSwxNTAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIG5leHRwbHVzLmRlY1Rlc3QgLS0gZGVjaW1hbCBuZXh0IHRoYXQgaXMgZ3JlYXRlciBbNzU0ciBuZXh0dXBdICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi1uZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5Ng0KLW5leHRwMDAyIG5leHRwbHVzICAwLjk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk3DQotbmV4dHAwMDMgbmV4dHBsdXMgIDAuOTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTgNCi1uZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OQ0KLW5leHRwMDA1IG5leHRwbHVzICAwLjk5OTk5OTk5OSAtPiAgIDEuMDAwMDAwMDANCi1uZXh0cDAwNiBuZXh0cGx1cyAgMS4wMDAwMDAwMCAgLT4gICAxLjAwMDAwMDAxDQotbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMQ0KLW5leHRwMDA4IG5leHRwbHVzICAxICAgICAgICAgICAtPiAgIDEuMDAwMDAwMDENCi1uZXh0cDAwOSBuZXh0cGx1cyAgMS4wMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAyDQotbmV4dHAwMTAgbmV4dHBsdXMgIDEuMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMw0KLW5leHRwMDExIG5leHRwbHVzICAxLjAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDQNCi1uZXh0cDAxMiBuZXh0cGx1cyAgMS4wMDAwMDAwNCAgLT4gICAxLjAwMDAwMDA1DQotbmV4dHAwMTMgbmV4dHBsdXMgIDEuMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwNg0KLW5leHRwMDE0IG5leHRwbHVzICAxLjAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDcNCi1uZXh0cDAxNSBuZXh0cGx1cyAgMS4wMDAwMDAwNyAgLT4gICAxLjAwMDAwMDA4DQotbmV4dHAwMTYgbmV4dHBsdXMgIDEuMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwOQ0KLW5leHRwMDE3IG5leHRwbHVzICAxLjAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMTANCi1uZXh0cDAxOCBuZXh0cGx1cyAgMS4wMDAwMDAxMCAgLT4gICAxLjAwMDAwMDExDQotbmV4dHAwMTkgbmV4dHBsdXMgIDEuMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAxMg0KLQ0KLW5leHRwMDIxIG5leHRwbHVzIC0wLjk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk0DQotbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTUNCi1uZXh0cDAyMyBuZXh0cGx1cyAtMC45OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5Ng0KLW5leHRwMDI0IG5leHRwbHVzIC0wLjk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk3DQotbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5IC0+ICAtMC45OTk5OTk5OTgNCi1uZXh0cDAyNiBuZXh0cGx1cyAtMS4wMDAwMDAwMCAgLT4gIC0wLjk5OTk5OTk5OQ0KLW5leHRwMDI3IG5leHRwbHVzIC0xLjAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5DQotbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTkNCi1uZXh0cDAyOSBuZXh0cGx1cyAtMS4wMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwDQotbmV4dHAwMzAgbmV4dHBsdXMgLTEuMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMQ0KLW5leHRwMDMxIG5leHRwbHVzIC0xLjAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDINCi1uZXh0cDAzMiBuZXh0cGx1cyAtMS4wMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAzDQotbmV4dHAwMzMgbmV4dHBsdXMgLTEuMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwNA0KLW5leHRwMDM0IG5leHRwbHVzIC0xLjAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDUNCi1uZXh0cDAzNSBuZXh0cGx1cyAtMS4wMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDA2DQotbmV4dHAwMzYgbmV4dHBsdXMgLTEuMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwNw0KLW5leHRwMDM3IG5leHRwbHVzIC0xLjAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDgNCi1uZXh0cDAzOCBuZXh0cGx1cyAtMS4wMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDA5DQotbmV4dHAwMzkgbmV4dHBsdXMgLTEuMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAxMA0KLW5leHRwMDQwIG5leHRwbHVzIC0xLjAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMTENCi0NCi0tLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24NCi1uZXh0cDA0MSBuZXh0cGx1cyAgMS4wMDAwMDAxMDk5OCAgLT4gICAxLjAwMDAwMDExDQotbmV4dHAwNDIgbmV4dHBsdXMgIDEuMDAwMDAwMTA5OTkgIC0+ICAgMS4wMDAwMDAxMQ0KLW5leHRwMDQzIG5leHRwbHVzICAxLjAwMDAwMDExMDAwICAtPiAgIDEuMDAwMDAwMTINCi1uZXh0cDA0NCBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMSAgLT4gICAxLjAwMDAwMDEyDQotbmV4dHAwNDUgbmV4dHBsdXMgIDEuMDAwMDAwMTEwMDIgIC0+ICAgMS4wMDAwMDAxMg0KLW5leHRwMDQ2IG5leHRwbHVzICAxLjAwMDAwMDExMDAyICAtPiAgIDEuMDAwMDAwMTINCi1uZXh0cDA0NyBuZXh0cGx1cyAgMS4wMDAwMDAxMTA1MiAgLT4gICAxLjAwMDAwMDEyDQotbmV4dHAwNDggbmV4dHBsdXMgIDEuMDAwMDAwMTE1NTIgIC0+ICAgMS4wMDAwMDAxMg0KLW5leHRwMDQ5IG5leHRwbHVzIC0xLjAwMDAwMDEwOTk4ICAtPiAgLTEuMDAwMDAwMTANCi1uZXh0cDA1MCBuZXh0cGx1cyAtMS4wMDAwMDAxMDk5OSAgLT4gIC0xLjAwMDAwMDEwDQotbmV4dHAwNTEgbmV4dHBsdXMgLTEuMDAwMDAwMTEwMDAgIC0+ICAtMS4wMDAwMDAxMA0KLW5leHRwMDUyIG5leHRwbHVzIC0xLjAwMDAwMDExMDAxICAtPiAgLTEuMDAwMDAwMTENCi1uZXh0cDA1MyBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDExDQotbmV4dHAwNTQgbmV4dHBsdXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMQ0KLW5leHRwMDU1IG5leHRwbHVzIC0xLjAwMDAwMDExMDUyICAtPiAgLTEuMDAwMDAwMTENCi1uZXh0cDA1NiBuZXh0cGx1cyAtMS4wMDAwMDAxMTU1MiAgLT4gIC0xLjAwMDAwMDExDQotLS0gdWx0cmEtdGlueSBpbnB1dHMNCi1uZXh0cDA2MCBuZXh0cGx1cyAgMUUtOTk5OTkgICAgICAgLT4gICAxRS0zOTENCi1uZXh0cDA2MSBuZXh0cGx1cyAgMUUtOTk5OTk5OTk5ICAgLT4gICAxRS0zOTENCi1uZXh0cDA2MiBuZXh0cGx1cyAgMUUtMzkxICAgICAgICAgLT4gICAyRS0zOTENCi1uZXh0cDA2MyBuZXh0cGx1cyAtMUUtOTk5OTkgICAgICAgLT4gIC0wRS0zOTENCi1uZXh0cDA2NCBuZXh0cGx1cyAtMUUtOTk5OTk5OTk5ICAgLT4gIC0wRS0zOTENCi1uZXh0cDA2NSBuZXh0cGx1cyAtMUUtMzkxICAgICAgICAgLT4gIC0wRS0zOTENCi0NCi0tLSBaZXJvcw0KLW5leHRwMTAwIG5leHRwbHVzICAwICAgICAgICAgICAtPiAgMUUtMzkxDQotbmV4dHAxMDEgbmV4dHBsdXMgIDAuMDAgICAgICAgIC0+ICAxRS0zOTENCi1uZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTM5MQ0KLW5leHRwMTAzIG5leHRwbHVzICAwRSszMDAgICAgICAtPiAgMUUtMzkxDQotbmV4dHAxMDQgbmV4dHBsdXMgIDBFKzMwMDAwICAgIC0+ICAxRS0zOTENCi1uZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTM5MQ0KLW5leHRwMTA2IG5leHRwbHVzIC0wLjAwICAgICAgICAtPiAgMUUtMzkxDQotbmV4dHAxMDcgbmV4dHBsdXMgLTBFLTMwMCAgICAgIC0+ICAxRS0zOTENCi1uZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTM5MQ0KLW5leHRwMTA5IG5leHRwbHVzIC0wRSszMDAwMCAgICAtPiAgMUUtMzkxDQotDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotcHJlY2lzaW9uOiA5DQotLS0gc3BlY2lhbHMNCi1uZXh0cDE1MCBuZXh0cGx1cyAgIEluZiAgICAtPiAgSW5maW5pdHkNCi1uZXh0cDE1MSBuZXh0cGx1cyAgLUluZiAgICAtPiAtOS45OTk5OTk5OUUrOTk5DQotbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTg0KLW5leHRwMTUzIG5leHRwbHVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHRwMTU0IG5leHRwbHVzICAgTmFONzcgIC0+ICBOYU43Nw0KLW5leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHRwMTU2IG5leHRwbHVzICAtTmFOICAgIC0+IC1OYU4NCi1uZXh0cDE1NyBuZXh0cGx1cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcNCi1uZXh0cDE1OSBuZXh0cGx1cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KLW5leHRwMTcwIG5leHRwbHVzICA5Ljk5OTk5OTk5RSs5OTkgICAtPiBJbmZpbml0eQ0KLW5leHRwMTcxIG5leHRwbHVzICA5Ljk5OTk5OTk4RSs5OTkgICAtPiA5Ljk5OTk5OTk5RSs5OTkNCi1uZXh0cDE3MiBuZXh0cGx1cyAgMUUtOTk5ICAgICAgICAgICAgLT4gMS4wMDAwMDAwMUUtOTk5DQotbmV4dHAxNzMgbmV4dHBsdXMgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IDEuMDAwMDAwMDFFLTk5OQ0KLW5leHRwMTc0IG5leHRwbHVzICA5RS0xMDA3ICAgICAgICAgICAtPiAxLjBFLTEwMDYNCi1uZXh0cDE3NSBuZXh0cGx1cyAgOS45RS0xMDA2ICAgICAgICAgLT4gMS4wMEUtMTAwNQ0KLW5leHRwMTc2IG5leHRwbHVzICA5Ljk5OTlFLTEwMDMgICAgICAtPiAxLjAwMDAwRS0xMDAyDQotbmV4dHAxNzcgbmV4dHBsdXMgIDkuOTk5OTk5OUUtMTAwMCAgIC0+IDEuMDAwMDAwMDBFLTk5OQ0KLW5leHRwMTc4IG5leHRwbHVzICA5Ljk5OTk5OThFLTEwMDAgICAtPiA5Ljk5OTk5OTlFLTEwMDANCi1uZXh0cDE3OSBuZXh0cGx1cyAgOS45OTk5OTk3RS0xMDAwICAgLT4gOS45OTk5OTk4RS0xMDAwDQotbmV4dHAxODAgbmV4dHBsdXMgIDBFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcNCi1uZXh0cDE4MSBuZXh0cGx1cyAgMUUtMTAwNyAgICAgICAgICAgLT4gMkUtMTAwNw0KLW5leHRwMTgyIG5leHRwbHVzICAyRS0xMDA3ICAgICAgICAgICAtPiAzRS0xMDA3DQotDQotbmV4dHAxODMgbmV4dHBsdXMgIC0wRS0xMDA3ICAgICAgICAgIC0+ICAxRS0xMDA3DQotbmV4dHAxODQgbmV4dHBsdXMgIC0xRS0xMDA3ICAgICAgICAgIC0+IC0wRS0xMDA3DQotbmV4dHAxODUgbmV4dHBsdXMgIC0yRS0xMDA3ICAgICAgICAgIC0+IC0xRS0xMDA3DQotbmV4dHAxODYgbmV4dHBsdXMgIC0xMEUtMTAwNyAgICAgICAgIC0+IC05RS0xMDA3DQotbmV4dHAxODcgbmV4dHBsdXMgIC0xMDBFLTEwMDcgICAgICAgIC0+IC05LjlFLTEwMDYNCi1uZXh0cDE4OCBuZXh0cGx1cyAgLTEwMDAwMEUtMTAwNyAgICAgLT4gLTkuOTk5OUUtMTAwMw0KLW5leHRwMTg5IG5leHRwbHVzICAtMS4wMDAwRS05OTkgICAgICAtPiAtOS45OTk5OTk5RS0xMDAwDQotbmV4dHAxOTAgbmV4dHBsdXMgIC0xLjAwMDAwMDAwRS05OTkgIC0+IC05Ljk5OTk5OTlFLTEwMDANCi1uZXh0cDE5MSBuZXh0cGx1cyAgLTFFLTk5OSAgICAgICAgICAgLT4gLTkuOTk5OTk5OUUtMTAwMA0KLW5leHRwMTkyIG5leHRwbHVzICAtOS45OTk5OTk5OEUrOTk5ICAtPiAtOS45OTk5OTk5N0UrOTk5DQotbmV4dHAxOTMgbmV4dHBsdXMgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IC05Ljk5OTk5OTk4RSs5OTkNCi0NCi0tLSBOdWxsIHRlc3RzDQotbmV4dHA5MDAgbmV4dHBsdXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBuZXh0cGx1cy5kZWNUZXN0IC0tIGRlY2ltYWwgbmV4dCB0aGF0IGlzIGdyZWF0ZXIgWzc1NHIgbmV4dHVwXSAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK25leHRwMDAxIG5leHRwbHVzICAwLjk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk2CituZXh0cDAwMiBuZXh0cGx1cyAgMC45OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5NworbmV4dHAwMDMgbmV4dHBsdXMgIDAuOTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTgKK25leHRwMDA0IG5leHRwbHVzICAwLjk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5CituZXh0cDAwNSBuZXh0cGx1cyAgMC45OTk5OTk5OTkgLT4gICAxLjAwMDAwMDAwCituZXh0cDAwNiBuZXh0cGx1cyAgMS4wMDAwMDAwMCAgLT4gICAxLjAwMDAwMDAxCituZXh0cDAwNyBuZXh0cGx1cyAgMS4wICAgICAgICAgLT4gICAxLjAwMDAwMDAxCituZXh0cDAwOCBuZXh0cGx1cyAgMSAgICAgICAgICAgLT4gICAxLjAwMDAwMDAxCituZXh0cDAwOSBuZXh0cGx1cyAgMS4wMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAyCituZXh0cDAxMCBuZXh0cGx1cyAgMS4wMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAzCituZXh0cDAxMSBuZXh0cGx1cyAgMS4wMDAwMDAwMyAgLT4gICAxLjAwMDAwMDA0CituZXh0cDAxMiBuZXh0cGx1cyAgMS4wMDAwMDAwNCAgLT4gICAxLjAwMDAwMDA1CituZXh0cDAxMyBuZXh0cGx1cyAgMS4wMDAwMDAwNSAgLT4gICAxLjAwMDAwMDA2CituZXh0cDAxNCBuZXh0cGx1cyAgMS4wMDAwMDAwNiAgLT4gICAxLjAwMDAwMDA3CituZXh0cDAxNSBuZXh0cGx1cyAgMS4wMDAwMDAwNyAgLT4gICAxLjAwMDAwMDA4CituZXh0cDAxNiBuZXh0cGx1cyAgMS4wMDAwMDAwOCAgLT4gICAxLjAwMDAwMDA5CituZXh0cDAxNyBuZXh0cGx1cyAgMS4wMDAwMDAwOSAgLT4gICAxLjAwMDAwMDEwCituZXh0cDAxOCBuZXh0cGx1cyAgMS4wMDAwMDAxMCAgLT4gICAxLjAwMDAwMDExCituZXh0cDAxOSBuZXh0cGx1cyAgMS4wMDAwMDAxMSAgLT4gICAxLjAwMDAwMDEyCisKK25leHRwMDIxIG5leHRwbHVzIC0wLjk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk0CituZXh0cDAyMiBuZXh0cGx1cyAtMC45OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5NQorbmV4dHAwMjMgbmV4dHBsdXMgLTAuOTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTYKK25leHRwMDI0IG5leHRwbHVzIC0wLjk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk3CituZXh0cDAyNSBuZXh0cGx1cyAtMC45OTk5OTk5OTkgLT4gIC0wLjk5OTk5OTk5OAorbmV4dHAwMjYgbmV4dHBsdXMgLTEuMDAwMDAwMDAgIC0+ICAtMC45OTk5OTk5OTkKK25leHRwMDI3IG5leHRwbHVzIC0xLjAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5CituZXh0cDAyOCBuZXh0cGx1cyAtMSAgICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OQorbmV4dHAwMjkgbmV4dHBsdXMgLTEuMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMAorbmV4dHAwMzAgbmV4dHBsdXMgLTEuMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMQorbmV4dHAwMzEgbmV4dHBsdXMgLTEuMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMgorbmV4dHAwMzIgbmV4dHBsdXMgLTEuMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMworbmV4dHAwMzMgbmV4dHBsdXMgLTEuMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwNAorbmV4dHAwMzQgbmV4dHBsdXMgLTEuMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwNQorbmV4dHAwMzUgbmV4dHBsdXMgLTEuMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwNgorbmV4dHAwMzYgbmV4dHBsdXMgLTEuMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwNworbmV4dHAwMzcgbmV4dHBsdXMgLTEuMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwOAorbmV4dHAwMzggbmV4dHBsdXMgLTEuMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwOQorbmV4dHAwMzkgbmV4dHBsdXMgLTEuMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAxMAorbmV4dHAwNDAgbmV4dHBsdXMgLTEuMDAwMDAwMTIgIC0+ICAtMS4wMDAwMDAxMQorCistLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24KK25leHRwMDQxIG5leHRwbHVzICAxLjAwMDAwMDEwOTk4ICAtPiAgIDEuMDAwMDAwMTEKK25leHRwMDQyIG5leHRwbHVzICAxLjAwMDAwMDEwOTk5ICAtPiAgIDEuMDAwMDAwMTEKK25leHRwMDQzIG5leHRwbHVzICAxLjAwMDAwMDExMDAwICAtPiAgIDEuMDAwMDAwMTIKK25leHRwMDQ0IG5leHRwbHVzICAxLjAwMDAwMDExMDAxICAtPiAgIDEuMDAwMDAwMTIKK25leHRwMDQ1IG5leHRwbHVzICAxLjAwMDAwMDExMDAyICAtPiAgIDEuMDAwMDAwMTIKK25leHRwMDQ2IG5leHRwbHVzICAxLjAwMDAwMDExMDAyICAtPiAgIDEuMDAwMDAwMTIKK25leHRwMDQ3IG5leHRwbHVzICAxLjAwMDAwMDExMDUyICAtPiAgIDEuMDAwMDAwMTIKK25leHRwMDQ4IG5leHRwbHVzICAxLjAwMDAwMDExNTUyICAtPiAgIDEuMDAwMDAwMTIKK25leHRwMDQ5IG5leHRwbHVzIC0xLjAwMDAwMDEwOTk4ICAtPiAgLTEuMDAwMDAwMTAKK25leHRwMDUwIG5leHRwbHVzIC0xLjAwMDAwMDEwOTk5ICAtPiAgLTEuMDAwMDAwMTAKK25leHRwMDUxIG5leHRwbHVzIC0xLjAwMDAwMDExMDAwICAtPiAgLTEuMDAwMDAwMTAKK25leHRwMDUyIG5leHRwbHVzIC0xLjAwMDAwMDExMDAxICAtPiAgLTEuMDAwMDAwMTEKK25leHRwMDUzIG5leHRwbHVzIC0xLjAwMDAwMDExMDAyICAtPiAgLTEuMDAwMDAwMTEKK25leHRwMDU0IG5leHRwbHVzIC0xLjAwMDAwMDExMDAyICAtPiAgLTEuMDAwMDAwMTEKK25leHRwMDU1IG5leHRwbHVzIC0xLjAwMDAwMDExMDUyICAtPiAgLTEuMDAwMDAwMTEKK25leHRwMDU2IG5leHRwbHVzIC0xLjAwMDAwMDExNTUyICAtPiAgLTEuMDAwMDAwMTEKKy0tIHVsdHJhLXRpbnkgaW5wdXRzCituZXh0cDA2MCBuZXh0cGx1cyAgMUUtOTk5OTkgICAgICAgLT4gICAxRS0zOTEKK25leHRwMDYxIG5leHRwbHVzICAxRS05OTk5OTk5OTkgICAtPiAgIDFFLTM5MQorbmV4dHAwNjIgbmV4dHBsdXMgIDFFLTM5MSAgICAgICAgIC0+ICAgMkUtMzkxCituZXh0cDA2MyBuZXh0cGx1cyAtMUUtOTk5OTkgICAgICAgLT4gIC0wRS0zOTEKK25leHRwMDY0IG5leHRwbHVzIC0xRS05OTk5OTk5OTkgICAtPiAgLTBFLTM5MQorbmV4dHAwNjUgbmV4dHBsdXMgLTFFLTM5MSAgICAgICAgIC0+ICAtMEUtMzkxCisKKy0tIFplcm9zCituZXh0cDEwMCBuZXh0cGx1cyAgMCAgICAgICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDEgbmV4dHBsdXMgIDAuMDAgICAgICAgIC0+ICAxRS0zOTEKK25leHRwMTAyIG5leHRwbHVzICAwRS0zMDAgICAgICAtPiAgMUUtMzkxCituZXh0cDEwMyBuZXh0cGx1cyAgMEUrMzAwICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDQgbmV4dHBsdXMgIDBFKzMwMDAwICAgIC0+ICAxRS0zOTEKK25leHRwMTA1IG5leHRwbHVzIC0wICAgICAgICAgICAtPiAgMUUtMzkxCituZXh0cDEwNiBuZXh0cGx1cyAtMC4wMCAgICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDcgbmV4dHBsdXMgLTBFLTMwMCAgICAgIC0+ICAxRS0zOTEKK25leHRwMTA4IG5leHRwbHVzIC0wRSszMDAgICAgICAtPiAgMUUtMzkxCituZXh0cDEwOSBuZXh0cGx1cyAtMEUrMzAwMDAgICAgLT4gIDFFLTM5MQorCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5CistLSBzcGVjaWFscworbmV4dHAxNTAgbmV4dHBsdXMgICBJbmYgICAgLT4gIEluZmluaXR5CituZXh0cDE1MSBuZXh0cGx1cyAgLUluZiAgICAtPiAtOS45OTk5OTk5OUUrOTk5CituZXh0cDE1MiBuZXh0cGx1cyAgIE5hTiAgICAtPiAgTmFOCituZXh0cDE1MyBuZXh0cGx1cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK25leHRwMTU0IG5leHRwbHVzICAgTmFONzcgIC0+ICBOYU43NworbmV4dHAxNTUgbmV4dHBsdXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCituZXh0cDE1NiBuZXh0cGx1cyAgLU5hTiAgICAtPiAtTmFOCituZXh0cDE1NyBuZXh0cGx1cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK25leHRwMTU4IG5leHRwbHVzICAtTmFONzcgIC0+IC1OYU43NworbmV4dHAxNTkgbmV4dHBsdXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCituZXh0cDE3MCBuZXh0cGx1cyAgOS45OTk5OTk5OUUrOTk5ICAgLT4gSW5maW5pdHkKK25leHRwMTcxIG5leHRwbHVzICA5Ljk5OTk5OTk4RSs5OTkgICAtPiA5Ljk5OTk5OTk5RSs5OTkKK25leHRwMTcyIG5leHRwbHVzICAxRS05OTkgICAgICAgICAgICAtPiAxLjAwMDAwMDAxRS05OTkKK25leHRwMTczIG5leHRwbHVzICAxLjAwMDAwMDAwRS05OTkgICAtPiAxLjAwMDAwMDAxRS05OTkKK25leHRwMTc0IG5leHRwbHVzICA5RS0xMDA3ICAgICAgICAgICAtPiAxLjBFLTEwMDYKK25leHRwMTc1IG5leHRwbHVzICA5LjlFLTEwMDYgICAgICAgICAtPiAxLjAwRS0xMDA1CituZXh0cDE3NiBuZXh0cGx1cyAgOS45OTk5RS0xMDAzICAgICAgLT4gMS4wMDAwMEUtMTAwMgorbmV4dHAxNzcgbmV4dHBsdXMgIDkuOTk5OTk5OUUtMTAwMCAgIC0+IDEuMDAwMDAwMDBFLTk5OQorbmV4dHAxNzggbmV4dHBsdXMgIDkuOTk5OTk5OEUtMTAwMCAgIC0+IDkuOTk5OTk5OUUtMTAwMAorbmV4dHAxNzkgbmV4dHBsdXMgIDkuOTk5OTk5N0UtMTAwMCAgIC0+IDkuOTk5OTk5OEUtMTAwMAorbmV4dHAxODAgbmV4dHBsdXMgIDBFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcKK25leHRwMTgxIG5leHRwbHVzICAxRS0xMDA3ICAgICAgICAgICAtPiAyRS0xMDA3CituZXh0cDE4MiBuZXh0cGx1cyAgMkUtMTAwNyAgICAgICAgICAgLT4gM0UtMTAwNworCituZXh0cDE4MyBuZXh0cGx1cyAgLTBFLTEwMDcgICAgICAgICAgLT4gIDFFLTEwMDcKK25leHRwMTg0IG5leHRwbHVzICAtMUUtMTAwNyAgICAgICAgICAtPiAtMEUtMTAwNworbmV4dHAxODUgbmV4dHBsdXMgIC0yRS0xMDA3ICAgICAgICAgIC0+IC0xRS0xMDA3CituZXh0cDE4NiBuZXh0cGx1cyAgLTEwRS0xMDA3ICAgICAgICAgLT4gLTlFLTEwMDcKK25leHRwMTg3IG5leHRwbHVzICAtMTAwRS0xMDA3ICAgICAgICAtPiAtOS45RS0xMDA2CituZXh0cDE4OCBuZXh0cGx1cyAgLTEwMDAwMEUtMTAwNyAgICAgLT4gLTkuOTk5OUUtMTAwMworbmV4dHAxODkgbmV4dHBsdXMgIC0xLjAwMDBFLTk5OSAgICAgIC0+IC05Ljk5OTk5OTlFLTEwMDAKK25leHRwMTkwIG5leHRwbHVzICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtOS45OTk5OTk5RS0xMDAwCituZXh0cDE5MSBuZXh0cGx1cyAgLTFFLTk5OSAgICAgICAgICAgLT4gLTkuOTk5OTk5OUUtMTAwMAorbmV4dHAxOTIgbmV4dHBsdXMgIC05Ljk5OTk5OTk4RSs5OTkgIC0+IC05Ljk5OTk5OTk3RSs5OTkKK25leHRwMTkzIG5leHRwbHVzICAtOS45OTk5OTk5OUUrOTk5ICAtPiAtOS45OTk5OTk5OEUrOTk5CisKKy0tIE51bGwgdGVzdHMKK25leHRwOTAwIG5leHRwbHVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHRvd2FyZC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHR0b3dhcmQuZGVjVGVzdAppbmRleCBkYTI2ZjY1Li41NjIzODVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHRvd2FyZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0dG93YXJkLmRlY1Rlc3QKQEAgLTEsNDI2ICsxLDQyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gbmV4dHRvd2FyZC5kZWNUZXN0IC0tIGRlY2ltYWwgbmV4dCB0b3dhcmQgcmhzIFs3NTRyIG5leHRhZnRlcl0gICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLS0tIFNhbml0eSBjaGVjayB3aXRoIGEgc2NhdHRlcmluZyBvZiBudW1lcmljcw0KLW5leHR0MDAxIG5leHR0b3dhcmQgICAxMCAgICAxMCAgIC0+ICAxMA0KLW5leHR0MDAyIG5leHR0b3dhcmQgIC0xMCAgIC0xMCAgIC0+IC0xMA0KLW5leHR0MDAzIG5leHR0b3dhcmQgICAxICAgICAxMCAgIC0+ICAxLjAwMDAwMDAxDQotbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5DQotbmV4dHQwMDUgbmV4dHRvd2FyZCAgLTEgICAgIDEwICAgLT4gLTAuOTk5OTk5OTk5DQotbmV4dHQwMDYgbmV4dHRvd2FyZCAgLTEgICAgLTEwICAgLT4gLTEuMDAwMDAwMDENCi1uZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtMzkxICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQwMDggbmV4dHRvd2FyZCAgIDAgICAgLTEwICAgLT4gLTFFLTM5MSAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MDA5IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5RSszODQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDAxMCBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrMzg0IC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotLS0tLS0tLSBsaHM9cmhzDQotLS0gZmluaXRlcw0KLW5leHR0MTAxIG5leHR0b3dhcmQgICAgICAgICAgNyAgICAgICA3IC0+ICA3DQotbmV4dHQxMDIgbmV4dHRvd2FyZCAgICAgICAgIC03ICAgICAgLTcgLT4gLTcNCi1uZXh0dDEwMyBuZXh0dG93YXJkICAgICAgICAgNzUgICAgICA3NSAtPiAgNzUNCi1uZXh0dDEwNCBuZXh0dG93YXJkICAgICAgICAtNzUgICAgIC03NSAtPiAtNzUNCi1uZXh0dDEwNSBuZXh0dG93YXJkICAgICAgIDcuNTAgICAgIDcuNSAtPiAgNy41MA0KLW5leHR0MTA2IG5leHR0b3dhcmQgICAgICAtNy41MCAgIC03LjUwIC0+IC03LjUwDQotbmV4dHQxMDcgbmV4dHRvd2FyZCAgICAgICA3LjUwMCA3LjUwMDAgLT4gIDcuNTAwDQotbmV4dHQxMDggbmV4dHRvd2FyZCAgICAgIC03LjUwMCAgIC03LjUgLT4gLTcuNTAwDQotDQotLS0gemVyb3MNCi1uZXh0dDExMSBuZXh0dG93YXJkICAgICAgICAgIDAgICAgICAgMCAtPiAgMA0KLW5leHR0MTEyIG5leHR0b3dhcmQgICAgICAgICAtMCAgICAgIC0wIC0+IC0wDQotbmV4dHQxMTMgbmV4dHRvd2FyZCAgICAgICAwRSs0ICAgICAgIDAgLT4gIDBFKzQNCi1uZXh0dDExNCBuZXh0dG93YXJkICAgICAgLTBFKzQgICAgICAtMCAtPiAtMEUrNA0KLW5leHR0MTE1IG5leHR0b3dhcmQgICAgIDAuMDAwMCAwLjAwMDAwIC0+ICAwLjAwMDANCi1uZXh0dDExNiBuZXh0dG93YXJkICAgIC0wLjAwMDAgICAtMC4wMCAtPiAtMC4wMDAwDQotbmV4dHQxMTcgbmV4dHRvd2FyZCAgICAgIDBFLTE0MSAgICAgIDAgLT4gIDBFLTE0MQ0KLW5leHR0MTE4IG5leHR0b3dhcmQgICAgIC0wRS0xNDEgICAtMDAwIC0+IC0wRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLW5leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4DQotbmV4dHQxMjIgbmV4dHRvd2FyZCAgLTI2ODI2ODI2OCAgIC0yNjgyNjgyNjggLT4gIC0yNjgyNjgyNjgNCi1uZXh0dDEyMyBuZXh0dG93YXJkICAgMTM0MTM0MTM0ICAgIDEzNDEzNDEzNCAtPiAgIDEzNDEzNDEzNA0KLW5leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0DQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1uZXh0dDEzMSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5RSszODQgIDkuOTk5OTk5OTlFKzM4NCAgIC0+ICAgOS45OTk5OTk5OUUrMzg0DQotbmV4dHQxMzIgbmV4dHRvd2FyZCAgMUUtMzgzICAgICAgICAgICAxRS0zODMgICAgICAgICAgICAtPiAgIDFFLTM4Mw0KLW5leHR0MTMzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDBFLTM4MyAgMS4wMDAwMDAwMEUtMzgzICAgLT4gICAxLjAwMDAwMDAwRS0zODMNCi1uZXh0dDEzNCBuZXh0dG93YXJkICAxRS0zOTEgICAgICAgICAgIDFFLTM5MSAgICAgICAgICAgIC0+ICAgMUUtMzkxDQotDQotbmV4dHQxMzUgbmV4dHRvd2FyZCAgLTFFLTM5MSAgICAgICAgICAtMUUtMzkxICAgICAgICAgICAtPiAgLTFFLTM5MQ0KLW5leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwRS0zODMgLTEuMDAwMDAwMDBFLTM4MyAgLT4gIC0xLjAwMDAwMDAwRS0zODMNCi1uZXh0dDEzNyBuZXh0dG93YXJkICAtMUUtMzgzICAgICAgICAgIC0xRS0zODMgICAgICAgICAgIC0+ICAtMUUtMzgzDQotbmV4dHQxMzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0ICAtPiAgLTkuOTk5OTk5OTlFKzM4NA0KLQ0KLS0tLS0tLS0gbGhzPHJocw0KLW5leHR0MjAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk1IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTYNCi1uZXh0dDIwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5NiBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk3DQotbmV4dHQyMDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTcgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OA0KLW5leHR0MjA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk4IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTkNCi1uZXh0dDIwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OSBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDANCi1uZXh0dDIwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDENCi1uZXh0dDIwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDENCi1uZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDENCi1uZXh0dDIwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDINCi1uZXh0dDIxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDMNCi1uZXh0dDIxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDQNCi1uZXh0dDIxMiBuZXh0dG93YXJkICAxLjAwMDAwMDA0ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDUNCi1uZXh0dDIxMyBuZXh0dG93YXJkICAxLjAwMDAwMDA1ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDYNCi1uZXh0dDIxNCBuZXh0dG93YXJkICAxLjAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDcNCi1uZXh0dDIxNSBuZXh0dG93YXJkICAxLjAwMDAwMDA3ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDgNCi1uZXh0dDIxNiBuZXh0dG93YXJkICAxLjAwMDAwMDA4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDkNCi1uZXh0dDIxNyBuZXh0dG93YXJkICAxLjAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTANCi1uZXh0dDIxOCBuZXh0dG93YXJkICAxLjAwMDAwMDEwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTENCi1uZXh0dDIxOSBuZXh0dG93YXJkICAxLjAwMDAwMDExICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTINCi0NCi1uZXh0dDIyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk0DQotbmV4dHQyMjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTYgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NQ0KLW5leHR0MjIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTYNCi1uZXh0dDIyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk3DQotbmV4dHQyMjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTkgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OA0KLW5leHR0MjI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTkNCi1uZXh0dDIyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5DQotbmV4dHQyMjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQ0KLW5leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMA0KLW5leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQ0KLW5leHR0MjMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDMgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMg0KLW5leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDQgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMw0KLW5leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDUgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNA0KLW5leHR0MjM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDYgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNQ0KLW5leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDcgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNg0KLW5leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDggIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNw0KLW5leHR0MjM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwOA0KLW5leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMTAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwOQ0KLW5leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMA0KLW5leHR0MjQwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KLQ0KLS0tIGlucHV0IG9wZXJhbmQgaXMgPnByZWNpc2lvbg0KLW5leHR0MjQxIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTggIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQ0KLW5leHR0MjQyIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTkgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQ0KLW5leHR0MjQzIG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KLW5leHR0MjQ0IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KLW5leHR0MjQ1IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KLW5leHR0MjQ2IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KLW5leHR0MjQ3IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwNTIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KLW5leHR0MjQ4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTE1NTIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KLW5leHR0MjQ5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTggIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMA0KLW5leHR0MjUwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMA0KLW5leHR0MjUxIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMA0KLW5leHR0MjUyIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KLW5leHR0MjUzIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KLW5leHR0MjU0IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KLW5leHR0MjU1IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwNTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KLW5leHR0MjU2IG5leHR0b3dhcmQgLTEuMDAwMDAwMTE1NTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KLS0tIHVsdHJhLXRpbnkgaW5wdXRzDQotbmV4dHQyNjAgbmV4dHRvd2FyZCAgMUUtOTk5OTkgICAgICAgSW5maW5pdHkgLT4gICAxRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDI2MSBuZXh0dG93YXJkICAxRS05OTk5OTk5OTkgICBJbmZpbml0eSAtPiAgIDFFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MjYyIG5leHR0b3dhcmQgIDFFLTM5MSAgICAgICAgIEluZmluaXR5IC0+ICAgMkUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQyNjMgbmV4dHRvd2FyZCAtMUUtOTk5OTkgICAgICAgSW5maW5pdHkgLT4gIC0wRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLW5leHR0MjY0IG5leHR0b3dhcmQgLTFFLTk5OTk5OTk5OSAgIEluZmluaXR5IC0+ICAtMEUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1uZXh0dDI2NSBuZXh0dG93YXJkIC0xRS0zOTEgICAgICAgICBJbmZpbml0eSAtPiAgLTBFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotLS0gWmVyb3MNCi1uZXh0dDMwMCBuZXh0dG93YXJkICAwICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MzAxIG5leHR0b3dhcmQgIDAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzMDIgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDMwMyBuZXh0dG93YXJkICAwRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MzA0IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzMDUgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDMwNiBuZXh0dG93YXJkIC0wLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MzA3IG5leHR0b3dhcmQgLTBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzMDggbmV4dHRvd2FyZCAtMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDMwOSBuZXh0dG93YXJkIC0wRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNwZWNpYWxzDQotbmV4dHQzNTAgbmV4dHRvd2FyZCAgIEluZiAgICBJbmZpbml0eSAtPiAgSW5maW5pdHkNCi1uZXh0dDM1MSBuZXh0dG93YXJkICAtSW5mICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk5RSszODQNCi1uZXh0dDM1MiBuZXh0dG93YXJkICAgTmFOICAgIEluZmluaXR5IC0+ICBOYU4NCi1uZXh0dDM1MyBuZXh0dG93YXJkICBzTmFOICAgIEluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0MzU0IG5leHR0b3dhcmQgICBOYU43NyAgSW5maW5pdHkgLT4gIE5hTjc3DQotbmV4dHQzNTUgbmV4dHRvd2FyZCAgc05hTjg4ICBJbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDM1NiBuZXh0dG93YXJkICAtTmFOICAgIEluZmluaXR5IC0+IC1OYU4NCi1uZXh0dDM1NyBuZXh0dG93YXJkIC1zTmFOICAgIEluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0MzU4IG5leHR0b3dhcmQgIC1OYU43NyAgSW5maW5pdHkgLT4gLU5hTjc3DQotbmV4dHQzNTkgbmV4dHRvd2FyZCAtc05hTjg4ICBJbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLW5leHR0MzcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTlFKzk5OSAgIEluZmluaXR5IC0+IEluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk4RSs5OTkgICBJbmZpbml0eSAtPiA5Ljk5OTk5OTk5RSs5OTkNCi1uZXh0dDM3MiBuZXh0dG93YXJkICAxRS05OTkgICAgICAgICAgICBJbmZpbml0eSAtPiAxLjAwMDAwMDAxRS05OTkNCi1uZXh0dDM3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwRS05OTkgICBJbmZpbml0eSAtPiAxLjAwMDAwMDAxRS05OTkNCi1uZXh0dDM3NCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OUUtOTk5ICBJbmZpbml0eSAtPiAxLjAwMDAwMDAwRS05OTkNCi1uZXh0dDM3NSBuZXh0dG93YXJkICAwLjk5OTk5OTk5RS05OTkgICBJbmZpbml0eSAtPiAxLjAwMDAwMDAwRS05OTkNCi1uZXh0dDM3NiBuZXh0dG93YXJkICA5RS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAxLjBFLTEwMDYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM3NyBuZXh0dG93YXJkICA5LjlFLTEwMDYgICAgICAgICBJbmZpbml0eSAtPiAxLjAwRS0xMDA1ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM3OCBuZXh0dG93YXJkICA5Ljk5OTlFLTEwMDMgICAgICBJbmZpbml0eSAtPiAxLjAwMDAwRS0xMDAyICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM3OSBuZXh0dG93YXJkICA5Ljk5OTk5OThFLTEwMDAgICBJbmZpbml0eSAtPiA5Ljk5OTk5OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM4MCBuZXh0dG93YXJkICA5Ljk5OTk5OTdFLTEwMDAgICBJbmZpbml0eSAtPiA5Ljk5OTk5OThFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM4MSBuZXh0dG93YXJkICAwRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAxRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM4MiBuZXh0dG93YXJkICAxRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAyRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM4MyBuZXh0dG93YXJkICAyRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAzRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1uZXh0dDM4NSBuZXh0dG93YXJkICAtMEUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM4NiBuZXh0dG93YXJkICAtMUUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAtMEUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLW5leHR0Mzg3IG5leHR0b3dhcmQgIC0yRS0xMDA3ICAgICAgICAgIEluZmluaXR5IC0+IC0xRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0Mzg4IG5leHR0b3dhcmQgIC0xMEUtMTAwNyAgICAgICAgIEluZmluaXR5IC0+IC05RS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0Mzg5IG5leHR0b3dhcmQgIC0xMDBFLTEwMDcgICAgICAgIEluZmluaXR5IC0+IC05LjlFLTEwMDYgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MzkwIG5leHR0b3dhcmQgIC0xMDAwMDBFLTEwMDcgICAgIEluZmluaXR5IC0+IC05Ljk5OTlFLTEwMDMgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MzkxIG5leHR0b3dhcmQgIC0xLjAwMDBFLTk5OSAgICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTlFLTEwMDAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzOTIgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDBFLTk5OSAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OUUtMTAwMCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM5MyBuZXh0dG93YXJkICAtMUUtOTk5ICAgICAgICAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5RS0xMDAwICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0Mzk0IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk4RSs5OTkgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk3RSs5OTkNCi1uZXh0dDM5NSBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrOTk5ICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OEUrOTk5DQotDQotLS0tLS0tLSBsaHM+cmhzDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk0DQotbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk1DQotbmV4dHQ0MDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk2DQotbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk3DQotbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk4DQotbmV4dHQ0MDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5DQotbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5DQotbmV4dHQ0MDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5DQotbmV4dHQ0MDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDANCi1uZXh0dDQxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMQ0KLW5leHR0NDExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAyDQotbmV4dHQ0MTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDMNCi1uZXh0dDQxMyBuZXh0dG93YXJkICAxLjAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNA0KLW5leHR0NDE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA1DQotbmV4dHQ0MTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDYNCi1uZXh0dDQxNiBuZXh0dG93YXJkICAxLjAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNw0KLW5leHR0NDE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA4DQotbmV4dHQ0MTggbmV4dHRvd2FyZCAgMS4wMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDkNCi1uZXh0dDQxOSBuZXh0dG93YXJkICAxLjAwMDAwMDExICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMA0KLW5leHR0NDIwIG5leHR0b3dhcmQgIDEuMDAwMDAwMTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExDQotDQotbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk2DQotbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk3DQotbmV4dHQ0MjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk4DQotbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5DQotbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDANCi1uZXh0dDQyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQ0KLW5leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAxDQotbmV4dHQ0MjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDENCi1uZXh0dDQyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMg0KLW5leHR0NDMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAzDQotbmV4dHQ0MzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDQNCi1uZXh0dDQzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwNQ0KLW5leHR0NDMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA2DQotbmV4dHQ0MzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDcNCi1uZXh0dDQzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwOA0KLW5leHR0NDM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDggICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA5DQotbmV4dHQ0MzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTANCi1uZXh0dDQzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KLW5leHR0NDM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyDQotDQotLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uDQotbmV4dHQ0NDEgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMDk5OCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTANCi1uZXh0dDQ0MiBuZXh0dG93YXJkICAxLjAwMDAwMDEwOTk5ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMA0KLW5leHR0NDQzIG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwDQotbmV4dHQ0NDQgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTENCi1uZXh0dDQ0NSBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQ0KLW5leHR0NDQ2IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExDQotbmV4dHQ0NDcgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTA1MiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTENCi1uZXh0dDQ0OCBuZXh0dG93YXJkICAxLjAwMDAwMDExNTUyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQ0KLW5leHR0NDQ5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTggICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExDQotbmV4dHQ0NTAgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMDk5OSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTENCi1uZXh0dDQ1MSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMg0KLW5leHR0NDUyIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyDQotbmV4dHQ0NTMgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTINCi1uZXh0dDQ1NCBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMg0KLW5leHR0NDU1IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwNTIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyDQotbmV4dHQ0NTYgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTU1MiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTINCi0tLSB1bHRyYS10aW55IGlucHV0cw0KLW5leHR0NDYwIG5leHR0b3dhcmQgIDFFLTk5OTk5ICAgICAgICAtSW5maW5pdHkgLT4gICAwRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1uZXh0dDQ2MSBuZXh0dG93YXJkICAxRS05OTk5OTk5OTkgICAgLUluZmluaXR5IC0+ICAgMEUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotbmV4dHQ0NjIgbmV4dHRvd2FyZCAgMUUtMzkxICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDBFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLW5leHR0NDYzIG5leHR0b3dhcmQgLTFFLTk5OTk5ICAgICAgICAtSW5maW5pdHkgLT4gIC0xRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ0NjQgbmV4dHRvd2FyZCAtMUUtOTk5OTk5OTk5ICAgIC1JbmZpbml0eSAtPiAgLTFFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDQ2NSBuZXh0dG93YXJkIC0xRS0zOTEgICAgICAgICAgLUluZmluaXR5IC0+ICAtMkUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIFplcm9zDQotbmV4dHQ1MDAgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDUwMSBuZXh0dG93YXJkICAwICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTAyIG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1MDMgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDUwNCBuZXh0dG93YXJkICAwRS0zMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTA1IG5leHR0b3dhcmQgIDBFKzMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1MDYgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDUwNyBuZXh0dG93YXJkIC0wRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTA4IG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtMC4wMDAwICAgLT4gLTAuMDANCi0NCi0tLSBzcGVjaWFscw0KLW5leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ1NTEgbmV4dHRvd2FyZCAgLUluZiAgICAgLUluZmluaXR5IC0+IC1JbmZpbml0eQ0KLW5leHR0NTUyIG5leHR0b3dhcmQgICBOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFODQotbmV4dHQ1NTMgbmV4dHRvd2FyZCAgc05hTiAgICAgLUluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0NTU0IG5leHR0b3dhcmQgICBOYU43NyAgIC1JbmZpbml0eSAtPiAgTmFONzcNCi1uZXh0dDU1NSBuZXh0dG93YXJkICBzTmFOODggICAtSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ1NTYgbmV4dHRvd2FyZCAgLU5hTiAgICAgLUluZmluaXR5IC0+IC1OYU4NCi1uZXh0dDU1NyBuZXh0dG93YXJkIC1zTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ1NTggbmV4dHRvd2FyZCAgLU5hTjc3ICAgLUluZmluaXR5IC0+IC1OYU43Nw0KLW5leHR0NTU5IG5leHR0b3dhcmQgLXNOYU44OCAgIC1JbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLW5leHR0NTcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTlFKzk5OSAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5OEUrOTk5DQotbmV4dHQ1NzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OEUrOTk5ICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTk3RSs5OTkNCi1uZXh0dDU3MiBuZXh0dG93YXJkICAxRS05OTkgICAgICAgICAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTczIG5leHR0b3dhcmQgIDEuMDAwMDAwMDBFLTk5OSAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1NzQgbmV4dHRvd2FyZCAgOUUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiA4RS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDU3NSBuZXh0dG93YXJkICA5LjlFLTEwMDYgICAgICAgICAgLUluZmluaXR5IC0+IDkuOEUtMTAwNiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTc2IG5leHR0b3dhcmQgIDkuOTk5OUUtMTAwMyAgICAgICAtSW5maW5pdHkgLT4gOS45OTk4RS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1NzcgbmV4dHRvd2FyZCAgOS45OTk5OTk5RS0xMDAwICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OThFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDU3OCBuZXh0dG93YXJkICA5Ljk5OTk5OThFLTEwMDAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5N0UtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTc5IG5leHR0b3dhcmQgIDkuOTk5OTk5N0UtMTAwMCAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk2RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1ODAgbmV4dHRvd2FyZCAgMEUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDU4MSBuZXh0dG93YXJkICAxRS0xMDA3ICAgICAgICAgICAgLUluZmluaXR5IC0+IDBFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotbmV4dHQ1ODIgbmV4dHRvd2FyZCAgMkUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiAxRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1uZXh0dDU4MyBuZXh0dG93YXJkICAtMEUtMTAwNyAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTg0IG5leHR0b3dhcmQgIC0xRS0xMDA3ICAgICAgICAgICAtSW5maW5pdHkgLT4gLTJFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1ODUgbmV4dHRvd2FyZCAgLTJFLTEwMDcgICAgICAgICAgIC1JbmZpbml0eSAtPiAtM0UtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDU4NiBuZXh0dG93YXJkICAtMTBFLTEwMDcgICAgICAgICAgLUluZmluaXR5IC0+IC0xLjFFLTEwMDYgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTg3IG5leHR0b3dhcmQgIC0xMDBFLTEwMDcgICAgICAgICAtSW5maW5pdHkgLT4gLTEuMDFFLTEwMDUgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1ODggbmV4dHRvd2FyZCAgLTEwMDAwMEUtMTAwNyAgICAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMUUtMTAwMiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDU4OSBuZXh0dG93YXJkICAtMS4wMDAwRS05OTkgICAgICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkNCi1uZXh0dDU5MCBuZXh0dG93YXJkICAtMS4wMDAwMDAwMEUtOTk5ICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkNCi1uZXh0dDU5MSBuZXh0dG93YXJkICAtMUUtOTk5ICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkNCi1uZXh0dDU5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OEUrOTk5ICAgLUluZmluaXR5IC0+IC05Ljk5OTk5OTk5RSs5OTkNCi1uZXh0dDU5MyBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrOTk5ICAgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0NCi0NCi0tLS0tLS0tIFNwZWNpYWxzDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotbmV4dHQ3ODAgbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotbmV4dHQ3ODEgbmV4dHRvd2FyZCAtSW5mICAtMTAwMCAgLT4gLTkuOTk5OTk5OTlFKzM4NA0KLW5leHR0NzgyIG5leHR0b3dhcmQgLUluZiAgLTEgICAgIC0+IC05Ljk5OTk5OTk5RSszODQNCi1uZXh0dDc4MyBuZXh0dG93YXJkIC1JbmYgIC0wICAgICAtPiAtOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ3ODQgbmV4dHRvd2FyZCAtSW5mICAgMCAgICAgLT4gLTkuOTk5OTk5OTlFKzM4NA0KLW5leHR0Nzg1IG5leHR0b3dhcmQgLUluZiAgIDEgICAgIC0+IC05Ljk5OTk5OTk5RSszODQNCi1uZXh0dDc4NiBuZXh0dG93YXJkIC1JbmYgICAxMDAwICAtPiAtOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ3ODcgbmV4dHRvd2FyZCAtMTAwMCAtSW5mICAgLT4gLTEwMDAuMDAwMDENCi1uZXh0dDc4OCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1uZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMQ0KLW5leHR0NzkwIG5leHR0b3dhcmQgLTAgICAgLUluZiAgIC0+IC0xRS0zOTEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDc5MiBuZXh0dG93YXJkICAxICAgIC1JbmYgICAtPiAgMC45OTk5OTk5OTkNCi1uZXh0dDc5MyBuZXh0dG93YXJkICAxMDAwIC1JbmYgICAtPiAgOTk5Ljk5OTk5OQ0KLW5leHR0Nzk0IG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5RSszODQNCi0NCi1uZXh0dDgwMCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ4MDEgbmV4dHRvd2FyZCAgSW5mICAtMTAwMCAgLT4gIDkuOTk5OTk5OTlFKzM4NA0KLW5leHR0ODAyIG5leHR0b3dhcmQgIEluZiAgLTEgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQNCi1uZXh0dDgwMyBuZXh0dG93YXJkICBJbmYgIC0wICAgICAtPiAgOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ4MDQgbmV4dHRvd2FyZCAgSW5mICAgMCAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NA0KLW5leHR0ODA1IG5leHR0b3dhcmQgIEluZiAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQNCi1uZXh0dDgwNiBuZXh0dG93YXJkICBJbmYgICAxMDAwICAtPiAgOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ4MDcgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTkNCi1uZXh0dDgwOSBuZXh0dG93YXJkIC1JbmYgICBJbmYgICAtPiAtOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5DQotbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDgxMiBuZXh0dG93YXJkICAwICAgICBJbmYgICAtPiAgMUUtMzkxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0ODEzIG5leHR0b3dhcmQgIDEgICAgIEluZiAgIC0+ICAxLjAwMDAwMDAxDQotbmV4dHQ4MTQgbmV4dHRvd2FyZCAgMTAwMCAgSW5mICAgLT4gIDEwMDAuMDAwMDENCi1uZXh0dDgxNSBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1uZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFODQotbmV4dHQ4MjIgbmV4dHRvd2FyZCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLW5leHR0ODIzIG5leHR0b3dhcmQgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1uZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFODQotbmV4dHQ4MjUgbmV4dHRvd2FyZCAgTmFOICAwICAgICAgLT4gIE5hTg0KLW5leHR0ODI2IG5leHR0b3dhcmQgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1uZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFODQotbmV4dHQ4MjggbmV4dHRvd2FyZCAgTmFOICBJbmYgICAgLT4gIE5hTg0KLW5leHR0ODI5IG5leHR0b3dhcmQgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1uZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFODQotbmV4dHQ4MzEgbmV4dHRvd2FyZCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLW5leHR0ODMyIG5leHR0b3dhcmQgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1uZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFODQotbmV4dHQ4MzQgbmV4dHRvd2FyZCAgMCAgICBOYU4gICAgLT4gIE5hTg0KLW5leHR0ODM1IG5leHR0b3dhcmQgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1uZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFODQotbmV4dHQ4MzcgbmV4dHRvd2FyZCAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLW5leHR0ODQxIG5leHR0b3dhcmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NDIgbmV4dHRvd2FyZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODQ0IG5leHR0b3dhcmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NDUgbmV4dHRvd2FyZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODQ3IG5leHR0b3dhcmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NDggbmV4dHRvd2FyZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODUwIG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NTEgbmV4dHRvd2FyZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODUzIG5leHR0b3dhcmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NTQgbmV4dHRvd2FyZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODU2IG5leHR0b3dhcmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NTcgbmV4dHRvd2FyZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODU5IG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLW5leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotbmV4dHQ4NjIgbmV4dHRvd2FyZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCi1uZXh0dDg2MyBuZXh0dG93YXJkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLW5leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotbmV4dHQ4NjUgbmV4dHRvd2FyZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCi1uZXh0dDg2NiBuZXh0dG93YXJkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLW5leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotbmV4dHQ4NjggbmV4dHRvd2FyZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCi1uZXh0dDg2OSBuZXh0dG93YXJkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1uZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NzIgbmV4dHRvd2FyZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODczIG5leHR0b3dhcmQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NzUgbmV4dHRvd2FyZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODc2IG5leHR0b3dhcmQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NzggbmV4dHRvd2FyZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODc5IG5leHR0b3dhcmQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4ODEgbmV4dHRvd2FyZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODgyIG5leHR0b3dhcmQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLW5leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg4NCBuZXh0dG93YXJkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCi1uZXh0dDg4NSBuZXh0dG93YXJkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTnVsbCB0ZXN0cw0KLW5leHR0OTAwIG5leHR0b3dhcmQgMSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDkwMSBuZXh0dG93YXJkICMgIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBuZXh0dG93YXJkLmRlY1Rlc3QgLS0gZGVjaW1hbCBuZXh0IHRvd2FyZCByaHMgWzc1NHIgbmV4dGFmdGVyXSAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIFNhbml0eSBjaGVjayB3aXRoIGEgc2NhdHRlcmluZyBvZiBudW1lcmljcworbmV4dHQwMDEgbmV4dHRvd2FyZCAgIDEwICAgIDEwICAgLT4gIDEwCituZXh0dDAwMiBuZXh0dG93YXJkICAtMTAgICAtMTAgICAtPiAtMTAKK25leHR0MDAzIG5leHR0b3dhcmQgICAxICAgICAxMCAgIC0+ICAxLjAwMDAwMDAxCituZXh0dDAwNCBuZXh0dG93YXJkICAgMSAgICAtMTAgICAtPiAgMC45OTk5OTk5OTkKK25leHR0MDA1IG5leHR0b3dhcmQgIC0xICAgICAxMCAgIC0+IC0wLjk5OTk5OTk5OQorbmV4dHQwMDYgbmV4dHRvd2FyZCAgLTEgICAgLTEwICAgLT4gLTEuMDAwMDAwMDEKK25leHR0MDA3IG5leHR0b3dhcmQgICAwICAgICAxMCAgIC0+ICAxRS0zOTEgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MDA4IG5leHR0b3dhcmQgICAwICAgIC0xMCAgIC0+IC0xRS0zOTEgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MDA5IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5RSszODQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK25leHR0MDEwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5RSszODQgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0tLS0tLSBsaHM9cmhzCistLSBmaW5pdGVzCituZXh0dDEwMSBuZXh0dG93YXJkICAgICAgICAgIDcgICAgICAgNyAtPiAgNworbmV4dHQxMDIgbmV4dHRvd2FyZCAgICAgICAgIC03ICAgICAgLTcgLT4gLTcKK25leHR0MTAzIG5leHR0b3dhcmQgICAgICAgICA3NSAgICAgIDc1IC0+ICA3NQorbmV4dHQxMDQgbmV4dHRvd2FyZCAgICAgICAgLTc1ICAgICAtNzUgLT4gLTc1CituZXh0dDEwNSBuZXh0dG93YXJkICAgICAgIDcuNTAgICAgIDcuNSAtPiAgNy41MAorbmV4dHQxMDYgbmV4dHRvd2FyZCAgICAgIC03LjUwICAgLTcuNTAgLT4gLTcuNTAKK25leHR0MTA3IG5leHR0b3dhcmQgICAgICAgNy41MDAgNy41MDAwIC0+ICA3LjUwMAorbmV4dHQxMDggbmV4dHRvd2FyZCAgICAgIC03LjUwMCAgIC03LjUgLT4gLTcuNTAwCisKKy0tIHplcm9zCituZXh0dDExMSBuZXh0dG93YXJkICAgICAgICAgIDAgICAgICAgMCAtPiAgMAorbmV4dHQxMTIgbmV4dHRvd2FyZCAgICAgICAgIC0wICAgICAgLTAgLT4gLTAKK25leHR0MTEzIG5leHR0b3dhcmQgICAgICAgMEUrNCAgICAgICAwIC0+ICAwRSs0CituZXh0dDExNCBuZXh0dG93YXJkICAgICAgLTBFKzQgICAgICAtMCAtPiAtMEUrNAorbmV4dHQxMTUgbmV4dHRvd2FyZCAgICAgMC4wMDAwIDAuMDAwMDAgLT4gIDAuMDAwMAorbmV4dHQxMTYgbmV4dHRvd2FyZCAgICAtMC4wMDAwICAgLTAuMDAgLT4gLTAuMDAwMAorbmV4dHQxMTcgbmV4dHRvd2FyZCAgICAgIDBFLTE0MSAgICAgIDAgLT4gIDBFLTE0MQorbmV4dHQxMTggbmV4dHRvd2FyZCAgICAgLTBFLTE0MSAgIC0wMDAgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworbmV4dHQxMjEgbmV4dHRvd2FyZCAgIDI2ODI2ODI2OCAgICAyNjgyNjgyNjggLT4gICAyNjgyNjgyNjgKK25leHR0MTIyIG5leHR0b3dhcmQgIC0yNjgyNjgyNjggICAtMjY4MjY4MjY4IC0+ICAtMjY4MjY4MjY4CituZXh0dDEyMyBuZXh0dG93YXJkICAgMTM0MTM0MTM0ICAgIDEzNDEzNDEzNCAtPiAgIDEzNDEzNDEzNAorbmV4dHQxMjQgbmV4dHRvd2FyZCAgLTEzNDEzNDEzNCAgIC0xMzQxMzQxMzQgLT4gIC0xMzQxMzQxMzQKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK25leHR0MTMxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTlFKzM4NCAgOS45OTk5OTk5OUUrMzg0ICAgLT4gICA5Ljk5OTk5OTk5RSszODQKK25leHR0MTMyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAgLT4gICAxRS0zODMKK25leHR0MTMzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDBFLTM4MyAgMS4wMDAwMDAwMEUtMzgzICAgLT4gICAxLjAwMDAwMDAwRS0zODMKK25leHR0MTM0IG5leHR0b3dhcmQgIDFFLTM5MSAgICAgICAgICAgMUUtMzkxICAgICAgICAgICAgLT4gICAxRS0zOTEKKworbmV4dHQxMzUgbmV4dHRvd2FyZCAgLTFFLTM5MSAgICAgICAgICAtMUUtMzkxICAgICAgICAgICAtPiAgLTFFLTM5MQorbmV4dHQxMzYgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDBFLTM4MyAtMS4wMDAwMDAwMEUtMzgzICAtPiAgLTEuMDAwMDAwMDBFLTM4MworbmV4dHQxMzcgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAtMUUtMzgzICAgICAgICAgICAtPiAgLTFFLTM4MworbmV4dHQxMzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0ICAtPiAgLTkuOTk5OTk5OTlFKzM4NAorCistLS0tLS0tIGxoczxyaHMKK25leHR0MjAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk1IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTYKK25leHR0MjAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk2IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTcKK25leHR0MjAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk3IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTgKK25leHR0MjA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk4IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTkKK25leHR0MjA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5IEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMAorbmV4dHQyMDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAxCituZXh0dDIwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDEKK25leHR0MjA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMQorbmV4dHQyMDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAyCituZXh0dDIxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDMKK25leHR0MjExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDMgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwNAorbmV4dHQyMTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA1CituZXh0dDIxMyBuZXh0dG93YXJkICAxLjAwMDAwMDA1ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDYKK25leHR0MjE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDYgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwNworbmV4dHQyMTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA4CituZXh0dDIxNiBuZXh0dG93YXJkICAxLjAwMDAwMDA4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDkKK25leHR0MjE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDkgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMAorbmV4dHQyMTggbmV4dHRvd2FyZCAgMS4wMDAwMDAxMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCituZXh0dDIxOSBuZXh0dG93YXJkICAxLjAwMDAwMDExICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKKworbmV4dHQyMjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTUgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NAorbmV4dHQyMjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTYgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NQorbmV4dHQyMjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTcgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NgorbmV4dHQyMjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTggSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NworbmV4dHQyMjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTkgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OAorbmV4dHQyMjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMCAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQorbmV4dHQyMjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQorbmV4dHQyMjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQorbmV4dHQyMjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwCituZXh0dDIzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDEKK25leHR0MjMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDMgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMgorbmV4dHQyMzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAzCituZXh0dDIzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDQKK25leHR0MjM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDYgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNQorbmV4dHQyMzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA2CituZXh0dDIzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDcKK25leHR0MjM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwOAorbmV4dHQyMzggbmV4dHRvd2FyZCAtMS4wMDAwMDAxMCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA5CituZXh0dDIzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTAKK25leHR0MjQwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQorCistLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24KK25leHR0MjQxIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTggIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQyNDIgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMDk5OSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCituZXh0dDI0MyBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKK25leHR0MjQ0IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgorbmV4dHQyNDUgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCituZXh0dDI0NiBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKK25leHR0MjQ3IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwNTIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgorbmV4dHQyNDggbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTU1MiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCituZXh0dDI0OSBuZXh0dG93YXJkIC0xLjAwMDAwMDEwOTk4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTAKK25leHR0MjUwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMAorbmV4dHQyNTEgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEwCituZXh0dDI1MiBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKK25leHR0MjUzIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQorbmV4dHQyNTQgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDI1NSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDUyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKK25leHR0MjU2IG5leHR0b3dhcmQgLTEuMDAwMDAwMTE1NTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQorLS0gdWx0cmEtdGlueSBpbnB1dHMKK25leHR0MjYwIG5leHR0b3dhcmQgIDFFLTk5OTk5ICAgICAgIEluZmluaXR5IC0+ICAgMUUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDI2MSBuZXh0dG93YXJkICAxRS05OTk5OTk5OTkgICBJbmZpbml0eSAtPiAgIDFFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQyNjIgbmV4dHRvd2FyZCAgMUUtMzkxICAgICAgICAgSW5maW5pdHkgLT4gICAyRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MjYzIG5leHR0b3dhcmQgLTFFLTk5OTk5ICAgICAgIEluZmluaXR5IC0+ICAtMEUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK25leHR0MjY0IG5leHR0b3dhcmQgLTFFLTk5OTk5OTk5OSAgIEluZmluaXR5IC0+ICAtMEUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK25leHR0MjY1IG5leHR0b3dhcmQgLTFFLTM5MSAgICAgICAgIEluZmluaXR5IC0+ICAtMEUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gWmVyb3MKK25leHR0MzAwIG5leHR0b3dhcmQgIDAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwMSBuZXh0dG93YXJkICAwLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDIgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzAzIG5leHR0b3dhcmQgIDBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwNCBuZXh0dG93YXJkICAwRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDUgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzA2IG5leHR0b3dhcmQgLTAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwNyBuZXh0dG93YXJkIC0wRS0zMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDggbmV4dHRvd2FyZCAtMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzA5IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNwZWNpYWxzCituZXh0dDM1MCBuZXh0dG93YXJkICAgSW5mICAgIEluZmluaXR5IC0+ICBJbmZpbml0eQorbmV4dHQzNTEgbmV4dHRvd2FyZCAgLUluZiAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDM1MiBuZXh0dG93YXJkICAgTmFOICAgIEluZmluaXR5IC0+ICBOYU4KK25leHR0MzUzIG5leHR0b3dhcmQgIHNOYU4gICAgSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDM1NCBuZXh0dG93YXJkICAgTmFONzcgIEluZmluaXR5IC0+ICBOYU43NworbmV4dHQzNTUgbmV4dHRvd2FyZCAgc05hTjg4ICBJbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK25leHR0MzU2IG5leHR0b3dhcmQgIC1OYU4gICAgSW5maW5pdHkgLT4gLU5hTgorbmV4dHQzNTcgbmV4dHRvd2FyZCAtc05hTiAgICBJbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0MzU4IG5leHR0b3dhcmQgIC1OYU43NyAgSW5maW5pdHkgLT4gLU5hTjc3CituZXh0dDM1OSBuZXh0dG93YXJkIC1zTmFOODggIEluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK25leHR0MzcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTlFKzk5OSAgIEluZmluaXR5IC0+IEluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzcxIG5leHR0b3dhcmQgIDkuOTk5OTk5OThFKzk5OSAgIEluZmluaXR5IC0+IDkuOTk5OTk5OTlFKzk5OQorbmV4dHQzNzIgbmV4dHRvd2FyZCAgMUUtOTk5ICAgICAgICAgICAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMUUtOTk5CituZXh0dDM3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwRS05OTkgICBJbmZpbml0eSAtPiAxLjAwMDAwMDAxRS05OTkKK25leHR0Mzc0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5RS05OTkgIEluZmluaXR5IC0+IDEuMDAwMDAwMDBFLTk5OQorbmV4dHQzNzUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OUUtOTk5ICAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMEUtOTk5CituZXh0dDM3NiBuZXh0dG93YXJkICA5RS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAxLjBFLTEwMDYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0Mzc3IG5leHR0b3dhcmQgIDkuOUUtMTAwNiAgICAgICAgIEluZmluaXR5IC0+IDEuMDBFLTEwMDUgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzNzggbmV4dHRvd2FyZCAgOS45OTk5RS0xMDAzICAgICAgSW5maW5pdHkgLT4gMS4wMDAwMEUtMTAwMiAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM3OSBuZXh0dG93YXJkICA5Ljk5OTk5OThFLTEwMDAgICBJbmZpbml0eSAtPiA5Ljk5OTk5OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzgwIG5leHR0b3dhcmQgIDkuOTk5OTk5N0UtMTAwMCAgIEluZmluaXR5IC0+IDkuOTk5OTk5OEUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzODEgbmV4dHRvd2FyZCAgMEUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gMUUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4MiBuZXh0dG93YXJkICAxRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAyRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzgzIG5leHR0b3dhcmQgIDJFLTEwMDcgICAgICAgICAgIEluZmluaXR5IC0+IDNFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCituZXh0dDM4NSBuZXh0dG93YXJkICAtMEUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0Mzg2IG5leHR0b3dhcmQgIC0xRS0xMDA3ICAgICAgICAgIEluZmluaXR5IC0+IC0wRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCituZXh0dDM4NyBuZXh0dG93YXJkICAtMkUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAtMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0Mzg4IG5leHR0b3dhcmQgIC0xMEUtMTAwNyAgICAgICAgIEluZmluaXR5IC0+IC05RS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzODkgbmV4dHRvd2FyZCAgLTEwMEUtMTAwNyAgICAgICAgSW5maW5pdHkgLT4gLTkuOUUtMTAwNiAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM5MCBuZXh0dG93YXJkICAtMTAwMDAwRS0xMDA3ICAgICBJbmZpbml0eSAtPiAtOS45OTk5RS0xMDAzICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzkxIG5leHR0b3dhcmQgIC0xLjAwMDBFLTk5OSAgICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTlFLTEwMDAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM5MiBuZXh0dG93YXJkICAtMS4wMDAwMDAwMEUtOTk5ICBJbmZpbml0eSAtPiAtOS45OTk5OTk5RS0xMDAwICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzOTMgbmV4dHRvd2FyZCAgLTFFLTk5OSAgICAgICAgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OUUtMTAwMCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0Mzk0IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk4RSs5OTkgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk3RSs5OTkKK25leHR0Mzk1IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5RSs5OTkgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk4RSs5OTkKKworLS0tLS0tLSBsaHM+cmhzCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk0CituZXh0dDQwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTUKK25leHR0NDAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NgorbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk3CituZXh0dDQwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTgKK25leHR0NDA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OQorbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5CituZXh0dDQwOCBuZXh0dG93YXJkICAxICAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTkKK25leHR0NDA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwCituZXh0dDQxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMQorbmV4dHQ0MTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDIKK25leHR0NDEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAzCituZXh0dDQxMyBuZXh0dG93YXJkICAxLjAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNAorbmV4dHQ0MTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDUKK25leHR0NDE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA2CituZXh0dDQxNiBuZXh0dG93YXJkICAxLjAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNworbmV4dHQ0MTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDgKK25leHR0NDE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA5CituZXh0dDQxOSBuZXh0dG93YXJkICAxLjAwMDAwMDExICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMAorbmV4dHQ0MjAgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKKworbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk2CituZXh0dDQyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTcKK25leHR0NDIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OAorbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5CituZXh0dDQyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMAorbmV4dHQ0MjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDEKK25leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAxCituZXh0dDQyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQorbmV4dHQ0MjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDIKK25leHR0NDMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAzCituZXh0dDQzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwNAorbmV4dHQ0MzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDUKK25leHR0NDMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA2CituZXh0dDQzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwNworbmV4dHQ0MzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDgKK25leHR0NDM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDggICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA5CituZXh0dDQzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMAorbmV4dHQ0MzggbmV4dHRvd2FyZCAtMS4wMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKK25leHR0NDM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCisKKy0tIGlucHV0IG9wZXJhbmQgaXMgPnByZWNpc2lvbgorbmV4dHQ0NDEgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMDk5OCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTAKK25leHR0NDQyIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTkgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwCituZXh0dDQ0MyBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMAorbmV4dHQ0NDQgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKK25leHR0NDQ1IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCituZXh0dDQ0NiBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQ0NDcgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTA1MiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKK25leHR0NDQ4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTE1NTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCituZXh0dDQ0OSBuZXh0dG93YXJkIC0xLjAwMDAwMDEwOTk4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQorbmV4dHQ0NTAgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMDk5OSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKK25leHR0NDUxIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCituZXh0dDQ1MiBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgorbmV4dHQ0NTMgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKK25leHR0NDU0IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCituZXh0dDQ1NSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDUyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgorbmV4dHQ0NTYgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTU1MiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKKy0tIHVsdHJhLXRpbnkgaW5wdXRzCituZXh0dDQ2MCBuZXh0dG93YXJkICAxRS05OTk5OSAgICAgICAgLUluZmluaXR5IC0+ICAgMEUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCituZXh0dDQ2MSBuZXh0dG93YXJkICAxRS05OTk5OTk5OTkgICAgLUluZmluaXR5IC0+ICAgMEUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCituZXh0dDQ2MiBuZXh0dG93YXJkICAxRS0zOTEgICAgICAgICAgLUluZmluaXR5IC0+ICAgMEUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCituZXh0dDQ2MyBuZXh0dG93YXJkIC0xRS05OTk5OSAgICAgICAgLUluZmluaXR5IC0+ICAtMUUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ0NjQgbmV4dHRvd2FyZCAtMUUtOTk5OTk5OTk5ICAgIC1JbmZpbml0eSAtPiAgLTFFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NDY1IG5leHR0b3dhcmQgLTFFLTM5MSAgICAgICAgICAtSW5maW5pdHkgLT4gIC0yRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIFplcm9zCituZXh0dDUwMCBuZXh0dG93YXJkIC0wICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1MDEgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTAyIG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwMyBuZXh0dG93YXJkIC0wLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1MDQgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTA1IG5leHR0b3dhcmQgIDBFKzMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwNiBuZXh0dG93YXJkICAwRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1MDcgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTA4IG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtMC4wMDAwICAgLT4gLTAuMDAKKworLS0gc3BlY2lhbHMKK25leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OUUrMzg0CituZXh0dDU1MSBuZXh0dG93YXJkICAtSW5mICAgICAtSW5maW5pdHkgLT4gLUluZmluaXR5CituZXh0dDU1MiBuZXh0dG93YXJkICAgTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTgorbmV4dHQ1NTMgbmV4dHRvd2FyZCAgc05hTiAgICAgLUluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ1NTQgbmV4dHRvd2FyZCAgIE5hTjc3ICAgLUluZmluaXR5IC0+ICBOYU43NworbmV4dHQ1NTUgbmV4dHRvd2FyZCAgc05hTjg4ICAgLUluZmluaXR5IC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ1NTYgbmV4dHRvd2FyZCAgLU5hTiAgICAgLUluZmluaXR5IC0+IC1OYU4KK25leHR0NTU3IG5leHR0b3dhcmQgLXNOYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0NTU4IG5leHR0b3dhcmQgIC1OYU43NyAgIC1JbmZpbml0eSAtPiAtTmFONzcKK25leHR0NTU5IG5leHR0b3dhcmQgLXNOYU44OCAgIC1JbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CituZXh0dDU3MCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5RSs5OTkgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OThFKzk5OQorbmV4dHQ1NzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OEUrOTk5ICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTk3RSs5OTkKK25leHR0NTcyIG5leHR0b3dhcmQgIDFFLTk5OSAgICAgICAgICAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwRS05OTkgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1NzQgbmV4dHRvd2FyZCAgOUUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiA4RS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTc1IG5leHR0b3dhcmQgIDkuOUUtMTAwNiAgICAgICAgICAtSW5maW5pdHkgLT4gOS44RS0xMDA2ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU3NiBuZXh0dG93YXJkICA5Ljk5OTlFLTEwMDMgICAgICAgLUluZmluaXR5IC0+IDkuOTk5OEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1NzcgbmV4dHRvd2FyZCAgOS45OTk5OTk5RS0xMDAwICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OThFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTc4IG5leHR0b3dhcmQgIDkuOTk5OTk5OEUtMTAwMCAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk3RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU3OSBuZXh0dG93YXJkICA5Ljk5OTk5OTdFLTEwMDAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5NkUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1ODAgbmV4dHRvd2FyZCAgMEUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTgxIG5leHR0b3dhcmQgIDFFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gMEUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK25leHR0NTgyIG5leHR0b3dhcmQgIDJFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gMUUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK25leHR0NTgzIG5leHR0b3dhcmQgIC0wRS0xMDA3ICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4NCBuZXh0dG93YXJkICAtMUUtMTAwNyAgICAgICAgICAgLUluZmluaXR5IC0+IC0yRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1ODUgbmV4dHRvd2FyZCAgLTJFLTEwMDcgICAgICAgICAgIC1JbmZpbml0eSAtPiAtM0UtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTg2IG5leHR0b3dhcmQgIC0xMEUtMTAwNyAgICAgICAgICAtSW5maW5pdHkgLT4gLTEuMUUtMTAwNiAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4NyBuZXh0dG93YXJkICAtMTAwRS0xMDA3ICAgICAgICAgLUluZmluaXR5IC0+IC0xLjAxRS0xMDA1ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1ODggbmV4dHRvd2FyZCAgLTEwMDAwMEUtMTAwNyAgICAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMUUtMTAwMiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTg5IG5leHR0b3dhcmQgIC0xLjAwMDBFLTk5OSAgICAgICAtSW5maW5pdHkgLT4gLTEuMDAwMDAwMDFFLTk5OQorbmV4dHQ1OTAgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDBFLTk5OSAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMDAwMUUtOTk5CituZXh0dDU5MSBuZXh0dG93YXJkICAtMUUtOTk5ICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkKK25leHR0NTkyIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk4RSs5OTkgICAtSW5maW5pdHkgLT4gLTkuOTk5OTk5OTlFKzk5OQorbmV4dHQ1OTMgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzk5OSAgIC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKworCisKKy0tLS0tLS0gU3BlY2lhbHMKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCituZXh0dDc4MCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK25leHR0NzgxIG5leHR0b3dhcmQgLUluZiAgLTEwMDAgIC0+IC05Ljk5OTk5OTk5RSszODQKK25leHR0NzgyIG5leHR0b3dhcmQgLUluZiAgLTEgICAgIC0+IC05Ljk5OTk5OTk5RSszODQKK25leHR0NzgzIG5leHR0b3dhcmQgLUluZiAgLTAgICAgIC0+IC05Ljk5OTk5OTk5RSszODQKK25leHR0Nzg0IG5leHR0b3dhcmQgLUluZiAgIDAgICAgIC0+IC05Ljk5OTk5OTk5RSszODQKK25leHR0Nzg1IG5leHR0b3dhcmQgLUluZiAgIDEgICAgIC0+IC05Ljk5OTk5OTk5RSszODQKK25leHR0Nzg2IG5leHR0b3dhcmQgLUluZiAgIDEwMDAgIC0+IC05Ljk5OTk5OTk5RSszODQKK25leHR0Nzg3IG5leHR0b3dhcmQgLTEwMDAgLUluZiAgIC0+IC0xMDAwLjAwMDAxCituZXh0dDc4OCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK25leHR0Nzg5IG5leHR0b3dhcmQgLTEgICAgLUluZiAgIC0+IC0xLjAwMDAwMDAxCituZXh0dDc5MCBuZXh0dG93YXJkIC0wICAgIC1JbmYgICAtPiAtMUUtMzkxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NzkyIG5leHR0b3dhcmQgIDEgICAgLUluZiAgIC0+ICAwLjk5OTk5OTk5OQorbmV4dHQ3OTMgbmV4dHRvd2FyZCAgMTAwMCAtSW5mICAgLT4gIDk5OS45OTk5OTkKK25leHR0Nzk0IG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5RSszODQKKworbmV4dHQ4MDAgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTlFKzM4NAorbmV4dHQ4MDEgbmV4dHRvd2FyZCAgSW5mICAtMTAwMCAgLT4gIDkuOTk5OTk5OTlFKzM4NAorbmV4dHQ4MDIgbmV4dHRvd2FyZCAgSW5mICAtMSAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NAorbmV4dHQ4MDMgbmV4dHRvd2FyZCAgSW5mICAtMCAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NAorbmV4dHQ4MDQgbmV4dHRvd2FyZCAgSW5mICAgMCAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NAorbmV4dHQ4MDUgbmV4dHRvd2FyZCAgSW5mICAgMSAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NAorbmV4dHQ4MDYgbmV4dHRvd2FyZCAgSW5mICAgMTAwMCAgLT4gIDkuOTk5OTk5OTlFKzM4NAorbmV4dHQ4MDcgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CituZXh0dDgwOCBuZXh0dG93YXJkIC0xMDAwICBJbmYgICAtPiAtOTk5Ljk5OTk5OQorbmV4dHQ4MDkgbmV4dHRvd2FyZCAtSW5mICAgSW5mICAgLT4gLTkuOTk5OTk5OTlFKzM4NAorbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5CituZXh0dDgxMSBuZXh0dG93YXJkIC0wICAgICBJbmYgICAtPiAgMUUtMzkxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ4MTIgbmV4dHRvd2FyZCAgMCAgICAgSW5mICAgLT4gIDFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0ODEzIG5leHR0b3dhcmQgIDEgICAgIEluZiAgIC0+ICAxLjAwMDAwMDAxCituZXh0dDgxNCBuZXh0dG93YXJkICAxMDAwICBJbmYgICAtPiAgMTAwMC4wMDAwMQorbmV4dHQ4MTUgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK25leHR0ODIxIG5leHR0b3dhcmQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK25leHR0ODIyIG5leHR0b3dhcmQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK25leHR0ODIzIG5leHR0b3dhcmQgIE5hTiAtMSAgICAgIC0+ICBOYU4KK25leHR0ODI0IG5leHR0b3dhcmQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK25leHR0ODI1IG5leHR0b3dhcmQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK25leHR0ODI2IG5leHR0b3dhcmQgIE5hTiAgMSAgICAgIC0+ICBOYU4KK25leHR0ODI3IG5leHR0b3dhcmQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK25leHR0ODI4IG5leHR0b3dhcmQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK25leHR0ODI5IG5leHR0b3dhcmQgIE5hTiAgTmFOICAgIC0+ICBOYU4KK25leHR0ODMwIG5leHR0b3dhcmQgLUluZiAgTmFOICAgIC0+ICBOYU4KK25leHR0ODMxIG5leHR0b3dhcmQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK25leHR0ODMyIG5leHR0b3dhcmQgLTEgICAgTmFOICAgIC0+ICBOYU4KK25leHR0ODMzIG5leHR0b3dhcmQgLTAgICAgTmFOICAgIC0+ICBOYU4KK25leHR0ODM0IG5leHR0b3dhcmQgIDAgICAgTmFOICAgIC0+ICBOYU4KK25leHR0ODM1IG5leHR0b3dhcmQgIDEgICAgTmFOICAgIC0+ICBOYU4KK25leHR0ODM2IG5leHR0b3dhcmQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK25leHR0ODM3IG5leHR0b3dhcmQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworbmV4dHQ4NDEgbmV4dHRvd2FyZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODQyIG5leHR0b3dhcmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDQgbmV4dHRvd2FyZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODQ1IG5leHR0b3dhcmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDcgbmV4dHRvd2FyZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODQ4IG5leHR0b3dhcmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTAgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODUxIG5leHR0b3dhcmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTMgbmV4dHRvd2FyZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODU0IG5leHR0b3dhcmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTYgbmV4dHRvd2FyZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODU3IG5leHR0b3dhcmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTkgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworbmV4dHQ4NjEgbmV4dHRvd2FyZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK25leHR0ODYyIG5leHR0b3dhcmQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCituZXh0dDg2MyBuZXh0dG93YXJkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworbmV4dHQ4NjQgbmV4dHRvd2FyZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK25leHR0ODY1IG5leHR0b3dhcmQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CituZXh0dDg2NiBuZXh0dG93YXJkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworbmV4dHQ4NjcgbmV4dHRvd2FyZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK25leHR0ODY4IG5leHR0b3dhcmQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CituZXh0dDg2OSBuZXh0dG93YXJkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK25leHR0ODcxIG5leHR0b3dhcmQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODcyIG5leHR0b3dhcmQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODczIG5leHR0b3dhcmQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODc0IG5leHR0b3dhcmQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODc1IG5leHR0b3dhcmQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODc2IG5leHR0b3dhcmQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODc3IG5leHR0b3dhcmQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODc4IG5leHR0b3dhcmQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODc5IG5leHR0b3dhcmQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODgwIG5leHR0b3dhcmQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODgxIG5leHR0b3dhcmQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODgyIG5leHR0b3dhcmQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorbmV4dHQ4ODMgbmV4dHRvd2FyZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4ODQgbmV4dHRvd2FyZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCituZXh0dDg4NSBuZXh0dG93YXJkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK25leHR0OTAwIG5leHR0b3dhcmQgMSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK25leHR0OTAxIG5leHR0b3dhcmQgIyAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL29yLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvb3IuZGVjVGVzdAppbmRleCBmNDcxZDBiLi4xYWViZmY0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvb3IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvb3IuZGVjVGVzdApAQCAtMSwzMzQgKzEsMzM0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBvci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotDQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCi1vcngwMDEgb3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDANCi1vcngwMDIgb3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDENCi1vcngwMDMgb3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDENCi1vcngwMDQgb3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDENCi1vcngwMDUgb3IgICAgICAgICAgMTEwMCAxMDEwIC0+IDExMTANCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQ0KLW9yeDAwNiBvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotb3J4MDA3IG9yIDAwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAxMDAwMDAwMDANCi1vcngwMDggb3IgMTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMA0KLW9yeDAwOSBvciAxMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwDQotb3J4MDEwIG9yIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1vcngwMTEgb3IgMDAwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMA0KLW9yeDAxMiBvciAwMTAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwDQotb3J4MDEzIG9yIDAxMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgMTAwMDAwMDANCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi0tLSAgICAgICAgMTIzNDU2Nzg5ICAgICAxMjM0NTY3ODkgICAgICAxMjM0NTY3ODkNCi1vcngwMjEgb3IgMTExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwMjIgb3IgMTExMTExMTExMTExICAxMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwMjMgb3IgIDExMTExMTExICAgICAgMTExMTExMTEgIC0+ICAgMTExMTExMTENCi1vcngwMjUgb3IgICAxMTExMTExICAgICAgIDExMTExMTEgIC0+ICAgIDExMTExMTENCi1vcngwMjYgb3IgICAgMTExMTExICAgICAgICAxMTExMTEgIC0+ICAgICAxMTExMTENCi1vcngwMjcgb3IgICAgIDExMTExICAgICAgICAgMTExMTEgIC0+ICAgICAgMTExMTENCi1vcngwMjggb3IgICAgICAxMTExICAgICAgICAgIDExMTEgIC0+ICAgICAgIDExMTENCi1vcngwMjkgb3IgICAgICAgMTExICAgICAgICAgICAxMTEgIC0+ICAgICAgICAxMTENCi1vcngwMzEgb3IgICAgICAgIDExICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgMTENCi1vcngwMzIgb3IgICAgICAgICAxICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgIDENCi1vcngwMzMgb3IgMTExMTExMTExMTExIDExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwMzQgb3IgMTExMTExMTExMTEgMTExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwMzUgb3IgMTExMTExMTExMSAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwMzYgb3IgMTExMTExMTExIDExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi0NCi1vcngwNDAgb3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwNDEgb3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwNDIgb3IgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwNDMgb3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMTENCi1vcngwNDQgb3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTExMTENCi1vcngwNDUgb3IgICAgIDExMTExICAgICAxMDAwMDEwMDAgIC0+ICAxMDAwMTExMTENCi1vcngwNDYgb3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTENCi1vcngwNDcgb3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTENCi1vcngwNDggb3IgICAgICAgIDExICAgICAxMDEwMDAwMDAgIC0+ICAxMDEwMDAwMTENCi1vcngwNDkgb3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDENCi0NCi1vcngwNTAgb3IgMTExMTExMTExMSAgMSAgLT4gIDExMTExMTExMQ0KLW9yeDA1MSBvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTExDQotb3J4MDUyIG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMQ0KLW9yeDA1MyBvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMQ0KLW9yeDA1NCBvciAgICAgMTExMTExICAxICAtPiAgMTExMTExDQotb3J4MDU1IG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMQ0KLW9yeDA1NiBvciAgICAgICAxMTExICAxICAtPiAgMTExMQ0KLW9yeDA1NyBvciAgICAgICAgMTExICAxICAtPiAgMTExDQotb3J4MDU4IG9yICAgICAgICAgMTEgIDEgIC0+ICAxMQ0KLW9yeDA1OSBvciAgICAgICAgICAxICAxICAtPiAgMQ0KLQ0KLW9yeDA2MCBvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExDQotb3J4MDYxIG9yICAxMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTENCi1vcngwNjIgb3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExDQotb3J4MDYzIG9yICAgIDExMTExMTEgIDAgIC0+ICAxMTExMTExDQotb3J4MDY0IG9yICAgICAxMTExMTEgIDAgIC0+ICAxMTExMTENCi1vcngwNjUgb3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExDQotb3J4MDY2IG9yICAgICAgIDExMTEgIDAgIC0+ICAxMTExDQotb3J4MDY3IG9yICAgICAgICAxMTEgIDAgIC0+ICAxMTENCi1vcngwNjggb3IgICAgICAgICAxMSAgMCAgLT4gIDExDQotb3J4MDY5IG9yICAgICAgICAgIDEgIDAgIC0+ICAxDQotDQotb3J4MDcwIG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwNzEgb3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDA3MiBvciAxICAgIDExMTExMTExICAtPiAgMTExMTExMTENCi1vcngwNzMgb3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTENCi1vcngwNzQgb3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMQ0KLW9yeDA3NSBvciAxICAgICAgIDExMTExICAtPiAgMTExMTENCi1vcngwNzYgb3IgMSAgICAgICAgMTExMSAgLT4gIDExMTENCi1vcngwNzcgb3IgMSAgICAgICAgIDExMSAgLT4gIDExMQ0KLW9yeDA3OCBvciAxICAgICAgICAgIDExICAtPiAgMTENCi1vcngwNzkgb3IgMSAgICAgICAgICAgMSAgLT4gIDENCi0NCi1vcngwODAgb3IgMCAgMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDA4MSBvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExDQotb3J4MDgyIG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQ0KLW9yeDA4MyBvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQ0KLW9yeDA4NCBvciAwICAgICAgMTExMTExICAtPiAgMTExMTExDQotb3J4MDg1IG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQ0KLW9yeDA4NiBvciAwICAgICAgICAxMTExICAtPiAgMTExMQ0KLW9yeDA4NyBvciAwICAgICAgICAgMTExICAtPiAgMTExDQotb3J4MDg4IG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQ0KLW9yeDA4OSBvciAwICAgICAgICAgICAxICAtPiAgMQ0KLQ0KLW9yeDA5MCBvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDA5MSBvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDA5MyBvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDA5NCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQ0KLW9yeDA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDA5NiBvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDA5NyBvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLQ0KLW9yeDEwMCBvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDEwMSBvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDEwMiBvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDEwMyBvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDEwNCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQ0KLW9yeDEwNSBvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gIDExMTExMTExMQ0KLW9yeDEwNiBvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTExMQ0KLW9yeDEwNyBvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTExMQ0KLW9yeDEwOCBvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMQ0KLQ0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KLW9yeDIyMCBvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIyMSBvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIyMyBvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIyNCBvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIyNiBvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIyNyBvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIyOSBvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIzMCBvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDIzMiBvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGEgZmV3IHJhbmRvbXMNCi1vcngyNDAgb3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNDEgb3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNDIgb3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNDMgb3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNDQgb3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRA0KLW9yeDI1MCBvciAgMjAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjUxIG9yICA3MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNTIgb3IgIDgwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI1MyBvciAgOTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjU0IG9yICAyMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNTUgb3IgIDcwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI1NiBvciAgODAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjU3IG9yICA5MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNTggb3IgIDEwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI1OSBvciAgMTAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjYwIG9yICAxMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNjEgb3IgIDEwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI2MiBvciAgMDAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjYzIG9yICAwMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNjQgb3IgIDAwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI2NSBvciAgMDAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QtMQ0KLW9yeDI3MCBvciAgMDIwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjcxIG9yICAwNzAxMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNzIgb3IgIDA4MDAxMDAwMCAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI3MyBvciAgMDkwMDAxMDAwIDEwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Mjc0IG9yICAxMDAwMDAxMDAgMDIwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNzUgb3IgIDEwMDAwMDAwMCAwNzAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI3NiBvciAgMTAwMDAwMDEwIDA4MDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Mjc3IG9yICAxMDAwMDAwMDAgMDkwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IExTRA0KLW9yeDI4MCBvciAgMDAxMDAwMDAyIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjgxIG9yICAwMDAwMDAwMDcgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyODIgb3IgIDAwMDAwMDAwOCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI4MyBvciAgMDAwMDAwMDA5IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Mjg0IG9yICAxMDAwMDAwMDAgMDAwMTAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyODUgb3IgIDEwMDEwMDAwMCAwMDEwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI4NiBvciAgMTAwMDEwMDAwIDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Mjg3IG9yICAxMDAwMDEwMDAgMTAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1pZGRpZQ0KLW9yeDI4OCBvciAgMDAxMDIwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Mjg5IG9yICAwMDAwNzAwMDEgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyOTAgb3IgIDAwMDA4MDAwMCAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI5MSBvciAgMDAwMDkwMDAwIDEwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjkyIG9yICAxMDAwMDAwMTAgMDAwMDIwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyOTMgb3IgIDEwMDEwMDAwMCAwMDAwNzAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI5NCBvciAgMTAwMDEwMTAwIDAwMDA4MDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Mjk1IG9yICAxMDAwMDEwMDAgMDAwMDkwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzaWducw0KLW9yeDI5NiBvciAtMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI5NyBvciAtMTAwMDAxMDAwICAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI5OCBvciAgMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI5OSBvciAgMTAwMDAxMDAwICAwMDAwMTEwMDAgLT4gIDEwMDAxMTAwMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotb3J4MzMxIG9yICAyICAgOS45OTk5OTk5OUUrOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzMzIgb3IgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDMzMyBvciAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzM0IG9yICA1ICAgMUUtMTAwNyAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzMzUgb3IgIDYgICAtMUUtMTAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDMzNiBvciAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzM3IG9yICA4ICAgLTFFLTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzMzggb3IgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM0MSBvciAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzQyIG9yICAxRS05OTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNDMgb3IgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM0NCBvciAgMUUtMTAwNyAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzQ1IG9yICAtMUUtMTAwNyAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNDYgb3IgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM0NyBvciAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzQ4IG9yICAtOS45OTk5OTk5OUUrOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMNCi1vcngzNjEgb3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzYzIG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNjQgb3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzY2IG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNzEgb3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzczIG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNzQgb3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Mzc2IG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yDQotb3J4NzgwIG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng3ODEgb3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDc4MiBvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4NzgzIG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng3ODQgb3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDc4NSBvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Nzg2IG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng3ODcgb3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDc4OCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Nzg5IG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng3OTAgb3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDc5MSBvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4NzkyIG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng3OTMgb3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDc5NCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotb3J4ODAwIG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgwMiBvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODAzIG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgwNSBvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODA2IG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgwOCBvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODA5IG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgxMSBvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODEyIG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgxNCBvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODE1IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1vcng4MjEgb3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgyMiBvciAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODIzIG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MjQgb3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgyNSBvciAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODI2IG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4Mjcgb3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgyOCBvciAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODI5IG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MzAgb3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgzMSBvciAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODMyIG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MzMgb3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgzNCBvciAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODM1IG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MzYgb3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgzNyBvciAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotb3J4ODQxIG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg0MiBvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NDMgb3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODQ0IG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg0NSBvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NDYgb3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODQ3IG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg0OCBvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NDkgb3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODUwIG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg1MSBvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NTIgb3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODUzIG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg1NCBvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NTUgb3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODU2IG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg1NyBvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NTggb3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODU5IG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1vcng4NjEgb3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg2MiBvciArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODYzIG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NjQgb3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg2NSBvciAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODY2IG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4Njcgb3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg2OCBvciAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODY5IG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NzEgb3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg3MiBvciAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODczIG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NzQgb3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg3NSBvciAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODc2IG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4Nzcgb3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg3OCBvciAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODc5IG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4ODAgb3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg4MSBvciArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODgyIG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4ODMgb3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg4NCBvciAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODg1IG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK29yeDAwMSBvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAorb3J4MDAyIG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxCitvcngwMDMgb3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDEKK29yeDAwNCBvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQorb3J4MDA1IG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAxMTEwCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorb3J4MDA2IG9yIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK29yeDAwNyBvciAwMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwCitvcngwMDggb3IgMTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAorb3J4MDA5IG9yIDEwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAKK29yeDAxMCBvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitvcngwMTEgb3IgMDAwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMAorb3J4MDEyIG9yIDAxMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAKK29yeDAxMyBvciAwMTAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgIDEwMDAwMDAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgIDEyMzQ1Njc4OSAgICAgMTIzNDU2Nzg5ICAgICAgMTIzNDU2Nzg5CitvcngwMjEgb3IgMTExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDAyMiBvciAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDIzIG9yICAxMTExMTExMSAgICAgIDExMTExMTExICAtPiAgIDExMTExMTExCitvcngwMjUgb3IgICAxMTExMTExICAgICAgIDExMTExMTEgIC0+ICAgIDExMTExMTEKK29yeDAyNiBvciAgICAxMTExMTEgICAgICAgIDExMTExMSAgLT4gICAgIDExMTExMQorb3J4MDI3IG9yICAgICAxMTExMSAgICAgICAgIDExMTExICAtPiAgICAgIDExMTExCitvcngwMjggb3IgICAgICAxMTExICAgICAgICAgIDExMTEgIC0+ICAgICAgIDExMTEKK29yeDAyOSBvciAgICAgICAxMTEgICAgICAgICAgIDExMSAgLT4gICAgICAgIDExMQorb3J4MDMxIG9yICAgICAgICAxMSAgICAgICAgICAgIDExICAtPiAgICAgICAgIDExCitvcngwMzIgb3IgICAgICAgICAxICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgIDEKK29yeDAzMyBvciAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDM0IG9yIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwMzUgb3IgMTExMTExMTExMSAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDAzNiBvciAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMQorCitvcngwNDAgb3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDA0MSBvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDQyIG9yICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwNDMgb3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMTEKK29yeDA0NCBvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTExMQorb3J4MDQ1IG9yICAgICAxMTExMSAgICAgMTAwMDAxMDAwICAtPiAgMTAwMDExMTExCitvcngwNDYgb3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTEKK29yeDA0NyBvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQorb3J4MDQ4IG9yICAgICAgICAxMSAgICAgMTAxMDAwMDAwICAtPiAgMTAxMDAwMDExCitvcngwNDkgb3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDEKKworb3J4MDUwIG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTEKK29yeDA1MSBvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTExCitvcngwNTIgb3IgICAxMTExMTExMSAgMSAgLT4gIDExMTExMTExCitvcngwNTMgb3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTEKK29yeDA1NCBvciAgICAgMTExMTExICAxICAtPiAgMTExMTExCitvcngwNTUgb3IgICAgICAxMTExMSAgMSAgLT4gIDExMTExCitvcngwNTYgb3IgICAgICAgMTExMSAgMSAgLT4gIDExMTEKK29yeDA1NyBvciAgICAgICAgMTExICAxICAtPiAgMTExCitvcngwNTggb3IgICAgICAgICAxMSAgMSAgLT4gIDExCitvcngwNTkgb3IgICAgICAgICAgMSAgMSAgLT4gIDEKKworb3J4MDYwIG9yIDExMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTEKK29yeDA2MSBvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExCitvcngwNjIgb3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCitvcngwNjMgb3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTEKK29yeDA2NCBvciAgICAgMTExMTExICAwICAtPiAgMTExMTExCitvcngwNjUgb3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCitvcngwNjYgb3IgICAgICAgMTExMSAgMCAgLT4gIDExMTEKK29yeDA2NyBvciAgICAgICAgMTExICAwICAtPiAgMTExCitvcngwNjggb3IgICAgICAgICAxMSAgMCAgLT4gIDExCitvcngwNjkgb3IgICAgICAgICAgMSAgMCAgLT4gIDEKKworb3J4MDcwIG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDA3MSBvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwNzIgb3IgMSAgICAxMTExMTExMSAgLT4gIDExMTExMTExCitvcngwNzMgb3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTEKK29yeDA3NCBvciAxICAgICAgMTExMTExICAtPiAgMTExMTExCitvcngwNzUgb3IgMSAgICAgICAxMTExMSAgLT4gIDExMTExCitvcngwNzYgb3IgMSAgICAgICAgMTExMSAgLT4gIDExMTEKK29yeDA3NyBvciAxICAgICAgICAgMTExICAtPiAgMTExCitvcngwNzggb3IgMSAgICAgICAgICAxMSAgLT4gIDExCitvcngwNzkgb3IgMSAgICAgICAgICAgMSAgLT4gIDEKKworb3J4MDgwIG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDA4MSBvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwODIgb3IgMCAgICAxMTExMTExMSAgLT4gIDExMTExMTExCitvcngwODMgb3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTEKK29yeDA4NCBvciAwICAgICAgMTExMTExICAtPiAgMTExMTExCitvcngwODUgb3IgMCAgICAgICAxMTExMSAgLT4gIDExMTExCitvcngwODYgb3IgMCAgICAgICAgMTExMSAgLT4gIDExMTEKK29yeDA4NyBvciAwICAgICAgICAgMTExICAtPiAgMTExCitvcngwODggb3IgMCAgICAgICAgICAxMSAgLT4gIDExCitvcngwODkgb3IgMCAgICAgICAgICAgMSAgLT4gIDEKKworb3J4MDkwIG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitvcngwOTEgb3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK29yeDA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorb3J4MDkzIG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitvcngwOTQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK29yeDA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorb3J4MDk2IG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitvcngwOTcgb3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK29yeDA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorCitvcngxMDAgb3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDEwMSBvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MTAyIG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgMTExMTExMTExCitvcngxMDMgb3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDEwNCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorb3J4MTA1IG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgMTExMTExMTExCitvcngxMDYgb3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTExMTEKK29yeDEwNyBvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTExMQorb3J4MTA4IG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTExCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworb3J4MjIwIG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjEgb3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjIzIG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjQgb3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjI2IG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjcgb3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjI5IG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMzAgb3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjMyIG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitvcngyNDAgb3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI0MSBvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjQyIG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNDMgb3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI0NCBvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK29yeDI1MCBvciAgMjAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTEgb3IgIDcwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjUyIG9yICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1MyBvciAgOTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTQgb3IgIDIwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjU1IG9yICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1NiBvciAgODAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTcgb3IgIDkwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjU4IG9yICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1OSBvciAgMTAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNjAgb3IgIDEwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjYxIG9yICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI2MiBvciAgMDAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNjMgb3IgIDAwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjY0IG9yICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI2NSBvciAgMDAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitvcngyNzAgb3IgIDAyMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjcxIG9yICAwNzAxMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI3MiBvciAgMDgwMDEwMDAwIDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNzMgb3IgIDA5MDAwMTAwMCAxMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjc0IG9yICAxMDAwMDAxMDAgMDIwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI3NSBvciAgMTAwMDAwMDAwIDA3MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNzYgb3IgIDEwMDAwMDAxMCAwODAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjc3IG9yICAxMDAwMDAwMDAgMDkwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitvcngyODAgb3IgIDAwMTAwMDAwMiAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjgxIG9yICAwMDAwMDAwMDcgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4MiBvciAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyODMgb3IgIDAwMDAwMDAwOSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjg0IG9yICAxMDAwMDAwMDAgMDAwMTAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4NSBvciAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyODYgb3IgIDEwMDAxMDAwMCAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjg3IG9yICAxMDAwMDEwMDAgMTAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitvcngyODggb3IgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjg5IG9yICAwMDAwNzAwMDEgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5MCBvciAgMDAwMDgwMDAwIDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTEgb3IgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjkyIG9yICAxMDAwMDAwMTAgMDAwMDIwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5MyBvciAgMTAwMTAwMDAwIDAwMDA3MDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTQgb3IgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjk1IG9yICAxMDAwMDEwMDAgMDAwMDkwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitvcngyOTYgb3IgLTEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5NyBvciAtMTAwMDAxMDAwICAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjk4IG9yICAxMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTkgb3IgIDEwMDAwMTAwMCAgMDAwMDExMDAwIC0+ICAxMDAwMTEwMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK29yeDMzMSBvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzMzIgb3IgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzMzIG9yICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDMzNCBvciAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzMzUgb3IgIDYgICAtMUUtMTAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzM2IG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDMzNyBvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzMzggb3IgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzQxIG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0MiBvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNDMgb3IgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzQ0IG9yICAxRS0xMDA3ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0NSBvciAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNDYgb3IgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzQ3IG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0OCBvciAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycworb3J4MzYxIG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNjMgb3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzY0IG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNjYgb3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzcxIG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNzMgb3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mzc0IG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNzYgb3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitvcng3ODAgb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4NzgxIG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4MiBvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODMgb3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Nzg0IG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4NSBvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODYgb3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Nzg3IG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4OCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODkgb3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4NzkwIG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc5MSBvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3OTIgb3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4NzkzIG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc5NCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK29yeDgwMCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODAyIG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwMyBvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODA1IG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwNiBvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODA4IG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwOSBvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODExIG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgxMiBvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODE0IG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgxNSBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK29yeDgyMSBvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MjIgb3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODIzIG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgyNCBvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MjUgb3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODI2IG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgyNyBvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Mjggb3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODI5IG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgzMCBvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MzEgb3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODMyIG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgzMyBvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MzQgb3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODM1IG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgzNiBvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Mzcgb3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitvcng4NDEgb3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDIgb3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDMgb3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDQgb3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDUgb3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDYgb3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDcgb3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDggb3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDkgb3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTAgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTEgb3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTIgb3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTMgb3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTQgb3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTUgb3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTYgb3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTcgb3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTggb3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTkgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK29yeDg2MSBvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NjIgb3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODYzIG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg2NCBvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NjUgb3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODY2IG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg2NyBvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Njggb3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODY5IG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3MSBvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NzIgb3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODczIG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3NCBvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NzUgb3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODc2IG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3NyBvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Nzggb3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODc5IG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg4MCBvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4ODEgb3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODgyIG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg4MyBvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4ODQgb3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODg1IG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wb3dlcnNxcnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wb3dlcnNxcnQuZGVjVGVzdAppbmRleCA2YzAyMWEwLi4yNjBiOTQxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcG93ZXJzcXJ0LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Bvd2Vyc3FydC5kZWNUZXN0CkBAIC0xLDI5NzAgKzEsMjk3MCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gcG93ZXJzcXJ0LmRlY1Rlc3QgLS0gZGVjaW1hbCBzcXVhcmUgcm9vdCwgdXNpbmcgcG93ZXIgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDQsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgdGFrZW4gZnJvbSBzcXVhcmVyb290LmRlY1Rlc3QgYnV0IGFyZQ0KLS0tIGV2YWx1YXRlZCB1c2luZyB0aGUgcG93ZXIgb3BlcmF0b3IuICBUaGUgZGlmZmVyZW5jZXMgaW4gcmVzdWx0cw0KLS0tICgxNTMgb3V0IG9mIDI4NTYpIGZhbGwgaW50byB0aGUgZm9sbG93aW5nIGNhdGVnb3JpZXM6DQotLS0NCi0tLSAgICB4ICAgICoqIDAuNSAoeD4wKSBoYXMgbm8gcHJlZmVycmVkIGV4cG9uZW50LCBhbmQgaXMgSW5leGFjdA0KLS0tICAgICAgICAgICAgICAgIChhbmQgaGVuY2UgZnVsbCBwcmVjaXNpb24pOyBhbG1vc3QgYWxsIGRpZmZlcmVuY2VzIGFyZQ0KLS0tICAgICAgICAgICAgICAgIGluIHRoaXMgY2F0ZWdvcnkNCi0tLSAgICAwLjAwICoqIDAuNSBiZWNvbWVzIDAgKG5vdCAwLjApLCBldGMuDQotLS0gICAtMCAgICAqKiAwLjUgYmVjb21lcyAwIChuZXZlciAtMCkNCi0tLSAgICBTb21lIGV4YWN0IHN1Ym5vcm1hbHMgYmVjb21lIGluZXhhY3QgYW5kIGhlbmNlIHVuZGVyZmxvd3MNCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLS0tIGJhc2ljcw0KLXB3c3gwMDEgIHBvd2VyIDEgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwMDIgIHBvd2VyIC0xICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4MDAzICBwb3dlciAxLjAwICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDA0ICBwb3dlciAtMS4wMCAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDAwNSAgcG93ZXIgMCAgICAgICAgMC41IC0+IDANCi1wd3N4MDA2ICBwb3dlciAwMC4wICAgICAwLjUgLT4gMA0KLXB3c3gwMDcgIHBvd2VyIDAuMDAgICAgIDAuNSAtPiAwDQotcHdzeDAwOCAgcG93ZXIgMDAuMDAgICAgMC41IC0+IDANCi1wd3N4MDA5ICBwb3dlciAwMC4wMDAgICAwLjUgLT4gMA0KLXB3c3gwMTAgIHBvd2VyIDAwLjAwMDAgIDAuNSAtPiAwDQotcHdzeDAxMSAgcG93ZXIgMDAgICAgICAgMC41IC0+IDANCi0NCi1wd3N4MDEyICBwb3dlciAtMiAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDAxMyAgcG93ZXIgMiAgICAgICAgMC41IC0+IDEuNDE0MjEzNTYgSW5leGFjdCBSb3VuZGVkDQotcHdzeDAxNCAgcG93ZXIgLTIuMDAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwMTUgIHBvd2VyIDIuMDAgICAgIDAuNSAtPiAxLjQxNDIxMzU2IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwMTYgIHBvd2VyIC0wICAgICAgIDAuNSAtPiAwDQotcHdzeDAxNyAgcG93ZXIgLTAuMCAgICAgMC41IC0+IDANCi1wd3N4MDE4ICBwb3dlciAtMDAuMDAgICAwLjUgLT4gMA0KLXB3c3gwMTkgIHBvd2VyIC0wMC4wMDAgIDAuNSAtPiAwDQotcHdzeDAyMCAgcG93ZXIgLTAuMDAwMCAgMC41IC0+IDANCi1wd3N4MDIxICBwb3dlciAtMEUrOSAgICAwLjUgLT4gMA0KLXB3c3gwMjIgIHBvd2VyIC0wRSsxMCAgIDAuNSAtPiAwDQotcHdzeDAyMyAgcG93ZXIgLTBFKzExICAgMC41IC0+IDANCi1wd3N4MDI0ICBwb3dlciAtMEUrMTIgICAwLjUgLT4gMA0KLXB3c3gwMjUgIHBvd2VyIC0wMCAgICAgIDAuNSAtPiAwDQotcHdzeDAyNiAgcG93ZXIgMEUrNSAgICAgMC41IC0+IDANCi1wd3N4MDI3ICBwb3dlciA0LjAgICAgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDI4ICBwb3dlciA0LjAwICAgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1wd3N4MDMwICBwb3dlciArMC4xICAgICAgICAgICAgIDAuNSAtPiAwLjMxNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDMxICBwb3dlciAtMC4xICAgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4MDMyICBwb3dlciArMC4wMSAgICAgICAgICAgIDAuNSAtPiAwLjEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDMzICBwb3dlciAtMC4wMSAgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4MDM0ICBwb3dlciArMC4wMDEgICAgICAgICAgIDAuNSAtPiAwLjAzMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkDQotcHdzeDAzNSAgcG93ZXIgLTAuMDAxICAgICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDAzNiAgcG93ZXIgKzAuMDAwMDAxICAgICAgICAwLjUgLT4gMC4wMDEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDM3ICBwb3dlciAtMC4wMDAwMDEgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4MDM4ICBwb3dlciArMC4wMDAwMDAwMDAwMDEgIDAuNSAtPiAwLjAwMDAwMTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwMzkgIHBvd2VyIC0wLjAwMDAwMDAwMDAwMSAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLXB3c3gwNDEgIHBvd2VyIDEuMSAgICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNDIgIHBvd2VyIDEuMTAgICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNDMgIHBvd2VyIDEuMTAwICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNDQgIHBvd2VyIDEuMTEwICAgICAgIDAuNSAtPiAxLjA1MzU2NTM4IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNDUgIHBvd2VyIC0xLjEgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4MDQ2ICBwb3dlciAtMS4xMCAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDA0NyAgcG93ZXIgLTEuMTAwICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwNDggIHBvd2VyIC0xLjExMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4MDQ5ICBwb3dlciA5LjkgICAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDUwICBwb3dlciA5LjkwICAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDUxICBwb3dlciA5LjkwMCAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDUyICBwb3dlciA5Ljk5MCAgICAgICAwLjUgLT4gMy4xNjA2OTYxMyBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDUzICBwb3dlciAtOS45ICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDA1NCAgcG93ZXIgLTkuOTAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwNTUgIHBvd2VyIC05LjkwMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4MDU2ICBwb3dlciAtOS45OTAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotcHdzeDA2MCAgcG93ZXIgIDEgICAgICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDYxICBwb3dlciAgMS4wICAgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNjIgIHBvd2VyICAxLjAwICAgICAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA2MyAgcG93ZXIgIDEwLjAgICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDY0ICBwb3dlciAgMTAuMCAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNjUgIHBvd2VyICAxMC4wICAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA2NiAgcG93ZXIgIDEwLjAwICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDY3ICBwb3dlciAgMTAwICAgICAgICAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNjggIHBvd2VyICAxMDAuMCAgICAgICAgMC41IC0+IDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA2OSAgcG93ZXIgIDEwMC4wMCAgICAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDcwICBwb3dlciAgMS4xMDAwRSszICAgIDAuNSAtPiAzMy4xNjYyNDc5IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNzEgIHBvd2VyICAxLjEwMDAwRSszICAgMC41IC0+IDMzLjE2NjI0NzkgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA3MiAgcG93ZXIgLTEwLjAgICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDA3MyAgcG93ZXIgLTEwLjAwICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDA3NCAgcG93ZXIgLTEwMC4wICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDA3NSAgcG93ZXIgLTEwMC4wMCAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDA3NiAgcG93ZXIgLTEuMTAwMEUrMyAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDA3NyAgcG93ZXIgLTEuMTAwMDBFKzMgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZmFtb3VzIHNxdWFyZXMNCi1wd3N4MDgwICBwb3dlciAgICAgMSAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwODEgIHBvd2VyICAgICA0ICAgMC41IC0+IDIuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA4MiAgcG93ZXIgICAgIDkgICAwLjUgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDgzICBwb3dlciAgICAxNiAgIDAuNSAtPiA0LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwODQgIHBvd2VyICAgIDI1ICAgMC41IC0+IDUuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA4NSAgcG93ZXIgICAgMzYgICAwLjUgLT4gNi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDg2ICBwb3dlciAgICA0OSAgIDAuNSAtPiA3LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwODcgIHBvd2VyICAgIDY0ICAgMC41IC0+IDguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA4OCAgcG93ZXIgICAgODEgICAwLjUgLT4gOS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDg5ICBwb3dlciAgIDEwMCAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwOTAgIHBvd2VyICAgMTIxICAgMC41IC0+IDExLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA5MSAgcG93ZXIgICAxNDQgICAwLjUgLT4gMTIuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDkyICBwb3dlciAgIDE2OSAgIDAuNSAtPiAxMy4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwOTMgIHBvd2VyICAgMjU2ICAgMC41IC0+IDE2LjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA5NCAgcG93ZXIgIDEwMjQgICAwLjUgLT4gMzIuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDk1ICBwb3dlciAgNDA5NiAgIDAuNSAtPiA2NC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMDAgIHBvd2VyICAgMC4wMSAgMC41IC0+IDAuMTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMDEgIHBvd2VyICAgMC4wNCAgMC41IC0+IDAuMjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMDIgIHBvd2VyICAgMC4wOSAgMC41IC0+IDAuMzAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMDMgIHBvd2VyICAgMC4xNiAgMC41IC0+IDAuNDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMDQgIHBvd2VyICAgMC4yNSAgMC41IC0+IDAuNTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMDUgIHBvd2VyICAgMC4zNiAgMC41IC0+IDAuNjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMDYgIHBvd2VyICAgMC40OSAgMC41IC0+IDAuNzAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMDcgIHBvd2VyICAgMC42NCAgMC41IC0+IDAuODAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMDggIHBvd2VyICAgMC44MSAgMC41IC0+IDAuOTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMDkgIHBvd2VyICAgMS4wMCAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDExMCAgcG93ZXIgICAxLjIxICAwLjUgLT4gMS4xMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTExICBwb3dlciAgIDEuNDQgIDAuNSAtPiAxLjIwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMTIgIHBvd2VyICAgMS42OSAgMC41IC0+IDEuMzAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDExMyAgcG93ZXIgICAyLjU2ICAwLjUgLT4gMS42MDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTE0ICBwb3dlciAgMTAuMjQgIDAuNSAtPiAzLjIwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMTUgIHBvd2VyICA0MC45NiAgMC41IC0+IDYuNDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gUHJlY2lzaW9uIDEgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgcGx1cyBleHBvbmVudCBhZGp1c3RzXQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1tYXhFeHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1wcmVjaXNpb246ICAgMQ0KLXB3c3gxMjAxICBwb3dlciAwLjEgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjAzICBwb3dlciAxLjBFLTEgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjA0ICBwb3dlciAxLjAwRS0yICAwLjUgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIwNSAgcG93ZXIgMUUtMyAgMC41IC0+IDAuMDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjA2ICBwb3dlciAxRSsxICAwLjUgLT4gMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMDcgIHBvd2VyIDFFKzIgIDAuNSAtPiAxRSsxIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjA4ICBwb3dlciAxRSszICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMDkgIHBvd2VyIDAuMiAgMC41IC0+IDAuNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMTAgIHBvd2VyIDAuMDIgIDAuNSAtPiAwLjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjExICBwb3dlciAyLjBFLTEgIDAuNSAtPiAwLjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjEyICBwb3dlciAyLjAwRS0yICAwLjUgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIxMyAgcG93ZXIgMkUtMyAgMC41IC0+IDAuMDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjE0ICBwb3dlciAyRSsxICAwLjUgLT4gNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMTUgIHBvd2VyIDJFKzIgIDAuNSAtPiAxRSsxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIxNiAgcG93ZXIgMkUrMyAgMC41IC0+IDRFKzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjE3ICBwb3dlciAwLjMgIDAuNSAtPiAwLjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjE4ICBwb3dlciAwLjAzICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIxOSAgcG93ZXIgMy4wRS0xICAwLjUgLT4gMC41ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIyMCAgcG93ZXIgMy4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMjEgIHBvd2VyIDNFLTMgIDAuNSAtPiAwLjA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIyMiAgcG93ZXIgM0UrMSAgMC41IC0+IDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjIzICBwb3dlciAzRSsyICAwLjUgLT4gMkUrMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMjQgIHBvd2VyIDNFKzMgIDAuNSAtPiA1RSsxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIyNSAgcG93ZXIgMC40ICAwLjUgLT4gMC42ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIyNiAgcG93ZXIgMC4wNCAgMC41IC0+IDAuMiBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIyNyAgcG93ZXIgNC4wRS0xICAwLjUgLT4gMC42ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIyOCAgcG93ZXIgNC4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMjkgIHBvd2VyIDRFLTMgIDAuNSAtPiAwLjA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIzMCAgcG93ZXIgNEUrMSAgMC41IC0+IDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjMxICBwb3dlciA0RSsyICAwLjUgLT4gMkUrMSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIzMiAgcG93ZXIgNEUrMyAgMC41IC0+IDZFKzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjMzICBwb3dlciAwLjUgIDAuNSAtPiAwLjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjM0ICBwb3dlciAwLjA1ICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIzNSAgcG93ZXIgNS4wRS0xICAwLjUgLT4gMC43ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIzNiAgcG93ZXIgNS4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMzcgIHBvd2VyIDVFLTMgIDAuNSAtPiAwLjA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIzOCAgcG93ZXIgNUUrMSAgMC41IC0+IDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjM5ICBwb3dlciA1RSsyICAwLjUgLT4gMkUrMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNDAgIHBvd2VyIDVFKzMgIDAuNSAtPiA3RSsxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI0MSAgcG93ZXIgMC42ICAwLjUgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI0MiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNDMgIHBvd2VyIDYuMEUtMSAgMC41IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNDQgIHBvd2VyIDYuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjQ1ICBwb3dlciA2RS0zICAwLjUgLT4gMC4wOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNDYgIHBvd2VyIDZFKzEgIDAuNSAtPiA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI0NyAgcG93ZXIgNkUrMiAgMC41IC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjQ4ICBwb3dlciA2RSszICAwLjUgLT4gOEUrMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNDkgIHBvd2VyIDAuNyAgMC41IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNTAgIHBvd2VyIDAuMDcgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjUxICBwb3dlciA3LjBFLTEgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjUyICBwb3dlciA3LjAwRS0yICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI1MyAgcG93ZXIgN0UtMyAgMC41IC0+IDAuMDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjU0ICBwb3dlciA3RSsxICAwLjUgLT4gOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNTUgIHBvd2VyIDdFKzIgIDAuNSAtPiAzRSsxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI1NiAgcG93ZXIgN0UrMyAgMC41IC0+IDhFKzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjU3ICBwb3dlciAwLjggIDAuNSAtPiAwLjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjU4ICBwb3dlciAwLjA4ICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI1OSAgcG93ZXIgOC4wRS0xICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI2MCAgcG93ZXIgOC4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNjEgIHBvd2VyIDhFLTMgIDAuNSAtPiAwLjA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI2MiAgcG93ZXIgOEUrMSAgMC41IC0+IDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjYzICBwb3dlciA4RSsyICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNjQgIHBvd2VyIDhFKzMgIDAuNSAtPiA5RSsxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI2NSAgcG93ZXIgMC45ICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI2NiAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMyBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI2NyAgcG93ZXIgOS4wRS0xICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI2OCAgcG93ZXIgOS4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNjkgIHBvd2VyIDlFLTMgIDAuNSAtPiAwLjA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI3MCAgcG93ZXIgOUUrMSAgMC41IC0+IDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjcxICBwb3dlciA5RSsyICAwLjUgLT4gM0UrMSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI3MiAgcG93ZXIgOUUrMyAgMC41IC0+IDlFKzEgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIFByZWNpc2lvbiAyIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIHBsdXMgZXhwb25lbnQgYWRqdXN0c10NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotcHJlY2lzaW9uOiAgIDINCi1wd3N4MjIwMSAgcG93ZXIgMC4xICAwLjUgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMDIgIHBvd2VyIDAuMDEgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjAzICBwb3dlciAxLjBFLTEgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIwNCAgcG93ZXIgMS4wMEUtMiAgMC41IC0+IDAuMTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMDUgIHBvd2VyIDFFLTMgIDAuNSAtPiAwLjAzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMDYgIHBvd2VyIDFFKzEgIDAuNSAtPiAzLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjA3ICBwb3dlciAxRSsyICAwLjUgLT4gMTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMDggIHBvd2VyIDFFKzMgIDAuNSAtPiAzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMDkgIHBvd2VyIDAuMiAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjEwICBwb3dlciAwLjAyICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMTEgIHBvd2VyIDIuMEUtMSAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjEyICBwb3dlciAyLjAwRS0yICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMTMgIHBvd2VyIDJFLTMgIDAuNSAtPiAwLjA0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMTQgIHBvd2VyIDJFKzEgIDAuNSAtPiA0LjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjE1ICBwb3dlciAyRSsyICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjE2ICBwb3dlciAyRSszICAwLjUgLT4gNDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjE3ICBwb3dlciAwLjMgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIxOCAgcG93ZXIgMC4wMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjE5ICBwb3dlciAzLjBFLTEgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIyMCAgcG93ZXIgMy4wMEUtMiAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjIxICBwb3dlciAzRS0zICAwLjUgLT4gMC4wNTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjIyICBwb3dlciAzRSsxICAwLjUgLT4gNS41ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIyMyAgcG93ZXIgM0UrMiAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIyNCAgcG93ZXIgM0UrMyAgMC41IC0+IDU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIyNSAgcG93ZXIgMC40ICAwLjUgLT4gMC42MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMjYgIHBvd2VyIDAuMDQgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjI3ICBwb3dlciA0LjBFLTEgIDAuNSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIyOCAgcG93ZXIgNC4wMEUtMiAgMC41IC0+IDAuMjAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMjkgIHBvd2VyIDRFLTMgIDAuNSAtPiAwLjA2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMzAgIHBvd2VyIDRFKzEgIDAuNSAtPiA2LjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjMxICBwb3dlciA0RSsyICAwLjUgLT4gMjAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMzIgIHBvd2VyIDRFKzMgIDAuNSAtPiA2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMzMgIHBvd2VyIDAuNSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjM0ICBwb3dlciAwLjA1ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMzUgIHBvd2VyIDUuMEUtMSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjM2ICBwb3dlciA1LjAwRS0yICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMzcgIHBvd2VyIDVFLTMgIDAuNSAtPiAwLjA3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMzggIHBvd2VyIDVFKzEgIDAuNSAtPiA3LjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjM5ICBwb3dlciA1RSsyICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjQwICBwb3dlciA1RSszICAwLjUgLT4gNzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjQxICBwb3dlciAwLjYgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI0MiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjQzICBwb3dlciA2LjBFLTEgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI0NCAgcG93ZXIgNi4wMEUtMiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjQ1ICBwb3dlciA2RS0zICAwLjUgLT4gMC4wNzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjQ2ICBwb3dlciA2RSsxICAwLjUgLT4gNy43ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI0NyAgcG93ZXIgNkUrMiAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI0OCAgcG93ZXIgNkUrMyAgMC41IC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI0OSAgcG93ZXIgMC43ICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNTAgIHBvd2VyIDAuMDcgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI1MSAgcG93ZXIgNy4wRS0xICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNTIgIHBvd2VyIDcuMDBFLTIgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI1MyAgcG93ZXIgN0UtMyAgMC41IC0+IDAuMDg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI1NCAgcG93ZXIgN0UrMSAgMC41IC0+IDguNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNTUgIHBvd2VyIDdFKzIgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNTYgIHBvd2VyIDdFKzMgIDAuNSAtPiA4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNTcgIHBvd2VyIDAuOCAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjU4ICBwb3dlciAwLjA4ICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNTkgIHBvd2VyIDguMEUtMSAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjYwICBwb3dlciA4LjAwRS0yICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNjEgIHBvd2VyIDhFLTMgIDAuNSAtPiAwLjA4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNjIgIHBvd2VyIDhFKzEgIDAuNSAtPiA4LjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjYzICBwb3dlciA4RSsyICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjY0ICBwb3dlciA4RSszICAwLjUgLT4gODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjY1ICBwb3dlciAwLjkgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI2NiAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjY3ICBwb3dlciA5LjBFLTEgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI2OCAgcG93ZXIgOS4wMEUtMiAgMC41IC0+IDAuMzAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNjkgIHBvd2VyIDlFLTMgIDAuNSAtPiAwLjA5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNzAgIHBvd2VyIDlFKzEgIDAuNSAtPiA5LjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjcxICBwb3dlciA5RSsyICAwLjUgLT4gMzAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNzIgIHBvd2VyIDlFKzMgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNzMgIHBvd2VyIDAuMTAgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI3NCAgcG93ZXIgMC4wMTAgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjc1ICBwb3dlciAxMC4wRS0xICAwLjUgLT4gMS4wIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjc2ICBwb3dlciAxMC4wMEUtMiAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjc3ICBwb3dlciAxMEUtMyAgMC41IC0+IDAuMTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNzggIHBvd2VyIDEwRSsxICAwLjUgLT4gMTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNzkgIHBvd2VyIDEwRSsyICAwLjUgLT4gMzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjgwICBwb3dlciAxMEUrMyAgMC41IC0+IDEuMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI4MSAgcG93ZXIgMC4xMSAgMC41IC0+IDAuMzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjgyICBwb3dlciAwLjAxMSAgMC41IC0+IDAuMTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjgzICBwb3dlciAxMS4wRS0xICAwLjUgLT4gMS4wICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI4NCAgcG93ZXIgMTEuMDBFLTIgIDAuNSAtPiAwLjMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI4NSAgcG93ZXIgMTFFLTMgIDAuNSAtPiAwLjEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI4NiAgcG93ZXIgMTFFKzEgIDAuNSAtPiAxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyODcgIHBvd2VyIDExRSsyICAwLjUgLT4gMzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjg4ICBwb3dlciAxMUUrMyAgMC41IC0+IDEuMEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyODkgIHBvd2VyIDAuMTIgIDAuNSAtPiAwLjM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI5MCAgcG93ZXIgMC4wMTIgIDAuNSAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI5MSAgcG93ZXIgMTIuMEUtMSAgMC41IC0+IDEuMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyOTIgIHBvd2VyIDEyLjAwRS0yICAwLjUgLT4gMC4zNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyOTMgIHBvd2VyIDEyRS0zICAwLjUgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyOTQgIHBvd2VyIDEyRSsxICAwLjUgLT4gMTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjk1ICBwb3dlciAxMkUrMiAgMC41IC0+IDM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI5NiAgcG93ZXIgMTJFKzMgIDAuNSAtPiAxLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjk3ICBwb3dlciAwLjEzICAwLjUgLT4gMC4zNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyOTggIHBvd2VyIDAuMDEzICAwLjUgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyOTkgIHBvd2VyIDEzLjBFLTEgIDAuNSAtPiAxLjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzAwICBwb3dlciAxMy4wMEUtMiAgMC41IC0+IDAuMzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzAxICBwb3dlciAxM0UtMyAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzAyICBwb3dlciAxM0UrMSAgMC41IC0+IDExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMwMyAgcG93ZXIgMTNFKzIgIDAuNSAtPiAzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMDQgIHBvd2VyIDEzRSszICAwLjUgLT4gMS4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMwNSAgcG93ZXIgMC4xNCAgMC41IC0+IDAuMzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzA2ICBwb3dlciAwLjAxNCAgMC41IC0+IDAuMTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzA3ICBwb3dlciAxNC4wRS0xICAwLjUgLT4gMS4yICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMwOCAgcG93ZXIgMTQuMDBFLTIgIDAuNSAtPiAwLjM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMwOSAgcG93ZXIgMTRFLTMgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMxMCAgcG93ZXIgMTRFKzEgIDAuNSAtPiAxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMTEgIHBvd2VyIDE0RSsyICAwLjUgLT4gMzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzEyICBwb3dlciAxNEUrMyAgMC41IC0+IDEuMkUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMTMgIHBvd2VyIDAuMTUgIDAuNSAtPiAwLjM5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMxNCAgcG93ZXIgMC4wMTUgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMxNSAgcG93ZXIgMTUuMEUtMSAgMC41IC0+IDEuMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMTYgIHBvd2VyIDE1LjAwRS0yICAwLjUgLT4gMC4zOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMTcgIHBvd2VyIDE1RS0zICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMTggIHBvd2VyIDE1RSsxICAwLjUgLT4gMTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzE5ICBwb3dlciAxNUUrMiAgMC41IC0+IDM5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMyMCAgcG93ZXIgMTVFKzMgIDAuNSAtPiAxLjJFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzIxICBwb3dlciAwLjE2ICAwLjUgLT4gMC40MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMyMiAgcG93ZXIgMC4wMTYgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMyMyAgcG93ZXIgMTYuMEUtMSAgMC41IC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMjQgIHBvd2VyIDE2LjAwRS0yICAwLjUgLT4gMC40MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMyNSAgcG93ZXIgMTZFLTMgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMyNiAgcG93ZXIgMTZFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMjcgIHBvd2VyIDE2RSsyICAwLjUgLT4gNDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMjggIHBvd2VyIDE2RSszICAwLjUgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMyOSAgcG93ZXIgMC4xNyAgMC41IC0+IDAuNDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzMwICBwb3dlciAwLjAxNyAgMC41IC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzMxICBwb3dlciAxNy4wRS0xICAwLjUgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMzMiAgcG93ZXIgMTcuMDBFLTIgIDAuNSAtPiAwLjQxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMzMyAgcG93ZXIgMTdFLTMgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMzNCAgcG93ZXIgMTdFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMzUgIHBvd2VyIDE3RSsyICAwLjUgLT4gNDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzM2ICBwb3dlciAxN0UrMyAgMC41IC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMzcgIHBvd2VyIDAuMTggIDAuNSAtPiAwLjQyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMzOCAgcG93ZXIgMC4wMTggIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMzOSAgcG93ZXIgMTguMEUtMSAgMC41IC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNDAgIHBvd2VyIDE4LjAwRS0yICAwLjUgLT4gMC40MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNDEgIHBvd2VyIDE4RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNDIgIHBvd2VyIDE4RSsxICAwLjUgLT4gMTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzQzICBwb3dlciAxOEUrMiAgMC41IC0+IDQyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM0NCAgcG93ZXIgMThFKzMgIDAuNSAtPiAxLjNFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzQ1ICBwb3dlciAwLjE5ICAwLjUgLT4gMC40NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNDYgIHBvd2VyIDAuMDE5ICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNDcgIHBvd2VyIDE5LjBFLTEgIDAuNSAtPiAxLjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzQ4ICBwb3dlciAxOS4wMEUtMiAgMC41IC0+IDAuNDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzQ5ICBwb3dlciAxOUUtMyAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzUwICBwb3dlciAxOUUrMSAgMC41IC0+IDE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM1MSAgcG93ZXIgMTlFKzIgIDAuNSAtPiA0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNTIgIHBvd2VyIDE5RSszICAwLjUgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM1MyAgcG93ZXIgMC4yMCAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzU0ICBwb3dlciAwLjAyMCAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzU1ICBwb3dlciAyMC4wRS0xICAwLjUgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM1NiAgcG93ZXIgMjAuMDBFLTIgIDAuNSAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM1NyAgcG93ZXIgMjBFLTMgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM1OCAgcG93ZXIgMjBFKzEgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNTkgIHBvd2VyIDIwRSsyICAwLjUgLT4gNDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzYwICBwb3dlciAyMEUrMyAgMC41IC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNjEgIHBvd2VyIDAuMjEgIDAuNSAtPiAwLjQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM2MiAgcG93ZXIgMC4wMjEgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM2MyAgcG93ZXIgMjEuMEUtMSAgMC41IC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNjQgIHBvd2VyIDIxLjAwRS0yICAwLjUgLT4gMC40NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNjUgIHBvd2VyIDIxRS0zICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNjYgIHBvd2VyIDIxRSsxICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzY3ICBwb3dlciAyMUUrMiAgMC41IC0+IDQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM2OCAgcG93ZXIgMjFFKzMgIDAuNSAtPiAxLjRFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzY5ICBwb3dlciAwLjIyICAwLjUgLT4gMC40NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNzAgIHBvd2VyIDAuMDIyICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNzEgIHBvd2VyIDIyLjBFLTEgIDAuNSAtPiAxLjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzcyICBwb3dlciAyMi4wMEUtMiAgMC41IC0+IDAuNDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzczICBwb3dlciAyMkUtMyAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzc0ICBwb3dlciAyMkUrMSAgMC41IC0+IDE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM3NSAgcG93ZXIgMjJFKzIgIDAuNSAtPiA0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNzYgIHBvd2VyIDIyRSszICAwLjUgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM3NyAgcG93ZXIgMC4yMyAgMC41IC0+IDAuNDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzc4ICBwb3dlciAwLjAyMyAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzc5ICBwb3dlciAyMy4wRS0xICAwLjUgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM4MCAgcG93ZXIgMjMuMDBFLTIgIDAuNSAtPiAwLjQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM4MSAgcG93ZXIgMjNFLTMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM4MiAgcG93ZXIgMjNFKzEgIDAuNSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzODMgIHBvd2VyIDIzRSsyICAwLjUgLT4gNDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzg0ICBwb3dlciAyM0UrMyAgMC41IC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzODUgIHBvd2VyIDAuMjQgIDAuNSAtPiAwLjQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM4NiAgcG93ZXIgMC4wMjQgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM4NyAgcG93ZXIgMjQuMEUtMSAgMC41IC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzODggIHBvd2VyIDI0LjAwRS0yICAwLjUgLT4gMC40OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzODkgIHBvd2VyIDI0RS0zICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzOTAgIHBvd2VyIDI0RSsxICAwLjUgLT4gMTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzkxICBwb3dlciAyNEUrMiAgMC41IC0+IDQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM5MiAgcG93ZXIgMjRFKzMgIDAuNSAtPiAxLjVFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzkzICBwb3dlciAwLjI1ICAwLjUgLT4gMC41MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM5NCAgcG93ZXIgMC4wMjUgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM5NSAgcG93ZXIgMjUuMEUtMSAgMC41IC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzOTYgIHBvd2VyIDI1LjAwRS0yICAwLjUgLT4gMC41MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM5NyAgcG93ZXIgMjVFLTMgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM5OCAgcG93ZXIgMjVFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzOTkgIHBvd2VyIDI1RSsyICAwLjUgLT4gNTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MDAgIHBvd2VyIDI1RSszICAwLjUgLT4gMS42RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQwMSAgcG93ZXIgMC4yNiAgMC41IC0+IDAuNTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDAyICBwb3dlciAwLjAyNiAgMC41IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDAzICBwb3dlciAyNi4wRS0xICAwLjUgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQwNCAgcG93ZXIgMjYuMDBFLTIgIDAuNSAtPiAwLjUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQwNSAgcG93ZXIgMjZFLTMgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQwNiAgcG93ZXIgMjZFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MDcgIHBvd2VyIDI2RSsyICAwLjUgLT4gNTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDA4ICBwb3dlciAyNkUrMyAgMC41IC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MDkgIHBvd2VyIDAuMjcgIDAuNSAtPiAwLjUyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQxMCAgcG93ZXIgMC4wMjcgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQxMSAgcG93ZXIgMjcuMEUtMSAgMC41IC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MTIgIHBvd2VyIDI3LjAwRS0yICAwLjUgLT4gMC41MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MTMgIHBvd2VyIDI3RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MTQgIHBvd2VyIDI3RSsxICAwLjUgLT4gMTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDE1ICBwb3dlciAyN0UrMiAgMC41IC0+IDUyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQxNiAgcG93ZXIgMjdFKzMgIDAuNSAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDE3ICBwb3dlciAwLjI4ICAwLjUgLT4gMC41MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MTggIHBvd2VyIDAuMDI4ICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MTkgIHBvd2VyIDI4LjBFLTEgIDAuNSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDIwICBwb3dlciAyOC4wMEUtMiAgMC41IC0+IDAuNTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDIxICBwb3dlciAyOEUtMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDIyICBwb3dlciAyOEUrMSAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQyMyAgcG93ZXIgMjhFKzIgIDAuNSAtPiA1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MjQgIHBvd2VyIDI4RSszICAwLjUgLT4gMS43RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQyNSAgcG93ZXIgMC4yOSAgMC41IC0+IDAuNTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDI2ICBwb3dlciAwLjAyOSAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDI3ICBwb3dlciAyOS4wRS0xICAwLjUgLT4gMS43ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQyOCAgcG93ZXIgMjkuMDBFLTIgIDAuNSAtPiAwLjU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQyOSAgcG93ZXIgMjlFLTMgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQzMCAgcG93ZXIgMjlFKzEgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MzEgIHBvd2VyIDI5RSsyICAwLjUgLT4gNTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDMyICBwb3dlciAyOUUrMyAgMC41IC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MzMgIHBvd2VyIDAuMzAgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQzNCAgcG93ZXIgMC4wMzAgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQzNSAgcG93ZXIgMzAuMEUtMSAgMC41IC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MzYgIHBvd2VyIDMwLjAwRS0yICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MzcgIHBvd2VyIDMwRS0zICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MzggIHBvd2VyIDMwRSsxICAwLjUgLT4gMTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDM5ICBwb3dlciAzMEUrMiAgMC41IC0+IDU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ0MCAgcG93ZXIgMzBFKzMgIDAuNSAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDQxICBwb3dlciAwLjMxICAwLjUgLT4gMC41NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NDIgIHBvd2VyIDAuMDMxICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NDMgIHBvd2VyIDMxLjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDQ0ICBwb3dlciAzMS4wMEUtMiAgMC41IC0+IDAuNTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDQ1ICBwb3dlciAzMUUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDQ2ICBwb3dlciAzMUUrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ0NyAgcG93ZXIgMzFFKzIgIDAuNSAtPiA1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NDggIHBvd2VyIDMxRSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ0OSAgcG93ZXIgMC4zMiAgMC41IC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDUwICBwb3dlciAwLjAzMiAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDUxICBwb3dlciAzMi4wRS0xICAwLjUgLT4gMS44ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ1MiAgcG93ZXIgMzIuMDBFLTIgIDAuNSAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ1MyAgcG93ZXIgMzJFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ1NCAgcG93ZXIgMzJFKzEgIDAuNSAtPiAxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NTUgIHBvd2VyIDMyRSsyICAwLjUgLT4gNTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDU2ICBwb3dlciAzMkUrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NTcgIHBvd2VyIDAuMzMgIDAuNSAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ1OCAgcG93ZXIgMC4wMzMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ1OSAgcG93ZXIgMzMuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NjAgIHBvd2VyIDMzLjAwRS0yICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NjEgIHBvd2VyIDMzRS0zICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NjIgIHBvd2VyIDMzRSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDYzICBwb3dlciAzM0UrMiAgMC41IC0+IDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ2NCAgcG93ZXIgMzNFKzMgIDAuNSAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDY1ICBwb3dlciAwLjM0ICAwLjUgLT4gMC41OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NjYgIHBvd2VyIDAuMDM0ICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NjcgIHBvd2VyIDM0LjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDY4ICBwb3dlciAzNC4wMEUtMiAgMC41IC0+IDAuNTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDY5ICBwb3dlciAzNEUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDcwICBwb3dlciAzNEUrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ3MSAgcG93ZXIgMzRFKzIgIDAuNSAtPiA1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NzIgIHBvd2VyIDM0RSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ3MyAgcG93ZXIgMC4zNSAgMC41IC0+IDAuNTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDc0ICBwb3dlciAwLjAzNSAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDc1ICBwb3dlciAzNS4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ3NiAgcG93ZXIgMzUuMDBFLTIgIDAuNSAtPiAwLjU5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ3NyAgcG93ZXIgMzVFLTMgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ3OCAgcG93ZXIgMzVFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NzkgIHBvd2VyIDM1RSsyICAwLjUgLT4gNTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDgwICBwb3dlciAzNUUrMyAgMC41IC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0ODEgIHBvd2VyIDAuMzYgIDAuNSAtPiAwLjYwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDgyICBwb3dlciAwLjAzNiAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDgzICBwb3dlciAzNi4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ4NCAgcG93ZXIgMzYuMDBFLTIgIDAuNSAtPiAwLjYwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDg1ICBwb3dlciAzNkUtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDg2ICBwb3dlciAzNkUrMSAgMC41IC0+IDE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ4NyAgcG93ZXIgMzZFKzIgIDAuNSAtPiA2MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ4OCAgcG93ZXIgMzZFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDg5ICBwb3dlciAwLjM3ICAwLjUgLT4gMC42MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0OTAgIHBvd2VyIDAuMDM3ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0OTEgIHBvd2VyIDM3LjBFLTEgIDAuNSAtPiAxLjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDkyICBwb3dlciAzNy4wMEUtMiAgMC41IC0+IDAuNjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDkzICBwb3dlciAzN0UtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDk0ICBwb3dlciAzN0UrMSAgMC41IC0+IDE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ5NSAgcG93ZXIgMzdFKzIgIDAuNSAtPiA2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0OTYgIHBvd2VyIDM3RSszICAwLjUgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ5NyAgcG93ZXIgMC4zOCAgMC41IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDk4ICBwb3dlciAwLjAzOCAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDk5ICBwb3dlciAzOC4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUwMCAgcG93ZXIgMzguMDBFLTIgIDAuNSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUwMSAgcG93ZXIgMzhFLTMgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUwMiAgcG93ZXIgMzhFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MDMgIHBvd2VyIDM4RSsyICAwLjUgLT4gNjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTA0ICBwb3dlciAzOEUrMyAgMC41IC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MDUgIHBvd2VyIDAuMzkgIDAuNSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUwNiAgcG93ZXIgMC4wMzkgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUwNyAgcG93ZXIgMzkuMEUtMSAgMC41IC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MDggIHBvd2VyIDM5LjAwRS0yICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MDkgIHBvd2VyIDM5RS0zICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MTAgIHBvd2VyIDM5RSsxICAwLjUgLT4gMjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTExICBwb3dlciAzOUUrMiAgMC41IC0+IDYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUxMiAgcG93ZXIgMzlFKzMgIDAuNSAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTEzICBwb3dlciAwLjQwICAwLjUgLT4gMC42MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MTQgIHBvd2VyIDAuMDQwICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUxNSAgcG93ZXIgNDAuMEUtMSAgMC41IC0+IDIuMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUxNiAgcG93ZXIgNDAuMDBFLTIgIDAuNSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUxNyAgcG93ZXIgNDBFLTMgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTE4ICBwb3dlciA0MEUrMSAgMC41IC0+IDIwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTE5ICBwb3dlciA0MEUrMiAgMC41IC0+IDYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUyMCAgcG93ZXIgNDBFKzMgIDAuNSAtPiAyLjBFKzIgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MjEgIHBvd2VyIDAuNDEgIDAuNSAtPiAwLjY0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUyMiAgcG93ZXIgMC4wNDEgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUyMyAgcG93ZXIgNDEuMEUtMSAgMC41IC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MjQgIHBvd2VyIDQxLjAwRS0yICAwLjUgLT4gMC42NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MjUgIHBvd2VyIDQxRS0zICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MjYgIHBvd2VyIDQxRSsxICAwLjUgLT4gMjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTI3ICBwb3dlciA0MUUrMiAgMC41IC0+IDY0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUyOCAgcG93ZXIgNDFFKzMgIDAuNSAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTI5ICBwb3dlciAwLjQyICAwLjUgLT4gMC42NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MzAgIHBvd2VyIDAuMDQyICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MzEgIHBvd2VyIDQyLjBFLTEgIDAuNSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTMyICBwb3dlciA0Mi4wMEUtMiAgMC41IC0+IDAuNjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTMzICBwb3dlciA0MkUtMyAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTM0ICBwb3dlciA0MkUrMSAgMC41IC0+IDIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUzNSAgcG93ZXIgNDJFKzIgIDAuNSAtPiA2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MzYgIHBvd2VyIDQyRSszICAwLjUgLT4gMi4wRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUzNyAgcG93ZXIgMC40MyAgMC41IC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTM4ICBwb3dlciAwLjA0MyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTM5ICBwb3dlciA0My4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU0MCAgcG93ZXIgNDMuMDBFLTIgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU0MSAgcG93ZXIgNDNFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU0MiAgcG93ZXIgNDNFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NDMgIHBvd2VyIDQzRSsyICAwLjUgLT4gNjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTQ0ICBwb3dlciA0M0UrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NDUgIHBvd2VyIDAuNDQgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU0NiAgcG93ZXIgMC4wNDQgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU0NyAgcG93ZXIgNDQuMEUtMSAgMC41IC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NDggIHBvd2VyIDQ0LjAwRS0yICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NDkgIHBvd2VyIDQ0RS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NTAgIHBvd2VyIDQ0RSsxICAwLjUgLT4gMjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTUxICBwb3dlciA0NEUrMiAgMC41IC0+IDY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU1MiAgcG93ZXIgNDRFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTUzICBwb3dlciAwLjQ1ICAwLjUgLT4gMC42NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NTQgIHBvd2VyIDAuMDQ1ICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NTUgIHBvd2VyIDQ1LjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTU2ICBwb3dlciA0NS4wMEUtMiAgMC41IC0+IDAuNjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTU3ICBwb3dlciA0NUUtMyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTU4ICBwb3dlciA0NUUrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU1OSAgcG93ZXIgNDVFKzIgIDAuNSAtPiA2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NjAgIHBvd2VyIDQ1RSszICAwLjUgLT4gMi4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU2MSAgcG93ZXIgMC40NiAgMC41IC0+IDAuNjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTYyICBwb3dlciAwLjA0NiAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTYzICBwb3dlciA0Ni4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU2NCAgcG93ZXIgNDYuMDBFLTIgIDAuNSAtPiAwLjY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU2NSAgcG93ZXIgNDZFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU2NiAgcG93ZXIgNDZFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NjcgIHBvd2VyIDQ2RSsyICAwLjUgLT4gNjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTY4ICBwb3dlciA0NkUrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NjkgIHBvd2VyIDAuNDcgIDAuNSAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU3MCAgcG93ZXIgMC4wNDcgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU3MSAgcG93ZXIgNDcuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NzIgIHBvd2VyIDQ3LjAwRS0yICAwLjUgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NzMgIHBvd2VyIDQ3RS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NzQgIHBvd2VyIDQ3RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTc1ICBwb3dlciA0N0UrMiAgMC41IC0+IDY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU3NiAgcG93ZXIgNDdFKzMgIDAuNSAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTc3ICBwb3dlciAwLjQ4ICAwLjUgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NzggIHBvd2VyIDAuMDQ4ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NzkgIHBvd2VyIDQ4LjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTgwICBwb3dlciA0OC4wMEUtMiAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTgxICBwb3dlciA0OEUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTgyICBwb3dlciA0OEUrMSAgMC41IC0+IDIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU4MyAgcG93ZXIgNDhFKzIgIDAuNSAtPiA2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1ODQgIHBvd2VyIDQ4RSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU4NSAgcG93ZXIgMC40OSAgMC41IC0+IDAuNzAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1ODYgIHBvd2VyIDAuMDQ5ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1ODcgIHBvd2VyIDQ5LjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTg4ICBwb3dlciA0OS4wMEUtMiAgMC41IC0+IDAuNzAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1ODkgIHBvd2VyIDQ5RS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1OTAgIHBvd2VyIDQ5RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTkxICBwb3dlciA0OUUrMiAgMC41IC0+IDcwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTkyICBwb3dlciA0OUUrMyAgMC41IC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1OTMgIHBvd2VyIDAuNTAgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU5NCAgcG93ZXIgMC4wNTAgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU5NSAgcG93ZXIgNTAuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1OTYgIHBvd2VyIDUwLjAwRS0yICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1OTcgIHBvd2VyIDUwRS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1OTggIHBvd2VyIDUwRSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTk5ICBwb3dlciA1MEUrMiAgMC41IC0+IDcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYwMCAgcG93ZXIgNTBFKzMgIDAuNSAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjAxICBwb3dlciAwLjUxICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MDIgIHBvd2VyIDAuMDUxICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MDMgIHBvd2VyIDUxLjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjA0ICBwb3dlciA1MS4wMEUtMiAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjA1ICBwb3dlciA1MUUtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjA2ICBwb3dlciA1MUUrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYwNyAgcG93ZXIgNTFFKzIgIDAuNSAtPiA3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MDggIHBvd2VyIDUxRSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYwOSAgcG93ZXIgMC41MiAgMC41IC0+IDAuNzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjEwICBwb3dlciAwLjA1MiAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjExICBwb3dlciA1Mi4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYxMiAgcG93ZXIgNTIuMDBFLTIgIDAuNSAtPiAwLjcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYxMyAgcG93ZXIgNTJFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYxNCAgcG93ZXIgNTJFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MTUgIHBvd2VyIDUyRSsyICAwLjUgLT4gNzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjE2ICBwb3dlciA1MkUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MTcgIHBvd2VyIDAuNTMgIDAuNSAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYxOCAgcG93ZXIgMC4wNTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYxOSAgcG93ZXIgNTMuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MjAgIHBvd2VyIDUzLjAwRS0yICAwLjUgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MjEgIHBvd2VyIDUzRS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MjIgIHBvd2VyIDUzRSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjIzICBwb3dlciA1M0UrMiAgMC41IC0+IDczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYyNCAgcG93ZXIgNTNFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjI1ICBwb3dlciAwLjU0ICAwLjUgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MjYgIHBvd2VyIDAuMDU0ICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MjcgIHBvd2VyIDU0LjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjI4ICBwb3dlciA1NC4wMEUtMiAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjI5ICBwb3dlciA1NEUtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjMwICBwb3dlciA1NEUrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYzMSAgcG93ZXIgNTRFKzIgIDAuNSAtPiA3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MzIgIHBvd2VyIDU0RSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYzMyAgcG93ZXIgMC41NSAgMC41IC0+IDAuNzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjM0ICBwb3dlciAwLjA1NSAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjM1ICBwb3dlciA1NS4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYzNiAgcG93ZXIgNTUuMDBFLTIgIDAuNSAtPiAwLjc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYzNyAgcG93ZXIgNTVFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYzOCAgcG93ZXIgNTVFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MzkgIHBvd2VyIDU1RSsyICAwLjUgLT4gNzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjQwICBwb3dlciA1NUUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NDEgIHBvd2VyIDAuNTYgIDAuNSAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY0MiAgcG93ZXIgMC4wNTYgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY0MyAgcG93ZXIgNTYuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NDQgIHBvd2VyIDU2LjAwRS0yICAwLjUgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NDUgIHBvd2VyIDU2RS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NDYgIHBvd2VyIDU2RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjQ3ICBwb3dlciA1NkUrMiAgMC41IC0+IDc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY0OCAgcG93ZXIgNTZFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjQ5ICBwb3dlciAwLjU3ICAwLjUgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NTAgIHBvd2VyIDAuMDU3ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NTEgIHBvd2VyIDU3LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjUyICBwb3dlciA1Ny4wMEUtMiAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjUzICBwb3dlciA1N0UtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjU0ICBwb3dlciA1N0UrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY1NSAgcG93ZXIgNTdFKzIgIDAuNSAtPiA3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NTYgIHBvd2VyIDU3RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY1NyAgcG93ZXIgMC41OCAgMC41IC0+IDAuNzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjU4ICBwb3dlciAwLjA1OCAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjU5ICBwb3dlciA1OC4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY2MCAgcG93ZXIgNTguMDBFLTIgIDAuNSAtPiAwLjc2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY2MSAgcG93ZXIgNThFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY2MiAgcG93ZXIgNThFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NjMgIHBvd2VyIDU4RSsyICAwLjUgLT4gNzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjY0ICBwb3dlciA1OEUrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NjUgIHBvd2VyIDAuNTkgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY2NiAgcG93ZXIgMC4wNTkgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY2NyAgcG93ZXIgNTkuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NjggIHBvd2VyIDU5LjAwRS0yICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NjkgIHBvd2VyIDU5RS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NzAgIHBvd2VyIDU5RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjcxICBwb3dlciA1OUUrMiAgMC41IC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY3MiAgcG93ZXIgNTlFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjczICBwb3dlciAwLjYwICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NzQgIHBvd2VyIDAuMDYwICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NzUgIHBvd2VyIDYwLjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjc2ICBwb3dlciA2MC4wMEUtMiAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjc3ICBwb3dlciA2MEUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjc4ICBwb3dlciA2MEUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY3OSAgcG93ZXIgNjBFKzIgIDAuNSAtPiA3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2ODAgIHBvd2VyIDYwRSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY4MSAgcG93ZXIgMC42MSAgMC41IC0+IDAuNzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjgyICBwb3dlciAwLjA2MSAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjgzICBwb3dlciA2MS4wRS0xICAwLjUgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY4NCAgcG93ZXIgNjEuMDBFLTIgIDAuNSAtPiAwLjc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY4NSAgcG93ZXIgNjFFLTMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY4NiAgcG93ZXIgNjFFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2ODcgIHBvd2VyIDYxRSsyICAwLjUgLT4gNzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjg4ICBwb3dlciA2MUUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2ODkgIHBvd2VyIDAuNjIgIDAuNSAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY5MCAgcG93ZXIgMC4wNjIgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY5MSAgcG93ZXIgNjIuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2OTIgIHBvd2VyIDYyLjAwRS0yICAwLjUgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2OTMgIHBvd2VyIDYyRS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2OTQgIHBvd2VyIDYyRSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjk1ICBwb3dlciA2MkUrMiAgMC41IC0+IDc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY5NiAgcG93ZXIgNjJFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjk3ICBwb3dlciAwLjYzICAwLjUgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2OTggIHBvd2VyIDAuMDYzICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2OTkgIHBvd2VyIDYzLjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzAwICBwb3dlciA2My4wMEUtMiAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzAxICBwb3dlciA2M0UtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzAyICBwb3dlciA2M0UrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcwMyAgcG93ZXIgNjNFKzIgIDAuNSAtPiA3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MDQgIHBvd2VyIDYzRSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcwNSAgcG93ZXIgMC42NCAgMC41IC0+IDAuODAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MDYgIHBvd2VyIDAuMDY0ICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MDcgIHBvd2VyIDY0LjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzA4ICBwb3dlciA2NC4wMEUtMiAgMC41IC0+IDAuODAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MDkgIHBvd2VyIDY0RS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MTAgIHBvd2VyIDY0RSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzExICBwb3dlciA2NEUrMiAgMC41IC0+IDgwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzEyICBwb3dlciA2NEUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MTMgIHBvd2VyIDAuNjUgIDAuNSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcxNCAgcG93ZXIgMC4wNjUgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcxNSAgcG93ZXIgNjUuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MTYgIHBvd2VyIDY1LjAwRS0yICAwLjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MTcgIHBvd2VyIDY1RS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MTggIHBvd2VyIDY1RSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzE5ICBwb3dlciA2NUUrMiAgMC41IC0+IDgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcyMCAgcG93ZXIgNjVFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzIxICBwb3dlciAwLjY2ICAwLjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MjIgIHBvd2VyIDAuMDY2ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MjMgIHBvd2VyIDY2LjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzI0ICBwb3dlciA2Ni4wMEUtMiAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzI1ICBwb3dlciA2NkUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzI2ICBwb3dlciA2NkUrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcyNyAgcG93ZXIgNjZFKzIgIDAuNSAtPiA4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MjggIHBvd2VyIDY2RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcyOSAgcG93ZXIgMC42NyAgMC41IC0+IDAuODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzMwICBwb3dlciAwLjA2NyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzMxICBwb3dlciA2Ny4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjczMiAgcG93ZXIgNjcuMDBFLTIgIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjczMyAgcG93ZXIgNjdFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjczNCAgcG93ZXIgNjdFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MzUgIHBvd2VyIDY3RSsyICAwLjUgLT4gODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzM2ICBwb3dlciA2N0UrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MzcgIHBvd2VyIDAuNjggIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjczOCAgcG93ZXIgMC4wNjggIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjczOSAgcG93ZXIgNjguMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NDAgIHBvd2VyIDY4LjAwRS0yICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NDEgIHBvd2VyIDY4RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NDIgIHBvd2VyIDY4RSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzQzICBwb3dlciA2OEUrMiAgMC41IC0+IDgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc0NCAgcG93ZXIgNjhFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzQ1ICBwb3dlciAwLjY5ICAwLjUgLT4gMC44MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NDYgIHBvd2VyIDAuMDY5ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NDcgIHBvd2VyIDY5LjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzQ4ICBwb3dlciA2OS4wMEUtMiAgMC41IC0+IDAuODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzQ5ICBwb3dlciA2OUUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzUwICBwb3dlciA2OUUrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc1MSAgcG93ZXIgNjlFKzIgIDAuNSAtPiA4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NTIgIHBvd2VyIDY5RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc1MyAgcG93ZXIgMC43MCAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzU0ICBwb3dlciAwLjA3MCAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzU1ICBwb3dlciA3MC4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc1NiAgcG93ZXIgNzAuMDBFLTIgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc1NyAgcG93ZXIgNzBFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc1OCAgcG93ZXIgNzBFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NTkgIHBvd2VyIDcwRSsyICAwLjUgLT4gODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzYwICBwb3dlciA3MEUrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NjEgIHBvd2VyIDAuNzEgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc2MiAgcG93ZXIgMC4wNzEgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc2MyAgcG93ZXIgNzEuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NjQgIHBvd2VyIDcxLjAwRS0yICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NjUgIHBvd2VyIDcxRS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NjYgIHBvd2VyIDcxRSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzY3ICBwb3dlciA3MUUrMiAgMC41IC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc2OCAgcG93ZXIgNzFFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzY5ICBwb3dlciAwLjcyICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NzAgIHBvd2VyIDAuMDcyICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NzEgIHBvd2VyIDcyLjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzcyICBwb3dlciA3Mi4wMEUtMiAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzczICBwb3dlciA3MkUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzc0ICBwb3dlciA3MkUrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc3NSAgcG93ZXIgNzJFKzIgIDAuNSAtPiA4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NzYgIHBvd2VyIDcyRSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc3NyAgcG93ZXIgMC43MyAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzc4ICBwb3dlciAwLjA3MyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzc5ICBwb3dlciA3My4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc4MCAgcG93ZXIgNzMuMDBFLTIgIDAuNSAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc4MSAgcG93ZXIgNzNFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc4MiAgcG93ZXIgNzNFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3ODMgIHBvd2VyIDczRSsyICAwLjUgLT4gODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzg0ICBwb3dlciA3M0UrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3ODUgIHBvd2VyIDAuNzQgIDAuNSAtPiAwLjg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc4NiAgcG93ZXIgMC4wNzQgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc4NyAgcG93ZXIgNzQuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3ODggIHBvd2VyIDc0LjAwRS0yICAwLjUgLT4gMC44NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3ODkgIHBvd2VyIDc0RS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3OTAgIHBvd2VyIDc0RSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzkxICBwb3dlciA3NEUrMiAgMC41IC0+IDg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc5MiAgcG93ZXIgNzRFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzkzICBwb3dlciAwLjc1ICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3OTQgIHBvd2VyIDAuMDc1ICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3OTUgIHBvd2VyIDc1LjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzk2ICBwb3dlciA3NS4wMEUtMiAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzk3ICBwb3dlciA3NUUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzk4ICBwb3dlciA3NUUrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc5OSAgcG93ZXIgNzVFKzIgIDAuNSAtPiA4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MDAgIHBvd2VyIDc1RSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgwMSAgcG93ZXIgMC43NiAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODAyICBwb3dlciAwLjA3NiAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODAzICBwb3dlciA3Ni4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgwNCAgcG93ZXIgNzYuMDBFLTIgIDAuNSAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgwNSAgcG93ZXIgNzZFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgwNiAgcG93ZXIgNzZFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MDcgIHBvd2VyIDc2RSsyICAwLjUgLT4gODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODA4ICBwb3dlciA3NkUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MDkgIHBvd2VyIDAuNzcgIDAuNSAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgxMCAgcG93ZXIgMC4wNzcgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgxMSAgcG93ZXIgNzcuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MTIgIHBvd2VyIDc3LjAwRS0yICAwLjUgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MTMgIHBvd2VyIDc3RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MTQgIHBvd2VyIDc3RSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODE1ICBwb3dlciA3N0UrMiAgMC41IC0+IDg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgxNiAgcG93ZXIgNzdFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODE3ICBwb3dlciAwLjc4ICAwLjUgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MTggIHBvd2VyIDAuMDc4ICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MTkgIHBvd2VyIDc4LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODIwICBwb3dlciA3OC4wMEUtMiAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODIxICBwb3dlciA3OEUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODIyICBwb3dlciA3OEUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgyMyAgcG93ZXIgNzhFKzIgIDAuNSAtPiA4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MjQgIHBvd2VyIDc4RSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgyNSAgcG93ZXIgMC43OSAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODI2ICBwb3dlciAwLjA3OSAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODI3ICBwb3dlciA3OS4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgyOCAgcG93ZXIgNzkuMDBFLTIgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgyOSAgcG93ZXIgNzlFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgzMCAgcG93ZXIgNzlFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MzEgIHBvd2VyIDc5RSsyICAwLjUgLT4gODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODMyICBwb3dlciA3OUUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MzMgIHBvd2VyIDAuODAgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgzNCAgcG93ZXIgMC4wODAgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgzNSAgcG93ZXIgODAuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MzYgIHBvd2VyIDgwLjAwRS0yICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MzcgIHBvd2VyIDgwRS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MzggIHBvd2VyIDgwRSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODM5ICBwb3dlciA4MEUrMiAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg0MCAgcG93ZXIgODBFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODQxICBwb3dlciAwLjgxICAwLjUgLT4gMC45MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg0MiAgcG93ZXIgMC4wODEgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg0MyAgcG93ZXIgODEuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NDQgIHBvd2VyIDgxLjAwRS0yICAwLjUgLT4gMC45MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg0NSAgcG93ZXIgODFFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg0NiAgcG93ZXIgODFFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NDcgIHBvd2VyIDgxRSsyICAwLjUgLT4gOTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NDggIHBvd2VyIDgxRSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg0OSAgcG93ZXIgMC44MiAgMC41IC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODUwICBwb3dlciAwLjA4MiAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODUxICBwb3dlciA4Mi4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg1MiAgcG93ZXIgODIuMDBFLTIgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg1MyAgcG93ZXIgODJFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg1NCAgcG93ZXIgODJFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NTUgIHBvd2VyIDgyRSsyICAwLjUgLT4gOTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODU2ICBwb3dlciA4MkUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NTcgIHBvd2VyIDAuODMgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg1OCAgcG93ZXIgMC4wODMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg1OSAgcG93ZXIgODMuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NjAgIHBvd2VyIDgzLjAwRS0yICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NjEgIHBvd2VyIDgzRS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NjIgIHBvd2VyIDgzRSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODYzICBwb3dlciA4M0UrMiAgMC41IC0+IDkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg2NCAgcG93ZXIgODNFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODY1ICBwb3dlciAwLjg0ICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NjYgIHBvd2VyIDAuMDg0ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NjcgIHBvd2VyIDg0LjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODY4ICBwb3dlciA4NC4wMEUtMiAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODY5ICBwb3dlciA4NEUtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODcwICBwb3dlciA4NEUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg3MSAgcG93ZXIgODRFKzIgIDAuNSAtPiA5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NzIgIHBvd2VyIDg0RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg3MyAgcG93ZXIgMC44NSAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODc0ICBwb3dlciAwLjA4NSAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODc1ICBwb3dlciA4NS4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg3NiAgcG93ZXIgODUuMDBFLTIgIDAuNSAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg3NyAgcG93ZXIgODVFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg3OCAgcG93ZXIgODVFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NzkgIHBvd2VyIDg1RSsyICAwLjUgLT4gOTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODgwICBwb3dlciA4NUUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4ODEgIHBvd2VyIDAuODYgIDAuNSAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg4MiAgcG93ZXIgMC4wODYgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg4MyAgcG93ZXIgODYuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4ODQgIHBvd2VyIDg2LjAwRS0yICAwLjUgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4ODUgIHBvd2VyIDg2RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4ODYgIHBvd2VyIDg2RSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODg3ICBwb3dlciA4NkUrMiAgMC41IC0+IDkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg4OCAgcG93ZXIgODZFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODg5ICBwb3dlciAwLjg3ICAwLjUgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4OTAgIHBvd2VyIDAuMDg3ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4OTEgIHBvd2VyIDg3LjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODkyICBwb3dlciA4Ny4wMEUtMiAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODkzICBwb3dlciA4N0UtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODk0ICBwb3dlciA4N0UrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg5NSAgcG93ZXIgODdFKzIgIDAuNSAtPiA5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4OTYgIHBvd2VyIDg3RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg5NyAgcG93ZXIgMC44OCAgMC41IC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODk4ICBwb3dlciAwLjA4OCAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODk5ICBwb3dlciA4OC4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkwMCAgcG93ZXIgODguMDBFLTIgIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkwMSAgcG93ZXIgODhFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkwMiAgcG93ZXIgODhFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MDMgIHBvd2VyIDg4RSsyICAwLjUgLT4gOTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTA0ICBwb3dlciA4OEUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MDUgIHBvd2VyIDAuODkgIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkwNiAgcG93ZXIgMC4wODkgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkwNyAgcG93ZXIgODkuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MDggIHBvd2VyIDg5LjAwRS0yICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MDkgIHBvd2VyIDg5RS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MTAgIHBvd2VyIDg5RSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTExICBwb3dlciA4OUUrMiAgMC41IC0+IDk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkxMiAgcG93ZXIgODlFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTEzICBwb3dlciAwLjkwICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MTQgIHBvd2VyIDAuMDkwICAwLjUgLT4gMC4zMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkxNSAgcG93ZXIgOTAuMEUtMSAgMC41IC0+IDMuMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkxNiAgcG93ZXIgOTAuMDBFLTIgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkxNyAgcG93ZXIgOTBFLTMgIDAuNSAtPiAwLjMwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTE4ICBwb3dlciA5MEUrMSAgMC41IC0+IDMwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTE5ICBwb3dlciA5MEUrMiAgMC41IC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkyMCAgcG93ZXIgOTBFKzMgIDAuNSAtPiAzLjBFKzIgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MjEgIHBvd2VyIDAuOTEgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkyMiAgcG93ZXIgMC4wOTEgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkyMyAgcG93ZXIgOTEuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MjQgIHBvd2VyIDkxLjAwRS0yICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MjUgIHBvd2VyIDkxRS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MjYgIHBvd2VyIDkxRSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTI3ICBwb3dlciA5MUUrMiAgMC41IC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkyOCAgcG93ZXIgOTFFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTI5ICBwb3dlciAwLjkyICAwLjUgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MzAgIHBvd2VyIDAuMDkyICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MzEgIHBvd2VyIDkyLjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTMyICBwb3dlciA5Mi4wMEUtMiAgMC41IC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTMzICBwb3dlciA5MkUtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTM0ICBwb3dlciA5MkUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkzNSAgcG93ZXIgOTJFKzIgIDAuNSAtPiA5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MzYgIHBvd2VyIDkyRSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkzNyAgcG93ZXIgMC45MyAgMC41IC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTM4ICBwb3dlciAwLjA5MyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTM5ICBwb3dlciA5My4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk0MCAgcG93ZXIgOTMuMDBFLTIgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk0MSAgcG93ZXIgOTNFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk0MiAgcG93ZXIgOTNFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NDMgIHBvd2VyIDkzRSsyICAwLjUgLT4gOTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTQ0ICBwb3dlciA5M0UrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NDUgIHBvd2VyIDAuOTQgIDAuNSAtPiAwLjk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk0NiAgcG93ZXIgMC4wOTQgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk0NyAgcG93ZXIgOTQuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NDggIHBvd2VyIDk0LjAwRS0yICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NDkgIHBvd2VyIDk0RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NTAgIHBvd2VyIDk0RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTUxICBwb3dlciA5NEUrMiAgMC41IC0+IDk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk1MiAgcG93ZXIgOTRFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTUzICBwb3dlciAwLjk1ICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NTQgIHBvd2VyIDAuMDk1ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NTUgIHBvd2VyIDk1LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTU2ICBwb3dlciA5NS4wMEUtMiAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTU3ICBwb3dlciA5NUUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTU4ICBwb3dlciA5NUUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk1OSAgcG93ZXIgOTVFKzIgIDAuNSAtPiA5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NjAgIHBvd2VyIDk1RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk2MSAgcG93ZXIgMC45NiAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTYyICBwb3dlciAwLjA5NiAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTYzICBwb3dlciA5Ni4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk2NCAgcG93ZXIgOTYuMDBFLTIgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk2NSAgcG93ZXIgOTZFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk2NiAgcG93ZXIgOTZFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NjcgIHBvd2VyIDk2RSsyICAwLjUgLT4gOTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTY4ICBwb3dlciA5NkUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NjkgIHBvd2VyIDAuOTcgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk3MCAgcG93ZXIgMC4wOTcgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk3MSAgcG93ZXIgOTcuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NzIgIHBvd2VyIDk3LjAwRS0yICAwLjUgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NzMgIHBvd2VyIDk3RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NzQgIHBvd2VyIDk3RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTc1ICBwb3dlciA5N0UrMiAgMC41IC0+IDk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk3NiAgcG93ZXIgOTdFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTc3ICBwb3dlciAwLjk4ICAwLjUgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NzggIHBvd2VyIDAuMDk4ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NzkgIHBvd2VyIDk4LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTgwICBwb3dlciA5OC4wMEUtMiAgMC41IC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTgxICBwb3dlciA5OEUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTgyICBwb3dlciA5OEUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk4MyAgcG93ZXIgOThFKzIgIDAuNSAtPiA5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5ODQgIHBvd2VyIDk4RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk4NSAgcG93ZXIgMC45OSAgMC41IC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTg2ICBwb3dlciAwLjA5OSAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTg3ICBwb3dlciA5OS4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk4OCAgcG93ZXIgOTkuMDBFLTIgIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk4OSAgcG93ZXIgOTlFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk5MCAgcG93ZXIgOTlFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5OTEgIHBvd2VyIDk5RSsyICAwLjUgLT4gOTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTkyICBwb3dlciA5OUUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gUHJlY2lzaW9uIDMgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgZiBhbmQgZi8xMF0NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotcHJlY2lzaW9uOiAgIDMNCi1wd3N4MzAwMSAgcG93ZXIgMC4xICAwLjUgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xMDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDAzICBwb3dlciAwLjIgIDAuNSAtPiAwLjQ0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMDQgIHBvd2VyIDAuMDIgIDAuNSAtPiAwLjE0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMDUgIHBvd2VyIDAuMyAgMC41IC0+IDAuNTQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAwNiAgcG93ZXIgMC4wMyAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAwNyAgcG93ZXIgMC40ICAwLjUgLT4gMC42MzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDA4ICBwb3dlciAwLjA0ICAwLjUgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDA5ICBwb3dlciAwLjUgIDAuNSAtPiAwLjcwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMTAgIHBvd2VyIDAuMDUgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMTEgIHBvd2VyIDAuNiAgMC41IC0+IDAuNzc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAxMiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAxMyAgcG93ZXIgMC43ICAwLjUgLT4gMC44MzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDE0ICBwb3dlciAwLjA3ICAwLjUgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDE1ICBwb3dlciAwLjggIDAuNSAtPiAwLjg5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMTYgIHBvd2VyIDAuMDggIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMTcgIHBvd2VyIDAuOSAgMC41IC0+IDAuOTQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAxOCAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAxOSAgcG93ZXIgMC4xMSAgMC41IC0+IDAuMzMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAyMCAgcG93ZXIgMC4wMTEgIDAuNSAtPiAwLjEwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMjEgIHBvd2VyIDAuMTIgIDAuNSAtPiAwLjM0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMjIgIHBvd2VyIDAuMDEyICAwLjUgLT4gMC4xMTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDIzICBwb3dlciAwLjEzICAwLjUgLT4gMC4zNjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDI0ICBwb3dlciAwLjAxMyAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAyNSAgcG93ZXIgMC4xNCAgMC41IC0+IDAuMzc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAyNiAgcG93ZXIgMC4wMTQgIDAuNSAtPiAwLjExOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMjcgIHBvd2VyIDAuMTUgIDAuNSAtPiAwLjM4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMjggIHBvd2VyIDAuMDE1ICAwLjUgLT4gMC4xMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDI5ICBwb3dlciAwLjE2ICAwLjUgLT4gMC40MDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDMwICBwb3dlciAwLjAxNiAgMC41IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAzMSAgcG93ZXIgMC4xNyAgMC41IC0+IDAuNDEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAzMiAgcG93ZXIgMC4wMTcgIDAuNSAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMzMgIHBvd2VyIDAuMTggIDAuNSAtPiAwLjQyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMzQgIHBvd2VyIDAuMDE4ICAwLjUgLT4gMC4xMzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDM1ICBwb3dlciAwLjE5ICAwLjUgLT4gMC40MzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDM2ICBwb3dlciAwLjAxOSAgMC41IC0+IDAuMTM4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAzNyAgcG93ZXIgMC4yMSAgMC41IC0+IDAuNDU4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAzOCAgcG93ZXIgMC4wMjEgIDAuNSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMzkgIHBvd2VyIDAuMjIgIDAuNSAtPiAwLjQ2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNDAgIHBvd2VyIDAuMDIyICAwLjUgLT4gMC4xNDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDQxICBwb3dlciAwLjIzICAwLjUgLT4gMC40ODAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDQyICBwb3dlciAwLjAyMyAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA0MyAgcG93ZXIgMC4yNCAgMC41IC0+IDAuNDkwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA0NCAgcG93ZXIgMC4wMjQgIDAuNSAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNDUgIHBvd2VyIDAuMjUgIDAuNSAtPiAwLjUwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNDYgIHBvd2VyIDAuMDI1ICAwLjUgLT4gMC4xNTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDQ3ICBwb3dlciAwLjI2ICAwLjUgLT4gMC41MTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDQ4ICBwb3dlciAwLjAyNiAgMC41IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA0OSAgcG93ZXIgMC4yNyAgMC41IC0+IDAuNTIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA1MCAgcG93ZXIgMC4wMjcgIDAuNSAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNTEgIHBvd2VyIDAuMjggIDAuNSAtPiAwLjUyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNTIgIHBvd2VyIDAuMDI4ICAwLjUgLT4gMC4xNjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDUzICBwb3dlciAwLjI5ICAwLjUgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDU0ICBwb3dlciAwLjAyOSAgMC41IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA1NSAgcG93ZXIgMC4zMSAgMC41IC0+IDAuNTU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA1NiAgcG93ZXIgMC4wMzEgIDAuNSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNTcgIHBvd2VyIDAuMzIgIDAuNSAtPiAwLjU2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNTggIHBvd2VyIDAuMDMyICAwLjUgLT4gMC4xNzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDU5ICBwb3dlciAwLjMzICAwLjUgLT4gMC41NzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDYwICBwb3dlciAwLjAzMyAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA2MSAgcG93ZXIgMC4zNCAgMC41IC0+IDAuNTgzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA2MiAgcG93ZXIgMC4wMzQgIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNjMgIHBvd2VyIDAuMzUgIDAuNSAtPiAwLjU5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNjQgIHBvd2VyIDAuMDM1ICAwLjUgLT4gMC4xODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDY1ICBwb3dlciAwLjM2ICAwLjUgLT4gMC42MDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDY2ICBwb3dlciAwLjAzNiAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA2NyAgcG93ZXIgMC4zNyAgMC41IC0+IDAuNjA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA2OCAgcG93ZXIgMC4wMzcgIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNjkgIHBvd2VyIDAuMzggIDAuNSAtPiAwLjYxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNzAgIHBvd2VyIDAuMDM4ICAwLjUgLT4gMC4xOTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDcxICBwb3dlciAwLjM5ICAwLjUgLT4gMC42MjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDcyICBwb3dlciAwLjAzOSAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA3MyAgcG93ZXIgMC40MSAgMC41IC0+IDAuNjQwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA3NCAgcG93ZXIgMC4wNDEgIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNzUgIHBvd2VyIDAuNDIgIDAuNSAtPiAwLjY0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNzYgIHBvd2VyIDAuMDQyICAwLjUgLT4gMC4yMDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDc3ICBwb3dlciAwLjQzICAwLjUgLT4gMC42NTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDc4ICBwb3dlciAwLjA0MyAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA3OSAgcG93ZXIgMC40NCAgMC41IC0+IDAuNjYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA4MCAgcG93ZXIgMC4wNDQgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwODEgIHBvd2VyIDAuNDUgIDAuNSAtPiAwLjY3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwODIgIHBvd2VyIDAuMDQ1ICAwLjUgLT4gMC4yMTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDgzICBwb3dlciAwLjQ2ICAwLjUgLT4gMC42NzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDg0ICBwb3dlciAwLjA0NiAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA4NSAgcG93ZXIgMC40NyAgMC41IC0+IDAuNjg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA4NiAgcG93ZXIgMC4wNDcgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwODcgIHBvd2VyIDAuNDggIDAuNSAtPiAwLjY5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwODggIHBvd2VyIDAuMDQ4ICAwLjUgLT4gMC4yMTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDg5ICBwb3dlciAwLjQ5ICAwLjUgLT4gMC43MDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDkwICBwb3dlciAwLjA0OSAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA5MSAgcG93ZXIgMC41MSAgMC41IC0+IDAuNzE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA5MiAgcG93ZXIgMC4wNTEgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwOTMgIHBvd2VyIDAuNTIgIDAuNSAtPiAwLjcyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwOTQgIHBvd2VyIDAuMDUyICAwLjUgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDk1ICBwb3dlciAwLjUzICAwLjUgLT4gMC43MjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDk2ICBwb3dlciAwLjA1MyAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA5NyAgcG93ZXIgMC41NCAgMC41IC0+IDAuNzM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA5OCAgcG93ZXIgMC4wNTQgIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwOTkgIHBvd2VyIDAuNTUgIDAuNSAtPiAwLjc0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMDAgIHBvd2VyIDAuMDU1ICAwLjUgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTAxICBwb3dlciAwLjU2ICAwLjUgLT4gMC43NDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTAyICBwb3dlciAwLjA1NiAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEwMyAgcG93ZXIgMC41NyAgMC41IC0+IDAuNzU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEwNCAgcG93ZXIgMC4wNTcgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMDUgIHBvd2VyIDAuNTggIDAuNSAtPiAwLjc2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMDYgIHBvd2VyIDAuMDU4ICAwLjUgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTA3ICBwb3dlciAwLjU5ICAwLjUgLT4gMC43NjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTA4ICBwb3dlciAwLjA1OSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEwOSAgcG93ZXIgMC42MSAgMC41IC0+IDAuNzgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzExMCAgcG93ZXIgMC4wNjEgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMTEgIHBvd2VyIDAuNjIgIDAuNSAtPiAwLjc4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMTIgIHBvd2VyIDAuMDYyICAwLjUgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTEzICBwb3dlciAwLjYzICAwLjUgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTE0ICBwb3dlciAwLjA2MyAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzExNSAgcG93ZXIgMC42NCAgMC41IC0+IDAuODAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzExNiAgcG93ZXIgMC4wNjQgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMTcgIHBvd2VyIDAuNjUgIDAuNSAtPiAwLjgwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMTggIHBvd2VyIDAuMDY1ICAwLjUgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTE5ICBwb3dlciAwLjY2ICAwLjUgLT4gMC44MTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTIwICBwb3dlciAwLjA2NiAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEyMSAgcG93ZXIgMC42NyAgMC41IC0+IDAuODE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEyMiAgcG93ZXIgMC4wNjcgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMjMgIHBvd2VyIDAuNjggIDAuNSAtPiAwLjgyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMjQgIHBvd2VyIDAuMDY4ICAwLjUgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTI1ICBwb3dlciAwLjY5ICAwLjUgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTI2ICBwb3dlciAwLjA2OSAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEyNyAgcG93ZXIgMC43MSAgMC41IC0+IDAuODQzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEyOCAgcG93ZXIgMC4wNzEgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMjkgIHBvd2VyIDAuNzIgIDAuNSAtPiAwLjg0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMzAgIHBvd2VyIDAuMDcyICAwLjUgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTMxICBwb3dlciAwLjczICAwLjUgLT4gMC44NTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTMyICBwb3dlciAwLjA3MyAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEzMyAgcG93ZXIgMC43NCAgMC41IC0+IDAuODYwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEzNCAgcG93ZXIgMC4wNzQgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMzUgIHBvd2VyIDAuNzUgIDAuNSAtPiAwLjg2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMzYgIHBvd2VyIDAuMDc1ICAwLjUgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTM3ICBwb3dlciAwLjc2ICAwLjUgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTM4ICBwb3dlciAwLjA3NiAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEzOSAgcG93ZXIgMC43NyAgMC41IC0+IDAuODc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE0MCAgcG93ZXIgMC4wNzcgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNDEgIHBvd2VyIDAuNzggIDAuNSAtPiAwLjg4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNDIgIHBvd2VyIDAuMDc4ICAwLjUgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTQzICBwb3dlciAwLjc5ICAwLjUgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTQ0ICBwb3dlciAwLjA3OSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE0NSAgcG93ZXIgMC44MSAgMC41IC0+IDAuOTAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE0NiAgcG93ZXIgMC4wODEgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNDcgIHBvd2VyIDAuODIgIDAuNSAtPiAwLjkwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNDggIHBvd2VyIDAuMDgyICAwLjUgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTQ5ICBwb3dlciAwLjgzICAwLjUgLT4gMC45MTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTUwICBwb3dlciAwLjA4MyAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE1MSAgcG93ZXIgMC44NCAgMC41IC0+IDAuOTE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE1MiAgcG93ZXIgMC4wODQgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNTMgIHBvd2VyIDAuODUgIDAuNSAtPiAwLjkyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNTQgIHBvd2VyIDAuMDg1ICAwLjUgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTU1ICBwb3dlciAwLjg2ICAwLjUgLT4gMC45MjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTU2ICBwb3dlciAwLjA4NiAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE1NyAgcG93ZXIgMC44NyAgMC41IC0+IDAuOTMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE1OCAgcG93ZXIgMC4wODcgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNTkgIHBvd2VyIDAuODggIDAuNSAtPiAwLjkzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNjAgIHBvd2VyIDAuMDg4ICAwLjUgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTYxICBwb3dlciAwLjg5ICAwLjUgLT4gMC45NDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTYyICBwb3dlciAwLjA4OSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE2MyAgcG93ZXIgMC45MSAgMC41IC0+IDAuOTU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE2NCAgcG93ZXIgMC4wOTEgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNjUgIHBvd2VyIDAuOTIgIDAuNSAtPiAwLjk1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNjYgIHBvd2VyIDAuMDkyICAwLjUgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTY3ICBwb3dlciAwLjkzICAwLjUgLT4gMC45NjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTY4ICBwb3dlciAwLjA5MyAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE2OSAgcG93ZXIgMC45NCAgMC41IC0+IDAuOTcwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE3MCAgcG93ZXIgMC4wOTQgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNzEgIHBvd2VyIDAuOTUgIDAuNSAtPiAwLjk3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNzIgIHBvd2VyIDAuMDk1ICAwLjUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTczICBwb3dlciAwLjk2ICAwLjUgLT4gMC45ODAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTc0ICBwb3dlciAwLjA5NiAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE3NSAgcG93ZXIgMC45NyAgMC41IC0+IDAuOTg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE3NiAgcG93ZXIgMC4wOTcgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNzcgIHBvd2VyIDAuOTggIDAuNSAtPiAwLjk5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNzggIHBvd2VyIDAuMDk4ICAwLjUgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTc5ICBwb3dlciAwLjk5ICAwLjUgLT4gMC45OTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTgwICBwb3dlciAwLjA5OSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE4MSAgcG93ZXIgMC4xMDEgIDAuNSAtPiAwLjMxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxODIgIHBvd2VyIDAuMDEwMSAgMC41IC0+IDAuMTAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE4MyAgcG93ZXIgMC4xMDIgIDAuNSAtPiAwLjMxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxODQgIHBvd2VyIDAuMDEwMiAgMC41IC0+IDAuMTAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE4NSAgcG93ZXIgMC4xMDMgIDAuNSAtPiAwLjMyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxODYgIHBvd2VyIDAuMDEwMyAgMC41IC0+IDAuMTAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE4NyAgcG93ZXIgMC4xMDQgIDAuNSAtPiAwLjMyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxODggIHBvd2VyIDAuMDEwNCAgMC41IC0+IDAuMTAyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE4OSAgcG93ZXIgMC4xMDUgIDAuNSAtPiAwLjMyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxOTAgIHBvd2VyIDAuMDEwNSAgMC41IC0+IDAuMTAyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE5MSAgcG93ZXIgMC4xMDYgIDAuNSAtPiAwLjMyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxOTIgIHBvd2VyIDAuMDEwNiAgMC41IC0+IDAuMTAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE5MyAgcG93ZXIgMC4xMDcgIDAuNSAtPiAwLjMyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxOTQgIHBvd2VyIDAuMDEwNyAgMC41IC0+IDAuMTAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE5NSAgcG93ZXIgMC4xMDggIDAuNSAtPiAwLjMyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxOTYgIHBvd2VyIDAuMDEwOCAgMC41IC0+IDAuMTA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE5NyAgcG93ZXIgMC4xMDkgIDAuNSAtPiAwLjMzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxOTggIHBvd2VyIDAuMDEwOSAgMC41IC0+IDAuMTA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE5OSAgcG93ZXIgMC4xMTEgIDAuNSAtPiAwLjMzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMDAgIHBvd2VyIDAuMDExMSAgMC41IC0+IDAuMTA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIwMSAgcG93ZXIgMC4xMTIgIDAuNSAtPiAwLjMzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMDIgIHBvd2VyIDAuMDExMiAgMC41IC0+IDAuMTA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIwMyAgcG93ZXIgMC4xMTMgIDAuNSAtPiAwLjMzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMDQgIHBvd2VyIDAuMDExMyAgMC41IC0+IDAuMTA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIwNSAgcG93ZXIgMC4xMTQgIDAuNSAtPiAwLjMzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMDYgIHBvd2VyIDAuMDExNCAgMC41IC0+IDAuMTA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIwNyAgcG93ZXIgMC4xMTUgIDAuNSAtPiAwLjMzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMDggIHBvd2VyIDAuMDExNSAgMC41IC0+IDAuMTA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIwOSAgcG93ZXIgMC4xMTYgIDAuNSAtPiAwLjM0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMTAgIHBvd2VyIDAuMDExNiAgMC41IC0+IDAuMTA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIxMSAgcG93ZXIgMC4xMTcgIDAuNSAtPiAwLjM0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMTIgIHBvd2VyIDAuMDExNyAgMC41IC0+IDAuMTA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIxMyAgcG93ZXIgMC4xMTggIDAuNSAtPiAwLjM0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMTQgIHBvd2VyIDAuMDExOCAgMC41IC0+IDAuMTA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIxNSAgcG93ZXIgMC4xMTkgIDAuNSAtPiAwLjM0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMTYgIHBvd2VyIDAuMDExOSAgMC41IC0+IDAuMTA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIxNyAgcG93ZXIgMC4xMjEgIDAuNSAtPiAwLjM0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMTggIHBvd2VyIDAuMDEyMSAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIxOSAgcG93ZXIgMC4xMjIgIDAuNSAtPiAwLjM0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMjAgIHBvd2VyIDAuMDEyMiAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIyMSAgcG93ZXIgMC4xMjMgIDAuNSAtPiAwLjM1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMjIgIHBvd2VyIDAuMDEyMyAgMC41IC0+IDAuMTExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIyMyAgcG93ZXIgMC4xMjQgIDAuNSAtPiAwLjM1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMjQgIHBvd2VyIDAuMDEyNCAgMC41IC0+IDAuMTExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIyNSAgcG93ZXIgMC4xMjUgIDAuNSAtPiAwLjM1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMjYgIHBvd2VyIDAuMDEyNSAgMC41IC0+IDAuMTEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIyNyAgcG93ZXIgMC4xMjYgIDAuNSAtPiAwLjM1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMjggIHBvd2VyIDAuMDEyNiAgMC41IC0+IDAuMTEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIyOSAgcG93ZXIgMC4xMjcgIDAuNSAtPiAwLjM1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMzAgIHBvd2VyIDAuMDEyNyAgMC41IC0+IDAuMTEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIzMSAgcG93ZXIgMC4xMjggIDAuNSAtPiAwLjM1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMzIgIHBvd2VyIDAuMDEyOCAgMC41IC0+IDAuMTEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIzMyAgcG93ZXIgMC4xMjkgIDAuNSAtPiAwLjM1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMzQgIHBvd2VyIDAuMDEyOSAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIzNSAgcG93ZXIgMC4xMzEgIDAuNSAtPiAwLjM2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMzYgIHBvd2VyIDAuMDEzMSAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIzNyAgcG93ZXIgMC4xMzIgIDAuNSAtPiAwLjM2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMzggIHBvd2VyIDAuMDEzMiAgMC41IC0+IDAuMTE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzIzOSAgcG93ZXIgMC4xMzMgIDAuNSAtPiAwLjM2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNDAgIHBvd2VyIDAuMDEzMyAgMC41IC0+IDAuMTE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI0MSAgcG93ZXIgMC4xMzQgIDAuNSAtPiAwLjM2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNDIgIHBvd2VyIDAuMDEzNCAgMC41IC0+IDAuMTE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI0MyAgcG93ZXIgMC4xMzUgIDAuNSAtPiAwLjM2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNDQgIHBvd2VyIDAuMDEzNSAgMC41IC0+IDAuMTE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI0NSAgcG93ZXIgMC4xMzYgIDAuNSAtPiAwLjM2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNDYgIHBvd2VyIDAuMDEzNiAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI0NyAgcG93ZXIgMC4xMzcgIDAuNSAtPiAwLjM3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNDggIHBvd2VyIDAuMDEzNyAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI0OSAgcG93ZXIgMC4xMzggIDAuNSAtPiAwLjM3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNTAgIHBvd2VyIDAuMDEzOCAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI1MSAgcG93ZXIgMC4xMzkgIDAuNSAtPiAwLjM3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNTIgIHBvd2VyIDAuMDEzOSAgMC41IC0+IDAuMTE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI1MyAgcG93ZXIgMC4xNDEgIDAuNSAtPiAwLjM3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNTQgIHBvd2VyIDAuMDE0MSAgMC41IC0+IDAuMTE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI1NSAgcG93ZXIgMC4xNDIgIDAuNSAtPiAwLjM3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNTYgIHBvd2VyIDAuMDE0MiAgMC41IC0+IDAuMTE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI1NyAgcG93ZXIgMC4xNDMgIDAuNSAtPiAwLjM3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNTggIHBvd2VyIDAuMDE0MyAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI1OSAgcG93ZXIgMC4xNDQgIDAuNSAtPiAwLjM3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNjAgIHBvd2VyIDAuMDE0NCAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI2MSAgcG93ZXIgMC4xNDUgIDAuNSAtPiAwLjM4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNjIgIHBvd2VyIDAuMDE0NSAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI2MyAgcG93ZXIgMC4xNDYgIDAuNSAtPiAwLjM4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNjQgIHBvd2VyIDAuMDE0NiAgMC41IC0+IDAuMTIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI2NSAgcG93ZXIgMC4xNDcgIDAuNSAtPiAwLjM4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNjYgIHBvd2VyIDAuMDE0NyAgMC41IC0+IDAuMTIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI2NyAgcG93ZXIgMC4xNDggIDAuNSAtPiAwLjM4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNjggIHBvd2VyIDAuMDE0OCAgMC41IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI2OSAgcG93ZXIgMC4xNDkgIDAuNSAtPiAwLjM4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNzAgIHBvd2VyIDAuMDE0OSAgMC41IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI3MSAgcG93ZXIgMC4xNTEgIDAuNSAtPiAwLjM4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNzIgIHBvd2VyIDAuMDE1MSAgMC41IC0+IDAuMTIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI3MyAgcG93ZXIgMC4xNTIgIDAuNSAtPiAwLjM5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNzQgIHBvd2VyIDAuMDE1MiAgMC41IC0+IDAuMTIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI3NSAgcG93ZXIgMC4xNTMgIDAuNSAtPiAwLjM5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNzYgIHBvd2VyIDAuMDE1MyAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI3NyAgcG93ZXIgMC4xNTQgIDAuNSAtPiAwLjM5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNzggIHBvd2VyIDAuMDE1NCAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI3OSAgcG93ZXIgMC4xNTUgIDAuNSAtPiAwLjM5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyODAgIHBvd2VyIDAuMDE1NSAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI4MSAgcG93ZXIgMC4xNTYgIDAuNSAtPiAwLjM5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyODIgIHBvd2VyIDAuMDE1NiAgMC41IC0+IDAuMTI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI4MyAgcG93ZXIgMC4xNTcgIDAuNSAtPiAwLjM5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyODQgIHBvd2VyIDAuMDE1NyAgMC41IC0+IDAuMTI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI4NSAgcG93ZXIgMC4xNTggIDAuNSAtPiAwLjM5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyODYgIHBvd2VyIDAuMDE1OCAgMC41IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI4NyAgcG93ZXIgMC4xNTkgIDAuNSAtPiAwLjM5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyODggIHBvd2VyIDAuMDE1OSAgMC41IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI4OSAgcG93ZXIgMC4xNjEgIDAuNSAtPiAwLjQwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyOTAgIHBvd2VyIDAuMDE2MSAgMC41IC0+IDAuMTI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI5MSAgcG93ZXIgMC4xNjIgIDAuNSAtPiAwLjQwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyOTIgIHBvd2VyIDAuMDE2MiAgMC41IC0+IDAuMTI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI5MyAgcG93ZXIgMC4xNjMgIDAuNSAtPiAwLjQwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyOTQgIHBvd2VyIDAuMDE2MyAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI5NSAgcG93ZXIgMC4xNjQgIDAuNSAtPiAwLjQwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyOTYgIHBvd2VyIDAuMDE2NCAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI5NyAgcG93ZXIgMC4xNjUgIDAuNSAtPiAwLjQwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyOTggIHBvd2VyIDAuMDE2NSAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzI5OSAgcG93ZXIgMC4xNjYgIDAuNSAtPiAwLjQwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMDAgIHBvd2VyIDAuMDE2NiAgMC41IC0+IDAuMTI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMwMSAgcG93ZXIgMC4xNjcgIDAuNSAtPiAwLjQwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMDIgIHBvd2VyIDAuMDE2NyAgMC41IC0+IDAuMTI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMwMyAgcG93ZXIgMC4xNjggIDAuNSAtPiAwLjQxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMDQgIHBvd2VyIDAuMDE2OCAgMC41IC0+IDAuMTMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMwNSAgcG93ZXIgMC4xNjkgIDAuNSAtPiAwLjQxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMDYgIHBvd2VyIDAuMDE2OSAgMC41IC0+IDAuMTMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMwNyAgcG93ZXIgMC4xNzEgIDAuNSAtPiAwLjQxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMDggIHBvd2VyIDAuMDE3MSAgMC41IC0+IDAuMTMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMwOSAgcG93ZXIgMC4xNzIgIDAuNSAtPiAwLjQxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMTAgIHBvd2VyIDAuMDE3MiAgMC41IC0+IDAuMTMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMxMSAgcG93ZXIgMC4xNzMgIDAuNSAtPiAwLjQxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMTIgIHBvd2VyIDAuMDE3MyAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMxMyAgcG93ZXIgMC4xNzQgIDAuNSAtPiAwLjQxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMTQgIHBvd2VyIDAuMDE3NCAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMxNSAgcG93ZXIgMC4xNzUgIDAuNSAtPiAwLjQxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMTYgIHBvd2VyIDAuMDE3NSAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMxNyAgcG93ZXIgMC4xNzYgIDAuNSAtPiAwLjQyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMTggIHBvd2VyIDAuMDE3NiAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMxOSAgcG93ZXIgMC4xNzcgIDAuNSAtPiAwLjQyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMjAgIHBvd2VyIDAuMDE3NyAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMyMSAgcG93ZXIgMC4xNzggIDAuNSAtPiAwLjQyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMjIgIHBvd2VyIDAuMDE3OCAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMyMyAgcG93ZXIgMC4xNzkgIDAuNSAtPiAwLjQyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMjQgIHBvd2VyIDAuMDE3OSAgMC41IC0+IDAuMTM0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMyNSAgcG93ZXIgMC4xODEgIDAuNSAtPiAwLjQyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMjYgIHBvd2VyIDAuMDE4MSAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMyNyAgcG93ZXIgMC4xODIgIDAuNSAtPiAwLjQyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMjggIHBvd2VyIDAuMDE4MiAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMyOSAgcG93ZXIgMC4xODMgIDAuNSAtPiAwLjQyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMzAgIHBvd2VyIDAuMDE4MyAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMzMSAgcG93ZXIgMC4xODQgIDAuNSAtPiAwLjQyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMzIgIHBvd2VyIDAuMDE4NCAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMzMyAgcG93ZXIgMC4xODUgIDAuNSAtPiAwLjQzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMzQgIHBvd2VyIDAuMDE4NSAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMzNSAgcG93ZXIgMC4xODYgIDAuNSAtPiAwLjQzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMzYgIHBvd2VyIDAuMDE4NiAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMzNyAgcG93ZXIgMC4xODcgIDAuNSAtPiAwLjQzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMzggIHBvd2VyIDAuMDE4NyAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzMzOSAgcG93ZXIgMC4xODggIDAuNSAtPiAwLjQzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNDAgIHBvd2VyIDAuMDE4OCAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM0MSAgcG93ZXIgMC4xODkgIDAuNSAtPiAwLjQzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNDIgIHBvd2VyIDAuMDE4OSAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM0MyAgcG93ZXIgMC4xOTEgIDAuNSAtPiAwLjQzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNDQgIHBvd2VyIDAuMDE5MSAgMC41IC0+IDAuMTM4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM0NSAgcG93ZXIgMC4xOTIgIDAuNSAtPiAwLjQzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNDYgIHBvd2VyIDAuMDE5MiAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM0NyAgcG93ZXIgMC4xOTMgIDAuNSAtPiAwLjQzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNDggIHBvd2VyIDAuMDE5MyAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM0OSAgcG93ZXIgMC4xOTQgIDAuNSAtPiAwLjQ0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNTAgIHBvd2VyIDAuMDE5NCAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM1MSAgcG93ZXIgMC4xOTUgIDAuNSAtPiAwLjQ0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNTIgIHBvd2VyIDAuMDE5NSAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM1MyAgcG93ZXIgMC4xOTYgIDAuNSAtPiAwLjQ0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNTQgIHBvd2VyIDAuMDE5NiAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM1NSAgcG93ZXIgMC4xOTcgIDAuNSAtPiAwLjQ0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNTYgIHBvd2VyIDAuMDE5NyAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM1NyAgcG93ZXIgMC4xOTggIDAuNSAtPiAwLjQ0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNTggIHBvd2VyIDAuMDE5OCAgMC41IC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM1OSAgcG93ZXIgMC4xOTkgIDAuNSAtPiAwLjQ0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNjAgIHBvd2VyIDAuMDE5OSAgMC41IC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM2MSAgcG93ZXIgMC4yMDEgIDAuNSAtPiAwLjQ0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNjIgIHBvd2VyIDAuMDIwMSAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM2MyAgcG93ZXIgMC4yMDIgIDAuNSAtPiAwLjQ0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNjQgIHBvd2VyIDAuMDIwMiAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM2NSAgcG93ZXIgMC4yMDMgIDAuNSAtPiAwLjQ1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNjYgIHBvd2VyIDAuMDIwMyAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM2NyAgcG93ZXIgMC4yMDQgIDAuNSAtPiAwLjQ1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNjggIHBvd2VyIDAuMDIwNCAgMC41IC0+IDAuMTQzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM2OSAgcG93ZXIgMC4yMDUgIDAuNSAtPiAwLjQ1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNzAgIHBvd2VyIDAuMDIwNSAgMC41IC0+IDAuMTQzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM3MSAgcG93ZXIgMC4yMDYgIDAuNSAtPiAwLjQ1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNzIgIHBvd2VyIDAuMDIwNiAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM3MyAgcG93ZXIgMC4yMDcgIDAuNSAtPiAwLjQ1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNzQgIHBvd2VyIDAuMDIwNyAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM3NSAgcG93ZXIgMC4yMDggIDAuNSAtPiAwLjQ1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNzYgIHBvd2VyIDAuMDIwOCAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM3NyAgcG93ZXIgMC4yMDkgIDAuNSAtPiAwLjQ1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNzggIHBvd2VyIDAuMDIwOSAgMC41IC0+IDAuMTQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM3OSAgcG93ZXIgMC4yMTEgIDAuNSAtPiAwLjQ1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzODAgIHBvd2VyIDAuMDIxMSAgMC41IC0+IDAuMTQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM4MSAgcG93ZXIgMC4yMTIgIDAuNSAtPiAwLjQ2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzODIgIHBvd2VyIDAuMDIxMiAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM4MyAgcG93ZXIgMC4yMTMgIDAuNSAtPiAwLjQ2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzODQgIHBvd2VyIDAuMDIxMyAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM4NSAgcG93ZXIgMC4yMTQgIDAuNSAtPiAwLjQ2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzODYgIHBvd2VyIDAuMDIxNCAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM4NyAgcG93ZXIgMC4yMTUgIDAuNSAtPiAwLjQ2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzODggIHBvd2VyIDAuMDIxNSAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM4OSAgcG93ZXIgMC4yMTYgIDAuNSAtPiAwLjQ2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzOTAgIHBvd2VyIDAuMDIxNiAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM5MSAgcG93ZXIgMC4yMTcgIDAuNSAtPiAwLjQ2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzOTIgIHBvd2VyIDAuMDIxNyAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM5MyAgcG93ZXIgMC4yMTggIDAuNSAtPiAwLjQ2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzOTQgIHBvd2VyIDAuMDIxOCAgMC41IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM5NSAgcG93ZXIgMC4yMTkgIDAuNSAtPiAwLjQ2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzOTYgIHBvd2VyIDAuMDIxOSAgMC41IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM5NyAgcG93ZXIgMC4yMjEgIDAuNSAtPiAwLjQ3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzOTggIHBvd2VyIDAuMDIyMSAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzM5OSAgcG93ZXIgMC4yMjIgIDAuNSAtPiAwLjQ3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MDAgIHBvd2VyIDAuMDIyMiAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQwMSAgcG93ZXIgMC4yMjMgIDAuNSAtPiAwLjQ3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MDIgIHBvd2VyIDAuMDIyMyAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQwMyAgcG93ZXIgMC4yMjQgIDAuNSAtPiAwLjQ3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MDQgIHBvd2VyIDAuMDIyNCAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQwNSAgcG93ZXIgMC4yMjUgIDAuNSAtPiAwLjQ3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MDYgIHBvd2VyIDAuMDIyNSAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQwNyAgcG93ZXIgMC4yMjYgIDAuNSAtPiAwLjQ3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MDggIHBvd2VyIDAuMDIyNiAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQwOSAgcG93ZXIgMC4yMjcgIDAuNSAtPiAwLjQ3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MTAgIHBvd2VyIDAuMDIyNyAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQxMSAgcG93ZXIgMC4yMjggIDAuNSAtPiAwLjQ3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MTIgIHBvd2VyIDAuMDIyOCAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQxMyAgcG93ZXIgMC4yMjkgIDAuNSAtPiAwLjQ3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MTQgIHBvd2VyIDAuMDIyOSAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQxNSAgcG93ZXIgMC4yMzEgIDAuNSAtPiAwLjQ4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MTYgIHBvd2VyIDAuMDIzMSAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQxNyAgcG93ZXIgMC4yMzIgIDAuNSAtPiAwLjQ4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MTggIHBvd2VyIDAuMDIzMiAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQxOSAgcG93ZXIgMC4yMzMgIDAuNSAtPiAwLjQ4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MjAgIHBvd2VyIDAuMDIzMyAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQyMSAgcG93ZXIgMC4yMzQgIDAuNSAtPiAwLjQ4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MjIgIHBvd2VyIDAuMDIzNCAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQyMyAgcG93ZXIgMC4yMzUgIDAuNSAtPiAwLjQ4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MjQgIHBvd2VyIDAuMDIzNSAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQyNSAgcG93ZXIgMC4yMzYgIDAuNSAtPiAwLjQ4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MjYgIHBvd2VyIDAuMDIzNiAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQyNyAgcG93ZXIgMC4yMzcgIDAuNSAtPiAwLjQ4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MjggIHBvd2VyIDAuMDIzNyAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQyOSAgcG93ZXIgMC4yMzggIDAuNSAtPiAwLjQ4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MzAgIHBvd2VyIDAuMDIzOCAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQzMSAgcG93ZXIgMC4yMzkgIDAuNSAtPiAwLjQ4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MzIgIHBvd2VyIDAuMDIzOSAgMC41IC0+IDAuMTU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQzMyAgcG93ZXIgMC4yNDEgIDAuNSAtPiAwLjQ5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MzQgIHBvd2VyIDAuMDI0MSAgMC41IC0+IDAuMTU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQzNSAgcG93ZXIgMC4yNDIgIDAuNSAtPiAwLjQ5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MzYgIHBvd2VyIDAuMDI0MiAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQzNyAgcG93ZXIgMC4yNDMgIDAuNSAtPiAwLjQ5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MzggIHBvd2VyIDAuMDI0MyAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQzOSAgcG93ZXIgMC4yNDQgIDAuNSAtPiAwLjQ5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NDAgIHBvd2VyIDAuMDI0NCAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ0MSAgcG93ZXIgMC4yNDUgIDAuNSAtPiAwLjQ5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NDIgIHBvd2VyIDAuMDI0NSAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ0MyAgcG93ZXIgMC4yNDYgIDAuNSAtPiAwLjQ5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NDQgIHBvd2VyIDAuMDI0NiAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ0NSAgcG93ZXIgMC4yNDcgIDAuNSAtPiAwLjQ5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NDYgIHBvd2VyIDAuMDI0NyAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ0NyAgcG93ZXIgMC4yNDggIDAuNSAtPiAwLjQ5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NDggIHBvd2VyIDAuMDI0OCAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ0OSAgcG93ZXIgMC4yNDkgIDAuNSAtPiAwLjQ5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NTAgIHBvd2VyIDAuMDI0OSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ1MSAgcG93ZXIgMC4yNTEgIDAuNSAtPiAwLjUwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NTIgIHBvd2VyIDAuMDI1MSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ1MyAgcG93ZXIgMC4yNTIgIDAuNSAtPiAwLjUwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NTQgIHBvd2VyIDAuMDI1MiAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ1NSAgcG93ZXIgMC4yNTMgIDAuNSAtPiAwLjUwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NTYgIHBvd2VyIDAuMDI1MyAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ1NyAgcG93ZXIgMC4yNTQgIDAuNSAtPiAwLjUwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NTggIHBvd2VyIDAuMDI1NCAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ1OSAgcG93ZXIgMC4yNTUgIDAuNSAtPiAwLjUwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NjAgIHBvd2VyIDAuMDI1NSAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ2MSAgcG93ZXIgMC4yNTYgIDAuNSAtPiAwLjUwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NjIgIHBvd2VyIDAuMDI1NiAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ2MyAgcG93ZXIgMC4yNTcgIDAuNSAtPiAwLjUwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NjQgIHBvd2VyIDAuMDI1NyAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ2NSAgcG93ZXIgMC4yNTggIDAuNSAtPiAwLjUwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NjYgIHBvd2VyIDAuMDI1OCAgMC41IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ2NyAgcG93ZXIgMC4yNTkgIDAuNSAtPiAwLjUwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NjggIHBvd2VyIDAuMDI1OSAgMC41IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ2OSAgcG93ZXIgMC4yNjEgIDAuNSAtPiAwLjUxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NzAgIHBvd2VyIDAuMDI2MSAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ3MSAgcG93ZXIgMC4yNjIgIDAuNSAtPiAwLjUxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NzIgIHBvd2VyIDAuMDI2MiAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ3MyAgcG93ZXIgMC4yNjMgIDAuNSAtPiAwLjUxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NzQgIHBvd2VyIDAuMDI2MyAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ3NSAgcG93ZXIgMC4yNjQgIDAuNSAtPiAwLjUxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NzYgIHBvd2VyIDAuMDI2NCAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ3NyAgcG93ZXIgMC4yNjUgIDAuNSAtPiAwLjUxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NzggIHBvd2VyIDAuMDI2NSAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ3OSAgcG93ZXIgMC4yNjYgIDAuNSAtPiAwLjUxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0ODAgIHBvd2VyIDAuMDI2NiAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ4MSAgcG93ZXIgMC4yNjcgIDAuNSAtPiAwLjUxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0ODIgIHBvd2VyIDAuMDI2NyAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ4MyAgcG93ZXIgMC4yNjggIDAuNSAtPiAwLjUxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0ODQgIHBvd2VyIDAuMDI2OCAgMC41IC0+IDAuMTY0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ4NSAgcG93ZXIgMC4yNjkgIDAuNSAtPiAwLjUxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0ODYgIHBvd2VyIDAuMDI2OSAgMC41IC0+IDAuMTY0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ4NyAgcG93ZXIgMC4yNzEgIDAuNSAtPiAwLjUyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0ODggIHBvd2VyIDAuMDI3MSAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ4OSAgcG93ZXIgMC4yNzIgIDAuNSAtPiAwLjUyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0OTAgIHBvd2VyIDAuMDI3MiAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ5MSAgcG93ZXIgMC4yNzMgIDAuNSAtPiAwLjUyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0OTIgIHBvd2VyIDAuMDI3MyAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ5MyAgcG93ZXIgMC4yNzQgIDAuNSAtPiAwLjUyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0OTQgIHBvd2VyIDAuMDI3NCAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ5NSAgcG93ZXIgMC4yNzUgIDAuNSAtPiAwLjUyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0OTYgIHBvd2VyIDAuMDI3NSAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ5NyAgcG93ZXIgMC4yNzYgIDAuNSAtPiAwLjUyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0OTggIHBvd2VyIDAuMDI3NiAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzQ5OSAgcG93ZXIgMC4yNzcgIDAuNSAtPiAwLjUyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MDAgIHBvd2VyIDAuMDI3NyAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUwMSAgcG93ZXIgMC4yNzggIDAuNSAtPiAwLjUyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MDIgIHBvd2VyIDAuMDI3OCAgMC41IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUwMyAgcG93ZXIgMC4yNzkgIDAuNSAtPiAwLjUyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MDQgIHBvd2VyIDAuMDI3OSAgMC41IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUwNSAgcG93ZXIgMC4yODEgIDAuNSAtPiAwLjUzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MDYgIHBvd2VyIDAuMDI4MSAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUwNyAgcG93ZXIgMC4yODIgIDAuNSAtPiAwLjUzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MDggIHBvd2VyIDAuMDI4MiAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUwOSAgcG93ZXIgMC4yODMgIDAuNSAtPiAwLjUzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MTAgIHBvd2VyIDAuMDI4MyAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUxMSAgcG93ZXIgMC4yODQgIDAuNSAtPiAwLjUzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MTIgIHBvd2VyIDAuMDI4NCAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUxMyAgcG93ZXIgMC4yODUgIDAuNSAtPiAwLjUzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MTQgIHBvd2VyIDAuMDI4NSAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUxNSAgcG93ZXIgMC4yODYgIDAuNSAtPiAwLjUzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MTYgIHBvd2VyIDAuMDI4NiAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUxNyAgcG93ZXIgMC4yODcgIDAuNSAtPiAwLjUzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MTggIHBvd2VyIDAuMDI4NyAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUxOSAgcG93ZXIgMC4yODggIDAuNSAtPiAwLjUzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MjAgIHBvd2VyIDAuMDI4OCAgMC41IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUyMSAgcG93ZXIgMC4yODkgIDAuNSAtPiAwLjUzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MjIgIHBvd2VyIDAuMDI4OSAgMC41IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUyMyAgcG93ZXIgMC4yOTEgIDAuNSAtPiAwLjUzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MjQgIHBvd2VyIDAuMDI5MSAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUyNSAgcG93ZXIgMC4yOTIgIDAuNSAtPiAwLjU0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MjYgIHBvd2VyIDAuMDI5MiAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUyNyAgcG93ZXIgMC4yOTMgIDAuNSAtPiAwLjU0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MjggIHBvd2VyIDAuMDI5MyAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUyOSAgcG93ZXIgMC4yOTQgIDAuNSAtPiAwLjU0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MzAgIHBvd2VyIDAuMDI5NCAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUzMSAgcG93ZXIgMC4yOTUgIDAuNSAtPiAwLjU0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MzIgIHBvd2VyIDAuMDI5NSAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUzMyAgcG93ZXIgMC4yOTYgIDAuNSAtPiAwLjU0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MzQgIHBvd2VyIDAuMDI5NiAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUzNSAgcG93ZXIgMC4yOTcgIDAuNSAtPiAwLjU0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MzYgIHBvd2VyIDAuMDI5NyAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUzNyAgcG93ZXIgMC4yOTggIDAuNSAtPiAwLjU0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MzggIHBvd2VyIDAuMDI5OCAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzUzOSAgcG93ZXIgMC4yOTkgIDAuNSAtPiAwLjU0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NDAgIHBvd2VyIDAuMDI5OSAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU0MSAgcG93ZXIgMC4zMDEgIDAuNSAtPiAwLjU0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NDIgIHBvd2VyIDAuMDMwMSAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU0MyAgcG93ZXIgMC4zMDIgIDAuNSAtPiAwLjU1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NDQgIHBvd2VyIDAuMDMwMiAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU0NSAgcG93ZXIgMC4zMDMgIDAuNSAtPiAwLjU1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NDYgIHBvd2VyIDAuMDMwMyAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU0NyAgcG93ZXIgMC4zMDQgIDAuNSAtPiAwLjU1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NDggIHBvd2VyIDAuMDMwNCAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU0OSAgcG93ZXIgMC4zMDUgIDAuNSAtPiAwLjU1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NTAgIHBvd2VyIDAuMDMwNSAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU1MSAgcG93ZXIgMC4zMDYgIDAuNSAtPiAwLjU1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NTIgIHBvd2VyIDAuMDMwNiAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU1MyAgcG93ZXIgMC4zMDcgIDAuNSAtPiAwLjU1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NTQgIHBvd2VyIDAuMDMwNyAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU1NSAgcG93ZXIgMC4zMDggIDAuNSAtPiAwLjU1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NTYgIHBvd2VyIDAuMDMwOCAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU1NyAgcG93ZXIgMC4zMDkgIDAuNSAtPiAwLjU1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NTggIHBvd2VyIDAuMDMwOSAgMC41IC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU1OSAgcG93ZXIgMC4zMTEgIDAuNSAtPiAwLjU1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NjAgIHBvd2VyIDAuMDMxMSAgMC41IC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU2MSAgcG93ZXIgMC4zMTIgIDAuNSAtPiAwLjU1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NjIgIHBvd2VyIDAuMDMxMiAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU2MyAgcG93ZXIgMC4zMTMgIDAuNSAtPiAwLjU1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NjQgIHBvd2VyIDAuMDMxMyAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU2NSAgcG93ZXIgMC4zMTQgIDAuNSAtPiAwLjU2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NjYgIHBvd2VyIDAuMDMxNCAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU2NyAgcG93ZXIgMC4zMTUgIDAuNSAtPiAwLjU2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NjggIHBvd2VyIDAuMDMxNSAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU2OSAgcG93ZXIgMC4zMTYgIDAuNSAtPiAwLjU2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NzAgIHBvd2VyIDAuMDMxNiAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU3MSAgcG93ZXIgMC4zMTcgIDAuNSAtPiAwLjU2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NzIgIHBvd2VyIDAuMDMxNyAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU3MyAgcG93ZXIgMC4zMTggIDAuNSAtPiAwLjU2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NzQgIHBvd2VyIDAuMDMxOCAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU3NSAgcG93ZXIgMC4zMTkgIDAuNSAtPiAwLjU2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NzYgIHBvd2VyIDAuMDMxOSAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU3NyAgcG93ZXIgMC4zMjEgIDAuNSAtPiAwLjU2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NzggIHBvd2VyIDAuMDMyMSAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU3OSAgcG93ZXIgMC4zMjIgIDAuNSAtPiAwLjU2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1ODAgIHBvd2VyIDAuMDMyMiAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU4MSAgcG93ZXIgMC4zMjMgIDAuNSAtPiAwLjU2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1ODIgIHBvd2VyIDAuMDMyMyAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU4MyAgcG93ZXIgMC4zMjQgIDAuNSAtPiAwLjU2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1ODQgIHBvd2VyIDAuMDMyNCAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU4NSAgcG93ZXIgMC4zMjUgIDAuNSAtPiAwLjU3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1ODYgIHBvd2VyIDAuMDMyNSAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU4NyAgcG93ZXIgMC4zMjYgIDAuNSAtPiAwLjU3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1ODggIHBvd2VyIDAuMDMyNiAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU4OSAgcG93ZXIgMC4zMjcgIDAuNSAtPiAwLjU3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1OTAgIHBvd2VyIDAuMDMyNyAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU5MSAgcG93ZXIgMC4zMjggIDAuNSAtPiAwLjU3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1OTIgIHBvd2VyIDAuMDMyOCAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU5MyAgcG93ZXIgMC4zMjkgIDAuNSAtPiAwLjU3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1OTQgIHBvd2VyIDAuMDMyOSAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU5NSAgcG93ZXIgMC4zMzEgIDAuNSAtPiAwLjU3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1OTYgIHBvd2VyIDAuMDMzMSAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU5NyAgcG93ZXIgMC4zMzIgIDAuNSAtPiAwLjU3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1OTggIHBvd2VyIDAuMDMzMiAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzU5OSAgcG93ZXIgMC4zMzMgIDAuNSAtPiAwLjU3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MDAgIHBvd2VyIDAuMDMzMyAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYwMSAgcG93ZXIgMC4zMzQgIDAuNSAtPiAwLjU3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MDIgIHBvd2VyIDAuMDMzNCAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYwMyAgcG93ZXIgMC4zMzUgIDAuNSAtPiAwLjU3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MDQgIHBvd2VyIDAuMDMzNSAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYwNSAgcG93ZXIgMC4zMzYgIDAuNSAtPiAwLjU4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MDYgIHBvd2VyIDAuMDMzNiAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYwNyAgcG93ZXIgMC4zMzcgIDAuNSAtPiAwLjU4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MDggIHBvd2VyIDAuMDMzNyAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYwOSAgcG93ZXIgMC4zMzggIDAuNSAtPiAwLjU4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MTAgIHBvd2VyIDAuMDMzOCAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYxMSAgcG93ZXIgMC4zMzkgIDAuNSAtPiAwLjU4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MTIgIHBvd2VyIDAuMDMzOSAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYxMyAgcG93ZXIgMC4zNDEgIDAuNSAtPiAwLjU4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MTQgIHBvd2VyIDAuMDM0MSAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYxNSAgcG93ZXIgMC4zNDIgIDAuNSAtPiAwLjU4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MTYgIHBvd2VyIDAuMDM0MiAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYxNyAgcG93ZXIgMC4zNDMgIDAuNSAtPiAwLjU4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MTggIHBvd2VyIDAuMDM0MyAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYxOSAgcG93ZXIgMC4zNDQgIDAuNSAtPiAwLjU4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MjAgIHBvd2VyIDAuMDM0NCAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYyMSAgcG93ZXIgMC4zNDUgIDAuNSAtPiAwLjU4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MjIgIHBvd2VyIDAuMDM0NSAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYyMyAgcG93ZXIgMC4zNDYgIDAuNSAtPiAwLjU4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MjQgIHBvd2VyIDAuMDM0NiAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYyNSAgcG93ZXIgMC4zNDcgIDAuNSAtPiAwLjU4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MjYgIHBvd2VyIDAuMDM0NyAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYyNyAgcG93ZXIgMC4zNDggIDAuNSAtPiAwLjU5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MjggIHBvd2VyIDAuMDM0OCAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYyOSAgcG93ZXIgMC4zNDkgIDAuNSAtPiAwLjU5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MzAgIHBvd2VyIDAuMDM0OSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYzMSAgcG93ZXIgMC4zNTEgIDAuNSAtPiAwLjU5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MzIgIHBvd2VyIDAuMDM1MSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYzMyAgcG93ZXIgMC4zNTIgIDAuNSAtPiAwLjU5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MzQgIHBvd2VyIDAuMDM1MiAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYzNSAgcG93ZXIgMC4zNTMgIDAuNSAtPiAwLjU5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MzYgIHBvd2VyIDAuMDM1MyAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYzNyAgcG93ZXIgMC4zNTQgIDAuNSAtPiAwLjU5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MzggIHBvd2VyIDAuMDM1NCAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzYzOSAgcG93ZXIgMC4zNTUgIDAuNSAtPiAwLjU5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NDAgIHBvd2VyIDAuMDM1NSAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY0MSAgcG93ZXIgMC4zNTYgIDAuNSAtPiAwLjU5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NDIgIHBvd2VyIDAuMDM1NiAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY0MyAgcG93ZXIgMC4zNTcgIDAuNSAtPiAwLjU5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NDQgIHBvd2VyIDAuMDM1NyAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY0NSAgcG93ZXIgMC4zNTggIDAuNSAtPiAwLjU5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NDYgIHBvd2VyIDAuMDM1OCAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY0NyAgcG93ZXIgMC4zNTkgIDAuNSAtPiAwLjU5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NDggIHBvd2VyIDAuMDM1OSAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY0OSAgcG93ZXIgMC4zNjEgIDAuNSAtPiAwLjYwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NTAgIHBvd2VyIDAuMDM2MSAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY1MSAgcG93ZXIgMC4zNjIgIDAuNSAtPiAwLjYwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NTIgIHBvd2VyIDAuMDM2MiAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY1MyAgcG93ZXIgMC4zNjMgIDAuNSAtPiAwLjYwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NTQgIHBvd2VyIDAuMDM2MyAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY1NSAgcG93ZXIgMC4zNjQgIDAuNSAtPiAwLjYwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NTYgIHBvd2VyIDAuMDM2NCAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY1NyAgcG93ZXIgMC4zNjUgIDAuNSAtPiAwLjYwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NTggIHBvd2VyIDAuMDM2NSAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY1OSAgcG93ZXIgMC4zNjYgIDAuNSAtPiAwLjYwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NjAgIHBvd2VyIDAuMDM2NiAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY2MSAgcG93ZXIgMC4zNjcgIDAuNSAtPiAwLjYwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NjIgIHBvd2VyIDAuMDM2NyAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY2MyAgcG93ZXIgMC4zNjggIDAuNSAtPiAwLjYwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NjQgIHBvd2VyIDAuMDM2OCAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY2NSAgcG93ZXIgMC4zNjkgIDAuNSAtPiAwLjYwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NjYgIHBvd2VyIDAuMDM2OSAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY2NyAgcG93ZXIgMC4zNzEgIDAuNSAtPiAwLjYwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NjggIHBvd2VyIDAuMDM3MSAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY2OSAgcG93ZXIgMC4zNzIgIDAuNSAtPiAwLjYxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NzAgIHBvd2VyIDAuMDM3MiAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY3MSAgcG93ZXIgMC4zNzMgIDAuNSAtPiAwLjYxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NzIgIHBvd2VyIDAuMDM3MyAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY3MyAgcG93ZXIgMC4zNzQgIDAuNSAtPiAwLjYxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NzQgIHBvd2VyIDAuMDM3NCAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY3NSAgcG93ZXIgMC4zNzUgIDAuNSAtPiAwLjYxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NzYgIHBvd2VyIDAuMDM3NSAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY3NyAgcG93ZXIgMC4zNzYgIDAuNSAtPiAwLjYxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NzggIHBvd2VyIDAuMDM3NiAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY3OSAgcG93ZXIgMC4zNzcgIDAuNSAtPiAwLjYxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2ODAgIHBvd2VyIDAuMDM3NyAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY4MSAgcG93ZXIgMC4zNzggIDAuNSAtPiAwLjYxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2ODIgIHBvd2VyIDAuMDM3OCAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY4MyAgcG93ZXIgMC4zNzkgIDAuNSAtPiAwLjYxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2ODQgIHBvd2VyIDAuMDM3OSAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY4NSAgcG93ZXIgMC4zODEgIDAuNSAtPiAwLjYxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2ODYgIHBvd2VyIDAuMDM4MSAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY4NyAgcG93ZXIgMC4zODIgIDAuNSAtPiAwLjYxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2ODggIHBvd2VyIDAuMDM4MiAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY4OSAgcG93ZXIgMC4zODMgIDAuNSAtPiAwLjYxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2OTAgIHBvd2VyIDAuMDM4MyAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY5MSAgcG93ZXIgMC4zODQgIDAuNSAtPiAwLjYyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2OTIgIHBvd2VyIDAuMDM4NCAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY5MyAgcG93ZXIgMC4zODUgIDAuNSAtPiAwLjYyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2OTQgIHBvd2VyIDAuMDM4NSAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY5NSAgcG93ZXIgMC4zODYgIDAuNSAtPiAwLjYyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2OTYgIHBvd2VyIDAuMDM4NiAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY5NyAgcG93ZXIgMC4zODcgIDAuNSAtPiAwLjYyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2OTggIHBvd2VyIDAuMDM4NyAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzY5OSAgcG93ZXIgMC4zODggIDAuNSAtPiAwLjYyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MDAgIHBvd2VyIDAuMDM4OCAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcwMSAgcG93ZXIgMC4zODkgIDAuNSAtPiAwLjYyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MDIgIHBvd2VyIDAuMDM4OSAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcwMyAgcG93ZXIgMC4zOTEgIDAuNSAtPiAwLjYyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MDQgIHBvd2VyIDAuMDM5MSAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcwNSAgcG93ZXIgMC4zOTIgIDAuNSAtPiAwLjYyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MDYgIHBvd2VyIDAuMDM5MiAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcwNyAgcG93ZXIgMC4zOTMgIDAuNSAtPiAwLjYyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MDggIHBvd2VyIDAuMDM5MyAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcwOSAgcG93ZXIgMC4zOTQgIDAuNSAtPiAwLjYyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MTAgIHBvd2VyIDAuMDM5NCAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcxMSAgcG93ZXIgMC4zOTUgIDAuNSAtPiAwLjYyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MTIgIHBvd2VyIDAuMDM5NSAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcxMyAgcG93ZXIgMC4zOTYgIDAuNSAtPiAwLjYyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MTQgIHBvd2VyIDAuMDM5NiAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcxNSAgcG93ZXIgMC4zOTcgIDAuNSAtPiAwLjYzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MTYgIHBvd2VyIDAuMDM5NyAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcxNyAgcG93ZXIgMC4zOTggIDAuNSAtPiAwLjYzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MTggIHBvd2VyIDAuMDM5OCAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcxOSAgcG93ZXIgMC4zOTkgIDAuNSAtPiAwLjYzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MjAgIHBvd2VyIDAuMDM5OSAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcyMSAgcG93ZXIgMC40MDEgIDAuNSAtPiAwLjYzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MjIgIHBvd2VyIDAuMDQwMSAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcyMyAgcG93ZXIgMC40MDIgIDAuNSAtPiAwLjYzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MjQgIHBvd2VyIDAuMDQwMiAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcyNSAgcG93ZXIgMC40MDMgIDAuNSAtPiAwLjYzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MjYgIHBvd2VyIDAuMDQwMyAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcyNyAgcG93ZXIgMC40MDQgIDAuNSAtPiAwLjYzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MjggIHBvd2VyIDAuMDQwNCAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzcyOSAgcG93ZXIgMC40MDUgIDAuNSAtPiAwLjYzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MzAgIHBvd2VyIDAuMDQwNSAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzczMSAgcG93ZXIgMC40MDYgIDAuNSAtPiAwLjYzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MzIgIHBvd2VyIDAuMDQwNiAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzczMyAgcG93ZXIgMC40MDcgIDAuNSAtPiAwLjYzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MzQgIHBvd2VyIDAuMDQwNyAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzczNSAgcG93ZXIgMC40MDggIDAuNSAtPiAwLjYzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MzYgIHBvd2VyIDAuMDQwOCAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzczNyAgcG93ZXIgMC40MDkgIDAuNSAtPiAwLjY0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MzggIHBvd2VyIDAuMDQwOSAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzczOSAgcG93ZXIgMC40MTEgIDAuNSAtPiAwLjY0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NDAgIHBvd2VyIDAuMDQxMSAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc0MSAgcG93ZXIgMC40MTIgIDAuNSAtPiAwLjY0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NDIgIHBvd2VyIDAuMDQxMiAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc0MyAgcG93ZXIgMC40MTMgIDAuNSAtPiAwLjY0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NDQgIHBvd2VyIDAuMDQxMyAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc0NSAgcG93ZXIgMC40MTQgIDAuNSAtPiAwLjY0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NDYgIHBvd2VyIDAuMDQxNCAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc0NyAgcG93ZXIgMC40MTUgIDAuNSAtPiAwLjY0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NDggIHBvd2VyIDAuMDQxNSAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc0OSAgcG93ZXIgMC40MTYgIDAuNSAtPiAwLjY0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NTAgIHBvd2VyIDAuMDQxNiAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc1MSAgcG93ZXIgMC40MTcgIDAuNSAtPiAwLjY0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NTIgIHBvd2VyIDAuMDQxNyAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc1MyAgcG93ZXIgMC40MTggIDAuNSAtPiAwLjY0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NTQgIHBvd2VyIDAuMDQxOCAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc1NSAgcG93ZXIgMC40MTkgIDAuNSAtPiAwLjY0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NTYgIHBvd2VyIDAuMDQxOSAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc1NyAgcG93ZXIgMC40MjEgIDAuNSAtPiAwLjY0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NTggIHBvd2VyIDAuMDQyMSAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc1OSAgcG93ZXIgMC40MjIgIDAuNSAtPiAwLjY1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NjAgIHBvd2VyIDAuMDQyMiAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc2MSAgcG93ZXIgMC40MjMgIDAuNSAtPiAwLjY1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NjIgIHBvd2VyIDAuMDQyMyAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc2MyAgcG93ZXIgMC40MjQgIDAuNSAtPiAwLjY1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NjQgIHBvd2VyIDAuMDQyNCAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc2NSAgcG93ZXIgMC40MjUgIDAuNSAtPiAwLjY1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NjYgIHBvd2VyIDAuMDQyNSAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc2NyAgcG93ZXIgMC40MjYgIDAuNSAtPiAwLjY1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NjggIHBvd2VyIDAuMDQyNiAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc2OSAgcG93ZXIgMC40MjcgIDAuNSAtPiAwLjY1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NzAgIHBvd2VyIDAuMDQyNyAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc3MSAgcG93ZXIgMC40MjggIDAuNSAtPiAwLjY1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NzIgIHBvd2VyIDAuMDQyOCAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc3MyAgcG93ZXIgMC40MjkgIDAuNSAtPiAwLjY1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NzQgIHBvd2VyIDAuMDQyOSAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc3NSAgcG93ZXIgMC40MzEgIDAuNSAtPiAwLjY1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NzYgIHBvd2VyIDAuMDQzMSAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc3NyAgcG93ZXIgMC40MzIgIDAuNSAtPiAwLjY1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NzggIHBvd2VyIDAuMDQzMiAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc3OSAgcG93ZXIgMC40MzMgIDAuNSAtPiAwLjY1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3ODAgIHBvd2VyIDAuMDQzMyAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc4MSAgcG93ZXIgMC40MzQgIDAuNSAtPiAwLjY1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3ODIgIHBvd2VyIDAuMDQzNCAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc4MyAgcG93ZXIgMC40MzUgIDAuNSAtPiAwLjY2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3ODQgIHBvd2VyIDAuMDQzNSAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc4NSAgcG93ZXIgMC40MzYgIDAuNSAtPiAwLjY2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3ODYgIHBvd2VyIDAuMDQzNiAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc4NyAgcG93ZXIgMC40MzcgIDAuNSAtPiAwLjY2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3ODggIHBvd2VyIDAuMDQzNyAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc4OSAgcG93ZXIgMC40MzggIDAuNSAtPiAwLjY2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3OTAgIHBvd2VyIDAuMDQzOCAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc5MSAgcG93ZXIgMC40MzkgIDAuNSAtPiAwLjY2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3OTIgIHBvd2VyIDAuMDQzOSAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc5MyAgcG93ZXIgMC40NDEgIDAuNSAtPiAwLjY2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3OTQgIHBvd2VyIDAuMDQ0MSAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc5NSAgcG93ZXIgMC40NDIgIDAuNSAtPiAwLjY2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3OTYgIHBvd2VyIDAuMDQ0MiAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc5NyAgcG93ZXIgMC40NDMgIDAuNSAtPiAwLjY2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3OTggIHBvd2VyIDAuMDQ0MyAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzc5OSAgcG93ZXIgMC40NDQgIDAuNSAtPiAwLjY2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MDAgIHBvd2VyIDAuMDQ0NCAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgwMSAgcG93ZXIgMC40NDUgIDAuNSAtPiAwLjY2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MDIgIHBvd2VyIDAuMDQ0NSAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgwMyAgcG93ZXIgMC40NDYgIDAuNSAtPiAwLjY2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MDQgIHBvd2VyIDAuMDQ0NiAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgwNSAgcG93ZXIgMC40NDcgIDAuNSAtPiAwLjY2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MDYgIHBvd2VyIDAuMDQ0NyAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgwNyAgcG93ZXIgMC40NDggIDAuNSAtPiAwLjY2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MDggIHBvd2VyIDAuMDQ0OCAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgwOSAgcG93ZXIgMC40NDkgIDAuNSAtPiAwLjY3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MTAgIHBvd2VyIDAuMDQ0OSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgxMSAgcG93ZXIgMC40NTEgIDAuNSAtPiAwLjY3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MTIgIHBvd2VyIDAuMDQ1MSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgxMyAgcG93ZXIgMC40NTIgIDAuNSAtPiAwLjY3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MTQgIHBvd2VyIDAuMDQ1MiAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgxNSAgcG93ZXIgMC40NTMgIDAuNSAtPiAwLjY3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MTYgIHBvd2VyIDAuMDQ1MyAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgxNyAgcG93ZXIgMC40NTQgIDAuNSAtPiAwLjY3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MTggIHBvd2VyIDAuMDQ1NCAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgxOSAgcG93ZXIgMC40NTUgIDAuNSAtPiAwLjY3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MjAgIHBvd2VyIDAuMDQ1NSAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgyMSAgcG93ZXIgMC40NTYgIDAuNSAtPiAwLjY3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MjIgIHBvd2VyIDAuMDQ1NiAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgyMyAgcG93ZXIgMC40NTcgIDAuNSAtPiAwLjY3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MjQgIHBvd2VyIDAuMDQ1NyAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgyNSAgcG93ZXIgMC40NTggIDAuNSAtPiAwLjY3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MjYgIHBvd2VyIDAuMDQ1OCAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgyNyAgcG93ZXIgMC40NTkgIDAuNSAtPiAwLjY3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MjggIHBvd2VyIDAuMDQ1OSAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgyOSAgcG93ZXIgMC40NjEgIDAuNSAtPiAwLjY3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MzAgIHBvd2VyIDAuMDQ2MSAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgzMSAgcG93ZXIgMC40NjIgIDAuNSAtPiAwLjY4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MzIgIHBvd2VyIDAuMDQ2MiAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgzMyAgcG93ZXIgMC40NjMgIDAuNSAtPiAwLjY4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MzQgIHBvd2VyIDAuMDQ2MyAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgzNSAgcG93ZXIgMC40NjQgIDAuNSAtPiAwLjY4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MzYgIHBvd2VyIDAuMDQ2NCAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgzNyAgcG93ZXIgMC40NjUgIDAuNSAtPiAwLjY4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MzggIHBvd2VyIDAuMDQ2NSAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzgzOSAgcG93ZXIgMC40NjYgIDAuNSAtPiAwLjY4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NDAgIHBvd2VyIDAuMDQ2NiAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg0MSAgcG93ZXIgMC40NjcgIDAuNSAtPiAwLjY4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NDIgIHBvd2VyIDAuMDQ2NyAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg0MyAgcG93ZXIgMC40NjggIDAuNSAtPiAwLjY4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NDQgIHBvd2VyIDAuMDQ2OCAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg0NSAgcG93ZXIgMC40NjkgIDAuNSAtPiAwLjY4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NDYgIHBvd2VyIDAuMDQ2OSAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg0NyAgcG93ZXIgMC40NzEgIDAuNSAtPiAwLjY4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NDggIHBvd2VyIDAuMDQ3MSAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg0OSAgcG93ZXIgMC40NzIgIDAuNSAtPiAwLjY4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NTAgIHBvd2VyIDAuMDQ3MiAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg1MSAgcG93ZXIgMC40NzMgIDAuNSAtPiAwLjY4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NTIgIHBvd2VyIDAuMDQ3MyAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg1MyAgcG93ZXIgMC40NzQgIDAuNSAtPiAwLjY4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NTQgIHBvd2VyIDAuMDQ3NCAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg1NSAgcG93ZXIgMC40NzUgIDAuNSAtPiAwLjY4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NTYgIHBvd2VyIDAuMDQ3NSAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg1NyAgcG93ZXIgMC40NzYgIDAuNSAtPiAwLjY5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NTggIHBvd2VyIDAuMDQ3NiAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg1OSAgcG93ZXIgMC40NzcgIDAuNSAtPiAwLjY5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NjAgIHBvd2VyIDAuMDQ3NyAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg2MSAgcG93ZXIgMC40NzggIDAuNSAtPiAwLjY5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NjIgIHBvd2VyIDAuMDQ3OCAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg2MyAgcG93ZXIgMC40NzkgIDAuNSAtPiAwLjY5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NjQgIHBvd2VyIDAuMDQ3OSAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg2NSAgcG93ZXIgMC40ODEgIDAuNSAtPiAwLjY5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NjYgIHBvd2VyIDAuMDQ4MSAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg2NyAgcG93ZXIgMC40ODIgIDAuNSAtPiAwLjY5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NjggIHBvd2VyIDAuMDQ4MiAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg2OSAgcG93ZXIgMC40ODMgIDAuNSAtPiAwLjY5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NzAgIHBvd2VyIDAuMDQ4MyAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg3MSAgcG93ZXIgMC40ODQgIDAuNSAtPiAwLjY5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NzIgIHBvd2VyIDAuMDQ4NCAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg3MyAgcG93ZXIgMC40ODUgIDAuNSAtPiAwLjY5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NzQgIHBvd2VyIDAuMDQ4NSAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg3NSAgcG93ZXIgMC40ODYgIDAuNSAtPiAwLjY5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NzYgIHBvd2VyIDAuMDQ4NiAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg3NyAgcG93ZXIgMC40ODcgIDAuNSAtPiAwLjY5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NzggIHBvd2VyIDAuMDQ4NyAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg3OSAgcG93ZXIgMC40ODggIDAuNSAtPiAwLjY5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4ODAgIHBvd2VyIDAuMDQ4OCAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg4MSAgcG93ZXIgMC40ODkgIDAuNSAtPiAwLjY5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4ODIgIHBvd2VyIDAuMDQ4OSAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg4MyAgcG93ZXIgMC40OTEgIDAuNSAtPiAwLjcwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4ODQgIHBvd2VyIDAuMDQ5MSAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg4NSAgcG93ZXIgMC40OTIgIDAuNSAtPiAwLjcwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4ODYgIHBvd2VyIDAuMDQ5MiAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg4NyAgcG93ZXIgMC40OTMgIDAuNSAtPiAwLjcwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4ODggIHBvd2VyIDAuMDQ5MyAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg4OSAgcG93ZXIgMC40OTQgIDAuNSAtPiAwLjcwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4OTAgIHBvd2VyIDAuMDQ5NCAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg5MSAgcG93ZXIgMC40OTUgIDAuNSAtPiAwLjcwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4OTIgIHBvd2VyIDAuMDQ5NSAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg5MyAgcG93ZXIgMC40OTYgIDAuNSAtPiAwLjcwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4OTQgIHBvd2VyIDAuMDQ5NiAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg5NSAgcG93ZXIgMC40OTcgIDAuNSAtPiAwLjcwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4OTYgIHBvd2VyIDAuMDQ5NyAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg5NyAgcG93ZXIgMC40OTggIDAuNSAtPiAwLjcwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4OTggIHBvd2VyIDAuMDQ5OCAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzg5OSAgcG93ZXIgMC40OTkgIDAuNSAtPiAwLjcwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MDAgIHBvd2VyIDAuMDQ5OSAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkwMSAgcG93ZXIgMC41MDEgIDAuNSAtPiAwLjcwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MDIgIHBvd2VyIDAuMDUwMSAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkwMyAgcG93ZXIgMC41MDIgIDAuNSAtPiAwLjcwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MDQgIHBvd2VyIDAuMDUwMiAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkwNSAgcG93ZXIgMC41MDMgIDAuNSAtPiAwLjcwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MDYgIHBvd2VyIDAuMDUwMyAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkwNyAgcG93ZXIgMC41MDQgIDAuNSAtPiAwLjcxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MDggIHBvd2VyIDAuMDUwNCAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkwOSAgcG93ZXIgMC41MDUgIDAuNSAtPiAwLjcxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MTAgIHBvd2VyIDAuMDUwNSAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkxMSAgcG93ZXIgMC41MDYgIDAuNSAtPiAwLjcxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MTIgIHBvd2VyIDAuMDUwNiAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkxMyAgcG93ZXIgMC41MDcgIDAuNSAtPiAwLjcxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MTQgIHBvd2VyIDAuMDUwNyAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkxNSAgcG93ZXIgMC41MDggIDAuNSAtPiAwLjcxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MTYgIHBvd2VyIDAuMDUwOCAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkxNyAgcG93ZXIgMC41MDkgIDAuNSAtPiAwLjcxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MTggIHBvd2VyIDAuMDUwOSAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkxOSAgcG93ZXIgMC41MTEgIDAuNSAtPiAwLjcxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MjAgIHBvd2VyIDAuMDUxMSAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkyMSAgcG93ZXIgMC41MTIgIDAuNSAtPiAwLjcxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MjIgIHBvd2VyIDAuMDUxMiAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkyMyAgcG93ZXIgMC41MTMgIDAuNSAtPiAwLjcxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MjQgIHBvd2VyIDAuMDUxMyAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkyNSAgcG93ZXIgMC41MTQgIDAuNSAtPiAwLjcxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MjYgIHBvd2VyIDAuMDUxNCAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkyNyAgcG93ZXIgMC41MTUgIDAuNSAtPiAwLjcxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MjggIHBvd2VyIDAuMDUxNSAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkyOSAgcG93ZXIgMC41MTYgIDAuNSAtPiAwLjcxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MzAgIHBvd2VyIDAuMDUxNiAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkzMSAgcG93ZXIgMC41MTcgIDAuNSAtPiAwLjcxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MzIgIHBvd2VyIDAuMDUxNyAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkzMyAgcG93ZXIgMC41MTggIDAuNSAtPiAwLjcyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MzQgIHBvd2VyIDAuMDUxOCAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkzNSAgcG93ZXIgMC41MTkgIDAuNSAtPiAwLjcyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MzYgIHBvd2VyIDAuMDUxOSAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkzNyAgcG93ZXIgMC41MjEgIDAuNSAtPiAwLjcyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MzggIHBvd2VyIDAuMDUyMSAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzkzOSAgcG93ZXIgMC41MjIgIDAuNSAtPiAwLjcyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NDAgIHBvd2VyIDAuMDUyMiAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk0MSAgcG93ZXIgMC41MjMgIDAuNSAtPiAwLjcyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NDIgIHBvd2VyIDAuMDUyMyAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk0MyAgcG93ZXIgMC41MjQgIDAuNSAtPiAwLjcyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NDQgIHBvd2VyIDAuMDUyNCAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk0NSAgcG93ZXIgMC41MjUgIDAuNSAtPiAwLjcyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NDYgIHBvd2VyIDAuMDUyNSAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk0NyAgcG93ZXIgMC41MjYgIDAuNSAtPiAwLjcyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NDggIHBvd2VyIDAuMDUyNiAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk0OSAgcG93ZXIgMC41MjcgIDAuNSAtPiAwLjcyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NTAgIHBvd2VyIDAuMDUyNyAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk1MSAgcG93ZXIgMC41MjggIDAuNSAtPiAwLjcyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NTIgIHBvd2VyIDAuMDUyOCAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk1MyAgcG93ZXIgMC41MjkgIDAuNSAtPiAwLjcyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NTQgIHBvd2VyIDAuMDUyOSAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk1NSAgcG93ZXIgMC41MzEgIDAuNSAtPiAwLjcyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NTYgIHBvd2VyIDAuMDUzMSAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk1NyAgcG93ZXIgMC41MzIgIDAuNSAtPiAwLjcyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NTggIHBvd2VyIDAuMDUzMiAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk1OSAgcG93ZXIgMC41MzMgIDAuNSAtPiAwLjczMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NjAgIHBvd2VyIDAuMDUzMyAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk2MSAgcG93ZXIgMC41MzQgIDAuNSAtPiAwLjczMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NjIgIHBvd2VyIDAuMDUzNCAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk2MyAgcG93ZXIgMC41MzUgIDAuNSAtPiAwLjczMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NjQgIHBvd2VyIDAuMDUzNSAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk2NSAgcG93ZXIgMC41MzYgIDAuNSAtPiAwLjczMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NjYgIHBvd2VyIDAuMDUzNiAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk2NyAgcG93ZXIgMC41MzcgIDAuNSAtPiAwLjczMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NjggIHBvd2VyIDAuMDUzNyAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk2OSAgcG93ZXIgMC41MzggIDAuNSAtPiAwLjczMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NzAgIHBvd2VyIDAuMDUzOCAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk3MSAgcG93ZXIgMC41MzkgIDAuNSAtPiAwLjczNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NzIgIHBvd2VyIDAuMDUzOSAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk3MyAgcG93ZXIgMC41NDEgIDAuNSAtPiAwLjczNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NzQgIHBvd2VyIDAuMDU0MSAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk3NSAgcG93ZXIgMC41NDIgIDAuNSAtPiAwLjczNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NzYgIHBvd2VyIDAuMDU0MiAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk3NyAgcG93ZXIgMC41NDMgIDAuNSAtPiAwLjczNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NzggIHBvd2VyIDAuMDU0MyAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk3OSAgcG93ZXIgMC41NDQgIDAuNSAtPiAwLjczOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5ODAgIHBvd2VyIDAuMDU0NCAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk4MSAgcG93ZXIgMC41NDUgIDAuNSAtPiAwLjczOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5ODIgIHBvd2VyIDAuMDU0NSAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk4MyAgcG93ZXIgMC41NDYgIDAuNSAtPiAwLjczOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5ODQgIHBvd2VyIDAuMDU0NiAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk4NSAgcG93ZXIgMC41NDcgIDAuNSAtPiAwLjc0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5ODYgIHBvd2VyIDAuMDU0NyAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk4NyAgcG93ZXIgMC41NDggIDAuNSAtPiAwLjc0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5ODggIHBvd2VyIDAuMDU0OCAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk4OSAgcG93ZXIgMC41NDkgIDAuNSAtPiAwLjc0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5OTAgIHBvd2VyIDAuMDU0OSAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk5MSAgcG93ZXIgMC41NTEgIDAuNSAtPiAwLjc0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5OTIgIHBvd2VyIDAuMDU1MSAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk5MyAgcG93ZXIgMC41NTIgIDAuNSAtPiAwLjc0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5OTQgIHBvd2VyIDAuMDU1MiAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk5NSAgcG93ZXIgMC41NTMgIDAuNSAtPiAwLjc0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5OTYgIHBvd2VyIDAuMDU1MyAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk5NyAgcG93ZXIgMC41NTQgIDAuNSAtPiAwLjc0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5OTggIHBvd2VyIDAuMDU1NCAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mzk5OSAgcG93ZXIgMC41NTUgIDAuNSAtPiAwLjc0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMDAgIHBvd2VyIDAuMDU1NSAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAwMSAgcG93ZXIgMC41NTYgIDAuNSAtPiAwLjc0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMDIgIHBvd2VyIDAuMDU1NiAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAwMyAgcG93ZXIgMC41NTcgIDAuNSAtPiAwLjc0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMDQgIHBvd2VyIDAuMDU1NyAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAwNSAgcG93ZXIgMC41NTggIDAuNSAtPiAwLjc0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMDYgIHBvd2VyIDAuMDU1OCAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAwNyAgcG93ZXIgMC41NTkgIDAuNSAtPiAwLjc0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMDggIHBvd2VyIDAuMDU1OSAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAwOSAgcG93ZXIgMC41NjEgIDAuNSAtPiAwLjc0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMTAgIHBvd2VyIDAuMDU2MSAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAxMSAgcG93ZXIgMC41NjIgIDAuNSAtPiAwLjc1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMTIgIHBvd2VyIDAuMDU2MiAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAxMyAgcG93ZXIgMC41NjMgIDAuNSAtPiAwLjc1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMTQgIHBvd2VyIDAuMDU2MyAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAxNSAgcG93ZXIgMC41NjQgIDAuNSAtPiAwLjc1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMTYgIHBvd2VyIDAuMDU2NCAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAxNyAgcG93ZXIgMC41NjUgIDAuNSAtPiAwLjc1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMTggIHBvd2VyIDAuMDU2NSAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAxOSAgcG93ZXIgMC41NjYgIDAuNSAtPiAwLjc1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMjAgIHBvd2VyIDAuMDU2NiAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAyMSAgcG93ZXIgMC41NjcgIDAuNSAtPiAwLjc1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMjIgIHBvd2VyIDAuMDU2NyAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAyMyAgcG93ZXIgMC41NjggIDAuNSAtPiAwLjc1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMjQgIHBvd2VyIDAuMDU2OCAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAyNSAgcG93ZXIgMC41NjkgIDAuNSAtPiAwLjc1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMjYgIHBvd2VyIDAuMDU2OSAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAyNyAgcG93ZXIgMC41NzEgIDAuNSAtPiAwLjc1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMjggIHBvd2VyIDAuMDU3MSAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAyOSAgcG93ZXIgMC41NzIgIDAuNSAtPiAwLjc1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMzAgIHBvd2VyIDAuMDU3MiAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAzMSAgcG93ZXIgMC41NzMgIDAuNSAtPiAwLjc1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMzIgIHBvd2VyIDAuMDU3MyAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAzMyAgcG93ZXIgMC41NzQgIDAuNSAtPiAwLjc1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMzQgIHBvd2VyIDAuMDU3NCAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAzNSAgcG93ZXIgMC41NzUgIDAuNSAtPiAwLjc1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMzYgIHBvd2VyIDAuMDU3NSAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAzNyAgcG93ZXIgMC41NzYgIDAuNSAtPiAwLjc1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMzggIHBvd2VyIDAuMDU3NiAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDAzOSAgcG93ZXIgMC41NzcgIDAuNSAtPiAwLjc2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNDAgIHBvd2VyIDAuMDU3NyAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA0MSAgcG93ZXIgMC41NzggIDAuNSAtPiAwLjc2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNDIgIHBvd2VyIDAuMDU3OCAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA0MyAgcG93ZXIgMC41NzkgIDAuNSAtPiAwLjc2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNDQgIHBvd2VyIDAuMDU3OSAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA0NSAgcG93ZXIgMC41ODEgIDAuNSAtPiAwLjc2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNDYgIHBvd2VyIDAuMDU4MSAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA0NyAgcG93ZXIgMC41ODIgIDAuNSAtPiAwLjc2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNDggIHBvd2VyIDAuMDU4MiAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA0OSAgcG93ZXIgMC41ODMgIDAuNSAtPiAwLjc2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNTAgIHBvd2VyIDAuMDU4MyAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA1MSAgcG93ZXIgMC41ODQgIDAuNSAtPiAwLjc2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNTIgIHBvd2VyIDAuMDU4NCAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA1MyAgcG93ZXIgMC41ODUgIDAuNSAtPiAwLjc2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNTQgIHBvd2VyIDAuMDU4NSAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA1NSAgcG93ZXIgMC41ODYgIDAuNSAtPiAwLjc2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNTYgIHBvd2VyIDAuMDU4NiAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA1NyAgcG93ZXIgMC41ODcgIDAuNSAtPiAwLjc2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNTggIHBvd2VyIDAuMDU4NyAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA1OSAgcG93ZXIgMC41ODggIDAuNSAtPiAwLjc2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNjAgIHBvd2VyIDAuMDU4OCAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA2MSAgcG93ZXIgMC41ODkgIDAuNSAtPiAwLjc2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNjIgIHBvd2VyIDAuMDU4OSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA2MyAgcG93ZXIgMC41OTEgIDAuNSAtPiAwLjc2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNjQgIHBvd2VyIDAuMDU5MSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA2NSAgcG93ZXIgMC41OTIgIDAuNSAtPiAwLjc2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNjYgIHBvd2VyIDAuMDU5MiAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA2NyAgcG93ZXIgMC41OTMgIDAuNSAtPiAwLjc3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNjggIHBvd2VyIDAuMDU5MyAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA2OSAgcG93ZXIgMC41OTQgIDAuNSAtPiAwLjc3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNzAgIHBvd2VyIDAuMDU5NCAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA3MSAgcG93ZXIgMC41OTUgIDAuNSAtPiAwLjc3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNzIgIHBvd2VyIDAuMDU5NSAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA3MyAgcG93ZXIgMC41OTYgIDAuNSAtPiAwLjc3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNzQgIHBvd2VyIDAuMDU5NiAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA3NSAgcG93ZXIgMC41OTcgIDAuNSAtPiAwLjc3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNzYgIHBvd2VyIDAuMDU5NyAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA3NyAgcG93ZXIgMC41OTggIDAuNSAtPiAwLjc3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNzggIHBvd2VyIDAuMDU5OCAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA3OSAgcG93ZXIgMC41OTkgIDAuNSAtPiAwLjc3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwODAgIHBvd2VyIDAuMDU5OSAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA4MSAgcG93ZXIgMC42MDEgIDAuNSAtPiAwLjc3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwODIgIHBvd2VyIDAuMDYwMSAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA4MyAgcG93ZXIgMC42MDIgIDAuNSAtPiAwLjc3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwODQgIHBvd2VyIDAuMDYwMiAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA4NSAgcG93ZXIgMC42MDMgIDAuNSAtPiAwLjc3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwODYgIHBvd2VyIDAuMDYwMyAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA4NyAgcG93ZXIgMC42MDQgIDAuNSAtPiAwLjc3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwODggIHBvd2VyIDAuMDYwNCAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA4OSAgcG93ZXIgMC42MDUgIDAuNSAtPiAwLjc3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwOTAgIHBvd2VyIDAuMDYwNSAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA5MSAgcG93ZXIgMC42MDYgIDAuNSAtPiAwLjc3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwOTIgIHBvd2VyIDAuMDYwNiAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA5MyAgcG93ZXIgMC42MDcgIDAuNSAtPiAwLjc3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwOTQgIHBvd2VyIDAuMDYwNyAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA5NSAgcG93ZXIgMC42MDggIDAuNSAtPiAwLjc4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwOTYgIHBvd2VyIDAuMDYwOCAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA5NyAgcG93ZXIgMC42MDkgIDAuNSAtPiAwLjc4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwOTggIHBvd2VyIDAuMDYwOSAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDA5OSAgcG93ZXIgMC42MTEgIDAuNSAtPiAwLjc4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMDAgIHBvd2VyIDAuMDYxMSAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEwMSAgcG93ZXIgMC42MTIgIDAuNSAtPiAwLjc4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMDIgIHBvd2VyIDAuMDYxMiAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEwMyAgcG93ZXIgMC42MTMgIDAuNSAtPiAwLjc4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMDQgIHBvd2VyIDAuMDYxMyAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEwNSAgcG93ZXIgMC42MTQgIDAuNSAtPiAwLjc4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMDYgIHBvd2VyIDAuMDYxNCAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEwNyAgcG93ZXIgMC42MTUgIDAuNSAtPiAwLjc4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMDggIHBvd2VyIDAuMDYxNSAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEwOSAgcG93ZXIgMC42MTYgIDAuNSAtPiAwLjc4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMTAgIHBvd2VyIDAuMDYxNiAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDExMSAgcG93ZXIgMC42MTcgIDAuNSAtPiAwLjc4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMTIgIHBvd2VyIDAuMDYxNyAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDExMyAgcG93ZXIgMC42MTggIDAuNSAtPiAwLjc4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMTQgIHBvd2VyIDAuMDYxOCAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDExNSAgcG93ZXIgMC42MTkgIDAuNSAtPiAwLjc4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMTYgIHBvd2VyIDAuMDYxOSAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDExNyAgcG93ZXIgMC42MjEgIDAuNSAtPiAwLjc4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMTggIHBvd2VyIDAuMDYyMSAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDExOSAgcG93ZXIgMC42MjIgIDAuNSAtPiAwLjc4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMjAgIHBvd2VyIDAuMDYyMiAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEyMSAgcG93ZXIgMC42MjMgIDAuNSAtPiAwLjc4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMjIgIHBvd2VyIDAuMDYyMyAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEyMyAgcG93ZXIgMC42MjQgIDAuNSAtPiAwLjc5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMjQgIHBvd2VyIDAuMDYyNCAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEyNSAgcG93ZXIgMC42MjUgIDAuNSAtPiAwLjc5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMjYgIHBvd2VyIDAuMDYyNSAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEyNyAgcG93ZXIgMC42MjYgIDAuNSAtPiAwLjc5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMjggIHBvd2VyIDAuMDYyNiAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEyOSAgcG93ZXIgMC42MjcgIDAuNSAtPiAwLjc5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMzAgIHBvd2VyIDAuMDYyNyAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEzMSAgcG93ZXIgMC42MjggIDAuNSAtPiAwLjc5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMzIgIHBvd2VyIDAuMDYyOCAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEzMyAgcG93ZXIgMC42MjkgIDAuNSAtPiAwLjc5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMzQgIHBvd2VyIDAuMDYyOSAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEzNSAgcG93ZXIgMC42MzEgIDAuNSAtPiAwLjc5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMzYgIHBvd2VyIDAuMDYzMSAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEzNyAgcG93ZXIgMC42MzIgIDAuNSAtPiAwLjc5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMzggIHBvd2VyIDAuMDYzMiAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDEzOSAgcG93ZXIgMC42MzMgIDAuNSAtPiAwLjc5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNDAgIHBvd2VyIDAuMDYzMyAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE0MSAgcG93ZXIgMC42MzQgIDAuNSAtPiAwLjc5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNDIgIHBvd2VyIDAuMDYzNCAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE0MyAgcG93ZXIgMC42MzUgIDAuNSAtPiAwLjc5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNDQgIHBvd2VyIDAuMDYzNSAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE0NSAgcG93ZXIgMC42MzYgIDAuNSAtPiAwLjc5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNDYgIHBvd2VyIDAuMDYzNiAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE0NyAgcG93ZXIgMC42MzcgIDAuNSAtPiAwLjc5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNDggIHBvd2VyIDAuMDYzNyAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE0OSAgcG93ZXIgMC42MzggIDAuNSAtPiAwLjc5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNTAgIHBvd2VyIDAuMDYzOCAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE1MSAgcG93ZXIgMC42MzkgIDAuNSAtPiAwLjc5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNTIgIHBvd2VyIDAuMDYzOSAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE1MyAgcG93ZXIgMC42NDEgIDAuNSAtPiAwLjgwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNTQgIHBvd2VyIDAuMDY0MSAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE1NSAgcG93ZXIgMC42NDIgIDAuNSAtPiAwLjgwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNTYgIHBvd2VyIDAuMDY0MiAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE1NyAgcG93ZXIgMC42NDMgIDAuNSAtPiAwLjgwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNTggIHBvd2VyIDAuMDY0MyAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE1OSAgcG93ZXIgMC42NDQgIDAuNSAtPiAwLjgwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNjAgIHBvd2VyIDAuMDY0NCAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE2MSAgcG93ZXIgMC42NDUgIDAuNSAtPiAwLjgwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNjIgIHBvd2VyIDAuMDY0NSAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE2MyAgcG93ZXIgMC42NDYgIDAuNSAtPiAwLjgwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNjQgIHBvd2VyIDAuMDY0NiAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE2NSAgcG93ZXIgMC42NDcgIDAuNSAtPiAwLjgwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNjYgIHBvd2VyIDAuMDY0NyAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE2NyAgcG93ZXIgMC42NDggIDAuNSAtPiAwLjgwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNjggIHBvd2VyIDAuMDY0OCAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE2OSAgcG93ZXIgMC42NDkgIDAuNSAtPiAwLjgwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNzAgIHBvd2VyIDAuMDY0OSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE3MSAgcG93ZXIgMC42NTEgIDAuNSAtPiAwLjgwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNzIgIHBvd2VyIDAuMDY1MSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE3MyAgcG93ZXIgMC42NTIgIDAuNSAtPiAwLjgwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNzQgIHBvd2VyIDAuMDY1MiAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE3NSAgcG93ZXIgMC42NTMgIDAuNSAtPiAwLjgwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNzYgIHBvd2VyIDAuMDY1MyAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE3NyAgcG93ZXIgMC42NTQgIDAuNSAtPiAwLjgwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNzggIHBvd2VyIDAuMDY1NCAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE3OSAgcG93ZXIgMC42NTUgIDAuNSAtPiAwLjgwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxODAgIHBvd2VyIDAuMDY1NSAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE4MSAgcG93ZXIgMC42NTYgIDAuNSAtPiAwLjgxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxODIgIHBvd2VyIDAuMDY1NiAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE4MyAgcG93ZXIgMC42NTcgIDAuNSAtPiAwLjgxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxODQgIHBvd2VyIDAuMDY1NyAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE4NSAgcG93ZXIgMC42NTggIDAuNSAtPiAwLjgxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxODYgIHBvd2VyIDAuMDY1OCAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE4NyAgcG93ZXIgMC42NTkgIDAuNSAtPiAwLjgxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxODggIHBvd2VyIDAuMDY1OSAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE4OSAgcG93ZXIgMC42NjEgIDAuNSAtPiAwLjgxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxOTAgIHBvd2VyIDAuMDY2MSAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE5MSAgcG93ZXIgMC42NjIgIDAuNSAtPiAwLjgxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxOTIgIHBvd2VyIDAuMDY2MiAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE5MyAgcG93ZXIgMC42NjMgIDAuNSAtPiAwLjgxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxOTQgIHBvd2VyIDAuMDY2MyAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE5NSAgcG93ZXIgMC42NjQgIDAuNSAtPiAwLjgxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxOTYgIHBvd2VyIDAuMDY2NCAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE5NyAgcG93ZXIgMC42NjUgIDAuNSAtPiAwLjgxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxOTggIHBvd2VyIDAuMDY2NSAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDE5OSAgcG93ZXIgMC42NjYgIDAuNSAtPiAwLjgxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMDAgIHBvd2VyIDAuMDY2NiAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIwMSAgcG93ZXIgMC42NjcgIDAuNSAtPiAwLjgxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMDIgIHBvd2VyIDAuMDY2NyAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIwMyAgcG93ZXIgMC42NjggIDAuNSAtPiAwLjgxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMDQgIHBvd2VyIDAuMDY2OCAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIwNSAgcG93ZXIgMC42NjkgIDAuNSAtPiAwLjgxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMDYgIHBvd2VyIDAuMDY2OSAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIwNyAgcG93ZXIgMC42NzEgIDAuNSAtPiAwLjgxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMDggIHBvd2VyIDAuMDY3MSAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIwOSAgcG93ZXIgMC42NzIgIDAuNSAtPiAwLjgyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMTAgIHBvd2VyIDAuMDY3MiAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIxMSAgcG93ZXIgMC42NzMgIDAuNSAtPiAwLjgyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMTIgIHBvd2VyIDAuMDY3MyAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIxMyAgcG93ZXIgMC42NzQgIDAuNSAtPiAwLjgyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMTQgIHBvd2VyIDAuMDY3NCAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIxNSAgcG93ZXIgMC42NzUgIDAuNSAtPiAwLjgyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMTYgIHBvd2VyIDAuMDY3NSAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIxNyAgcG93ZXIgMC42NzYgIDAuNSAtPiAwLjgyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMTggIHBvd2VyIDAuMDY3NiAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIxOSAgcG93ZXIgMC42NzcgIDAuNSAtPiAwLjgyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMjAgIHBvd2VyIDAuMDY3NyAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIyMSAgcG93ZXIgMC42NzggIDAuNSAtPiAwLjgyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMjIgIHBvd2VyIDAuMDY3OCAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIyMyAgcG93ZXIgMC42NzkgIDAuNSAtPiAwLjgyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMjQgIHBvd2VyIDAuMDY3OSAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIyNSAgcG93ZXIgMC42ODEgIDAuNSAtPiAwLjgyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMjYgIHBvd2VyIDAuMDY4MSAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIyNyAgcG93ZXIgMC42ODIgIDAuNSAtPiAwLjgyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMjggIHBvd2VyIDAuMDY4MiAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIyOSAgcG93ZXIgMC42ODMgIDAuNSAtPiAwLjgyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMzAgIHBvd2VyIDAuMDY4MyAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIzMSAgcG93ZXIgMC42ODQgIDAuNSAtPiAwLjgyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMzIgIHBvd2VyIDAuMDY4NCAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIzMyAgcG93ZXIgMC42ODUgIDAuNSAtPiAwLjgyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMzQgIHBvd2VyIDAuMDY4NSAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIzNSAgcG93ZXIgMC42ODYgIDAuNSAtPiAwLjgyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMzYgIHBvd2VyIDAuMDY4NiAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIzNyAgcG93ZXIgMC42ODcgIDAuNSAtPiAwLjgyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMzggIHBvd2VyIDAuMDY4NyAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDIzOSAgcG93ZXIgMC42ODggIDAuNSAtPiAwLjgyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNDAgIHBvd2VyIDAuMDY4OCAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI0MSAgcG93ZXIgMC42ODkgIDAuNSAtPiAwLjgzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNDIgIHBvd2VyIDAuMDY4OSAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI0MyAgcG93ZXIgMC42OTEgIDAuNSAtPiAwLjgzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNDQgIHBvd2VyIDAuMDY5MSAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI0NSAgcG93ZXIgMC42OTIgIDAuNSAtPiAwLjgzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNDYgIHBvd2VyIDAuMDY5MiAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI0NyAgcG93ZXIgMC42OTMgIDAuNSAtPiAwLjgzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNDggIHBvd2VyIDAuMDY5MyAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI0OSAgcG93ZXIgMC42OTQgIDAuNSAtPiAwLjgzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNTAgIHBvd2VyIDAuMDY5NCAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI1MSAgcG93ZXIgMC42OTUgIDAuNSAtPiAwLjgzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNTIgIHBvd2VyIDAuMDY5NSAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI1MyAgcG93ZXIgMC42OTYgIDAuNSAtPiAwLjgzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNTQgIHBvd2VyIDAuMDY5NiAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI1NSAgcG93ZXIgMC42OTcgIDAuNSAtPiAwLjgzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNTYgIHBvd2VyIDAuMDY5NyAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI1NyAgcG93ZXIgMC42OTggIDAuNSAtPiAwLjgzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNTggIHBvd2VyIDAuMDY5OCAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI1OSAgcG93ZXIgMC42OTkgIDAuNSAtPiAwLjgzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNjAgIHBvd2VyIDAuMDY5OSAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI2MSAgcG93ZXIgMC43MDEgIDAuNSAtPiAwLjgzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNjIgIHBvd2VyIDAuMDcwMSAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI2MyAgcG93ZXIgMC43MDIgIDAuNSAtPiAwLjgzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNjQgIHBvd2VyIDAuMDcwMiAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI2NSAgcG93ZXIgMC43MDMgIDAuNSAtPiAwLjgzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNjYgIHBvd2VyIDAuMDcwMyAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI2NyAgcG93ZXIgMC43MDQgIDAuNSAtPiAwLjgzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNjggIHBvd2VyIDAuMDcwNCAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI2OSAgcG93ZXIgMC43MDUgIDAuNSAtPiAwLjg0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNzAgIHBvd2VyIDAuMDcwNSAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI3MSAgcG93ZXIgMC43MDYgIDAuNSAtPiAwLjg0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNzIgIHBvd2VyIDAuMDcwNiAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI3MyAgcG93ZXIgMC43MDcgIDAuNSAtPiAwLjg0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNzQgIHBvd2VyIDAuMDcwNyAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI3NSAgcG93ZXIgMC43MDggIDAuNSAtPiAwLjg0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNzYgIHBvd2VyIDAuMDcwOCAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI3NyAgcG93ZXIgMC43MDkgIDAuNSAtPiAwLjg0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNzggIHBvd2VyIDAuMDcwOSAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI3OSAgcG93ZXIgMC43MTEgIDAuNSAtPiAwLjg0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyODAgIHBvd2VyIDAuMDcxMSAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI4MSAgcG93ZXIgMC43MTIgIDAuNSAtPiAwLjg0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyODIgIHBvd2VyIDAuMDcxMiAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI4MyAgcG93ZXIgMC43MTMgIDAuNSAtPiAwLjg0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyODQgIHBvd2VyIDAuMDcxMyAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI4NSAgcG93ZXIgMC43MTQgIDAuNSAtPiAwLjg0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyODYgIHBvd2VyIDAuMDcxNCAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI4NyAgcG93ZXIgMC43MTUgIDAuNSAtPiAwLjg0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyODggIHBvd2VyIDAuMDcxNSAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI4OSAgcG93ZXIgMC43MTYgIDAuNSAtPiAwLjg0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyOTAgIHBvd2VyIDAuMDcxNiAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI5MSAgcG93ZXIgMC43MTcgIDAuNSAtPiAwLjg0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyOTIgIHBvd2VyIDAuMDcxNyAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI5MyAgcG93ZXIgMC43MTggIDAuNSAtPiAwLjg0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyOTQgIHBvd2VyIDAuMDcxOCAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI5NSAgcG93ZXIgMC43MTkgIDAuNSAtPiAwLjg0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyOTYgIHBvd2VyIDAuMDcxOSAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI5NyAgcG93ZXIgMC43MjEgIDAuNSAtPiAwLjg0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyOTggIHBvd2VyIDAuMDcyMSAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDI5OSAgcG93ZXIgMC43MjIgIDAuNSAtPiAwLjg1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMDAgIHBvd2VyIDAuMDcyMiAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMwMSAgcG93ZXIgMC43MjMgIDAuNSAtPiAwLjg1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMDIgIHBvd2VyIDAuMDcyMyAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMwMyAgcG93ZXIgMC43MjQgIDAuNSAtPiAwLjg1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMDQgIHBvd2VyIDAuMDcyNCAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMwNSAgcG93ZXIgMC43MjUgIDAuNSAtPiAwLjg1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMDYgIHBvd2VyIDAuMDcyNSAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMwNyAgcG93ZXIgMC43MjYgIDAuNSAtPiAwLjg1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMDggIHBvd2VyIDAuMDcyNiAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMwOSAgcG93ZXIgMC43MjcgIDAuNSAtPiAwLjg1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMTAgIHBvd2VyIDAuMDcyNyAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMxMSAgcG93ZXIgMC43MjggIDAuNSAtPiAwLjg1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMTIgIHBvd2VyIDAuMDcyOCAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMxMyAgcG93ZXIgMC43MjkgIDAuNSAtPiAwLjg1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMTQgIHBvd2VyIDAuMDcyOSAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMxNSAgcG93ZXIgMC43MzEgIDAuNSAtPiAwLjg1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMTYgIHBvd2VyIDAuMDczMSAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMxNyAgcG93ZXIgMC43MzIgIDAuNSAtPiAwLjg1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMTggIHBvd2VyIDAuMDczMiAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMxOSAgcG93ZXIgMC43MzMgIDAuNSAtPiAwLjg1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMjAgIHBvd2VyIDAuMDczMyAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMyMSAgcG93ZXIgMC43MzQgIDAuNSAtPiAwLjg1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMjIgIHBvd2VyIDAuMDczNCAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMyMyAgcG93ZXIgMC43MzUgIDAuNSAtPiAwLjg1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMjQgIHBvd2VyIDAuMDczNSAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMyNSAgcG93ZXIgMC43MzYgIDAuNSAtPiAwLjg1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMjYgIHBvd2VyIDAuMDczNiAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMyNyAgcG93ZXIgMC43MzcgIDAuNSAtPiAwLjg1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMjggIHBvd2VyIDAuMDczNyAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMyOSAgcG93ZXIgMC43MzggIDAuNSAtPiAwLjg1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMzAgIHBvd2VyIDAuMDczOCAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMzMSAgcG93ZXIgMC43MzkgIDAuNSAtPiAwLjg2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMzIgIHBvd2VyIDAuMDczOSAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMzMyAgcG93ZXIgMC43NDEgIDAuNSAtPiAwLjg2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMzQgIHBvd2VyIDAuMDc0MSAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMzNSAgcG93ZXIgMC43NDIgIDAuNSAtPiAwLjg2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMzYgIHBvd2VyIDAuMDc0MiAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMzNyAgcG93ZXIgMC43NDMgIDAuNSAtPiAwLjg2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMzggIHBvd2VyIDAuMDc0MyAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDMzOSAgcG93ZXIgMC43NDQgIDAuNSAtPiAwLjg2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNDAgIHBvd2VyIDAuMDc0NCAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM0MSAgcG93ZXIgMC43NDUgIDAuNSAtPiAwLjg2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNDIgIHBvd2VyIDAuMDc0NSAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM0MyAgcG93ZXIgMC43NDYgIDAuNSAtPiAwLjg2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNDQgIHBvd2VyIDAuMDc0NiAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM0NSAgcG93ZXIgMC43NDcgIDAuNSAtPiAwLjg2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNDYgIHBvd2VyIDAuMDc0NyAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM0NyAgcG93ZXIgMC43NDggIDAuNSAtPiAwLjg2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNDggIHBvd2VyIDAuMDc0OCAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM0OSAgcG93ZXIgMC43NDkgIDAuNSAtPiAwLjg2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNTAgIHBvd2VyIDAuMDc0OSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM1MSAgcG93ZXIgMC43NTEgIDAuNSAtPiAwLjg2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNTIgIHBvd2VyIDAuMDc1MSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM1MyAgcG93ZXIgMC43NTIgIDAuNSAtPiAwLjg2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNTQgIHBvd2VyIDAuMDc1MiAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM1NSAgcG93ZXIgMC43NTMgIDAuNSAtPiAwLjg2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNTYgIHBvd2VyIDAuMDc1MyAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM1NyAgcG93ZXIgMC43NTQgIDAuNSAtPiAwLjg2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNTggIHBvd2VyIDAuMDc1NCAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM1OSAgcG93ZXIgMC43NTUgIDAuNSAtPiAwLjg2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNjAgIHBvd2VyIDAuMDc1NSAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM2MSAgcG93ZXIgMC43NTYgIDAuNSAtPiAwLjg2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNjIgIHBvd2VyIDAuMDc1NiAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM2MyAgcG93ZXIgMC43NTcgIDAuNSAtPiAwLjg3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNjQgIHBvd2VyIDAuMDc1NyAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM2NSAgcG93ZXIgMC43NTggIDAuNSAtPiAwLjg3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNjYgIHBvd2VyIDAuMDc1OCAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM2NyAgcG93ZXIgMC43NTkgIDAuNSAtPiAwLjg3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNjggIHBvd2VyIDAuMDc1OSAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM2OSAgcG93ZXIgMC43NjEgIDAuNSAtPiAwLjg3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNzAgIHBvd2VyIDAuMDc2MSAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM3MSAgcG93ZXIgMC43NjIgIDAuNSAtPiAwLjg3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNzIgIHBvd2VyIDAuMDc2MiAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM3MyAgcG93ZXIgMC43NjMgIDAuNSAtPiAwLjg3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNzQgIHBvd2VyIDAuMDc2MyAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM3NSAgcG93ZXIgMC43NjQgIDAuNSAtPiAwLjg3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNzYgIHBvd2VyIDAuMDc2NCAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM3NyAgcG93ZXIgMC43NjUgIDAuNSAtPiAwLjg3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNzggIHBvd2VyIDAuMDc2NSAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM3OSAgcG93ZXIgMC43NjYgIDAuNSAtPiAwLjg3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzODAgIHBvd2VyIDAuMDc2NiAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM4MSAgcG93ZXIgMC43NjcgIDAuNSAtPiAwLjg3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzODIgIHBvd2VyIDAuMDc2NyAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM4MyAgcG93ZXIgMC43NjggIDAuNSAtPiAwLjg3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzODQgIHBvd2VyIDAuMDc2OCAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM4NSAgcG93ZXIgMC43NjkgIDAuNSAtPiAwLjg3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzODYgIHBvd2VyIDAuMDc2OSAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM4NyAgcG93ZXIgMC43NzEgIDAuNSAtPiAwLjg3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzODggIHBvd2VyIDAuMDc3MSAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM4OSAgcG93ZXIgMC43NzIgIDAuNSAtPiAwLjg3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzOTAgIHBvd2VyIDAuMDc3MiAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM5MSAgcG93ZXIgMC43NzMgIDAuNSAtPiAwLjg3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzOTIgIHBvd2VyIDAuMDc3MyAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM5MyAgcG93ZXIgMC43NzQgIDAuNSAtPiAwLjg4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzOTQgIHBvd2VyIDAuMDc3NCAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM5NSAgcG93ZXIgMC43NzUgIDAuNSAtPiAwLjg4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzOTYgIHBvd2VyIDAuMDc3NSAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM5NyAgcG93ZXIgMC43NzYgIDAuNSAtPiAwLjg4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzOTggIHBvd2VyIDAuMDc3NiAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDM5OSAgcG93ZXIgMC43NzcgIDAuNSAtPiAwLjg4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MDAgIHBvd2VyIDAuMDc3NyAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQwMSAgcG93ZXIgMC43NzggIDAuNSAtPiAwLjg4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MDIgIHBvd2VyIDAuMDc3OCAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQwMyAgcG93ZXIgMC43NzkgIDAuNSAtPiAwLjg4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MDQgIHBvd2VyIDAuMDc3OSAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQwNSAgcG93ZXIgMC43ODEgIDAuNSAtPiAwLjg4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MDYgIHBvd2VyIDAuMDc4MSAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQwNyAgcG93ZXIgMC43ODIgIDAuNSAtPiAwLjg4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MDggIHBvd2VyIDAuMDc4MiAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQwOSAgcG93ZXIgMC43ODMgIDAuNSAtPiAwLjg4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MTAgIHBvd2VyIDAuMDc4MyAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQxMSAgcG93ZXIgMC43ODQgIDAuNSAtPiAwLjg4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MTIgIHBvd2VyIDAuMDc4NCAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQxMyAgcG93ZXIgMC43ODUgIDAuNSAtPiAwLjg4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MTQgIHBvd2VyIDAuMDc4NSAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQxNSAgcG93ZXIgMC43ODYgIDAuNSAtPiAwLjg4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MTYgIHBvd2VyIDAuMDc4NiAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQxNyAgcG93ZXIgMC43ODcgIDAuNSAtPiAwLjg4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MTggIHBvd2VyIDAuMDc4NyAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQxOSAgcG93ZXIgMC43ODggIDAuNSAtPiAwLjg4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MjAgIHBvd2VyIDAuMDc4OCAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQyMSAgcG93ZXIgMC43ODkgIDAuNSAtPiAwLjg4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MjIgIHBvd2VyIDAuMDc4OSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQyMyAgcG93ZXIgMC43OTEgIDAuNSAtPiAwLjg4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MjQgIHBvd2VyIDAuMDc5MSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQyNSAgcG93ZXIgMC43OTIgIDAuNSAtPiAwLjg5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MjYgIHBvd2VyIDAuMDc5MiAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQyNyAgcG93ZXIgMC43OTMgIDAuNSAtPiAwLjg5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MjggIHBvd2VyIDAuMDc5MyAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQyOSAgcG93ZXIgMC43OTQgIDAuNSAtPiAwLjg5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MzAgIHBvd2VyIDAuMDc5NCAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQzMSAgcG93ZXIgMC43OTUgIDAuNSAtPiAwLjg5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MzIgIHBvd2VyIDAuMDc5NSAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQzMyAgcG93ZXIgMC43OTYgIDAuNSAtPiAwLjg5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MzQgIHBvd2VyIDAuMDc5NiAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQzNSAgcG93ZXIgMC43OTcgIDAuNSAtPiAwLjg5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MzYgIHBvd2VyIDAuMDc5NyAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQzNyAgcG93ZXIgMC43OTggIDAuNSAtPiAwLjg5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MzggIHBvd2VyIDAuMDc5OCAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQzOSAgcG93ZXIgMC43OTkgIDAuNSAtPiAwLjg5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NDAgIHBvd2VyIDAuMDc5OSAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ0MSAgcG93ZXIgMC44MDEgIDAuNSAtPiAwLjg5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NDIgIHBvd2VyIDAuMDgwMSAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ0MyAgcG93ZXIgMC44MDIgIDAuNSAtPiAwLjg5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NDQgIHBvd2VyIDAuMDgwMiAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ0NSAgcG93ZXIgMC44MDMgIDAuNSAtPiAwLjg5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NDYgIHBvd2VyIDAuMDgwMyAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ0NyAgcG93ZXIgMC44MDQgIDAuNSAtPiAwLjg5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NDggIHBvd2VyIDAuMDgwNCAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ0OSAgcG93ZXIgMC44MDUgIDAuNSAtPiAwLjg5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NTAgIHBvd2VyIDAuMDgwNSAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ1MSAgcG93ZXIgMC44MDYgIDAuNSAtPiAwLjg5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NTIgIHBvd2VyIDAuMDgwNiAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ1MyAgcG93ZXIgMC44MDcgIDAuNSAtPiAwLjg5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NTQgIHBvd2VyIDAuMDgwNyAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ1NSAgcG93ZXIgMC44MDggIDAuNSAtPiAwLjg5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NTYgIHBvd2VyIDAuMDgwOCAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ1NyAgcG93ZXIgMC44MDkgIDAuNSAtPiAwLjg5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NTggIHBvd2VyIDAuMDgwOSAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ1OSAgcG93ZXIgMC44MTEgIDAuNSAtPiAwLjkwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NjAgIHBvd2VyIDAuMDgxMSAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ2MSAgcG93ZXIgMC44MTIgIDAuNSAtPiAwLjkwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NjIgIHBvd2VyIDAuMDgxMiAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ2MyAgcG93ZXIgMC44MTMgIDAuNSAtPiAwLjkwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NjQgIHBvd2VyIDAuMDgxMyAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ2NSAgcG93ZXIgMC44MTQgIDAuNSAtPiAwLjkwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NjYgIHBvd2VyIDAuMDgxNCAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ2NyAgcG93ZXIgMC44MTUgIDAuNSAtPiAwLjkwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NjggIHBvd2VyIDAuMDgxNSAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ2OSAgcG93ZXIgMC44MTYgIDAuNSAtPiAwLjkwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NzAgIHBvd2VyIDAuMDgxNiAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ3MSAgcG93ZXIgMC44MTcgIDAuNSAtPiAwLjkwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NzIgIHBvd2VyIDAuMDgxNyAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ3MyAgcG93ZXIgMC44MTggIDAuNSAtPiAwLjkwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NzQgIHBvd2VyIDAuMDgxOCAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ3NSAgcG93ZXIgMC44MTkgIDAuNSAtPiAwLjkwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NzYgIHBvd2VyIDAuMDgxOSAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ3NyAgcG93ZXIgMC44MjEgIDAuNSAtPiAwLjkwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NzggIHBvd2VyIDAuMDgyMSAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ3OSAgcG93ZXIgMC44MjIgIDAuNSAtPiAwLjkwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0ODAgIHBvd2VyIDAuMDgyMiAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ4MSAgcG93ZXIgMC44MjMgIDAuNSAtPiAwLjkwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0ODIgIHBvd2VyIDAuMDgyMyAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ4MyAgcG93ZXIgMC44MjQgIDAuNSAtPiAwLjkwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0ODQgIHBvd2VyIDAuMDgyNCAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ4NSAgcG93ZXIgMC44MjUgIDAuNSAtPiAwLjkwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0ODYgIHBvd2VyIDAuMDgyNSAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ4NyAgcG93ZXIgMC44MjYgIDAuNSAtPiAwLjkwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0ODggIHBvd2VyIDAuMDgyNiAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ4OSAgcG93ZXIgMC44MjcgIDAuNSAtPiAwLjkwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0OTAgIHBvd2VyIDAuMDgyNyAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ5MSAgcG93ZXIgMC44MjggIDAuNSAtPiAwLjkxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0OTIgIHBvd2VyIDAuMDgyOCAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ5MyAgcG93ZXIgMC44MjkgIDAuNSAtPiAwLjkxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0OTQgIHBvd2VyIDAuMDgyOSAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ5NSAgcG93ZXIgMC44MzEgIDAuNSAtPiAwLjkxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0OTYgIHBvd2VyIDAuMDgzMSAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ5NyAgcG93ZXIgMC44MzIgIDAuNSAtPiAwLjkxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0OTggIHBvd2VyIDAuMDgzMiAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDQ5OSAgcG93ZXIgMC44MzMgIDAuNSAtPiAwLjkxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MDAgIHBvd2VyIDAuMDgzMyAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUwMSAgcG93ZXIgMC44MzQgIDAuNSAtPiAwLjkxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MDIgIHBvd2VyIDAuMDgzNCAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUwMyAgcG93ZXIgMC44MzUgIDAuNSAtPiAwLjkxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MDQgIHBvd2VyIDAuMDgzNSAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUwNSAgcG93ZXIgMC44MzYgIDAuNSAtPiAwLjkxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MDYgIHBvd2VyIDAuMDgzNiAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUwNyAgcG93ZXIgMC44MzcgIDAuNSAtPiAwLjkxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MDggIHBvd2VyIDAuMDgzNyAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUwOSAgcG93ZXIgMC44MzggIDAuNSAtPiAwLjkxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MTAgIHBvd2VyIDAuMDgzOCAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUxMSAgcG93ZXIgMC44MzkgIDAuNSAtPiAwLjkxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MTIgIHBvd2VyIDAuMDgzOSAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUxMyAgcG93ZXIgMC44NDEgIDAuNSAtPiAwLjkxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MTQgIHBvd2VyIDAuMDg0MSAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUxNSAgcG93ZXIgMC44NDIgIDAuNSAtPiAwLjkxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MTYgIHBvd2VyIDAuMDg0MiAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUxNyAgcG93ZXIgMC44NDMgIDAuNSAtPiAwLjkxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MTggIHBvd2VyIDAuMDg0MyAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUxOSAgcG93ZXIgMC44NDQgIDAuNSAtPiAwLjkxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MjAgIHBvd2VyIDAuMDg0NCAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUyMSAgcG93ZXIgMC44NDUgIDAuNSAtPiAwLjkxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MjIgIHBvd2VyIDAuMDg0NSAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUyMyAgcG93ZXIgMC44NDYgIDAuNSAtPiAwLjkyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MjQgIHBvd2VyIDAuMDg0NiAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUyNSAgcG93ZXIgMC44NDcgIDAuNSAtPiAwLjkyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MjYgIHBvd2VyIDAuMDg0NyAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUyNyAgcG93ZXIgMC44NDggIDAuNSAtPiAwLjkyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MjggIHBvd2VyIDAuMDg0OCAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUyOSAgcG93ZXIgMC44NDkgIDAuNSAtPiAwLjkyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MzAgIHBvd2VyIDAuMDg0OSAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUzMSAgcG93ZXIgMC44NTEgIDAuNSAtPiAwLjkyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MzIgIHBvd2VyIDAuMDg1MSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUzMyAgcG93ZXIgMC44NTIgIDAuNSAtPiAwLjkyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MzQgIHBvd2VyIDAuMDg1MiAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUzNSAgcG93ZXIgMC44NTMgIDAuNSAtPiAwLjkyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MzYgIHBvd2VyIDAuMDg1MyAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUzNyAgcG93ZXIgMC44NTQgIDAuNSAtPiAwLjkyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MzggIHBvd2VyIDAuMDg1NCAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDUzOSAgcG93ZXIgMC44NTUgIDAuNSAtPiAwLjkyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NDAgIHBvd2VyIDAuMDg1NSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU0MSAgcG93ZXIgMC44NTYgIDAuNSAtPiAwLjkyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NDIgIHBvd2VyIDAuMDg1NiAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU0MyAgcG93ZXIgMC44NTcgIDAuNSAtPiAwLjkyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NDQgIHBvd2VyIDAuMDg1NyAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU0NSAgcG93ZXIgMC44NTggIDAuNSAtPiAwLjkyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NDYgIHBvd2VyIDAuMDg1OCAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU0NyAgcG93ZXIgMC44NTkgIDAuNSAtPiAwLjkyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NDggIHBvd2VyIDAuMDg1OSAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU0OSAgcG93ZXIgMC44NjEgIDAuNSAtPiAwLjkyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NTAgIHBvd2VyIDAuMDg2MSAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU1MSAgcG93ZXIgMC44NjIgIDAuNSAtPiAwLjkyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NTIgIHBvd2VyIDAuMDg2MiAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU1MyAgcG93ZXIgMC44NjMgIDAuNSAtPiAwLjkyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NTQgIHBvd2VyIDAuMDg2MyAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU1NSAgcG93ZXIgMC44NjQgIDAuNSAtPiAwLjkzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NTYgIHBvd2VyIDAuMDg2NCAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU1NyAgcG93ZXIgMC44NjUgIDAuNSAtPiAwLjkzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NTggIHBvd2VyIDAuMDg2NSAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU1OSAgcG93ZXIgMC44NjYgIDAuNSAtPiAwLjkzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NjAgIHBvd2VyIDAuMDg2NiAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU2MSAgcG93ZXIgMC44NjcgIDAuNSAtPiAwLjkzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NjIgIHBvd2VyIDAuMDg2NyAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU2MyAgcG93ZXIgMC44NjggIDAuNSAtPiAwLjkzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NjQgIHBvd2VyIDAuMDg2OCAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU2NSAgcG93ZXIgMC44NjkgIDAuNSAtPiAwLjkzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NjYgIHBvd2VyIDAuMDg2OSAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU2NyAgcG93ZXIgMC44NzEgIDAuNSAtPiAwLjkzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NjggIHBvd2VyIDAuMDg3MSAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU2OSAgcG93ZXIgMC44NzIgIDAuNSAtPiAwLjkzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NzAgIHBvd2VyIDAuMDg3MiAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU3MSAgcG93ZXIgMC44NzMgIDAuNSAtPiAwLjkzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NzIgIHBvd2VyIDAuMDg3MyAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU3MyAgcG93ZXIgMC44NzQgIDAuNSAtPiAwLjkzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NzQgIHBvd2VyIDAuMDg3NCAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU3NSAgcG93ZXIgMC44NzUgIDAuNSAtPiAwLjkzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NzYgIHBvd2VyIDAuMDg3NSAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU3NyAgcG93ZXIgMC44NzYgIDAuNSAtPiAwLjkzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NzggIHBvd2VyIDAuMDg3NiAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU3OSAgcG93ZXIgMC44NzcgIDAuNSAtPiAwLjkzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1ODAgIHBvd2VyIDAuMDg3NyAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU4MSAgcG93ZXIgMC44NzggIDAuNSAtPiAwLjkzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1ODIgIHBvd2VyIDAuMDg3OCAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU4MyAgcG93ZXIgMC44NzkgIDAuNSAtPiAwLjkzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1ODQgIHBvd2VyIDAuMDg3OSAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU4NSAgcG93ZXIgMC44ODEgIDAuNSAtPiAwLjkzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1ODYgIHBvd2VyIDAuMDg4MSAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU4NyAgcG93ZXIgMC44ODIgIDAuNSAtPiAwLjkzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1ODggIHBvd2VyIDAuMDg4MiAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU4OSAgcG93ZXIgMC44ODMgIDAuNSAtPiAwLjk0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1OTAgIHBvd2VyIDAuMDg4MyAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU5MSAgcG93ZXIgMC44ODQgIDAuNSAtPiAwLjk0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1OTIgIHBvd2VyIDAuMDg4NCAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU5MyAgcG93ZXIgMC44ODUgIDAuNSAtPiAwLjk0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1OTQgIHBvd2VyIDAuMDg4NSAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU5NSAgcG93ZXIgMC44ODYgIDAuNSAtPiAwLjk0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1OTYgIHBvd2VyIDAuMDg4NiAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU5NyAgcG93ZXIgMC44ODcgIDAuNSAtPiAwLjk0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1OTggIHBvd2VyIDAuMDg4NyAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDU5OSAgcG93ZXIgMC44ODggIDAuNSAtPiAwLjk0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MDAgIHBvd2VyIDAuMDg4OCAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYwMSAgcG93ZXIgMC44ODkgIDAuNSAtPiAwLjk0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MDIgIHBvd2VyIDAuMDg4OSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYwMyAgcG93ZXIgMC44OTEgIDAuNSAtPiAwLjk0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MDQgIHBvd2VyIDAuMDg5MSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYwNSAgcG93ZXIgMC44OTIgIDAuNSAtPiAwLjk0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MDYgIHBvd2VyIDAuMDg5MiAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYwNyAgcG93ZXIgMC44OTMgIDAuNSAtPiAwLjk0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MDggIHBvd2VyIDAuMDg5MyAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYwOSAgcG93ZXIgMC44OTQgIDAuNSAtPiAwLjk0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MTAgIHBvd2VyIDAuMDg5NCAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYxMSAgcG93ZXIgMC44OTUgIDAuNSAtPiAwLjk0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MTIgIHBvd2VyIDAuMDg5NSAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYxMyAgcG93ZXIgMC44OTYgIDAuNSAtPiAwLjk0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MTQgIHBvd2VyIDAuMDg5NiAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYxNSAgcG93ZXIgMC44OTcgIDAuNSAtPiAwLjk0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MTYgIHBvd2VyIDAuMDg5NyAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYxNyAgcG93ZXIgMC44OTggIDAuNSAtPiAwLjk0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MTggIHBvd2VyIDAuMDg5OCAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYxOSAgcG93ZXIgMC44OTkgIDAuNSAtPiAwLjk0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MjAgIHBvd2VyIDAuMDg5OSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYyMSAgcG93ZXIgMC45MDEgIDAuNSAtPiAwLjk0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MjIgIHBvd2VyIDAuMDkwMSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYyMyAgcG93ZXIgMC45MDIgIDAuNSAtPiAwLjk1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MjQgIHBvd2VyIDAuMDkwMiAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYyNSAgcG93ZXIgMC45MDMgIDAuNSAtPiAwLjk1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MjYgIHBvd2VyIDAuMDkwMyAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYyNyAgcG93ZXIgMC45MDQgIDAuNSAtPiAwLjk1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MjggIHBvd2VyIDAuMDkwNCAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYyOSAgcG93ZXIgMC45MDUgIDAuNSAtPiAwLjk1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MzAgIHBvd2VyIDAuMDkwNSAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYzMSAgcG93ZXIgMC45MDYgIDAuNSAtPiAwLjk1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MzIgIHBvd2VyIDAuMDkwNiAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYzMyAgcG93ZXIgMC45MDcgIDAuNSAtPiAwLjk1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MzQgIHBvd2VyIDAuMDkwNyAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYzNSAgcG93ZXIgMC45MDggIDAuNSAtPiAwLjk1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MzYgIHBvd2VyIDAuMDkwOCAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYzNyAgcG93ZXIgMC45MDkgIDAuNSAtPiAwLjk1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MzggIHBvd2VyIDAuMDkwOSAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDYzOSAgcG93ZXIgMC45MTEgIDAuNSAtPiAwLjk1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NDAgIHBvd2VyIDAuMDkxMSAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY0MSAgcG93ZXIgMC45MTIgIDAuNSAtPiAwLjk1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NDIgIHBvd2VyIDAuMDkxMiAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY0MyAgcG93ZXIgMC45MTMgIDAuNSAtPiAwLjk1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NDQgIHBvd2VyIDAuMDkxMyAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY0NSAgcG93ZXIgMC45MTQgIDAuNSAtPiAwLjk1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NDYgIHBvd2VyIDAuMDkxNCAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY0NyAgcG93ZXIgMC45MTUgIDAuNSAtPiAwLjk1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NDggIHBvd2VyIDAuMDkxNSAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY0OSAgcG93ZXIgMC45MTYgIDAuNSAtPiAwLjk1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NTAgIHBvd2VyIDAuMDkxNiAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY1MSAgcG93ZXIgMC45MTcgIDAuNSAtPiAwLjk1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NTIgIHBvd2VyIDAuMDkxNyAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY1MyAgcG93ZXIgMC45MTggIDAuNSAtPiAwLjk1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NTQgIHBvd2VyIDAuMDkxOCAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY1NSAgcG93ZXIgMC45MTkgIDAuNSAtPiAwLjk1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NTYgIHBvd2VyIDAuMDkxOSAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY1NyAgcG93ZXIgMC45MjEgIDAuNSAtPiAwLjk2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NTggIHBvd2VyIDAuMDkyMSAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY1OSAgcG93ZXIgMC45MjIgIDAuNSAtPiAwLjk2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NjAgIHBvd2VyIDAuMDkyMiAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY2MSAgcG93ZXIgMC45MjMgIDAuNSAtPiAwLjk2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NjIgIHBvd2VyIDAuMDkyMyAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY2MyAgcG93ZXIgMC45MjQgIDAuNSAtPiAwLjk2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NjQgIHBvd2VyIDAuMDkyNCAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY2NSAgcG93ZXIgMC45MjUgIDAuNSAtPiAwLjk2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NjYgIHBvd2VyIDAuMDkyNSAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY2NyAgcG93ZXIgMC45MjYgIDAuNSAtPiAwLjk2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NjggIHBvd2VyIDAuMDkyNiAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY2OSAgcG93ZXIgMC45MjcgIDAuNSAtPiAwLjk2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NzAgIHBvd2VyIDAuMDkyNyAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY3MSAgcG93ZXIgMC45MjggIDAuNSAtPiAwLjk2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NzIgIHBvd2VyIDAuMDkyOCAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY3MyAgcG93ZXIgMC45MjkgIDAuNSAtPiAwLjk2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NzQgIHBvd2VyIDAuMDkyOSAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY3NSAgcG93ZXIgMC45MzEgIDAuNSAtPiAwLjk2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NzYgIHBvd2VyIDAuMDkzMSAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY3NyAgcG93ZXIgMC45MzIgIDAuNSAtPiAwLjk2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NzggIHBvd2VyIDAuMDkzMiAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY3OSAgcG93ZXIgMC45MzMgIDAuNSAtPiAwLjk2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2ODAgIHBvd2VyIDAuMDkzMyAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY4MSAgcG93ZXIgMC45MzQgIDAuNSAtPiAwLjk2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2ODIgIHBvd2VyIDAuMDkzNCAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY4MyAgcG93ZXIgMC45MzUgIDAuNSAtPiAwLjk2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2ODQgIHBvd2VyIDAuMDkzNSAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY4NSAgcG93ZXIgMC45MzYgIDAuNSAtPiAwLjk2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2ODYgIHBvd2VyIDAuMDkzNiAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY4NyAgcG93ZXIgMC45MzcgIDAuNSAtPiAwLjk2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2ODggIHBvd2VyIDAuMDkzNyAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY4OSAgcG93ZXIgMC45MzggIDAuNSAtPiAwLjk2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2OTAgIHBvd2VyIDAuMDkzOCAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY5MSAgcG93ZXIgMC45MzkgIDAuNSAtPiAwLjk2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2OTIgIHBvd2VyIDAuMDkzOSAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY5MyAgcG93ZXIgMC45NDEgIDAuNSAtPiAwLjk3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2OTQgIHBvd2VyIDAuMDk0MSAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY5NSAgcG93ZXIgMC45NDIgIDAuNSAtPiAwLjk3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2OTYgIHBvd2VyIDAuMDk0MiAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY5NyAgcG93ZXIgMC45NDMgIDAuNSAtPiAwLjk3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2OTggIHBvd2VyIDAuMDk0MyAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDY5OSAgcG93ZXIgMC45NDQgIDAuNSAtPiAwLjk3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MDAgIHBvd2VyIDAuMDk0NCAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcwMSAgcG93ZXIgMC45NDUgIDAuNSAtPiAwLjk3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MDIgIHBvd2VyIDAuMDk0NSAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcwMyAgcG93ZXIgMC45NDYgIDAuNSAtPiAwLjk3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MDQgIHBvd2VyIDAuMDk0NiAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcwNSAgcG93ZXIgMC45NDcgIDAuNSAtPiAwLjk3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MDYgIHBvd2VyIDAuMDk0NyAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcwNyAgcG93ZXIgMC45NDggIDAuNSAtPiAwLjk3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MDggIHBvd2VyIDAuMDk0OCAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcwOSAgcG93ZXIgMC45NDkgIDAuNSAtPiAwLjk3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MTAgIHBvd2VyIDAuMDk0OSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcxMSAgcG93ZXIgMC45NTEgIDAuNSAtPiAwLjk3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MTIgIHBvd2VyIDAuMDk1MSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcxMyAgcG93ZXIgMC45NTIgIDAuNSAtPiAwLjk3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MTQgIHBvd2VyIDAuMDk1MiAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcxNSAgcG93ZXIgMC45NTMgIDAuNSAtPiAwLjk3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MTYgIHBvd2VyIDAuMDk1MyAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcxNyAgcG93ZXIgMC45NTQgIDAuNSAtPiAwLjk3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MTggIHBvd2VyIDAuMDk1NCAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcxOSAgcG93ZXIgMC45NTUgIDAuNSAtPiAwLjk3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MjAgIHBvd2VyIDAuMDk1NSAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcyMSAgcG93ZXIgMC45NTYgIDAuNSAtPiAwLjk3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MjIgIHBvd2VyIDAuMDk1NiAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcyMyAgcG93ZXIgMC45NTcgIDAuNSAtPiAwLjk3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MjQgIHBvd2VyIDAuMDk1NyAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcyNSAgcG93ZXIgMC45NTggIDAuNSAtPiAwLjk3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MjYgIHBvd2VyIDAuMDk1OCAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcyNyAgcG93ZXIgMC45NTkgIDAuNSAtPiAwLjk3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MjggIHBvd2VyIDAuMDk1OSAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDcyOSAgcG93ZXIgMC45NjEgIDAuNSAtPiAwLjk4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MzAgIHBvd2VyIDAuMDk2MSAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDczMSAgcG93ZXIgMC45NjIgIDAuNSAtPiAwLjk4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MzIgIHBvd2VyIDAuMDk2MiAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDczMyAgcG93ZXIgMC45NjMgIDAuNSAtPiAwLjk4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MzQgIHBvd2VyIDAuMDk2MyAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDczNSAgcG93ZXIgMC45NjQgIDAuNSAtPiAwLjk4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MzYgIHBvd2VyIDAuMDk2NCAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDczNyAgcG93ZXIgMC45NjUgIDAuNSAtPiAwLjk4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MzggIHBvd2VyIDAuMDk2NSAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDczOSAgcG93ZXIgMC45NjYgIDAuNSAtPiAwLjk4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NDAgIHBvd2VyIDAuMDk2NiAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc0MSAgcG93ZXIgMC45NjcgIDAuNSAtPiAwLjk4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NDIgIHBvd2VyIDAuMDk2NyAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc0MyAgcG93ZXIgMC45NjggIDAuNSAtPiAwLjk4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NDQgIHBvd2VyIDAuMDk2OCAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc0NSAgcG93ZXIgMC45NjkgIDAuNSAtPiAwLjk4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NDYgIHBvd2VyIDAuMDk2OSAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc0NyAgcG93ZXIgMC45NzEgIDAuNSAtPiAwLjk4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NDggIHBvd2VyIDAuMDk3MSAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc0OSAgcG93ZXIgMC45NzIgIDAuNSAtPiAwLjk4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NTAgIHBvd2VyIDAuMDk3MiAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc1MSAgcG93ZXIgMC45NzMgIDAuNSAtPiAwLjk4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NTIgIHBvd2VyIDAuMDk3MyAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc1MyAgcG93ZXIgMC45NzQgIDAuNSAtPiAwLjk4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NTQgIHBvd2VyIDAuMDk3NCAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc1NSAgcG93ZXIgMC45NzUgIDAuNSAtPiAwLjk4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NTYgIHBvd2VyIDAuMDk3NSAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc1NyAgcG93ZXIgMC45NzYgIDAuNSAtPiAwLjk4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NTggIHBvd2VyIDAuMDk3NiAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc1OSAgcG93ZXIgMC45NzcgIDAuNSAtPiAwLjk4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NjAgIHBvd2VyIDAuMDk3NyAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc2MSAgcG93ZXIgMC45NzggIDAuNSAtPiAwLjk4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NjIgIHBvd2VyIDAuMDk3OCAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc2MyAgcG93ZXIgMC45NzkgIDAuNSAtPiAwLjk4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NjQgIHBvd2VyIDAuMDk3OSAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc2NSAgcG93ZXIgMC45ODEgIDAuNSAtPiAwLjk5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NjYgIHBvd2VyIDAuMDk4MSAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc2NyAgcG93ZXIgMC45ODIgIDAuNSAtPiAwLjk5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NjggIHBvd2VyIDAuMDk4MiAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc2OSAgcG93ZXIgMC45ODMgIDAuNSAtPiAwLjk5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NzAgIHBvd2VyIDAuMDk4MyAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc3MSAgcG93ZXIgMC45ODQgIDAuNSAtPiAwLjk5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NzIgIHBvd2VyIDAuMDk4NCAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc3MyAgcG93ZXIgMC45ODUgIDAuNSAtPiAwLjk5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NzQgIHBvd2VyIDAuMDk4NSAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc3NSAgcG93ZXIgMC45ODYgIDAuNSAtPiAwLjk5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NzYgIHBvd2VyIDAuMDk4NiAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc3NyAgcG93ZXIgMC45ODcgIDAuNSAtPiAwLjk5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NzggIHBvd2VyIDAuMDk4NyAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc3OSAgcG93ZXIgMC45ODggIDAuNSAtPiAwLjk5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3ODAgIHBvd2VyIDAuMDk4OCAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc4MSAgcG93ZXIgMC45ODkgIDAuNSAtPiAwLjk5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3ODIgIHBvd2VyIDAuMDk4OSAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc4MyAgcG93ZXIgMC45OTEgIDAuNSAtPiAwLjk5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3ODQgIHBvd2VyIDAuMDk5MSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc4NSAgcG93ZXIgMC45OTIgIDAuNSAtPiAwLjk5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3ODYgIHBvd2VyIDAuMDk5MiAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc4NyAgcG93ZXIgMC45OTMgIDAuNSAtPiAwLjk5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3ODggIHBvd2VyIDAuMDk5MyAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc4OSAgcG93ZXIgMC45OTQgIDAuNSAtPiAwLjk5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3OTAgIHBvd2VyIDAuMDk5NCAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc5MSAgcG93ZXIgMC45OTUgIDAuNSAtPiAwLjk5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3OTIgIHBvd2VyIDAuMDk5NSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc5MyAgcG93ZXIgMC45OTYgIDAuNSAtPiAwLjk5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3OTQgIHBvd2VyIDAuMDk5NiAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc5NSAgcG93ZXIgMC45OTcgIDAuNSAtPiAwLjk5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3OTYgIHBvd2VyIDAuMDk5NyAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc5NyAgcG93ZXIgMC45OTggIDAuNSAtPiAwLjk5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3OTggIHBvd2VyIDAuMDk5OCAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NDc5OSAgcG93ZXIgMC45OTkgIDAuNSAtPiAwLjk5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ4MDAgIHBvd2VyIDAuMDk5OSAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBBIGdyb3VwIG9mIHByZWNpc2lvbiA0IHRlc3RzIHdoZXJlIEh1bGwgJiBBYnJoYW0gYWRqdXN0bWVudHMgYXJlDQotLS0gbmVlZGVkIGluIHNvbWUgY2FzZXMgKGJvdGggdXAgYW5kIGRvd24pIFtzZWUgSHVsbDE5ODViXQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1tYXhFeHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1wcmVjaXNpb246ICAgNA0KLXB3c3g1MDAxICBwb3dlciAwLjAxMTggICAwLjUgLT4gMC4xMDg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAwMiAgcG93ZXIgMC4xMTkgICAgMC41IC0+IDAuMzQ1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMDMgIHBvd2VyIDAuMDExOSAgIDAuNSAtPiAwLjEwOTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g1MDA0ICBwb3dlciAwLjEyMSAgICAwLjUgLT4gMC4zNDc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAwNSAgcG93ZXIgMC4wMTIxICAgMC41IC0+IDAuMTEwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMDYgIHBvd2VyIDAuMTIyICAgIDAuNSAtPiAwLjM0OTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g1MDA3ICBwb3dlciAwLjAxMjIgICAwLjUgLT4gMC4xMTA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAwOCAgcG93ZXIgMC4xMjMgICAgMC41IC0+IDAuMzUwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMDkgIHBvd2VyIDAuNDk0ICAgIDAuNSAtPiAwLjcwMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g1MDEwICBwb3dlciAwLjA2NjkgICAwLjUgLT4gMC4yNTg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAxMSAgcG93ZXIgMC45NTU4ICAgMC41IC0+IDAuOTc3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMTIgIHBvd2VyIDAuOTM0OCAgIDAuNSAtPiAwLjk2NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g1MDEzICBwb3dlciAwLjkzNDUgICAwLjUgLT4gMC45NjY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAxNCAgcG93ZXIgMC4wOTM0NSAgMC41IC0+IDAuMzA1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMTUgIHBvd2VyIDAuOTM0NiAgIDAuNSAtPiAwLjk2NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g1MDE2ICBwb3dlciAwLjA5MzQ2ICAwLjUgLT4gMC4zMDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAxNyAgcG93ZXIgMC45MzQ3ICAgMC41IC0+IDAuOTY2OCAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aA0KLXByZWNpc2lvbjogOQ0KLXB3c3g3MDAgIHBvd2VyICAwICAgICAgICAwLjUgLT4gJzAnDQotcHdzeDcwMSAgcG93ZXIgIC0wICAgICAgIDAuNSAtPiAnMCcNCi1wd3N4NzAyICBwb3dlciAgMC4zOSAgICAgMC41IC0+IDAuNjI0NDk5ODAwICAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MDMgIHBvd2VyICAxMDAgICAgICAwLjUgLT4gJzEwLjAwMDAwMDAnICAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDcwNCAgcG93ZXIgIDEuMDAgICAgIDAuNSAtPiAnMS4wMDAwMDAwMCcgICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzA1ICBwb3dlciAgNyAgICAgICAgMC41IC0+ICcyLjY0NTc1MTMxJyAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MDYgIHBvd2VyICAxMCAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc29tZSBvbmUtb2Zmcw0KLXByZWNpc2lvbjogOQ0KLXB3c3g3MTEgIHBvd2VyICAwLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYgICAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDcxMiAgcG93ZXIgIDAuMiAgICAgIDAuNSAtPiAwLjQ0NzIxMzU5NSAgICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzEzICBwb3dlciAgMC4zICAgICAgMC41IC0+IDAuNTQ3NzIyNTU4ICAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MTQgIHBvd2VyICAwLjQgICAgICAwLjUgLT4gMC42MzI0NTU1MzIgICAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDcxNSAgcG93ZXIgIDAuNSAgICAgIDAuNSAtPiAwLjcwNzEwNjc4MSAgICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzE2ICBwb3dlciAgMC42ICAgICAgMC41IC0+IDAuNzc0NTk2NjY5ICAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MTcgIHBvd2VyICAwLjcgICAgICAwLjUgLT4gMC44MzY2NjAwMjcgICAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDcxOCAgcG93ZXIgIDAuOCAgICAgIDAuNSAtPiAwLjg5NDQyNzE5MSAgICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzE5ICBwb3dlciAgMC45ICAgICAgMC41IC0+IDAuOTQ4NjgzMjk4ICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTAgICAgICAgICAgICAgICAtLSBub3RlIG5vIG5vcm1hbGl6YXRvaW4gaGVyZQ0KLXB3c3g3MjAgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxMQ0KLXB3c3g3MjEgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwMiAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxMg0KLXB3c3g3MjIgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwMTcgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA5DQotcHdzeDcyMyAgcG93ZXIgIDAuMzkgICAgIDAuNSAtPiAwLjYyNDQ5OTgwMCAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE1DQotcHdzeDcyNCAgcG93ZXIgIDAuMzkgICAgIDAuNSAtPiAwLjYyNDQ5OTc5OTgzOTg0MCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBkaXNjdXNzaW9uIGNhc2VzDQotcHJlY2lzaW9uOiA3DQotcHdzeDczMSAgcG93ZXIgICAgIDkgICAgMC41IC0+IDMuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzMyICBwb3dlciAgIDEwMCAgICAwLjUgLT4gMTAuMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MzMgIHBvd2VyICAgMTIzICAgIDAuNSAtPiAxMS4wOTA1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDczNCAgcG93ZXIgICAxNDQgICAgMC41IC0+IDEyLjAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzM1ICBwb3dlciAgIDE1NiAgICAwLjUgLT4gMTIuNDkwMDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MzYgIHBvd2VyIDEwMDAwICAgIDAuNSAtPiAxMDAuMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gdmFsdWVzIGNsb3NlIHRvIG92ZXJmbG93IChpZiB0aGVyZSB3ZXJlIGlucHV0IHJvdW5kaW5nKQ0KLW1heGV4cG9uZW50OiA5OQ0KLW1pbmV4cG9uZW50OiAtOTkNCi1wcmVjaXNpb246IDUNCi1wd3N4NzYwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gOS45OTk4RSs0OSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzYxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gOS45OTk5RSs0OSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzYyICBwb3dlciAgOS45OTk5RSs5OSAgICAwLjUgLT4gOS45OTk5RSs0OSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzYzICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzY0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzY1ICBwb3dlciAgOS45OTk5NUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzY2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDkNCi1wd3N4NzcwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gOS45OTk4NTAwMEUrNDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3NzEgIHBvd2VyICA5Ljk5OThFKzk5ICAgIDAuNSAtPiA5Ljk5OTkwMDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc3MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+IDkuOTk5OTUwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzczICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gOS45OTk5NTUwMEUrNDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3NzQgIHBvd2VyICA5Ljk5OTk0RSs5OSAgIDAuNSAtPiA5Ljk5OTk3MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc3NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+IDkuOTk5OTc1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Nzc2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gOS45OTk5OTUwMEUrNDkgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMjANCi1wd3N4NzgwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gJzkuOTk5ODQ5OTk4ODc0OTgzMTI0N0UrNDknIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3ODEgIHBvd2VyICA5Ljk5OThFKzk5ICAgIDAuNSAtPiAnOS45OTk4OTk5OTk0OTk5OTQ5OTk5RSs0OScgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc4MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+ICc5Ljk5OTk0OTk5OTg3NDk5OTM3NTBFKzQ5JyBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzgzICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gJzkuOTk5OTU0OTk5ODk4NzQ5NTQ0NEUrNDknIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3ODQgIHBvd2VyICA5Ljk5OTk0RSs5OSAgIDAuNSAtPiAnOS45OTk5Njk5OTk5NTQ5OTk4NjUwRSs0OScgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc4NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+ICc5Ljk5OTk3NDk5OTk2ODc0OTkyMTlFKzQ5JyBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Nzg2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gJzkuOTk5OTk0OTk5OTk4NzQ5OTk5NEUrNDknIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MgW3RoZXNlIGNhbiBvbmx5IHJlc3VsdCB3aGVuIGVNYXggaXMgPCBkaWdpdHMrMV0NCi0tLSBFdGlueSA9IC0oRW1heCArIChwcmVjaXNpb24tMSkpDQotLS0gc3RhcnQgd2l0aCBzdWJub3JtYWwgb3BlcmFuZHMgYW5kIG5vcm1hbCByZXN1bHRzDQotbWF4ZXhwb25lbnQ6IDkNCi1taW5leHBvbmVudDogLTkNCi1wcmVjaXNpb246IDkgICAgICAgICAgICAgICAgLS0gRXRpbnk9LTE3DQotcHdzeDgwMCAgcG93ZXIgIDFFLTE3ICAgIDAuNSAtPiAzLjE2MjI3NzY2RS05IEluZXhhY3QgUm91bmRlZA0KLXB3c3g4MDEgIHBvd2VyIDEwRS0xNyAgICAwLjUgLT4gMS4wMDAwMDAwMEUtOCBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDEwICAgICAgICAgICAgICAgLS0gRXRpbnk9LTE4DQotcHdzeDgwMiAgcG93ZXIgMTBFLTE4ICAgIDAuNSAtPiAzLjE2MjI3NzY2MEUtOSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4ODAzICBwb3dlciAgMUUtMTggICAgMC41IC0+IDEuMDAwMDAwMDAwRS05IEluZXhhY3QgUm91bmRlZA0KLQ0KLXByZWNpc2lvbjogMTEgICAgICAgICAgICAgICAtLSBFdGlueT0tMTkNCi1wd3N4ODA0ICBwb3dlciAgMUUtMTkgICAgMC41IC0+IDMuMTYyMjc3NjYwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLS0tIFRoZSBuZXh0IHRlc3Qgc2hvdWxkIGJlIHNraXBwZWQgZm9yIGRlY051bWJlcg0KLXB3c3g4MDUgIHBvd2VyIDEwRS0xOSAgICAwLjUgLT4gMS4wMDAwMDAwMDAwRS05IEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTIgICAgICAgICAgICAgICAtLSBFdGlueT0tMjANCi1wd3N4ODA2ICBwb3dlciAxMEUtMjAgICAgMC41IC0+IDMuMTYyMjc3NjYwMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4ODA3ICBwb3dlciAgMUUtMjAgICAgMC41IC0+IDEuMDAwMDAwMDAwMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1wcmVjaXNpb246IDEzICAgICAgICAgICAgICAgLS0gRXRpbnk9LTIxDQotcHdzeDgwOCAgcG93ZXIgIDFFLTIxICAgIDAuNSAtPiAzLjE2MjI3NzY2MDJFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotcHdzeDgwOSAgcG93ZXIgMTBFLTIxICAgIDAuNSAtPiAxLjAwMDAwMDAwMDAwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTQgICAgICAgICAgICAgICAtLSBFdGlueT0tMjINCi1wd3N4ODEwICBwb3dlciAgMUUtMjEgICAgMC41IC0+IDMuMTYyMjc3NjYwMTdFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotcHdzeDgxMSAgcG93ZXIgMTBFLTIyICAgIDAuNSAtPiAzLjE2MjI3NzY2MDE3RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLXB3c3g4MTIgIHBvd2VyICAxRS0yMiAgICAwLjUgLT4gMS4wMDAwMDAwMDAwMEUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSBzcGVjaWFsIHZhbHVlcw0KLW1heGV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLXB3c3g4MjAgIHBvd2VyICAgSW5mICAgICAwLjUgLT4gSW5maW5pdHkNCi1wd3N4ODIxICBwb3dlciAgLUluZiAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3g4MjIgIHBvd2VyICAgTmFOICAgICAwLjUgLT4gTmFODQotcHdzeDgyMyAgcG93ZXIgIHNOYU4gICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotcHdzeDgyNCAgcG93ZXIgIHNOYU4xMjMgIDAuNSAtPiBOYU4xMjMgSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4ODI1ICBwb3dlciAtc05hTjMyMSAgMC41IC0+IC1OYU4zMjEgSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4ODI2ICBwb3dlciAgIE5hTjQ1NiAgMC41IC0+IE5hTjQ1Ng0KLXB3c3g4MjcgIHBvd2VyICAtTmFONjU0ICAwLjUgLT4gLU5hTjY1NA0KLXB3c3g4MjggIHBvd2VyICAgTmFOMSAgICAwLjUgLT4gTmFOMQ0KLQ0KLS0tIE51bGwgdGVzdA0KLXB3c3g5MDAgIHBvd2VyICAjICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBwb3dlcnNxcnQuZGVjVGVzdCAtLSBkZWNpbWFsIHNxdWFyZSByb290LCB1c2luZyBwb3dlciAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA0LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgdGFrZW4gZnJvbSBzcXVhcmVyb290LmRlY1Rlc3QgYnV0IGFyZQorLS0gZXZhbHVhdGVkIHVzaW5nIHRoZSBwb3dlciBvcGVyYXRvci4gIFRoZSBkaWZmZXJlbmNlcyBpbiByZXN1bHRzCistLSAoMTUzIG91dCBvZiAyODU2KSBmYWxsIGludG8gdGhlIGZvbGxvd2luZyBjYXRlZ29yaWVzOgorLS0KKy0tICAgIHggICAgKiogMC41ICh4PjApIGhhcyBubyBwcmVmZXJyZWQgZXhwb25lbnQsIGFuZCBpcyBJbmV4YWN0CistLSAgICAgICAgICAgICAgICAoYW5kIGhlbmNlIGZ1bGwgcHJlY2lzaW9uKTsgYWxtb3N0IGFsbCBkaWZmZXJlbmNlcyBhcmUKKy0tICAgICAgICAgICAgICAgIGluIHRoaXMgY2F0ZWdvcnkKKy0tICAgIDAuMDAgKiogMC41IGJlY29tZXMgMCAobm90IDAuMCksIGV0Yy4KKy0tICAgLTAgICAgKiogMC41IGJlY29tZXMgMCAobmV2ZXIgLTApCistLSAgICBTb21lIGV4YWN0IHN1Ym5vcm1hbHMgYmVjb21lIGluZXhhY3QgYW5kIGhlbmNlIHVuZGVyZmxvd3MKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBiYXNpY3MKK3B3c3gwMDEgIHBvd2VyIDEgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDAwMiAgcG93ZXIgLTEgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAwMyAgcG93ZXIgMS4wMCAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDA0ICBwb3dlciAtMS4wMCAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDA1ICBwb3dlciAwICAgICAgICAwLjUgLT4gMAorcHdzeDAwNiAgcG93ZXIgMDAuMCAgICAgMC41IC0+IDAKK3B3c3gwMDcgIHBvd2VyIDAuMDAgICAgIDAuNSAtPiAwCitwd3N4MDA4ICBwb3dlciAwMC4wMCAgICAwLjUgLT4gMAorcHdzeDAwOSAgcG93ZXIgMDAuMDAwICAgMC41IC0+IDAKK3B3c3gwMTAgIHBvd2VyIDAwLjAwMDAgIDAuNSAtPiAwCitwd3N4MDExICBwb3dlciAwMCAgICAgICAwLjUgLT4gMAorCitwd3N4MDEyICBwb3dlciAtMiAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDEzICBwb3dlciAyICAgICAgICAwLjUgLT4gMS40MTQyMTM1NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMTQgIHBvd2VyIC0yLjAwICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMTUgIHBvd2VyIDIuMDAgICAgIDAuNSAtPiAxLjQxNDIxMzU2IEluZXhhY3QgUm91bmRlZAorcHdzeDAxNiAgcG93ZXIgLTAgICAgICAgMC41IC0+IDAKK3B3c3gwMTcgIHBvd2VyIC0wLjAgICAgIDAuNSAtPiAwCitwd3N4MDE4ICBwb3dlciAtMDAuMDAgICAwLjUgLT4gMAorcHdzeDAxOSAgcG93ZXIgLTAwLjAwMCAgMC41IC0+IDAKK3B3c3gwMjAgIHBvd2VyIC0wLjAwMDAgIDAuNSAtPiAwCitwd3N4MDIxICBwb3dlciAtMEUrOSAgICAwLjUgLT4gMAorcHdzeDAyMiAgcG93ZXIgLTBFKzEwICAgMC41IC0+IDAKK3B3c3gwMjMgIHBvd2VyIC0wRSsxMSAgIDAuNSAtPiAwCitwd3N4MDI0ICBwb3dlciAtMEUrMTIgICAwLjUgLT4gMAorcHdzeDAyNSAgcG93ZXIgLTAwICAgICAgMC41IC0+IDAKK3B3c3gwMjYgIHBvd2VyIDBFKzUgICAgIDAuNSAtPiAwCitwd3N4MDI3ICBwb3dlciA0LjAgICAgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMjggIHBvd2VyIDQuMDAgICAgIDAuNSAtPiAyLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitwd3N4MDMwICBwb3dlciArMC4xICAgICAgICAgICAgIDAuNSAtPiAwLjMxNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMzEgIHBvd2VyIC0wLjEgICAgICAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAzMiAgcG93ZXIgKzAuMDEgICAgICAgICAgICAwLjUgLT4gMC4xMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDMzICBwb3dlciAtMC4wMSAgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMzQgIHBvd2VyICswLjAwMSAgICAgICAgICAgMC41IC0+IDAuMDMxNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMzUgIHBvd2VyIC0wLjAwMSAgICAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAzNiAgcG93ZXIgKzAuMDAwMDAxICAgICAgICAwLjUgLT4gMC4wMDEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMzcgIHBvd2VyIC0wLjAwMDAwMSAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAzOCAgcG93ZXIgKzAuMDAwMDAwMDAwMDAxICAwLjUgLT4gMC4wMDAwMDEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMzkgIHBvd2VyIC0wLjAwMDAwMDAwMDAwMSAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitwd3N4MDQxICBwb3dlciAxLjEgICAgICAgICAwLjUgLT4gMS4wNDg4MDg4NSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNDIgIHBvd2VyIDEuMTAgICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZAorcHdzeDA0MyAgcG93ZXIgMS4xMDAgICAgICAgMC41IC0+IDEuMDQ4ODA4ODUgSW5leGFjdCBSb3VuZGVkCitwd3N4MDQ0ICBwb3dlciAxLjExMCAgICAgICAwLjUgLT4gMS4wNTM1NjUzOCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNDUgIHBvd2VyIC0xLjEgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNDYgIHBvd2VyIC0xLjEwICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNDcgIHBvd2VyIC0xLjEwMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNDggIHBvd2VyIC0xLjExMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNDkgIHBvd2VyIDkuOSAgICAgICAgIDAuNSAtPiAzLjE0NjQyNjU0IEluZXhhY3QgUm91bmRlZAorcHdzeDA1MCAgcG93ZXIgOS45MCAgICAgICAgMC41IC0+IDMuMTQ2NDI2NTQgSW5leGFjdCBSb3VuZGVkCitwd3N4MDUxICBwb3dlciA5LjkwMCAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNTIgIHBvd2VyIDkuOTkwICAgICAgIDAuNSAtPiAzLjE2MDY5NjEzIEluZXhhY3QgUm91bmRlZAorcHdzeDA1MyAgcG93ZXIgLTkuOSAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA1NCAgcG93ZXIgLTkuOTAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA1NSAgcG93ZXIgLTkuOTAwICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA1NiAgcG93ZXIgLTkuOTkwICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitwd3N4MDYwICBwb3dlciAgMSAgICAgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA2MSAgcG93ZXIgIDEuMCAgICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjIgIHBvd2VyICAxLjAwICAgICAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDYzICBwb3dlciAgMTAuMCAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorcHdzeDA2NCAgcG93ZXIgIDEwLjAgICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjUgIHBvd2VyICAxMC4wICAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitwd3N4MDY2ICBwb3dlciAgMTAuMDAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorcHdzeDA2NyAgcG93ZXIgIDEwMCAgICAgICAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjggIHBvd2VyICAxMDAuMCAgICAgICAgMC41IC0+IDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDY5ICBwb3dlciAgMTAwLjAwICAgICAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA3MCAgcG93ZXIgIDEuMTAwMEUrMyAgICAwLjUgLT4gMzMuMTY2MjQ3OSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNzEgIHBvd2VyICAxLjEwMDAwRSszICAgMC41IC0+IDMzLjE2NjI0NzkgSW5leGFjdCBSb3VuZGVkCitwd3N4MDcyICBwb3dlciAtMTAuMCAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNzMgIHBvd2VyIC0xMC4wMCAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA3NCAgcG93ZXIgLTEwMC4wICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDc1ICBwb3dlciAtMTAwLjAwICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNzYgIHBvd2VyIC0xLjEwMDBFKzMgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA3NyAgcG93ZXIgLTEuMTAwMDBFKzMgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZhbW91cyBzcXVhcmVzCitwd3N4MDgwICBwb3dlciAgICAgMSAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4MSAgcG93ZXIgICAgIDQgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODIgIHBvd2VyICAgICA5ICAgMC41IC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDgzICBwb3dlciAgICAxNiAgIDAuNSAtPiA0LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4NCAgcG93ZXIgICAgMjUgICAwLjUgLT4gNS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODUgIHBvd2VyICAgIDM2ICAgMC41IC0+IDYuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDg2ICBwb3dlciAgICA0OSAgIDAuNSAtPiA3LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4NyAgcG93ZXIgICAgNjQgICAwLjUgLT4gOC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODggIHBvd2VyICAgIDgxICAgMC41IC0+IDkuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDg5ICBwb3dlciAgIDEwMCAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA5MCAgcG93ZXIgICAxMjEgICAwLjUgLT4gMTEuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwOTEgIHBvd2VyICAgMTQ0ICAgMC41IC0+IDEyLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDkyICBwb3dlciAgIDE2OSAgIDAuNSAtPiAxMy4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA5MyAgcG93ZXIgICAyNTYgICAwLjUgLT4gMTYuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwOTQgIHBvd2VyICAxMDI0ICAgMC41IC0+IDMyLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDk1ICBwb3dlciAgNDA5NiAgIDAuNSAtPiA2NC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwMCAgcG93ZXIgICAwLjAxICAwLjUgLT4gMC4xMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTAxICBwb3dlciAgIDAuMDQgIDAuNSAtPiAwLjIwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDIgIHBvd2VyICAgMC4wOSAgMC41IC0+IDAuMzAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwMyAgcG93ZXIgICAwLjE2ICAwLjUgLT4gMC40MDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTA0ICBwb3dlciAgIDAuMjUgIDAuNSAtPiAwLjUwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDUgIHBvd2VyICAgMC4zNiAgMC41IC0+IDAuNjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwNiAgcG93ZXIgICAwLjQ5ICAwLjUgLT4gMC43MDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTA3ICBwb3dlciAgIDAuNjQgIDAuNSAtPiAwLjgwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDggIHBvd2VyICAgMC44MSAgMC41IC0+IDAuOTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwOSAgcG93ZXIgICAxLjAwICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMTAgIHBvd2VyICAgMS4yMSAgMC41IC0+IDEuMTAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTExICBwb3dlciAgIDEuNDQgIDAuNSAtPiAxLjIwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDExMiAgcG93ZXIgICAxLjY5ICAwLjUgLT4gMS4zMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMTMgIHBvd2VyICAgMi41NiAgMC41IC0+IDEuNjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTE0ICBwb3dlciAgMTAuMjQgIDAuNSAtPiAzLjIwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDExNSAgcG93ZXIgIDQwLjk2ICAwLjUgLT4gNi40MDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gUHJlY2lzaW9uIDEgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgcGx1cyBleHBvbmVudCBhZGp1c3RzXQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogICAxCitwd3N4MTIwMSAgcG93ZXIgMC4xICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMDMgIHBvd2VyIDEuMEUtMSAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwNCAgcG93ZXIgMS4wMEUtMiAgMC41IC0+IDAuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwNSAgcG93ZXIgMUUtMyAgMC41IC0+IDAuMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMDYgIHBvd2VyIDFFKzEgIDAuNSAtPiAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjA3ICBwb3dlciAxRSsyICAwLjUgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjA4ICBwb3dlciAxRSszICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwOSAgcG93ZXIgMC4yICAwLjUgLT4gMC40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjEwICBwb3dlciAwLjAyICAwLjUgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjExICBwb3dlciAyLjBFLTEgIDAuNSAtPiAwLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTIgIHBvd2VyIDIuMDBFLTIgIDAuNSAtPiAwLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTMgIHBvd2VyIDJFLTMgIDAuNSAtPiAwLjA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjE0ICBwb3dlciAyRSsxICAwLjUgLT4gNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIxNSAgcG93ZXIgMkUrMiAgMC41IC0+IDFFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTYgIHBvd2VyIDJFKzMgIDAuNSAtPiA0RSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjE3ICBwb3dlciAwLjMgIDAuNSAtPiAwLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTggIHBvd2VyIDAuMDMgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTkgIHBvd2VyIDMuMEUtMSAgMC41IC0+IDAuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyMCAgcG93ZXIgMy4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyMSAgcG93ZXIgM0UtMyAgMC41IC0+IDAuMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjIgIHBvd2VyIDNFKzEgIDAuNSAtPiA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjIzICBwb3dlciAzRSsyICAwLjUgLT4gMkUrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyNCAgcG93ZXIgM0UrMyAgMC41IC0+IDVFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjUgIHBvd2VyIDAuNCAgMC41IC0+IDAuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyNiAgcG93ZXIgMC4wNCAgMC41IC0+IDAuMiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjI3ICBwb3dlciA0LjBFLTEgIDAuNSAtPiAwLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjggIHBvd2VyIDQuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjkgIHBvd2VyIDRFLTMgIDAuNSAtPiAwLjA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjMwICBwb3dlciA0RSsxICAwLjUgLT4gNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzMSAgcG93ZXIgNEUrMiAgMC41IC0+IDJFKzEgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzMiAgcG93ZXIgNEUrMyAgMC41IC0+IDZFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzMgIHBvd2VyIDAuNSAgMC41IC0+IDAuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzNCAgcG93ZXIgMC4wNSAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzNSAgcG93ZXIgNS4wRS0xICAwLjUgLT4gMC43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjM2ICBwb3dlciA1LjAwRS0yICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjM3ICBwb3dlciA1RS0zICAwLjUgLT4gMC4wNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzOCAgcG93ZXIgNUUrMSAgMC41IC0+IDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzkgIHBvd2VyIDVFKzIgIDAuNSAtPiAyRSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQwICBwb3dlciA1RSszICAwLjUgLT4gN0UrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0MSAgcG93ZXIgMC42ICAwLjUgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQyICBwb3dlciAwLjA2ICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQzICBwb3dlciA2LjBFLTEgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNDQgIHBvd2VyIDYuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNDUgIHBvd2VyIDZFLTMgIDAuNSAtPiAwLjA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQ2ICBwb3dlciA2RSsxICAwLjUgLT4gOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0NyAgcG93ZXIgNkUrMiAgMC41IC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNDggIHBvd2VyIDZFKzMgIDAuNSAtPiA4RSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQ5ICBwb3dlciAwLjcgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTAgIHBvd2VyIDAuMDcgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTEgIHBvd2VyIDcuMEUtMSAgMC41IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1MiAgcG93ZXIgNy4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1MyAgcG93ZXIgN0UtMyAgMC41IC0+IDAuMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTQgIHBvd2VyIDdFKzEgIDAuNSAtPiA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjU1ICBwb3dlciA3RSsyICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1NiAgcG93ZXIgN0UrMyAgMC41IC0+IDhFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTcgIHBvd2VyIDAuOCAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1OCAgcG93ZXIgMC4wOCAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1OSAgcG93ZXIgOC4wRS0xICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjYwICBwb3dlciA4LjAwRS0yICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjYxICBwb3dlciA4RS0zICAwLjUgLT4gMC4wOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2MiAgcG93ZXIgOEUrMSAgMC41IC0+IDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjMgIHBvd2VyIDhFKzIgIDAuNSAtPiAzRSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjY0ICBwb3dlciA4RSszICAwLjUgLT4gOUUrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2NSAgcG93ZXIgMC45ICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjY2ICBwb3dlciAwLjA5ICAwLjUgLT4gMC4zIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjcgIHBvd2VyIDkuMEUtMSAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2OCAgcG93ZXIgOS4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2OSAgcG93ZXIgOUUtMyAgMC41IC0+IDAuMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNzAgIHBvd2VyIDlFKzEgIDAuNSAtPiA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjcxICBwb3dlciA5RSsyICAwLjUgLT4gM0UrMSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjcyICBwb3dlciA5RSszICAwLjUgLT4gOUUrMSAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFByZWNpc2lvbiAyIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIHBsdXMgZXhwb25lbnQgYWRqdXN0c10KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246ICAgMgorcHdzeDIyMDEgIHBvd2VyIDAuMSAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDIgIHBvd2VyIDAuMDEgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDMgIHBvd2VyIDEuMEUtMSAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDQgIHBvd2VyIDEuMDBFLTIgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDUgIHBvd2VyIDFFLTMgIDAuNSAtPiAwLjAzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIwNiAgcG93ZXIgMUUrMSAgMC41IC0+IDMuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIwNyAgcG93ZXIgMUUrMiAgMC41IC0+IDEwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDggIHBvd2VyIDFFKzMgIDAuNSAtPiAzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIwOSAgcG93ZXIgMC4yICAwLjUgLT4gMC40NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxMCAgcG93ZXIgMC4wMiAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTEgIHBvd2VyIDIuMEUtMSAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTIgIHBvd2VyIDIuMDBFLTIgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjEzICBwb3dlciAyRS0zICAwLjUgLT4gMC4wNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTQgIHBvd2VyIDJFKzEgIDAuNSAtPiA0LjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTUgIHBvd2VyIDJFKzIgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxNiAgcG93ZXIgMkUrMyAgMC41IC0+IDQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjE3ICBwb3dlciAwLjMgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjE4ICBwb3dlciAwLjAzICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxOSAgcG93ZXIgMy4wRS0xICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIyMCAgcG93ZXIgMy4wMEUtMiAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjEgIHBvd2VyIDNFLTMgIDAuNSAtPiAwLjA1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIyMiAgcG93ZXIgM0UrMSAgMC41IC0+IDUuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIyMyAgcG93ZXIgM0UrMiAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI0ICBwb3dlciAzRSszICAwLjUgLT4gNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjUgIHBvd2VyIDAuNCAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjYgIHBvd2VyIDAuMDQgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjcgIHBvd2VyIDQuMEUtMSAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjggIHBvd2VyIDQuMDBFLTIgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjkgIHBvd2VyIDRFLTMgIDAuNSAtPiAwLjA2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIzMCAgcG93ZXIgNEUrMSAgMC41IC0+IDYuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIzMSAgcG93ZXIgNEUrMiAgMC41IC0+IDIwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzIgIHBvd2VyIDRFKzMgIDAuNSAtPiA2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIzMyAgcG93ZXIgMC41ICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIzNCAgcG93ZXIgMC4wNSAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzUgIHBvd2VyIDUuMEUtMSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzYgIHBvd2VyIDUuMDBFLTIgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjM3ICBwb3dlciA1RS0zICAwLjUgLT4gMC4wNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzggIHBvd2VyIDVFKzEgIDAuNSAtPiA3LjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzkgIHBvd2VyIDVFKzIgIDAuNSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0MCAgcG93ZXIgNUUrMyAgMC41IC0+IDcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjQxICBwb3dlciAwLjYgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjQyICBwb3dlciAwLjA2ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0MyAgcG93ZXIgNi4wRS0xICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0NCAgcG93ZXIgNi4wMEUtMiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDUgIHBvd2VyIDZFLTMgIDAuNSAtPiAwLjA3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0NiAgcG93ZXIgNkUrMSAgMC41IC0+IDcuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0NyAgcG93ZXIgNkUrMiAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjQ4ICBwb3dlciA2RSszICAwLjUgLT4gNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDkgIHBvd2VyIDAuNyAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTAgIHBvd2VyIDAuMDcgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjUxICBwb3dlciA3LjBFLTEgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjUyICBwb3dlciA3LjAwRS0yICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1MyAgcG93ZXIgN0UtMyAgMC41IC0+IDAuMDg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjU0ICBwb3dlciA3RSsxICAwLjUgLT4gOC40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjU1ICBwb3dlciA3RSsyICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTYgIHBvd2VyIDdFKzMgIDAuNSAtPiA4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1NyAgcG93ZXIgMC44ICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1OCAgcG93ZXIgMC4wOCAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTkgIHBvd2VyIDguMEUtMSAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjAgIHBvd2VyIDguMDBFLTIgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjYxICBwb3dlciA4RS0zICAwLjUgLT4gMC4wODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjIgIHBvd2VyIDhFKzEgIDAuNSAtPiA4LjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjMgIHBvd2VyIDhFKzIgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2NCAgcG93ZXIgOEUrMyAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjY1ICBwb3dlciAwLjkgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjY2ICBwb3dlciAwLjA5ICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2NyAgcG93ZXIgOS4wRS0xICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2OCAgcG93ZXIgOS4wMEUtMiAgMC41IC0+IDAuMzAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2OSAgcG93ZXIgOUUtMyAgMC41IC0+IDAuMDk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjcwICBwb3dlciA5RSsxICAwLjUgLT4gOS41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjcxICBwb3dlciA5RSsyICAwLjUgLT4gMzAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3MiAgcG93ZXIgOUUrMyAgMC41IC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjczICBwb3dlciAwLjEwICAwLjUgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3NCAgcG93ZXIgMC4wMTAgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNzUgIHBvd2VyIDEwLjBFLTEgIDAuNSAtPiAxLjAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3NiAgcG93ZXIgMTAuMDBFLTIgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjc3ICBwb3dlciAxMEUtMyAgMC41IC0+IDAuMTAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3OCAgcG93ZXIgMTBFKzEgIDAuNSAtPiAxMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjc5ICBwb3dlciAxMEUrMiAgMC41IC0+IDMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjgwICBwb3dlciAxMEUrMyAgMC41IC0+IDEuMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjgxICBwb3dlciAwLjExICAwLjUgLT4gMC4zMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4MiAgcG93ZXIgMC4wMTEgIDAuNSAtPiAwLjEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjgzICBwb3dlciAxMS4wRS0xICAwLjUgLT4gMS4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjg0ICBwb3dlciAxMS4wMEUtMiAgMC41IC0+IDAuMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODUgIHBvd2VyIDExRS0zICAwLjUgLT4gMC4xMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4NiAgcG93ZXIgMTFFKzEgIDAuNSAtPiAxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4NyAgcG93ZXIgMTFFKzIgIDAuNSAtPiAzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4OCAgcG93ZXIgMTFFKzMgIDAuNSAtPiAxLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODkgIHBvd2VyIDAuMTIgIDAuNSAtPiAwLjM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjkwICBwb3dlciAwLjAxMiAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTEgIHBvd2VyIDEyLjBFLTEgIDAuNSAtPiAxLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTIgIHBvd2VyIDEyLjAwRS0yICAwLjUgLT4gMC4zNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5MyAgcG93ZXIgMTJFLTMgIDAuNSAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjk0ICBwb3dlciAxMkUrMSAgMC41IC0+IDExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjk1ICBwb3dlciAxMkUrMiAgMC41IC0+IDM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjk2ICBwb3dlciAxMkUrMyAgMC41IC0+IDEuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5NyAgcG93ZXIgMC4xMyAgMC41IC0+IDAuMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTggIHBvd2VyIDAuMDEzICAwLjUgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5OSAgcG93ZXIgMTMuMEUtMSAgMC41IC0+IDEuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwMCAgcG93ZXIgMTMuMDBFLTIgIDAuNSAtPiAwLjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzAxICBwb3dlciAxM0UtMyAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDIgIHBvd2VyIDEzRSsxICAwLjUgLT4gMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDMgIHBvd2VyIDEzRSsyICAwLjUgLT4gMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDQgIHBvd2VyIDEzRSszICAwLjUgLT4gMS4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzA1ICBwb3dlciAwLjE0ICAwLjUgLT4gMC4zNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwNiAgcG93ZXIgMC4wMTQgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzA3ICBwb3dlciAxNC4wRS0xICAwLjUgLT4gMS4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzA4ICBwb3dlciAxNC4wMEUtMiAgMC41IC0+IDAuMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDkgIHBvd2VyIDE0RS0zICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxMCAgcG93ZXIgMTRFKzEgIDAuNSAtPiAxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxMSAgcG93ZXIgMTRFKzIgIDAuNSAtPiAzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxMiAgcG93ZXIgMTRFKzMgIDAuNSAtPiAxLjJFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTMgIHBvd2VyIDAuMTUgIDAuNSAtPiAwLjM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzE0ICBwb3dlciAwLjAxNSAgMC41IC0+IDAuMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTUgIHBvd2VyIDE1LjBFLTEgIDAuNSAtPiAxLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTYgIHBvd2VyIDE1LjAwRS0yICAwLjUgLT4gMC4zOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxNyAgcG93ZXIgMTVFLTMgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzE4ICBwb3dlciAxNUUrMSAgMC41IC0+IDEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzE5ICBwb3dlciAxNUUrMiAgMC41IC0+IDM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzIwICBwb3dlciAxNUUrMyAgMC41IC0+IDEuMkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyMSAgcG93ZXIgMC4xNiAgMC41IC0+IDAuNDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyMiAgcG93ZXIgMC4wMTYgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzIzICBwb3dlciAxNi4wRS0xICAwLjUgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzI0ICBwb3dlciAxNi4wMEUtMiAgMC41IC0+IDAuNDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyNSAgcG93ZXIgMTZFLTMgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzI2ICBwb3dlciAxNkUrMSAgMC41IC0+IDEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzI3ICBwb3dlciAxNkUrMiAgMC41IC0+IDQwIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMjggIHBvd2VyIDE2RSszICAwLjUgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzI5ICBwb3dlciAwLjE3ICAwLjUgLT4gMC40MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzMCAgcG93ZXIgMC4wMTcgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzMxICBwb3dlciAxNy4wRS0xICAwLjUgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzMyICBwb3dlciAxNy4wMEUtMiAgMC41IC0+IDAuNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzMgIHBvd2VyIDE3RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzNCAgcG93ZXIgMTdFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzNSAgcG93ZXIgMTdFKzIgIDAuNSAtPiA0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzNiAgcG93ZXIgMTdFKzMgIDAuNSAtPiAxLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzcgIHBvd2VyIDAuMTggIDAuNSAtPiAwLjQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzM4ICBwb3dlciAwLjAxOCAgMC41IC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzkgIHBvd2VyIDE4LjBFLTEgIDAuNSAtPiAxLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDAgIHBvd2VyIDE4LjAwRS0yICAwLjUgLT4gMC40MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0MSAgcG93ZXIgMThFLTMgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQyICBwb3dlciAxOEUrMSAgMC41IC0+IDEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQzICBwb3dlciAxOEUrMiAgMC41IC0+IDQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQ0ICBwb3dlciAxOEUrMyAgMC41IC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0NSAgcG93ZXIgMC4xOSAgMC41IC0+IDAuNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDYgIHBvd2VyIDAuMDE5ICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0NyAgcG93ZXIgMTkuMEUtMSAgMC41IC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0OCAgcG93ZXIgMTkuMDBFLTIgIDAuNSAtPiAwLjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQ5ICBwb3dlciAxOUUtMyAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTAgIHBvd2VyIDE5RSsxICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTEgIHBvd2VyIDE5RSsyICAwLjUgLT4gNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTIgIHBvd2VyIDE5RSszICAwLjUgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzUzICBwb3dlciAwLjIwICAwLjUgLT4gMC40NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1NCAgcG93ZXIgMC4wMjAgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzU1ICBwb3dlciAyMC4wRS0xICAwLjUgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzU2ICBwb3dlciAyMC4wMEUtMiAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTcgIHBvd2VyIDIwRS0zICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1OCAgcG93ZXIgMjBFKzEgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1OSAgcG93ZXIgMjBFKzIgIDAuNSAtPiA0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2MCAgcG93ZXIgMjBFKzMgIDAuNSAtPiAxLjRFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjEgIHBvd2VyIDAuMjEgIDAuNSAtPiAwLjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzYyICBwb3dlciAwLjAyMSAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjMgIHBvd2VyIDIxLjBFLTEgIDAuNSAtPiAxLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjQgIHBvd2VyIDIxLjAwRS0yICAwLjUgLT4gMC40NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2NSAgcG93ZXIgMjFFLTMgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzY2ICBwb3dlciAyMUUrMSAgMC41IC0+IDE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzY3ICBwb3dlciAyMUUrMiAgMC41IC0+IDQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzY4ICBwb3dlciAyMUUrMyAgMC41IC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2OSAgcG93ZXIgMC4yMiAgMC41IC0+IDAuNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzAgIHBvd2VyIDAuMDIyICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3MSAgcG93ZXIgMjIuMEUtMSAgMC41IC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3MiAgcG93ZXIgMjIuMDBFLTIgIDAuNSAtPiAwLjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzczICBwb3dlciAyMkUtMyAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzQgIHBvd2VyIDIyRSsxICAwLjUgLT4gMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzUgIHBvd2VyIDIyRSsyICAwLjUgLT4gNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzYgIHBvd2VyIDIyRSszICAwLjUgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzc3ICBwb3dlciAwLjIzICAwLjUgLT4gMC40OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3OCAgcG93ZXIgMC4wMjMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzc5ICBwb3dlciAyMy4wRS0xICAwLjUgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzgwICBwb3dlciAyMy4wMEUtMiAgMC41IC0+IDAuNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODEgIHBvd2VyIDIzRS0zICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4MiAgcG93ZXIgMjNFKzEgIDAuNSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4MyAgcG93ZXIgMjNFKzIgIDAuNSAtPiA0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4NCAgcG93ZXIgMjNFKzMgIDAuNSAtPiAxLjVFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODUgIHBvd2VyIDAuMjQgIDAuNSAtPiAwLjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzg2ICBwb3dlciAwLjAyNCAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODcgIHBvd2VyIDI0LjBFLTEgIDAuNSAtPiAxLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODggIHBvd2VyIDI0LjAwRS0yICAwLjUgLT4gMC40OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4OSAgcG93ZXIgMjRFLTMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzkwICBwb3dlciAyNEUrMSAgMC41IC0+IDE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzkxICBwb3dlciAyNEUrMiAgMC41IC0+IDQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzkyICBwb3dlciAyNEUrMyAgMC41IC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5MyAgcG93ZXIgMC4yNSAgMC41IC0+IDAuNTAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5NCAgcG93ZXIgMC4wMjUgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzk1ICBwb3dlciAyNS4wRS0xICAwLjUgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzk2ICBwb3dlciAyNS4wMEUtMiAgMC41IC0+IDAuNTAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5NyAgcG93ZXIgMjVFLTMgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzk4ICBwb3dlciAyNUUrMSAgMC41IC0+IDE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzk5ICBwb3dlciAyNUUrMiAgMC41IC0+IDUwIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDAgIHBvd2VyIDI1RSszICAwLjUgLT4gMS42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDAxICBwb3dlciAwLjI2ICAwLjUgLT4gMC41MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwMiAgcG93ZXIgMC4wMjYgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDAzICBwb3dlciAyNi4wRS0xICAwLjUgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDA0ICBwb3dlciAyNi4wMEUtMiAgMC41IC0+IDAuNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDUgIHBvd2VyIDI2RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwNiAgcG93ZXIgMjZFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwNyAgcG93ZXIgMjZFKzIgIDAuNSAtPiA1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwOCAgcG93ZXIgMjZFKzMgIDAuNSAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDkgIHBvd2VyIDAuMjcgIDAuNSAtPiAwLjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDEwICBwb3dlciAwLjAyNyAgMC41IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTEgIHBvd2VyIDI3LjBFLTEgIDAuNSAtPiAxLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTIgIHBvd2VyIDI3LjAwRS0yICAwLjUgLT4gMC41MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxMyAgcG93ZXIgMjdFLTMgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDE0ICBwb3dlciAyN0UrMSAgMC41IC0+IDE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDE1ICBwb3dlciAyN0UrMiAgMC41IC0+IDUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDE2ICBwb3dlciAyN0UrMyAgMC41IC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxNyAgcG93ZXIgMC4yOCAgMC41IC0+IDAuNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTggIHBvd2VyIDAuMDI4ICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxOSAgcG93ZXIgMjguMEUtMSAgMC41IC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyMCAgcG93ZXIgMjguMDBFLTIgIDAuNSAtPiAwLjUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDIxICBwb3dlciAyOEUtMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjIgIHBvd2VyIDI4RSsxICAwLjUgLT4gMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjMgIHBvd2VyIDI4RSsyICAwLjUgLT4gNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjQgIHBvd2VyIDI4RSszICAwLjUgLT4gMS43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDI1ICBwb3dlciAwLjI5ICAwLjUgLT4gMC41NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyNiAgcG93ZXIgMC4wMjkgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDI3ICBwb3dlciAyOS4wRS0xICAwLjUgLT4gMS43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDI4ICBwb3dlciAyOS4wMEUtMiAgMC41IC0+IDAuNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjkgIHBvd2VyIDI5RS0zICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzMCAgcG93ZXIgMjlFKzEgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzMSAgcG93ZXIgMjlFKzIgIDAuNSAtPiA1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzMiAgcG93ZXIgMjlFKzMgIDAuNSAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzMgIHBvd2VyIDAuMzAgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDM0ICBwb3dlciAwLjAzMCAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzUgIHBvd2VyIDMwLjBFLTEgIDAuNSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzYgIHBvd2VyIDMwLjAwRS0yICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzNyAgcG93ZXIgMzBFLTMgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDM4ICBwb3dlciAzMEUrMSAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDM5ICBwb3dlciAzMEUrMiAgMC41IC0+IDU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQwICBwb3dlciAzMEUrMyAgMC41IC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0MSAgcG93ZXIgMC4zMSAgMC41IC0+IDAuNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDIgIHBvd2VyIDAuMDMxICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0MyAgcG93ZXIgMzEuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0NCAgcG93ZXIgMzEuMDBFLTIgIDAuNSAtPiAwLjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQ1ICBwb3dlciAzMUUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDYgIHBvd2VyIDMxRSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDcgIHBvd2VyIDMxRSsyICAwLjUgLT4gNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDggIHBvd2VyIDMxRSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQ5ICBwb3dlciAwLjMyICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1MCAgcG93ZXIgMC4wMzIgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDUxICBwb3dlciAzMi4wRS0xICAwLjUgLT4gMS44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDUyICBwb3dlciAzMi4wMEUtMiAgMC41IC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTMgIHBvd2VyIDMyRS0zICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1NCAgcG93ZXIgMzJFKzEgIDAuNSAtPiAxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1NSAgcG93ZXIgMzJFKzIgIDAuNSAtPiA1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1NiAgcG93ZXIgMzJFKzMgIDAuNSAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTcgIHBvd2VyIDAuMzMgIDAuNSAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDU4ICBwb3dlciAwLjAzMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTkgIHBvd2VyIDMzLjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjAgIHBvd2VyIDMzLjAwRS0yICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2MSAgcG93ZXIgMzNFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDYyICBwb3dlciAzM0UrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDYzICBwb3dlciAzM0UrMiAgMC41IC0+IDU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDY0ICBwb3dlciAzM0UrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2NSAgcG93ZXIgMC4zNCAgMC41IC0+IDAuNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjYgIHBvd2VyIDAuMDM0ICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2NyAgcG93ZXIgMzQuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2OCAgcG93ZXIgMzQuMDBFLTIgIDAuNSAtPiAwLjU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDY5ICBwb3dlciAzNEUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzAgIHBvd2VyIDM0RSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzEgIHBvd2VyIDM0RSsyICAwLjUgLT4gNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzIgIHBvd2VyIDM0RSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDczICBwb3dlciAwLjM1ICAwLjUgLT4gMC41OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3NCAgcG93ZXIgMC4wMzUgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDc1ICBwb3dlciAzNS4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDc2ICBwb3dlciAzNS4wMEUtMiAgMC41IC0+IDAuNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzcgIHBvd2VyIDM1RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3OCAgcG93ZXIgMzVFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3OSAgcG93ZXIgMzVFKzIgIDAuNSAtPiA1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4MCAgcG93ZXIgMzVFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODEgIHBvd2VyIDAuMzYgIDAuNSAtPiAwLjYwIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODIgIHBvd2VyIDAuMDM2ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4MyAgcG93ZXIgMzYuMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4NCAgcG93ZXIgMzYuMDBFLTIgIDAuNSAtPiAwLjYwIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODUgIHBvd2VyIDM2RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4NiAgcG93ZXIgMzZFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4NyAgcG93ZXIgMzZFKzIgIDAuNSAtPiA2MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDg4ICBwb3dlciAzNkUrMyAgMC41IC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4OSAgcG93ZXIgMC4zNyAgMC41IC0+IDAuNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTAgIHBvd2VyIDAuMDM3ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5MSAgcG93ZXIgMzcuMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5MiAgcG93ZXIgMzcuMDBFLTIgIDAuNSAtPiAwLjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDkzICBwb3dlciAzN0UtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTQgIHBvd2VyIDM3RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTUgIHBvd2VyIDM3RSsyICAwLjUgLT4gNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTYgIHBvd2VyIDM3RSszICAwLjUgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDk3ICBwb3dlciAwLjM4ICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5OCAgcG93ZXIgMC4wMzggIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDk5ICBwb3dlciAzOC4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTAwICBwb3dlciAzOC4wMEUtMiAgMC41IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDEgIHBvd2VyIDM4RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwMiAgcG93ZXIgMzhFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwMyAgcG93ZXIgMzhFKzIgIDAuNSAtPiA2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwNCAgcG93ZXIgMzhFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDUgIHBvd2VyIDAuMzkgIDAuNSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTA2ICBwb3dlciAwLjAzOSAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDcgIHBvd2VyIDM5LjBFLTEgIDAuNSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDggIHBvd2VyIDM5LjAwRS0yICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwOSAgcG93ZXIgMzlFLTMgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTEwICBwb3dlciAzOUUrMSAgMC41IC0+IDIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTExICBwb3dlciAzOUUrMiAgMC41IC0+IDYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTEyICBwb3dlciAzOUUrMyAgMC41IC0+IDIuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxMyAgcG93ZXIgMC40MCAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTQgIHBvd2VyIDAuMDQwICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTE1ICBwb3dlciA0MC4wRS0xICAwLjUgLT4gMi4wIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTYgIHBvd2VyIDQwLjAwRS0yICAwLjUgLT4gMC42MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxNyAgcG93ZXIgNDBFLTMgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTggIHBvd2VyIDQwRSsxICAwLjUgLT4gMjAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxOSAgcG93ZXIgNDBFKzIgIDAuNSAtPiA2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyMCAgcG93ZXIgNDBFKzMgIDAuNSAtPiAyLjBFKzIgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyMSAgcG93ZXIgMC40MSAgMC41IC0+IDAuNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjIgIHBvd2VyIDAuMDQxICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyMyAgcG93ZXIgNDEuMEUtMSAgMC41IC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyNCAgcG93ZXIgNDEuMDBFLTIgIDAuNSAtPiAwLjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTI1ICBwb3dlciA0MUUtMyAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjYgIHBvd2VyIDQxRSsxICAwLjUgLT4gMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjcgIHBvd2VyIDQxRSsyICAwLjUgLT4gNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjggIHBvd2VyIDQxRSszICAwLjUgLT4gMi4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTI5ICBwb3dlciAwLjQyICAwLjUgLT4gMC42NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzMCAgcG93ZXIgMC4wNDIgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTMxICBwb3dlciA0Mi4wRS0xICAwLjUgLT4gMi4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTMyICBwb3dlciA0Mi4wMEUtMiAgMC41IC0+IDAuNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzMgIHBvd2VyIDQyRS0zICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzNCAgcG93ZXIgNDJFKzEgIDAuNSAtPiAyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzNSAgcG93ZXIgNDJFKzIgIDAuNSAtPiA2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzNiAgcG93ZXIgNDJFKzMgIDAuNSAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzcgIHBvd2VyIDAuNDMgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTM4ICBwb3dlciAwLjA0MyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzkgIHBvd2VyIDQzLjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDAgIHBvd2VyIDQzLjAwRS0yICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0MSAgcG93ZXIgNDNFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQyICBwb3dlciA0M0UrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQzICBwb3dlciA0M0UrMiAgMC41IC0+IDY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQ0ICBwb3dlciA0M0UrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0NSAgcG93ZXIgMC40NCAgMC41IC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDYgIHBvd2VyIDAuMDQ0ICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0NyAgcG93ZXIgNDQuMEUtMSAgMC41IC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0OCAgcG93ZXIgNDQuMDBFLTIgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQ5ICBwb3dlciA0NEUtMyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTAgIHBvd2VyIDQ0RSsxICAwLjUgLT4gMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTEgIHBvd2VyIDQ0RSsyICAwLjUgLT4gNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTIgIHBvd2VyIDQ0RSszICAwLjUgLT4gMi4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTUzICBwb3dlciAwLjQ1ICAwLjUgLT4gMC42NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1NCAgcG93ZXIgMC4wNDUgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTU1ICBwb3dlciA0NS4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTU2ICBwb3dlciA0NS4wMEUtMiAgMC41IC0+IDAuNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTcgIHBvd2VyIDQ1RS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1OCAgcG93ZXIgNDVFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1OSAgcG93ZXIgNDVFKzIgIDAuNSAtPiA2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2MCAgcG93ZXIgNDVFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjEgIHBvd2VyIDAuNDYgIDAuNSAtPiAwLjY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTYyICBwb3dlciAwLjA0NiAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjMgIHBvd2VyIDQ2LjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjQgIHBvd2VyIDQ2LjAwRS0yICAwLjUgLT4gMC42OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2NSAgcG93ZXIgNDZFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTY2ICBwb3dlciA0NkUrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTY3ICBwb3dlciA0NkUrMiAgMC41IC0+IDY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTY4ICBwb3dlciA0NkUrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2OSAgcG93ZXIgMC40NyAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzAgIHBvd2VyIDAuMDQ3ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3MSAgcG93ZXIgNDcuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3MiAgcG93ZXIgNDcuMDBFLTIgIDAuNSAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTczICBwb3dlciA0N0UtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzQgIHBvd2VyIDQ3RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzUgIHBvd2VyIDQ3RSsyICAwLjUgLT4gNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzYgIHBvd2VyIDQ3RSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTc3ICBwb3dlciAwLjQ4ICAwLjUgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3OCAgcG93ZXIgMC4wNDggIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTc5ICBwb3dlciA0OC4wRS0xICAwLjUgLT4gMi4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTgwICBwb3dlciA0OC4wMEUtMiAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODEgIHBvd2VyIDQ4RS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4MiAgcG93ZXIgNDhFKzEgIDAuNSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4MyAgcG93ZXIgNDhFKzIgIDAuNSAtPiA2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4NCAgcG93ZXIgNDhFKzMgIDAuNSAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODUgIHBvd2VyIDAuNDkgIDAuNSAtPiAwLjcwIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODYgIHBvd2VyIDAuMDQ5ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4NyAgcG93ZXIgNDkuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4OCAgcG93ZXIgNDkuMDBFLTIgIDAuNSAtPiAwLjcwIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODkgIHBvd2VyIDQ5RS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5MCAgcG93ZXIgNDlFKzEgIDAuNSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5MSAgcG93ZXIgNDlFKzIgIDAuNSAtPiA3MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTkyICBwb3dlciA0OUUrMyAgMC41IC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5MyAgcG93ZXIgMC41MCAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTQgIHBvd2VyIDAuMDUwICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5NSAgcG93ZXIgNTAuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5NiAgcG93ZXIgNTAuMDBFLTIgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTk3ICBwb3dlciA1MEUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTggIHBvd2VyIDUwRSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTkgIHBvd2VyIDUwRSsyICAwLjUgLT4gNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDAgIHBvd2VyIDUwRSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjAxICBwb3dlciAwLjUxICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwMiAgcG93ZXIgMC4wNTEgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjAzICBwb3dlciA1MS4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjA0ICBwb3dlciA1MS4wMEUtMiAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDUgIHBvd2VyIDUxRS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwNiAgcG93ZXIgNTFFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwNyAgcG93ZXIgNTFFKzIgIDAuNSAtPiA3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwOCAgcG93ZXIgNTFFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDkgIHBvd2VyIDAuNTIgIDAuNSAtPiAwLjcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjEwICBwb3dlciAwLjA1MiAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTEgIHBvd2VyIDUyLjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTIgIHBvd2VyIDUyLjAwRS0yICAwLjUgLT4gMC43MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxMyAgcG93ZXIgNTJFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjE0ICBwb3dlciA1MkUrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjE1ICBwb3dlciA1MkUrMiAgMC41IC0+IDcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjE2ICBwb3dlciA1MkUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxNyAgcG93ZXIgMC41MyAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTggIHBvd2VyIDAuMDUzICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxOSAgcG93ZXIgNTMuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyMCAgcG93ZXIgNTMuMDBFLTIgIDAuNSAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjIxICBwb3dlciA1M0UtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjIgIHBvd2VyIDUzRSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjMgIHBvd2VyIDUzRSsyICAwLjUgLT4gNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjQgIHBvd2VyIDUzRSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjI1ICBwb3dlciAwLjU0ICAwLjUgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyNiAgcG93ZXIgMC4wNTQgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjI3ICBwb3dlciA1NC4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjI4ICBwb3dlciA1NC4wMEUtMiAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjkgIHBvd2VyIDU0RS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzMCAgcG93ZXIgNTRFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzMSAgcG93ZXIgNTRFKzIgIDAuNSAtPiA3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzMiAgcG93ZXIgNTRFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzMgIHBvd2VyIDAuNTUgIDAuNSAtPiAwLjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjM0ICBwb3dlciAwLjA1NSAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzUgIHBvd2VyIDU1LjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzYgIHBvd2VyIDU1LjAwRS0yICAwLjUgLT4gMC43NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzNyAgcG93ZXIgNTVFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjM4ICBwb3dlciA1NUUrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjM5ICBwb3dlciA1NUUrMiAgMC41IC0+IDc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQwICBwb3dlciA1NUUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0MSAgcG93ZXIgMC41NiAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDIgIHBvd2VyIDAuMDU2ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0MyAgcG93ZXIgNTYuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0NCAgcG93ZXIgNTYuMDBFLTIgIDAuNSAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQ1ICBwb3dlciA1NkUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDYgIHBvd2VyIDU2RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDcgIHBvd2VyIDU2RSsyICAwLjUgLT4gNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDggIHBvd2VyIDU2RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQ5ICBwb3dlciAwLjU3ICAwLjUgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1MCAgcG93ZXIgMC4wNTcgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjUxICBwb3dlciA1Ny4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjUyICBwb3dlciA1Ny4wMEUtMiAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTMgIHBvd2VyIDU3RS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1NCAgcG93ZXIgNTdFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1NSAgcG93ZXIgNTdFKzIgIDAuNSAtPiA3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1NiAgcG93ZXIgNTdFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTcgIHBvd2VyIDAuNTggIDAuNSAtPiAwLjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjU4ICBwb3dlciAwLjA1OCAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTkgIHBvd2VyIDU4LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjAgIHBvd2VyIDU4LjAwRS0yICAwLjUgLT4gMC43NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2MSAgcG93ZXIgNThFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjYyICBwb3dlciA1OEUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjYzICBwb3dlciA1OEUrMiAgMC41IC0+IDc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjY0ICBwb3dlciA1OEUrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2NSAgcG93ZXIgMC41OSAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjYgIHBvd2VyIDAuMDU5ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2NyAgcG93ZXIgNTkuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2OCAgcG93ZXIgNTkuMDBFLTIgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjY5ICBwb3dlciA1OUUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzAgIHBvd2VyIDU5RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzEgIHBvd2VyIDU5RSsyICAwLjUgLT4gNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzIgIHBvd2VyIDU5RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjczICBwb3dlciAwLjYwICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3NCAgcG93ZXIgMC4wNjAgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjc1ICBwb3dlciA2MC4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjc2ICBwb3dlciA2MC4wMEUtMiAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzcgIHBvd2VyIDYwRS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3OCAgcG93ZXIgNjBFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3OSAgcG93ZXIgNjBFKzIgIDAuNSAtPiA3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4MCAgcG93ZXIgNjBFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODEgIHBvd2VyIDAuNjEgIDAuNSAtPiAwLjc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjgyICBwb3dlciAwLjA2MSAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODMgIHBvd2VyIDYxLjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODQgIHBvd2VyIDYxLjAwRS0yICAwLjUgLT4gMC43OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4NSAgcG93ZXIgNjFFLTMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjg2ICBwb3dlciA2MUUrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjg3ICBwb3dlciA2MUUrMiAgMC41IC0+IDc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjg4ICBwb3dlciA2MUUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4OSAgcG93ZXIgMC42MiAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTAgIHBvd2VyIDAuMDYyICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5MSAgcG93ZXIgNjIuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5MiAgcG93ZXIgNjIuMDBFLTIgIDAuNSAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjkzICBwb3dlciA2MkUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTQgIHBvd2VyIDYyRSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTUgIHBvd2VyIDYyRSsyICAwLjUgLT4gNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTYgIHBvd2VyIDYyRSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjk3ICBwb3dlciAwLjYzICAwLjUgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5OCAgcG93ZXIgMC4wNjMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjk5ICBwb3dlciA2My4wRS0xICAwLjUgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzAwICBwb3dlciA2My4wMEUtMiAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDEgIHBvd2VyIDYzRS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwMiAgcG93ZXIgNjNFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwMyAgcG93ZXIgNjNFKzIgIDAuNSAtPiA3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwNCAgcG93ZXIgNjNFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDUgIHBvd2VyIDAuNjQgIDAuNSAtPiAwLjgwIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDYgIHBvd2VyIDAuMDY0ICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwNyAgcG93ZXIgNjQuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwOCAgcG93ZXIgNjQuMDBFLTIgIDAuNSAtPiAwLjgwIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDkgIHBvd2VyIDY0RS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxMCAgcG93ZXIgNjRFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxMSAgcG93ZXIgNjRFKzIgIDAuNSAtPiA4MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzEyICBwb3dlciA2NEUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxMyAgcG93ZXIgMC42NSAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTQgIHBvd2VyIDAuMDY1ICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxNSAgcG93ZXIgNjUuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxNiAgcG93ZXIgNjUuMDBFLTIgIDAuNSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzE3ICBwb3dlciA2NUUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTggIHBvd2VyIDY1RSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTkgIHBvd2VyIDY1RSsyICAwLjUgLT4gODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjAgIHBvd2VyIDY1RSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzIxICBwb3dlciAwLjY2ICAwLjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyMiAgcG93ZXIgMC4wNjYgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzIzICBwb3dlciA2Ni4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzI0ICBwb3dlciA2Ni4wMEUtMiAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjUgIHBvd2VyIDY2RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyNiAgcG93ZXIgNjZFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyNyAgcG93ZXIgNjZFKzIgIDAuNSAtPiA4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyOCAgcG93ZXIgNjZFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjkgIHBvd2VyIDAuNjcgIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzMwICBwb3dlciAwLjA2NyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzEgIHBvd2VyIDY3LjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzIgIHBvd2VyIDY3LjAwRS0yICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczMyAgcG93ZXIgNjdFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzM0ICBwb3dlciA2N0UrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzM1ICBwb3dlciA2N0UrMiAgMC41IC0+IDgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzM2ICBwb3dlciA2N0UrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczNyAgcG93ZXIgMC42OCAgMC41IC0+IDAuODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzggIHBvd2VyIDAuMDY4ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczOSAgcG93ZXIgNjguMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0MCAgcG93ZXIgNjguMDBFLTIgIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQxICBwb3dlciA2OEUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDIgIHBvd2VyIDY4RSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDMgIHBvd2VyIDY4RSsyICAwLjUgLT4gODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDQgIHBvd2VyIDY4RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQ1ICBwb3dlciAwLjY5ICAwLjUgLT4gMC44MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0NiAgcG93ZXIgMC4wNjkgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQ3ICBwb3dlciA2OS4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQ4ICBwb3dlciA2OS4wMEUtMiAgMC41IC0+IDAuODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDkgIHBvd2VyIDY5RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1MCAgcG93ZXIgNjlFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1MSAgcG93ZXIgNjlFKzIgIDAuNSAtPiA4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1MiAgcG93ZXIgNjlFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTMgIHBvd2VyIDAuNzAgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzU0ICBwb3dlciAwLjA3MCAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTUgIHBvd2VyIDcwLjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTYgIHBvd2VyIDcwLjAwRS0yICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1NyAgcG93ZXIgNzBFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzU4ICBwb3dlciA3MEUrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzU5ICBwb3dlciA3MEUrMiAgMC41IC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzYwICBwb3dlciA3MEUrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2MSAgcG93ZXIgMC43MSAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjIgIHBvd2VyIDAuMDcxICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2MyAgcG93ZXIgNzEuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2NCAgcG93ZXIgNzEuMDBFLTIgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzY1ICBwb3dlciA3MUUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjYgIHBvd2VyIDcxRSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjcgIHBvd2VyIDcxRSsyICAwLjUgLT4gODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjggIHBvd2VyIDcxRSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzY5ICBwb3dlciAwLjcyICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3MCAgcG93ZXIgMC4wNzIgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzcxICBwb3dlciA3Mi4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzcyICBwb3dlciA3Mi4wMEUtMiAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzMgIHBvd2VyIDcyRS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3NCAgcG93ZXIgNzJFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3NSAgcG93ZXIgNzJFKzIgIDAuNSAtPiA4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3NiAgcG93ZXIgNzJFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzcgIHBvd2VyIDAuNzMgIDAuNSAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzc4ICBwb3dlciAwLjA3MyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzkgIHBvd2VyIDczLjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODAgIHBvd2VyIDczLjAwRS0yICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4MSAgcG93ZXIgNzNFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzgyICBwb3dlciA3M0UrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzgzICBwb3dlciA3M0UrMiAgMC41IC0+IDg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzg0ICBwb3dlciA3M0UrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4NSAgcG93ZXIgMC43NCAgMC41IC0+IDAuODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODYgIHBvd2VyIDAuMDc0ICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4NyAgcG93ZXIgNzQuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4OCAgcG93ZXIgNzQuMDBFLTIgIDAuNSAtPiAwLjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzg5ICBwb3dlciA3NEUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTAgIHBvd2VyIDc0RSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTEgIHBvd2VyIDc0RSsyICAwLjUgLT4gODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTIgIHBvd2VyIDc0RSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzkzICBwb3dlciAwLjc1ICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5NCAgcG93ZXIgMC4wNzUgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzk1ICBwb3dlciA3NS4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzk2ICBwb3dlciA3NS4wMEUtMiAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTcgIHBvd2VyIDc1RS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5OCAgcG93ZXIgNzVFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5OSAgcG93ZXIgNzVFKzIgIDAuNSAtPiA4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwMCAgcG93ZXIgNzVFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDEgIHBvd2VyIDAuNzYgIDAuNSAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODAyICBwb3dlciAwLjA3NiAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDMgIHBvd2VyIDc2LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDQgIHBvd2VyIDc2LjAwRS0yICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwNSAgcG93ZXIgNzZFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODA2ICBwb3dlciA3NkUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODA3ICBwb3dlciA3NkUrMiAgMC41IC0+IDg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODA4ICBwb3dlciA3NkUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwOSAgcG93ZXIgMC43NyAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTAgIHBvd2VyIDAuMDc3ICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxMSAgcG93ZXIgNzcuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxMiAgcG93ZXIgNzcuMDBFLTIgIDAuNSAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODEzICBwb3dlciA3N0UtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTQgIHBvd2VyIDc3RSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTUgIHBvd2VyIDc3RSsyICAwLjUgLT4gODggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTYgIHBvd2VyIDc3RSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODE3ICBwb3dlciAwLjc4ICAwLjUgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxOCAgcG93ZXIgMC4wNzggIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODE5ICBwb3dlciA3OC4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODIwICBwb3dlciA3OC4wMEUtMiAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjEgIHBvd2VyIDc4RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyMiAgcG93ZXIgNzhFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyMyAgcG93ZXIgNzhFKzIgIDAuNSAtPiA4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyNCAgcG93ZXIgNzhFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjUgIHBvd2VyIDAuNzkgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODI2ICBwb3dlciAwLjA3OSAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjcgIHBvd2VyIDc5LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjggIHBvd2VyIDc5LjAwRS0yICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyOSAgcG93ZXIgNzlFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODMwICBwb3dlciA3OUUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODMxICBwb3dlciA3OUUrMiAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODMyICBwb3dlciA3OUUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzMyAgcG93ZXIgMC44MCAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzQgIHBvd2VyIDAuMDgwICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzNSAgcG93ZXIgODAuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzNiAgcG93ZXIgODAuMDBFLTIgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODM3ICBwb3dlciA4MEUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzggIHBvd2VyIDgwRSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzkgIHBvd2VyIDgwRSsyICAwLjUgLT4gODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDAgIHBvd2VyIDgwRSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQxICBwb3dlciAwLjgxICAwLjUgLT4gMC45MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQyICBwb3dlciAwLjA4MSAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDMgIHBvd2VyIDgxLjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDQgIHBvd2VyIDgxLjAwRS0yICAwLjUgLT4gMC45MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQ1ICBwb3dlciA4MUUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDYgIHBvd2VyIDgxRSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDcgIHBvd2VyIDgxRSsyICAwLjUgLT4gOTAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg0OCAgcG93ZXIgODFFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDkgIHBvd2VyIDAuODIgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODUwICBwb3dlciAwLjA4MiAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTEgIHBvd2VyIDgyLjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTIgIHBvd2VyIDgyLjAwRS0yICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1MyAgcG93ZXIgODJFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODU0ICBwb3dlciA4MkUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODU1ICBwb3dlciA4MkUrMiAgMC41IC0+IDkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODU2ICBwb3dlciA4MkUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1NyAgcG93ZXIgMC44MyAgMC41IC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTggIHBvd2VyIDAuMDgzICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1OSAgcG93ZXIgODMuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2MCAgcG93ZXIgODMuMDBFLTIgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODYxICBwb3dlciA4M0UtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjIgIHBvd2VyIDgzRSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjMgIHBvd2VyIDgzRSsyICAwLjUgLT4gOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjQgIHBvd2VyIDgzRSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODY1ICBwb3dlciAwLjg0ICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2NiAgcG93ZXIgMC4wODQgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODY3ICBwb3dlciA4NC4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODY4ICBwb3dlciA4NC4wMEUtMiAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjkgIHBvd2VyIDg0RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3MCAgcG93ZXIgODRFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3MSAgcG93ZXIgODRFKzIgIDAuNSAtPiA5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3MiAgcG93ZXIgODRFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzMgIHBvd2VyIDAuODUgIDAuNSAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODc0ICBwb3dlciAwLjA4NSAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzUgIHBvd2VyIDg1LjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzYgIHBvd2VyIDg1LjAwRS0yICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3NyAgcG93ZXIgODVFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODc4ICBwb3dlciA4NUUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODc5ICBwb3dlciA4NUUrMiAgMC41IC0+IDkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODgwICBwb3dlciA4NUUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4MSAgcG93ZXIgMC44NiAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODIgIHBvd2VyIDAuMDg2ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4MyAgcG93ZXIgODYuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4NCAgcG93ZXIgODYuMDBFLTIgIDAuNSAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODg1ICBwb3dlciA4NkUtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODYgIHBvd2VyIDg2RSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODcgIHBvd2VyIDg2RSsyICAwLjUgLT4gOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODggIHBvd2VyIDg2RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODg5ICBwb3dlciAwLjg3ICAwLjUgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5MCAgcG93ZXIgMC4wODcgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODkxICBwb3dlciA4Ny4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODkyICBwb3dlciA4Ny4wMEUtMiAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTMgIHBvd2VyIDg3RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5NCAgcG93ZXIgODdFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5NSAgcG93ZXIgODdFKzIgIDAuNSAtPiA5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5NiAgcG93ZXIgODdFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTcgIHBvd2VyIDAuODggIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODk4ICBwb3dlciAwLjA4OCAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTkgIHBvd2VyIDg4LjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDAgIHBvd2VyIDg4LjAwRS0yICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwMSAgcG93ZXIgODhFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTAyICBwb3dlciA4OEUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTAzICBwb3dlciA4OEUrMiAgMC41IC0+IDk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTA0ICBwb3dlciA4OEUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwNSAgcG93ZXIgMC44OSAgMC41IC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDYgIHBvd2VyIDAuMDg5ICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwNyAgcG93ZXIgODkuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwOCAgcG93ZXIgODkuMDBFLTIgIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTA5ICBwb3dlciA4OUUtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTAgIHBvd2VyIDg5RSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTEgIHBvd2VyIDg5RSsyICAwLjUgLT4gOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTIgIHBvd2VyIDg5RSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTEzICBwb3dlciAwLjkwICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxNCAgcG93ZXIgMC4wOTAgIDAuNSAtPiAwLjMwIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTUgIHBvd2VyIDkwLjBFLTEgIDAuNSAtPiAzLjAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxNiAgcG93ZXIgOTAuMDBFLTIgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTE3ICBwb3dlciA5MEUtMyAgMC41IC0+IDAuMzAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxOCAgcG93ZXIgOTBFKzEgIDAuNSAtPiAzMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTE5ICBwb3dlciA5MEUrMiAgMC41IC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTIwICBwb3dlciA5MEUrMyAgMC41IC0+IDMuMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTIxICBwb3dlciAwLjkxICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyMiAgcG93ZXIgMC4wOTEgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTIzICBwb3dlciA5MS4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTI0ICBwb3dlciA5MS4wMEUtMiAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjUgIHBvd2VyIDkxRS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyNiAgcG93ZXIgOTFFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyNyAgcG93ZXIgOTFFKzIgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyOCAgcG93ZXIgOTFFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjkgIHBvd2VyIDAuOTIgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTMwICBwb3dlciAwLjA5MiAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzEgIHBvd2VyIDkyLjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzIgIHBvd2VyIDkyLjAwRS0yICAwLjUgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzMyAgcG93ZXIgOTJFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTM0ICBwb3dlciA5MkUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTM1ICBwb3dlciA5MkUrMiAgMC41IC0+IDk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTM2ICBwb3dlciA5MkUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzNyAgcG93ZXIgMC45MyAgMC41IC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzggIHBvd2VyIDAuMDkzICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzOSAgcG93ZXIgOTMuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0MCAgcG93ZXIgOTMuMDBFLTIgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQxICBwb3dlciA5M0UtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDIgIHBvd2VyIDkzRSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDMgIHBvd2VyIDkzRSsyICAwLjUgLT4gOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDQgIHBvd2VyIDkzRSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQ1ICBwb3dlciAwLjk0ICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0NiAgcG93ZXIgMC4wOTQgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQ3ICBwb3dlciA5NC4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQ4ICBwb3dlciA5NC4wMEUtMiAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDkgIHBvd2VyIDk0RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1MCAgcG93ZXIgOTRFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1MSAgcG93ZXIgOTRFKzIgIDAuNSAtPiA5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1MiAgcG93ZXIgOTRFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTMgIHBvd2VyIDAuOTUgIDAuNSAtPiAwLjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTU0ICBwb3dlciAwLjA5NSAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTUgIHBvd2VyIDk1LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTYgIHBvd2VyIDk1LjAwRS0yICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1NyAgcG93ZXIgOTVFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTU4ICBwb3dlciA5NUUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTU5ICBwb3dlciA5NUUrMiAgMC41IC0+IDk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTYwICBwb3dlciA5NUUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2MSAgcG93ZXIgMC45NiAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjIgIHBvd2VyIDAuMDk2ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2MyAgcG93ZXIgOTYuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2NCAgcG93ZXIgOTYuMDBFLTIgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTY1ICBwb3dlciA5NkUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjYgIHBvd2VyIDk2RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjcgIHBvd2VyIDk2RSsyICAwLjUgLT4gOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjggIHBvd2VyIDk2RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTY5ICBwb3dlciAwLjk3ICAwLjUgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3MCAgcG93ZXIgMC4wOTcgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTcxICBwb3dlciA5Ny4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTcyICBwb3dlciA5Ny4wMEUtMiAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzMgIHBvd2VyIDk3RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3NCAgcG93ZXIgOTdFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3NSAgcG93ZXIgOTdFKzIgIDAuNSAtPiA5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3NiAgcG93ZXIgOTdFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzcgIHBvd2VyIDAuOTggIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTc4ICBwb3dlciAwLjA5OCAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzkgIHBvd2VyIDk4LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODAgIHBvd2VyIDk4LjAwRS0yICAwLjUgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4MSAgcG93ZXIgOThFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTgyICBwb3dlciA5OEUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTgzICBwb3dlciA5OEUrMiAgMC41IC0+IDk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTg0ICBwb3dlciA5OEUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4NSAgcG93ZXIgMC45OSAgMC41IC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODYgIHBvd2VyIDAuMDk5ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4NyAgcG93ZXIgOTkuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4OCAgcG93ZXIgOTkuMDBFLTIgIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTg5ICBwb3dlciA5OUUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5OTAgIHBvd2VyIDk5RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5OTEgIHBvd2VyIDk5RSsyICAwLjUgLT4gOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5OTIgIHBvd2VyIDk5RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKKworLS0gUHJlY2lzaW9uIDMgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgZiBhbmQgZi8xMF0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246ICAgMworcHdzeDMwMDEgIHBvd2VyIDAuMSAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMDMgIHBvd2VyIDAuMiAgMC41IC0+IDAuNDQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA0ICBwb3dlciAwLjAyICAwLjUgLT4gMC4xNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMDUgIHBvd2VyIDAuMyAgMC41IC0+IDAuNTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA2ICBwb3dlciAwLjAzICAwLjUgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMDcgIHBvd2VyIDAuNCAgMC41IC0+IDAuNjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA4ICBwb3dlciAwLjA0ICAwLjUgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMDkgIHBvd2VyIDAuNSAgMC41IC0+IDAuNzA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDEwICBwb3dlciAwLjA1ICAwLjUgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMTEgIHBvd2VyIDAuNiAgMC41IC0+IDAuNzc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDEyICBwb3dlciAwLjA2ICAwLjUgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMTMgIHBvd2VyIDAuNyAgMC41IC0+IDAuODM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE0ICBwb3dlciAwLjA3ICAwLjUgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMTUgIHBvd2VyIDAuOCAgMC41IC0+IDAuODk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE2ICBwb3dlciAwLjA4ICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMTcgIHBvd2VyIDAuOSAgMC41IC0+IDAuOTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE4ICBwb3dlciAwLjA5ICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMTkgIHBvd2VyIDAuMTEgIDAuNSAtPiAwLjMzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyMCAgcG93ZXIgMC4wMTEgIDAuNSAtPiAwLjEwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyMSAgcG93ZXIgMC4xMiAgMC41IC0+IDAuMzQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDIyICBwb3dlciAwLjAxMiAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDIzICBwb3dlciAwLjEzICAwLjUgLT4gMC4zNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjQgIHBvd2VyIDAuMDEzICAwLjUgLT4gMC4xMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjUgIHBvd2VyIDAuMTQgIDAuNSAtPiAwLjM3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyNiAgcG93ZXIgMC4wMTQgIDAuNSAtPiAwLjExOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyNyAgcG93ZXIgMC4xNSAgMC41IC0+IDAuMzg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDI4ICBwb3dlciAwLjAxNSAgMC41IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDI5ICBwb3dlciAwLjE2ICAwLjUgLT4gMC40MDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzAgIHBvd2VyIDAuMDE2ICAwLjUgLT4gMC4xMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzEgIHBvd2VyIDAuMTcgIDAuNSAtPiAwLjQxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzMiAgcG93ZXIgMC4wMTcgIDAuNSAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzMyAgcG93ZXIgMC4xOCAgMC41IC0+IDAuNDI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDM0ICBwb3dlciAwLjAxOCAgMC41IC0+IDAuMTM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDM1ICBwb3dlciAwLjE5ICAwLjUgLT4gMC40MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzYgIHBvd2VyIDAuMDE5ICAwLjUgLT4gMC4xMzggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzcgIHBvd2VyIDAuMjEgIDAuNSAtPiAwLjQ1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzOCAgcG93ZXIgMC4wMjEgIDAuNSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzOSAgcG93ZXIgMC4yMiAgMC41IC0+IDAuNDY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQwICBwb3dlciAwLjAyMiAgMC41IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQxICBwb3dlciAwLjIzICAwLjUgLT4gMC40ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDIgIHBvd2VyIDAuMDIzICAwLjUgLT4gMC4xNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDMgIHBvd2VyIDAuMjQgIDAuNSAtPiAwLjQ5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0NCAgcG93ZXIgMC4wMjQgIDAuNSAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0NSAgcG93ZXIgMC4yNSAgMC41IC0+IDAuNTAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQ2ICBwb3dlciAwLjAyNSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQ3ICBwb3dlciAwLjI2ICAwLjUgLT4gMC41MTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDggIHBvd2VyIDAuMDI2ICAwLjUgLT4gMC4xNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDkgIHBvd2VyIDAuMjcgIDAuNSAtPiAwLjUyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1MCAgcG93ZXIgMC4wMjcgIDAuNSAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1MSAgcG93ZXIgMC4yOCAgMC41IC0+IDAuNTI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDUyICBwb3dlciAwLjAyOCAgMC41IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDUzICBwb3dlciAwLjI5ICAwLjUgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTQgIHBvd2VyIDAuMDI5ICAwLjUgLT4gMC4xNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTUgIHBvd2VyIDAuMzEgIDAuNSAtPiAwLjU1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1NiAgcG93ZXIgMC4wMzEgIDAuNSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1NyAgcG93ZXIgMC4zMiAgMC41IC0+IDAuNTY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDU4ICBwb3dlciAwLjAzMiAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDU5ICBwb3dlciAwLjMzICAwLjUgLT4gMC41NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjAgIHBvd2VyIDAuMDMzICAwLjUgLT4gMC4xODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjEgIHBvd2VyIDAuMzQgIDAuNSAtPiAwLjU4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2MiAgcG93ZXIgMC4wMzQgIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2MyAgcG93ZXIgMC4zNSAgMC41IC0+IDAuNTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDY0ICBwb3dlciAwLjAzNSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDY1ICBwb3dlciAwLjM2ICAwLjUgLT4gMC42MDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjYgIHBvd2VyIDAuMDM2ICAwLjUgLT4gMC4xOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjcgIHBvd2VyIDAuMzcgIDAuNSAtPiAwLjYwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2OCAgcG93ZXIgMC4wMzcgIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2OSAgcG93ZXIgMC4zOCAgMC41IC0+IDAuNjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDcwICBwb3dlciAwLjAzOCAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDcxICBwb3dlciAwLjM5ICAwLjUgLT4gMC42MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzIgIHBvd2VyIDAuMDM5ICAwLjUgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzMgIHBvd2VyIDAuNDEgIDAuNSAtPiAwLjY0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3NCAgcG93ZXIgMC4wNDEgIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3NSAgcG93ZXIgMC40MiAgMC41IC0+IDAuNjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDc2ICBwb3dlciAwLjA0MiAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDc3ICBwb3dlciAwLjQzICAwLjUgLT4gMC42NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzggIHBvd2VyIDAuMDQzICAwLjUgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzkgIHBvd2VyIDAuNDQgIDAuNSAtPiAwLjY2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4MCAgcG93ZXIgMC4wNDQgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4MSAgcG93ZXIgMC40NSAgMC41IC0+IDAuNjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDgyICBwb3dlciAwLjA0NSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDgzICBwb3dlciAwLjQ2ICAwLjUgLT4gMC42NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODQgIHBvd2VyIDAuMDQ2ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODUgIHBvd2VyIDAuNDcgIDAuNSAtPiAwLjY4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4NiAgcG93ZXIgMC4wNDcgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4NyAgcG93ZXIgMC40OCAgMC41IC0+IDAuNjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDg4ICBwb3dlciAwLjA0OCAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDg5ICBwb3dlciAwLjQ5ICAwLjUgLT4gMC43MDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTAgIHBvd2VyIDAuMDQ5ICAwLjUgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTEgIHBvd2VyIDAuNTEgIDAuNSAtPiAwLjcxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5MiAgcG93ZXIgMC4wNTEgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5MyAgcG93ZXIgMC41MiAgMC41IC0+IDAuNzIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDk0ICBwb3dlciAwLjA1MiAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDk1ICBwb3dlciAwLjUzICAwLjUgLT4gMC43MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTYgIHBvd2VyIDAuMDUzICAwLjUgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTcgIHBvd2VyIDAuNTQgIDAuNSAtPiAwLjczNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5OCAgcG93ZXIgMC4wNTQgIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5OSAgcG93ZXIgMC41NSAgMC41IC0+IDAuNzQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTAwICBwb3dlciAwLjA1NSAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTAxICBwb3dlciAwLjU2ICAwLjUgLT4gMC43NDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDIgIHBvd2VyIDAuMDU2ICAwLjUgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDMgIHBvd2VyIDAuNTcgIDAuNSAtPiAwLjc1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwNCAgcG93ZXIgMC4wNTcgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwNSAgcG93ZXIgMC41OCAgMC41IC0+IDAuNzYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTA2ICBwb3dlciAwLjA1OCAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTA3ICBwb3dlciAwLjU5ICAwLjUgLT4gMC43NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDggIHBvd2VyIDAuMDU5ICAwLjUgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDkgIHBvd2VyIDAuNjEgIDAuNSAtPiAwLjc4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExMCAgcG93ZXIgMC4wNjEgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExMSAgcG93ZXIgMC42MiAgMC41IC0+IDAuNzg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTEyICBwb3dlciAwLjA2MiAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTEzICBwb3dlciAwLjYzICAwLjUgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTQgIHBvd2VyIDAuMDYzICAwLjUgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTUgIHBvd2VyIDAuNjQgIDAuNSAtPiAwLjgwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExNiAgcG93ZXIgMC4wNjQgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExNyAgcG93ZXIgMC42NSAgMC41IC0+IDAuODA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTE4ICBwb3dlciAwLjA2NSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTE5ICBwb3dlciAwLjY2ICAwLjUgLT4gMC44MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjAgIHBvd2VyIDAuMDY2ICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjEgIHBvd2VyIDAuNjcgIDAuNSAtPiAwLjgxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyMiAgcG93ZXIgMC4wNjcgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyMyAgcG93ZXIgMC42OCAgMC41IC0+IDAuODI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTI0ICBwb3dlciAwLjA2OCAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTI1ICBwb3dlciAwLjY5ICAwLjUgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjYgIHBvd2VyIDAuMDY5ICAwLjUgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjcgIHBvd2VyIDAuNzEgIDAuNSAtPiAwLjg0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyOCAgcG93ZXIgMC4wNzEgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyOSAgcG93ZXIgMC43MiAgMC41IC0+IDAuODQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTMwICBwb3dlciAwLjA3MiAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTMxICBwb3dlciAwLjczICAwLjUgLT4gMC44NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzIgIHBvd2VyIDAuMDczICAwLjUgLT4gMC4yNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzMgIHBvd2VyIDAuNzQgIDAuNSAtPiAwLjg2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzNCAgcG93ZXIgMC4wNzQgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzNSAgcG93ZXIgMC43NSAgMC41IC0+IDAuODY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTM2ICBwb3dlciAwLjA3NSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTM3ICBwb3dlciAwLjc2ICAwLjUgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzggIHBvd2VyIDAuMDc2ICAwLjUgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzkgIHBvd2VyIDAuNzcgIDAuNSAtPiAwLjg3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0MCAgcG93ZXIgMC4wNzcgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0MSAgcG93ZXIgMC43OCAgMC41IC0+IDAuODgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQyICBwb3dlciAwLjA3OCAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQzICBwb3dlciAwLjc5ICAwLjUgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDQgIHBvd2VyIDAuMDc5ICAwLjUgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDUgIHBvd2VyIDAuODEgIDAuNSAtPiAwLjkwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0NiAgcG93ZXIgMC4wODEgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0NyAgcG93ZXIgMC44MiAgMC41IC0+IDAuOTA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQ4ICBwb3dlciAwLjA4MiAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQ5ICBwb3dlciAwLjgzICAwLjUgLT4gMC45MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTAgIHBvd2VyIDAuMDgzICAwLjUgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTEgIHBvd2VyIDAuODQgIDAuNSAtPiAwLjkxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1MiAgcG93ZXIgMC4wODQgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1MyAgcG93ZXIgMC44NSAgMC41IC0+IDAuOTIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTU0ICBwb3dlciAwLjA4NSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTU1ICBwb3dlciAwLjg2ICAwLjUgLT4gMC45MjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTYgIHBvd2VyIDAuMDg2ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTcgIHBvd2VyIDAuODcgIDAuNSAtPiAwLjkzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1OCAgcG93ZXIgMC4wODcgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1OSAgcG93ZXIgMC44OCAgMC41IC0+IDAuOTM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTYwICBwb3dlciAwLjA4OCAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTYxICBwb3dlciAwLjg5ICAwLjUgLT4gMC45NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjIgIHBvd2VyIDAuMDg5ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjMgIHBvd2VyIDAuOTEgIDAuNSAtPiAwLjk1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2NCAgcG93ZXIgMC4wOTEgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2NSAgcG93ZXIgMC45MiAgMC41IC0+IDAuOTU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTY2ICBwb3dlciAwLjA5MiAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTY3ICBwb3dlciAwLjkzICAwLjUgLT4gMC45NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjggIHBvd2VyIDAuMDkzICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjkgIHBvd2VyIDAuOTQgIDAuNSAtPiAwLjk3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3MCAgcG93ZXIgMC4wOTQgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3MSAgcG93ZXIgMC45NSAgMC41IC0+IDAuOTc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTcyICBwb3dlciAwLjA5NSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTczICBwb3dlciAwLjk2ICAwLjUgLT4gMC45ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzQgIHBvd2VyIDAuMDk2ICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzUgIHBvd2VyIDAuOTcgIDAuNSAtPiAwLjk4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3NiAgcG93ZXIgMC4wOTcgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3NyAgcG93ZXIgMC45OCAgMC41IC0+IDAuOTkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTc4ICBwb3dlciAwLjA5OCAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTc5ICBwb3dlciAwLjk5ICAwLjUgLT4gMC45OTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODAgIHBvd2VyIDAuMDk5ICAwLjUgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODEgIHBvd2VyIDAuMTAxICAwLjUgLT4gMC4zMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODIgIHBvd2VyIDAuMDEwMSAgMC41IC0+IDAuMTAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTgzICBwb3dlciAwLjEwMiAgMC41IC0+IDAuMzE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTg0ICBwb3dlciAwLjAxMDIgIDAuNSAtPiAwLjEwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE4NSAgcG93ZXIgMC4xMDMgIDAuNSAtPiAwLjMyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE4NiAgcG93ZXIgMC4wMTAzICAwLjUgLT4gMC4xMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODcgIHBvd2VyIDAuMTA0ICAwLjUgLT4gMC4zMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODggIHBvd2VyIDAuMDEwNCAgMC41IC0+IDAuMTAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTg5ICBwb3dlciAwLjEwNSAgMC41IC0+IDAuMzI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTkwICBwb3dlciAwLjAxMDUgIDAuNSAtPiAwLjEwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5MSAgcG93ZXIgMC4xMDYgIDAuNSAtPiAwLjMyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5MiAgcG93ZXIgMC4wMTA2ICAwLjUgLT4gMC4xMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTMgIHBvd2VyIDAuMTA3ICAwLjUgLT4gMC4zMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTQgIHBvd2VyIDAuMDEwNyAgMC41IC0+IDAuMTAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTk1ICBwb3dlciAwLjEwOCAgMC41IC0+IDAuMzI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTk2ICBwb3dlciAwLjAxMDggIDAuNSAtPiAwLjEwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5NyAgcG93ZXIgMC4xMDkgIDAuNSAtPiAwLjMzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5OCAgcG93ZXIgMC4wMTA5ICAwLjUgLT4gMC4xMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTkgIHBvd2VyIDAuMTExICAwLjUgLT4gMC4zMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDAgIHBvd2VyIDAuMDExMSAgMC41IC0+IDAuMTA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjAxICBwb3dlciAwLjExMiAgMC41IC0+IDAuMzM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjAyICBwb3dlciAwLjAxMTIgIDAuNSAtPiAwLjEwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwMyAgcG93ZXIgMC4xMTMgIDAuNSAtPiAwLjMzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwNCAgcG93ZXIgMC4wMTEzICAwLjUgLT4gMC4xMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDUgIHBvd2VyIDAuMTE0ICAwLjUgLT4gMC4zMzggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDYgIHBvd2VyIDAuMDExNCAgMC41IC0+IDAuMTA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjA3ICBwb3dlciAwLjExNSAgMC41IC0+IDAuMzM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjA4ICBwb3dlciAwLjAxMTUgIDAuNSAtPiAwLjEwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwOSAgcG93ZXIgMC4xMTYgIDAuNSAtPiAwLjM0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxMCAgcG93ZXIgMC4wMTE2ICAwLjUgLT4gMC4xMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTEgIHBvd2VyIDAuMTE3ICAwLjUgLT4gMC4zNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTIgIHBvd2VyIDAuMDExNyAgMC41IC0+IDAuMTA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjEzICBwb3dlciAwLjExOCAgMC41IC0+IDAuMzQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjE0ICBwb3dlciAwLjAxMTggIDAuNSAtPiAwLjEwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxNSAgcG93ZXIgMC4xMTkgIDAuNSAtPiAwLjM0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxNiAgcG93ZXIgMC4wMTE5ICAwLjUgLT4gMC4xMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTcgIHBvd2VyIDAuMTIxICAwLjUgLT4gMC4zNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTggIHBvd2VyIDAuMDEyMSAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjE5ICBwb3dlciAwLjEyMiAgMC41IC0+IDAuMzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjIwICBwb3dlciAwLjAxMjIgIDAuNSAtPiAwLjExMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyMSAgcG93ZXIgMC4xMjMgIDAuNSAtPiAwLjM1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyMiAgcG93ZXIgMC4wMTIzICAwLjUgLT4gMC4xMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjMgIHBvd2VyIDAuMTI0ICAwLjUgLT4gMC4zNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjQgIHBvd2VyIDAuMDEyNCAgMC41IC0+IDAuMTExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjI1ICBwb3dlciAwLjEyNSAgMC41IC0+IDAuMzU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjI2ICBwb3dlciAwLjAxMjUgIDAuNSAtPiAwLjExMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyNyAgcG93ZXIgMC4xMjYgIDAuNSAtPiAwLjM1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyOCAgcG93ZXIgMC4wMTI2ICAwLjUgLT4gMC4xMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjkgIHBvd2VyIDAuMTI3ICAwLjUgLT4gMC4zNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzAgIHBvd2VyIDAuMDEyNyAgMC41IC0+IDAuMTEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjMxICBwb3dlciAwLjEyOCAgMC41IC0+IDAuMzU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjMyICBwb3dlciAwLjAxMjggIDAuNSAtPiAwLjExMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzMyAgcG93ZXIgMC4xMjkgIDAuNSAtPiAwLjM1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzNCAgcG93ZXIgMC4wMTI5ICAwLjUgLT4gMC4xMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzUgIHBvd2VyIDAuMTMxICAwLjUgLT4gMC4zNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzYgIHBvd2VyIDAuMDEzMSAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjM3ICBwb3dlciAwLjEzMiAgMC41IC0+IDAuMzYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjM4ICBwb3dlciAwLjAxMzIgIDAuNSAtPiAwLjExNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzOSAgcG93ZXIgMC4xMzMgIDAuNSAtPiAwLjM2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0MCAgcG93ZXIgMC4wMTMzICAwLjUgLT4gMC4xMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDEgIHBvd2VyIDAuMTM0ICAwLjUgLT4gMC4zNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDIgIHBvd2VyIDAuMDEzNCAgMC41IC0+IDAuMTE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQzICBwb3dlciAwLjEzNSAgMC41IC0+IDAuMzY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQ0ICBwb3dlciAwLjAxMzUgIDAuNSAtPiAwLjExNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0NSAgcG93ZXIgMC4xMzYgIDAuNSAtPiAwLjM2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0NiAgcG93ZXIgMC4wMTM2ICAwLjUgLT4gMC4xMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDcgIHBvd2VyIDAuMTM3ICAwLjUgLT4gMC4zNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDggIHBvd2VyIDAuMDEzNyAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQ5ICBwb3dlciAwLjEzOCAgMC41IC0+IDAuMzcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjUwICBwb3dlciAwLjAxMzggIDAuNSAtPiAwLjExNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1MSAgcG93ZXIgMC4xMzkgIDAuNSAtPiAwLjM3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1MiAgcG93ZXIgMC4wMTM5ICAwLjUgLT4gMC4xMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTMgIHBvd2VyIDAuMTQxICAwLjUgLT4gMC4zNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTQgIHBvd2VyIDAuMDE0MSAgMC41IC0+IDAuMTE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjU1ICBwb3dlciAwLjE0MiAgMC41IC0+IDAuMzc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjU2ICBwb3dlciAwLjAxNDIgIDAuNSAtPiAwLjExOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1NyAgcG93ZXIgMC4xNDMgIDAuNSAtPiAwLjM3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1OCAgcG93ZXIgMC4wMTQzICAwLjUgLT4gMC4xMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTkgIHBvd2VyIDAuMTQ0ICAwLjUgLT4gMC4zNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjAgIHBvd2VyIDAuMDE0NCAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjYxICBwb3dlciAwLjE0NSAgMC41IC0+IDAuMzgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjYyICBwb3dlciAwLjAxNDUgIDAuNSAtPiAwLjEyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2MyAgcG93ZXIgMC4xNDYgIDAuNSAtPiAwLjM4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2NCAgcG93ZXIgMC4wMTQ2ICAwLjUgLT4gMC4xMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjUgIHBvd2VyIDAuMTQ3ICAwLjUgLT4gMC4zODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjYgIHBvd2VyIDAuMDE0NyAgMC41IC0+IDAuMTIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjY3ICBwb3dlciAwLjE0OCAgMC41IC0+IDAuMzg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjY4ICBwb3dlciAwLjAxNDggIDAuNSAtPiAwLjEyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2OSAgcG93ZXIgMC4xNDkgIDAuNSAtPiAwLjM4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3MCAgcG93ZXIgMC4wMTQ5ICAwLjUgLT4gMC4xMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzEgIHBvd2VyIDAuMTUxICAwLjUgLT4gMC4zODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzIgIHBvd2VyIDAuMDE1MSAgMC41IC0+IDAuMTIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjczICBwb3dlciAwLjE1MiAgMC41IC0+IDAuMzkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjc0ICBwb3dlciAwLjAxNTIgIDAuNSAtPiAwLjEyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3NSAgcG93ZXIgMC4xNTMgIDAuNSAtPiAwLjM5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3NiAgcG93ZXIgMC4wMTUzICAwLjUgLT4gMC4xMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzcgIHBvd2VyIDAuMTU0ICAwLjUgLT4gMC4zOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzggIHBvd2VyIDAuMDE1NCAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjc5ICBwb3dlciAwLjE1NSAgMC41IC0+IDAuMzk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjgwICBwb3dlciAwLjAxNTUgIDAuNSAtPiAwLjEyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4MSAgcG93ZXIgMC4xNTYgIDAuNSAtPiAwLjM5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4MiAgcG93ZXIgMC4wMTU2ICAwLjUgLT4gMC4xMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODMgIHBvd2VyIDAuMTU3ICAwLjUgLT4gMC4zOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODQgIHBvd2VyIDAuMDE1NyAgMC41IC0+IDAuMTI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjg1ICBwb3dlciAwLjE1OCAgMC41IC0+IDAuMzk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjg2ICBwb3dlciAwLjAxNTggIDAuNSAtPiAwLjEyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4NyAgcG93ZXIgMC4xNTkgIDAuNSAtPiAwLjM5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4OCAgcG93ZXIgMC4wMTU5ICAwLjUgLT4gMC4xMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODkgIHBvd2VyIDAuMTYxICAwLjUgLT4gMC40MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTAgIHBvd2VyIDAuMDE2MSAgMC41IC0+IDAuMTI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjkxICBwb3dlciAwLjE2MiAgMC41IC0+IDAuNDAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjkyICBwb3dlciAwLjAxNjIgIDAuNSAtPiAwLjEyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5MyAgcG93ZXIgMC4xNjMgIDAuNSAtPiAwLjQwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5NCAgcG93ZXIgMC4wMTYzICAwLjUgLT4gMC4xMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTUgIHBvd2VyIDAuMTY0ICAwLjUgLT4gMC40MDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTYgIHBvd2VyIDAuMDE2NCAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjk3ICBwb3dlciAwLjE2NSAgMC41IC0+IDAuNDA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjk4ICBwb3dlciAwLjAxNjUgIDAuNSAtPiAwLjEyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5OSAgcG93ZXIgMC4xNjYgIDAuNSAtPiAwLjQwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwMCAgcG93ZXIgMC4wMTY2ICAwLjUgLT4gMC4xMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDEgIHBvd2VyIDAuMTY3ICAwLjUgLT4gMC40MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDIgIHBvd2VyIDAuMDE2NyAgMC41IC0+IDAuMTI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzAzICBwb3dlciAwLjE2OCAgMC41IC0+IDAuNDEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzA0ICBwb3dlciAwLjAxNjggIDAuNSAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwNSAgcG93ZXIgMC4xNjkgIDAuNSAtPiAwLjQxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwNiAgcG93ZXIgMC4wMTY5ICAwLjUgLT4gMC4xMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDcgIHBvd2VyIDAuMTcxICAwLjUgLT4gMC40MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDggIHBvd2VyIDAuMDE3MSAgMC41IC0+IDAuMTMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzA5ICBwb3dlciAwLjE3MiAgMC41IC0+IDAuNDE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzEwICBwb3dlciAwLjAxNzIgIDAuNSAtPiAwLjEzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxMSAgcG93ZXIgMC4xNzMgIDAuNSAtPiAwLjQxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxMiAgcG93ZXIgMC4wMTczICAwLjUgLT4gMC4xMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTMgIHBvd2VyIDAuMTc0ICAwLjUgLT4gMC40MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTQgIHBvd2VyIDAuMDE3NCAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzE1ICBwb3dlciAwLjE3NSAgMC41IC0+IDAuNDE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzE2ICBwb3dlciAwLjAxNzUgIDAuNSAtPiAwLjEzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxNyAgcG93ZXIgMC4xNzYgIDAuNSAtPiAwLjQyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxOCAgcG93ZXIgMC4wMTc2ICAwLjUgLT4gMC4xMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTkgIHBvd2VyIDAuMTc3ICAwLjUgLT4gMC40MjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjAgIHBvd2VyIDAuMDE3NyAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzIxICBwb3dlciAwLjE3OCAgMC41IC0+IDAuNDIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzIyICBwb3dlciAwLjAxNzggIDAuNSAtPiAwLjEzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyMyAgcG93ZXIgMC4xNzkgIDAuNSAtPiAwLjQyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyNCAgcG93ZXIgMC4wMTc5ICAwLjUgLT4gMC4xMzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjUgIHBvd2VyIDAuMTgxICAwLjUgLT4gMC40MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjYgIHBvd2VyIDAuMDE4MSAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzI3ICBwb3dlciAwLjE4MiAgMC41IC0+IDAuNDI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzI4ICBwb3dlciAwLjAxODIgIDAuNSAtPiAwLjEzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyOSAgcG93ZXIgMC4xODMgIDAuNSAtPiAwLjQyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzMCAgcG93ZXIgMC4wMTgzICAwLjUgLT4gMC4xMzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzEgIHBvd2VyIDAuMTg0ICAwLjUgLT4gMC40MjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzIgIHBvd2VyIDAuMDE4NCAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzMzICBwb3dlciAwLjE4NSAgMC41IC0+IDAuNDMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzM0ICBwb3dlciAwLjAxODUgIDAuNSAtPiAwLjEzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzNSAgcG93ZXIgMC4xODYgIDAuNSAtPiAwLjQzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzNiAgcG93ZXIgMC4wMTg2ICAwLjUgLT4gMC4xMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzcgIHBvd2VyIDAuMTg3ICAwLjUgLT4gMC40MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzggIHBvd2VyIDAuMDE4NyAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzM5ICBwb3dlciAwLjE4OCAgMC41IC0+IDAuNDM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQwICBwb3dlciAwLjAxODggIDAuNSAtPiAwLjEzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0MSAgcG93ZXIgMC4xODkgIDAuNSAtPiAwLjQzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0MiAgcG93ZXIgMC4wMTg5ICAwLjUgLT4gMC4xMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDMgIHBvd2VyIDAuMTkxICAwLjUgLT4gMC40MzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDQgIHBvd2VyIDAuMDE5MSAgMC41IC0+IDAuMTM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQ1ICBwb3dlciAwLjE5MiAgMC41IC0+IDAuNDM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQ2ICBwb3dlciAwLjAxOTIgIDAuNSAtPiAwLjEzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0NyAgcG93ZXIgMC4xOTMgIDAuNSAtPiAwLjQzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0OCAgcG93ZXIgMC4wMTkzICAwLjUgLT4gMC4xMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDkgIHBvd2VyIDAuMTk0ICAwLjUgLT4gMC40NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTAgIHBvd2VyIDAuMDE5NCAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzUxICBwb3dlciAwLjE5NSAgMC41IC0+IDAuNDQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzUyICBwb3dlciAwLjAxOTUgIDAuNSAtPiAwLjE0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1MyAgcG93ZXIgMC4xOTYgIDAuNSAtPiAwLjQ0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1NCAgcG93ZXIgMC4wMTk2ICAwLjUgLT4gMC4xNDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTUgIHBvd2VyIDAuMTk3ICAwLjUgLT4gMC40NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTYgIHBvd2VyIDAuMDE5NyAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzU3ICBwb3dlciAwLjE5OCAgMC41IC0+IDAuNDQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzU4ICBwb3dlciAwLjAxOTggIDAuNSAtPiAwLjE0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1OSAgcG93ZXIgMC4xOTkgIDAuNSAtPiAwLjQ0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2MCAgcG93ZXIgMC4wMTk5ICAwLjUgLT4gMC4xNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjEgIHBvd2VyIDAuMjAxICAwLjUgLT4gMC40NDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjIgIHBvd2VyIDAuMDIwMSAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzYzICBwb3dlciAwLjIwMiAgMC41IC0+IDAuNDQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzY0ICBwb3dlciAwLjAyMDIgIDAuNSAtPiAwLjE0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2NSAgcG93ZXIgMC4yMDMgIDAuNSAtPiAwLjQ1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2NiAgcG93ZXIgMC4wMjAzICAwLjUgLT4gMC4xNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjcgIHBvd2VyIDAuMjA0ICAwLjUgLT4gMC40NTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjggIHBvd2VyIDAuMDIwNCAgMC41IC0+IDAuMTQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzY5ICBwb3dlciAwLjIwNSAgMC41IC0+IDAuNDUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzcwICBwb3dlciAwLjAyMDUgIDAuNSAtPiAwLjE0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3MSAgcG93ZXIgMC4yMDYgIDAuNSAtPiAwLjQ1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3MiAgcG93ZXIgMC4wMjA2ICAwLjUgLT4gMC4xNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzMgIHBvd2VyIDAuMjA3ICAwLjUgLT4gMC40NTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzQgIHBvd2VyIDAuMDIwNyAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzc1ICBwb3dlciAwLjIwOCAgMC41IC0+IDAuNDU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzc2ICBwb3dlciAwLjAyMDggIDAuNSAtPiAwLjE0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3NyAgcG93ZXIgMC4yMDkgIDAuNSAtPiAwLjQ1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3OCAgcG93ZXIgMC4wMjA5ICAwLjUgLT4gMC4xNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzkgIHBvd2VyIDAuMjExICAwLjUgLT4gMC40NTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODAgIHBvd2VyIDAuMDIxMSAgMC41IC0+IDAuMTQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzgxICBwb3dlciAwLjIxMiAgMC41IC0+IDAuNDYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzgyICBwb3dlciAwLjAyMTIgIDAuNSAtPiAwLjE0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4MyAgcG93ZXIgMC4yMTMgIDAuNSAtPiAwLjQ2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4NCAgcG93ZXIgMC4wMjEzICAwLjUgLT4gMC4xNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODUgIHBvd2VyIDAuMjE0ICAwLjUgLT4gMC40NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODYgIHBvd2VyIDAuMDIxNCAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzg3ICBwb3dlciAwLjIxNSAgMC41IC0+IDAuNDY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzg4ICBwb3dlciAwLjAyMTUgIDAuNSAtPiAwLjE0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4OSAgcG93ZXIgMC4yMTYgIDAuNSAtPiAwLjQ2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5MCAgcG93ZXIgMC4wMjE2ICAwLjUgLT4gMC4xNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTEgIHBvd2VyIDAuMjE3ICAwLjUgLT4gMC40NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTIgIHBvd2VyIDAuMDIxNyAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzkzICBwb3dlciAwLjIxOCAgMC41IC0+IDAuNDY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzk0ICBwb3dlciAwLjAyMTggIDAuNSAtPiAwLjE0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5NSAgcG93ZXIgMC4yMTkgIDAuNSAtPiAwLjQ2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5NiAgcG93ZXIgMC4wMjE5ICAwLjUgLT4gMC4xNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTcgIHBvd2VyIDAuMjIxICAwLjUgLT4gMC40NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTggIHBvd2VyIDAuMDIyMSAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzk5ICBwb3dlciAwLjIyMiAgMC41IC0+IDAuNDcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDAwICBwb3dlciAwLjAyMjIgIDAuNSAtPiAwLjE0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwMSAgcG93ZXIgMC4yMjMgIDAuNSAtPiAwLjQ3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwMiAgcG93ZXIgMC4wMjIzICAwLjUgLT4gMC4xNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDMgIHBvd2VyIDAuMjI0ICAwLjUgLT4gMC40NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDQgIHBvd2VyIDAuMDIyNCAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDA1ICBwb3dlciAwLjIyNSAgMC41IC0+IDAuNDc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDA2ICBwb3dlciAwLjAyMjUgIDAuNSAtPiAwLjE1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwNyAgcG93ZXIgMC4yMjYgIDAuNSAtPiAwLjQ3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwOCAgcG93ZXIgMC4wMjI2ICAwLjUgLT4gMC4xNTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDkgIHBvd2VyIDAuMjI3ICAwLjUgLT4gMC40NzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTAgIHBvd2VyIDAuMDIyNyAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDExICBwb3dlciAwLjIyOCAgMC41IC0+IDAuNDc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDEyICBwb3dlciAwLjAyMjggIDAuNSAtPiAwLjE1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxMyAgcG93ZXIgMC4yMjkgIDAuNSAtPiAwLjQ3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxNCAgcG93ZXIgMC4wMjI5ICAwLjUgLT4gMC4xNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTUgIHBvd2VyIDAuMjMxICAwLjUgLT4gMC40ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTYgIHBvd2VyIDAuMDIzMSAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDE3ICBwb3dlciAwLjIzMiAgMC41IC0+IDAuNDgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDE4ICBwb3dlciAwLjAyMzIgIDAuNSAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxOSAgcG93ZXIgMC4yMzMgIDAuNSAtPiAwLjQ4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyMCAgcG93ZXIgMC4wMjMzICAwLjUgLT4gMC4xNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjEgIHBvd2VyIDAuMjM0ICAwLjUgLT4gMC40ODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjIgIHBvd2VyIDAuMDIzNCAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDIzICBwb3dlciAwLjIzNSAgMC41IC0+IDAuNDg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDI0ICBwb3dlciAwLjAyMzUgIDAuNSAtPiAwLjE1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyNSAgcG93ZXIgMC4yMzYgIDAuNSAtPiAwLjQ4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyNiAgcG93ZXIgMC4wMjM2ICAwLjUgLT4gMC4xNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjcgIHBvd2VyIDAuMjM3ICAwLjUgLT4gMC40ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjggIHBvd2VyIDAuMDIzNyAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDI5ICBwb3dlciAwLjIzOCAgMC41IC0+IDAuNDg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDMwICBwb3dlciAwLjAyMzggIDAuNSAtPiAwLjE1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzMSAgcG93ZXIgMC4yMzkgIDAuNSAtPiAwLjQ4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzMiAgcG93ZXIgMC4wMjM5ICAwLjUgLT4gMC4xNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzMgIHBvd2VyIDAuMjQxICAwLjUgLT4gMC40OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzQgIHBvd2VyIDAuMDI0MSAgMC41IC0+IDAuMTU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDM1ICBwb3dlciAwLjI0MiAgMC41IC0+IDAuNDkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDM2ICBwb3dlciAwLjAyNDIgIDAuNSAtPiAwLjE1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzNyAgcG93ZXIgMC4yNDMgIDAuNSAtPiAwLjQ5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzOCAgcG93ZXIgMC4wMjQzICAwLjUgLT4gMC4xNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzkgIHBvd2VyIDAuMjQ0ICAwLjUgLT4gMC40OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDAgIHBvd2VyIDAuMDI0NCAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQxICBwb3dlciAwLjI0NSAgMC41IC0+IDAuNDk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQyICBwb3dlciAwLjAyNDUgIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0MyAgcG93ZXIgMC4yNDYgIDAuNSAtPiAwLjQ5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0NCAgcG93ZXIgMC4wMjQ2ICAwLjUgLT4gMC4xNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDUgIHBvd2VyIDAuMjQ3ICAwLjUgLT4gMC40OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDYgIHBvd2VyIDAuMDI0NyAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQ3ICBwb3dlciAwLjI0OCAgMC41IC0+IDAuNDk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQ4ICBwb3dlciAwLjAyNDggIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0OSAgcG93ZXIgMC4yNDkgIDAuNSAtPiAwLjQ5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1MCAgcG93ZXIgMC4wMjQ5ICAwLjUgLT4gMC4xNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTEgIHBvd2VyIDAuMjUxICAwLjUgLT4gMC41MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTIgIHBvd2VyIDAuMDI1MSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDUzICBwb3dlciAwLjI1MiAgMC41IC0+IDAuNTAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDU0ICBwb3dlciAwLjAyNTIgIDAuNSAtPiAwLjE1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1NSAgcG93ZXIgMC4yNTMgIDAuNSAtPiAwLjUwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1NiAgcG93ZXIgMC4wMjUzICAwLjUgLT4gMC4xNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTcgIHBvd2VyIDAuMjU0ICAwLjUgLT4gMC41MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTggIHBvd2VyIDAuMDI1NCAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDU5ICBwb3dlciAwLjI1NSAgMC41IC0+IDAuNTA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDYwICBwb3dlciAwLjAyNTUgIDAuNSAtPiAwLjE2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2MSAgcG93ZXIgMC4yNTYgIDAuNSAtPiAwLjUwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2MiAgcG93ZXIgMC4wMjU2ICAwLjUgLT4gMC4xNjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjMgIHBvd2VyIDAuMjU3ICAwLjUgLT4gMC41MDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjQgIHBvd2VyIDAuMDI1NyAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDY1ICBwb3dlciAwLjI1OCAgMC41IC0+IDAuNTA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDY2ICBwb3dlciAwLjAyNTggIDAuNSAtPiAwLjE2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2NyAgcG93ZXIgMC4yNTkgIDAuNSAtPiAwLjUwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2OCAgcG93ZXIgMC4wMjU5ICAwLjUgLT4gMC4xNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjkgIHBvd2VyIDAuMjYxICAwLjUgLT4gMC41MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzAgIHBvd2VyIDAuMDI2MSAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDcxICBwb3dlciAwLjI2MiAgMC41IC0+IDAuNTEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDcyICBwb3dlciAwLjAyNjIgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3MyAgcG93ZXIgMC4yNjMgIDAuNSAtPiAwLjUxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3NCAgcG93ZXIgMC4wMjYzICAwLjUgLT4gMC4xNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzUgIHBvd2VyIDAuMjY0ICAwLjUgLT4gMC41MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzYgIHBvd2VyIDAuMDI2NCAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDc3ICBwb3dlciAwLjI2NSAgMC41IC0+IDAuNTE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDc4ICBwb3dlciAwLjAyNjUgIDAuNSAtPiAwLjE2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3OSAgcG93ZXIgMC4yNjYgIDAuNSAtPiAwLjUxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4MCAgcG93ZXIgMC4wMjY2ICAwLjUgLT4gMC4xNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODEgIHBvd2VyIDAuMjY3ICAwLjUgLT4gMC41MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODIgIHBvd2VyIDAuMDI2NyAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDgzICBwb3dlciAwLjI2OCAgMC41IC0+IDAuNTE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDg0ICBwb3dlciAwLjAyNjggIDAuNSAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4NSAgcG93ZXIgMC4yNjkgIDAuNSAtPiAwLjUxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4NiAgcG93ZXIgMC4wMjY5ICAwLjUgLT4gMC4xNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODcgIHBvd2VyIDAuMjcxICAwLjUgLT4gMC41MjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODggIHBvd2VyIDAuMDI3MSAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDg5ICBwb3dlciAwLjI3MiAgMC41IC0+IDAuNTIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDkwICBwb3dlciAwLjAyNzIgIDAuNSAtPiAwLjE2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5MSAgcG93ZXIgMC4yNzMgIDAuNSAtPiAwLjUyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5MiAgcG93ZXIgMC4wMjczICAwLjUgLT4gMC4xNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTMgIHBvd2VyIDAuMjc0ICAwLjUgLT4gMC41MjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTQgIHBvd2VyIDAuMDI3NCAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDk1ICBwb3dlciAwLjI3NSAgMC41IC0+IDAuNTI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDk2ICBwb3dlciAwLjAyNzUgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5NyAgcG93ZXIgMC4yNzYgIDAuNSAtPiAwLjUyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5OCAgcG93ZXIgMC4wMjc2ICAwLjUgLT4gMC4xNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTkgIHBvd2VyIDAuMjc3ICAwLjUgLT4gMC41MjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDAgIHBvd2VyIDAuMDI3NyAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTAxICBwb3dlciAwLjI3OCAgMC41IC0+IDAuNTI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTAyICBwb3dlciAwLjAyNzggIDAuNSAtPiAwLjE2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwMyAgcG93ZXIgMC4yNzkgIDAuNSAtPiAwLjUyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwNCAgcG93ZXIgMC4wMjc5ICAwLjUgLT4gMC4xNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDUgIHBvd2VyIDAuMjgxICAwLjUgLT4gMC41MzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDYgIHBvd2VyIDAuMDI4MSAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTA3ICBwb3dlciAwLjI4MiAgMC41IC0+IDAuNTMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTA4ICBwb3dlciAwLjAyODIgIDAuNSAtPiAwLjE2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwOSAgcG93ZXIgMC4yODMgIDAuNSAtPiAwLjUzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxMCAgcG93ZXIgMC4wMjgzICAwLjUgLT4gMC4xNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTEgIHBvd2VyIDAuMjg0ICAwLjUgLT4gMC41MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTIgIHBvd2VyIDAuMDI4NCAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTEzICBwb3dlciAwLjI4NSAgMC41IC0+IDAuNTM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTE0ICBwb3dlciAwLjAyODUgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxNSAgcG93ZXIgMC4yODYgIDAuNSAtPiAwLjUzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxNiAgcG93ZXIgMC4wMjg2ICAwLjUgLT4gMC4xNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTcgIHBvd2VyIDAuMjg3ICAwLjUgLT4gMC41MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTggIHBvd2VyIDAuMDI4NyAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTE5ICBwb3dlciAwLjI4OCAgMC41IC0+IDAuNTM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTIwICBwb3dlciAwLjAyODggIDAuNSAtPiAwLjE3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyMSAgcG93ZXIgMC4yODkgIDAuNSAtPiAwLjUzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyMiAgcG93ZXIgMC4wMjg5ICAwLjUgLT4gMC4xNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjMgIHBvd2VyIDAuMjkxICAwLjUgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjQgIHBvd2VyIDAuMDI5MSAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTI1ICBwb3dlciAwLjI5MiAgMC41IC0+IDAuNTQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTI2ICBwb3dlciAwLjAyOTIgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyNyAgcG93ZXIgMC4yOTMgIDAuNSAtPiAwLjU0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyOCAgcG93ZXIgMC4wMjkzICAwLjUgLT4gMC4xNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjkgIHBvd2VyIDAuMjk0ICAwLjUgLT4gMC41NDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzAgIHBvd2VyIDAuMDI5NCAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTMxICBwb3dlciAwLjI5NSAgMC41IC0+IDAuNTQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTMyICBwb3dlciAwLjAyOTUgIDAuNSAtPiAwLjE3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzMyAgcG93ZXIgMC4yOTYgIDAuNSAtPiAwLjU0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzNCAgcG93ZXIgMC4wMjk2ICAwLjUgLT4gMC4xNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzUgIHBvd2VyIDAuMjk3ICAwLjUgLT4gMC41NDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzYgIHBvd2VyIDAuMDI5NyAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTM3ICBwb3dlciAwLjI5OCAgMC41IC0+IDAuNTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTM4ICBwb3dlciAwLjAyOTggIDAuNSAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzOSAgcG93ZXIgMC4yOTkgIDAuNSAtPiAwLjU0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0MCAgcG93ZXIgMC4wMjk5ICAwLjUgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDEgIHBvd2VyIDAuMzAxICAwLjUgLT4gMC41NDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDIgIHBvd2VyIDAuMDMwMSAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQzICBwb3dlciAwLjMwMiAgMC41IC0+IDAuNTUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQ0ICBwb3dlciAwLjAzMDIgIDAuNSAtPiAwLjE3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0NSAgcG93ZXIgMC4zMDMgIDAuNSAtPiAwLjU1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0NiAgcG93ZXIgMC4wMzAzICAwLjUgLT4gMC4xNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDcgIHBvd2VyIDAuMzA0ICAwLjUgLT4gMC41NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDggIHBvd2VyIDAuMDMwNCAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQ5ICBwb3dlciAwLjMwNSAgMC41IC0+IDAuNTUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTUwICBwb3dlciAwLjAzMDUgIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1MSAgcG93ZXIgMC4zMDYgIDAuNSAtPiAwLjU1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1MiAgcG93ZXIgMC4wMzA2ICAwLjUgLT4gMC4xNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTMgIHBvd2VyIDAuMzA3ICAwLjUgLT4gMC41NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTQgIHBvd2VyIDAuMDMwNyAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTU1ICBwb3dlciAwLjMwOCAgMC41IC0+IDAuNTU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTU2ICBwb3dlciAwLjAzMDggIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1NyAgcG93ZXIgMC4zMDkgIDAuNSAtPiAwLjU1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1OCAgcG93ZXIgMC4wMzA5ICAwLjUgLT4gMC4xNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTkgIHBvd2VyIDAuMzExICAwLjUgLT4gMC41NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjAgIHBvd2VyIDAuMDMxMSAgMC41IC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTYxICBwb3dlciAwLjMxMiAgMC41IC0+IDAuNTU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTYyICBwb3dlciAwLjAzMTIgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2MyAgcG93ZXIgMC4zMTMgIDAuNSAtPiAwLjU1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2NCAgcG93ZXIgMC4wMzEzICAwLjUgLT4gMC4xNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjUgIHBvd2VyIDAuMzE0ICAwLjUgLT4gMC41NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjYgIHBvd2VyIDAuMDMxNCAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTY3ICBwb3dlciAwLjMxNSAgMC41IC0+IDAuNTYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTY4ICBwb3dlciAwLjAzMTUgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2OSAgcG93ZXIgMC4zMTYgIDAuNSAtPiAwLjU2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3MCAgcG93ZXIgMC4wMzE2ICAwLjUgLT4gMC4xNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzEgIHBvd2VyIDAuMzE3ICAwLjUgLT4gMC41NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzIgIHBvd2VyIDAuMDMxNyAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTczICBwb3dlciAwLjMxOCAgMC41IC0+IDAuNTY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTc0ICBwb3dlciAwLjAzMTggIDAuNSAtPiAwLjE3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3NSAgcG93ZXIgMC4zMTkgIDAuNSAtPiAwLjU2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3NiAgcG93ZXIgMC4wMzE5ICAwLjUgLT4gMC4xNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzcgIHBvd2VyIDAuMzIxICAwLjUgLT4gMC41NjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzggIHBvd2VyIDAuMDMyMSAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTc5ICBwb3dlciAwLjMyMiAgMC41IC0+IDAuNTY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTgwICBwb3dlciAwLjAzMjIgIDAuNSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4MSAgcG93ZXIgMC4zMjMgIDAuNSAtPiAwLjU2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4MiAgcG93ZXIgMC4wMzIzICAwLjUgLT4gMC4xODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODMgIHBvd2VyIDAuMzI0ICAwLjUgLT4gMC41NjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODQgIHBvd2VyIDAuMDMyNCAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTg1ICBwb3dlciAwLjMyNSAgMC41IC0+IDAuNTcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTg2ICBwb3dlciAwLjAzMjUgIDAuNSAtPiAwLjE4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4NyAgcG93ZXIgMC4zMjYgIDAuNSAtPiAwLjU3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4OCAgcG93ZXIgMC4wMzI2ICAwLjUgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODkgIHBvd2VyIDAuMzI3ICAwLjUgLT4gMC41NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTAgIHBvd2VyIDAuMDMyNyAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTkxICBwb3dlciAwLjMyOCAgMC41IC0+IDAuNTczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTkyICBwb3dlciAwLjAzMjggIDAuNSAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5MyAgcG93ZXIgMC4zMjkgIDAuNSAtPiAwLjU3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5NCAgcG93ZXIgMC4wMzI5ICAwLjUgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTUgIHBvd2VyIDAuMzMxICAwLjUgLT4gMC41NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTYgIHBvd2VyIDAuMDMzMSAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTk3ICBwb3dlciAwLjMzMiAgMC41IC0+IDAuNTc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTk4ICBwb3dlciAwLjAzMzIgIDAuNSAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5OSAgcG93ZXIgMC4zMzMgIDAuNSAtPiAwLjU3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwMCAgcG93ZXIgMC4wMzMzICAwLjUgLT4gMC4xODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDEgIHBvd2VyIDAuMzM0ICAwLjUgLT4gMC41NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDIgIHBvd2VyIDAuMDMzNCAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjAzICBwb3dlciAwLjMzNSAgMC41IC0+IDAuNTc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjA0ICBwb3dlciAwLjAzMzUgIDAuNSAtPiAwLjE4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwNSAgcG93ZXIgMC4zMzYgIDAuNSAtPiAwLjU4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwNiAgcG93ZXIgMC4wMzM2ICAwLjUgLT4gMC4xODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDcgIHBvd2VyIDAuMzM3ICAwLjUgLT4gMC41ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDggIHBvd2VyIDAuMDMzNyAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjA5ICBwb3dlciAwLjMzOCAgMC41IC0+IDAuNTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjEwICBwb3dlciAwLjAzMzggIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxMSAgcG93ZXIgMC4zMzkgIDAuNSAtPiAwLjU4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxMiAgcG93ZXIgMC4wMzM5ICAwLjUgLT4gMC4xODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTMgIHBvd2VyIDAuMzQxICAwLjUgLT4gMC41ODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTQgIHBvd2VyIDAuMDM0MSAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjE1ICBwb3dlciAwLjM0MiAgMC41IC0+IDAuNTg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjE2ICBwb3dlciAwLjAzNDIgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxNyAgcG93ZXIgMC4zNDMgIDAuNSAtPiAwLjU4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxOCAgcG93ZXIgMC4wMzQzICAwLjUgLT4gMC4xODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTkgIHBvd2VyIDAuMzQ0ICAwLjUgLT4gMC41ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjAgIHBvd2VyIDAuMDM0NCAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjIxICBwb3dlciAwLjM0NSAgMC41IC0+IDAuNTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjIyICBwb3dlciAwLjAzNDUgIDAuNSAtPiAwLjE4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyMyAgcG93ZXIgMC4zNDYgIDAuNSAtPiAwLjU4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyNCAgcG93ZXIgMC4wMzQ2ICAwLjUgLT4gMC4xODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjUgIHBvd2VyIDAuMzQ3ICAwLjUgLT4gMC41ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjYgIHBvd2VyIDAuMDM0NyAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjI3ICBwb3dlciAwLjM0OCAgMC41IC0+IDAuNTkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjI4ICBwb3dlciAwLjAzNDggIDAuNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyOSAgcG93ZXIgMC4zNDkgIDAuNSAtPiAwLjU5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzMCAgcG93ZXIgMC4wMzQ5ICAwLjUgLT4gMC4xODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzEgIHBvd2VyIDAuMzUxICAwLjUgLT4gMC41OTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzIgIHBvd2VyIDAuMDM1MSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjMzICBwb3dlciAwLjM1MiAgMC41IC0+IDAuNTkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjM0ICBwb3dlciAwLjAzNTIgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzNSAgcG93ZXIgMC4zNTMgIDAuNSAtPiAwLjU5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzNiAgcG93ZXIgMC4wMzUzICAwLjUgLT4gMC4xODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzcgIHBvd2VyIDAuMzU0ICAwLjUgLT4gMC41OTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzggIHBvd2VyIDAuMDM1NCAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjM5ICBwb3dlciAwLjM1NSAgMC41IC0+IDAuNTk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQwICBwb3dlciAwLjAzNTUgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0MSAgcG93ZXIgMC4zNTYgIDAuNSAtPiAwLjU5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0MiAgcG93ZXIgMC4wMzU2ICAwLjUgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDMgIHBvd2VyIDAuMzU3ICAwLjUgLT4gMC41OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDQgIHBvd2VyIDAuMDM1NyAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQ1ICBwb3dlciAwLjM1OCAgMC41IC0+IDAuNTk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQ2ICBwb3dlciAwLjAzNTggIDAuNSAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0NyAgcG93ZXIgMC4zNTkgIDAuNSAtPiAwLjU5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0OCAgcG93ZXIgMC4wMzU5ICAwLjUgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDkgIHBvd2VyIDAuMzYxICAwLjUgLT4gMC42MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTAgIHBvd2VyIDAuMDM2MSAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjUxICBwb3dlciAwLjM2MiAgMC41IC0+IDAuNjAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjUyICBwb3dlciAwLjAzNjIgIDAuNSAtPiAwLjE5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1MyAgcG93ZXIgMC4zNjMgIDAuNSAtPiAwLjYwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1NCAgcG93ZXIgMC4wMzYzICAwLjUgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTUgIHBvd2VyIDAuMzY0ICAwLjUgLT4gMC42MDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTYgIHBvd2VyIDAuMDM2NCAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjU3ICBwb3dlciAwLjM2NSAgMC41IC0+IDAuNjA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjU4ICBwb3dlciAwLjAzNjUgIDAuNSAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1OSAgcG93ZXIgMC4zNjYgIDAuNSAtPiAwLjYwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2MCAgcG93ZXIgMC4wMzY2ICAwLjUgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjEgIHBvd2VyIDAuMzY3ICAwLjUgLT4gMC42MDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjIgIHBvd2VyIDAuMDM2NyAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjYzICBwb3dlciAwLjM2OCAgMC41IC0+IDAuNjA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjY0ICBwb3dlciAwLjAzNjggIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2NSAgcG93ZXIgMC4zNjkgIDAuNSAtPiAwLjYwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2NiAgcG93ZXIgMC4wMzY5ICAwLjUgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjcgIHBvd2VyIDAuMzcxICAwLjUgLT4gMC42MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjggIHBvd2VyIDAuMDM3MSAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjY5ICBwb3dlciAwLjM3MiAgMC41IC0+IDAuNjEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjcwICBwb3dlciAwLjAzNzIgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3MSAgcG93ZXIgMC4zNzMgIDAuNSAtPiAwLjYxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3MiAgcG93ZXIgMC4wMzczICAwLjUgLT4gMC4xOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzMgIHBvd2VyIDAuMzc0ICAwLjUgLT4gMC42MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzQgIHBvd2VyIDAuMDM3NCAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjc1ICBwb3dlciAwLjM3NSAgMC41IC0+IDAuNjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjc2ICBwb3dlciAwLjAzNzUgIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3NyAgcG93ZXIgMC4zNzYgIDAuNSAtPiAwLjYxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3OCAgcG93ZXIgMC4wMzc2ICAwLjUgLT4gMC4xOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzkgIHBvd2VyIDAuMzc3ICAwLjUgLT4gMC42MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODAgIHBvd2VyIDAuMDM3NyAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjgxICBwb3dlciAwLjM3OCAgMC41IC0+IDAuNjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjgyICBwb3dlciAwLjAzNzggIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4MyAgcG93ZXIgMC4zNzkgIDAuNSAtPiAwLjYxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4NCAgcG93ZXIgMC4wMzc5ICAwLjUgLT4gMC4xOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODUgIHBvd2VyIDAuMzgxICAwLjUgLT4gMC42MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODYgIHBvd2VyIDAuMDM4MSAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjg3ICBwb3dlciAwLjM4MiAgMC41IC0+IDAuNjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjg4ICBwb3dlciAwLjAzODIgIDAuNSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4OSAgcG93ZXIgMC4zODMgIDAuNSAtPiAwLjYxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5MCAgcG93ZXIgMC4wMzgzICAwLjUgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTEgIHBvd2VyIDAuMzg0ICAwLjUgLT4gMC42MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTIgIHBvd2VyIDAuMDM4NCAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjkzICBwb3dlciAwLjM4NSAgMC41IC0+IDAuNjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjk0ICBwb3dlciAwLjAzODUgIDAuNSAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5NSAgcG93ZXIgMC4zODYgIDAuNSAtPiAwLjYyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5NiAgcG93ZXIgMC4wMzg2ICAwLjUgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTcgIHBvd2VyIDAuMzg3ICAwLjUgLT4gMC42MjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTggIHBvd2VyIDAuMDM4NyAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjk5ICBwb3dlciAwLjM4OCAgMC41IC0+IDAuNjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzAwICBwb3dlciAwLjAzODggIDAuNSAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwMSAgcG93ZXIgMC4zODkgIDAuNSAtPiAwLjYyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwMiAgcG93ZXIgMC4wMzg5ICAwLjUgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDMgIHBvd2VyIDAuMzkxICAwLjUgLT4gMC42MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDQgIHBvd2VyIDAuMDM5MSAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzA1ICBwb3dlciAwLjM5MiAgMC41IC0+IDAuNjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzA2ICBwb3dlciAwLjAzOTIgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwNyAgcG93ZXIgMC4zOTMgIDAuNSAtPiAwLjYyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwOCAgcG93ZXIgMC4wMzkzICAwLjUgLT4gMC4xOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDkgIHBvd2VyIDAuMzk0ICAwLjUgLT4gMC42MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTAgIHBvd2VyIDAuMDM5NCAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzExICBwb3dlciAwLjM5NSAgMC41IC0+IDAuNjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzEyICBwb3dlciAwLjAzOTUgIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxMyAgcG93ZXIgMC4zOTYgIDAuNSAtPiAwLjYyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxNCAgcG93ZXIgMC4wMzk2ICAwLjUgLT4gMC4xOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTUgIHBvd2VyIDAuMzk3ICAwLjUgLT4gMC42MzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTYgIHBvd2VyIDAuMDM5NyAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzE3ICBwb3dlciAwLjM5OCAgMC41IC0+IDAuNjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzE4ICBwb3dlciAwLjAzOTggIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxOSAgcG93ZXIgMC4zOTkgIDAuNSAtPiAwLjYzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyMCAgcG93ZXIgMC4wMzk5ICAwLjUgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjEgIHBvd2VyIDAuNDAxICAwLjUgLT4gMC42MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjIgIHBvd2VyIDAuMDQwMSAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzIzICBwb3dlciAwLjQwMiAgMC41IC0+IDAuNjM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzI0ICBwb3dlciAwLjA0MDIgIDAuNSAtPiAwLjIwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyNSAgcG93ZXIgMC40MDMgIDAuNSAtPiAwLjYzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyNiAgcG93ZXIgMC4wNDAzICAwLjUgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjcgIHBvd2VyIDAuNDA0ICAwLjUgLT4gMC42MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjggIHBvd2VyIDAuMDQwNCAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzI5ICBwb3dlciAwLjQwNSAgMC41IC0+IDAuNjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzMwICBwb3dlciAwLjA0MDUgIDAuNSAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczMSAgcG93ZXIgMC40MDYgIDAuNSAtPiAwLjYzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczMiAgcG93ZXIgMC4wNDA2ICAwLjUgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzMgIHBvd2VyIDAuNDA3ICAwLjUgLT4gMC42MzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzQgIHBvd2VyIDAuMDQwNyAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzM1ICBwb3dlciAwLjQwOCAgMC41IC0+IDAuNjM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzM2ICBwb3dlciAwLjA0MDggIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczNyAgcG93ZXIgMC40MDkgIDAuNSAtPiAwLjY0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczOCAgcG93ZXIgMC4wNDA5ICAwLjUgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzkgIHBvd2VyIDAuNDExICAwLjUgLT4gMC42NDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDAgIHBvd2VyIDAuMDQxMSAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQxICBwb3dlciAwLjQxMiAgMC41IC0+IDAuNjQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQyICBwb3dlciAwLjA0MTIgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0MyAgcG93ZXIgMC40MTMgIDAuNSAtPiAwLjY0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0NCAgcG93ZXIgMC4wNDEzICAwLjUgLT4gMC4yMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDUgIHBvd2VyIDAuNDE0ICAwLjUgLT4gMC42NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDYgIHBvd2VyIDAuMDQxNCAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQ3ICBwb3dlciAwLjQxNSAgMC41IC0+IDAuNjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQ4ICBwb3dlciAwLjA0MTUgIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0OSAgcG93ZXIgMC40MTYgIDAuNSAtPiAwLjY0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1MCAgcG93ZXIgMC4wNDE2ICAwLjUgLT4gMC4yMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTEgIHBvd2VyIDAuNDE3ICAwLjUgLT4gMC42NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTIgIHBvd2VyIDAuMDQxNyAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzUzICBwb3dlciAwLjQxOCAgMC41IC0+IDAuNjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzU0ICBwb3dlciAwLjA0MTggIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1NSAgcG93ZXIgMC40MTkgIDAuNSAtPiAwLjY0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1NiAgcG93ZXIgMC4wNDE5ICAwLjUgLT4gMC4yMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTcgIHBvd2VyIDAuNDIxICAwLjUgLT4gMC42NDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTggIHBvd2VyIDAuMDQyMSAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzU5ICBwb3dlciAwLjQyMiAgMC41IC0+IDAuNjUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzYwICBwb3dlciAwLjA0MjIgIDAuNSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2MSAgcG93ZXIgMC40MjMgIDAuNSAtPiAwLjY1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2MiAgcG93ZXIgMC4wNDIzICAwLjUgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjMgIHBvd2VyIDAuNDI0ICAwLjUgLT4gMC42NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjQgIHBvd2VyIDAuMDQyNCAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzY1ICBwb3dlciAwLjQyNSAgMC41IC0+IDAuNjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzY2ICBwb3dlciAwLjA0MjUgIDAuNSAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2NyAgcG93ZXIgMC40MjYgIDAuNSAtPiAwLjY1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2OCAgcG93ZXIgMC4wNDI2ICAwLjUgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjkgIHBvd2VyIDAuNDI3ICAwLjUgLT4gMC42NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzAgIHBvd2VyIDAuMDQyNyAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzcxICBwb3dlciAwLjQyOCAgMC41IC0+IDAuNjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzcyICBwb3dlciAwLjA0MjggIDAuNSAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3MyAgcG93ZXIgMC40MjkgIDAuNSAtPiAwLjY1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3NCAgcG93ZXIgMC4wNDI5ICAwLjUgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzUgIHBvd2VyIDAuNDMxICAwLjUgLT4gMC42NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzYgIHBvd2VyIDAuMDQzMSAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzc3ICBwb3dlciAwLjQzMiAgMC41IC0+IDAuNjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzc4ICBwb3dlciAwLjA0MzIgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3OSAgcG93ZXIgMC40MzMgIDAuNSAtPiAwLjY1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4MCAgcG93ZXIgMC4wNDMzICAwLjUgLT4gMC4yMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODEgIHBvd2VyIDAuNDM0ICAwLjUgLT4gMC42NTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODIgIHBvd2VyIDAuMDQzNCAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzgzICBwb3dlciAwLjQzNSAgMC41IC0+IDAuNjYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzg0ICBwb3dlciAwLjA0MzUgIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4NSAgcG93ZXIgMC40MzYgIDAuNSAtPiAwLjY2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4NiAgcG93ZXIgMC4wNDM2ICAwLjUgLT4gMC4yMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODcgIHBvd2VyIDAuNDM3ICAwLjUgLT4gMC42NjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODggIHBvd2VyIDAuMDQzNyAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzg5ICBwb3dlciAwLjQzOCAgMC41IC0+IDAuNjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzkwICBwb3dlciAwLjA0MzggIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5MSAgcG93ZXIgMC40MzkgIDAuNSAtPiAwLjY2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5MiAgcG93ZXIgMC4wNDM5ICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTMgIHBvd2VyIDAuNDQxICAwLjUgLT4gMC42NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTQgIHBvd2VyIDAuMDQ0MSAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzk1ICBwb3dlciAwLjQ0MiAgMC41IC0+IDAuNjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzk2ICBwb3dlciAwLjA0NDIgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5NyAgcG93ZXIgMC40NDMgIDAuNSAtPiAwLjY2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5OCAgcG93ZXIgMC4wNDQzICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTkgIHBvd2VyIDAuNDQ0ICAwLjUgLT4gMC42NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDAgIHBvd2VyIDAuMDQ0NCAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODAxICBwb3dlciAwLjQ0NSAgMC41IC0+IDAuNjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODAyICBwb3dlciAwLjA0NDUgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwMyAgcG93ZXIgMC40NDYgIDAuNSAtPiAwLjY2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwNCAgcG93ZXIgMC4wNDQ2ICAwLjUgLT4gMC4yMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDUgIHBvd2VyIDAuNDQ3ICAwLjUgLT4gMC42NjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDYgIHBvd2VyIDAuMDQ0NyAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODA3ICBwb3dlciAwLjQ0OCAgMC41IC0+IDAuNjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODA4ICBwb3dlciAwLjA0NDggIDAuNSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwOSAgcG93ZXIgMC40NDkgIDAuNSAtPiAwLjY3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxMCAgcG93ZXIgMC4wNDQ5ICAwLjUgLT4gMC4yMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTEgIHBvd2VyIDAuNDUxICAwLjUgLT4gMC42NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTIgIHBvd2VyIDAuMDQ1MSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODEzICBwb3dlciAwLjQ1MiAgMC41IC0+IDAuNjcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODE0ICBwb3dlciAwLjA0NTIgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxNSAgcG93ZXIgMC40NTMgIDAuNSAtPiAwLjY3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxNiAgcG93ZXIgMC4wNDUzICAwLjUgLT4gMC4yMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTcgIHBvd2VyIDAuNDU0ICAwLjUgLT4gMC42NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTggIHBvd2VyIDAuMDQ1NCAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODE5ICBwb3dlciAwLjQ1NSAgMC41IC0+IDAuNjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODIwICBwb3dlciAwLjA0NTUgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyMSAgcG93ZXIgMC40NTYgIDAuNSAtPiAwLjY3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyMiAgcG93ZXIgMC4wNDU2ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjMgIHBvd2VyIDAuNDU3ICAwLjUgLT4gMC42NzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjQgIHBvd2VyIDAuMDQ1NyAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODI1ICBwb3dlciAwLjQ1OCAgMC41IC0+IDAuNjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODI2ICBwb3dlciAwLjA0NTggIDAuNSAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyNyAgcG93ZXIgMC40NTkgIDAuNSAtPiAwLjY3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyOCAgcG93ZXIgMC4wNDU5ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjkgIHBvd2VyIDAuNDYxICAwLjUgLT4gMC42NzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzAgIHBvd2VyIDAuMDQ2MSAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODMxICBwb3dlciAwLjQ2MiAgMC41IC0+IDAuNjgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODMyICBwb3dlciAwLjA0NjIgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzMyAgcG93ZXIgMC40NjMgIDAuNSAtPiAwLjY4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzNCAgcG93ZXIgMC4wNDYzICAwLjUgLT4gMC4yMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzUgIHBvd2VyIDAuNDY0ICAwLjUgLT4gMC42ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzYgIHBvd2VyIDAuMDQ2NCAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODM3ICBwb3dlciAwLjQ2NSAgMC41IC0+IDAuNjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODM4ICBwb3dlciAwLjA0NjUgIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzOSAgcG93ZXIgMC40NjYgIDAuNSAtPiAwLjY4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0MCAgcG93ZXIgMC4wNDY2ICAwLjUgLT4gMC4yMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDEgIHBvd2VyIDAuNDY3ICAwLjUgLT4gMC42ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDIgIHBvd2VyIDAuMDQ2NyAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQzICBwb3dlciAwLjQ2OCAgMC41IC0+IDAuNjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQ0ICBwb3dlciAwLjA0NjggIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0NSAgcG93ZXIgMC40NjkgIDAuNSAtPiAwLjY4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0NiAgcG93ZXIgMC4wNDY5ICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDcgIHBvd2VyIDAuNDcxICAwLjUgLT4gMC42ODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDggIHBvd2VyIDAuMDQ3MSAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQ5ICBwb3dlciAwLjQ3MiAgMC41IC0+IDAuNjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODUwICBwb3dlciAwLjA0NzIgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1MSAgcG93ZXIgMC40NzMgIDAuNSAtPiAwLjY4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1MiAgcG93ZXIgMC4wNDczICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTMgIHBvd2VyIDAuNDc0ICAwLjUgLT4gMC42ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTQgIHBvd2VyIDAuMDQ3NCAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODU1ICBwb3dlciAwLjQ3NSAgMC41IC0+IDAuNjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODU2ICBwb3dlciAwLjA0NzUgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1NyAgcG93ZXIgMC40NzYgIDAuNSAtPiAwLjY5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1OCAgcG93ZXIgMC4wNDc2ICAwLjUgLT4gMC4yMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTkgIHBvd2VyIDAuNDc3ICAwLjUgLT4gMC42OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjAgIHBvd2VyIDAuMDQ3NyAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODYxICBwb3dlciAwLjQ3OCAgMC41IC0+IDAuNjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODYyICBwb3dlciAwLjA0NzggIDAuNSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2MyAgcG93ZXIgMC40NzkgIDAuNSAtPiAwLjY5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2NCAgcG93ZXIgMC4wNDc5ICAwLjUgLT4gMC4yMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjUgIHBvd2VyIDAuNDgxICAwLjUgLT4gMC42OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjYgIHBvd2VyIDAuMDQ4MSAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODY3ICBwb3dlciAwLjQ4MiAgMC41IC0+IDAuNjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODY4ICBwb3dlciAwLjA0ODIgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2OSAgcG93ZXIgMC40ODMgIDAuNSAtPiAwLjY5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3MCAgcG93ZXIgMC4wNDgzICAwLjUgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzEgIHBvd2VyIDAuNDg0ICAwLjUgLT4gMC42OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzIgIHBvd2VyIDAuMDQ4NCAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODczICBwb3dlciAwLjQ4NSAgMC41IC0+IDAuNjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODc0ICBwb3dlciAwLjA0ODUgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3NSAgcG93ZXIgMC40ODYgIDAuNSAtPiAwLjY5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3NiAgcG93ZXIgMC4wNDg2ICAwLjUgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzcgIHBvd2VyIDAuNDg3ICAwLjUgLT4gMC42OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzggIHBvd2VyIDAuMDQ4NyAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODc5ICBwb3dlciAwLjQ4OCAgMC41IC0+IDAuNjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODgwICBwb3dlciAwLjA0ODggIDAuNSAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4MSAgcG93ZXIgMC40ODkgIDAuNSAtPiAwLjY5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4MiAgcG93ZXIgMC4wNDg5ICAwLjUgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODMgIHBvd2VyIDAuNDkxICAwLjUgLT4gMC43MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODQgIHBvd2VyIDAuMDQ5MSAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODg1ICBwb3dlciAwLjQ5MiAgMC41IC0+IDAuNzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODg2ICBwb3dlciAwLjA0OTIgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4NyAgcG93ZXIgMC40OTMgIDAuNSAtPiAwLjcwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4OCAgcG93ZXIgMC4wNDkzICAwLjUgLT4gMC4yMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODkgIHBvd2VyIDAuNDk0ICAwLjUgLT4gMC43MDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTAgIHBvd2VyIDAuMDQ5NCAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODkxICBwb3dlciAwLjQ5NSAgMC41IC0+IDAuNzA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODkyICBwb3dlciAwLjA0OTUgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5MyAgcG93ZXIgMC40OTYgIDAuNSAtPiAwLjcwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5NCAgcG93ZXIgMC4wNDk2ICAwLjUgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTUgIHBvd2VyIDAuNDk3ICAwLjUgLT4gMC43MDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTYgIHBvd2VyIDAuMDQ5NyAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODk3ICBwb3dlciAwLjQ5OCAgMC41IC0+IDAuNzA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODk4ICBwb3dlciAwLjA0OTggIDAuNSAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5OSAgcG93ZXIgMC40OTkgIDAuNSAtPiAwLjcwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwMCAgcG93ZXIgMC4wNDk5ICAwLjUgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDEgIHBvd2VyIDAuNTAxICAwLjUgLT4gMC43MDggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDIgIHBvd2VyIDAuMDUwMSAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTAzICBwb3dlciAwLjUwMiAgMC41IC0+IDAuNzA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTA0ICBwb3dlciAwLjA1MDIgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwNSAgcG93ZXIgMC41MDMgIDAuNSAtPiAwLjcwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwNiAgcG93ZXIgMC4wNTAzICAwLjUgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDcgIHBvd2VyIDAuNTA0ICAwLjUgLT4gMC43MTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDggIHBvd2VyIDAuMDUwNCAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTA5ICBwb3dlciAwLjUwNSAgMC41IC0+IDAuNzExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTEwICBwb3dlciAwLjA1MDUgIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxMSAgcG93ZXIgMC41MDYgIDAuNSAtPiAwLjcxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxMiAgcG93ZXIgMC4wNTA2ICAwLjUgLT4gMC4yMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTMgIHBvd2VyIDAuNTA3ICAwLjUgLT4gMC43MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTQgIHBvd2VyIDAuMDUwNyAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTE1ICBwb3dlciAwLjUwOCAgMC41IC0+IDAuNzEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTE2ICBwb3dlciAwLjA1MDggIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxNyAgcG93ZXIgMC41MDkgIDAuNSAtPiAwLjcxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxOCAgcG93ZXIgMC4wNTA5ICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTkgIHBvd2VyIDAuNTExICAwLjUgLT4gMC43MTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjAgIHBvd2VyIDAuMDUxMSAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTIxICBwb3dlciAwLjUxMiAgMC41IC0+IDAuNzE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTIyICBwb3dlciAwLjA1MTIgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyMyAgcG93ZXIgMC41MTMgIDAuNSAtPiAwLjcxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyNCAgcG93ZXIgMC4wNTEzICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjUgIHBvd2VyIDAuNTE0ICAwLjUgLT4gMC43MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjYgIHBvd2VyIDAuMDUxNCAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTI3ICBwb3dlciAwLjUxNSAgMC41IC0+IDAuNzE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTI4ICBwb3dlciAwLjA1MTUgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyOSAgcG93ZXIgMC41MTYgIDAuNSAtPiAwLjcxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzMCAgcG93ZXIgMC4wNTE2ICAwLjUgLT4gMC4yMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzEgIHBvd2VyIDAuNTE3ICAwLjUgLT4gMC43MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzIgIHBvd2VyIDAuMDUxNyAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTMzICBwb3dlciAwLjUxOCAgMC41IC0+IDAuNzIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTM0ICBwb3dlciAwLjA1MTggIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzNSAgcG93ZXIgMC41MTkgIDAuNSAtPiAwLjcyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzNiAgcG93ZXIgMC4wNTE5ICAwLjUgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzcgIHBvd2VyIDAuNTIxICAwLjUgLT4gMC43MjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzggIHBvd2VyIDAuMDUyMSAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTM5ICBwb3dlciAwLjUyMiAgMC41IC0+IDAuNzIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQwICBwb3dlciAwLjA1MjIgIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0MSAgcG93ZXIgMC41MjMgIDAuNSAtPiAwLjcyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0MiAgcG93ZXIgMC4wNTIzICAwLjUgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDMgIHBvd2VyIDAuNTI0ICAwLjUgLT4gMC43MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDQgIHBvd2VyIDAuMDUyNCAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQ1ICBwb3dlciAwLjUyNSAgMC41IC0+IDAuNzI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQ2ICBwb3dlciAwLjA1MjUgIDAuNSAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0NyAgcG93ZXIgMC41MjYgIDAuNSAtPiAwLjcyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0OCAgcG93ZXIgMC4wNTI2ICAwLjUgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDkgIHBvd2VyIDAuNTI3ICAwLjUgLT4gMC43MjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTAgIHBvd2VyIDAuMDUyNyAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTUxICBwb3dlciAwLjUyOCAgMC41IC0+IDAuNzI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTUyICBwb3dlciAwLjA1MjggIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1MyAgcG93ZXIgMC41MjkgIDAuNSAtPiAwLjcyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1NCAgcG93ZXIgMC4wNTI5ICAwLjUgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTUgIHBvd2VyIDAuNTMxICAwLjUgLT4gMC43MjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTYgIHBvd2VyIDAuMDUzMSAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTU3ICBwb3dlciAwLjUzMiAgMC41IC0+IDAuNzI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTU4ICBwb3dlciAwLjA1MzIgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1OSAgcG93ZXIgMC41MzMgIDAuNSAtPiAwLjczMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2MCAgcG93ZXIgMC4wNTMzICAwLjUgLT4gMC4yMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjEgIHBvd2VyIDAuNTM0ICAwLjUgLT4gMC43MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjIgIHBvd2VyIDAuMDUzNCAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTYzICBwb3dlciAwLjUzNSAgMC41IC0+IDAuNzMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTY0ICBwb3dlciAwLjA1MzUgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2NSAgcG93ZXIgMC41MzYgIDAuNSAtPiAwLjczMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2NiAgcG93ZXIgMC4wNTM2ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjcgIHBvd2VyIDAuNTM3ICAwLjUgLT4gMC43MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjggIHBvd2VyIDAuMDUzNyAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTY5ICBwb3dlciAwLjUzOCAgMC41IC0+IDAuNzMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTcwICBwb3dlciAwLjA1MzggIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3MSAgcG93ZXIgMC41MzkgIDAuNSAtPiAwLjczNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3MiAgcG93ZXIgMC4wNTM5ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzMgIHBvd2VyIDAuNTQxICAwLjUgLT4gMC43MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzQgIHBvd2VyIDAuMDU0MSAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTc1ICBwb3dlciAwLjU0MiAgMC41IC0+IDAuNzM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTc2ICBwb3dlciAwLjA1NDIgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3NyAgcG93ZXIgMC41NDMgIDAuNSAtPiAwLjczNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3OCAgcG93ZXIgMC4wNTQzICAwLjUgLT4gMC4yMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzkgIHBvd2VyIDAuNTQ0ICAwLjUgLT4gMC43MzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODAgIHBvd2VyIDAuMDU0NCAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTgxICBwb3dlciAwLjU0NSAgMC41IC0+IDAuNzM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTgyICBwb3dlciAwLjA1NDUgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4MyAgcG93ZXIgMC41NDYgIDAuNSAtPiAwLjczOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4NCAgcG93ZXIgMC4wNTQ2ICAwLjUgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODUgIHBvd2VyIDAuNTQ3ICAwLjUgLT4gMC43NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODYgIHBvd2VyIDAuMDU0NyAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTg3ICBwb3dlciAwLjU0OCAgMC41IC0+IDAuNzQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTg4ICBwb3dlciAwLjA1NDggIDAuNSAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4OSAgcG93ZXIgMC41NDkgIDAuNSAtPiAwLjc0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5MCAgcG93ZXIgMC4wNTQ5ICAwLjUgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTEgIHBvd2VyIDAuNTUxICAwLjUgLT4gMC43NDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTIgIHBvd2VyIDAuMDU1MSAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTkzICBwb3dlciAwLjU1MiAgMC41IC0+IDAuNzQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTk0ICBwb3dlciAwLjA1NTIgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5NSAgcG93ZXIgMC41NTMgIDAuNSAtPiAwLjc0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5NiAgcG93ZXIgMC4wNTUzICAwLjUgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTcgIHBvd2VyIDAuNTU0ICAwLjUgLT4gMC43NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTggIHBvd2VyIDAuMDU1NCAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTk5ICBwb3dlciAwLjU1NSAgMC41IC0+IDAuNzQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDAwICBwb3dlciAwLjA1NTUgIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwMSAgcG93ZXIgMC41NTYgIDAuNSAtPiAwLjc0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwMiAgcG93ZXIgMC4wNTU2ICAwLjUgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDMgIHBvd2VyIDAuNTU3ICAwLjUgLT4gMC43NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDQgIHBvd2VyIDAuMDU1NyAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDA1ICBwb3dlciAwLjU1OCAgMC41IC0+IDAuNzQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDA2ICBwb3dlciAwLjA1NTggIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwNyAgcG93ZXIgMC41NTkgIDAuNSAtPiAwLjc0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwOCAgcG93ZXIgMC4wNTU5ICAwLjUgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDkgIHBvd2VyIDAuNTYxICAwLjUgLT4gMC43NDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTAgIHBvd2VyIDAuMDU2MSAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDExICBwb3dlciAwLjU2MiAgMC41IC0+IDAuNzUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDEyICBwb3dlciAwLjA1NjIgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxMyAgcG93ZXIgMC41NjMgIDAuNSAtPiAwLjc1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxNCAgcG93ZXIgMC4wNTYzICAwLjUgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTUgIHBvd2VyIDAuNTY0ICAwLjUgLT4gMC43NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTYgIHBvd2VyIDAuMDU2NCAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDE3ICBwb3dlciAwLjU2NSAgMC41IC0+IDAuNzUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDE4ICBwb3dlciAwLjA1NjUgIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxOSAgcG93ZXIgMC41NjYgIDAuNSAtPiAwLjc1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyMCAgcG93ZXIgMC4wNTY2ICAwLjUgLT4gMC4yMzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjEgIHBvd2VyIDAuNTY3ICAwLjUgLT4gMC43NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjIgIHBvd2VyIDAuMDU2NyAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDIzICBwb3dlciAwLjU2OCAgMC41IC0+IDAuNzU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDI0ICBwb3dlciAwLjA1NjggIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyNSAgcG93ZXIgMC41NjkgIDAuNSAtPiAwLjc1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyNiAgcG93ZXIgMC4wNTY5ICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjcgIHBvd2VyIDAuNTcxICAwLjUgLT4gMC43NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjggIHBvd2VyIDAuMDU3MSAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDI5ICBwb3dlciAwLjU3MiAgMC41IC0+IDAuNzU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDMwICBwb3dlciAwLjA1NzIgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzMSAgcG93ZXIgMC41NzMgIDAuNSAtPiAwLjc1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzMiAgcG93ZXIgMC4wNTczICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzMgIHBvd2VyIDAuNTc0ICAwLjUgLT4gMC43NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzQgIHBvd2VyIDAuMDU3NCAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDM1ICBwb3dlciAwLjU3NSAgMC41IC0+IDAuNzU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDM2ICBwb3dlciAwLjA1NzUgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzNyAgcG93ZXIgMC41NzYgIDAuNSAtPiAwLjc1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzOCAgcG93ZXIgMC4wNTc2ICAwLjUgLT4gMC4yNDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzkgIHBvd2VyIDAuNTc3ICAwLjUgLT4gMC43NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDAgIHBvd2VyIDAuMDU3NyAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQxICBwb3dlciAwLjU3OCAgMC41IC0+IDAuNzYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQyICBwb3dlciAwLjA1NzggIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0MyAgcG93ZXIgMC41NzkgIDAuNSAtPiAwLjc2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0NCAgcG93ZXIgMC4wNTc5ICAwLjUgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDUgIHBvd2VyIDAuNTgxICAwLjUgLT4gMC43NjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDYgIHBvd2VyIDAuMDU4MSAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQ3ICBwb3dlciAwLjU4MiAgMC41IC0+IDAuNzYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQ4ICBwb3dlciAwLjA1ODIgIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0OSAgcG93ZXIgMC41ODMgIDAuNSAtPiAwLjc2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1MCAgcG93ZXIgMC4wNTgzICAwLjUgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTEgIHBvd2VyIDAuNTg0ICAwLjUgLT4gMC43NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTIgIHBvd2VyIDAuMDU4NCAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDUzICBwb3dlciAwLjU4NSAgMC41IC0+IDAuNzY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDU0ICBwb3dlciAwLjA1ODUgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1NSAgcG93ZXIgMC41ODYgIDAuNSAtPiAwLjc2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1NiAgcG93ZXIgMC4wNTg2ICAwLjUgLT4gMC4yNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTcgIHBvd2VyIDAuNTg3ICAwLjUgLT4gMC43NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTggIHBvd2VyIDAuMDU4NyAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDU5ICBwb3dlciAwLjU4OCAgMC41IC0+IDAuNzY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDYwICBwb3dlciAwLjA1ODggIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2MSAgcG93ZXIgMC41ODkgIDAuNSAtPiAwLjc2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2MiAgcG93ZXIgMC4wNTg5ICAwLjUgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjMgIHBvd2VyIDAuNTkxICAwLjUgLT4gMC43NjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjQgIHBvd2VyIDAuMDU5MSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDY1ICBwb3dlciAwLjU5MiAgMC41IC0+IDAuNzY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDY2ICBwb3dlciAwLjA1OTIgIDAuNSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2NyAgcG93ZXIgMC41OTMgIDAuNSAtPiAwLjc3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2OCAgcG93ZXIgMC4wNTkzICAwLjUgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjkgIHBvd2VyIDAuNTk0ICAwLjUgLT4gMC43NzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzAgIHBvd2VyIDAuMDU5NCAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDcxICBwb3dlciAwLjU5NSAgMC41IC0+IDAuNzcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDcyICBwb3dlciAwLjA1OTUgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3MyAgcG93ZXIgMC41OTYgIDAuNSAtPiAwLjc3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3NCAgcG93ZXIgMC4wNTk2ICAwLjUgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzUgIHBvd2VyIDAuNTk3ICAwLjUgLT4gMC43NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzYgIHBvd2VyIDAuMDU5NyAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDc3ICBwb3dlciAwLjU5OCAgMC41IC0+IDAuNzczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDc4ICBwb3dlciAwLjA1OTggIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3OSAgcG93ZXIgMC41OTkgIDAuNSAtPiAwLjc3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4MCAgcG93ZXIgMC4wNTk5ICAwLjUgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODEgIHBvd2VyIDAuNjAxICAwLjUgLT4gMC43NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODIgIHBvd2VyIDAuMDYwMSAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDgzICBwb3dlciAwLjYwMiAgMC41IC0+IDAuNzc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDg0ICBwb3dlciAwLjA2MDIgIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4NSAgcG93ZXIgMC42MDMgIDAuNSAtPiAwLjc3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4NiAgcG93ZXIgMC4wNjAzICAwLjUgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODcgIHBvd2VyIDAuNjA0ICAwLjUgLT4gMC43NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODggIHBvd2VyIDAuMDYwNCAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDg5ICBwb3dlciAwLjYwNSAgMC41IC0+IDAuNzc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDkwICBwb3dlciAwLjA2MDUgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5MSAgcG93ZXIgMC42MDYgIDAuNSAtPiAwLjc3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5MiAgcG93ZXIgMC4wNjA2ICAwLjUgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTMgIHBvd2VyIDAuNjA3ICAwLjUgLT4gMC43NzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTQgIHBvd2VyIDAuMDYwNyAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDk1ICBwb3dlciAwLjYwOCAgMC41IC0+IDAuNzgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDk2ICBwb3dlciAwLjA2MDggIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5NyAgcG93ZXIgMC42MDkgIDAuNSAtPiAwLjc4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5OCAgcG93ZXIgMC4wNjA5ICAwLjUgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTkgIHBvd2VyIDAuNjExICAwLjUgLT4gMC43ODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDAgIHBvd2VyIDAuMDYxMSAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTAxICBwb3dlciAwLjYxMiAgMC41IC0+IDAuNzgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTAyICBwb3dlciAwLjA2MTIgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwMyAgcG93ZXIgMC42MTMgIDAuNSAtPiAwLjc4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwNCAgcG93ZXIgMC4wNjEzICAwLjUgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDUgIHBvd2VyIDAuNjE0ICAwLjUgLT4gMC43ODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDYgIHBvd2VyIDAuMDYxNCAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTA3ICBwb3dlciAwLjYxNSAgMC41IC0+IDAuNzg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTA4ICBwb3dlciAwLjA2MTUgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwOSAgcG93ZXIgMC42MTYgIDAuNSAtPiAwLjc4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExMCAgcG93ZXIgMC4wNjE2ICAwLjUgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTEgIHBvd2VyIDAuNjE3ICAwLjUgLT4gMC43ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTIgIHBvd2VyIDAuMDYxNyAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTEzICBwb3dlciAwLjYxOCAgMC41IC0+IDAuNzg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTE0ICBwb3dlciAwLjA2MTggIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExNSAgcG93ZXIgMC42MTkgIDAuNSAtPiAwLjc4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExNiAgcG93ZXIgMC4wNjE5ICAwLjUgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTcgIHBvd2VyIDAuNjIxICAwLjUgLT4gMC43ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTggIHBvd2VyIDAuMDYyMSAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTE5ICBwb3dlciAwLjYyMiAgMC41IC0+IDAuNzg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTIwICBwb3dlciAwLjA2MjIgIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyMSAgcG93ZXIgMC42MjMgIDAuNSAtPiAwLjc4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyMiAgcG93ZXIgMC4wNjIzICAwLjUgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjMgIHBvd2VyIDAuNjI0ICAwLjUgLT4gMC43OTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjQgIHBvd2VyIDAuMDYyNCAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTI1ICBwb3dlciAwLjYyNSAgMC41IC0+IDAuNzkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTI2ICBwb3dlciAwLjA2MjUgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyNyAgcG93ZXIgMC42MjYgIDAuNSAtPiAwLjc5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyOCAgcG93ZXIgMC4wNjI2ICAwLjUgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjkgIHBvd2VyIDAuNjI3ICAwLjUgLT4gMC43OTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzAgIHBvd2VyIDAuMDYyNyAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTMxICBwb3dlciAwLjYyOCAgMC41IC0+IDAuNzkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTMyICBwb3dlciAwLjA2MjggIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzMyAgcG93ZXIgMC42MjkgIDAuNSAtPiAwLjc5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzNCAgcG93ZXIgMC4wNjI5ICAwLjUgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzUgIHBvd2VyIDAuNjMxICAwLjUgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzYgIHBvd2VyIDAuMDYzMSAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTM3ICBwb3dlciAwLjYzMiAgMC41IC0+IDAuNzk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTM4ICBwb3dlciAwLjA2MzIgIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzOSAgcG93ZXIgMC42MzMgIDAuNSAtPiAwLjc5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0MCAgcG93ZXIgMC4wNjMzICAwLjUgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDEgIHBvd2VyIDAuNjM0ICAwLjUgLT4gMC43OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDIgIHBvd2VyIDAuMDYzNCAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQzICBwb3dlciAwLjYzNSAgMC41IC0+IDAuNzk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQ0ICBwb3dlciAwLjA2MzUgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0NSAgcG93ZXIgMC42MzYgIDAuNSAtPiAwLjc5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0NiAgcG93ZXIgMC4wNjM2ICAwLjUgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDcgIHBvd2VyIDAuNjM3ICAwLjUgLT4gMC43OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDggIHBvd2VyIDAuMDYzNyAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQ5ICBwb3dlciAwLjYzOCAgMC41IC0+IDAuNzk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTUwICBwb3dlciAwLjA2MzggIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1MSAgcG93ZXIgMC42MzkgIDAuNSAtPiAwLjc5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1MiAgcG93ZXIgMC4wNjM5ICAwLjUgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTMgIHBvd2VyIDAuNjQxICAwLjUgLT4gMC44MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTQgIHBvd2VyIDAuMDY0MSAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTU1ICBwb3dlciAwLjY0MiAgMC41IC0+IDAuODAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTU2ICBwb3dlciAwLjA2NDIgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1NyAgcG93ZXIgMC42NDMgIDAuNSAtPiAwLjgwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1OCAgcG93ZXIgMC4wNjQzICAwLjUgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTkgIHBvd2VyIDAuNjQ0ICAwLjUgLT4gMC44MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjAgIHBvd2VyIDAuMDY0NCAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTYxICBwb3dlciAwLjY0NSAgMC41IC0+IDAuODAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTYyICBwb3dlciAwLjA2NDUgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2MyAgcG93ZXIgMC42NDYgIDAuNSAtPiAwLjgwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2NCAgcG93ZXIgMC4wNjQ2ICAwLjUgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjUgIHBvd2VyIDAuNjQ3ICAwLjUgLT4gMC44MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjYgIHBvd2VyIDAuMDY0NyAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTY3ICBwb3dlciAwLjY0OCAgMC41IC0+IDAuODA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTY4ICBwb3dlciAwLjA2NDggIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2OSAgcG93ZXIgMC42NDkgIDAuNSAtPiAwLjgwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3MCAgcG93ZXIgMC4wNjQ5ICAwLjUgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzEgIHBvd2VyIDAuNjUxICAwLjUgLT4gMC44MDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzIgIHBvd2VyIDAuMDY1MSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTczICBwb3dlciAwLjY1MiAgMC41IC0+IDAuODA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTc0ICBwb3dlciAwLjA2NTIgIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3NSAgcG93ZXIgMC42NTMgIDAuNSAtPiAwLjgwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3NiAgcG93ZXIgMC4wNjUzICAwLjUgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzcgIHBvd2VyIDAuNjU0ICAwLjUgLT4gMC44MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzggIHBvd2VyIDAuMDY1NCAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTc5ICBwb3dlciAwLjY1NSAgMC41IC0+IDAuODA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTgwICBwb3dlciAwLjA2NTUgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4MSAgcG93ZXIgMC42NTYgIDAuNSAtPiAwLjgxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4MiAgcG93ZXIgMC4wNjU2ICAwLjUgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODMgIHBvd2VyIDAuNjU3ICAwLjUgLT4gMC44MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODQgIHBvd2VyIDAuMDY1NyAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTg1ICBwb3dlciAwLjY1OCAgMC41IC0+IDAuODExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTg2ICBwb3dlciAwLjA2NTggIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4NyAgcG93ZXIgMC42NTkgIDAuNSAtPiAwLjgxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4OCAgcG93ZXIgMC4wNjU5ICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODkgIHBvd2VyIDAuNjYxICAwLjUgLT4gMC44MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTAgIHBvd2VyIDAuMDY2MSAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTkxICBwb3dlciAwLjY2MiAgMC41IC0+IDAuODE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTkyICBwb3dlciAwLjA2NjIgIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5MyAgcG93ZXIgMC42NjMgIDAuNSAtPiAwLjgxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5NCAgcG93ZXIgMC4wNjYzICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTUgIHBvd2VyIDAuNjY0ICAwLjUgLT4gMC44MTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTYgIHBvd2VyIDAuMDY2NCAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTk3ICBwb3dlciAwLjY2NSAgMC41IC0+IDAuODE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTk4ICBwb3dlciAwLjA2NjUgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5OSAgcG93ZXIgMC42NjYgIDAuNSAtPiAwLjgxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwMCAgcG93ZXIgMC4wNjY2ICAwLjUgLT4gMC4yNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDEgIHBvd2VyIDAuNjY3ICAwLjUgLT4gMC44MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDIgIHBvd2VyIDAuMDY2NyAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjAzICBwb3dlciAwLjY2OCAgMC41IC0+IDAuODE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjA0ICBwb3dlciAwLjA2NjggIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwNSAgcG93ZXIgMC42NjkgIDAuNSAtPiAwLjgxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwNiAgcG93ZXIgMC4wNjY5ICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDcgIHBvd2VyIDAuNjcxICAwLjUgLT4gMC44MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDggIHBvd2VyIDAuMDY3MSAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjA5ICBwb3dlciAwLjY3MiAgMC41IC0+IDAuODIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjEwICBwb3dlciAwLjA2NzIgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxMSAgcG93ZXIgMC42NzMgIDAuNSAtPiAwLjgyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxMiAgcG93ZXIgMC4wNjczICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTMgIHBvd2VyIDAuNjc0ICAwLjUgLT4gMC44MjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTQgIHBvd2VyIDAuMDY3NCAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjE1ICBwb3dlciAwLjY3NSAgMC41IC0+IDAuODIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjE2ICBwb3dlciAwLjA2NzUgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxNyAgcG93ZXIgMC42NzYgIDAuNSAtPiAwLjgyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxOCAgcG93ZXIgMC4wNjc2ICAwLjUgLT4gMC4yNjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTkgIHBvd2VyIDAuNjc3ICAwLjUgLT4gMC44MjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjAgIHBvd2VyIDAuMDY3NyAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjIxICBwb3dlciAwLjY3OCAgMC41IC0+IDAuODIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjIyICBwb3dlciAwLjA2NzggIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyMyAgcG93ZXIgMC42NzkgIDAuNSAtPiAwLjgyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyNCAgcG93ZXIgMC4wNjc5ICAwLjUgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjUgIHBvd2VyIDAuNjgxICAwLjUgLT4gMC44MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjYgIHBvd2VyIDAuMDY4MSAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjI3ICBwb3dlciAwLjY4MiAgMC41IC0+IDAuODI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjI4ICBwb3dlciAwLjA2ODIgIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyOSAgcG93ZXIgMC42ODMgIDAuNSAtPiAwLjgyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzMCAgcG93ZXIgMC4wNjgzICAwLjUgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzEgIHBvd2VyIDAuNjg0ICAwLjUgLT4gMC44MjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzIgIHBvd2VyIDAuMDY4NCAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjMzICBwb3dlciAwLjY4NSAgMC41IC0+IDAuODI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjM0ICBwb3dlciAwLjA2ODUgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzNSAgcG93ZXIgMC42ODYgIDAuNSAtPiAwLjgyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzNiAgcG93ZXIgMC4wNjg2ICAwLjUgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzcgIHBvd2VyIDAuNjg3ICAwLjUgLT4gMC44MjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzggIHBvd2VyIDAuMDY4NyAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjM5ICBwb3dlciAwLjY4OCAgMC41IC0+IDAuODI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQwICBwb3dlciAwLjA2ODggIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0MSAgcG93ZXIgMC42ODkgIDAuNSAtPiAwLjgzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0MiAgcG93ZXIgMC4wNjg5ICAwLjUgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDMgIHBvd2VyIDAuNjkxICAwLjUgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDQgIHBvd2VyIDAuMDY5MSAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQ1ICBwb3dlciAwLjY5MiAgMC41IC0+IDAuODMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQ2ICBwb3dlciAwLjA2OTIgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0NyAgcG93ZXIgMC42OTMgIDAuNSAtPiAwLjgzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0OCAgcG93ZXIgMC4wNjkzICAwLjUgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDkgIHBvd2VyIDAuNjk0ICAwLjUgLT4gMC44MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTAgIHBvd2VyIDAuMDY5NCAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjUxICBwb3dlciAwLjY5NSAgMC41IC0+IDAuODM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjUyICBwb3dlciAwLjA2OTUgIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1MyAgcG93ZXIgMC42OTYgIDAuNSAtPiAwLjgzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1NCAgcG93ZXIgMC4wNjk2ICAwLjUgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTUgIHBvd2VyIDAuNjk3ICAwLjUgLT4gMC44MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTYgIHBvd2VyIDAuMDY5NyAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjU3ICBwb3dlciAwLjY5OCAgMC41IC0+IDAuODM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjU4ICBwb3dlciAwLjA2OTggIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1OSAgcG93ZXIgMC42OTkgIDAuNSAtPiAwLjgzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2MCAgcG93ZXIgMC4wNjk5ICAwLjUgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjEgIHBvd2VyIDAuNzAxICAwLjUgLT4gMC44MzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjIgIHBvd2VyIDAuMDcwMSAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjYzICBwb3dlciAwLjcwMiAgMC41IC0+IDAuODM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjY0ICBwb3dlciAwLjA3MDIgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2NSAgcG93ZXIgMC43MDMgIDAuNSAtPiAwLjgzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2NiAgcG93ZXIgMC4wNzAzICAwLjUgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjcgIHBvd2VyIDAuNzA0ICAwLjUgLT4gMC44MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjggIHBvd2VyIDAuMDcwNCAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjY5ICBwb3dlciAwLjcwNSAgMC41IC0+IDAuODQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjcwICBwb3dlciAwLjA3MDUgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3MSAgcG93ZXIgMC43MDYgIDAuNSAtPiAwLjg0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3MiAgcG93ZXIgMC4wNzA2ICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzMgIHBvd2VyIDAuNzA3ICAwLjUgLT4gMC44NDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzQgIHBvd2VyIDAuMDcwNyAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjc1ICBwb3dlciAwLjcwOCAgMC41IC0+IDAuODQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjc2ICBwb3dlciAwLjA3MDggIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3NyAgcG93ZXIgMC43MDkgIDAuNSAtPiAwLjg0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3OCAgcG93ZXIgMC4wNzA5ICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzkgIHBvd2VyIDAuNzExICAwLjUgLT4gMC44NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODAgIHBvd2VyIDAuMDcxMSAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjgxICBwb3dlciAwLjcxMiAgMC41IC0+IDAuODQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjgyICBwb3dlciAwLjA3MTIgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4MyAgcG93ZXIgMC43MTMgIDAuNSAtPiAwLjg0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4NCAgcG93ZXIgMC4wNzEzICAwLjUgLT4gMC4yNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODUgIHBvd2VyIDAuNzE0ICAwLjUgLT4gMC44NDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODYgIHBvd2VyIDAuMDcxNCAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjg3ICBwb3dlciAwLjcxNSAgMC41IC0+IDAuODQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjg4ICBwb3dlciAwLjA3MTUgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4OSAgcG93ZXIgMC43MTYgIDAuNSAtPiAwLjg0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5MCAgcG93ZXIgMC4wNzE2ICAwLjUgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTEgIHBvd2VyIDAuNzE3ICAwLjUgLT4gMC44NDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTIgIHBvd2VyIDAuMDcxNyAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjkzICBwb3dlciAwLjcxOCAgMC41IC0+IDAuODQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjk0ICBwb3dlciAwLjA3MTggIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5NSAgcG93ZXIgMC43MTkgIDAuNSAtPiAwLjg0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5NiAgcG93ZXIgMC4wNzE5ICAwLjUgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTcgIHBvd2VyIDAuNzIxICAwLjUgLT4gMC44NDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTggIHBvd2VyIDAuMDcyMSAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjk5ICBwb3dlciAwLjcyMiAgMC41IC0+IDAuODUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzAwICBwb3dlciAwLjA3MjIgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwMSAgcG93ZXIgMC43MjMgIDAuNSAtPiAwLjg1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwMiAgcG93ZXIgMC4wNzIzICAwLjUgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDMgIHBvd2VyIDAuNzI0ICAwLjUgLT4gMC44NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDQgIHBvd2VyIDAuMDcyNCAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzA1ICBwb3dlciAwLjcyNSAgMC41IC0+IDAuODUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzA2ICBwb3dlciAwLjA3MjUgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwNyAgcG93ZXIgMC43MjYgIDAuNSAtPiAwLjg1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwOCAgcG93ZXIgMC4wNzI2ICAwLjUgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDkgIHBvd2VyIDAuNzI3ICAwLjUgLT4gMC44NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTAgIHBvd2VyIDAuMDcyNyAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzExICBwb3dlciAwLjcyOCAgMC41IC0+IDAuODUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzEyICBwb3dlciAwLjA3MjggIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxMyAgcG93ZXIgMC43MjkgIDAuNSAtPiAwLjg1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxNCAgcG93ZXIgMC4wNzI5ICAwLjUgLT4gMC4yNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTUgIHBvd2VyIDAuNzMxICAwLjUgLT4gMC44NTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTYgIHBvd2VyIDAuMDczMSAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzE3ICBwb3dlciAwLjczMiAgMC41IC0+IDAuODU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzE4ICBwb3dlciAwLjA3MzIgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxOSAgcG93ZXIgMC43MzMgIDAuNSAtPiAwLjg1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyMCAgcG93ZXIgMC4wNzMzICAwLjUgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjEgIHBvd2VyIDAuNzM0ICAwLjUgLT4gMC44NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjIgIHBvd2VyIDAuMDczNCAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzIzICBwb3dlciAwLjczNSAgMC41IC0+IDAuODU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzI0ICBwb3dlciAwLjA3MzUgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyNSAgcG93ZXIgMC43MzYgIDAuNSAtPiAwLjg1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyNiAgcG93ZXIgMC4wNzM2ICAwLjUgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjcgIHBvd2VyIDAuNzM3ICAwLjUgLT4gMC44NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjggIHBvd2VyIDAuMDczNyAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzI5ICBwb3dlciAwLjczOCAgMC41IC0+IDAuODU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzMwICBwb3dlciAwLjA3MzggIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzMSAgcG93ZXIgMC43MzkgIDAuNSAtPiAwLjg2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzMiAgcG93ZXIgMC4wNzM5ICAwLjUgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzMgIHBvd2VyIDAuNzQxICAwLjUgLT4gMC44NjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzQgIHBvd2VyIDAuMDc0MSAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzM1ICBwb3dlciAwLjc0MiAgMC41IC0+IDAuODYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzM2ICBwb3dlciAwLjA3NDIgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzNyAgcG93ZXIgMC43NDMgIDAuNSAtPiAwLjg2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzOCAgcG93ZXIgMC4wNzQzICAwLjUgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzkgIHBvd2VyIDAuNzQ0ICAwLjUgLT4gMC44NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDAgIHBvd2VyIDAuMDc0NCAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQxICBwb3dlciAwLjc0NSAgMC41IC0+IDAuODYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQyICBwb3dlciAwLjA3NDUgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0MyAgcG93ZXIgMC43NDYgIDAuNSAtPiAwLjg2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0NCAgcG93ZXIgMC4wNzQ2ICAwLjUgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDUgIHBvd2VyIDAuNzQ3ICAwLjUgLT4gMC44NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDYgIHBvd2VyIDAuMDc0NyAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQ3ICBwb3dlciAwLjc0OCAgMC41IC0+IDAuODY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQ4ICBwb3dlciAwLjA3NDggIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0OSAgcG93ZXIgMC43NDkgIDAuNSAtPiAwLjg2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1MCAgcG93ZXIgMC4wNzQ5ICAwLjUgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTEgIHBvd2VyIDAuNzUxICAwLjUgLT4gMC44NjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTIgIHBvd2VyIDAuMDc1MSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzUzICBwb3dlciAwLjc1MiAgMC41IC0+IDAuODY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzU0ICBwb3dlciAwLjA3NTIgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1NSAgcG93ZXIgMC43NTMgIDAuNSAtPiAwLjg2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1NiAgcG93ZXIgMC4wNzUzICAwLjUgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTcgIHBvd2VyIDAuNzU0ICAwLjUgLT4gMC44NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTggIHBvd2VyIDAuMDc1NCAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzU5ICBwb3dlciAwLjc1NSAgMC41IC0+IDAuODY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzYwICBwb3dlciAwLjA3NTUgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2MSAgcG93ZXIgMC43NTYgIDAuNSAtPiAwLjg2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2MiAgcG93ZXIgMC4wNzU2ICAwLjUgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjMgIHBvd2VyIDAuNzU3ICAwLjUgLT4gMC44NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjQgIHBvd2VyIDAuMDc1NyAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzY1ICBwb3dlciAwLjc1OCAgMC41IC0+IDAuODcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzY2ICBwb3dlciAwLjA3NTggIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2NyAgcG93ZXIgMC43NTkgIDAuNSAtPiAwLjg3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2OCAgcG93ZXIgMC4wNzU5ICAwLjUgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjkgIHBvd2VyIDAuNzYxICAwLjUgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzAgIHBvd2VyIDAuMDc2MSAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzcxICBwb3dlciAwLjc2MiAgMC41IC0+IDAuODczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzcyICBwb3dlciAwLjA3NjIgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3MyAgcG93ZXIgMC43NjMgIDAuNSAtPiAwLjg3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3NCAgcG93ZXIgMC4wNzYzICAwLjUgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzUgIHBvd2VyIDAuNzY0ICAwLjUgLT4gMC44NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzYgIHBvd2VyIDAuMDc2NCAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzc3ICBwb3dlciAwLjc2NSAgMC41IC0+IDAuODc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzc4ICBwb3dlciAwLjA3NjUgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3OSAgcG93ZXIgMC43NjYgIDAuNSAtPiAwLjg3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4MCAgcG93ZXIgMC4wNzY2ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODEgIHBvd2VyIDAuNzY3ICAwLjUgLT4gMC44NzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODIgIHBvd2VyIDAuMDc2NyAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzgzICBwb3dlciAwLjc2OCAgMC41IC0+IDAuODc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzg0ICBwb3dlciAwLjA3NjggIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4NSAgcG93ZXIgMC43NjkgIDAuNSAtPiAwLjg3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4NiAgcG93ZXIgMC4wNzY5ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODcgIHBvd2VyIDAuNzcxICAwLjUgLT4gMC44NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODggIHBvd2VyIDAuMDc3MSAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzg5ICBwb3dlciAwLjc3MiAgMC41IC0+IDAuODc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzkwICBwb3dlciAwLjA3NzIgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5MSAgcG93ZXIgMC43NzMgIDAuNSAtPiAwLjg3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5MiAgcG93ZXIgMC4wNzczICAwLjUgLT4gMC4yNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTMgIHBvd2VyIDAuNzc0ICAwLjUgLT4gMC44ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTQgIHBvd2VyIDAuMDc3NCAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzk1ICBwb3dlciAwLjc3NSAgMC41IC0+IDAuODgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzk2ICBwb3dlciAwLjA3NzUgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5NyAgcG93ZXIgMC43NzYgIDAuNSAtPiAwLjg4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5OCAgcG93ZXIgMC4wNzc2ICAwLjUgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTkgIHBvd2VyIDAuNzc3ICAwLjUgLT4gMC44ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDAgIHBvd2VyIDAuMDc3NyAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDAxICBwb3dlciAwLjc3OCAgMC41IC0+IDAuODgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDAyICBwb3dlciAwLjA3NzggIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwMyAgcG93ZXIgMC43NzkgIDAuNSAtPiAwLjg4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwNCAgcG93ZXIgMC4wNzc5ICAwLjUgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDUgIHBvd2VyIDAuNzgxICAwLjUgLT4gMC44ODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDYgIHBvd2VyIDAuMDc4MSAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDA3ICBwb3dlciAwLjc4MiAgMC41IC0+IDAuODg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDA4ICBwb3dlciAwLjA3ODIgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwOSAgcG93ZXIgMC43ODMgIDAuNSAtPiAwLjg4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxMCAgcG93ZXIgMC4wNzgzICAwLjUgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTEgIHBvd2VyIDAuNzg0ICAwLjUgLT4gMC44ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTIgIHBvd2VyIDAuMDc4NCAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDEzICBwb3dlciAwLjc4NSAgMC41IC0+IDAuODg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDE0ICBwb3dlciAwLjA3ODUgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxNSAgcG93ZXIgMC43ODYgIDAuNSAtPiAwLjg4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxNiAgcG93ZXIgMC4wNzg2ICAwLjUgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTcgIHBvd2VyIDAuNzg3ICAwLjUgLT4gMC44ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTggIHBvd2VyIDAuMDc4NyAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDE5ICBwb3dlciAwLjc4OCAgMC41IC0+IDAuODg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDIwICBwb3dlciAwLjA3ODggIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyMSAgcG93ZXIgMC43ODkgIDAuNSAtPiAwLjg4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyMiAgcG93ZXIgMC4wNzg5ICAwLjUgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjMgIHBvd2VyIDAuNzkxICAwLjUgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjQgIHBvd2VyIDAuMDc5MSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDI1ICBwb3dlciAwLjc5MiAgMC41IC0+IDAuODkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDI2ICBwb3dlciAwLjA3OTIgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyNyAgcG93ZXIgMC43OTMgIDAuNSAtPiAwLjg5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyOCAgcG93ZXIgMC4wNzkzICAwLjUgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjkgIHBvd2VyIDAuNzk0ICAwLjUgLT4gMC44OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzAgIHBvd2VyIDAuMDc5NCAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDMxICBwb3dlciAwLjc5NSAgMC41IC0+IDAuODkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDMyICBwb3dlciAwLjA3OTUgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzMyAgcG93ZXIgMC43OTYgIDAuNSAtPiAwLjg5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzNCAgcG93ZXIgMC4wNzk2ICAwLjUgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzUgIHBvd2VyIDAuNzk3ICAwLjUgLT4gMC44OTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzYgIHBvd2VyIDAuMDc5NyAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDM3ICBwb3dlciAwLjc5OCAgMC41IC0+IDAuODkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDM4ICBwb3dlciAwLjA3OTggIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzOSAgcG93ZXIgMC43OTkgIDAuNSAtPiAwLjg5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0MCAgcG93ZXIgMC4wNzk5ICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDEgIHBvd2VyIDAuODAxICAwLjUgLT4gMC44OTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDIgIHBvd2VyIDAuMDgwMSAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQzICBwb3dlciAwLjgwMiAgMC41IC0+IDAuODk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQ0ICBwb3dlciAwLjA4MDIgIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0NSAgcG93ZXIgMC44MDMgIDAuNSAtPiAwLjg5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0NiAgcG93ZXIgMC4wODAzICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDcgIHBvd2VyIDAuODA0ICAwLjUgLT4gMC44OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDggIHBvd2VyIDAuMDgwNCAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQ5ICBwb3dlciAwLjgwNSAgMC41IC0+IDAuODk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDUwICBwb3dlciAwLjA4MDUgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1MSAgcG93ZXIgMC44MDYgIDAuNSAtPiAwLjg5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1MiAgcG93ZXIgMC4wODA2ICAwLjUgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTMgIHBvd2VyIDAuODA3ICAwLjUgLT4gMC44OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTQgIHBvd2VyIDAuMDgwNyAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDU1ICBwb3dlciAwLjgwOCAgMC41IC0+IDAuODk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDU2ICBwb3dlciAwLjA4MDggIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1NyAgcG93ZXIgMC44MDkgIDAuNSAtPiAwLjg5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1OCAgcG93ZXIgMC4wODA5ICAwLjUgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTkgIHBvd2VyIDAuODExICAwLjUgLT4gMC45MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjAgIHBvd2VyIDAuMDgxMSAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDYxICBwb3dlciAwLjgxMiAgMC41IC0+IDAuOTAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDYyICBwb3dlciAwLjA4MTIgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2MyAgcG93ZXIgMC44MTMgIDAuNSAtPiAwLjkwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2NCAgcG93ZXIgMC4wODEzICAwLjUgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjUgIHBvd2VyIDAuODE0ICAwLjUgLT4gMC45MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjYgIHBvd2VyIDAuMDgxNCAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDY3ICBwb3dlciAwLjgxNSAgMC41IC0+IDAuOTAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDY4ICBwb3dlciAwLjA4MTUgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2OSAgcG93ZXIgMC44MTYgIDAuNSAtPiAwLjkwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3MCAgcG93ZXIgMC4wODE2ICAwLjUgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzEgIHBvd2VyIDAuODE3ICAwLjUgLT4gMC45MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzIgIHBvd2VyIDAuMDgxNyAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDczICBwb3dlciAwLjgxOCAgMC41IC0+IDAuOTA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDc0ICBwb3dlciAwLjA4MTggIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3NSAgcG93ZXIgMC44MTkgIDAuNSAtPiAwLjkwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3NiAgcG93ZXIgMC4wODE5ICAwLjUgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzcgIHBvd2VyIDAuODIxICAwLjUgLT4gMC45MDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzggIHBvd2VyIDAuMDgyMSAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDc5ICBwb3dlciAwLjgyMiAgMC41IC0+IDAuOTA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDgwICBwb3dlciAwLjA4MjIgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4MSAgcG93ZXIgMC44MjMgIDAuNSAtPiAwLjkwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4MiAgcG93ZXIgMC4wODIzICAwLjUgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODMgIHBvd2VyIDAuODI0ICAwLjUgLT4gMC45MDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODQgIHBvd2VyIDAuMDgyNCAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDg1ICBwb3dlciAwLjgyNSAgMC41IC0+IDAuOTA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDg2ICBwb3dlciAwLjA4MjUgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4NyAgcG93ZXIgMC44MjYgIDAuNSAtPiAwLjkwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4OCAgcG93ZXIgMC4wODI2ICAwLjUgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODkgIHBvd2VyIDAuODI3ICAwLjUgLT4gMC45MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTAgIHBvd2VyIDAuMDgyNyAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDkxICBwb3dlciAwLjgyOCAgMC41IC0+IDAuOTEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDkyICBwb3dlciAwLjA4MjggIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5MyAgcG93ZXIgMC44MjkgIDAuNSAtPiAwLjkxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5NCAgcG93ZXIgMC4wODI5ICAwLjUgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTUgIHBvd2VyIDAuODMxICAwLjUgLT4gMC45MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTYgIHBvd2VyIDAuMDgzMSAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDk3ICBwb3dlciAwLjgzMiAgMC41IC0+IDAuOTEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDk4ICBwb3dlciAwLjA4MzIgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5OSAgcG93ZXIgMC44MzMgIDAuNSAtPiAwLjkxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwMCAgcG93ZXIgMC4wODMzICAwLjUgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDEgIHBvd2VyIDAuODM0ICAwLjUgLT4gMC45MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDIgIHBvd2VyIDAuMDgzNCAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTAzICBwb3dlciAwLjgzNSAgMC41IC0+IDAuOTE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTA0ICBwb3dlciAwLjA4MzUgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwNSAgcG93ZXIgMC44MzYgIDAuNSAtPiAwLjkxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwNiAgcG93ZXIgMC4wODM2ICAwLjUgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDcgIHBvd2VyIDAuODM3ICAwLjUgLT4gMC45MTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDggIHBvd2VyIDAuMDgzNyAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTA5ICBwb3dlciAwLjgzOCAgMC41IC0+IDAuOTE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTEwICBwb3dlciAwLjA4MzggIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxMSAgcG93ZXIgMC44MzkgIDAuNSAtPiAwLjkxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxMiAgcG93ZXIgMC4wODM5ICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTMgIHBvd2VyIDAuODQxICAwLjUgLT4gMC45MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTQgIHBvd2VyIDAuMDg0MSAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTE1ICBwb3dlciAwLjg0MiAgMC41IC0+IDAuOTE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTE2ICBwb3dlciAwLjA4NDIgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxNyAgcG93ZXIgMC44NDMgIDAuNSAtPiAwLjkxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxOCAgcG93ZXIgMC4wODQzICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTkgIHBvd2VyIDAuODQ0ICAwLjUgLT4gMC45MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjAgIHBvd2VyIDAuMDg0NCAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTIxICBwb3dlciAwLjg0NSAgMC41IC0+IDAuOTE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTIyICBwb3dlciAwLjA4NDUgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyMyAgcG93ZXIgMC44NDYgIDAuNSAtPiAwLjkyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyNCAgcG93ZXIgMC4wODQ2ICAwLjUgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjUgIHBvd2VyIDAuODQ3ICAwLjUgLT4gMC45MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjYgIHBvd2VyIDAuMDg0NyAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTI3ICBwb3dlciAwLjg0OCAgMC41IC0+IDAuOTIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTI4ICBwb3dlciAwLjA4NDggIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyOSAgcG93ZXIgMC44NDkgIDAuNSAtPiAwLjkyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzMCAgcG93ZXIgMC4wODQ5ICAwLjUgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzEgIHBvd2VyIDAuODUxICAwLjUgLT4gMC45MjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzIgIHBvd2VyIDAuMDg1MSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTMzICBwb3dlciAwLjg1MiAgMC41IC0+IDAuOTIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTM0ICBwb3dlciAwLjA4NTIgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzNSAgcG93ZXIgMC44NTMgIDAuNSAtPiAwLjkyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzNiAgcG93ZXIgMC4wODUzICAwLjUgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzcgIHBvd2VyIDAuODU0ICAwLjUgLT4gMC45MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzggIHBvd2VyIDAuMDg1NCAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTM5ICBwb3dlciAwLjg1NSAgMC41IC0+IDAuOTI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQwICBwb3dlciAwLjA4NTUgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0MSAgcG93ZXIgMC44NTYgIDAuNSAtPiAwLjkyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0MiAgcG93ZXIgMC4wODU2ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDMgIHBvd2VyIDAuODU3ICAwLjUgLT4gMC45MjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDQgIHBvd2VyIDAuMDg1NyAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQ1ICBwb3dlciAwLjg1OCAgMC41IC0+IDAuOTI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQ2ICBwb3dlciAwLjA4NTggIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0NyAgcG93ZXIgMC44NTkgIDAuNSAtPiAwLjkyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0OCAgcG93ZXIgMC4wODU5ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDkgIHBvd2VyIDAuODYxICAwLjUgLT4gMC45MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTAgIHBvd2VyIDAuMDg2MSAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTUxICBwb3dlciAwLjg2MiAgMC41IC0+IDAuOTI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTUyICBwb3dlciAwLjA4NjIgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1MyAgcG93ZXIgMC44NjMgIDAuNSAtPiAwLjkyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1NCAgcG93ZXIgMC4wODYzICAwLjUgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTUgIHBvd2VyIDAuODY0ICAwLjUgLT4gMC45MzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTYgIHBvd2VyIDAuMDg2NCAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTU3ICBwb3dlciAwLjg2NSAgMC41IC0+IDAuOTMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTU4ICBwb3dlciAwLjA4NjUgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1OSAgcG93ZXIgMC44NjYgIDAuNSAtPiAwLjkzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2MCAgcG93ZXIgMC4wODY2ICAwLjUgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjEgIHBvd2VyIDAuODY3ICAwLjUgLT4gMC45MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjIgIHBvd2VyIDAuMDg2NyAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTYzICBwb3dlciAwLjg2OCAgMC41IC0+IDAuOTMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTY0ICBwb3dlciAwLjA4NjggIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2NSAgcG93ZXIgMC44NjkgIDAuNSAtPiAwLjkzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2NiAgcG93ZXIgMC4wODY5ICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjcgIHBvd2VyIDAuODcxICAwLjUgLT4gMC45MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjggIHBvd2VyIDAuMDg3MSAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTY5ICBwb3dlciAwLjg3MiAgMC41IC0+IDAuOTM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTcwICBwb3dlciAwLjA4NzIgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3MSAgcG93ZXIgMC44NzMgIDAuNSAtPiAwLjkzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3MiAgcG93ZXIgMC4wODczICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzMgIHBvd2VyIDAuODc0ICAwLjUgLT4gMC45MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzQgIHBvd2VyIDAuMDg3NCAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTc1ICBwb3dlciAwLjg3NSAgMC41IC0+IDAuOTM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTc2ICBwb3dlciAwLjA4NzUgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3NyAgcG93ZXIgMC44NzYgIDAuNSAtPiAwLjkzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3OCAgcG93ZXIgMC4wODc2ICAwLjUgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzkgIHBvd2VyIDAuODc3ICAwLjUgLT4gMC45MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODAgIHBvd2VyIDAuMDg3NyAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTgxICBwb3dlciAwLjg3OCAgMC41IC0+IDAuOTM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTgyICBwb3dlciAwLjA4NzggIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4MyAgcG93ZXIgMC44NzkgIDAuNSAtPiAwLjkzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4NCAgcG93ZXIgMC4wODc5ICAwLjUgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODUgIHBvd2VyIDAuODgxICAwLjUgLT4gMC45MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODYgIHBvd2VyIDAuMDg4MSAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTg3ICBwb3dlciAwLjg4MiAgMC41IC0+IDAuOTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTg4ICBwb3dlciAwLjA4ODIgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4OSAgcG93ZXIgMC44ODMgIDAuNSAtPiAwLjk0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5MCAgcG93ZXIgMC4wODgzICAwLjUgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTEgIHBvd2VyIDAuODg0ICAwLjUgLT4gMC45NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTIgIHBvd2VyIDAuMDg4NCAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTkzICBwb3dlciAwLjg4NSAgMC41IC0+IDAuOTQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTk0ICBwb3dlciAwLjA4ODUgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5NSAgcG93ZXIgMC44ODYgIDAuNSAtPiAwLjk0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5NiAgcG93ZXIgMC4wODg2ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTcgIHBvd2VyIDAuODg3ICAwLjUgLT4gMC45NDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTggIHBvd2VyIDAuMDg4NyAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTk5ICBwb3dlciAwLjg4OCAgMC41IC0+IDAuOTQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjAwICBwb3dlciAwLjA4ODggIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwMSAgcG93ZXIgMC44ODkgIDAuNSAtPiAwLjk0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwMiAgcG93ZXIgMC4wODg5ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDMgIHBvd2VyIDAuODkxICAwLjUgLT4gMC45NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDQgIHBvd2VyIDAuMDg5MSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjA1ICBwb3dlciAwLjg5MiAgMC41IC0+IDAuOTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjA2ICBwb3dlciAwLjA4OTIgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwNyAgcG93ZXIgMC44OTMgIDAuNSAtPiAwLjk0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwOCAgcG93ZXIgMC4wODkzICAwLjUgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDkgIHBvd2VyIDAuODk0ICAwLjUgLT4gMC45NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTAgIHBvd2VyIDAuMDg5NCAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjExICBwb3dlciAwLjg5NSAgMC41IC0+IDAuOTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjEyICBwb3dlciAwLjA4OTUgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxMyAgcG93ZXIgMC44OTYgIDAuNSAtPiAwLjk0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxNCAgcG93ZXIgMC4wODk2ICAwLjUgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTUgIHBvd2VyIDAuODk3ICAwLjUgLT4gMC45NDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTYgIHBvd2VyIDAuMDg5NyAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjE3ICBwb3dlciAwLjg5OCAgMC41IC0+IDAuOTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjE4ICBwb3dlciAwLjA4OTggIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxOSAgcG93ZXIgMC44OTkgIDAuNSAtPiAwLjk0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyMCAgcG93ZXIgMC4wODk5ICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjEgIHBvd2VyIDAuOTAxICAwLjUgLT4gMC45NDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjIgIHBvd2VyIDAuMDkwMSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjIzICBwb3dlciAwLjkwMiAgMC41IC0+IDAuOTUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjI0ICBwb3dlciAwLjA5MDIgIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyNSAgcG93ZXIgMC45MDMgIDAuNSAtPiAwLjk1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyNiAgcG93ZXIgMC4wOTAzICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjcgIHBvd2VyIDAuOTA0ICAwLjUgLT4gMC45NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjggIHBvd2VyIDAuMDkwNCAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjI5ICBwb3dlciAwLjkwNSAgMC41IC0+IDAuOTUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjMwICBwb3dlciAwLjA5MDUgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzMSAgcG93ZXIgMC45MDYgIDAuNSAtPiAwLjk1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzMiAgcG93ZXIgMC4wOTA2ICAwLjUgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzMgIHBvd2VyIDAuOTA3ICAwLjUgLT4gMC45NTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzQgIHBvd2VyIDAuMDkwNyAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjM1ICBwb3dlciAwLjkwOCAgMC41IC0+IDAuOTUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjM2ICBwb3dlciAwLjA5MDggIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzNyAgcG93ZXIgMC45MDkgIDAuNSAtPiAwLjk1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzOCAgcG93ZXIgMC4wOTA5ICAwLjUgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzkgIHBvd2VyIDAuOTExICAwLjUgLT4gMC45NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDAgIHBvd2VyIDAuMDkxMSAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQxICBwb3dlciAwLjkxMiAgMC41IC0+IDAuOTU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQyICBwb3dlciAwLjA5MTIgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0MyAgcG93ZXIgMC45MTMgIDAuNSAtPiAwLjk1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0NCAgcG93ZXIgMC4wOTEzICAwLjUgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDUgIHBvd2VyIDAuOTE0ICAwLjUgLT4gMC45NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDYgIHBvd2VyIDAuMDkxNCAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQ3ICBwb3dlciAwLjkxNSAgMC41IC0+IDAuOTU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQ4ICBwb3dlciAwLjA5MTUgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0OSAgcG93ZXIgMC45MTYgIDAuNSAtPiAwLjk1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1MCAgcG93ZXIgMC4wOTE2ICAwLjUgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTEgIHBvd2VyIDAuOTE3ICAwLjUgLT4gMC45NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTIgIHBvd2VyIDAuMDkxNyAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjUzICBwb3dlciAwLjkxOCAgMC41IC0+IDAuOTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjU0ICBwb3dlciAwLjA5MTggIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1NSAgcG93ZXIgMC45MTkgIDAuNSAtPiAwLjk1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1NiAgcG93ZXIgMC4wOTE5ICAwLjUgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTcgIHBvd2VyIDAuOTIxICAwLjUgLT4gMC45NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTggIHBvd2VyIDAuMDkyMSAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjU5ICBwb3dlciAwLjkyMiAgMC41IC0+IDAuOTYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjYwICBwb3dlciAwLjA5MjIgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2MSAgcG93ZXIgMC45MjMgIDAuNSAtPiAwLjk2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2MiAgcG93ZXIgMC4wOTIzICAwLjUgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjMgIHBvd2VyIDAuOTI0ICAwLjUgLT4gMC45NjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjQgIHBvd2VyIDAuMDkyNCAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjY1ICBwb3dlciAwLjkyNSAgMC41IC0+IDAuOTYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjY2ICBwb3dlciAwLjA5MjUgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2NyAgcG93ZXIgMC45MjYgIDAuNSAtPiAwLjk2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2OCAgcG93ZXIgMC4wOTI2ICAwLjUgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjkgIHBvd2VyIDAuOTI3ICAwLjUgLT4gMC45NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzAgIHBvd2VyIDAuMDkyNyAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjcxICBwb3dlciAwLjkyOCAgMC41IC0+IDAuOTYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjcyICBwb3dlciAwLjA5MjggIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3MyAgcG93ZXIgMC45MjkgIDAuNSAtPiAwLjk2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3NCAgcG93ZXIgMC4wOTI5ICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzUgIHBvd2VyIDAuOTMxICAwLjUgLT4gMC45NjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzYgIHBvd2VyIDAuMDkzMSAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njc3ICBwb3dlciAwLjkzMiAgMC41IC0+IDAuOTY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njc4ICBwb3dlciAwLjA5MzIgIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3OSAgcG93ZXIgMC45MzMgIDAuNSAtPiAwLjk2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4MCAgcG93ZXIgMC4wOTMzICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODEgIHBvd2VyIDAuOTM0ICAwLjUgLT4gMC45NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODIgIHBvd2VyIDAuMDkzNCAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjgzICBwb3dlciAwLjkzNSAgMC41IC0+IDAuOTY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njg0ICBwb3dlciAwLjA5MzUgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4NSAgcG93ZXIgMC45MzYgIDAuNSAtPiAwLjk2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4NiAgcG93ZXIgMC4wOTM2ICAwLjUgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODcgIHBvd2VyIDAuOTM3ICAwLjUgLT4gMC45NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODggIHBvd2VyIDAuMDkzNyAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njg5ICBwb3dlciAwLjkzOCAgMC41IC0+IDAuOTY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjkwICBwb3dlciAwLjA5MzggIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5MSAgcG93ZXIgMC45MzkgIDAuNSAtPiAwLjk2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5MiAgcG93ZXIgMC4wOTM5ICAwLjUgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTMgIHBvd2VyIDAuOTQxICAwLjUgLT4gMC45NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTQgIHBvd2VyIDAuMDk0MSAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njk1ICBwb3dlciAwLjk0MiAgMC41IC0+IDAuOTcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njk2ICBwb3dlciAwLjA5NDIgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5NyAgcG93ZXIgMC45NDMgIDAuNSAtPiAwLjk3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5OCAgcG93ZXIgMC4wOTQzICAwLjUgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTkgIHBvd2VyIDAuOTQ0ICAwLjUgLT4gMC45NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDAgIHBvd2VyIDAuMDk0NCAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzAxICBwb3dlciAwLjk0NSAgMC41IC0+IDAuOTcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzAyICBwb3dlciAwLjA5NDUgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwMyAgcG93ZXIgMC45NDYgIDAuNSAtPiAwLjk3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwNCAgcG93ZXIgMC4wOTQ2ICAwLjUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDUgIHBvd2VyIDAuOTQ3ICAwLjUgLT4gMC45NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDYgIHBvd2VyIDAuMDk0NyAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzA3ICBwb3dlciAwLjk0OCAgMC41IC0+IDAuOTc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzA4ICBwb3dlciAwLjA5NDggIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwOSAgcG93ZXIgMC45NDkgIDAuNSAtPiAwLjk3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxMCAgcG93ZXIgMC4wOTQ5ICAwLjUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTEgIHBvd2VyIDAuOTUxICAwLjUgLT4gMC45NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTIgIHBvd2VyIDAuMDk1MSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzEzICBwb3dlciAwLjk1MiAgMC41IC0+IDAuOTc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzE0ICBwb3dlciAwLjA5NTIgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxNSAgcG93ZXIgMC45NTMgIDAuNSAtPiAwLjk3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxNiAgcG93ZXIgMC4wOTUzICAwLjUgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTcgIHBvd2VyIDAuOTU0ICAwLjUgLT4gMC45NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTggIHBvd2VyIDAuMDk1NCAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzE5ICBwb3dlciAwLjk1NSAgMC41IC0+IDAuOTc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzIwICBwb3dlciAwLjA5NTUgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyMSAgcG93ZXIgMC45NTYgIDAuNSAtPiAwLjk3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyMiAgcG93ZXIgMC4wOTU2ICAwLjUgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjMgIHBvd2VyIDAuOTU3ICAwLjUgLT4gMC45NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjQgIHBvd2VyIDAuMDk1NyAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzI1ICBwb3dlciAwLjk1OCAgMC41IC0+IDAuOTc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzI2ICBwb3dlciAwLjA5NTggIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyNyAgcG93ZXIgMC45NTkgIDAuNSAtPiAwLjk3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyOCAgcG93ZXIgMC4wOTU5ICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjkgIHBvd2VyIDAuOTYxICAwLjUgLT4gMC45ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzAgIHBvd2VyIDAuMDk2MSAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzMxICBwb3dlciAwLjk2MiAgMC41IC0+IDAuOTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzMyICBwb3dlciAwLjA5NjIgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczMyAgcG93ZXIgMC45NjMgIDAuNSAtPiAwLjk4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczNCAgcG93ZXIgMC4wOTYzICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzUgIHBvd2VyIDAuOTY0ICAwLjUgLT4gMC45ODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzYgIHBvd2VyIDAuMDk2NCAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzM3ICBwb3dlciAwLjk2NSAgMC41IC0+IDAuOTgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzM4ICBwb3dlciAwLjA5NjUgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczOSAgcG93ZXIgMC45NjYgIDAuNSAtPiAwLjk4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0MCAgcG93ZXIgMC4wOTY2ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDEgIHBvd2VyIDAuOTY3ICAwLjUgLT4gMC45ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDIgIHBvd2VyIDAuMDk2NyAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQzICBwb3dlciAwLjk2OCAgMC41IC0+IDAuOTg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQ0ICBwb3dlciAwLjA5NjggIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0NSAgcG93ZXIgMC45NjkgIDAuNSAtPiAwLjk4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0NiAgcG93ZXIgMC4wOTY5ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDcgIHBvd2VyIDAuOTcxICAwLjUgLT4gMC45ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDggIHBvd2VyIDAuMDk3MSAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQ5ICBwb3dlciAwLjk3MiAgMC41IC0+IDAuOTg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzUwICBwb3dlciAwLjA5NzIgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1MSAgcG93ZXIgMC45NzMgIDAuNSAtPiAwLjk4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1MiAgcG93ZXIgMC4wOTczICAwLjUgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTMgIHBvd2VyIDAuOTc0ICAwLjUgLT4gMC45ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTQgIHBvd2VyIDAuMDk3NCAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzU1ICBwb3dlciAwLjk3NSAgMC41IC0+IDAuOTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzU2ICBwb3dlciAwLjA5NzUgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1NyAgcG93ZXIgMC45NzYgIDAuNSAtPiAwLjk4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1OCAgcG93ZXIgMC4wOTc2ICAwLjUgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTkgIHBvd2VyIDAuOTc3ICAwLjUgLT4gMC45ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjAgIHBvd2VyIDAuMDk3NyAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzYxICBwb3dlciAwLjk3OCAgMC41IC0+IDAuOTg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzYyICBwb3dlciAwLjA5NzggIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2MyAgcG93ZXIgMC45NzkgIDAuNSAtPiAwLjk4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2NCAgcG93ZXIgMC4wOTc5ICAwLjUgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjUgIHBvd2VyIDAuOTgxICAwLjUgLT4gMC45OTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjYgIHBvd2VyIDAuMDk4MSAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzY3ICBwb3dlciAwLjk4MiAgMC41IC0+IDAuOTkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzY4ICBwb3dlciAwLjA5ODIgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2OSAgcG93ZXIgMC45ODMgIDAuNSAtPiAwLjk5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3MCAgcG93ZXIgMC4wOTgzICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzEgIHBvd2VyIDAuOTg0ICAwLjUgLT4gMC45OTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzIgIHBvd2VyIDAuMDk4NCAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzczICBwb3dlciAwLjk4NSAgMC41IC0+IDAuOTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzc0ICBwb3dlciAwLjA5ODUgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3NSAgcG93ZXIgMC45ODYgIDAuNSAtPiAwLjk5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3NiAgcG93ZXIgMC4wOTg2ICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzcgIHBvd2VyIDAuOTg3ICAwLjUgLT4gMC45OTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzggIHBvd2VyIDAuMDk4NyAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzc5ICBwb3dlciAwLjk4OCAgMC41IC0+IDAuOTk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzgwICBwb3dlciAwLjA5ODggIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4MSAgcG93ZXIgMC45ODkgIDAuNSAtPiAwLjk5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4MiAgcG93ZXIgMC4wOTg5ICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODMgIHBvd2VyIDAuOTkxICAwLjUgLT4gMC45OTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODQgIHBvd2VyIDAuMDk5MSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzg1ICBwb3dlciAwLjk5MiAgMC41IC0+IDAuOTk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzg2ICBwb3dlciAwLjA5OTIgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4NyAgcG93ZXIgMC45OTMgIDAuNSAtPiAwLjk5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4OCAgcG93ZXIgMC4wOTkzICAwLjUgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODkgIHBvd2VyIDAuOTk0ICAwLjUgLT4gMC45OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTAgIHBvd2VyIDAuMDk5NCAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzkxICBwb3dlciAwLjk5NSAgMC41IC0+IDAuOTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzkyICBwb3dlciAwLjA5OTUgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5MyAgcG93ZXIgMC45OTYgIDAuNSAtPiAwLjk5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5NCAgcG93ZXIgMC4wOTk2ICAwLjUgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTUgIHBvd2VyIDAuOTk3ICAwLjUgLT4gMC45OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTYgIHBvd2VyIDAuMDk5NyAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzk3ICBwb3dlciAwLjk5OCAgMC41IC0+IDAuOTk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzk4ICBwb3dlciAwLjA5OTggIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5OSAgcG93ZXIgMC45OTkgIDAuNSAtPiAwLjk5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDgwMCAgcG93ZXIgMC4wOTk5ICAwLjUgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAorCistLSBBIGdyb3VwIG9mIHByZWNpc2lvbiA0IHRlc3RzIHdoZXJlIEh1bGwgJiBBYnJoYW0gYWRqdXN0bWVudHMgYXJlCistLSBuZWVkZWQgaW4gc29tZSBjYXNlcyAoYm90aCB1cCBhbmQgZG93bikgW3NlZSBIdWxsMTk4NWJdCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAgIDQKK3B3c3g1MDAxICBwb3dlciAwLjAxMTggICAwLjUgLT4gMC4xMDg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDAyICBwb3dlciAwLjExOSAgICAwLjUgLT4gMC4zNDUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDAzICBwb3dlciAwLjAxMTkgICAwLjUgLT4gMC4xMDkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA0ICBwb3dlciAwLjEyMSAgICAwLjUgLT4gMC4zNDc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA1ICBwb3dlciAwLjAxMjEgICAwLjUgLT4gMC4xMTAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA2ICBwb3dlciAwLjEyMiAgICAwLjUgLT4gMC4zNDkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA3ICBwb3dlciAwLjAxMjIgICAwLjUgLT4gMC4xMTA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA4ICBwb3dlciAwLjEyMyAgICAwLjUgLT4gMC4zNTA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA5ICBwb3dlciAwLjQ5NCAgICAwLjUgLT4gMC43MDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDEwICBwb3dlciAwLjA2NjkgICAwLjUgLT4gMC4yNTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDExICBwb3dlciAwLjk1NTggICAwLjUgLT4gMC45Nzc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDEyICBwb3dlciAwLjkzNDggICAwLjUgLT4gMC45NjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDEzICBwb3dlciAwLjkzNDUgICAwLjUgLT4gMC45NjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDE0ICBwb3dlciAwLjA5MzQ1ICAwLjUgLT4gMC4zMDU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDE1ICBwb3dlciAwLjkzNDYgICAwLjUgLT4gMC45NjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDE2ICBwb3dlciAwLjA5MzQ2ICAwLjUgLT4gMC4zMDU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDE3ICBwb3dlciAwLjkzNDcgICAwLjUgLT4gMC45NjY4ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorcHJlY2lzaW9uOiA5Citwd3N4NzAwICBwb3dlciAgMCAgICAgICAgMC41IC0+ICcwJworcHdzeDcwMSAgcG93ZXIgIC0wICAgICAgIDAuNSAtPiAnMCcKK3B3c3g3MDIgIHBvd2VyICAwLjM5ICAgICAwLjUgLT4gMC42MjQ0OTk4MDAgICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzAzICBwb3dlciAgMTAwICAgICAgMC41IC0+ICcxMC4wMDAwMDAwJyAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcwNCAgcG93ZXIgIDEuMDAgICAgIDAuNSAtPiAnMS4wMDAwMDAwMCcgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MDUgIHBvd2VyICA3ICAgICAgICAwLjUgLT4gJzIuNjQ1NzUxMzEnICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzA2ICBwb3dlciAgMTAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIG9uZS1vZmZzCitwcmVjaXNpb246IDkKK3B3c3g3MTEgIHBvd2VyICAwLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYgICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzEyICBwb3dlciAgMC4yICAgICAgMC41IC0+IDAuNDQ3MjEzNTk1ICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxMyAgcG93ZXIgIDAuMyAgICAgIDAuNSAtPiAwLjU0NzcyMjU1OCAgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MTQgIHBvd2VyICAwLjQgICAgICAwLjUgLT4gMC42MzI0NTU1MzIgICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzE1ICBwb3dlciAgMC41ICAgICAgMC41IC0+IDAuNzA3MTA2NzgxICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxNiAgcG93ZXIgIDAuNiAgICAgIDAuNSAtPiAwLjc3NDU5NjY2OSAgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MTcgIHBvd2VyICAwLjcgICAgICAwLjUgLT4gMC44MzY2NjAwMjcgICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzE4ICBwb3dlciAgMC44ICAgICAgMC41IC0+IDAuODk0NDI3MTkxICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxOSAgcG93ZXIgIDAuOSAgICAgIDAuNSAtPiAwLjk0ODY4MzI5OCAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTAgICAgICAgICAgICAgICAtLSBub3RlIG5vIG5vcm1hbGl6YXRvaW4gaGVyZQorcHdzeDcyMCAgcG93ZXIgKzAuMSAgICAgIDAuNSAtPiAwLjMxNjIyNzc2NjAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTEKK3B3c3g3MjEgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwMiAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEyCitwd3N4NzIyICBwb3dlciArMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2MDE3IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA5Citwd3N4NzIzICBwb3dlciAgMC4zOSAgICAgMC41IC0+IDAuNjI0NDk5ODAwICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNQorcHdzeDcyNCAgcG93ZXIgIDAuMzkgICAgIDAuNSAtPiAwLjYyNDQ5OTc5OTgzOTg0MCBJbmV4YWN0IFJvdW5kZWQKKworLS0gZGlzY3Vzc2lvbiBjYXNlcworcHJlY2lzaW9uOiA3Citwd3N4NzMxICBwb3dlciAgICAgOSAgICAwLjUgLT4gMy4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDczMiAgcG93ZXIgICAxMDAgICAgMC41IC0+IDEwLjAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MzMgIHBvd2VyICAgMTIzICAgIDAuNSAtPiAxMS4wOTA1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzM0ICBwb3dlciAgIDE0NCAgICAwLjUgLT4gMTIuMDAwMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDczNSAgcG93ZXIgICAxNTYgICAgMC41IC0+IDEyLjQ5MDAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MzYgIHBvd2VyIDEwMDAwICAgIDAuNSAtPiAxMDAuMDAwMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHZhbHVlcyBjbG9zZSB0byBvdmVyZmxvdyAoaWYgdGhlcmUgd2VyZSBpbnB1dCByb3VuZGluZykKK21heGV4cG9uZW50OiA5OQorbWluZXhwb25lbnQ6IC05OQorcHJlY2lzaW9uOiA1Citwd3N4NzYwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gOS45OTk4RSs0OSBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NjEgIHBvd2VyICA5Ljk5OThFKzk5ICAgIDAuNSAtPiA5Ljk5OTlFKzQ5IEluZXhhY3QgUm91bmRlZAorcHdzeDc2MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+IDkuOTk5OUUrNDkgSW5leGFjdCBSb3VuZGVkCitwd3N4NzYzICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NjQgIHBvd2VyICA5Ljk5OTk0RSs5OSAgIDAuNSAtPiAxLjAwMDBFKzUwIEluZXhhY3QgUm91bmRlZAorcHdzeDc2NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzY2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOQorcHdzeDc3MCAgcG93ZXIgIDkuOTk5N0UrOTkgICAgMC41IC0+IDkuOTk5ODUwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NzEgIHBvd2VyICA5Ljk5OThFKzk5ICAgIDAuNSAtPiA5Ljk5OTkwMDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzcyICBwb3dlciAgOS45OTk5RSs5OSAgICAwLjUgLT4gOS45OTk5NTAwMEUrNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDc3MyAgcG93ZXIgIDkuOTk5OTFFKzk5ICAgMC41IC0+IDkuOTk5OTU1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NzQgIHBvd2VyICA5Ljk5OTk0RSs5OSAgIDAuNSAtPiA5Ljk5OTk3MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Nzc1ICBwb3dlciAgOS45OTk5NUUrOTkgICAwLjUgLT4gOS45OTk5NzUwMEUrNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDc3NiAgcG93ZXIgIDkuOTk5OTlFKzk5ICAgMC41IC0+IDkuOTk5OTk1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK3B3c3g3ODAgIHBvd2VyICA5Ljk5OTdFKzk5ICAgIDAuNSAtPiAnOS45OTk4NDk5OTg4NzQ5ODMxMjQ3RSs0OScgSW5leGFjdCBSb3VuZGVkCitwd3N4NzgxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gJzkuOTk5ODk5OTk5NDk5OTk0OTk5OUUrNDknIEluZXhhY3QgUm91bmRlZAorcHdzeDc4MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+ICc5Ljk5OTk0OTk5OTg3NDk5OTM3NTBFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3ODMgIHBvd2VyICA5Ljk5OTkxRSs5OSAgIDAuNSAtPiAnOS45OTk5NTQ5OTk4OTg3NDk1NDQ0RSs0OScgSW5leGFjdCBSb3VuZGVkCitwd3N4Nzg0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gJzkuOTk5OTY5OTk5OTU0OTk5ODY1MEUrNDknIEluZXhhY3QgUm91bmRlZAorcHdzeDc4NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+ICc5Ljk5OTk3NDk5OTk2ODc0OTkyMTlFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3ODYgIHBvd2VyICA5Ljk5OTk5RSs5OSAgIDAuNSAtPiAnOS45OTk5OTQ5OTk5OTg3NDk5OTk0RSs0OScgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MgW3RoZXNlIGNhbiBvbmx5IHJlc3VsdCB3aGVuIGVNYXggaXMgPCBkaWdpdHMrMV0KKy0tIEV0aW55ID0gLShFbWF4ICsgKHByZWNpc2lvbi0xKSkKKy0tIHN0YXJ0IHdpdGggc3Vibm9ybWFsIG9wZXJhbmRzIGFuZCBub3JtYWwgcmVzdWx0cworbWF4ZXhwb25lbnQ6IDkKK21pbmV4cG9uZW50OiAtOQorcHJlY2lzaW9uOiA5ICAgICAgICAgICAgICAgIC0tIEV0aW55PS0xNworcHdzeDgwMCAgcG93ZXIgIDFFLTE3ICAgIDAuNSAtPiAzLjE2MjI3NzY2RS05IEluZXhhY3QgUm91bmRlZAorcHdzeDgwMSAgcG93ZXIgMTBFLTE3ICAgIDAuNSAtPiAxLjAwMDAwMDAwRS04IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMCAgICAgICAgICAgICAgIC0tIEV0aW55PS0xOAorcHdzeDgwMiAgcG93ZXIgMTBFLTE4ICAgIDAuNSAtPiAzLjE2MjI3NzY2MEUtOSBJbmV4YWN0IFJvdW5kZWQKK3B3c3g4MDMgIHBvd2VyICAxRS0xOCAgICAwLjUgLT4gMS4wMDAwMDAwMDBFLTkgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTEgICAgICAgICAgICAgICAtLSBFdGlueT0tMTkKK3B3c3g4MDQgIHBvd2VyICAxRS0xOSAgICAwLjUgLT4gMy4xNjIyNzc2NjBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCistLSBUaGUgbmV4dCB0ZXN0IHNob3VsZCBiZSBza2lwcGVkIGZvciBkZWNOdW1iZXIKK3B3c3g4MDUgIHBvd2VyIDEwRS0xOSAgICAwLjUgLT4gMS4wMDAwMDAwMDAwRS05IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMiAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMAorcHdzeDgwNiAgcG93ZXIgMTBFLTIwICAgIDAuNSAtPiAzLjE2MjI3NzY2MDJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwd3N4ODA3ICBwb3dlciAgMUUtMjAgICAgMC41IC0+IDEuMDAwMDAwMDAwMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAxMyAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMQorcHdzeDgwOCAgcG93ZXIgIDFFLTIxICAgIDAuNSAtPiAzLjE2MjI3NzY2MDJFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwd3N4ODA5ICBwb3dlciAxMEUtMjEgICAgMC41IC0+IDEuMDAwMDAwMDAwMDBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE0ICAgICAgICAgICAgICAgLS0gRXRpbnk9LTIyCitwd3N4ODEwICBwb3dlciAgMUUtMjEgICAgMC41IC0+IDMuMTYyMjc3NjYwMTdFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwd3N4ODExICBwb3dlciAxMEUtMjIgICAgMC41IC0+IDMuMTYyMjc3NjYwMTdFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwd3N4ODEyICBwb3dlciAgMUUtMjIgICAgMC41IC0+IDEuMDAwMDAwMDAwMDBFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKworLS0gc3BlY2lhbCB2YWx1ZXMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5Citwd3N4ODIwICBwb3dlciAgIEluZiAgICAgMC41IC0+IEluZmluaXR5Citwd3N4ODIxICBwb3dlciAgLUluZiAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDgyMiAgcG93ZXIgICBOYU4gICAgIDAuNSAtPiBOYU4KK3B3c3g4MjMgIHBvd2VyICBzTmFOICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitwd3N4ODI0ICBwb3dlciAgc05hTjEyMyAgMC41IC0+IE5hTjEyMyBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDgyNSAgcG93ZXIgLXNOYU4zMjEgIDAuNSAtPiAtTmFOMzIxIEludmFsaWRfb3BlcmF0aW9uCitwd3N4ODI2ICBwb3dlciAgIE5hTjQ1NiAgMC41IC0+IE5hTjQ1NgorcHdzeDgyNyAgcG93ZXIgIC1OYU42NTQgIDAuNSAtPiAtTmFONjU0Citwd3N4ODI4ICBwb3dlciAgIE5hTjEgICAgMC41IC0+IE5hTjEKKworLS0gTnVsbCB0ZXN0Citwd3N4OTAwICBwb3dlciAgIyAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JvdGF0ZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JvdGF0ZS5kZWNUZXN0CmluZGV4IDEyZGI4MjEuLjgxYWRlNzkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yb3RhdGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcm90YXRlLmRlY1Rlc3QKQEAgLTEsMjQ3ICsxLDI0NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gcm90YXRlLmRlY1Rlc3QgLS0gcm90YXRlIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLXJvdHgwMDEgcm90YXRlICAgICAgICAgIDAgICAgMCAgLT4gIDANCi1yb3R4MDAyIHJvdGF0ZSAgICAgICAgICAwICAgIDIgIC0+ICAwDQotcm90eDAwMyByb3RhdGUgICAgICAgICAgMSAgICAyICAtPiAgMTAwDQotcm90eDAwNCByb3RhdGUgICAgICAgICAzNCAgICA4ICAtPiAgNDAwMDAwMDAzDQotcm90eDAwNSByb3RhdGUgICAgICAgICAgMSAgICA5ICAtPiAgMQ0KLXJvdHgwMDYgcm90YXRlICAgICAgICAgIDEgICAtMSAgLT4gIDEwMDAwMDAwMA0KLXJvdHgwMDcgcm90YXRlICAxMjM0NTY3ODkgICAtMSAgLT4gIDkxMjM0NTY3OA0KLXJvdHgwMDggcm90YXRlICAxMjM0NTY3ODkgICAtOCAgLT4gIDIzNDU2Nzg5MQ0KLXJvdHgwMDkgcm90YXRlICAxMjM0NTY3ODkgICAtOSAgLT4gIDEyMzQ1Njc4OQ0KLXJvdHgwMTAgcm90YXRlICAgICAgICAgIDAgICAtMiAgLT4gIDANCi0NCi0tLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyDQotcm90eDAxMSByb3RhdGUgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHgwMTIgcm90YXRlICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4MDEzIHJvdGF0ZSAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDAxNCByb3RhdGUgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHgwMTUgcm90YXRlICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDAxNyByb3RhdGUgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHgwMTggcm90YXRlICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uDQotcm90eDAyMCByb3RhdGUgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHgwMjEgcm90YXRlICAgICAgICAxICAgIC0xMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4MDIyIHJvdGF0ZSAgICAgICAgMSAgICAgMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDAyMyByb3RhdGUgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIGZ1bGwgcGF0dGVybg0KLXJvdHgwMzAgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTkgICAtPiAxMjM0NTY3ODkNCi1yb3R4MDMxIHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgIC04ICAgLT4gMjM0NTY3ODkxDQotcm90eDAzMiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNyAgIC0+IDM0NTY3ODkxMg0KLXJvdHgwMzMgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTYgICAtPiA0NTY3ODkxMjMNCi1yb3R4MDM0IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgIC01ICAgLT4gNTY3ODkxMjM0DQotcm90eDAzNSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNCAgIC0+IDY3ODkxMjM0NQ0KLXJvdHgwMzYgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTMgICAtPiA3ODkxMjM0NTYNCi1yb3R4MDM3IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgIC0yICAgLT4gODkxMjM0NTY3DQotcm90eDAzOCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMSAgIC0+IDkxMjM0NTY3OA0KLXJvdHgwMzkgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkNCi1yb3R4MDQwIHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5DQotcm90eDA0MSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MQ0KLXJvdHgwNDIgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MTINCi1yb3R4MDQzIHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgICszICAgLT4gNDU2Nzg5MTIzDQotcm90eDA0NCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNCAgIC0+IDU2Nzg5MTIzNA0KLXJvdHgwNDUgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzUgICAtPiA2Nzg5MTIzNDUNCi1yb3R4MDQ2IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgICs2ICAgLT4gNzg5MTIzNDU2DQotcm90eDA0NyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNyAgIC0+IDg5MTIzNDU2Nw0KLXJvdHgwNDggcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzggICAtPiA5MTIzNDU2NzgNCi1yb3R4MDQ5IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgICs5ICAgLT4gMTIzNDU2Nzg5DQotDQotLS0gemVyb3MNCi1yb3R4MDYwIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRS0xMA0KLXJvdHgwNjEgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFLTEwDQotcm90eDA2MiByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDANCi1yb3R4MDYzIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gICAwLjAwMA0KLXJvdHgwNjQgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFKzEwDQotcm90eDA2NSByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTANCi1yb3R4MDY2IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRS0xMA0KLXJvdHgwNjcgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFLTEwDQotcm90eDA2OCByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDANCi1yb3R4MDY5IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gIC0wLjAwMA0KLXJvdHgwNzAgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFKzEwDQotcm90eDA3MSByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTANCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLXJvdHgxNDEgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xICAtPiA5Ljk5OTk5OTk5RSs5OTkNCi1yb3R4MTQyIHJvdGF0ZSAgOS45OTk5OTk5OUUrOTk5ICAgICAtOCAgLT4gOS45OTk5OTk5OUUrOTk5DQotcm90eDE0MyByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDEgIC0+IDkuOTk5OTk5OTlFKzk5OQ0KLXJvdHgxNDQgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgICA4ICAtPiA5Ljk5OTk5OTk5RSs5OTkNCi1yb3R4MTQ1IHJvdGF0ZSAgMUUtOTk5ICAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMEUtOTkxDQotcm90eDE0NiByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgLTggIC0+IDEuMEUtOTk4DQotcm90eDE0NyByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtOTk4DQotcm90eDE0OCByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgIDggIC0+IDEuMDAwMDAwMDBFLTk5MQ0KLXJvdHgxNTEgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAxLjAwMDAwMDBFLTEwMDANCi1yb3R4MTUyIHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gMUUtMTAwNw0KLXJvdHgxNTMgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAxRS0xMDA3DQotcm90eDE1NCByb3RhdGUgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDEuMDAwMDAwMEUtMTAwMA0KLXJvdHgxNTUgcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiA5LjAwMDAwMDBFLTEwMDANCi1yb3R4MTU2IHJvdGF0ZSAgOS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gOUUtMTAwNw0KLXJvdHgxNTcgcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiA5RS0xMDA3DQotcm90eDE1OCByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDkuMDAwMDAwMEUtMTAwMA0KLXJvdHgxNjAgcm90YXRlICAxRS0xMDA3ICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwRS05OTkNCi1yb3R4MTYxIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gMS4wRS0xMDA2DQotcm90eDE2MiByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMTAwNg0KLXJvdHgxNjMgcm90YXRlICAxRS0xMDA3ICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTkNCi0tLSAgbmVnYXRpdmVzDQotcm90eDE3MSByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IC05Ljk5OTk5OTk5RSs5OTkNCi1yb3R4MTcyIHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAtOCAgLT4gLTkuOTk5OTk5OTlFKzk5OQ0KLXJvdHgxNzMgcm90YXRlIC05Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiAtOS45OTk5OTk5OUUrOTk5DQotcm90eDE3NCByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IC05Ljk5OTk5OTk5RSs5OTkNCi1yb3R4MTc1IHJvdGF0ZSAtMUUtOTk5ICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDBFLTk5MQ0KLXJvdHgxNzYgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgIC04ICAtPiAtMS4wRS05OTgNCi1yb3R4MTc3IHJvdGF0ZSAtMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtOTk4DQotcm90eDE3OCByb3RhdGUgLTFFLTk5OSAgICAgICAgICAgICAgIDggIC0+IC0xLjAwMDAwMDAwRS05OTENCi1yb3R4MTgxIHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTEuMDAwMDAwMEUtMTAwMA0KLXJvdHgxODIgcm90YXRlIC0xLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtMUUtMTAwNw0KLXJvdHgxODMgcm90YXRlIC0xLjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAtMUUtMTAwNw0KLXJvdHgxODQgcm90YXRlIC0xLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtMS4wMDAwMDAwRS0xMDAwDQotcm90eDE4NSByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC05LjAwMDAwMDBFLTEwMDANCi1yb3R4MTg2IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gLTlFLTEwMDcNCi1yb3R4MTg3IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTlFLTEwMDcNCi1yb3R4MTg4IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTkuMDAwMDAwMEUtMTAwMA0KLXJvdHgxOTAgcm90YXRlIC0xRS0xMDA3ICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMEUtOTk5DQotcm90eDE5MSByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IC0xLjBFLTEwMDYNCi1yb3R4MTkyIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMTAwNg0KLXJvdHgxOTMgcm90YXRlIC0xRS0xMDA3ICAgICAgICAgICAgICA4ICAtPiAtMS4wMDAwMDAwMEUtOTk5DQotDQotLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQ0KLXJvdHgyMDEgcm90YXRlICAgICAgICAgLTAgICAgMCAgLT4gIC0wDQotcm90eDIwMiByb3RhdGUgICAgICAgICAtMCAgICAyICAtPiAgLTANCi1yb3R4MjAzIHJvdGF0ZSAgICAgICAgIC0xICAgIDIgIC0+ICAtMTAwDQotcm90eDIwNCByb3RhdGUgICAgICAgICAtMSAgICA4ICAtPiAgLTEwMDAwMDAwMA0KLXJvdHgyMDUgcm90YXRlICAgICAgICAgLTEgICAgOSAgLT4gIC0xDQotcm90eDIwNiByb3RhdGUgICAgICAgICAtMSAgIC0xICAtPiAgLTEwMDAwMDAwMA0KLXJvdHgyMDcgcm90YXRlIC0xMjM0NTY3ODkgICAtMSAgLT4gIC05MTIzNDU2NzgNCi1yb3R4MjA4IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTggIC0+ICAtMjM0NTY3ODkxDQotcm90eDIwOSByb3RhdGUgLTEyMzQ1Njc4OSAgIC05ICAtPiAgLTEyMzQ1Njc4OQ0KLXJvdHgyMTAgcm90YXRlICAgICAgICAgLTAgICAtMiAgLT4gIC0wDQotDQotLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwNCi1yb3R4NzgxIHJvdGF0ZSAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5DQotcm90eDc4MiByb3RhdGUgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLXJvdHg3ODMgcm90YXRlIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1yb3R4Nzg0IHJvdGF0ZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotcm90eDc4NSByb3RhdGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLXJvdHg3ODYgcm90YXRlIC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkNCi1yb3R4Nzg3IHJvdGF0ZSAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDc4OCByb3RhdGUgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg3ODkgcm90YXRlIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4NzkwIHJvdGF0ZSAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDc5MSByb3RhdGUgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg3OTIgcm90YXRlICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4NzkzIHJvdGF0ZSAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDc5NCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLXJvdHg4MDAgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODAxIHJvdGF0ZSAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkNCi1yb3R4ODAyIHJvdGF0ZSAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkNCi1yb3R4ODAzIHJvdGF0ZSAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkNCi1yb3R4ODA0IHJvdGF0ZSAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkNCi1yb3R4ODA1IHJvdGF0ZSAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkNCi1yb3R4ODA2IHJvdGF0ZSAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkNCi1yb3R4ODA3IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDgwOCByb3RhdGUgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4MDkgcm90YXRlIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODEwIHJvdGF0ZSAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDgxMSByb3RhdGUgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4MTIgcm90YXRlICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODEzIHJvdGF0ZSAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDgxNCByb3RhdGUgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4MTUgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1yb3R4ODIxIHJvdGF0ZSAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLXJvdHg4MjIgcm90YXRlICBOYU4gLTEwMDAgICAtPiAgTmFODQotcm90eDgyMyByb3RhdGUgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1yb3R4ODI0IHJvdGF0ZSAgTmFOIC0wICAgICAgLT4gIE5hTg0KLXJvdHg4MjUgcm90YXRlICBOYU4gIDAgICAgICAtPiAgTmFODQotcm90eDgyNiByb3RhdGUgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1yb3R4ODI3IHJvdGF0ZSAgTmFOICAxMDAwICAgLT4gIE5hTg0KLXJvdHg4Mjggcm90YXRlICBOYU4gIEluZiAgICAtPiAgTmFODQotcm90eDgyOSByb3RhdGUgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1yb3R4ODMwIHJvdGF0ZSAtSW5mICBOYU4gICAgLT4gIE5hTg0KLXJvdHg4MzEgcm90YXRlIC0xMDAwIE5hTiAgICAtPiAgTmFODQotcm90eDgzMiByb3RhdGUgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1yb3R4ODMzIHJvdGF0ZSAtMCAgICBOYU4gICAgLT4gIE5hTg0KLXJvdHg4MzQgcm90YXRlICAwICAgIE5hTiAgICAtPiAgTmFODQotcm90eDgzNSByb3RhdGUgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1yb3R4ODM2IHJvdGF0ZSAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLXJvdHg4Mzcgcm90YXRlICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotDQotDQotcm90eDg0MSByb3RhdGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg0MiByb3RhdGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg0MyByb3RhdGUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg0NCByb3RhdGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg0NSByb3RhdGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg0NiByb3RhdGUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg0NyByb3RhdGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg0OCByb3RhdGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg0OSByb3RhdGUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg1MCByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg1MSByb3RhdGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg1MiByb3RhdGUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg1MyByb3RhdGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg1NCByb3RhdGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg1NSByb3RhdGUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg1NiByb3RhdGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg1NyByb3RhdGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg1OCByb3RhdGUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg1OSByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLXJvdHg4NjEgcm90YXRlICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KLXJvdHg4NjIgcm90YXRlICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KLXJvdHg4NjMgcm90YXRlICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLXJvdHg4NjQgcm90YXRlICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KLXJvdHg4NjUgcm90YXRlICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KLXJvdHg4NjYgcm90YXRlIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLXJvdHg4Njcgcm90YXRlIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KLXJvdHg4Njggcm90YXRlICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KLXJvdHg4Njkgcm90YXRlICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1yb3R4ODcxIHJvdGF0ZSAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NzIgcm90YXRlICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg3MyByb3RhdGUgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODc0IHJvdGF0ZSAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NzUgcm90YXRlICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg3NiByb3RhdGUgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODc3IHJvdGF0ZSAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4Nzggcm90YXRlIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg3OSByb3RhdGUgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODgwIHJvdGF0ZSAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4ODEgcm90YXRlICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg4MiByb3RhdGUgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLXJvdHg4ODMgcm90YXRlIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg4NCByb3RhdGUgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KLXJvdHg4ODUgcm90YXRlICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcGF5bG9hZCBkZWNhcGl0YXRlDQotcHJlY2lzaW9uOiA1DQotcm90eDg4NiByb3RhdGUgIDExIC1zTmFOMTIzNDU2Nzg5MCAtPiAtTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSByb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjaworcm90eDAwMSByb3RhdGUgICAgICAgICAgMCAgICAwICAtPiAgMAorcm90eDAwMiByb3RhdGUgICAgICAgICAgMCAgICAyICAtPiAgMAorcm90eDAwMyByb3RhdGUgICAgICAgICAgMSAgICAyICAtPiAgMTAwCityb3R4MDA0IHJvdGF0ZSAgICAgICAgIDM0ICAgIDggIC0+ICA0MDAwMDAwMDMKK3JvdHgwMDUgcm90YXRlICAgICAgICAgIDEgICAgOSAgLT4gIDEKK3JvdHgwMDYgcm90YXRlICAgICAgICAgIDEgICAtMSAgLT4gIDEwMDAwMDAwMAorcm90eDAwNyByb3RhdGUgIDEyMzQ1Njc4OSAgIC0xICAtPiAgOTEyMzQ1Njc4Cityb3R4MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgLTggIC0+ICAyMzQ1Njc4OTEKK3JvdHgwMDkgcm90YXRlICAxMjM0NTY3ODkgICAtOSAgLT4gIDEyMzQ1Njc4OQorcm90eDAxMCByb3RhdGUgICAgICAgICAgMCAgIC0yICAtPiAgMAorCistLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyCityb3R4MDExIHJvdGF0ZSAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDEyIHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDEzIHJvdGF0ZSAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDE0IHJvdGF0ZSAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDE1IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDE3IHJvdGF0ZSAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDE4IHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCityb3R4MDIwIHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDIxIHJvdGF0ZSAgICAgICAgMSAgICAtMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDIyIHJvdGF0ZSAgICAgICAgMSAgICAgMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDIzIHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZ1bGwgcGF0dGVybgorcm90eDAzMCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtOSAgIC0+IDEyMzQ1Njc4OQorcm90eDAzMSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtOCAgIC0+IDIzNDU2Nzg5MQorcm90eDAzMiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNyAgIC0+IDM0NTY3ODkxMgorcm90eDAzMyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNiAgIC0+IDQ1Njc4OTEyMworcm90eDAzNCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNSAgIC0+IDU2Nzg5MTIzNAorcm90eDAzNSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNCAgIC0+IDY3ODkxMjM0NQorcm90eDAzNiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMyAgIC0+IDc4OTEyMzQ1Ngorcm90eDAzNyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMiAgIC0+IDg5MTIzNDU2Nworcm90eDAzOCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMSAgIC0+IDkxMjM0NTY3OAorcm90eDAzOSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OQorcm90eDA0MCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OQorcm90eDA0MSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MQorcm90eDA0MiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMiAgIC0+IDM0NTY3ODkxMgorcm90eDA0MyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMyAgIC0+IDQ1Njc4OTEyMworcm90eDA0NCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNCAgIC0+IDU2Nzg5MTIzNAorcm90eDA0NSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNSAgIC0+IDY3ODkxMjM0NQorcm90eDA0NiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNiAgIC0+IDc4OTEyMzQ1Ngorcm90eDA0NyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNyAgIC0+IDg5MTIzNDU2Nworcm90eDA0OCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArOCAgIC0+IDkxMjM0NTY3OAorcm90eDA0OSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArOSAgIC0+IDEyMzQ1Njc4OQorCistLSB6ZXJvcworcm90eDA2MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTAKK3JvdHgwNjEgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFLTEwCityb3R4MDYyIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMAorcm90eDA2MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDAKK3JvdHgwNjQgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFKzEwCityb3R4MDY1IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMAorcm90eDA2NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTAKK3JvdHgwNjcgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFLTEwCityb3R4MDY4IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMAorcm90eDA2OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDAKK3JvdHgwNzAgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFKzEwCityb3R4MDcxIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMAorCistLSBObWF4LCBObWluLCBOdGlueQorcm90eDE0MSByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IDkuOTk5OTk5OTlFKzk5OQorcm90eDE0MiByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IDkuOTk5OTk5OTlFKzk5OQorcm90eDE0MyByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDEgIC0+IDkuOTk5OTk5OTlFKzk5OQorcm90eDE0NCByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IDkuOTk5OTk5OTlFKzk5OQorcm90eDE0NSByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDBFLTk5MQorcm90eDE0NiByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgLTggIC0+IDEuMEUtOTk4Cityb3R4MTQ3IHJvdGF0ZSAgMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gMS4wRS05OTgKK3JvdHgxNDggcm90YXRlICAxRS05OTkgICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTEKK3JvdHgxNTEgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAxLjAwMDAwMDBFLTEwMDAKK3JvdHgxNTIgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAxRS0xMDA3Cityb3R4MTUzIHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gMUUtMTAwNworcm90eDE1NCByb3RhdGUgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDEuMDAwMDAwMEUtMTAwMAorcm90eDE1NSByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDkuMDAwMDAwMEUtMTAwMAorcm90eDE1NiByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IDlFLTEwMDcKK3JvdHgxNTcgcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiA5RS0xMDA3Cityb3R4MTU4IHJvdGF0ZSAgOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gOS4wMDAwMDAwRS0xMDAwCityb3R4MTYwIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMEUtOTk5Cityb3R4MTYxIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gMS4wRS0xMDA2Cityb3R4MTYyIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gMS4wRS0xMDA2Cityb3R4MTYzIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTk5CistLSAgbmVnYXRpdmVzCityb3R4MTcxIHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gLTkuOTk5OTk5OTlFKzk5OQorcm90eDE3MiByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IC05Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNzMgcm90YXRlIC05Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiAtOS45OTk5OTk5OUUrOTk5Cityb3R4MTc0IHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAgOCAgLT4gLTkuOTk5OTk5OTlFKzk5OQorcm90eDE3NSByb3RhdGUgLTFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwRS05OTEKK3JvdHgxNzYgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgIC04ICAtPiAtMS4wRS05OTgKK3JvdHgxNzcgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgICAxICAtPiAtMS4wRS05OTgKK3JvdHgxNzggcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgICA4ICAtPiAtMS4wMDAwMDAwMEUtOTkxCityb3R4MTgxIHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTEuMDAwMDAwMEUtMTAwMAorcm90eDE4MiByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC0xRS0xMDA3Cityb3R4MTgzIHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTFFLTEwMDcKK3JvdHgxODQgcm90YXRlIC0xLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtMS4wMDAwMDAwRS0xMDAwCityb3R4MTg1IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTkuMDAwMDAwMEUtMTAwMAorcm90eDE4NiByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC05RS0xMDA3Cityb3R4MTg3IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTlFLTEwMDcKK3JvdHgxODggcm90YXRlIC05LjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtOS4wMDAwMDAwRS0xMDAwCityb3R4MTkwIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDBFLTk5OQorcm90eDE5MSByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IC0xLjBFLTEwMDYKK3JvdHgxOTIgcm90YXRlIC0xRS0xMDA3ICAgICAgICAgICAgICAxICAtPiAtMS4wRS0xMDA2Cityb3R4MTkzIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5OQorCistLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCityb3R4MjAxIHJvdGF0ZSAgICAgICAgIC0wICAgIDAgIC0+ICAtMAorcm90eDIwMiByb3RhdGUgICAgICAgICAtMCAgICAyICAtPiAgLTAKK3JvdHgyMDMgcm90YXRlICAgICAgICAgLTEgICAgMiAgLT4gIC0xMDAKK3JvdHgyMDQgcm90YXRlICAgICAgICAgLTEgICAgOCAgLT4gIC0xMDAwMDAwMDAKK3JvdHgyMDUgcm90YXRlICAgICAgICAgLTEgICAgOSAgLT4gIC0xCityb3R4MjA2IHJvdGF0ZSAgICAgICAgIC0xICAgLTEgIC0+ICAtMTAwMDAwMDAwCityb3R4MjA3IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTEgIC0+ICAtOTEyMzQ1Njc4Cityb3R4MjA4IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTggIC0+ICAtMjM0NTY3ODkxCityb3R4MjA5IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTkgIC0+ICAtMTIzNDU2Nzg5Cityb3R4MjEwIHJvdGF0ZSAgICAgICAgIC0wICAgLTIgIC0+ICAtMAorCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAorcm90eDc4MSByb3RhdGUgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQorcm90eDc4MiByb3RhdGUgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorcm90eDc4MyByb3RhdGUgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorcm90eDc4NCByb3RhdGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorcm90eDc4NSByb3RhdGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorcm90eDc4NiByb3RhdGUgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQorcm90eDc4NyByb3RhdGUgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc4OCByb3RhdGUgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc4OSByb3RhdGUgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc5MCByb3RhdGUgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc5MSByb3RhdGUgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc5MiByb3RhdGUgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc5MyByb3RhdGUgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc5NCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityb3R4ODAwIHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODAxIHJvdGF0ZSAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKK3JvdHg4MDIgcm90YXRlICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQorcm90eDgwMyByb3RhdGUgIEluZiAgLTAgICAgIC0+IEluZmluaXR5Cityb3R4ODA0IHJvdGF0ZSAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKK3JvdHg4MDUgcm90YXRlICBJbmYgICAxICAgICAtPiBJbmZpbml0eQorcm90eDgwNiByb3RhdGUgIEluZiAgIDggICAgIC0+IEluZmluaXR5Cityb3R4ODA3IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODA4IHJvdGF0ZSAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODA5IHJvdGF0ZSAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODEwIHJvdGF0ZSAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODExIHJvdGF0ZSAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODEyIHJvdGF0ZSAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODEzIHJvdGF0ZSAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODE0IHJvdGF0ZSAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODE1IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3JvdHg4MjEgcm90YXRlICBOYU4gLUluZiAgICAtPiAgTmFOCityb3R4ODIyIHJvdGF0ZSAgTmFOIC0xMDAwICAgLT4gIE5hTgorcm90eDgyMyByb3RhdGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK3JvdHg4MjQgcm90YXRlICBOYU4gLTAgICAgICAtPiAgTmFOCityb3R4ODI1IHJvdGF0ZSAgTmFOICAwICAgICAgLT4gIE5hTgorcm90eDgyNiByb3RhdGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK3JvdHg4Mjcgcm90YXRlICBOYU4gIDEwMDAgICAtPiAgTmFOCityb3R4ODI4IHJvdGF0ZSAgTmFOICBJbmYgICAgLT4gIE5hTgorcm90eDgyOSByb3RhdGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK3JvdHg4MzAgcm90YXRlIC1JbmYgIE5hTiAgICAtPiAgTmFOCityb3R4ODMxIHJvdGF0ZSAtMTAwMCBOYU4gICAgLT4gIE5hTgorcm90eDgzMiByb3RhdGUgLTEgICAgTmFOICAgIC0+ICBOYU4KK3JvdHg4MzMgcm90YXRlIC0wICAgIE5hTiAgICAtPiAgTmFOCityb3R4ODM0IHJvdGF0ZSAgMCAgICBOYU4gICAgLT4gIE5hTgorcm90eDgzNSByb3RhdGUgIDEgICAgTmFOICAgIC0+ICBOYU4KK3JvdHg4MzYgcm90YXRlICAxMDAwIE5hTiAgICAtPiAgTmFOCityb3R4ODM3IHJvdGF0ZSAgSW5mICBOYU4gICAgLT4gIE5hTgorCisKKworcm90eDg0MSByb3RhdGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQyIHJvdGF0ZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NDMgcm90YXRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg0NCByb3RhdGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQ1IHJvdGF0ZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NDYgcm90YXRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg0NyByb3RhdGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQ4IHJvdGF0ZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NDkgcm90YXRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1MCByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODUxIHJvdGF0ZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTIgcm90YXRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1MyByb3RhdGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODU0IHJvdGF0ZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTUgcm90YXRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1NiByb3RhdGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODU3IHJvdGF0ZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTggcm90YXRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1OSByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK3JvdHg4NjEgcm90YXRlICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorcm90eDg2MiByb3RhdGUgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCityb3R4ODYzIHJvdGF0ZSAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK3JvdHg4NjQgcm90YXRlICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorcm90eDg2NSByb3RhdGUgIE5hTjUgICArTmFONiAgIC0+ICBOYU41Cityb3R4ODY2IHJvdGF0ZSAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK3JvdHg4Njcgcm90YXRlIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorcm90eDg2OCByb3RhdGUgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45Cityb3R4ODY5IHJvdGF0ZSAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCityb3R4ODcxIHJvdGF0ZSAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg3MiByb3RhdGUgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NzMgcm90YXRlICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODc0IHJvdGF0ZSAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg3NSByb3RhdGUgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NzYgcm90YXRlICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODc3IHJvdGF0ZSAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg3OCByb3RhdGUgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4Nzkgcm90YXRlICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODgwIHJvdGF0ZSAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg4MSByb3RhdGUgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4ODIgcm90YXRlIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK3JvdHg4ODMgcm90YXRlIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODg0IHJvdGF0ZSAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCityb3R4ODg1IHJvdGF0ZSAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwYXlsb2FkIGRlY2FwaXRhdGUKK3ByZWNpc2lvbjogNQorcm90eDg4NiByb3RhdGUgIDExIC1zTmFOMTIzNDU2Nzg5MCAtPiAtTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2NhbGViLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2NhbGViLmRlY1Rlc3QKaW5kZXggMzcyZTNkZC4uMDRhNjVkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NjYWxlYi5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zY2FsZWIuZGVjVGVzdApAQCAtMSwyMDkgKzEsMjA5IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBzY2FsZWIuZGVjVGVzdCAtLSBzY2FsZSBhIG51bWJlciBieSBwb3dlcnMgb2YgMTAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotDQotLS0gTWF4IHxyaHN8IGlzIDIqKDk5OSs5KSA9IDIwMTYNCi0NCi0tLSBTYW5pdHkgY2hlY2tzDQotc2NieDAwMSBzY2FsZWIgICAgICAgNy41MCAgIDEwIC0+IDcuNTBFKzEwDQotc2NieDAwMiBzY2FsZWIgICAgICAgNy41MCAgICAzIC0+IDcuNTBFKzMNCi1zY2J4MDAzIHNjYWxlYiAgICAgICA3LjUwICAgIDIgLT4gNzUwDQotc2NieDAwNCBzY2FsZWIgICAgICAgNy41MCAgICAxIC0+IDc1LjANCi1zY2J4MDA1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgLT4gNy41MA0KLXNjYngwMDYgc2NhbGViICAgICAgIDcuNTAgICAtMSAtPiAwLjc1MA0KLXNjYngwMDcgc2NhbGViICAgICAgIDcuNTAgICAtMiAtPiAwLjA3NTANCi1zY2J4MDA4IHNjYWxlYiAgICAgICA3LjUwICAtMTAgLT4gNy41MEUtMTANCi1zY2J4MDA5IHNjYWxlYiAgICAgIC03LjUwICAgIDMgLT4gLTcuNTBFKzMNCi1zY2J4MDEwIHNjYWxlYiAgICAgIC03LjUwICAgIDIgLT4gLTc1MA0KLXNjYngwMTEgc2NhbGViICAgICAgLTcuNTAgICAgMSAtPiAtNzUuMA0KLXNjYngwMTIgc2NhbGViICAgICAgLTcuNTAgICAgMCAtPiAtNy41MA0KLXNjYngwMTMgc2NhbGViICAgICAgLTcuNTAgICAtMSAtPiAtMC43NTANCi0NCi0tLSBJbmZpbml0aWVzDQotc2NieDAxNCBzY2FsZWIgIEluZmluaXR5ICAgMSAtPiBJbmZpbml0eQ0KLXNjYngwMTUgc2NhbGViICAtSW5maW5pdHkgIDIgLT4gLUluZmluaXR5DQotc2NieDAxNiBzY2FsZWIgIEluZmluaXR5ICAtMSAtPiBJbmZpbml0eQ0KLXNjYngwMTcgc2NhbGViICAtSW5maW5pdHkgLTIgLT4gLUluZmluaXR5DQotDQotLS0gTmV4dCB0d28gYXJlIHNvbWV3aGF0IHVuZGVmaW5lZCBpbiA3NTRyOyB0cmVhdCBhcyBub24taW50ZWdlcg0KLXNjYngwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDAxOSBzY2FsZWIgIDEwIC1JbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOYU5zIGFyZSB1bmRlZmluZWQgaW4gNzU0cjsgYXNzdW1lIHVzdWFsIHByb2Nlc3NpbmcNCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1zY2J4MDIxIHNjYWxlYiAgICAgICAgIE5hTiAgMSAtPiBOYU4NCi1zY2J4MDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFODQotc2NieDAyMyBzY2FsZWIgICAgICAgIHNOYU4gIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDAyNCBzY2FsZWIgICAgICAgLXNOYU4gIDEgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTg0KLXNjYngwMjYgc2NhbGViIC1JbmYgICAtTmFOICAgIC0+IC1OYU4NCi1zY2J4MDI3IHNjYWxlYiAgICA0ICAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gbm9uLWludGVnZXIgUkhTDQotc2NieDAzMCBzY2FsZWIgIDEuMjMgICAgMSAgICAtPiAgMTIuMw0KLXNjYngwMzEgc2NhbGViICAxLjIzICAgIDEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwMzIgc2NhbGViICAxLjIzICAgIDEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwMzMgc2NhbGViICAxLjIzICAgIDEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwMzQgc2NhbGViICAxLjIzICAgIDAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwMzUgc2NhbGViICAxLjIzICAgIDAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwMzYgc2NhbGViICAxLjIzICAgIDAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDM3IHNjYWxlYiAgMS4yMyAgIC0xICAgIC0+ICAwLjEyMw0KLXNjYngwMzggc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwMzkgc2NhbGViICAxLjIzICAgLTEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwNDAgc2NhbGViICAxLjIzICAgLTEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwNDIgc2NhbGViICAxLjIzICAgLTAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwNDMgc2NhbGViICAxLjIzICAgLTAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDA0NSBzY2FsZWIgIDEuMjMgICAgMUUrMSAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwNDYgc2NhbGViICAxLjIzICAgIDEuMTIzNEUrNiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotDQotc2NieDEyMCBzY2FsZWIgIDEuMjMgICAgMjAxNSAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLXNjYngxMjEgc2NhbGViICAxLjIzICAgIDIwMTYgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1zY2J4MTIyIHNjYWxlYiAgMS4yMyAgICAyMDE3ICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDEyMyBzY2FsZWIgIDEuMjMgICAgMjAxOCAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngxMjQgc2NhbGViICAxLjIzICAgLTIwMTUgICAgICAgIC0+ICAwRS0xMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1zY2J4MTI1IHNjYWxlYiAgMS4yMyAgIC0yMDE2ICAgICAgICAtPiAgMEUtMTAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotc2NieDEyNiBzY2FsZWIgIDEuMjMgICAtMjAxNyAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngxMjcgc2NhbGViICAxLjIzICAgLTIwMTggICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLXNjYng4NjEgc2NhbGViICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xDQotc2NieDg2MiBzY2FsZWIgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjINCi1zY2J4ODYzIHNjYWxlYiAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMw0KLXNjYng4NjQgc2NhbGViICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40DQotc2NieDg2NSBzY2FsZWIgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUNCi1zY2J4ODY2IHNjYWxlYiAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzENCi1zY2J4ODY3IHNjYWxlYiAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODENCi1zY2J4ODY4IHNjYWxlYiAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTENCi1zY2J4ODY5IHNjYWxlYiAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxDQotc2NieDg3MSBzY2FsZWIgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYng4NzIgc2NhbGViICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4ODczIHNjYWxlYiAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDg3NCBzY2FsZWIgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYng4NzUgc2NhbGViICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4ODc2IHNjYWxlYiAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDg3NyBzY2FsZWIgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYng4Nzggc2NhbGViIC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4ODc5IHNjYWxlYiAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDg4MCBzY2FsZWIgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYng4ODEgc2NhbGViICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmaW5pdGVzDQotc2NieDA1MSBzY2FsZWIgICAgICAgICAgNyAgIC0yICAtPiAwLjA3DQotc2NieDA1MiBzY2FsZWIgICAgICAgICAtNyAgIC0yICAtPiAtMC4wNw0KLXNjYngwNTMgc2NhbGViICAgICAgICAgNzUgICAtMiAgLT4gMC43NQ0KLXNjYngwNTQgc2NhbGViICAgICAgICAtNzUgICAtMiAgLT4gLTAuNzUNCi1zY2J4MDU1IHNjYWxlYiAgICAgICA3LjUwICAgLTIgIC0+IDAuMDc1MA0KLXNjYngwNTYgc2NhbGViICAgICAgLTcuNTAgICAtMiAgLT4gLTAuMDc1MA0KLXNjYngwNTcgc2NhbGViICAgICAgIDcuNTAwICAtMiAgLT4gMC4wNzUwMA0KLXNjYngwNTggc2NhbGViICAgICAgLTcuNTAwICAtMiAgLT4gLTAuMDc1MDANCi1zY2J4MDYxIHNjYWxlYiAgICAgICAgICA3ICAgLTEgIC0+IDAuNw0KLXNjYngwNjIgc2NhbGViICAgICAgICAgLTcgICAtMSAgLT4gLTAuNw0KLXNjYngwNjMgc2NhbGViICAgICAgICAgNzUgICAtMSAgLT4gNy41DQotc2NieDA2NCBzY2FsZWIgICAgICAgIC03NSAgIC0xICAtPiAtNy41DQotc2NieDA2NSBzY2FsZWIgICAgICAgNy41MCAgIC0xICAtPiAwLjc1MA0KLXNjYngwNjYgc2NhbGViICAgICAgLTcuNTAgICAtMSAgLT4gLTAuNzUwDQotc2NieDA2NyBzY2FsZWIgICAgICAgNy41MDAgIC0xICAtPiAwLjc1MDANCi1zY2J4MDY4IHNjYWxlYiAgICAgIC03LjUwMCAgLTEgIC0+IC0wLjc1MDANCi1zY2J4MDcxIHNjYWxlYiAgICAgICAgICA3ICAgIDAgIC0+IDcNCi1zY2J4MDcyIHNjYWxlYiAgICAgICAgIC03ICAgIDAgIC0+IC03DQotc2NieDA3MyBzY2FsZWIgICAgICAgICA3NSAgICAwICAtPiA3NQ0KLXNjYngwNzQgc2NhbGViICAgICAgICAtNzUgICAgMCAgLT4gLTc1DQotc2NieDA3NSBzY2FsZWIgICAgICAgNy41MCAgICAwICAtPiA3LjUwDQotc2NieDA3NiBzY2FsZWIgICAgICAtNy41MCAgICAwICAtPiAtNy41MA0KLXNjYngwNzcgc2NhbGViICAgICAgIDcuNTAwICAgMCAgLT4gNy41MDANCi1zY2J4MDc4IHNjYWxlYiAgICAgIC03LjUwMCAgIDAgIC0+IC03LjUwMA0KLXNjYngwODEgc2NhbGViICAgICAgICAgIDcgICAgMSAgLT4gN0UrMQ0KLXNjYngwODIgc2NhbGViICAgICAgICAgLTcgICAgMSAgLT4gLTdFKzENCi1zY2J4MDgzIHNjYWxlYiAgICAgICAgIDc1ICAgIDEgIC0+IDcuNUUrMg0KLXNjYngwODQgc2NhbGViICAgICAgICAtNzUgICAgMSAgLT4gLTcuNUUrMg0KLXNjYngwODUgc2NhbGViICAgICAgIDcuNTAgICAgMSAgLT4gNzUuMA0KLXNjYngwODYgc2NhbGViICAgICAgLTcuNTAgICAgMSAgLT4gLTc1LjANCi1zY2J4MDg3IHNjYWxlYiAgICAgICA3LjUwMCAgIDEgIC0+IDc1LjAwDQotc2NieDA4OCBzY2FsZWIgICAgICAtNy41MDAgICAxICAtPiAtNzUuMDANCi1zY2J4MDkxIHNjYWxlYiAgICAgICAgICA3ICAgIDIgIC0+IDdFKzINCi1zY2J4MDkyIHNjYWxlYiAgICAgICAgIC03ICAgIDIgIC0+IC03RSsyDQotc2NieDA5MyBzY2FsZWIgICAgICAgICA3NSAgICAyICAtPiA3LjVFKzMNCi1zY2J4MDk0IHNjYWxlYiAgICAgICAgLTc1ICAgIDIgIC0+IC03LjVFKzMNCi1zY2J4MDk1IHNjYWxlYiAgICAgICA3LjUwICAgIDIgIC0+IDc1MA0KLXNjYngwOTYgc2NhbGViICAgICAgLTcuNTAgICAgMiAgLT4gLTc1MA0KLXNjYngwOTcgc2NhbGViICAgICAgIDcuNTAwICAgMiAgLT4gNzUwLjANCi1zY2J4MDk4IHNjYWxlYiAgICAgIC03LjUwMCAgIDIgIC0+IC03NTAuMA0KLQ0KLS0tIHplcm9zDQotc2NieDExMSBzY2FsZWIgICAgICAgICAgMCAgMSAtPiAwRSsxDQotc2NieDExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMg0KLXNjYngxMTMgc2NhbGViICAgICAgIDBFKzQgIDMgLT4gMEUrNw0KLXNjYngxMTQgc2NhbGViICAgICAgLTBFKzQgIDQgLT4gLTBFKzgNCi1zY2J4MTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzENCi1zY2J4MTE2IHNjYWxlYiAgICAtMC4wMDAwICA2IC0+IC0wRSsyDQotc2NieDExNyBzY2FsZWIgICAgICAwRS0xNDEgNyAtPiAwRS0xMzQNCi1zY2J4MTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMNCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLXNjYngxMzIgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgKzk5OSAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1zY2J4MTMzIHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICArMTAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLXNjYngxMzQgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgICsxICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotc2NieDEzNSBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSAgIDAgIC0+IDkuOTk5OTk5OTlFKzk5OQ0KLXNjYngxMzYgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgIC0xICAtPiA5Ljk5OTk5OTk5RSs5OTgNCi1zY2J4MTM3IHNjYWxlYiAgMUUtOTk5ICAgICAgICAgICArMSAgLT4gMUUtOTk4DQotc2NieDEzOCBzY2FsZWIgIDFFLTk5OSAgICAgICAgICAgLTAgIC0+IDFFLTk5OQ0KLXNjYngxMzkgc2NhbGViICAxRS05OTkgICAgICAgICAgIC0xICAtPiAxRS0xMDAwICAgICAgICAgU3Vibm9ybWFsDQotc2NieDE0MCBzY2FsZWIgIDEuMDAwMDAwMDBFLTk5OSAgKzEgIC0+IDEuMDAwMDAwMDBFLTk5OA0KLXNjYngxNDEgc2NhbGViICAxLjAwMDAwMDAwRS05OTkgICAwICAtPiAxLjAwMDAwMDAwRS05OTkNCi1zY2J4MTQyIHNjYWxlYiAgMS4wMDAwMDAwMEUtOTk5ICAtMSAgLT4gMS4wMDAwMDAwRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkDQotc2NieDE0MyBzY2FsZWIgIDFFLTEwMDcgICAgICAgICAgKzEgIC0+IDFFLTEwMDYgICAgICAgICBTdWJub3JtYWwNCi1zY2J4MTQ0IHNjYWxlYiAgMUUtMTAwNyAgICAgICAgICAtMCAgLT4gMUUtMTAwNyAgICAgICAgIFN1Ym5vcm1hbA0KLXNjYngxNDUgc2NhbGViICAxRS0xMDA3ICAgICAgICAgIC0xICAtPiAwRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLXNjYngxNTAgc2NhbGViICAtMUUtMTAwNyAgICAgICAgICsxICAtPiAtMUUtMTAwNiAgICAgICAgU3Vibm9ybWFsDQotc2NieDE1MSBzY2FsZWIgIC0xRS0xMDA3ICAgICAgICAgLTAgIC0+IC0xRS0xMDA3ICAgICAgICBTdWJub3JtYWwNCi1zY2J4MTUyIHNjYWxlYiAgLTFFLTEwMDcgICAgICAgICAtMSAgLT4gLTBFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1zY2J4MTUzIHNjYWxlYiAgLTEuMDAwMDAwMDBFLTk5OSArMSAgLT4gLTEuMDAwMDAwMDBFLTk5OA0KLXNjYngxNTQgc2NhbGViICAtMS4wMDAwMDAwMEUtOTk5ICswICAtPiAtMS4wMDAwMDAwMEUtOTk5DQotc2NieDE1NSBzY2FsZWIgIC0xLjAwMDAwMDAwRS05OTkgLTEgIC0+IC0xLjAwMDAwMDBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQNCi1zY2J4MTU2IHNjYWxlYiAgLTFFLTk5OSAgICAgICAgICArMSAgLT4gLTFFLTk5OA0KLXNjYngxNTcgc2NhbGViICAtMUUtOTk5ICAgICAgICAgIC0wICAtPiAtMUUtOTk5DQotc2NieDE1OCBzY2FsZWIgIC0xRS05OTkgICAgICAgICAgLTEgIC0+IC0xRS0xMDAwICAgICAgICAgU3Vibm9ybWFsDQotc2NieDE1OSBzY2FsZWIgIC05Ljk5OTk5OTk5RSs5OTkgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotc2NieDE2MCBzY2FsZWIgIC05Ljk5OTk5OTk5RSs5OTkgKzAgIC0+IC05Ljk5OTk5OTk5RSs5OTkNCi1zY2J4MTYxIHNjYWxlYiAgLTkuOTk5OTk5OTlFKzk5OSAtMSAgLT4gLTkuOTk5OTk5OTlFKzk5OA0KLXNjYngxNjIgc2NhbGViICAtOUUrOTk5ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLXNjYngxNjMgc2NhbGViICAtMUUrOTk5ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEtyYWggZXhhbXBsZXMNCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogOTk5OTk5OTk5DQotbWluRXhwb25lbnQ6IC05OTk5OTk5OTkNCi0tLSBpbnRlZ2VyIG92ZXJmbG93IGluIDMuNjEgb3IgZWFybGllcg0KLXNjYngxNjQgc2NhbGViICAxRS05OTk5OTk5OTkgIC0xMjAwMDAwMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBvdXQgb2YgcmFuZ2UNCi1zY2J4MTY1IHNjYWxlYiAgLTFFLTk5OTk5OTk5OSAgKzEyMDAwMDAwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gc2NhbGViLmRlY1Rlc3QgLS0gc2NhbGUgYSBudW1iZXIgYnkgcG93ZXJzIG9mIDEwICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBNYXggfHJoc3wgaXMgMiooOTk5KzkpID0gMjAxNgorCistLSBTYW5pdHkgY2hlY2tzCitzY2J4MDAxIHNjYWxlYiAgICAgICA3LjUwICAgMTAgLT4gNy41MEUrMTAKK3NjYngwMDIgc2NhbGViICAgICAgIDcuNTAgICAgMyAtPiA3LjUwRSszCitzY2J4MDAzIHNjYWxlYiAgICAgICA3LjUwICAgIDIgLT4gNzUwCitzY2J4MDA0IHNjYWxlYiAgICAgICA3LjUwICAgIDEgLT4gNzUuMAorc2NieDAwNSBzY2FsZWIgICAgICAgNy41MCAgICAwIC0+IDcuNTAKK3NjYngwMDYgc2NhbGViICAgICAgIDcuNTAgICAtMSAtPiAwLjc1MAorc2NieDAwNyBzY2FsZWIgICAgICAgNy41MCAgIC0yIC0+IDAuMDc1MAorc2NieDAwOCBzY2FsZWIgICAgICAgNy41MCAgLTEwIC0+IDcuNTBFLTEwCitzY2J4MDA5IHNjYWxlYiAgICAgIC03LjUwICAgIDMgLT4gLTcuNTBFKzMKK3NjYngwMTAgc2NhbGViICAgICAgLTcuNTAgICAgMiAtPiAtNzUwCitzY2J4MDExIHNjYWxlYiAgICAgIC03LjUwICAgIDEgLT4gLTc1LjAKK3NjYngwMTIgc2NhbGViICAgICAgLTcuNTAgICAgMCAtPiAtNy41MAorc2NieDAxMyBzY2FsZWIgICAgICAtNy41MCAgIC0xIC0+IC0wLjc1MAorCistLSBJbmZpbml0aWVzCitzY2J4MDE0IHNjYWxlYiAgSW5maW5pdHkgICAxIC0+IEluZmluaXR5CitzY2J4MDE1IHNjYWxlYiAgLUluZmluaXR5ICAyIC0+IC1JbmZpbml0eQorc2NieDAxNiBzY2FsZWIgIEluZmluaXR5ICAtMSAtPiBJbmZpbml0eQorc2NieDAxNyBzY2FsZWIgIC1JbmZpbml0eSAtMiAtPiAtSW5maW5pdHkKKworLS0gTmV4dCB0d28gYXJlIHNvbWV3aGF0IHVuZGVmaW5lZCBpbiA3NTRyOyB0cmVhdCBhcyBub24taW50ZWdlcgorc2NieDAxOCBzY2FsZWIgIDEwICBJbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMTkgc2NhbGViICAxMCAtSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMgYXJlIHVuZGVmaW5lZCBpbiA3NTRyOyBhc3N1bWUgdXN1YWwgcHJvY2Vzc2luZworLS0gTmFOcywgMCBwYXlsb2FkCitzY2J4MDIxIHNjYWxlYiAgICAgICAgIE5hTiAgMSAtPiBOYU4KK3NjYngwMjIgc2NhbGViICAgICAgICAtTmFOIC0xIC0+IC1OYU4KK3NjYngwMjMgc2NhbGViICAgICAgICBzTmFOICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAyNCBzY2FsZWIgICAgICAgLXNOYU4gIDEgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAyNSBzY2FsZWIgICAgNCAgICBOYU4gICAgLT4gTmFOCitzY2J4MDI2IHNjYWxlYiAtSW5mICAgLU5hTiAgICAtPiAtTmFOCitzY2J4MDI3IHNjYWxlYiAgICA0ICAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMjggc2NhbGViICBJbmYgIC1zTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gbm9uLWludGVnZXIgUkhTCitzY2J4MDMwIHNjYWxlYiAgMS4yMyAgICAxICAgIC0+ICAxMi4zCitzY2J4MDMxIHNjYWxlYiAgMS4yMyAgICAxLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMzIgc2NhbGViICAxLjIzICAgIDEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzMyBzY2FsZWIgIDEuMjMgICAgMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDM0IHNjYWxlYiAgMS4yMyAgICAwLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMzUgc2NhbGViICAxLjIzICAgIDAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzNiBzY2FsZWIgIDEuMjMgICAgMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzNyBzY2FsZWIgIDEuMjMgICAtMSAgICAtPiAgMC4xMjMKK3NjYngwMzggc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzOSBzY2FsZWIgIDEuMjMgICAtMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQwIHNjYWxlYiAgMS4yMyAgIC0xLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDA0MiBzY2FsZWIgIDEuMjMgICAtMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQzIHNjYWxlYiAgMS4yMyAgIC0wLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQ1IHNjYWxlYiAgMS4yMyAgICAxRSsxICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQ2IHNjYWxlYiAgMS4yMyAgICAxLjEyMzRFKzYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKworc2NieDEyMCBzY2FsZWIgIDEuMjMgICAgMjAxNSAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc2NieDEyMSBzY2FsZWIgIDEuMjMgICAgMjAxNiAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc2NieDEyMiBzY2FsZWIgIDEuMjMgICAgMjAxNyAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDEyMyBzY2FsZWIgIDEuMjMgICAgMjAxOCAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDEyNCBzY2FsZWIgIDEuMjMgICAtMjAxNSAgICAgICAgLT4gIDBFLTEwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorc2NieDEyNSBzY2FsZWIgIDEuMjMgICAtMjAxNiAgICAgICAgLT4gIDBFLTEwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorc2NieDEyNiBzY2FsZWIgIDEuMjMgICAtMjAxNyAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDEyNyBzY2FsZWIgIDEuMjMgICAtMjAxOCAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCistLSBwcm9wYWdhdGluZyBOYU5zCitzY2J4ODYxIHNjYWxlYiAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQorc2NieDg2MiBzY2FsZWIgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjIKK3NjYng4NjMgc2NhbGViICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zCitzY2J4ODY0IHNjYWxlYiAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONAorc2NieDg2NSBzY2FsZWIgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUKK3NjYng4NjYgc2NhbGViIC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQorc2NieDg2NyBzY2FsZWIgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxCitzY2J4ODY4IHNjYWxlYiAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTEKK3NjYng4Njkgc2NhbGViICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDEKK3NjYng4NzEgc2NhbGViICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4NzIgc2NhbGViICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4NzMgc2NhbGViIC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4NzQgc2NhbGViICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4NzUgc2NhbGViICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4NzYgc2NhbGViICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4Nzcgc2NhbGViIC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4Nzggc2NhbGViIC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4Nzkgc2NhbGViICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4ODAgc2NhbGViICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4ODEgc2NhbGViICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworc2NieDA1MSBzY2FsZWIgICAgICAgICAgNyAgIC0yICAtPiAwLjA3CitzY2J4MDUyIHNjYWxlYiAgICAgICAgIC03ICAgLTIgIC0+IC0wLjA3CitzY2J4MDUzIHNjYWxlYiAgICAgICAgIDc1ICAgLTIgIC0+IDAuNzUKK3NjYngwNTQgc2NhbGViICAgICAgICAtNzUgICAtMiAgLT4gLTAuNzUKK3NjYngwNTUgc2NhbGViICAgICAgIDcuNTAgICAtMiAgLT4gMC4wNzUwCitzY2J4MDU2IHNjYWxlYiAgICAgIC03LjUwICAgLTIgIC0+IC0wLjA3NTAKK3NjYngwNTcgc2NhbGViICAgICAgIDcuNTAwICAtMiAgLT4gMC4wNzUwMAorc2NieDA1OCBzY2FsZWIgICAgICAtNy41MDAgIC0yICAtPiAtMC4wNzUwMAorc2NieDA2MSBzY2FsZWIgICAgICAgICAgNyAgIC0xICAtPiAwLjcKK3NjYngwNjIgc2NhbGViICAgICAgICAgLTcgICAtMSAgLT4gLTAuNworc2NieDA2MyBzY2FsZWIgICAgICAgICA3NSAgIC0xICAtPiA3LjUKK3NjYngwNjQgc2NhbGViICAgICAgICAtNzUgICAtMSAgLT4gLTcuNQorc2NieDA2NSBzY2FsZWIgICAgICAgNy41MCAgIC0xICAtPiAwLjc1MAorc2NieDA2NiBzY2FsZWIgICAgICAtNy41MCAgIC0xICAtPiAtMC43NTAKK3NjYngwNjcgc2NhbGViICAgICAgIDcuNTAwICAtMSAgLT4gMC43NTAwCitzY2J4MDY4IHNjYWxlYiAgICAgIC03LjUwMCAgLTEgIC0+IC0wLjc1MDAKK3NjYngwNzEgc2NhbGViICAgICAgICAgIDcgICAgMCAgLT4gNworc2NieDA3MiBzY2FsZWIgICAgICAgICAtNyAgICAwICAtPiAtNworc2NieDA3MyBzY2FsZWIgICAgICAgICA3NSAgICAwICAtPiA3NQorc2NieDA3NCBzY2FsZWIgICAgICAgIC03NSAgICAwICAtPiAtNzUKK3NjYngwNzUgc2NhbGViICAgICAgIDcuNTAgICAgMCAgLT4gNy41MAorc2NieDA3NiBzY2FsZWIgICAgICAtNy41MCAgICAwICAtPiAtNy41MAorc2NieDA3NyBzY2FsZWIgICAgICAgNy41MDAgICAwICAtPiA3LjUwMAorc2NieDA3OCBzY2FsZWIgICAgICAtNy41MDAgICAwICAtPiAtNy41MDAKK3NjYngwODEgc2NhbGViICAgICAgICAgIDcgICAgMSAgLT4gN0UrMQorc2NieDA4MiBzY2FsZWIgICAgICAgICAtNyAgICAxICAtPiAtN0UrMQorc2NieDA4MyBzY2FsZWIgICAgICAgICA3NSAgICAxICAtPiA3LjVFKzIKK3NjYngwODQgc2NhbGViICAgICAgICAtNzUgICAgMSAgLT4gLTcuNUUrMgorc2NieDA4NSBzY2FsZWIgICAgICAgNy41MCAgICAxICAtPiA3NS4wCitzY2J4MDg2IHNjYWxlYiAgICAgIC03LjUwICAgIDEgIC0+IC03NS4wCitzY2J4MDg3IHNjYWxlYiAgICAgICA3LjUwMCAgIDEgIC0+IDc1LjAwCitzY2J4MDg4IHNjYWxlYiAgICAgIC03LjUwMCAgIDEgIC0+IC03NS4wMAorc2NieDA5MSBzY2FsZWIgICAgICAgICAgNyAgICAyICAtPiA3RSsyCitzY2J4MDkyIHNjYWxlYiAgICAgICAgIC03ICAgIDIgIC0+IC03RSsyCitzY2J4MDkzIHNjYWxlYiAgICAgICAgIDc1ICAgIDIgIC0+IDcuNUUrMworc2NieDA5NCBzY2FsZWIgICAgICAgIC03NSAgICAyICAtPiAtNy41RSszCitzY2J4MDk1IHNjYWxlYiAgICAgICA3LjUwICAgIDIgIC0+IDc1MAorc2NieDA5NiBzY2FsZWIgICAgICAtNy41MCAgICAyICAtPiAtNzUwCitzY2J4MDk3IHNjYWxlYiAgICAgICA3LjUwMCAgIDIgIC0+IDc1MC4wCitzY2J4MDk4IHNjYWxlYiAgICAgIC03LjUwMCAgIDIgIC0+IC03NTAuMAorCistLSB6ZXJvcworc2NieDExMSBzY2FsZWIgICAgICAgICAgMCAgMSAtPiAwRSsxCitzY2J4MTEyIHNjYWxlYiAgICAgICAgIC0wICAyIC0+IC0wRSsyCitzY2J4MTEzIHNjYWxlYiAgICAgICAwRSs0ICAzIC0+IDBFKzcKK3NjYngxMTQgc2NhbGViICAgICAgLTBFKzQgIDQgLT4gLTBFKzgKK3NjYngxMTUgc2NhbGViICAgICAwLjAwMDAgIDUgLT4gMEUrMQorc2NieDExNiBzY2FsZWIgICAgLTAuMDAwMCAgNiAtPiAtMEUrMgorc2NieDExNyBzY2FsZWIgICAgICAwRS0xNDEgNyAtPiAwRS0xMzQKK3NjYngxMTggc2NhbGViICAgICAtMEUtMTQxIDggLT4gLTBFLTEzMworCistLSBObWF4LCBObWluLCBOdGlueQorc2NieDEzMiBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSArOTk5IC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc2NieDEzMyBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSAgKzEwIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3NjYngxMzQgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgICsxICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzY2J4MTM1IHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICAgMCAgLT4gOS45OTk5OTk5OUUrOTk5CitzY2J4MTM2IHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICAtMSAgLT4gOS45OTk5OTk5OUUrOTk4CitzY2J4MTM3IHNjYWxlYiAgMUUtOTk5ICAgICAgICAgICArMSAgLT4gMUUtOTk4CitzY2J4MTM4IHNjYWxlYiAgMUUtOTk5ICAgICAgICAgICAtMCAgLT4gMUUtOTk5CitzY2J4MTM5IHNjYWxlYiAgMUUtOTk5ICAgICAgICAgICAtMSAgLT4gMUUtMTAwMCAgICAgICAgIFN1Ym5vcm1hbAorc2NieDE0MCBzY2FsZWIgIDEuMDAwMDAwMDBFLTk5OSAgKzEgIC0+IDEuMDAwMDAwMDBFLTk5OAorc2NieDE0MSBzY2FsZWIgIDEuMDAwMDAwMDBFLTk5OSAgIDAgIC0+IDEuMDAwMDAwMDBFLTk5OQorc2NieDE0MiBzY2FsZWIgIDEuMDAwMDAwMDBFLTk5OSAgLTEgIC0+IDEuMDAwMDAwMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorc2NieDE0MyBzY2FsZWIgIDFFLTEwMDcgICAgICAgICAgKzEgIC0+IDFFLTEwMDYgICAgICAgICBTdWJub3JtYWwKK3NjYngxNDQgc2NhbGViICAxRS0xMDA3ICAgICAgICAgIC0wICAtPiAxRS0xMDA3ICAgICAgICAgU3Vibm9ybWFsCitzY2J4MTQ1IHNjYWxlYiAgMUUtMTAwNyAgICAgICAgICAtMSAgLT4gMEUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworc2NieDE1MCBzY2FsZWIgIC0xRS0xMDA3ICAgICAgICAgKzEgIC0+IC0xRS0xMDA2ICAgICAgICBTdWJub3JtYWwKK3NjYngxNTEgc2NhbGViICAtMUUtMTAwNyAgICAgICAgIC0wICAtPiAtMUUtMTAwNyAgICAgICAgU3Vibm9ybWFsCitzY2J4MTUyIHNjYWxlYiAgLTFFLTEwMDcgICAgICAgICAtMSAgLT4gLTBFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3NjYngxNTMgc2NhbGViICAtMS4wMDAwMDAwMEUtOTk5ICsxICAtPiAtMS4wMDAwMDAwMEUtOTk4CitzY2J4MTU0IHNjYWxlYiAgLTEuMDAwMDAwMDBFLTk5OSArMCAgLT4gLTEuMDAwMDAwMDBFLTk5OQorc2NieDE1NSBzY2FsZWIgIC0xLjAwMDAwMDAwRS05OTkgLTEgIC0+IC0xLjAwMDAwMDBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK3NjYngxNTYgc2NhbGViICAtMUUtOTk5ICAgICAgICAgICsxICAtPiAtMUUtOTk4CitzY2J4MTU3IHNjYWxlYiAgLTFFLTk5OSAgICAgICAgICAtMCAgLT4gLTFFLTk5OQorc2NieDE1OCBzY2FsZWIgIC0xRS05OTkgICAgICAgICAgLTEgIC0+IC0xRS0xMDAwICAgICAgICAgU3Vibm9ybWFsCitzY2J4MTU5IHNjYWxlYiAgLTkuOTk5OTk5OTlFKzk5OSArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3NjYngxNjAgc2NhbGViICAtOS45OTk5OTk5OUUrOTk5ICswICAtPiAtOS45OTk5OTk5OUUrOTk5CitzY2J4MTYxIHNjYWxlYiAgLTkuOTk5OTk5OTlFKzk5OSAtMSAgLT4gLTkuOTk5OTk5OTlFKzk5OAorc2NieDE2MiBzY2FsZWIgIC05RSs5OTkgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzY2J4MTYzIHNjYWxlYiAgLTFFKzk5OSAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gS3JhaCBleGFtcGxlcworcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5FeHBvbmVudDogLTk5OTk5OTk5OQorLS0gaW50ZWdlciBvdmVyZmxvdyBpbiAzLjYxIG9yIGVhcmxpZXIKK3NjYngxNjQgc2NhbGViICAxRS05OTk5OTk5OTkgIC0xMjAwMDAwMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIG91dCBvZiByYW5nZQorc2NieDE2NSBzY2FsZWIgIC0xRS05OTk5OTk5OTkgICsxMjAwMDAwMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zaGlmdC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NoaWZ0LmRlY1Rlc3QKaW5kZXggM2ZhYzcyZi4uNzg4MzhjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NoaWZ0LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NoaWZ0LmRlY1Rlc3QKQEAgLTEsMjUwICsxLDI1MCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gc2hpZnQuZGVjVGVzdCAtLSBzaGlmdCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLXNoaXgwMDEgc2hpZnQgICAgICAgICAgMCAgICAwICAtPiAgMA0KLXNoaXgwMDIgc2hpZnQgICAgICAgICAgMCAgICAyICAtPiAgMA0KLXNoaXgwMDMgc2hpZnQgICAgICAgICAgMSAgICAyICAtPiAgMTAwDQotc2hpeDAwNCBzaGlmdCAgICAgICAgICAxICAgIDggIC0+ICAxMDAwMDAwMDANCi1zaGl4MDA1IHNoaWZ0ICAgICAgICAgIDEgICAgOSAgLT4gIDANCi1zaGl4MDA2IHNoaWZ0ICAgICAgICAgIDEgICAtMSAgLT4gIDANCi1zaGl4MDA3IHNoaWZ0ICAxMjM0NTY3ODkgICAtMSAgLT4gIDEyMzQ1Njc4DQotc2hpeDAwOCBzaGlmdCAgMTIzNDU2Nzg5ICAgLTggIC0+ICAxDQotc2hpeDAwOSBzaGlmdCAgMTIzNDU2Nzg5ICAgLTkgIC0+ICAwDQotc2hpeDAxMCBzaGlmdCAgICAgICAgICAwICAgLTIgIC0+ICAwDQotDQotLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcg0KLXNoaXgwMTEgc2hpZnQgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXgwMTIgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXgwMTMgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXgwMTQgc2hpZnQgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXgwMTUgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXgwMTYgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXgwMTcgc2hpZnQgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXgwMTggc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24NCi1zaGl4MDIwIHNoaWZ0ICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4MDIxIHNoaWZ0ICAgICAgICAxICAgIC0xMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4MDIyIHNoaWZ0ICAgICAgICAxICAgICAxMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4MDIzIHNoaWZ0ICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4NCi1zaGl4MDMwIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTkgICAtPiAwDQotc2hpeDAzMSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC04ICAgLT4gMQ0KLXNoaXgwMzIgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNyAgIC0+IDEyDQotc2hpeDAzMyBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC02ICAgLT4gMTIzDQotc2hpeDAzNCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC01ICAgLT4gMTIzNA0KLXNoaXgwMzUgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNCAgIC0+IDEyMzQ1DQotc2hpeDAzNiBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC0zICAgLT4gMTIzNDU2DQotc2hpeDAzNyBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC0yICAgLT4gMTIzNDU2Nw0KLXNoaXgwMzggc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtMSAgIC0+IDEyMzQ1Njc4DQotc2hpeDAzOSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5DQotc2hpeDA0MCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5DQotc2hpeDA0MSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwDQotc2hpeDA0MiBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAwDQotc2hpeDA0MyBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICszICAgLT4gNDU2Nzg5MDAwDQotc2hpeDA0NCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs0ICAgLT4gNTY3ODkwMDAwDQotc2hpeDA0NSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs1ICAgLT4gNjc4OTAwMDAwDQotc2hpeDA0NiBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs2ICAgLT4gNzg5MDAwMDAwDQotc2hpeDA0NyBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs3ICAgLT4gODkwMDAwMDAwDQotc2hpeDA0OCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs4ICAgLT4gOTAwMDAwMDAwDQotc2hpeDA0OSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs5ICAgLT4gMA0KLQ0KLS0tIGZyb20gZXhhbXBsZXMNCi1zaGl4MDUxIHNoaWZ0IDM0ICAgICAgICA4ICAgLT4gICc0MDAwMDAwMDAnDQotc2hpeDA1MiBzaGlmdCAxMiAgICAgICAgOSAgIC0+ICAnMCcNCi1zaGl4MDUzIHNoaWZ0IDEyMzQ1Njc4OSAtMiAgLT4gICcxMjM0NTY3Jw0KLXNoaXgwNTQgc2hpZnQgMTIzNDU2Nzg5IDAgICAtPiAgJzEyMzQ1Njc4OScNCi1zaGl4MDU1IHNoaWZ0IDEyMzQ1Njc4OSArMiAgLT4gICczNDU2Nzg5MDAnDQotDQotLS0gemVyb3MNCi1zaGl4MDYwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwDQotc2hpeDA2MSBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMA0KLXNoaXgwNjIgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDANCi1zaGl4MDYzIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwDQotc2hpeDA2NCBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMA0KLXNoaXgwNjUgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTANCi1zaGl4MDY2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwDQotc2hpeDA2NyBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMA0KLXNoaXgwNjggc2hpZnQgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDANCi1zaGl4MDY5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwDQotc2hpeDA3MCBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMA0KLXNoaXgwNzEgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTANCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLXNoaXgxNDEgc2hpZnQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IDkuOTk5OTk5OUUrOTk4DQotc2hpeDE0MiBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAtOCAgLT4gOUUrOTkxDQotc2hpeDE0MyBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAgMSAgLT4gOS45OTk5OTk5MEUrOTk5DQotc2hpeDE0NCBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAgOCAgLT4gOS4wMDAwMDAwMEUrOTk5DQotc2hpeDE0NSBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAtMSAgLT4gMEUtOTk5DQotc2hpeDE0NiBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAtOCAgLT4gMEUtOTk5DQotc2hpeDE0NyBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gMS4wRS05OTgNCi1zaGl4MTQ4IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTENCi1zaGl4MTUxIHNoaWZ0ICAxLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAxLjAwMDAwMDBFLTEwMDANCi1zaGl4MTUyIHNoaWZ0ICAxLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAxRS0xMDA3DQotc2hpeDE1MyBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gMEUtMTAwNw0KLXNoaXgxNTQgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDBFLTEwMDcNCi1zaGl4MTU1IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiA5LjAwMDAwMDBFLTEwMDANCi1zaGl4MTU2IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiA5RS0xMDA3DQotc2hpeDE1NyBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gMEUtMTAwNw0KLXNoaXgxNTggc2hpZnQgIDkuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDBFLTEwMDcNCi1zaGl4MTYwIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgIC0xICAtPiAwRS0xMDA3DQotc2hpeDE2MSBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gMEUtMTAwNw0KLXNoaXgxNjIgc2hpZnQgIDFFLTEwMDcgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMTAwNg0KLXNoaXgxNjMgc2hpZnQgIDFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IDEuMDAwMDAwMDBFLTk5OQ0KLS0tICBuZWdhdGl2ZXMNCi1zaGl4MTcxIHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgIC0xICAtPiAtOS45OTk5OTk5RSs5OTgNCi1zaGl4MTcyIHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiAtOUUrOTkxDQotc2hpeDE3MyBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAgMSAgLT4gLTkuOTk5OTk5OTBFKzk5OQ0KLXNoaXgxNzQgc2hpZnQgLTkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IC05LjAwMDAwMDAwRSs5OTkNCi1zaGl4MTc1IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgIC0xICAtPiAtMEUtOTk5DQotc2hpeDE3NiBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAtOCAgLT4gLTBFLTk5OQ0KLXNoaXgxNzcgc2hpZnQgLTFFLTk5OSAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTk5OA0KLXNoaXgxNzggc2hpZnQgLTFFLTk5OSAgICAgICAgICAgICAgIDggIC0+IC0xLjAwMDAwMDAwRS05OTENCi1zaGl4MTgxIHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAtMS4wMDAwMDAwRS0xMDAwDQotc2hpeDE4MiBzaGlmdCAtMS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gLTFFLTEwMDcNCi1zaGl4MTgzIHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAtMEUtMTAwNw0KLXNoaXgxODQgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IC0wRS0xMDA3DQotc2hpeDE4NSBzaGlmdCAtOS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTkuMDAwMDAwMEUtMTAwMA0KLXNoaXgxODYgc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC05RS0xMDA3DQotc2hpeDE4NyBzaGlmdCAtOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTBFLTEwMDcNCi1zaGl4MTg4IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtMEUtMTAwNw0KLXNoaXgxOTAgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IC0wRS0xMDA3DQotc2hpeDE5MSBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gLTBFLTEwMDcNCi1zaGl4MTkyIHNoaWZ0IC0xRS0xMDA3ICAgICAgICAgICAgICAxICAtPiAtMS4wRS0xMDA2DQotc2hpeDE5MyBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5OQ0KLQ0KLS0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykNCi1zaGl4MjAxIHNoaWZ0ICAgICAgICAgLTAgICAgMCAgLT4gIC0wDQotc2hpeDIwMiBzaGlmdCAgICAgICAgIC0wICAgIDIgIC0+ICAtMA0KLXNoaXgyMDMgc2hpZnQgICAgICAgICAtMSAgICAyICAtPiAgLTEwMA0KLXNoaXgyMDQgc2hpZnQgICAgICAgICAtMSAgICA4ICAtPiAgLTEwMDAwMDAwMA0KLXNoaXgyMDUgc2hpZnQgICAgICAgICAtMSAgICA5ICAtPiAgLTANCi1zaGl4MjA2IHNoaWZ0ICAgICAgICAgLTEgICAtMSAgLT4gIC0wDQotc2hpeDIwNyBzaGlmdCAtMTIzNDU2Nzg5ICAgLTEgIC0+ICAtMTIzNDU2NzgNCi1zaGl4MjA4IHNoaWZ0IC0xMjM0NTY3ODkgICAtOCAgLT4gIC0xDQotc2hpeDIwOSBzaGlmdCAtMTIzNDU2Nzg5ICAgLTkgIC0+ICAtMA0KLXNoaXgyMTAgc2hpZnQgICAgICAgICAtMCAgIC0yICAtPiAgLTANCi1zaGl4MjExIHNoaWZ0ICAgICAgICAgLTAgICAtMCAgLT4gIC0wDQotDQotDQotLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwNCi1zaGl4NzgxIHNoaWZ0IC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkNCi1zaGl4NzgyIHNoaWZ0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1zaGl4NzgzIHNoaWZ0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1zaGl4Nzg0IHNoaWZ0IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1zaGl4Nzg1IHNoaWZ0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1zaGl4Nzg2IHNoaWZ0IC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkNCi1zaGl4Nzg3IHNoaWZ0IC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4Nzg4IHNoaWZ0IC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4Nzg5IHNoaWZ0IC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4NzkwIHNoaWZ0IC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4NzkxIHNoaWZ0ICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4NzkyIHNoaWZ0ICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4NzkzIHNoaWZ0ICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4Nzk0IHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1zaGl4ODAwIHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODAxIHNoaWZ0ICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQ0KLXNoaXg4MDIgc2hpZnQgIEluZiAgLTEgICAgIC0+IEluZmluaXR5DQotc2hpeDgwMyBzaGlmdCAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkNCi1zaGl4ODA0IHNoaWZ0ICBJbmYgICAwICAgICAtPiBJbmZpbml0eQ0KLXNoaXg4MDUgc2hpZnQgIEluZiAgIDEgICAgIC0+IEluZmluaXR5DQotc2hpeDgwNiBzaGlmdCAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkNCi1zaGl4ODA3IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODA4IHNoaWZ0IC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODA5IHNoaWZ0IC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODEwIHNoaWZ0IC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODExIHNoaWZ0IC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODEyIHNoaWZ0ICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODEzIHNoaWZ0ICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODE0IHNoaWZ0ICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODE1IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1zaGl4ODIxIHNoaWZ0ICBOYU4gLUluZiAgICAtPiAgTmFODQotc2hpeDgyMiBzaGlmdCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLXNoaXg4MjMgc2hpZnQgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1zaGl4ODI0IHNoaWZ0ICBOYU4gLTAgICAgICAtPiAgTmFODQotc2hpeDgyNSBzaGlmdCAgTmFOICAwICAgICAgLT4gIE5hTg0KLXNoaXg4MjYgc2hpZnQgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1zaGl4ODI3IHNoaWZ0ICBOYU4gIDEwMDAgICAtPiAgTmFODQotc2hpeDgyOCBzaGlmdCAgTmFOICBJbmYgICAgLT4gIE5hTg0KLXNoaXg4Mjkgc2hpZnQgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1zaGl4ODMwIHNoaWZ0IC1JbmYgIE5hTiAgICAtPiAgTmFODQotc2hpeDgzMSBzaGlmdCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLXNoaXg4MzIgc2hpZnQgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1zaGl4ODMzIHNoaWZ0IC0wICAgIE5hTiAgICAtPiAgTmFODQotc2hpeDgzNCBzaGlmdCAgMCAgICBOYU4gICAgLT4gIE5hTg0KLXNoaXg4MzUgc2hpZnQgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1zaGl4ODM2IHNoaWZ0ICAxMDAwIE5hTiAgICAtPiAgTmFODQotc2hpeDgzNyBzaGlmdCAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLXNoaXg4NDEgc2hpZnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg0MiBzaGlmdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODQzIHNoaWZ0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NDQgc2hpZnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg0NSBzaGlmdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODQ2IHNoaWZ0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NDcgc2hpZnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg0OCBzaGlmdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODQ5IHNoaWZ0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NTAgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg1MSBzaGlmdCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODUyIHNoaWZ0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NTMgc2hpZnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg1NCBzaGlmdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODU1IHNoaWZ0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NTYgc2hpZnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg1NyBzaGlmdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODU4IHNoaWZ0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NTkgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLXNoaXg4NjEgc2hpZnQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotc2hpeDg2MiBzaGlmdCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCi1zaGl4ODYzIHNoaWZ0ICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLXNoaXg4NjQgc2hpZnQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotc2hpeDg2NSBzaGlmdCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCi1zaGl4ODY2IHNoaWZ0IC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLXNoaXg4Njcgc2hpZnQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotc2hpeDg2OCBzaGlmdCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCi1zaGl4ODY5IHNoaWZ0ICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1zaGl4ODcxIHNoaWZ0ICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg3MiBzaGlmdCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NzMgc2hpZnQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODc0IHNoaWZ0ICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg3NSBzaGlmdCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NzYgc2hpZnQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODc3IHNoaWZ0IC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg3OCBzaGlmdCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4Nzkgc2hpZnQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODgwIHNoaWZ0ICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg4MSBzaGlmdCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4ODIgc2hpZnQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLXNoaXg4ODMgc2hpZnQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODg0IHNoaWZ0ICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCi1zaGl4ODg1IHNoaWZ0ICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBzaGlmdC5kZWNUZXN0IC0tIHNoaWZ0IGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjaworc2hpeDAwMSBzaGlmdCAgICAgICAgICAwICAgIDAgIC0+ICAwCitzaGl4MDAyIHNoaWZ0ICAgICAgICAgIDAgICAgMiAgLT4gIDAKK3NoaXgwMDMgc2hpZnQgICAgICAgICAgMSAgICAyICAtPiAgMTAwCitzaGl4MDA0IHNoaWZ0ICAgICAgICAgIDEgICAgOCAgLT4gIDEwMDAwMDAwMAorc2hpeDAwNSBzaGlmdCAgICAgICAgICAxICAgIDkgIC0+ICAwCitzaGl4MDA2IHNoaWZ0ICAgICAgICAgIDEgICAtMSAgLT4gIDAKK3NoaXgwMDcgc2hpZnQgIDEyMzQ1Njc4OSAgIC0xICAtPiAgMTIzNDU2NzgKK3NoaXgwMDggc2hpZnQgIDEyMzQ1Njc4OSAgIC04ICAtPiAgMQorc2hpeDAwOSBzaGlmdCAgMTIzNDU2Nzg5ICAgLTkgIC0+ICAwCitzaGl4MDEwIHNoaWZ0ICAgICAgICAgIDAgICAtMiAgLT4gIDAKKworLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgorc2hpeDAxMSBzaGlmdCAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDEyIHNoaWZ0ICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMTMgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAxNCBzaGlmdCAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDE1IHNoaWZ0ICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMTYgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAxNyBzaGlmdCAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDE4IHNoaWZ0ICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24KK3NoaXgwMjAgc2hpZnQgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAyMSBzaGlmdCAgICAgICAgMSAgICAtMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDIyIHNoaWZ0ICAgICAgICAxICAgICAxMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMjMgc2hpZnQgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4KK3NoaXgwMzAgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtOSAgIC0+IDAKK3NoaXgwMzEgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtOCAgIC0+IDEKK3NoaXgwMzIgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNyAgIC0+IDEyCitzaGl4MDMzIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTYgICAtPiAxMjMKK3NoaXgwMzQgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNSAgIC0+IDEyMzQKK3NoaXgwMzUgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNCAgIC0+IDEyMzQ1CitzaGl4MDM2IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTMgICAtPiAxMjM0NTYKK3NoaXgwMzcgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtMiAgIC0+IDEyMzQ1NjcKK3NoaXgwMzggc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtMSAgIC0+IDEyMzQ1Njc4CitzaGl4MDM5IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkKK3NoaXgwNDAgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OQorc2hpeDA0MSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwCitzaGl4MDQyIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDAKK3NoaXgwNDMgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMyAgIC0+IDQ1Njc4OTAwMAorc2hpeDA0NCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs0ICAgLT4gNTY3ODkwMDAwCitzaGl4MDQ1IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzUgICAtPiA2Nzg5MDAwMDAKK3NoaXgwNDYgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNiAgIC0+IDc4OTAwMDAwMAorc2hpeDA0NyBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs3ICAgLT4gODkwMDAwMDAwCitzaGl4MDQ4IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzggICAtPiA5MDAwMDAwMDAKK3NoaXgwNDkgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArOSAgIC0+IDAKKworLS0gZnJvbSBleGFtcGxlcworc2hpeDA1MSBzaGlmdCAzNCAgICAgICAgOCAgIC0+ICAnNDAwMDAwMDAwJworc2hpeDA1MiBzaGlmdCAxMiAgICAgICAgOSAgIC0+ICAnMCcKK3NoaXgwNTMgc2hpZnQgMTIzNDU2Nzg5IC0yICAtPiAgJzEyMzQ1NjcnCitzaGl4MDU0IHNoaWZ0IDEyMzQ1Njc4OSAwICAgLT4gICcxMjM0NTY3ODknCitzaGl4MDU1IHNoaWZ0IDEyMzQ1Njc4OSArMiAgLT4gICczNDU2Nzg5MDAnCisKKy0tIHplcm9zCitzaGl4MDYwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwCitzaGl4MDYxIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFLTEwCitzaGl4MDYyIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgIDAuMDAwCitzaGl4MDYzIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwCitzaGl4MDY0IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFKzEwCitzaGl4MDY1IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFKzEwCitzaGl4MDY2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwCitzaGl4MDY3IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFLTEwCitzaGl4MDY4IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgLTAuMDAwCitzaGl4MDY5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwCitzaGl4MDcwIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFKzEwCitzaGl4MDcxIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFKzEwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitzaGl4MTQxIHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xICAtPiA5Ljk5OTk5OTlFKzk5OAorc2hpeDE0MiBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAtOCAgLT4gOUUrOTkxCitzaGl4MTQzIHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiA5Ljk5OTk5OTkwRSs5OTkKK3NoaXgxNDQgc2hpZnQgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IDkuMDAwMDAwMDBFKzk5OQorc2hpeDE0NSBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAtMSAgLT4gMEUtOTk5CitzaGl4MTQ2IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgIC04ICAtPiAwRS05OTkKK3NoaXgxNDcgc2hpZnQgIDFFLTk5OSAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtOTk4CitzaGl4MTQ4IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTEKK3NoaXgxNTEgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDEuMDAwMDAwMEUtMTAwMAorc2hpeDE1MiBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gMUUtMTAwNworc2hpeDE1MyBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gMEUtMTAwNworc2hpeDE1NCBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gMEUtMTAwNworc2hpeDE1NSBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gOS4wMDAwMDAwRS0xMDAwCitzaGl4MTU2IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiA5RS0xMDA3CitzaGl4MTU3IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAwRS0xMDA3CitzaGl4MTU4IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAwRS0xMDA3CitzaGl4MTYwIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgIC0xICAtPiAwRS0xMDA3CitzaGl4MTYxIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgIC04ICAtPiAwRS0xMDA3CitzaGl4MTYyIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgICAxICAtPiAxLjBFLTEwMDYKK3NoaXgxNjMgc2hpZnQgIDFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IDEuMDAwMDAwMDBFLTk5OQorLS0gIG5lZ2F0aXZlcworc2hpeDE3MSBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gLTkuOTk5OTk5OUUrOTk4CitzaGl4MTcyIHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiAtOUUrOTkxCitzaGl4MTczIHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiAtOS45OTk5OTk5MEUrOTk5CitzaGl4MTc0IHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgICA4ICAtPiAtOS4wMDAwMDAwMEUrOTk5CitzaGl4MTc1IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgIC0xICAtPiAtMEUtOTk5CitzaGl4MTc2IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgIC04ICAtPiAtMEUtOTk5CitzaGl4MTc3IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgICAxICAtPiAtMS4wRS05OTgKK3NoaXgxNzggc2hpZnQgLTFFLTk5OSAgICAgICAgICAgICAgIDggIC0+IC0xLjAwMDAwMDAwRS05OTEKK3NoaXgxODEgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC0xLjAwMDAwMDBFLTEwMDAKK3NoaXgxODIgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC0xRS0xMDA3CitzaGl4MTgzIHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAtMEUtMTAwNworc2hpeDE4NCBzaGlmdCAtMS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTBFLTEwMDcKK3NoaXgxODUgc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC05LjAwMDAwMDBFLTEwMDAKK3NoaXgxODYgc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC05RS0xMDA3CitzaGl4MTg3IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAtMEUtMTAwNworc2hpeDE4OCBzaGlmdCAtOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTBFLTEwMDcKK3NoaXgxOTAgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IC0wRS0xMDA3CitzaGl4MTkxIHNoaWZ0IC0xRS0xMDA3ICAgICAgICAgICAgIC04ICAtPiAtMEUtMTAwNworc2hpeDE5MiBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMTAwNgorc2hpeDE5MyBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5OQorCistLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCitzaGl4MjAxIHNoaWZ0ICAgICAgICAgLTAgICAgMCAgLT4gIC0wCitzaGl4MjAyIHNoaWZ0ICAgICAgICAgLTAgICAgMiAgLT4gIC0wCitzaGl4MjAzIHNoaWZ0ICAgICAgICAgLTEgICAgMiAgLT4gIC0xMDAKK3NoaXgyMDQgc2hpZnQgICAgICAgICAtMSAgICA4ICAtPiAgLTEwMDAwMDAwMAorc2hpeDIwNSBzaGlmdCAgICAgICAgIC0xICAgIDkgIC0+ICAtMAorc2hpeDIwNiBzaGlmdCAgICAgICAgIC0xICAgLTEgIC0+ICAtMAorc2hpeDIwNyBzaGlmdCAtMTIzNDU2Nzg5ICAgLTEgIC0+ICAtMTIzNDU2NzgKK3NoaXgyMDggc2hpZnQgLTEyMzQ1Njc4OSAgIC04ICAtPiAgLTEKK3NoaXgyMDkgc2hpZnQgLTEyMzQ1Njc4OSAgIC05ICAtPiAgLTAKK3NoaXgyMTAgc2hpZnQgICAgICAgICAtMCAgIC0yICAtPiAgLTAKK3NoaXgyMTEgc2hpZnQgICAgICAgICAtMCAgIC0wICAtPiAgLTAKKworCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAorc2hpeDc4MSBzaGlmdCAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5CitzaGl4NzgyIHNoaWZ0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK3NoaXg3ODMgc2hpZnQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorc2hpeDc4NCBzaGlmdCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitzaGl4Nzg1IHNoaWZ0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK3NoaXg3ODYgc2hpZnQgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQorc2hpeDc4NyBzaGlmdCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4Nzg4IHNoaWZ0IC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg3ODkgc2hpZnQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDc5MCBzaGlmdCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4NzkxIHNoaWZ0ICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg3OTIgc2hpZnQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDc5MyBzaGlmdCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4Nzk0IHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworc2hpeDgwMCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODAxIHNoaWZ0ICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQorc2hpeDgwMiBzaGlmdCAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKK3NoaXg4MDMgc2hpZnQgIEluZiAgLTAgICAgIC0+IEluZmluaXR5CitzaGl4ODA0IHNoaWZ0ICBJbmYgICAwICAgICAtPiBJbmZpbml0eQorc2hpeDgwNSBzaGlmdCAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKK3NoaXg4MDYgc2hpZnQgIEluZiAgIDggICAgIC0+IEluZmluaXR5CitzaGl4ODA3IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MDggc2hpZnQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgwOSBzaGlmdCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODEwIHNoaWZ0IC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MTEgc2hpZnQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgxMiBzaGlmdCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODEzIHNoaWZ0ICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MTQgc2hpZnQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgxNSBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3NoaXg4MjEgc2hpZnQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK3NoaXg4MjIgc2hpZnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK3NoaXg4MjMgc2hpZnQgIE5hTiAtMSAgICAgIC0+ICBOYU4KK3NoaXg4MjQgc2hpZnQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK3NoaXg4MjUgc2hpZnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK3NoaXg4MjYgc2hpZnQgIE5hTiAgMSAgICAgIC0+ICBOYU4KK3NoaXg4Mjcgc2hpZnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK3NoaXg4Mjggc2hpZnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK3NoaXg4Mjkgc2hpZnQgIE5hTiAgTmFOICAgIC0+ICBOYU4KK3NoaXg4MzAgc2hpZnQgLUluZiAgTmFOICAgIC0+ICBOYU4KK3NoaXg4MzEgc2hpZnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK3NoaXg4MzIgc2hpZnQgLTEgICAgTmFOICAgIC0+ICBOYU4KK3NoaXg4MzMgc2hpZnQgLTAgICAgTmFOICAgIC0+ICBOYU4KK3NoaXg4MzQgc2hpZnQgIDAgICAgTmFOICAgIC0+ICBOYU4KK3NoaXg4MzUgc2hpZnQgIDEgICAgTmFOICAgIC0+ICBOYU4KK3NoaXg4MzYgc2hpZnQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK3NoaXg4Mzcgc2hpZnQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworc2hpeDg0MSBzaGlmdCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NDIgc2hpZnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQzIHNoaWZ0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0NCBzaGlmdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NDUgc2hpZnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQ2IHNoaWZ0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0NyBzaGlmdCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NDggc2hpZnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQ5IHNoaWZ0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1MCBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTEgc2hpZnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODUyIHNoaWZ0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1MyBzaGlmdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTQgc2hpZnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODU1IHNoaWZ0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1NiBzaGlmdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTcgc2hpZnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODU4IHNoaWZ0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1OSBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworc2hpeDg2MSBzaGlmdCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK3NoaXg4NjIgc2hpZnQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitzaGl4ODYzIHNoaWZ0ICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworc2hpeDg2NCBzaGlmdCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK3NoaXg4NjUgc2hpZnQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitzaGl4ODY2IHNoaWZ0IC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworc2hpeDg2NyBzaGlmdCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK3NoaXg4Njggc2hpZnQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitzaGl4ODY5IHNoaWZ0ICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK3NoaXg4NzEgc2hpZnQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NzIgc2hpZnQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NzMgc2hpZnQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NzQgc2hpZnQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NzUgc2hpZnQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NzYgc2hpZnQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4Nzcgc2hpZnQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4Nzggc2hpZnQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4Nzkgc2hpZnQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4ODAgc2hpZnQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4ODEgc2hpZnQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4ODIgc2hpZnQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorc2hpeDg4MyBzaGlmdCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg4NCBzaGlmdCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitzaGl4ODg1IHNoaWZ0ICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdG9pbnRlZ3JhbHguZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFseC5kZWNUZXN0CmluZGV4IDBjZTBkMDkuLmUyNTBlM2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFseC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFseC5kZWNUZXN0CkBAIC0xLDI1NSArMSwyNTUgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIHRvaW50ZWdyYWx4LmRlY1Rlc3QgLS0gcm91bmQgZGVjaW1hbCB0byBpbnRlZ3JhbCB2YWx1ZSwgZXhhY3QgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwNCi0tLSB2YWx1ZScgb3BlcmF0aW9uIChmcm9tIElFRUUgODU0LCBsYXRlciBtb2RpZmllZCBpbiA3NTRyKS4NCi0tLSBBbGwgbm9uLXplcm8gcmVzdWx0cyBhcmUgZGVmaW5lZCBhcyBiZWluZyB0aG9zZSBmcm9tIGVpdGhlciBjb3B5IG9yDQotLS0gcXVhbnRpemUsIHNvIHRob3NlIGFyZSBhc3N1bWVkIHRvIGhhdmUgYmVlbiB0ZXN0ZWQuDQotDQotLS0gVGhpcyB0ZXN0cyB0b0ludGVncmFFeGFjdCwgd2hpY2ggbWF5IHNldCBJbmV4YWN0DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotDQotaW50eHgwMDEgdG9pbnRlZ3JhbHggICAgICAwICAgICAtPiAgMA0KLWludHh4MDAyIHRvaW50ZWdyYWx4ICAgICAgMC4wICAgLT4gIDANCi1pbnR4eDAwMyB0b2ludGVncmFseCAgICAgIDAuMSAgIC0+ICAwIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDA0IHRvaW50ZWdyYWx4ICAgICAgMC4yICAgLT4gIDAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMDUgdG9pbnRlZ3JhbHggICAgICAwLjMgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAwNiB0b2ludGVncmFseCAgICAgIDAuNCAgIC0+ICAwIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDA3IHRvaW50ZWdyYWx4ICAgICAgMC41ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMDggdG9pbnRlZ3JhbHggICAgICAwLjYgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAwOSB0b2ludGVncmFseCAgICAgIDAuNyAgIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDEwIHRvaW50ZWdyYWx4ICAgICAgMC44ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMTEgdG9pbnRlZ3JhbHggICAgICAwLjkgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAxMiB0b2ludGVncmFseCAgICAgIDEgICAgIC0+ICAxDQotaW50eHgwMTMgdG9pbnRlZ3JhbHggICAgICAxLjAgICAtPiAgMSBSb3VuZGVkDQotaW50eHgwMTQgdG9pbnRlZ3JhbHggICAgICAxLjEgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAxNSB0b2ludGVncmFseCAgICAgIDEuMiAgIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDE2IHRvaW50ZWdyYWx4ICAgICAgMS4zICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMTcgdG9pbnRlZ3JhbHggICAgICAxLjQgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAxOCB0b2ludGVncmFseCAgICAgIDEuNSAgIC0+ICAyIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDE5IHRvaW50ZWdyYWx4ICAgICAgMS42ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMjAgdG9pbnRlZ3JhbHggICAgICAxLjcgICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAyMSB0b2ludGVncmFseCAgICAgIDEuOCAgIC0+ICAyIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDIyIHRvaW50ZWdyYWx4ICAgICAgMS45ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkDQotLS0gbmVnYXRpdmVzDQotaW50eHgwMzEgdG9pbnRlZ3JhbHggICAgIC0wICAgICAtPiAtMA0KLWludHh4MDMyIHRvaW50ZWdyYWx4ICAgICAtMC4wICAgLT4gLTANCi1pbnR4eDAzMyB0b2ludGVncmFseCAgICAgLTAuMSAgIC0+IC0wIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDM0IHRvaW50ZWdyYWx4ICAgICAtMC4yICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMzUgdG9pbnRlZ3JhbHggICAgIC0wLjMgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAzNiB0b2ludGVncmFseCAgICAgLTAuNCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDM3IHRvaW50ZWdyYWx4ICAgICAtMC41ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMzggdG9pbnRlZ3JhbHggICAgIC0wLjYgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAzOSB0b2ludGVncmFseCAgICAgLTAuNyAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDQwIHRvaW50ZWdyYWx4ICAgICAtMC44ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwNDEgdG9pbnRlZ3JhbHggICAgIC0wLjkgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA0MiB0b2ludGVncmFseCAgICAgLTEgICAgIC0+IC0xDQotaW50eHgwNDMgdG9pbnRlZ3JhbHggICAgIC0xLjAgICAtPiAtMSBSb3VuZGVkDQotaW50eHgwNDQgdG9pbnRlZ3JhbHggICAgIC0xLjEgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA0NSB0b2ludGVncmFseCAgICAgLTEuMiAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDQ2IHRvaW50ZWdyYWx4ICAgICAtMS4zICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwNDcgdG9pbnRlZ3JhbHggICAgIC0xLjQgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA0OCB0b2ludGVncmFseCAgICAgLTEuNSAgIC0+IC0yIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDQ5IHRvaW50ZWdyYWx4ICAgICAtMS42ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwNTAgdG9pbnRlZ3JhbHggICAgIC0xLjcgICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA1MSB0b2ludGVncmFseCAgICAgLTEuOCAgIC0+IC0yIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDUyIHRvaW50ZWdyYWx4ICAgICAtMS45ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkDQotLS0gbmV4dCB0d28gd291bGQgYmUgTmFOIHVzaW5nIHF1YW50aXplKHgsIDApDQotaW50eHgwNTMgdG9pbnRlZ3JhbHggICAgMTBFKzMwICAtPiAxLjBFKzMxDQotaW50eHgwNTQgdG9pbnRlZ3JhbHggICAtMTBFKzMwICAtPiAtMS4wRSszMQ0KLQ0KLS0tIG51bWJlcnMgYXJvdW5kIHByZWNpc2lvbg0KLXByZWNpc2lvbjogOQ0KLWludHh4MDYwIHRvaW50ZWdyYWx4ICc1NjI2N0UtMTAnICAgLT4gJzAnICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwNjEgdG9pbnRlZ3JhbHggJzU2MjY3RS01JyAgICAtPiAnMScgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA2MiB0b2ludGVncmFseCAnNTYyNjdFLTInICAgIC0+ICc1NjMnICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDYzIHRvaW50ZWdyYWx4ICc1NjI2N0UtMScgICAgLT4gJzU2MjcnICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwNjUgdG9pbnRlZ3JhbHggJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnDQotaW50eHgwNjYgdG9pbnRlZ3JhbHggJzU2MjY3RSswJyAgICAtPiAnNTYyNjcnDQotaW50eHgwNjcgdG9pbnRlZ3JhbHggJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1Jw0KLWludHh4MDY4IHRvaW50ZWdyYWx4ICc1NjI2N0UrMicgICAgLT4gJzUuNjI2N0UrNicNCi1pbnR4eDA2OSB0b2ludGVncmFseCAnNTYyNjdFKzMnICAgIC0+ICc1LjYyNjdFKzcnDQotaW50eHgwNzAgdG9pbnRlZ3JhbHggJzU2MjY3RSs0JyAgICAtPiAnNS42MjY3RSs4Jw0KLWludHh4MDcxIHRvaW50ZWdyYWx4ICc1NjI2N0UrNScgICAgLT4gJzUuNjI2N0UrOScNCi1pbnR4eDA3MiB0b2ludGVncmFseCAnNTYyNjdFKzYnICAgIC0+ICc1LjYyNjdFKzEwJw0KLWludHh4MDczIHRvaW50ZWdyYWx4ICcxLjIzRSs5NicgICAgLT4gJzEuMjNFKzk2Jw0KLWludHh4MDc0IHRvaW50ZWdyYWx4ICcxLjIzRSszODQnICAgLT4gJzEuMjNFKzM4NCcNCi1pbnR4eDA3NSB0b2ludGVncmFseCAnMS4yM0UrOTk5JyAgIC0+ICcxLjIzRSs5OTknDQotDQotaW50eHgwODAgdG9pbnRlZ3JhbHggJy01NjI2N0UtMTAnICAtPiAnLTAnICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA4MSB0b2ludGVncmFseCAnLTU2MjY3RS01JyAgIC0+ICctMScgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDgyIHRvaW50ZWdyYWx4ICctNTYyNjdFLTInICAgLT4gJy01NjMnICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwODMgdG9pbnRlZ3JhbHggJy01NjI2N0UtMScgICAtPiAnLTU2MjcnICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA4NSB0b2ludGVncmFseCAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnDQotaW50eHgwODYgdG9pbnRlZ3JhbHggJy01NjI2N0UrMCcgICAtPiAnLTU2MjY3Jw0KLWludHh4MDg3IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEnICAgLT4gJy01LjYyNjdFKzUnDQotaW50eHgwODggdG9pbnRlZ3JhbHggJy01NjI2N0UrMicgICAtPiAnLTUuNjI2N0UrNicNCi1pbnR4eDA4OSB0b2ludGVncmFseCAnLTU2MjY3RSszJyAgIC0+ICctNS42MjY3RSs3Jw0KLWludHh4MDkwIHRvaW50ZWdyYWx4ICctNTYyNjdFKzQnICAgLT4gJy01LjYyNjdFKzgnDQotaW50eHgwOTEgdG9pbnRlZ3JhbHggJy01NjI2N0UrNScgICAtPiAnLTUuNjI2N0UrOScNCi1pbnR4eDA5MiB0b2ludGVncmFseCAnLTU2MjY3RSs2JyAgIC0+ICctNS42MjY3RSsxMCcNCi1pbnR4eDA5MyB0b2ludGVncmFseCAnLTEuMjNFKzk2JyAgIC0+ICctMS4yM0UrOTYnDQotaW50eHgwOTQgdG9pbnRlZ3JhbHggJy0xLjIzRSszODQnICAtPiAnLTEuMjNFKzM4NCcNCi1pbnR4eDA5NSB0b2ludGVncmFseCAnLTEuMjNFKzk5OScgIC0+ICctMS4yM0UrOTk5Jw0KLQ0KLS0tIHN1Ym5vcm1hbCBpbnB1dHMNCi1pbnR4eDEwMCB0b2ludGVncmFseCAgICAgICAgMUUtOTk5IC0+IDAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MTAxIHRvaW50ZWdyYWx4ICAgICAgMC4xRS05OTkgLT4gMCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgxMDIgdG9pbnRlZ3JhbHggICAgIDAuMDFFLTk5OSAtPiAwICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDEwMyB0b2ludGVncmFseCAgICAgICAgMEUtOTk5IC0+IDANCi0NCi0tLSBzcGVjaWFscyBhbmQgemVyb3MNCi1pbnR4eDEyMCB0b2ludGVncmFseCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkNCi1pbnR4eDEyMSB0b2ludGVncmFseCAnLUluZicgICAgICAtPiAtSW5maW5pdHkNCi1pbnR4eDEyMiB0b2ludGVncmFseCAgIE5hTiAgICAgICAtPiAgTmFODQotaW50eHgxMjMgdG9pbnRlZ3JhbHggIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1pbnR4eDEyNCB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMA0KLWludHh4MTI1IHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wDQotaW50eHgxMjYgdG9pbnRlZ3JhbHggICAgIDAuMDAwICAgLT4gIDANCi1pbnR4eDEyNyB0b2ludGVncmFseCAgICAgMC4wMCAgICAtPiAgMA0KLWludHh4MTI4IHRvaW50ZWdyYWx4ICAgICAwLjAgICAgIC0+ICAwDQotaW50eHgxMjkgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDANCi1pbnR4eDEzMCB0b2ludGVncmFseCAgICAgMEUtMyAgICAtPiAgMA0KLWludHh4MTMxIHRvaW50ZWdyYWx4ICAgICAwRS0yICAgIC0+ICAwDQotaW50eHgxMzIgdG9pbnRlZ3JhbHggICAgIDBFLTEgICAgLT4gIDANCi1pbnR4eDEzMyB0b2ludGVncmFseCAgICAgMEUtMCAgICAtPiAgMA0KLWludHh4MTM0IHRvaW50ZWdyYWx4ICAgICAwRSsxICAgIC0+ICAwRSsxDQotaW50eHgxMzUgdG9pbnRlZ3JhbHggICAgIDBFKzIgICAgLT4gIDBFKzINCi1pbnR4eDEzNiB0b2ludGVncmFseCAgICAgMEUrMyAgICAtPiAgMEUrMw0KLWludHh4MTM3IHRvaW50ZWdyYWx4ICAgICAwRSs0ICAgIC0+ICAwRSs0DQotaW50eHgxMzggdG9pbnRlZ3JhbHggICAgIDBFKzUgICAgLT4gIDBFKzUNCi1pbnR4eDEzOSB0b2ludGVncmFseCAgICAtMC4wMDAgICAtPiAtMA0KLWludHh4MTQwIHRvaW50ZWdyYWx4ICAgIC0wLjAwICAgIC0+IC0wDQotaW50eHgxNDEgdG9pbnRlZ3JhbHggICAgLTAuMCAgICAgLT4gLTANCi1pbnR4eDE0MiB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMA0KLWludHh4MTQzIHRvaW50ZWdyYWx4ICAgIC0wRS0zICAgIC0+IC0wDQotaW50eHgxNDQgdG9pbnRlZ3JhbHggICAgLTBFLTIgICAgLT4gLTANCi1pbnR4eDE0NSB0b2ludGVncmFseCAgICAtMEUtMSAgICAtPiAtMA0KLWludHh4MTQ2IHRvaW50ZWdyYWx4ICAgIC0wRS0wICAgIC0+IC0wDQotaW50eHgxNDcgdG9pbnRlZ3JhbHggICAgLTBFKzEgICAgLT4gLTBFKzENCi1pbnR4eDE0OCB0b2ludGVncmFseCAgICAtMEUrMiAgICAtPiAtMEUrMg0KLWludHh4MTQ5IHRvaW50ZWdyYWx4ICAgIC0wRSszICAgIC0+IC0wRSszDQotaW50eHgxNTAgdG9pbnRlZ3JhbHggICAgLTBFKzQgICAgLT4gLTBFKzQNCi1pbnR4eDE1MSB0b2ludGVncmFseCAgICAtMEUrNSAgICAtPiAtMEUrNQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1pbnR4eDE1MiB0b2ludGVncmFseCAgIE5hTjgwOCAgICAtPiAgTmFOODA4DQotaW50eHgxNTMgdG9pbnRlZ3JhbHggIHNOYU4wODAgICAgLT4gIE5hTjgwICBJbnZhbGlkX29wZXJhdGlvbg0KLWludHh4MTU0IHRvaW50ZWdyYWx4ICAtTmFOODA4ICAgIC0+IC1OYU44MDgNCi1pbnR4eDE1NSB0b2ludGVncmFseCAtc05hTjA4MCAgICAtPiAtTmFOODAgIEludmFsaWRfb3BlcmF0aW9uDQotaW50eHgxNTYgdG9pbnRlZ3JhbHggIC1OYU4gICAgICAgLT4gLU5hTg0KLWludHh4MTU3IHRvaW50ZWdyYWx4IC1zTmFOICAgICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBleGFtcGxlcw0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotcHJlY2lzaW9uOiAgIDkNCi1pbnR4eDIwMCB0b2ludGVncmFseCAgICAgMi4xICAgIC0+IDIgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjAxIHRvaW50ZWdyYWx4ICAgMTAwICAgICAgLT4gMTAwDQotaW50eHgyMDIgdG9pbnRlZ3JhbHggICAxMDAuMCAgICAtPiAxMDAgICAgICAgICAgICAgICAgICBSb3VuZGVkDQotaW50eHgyMDMgdG9pbnRlZ3JhbHggICAxMDEuNSAgICAtPiAxMDIgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIwNCB0b2ludGVncmFseCAgLTEwMS41ICAgIC0+IC0xMDIgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjA1IHRvaW50ZWdyYWx4ICAgMTBFKzUgICAgLT4gMS4wRSs2DQotaW50eHgyMDYgdG9pbnRlZ3JhbHggIDcuODlFKzc3ICAtPiA3Ljg5RSs3Nw0KLWludHh4MjA3IHRvaW50ZWdyYWx4ICAgLUluZiAgICAgLT4gLUluZmluaXR5DQotDQotDQotLS0gYWxsIHJvdW5kaW5nIG1vZGVzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWludHh4MjEwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMTEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIxMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjEzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMTQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIxNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotDQotaW50eHgyMjAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIyMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjIyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMjMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIyNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjI1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLQ0KLWludHh4MjMwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU1ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMzEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIzMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjMzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU1ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMzQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIzNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICB1cA0KLQ0KLWludHh4MjQwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNDEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI0MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjQzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNDQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI0NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01OCAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBkb3duDQotDQotaW50eHgyNTAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI1MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjUyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNTMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTUgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI1NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjU1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGNlaWxpbmcNCi0NCi1pbnR4eDI2MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjYxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNjIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI2MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NSAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjY0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNjUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgZmxvb3INCi0NCi1pbnR4eDI3MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjcxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNzIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI3MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4Mjc0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNzUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucw0KLXByZWNpc2lvbjogMTYNCi1pbnR4eDMwMCB0b2ludGVncmFseCAtMjE0NzQ4MzY0NiAgLT4gLTIxNDc0ODM2NDYNCi1pbnR4eDMwMSB0b2ludGVncmFseCAtMjE0NzQ4MzY0NyAgLT4gLTIxNDc0ODM2NDcNCi1pbnR4eDMwMiB0b2ludGVncmFseCAtMjE0NzQ4MzY0OCAgLT4gLTIxNDc0ODM2NDgNCi1pbnR4eDMwMyB0b2ludGVncmFseCAtMjE0NzQ4MzY0OSAgLT4gLTIxNDc0ODM2NDkNCi1pbnR4eDMwNCB0b2ludGVncmFseCAgMjE0NzQ4MzY0NiAgLT4gIDIxNDc0ODM2NDYNCi1pbnR4eDMwNSB0b2ludGVncmFseCAgMjE0NzQ4MzY0NyAgLT4gIDIxNDc0ODM2NDcNCi1pbnR4eDMwNiB0b2ludGVncmFseCAgMjE0NzQ4MzY0OCAgLT4gIDIxNDc0ODM2NDgNCi1pbnR4eDMwNyB0b2ludGVncmFseCAgMjE0NzQ4MzY0OSAgLT4gIDIxNDc0ODM2NDkNCi1pbnR4eDMwOCB0b2ludGVncmFseCAgNDI5NDk2NzI5NCAgLT4gIDQyOTQ5NjcyOTQNCi1pbnR4eDMwOSB0b2ludGVncmFseCAgNDI5NDk2NzI5NSAgLT4gIDQyOTQ5NjcyOTUNCi1pbnR4eDMxMCB0b2ludGVncmFseCAgNDI5NDk2NzI5NiAgLT4gIDQyOTQ5NjcyOTYNCi1pbnR4eDMxMSB0b2ludGVncmFseCAgNDI5NDk2NzI5NyAgLT4gIDQyOTQ5NjcyOTcNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHRvaW50ZWdyYWx4LmRlY1Rlc3QgLS0gcm91bmQgZGVjaW1hbCB0byBpbnRlZ3JhbCB2YWx1ZSwgZXhhY3QgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgdGVzdHMgdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24gJ3JvdW5kLXRvLWludGVncmFsCistLSB2YWx1ZScgb3BlcmF0aW9uIChmcm9tIElFRUUgODU0LCBsYXRlciBtb2RpZmllZCBpbiA3NTRyKS4KKy0tIEFsbCBub24temVybyByZXN1bHRzIGFyZSBkZWZpbmVkIGFzIGJlaW5nIHRob3NlIGZyb20gZWl0aGVyIGNvcHkgb3IKKy0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkLgorCistLSBUaGlzIHRlc3RzIHRvSW50ZWdyYUV4YWN0LCB3aGljaCBtYXkgc2V0IEluZXhhY3QKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworaW50eHgwMDEgdG9pbnRlZ3JhbHggICAgICAwICAgICAtPiAgMAoraW50eHgwMDIgdG9pbnRlZ3JhbHggICAgICAwLjAgICAtPiAgMAoraW50eHgwMDMgdG9pbnRlZ3JhbHggICAgICAwLjEgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDA0IHRvaW50ZWdyYWx4ICAgICAgMC4yICAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAwNSB0b2ludGVncmFseCAgICAgIDAuMyAgIC0+ICAwIEluZXhhY3QgUm91bmRlZAoraW50eHgwMDYgdG9pbnRlZ3JhbHggICAgICAwLjQgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDA3IHRvaW50ZWdyYWx4ICAgICAgMC41ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAwOCB0b2ludGVncmFseCAgICAgIDAuNiAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMDkgdG9pbnRlZ3JhbHggICAgICAwLjcgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDEwIHRvaW50ZWdyYWx4ICAgICAgMC44ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAxMSB0b2ludGVncmFseCAgICAgIDAuOSAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTIgdG9pbnRlZ3JhbHggICAgICAxICAgICAtPiAgMQoraW50eHgwMTMgdG9pbnRlZ3JhbHggICAgICAxLjAgICAtPiAgMSBSb3VuZGVkCitpbnR4eDAxNCB0b2ludGVncmFseCAgICAgIDEuMSAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTUgdG9pbnRlZ3JhbHggICAgICAxLjIgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDE2IHRvaW50ZWdyYWx4ICAgICAgMS4zICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAxNyB0b2ludGVncmFseCAgICAgIDEuNCAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTggdG9pbnRlZ3JhbHggICAgICAxLjUgICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDE5IHRvaW50ZWdyYWx4ICAgICAgMS42ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAyMCB0b2ludGVncmFseCAgICAgIDEuNyAgIC0+ICAyIEluZXhhY3QgUm91bmRlZAoraW50eHgwMjEgdG9pbnRlZ3JhbHggICAgICAxLjggICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDIyIHRvaW50ZWdyYWx4ICAgICAgMS45ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMKK2ludHh4MDMxIHRvaW50ZWdyYWx4ICAgICAtMCAgICAgLT4gLTAKK2ludHh4MDMyIHRvaW50ZWdyYWx4ICAgICAtMC4wICAgLT4gLTAKK2ludHh4MDMzIHRvaW50ZWdyYWx4ICAgICAtMC4xICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAzNCB0b2ludGVncmFseCAgICAgLTAuMiAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAoraW50eHgwMzUgdG9pbnRlZ3JhbHggICAgIC0wLjMgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDM2IHRvaW50ZWdyYWx4ICAgICAtMC40ICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAzNyB0b2ludGVncmFseCAgICAgLTAuNSAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwMzggdG9pbnRlZ3JhbHggICAgIC0wLjYgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDM5IHRvaW50ZWdyYWx4ICAgICAtMC43ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0MCB0b2ludGVncmFseCAgICAgLTAuOCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwNDEgdG9pbnRlZ3JhbHggICAgIC0wLjkgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQyIHRvaW50ZWdyYWx4ICAgICAtMSAgICAgLT4gLTEKK2ludHh4MDQzIHRvaW50ZWdyYWx4ICAgICAtMS4wICAgLT4gLTEgUm91bmRlZAoraW50eHgwNDQgdG9pbnRlZ3JhbHggICAgIC0xLjEgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQ1IHRvaW50ZWdyYWx4ICAgICAtMS4yICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0NiB0b2ludGVncmFseCAgICAgLTEuMyAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwNDcgdG9pbnRlZ3JhbHggICAgIC0xLjQgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQ4IHRvaW50ZWdyYWx4ICAgICAtMS41ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0OSB0b2ludGVncmFseCAgICAgLTEuNiAgIC0+IC0yIEluZXhhY3QgUm91bmRlZAoraW50eHgwNTAgdG9pbnRlZ3JhbHggICAgIC0xLjcgICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDUxIHRvaW50ZWdyYWx4ICAgICAtMS44ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA1MiB0b2ludGVncmFseCAgICAgLTEuOSAgIC0+IC0yIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCB0d28gd291bGQgYmUgTmFOIHVzaW5nIHF1YW50aXplKHgsIDApCitpbnR4eDA1MyB0b2ludGVncmFseCAgICAxMEUrMzAgIC0+IDEuMEUrMzEKK2ludHh4MDU0IHRvaW50ZWdyYWx4ICAgLTEwRSszMCAgLT4gLTEuMEUrMzEKKworLS0gbnVtYmVycyBhcm91bmQgcHJlY2lzaW9uCitwcmVjaXNpb246IDkKK2ludHh4MDYwIHRvaW50ZWdyYWx4ICc1NjI2N0UtMTAnICAgLT4gJzAnICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA2MSB0b2ludGVncmFseCAnNTYyNjdFLTUnICAgIC0+ICcxJyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDYzIHRvaW50ZWdyYWx4ICc1NjI2N0UtMScgICAgLT4gJzU2MjcnICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA2NSB0b2ludGVncmFseCAnNTYyNjdFLTAnICAgIC0+ICc1NjI2NycKK2ludHh4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3JworaW50eHgwNjcgdG9pbnRlZ3JhbHggJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1JworaW50eHgwNjggdG9pbnRlZ3JhbHggJzU2MjY3RSsyJyAgICAtPiAnNS42MjY3RSs2JworaW50eHgwNjkgdG9pbnRlZ3JhbHggJzU2MjY3RSszJyAgICAtPiAnNS42MjY3RSs3JworaW50eHgwNzAgdG9pbnRlZ3JhbHggJzU2MjY3RSs0JyAgICAtPiAnNS42MjY3RSs4JworaW50eHgwNzEgdG9pbnRlZ3JhbHggJzU2MjY3RSs1JyAgICAtPiAnNS42MjY3RSs5JworaW50eHgwNzIgdG9pbnRlZ3JhbHggJzU2MjY3RSs2JyAgICAtPiAnNS42MjY3RSsxMCcKK2ludHh4MDczIHRvaW50ZWdyYWx4ICcxLjIzRSs5NicgICAgLT4gJzEuMjNFKzk2JworaW50eHgwNzQgdG9pbnRlZ3JhbHggJzEuMjNFKzM4NCcgICAtPiAnMS4yM0UrMzg0JworaW50eHgwNzUgdG9pbnRlZ3JhbHggJzEuMjNFKzk5OScgICAtPiAnMS4yM0UrOTk5JworCitpbnR4eDA4MCB0b2ludGVncmFseCAnLTU2MjY3RS0xMCcgIC0+ICctMCcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwODEgdG9pbnRlZ3JhbHggJy01NjI2N0UtNScgICAtPiAnLTEnICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDgyIHRvaW50ZWdyYWx4ICctNTYyNjdFLTInICAgLT4gJy01NjMnICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA4MyB0b2ludGVncmFseCAnLTU2MjY3RS0xJyAgIC0+ICctNTYyNycgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwODUgdG9pbnRlZ3JhbHggJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3JworaW50eHgwODYgdG9pbnRlZ3JhbHggJy01NjI2N0UrMCcgICAtPiAnLTU2MjY3JworaW50eHgwODcgdG9pbnRlZ3JhbHggJy01NjI2N0UrMScgICAtPiAnLTUuNjI2N0UrNScKK2ludHh4MDg4IHRvaW50ZWdyYWx4ICctNTYyNjdFKzInICAgLT4gJy01LjYyNjdFKzYnCitpbnR4eDA4OSB0b2ludGVncmFseCAnLTU2MjY3RSszJyAgIC0+ICctNS42MjY3RSs3JworaW50eHgwOTAgdG9pbnRlZ3JhbHggJy01NjI2N0UrNCcgICAtPiAnLTUuNjI2N0UrOCcKK2ludHh4MDkxIHRvaW50ZWdyYWx4ICctNTYyNjdFKzUnICAgLT4gJy01LjYyNjdFKzknCitpbnR4eDA5MiB0b2ludGVncmFseCAnLTU2MjY3RSs2JyAgIC0+ICctNS42MjY3RSsxMCcKK2ludHh4MDkzIHRvaW50ZWdyYWx4ICctMS4yM0UrOTYnICAgLT4gJy0xLjIzRSs5NicKK2ludHh4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrMzg0JyAgLT4gJy0xLjIzRSszODQnCitpbnR4eDA5NSB0b2ludGVncmFseCAnLTEuMjNFKzk5OScgIC0+ICctMS4yM0UrOTk5JworCistLSBzdWJub3JtYWwgaW5wdXRzCitpbnR4eDEwMCB0b2ludGVncmFseCAgICAgICAgMUUtOTk5IC0+IDAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgxMDEgdG9pbnRlZ3JhbHggICAgICAwLjFFLTk5OSAtPiAwICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MTAyIHRvaW50ZWdyYWx4ICAgICAwLjAxRS05OTkgLT4gMCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDEwMyB0b2ludGVncmFseCAgICAgICAgMEUtOTk5IC0+IDAKKworLS0gc3BlY2lhbHMgYW5kIHplcm9zCitpbnR4eDEyMCB0b2ludGVncmFseCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkKK2ludHh4MTIxIHRvaW50ZWdyYWx4ICctSW5mJyAgICAgIC0+IC1JbmZpbml0eQoraW50eHgxMjIgdG9pbnRlZ3JhbHggICBOYU4gICAgICAgLT4gIE5hTgoraW50eHgxMjMgdG9pbnRlZ3JhbHggIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ludHh4MTI0IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwCitpbnR4eDEyNSB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAoraW50eHgxMjYgdG9pbnRlZ3JhbHggICAgIDAuMDAwICAgLT4gIDAKK2ludHh4MTI3IHRvaW50ZWdyYWx4ICAgICAwLjAwICAgIC0+ICAwCitpbnR4eDEyOCB0b2ludGVncmFseCAgICAgMC4wICAgICAtPiAgMAoraW50eHgxMjkgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKK2ludHh4MTMwIHRvaW50ZWdyYWx4ICAgICAwRS0zICAgIC0+ICAwCitpbnR4eDEzMSB0b2ludGVncmFseCAgICAgMEUtMiAgICAtPiAgMAoraW50eHgxMzIgdG9pbnRlZ3JhbHggICAgIDBFLTEgICAgLT4gIDAKK2ludHh4MTMzIHRvaW50ZWdyYWx4ICAgICAwRS0wICAgIC0+ICAwCitpbnR4eDEzNCB0b2ludGVncmFseCAgICAgMEUrMSAgICAtPiAgMEUrMQoraW50eHgxMzUgdG9pbnRlZ3JhbHggICAgIDBFKzIgICAgLT4gIDBFKzIKK2ludHh4MTM2IHRvaW50ZWdyYWx4ICAgICAwRSszICAgIC0+ICAwRSszCitpbnR4eDEzNyB0b2ludGVncmFseCAgICAgMEUrNCAgICAtPiAgMEUrNAoraW50eHgxMzggdG9pbnRlZ3JhbHggICAgIDBFKzUgICAgLT4gIDBFKzUKK2ludHh4MTM5IHRvaW50ZWdyYWx4ICAgIC0wLjAwMCAgIC0+IC0wCitpbnR4eDE0MCB0b2ludGVncmFseCAgICAtMC4wMCAgICAtPiAtMAoraW50eHgxNDEgdG9pbnRlZ3JhbHggICAgLTAuMCAgICAgLT4gLTAKK2ludHh4MTQyIHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wCitpbnR4eDE0MyB0b2ludGVncmFseCAgICAtMEUtMyAgICAtPiAtMAoraW50eHgxNDQgdG9pbnRlZ3JhbHggICAgLTBFLTIgICAgLT4gLTAKK2ludHh4MTQ1IHRvaW50ZWdyYWx4ICAgIC0wRS0xICAgIC0+IC0wCitpbnR4eDE0NiB0b2ludGVncmFseCAgICAtMEUtMCAgICAtPiAtMAoraW50eHgxNDcgdG9pbnRlZ3JhbHggICAgLTBFKzEgICAgLT4gLTBFKzEKK2ludHh4MTQ4IHRvaW50ZWdyYWx4ICAgIC0wRSsyICAgIC0+IC0wRSsyCitpbnR4eDE0OSB0b2ludGVncmFseCAgICAtMEUrMyAgICAtPiAtMEUrMworaW50eHgxNTAgdG9pbnRlZ3JhbHggICAgLTBFKzQgICAgLT4gLTBFKzQKK2ludHh4MTUxIHRvaW50ZWdyYWx4ICAgIC0wRSs1ICAgIC0+IC0wRSs1CistLSBwcm9wYWdhdGluZyBOYU5zCitpbnR4eDE1MiB0b2ludGVncmFseCAgIE5hTjgwOCAgICAtPiAgTmFOODA4CitpbnR4eDE1MyB0b2ludGVncmFseCAgc05hTjA4MCAgICAtPiAgTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitpbnR4eDE1NCB0b2ludGVncmFseCAgLU5hTjgwOCAgICAtPiAtTmFOODA4CitpbnR4eDE1NSB0b2ludGVncmFseCAtc05hTjA4MCAgICAtPiAtTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitpbnR4eDE1NiB0b2ludGVncmFseCAgLU5hTiAgICAgICAtPiAtTmFOCitpbnR4eDE1NyB0b2ludGVncmFseCAtc05hTiAgICAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGV4YW1wbGVzCityb3VuZGluZzogICAgaGFsZl91cAorcHJlY2lzaW9uOiAgIDkKK2ludHh4MjAwIHRvaW50ZWdyYWx4ICAgICAyLjEgICAgLT4gMiAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIwMSB0b2ludGVncmFseCAgIDEwMCAgICAgIC0+IDEwMAoraW50eHgyMDIgdG9pbnRlZ3JhbHggICAxMDAuMCAgICAtPiAxMDAgICAgICAgICAgICAgICAgICBSb3VuZGVkCitpbnR4eDIwMyB0b2ludGVncmFseCAgIDEwMS41ICAgIC0+IDEwMiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjA1IHRvaW50ZWdyYWx4ICAgMTBFKzUgICAgLT4gMS4wRSs2CitpbnR4eDIwNiB0b2ludGVncmFseCAgNy44OUUrNzcgIC0+IDcuODlFKzc3CitpbnR4eDIwNyB0b2ludGVncmFseCAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorCisKKy0tIGFsbCByb3VuZGluZyBtb2Rlcworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitpbnR4eDIxMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMTEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjEyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIxMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMTQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjE1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX3VwCisKK2ludHh4MjIwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIyMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMjIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjIzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIyNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMjUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorCitpbnR4eDIzMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NSAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMzEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjMyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIzMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NSAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMzQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjM1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICB1cAorCitpbnR4eDI0MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNDEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjQyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI0MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNDQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjQ1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU4ICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBkb3duCisKK2ludHh4MjUwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI1MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNTIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjUzIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU1ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI1NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNTUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKworaW50eHgyNjAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjYxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI2MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNjMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTUgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjY0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI2NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZmxvb3IKKworaW50eHgyNzAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjcxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI3MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNzMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4Mjc0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI3NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01OCAgIEluZXhhY3QgUm91bmRlZAorCistLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucworcHJlY2lzaW9uOiAxNgoraW50eHgzMDAgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDYgIC0+IC0yMTQ3NDgzNjQ2CitpbnR4eDMwMSB0b2ludGVncmFseCAtMjE0NzQ4MzY0NyAgLT4gLTIxNDc0ODM2NDcKK2ludHh4MzAyIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ4ICAtPiAtMjE0NzQ4MzY0OAoraW50eHgzMDMgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDkgIC0+IC0yMTQ3NDgzNjQ5CitpbnR4eDMwNCB0b2ludGVncmFseCAgMjE0NzQ4MzY0NiAgLT4gIDIxNDc0ODM2NDYKK2ludHh4MzA1IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ3ICAtPiAgMjE0NzQ4MzY0NworaW50eHgzMDYgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDggIC0+ICAyMTQ3NDgzNjQ4CitpbnR4eDMwNyB0b2ludGVncmFseCAgMjE0NzQ4MzY0OSAgLT4gIDIxNDc0ODM2NDkKK2ludHh4MzA4IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk0ICAtPiAgNDI5NDk2NzI5NAoraW50eHgzMDkgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTUgIC0+ICA0Mjk0OTY3Mjk1CitpbnR4eDMxMCB0b2ludGVncmFseCAgNDI5NDk2NzI5NiAgLT4gIDQyOTQ5NjcyOTYKK2ludHh4MzExIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk3ICAtPiAgNDI5NDk2NzI5NwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3hvci5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3hvci5kZWNUZXN0CmluZGV4IGNkNzFiYmMuLjEyMjk3NmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS94b3IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEveG9yLmRlY1Rlc3QKQEAgLTEsMzM1ICsxLDMzNSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0geG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgWE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQoteG9yeDAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDANCi14b3J4MDAyIHhvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQ0KLXhvcngwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxDQoteG9yeDAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDANCi14b3J4MDA1IHhvciAgICAgICAgICAxMTAwIDEwMTAgLT4gIDExMA0KLXhvcngwMDYgeG9yICAgICAgICAgIDExMTEgICAxMCAtPiAxMTAxDQotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCi14b3J4MDEwIHhvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQoteG9yeDAxMSB4b3IgMDAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMA0KLXhvcngwMTIgeG9yIDEwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDANCi14b3J4MDEzIHhvciAxMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgICAgICAgICAwDQoteG9yeDAxNCB4b3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLXhvcngwMTUgeG9yIDAwMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgMTAwMDAwMDANCi14b3J4MDE2IHhvciAwMTAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwDQoteG9yeDAxNyB4b3IgMDEwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLQ0KLS0tIFZhcmlvdXMgbGVuZ3Rocw0KLS0tICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQ0KLXhvcngwMjEgeG9yIDExMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMA0KLXhvcngwMjIgeG9yIDExMTExMTExMTExMSAgMTExMTExMTExICAtPiAgMA0KLXhvcngwMjMgeG9yICAxMTExMTExMSAgICAgIDExMTExMTExICAtPiAgMA0KLXhvcngwMjUgeG9yICAgMTExMTExMSAgICAgICAxMTExMTExICAtPiAgMA0KLXhvcngwMjYgeG9yICAgIDExMTExMSAgICAgICAgMTExMTExICAtPiAgMA0KLXhvcngwMjcgeG9yICAgICAxMTExMSAgICAgICAgIDExMTExICAtPiAgMA0KLXhvcngwMjggeG9yICAgICAgMTExMSAgICAgICAgICAxMTExICAtPiAgMA0KLXhvcngwMjkgeG9yICAgICAgIDExMSAgICAgICAgICAgMTExICAtPiAgMA0KLXhvcngwMzEgeG9yICAgICAgICAxMSAgICAgICAgICAgIDExICAtPiAgMA0KLXhvcngwMzIgeG9yICAgICAgICAgMSAgICAgICAgICAgICAxICAtPiAgMA0KLXhvcngwMzMgeG9yIDExMTExMTExMTExMSAxMTExMTExMTExICAtPiAgMA0KLXhvcngwMzQgeG9yIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMA0KLXhvcngwMzUgeG9yIDExMTExMTExMTEgMTExMTExMTExMTExICAtPiAgMA0KLXhvcngwMzYgeG9yIDExMTExMTExMSAxMTExMTExMTExMTExICAtPiAgMA0KLQ0KLXhvcngwNDAgeG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMA0KLXhvcngwNDEgeG9yICAxMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTAwMDAwMDAwDQoteG9yeDA0MiB4b3IgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMDAwMDAwMDANCi14b3J4MDQzIHhvciAgIDExMTExMTEgICAgIDEwMDAwMDAxMCAgLT4gIDEwMTExMTEwMQ0KLXhvcngwNDQgeG9yICAgIDExMTExMSAgICAgMTAwMDAwMTAwICAtPiAgMTAwMTExMDExDQoteG9yeDA0NSB4b3IgICAgIDExMTExICAgICAxMDAwMDEwMDAgIC0+ICAxMDAwMTAxMTENCi14b3J4MDQ2IHhvciAgICAgIDExMTEgICAgIDEwMDAxMDAwMCAgLT4gIDEwMDAxMTExMQ0KLXhvcngwNDcgeG9yICAgICAgIDExMSAgICAgMTAwMTAwMDAwICAtPiAgMTAwMTAwMTExDQoteG9yeDA0OCB4b3IgICAgICAgIDExICAgICAxMDEwMDAwMDAgIC0+ICAxMDEwMDAwMTENCi14b3J4MDQ5IHhvciAgICAgICAgIDEgICAgIDExMDAwMDAwMCAgLT4gIDExMDAwMDAwMQ0KLQ0KLXhvcngwNTAgeG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTANCi14b3J4MDUxIHhvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTEwDQoteG9yeDA1MiB4b3IgICAxMTExMTExMSAgMSAgLT4gIDExMTExMTEwDQoteG9yeDA1MyB4b3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTANCi14b3J4MDU0IHhvciAgICAgMTExMTExICAxICAtPiAgMTExMTEwDQoteG9yeDA1NSB4b3IgICAgICAxMTExMSAgMSAgLT4gIDExMTEwDQoteG9yeDA1NiB4b3IgICAgICAgMTExMSAgMSAgLT4gIDExMTANCi14b3J4MDU3IHhvciAgICAgICAgMTExICAxICAtPiAgMTEwDQoteG9yeDA1OCB4b3IgICAgICAgICAxMSAgMSAgLT4gIDEwDQoteG9yeDA1OSB4b3IgICAgICAgICAgMSAgMSAgLT4gIDANCi0NCi14b3J4MDYwIHhvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExDQoteG9yeDA2MSB4b3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQ0KLXhvcngwNjIgeG9yICAgMTExMTExMTEgIDAgIC0+ICAxMTExMTExMQ0KLXhvcngwNjMgeG9yICAgIDExMTExMTEgIDAgIC0+ICAxMTExMTExDQoteG9yeDA2NCB4b3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQ0KLXhvcngwNjUgeG9yICAgICAgMTExMTEgIDAgIC0+ICAxMTExMQ0KLXhvcngwNjYgeG9yICAgICAgIDExMTEgIDAgIC0+ICAxMTExDQoteG9yeDA2NyB4b3IgICAgICAgIDExMSAgMCAgLT4gIDExMQ0KLXhvcngwNjggeG9yICAgICAgICAgMTEgIDAgIC0+ICAxMQ0KLXhvcngwNjkgeG9yICAgICAgICAgIDEgIDAgIC0+ICAxDQotDQoteG9yeDA3MCB4b3IgMSAgMTExMTExMTExMSAgLT4gIDExMTExMTExMA0KLXhvcngwNzEgeG9yIDEgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTANCi14b3J4MDcyIHhvciAxICAgIDExMTExMTExICAtPiAgMTExMTExMTANCi14b3J4MDczIHhvciAxICAgICAxMTExMTExICAtPiAgMTExMTExMA0KLXhvcngwNzQgeG9yIDEgICAgICAxMTExMTEgIC0+ICAxMTExMTANCi14b3J4MDc1IHhvciAxICAgICAgIDExMTExICAtPiAgMTExMTANCi14b3J4MDc2IHhvciAxICAgICAgICAxMTExICAtPiAgMTExMA0KLXhvcngwNzcgeG9yIDEgICAgICAgICAxMTEgIC0+ICAxMTANCi14b3J4MDc4IHhvciAxICAgICAgICAgIDExICAtPiAgMTANCi14b3J4MDc5IHhvciAxICAgICAgICAgICAxICAtPiAgMA0KLQ0KLXhvcngwODAgeG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi14b3J4MDgxIHhvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExDQoteG9yeDA4MiB4b3IgMCAgICAxMTExMTExMSAgLT4gIDExMTExMTExDQoteG9yeDA4MyB4b3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTENCi14b3J4MDg0IHhvciAwICAgICAgMTExMTExICAtPiAgMTExMTExDQoteG9yeDA4NSB4b3IgMCAgICAgICAxMTExMSAgLT4gIDExMTExDQoteG9yeDA4NiB4b3IgMCAgICAgICAgMTExMSAgLT4gIDExMTENCi14b3J4MDg3IHhvciAwICAgICAgICAgMTExICAtPiAgMTExDQoteG9yeDA4OCB4b3IgMCAgICAgICAgICAxMSAgLT4gIDExDQoteG9yeDA4OSB4b3IgMCAgICAgICAgICAgMSAgLT4gIDENCi0NCi14b3J4MDkwIHhvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDEwMDAxMDAwMA0KLXhvcngwOTEgeG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgIDEwMDEwMDAwDQoteG9yeDA5MiB4b3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAgIDEwMTAwMDANCi14b3J4MDkzIHhvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gICAgIDExMDAwMA0KLXhvcngwOTQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwDQoteG9yeDA5NSB4b3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAgICAgMTEwMDANCi14b3J4MDk2IHhvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gICAgICAxMDEwMA0KLXhvcngwOTcgeG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgICAgIDEwMDEwDQoteG9yeDA5OCB4b3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAgICAgMTAwMDENCi0NCi14b3J4MTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMA0KLXhvcngxMDEgeG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgIDEwMDEwMDAwDQoteG9yeDEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDANCi14b3J4MTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMA0KLXhvcngxMDQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwDQoteG9yeDEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDANCi14b3J4MTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMA0KLXhvcngxMDcgeG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgICAgIDEwMDEwDQoteG9yeDEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDENCi0NCi0tLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCi14b3J4MjIwIHhvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyMjEgeG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDIyMiB4b3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjIzIHhvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyMjQgeG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDIyNSB4b3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjI2IHhvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyMjcgeG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDIyOCB4b3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjI5IHhvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyMzAgeG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDIzMSB4b3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjMyIHhvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGEgZmV3IHJhbmRvbXMNCi14b3J4MjQwIHhvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjQzIHhvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QNCi14b3J4MjUwIHhvciAgMjAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI1MSB4b3IgIDcwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNTIgeG9yICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjUzIHhvciAgOTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI1NCB4b3IgIDIwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNTUgeG9yICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjU2IHhvciAgODAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI1NyB4b3IgIDkwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNTggeG9yICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjU5IHhvciAgMTAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI2MCB4b3IgIDEwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNjEgeG9yICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjYyIHhvciAgMDAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI2MyB4b3IgIDAwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNjQgeG9yICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjY1IHhvciAgMDAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QtMQ0KLXhvcngyNzAgeG9yICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjcxIHhvciAgMDcwMTAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI3MiB4b3IgIDA4MDAxMDAwMCAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNzMgeG9yICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mjc0IHhvciAgMTAwMDAwMTAwIDAyMDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI3NSB4b3IgIDEwMDAwMDAwMCAwNzAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNzYgeG9yICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mjc3IHhvciAgMTAwMDAwMDAwIDA5MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi14b3J4MjgwIHhvciAgMDAxMDAwMDAyIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI4MSB4b3IgIDAwMDAwMDAwNyAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyODIgeG9yICAwMDAwMDAwMDggMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjgzIHhvciAgMDAwMDAwMDA5IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI4NCB4b3IgIDEwMDAwMDAwMCAwMDAxMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyODUgeG9yICAxMDAxMDAwMDAgMDAxMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mjg2IHhvciAgMTAwMDEwMDAwIDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI4NyB4b3IgIDEwMDAwMTAwMCAxMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTWlkZGllDQoteG9yeDI4OCB4b3IgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyODkgeG9yICAwMDAwNzAwMDEgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjkwIHhvciAgMDAwMDgwMDAwIDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI5MSB4b3IgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyOTIgeG9yICAxMDAwMDAwMTAgMDAwMDIwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjkzIHhvciAgMTAwMTAwMDAwIDAwMDA3MDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI5NCB4b3IgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyOTUgeG9yICAxMDAwMDEwMDAgMDAwMDkwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzaWducw0KLXhvcngyOTYgeG9yIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI5NyB4b3IgLTEwMDAwMTAwMCAgMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mjk4IHhvciAgMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyOTkgeG9yICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMDEwMDAwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi14b3J4MzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDMzMiB4b3IgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzM0IHhvciAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDMzNSB4b3IgIDYgICAtMUUtMTAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzM3IHhvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDMzOCB4b3IgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNDEgeG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzQyIHhvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM0MyB4b3IgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNDQgeG9yICAxRS0xMDA3ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzQ1IHhvciAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM0NiB4b3IgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNDcgeG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzQ4IHhvciAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQoteG9yeDM2MSB4b3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNjIgeG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzYzIHhvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM2NCB4b3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNjUgeG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzY2IHhvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM3MSB4b3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNzIgeG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzczIHhvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM3NCB4b3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNzUgeG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mzc2IHhvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KLXhvcng3ODAgeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4NzgxIHhvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDc4MiB4b3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng3ODMgeG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Nzg0IHhvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDc4NSB4b3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng3ODYgeG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Nzg3IHhvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDc4OCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng3ODkgeG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4NzkwIHhvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDc5MSB4b3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng3OTIgeG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4NzkzIHhvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDc5NCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLXhvcng4MDAgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODAxIHhvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgwMiB4b3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MDMgeG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODA0IHhvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgwNSB4b3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MDYgeG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODA3IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgwOCB4b3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MDkgeG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODEwIHhvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgxMSB4b3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MTIgeG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODEzIHhvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgxNCB4b3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MTUgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi14b3J4ODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MjMgeG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MjYgeG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MjkgeG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MzIgeG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MzUgeG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLXhvcng4NDEgeG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NDIgeG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NDMgeG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NDQgeG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NDUgeG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NDYgeG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NDcgeG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NDggeG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NDkgeG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NTAgeG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NTEgeG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NTIgeG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NTMgeG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NTQgeG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NTUgeG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NTYgeG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NTcgeG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NTggeG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NTkgeG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi14b3J4ODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NjMgeG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NjYgeG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NjkgeG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NzMgeG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NzYgeG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NzkgeG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4ODIgeG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4ODUgeG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHhvci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIFhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK3hvcngwMDEgeG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCit4b3J4MDAyIHhvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQoreG9yeDAwMyB4b3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDEKK3hvcngwMDQgeG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAwCit4b3J4MDA1IHhvciAgICAgICAgICAxMTAwIDEwMTAgLT4gIDExMAoreG9yeDAwNiB4b3IgICAgICAgICAgMTExMSAgIDEwIC0+IDExMDEKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCit4b3J4MDEwIHhvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCit4b3J4MDExIHhvciAwMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwCit4b3J4MDEyIHhvciAxMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwCit4b3J4MDEzIHhvciAxMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgICAgICAgICAwCit4b3J4MDE0IHhvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCit4b3J4MDE1IHhvciAwMDAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgIDEwMDAwMDAwCit4b3J4MDE2IHhvciAwMTAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwCit4b3J4MDE3IHhvciAwMTAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgICAgICAgICAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgIDEyMzQ1Njc4OSAgICAgMTIzNDU2Nzg5ICAgICAgMTIzNDU2Nzg5Cit4b3J4MDIxIHhvciAxMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDAKK3hvcngwMjIgeG9yIDExMTExMTExMTExMSAgMTExMTExMTExICAtPiAgMAoreG9yeDAyMyB4b3IgIDExMTExMTExICAgICAgMTExMTExMTEgIC0+ICAwCit4b3J4MDI1IHhvciAgIDExMTExMTEgICAgICAgMTExMTExMSAgLT4gIDAKK3hvcngwMjYgeG9yICAgIDExMTExMSAgICAgICAgMTExMTExICAtPiAgMAoreG9yeDAyNyB4b3IgICAgIDExMTExICAgICAgICAgMTExMTEgIC0+ICAwCit4b3J4MDI4IHhvciAgICAgIDExMTEgICAgICAgICAgMTExMSAgLT4gIDAKK3hvcngwMjkgeG9yICAgICAgIDExMSAgICAgICAgICAgMTExICAtPiAgMAoreG9yeDAzMSB4b3IgICAgICAgIDExICAgICAgICAgICAgMTEgIC0+ICAwCit4b3J4MDMyIHhvciAgICAgICAgIDEgICAgICAgICAgICAgMSAgLT4gIDAKK3hvcngwMzMgeG9yIDExMTExMTExMTExMSAxMTExMTExMTExICAtPiAgMAoreG9yeDAzNCB4b3IgMTExMTExMTExMTEgMTExMTExMTExMTEgIC0+ICAwCit4b3J4MDM1IHhvciAxMTExMTExMTExIDExMTExMTExMTExMSAgLT4gIDAKK3hvcngwMzYgeG9yIDExMTExMTExMSAxMTExMTExMTExMTExICAtPiAgMAorCit4b3J4MDQwIHhvciAxMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDAKK3hvcngwNDEgeG9yICAxMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTAwMDAwMDAwCit4b3J4MDQyIHhvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDEwMDAwMDAwMAoreG9yeDA0MyB4b3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMDEKK3hvcngwNDQgeG9yICAgIDExMTExMSAgICAgMTAwMDAwMTAwICAtPiAgMTAwMTExMDExCit4b3J4MDQ1IHhvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMDExMQoreG9yeDA0NiB4b3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTEKK3hvcngwNDcgeG9yICAgICAgIDExMSAgICAgMTAwMTAwMDAwICAtPiAgMTAwMTAwMTExCit4b3J4MDQ4IHhvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQoreG9yeDA0OSB4b3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDEKKworeG9yeDA1MCB4b3IgMTExMTExMTExMSAgMSAgLT4gIDExMTExMTExMAoreG9yeDA1MSB4b3IgIDExMTExMTExMSAgMSAgLT4gIDExMTExMTExMAoreG9yeDA1MiB4b3IgICAxMTExMTExMSAgMSAgLT4gIDExMTExMTEwCit4b3J4MDUzIHhvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMAoreG9yeDA1NCB4b3IgICAgIDExMTExMSAgMSAgLT4gIDExMTExMAoreG9yeDA1NSB4b3IgICAgICAxMTExMSAgMSAgLT4gIDExMTEwCit4b3J4MDU2IHhvciAgICAgICAxMTExICAxICAtPiAgMTExMAoreG9yeDA1NyB4b3IgICAgICAgIDExMSAgMSAgLT4gIDExMAoreG9yeDA1OCB4b3IgICAgICAgICAxMSAgMSAgLT4gIDEwCit4b3J4MDU5IHhvciAgICAgICAgICAxICAxICAtPiAgMAorCit4b3J4MDYwIHhvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExCit4b3J4MDYxIHhvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExCit4b3J4MDYyIHhvciAgIDExMTExMTExICAwICAtPiAgMTExMTExMTEKK3hvcngwNjMgeG9yICAgIDExMTExMTEgIDAgIC0+ICAxMTExMTExCit4b3J4MDY0IHhvciAgICAgMTExMTExICAwICAtPiAgMTExMTExCit4b3J4MDY1IHhvciAgICAgIDExMTExICAwICAtPiAgMTExMTEKK3hvcngwNjYgeG9yICAgICAgIDExMTEgIDAgIC0+ICAxMTExCit4b3J4MDY3IHhvciAgICAgICAgMTExICAwICAtPiAgMTExCit4b3J4MDY4IHhvciAgICAgICAgIDExICAwICAtPiAgMTEKK3hvcngwNjkgeG9yICAgICAgICAgIDEgIDAgIC0+ICAxCisKK3hvcngwNzAgeG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTAKK3hvcngwNzEgeG9yIDEgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTAKK3hvcngwNzIgeG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMAoreG9yeDA3MyB4b3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTAKK3hvcngwNzQgeG9yIDEgICAgICAxMTExMTEgIC0+ICAxMTExMTAKK3hvcngwNzUgeG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMAoreG9yeDA3NiB4b3IgMSAgICAgICAgMTExMSAgLT4gIDExMTAKK3hvcngwNzcgeG9yIDEgICAgICAgICAxMTEgIC0+ICAxMTAKK3hvcngwNzggeG9yIDEgICAgICAgICAgMTEgIC0+ICAxMAoreG9yeDA3OSB4b3IgMSAgICAgICAgICAgMSAgLT4gIDAKKworeG9yeDA4MCB4b3IgMCAgMTExMTExMTExMSAgLT4gIDExMTExMTExMQoreG9yeDA4MSB4b3IgMCAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQoreG9yeDA4MiB4b3IgMCAgICAxMTExMTExMSAgLT4gIDExMTExMTExCit4b3J4MDgzIHhvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQoreG9yeDA4NCB4b3IgMCAgICAgIDExMTExMSAgLT4gIDExMTExMQoreG9yeDA4NSB4b3IgMCAgICAgICAxMTExMSAgLT4gIDExMTExCit4b3J4MDg2IHhvciAwICAgICAgICAxMTExICAtPiAgMTExMQoreG9yeDA4NyB4b3IgMCAgICAgICAgIDExMSAgLT4gIDExMQoreG9yeDA4OCB4b3IgMCAgICAgICAgICAxMSAgLT4gIDExCit4b3J4MDg5IHhvciAwICAgICAgICAgICAxICAtPiAgMQorCit4b3J4MDkwIHhvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDEwMDAxMDAwMAoreG9yeDA5MSB4b3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAgMTAwMTAwMDAKK3hvcngwOTIgeG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgICAxMDEwMDAwCit4b3J4MDkzIHhvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gICAgIDExMDAwMAoreG9yeDA5NCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDAKK3hvcngwOTUgeG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgICAgIDExMDAwCit4b3J4MDk2IHhvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gICAgICAxMDEwMAoreG9yeDA5NyB4b3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAgICAgMTAwMTAKK3hvcngwOTggeG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgICAgIDEwMDAxCisKK3hvcngxMDAgeG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTAwMDEwMDAwCit4b3J4MTAxIHhvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gICAxMDAxMDAwMAoreG9yeDEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDAKK3hvcngxMDMgeG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgICAgMTEwMDAwCit4b3J4MTA0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMAoreG9yeDEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDAKK3hvcngxMDYgeG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgICAgIDEwMTAwCit4b3J4MTA3IHhvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gICAgICAxMDAxMAoreG9yeDEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDEKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCit4b3J4MjIwIHhvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyMSB4b3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjIgeG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjIzIHhvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyNCB4b3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjUgeG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjI2IHhvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyNyB4b3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjggeG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjI5IHhvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIzMCB4b3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMzEgeG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjMyIHhvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworeG9yeDI0MCB4b3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjQyIHhvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI0MyB4b3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAoreG9yeDI1MCB4b3IgIDIwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI1MSB4b3IgIDcwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI1MiB4b3IgIDgwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI1MyB4b3IgIDkwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI1NCB4b3IgIDIwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI1NSB4b3IgIDcwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI1NiB4b3IgIDgwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI1NyB4b3IgIDkwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI1OCB4b3IgIDEwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI1OSB4b3IgIDEwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI2MCB4b3IgIDEwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI2MSB4b3IgIDEwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI2MiB4b3IgIDAwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI2MyB4b3IgIDAwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI2NCB4b3IgIDAwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI2NSB4b3IgIDAwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQoreG9yeDI3MCB4b3IgIDAyMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI3MSB4b3IgIDA3MDEwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI3MiB4b3IgIDA4MDAxMDAwMCAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI3MyB4b3IgIDA5MDAwMTAwMCAxMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI3NCB4b3IgIDEwMDAwMDEwMCAwMjAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI3NSB4b3IgIDEwMDAwMDAwMCAwNzAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI3NiB4b3IgIDEwMDAwMDAxMCAwODAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI3NyB4b3IgIDEwMDAwMDAwMCAwOTAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK3hvcngyODAgeG9yICAwMDEwMDAwMDIgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyODEgeG9yICAwMDAwMDAwMDcgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyODIgeG9yICAwMDAwMDAwMDggMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyODMgeG9yICAwMDAwMDAwMDkgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyODQgeG9yICAxMDAwMDAwMDAgMDAwMTAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyODUgeG9yICAxMDAxMDAwMDAgMDAxMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyODYgeG9yICAxMDAwMTAwMDAgMDEwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyODcgeG9yICAxMDAwMDEwMDAgMTAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCit4b3J4Mjg4IHhvciAgMDAxMDIwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjg5IHhvciAgMDAwMDcwMDAxIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjkwIHhvciAgMDAwMDgwMDAwIDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjkxIHhvciAgMDAwMDkwMDAwIDEwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjkyIHhvciAgMTAwMDAwMDEwIDAwMDAyMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjkzIHhvciAgMTAwMTAwMDAwIDAwMDA3MDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjk0IHhvciAgMTAwMDEwMTAwIDAwMDA4MDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjk1IHhvciAgMTAwMDAxMDAwIDAwMDA5MDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworeG9yeDI5NiB4b3IgLTEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyOTcgeG9yIC0xMDAwMDEwMDAgIDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjk4IHhvciAgMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5OSB4b3IgIDEwMDAwMTAwMCAgMDAwMDExMDAwIC0+ICAxMDAwMTAwMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK3hvcngzMzEgeG9yICAyICAgOS45OTk5OTk5OUUrOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzMzIgeG9yICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzMzQgeG9yICA1ICAgMUUtMTAwNyAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzMzUgeG9yICA2ICAgLTFFLTEwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzMzcgeG9yICA4ICAgLTFFLTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzMzggeG9yICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNDEgeG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNDIgeG9yICAxRS05OTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNDMgeG9yICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNDQgeG9yICAxRS0xMDA3ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNDUgeG9yICAtMUUtMTAwNyAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNDYgeG9yICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNDcgeG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNDggeG9yICAtOS45OTk5OTk5OUUrOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCit4b3J4MzYxIHhvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzYyIHhvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzYzIHhvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzY0IHhvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzY1IHhvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzY2IHhvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzcxIHhvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzcyIHhvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzczIHhvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mzc0IHhvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mzc1IHhvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mzc2IHhvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK3hvcng3ODAgeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3ODEgeG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3ODIgeG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3ODMgeG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3ODQgeG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3ODUgeG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3ODYgeG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3ODcgeG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3ODggeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3ODkgeG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3OTAgeG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3OTEgeG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3OTIgeG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3OTMgeG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng3OTQgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworeG9yeDgwMCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgwMSB4b3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgwMiB4b3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgwMyB4b3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgwNCB4b3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgwNSB4b3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgwNiB4b3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgwNyB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgwOCB4b3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgwOSB4b3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgxMCB4b3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgxMSB4b3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgxMiB4b3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgxMyB4b3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgxNCB4b3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgxNSB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCit4b3J4ODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODIyIHhvciAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODIzIHhvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODI1IHhvciAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODI2IHhvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODI4IHhvciAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODI5IHhvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODMxIHhvciAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODMyIHhvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODM0IHhvciAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODM1IHhvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODM3IHhvciAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3hvcng4NDEgeG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0MiB4b3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODQzIHhvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDQgeG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0NSB4b3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODQ2IHhvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDcgeG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0OCB4b3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODQ5IHhvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTAgeG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1MSB4b3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODUyIHhvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTMgeG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1NCB4b3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODU1IHhvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTYgeG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1NyB4b3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODU4IHhvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTkgeG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCit4b3J4ODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODYyIHhvciArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODYzIHhvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODY1IHhvciAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODY2IHhvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODY4IHhvciAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODY5IHhvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODcyIHhvciAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODczIHhvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODc1IHhvciAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODc2IHhvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODc4IHhvciAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODc5IHhvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODgxIHhvciArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODgyIHhvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODg0IHhvciAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODg1IHhvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kb2N0ZXN0X2FsaWFzZXMucHkgYi9MaWIvdGVzdC9kb2N0ZXN0X2FsaWFzZXMucHkKaW5kZXggZTZlNWNhOS4uMWYzM2Y4MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZG9jdGVzdF9hbGlhc2VzLnB5CisrKyBiL0xpYi90ZXN0L2RvY3Rlc3RfYWxpYXNlcy5weQpAQCAtMTAsNCArMTAsNCBAQAogICAgICAgICAnJycKICAgICAgICAgcmV0dXJuICdmJwogCi0gICAgICAgIGcgPSBmICMgZGVmaW5lIGFuIGFsaWFzIGZvciBmCisgICAgZyA9IGYgIyBkZWZpbmUgYW4gYWxpYXMgZm9yIGYKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2Zsb2F0aW5nX3BvaW50cy50eHQgYi9MaWIvdGVzdC9mbG9hdGluZ19wb2ludHMudHh0CmluZGV4IDcwZDIxZWEuLjUzOTA3M2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2Zsb2F0aW5nX3BvaW50cy50eHQKKysrIGIvTGliL3Rlc3QvZmxvYXRpbmdfcG9pbnRzLnR4dApAQCAtMTAxOSwzICsxMDE5LDEwIEBACiArNDM3MjMzMzQ5ODQ5OTczMDdFLTI2CiArMTAxODI0MTk4NDk1Mzc5NjNFLTI0CiAtOTM1MDE3MDM1NzI2NjE5ODJFLTI2CisKKyMgQSB2YWx1ZSB0aGF0IGNhdXNlZCBhIGNyYXNoIGluIGRlYnVnIGJ1aWxkcyBmb3IgUHl0aG9uID49IDIuNywgMy4xCisjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNzYzMgorMjE4MzE2NzAxMjMxMjExMjMxMjMxMi4yMzUzODAyMDM3NDQyMDQ0NjE5MmUtMzcwCisKKyMgQW5vdGhlciB2YWx1ZSBkZXNpZ25lZCB0byB0ZXN0IGEgY29ybmVyIGNhc2Ugb2YgUHl0aG9uJ3Mgc3RydG9kIGNvZGUuCiswLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZSsyMwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZm9ya193YWl0LnB5IGIvTGliL3Rlc3QvZm9ya193YWl0LnB5CmluZGV4IDNjNzVkZTMuLjI2NDZjYmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQorKysgYi9MaWIvdGVzdC9mb3JrX3dhaXQucHkKQEAgLTEsNiArMSw2IEBACiAiIiJUaGlzIHRlc3QgY2FzZSBwcm92aWRlcyBzdXBwb3J0IGZvciBjaGVja2luZyBmb3JraW5nIGFuZCB3YWl0IGJlaGF2aW9yLgogCi1UbyB0ZXN0IGRpZmZlcmVudCB3YWl0IGJlaGF2aW9yLCBvdmVycmlzZSB0aGUgd2FpdF9pbXBsIG1ldGhvZC4KK1RvIHRlc3QgZGlmZmVyZW50IHdhaXQgYmVoYXZpb3IsIG92ZXJyaWRlIHRoZSB3YWl0X2ltcGwgbWV0aG9kLgogCiBXZSB3YW50IGZvcmsxKCkgc2VtYW50aWNzIC0tIG9ubHkgdGhlIGZvcmtpbmcgdGhyZWFkIHN1cnZpdmVzIGluIHRoZQogY2hpbGQgYWZ0ZXIgYSBmb3JrKCkuCkBAIC0xMiw3ICsxMiw5IEBACiB0aGUgc2FtZSBhcHBsaWNhdGlvbiwgdGhlIHByZXNlbnQgZXhhbXBsZSBzaG91bGQgd29yayBqdXN0IGZpbmUuICBEQwogIiIiCiAKLWltcG9ydCBvcywgc3lzLCB0aW1lLCB0aHJlYWQsIHVuaXR0ZXN0CitpbXBvcnQgb3MsIHN5cywgdGltZSwgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCBhcyB0ZXN0X3N1cHBvcnQKK3RocmVhZCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWQnKQogCiBMT05HU0xFRVAgPSAyCiBTSE9SVFNMRUVQID0gMC41CkBAIC00MSw4ICs0Myw4IEBACiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHRpbWUuc2xlZXAoMiAqIFNIT1JUU0xFRVApCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BpZCwgY3BpZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RhdHVzLCAwLCAiY2F1c2UgPSAlZCwgZXhpdCA9ICVkIiAlIChzdGF0dXMmMHhmZiwgc3RhdHVzPj44KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGlkLCBjcGlkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgImNhdXNlID0gJWQsIGV4aXQgPSAlZCIgJSAoc3RhdHVzJjB4ZmYsIHN0YXR1cz4+OCkpCiAKICAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgogICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1fVEhSRUFEUyk6CkBAIC01Miw3ICs1NCw3IEBACiAKICAgICAgICAgYSA9IHNlbGYuYWxpdmUua2V5cygpCiAgICAgICAgIGEuc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEsIHJhbmdlKE5VTV9USFJFQURTKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCByYW5nZShOVU1fVEhSRUFEUykpCiAKICAgICAgICAgcHJlZm9ya19saXZlcyA9IHNlbGYuYWxpdmUuY29weSgpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2Zvcm1hdGZsb2F0X3Rlc3RjYXNlcy50eHQgYi9MaWIvdGVzdC9mb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWYwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9mb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0CkBAIC0wLDAgKzEsMzgwIEBACistLSAnZicgY29kZSBmb3JtYXR0aW5nLCB3aXRoIGV4cGxpY2l0IHByZWNpc2lvbiAoPj0gMCkuICBPdXRwdXQgYWx3YXlzCistLSBoYXMgdGhlIGdpdmVuIG51bWJlciBvZiBwbGFjZXMgYWZ0ZXIgdGhlIHBvaW50OyAgemVyb3MgYXJlIGFkZGVkIGlmCistLSBuZWNlc3NhcnkgdG8gbWFrZSB0aGlzIHRydWUuCisKKy0tIHplcm9zCislLjBmIDAgLT4gMAorJS4xZiAwIC0+IDAuMAorJS4yZiAwIC0+IDAuMDAKKyUuM2YgMCAtPiAwLjAwMAorJS41MGYgMCAtPiAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKy0tIHByZWNpc2lvbiAwOyAgcmVzdWx0IHNob3VsZCBuZXZlciBpbmNsdWRlIGEgLgorJS4wZiAxLjUgLT4gMgorJS4wZiAyLjUgLT4gMgorJS4wZiAzLjUgLT4gNAorJS4wZiAwLjAgLT4gMAorJS4wZiAwLjEgLT4gMAorJS4wZiAwLjAwMSAtPiAwCislLjBmIDEwLjAgLT4gMTAKKyUuMGYgMTAuMSAtPiAxMAorJS4wZiAxMC4wMSAtPiAxMAorJS4wZiAxMjMuNDU2IC0+IDEyMworJS4wZiAxMjM0LjU2IC0+IDEyMzUKKyUuMGYgMWU0OSAtPiA5OTk5OTk5OTk5OTk5OTk5NDY0OTAyNzY5NDc1NDgxNzkzMTk2ODcyNDE0Nzg5NjMyCislLjBmIDkuOTk5OTk5OTk5OTk5OTk4N2UrNDkgLT4gOTk5OTk5OTk5OTk5OTk5ODY4NjA1ODI0MDY5NTI1NzY0ODkxNzI5Nzk2NTQwNjYxNzYKKyUuMGYgMWU1MCAtPiAxMDAwMDAwMDAwMDAwMDAwMDc2Mjk3Njk4NDEwOTE4ODcwMDMyOTQ5NjQ5NzA5NDY1NjAKKworLS0gcHJlY2lzaW9uIDEKKyUuMWYgMC4wMDAxIC0+IDAuMAorJS4xZiAwLjAwMSAtPiAwLjAKKyUuMWYgMC4wMSAtPiAwLjAKKyUuMWYgMC4wNCAtPiAwLjAKKyUuMWYgMC4wNiAtPiAwLjEKKyUuMWYgMC4yNSAtPiAwLjIKKyUuMWYgMC43NSAtPiAwLjgKKyUuMWYgMS40IC0+IDEuNAorJS4xZiAxLjUgLT4gMS41CislLjFmIDEwLjAgLT4gMTAuMAorJS4xZiAxMDAwLjAzIC0+IDEwMDAuMAorJS4xZiAxMjM0LjU2NzggLT4gMTIzNC42CislLjFmIDEyMzQuNzQ5OSAtPiAxMjM0LjcKKyUuMWYgMTIzNC43NSAtPiAxMjM0LjgKKworLS0gcHJlY2lzaW9uIDIKKyUuMmYgMC4wMDAxIC0+IDAuMDAKKyUuMmYgMC4wMDEgLT4gMC4wMAorJS4yZiAwLjAwNDk5OSAtPiAwLjAwCislLjJmIDAuMDA1MDAxIC0+IDAuMDEKKyUuMmYgMC4wMSAtPiAwLjAxCislLjJmIDAuMTI1IC0+IDAuMTIKKyUuMmYgMC4zNzUgLT4gMC4zOAorJS4yZiAxMjM0NTAwIC0+IDEyMzQ1MDAuMDAKKyUuMmYgMTIzNDU2MCAtPiAxMjM0NTYwLjAwCislLjJmIDEyMzQ1NjcgLT4gMTIzNDU2Ny4wMAorJS4yZiAxMjM0NTY3LjggLT4gMTIzNDU2Ny44MAorJS4yZiAxMjM0NTY3Ljg5IC0+IDEyMzQ1NjcuODkKKyUuMmYgMTIzNDU2Ny44OTEgLT4gMTIzNDU2Ny44OQorJS4yZiAxMjM0NTY3Ljg5MTIgLT4gMTIzNDU2Ny44OQorCistLSBhbHRlcm5hdGUgZm9ybSBhbHdheXMgaW5jbHVkZXMgYSBkZWNpbWFsIHBvaW50LiAgVGhpcyBvbmx5CistLSBtYWtlcyBhIGRpZmZlcmVuY2Ugd2hlbiB0aGUgcHJlY2lzaW9uIGlzIDAuCislIy4wZiAwIC0+IDAuCislIy4xZiAwIC0+IDAuMAorJSMuMGYgMS41IC0+IDIuCislIy4wZiAyLjUgLT4gMi4KKyUjLjBmIDEwLjEgLT4gMTAuCislIy4wZiAxMjM0LjU2IC0+IDEyMzUuCislIy4xZiAxLjQgLT4gMS40CislIy4yZiAwLjM3NSAtPiAwLjM4CisKKy0tIGlmIHByZWNpc2lvbiBpcyBvbWl0dGVkIGl0IGRlZmF1bHRzIHRvIDYKKyVmIDAgLT4gMC4wMDAwMDAKKyVmIDEyMzAwMDAgLT4gMTIzMDAwMC4wMDAwMDAKKyVmIDEyMzQ1NjcgLT4gMTIzNDU2Ny4wMDAwMDAKKyVmIDEyMy40NTY3IC0+IDEyMy40NTY3MDAKKyVmIDEuMjM0NTY3ODkgLT4gMS4yMzQ1NjgKKyVmIDAuMDAwMTIgLT4gMC4wMDAxMjAKKyVmIDAuMDAwMTIzIC0+IDAuMDAwMTIzCislZiAwLjAwMDEyMzQ1IC0+IDAuMDAwMTIzCislZiAwLjAwMDAwMSAtPiAwLjAwMDAwMQorJWYgMC4wMDAwMDA1MDAxIC0+IDAuMDAwMDAxCislZiAwLjAwMDAwMDQ5OTkgLT4gMC4wMDAwMDAKKworLS0gbmFucyBhbmQgaW5maW5pdGllcworJWYgbmFuIC0+IG5hbgorJWYgaW5mIC0+IGluZgorJWYgLWluZmluaXR5IC0+IC1pbmYKKyVGIG5hbiAtPiBOQU4KKyVGIGluZmluaXR5IC0+IElORgorJUYgLWluZiAtPiAtSU5GCisKKy0tICdlJyBjb2RlIGZvcm1hdHRpbmcgd2l0aCBleHBsaWNpdCBwcmVjaXNpb24gKD49IDApLiBPdXRwdXQgc2hvdWxkCistLSBhbHdheXMgaGF2ZSBleGFjdGx5IHRoZSBudW1iZXIgb2YgcGxhY2VzIGFmdGVyIHRoZSBwb2ludCB0aGF0IHdlcmUKKy0tIHJlcXVlc3RlZC4KKworLS0gemVyb3MKKyUuMGUgMCAtPiAwZSswMAorJS4xZSAwIC0+IDAuMGUrMDAKKyUuMmUgMCAtPiAwLjAwZSswMAorJS4xMGUgMCAtPiAwLjAwMDAwMDAwMDBlKzAwCislLjUwZSAwIC0+IDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwCisKKy0tIHByZWNpc2lvbiAwLiAgbm8gZGVjaW1hbCBwb2ludCBpbiB0aGUgb3V0cHV0CislLjBlIDAuMDEgLT4gMWUtMDIKKyUuMGUgMC4xIC0+IDFlLTAxCislLjBlIDEgLT4gMWUrMDAKKyUuMGUgMTAgLT4gMWUrMDEKKyUuMGUgMTAwIC0+IDFlKzAyCislLjBlIDAuMDEyIC0+IDFlLTAyCislLjBlIDAuMTIgLT4gMWUtMDEKKyUuMGUgMS4yIC0+IDFlKzAwCislLjBlIDEyIC0+IDFlKzAxCislLjBlIDEyMCAtPiAxZSswMgorJS4wZSAxMjMuNDU2IC0+IDFlKzAyCislLjBlIDAuMDAwMTIzNDU2IC0+IDFlLTA0CislLjBlIDEyMzQ1NjAwMCAtPiAxZSswOAorJS4wZSAwLjUgLT4gNWUtMDEKKyUuMGUgMS40IC0+IDFlKzAwCislLjBlIDEuNSAtPiAyZSswMAorJS4wZSAxLjYgLT4gMmUrMDAKKyUuMGUgMi40OTk5OTk5IC0+IDJlKzAwCislLjBlIDIuNSAtPiAyZSswMAorJS4wZSAyLjUwMDAwMDEgLT4gM2UrMDAKKyUuMGUgMy40OTk5OTk5OTk5OTkgLT4gM2UrMDAKKyUuMGUgMy41IC0+IDRlKzAwCislLjBlIDQuNSAtPiA0ZSswMAorJS4wZSA1LjUgLT4gNmUrMDAKKyUuMGUgNi41IC0+IDZlKzAwCislLjBlIDcuNSAtPiA4ZSswMAorJS4wZSA4LjUgLT4gOGUrMDAKKyUuMGUgOS40OTk5IC0+IDllKzAwCislLjBlIDkuNSAtPiAxZSswMQorJS4wZSAxMC41IC0+IDFlKzAxCislLjBlIDE0Ljk5OSAtPiAxZSswMQorJS4wZSAxNSAtPiAyZSswMQorCistLSBwcmVjaXNpb24gMQorJS4xZSAwLjAwMDEgLT4gMS4wZS0wNAorJS4xZSAwLjAwMSAtPiAxLjBlLTAzCislLjFlIDAuMDEgLT4gMS4wZS0wMgorJS4xZSAwLjEgLT4gMS4wZS0wMQorJS4xZSAxIC0+IDEuMGUrMDAKKyUuMWUgMTAgLT4gMS4wZSswMQorJS4xZSAxMDAgLT4gMS4wZSswMgorJS4xZSAxMjAgLT4gMS4yZSswMgorJS4xZSAxMjMgLT4gMS4yZSswMgorJS4xZSAxMjMuNCAtPiAxLjJlKzAyCisKKy0tIHByZWNpc2lvbiAyCislLjJlIDAuMDAwMTMgLT4gMS4zMGUtMDQKKyUuMmUgMC4wMDAxMzUgLT4gMS4zNWUtMDQKKyUuMmUgMC4wMDAxMzU3IC0+IDEuMzZlLTA0CislLjJlIDAuMDAwMSAtPiAxLjAwZS0wNAorJS4yZSAwLjAwMSAtPiAxLjAwZS0wMworJS4yZSAwLjAxIC0+IDEuMDBlLTAyCislLjJlIDAuMSAtPiAxLjAwZS0wMQorJS4yZSAxIC0+IDEuMDBlKzAwCislLjJlIDEwIC0+IDEuMDBlKzAxCislLjJlIDEwMCAtPiAxLjAwZSswMgorJS4yZSAxMDAwIC0+IDEuMDBlKzAzCislLjJlIDE1MDAgLT4gMS41MGUrMDMKKyUuMmUgMTU5MCAtPiAxLjU5ZSswMworJS4yZSAxNTk4IC0+IDEuNjBlKzAzCislLjJlIDE1OTguNyAtPiAxLjYwZSswMworJS4yZSAxNTk4Ljc2IC0+IDEuNjBlKzAzCislLjJlIDk5OTkgLT4gMS4wMGUrMDQKKworLS0gb21pdHRlZCBwcmVjaXNpb24gZGVmYXVsdHMgdG8gNgorJWUgMCAtPiAwLjAwMDAwMGUrMDAKKyVlIDE2NSAtPiAxLjY1MDAwMGUrMDIKKyVlIDEyMzQ1NjcgLT4gMS4yMzQ1NjdlKzA2CislZSAxMjM0NTY3OCAtPiAxLjIzNDU2OGUrMDcKKyVlIDEuMSAtPiAxLjEwMDAwMGUrMDAKKworLS0gYWx0ZXJuYXRlIGZvcm0gYWx3YXlzIGNvbnRhaW5zIGEgZGVjaW1hbCBwb2ludC4gIFRoaXMgb25seSBtYWtlcworLS0gYSBkaWZmZXJlbmNlIHdoZW4gcHJlY2lzaW9uIGlzIDAuCisKKyUjLjBlIDAuMDEgLT4gMS5lLTAyCislIy4wZSAwLjEgLT4gMS5lLTAxCislIy4wZSAxIC0+IDEuZSswMAorJSMuMGUgMTAgLT4gMS5lKzAxCislIy4wZSAxMDAgLT4gMS5lKzAyCislIy4wZSAwLjAxMiAtPiAxLmUtMDIKKyUjLjBlIDAuMTIgLT4gMS5lLTAxCislIy4wZSAxLjIgLT4gMS5lKzAwCislIy4wZSAxMiAtPiAxLmUrMDEKKyUjLjBlIDEyMCAtPiAxLmUrMDIKKyUjLjBlIDEyMy40NTYgLT4gMS5lKzAyCislIy4wZSAwLjAwMDEyMzQ1NiAtPiAxLmUtMDQKKyUjLjBlIDEyMzQ1NjAwMCAtPiAxLmUrMDgKKyUjLjBlIDAuNSAtPiA1LmUtMDEKKyUjLjBlIDEuNCAtPiAxLmUrMDAKKyUjLjBlIDEuNSAtPiAyLmUrMDAKKyUjLjBlIDEuNiAtPiAyLmUrMDAKKyUjLjBlIDIuNDk5OTk5OSAtPiAyLmUrMDAKKyUjLjBlIDIuNSAtPiAyLmUrMDAKKyUjLjBlIDIuNTAwMDAwMSAtPiAzLmUrMDAKKyUjLjBlIDMuNDk5OTk5OTk5OTk5IC0+IDMuZSswMAorJSMuMGUgMy41IC0+IDQuZSswMAorJSMuMGUgNC41IC0+IDQuZSswMAorJSMuMGUgNS41IC0+IDYuZSswMAorJSMuMGUgNi41IC0+IDYuZSswMAorJSMuMGUgNy41IC0+IDguZSswMAorJSMuMGUgOC41IC0+IDguZSswMAorJSMuMGUgOS40OTk5IC0+IDkuZSswMAorJSMuMGUgOS41IC0+IDEuZSswMQorJSMuMGUgMTAuNSAtPiAxLmUrMDEKKyUjLjBlIDE0Ljk5OSAtPiAxLmUrMDEKKyUjLjBlIDE1IC0+IDIuZSswMQorJSMuMWUgMTIzLjQgLT4gMS4yZSswMgorJSMuMmUgMC4wMDAxMzU3IC0+IDEuMzZlLTA0CisKKy0tIG5hbnMgYW5kIGluZmluaXRpZXMKKyVlIG5hbiAtPiBuYW4KKyVlIGluZiAtPiBpbmYKKyVlIC1pbmZpbml0eSAtPiAtaW5mCislRSBuYW4gLT4gTkFOCislRSBpbmZpbml0eSAtPiBJTkYKKyVFIC1pbmYgLT4gLUlORgorCistLSAnZycgY29kZSBmb3JtYXR0aW5nLgorCistLSB6ZXJvcworJS4wZyAwIC0+IDAKKyUuMWcgMCAtPiAwCislLjJnIDAgLT4gMAorJS4zZyAwIC0+IDAKKyUuNGcgMCAtPiAwCislLjEwZyAwIC0+IDAKKyUuNTBnIDAgLT4gMAorJS4xMDBnIDAgLT4gMAorCistLSBwcmVjaXNpb24gMCBkb2Vzbid0IG1ha2UgYSBsb3Qgb2Ygc2Vuc2UgZm9yIHRoZSAnZycgY29kZSAod2hhdCBkb2VzCistLSBpdCBtZWFuIHRvIGhhdmUgbm8gc2lnbmlmaWNhbnQgZGlnaXRzPyk7IGluIHByYWN0aWNlLCBpdCdzIGludGVycHJldGVkCistLSBhcyBpZGVudGljYWwgdG8gcHJlY2lzaW9uIDEKKyUuMGcgMTAwMCAtPiAxZSswMworJS4wZyAxMDAgLT4gMWUrMDIKKyUuMGcgMTAgLT4gMWUrMDEKKyUuMGcgMSAtPiAxCislLjBnIDAuMSAtPiAwLjEKKyUuMGcgMC4wMSAtPiAwLjAxCislLjBnIDFlLTMgLT4gMC4wMDEKKyUuMGcgMWUtNCAtPiAwLjAwMDEKKyUuMGcgMWUtNSAtPiAxZS0wNQorJS4wZyAxZS02IC0+IDFlLTA2CislLjBnIDEyIC0+IDFlKzAxCislLjBnIDEyMCAtPiAxZSswMgorJS4wZyAxLjIgLT4gMQorJS4wZyAwLjEyIC0+IDAuMQorJS4wZyAwLjAxMiAtPiAwLjAxCislLjBnIDAuMDAxMiAtPiAwLjAwMQorJS4wZyAwLjAwMDEyIC0+IDAuMDAwMQorJS4wZyAwLjAwMDAxMiAtPiAxZS0wNQorJS4wZyAwLjAwMDAwMTIgLT4gMWUtMDYKKworLS0gcHJlY2lzaW9uIDEgaWRlbnRpY2FsIHRvIHByZWNpc2lvbiAwCislLjFnIDEwMDAgLT4gMWUrMDMKKyUuMWcgMTAwIC0+IDFlKzAyCislLjFnIDEwIC0+IDFlKzAxCislLjFnIDEgLT4gMQorJS4xZyAwLjEgLT4gMC4xCislLjFnIDAuMDEgLT4gMC4wMQorJS4xZyAxZS0zIC0+IDAuMDAxCislLjFnIDFlLTQgLT4gMC4wMDAxCislLjFnIDFlLTUgLT4gMWUtMDUKKyUuMWcgMWUtNiAtPiAxZS0wNgorJS4xZyAxMiAtPiAxZSswMQorJS4xZyAxMjAgLT4gMWUrMDIKKyUuMWcgMS4yIC0+IDEKKyUuMWcgMC4xMiAtPiAwLjEKKyUuMWcgMC4wMTIgLT4gMC4wMQorJS4xZyAwLjAwMTIgLT4gMC4wMDEKKyUuMWcgMC4wMDAxMiAtPiAwLjAwMDEKKyUuMWcgMC4wMDAwMTIgLT4gMWUtMDUKKyUuMWcgMC4wMDAwMDEyIC0+IDFlLTA2CisKKy0tIHByZWNpc2lvbiAyCislLjJnIDEwMDAgLT4gMWUrMDMKKyUuMmcgMTAwIC0+IDFlKzAyCislLjJnIDEwIC0+IDEwCislLjJnIDEgLT4gMQorJS4yZyAwLjEgLT4gMC4xCislLjJnIDAuMDEgLT4gMC4wMQorJS4yZyAwLjAwMSAtPiAwLjAwMQorJS4yZyAxZS00IC0+IDAuMDAwMQorJS4yZyAxZS01IC0+IDFlLTA1CislLjJnIDFlLTYgLT4gMWUtMDYKKyUuMmcgMTIzNCAtPiAxLjJlKzAzCislLjJnIDEyMyAtPiAxLjJlKzAyCislLjJnIDEyLjMgLT4gMTIKKyUuMmcgMS4yMyAtPiAxLjIKKyUuMmcgMC4xMjMgLT4gMC4xMgorJS4yZyAwLjAxMjMgLT4gMC4wMTIKKyUuMmcgMC4wMDEyMyAtPiAwLjAwMTIKKyUuMmcgMC4wMDAxMjMgLT4gMC4wMDAxMgorJS4yZyAwLjAwMDAxMjMgLT4gMS4yZS0wNQorCistLSBhbHRlcm5hdGUgZyBmb3JtYXR0aW5nOiAgYWx3YXlzIGluY2x1ZGUgZGVjaW1hbCBwb2ludCBhbmQKKy0tIGV4YWN0bHkgPHByZWNpc2lvbj4gc2lnbmlmaWNhbnQgZGlnaXRzLgorJSMuMGcgMCAtPiAwLgorJSMuMWcgMCAtPiAwLgorJSMuMmcgMCAtPiAwLjAKKyUjLjNnIDAgLT4gMC4wMAorJSMuNGcgMCAtPiAwLjAwMAorCislIy4wZyAwLjIgLT4gMC4yCislIy4xZyAwLjIgLT4gMC4yCislIy4yZyAwLjIgLT4gMC4yMAorJSMuM2cgMC4yIC0+IDAuMjAwCislIy40ZyAwLjIgLT4gMC4yMDAwCislIy4xMGcgMC4yIC0+IDAuMjAwMDAwMDAwMAorCislIy4wZyAyIC0+IDIuCislIy4xZyAyIC0+IDIuCislIy4yZyAyIC0+IDIuMAorJSMuM2cgMiAtPiAyLjAwCislIy40ZyAyIC0+IDIuMDAwCisKKyUjLjBnIDIwIC0+IDIuZSswMQorJSMuMWcgMjAgLT4gMi5lKzAxCislIy4yZyAyMCAtPiAyMC4KKyUjLjNnIDIwIC0+IDIwLjAKKyUjLjRnIDIwIC0+IDIwLjAwCisKKyUjLjBnIDIzNC41NiAtPiAyLmUrMDIKKyUjLjFnIDIzNC41NiAtPiAyLmUrMDIKKyUjLjJnIDIzNC41NiAtPiAyLjNlKzAyCislIy4zZyAyMzQuNTYgLT4gMjM1LgorJSMuNGcgMjM0LjU2IC0+IDIzNC42CislIy41ZyAyMzQuNTYgLT4gMjM0LjU2CislIy42ZyAyMzQuNTYgLT4gMjM0LjU2MAorCistLSBuYW5zIGFuZCBpbmZpbml0aWVzCislZyBuYW4gLT4gbmFuCislZyBpbmYgLT4gaW5mCislZyAtaW5maW5pdHkgLT4gLWluZgorJUcgbmFuIC0+IE5BTgorJUcgaW5maW5pdHkgLT4gSU5GCislRyAtaW5mIC0+IC1JTkYKKworLS0gZm9yIHJlcHIgZm9ybWF0dGluZyBzZWUgdGhlIHNlcGFyYXRlIHRlc3Rfc2hvcnRfcmVwciB0ZXN0IGluCistLSB0ZXN0X2Zsb2F0LnB5LiAgTm90IGFsbCBwbGF0Zm9ybXMgdXNlIHNob3J0IHJlcHIgZm9yIGZsb2F0cy4KKworLS0gc3RyIGZvcm1hdHRpbmcuICBSZXN1bHQgYWx3YXlzIGluY2x1ZGVzIGRlY2ltYWwgcG9pbnQgYW5kIGF0CistLSBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgdGhlIHBvaW50LCBvciBhbiBleHBvbmVudC4KKyVzIDAgLT4gMC4wCislcyAxIC0+IDEuMAorCislcyAwLjAxIC0+IDAuMDEKKyVzIDAuMDIgLT4gMC4wMgorJXMgMC4wMyAtPiAwLjAzCislcyAwLjA0IC0+IDAuMDQKKyVzIDAuMDUgLT4gMC4wNQorCistLSBzdHIgdHJ1bmNhdGVzIHRvIDEyIHNpZ25pZmljYW50IGRpZ2l0cworJXMgMS4yMzQxMjM0MTIzNDEgLT4gMS4yMzQxMjM0MTIzNAorJXMgMS4yMzQxMjM0MTIzNCAtPiAxLjIzNDEyMzQxMjM0CislcyAxLjIzNDEyMzQxMjMgLT4gMS4yMzQxMjM0MTIzCisKKy0tIHZhbHVlcyA+PSAxZTExIGdldCBhbiBleHBvbmVudAorJXMgMTAgLT4gMTAuMAorJXMgMTAwIC0+IDEwMC4wCislcyAxZTEwIC0+IDEwMDAwMDAwMDAwLjAKKyVzIDkuOTk5ZTEwIC0+IDk5OTkwMDAwMDAwLjAKKyVzIDk5OTk5OTk5OTk5IC0+IDk5OTk5OTk5OTk5LjAKKyVzIDk5OTk5OTk5OTk5LjkgLT4gOTk5OTk5OTk5OTkuOQorJXMgOTk5OTk5OTk5OTkuOTkgLT4gMWUrMTEKKyVzIDFlMTEgLT4gMWUrMTEKKyVzIDFlMTIgLT4gMWUrMTIKKworLS0gYXMgZG8gdmFsdWVzIDwgMWUtNAorJXMgMWUtMyAtPiAwLjAwMQorJXMgMS4wMDFlLTQgLT4gMC4wMDAxMDAxCislcyAxLjAwMDAwMDAwMDAwMWUtNCAtPiAwLjAwMDEKKyVzIDEuMDAwMDAwMDAwMDFlLTQgLT4gMC4wMDAxMDAwMDAwMDAwMDEKKyVzIDEuMDAwMDAwMDAwMWUtNCAtPiAwLjAwMDEwMDAwMDAwMDAxCislcyAxZS00IC0+IDAuMDAwMQorJXMgMC45OTk5OTk5OTk5OTllLTQgLT4gOS45OTk5OTk5OTk5OWUtMDUKKyVzIDAuOTk5ZS00IC0+IDkuOTllLTA1CislcyAxZS01IC0+IDFlLTA1CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9nZGJfc2FtcGxlLnB5IGIvTGliL3Rlc3QvZ2RiX3NhbXBsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzMyYjI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZ2RiX3NhbXBsZS5weQpAQCAtMCwwICsxLDEyIEBACisjIFNhbXBsZSBzY3JpcHQgZm9yIHVzZSBieSB0ZXN0X2dkYi5weQorCitkZWYgZm9vKGEsIGIsIGMpOgorICAgIGJhcihhLCBiLCBjKQorCitkZWYgYmFyKGEsIGIsIGMpOgorICAgIGJheihhLCBiLCBjKQorCitkZWYgYmF6KCphcmdzKToKKyAgICBwcmludCg0MikKKworZm9vKDEsIDIsIDMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9pZWVlNzU0LnR4dCBiL0xpYi90ZXN0L2llZWU3NTQudHh0CmluZGV4IDVhNDFjOGYuLjg5YmIwYzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2llZWU3NTQudHh0CisrKyBiL0xpYi90ZXN0L2llZWU3NTQudHh0CkBAIC03Miw3ICs3Miw3IEBACiA+Pj4gTkFOID49IDAKIEZhbHNlCiAKLUFsbCBvcGVyYXRpb25zIGludm9sdmluZyBhIE5hTiByZXR1cm4gYSBOYU4gZXhjZXB0IGZvciB0aGUgcG93ZXIgb2YgKjAqIGFuZCAqMSouCitBbGwgb3BlcmF0aW9ucyBpbnZvbHZpbmcgYSBOYU4gcmV0dXJuIGEgTmFOIGV4Y2VwdCBmb3IgbmFuKiowIGFuZCAxKipuYW4uCiA+Pj4gMSArIE5BTgogbmFuCiA+Pj4gMSAqIE5BTgpAQCAtODEsOCArODEsMTAgQEAKIG5hbgogPj4+IDEgKiogTkFOCiAxLjAKKz4+PiBOQU4gKiogMAorMS4wCiA+Pj4gMCAqKiBOQU4KLTAuMAorbmFuCiA+Pj4gKDEuMCArIEZJLmVwc2lsb24pICogTkFOCiBuYW4KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbGVha2Vycy90ZXN0X2RpY3RzZWxmLnB5IGIvTGliL3Rlc3QvbGVha2Vycy90ZXN0X2RpY3RzZWxmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YmQzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZGljdHNlbGYucHkKQEAgLTAsMCArMSwxMiBAQAorJycnVGVzdCBjYXNlIGZvciAic2VsZi5fX2RpY3RfXyA9IHNlbGYiIGNpcmN1bGFyIHJlZmVyZW5jZSBidWcgKCMxNDY5NjI5KScnJworCitpbXBvcnQgZ2MKKworY2xhc3MgTGVha3lEaWN0KGRpY3QpOgorICAgIHBhc3MKKworZGVmIGxlYWsoKToKKyAgICBsZCA9IExlYWt5RGljdCgpCisgICAgbGQuX19kaWN0X18gPSBsZAorICAgIGRlbCBsZAorICAgIGdjLmNvbGxlY3QoKTsgZ2MuY29sbGVjdCgpOyBnYy5jb2xsZWN0KCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2xpc3RfdGVzdHMucHkgYi9MaWIvdGVzdC9saXN0X3Rlc3RzLnB5CmluZGV4IGU0MjU0ZWYuLmI4ZDZkNmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2xpc3RfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvbGlzdF90ZXN0cy5weQpAQCAtMzMwLDcgKzMzMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhZEV4YywgZC5yZW1vdmUsICdjJykKICAgICAgICAgZm9yIHgsIHkgaW4gemlwKGQsIGUpOgogICAgICAgICAgICAgIyB2ZXJpZnkgdGhhdCBvcmlnaW5hbCBvcmRlciBhbmQgdmFsdWVzIGFyZSByZXRhaW5lZC4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHgsIHkpCiAKICAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKICAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyXSkqMwpAQCAtNDE5LDcgKzQxOSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdS5yZXZlcnNlLCA0MikKIAogICAgIGRlZiB0ZXN0X3NvcnQoc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAgICAgICAgICgidGhlIGNtcCBhcmd1bWVudCBpcyBub3Qgc3VwcG9ydGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICBzZWxmLl90ZXN0X3NvcnQoKQogCkBAIC00NjYsNyArNDY2LDcgQEAKICAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKICAgICAgICAgdTIgPSB1CiAgICAgICAgIHUgKz0gWzIsIDNdCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1IGlzIHUyKQorICAgICAgICBzZWxmLmFzc2VydElzKHUsIHUyKQogCiAgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdCgic3BhbSIpCiAgICAgICAgIHUgKz0gImVnZ3MiCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5IGIvTGliL3Rlc3QvbG9ja190ZXN0cy5weQppbmRleCA4NTVhZDQ2Li45NjZmOWJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKQEAgLTI1NywxMCArMjU3LDggQEAKICAgICAgICAgcmVzdWx0czEgPSBbXQogICAgICAgICByZXN1bHRzMiA9IFtdCiAgICAgICAgIGRlZiBmKCk6Ci0gICAgICAgICAgICBldnQud2FpdCgpCi0gICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoZXZ0LmlzX3NldCgpKQotICAgICAgICAgICAgZXZ0LndhaXQoKQotICAgICAgICAgICAgcmVzdWx0czIuYXBwZW5kKGV2dC5pc19zZXQoKSkKKyAgICAgICAgICAgIHJlc3VsdHMxLmFwcGVuZChldnQud2FpdCgpKQorICAgICAgICAgICAgcmVzdWx0czIuYXBwZW5kKGV2dC53YWl0KCkpCiAgICAgICAgIGIgPSBCdW5jaChmLCBOKQogICAgICAgICBiLndhaXRfZm9yX3N0YXJ0ZWQoKQogICAgICAgICBfd2FpdCgpCkBAIC0yODQsMTEgKzI4Miw5IEBACiAgICAgICAgIHJlc3VsdHMyID0gW10KICAgICAgICAgTiA9IDUKICAgICAgICAgZGVmIGYoKToKLSAgICAgICAgICAgIGV2dC53YWl0KDAuMCkKLSAgICAgICAgICAgIHJlc3VsdHMxLmFwcGVuZChldnQuaXNfc2V0KCkpCisgICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoZXZ0LndhaXQoMC4wKSkKICAgICAgICAgICAgIHQxID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIGV2dC53YWl0KDAuMikKLSAgICAgICAgICAgIHIgPSBldnQuaXNfc2V0KCkKKyAgICAgICAgICAgIHIgPSBldnQud2FpdCgwLjIpCiAgICAgICAgICAgICB0MiA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICByZXN1bHRzMi5hcHBlbmQoKHIsIHQyIC0gdDEpKQogICAgICAgICBCdW5jaChmLCBOKS53YWl0X2Zvcl9maW5pc2hlZCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tYXBwaW5nX3Rlc3RzLnB5IGIvTGliL3Rlc3QvbWFwcGluZ190ZXN0cy5weQppbmRleCA2YzRlNmVjLi40OWY2Mzc5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tYXBwaW5nX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L21hcHBpbmdfdGVzdHMucHkKQEAgLTUxLDE3ICs1MSwxNyBAQAogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnJlZmVyZW5jZS5pdGVtcygpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2tleV0sIHZhbHVlKQogICAgICAgICBrbm93bmtleSA9IHNlbGYub3RoZXIua2V5cygpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhLZXlFcnJvciwgbGFtYmRhOmRba25vd25rZXldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOmRba25vd25rZXldKQogICAgICAgICAjbGVuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHApLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgbGVuKHNlbGYucmVmZXJlbmNlKSkKICAgICAgICAgI2luCiAgICAgICAgIGZvciBrIGluIHNlbGYucmVmZXJlbmNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGsgaW4gZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgZCkKICAgICAgICAgZm9yIGsgaW4gc2VsZi5vdGhlcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrIG5vdCBpbiBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrLCBkKQogICAgICAgICAjaGFzX2tleQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncyhxdWlldD1UcnVlKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncyhxdWlldD1UcnVlKToKICAgICAgICAgICAgIGZvciBrIGluIHNlbGYucmVmZXJlbmNlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmhhc19rZXkoaykpCiAgICAgICAgICAgICBmb3IgayBpbiBzZWxmLm90aGVyOgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgIGlmIG5vdCBkOiBzZWxmLmZhaWwoIkZ1bGwgbWFwcGluZyBtdXN0IGNvbXBhcmUgdG8gVHJ1ZSIpCiAgICAgICAgICMga2V5cygpLCBpdGVtcygpLCBpdGVya2V5cygpIC4uLgogICAgICAgICBkZWYgY2hlY2tfaXRlcmFuZGxpc3QoaXRlciwgbHN0LCByZWYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoaXRlciwgJ25leHQnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKGl0ZXIsICdfX2l0ZXJfXycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoaXRlciwgJ25leHQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGl0ZXIsICdfX2l0ZXJfXycpKQogICAgICAgICAgICAgeCA9IGxpc3QoaXRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzZXQoeCk9PXNldChsc3QpPT1zZXQocmVmKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQoeCk9PXNldChsc3QpPT1zZXQocmVmKSkKICAgICAgICAgY2hlY2tfaXRlcmFuZGxpc3QoZC5pdGVya2V5cygpLCBkLmtleXMoKSwgc2VsZi5yZWZlcmVuY2Uua2V5cygpKQogICAgICAgICBjaGVja19pdGVyYW5kbGlzdChpdGVyKGQpLCBkLmtleXMoKSwgc2VsZi5yZWZlcmVuY2Uua2V5cygpKQogICAgICAgICBjaGVja19pdGVyYW5kbGlzdChkLml0ZXJ2YWx1ZXMoKSwgZC52YWx1ZXMoKSwgc2VsZi5yZWZlcmVuY2UudmFsdWVzKCkpCkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgIGtub3dua2V5LCBrbm93bnZhbHVlID0gc2VsZi5vdGhlci5pdGVyaXRlbXMoKS5uZXh0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChrZXksIGtub3dudmFsdWUpLCB2YWx1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChrbm93bmtleSwga25vd252YWx1ZSksIGtub3dudmFsdWUpCi0gICAgICAgIHNlbGYuZmFpbElmKGtub3dua2V5IGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa25vd25rZXksIGQpCiAKICAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciB3cml0ZSBvcGVyYXRpb25zIG9uIG1hcHBpbmcKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwW2tleV0sIHZhbHVlKQogICAgICAgICBmb3Iga2V5IGluIHNlbGYucmVmZXJlbmNlLmtleXMoKToKICAgICAgICAgICAgIGRlbCBwW2tleV0KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhLZXlFcnJvciwgbGFtYmRhOnBba2V5XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6cFtrZXldKQogICAgICAgICBwID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCiAgICAgICAgICN1cGRhdGUKICAgICAgICAgcC51cGRhdGUoc2VsZi5yZWZlcmVuY2UpCkBAIC0xMTksMTYgKzExOSwxNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRba25vd25rZXldLCBrbm93bnZhbHVlKQogICAgICAgICAjcG9wCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wb3Aoa25vd25rZXkpLCBrbm93bnZhbHVlKQotICAgICAgICBzZWxmLmZhaWxJZihrbm93bmtleSBpbiBkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtub3dua2V5LCBkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3AsIGtub3dua2V5KQogICAgICAgICBkZWZhdWx0ID0gOTA5CiAgICAgICAgIGRba25vd25rZXldID0ga25vd252YWx1ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGtub3dua2V5LCBkZWZhdWx0KSwga25vd252YWx1ZSkKLSAgICAgICAgc2VsZi5mYWlsSWYoa25vd25rZXkgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrbm93bmtleSwgZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrbm93bmtleSwgZGVmYXVsdCksIGRlZmF1bHQpCiAgICAgICAgICNwb3BpdGVtCiAgICAgICAgIGtleSwgdmFsdWUgPSBkLnBvcGl0ZW0oKQotICAgICAgICBzZWxmLmZhaWxJZihrZXkgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrZXksIGQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIHNlbGYucmVmZXJlbmNlW2tleV0pCiAgICAgICAgIHA9c2VsZi5fZW1wdHlfbWFwcGluZygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBwLnBvcGl0ZW0pCkBAIC0xMzcsMTcgKzEzNywxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VtcHR5X21hcHBpbmcoKSwgc2VsZi5fZW1wdHlfbWFwcGluZygpKQogCiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBzZWxmLl9lbXB0eV9tYXBwaW5nKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnJlZmVyZW5jZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGJvb2woc2VsZi5fZW1wdHlfbWFwcGluZygpKSBpcyBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGJvb2woc2VsZi5yZWZlcmVuY2UpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5fZW1wdHlfbWFwcGluZygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5yZWZlcmVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShib29sKHNlbGYuX2VtcHR5X21hcHBpbmcoKSkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShib29sKHNlbGYucmVmZXJlbmNlKSBpcyBUcnVlKQogCiAgICAgZGVmIHRlc3Rfa2V5cyhzZWxmKToKICAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQua2V5cygpLCBbXSkKICAgICAgICAgZCA9IHNlbGYucmVmZXJlbmNlCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmlubWFwcGluZy5rZXlzKClbMF0gaW4gZC5rZXlzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm90aGVyLmtleXMoKVswXSBub3QgaW4gZC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5pbm1hcHBpbmcua2V5cygpWzBdLCBkLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzZWxmLm90aGVyLmtleXMoKVswXSwgZC5rZXlzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5rZXlzLCBOb25lKQogCiAgICAgZGVmIHRlc3RfdmFsdWVzKHNlbGYpOgpAQCAtMjczLDEwICsyNzMsMTAgQEAKIAogICAgIGRlZiB0ZXN0X2dldChzZWxmKToKICAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQotICAgICAgICBzZWxmLmFzc2VydF8oZC5nZXQoc2VsZi5vdGhlci5rZXlzKClbMF0pIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldChzZWxmLm90aGVyLmtleXMoKVswXSkgaXMgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChzZWxmLm90aGVyLmtleXMoKVswXSwgMyksIDMpCiAgICAgICAgIGQgPSBzZWxmLnJlZmVyZW5jZQotICAgICAgICBzZWxmLmFzc2VydF8oZC5nZXQoc2VsZi5vdGhlci5rZXlzKClbMF0pIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldChzZWxmLm90aGVyLmtleXMoKVswXSkgaXMgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChzZWxmLm90aGVyLmtleXMoKVswXSwgMyksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoc2VsZi5pbm1hcHBpbmcua2V5cygpWzBdKSwgc2VsZi5pbm1hcHBpbmcudmFsdWVzKClbMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoc2VsZi5pbm1hcHBpbmcua2V5cygpWzBdLCAzKSwgc2VsZi5pbm1hcHBpbmcudmFsdWVzKClbMF0pCkBAIC0zMDcsMTUgKzMwNywxNSBAQAogY2xhc3MgVGVzdE1hcHBpbmdQcm90b2NvbChCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgogICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9jb25zdHJ1Y3RvcihzZWxmKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fZW1wdHlfbWFwcGluZygpIGlzIG5vdCBzZWxmLl9lbXB0eV9tYXBwaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl9lbXB0eV9tYXBwaW5nKCkgaXMgbm90IHNlbGYuX2VtcHR5X21hcHBpbmcoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdCh4PTEsIHk9MiksIHsieCI6IDEsICJ5IjogMn0pCiAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9ib29sKHNlbGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgc2VsZi5fZW1wdHlfbWFwcGluZygpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fZnVsbF9tYXBwaW5nKHsieCI6ICJ5In0pKQotICAgICAgICBzZWxmLmFzc2VydF8oYm9vbChzZWxmLl9lbXB0eV9tYXBwaW5nKCkpIGlzIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydF8oYm9vbChzZWxmLl9mdWxsX21hcHBpbmcoeyJ4IjogInkifSkpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5fZW1wdHlfbWFwcGluZygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5fZnVsbF9tYXBwaW5nKHsieCI6ICJ5In0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChzZWxmLl9lbXB0eV9tYXBwaW5nKCkpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChzZWxmLl9mdWxsX21hcHBpbmcoeyJ4IjogInkifSkpIGlzIFRydWUpCiAKICAgICBkZWYgdGVzdF9rZXlzKHNlbGYpOgogICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9rZXlzKHNlbGYpCkBAIC0zMjMsOSArMzIzLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmtleXMoKSwgW10pCiAgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoeydhJzogMSwgJ2InOiAyfSkKICAgICAgICAgayA9IGQua2V5cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgaW4gaykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdiJyBpbiBrKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2MnIG5vdCBpbiBrKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgaykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYicsIGspCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2MnLCBrKQogCiAgICAgZGVmIHRlc3RfdmFsdWVzKHNlbGYpOgogICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF92YWx1ZXMoc2VsZikKQEAgLTM0MCw3ICszNDAsNyBAQAogCiAgICAgZGVmIHRlc3RfaGFzX2tleShzZWxmKToKICAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGQuaGFzX2tleSgnYScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGQuaGFzX2tleSgnYScpKQogICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsnYSc6IDEsICdiJzogMn0pCiAgICAgICAgIGsgPSBkLmtleXMoKQogICAgICAgICBrLnNvcnQoKQpAQCAtMzUwLDEyICszNTAsMTMgQEAKIAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgogICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKCdhJyBpbiBkKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBub3QgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKCdhJyBpbiBkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBub3QgaW4gZCkKICAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7J2EnOiAxLCAnYic6IDJ9KQotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIGluIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYicgaW4gZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdjJyBub3QgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2InLCBkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdjJywgZCkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuX19jb250YWluc19fKQogCkBAIC00MzQsNyArNDM1LDcgQEAKICAgICBkZWYgdGVzdF9mcm9ta2V5cyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdC5mcm9ta2V5cygnYWJjJyksIHsnYSc6Tm9uZSwgJ2InOk5vbmUsICdjJzpOb25lfSkKICAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQotICAgICAgICBzZWxmLmFzc2VydF8obm90KGQuZnJvbWtleXMoJ2FiYycpIGlzIGQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90KGQuZnJvbWtleXMoJ2FiYycpIGlzIGQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZnJvbWtleXMoJ2FiYycpLCB7J2EnOk5vbmUsICdiJzpOb25lLCAnYyc6Tm9uZX0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cygoNCw1KSwwKSwgezQ6MCwgNTowfSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKFtdKSwge30pCkBAIC00NDUsMTcgKzQ0NiwxNyBAQAogICAgICAgICBjbGFzcyBkaWN0bGlrZShzZWxmLnR5cGUydGVzdCk6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0bGlrZS5mcm9ta2V5cygnYScpLCB7J2EnOk5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKSwgeydhJzpOb25lfSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRpY3RsaWtlLmZyb21rZXlzKCdhJykuX19jbGFzc19fIGlzIGRpY3RsaWtlKQotICAgICAgICBzZWxmLmFzc2VydF8oZGljdGxpa2UoKS5mcm9ta2V5cygnYScpLl9fY2xhc3NfXyBpcyBkaWN0bGlrZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpY3RsaWtlLmZyb21rZXlzKCdhJykuX19jbGFzc19fIGlzIGRpY3RsaWtlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGljdGxpa2UoKS5mcm9ta2V5cygnYScpLl9fY2xhc3NfXyBpcyBkaWN0bGlrZSkKICAgICAgICAgIyBGSVhNRTogdGhlIGZvbGxvd2luZyB3b24ndCB3b3JrIHdpdGggVXNlckRpY3QsIGJlY2F1c2UgaXQncyBhbiBvbGQgc3R5bGUgY2xhc3MKLSAgICAgICAgIyBzZWxmLmFzc2VydF8odHlwZShkaWN0bGlrZS5mcm9ta2V5cygnYScpKSBpcyBkaWN0bGlrZSkKKyAgICAgICAgIyBzZWxmLmFzc2VydFRydWUodHlwZShkaWN0bGlrZS5mcm9ta2V5cygnYScpKSBpcyBkaWN0bGlrZSkKICAgICAgICAgY2xhc3MgbXlkaWN0KHNlbGYudHlwZTJ0ZXN0KToKICAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFVzZXJEaWN0LlVzZXJEaWN0KCkKICAgICAgICAgdWQgPSBteWRpY3QuZnJvbWtleXMoJ2FiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ZCwgeydhJzpOb25lLCAnYic6Tm9uZX0pCiAgICAgICAgICMgRklYTUU6IHRoZSBmb2xsb3dpbmcgd29uJ3Qgd29yayB3aXRoIFVzZXJEaWN0LCBiZWNhdXNlIGl0J3MgYW4gb2xkIHN0eWxlIGNsYXNzCi0gICAgICAgICMgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodWQsIFVzZXJEaWN0LlVzZXJEaWN0KSkKKyAgICAgICAgIyBzZWxmLmFzc2VydElzSW5zdGFuY2UodWQsIFVzZXJEaWN0LlVzZXJEaWN0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpY3QuZnJvbWtleXMpCiAKICAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKQEAgLTQ4NSwxNiArNDg2LDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb3B5KCksIHsxOjEsIDI6MiwgMzozfSkKICAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY29weSgpLCBkKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShkLmNvcHkoKSwgZC5fX2NsYXNzX18pKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZC5jb3B5KCksIGQuX19jbGFzc19fKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuY29weSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2dldChzZWxmKToKICAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfZ2V0KHNlbGYpCiAgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuZ2V0KCdjJykgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuZ2V0KCdjJykgaXMgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYycsIDMpLCAzKQogICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsnYScgOiAxLCAnYicgOiAyfSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuZ2V0KCdjJykgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuZ2V0KCdjJykgaXMgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYycsIDMpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhJyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2EnLCAzKSwgMSkKQEAgLTUwMiw5ICs1MDMsOSBAQAogICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CiAgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X3NldGRlZmF1bHQoc2VsZikKICAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQotICAgICAgICBzZWxmLmFzc2VydF8oZC5zZXRkZWZhdWx0KCdrZXkwJykgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuc2V0ZGVmYXVsdCgna2V5MCcpIGlzIE5vbmUpCiAgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5MCcsIFtdKQotICAgICAgICBzZWxmLmFzc2VydF8oZC5zZXRkZWZhdWx0KCdrZXkwJykgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuc2V0ZGVmYXVsdCgna2V5MCcpIGlzIE5vbmUpCiAgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5JywgW10pLmFwcGVuZCgzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2tleSddWzBdLCAzKQogICAgICAgICBkLnNldGRlZmF1bHQoJ2tleScsIFtdKS5hcHBlbmQoNCkKQEAgLTUzMCw5ICs1MzEsOSBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhLCBpbnQoa2EpKQogICAgICAgICAgICAgICAgICAgICBrYiwgdmIgPSB0YiA9IGIucG9waXRlbSgpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmIsIGludChrYikpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QoY29weW1vZGUgPCAwIGFuZCB0YSAhPSB0YikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBhKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgYikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdChjb3B5bW9kZSA8IDAgYW5kIHRhICE9IHRiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBiKQogCiAgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgogICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9wb3Aoc2VsZikKQEAgLTU5MCw3ICs1OTEsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBVc2VyRGljdC5Vc2VyRGljdCgpCiAgICAgICAgIHVkID0gbXlkaWN0LmZyb21rZXlzKCdhYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWQsIHsnYSc6Tm9uZSwgJ2InOk5vbmV9KQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh1ZCwgVXNlckRpY3QuVXNlckRpY3QpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodWQsIFVzZXJEaWN0LlVzZXJEaWN0KQogCiAgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgogICAgICAgICBUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfcG9wKHNlbGYpCkBAIC02NDEsOCArNjQyLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCByZXByLCBkKQogCiAgICAgZGVmIHRlc3RfbGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKHNlbGYuX2VtcHR5X21hcHBpbmcoKSA8IHNlbGYuX2VtcHR5X21hcHBpbmcoKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKHNlbGYuX2Z1bGxfbWFwcGluZyh7MTogMn0pIDwgc2VsZi5fZnVsbF9tYXBwaW5nKHsxTDogMkx9KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKHNlbGYuX2VtcHR5X21hcHBpbmcoKSA8IHNlbGYuX2VtcHR5X21hcHBpbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKHNlbGYuX2Z1bGxfbWFwcGluZyh7MTogMn0pIDwgc2VsZi5fZnVsbF9tYXBwaW5nKHsxTDogMkx9KSkpCiAKICAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbWF0aF90ZXN0Y2FzZXMudHh0IGIvTGliL3Rlc3QvbWF0aF90ZXN0Y2FzZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMWE0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9tYXRoX3Rlc3RjYXNlcy50eHQKQEAgLTAsMCArMSw0NDcgQEAKKy0tIFRlc3RjYXNlcyBmb3IgZnVuY3Rpb25zIGluIG1hdGguCistLQorLS0gRWFjaCBsaW5lIHRha2VzIHRoZSBmb3JtOgorLS0KKy0tIDx0ZXN0aWQ+IDxmdW5jdGlvbj4gPGlucHV0X3ZhbHVlPiAtPiA8b3V0cHV0X3ZhbHVlPiA8ZmxhZ3M+CistLQorLS0gd2hlcmU6CistLQorLS0gICA8dGVzdGlkPiBpcyBhIHNob3J0IG5hbWUgaWRlbnRpZnlpbmcgdGhlIHRlc3QsCistLQorLS0gICA8ZnVuY3Rpb24+IGlzIHRoZSBmdW5jdGlvbiB0byBiZSB0ZXN0ZWQgKGV4cCwgY29zLCBhc2luaCwgLi4uKSwKKy0tCistLSAgIDxpbnB1dF92YWx1ZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUKKy0tCistLSAgIDxvdXRwdXRfdmFsdWU+IGlzIHRoZSBleHBlY3RlZCAoaWRlYWwpIG91dHB1dCB2YWx1ZSwgYWdhaW4KKy0tICAgICByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KKy0tCistLSAgIDxmbGFncz4gaXMgYSBsaXN0IG9mIHRoZSBmbG9hdGluZy1wb2ludCBmbGFncyByZXF1aXJlZCBieSBDOTkKKy0tCistLSBUaGUgcG9zc2libGUgZmxhZ3MgYXJlOgorLS0KKy0tICAgZGl2aWRlLWJ5LXplcm8gOiByYWlzZWQgd2hlbiBhIGZpbml0ZSBpbnB1dCBnaXZlcyBhCistLSAgICAgbWF0aGVtYXRpY2FsbHkgaW5maW5pdGUgcmVzdWx0LgorLS0KKy0tICAgb3ZlcmZsb3cgOiByYWlzZWQgd2hlbiBhIGZpbml0ZSBpbnB1dCBnaXZlcyBhIGZpbml0ZSByZXN1bHQgdGhhdAorLS0gICAgIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gdGhlIHVzdWFsIHJhbmdlIG9mIGFuIElFRUUgNzU0IGRvdWJsZS4KKy0tCistLSAgIGludmFsaWQgOiByYWlzZWQgZm9yIGludmFsaWQgaW5wdXRzIChlLmcuLCBzcXJ0KC0xKSkKKy0tCistLSAgIGlnbm9yZS1zaWduIDogaW5kaWNhdGVzIHRoYXQgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdCBpcworLS0gICAgIHVuc3BlY2lmaWVkOyBlLmcuLCBpZiB0aGUgcmVzdWx0IGlzIGdpdmVuIGFzIGluZiwKKy0tICAgICB0aGVuIGJvdGggLWluZiBhbmQgaW5mIHNob3VsZCBiZSBhY2NlcHRlZCBhcyBjb3JyZWN0LgorLS0KKy0tIEZsYWdzIG1heSBhcHBlYXIgaW4gYW55IG9yZGVyLgorLS0KKy0tIExpbmVzIGJlZ2lubmluZyB3aXRoICctLScgKGxpa2UgdGhpcyBvbmUpIHN0YXJ0IGEgY29tbWVudCwgYW5kIGFyZQorLS0gaWdub3JlZC4gIEJsYW5rIGxpbmVzLCBvciBsaW5lcyBjb250YWluaW5nIG9ubHkgd2hpdGVzcGFjZSwgYXJlIGFsc28KKy0tIGlnbm9yZWQuCisKKy0tIE1hbnkgb2YgdGhlIHZhbHVlcyBiZWxvdyB3ZXJlIGNvbXB1dGVkIHdpdGggdGhlIGhlbHAgb2YKKy0tIHZlcnNpb24gMi40IG9mIHRoZSBNUEZSIGxpYnJhcnkgZm9yIG11bHRpcGxlLXByZWNpc2lvbgorLS0gZmxvYXRpbmctcG9pbnQgY29tcHV0YXRpb25zIHdpdGggY29ycmVjdCByb3VuZGluZy4gIEFsbCBvdXRwdXQKKy0tIHZhbHVlcyBpbiB0aGlzIGZpbGUgYXJlIChtb2R1bG8geWV0LXRvLWJlLWRpc2NvdmVyZWQgYnVncykKKy0tIGNvcnJlY3RseSByb3VuZGVkLCBwcm92aWRlZCB0aGF0IGVhY2ggaW5wdXQgYW5kIG91dHB1dCBkZWNpbWFsCistLSBmbG9hdGluZy1wb2ludCB2YWx1ZSBiZWxvdyBpcyBpbnRlcnByZXRlZCBhcyBhIHJlcHJlc2VudGF0aW9uIG9mCistLSB0aGUgY29ycmVzcG9uZGluZyBuZWFyZXN0IElFRUUgNzU0IGRvdWJsZS1wcmVjaXNpb24gdmFsdWUuICBTZWUgdGhlCistLSBNUEZSIGhvbWVwYWdlIGF0IGh0dHA6Ly93d3cubXBmci5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCistLSBNUEZSIHByb2plY3QuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZXJmOiBlcnJvciBmdW5jdGlvbiAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlcmYwMDAwIGVyZiAwLjAgLT4gMC4wCitlcmYwMDAxIGVyZiAtMC4wIC0+IC0wLjAKK2VyZjAwMDIgZXJmIGluZiAtPiAxLjAKK2VyZjAwMDMgZXJmIC1pbmYgLT4gLTEuMAorZXJmMDAwNCBlcmYgbmFuIC0+IG5hbgorCistLSB0aW55IHZhbHVlcworZXJmMDAxMCBlcmYgMWUtMzA4IC0+IDEuMTI4Mzc5MTY3MDk1NTEyNWUtMzA4CitlcmYwMDExIGVyZiA1ZS0zMjQgLT4gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQKK2VyZjAwMTIgZXJmIDFlLTEwIC0+IDEuMTI4Mzc5MTY3MDk1NTEyNmUtMTAKKworLS0gc21hbGwgaW50ZWdlcnMKK2VyZjAwMjAgZXJmIDEgLT4gMC44NDI3MDA3OTI5NDk3MTQ4OQorZXJmMDAyMSBlcmYgMiAtPiAwLjk5NTMyMjI2NTAxODk1MjcxCitlcmYwMDIyIGVyZiAzIC0+IDAuOTk5OTc3OTA5NTAzMDAxMzYKK2VyZjAwMjMgZXJmIDQgLT4gMC45OTk5OTk5ODQ1ODI3NDIwOQorZXJmMDAyNCBlcmYgNSAtPiAwLjk5OTk5OTk5OTk5ODQ2MjU2CitlcmYwMDI1IGVyZiA2IC0+IDEuMAorCitlcmYwMDMwIGVyZiAtMSAtPiAtMC44NDI3MDA3OTI5NDk3MTQ4OQorZXJmMDAzMSBlcmYgLTIgLT4gLTAuOTk1MzIyMjY1MDE4OTUyNzEKK2VyZjAwMzIgZXJmIC0zIC0+IC0wLjk5OTk3NzkwOTUwMzAwMTM2CitlcmYwMDMzIGVyZiAtNCAtPiAtMC45OTk5OTk5ODQ1ODI3NDIwOQorZXJmMDAzNCBlcmYgLTUgLT4gLTAuOTk5OTk5OTk5OTk4NDYyNTYKK2VyZjAwMzUgZXJmIC02IC0+IC0xLjAKKworLS0gaHVnZSB2YWx1ZXMgc2hvdWxkIGFsbCBnbyB0byArLy0xLCBkZXBlbmRpbmcgb24gc2lnbgorZXJmMDA0MCBlcmYgLTQwIC0+IC0xLjAKK2VyZjAwNDEgZXJmIDFlMTYgLT4gMS4wCitlcmYwMDQyIGVyZiAtMWUxNTAgLT4gLTEuMAorZXJmMDA0MyBlcmYgMS43ZTMwOCAtPiAxLjAKKworLS0gSXNzdWUgODk4NjogaW5wdXRzIHggd2l0aCBleHAoLXgqeCkgbmVhciB0aGUgdW5kZXJmbG93IHRocmVzaG9sZAorLS0gaW5jb3JyZWN0bHkgc2lnbmFsbGVkIG92ZXJmbG93IG9uIHNvbWUgcGxhdGZvcm1zLgorZXJmMDEwMCBlcmYgMjYuMiAtPiAxLjAKK2VyZjAxMDEgZXJmIDI2LjQgLT4gMS4wCitlcmYwMTAyIGVyZiAyNi42IC0+IDEuMAorZXJmMDEwMyBlcmYgMjYuOCAtPiAxLjAKK2VyZjAxMDQgZXJmIDI3LjAgLT4gMS4wCitlcmYwMTA1IGVyZiAyNy4yIC0+IDEuMAorZXJmMDEwNiBlcmYgMjcuNCAtPiAxLjAKK2VyZjAxMDcgZXJmIDI3LjYgLT4gMS4wCisKK2VyZjAxMTAgZXJmIC0yNi4yIC0+IC0xLjAKK2VyZjAxMTEgZXJmIC0yNi40IC0+IC0xLjAKK2VyZjAxMTIgZXJmIC0yNi42IC0+IC0xLjAKK2VyZjAxMTMgZXJmIC0yNi44IC0+IC0xLjAKK2VyZjAxMTQgZXJmIC0yNy4wIC0+IC0xLjAKK2VyZjAxMTUgZXJmIC0yNy4yIC0+IC0xLjAKK2VyZjAxMTYgZXJmIC0yNy40IC0+IC0xLjAKK2VyZjAxMTcgZXJmIC0yNy42IC0+IC0xLjAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZXJmYzogY29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbiAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlcmZjMDAwMCBlcmZjIDAuMCAtPiAxLjAKK2VyZmMwMDAxIGVyZmMgLTAuMCAtPiAxLjAKK2VyZmMwMDAyIGVyZmMgaW5mIC0+IDAuMAorZXJmYzAwMDMgZXJmYyAtaW5mIC0+IDIuMAorZXJmYzAwMDQgZXJmYyBuYW4gLT4gbmFuCisKKy0tIHRpbnkgdmFsdWVzCitlcmZjMDAxMCBlcmZjIDFlLTMwOCAtPiAxLjAKK2VyZmMwMDExIGVyZmMgNWUtMzI0IC0+IDEuMAorZXJmYzAwMTIgZXJmYyAxZS0xMCAtPiAwLjk5OTk5OTk5OTg4NzE2MjA0CisKKy0tIHNtYWxsIGludGVnZXJzCitlcmZjMDAyMCBlcmZjIDEgLT4gMC4xNTcyOTkyMDcwNTAyODUxMworZXJmYzAwMjEgZXJmYyAyIC0+IDAuMDA0Njc3NzM0OTgxMDQ3MjY2MgorZXJmYzAwMjIgZXJmYyAzIC0+IDIuMjA5MDQ5Njk5ODU4NTQ0MWUtMDUKK2VyZmMwMDIzIGVyZmMgNCAtPiAxLjU0MTcyNTc5MDAyODAwMmUtMDgKK2VyZmMwMDI0IGVyZmMgNSAtPiAxLjUzNzQ1OTc5NDQyODAzNDllLTEyCitlcmZjMDAyNSBlcmZjIDYgLT4gMi4xNTE5NzM2NzEyNDk4OTEzZS0xNworCitlcmZjMDAzMCBlcmZjIC0xIC0+IDEuODQyNzAwNzkyOTQ5NzE0OAorZXJmYzAwMzEgZXJmYyAtMiAtPiAxLjk5NTMyMjI2NTAxODk1MjgKK2VyZmMwMDMyIGVyZmMgLTMgLT4gMS45OTk5Nzc5MDk1MDMwMDE1CitlcmZjMDAzMyBlcmZjIC00IC0+IDEuOTk5OTk5OTg0NTgyNzQyMQorZXJmYzAwMzQgZXJmYyAtNSAtPiAxLjk5OTk5OTk5OTk5ODQ2MjYKK2VyZmMwMDM1IGVyZmMgLTYgLT4gMi4wCisKKy0tIGFzIHggLT4gaW5maW5pdHksIGVyZmMoeCkgYmVoYXZlcyBsaWtlIGV4cCgteCp4KS94L3NxcnQocGkpCitlcmZjMDA0MCBlcmZjIDIwIC0+IDUuMzk1ODY1NjExNjA3OTAxMmUtMTc2CitlcmZjMDA0MSBlcmZjIDI1IC0+IDguMzAwMTcyNTcxMTk2NTIyOGUtMjc0CitlcmZjMDA0MiBlcmZjIDI3IC0+IDUuMjM3MDQ2NDM5MzUyNjI5MmUtMzE5CitlcmZjMDA0MyBlcmZjIDI4IC0+IDAuMAorCistLSBodWdlIHZhbHVlcworZXJmYzAwNTAgZXJmYyAtNDAgLT4gMi4wCitlcmZjMDA1MSBlcmZjIDFlMTYgLT4gMC4wCitlcmZjMDA1MiBlcmZjIC0xZTE1MCAtPiAyLjAKK2VyZmMwMDUzIGVyZmMgMS43ZTMwOCAtPiAwLjAKKworLS0gSXNzdWUgODk4NjogaW5wdXRzIHggd2l0aCBleHAoLXgqeCkgbmVhciB0aGUgdW5kZXJmbG93IHRocmVzaG9sZAorLS0gaW5jb3JyZWN0bHkgc2lnbmFsbGVkIG92ZXJmbG93IG9uIHNvbWUgcGxhdGZvcm1zLgorZXJmYzAxMDAgZXJmYyAyNi4yIC0+IDEuNjQzMjUwNzkyNDM4OTQ2MWUtMzAwCitlcmZjMDEwMSBlcmZjIDI2LjQgLT4gNC40MDE3NzY4NTg4MDM1NDI2ZS0zMDUKK2VyZmMwMTAyIGVyZmMgMjYuNiAtPiAxLjA4ODUxMjU4ODU0NDIyNjllLTMwOQorZXJmYzAxMDMgZXJmYyAyNi44IC0+IDIuNDg0OTYyMTU3MTk2NjYyOWUtMzE0CitlcmZjMDEwNCBlcmZjIDI3LjAgLT4gNS4yMzcwNDY0MzkzNTI2MjkyZS0zMTkKK2VyZmMwMTA1IGVyZmMgMjcuMiAtPiA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNAorZXJmYzAxMDYgZXJmYyAyNy40IC0+IDAuMAorZXJmYzAxMDcgZXJmYyAyNy42IC0+IDAuMAorCitlcmZjMDExMCBlcmZjIC0yNi4yIC0+IDIuMAorZXJmYzAxMTEgZXJmYyAtMjYuNCAtPiAyLjAKK2VyZmMwMTEyIGVyZmMgLTI2LjYgLT4gMi4wCitlcmZjMDExMyBlcmZjIC0yNi44IC0+IDIuMAorZXJmYzAxMTQgZXJmYyAtMjcuMCAtPiAyLjAKK2VyZmMwMTE1IGVyZmMgLTI3LjIgLT4gMi4wCitlcmZjMDExNiBlcmZjIC0yNy40IC0+IDIuMAorZXJmYzAxMTcgZXJmYyAtMjcuNiAtPiAyLjAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBsZ2FtbWE6IGxvZyBvZiBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZ2FtbWEgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBzcGVjaWFsIHZhbHVlcworbGdhbTAwMDAgbGdhbW1hIDAuMCAtPiBpbmYgICAgICBkaXZpZGUtYnktemVybworbGdhbTAwMDEgbGdhbW1hIC0wLjAgLT4gaW5mICAgICBkaXZpZGUtYnktemVybworbGdhbTAwMDIgbGdhbW1hIGluZiAtPiBpbmYKK2xnYW0wMDAzIGxnYW1tYSAtaW5mIC0+IGluZgorbGdhbTAwMDQgbGdhbW1hIG5hbiAtPiBuYW4KKworLS0gbmVnYXRpdmUgaW50ZWdlcnMKK2xnYW0wMDEwIGxnYW1tYSAtMSAtPiBpbmYgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xnYW0wMDExIGxnYW1tYSAtMiAtPiBpbmYgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xnYW0wMDEyIGxnYW1tYSAtMWUxNiAtPiBpbmYgICAgZGl2aWRlLWJ5LXplcm8KK2xnYW0wMDEzIGxnYW1tYSAtMWUzMDAgLT4gaW5mICAgZGl2aWRlLWJ5LXplcm8KK2xnYW0wMDE0IGxnYW1tYSAtMS43OWUzMDggLT4gaW5mIGRpdmlkZS1ieS16ZXJvCisKKy0tIHNtYWxsIHBvc2l0aXZlIGludGVnZXJzIGdpdmUgZmFjdG9yaWFscworbGdhbTAwMjAgbGdhbW1hIDEgLT4gMC4wCitsZ2FtMDAyMSBsZ2FtbWEgMiAtPiAwLjAKK2xnYW0wMDIyIGxnYW1tYSAzIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MjkKK2xnYW0wMDIzIGxnYW1tYSA0IC0+IDEuNzkxNzU5NDY5MjI4MDU1CitsZ2FtMDAyNCBsZ2FtbWEgNSAtPiAzLjE3ODA1MzgzMDM0Nzk0NTgKK2xnYW0wMDI1IGxnYW1tYSA2IC0+IDQuNzg3NDkxNzQyNzgyMDQ1OAorCistLSBoYWxmIGludGVnZXJzCitsZ2FtMDAzMCBsZ2FtbWEgMC41IC0+IDAuNTcyMzY0OTQyOTI0NzAwMDgKK2xnYW0wMDMxIGxnYW1tYSAxLjUgLT4gLTAuMTIwNzgyMjM3NjM1MjQ1MjIKK2xnYW0wMDMyIGxnYW1tYSAyLjUgLT4gMC4yODQ2ODI4NzA0NzI5MTkxOAorbGdhbTAwMzMgbGdhbW1hIDMuNSAtPiAxLjIwMDk3MzYwMjM0NzA3NDMKK2xnYW0wMDM0IGxnYW1tYSAtMC41IC0+IDEuMjY1NTEyMTIzNDg0NjQ1NAorbGdhbTAwMzUgbGdhbW1hIC0xLjUgLT4gMC44NjAwNDcwMTUzNzY0ODA5OAorbGdhbTAwMzYgbGdhbW1hIC0yLjUgLT4gLTAuMDU2MjQzNzE2NDk3Njc0MDU0CitsZ2FtMDAzNyBsZ2FtbWEgLTMuNSAtPiAtMS4zMDkwMDY2ODQ5OTMwNDIKKworLS0gdmFsdWVzIG5lYXIgMAorbGdhbTAwNDAgbGdhbW1hIDAuMSAtPiAyLjI1MjcxMjY1MTczNDIwNgorbGdhbTAwNDEgbGdhbW1hIDAuMDEgLT4gNC41OTk0Nzk4NzgwNDIwMjE5CitsZ2FtMDA0MiBsZ2FtbWEgMWUtOCAtPiAxOC40MjA2ODA3MzgxODAyMDkKK2xnYW0wMDQzIGxnYW1tYSAxZS0xNiAtPiAzNi44NDEzNjE0ODc5MDQ3MzQKK2xnYW0wMDQ0IGxnYW1tYSAxZS0zMCAtPiA2OS4wNzc1NTI3ODk4MjEzNjgKK2xnYW0wMDQ1IGxnYW1tYSAxZS0xNjAgLT4gMzY4LjQxMzYxNDg3OTA0NzMyCitsZ2FtMDA0NiBsZ2FtbWEgMWUtMzA4IC0+IDcwOS4xOTYyMDg2NDIxNjYwOAorbGdhbTAwNDcgbGdhbW1hIDUuNmUtMzA5IC0+IDcwOS43NzYwMjcxMzc0MTg5NgorbGdhbTAwNDggbGdhbW1hIDUuNWUtMzA5IC0+IDcwOS43OTQwNDU2NDI5MjE2NworbGdhbTAwNDkgbGdhbW1hIDFlLTMwOSAtPiA3MTEuNDk4NzkzNzM1MTYwMTIKK2xnYW0wMDUwIGxnYW1tYSAxZS0zMjMgLT4gNzQzLjc0NjkyNDc0MDgyMTMzCitsZ2FtMDA1MSBsZ2FtbWEgNWUtMzI0IC0+IDc0NC40NDAwNzE5MjEzODEyMgorbGdhbTAwNjAgbGdhbW1hIC0wLjEgLT4gMi4zNjg5NjEzMzI3Mjg3ODg2CitsZ2FtMDA2MSBsZ2FtbWEgLTAuMDEgLT4gNC42MTEwMjQ5OTI3NTI4MDEzCitsZ2FtMDA2MiBsZ2FtbWEgLTFlLTggLT4gMTguNDIwNjgwNzQ5NzI0NTIyCitsZ2FtMDA2MyBsZ2FtbWEgLTFlLTE2IC0+IDM2Ljg0MTM2MTQ4NzkwNDczNAorbGdhbTAwNjQgbGdhbW1hIC0xZS0zMCAtPiA2OS4wNzc1NTI3ODk4MjEzNjgKK2xnYW0wMDY1IGxnYW1tYSAtMWUtMTYwIC0+IDM2OC40MTM2MTQ4NzkwNDczMgorbGdhbTAwNjYgbGdhbW1hIC0xZS0zMDggLT4gNzA5LjE5NjIwODY0MjE2NjA4CitsZ2FtMDA2NyBsZ2FtbWEgLTUuNmUtMzA5IC0+IDcwOS43NzYwMjcxMzc0MTg5NgorbGdhbTAwNjggbGdhbW1hIC01LjVlLTMwOSAtPiA3MDkuNzk0MDQ1NjQyOTIxNjcKK2xnYW0wMDY5IGxnYW1tYSAtMWUtMzA5IC0+IDcxMS40OTg3OTM3MzUxNjAxMgorbGdhbTAwNzAgbGdhbW1hIC0xZS0zMjMgLT4gNzQzLjc0NjkyNDc0MDgyMTMzCitsZ2FtMDA3MSBsZ2FtbWEgLTVlLTMyNCAtPiA3NDQuNDQwMDcxOTIxMzgxMjIKKworLS0gdmFsdWVzIG5lYXIgbmVnYXRpdmUgaW50ZWdlcnMKK2xnYW0wMDgwIGxnYW1tYSAtMC45OTk5OTk5OTk5OTk5OTk4OSAtPiAzNi43MzY4MDA1Njk2NzcxMDEKK2xnYW0wMDgxIGxnYW1tYSAtMS4wMDAwMDAwMDAwMDAwMDAyIC0+IDM2LjA0MzY1MzM4OTExNzE1NAorbGdhbTAwODIgbGdhbW1hIC0xLjk5OTk5OTk5OTk5OTk5OTggLT4gMzUuMzUwNTA2MjA4NTU3MjEzCitsZ2FtMDA4MyBsZ2FtbWEgLTIuMDAwMDAwMDAwMDAwMDAwNCAtPiAzNC42NTczNTkwMjc5OTcyNjYKK2xnYW0wMDg0IGxnYW1tYSAtMTAwLjAwMDAwMDAwMDAwMDAxIC0+IC0zMzEuODU0NjA1MjQ5ODA2MDcKK2xnYW0wMDg1IGxnYW1tYSAtOTkuOTk5OTk5OTk5OTk5OTg2IC0+IC0zMzEuODU0NjA1MjQ5ODA1OTYKKworLS0gbGFyZ2UgaW5wdXRzCitsZ2FtMDEwMCBsZ2FtbWEgMTcwIC0+IDcwMS40MzcyNjM4MDg3MzcwNAorbGdhbTAxMDEgbGdhbW1hIDE3MSAtPiA3MDYuNTczMDYyMjQ1Nzg3MzYKK2xnYW0wMTAyIGxnYW1tYSAxNzEuNjI0IC0+IDcwOS43ODA3NzQ0MzY2OTg5NQorbGdhbTAxMDMgbGdhbW1hIDE3MS42MjUgLT4gNzA5Ljc4NTkxNjgyOTQ4MzY1CitsZ2FtMDEwNCBsZ2FtbWEgMTcyIC0+IDcxMS43MTQ3MjU4MDIyODk5OQorbGdhbTAxMDUgbGdhbW1hIDIwMDAgLT4gMTMxOTguOTIzNDQ4MDU0MjY1CitsZ2FtMDEwNiBsZ2FtbWEgMi41NTk5ODMzMjc4NTE2M2UzMDUgLT4gMS43OTc2OTMxMzQ4NjIzMDk5ZSszMDgKK2xnYW0wMTA3IGxnYW1tYSAyLjU1OTk4MzMyNzg1MTY0ZTMwNSAtPiBpbmYgb3ZlcmZsb3cKK2xnYW0wMTA4IGxnYW1tYSAxLjdlMzA4IC0+IGluZiBvdmVyZmxvdworCistLSBpbnB1dHMgZm9yIHdoaWNoIGdhbW1hKHgpIGlzIHRpbnkKK2xnYW0wMTIwIGxnYW1tYSAtMTAwLjUgLT4gLTM2NC45MDA5NjgzMDk0MjczNgorbGdhbTAxMjEgbGdhbW1hIC0xNjAuNSAtPiAtNjU2Ljg4MDA1MjYxMTI2NDMyCitsZ2FtMDEyMiBsZ2FtbWEgLTE3MC41IC0+IC03MDcuOTk4NDMzMTQ1MDc4ODIKK2xnYW0wMTIzIGxnYW1tYSAtMTcxLjUgLT4gLTcxMy4xNDMwMTY0MTE2ODQ4MQorbGdhbTAxMjQgbGdhbW1hIC0xNzYuNSAtPiAtNzM4Ljk1MjQ3NTkwODQ2NDg2CitsZ2FtMDEyNSBsZ2FtbWEgLTE3Ny41IC0+IC03NDQuMTMxNDQ2NTE3MzgwMzcKK2xnYW0wMTI2IGxnYW1tYSAtMTc4LjUgLT4gLTc0OS4zMTYwMzUxMTg2MDAxCisKK2xnYW0wMTMwIGxnYW1tYSAtMTAwMC41IC0+IC01OTE0LjQzNzcwMTExNjg1MTcKK2xnYW0wMTMxIGxnYW1tYSAtMzAwMDAuNSAtPiAtMjc5Mjc4LjY2Mjk5NTkxNDQKK2xnYW0wMTMyIGxnYW1tYSAtNDUwMzU5OTYyNzM3MDQ5NS41IC0+IC0xLjU3ODIyNTg0MzQ0OTI4ODNlKzE3CisKKy0tIHJlc3VsdHMgY2xvc2UgdG8gMDogIHBvc2l0aXZlIGFyZ3VtZW50IC4uLgorbGdhbTAxNTAgbGdhbW1hIDAuOTk5OTk5OTk5OTk5OTk5ODkgLT4gNi40MDgzODEyMTM0ODAwMDc1ZS0xNworbGdhbTAxNTEgbGdhbW1hIDEuMDAwMDAwMDAwMDAwMDAwMiAtPiAtMS4yODE2NzYyNDI2OTYwMDA4ZS0xNgorbGdhbTAxNTIgbGdhbW1hIDEuOTk5OTk5OTk5OTk5OTk5OCAtPiAtOS4zODc2OTgwNjU1NDMxMTcwZS0xNworbGdhbTAxNTMgbGdhbW1hIDIuMDAwMDAwMDAwMDAwMDAwNCAtPiAxLjg3NzUzOTYxMzEwODYyNDRlLTE2CisKKy0tIC4uLiBhbmQgbmVnYXRpdmUgYXJndW1lbnQKK2xnYW0wMTYwIGxnYW1tYSAtMi43NDc2ODI2NDY3IC0+IC01LjI0Nzc0MDgxNDc2ODkxMzZlLTExCitsZ2FtMDE2MSBsZ2FtbWEgLTIuNDU3MDI0NzM4IC0+IDMuMzQ2NDYzNzU0MTkxMjkzMmUtMTAKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGdhbW1hOiBHYW1tYSBmdW5jdGlvbiAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHNwZWNpYWwgdmFsdWVzCitnYW0wMDAwIGdhbW1hIDAuMCAtPiBpbmYgICAgICAgIGRpdmlkZS1ieS16ZXJvCitnYW0wMDAxIGdhbW1hIC0wLjAgLT4gLWluZiAgICAgIGRpdmlkZS1ieS16ZXJvCitnYW0wMDAyIGdhbW1hIGluZiAtPiBpbmYKK2dhbTAwMDMgZ2FtbWEgLWluZiAtPiBuYW4gICAgICAgaW52YWxpZAorZ2FtMDAwNCBnYW1tYSBuYW4gLT4gbmFuCisKKy0tIG5lZ2F0aXZlIGludGVnZXJzIGlucHV0cyBhcmUgaW52YWxpZAorZ2FtMDAxMCBnYW1tYSAtMSAtPiBuYW4gICAgICAgICBpbnZhbGlkCitnYW0wMDExIGdhbW1hIC0yIC0+IG5hbiAgICAgICAgIGludmFsaWQKK2dhbTAwMTIgZ2FtbWEgLTFlMTYgLT4gbmFuICAgICAgaW52YWxpZAorZ2FtMDAxMyBnYW1tYSAtMWUzMDAgLT4gbmFuICAgICBpbnZhbGlkCisKKy0tIHNtYWxsIHBvc2l0aXZlIGludGVnZXJzIGdpdmUgZmFjdG9yaWFscworZ2FtMDAyMCBnYW1tYSAxIC0+IDEKK2dhbTAwMjEgZ2FtbWEgMiAtPiAxCitnYW0wMDIyIGdhbW1hIDMgLT4gMgorZ2FtMDAyMyBnYW1tYSA0IC0+IDYKK2dhbTAwMjQgZ2FtbWEgNSAtPiAyNAorZ2FtMDAyNSBnYW1tYSA2IC0+IDEyMAorCistLSBoYWxmIGludGVnZXJzCitnYW0wMDMwIGdhbW1hIDAuNSAtPiAxLjc3MjQ1Mzg1MDkwNTUxNjEKK2dhbTAwMzEgZ2FtbWEgMS41IC0+IDAuODg2MjI2OTI1NDUyNzU4MDUKK2dhbTAwMzIgZ2FtbWEgMi41IC0+IDEuMzI5MzQwMzg4MTc5MTM3MAorZ2FtMDAzMyBnYW1tYSAzLjUgLT4gMy4zMjMzNTA5NzA0NDc4NDI2CitnYW0wMDM0IGdhbW1hIC0wLjUgLT4gLTMuNTQ0OTA3NzAxODExMDMyMgorZ2FtMDAzNSBnYW1tYSAtMS41IC0+IDIuMzYzMjcxODAxMjA3MzU0OAorZ2FtMDAzNiBnYW1tYSAtMi41IC0+IC0wLjk0NTMwODcyMDQ4Mjk0MTkwCitnYW0wMDM3IGdhbW1hIC0zLjUgLT4gMC4yNzAwODgyMDU4NTIyNjkxMQorCistLSB2YWx1ZXMgbmVhciAwCitnYW0wMDQwIGdhbW1hIDAuMSAtPiA5LjUxMzUwNzY5ODY2ODczMDYKK2dhbTAwNDEgZ2FtbWEgMC4wMSAtPiA5OS40MzI1ODUxMTkxNTA2MDIKK2dhbTAwNDIgZ2FtbWEgMWUtOCAtPiA5OTk5OTk5OS40MjI3ODQzNDMKK2dhbTAwNDMgZ2FtbWEgMWUtMTYgLT4gMTAwMDAwMDAwMDAwMDAwMDAKK2dhbTAwNDQgZ2FtbWEgMWUtMzAgLT4gOS45OTk5OTk5OTk5OTk5OTg4ZSsyOQorZ2FtMDA0NSBnYW1tYSAxZS0xNjAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwZSsxNjAKK2dhbTAwNDYgZ2FtbWEgMWUtMzA4IC0+IDEuMDAwMDAwMDAwMDAwMDAwMGUrMzA4CitnYW0wMDQ3IGdhbW1hIDUuNmUtMzA5IC0+IDEuNzg1NzE0Mjg1NzE0Mjg0OGUrMzA4CitnYW0wMDQ4IGdhbW1hIDUuNWUtMzA5IC0+IGluZiAgIG92ZXJmbG93CitnYW0wMDQ5IGdhbW1hIDFlLTMwOSAtPiBpbmYgICAgIG92ZXJmbG93CitnYW0wMDUwIGdhbW1hIDFlLTMyMyAtPiBpbmYgICAgIG92ZXJmbG93CitnYW0wMDUxIGdhbW1hIDVlLTMyNCAtPiBpbmYgICAgIG92ZXJmbG93CitnYW0wMDYwIGdhbW1hIC0wLjEgLT4gLTEwLjY4NjI4NzAyMTE5MzE5MworZ2FtMDA2MSBnYW1tYSAtMC4wMSAtPiAtMTAwLjU4NzE5Nzk2NDQxMDc4CitnYW0wMDYyIGdhbW1hIC0xZS04IC0+IC0xMDAwMDAwMDAuNTc3MjE1NjcKK2dhbTAwNjMgZ2FtbWEgLTFlLTE2IC0+IC0xMDAwMDAwMDAwMDAwMDAwMAorZ2FtMDA2NCBnYW1tYSAtMWUtMzAgLT4gLTkuOTk5OTk5OTk5OTk5OTk4OGUrMjkKK2dhbTAwNjUgZ2FtbWEgLTFlLTE2MCAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwZSsxNjAKK2dhbTAwNjYgZ2FtbWEgLTFlLTMwOCAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwZSszMDgKK2dhbTAwNjcgZ2FtbWEgLTUuNmUtMzA5IC0+IC0xLjc4NTcxNDI4NTcxNDI4NDhlKzMwOAorZ2FtMDA2OCBnYW1tYSAtNS41ZS0zMDkgLT4gLWluZiBvdmVyZmxvdworZ2FtMDA2OSBnYW1tYSAtMWUtMzA5IC0+IC1pbmYgICBvdmVyZmxvdworZ2FtMDA3MCBnYW1tYSAtMWUtMzIzIC0+IC1pbmYgICBvdmVyZmxvdworZ2FtMDA3MSBnYW1tYSAtNWUtMzI0IC0+IC1pbmYgICBvdmVyZmxvdworCistLSB2YWx1ZXMgbmVhciBuZWdhdGl2ZSBpbnRlZ2VycworZ2FtMDA4MCBnYW1tYSAtMC45OTk5OTk5OTk5OTk5OTk4OSAtPiAtOTAwNzE5OTI1NDc0MDk5Mi4wCitnYW0wMDgxIGdhbW1hIC0xLjAwMDAwMDAwMDAwMDAwMDIgLT4gNDUwMzU5OTYyNzM3MDQ5NS41CitnYW0wMDgyIGdhbW1hIC0xLjk5OTk5OTk5OTk5OTk5OTggLT4gMjI1MTc5OTgxMzY4NTI0OC41CitnYW0wMDgzIGdhbW1hIC0yLjAwMDAwMDAwMDAwMDAwMDQgLT4gLTExMjU4OTk5MDY4NDI2MjMuNQorZ2FtMDA4NCBnYW1tYSAtMTAwLjAwMDAwMDAwMDAwMDAxIC0+IC03LjU0MDA4MzMzNDg4MzEwOTBlLTE0NQorZ2FtMDA4NSBnYW1tYSAtOTkuOTk5OTk5OTk5OTk5OTg2IC0+IDcuNTQwMDgzMzM0ODg0MDk2MmUtMTQ1CisKKy0tIGxhcmdlIGlucHV0cworZ2FtMDEwMCBnYW1tYSAxNzAgLT4gNC4yNjkwNjgwMDkwMDQ3MDUxZSszMDQKK2dhbTAxMDEgZ2FtbWEgMTcxIC0+IDcuMjU3NDE1NjE1MzA3OTk5MGUrMzA2CitnYW0wMTAyIGdhbW1hIDE3MS42MjQgLT4gMS43OTQyMTE3NTk5MjQ4MTA0ZSszMDgKK2dhbTAxMDMgZ2FtbWEgMTcxLjYyNSAtPiBpbmYgICAgb3ZlcmZsb3cKK2dhbTAxMDQgZ2FtbWEgMTcyIC0+IGluZiAgICAgICAgb3ZlcmZsb3cKK2dhbTAxMDUgZ2FtbWEgMjAwMCAtPiBpbmYgICAgICAgb3ZlcmZsb3cKK2dhbTAxMDYgZ2FtbWEgMS43ZTMwOCAtPiBpbmYgICAgb3ZlcmZsb3cKKworLS0gaW5wdXRzIGZvciB3aGljaCBnYW1tYSh4KSBpcyB0aW55CitnYW0wMTIwIGdhbW1hIC0xMDAuNSAtPiAtMy4zNTM2OTA4MTk4MDc2Nzg3ZS0xNTkKK2dhbTAxMjEgZ2FtbWEgLTE2MC41IC0+IC01LjI1NTU0NjQ0NzAwNzgyOTNlLTI4NgorZ2FtMDEyMiBnYW1tYSAtMTcwLjUgLT4gLTMuMzEyNzM5NTIxNTM4NjA3NGUtMzA4CitnYW0wMTIzIGdhbW1hIC0xNzEuNSAtPiAxLjkzMTYyNjU0MzE3MTE5MDJlLTMxMAorZ2FtMDEyNCBnYW1tYSAtMTc2LjUgLT4gLTEuMTk1NjM4ODYyOTM1ODE2NmUtMzIxCitnYW0wMTI1IGdhbW1hIC0xNzcuNSAtPiA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNAorZ2FtMDEyNiBnYW1tYSAtMTc4LjUgLT4gLTAuMAorZ2FtMDEyNyBnYW1tYSAtMTc5LjUgLT4gMC4wCitnYW0wMTI4IGdhbW1hIC0yMDEuMDAwMSAtPiAwLjAKK2dhbTAxMjkgZ2FtbWEgLTIwMi45OTk5IC0+IC0wLjAKK2dhbTAxMzAgZ2FtbWEgLTEwMDAuNSAtPiAtMC4wCitnYW0wMTMxIGdhbW1hIC0xMDAwMDAwMDAwLjMgLT4gLTAuMAorZ2FtMDEzMiBnYW1tYSAtNDUwMzU5OTYyNzM3MDQ5NS41IC0+IDAuMAorCistLSBpbnB1dHMgdGhhdCBjYXVzZSBwcm9ibGVtcyBmb3IgdGhlIHN0YW5kYXJkIHJlZmxlY3Rpb24gZm9ybXVsYSwKKy0tIHRoYW5rcyB0byBsb3NzIG9mIGFjY3VyYWN5IGluIDEteAorZ2FtMDE0MCBnYW1tYSAtNjMuMzQ5MDc4NzI5MDIyOTg1IC0+IDQuMTc3Nzk3MTY3Nzc2MTg4MGUtODgKK2dhbTAxNDEgZ2FtbWEgLTEyNy40NTExNzYzMjk0MzI5NSAtPiAxLjE4MzExMTA4OTYyMzY4MTBlLTIxNAorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBleHBtMTogZXhwKHgpIC0gMSwgd2l0aG91dCBwcmVjaXNpb24gbG9zcyBmb3Igc21hbGwgeCAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gc3BlY2lhbCB2YWx1ZXMKK2V4cG0xMDAwMCBleHBtMSAwLjAgLT4gMC4wCitleHBtMTAwMDEgZXhwbTEgLTAuMCAtPiAtMC4wCitleHBtMTAwMDIgZXhwbTEgaW5mIC0+IGluZgorZXhwbTEwMDAzIGV4cG0xIC1pbmYgLT4gLTEuMAorZXhwbTEwMDA0IGV4cG0xIG5hbiAtPiBuYW4KKworLS0gZXhwbTEoeCkgfiB4IGZvciB0aW55IHgKK2V4cG0xMDAxMCBleHBtMSA1ZS0zMjQgLT4gNWUtMzI0CitleHBtMTAwMTEgZXhwbTEgMWUtMzIwIC0+IDFlLTMyMAorZXhwbTEwMDEyIGV4cG0xIDFlLTMwMCAtPiAxZS0zMDAKK2V4cG0xMDAxMyBleHBtMSAxZS0xNTAgLT4gMWUtMTUwCitleHBtMTAwMTQgZXhwbTEgMWUtMjAgLT4gMWUtMjAKKworZXhwbTEwMDIwIGV4cG0xIC01ZS0zMjQgLT4gLTVlLTMyNAorZXhwbTEwMDIxIGV4cG0xIC0xZS0zMjAgLT4gLTFlLTMyMAorZXhwbTEwMDIyIGV4cG0xIC0xZS0zMDAgLT4gLTFlLTMwMAorZXhwbTEwMDIzIGV4cG0xIC0xZS0xNTAgLT4gLTFlLTE1MAorZXhwbTEwMDI0IGV4cG0xIC0xZS0yMCAtPiAtMWUtMjAKKworLS0gbW9kZXJhdGUgc2l6ZWQgdmFsdWVzLCB3aGVyZSBkaXJlY3QgZXZhbHVhdGlvbiBydW5zIGludG8gdHJvdWJsZQorZXhwbTEwMTAwIGV4cG0xIDFlLTEwIC0+IDEuMDAwMDAwMDAwMDUwMDAwMGUtMTAKK2V4cG0xMDEwMSBleHBtMSAtOS45OTk5OTk5OTk5OTk5OTk1ZS0wOCAtPiAtOS45OTk5OTk1MDAwMDAwMTYzZS04CitleHBtMTAxMDIgZXhwbTEgMy4wMDAwMDAwMDAwMDAwMDAxZS0wNSAtPiAzLjAwMDA0NTAwMDQ1MDAwMzRlLTUKK2V4cG0xMDEwMyBleHBtMSAtMC4wMDcwMDAwMDAwMDAwMDAwMDAxIC0+IC0wLjAwNjk3NTU1NzA2Njc2NDg5NTEKK2V4cG0xMDEwNCBleHBtMSAtMC4wNzE0OTkyMDg3NDAwOTQ2MzMgLT4gLTAuMDY5MDAyOTg1NzQ0ODIwMjUwCitleHBtMTAxMDUgZXhwbTEgLTAuMDYzMjk2MDA0MTgwMTE2Nzk5IC0+IC0wLjA2MTMzNDQxNjM3MzYzMzAwOQorZXhwbTEwMTA2IGV4cG0xIDAuMDIzOTA5NTQwMzU1OTc3NTYgLT4gMC4wMjQxOTc2NjUxNDM4MTk5NDIKK2V4cG0xMDEwNyBleHBtMSAwLjA4NTYzNzM1MjY0OTA0NDkwMSAtPiAwLjA4OTQxMTE4NDU4MDM1Nzc2NworZXhwbTEwMTA4IGV4cG0xIDAuNTk2NjE3NDk0NzQxMTAwNiAtPiAwLjgxNTk2NTg4NTk2NTAxNDg1CitleHBtMTAxMDkgZXhwbTEgMC4zMDI0NzIwNjIxMjA3NTEzOSAtPiAwLjM1MzE5OTg3MDM1ODQ4Njc3CitleHBtMTAxMTAgZXhwbTEgMC43NDU3NDcyNzM3NTg4OTUxNiAtPiAxLjEwODAxNjExMTY3Mzc0NTkKK2V4cG0xMDExMSBleHBtMSAwLjk3NzY3NTEyOTI2NTU1NzExIC0+IDEuNjU4MjY4OTIwNzM3MjE4NQorZXhwbTEwMTEyIGV4cG0xIDAuODQ1MDE1NDU2Njc4NzcxMiAtPiAxLjMyODAxMzc5NzY1MzU4OTcKK2V4cG0xMDExMyBleHBtMSAtMC4xMzk3OTI2MDMyMzEyNTI2NCAtPiAtMC4xMzA0NjE0NDM4MTM5NjA2MAorZXhwbTEwMTE0IGV4cG0xIC0wLjUyODk5MzIyMDM5NjQzMjcxIC0+IC0wLjQxMDgwMjEzNjQzNjk1OTIzCitleHBtMTAxMTUgZXhwbTEgLTAuNzQwODMyNjE0Nzg5MDA2MzEgLT4gLTAuNTIzMjgzMTcxMjQ3OTcwOTcKK2V4cG0xMDExNiBleHBtMSAtMC45Mzg0Nzc2Njk4NDU0NjA1NSAtPiAtMC42MDg3NzcwNDcyNDA4NTk0NgorZXhwbTEwMTE3IGV4cG0xIDEwLjAgLT4gMjIwMjUuNDY1Nzk0ODA2NzE4CitleHBtMTAxMTggZXhwbTEgMjcuMCAtPiA1MzIwNDgyNDA2MDAuNzk4NjUKK2V4cG0xMDExOSBleHBtMSAxMjMgLT4gMi42MTk1MTczMTg3NDkwNjI2ZSs1MworZXhwbTEwMTIwIGV4cG0xIC0xMi4wIC0+IC0wLjk5OTk5Mzg1NTc4NzY0NjY2CitleHBtMTAxMjEgZXhwbTEgLTM1LjEwMDAwMDAwMDAwMDAwMSAtPiAtMC45OTk5OTk5OTk5OTk5OTk0NAorCistLSBleHRyZW1lIG5lZ2F0aXZlIHZhbHVlcworZXhwbTEwMjAxIGV4cG0xIC0zNy4wIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTg5CitleHBtMTAyMDAgZXhwbTEgLTM4LjAgLT4gLTEuMAorZXhwbTEwMjEwIGV4cG0xIC03MTAuMCAtPiAtMS4wCistLSB0aGUgZm9ybXVsYSBleHBtMSh4KSA9IDIgKiBzaW5oKHgvMikgKiBleHAoeC8yKSBkb2Vzbid0IHdvcmsgc28KKy0tIHdlbGwgd2hlbiBleHAoeC8yKSBpcyBzdWJub3JtYWwgb3IgdW5kZXJmbG93cyB0byB6ZXJvOyBjaGVjayB3ZSdyZQorLS0gbm90IHVzaW5nIGl0IQorZXhwbTEwMjExIGV4cG0xIC0xNDIwLjAgLT4gLTEuMAorZXhwbTEwMjEyIGV4cG0xIC0xNDUwLjAgLT4gLTEuMAorZXhwbTEwMjEzIGV4cG0xIC0xNTAwLjAgLT4gLTEuMAorZXhwbTEwMjE0IGV4cG0xIC0xZTUwIC0+IC0xLjAKK2V4cG0xMDIxNSBleHBtMSAtMS43OWUzMDggLT4gLTEuMAorCistLSBleHRyZW1lIHBvc2l0aXZlIHZhbHVlcworZXhwbTEwMzAwIGV4cG0xIDMwMCAtPiAxLjk0MjQyNjM5NTI0MTI1NThlKzEzMAorZXhwbTEwMzAxIGV4cG0xIDcwMCAtPiAxLjAxNDIzMjA1NDczNTAwNDVlKzMwNAorLS0gdGhlIG5leHQgdGVzdCAoZXhwbTEwMzAyKSBpcyBkaXNhYmxlZCBiZWNhdXNlIGl0IGNhdXNlcyBmYWlsdXJlIG9uCistLSBPUyBYIDEwLjQvSW50ZWw6IGFwcGFyZW50bHkgYWxsIHZhbHVlcyBvdmVyIDcwOS43OCBwcm9kdWNlIGFuCistLSBvdmVyZmxvdyBvbiB0aGF0IHBsYXRmb3JtLiAgU2VlIGlzc3VlICM3NTc1LgorLS0gZXhwbTEwMzAyIGV4cG0xIDcwOS43ODI3MTI4OTMyODM5MyAtPiAxLjc5NzY5MzEzNDY4MjQyNDBlKzMwOAorZXhwbTEwMzAzIGV4cG0xIDcwOS43ODI3MTI4OTM0ODQwMiAtPiBpbmYgb3ZlcmZsb3cKK2V4cG0xMDMwNCBleHBtMSAxMDAwIC0+IGluZiBvdmVyZmxvdworZXhwbTEwMzA1IGV4cG0xIDFlNTAgLT4gaW5mIG92ZXJmbG93CitleHBtMTAzMDYgZXhwbTEgMS43OWUzMDggLT4gaW5mIG92ZXJmbG93CisKKy0tIHdlYWtlciB2ZXJzaW9uIG9mIGV4cG0xMDMwMgorZXhwbTEwMzA3IGV4cG0xIDcwOS41IC0+IDEuMzU0OTg2MzE5MzE0NjMyOGUrMzA4CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkgYi9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKaW5kZXggMjQ1NGFmMS4uYzllNzRiOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CisrKyBiL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQpAQCAtMiwxMSArMiwxMSBAQAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IGNQaWNrbGUKIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IGNTdHJpbmdJTwogaW1wb3J0IHBpY2tsZXRvb2xzCiBpbXBvcnQgY29weV9yZWcKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdEZhaWxlZCwgaGF2ZV91bmljb2RlLCBURVNURk4sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl93aXRoX2xvY2FsZQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdEZhaWxlZCwgaGF2ZV91bmljb2RlLCBURVNURk4KIAogIyBUZXN0cyB0aGF0IHRyeSBhIG51bWJlciBvZiBwaWNrbGUgcHJvdG9jb2xzIHNob3VsZCBoYXZlIGEKICMgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CkBAIC0xNCw2ICsxNCw0MiBAQAogYXNzZXJ0IHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MID09IGNQaWNrbGUuSElHSEVTVF9QUk9UT0NPTCA9PSAyCiBwcm90b2NvbHMgPSByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpCiAKKyMgQ29weSBvZiB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fd2l0aF9sb2NhbGUuIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgUHl0aG9uCisjIDIuNCwgd2hpY2ggZGlkbid0IGluY2x1ZGUgaXQuIFRoaXMgaXMgYWxsIHRvIHN1cHBvcnQgdGVzdF94cGlja2xlLCB3aGljaAorIyBib3VuY2VzIHBpY2tsZWQgb2JqZWN0cyB0aHJvdWdoIG9sZGVyIFB5dGhvbiB2ZXJzaW9ucyB0byB0ZXN0IGJhY2t3YXJkcworIyBjb21wYXRpYmlsaXR5LgorZGVmIHJ1bl93aXRoX2xvY2FsZShjYXRzdHIsICpsb2NhbGVzKToKKyAgICBkZWYgZGVjb3JhdG9yKGZ1bmMpOgorICAgICAgICBkZWYgaW5uZXIoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gZ2V0YXR0cihsb2NhbGUsIGNhdHN0cikKKyAgICAgICAgICAgICAgICBvcmlnX2xvY2FsZSA9IGxvY2FsZS5zZXRsb2NhbGUoY2F0ZWdvcnkpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBpZiB0aGUgdGVzdCBhdXRob3IgZ2l2ZXMgdXMgYW4gaW52YWxpZCBjYXRlZ29yeSBzdHJpbmcKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICMgY2Fubm90IHJldHJpZXZlIG9yaWdpbmFsIGxvY2FsZSwgc28gZG8gbm90aGluZworICAgICAgICAgICAgICAgIGxvY2FsZSA9IG9yaWdfbG9jYWxlID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgbG9jIGluIGxvY2FsZXM6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUoY2F0ZWdvcnksIGxvYykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBub3cgcnVuIHRoZSBmdW5jdGlvbiwgcmVzZXR0aW5nIHRoZSBsb2NhbGUgb24gZXhjZXB0aW9ucworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3ZHMpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIGxvY2FsZSBhbmQgb3JpZ19sb2NhbGU6CisgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUoY2F0ZWdvcnksIG9yaWdfbG9jYWxlKQorICAgICAgICBpbm5lci5mdW5jX25hbWUgPSBmdW5jLmZ1bmNfbmFtZQorICAgICAgICBpbm5lci5fX2RvY19fID0gZnVuYy5fX2RvY19fCisgICAgICAgIHJldHVybiBpbm5lcgorICAgIHJldHVybiBkZWNvcmF0b3IKKwogCiAjIFJldHVybiBUcnVlIGlmIG9wY29kZSBjb2RlIGFwcGVhcnMgaW4gdGhlIHBpY2tsZSwgZWxzZSBGYWxzZS4KIGRlZiBvcGNvZGVfaW5fcGlja2xlKGNvZGUsIHBpY2tsZSk6CkBAIC00MTAsMTIgKzQ0NiwxMSBAQAogICAgICMgaXMgYSBteXN0ZXJ5LiAgY1BpY2tsZSBhbHNvIHN1cHByZXNzZXMgUFVUIGZvciBvYmplY3RzIHdpdGggYSByZWZjb3VudAogICAgICMgb2YgMS4KICAgICBkZWYgZG9udF90ZXN0X2Rpc2Fzc2VtYmx5KHNlbGYpOgotICAgICAgICBmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KICAgICAgICAgZnJvbSBwaWNrbGV0b29scyBpbXBvcnQgZGlzCiAKICAgICAgICAgZm9yIHByb3RvLCBleHBlY3RlZCBpbiAoMCwgREFUQTBfRElTKSwgKDEsIERBVEExX0RJUyk6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhzZWxmLl90ZXN0ZGF0YSwgcHJvdG8pCi0gICAgICAgICAgICBmaWxlbGlrZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIGZpbGVsaWtlID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgICAgIGRpcyhzLCBvdXQ9ZmlsZWxpa2UpCiAgICAgICAgICAgICBnb3QgPSBmaWxlbGlrZS5nZXR2YWx1ZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCkBAIC00MjcsNyArNDYyLDcgQEAKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGwsIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgeFswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHhbMF0pCiAKICAgICBkZWYgdGVzdF9yZWN1cnNpdmVfdHVwbGUoc2VsZik6CiAgICAgICAgIHQgPSAoW10sKQpAQCAtNDM3LDcgKzQ3Miw3IEBACiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4WzBdKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIHhbMF1bMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB4WzBdWzBdKQogCiAgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2RpY3Qoc2VsZik6CiAgICAgICAgIGQgPSB7fQpAQCAtNDQ2LDcgKzQ4MSw3IEBACiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhkLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgua2V5cygpLCBbMV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oeFsxXSBpcyB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMV0gaXMgeCkKIAogICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9pbnN0KHNlbGYpOgogICAgICAgICBpID0gQygpCkBAIC00NTUsNyArNDkwLDcgQEAKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGksIDIpCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoeCksIGRpcihpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh4LmF0dHIgaXMgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LmF0dHIgaXMgeCkKIAogICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9tdWx0aShzZWxmKToKICAgICAgICAgbCA9IFtdCkBAIC00NjksNyArNTA0LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoeFswXSksIGRpcihpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFswXS5hdHRyLmtleXMoKSwgWzFdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHhbMF0uYXR0clsxXSBpcyB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0uYXR0clsxXSBpcyB4KQogCiAgICAgZGVmIHRlc3RfZ2FyeXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZXJyb3IsIHNlbGYubG9hZHMsICdnYXJ5cCcpCkBAIC02MTAsNyArNjQ1LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5sb2FkcyhiYWRwaWNrbGUpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBkZXRhaWw6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyKGRldGFpbCkuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoZGV0YWlsKS5zdGFydHN3aXRoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgcGlja2xlIHByb3RvY29sIikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGJhZCBwcm90b2NvbCBudW1iZXIgdG8gcmFpc2UgVmFsdWVFcnJvciIpCkBAIC02ODIsNyArNzE3LDcgQEAKICAgICAgICAgICAgIGZvciB4IGluIE5vbmUsIEZhbHNlLCBUcnVlOgogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgeSwgKHByb3RvLCB4LCBzLCB5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB5LCAocHJvdG8sIHgsIHMsIHkpKQogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW3Byb3RvLCB4XQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcyksIFRydWUpCiAKQEAgLTczMiw4ICs3NjcsOCBAQAogCiAgICAgICAgICAgICAjIER1bXAgdXNpbmcgcHJvdG9jb2wgMSBmb3IgY29tcGFyaXNvbi4KICAgICAgICAgICAgIHMxID0gc2VsZi5kdW1wcyh4LCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKF9fbmFtZV9fIGluIHMxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCJNeUxpc3QiIGluIHMxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihfX25hbWVfXywgczEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJNeUxpc3QiLCBzMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMxKSwgRmFsc2UpCiAKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMxKQpAQCAtNzQyLDggKzc3Nyw4IEBACiAKICAgICAgICAgICAgICMgRHVtcCB1c2luZyBwcm90b2NvbCAyIGZvciB0ZXN0LgogICAgICAgICAgICAgczIgPSBzZWxmLmR1bXBzKHgsIDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oX19uYW1lX18gbm90IGluIHMyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCJNeUxpc3QiIG5vdCBpbiBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oX19uYW1lX18sIHMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiTXlMaXN0IiwgczIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBzMiksIFRydWUpCiAKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMyKQpAQCAtNzg3LDcgKzgyMiw3IEBACiAgICAgICAgICAgICBpZiBwcm90byA9PSAwOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FwcGVuZHMsIDApCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhudW1fYXBwZW5kcyA+PSAyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW1fYXBwZW5kcyA+PSAyKQogCiAgICAgZGVmIHRlc3RfZGljdF9jaHVua2luZyhzZWxmKToKICAgICAgICAgbiA9IDEwICAjIHRvbyBzbWFsbCB0byBjaHVuawpAQCAtODA5LDcgKzg0NCw3IEBACiAgICAgICAgICAgICBpZiBwcm90byA9PSAwOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX3NldGl0ZW1zLCAwKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MobnVtX3NldGl0ZW1zID49IDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG51bV9zZXRpdGVtcyA+PSAyKQogCiAgICAgZGVmIHRlc3Rfc2ltcGxlX25ld29iaihzZWxmKToKICAgICAgICAgeCA9IG9iamVjdC5fX25ld19fKFNpbXBsZU5ld09iaikgICMgYXZvaWQgX19pbml0X18KQEAgLTgzMyw3ICs4NjgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYmFyLCB5LmJhcikKIAogICAgIGRlZiB0ZXN0X3JlZHVjZV9vdmVycmlkZXNfZGVmYXVsdF9yZWR1Y2VfZXgoc2VsZik6Ci0gICAgICAgIGZvciBwcm90byBpbiAwLCAxLCAyOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgeCA9IFJFWF9vbmUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9yZWR1Y2VfY2FsbGVkLCAwKQogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCkBAIC04NDIsNyArODc3LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fcmVkdWNlX2NhbGxlZCwgMCkKIAogICAgIGRlZiB0ZXN0X3JlZHVjZV9leF9jYWxsZWQoc2VsZik6Ci0gICAgICAgIGZvciBwcm90byBpbiAwLCAxLCAyOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgeCA9IFJFWF90d28oKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9wcm90bywgTm9uZSkKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQpAQCAtODUxLDcgKzg4Niw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX3Byb3RvLCBOb25lKQogCiAgICAgZGVmIHRlc3RfcmVkdWNlX2V4X292ZXJyaWRlc19yZWR1Y2Uoc2VsZik6Ci0gICAgICAgIGZvciBwcm90byBpbiAwLCAxLCAyOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgeCA9IFJFWF90aHJlZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX3Byb3RvLCBOb25lKQogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCkBAIC04NjAsNyArODk1LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fcHJvdG8sIE5vbmUpCiAKICAgICBkZWYgdGVzdF9yZWR1Y2VfZXhfY2FsbHNfYmFzZShzZWxmKToKLSAgICAgICAgZm9yIHByb3RvIGluIDAsIDEsIDI6CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICB4ID0gUkVYX2ZvdXIoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9wcm90bywgTm9uZSkKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQpAQCAtODY5LDcgKzkwNCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX3Byb3RvLCBwcm90bykKIAogICAgIGRlZiB0ZXN0X3JlZHVjZV9jYWxsc19iYXNlKHNlbGYpOgotICAgICAgICBmb3IgcHJvdG8gaW4gMCwgMSwgMjoKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHggPSBSRVhfZml2ZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX3JlZHVjZV9jYWxsZWQsIDApCiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKQEAgLTg5MCw3ICs5MjUsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBkaWN0LCAoKSwgTm9uZSwgTm9uZSwgW10KIAogICAgICAgICAjIFByb3RvY29sIDAgaXMgbGVzcyBzdHJpY3QgYW5kIGFsc28gYWNjZXB0IGl0ZXJhYmxlcy4KLSAgICAgICAgZm9yIHByb3RvIGluIDAsIDEsIDI6CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhDKCksIHByb3RvKQogICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgcGlja2xlLlBpY2tsZUVycm9yLCBjUGlja2xlLlBpY2tsZUVycm9yKToKQEAgLTkwMCw2ICs5MzUsMzUgQEAKICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIHBpY2tsZS5QaWNrbGVFcnJvciwgY1BpY2tsZS5QaWNrbGVFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIHRlc3RfbWFueV9wdXRzX2FuZF9nZXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgY29ycmVjdGx5IGRlYWwgd2l0aCBsb3RzIG9mCisgICAgICAgICMgcHV0cy9nZXRzLgorICAgICAgICBrZXlzID0gKCJhYWEiICsgc3RyKGkpIGZvciBpIGluIHhyYW5nZSgxMDApKQorICAgICAgICBsYXJnZV9kaWN0ID0gZGljdCgoaywgWzQsIDUsIDZdKSBmb3IgayBpbiBrZXlzKQorICAgICAgICBvYmogPSBbZGljdChsYXJnZV9kaWN0KSwgZGljdChsYXJnZV9kaWN0KSwgZGljdChsYXJnZV9kaWN0KV0KKworICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgZHVtcGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZCwgb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHByb3RvY29sICVkOiAlciAhPSAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocHJvdG8sIG9iaiwgbG9hZGVkKSkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9uYW1lX2ludGVybmluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYXR0cmlidXRlIG5hbWVzIG9mIHBpY2tsZWQgb2JqZWN0cyBhcmUgaW50ZXJuZWQgd2hlbgorICAgICAgICAjIHVucGlja2xpbmcuCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICB4ID0gQygpCisgICAgICAgICAgICB4LmZvbyA9IDQyCisgICAgICAgICAgICB4LmJhciA9ICJoZWxsbyIKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHhfa2V5cyA9IHNvcnRlZCh4Ll9fZGljdF9fKQorICAgICAgICAgICAgeV9rZXlzID0gc29ydGVkKHkuX19kaWN0X18pCisgICAgICAgICAgICBmb3IgeF9rZXksIHlfa2V5IGluIHppcCh4X2tleXMsIHlfa2V5cyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4X2tleSwgeV9rZXkpCisKKwogIyBUZXN0IGNsYXNzZXMgZm9yIHJlZHVjZV9leAogCiBjbGFzcyBSRVhfb25lKG9iamVjdCk6CkBAIC0xMDAxLDEzICsxMDY1LDIwIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQogCisgICAgZGVmIHRlc3RfbG9hZF9mcm9tX2FuZF9kdW1wX3RvX2ZpbGUoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGRhdGEgPSBbMTIzLCB7fSwgMTI0XQorICAgICAgICBzZWxmLm1vZHVsZS5kdW1wKGRhdGEsIHN0cmVhbSkKKyAgICAgICAgc3RyZWFtLnNlZWsoMCkKKyAgICAgICAgdW5waWNrbGVkID0gc2VsZi5tb2R1bGUubG9hZChzdHJlYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkLCBkYXRhKQorCiAgICAgZGVmIHRlc3RfaGlnaGVzdF9wcm90b2NvbChzZWxmKToKICAgICAgICAgIyBPZiBjb3Vyc2UgdGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHdoZW4gSElHSEVTVF9QUk9UT0NPTCBjaGFuZ2VzLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kdWxlLkhJR0hFU1RfUFJPVE9DT0wsIDIpCiAKICAgICBkZWYgdGVzdF9jYWxsYXBpKHNlbGYpOgotICAgICAgICBmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KLSAgICAgICAgZiA9IFN0cmluZ0lPKCkKKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgICMgV2l0aCBhbmQgd2l0aG91dCBrZXl3b3JkIGFyZ3VtZW50cwogICAgICAgICBzZWxmLm1vZHVsZS5kdW1wKDEyMywgZiwgLTEpCiAgICAgICAgIHNlbGYubW9kdWxlLmR1bXAoMTIzLCBmaWxlPWYsIHByb3RvY29sPS0xKQpAQCAtMTA3MywzICsxMTQ0LDExNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhMLCAxKSksIEwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pZF9jb3VudCwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRfY291bnQsIDUpCisKK2NsYXNzIEFic3RyYWN0UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHBpY2tsZXJfY2xhc3MgPSBOb25lCisgICAgdW5waWNrbGVyX2NsYXNzID0gTm9uZQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5waWNrbGVyX2NsYXNzCisgICAgICAgIGFzc2VydCBzZWxmLnVucGlja2xlcl9jbGFzcworCisgICAgZGVmIHRlc3RfY2xlYXJfcGlja2xlcl9tZW1vKHNlbGYpOgorICAgICAgICAjIFRvIHRlc3Qgd2hldGhlciBjbGVhcl9tZW1vKCkgaGFzIGFueSBlZmZlY3QsIHdlIHBpY2tsZSBhbiBvYmplY3QsCisgICAgICAgICMgdGhlbiBwaWNrbGUgaXQgYWdhaW4gd2l0aG91dCBjbGVhcmluZyB0aGUgbWVtbzsgdGhlIHR3byBzZXJpYWxpemVkCisgICAgICAgICMgZm9ybXMgc2hvdWxkIGJlIGRpZmZlcmVudC4gSWYgd2UgY2xlYXJfbWVtbygpIGFuZCB0aGVuIHBpY2tsZSB0aGUKKyAgICAgICAgIyBvYmplY3QgYWdhaW4sIHRoZSB0aGlyZCBzZXJpYWxpemVkIGZvcm0gc2hvdWxkIGJlIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAgIyBmaXJzdCBvbmUgd2Ugb2J0YWluZWQuCisgICAgICAgIGRhdGEgPSBbImFiY2RlZmciLCAiYWJjZGVmZyIsIDQ0XQorICAgICAgICBmID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmKQorCisgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhKQorICAgICAgICBmaXJzdF9waWNrbGVkID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgIyBSZXNldCBTdHJpbmdJTyBvYmplY3QuCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBmLnRydW5jYXRlKCkKKworICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YSkKKyAgICAgICAgc2Vjb25kX3BpY2tsZWQgPSBmLmdldHZhbHVlKCkKKworICAgICAgICAjIFJlc2V0IHRoZSBQaWNrbGVyIGFuZCBTdHJpbmdJTyBvYmplY3RzLgorICAgICAgICBwaWNrbGVyLmNsZWFyX21lbW8oKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgZi50cnVuY2F0ZSgpCisKKyAgICAgICAgcGlja2xlci5kdW1wKGRhdGEpCisgICAgICAgIHRoaXJkX3BpY2tsZWQgPSBmLmdldHZhbHVlKCkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZpcnN0X3BpY2tsZWQsIHNlY29uZF9waWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X3BpY2tsZWQsIHRoaXJkX3BpY2tsZWQpCisKKyAgICBkZWYgdGVzdF9wcmltaW5nX3BpY2tsZXJfbWVtbyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCB3ZSBjYW4gc2V0IHRoZSBQaWNrbGVyJ3MgbWVtbyBhdHRyaWJ1dGUuCisgICAgICAgIGRhdGEgPSBbImFiY2RlZmciLCAiYWJjZGVmZyIsIDQ0XQorICAgICAgICBmID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmKQorCisgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhKQorICAgICAgICBmaXJzdF9waWNrbGVkID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHByaW1lZCA9IHNlbGYucGlja2xlcl9jbGFzcyhmKQorICAgICAgICBwcmltZWQubWVtbyA9IHBpY2tsZXIubWVtbworCisgICAgICAgIHByaW1lZC5kdW1wKGRhdGEpCisgICAgICAgIHByaW1lZF9waWNrbGVkID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmaXJzdF9waWNrbGVkLCBwcmltZWRfcGlja2xlZCkKKworICAgIGRlZiB0ZXN0X3ByaW1pbmdfdW5waWNrbGVyX21lbW8oc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgd2UgY2FuIHNldCB0aGUgVW5waWNrbGVyJ3MgbWVtbyBhdHRyaWJ1dGUuCisgICAgICAgIGRhdGEgPSBbImFiY2RlZmciLCAiYWJjZGVmZyIsIDQ0XQorICAgICAgICBmID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmKQorCisgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhKQorICAgICAgICBmaXJzdF9waWNrbGVkID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHByaW1lZCA9IHNlbGYucGlja2xlcl9jbGFzcyhmKQorICAgICAgICBwcmltZWQubWVtbyA9IHBpY2tsZXIubWVtbworCisgICAgICAgIHByaW1lZC5kdW1wKGRhdGEpCisgICAgICAgIHByaW1lZF9waWNrbGVkID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgdW5waWNrbGVyID0gc2VsZi51bnBpY2tsZXJfY2xhc3MoY1N0cmluZ0lPLlN0cmluZ0lPKGZpcnN0X3BpY2tsZWQpKQorICAgICAgICB1bnBpY2tsZWRfZGF0YTEgPSB1bnBpY2tsZXIubG9hZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWRfZGF0YTEsIGRhdGEpCisKKyAgICAgICAgcHJpbWVkID0gc2VsZi51bnBpY2tsZXJfY2xhc3MoY1N0cmluZ0lPLlN0cmluZ0lPKHByaW1lZF9waWNrbGVkKSkKKyAgICAgICAgcHJpbWVkLm1lbW8gPSB1bnBpY2tsZXIubWVtbworICAgICAgICB1bnBpY2tsZWRfZGF0YTIgPSBwcmltZWQubG9hZCgpCisKKyAgICAgICAgcHJpbWVkLm1lbW8uY2xlYXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkX2RhdGEyLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5waWNrbGVkX2RhdGEyIGlzIHVucGlja2xlZF9kYXRhMSkKKworICAgIGRlZiB0ZXN0X3JldXNpbmdfdW5waWNrbGVyX29iamVjdHMoc2VsZik6CisgICAgICAgIGRhdGExID0gWyJhYmNkZWZnIiwgImFiY2RlZmciLCA0NF0KKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgcGlja2xlci5kdW1wKGRhdGExKQorICAgICAgICBwaWNrbGVkMSA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIGRhdGEyID0gWyJhYmNkZWZnIiwgNDQsIDQ0XQorICAgICAgICBmID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmKQorICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YTIpCisgICAgICAgIHBpY2tsZWQyID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGYud3JpdGUocGlja2xlZDEpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICB1bnBpY2tsZXIgPSBzZWxmLnVucGlja2xlcl9jbGFzcyhmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlci5sb2FkKCksIGRhdGExKQorCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBmLnRydW5jYXRlKCkKKyAgICAgICAgZi53cml0ZShwaWNrbGVkMikKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVyLmxvYWQoKSwgZGF0YTIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZWdydGVzdC5weSBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CmluZGV4IDkyMGQ1NDUuLmIxZmQzYmIgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CkBAIC0xLDQ5ICsxLDgwIEBACiAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKLSIiIlJlZ3Jlc3Npb24gdGVzdC4KKyIiIgorVXNhZ2U6CiAKLVRoaXMgd2lsbCBmaW5kIGFsbCBtb2R1bGVzIHdob3NlIG5hbWUgaXMgInRlc3RfKiIgaW4gdGhlIHRlc3QKLWRpcmVjdG9yeSwgYW5kIHJ1biB0aGVtLiAgVmFyaW91cyBjb21tYW5kIGxpbmUgb3B0aW9ucyBwcm92aWRlCi1hZGRpdGlvbmFsIGZhY2lsaXRpZXMuCitweXRob24gLW0gdGVzdC5yZWdydGVzdCBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgW3Rlc3RfbmFtZTIgLi4uXV0KK3B5dGhvbiBwYXRoL3RvL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5IFtvcHRpb25zXSBbdGVzdF9uYW1lMSBbdGVzdF9uYW1lMiAuLi5dXQogCi1Db21tYW5kIGxpbmUgb3B0aW9uczoKIAotLXY6IHZlcmJvc2UgICAgLS0gcnVuIHRlc3RzIGluIHZlcmJvc2UgbW9kZSB3aXRoIG91dHB1dCB0byBzdGRvdXQKLS13OiB2ZXJib3NlMiAgIC0tIHJlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlCi0tcTogcXVpZXQgICAgICAtLSBkb24ndCBwcmludCBhbnl0aGluZyBleGNlcHQgaWYgYSB0ZXN0IGZhaWxzCi0teDogZXhjbHVkZSAgICAtLSBhcmd1bWVudHMgYXJlIHRlc3RzIHRvICpleGNsdWRlKgotLXM6IHNpbmdsZSAgICAgLS0gcnVuIG9ubHkgYSBzaW5nbGUgdGVzdCAoc2VlIGJlbG93KQotLVM6IHNsb3cgICAgICAgLS0gcHJpbnQgdGhlIHNsb3dlc3QgMTAgdGVzdHMKLS1yOiByYW5kb20gICAgIC0tIHJhbmRvbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBvcmRlcgotLWY6IGZyb21maWxlICAgLS0gcmVhZCBuYW1lcyBvZiB0ZXN0cyB0byBydW4gZnJvbSBhIGZpbGUgKHNlZSBiZWxvdykKLS1sOiBmaW5kbGVha3MgIC0tIGlmIEdDIGlzIGF2YWlsYWJsZSBkZXRlY3QgdGVzdHMgdGhhdCBsZWFrIG1lbW9yeQotLXU6IHVzZSAgICAgICAgLS0gc3BlY2lmeSB3aGljaCBzcGVjaWFsIHJlc291cmNlIGludGVuc2l2ZSB0ZXN0cyB0byBydW4KLS1oOiBoZWxwICAgICAgIC0tIHByaW50IHRoaXMgdGV4dCBhbmQgZXhpdAotLXQ6IHRocmVzaG9sZCAgLS0gY2FsbCBnYy5zZXRfdGhyZXNob2xkKE4pCi0tVDogY292ZXJhZ2UgICAtLSB0dXJuIG9uIGNvZGUgY292ZXJhZ2UgdXNpbmcgdGhlIHRyYWNlIG1vZHVsZQotLUQ6IGNvdmVyZGlyICAgLS0gRGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQKLS1OOiBub2NvdmVyZGlyIC0tIFB1dCBjb3ZlcmFnZSBmaWxlcyBhbG9uZ3NpZGUgbW9kdWxlcwotLUw6IHJ1bmxlYWtzICAgLS0gcnVuIHRoZSBsZWFrcygxKSBjb21tYW5kIGp1c3QgYmVmb3JlIGV4aXQKLS1SOiBodW50cmxlYWtzIC0tIHNlYXJjaCBmb3IgcmVmZXJlbmNlIGxlYWtzIChuZWVkcyBkZWJ1ZyBidWlsZCwgdi4gc2xvdykKLS1NOiBtZW1saW1pdCAgIC0tIHJ1biB2ZXJ5IGxhcmdlIG1lbW9yeS1jb25zdW1pbmcgdGVzdHMKK0lmIG5vIGFyZ3VtZW50cyBvciBvcHRpb25zIGFyZSBwcm92aWRlZCwgZmluZHMgYWxsIGZpbGVzIG1hdGNoaW5nCit0aGUgcGF0dGVybiAidGVzdF8qIiBpbiB0aGUgTGliL3Rlc3Qgc3ViZGlyZWN0b3J5IGFuZCBydW5zCit0aGVtIGluIGFscGhhYmV0aWNhbCBvcmRlciAoYnV0IHNlZSAtTSBhbmQgLXUsIGJlbG93LCBmb3IgZXhjZXB0aW9ucykuCiAKLUlmIG5vbi1vcHRpb24gYXJndW1lbnRzIGFyZSBwcmVzZW50LCB0aGV5IGFyZSBuYW1lcyBmb3IgdGVzdHMgdG8gcnVuLAotdW5sZXNzIC14IGlzIGdpdmVuLCBpbiB3aGljaCBjYXNlIHRoZXkgYXJlIG5hbWVzIGZvciB0ZXN0cyBub3QgdG8gcnVuLgotSWYgbm8gdGVzdCBuYW1lcyBhcmUgZ2l2ZW4sIGFsbCB0ZXN0cyBhcmUgcnVuLgorRm9yIG1vcmUgcmlnb3JvdXMgdGVzdGluZywgaXQgaXMgdXNlZnVsIHRvIHVzZSB0aGUgZm9sbG93aW5nCitjb21tYW5kIGxpbmU6CiAKLS1UIHR1cm5zIG9uIGNvZGUgY292ZXJhZ2UgdHJhY2luZyB3aXRoIHRoZSB0cmFjZSBtb2R1bGUuCitweXRob24gLUUgLXR0IC1XZCAtMyAtbSB0ZXN0LnJlZ3J0ZXN0IFtvcHRpb25zXSBbdGVzdF9uYW1lMSAuLi5dCiAKLS1EIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQuCiAKLS1OIFB1dCBjb3ZlcmFnZSBmaWxlcyBhbG9uZ3NpZGUgbW9kdWxlcy4KK09wdGlvbnM6CiAKLS1zIG1lYW5zIHRvIHJ1biBvbmx5IGEgc2luZ2xlIHRlc3QgYW5kIGV4aXQuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCi1kb2luZyBtZW1vcnkgYW5hbHlzaXMgb24gdGhlIFB5dGhvbiBpbnRlcnByZXRlciAod2hpY2ggdGVuZCB0byBjb25zdW1lCi10b28gbWFueSByZXNvdXJjZXMgdG8gcnVuIHRoZSBmdWxsIHJlZ3Jlc3Npb24gdGVzdCBub24tc3RvcCkuICBUaGUKLWZpbGUgL3RtcC9weW5leHR0ZXN0IGlzIHJlYWQgdG8gZmluZCB0aGUgbmV4dCB0ZXN0IHRvIHJ1bi4gIElmIHRoaXMKLWZpbGUgaXMgbWlzc2luZywgdGhlIGZpcnN0IHRlc3RfKi5weSBmaWxlIGluIHRlc3RkaXIgb3Igb24gdGhlIGNvbW1hbmQKLWxpbmUgaXMgdXNlZC4gIChhY3R1YWxseSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkgaXMgdXNlZCBpbnN0ZWFkIG9mCi0vdG1wKS4KKy1oLy0taGVscCAgICAgICAtLSBwcmludCB0aGlzIHRleHQgYW5kIGV4aXQKKworVmVyYm9zaXR5CisKKy12Ly0tdmVyYm9zZSAgICAtLSBydW4gdGVzdHMgaW4gdmVyYm9zZSBtb2RlIHdpdGggb3V0cHV0IHRvIHN0ZG91dAorLXcvLS12ZXJib3NlMiAgIC0tIHJlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlCistVy8tLXZlcmJvc2UzICAgLS0gcmUtcnVuIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUgaW1tZWRpYXRlbHkKKy1xLy0tcXVpZXQgICAgICAtLSBubyBvdXRwdXQgdW5sZXNzIG9uZSBvciBtb3JlIHRlc3RzIGZhaWwKKy1TLy0tc2xvdyAgICAgICAtLSBwcmludCB0aGUgc2xvd2VzdCAxMCB0ZXN0cworICAgLS1oZWFkZXIgICAgIC0tIHByaW50IGhlYWRlciB3aXRoIGludGVycHJldGVyIGluZm8KKworU2VsZWN0aW5nIHRlc3RzCisKKy1yLy0tcmFuZG9tICAgICAtLSByYW5kb21pemUgdGVzdCBleGVjdXRpb24gb3JkZXIgKHNlZSBiZWxvdykKKyAgIC0tcmFuZHNlZWQgICAtLSBwYXNzIGEgcmFuZG9tIHNlZWQgdG8gcmVwcm9kdWNlIGEgcHJldmlvdXMgcmFuZG9tIHJ1bgorLWYvLS1mcm9tZmlsZSAgIC0tIHJlYWQgbmFtZXMgb2YgdGVzdHMgdG8gcnVuIGZyb20gYSBmaWxlIChzZWUgYmVsb3cpCisteC8tLWV4Y2x1ZGUgICAgLS0gYXJndW1lbnRzIGFyZSB0ZXN0cyB0byAqZXhjbHVkZSoKKy1zLy0tc2luZ2xlICAgICAtLSBzaW5nbGUgc3RlcCB0aHJvdWdoIGEgc2V0IG9mIHRlc3RzIChzZWUgYmVsb3cpCistdS8tLXVzZSBSRVMxLFJFUzIsLi4uCisgICAgICAgICAgICAgICAgLS0gc3BlY2lmeSB3aGljaCBzcGVjaWFsIHJlc291cmNlIGludGVuc2l2ZSB0ZXN0cyB0byBydW4KKy1NLy0tbWVtbGltaXQgTElNSVQKKyAgICAgICAgICAgICAgICAtLSBydW4gdmVyeSBsYXJnZSBtZW1vcnktY29uc3VtaW5nIHRlc3RzCisKK1NwZWNpYWwgcnVucworCistbC8tLWZpbmRsZWFrcyAgLS0gaWYgR0MgaXMgYXZhaWxhYmxlIGRldGVjdCB0ZXN0cyB0aGF0IGxlYWsgbWVtb3J5CistTC8tLXJ1bmxlYWtzICAgLS0gcnVuIHRoZSBsZWFrcygxKSBjb21tYW5kIGp1c3QgYmVmb3JlIGV4aXQKKy1SLy0taHVudHJsZWFrcyBSVU5DT1VOVFMKKyAgICAgICAgICAgICAgICAtLSBzZWFyY2ggZm9yIHJlZmVyZW5jZSBsZWFrcyAobmVlZHMgZGVidWcgYnVpbGQsIHYuIHNsb3cpCistai8tLW11bHRpcHJvY2VzcyBQUk9DRVNTRVMKKyAgICAgICAgICAgICAgICAtLSBydW4gUFJPQ0VTU0VTIHByb2Nlc3NlcyBhdCBvbmNlCistVC8tLWNvdmVyYWdlICAgLS0gdHVybiBvbiBjb2RlIGNvdmVyYWdlIHRyYWNpbmcgdXNpbmcgdGhlIHRyYWNlIG1vZHVsZQorLUQvLS1jb3ZlcmRpciBESVJFQ1RPUlkKKyAgICAgICAgICAgICAgICAtLSBEaXJlY3Rvcnkgd2hlcmUgY292ZXJhZ2UgZmlsZXMgYXJlIHB1dAorLU4vLS1ub2NvdmVyZGlyIC0tIFB1dCBjb3ZlcmFnZSBmaWxlcyBhbG9uZ3NpZGUgbW9kdWxlcworLXQvLS10aHJlc2hvbGQgVEhSRVNIT0xECisgICAgICAgICAgICAgICAgLS0gY2FsbCBnYy5zZXRfdGhyZXNob2xkKFRIUkVTSE9MRCkKKy1GLy0tZm9yZXZlciAgICAtLSBydW4gdGhlIHNwZWNpZmllZCB0ZXN0cyBpbiBhIGxvb3AsIHVudGlsIGFuIGVycm9yIGhhcHBlbnMKKworCitBZGRpdGlvbmFsIE9wdGlvbiBEZXRhaWxzOgorCistciByYW5kb21pemVzIHRlc3QgZXhlY3V0aW9uIG9yZGVyLiBZb3UgY2FuIHVzZSAtLXJhbmRzZWVkPWludCB0byBwcm92aWRlIGEKK2ludCBzZWVkIHZhbHVlIGZvciB0aGUgcmFuZG9taXplcjsgdGhpcyBpcyB1c2VmdWwgZm9yIHJlcHJvZHVjaW5nIHRyb3VibGVzb21lCit0ZXN0IG9yZGVycy4KKworLXMgT24gdGhlIGZpcnN0IGludm9jYXRpb24gb2YgcmVncnRlc3QgdXNpbmcgLXMsIHRoZSBmaXJzdCB0ZXN0IGZpbGUgZm91bmQKK29yIHRoZSBmaXJzdCB0ZXN0IGZpbGUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBpcyBydW4sIGFuZCB0aGUgbmFtZSBvZgordGhlIG5leHQgdGVzdCBpcyByZWNvcmRlZCBpbiBhIGZpbGUgbmFtZWQgcHluZXh0dGVzdC4gIElmIHJ1biBmcm9tIHRoZQorUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeSwgcHluZXh0dGVzdCBpcyBsb2NhdGVkIGluIHRoZSAnYnVpbGQnIHN1YmRpcmVjdG9yeSwKK290aGVyd2lzZSBpdCBpcyBsb2NhdGVkIGluIHRlbXBmaWxlLmdldHRlbXBkaXIoKS4gIE9uIHN1YnNlcXVlbnQgcnVucywKK3RoZSB0ZXN0IGluIHB5bmV4dHRlc3QgaXMgcnVuLCBhbmQgdGhlIG5leHQgdGVzdCBpcyB3cml0dGVuIHRvIHB5bmV4dHRlc3QuCitXaGVuIHRoZSBsYXN0IHRlc3QgaGFzIGJlZW4gcnVuLCBweW5leHR0ZXN0IGlzIGRlbGV0ZWQuICBJbiB0aGlzIHdheSBpdAoraXMgcG9zc2libGUgdG8gc2luZ2xlIHN0ZXAgdGhyb3VnaCB0aGUgdGVzdCBmaWxlcy4gIFRoaXMgaXMgdXNlZnVsIHdoZW4KK2RvaW5nIG1lbW9yeSBhbmFseXNpcyBvbiB0aGUgUHl0aG9uIGludGVycHJldGVyLCB3aGljaCBwcm9jZXNzIHRlbmRzIHRvCitjb25zdW1lIHRvbyBtYW55IHJlc291cmNlcyB0byBydW4gdGhlIGZ1bGwgcmVncmVzc2lvbiB0ZXN0IG5vbi1zdG9wLgogCiAtZiByZWFkcyB0aGUgbmFtZXMgb2YgdGVzdHMgZnJvbSB0aGUgZmlsZSBnaXZlbiBhcyBmJ3MgYXJndW1lbnQsIG9uZQogb3IgbW9yZSB0ZXN0IG5hbWVzIHBlciBsaW5lLiAgV2hpdGVzcGFjZSBpcyBpZ25vcmVkLiAgQmxhbmsgbGluZXMgYW5kCkBAIC02MCw3ICs5MSw3IEBACiB0ZXN0IGlzIHJ1biB0byBsZXQgZ2V0dG90YWxyZWZjb3VudCBzZXR0bGUgZG93biwgJ3J1bicgaXMgdGhlIG51bWJlcgogb2YgdGltZXMgZnVydGhlciBpdCBpcyBydW4gYW5kICdmbmFtZScgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhlCiByZXBvcnRzIGFyZSB3cml0dGVuIHRvLiAgVGhlc2UgcGFyYW1ldGVycyBhbGwgaGF2ZSBkZWZhdWx0cyAoNSwgNCBhbmQKLSJyZWZsb2cudHh0IiByZXNwZWN0aXZlbHkpLCBzbyB0aGUgbWluaW1hbCBpbnZvY2F0aW9uIGlzICctUiA6OicuCisicmVmbG9nLnR4dCIgcmVzcGVjdGl2ZWx5KSwgYW5kIHRoZSBtaW5pbWFsIGludm9jYXRpb24gaXMgJy1SIDonLgogCiAtTSBydW5zIHRlc3RzIHRoYXQgcmVxdWlyZSBhbiBleG9yYml0YW50IGFtb3VudCBvZiBtZW1vcnkuIFRoZXNlIHRlc3RzCiB0eXBpY2FsbHkgdHJ5IHRvIGFzY2VydGFpbiBjb250YWluZXJzIGtlZXAgd29ya2luZyB3aGVuIGNvbnRhaW5pbmcgbW9yZSB0aGFuCkBAIC05MSw4ICsxMjIsNiBAQAogICAgIGN1cnNlcyAtICAgIFRlc3RzIHRoYXQgdXNlIGN1cnNlcyBhbmQgd2lsbCBtb2RpZnkgdGhlIHRlcm1pbmFsJ3MKICAgICAgICAgICAgICAgICBzdGF0ZSBhbmQgb3V0cHV0IG1vZGVzLgogCi0gICAgbGliMnRvMyAtICAgUnVuIHRoZSB0ZXN0cyBmb3IgMnRvMyAoVGhleSB0YWtlIGEgd2hpbGUuKQotCiAgICAgbGFyZ2VmaWxlIC0gSXQgaXMgb2theSB0byBydW4gc29tZSB0ZXN0IHRoYXQgbWF5IGNyZWF0ZSBodWdlCiAgICAgICAgICAgICAgICAgZmlsZXMuICBUaGVzZSB0ZXN0cyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgbWF5CiAgICAgICAgICAgICAgICAgY29uc3VtZSA+MkdCIG9mIGRpc2sgc3BhY2UgdGVtcG9yYXJpbHkuCkBAIC0xMDYsMjMgKzEzNSwyNiBAQAogICAgIGRlY2ltYWwgLSAgIFRlc3QgdGhlIGRlY2ltYWwgbW9kdWxlIGFnYWluc3QgYSBsYXJnZSBzdWl0ZSB0aGF0CiAgICAgICAgICAgICAgICAgdmVyaWZpZXMgY29tcGxpYW5jZSB3aXRoIHN0YW5kYXJkcy4KIAotICAgIGNvbXBpbGVyIC0gIFRlc3QgdGhlIGNvbXBpbGVyIHBhY2thZ2UgYnkgY29tcGlsaW5nIGFsbCB0aGUgc291cmNlCi0gICAgICAgICAgICAgICAgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgYW5kIHRlc3Qgc3VpdGUuICBUaGlzIHRha2VzCi0gICAgICAgICAgICAgICAgYSBsb25nIHRpbWUuICBFbmFibGluZyB0aGlzIHJlc291cmNlIGFsc28gYWxsb3dzCi0gICAgICAgICAgICAgICAgdGVzdF90b2tlbml6ZSB0byB2ZXJpZnkgcm91bmQtdHJpcCBsZXhpbmcgb24gZXZlcnkKLSAgICAgICAgICAgICAgICBmaWxlIGluIHRoZSB0ZXN0IGxpYnJhcnkuCisgICAgY3B1IC0gICAgICAgVXNlZCBmb3IgY2VydGFpbiBDUFUtaGVhdnkgdGVzdHMuCiAKICAgICBzdWJwcm9jZXNzICBSdW4gYWxsIHRlc3RzIGZvciB0aGUgc3VicHJvY2VzcyBtb2R1bGUuCiAKICAgICB1cmxmZXRjaCAtICBJdCBpcyBva2F5IHRvIGRvd25sb2FkIGZpbGVzIHJlcXVpcmVkIG9uIHRlc3RpbmcuCiAKKyAgICBndWkgLSAgICAgICBSdW4gdGVzdHMgdGhhdCByZXF1aXJlIGEgcnVubmluZyBHVUkuCisKKyAgICB4cGlja2xlIC0gICBUZXN0IHBpY2tsZSBhbmQgY1BpY2tsZSBhZ2FpbnN0IFB5dGhvbiAyLjQsIDIuNSBhbmQgMi42IHRvCisgICAgICAgICAgICAgICAgdGVzdCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlc2UgdGVzdHMgdGFrZSBhIGxvbmcgdGltZQorICAgICAgICAgICAgICAgIHRvIHJ1bi4KKwogVG8gZW5hYmxlIGFsbCByZXNvdXJjZXMgZXhjZXB0IG9uZSwgdXNlICctdWFsbCwtPHJlc291cmNlPicuICBGb3IKIGV4YW1wbGUsIHRvIHJ1biBhbGwgdGhlIHRlc3RzIGV4Y2VwdCBmb3IgdGhlIGJzZGRiIHRlc3RzLCBnaXZlIHRoZQogb3B0aW9uICctdWFsbCwtYnNkZGInLgogIiIiCiAKLWltcG9ydCBjU3RyaW5nSU8KK2ltcG9ydCBTdHJpbmdJTwogaW1wb3J0IGdldG9wdAoraW1wb3J0IGpzb24KIGltcG9ydCBvcwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHJlCkBAIC0xMzAsMjggKzE2MiwyOSBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCB3YXJuaW5ncwotIyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBhc2NpaSBtb2R1bGUgdG8gd29ya2Fyb3VuZCAjNzE0MCBidWcKLSMgKHNlZSBpc3N1ZSAjNzAyNykKLWltcG9ydCBlbmNvZGluZ3MuYXNjaWkKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgaW1wCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzeXNjb25maWcKIAotIyBJIHNlZSBubyBvdGhlciB3YXkgdG8gc3VwcHJlc3MgdGhlc2Ugd2FybmluZ3M7Ci0jIHB1dHRpbmcgdGhlbSBpbiB0ZXN0X2dyYW1tYXIucHkgaGFzIG5vIGVmZmVjdDoKLXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiaGV4L29jdCBjb25zdGFudHMiLCBGdXR1cmVXYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgIi4qdGVzdC50ZXN0X2dyYW1tYXIkIikKLWlmIHN5cy5tYXhpbnQgPiAweDdmZmZmZmZmOgotICAgICMgQWxzbyBzdXBwcmVzcyB0aGVtIGluIDxzdHJpbmc+LCBiZWNhdXNlIGZvciA2NC1iaXQgcGxhdGZvcm1zLAotICAgICMgdGhhdCdzIHdoZXJlIHRlc3RfZ3JhbW1hci5weSBoaWRlcyB0aGVtLgotICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiaGV4L29jdCBjb25zdGFudHMiLCBGdXR1cmVXYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3RyaW5nPiIpCiAKLSMgSWdub3JlIEltcG9ydFdhcm5pbmdzIHRoYXQgb25seSBvY2N1ciBpbiB0aGUgc291cmNlIHRyZWUsCi0jIChiZWNhdXNlIG9mIG1vZHVsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHNvdXJjZS1kaXJlY3RvcmllcyBpbiBNb2R1bGVzLykKLWZvciBtb2QgaW4gKCJjdHlwZXMiLCAiZ3ppcCIsICJ6aXBmaWxlIiwgInRhcmZpbGUiLCAiZW5jb2RpbmdzLnpsaWJfY29kZWMiLAotICAgICAgICAgICAgInRlc3QudGVzdF96aXBpbXBvcnQiLCAidGVzdC50ZXN0X3psaWIiLCAidGVzdC50ZXN0X3ppcGZpbGUiLAotICAgICAgICAgICAgInRlc3QudGVzdF9jb2RlY3MiLCAidGVzdC5zdHJpbmdfdGVzdHMiKToKLSAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncyhtb2R1bGU9Ii4qJXMkIiAlIChtb2QsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249Imlnbm9yZSIsIGNhdGVnb3J5PUltcG9ydFdhcm5pbmcpCisjIFNvbWUgdGltZXMgX19wYXRoX18gYW5kIF9fZmlsZV9fIGFyZSBub3QgYWJzb2x1dGUgKGUuZy4gd2hpbGUgcnVubmluZyBmcm9tCisjIExpYi8pIGFuZCwgaWYgd2UgY2hhbmdlIHRoZSBDV0QgdG8gcnVuIHRoZSB0ZXN0cyBpbiBhIHRlbXBvcmFyeSBkaXIsIHNvbWUKKyMgaW1wb3J0cyBtaWdodCBmYWlsLiAgVGhpcyBhZmZlY3RzIG9ubHkgdGhlIG1vZHVsZXMgaW1wb3J0ZWQgYmVmb3JlIG9zLmNoZGlyKCkuCisjIFRoZXNlIG1vZHVsZXMgYXJlIHNlYXJjaGVkIGZpcnN0IGluIHN5cy5wYXRoWzBdIChzbyAnJyAtLSB0aGUgQ1dEKSBhbmQgaWYKKyMgdGhleSBhcmUgZm91bmQgaW4gdGhlIENXRCB0aGVpciBfX2ZpbGVfXyBhbmQgX19wYXRoX18gd2lsbCBiZSByZWxhdGl2ZSAodGhpcworIyBoYXBwZW5zIGJlZm9yZSB0aGUgY2hkaXIpLiAgQWxsIHRoZSBtb2R1bGVzIGltcG9ydGVkIGFmdGVyIHRoZSBjaGRpciwgYXJlCisjIG5vdCBmb3VuZCBpbiB0aGUgQ1dELCBhbmQgc2luY2UgdGhlIG90aGVyIHBhdGhzIGluIHN5cy5wYXRoWzE6XSBhcmUgYWJzb2x1dGUKKyMgKHNpdGUucHkgYWJzb2x1dGl6ZSB0aGVtKSwgdGhlIF9fZmlsZV9fIGFuZCBfX3BhdGhfXyB3aWxsIGJlIGFic29sdXRlIHRvby4KKyMgVGhlcmVmb3JlIGl0IGlzIG5lY2Vzc2FyeSB0byBhYnNvbHV0aXplIG1hbnVhbGx5IHRoZSBfX2ZpbGVfXyBhbmQgX19wYXRoX18gb2YKKyMgdGhlIHBhY2thZ2VzIHRvIHByZXZlbnQgbGF0ZXIgaW1wb3J0cyB0byBmYWlsIHdoZW4gdGhlIENXRCBpcyBkaWZmZXJlbnQuCitmb3IgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZXJ2YWx1ZXMoKToKKyAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtvcy5wYXRoLmFic3BhdGgocGF0aCkgZm9yIHBhdGggaW4gbW9kdWxlLl9fcGF0aF9fXQorICAgIGlmIGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKToKKyAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gb3MucGF0aC5hYnNwYXRoKG1vZHVsZS5fX2ZpbGVfXykKKwogCiAjIE1hY09TWCAoYS5rLmEuIERhcndpbikgaGFzIGEgZGVmYXVsdCBzdGFjayBzaXplIHRoYXQgaXMgdG9vIHNtYWxsCiAjIGZvciBkZWVwbHkgcmVjdXJzaXZlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuICBXZSBzZWUgdGhpcyBhcyBjcmFzaGVzIGluCkBAIC0xNjksMTAgKzIwMiwyMSBAQAogICAgICAgICBuZXdzb2Z0ID0gbWluKGhhcmQsIG1heChzb2Z0LCAxMDI0KjIwNDgpKQogICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX1NUQUNLLCAobmV3c29mdCwgaGFyZCkpCiAKKyMgVGVzdCByZXN1bHQgY29uc3RhbnRzLgorUEFTU0VEID0gMQorRkFJTEVEID0gMAorRU5WX0NIQU5HRUQgPSAtMQorU0tJUFBFRCA9IC0yCitSRVNPVVJDRV9ERU5JRUQgPSAtMworSU5URVJSVVBURUQgPSAtNAorCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiBSRVNPVVJDRV9OQU1FUyA9ICgnYXVkaW8nLCAnY3Vyc2VzJywgJ2xhcmdlZmlsZScsICduZXR3b3JrJywgJ2JzZGRiJywKLSAgICAgICAgICAgICAgICAgICdkZWNpbWFsJywgJ2NvbXBpbGVyJywgJ3N1YnByb2Nlc3MnLCAndXJsZmV0Y2gnKQorICAgICAgICAgICAgICAgICAgJ2RlY2ltYWwnLCAnY3B1JywgJ3N1YnByb2Nlc3MnLCAndXJsZmV0Y2gnLCAnZ3VpJywKKyAgICAgICAgICAgICAgICAgICd4cGlja2xlJykKKworVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkpCiAKIAogZGVmIHVzYWdlKGNvZGUsIG1zZz0nJyk6CkBAIC0xODQsNyArMjI4LDkgQEAKIGRlZiBtYWluKHRlc3RzPU5vbmUsIHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwKICAgICAgICAgIGV4Y2x1ZGU9RmFsc2UsIHNpbmdsZT1GYWxzZSwgcmFuZG9taXplPUZhbHNlLCBmcm9tZmlsZT1Ob25lLAogICAgICAgICAgZmluZGxlYWtzPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUsIHRyYWNlPUZhbHNlLCBjb3ZlcmRpcj0nY292ZXJhZ2UnLAotICAgICAgICAgcnVubGVha3M9RmFsc2UsIGh1bnRybGVha3M9RmFsc2UsIHZlcmJvc2UyPUZhbHNlLCBwcmludF9zbG93PUZhbHNlKToKKyAgICAgICAgIHJ1bmxlYWtzPUZhbHNlLCBodW50cmxlYWtzPUZhbHNlLCB2ZXJib3NlMj1GYWxzZSwgcHJpbnRfc2xvdz1GYWxzZSwKKyAgICAgICAgIHJhbmRvbV9zZWVkPU5vbmUsIHVzZV9tcD1Ob25lLCB2ZXJib3NlMz1GYWxzZSwgZm9yZXZlcj1GYWxzZSwKKyAgICAgICAgIGhlYWRlcj1GYWxzZSk6CiAgICAgIiIiRXhlY3V0ZSBhIHRlc3Qgc3VpdGUuCiAKICAgICBUaGlzIGFsc28gcGFyc2VzIGNvbW1hbmQtbGluZSBvcHRpb25zIGFuZCBtb2RpZmllcyBpdHMgYmVoYXZpb3IKQEAgLTIwMiwyNCArMjQ4LDI2IEBACiAgICAgZmlsZXMgYmVnaW5uaW5nIHdpdGggdGVzdF8gd2lsbCBiZSB1c2VkLgogCiAgICAgVGhlIG90aGVyIGRlZmF1bHQgYXJndW1lbnRzICh2ZXJib3NlLCBxdWlldCwgZXhjbHVkZSwKLSAgICBzaW5nbGUsIHJhbmRvbWl6ZSwgZmluZGxlYWtzLCB1c2VfcmVzb3VyY2VzLCB0cmFjZSwgY292ZXJkaXIsIGFuZAotICAgIHByaW50X3Nsb3cpIGFsbG93IHByb2dyYW1tZXJzIGNhbGxpbmcgbWFpbigpIGRpcmVjdGx5IHRvIHNldCB0aGUKLSAgICB2YWx1ZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBzZXQgYnkgZmxhZ3Mgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICBzaW5nbGUsIHJhbmRvbWl6ZSwgZmluZGxlYWtzLCB1c2VfcmVzb3VyY2VzLCB0cmFjZSwgY292ZXJkaXIsCisgICAgcHJpbnRfc2xvdywgYW5kIHJhbmRvbV9zZWVkKSBhbGxvdyBwcm9ncmFtbWVycyBjYWxsaW5nIG1haW4oKQorICAgIGRpcmVjdGx5IHRvIHNldCB0aGUgdmFsdWVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgc2V0IGJ5IGZsYWdzCisgICAgb24gdGhlIGNvbW1hbmQgbGluZS4KICAgICAiIiIKIAogICAgIHRlc3Rfc3VwcG9ydC5yZWNvcmRfb3JpZ2luYWxfc3Rkb3V0KHN5cy5zdGRvdXQpCiAgICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdodnF4c1NyZjpsdTp0OlREOk5MUjp3TTonLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2hlbHAnLCAndmVyYm9zZScsICdxdWlldCcsICdleGNsdWRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW5nbGUnLCAnc2xvdycsICdyYW5kb20nLCAnZnJvbWZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbmRsZWFrcycsICd1c2U9JywgJ3RocmVzaG9sZD0nLCAndHJhY2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyZGlyPScsICdub2NvdmVyZGlyJywgJ3J1bmxlYWtzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodW50cmxlYWtzPScsICd2ZXJib3NlMicsICdtZW1saW1pdD0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaHZxeHNTcmY6bHU6dDpURDpOTFI6RndXTTpqOicsCisgICAgICAgICAgICBbJ2hlbHAnLCAndmVyYm9zZScsICd2ZXJib3NlMicsICd2ZXJib3NlMycsICdxdWlldCcsCisgICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAnc2luZ2xlJywgJ3Nsb3cnLCAncmFuZG9tJywgJ2Zyb21maWxlJywgJ2ZpbmRsZWFrcycsCisgICAgICAgICAgICAgJ3VzZT0nLCAndGhyZXNob2xkPScsICd0cmFjZScsICdjb3ZlcmRpcj0nLCAnbm9jb3ZlcmRpcicsCisgICAgICAgICAgICAgJ3J1bmxlYWtzJywgJ2h1bnRybGVha3M9JywgJ21lbWxpbWl0PScsICdyYW5kc2VlZD0nLAorICAgICAgICAgICAgICdtdWx0aXByb2Nlc3M9JywgJ3NsYXZlYXJncz0nLCAnZm9yZXZlcicsICdoZWFkZXInXSkKICAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CiAgICAgICAgIHVzYWdlKDIsIG1zZykKIAogICAgICMgRGVmYXVsdHMKKyAgICBpZiByYW5kb21fc2VlZCBpcyBOb25lOgorICAgICAgICByYW5kb21fc2VlZCA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAwMDApCiAgICAgaWYgdXNlX3Jlc291cmNlcyBpcyBOb25lOgogICAgICAgICB1c2VfcmVzb3VyY2VzID0gW10KICAgICBmb3IgbywgYSBpbiBvcHRzOgpAQCAtMjI5LDYgKzI3Nyw4IEBACiAgICAgICAgICAgICB2ZXJib3NlICs9IDEKICAgICAgICAgZWxpZiBvIGluICgnLXcnLCAnLS12ZXJib3NlMicpOgogICAgICAgICAgICAgdmVyYm9zZTIgPSBUcnVlCisgICAgICAgIGVsaWYgbyBpbiAoJy1XJywgJy0tdmVyYm9zZTMnKToKKyAgICAgICAgICAgIHZlcmJvc2UzID0gVHJ1ZQogICAgICAgICBlbGlmIG8gaW4gKCctcScsICctLXF1aWV0Jyk6CiAgICAgICAgICAgICBxdWlldCA9IFRydWU7CiAgICAgICAgICAgICB2ZXJib3NlID0gMApAQCAtMjQwLDYgKzI5MCw4IEBACiAgICAgICAgICAgICBwcmludF9zbG93ID0gVHJ1ZQogICAgICAgICBlbGlmIG8gaW4gKCctcicsICctLXJhbmRvbWl6ZScpOgogICAgICAgICAgICAgcmFuZG9taXplID0gVHJ1ZQorICAgICAgICBlbGlmIG8gPT0gJy0tcmFuZHNlZWQnOgorICAgICAgICAgICAgcmFuZG9tX3NlZWQgPSBpbnQoYSkKICAgICAgICAgZWxpZiBvIGluICgnLWYnLCAnLS1mcm9tZmlsZScpOgogICAgICAgICAgICAgZnJvbWZpbGUgPSBhCiAgICAgICAgIGVsaWYgbyBpbiAoJy1sJywgJy0tZmluZGxlYWtzJyk6CkBAIC0yNTcsMTkgKzMwOSwxOSBAQAogICAgICAgICAgICAgY292ZXJkaXIgPSBOb25lCiAgICAgICAgIGVsaWYgbyBpbiAoJy1SJywgJy0taHVudHJsZWFrcycpOgogICAgICAgICAgICAgaHVudHJsZWFrcyA9IGEuc3BsaXQoJzonKQotICAgICAgICAgICAgaWYgbGVuKGh1bnRybGVha3MpICE9IDM6CisgICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrcykgbm90IGluICgyLCAzKToKICAgICAgICAgICAgICAgICBwcmludCBhLCBodW50cmxlYWtzCi0gICAgICAgICAgICAgICAgdXNhZ2UoMiwgJy1SIHRha2VzIHRocmVlIGNvbG9uLXNlcGFyYXRlZCBhcmd1bWVudHMnKQotICAgICAgICAgICAgaWYgbGVuKGh1bnRybGVha3NbMF0pID09IDA6CisgICAgICAgICAgICAgICAgdXNhZ2UoMiwgJy1SIHRha2VzIDIgb3IgMyBjb2xvbi1zZXBhcmF0ZWQgYXJndW1lbnRzJykKKyAgICAgICAgICAgIGlmIG5vdCBodW50cmxlYWtzWzBdOgogICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMF0gPSA1CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMF0gPSBpbnQoaHVudHJsZWFrc1swXSkKLSAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzWzFdKSA9PSAwOgorICAgICAgICAgICAgaWYgbm90IGh1bnRybGVha3NbMV06CiAgICAgICAgICAgICAgICAgaHVudHJsZWFrc1sxXSA9IDQKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaHVudHJsZWFrc1sxXSA9IGludChodW50cmxlYWtzWzFdKQotICAgICAgICAgICAgaWYgbGVuKGh1bnRybGVha3NbMl0pID09IDA6Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1syXSA9ICJyZWZsb2cudHh0IgorICAgICAgICAgICAgaWYgbGVuKGh1bnRybGVha3MpID09IDIgb3Igbm90IGh1bnRybGVha3NbMl06CisgICAgICAgICAgICAgICAgaHVudHJsZWFrc1syOl0gPSBbInJlZmxvZy50eHQiXQogICAgICAgICBlbGlmIG8gaW4gKCctTScsICctLW1lbWxpbWl0Jyk6CiAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuc2V0X21lbWxpbWl0KGEpCiAgICAgICAgIGVsaWYgbyBpbiAoJy11JywgJy0tdXNlJyk6CkBAIC0yODksMTcgKzM0MSwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlcy5yZW1vdmUocikKICAgICAgICAgICAgICAgICBlbGlmIHIgbm90IGluIHVzZV9yZXNvdXJjZXM6CiAgICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMuYXBwZW5kKHIpCisgICAgICAgIGVsaWYgbyBpbiAoJy1GJywgJy0tZm9yZXZlcicpOgorICAgICAgICAgICAgZm9yZXZlciA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLWonLCAnLS1tdWx0aXByb2Nlc3MnKToKKyAgICAgICAgICAgIHVzZV9tcCA9IGludChhKQorICAgICAgICBlbGlmIG8gPT0gJy0taGVhZGVyJzoKKyAgICAgICAgICAgIGhlYWRlciA9IFRydWUKKyAgICAgICAgZWxpZiBvID09ICctLXNsYXZlYXJncyc6CisgICAgICAgICAgICBhcmdzLCBrd2FyZ3MgPSBqc29uLmxvYWRzKGEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBJTlRFUlJVUFRFRCwgZS5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgICAgIHByaW50ICAgIyBGb3JjZSBhIG5ld2xpbmUgKGp1c3QgaW4gY2FzZSkKKyAgICAgICAgICAgIHByaW50IGpzb24uZHVtcHMocmVzdWx0KQorICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgKCJObyBoYW5kbGVyIGZvciBvcHRpb24gezB9LiAgUGxlYXNlICIKKyAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgKCJObyBoYW5kbGVyIGZvciBvcHRpb24ge30uICBQbGVhc2UgIgogICAgICAgICAgICAgICAgICJyZXBvcnQgdGhpcyBhcyBhIGJ1ZyBhdCBodHRwOi8vYnVncy5weXRob24ub3JnLiIpLmZvcm1hdChvKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBpZiBzaW5nbGUgYW5kIGZyb21maWxlOgogICAgICAgICB1c2FnZSgyLCAiLXMgYW5kIC1mIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgdXNlX21wIGFuZCB0cmFjZToKKyAgICAgICAgdXNhZ2UoMiwgIi1UIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIHVzZV9tcCBhbmQgZmluZGxlYWtzOgorICAgICAgICB1c2FnZSgyLCAiLWwgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCiAKICAgICBnb29kID0gW10KICAgICBiYWQgPSBbXQogICAgIHNraXBwZWQgPSBbXQogICAgIHJlc291cmNlX2RlbmllZHMgPSBbXQorICAgIGVudmlyb25tZW50X2NoYW5nZWQgPSBbXQorICAgIGludGVycnVwdGVkID0gRmFsc2UKIAogICAgIGlmIGZpbmRsZWFrczoKICAgICAgICAgdHJ5OgpAQCAtMzE1LDE5ICszODgsMTggQEAKICAgICAgICAgICAgIGZvdW5kX2dhcmJhZ2UgPSBbXQogCiAgICAgaWYgc2luZ2xlOgotICAgICAgICBmcm9tIHRlbXBmaWxlIGltcG9ydCBnZXR0ZW1wZGlyCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGdldHRlbXBkaXIoKSwgJ3B5bmV4dHRlc3QnKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAncHluZXh0dGVzdCcpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3InKQotICAgICAgICAgICAgbmV4dCA9IGZwLnJlYWQoKS5zdHJpcCgpCi0gICAgICAgICAgICB0ZXN0cyA9IFtuZXh0XQorICAgICAgICAgICAgbmV4dF90ZXN0ID0gZnAucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgIHRlc3RzID0gW25leHRfdGVzdF0KICAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBpZiBmcm9tZmlsZToKICAgICAgICAgdGVzdHMgPSBbXQotICAgICAgICBmcCA9IG9wZW4oZnJvbWZpbGUpCisgICAgICAgIGZwID0gb3Blbihvcy5wYXRoLmpvaW4odGVzdF9zdXBwb3J0LlNBVkVEQ1dELCBmcm9tZmlsZSkpCiAgICAgICAgIGZvciBsaW5lIGluIGZwOgogICAgICAgICAgICAgZ3V0cyA9IGxpbmUuc3BsaXQoKSAjIGFzc3VtaW5nIG5vIHRlc3QgaGFzIHdoaXRlc3BhY2UgaW4gaXRzIG5hbWUKICAgICAgICAgICAgIGlmIGd1dHMgYW5kIG5vdCBndXRzWzBdLnN0YXJ0c3dpdGgoJyMnKToKQEAgLTMzNSw3NiArNDA3LDE5MyBAQAogICAgICAgICBmcC5jbG9zZSgpCiAKICAgICAjIFN0cmlwIC5weSBleHRlbnNpb25zLgotICAgIGlmIGFyZ3M6Ci0gICAgICAgIGFyZ3MgPSBtYXAocmVtb3ZlcHksIGFyZ3MpCi0gICAgaWYgdGVzdHM6Ci0gICAgICAgIHRlc3RzID0gbWFwKHJlbW92ZXB5LCB0ZXN0cykKKyAgICByZW1vdmVweShhcmdzKQorICAgIHJlbW92ZXB5KHRlc3RzKQogCiAgICAgc3RkdGVzdHMgPSBTVERURVNUU1s6XQotICAgIG5vdHRlc3RzID0gTk9UVEVTVFNbOl0KKyAgICBub3R0ZXN0cyA9IE5PVFRFU1RTLmNvcHkoKQogICAgIGlmIGV4Y2x1ZGU6CiAgICAgICAgIGZvciBhcmcgaW4gYXJnczoKICAgICAgICAgICAgIGlmIGFyZyBpbiBzdGR0ZXN0czoKICAgICAgICAgICAgICAgICBzdGR0ZXN0cy5yZW1vdmUoYXJnKQotICAgICAgICBub3R0ZXN0c1s6MF0gPSBhcmdzCisgICAgICAgICAgICBub3R0ZXN0cy5hZGQoYXJnKQogICAgICAgICBhcmdzID0gW10KLSAgICB0ZXN0cyA9IHRlc3RzIG9yIGFyZ3Mgb3IgZmluZHRlc3RzKHRlc3RkaXIsIHN0ZHRlc3RzLCBub3R0ZXN0cykKKworICAgICMgRm9yIGEgcGFydGlhbCBydW4sIHdlIGRvIG5vdCBuZWVkIHRvIGNsdXR0ZXIgdGhlIG91dHB1dC4KKyAgICBpZiB2ZXJib3NlIG9yIGhlYWRlciBvciBub3QgKHF1aWV0IG9yIHNpbmdsZSBvciB0ZXN0cyBvciBhcmdzKToKKyAgICAgICAgIyBQcmludCBiYXNpYyBwbGF0Zm9ybSBpbmZvcm1hdGlvbgorICAgICAgICBwcmludCAiPT0iLCBwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKSwgXAorICAgICAgICAgICAgICAgICAgICAiICIuam9pbihzeXMudmVyc2lvbi5zcGxpdCgpKQorICAgICAgICBwcmludCAiPT0gICIsIHBsYXRmb3JtLnBsYXRmb3JtKGFsaWFzZWQ9VHJ1ZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAiJXMtZW5kaWFuIiAlIHN5cy5ieXRlb3JkZXIKKyAgICAgICAgcHJpbnQgIj09ICAiLCBvcy5nZXRjd2QoKQorICAgICAgICBwcmludCAiVGVzdGluZyB3aXRoIGZsYWdzOiIsIHN5cy5mbGFncworCisgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHModGVzdGRpciwgc3RkdGVzdHMsIG5vdHRlc3RzKQorICAgIHNlbGVjdGVkID0gdGVzdHMgb3IgYXJncyBvciBhbGx0ZXN0cwogICAgIGlmIHNpbmdsZToKLSAgICAgICAgdGVzdHMgPSB0ZXN0c1s6MV0KKyAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZFs6MV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV4dF9zaW5nbGVfdGVzdCA9IGFsbHRlc3RzW2FsbHRlc3RzLmluZGV4KHNlbGVjdGVkWzBdKSsxXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIG5leHRfc2luZ2xlX3Rlc3QgPSBOb25lCiAgICAgaWYgcmFuZG9taXplOgotICAgICAgICByYW5kb20uc2h1ZmZsZSh0ZXN0cykKKyAgICAgICAgcmFuZG9tLnNlZWQocmFuZG9tX3NlZWQpCisgICAgICAgIHByaW50ICJVc2luZyByYW5kb20gc2VlZCIsIHJhbmRvbV9zZWVkCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKHNlbGVjdGVkKQogICAgIGlmIHRyYWNlOgogICAgICAgICBpbXBvcnQgdHJhY2UKICAgICAgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLnByZWZpeCwgc3lzLmV4ZWNfcHJlZml4XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2U9RmFsc2UsIGNvdW50PVRydWUpCisKICAgICB0ZXN0X3RpbWVzID0gW10KLSAgICB0ZXN0X3N1cHBvcnQudmVyYm9zZSA9IHZlcmJvc2UgICAgICAjIFRlbGwgdGVzdHMgdG8gYmUgbW9kZXJhdGVseSBxdWlldAogICAgIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gdXNlX3Jlc291cmNlcwogICAgIHNhdmVfbW9kdWxlcyA9IHN5cy5tb2R1bGVzLmtleXMoKQotICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgICBpZiBub3QgcXVpZXQ6Ci0gICAgICAgICAgICBwcmludCB0ZXN0Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgaWYgdHJhY2U6Ci0gICAgICAgICAgICAjIElmIHdlJ3JlIHRyYWNpbmcgY29kZSBjb3ZlcmFnZSwgdGhlbiB3ZSBkb24ndCBleGl0IHdpdGggc3RhdHVzCi0gICAgICAgICAgICAjIGlmIG9uIGEgZmFsc2UgcmV0dXJuIHZhbHVlIGZyb20gbWFpbi4KLSAgICAgICAgICAgIHRyYWNlci5ydW5jdHgoJ3J1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsJwotICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICB0ZXN0X3RpbWVzLCB0ZXN0ZGlyKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbHM9Z2xvYmFscygpLCBsb2NhbHM9dmFycygpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9rID0gcnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwgdGVzdF90aW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGRpciwgaHVudHJsZWFrcykKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICAjIHByaW50IGEgbmV3bGluZSBzZXBhcmF0ZSBmcm9tIHRoZSBeQwotICAgICAgICAgICAgICAgIHByaW50Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgaWYgb2sgPiAwOgotICAgICAgICAgICAgICAgIGdvb2QuYXBwZW5kKHRlc3QpCi0gICAgICAgICAgICBlbGlmIG9rID09IDA6Ci0gICAgICAgICAgICAgICAgYmFkLmFwcGVuZCh0ZXN0KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBza2lwcGVkLmFwcGVuZCh0ZXN0KQotICAgICAgICAgICAgICAgIGlmIG9rID09IC0yOgotICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV9kZW5pZWRzLmFwcGVuZCh0ZXN0KQotICAgICAgICBpZiBmaW5kbGVha3M6Ci0gICAgICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgICAgIGlmIGdjLmdhcmJhZ2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIldhcm5pbmc6IHRlc3QgY3JlYXRlZCIsIGxlbihnYy5nYXJiYWdlKSwKLSAgICAgICAgICAgICAgICBwcmludCAidW5jb2xsZWN0YWJsZSBvYmplY3QocykuIgotICAgICAgICAgICAgICAgICMgbW92ZSB0aGUgdW5jb2xsZWN0YWJsZSBvYmplY3RzIHNvbWV3aGVyZSBzbyB3ZSBkb24ndCBzZWUKLSAgICAgICAgICAgICAgICAjIHRoZW0gYWdhaW4KLSAgICAgICAgICAgICAgICBmb3VuZF9nYXJiYWdlLmV4dGVuZChnYy5nYXJiYWdlKQotICAgICAgICAgICAgICAgIGRlbCBnYy5nYXJiYWdlWzpdCi0gICAgICAgICMgVW5sb2FkIHRoZSBuZXdseSBpbXBvcnRlZCBtb2R1bGVzIChiZXN0IGVmZm9ydCBmaW5hbGl6YXRpb24pCi0gICAgICAgIGZvciBtb2R1bGUgaW4gc3lzLm1vZHVsZXMua2V5cygpOgotICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiBzYXZlX21vZHVsZXMgYW5kIG1vZHVsZS5zdGFydHN3aXRoKCJ0ZXN0LiIpOgotICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQobW9kdWxlKQogCisgICAgZGVmIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCk6CisgICAgICAgIG9rLCB0ZXN0X3RpbWUgPSByZXN1bHQKKyAgICAgICAgdGVzdF90aW1lcy5hcHBlbmQoKHRlc3RfdGltZSwgdGVzdCkpCisgICAgICAgIGlmIG9rID09IFBBU1NFRDoKKyAgICAgICAgICAgIGdvb2QuYXBwZW5kKHRlc3QpCisgICAgICAgIGVsaWYgb2sgPT0gRkFJTEVEOgorICAgICAgICAgICAgYmFkLmFwcGVuZCh0ZXN0KQorICAgICAgICBlbGlmIG9rID09IEVOVl9DSEFOR0VEOgorICAgICAgICAgICAgYmFkLmFwcGVuZCh0ZXN0KQorICAgICAgICAgICAgZW52aXJvbm1lbnRfY2hhbmdlZC5hcHBlbmQodGVzdCkKKyAgICAgICAgZWxpZiBvayA9PSBTS0lQUEVEOgorICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQodGVzdCkKKyAgICAgICAgZWxpZiBvayA9PSBSRVNPVVJDRV9ERU5JRUQ6CisgICAgICAgICAgICBza2lwcGVkLmFwcGVuZCh0ZXN0KQorICAgICAgICAgICAgcmVzb3VyY2VfZGVuaWVkcy5hcHBlbmQodGVzdCkKKworICAgIGlmIGZvcmV2ZXI6CisgICAgICAgIGRlZiB0ZXN0X2ZvcmV2ZXIodGVzdHM9bGlzdChzZWxlY3RlZCkpOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdGVzdAorICAgICAgICAgICAgICAgICAgICBpZiBiYWQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdGVzdHMgPSB0ZXN0X2ZvcmV2ZXIoKQorICAgIGVsc2U6CisgICAgICAgIHRlc3RzID0gaXRlcihzZWxlY3RlZCkKKworICAgIGlmIHVzZV9tcDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwcmludCAiTXVsdGlwcm9jZXNzIG9wdGlvbiByZXF1aXJlcyB0aHJlYWQgc3VwcG9ydCIKKyAgICAgICAgICAgIHN5cy5leGl0KDIpCisgICAgICAgIGZyb20gUXVldWUgaW1wb3J0IFF1ZXVlCisgICAgICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKKyAgICAgICAgZGVidWdfb3V0cHV0X3BhdCA9IHJlLmNvbXBpbGUociJcW1xkKyByZWZzXF0kIikKKyAgICAgICAgb3V0cHV0ID0gUXVldWUoKQorICAgICAgICBkZWYgdGVzdHNfYW5kX2FyZ3MoKToKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgIGFyZ3NfdHVwbGUgPSAoCisgICAgICAgICAgICAgICAgICAgICh0ZXN0LCB2ZXJib3NlLCBxdWlldCksCisgICAgICAgICAgICAgICAgICAgIGRpY3QoaHVudHJsZWFrcz1odW50cmxlYWtzLCB1c2VfcmVzb3VyY2VzPXVzZV9yZXNvdXJjZXMpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHlpZWxkICh0ZXN0LCBhcmdzX3R1cGxlKQorICAgICAgICBwZW5kaW5nID0gdGVzdHNfYW5kX2FyZ3MoKQorICAgICAgICBvcHRfYXJncyA9IHRlc3Rfc3VwcG9ydC5hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQorICAgICAgICBiYXNlX2NtZCA9IFtzeXMuZXhlY3V0YWJsZV0gKyBvcHRfYXJncyArIFsnLW0nLCAndGVzdC5yZWdydGVzdCddCisgICAgICAgIGRlZiB3b3JrKCk6CisgICAgICAgICAgICAjIEEgd29ya2VyIHRocmVhZC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LCBhcmdzX3R1cGxlID0gbmV4dChwZW5kaW5nKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgICMgLUUgaXMgbmVlZGVkIGJ5IHNvbWUgdGVzdHMsIGUuZy4gdGVzdF9pbXBvcnQKKyAgICAgICAgICAgICAgICAgICAgcG9wZW4gPSBQb3BlbihiYXNlX2NtZCArIFsnLS1zbGF2ZWFyZ3MnLCBqc29uLmR1bXBzKGFyZ3NfdHVwbGUpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPShvcy5uYW1lICE9ICdudCcpKQorICAgICAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgIyBTdHJpcCBsYXN0IHJlZmNvdW50IG91dHB1dCBsaW5lIGlmIGl0IGV4aXN0cywgc2luY2UgaXQKKyAgICAgICAgICAgICAgICAgICAgIyBjb21lcyBmcm9tIHRoZSBzaHV0ZG93biBvZiB0aGUgaW50ZXJwcmV0ZXIgaW4gdGhlIHN1YmNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIHN0ZGVyciA9IGRlYnVnX291dHB1dF9wYXQuc3ViKCIiLCBzdGRlcnIpCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgXywgcmVzdWx0ID0gc3Rkb3V0LnN0cmlwKCkucnBhcnRpdGlvbigiXG4iKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ganNvbi5sb2FkcyhyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCA9IHRlc3QrJ1xuJytzdGRvdXQKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgodGVzdCwgc3Rkb3V0LnJzdHJpcCgpLCBzdGRlcnIucnN0cmlwKCksIHJlc3VsdCkpCisgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICB3b3JrZXJzID0gW1RocmVhZCh0YXJnZXQ9d29yaykgZm9yIGkgaW4gcmFuZ2UodXNlX21wKV0KKyAgICAgICAgZm9yIHdvcmtlciBpbiB3b3JrZXJzOgorICAgICAgICAgICAgd29ya2VyLnN0YXJ0KCkKKyAgICAgICAgZmluaXNoZWQgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIGZpbmlzaGVkIDwgdXNlX21wOgorICAgICAgICAgICAgICAgIHRlc3QsIHN0ZG91dCwgc3RkZXJyLCByZXN1bHQgPSBvdXRwdXQuZ2V0KCkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBzdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50IHN0ZG91dAorICAgICAgICAgICAgICAgIGlmIHN0ZGVycjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCBzdGRlcnIKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRbMF0gPT0gSU5URVJSVVBURUQ6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCByZXN1bHRbMV0gPT0gJ0tleWJvYXJkSW50ZXJydXB0JworICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdCAgICMgV2hhdCBlbHNlPworICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgICAgICBwZW5kaW5nLmNsb3NlKCkKKyAgICAgICAgZm9yIHdvcmtlciBpbiB3b3JrZXJzOgorICAgICAgICAgICAgd29ya2VyLmpvaW4oKQorICAgIGVsc2U6CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgICAgIHByaW50IHRlc3QKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIGlmIHRyYWNlOgorICAgICAgICAgICAgICAgICMgSWYgd2UncmUgdHJhY2luZyBjb2RlIGNvdmVyYWdlLCB0aGVuIHdlIGRvbid0IGV4aXQgd2l0aCBzdGF0dXMKKyAgICAgICAgICAgICAgICAjIGlmIG9uIGEgZmFsc2UgcmV0dXJuIHZhbHVlIGZyb20gbWFpbi4KKyAgICAgICAgICAgICAgICB0cmFjZXIucnVuY3R4KCdydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0KScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzPWdsb2JhbHMoKSwgbG9jYWxzPXZhcnMoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzKQorICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UzIGFuZCByZXN1bHRbMF0gPT0gRkFJTEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlJlLXJ1bm5pbmcgdGVzdCAlciBpbiB2ZXJib3NlIG1vZGUiICUgdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgcnVudGVzdCh0ZXN0LCBUcnVlLCBxdWlldCwgaHVudHJsZWFrcykKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGlmIGZpbmRsZWFrczoKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgICAgICBpZiBnYy5nYXJiYWdlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiV2FybmluZzogdGVzdCBjcmVhdGVkIiwgbGVuKGdjLmdhcmJhZ2UpLAorICAgICAgICAgICAgICAgICAgICBwcmludCAidW5jb2xsZWN0YWJsZSBvYmplY3QocykuIgorICAgICAgICAgICAgICAgICAgICAjIG1vdmUgdGhlIHVuY29sbGVjdGFibGUgb2JqZWN0cyBzb21ld2hlcmUgc28gd2UgZG9uJ3Qgc2VlCisgICAgICAgICAgICAgICAgICAgICMgdGhlbSBhZ2FpbgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9nYXJiYWdlLmV4dGVuZChnYy5nYXJiYWdlKQorICAgICAgICAgICAgICAgICAgICBkZWwgZ2MuZ2FyYmFnZVs6XQorICAgICAgICAgICAgIyBVbmxvYWQgdGhlIG5ld2x5IGltcG9ydGVkIG1vZHVsZXMgKGJlc3QgZWZmb3J0IGZpbmFsaXphdGlvbikKKyAgICAgICAgICAgIGZvciBtb2R1bGUgaW4gc3lzLm1vZHVsZXMua2V5cygpOgorICAgICAgICAgICAgICAgIGlmIG1vZHVsZSBub3QgaW4gc2F2ZV9tb2R1bGVzIGFuZCBtb2R1bGUuc3RhcnRzd2l0aCgidGVzdC4iKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubG9hZChtb2R1bGUpCisKKyAgICBpZiBpbnRlcnJ1cHRlZDoKKyAgICAgICAgIyBwcmludCBhIG5ld2xpbmUgYWZ0ZXIgXkMKKyAgICAgICAgcHJpbnQKKyAgICAgICAgcHJpbnQgIlRlc3Qgc3VpdGUgaW50ZXJydXB0ZWQgYnkgc2lnbmFsIFNJR0lOVC4iCisgICAgICAgIG9taXR0ZWQgPSBzZXQoc2VsZWN0ZWQpIC0gc2V0KGdvb2QpIC0gc2V0KGJhZCkgLSBzZXQoc2tpcHBlZCkKKyAgICAgICAgcHJpbnQgY291bnQobGVuKG9taXR0ZWQpLCAidGVzdCIpLCAib21pdHRlZDoiCisgICAgICAgIHByaW50bGlzdChvbWl0dGVkKQogICAgIGlmIGdvb2QgYW5kIG5vdCBxdWlldDoKLSAgICAgICAgaWYgbm90IGJhZCBhbmQgbm90IHNraXBwZWQgYW5kIGxlbihnb29kKSA+IDE6CisgICAgICAgIGlmIG5vdCBiYWQgYW5kIG5vdCBza2lwcGVkIGFuZCBub3QgaW50ZXJydXB0ZWQgYW5kIGxlbihnb29kKSA+IDE6CiAgICAgICAgICAgICBwcmludCAiQWxsIiwKICAgICAgICAgcHJpbnQgY291bnQobGVuKGdvb2QpLCAidGVzdCIpLCAiT0suIgogICAgIGlmIHByaW50X3Nsb3c6CkBAIC00MTMsOCArNjAyLDE0IEBACiAgICAgICAgIGZvciB0aW1lLCB0ZXN0IGluIHRlc3RfdGltZXNbOjEwXToKICAgICAgICAgICAgIHByaW50ICIlczogJS4xZnMiICUgKHRlc3QsIHRpbWUpCiAgICAgaWYgYmFkOgotICAgICAgICBwcmludCBjb3VudChsZW4oYmFkKSwgInRlc3QiKSwgImZhaWxlZDoiCi0gICAgICAgIHByaW50bGlzdChiYWQpCisgICAgICAgIGJhZCA9IHNldChiYWQpIC0gc2V0KGVudmlyb25tZW50X2NoYW5nZWQpCisgICAgICAgIGlmIGJhZDoKKyAgICAgICAgICAgIHByaW50IGNvdW50KGxlbihiYWQpLCAidGVzdCIpLCAiZmFpbGVkOiIKKyAgICAgICAgICAgIHByaW50bGlzdChiYWQpCisgICAgICAgIGlmIGVudmlyb25tZW50X2NoYW5nZWQ6CisgICAgICAgICAgICBwcmludCAie30gYWx0ZXJlZCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50OiIuZm9ybWF0KAorICAgICAgICAgICAgICAgIGNvdW50KGxlbihlbnZpcm9ubWVudF9jaGFuZ2VkKSwgInRlc3QiKSkKKyAgICAgICAgICAgIHByaW50bGlzdChlbnZpcm9ubWVudF9jaGFuZ2VkKQogICAgIGlmIHNraXBwZWQgYW5kIG5vdCBxdWlldDoKICAgICAgICAgcHJpbnQgY291bnQobGVuKHNraXBwZWQpLCAidGVzdCIpLCAic2tpcHBlZDoiCiAgICAgICAgIHByaW50bGlzdChza2lwcGVkKQpAQCAtNDQwLDggKzYzNSw3IEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudmVyYm9zZSA9IFRydWUKLSAgICAgICAgICAgICAgICBvayA9IHJ1bnRlc3QodGVzdCwgVHJ1ZSwgcXVpZXQsIHRlc3RfdGltZXMsIHRlc3RkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1bnRybGVha3MpCisgICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIHF1aWV0LCBodW50cmxlYWtzKQogICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgICAgICMgcHJpbnQgYSBuZXdsaW5lIHNlcGFyYXRlIGZyb20gdGhlIF5DCiAgICAgICAgICAgICAgICAgcHJpbnQKQEAgLTQ1MCwxNiArNjQ0LDkgQEAKICAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgaWYgc2luZ2xlOgotICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyh0ZXN0ZGlyLCBzdGR0ZXN0cywgbm90dGVzdHMpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihhbGx0ZXN0cykpOgotICAgICAgICAgICAgaWYgdGVzdHNbMF0gPT0gYWxsdGVzdHNbaV06Ci0gICAgICAgICAgICAgICAgaWYgaSA9PSBsZW4oYWxsdGVzdHMpIC0gMToKLSAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3cnKQotICAgICAgICAgICAgICAgICAgICBmcC53cml0ZShhbGx0ZXN0c1tpKzFdICsgJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5leHRfc2luZ2xlX3Rlc3Q6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUobmV4dF9zaW5nbGVfdGVzdCArICdcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCiAKQEAgLTQ3MCw3ICs2NTcsNyBAQAogICAgIGlmIHJ1bmxlYWtzOgogICAgICAgICBvcy5zeXN0ZW0oImxlYWtzICVkIiAlIG9zLmdldHBpZCgpKQogCi0gICAgc3lzLmV4aXQobGVuKGJhZCkgPiAwKQorICAgIHN5cy5leGl0KGxlbihiYWQpID4gMCBvciBpbnRlcnJ1cHRlZCkKIAogCiBTVERURVNUUyA9IFsKQEAgLTQ4Myw2OCArNjcwLDE5MSBAQAogICAgICd0ZXN0X3VuaXR0ZXN0JywKICAgICAndGVzdF9kb2N0ZXN0JywKICAgICAndGVzdF9kb2N0ZXN0MicsCi0gICAgIyBPbiAyLjYsIHdoZW4gYSBDIG1vZHVsZSBsaWtlIGRsIG9yIGxpbnV4YXVkaW9kZXYgaXMgaW1wb3J0ZWQgYnkgc29tZQotICAgICMgdGVzdCwgYSBEZXByZWNhdGlvbldhcm5pbmcgaXMgcmFpc2VkLCBidXQgdGVzdF9weTNrd2FybiBjYW4gbm90IGZpbmQKLSAgICAjIGl0IGluIHRoZSBfX3dhcm5pbmdyZWdpc3RyeV9fIG9mIHRoZSBtb2R1bGVzIGluIHN5cy5tb2R1bGVzLgotICAgICMgQyBtb2R1bGVzIHJhaXNlIHRoZSB3YXJuaW5nIG9ubHkgb25jZSwgYW5kIHNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHRvCi0gICAgIyBmaW5kIHRoZXNlIHdhcm5pbmdzLCB0ZXN0X3B5M2t3YXJuIGlzIGV4ZWN1dGVkIGZpcnN0IHRvIGNhdGNoIHRoZW0KLSAgICAjIGJlZm9yZSB0aGUgb3RoZXIgbW9kdWxlcy4gIFRoaXMgc2hvdWxkbid0IGFmZmVjdCAyLjcrCi0gICAgJ3Rlc3RfcHkza3dhcm4nLAotICAgXQorXQogCi1OT1RURVNUUyA9IFsKK05PVFRFU1RTID0gewogICAgICd0ZXN0X3N1cHBvcnQnLAogICAgICd0ZXN0X2Z1dHVyZTEnLAogICAgICd0ZXN0X2Z1dHVyZTInLAotICAgIF0KK30KIAogZGVmIGZpbmR0ZXN0cyh0ZXN0ZGlyPU5vbmUsIHN0ZHRlc3RzPVNURFRFU1RTLCBub3R0ZXN0cz1OT1RURVNUUyk6CiAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBhbGwgYXBwbGljYWJsZSB0ZXN0IG1vZHVsZXMuIiIiCi0gICAgaWYgbm90IHRlc3RkaXI6IHRlc3RkaXIgPSBmaW5kdGVzdGRpcigpCisgICAgdGVzdGRpciA9IGZpbmR0ZXN0ZGlyKHRlc3RkaXIpCiAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHRlc3RkaXIpCiAgICAgdGVzdHMgPSBbXQorICAgIG90aGVycyA9IHNldChzdGR0ZXN0cykgfCBub3R0ZXN0cwogICAgIGZvciBuYW1lIGluIG5hbWVzOgotICAgICAgICBpZiBuYW1lWzo1XSA9PSAidGVzdF8iIGFuZCBuYW1lWy0zOl0gPT0gb3MuZXh0c2VwKyJweSI6Ci0gICAgICAgICAgICBtb2RuYW1lID0gbmFtZVs6LTNdCi0gICAgICAgICAgICBpZiBtb2RuYW1lIG5vdCBpbiBzdGR0ZXN0cyBhbmQgbW9kbmFtZSBub3QgaW4gbm90dGVzdHM6Ci0gICAgICAgICAgICAgICAgdGVzdHMuYXBwZW5kKG1vZG5hbWUpCi0gICAgdGVzdHMuc29ydCgpCi0gICAgcmV0dXJuIHN0ZHRlc3RzICsgdGVzdHMKKyAgICAgICAgbW9kbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQorICAgICAgICBpZiBtb2RuYW1lWzo1XSA9PSAidGVzdF8iIGFuZCBleHQgPT0gIi5weSIgYW5kIG1vZG5hbWUgbm90IGluIG90aGVyczoKKyAgICAgICAgICAgIHRlc3RzLmFwcGVuZChtb2RuYW1lKQorICAgIHJldHVybiBzdGR0ZXN0cyArIHNvcnRlZCh0ZXN0cykKIAotZGVmIHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsIHRlc3RfdGltZXMsCi0gICAgICAgICAgICB0ZXN0ZGlyPU5vbmUsIGh1bnRybGVha3M9RmFsc2UpOgorZGVmIHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsCisgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUpOgogICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0LgogCiAgICAgdGVzdCAtLSB0aGUgbmFtZSBvZiB0aGUgdGVzdAogICAgIHZlcmJvc2UgLS0gaWYgdHJ1ZSwgcHJpbnQgbW9yZSBtZXNzYWdlcwogICAgIHF1aWV0IC0tIGlmIHRydWUsIGRvbid0IHByaW50ICdza2lwcGVkJyBtZXNzYWdlcyAocHJvYmFibHkgcmVkdW5kYW50KQogICAgIHRlc3RfdGltZXMgLS0gYSBsaXN0IG9mICh0aW1lLCB0ZXN0X25hbWUpIHBhaXJzCi0gICAgdGVzdGRpciAtLSB0ZXN0IGRpcmVjdG9yeQogICAgIGh1bnRybGVha3MgLS0gcnVuIG11bHRpcGxlIHRpbWVzIHRvIHRlc3QgZm9yIGxlYWtzOyByZXF1aXJlcyBhIGRlYnVnCiAgICAgICAgICAgICAgICAgICBidWlsZDsgYSB0cmlwbGUgY29ycmVzcG9uZGluZyB0byAtUidzIHRocmVlIGFyZ3VtZW50cwotICAgIFJldHVybjoKLSAgICAgICAgLTIgIHRlc3Qgc2tpcHBlZCBiZWNhdXNlIHJlc291cmNlIGRlbmllZAotICAgICAgICAtMSAgdGVzdCBza2lwcGVkIGZvciBzb21lIG90aGVyIHJlYXNvbgotICAgICAgICAgMCAgdGVzdCBmYWlsZWQKLSAgICAgICAgIDEgIHRlc3QgcGFzc2VkCisgICAgUmV0dXJucyBvbmUgb2YgdGhlIHRlc3QgcmVzdWx0IGNvbnN0YW50czoKKyAgICAgICAgSU5URVJSVVBURUQgICAgICBLZXlib2FyZEludGVycnVwdCB3aGVuIHJ1biB1bmRlciAtagorICAgICAgICBSRVNPVVJDRV9ERU5JRUQgIHRlc3Qgc2tpcHBlZCBiZWNhdXNlIHJlc291cmNlIGRlbmllZAorICAgICAgICBTS0lQUEVEICAgICAgICAgIHRlc3Qgc2tpcHBlZCBmb3Igc29tZSBvdGhlciByZWFzb24KKyAgICAgICAgRU5WX0NIQU5HRUQgICAgICB0ZXN0IGZhaWxlZCBiZWNhdXNlIGl0IGNoYW5nZWQgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudAorICAgICAgICBGQUlMRUQgICAgICAgICAgIHRlc3QgZmFpbGVkCisgICAgICAgIFBBU1NFRCAgICAgICAgICAgdGVzdCBwYXNzZWQKICAgICAiIiIKIAorICAgIHRlc3Rfc3VwcG9ydC52ZXJib3NlID0gdmVyYm9zZSAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKKyAgICBpZiB1c2VfcmVzb3VyY2VzIGlzIG5vdCBOb25lOgorICAgICAgICB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyA9IHVzZV9yZXNvdXJjZXMKICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LCB0ZXN0X3RpbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0ZGlyLCBodW50cmxlYWtzKQorICAgICAgICByZXR1cm4gcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcykKICAgICBmaW5hbGx5OgogICAgICAgICBjbGVhbnVwX3Rlc3RfZHJvcHBpbmdzKHRlc3QsIHZlcmJvc2UpCiAKLWRlZiBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LCB0ZXN0X3RpbWVzLAotICAgICAgICAgICAgICAgICAgdGVzdGRpcj1Ob25lLCBodW50cmxlYWtzPUZhbHNlKToKKworIyBVbml0IHRlc3RzIGFyZSBzdXBwb3NlZCB0byBsZWF2ZSB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50IHVuY2hhbmdlZAorIyBvbmNlIHRoZXkgY29tcGxldGUuICBCdXQgc29tZXRpbWVzIHRlc3RzIGhhdmUgYnVncywgZXNwZWNpYWxseSB3aGVuCisjIHRlc3RzIGZhaWwsIGFuZCB0aGUgY2hhbmdlcyB0byBlbnZpcm9ubWVudCBnbyBvbiB0byBtZXNzIHVwIG90aGVyCisjIHRlc3RzLiAgVGhpcyBjYW4gY2F1c2UgaXNzdWVzIHdpdGggYnVpbGRib3Qgc3RhYmlsaXR5LCBzaW5jZSB0ZXN0cworIyBhcmUgcnVuIGluIHJhbmRvbSBvcmRlciBhbmQgc28gcHJvYmxlbXMgbWF5IGFwcGVhciB0byBjb21lIGFuZCBnby4KKyMgVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB3ZSBjYW4gc2F2ZSBhbmQgcmVzdG9yZSB0byBtaXRpZ2F0ZSB0aGlzLCBhbmQKKyMgdGhlIGZvbGxvd2luZyBjb250ZXh0IG1hbmFnZXIgaGFuZGxlcyB0aGlzIHRhc2suCisKK2NsYXNzIHNhdmVkX3Rlc3RfZW52aXJvbm1lbnQ6CisgICAgIiIiU2F2ZSBiaXRzIG9mIHRoZSB0ZXN0IGVudmlyb25tZW50IGFuZCByZXN0b3JlIHRoZW0gYXQgYmxvY2sgZXhpdC4KKworICAgICAgICB3aXRoIHNhdmVkX3Rlc3RfZW52aXJvbm1lbnQodGVzdG5hbWUsIHZlcmJvc2UsIHF1aWV0KToKKyAgICAgICAgICAgICNzdHVmZgorCisgICAgVW5sZXNzIHF1aWV0IGlzIFRydWUsIGEgd2FybmluZyBpcyBwcmludGVkIHRvIHN0ZGVyciBpZiBhbnkgb2YKKyAgICB0aGUgc2F2ZWQgaXRlbXMgd2FzIGNoYW5nZWQgYnkgdGhlIHRlc3QuICBUaGUgYXR0cmlidXRlICdjaGFuZ2VkJworICAgIGlzIGluaXRpYWxseSBGYWxzZSwgYnV0IGlzIHNldCB0byBUcnVlIGlmIGEgY2hhbmdlIGlzIGRldGVjdGVkLgorCisgICAgSWYgdmVyYm9zZSBpcyBtb3JlIHRoYW4gMSwgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgc3RhdGUgb2YgY2hhbmdlZAorICAgIGl0ZW1zIGlzIGFsc28gcHJpbnRlZC4KKyAgICAiIiIKKworICAgIGNoYW5nZWQgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RuYW1lLCB2ZXJib3NlPTAsIHF1aWV0PUZhbHNlKToKKyAgICAgICAgc2VsZi50ZXN0bmFtZSA9IHRlc3RuYW1lCisgICAgICAgIHNlbGYudmVyYm9zZSA9IHZlcmJvc2UKKyAgICAgICAgc2VsZi5xdWlldCA9IHF1aWV0CisKKyAgICAjIFRvIGFkZCB0aGluZ3MgdG8gc2F2ZSBhbmQgcmVzdG9yZSwgYWRkIGEgbmFtZSBYWFggdG8gdGhlIHJlc291cmNlcyBsaXN0CisgICAgIyBhbmQgYWRkIGNvcnJlc3BvbmRpbmcgZ2V0X1hYWC9yZXN0b3JlX1hYWCBmdW5jdGlvbnMuICBnZXRfWFhYIHNob3VsZAorICAgICMgcmV0dXJuIHRoZSB2YWx1ZSB0byBiZSBzYXZlZCBhbmQgY29tcGFyZWQgYWdhaW5zdCBhIHNlY29uZCBjYWxsIHRvIHRoZQorICAgICMgZ2V0IGZ1bmN0aW9uIHdoZW4gdGVzdCBleGVjdXRpb24gY29tcGxldGVzLiAgcmVzdG9yZV9YWFggc2hvdWxkIGFjY2VwdAorICAgICMgdGhlIHNhdmVkIHZhbHVlIGFuZCByZXN0b3JlIHRoZSByZXNvdXJjZSB1c2luZyBpdC4gIEl0IHdpbGwgYmUgY2FsbGVkIGlmCisgICAgIyBhbmQgb25seSBpZiBhIGNoYW5nZSBpbiB0aGUgdmFsdWUgaXMgZGV0ZWN0ZWQuCisgICAgIworICAgICMgTm90ZTogWFhYIHdpbGwgaGF2ZSBhbnkgJy4nIHJlcGxhY2VkIHdpdGggJ18nIGNoYXJhY3RlcnMgd2hlbiBkZXRlcm1pbmluZworICAgICMgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kIG5hbWVzLgorCisgICAgcmVzb3VyY2VzID0gKCdzeXMuYXJndicsICdjd2QnLCAnc3lzLnN0ZGluJywgJ3N5cy5zdGRvdXQnLCAnc3lzLnN0ZGVycicsCisgICAgICAgICAgICAgICAgICdvcy5lbnZpcm9uJywgJ3N5cy5wYXRoJywgJ2FzeW5jb3JlLnNvY2tldF9tYXAnKQorCisgICAgZGVmIGdldF9zeXNfYXJndihzZWxmKToKKyAgICAgICAgcmV0dXJuIGlkKHN5cy5hcmd2KSwgc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCisgICAgZGVmIHJlc3RvcmVfc3lzX2FyZ3Yoc2VsZiwgc2F2ZWRfYXJndik6CisgICAgICAgIHN5cy5hcmd2ID0gc2F2ZWRfYXJndlsxXQorICAgICAgICBzeXMuYXJndls6XSA9IHNhdmVkX2FyZ3ZbMl0KKworICAgIGRlZiBnZXRfY3dkKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MuZ2V0Y3dkKCkKKyAgICBkZWYgcmVzdG9yZV9jd2Qoc2VsZiwgc2F2ZWRfY3dkKToKKyAgICAgICAgb3MuY2hkaXIoc2F2ZWRfY3dkKQorCisgICAgZGVmIGdldF9zeXNfc3Rkb3V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc3lzLnN0ZG91dAorICAgIGRlZiByZXN0b3JlX3N5c19zdGRvdXQoc2VsZiwgc2F2ZWRfc3Rkb3V0KToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVkX3N0ZG91dAorCisgICAgZGVmIGdldF9zeXNfc3RkZXJyKHNlbGYpOgorICAgICAgICByZXR1cm4gc3lzLnN0ZGVycgorICAgIGRlZiByZXN0b3JlX3N5c19zdGRlcnIoc2VsZiwgc2F2ZWRfc3RkZXJyKToKKyAgICAgICAgc3lzLnN0ZGVyciA9IHNhdmVkX3N0ZGVycgorCisgICAgZGVmIGdldF9zeXNfc3RkaW4oc2VsZik6CisgICAgICAgIHJldHVybiBzeXMuc3RkaW4KKyAgICBkZWYgcmVzdG9yZV9zeXNfc3RkaW4oc2VsZiwgc2F2ZWRfc3RkaW4pOgorICAgICAgICBzeXMuc3RkaW4gPSBzYXZlZF9zdGRpbgorCisgICAgZGVmIGdldF9vc19lbnZpcm9uKHNlbGYpOgorICAgICAgICByZXR1cm4gaWQob3MuZW52aXJvbiksIG9zLmVudmlyb24sIGRpY3Qob3MuZW52aXJvbikKKyAgICBkZWYgcmVzdG9yZV9vc19lbnZpcm9uKHNlbGYsIHNhdmVkX2Vudmlyb24pOgorICAgICAgICBvcy5lbnZpcm9uID0gc2F2ZWRfZW52aXJvblsxXQorICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICAgICAgb3MuZW52aXJvbi51cGRhdGUoc2F2ZWRfZW52aXJvblsyXSkKKworICAgIGRlZiBnZXRfc3lzX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBpZChzeXMucGF0aCksIHN5cy5wYXRoLCBzeXMucGF0aFs6XQorICAgIGRlZiByZXN0b3JlX3N5c19wYXRoKHNlbGYsIHNhdmVkX3BhdGgpOgorICAgICAgICBzeXMucGF0aCA9IHNhdmVkX3BhdGhbMV0KKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzYXZlZF9wYXRoWzJdCisKKyAgICBkZWYgZ2V0X2FzeW5jb3JlX3NvY2tldF9tYXAoc2VsZik6CisgICAgICAgIGFzeW5jb3JlID0gc3lzLm1vZHVsZXMuZ2V0KCdhc3luY29yZScpCisgICAgICAgICMgWFhYIE1ha2luZyBhIGNvcHkga2VlcHMgb2JqZWN0cyBhbGl2ZSB1bnRpbCBfX2V4aXRfXyBnZXRzIGNhbGxlZC4KKyAgICAgICAgcmV0dXJuIGFzeW5jb3JlIGFuZCBhc3luY29yZS5zb2NrZXRfbWFwLmNvcHkoKSBvciB7fQorICAgIGRlZiByZXN0b3JlX2FzeW5jb3JlX3NvY2tldF9tYXAoc2VsZiwgc2F2ZWRfbWFwKToKKyAgICAgICAgYXN5bmNvcmUgPSBzeXMubW9kdWxlcy5nZXQoJ2FzeW5jb3JlJykKKyAgICAgICAgaWYgYXN5bmNvcmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoaWdub3JlX2FsbD1UcnVlKQorICAgICAgICAgICAgYXN5bmNvcmUuc29ja2V0X21hcC51cGRhdGUoc2F2ZWRfbWFwKQorCisgICAgZGVmIHJlc291cmNlX2luZm8oc2VsZik6CisgICAgICAgIGZvciBuYW1lIGluIHNlbGYucmVzb3VyY2VzOgorICAgICAgICAgICAgbWV0aG9kX3N1ZmZpeCA9IG5hbWUucmVwbGFjZSgnLicsICdfJykKKyAgICAgICAgICAgIGdldF9uYW1lID0gJ2dldF8nICsgbWV0aG9kX3N1ZmZpeAorICAgICAgICAgICAgcmVzdG9yZV9uYW1lID0gJ3Jlc3RvcmVfJyArIG1ldGhvZF9zdWZmaXgKKyAgICAgICAgICAgIHlpZWxkIG5hbWUsIGdldGF0dHIoc2VsZiwgZ2V0X25hbWUpLCBnZXRhdHRyKHNlbGYsIHJlc3RvcmVfbmFtZSkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuc2F2ZWRfdmFsdWVzID0gZGljdCgobmFtZSwgZ2V0KCkpIGZvciBuYW1lLCBnZXQsIHJlc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYucmVzb3VyY2VfaW5mbygpKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgorICAgICAgICBzYXZlZF92YWx1ZXMgPSBzZWxmLnNhdmVkX3ZhbHVlcworICAgICAgICBkZWwgc2VsZi5zYXZlZF92YWx1ZXMKKyAgICAgICAgZm9yIG5hbWUsIGdldCwgcmVzdG9yZSBpbiBzZWxmLnJlc291cmNlX2luZm8oKToKKyAgICAgICAgICAgIGN1cnJlbnQgPSBnZXQoKQorICAgICAgICAgICAgb3JpZ2luYWwgPSBzYXZlZF92YWx1ZXMucG9wKG5hbWUpCisgICAgICAgICAgICAjIENoZWNrIGZvciBjaGFuZ2VzIHRvIHRoZSByZXNvdXJjZSdzIHZhbHVlCisgICAgICAgICAgICBpZiBjdXJyZW50ICE9IG9yaWdpbmFsOgorICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICByZXN0b3JlKG9yaWdpbmFsKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnF1aWV0OgorICAgICAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIldhcm5pbmcgLS0ge30gd2FzIG1vZGlmaWVkIGJ5IHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgc2VsZi50ZXN0bmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZSA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIEJlZm9yZToge31cbiAgQWZ0ZXI6ICB7fSAiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwsIGN1cnJlbnQpKQorICAgICAgICAgICAgIyBYWFggKG5jb2dobGFuKTogZm9yIG1vc3QgcmVzb3VyY2VzIChlLmcuIHN5cy5wYXRoKSBpZGVudGl0eQorICAgICAgICAgICAgIyBtYXR0ZXJzIGF0IGxlYXN0IGFzIG11Y2ggYXMgdmFsdWUuIEZvciBvdGhlcnMgKGUuZy4gY3dkKSwKKyAgICAgICAgICAgICMgaWRlbnRpdHkgaXMgaXJyZWxldmFudC4gU2hvdWxkIHdlIGFkZCBhIG1lY2hhbmlzbSB0byBjaGVjaworICAgICAgICAgICAgIyBmb3Igc3Vic3RpdHV0aW9uIGluIHRoZSBjYXNlcyB3aGVyZSBpdCBtYXR0ZXJzPworICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcz1GYWxzZSk6CiAgICAgdGVzdF9zdXBwb3J0LnVubG9hZCh0ZXN0KQotICAgIGlmIG5vdCB0ZXN0ZGlyOgotICAgICAgICB0ZXN0ZGlyID0gZmluZHRlc3RkaXIoKQogICAgIGlmIHZlcmJvc2U6CiAgICAgICAgIGNhcHR1cmVfc3Rkb3V0ID0gTm9uZQogICAgIGVsc2U6Ci0gICAgICAgIGNhcHR1cmVfc3Rkb3V0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgY2FwdHVyZV9zdGRvdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAKKyAgICB0ZXN0X3RpbWUgPSAwLjAKKyAgICByZWZsZWFrID0gRmFsc2UgICMgVHJ1ZSBpZiB0aGUgdGVzdCBsZWFrZWQgcmVmZXJlbmNlcy4KICAgICB0cnk6CiAgICAgICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICB0cnk6CkBAIC01NTUsNjEgKzg2NSw3MSBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIEFsd2F5cyBpbXBvcnQgaXQgZnJvbSB0aGUgdGVzdCBwYWNrYWdlCiAgICAgICAgICAgICAgICAgYWJzdGVzdCA9ICd0ZXN0LicgKyB0ZXN0Ci0gICAgICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIHRoZV9wYWNrYWdlID0gX19pbXBvcnRfXyhhYnN0ZXN0LCBnbG9iYWxzKCksIGxvY2FscygpLCBbXSkKLSAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBnZXRhdHRyKHRoZV9wYWNrYWdlLCB0ZXN0KQotICAgICAgICAgICAgIyBPbGQgdGVzdHMgcnVuIHRvIGNvbXBsZXRpb24gc2ltcGx5IGFzIGEgc2lkZS1lZmZlY3Qgb2YKLSAgICAgICAgICAgICMgYmVpbmcgaW1wb3J0ZWQuICBGb3IgdGVzdHMgYmFzZWQgb24gdW5pdHRlc3Qgb3IgZG9jdGVzdCwKLSAgICAgICAgICAgICMgZXhwbGljaXRseSBpbnZva2UgdGhlaXIgdGVzdF9tYWluKCkgZnVuY3Rpb24gKGlmIGl0IGV4aXN0cykuCi0gICAgICAgICAgICBpbmRpcmVjdF90ZXN0ID0gZ2V0YXR0cih0aGVfbW9kdWxlLCAidGVzdF9tYWluIiwgTm9uZSkKLSAgICAgICAgICAgIGlmIGluZGlyZWN0X3Rlc3QgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCgpCi0gICAgICAgICAgICBpZiBodW50cmxlYWtzOgotICAgICAgICAgICAgICAgIGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCBpbmRpcmVjdF90ZXN0LCBodW50cmxlYWtzKQotICAgICAgICAgICAgdGVzdF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCi0gICAgICAgICAgICB0ZXN0X3RpbWVzLmFwcGVuZCgodGVzdF90aW1lLCB0ZXN0KSkKKyAgICAgICAgICAgIHdpdGggc2F2ZWRfdGVzdF9lbnZpcm9ubWVudCh0ZXN0LCB2ZXJib3NlLCBxdWlldCkgYXMgZW52aXJvbm1lbnQ6CisgICAgICAgICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgdGhlX3BhY2thZ2UgPSBfX2ltcG9ydF9fKGFic3Rlc3QsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFtdKQorICAgICAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBnZXRhdHRyKHRoZV9wYWNrYWdlLCB0ZXN0KQorICAgICAgICAgICAgICAgICMgT2xkIHRlc3RzIHJ1biB0byBjb21wbGV0aW9uIHNpbXBseSBhcyBhIHNpZGUtZWZmZWN0IG9mCisgICAgICAgICAgICAgICAgIyBiZWluZyBpbXBvcnRlZC4gIEZvciB0ZXN0cyBiYXNlZCBvbiB1bml0dGVzdCBvciBkb2N0ZXN0LAorICAgICAgICAgICAgICAgICMgZXhwbGljaXRseSBpbnZva2UgdGhlaXIgdGVzdF9tYWluKCkgZnVuY3Rpb24gKGlmIGl0IGV4aXN0cykuCisgICAgICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCA9IGdldGF0dHIodGhlX21vZHVsZSwgInRlc3RfbWFpbiIsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgaW5kaXJlY3RfdGVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCgpCisgICAgICAgICAgICAgICAgaWYgaHVudHJsZWFrczoKKyAgICAgICAgICAgICAgICAgICAgcmVmbGVhayA9IGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCBpbmRpcmVjdF90ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcykKKyAgICAgICAgICAgICAgICB0ZXN0X3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAogICAgIGV4Y2VwdCB0ZXN0X3N1cHBvcnQuUmVzb3VyY2VEZW5pZWQsIG1zZzoKICAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICAgcHJpbnQgdGVzdCwgInNraXBwZWQgLS0iLCBtc2cKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByZXR1cm4gLTIKLSAgICBleGNlcHQgKEltcG9ydEVycm9yLCB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQpLCBtc2c6CisgICAgICAgIHJldHVybiBSRVNPVVJDRV9ERU5JRUQsIHRlc3RfdGltZQorICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdCwgbXNnOgogICAgICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgICAgICBwcmludCB0ZXN0LCAic2tpcHBlZCAtLSIsIG1zZwogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJldHVybiAtMQorICAgICAgICByZXR1cm4gU0tJUFBFRCwgdGVzdF90aW1lCiAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICByYWlzZQogICAgIGV4Y2VwdCB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCwgbXNnOgotICAgICAgICBwcmludCAidGVzdCIsIHRlc3QsICJmYWlsZWQgLS0iLCBtc2cKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJldHVybiAwCisgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgInRlc3QiLCB0ZXN0LCAiZmFpbGVkIC0tIiwgbXNnCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICByZXR1cm4gRkFJTEVELCB0ZXN0X3RpbWUKICAgICBleGNlcHQ6CiAgICAgICAgIHR5cGUsIHZhbHVlID0gc3lzLmV4Y19pbmZvKClbOjJdCi0gICAgICAgIHByaW50ICJ0ZXN0IiwgdGVzdCwgImNyYXNoZWQgLS0iLCBzdHIodHlwZSkgKyAiOiIsIHZhbHVlCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJ0ZXN0IiwgdGVzdCwgImNyYXNoZWQgLS0iLCBzdHIodHlwZSkgKyAiOiIsIHZhbHVlCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQogICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRvdXQpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgIHJldHVybiBGQUlMRUQsIHRlc3RfdGltZQogICAgIGVsc2U6CisgICAgICAgIGlmIHJlZmxlYWs6CisgICAgICAgICAgICByZXR1cm4gRkFJTEVELCB0ZXN0X3RpbWUKKyAgICAgICAgaWYgZW52aXJvbm1lbnQuY2hhbmdlZDoKKyAgICAgICAgICAgIHJldHVybiBFTlZfQ0hBTkdFRCwgdGVzdF90aW1lCiAgICAgICAgICMgRXhjZXB0IGluIHZlcmJvc2UgbW9kZSwgdGVzdHMgc2hvdWxkIG5vdCBwcmludCBhbnl0aGluZwogICAgICAgICBpZiB2ZXJib3NlIG9yIGh1bnRybGVha3M6Ci0gICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgcmV0dXJuIFBBU1NFRCwgdGVzdF90aW1lCiAgICAgICAgIG91dHB1dCA9IGNhcHR1cmVfc3Rkb3V0LmdldHZhbHVlKCkKICAgICAgICAgaWYgbm90IG91dHB1dDoKLSAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICByZXR1cm4gUEFTU0VELCB0ZXN0X3RpbWUKICAgICAgICAgcHJpbnQgInRlc3QiLCB0ZXN0LCAicHJvZHVjZWQgdW5leHBlY3RlZCBvdXRwdXQ6IgogICAgICAgICBwcmludCAiKiIgKiA3MAogICAgICAgICBwcmludCBvdXRwdXQKICAgICAgICAgcHJpbnQgIioiICogNzAKICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJldHVybiAwCisgICAgICAgIHJldHVybiBGQUlMRUQsIHRlc3RfdGltZQogCiBkZWYgY2xlYW51cF90ZXN0X2Ryb3BwaW5ncyh0ZXN0bmFtZSwgdmVyYm9zZSk6CiAgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBzdGF0CisgICAgaW1wb3J0IGdjCisKKyAgICAjIEZpcnN0IGtpbGwgYW55IGRhbmdsaW5nIHJlZmVyZW5jZXMgdG8gb3BlbiBmaWxlcyBldGMuCisgICAgZ2MuY29sbGVjdCgpCiAKICAgICAjIFRyeSB0byBjbGVhbiB1cCBqdW5rIGNvbW1vbmx5IGxlZnQgYmVoaW5kLiAgV2hpbGUgdGVzdHMgc2hvdWxkbid0IGxlYXZlCiAgICAgIyBhbnkgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYmVoaW5kLCB3aGVuIGEgdGVzdCBmYWlscyB0aGF0IGNhbiBiZSB0ZWRpb3VzCkBAIC02MzQsMTQgKzk1NCwyMyBAQAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgIiVyIGxlZnQgYmVoaW5kICVzICVyIiAlICh0ZXN0bmFtZSwga2luZCwgbmFtZSkKICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIGNobW9kLCBmaXggcG9zc2libGUgcGVybWlzc2lvbnMgcHJvYmxlbXMKKyAgICAgICAgICAgICMgdGhhdCBtaWdodCBwcmV2ZW50IGNsZWFudXAKKyAgICAgICAgICAgIGlmIChoYXNhdHRyKG9zLCAnY2htb2QnKSk6CisgICAgICAgICAgICAgICAgb3MuY2htb2QobmFtZSwgc3RhdC5TX0lSV1hVIHwgc3RhdC5TX0lSV1hHIHwgc3RhdC5TX0lSV1hPKQogICAgICAgICAgICAgbnVrZXIobmFtZSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgbXNnOgogICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgKCIlciBsZWZ0IGJlaGluZCAlcyAlciBhbmQgaXQgY291bGRuJ3QgYmUgIgogICAgICAgICAgICAgICAgICJyZW1vdmVkOiAlcyIgJSAodGVzdG5hbWUsIGtpbmQsIG5hbWUsIG1zZykpCiAKIGRlZiBkYXNoX1IodGhlX21vZHVsZSwgdGVzdCwgaW5kaXJlY3RfdGVzdCwgaHVudHJsZWFrcyk6CisgICAgIiIiUnVuIGEgdGVzdCBtdWx0aXBsZSB0aW1lcywgbG9va2luZyBmb3IgcmVmZXJlbmNlIGxlYWtzLgorCisgICAgUmV0dXJuczoKKyAgICAgICAgRmFsc2UgaWYgdGhlIHRlc3QgZGlkbid0IGxlYWsgcmVmZXJlbmNlczsgVHJ1ZSBpZiB3ZSBkZXRlY3RlZCByZWZsZWFrcy4KKyAgICAiIiIKICAgICAjIFRoaXMgY29kZSBpcyBoYWNraXNoIGFuZCBpbmVsZWdhbnQsIGJ1dCBpdCBzZWVtcyB0byBkbyB0aGUgam9iLgotICAgIGltcG9ydCBjb3B5X3JlZywgX2FiY29sbCwgaW8KKyAgICBpbXBvcnQgY29weV9yZWcsIF9hYmNvbGwsIF9weWlvCiAKICAgICBpZiBub3QgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6CiAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVHJhY2tpbmcgcmVmZXJlbmNlIGxlYWtzIHJlcXVpcmVzIGEgZGVidWcgYnVpbGQgIgpAQCAtNjUxLDggKzk4MCwxNCBAQAogICAgIGZzID0gd2FybmluZ3MuZmlsdGVyc1s6XQogICAgIHBzID0gY29weV9yZWcuZGlzcGF0Y2hfdGFibGUuY29weSgpCiAgICAgcGljID0gc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY29weSgpCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgemlwaW1wb3J0CisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICB6ZGMgPSBOb25lICMgUnVuIHVubW9kaWZpZWQgb24gcGxhdGZvcm1zIHdpdGhvdXQgemlwaW1wb3J0IHN1cHBvcnQKKyAgICBlbHNlOgorICAgICAgICB6ZGMgPSB6aXBpbXBvcnQuX3ppcF9kaXJlY3RvcnlfY2FjaGUuY29weSgpCiAgICAgYWJjcyA9IHt9Ci0gICAgbW9kdWxlcyA9IF9hYmNvbGwsIGlvCisgICAgbW9kdWxlcyA9IF9hYmNvbGwsIF9weWlvCiAgICAgZm9yIGFiYyBpbiBbZ2V0YXR0cihtb2QsIGEpIGZvciBtb2QgaW4gbW9kdWxlcyBmb3IgYSBpbiBtb2QuX19hbGxfX106CiAgICAgICAgICMgWFhYIGlzaW5zdGFuY2UoYWJjLCBBQkNNZXRhKSBsZWFkcyB0byBpbmZpbml0ZSByZWN1cnNpb24KICAgICAgICAgaWYgbm90IGhhc2F0dHIoYWJjLCAnX2FiY19yZWdpc3RyeScpOgpAQCAtNjY5LDI2ICsxMDA0LDMwIEBACiAKICAgICBkZWx0YXMgPSBbXQogICAgIG53YXJtdXAsIG50cmFja2VkLCBmbmFtZSA9IGh1bnRybGVha3MKKyAgICBmbmFtZSA9IG9zLnBhdGguam9pbih0ZXN0X3N1cHBvcnQuU0FWRURDV0QsIGZuYW1lKQogICAgIHJlcGNvdW50ID0gbndhcm11cCArIG50cmFja2VkCiAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgImJlZ2lubmluZyIsIHJlcGNvdW50LCAicmVwZXRpdGlvbnMiCiAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgKCIxMjM0NTY3ODkwIioocmVwY291bnQvLzEwICsgMSkpWzpyZXBjb3VudF0KLSAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgYWJjcykKKyAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKQogICAgIGZvciBpIGluIHJhbmdlKHJlcGNvdW50KToKLSAgICAgICAgcmMgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHJjX2JlZm9yZSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKICAgICAgICAgcnVuX3RoZV90ZXN0KCkKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLicpCi0gICAgICAgIGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCBhYmNzKQorICAgICAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKQorICAgICAgICByY19hZnRlciA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKICAgICAgICAgaWYgaSA+PSBud2FybXVwOgotICAgICAgICAgICAgZGVsdGFzLmFwcGVuZChzeXMuZ2V0dG90YWxyZWZjb3VudCgpIC0gcmMgLSAyKQorICAgICAgICAgICAgZGVsdGFzLmFwcGVuZChyY19hZnRlciAtIHJjX2JlZm9yZSkKICAgICBwcmludCA+PiBzeXMuc3RkZXJyCiAgICAgaWYgYW55KGRlbHRhcyk6CiAgICAgICAgIG1zZyA9ICclcyBsZWFrZWQgJXMgcmVmZXJlbmNlcywgc3VtPSVzJyAlICh0ZXN0LCBkZWx0YXMsIHN1bShkZWx0YXMpKQogICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCBtc2cKLSAgICAgICAgcmVmcmVwID0gb3BlbihmbmFtZSwgImEiKQotICAgICAgICBwcmludCA+PiByZWZyZXAsIG1zZwotICAgICAgICByZWZyZXAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJhIikgYXMgcmVmcmVwOgorICAgICAgICAgICAgcHJpbnQgPj4gcmVmcmVwLCBtc2cKKyAgICAgICAgICAgIHJlZnJlcC5mbHVzaCgpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCiAKLWRlZiBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgYWJjcyk6CitkZWYgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcyk6CiAgICAgaW1wb3J0IGdjLCBjb3B5X3JlZwogICAgIGltcG9ydCBfc3RycHRpbWUsIGxpbmVjYWNoZQogICAgIGRpcmNhY2hlID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2RpcmNhY2hlJywgZGVwcmVjYXRlZD1UcnVlKQpAQCAtNzA3LDYgKzEwNDYsMTMgQEAKICAgICBjb3B5X3JlZy5kaXNwYXRjaF90YWJsZS51cGRhdGUocHMpCiAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQogICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLnVwZGF0ZShwaWMpCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgemlwaW1wb3J0CisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzICMgUnVuIHVubW9kaWZpZWQgb24gcGxhdGZvcm1zIHdpdGhvdXQgemlwaW1wb3J0IHN1cHBvcnQKKyAgICBlbHNlOgorICAgICAgICB6aXBpbXBvcnQuX3ppcF9kaXJlY3RvcnlfY2FjaGUuY2xlYXIoKQorICAgICAgICB6aXBpbXBvcnQuX3ppcF9kaXJlY3RvcnlfY2FjaGUudXBkYXRlKHpkYykKIAogICAgICMgY2xlYXIgdHlwZSBjYWNoZQogICAgIHN5cy5fY2xlYXJfdHlwZV9jYWNoZSgpCkBAIC03MzQsMTggKzEwODAsMTYgQEAKICAgICAjIENvbGxlY3QgY3ljbGljIHRyYXNoLgogICAgIGdjLmNvbGxlY3QoKQogCi1kZWYgZmluZHRlc3RkaXIoKToKLSAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgICBmaWxlID0gc3lzLmFyZ3ZbMF0KLSAgICBlbHNlOgotICAgICAgICBmaWxlID0gX19maWxlX18KLSAgICB0ZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpIG9yIG9zLmN1cmRpcgotICAgIHJldHVybiB0ZXN0ZGlyCitkZWYgZmluZHRlc3RkaXIocGF0aD1Ob25lKToKKyAgICByZXR1cm4gcGF0aCBvciBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpcgogCi1kZWYgcmVtb3ZlcHkobmFtZSk6Ci0gICAgaWYgbmFtZS5lbmRzd2l0aChvcy5leHRzZXAgKyAicHkiKToKLSAgICAgICAgbmFtZSA9IG5hbWVbOi0zXQotICAgIHJldHVybiBuYW1lCitkZWYgcmVtb3ZlcHkobmFtZXMpOgorICAgIGlmIG5vdCBuYW1lczoKKyAgICAgICAgcmV0dXJuCisgICAgZm9yIGlkeCwgbmFtZSBpbiBlbnVtZXJhdGUobmFtZXMpOgorICAgICAgICBiYXNlbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQorICAgICAgICBpZiBleHQgPT0gJy5weSc6CisgICAgICAgICAgICBuYW1lc1tpZHhdID0gYmFzZW5hbWUKIAogZGVmIGNvdW50KG4sIHdvcmQpOgogICAgIGlmIG4gPT0gMToKQEAgLTc3NCw5ICsxMTE4LDYgQEAKICMgICAgIHRlc3RfcGVwMjc3CiAjICAgICAgICAgVGhlIF9FeHBlY3RlZFNraXBzIGNvbnN0cnVjdG9yIGFkZHMgdGhpcyB0byB0aGUgc2V0IG9mIGV4cGVjdGVkCiAjICAgICAgICAgc2tpcHMgaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMuCi0jICAgICB0ZXN0X3NvY2tldF9zc2wKLSMgICAgICAgICBDb250cm9sbGVkIGJ5IHRlc3Rfc29ja2V0X3NzbC5za2lwX2V4cGVjdGVkLiAgUmVxdWlyZXMgdGhlIG5ldHdvcmsKLSMgICAgICAgICByZXNvdXJjZSwgYW5kIGEgc29ja2V0IG1vZHVsZSB3aXRoIHNzbCBzdXBwb3J0LgogIyAgICAgdGVzdF90aW1lb3V0CiAjICAgICAgICAgQ29udHJvbGxlZCBieSB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZC4gIFJlcXVpcmVzIHRoZSBuZXR3b3JrCiAjICAgICAgICAgcmVzb3VyY2UgYW5kIGEgc29ja2V0IG1vZHVsZS4KQEAgLTgyNyw0MSArMTE2OCw2IEBACiAgICAgICAgIHRlc3Rfa3F1ZXVlCiAgICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKICAgICAgICAgIiIiLAotICAgJ21hYyc6Ci0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2F0ZXhpdAotICAgICAgICB0ZXN0X2JzZGRiCi0gICAgICAgIHRlc3RfYnNkZGIxODUKLSAgICAgICAgdGVzdF9ic2RkYjMKLSAgICAgICAgdGVzdF9iejIKLSAgICAgICAgdGVzdF9jb21tYW5kcwotICAgICAgICB0ZXN0X2NyeXB0Ci0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGJtCi0gICAgICAgIHRlc3RfZGwKLSAgICAgICAgdGVzdF9mY250bAotICAgICAgICB0ZXN0X2ZvcmsxCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9ncnAKLSAgICAgICAgdGVzdF9pb2N0bAotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X21tYXAKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wb2xsCi0gICAgICAgIHRlc3RfcG9wZW4KLSAgICAgICAgdGVzdF9wb3BlbjIKLSAgICAgICAgdGVzdF9wb3NpeAotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3B3ZAotICAgICAgICB0ZXN0X3Jlc291cmNlCi0gICAgICAgIHRlc3Rfc2lnbmFsCi0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgIHRlc3RfdGFyZmlsZQotICAgICAgICB0ZXN0X3RpbWluZwotICAgICAgICAiIiIsCiAgICAgJ3VuaXh3YXJlNyc6CiAgICAgICAgICIiIgogICAgICAgICB0ZXN0X2JzZGRiCkBAIC05NTMsNiArMTI1OSw3IEBACiAgICAgICAgIHRlc3RfYnNkZGIzCiAgICAgICAgIHRlc3RfY3Vyc2VzCiAgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9nZGIKICAgICAgICAgdGVzdF9nZGJtCiAgICAgICAgIHRlc3RfbGFyZ2VmaWxlCiAgICAgICAgIHRlc3RfbG9jYWxlCkBAIC0xMDUzLDkgKzEzNjAsMTEgQEAKICAgICAgICAgdGVzdF9vc3NhdWRpb2RldgogICAgICAgICB0ZXN0X3BlcDI3NwogICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3NvY2tldF9zc2wKICAgICAgICAgdGVzdF9zb2NrZXRzZXJ2ZXIKICAgICAgICAgdGVzdF90Y2wKKyAgICAgICAgdGVzdF90aworICAgICAgICB0ZXN0X3R0a19ndWlvbmx5CisgICAgICAgIHRlc3RfdHRrX3RleHRvbmx5CiAgICAgICAgIHRlc3RfdGltZW91dAogICAgICAgICB0ZXN0X3VybGxpYm5ldAogICAgICAgICB0ZXN0X211bHRpcHJvY2Vzc2luZwpAQCAtMTA3MywxMSArMTM4MiwxNSBAQAogICAgICAgICB0ZXN0X2txdWV1ZQogICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2CiAgICAgICAgIHRlc3RfdGNsCisgICAgICAgIHRlc3RfdGsKKyAgICAgICAgdGVzdF90dGtfZ3Vpb25seQorICAgICAgICB0ZXN0X3R0a190ZXh0b25seQogICAgICAgICB0ZXN0X3ppcGltcG9ydAogICAgICAgICB0ZXN0X3psaWIKICAgICAgICAgIiIiLAogICAgICdvcGVuYnNkMyc6CiAgICAgICAgICIiIgorICAgICAgICB0ZXN0X2FzY2lpX2Zvcm1hdGQKICAgICAgICAgdGVzdF9ic2RkYgogICAgICAgICB0ZXN0X2JzZGRiMwogICAgICAgICB0ZXN0X2N0eXBlcwpAQCAtMTA4OSwxMCArMTQwMiwxNCBAQAogICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2CiAgICAgICAgIHRlc3RfcGVwMjc3CiAgICAgICAgIHRlc3RfdGNsCisgICAgICAgIHRlc3RfdGsKKyAgICAgICAgdGVzdF90dGtfZ3Vpb25seQorICAgICAgICB0ZXN0X3R0a190ZXh0b25seQogICAgICAgICB0ZXN0X211bHRpcHJvY2Vzc2luZwogICAgICAgICAiIiIsCiAgICAgJ25ldGJzZDMnOgogICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9hc2NpaV9mb3JtYXRkCiAgICAgICAgIHRlc3RfYnNkZGIKICAgICAgICAgdGVzdF9ic2RkYjE4NQogICAgICAgICB0ZXN0X2JzZGRiMwpAQCAtMTEwNSw2ICsxNDIyLDkgQEAKICAgICAgICAgdGVzdF9vc3NhdWRpb2RldgogICAgICAgICB0ZXN0X3BlcDI3NwogICAgICAgICB0ZXN0X3RjbAorICAgICAgICB0ZXN0X3RrCisgICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKKyAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKICAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKICAgICAgICAgIiIiLAogfQpAQCAtMTEyOSwyMSArMTQ0OSwxMyBAQAogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXM6CiAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfcGVwMjc3JykKIAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zb2NrZXRfc3NsCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3NvY2tldF9zc2wuc2tpcF9leHBlY3RlZDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3Rfc29ja2V0X3NzbCcpCi0KICAgICAgICAgICAgIGlmIHRlc3RfdGltZW91dC5za2lwX2V4cGVjdGVkOgogICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3RpbWVvdXQnKQogCiAgICAgICAgICAgICBpZiBzeXMubWF4aW50ID09IDkyMjMzNzIwMzY4NTQ3NzU4MDdMOgogICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X2ltYWdlb3AnKQogCi0gICAgICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtIGluICgibWFjIiwgImRhcndpbiIpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJkYXJ3aW4iOgogICAgICAgICAgICAgICAgIE1BQ19PTkxZID0gWyJ0ZXN0X21hY29zIiwgInRlc3RfbWFjb3N0b29scyIsICJ0ZXN0X2FlcGFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RfcGxpc3RsaWIiLCAidGVzdF9zY3JpcHRwYWNrYWdlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RfYXBwbGVzaW5nbGUiXQpAQCAtMTE5MSwxNiArMTUwMywzNCBAQAogICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RlZAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICMgUmVtb3ZlIHJlZ3J0ZXN0LnB5J3Mgb3duIGRpcmVjdG9yeSBmcm9tIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGguICBUaGlzCi0gICAgIyBwcmV2ZW50cyByZWxhdGl2ZSBpbXBvcnRzIGZyb20gd29ya2luZywgYW5kIHJlbGF0aXZlIGltcG9ydHMgd2lsbCBzY3JldwotICAgICMgdXAgdGhlIHRlc3RpbmcgZnJhbWV3b3JrLiAgRS5nLiBpZiBib3RoIHRlc3QudGVzdF9zdXBwb3J0IGFuZAotICAgICMgdGVzdF9zdXBwb3J0IGFyZSBpbXBvcnRlZCwgdGhleSB3aWxsIG5vdCBjb250YWluIHRoZSBzYW1lIGdsb2JhbHMsIGFuZAotICAgICMgbXVjaCBvZiB0aGUgdGVzdGluZyBmcmFtZXdvcmsgcmVsaWVzIG9uIHRoZSBnbG9iYWxzIGluIHRoZQotICAgICMgdGVzdC50ZXN0X3N1cHBvcnQgbW9kdWxlLgotICAgIG15ZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSkpCi0gICAgaSA9IGxlbihzeXMucGF0aCkKLSAgICB3aGlsZSBpID49IDA6Ci0gICAgICAgIGkgLT0gMQotICAgICAgICBpZiBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5ub3JtcGF0aChzeXMucGF0aFtpXSkpID09IG15ZGlyOgotICAgICAgICAgICAgZGVsIHN5cy5wYXRoW2ldCi0gICAgbWFpbigpCisgICAgIyBmaW5kdGVzdGRpcigpIGdldHMgdGhlIGRpcm5hbWUgb3V0IG9mIF9fZmlsZV9fLCBzbyB3ZSBoYXZlIHRvIG1ha2UgaXQKKyAgICAjIGFic29sdXRlIGJlZm9yZSBjaGFuZ2luZyB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisgICAgIyBGb3IgZXhhbXBsZSBfX2ZpbGVfXyBtYXkgYmUgcmVsYXRpdmUgd2hlbiBydW5uaW5nIHRyYWNlIG9yIHByb2ZpbGUuCisgICAgIyBTZWUgaXNzdWUgIzkzMjMuCisgICAgX19maWxlX18gPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisKKyAgICAjIHNhbml0eSBjaGVjaworICAgIGFzc2VydCBfX2ZpbGVfXyA9PSBvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pCisKKyAgICAjIFdoZW4gdGVzdHMgYXJlIHJ1biBmcm9tIHRoZSBQeXRob24gYnVpbGQgZGlyZWN0b3J5LCBpdCBpcyBiZXN0IHByYWN0aWNlCisgICAgIyB0byBrZWVwIHRoZSB0ZXN0IGZpbGVzIGluIGEgc3ViZm9sZGVyLiAgSXQgZWFzZXMgdGhlIGNsZWFudXAgb2YgbGVmdG92ZXIKKyAgICAjIGZpbGVzIHVzaW5nIGNvbW1hbmQgIm1ha2UgZGlzdGNsZWFuIi4KKyAgICBpZiBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCk6CisgICAgICAgIFRFTVBESVIgPSBvcy5wYXRoLmpvaW4oc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdzcmNkaXInKSwgJ2J1aWxkJykKKyAgICAgICAgVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aChURU1QRElSKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoVEVNUERJUik6CisgICAgICAgICAgICBvcy5ta2RpcihURU1QRElSKQorCisgICAgIyBEZWZpbmUgYSB3cml0YWJsZSB0ZW1wIGRpciB0aGF0IHdpbGwgYmUgdXNlZCBhcyBjd2Qgd2hpbGUgcnVubmluZworICAgICMgdGhlIHRlc3RzLiBUaGUgbmFtZSBvZiB0aGUgZGlyIGluY2x1ZGVzIHRoZSBwaWQgdG8gYWxsb3cgcGFyYWxsZWwKKyAgICAjIHRlc3RpbmcgKHNlZSB0aGUgLWogb3B0aW9uKS4KKyAgICBURVNUQ1dEID0gJ3Rlc3RfcHl0aG9uX3t9Jy5mb3JtYXQob3MuZ2V0cGlkKCkpCisKKyAgICBURVNUQ1dEID0gb3MucGF0aC5qb2luKFRFTVBESVIsIFRFU1RDV0QpCisKKyAgICAjIFJ1biB0aGUgdGVzdHMgaW4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB0ZW1wb3JhcnkgY2hhbmdlcyB0aGUgQ1dEIHRvIGEKKyAgICAjIHRlbXBvcmFyeSBhbmQgd3JpdGFibGUgZGlyZWN0b3J5LiBJZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgb3IKKyAgICAjIGNoYW5nZSB0aGUgQ1dELCB0aGUgb3JpZ2luYWwgQ1dEIHdpbGwgYmUgdXNlZC4gVGhlIG9yaWdpbmFsIENXRCBpcworICAgICMgYXZhaWxhYmxlIGZyb20gdGVzdF9zdXBwb3J0LlNBVkVEQ1dELgorICAgIHdpdGggdGVzdF9zdXBwb3J0LnRlbXBfY3dkKFRFU1RDV0QsIHF1aWV0PVRydWUpOgorICAgICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkgYi9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNzg1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5CkBAIC0wLDAgKzEsMTY0IEBACisjIENvbW1vbiB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGJ5IHZhcmlvdXMgc2NyaXB0IGV4ZWN1dGlvbiB0ZXN0cworIyAgZS5nLiB0ZXN0X2NtZF9saW5lLCB0ZXN0X2NtZF9saW5lX3NjcmlwdCBhbmQgdGVzdF9ydW5weQorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBweV9jb21waWxlCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHNodXRpbAoraW1wb3J0IHppcGZpbGUKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgc3RyaXBfcHl0aG9uX3N0ZGVycgorCisjIEV4ZWN1dGluZyB0aGUgaW50ZXJwcmV0ZXIgaW4gYSBzdWJwcm9jZXNzCitkZWYgX2Fzc2VydF9weXRob24oZXhwZWN0ZWRfc3VjY2VzcywgKmFyZ3MsICoqZW52X3ZhcnMpOgorICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlXQorICAgIGlmIG5vdCBlbnZfdmFyczoKKyAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctRScpCisgICAgY21kX2xpbmUuZXh0ZW5kKGFyZ3MpCisgICAgIyBOZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudCwgZm9yIGluLXBsYWNlIHRlc3Rpbmcgb2YKKyAgICAjIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkcy4KKyAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgIGVudi51cGRhdGUoZW52X3ZhcnMpCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgdHJ5OgorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgIGZpbmFsbHk6CisgICAgICAgIHN1YnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBwLnN0ZG91dC5jbG9zZSgpCisgICAgICAgIHAuc3RkZXJyLmNsb3NlKCkKKyAgICByYyA9IHAucmV0dXJuY29kZQorICAgIGVyciA9ICBzdHJpcF9weXRob25fc3RkZXJyKGVycikKKyAgICBpZiAocmMgYW5kIGV4cGVjdGVkX3N1Y2Nlc3MpIG9yIChub3QgcmMgYW5kIG5vdCBleHBlY3RlZF9zdWNjZXNzKToKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCisgICAgICAgICAgICAiUHJvY2VzcyByZXR1cm4gY29kZSBpcyAlZCwgIgorICAgICAgICAgICAgInN0ZGVyciBmb2xsb3dzOlxuJXMiICUgKHJjLCBlcnIuZGVjb2RlKCdhc2NpaScsICdpZ25vcmUnKSkpCisgICAgcmV0dXJuIHJjLCBvdXQsIGVycgorCitkZWYgYXNzZXJ0X3B5dGhvbl9vaygqYXJncywgKiplbnZfdmFycyk6CisgICAgIiIiCisgICAgQXNzZXJ0IHRoYXQgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBgYXJnc2AgYW5kIG9wdGlvbmFsIGVudmlyb25tZW50CisgICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgaXMgb2sgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlLgorICAgICIiIgorICAgIHJldHVybiBfYXNzZXJ0X3B5dGhvbihUcnVlLCAqYXJncywgKiplbnZfdmFycykKKworZGVmIGFzc2VydF9weXRob25fZmFpbHVyZSgqYXJncywgKiplbnZfdmFycyk6CisgICAgIiIiCisgICAgQXNzZXJ0IHRoYXQgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBgYXJnc2AgYW5kIG9wdGlvbmFsIGVudmlyb25tZW50CisgICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgZmFpbHMgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlLgorICAgICIiIgorICAgIHJldHVybiBfYXNzZXJ0X3B5dGhvbihGYWxzZSwgKmFyZ3MsICoqZW52X3ZhcnMpCisKK2RlZiBweXRob25fZXhpdF9jb2RlKCphcmdzKToKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1FJ10KKyAgICBjbWRfbGluZS5leHRlbmQoYXJncykKKyAgICB3aXRoIG9wZW4ob3MuZGV2bnVsbCwgJ3cnKSBhcyBkZXZudWxsOgorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKGNtZF9saW5lLCBzdGRvdXQ9ZGV2bnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCitkZWYgc3Bhd25fcHl0aG9uKCphcmdzLCAqKmt3YXJncyk6CisgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRSddCisgICAgY21kX2xpbmUuZXh0ZW5kKGFyZ3MpCisgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisKK2RlZiBraWxsX3B5dGhvbihwKToKKyAgICBwLnN0ZGluLmNsb3NlKCkKKyAgICBkYXRhID0gcC5zdGRvdXQucmVhZCgpCisgICAgcC5zdGRvdXQuY2xvc2UoKQorICAgICMgdHJ5IHRvIGNsZWFudXAgdGhlIGNoaWxkIHNvIHdlIGRvbid0IGFwcGVhciB0byBsZWFrIHdoZW4gcnVubmluZworICAgICMgd2l0aCByZWdydGVzdCAtUi4KKyAgICBwLndhaXQoKQorICAgIHN1YnByb2Nlc3MuX2NsZWFudXAoKQorICAgIHJldHVybiBkYXRhCisKK2RlZiBydW5fcHl0aG9uKCphcmdzLCAqKmt3YXJncyk6CisgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICBwID0gc3Bhd25fcHl0aG9uKCphcmdzLCAqKmt3YXJncykKKyAgICBlbHNlOgorICAgICAgICBwID0gc3Bhd25fcHl0aG9uKCctTycsICphcmdzLCAqKmt3YXJncykKKyAgICBzdGRvdXRfZGF0YSA9IGtpbGxfcHl0aG9uKHApCisgICAgcmV0dXJuIHAud2FpdCgpLCBzdGRvdXRfZGF0YQorCisjIFNjcmlwdCBjcmVhdGlvbiB1dGlsaXRpZXMKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgdGVtcF9kaXIoKToKKyAgICBkaXJuYW1lID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgZGlybmFtZSA9IG9zLnBhdGgucmVhbHBhdGgoZGlybmFtZSkKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIGRpcm5hbWUKKyAgICBmaW5hbGx5OgorICAgICAgICBzaHV0aWwucm10cmVlKGRpcm5hbWUpCisKK2RlZiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSk6CisgICAgc2NyaXB0X2ZpbGVuYW1lID0gc2NyaXB0X2Jhc2VuYW1lK29zLmV4dHNlcCsncHknCisgICAgc2NyaXB0X25hbWUgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2Rpciwgc2NyaXB0X2ZpbGVuYW1lKQorICAgIHNjcmlwdF9maWxlID0gb3BlbihzY3JpcHRfbmFtZSwgJ3cnKQorICAgIHNjcmlwdF9maWxlLndyaXRlKHNvdXJjZSkKKyAgICBzY3JpcHRfZmlsZS5jbG9zZSgpCisgICAgcmV0dXJuIHNjcmlwdF9uYW1lCisKK2RlZiBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSk6CisgICAgcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCisgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICBjb21waWxlZF9uYW1lID0gc2NyaXB0X25hbWUgKyAnYycKKyAgICBlbHNlOgorICAgICAgICBjb21waWxlZF9uYW1lID0gc2NyaXB0X25hbWUgKyAnbycKKyAgICByZXR1cm4gY29tcGlsZWRfbmFtZQorCitkZWYgbWFrZV96aXBfc2NyaXB0KHppcF9kaXIsIHppcF9iYXNlbmFtZSwgc2NyaXB0X25hbWUsIG5hbWVfaW5femlwPU5vbmUpOgorICAgIHppcF9maWxlbmFtZSA9IHppcF9iYXNlbmFtZStvcy5leHRzZXArJ3ppcCcKKyAgICB6aXBfbmFtZSA9IG9zLnBhdGguam9pbih6aXBfZGlyLCB6aXBfZmlsZW5hbWUpCisgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICd3JykKKyAgICBpZiBuYW1lX2luX3ppcCBpcyBOb25lOgorICAgICAgICBuYW1lX2luX3ppcCA9IG9zLnBhdGguYmFzZW5hbWUoc2NyaXB0X25hbWUpCisgICAgemlwX2ZpbGUud3JpdGUoc2NyaXB0X25hbWUsIG5hbWVfaW5femlwKQorICAgIHppcF9maWxlLmNsb3NlKCkKKyAgICAjaWYgdGVzdC50ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAjICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKHppcF9uYW1lLCAncicpCisgICAgIyAgICBwcmludCAnQ29udGVudHMgb2YgJXI6JyAlIHppcF9uYW1lCisgICAgIyAgICB6aXBfZmlsZS5wcmludGRpcigpCisgICAgIyAgICB6aXBfZmlsZS5jbG9zZSgpCisgICAgcmV0dXJuIHppcF9uYW1lLCBvcy5wYXRoLmpvaW4oemlwX25hbWUsIG5hbWVfaW5femlwKQorCitkZWYgbWFrZV9wa2cocGtnX2Rpcik6CisgICAgb3MubWtkaXIocGtnX2RpcikKKyAgICBtYWtlX3NjcmlwdChwa2dfZGlyLCAnX19pbml0X18nLCAnJykKKworZGVmIG1ha2VfemlwX3BrZyh6aXBfZGlyLCB6aXBfYmFzZW5hbWUsIHBrZ19uYW1lLCBzY3JpcHRfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgIHNvdXJjZSwgZGVwdGg9MSwgY29tcGlsZWQ9RmFsc2UpOgorICAgIHVubGluayA9IFtdCisgICAgaW5pdF9uYW1lID0gbWFrZV9zY3JpcHQoemlwX2RpciwgJ19faW5pdF9fJywgJycpCisgICAgdW5saW5rLmFwcGVuZChpbml0X25hbWUpCisgICAgaW5pdF9iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoaW5pdF9uYW1lKQorICAgIHNjcmlwdF9uYW1lID0gbWFrZV9zY3JpcHQoemlwX2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCisgICAgdW5saW5rLmFwcGVuZChzY3JpcHRfbmFtZSkKKyAgICBpZiBjb21waWxlZDoKKyAgICAgICAgaW5pdF9uYW1lID0gY29tcGlsZV9zY3JpcHQoaW5pdF9uYW1lKQorICAgICAgICBzY3JpcHRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICB1bmxpbmsuZXh0ZW5kKChpbml0X25hbWUsIHNjcmlwdF9uYW1lKSkKKyAgICBwa2dfbmFtZXMgPSBbb3Muc2VwLmpvaW4oW3BrZ19uYW1lXSppKSBmb3IgaSBpbiByYW5nZSgxLCBkZXB0aCsxKV0KKyAgICBzY3JpcHRfbmFtZV9pbl96aXAgPSBvcy5wYXRoLmpvaW4ocGtnX25hbWVzWy0xXSwgb3MucGF0aC5iYXNlbmFtZShzY3JpcHRfbmFtZSkpCisgICAgemlwX2ZpbGVuYW1lID0gemlwX2Jhc2VuYW1lK29zLmV4dHNlcCsnemlwJworICAgIHppcF9uYW1lID0gb3MucGF0aC5qb2luKHppcF9kaXIsIHppcF9maWxlbmFtZSkKKyAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3cnKQorICAgIGZvciBuYW1lIGluIHBrZ19uYW1lczoKKyAgICAgICAgaW5pdF9uYW1lX2luX3ppcCA9IG9zLnBhdGguam9pbihuYW1lLCBpbml0X2Jhc2VuYW1lKQorICAgICAgICB6aXBfZmlsZS53cml0ZShpbml0X25hbWUsIGluaXRfbmFtZV9pbl96aXApCisgICAgemlwX2ZpbGUud3JpdGUoc2NyaXB0X25hbWUsIHNjcmlwdF9uYW1lX2luX3ppcCkKKyAgICB6aXBfZmlsZS5jbG9zZSgpCisgICAgZm9yIG5hbWUgaW4gdW5saW5rOgorICAgICAgICBvcy51bmxpbmsobmFtZSkKKyAgICAjaWYgdGVzdC50ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAjICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKHppcF9uYW1lLCAncicpCisgICAgIyAgICBwcmludCAnQ29udGVudHMgb2YgJXI6JyAlIHppcF9uYW1lCisgICAgIyAgICB6aXBfZmlsZS5wcmludGRpcigpCisgICAgIyAgICB6aXBfZmlsZS5jbG9zZSgpCisgICAgcmV0dXJuIHppcF9uYW1lLCBvcy5wYXRoLmpvaW4oemlwX25hbWUsIHNjcmlwdF9uYW1lX2luX3ppcCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NlcV90ZXN0cy5weSBiL0xpYi90ZXN0L3NlcV90ZXN0cy5weQppbmRleCAxNDMwM2FhLi5mNWU0ZTBlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zZXFfdGVzdHMucHkKKysrIGIvTGliL3Rlc3Qvc2VxX3Rlc3RzLnB5CkBAIC0xMzEsOCArMTMxLDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnR5cGUydGVzdCwgSXRlckdlbkV4YyhzKSkKIAogICAgIGRlZiB0ZXN0X3RydXRoKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8obm90IHNlbGYudHlwZTJ0ZXN0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnR5cGUydGVzdChbNDJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR5cGUydGVzdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50eXBlMnRlc3QoWzQyXSkpCiAKICAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgogICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzAsIDEsIDIsIDMsIDRdKQpAQCAtMjAxLDkgKzIwMSw5IEBACiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CiAgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMCwgMSwgMl0pCiAgICAgICAgIGZvciBpIGluIHU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaSBpbiB1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCB1KQogICAgICAgICBmb3IgaSBpbiBtaW4odSktMSwgbWF4KHUpKzE6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaSBub3QgaW4gdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaSwgdSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUuX19jb250YWluc19fKQogCkBAIC0yMTUsOCArMjE1LDggQEAKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBDYW4ndCBtZWV0IGhhc2ggaW52YXJpYW50IHJlcXVpcmVtZW50cwotICAgICAgICBzZWxmLmFzc2VydF8oQWxsRXEoKSBub3QgaW4gc2VsZi50eXBlMnRlc3QoW10pKQotICAgICAgICBzZWxmLmFzc2VydF8oQWxsRXEoKSBpbiBzZWxmLnR5cGUydGVzdChbMV0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKEFsbEVxKCksIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihBbGxFcSgpLCBzZWxmLnR5cGUydGVzdChbMV0pKQogCiAgICAgZGVmIHRlc3RfY29udGFpbnNfb3JkZXIoc2VsZik6CiAgICAgICAgICMgU2VxdWVuY2VzIG11c3QgdGVzdCBpbi1vcmRlci4gIElmIGEgcmljaCBjb21wYXJpc29uIGhhcyBzaWRlCkBAIC0yMjksNyArMjI5LDcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBEb05vdFRlc3RFcQogCiAgICAgICAgIGNoZWNrZmlyc3QgPSBzZWxmLnR5cGUydGVzdChbMSwgU3RvcENvbXBhcmVzKCldKQotICAgICAgICBzZWxmLmFzc2VydF8oMSBpbiBjaGVja2ZpcnN0KQorICAgICAgICBzZWxmLmFzc2VydEluKDEsIGNoZWNrZmlyc3QpCiAgICAgICAgIGNoZWNrbGFzdCA9IHNlbGYudHlwZTJ0ZXN0KFtTdG9wQ29tcGFyZXMoKSwgMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERvTm90VGVzdEVxLCBjaGVja2xhc3QuX19jb250YWluc19fLCAxKQogCkBAIC0yNzAsNyArMjcwLDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdTMgPSBzdWJjbGFzcyhbMCwgMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTMsIHUzKjEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1MyBpcyBub3QgdTMqMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh1MywgdTMqMSkKIAogICAgIGRlZiB0ZXN0X2lhZGQoc2VsZik6CiAgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zaGEyNTYucGVtIGIvTGliL3Rlc3Qvc2hhMjU2LnBlbQppbmRleCAwMTg3OGU5Li5kNDg4ZTZkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zaGEyNTYucGVtCisrKyBiL0xpYi90ZXN0L3NoYTI1Ni5wZW0KQEAgLTEsMzMgKzEsMTI5IEBACisjIENlcnRpZmljYXRlIGNoYWluIGZvciBodHRwczovL3NoYTI1Ni50YnMtaW50ZXJuZXQuY29tCisgMCBzOi9DPUZSL3Bvc3RhbENvZGU9MTQwMDAvU1Q9Q2FsdmFkb3MvTD1DQUVOL3N0cmVldD0yMiBydWUgZGUgQnJldGFnbmUvTz1UQlMgSU5URVJORVQvT1U9MDAwMiA0NDA0NDM4MTAvT1U9c2hhLTI1NiBwcm9kdWN0aW9uL0NOPXNoYTI1Ni50YnMtaW50ZXJuZXQuY29tCisgICBpOi9DPUZSL1NUPUNhbHZhZG9zL0w9Q2Flbi9PPVRCUyBJTlRFUk5FVC9PVT1UZXJtcyBhbmQgQ29uZGl0aW9uczogaHR0cDovL3d3dy50YnMtaW50ZXJuZXQuY29tL0NBL3JlcG9zaXRvcnkvT1U9VEJTIElOVEVSTkVUIENBL0NOPVRCUyBYNTA5IENBIFNHQwogLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlGeHpDQ0E2K2dBd0lCQWdJSkFMbmxuZjV1elRrSU1BMEdDU3FHU0liM0RRRUJDd1VBTUVzeEN6QUpCZ05WCi1CQVlUQWtSRk1SY3dGUVlEVlFRS0V3NXpZMmh2YTI5clpXdHpMbTl5WnpFak1DRUdDU3FHU0liM0RRRUpBUllVCi1hR0Z1Ym05QWMyTm9iMnR2YTJWcmN5NXZjbWN3SGhjTk1UQXdNVEkzTURBeU1USTFXaGNOTWpBd01USTFNREF5Ci1NVEkxV2pCTE1Rc3dDUVlEVlFRR0V3SkVSVEVYTUJVR0ExVUVDaE1PYzJOb2IydHZhMlZyY3k1dmNtY3hJekFoCi1CZ2txaGtpRzl3MEJDUUVXRkdoaGJtNXZRSE5qYUc5cmIydGxhM011YjNKbk1JSUNJakFOQmdrcWhraUc5dzBCCi1BUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFwSjRPRFB3RW9vTVczNWRRUGxCcWR2Y2ZrRXZqaGNzQTdqbUpmRnFOCi1lLzFUMzR6VDQ0WDkrS25NQlNHMkluYWNiRDdleUZnamZhRU5Gc1o4N1lrRUJESUZaL1NIb3RMSlpPUlE4UFVqCi1Zb3hQRzRtaktOK3lMMld0aE5jWWJSeUpyZVRiYkRyb05NdXc2dGtUU3hlU1h5WUZRcktNQ1VmRXJWYlphL2Q1Ci1SdmZGVmsrQXU5ZFZVRmhlZC9TdG41Y3YrYTBmZnZweUE3eWdpaG0xa01GSUNidlBlSTA4NDZ0bUMyUGg3ck01Ci1wWVF5TkJET1ZwVUxPRFRrNVd1NmppaUpKeWd2SldDWjFGZHBzZEJzNWFLV0hXZFJoWCsrcXVHdWZsVFRqSDVkCi1xYUlrYTRvcDlIN1hrc1lwaFREWG1WK3FIbnZhNWpiUG9nd3V0RFFjVnNHQlFjSmFMbVFxaHNRSzEzYmY0a2hFCi1pV0p2ZkJMZkhuOE9PcFkyNVp3d3VpZ0pJd2lmTkN4UWVlVDFGckxteXVZTmh6MnBoUHB6eDA2NWtxU1VTUitBCi1JdzhEUEU2ZTY1VXFNREtxWm5JRDNkUWVpUWFGckhFVitJYm8wVS90RDBZU0J3NXAzM1RNaDBFczMzSUJXTWFjCi1tN3g0aElGV2RobDhXNTIydTZxT3JUc3dZM3M4dkI3YmxOV3FNYzluN29XSDh5YkZmN0VnS2VEVnRFTjlBeUJFCi0wV290WElFWldJK1d2RGJVMUFDSlhhdTlzUWhZUC9lZXJnN1p3cjNpR1V5NElRNW9VSmlibmp0Y0Urejh6bUROCi1wRTZZY01DTEp5TGpYaVEzaUhHOW1OWHp3N3dQbnNsVGJFRUV1a3JmU2xIR2dXOERtK1ZyTnlXMEpVTTFibnR4Ci12Yk1DQXdFQUFhT0JyVENCcWpBZEJnTlZIUTRFRmdRVUNlZHY3cERUdVh0Q3htNEhUdzloVXRyVHZzb3dld1lECi1WUjBqQkhRd2NvQVVDZWR2N3BEVHVYdEN4bTRIVHc5aFV0clR2c3FoVDZSTk1Fc3hDekFKQmdOVkJBWVRBa1JGCi1NUmN3RlFZRFZRUUtFdzV6WTJodmEyOXJaV3R6TG05eVp6RWpNQ0VHQ1NxR1NJYjNEUUVKQVJZVWFHRnVibTlBCi1jMk5vYjJ0dmEyVnJjeTV2Y21lQ0NRQzU1WjMrYnMwNUNEQU1CZ05WSFJNRUJUQURBUUgvTUEwR0NTcUdTSWIzCi1EUUVCQ3dVQUE0SUNBUUJIS0F4QTdXQS9NRUZqZXQwM0s4b3V6RU9yNkpyazJmWk91UmhvRForOWdyNEZ0YUpCCi1QM0hoNUQwMGt1U092RG53c3ZDb2h4ZU5kMUtUTUF3Vm1Wb0grTlprSEVSbjNVWG5pVUVObHAxOGtvSTFlaGxyCi1DWmJYYnp6RTlUZTlCZWxsaVNGQTYzcTBjcTB5Sk4xeDlHeWFiVTM0WGtBb3VDQW1PcWZTcEtOWldaSEdCSFBGCi1iYlluWnJIRU1jc3llNnZLZVRPY2cxR3FVSEdyUU0yV0swUWFPd25DUXYyUmJsSTlWTitTZVJvVUo0NHFUWGRXCi1Ud0lZU3RzSVBlc2FjTmNBUVRTdG5IZ0txSVB4NHpDd2R4NXhvOHpPTmJYSmZvY3F3eUZxaUFvZnZiOWROMW5XCi1nMW5vVkJjWEIrb1JCWlc1Q2pGdzg3VTg4aXRxMzlpOStCV2w4MzVEV0xCVzJwVm14MVFUTEd2MFJOZ3MveFZ4Ci1tV25qSDRuTkh2cmpuNnBSbXFIWlRrL1NTMEhrbDJxdERzeW5WeElsOEVpTVRmV1NVM0RCVHVEMkovUlN6dU9FCi1lS3RBYmFvWGtYRTMxakNsNEZFWkxJVElaZDhVa1hhY2I5ck4zMDR0QUs5Mkw3NkpPQVYreE9aeEZSaXBtdng0Ci0rQTlxUVhnTGh0UDRWYURhamI0NFYva0NLUFNBMFZtM2FwZWhrZTlXbDhkRHRhZ2ZvczFlNk14U3UzRVZMWFJGCi1TUDJVNzc3Vjc3cGRNU2QwZi83Y2VyS241RmpyeFcxdjFGYVAxb0lHbmlNazRxUU5UZ0EvanZ2aGp5YnNQbFZBCi1qc2ZuaFdHYmgxdm9KYTBSUWNNaVJNc3hwdzJQMUtOT0V1MzdXMmVxL3ZGZ2hWenRaSlFVbWI1aU53PT0KK01JSUdYVENDQlVXZ0F3SUJBZ0lSQU1tYWcreWdTQWR4WnNieXpZamh1VzB3RFFZSktvWklodmNOQVFFTEJRQXcKK2djUXhDekFKQmdOVkJBWVRBa1pTTVJFd0R3WURWUVFJRXdoRFlXeDJZV1J2Y3pFTk1Bc0dBMVVFQnhNRVEyRmwKK2JqRVZNQk1HQTFVRUNoTU1WRUpUSUVsT1ZFVlNUa1ZVTVVnd1JnWURWUVFMRXo5VVpYSnRjeUJoYm1RZ1EyOXUKK1pHbDBhVzl1Y3pvZ2FIUjBjRG92TDNkM2R5NTBZbk10YVc1MFpYSnVaWFF1WTI5dEwwTkJMM0psY0c5emFYUnYKK2Nua3hHREFXQmdOVkJBc1REMVJDVXlCSlRsUkZVazVGVkNCRFFURVlNQllHQTFVRUF4TVBWRUpUSUZnMU1Ea2cKK1EwRWdVMGRETUI0WERURXdNREl4T0RBd01EQXdNRm9YRFRFeU1ESXhPVEl6TlRrMU9Wb3dnY3N4Q3pBSkJnTlYKK0JBWVRBa1pTTVE0d0RBWURWUVFSRXdVeE5EQXdNREVSTUE4R0ExVUVDQk1JUTJGc2RtRmtiM014RFRBTEJnTlYKK0JBY1RCRU5CUlU0eEd6QVpCZ05WQkFrVEVqSXlJSEoxWlNCa1pTQkNjbVYwWVdkdVpURVZNQk1HQTFVRUNoTU0KK1ZFSlRJRWxPVkVWU1RrVlVNUmN3RlFZRFZRUUxFdzR3TURBeUlEUTBNRFEwTXpneE1ERWJNQmtHQTFVRUN4TVMKK2MyaGhMVEkxTmlCd2NtOWtkV04wYVc5dU1TQXdIZ1lEVlFRREV4ZHphR0V5TlRZdWRHSnpMV2x1ZEdWeWJtVjAKK0xtTnZiVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFLYnVNOFZUN2Ywbm50d3UKK04zRjd2OUtJQmxoS05BeHFDcnppT1hVNWlxVXQ4SHJRQjNEdEhiZG1JSStDcFZVbHdsbWVwc3g2RytzckVaOWEKK01JR0F5MG54aTVhTGI3d2F0a3lJZFBqSlRNdlRVQlEvK1JQV3p0NUp0WWJiWTlCbEoreWNpMGRjdFA3NGY0TlUKK0lTTHRsckVqVWJmMmdUb2hMcmNFMDFUZm1PRjZQREViQjVQS0RpMzhjQjNOektmaXpXZnJPYUpXNlExQzFxT0oKK3k0LzRqa1VSRVgxVUZVSXh6eDd2NjJWZmpYU0dsY2pHcEJYMWZ2dEFCUU9TTGVFMGE2Z2NpRFpzMVJFcXJvRmYKKzVlWHRxWXBocFRhMTRaODNJVFhNZmdnNU56ZTFWdE1uekk5UXg0YmxZQnc0ZGdRVkV1SXNZcjdGREJPSVREemMKK1ZFVlhaeDBDQXdFQUFhT0NBajh3Z2dJN01COEdBMVVkSXdRWU1CYUFGQWRFZG9XVEtMeC9iWGpTQ3V2NlRFdmYKKzJZSWZNQjBHQTFVZERnUVdCQlNKS0kvQVlWSTlSUU5ZMFFQSXFjOGVqMlFpdlRBT0JnTlZIUThCQWY4RUJBTUMKK0JhQXdEQVlEVlIwVEFRSC9CQUl3QURBMEJnTlZIU1VFTFRBckJnZ3JCZ0VGQlFjREFRWUlLd1lCQlFVSEF3SUcKK0Npc0dBUVFCZ2pjS0F3TUdDV0NHU0FHRytFSUVBVEJNQmdOVkhTQUVSVEJETUVFR0N5c0dBUVFCZ09VM0FnUUIKK01ESXdNQVlJS3dZQkJRVUhBZ0VXSkdoMGRIQnpPaTh2ZDNkM0xuUmljeTFwYm5SbGNtNWxkQzVqYjIwdlEwRXYKK1ExQlROREJ0QmdOVkhSOEVaakJrTURLZ01LQXVoaXhvZEhSd09pOHZZM0pzTG5SaWN5MXBiblJsY201bGRDNWoKK2IyMHZWRUpUV0RVd09VTkJVMGRETG1OeWJEQXVvQ3lnS29Zb2FIUjBjRG92TDJOeWJDNTBZbk10ZURVd09TNWoKK2IyMHZWRUpUV0RVd09VTkJVMGRETG1OeWJEQ0JwZ1lJS3dZQkJRVUhBUUVFZ1prd2daWXdPQVlJS3dZQkJRVUgKK01BS0dMR2gwZEhBNkx5OWpjblF1ZEdKekxXbHVkR1Z5Ym1WMExtTnZiUzlVUWxOWU5UQTVRMEZUUjBNdVkzSjAKK01EUUdDQ3NHQVFVRkJ6QUNoaWhvZEhSd09pOHZZM0owTG5SaWN5MTROVEE1TG1OdmJTOVVRbE5ZTlRBNVEwRlQKK1IwTXVZM0owTUNRR0NDc0dBUVVGQnpBQmhoaG9kSFJ3T2k4dmIyTnpjQzUwWW5NdGVEVXdPUzVqYjIwd1B3WUQKK1ZSMFJCRGd3Tm9JWGMyaGhNalUyTG5SaWN5MXBiblJsY201bGRDNWpiMjJDRzNkM2R5NXphR0V5TlRZdWRHSnoKK0xXbHVkR1Z5Ym1WMExtTnZiVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBQTVOTDBENFFTcWhFcmhsa2RQbXoKK1h0aU12ZEdMK1plaE00Y29UUklwYXNNL0FndDM2UmMwTnpDdm5Rd0tFK3drbmdnMUd5MnFlN1EwRS96aXFCdEIKK2ZaWXpkVmd1MXpkaUw0a1RhZit3RktZQUZHc0ZieWVFbVh5c3krQ013YU5vRjJ2cFNqQ1UxVUQ1NmJFblRYL1cKK2Z4VlpZeHRCUVVwbnUyd09zbThjRFp1WlJ2OVhyWWdBaEdqOVR0NkYwYVZIU0RHbjU5dXdTaEcxK0JWRi91anUKK1NDeVBUVGpMMW9jN1lFbEpVelIveDRtUUpZdnRRSThnRElEQUdFT3M3djNSL2dLYTVFTWZiVVFVSTRDODRVYkkKK1l6MDlKZG53cy9Na0MvSG0xQlpFcWs4OXU3SHZmditvSHFFYjBYYVVvMFREZnN4RTBNMXNNZG5MYjkxUU5RQm0KK1VRPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKyAxIHM6L0M9RlIvU1Q9Q2FsdmFkb3MvTD1DYWVuL089VEJTIElOVEVSTkVUL09VPVRlcm1zIGFuZCBDb25kaXRpb25zOiBodHRwOi8vd3d3LnRicy1pbnRlcm5ldC5jb20vQ0EvcmVwb3NpdG9yeS9PVT1UQlMgSU5URVJORVQgQ0EvQ049VEJTIFg1MDkgQ0EgU0dDCisgICBpOi9DPVNFL089QWRkVHJ1c3QgQUIvT1U9QWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsvQ049QWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9vdAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlGVmpDQ0JENmdBd0lCQWdJUVhwRFowRVRKTVYwMldUeDNHVG5oaFRBTkJna3Foa2lHOXcwQkFRVUZBREJ2CitNUXN3Q1FZRFZRUUdFd0pUUlRFVU1CSUdBMVVFQ2hNTFFXUmtWSEoxYzNRZ1FVSXhKakFrQmdOVkJBc1RIVUZrCitaRlJ5ZFhOMElFVjRkR1Z5Ym1Gc0lGUlVVQ0JPWlhSM2IzSnJNU0l3SUFZRFZRUURFeGxCWkdSVWNuVnpkQ0JGCitlSFJsY201aGJDQkRRU0JTYjI5ME1CNFhEVEExTVRJd01UQXdNREF3TUZvWERURTVNRFl5TkRFNU1EWXpNRm93CitnY1F4Q3pBSkJnTlZCQVlUQWtaU01SRXdEd1lEVlFRSUV3aERZV3gyWVdSdmN6RU5NQXNHQTFVRUJ4TUVRMkZsCitiakVWTUJNR0ExVUVDaE1NVkVKVElFbE9WRVZTVGtWVU1VZ3dSZ1lEVlFRTEV6OVVaWEp0Y3lCaGJtUWdRMjl1CitaR2wwYVc5dWN6b2dhSFIwY0RvdkwzZDNkeTUwWW5NdGFXNTBaWEp1WlhRdVkyOXRMME5CTDNKbGNHOXphWFJ2Citjbmt4R0RBV0JnTlZCQXNURDFSQ1V5QkpUbFJGVWs1RlZDQkRRVEVZTUJZR0ExVUVBeE1QVkVKVElGZzFNRGtnCitRMEVnVTBkRE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBc2dPa08zZjd3ek42CityT2pnNDV0UjV2akJmeks3cW1WOUlCeGIvUVc5RUVYeEcrRTdGTmhacVFMdHdHQktvU3NIVG5RcVY3NXdXTWswCis5dGluV3ZmdEJrU3BqNXNUaS84Y2J6SmZVdlRTVlloM1F4djZBVlZqTU1IL3J1TGpFNnkrNFBvYVBzOFdvWUFRCit0czVSNFoxZzhjL1duVGVwTHN0MngwL1d2N0dtdW9RaStnWHZIVTZZckJpdTdYa2VZaHpjOTVRZHZpV1NKUkRrCitvd2hiNUs0M3FoY3ZqUm1CZk8vcGFHbENsaURHWnA4bUh3ckkyMW13b2JXcFZqVHhaUndZTzNiZDQrVEdjSTRHCitJZTV3bUh3RThGN1NLMXRnU3FiQmFjS2pEYTkzajd0eEtrZnovWWQybjdUR3FPWGlIUHNKcEc2NTV2ckt0blhrCis5dnMxem9EZUpRSURBUUFCbzRJQmxqQ0NBWkl3SFFZRFZSME9CQllFRkFkRWRvV1RLTHgvYlhqU0N1djZURXZmCisyWUlmTUE0R0ExVWREd0VCL3dRRUF3SUJCakFTQmdOVkhSTUJBZjhFQ0RBR0FRSC9BZ0VBTUNBR0ExVWRKUVFaCitNQmNHQ2lzR0FRUUJnamNLQXdNR0NXQ0dTQUdHK0VJRUFUQVlCZ05WSFNBRUVUQVBNQTBHQ3lzR0FRUUJnT1UzCitBZ1FCTUhzR0ExVWRId1IwTUhJd09LQTJvRFNHTW1oMGRIQTZMeTlqY213dVkyOXRiMlJ2WTJFdVkyOXRMMEZrCitaRlJ5ZFhOMFJYaDBaWEp1WVd4RFFWSnZiM1F1WTNKc01EYWdOS0F5aGpCb2RIUndPaTh2WTNKc0xtTnZiVzlrCitieTV1WlhRdlFXUmtWSEoxYzNSRmVIUmxjbTVoYkVOQlVtOXZkQzVqY213d2dZQUdDQ3NHQVFVRkJ3RUJCSFF3CitjakE0QmdnckJnRUZCUWN3QW9Zc2FIUjBjRG92TDJOeWRDNWpiMjF2Wkc5allTNWpiMjB2UVdSa1ZISjFjM1JWCitWRTVUUjBORFFTNWpjblF3TmdZSUt3WUJCUVVITUFLR0ttaDBkSEE2THk5amNuUXVZMjl0YjJSdkxtNWxkQzlCCitaR1JVY25WemRGVlVUbE5IUTBOQkxtTnlkREFSQmdsZ2hrZ0JodmhDQVFFRUJBTUNBZ1F3RFFZSktvWklodmNOCitBUUVGQlFBRGdnRUJBSzJ6RXpzK2pjSXJWSzlvRGtkRFpOdmh1QllUZENmcHhmRnMrT0F1alcwYklmSkF5MjMyCitldVZzbkptNnUvK09ycUt1ZEQydGFkMkJiZWpMTFhoTVpWaWFDbUs3RDluclhIeDR0ZTVFUDhyTDE5U1VWcUxZCisxcFRudjVkaE5nRWd2QTduNWxJekRTWXM3eVJMc3I3SEpzWVByNlNlWVN1Wml6eVgxU056N29vSjMyL0YzWDk4CitSQjBNbGMvRTBPeU9ya1E5L3k1SXJucG5hU29yYThDblVyVjVYTk9nK2t5Q3o5ZWRDeXg0RDV3WFljd1pQVld6Cis4YURxcXVFU3JlelB5anRmaTRXUk80cy9WRDNITFp2T3h6TXJXQVZZQ0RHOUZ4YU9oRjBRR3V1RzFGN0YzR0tWCit2NnByTnlDbDAxNmtSbDJqMVVUK2E3Z0xkOGZBMjVBNEM5RT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKyAyIHM6L0M9U0UvTz1BZGRUcnVzdCBBQi9PVT1BZGRUcnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yay9DTj1BZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290CisgICBpOi9DPVVTL1NUPVVUL0w9U2FsdCBMYWtlIENpdHkvTz1UaGUgVVNFUlRSVVNUIE5ldHdvcmsvT1U9aHR0cDovL3d3dy51c2VydHJ1c3QuY29tL0NOPVVUTiAtIERBVEFDb3JwIFNHQworLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFWmpDQ0EwNmdBd0lCQWdJUVVTWUtreHppZjV6RHBWOTU0SEt1Z2pBTkJna3Foa2lHOXcwQkFRVUZBRENCCitrekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFsVlVNUmN3RlFZRFZRUUhFdzVUWVd4MElFeGhhMlVnCitRMmwwZVRFZU1Cd0dBMVVFQ2hNVlZHaGxJRlZUUlZKVVVsVlRWQ0JPWlhSM2IzSnJNU0V3SHdZRFZRUUxFeGhvCitkSFJ3T2k4dmQzZDNMblZ6WlhKMGNuVnpkQzVqYjIweEd6QVpCZ05WQkFNVEVsVlVUaUF0SUVSQlZFRkRiM0p3CitJRk5IUXpBZUZ3MHdOVEEyTURjd09EQTVNVEJhRncweE9UQTJNalF4T1RBMk16QmFNRzh4Q3pBSkJnTlZCQVlUCitBbE5GTVJRd0VnWURWUVFLRXd0QlpHUlVjblZ6ZENCQlFqRW1NQ1FHQTFVRUN4TWRRV1JrVkhKMWMzUWdSWGgwCitaWEp1WVd3Z1ZGUlFJRTVsZEhkdmNtc3hJakFnQmdOVkJBTVRHVUZrWkZSeWRYTjBJRVY0ZEdWeWJtRnNJRU5CCitJRkp2YjNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMzOXhvejV2SUFCQzA1Cis0RTViN1IrOGJBL050Zm9qdHM3ZW14RXpsNlFwVEgyVG43MUt2SlB0QXhyamo4L2xiVkJhMXBjcGxGcUFzRWw2CisyeTZWL2JqS3Z6YzRMUjQra1VHdGNGYkg4RTgvNkRLZWRNcklrRlRweGw4UGVKMmFRRHdPckdHcVhoU1Bub2VoCithbERjMTVwT3J3V3pwbkdVbkhHelVHQUt4eE9kT0FlR0FxanBxR2ttR0pDclRMQlBJNnM2VDRUWTM4NmY0V2x2Cit1OWRDMTJ0RTVNZXQ3bTFCWDNKYWNRZzNzM2xscEZtZ2xEZjNBQzhOd3BKeTJ0QTRjdHNVcUVYRVhTcDl0N1RXCit4TzZzelJORXQ4a3IzVU1BSmZwaHVXbHFXQ01SdDZjemoxWjFXZlhOS2RkR3R3b3JaYmJUUW04VnNyaDcrKy9wCitYVlBWTkZvbkFnTUJBQUdqZ2Rnd2dkVXdId1lEVlIwakJCZ3dGb0FVVXpMUnM4OS8rdUR4b0YyRlRwTFNua1VkCit0RTh3SFFZRFZSME9CQllFRksyOW1IbzB0Q2IzK3NRbVZPOER2ZUFreTFRYU1BNEdBMVVkRHdFQi93UUVBd0lCCitCakFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQkVHQ1dDR1NBR0crRUlCQVFRRUF3SUJBakFnQmdOVkhTVUVHVEFYCitCZ29yQmdFRUFZSTNDZ01EQmdsZ2hrZ0JodmhDQkFFd1BRWURWUjBmQkRZd05EQXlvRENnTG9Zc2FIUjBjRG92CitMMk55YkM1MWMyVnlkSEoxYzNRdVkyOXRMMVZVVGkxRVFWUkJRMjl5Y0ZOSFF5NWpjbXd3RFFZSktvWklodmNOCitBUUVGQlFBRGdnRUJBTWJ1VXhkb0ZMSlJJaDZRV0EyVS9iM3hjT1dHTGNNMk1ZOVVTRWJuTFFnM3ZHd0tZT0VPCityVkUwNEJLVDZiNjRxN2dtdE9tV1BTaVBybVFIL3VBQjdNWGprZXNZb1BGMWZ0c0s1cCtSMjYrdWRkOGprV2pkCitGd0JhUy85a2JIRHJBUnJRa05uSHB0WnQ5aFBrLzdYSjBoNHF5N0VsUXlaNDJUQ2JUZzBldm1udjMrcitMYlBNCisrYkRkdFJUS2tkU3l0YVg3QVJtalIzbWZuWXlWaHpUNEh6aVMyamFtRWZwcjYydnAzRVY0RlRrRzEwMUI1Q0hJCiszQytIMGJlL1NHQjFwV0xMSk40N1lhQXBJS2EreFd5Y3hPa0thU0x2a1RyNkpxL1JXMEduT3VMNE9BZENxOEZiCisrTTV0dWc4RVB6STByTndFS05kd01CUW1Cc1RrbTVqVnozZz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKyAzIHM6L0M9VVMvU1Q9VVQvTD1TYWx0IExha2UgQ2l0eS9PPVRoZSBVU0VSVFJVU1QgTmV0d29yay9PVT1odHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20vQ049VVROIC0gREFUQUNvcnAgU0dDCisgICBpOi9DPVVTL1NUPVVUL0w9U2FsdCBMYWtlIENpdHkvTz1UaGUgVVNFUlRSVVNUIE5ldHdvcmsvT1U9aHR0cDovL3d3dy51c2VydHJ1c3QuY29tL0NOPVVUTiAtIERBVEFDb3JwIFNHQworLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFWGpDQ0EwYWdBd0lCQWdJUVJMNE1pMUFBSWJRUjB5cG9CcW10YVRBTkJna3Foa2lHOXcwQkFRVUZBRENCCitrekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFsVlVNUmN3RlFZRFZRUUhFdzVUWVd4MElFeGhhMlVnCitRMmwwZVRFZU1Cd0dBMVVFQ2hNVlZHaGxJRlZUUlZKVVVsVlRWQ0JPWlhSM2IzSnJNU0V3SHdZRFZRUUxFeGhvCitkSFJ3T2k4dmQzZDNMblZ6WlhKMGNuVnpkQzVqYjIweEd6QVpCZ05WQkFNVEVsVlVUaUF0SUVSQlZFRkRiM0p3CitJRk5IUXpBZUZ3MDVPVEEyTWpReE9EVTNNakZhRncweE9UQTJNalF4T1RBMk16QmFNSUdUTVFzd0NRWURWUVFHCitFd0pWVXpFTE1Ba0dBMVVFQ0JNQ1ZWUXhGekFWQmdOVkJBY1REbE5oYkhRZ1RHRnJaU0JEYVhSNU1SNHdIQVlECitWUVFLRXhWVWFHVWdWVk5GVWxSU1ZWTlVJRTVsZEhkdmNtc3hJVEFmQmdOVkJBc1RHR2gwZEhBNkx5OTNkM2N1CitkWE5sY25SeWRYTjBMbU52YlRFYk1Ca0dBMVVFQXhNU1ZWUk9JQzBnUkVGVVFVTnZjbkFnVTBkRE1JSUJJakFOCitCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEzKzVZRUtJcmJsWEVqcjh1UmdubjRBZ1BMaXQ2CitFNVFidmZhMmdJNWxCWk1BSHJ5djRnK09HUTBTUit5c3JhUDZMbkQ0M203N1ZrSVZuaTVjN3lQZUlia0ZkaWNaCitEMC9XdzV5MHZwUVpZL0ttRVFyclUwaWN2dklwT3hib0dxQk1wc24wR0Zsb3dIRHlVd0RBWGxDQ3BWWnZOdmxLCis0RVNHb0UxTzFrZHVTVXJMWjllbXhBVzVqaDcwL1AvTjV6YmduQVZzc2pNaUZkQzA0TXdYd0xMQTlQNHlQeWtxCitsWHZZOHFkT0QxUjhvUTJBc3drRHdmOWMzVjZhUHJ5dXZFZUthcTV4eWgreEtyaGZRZ1VMN0VZdzBYSUx5dWxXCitiZlh2MzNpK1licXlwYTRFVEx5b3JHa1ZsNzN2NjdTTXZ6WDQxTVBSS0E1Y09wOXdHRE1nZDhTaXJ3SURBUUFCCitvNEdyTUlHb01Bc0dBMVVkRHdRRUF3SUJ4akFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlJUCitNdEd6ejMvNjRQR2dYWVZPa3RLZVJSMjBUekE5QmdOVkhSOEVOakEwTURLZ01LQXVoaXhvZEhSd09pOHZZM0pzCitMblZ6WlhKMGNuVnpkQzVqYjIwdlZWUk9MVVJCVkVGRGIzSndVMGRETG1OeWJEQXFCZ05WSFNVRUl6QWhCZ2dyCitCZ0VGQlFjREFRWUtLd1lCQkFHQ053b0RBd1lKWUlaSUFZYjRRZ1FCTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCCitBUUFuTlpjQWlvc292Y1l6TUI0cC9PTDMxWmpVUUx0Z3lyK3JGeXdKTm45UStrSGNycFk2Q2lNK2lWbkpvd2Z0CitHemV0L0h5K1VVbGEzam9LVkFnV1JjS1pzWWZOakdqZ2FRUHB4RTZZc2p1TUZyTU9vQXlZVUp1VHFYQUp5Q3lqCitqOThDNU9CeE92RzBJM0tncWdIZjM1ZytGRkNnTVNhOUtPbGFNQ1oxK1h0Z0hJM3p6VkFtYlFRbm10L1ZEVVZICitLV3NzNW5iWnFTbDlNdDNKTmp5OXJqWHhFWjRkdTVBL0VrZE9qdGQrRDJKekhWSW1PQndZU2Ywd2RKckU1U0l2CisyTUNON1pGNlRBQ1BjbjlkMnQwYmkwVnI1OTFwbDZqRlZrd1BEUGFmZXBFMzlwZUM0TjF4YWY5MlAyQk5QTS8zCittZm5HVi9USlZUbDR1aXg1eWFhSUsvUUkKIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weSBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQppbmRleCA3ZTIxNGViLi41NDZiNDg2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKKysrIGIvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgb2JqZWN0ID0gc3VidHlwZShvYmplY3QpCiAgICAgICAgICAgICByZWFscmVzdWx0ID0gZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpKCphcmdzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG9iamVjdCBpcyBub3QgcmVhbHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmplY3QgaXMgbm90IHJlYWxyZXN1bHQpCiAKICAgICAjIGNoZWNrIHRoYXQgb2JqZWN0Lm1ldGhvZCgqYXJncykgcmFpc2VzIGV4YwogICAgIGRlZiBjaGVja3JhaXNlcyhzZWxmLCBleGMsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgpAQCAtMTg1LDYgKzE4NSw5IEBACiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJycsICdmaW5kJywgJ3h4JywgMSwgMSkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnJywgJ2ZpbmQnLCAneHgnLCBzeXMubWF4aW50LCAwKQogCisgICAgICAgICMgaXNzdWUgNzQ1OAorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdhYicsICdmaW5kJywgJ3h4eCcsIHN5cy5tYXhzaXplICsgMSwgMCkKKwogICAgICAgICAjIEZvciBhIHZhcmlldHkgb2YgY29tYmluYXRpb25zLAogICAgICAgICAjICAgIHZlcmlmeSB0aGF0IHN0ci5maW5kKCkgbWF0Y2hlcyBfX2NvbnRhaW5zX18KICAgICAgICAgIyAgICBhbmQgdGhhdCB0aGUgZm91bmQgc3Vic3RyaW5nIGlzIHJlYWxseSBhdCB0aGF0IGxvY2F0aW9uCkBAIC0yMDUsOCArMjA4LDcgQEAKICAgICAgICAgICAgICAgICBsb2MgPSBpLmZpbmQoaikKICAgICAgICAgICAgICAgICByMSA9IChsb2MgIT0gLTEpCiAgICAgICAgICAgICAgICAgcjIgPSBqIGluIGkKLSAgICAgICAgICAgICAgICBpZiByMSAhPSByMjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIpCiAgICAgICAgICAgICAgICAgaWYgbG9jICE9IC0xOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlbbG9jOmxvYytsZW4oaildLCBqKQogCkBAIC0yMzAsNiArMjMyLDMzIEBACiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncmZpbmQnKQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JmaW5kJywgNDIpCiAKKyAgICAgICAgIyBGb3IgYSB2YXJpZXR5IG9mIGNvbWJpbmF0aW9ucywKKyAgICAgICAgIyAgICB2ZXJpZnkgdGhhdCBzdHIucmZpbmQoKSBtYXRjaGVzIF9fY29udGFpbnNfXworICAgICAgICAjICAgIGFuZCB0aGF0IHRoZSBmb3VuZCBzdWJzdHJpbmcgaXMgcmVhbGx5IGF0IHRoYXQgbG9jYXRpb24KKyAgICAgICAgY2hhcnNldCA9IFsnJywgJ2EnLCAnYicsICdjJ10KKyAgICAgICAgZGlnaXRzID0gNQorICAgICAgICBiYXNlID0gbGVuKGNoYXJzZXQpCisgICAgICAgIHRlc3RzdHJpbmdzID0gc2V0KCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGJhc2UgKiogZGlnaXRzKToKKyAgICAgICAgICAgIGVudHJ5ID0gW10KKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZShkaWdpdHMpOgorICAgICAgICAgICAgICAgIGksIG0gPSBkaXZtb2QoaSwgYmFzZSkKKyAgICAgICAgICAgICAgICBlbnRyeS5hcHBlbmQoY2hhcnNldFttXSkKKyAgICAgICAgICAgIHRlc3RzdHJpbmdzLmFkZCgnJy5qb2luKGVudHJ5KSkKKyAgICAgICAgdGVzdHN0cmluZ3MgPSBsaXN0KHRlc3RzdHJpbmdzKQorICAgICAgICBmb3IgaSBpbiB0ZXN0c3RyaW5nczoKKyAgICAgICAgICAgIGkgPSBzZWxmLmZpeHR5cGUoaSkKKyAgICAgICAgICAgIGZvciBqIGluIHRlc3RzdHJpbmdzOgorICAgICAgICAgICAgICAgIGxvYyA9IGkucmZpbmQoaikKKyAgICAgICAgICAgICAgICByMSA9IChsb2MgIT0gLTEpCisgICAgICAgICAgICAgICAgcjIgPSBqIGluIGkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCByMikKKyAgICAgICAgICAgICAgICBpZiBsb2MgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaVtsb2M6bG9jK2xlbihqKV0sIHNlbGYuZml4dHlwZShqKSkKKworICAgICAgICAjIGlzc3VlIDc0NTgKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYWInLCAncmZpbmQnLCAneHh4Jywgc3lzLm1heHNpemUgKyAxLCAwKQorCiAgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJycpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJ2RlZicpCkBAIC02ODYsNyArNzE1LDcgQEAKICAgICAgICAgRVEoImJvYm9iWGJvYm9iIiwgImJvYm9ib2JYYm9ib2JvYiIsICJyZXBsYWNlIiwgImJvYm9iIiwgImJvYiIpCiAgICAgICAgIEVRKCJCT0JPQk9CIiwgIkJPQk9CT0IiLCAicmVwbGFjZSIsICJib2IiLCAiYm9iYnkiKQogCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIGJhID0gYnVmZmVyKCdhJykKICAgICAgICAgICAgIGJiID0gYnVmZmVyKCdiJykKICAgICAgICAgRVEoImJiYyIsICJhYmMiLCAicmVwbGFjZSIsIGJhLCBiYikKQEAgLTEwOTAsMTUgKzExMTksOCBAQAogICAgICAgICAgICAgZm9ybWF0ID0gJyUlLiVpZicgJSBwcmVjCiAgICAgICAgICAgICB2YWx1ZSA9IDAuMDEKICAgICAgICAgICAgIGZvciB4IGluIHhyYW5nZSg2MCk6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDMuMTQxNTkyNjU1IC8gMy4wICogMTAuMAotICAgICAgICAgICAgICAgICMgVGhlIGZvcm1hdGZsb2F0KCkgY29kZSBpbiBzdHJpbmdvYmplY3QuYyBhbmQKLSAgICAgICAgICAgICAgICAjIHVuaWNvZGVvYmplY3QuYyB1c2VzIGEgMTIwIGJ5dGUgYnVmZmVyIGFuZCBzd2l0Y2hlcyBmcm9tCi0gICAgICAgICAgICAgICAgIyAnZicgZm9ybWF0dGluZyB0byAnZycgYXQgcHJlY2lzaW9uIDUwLCBzbyB3ZSBleHBlY3QKLSAgICAgICAgICAgICAgICAjIE92ZXJmbG93RXJyb3JzIGZvciB0aGUgcmFuZ2VzIHggPCA1MCBhbmQgcHJlYyA+PSA2Ny4KLSAgICAgICAgICAgICAgICBpZiB4IDwgNTAgYW5kIHByZWMgPj0gNjc6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoT3ZlcmZsb3dFcnJvciwgZm9ybWF0LCAiX19tb2RfXyIsIHZhbHVlKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tjYWxsKGZvcm1hdCwgIl9fbW9kX18iLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogMy4xNDE1OTI2NTM1OSAvIDMuMCAqIDEwLjAKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrY2FsbChmb3JtYXQsICJfX21vZF9fIiwgdmFsdWUpCiAKICAgICBkZWYgdGVzdF9pbnBsYWNlX3Jld3JpdGVzKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgc3RyaW5ncyBkb24ndCBjb3B5IGFuZCBtb2RpZnkgY2FjaGVkIHNpbmdsZS1jaGFyYWN0ZXIgc3RyaW5ncwpAQCAtMTIyMSwzNCArMTI0MywzNCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBzMSA9IHN1YmNsYXNzKCJhYmNkIikKICAgICAgICAgczIgPSB0KCkuam9pbihbczFdKQotICAgICAgICBzZWxmLmFzc2VydF8oczEgaXMgbm90IHMyKQotICAgICAgICBzZWxmLmFzc2VydF8odHlwZShzMikgaXMgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIG5vdCBzMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoczIpIGlzIHQpCiAKICAgICAgICAgczEgPSB0KCJhYmNkIikKICAgICAgICAgczIgPSB0KCkuam9pbihbczFdKQotICAgICAgICBzZWxmLmFzc2VydF8oczEgaXMgczIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSBpcyBzMikKIAogICAgICAgICAjIFNob3VsZCBhbHNvIHRlc3QgbWl4ZWQtdHlwZSBqb2luLgogICAgICAgICBpZiB0IGlzIHVuaWNvZGU6CiAgICAgICAgICAgICBzMSA9IHN1YmNsYXNzKCJhYmNkIikKICAgICAgICAgICAgIHMyID0gIiIuam9pbihbczFdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHMxIGlzIG5vdCBzMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHMyKSBpcyB0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIG5vdCBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyB0KQogCiAgICAgICAgICAgICBzMSA9IHQoImFiY2QiKQogICAgICAgICAgICAgczIgPSAiIi5qb2luKFtzMV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oczEgaXMgczIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczEgaXMgczIpCiAKICAgICAgICAgZWxpZiB0IGlzIHN0cjoKICAgICAgICAgICAgIHMxID0gc3ViY2xhc3MoImFiY2QiKQogICAgICAgICAgICAgczIgPSB1IiIuam9pbihbczFdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHMxIGlzIG5vdCBzMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHMyKSBpcyB1bmljb2RlKSAjIHByb21vdGVzIQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIG5vdCBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyB1bmljb2RlKSAjIHByb21vdGVzIQogCiAgICAgICAgICAgICBzMSA9IHQoImFiY2QiKQogICAgICAgICAgICAgczIgPSB1IiIuam9pbihbczFdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHMxIGlzIG5vdCBzMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHMyKSBpcyB1bmljb2RlKSAjIHByb21vdGVzIQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIG5vdCBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyB1bmljb2RlKSAjIHByb21vdGVzIQogCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoInVuZXhwZWN0ZWQgdHlwZSBmb3IgTWl4aW5TdHJVbmljb2RlVGVzdCAlciIgJSB0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvc2lnY2hpbGRfaWdub3JlLnB5IGIvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvc2lnY2hpbGRfaWdub3JlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzJhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9zaWdjaGlsZF9pZ25vcmUucHkKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgc2lnbmFsLCBzdWJwcm9jZXNzLCBzeXMKKyMgT24gTGludXggdGhpcyBjYXVzZXMgb3Mud2FpdHBpZCB0byBmYWlsIHdpdGggT1NFcnJvciBhcyB0aGUgT1MgaGFzIGFscmVhZHkKKyMgcmVhcGVkIG91ciBjaGlsZCBwcm9jZXNzLiAgVGhlIHdhaXQoKSBwYXNzaW5nIHRoZSBPU0Vycm9yIG9uIHRvIHRoZSBjYWxsZXIKKyMgYW5kIGNhdXNpbmcgdXMgdG8gZXhpdCB3aXRoIGFuIGVycm9yIGlzIHdoYXQgd2UgYXJlIHRlc3RpbmcgYWdhaW5zdC4KK3NpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNpZ25hbC5TSUdfSUdOKQorc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsICdwcmludCgiYWxiYXRyb3NzIiknXSkud2FpdCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X1NpbXBsZUhUVFBTZXJ2ZXIucHkgYi9MaWIvdGVzdC90ZXN0X1NpbXBsZUhUVFBTZXJ2ZXIucHkKaW5kZXggOWQzYWQxNi4uNjZlYzg1MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9TaW1wbGVIVFRQU2VydmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfU2ltcGxlSFRUUFNlcnZlci5weQpAQCAtMjEsMTcgKzIxLDE3IEBACiAKICAgICBkZWYgdGVzdF9xdWVyeUFyZ3VtZW50cyAoc2VsZik6CiAgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGggKCcvZmlsZW5hbWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCiAgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGggKCcvZmlsZW5hbWU/Zm9vPWJhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwgKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKICAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCAoJy9maWxlbmFtZT9hPWImc3BhbT1lZ2dzI3pvdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwgKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKIAogICAgIGRlZiB0ZXN0X3N0YXJ0V2l0aERvdWJsZVNsYXNoIChzZWxmKToKICAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCAoJy8vZmlsZW5hbWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCiAgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGggKCcvL2ZpbGVuYW1lP2Zvbz1iYXInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9TdHJpbmdJTy5weSBiL0xpYi90ZXN0L3Rlc3RfU3RyaW5nSU8ucHkKaW5kZXggNDdhMDcxNS4uNDc3NGM2ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9TdHJpbmdJTy5weQorKysgYi9MaWIvdGVzdC90ZXN0X1N0cmluZ0lPLnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAKICAgICBkZWYgdGVzdF9pdGVyYXRvcihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgZXEoaXRlcihzZWxmLl9mcCksIHNlbGYuX2ZwKQogICAgICAgICAjIERvZXMgdGhpcyBvYmplY3Qgc3VwcG9ydCB0aGUgaXRlcmF0aW9uIHByb3RvY29sPwogICAgICAgICB1bmxlc3MoaGFzYXR0cihzZWxmLl9mcCwgJ19faXRlcl9fJykpCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFN0cmluZ0lPLCBUZXN0Y1N0cmluZ0lPKQotICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCgiYnVmZmVyLi4gbm90IHN1cHBvcnRlZCIsCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygoImJ1ZmZlci4uIG5vdCBzdXBwb3J0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEJ1ZmZlclN0cmluZ0lPLCBUZXN0QnVmZmVyY1N0cmluZ0lPKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkgYi9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKaW5kZXggMmE3YmM2My4uMmM1ZGJlZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQpAQCAtNCw3ICs0LDEyIEBACiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCB3YXJuaW5ncworCisjIFNldHVwIGJzZGRiIHdhcm5pbmdzCit0cnk6CisgICAgYnNkZGIgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2JzZGRiJywgZGVwcmVjYXRlZD1UcnVlKQorZXhjZXB0IHVuaXR0ZXN0LlNraXBUZXN0OgorICAgIHBhc3MKIAogCiBjbGFzcyBOb0FsbChSdW50aW1lRXJyb3IpOgpAQCAtMTgsOSArMjMsOCBAQAogCiAgICAgZGVmIGNoZWNrX2FsbChzZWxmLCBtb2RuYW1lKToKICAgICAgICAgbmFtZXMgPSB7fQotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4qIChtb2R1bGV8cGFja2FnZSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCIuKiAobW9kdWxlfHBhY2thZ2UpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWlldD1UcnVlKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBleGVjICJpbXBvcnQgJXMiICUgbW9kbmFtZSBpbiBuYW1lcwogICAgICAgICAgICAgZXhjZXB0OgpAQCAtMzUsNyArMzksNyBAQAogICAgICAgICAgICAgZXhlYyAiZnJvbSAlcyBpbXBvcnQgKiIgJSBtb2RuYW1lIGluIG5hbWVzCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICMgSW5jbHVkZSB0aGUgbW9kdWxlIG5hbWUgaW4gdGhlIGV4Y2VwdGlvbiBzdHJpbmcKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiX19hbGxfXyBmYWlsdXJlIGluIHswfTogezF9OiB7Mn0iLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiX19hbGxfXyBmYWlsdXJlIGluIHt9OiB7fToge30iLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICBtb2RuYW1lLCBlLl9fY2xhc3NfXy5fX25hbWVfXywgZSkpCiAgICAgICAgIGlmICJfX2J1aWx0aW5zX18iIGluIG5hbWVzOgogICAgICAgICAgICAgZGVsIG5hbWVzWyJfX2J1aWx0aW5zX18iXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5IGIvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5CmluZGV4IDUwYTJjNzQuLjFkOGY4ZTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX19mdXR1cmVfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X19fZnV0dXJlX18ucHkKQEAgLTE1LDcgKzE1LDcgQEAKICAgICAgICAgZm9yIG5hbWUgaW4gZGlyKF9fZnV0dXJlX18pOgogICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihfX2Z1dHVyZV9fLCBuYW1lLCBOb25lKQogICAgICAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKG9iaiwgX19mdXR1cmVfXy5fRmVhdHVyZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgbmFtZSBpbiBnaXZlbl9mZWF0dXJlX25hbWVzLAogICAgICAgICAgICAgICAgICAgICAiJXIgc2hvdWxkIGhhdmUgYmVlbiBpbiBhbGxfZmVhdHVyZV9uYW1lcyIgJSBuYW1lCiAgICAgICAgICAgICAgICAgKQpAQCAtMzAsNyArMzAsNyBAQAogICAgICAgICAgICAgb3B0aW9uYWwgPSB2YWx1ZS5nZXRPcHRpb25hbFJlbGVhc2UoKQogICAgICAgICAgICAgbWFuZGF0b3J5ID0gdmFsdWUuZ2V0TWFuZGF0b3J5UmVsZWFzZSgpCiAKLSAgICAgICAgICAgIGEgPSBzZWxmLmFzc2VydF8KKyAgICAgICAgICAgIGEgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgICAgIGUgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgICAgICBkZWYgY2hlY2sodCwgbmFtZSk6CiAgICAgICAgICAgICAgICAgYShpc2luc3RhbmNlKHQsIHR1cGxlKSwgIiVzIGlzbid0IHR1cGxlIiAlIG5hbWUpCkBAIC01Myw5ICs1MywxMiBAQAogCiAgICAgICAgICAgICBhKGhhc2F0dHIodmFsdWUsICJjb21waWxlcl9mbGFnIiksCiAgICAgICAgICAgICAgICAgICAgImZlYXR1cmUgaXMgbWlzc2luZyBhIC5jb21waWxlcl9mbGFnIGF0dHIiKQorICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNvbXBpbGUgYWNjZXB0cyB0aGUgZmxhZy4KKyAgICAgICAgICAgIGNvbXBpbGUoIiIsICI8dGVzdD4iLCAiZXhlYyIsIHZhbHVlLmNvbXBpbGVyX2ZsYWcpCiAgICAgICAgICAgICBhKGlzaW5zdGFuY2UoZ2V0YXR0cih2YWx1ZSwgImNvbXBpbGVyX2ZsYWciKSwgaW50KSwKICAgICAgICAgICAgICAgICAgICAiLmNvbXBpbGVyX2ZsYWcgaXNuJ3QgaW50IikKIAorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChGdXR1cmVUZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X19sb2NhbGUucHkgYi9MaWIvdGVzdC90ZXN0X19sb2NhbGUucHkKaW5kZXggNjlmYzYyNS4uYWZjYjkyNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9fbG9jYWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfX2xvY2FsZS5weQpAQCAtMSwxMyArMSwxOCBAQAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdAotZnJvbSBfbG9jYWxlIGltcG9ydCAoc2V0bG9jYWxlLCBMQ19OVU1FUklDLCBSQURJWENIQVIsIFRIT1VTRVAsIG5sX2xhbmdpbmZvLAotICAgICAgICAgICAgICAgICAgICBsb2NhbGVjb252LCBFcnJvcikKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSBfbG9jYWxlIGltcG9ydCAoc2V0bG9jYWxlLCBMQ19OVU1FUklDLCBsb2NhbGVjb252LCBFcnJvcikKK3RyeToKKyAgICBmcm9tIF9sb2NhbGUgaW1wb3J0IChSQURJWENIQVIsIFRIT1VTRVAsIG5sX2xhbmdpbmZvKQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIG5sX2xhbmdpbmZvID0gTm9uZQorCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKIGZyb20gcGxhdGZvcm0gaW1wb3J0IHVuYW1lCiAKIGlmIHVuYW1lKClbMF0gPT0gIkRhcndpbiI6CiAgICAgbWFqLCBtaW4sIG1pYyA9IFtpbnQocGFydCkgZm9yIHBhcnQgaW4gdW5hbWUoKVsyXS5zcGxpdCgiLiIpXQogICAgIGlmIChtYWosIG1pbiwgbWljKSA8ICg4LCAwLCAwKToKLSAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQoImxvY2FsZSBzdXBwb3J0IGJyb2tlbiBmb3IgT1MgWCA8IDEwLjQiKQorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibG9jYWxlIHN1cHBvcnQgYnJva2VuIGZvciBPUyBYIDwgMTAuNCIpCiAKIGNhbmRpZGF0ZV9sb2NhbGVzID0gWydlc19VWScsICdmcl9GUicsICdmaV9GSScsICdlc19DTycsICdwdF9QVCcsICdpdF9JVCcsCiAgICAgJ2V0X0VFJywgJ2VzX1BZJywgJ25vX05PJywgJ25sX05MJywgJ2x2X0xWJywgJ2VsX0dSJywgJ2JlX0JZJywgJ2ZyX0JFJywKQEAgLTIwLDYgKzI1LDEzIEBACiAgICAgJ2V1X0VTJywgJ3ZpX1ZOJywgJ2FmX1pBJywgJ25iX05PJywgJ2VuX0RLJywgJ3RnX1RKJywgJ2VuX1VTJywKICAgICAnZXNfRVMuSVNPODg1OS0xJywgJ2ZyX0ZSLklTTzg4NTktMTUnLCAncnVfUlUuS09JOC1SJywgJ2tvX0tSLmV1Y0tSJ10KIAorIyBXb3JrYXJvdW5kIGZvciBNU1ZDNihkZWJ1ZykgY3Jhc2ggYnVnCitpZiAiTVNDIHYuMTIwMCIgaW4gc3lzLnZlcnNpb246CisgICAgZGVmIGFjY2VwdChsb2MpOgorICAgICAgICBhID0gbG9jLnNwbGl0KCIuIikKKyAgICAgICAgcmV0dXJuIG5vdChsZW4oYSkgPT0gMiBhbmQgbGVuKGFbLTFdKSA+PSA5KQorICAgIGNhbmRpZGF0ZV9sb2NhbGVzID0gW2xvYyBmb3IgbG9jIGluIGNhbmRpZGF0ZV9sb2NhbGVzIGlmIGFjY2VwdChsb2MpXQorCiAjIExpc3Qga25vd24gbG9jYWxlIHZhbHVlcyB0byB0ZXN0IGFnYWluc3Qgd2hlbiBhdmFpbGFibGUuCiAjIERpY3QgZm9ybWF0dGVkIGFzIGBgPGxvY2FsZT4gOiAoPGRlY2ltYWxfcG9pbnQ+LCA8dGhvdXNhbmRzX3NlcD4pYGAuICBJZiBhCiAjIHZhbHVlIGlzIG5vdCBrbm93biwgdXNlICcnIC4KQEAgLTQ3LDEyICs1OSwxMyBAQAogICAgICAgICBrbm93bl92YWx1ZSA9IGtub3duX251bWVyaWNzLmdldCh1c2VkX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnJywgJycpKVtkYXRhX3R5cGUgPT0gJ3Rob3VzYW5kc19zZXAnXQogICAgICAgICBpZiBrbm93bl92YWx1ZSBhbmQgY2FsY192YWx1ZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNhbGNfdmFsdWUsIGtub3duX3ZhbHVlLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxjX3ZhbHVlLCBrbm93bl92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sY19udW1lcmljX2Vycl9tc2cgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjX3ZhbHVlLCBrbm93bl92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGNfdHlwZSwgZGF0YV90eXBlLCBzZXRfbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9sb2NhbGUpKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MobmxfbGFuZ2luZm8sICJubF9sYW5naW5mbyBpcyBub3QgYXZhaWxhYmxlIikKICAgICBkZWYgdGVzdF9sY19udW1lcmljX25sX2xhbmdpbmZvKHNlbGYpOgogICAgICAgICAjIFRlc3QgbmxfbGFuZ2luZm8gYWdhaW5zdCBrbm93biB2YWx1ZXMKICAgICAgICAgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlczoKQEAgLTcxLDEwICs4NCwxMCBAQAogICAgICAgICAgICAgICAgIHNldGxvY2FsZShMQ19OVU1FUklDLCBsb2MpCiAgICAgICAgICAgICBleGNlcHQgRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGZvciBsaSwgbGMgaW4gKChSQURJWENIQVIsICJkZWNpbWFsX3BvaW50IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRIT1VTRVAsICJ0aG91c2FuZHNfc2VwIikpOgorICAgICAgICAgICAgZm9yIGxjIGluICgiZGVjaW1hbF9wb2ludCIsICJ0aG91c2FuZHNfc2VwIik6CiAgICAgICAgICAgICAgICAgc2VsZi5udW1lcmljX3Rlc3RlcignbG9jYWxlY29udicsIGxvY2FsZWNvbnYoKVtsY10sIGxjLCBsb2MpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhubF9sYW5naW5mbywgIm5sX2xhbmdpbmZvIGlzIG5vdCBhdmFpbGFibGUiKQogICAgIGRlZiB0ZXN0X2xjX251bWVyaWNfYmFzaWMoc2VsZik6CiAgICAgICAgICMgVGVzdCBubF9sYW5naW5mbyBhZ2FpbnN0IGxvY2FsZWNvbnYKICAgICAgICAgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlczoKQEAgLTkwLDcgKzEwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNldF9sb2NhbGUgPSBzZXRsb2NhbGUoTENfTlVNRVJJQykKICAgICAgICAgICAgICAgICBleGNlcHQgRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHNldF9sb2NhbGUgPSAiPG5vdCBhYmxlIHRvIGRldGVybWluZT4iCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmxfcmFkaXhjaGFyLCBsaV9yYWRpeGNoYXIsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChubF9yYWRpeGNoYXIsIGxpX3JhZGl4Y2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIChubF9sYW5naW5mbykgIT0gJXMgKGxvY2FsZWNvbnYpICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzZXQgdG8gJXMsIHVzaW5nICVzKSIgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubF9yYWRpeGNoYXIsIGxpX3JhZGl4Y2hhciwKQEAgLTEwOSw5ICsxMjIsOSBAQAogICAgICAgICAgICAgaWYgbG9jID09ICdldV9FUycgYW5kIGxvY2FsZWNvbnYoKVsnZGVjaW1hbF9wb2ludCddID09ICInICI6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW50KGV2YWwoJzMuMTQnKSAqIDEwMCksIDMxNCwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGV2YWwoJzMuMTQnKSAqIDEwMCksIDMxNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIGV2YWwoJzMuMTQnKSBmYWlsZWQgZm9yICVzIiAlIGxvYykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGludChmbG9hdCgnMy4xNCcpICogMTAwKSwgMzE0LAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoJzMuMTQnKSAqIDEwMCksIDMxNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIGZsb2F0KCczLjE0JykgZmFpbGVkIGZvciAlcyIgJSBsb2MpCiAgICAgICAgICAgICBpZiBsb2NhbGVjb252KClbJ2RlY2ltYWxfcG9pbnQnXSAhPSAnLic6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FiYy5weSBiL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CmluZGV4IDNlMDk1NWYuLjZhOGMzYTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CkBAIC0zLDcgKzMsNyBAQAogCiAiIiJVbml0IHRlc3RzIGZvciBhYmMucHkuIiIiCiAKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0LCB3ZWFrcmVmCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiBpbXBvcnQgYWJjCkBAIC0xNSwxNiArMTUsMTYgQEAKICAgICBkZWYgdGVzdF9hYnN0cmFjdG1ldGhvZF9iYXNpY3Moc2VsZik6CiAgICAgICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICAgICAgZGVmIGZvbyhzZWxmKTogcGFzcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2lzYWJzdHJhY3RtZXRob2RfXywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvby5fX2lzYWJzdHJhY3RtZXRob2RfXykKICAgICAgICAgZGVmIGJhcihzZWxmKTogcGFzcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2F0dHIoYmFyLCAiX19pc2Fic3RyYWN0bWV0aG9kX18iKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihiYXIsICJfX2lzYWJzdHJhY3RtZXRob2RfXyIpKQogCiAgICAgZGVmIHRlc3RfYWJzdHJhY3Rwcm9wZXJ0eV9iYXNpY3Moc2VsZik6CiAgICAgICAgIEBhYmMuYWJzdHJhY3Rwcm9wZXJ0eQogICAgICAgICBkZWYgZm9vKHNlbGYpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fKQogICAgICAgICBkZWYgYmFyKHNlbGYpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihiYXIsICJfX2lzYWJzdHJhY3RtZXRob2RfXyIpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGJhciwgIl9faXNhYnN0cmFjdG1ldGhvZF9fIikpCiAKICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgICAgICAgICAgICAgZGVmIGJhcihzZWxmKTogcGFzcyAgIyBjb25jcmV0ZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fYWJzdHJhY3RtZXRob2RzX18sIHNldChbImZvbyJdKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQykgICMgYmVjYXVzZSBmb28gaXMgYWJzdHJhY3QKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2Fic3RyYWN0KEMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzYWJzdHJhY3QoQykpCiAgICAgICAgICAgICBjbGFzcyBEKEMpOgogICAgICAgICAgICAgICAgIGRlZiBiYXIoc2VsZik6IHBhc3MgICMgY29uY3JldGUgb3ZlcnJpZGUgb2YgY29uY3JldGUKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5fX2Fic3RyYWN0bWV0aG9kc19fLCBzZXQoWyJmb28iXSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEQpICAjIGJlY2F1c2UgZm9vIGlzIHN0aWxsIGFic3RyYWN0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNhYnN0cmFjdChEKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2Fic3RyYWN0KEQpKQogICAgICAgICAgICAgY2xhc3MgRShEKToKICAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOiBwYXNzCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUuX19hYnN0cmFjdG1ldGhvZHNfXywgc2V0KCkpCiAgICAgICAgICAgICBFKCkgICMgbm93IGZvbyBpcyBjb25jcmV0ZSwgdG9vCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc2Fic3RyYWN0KEUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2Fic3RyYWN0KEUpKQogICAgICAgICAgICAgY2xhc3MgRihFKToKICAgICAgICAgICAgICAgICBAYWJzdHJhY3R0aGluZwogICAgICAgICAgICAgICAgIGRlZiBiYXIoc2VsZik6IHBhc3MgICMgYWJzdHJhY3Qgb3ZlcnJpZGUgb2YgY29uY3JldGUKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRi5fX2Fic3RyYWN0bWV0aG9kc19fLCBzZXQoWyJiYXIiXSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYpICAjIGJlY2F1c2UgYmFyIGlzIGFic3RyYWN0IG5vdwotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzYWJzdHJhY3QoRikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNhYnN0cmFjdChGKSkKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzX29sZHN0eWxlX2NsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBBOgpAQCAtODcsMjIgKzg3LDIyIEBACiAgICAgICAgIGNsYXNzIEIob2JqZWN0KToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYiA9IEIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoQiwgQSksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoQiwgKEEsKSksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoYiwgQSksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoYiwgKEEsKSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQiwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhCLCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGIsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShiLCAoQSwpKQogICAgICAgICBBLnJlZ2lzdGVyKEIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhCLCBBKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKEIsIChBLCkpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoYiwgQSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShiLCAoQSwpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQiwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEIsIChBLCkpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYiwgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGIsIChBLCkpCiAgICAgICAgIGNsYXNzIEMoQik6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGMgPSBDKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKEMsIEEpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoQywgKEEsKSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShjLCBBKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKGMsIChBLCkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgKEEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCBBKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgKEEsKSkKIAogICAgIGRlZiB0ZXN0X2lzaW5zdGFuY2VfaW52YWxpZGF0aW9uKHNlbGYpOgogICAgICAgICBjbGFzcyBBOgpAQCAtMTEwLDI3ICsxMTAsMjcgQEAKICAgICAgICAgY2xhc3MgQihvYmplY3QpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBiID0gQigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShiLCBBKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShiLCAoQSwpKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShiLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKGIsIChBLCkpKQogICAgICAgICBBLnJlZ2lzdGVyKEIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShiLCBBKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKGIsIChBLCkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYiwgKEEsKSkpCiAKICAgICBkZWYgdGVzdF9yZWdpc3RyYXRpb25fYnVpbHRpbnMoc2VsZik6CiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKICAgICAgICAgQS5yZWdpc3RlcihpbnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSg0MiwgQSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSg0MiwgKEEsKSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhpbnQsIEEpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoaW50LCAoQSwpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKDQyLCBBKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoNDIsIChBLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGludCwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGludCwgKEEsKSkpCiAgICAgICAgIGNsYXNzIEIoQSk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIEIucmVnaXN0ZXIoYmFzZXN0cmluZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKCIiLCBBKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKCIiLCAoQSwpKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKHN0ciwgQSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhzdHIsIChBLCkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoIiIsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgiIiwgKEEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3RyLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3RyLCAoQSwpKSkKIAogICAgIGRlZiB0ZXN0X3JlZ2lzdHJhdGlvbl9lZGdlX2Nhc2VzKHNlbGYpOgogICAgICAgICBjbGFzcyBBOgpAQCAtMTQ5LDQ0ICsxNDksNTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBDLnJlZ2lzdGVyLCBBKSAgIyBjeWNsZXMgbm90IGFsbG93ZWQKICAgICAgICAgQy5yZWdpc3RlcihCKSAgIyBvawogCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfbm9uX2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCAiQ2FuIG9ubHkgcmVnaXN0ZXIgY2xhc3NlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEucmVnaXN0ZXIsIDQpCisKICAgICBkZWYgdGVzdF9yZWdpc3RyYXRpb25fdHJhbnNpdGl2ZW5lc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoQSwgQSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEEsIChBLCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhBLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQSwgKEEsKSkpCiAgICAgICAgIGNsYXNzIEI6CiAgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhBLCBCKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhBLCAoQiwpKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhCLCBBKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhCLCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEEsIEIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQSwgKEIsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhCLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEIsIChBLCkpKQogICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCiAgICAgICAgIEEucmVnaXN0ZXIoQikKICAgICAgICAgY2xhc3MgQjEoQik6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEIxLCBBKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoQjEsIChBLCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhCMSwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEIxLCAoQSwpKSkKICAgICAgICAgY2xhc3MgQzEoQyk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIEIxLnJlZ2lzdGVyKEMxKQotICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKEMsIEIpKQotICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKEMsIChCLCkpKQotICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKEMsIEIxKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhDLCAoQjEsKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEMxLCBBKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoQzEsIChBLCkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhDMSwgQikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEMxLCAoQiwpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoQzEsIEIxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoQzEsIChCMSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEMsIEIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQywgKEIsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhDLCBCMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhDLCAoQjEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMxLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQzEsIChBLCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDMSwgQikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMxLCAoQiwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQzEsIEIxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQzEsIChCMSwpKSkKICAgICAgICAgQzEucmVnaXN0ZXIoaW50KQogICAgICAgICBjbGFzcyBNeUludChpbnQpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhNeUludCwgQSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKE15SW50LCAoQSwpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoNDIsIEEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZSg0MiwgKEEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE15SW50LCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTXlJbnQsIChBLCkpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoNDIsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSg0MiwgKEEsKSkKIAogICAgIGRlZiB0ZXN0X2FsbF9uZXdfbWV0aG9kc19hcmVfY2FsbGVkKHNlbGYpOgogICAgICAgICBjbGFzcyBBOgpAQCAtMjAyLDYgKzIwOCwyMiBAQAogICAgICAgICBDKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCLmNvdW50ZXIsIDEpCiAKKyAgICBkZWYgdGVzdF9jYWNoZV9sZWFrKHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAjMjUyMS4KKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgICAgICAgICBkZWYgZihzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBkZWYgZihzZWxmKToKKyAgICAgICAgICAgICAgICBBLmYoc2VsZikKKyAgICAgICAgciA9IHdlYWtyZWYucmVmKEMpCisgICAgICAgICMgVHJpZ2dlciBjYWNoZS4KKyAgICAgICAgQygpLmYoKQorICAgICAgICBkZWwgQworICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocigpLCBOb25lKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0QUJDKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hYnN0cmFjdF9udW1iZXJzLnB5IGIvTGliL3Rlc3QvdGVzdF9hYnN0cmFjdF9udW1iZXJzLnB5CmluZGV4IDAzNGZiNTIuLjkyNWY4Y2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWJzdHJhY3RfbnVtYmVycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Fic3RyYWN0X251bWJlcnMucHkKQEAgLTEsMTYgKzEsMTQgQEAKICIiIlVuaXQgdGVzdHMgZm9yIG51bWJlcnMucHkuIiIiCiAKIGltcG9ydCBtYXRoCi1pbXBvcnQgb3BlcmF0b3IKIGltcG9ydCB1bml0dGVzdAogZnJvbSBudW1iZXJzIGltcG9ydCBDb21wbGV4LCBSZWFsLCBSYXRpb25hbCwgSW50ZWdyYWwKLWZyb20gbnVtYmVycyBpbXBvcnQgTnVtYmVyCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiBjbGFzcyBUZXN0TnVtYmVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfaW50KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhpbnQsIEludGVncmFsKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoaW50LCBDb21wbGV4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoaW50LCBJbnRlZ3JhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGludCwgQ29tcGxleCkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBpbnQoNykucmVhbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpbnQoNykuaW1hZykKQEAgLTE5LDggKzE3LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBpbnQoNykuZGVub21pbmF0b3IpCiAKICAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhsb25nLCBJbnRlZ3JhbCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKGxvbmcsIENvbXBsZXgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhsb25nLCBJbnRlZ3JhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGxvbmcsIENvbXBsZXgpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgbG9uZyg3KS5yZWFsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxvbmcoNykuaW1hZykKQEAgLTI5LDE2ICsyNywxNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxvbmcoNykuZGVub21pbmF0b3IpCiAKICAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhmbG9hdCwgUmF0aW9uYWwpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhmbG9hdCwgUmVhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhmbG9hdCwgUmF0aW9uYWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhmbG9hdCwgUmVhbCkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LjMsIGZsb2F0KDcuMykucmVhbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBmbG9hdCg3LjMpLmltYWcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNy4zLCBmbG9hdCg3LjMpLmNvbmp1Z2F0ZSgpKQogCiAgICAgZGVmIHRlc3RfY29tcGxleChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhjb21wbGV4LCBSZWFsKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoY29tcGxleCwgQ29tcGxleCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhjb21wbGV4LCBSZWFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoY29tcGxleCwgQ29tcGxleCkpCiAKICAgICAgICAgYzEsIGMyID0gY29tcGxleCgzLCAyKSwgY29tcGxleCg0LDEpCiAgICAgICAgICMgWFhYOiBUaGlzIGlzIG5vdCBpZGVhbCwgYnV0IHNlZSB0aGUgY29tbWVudCBpbiBtYXRoX3RydW5jKCkuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FlcGFjay5weSBiL0xpYi90ZXN0L3Rlc3RfYWVwYWNrLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggYzQ0ZjFlZi4uZjRlYTI1YgotLS0gYS9MaWIvdGVzdC90ZXN0X2FlcGFjay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FlcGFjay5weQpAQCAtMSwxMSArMSwxMiBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KIAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgYWVwYWNrCi1pbXBvcnQgYWV0eXBlcwogaW1wb3J0IG9zCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCithZXR5cGVzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2FldHlwZXMnKQorYWVwYWNrID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2FlcGFjaycpCisKIGNsYXNzIFRlc3RBZXBhY2sodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIE9CSkVDVFMgPSBbCiAgICAgICAgIGFldHlwZXMuRW51bSgnZW51bScpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9haWZjLnB5IGIvTGliL3Rlc3QvdGVzdF9haWZjLnB5CmluZGV4IGQ2Yjc5NDIuLmNiZjAwZTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FpZmMucHkKQEAgLTEsNSArMSw2IEBACi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgcnVuX3VuaXR0ZXN0LCBURVNURk4KIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCiAKIGltcG9ydCBhaWZjCiAKQEAgLTcsMTYgKzgsMjkgQEAKIGNsYXNzIEFJRkNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mID0gc2VsZi5mb3V0ID0gTm9uZQogICAgICAgICBzZWxmLnNuZGZpbGVwYXRoID0gZmluZGZpbGUoJ1NpbmUtMTAwMEh6LTMwMG1zLmFpZicpCiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuZm91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmZvdXQuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IChhaWZjLkVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0X3NraXB1bmtub3duKHNlbGYpOgogICAgICAgICAjSXNzdWUgMjI0NQogICAgICAgICAjVGhpcyBmaWxlIGNvbnRhaW5zIGNodW5rIHR5cGVzIGFpZmMgZG9lc24ndCByZWNvZ25pemUuCi0gICAgICAgIGYgPSBhaWZjLm9wZW4oc2VsZi5zbmRmaWxlcGF0aCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuZiA9IGFpZmMub3BlbihzZWxmLnNuZGZpbGVwYXRoKQogCiAgICAgZGVmIHRlc3RfcGFyYW1zKHNlbGYpOgotICAgICAgICBmID0gYWlmYy5vcGVuKHNlbGYuc25kZmlsZXBhdGgpCisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oc2VsZi5zbmRmaWxlcGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5jaGFubmVscygpLCAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0c2FtcHdpZHRoKCksIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRmcmFtZXJhdGUoKSwgNDgwMDApCkBAIC0yNCwxMCArMzgsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0Y29tcHR5cGUoKSwgJ05PTkUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0Y29tcG5hbWUoKSwgJ25vdCBjb21wcmVzc2VkJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHBhcmFtcygpLCAoMiwgMiwgNDgwMDAsIDE0NDAwLCAnTk9ORScsICdub3QgY29tcHJlc3NlZCcpKQotICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6Ci0gICAgICAgIGYgPSBhaWZjLm9wZW4oc2VsZi5zbmRmaWxlcGF0aCkKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihzZWxmLnNuZGZpbGVwYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcygyKSwgJ1x4MDBceDAwXHgwMFx4MDBceDBiXHhkNFx4MGJceGQ0JykKICAgICAgICAgZi5yZXdpbmQoKQpAQCAtNDEsOSArNTQsNDIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMoMiksICdceDE3dFx4MTd0Ilx4YWQiXHhhZCcpCiAgICAgICAgIGYuc2V0cG9zKHBvczApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKDIpLCAnXHgwMFx4MDBceDAwXHgwMFx4MGJceGQ0XHgwYlx4ZDQnKQotICAgICAgICBmLmNsb3NlKCkKIAotICAgICNYWFggTmVlZCBtb3JlIHRlc3RzIQorICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKHNlbGYuc25kZmlsZXBhdGgpCisgICAgICAgIGZvdXQgPSBzZWxmLmZvdXQgPSBhaWZjLm9wZW4oVEVTVEZOLCAnd2InKQorICAgICAgICBmb3V0LmFpZmMoKQorICAgICAgICBmb3V0LnNldHBhcmFtcyhmLmdldHBhcmFtcygpKQorICAgICAgICBmb3IgZnJhbWUgaW4gcmFuZ2UoZi5nZXRuZnJhbWVzKCkpOgorICAgICAgICAgICAgZm91dC53cml0ZWZyYW1lcyhmLnJlYWRmcmFtZXMoMSkpCisgICAgICAgIGZvdXQuY2xvc2UoKQorICAgICAgICBmb3V0ID0gc2VsZi5mb3V0ID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgZi5yZXdpbmQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0cGFyYW1zKCksIGZvdXQuZ2V0cGFyYW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKDUpLCBmb3V0LnJlYWRmcmFtZXMoNSkpCisKKyAgICBkZWYgdGVzdF9jb21wcmVzcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihzZWxmLnNuZGZpbGVwYXRoKQorICAgICAgICBmb3V0ID0gc2VsZi5mb3V0ID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgZm91dC5haWZjKCkKKyAgICAgICAgZm91dC5zZXRuY2hhbm5lbHMoZi5nZXRuY2hhbm5lbHMoKSkKKyAgICAgICAgZm91dC5zZXRzYW1wd2lkdGgoZi5nZXRzYW1wd2lkdGgoKSkKKyAgICAgICAgZm91dC5zZXRmcmFtZXJhdGUoZi5nZXRmcmFtZXJhdGUoKSkKKyAgICAgICAgZm91dC5zZXRjb21wdHlwZSgnVUxBVycsICdmb28nKQorICAgICAgICBmb3IgZnJhbWUgaW4gcmFuZ2UoZi5nZXRuZnJhbWVzKCkpOgorICAgICAgICAgICAgZm91dC53cml0ZWZyYW1lcyhmLnJlYWRmcmFtZXMoMSkpCisgICAgICAgIGZvdXQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoCisgICAgICAgICAgICBvcy5zdGF0KFRFU1RGTikuc3Rfc2l6ZSwKKyAgICAgICAgICAgIG9zLnN0YXQoc2VsZi5zbmRmaWxlcGF0aCkuc3Rfc2l6ZSowLjc1LAorICAgICAgICAgICAgKQorICAgICAgICBmb3V0ID0gc2VsZi5mb3V0ID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgZi5yZXdpbmQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0cGFyYW1zKClbMDozXSwgZm91dC5nZXRwYXJhbXMoKVswOjNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdXQuZ2V0Y29tcHR5cGUoKSwgJ1VMQVcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdXQuZ2V0Y29tcG5hbWUoKSwgJ2ZvbycpCisgICAgICAgICMgWFhYOiB0aGlzIHRlc3QgZmFpbHMsIG5vdCBzdXJlIGlmIGl0IHNob3VsZCBzdWNjZWVkIG9yIG5vdAorICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKDUpLCBmb3V0LnJlYWRmcmFtZXMoNSkpCiAKICAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKICAgICAgICAgY2xhc3MgV3JhcGZpbGUob2JqZWN0KToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXBwbGVzaW5nbGUucHkgYi9MaWIvdGVzdC90ZXN0X2FwcGxlc2luZ2xlLnB5CmluZGV4IGU5MTUwMjguLjFiZWZmZTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXBwbGVzaW5nbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hcHBsZXNpbmdsZS5weQpAQCAtMSwxMiArMSwxMiBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KIAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgbWFjb3N0b29scwotaW1wb3J0IENhcmJvbi5GaWxlCi1pbXBvcnQgTWFjT1MKIGltcG9ydCBvcwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGltcG9ydCBzdHJ1Y3QKKworTWFjT1MgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnTWFjT1MnKQorIyBUaGUgZm9sbG93aW5nIHNob3VsZCBleGlzdCBpZiBNYWNPUyBkb2VzLgogaW1wb3J0IGFwcGxlc2luZ2xlCiAKIEFTX01BR0lDPTB4MDAwNTE2MDAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYzg1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CkBAIC0wLDAgKzEsNDM5NiBAQAorIyBBdXRob3I6IFN0ZXZlbiBKLiBCZXRoYXJkIDxzdGV2ZW4uYmV0aGFyZEBnbWFpbC5jb20+LgorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHRleHR3cmFwCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGFyZ3BhcnNlCisKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2NsYXNzIFN0ZElPQnVmZmVyKFN0cmluZ0lPKToKKyAgICBwYXNzCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRFcXVhbChzZWxmLCBvYmoxLCBvYmoyKToKKyAgICAgICAgaWYgb2JqMSAhPSBvYmoyOgorICAgICAgICAgICAgcHJpbnQoJycpCisgICAgICAgICAgICBwcmludChyZXByKG9iajEpKQorICAgICAgICAgICAgcHJpbnQocmVwcihvYmoyKSkKKyAgICAgICAgICAgIHByaW50KG9iajEpCisgICAgICAgICAgICBwcmludChvYmoyKQorICAgICAgICBzdXBlcihUZXN0Q2FzZSwgc2VsZikuYXNzZXJ0RXF1YWwob2JqMSwgb2JqMikKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBUaGUgdGVzdHMgYXNzdW1lIHRoYXQgbGluZSB3cmFwcGluZyBvY2N1cnMgYXQgODAgY29sdW1ucywgYnV0IHRoaXMKKyAgICAgICAgIyBiZWhhdmlvdXIgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc2V0dGluZyB0aGUgQ09MVU1OUyBlbnZpcm9ubWVudAorICAgICAgICAjIHZhcmlhYmxlLiAgVG8gZW5zdXJlIHRoYXQgdGhpcyBhc3N1bXB0aW9uIGlzIHRydWUsIHVuc2V0IENPTFVNTlMuCisgICAgICAgIGVudiA9IHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkKKyAgICAgICAgZW52LnVuc2V0KCJDT0xVTU5TIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGVudi5fX2V4aXRfXykKKworCitjbGFzcyBUZW1wRGlyTWl4aW4ob2JqZWN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLm9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihzZWxmLnRlbXBfZGlyKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy5jaGRpcihzZWxmLm9sZF9kaXIpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50ZW1wX2RpciwgVHJ1ZSkKKworICAgIGRlZiBjcmVhdGVfcmVhZG9ubHlfZmlsZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBfZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgZmlsZS53cml0ZShmaWxlbmFtZSkKKyAgICAgICAgb3MuY2htb2QoZmlsZV9wYXRoLCBzdGF0LlNfSVJFQUQpCisKK2NsYXNzIFNpZyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5rd2FyZ3MgPSBrd2FyZ3MKKworCitjbGFzcyBOUyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoa3dhcmdzKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBzb3J0ZWRfaXRlbXMgPSBzb3J0ZWQoc2VsZi5fX2RpY3RfXy5pdGVtcygpKQorICAgICAgICBrd2FyZ19zdHIgPSAnLCAnLmpvaW4oWyclcz0lcicgJSB0dXAgZm9yIHR1cCBpbiBzb3J0ZWRfaXRlbXNdKQorICAgICAgICByZXR1cm4gJyVzKCVzKScgJSAodHlwZShzZWxmKS5fX25hbWVfXywga3dhcmdfc3RyKQorCisgICAgX19oYXNoX18gPSBOb25lCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHZhcnMoc2VsZikgPT0gdmFycyhvdGhlcikKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IChzZWxmID09IG90aGVyKQorCisKK2NsYXNzIEFyZ3VtZW50UGFyc2VyRXJyb3IoRXhjZXB0aW9uKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIGVycm9yX2NvZGU9Tm9uZSk6CisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtZXNzYWdlLCBzdGRvdXQsIHN0ZGVycikKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxmLnN0ZG91dCA9IHN0ZG91dAorICAgICAgICBzZWxmLnN0ZGVyciA9IHN0ZGVycgorICAgICAgICBzZWxmLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlCisKKworZGVmIHN0ZGVycl90b19wYXJzZXJfZXJyb3IocGFyc2VfYXJncywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAjIGlmIHRoaXMgaXMgYmVpbmcgY2FsbGVkIHJlY3Vyc2l2ZWx5IGFuZCBzdGRlcnIgb3Igc3Rkb3V0IGlzIGFscmVhZHkgYmVpbmcKKyAgICAjIHJlZGlyZWN0ZWQsIHNpbXBseSBjYWxsIHRoZSBmdW5jdGlvbiBhbmQgbGV0IHRoZSBlbmNsb3NpbmcgZnVuY3Rpb24KKyAgICAjIGNhdGNoIHRoZSBleGNlcHRpb24KKyAgICBpZiBpc2luc3RhbmNlKHN5cy5zdGRlcnIsIFN0ZElPQnVmZmVyKSBvciBpc2luc3RhbmNlKHN5cy5zdGRvdXQsIFN0ZElPQnVmZmVyKToKKyAgICAgICAgcmV0dXJuIHBhcnNlX2FyZ3MoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgIyBpZiB0aGlzIGlzIG5vdCBiZWluZyBjYWxsZWQgcmVjdXJzaXZlbHksIHJlZGlyZWN0IHN0ZGVyciBhbmQKKyAgICAjIHVzZSBpdCBhcyB0aGUgQXJndW1lbnRQYXJzZXJFcnJvciBtZXNzYWdlCisgICAgb2xkX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICBvbGRfc3RkZXJyID0gc3lzLnN0ZGVycgorICAgIHN5cy5zdGRvdXQgPSBTdGRJT0J1ZmZlcigpCisgICAgc3lzLnN0ZGVyciA9IFN0ZElPQnVmZmVyKCkKKyAgICB0cnk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlX2FyZ3MoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZm9yIGtleSBpbiBsaXN0KHZhcnMocmVzdWx0KSk6CisgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cihyZXN1bHQsIGtleSkgaXMgc3lzLnN0ZG91dDoKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihyZXN1bHQsIGtleSwgb2xkX3N0ZG91dCkKKyAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKHJlc3VsdCwga2V5KSBpcyBzeXMuc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHJlc3VsdCwga2V5LCBvbGRfc3RkZXJyKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIGNvZGUgPSBzeXMuZXhjX2luZm8oKVsxXS5jb2RlCisgICAgICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0LmdldHZhbHVlKCkKKyAgICAgICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKQorICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRQYXJzZXJFcnJvcigiU3lzdGVtRXhpdCIsIHN0ZG91dCwgc3RkZXJyLCBjb2RlKQorICAgIGZpbmFsbHk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBvbGRfc3Rkb3V0CisgICAgICAgIHN5cy5zdGRlcnIgPSBvbGRfc3RkZXJyCisKKworY2xhc3MgRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgorCisgICAgZGVmIHBhcnNlX2FyZ3Moc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcGFyc2VfYXJncyA9IHN1cGVyKEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyLCBzZWxmKS5wYXJzZV9hcmdzCisgICAgICAgIHJldHVybiBzdGRlcnJfdG9fcGFyc2VyX2Vycm9yKHBhcnNlX2FyZ3MsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBleGl0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGV4aXQgPSBzdXBlcihFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlciwgc2VsZikuZXhpdAorICAgICAgICByZXR1cm4gc3RkZXJyX3RvX3BhcnNlcl9lcnJvcihleGl0LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgZXJyb3IgPSBzdXBlcihFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlciwgc2VsZikuZXJyb3IKKyAgICAgICAgcmV0dXJuIHN0ZGVycl90b19wYXJzZXJfZXJyb3IoZXJyb3IsICphcmdzLCAqKmt3YXJncykKKworCitjbGFzcyBQYXJzZXJUZXN0ZXJNZXRhY2xhc3ModHlwZSk6CisgICAgIiIiQWRkcyBwYXJzZXIgdGVzdHMgdXNpbmcgdGhlIGNsYXNzIGF0dHJpYnV0ZXMuCisKKyAgICBDbGFzc2VzIG9mIHRoaXMgdHlwZSBzaG91bGQgc3BlY2lmeSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzIC0tIGEgbGlzdCBvZiBTaWcgb2JqZWN0cyB3aGljaCBzcGVjaWZ5CisgICAgICAgIHRoZSBzaWduYXR1cmVzIG9mIEFyZ3VtZW50IG9iamVjdHMgdG8gYmUgY3JlYXRlZAorICAgIGZhaWx1cmVzIC0tIGEgbGlzdCBvZiBhcmdzIGxpc3RzIHRoYXQgc2hvdWxkIGNhdXNlIHRoZSBwYXJzZXIKKyAgICAgICAgdG8gZmFpbAorICAgIHN1Y2Nlc3NlcyAtLSBhIGxpc3Qgb2YgKGluaXRpYWxfYXJncywgb3B0aW9ucywgcmVtYWluaW5nX2FyZ3MpIHR1cGxlcworICAgICAgICB3aGVyZSBpbml0aWFsX2FyZ3Mgc3BlY2lmaWVzIHRoZSBzdHJpbmcgYXJncyB0byBiZSBwYXJzZWQsCisgICAgICAgIG9wdGlvbnMgaXMgYSBkaWN0IHRoYXQgc2hvdWxkIG1hdGNoIHRoZSB2YXJzKCkgb2YgdGhlIG9wdGlvbnMKKyAgICAgICAgcGFyc2VkIG91dCBvZiBpbml0aWFsX2FyZ3MsIGFuZCByZW1haW5pbmdfYXJncyBzaG91bGQgYmUgYW55CisgICAgICAgIHJlbWFpbmluZyB1bnBhcnNlZCBhcmd1bWVudHMKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBib2R5ZGljdCk6CisgICAgICAgIGlmIG5hbWUgPT0gJ1BhcnNlclRlc3RDYXNlJzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgZGVmYXVsdCBwYXJzZXIgc2lnbmF0dXJlIGlzIGVtcHR5CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNscywgJ3BhcnNlcl9zaWduYXR1cmUnKToKKyAgICAgICAgICAgIGNscy5wYXJzZXJfc2lnbmF0dXJlID0gU2lnKCkKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoY2xzLCAncGFyc2VyX2NsYXNzJyk6CisgICAgICAgICAgICBjbHMucGFyc2VyX2NsYXNzID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIKKworICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIGZ1bmN0aW9ucyBmb3IgYWRkaW5nIG9wdGlvbmFsIGFyZ3VtZW50cworICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBkZWYgbm9fZ3JvdXBzKHBhcnNlciwgYXJndW1lbnRfc2lnbmF0dXJlcyk6CisgICAgICAgICAgICAiIiJBZGQgYWxsIGFyZ3VtZW50cyBkaXJlY3RseSB0byB0aGUgcGFyc2VyIiIiCisgICAgICAgICAgICBmb3Igc2lnIGluIGFyZ3VtZW50X3NpZ25hdHVyZXM6CisgICAgICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgqc2lnLmFyZ3MsICoqc2lnLmt3YXJncykKKworICAgICAgICBkZWYgb25lX2dyb3VwKHBhcnNlciwgYXJndW1lbnRfc2lnbmF0dXJlcyk6CisgICAgICAgICAgICAiIiJBZGQgYWxsIGFyZ3VtZW50cyB1bmRlciBhIHNpbmdsZSBncm91cCBpbiB0aGUgcGFyc2VyIiIiCisgICAgICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2ZvbycpCisgICAgICAgICAgICBmb3Igc2lnIGluIGFyZ3VtZW50X3NpZ25hdHVyZXM6CisgICAgICAgICAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCpzaWcuYXJncywgKipzaWcua3dhcmdzKQorCisgICAgICAgIGRlZiBtYW55X2dyb3VwcyhwYXJzZXIsIGFyZ3VtZW50X3NpZ25hdHVyZXMpOgorICAgICAgICAgICAgIiIiQWRkIGVhY2ggYXJndW1lbnQgaW4gaXRzIG93biBncm91cCB0byB0aGUgcGFyc2VyIiIiCisgICAgICAgICAgICBmb3IgaSwgc2lnIGluIGVudW1lcmF0ZShhcmd1bWVudF9zaWduYXR1cmVzKToKKyAgICAgICAgICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2ZvbzolaScgJSBpKQorICAgICAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgqc2lnLmFyZ3MsICoqc2lnLmt3YXJncykKKworICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgZnVuY3Rpb25zIGZvciBwYXJzaW5nIGFyZ3MKKyAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBkZWYgbGlzdGFyZ3MocGFyc2VyLCBhcmdzKToKKyAgICAgICAgICAgICIiIlBhcnNlIHRoZSBhcmdzIGJ5IHBhc3NpbmcgaW4gYSBsaXN0IiIiCisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgICAgICBkZWYgc3lzYXJncyhwYXJzZXIsIGFyZ3MpOgorICAgICAgICAgICAgIiIiUGFyc2UgdGhlIGFyZ3MgYnkgZGVmYXVsdGluZyB0byBzeXMuYXJndiIiIgorICAgICAgICAgICAgb2xkX3N5c19hcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgICAgIHN5cy5hcmd2ID0gW29sZF9zeXNfYXJndlswXV0gKyBhcmdzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3lzLmFyZ3YgPSBvbGRfc3lzX2FyZ3YKKworICAgICAgICAjIGNsYXNzIHRoYXQgaG9sZHMgdGhlIGNvbWJpbmF0aW9uIG9mIG9uZSBvcHRpb25hbCBhcmd1bWVudAorICAgICAgICAjIGFkZGl0aW9uIG1ldGhvZCBhbmQgb25lIGFyZyBwYXJzaW5nIG1ldGhvZAorICAgICAgICBjbGFzcyBBZGRUZXN0cyhvYmplY3QpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdGVyX2NscywgYWRkX2FyZ3VtZW50cywgcGFyc2VfYXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2FyZ3VtZW50cyA9IGFkZF9hcmd1bWVudHMKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9hcmdzID0gcGFyc2VfYXJncworCisgICAgICAgICAgICAgICAgYWRkX2FyZ3VtZW50c19uYW1lID0gc2VsZi5fYWRkX2FyZ3VtZW50cy5fX25hbWVfXworICAgICAgICAgICAgICAgIHBhcnNlX2FyZ3NfbmFtZSA9IHNlbGYuX3BhcnNlX2FyZ3MuX19uYW1lX18KKyAgICAgICAgICAgICAgICBmb3IgdGVzdF9mdW5jIGluIFtzZWxmLnRlc3RfZmFpbHVyZXMsIHNlbGYudGVzdF9zdWNjZXNzZXNdOgorICAgICAgICAgICAgICAgICAgICBmdW5jX25hbWUgPSB0ZXN0X2Z1bmMuX19uYW1lX18KKyAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBmdW5jX25hbWUsIGFkZF9hcmd1bWVudHNfbmFtZSwgcGFyc2VfYXJnc19uYW1lCisgICAgICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9ICdfJy5qb2luKG5hbWVzKQorCisgICAgICAgICAgICAgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYsIHRlc3RfZnVuYz10ZXN0X2Z1bmMpOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9mdW5jKHNlbGYpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuX19uYW1lX18gPSB0ZXN0X25hbWUKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cih0ZXN0ZXJfY2xzLCB0ZXN0X25hbWUsIHdyYXBwZXIpCisKKyAgICAgICAgICAgIGRlZiBfZ2V0X3BhcnNlcihzZWxmLCB0ZXN0ZXIpOgorICAgICAgICAgICAgICAgIGFyZ3MgPSB0ZXN0ZXIucGFyc2VyX3NpZ25hdHVyZS5hcmdzCisgICAgICAgICAgICAgICAga3dhcmdzID0gdGVzdGVyLnBhcnNlcl9zaWduYXR1cmUua3dhcmdzCisgICAgICAgICAgICAgICAgcGFyc2VyID0gdGVzdGVyLnBhcnNlcl9jbGFzcygqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2FyZ3VtZW50cyhwYXJzZXIsIHRlc3Rlci5hcmd1bWVudF9zaWduYXR1cmVzKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgICAgICAgICAgZGVmIHRlc3RfZmFpbHVyZXMoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKKyAgICAgICAgICAgICAgICBmb3IgYXJnc19zdHIgaW4gdGVzdGVyLmZhaWx1cmVzOgorICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc19zdHIuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICByYWlzZXMgPSB0ZXN0ZXIuYXNzZXJ0UmFpc2VzCisgICAgICAgICAgICAgICAgICAgIHJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCBwYXJzZXIucGFyc2VfYXJncywgYXJncykKKworICAgICAgICAgICAgZGVmIHRlc3Rfc3VjY2Vzc2VzKHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCisgICAgICAgICAgICAgICAgZm9yIGFyZ3MsIGV4cGVjdGVkX25zIGluIHRlc3Rlci5zdWNjZXNzZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJncywgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X25zID0gc2VsZi5fcGFyc2VfYXJncyhwYXJzZXIsIGFyZ3MpCisgICAgICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRFcXVhbChleHBlY3RlZF9ucywgcmVzdWx0X25zKQorCisgICAgICAgICMgYWRkIHRlc3RzIGZvciBlYWNoIGNvbWJpbmF0aW9uIG9mIGFuIG9wdGlvbmFscyBhZGRpbmcgbWV0aG9kCisgICAgICAgICMgYW5kIGFuIGFyZyBwYXJzaW5nIG1ldGhvZAorICAgICAgICBmb3IgYWRkX2FyZ3VtZW50cyBpbiBbbm9fZ3JvdXBzLCBvbmVfZ3JvdXAsIG1hbnlfZ3JvdXBzXToKKyAgICAgICAgICAgIGZvciBwYXJzZV9hcmdzIGluIFtsaXN0YXJncywgc3lzYXJnc106CisgICAgICAgICAgICAgICAgQWRkVGVzdHMoY2xzLCBhZGRfYXJndW1lbnRzLCBwYXJzZV9hcmdzKQorCitiYXNlcyA9IFRlc3RDYXNlLAorUGFyc2VyVGVzdENhc2UgPSBQYXJzZXJUZXN0ZXJNZXRhY2xhc3MoJ1BhcnNlclRlc3RDYXNlJywgYmFzZXMsIHt9KQorCisjID09PT09PT09PT09PT09PQorIyBPcHRpb25hbHMgdGVzdHMKKyMgPT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEYXNoKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggYSBzaW5nbGUtZGFzaCBvcHRpb24gc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnKV0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnYScsICctLWZvbycsICcteCAtLWZvbycsICcteCAteSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14IGEnLCBOUyh4PSdhJykpLAorICAgICAgICAoJy14YScsIE5TKHg9J2EnKSksCisgICAgICAgICgnLXggLTEnLCBOUyh4PSctMScpKSwKKyAgICAgICAgKCcteC0xJywgTlMoeD0nLTEnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEYXNoQ29tYmluZWQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBhIHNpbmdsZS1kYXNoIG9wdGlvbiBzdHJpbmciIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCcteXl5JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTQyKSwKKyAgICAgICAgU2lnKCcteicpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctLWZvbycsICcteGEnLCAnLXggLS1mb28nLCAnLXggLXonLCAnLXogLXgnLAorICAgICAgICAgICAgICAgICcteXgnLCAnLXl6IGEnLCAnLXl5eXgnLCAnLXl5eXphJywgJy14eXphJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1GYWxzZSwgeXl5PU5vbmUsIHo9Tm9uZSkpLAorICAgICAgICAoJy14JywgTlMoeD1UcnVlLCB5eXk9Tm9uZSwgej1Ob25lKSksCisgICAgICAgICgnLXphJywgTlMoeD1GYWxzZSwgeXl5PU5vbmUsIHo9J2EnKSksCisgICAgICAgICgnLXogYScsIE5TKHg9RmFsc2UsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy14emEnLCBOUyh4PVRydWUsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy14eiBhJywgTlMoeD1UcnVlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteCAtemEnLCBOUyh4PVRydWUsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy14IC16IGEnLCBOUyh4PVRydWUsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy15JywgTlMoeD1GYWxzZSwgeXl5PTQyLCB6PU5vbmUpKSwKKyAgICAgICAgKCcteXl5JywgTlMoeD1GYWxzZSwgeXl5PTQyLCB6PU5vbmUpKSwKKyAgICAgICAgKCcteCAteXl5IC16YScsIE5TKHg9VHJ1ZSwgeXl5PTQyLCB6PSdhJykpLAorICAgICAgICAoJy14IC15eXkgLXogYScsIE5TKHg9VHJ1ZSwgeXl5PTQyLCB6PSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRGFzaExvbmcoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBhIG11bHRpLWNoYXJhY3RlciBzaW5nbGUtZGFzaCBvcHRpb24gc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLWZvbycpXQorICAgIGZhaWx1cmVzID0gWyctZm9vJywgJ2EnLCAnLS1mb28nLCAnLWZvbyAtLWZvbycsICctZm9vIC15JywgJy1mb29hJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPU5vbmUpKSwKKyAgICAgICAgKCctZm9vIGEnLCBOUyhmb289J2EnKSksCisgICAgICAgICgnLWZvbyAtMScsIE5TKGZvbz0nLTEnKSksCisgICAgICAgICgnLWZvIGEnLCBOUyhmb289J2EnKSksCisgICAgICAgICgnLWYgYScsIE5TKGZvbz0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1NpbmdsZURhc2hTdWJzZXRBbWJpZ3VvdXMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgT3B0aW9uYWxzIHdoZXJlIG9wdGlvbiBzdHJpbmdzIGFyZSBzdWJzZXRzIG9mIGVhY2ggb3RoZXIiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctZicpLCBTaWcoJy1mb29iYXInKSwgU2lnKCctZm9vcmFiJyldCisgICAgZmFpbHVyZXMgPSBbJy1mJywgJy1mb28nLCAnLWZvJywgJy1mb28gYicsICctZm9vYicsICctZm9vYmEnLCAnLWZvb3JhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZj1Ob25lLCBmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZiBhJywgTlMoZj0nYScsIGZvb2Jhcj1Ob25lLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mYScsIE5TKGY9J2EnLCBmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9hJywgTlMoZj0nb2EnLCBmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vYScsIE5TKGY9J29vYScsIGZvb2Jhcj1Ob25lLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb29iYXIgYScsIE5TKGY9Tm9uZSwgZm9vYmFyPSdhJywgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vcmFiIGEnLCBOUyhmPU5vbmUsIGZvb2Jhcj1Ob25lLCBmb29yYWI9J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEYXNoQW1iaWd1b3VzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IE9wdGlvbmFscyB0aGF0IHBhcnRpYWxseSBtYXRjaCBidXQgYXJlIG5vdCBzdWJzZXRzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLWZvb2JhcicpLCBTaWcoJy1mb29yYWInKV0KKyAgICBmYWlsdXJlcyA9IFsnLWYnLCAnLWYgYScsICctZmEnLCAnLWZvYScsICctZm9vJywgJy1mbycsICctZm9vIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vYiBhJywgTlMoZm9vYmFyPSdhJywgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vciBhJywgTlMoZm9vYmFyPU5vbmUsIGZvb3JhYj0nYScpKSwKKyAgICAgICAgKCctZm9vYmEgYScsIE5TKGZvb2Jhcj0nYScsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb3JhIGEnLCBOUyhmb29iYXI9Tm9uZSwgZm9vcmFiPSdhJykpLAorICAgICAgICAoJy1mb29iYXIgYScsIE5TKGZvb2Jhcj0nYScsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb3JhYiBhJywgTlMoZm9vYmFyPU5vbmUsIGZvb3JhYj0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc051bWVyaWMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBhIHNob3J0IG9wdCBzdHJpbmciIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctMScsIGRlc3Q9J29uZScpXQorICAgIGZhaWx1cmVzID0gWyctMScsICdhJywgJy0xIC0tZm9vJywgJy0xIC15JywgJy0xIC0xJywgJy0xIC0yJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMob25lPU5vbmUpKSwKKyAgICAgICAgKCctMSBhJywgTlMob25lPSdhJykpLAorICAgICAgICAoJy0xYScsIE5TKG9uZT0nYScpKSwKKyAgICAgICAgKCctMS0yJywgTlMob25lPSctMicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0RvdWJsZURhc2goUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBhIGRvdWJsZS1kYXNoIG9wdGlvbiBzdHJpbmciIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctLWZvbycpXQorICAgIGZhaWx1cmVzID0gWyctLWZvbycsICctZicsICctZiBhJywgJ2EnLCAnLS1mb28gLXgnLCAnLS1mb28gLS1iYXInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSkpLAorICAgICAgICAoJy0tZm9vIGEnLCBOUyhmb289J2EnKSksCisgICAgICAgICgnLS1mb289YScsIE5TKGZvbz0nYScpKSwKKyAgICAgICAgKCctLWZvbyAtMi41JywgTlMoZm9vPSctMi41JykpLAorICAgICAgICAoJy0tZm9vPS0yLjUnLCBOUyhmb289Jy0yLjUnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNEb3VibGVEYXNoUGFydGlhbE1hdGNoKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBwYXJ0aWFsIG1hdGNoaW5nIHdpdGggYSBkb3VibGUtZGFzaCBvcHRpb24gc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tYmFkZ2VyJywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnLS1iYXQnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyJywgJy0tYicsICctLWJhJywgJy0tYj0yJywgJy0tYmE9NCcsICctLWJhZGdlIDUnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiYWRnZXI9RmFsc2UsIGJhdD1Ob25lKSksCisgICAgICAgICgnLS1iYXQgWCcsIE5TKGJhZGdlcj1GYWxzZSwgYmF0PSdYJykpLAorICAgICAgICAoJy0tYmFkJywgTlMoYmFkZ2VyPVRydWUsIGJhdD1Ob25lKSksCisgICAgICAgICgnLS1iYWRnJywgTlMoYmFkZ2VyPVRydWUsIGJhdD1Ob25lKSksCisgICAgICAgICgnLS1iYWRnZScsIE5TKGJhZGdlcj1UcnVlLCBiYXQ9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZ2VyJywgTlMoYmFkZ2VyPVRydWUsIGJhdD1Ob25lKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNEb3VibGVEYXNoUHJlZml4TWF0Y2goUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHdoZW4gb25lIGRvdWJsZS1kYXNoIG9wdGlvbiBzdHJpbmcgaXMgYSBwcmVmaXggb2YgYW5vdGhlciIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWJhZGdlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJy0tYmEnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyJywgJy0tYicsICctLWJhJywgJy0tYj0yJywgJy0tYmFkZ2UgNSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGJhZGdlcj1GYWxzZSwgYmE9Tm9uZSkpLAorICAgICAgICAoJy0tYmEgWCcsIE5TKGJhZGdlcj1GYWxzZSwgYmE9J1gnKSksCisgICAgICAgICgnLS1iYT1YJywgTlMoYmFkZ2VyPUZhbHNlLCBiYT0nWCcpKSwKKyAgICAgICAgKCctLWJhZCcsIE5TKGJhZGdlcj1UcnVlLCBiYT1Ob25lKSksCisgICAgICAgICgnLS1iYWRnJywgTlMoYmFkZ2VyPVRydWUsIGJhPU5vbmUpKSwKKyAgICAgICAgKCctLWJhZGdlJywgTlMoYmFkZ2VyPVRydWUsIGJhPU5vbmUpKSwKKyAgICAgICAgKCctLWJhZGdlcicsIE5TKGJhZGdlcj1UcnVlLCBiYT1Ob25lKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEb3VibGVEYXNoKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggc2luZ2xlLSBhbmQgZG91YmxlLWRhc2ggb3B0aW9uIHN0cmluZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLWYnLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCctLWJhcicpLAorICAgICAgICBTaWcoJy1iYXonLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9NDIpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLS1iYXInLCAnLWZiYXInLCAnLWZiYXonLCAnLWJhemYnLCAnLWIgQicsICdCJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZj1GYWxzZSwgYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgICAgICgnLWYnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmEgQicsIE5TKGY9RmFsc2UsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnLWYgLS1iYXIgQicsIE5TKGY9VHJ1ZSwgYmFyPSdCJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCctZiAtYicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpLAorICAgICAgICAoJy1iYSAtZicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWx0ZXJuYXRlUHJlZml4Q2hhcnMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBvcHRpb24gc3RyaW5ncyB3aXRoIGN1c3RvbSBwcmVmaXhlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcmVmaXhfY2hhcnM9Jys6LycsIGFkZF9oZWxwPUZhbHNlKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnK2YnLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCc6OmJhcicpLAorICAgICAgICBTaWcoJy9iYXonLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9NDIpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLS1iYXInLCAnLWZiYXInLCAnLWIgQicsICdCJywgJy1mJywgJy0tYmFyIEInLCAnLWJheicsICctaCcsICctLWhlbHAnLCAnK2gnLCAnOjpoZWxwJywgJy9oZWxwJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZj1GYWxzZSwgYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJzo6YmEgQicsIE5TKGY9RmFsc2UsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YgOjpiYXIgQicsIE5TKGY9VHJ1ZSwgYmFyPSdCJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCcrZiAvYicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpLAorICAgICAgICAoJy9iYSArZicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWx0ZXJuYXRlUHJlZml4Q2hhcnNBZGRlZEhlbHAoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIldoZW4gYGAtYGAgbm90IGluIHByZWZpeF9jaGFycywgZGVmYXVsdCBvcGVyYXRvcnMgY3JlYXRlZCBmb3IgaGVscAorICAgICAgIHNob3VsZCB1c2UgdGhlIHByZWZpeF9jaGFycyBpbiB1c2UgcmF0aGVyIHRoYW4gLSBvciAtLQorICAgICAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU5NDQ0IiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByZWZpeF9jaGFycz0nKzovJywgYWRkX2hlbHA9VHJ1ZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJytmJywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnOjpiYXInKSwKKyAgICAgICAgU2lnKCcvYmF6JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTQyKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyJywgJy1mYmFyJywgJy1iIEInLCAnQicsICctZicsICctLWJhciBCJywgJy1iYXonXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmPUZhbHNlLCBiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICAgICAgKCcrZicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgICAgICgnOjpiYSBCJywgTlMoZj1GYWxzZSwgYmFyPSdCJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCcrZiA6OmJhciBCJywgTlMoZj1UcnVlLCBiYXI9J0InLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJytmIC9iJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PTQyKSksCisgICAgICAgICgnL2JhICtmJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PTQyKSkKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FsdGVybmF0ZVByZWZpeENoYXJzTXVsdGlwbGVTaG9ydEFyZ3MoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlZlcmlmeSB0aGF0IE9wdGlvbmFscyBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZWlyIGRlZmluZWQgcHJlZml4ZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJlZml4X2NoYXJzPScrLScsIGFkZF9oZWxwPUZhbHNlKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCcreScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJyt6JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctdycsCisgICAgICAgICAgICAgICAgJy14eXonLAorICAgICAgICAgICAgICAgICcreCcsCisgICAgICAgICAgICAgICAgJy15JywKKyAgICAgICAgICAgICAgICAnK3h5eicsCisgICAgXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PUZhbHNlLCB5PUZhbHNlLCB6PUZhbHNlKSksCisgICAgICAgICgnLXgnLCBOUyh4PVRydWUsIHk9RmFsc2UsIHo9RmFsc2UpKSwKKyAgICAgICAgKCcreSAteCcsIE5TKHg9VHJ1ZSwgeT1UcnVlLCB6PUZhbHNlKSksCisgICAgICAgICgnK3l6IC14JywgTlMoeD1UcnVlLCB5PVRydWUsIHo9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2hvcnRMb25nKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgY29tYmluYXRpb24gb2Ygc2luZ2xlLSBhbmQgZG91YmxlLWRhc2ggb3B0aW9uIHN0cmluZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXYnLCAnLS12ZXJib3NlJywgJy1uJywgJy0tbm9pc3knLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0teCAtLXZlcmJvc2UnLCAnLU4nLCAnYScsICctdiB4J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlModmVyYm9zZT1GYWxzZSkpLAorICAgICAgICAoJy12JywgTlModmVyYm9zZT1UcnVlKSksCisgICAgICAgICgnLS12ZXJib3NlJywgTlModmVyYm9zZT1UcnVlKSksCisgICAgICAgICgnLW4nLCBOUyh2ZXJib3NlPVRydWUpKSwKKyAgICAgICAgKCctLW5vaXN5JywgTlModmVyYm9zZT1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNEZXN0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB2YXJpb3VzIG1lYW5zIG9mIHNldHRpbmcgZGVzdGluYXRpb24iIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctLWZvby1iYXInKSwgU2lnKCctLWJheicsIGRlc3Q9J3phYmJheicpXQorICAgIGZhaWx1cmVzID0gWydhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1mb28tYmFyIGYnLCBOUyhmb29fYmFyPSdmJywgemFiYmF6PU5vbmUpKSwKKyAgICAgICAgKCctLWJheiBnJywgTlMoZm9vX2Jhcj1Ob25lLCB6YWJiYXo9J2cnKSksCisgICAgICAgICgnLS1mb28tYmFyIGggLS1iYXogaScsIE5TKGZvb19iYXI9J2gnLCB6YWJiYXo9J2knKSksCisgICAgICAgICgnLS1iYXogaiAtLWZvby1iYXIgaycsIE5TKGZvb19iYXI9J2snLCB6YWJiYXo9J2onKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNEZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGEgZGVmYXVsdCBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcpLCBTaWcoJy15JywgZGVmYXVsdD00MildCisgICAgZmFpbHVyZXMgPSBbJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9NDIpKSwKKyAgICAgICAgKCcteHgnLCBOUyh4PSd4JywgeT00MikpLAorICAgICAgICAoJy15eScsIE5TKHg9Tm9uZSwgeT0neScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgbm90IHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBhcmdzIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUpKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyB0aGUgMSBhcmcgZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICcteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14IGEnLCBOUyh4PVsnYSddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOYXJnczMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgdGhlIDMgYXJncyBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcsIG5hcmdzPTMpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy14JywgJy14IGEnLCAnLXggYSBiJywgJ2EgLXgnLCAnYSAteCBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lKSksCisgICAgICAgICgnLXggYSBiIGMnLCBOUyh4PVsnYScsICdiJywgJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3NPcHRpb25hbChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhbiBPcHRpb25hbCBhcmcgZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy13JywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCcteCcsIG5hcmdzPSc/JywgY29uc3Q9NDIpLAorICAgICAgICBTaWcoJy15JywgbmFyZ3M9Jz8nLCBkZWZhdWx0PSdzcGFtJyksCisgICAgICAgIFNpZygnLXonLCBuYXJncz0nPycsIHR5cGU9aW50LCBjb25zdD0nNDInLCBkZWZhdWx0PSc4NCcpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnMiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PSdzcGFtJywgej04NCkpLAorICAgICAgICAoJy13JywgTlModz1Ob25lLCB4PU5vbmUsIHk9J3NwYW0nLCB6PTg0KSksCisgICAgICAgICgnLXcgMicsIE5TKHc9JzInLCB4PU5vbmUsIHk9J3NwYW0nLCB6PTg0KSksCisgICAgICAgICgnLXgnLCBOUyh3PU5vbmUsIHg9NDIsIHk9J3NwYW0nLCB6PTg0KSksCisgICAgICAgICgnLXggMicsIE5TKHc9Tm9uZSwgeD0nMicsIHk9J3NwYW0nLCB6PTg0KSksCisgICAgICAgICgnLXknLCBOUyh3PU5vbmUsIHg9Tm9uZSwgeT1Ob25lLCB6PTg0KSksCisgICAgICAgICgnLXkgMicsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PScyJywgej04NCkpLAorICAgICAgICAoJy16JywgTlModz1Ob25lLCB4PU5vbmUsIHk9J3NwYW0nLCB6PTQyKSksCisgICAgICAgICgnLXogMicsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PSdzcGFtJywgej0yKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOYXJnc1plcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYW4gYXJncyBmb3IgYW4gT3B0aW9uYWwgdGhhdCBhY2NlcHRzIHplcm8gb3IgbW9yZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG5hcmdzPScqJyksCisgICAgICAgIFNpZygnLXknLCBuYXJncz0nKicsIGRlZmF1bHQ9J3NwYW0nKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9J3NwYW0nKSksCisgICAgICAgICgnLXgnLCBOUyh4PVtdLCB5PSdzcGFtJykpLAorICAgICAgICAoJy14IGEnLCBOUyh4PVsnYSddLCB5PSdzcGFtJykpLAorICAgICAgICAoJy14IGEgYicsIE5TKHg9WydhJywgJ2InXSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteScsIE5TKHg9Tm9uZSwgeT1bXSkpLAorICAgICAgICAoJy15IGEnLCBOUyh4PU5vbmUsIHk9WydhJ10pKSwKKyAgICAgICAgKCcteSBhIGInLCBOUyh4PU5vbmUsIHk9WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3NPbmVPck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYW4gYXJncyBmb3IgYW4gT3B0aW9uYWwgdGhhdCBhY2NlcHRzIG9uZSBvciBtb3JlIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbmFyZ3M9JysnKSwKKyAgICAgICAgU2lnKCcteScsIG5hcmdzPScrJywgZGVmYXVsdD0nc3BhbScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICcteCcsICcteScsICdhIC14JywgJ2EgLXkgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD1bJ2EnXSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteCBhIGInLCBOUyh4PVsnYScsICdiJ10sIHk9J3NwYW0nKSksCisgICAgICAgICgnLXkgYScsIE5TKHg9Tm9uZSwgeT1bJ2EnXSkpLAorICAgICAgICAoJy15IGEgYicsIE5TKHg9Tm9uZSwgeT1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNDaG9pY2VzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIHRoZSBjaG9pY2VzIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctZicsIGNob2ljZXM9J2FiYycpLAorICAgICAgICBTaWcoJy1nJywgdHlwZT1pbnQsIGNob2ljZXM9cmFuZ2UoNSkpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy1mIGQnLCAnLWZhZCcsICctZ2EnLCAnLWcgNiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGY9Tm9uZSwgZz1Ob25lKSksCisgICAgICAgICgnLWYgYScsIE5TKGY9J2EnLCBnPU5vbmUpKSwKKyAgICAgICAgKCctZiBjJywgTlMoZj0nYycsIGc9Tm9uZSkpLAorICAgICAgICAoJy1nIDAnLCBOUyhmPU5vbmUsIGc9MCkpLAorICAgICAgICAoJy1nIDAzJywgTlMoZj1Ob25lLCBnPTMpKSwKKyAgICAgICAgKCctZmIgLWc0JywgTlMoZj0nYicsIGc9NCkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzUmVxdWlyZWQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBhbiBvcHRpb25hbCBhY3Rpb24gdGhhdCBpcyByZXF1aXJlZCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9aW50LCByZXF1aXJlZD1UcnVlKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLXggMScsIE5TKHg9MSkpLAorICAgICAgICAoJy14NDInLCBOUyh4PTQyKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25TdG9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIHN0b3JlIGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcsIGFjdGlvbj0nc3RvcmUnKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICdhIC14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lKSksCisgICAgICAgICgnLXhmb28nLCBOUyh4PSdmb28nKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25TdG9yZUNvbnN0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgc3RvcmVfY29uc3QgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy15JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PW9iamVjdCldCisgICAgZmFpbHVyZXMgPSBbJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh5PU5vbmUpKSwKKyAgICAgICAgKCcteScsIE5TKHk9b2JqZWN0KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25TdG9yZUZhbHNlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgc3RvcmVfZmFsc2UgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy16JywgYWN0aW9uPSdzdG9yZV9mYWxzZScpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy16YScsICcteiBhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoej1UcnVlKSksCisgICAgICAgICgnLXonLCBOUyh6PUZhbHNlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25TdG9yZVRydWUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBzdG9yZV90cnVlIGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctLWFwcGxlJywgYWN0aW9uPSdzdG9yZV90cnVlJyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLS1hcHBsZT1iJywgJy0tYXBwbGUgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGFwcGxlPUZhbHNlKSksCisgICAgICAgICgnLS1hcHBsZScsIE5TKGFwcGxlPVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvbkFwcGVuZChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIGFwcGVuZCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLS1iYXonLCBhY3Rpb249J2FwcGVuZCcpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy0tYmF6JywgJ2EgLS1iYXonLCAnLS1iYXogYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYmF6PU5vbmUpKSwKKyAgICAgICAgKCctLWJheiBhJywgTlMoYmF6PVsnYSddKSksCisgICAgICAgICgnLS1iYXogYSAtLWJheiBiJywgTlMoYmF6PVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvbkFwcGVuZFdpdGhEZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgYXBwZW5kIGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctLWJheicsIGFjdGlvbj0nYXBwZW5kJywgZGVmYXVsdD1bJ1gnXSldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLS1iYXonLCAnYSAtLWJheicsICctLWJheiBhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiYXo9WydYJ10pKSwKKyAgICAgICAgKCctLWJheiBhJywgTlMoYmF6PVsnWCcsICdhJ10pKSwKKyAgICAgICAgKCctLWJheiBhIC0tYmF6IGInLCBOUyhiYXo9WydYJywgJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25BcHBlbmRDb25zdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIGFwcGVuZF9jb25zdCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy1iJywgYWN0aW9uPSdhcHBlbmRfY29uc3QnLCBjb25zdD1FeGNlcHRpb24pLAorICAgICAgICBTaWcoJy1jJywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSdiJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJywgJy1jJywgJ2EgLWMnLCAnLWJ4JywgJy1iIHgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiPU5vbmUpKSwKKyAgICAgICAgKCctYicsIE5TKGI9W0V4Y2VwdGlvbl0pKSwKKyAgICAgICAgKCctYiAtY3ggLWIgLWN5eicsIE5TKGI9W0V4Y2VwdGlvbiwgJ3gnLCBFeGNlcHRpb24sICd5eiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25BcHBlbmRDb25zdFdpdGhEZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgYXBwZW5kX2NvbnN0IGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLWInLCBhY3Rpb249J2FwcGVuZF9jb25zdCcsIGNvbnN0PUV4Y2VwdGlvbiwgZGVmYXVsdD1bJ1gnXSksCisgICAgICAgIFNpZygnLWMnLCBhY3Rpb249J2FwcGVuZCcsIGRlc3Q9J2InKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLWMnLCAnYSAtYycsICctYngnLCAnLWIgeCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGI9WydYJ10pKSwKKyAgICAgICAgKCctYicsIE5TKGI9WydYJywgRXhjZXB0aW9uXSkpLAorICAgICAgICAoJy1iIC1jeCAtYiAtY3l6JywgTlMoYj1bJ1gnLCBFeGNlcHRpb24sICd4JywgRXhjZXB0aW9uLCAneXonXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uQ291bnQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBjb3VudCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBhY3Rpb249J2NvdW50JyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLXggYScsICcteCBiJywgJy14IGEgLXggYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14JywgTlMoeD0xKSksCisgICAgXQorCisKKyMgPT09PT09PT09PT09PT09PQorIyBQb3NpdGlvbmFsIHRlc3RzCisjID09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB0aGF0IGRvZXNuJ3Qgc3BlY2lmeSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLXgnLCAnYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB0aGF0IHNwZWNpZmllcyBhbiBuYXJncyBvZiAxIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9MSldCisgICAgZmFpbHVyZXMgPSBbJycsICcteCcsICdhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPVsnYSddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzMihQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBzcGVjaWZpZXMgYW4gbmFyZ3Mgb2YgMiIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTIpXQorICAgIGZhaWx1cmVzID0gWycnLCAnYScsICcteCcsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBzcGVjaWZpZXMgdW5saW1pdGVkIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JyonKV0KKyAgICBmYWlsdXJlcyA9IFsnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289W10pKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPVsnYSddKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NaZXJvT3JNb3JlRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBzcGVjaWZpZXMgdW5saW1pdGVkIG5hcmdzIGFuZCBhIGRlZmF1bHQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKicsIGRlZmF1bHQ9J2JhcicpXQorICAgIGZhaWx1cmVzID0gWycteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz0nYmFyJykpLAorICAgICAgICAoJ2EnLCBOUyhmb289WydhJ10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09uZU9yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBzcGVjaWZpZXMgb25lIG9yIG1vcmUgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPVsnYSddKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgYW4gT3B0aW9uYWwgUG9zaXRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JyldCisgICAgZmFpbHVyZXMgPSBbJy14JywgJ2EgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz1Ob25lKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbERlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGFuIE9wdGlvbmFsIFBvc2l0aW9uYWwgd2l0aCBhIGRlZmF1bHQgdmFsdWUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nPycsIGRlZmF1bHQ9NDIpXQorICAgIGZhaWx1cmVzID0gWycteCcsICdhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289NDIpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsQ29udmVydGVkRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgYW4gT3B0aW9uYWwgUG9zaXRpb25hbCB3aXRoIGEgZGVmYXVsdCB2YWx1ZQorICAgIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgorICAgICIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nLCBuYXJncz0nPycsIHR5cGU9aW50LCBkZWZhdWx0PSc0MicpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnYSBiJywgJzEgMiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz00MikpLAorICAgICAgICAoJzEnLCBOUyhmb289MSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHR3byBQb3NpdGlvbmFscyB0aGF0IGRvbid0IHNwZWNpZnkgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKSwgU2lnKCdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy14JywgJ2EnLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9J2InKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZTEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggbm8gbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggMSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycpLCBTaWcoJ2JhcicsIG5hcmdzPTEpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnczJOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIDIgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggbm9uZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTIpLCBTaWcoJ2JhcicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdhIGInLCAnYSBiIGMgZCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj0nYycpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBubyBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCB1bmxpbWl0ZWQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKSwgU2lnKCdiYXInLCBuYXJncz0nKicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJywgYmFyPVtdKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289J2EnLCBiYXI9WydiJywgJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVPbmVPck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggbm8gbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggb25lIG9yIG1vcmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKSwgU2lnKCdiYXInLCBuYXJncz0nKycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYicsICdjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lT3B0aW9uYWwoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggbm8gbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKSwgU2lnKCdiYXInLCBuYXJncz0nPycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJywgYmFyPU5vbmUpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9J2InKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzWmVyb09yTW9yZU5vbmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggdW5saW1pdGVkIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIG5vbmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKicpLCBTaWcoJ2JhcicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPVtdLCBiYXI9J2EnKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYSddLCBiYXI9J2InKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPSdjJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09uZU9yTW9yZU5vbmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggb25lIG9yIG1vcmUgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggbm9uZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPScrJyksIFNpZygnYmFyJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYSddLCBiYXI9J2InKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPSdjJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsTm9uZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBhbiBPcHRpb25hbCBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCBub25lIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PTQyKSwgU2lnKCdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz00MiwgYmFyPSdhJykpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj0nYicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MyWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCAyIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIHVubGltaXRlZCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTIpLCBTaWcoJ2JhcicsIG5hcmdzPScqJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1bXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnczJPbmVPck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggMiBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCBvbmUgb3IgbW9yZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTIpLCBTaWcoJ2JhcicsIG5hcmdzPScrJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJywgJ2EgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnczJPcHRpb25hbChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCAyIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSBvcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTIpLCBTaWcoJ2JhcicsIG5hcmdzPSc/JyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJywgJ2EgYiBjIGQnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJywgJ2InXSwgYmFyPU5vbmUpKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9J2MnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzWmVyb09yTW9yZTEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggdW5saW1pdGVkIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIDEiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKicpLCBTaWcoJ2JhcicsIG5hcmdzPTEpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCBdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289W10sIGJhcj1bJ2EnXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnXSwgYmFyPVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPVsnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT25lT3JNb3JlMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBvbmUgb3IgbW9yZSBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCAxIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JysnKSwgU2lnKCdiYXInLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJ10sIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBhbiBPcHRpb25hbCBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCAxIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9Jz8nKSwgU2lnKCdiYXInLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1Ob25lLCBiYXI9WydhJ10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lWmVyb09yTW9yZTEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhyZWUgUG9zaXRpb25hbHM6IG5vIG5hcmdzLCB1bmxpbWl0ZWQgbmFyZ3MgYW5kIDEgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9JyonKSwKKyAgICAgICAgU2lnKCdiYXonLCBuYXJncz0xKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVtdLCBiYXo9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSwgYmF6PVsnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZU9uZU9yTW9yZTEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhyZWUgUG9zaXRpb25hbHM6IG5vIG5hcmdzLCBvbmUgb3IgbW9yZSBuYXJncyBhbmQgMSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nKSwKKyAgICAgICAgU2lnKCdiYXInLCBuYXJncz0nKycpLAorICAgICAgICBTaWcoJ2JheicsIG5hcmdzPTEpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnLCAnYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9WydjJ10pKSwKKyAgICAgICAgKCdhIGIgYyBkJywgTlMoZm9vPSdhJywgYmFyPVsnYicsICdjJ10sIGJhej1bJ2QnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVPcHRpb25hbDEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhyZWUgUG9zaXRpb25hbHM6IG5vIG5hcmdzLCBvcHRpb25hbCBuYXJnIGFuZCAxIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPSc/JywgZGVmYXVsdD0wLjYyNSksCisgICAgICAgIFNpZygnYmF6JywgbmFyZ3M9MSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj0wLjYyNSwgYmF6PVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289J2EnLCBiYXI9J2InLCBiYXo9WydjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbE9wdGlvbmFsKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHR3byBvcHRpb25hbCBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPSc/JywgZGVmYXVsdD00MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWZvbycsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz1Ob25lLCBiYXI9NDIpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJywgYmFyPTQyKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPSdiJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCBuYXJnIGZvbGxvd2VkIGJ5IHVubGltaXRlZCBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JyksIFNpZygnYmFyJywgbmFyZ3M9JyonKV0KKyAgICBmYWlsdXJlcyA9IFsnLS1mb28nXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSwgYmFyPVtdKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScsIGJhcj1bXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYicsICdjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbE9uZU9yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCBuYXJnIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9Jz8nKSwgU2lnKCdiYXInLCBuYXJncz0nKycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPU5vbmUsIGJhcj1bJ2EnXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYicsICdjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzQ2hvaWNlc1N0cmluZyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIHNldCBvZiBzaW5nbGUtY2hhcmFjdGVyIGNob2ljZXMiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdzcGFtJywgY2hvaWNlcz1zZXQoJ2FiY2RlZmcnKSldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdoJywgJzQyJywgJ2VmJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKHNwYW09J2EnKSksCisgICAgICAgICgnZycsIE5TKHNwYW09J2cnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc0Nob2ljZXNJbnQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBzZXQgb2YgaW50ZWdlciBjaG9pY2VzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnc3BhbScsIHR5cGU9aW50LCBjaG9pY2VzPXJhbmdlKDIwKSldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdoJywgJzQyJywgJ2VmJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnNCcsIE5TKHNwYW09NCkpLAorICAgICAgICAoJzE1JywgTlMoc3BhbT0xNSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNBY3Rpb25BcHBlbmQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlICdhcHBlbmQnIGFjdGlvbiIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdzcGFtJywgYWN0aW9uPSdhcHBlbmQnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgYWN0aW9uPSdhcHBlbmQnLCBuYXJncz0yKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJywgJ2EgYicsICdhIGIgYyBkJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiIGMnLCBOUyhzcGFtPVsnYScsIFsnYicsICdjJ11dKSksCisgICAgXQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQ29tYmluZWQgb3B0aW9uYWxzIGFuZCBwb3NpdGlvbmFscyB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RPcHRpb25hbHNOdW1lcmljQW5kUG9zaXRpb25hbHMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIG5lZ2F0aXZlIG51bWJlciBhcmdzIHdoZW4gbnVtZXJpYyBvcHRpb25zIGFyZSBwcmVzZW50IiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ3gnLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJy00JywgZGVzdD0neScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLTInLCAnLTMxNSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT1GYWxzZSkpLAorICAgICAgICAoJ2EnLCBOUyh4PSdhJywgeT1GYWxzZSkpLAorICAgICAgICAoJy00JywgTlMoeD1Ob25lLCB5PVRydWUpKSwKKyAgICAgICAgKCctNCBhJywgTlMoeD0nYScsIHk9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWxtb3N0TnVtZXJpY0FuZFBvc2l0aW9uYWxzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBuZWdhdGl2ZSBudW1iZXIgYXJncyB3aGVuIGFsbW9zdCBudW1lcmljIG9wdGlvbnMgYXJlIHByZXNlbnQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygneCcsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnLWs0JywgZGVzdD0neScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLWszJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PUZhbHNlKSksCisgICAgICAgICgnLTInLCBOUyh4PSctMicsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdhJywgTlMoeD0nYScsIHk9RmFsc2UpKSwKKyAgICAgICAgKCctazQnLCBOUyh4PU5vbmUsIHk9VHJ1ZSkpLAorICAgICAgICAoJy1rNCBhJywgTlMoeD0nYScsIHk9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0RW1wdHlBbmRTcGFjZUNvbnRhaW5pbmdBcmd1bWVudHMoUGFyc2VyVGVzdENhc2UpOgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCd4JywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCcteScsICctLXl5eScsIGRlc3Q9J3knKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy15J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgIChbJyddLCBOUyh4PScnLCB5PU5vbmUpKSwKKyAgICAgICAgKFsnYSBiYWRnZXInXSwgTlMoeD0nYSBiYWRnZXInLCB5PU5vbmUpKSwKKyAgICAgICAgKFsnLWEgYmFkZ2VyJ10sIE5TKHg9Jy1hIGJhZGdlcicsIHk9Tm9uZSkpLAorICAgICAgICAoWycteScsICcnXSwgTlMoeD1Ob25lLCB5PScnKSksCisgICAgICAgIChbJy15JywgJ2EgYmFkZ2VyJ10sIE5TKHg9Tm9uZSwgeT0nYSBiYWRnZXInKSksCisgICAgICAgIChbJy15JywgJy1hIGJhZGdlciddLCBOUyh4PU5vbmUsIHk9Jy1hIGJhZGdlcicpKSwKKyAgICAgICAgKFsnLS15eXk9YSBiYWRnZXInXSwgTlMoeD1Ob25lLCB5PSdhIGJhZGdlcicpKSwKKyAgICAgICAgKFsnLS15eXk9LWEgYmFkZ2VyJ10sIE5TKHg9Tm9uZSwgeT0nLWEgYmFkZ2VyJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UHJlZml4Q2hhcmFjdGVyT25seUFyZ3VtZW50cyhQYXJzZXJUZXN0Q2FzZSk6CisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByZWZpeF9jaGFycz0nLSsnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLScsIGRlc3Q9J3gnLCBuYXJncz0nPycsIGNvbnN0PSdiYWRnZXInKSwKKyAgICAgICAgU2lnKCcrJywgZGVzdD0neScsIHR5cGU9aW50LCBkZWZhdWx0PTQyKSwKKyAgICAgICAgU2lnKCctKy0nLCBkZXN0PSd6JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteScsICcrIC0nXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9NDIsIHo9RmFsc2UpKSwKKyAgICAgICAgKCctJywgTlMoeD0nYmFkZ2VyJywgeT00Miwgej1GYWxzZSkpLAorICAgICAgICAoJy0gWCcsIE5TKHg9J1gnLCB5PTQyLCB6PUZhbHNlKSksCisgICAgICAgICgnKyAtMycsIE5TKHg9Tm9uZSwgeT0tMywgej1GYWxzZSkpLAorICAgICAgICAoJy0rLScsIE5TKHg9Tm9uZSwgeT00Miwgej1UcnVlKSksCisgICAgICAgICgnLSA9PT0nLCBOUyh4PSc9PT0nLCB5PTQyLCB6PUZhbHNlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3ROYXJnc1plcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYW4gYXJncyBmb3IgYW4gT3B0aW9uYWwgdGhhdCBhY2NlcHRzIHplcm8gb3IgbW9yZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JywgbmFyZ3M9JyonKSwgU2lnKCd5JywgbmFyZ3M9JyonKV0KKyAgICBmYWlsdXJlcyA9IFtdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT1bXSkpLAorICAgICAgICAoJy14JywgTlMoeD1bXSwgeT1bXSkpLAorICAgICAgICAoJy14IGEnLCBOUyh4PVsnYSddLCB5PVtdKSksCisgICAgICAgICgnLXggYSAtLSBiJywgTlMoeD1bJ2EnXSwgeT1bJ2InXSkpLAorICAgICAgICAoJ2EnLCBOUyh4PU5vbmUsIHk9WydhJ10pKSwKKyAgICAgICAgKCdhIC14JywgTlMoeD1bXSwgeT1bJ2EnXSkpLAorICAgICAgICAoJ2EgLXggYicsIE5TKHg9WydiJ10sIHk9WydhJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE5hcmdzUmVtYWluZGVyKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGEgcG9zaXRpb25hbCB3aXRoIG5hcmdzPVJFTUFJTkRFUiIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ3gnKSwgU2lnKCd5JywgbmFyZ3M9Jy4uLicpLCBTaWcoJy16JyldCisgICAgZmFpbHVyZXMgPSBbJycsICcteicsICcteiBaJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnWCcsIE5TKHg9J1gnLCB5PVtdLCB6PU5vbmUpKSwKKyAgICAgICAgKCcteiBaIFgnLCBOUyh4PSdYJywgeT1bXSwgej0nWicpKSwKKyAgICAgICAgKCdYIEEgQiAteiBaJywgTlMoeD0nWCcsIHk9WydBJywgJ0InLCAnLXonLCAnWiddLCB6PU5vbmUpKSwKKyAgICAgICAgKCdYIFkgLS1mb28nLCBOUyh4PSdYJywgeT1bJ1knLCAnLS1mb28nXSwgej1Ob25lKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25MaWtlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBvcHRpb25zIHRoYXQgbWF5IG9yIG1heSBub3QgYmUgYXJndW1lbnRzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1mbG9hdCksCisgICAgICAgIFNpZygnLTMnLCB0eXBlPWZsb2F0LCBkZXN0PSd5JyksCisgICAgICAgIFNpZygneicsIG5hcmdzPScqJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCcsICcteTIuNScsICcteGEnLCAnLXggLWEnLAorICAgICAgICAgICAgICAgICcteCAtMycsICcteCAtMy41JywgJy0zIC0zLjUnLAorICAgICAgICAgICAgICAgICcteCAtMi41JywgJy14IC0yLjUgYScsICctMyAtLjUnLAorICAgICAgICAgICAgICAgICdhIHggLTEnLCAnLXggLTEgYScsICctMyAtMSBhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PU5vbmUsIHo9W10pKSwKKyAgICAgICAgKCcteCAyLjUnLCBOUyh4PTIuNSwgeT1Ob25lLCB6PVtdKSksCisgICAgICAgICgnLXggMi41IGEnLCBOUyh4PTIuNSwgeT1Ob25lLCB6PVsnYSddKSksCisgICAgICAgICgnLTMuNScsIE5TKHg9Tm9uZSwgeT0wLjUsIHo9W10pKSwKKyAgICAgICAgKCctMy0uNScsIE5TKHg9Tm9uZSwgeT0tMC41LCB6PVtdKSksCisgICAgICAgICgnLTMgLjUnLCBOUyh4PU5vbmUsIHk9MC41LCB6PVtdKSksCisgICAgICAgICgnYSAtMy41JywgTlMoeD1Ob25lLCB5PTAuNSwgej1bJ2EnXSkpLAorICAgICAgICAoJ2EnLCBOUyh4PU5vbmUsIHk9Tm9uZSwgej1bJ2EnXSkpLAorICAgICAgICAoJ2EgLXggMScsIE5TKHg9MS4wLCB5PU5vbmUsIHo9WydhJ10pKSwKKyAgICAgICAgKCcteCAxIGEnLCBOUyh4PTEuMCwgeT1Ob25lLCB6PVsnYSddKSksCisgICAgICAgICgnLTMgMSBhJywgTlMoeD1Ob25lLCB5PTEuMCwgej1bJ2EnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0RGVmYXVsdFN1cHByZXNzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFjdGlvbnMgd2l0aCBzdXBwcmVzc2VkIGRlZmF1bHRzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycsIG5hcmdzPSc/JywgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9JyonLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTKSwKKyAgICAgICAgU2lnKCctLWJheicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUygpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJy0tYmF6JywgTlMoYmF6PVRydWUpKSwKKyAgICAgICAgKCdhIC0tYmF6JywgTlMoZm9vPSdhJywgYmF6PVRydWUpKSwKKyAgICAgICAgKCctLWJheiBhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10sIGJhej1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQYXJzZXJEZWZhdWx0U3VwcHJlc3MoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYWN0aW9ucyB3aXRoIGEgcGFyc2VyLWxldmVsIGRlZmF1bHQgb2YgU1VQUFJFU1MiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoYXJndW1lbnRfZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9JyonKSwKKyAgICAgICAgU2lnKCctLWJheicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUygpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJy0tYmF6JywgTlMoYmF6PVRydWUpKSwKKyAgICAgICAgKCdhIC0tYmF6JywgTlMoZm9vPSdhJywgYmF6PVRydWUpKSwKKyAgICAgICAgKCctLWJheiBhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10sIGJhej1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQYXJzZXJEZWZhdWx0NDIoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYWN0aW9ucyB3aXRoIGEgcGFyc2VyLWxldmVsIGRlZmF1bHQgb2YgNDIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoYXJndW1lbnRfZGVmYXVsdD00MiwgdmVyc2lvbj0nMS4wJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9JyonKSwKKyAgICAgICAgU2lnKCctLWJheicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289NDIsIGJhcj00MiwgYmF6PTQyKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScsIGJhcj00MiwgYmF6PTQyKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9NDIpKSwKKyAgICAgICAgKCctLWJheicsIE5TKGZvbz00MiwgYmFyPTQyLCBiYXo9VHJ1ZSkpLAorICAgICAgICAoJ2EgLS1iYXonLCBOUyhmb289J2EnLCBiYXI9NDIsIGJhej1UcnVlKSksCisgICAgICAgICgnLS1iYXogYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0QXJndW1lbnRzRnJvbUZpbGUoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCByZWFkaW5nIGFyZ3VtZW50cyBmcm9tIGEgZmlsZSIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0QXJndW1lbnRzRnJvbUZpbGUsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgZmlsZV90ZXh0cyA9IFsKKyAgICAgICAgICAgICgnaGVsbG8nLCAnaGVsbG8gd29ybGQhXG4nKSwKKyAgICAgICAgICAgICgncmVjdXJzaXZlJywgJy1hXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICdBXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICdAaGVsbG8nKSwKKyAgICAgICAgICAgICgnaW52YWxpZCcsICdAbm8tc3VjaC1wYXRoXG4nKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgcGF0aCwgdGV4dCBpbiBmaWxlX3RleHRzOgorICAgICAgICAgICAgZmlsZSA9IG9wZW4ocGF0aCwgJ3cnKQorICAgICAgICAgICAgZmlsZS53cml0ZSh0ZXh0KQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKGZyb21maWxlX3ByZWZpeF9jaGFycz0nQCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctYScpLAorICAgICAgICBTaWcoJ3gnKSwKKyAgICAgICAgU2lnKCd5JywgbmFyZ3M9JysnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJycsICctYicsICdYJywgJ0BpbnZhbGlkJywgJ0BtaXNzaW5nJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnWCBZJywgTlMoYT1Ob25lLCB4PSdYJywgeT1bJ1knXSkpLAorICAgICAgICAoJ1ggLWEgQSBZIFonLCBOUyhhPSdBJywgeD0nWCcsIHk9WydZJywgJ1onXSkpLAorICAgICAgICAoJ0BoZWxsbyBYJywgTlMoYT1Ob25lLCB4PSdoZWxsbyB3b3JsZCEnLCB5PVsnWCddKSksCisgICAgICAgICgnWCBAaGVsbG8nLCBOUyhhPU5vbmUsIHg9J1gnLCB5PVsnaGVsbG8gd29ybGQhJ10pKSwKKyAgICAgICAgKCctYSBCIEByZWN1cnNpdmUgWSBaJywgTlMoYT0nQScsIHg9J2hlbGxvIHdvcmxkIScsIHk9WydZJywgJ1onXSkpLAorICAgICAgICAoJ1ggQHJlY3Vyc2l2ZSBaIC1hIEInLCBOUyhhPSdCJywgeD0nWCcsIHk9WydoZWxsbyB3b3JsZCEnLCAnWiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RBcmd1bWVudHNGcm9tRmlsZUNvbnZlcnRlcihUZW1wRGlyTWl4aW4sIFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHJlYWRpbmcgYXJndW1lbnRzIGZyb20gYSBmaWxlIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RBcmd1bWVudHNGcm9tRmlsZUNvbnZlcnRlciwgc2VsZikuc2V0VXAoKQorICAgICAgICBmaWxlX3RleHRzID0gWworICAgICAgICAgICAgKCdoZWxsbycsICdoZWxsbyB3b3JsZCFcbicpLAorICAgICAgICBdCisgICAgICAgIGZvciBwYXRoLCB0ZXh0IGluIGZpbGVfdGV4dHM6CisgICAgICAgICAgICBmaWxlID0gb3BlbihwYXRoLCAndycpCisgICAgICAgICAgICBmaWxlLndyaXRlKHRleHQpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKworICAgIGNsYXNzIEZyb21GaWxlQ29udmVydGVyQXJndW1lbnRQYXJzZXIoRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIpOgorCisgICAgICAgIGRlZiBjb252ZXJ0X2FyZ19saW5lX3RvX2FyZ3Moc2VsZiwgYXJnX2xpbmUpOgorICAgICAgICAgICAgZm9yIGFyZyBpbiBhcmdfbGluZS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBhcmcuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB5aWVsZCBhcmcKKyAgICBwYXJzZXJfY2xhc3MgPSBGcm9tRmlsZUNvbnZlcnRlckFyZ3VtZW50UGFyc2VyCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhmcm9tZmlsZV9wcmVmaXhfY2hhcnM9J0AnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygneScsIG5hcmdzPScrJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gW10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnQGhlbGxvIFgnLCBOUyh5PVsnaGVsbG8nLCAnd29ybGQhJywgJ1gnXSkpLAorICAgIF0KKworCisjID09PT09PT09PT09PT09PT09PT09PQorIyBUeXBlIGNvbnZlcnNpb24gdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RGaWxlVHlwZVJlcHIoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcihzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCdyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3InKSIsIHJlcHIodHlwZSkpCisKKyAgICBkZWYgdGVzdF93Yl8xKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3diJywgMSkiLCByZXByKHR5cGUpKQorCisKK2NsYXNzIFJGaWxlKG9iamVjdCk6CisgICAgc2VlbiA9IHt9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG90aGVyIGluIHNlbGYuc2VlbjoKKyAgICAgICAgICAgIHRleHQgPSBzZWxmLnNlZW5bb3RoZXJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXh0ID0gc2VsZi5zZWVuW290aGVyXSA9IG90aGVyLnJlYWQoKQorICAgICAgICAgICAgb3RoZXIuY2xvc2UoKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0ZXh0LCBzdHIpOgorICAgICAgICAgICAgdGV4dCA9IHRleHQuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgPT0gb3RoZXIubmFtZSA9PSB0ZXh0CisKKworY2xhc3MgVGVzdEZpbGVUeXBlUihUZW1wRGlyTWl4aW4sIFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBGaWxlVHlwZSBvcHRpb24vYXJndW1lbnQgdHlwZSBmb3IgcmVhZGluZyBmaWxlcyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0RmlsZVR5cGVSLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIGZvciBmaWxlX25hbWUgaW4gWydmb28nLCAnYmFyJ106CisgICAgICAgICAgICBmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgZmlsZV9uYW1lKSwgJ3cnKQorICAgICAgICAgICAgZmlsZS53cml0ZShmaWxlX25hbWUpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jcmVhdGVfcmVhZG9ubHlfZmlsZSgncmVhZG9ubHknKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoKSksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3InKSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCcsICcteCBiYXInLCAnbm9uLWV4aXN0ZW50LWZpbGUudHh0J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnZm9vJywgTlMoeD1Ob25lLCBzcGFtPVJGaWxlKCdmb28nKSkpLAorICAgICAgICAoJy14IGZvbyBiYXInLCBOUyh4PVJGaWxlKCdmb28nKSwgc3BhbT1SRmlsZSgnYmFyJykpKSwKKyAgICAgICAgKCdiYXIgLXggZm9vJywgTlMoeD1SRmlsZSgnZm9vJyksIHNwYW09UkZpbGUoJ2JhcicpKSksCisgICAgICAgICgnLXggLSAtJywgTlMoeD1zeXMuc3RkaW4sIHNwYW09c3lzLnN0ZGluKSksCisgICAgICAgICgncmVhZG9ubHknLCBOUyh4PU5vbmUsIHNwYW09UkZpbGUoJ3JlYWRvbmx5JykpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEZpbGVUeXBlUkIoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgRmlsZVR5cGUgb3B0aW9uL2FyZ3VtZW50IHR5cGUgZm9yIHJlYWRpbmcgZmlsZXMiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEZpbGVUeXBlUkIsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBbJ2ZvbycsICdiYXInXToKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLnRlbXBfZGlyLCBmaWxlX25hbWUpLCAndycpCisgICAgICAgICAgICBmaWxlLndyaXRlKGZpbGVfbmFtZSkKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3JiJykpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCdyYicpKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJy14IGJhciddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2ZvbycsIE5TKHg9Tm9uZSwgc3BhbT1SRmlsZSgnZm9vJykpKSwKKyAgICAgICAgKCcteCBmb28gYmFyJywgTlMoeD1SRmlsZSgnZm9vJyksIHNwYW09UkZpbGUoJ2JhcicpKSksCisgICAgICAgICgnYmFyIC14IGZvbycsIE5TKHg9UkZpbGUoJ2ZvbycpLCBzcGFtPVJGaWxlKCdiYXInKSkpLAorICAgICAgICAoJy14IC0gLScsIE5TKHg9c3lzLnN0ZGluLCBzcGFtPXN5cy5zdGRpbikpLAorICAgIF0KKworCitjbGFzcyBXRmlsZShvYmplY3QpOgorICAgIHNlZW4gPSBzZXQoKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBvdGhlciBub3QgaW4gc2VsZi5zZWVuOgorICAgICAgICAgICAgdGV4dCA9ICdDaGVjayB0aGF0IGZpbGUgaXMgd3JpdGFibGUuJworICAgICAgICAgICAgaWYgJ2InIGluIG90aGVyLm1vZGU6CisgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuZW5jb2RlKCdhc2NpaScpCisgICAgICAgICAgICBvdGhlci53cml0ZSh0ZXh0KQorICAgICAgICAgICAgb3RoZXIuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5zZWVuLmFkZChvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lCisKKworY2xhc3MgVGVzdEZpbGVUeXBlVyhUZW1wRGlyTWl4aW4sIFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBGaWxlVHlwZSBvcHRpb24vYXJndW1lbnQgdHlwZSBmb3Igd3JpdGluZyBmaWxlcyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0RmlsZVR5cGVXLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuY3JlYXRlX3JlYWRvbmx5X2ZpbGUoJ3JlYWRvbmx5JykKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnLXggYmFyJ10KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnLXggYmFyJywgJ3JlYWRvbmx5J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnZm9vJywgTlMoeD1Ob25lLCBzcGFtPVdGaWxlKCdmb28nKSkpLAorICAgICAgICAoJy14IGZvbyBiYXInLCBOUyh4PVdGaWxlKCdmb28nKSwgc3BhbT1XRmlsZSgnYmFyJykpKSwKKyAgICAgICAgKCdiYXIgLXggZm9vJywgTlMoeD1XRmlsZSgnZm9vJyksIHNwYW09V0ZpbGUoJ2JhcicpKSksCisgICAgICAgICgnLXggLSAtJywgTlMoeD1zeXMuc3Rkb3V0LCBzcGFtPXN5cy5zdGRvdXQpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEZpbGVUeXBlV0IoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgnd2InKSksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJykpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnLXggYmFyJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnZm9vJywgTlMoeD1Ob25lLCBzcGFtPVdGaWxlKCdmb28nKSkpLAorICAgICAgICAoJy14IGZvbyBiYXInLCBOUyh4PVdGaWxlKCdmb28nKSwgc3BhbT1XRmlsZSgnYmFyJykpKSwKKyAgICAgICAgKCdiYXIgLXggZm9vJywgTlMoeD1XRmlsZSgnZm9vJyksIHNwYW09V0ZpbGUoJ2JhcicpKSksCisgICAgICAgICgnLXggLSAtJywgTlMoeD1zeXMuc3Rkb3V0LCBzcGFtPXN5cy5zdGRvdXQpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFR5cGVDYWxsYWJsZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBzb21lIGNhbGxhYmxlcyBhcyBvcHRpb24vYXJndW1lbnQgdHlwZXMiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1lZ2dzJywgdHlwZT1jb21wbGV4KSwKKyAgICAgICAgU2lnKCdzcGFtJywgdHlwZT1mbG9hdCksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJywgJzQyaicsICctLWVnZ3MgYScsICctLWVnZ3MgMmknXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctLWVnZ3M9NDIgNDInLCBOUyhlZ2dzPTQyLCBzcGFtPTQyLjApKSwKKyAgICAgICAgKCctLWVnZ3MgMmogLS0gLTEuNScsIE5TKGVnZ3M9MmosIHNwYW09LTEuNSkpLAorICAgICAgICAoJzEwMjQuNjc1JywgTlMoZWdncz1Ob25lLCBzcGFtPTEwMjQuNjc1KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlVXNlckRlZmluZWQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSB1c2VyLWRlZmluZWQgb3B0aW9uL2FyZ3VtZW50IHR5cGUiIiIKKworICAgIGNsYXNzIE15VHlwZShUZXN0Q2FzZSk6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuICh0eXBlKHNlbGYpLCBzZWxmLnZhbHVlKSA9PSAodHlwZShvdGhlciksIG90aGVyLnZhbHVlKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9TXlUeXBlKSwKKyAgICAgICAgU2lnKCdzcGFtJywgdHlwZT1NeVR5cGUpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFtdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgLXggYicsIE5TKHg9TXlUeXBlKCdiJyksIHNwYW09TXlUeXBlKCdhJykpKSwKKyAgICAgICAgKCcteGYgZycsIE5TKHg9TXlUeXBlKCdmJyksIHNwYW09TXlUeXBlKCdnJykpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFR5cGVDbGFzc2ljQ2xhc3MoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBjbGFzc2ljIGNsYXNzIHR5cGUiIiIKKworICAgIGNsYXNzIEM6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuICh0eXBlKHNlbGYpLCBzZWxmLnZhbHVlKSA9PSAodHlwZShvdGhlciksIG90aGVyLnZhbHVlKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9QyksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9QyksCisgICAgXQorICAgIGZhaWx1cmVzID0gW10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSAteCBiJywgTlMoeD1DKCdiJyksIHNwYW09QygnYScpKSksCisgICAgICAgICgnLXhmIGcnLCBOUyh4PUMoJ2YnKSwgc3BhbT1DKCdnJykpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFR5cGVSZWdpc3RyYXRpb24oVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSB1c2VyLWRlZmluZWQgdHlwZSBieSByZWdpc3RlcmluZyBpdCIiIgorCisgICAgZGVmIHRlc3Qoc2VsZik6CisKKyAgICAgICAgZGVmIGdldF9teV90eXBlKHN0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gJ215X3R5cGV7JXN9JyAlIHN0cmluZworCisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnJlZ2lzdGVyKCd0eXBlJywgJ215X3R5cGUnLCBnZXRfbXlfdHlwZSkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCB0eXBlPSdteV90eXBlJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgneScsIHR5cGU9J215X3R5cGUnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJzEnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKHg9Tm9uZSwgeT0nbXlfdHlwZXsxfScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCcteCAxIDQyJy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyh4PSdteV90eXBlezF9JywgeT0nbXlfdHlwZXs0Mn0nKSkKKworCisjID09PT09PT09PT09PQorIyBBY3Rpb24gdGVzdHMKKyMgPT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBY3Rpb25Vc2VyRGVmaW5lZChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIHVzZXItZGVmaW5lZCBvcHRpb24vYXJndW1lbnQgYWN0aW9uIiIiCisKKyAgICBjbGFzcyBPcHRpb25hbEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgorCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWUsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBjaGVjayBkZXN0aW5hdGlvbiBhbmQgb3B0aW9uIHN0cmluZworICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLmRlc3QgPT0gJ3NwYW0nLCAnZGVzdDogJXMnICUgc2VsZi5kZXN0CisgICAgICAgICAgICAgICAgYXNzZXJ0IG9wdGlvbl9zdHJpbmcgPT0gJy1zJywgJ2ZsYWc6ICVzJyAlIG9wdGlvbl9zdHJpbmcKKyAgICAgICAgICAgICAgICAjIHdoZW4gb3B0aW9uIGlzIGJlZm9yZSBhcmd1bWVudCwgYmFkZ2VyPTIsIGFuZCB3aGVuCisgICAgICAgICAgICAgICAgIyBvcHRpb24gaXMgYWZ0ZXIgYXJndW1lbnQsIGJhZGdlcj08d2hhdGV2ZXIgd2FzIHNldD4KKyAgICAgICAgICAgICAgICBleHBlY3RlZF9ucyA9IE5TKHNwYW09MC4yNSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBbMC4xMjUsIDAuNjI1XToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbnMuYmFkZ2VyID0gMgorICAgICAgICAgICAgICAgIGVsaWYgdmFsdWUgaW4gWzIuMF06CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zLmJhZGdlciA9IDg0CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ3ZhbHVlOiAlcycgJSB2YWx1ZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfbnMgPT0gbmFtZXNwYWNlLCAoJ2V4cGVjdGVkICVzLCBnb3QgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX25zLCBuYW1lc3BhY2UpKQorICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50UGFyc2VyRXJyb3IoJ29wdF9hY3Rpb24gZmFpbGVkOiAlcycgJSBlKQorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsICdzcGFtJywgdmFsdWUpCisKKyAgICBjbGFzcyBQb3NpdGlvbmFsQWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6CisKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZSwgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhc3NlcnQgb3B0aW9uX3N0cmluZyBpcyBOb25lLCAoJ29wdGlvbl9zdHJpbmc6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmcpCisgICAgICAgICAgICAgICAgIyBjaGVjayBkZXN0aW5hdGlvbgorICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLmRlc3QgPT0gJ2JhZGdlcicsICdkZXN0OiAlcycgJSBzZWxmLmRlc3QKKyAgICAgICAgICAgICAgICAjIHdoZW4gYXJndW1lbnQgaXMgYmVmb3JlIG9wdGlvbiwgc3BhbT0wLjI1LCBhbmQgd2hlbgorICAgICAgICAgICAgICAgICMgb3B0aW9uIGlzIGFmdGVyIGFyZ3VtZW50LCBzcGFtPTx3aGF0ZXZlciB3YXMgc2V0PgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zID0gTlMoYmFkZ2VyPTIpCisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaW4gWzQyLCA4NF06CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zLnNwYW0gPSAwLjI1CisgICAgICAgICAgICAgICAgZWxpZiB2YWx1ZSBpbiBbMV06CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zLnNwYW0gPSAwLjYyNQorICAgICAgICAgICAgICAgIGVsaWYgdmFsdWUgaW4gWzJdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5zcGFtID0gMC4xMjUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndmFsdWU6ICVzJyAlIHZhbHVlKQorICAgICAgICAgICAgICAgIGFzc2VydCBleHBlY3RlZF9ucyA9PSBuYW1lc3BhY2UsICgnZXhwZWN0ZWQgJXMsIGdvdCAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfbnMsIG5hbWVzcGFjZSkpCisgICAgICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CisgICAgICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRQYXJzZXJFcnJvcignYXJnX2FjdGlvbiBmYWlsZWQ6ICVzJyAlIGUpCisgICAgICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgJ2JhZGdlcicsIHZhbHVlKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctcycsIGRlc3Q9J3NwYW0nLCBhY3Rpb249T3B0aW9uYWxBY3Rpb24sCisgICAgICAgICAgICB0eXBlPWZsb2F0LCBkZWZhdWx0PTAuMjUpLAorICAgICAgICBTaWcoJ2JhZGdlcicsIGFjdGlvbj1Qb3NpdGlvbmFsQWN0aW9uLAorICAgICAgICAgICAgdHlwZT1pbnQsIG5hcmdzPSc/JywgZGVmYXVsdD0yKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctczAuMTI1JywgTlMoc3BhbT0wLjEyNSwgYmFkZ2VyPTIpKSwKKyAgICAgICAgKCc0MicsIE5TKHNwYW09MC4yNSwgYmFkZ2VyPTQyKSksCisgICAgICAgICgnLXMgMC42MjUgMScsIE5TKHNwYW09MC42MjUsIGJhZGdlcj0xKSksCisgICAgICAgICgnODQgLXMyJywgTlMoc3BhbT0yLjAsIGJhZGdlcj04NCkpLAorICAgIF0KKworCitjbGFzcyBUZXN0QWN0aW9uUmVnaXN0cmF0aW9uKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgdXNlci1kZWZpbmVkIGFjdGlvbiBzdXBwbGllZCBieSByZWdpc3RlcmluZyBpdCIiIgorCisgICAgY2xhc3MgTXlBY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKKworICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsICdmb29bJXNdJyAlIHZhbHVlcykKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorCisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnJlZ2lzdGVyKCdhY3Rpb24nLCAnbXlfYWN0aW9uJywgc2VsZi5NeUFjdGlvbikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFkZ2VyJywgYWN0aW9uPSdteV9hY3Rpb24nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoWycxJ10pLCBOUyhiYWRnZXI9J2Zvb1sxXScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKFsnNDInXSksIE5TKGJhZGdlcj0nZm9vWzQyXScpKQorCisKKyMgPT09PT09PT09PT09PT09PQorIyBTdWJwYXJzZXJzIHRlc3RzCisjID09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEFkZFN1YnBhcnNlcnMoVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIGFkZF9zdWJwYXJzZXJzIG1ldGhvZCIiIgorCisgICAgZGVmIGFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9nZXRfcGFyc2VyKHNlbGYsIHN1YnBhcnNlcl9oZWxwPUZhbHNlLCBwcmVmaXhfY2hhcnM9Tm9uZSk6CisgICAgICAgICMgY3JlYXRlIGEgcGFyc2VyIHdpdGggYSBzdWJwYXJzZXJzIGFyZ3VtZW50CisgICAgICAgIGlmIHByZWZpeF9jaGFyczoKKyAgICAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKAorICAgICAgICAgICAgICAgIHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nbWFpbiBkZXNjcmlwdGlvbicsIHByZWZpeF9jaGFycz1wcmVmaXhfY2hhcnMpCisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgICAgIHByZWZpeF9jaGFyc1swXSAqIDIgKyAnZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nZm9vIGhlbHAnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoCisgICAgICAgICAgICAgICAgcHJvZz0nUFJPRycsIGRlc2NyaXB0aW9uPSdtYWluIGRlc2NyaXB0aW9uJykKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAgICAgJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nZm9vIGhlbHAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgJ2JhcicsIHR5cGU9ZmxvYXQsIGhlbHA9J2JhciBoZWxwJykKKworICAgICAgICAjIGNoZWNrIHRoYXQgb25seSBvbmUgc3VicGFyc2VycyBhcmd1bWVudCBjYW4gYmUgYWRkZWQKKyAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhoZWxwPSdjb21tYW5kIGhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLmFkZF9zdWJwYXJzZXJzKQorCisgICAgICAgICMgYWRkIGZpcnN0IHN1Yi1wYXJzZXIKKyAgICAgICAgcGFyc2VyMV9rd2FyZ3MgPSBkaWN0KGRlc2NyaXB0aW9uPScxIGRlc2NyaXB0aW9uJykKKyAgICAgICAgaWYgc3VicGFyc2VyX2hlbHA6CisgICAgICAgICAgICBwYXJzZXIxX2t3YXJnc1snaGVscCddID0gJzEgaGVscCcKKyAgICAgICAgcGFyc2VyMSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignMScsICoqcGFyc2VyMV9rd2FyZ3MpCisgICAgICAgIHBhcnNlcjEuYWRkX2FyZ3VtZW50KCctdycsIHR5cGU9aW50LCBoZWxwPSd3IGhlbHAnKQorICAgICAgICBwYXJzZXIxLmFkZF9hcmd1bWVudCgneCcsIGNob2ljZXM9J2FiYycsIGhlbHA9J3ggaGVscCcpCisKKyAgICAgICAgIyBhZGQgc2Vjb25kIHN1Yi1wYXJzZXIKKyAgICAgICAgcGFyc2VyMl9rd2FyZ3MgPSBkaWN0KGRlc2NyaXB0aW9uPScyIGRlc2NyaXB0aW9uJykKKyAgICAgICAgaWYgc3VicGFyc2VyX2hlbHA6CisgICAgICAgICAgICBwYXJzZXIyX2t3YXJnc1snaGVscCddID0gJzIgaGVscCcKKyAgICAgICAgcGFyc2VyMiA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignMicsICoqcGFyc2VyMl9rd2FyZ3MpCisgICAgICAgIHBhcnNlcjIuYWRkX2FyZ3VtZW50KCcteScsIGNob2ljZXM9JzEyMycsIGhlbHA9J3kgaGVscCcpCisgICAgICAgIHBhcnNlcjIuYWRkX2FyZ3VtZW50KCd6JywgdHlwZT1jb21wbGV4LCBuYXJncz0nKicsIGhlbHA9J3ogaGVscCcpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIG1haW4gcGFyc2VyCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEFkZFN1YnBhcnNlcnMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKCkKKyAgICAgICAgc2VsZi5jb21tYW5kX2hlbHBfcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcihzdWJwYXJzZXJfaGVscD1UcnVlKQorCisgICAgZGVmIHRlc3RfcGFyc2VfYXJnc19mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgIyBjaGVjayBzb21lIGZhaWx1cmUgY2FzZXM6CisgICAgICAgIGZvciBhcmdzX3N0ciBpbiBbJycsICdhJywgJ2EgYScsICcwLjUgYScsICcwLjUgMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzAuNSAxIC15JywgJzAuNSAyIC13J106CisgICAgICAgICAgICBhcmdzID0gYXJnc19zdHIuc3BsaXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9hcmdzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHNvbWUgbm9uLWZhaWx1cmUgY2FzZXM6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKCcwLjUgMSBiIC13IDcnLnNwbGl0KCkpLAorICAgICAgICAgICAgTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncygnMC4yNSAtLWZvbyAyIC15IDIgM2ogLS0gLTFqJy5zcGxpdCgpKSwKKyAgICAgICAgICAgIE5TKGZvbz1UcnVlLCBiYXI9MC4yNSwgeT0nMicsIHo9WzNqLCAtMWpdKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncygnLS1mb28gMC4xMjUgMSBjJy5zcGxpdCgpKSwKKyAgICAgICAgICAgIE5TKGZvbz1UcnVlLCBiYXI9MC4xMjUsIHc9Tm9uZSwgeD0nYycpLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9wYXJzZV9rbm93bl9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IDEgYiAtdyA3Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbXSksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoJzAuNSAtcCAxIGIgLXcgNycuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwgWyctcCddKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IDEgYiAtdyA3IC1wJy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbJy1wJ10pLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCcwLjUgMSBiIC1xIC1ycyAtdyA3Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbJy1xJywgJy1ycyddKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IC1XIDEgYiAtWCBZIC13IDcgWicuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwgWyctVycsICctWCcsICdZJywgJ1onXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Rlc3Qoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKGRlc3Q9J2JhcicpCisgICAgICAgIHBhcnNlcjEgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzEnKQorICAgICAgICBwYXJzZXIxLmFkZF9hcmd1bWVudCgnYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyhmb289RmFsc2UsIGJhcj0nMScsIGJhej0nMicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKCcxIDInLnNwbGl0KCkpKQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5mb3JtYXRfdXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciB7MSwyfSAuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMn0gLi4uCisKKyAgICAgICAgICAgIG1haW4gZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIGJhciAgICAgICAgIGJhciBoZWxwCisgICAgICAgICAgICAgIHsxLDJ9ICAgICAgIGNvbW1hbmQgaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLS1mb28gICAgICAgZm9vIGhlbHAKKyAgICAgICAgICAgICcnJykpCisKKyAgICBkZWYgdGVzdF9oZWxwX2V4dHJhX3ByZWZpeF9jaGFycyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgLSBpcyBzdGlsbCB1c2VkIGZvciBoZWxwIGlmIGl0IGlzIGEgbm9uLWZpcnN0IHByZWZpeCBjaGFyCisgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIocHJlZml4X2NoYXJzPScrOi0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfdXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndXNhZ2U6IFBST0cgWy1oXSBbKytmb29dIGJhciB7MSwyfSAuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsrK2Zvb10gYmFyIHsxLDJ9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorICAgICAgICAgICAgICB7MSwyfSAgICAgICBjb21tYW5kIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgICsrZm9vICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisKKyAgICBkZWYgdGVzdF9oZWxwX2FsdGVybmF0ZV9wcmVmaXhfY2hhcnMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIocHJlZml4X2NoYXJzPScrOi8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfdXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndXNhZ2U6IFBST0cgWytoXSBbKytmb29dIGJhciB7MSwyfSAuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbK2hdIFsrK2Zvb10gYmFyIHsxLDJ9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorICAgICAgICAgICAgICB7MSwyfSAgICAgICBjb21tYW5kIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAraCwgKytoZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgICsrZm9vICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIHRlc3RfcGFyc2VyX2NvbW1hbmRfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbW1hbmRfaGVscF9wYXJzZXIuZm9ybWF0X3VzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMn0gLi4uXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tbWFuZF9oZWxwX3BhcnNlci5mb3JtYXRfaGVscCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvb10gYmFyIHsxLDJ9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorICAgICAgICAgICAgICB7MSwyfSAgICAgICBjb21tYW5kIGhlbHAKKyAgICAgICAgICAgICAgICAxICAgICAgICAgMSBoZWxwCisgICAgICAgICAgICAgICAgMiAgICAgICAgIDIgaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLS1mb28gICAgICAgZm9vIGhlbHAKKyAgICAgICAgICAgICcnJykpCisKKyAgICBkZWYgdGVzdF9zdWJwYXJzZXJfdGl0bGVfaGVscChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdtYWluIGRlc2NyaXB0aW9uJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdmb28gaGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIGhlbHA9J2JhciBoZWxwJykKKyAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyh0aXRsZT0nc3ViY29tbWFuZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdjb21tYW5kIGhlbHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FkZGl0aW9uYWwgdGV4dCcpCisgICAgICAgIHBhcnNlcjEgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzEnKQorICAgICAgICBwYXJzZXIyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X3VzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMn0gLi4uXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciB7MSwyfSAuLi4KKworICAgICAgICAgICAgbWFpbiBkZXNjcmlwdGlvbgorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgYmFyICAgICAgICAgYmFyIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC0tZm9vICAgICAgIGZvbyBoZWxwCisKKyAgICAgICAgICAgIHN1YmNvbW1hbmRzOgorICAgICAgICAgICAgICBjb21tYW5kIGhlbHAKKworICAgICAgICAgICAgICB7MSwyfSAgICAgICBhZGRpdGlvbmFsIHRleHQKKyAgICAgICAgICAgICcnJykpCisKKyAgICBkZWYgX3Rlc3Rfc3VicGFyc2VyX2hlbHAoc2VsZiwgYXJnc19zdHIsIGV4cGVjdGVkX2hlbHApOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKGFyZ3Nfc3RyLnNwbGl0KCkpCisgICAgICAgIGV4Y2VwdCBBcmd1bWVudFBhcnNlckVycm9yOgorICAgICAgICAgICAgZXJyID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIGlmIGVyci5zdGRvdXQgIT0gZXhwZWN0ZWRfaGVscDoKKyAgICAgICAgICAgICAgICBwcmludChyZXByKGV4cGVjdGVkX2hlbHApKQorICAgICAgICAgICAgICAgIHByaW50KHJlcHIoZXJyLnN0ZG91dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5zdGRvdXQsIGV4cGVjdGVkX2hlbHApCisKKyAgICBkZWYgdGVzdF9zdWJwYXJzZXIxX2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc3VicGFyc2VyX2hlbHAoJzUuMCAxIC1oJywgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIGJhciAxIFstaF0gWy13IFddIHthLGIsY30KKworICAgICAgICAgICAgMSBkZXNjcmlwdGlvbgorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAge2EsYixjfSAgICAgeCBoZWxwCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAtdyBXICAgICAgICB3IGhlbHAKKyAgICAgICAgICAgICcnJykpCisKKyAgICBkZWYgdGVzdF9zdWJwYXJzZXIyX2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc3VicGFyc2VyX2hlbHAoJzUuMCAyIC1oJywgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIGJhciAyIFstaF0gWy15IHsxLDIsM31dIFt6IFt6IC4uLl1dCisKKyAgICAgICAgICAgIDIgZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIHogICAgICAgICAgIHogaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLXkgezEsMiwzfSAgeSBoZWxwCisgICAgICAgICAgICAnJycpKQorCisjID09PT09PT09PT09PQorIyBHcm91cHMgdGVzdHMKKyMgPT09PT09PT09PT09CisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc0dyb3VwcyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhhdCBvcmRlciBvZiBncm91cCBwb3NpdGlvbmFscyBtYXRjaGVzIGNvbnN0cnVjdGlvbiBvcmRlciIiIgorCisgICAgZGVmIHRlc3Rfbm9uZ3JvdXBfZmlyc3Qoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdnJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCdiYXInKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXonKQorICAgICAgICBleHBlY3RlZCA9IE5TKGZvbz0nMScsIGJhcj0nMicsIGJhej0nMycpCisgICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZV9hcmdzKCcxIDIgMycuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfZ3JvdXBfZmlyc3Qoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCd4eHgnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ2ZvbycpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JheicpCisgICAgICAgIGV4cGVjdGVkID0gTlMoZm9vPScxJywgYmFyPScyJywgYmF6PSczJykKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlX2FyZ3MoJzEgMiAzJy5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9pbnRlcmxlYXZlZF9ncm91cHMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCd4eHgnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ2JhcicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JheicpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgneXl5JykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCdmcmVsbCcpCisgICAgICAgIGV4cGVjdGVkID0gTlMoZm9vPScxJywgYmFyPScyJywgYmF6PSczJywgZnJlbGw9JzQnKQorICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2VfYXJncygnMSAyIDMgNCcuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0KQorCisjID09PT09PT09PT09PT09PT09PT0KKyMgUGFyZW50IHBhcnNlciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RQYXJlbnRQYXJzZXJzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGF0IHBhcnNlcnMgY2FuIGJlIGNyZWF0ZWQgd2l0aCBwYXJlbnQgcGFyc2VycyIiIgorCisgICAgZGVmIGFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0UGFyZW50UGFyc2Vycywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnd4eXpfcGFyZW50ID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHNlbGYud3h5el9wYXJlbnQuYWRkX2FyZ3VtZW50KCctLXcnKQorICAgICAgICB4X2dyb3VwID0gc2VsZi53eHl6X3BhcmVudC5hZGRfYXJndW1lbnRfZ3JvdXAoJ3gnKQorICAgICAgICB4X2dyb3VwLmFkZF9hcmd1bWVudCgnLXknKQorICAgICAgICBzZWxmLnd4eXpfcGFyZW50LmFkZF9hcmd1bWVudCgneicpCisKKyAgICAgICAgc2VsZi5hYmNkX3BhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBzZWxmLmFiY2RfcGFyZW50LmFkZF9hcmd1bWVudCgnYScpCisgICAgICAgIHNlbGYuYWJjZF9wYXJlbnQuYWRkX2FyZ3VtZW50KCctYicpCisgICAgICAgIGNfZ3JvdXAgPSBzZWxmLmFiY2RfcGFyZW50LmFkZF9hcmd1bWVudF9ncm91cCgnYycpCisgICAgICAgIGNfZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWQnKQorCisgICAgICAgIHNlbGYud19wYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgc2VsZi53X3BhcmVudC5hZGRfYXJndW1lbnQoJy0tdycpCisKKyAgICAgICAgc2VsZi56X3BhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBzZWxmLnpfcGFyZW50LmFkZF9hcmd1bWVudCgneicpCisKKyAgICAgICAgIyBwYXJlbnRzIHdpdGggbXV0dWFsbHkgZXhjbHVzaXZlIGdyb3VwcworICAgICAgICBzZWxmLmFiX211dGV4X3BhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBncm91cCA9IHNlbGYuYWJfbXV0ZXhfcGFyZW50LmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1hJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisKKyAgICAgICAgc2VsZi5tYWluX3Byb2dyYW0gPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3BhcmVudChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1bc2VsZi53eHl6X3BhcmVudF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJy15IDEgMiAtLXcgMycuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlModz0nMycsIHk9JzEnLCB6PScyJykpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfcGFyZW50X211dGV4KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X211dGV4X2FiKHNlbGYuYWJfbXV0ZXhfcGFyZW50LnBhcnNlX2FyZ3MpCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3NlbGYuYWJfbXV0ZXhfcGFyZW50XSkKKyAgICAgICAgc2VsZi5fdGVzdF9tdXRleF9hYihwYXJzZXIucGFyc2VfYXJncykKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9ncmFucGFyZW50X211dGV4KHNlbGYpOgorICAgICAgICBwYXJlbnRzID0gW3NlbGYuYWJfbXV0ZXhfcGFyZW50XQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSwgcGFyZW50cz1wYXJlbnRzKQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJzZXJdKQorICAgICAgICBzZWxmLl90ZXN0X211dGV4X2FiKHBhcnNlci5wYXJzZV9hcmdzKQorCisgICAgZGVmIF90ZXN0X211dGV4X2FiKHNlbGYsIHBhcnNlX2FyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX2FyZ3MoW10pLCBOUyhhPUZhbHNlLCBiPUZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9hcmdzKFsnLWEnXSksIE5TKGE9VHJ1ZSwgYj1GYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfYXJncyhbJy1iJ10pLCBOUyhhPUZhbHNlLCBiPVRydWUpKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VfYXJncywgWyctYScsICctYiddKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VfYXJncywgWyctYicsICctYSddKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VfYXJncywgWyctYyddKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VfYXJncywgWyctYScsICctYyddKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VfYXJncywgWyctYicsICctYyddKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfcGFyZW50cyhzZWxmKToKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLmFiY2RfcGFyZW50LCBzZWxmLnd4eXpfcGFyZW50XQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJy0tZCAxIC0tdyAyIDMgNCcuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoYT0nMycsIGI9Tm9uZSwgZD0nMScsIHc9JzInLCB5PU5vbmUsIHo9JzQnKSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3BhcmVudHNfbXV0ZXgoc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbc2VsZi5hYl9tdXRleF9wYXJlbnQsIHNlbGYud3h5el9wYXJlbnRdCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnLWEgLS13IDIgMycuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoYT1UcnVlLCBiPUZhbHNlLCB3PScyJywgeT1Ob25lLCB6PSczJykpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcigKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzLCAnLWEgLS13IDIgMyAtYicuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKAorICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MsICctYSAtYiAtLXcgMiAzJy5zcGxpdCgpKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RpbmdfcGFyZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhcmdwYXJzZS5Bcmd1bWVudEVycm9yLAorICAgICAgICAgICAgYXJncGFyc2UuQXJndW1lbnRQYXJzZXIsCisgICAgICAgICAgICBwYXJlbnRzPVtzZWxmLndfcGFyZW50LCBzZWxmLnd4eXpfcGFyZW50XSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX3BhcmVudHNfbXV0ZXgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXJncGFyc2UuQXJndW1lbnRFcnJvciwKKyAgICAgICAgICAgIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLAorICAgICAgICAgICAgcGFyZW50cz1bc2VsZi5hYmNkX3BhcmVudCwgc2VsZi5hYl9tdXRleF9wYXJlbnRdKQorCisgICAgZGVmIHRlc3Rfc2FtZV9hcmd1bWVudF9uYW1lX3BhcmVudHMoc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbc2VsZi53eHl6X3BhcmVudCwgc2VsZi56X3BhcmVudF0KKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1wYXJlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCcxIDInLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKHc9Tm9uZSwgeT1Ob25lLCB6PScyJykpCisKKyAgICBkZWYgdGVzdF9zdWJwYXJzZXJfcGFyZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKyAgICAgICAgYWJjZGVfcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdiYXInLCBwYXJlbnRzPVtzZWxmLmFiY2RfcGFyZW50XSkKKyAgICAgICAgYWJjZGVfcGFyc2VyLmFkZF9hcmd1bWVudCgnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJ2JhciAtYiAxIC0tZCAyIDMgNCcuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoYT0nMycsIGI9JzEnLCBkPScyJywgZT0nNCcpKQorCisgICAgZGVmIHRlc3Rfc3VicGFyc2VyX3BhcmVudHNfbXV0ZXgoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycygpCisgICAgICAgIHBhcmVudHMgPSBbc2VsZi5hYl9tdXRleF9wYXJlbnRdCisgICAgICAgIGFiY19wYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2ZvbycsIHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgY19ncm91cCA9IGFiY19wYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdjX2dyb3VwJykKKyAgICAgICAgY19ncm91cC5hZGRfYXJndW1lbnQoJ2MnKQorICAgICAgICBwYXJlbnRzID0gW3NlbGYud3h5el9wYXJlbnQsIHNlbGYuYWJfbXV0ZXhfcGFyZW50XQorICAgICAgICB3eHl6YWJlX3BhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYmFyJywgcGFyZW50cz1wYXJlbnRzKQorICAgICAgICB3eHl6YWJlX3BhcnNlci5hZGRfYXJndW1lbnQoJ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCdmb28gLWEgNCcuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoYT1UcnVlLCBiPUZhbHNlLCBjPSc0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJ2JhciAtYiAgLS13IDIgMyA0Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyhhPUZhbHNlLCBiPVRydWUsIHc9JzInLCB5PU5vbmUsIHo9JzMnLCBlPSc0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcigKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzLCAnZm9vIC1hIC1iIDQnLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcigKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzLCAnYmFyIC1iIC1hIDQnLnNwbGl0KCkpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRfaGVscChzZWxmKToKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLmFiY2RfcGFyZW50LCBzZWxmLnd4eXpfcGFyZW50XQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIHBhcnNlcl9oZWxwID0gcGFyc2VyLmZvcm1hdF9oZWxwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJfaGVscCwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiB7fSBbLWhdIFstYiBCXSBbLS1kIERdIFstLXcgV10gWy15IFldIGEgegorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgYQorICAgICAgICAgICAgICB6CisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAtYiBCCisgICAgICAgICAgICAgIC0tdyBXCisKKyAgICAgICAgICAgIGM6CisgICAgICAgICAgICAgIC0tZCBECisKKyAgICAgICAgICAgIHg6CisgICAgICAgICAgICAgIC15IFkKKyAgICAgICAgJycnLmZvcm1hdChzZWxmLm1haW5fcHJvZ3JhbSkpKQorCisgICAgZGVmIHRlc3RfZ3JvdXBzX3BhcmVudHMoc2VsZik6CisgICAgICAgIHBhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBnID0gcGFyZW50LmFkZF9hcmd1bWVudF9ncm91cCh0aXRsZT0nZycsIGRlc2NyaXB0aW9uPSdnZCcpCisgICAgICAgIGcuYWRkX2FyZ3VtZW50KCctdycpCisgICAgICAgIGcuYWRkX2FyZ3VtZW50KCcteCcpCisgICAgICAgIG0gPSBwYXJlbnQuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIG0uYWRkX2FyZ3VtZW50KCcteScpCisgICAgICAgIG0uYWRkX2FyZ3VtZW50KCcteicpCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3BhcmVudF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgcGFyc2VyLnBhcnNlX2FyZ3MsCisgICAgICAgICAgICBbJy15JywgJ1knLCAnLXonLCAnWiddKQorCisgICAgICAgIHBhcnNlcl9oZWxwID0gcGFyc2VyLmZvcm1hdF9oZWxwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJfaGVscCwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiB7fSBbLWhdIFstdyBXXSBbLXggWF0gWy15IFkgfCAteiBaXQorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLXkgWQorICAgICAgICAgICAgICAteiBaCisKKyAgICAgICAgICAgIGc6CisgICAgICAgICAgICAgIGdkCisKKyAgICAgICAgICAgICAgLXcgVworICAgICAgICAgICAgICAteCBYCisgICAgICAgICcnJy5mb3JtYXQoc2VsZi5tYWluX3Byb2dyYW0pKSkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgTXV0dWFsbHkgZXhjbHVzaXZlIGdyb3VwIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVHcm91cEVycm9ycyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FkZF9hcmd1bWVudF9ncm91cChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcworICAgICAgICByYWlzZXMoVHlwZUVycm9yLCBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCwgdGl0bGU9J2ZvbycpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FkZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgYWRkX2FyZ3VtZW50ID0gZ3JvdXAuYWRkX2FyZ3VtZW50CisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBhZGRfYXJndW1lbnQsICctLWZvbycsIHJlcXVpcmVkPVRydWUpCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBhZGRfYXJndW1lbnQsICdiYXInKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgYWRkX2FyZ3VtZW50LCAnYmFyJywgbmFyZ3M9JysnKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgYWRkX2FyZ3VtZW50LCAnYmFyJywgbmFyZ3M9MSkKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIGFkZF9hcmd1bWVudCwgJ2JhcicsIG5hcmdzPWFyZ3BhcnNlLlBBUlNFUikKKworICAgIGRlZiB0ZXN0X2hlbHAoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBncm91cDEgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIGdyb3VwMS5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgZ3JvdXAxLmFkZF9hcmd1bWVudCgnLS1iYXInLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgICAgZ3JvdXAyID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBncm91cDIuYWRkX2FyZ3VtZW50KCctLXNvdXAnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBncm91cDIuYWRkX2FyZ3VtZW50KCctLW51dHMnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgICAgZXhwZWN0ZWQgPSAnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyB8IC0tYmFyXSBbLS1zb3VwIHwgLS1udXRzXQorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLS1mb28KKyAgICAgICAgICAgICAgLS1iYXIKKyAgICAgICAgICAgICAgLS1zb3VwCisgICAgICAgICAgICAgIC0tbnV0cworICAgICAgICAgICAgICAnJycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KGV4cGVjdGVkKSkKKworY2xhc3MgTUVNaXhpbihvYmplY3QpOgorCisgICAgZGVmIHRlc3RfZmFpbHVyZXNfd2hlbl9ub3RfcmVxdWlyZWQoc2VsZik6CisgICAgICAgIHBhcnNlX2FyZ3MgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9RmFsc2UpLnBhcnNlX2FyZ3MKKyAgICAgICAgZXJyb3IgPSBBcmd1bWVudFBhcnNlckVycm9yCisgICAgICAgIGZvciBhcmdzX3N0cmluZyBpbiBzZWxmLmZhaWx1cmVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHBhcnNlX2FyZ3MsIGFyZ3Nfc3RyaW5nLnNwbGl0KCkpCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlc193aGVuX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBwYXJzZV9hcmdzID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPVRydWUpLnBhcnNlX2FyZ3MKKyAgICAgICAgZXJyb3IgPSBBcmd1bWVudFBhcnNlckVycm9yCisgICAgICAgIGZvciBhcmdzX3N0cmluZyBpbiBzZWxmLmZhaWx1cmVzICsgWycnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCBwYXJzZV9hcmdzLCBhcmdzX3N0cmluZy5zcGxpdCgpKQorCisgICAgZGVmIHRlc3Rfc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBwYXJzZV9hcmdzID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPUZhbHNlKS5wYXJzZV9hcmdzCisgICAgICAgIHN1Y2Nlc3NlcyA9IHNlbGYuc3VjY2Vzc2VzICsgc2VsZi5zdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQKKyAgICAgICAgZm9yIGFyZ3Nfc3RyaW5nLCBleHBlY3RlZF9ucyBpbiBzdWNjZXNzZXM6CisgICAgICAgICAgICBhY3R1YWxfbnMgPSBwYXJzZV9hcmdzKGFyZ3Nfc3RyaW5nLnNwbGl0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9ucywgZXhwZWN0ZWRfbnMpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzZXNfd2hlbl9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgcGFyc2VfYXJncyA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1UcnVlKS5wYXJzZV9hcmdzCisgICAgICAgIGZvciBhcmdzX3N0cmluZywgZXhwZWN0ZWRfbnMgaW4gc2VsZi5zdWNjZXNzZXM6CisgICAgICAgICAgICBhY3R1YWxfbnMgPSBwYXJzZV9hcmdzKGFyZ3Nfc3RyaW5nLnNwbGl0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9ucywgZXhwZWN0ZWRfbnMpCisKKyAgICBkZWYgdGVzdF91c2FnZV93aGVuX25vdF9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgZm9ybWF0X3VzYWdlID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPUZhbHNlKS5mb3JtYXRfdXNhZ2UKKyAgICAgICAgZXhwZWN0ZWRfdXNhZ2UgPSBzZWxmLnVzYWdlX3doZW5fbm90X3JlcXVpcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X3VzYWdlKCksIHRleHR3cmFwLmRlZGVudChleHBlY3RlZF91c2FnZSkpCisKKyAgICBkZWYgdGVzdF91c2FnZV93aGVuX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBmb3JtYXRfdXNhZ2UgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9VHJ1ZSkuZm9ybWF0X3VzYWdlCisgICAgICAgIGV4cGVjdGVkX3VzYWdlID0gc2VsZi51c2FnZV93aGVuX3JlcXVpcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X3VzYWdlKCksIHRleHR3cmFwLmRlZGVudChleHBlY3RlZF91c2FnZSkpCisKKyAgICBkZWYgdGVzdF9oZWxwX3doZW5fbm90X3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBmb3JtYXRfaGVscCA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1GYWxzZSkuZm9ybWF0X2hlbHAKKyAgICAgICAgaGVscCA9IHNlbGYudXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgKyBzZWxmLmhlbHAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoaGVscCkpCisKKyAgICBkZWYgdGVzdF9oZWxwX3doZW5fcmVxdWlyZWQoc2VsZik6CisgICAgICAgIGZvcm1hdF9oZWxwID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPVRydWUpLmZvcm1hdF9oZWxwCisgICAgICAgIGhlbHAgPSBzZWxmLnVzYWdlX3doZW5fcmVxdWlyZWQgKyBzZWxmLmhlbHAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoaGVscCkpCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlU2ltcGxlKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkPU5vbmUpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWJhcicsIGhlbHA9J2JhciBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWJheicsIG5hcmdzPSc/JywgY29uc3Q9J1onLCBoZWxwPSdiYXogaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWyctLWJhciBYIC0tYmF6IFknLCAnLS1iYXIgWCAtLWJheiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tYmFyIFgnLCBOUyhiYXI9J1gnLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmFyIFggLS1iYXIgWicsIE5TKGJhcj0nWicsIGJhej1Ob25lKSksCisgICAgICAgICgnLS1iYXogWScsIE5TKGJhcj1Ob25lLCBiYXo9J1knKSksCisgICAgICAgICgnLS1iYXonLCBOUyhiYXI9Tm9uZSwgYmF6PSdaJykpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tYmFyIEJBUiB8IC0tYmF6IFtCQVpdXQorICAgICAgICAnJycKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdICgtLWJhciBCQVIgfCAtLWJheiBbQkFaXSkKKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWJhciBCQVIgICAgYmFyIGhlbHAKKyAgICAgICAgICAtLWJheiBbQkFaXSAgYmF6IGhlbHAKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlTG9uZyhNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZD1Ob25lKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYWJjZGUnLCBoZWxwPSdhYmNkZSBoZWxwJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mZ2hpaicsIGhlbHA9J2ZnaGlqIGhlbHAnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0ta2xtbm8nLCBoZWxwPSdrbG1ubyBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXBxcnN0JywgaGVscD0ncHFyc3QgaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWyctLWtsbW5vIFggLS1wcXJzdCBZJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1rbG1ubyBYJywgTlMoYWJjZGU9Tm9uZSwgZmdoaWo9Tm9uZSwga2xtbm89J1gnLCBwcXJzdD1Ob25lKSksCisgICAgICAgICgnLS1hYmNkZSBZIC0ta2xtbm8gWCcsCisgICAgICAgICAgICBOUyhhYmNkZT0nWScsIGZnaGlqPU5vbmUsIGtsbW5vPSdYJywgcHFyc3Q9Tm9uZSkpLAorICAgICAgICAoJy0tcHFyc3QgWCcsIE5TKGFiY2RlPU5vbmUsIGZnaGlqPU5vbmUsIGtsbW5vPU5vbmUsIHBxcnN0PSdYJykpLAorICAgICAgICAoJy0tcHFyc3QgWCAtLWZnaGlqIFknLAorICAgICAgICAgICAgTlMoYWJjZGU9Tm9uZSwgZmdoaWo9J1knLCBrbG1ubz1Ob25lLCBwcXJzdD0nWCcpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKGFiY2RlPU5vbmUsIGZnaGlqPU5vbmUsIGtsbW5vPU5vbmUsIHBxcnN0PU5vbmUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICB1c2FnZTogUFJPRyBbLWhdIFstLWFiY2RlIEFCQ0RFXSBbLS1mZ2hpaiBGR0hJSl0KKyAgICAgICAgICAgICAgICBbLS1rbG1ubyBLTE1OTyB8IC0tcHFyc3QgUFFSU1RdCisgICAgJycnCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9ICcnJ1wKKyAgICB1c2FnZTogUFJPRyBbLWhdIFstLWFiY2RlIEFCQ0RFXSBbLS1mZ2hpaiBGR0hJSl0KKyAgICAgICAgICAgICAgICAoLS1rbG1ubyBLTE1OTyB8IC0tcHFyc3QgUFFSU1QpCisgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgIC0tYWJjZGUgQUJDREUgIGFiY2RlIGhlbHAKKyAgICAgIC0tZmdoaWogRkdISUogIGZnaGlqIGhlbHAKKyAgICAgIC0ta2xtbm8gS0xNTk8gIGtsbW5vIGhlbHAKKyAgICAgIC0tcHFyc3QgUFFSU1QgIHBxcnN0IGhlbHAKKyAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVGaXJzdFN1cHByZXNzZWQoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCcteCcsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXknLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywgaGVscD0neSBoZWxwJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbJy14IFggLXknXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcteCBYJywgTlMoeD0nWCcsIHk9VHJ1ZSkpLAorICAgICAgICAoJy14IFggLXggWScsIE5TKHg9J1knLCB5PVRydWUpKSwKKyAgICAgICAgKCcteScsIE5TKHg9Tm9uZSwgeT1GYWxzZSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PVRydWUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXldCisgICAgICAgICcnJworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gLXkKKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC15ICAgICAgICAgIHkgaGVscAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVNYW55U3VwcHJlc3NlZChNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZCk6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBhZGQgPSBncm91cC5hZGRfYXJndW1lbnQKKyAgICAgICAgYWRkKCctLXNwYW0nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorICAgICAgICBhZGQoJy0tYmFkZ2VyJywgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisgICAgICAgIGFkZCgnLS1ibGFkZGVyJywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbCisgICAgICAgICctLXNwYW0gLS1iYWRnZXInLAorICAgICAgICAnLS1iYWRnZXIgLS1ibGFkZGVyIEInLAorICAgICAgICAnLS1ibGFkZGVyIEIgLS1zcGFtJywKKyAgICBdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tc3BhbScsIE5TKHNwYW09VHJ1ZSwgYmFkZ2VyPVRydWUsIGJsYWRkZXI9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZ2VyJywgTlMoc3BhbT1GYWxzZSwgYmFkZ2VyPUZhbHNlLCBibGFkZGVyPU5vbmUpKSwKKyAgICAgICAgKCctLWJsYWRkZXIgQicsIE5TKHNwYW09RmFsc2UsIGJhZGdlcj1UcnVlLCBibGFkZGVyPSdCJykpLAorICAgICAgICAoJy0tc3BhbSAtLXNwYW0nLCBOUyhzcGFtPVRydWUsIGJhZGdlcj1UcnVlLCBibGFkZGVyPU5vbmUpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKHNwYW09RmFsc2UsIGJhZGdlcj1UcnVlLCBibGFkZGVyPU5vbmUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0KKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbEFuZFBvc2l0aW9uYWwoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J0ZPTycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zcGFtJywgaGVscD0nU1BBTScpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnYmFkZ2VyJywgbmFyZ3M9JyonLCBkZWZhdWx0PSdYJywgaGVscD0nQkFER0VSJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbCisgICAgICAgICctLWZvbyAtLXNwYW0gUycsCisgICAgICAgICctLXNwYW0gUyBYJywKKyAgICAgICAgJ1ggLS1mb28nLAorICAgICAgICAnWCBZIFogLS1zcGFtIFMnLAorICAgICAgICAnLS1mb28gWCBZJywKKyAgICBdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tZm9vJywgTlMoZm9vPVRydWUsIHNwYW09Tm9uZSwgYmFkZ2VyPSdYJykpLAorICAgICAgICAoJy0tc3BhbSBTJywgTlMoZm9vPUZhbHNlLCBzcGFtPSdTJywgYmFkZ2VyPSdYJykpLAorICAgICAgICAoJ1gnLCBOUyhmb289RmFsc2UsIHNwYW09Tm9uZSwgYmFkZ2VyPVsnWCddKSksCisgICAgICAgICgnWCBZIFonLCBOUyhmb289RmFsc2UsIHNwYW09Tm9uZSwgYmFkZ2VyPVsnWCcsICdZJywgJ1onXSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoZm9vPUZhbHNlLCBzcGFtPU5vbmUsIGJhZGdlcj0nWCcpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gfCAtLXNwYW0gU1BBTSB8IGJhZGdlciBbYmFkZ2VyIC4uLl1dCisgICAgICAgICcnJworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gKC0tZm9vIHwgLS1zcGFtIFNQQU0gfCBiYWRnZXIgW2JhZGdlciAuLi5dKQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGJhZGdlciAgICAgICBCQURHRVIKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyAgICAgICAgRk9PCisgICAgICAgICAgLS1zcGFtIFNQQU0gIFNQQU0KKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxzTWl4ZWQoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSd4IGhlbHAnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1hJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYSBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2IgaGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy15JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0neSBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2MgaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWyctYSAtYicsICctYiAtYycsICctYSAtYycsICctYSAtYiAtYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy1hJywgTlMoYT1UcnVlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PUZhbHNlLCB5PUZhbHNlKSksCisgICAgICAgICgnLWInLCBOUyhhPUZhbHNlLCBiPVRydWUsIGM9RmFsc2UsIHg9RmFsc2UsIHk9RmFsc2UpKSwKKyAgICAgICAgKCctYycsIE5TKGE9RmFsc2UsIGI9RmFsc2UsIGM9VHJ1ZSwgeD1GYWxzZSwgeT1GYWxzZSkpLAorICAgICAgICAoJy1hIC14JywgTlMoYT1UcnVlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PVRydWUsIHk9RmFsc2UpKSwKKyAgICAgICAgKCcteSAtYicsIE5TKGE9RmFsc2UsIGI9VHJ1ZSwgYz1GYWxzZSwgeD1GYWxzZSwgeT1UcnVlKSksCisgICAgICAgICgnLXggLXkgLWMnLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPVRydWUsIHg9VHJ1ZSwgeT1UcnVlKSksCisgICAgXQorICAgIHN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZCA9IFsKKyAgICAgICAgKCcnLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PUZhbHNlLCB5PUZhbHNlKSksCisgICAgICAgICgnLXgnLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PVRydWUsIHk9RmFsc2UpKSwKKyAgICAgICAgKCcteScsIE5TKGE9RmFsc2UsIGI9RmFsc2UsIGM9RmFsc2UsIHg9RmFsc2UsIHk9VHJ1ZSkpLAorICAgIF0KKworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXhdIFstYV0gWy1iXSBbLXldIFstY10KKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14ICAgICAgICAgIHggaGVscAorICAgICAgICAgIC1hICAgICAgICAgIGEgaGVscAorICAgICAgICAgIC1iICAgICAgICAgIGIgaGVscAorICAgICAgICAgIC15ICAgICAgICAgIHkgaGVscAorICAgICAgICAgIC1jICAgICAgICAgIGMgaGVscAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVJbkdyb3VwKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkPU5vbmUpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgdGl0bGVkX2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgKKyAgICAgICAgICAgIHRpdGxlPSdUaXRsZWQgZ3JvdXAnLCBkZXNjcmlwdGlvbj0nR3JvdXAgZGVzY3JpcHRpb24nKQorICAgICAgICBtdXRleF9ncm91cCA9IFwKKyAgICAgICAgICAgIHRpdGxlZF9ncm91cC5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBtdXRleF9ncm91cC5hZGRfYXJndW1lbnQoJy0tYmFyJywgaGVscD0nYmFyIGhlbHAnKQorICAgICAgICBtdXRleF9ncm91cC5hZGRfYXJndW1lbnQoJy0tYmF6JywgaGVscD0nYmF6IGhlbHAnKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBmYWlsdXJlcyA9IFsnLS1iYXIgWCAtLWJheiBZJywgJy0tYmF6IFggLS1iYXIgWSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tYmFyIFgnLCBOUyhiYXI9J1gnLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmF6IFknLCBOUyhiYXI9Tm9uZSwgYmF6PSdZJykpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tYmFyIEJBUiB8IC0tYmF6IEJBWl0KKyAgICAgICAgJycnCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSAoLS1iYXIgQkFSIHwgLS1iYXogQkFaKQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKKyAgICAgICAgVGl0bGVkIGdyb3VwOgorICAgICAgICAgIEdyb3VwIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAtLWJhciBCQVIgICBiYXIgaGVscAorICAgICAgICAgIC0tYmF6IEJBWiAgIGJheiBoZWxwCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc0FuZFBvc2l0aW9uYWxzTWl4ZWQoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgneCcsIGhlbHA9J3ggaGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy15JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0neSBoZWxwJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCdhJywgbmFyZ3M9Jz8nLCBoZWxwPSdhIGhlbHAnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1iJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYiBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2MgaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWydYIEEgLWInLCAnLWIgLWMnLCAnLWMgWCBBJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnWCBBJywgTlMoYT0nQScsIGI9RmFsc2UsIGM9RmFsc2UsIHg9J1gnLCB5PUZhbHNlKSksCisgICAgICAgICgnWCAtYicsIE5TKGE9Tm9uZSwgYj1UcnVlLCBjPUZhbHNlLCB4PSdYJywgeT1GYWxzZSkpLAorICAgICAgICAoJ1ggLWMnLCBOUyhhPU5vbmUsIGI9RmFsc2UsIGM9VHJ1ZSwgeD0nWCcsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdYIEEgLXknLCBOUyhhPSdBJywgYj1GYWxzZSwgYz1GYWxzZSwgeD0nWCcsIHk9VHJ1ZSkpLAorICAgICAgICAoJ1ggLXkgLWInLCBOUyhhPU5vbmUsIGI9VHJ1ZSwgYz1GYWxzZSwgeD0nWCcsIHk9VHJ1ZSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnWCcsIE5TKGE9Tm9uZSwgYj1GYWxzZSwgYz1GYWxzZSwgeD0nWCcsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdYIC15JywgTlMoYT1Ob25lLCBiPUZhbHNlLCBjPUZhbHNlLCB4PSdYJywgeT1UcnVlKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9IHVzYWdlX3doZW5fbm90X3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteV0gWy1iXSBbLWNdIHggW2FdCisgICAgICAgICcnJworICAgIGhlbHAgPSAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgeCAgICAgICAgICAgeCBoZWxwCisgICAgICAgICAgYSAgICAgICAgICAgYSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteSAgICAgICAgICB5IGhlbHAKKyAgICAgICAgICAtYiAgICAgICAgICBiIGhlbHAKKyAgICAgICAgICAtYyAgICAgICAgICBjIGhlbHAKKyAgICAgICAgJycnCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBNdXR1YWxseSBleGNsdXNpdmUgZ3JvdXAgaW4gcGFyZW50IHBhcnNlciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIE1FUEJhc2Uob2JqZWN0KToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkPU5vbmUpOgorICAgICAgICBwYXJlbnQgPSBzdXBlcihNRVBCYXNlLCBzZWxmKS5nZXRfcGFyc2VyKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigKKyAgICAgICAgICAgIHByb2c9cGFyZW50LnByb2csIGFkZF9oZWxwPUZhbHNlLCBwYXJlbnRzPVtwYXJlbnRdKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlR3JvdXBFcnJvcnNQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlR3JvdXBFcnJvcnMpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVTaW1wbGVQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlU2ltcGxlKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlTG9uZ1BhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVMb25nKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlRmlyc3RTdXBwcmVzc2VkUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUZpcnN0U3VwcHJlc3NlZCk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU1hbnlTdXBwcmVzc2VkUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU1hbnlTdXBwcmVzc2VkKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxBbmRQb3NpdGlvbmFsUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsQW5kUG9zaXRpb25hbCk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc01peGVkUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc01peGVkKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxzQW5kUG9zaXRpb25hbHNNaXhlZFBhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbHNBbmRQb3NpdGlvbmFsc01peGVkKToKKyAgICBwYXNzCisKKyMgPT09PT09PT09PT09PT09PT0KKyMgU2V0IGRlZmF1bHQgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFNldERlZmF1bHRzKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c19ub19hcmdzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoeD0nZm9vJykKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh5PSdiYXInLCB6PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nZm9vJywgeT0nYmFyJywgej0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nZm9vJywgeT0nYmFyJywgej0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSwgTlMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nYmF6JywgeT0nYmFyJywgej0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSwgTlMoeD0nYmF6JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2JheicsIHk9J2JhcicsIHo9MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10sIE5TKHg9J2JheicsIHo9MikpKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3dpdGhfYXJncyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHg9J2ZvbycsIHk9J2JhcicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgZGVmYXVsdD0neGZvb3gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J3hmb294JywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J3hmb294JywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10sIE5TKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2JheicsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdLCBOUyh4PSdiYXonKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nMScsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKCcteCAxJy5zcGxpdCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PScxJywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoJy14IDEnLnNwbGl0KCksIE5TKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9JzEnLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncygnLXggMScuc3BsaXQoKSwgTlMoeD0nYmF6JykpKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3N1YnBhcnNlcnMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh4PSdmb28nKQorICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKyAgICAgICAgcGFyc2VyX2EgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2EnKQorICAgICAgICBwYXJzZXJfYS5zZXRfZGVmYXVsdHMoeT0nYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdmb28nLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncygnYScuc3BsaXQoKSkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdHNfcGFyZW50cyhzZWxmKToKKyAgICAgICAgcGFyZW50ID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHBhcmVudC5zZXRfZGVmYXVsdHMoeD0nZm9vJykKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdmb28nKSwgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3NhbWVfYXNfYWRkX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHModz0nVycsIHg9J1gnLCB5PSdZJywgej0nWicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy13JykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBkZWZhdWx0PSdYWCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3knLCBuYXJncz0nPycpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3onLCBuYXJncz0nPycsIGRlZmF1bHQ9J1paJykKKworICAgICAgICAjIGRlZmF1bHRzIHNldCBwcmV2aW91c2x5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlModz0nVycsIHg9J1hYJywgeT0nWScsIHo9J1paJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorCisgICAgICAgICMgcmVzZXQgZGVmYXVsdHMKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh3PSdXVycsIHg9J1gnLCB5PSdZWScsIHo9J1onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHc9J1dXJywgeD0nWCcsIHk9J1lZJywgej0nWicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c19zYW1lX2FzX2FkZF9hcmd1bWVudF9ncm91cChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHc9J1cnLCB4PSdYJywgeT0nWScsIHo9J1onKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2ZvbycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXcnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy14JywgZGVmYXVsdD0nWFgnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ3knLCBuYXJncz0nPycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgneicsIG5hcmdzPSc/JywgZGVmYXVsdD0nWlonKQorCisKKyAgICAgICAgIyBkZWZhdWx0cyBzZXQgcHJldmlvdXNseQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHc9J1cnLCB4PSdYWCcsIHk9J1knLCB6PSdaWicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKworICAgICAgICAjIHJlc2V0IGRlZmF1bHRzCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHModz0nV1cnLCB4PSdYJywgeT0nWVknLCB6PSdaJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh3PSdXVycsIHg9J1gnLCB5PSdZWScsIHo9J1onKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisKKyMgPT09PT09PT09PT09PT09PT0KKyMgR2V0IGRlZmF1bHQgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEdldERlZmF1bHQoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZ2V0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiYmFyIikpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1mb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcGFyc2VyLmdldF9kZWZhdWx0KCJiYXIiKSkKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWJhciIsIHR5cGU9aW50LCBkZWZhdWx0PTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIHBhcnNlci5nZXRfZGVmYXVsdCgiYmFyIikpCisKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmb289ImJhZGdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImJhZGdlciIsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIHBhcnNlci5nZXRfZGVmYXVsdCgiYmFyIikpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgTmFtZXNwYWNlICdjb250YWlucycgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE5hbWVzcGFjZUNvbnRhaW5zU2ltcGxlKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycgaW4gbnMsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnIG5vdCBpbiBucywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneCcgaW4gbnMsIEZhbHNlKQorCisgICAgZGVmIHRlc3Rfbm9uX2VtcHR5KHNlbGYpOgorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSh4PTEsIHk9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneCcgaW4gbnMsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3gnIG5vdCBpbiBucywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3knIGluIG5zLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnIGluIG5zLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneHgnIGluIG5zLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneicgaW4gbnMsIEZhbHNlKQorCisjID09PT09PT09PT09PT09PT09PT09PQorIyBIZWxwIGZvcm1hdHRpbmcgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RIZWxwRm9ybWF0dGluZ01ldGFjbGFzcyh0eXBlKToKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBib2R5ZGljdCk6CisgICAgICAgIGlmIG5hbWUgPT0gJ0hlbHBUZXN0Q2FzZSc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbGFzcyBBZGRUZXN0cyhvYmplY3QpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jbGFzcywgZnVuY19zdWZmaXgsIHN0ZF9uYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLmZ1bmNfc3VmZml4ID0gZnVuY19zdWZmaXgKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZF9uYW1lID0gc3RkX25hbWUKKworICAgICAgICAgICAgICAgIGZvciB0ZXN0X2Z1bmMgaW4gW3NlbGYudGVzdF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3ByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdF9wcmludF9maWxlXToKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9uYW1lID0gJyVzXyVzJyAlICh0ZXN0X2Z1bmMuX19uYW1lX18sIGZ1bmNfc3VmZml4KQorCisgICAgICAgICAgICAgICAgICAgIGRlZiB0ZXN0X3dyYXBwZXIoc2VsZiwgdGVzdF9mdW5jPXRlc3RfZnVuYyk6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Z1bmMoc2VsZikKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF93cmFwcGVyLl9fbmFtZV9fID0gdGVzdF9uYW1lCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIodGVzdF9jbGFzcywgdGVzdF9uYW1lLCB0ZXN0X3dyYXBwZXIpCisKKyAgICAgICAgICAgIGRlZiBfZ2V0X3BhcnNlcihzZWxmLCB0ZXN0ZXIpOgorICAgICAgICAgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgICAgICAgICAgICAgICAqdGVzdGVyLnBhcnNlcl9zaWduYXR1cmUuYXJncywKKyAgICAgICAgICAgICAgICAgICAgKip0ZXN0ZXIucGFyc2VyX3NpZ25hdHVyZS5rd2FyZ3MpCisgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50X3NpZyBpbiB0ZXN0ZXIuYXJndW1lbnRfc2lnbmF0dXJlczoKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgqYXJndW1lbnRfc2lnLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiphcmd1bWVudF9zaWcua3dhcmdzKQorICAgICAgICAgICAgICAgIGdyb3VwX3NpZ25hdHVyZXMgPSB0ZXN0ZXIuYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcworICAgICAgICAgICAgICAgIGZvciBncm91cF9zaWcsIGFyZ3VtZW50X3NpZ3MgaW4gZ3JvdXBfc2lnbmF0dXJlczoKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCpncm91cF9zaWcuYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqZ3JvdXBfc2lnLmt3YXJncykKKyAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50X3NpZyBpbiBhcmd1bWVudF9zaWdzOgorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCphcmd1bWVudF9zaWcuYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmFyZ3VtZW50X3NpZy5rd2FyZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgICAgICAgICBkZWYgX3Rlc3Qoc2VsZiwgdGVzdGVyLCBwYXJzZXJfdGV4dCk6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGdldGF0dHIodGVzdGVyLCBzZWxmLmZ1bmNfc3VmZml4KQorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHQgPSB0ZXh0d3JhcC5kZWRlbnQoZXhwZWN0ZWRfdGV4dCkKKyAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF90ZXh0ICE9IHBhcnNlcl90ZXh0OgorICAgICAgICAgICAgICAgICAgICBwcmludChyZXByKGV4cGVjdGVkX3RleHQpKQorICAgICAgICAgICAgICAgICAgICBwcmludChyZXByKHBhcnNlcl90ZXh0KSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGNoYXIxLCBjaGFyMiBpbiB6aXAoZXhwZWN0ZWRfdGV4dCwgcGFyc2VyX3RleHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhcjEgIT0gY2hhcjI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZpcnN0IGRpZmY6ICVyICVyJyAlIChjaGFyMSwgY2hhcjIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFsKGV4cGVjdGVkX3RleHQsIHBhcnNlcl90ZXh0KQorCisgICAgICAgICAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBnZXRhdHRyKHBhcnNlciwgJ2Zvcm1hdF8lcycgJSBzZWxmLmZ1bmNfc3VmZml4KQorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3QodGVzdGVyLCBmb3JtYXQoKSkKKworICAgICAgICAgICAgZGVmIHRlc3RfcHJpbnQoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKKyAgICAgICAgICAgICAgICBwcmludF8gPSBnZXRhdHRyKHBhcnNlciwgJ3ByaW50XyVzJyAlIHNlbGYuZnVuY19zdWZmaXgpCisgICAgICAgICAgICAgICAgb2xkX3N0cmVhbSA9IGdldGF0dHIoc3lzLCBzZWxmLnN0ZF9uYW1lKQorICAgICAgICAgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLnN0ZF9uYW1lLCBTdGRJT0J1ZmZlcigpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRfKCkKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyX3RleHQgPSBnZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSkuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLnN0ZF9uYW1lLCBvbGRfc3RyZWFtKQorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3QodGVzdGVyLCBwYXJzZXJfdGV4dCkKKworICAgICAgICAgICAgZGVmIHRlc3RfcHJpbnRfZmlsZShzZWxmLCB0ZXN0ZXIpOgorICAgICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIodGVzdGVyKQorICAgICAgICAgICAgICAgIHByaW50XyA9IGdldGF0dHIocGFyc2VyLCAncHJpbnRfJXMnICUgc2VsZi5mdW5jX3N1ZmZpeCkKKyAgICAgICAgICAgICAgICBzZmlsZSA9IFN0ZElPQnVmZmVyKCkKKyAgICAgICAgICAgICAgICBwcmludF8oc2ZpbGUpCisgICAgICAgICAgICAgICAgcGFyc2VyX3RleHQgPSBzZmlsZS5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fdGVzdCh0ZXN0ZXIsIHBhcnNlcl90ZXh0KQorCisgICAgICAgICMgYWRkIHRlc3RzIGZvciB7Zm9ybWF0LHByaW50fV97dXNhZ2UsaGVscCx2ZXJzaW9ufQorICAgICAgICBmb3IgZnVuY19zdWZmaXgsIHN0ZF9uYW1lIGluIFsoJ3VzYWdlJywgJ3N0ZG91dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2hlbHAnLCAnc3Rkb3V0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgndmVyc2lvbicsICdzdGRlcnInKV06CisgICAgICAgICAgICBBZGRUZXN0cyhjbHMsIGZ1bmNfc3VmZml4LCBzdGRfbmFtZSkKKworYmFzZXMgPSBUZXN0Q2FzZSwKK0hlbHBUZXN0Q2FzZSA9IFRlc3RIZWxwRm9ybWF0dGluZ01ldGFjbGFzcygnSGVscFRlc3RDYXNlJywgYmFzZXMsIHt9KQorCisKK2NsYXNzIFRlc3RIZWxwQmlnZ2VyT3B0aW9uYWxzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiTWFrZSBzdXJlIHRoYXQgYXJndW1lbnQgaGVscCBhbGlnbnMgd2hlbiBvcHRpb25zIGFyZSBsb25nZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIGRlc2NyaXB0aW9uPSdERVNDUklQVElPTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9J0VQSUxPRycsIHZlcnNpb249JzAuMScpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J1ggSEVMUCcpLAorICAgICAgICBTaWcoJy0teScsIGhlbHA9J1kgSEVMUCcpLAorICAgICAgICBTaWcoJ2ZvbycsIGhlbHA9J0ZPTyBIRUxQJyksCisgICAgICAgIFNpZygnYmFyJywgaGVscD0nQkFSIEhFTFAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy12XSBbLXhdIFstLXkgWV0gZm9vIGJhcgorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgREVTQ1JJUFRJT04KKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBmb28gICAgICAgICAgICBGT08gSEVMUAorICAgICAgICAgIGJhciAgICAgICAgICAgIEJBUiBIRUxQCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdiwgLS12ZXJzaW9uICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgICAgIC14ICAgICAgICAgICAgIFggSEVMUAorICAgICAgICAgIC0teSBZICAgICAgICAgIFkgSEVMUAorCisgICAgICAgIEVQSUxPRworICAgICcnJworICAgIHZlcnNpb24gPSAnJydcCisgICAgICAgIDAuMQorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0SGVscEJpZ2dlck9wdGlvbmFsR3JvdXBzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiTWFrZSBzdXJlIHRoYXQgYXJndW1lbnQgaGVscCBhbGlnbnMgd2hlbiBvcHRpb25zIGFyZSBsb25nZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIGRlc2NyaXB0aW9uPSdERVNDUklQVElPTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9J0VQSUxPRycsIHZlcnNpb249JzAuMScpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J1ggSEVMUCcpLAorICAgICAgICBTaWcoJy0teScsIGhlbHA9J1kgSEVMUCcpLAorICAgICAgICBTaWcoJ2ZvbycsIGhlbHA9J0ZPTyBIRUxQJyksCisgICAgICAgIFNpZygnYmFyJywgaGVscD0nQkFSIEhFTFAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygnR1JPVVAgVElUTEUnLCBkZXNjcmlwdGlvbj0nR1JPVVAgREVTQ1JJUFRJT04nKSwgWworICAgICAgICAgICAgU2lnKCdiYXonLCBoZWxwPSdCQVogSEVMUCcpLAorICAgICAgICAgICAgU2lnKCcteicsIG5hcmdzPScrJywgaGVscD0nWiBIRUxQJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy12XSBbLXhdIFstLXkgWV0gWy16IFogW1ogLi4uXV0gZm9vIGJhciBiYXoKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIERFU0NSSVBUSU9OCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgZm9vICAgICAgICAgICAgRk9PIEhFTFAKKyAgICAgICAgICBiYXIgICAgICAgICAgICBCQVIgSEVMUAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAteCAgICAgICAgICAgICBYIEhFTFAKKyAgICAgICAgICAtLXkgWSAgICAgICAgICBZIEhFTFAKKworICAgICAgICBHUk9VUCBUSVRMRToKKyAgICAgICAgICBHUk9VUCBERVNDUklQVElPTgorCisgICAgICAgICAgYmF6ICAgICAgICAgICAgQkFaIEhFTFAKKyAgICAgICAgICAteiBaIFtaIC4uLl0gICBaIEhFTFAKKworICAgICAgICBFUElMT0cKKyAgICAnJycKKyAgICB2ZXJzaW9uID0gJycnXAorICAgICAgICAwLjEKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdEhlbHBCaWdnZXJQb3NpdGlvbmFscyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IGhlbHAgYWxpZ25zIHdoZW4gYXJndW1lbnRzIGFyZSBsb25nZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcodXNhZ2U9J1VTQUdFJywgZGVzY3JpcHRpb249J0RFU0NSSVBUSU9OJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nWCBIRUxQJyksCisgICAgICAgIFNpZygnLS15JywgaGVscD0nWSBIRUxQJyksCisgICAgICAgIFNpZygnZWtpZWtpZWtpZmVrYW5nJywgaGVscD0nRUtJIEhFTFAnKSwKKyAgICAgICAgU2lnKCdiYXInLCBoZWxwPSdCQVIgSEVMUCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFVTQUdFCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBERVNDUklQVElPTgorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGVraWVraWVraWZla2FuZyAgRUtJIEhFTFAKKyAgICAgICAgICBiYXIgICAgICAgICAgICAgIEJBUiBIRUxQCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14ICAgICAgICAgICAgICAgWCBIRUxQCisgICAgICAgICAgLS15IFkgICAgICAgICAgICBZIEhFTFAKKyAgICAgICAgJycnCisKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFJlZm9ybWF0dGluZyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRleHQgYWZ0ZXIgc2hvcnQgbmFtZXMgc3RhcnRzIG9uIHRoZSBmaXJzdCBsaW5lIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKAorICAgICAgICBwcm9nPSdQUk9HJywKKyAgICAgICAgZGVzY3JpcHRpb249JyAgIG9kZGx5ICAgIGZvcm1hdHRlZFxuJworICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb25cbicKKyAgICAgICAgICAgICAgICAgICAgJ1xuJworICAgICAgICAgICAgICAgICAgICAndGhhdCBpcyBzbyBsb25nIHRoYXQgaXQgc2hvdWxkIGdvIG9udG8gbXVsdGlwbGUgJworICAgICAgICAgICAgICAgICAgICAnbGluZXMgd2hlbiB3cmFwcGVkJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWFgnLCBoZWxwPSdvZGRseVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgZm9ybWF0dGVkIC14IGhlbHAnKSwKKyAgICAgICAgU2lnKCd5JywgbWV0YXZhcj0neXl5JywgaGVscD0nbm9ybWFsIHkgaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd0aXRsZScsIGRlc2NyaXB0aW9uPSdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIG9kZGx5IGZvcm1hdHRlZCBncm91cFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nKSwKKyAgICAgICAgIFtTaWcoJy1hJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgaGVscD0nIG9kZGx5IFxuJworICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZWQgICAgLWEgIGhlbHAgIFxuJworICAgICAgICAgICAgICAgICAgICcgICAgYWdhaW4sIHNvIGxvbmcgdGhhdCBpdCBzaG91bGQgYmUgd3JhcHBlZCBvdmVyICcKKyAgICAgICAgICAgICAgICAgICAnbXVsdGlwbGUgbGluZXMnKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWFhdIFstYV0geXl5CisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvZGRseSBmb3JtYXR0ZWQgZGVzY3JpcHRpb24gdGhhdCBpcyBzbyBsb25nIHRoYXQgaXQgc2hvdWxkIGdvIG9udG8gXAorbXVsdGlwbGUKKyAgICAgICAgbGluZXMgd2hlbiB3cmFwcGVkCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgeXl5ICAgICAgICAgbm9ybWFsIHkgaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWFggICAgICAgb2RkbHkgZm9ybWF0dGVkIC14IGhlbHAKKworICAgICAgICB0aXRsZToKKyAgICAgICAgICBvZGRseSBmb3JtYXR0ZWQgZ3JvdXAgZGVzY3JpcHRpb24KKworICAgICAgICAgIC1hICAgICAgICAgIG9kZGx5IGZvcm1hdHRlZCAtYSBoZWxwIGFnYWluLCBzbyBsb25nIHRoYXQgaXQgc2hvdWxkIFwKK2JlIHdyYXBwZWQKKyAgICAgICAgICAgICAgICAgICAgICBvdmVyIG11bHRpcGxlIGxpbmVzCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwV3JhcHBpbmdTaG9ydE5hbWVzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiTWFrZSBzdXJlIHRoYXQgdGV4dCBhZnRlciBzaG9ydCBuYW1lcyBzdGFydHMgb24gdGhlIGZpcnN0IGxpbmUiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIGRlc2NyaXB0aW9uPSAnRFxuRCcgKiAzMCkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWFgnLCBoZWxwPSdYSEggSFgnICogMjApLAorICAgICAgICBTaWcoJ3knLCBtZXRhdmFyPSd5eXknLCBoZWxwPSdZSCBZSCcgKiAyMCksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ0FMUEhBUycpLCBbCisgICAgICAgICAgICBTaWcoJy1hJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nQUhISCBISEEnICogMTApXSksCisgICAgXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteCBYWF0gWy1hXSB5eXkKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIEQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgXAorREQgREQgREQKKyAgICAgICAgREQgREQgREQgREQgRAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHl5eSAgICAgICAgIFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggXAorWUhZSCBZSFlICisgICAgICAgICAgICAgICAgICAgICAgWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWFggICAgICAgWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIFwKK0hYWEhIIEhYWEhICisgICAgICAgICAgICAgICAgICAgICAgSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFgKKworICAgICAgICBBTFBIQVM6CisgICAgICAgICAgLWEgICAgICAgICAgQUhISCBISEFBSEhIIEhIQUFISEggSEhBQUhISCBISEFBSEhIIEhIQUFISEggSEhBQUhISCBcCitISEFBSEhICisgICAgICAgICAgICAgICAgICAgICAgSEhBQUhISCBISEFBSEhIIEhIQQorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFdyYXBwaW5nTG9uZ05hbWVzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiTWFrZSBzdXJlIHRoYXQgdGV4dCBhZnRlciBsb25nIG5hbWVzIHN0YXJ0cyBvbiB0aGUgbmV4dCBsaW5lIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHVzYWdlPSdVU0FHRScsIGRlc2NyaXB0aW9uPSAnRCBEJyAqIDMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj0nViBWJyozMCkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSwgaGVscD0nWEggWEgnICogMjApLAorICAgICAgICBTaWcoJ3knLCBtZXRhdmFyPSd5JyAqIDI1LCBoZWxwPSdZSCBZSCcgKiAyMCksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ0FMUEhBUycpLCBbCisgICAgICAgICAgICBTaWcoJy1hJywgbWV0YXZhcj0nQScgKiAyNSwgaGVscD0nQUggQUgnICogMjApLAorICAgICAgICAgICAgU2lnKCd6JywgbWV0YXZhcj0neicgKiAyNSwgaGVscD0nWkggWkgnICogMjApXSksCisgICAgXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogVVNBR0UKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIEQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgXAorREQgREQgREQKKyAgICAgICAgREQgREQgREQgREQgRAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFwKK1lIWUggWUhZSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC12LCAtLXZlcnNpb24gICAgICAgICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgICAgIC14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFwKK1hIWEggWEhYSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSAorCisgICAgICAgIEFMUEhBUzoKKyAgICAgICAgICAtYSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBcCitBSEFIIEFIQUgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUgKKyAgICAgICAgICB6enp6enp6enp6enp6enp6enp6enp6enp6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBcCitaSFpIIFpIWkgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkgKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnJ1wKKyAgICAgICAgViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBcCitWViBWViBWVgorICAgICAgICBWViBWViBWViBWViBWCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2UoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGJhc2ljIHVzYWdlIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBuYXJncz0nKycsIGhlbHA9J3cnKSwKKyAgICAgICAgU2lnKCcteCcsIG5hcmdzPScqJywgaGVscD0neCcpLAorICAgICAgICBTaWcoJ2EnLCBoZWxwPSdhJyksCisgICAgICAgIFNpZygnYicsIGhlbHA9J2InLCBuYXJncz0yKSwKKyAgICAgICAgU2lnKCdjJywgaGVscD0nYycsIG5hcmdzPSc/JyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ2dyb3VwJyksIFsKKyAgICAgICAgICAgIFNpZygnLXknLCBuYXJncz0nPycsIGhlbHA9J3knKSwKKyAgICAgICAgICAgIFNpZygnLXonLCBuYXJncz0zLCBoZWxwPSd6JyksCisgICAgICAgICAgICBTaWcoJ2QnLCBoZWxwPSdkJywgbmFyZ3M9JyonKSwKKyAgICAgICAgICAgIFNpZygnZScsIGhlbHA9J2UnLCBuYXJncz0nKycpLAorICAgICAgICBdKQorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXcgVyBbVyAuLi5dXSBbLXggW1ggW1ggLi4uXV1dIFsteSBbWV1dIFsteiBaIFogWl0KKyAgICAgICAgICAgICAgICAgICAgYSBiIGIgW2NdIFtkIFtkIC4uLl1dIGUgW2UgLi4uXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgYSAgICAgICAgICAgICAgIGEKKyAgICAgICAgICBiICAgICAgICAgICAgICAgYgorICAgICAgICAgIGMgICAgICAgICAgICAgICBjCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXcgVyBbVyAuLi5dICAgIHcKKyAgICAgICAgICAteCBbWCBbWCAuLi5dXSAgeAorCisgICAgICAgIGdyb3VwOgorICAgICAgICAgIC15IFtZXSAgICAgICAgICB5CisgICAgICAgICAgLXogWiBaIFogICAgICAgIHoKKyAgICAgICAgICBkICAgICAgICAgICAgICAgZAorICAgICAgICAgIGUgICAgICAgICAgICAgICBlCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwT25seVVzZXJHcm91cHMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGJhc2ljIHVzYWdlIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW10KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd4eHh4JyksIFsKKyAgICAgICAgICAgIFNpZygnLXgnLCBoZWxwPSd4JyksCisgICAgICAgICAgICBTaWcoJ2EnLCBoZWxwPSdhJyksCisgICAgICAgIF0pLAorICAgICAgICAoU2lnKCd5eXl5JyksIFsKKyAgICAgICAgICAgIFNpZygnYicsIGhlbHA9J2InKSwKKyAgICAgICAgICAgIFNpZygnLXknLCBoZWxwPSd5JyksCisgICAgICAgIF0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy14IFhdIFsteSBZXSBhIGIKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHh4eHg6CisgICAgICAgICAgLXggWCAgeAorICAgICAgICAgIGEgICAgIGEKKworICAgICAgICB5eXl5OgorICAgICAgICAgIGIgICAgIGIKKyAgICAgICAgICAteSBZICB5CisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VMb25nUHJvZyhIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIHByb2cgaXMgbG9uZyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQJyAqIDYwKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBtZXRhdmFyPSdXJyksCisgICAgICAgIFNpZygnLXgnLCBtZXRhdmFyPSdYJyksCisgICAgICAgIFNpZygnYScpLAorICAgICAgICBTaWcoJ2InKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAKKyAgICAgICAgICAgICAgIFstaF0gWy13IFddIFsteCBYXSBhIGIKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGEKKyAgICAgICAgICBiCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdyBXCisgICAgICAgICAgLXggWAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlTG9uZ1Byb2dPcHRpb25zV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIHByb2cgaXMgbG9uZyBhbmQgdGhlIG9wdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1AnICogNjApCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctdycsIG1ldGF2YXI9J1cnICogMjUpLAorICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSksCisgICAgICAgIFNpZygnLXknLCBtZXRhdmFyPSdZJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteicsIG1ldGF2YXI9J1onICogMjUpLAorICAgICAgICBTaWcoJ2EnKSwKKyAgICAgICAgU2lnKCdiJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQCisgICAgICAgICAgICAgICBbLWhdIFstdyBXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXXSBcCitbLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF0KKyAgICAgICAgICAgICAgIFsteSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZXSBbLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWl0KKyAgICAgICAgICAgICAgIGEgYgorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgYQorICAgICAgICAgIGIKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdyBXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXCisgICAgICAgICAgLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorICAgICAgICAgIC15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVkKKyAgICAgICAgICAteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VMb25nUHJvZ1Bvc2l0aW9uYWxzV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIHByb2cgaXMgbG9uZyBhbmQgdGhlIHBvc2l0aW9uYWxzIHdyYXAiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUCcgKiA2MCwgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdhJyAqIDI1KSwKKyAgICAgICAgU2lnKCdiJyAqIDI1KSwKKyAgICAgICAgU2lnKCdjJyAqIDI1KSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAKKyAgICAgICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorICAgICAgICAgIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VPcHRpb25hbHNXcmFwKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1c2FnZSBtZXNzYWdlcyB3aGVyZSB0aGUgb3B0aW9uYWxzIHdyYXAiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctdycsIG1ldGF2YXI9J1cnICogMjUpLAorICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSksCisgICAgICAgIFNpZygnLXknLCBtZXRhdmFyPSdZJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteicsIG1ldGF2YXI9J1onICogMjUpLAorICAgICAgICBTaWcoJ2EnKSwKKyAgICAgICAgU2lnKCdiJyksCisgICAgICAgIFNpZygnYycpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXcgV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV10gXAorWy14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhdCisgICAgICAgICAgICAgICAgICAgIFsteSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZXSBcCitbLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWl0KKyAgICAgICAgICAgICAgICAgICAgYSBiIGMKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGEKKyAgICAgICAgICBiCisgICAgICAgICAgYworCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC13IFdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1cKKyAgICAgICAgICAteCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCisgICAgICAgICAgLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWQorICAgICAgICAgIC16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWloKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBVc2FnZVBvc2l0aW9uYWxzV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIHBvc2l0aW9uYWxzIHdyYXAiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcpLAorICAgICAgICBTaWcoJy15JyksCisgICAgICAgIFNpZygnLXonKSwKKyAgICAgICAgU2lnKCdhJyAqIDI1KSwKKyAgICAgICAgU2lnKCdiJyAqIDI1KSwKKyAgICAgICAgU2lnKCdjJyAqIDI1KSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhdIFsteSBZXSBbLXogWl0KKyAgICAgICAgICAgICAgICAgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAgICAgICAgICBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFgKKyAgICAgICAgICAteSBZCisgICAgICAgICAgLXogWgorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlT3B0aW9uYWxzUG9zaXRpb25hbHNXcmFwKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1c2FnZSBtZXNzYWdlcyB3aGVyZSB0aGUgb3B0aW9uYWxzIGFuZCBwb3NpdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBtZXRhdmFyPSdYJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteScsIG1ldGF2YXI9J1knICogMjUpLAorICAgICAgICBTaWcoJy16JywgbWV0YXZhcj0nWicgKiAyNSksCisgICAgICAgIFNpZygnYScgKiAyNSksCisgICAgICAgIFNpZygnYicgKiAyNSksCisgICAgICAgIFNpZygnYycgKiAyNSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYXSBcCitbLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV0KKyAgICAgICAgICAgICAgICAgICAgWy16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpdCisgICAgICAgICAgICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgICAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgICAgICAgICAgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCisgICAgICAgICAgLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWQorICAgICAgICAgIC16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWloKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBVc2FnZU9wdGlvbmFsc09ubHlXcmFwKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1c2FnZSBtZXNzYWdlcyB3aGVyZSB0aGVyZSBhcmUgb25seSBvcHRpb25hbHMgYW5kIHRoZXkgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSksCisgICAgICAgIFNpZygnLXknLCBtZXRhdmFyPSdZJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteicsIG1ldGF2YXI9J1onICogMjUpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF0gXAorWy15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVldCisgICAgICAgICAgICAgICAgICAgIFsteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorICAgICAgICAgIC15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVkKKyAgICAgICAgICAteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VQb3NpdGlvbmFsc09ubHlXcmFwKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1c2FnZSBtZXNzYWdlcyB3aGVyZSB0aGVyZSBhcmUgb25seSBwb3NpdGlvbmFscyBhbmQgdGhleSB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2EnICogMjUpLAorICAgICAgICBTaWcoJ2InICogMjUpLAorICAgICAgICBTaWcoJ2MnICogMjUpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAgICAgICAgICBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFZhcmlhYmxlRXhwYW5zaW9uKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgcHJvcGVybHkgaW4gaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1pbnQsCisgICAgICAgICAgICBoZWxwPSd4ICUocHJvZylzICUoZGVmYXVsdClzICUodHlwZSlzICUlJyksCisgICAgICAgIFNpZygnLXknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgZGVmYXVsdD00MiwgY29uc3Q9J1hYWCcsCisgICAgICAgICAgICBoZWxwPSd5ICUocHJvZylzICUoZGVmYXVsdClzICUoY29uc3QpcycpLAorICAgICAgICBTaWcoJy0tZm9vJywgY2hvaWNlcz0nYWJjJywKKyAgICAgICAgICAgIGhlbHA9J2ZvbyAlKHByb2cpcyAlKGRlZmF1bHQpcyAlKGNob2ljZXMpcycpLAorICAgICAgICBTaWcoJy0tYmFyJywgZGVmYXVsdD0nYmF6JywgY2hvaWNlcz1bMSwgMl0sIG1ldGF2YXI9J0JCQicsCisgICAgICAgICAgICBoZWxwPSdiYXIgJShwcm9nKXMgJShkZWZhdWx0KXMgJShkZXN0KXMnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSAlKHByb2cpcyAlKGRlZmF1bHQpcycpLAorICAgICAgICBTaWcoJ2JhZGdlcicsIGRlZmF1bHQ9MC41LCBoZWxwPSdiYWRnZXIgJShwcm9nKXMgJShkZWZhdWx0KXMnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygnZ3JvdXAnKSwgWworICAgICAgICAgICAgU2lnKCctYScsIGhlbHA9J2EgJShwcm9nKXMgJShkZWZhdWx0KXMnKSwKKyAgICAgICAgICAgIFNpZygnLWInLCBkZWZhdWx0PS0xLCBoZWxwPSdiICUocHJvZylzICUoZGVmYXVsdClzJyksCisgICAgICAgIF0pCisgICAgXQorICAgIHVzYWdlID0gKCcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWF0gWy15XSBbLS1mb28ge2EsYixjfV0gWy0tYmFyIEJCQl0gWy1hIEFdIFstYiBCXQorICAgICAgICAgICAgICAgICAgICBzcGFtIGJhZGdlcgorICAgICAgICAnJycpCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgICAgIHNwYW0gUFJPRyBOb25lCisgICAgICAgICAgYmFkZ2VyICAgICAgICAgYmFkZ2VyIFBST0cgMC41CisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCBYICAgICAgICAgICB4IFBST0cgTm9uZSBpbnQgJQorICAgICAgICAgIC15ICAgICAgICAgICAgIHkgUFJPRyA0MiBYWFgKKyAgICAgICAgICAtLWZvbyB7YSxiLGN9ICBmb28gUFJPRyBOb25lIGEsIGIsIGMKKyAgICAgICAgICAtLWJhciBCQkIgICAgICBiYXIgUFJPRyBiYXogYmFyCisKKyAgICAgICAgZ3JvdXA6CisgICAgICAgICAgLWEgQSAgICAgICAgICAgYSBQUk9HIE5vbmUKKyAgICAgICAgICAtYiBCICAgICAgICAgICBiIFBST0cgLTEKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBWYXJpYWJsZUV4cGFuc2lvblVzYWdlU3VwcGxpZWQoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCBwcm9wZXJseSB3aGVuIHVzYWdlPSBpcyBwcmVzZW50IiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCB1c2FnZT0nJShwcm9nKXMgRk9PJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW10KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICgnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIEZPTworICAgICAgICAnJycpCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVmFyaWFibGVFeHBhbnNpb25Ob0FyZ3VtZW50cyhIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHByb3Blcmx5IHdpdGggbm8gYXJndW1lbnRzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW10KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICgnJydcCisgICAgICAgIHVzYWdlOiBQUk9HCisgICAgICAgICcnJykKKyAgICBoZWxwID0gdXNhZ2UKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFN1cHByZXNzVXNhZ2UoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgaXRlbXMgY2FuIGJlIHN1cHByZXNzZWQgaW4gdXNhZ2UgbWVzc2FnZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIHVzYWdlPWFyZ3BhcnNlLlNVUFBSRVNTKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgaGVscCA9ICcnJ1wKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgc3BhbSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB1c2FnZSA9ICcnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBTdXBwcmVzc09wdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IG9wdGlvbmFsIGFyZ3VtZW50cyBjYW4gYmUgc3VwcHJlc3NlZCBpbiBoZWxwIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgc3BhbSBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwU3VwcHJlc3NPcHRpb25hbEdyb3VwKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IG9wdGlvbmFsIGdyb3VwcyBjYW4gYmUgc3VwcHJlc3NlZCBpbiBoZWxwIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygnZ3JvdXAnKSwgW1NpZygnLS1iYXInLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBzcGFtCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgICBzcGFtIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwU3VwcHJlc3NQb3NpdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHBvc2l0aW9uYWwgYXJndW1lbnRzIGNhbiBiZSBzdXBwcmVzc2VkIGluIGhlbHAgbWVzc2FnZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFJlcXVpcmVkT3B0aW9uYWwoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgcmVxdWlyZWQgb3B0aW9ucyBkb24ndCBsb29rIG9wdGlvbmFsIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCByZXF1aXJlZD1UcnVlLCBoZWxwPSdmb28gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSAtLWZvbyBGT08KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBBbHRlcm5hdGVQcmVmaXhDaGFycyhIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcHRpb25zIGRpc3BsYXkgd2l0aCBkaWZmZXJlbnQgcHJlZml4IGNoYXJhY3RlcnMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIHByZWZpeF9jaGFycz0nXjsnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ15eZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCc7YicsICc7O2JhcicsIGhlbHA9J2JhciBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbXl5mb29dIFs7YiBCQVJdCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgXl5mb28gICAgICAgICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgO2IgQkFSLCA7O2JhciBCQVIgIGJhciBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwTm9IZWxwT3B0aW9uYWwoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgdGhlIC0taGVscCBhcmd1bWVudCBjYW4gYmUgc3VwcHJlc3NlZCBoZWxwIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLS1mb28gRk9PXSBzcGFtCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtLWZvbyBGT08gIGZvbyBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVmVyc2lvbk9wdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHRoZSAtLXZlcnNpb24gYXJndW1lbnQgY2FuIGJlIHN1cHByZXNzZWQgaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgdmVyc2lvbj0nMS4wJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdl0gWy0tZm9vIEZPT10gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgICAgc3BhbSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdiwgLS12ZXJzaW9uICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgICAgIGZvbyBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJydcCisgICAgICAgIDEuMAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0SGVscE5vbmUoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgbm8gZXJyb3JzIG9jY3VyIGlmIG5vIGhlbHAgaXMgc3BlY2lmaWVkIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nKSwKKyAgICAgICAgU2lnKCdzcGFtJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyBGT09dIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0KKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTworICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFR1cGxlTWV0YXZhcihIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3Qgc3BlY2lmeWluZyBtZXRhdmFyIGFzIGEgdHVwbGUiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctdycsIGhlbHA9J3cnLCBuYXJncz0nKycsIG1ldGF2YXI9KCdXMScsICdXMicpKSwKKyAgICAgICAgU2lnKCcteCcsIGhlbHA9J3gnLCBuYXJncz0nKicsIG1ldGF2YXI9KCdYMScsICdYMicpKSwKKyAgICAgICAgU2lnKCcteScsIGhlbHA9J3knLCBuYXJncz0zLCBtZXRhdmFyPSgnWTEnLCAnWTInLCAnWTMnKSksCisgICAgICAgIFNpZygnLXonLCBoZWxwPSd6JywgbmFyZ3M9Jz8nLCBtZXRhdmFyPSgnWjEnLCApKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy13IFcxIFtXMiAuLi5dXSBbLXggW1gxIFtYMiAuLi5dXV0gWy15IFkxIFkyIFkzXSBcCitbLXogW1oxXV0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXcgVzEgW1cyIC4uLl0gICAgdworICAgICAgICAgIC14IFtYMSBbWDIgLi4uXV0gIHgKKyAgICAgICAgICAteSBZMSBZMiBZMyAgICAgICB5CisgICAgICAgICAgLXogW1oxXSAgICAgICAgICAgegorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFJhd1RleHQoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBSYXdUZXh0SGVscEZvcm1hdHRlciIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZygKKyAgICAgICAgcHJvZz0nUFJPRycsIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdUZXh0SGVscEZvcm1hdHRlciwKKyAgICAgICAgZGVzY3JpcHRpb249J0tlZXAgdGhlIGZvcm1hdHRpbmdcbicKKyAgICAgICAgICAgICAgICAgICAgJyAgICBleGFjdGx5IGFzIGl0IGlzIHdyaXR0ZW5cbicKKyAgICAgICAgICAgICAgICAgICAgJ1xuJworICAgICAgICAgICAgICAgICAgICAnaGVyZVxuJykKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPScgICAgZm9vIGhlbHAgc2hvdWxkIGFsc29cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGVhciBhcyBnaXZlbiBoZXJlJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd0aXRsZScsIGRlc2NyaXB0aW9uPScgICAgVGhpcyB0ZXh0XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgc2hvdWxkIGJlIGluZGVudGVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBleGFjdGx5IGxpa2UgaXQgaXMgaGVyZVxuJyksCisgICAgICAgICBbU2lnKCctLWJhcicsIGhlbHA9J2JhciBoZWxwJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gWy0tYmFyIEJBUl0gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgS2VlcCB0aGUgZm9ybWF0dGluZworICAgICAgICAgICAgZXhhY3RseSBhcyBpdCBpcyB3cml0dGVuCisKKyAgICAgICAgaGVyZQorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgICAgIGZvbyBoZWxwIHNob3VsZCBhbHNvCisgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyIGFzIGdpdmVuIGhlcmUKKworICAgICAgICB0aXRsZToKKyAgICAgICAgICAgICAgVGhpcyB0ZXh0CisgICAgICAgICAgICBzaG91bGQgYmUgaW5kZW50ZWQKKyAgICAgICAgICAgICAgZXhhY3RseSBsaWtlIGl0IGlzIGhlcmUKKworICAgICAgICAgIC0tYmFyIEJBUiAgIGJhciBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwUmF3RGVzY3JpcHRpb24oSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBSYXdUZXh0SGVscEZvcm1hdHRlciIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZygKKyAgICAgICAgcHJvZz0nUFJPRycsIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIsCisgICAgICAgIGRlc2NyaXB0aW9uPSdLZWVwIHRoZSBmb3JtYXR0aW5nXG4nCisgICAgICAgICAgICAgICAgICAgICcgICAgZXhhY3RseSBhcyBpdCBpcyB3cml0dGVuXG4nCisgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgJ2hlcmVcbicpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nICBmb28gaGVscCBzaG91bGQgbm90XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgcmV0YWluIHRoaXMgb2RkIGZvcm1hdHRpbmcnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ3RpdGxlJywgZGVzY3JpcHRpb249JyAgICBUaGlzIHRleHRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBzaG91bGQgYmUgaW5kZW50ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGV4YWN0bHkgbGlrZSBpdCBpcyBoZXJlXG4nKSwKKyAgICAgICAgIFtTaWcoJy0tYmFyJywgaGVscD0nYmFyIGhlbHAnKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBbLS1iYXIgQkFSXSBzcGFtCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBLZWVwIHRoZSBmb3JtYXR0aW5nCisgICAgICAgICAgICBleGFjdGx5IGFzIGl0IGlzIHdyaXR0ZW4KKworICAgICAgICBoZXJlCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgc3BhbSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscCBzaG91bGQgbm90IHJldGFpbiB0aGlzIG9kZCBmb3JtYXR0aW5nCisKKyAgICAgICAgdGl0bGU6CisgICAgICAgICAgICAgIFRoaXMgdGV4dAorICAgICAgICAgICAgc2hvdWxkIGJlIGluZGVudGVkCisgICAgICAgICAgICAgIGV4YWN0bHkgbGlrZSBpdCBpcyBoZXJlCisKKyAgICAgICAgICAtLWJhciBCQVIgICBiYXIgaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscEFyZ3VtZW50RGVmYXVsdHMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBBcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlciIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZygKKyAgICAgICAgcHJvZz0nUFJPRycsIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlciwKKyAgICAgICAgZGVzY3JpcHRpb249J2Rlc2NyaXB0aW9uJykKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPSdmb28gaGVscCAtIG9oIGFuZCBieSB0aGUgd2F5LCAlKGRlZmF1bHQpcycpLAorICAgICAgICBTaWcoJy0tYmFyJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYmFyIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgICAgIFNpZygnYmFkZ2VyJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PSd3b29kZW4nLCBoZWxwPSdiYWRnZXIgaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd0aXRsZScsIGRlc2NyaXB0aW9uPSdkZXNjcmlwdGlvbicpLAorICAgICAgICAgW1NpZygnLS1iYXonLCB0eXBlPWludCwgZGVmYXVsdD00MiwgaGVscD0nYmF6IGhlbHAnKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBbLS1iYXJdIFstLWJheiBCQVpdIHNwYW0gW2JhZGdlcl0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIGRlc2NyaXB0aW9uCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgc3BhbSBoZWxwCisgICAgICAgICAgYmFkZ2VyICAgICAgYmFkZ2VyIGhlbHAgKGRlZmF1bHQ6IHdvb2RlbikKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwIC0gb2ggYW5kIGJ5IHRoZSB3YXksIE5vbmUKKyAgICAgICAgICAtLWJhciAgICAgICBiYXIgaGVscCAoZGVmYXVsdDogRmFsc2UpCisKKyAgICAgICAgdGl0bGU6CisgICAgICAgICAgZGVzY3JpcHRpb24KKworICAgICAgICAgIC0tYmF6IEJBWiAgIGJheiBoZWxwIChkZWZhdWx0OiA0MikKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKK2NsYXNzIFRlc3RIZWxwVmVyc2lvbkFjdGlvbihIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIGRlZmF1bHQgaGVscCBmb3IgdGhlIHZlcnNpb24gYWN0aW9uIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nZGVzY3JpcHRpb24nKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctVicsICctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSczLjYnKV0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLVZdCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBkZXNjcmlwdGlvbgorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLVYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBPcHRpb25hbC9Qb3NpdGlvbmFsIGNvbnN0cnVjdG9yIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEludmFsaWRBcmd1bWVudENvbnN0cnVjdG9ycyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIGJ1bmNoIG9mIGludmFsaWQgQXJndW1lbnQgY29uc3RydWN0b3JzIiIiCisKKyAgICBkZWYgYXNzZXJ0VHlwZUVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwYXJzZXIuYWRkX2FyZ3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgYXNzZXJ0VmFsdWVFcnJvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlci5hZGRfYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfa2V5d29yZF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteCcsIGJhcj1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXknLCBjYWxsYmFjaz0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy15JywgY2FsbGJhY2tfYXJncz0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy15JywgY2FsbGJhY2tfa3dhcmdzPXt9KQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19kZXN0aW5hdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoKQorICAgICAgICBmb3IgYWN0aW9uIGluIFsnYXBwZW5kJywgJ3N0b3JlJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcihhY3Rpb249YWN0aW9uKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9vcHRpb25fc3RyaW5ncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCctLScpCisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS0tJykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCctLWZvbycsIHR5cGU9J2ludCcpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCcteCcsIGFjdGlvbj0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCdmb28nLCBhY3Rpb249J2JheicpCisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1mb28iLCBhY3Rpb249InN0b3JlLXRydWUiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgZXhwZWN0ZWQgPSAndW5rbm93biBhY3Rpb24nCisgICAgICAgICAgICBtc2cgPSAnZXhwZWN0ZWQgJXIsIGZvdW5kICVyJyAlIChleHBlY3RlZCwgZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCBpbiBzdHIoZSksIG1zZykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2Rlc3Qoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudChkZXN0PSdmb28nKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBkZXN0PSdiYXonKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgZXhwZWN0ZWQgPSAnZGVzdCBzdXBwbGllZCB0d2ljZSBmb3IgcG9zaXRpb25hbCBhcmd1bWVudCcKKyAgICAgICAgICAgIG1zZyA9ICdleHBlY3RlZCAlciwgZm91bmQgJXInICUgKGV4cGVjdGVkLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkIGluIHN0cihlKSwgbXNnKQorCisgICAgZGVmIHRlc3Rfbm9fYXJndW1lbnRfYWN0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBbJ3N0b3JlX2NvbnN0JywgJ3N0b3JlX3RydWUnLCAnc3RvcmVfZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAnYXBwZW5kX2NvbnN0JywgJ2NvdW50J106CisgICAgICAgICAgICBmb3IgYXR0cnMgaW4gW2RpY3QodHlwZT1pbnQpLCBkaWN0KG5hcmdzPScrJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QoY2hvaWNlcz0nYWInKV06CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy14JywgYWN0aW9uPWFjdGlvbiwgKiphdHRycykKKworICAgIGRlZiB0ZXN0X25vX2FyZ3VtZW50X25vX2NvbnN0X2FjdGlvbnMoc2VsZik6CisgICAgICAgICMgb3B0aW9ucyB3aXRoIHplcm8gYXJndW1lbnRzCisgICAgICAgIGZvciBhY3Rpb24gaW4gWydzdG9yZV90cnVlJywgJ3N0b3JlX2ZhbHNlJywgJ2NvdW50J106CisKKyAgICAgICAgICAgICMgY29uc3QgaXMgYWx3YXlzIGRpc2FsbG93ZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteCcsIGNvbnN0PSdmb28nLCBhY3Rpb249YWN0aW9uKQorCisgICAgICAgICAgICAjIG5hcmdzIGlzIGFsd2F5cyBkaXNhbGxvd2VkCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXgnLCBuYXJncz0nKicsIGFjdGlvbj1hY3Rpb24pCisKKyAgICBkZWYgdGVzdF9tb3JlX3RoYW5fb25lX2FyZ3VtZW50X2FjdGlvbnMoc2VsZik6CisgICAgICAgIGZvciBhY3Rpb24gaW4gWydzdG9yZScsICdhcHBlbmQnXToKKworICAgICAgICAgICAgIyBuYXJncz0wIGlzIGRpc2FsbG93ZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLXgnLCBuYXJncz0wLCBhY3Rpb249YWN0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCdzcGFtJywgbmFyZ3M9MCwgYWN0aW9uPWFjdGlvbikKKworICAgICAgICAgICAgIyBjb25zdCBpcyBkaXNhbGxvd2VkIHdpdGggbm9uLW9wdGlvbmFsIGFyZ3VtZW50cworICAgICAgICAgICAgZm9yIG5hcmdzIGluIFsxLCAnKicsICcrJ106CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCcteCcsIGNvbnN0PSdmb28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJncz1uYXJncywgYWN0aW9uPWFjdGlvbikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJ3NwYW0nLCBjb25zdD0nZm9vJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9bmFyZ3MsIGFjdGlvbj1hY3Rpb24pCisKKyAgICBkZWYgdGVzdF9yZXF1aXJlZF9jb25zdF9hY3Rpb25zKHNlbGYpOgorICAgICAgICBmb3IgYWN0aW9uIGluIFsnc3RvcmVfY29uc3QnLCAnYXBwZW5kX2NvbnN0J106CisKKyAgICAgICAgICAgICMgbmFyZ3MgaXMgYWx3YXlzIGRpc2FsbG93ZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteCcsIG5hcmdzPScrJywgYWN0aW9uPWFjdGlvbikKKworICAgIGRlZiB0ZXN0X3BhcnNlcnNfYWN0aW9uX21pc3NpbmdfcGFyYW1zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignY29tbWFuZCcsIGFjdGlvbj0ncGFyc2VycycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCdjb21tYW5kJywgYWN0aW9uPSdwYXJzZXJzJywgcHJvZz0nUFJPRycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCdjb21tYW5kJywgYWN0aW9uPSdwYXJzZXJzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyX2NsYXNzPWFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKQorCisgICAgZGVmIHRlc3RfcmVxdWlyZWRfcG9zaXRpb25hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJ2ZvbycsIHJlcXVpcmVkPVRydWUpCisKKyAgICBkZWYgdGVzdF91c2VyX2RlZmluZWRfYWN0aW9uKHNlbGYpOgorCisgICAgICAgIGNsYXNzIFN1Y2Nlc3MoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBBY3Rpb24ob2JqZWN0KToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlKToKKyAgICAgICAgICAgICAgICBpZiBkZXN0ID09ICdzcGFtJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgY29uc3QgaXMgU3VjY2VzczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlZmF1bHQgaXMgU3VjY2VzczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTdWNjZXNzKCkKKworICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3VjY2VzcywgcGFyc2VyLmFkZF9hcmd1bWVudCwgJy0tc3BhbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj1BY3Rpb24sIGRlZmF1bHQ9U3VjY2VzcywgY29uc3Q9U3VjY2VzcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3VjY2VzcywgcGFyc2VyLmFkZF9hcmd1bWVudCwgJ3NwYW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249QWN0aW9uLCBkZWZhdWx0PVN1Y2Nlc3MsIGNvbnN0PVN1Y2Nlc3MpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQWN0aW9ucyByZXR1cm5lZCBieSBhZGRfYXJndW1lbnQKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEFjdGlvbnNSZXR1cm5lZChUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZXN0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIGFjdGlvbiA9IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uZGVzdCwgJ2ZvbycpCisgICAgICAgIGFjdGlvbiA9IHBhcnNlci5hZGRfYXJndW1lbnQoJy1iJywgJy0tYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uZGVzdCwgJ2JhcicpCisgICAgICAgIGFjdGlvbiA9IHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgJy15JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uZGVzdCwgJ3gnKQorCisgICAgZGVmIHRlc3RfbWlzYyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBhY3Rpb24gPSBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIG5hcmdzPSc/JywgY29uc3Q9NDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD04NCwgdHlwZT1pbnQsIGNob2ljZXM9WzEsIDJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0ZPTycsIG1ldGF2YXI9J0JBUicsIGRlc3Q9J2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLm5hcmdzLCAnPycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmNvbnN0LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uZGVmYXVsdCwgODQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLnR5cGUsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uY2hvaWNlcywgWzEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5oZWxwLCAnRk9PJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24ubWV0YXZhciwgJ0JBUicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmRlc3QsICdiYXonKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQXJndW1lbnQgY29uZmxpY3QgaGFuZGxpbmcgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdENvbmZsaWN0SGFuZGxpbmcoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFkX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdF9oYW5kbGVyPSdmb28nKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RfZXJyb3Ioc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhcmdwYXJzZS5Bcmd1bWVudEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50LCAnLXgnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNwYW0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhcmdwYXJzZS5Bcmd1bWVudEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50LCAnLS1zcGFtJykKKworICAgIGRlZiB0ZXN0X3Jlc29sdmVfZXJyb3Ioc2VsZik6CisgICAgICAgIGdldF9wYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcgorICAgICAgICBwYXJzZXIgPSBnZXRfcGFyc2VyKHByb2c9J1BST0cnLCBjb25mbGljdF9oYW5kbGVyPSdyZXNvbHZlJykKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGhlbHA9J09MRCBYJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBoZWxwPSdORVcgWCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteCBYXQorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLXggWCAgICAgICAgTkVXIFgKKyAgICAgICAgICAgICcnJykpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zcGFtJywgbWV0YXZhcj0nT0xEX1NQQU0nKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNwYW0nLCBtZXRhdmFyPSdORVdfU1BBTScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteCBYXSBbLS1zcGFtIE5FV19TUEFNXQorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAteCBYICAgICAgICAgICAgIE5FVyBYCisgICAgICAgICAgICAgIC0tc3BhbSBORVdfU1BBTQorICAgICAgICAgICAgJycnKSkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEhlbHAgYW5kIFZlcnNpb24gb3B0aW9uIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RPcHRpb25hbHNIZWxwVmVyc2lvbkFjdGlvbnMoVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIGhlbHAgYW5kIHZlcnNpb24gYWN0aW9ucyIiIgorCisgICAgZGVmIF9nZXRfZXJyb3Ioc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBBcmd1bWVudFBhcnNlckVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgYXNzZXJ0UHJpbnRIZWxwRXhpdChzZWxmLCBwYXJzZXIsIGFyZ3Nfc3RyKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHBhcnNlci5mb3JtYXRfaGVscCgpLAorICAgICAgICAgICAgc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBhcmdzX3N0ci5zcGxpdCgpKS5zdGRvdXQpCisKKyAgICBkZWYgYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChzZWxmLCBwYXJzZXIsIGFyZ3Nfc3RyKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHBhcnNlci5mb3JtYXRfdmVyc2lvbigpLAorICAgICAgICAgICAgc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBhcmdzX3N0ci5zcGxpdCgpKS5zdGRlcnIpCisKKyAgICBkZWYgYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihzZWxmLCBwYXJzZXIsICphcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgcGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcih2ZXJzaW9uPScxLjAnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50SGVscEV4aXQocGFyc2VyLCAnLWgnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50SGVscEV4aXQocGFyc2VyLCAnLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludFZlcnNpb25FeGl0KHBhcnNlciwgJy12JykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludFZlcnNpb25FeGl0KHBhcnNlciwgJy0tdmVyc2lvbicpCisKKyAgICBkZWYgdGVzdF92ZXJzaW9uX2Zvcm1hdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFBQJywgdmVyc2lvbj0nJShwcm9nKXMgMy41JykKKyAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy12J10pLnN0ZGVycgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdQUFAgMy41XG4nLCBtc2cpCisKKyAgICBkZWYgdGVzdF92ZXJzaW9uX25vX2hlbHAoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlLCB2ZXJzaW9uPScxLjAnKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLCAnLWgnKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLCAnLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludFZlcnNpb25FeGl0KHBhcnNlciwgJy12JykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludFZlcnNpb25FeGl0KHBhcnNlciwgJy0tdmVyc2lvbicpCisKKyAgICBkZWYgdGVzdF92ZXJzaW9uX2FjdGlvbihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nWFhYJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLVYnLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSclKHByb2cpcyAzLjcnKQorICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLVYnXSkuc3RkZXJyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1hYWCAzLjdcbicsIG1zZykKKworICAgIGRlZiB0ZXN0X25vX2hlbHAoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLCAnLWgnKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLCAnLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy12JykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy0tdmVyc2lvbicpCisKKyAgICBkZWYgdGVzdF9hbHRlcm5hdGVfaGVscF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgYWN0aW9uPSdoZWxwJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXknLCBhY3Rpb249J3ZlcnNpb24nKQorICAgICAgICBzZWxmLmFzc2VydFByaW50SGVscEV4aXQocGFyc2VyLCAnLXgnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCAnLXknKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLCAnLXYnKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLCAnLS12ZXJzaW9uJykKKworICAgIGRlZiB0ZXN0X2hlbHBfdmVyc2lvbl9leHRyYV9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHZlcnNpb249JzEuMCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgneScpCisKKyAgICAgICAgIyB0cnkgYWxsIGNvbWJpbmF0aW9ucyBvZiB2YWxpZCBwcmVmaXhlcyBhbmQgc3VmZml4ZXMKKyAgICAgICAgdmFsaWRfcHJlZml4ZXMgPSBbJycsICcteCcsICdmb28nLCAnLXggYmFyJywgJ2JheiAteCddCisgICAgICAgIHZhbGlkX3N1ZmZpeGVzID0gdmFsaWRfcHJlZml4ZXMgKyBbJy0tYmFkLW9wdGlvbicsICdmb28gYmFyIGJheiddCisgICAgICAgIGZvciBwcmVmaXggaW4gdmFsaWRfcHJlZml4ZXM6CisgICAgICAgICAgICBmb3Igc3VmZml4IGluIHZhbGlkX3N1ZmZpeGVzOgorICAgICAgICAgICAgICAgIGZvcm1hdCA9ICclcyAlJXMgJXMnICUgKHByZWZpeCwgc3VmZml4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRQcmludEhlbHBFeGl0KHBhcnNlciwgZm9ybWF0ICUgJy1oJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRIZWxwRXhpdChwYXJzZXIsIGZvcm1hdCAlICctLWhlbHAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRQcmludFZlcnNpb25FeGl0KHBhcnNlciwgZm9ybWF0ICUgJy12JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsIGZvcm1hdCAlICctLXZlcnNpb24nKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PQorIyBzdHIoKSBhbmQgcmVwcigpIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFN0cmluZ3MoVGVzdENhc2UpOgorICAgICIiIlRlc3Qgc3RyKCkgIGFuZCByZXByKCkgb24gT3B0aW9uYWxzIGFuZCBQb3NpdGlvbmFscyIiIgorCisgICAgZGVmIGFzc2VydFN0cmluZ0VxdWFsKHNlbGYsIG9iaiwgcmVzdWx0X3N0cmluZyk6CisgICAgICAgIGZvciBmdW5jIGluIFtzdHIsIHJlcHJdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKG9iaiksIHJlc3VsdF9zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9vcHRpb25hbChzZWxmKToKKyAgICAgICAgb3B0aW9uID0gYXJncGFyc2UuQWN0aW9uKAorICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3M9WyctLWZvbycsICctYScsICctYiddLAorICAgICAgICAgICAgZGVzdD0nYicsCisgICAgICAgICAgICB0eXBlPSdpbnQnLAorICAgICAgICAgICAgbmFyZ3M9JysnLAorICAgICAgICAgICAgZGVmYXVsdD00MiwKKyAgICAgICAgICAgIGNob2ljZXM9WzEsIDIsIDNdLAorICAgICAgICAgICAgaGVscD0nSEVMUCcsCisgICAgICAgICAgICBtZXRhdmFyPSdNRVRBVkFSJykKKyAgICAgICAgc3RyaW5nID0gKAorICAgICAgICAgICAgIkFjdGlvbihvcHRpb25fc3RyaW5ncz1bJy0tZm9vJywgJy1hJywgJy1iJ10sIGRlc3Q9J2InLCAiCisgICAgICAgICAgICAibmFyZ3M9JysnLCBjb25zdD1Ob25lLCBkZWZhdWx0PTQyLCB0eXBlPSdpbnQnLCAiCisgICAgICAgICAgICAiY2hvaWNlcz1bMSwgMiwgM10sIGhlbHA9J0hFTFAnLCBtZXRhdmFyPSdNRVRBVkFSJykiKQorICAgICAgICBzZWxmLmFzc2VydFN0cmluZ0VxdWFsKG9wdGlvbiwgc3RyaW5nKQorCisgICAgZGVmIHRlc3RfYXJndW1lbnQoc2VsZik6CisgICAgICAgIGFyZ3VtZW50ID0gYXJncGFyc2UuQWN0aW9uKAorICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3M9W10sCisgICAgICAgICAgICBkZXN0PSd4JywKKyAgICAgICAgICAgIHR5cGU9ZmxvYXQsCisgICAgICAgICAgICBuYXJncz0nPycsCisgICAgICAgICAgICBkZWZhdWx0PTIuNSwKKyAgICAgICAgICAgIGNob2ljZXM9WzAuNSwgMS41LCAyLjVdLAorICAgICAgICAgICAgaGVscD0nSCBISCBIJywKKyAgICAgICAgICAgIG1ldGF2YXI9J01WIE1WIE1WJykKKyAgICAgICAgc3RyaW5nID0gKAorICAgICAgICAgICAgIkFjdGlvbihvcHRpb25fc3RyaW5ncz1bXSwgZGVzdD0neCcsIG5hcmdzPSc/JywgIgorICAgICAgICAgICAgImNvbnN0PU5vbmUsIGRlZmF1bHQ9Mi41LCB0eXBlPSVyLCBjaG9pY2VzPVswLjUsIDEuNSwgMi41XSwgIgorICAgICAgICAgICAgImhlbHA9J0ggSEggSCcsIG1ldGF2YXI9J01WIE1WIE1WJykiICUgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RyaW5nRXF1YWwoYXJndW1lbnQsIHN0cmluZykKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZShzZWxmKToKKyAgICAgICAgbnMgPSBhcmdwYXJzZS5OYW1lc3BhY2UoZm9vPTQyLCBiYXI9J3NwYW0nKQorICAgICAgICBzdHJpbmcgPSAiTmFtZXNwYWNlKGJhcj0nc3BhbScsIGZvbz00MikiCisgICAgICAgIHNlbGYuYXNzZXJ0U3RyaW5nRXF1YWwobnMsIHN0cmluZykKKworICAgIGRlZiB0ZXN0X3BhcnNlcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIHN0cmluZyA9ICgKKyAgICAgICAgICAgICJBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgdXNhZ2U9Tm9uZSwgZGVzY3JpcHRpb249Tm9uZSwgIgorICAgICAgICAgICAgInZlcnNpb249Tm9uZSwgZm9ybWF0dGVyX2NsYXNzPSVyLCBjb25mbGljdF9oYW5kbGVyPSdlcnJvcicsICIKKyAgICAgICAgICAgICJhZGRfaGVscD1UcnVlKSIgJSBhcmdwYXJzZS5IZWxwRm9ybWF0dGVyKQorICAgICAgICBzZWxmLmFzc2VydFN0cmluZ0VxdWFsKHBhcnNlciwgc3RyaW5nKQorCisjID09PT09PT09PT09PT09PQorIyBOYW1lc3BhY2UgdGVzdHMKKyMgPT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3ROYW1lc3BhY2UoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIG5zLCAneCcpCisKKyAgICAgICAgbnMgPSBhcmdwYXJzZS5OYW1lc3BhY2UoYT00MiwgYj0nc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuYSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuYiwgJ3NwYW0nKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIG5zMSA9IGFyZ3BhcnNlLk5hbWVzcGFjZShhPTEsIGI9MikKKyAgICAgICAgbnMyID0gYXJncGFyc2UuTmFtZXNwYWNlKGI9MiwgYT0xKQorICAgICAgICBuczMgPSBhcmdwYXJzZS5OYW1lc3BhY2UoYT0xKQorICAgICAgICBuczQgPSBhcmdwYXJzZS5OYW1lc3BhY2UoYj0yKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMxLCBuczIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobnMxLCBuczMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobnMxLCBuczQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobnMyLCBuczMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobnMyLCBuczQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuczEgIT0gbnMzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMxICE9IG5zNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zMiAhPSBuczMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuczIgIT0gbnM0KQorCisKKyMgPT09PT09PT09PT09PT09PT09PQorIyBGaWxlIGVuY29kaW5nIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEVuY29kaW5nKFRlc3RDYXNlKToKKworICAgIGRlZiBfdGVzdF9tb2R1bGVfZW5jb2Rpbmcoc2VsZiwgcGF0aCk6CisgICAgICAgIHBhdGgsIF8gPSBvcy5wYXRoLnNwbGl0ZXh0KHBhdGgpCisgICAgICAgIHBhdGggKz0gIi5weSIKKyAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihwYXRoLCAncicsICd1dGY4JykgYXMgZjoKKyAgICAgICAgICAgIGYucmVhZCgpCisKKyAgICBkZWYgdGVzdF9hcmdwYXJzZV9tb2R1bGVfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbW9kdWxlX2VuY29kaW5nKGFyZ3BhcnNlLl9fZmlsZV9fKQorCisgICAgZGVmIHRlc3RfdGVzdF9hcmdwYXJzZV9tb2R1bGVfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbW9kdWxlX2VuY29kaW5nKF9fZmlsZV9fKQorCisjID09PT09PT09PT09PT09PT09PT0KKyMgQXJndW1lbnRFcnJvciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBcmd1bWVudEVycm9yKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50X2Vycm9yKHNlbGYpOgorICAgICAgICBtc2cgPSAibXkgZXJyb3IgaGVyZSIKKyAgICAgICAgZXJyb3IgPSBhcmdwYXJzZS5Bcmd1bWVudEVycm9yKE5vbmUsIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyb3IpLCBtc2cpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT0KKyMgQXJndW1lbnRUeXBlRXJyb3IgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEFyZ3VtZW50VHlwZUVycm9yKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50X3R5cGVfZXJyb3Ioc2VsZik6CisKKyAgICAgICAgZGVmIHNwYW0oc3RyaW5nKToKKyAgICAgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKCdzcGFtIScpCisKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycsIGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd4JywgdHlwZT1zcGFtKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbJ1hYWCddKQorICAgICAgICBleGNlcHQgQXJndW1lbnRQYXJzZXJFcnJvcjoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gJ3VzYWdlOiBQUk9HIHhcblBST0c6IGVycm9yOiBhcmd1bWVudCB4OiBzcGFtIVxuJworICAgICAgICAgICAgbXNnID0gc3lzLmV4Y19pbmZvKClbMV0uc3RkZXJyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBtc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisjID09PT09PT09PT09PT09PT09PT09PT0KKyMgcGFyc2Vfa25vd25fYXJncyB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RQYXJzZUtub3duQXJncyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9vcHRpb25hbHMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nKQorICAgICAgICBhcmdzLCBleHRyYXMgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncygnLS1mb28gRiAtLWJhciAtLWJheicuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyhmb289J0YnKSwgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJy0tYmFyJywgJy0tYmF6J10sIGV4dHJhcykKKworICAgIGRlZiB0ZXN0X21peGVkKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgbmFyZ3M9Jz8nLCBjb25zdD0xLCB0eXBlPWludCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zcGFtJywgYWN0aW9uPSdzdG9yZV9mYWxzZScpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhZGdlcicpCisKKyAgICAgICAgYXJndiA9IFsiQiIsICJDIiwgIi0tZm9vIiwgIi12IiwgIjMiLCAiNCJdCisgICAgICAgIGFyZ3MsIGV4dHJhcyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3YpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlModj0zLCBzcGFtPVRydWUsIGJhZGdlcj0iQiIpLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiQyIsICItLWZvbyIsICI0Il0sIGV4dHJhcykKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGZyb20gYXJncGFyc2UgaW1wb3J0ICogdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0SW1wb3J0U3RhcihUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gYXJncGFyc2UuX19hbGxfXzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGFyZ3BhcnNlLCBuYW1lKSkKKworICAgIGRlZiB0ZXN0X2FsbF9leHBvcnRzX2V2ZXJ5dGhpbmdfYnV0X21vZHVsZXMoc2VsZik6CisgICAgICAgIGl0ZW1zID0gWworICAgICAgICAgICAgbmFtZQorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHZhcnMoYXJncGFyc2UpLml0ZW1zKCkKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoIl8iKQorICAgICAgICAgICAgaWYgbm90IGluc3BlY3QuaXNtb2R1bGUodmFsdWUpCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaXRlbXMpLCBzb3J0ZWQoYXJncGFyc2UuX19hbGxfXykpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjIHNpbGVuY2Ugd2FybmluZ3MgYWJvdXQgdmVyc2lvbiBhcmd1bWVudCAtIHRoZXNlIGFyZSBleHBlY3RlZAorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCdUaGUgInZlcnNpb24iIGFyZ3VtZW50IHRvIEFyZ3VtZW50UGFyc2VyIGlzIGRlcHJlY2F0ZWQuJywKKyAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKCdUaGUgKGZvcm1hdHxwcmludClfdmVyc2lvbiBtZXRob2QgaXMgZGVwcmVjYXRlZCcsCisgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisgICAgIyBSZW1vdmUgZ2xvYmFsIHJlZmVyZW5jZXMgdG8gYXZvaWQgbG9va2luZyBsaWtlIHdlIGhhdmUgcmVmbGVha3MuCisgICAgUkZpbGUuc2VlbiA9IHt9CisgICAgV0ZpbGUuc2VlbiA9IHNldCgpCisKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5IGIvTGliL3Rlc3QvdGVzdF9hcnJheS5weQppbmRleCAwMWMyMjA5Li5iNmMwZjFiIDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKQEAgLTE0LDcgKzE0LDcgQEAKIAogY2xhc3MgQXJyYXlTdWJjbGFzc1dpdGhLd2FyZ3MoYXJyYXkuYXJyYXkpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlY29kZSwgbmV3YXJnPU5vbmUpOgotICAgICAgICBhcnJheS5hcnJheS5fX2luaXRfXyh0eXBlY29kZSkKKyAgICAgICAgYXJyYXkuYXJyYXkuX19pbml0X18oc2VsZiwgdHlwZWNvZGUpCiAKIHRlc3RzID0gW10gIyBsaXN0IHRvIGFjY3VtdWxhdGUgYWxsIHRlc3RzCiB0eXBlY29kZXMgPSAiY3ViQmhIaUlsTGZkIgpAQCAtNDgsNyArNDgsNyBAQAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgogICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnR5cGVjb2RlLCBzZWxmLnR5cGVjb2RlKQotICAgICAgICBzZWxmLmFzc2VydF8oYS5pdGVtc2l6ZT49c2VsZi5taW5pdGVtc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuaXRlbXNpemU+PXNlbGYubWluaXRlbXNpemUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXJyYXkuYXJyYXksIHNlbGYudHlwZWNvZGUsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9sZW4oc2VsZik6CkBAIC02MywxMCArNjMsMTAgQEAKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmJ1ZmZlcl9pbmZvLCA0MikKICAgICAgICAgYmkgPSBhLmJ1ZmZlcl9pbmZvKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYmksIHR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpLCB0dXBsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYmkpLCAyKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShiaVswXSwgKGludCwgbG9uZykpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShiaVsxXSwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpWzBdLCAoaW50LCBsb25nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpWzFdLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlbMV0sIGxlbihhKSkKIAogICAgIGRlZiB0ZXN0X2J5dGVzd2FwKHNlbGYpOgpAQCAtMTk5LDYgKzE5OSwyNSBAQAogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKKyAgICBkZWYgdGVzdF9maWxld3JpdGUoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZShhKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICdyYicpCisgICAgICAgICAgICBiLmZyb21maWxlKGYsIGxlbihzZWxmLmV4YW1wbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLCBiKQorICAgICAgICAgICAgYi5mcm9tZmlsZShmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IGYuY2xvc2VkOgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCiAgICAgZGVmIHRlc3RfdG9mcm9tbGlzdChzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDIqc2VsZi5leGFtcGxlKQogICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKQEAgLTIzMywzOSArMjUyLDM5IEBACiAKICAgICBkZWYgdGVzdF9jbXAoc2VsZik6CiAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA9PSA0MikgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSAhPSA0MikgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID09IDQyKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICE9IDQyKSBpcyBUcnVlKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA9PSBhKSBpcyBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgIT0gYSkgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA8IGEpIGlzIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPD0gYSkgaXMgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhID4gYSkgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA+PSBhKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPT0gYSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICE9IGEpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPCBhKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDw9IGEpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+IGEpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPj0gYSkgaXMgVHJ1ZSkKIAogICAgICAgICBhbCA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuc21hbGxlcmV4YW1wbGUpCiAgICAgICAgIGFiID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5iaWdnZXJleGFtcGxlKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA9PSAyKmEpIGlzIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgIT0gMiphKSBpcyBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPCAyKmEpIGlzIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA8PSAyKmEpIGlzIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA+IDIqYSkgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA+PSAyKmEpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPT0gMiphKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICE9IDIqYSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDwgMiphKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPD0gMiphKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPiAyKmEpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPj0gMiphKSBpcyBGYWxzZSkKIAotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPT0gYWwpIGlzIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgIT0gYWwpIGlzIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA8IGFsKSBpcyBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhIDw9IGFsKSBpcyBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhID4gYWwpIGlzIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA+PSBhbCkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID09IGFsKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICE9IGFsKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPCBhbCkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8PSBhbCkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+IGFsKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPj0gYWwpIGlzIFRydWUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhID09IGFiKSBpcyBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhICE9IGFiKSBpcyBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPCBhYikgaXMgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhIDw9IGFiKSBpcyBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPiBhYikgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA+PSBhYikgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA9PSBhYikgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAhPSBhYikgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDwgYWIpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8PSBhYikgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID4gYWIpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPj0gYWIpIGlzIEZhbHNlKQogCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgogICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKSBcCkBAIC0yODQsMTEgKzMwMywxNyBAQAogICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzo6LTFdKQogICAgICAgICBiID0gYQogICAgICAgICBhICs9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDIqc2VsZi5leGFtcGxlKQotICAgICAgICBzZWxmLmFzc2VydF8oYSBpcyBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgYSwKICAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6Oi0xXSsyKnNlbGYuZXhhbXBsZSkKICAgICAgICAgKQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhICs9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUgKyBzZWxmLmV4YW1wbGUpCisgICAgICAgICkKIAogICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi5iYWR0eXBlY29kZSgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19hZGRfXywgYikKQEAgLTMyNywyMiArMzUyLDIyIEBACiAgICAgICAgIGIgPSBhCiAKICAgICAgICAgYSAqPSA1Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBhLAogICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgNSpzZWxmLmV4YW1wbGUpCiAgICAgICAgICkKIAogICAgICAgICBhICo9IDAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgaXMgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKSkKIAogICAgICAgICBhICo9IDEwMDAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgaXMgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKSkKIAogICAgICAgICBhICo9IC0xCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkpCiAKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKQEAgLTYwMywxMSArNjI4LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGRhdGEucmV2ZXJzZSgpCiAgICAgICAgICAgICAgICAgICAgIExbc3RhcnQ6c3RvcDpzdGVwXSA9IGRhdGEKICAgICAgICAgICAgICAgICAgICAgYVtzdGFydDpzdG9wOnN0ZXBdID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgTCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgTCkpCiAKICAgICAgICAgICAgICAgICAgICAgZGVsIExbc3RhcnQ6c3RvcDpzdGVwXQogICAgICAgICAgICAgICAgICAgICBkZWwgYVtzdGFydDpzdG9wOnN0ZXBdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIEwpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIEwpKQogCiAgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CiAgICAgICAgIGV4YW1wbGUgPSAyKnNlbGYuZXhhbXBsZQpAQCAtNjg2LDYgKzcxMSwxMyBAQAogICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlK3NlbGYuZXhhbXBsZVs6Oi0xXSkKICAgICAgICAgKQogCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGEuZXh0ZW5kKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlK3NlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorCiAgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLmJhZHR5cGVjb2RlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5leHRlbmQsIGIpCiAKQEAgLTcyOCw3ICs3NjAsNyBAQAogCiAgICAgZGVmIHRlc3RfYnVmZmVyKHNlbGYpOgogICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBiID0gYnVmZmVyKGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlswXSwgYS50b3N0cmluZygpWzBdKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzY2lpX2Zvcm1hdGQucHkgYi9MaWIvdGVzdC90ZXN0X2FzY2lpX2Zvcm1hdGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhNjE2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXNjaWlfZm9ybWF0ZC5weQpAQCAtMCwwICsxLDU4IEBACisjIFB5T1NfYXNjaWlfZm9ybWF0ZCBpcyBkZXByZWNhdGVkIGFuZCBub3QgY2FsbGVkIGZyb20gYW55d2hlcmUgaW4KKyMgIFB5dGhvbiBpdHNlbGYuIFNvIHRoaXMgbW9kdWxlIGlzIHRoZSBvbmx5IHBsYWNlIGl0IGdldHMgdGVzdGVkLgorIyBUZXN0IHRoYXQgaXQgd29ya3MsIGFuZCB0ZXN0IHRoYXQgaXQncyBkZXByZWNhdGVkLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKKworIyBTa2lwIHRlc3RzIGlmIF9jdHlwZXMgbW9kdWxlIGRvZXMgbm90IGV4aXN0CitpbXBvcnRfbW9kdWxlKCdfY3R5cGVzJykKKworZnJvbSBjdHlwZXMgaW1wb3J0IHB5dGhvbmFwaSwgY3JlYXRlX3N0cmluZ19idWZmZXIsIHNpemVvZiwgYnlyZWYsIGNfZG91YmxlCitQeU9TX2FzY2lpX2Zvcm1hdGQgPSBweXRob25hcGkuUHlPU19hc2NpaV9mb3JtYXRkCisKKworY2xhc3MgRm9ybWF0RGVwcmVjYXRpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIGJ1ZiA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKCcgJyAqIDEwMCkKKworICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnUHlPU19hc2NpaV9mb3JtYXRkIGlzIGRlcHJlY2F0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIFB5T1NfYXNjaWlfZm9ybWF0ZChieXJlZihidWYpLCBzaXplb2YoYnVmKSwgJyUrLjEwZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY19kb3VibGUoMTAuMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgJysxMC4wMDAwMDAwMDAwJykKKworCitjbGFzcyBGb3JtYXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBlbnN1cmUgdGhhdCwgZm9yIHRoZSByZXN0cmljdGVkIHNldCBvZiBmb3JtYXQgY29kZXMsCisgICAgIyAlLWZvcm1hdHRpbmcgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZXMgb3MgUHlPU19hc2NpaV9mb3JtYXRkCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICBidWYgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcignICcgKiAxMDApCisKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoJyVmJywgMTAwLjApLAorICAgICAgICAgICAgKCclZycsIDEwMC4wKSwKKyAgICAgICAgICAgICgnJSNnJywgMTAwLjApLAorICAgICAgICAgICAgKCclIy4yZycsIDEwMC4wKSwKKyAgICAgICAgICAgICgnJSMuMmcnLCAxMjMuNDU2NyksCisgICAgICAgICAgICAoJyUjLjJnJywgMS4yMzQ1NjdlMjAwKSwKKyAgICAgICAgICAgICgnJWUnLCAxLjIzNDU2N2UyMDApLAorICAgICAgICAgICAgKCclZScsIDEuMjM0KSwKKyAgICAgICAgICAgICgnJStlJywgMS4yMzQpLAorICAgICAgICAgICAgKCclLWUnLCAxLjIzNCksCisgICAgICAgICAgICBdCisKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJ1B5T1NfYXNjaWlfZm9ybWF0ZCBpcyBkZXByZWNhdGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBmb3IgZm9ybWF0LCB2YWwgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgUHlPU19hc2NpaV9mb3JtYXRkKGJ5cmVmKGJ1ZiksIHNpemVvZihidWYpLCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZG91YmxlKHZhbCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsIGZvcm1hdCAlIHZhbCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEZvcm1hdERlcHJlY2F0aW9uVGVzdHMsIEZvcm1hdFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CmluZGV4IDIxMjJmNjEuLmMxNTc0ZWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CkBAIC02NCw2ICs2NCwxMCBAQAogICAgICJicmVhayIsCiAgICAgIyBDb250aW51ZQogICAgICJjb250aW51ZSIsCisgICAgIyBmb3Igc3RhdGVtZW50cyB3aXRoIG5ha2VkIHR1cGxlcyAoc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2NzA0KQorICAgICJmb3IgYSxiIGluIGM6IHBhc3MiLAorICAgICJbKGEsYikgZm9yIGEsYiBpbiBjXSIsCisgICAgIigoYSxiKSBmb3IgYSxiIGluIGMpIiwKIF0KIAogIyBUaGVzZSBhcmUgY29tcGlsZWQgdGhyb3VnaCAic2luZ2xlIgpAQCAtMTIyLDIwICsxMjYsMjAgQEAKIAogY2xhc3MgQVNUX1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiBfYXNzZXJ0X29yZGVyKHNlbGYsIGFzdF9ub2RlLCBwYXJlbnRfcG9zKToKKyAgICBkZWYgX2Fzc2VydFRydWVvcmRlcihzZWxmLCBhc3Rfbm9kZSwgcGFyZW50X3Bvcyk6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFzdF9ub2RlLCBhc3QuQVNUKSBvciBhc3Rfbm9kZS5fZmllbGRzIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgaXNpbnN0YW5jZShhc3Rfbm9kZSwgKGFzdC5leHByLCBhc3Quc3RtdCwgYXN0LmV4Y2VwdGhhbmRsZXIpKToKICAgICAgICAgICAgIG5vZGVfcG9zID0gKGFzdF9ub2RlLmxpbmVubywgYXN0X25vZGUuY29sX29mZnNldCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub2RlX3BvcyA+PSBwYXJlbnRfcG9zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGVfcG9zID49IHBhcmVudF9wb3MpCiAgICAgICAgICAgICBwYXJlbnRfcG9zID0gKGFzdF9ub2RlLmxpbmVubywgYXN0X25vZGUuY29sX29mZnNldCkKICAgICAgICAgZm9yIG5hbWUgaW4gYXN0X25vZGUuX2ZpZWxkczoKICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihhc3Rfbm9kZSwgbmFtZSkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgogICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiB2YWx1ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X29yZGVyKGNoaWxkLCBwYXJlbnRfcG9zKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIoY2hpbGQsIHBhcmVudF9wb3MpCiAgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9vcmRlcih2YWx1ZSwgcGFyZW50X3BvcykKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIodmFsdWUsIHBhcmVudF9wb3MpCiAKICAgICBkZWYgdGVzdF9zbmlwcGV0cyhzZWxmKToKICAgICAgICAgZm9yIGlucHV0LCBvdXRwdXQsIGtpbmQgaW4gKChleGVjX3Rlc3RzLCBleGVjX3Jlc3VsdHMsICJleGVjIiksCkBAIC0xNDMsMjUgKzE0Nyw0NCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2YWxfdGVzdHMsIGV2YWxfcmVzdWx0cywgImV2YWwiKSk6CiAgICAgICAgICAgICBmb3IgaSwgbyBpbiBpdGVydG9vbHMuaXppcChpbnB1dCwgb3V0cHV0KToKICAgICAgICAgICAgICAgICBhc3RfdHJlZSA9IGNvbXBpbGUoaSwgIj8iLCBraW5kLCBhc3QuUHlDRl9PTkxZX0FTVCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0b190dXBsZShhc3RfdHJlZSksIG8pCi0gICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X29yZGVyKGFzdF90cmVlLCAoMCwgMCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b190dXBsZShhc3RfdHJlZSksIG8pCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKGFzdF90cmVlLCAoMCwgMCkpCisKKyAgICBkZWYgdGVzdF9zbGljZShzZWxmKToKKyAgICAgICAgc2xjID0gYXN0LnBhcnNlKCJ4Wzo6XSIpLmJvZHlbMF0udmFsdWUuc2xpY2UKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2xjLnVwcGVyKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzbGMubG93ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzbGMuc3RlcCwgYXN0Lk5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xjLnN0ZXAuaWQsICJOb25lIikKKworICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0KHNlbGYpOgorICAgICAgICBpbSA9IGFzdC5wYXJzZSgiZnJvbSAuIGltcG9ydCB5IikuYm9keVswXQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbS5tb2R1bGUpCisKKyAgICBkZWYgdGVzdF9iYXNlX2NsYXNzZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGFzdC5Gb3IsIGFzdC5zdG10KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYXN0Lk5hbWUsIGFzdC5leHByKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYXN0LnN0bXQsIGFzdC5BU1QpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhhc3QuZXhwciwgYXN0LkFTVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGFzdC5jb21wcmVoZW5zaW9uLCBhc3QuQVNUKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYXN0Lkd0LCBhc3QuQVNUKSkKIAogICAgIGRlZiB0ZXN0X25vZGVjbGFzc2VzKHNlbGYpOgogICAgICAgICB4ID0gYXN0LkJpbk9wKDEsIDIsIDMsIGxpbmVubz0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LmxlZnQsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgub3AsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgucmlnaHQsIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgubGluZW5vLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGVmdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm9wLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgucmlnaHQsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5saW5lbm8sIDApCiAKICAgICAgICAgIyBub2RlIHJhaXNlcyBleGNlcHRpb24gd2hlbiBub3QgZ2l2ZW4gZW5vdWdoIGFyZ3VtZW50cwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFzdC5CaW5PcCwgMSwgMikKIAogICAgICAgICAjIGNhbiBzZXQgYXR0cmlidXRlcyB0aHJvdWdoIGt3YXJncyB0b28KICAgICAgICAgeCA9IGFzdC5CaW5PcChsZWZ0PTEsIG9wPTIsIHJpZ2h0PTMsIGxpbmVubz0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LmxlZnQsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgub3AsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgucmlnaHQsIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgubGluZW5vLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGVmdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm9wLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgucmlnaHQsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5saW5lbm8sIDApCiAKICAgICAgICAgIyB0aGlzIHVzZWQgdG8gZmFpbCBiZWNhdXNlIFN1Yi5fZmllbGRzIHdhcyBOb25lCiAgICAgICAgIHggPSBhc3QuU3ViKCkKQEAgLTE3OSw3ICsyMDIsNyBAQAogICAgICAgICAgICAgZm9yIHByb3RvY29sIGluIHByb3RvY29sczoKICAgICAgICAgICAgICAgICBmb3IgYXN0IGluIChjb21waWxlKGksICI/IiwgImV4ZWMiLCAweDQwMCkgZm9yIGkgaW4gZXhlY190ZXN0cyk6CiAgICAgICAgICAgICAgICAgICAgIGFzdDIgPSBtb2QubG9hZHMobW9kLmR1bXBzKGFzdCwgcHJvdG9jb2wpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0b190dXBsZShhc3QyKSwgdG9fdHVwbGUoYXN0KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b190dXBsZShhc3QyKSwgdG9fdHVwbGUoYXN0KSkKIAogCiBjbGFzcyBBU1RIZWxwZXJzX1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjQxLDYgKzI2NCwxNCBAQAogICAgICAgICAgICAgJ29wPUFkZCgpLCByaWdodD1OdW0obj0xLCBsaW5lbm89NCwgY29sX29mZnNldD00KSwgbGluZW5vPTQsICcKICAgICAgICAgICAgICdjb2xfb2Zmc2V0PTApKScKICAgICAgICAgKQorICAgICAgICAjIGlzc3VlMTA4Njk6IGRvIG5vdCBpbmNyZW1lbnQgbGluZW5vIG9mIHJvb3QgdHdpY2UKKyAgICAgICAgc3JjID0gYXN0LnBhcnNlKCcxICsgMScsIG1vZGU9J2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5pbmNyZW1lbnRfbGluZW5vKHNyYy5ib2R5LCBuPTMpLCBzcmMuYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuZHVtcChzcmMsIGluY2x1ZGVfYXR0cmlidXRlcz1UcnVlKSwKKyAgICAgICAgICAgICdFeHByZXNzaW9uKGJvZHk9QmluT3AobGVmdD1OdW0obj0xLCBsaW5lbm89NCwgY29sX29mZnNldD0wKSwgJworICAgICAgICAgICAgJ29wPUFkZCgpLCByaWdodD1OdW0obj0xLCBsaW5lbm89NCwgY29sX29mZnNldD00KSwgbGluZW5vPTQsICcKKyAgICAgICAgICAgICdjb2xfb2Zmc2V0PTApKScKKyAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfaXRlcl9maWVsZHMoc2VsZik6CiAgICAgICAgIG5vZGUgPSBhc3QucGFyc2UoJ2ZvbygpJywgbW9kZT0nZXZhbCcpCkBAIC0yNzEsOCArMzAyLDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgnKFRydWUsIEZhbHNlLCBOb25lKScpLCAoVHJ1ZSwgRmFsc2UsIE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhc3QubGl0ZXJhbF9ldmFsLCAnZm9vKCknKQogCisgICAgZGVmIHRlc3RfbGl0ZXJhbF9ldmFsX2lzc3VlNDkwNyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QubGl0ZXJhbF9ldmFsKCcyaicpLCAyaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QubGl0ZXJhbF9ldmFsKCcxMCArIDJqJyksIDEwICsgMmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgnMS41IC0gMmonKSwgMS41IC0gMmopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFzdC5saXRlcmFsX2V2YWwsICcyICsgKDMgKyA0aiknKQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygoImJhY2txdW90ZSBub3Qgc3VwcG9ydGVkIiwKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCgiYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4V2FybmluZykpOgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEFTVF9UZXN0cywgQVNUSGVscGVyc19UZXN0KQogCkBAIC0yODUsNyArMzIzLDcgQEAKICAgICAgICAgICAgIHByaW50IGtpbmQrIl9yZXN1bHRzID0gWyIKICAgICAgICAgICAgIGZvciBzIGluIHN0YXRlbWVudHM6CiAgICAgICAgICAgICAgICAgcHJpbnQgcmVwcih0b190dXBsZShjb21waWxlKHMsICI/Iiwga2luZCwgMHg0MDApKSkrIiwiCi0gICAgICAgICAgICAgICAgcHJpbnQgIl0iCisgICAgICAgICAgICBwcmludCAiXSIKICAgICAgICAgcHJpbnQgIm1haW4oKSIKICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAogICAgIHRlc3RfbWFpbigpCkBAIC0zMTQsNiArMzUyLDkgQEAKICgnTW9kdWxlJywgWygnUGFzcycsICgxLCAwKSldKSwKICgnTW9kdWxlJywgWygnQnJlYWsnLCAoMSwgMCkpXSksCiAoJ01vZHVsZScsIFsoJ0NvbnRpbnVlJywgKDEsIDApKV0pLAorKCdNb2R1bGUnLCBbKCdGb3InLCAoMSwgMCksICgnVHVwbGUnLCAoMSwgNCksIFsoJ05hbWUnLCAoMSwgNCksICdhJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCA2KSwgJ2InLCAoJ1N0b3JlJywpKV0sICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTEpLCAnYycsICgnTG9hZCcsKSksIFsoJ1Bhc3MnLCAoMSwgMTQpKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0xpc3RDb21wJywgKDEsIDEpLCAoJ1R1cGxlJywgKDEsIDIpLCBbKCdOYW1lJywgKDEsIDIpLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA0KSwgJ2InLCAoJ0xvYWQnLCkpXSwgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnVHVwbGUnLCAoMSwgMTEpLCBbKCdOYW1lJywgKDEsIDExKSwgJ2EnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEzKSwgJ2InLCAoJ1N0b3JlJywpKV0sICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTgpLCAnYycsICgnTG9hZCcsKSksIFtdKV0pKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0dlbmVyYXRvckV4cCcsICgxLCAxKSwgKCdUdXBsZScsICgxLCAyKSwgWygnTmFtZScsICgxLCAyKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNCksICdiJywgKCdMb2FkJywpKV0sICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ1R1cGxlJywgKDEsIDExKSwgWygnTmFtZScsICgxLCAxMSksICdhJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMyksICdiJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDE4KSwgJ2MnLCAoJ0xvYWQnLCkpLCBbXSldKSldKSwKIF0KIHNpbmdsZV9yZXN1bHRzID0gWwogKCdJbnRlcmFjdGl2ZScsIFsoJ0V4cHInLCAoMSwgMCksICgnQmluT3AnLCAoMSwgMCksICgnTnVtJywgKDEsIDApLCAxKSwgKCdBZGQnLCksICgnTnVtJywgKDEsIDIpLCAyKSkpXSksCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQppbmRleCA1NTAxYzJkLi5jODFlYzBkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKQEAgLTEsOTkgKzEsMTEwIEBACi0jIHRlc3QgYXN5bmNoYXQgLS0gcmVxdWlyZXMgdGhyZWFkaW5nCisjIHRlc3QgYXN5bmNoYXQKIAotaW1wb3J0IHRocmVhZCAjIElmIHRoaXMgZmFpbHMsIHdlIGNhbid0IHRlc3QgdGhpcyBtb2R1bGUKLWltcG9ydCBhc3luY29yZSwgYXN5bmNoYXQsIHNvY2tldCwgdGhyZWFkaW5nLCB0aW1lCitpbXBvcnQgYXN5bmNvcmUsIGFzeW5jaGF0LCBzb2NrZXQsIHRpbWUKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQogCiBIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKIFNFUlZFUl9RVUlUID0gJ1FVSVRcbicKIAotY2xhc3MgZWNob19zZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6Ci0gICAgIyBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGFzc2VkIGJhY2sgdG8gdGhlCi0gICAgIyBjbGllbnQgZWFjaCBzZW5kCi0gICAgY2h1bmtfc2l6ZSA9IDEKK2lmIHRocmVhZGluZzoKKyAgICBjbGFzcyBlY2hvX3NlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgIyBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGFzc2VkIGJhY2sgdG8gdGhlCisgICAgICAgICMgY2xpZW50IGVhY2ggc2VuZAorICAgICAgICBjaHVua19zaXplID0gMQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50KToKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLmV2ZW50ID0gZXZlbnQKLSAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50KToKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuZXZlbnQgPSBldmVudAorICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCisgICAgICAgICAgICAjIFRoaXMgd2lsbCBiZSBzZXQgaWYgdGhlIGNsaWVudCB3YW50cyB1cyB0byB3YWl0IGJlZm9yZSBlY2hvaW5nIGRhdGEKKyAgICAgICAgICAgICMgYmFjay4KKyAgICAgICAgICAgIHNlbGYuc3RhcnRfcmVzZW5kX2V2ZW50ID0gTm9uZQogCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5zb2NrLmxpc3RlbigxKQotICAgICAgICBzZWxmLmV2ZW50LnNldCgpCi0gICAgICAgIGNvbm4sIGNsaWVudCA9IHNlbGYuc29jay5hY2NlcHQoKQotICAgICAgICBzZWxmLmJ1ZmZlciA9ICIiCi0gICAgICAgICMgY29sbGVjdCBkYXRhIHVudGlsIHF1aXQgbWVzc2FnZSBpcyBzZWVuCi0gICAgICAgIHdoaWxlIFNFUlZFUl9RVUlUIG5vdCBpbiBzZWxmLmJ1ZmZlcjoKLSAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoMSkKLSAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyICsgZGF0YQorICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zb2NrLmxpc3RlbigxKQorICAgICAgICAgICAgc2VsZi5ldmVudC5zZXQoKQorICAgICAgICAgICAgY29ubiwgY2xpZW50ID0gc2VsZi5zb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9ICIiCisgICAgICAgICAgICAjIGNvbGxlY3QgZGF0YSB1bnRpbCBxdWl0IG1lc3NhZ2UgaXMgc2VlbgorICAgICAgICAgICAgd2hpbGUgU0VSVkVSX1FVSVQgbm90IGluIHNlbGYuYnVmZmVyOgorICAgICAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoMSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyICsgZGF0YQogCi0gICAgICAgICMgcmVtb3ZlIHRoZSBTRVJWRVJfUVVJVCBtZXNzYWdlCi0gICAgICAgIHNlbGYuYnVmZmVyID0gc2VsZi5idWZmZXIucmVwbGFjZShTRVJWRVJfUVVJVCwgJycpCisgICAgICAgICAgICAjIHJlbW92ZSB0aGUgU0VSVkVSX1FVSVQgbWVzc2FnZQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlci5yZXBsYWNlKFNFUlZFUl9RVUlULCAnJykKIAotICAgICAgICAjIHJlLXNlbmQgZW50aXJlIHNldCBvZiBjb2xsZWN0ZWQgZGF0YQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIHRoaXMgbWF5IGZhaWwgb24gc29tZSB0ZXN0cywgc3VjaCBhcyB0ZXN0X2Nsb3NlX3doZW5fZG9uZSwgc2luY2UKLSAgICAgICAgICAgICMgdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNoYW5uZWwgd2hlbiBpdCdzIGRvbmUgc2VuZGluZwotICAgICAgICAgICAgd2hpbGUgc2VsZi5idWZmZXI6Ci0gICAgICAgICAgICAgICAgbiA9IGNvbm4uc2VuZChzZWxmLmJ1ZmZlcls6c2VsZi5jaHVua19zaXplXSkKLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDAxKQotICAgICAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gc2VsZi5idWZmZXJbbjpdCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhcnRfcmVzZW5kX2V2ZW50OgorICAgICAgICAgICAgICAgIHNlbGYuc3RhcnRfcmVzZW5kX2V2ZW50LndhaXQoKQorCisgICAgICAgICAgICAjIHJlLXNlbmQgZW50aXJlIHNldCBvZiBjb2xsZWN0ZWQgZGF0YQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgdGhpcyBtYXkgZmFpbCBvbiBzb21lIHRlc3RzLCBzdWNoIGFzIHRlc3RfY2xvc2Vfd2hlbl9kb25lLCBzaW5jZQorICAgICAgICAgICAgICAgICMgdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNoYW5uZWwgd2hlbiBpdCdzIGRvbmUgc2VuZGluZworICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuYnVmZmVyOgorICAgICAgICAgICAgICAgICAgICBuID0gY29ubi5zZW5kKHNlbGYuYnVmZmVyWzpzZWxmLmNodW5rX3NpemVdKQorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDAxKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyW246XQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorCisgICAgY2xhc3MgZWNob19jbGllbnQoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlcm1pbmF0b3IsIHNlcnZlcl9wb3J0KToKKyAgICAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuY29udGVudHMgPSBbXQorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzZWxmLmNvbm5lY3QoKEhPU1QsIHNlcnZlcl9wb3J0KSkKKyAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IodGVybWluYXRvcikKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gJycKKworICAgICAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CiAgICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgY29ubi5jbG9zZSgpCi0gICAgICAgIHNlbGYuc29jay5jbG9zZSgpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICMgc2VsZWN0LnBvbGwgcmV0dXJucyBhIHNlbGVjdC5QT0xMSFVQIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3RzCisgICAgICAgICAgICAjIG9uIGRhcndpbiwgc28ganVzdCBpZ25vcmUgaXQKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfZXhwdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCiAKLWNsYXNzIGVjaG9fY2xpZW50KGFzeW5jaGF0LmFzeW5jX2NoYXQpOgorICAgICAgICBkZWYgY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgc2VsZi5idWZmZXIgKz0gZGF0YQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlcm1pbmF0b3IsIHNlcnZlcl9wb3J0KToKLSAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLmNvbnRlbnRzID0gW10KLSAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuY29ubmVjdCgoSE9TVCwgc2VydmVyX3BvcnQpKQotICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKHRlcm1pbmF0b3IpCi0gICAgICAgIHNlbGYuYnVmZmVyID0gJycKLQotICAgIGRlZiBoYW5kbGVfY29ubmVjdChzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAjIHNlbGVjdC5wb2xsIHJldHVybnMgYSBzZWxlY3QuUE9MTEhVUCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0cwotICAgICAgICAjIG9uIGRhcndpbiwgc28ganVzdCBpZ25vcmUgaXQKLSAgICAgICAgZGVmIGhhbmRsZV9leHB0KHNlbGYpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIGNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5idWZmZXIgKz0gZGF0YQotCi0gICAgZGVmIGZvdW5kX3Rlcm1pbmF0b3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuY29udGVudHMuYXBwZW5kKHNlbGYuYnVmZmVyKQotICAgICAgICBzZWxmLmJ1ZmZlciA9ICIiCisgICAgICAgIGRlZiBmb3VuZF90ZXJtaW5hdG9yKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5jb250ZW50cy5hcHBlbmQoc2VsZi5idWZmZXIpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9ICIiCiAKIAotZGVmIHN0YXJ0X2VjaG9fc2VydmVyKCk6Ci0gICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgIHMgPSBlY2hvX3NlcnZlcihldmVudCkKLSAgICBzLnN0YXJ0KCkKLSAgICBldmVudC53YWl0KCkKLSAgICBldmVudC5jbGVhcigpCi0gICAgdGltZS5zbGVlcCgwLjAxKSAjIEdpdmUgc2VydmVyIHRpbWUgdG8gc3RhcnQgYWNjZXB0aW5nLgotICAgIHJldHVybiBzLCBldmVudAorICAgIGRlZiBzdGFydF9lY2hvX3NlcnZlcigpOgorICAgICAgICBldmVudCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHMgPSBlY2hvX3NlcnZlcihldmVudCkKKyAgICAgICAgcy5zdGFydCgpCisgICAgICAgIGV2ZW50LndhaXQoKQorICAgICAgICBldmVudC5jbGVhcigpCisgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkgIyBHaXZlIHNlcnZlciB0aW1lIHRvIHN0YXJ0IGFjY2VwdGluZy4KKyAgICAgICAgcmV0dXJuIHMsIGV2ZW50CiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIFRlc3RBc3luY2hhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgdXNlcG9sbCA9IEZhbHNlCiAKICAgICBkZWYgc2V0VXAgKHNlbGYpOgotICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKIAogICAgIGRlZiB0ZWFyRG93biAoc2VsZik6Ci0gICAgICAgIHBhc3MKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQogCiAgICAgZGVmIGxpbmVfdGVybWluYXRvcl9jaGVjayhzZWxmLCB0ZXJtLCBzZXJ2ZXJfY2h1bmspOgogICAgICAgICBldmVudCA9IHRocmVhZGluZy5FdmVudCgpCkBAIC0yMDAsMTEgKzIxMSwxOCBAQAogCiAgICAgZGVmIHRlc3RfY2xvc2Vfd2hlbl9kb25lKHNlbGYpOgogICAgICAgICBzLCBldmVudCA9IHN0YXJ0X2VjaG9fc2VydmVyKCkKKyAgICAgICAgcy5zdGFydF9yZXNlbmRfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICBjID0gZWNob19jbGllbnQoJ1xuJywgcy5wb3J0KQogICAgICAgICBjLnB1c2goImhlbGxvIHdvcmxkXG5JJ20gbm90IGRlYWQgeWV0IVxuIikKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBjLmNsb3NlX3doZW5fZG9uZSgpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQorCisgICAgICAgICMgT25seSBhbGxvdyB0aGUgc2VydmVyIHRvIHN0YXJ0IGVjaG9pbmcgZGF0YSBiYWNrIHRvIHRoZSBjbGllbnQgYWZ0ZXIKKyAgICAgICAgIyB0aGUgY2xpZW50IGhhcyBjbG9zZWQgaXRzIGNvbm5lY3Rpb24uICBUaGlzIHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24KKyAgICAgICAgIyB3aGVyZSB0aGUgc2VydmVyIGVjaG9lcyBhbGwgb2YgaXRzIGRhdGEgYmVmb3JlIHdlIGNhbiBjaGVjayB0aGF0IGl0CisgICAgICAgICMgZ290IGFueSBkb3duIGJlbG93LgorICAgICAgICBzLnN0YXJ0X3Jlc2VuZF9ldmVudC5zZXQoKQogICAgICAgICBzLmpvaW4oKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW10pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQppbmRleCA1NmYxOTM5Li43ZDFhM2NiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKQEAgLTMsMTUgKzMsMjAgQEAKIGltcG9ydCBzZWxlY3QKIGltcG9ydCBvcwogaW1wb3J0IHNvY2tldAotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKK2ltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGVycm5vCiAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rCiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKwogSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCiAKIGNsYXNzIGR1bW15c29ja2V0OgpAQCAtMTEyLDY1ICsxMTcsNjUgQEAKICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1saXN0LzIwMDEtT2N0b2Jlci8xMDk5NzMuaHRtbCkKICAgICAjIFRoZXNlIGNvbnN0YW50cyBzaG91bGQgYmUgcHJlc2VudCBhcyBsb25nIGFzIHBvbGwgaXMgYXZhaWxhYmxlCiAKLSAgICBpZiBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKToKLSAgICAgICAgZGVmIHRlc3RfcmVhZHdyaXRlKHNlbGYpOgotICAgICAgICAgICAgIyBDaGVjayB0aGF0IGNvcnJlY3QgbWV0aG9kcyBhcmUgY2FsbGVkIGJ5IHJlYWR3cml0ZSgpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3QsICdwb2xsJyksICdzZWxlY3QucG9sbCByZXF1aXJlZCcpCisgICAgZGVmIHRlc3RfcmVhZHdyaXRlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgY29ycmVjdCBtZXRob2RzIGFyZSBjYWxsZWQgYnkgcmVhZHdyaXRlKCkKIAotICAgICAgICAgICAgYXR0cmlidXRlcyA9ICgncmVhZCcsICdleHB0JywgJ3dyaXRlJywgJ2Nsb3NlZCcsICdlcnJvcl9oYW5kbGVkJykKKyAgICAgICAgYXR0cmlidXRlcyA9ICgncmVhZCcsICdleHB0JywgJ3dyaXRlJywgJ2Nsb3NlZCcsICdlcnJvcl9oYW5kbGVkJykKIAotICAgICAgICAgICAgZXhwZWN0ZWQgPSAoCi0gICAgICAgICAgICAgICAgKHNlbGVjdC5QT0xMSU4sICdyZWFkJyksCi0gICAgICAgICAgICAgICAgKHNlbGVjdC5QT0xMUFJJLCAnZXhwdCcpLAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTE9VVCwgJ3dyaXRlJyksCi0gICAgICAgICAgICAgICAgKHNlbGVjdC5QT0xMRVJSLCAnY2xvc2VkJyksCi0gICAgICAgICAgICAgICAgKHNlbGVjdC5QT0xMSFVQLCAnY2xvc2VkJyksCi0gICAgICAgICAgICAgICAgKHNlbGVjdC5QT0xMTlZBTCwgJ2Nsb3NlZCcpLAotICAgICAgICAgICAgICAgICkKKyAgICAgICAgZXhwZWN0ZWQgPSAoCisgICAgICAgICAgICAoc2VsZWN0LlBPTExJTiwgJ3JlYWQnKSwKKyAgICAgICAgICAgIChzZWxlY3QuUE9MTFBSSSwgJ2V4cHQnKSwKKyAgICAgICAgICAgIChzZWxlY3QuUE9MTE9VVCwgJ3dyaXRlJyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExFUlIsICdjbG9zZWQnKSwKKyAgICAgICAgICAgIChzZWxlY3QuUE9MTEhVUCwgJ2Nsb3NlZCcpLAorICAgICAgICAgICAgKHNlbGVjdC5QT0xMTlZBTCwgJ2Nsb3NlZCcpLAorICAgICAgICAgICAgKQogCi0gICAgICAgICAgICBjbGFzcyB0ZXN0b2JqOgotICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5leHB0ID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcl9oYW5kbGVkID0gRmFsc2UKKyAgICAgICAgY2xhc3MgdGVzdG9iajoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnJlYWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmV4cHQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JfaGFuZGxlZCA9IEZhbHNlCiAKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWRfZXZlbnQoc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZCA9IFRydWUKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfcmVhZF9ldmVudChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnJlYWQgPSBUcnVlCiAKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlX3dyaXRlX2V2ZW50KHNlbGYpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlID0gVHJ1ZQorICAgICAgICAgICAgZGVmIGhhbmRsZV93cml0ZV9ldmVudChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlID0gVHJ1ZQogCi0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9jbG9zZShzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCisgICAgICAgICAgICBkZWYgaGFuZGxlX2Nsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQogCi0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9leHB0X2V2ZW50KHNlbGYpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cHQgPSBUcnVlCisgICAgICAgICAgICBkZWYgaGFuZGxlX2V4cHRfZXZlbnQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5leHB0ID0gVHJ1ZQogCi0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcl9oYW5kbGVkID0gVHJ1ZQorICAgICAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yX2hhbmRsZWQgPSBUcnVlCiAKLSAgICAgICAgICAgIGZvciBmbGFnLCBleHBlY3RlZGF0dHIgaW4gZXhwZWN0ZWQ6Ci0gICAgICAgICAgICAgICAgdG9iaiA9IHRlc3RvYmooKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cih0b2JqLCBleHBlY3RlZGF0dHIpLCBGYWxzZSkKLSAgICAgICAgICAgICAgICBhc3luY29yZS5yZWFkd3JpdGUodG9iaiwgZmxhZykKKyAgICAgICAgZm9yIGZsYWcsIGV4cGVjdGVkYXR0ciBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgIHRvYmogPSB0ZXN0b2JqKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cih0b2JqLCBleHBlY3RlZGF0dHIpLCBGYWxzZSkKKyAgICAgICAgICAgIGFzeW5jb3JlLnJlYWR3cml0ZSh0b2JqLCBmbGFnKQogCi0gICAgICAgICAgICAgICAgIyBPbmx5IHRoZSBhdHRyaWJ1dGUgbW9kaWZpZWQgYnkgdGhlIHJvdXRpbmUgd2UgZXhwZWN0IHRvIGJlCi0gICAgICAgICAgICAgICAgIyBjYWxsZWQgc2hvdWxkIGJlIFRydWUuCi0gICAgICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHRvYmosIGF0dHIpLCBhdHRyPT1leHBlY3RlZGF0dHIpCisgICAgICAgICAgICAjIE9ubHkgdGhlIGF0dHJpYnV0ZSBtb2RpZmllZCBieSB0aGUgcm91dGluZSB3ZSBleHBlY3QgdG8gYmUKKyAgICAgICAgICAgICMgY2FsbGVkIHNob3VsZCBiZSBUcnVlLgorICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIodG9iaiwgYXR0ciksIGF0dHI9PWV4cGVjdGVkYXR0cikKIAotICAgICAgICAgICAgICAgICMgY2hlY2sgdGhhdCBFeGl0Tm93IGV4Y2VwdGlvbnMgaW4gdGhlIG9iamVjdCBoYW5kbGVyIG1ldGhvZAotICAgICAgICAgICAgICAgICMgYnViYmxlcyBhbGwgdGhlIHdheSB1cCB0aHJvdWdoIGFzeW5jb3JlIHJlYWR3cml0ZSBjYWxsCi0gICAgICAgICAgICAgICAgdHIxID0gZXhpdGluZ2R1bW15KCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY29yZS5FeGl0Tm93LCBhc3luY29yZS5yZWFkd3JpdGUsIHRyMSwgZmxhZykKKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCBFeGl0Tm93IGV4Y2VwdGlvbnMgaW4gdGhlIG9iamVjdCBoYW5kbGVyIG1ldGhvZAorICAgICAgICAgICAgIyBidWJibGVzIGFsbCB0aGUgd2F5IHVwIHRocm91Z2ggYXN5bmNvcmUgcmVhZHdyaXRlIGNhbGwKKyAgICAgICAgICAgIHRyMSA9IGV4aXRpbmdkdW1teSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY29yZS5FeGl0Tm93LCBhc3luY29yZS5yZWFkd3JpdGUsIHRyMSwgZmxhZykKIAotICAgICAgICAgICAgICAgICMgY2hlY2sgdGhhdCBhbiBleGNlcHRpb24gb3RoZXIgdGhhbiBFeGl0Tm93IGluIHRoZSBvYmplY3QgaGFuZGxlcgotICAgICAgICAgICAgICAgICMgbWV0aG9kIGNhdXNlcyB0aGUgaGFuZGxlX2Vycm9yIG1ldGhvZCB0byBnZXQgY2FsbGVkCi0gICAgICAgICAgICAgICAgdHIyID0gY3Jhc2hpbmdkdW1teSgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cjIuZXJyb3JfaGFuZGxlZCwgRmFsc2UpCi0gICAgICAgICAgICAgICAgYXN5bmNvcmUucmVhZHdyaXRlKHRyMiwgZmxhZykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyMi5lcnJvcl9oYW5kbGVkLCBUcnVlKQorICAgICAgICAgICAgIyBjaGVjayB0aGF0IGFuIGV4Y2VwdGlvbiBvdGhlciB0aGFuIEV4aXROb3cgaW4gdGhlIG9iamVjdCBoYW5kbGVyCisgICAgICAgICAgICAjIG1ldGhvZCBjYXVzZXMgdGhlIGhhbmRsZV9lcnJvciBtZXRob2QgdG8gZ2V0IGNhbGxlZAorICAgICAgICAgICAgdHIyID0gY3Jhc2hpbmdkdW1teSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyMi5lcnJvcl9oYW5kbGVkLCBGYWxzZSkKKyAgICAgICAgICAgIGFzeW5jb3JlLnJlYWR3cml0ZSh0cjIsIGZsYWcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyMi5lcnJvcl9oYW5kbGVkLCBUcnVlKQogCiAgICAgZGVmIHRlc3RfY2xvc2VhbGwoc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2VhbGxfY2hlY2soRmFsc2UpCkBAIC0yNTMsNyArMjU4LDcgQEAKICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzdGRlcnIKIAogICAgICAgICBsaW5lcyA9IGZwLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxpbmVzLCBbJ2xvZzogJXMnICUgbDEsICdsb2c6ICVzJyAlIGwyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWydsb2c6ICVzJyAlIGwxLCAnbG9nOiAlcycgJSBsMl0pCiAKICAgICBkZWYgdGVzdF9sb2dfaW5mbyhzZWxmKToKICAgICAgICAgZCA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQpAQCAtMjc1LDcgKzI4MCw3IEBACiAgICAgICAgIGxpbmVzID0gZnAuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCkKICAgICAgICAgZXhwZWN0ZWQgPSBbJ0VHR1M6ICVzJyAlIGwxLCAnaW5mbzogJXMnICUgbDIsICdTUEFNOiAlcycgJSBsM10KIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsaW5lcywgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfdW5oYW5kbGVkKHNlbGYpOgogICAgICAgICBkID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCkBAIC0zMDAsMjAgKzMwNSwyNCBAQAogICAgICAgICAgICAgICAgICAgICAnd2FybmluZzogdW5oYW5kbGVkIHdyaXRlIGV2ZW50JywKICAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmc6IHVuaGFuZGxlZCBjb25uZWN0IGV2ZW50JywKICAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmc6IHVuaGFuZGxlZCBhY2NlcHQgZXZlbnQnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsaW5lcywgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfaXNzdWVfODU5NChzZWxmKToKKyAgICAgICAgIyBYWFggLSB0aGlzIHRlc3QgaXMgc3VwcG9zZWQgdG8gYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIFB5dGhvbgorICAgICAgICAjIHZlcnNpb24KICAgICAgICAgZCA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoc29ja2V0LnNvY2tldCgpKQogICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgZXJyb3IgbWVzc2FnZSBubyBsb25nZXIgcmVmZXJzIHRvIHRoZSBzb2NrZXQKICAgICAgICAgIyBvYmplY3QgYnV0IHRoZSBkaXNwYXRjaGVyIGluc3RhbmNlIGluc3RlYWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZC5mb28KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Rpc3BhdGNoZXIgaW5zdGFuY2UnIGluIHN0cihlcnIpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJleGNlcHRpb24gbm90IHJhaXNlZCIpCi0gICAgICAgICMgdGVzdCBjaGVhcCBpbmhlcml0YW5jZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHNvY2tldAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoQXR0cmlidXRlRXJyb3IsICdkaXNwYXRjaGVyIGluc3RhbmNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0ciwgZCwgJ2ZvbycpCisgICAgICAgICMgY2hlYXAgaW5oZXJpdGFuY2Ugd2l0aCB0aGUgdW5kZXJseWluZyBzb2NrZXQgaXMgc3VwcG9zZWQKKyAgICAgICAgIyB0byBzdGlsbCB3b3JrIGJ1dCBhIERlcHJlY2F0aW9uV2FybmluZyBpcyBleHBlY3RlZAorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQorICAgICAgICAgICAgZmFtaWx5ID0gZC5mYW1pbHkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Mod1swXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKSkKIAogICAgIGRlZiB0ZXN0X3N0cmVycm9yKHNlbGYpOgogICAgICAgICAjIHJlZmVycyB0byBidWcgIzg1NzMKQEAgLTMyMSw3ICszMzAsNyBAQAogICAgICAgICBpZiBoYXNhdHRyKG9zLCAnc3RyZXJyb3InKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBvcy5zdHJlcnJvcihlcnJuby5FUEVSTSkpCiAgICAgICAgIGVyciA9IGFzeW5jb3JlLl9zdHJlcnJvcigtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ1bmtub3duIGVycm9yIiBpbiBlcnIubG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyciAhPSAiIikKIAogCiBjbGFzcyBkaXNwYXRjaGVyd2l0aHNlbmRfbm9yZWFkKGFzeW5jb3JlLmRpc3BhdGNoZXJfd2l0aF9zZW5kKToKQEAgLTM0MCw5NiArMzQ5LDM3MyBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgQHRlc3Rfc3VwcG9ydC5yZWFwX3RocmVhZHMKICAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgotICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCi0gICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMykKLSAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCisgICAgICAgIGV2dCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNvY2suc2V0dGltZW91dCgzKQorICAgICAgICBwb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzb2NrKQogCiAgICAgICAgIGNhcCA9IFN0cmluZ0lPKCkKLSAgICAgICAgYXJncyA9IChzZWxmLmV2dCwgY2FwLCBzZWxmLnNvY2spCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWNhcHR1cmVfc2VydmVyLCBhcmdzPWFyZ3MpLnN0YXJ0KCkKKyAgICAgICAgYXJncyA9IChldnQsIGNhcCwgc29jaykKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWNhcHR1cmVfc2VydmVyLCBhcmdzPWFyZ3MpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHdhaXQgYSBsaXR0bGUgbG9uZ2VyIGZvciB0aGUgc2VydmVyIHRvIGluaXRpYWxpemUgKGl0IHNvbWV0aW1lcworICAgICAgICAgICAgIyByZWZ1c2VzIGNvbm5lY3Rpb25zIG9uIHNsb3cgbWFjaGluZXMgd2l0aG91dCB0aGlzIHdhaXQpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMikKIAotICAgICAgICAjIHdhaXQgYSBsaXR0bGUgbG9uZ2VyIGZvciB0aGUgc2VydmVyIHRvIGluaXRpYWxpemUgKGl0IHNvbWV0aW1lcwotICAgICAgICAjIHJlZnVzZXMgY29ubmVjdGlvbnMgb24gc2xvdyBtYWNoaW5lcyB3aXRob3V0IHRoaXMgd2FpdCkKLSAgICAgICAgdGltZS5zbGVlcCgwLjIpCisgICAgICAgICAgICBkYXRhID0gIlN1cHBvc2UgdGhlcmUgaXNuJ3QgYSAxNi10b24gd2VpZ2h0PyIKKyAgICAgICAgICAgIGQgPSBkaXNwYXRjaGVyd2l0aHNlbmRfbm9yZWFkKCkKKyAgICAgICAgICAgIGQuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgZC5jb25uZWN0KChIT1NULCBwb3J0KSkKIAotICAgICAgICBkYXRhID0gIlN1cHBvc2UgdGhlcmUgaXNuJ3QgYSAxNi10b24gd2VpZ2h0PyIKLSAgICAgICAgZCA9IGRpc3BhdGNoZXJ3aXRoc2VuZF9ub3JlYWQoKQotICAgICAgICBkLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgZC5jb25uZWN0KChIT1NULCBzZWxmLnBvcnQpKQorICAgICAgICAgICAgIyBnaXZlIHRpbWUgZm9yIHNvY2tldCB0byBjb25uZWN0CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKIAotICAgICAgICAjIGdpdmUgdGltZSBmb3Igc29ja2V0IHRvIGNvbm5lY3QKLSAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgICAgICBkLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGQuc2VuZChkYXRhKQorICAgICAgICAgICAgZC5zZW5kKCdcbicpCiAKLSAgICAgICAgZC5zZW5kKGRhdGEpCi0gICAgICAgIGQuc2VuZChkYXRhKQotICAgICAgICBkLnNlbmQoJ1xuJykKKyAgICAgICAgICAgIG4gPSAxMDAwCisgICAgICAgICAgICB3aGlsZSBkLm91dF9idWZmZXIgYW5kIG4gPiAwOgorICAgICAgICAgICAgICAgIGFzeW5jb3JlLnBvbGwoKQorICAgICAgICAgICAgICAgIG4gLT0gMQogCi0gICAgICAgIG4gPSAxMDAwCi0gICAgICAgIHdoaWxlIGQub3V0X2J1ZmZlciBhbmQgbiA+IDA6Ci0gICAgICAgICAgICBhc3luY29yZS5wb2xsKCkKLSAgICAgICAgICAgIG4gLT0gMQorICAgICAgICAgICAgZXZ0LndhaXQoKQogCi0gICAgICAgIHNlbGYuZXZ0LndhaXQoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHQuam9pbigpCiAKIAogY2xhc3MgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHNfVXNlUG9sbChEaXNwYXRjaGVyV2l0aFNlbmRUZXN0cyk6CiAgICAgdXNlcG9sbCA9IFRydWUKIAotaWYgaGFzYXR0cihhc3luY29yZSwgJ2ZpbGVfd3JhcHBlcicpOgotICAgIGNsYXNzIEZpbGVXcmFwcGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuZCA9ICJJdCdzIG5vdCBkZWFkLCBpdCdzIHNsZWVwaW5nISIKLSAgICAgICAgICAgIGZpbGUoVEVTVEZOLCAndycpLndyaXRlKHNlbGYuZCkKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoYXN5bmNvcmUsICdmaWxlX3dyYXBwZXInKSwKKyAgICAgICAgICAgICAgICAgICAgICdhc3luY29yZS5maWxlX3dyYXBwZXIgcmVxdWlyZWQnKQorY2xhc3MgRmlsZVdyYXBwZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9ICJJdCdzIG5vdCBkZWFkLCBpdCdzIHNsZWVwaW5nISIKKyAgICAgICAgd2l0aCBmaWxlKFRFU1RGTiwgJ3cnKSBhcyBoOgorICAgICAgICAgICAgaC53cml0ZShzZWxmLmQpCiAKLSAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4pCiAKLSAgICAgICAgZGVmIHRlc3RfcmVjdihzZWxmKToKLSAgICAgICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fUkRPTkxZKQotICAgICAgICAgICAgdyA9IGFzeW5jb3JlLmZpbGVfd3JhcHBlcihmZCkKLSAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgIGRlZiB0ZXN0X3JlY3Yoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fUkRPTkxZKQorICAgICAgICB3ID0gYXN5bmNvcmUuZmlsZV93cmFwcGVyKGZkKQorICAgICAgICBvcy5jbG9zZShmZCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh3LmZkLCBmZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwody5maWxlbm8oKSwgZmQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcucmVjdigxMyksICJJdCdzIG5vdCBkZWFkIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5yZWFkKDYpLCAiLCBpdCdzIikKLSAgICAgICAgICAgIHcuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdy5yZWFkLCAxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHcuZmQsIGZkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHcuZmlsZW5vKCksIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcucmVjdigxMyksICJJdCdzIG5vdCBkZWFkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnJlYWQoNiksICIsIGl0J3MiKQorICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdy5yZWFkLCAxKQogCi0gICAgICAgIGRlZiB0ZXN0X3NlbmQoc2VsZik6Ci0gICAgICAgICAgICBkMSA9ICJDb21lIGFnYWluPyIKLSAgICAgICAgICAgIGQyID0gIkkgd2FudCB0byBidXkgc29tZSBjaGVlc2UuIgotICAgICAgICAgICAgZmQgPSBvcy5vcGVuKFRFU1RGTiwgb3MuT19XUk9OTFkgfCBvcy5PX0FQUEVORCkKLSAgICAgICAgICAgIHcgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCi0gICAgICAgICAgICBvcy5jbG9zZShmZCkKIAotICAgICAgICAgICAgdy53cml0ZShkMSkKLSAgICAgICAgICAgIHcuc2VuZChkMikKLSAgICAgICAgICAgIHcuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlKFRFU1RGTikucmVhZCgpLCBzZWxmLmQgKyBkMSArIGQyKQorICAgIGRlZiB0ZXN0X3NlbmQoc2VsZik6CisgICAgICAgIGQxID0gIkNvbWUgYWdhaW4/IgorICAgICAgICBkMiA9ICJJIHdhbnQgdG8gYnV5IHNvbWUgY2hlZXNlLiIKKyAgICAgICAgZmQgPSBvcy5vcGVuKFRFU1RGTiwgb3MuT19XUk9OTFkgfCBvcy5PX0FQUEVORCkKKyAgICAgICAgdyA9IGFzeW5jb3JlLmZpbGVfd3JhcHBlcihmZCkKKyAgICAgICAgb3MuY2xvc2UoZmQpCiAKLSAgICAgICAgZGVmIHRlc3RfZGlzcGF0Y2hlcihzZWxmKToKLSAgICAgICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fUkRPTkxZKQotICAgICAgICAgICAgZGF0YSA9IFtdCi0gICAgICAgICAgICBjbGFzcyBGaWxlRGlzcGF0Y2hlcihhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIpOgotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoc2VsZi5yZWN2KDI5KSkKLSAgICAgICAgICAgIHMgPSBGaWxlRGlzcGF0Y2hlcihmZCkKLSAgICAgICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICAgICAgYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMDEsIHVzZV9wb2xsPVRydWUsIGNvdW50PTIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiLmpvaW4oZGF0YSksIHNlbGYuZCkKKyAgICAgICAgdy53cml0ZShkMSkKKyAgICAgICAgdy5zZW5kKGQyKQorICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlKFRFU1RGTikucmVhZCgpLCBzZWxmLmQgKyBkMSArIGQyKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihhc3luY29yZSwgJ2ZpbGVfZGlzcGF0Y2hlcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIgcmVxdWlyZWQnKQorICAgIGRlZiB0ZXN0X2Rpc3BhdGNoZXIoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fUkRPTkxZKQorICAgICAgICBkYXRhID0gW10KKyAgICAgICAgY2xhc3MgRmlsZURpc3BhdGNoZXIoYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyKToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChzZWxmLnJlY3YoMjkpKQorICAgICAgICBzID0gRmlsZURpc3BhdGNoZXIoZmQpCisgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4wMSwgdXNlX3BvbGw9VHJ1ZSwgY291bnQ9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIiIuam9pbihkYXRhKSwgc2VsZi5kKQorCisKK2NsYXNzIEJhc2VUZXN0SGFuZGxlcihhc3luY29yZS5kaXNwYXRjaGVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrPU5vbmUpOgorICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIHNvY2spCisgICAgICAgIHNlbGYuZmxhZyA9IEZhbHNlCisKKyAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJoYW5kbGVfYWNjZXB0IG5vdCBzdXBwb3NlZCB0byBiZSBjYWxsZWQiKQorCisgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oImhhbmRsZV9jb25uZWN0IG5vdCBzdXBwb3NlZCB0byBiZSBjYWxsZWQiKQorCisgICAgZGVmIGhhbmRsZV9leHB0KHNlbGYpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oImhhbmRsZV9leHB0IG5vdCBzdXBwb3NlZCB0byBiZSBjYWxsZWQiKQorCisgICAgZGVmIGhhbmRsZV9jbG9zZShzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJoYW5kbGVfY2xvc2Ugbm90IHN1cHBvc2VkIHRvIGJlIGNhbGxlZCIpCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCisKK2NsYXNzIFRDUFNlcnZlcihhc3luY29yZS5kaXNwYXRjaGVyKToKKyAgICAiIiJBIHNlcnZlciB3aGljaCBsaXN0ZW5zIG9uIGFuIGFkZHJlc3MgYW5kIGRpc3BhdGNoZXMgdGhlCisgICAgY29ubmVjdGlvbiB0byBhIGhhbmRsZXIuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlcj1CYXNlVGVzdEhhbmRsZXIsIGhvc3Q9SE9TVCwgcG9ydD0wKToKKyAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5zZXRfcmV1c2VfYWRkcigpCisgICAgICAgIHNlbGYuYmluZCgoaG9zdCwgcG9ydCkpCisgICAgICAgIHNlbGYubGlzdGVuKDUpCisgICAgICAgIHNlbGYuaGFuZGxlciA9IGhhbmRsZXIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhZGRyZXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVs6Ml0KKworICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5hY2NlcHQoKQorICAgICAgICBzZWxmLmhhbmRsZXIoc29jaykKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKKworY2xhc3MgQmFzZUNsaWVudChCYXNlVGVzdEhhbmRsZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICBCYXNlVGVzdEhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuY29ubmVjdChhZGRyZXNzKQorCisgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgQmFzZVRlc3RBUEkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoKQorCisgICAgZGVmIGxvb3Bfd2FpdGluZ19mb3JfZmxhZyhzZWxmLCBpbnN0YW5jZSwgdGltZW91dD01KToKKyAgICAgICAgdGltZW91dCA9IGZsb2F0KHRpbWVvdXQpIC8gMTAwCisgICAgICAgIGNvdW50ID0gMTAwCisgICAgICAgIHdoaWxlIGFzeW5jb3JlLnNvY2tldF9tYXAgYW5kIGNvdW50ID4gMDoKKyAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjAxLCBjb3VudD0xLCB1c2VfcG9sbD1zZWxmLnVzZV9wb2xsKQorICAgICAgICAgICAgaWYgaW5zdGFuY2UuZmxhZzoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGNvdW50IC09IDEKKyAgICAgICAgICAgIHRpbWUuc2xlZXAodGltZW91dCkKKyAgICAgICAgc2VsZi5mYWlsKCJmbGFnIG5vdCBzZXQiKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGhhbmRsZV9jb25uZWN0IGlzIGNhbGxlZCBvbiBjb25uZWN0KCkKKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoKQorICAgICAgICBjbGllbnQgPSBUZXN0Q2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhjbGllbnQpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBoYW5kbGVfYWNjZXB0KCkgaXMgY2FsbGVkIHdoZW4gYSBjbGllbnQgY29ubmVjdHMKKworICAgICAgICBjbGFzcyBUZXN0TGlzdGVuZXIoQmFzZVRlc3RIYW5kbGVyKToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIEJhc2VUZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgICAgIHNlbGYuYmluZCgoSE9TVCwgMCkpCisgICAgICAgICAgICAgICAgc2VsZi5saXN0ZW4oNSkKKyAgICAgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzoyXQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisKKyAgICAgICAgc2VydmVyID0gVGVzdExpc3RlbmVyKCkKKyAgICAgICAgY2xpZW50ID0gQmFzZUNsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoc2VydmVyKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGhhbmRsZV9yZWFkIGlzIGNhbGxlZCBvbiBkYXRhIHJlY2VpdmVkCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChCYXNlQ2xpZW50KToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisKKyAgICAgICAgY2xhc3MgVGVzdEhhbmRsZXIoQmFzZVRlc3RIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKKyAgICAgICAgICAgICAgICBCYXNlVGVzdEhhbmRsZXIuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmQoJ3gnICogMTAyNCkKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoVGVzdEhhbmRsZXIpCisgICAgICAgIGNsaWVudCA9IFRlc3RDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKGNsaWVudCkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV93cml0ZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgaGFuZGxlX3dyaXRlIGlzIGNhbGxlZAorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQoQmFzZUNsaWVudCk6CisgICAgICAgICAgICBkZWYgaGFuZGxlX3dyaXRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoKQorICAgICAgICBjbGllbnQgPSBUZXN0Q2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhjbGllbnQpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfY2xvc2Uoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGhhbmRsZV9jbG9zZSBpcyBjYWxsZWQgd2hlbiB0aGUgb3RoZXIgZW5kIGNsb3NlcworICAgICAgICAjIHRoZSBjb25uZWN0aW9uCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChCYXNlQ2xpZW50KToKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAgICAgICAgICMgaW4gb3JkZXIgdG8gbWFrZSBoYW5kbGVfY2xvc2UgYmUgY2FsbGVkIHdlIGFyZSBzdXBwb3NlZAorICAgICAgICAgICAgICAgICMgdG8gbWFrZSBhdCBsZWFzdCBvbmUgcmVjdigpIGNhbGwKKyAgICAgICAgICAgICAgICBzZWxmLnJlY3YoMTAyNCkKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9jbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICAgICAgY2xhc3MgVGVzdEhhbmRsZXIoQmFzZVRlc3RIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKKyAgICAgICAgICAgICAgICBCYXNlVGVzdEhhbmRsZXIuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoVGVzdEhhbmRsZXIpCisgICAgICAgIGNsaWVudCA9IFRlc3RDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKGNsaWVudCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoInN1bm9zIiksCisgICAgICAgICAgICAgICAgICAgICAiT09CIHN1cHBvcnQgaXMgYnJva2VuIG9uIFNvbGFyaXMiKQorICAgIGRlZiB0ZXN0X2hhbmRsZV9leHB0KHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBoYW5kbGVfZXhwdCBpcyBjYWxsZWQgb24gT09CIGRhdGEgcmVjZWl2ZWQuCisgICAgICAgICMgTm90ZTogdGhpcyBtaWdodCBmYWlsIG9uIHNvbWUgcGxhdGZvcm1zIGFzIE9PQiBkYXRhIGlzCisgICAgICAgICMgdGVudW91c2x5IHN1cHBvcnRlZCBhbmQgcmFyZWx5IHVzZWQuCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChCYXNlQ2xpZW50KToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfZXhwdChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisKKyAgICAgICAgY2xhc3MgVGVzdEhhbmRsZXIoQmFzZVRlc3RIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKKyAgICAgICAgICAgICAgICBCYXNlVGVzdEhhbmRsZXIuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kKGNocigyNDQpLCBzb2NrZXQuTVNHX09PQikKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoVGVzdEhhbmRsZXIpCisgICAgICAgIGNsaWVudCA9IFRlc3RDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKGNsaWVudCkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9lcnJvcihzZWxmKToKKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV93cml0ZShzZWxmKToKKyAgICAgICAgICAgICAgICAxLjAgLyAwCisgICAgICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJleGNlcHRpb24gbm90IHJhaXNlZCIpCisKKyAgICAgICAgc2VydmVyID0gVENQU2VydmVyKCkKKyAgICAgICAgY2xpZW50ID0gVGVzdENsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoY2xpZW50KQorCisgICAgZGVmIHRlc3RfY29ubmVjdGlvbl9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoKQorICAgICAgICBjbGllbnQgPSBCYXNlQ2xpZW50KHNlcnZlci5hZGRyZXNzKQorCisgICAgICAgICMgd2Ugc3RhcnQgZGlzY29ubmVjdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VydmVyLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcnZlci5hY2NlcHRpbmcpCisgICAgICAgICMgdGhpcyBjYW4ndCBiZSB0YWtlbiBmb3IgZ3JhbnRlZCBhY3Jvc3MgYWxsIHBsYXRmb3JtcworICAgICAgICAjc2VsZi5hc3NlcnRGYWxzZShjbGllbnQuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsaWVudC5hY2NlcHRpbmcpCisKKyAgICAgICAgIyBleGVjdXRlIHNvbWUgbG9vcHMgc28gdGhhdCBjbGllbnQgY29ubmVjdHMgdG8gc2VydmVyCisgICAgICAgIGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjAxLCB1c2VfcG9sbD1zZWxmLnVzZV9wb2xsLCBjb3VudD0xMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VydmVyLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcnZlci5hY2NlcHRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbGllbnQuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsaWVudC5hY2NlcHRpbmcpCisKKyAgICAgICAgIyBkaXNjb25uZWN0IHRoZSBjbGllbnQKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXJ2ZXIuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyLmFjY2VwdGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbGllbnQuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsaWVudC5hY2NlcHRpbmcpCisKKyAgICAgICAgIyBzdG9wIHNlcnZpbmcKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXJ2ZXIuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlcnZlci5hY2NlcHRpbmcpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc29ja2V0KHNlbGYpOgorICAgICAgICBzID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCisgICAgICAgIHMuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LmZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zb2NrZXQudHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorCisgICAgZGVmIHRlc3RfYmluZChzZWxmKToKKyAgICAgICAgczEgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKKyAgICAgICAgczEuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzMS5iaW5kKChIT1NULCAwKSkKKyAgICAgICAgczEubGlzdGVuKDUpCisgICAgICAgIHBvcnQgPSBzMS5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQorCisgICAgICAgIHMyID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCisgICAgICAgIHMyLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgIyBFQUREUklOVVNFIGluZGljYXRlcyB0aGUgc29ja2V0IHdhcyBjb3JyZWN0bHkgYm91bmQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzMi5iaW5kLCAoSE9TVCwgcG9ydCkpCisKKyAgICBkZWYgdGVzdF9zZXRfcmV1c2VfYWRkcihzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICB1bml0dGVzdC5za2lwKCJTT19SRVVTRUFERFIgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgaWYgU09fUkVVU0VBRERSIHN1Y2NlZWRlZCBmb3Igc29jayB3ZSBleHBlY3QgYXN5bmNvcmUKKyAgICAgICAgICAgICMgdG8gZG8gdGhlIHNhbWUKKyAgICAgICAgICAgIHMgPSBhc3luY29yZS5kaXNwYXRjaGVyKHNvY2tldC5zb2NrZXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zb2NrZXQuZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09fUkVVU0VBRERSKSkKKyAgICAgICAgICAgIHMuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgcy5zZXRfcmV1c2VfYWRkcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zb2NrZXQuZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09fUkVVU0VBRERSKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorCisKK2NsYXNzIFRlc3RBUElfVXNlU2VsZWN0KEJhc2VUZXN0QVBJKToKKyAgICB1c2VfcG9sbCA9IEZhbHNlCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpLCAnc2VsZWN0LnBvbGwgcmVxdWlyZWQnKQorY2xhc3MgVGVzdEFQSV9Vc2VQb2xsKEJhc2VUZXN0QVBJKToKKyAgICB1c2VfcG9sbCA9IFRydWUKIAogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdHMgPSBbSGVscGVyRnVuY3Rpb25UZXN0cywgRGlzcGF0Y2hlclRlc3RzLCBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0cywKLSAgICAgICAgICAgICBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0c19Vc2VQb2xsXQotICAgIGlmIGhhc2F0dHIoYXN5bmNvcmUsICdmaWxlX3dyYXBwZXInKToKLSAgICAgICAgdGVzdHMuYXBwZW5kKEZpbGVXcmFwcGVyVGVzdCkKLQorICAgICAgICAgICAgIERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzX1VzZVBvbGwsIFRlc3RBUElfVXNlU2VsZWN0LAorICAgICAgICAgICAgIFRlc3RBUElfVXNlUG9sbCwgRmlsZVdyYXBwZXJUZXN0XQogICAgIHJ1bl91bml0dGVzdCgqdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F1Z2Fzc2lnbi5weSBiL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5CmluZGV4IDE3YmRiMjQuLjA1OWU4YjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5CkBAIC0xLDYgKzEsNiBAQAogIyBBdWdtZW50ZWQgYXNzaWdubWVudCB0ZXN0LgogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIF9jaGVja19weTNrX3dhcm5pbmdzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3B5M2tfd2FybmluZ3MKIGltcG9ydCB1bml0dGVzdAogCiAKQEAgLTE5LDEwICsxOSwxMyBAQAogICAgICAgICB4IC89IDIKICAgICAgICAgaWYgMS8yID09IDA6CiAgICAgICAgICAgICAjIGNsYXNzaWMgZGl2aXNpb24KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDMpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIG5ldy1zdHlsZSBkaXZpc2lvbiAod2l0aCAtUW5ldykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIDMuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMy4wKQorCisgICAgZGVmIHRlc3Rfd2l0aF91bnBhY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCAieCwgYiArPSAzIiwgIjx0ZXN0PiIsICJleGVjIikKIAogICAgIGRlZiB0ZXN0SW5MaXN0KHNlbGYpOgogICAgICAgICB4ID0gWzJdCkBAIC0zNyw5ICs0MCw5IEBACiAgICAgICAgIHhbMF0gXj0gMQogICAgICAgICB4WzBdIC89IDIKICAgICAgICAgaWYgMS8yID09IDA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4WzBdLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzBdLCAzKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeFswXSwgMy4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzBdLCAzLjApCiAKICAgICBkZWYgdGVzdEluRGljdChzZWxmKToKICAgICAgICAgeCA9IHswOiAyfQpAQCAtNTQsMjQgKzU3LDI0IEBACiAgICAgICAgIHhbMF0gXj0gMQogICAgICAgICB4WzBdIC89IDIKICAgICAgICAgaWYgMS8yID09IDA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4WzBdLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzBdLCAzKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeFswXSwgMy4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzBdLCAzLjApCiAKICAgICBkZWYgdGVzdFNlcXVlbmNlcyhzZWxmKToKICAgICAgICAgeCA9IFsxLDJdCiAgICAgICAgIHggKz0gWzMsNF0KICAgICAgICAgeCAqPSAyCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgWzEsIDIsIDMsIDQsIDEsIDIsIDMsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIFsxLCAyLCAzLCA0LCAxLCAyLCAzLCA0XSkKIAogICAgICAgICB4ID0gWzEsIDIsIDNdCiAgICAgICAgIHkgPSB4CiAgICAgICAgIHhbMToyXSAqPSAyCiAgICAgICAgIHlbMToyXSArPSBbMV0KIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LCBbMSwgMiwgMSwgMiwgM10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgWzEsIDIsIDEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB5KQogCiAgICAgZGVmIHRlc3RDdXN0b21NZXRob2RzMShzZWxmKToKIApAQCAtOTYsMjQgKzk5LDI0IEBACiAgICAgICAgIHkgPSB4CiAgICAgICAgIHggKz0gMTAKIAotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh4LCBhdWdfdGVzdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIG5vdCB4KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LnZhbCwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBhdWdfdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWwsIDExKQogCiAgICAgICAgIHggPSBhdWdfdGVzdDIoMikKICAgICAgICAgeSA9IHgKICAgICAgICAgeCArPSAxMAogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgudmFsLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbCwgMTIpCiAKICAgICAgICAgeCA9IGF1Z190ZXN0MygzKQogICAgICAgICB5ID0geAogICAgICAgICB4ICs9IDEwCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoeCwgYXVnX3Rlc3QzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgbm90IHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgudmFsLCAxMykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGF1Z190ZXN0MykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWwsIDEzKQogCiAKICAgICBkZWYgdGVzdEN1c3RvbU1ldGhvZHMyKHRlc3Rfc2VsZik6CkBAIC0yODEsNyArMjg0LDcgQEAKICAgICAgICAgMSA8PCB4CiAgICAgICAgIHggPDw9IDEKIAotICAgICAgICB0ZXN0X3NlbGYuYXNzZXJ0RXF1YWxzKG91dHB1dCwgJycnXAorICAgICAgICB0ZXN0X3NlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnJydcCiBfX2FkZF9fIGNhbGxlZAogX19yYWRkX18gY2FsbGVkCiBfX2lhZGRfXyBjYWxsZWQKQEAgLTMyMSw3ICszMjQsNyBAQAogJycnLnNwbGl0bGluZXMoKSkKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoKCJjbGFzc2ljIGludCBkaXZpc2lvbiIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoImNsYXNzaWMgaW50IGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgIHJ1bl91bml0dGVzdChBdWdBc3NpZ25UZXN0KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iaWdhZGRyc3BhY2UucHkgYi9MaWIvdGVzdC90ZXN0X2JpZ2FkZHJzcGFjZS5weQppbmRleCA4YzIxNWZlLi5kYjE5YTUzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2JpZ2FkZHJzcGFjZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2JpZ2FkZHJzcGFjZS5weQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgT3ZlcmZsb3dFcnJvciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih4KSwgTUFYX1B5X3NzaXplX3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCBNQVhfUHlfc3NpemVfdCkKIAogICAgICMjIyB0aGUgZm9sbG93aW5nIHRlc3QgaXMgcGVuZGluZyBhIHBhdGNoCiAgICAgIyAgIChodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDYtSnVseS8wNjc3NzQuaHRtbCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmlnbWVtLnB5IGIvTGliL3Rlc3QvdGVzdF9iaWdtZW0ucHkKaW5kZXggY2VhNWNjYi4uYzU2MDE2NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iaWdtZW0ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iaWdtZW0ucHkKQEAgLTEzLDcgKzEzLDcgQEAKICMgICAgZG9lc24ndCByZWxlYXNlIHRoZSBvbGQgJ3MnIChpZiBpdCBleGlzdHMpIHVudGlsIHdlbGwgYWZ0ZXIgaXRzIG5ldwogIyAgICB2YWx1ZSBoYXMgYmVlbiBjcmVhdGVkLiBVc2UgJ2RlbCBzJyBiZWZvcmUgdGhlIGNyZWF0ZV9sYXJnZXN0cmluZyBjYWxsLgogIwotIyAgLSBEbyAqbm90KiBjb21wYXJlIGxhcmdlIG9iamVjdHMgdXNpbmcgYXNzZXJ0RXF1YWxzIG9yIHNpbWlsYXIuIEl0J3MgYQorIyAgLSBEbyAqbm90KiBjb21wYXJlIGxhcmdlIG9iamVjdHMgdXNpbmcgYXNzZXJ0RXF1YWwgb3Igc2ltaWxhci4gSXQncyBhCiAjICAgIGxlbmd0eSBvcGVyYXRpb24gYW5kIHRoZSBlcnJvcm1lc3NhZ2Ugd2lsbCBiZSB1dHRlcmx5IHVzZWxlc3MgZHVlIHRvCiAjICAgIGl0cyBzaXplLiBUbyBtYWtlIHN1cmUgd2hldGhlciBhIHJlc3VsdCBoYXMgdGhlIHJpZ2h0IGNvbnRlbnRzLCBiZXR0ZXIKICMgICAgdG8gdXNlIHRoZSBzdHJpcCBvciBjb3VudCBtZXRob2RzLCBvciBjb21wYXJlIG1lYW5pbmdmdWwgc2xpY2VzLgpAQCAtMzksMjAgKzM5LDIwIEBACiAgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCiAgICAgICAgIHMgPSAnLScgKiBzaXplICsgU1VCU1RSCiAgICAgICAgIGNhcHMgPSBzLmNhcGl0YWxpemUoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjYXBzWy1sZW4oU1VCU1RSKTpdLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHNbLWxlbihTVUJTVFIpOl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCU1RSLmNhcGl0YWxpemUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2Fwcy5sc3RyaXAoJy0nKSwgU1VCU1RSKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHMubHN0cmlwKCctJyksIFNVQlNUUikKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0xKQogICAgIGRlZiB0ZXN0X2NlbnRlcihzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKICAgICAgICAgcyA9IFNVQlNUUi5jZW50ZXIoc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKICAgICAgICAgbHBhZHNpemUgPSBycGFkc2l6ZSA9IChsZW4ocykgLSBsZW4oU1VCU1RSKSkgLy8gMgogICAgICAgICBpZiBsZW4ocykgJSAyOgogICAgICAgICAgICAgbHBhZHNpemUgKz0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzW2xwYWRzaXplOi1ycGFkc2l6ZV0sIFNVQlNUUikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5zdHJpcCgpLCBTVUJTVFIuc3RyaXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2xwYWRzaXplOi1ycGFkc2l6ZV0sIFNVQlNUUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQogCiAgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fMkcgLSAxLCBtZW11c2U9MSkKICAgICBkZWYgdGVzdF9jZW50ZXJfdW5pY29kZShzZWxmLCBzaXplKToKQEAgLTYyLDM2ICs2MiwzNiBAQAogICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICAgICAgIHBhc3MgIyBhY2NlcHRhYmxlIG9uIDMyLWJpdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCiAgICAgICAgICAgICBscGFkc2l6ZSA9IHJwYWRzaXplID0gKGxlbihzKSAtIGxlbihTVUJTVFIpKSAvLyAyCiAgICAgICAgICAgICBpZiBsZW4ocykgJSAyOgogICAgICAgICAgICAgICAgIGxwYWRzaXplICs9IDEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbbHBhZHNpemU6LXJwYWRzaXplXSwgU1VCU1RSKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5zdHJpcCgpLCBTVUJTVFIuc3RyaXAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tscGFkc2l6ZTotcnBhZHNpemVdLCBTVUJTVFIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCiAgICAgICAgICAgICBkZWwgcwogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJwogICAgICAgICBzID0gJy4nICogc2l6ZSArIFNVQlNUUgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcuJyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLicpLCBzaXplKQogICAgICAgICBzICs9ICcuJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcuJyksIHNpemUgKyAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcgJyksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJ2knKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnaicpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJy4nKSwgc2l6ZSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnICcpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJ2knKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCdqJyksIDApCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0zKQogICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmLCBzaXplKToKICAgICAgICAgcyA9ICcuJyAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMuZGVjb2RlKCd1dGYtOCcpKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5kZWNvZGUoJ3V0Zi04JykpLCBzaXplKQogCiAgICAgZGVmIGJhc2ljX2VuY29kZV90ZXN0KHNlbGYsIHNpemUsIGVuYywgYz11Jy4nLCBleHBlY3RlZHNpemU9Tm9uZSk6CiAgICAgICAgIGlmIGV4cGVjdGVkc2l6ZSBpcyBOb25lOgogICAgICAgICAgICAgZXhwZWN0ZWRzaXplID0gc2l6ZQogCiAgICAgICAgIHMgPSBjICogc2l6ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocy5lbmNvZGUoZW5jKSksIGV4cGVjdGVkc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5lbmNvZGUoZW5jKSksIGV4cGVjdGVkc2l6ZSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTMpCiAgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYsIHNpemUpOgpAQCAtMTMwLDYwICsxMzAsNjAgQEAKICAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgogICAgICAgICAgICAgcGFzcyAjIGFjY2VwdGFibGUgb24gMzItYml0CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MocyA9PSBldmFsKHIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMgPT0gZXZhbChyKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9lbmRzd2l0aChzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKICAgICAgICAgcyA9ICctJyAqIHNpemUgKyBTVUJTVFIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuZW5kc3dpdGgoU1VCU1RSKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuZW5kc3dpdGgocykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKFNVQlNUUikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKHMpKQogICAgICAgICBzMiA9ICcuLi4nICsgcwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoczIuZW5kc3dpdGgocykpCi0gICAgICAgIHNlbGYuZmFpbElmKHMuZW5kc3dpdGgoJ2EnICsgU1VCU1RSKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoU1VCU1RSLmVuZHN3aXRoKHMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoczIuZW5kc3dpdGgocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5lbmRzd2l0aCgnYScgKyBTVUJTVFIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFNVQlNUUi5lbmRzd2l0aChzKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X2V4cGFuZHRhYnMoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHMgPSAnLScgKiBzaXplCiAgICAgICAgIHRhYnNpemUgPSA4Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuZXhwYW5kdGFicygpLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZXhwYW5kdGFicygpLCBzKQogICAgICAgICBkZWwgcwogICAgICAgICBzbGVuLCByZW1haW5kZXIgPSBkaXZtb2Qoc2l6ZSwgdGFic2l6ZSkKICAgICAgICAgcyA9ICcgICAgICAgXHQnICogc2xlbgogICAgICAgICBzID0gcy5leHBhbmR0YWJzKHRhYnNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSAtIHJlbWFpbmRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMuc3RyaXAoJyAnKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplIC0gcmVtYWluZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnN0cmlwKCcgJykpLCAwKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCiAgICAgICAgIHN1YmxlbiA9IGxlbihTVUJTVFIpCiAgICAgICAgIHMgPSAnJy5qb2luKFtTVUJTVFIsICctJyAqIHNpemUsIFNVQlNUUl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuZmluZCgnICcpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmZpbmQoU1VCU1RSKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5maW5kKCcgJywgc3VibGVuKSwgc3VibGVuICsgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5maW5kKFNVQlNUUiwgbGVuKFNVQlNUUikpLCBzdWJsZW4gKyBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmZpbmQoJ2knKSwgU1VCU1RSLmZpbmQoJ2knKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5maW5kKCdpJywgc3VibGVuKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoJyAnKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoU1VCU1RSKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoJyAnLCBzdWJsZW4pLCBzdWJsZW4gKyBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmluZChTVUJTVFIsIGxlbihTVUJTVFIpKSwgc3VibGVuICsgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoJ2knKSwgU1VCU1RSLmZpbmQoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoJ2knLCBzdWJsZW4pLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxlbiArIHNpemUgKyBTVUJTVFIuZmluZCgnaScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmZpbmQoJ2knLCBzaXplKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoJ2knLCBzaXplKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsZW4gKyBzaXplICsgU1VCU1RSLmZpbmQoJ2knKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5maW5kKCdqJyksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmluZCgnaicpLCAtMSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9pbmRleChzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKICAgICAgICAgc3VibGVuID0gbGVuKFNVQlNUUikKICAgICAgICAgcyA9ICcnLmpvaW4oW1NVQlNUUiwgJy0nICogc2l6ZSwgU1VCU1RSXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5pbmRleCgnICcpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmluZGV4KFNVQlNUUiksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuaW5kZXgoJyAnLCBzdWJsZW4pLCBzdWJsZW4gKyBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmluZGV4KFNVQlNUUiwgc3VibGVuKSwgc3VibGVuICsgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5pbmRleCgnaScpLCBTVUJTVFIuaW5kZXgoJ2knKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5pbmRleCgnaScsIHN1YmxlbiksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbmRleCgnICcpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW5kZXgoU1VCU1RSKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGV4KCcgJywgc3VibGVuKSwgc3VibGVuICsgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGV4KFNVQlNUUiwgc3VibGVuKSwgc3VibGVuICsgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGV4KCdpJyksIFNVQlNUUi5pbmRleCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW5kZXgoJ2knLCBzdWJsZW4pLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxlbiArIHNpemUgKyBTVUJTVFIuaW5kZXgoJ2knKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5pbmRleCgnaScsIHNpemUpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW5kZXgoJ2knLCBzaXplKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsZW4gKyBzaXplICsgU1VCU1RSLmluZGV4KCdpJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMuaW5kZXgsICdqJykKIApAQCAtMTkxLDE2MyArMTkxLDE2MyBAQAogICAgIGRlZiB0ZXN0X2lzYWxudW0oc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcxMjM0NTYnCiAgICAgICAgIHMgPSAnYScgKiBzaXplICsgU1VCU1RSCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmlzYWxudW0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXNhbG51bSgpKQogICAgICAgICBzICs9ICcuJwotICAgICAgICBzZWxmLmZhaWxJZihzLmlzYWxudW0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzYWxudW0oKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9pc2FscGhhKHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnenp6enp6eicKICAgICAgICAgcyA9ICdhJyAqIHNpemUgKyBTVUJTVFIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc2FscGhhKCkpCiAgICAgICAgIHMgKz0gJy4nCi0gICAgICAgIHNlbGYuZmFpbElmKHMuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuaXNhbHBoYSgpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X2lzZGlnaXQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcxMjM0NTYnCiAgICAgICAgIHMgPSAnOScgKiBzaXplICsgU1VCU1RSCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmlzZGlnaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXNkaWdpdCgpKQogICAgICAgICBzICs9ICd6JwotICAgICAgICBzZWxmLmZhaWxJZihzLmlzZGlnaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzZGlnaXQoKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9pc2xvd2VyKHNlbGYsIHNpemUpOgogICAgICAgICBjaGFycyA9ICcnLmpvaW4oWyBjaHIoYykgZm9yIGMgaW4gcmFuZ2UoMjU1KSBpZiBub3QgY2hyKGMpLmlzdXBwZXIoKSBdKQogICAgICAgICByZXBlYXRzID0gc2l6ZSAvLyBsZW4oY2hhcnMpICsgMgogICAgICAgICBzID0gY2hhcnMgKiByZXBlYXRzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXNsb3dlcigpKQogICAgICAgICBzICs9ICdBJwotICAgICAgICBzZWxmLmZhaWxJZihzLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzbG93ZXIoKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9pc3NwYWNlKHNlbGYsIHNpemUpOgogICAgICAgICB3aGl0ZXNwYWNlID0gJyBcZlxuXHJcdFx2JwogICAgICAgICByZXBlYXRzID0gc2l6ZSAvLyBsZW4od2hpdGVzcGFjZSkgKyAyCiAgICAgICAgIHMgPSB3aGl0ZXNwYWNlICogcmVwZWF0cwotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzc3BhY2UoKSkKICAgICAgICAgcyArPSAnaicKLSAgICAgICAgc2VsZi5mYWlsSWYocy5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc3NwYWNlKCkpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfaXN0aXRsZShzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJzEyMzQ1NicKICAgICAgICAgcyA9ICcnLmpvaW4oWydBJywgJ2EnICogc2l6ZSwgU1VCU1RSXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc3RpdGxlKCkpCiAgICAgICAgIHMgKz0gJ0EnCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXN0aXRsZSgpKQogICAgICAgICBzICs9ICdhQScKLSAgICAgICAgc2VsZi5mYWlsSWYocy5pc3RpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc3RpdGxlKCkpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfaXN1cHBlcihzZWxmLCBzaXplKToKICAgICAgICAgY2hhcnMgPSAnJy5qb2luKFsgY2hyKGMpIGZvciBjIGluIHJhbmdlKDI1NSkgaWYgbm90IGNocihjKS5pc2xvd2VyKCkgXSkKICAgICAgICAgcmVwZWF0cyA9IHNpemUgLy8gbGVuKGNoYXJzKSArIDIKICAgICAgICAgcyA9IGNoYXJzICogcmVwZWF0cwotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzdXBwZXIoKSkKICAgICAgICAgcyArPSAnYScKLSAgICAgICAgc2VsZi5mYWlsSWYocy5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc3VwcGVyKCkpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3Rfam9pbihzZWxmLCBzaXplKToKICAgICAgICAgcyA9ICdBJyAqIHNpemUKICAgICAgICAgeCA9IHMuam9pbihbJ2FhYWFhJywgJ2JiYmJiJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguY291bnQoJ2EnKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5jb3VudCgnYicpLCA1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoeC5zdGFydHN3aXRoKCdhYWFhYUEnKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHguZW5kc3dpdGgoJ0FiYmJiYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguY291bnQoJ2EnKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmNvdW50KCdiJyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LnN0YXJ0c3dpdGgoJ2FhYWFhQScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5lbmRzd2l0aCgnQWJiYmJiJykpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MSkKICAgICBkZWYgdGVzdF9sanVzdChzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKICAgICAgICAgcyA9IFNVQlNUUi5sanVzdChzaXplKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5zdGFydHN3aXRoKFNVQlNUUiArICcgICcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoU1VCU1RSICsgJyAgJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9sb3dlcihzZWxmLCBzaXplKToKICAgICAgICAgcyA9ICdBJyAqIHNpemUKICAgICAgICAgcyA9IHMubG93ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJ2EnKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnYScpLCBzaXplKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTEpCiAgICAgZGVmIHRlc3RfbHN0cmlwKHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnYWJjIGRlZiBnaGknCiAgICAgICAgIHMgPSBTVUJTVFIucmp1c3Qoc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmxzdHJpcCgpLCBTVUJTVFIubHN0cmlwKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMubHN0cmlwKCksIFNVQlNUUi5sc3RyaXAoKSkKICAgICAgICAgZGVsIHMKICAgICAgICAgcyA9IFNVQlNUUi5sanVzdChzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQogICAgICAgICBzdHJpcHBlZCA9IHMubHN0cmlwKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cmlwcGVkIGlzIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJpcHBlZCBpcyBzKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmLCBzaXplKToKICAgICAgICAgcmVwbGFjZW1lbnQgPSAnYScKICAgICAgICAgcyA9ICcgJyAqIHNpemUKICAgICAgICAgcyA9IHMucmVwbGFjZSgnICcsIHJlcGxhY2VtZW50KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQocmVwbGFjZW1lbnQpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KHJlcGxhY2VtZW50KSwgc2l6ZSkKICAgICAgICAgcyA9IHMucmVwbGFjZShyZXBsYWNlbWVudCwgJyAnLCBzaXplIC0gNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KHJlcGxhY2VtZW50KSwgNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1stMTA6XSwgJyAgICAgIGFhYWEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KHJlcGxhY2VtZW50KSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy0xMDpdLCAnICAgICAgYWFhYScpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfcmZpbmQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCiAgICAgICAgIHN1YmxlbiA9IGxlbihTVUJTVFIpCiAgICAgICAgIHMgPSAnJy5qb2luKFtTVUJTVFIsICctJyAqIHNpemUsIFNVQlNUUl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMucmZpbmQoJyAnKSwgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5yZmluZCgnICcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnJmaW5kKFNVQlNUUiksIHN1YmxlbiArIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMucmZpbmQoJyAnLCAwLCBzaXplKSwgU1VCU1RSLnJmaW5kKCcgJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMucmZpbmQoU1VCU1RSLCAwLCBzdWJsZW4gKyBzaXplKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yZmluZCgnaScpLCBzdWJsZW4gKyBzaXplICsgU1VCU1RSLnJmaW5kKCdpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMucmZpbmQoJ2knLCAwLCBzdWJsZW4pLCBTVUJTVFIucmZpbmQoJ2knKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yZmluZCgnaScsIDAsIHN1YmxlbiArIHNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJTVFIucmZpbmQoJ2knKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yZmluZCgnaicpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJmaW5kKCcgJyksIHN1YmxlbiArIHNpemUgKyBTVUJTVFIucmZpbmQoJyAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJmaW5kKFNVQlNUUiksIHN1YmxlbiArIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZCgnICcsIDAsIHNpemUpLCBTVUJTVFIucmZpbmQoJyAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJmaW5kKFNVQlNUUiwgMCwgc3VibGVuICsgc2l6ZSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZCgnaScpLCBzdWJsZW4gKyBzaXplICsgU1VCU1RSLnJmaW5kKCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZCgnaScsIDAsIHN1YmxlbiksIFNVQlNUUi5yZmluZCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoJ2knLCAwLCBzdWJsZW4gKyBzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTVUJTVFIucmZpbmQoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJmaW5kKCdqJyksIC0xKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X3JpbmRleChzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKICAgICAgICAgc3VibGVuID0gbGVuKFNVQlNUUikKICAgICAgICAgcyA9ICcnLmpvaW4oW1NVQlNUUiwgJy0nICogc2l6ZSwgU1VCU1RSXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yaW5kZXgoJyAnKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleCgnICcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsZW4gKyBzaXplICsgU1VCU1RSLnJpbmRleCgnICcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnJpbmRleChTVUJTVFIpLCBzdWJsZW4gKyBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnJpbmRleCgnICcsIDAsIHN1YmxlbiArIHNpemUgLSAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCU1RSLnJpbmRleCgnICcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnJpbmRleChTVUJTVFIsIDAsIHN1YmxlbiArIHNpemUpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnJpbmRleCgnaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsZW4gKyBzaXplICsgU1VCU1RSLnJpbmRleCgnaScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnJpbmRleCgnaScsIDAsIHN1YmxlbiksIFNVQlNUUi5yaW5kZXgoJ2knKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yaW5kZXgoJ2knLCAwLCBzdWJsZW4gKyBzaXplKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCU1RSLnJpbmRleCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmluZGV4KFNVQlNUUiksIHN1YmxlbiArIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yaW5kZXgoJyAnLCAwLCBzdWJsZW4gKyBzaXplIC0gMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgU1VCU1RSLnJpbmRleCgnICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmluZGV4KFNVQlNUUiwgMCwgc3VibGVuICsgc2l6ZSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yaW5kZXgoJ2knKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsZW4gKyBzaXplICsgU1VCU1RSLnJpbmRleCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmluZGV4KCdpJywgMCwgc3VibGVuKSwgU1VCU1RSLnJpbmRleCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmluZGV4KCdpJywgMCwgc3VibGVuICsgc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgU1VCU1RSLnJpbmRleCgnaScpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJpbmRleCwgJ2onKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTEpCiAgICAgZGVmIHRlc3Rfcmp1c3Qoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCiAgICAgICAgIHMgPSBTVUJTVFIubGp1c3Qoc2l6ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuc3RhcnRzd2l0aChTVUJTVFIgKyAnICAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKFNVQlNUUiArICcgICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTEpCiAgICAgZGVmIHRlc3RfcnN0cmlwKHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJwogICAgICAgICBzID0gU1VCU1RSLmxqdXN0KHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yc3RyaXAoKSwgU1VCU1RSLnJzdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJzdHJpcCgpLCBTVUJTVFIucnN0cmlwKCkpCiAgICAgICAgIGRlbCBzCiAgICAgICAgIHMgPSBTVUJTVFIucmp1c3Qoc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKICAgICAgICAgc3RyaXBwZWQgPSBzLnJzdHJpcCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJpcHBlZCBpcyBzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyaXBwZWQgaXMgcykKIAogICAgICMgVGhlIHRlc3QgdGFrZXMgYWJvdXQgc2l6ZSBieXRlcyB0byBidWlsZCBhIHN0cmluZywgYW5kIHRoZW4gYWJvdXQKICAgICAjIHNxcnQoc2l6ZSkgc3Vic3RyaW5ncyBvZiBzcXJ0KHNpemUpIGluIHNpemUgYW5kIGEgbGlzdCB0bwpAQCAtMzYwLDEyICszNjAsMTIgQEAKICAgICAgICAgU1VCU1RSID0gJ2EnICsgJyAnICogY2h1bmtzaXplCiAgICAgICAgIHMgPSBTVUJTVFIgKiBjaHVua3NpemUKICAgICAgICAgbCA9IHMuc3BsaXQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIGNodW5rc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2V0KGwpLCBzZXQoWydhJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgY2h1bmtzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsKSwgc2V0KFsnYSddKSkKICAgICAgICAgZGVsIGwKICAgICAgICAgbCA9IHMuc3BsaXQoJ2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIGNodW5rc2l6ZSArIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldChsKSwgc2V0KFsnJywgJyAnICogY2h1bmtzaXplXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBjaHVua3NpemUgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsKSwgc2V0KFsnJywgJyAnICogY2h1bmtzaXplXSkpCiAKICAgICAjIEFsbG9jYXRlcyBhIHN0cmluZyBvZiB0d2ljZSBzaXplIChhbmQgYnJpZWZseSB0d28pIGFuZCBhIGxpc3Qgb2YKICAgICAjIHNpemUuICBCZWNhdXNlIG9mIGludGVybmFsIGFmZmFpcnMsIHRoZSBzLnNwbGl0KCkgY2FsbCBwcm9kdWNlcyBhCkBAIC0zNzcsMTIgKzM3NywxMiBAQAogICAgIGRlZiB0ZXN0X3NwbGl0X2xhcmdlKHNlbGYsIHNpemUpOgogICAgICAgICBzID0gJyBhJyAqIHNpemUgKyAnICcKICAgICAgICAgbCA9IHMuc3BsaXQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldChsKSwgc2V0KFsnYSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGwpLCBzZXQoWydhJ10pKQogICAgICAgICBkZWwgbAogICAgICAgICBsID0gcy5zcGxpdCgnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSArIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldChsKSwgc2V0KFsnICddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsKSwgc2V0KFsnICddKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9Mi4xKQogICAgIGRlZiB0ZXN0X3NwbGl0bGluZXMoc2VsZiwgc2l6ZSk6CkBAIC0zOTIsMjcgKzM5MiwyNyBAQAogICAgICAgICBTVUJTVFIgPSAnICcgKiBjaHVua3NpemUgKyAnXG4nICsgJyAnICogY2h1bmtzaXplICsgJ1xyXG4nCiAgICAgICAgIHMgPSBTVUJTVFIgKiBjaHVua3NpemUKICAgICAgICAgbCA9IHMuc3BsaXRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgY2h1bmtzaXplICogMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2V0KGwpLCBzZXQoWycgJyAqIGNodW5rc2l6ZV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgY2h1bmtzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobCksIHNldChbJyAnICogY2h1bmtzaXplXSkpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3Rfc3RhcnRzd2l0aChzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKICAgICAgICAgcyA9ICctJyAqIHNpemUgKyBTVUJTVFIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuc3RhcnRzd2l0aChzKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuc3RhcnRzd2l0aCgnLScgKiBzaXplKSkKLSAgICAgICAgc2VsZi5mYWlsSWYocy5zdGFydHN3aXRoKFNVQlNUUikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgocykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJy0nICogc2l6ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zdGFydHN3aXRoKFNVQlNUUikpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTEpCiAgICAgZGVmIHRlc3Rfc3RyaXAoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcgICBhYmMgZGVmIGdoaSAgICcKICAgICAgICAgcyA9IFNVQlNUUi5yanVzdChzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCiAgICAgICAgIGRlbCBzCiAgICAgICAgIHMgPSBTVUJTVFIubGp1c3Qoc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X3N3YXBjYXNlKHNlbGYsIHNpemUpOgpAQCAtNDIxLDE3ICs0MjEsMTcgQEAKICAgICAgICAgcmVwZWF0cyA9IHNpemUgLy8gc3VibGVuICsgMgogICAgICAgICBzID0gU1VCU1RSICogcmVwZWF0cwogICAgICAgICBzID0gcy5zd2FwY2FzZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc3VibGVuICogcmVwZWF0cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1s6c3VibGVuICogM10sIFNVQlNUUi5zd2FwY2FzZSgpICogMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1stc3VibGVuICogMzpdLCBTVUJTVFIuc3dhcGNhc2UoKSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzdWJsZW4gKiByZXBlYXRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbOnN1YmxlbiAqIDNdLCBTVUJTVFIuc3dhcGNhc2UoKSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stc3VibGVuICogMzpdLCBTVUJTVFIuc3dhcGNhc2UoKSAqIDMpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfdGl0bGUoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICdTcGFhSEFhYUFhaGFtJwogICAgICAgICBzID0gU1VCU1RSICogKHNpemUgLy8gbGVuKFNVQlNUUikgKyAyKQogICAgICAgICBzID0gcy50aXRsZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLnN0YXJ0c3dpdGgoKFNVQlNUUiAqIDMpLnRpdGxlKCkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5lbmRzd2l0aChTVUJTVFIubG93ZXIoKSAqIDMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKChTVUJTVFIgKiAzKS50aXRsZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoU1VCU1RSLmxvd2VyKCkgKiAzKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF90cmFuc2xhdGUoc2VsZiwgc2l6ZSk6CkBAIC00NDEsMzkgKzQ0MSwzOSBAQAogICAgICAgICByZXBlYXRzID0gc2l6ZSAvLyBzdWJsZW4gKyAyCiAgICAgICAgIHMgPSBTVUJTVFIgKiByZXBlYXRzCiAgICAgICAgIHMgPSBzLnRyYW5zbGF0ZSh0cmFucykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCByZXBlYXRzICogc3VibGVuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWzpzdWJsZW5dLCBTVUJTVFIudHJhbnNsYXRlKHRyYW5zKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1stc3VibGVuOl0sIFNVQlNUUi50cmFuc2xhdGUodHJhbnMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcuJyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJyEnKSwgcmVwZWF0cyAqIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJ3onKSwgcmVwZWF0cyAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCByZXBlYXRzICogc3VibGVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbOnN1Ymxlbl0sIFNVQlNUUi50cmFuc2xhdGUodHJhbnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLXN1YmxlbjpdLCBTVUJTVFIudHJhbnNsYXRlKHRyYW5zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcuJyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnIScpLCByZXBlYXRzICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCd6JyksIHJlcGVhdHMgKiAzKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyA1LCBtZW11c2U9MikKICAgICBkZWYgdGVzdF91cHBlcihzZWxmLCBzaXplKToKICAgICAgICAgcyA9ICdhJyAqIHNpemUKICAgICAgICAgcyA9IHMudXBwZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJ0EnKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnQScpLCBzaXplKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyMCwgbWVtdXNlPTEpCiAgICAgZGVmIHRlc3RfemZpbGwoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICctNTY4MzI0NzIzNTk4MjM0JwogICAgICAgICBzID0gU1VCU1RSLnpmaWxsKHNpemUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmVuZHN3aXRoKCcwJyArIFNVQlNUUlsxOl0pKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5zdGFydHN3aXRoKCctMCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJzAnKSwgc2l6ZSAtIGxlbihTVUJTVFIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgnMCcgKyBTVUJTVFJbMTpdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgnLTAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnMCcpLCBzaXplIC0gbGVuKFNVQlNUUikpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHMgPSAnLScgKiBzaXplCiAgICAgICAgIHNmID0gJyVzJyAlIChzLCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMgPT0gc2YpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzID09IHNmKQogICAgICAgICBkZWwgc2YKICAgICAgICAgc2YgPSAnLi4lcy4uJyAlIChzLCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHNmKSwgbGVuKHMpICsgNCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNmLnN0YXJ0c3dpdGgoJy4uLScpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2YuZW5kc3dpdGgoJy0uLicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZiksIGxlbihzKSArIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZi5zdGFydHN3aXRoKCcuLi0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNmLmVuZHN3aXRoKCctLi4nKSkKICAgICAgICAgZGVsIHMsIHNmCiAKICAgICAgICAgc2l6ZSAvLz0gMgpAQCAtNDgxLDE4ICs0ODEsMTggQEAKICAgICAgICAgcyA9ICcnLmpvaW4oW2VkZ2UsICclcycsIGVkZ2VdKQogICAgICAgICBkZWwgZWRnZQogICAgICAgICBzID0gcyAlICcuLi4nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSAqIDIgKyAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcuJyksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJy0nKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogMiArIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLicpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJy0nKSwgc2l6ZSAqIDIpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9yZXByX3NtYWxsKHNlbGYsIHNpemUpOgogICAgICAgICBzID0gJy0nICogc2l6ZQogICAgICAgICBzID0gcmVwcihzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUgKyAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWzBdLCAiJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbLTFdLCAiJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJy0nKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgKyAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbMF0sICInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy0xXSwgIiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJy0nKSwgc2l6ZSkKICAgICAgICAgZGVsIHMKICAgICAgICAgIyByZXByKCkgd2lsbCBjcmVhdGUgYSBzdHJpbmcgZm91ciB0aW1lcyBhcyBsYXJnZSBhcyB0aGlzICdiaW5hcnkKICAgICAgICAgIyBzdHJpbmcnLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBhbGxvY2F0ZSBtdWNoIG1vcmUgdGhhbiB0d2ljZQpAQCAtNTAwLDQ2ICs1MDAsNDYgQEAKICAgICAgICAgc2l6ZSA9IHNpemUgLy8gNSAqIDIKICAgICAgICAgcyA9ICdceDAwJyAqIHNpemUKICAgICAgICAgcyA9IHJlcHIocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplICogNCArIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbMF0sICInIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1stMV0sICInIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnXFwnKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnMCcpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgKiA0ICsgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzBdLCAiJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stMV0sICInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCdcXCcpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJzAnKSwgc2l6ZSAqIDIpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9NSkKICAgICBkZWYgdGVzdF9yZXByX2xhcmdlKHNlbGYsIHNpemUpOgogICAgICAgICBzID0gJ1x4MDAnICogc2l6ZQogICAgICAgICBzID0gcmVwcihzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUgKiA0ICsgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1swXSwgIiciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWy0xXSwgIiciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCdcXCcpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcwJyksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSAqIDQgKyAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbMF0sICInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy0xXSwgIiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJ1xcJyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnMCcpLCBzaXplICogMikKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9MioqMzIgLy8gNSwgbWVtdXNlPTYrMikKICAgICBkZWYgdGVzdF91bmljb2RlX3JlcHIoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHMgPSB1Ilx1QUFBQSIgKiBzaXplCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsZW4ocmVwcihzKSkgPiBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlcHIocykpID4gc2l6ZSkKIAogICAgICMgVGhpcyB0ZXN0IGlzIG1lYW5pbmdmdWwgZXZlbiB3aXRoIHNpemUgPCAyRywgYXMgbG9uZyBhcyB0aGUKICAgICAjIGRvdWJsZWQgc3RyaW5nIGlzID4gMkcgKGJ1dCBpdCB0ZXN0cyBtb3JlIGlmIGJvdGggYXJlID4gMkcgOikKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8xRyArIDIsIG1lbXVzZT0zKQogICAgIGRlZiB0ZXN0X2NvbmNhdChzZWxmLCBzaXplKToKICAgICAgICAgcyA9ICcuJyAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKICAgICAgICAgcyA9IHMgKyBzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSAqIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJy4nKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcuJyksIHNpemUgKiAyKQogCiAgICAgIyBUaGlzIHRlc3QgaXMgbWVhbmluZ2Z1bCBldmVuIHdpdGggc2l6ZSA8IDJHLCBhcyBsb25nIGFzIHRoZQogICAgICMgcmVwZWF0ZWQgc3RyaW5nIGlzID4gMkcgKGJ1dCBpdCB0ZXN0cyBtb3JlIGlmIGJvdGggYXJlID4gMkcgOikKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8xRyArIDIsIG1lbXVzZT0zKQogICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmLCBzaXplKToKICAgICAgICAgcyA9ICcuJyAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKICAgICAgICAgcyA9IHMgKiAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSAqIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJy4nKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcuJyksIHNpemUgKiAyKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyMCwgbWVtdXNlPTEpCiAgICAgZGVmIHRlc3Rfc2xpY2VfYW5kX2dldGl0ZW0oc2VsZiwgc2l6ZSk6CkBAIC01NDksMjYgKzU0OSwyNiBAQAogICAgICAgICBzdGVwc2l6ZSA9IGxlbihzKSAvLyAxMDAKICAgICAgICAgc3RlcHNpemUgPSBzdGVwc2l6ZSAtIChzdGVwc2l6ZSAlIHN1YmxlbikKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpIC0gc3RlcHNpemUsIHN0ZXBzaXplKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbaV0sIFNVQlNUUlswXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbaTppICsgc3VibGVuXSwgU1VCU1RSKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1tpOmkgKyBzdWJsZW46Ml0sIFNVQlNUUls6OjJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2ldLCBTVUJTVFJbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbaTppICsgc3VibGVuXSwgU1VCU1RSKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2k6aSArIHN1YmxlbjoyXSwgU1VCU1RSWzo6Ml0pCiAgICAgICAgICAgICBpZiBpID4gMDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzW2kgKyBzdWJsZW4gLSAxOmkgLSAxOi0zXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJTVFJbc3VibGVuOjotM10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2kgKyBzdWJsZW4gLSAxOmkgLSAxOi0zXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUltzdWJsZW46Oi0zXSkKICAgICAgICAgIyBNYWtlIHN1cmUgd2UgZG8gc29tZSBzbGljaW5nIGFuZCBpbmRleGluZyBuZWFyIHRoZSBlbmQgb2YgdGhlCiAgICAgICAgICMgc3RyaW5nLCB0b28uCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbbGVuKHMpIC0gMV0sIFNVQlNUUlstMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbLTFdLCBTVUJTVFJbLTFdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzW2xlbihzKSAtIDEwXSwgU1VCU1RSWzBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWy1zdWJsZW5dLCBTVUJTVFJbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbbGVuKHMpOl0sICcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzW2xlbihzKSAtIDE6XSwgU1VCU1RSWy0xXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1stMTpdLCBTVUJTVFJbLTFdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzW2xlbihzKSAtIHN1YmxlbjpdLCBTVUJTVFIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbLXN1YmxlbjpdLCBTVUJTVFIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzWzpdKSwgbGVuKHMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oc1s6bGVuKHMpIC0gNV0pLCBsZW4ocykgLSA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oc1s1Oi01XSksIGxlbihzKSAtIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbGVuKHMpIC0gMV0sIFNVQlNUUlstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stMV0sIFNVQlNUUlstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tsZW4ocykgLSAxMF0sIFNVQlNUUlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy1zdWJsZW5dLCBTVUJTVFJbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tsZW4ocyk6XSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tsZW4ocykgLSAxOl0sIFNVQlNUUlstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stMTpdLCBTVUJTVFJbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbGVuKHMpIC0gc3VibGVuOl0sIFNVQlNUUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy1zdWJsZW46XSwgU1VCU1RSKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzWzpdKSwgbGVuKHMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzWzpsZW4ocykgLSA1XSksIGxlbihzKSAtIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNbNTotNV0pLCBsZW4ocykgLSAxMCkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCBzLCBsZW4ocykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIHMsIGxlbihzKSArIDEpCkBAIC01ODAsMjQgKzU4MCwyNCBAQAogICAgICAgICBlZGdlID0gJy0nICogKHNpemUgLy8gMikKICAgICAgICAgcyA9ICcnLmpvaW4oW2VkZ2UsIFNVQlNUUiwgZWRnZV0pCiAgICAgICAgIGRlbCBlZGdlCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhTVUJTVFIgaW4gcykKLSAgICAgICAgc2VsZi5mYWlsSWYoU1VCU1RSICogMiBpbiBzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoJy0nIGluIHMpCi0gICAgICAgIHNlbGYuZmFpbElmKCdhJyBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydEluKFNVQlNUUiwgcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihTVUJTVFIgKiAyLCBzKQorICAgICAgICBzZWxmLmFzc2VydEluKCctJywgcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsIHMpCiAgICAgICAgIHMgKz0gJ2EnCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygnYScgaW4gcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIHMpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYsIHNpemUpOgogICAgICAgICBzMSA9ICctJyAqIHNpemUKICAgICAgICAgczIgPSAnLScgKiBzaXplCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzMSA9PSBzMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxID09IHMyKQogICAgICAgICBkZWwgczIKICAgICAgICAgczIgPSBzMSArICdhJwotICAgICAgICBzZWxmLmZhaWxJZihzMSA9PSBzMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzMSA9PSBzMikKICAgICAgICAgZGVsIHMyCiAgICAgICAgIHMyID0gJy4nICogc2l6ZQotICAgICAgICBzZWxmLmZhaWxJZihzMSA9PSBzMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzMSA9PSBzMikKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0xKQogICAgIGRlZiB0ZXN0X2hhc2goc2VsZiwgc2l6ZSk6CkBAIC02MTEsNyArNjExLDcgQEAKICAgICAgICAgaDEgPSBoYXNoKHMpCiAgICAgICAgIGRlbCBzCiAgICAgICAgIHMgPSAnXHgwMCcgKiAoc2l6ZSArIDEpCi0gICAgICAgIHNlbGYuZmFpbElmKGgxID09IGhhc2gocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPT0gaGFzaChzKSkKIAogY2xhc3MgVHVwbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNjI4LDEzICs2MjgsMTMgQEAKICAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYsIHNpemUpOgogICAgICAgICB0MSA9ICh1JycsKSAqIHNpemUKICAgICAgICAgdDIgPSAodScnLCkgKiBzaXplCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA9PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID09IHQyKQogICAgICAgICBkZWwgdDIKICAgICAgICAgdDIgPSAodScnLCkgKiAoc2l6ZSArIDEpCi0gICAgICAgIHNlbGYuZmFpbElmKHQxID09IHQyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQxID09IHQyKQogICAgICAgICBkZWwgdDIKICAgICAgICAgdDIgPSAoMSwpICogc2l6ZQotICAgICAgICBzZWxmLmZhaWxJZih0MSA9PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0MSA9PSB0MikKIAogICAgICMgVGVzdCBjb25jYXRlbmF0aW5nIGludG8gYSBzaW5nbGUgdHVwbGUgb2YgbW9yZSB0aGFuIDJHIGluIGxlbmd0aCwKICAgICAjIGFuZCBjb25jYXRlbmF0aW5nIGEgdHVwbGUgb2YgbW9yZSB0aGFuIDJHIGluIGxlbmd0aCBzZXBhcmF0ZWx5LCBzbwpAQCAtNjQzLDkgKzY0Myw5IEBACiAgICAgIyBza2lwcGVkLCBpbiB2ZXJib3NlIG1vZGUuKQogICAgIGRlZiBiYXNpY19jb25jYXRfdGVzdChzZWxmLCBzaXplKToKICAgICAgICAgdCA9ICgoKSwpICogc2l6ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4odCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplKQogICAgICAgICB0ID0gdCArIHQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHQpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odCksIHNpemUgKiAyKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0yNCkKICAgICBkZWYgdGVzdF9jb25jYXRfc21hbGwoc2VsZiwgc2l6ZSk6CkBAIC02NTgsMTAgKzY1OCwxMCBAQAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDUgKyAxMCwgbWVtdXNlPTggKiA1KQogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYsIHNpemUpOgogICAgICAgICB0ID0gKDEsIDIsIDMsIDQsIDUpICogc2l6ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4odCksIHNpemUgKiA1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoNSBpbiB0KQotICAgICAgICBzZWxmLmZhaWxJZigoMSwgMiwgMywgNCwgNSkgaW4gdCkKLSAgICAgICAgc2VsZi5mYWlsSWYoMCBpbiB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgc2l6ZSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oNSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoMSwgMiwgMywgNCwgNSksIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMCwgdCkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT04KQogICAgIGRlZiB0ZXN0X2hhc2goc2VsZiwgc2l6ZSk6CkBAIC02NjksMzIgKzY2OSwzMiBAQAogICAgICAgICBoMSA9IGhhc2godDEpCiAgICAgICAgIGRlbCB0MQogICAgICAgICB0MiA9ICgwLCkgKiAoc2l6ZSArIDEpCi0gICAgICAgIHNlbGYuZmFpbElmKGgxID09IGhhc2godDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID09IGhhc2godDIpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTgpCiAgICAgZGVmIHRlc3RfaW5kZXhfYW5kX3NsaWNlKHNlbGYsIHNpemUpOgogICAgICAgICB0ID0gKE5vbmUsKSAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHQpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0Wy0xXSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModFs1XSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModFtzaXplIC0gMV0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbLTFdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbNV0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtzaXplIC0gMV0sIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIHQsIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRbOjVdLCAoTm9uZSwpICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModFstNTpdLCAoTm9uZSwpICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModFsyMDoyNV0sIChOb25lLCkgKiA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0Wy0yNTotMjBdLCAoTm9uZSwpICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModFtzaXplIC0gNTpdLCAoTm9uZSwpICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModFtzaXplIC0gNTpzaXplXSwgKE5vbmUsKSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRbc2l6ZSAtIDY6c2l6ZSAtIDJdLCAoTm9uZSwpICogNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModFtzaXplOnNpemVdLCAoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModFtzaXplOnNpemUrNV0sICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbOjVdLCAoTm9uZSwpICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Wy01Ol0sIChOb25lLCkgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbMjA6MjVdLCAoTm9uZSwpICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Wy0yNTotMjBdLCAoTm9uZSwpICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0W3NpemUgLSA1Ol0sIChOb25lLCkgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbc2l6ZSAtIDU6c2l6ZV0sIChOb25lLCkgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbc2l6ZSAtIDY6c2l6ZSAtIDJdLCAoTm9uZSwpICogNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0W3NpemU6c2l6ZV0sICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbc2l6ZTpzaXplKzVdLCAoKSkKIAogICAgICMgTGlrZSB0ZXN0X2NvbmNhdCwgc3BsaXQgaW4gdHdvLgogICAgIGRlZiBiYXNpY190ZXN0X3JlcGVhdChzZWxmLCBzaXplKToKICAgICAgICAgdCA9ICgnJywpICogc2l6ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4odCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplKQogICAgICAgICB0ID0gdCAqIDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHQpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odCksIHNpemUgKiAyKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0yNCkKICAgICBkZWYgdGVzdF9yZXBlYXRfc21hbGwoc2VsZiwgc2l6ZSk6CkBAIC03MTcsOSArNzE3LDkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvdW50ID0gMAogICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpdGVtLCBjb3VudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0sIGNvdW50KQogICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvdW50LCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgc2l6ZSkKIAogICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzFHIC0gMjUsIG1lbXVzZT05KQogICAgIGRlZiB0ZXN0X2Zyb21fYWxtb3N0XzJHX2dlbmVyYXRvcihzZWxmLCBzaXplKToKQEAgLTcyNyw5ICs3MjcsOSBAQAogICAgICAgICAgICAgdCA9IHR1cGxlKHhyYW5nZShzaXplKSkKICAgICAgICAgICAgIGNvdW50ID0gMAogICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpdGVtLCBjb3VudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0sIGNvdW50KQogICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvdW50LCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgc2l6ZSkKICAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgogICAgICAgICAgICAgcGFzcyAjIGFjY2VwdGFibGUsIGV4cGVjdGVkIG9uIDMyLWJpdAogCkBAIC03MzgsMTAgKzczOCwxMCBAQAogICAgICAgICB0ID0gKDAsKSAqIHNpemUKICAgICAgICAgcyA9IHJlcHIodCkKICAgICAgICAgIyBUaGUgcmVwciBvZiBhIHR1cGxlIG9mIDAncyBpcyBleGFjdGx5IHRocmVlIHRpbWVzIHRoZSB0dXBsZSBsZW5ndGguCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSAqIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbOjVdLCAnKDAsIDAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWy01Ol0sICcwLCAwKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJzAnKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgKiAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbOjVdLCAnKDAsIDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTU6XSwgJzAsIDApJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcwJyksIHNpemUpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAzICsgMiwgbWVtdXNlPTggKyAzKQogICAgIGRlZiB0ZXN0X3JlcHJfc21hbGwoc2VsZiwgc2l6ZSk6CkBAIC03NjIsMTMgKzc2MiwxMyBAQAogICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwxID0gW3UnJ10gKiBzaXplCiAgICAgICAgIGwyID0gW3UnJ10gKiBzaXplCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsMSA9PSBsMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwxID09IGwyKQogICAgICAgICBkZWwgbDIKICAgICAgICAgbDIgPSBbdScnXSAqIChzaXplICsgMSkKLSAgICAgICAgc2VsZi5mYWlsSWYobDEgPT0gbDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobDEgPT0gbDIpCiAgICAgICAgIGRlbCBsMgogICAgICAgICBsMiA9IFsyXSAqIHNpemUKLSAgICAgICAgc2VsZi5mYWlsSWYobDEgPT0gbDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobDEgPT0gbDIpCiAKICAgICAjIFRlc3QgY29uY2F0ZW5hdGluZyBpbnRvIGEgc2luZ2xlIGxpc3Qgb2YgbW9yZSB0aGFuIDJHIGluIGxlbmd0aCwKICAgICAjIGFuZCBjb25jYXRlbmF0aW5nIGEgbGlzdCBvZiBtb3JlIHRoYW4gMkcgaW4gbGVuZ3RoIHNlcGFyYXRlbHksIHNvCkBAIC03NzcsOSArNzc3LDkgQEAKICAgICAjIHNraXBwZWQsIGluIHZlcmJvc2UgbW9kZS4pCiAgICAgZGVmIGJhc2ljX3Rlc3RfY29uY2F0KHNlbGYsIHNpemUpOgogICAgICAgICBsID0gW1tdXSAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKICAgICAgICAgbCA9IGwgKyBsCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogMikKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MjQpCiAgICAgZGVmIHRlc3RfY29uY2F0X3NtYWxsKHNlbGYsIHNpemUpOgpAQCAtNzkyLDkgKzc5Miw5IEBACiAgICAgZGVmIGJhc2ljX3Rlc3RfaW5wbGFjZV9jb25jYXQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbc3lzLnN0ZG91dF0gKiBzaXplCiAgICAgICAgIGwgKz0gbAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUgKiAyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobFswXSBpcyBsWy0xXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxbc2l6ZSAtIDFdIGlzIGxbc2l6ZSArIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsWzBdIGlzIGxbLTFdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobFtzaXplIC0gMV0gaXMgbFtzaXplICsgMV0pCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAyICsgMiwgbWVtdXNlPTI0KQogICAgIGRlZiB0ZXN0X2lucGxhY2VfY29uY2F0X3NtYWxsKHNlbGYsIHNpemUpOgpAQCAtODA3LDc5ICs4MDcsNzkgQEAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyA1ICsgMTAsIG1lbXVzZT04ICogNSkKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmLCBzaXplKToKICAgICAgICAgbCA9IFsxLCAyLCAzLCA0LCA1XSAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplICogNSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKDUgaW4gbCkKLSAgICAgICAgc2VsZi5mYWlsSWYoWzEsIDIsIDMsIDQsIDVdIGluIGwpCi0gICAgICAgIHNlbGYuZmFpbElmKDAgaW4gbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEluKDUsIGwpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oWzEsIDIsIDMsIDQsIDVdLCBsKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIGwpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9OCkKICAgICBkZWYgdGVzdF9oYXNoKHNlbGYsIHNpemUpOgogICAgICAgICBsID0gWzBdICogc2l6ZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGwpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9OCkKICAgICBkZWYgdGVzdF9pbmRleF9hbmRfc2xpY2Uoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbTm9uZV0gKiBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFstMV0sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbNV0sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbc2l6ZSAtIDFdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0xXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzVdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZSAtIDFdLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCBsLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWzo1XSwgW05vbmVdICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFstNTpdLCBbTm9uZV0gKiA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWzIwOjI1XSwgW05vbmVdICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFstMjU6LTIwXSwgW05vbmVdICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFtzaXplIC0gNTpdLCBbTm9uZV0gKiA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsW3NpemUgLSA1OnNpemVdLCBbTm9uZV0gKiA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsW3NpemUgLSA2OnNpemUgLSAyXSwgW05vbmVdICogNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFtzaXplOnNpemVdLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFtzaXplOnNpemUrNV0sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbOjVdLCBbTm9uZV0gKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTU6XSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzIwOjI1XSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0yNTotMjBdLCBbTm9uZV0gKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZSAtIDU6XSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemUgLSA1OnNpemVdLCBbTm9uZV0gKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZSAtIDY6c2l6ZSAtIDJdLCBbTm9uZV0gKiA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZTpzaXplXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFtzaXplOnNpemUrNV0sIFtdKQogCiAgICAgICAgIGxbc2l6ZSAtIDJdID0gNQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTM6XSwgW05vbmUsIDUsIE5vbmVdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsLmNvdW50KDUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0zOl0sIFtOb25lLCA1LCBOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmNvdW50KDUpLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBsLCBzaXplLCA2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQogCiAgICAgICAgIGxbc2l6ZSAtIDc6XSA9IFsxLCAyLCAzLCA0LCA1XQogICAgICAgICBzaXplIC09IDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWy03Ol0sIFtOb25lLCBOb25lLCAxLCAyLCAzLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstNzpdLCBbTm9uZSwgTm9uZSwgMSwgMiwgMywgNCwgNV0pCiAKICAgICAgICAgbFs6N10gPSBbMSwgMiwgMywgNCwgNV0KICAgICAgICAgc2l6ZSAtPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFs6N10sIFsxLCAyLCAzLCA0LCA1LCBOb25lLCBOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFs6N10sIFsxLCAyLCAzLCA0LCA1LCBOb25lLCBOb25lXSkKIAogICAgICAgICBkZWwgbFtzaXplIC0gMV0KICAgICAgICAgc2l6ZSAtPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFstMV0sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTFdLCA0KQogCiAgICAgICAgIGRlbCBsWy0yOl0KICAgICAgICAgc2l6ZSAtPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFstMV0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTFdLCAyKQogCiAgICAgICAgIGRlbCBsWzBdCiAgICAgICAgIHNpemUgLT0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbMF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMF0sIDIpCiAKICAgICAgICAgZGVsIGxbOjJdCiAgICAgICAgIHNpemUgLT0gMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbMF0sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMF0sIDQpCiAKICAgICAjIExpa2UgdGVzdF9jb25jYXQsIHNwbGl0IGluIHR3by4KICAgICBkZWYgYmFzaWNfdGVzdF9yZXBlYXQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbXSAqIHNpemUKLSAgICAgICAgc2VsZi5mYWlsSWYobCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsKQogICAgICAgICBsID0gWycnXSAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKICAgICAgICAgbCA9IGwgKiAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogMikKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MjQpCiAgICAgZGVmIHRlc3RfcmVwZWF0X3NtYWxsKHNlbGYsIHNpemUpOgpAQCAtODkyLDE0ICs4OTIsMTQgQEAKICAgICBkZWYgYmFzaWNfdGVzdF9pbnBsYWNlX3JlcGVhdChzZWxmLCBzaXplKToKICAgICAgICAgbCA9IFsnJ10KICAgICAgICAgbCAqPSBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxbMF0gaXMgbFstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobFswXSBpcyBsWy0xXSkKICAgICAgICAgZGVsIGwKIAogICAgICAgICBsID0gWycnXSAqIHNpemUKICAgICAgICAgbCAqPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSAqIDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsW3NpemUgLSAxXSBpcyBsWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobFtzaXplIC0gMV0gaXMgbFstMV0pCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAyICsgMiwgbWVtdXNlPTE2KQogICAgIGRlZiB0ZXN0X2lucGxhY2VfcmVwZWF0X3NtYWxsKHNlbGYsIHNpemUpOgpAQCAtOTEzLDEwICs5MTMsMTAgQEAKICAgICAgICAgbCA9IFswXSAqIHNpemUKICAgICAgICAgcyA9IHJlcHIobCkKICAgICAgICAgIyBUaGUgcmVwciBvZiBhIGxpc3Qgb2YgMCdzIGlzIGV4YWN0bHkgdGhyZWUgdGltZXMgdGhlIGxpc3QgbGVuZ3RoLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUgKiAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWzo1XSwgJ1swLCAwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1stNTpdLCAnMCwgMF0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcwJyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzo1XSwgJ1swLCAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy01Ol0sICcwLCAwXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnMCcpLCBzaXplKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMyArIDIsIG1lbXVzZT04ICsgMykKICAgICBkZWYgdGVzdF9yZXByX3NtYWxsKHNlbGYsIHNpemUpOgpAQCAtOTMyLDIyICs5MzIsMjIgQEAKICAgICBkZWYgdGVzdF9hcHBlbmQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbb2JqZWN0KCldICogc2l6ZQogICAgICAgICBsLmFwcGVuZChvYmplY3QoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKzEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsWy0zXSBpcyBsWy0yXSkKLSAgICAgICAgc2VsZi5mYWlsSWYobFstMl0gaXMgbFstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsWy0zXSBpcyBsWy0yXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsWy0yXSBpcyBsWy0xXSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDUgKyAyLCBtZW11c2U9OCAqIDUpCiAgICAgZGVmIHRlc3RfY291bnQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbMSwgMiwgMywgNCwgNV0gKiBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGwuY291bnQoMSksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGwuY291bnQoIjEiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmNvdW50KDEpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwuY291bnQoIjEiKSwgMCkKIAogICAgIGRlZiBiYXNpY190ZXN0X2V4dGVuZChzZWxmLCBzaXplKToKICAgICAgICAgbCA9IFtmaWxlXSAqIHNpemUKICAgICAgICAgbC5leHRlbmQobCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplICogMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxbMF0gaXMgbFstMV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsW3NpemUgLSAxXSBpcyBsW3NpemUgKyAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobFswXSBpcyBsWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbc2l6ZSAtIDFdIGlzIGxbc2l6ZSArIDFdKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0xNikKICAgICBkZWYgdGVzdF9leHRlbmRfc21hbGwoc2VsZiwgc2l6ZSk6CkBAIC05NjEsOSArOTYxLDkgQEAKICAgICBkZWYgdGVzdF9pbmRleChzZWxmLCBzaXplKToKICAgICAgICAgbCA9IFsxTCwgMkwsIDNMLCA0TCwgNUxdICogc2l6ZQogICAgICAgICBzaXplICo9IDUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobC5pbmRleCgxKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobC5pbmRleCg1LCBzaXplIC0gNSksIHNpemUgLSAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsLmluZGV4KDUsIHNpemUgLSA1LCBzaXplKSwgc2l6ZSAtIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5pbmRleCgxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmluZGV4KDUsIHNpemUgLSA1KSwgc2l6ZSAtIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5pbmRleCg1LCBzaXplIC0gNSwgc2l6ZSksIHNpemUgLSAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsLmluZGV4LCAxLCBzaXplIC0gNCwgc2l6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbC5pbmRleCwgNkwpCiAKQEAgLTk3Myw5NiArOTczLDk2IEBACiAgICAgICAgIGwgPSBbMS4wXSAqIHNpemUKICAgICAgICAgbC5pbnNlcnQoc2l6ZSAtIDEsICJBIikKICAgICAgICAgc2l6ZSArPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFstMzpdLCBbMS4wLCAiQSIsIDEuMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTM6XSwgWzEuMCwgIkEiLCAxLjBdKQogCiAgICAgICAgIGwuaW5zZXJ0KHNpemUgKyAxLCAiQiIpCiAgICAgICAgIHNpemUgKz0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTM6XSwgWyJBIiwgMS4wLCAiQiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0zOl0sIFsiQSIsIDEuMCwgIkIiXSkKIAogICAgICAgICBsLmluc2VydCgxLCAiQyIpCiAgICAgICAgIHNpemUgKz0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbOjNdLCBbMS4wLCAiQyIsIDEuMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbc2l6ZSAtIDM6XSwgWyJBIiwgMS4wLCAiQiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzozXSwgWzEuMCwgIkMiLCAxLjBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZSAtIDM6XSwgWyJBIiwgMS4wLCAiQiJdKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gNSArIDQsIG1lbXVzZT04ICogNSkKICAgICBkZWYgdGVzdF9wb3Aoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbdSJhIiwgdSJiIiwgdSJjIiwgdSJkIiwgdSJlIl0gKiBzaXplCiAgICAgICAgIHNpemUgKj0gNQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQogCiAgICAgICAgIGl0ZW0gPSBsLnBvcCgpCiAgICAgICAgIHNpemUgLT0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGl0ZW0sIHUiZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTI6XSwgW3UiYyIsIHUiZCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtLCB1ImUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTI6XSwgW3UiYyIsIHUiZCJdKQogCiAgICAgICAgIGl0ZW0gPSBsLnBvcCgwKQogICAgICAgICBzaXplIC09IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpdGVtLCB1ImEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWzoyXSwgW3UiYiIsIHUiYyJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtLCB1ImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbOjJdLCBbdSJiIiwgdSJjIl0pCiAKICAgICAgICAgaXRlbSA9IGwucG9wKHNpemUgLSAyKQogICAgICAgICBzaXplIC09IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpdGVtLCB1ImMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWy0yOl0sIFt1ImIiLCB1ImQiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbSwgdSJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0yOl0sIFt1ImIiLCB1ImQiXSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT04KQogICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmLCBzaXplKToKICAgICAgICAgbCA9IFsxMF0gKiBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCiAKICAgICAgICAgbC5yZW1vdmUoMTApCiAgICAgICAgIHNpemUgLT0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQogCiAgICAgICAgICMgQmVjYXVzZSBvZiB0aGUgZWFybGllciBsLnJlbW92ZSgpLCB0aGlzIGFwcGVuZCBkb2Vzbid0IHRyaWdnZXIKICAgICAgICAgIyBhIHJlc2l6ZS4KICAgICAgICAgbC5hcHBlbmQoNSkKICAgICAgICAgc2l6ZSArPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFstMjpdLCBbMTAsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0yOl0sIFsxMCwgNV0pCiAgICAgICAgIGwucmVtb3ZlKDUpCiAgICAgICAgIHNpemUgLT0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTI6XSwgWzEwLCAxMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTI6XSwgWzEwLCAxMF0pCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyA1ICsgMiwgbWVtdXNlPTggKiA1KQogICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbMSwgMiwgMywgNCwgNV0gKiBzaXplCiAgICAgICAgIGwucmV2ZXJzZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTU6XSwgWzUsIDQsIDMsIDIsIDFdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWzo1XSwgWzUsIDQsIDMsIDIsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstNTpdLCBbNSwgNCwgMywgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFs6NV0sIFs1LCA0LCAzLCAyLCAxXSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDUgKyAyLCBtZW11c2U9OCAqIDUpCiAgICAgZGVmIHRlc3Rfc29ydChzZWxmLCBzaXplKToKICAgICAgICAgbCA9IFsxLCAyLCAzLCA0LCA1XSAqIHNpemUKICAgICAgICAgbC5zb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobC5jb3VudCgxKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFs6MTBdLCBbMV0gKiAxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFstMTA6XSwgWzVdICogMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmNvdW50KDEpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbOjEwXSwgWzFdICogMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMTA6XSwgWzVdICogMTApCiAKIGNsYXNzIEJ1ZmZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fMUcsIG1lbXVzZT00KQogICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmLCBzaXplKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgICAgICBiID0gYnVmZmVyKCJBQUFBIikqc2l6ZQogICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CiAgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSBvbiAzMi1iaXQKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvdW50ID0gMAogICAgICAgICAgICAgZm9yIGMgaW4gYjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjLCAnQScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCAnQScpCiAgICAgICAgICAgICAgICAgY291bnQgKz0gMQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY291bnQsIHNpemUqNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIHNpemUqNCkKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RyVGVzdCwgVHVwbGVUZXN0LCBMaXN0VGVzdCwgQnVmZmVyVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkgYi9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggN2ZiMDdiZS4uZjgyNWYxYwotLS0gYS9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkKQEAgLTMsNDggKzMsNzYgQEAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBiaW5hc2NpaQoraW1wb3J0IGFycmF5CisKKyMgTm90ZTogIipfaGV4IiBmdW5jdGlvbnMgYXJlIGFsaWFzZXMgZm9yICIodW4paGV4bGlmeSIKK2IyYV9mdW5jdGlvbnMgPSBbJ2IyYV9iYXNlNjQnLCAnYjJhX2hleCcsICdiMmFfaHF4JywgJ2IyYV9xcCcsICdiMmFfdXUnLAorICAgICAgICAgICAgICAgICAnaGV4bGlmeScsICdybGVjb2RlX2hxeCddCithMmJfZnVuY3Rpb25zID0gWydhMmJfYmFzZTY0JywgJ2EyYl9oZXgnLCAnYTJiX2hxeCcsICdhMmJfcXAnLCAnYTJiX3V1JywKKyAgICAgICAgICAgICAgICAgJ3VuaGV4bGlmeScsICdybGVkZWNvZGVfaHF4J10KK2FsbF9mdW5jdGlvbnMgPSBhMmJfZnVuY3Rpb25zICsgYjJhX2Z1bmN0aW9ucyArIFsnY3JjMzInLCAnY3JjX2hxeCddCisKIAogY2xhc3MgQmluQVNDSUlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIHR5cGUydGVzdCA9IHN0cgogICAgICMgQ3JlYXRlIGJpbmFyeSB0ZXN0IGRhdGEKLSAgICBkYXRhID0gIlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuXHJcbiIKKyAgICByYXdkYXRhID0gIlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuXHJcbiIKICAgICAjIEJlIHNsb3cgc28gd2UgZG9uJ3QgZGVwZW5kIG9uIG90aGVyIG1vZHVsZXMKLSAgICBkYXRhICs9ICIiLmpvaW4obWFwKGNociwgeHJhbmdlKDI1NikpKQotICAgIGRhdGEgKz0gIlxyXG5IZWxsbyB3b3JsZC5cbiIKKyAgICByYXdkYXRhICs9ICIiLmpvaW4obWFwKGNociwgeHJhbmdlKDI1NikpKQorICAgIHJhd2RhdGEgKz0gIlxyXG5IZWxsbyB3b3JsZC5cbiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kYXRhID0gc2VsZi50eXBlMnRlc3Qoc2VsZi5yYXdkYXRhKQogCiAgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKICAgICAgICAgIyBDaGVjayBtb2R1bGUgZXhjZXB0aW9ucwotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhiaW5hc2NpaS5FcnJvciwgRXhjZXB0aW9uKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzc3ViY2xhc3MoYmluYXNjaWkuSW5jb21wbGV0ZSwgRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYmluYXNjaWkuRXJyb3IsIEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGJpbmFzY2lpLkluY29tcGxldGUsIEV4Y2VwdGlvbikpCiAKICAgICBkZWYgdGVzdF9mdW5jdGlvbnMoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgcHJlc2VuY2Ugb2YgYWxsIGZ1bmN0aW9ucwotICAgICAgICBmdW5jcyA9IFtdCi0gICAgICAgIGZvciBzdWZmaXggaW4gImJhc2U2NCIsICJocXgiLCAidXUiLCAiaGV4IjoKLSAgICAgICAgICAgIHByZWZpeGVzID0gWyJhMmJfIiwgImIyYV8iXQotICAgICAgICAgICAgaWYgc3VmZml4ID09ICJocXgiOgotICAgICAgICAgICAgICAgIHByZWZpeGVzLmV4dGVuZChbImNyY18iLCAicmxlY29kZV8iLCAicmxlZGVjb2RlXyJdKQotICAgICAgICAgICAgZm9yIHByZWZpeCBpbiBwcmVmaXhlczoKLSAgICAgICAgICAgICAgICBuYW1lID0gcHJlZml4ICsgc3VmZml4Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZ2V0YXR0cihiaW5hc2NpaSwgbmFtZSksICdfX2NhbGxfXycpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0cihiaW5hc2NpaSwgbmFtZSkpCi0gICAgICAgIGZvciBuYW1lIGluICgiaGV4bGlmeSIsICJ1bmhleGxpZnkiKToKKyAgICAgICAgZm9yIG5hbWUgaW4gYWxsX2Z1bmN0aW9uczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGdldGF0dHIoYmluYXNjaWksIG5hbWUpLCAnX19jYWxsX18nKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0cihiaW5hc2NpaSwgbmFtZSkpCiAKKyAgICBkZWYgdGVzdF9yZXR1cm5lZF92YWx1ZShzZWxmKToKKyAgICAgICAgIyBMaW1pdCB0byB0aGUgbWluaW11bSBvZiBhbGwgbGltaXRzIChiMmFfdXUpCisgICAgICAgIE1BWF9BTEwgPSA0NQorICAgICAgICByYXcgPSBzZWxmLnJhd2RhdGFbOk1BWF9BTExdCisgICAgICAgIGZvciBmYSwgZmIgaW4gemlwKGEyYl9mdW5jdGlvbnMsIGIyYV9mdW5jdGlvbnMpOgorICAgICAgICAgICAgYTJiID0gZ2V0YXR0cihiaW5hc2NpaSwgZmEpCisgICAgICAgICAgICBiMmEgPSBnZXRhdHRyKGJpbmFzY2lpLCBmYikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhID0gYjJhKHNlbGYudHlwZTJ0ZXN0KHJhdykpCisgICAgICAgICAgICAgICAgcmVzID0gYTJiKHNlbGYudHlwZTJ0ZXN0KGEpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgie30ve30gY29udmVyc2lvbiByYWlzZXMgeyFyfSIuZm9ybWF0KGZiLCBmYSwgZXJyKSkKKyAgICAgICAgICAgIGlmIGZiID09ICdiMmFfaHF4JzoKKyAgICAgICAgICAgICAgICAjIGIyYV9ocXggcmV0dXJucyBhIHR1cGxlCisgICAgICAgICAgICAgICAgcmVzLCBfID0gcmVzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgcmF3LCAie30ve30gY29udmVyc2lvbjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyFyfSAhPSB7IXJ9Ii5mb3JtYXQoZmIsIGZhLCByZXMsIHJhdykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKG1heChvcmQoYykgZm9yIGMgaW4gYSksIDEyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpbmFzY2lpLmNyY19ocXgocmF3LCAwKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYmluYXNjaWkuY3JjMzIocmF3KSwgaW50KQorCiAgICAgZGVmIHRlc3RfYmFzZTY0dmFsaWQoc2VsZik6CiAgICAgICAgICMgVGVzdCBiYXNlNjQgd2l0aCB2YWxpZCBkYXRhCiAgICAgICAgIE1BWF9CQVNFNjQgPSA1NwogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLmRhdGEpLCBNQVhfQkFTRTY0KToKLSAgICAgICAgICAgIGIgPSBzZWxmLmRhdGFbaTppK01BWF9CQVNFNjRdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLnJhd2RhdGEpLCBNQVhfQkFTRTY0KToKKyAgICAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChzZWxmLnJhd2RhdGFbaTppK01BWF9CQVNFNjRdKQogICAgICAgICAgICAgYSA9IGJpbmFzY2lpLmIyYV9iYXNlNjQoYikKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChhKQogICAgICAgICByZXMgPSAiIgogICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGIgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGxpbmUpCisgICAgICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QobGluZSkKKyAgICAgICAgICAgIGIgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGEpCiAgICAgICAgICAgICByZXMgPSByZXMgKyBiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLnJhd2RhdGEpCiAKICAgICBkZWYgdGVzdF9iYXNlNjRpbnZhbGlkKHNlbGYpOgogICAgICAgICAjIFRlc3QgYmFzZTY0IHdpdGggcmFuZG9tIGludmFsaWQgY2hhcmFjdGVycyBzcHJpbmtsZWQgdGhyb3VnaG91dApAQCAtNTIsNyArODAsNyBAQAogICAgICAgICBNQVhfQkFTRTY0ID0gNTcKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5kYXRhKSwgTUFYX0JBU0U2NCk6Ci0gICAgICAgICAgICBiID0gc2VsZi5kYXRhW2k6aStNQVhfQkFTRTY0XQorICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KHNlbGYucmF3ZGF0YVtpOmkrTUFYX0JBU0U2NF0pCiAgICAgICAgICAgICBhID0gYmluYXNjaWkuYjJhX2Jhc2U2NChiKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKGEpCiAKQEAgLTc1LDI2ICsxMDMsMjggQEAKICAgICAgICAgICAgIHJldHVybiByZXMgKyBub2lzZSArIGxpbmUKICAgICAgICAgcmVzID0gIiIKICAgICAgICAgZm9yIGxpbmUgaW4gbWFwKGFkZG5vaXNlLCBsaW5lcyk6Ci0gICAgICAgICAgICBiID0gYmluYXNjaWkuYTJiX2Jhc2U2NChsaW5lKQorICAgICAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KGxpbmUpCisgICAgICAgICAgICBiID0gYmluYXNjaWkuYTJiX2Jhc2U2NChhKQogICAgICAgICAgICAgcmVzICs9IGIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHNlbGYuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHNlbGYucmF3ZGF0YSkKIAogICAgICAgICAjIFRlc3QgYmFzZTY0IHdpdGgganVzdCBpbnZhbGlkIGNoYXJhY3RlcnMsIHdoaWNoIHNob3VsZCByZXR1cm4KICAgICAgICAgIyBlbXB0eSBzdHJpbmdzLiBUQkQ6IHNob3VsZG4ndCBpdCByYWlzZSBhbiBleGNlcHRpb24gaW5zdGVhZCA/Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX2Jhc2U2NChmaWxsZXJzKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX2Jhc2U2NChzZWxmLnR5cGUydGVzdChmaWxsZXJzKSksICcnKQogCiAgICAgZGVmIHRlc3RfdXUoc2VsZik6CiAgICAgICAgIE1BWF9VVSA9IDQ1CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYuZGF0YSksIE1BWF9VVSk6Ci0gICAgICAgICAgICBiID0gc2VsZi5kYXRhW2k6aStNQVhfVVVdCisgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3Qoc2VsZi5yYXdkYXRhW2k6aStNQVhfVVVdKQogICAgICAgICAgICAgYSA9IGJpbmFzY2lpLmIyYV91dShiKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKGEpCiAgICAgICAgIHJlcyA9ICIiCiAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgYiA9IGJpbmFzY2lpLmEyYl91dShsaW5lKQorICAgICAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KGxpbmUpCisgICAgICAgICAgICBiID0gYmluYXNjaWkuYTJiX3V1KGEpCiAgICAgICAgICAgICByZXMgKz0gYgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgc2VsZi5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgc2VsZi5yYXdkYXRhKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3V1KCJceDdmIiksICJceDAwIiozMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfdXUoIlx4ODAiKSwgIlx4MDAiKjMyKQpAQCAtMTA4LDE5ICsxMzgsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfdXUoJ3gnKSwgJyE+ICAgXG4nKQogCiAgICAgZGVmIHRlc3RfY3JjMzIoc2VsZik6Ci0gICAgICAgIGNyYyA9IGJpbmFzY2lpLmNyYzMyKCJUZXN0IHRoZSBDUkMtMzIgb2YiKQotICAgICAgICBjcmMgPSBiaW5hc2NpaS5jcmMzMigiIHRoaXMgc3RyaW5nLiIsIGNyYykKKyAgICAgICAgY3JjID0gYmluYXNjaWkuY3JjMzIoc2VsZi50eXBlMnRlc3QoIlRlc3QgdGhlIENSQy0zMiBvZiIpKQorICAgICAgICBjcmMgPSBiaW5hc2NpaS5jcmMzMihzZWxmLnR5cGUydGVzdCgiIHRoaXMgc3RyaW5nLiIpLCBjcmMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JjLCAxNTcxMjIwMzMwKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmluYXNjaWkuY3JjMzIpCiAKLSAgICAjIFRoZSBocXggdGVzdCBpcyBpbiB0ZXN0X2JpbmhleC5weQorICAgIGRlZiB0ZXN0X2hxeChzZWxmKToKKyAgICAgICAgIyBQZXJmb3JtIGJpbmhleDQgc3R5bGUgUkxFLWNvbXByZXNzaW9uCisgICAgICAgICMgVGhlbiBjYWxjdWxhdGUgdGhlIGhleGJpbjQgYmluYXJ5LXRvLUFTQ0lJIHRyYW5zbGF0aW9uCisgICAgICAgIHJsZSA9IGJpbmFzY2lpLnJsZWNvZGVfaHF4KHNlbGYuZGF0YSkKKyAgICAgICAgYSA9IGJpbmFzY2lpLmIyYV9ocXgoc2VsZi50eXBlMnRlc3QocmxlKSkKKyAgICAgICAgYiwgXyA9IGJpbmFzY2lpLmEyYl9ocXgoc2VsZi50eXBlMnRlc3QoYSkpCisgICAgICAgIHJlcyA9IGJpbmFzY2lpLnJsZWRlY29kZV9ocXgoYikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgc2VsZi5yYXdkYXRhKQogCiAgICAgZGVmIHRlc3RfaGV4KHNlbGYpOgogICAgICAgICAjIHRlc3QgaGV4bGlmaWNhdGlvbgogICAgICAgICBzID0gJ3tzXDAwNVwwMDBcMDAwXDAwMHdvcmxkaVwwMDJcMDAwXDAwMFwwMDBzXDAwNVwwMDBcMDAwXDAwMGhlbGxvaVwwMDFcMDAwXDAwMFwwMDAwJwotICAgICAgICB0ID0gYmluYXNjaWkuYjJhX2hleChzKQotICAgICAgICB1ID0gYmluYXNjaWkuYTJiX2hleCh0KQorICAgICAgICB0ID0gYmluYXNjaWkuYjJhX2hleChzZWxmLnR5cGUydGVzdChzKSkKKyAgICAgICAgdSA9IGJpbmFzY2lpLmEyYl9oZXgoc2VsZi50eXBlMnRlc3QodCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgdSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiaW5hc2NpaS5hMmJfaGV4LCB0WzotMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmluYXNjaWkuYTJiX2hleCwgdFs6LTFdICsgJ3EnKQpAQCAtMTYyLDE2ICsyMDAsMzcgQEAKIAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgIyBBIHRlc3QgZm9yIFNGIGJ1ZyAjMTAyMjk1My4gIE1ha2Ugc3VyZSBTeXN0ZW1FcnJvciBpcyBub3QgcmFpc2VkLgotICAgICAgICBmb3IgbiBpbiBbJ2IyYV9xcCcsICdhMmJfaGV4JywgJ2IyYV9iYXNlNjQnLCAnYTJiX3V1JywgJ2EyYl9xcCcsCi0gICAgICAgICAgICAgICAgICAnYjJhX2hleCcsICd1bmhleGxpZnknLCAnaGV4bGlmeScsICdjcmMzMicsICdiMmFfaHF4JywKLSAgICAgICAgICAgICAgICAgICdhMmJfaHF4JywgJ2EyYl9iYXNlNjQnLCAncmxlY29kZV9ocXgnLCAnYjJhX3V1JywKLSAgICAgICAgICAgICAgICAgICdybGVkZWNvZGVfaHF4J106Ci0gICAgICAgICAgICBmID0gZ2V0YXR0cihiaW5hc2NpaSwgbikKLSAgICAgICAgICAgIGYoJycpCi0gICAgICAgIGJpbmFzY2lpLmNyY19ocXgoJycsIDApCisgICAgICAgIGVtcHR5ID0gc2VsZi50eXBlMnRlc3QoJycpCisgICAgICAgIGZvciBmdW5jIGluIGFsbF9mdW5jdGlvbnM6CisgICAgICAgICAgICBpZiBmdW5jID09ICdjcmNfaHF4JzoKKyAgICAgICAgICAgICAgICAjIGNyY19ocXggbmVlZHMgMiBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICBiaW5hc2NpaS5jcmNfaHF4KGVtcHR5LCAwKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmID0gZ2V0YXR0cihiaW5hc2NpaSwgZnVuYykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmKGVtcHR5KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgie30oeyFyfSkgcmFpc2VzIHshcn0iLmZvcm1hdChmdW5jLCBlbXB0eSwgZXJyKSkKKworCitjbGFzcyBBcnJheUJpbkFTQ0lJVGVzdChCaW5BU0NJSVRlc3QpOgorICAgIGRlZiB0eXBlMnRlc3Qoc2VsZiwgcyk6CisgICAgICAgIHJldHVybiBhcnJheS5hcnJheSgnYycsIHMpCisKKworY2xhc3MgQnl0ZWFycmF5QmluQVNDSUlUZXN0KEJpbkFTQ0lJVGVzdCk6CisgICAgdHlwZTJ0ZXN0ID0gYnl0ZWFycmF5CisKKworY2xhc3MgTWVtb3J5dmlld0JpbkFTQ0lJVGVzdChCaW5BU0NJSVRlc3QpOgorICAgIHR5cGUydGVzdCA9IG1lbW9yeXZpZXcKKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCaW5BU0NJSVRlc3QpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCaW5BU0NJSVRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJpbkFTQ0lJVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVhcnJheUJpbkFTQ0lJVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeXZpZXdCaW5BU0NJSVRlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmlub3AucHkgYi9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5CmluZGV4IDU0MWYwN2YuLmIxZWY2MjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmlub3AucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iaW5vcC5weQpAQCAtMjIzLDEwICsyMjMsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoLTEwLCAtMiksIC0yKQogICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAyMCk6CiAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgxLCAyMCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGdjZChpLCBqKSA+IDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGdjZCgtaSwgaikgPCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhnY2QoaSwgLWopID4gMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oZ2NkKC1pLCAtaikgPCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnY2QoaSwgaikgPiAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnY2QoLWksIGopIDwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2NkKGksIC1qKSA+IDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjZCgtaSwgLWopIDwgMCkKIAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgogICAgICAgICBhID0gUmF0KDEwLCAxNSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkKaW5kZXggNjZiYWU0OC4uOTM0YmE4YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkKQEAgLTEzMCwxNCArMTMwLDE0IEBACiAgICAgICAgICAgICBlbGVtID0gcmFuZHJhbmdlKC0xLCBuKzEpCiAgICAgICAgICAgICBpcCA9IHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0KGRhdGEsIGVsZW0pCiAgICAgICAgICAgICBpZiBpcCA8IGxlbihkYXRhKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZWxlbSA8PSBkYXRhW2lwXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSA8PSBkYXRhW2lwXSkKICAgICAgICAgICAgIGlmIGlwID4gMDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGF0YVtpcC0xXSA8IGVsZW0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGFbaXAtMV0gPCBlbGVtKQogICAgICAgICAgICAgaXAgPSBzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQoZGF0YSwgZWxlbSkKICAgICAgICAgICAgIGlmIGlwIDwgbGVuKGRhdGEpOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhlbGVtIDwgZGF0YVtpcF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gPCBkYXRhW2lwXSkKICAgICAgICAgICAgIGlmIGlwID4gMDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGF0YVtpcC0xXSA8PSBlbGVtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhW2lwLTFdIDw9IGVsZW0pCiAKICAgICBkZWYgdGVzdF9vcHRpb25hbFNsaWNpbmcoc2VsZik6CiAgICAgICAgIGZvciBmdW5jLCBkYXRhLCBlbGVtLCBleHBlY3RlZCBpbiBzZWxmLnByZWNvbXB1dGVkQ2FzZXM6CkBAIC0xNDYsMTUgKzE0NiwxNSBAQAogICAgICAgICAgICAgICAgIGZvciBoaSBpbiB4cmFuZ2UoMyw4KToKICAgICAgICAgICAgICAgICAgICAgaGkgPSBtaW4obGVuKGRhdGEpLCBoaSkKICAgICAgICAgICAgICAgICAgICAgaXAgPSBmdW5jKGRhdGEsIGVsZW0sIGxvLCBoaSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxvIDw9IGlwIDw9IGhpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG8gPD0gaXAgPD0gaGkpCiAgICAgICAgICAgICAgICAgICAgIGlmIGZ1bmMgaXMgc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQgYW5kIGlwIDwgaGk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZWxlbSA8PSBkYXRhW2lwXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtIDw9IGRhdGFbaXBdKQogICAgICAgICAgICAgICAgICAgICBpZiBmdW5jIGlzIHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0IGFuZCBpcCA+IGxvOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRhdGFbaXAtMV0gPCBlbGVtKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGFbaXAtMV0gPCBlbGVtKQogICAgICAgICAgICAgICAgICAgICBpZiBmdW5jIGlzIHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCBhbmQgaXAgPCBoaToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhlbGVtIDwgZGF0YVtpcF0pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSA8IGRhdGFbaXBdKQogICAgICAgICAgICAgICAgICAgICBpZiBmdW5jIGlzIHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCBhbmQgaXAgPiBsbzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYXRhW2lwLTFdIDw9IGVsZW0pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YVtpcC0xXSA8PSBlbGVtKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwLCBtYXgobG8sIG1pbihoaSwgZXhwZWN0ZWQpKSkKIAogICAgIGRlZiB0ZXN0X2JhY2tjb21wYXRpYmlsaXR5KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ib29sLnB5IGIvTGliL3Rlc3QvdGVzdF9ib29sLnB5CmluZGV4IDY4MGE0MGYuLjlkNThhMmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYm9vbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Jvb2wucHkKQEAgLTcsMTIgKzcsNiBAQAogCiBjbGFzcyBCb29sVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgYXNzZXJ0SXMoc2VsZiwgYSwgYik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGIpCi0KLSAgICBkZWYgYXNzZXJ0SXNOb3Qoc2VsZiwgYSwgYik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIG5vdCBiKQotCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3Moc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNsYXNzIEMoYm9vbCk6CkBAIC01MSw2ICs0NSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChUcnVlKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChpbnQoVHJ1ZSksIFRydWUpCiAKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChGYWxzZSksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChmbG9hdChGYWxzZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KFRydWUpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZmxvYXQoVHJ1ZSksIFRydWUpCisKKyAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoRmFsc2UpLCAwTCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChsb25nKEZhbHNlKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhUcnVlKSwgMUwpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9uZyhUcnVlKSwgVHJ1ZSkKKwogICAgIGRlZiB0ZXN0X21hdGgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoK0ZhbHNlLCAwKQogICAgICAgICBzZWxmLmFzc2VydElzTm90KCtGYWxzZSwgRmFsc2UpCkBAIC0xNjMsMTIgKzE2OSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woIiIpLCBGYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKCksIEZhbHNlKQogCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlZCIgJSBGYWxzZSwgIjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlZCIgJSBUcnVlLCAiMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiV4IiAlIEZhbHNlLCAiMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiV4IiAlIFRydWUsICIxIikKKwogICAgIGRlZiB0ZXN0X2hhc2F0dHIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoaGFzYXR0cihbXSwgImFwcGVuZCIpLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydElzKGhhc2F0dHIoW10sICJ3b2JibGUiKSwgRmFsc2UpCiAKICAgICBkZWYgdGVzdF9jYWxsYWJsZShzZWxmKToKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjYWxsYWJsZShsZW4pLCBUcnVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjYWxsYWJsZSgxKSwgRmFsc2UpCiAKQEAgLTE4Nyw3ICsxOTksNyBAQAogICAgIGRlZiB0ZXN0X2hhc2tleShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJcygxIGluIHt9LCBGYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRJcygxIGluIHsxOjF9LCBUcnVlKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHt9Lmhhc19rZXkoMSksIEZhbHNlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh7MToxfS5oYXNfa2V5KDEpLCBUcnVlKQogCkBAIC0yMzcsMTUgKzI0OSwxNSBAQAogCiAgICAgZGVmIHRlc3RfYm9vbGVhbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlICYgMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc2luc3RhbmNlKFRydWUgJiAxLCBib29sKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKFRydWUgJiAxLCBib29sKQogICAgICAgICBzZWxmLmFzc2VydElzKFRydWUgJiBUcnVlLCBUcnVlKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSB8IDEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNpbnN0YW5jZShUcnVlIHwgMSwgYm9vbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShUcnVlIHwgMSwgYm9vbCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlIHwgVHJ1ZSwgVHJ1ZSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUgXiAxLCAwKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzaW5zdGFuY2UoVHJ1ZSBeIDEsIGJvb2wpKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoVHJ1ZSBeIDEsIGJvb2wpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSBeIFRydWUsIEZhbHNlKQogCiAgICAgZGVmIHRlc3RfZmlsZWNsb3NlZChzZWxmKToKQEAgLTI1NywxMiArMjY5LDE5IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKIAorICAgIGRlZiB0ZXN0X3R5cGVzKHNlbGYpOgorICAgICAgICAjIHR5cGVzIGFyZSBhbHdheXMgdHJ1ZS4KKyAgICAgICAgZm9yIHQgaW4gW2Jvb2wsIGNvbXBsZXgsIGRpY3QsIGZpbGUsIGZsb2F0LCBpbnQsIGxpc3QsIGxvbmcsIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgIHNldCwgc3RyLCB0dXBsZSwgdHlwZV06CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGJvb2wodCksIFRydWUpCisKICAgICBkZWYgdGVzdF9vcGVyYXRvcihzZWxmKToKICAgICAgICAgaW1wb3J0IG9wZXJhdG9yCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IudHJ1dGgoMCksIEZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLnRydXRoKDEpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzQ2FsbGFibGUoMCksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzQ2FsbGFibGUobGVuKSwgVHJ1ZSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc0NhbGxhYmxlKDApLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNDYWxsYWJsZShsZW4pLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzTnVtYmVyVHlwZShOb25lKSwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNOdW1iZXJUeXBlKDApLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLm5vdF8oMSksIEZhbHNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ic2RkYi5weSBiL0xpYi90ZXN0L3Rlc3RfYnNkZGIucHkKaW5kZXggZmE4OGY1NjUuLmQxZWUwYTEgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnNkZGIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ic2RkYi5weQpAQCAtMyw5ICszLDYgQEAKICAgIEFkYXB0ZWQgdG8gdW5pdHRlc3QgZm9ybWF0IGFuZCBleHBhbmRlZCBzY29wZSBieSBSYXltb25kIEhldHRpbmdlcgogIiIiCiBpbXBvcnQgb3MsIHN5cwotaW1wb3J0IGNvcHkKLWltcG9ydCBic2RkYgotaW1wb3J0IGRiaGFzaCAjIEp1c3Qgc28gd2Uga25vdyBpdCdzIGltcG9ydGVkCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKQEAgLTQ2LDggKzQzLDggQEAKICAgICBkZWYgdGVzdF9jaGFuZ2Uoc2VsZik6CiAgICAgICAgIHNlbGYuZlsnciddID0gJ2Rpc2NvdmVyZWQnCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mWydyJ10sICdkaXNjb3ZlcmVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdyJyBpbiBzZWxmLmYua2V5cygpKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2Rpc2NvdmVyZWQnIGluIHNlbGYuZi52YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncicsIHNlbGYuZi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Rpc2NvdmVyZWQnLCBzZWxmLmYudmFsdWVzKCkpCiAKICAgICBkZWYgdGVzdF9jbG9zZV9hbmRfcmVvcGVuKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmZuYW1lIGlzIE5vbmU6CkBAIC0xNzksNyArMTc2LDcgQEAKIAogICAgIGRlZiB0ZXN0X2ZpcnN0X3doaWxlX2RlbGV0aW5nKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAxNzI1ODU2Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5kKSA+PSAyLCAidGVzdCByZXF1aXJlcyA+PTIgaXRlbXMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYuZCkgPj0gMiwgInRlc3QgcmVxdWlyZXMgPj0yIGl0ZW1zIikKICAgICAgICAgZm9yIF8gaW4gc2VsZi5kOgogICAgICAgICAgICAga2V5ID0gc2VsZi5mLmZpcnN0KClbMF0KICAgICAgICAgICAgIGRlbCBzZWxmLmZba2V5XQpAQCAtMTg3LDcgKzE4NCw3IEBACiAKICAgICBkZWYgdGVzdF9sYXN0X3doaWxlX2RlbGV0aW5nKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAxNzI1ODU2J3MgZXZpbCB0d2luCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5kKSA+PSAyLCAidGVzdCByZXF1aXJlcyA+PTIgaXRlbXMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYuZCkgPj0gMiwgInRlc3QgcmVxdWlyZXMgPj0yIGl0ZW1zIikKICAgICAgICAgZm9yIF8gaW4gc2VsZi5kOgogICAgICAgICAgICAga2V5ID0gc2VsZi5mLmxhc3QoKVswXQogICAgICAgICAgICAgZGVsIHNlbGYuZltrZXldCkBAIC0xOTgsMTMgKzE5NSwxMyBAQAogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CiAgICAgICAgIGZvciBrIGluIHNlbGYuZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhrIGluIHNlbGYuZikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdub3QgaGVyZScgbm90IGluIHNlbGYuZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgc2VsZi5mKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdub3QgaGVyZScsIHNlbGYuZikKIAogICAgIGRlZiB0ZXN0X2hhc19rZXkoc2VsZik6CiAgICAgICAgIGZvciBrIGluIHNlbGYuZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmYuaGFzX2tleShrKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBzZWxmLmYuaGFzX2tleSgnbm90IGhlcmUnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmYuaGFzX2tleShrKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmYuaGFzX2tleSgnbm90IGhlcmUnKSkKIAogICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgogICAgICAgICBzZWxmLmYuY2xlYXIoKQpAQCAtMjU2LDExICsyNTMsMTEgQEAKICAgICAgICAgICAgIGlmIGRlYnVnOiBwcmludCAiSyIKIAogICAgICAgICAjIHRlc3QgdGhlIGxlZ2FjeSBjdXJzb3IgaW50ZXJmYWNlIG1peGVkIHdpdGggd3JpdGVzCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmYuZmlyc3QoKVswXSBpbiBzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5mLmZpcnN0KClbMF0sIHNlbGYuZCkKICAgICAgICAgayA9IHNlbGYuZi5uZXh0KClbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRfKGsgaW4gc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEluKGssIHNlbGYuZCkKICAgICAgICAgc2VsZi5mW2tdID0gImJlIGdvbmUgd2l0aCB5ZSBkZWFkbG9ja3MiCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmZba10sICJiZSBnb25lIHdpdGggeWUgZGVhZGxvY2tzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZltrXSwgImJlIGdvbmUgd2l0aCB5ZSBkZWFkbG9ja3MiKQogCiAgICAgZGVmIHRlc3RfZm9yX2N1cnNvcl9tZW1sZWFrKHNlbGYpOgogICAgICAgICAjIGRvIHRoZSBic2RkYi5fREJXaXRoQ3Vyc29yIGl0ZXJhdG9yIGludGVybmFscyBsZWFrIGN1cnNvcnM/CkBAIC0yNzgsMjEgKzI3NSwyMSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmMxLCBuYzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmMxLCBuYzQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhuYzMgPT0gbmMxKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYzMgPT0gbmMxKzEpCiAKICAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgogICAgICAgICBrLCB2ID0gc2VsZi5mLnBvcGl0ZW0oKQotICAgICAgICBzZWxmLmFzc2VydF8oayBpbiBzZWxmLmQpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2IGluIHNlbGYuZC52YWx1ZXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGsgbm90IGluIHNlbGYuZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgc2VsZi5kLnZhbHVlcygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGssIHNlbGYuZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5kKS0xLCBsZW4oc2VsZi5mKSkKIAogICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKICAgICAgICAgayA9ICd3JwogICAgICAgICB2ID0gc2VsZi5mLnBvcChrKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIHNlbGYuZFtrXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGsgbm90IGluIHNlbGYuZikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHYgbm90IGluIHNlbGYuZi52YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrLCBzZWxmLmYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odiwgc2VsZi5mLnZhbHVlcygpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmQpLTEsIGxlbihzZWxmLmYpKQogCiAgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkgYi9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weQppbmRleCBkYzUwOTY4Li42YmRjMzRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weQpAQCAtMjMsNyArMjMsNyBAQAogCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygoImJ1ZmZlci4uIG5vdCBzdXBwb3J0ZWQiLAorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCdWZmZXJUZXN0cykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9idWZpby5weSBiL0xpYi90ZXN0L3Rlc3RfYnVmaW8ucHkKaW5kZXggNGY1ZGUxMC4uMTA4YjFlMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9idWZpby5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J1ZmlvLnB5CkBAIC0xLDEyICsxLDE1IEBACiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CiAKLSMgU2ltcGxlIHRlc3QgdG8gZW5zdXJlIHRoYXQgb3B0aW1pemF0aW9ucyBpbiBmaWxlb2JqZWN0LmMgZGVsaXZlcgotIyB0aGUgZXhwZWN0ZWQgcmVzdWx0cy4gIEZvciBiZXN0IHRlc3RpbmcsIHJ1biB0aGlzIHVuZGVyIGEgZGVidWctYnVpbGQKLSMgUHl0aG9uIHRvbyAodG8gZXhlcmNpc2UgYXNzZXJ0cyBpbiB0aGUgQyBjb2RlKS4KK2ltcG9ydCBpbyAjIEMgaW1wbGVtZW50YXRpb24uCitpbXBvcnQgX3B5aW8gYXMgcHlpbyAjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbi4KIAotbGVuZ3RocyA9IHJhbmdlKDEsIDI1NykgKyBbNTEyLCAxMDAwLCAxMDI0LCAyMDQ4LCA0MDk2LCA4MTkyLCAxMDAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Mzg0LCAzMjc2OCwgNjU1MzYsIDEwMDAwMDBdCisjIFNpbXBsZSB0ZXN0IHRvIGVuc3VyZSB0aGF0IG9wdGltaXphdGlvbnMgaW4gdGhlIElPIGxpYnJhcnkgZGVsaXZlciB0aGUKKyMgZXhwZWN0ZWQgcmVzdWx0cy4gIEZvciBiZXN0IHRlc3RpbmcsIHJ1biB0aGlzIHVuZGVyIGEgZGVidWctYnVpbGQgUHl0aG9uIHRvbworIyAodG8gZXhlcmNpc2UgYXNzZXJ0cyBpbiB0aGUgQyBjb2RlKS4KKworbGVuZ3RocyA9IGxpc3QocmFuZ2UoMSwgMjU3KSkgKyBbNTEyLCAxMDAwLCAxMDI0LCAyMDQ4LCA0MDk2LCA4MTkyLCAxMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Mzg0LCAzMjc2OCwgNjU1MzYsIDEwMDAwMDBdCiAKIGNsYXNzIEJ1ZmZlclNpemVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdHJ5X29uZShzZWxmLCBzKToKQEAgLTE0LDI3ICsxNywyNyBAQAogICAgICAgICAjIC5yZWFkbGluZSgpcyBkZWxpdmVyIHdoYXQgd2Ugd3JvdGUuCiAKICAgICAgICAgIyBFbnN1cmUgd2UgY2FuIG9wZW4gVEVTVEZOIGZvciB3cml0aW5nLgotICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgICAgICMgU2luY2UgQyBkb2Vzbid0IGd1YXJhbnRlZSB3ZSBjYW4gd3JpdGUvcmVhZCBhcmJpdHJhcnkgYnl0ZXMgaW4gdGV4dAogICAgICAgICAjIGZpbGVzLCB1c2UgYmluYXJ5IG1vZGUuCi0gICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgd3JpdGUgb25jZSB3aXRoIFxuIGFuZCBvbmNlIHdpdGhvdXQKICAgICAgICAgICAgIGYud3JpdGUocykKLSAgICAgICAgICAgIGYud3JpdGUoIlxuIikKKyAgICAgICAgICAgIGYud3JpdGUoYiJcbiIpCiAgICAgICAgICAgICBmLndyaXRlKHMpCiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCisgICAgICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikKICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgcyArICJcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIHMgKyBiIlxuIikKICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgcykKICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgbGluZSkgIyBNdXN0IGJlIGF0IEVPRgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBsaW5lKSAjIE11c3QgYmUgYXQgRU9GCiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIGRyaXZlX29uZShzZWxmLCBwYXR0ZXJuKToKICAgICAgICAgZm9yIGxlbmd0aCBpbiBsZW5ndGhzOgpAQCAtNDcsMTkgKzUwLDMwIEBACiAgICAgICAgICAgICB0ZXN0c3RyaW5nID0gcGF0dGVybiAqIHEgKyBwYXR0ZXJuWzpyXQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHN0cmluZyksIGxlbmd0aCkKICAgICAgICAgICAgIHNlbGYudHJ5X29uZSh0ZXN0c3RyaW5nKQotICAgICAgICAgICAgc2VsZi50cnlfb25lKHRlc3RzdHJpbmcgKyAieCIpCisgICAgICAgICAgICBzZWxmLnRyeV9vbmUodGVzdHN0cmluZyArIGIieCIpCiAgICAgICAgICAgICBzZWxmLnRyeV9vbmUodGVzdHN0cmluZ1s6LTFdKQogCiAgICAgZGVmIHRlc3RfcHJpbWVwYXQoc2VsZik6CiAgICAgICAgICMgQSBwYXR0ZXJuIHdpdGggcHJpbWUgbGVuZ3RoLCB0byBhdm9pZCBzaW1wbGUgcmVsYXRpb25zaGlwcyB3aXRoCiAgICAgICAgICMgc3RkaW8gYnVmZmVyIHNpemVzLgotICAgICAgICBzZWxmLmRyaXZlX29uZSgiMTIzNDU2Nzg5MFwwMFwwMVwwMlwwM1wwNFwwNVwwNiIpCisgICAgICAgIHNlbGYuZHJpdmVfb25lKGIiMTIzNDU2Nzg5MFwwMFwwMVwwMlwwM1wwNFwwNVwwNiIpCiAKICAgICBkZWYgdGVzdF9udWxscGF0KHNlbGYpOgotICAgICAgICBzZWxmLmRyaXZlX29uZSgiXDAiICogMTAwMCkKKyAgICAgICAgc2VsZi5kcml2ZV9vbmUoYnl0ZXMoMTAwMCkpCisKKworY2xhc3MgQ0J1ZmZlclNpemVUZXN0KEJ1ZmZlclNpemVUZXN0KToKKyAgICBvcGVuID0gaW8ub3BlbgorCitjbGFzcyBQeUJ1ZmZlclNpemVUZXN0KEJ1ZmZlclNpemVUZXN0KToKKyAgICBvcGVuID0gc3RhdGljbWV0aG9kKHB5aW8ub3BlbikKKworY2xhc3MgQnVpbHRpbkJ1ZmZlclNpemVUZXN0KEJ1ZmZlclNpemVUZXN0KToKKyAgICBvcGVuID0gb3BlbgorCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEJ1ZmZlclNpemVUZXN0KQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KENCdWZmZXJTaXplVGVzdCwgUHlCdWZmZXJTaXplVGVzdCwgQnVpbHRpbkJ1ZmZlclNpemVUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkgYi9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKaW5kZXggOTQwMWY2NS4uZDhmYjJkNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQpAQCAtMiwxMiArMiwxMyBAQAogCiBpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmNtcCwgaGF2ZV91bmljb2RlLCBURVNURk4sIHVubGluaywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3VuaXR0ZXN0LCBjaGVja19weTNrX3dhcm5pbmdzCiBpbXBvcnQgd2FybmluZ3MKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChmY21wLCBoYXZlX3VuaWNvZGUsIFRFU1RGTiwgdW5saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3VuaXR0ZXN0LCBfY2hlY2tfcHkza193YXJuaW5ncywgY2hlY2tfd2FybmluZ3MpCiBmcm9tIG9wZXJhdG9yIGltcG9ydCBuZWcKIAogaW1wb3J0IHN5cywgY1N0cmluZ0lPLCByYW5kb20sIFVzZXJEaWN0CisKICMgY291bnQgdGhlIG51bWJlciBvZiB0ZXN0IHJ1bnMuCiAjIHVzZWQgdG8gc2tpcCBydW5uaW5nIHRlc3RfZXhlY2ZpbGUoKSBtdWx0aXBsZSB0aW1lcwogIyBhbmQgdG8gY3JlYXRlIHVuaXF1ZSBzdHJpbmdzIHRvIGludGVybiBpbiB0ZXN0X2ludGVybigpCkBAIC04OSw2ICs5MCwxNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicygtMTIzNEwpLCAxMjM0TCkKICAgICAgICAgIyBzdHIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhYnMsICdhJykKKyAgICAgICAgIyBib29sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKFRydWUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhGYWxzZSksIDApCisgICAgICAgICMgb3RoZXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhYnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYWJzLCBOb25lKQorICAgICAgICBjbGFzcyBBYnNDbGFzcyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fYWJzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIC01CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKEFic0NsYXNzKCkpLCAtNSkKIAogICAgIGRlZiB0ZXN0X2FsbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGwoWzIsIDQsIDZdKSwgVHJ1ZSkKQEAgLTEyMCw3ICsxMzEsNyBAQAogCiAgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgogICAgICAgICB4ID0gLXN5cy5tYXhpbnQtMQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh4LCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh4LCBpbnQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC14LCBzeXMubWF4aW50KzEpCiAKICAgICBkZWYgdGVzdF9hcHBseShzZWxmKToKQEAgLTE1MCwyMCArMTYxLDQ1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXBwbHksIGlkLCAoNDIsKSwgNDIpCiAKICAgICBkZWYgdGVzdF9jYWxsYWJsZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNhbGxhYmxlKGxlbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShsZW4pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxhYmxlKCJhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShjYWxsYWJsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShsYW1iZGEgeCwgeTogeCArIHkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxhYmxlKF9fYnVpbHRpbnNfXykpCiAgICAgICAgIGRlZiBmKCk6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNhbGxhYmxlKGYpKQotICAgICAgICBjbGFzcyBDOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoZikpCisKKyAgICAgICAgY2xhc3MgQ2xhc3NpYzoKICAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjYWxsYWJsZShDKSkKLSAgICAgICAgeCA9IEMoKQotICAgICAgICBzZWxmLmFzc2VydF8oY2FsbGFibGUoeC5tZXRoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjYWxsYWJsZSh4KSkKLSAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKENsYXNzaWMpKQorICAgICAgICBjID0gQ2xhc3NpYygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShjLm1ldGgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxhYmxlKGMpKQorCisgICAgICAgIGNsYXNzIE5ld1N0eWxlKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgbWV0aChzZWxmKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoTmV3U3R5bGUpKQorICAgICAgICBuID0gTmV3U3R5bGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUobi5tZXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShuKSkKKworICAgICAgICAjIENsYXNzaWMgYW5kIG5ldy1zdHlsZSBjbGFzc2VzIGV2YWx1YXRlIF9fY2FsbF9fKCkgZGlmZmVyZW50bHkKKyAgICAgICAgYy5fX2NhbGxfXyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGMpKQorICAgICAgICBkZWwgYy5fX2NhbGxfXworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxhYmxlKGMpKQorICAgICAgICBuLl9fY2FsbF9fID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxhYmxlKG4pKQorICAgICAgICBkZWwgbi5fX2NhbGxfXworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxhYmxlKG4pKQorCisgICAgICAgIGNsYXNzIE4yKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZik6IHBhc3MKLSAgICAgICAgeSA9IEQoKQotICAgICAgICBzZWxmLmFzc2VydF8oY2FsbGFibGUoeSkpCi0gICAgICAgIHkoKQorICAgICAgICBuMiA9IE4yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKG4yKSkKKyAgICAgICAgY2xhc3MgTjMoTjIpOiBwYXNzCisgICAgICAgIG4zID0gTjMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUobjMpKQogCiAgICAgZGVmIHRlc3RfY2hyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNocigzMiksICcgJykKQEAgLTE5MSw5ICsyMjcsOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCkKIAogICAgIGRlZiB0ZXN0X2NvZXJjZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBmY21wKGNvZXJjZSgxLCAxLjEpLCAoMS4wLCAxLjEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmY21wKGNvZXJjZSgxLCAxLjEpLCAoMS4wLCAxLjEpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2VyY2UoMSwgMUwpLCAoMUwsIDFMKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBmY21wKGNvZXJjZSgxTCwgMS4xKSwgKDEuMCwgMS4xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZmNtcChjb2VyY2UoMUwsIDEuMSksICgxLjAsIDEuMSkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZXJjZSkKICAgICAgICAgY2xhc3MgQmFkTnVtYmVyOgogICAgICAgICAgICAgZGVmIF9fY29lcmNlX18oc2VsZiwgb3RoZXIpOgpAQCAtMjMyLDExICsyNjgsMTEgQEAKIAogICAgICAgICAjIGRpcigpIC0gbG9jYWwgc2NvcGUKICAgICAgICAgbG9jYWxfdmFyID0gMQotICAgICAgICBzZWxmLmFzc2VydF8oJ2xvY2FsX3ZhcicgaW4gZGlyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xvY2FsX3ZhcicsIGRpcigpKQogCiAgICAgICAgICMgZGlyKG1vZHVsZSkKICAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBzZWxmLmFzc2VydF8oJ2V4aXQnIGluIGRpcihzeXMpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdleGl0JywgZGlyKHN5cykpCiAKICAgICAgICAgIyBkaXIobW9kdWxlX3dpdGhfaW52YWxpZF9fZGljdF9fKQogICAgICAgICBpbXBvcnQgdHlwZXMKQEAgLTI0Niw4ICsyODIsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpciwgZikKIAogICAgICAgICAjIGRpcih0eXBlKQotICAgICAgICBzZWxmLmFzc2VydF8oInN0cmlwIiBpbiBkaXIoc3RyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJfX21yb19fIiBub3QgaW4gZGlyKHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmlwIiwgZGlyKHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIl9fbXJvX18iLCBkaXIoc3RyKSkKIAogICAgICAgICAjIGRpcihvYmopCiAgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgpAQCAtMjU2LDEzICsyOTIsMTMgQEAKICAgICAgICAgICAgICAgICBzZWxmLnkgPSA4CiAgICAgICAgICAgICAgICAgc2VsZi56ID0gOQogICAgICAgICBmID0gRm9vKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJ5IiBpbiBkaXIoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInkiLCBkaXIoZikpCiAKICAgICAgICAgIyBkaXIob2JqX25vX19kaWN0X18pCiAgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgogICAgICAgICAgICAgX19zbG90c19fID0gW10KICAgICAgICAgZiA9IEZvbygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiX19yZXByX18iIGluIGRpcihmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX19yZXByX18iLCBkaXIoZikpCiAKICAgICAgICAgIyBkaXIob2JqX25vX19jbGFzc19fd2l0aF9fZGljdF9fKQogICAgICAgICAjIChhbiB1Z2x5IHRyaWNrIHRvIGNhdXNlIGdldGF0dHIoZiwgIl9fY2xhc3NfXyIpIHRvIGZhaWwpCkBAIC0yNzEsMTUgKzMwNywxNSBAQAogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHNlbGYuYmFyID0gIndvdyIKICAgICAgICAgZiA9IEZvbygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiX19yZXByX18iIG5vdCBpbiBkaXIoZikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiYmFyIiBpbiBkaXIoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIl9fcmVwcl9fIiwgZGlyKGYpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJiYXIiLCBkaXIoZikpCiAKICAgICAgICAgIyBkaXIob2JqX3VzaW5nIF9fZGlyX18pCiAgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fZGlyX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFsia2FuIiwgImdhIiwgInJvbyJdCiAgICAgICAgIGYgPSBGb28oKQotICAgICAgICBzZWxmLmFzc2VydF8oZGlyKGYpID09IFsiZ2EiLCAia2FuIiwgInJvbyJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlyKGYpID09IFsiZ2EiLCAia2FuIiwgInJvbyJdKQogCiAgICAgICAgICMgZGlyKG9ial9fZGlyX19ub3RfbGlzdCkKICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CkBAIC0zMDcsMTAgKzM0MywxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgtc3lzLm1heGludC0xLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5cy5tYXhpbnQrMSwgMCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBmY21wKGRpdm1vZCgzLjI1LCAxLjApLCAoMy4wLCAwLjI1KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZmNtcChkaXZtb2QoLTMuMjUsIDEuMCksICgtNC4wLCAwLjc1KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZmNtcChkaXZtb2QoMy4yNSwgLTEuMCksICgtNC4wLCAtMC43NSkpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGZjbXAoZGl2bW9kKC0zLjI1LCAtMS4wKSwgKDMuMCwgLTAuMjUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmY21wKGRpdm1vZCgzLjI1LCAxLjApLCAoMy4wLCAwLjI1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZmNtcChkaXZtb2QoLTMuMjUsIDEuMCksICgtNC4wLCAwLjc1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZmNtcChkaXZtb2QoMy4yNSwgLTEuMCksICgtNC4wLCAtMC43NSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZjbXAoZGl2bW9kKC0zLjI1LCAtMS4wKSwgKDMuMCwgLTAuMjUpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpdm1vZCkKIApAQCAtNDE1LDcgKzQ1MSw3IEBACiAgICAgZi53cml0ZSgneiA9IHorMVxuJykKICAgICBmLndyaXRlKCd6ID0geioyXG4nKQogICAgIGYuY2xvc2UoKQotICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoKCJleGVjZmlsZS4uIG5vdCBzdXBwb3J0ZWQgaW4gMy54IiwKKyAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKCJleGVjZmlsZS4uIG5vdCBzdXBwb3J0ZWQgaW4gMy54IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICBleGVjZmlsZShURVNURk4pCiAKQEAgLTU3MSwxMSArNjA3LDExIEBACiAgICAgICAgICAgICAgICAgZm9yIGZ1bmMgaW4gZnVuY3M6CiAgICAgICAgICAgICAgICAgICAgIG91dHAgPSBmaWx0ZXIoZnVuYywgY2xzKGlucCkpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cCwgZXhwKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzaW5zdGFuY2Uob3V0cCwgY2xzKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc2luc3RhbmNlKG91dHAsIGNscykpCiAKICAgICBkZWYgdGVzdF9nZXRhdHRyKHNlbGYpOgogICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhnZXRhdHRyKHN5cywgJ3N0ZG91dCcpIGlzIHN5cy5zdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHN5cywgJ3N0ZG91dCcpIGlzIHN5cy5zdGRvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0ciwgc3lzLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIsIHN5cywgMSwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0cikKQEAgLTU4NCw3ICs2MjAsNyBAQAogCiAgICAgZGVmIHRlc3RfaGFzYXR0cihzZWxmKToKICAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihzeXMsICdzdGRvdXQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLCAnc3Rkb3V0JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzYXR0ciwgc3lzLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2F0dHIpCiAgICAgICAgIGlmIGhhdmVfdW5pY29kZToKQEAgLTYxNSwxNSArNjUxLDE1IEBACiAgICAgICAgIGNsYXNzIFg6CiAgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDIqKjEwMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0eXBlKGhhc2goWCgpKSksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGhhc2goWCgpKSksIGludCkKICAgICAgICAgY2xhc3MgWShvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiAyKioxMDAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHlwZShoYXNoKFkoKSkpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShoYXNoKFkoKSkpLCBpbnQpCiAgICAgICAgIGNsYXNzIFoobG9uZyk6CiAgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGFzaChaKDQyKSksIGhhc2goNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKFooNDIpKSwgaGFzaCg0MkwpKQogCiAgICAgZGVmIHRlc3RfaGV4KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleCgxNiksICcweDEwJykKQEAgLTY0OSw5ICs2ODUsOSBAQAogICAgICAgICAjIFRoaXMgZmFpbHMgaWYgdGhlIHRlc3QgaXMgcnVuIHR3aWNlIHdpdGggYSBjb25zdGFudCBzdHJpbmcsCiAgICAgICAgICMgdGhlcmVmb3JlIGFwcGVuZCB0aGUgcnVuIGNvdW50ZXIKICAgICAgICAgcyA9ICJuZXZlciBpbnRlcm5lZCBiZWZvcmUgIiArIHN0cihudW1ydW5zKQotICAgICAgICBzZWxmLmFzc2VydF8oaW50ZXJuKHMpIGlzIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnRlcm4ocykgaXMgcykKICAgICAgICAgczIgPSBzLnN3YXBjYXNlKCkuc3dhcGNhc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8oaW50ZXJuKHMyKSBpcyBzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJuKHMyKSBpcyBzKQogCiAgICAgICAgICMgU3ViY2xhc3NlcyBvZiBzdHJpbmcgY2FuJ3QgYmUgaW50ZXJuZWQsIGJlY2F1c2UgdGhleQogICAgICAgICAjIHByb3ZpZGUgdG9vIG11Y2ggb3Bwb3J0dW5pdHkgZm9yIGluc2FuZSB0aGluZ3MgdG8gaGFwcGVuLgpAQCAtNjkyLDExICs3MjgsMTEgQEAKICAgICAgICAgYyA9IEMoKQogICAgICAgICBkID0gRCgpCiAgICAgICAgIGUgPSBFKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYywgQykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGQsIEMpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzaW5zdGFuY2UoZSwgQykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNpbnN0YW5jZShjLCBEKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc2luc3RhbmNlKCdmb28nLCBFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYywgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGQsIEMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzaW5zdGFuY2UoZSwgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNpbnN0YW5jZShjLCBEKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc2luc3RhbmNlKCdmb28nLCBFKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc2luc3RhbmNlLCBFLCAnZm9vJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc2luc3RhbmNlKQogCkBAIC03MTAsOSArNzQ2LDkgQEAKICAgICAgICAgYyA9IEMoKQogICAgICAgICBkID0gRCgpCiAgICAgICAgIGUgPSBFKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzc3ViY2xhc3MoRCwgQykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKEMsIEMpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzc3ViY2xhc3MoQywgRCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEQsIEMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBDKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc3N1YmNsYXNzKEMsIEQpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlzc3ViY2xhc3MsICdmb28nLCBFKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlzc3ViY2xhc3MsIEUsICdmb28nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlzc3ViY2xhc3MpCkBAIC03MjgsNiArNzY0LDExIEBACiAgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxlbiwgQmFkU2VxKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCAyKQorICAgICAgICBjbGFzcyBDbGFzc2ljU3R5bGU6IHBhc3MKKyAgICAgICAgY2xhc3MgTmV3U3R5bGUob2JqZWN0KTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgbGVuLCBDbGFzc2ljU3R5bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIE5ld1N0eWxlKCkpCiAKICAgICBkZWYgdGVzdF9tYXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCkBAIC04ODksNyArOTMwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXh0KGl0LCA0MiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQsIDQyKSwgNDIpCiAKICAgICAgICAgY2xhc3MgSXRlcihvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgpAQCAtODk4LDcgKzkzOSw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogCiAgICAgICAgIGl0ID0gaXRlcihJdGVyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5leHQoaXQsIDQyKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCwgNDIpLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCiAKICAgICAgICAgZGVmIGdlbigpOgpAQCAtOTA2LDkgKzk0Nyw5IEBACiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBpdCA9IGdlbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5leHQoaXQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV4dChpdCwgNDIpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0LCA0MiksIDQyKQogCiAgICAgZGVmIHRlc3Rfb2N0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgxMDApLCAnMDE0NCcpCkBAIC0xMDQ0LDE4ICsxMDg1LDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoYSs0LCBhLCAtMiksIFthKzQsIGErMl0pCiAKICAgICAgICAgc2VxID0gcmFuZ2UoYSwgYiwgYykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgaW4gc2VxKQotICAgICAgICBzZWxmLmFzc2VydF8oYiBub3QgaW4gc2VxKQorICAgICAgICBzZWxmLmFzc2VydEluKGEsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiLCBzZXEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCiAKICAgICAgICAgc2VxID0gcmFuZ2UoYiwgYSwgLWMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhiIGluIHNlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgbm90IGluIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYSwgc2VxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQogCiAgICAgICAgIHNlcSA9IHJhbmdlKC1hLCAtYiwgLWMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtYSBpbiBzZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtYiBub3QgaW4gc2VxKQorICAgICAgICBzZWxmLmFzc2VydEluKC1hLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLWIsIHNlcSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VxKSwgMikKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlKQpAQCAtMTA2OSwxNCArMTExMCw5IEBACiAgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBJbnZhbGlkIGNtcCBtYWtlcyB0aGlzIHVuaGFzaGFibGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCByYW5nZSwgYSwgYSArIDEsIGJhZHplcm8oMSkpCiAKLSAgICAgICAgIyBSZWplY3QgZmxvYXRzIHdoZW4gaXQgd291bGQgcmVxdWlyZSBQeUxvbmdzIHRvIHJlcHJlc2VudC4KLSAgICAgICAgIyAoc21hbGxlciBmbG9hdHMgc3RpbGwgYWNjZXB0ZWQsIGJ1dCBkZXByZWNhdGVkKQotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKLSAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDFlMTAwLCAxZTEwMSwgMWUxMDEpCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgxLjApLCBbMF0pCisgICAgICAgICMgUmVqZWN0IGZsb2F0cy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMS4sIDEuLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMWUxMDAsIDFlMTAxLCAxZTEwMSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAic3BhbSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDQyLCAic3BhbSIpCkBAIC0xMTE4LDIwICsxMTU0LDIxIEBACiAKICAgICAgICAgIyBFeGVyY2lzZSB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBiYWQgYXJndW1lbnRzLCB0byBjaGVjawogICAgICAgICAjIHJlZmNvdW50aW5nIGxvZ2ljCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDFlMTAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjApCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDFlMTAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMWUxMDAsIDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAxZTEwMCwgMWUxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDAuMCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgMCwgMWUxMDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAxZTEwMCwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDFlMTAwLCAxZTEwMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDFlMTAwLCAwLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMWUxMDAsIDAsIDFlMTAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMWUxMDAsIDFlMTAwLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMWUxMDAsIDFlMTAwLCAxZTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAwLjAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDAuMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAuMCwgMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDAuMCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwLjAsIDEuMCkKKworCiAKICAgICBkZWYgdGVzdF9pbnB1dF9hbmRfcmF3X2lucHV0KHNlbGYpOgogICAgICAgICBzZWxmLndyaXRlX3Rlc3RmaWxlKCkKQEAgLTExOTEsOSArMTIyOCwxMCBAQAogICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKIAogICAgIGRlZiB0ZXN0X3JlZHVjZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UobGFtYmRhIHgsIHk6IHgreSwgWydhJywgJ2InLCAnYyddLCAnJyksICdhYmMnKQorICAgICAgICBhZGQgPSBsYW1iZGEgeCwgeTogeCt5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgWydhJywgJ2InLCAnYyddLCAnJyksICdhYmMnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcmVkdWNlKGxhbWJkYSB4LCB5OiB4K3ksIFtbJ2EnLCAnYyddLCBbXSwgWydkJywgJ3cnXV0sIFtdKSwKKyAgICAgICAgICAgIHJlZHVjZShhZGQsIFtbJ2EnLCAnYyddLCBbXSwgWydkJywgJ3cnXV0sIFtdKSwKICAgICAgICAgICAgIFsnYScsJ2MnLCdkJywndyddCiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UobGFtYmRhIHgsIHk6IHgqeSwgcmFuZ2UoMiw4KSwgMSksIDUwNDApCkBAIC0xMjAxLDE1ICsxMjM5LDIzIEBACiAgICAgICAgICAgICByZWR1Y2UobGFtYmRhIHgsIHk6IHgqeSwgcmFuZ2UoMiwyMSksIDFMKSwKICAgICAgICAgICAgIDI0MzI5MDIwMDgxNzY2NDAwMDBMCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UobGFtYmRhIHgsIHk6IHgreSwgU3F1YXJlcygxMCkpLCAyODUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGxhbWJkYSB4LCB5OiB4K3ksIFNxdWFyZXMoMTApLCAwKSwgMjg1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShsYW1iZGEgeCwgeTogeCt5LCBTcXVhcmVzKDApLCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBTcXVhcmVzKDEwKSksIDI4NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBTcXVhcmVzKDEwKSwgMCksIDI4NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBTcXVhcmVzKDApLCAwKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIDQyLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIDQyLCA0MiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCBOb25lLCByYW5nZSg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIGFkZCwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKDQyLCAiMSIpLCAiMSIpICMgZnVuYyBpcyBuZXZlciBjYWxsZWQgd2l0aCBvbmUgaXRlbQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZSg0MiwgIiIsICIxIiksICIxIikgIyBmdW5jIGlzIG5ldmVyIGNhbGxlZCB3aXRoIG9uZSBpdGVtCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCA0MiwgKDQyLCA0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCBhZGQsIFtdKSAjIGFyZyAyIG11c3Qgbm90IGJlIGVtcHR5IHNlcXVlbmNlIHdpdGggbm8gaW5pdGlhbCB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgYWRkLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIGFkZCwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgW10sIE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFtdLCA0MiksIDQyKQogCiAgICAgICAgIGNsYXNzIEJhZFNlcToKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CkBAIC0xMzEyLDYgKzEzNTgsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgdCwgMCkKIAorICAgICMgU29tZSB2ZXJzaW9ucyBvZiBnbGliYyBmb3IgYWxwaGEgaGF2ZSBhIGJ1ZyB0aGF0IGFmZmVjdHMKKyAgICAjIGZsb2F0IC0+IGludGVnZXIgcm91bmRpbmcgKGZsb29yLCBjZWlsLCByaW50LCByb3VuZCkgZm9yCisgICAgIyB2YWx1ZXMgaW4gdGhlIHJhbmdlIFsyKio1MiwgMioqNTMpLiAgU2VlOgorICAgICMKKyAgICAjICAgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTM1MAorICAgICMKKyAgICAjIFdlIHNraXAgdGhpcyB0ZXN0IG9uIExpbnV4L2FscGhhIGlmIGl0IHdvdWxkIGZhaWwuCisgICAgbGludXhfYWxwaGEgPSAocGxhdGZvcm0uc3lzdGVtKCkuc3RhcnRzd2l0aCgnTGludXgnKSBhbmQKKyAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS5tYWNoaW5lKCkuc3RhcnRzd2l0aCgnYWxwaGEnKSkKKyAgICBzeXN0ZW1fcm91bmRfYnVnID0gcm91bmQoNWUxNSsxKSAhPSA1ZTE1KzEKKyAgICBAdW5pdHRlc3Quc2tpcElmKGxpbnV4X2FscGhhIGFuZCBzeXN0ZW1fcm91bmRfYnVnLAorICAgICAgICAgICAgICAgICAgICAgInRlc3Qgd2lsbCBmYWlsOyAgZmFpbHVyZSBpcyBwcm9iYWJseSBkdWUgdG8gYSAiCisgICAgICAgICAgICAgICAgICAgICAiYnVnZ3kgc3lzdGVtIHJvdW5kIGZ1bmN0aW9uIikKICAgICBkZWYgdGVzdF9yb3VuZF9sYXJnZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTg2OTogaW50ZWdyYWwgZmxvYXRzIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNWUxNS0xKSwgNWUxNS0xKQpAQCAtMTM0Nyw2ICsxNDA2LDEwIEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdW0sIEJhZFNlcSgpKQogCisgICAgICAgIGVtcHR5ID0gW10KKyAgICAgICAgc3VtKChbeF0gZm9yIHggaW4gcmFuZ2UoMTApKSwgZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW1wdHksIFtdKQorCiAgICAgZGVmIHRlc3RfdHlwZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKCcnKSwgIHR5cGUoJzEyMycpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHR5cGUoJycpLCB0eXBlKCgpKSkKQEAgLTEzNzcsNiArMTQ0MCwxMSBAQAogICAgICAgICBiID0gMgogICAgICAgICByZXR1cm4gdmFycygpCiAKKyAgICBjbGFzcyBDX2dldF92YXJzKG9iamVjdCk6CisgICAgICAgIGRlZiBnZXREaWN0KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHsnYSc6Mn0KKyAgICAgICAgX19kaWN0X18gPSBwcm9wZXJ0eShmZ2V0PWdldERpY3QpCisKICAgICBkZWYgdGVzdF92YXJzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCh2YXJzKCkpLCBzZXQoZGlyKCkpKQogICAgICAgICBpbXBvcnQgc3lzCkBAIC0xMzg1LDYgKzE0NTMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X3ZhcnNfZjIoKSwgeydhJzogMSwgJ2InOiAyfSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB2YXJzLCA0MiwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdmFycywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFycyhzZWxmLkNfZ2V0X3ZhcnMoKSksIHsnYSc6Mn0pCiAKICAgICBkZWYgdGVzdF96aXAoc2VsZik6CiAgICAgICAgIGEgPSAoMSwgMiwgMykKQEAgLTE1MTMsMTMgKzE1ODIsNDggQEAKICAgICAgICAgIyB0ZXN0cyBmb3Igb2JqZWN0Ll9fZm9ybWF0X18gcmVhbGx5IGJlbG9uZyBlbHNld2hlcmUsIGJ1dAogICAgICAgICAjICB0aGVyZSdzIG5vIGdvb2QgcGxhY2UgdG8gcHV0IHRoZW0KICAgICAgICAgeCA9IG9iamVjdCgpLl9fZm9ybWF0X18oJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4LnN0YXJ0c3dpdGgoJzxvYmplY3Qgb2JqZWN0IGF0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LnN0YXJ0c3dpdGgoJzxvYmplY3Qgb2JqZWN0IGF0JykpCiAKICAgICAgICAgIyBmaXJzdCBhcmd1bWVudCB0byBvYmplY3QuX19mb3JtYXRfXyBtdXN0IGJlIHN0cmluZwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9iamVjdCgpLl9fZm9ybWF0X18sIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb2JqZWN0KCkuX19mb3JtYXRfXywgb2JqZWN0KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb2JqZWN0KCkuX19mb3JtYXRfXywgTm9uZSkKIAorICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgSXNzdWUgIzc5OTQ6IG9iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0IHN0cmluZyBpcworICAgICAgICAjICBwZW5kaW5nIGRlcHJlY2F0ZWQKKyAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlX3dhcm5pbmcpOgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgZm9ybWF0KG9iaiwgZm10X3N0cikKKyAgICAgICAgICAgIGlmIHNob3VsZF9yYWlzZV93YXJuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3WzBdLm1lc3NhZ2UsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsIHN0cih3WzBdLm1lc3NhZ2UpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKworICAgICAgICBmbXRfc3RycyA9IFsnJywgJ3MnLCB1JycsIHUncyddCisKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZtdF9zdHIpOgorICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQoJycsIGZtdF9zdHIpCisKKyAgICAgICAgZm9yIGZtdF9zdHIgaW4gZm10X3N0cnM6CisgICAgICAgICAgICB0ZXN0X2RlcHJlY2F0ZWRfZm9ybWF0X3N0cmluZyhBKCksIGZtdF9zdHIsIEZhbHNlKQorCisgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZvciBjbHMgaW4gW29iamVjdCwgQiwgQ106CisgICAgICAgICAgICBmb3IgZm10X3N0ciBpbiBmbXRfc3RyczoKKyAgICAgICAgICAgICAgICB0ZXN0X2RlcHJlY2F0ZWRfZm9ybWF0X3N0cmluZyhjbHMoKSwgZm10X3N0ciwgbGVuKGZtdF9zdHIpICE9IDApCisgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBjYW4gdGFrZSBhIHN1YmNsYXNzIG9mIHN0ciBhcyBhIGZvcm1hdCBzcGVjCiAgICAgICAgIGNsYXNzIERlcml2ZWRGcm9tU3RyKHN0cik6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMCwgRGVyaXZlZEZyb21TdHIoJzEwJykpLCAnICAgICAgICAgMCcpCkBAIC0xNTc4LDEzICsxNjgyLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ydGVkLCBkYXRhLCBOb25lLCBsYW1iZGEgeCx5OiAwKQogCiBkZWYgX3J1bl91bml0dGVzdCgqYXJncyk6Ci0gICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygKKyAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoCiAgICAgICAgICAgICAoIi4rIG5vdCBzdXBwb3J0ZWQgaW4gMy54IiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKICAgICAgICAgICAgICgiLisgaXMgcmVuYW1lZCB0byBpbXAucmVsb2FkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKICAgICAgICAgICAgICgiY2xhc3NpYyBpbnQgZGl2aXNpb24iLCBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgcnVuX3VuaXR0ZXN0KCphcmdzKQogCi0KIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICB0ZXN0X2NsYXNzZXMgPSAoQnVpbHRpblRlc3QsIFRlc3RTb3J0ZWQpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkgYi9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CmluZGV4IGE2OTlkOTEuLjIwMjZjZGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQpAQCAtOSwxNCArOSwyOCBAQAogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBpbXBvcnQgY29weQoraW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CiBpbXBvcnQgdGVzdC5zdHJpbmdfdGVzdHMKIGltcG9ydCB0ZXN0LmJ1ZmZlcl90ZXN0cwogCisKK2lmIHN5cy5mbGFncy5ieXRlc193YXJuaW5nOgorICAgIGRlZiBjaGVja19ieXRlc193YXJuaW5ncyhmdW5jKToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6CisgICAgICAgICAgICB3aXRoIHRlc3QudGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgQnl0ZXNXYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgICAgIHJldHVybiB3cmFwcGVyCitlbHNlOgorICAgICMgbm8tb3AKKyAgICBkZWYgY2hlY2tfYnl0ZXNfd2FybmluZ3MoZnVuYyk6CisgICAgICAgIHJldHVybiBmdW5jCisKKwogY2xhc3MgSW5kZXhhYmxlOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0wKToKICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCkBAIC0yNiwxMiArNDAsNiBAQAogCiBjbGFzcyBCYXNlQnl0ZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi53YXJuaW5nX2ZpbHRlcnMgPSB3YXJuaW5ncy5maWx0ZXJzWzpdCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHdhcm5pbmdzLmZpbHRlcnMgPSBzZWxmLndhcm5pbmdfZmlsdGVycwotCiAgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgogICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYiksIHNlbGYudHlwZTJ0ZXN0KQpAQCAtNzksNyArODcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCAwLjApCiAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgICMgYWxsb3dlZCBpbiAyLjYKKyAgICAgICAgIyBhbGxvd2VkIGluIDIueAogICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgWyIwIl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFswLjBdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbTm9uZV0pCkBAIC0xMDMsMjUgKzExMSwyNSBAQAogICAgICAgICBiMyA9IHNlbGYudHlwZTJ0ZXN0KFsxLCAzXSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIxLCBiMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGIyICE9IGIzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYjEgPD0gYjIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiMSA8PSBiMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGIxIDwgIGIzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYjEgPj0gYjIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiMyA+PSBiMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGIzID4gIGIyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYjIgIT0gYjMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiMSA8PSBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIxIDw9IGIzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYjEgPCAgYjMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiMSA+PSBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIzID49IGIyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYjMgPiAgYjIpCiAKLSAgICAgICAgc2VsZi5mYWlsSWYoYjEgIT0gYjIpCi0gICAgICAgIHNlbGYuZmFpbElmKGIyID09IGIzKQotICAgICAgICBzZWxmLmZhaWxJZihiMSA+ICBiMikKLSAgICAgICAgc2VsZi5mYWlsSWYoYjEgPiAgYjMpCi0gICAgICAgIHNlbGYuZmFpbElmKGIxID49IGIzKQotICAgICAgICBzZWxmLmZhaWxJZihiMSA8ICBiMikKLSAgICAgICAgc2VsZi5mYWlsSWYoYjMgPCAgYjIpCi0gICAgICAgIHNlbGYuZmFpbElmKGIzIDw9IGIyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIxICE9IGIyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIyID09IGIzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIxID4gIGIyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIxID4gIGIzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIxID49IGIzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIxIDwgIGIyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIzIDwgIGIyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIzIDw9IGIyKQogCisgICAgQGNoZWNrX2J5dGVzX3dhcm5pbmdzCiAgICAgZGVmIHRlc3RfY29tcGFyZV90b19zdHIoc2VsZik6Ci0gICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgQnl0ZXNXYXJuaW5nKQogICAgICAgICAjIEJ5dGUgY29tcGFyaXNvbnMgd2l0aCB1bmljb2RlIHNob3VsZCBhbHdheXMgZmFpbCEKICAgICAgICAgIyBUZXN0IHRoaXMgZm9yIGFsbCBleHBlY3RlZCBieXRlIG9yZGVycyBhbmQgVW5pY29kZSBjaGFyYWN0ZXIgc2l6ZXMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIlwwYVwwYlwwYyIpID09IHUiYWJjIiwgRmFsc2UpCkBAIC0xODcsNiArMTk1LDggQEAKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KHNhbXBsZSwgImxhdGluMSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgYi5kZWNvZGUsICJ1dGY4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmRlY29kZSgidXRmOCIsICJpZ25vcmUiKSwgIkhlbGxvIHdvcmxkXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZGVjb2RlKGVycm9ycz0iaWdub3JlIiwgZW5jb2Rpbmc9InV0ZjgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsbG8gd29ybGRcbiIpCiAKICAgICBkZWYgdGVzdF9mcm9tX2ludChzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KDApCkBAIC0yMjEsMzcgKzIzMSwzNSBAQAogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiImFiYyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcmQoJ2EnKSBpbiBiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW50KG9yZCgnYScpKSBpbiBiKQotICAgICAgICBzZWxmLmZhaWxJZigyMDAgaW4gYikKLSAgICAgICAgc2VsZi5mYWlsSWYoMjAwIGluIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3JkKCdhJyksIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW50KG9yZCgnYScpKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigyMDAsIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogMzAwIGluIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogLTEgaW4gYikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IE5vbmUgaW4gYikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGZsb2F0KG9yZCgnYScpKSBpbiBiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdSJhIiBpbiBiKQogICAgICAgICBmb3IgZiBpbiBieXRlcywgYnl0ZWFycmF5OgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYoYiIiKSBpbiBiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYoYiJhIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhmKGIiYiIpIGluIGIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZihiImMiKSBpbiBiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYoYiJhYiIpIGluIGIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZihiImJjIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhmKGIiYWJjIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGYoYiJhYyIpIGluIGIpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihmKGIiZCIpIGluIGIpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihmKGIiZGFiIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGYoYiJhYmQiKSBpbiBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmKGIiIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJhIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJiIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJjIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJhYiIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmKGIiYmMiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImFiYyIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmKGIiYWMiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZihiImQiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZihiImRhYiIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmKGIiYWJkIiksIGIpCiAKICAgICBkZWYgdGVzdF9mcm9taGV4KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QuZnJvbWhleCwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi50eXBlMnRlc3QuZnJvbWhleCh1JycpLCBzZWxmLnR5cGUydGVzdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScnKSwgc2VsZi50eXBlMnRlc3QoKSkKICAgICAgICAgYiA9IGJ5dGVhcnJheShbMHgxYSwgMHgyYiwgMHgzMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScxYTJCMzAnKSwgYikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi50eXBlMnRlc3QuZnJvbWhleCh1JyAgMUEgMkIgIDMwICAgJyksIGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScwMDAwJyksIGInXDBcMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QuZnJvbWhleCwgYicxQicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QuZnJvbWhleCh1JzFhMkIzMCcpLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScgIDFBIDJCICAzMCAgICcpLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScwMDAwJyksIGInXDBcMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgsIHUnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgsIHUncnQnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdC5mcm9taGV4LCB1JzFhIGIgY2QnKQpAQCAtMjY5LDEzICsyNzcsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiLiIpLmpvaW4oW2IiYWIiLCBiImNkIl0pLCBiImFiLmNkIikKICAgICAgICAgIyBYWFggbW9yZS4uLgogCi0gICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6Ci0gICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ3BhcnJvdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5pbmRleCgncCcpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuaW5kZXgoJ3JyJyksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5pbmRleCgndCcpLCA1KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGIuaW5kZXgoJ3cnKSkKLQogICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgogICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5jb3VudChiJ2knKSwgNCkKQEAgLTM2MSw2ICszNjIsMTAgQEAKICAgICBkZWYgdGVzdF9zcGxpdF9zdHJpbmdfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QoYidhIGInKS5zcGxpdCwgdScgJykKIAorICAgIGRlZiB0ZXN0X3NwbGl0X3VuaWNvZGV3aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYiJceDA5XHgwQVx4MEJceDBDXHgwRFx4MUNceDFEXHgxRVx4MUYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoKSwgW2InXHgxY1x4MWRceDFlXHgxZiddKQorCiAgICAgZGVmIHRlc3RfcnNwbGl0KHNlbGYpOgogICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3BsaXQoYidpJyksIFtiJ20nLCBiJ3NzJywgYidzcycsIGIncHAnLCBiJyddKQpAQCAtMzg0LDE4ICszODksMTggQEAKIAogICAgIGRlZiB0ZXN0X3JzcGxpdF91bmljb2Rld2hpdGVzcGFjZShzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIiXHgwOVx4MEFceDBCXHgwQ1x4MERceDFDXHgxRFx4MUVceDFGIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KCksIFtiJ1x4MWNceDFkXHgxZVx4MWYnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzcGxpdCgpLCBbYidceDFjXHgxZFx4MWVceDFmJ10pCiAKICAgICBkZWYgdGVzdF9wYXJ0aXRpb24oc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnBhcnRpdGlvbihiJ3NzJyksIChiJ21pJywgYidzcycsIGInaXNzaXBwaScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnBhcnRpdGlvbihiJ3cnKSwgKGInJywgYicnLCBiJ21pc3Npc3NpcHBpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5wYXJ0aXRpb24oYid3JyksIChiJ21pc3Npc3NpcHBpJywgYicnLCBiJycpKQogCiAgICAgZGVmIHRlc3RfcnBhcnRpdGlvbihzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnBhcnRpdGlvbihiJ3NzJyksIChiJ21pc3NpJywgYidzcycsIGInaXBwaScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnBhcnRpdGlvbihiJ2knKSwgKGInbWlzc2lzc2lwcCcsIGInaScsIGInJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ycGFydGl0aW9uKGIndycpLCAoYicnLCBiJycsIGInbWlzc2lzc2lwcGknKSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKQEAgLTQzNiw4ICs0NDEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubHN0cmlwKCksIGInYWJjIFx0XG5cclxmXHYnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnN0cmlwKCksIGInIFx0XG5cclxmXHZhYmMnKQogCi0gICAgZGVmIFhYWHRlc3Rfc3RyaXBfYnl0ZWFycmF5KHNlbGYpOgotICAgICAgICAjIFhYWCBtZW1vcnl2aWV3IG5vdCBhdmFpbGFibGUKKyAgICBkZWYgdGVzdF9zdHJpcF9ieXRlYXJyYXkoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYidhYmMnKS5zdHJpcChtZW1vcnl2aWV3KGInYWMnKSksIGInYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYidhYmMnKS5sc3RyaXAobWVtb3J5dmlldyhiJ2FjJykpLCBiJ2JjJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJ2FiYycpLnJzdHJpcChtZW1vcnl2aWV3KGInYWMnKSksIGInYWInKQpAQCAtNTgzLDExICs1ODcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXZlcnNlKCkKICAgICAgICAgICAgICAgICAgICAgTFtzdGFydDpzdG9wOnN0ZXBdID0gZGF0YQogICAgICAgICAgICAgICAgICAgICBiW3N0YXJ0OnN0b3A6c3RlcF0gPSBkYXRhCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIsIGJ5dGVhcnJheShMKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoTCkpCiAKICAgICAgICAgICAgICAgICAgICAgZGVsIExbc3RhcnQ6c3RvcDpzdGVwXQogICAgICAgICAgICAgICAgICAgICBkZWwgYltzdGFydDpzdG9wOnN0ZXBdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIsIGJ5dGVhcnJheShMKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoTCkpCiAKICAgICBkZWYgdGVzdF9zZXRzbGljZV90cmFwKHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHdlIGNvcnJlY3RseSBoYW5kbGUgYXNzaWduaW5nIHNlbGYKQEAgLTYwMiw3ICs2MDYsNyBAQAogICAgICAgICBiICs9IGIiZGVmIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiYWJjZGVmIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGIgaXMgYjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIGlzIGIxKQogICAgICAgICBiICs9IGIieHl6IgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiYWJjZGVmeHl6IikKICAgICAgICAgdHJ5OgpAQCAtNjE4LDcgKzYyMiw3IEBACiAgICAgICAgIGIgKj0gMwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiYWJjYWJjYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGIgaXMgYjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIGlzIGIxKQogCiAgICAgZGVmIHRlc3RfaXJlcGVhdF8xY2hhcihzZWxmKToKICAgICAgICAgYiA9IGJ5dGVhcnJheShiIngiKQpAQCAtNjI2LDE3ICs2MzAsMTcgQEAKICAgICAgICAgYiAqPSAxMDAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIngiKjEwMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGIgaXMgYjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIGlzIGIxKQogCiAgICAgZGVmIHRlc3RfYWxsb2Moc2VsZik6CiAgICAgICAgIGIgPSBieXRlYXJyYXkoKQogICAgICAgICBhbGxvYyA9IGIuX19hbGxvY19fKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGFsbG9jID49IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGxvYyA+PSAwKQogICAgICAgICBzZXEgPSBbYWxsb2NdCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CiAgICAgICAgICAgICBiICs9IGIieCIKICAgICAgICAgICAgIGFsbG9jID0gYi5fX2FsbG9jX18oKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGFsbG9jID49IGxlbihiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGxvYyA+PSBsZW4oYikpCiAgICAgICAgICAgICBpZiBhbGxvYyBub3QgaW4gc2VxOgogICAgICAgICAgICAgICAgIHNlcS5hcHBlbmQoYWxsb2MpCiAKQEAgLTY5MSw3ICs2OTUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucG9wKDApLCBvcmQoJ3cnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnBvcCgtMiksIG9yZCgncicpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGIucG9wKDEwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbGFtYmRhOiBieXRlYXJyYXkoKS5wb3AoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBieXRlYXJyYXkoKS5wb3AoKSkKICAgICAgICAgIyB0ZXN0IGZvciBpc3N1ZSAjNjg0NgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShiJ1x4ZmYnKS5wb3AoKSwgMHhmZikKIApAQCAtNzE4LDcgKzcyMiw3IEBACiAgICAgICAgIGIuaW5zZXJ0KC0yLCBvcmQoJ2knKSkKICAgICAgICAgYi5pbnNlcnQoMTAwMCwgb3JkKCdpJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYidtaXNzaXNzaXBwaScpCi0gICAgICAgICMgYWxsb3dlZCBpbiAyLjYKKyAgICAgICAgIyBhbGxvd2VkIGluIDIueAogICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGIuaW5zZXJ0KDAsIGInMScpKQogICAgICAgICBiID0gYnl0ZWFycmF5KCkKICAgICAgICAgYi5pbnNlcnQoMCwgSW5kZXhhYmxlKG9yZCgnQScpKSkKQEAgLTczOCw3ICs3NDIsNyBAQAogICAgICAgICBhLCBiLCBjID0gYnl0ZWFycmF5KGIieCIpLnBhcnRpdGlvbihiInkiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBiIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhiIGlzIG5vdCBjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpcyBub3QgYykKICAgICAgICAgYiArPSBiIiEiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYiIiKQogICAgICAgICBhLCBiLCBjID0gYnl0ZWFycmF5KGIieCIpLnBhcnRpdGlvbihiInkiKQpAQCAtNzQ4LDE1ICs3NTIsMTQgQEAKICAgICAgICAgYiwgYywgYSA9IGJ5dGVhcnJheShiIngiKS5ycGFydGl0aW9uKGIieSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGIiIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGIgaXMgbm90IGMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIGlzIG5vdCBjKQogICAgICAgICBiICs9IGIiISIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBiIiIpCiAgICAgICAgIGMsIGIsIGEgPSBieXRlYXJyYXkoYiJ4IikucnBhcnRpdGlvbihiInkiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBiIiIpCiAKLSAgICAjIFhYWCBtZW1vcnl2aWV3IG5vdCBhdmFpbGFibGUKLSAgICBkZWYgWFhYdGVzdF9yZXNpemVfZm9yYmlkZGVuKHNlbGYpOgorICAgIGRlZiB0ZXN0X3Jlc2l6ZV9mb3JiaWRkZW4oc2VsZik6CiAgICAgICAgICMgIzQ1MDk6IGNhbid0IHJlc2l6ZSBhIGJ5dGVhcnJheSB3aGVuIHRoZXJlIGFyZSBidWZmZXIgZXhwb3J0cywgZXZlbgogICAgICAgICAjIGlmIGl0IHdvdWxkbid0IHJlYWxsb2NhdGUgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgogICAgICAgICAjIEZ1cnRoZXJtb3JlLCBubyBkZXN0cnVjdGl2ZSBjaGFuZ2VzIHRvIHRoZSBidWZmZXIgbWF5IGJlIGFwcGxpZWQKQEAgLTc2OCwyNSArNzcxLDI1IEBACiAgICAgICAgIHJlc2l6ZSgxMCkKICAgICAgICAgb3JpZyA9IGJbOl0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIHJlc2l6ZSwgMTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIsIG9yaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgb3JpZykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIHJlc2l6ZSwgOSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiwgb3JpZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgcmVzaXplLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiLCBvcmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIG9yaWcpCiAgICAgICAgICMgT3RoZXIgb3BlcmF0aW9ucyBpbXBseWluZyByZXNpemUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIGIucG9wLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiLCBvcmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIG9yaWcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBiLnJlbW92ZSwgYlsxXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiwgb3JpZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQogICAgICAgICBkZWYgZGVsaXRlbSgpOgogICAgICAgICAgICAgZGVsIGJbMV0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIGRlbGl0ZW0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIsIG9yaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgb3JpZykKICAgICAgICAgIyBkZWxldGluZyBhIG5vbi1jb250aWd1b3VzIHNsaWNlCiAgICAgICAgIGRlZiBkZWxzbGljZSgpOgogICAgICAgICAgICAgYlsxOi0xOjJdID0gYiIiCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBkZWxzbGljZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiwgb3JpZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfYnl0ZWFycmF5KHNlbGYpOgogICAgICAgICAjIElzc3VlICM3NTYxOiBvcGVyYXRpb25zIG9uIGVtcHR5IGJ5dGVhcnJheXMgY291bGQgY3Jhc2ggaW4gbWFueQpAQCAtODAwLDE0ICs4MDMsOCBAQAogICAgICMgVGVzdCB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBieXRlcyBhbmQgYnl0ZWFycmF5CiAgICAgIwogCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLndhcm5pbmdfZmlsdGVycyA9IHdhcm5pbmdzLmZpbHRlcnNbOl0KLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgd2FybmluZ3MuZmlsdGVycyA9IHNlbGYud2FybmluZ19maWx0ZXJzCi0KKyAgICBAY2hlY2tfYnl0ZXNfd2FybmluZ3MKICAgICBkZWYgdGVzdF9yZXByX3N0cihzZWxmKToKLSAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBCeXRlc1dhcm5pbmcpCiAgICAgICAgIGZvciBmIGluIHN0ciwgcmVwcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihieXRlYXJyYXkoKSksICJieXRlYXJyYXkoYicnKSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYnl0ZWFycmF5KFswXSkpLCAiYnl0ZWFycmF5KGInXFx4MDAnKSIpCkBAIC04NDcsMTAgKzg0NCwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiYWJjIikgPD0gYiJhYiIsIEZhbHNlKQogCiAgICAgZGVmIHRlc3RfZG9jKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYnl0ZWFycmF5Ll9fZG9jX18gIT0gTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGJ5dGVhcnJheS5fX2RvY19fLnN0YXJ0c3dpdGgoImJ5dGVhcnJheSgiKSwgYnl0ZWFycmF5Ll9fZG9jX18pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhieXRlcy5fX2RvY19fICE9IE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhieXRlcy5fX2RvY19fLnN0YXJ0c3dpdGgoImJ5dGVzKCIpLCBieXRlcy5fX2RvY19fKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShieXRlYXJyYXkuX19kb2NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ5dGVhcnJheS5fX2RvY19fLnN0YXJ0c3dpdGgoImJ5dGVhcnJheSgiKSwgYnl0ZWFycmF5Ll9fZG9jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGJ5dGVzLl9fZG9jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShieXRlcy5fX2RvY19fLnN0YXJ0c3dpdGgoImJ5dGVzKCIpLCBieXRlcy5fX2RvY19fKQogCiAgICAgZGVmIHRlc3RfZnJvbV9ieXRlYXJyYXkoc2VsZik6CiAgICAgICAgIHNhbXBsZSA9IGJ5dGVzKGIiSGVsbG8gd29ybGRcblx4ODBceDgxXHhmZVx4ZmYiKQpAQCAtODU4LDggKzg1NSw4IEBACiAgICAgICAgIGIgPSBieXRlYXJyYXkoYnVmKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShzYW1wbGUpKQogCisgICAgQGNoZWNrX2J5dGVzX3dhcm5pbmdzCiAgICAgZGVmIHRlc3RfdG9fc3RyKHNlbGYpOgotICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIEJ5dGVzV2FybmluZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYicnKSwgImInJyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGIneCcpLCAiYid4JyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGInXHg4MCcpLCAiYidcXHg4MCciKQpAQCAtODkzLDggKzg5MCwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGInaGVlJykKICAgICAgICAgYyA9IGIudHJhbnNsYXRlKE5vbmUsIGInZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYidobGxvJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiLnRyYW5zbGF0ZSwgYidhJyoyNTYsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmEudHJhbnNsYXRlLCBiJ2EnKjI1NiwgTm9uZSkKKyAgICAgICAgYyA9IGJhLnRyYW5zbGF0ZShOb25lLCBiJ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGInaGxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYi50cmFuc2xhdGUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmEudHJhbnNsYXRlLCBOb25lLCBOb25lKQogCiAgICAgZGVmIHRlc3Rfc3BsaXRfYnl0ZWFycmF5KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYSBiJy5zcGxpdChtZW1vcnl2aWV3KGInICcpKSwgW2InYScsIGInYiddKQpAQCAtOTMyLDcgKzkzMSwxMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIG5ld3ZhbCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWwgaXMgbm90IG5ld3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRobmFtZSsnIHJldHVybmVkIHNlbGYgb24gYSBtdXRhYmxlIG9iamVjdCcpCi0KKyAgICAgICAgZm9yIGV4cHIgaW4gKCd2YWwuc3BsaXQoKVswXScsICd2YWwucnNwbGl0KClbMF0nLAorICAgICAgICAgICAgICAgICAgICAgJ3ZhbC5wYXJ0aXRpb24oIi4iKVswXScsICd2YWwucnBhcnRpdGlvbigiLiIpWzJdJywKKyAgICAgICAgICAgICAgICAgICAgICd2YWwuc3BsaXRsaW5lcygpWzBdJywgJ3ZhbC5yZXBsYWNlKCIiLCAiIiknKToKKyAgICAgICAgICAgIG5ld3ZhbCA9IGV2YWwoZXhwcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBuZXd2YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsIGlzIG5vdCBuZXd2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcisnIHJldHVybmVkIHZhbCBvbiBhIG11dGFibGUgb2JqZWN0JykKIAogY2xhc3MgRml4ZWRTdHJpbmdUZXN0KHRlc3Quc3RyaW5nX3Rlc3RzLkJhc2VUZXN0KToKIApAQCAtOTY3LDIwICs5NzIsMjAgQEAKIGNsYXNzIEJ5dGVBcnJheVN1YmNsYXNzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzc3ViY2xhc3MoQnl0ZUFycmF5U3ViY2xhc3MsIGJ5dGVhcnJheSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKEJ5dGVBcnJheVN1YmNsYXNzKCksIGJ5dGVhcnJheSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEJ5dGVBcnJheVN1YmNsYXNzLCBieXRlYXJyYXkpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoQnl0ZUFycmF5U3ViY2xhc3MoKSwgYnl0ZWFycmF5KQogCiAgICAgICAgIGEsIGIgPSBiImFiY2QiLCBiImVmZ2giCiAgICAgICAgIF9hLCBfYiA9IEJ5dGVBcnJheVN1YmNsYXNzKGEpLCBCeXRlQXJyYXlTdWJjbGFzcyhiKQogCiAgICAgICAgICMgdGVzdCBjb21wYXJpc29uIG9wZXJhdG9ycyB3aXRoIHN1YmNsYXNzIGluc3RhbmNlcwotICAgICAgICBzZWxmLmFzc2VydF8oX2EgPT0gX2EpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhfYSAhPSBfYikKLSAgICAgICAgc2VsZi5hc3NlcnRfKF9hIDwgX2IpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhfYSA8PSBfYikKLSAgICAgICAgc2VsZi5hc3NlcnRfKF9iID49IF9hKQotICAgICAgICBzZWxmLmFzc2VydF8oX2IgPiBfYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKF9hIGlzIG5vdCBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2EgPT0gX2EpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfYSAhPSBfYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9hIDwgX2IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfYSA8PSBfYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9iID49IF9hKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2IgPiBfYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9hIGlzIG5vdCBhKQogCiAgICAgICAgICMgdGVzdCBjb25jYXQgb2Ygc3ViY2xhc3MgaW5zdGFuY2VzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIGIsIF9hICsgX2IpCkBAIC05ODgsNyArOTkzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgYiwgX2EgKyBiKQogCiAgICAgICAgICMgdGVzdCByZXBlYXQKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEqNSA9PSBfYSo1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSo1ID09IF9hKjUpCiAKICAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBqb2luIHJldHVybnMgYSBORVcgb2JqZWN0IGZvciBzaW5nbGUgaXRlbSBzZXF1ZW5jZXMKQEAgLTk5NiwxMiArMTAwMSwxMiBAQAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGl0IGlzIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgogICAgICAgICBzMSA9IEJ5dGVBcnJheVN1YmNsYXNzKGIiYWJjZCIpCiAgICAgICAgIHMyID0gYnl0ZWFycmF5KCkuam9pbihbczFdKQotICAgICAgICBzZWxmLmFzc2VydF8oczEgaXMgbm90IHMyKQotICAgICAgICBzZWxmLmFzc2VydF8odHlwZShzMikgaXMgYnl0ZWFycmF5LCB0eXBlKHMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIG5vdCBzMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoczIpIGlzIGJ5dGVhcnJheSwgdHlwZShzMikpCiAKICAgICAgICAgIyBUZXN0IHJldmVyc2UsIGNhbGxpbmcgam9pbiBvbiBzdWJjbGFzcwogICAgICAgICBzMyA9IHMxLmpvaW4oW2IiYWJjZCJdKQotICAgICAgICBzZWxmLmFzc2VydF8odHlwZShzMykgaXMgYnl0ZWFycmF5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzMykgaXMgYnl0ZWFycmF5KQogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgogICAgICAgICBhID0gQnl0ZUFycmF5U3ViY2xhc3MoYiJhYmNkIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnoyLnB5IGIvTGliL3Rlc3QvdGVzdF9iejIucHkKaW5kZXggZWU3ZTg4Ni4uZDljY2YwYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iejIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iejIucHkKQEAgLTEsMTUgKzEsMTkgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4KK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgaW1wb3J0X21vZHVsZQogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IG9zCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZGluZwogCi1pbXBvcnQgYnoyCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworYnoyID0gaW1wb3J0X21vZHVsZSgnYnoyJykKIGZyb20gYnoyIGltcG9ydCBCWjJGaWxlLCBCWjJDb21wcmVzc29yLCBCWjJEZWNvbXByZXNzb3IKIAogaGFzX2NtZGxpbmVfYnVuemlwMiA9IHN5cy5wbGF0Zm9ybSBub3QgaW4gKCJ3aW4zMiIsICJvczJlbXgiLCAicmlzY29zIikKQEAgLTUwLDY4ICs1NCw2OCBAQAogICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuZmlsZW5hbWUpCiAKICAgICBkZWYgY3JlYXRlVGVtcEZpbGUoc2VsZiwgY3JsZj0wKToKLSAgICAgICAgZiA9IG9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikKLSAgICAgICAgaWYgY3JsZjoKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLkRBVEFfQ1JMRgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuREFUQQotICAgICAgICBmLndyaXRlKGRhdGEpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGlmIGNybGY6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuREFUQV9DUkxGCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLkRBVEEKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKIAogICAgIGRlZiB0ZXN0UmVhZChzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWQoKSIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFQpCi0gICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUKQorCisgICAgZGVmIHRlc3RSZWFkMChzZWxmKToKKyAgICAgICAgIyBUZXN0IEJCWjJGaWxlLnJlYWQoMCkiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoMCksICIiKQogCiAgICAgZGVmIHRlc3RSZWFkQ2h1bmsxMChzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWQoKSBpbiBjaHVua3Mgb2YgMTAgYnl0ZXMiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICB0ZXh0ID0gJycKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHN0ciA9IGJ6MmYucmVhZCgxMCkKLSAgICAgICAgICAgIGlmIG5vdCBzdHI6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHRleHQgKz0gc3RyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgdGV4dCkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgdGV4dCA9ICcnCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHN0ciA9IGJ6MmYucmVhZCgxMCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3RyOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRleHQgKz0gc3RyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsIHNlbGYuVEVYVCkKIAogICAgIGRlZiB0ZXN0UmVhZDEwMChzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWQoMTAwKSIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKDEwMCksIHNlbGYuVEVYVFs6MTAwXSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoMTAwKSwgc2VsZi5URVhUWzoxMDBdKQogCiAgICAgZGVmIHRlc3RSZWFkTGluZShzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWRsaW5lKCkiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZGxpbmUsIE5vbmUpCi0gICAgICAgIHNpbyA9IFN0cmluZ0lPKHNlbGYuVEVYVCkKLSAgICAgICAgZm9yIGxpbmUgaW4gc2lvLnJlYWRsaW5lcygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWRsaW5lKCksIGxpbmUpCi0gICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkbGluZSwgTm9uZSkKKyAgICAgICAgICAgIHNpbyA9IFN0cmluZ0lPKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHNpby5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmUoKSwgbGluZSkKIAogICAgIGRlZiB0ZXN0UmVhZExpbmVzKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUucmVhZGxpbmVzKCkiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZGxpbmVzLCBOb25lKQotICAgICAgICBzaW8gPSBTdHJpbmdJTyhzZWxmLlRFWFQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZXMoKSwgc2lvLnJlYWRsaW5lcygpKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZGxpbmVzLCBOb25lKQorICAgICAgICAgICAgc2lvID0gU3RyaW5nSU8oc2VsZi5URVhUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWRsaW5lcygpLCBzaW8ucmVhZGxpbmVzKCkpCiAKICAgICBkZWYgdGVzdEl0ZXJhdG9yKHNlbGYpOgogICAgICAgICAjICJUZXN0IGl0ZXIoQloyRmlsZSkiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBzaW8gPSBTdHJpbmdJTyhzZWxmLlRFWFQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdGVyKGJ6MmYpKSwgc2lvLnJlYWRsaW5lcygpKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzaW8gPSBTdHJpbmdJTyhzZWxmLlRFWFQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXRlcihiejJmKSksIHNpby5yZWFkbGluZXMoKSkKIAogICAgIGRlZiB0ZXN0Q2xvc2VkSXRlcmF0b3JEZWFkbG9jayhzZWxmKToKICAgICAgICAgIyAiVGVzdCB0aGF0IGl0ZXJhdGlvbiBvbiBhIGNsb3NlZCBiejJmaWxlIHJlbGVhc2VzIHRoZSBsb2NrLiIKQEAgLTE1MCwxMDQgKzE1NCw5MSBAQAogCiAgICAgZGVmIHRlc3RXcml0ZShzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLndyaXRlKCkiCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLndyaXRlKQotICAgICAgICBiejJmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgYnoyZi5jbG9zZSgpCi0gICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKSwgc2VsZi5URVhUKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi53cml0ZSkKKyAgICAgICAgICAgIGJ6MmYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKSwgc2VsZi5URVhUKQogCiAgICAgZGVmIHRlc3RXcml0ZUNodW5rczEwKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUud3JpdGUoKSB3aXRoIGNodW5rcyBvZiAxMCBieXRlcyIKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKQotICAgICAgICBuID0gMAotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgc3RyID0gc2VsZi5URVhUW24qMTA6KG4rMSkqMTBdCi0gICAgICAgICAgICBpZiBub3Qgc3RyOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBiejJmLndyaXRlKHN0cikKLSAgICAgICAgICAgIG4gKz0gMQotICAgICAgICBiejJmLmNsb3NlKCkKLSAgICAgICAgZiA9IG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLCBzZWxmLlRFWFQpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKSBhcyBiejJmOgorICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgc3RyID0gc2VsZi5URVhUW24qMTA6KG4rMSkqMTBdCisgICAgICAgICAgICAgICAgaWYgbm90IHN0cjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBiejJmLndyaXRlKHN0cikKKyAgICAgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSksIHNlbGYuVEVYVCkKIAogICAgIGRlZiB0ZXN0V3JpdGVMaW5lcyhzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLndyaXRlbGluZXMoKSIKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYud3JpdGVsaW5lcykKLSAgICAgICAgc2lvID0gU3RyaW5nSU8oc2VsZi5URVhUKQotICAgICAgICBiejJmLndyaXRlbGluZXMoc2lvLnJlYWRsaW5lcygpKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi53cml0ZWxpbmVzKQorICAgICAgICAgICAgc2lvID0gU3RyaW5nSU8oc2VsZi5URVhUKQorICAgICAgICAgICAgYnoyZi53cml0ZWxpbmVzKHNpby5yZWFkbGluZXMoKSkKICAgICAgICAgIyBwYXRjaCAjMTUzNTUwMAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLndyaXRlbGluZXMsIFsiYSJdKQotICAgICAgICBmID0gb3BlbihzZWxmLmZpbGVuYW1lLCAncmInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSksIHNlbGYuVEVYVCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLCBzZWxmLlRFWFQpCiAKICAgICBkZWYgdGVzdFdyaXRlTWV0aG9kc09uUmVhZE9ubHlGaWxlKHNlbGYpOgotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpCi0gICAgICAgIGJ6MmYud3JpdGUoImFiYyIpCi0gICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi53cml0ZSgiYWJjIikKIAotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lLCAiciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGUsICJhIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnoyZi53cml0ZWxpbmVzLCBbImEiXSkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGUsICJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgWyJhIl0pCiAKICAgICBkZWYgdGVzdFNlZWtGb3J3YXJkKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygxNTAsIDApIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnNlZWspCi0gICAgICAgIGJ6MmYuc2VlaygxNTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFsxNTA6XSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnNlZWspCisgICAgICAgICAgICBiejJmLnNlZWsoMTUwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUWzE1MDpdKQogCiAgICAgZGVmIHRlc3RTZWVrQmFja3dhcmRzKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygtMTUwLCAxKSIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIGJ6MmYucmVhZCg1MDApCi0gICAgICAgIGJ6MmYuc2VlaygtMTUwLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbNTAwLTE1MDpdKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBiejJmLnJlYWQoNTAwKQorICAgICAgICAgICAgYnoyZi5zZWVrKC0xNTAsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbNTAwLTE1MDpdKQogCiAgICAgZGVmIHRlc3RTZWVrQmFja3dhcmRzRnJvbUVuZChzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoLTE1MCwgMikiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBiejJmLnNlZWsoLTE1MCwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUW2xlbihzZWxmLlRFWFQpLTE1MDpdKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBiejJmLnNlZWsoLTE1MCwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFtsZW4oc2VsZi5URVhUKS0xNTA6XSkKIAogICAgIGRlZiB0ZXN0U2Vla1Bvc3RFbmQoc2VsZik6CiAgICAgICAgICMgIlRlc3QgQloyRmlsZS5zZWVrKDE1MDAwMCkiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBiejJmLnNlZWsoMTUwMDAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYudGVsbCgpLCBsZW4oc2VsZi5URVhUKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgIiIpCi0gICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIGJ6MmYuc2VlaygxNTAwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYudGVsbCgpLCBsZW4oc2VsZi5URVhUKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksICIiKQogCiAgICAgZGVmIHRlc3RTZWVrUG9zdEVuZFR3aWNlKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygxNTAwMDApIHR3aWNlIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKLSAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnRlbGwoKSwgbGVuKHNlbGYuVEVYVCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksICIiKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBiejJmLnNlZWsoMTUwMDAwKQorICAgICAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi50ZWxsKCksIGxlbihzZWxmLlRFWFQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgIiIpCiAKICAgICBkZWYgdGVzdFNlZWtQcmVTdGFydChzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoLTE1MCwgMCkiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBiejJmLnNlZWsoLTE1MCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnRlbGwoKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBiejJmLnNlZWsoLTE1MCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi50ZWxsKCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFQpCiAKICAgICBkZWYgdGVzdE9wZW5EZWwoc2VsZik6CiAgICAgICAgICMgIlRlc3Qgb3BlbmluZyBhbmQgZGVsZXRpbmcgYSBmaWxlIG1hbnkgdGltZXMiCkBAIC0yNzMsMjQgKzI2NCw0MyBAQAogICAgIGRlZiB0ZXN0QnVnMTE5MTA0MyhzZWxmKToKICAgICAgICAgIyByZWFkbGluZXMoKSBmb3IgZmlsZXMgY29udGFpbmluZyBubyBuZXdsaW5lCiAgICAgICAgIGRhdGEgPSAnQlpoOTFBWSZTWVx4ZDliXHg4OV1ceDAwXHgwMFx4MDBceDAzXHg4MFx4MDRceDAwXHgwMlx4MDBceDBjXHgwMCBceDAwIVx4OWFoM01ceDEzPF1ceGM5XHgxNFx4ZTFCQ2VceDhhJXQnCi0gICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpCi0gICAgICAgIGYud3JpdGUoZGF0YSkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIGxpbmVzID0gYnoyZi5yZWFkbGluZXMoKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgbGluZXMgPSBiejJmLnJlYWRsaW5lcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsnVGVzdCddKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICB4bGluZXMgPSBsaXN0KGJ6MmYueHJlYWRsaW5lcygpKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICB4bGluZXMgPSBsaXN0KGJ6MmYucmVhZGxpbmVzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeGxpbmVzLCBbJ1Rlc3QnXSkKIAorICAgIGRlZiB0ZXN0Q29udGV4dFByb3RvY29sKHNlbGYpOgorICAgICAgICAjIEJaMkZpbGUgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbAorICAgICAgICBmID0gTm9uZQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJ4eHgiKQorICAgICAgICBmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIl9fZW50ZXJfXyBvbiBhIGNsb3NlZCBmaWxlIGRpZG4ndCByYWlzZSBhbiBleGNlcHRpb24iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCIxIC8vIDAgZGlkbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogICAgIGRlZiB0ZXN0VGhyZWFkaW5nKHNlbGYpOgogICAgICAgICAjIFVzaW5nIGEgQloyRmlsZSBmcm9tIHNldmVyYWwgdGhyZWFkcyBkb2Vzbid0IGRlYWRsb2NrIChpc3N1ZSAjNzIwNSkuCiAgICAgICAgIGRhdGEgPSAiMSIgKiAyKioyMAogICAgICAgICBudGhyZWFkcyA9IDEwCi0gICAgICAgIGYgPSBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgIGRlZiBjb21wKCk6CiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKQEAgLTI5OSwyNyArMzA5LDE5IEBACiAgICAgICAgICAgICAgICAgdC5zdGFydCgpCiAgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgICAgIHQuam9pbigpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0TWl4ZWRJdGVyYXRpb25SZWFkcyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjODM5NzogbWl4ZWQgaXRlcmF0aW9uIGFuZCByZWFkcyBzaG91bGQgYmUgZm9yYmlkZGVuLgotICAgICAgICBmID0gYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CiAgICAgICAgICAgICAjIFRoZSBpbnRlcm5hbCBidWZmZXIgc2l6ZSBpcyBoYXJkLXdpcmVkIHRvIDgxOTIgYnl0ZXMsIHdlIG11c3QKICAgICAgICAgICAgICMgd3JpdGUgb3V0IG1vcmUgdGhhbiB0aGF0IGZvciB0aGUgdGVzdCB0byBzdG9wIGhhbGYgdGhyb3VnaAogICAgICAgICAgICAgIyB0aGUgYnVmZmVyLgogICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQgKiAxMDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZiA9IGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgogICAgICAgICAgICAgbmV4dChmKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkbGluZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGxpbmVzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKIGNsYXNzIEJaMkNvbXByZXNzb3JUZXN0KEJhc2VUZXN0KToKICAgICBkZWYgdGVzdENvbXByZXNzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weSBiL0xpYi90ZXN0L3Rlc3RfY2FsZW5kYXIucHkKaW5kZXggZmFkNTE3Yy4uMmE1NjI2OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhbGVuZGFyLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgbG9jYWxlCiAKIAogcmVzdWx0XzIwMDRfdGV4dCA9ICIiIgpAQCAtMjQ4LDYgKzI0OSwxOSBAQAogICAgICAgICAgICAgIyB2ZXJpZnkgaXQgImFjdHMgbGlrZSBhIHNlcXVlbmNlIiBpbiB0d28gZm9ybXMgb2YgaXRlcmF0aW9uCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWzo6LTFdLCBsaXN0KHJldmVyc2VkKHZhbHVlKSkpCiAKKyAgICBkZWYgdGVzdF9sb2NhbGVjYWxlbmRhcnMoc2VsZik6CisgICAgICAgICMgZW5zdXJlIHRoYXQgTG9jYWxle1RleHQsSFRNTH1DYWxlbmRhciByZXNldHMgdGhlIGxvY2FsZSBwcm9wZXJseQorICAgICAgICAjIChpdCBpcyBzdGlsbCBub3QgdGhyZWFkLXNhZmUgdGhvdWdoKQorICAgICAgICBvbGRfb2N0b2JlciA9IGNhbGVuZGFyLlRleHRDYWxlbmRhcigpLmZvcm1hdG1vbnRobmFtZSgyMDEwLCAxMCwgMTApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhbGVuZGFyLkxvY2FsZVRleHRDYWxlbmRhcihsb2NhbGU9JycpLmZvcm1hdG1vbnRobmFtZSgyMDEwLCAxMCwgMTApCisgICAgICAgIGV4Y2VwdCBsb2NhbGUuRXJyb3I6CisgICAgICAgICAgICAjIGNhbm5vdCBzZXQgdGhlIHN5c3RlbSBkZWZhdWx0IGxvY2FsZSAtLSBza2lwIHJlc3Qgb2YgdGVzdAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGNhbGVuZGFyLkxvY2FsZUhUTUxDYWxlbmRhcihsb2NhbGU9JycpLmZvcm1hdG1vbnRobmFtZSgyMDEwLCAxMCkKKyAgICAgICAgbmV3X29jdG9iZXIgPSBjYWxlbmRhci5UZXh0Q2FsZW5kYXIoKS5mb3JtYXRtb250aG5hbWUoMjAxMCwgMTAsIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvbGRfb2N0b2JlciwgbmV3X29jdG9iZXIpCisKIAogY2xhc3MgTW9udGhDYWxlbmRhclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0zODAsMTIgKzM5NCw2MiBAQAogICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5OTUsIDEyLCAoMiwgNywgNywgNywgNywgMSkpCiAKIAorY2xhc3MgTW9udGhSYW5nZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9qYW51YXJ5KHNlbGYpOgorICAgICAgICAjIFRlc3RzIHZhbGlkIGxvd2VyIGJvdW5kYXJ5IGNhc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubW9udGhyYW5nZSgyMDA0LDEpLCAoMywzMSkpCisKKyAgICBkZWYgdGVzdF9mZWJydWFyeV9sZWFwKHNlbGYpOgorICAgICAgICAjIFRlc3RzIEZlYnJ1YXJ5IGR1cmluZyBsZWFwIHllYXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubW9udGhyYW5nZSgyMDA0LDIpLCAoNiwyOSkpCisKKyAgICBkZWYgdGVzdF9mZWJydWFyeV9ub25sZWFwKHNlbGYpOgorICAgICAgICAjIFRlc3RzIEZlYnJ1YXJ5IGluIG5vbi1sZWFwIHllYXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubW9udGhyYW5nZSgyMDEwLDIpLCAoMCwyOCkpCisKKyAgICBkZWYgdGVzdF9kZWNlbWJlcihzZWxmKToKKyAgICAgICAgIyBUZXN0cyB2YWxpZCB1cHBlciBib3VuZGFyeSBjYXNlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLm1vbnRocmFuZ2UoMjAwNCwxMiksICgyLDMxKSkKKworICAgIGRlZiB0ZXN0X3plcm90aF9tb250aChzZWxmKToKKyAgICAgICAgIyBUZXN0cyBsb3cgaW52YWxpZCBib3VuZGFyeSBjYXNlLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNhbGVuZGFyLklsbGVnYWxNb250aEVycm9yKToKKyAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRocmFuZ2UoMjAwNCwgMCkKKworICAgIGRlZiB0ZXN0X3RoaXJ0ZWVudGhfbW9udGgoc2VsZik6CisgICAgICAgICMgVGVzdHMgaGlnaCBpbnZhbGlkIGJvdW5kYXJ5IGNhc2UuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY2FsZW5kYXIuSWxsZWdhbE1vbnRoRXJyb3IpOgorICAgICAgICAgICAgY2FsZW5kYXIubW9udGhyYW5nZSgyMDA0LCAxMykKKworY2xhc3MgTGVhcGRheXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfbm9fcmFuZ2Uoc2VsZik6CisgICAgICAgICMgdGVzdCB3aGVuIG5vIHJhbmdlIGkuZS4gdHdvIGlkZW50aWNhbCB5ZWFycyBhcyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubGVhcGRheXMoMjAxMCwyMDEwKSwgMCkKKworICAgIGRlZiB0ZXN0X25vX2xlYXBkYXlzKHNlbGYpOgorICAgICAgICAjIHRlc3Qgd2hlbiBubyBsZWFwIHllYXJzIGluIHJhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubGVhcGRheXMoMjAxMCwyMDExKSwgMCkKKworICAgIGRlZiB0ZXN0X25vX2xlYXBkYXlzX3VwcGVyX2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICAjIHRlc3Qgbm8gbGVhcCB5ZWFycyBpbiByYW5nZSwgd2hlbiB1cHBlciBib3VuZGFyeSBpcyBhIGxlYXAgeWVhcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmxlYXBkYXlzKDIwMTAsMjAxMiksIDApCisKKyAgICBkZWYgdGVzdF9vbmVfbGVhcGRheV9sb3dlcl9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgIyB0ZXN0IHdoZW4gb25lIGxlYXAgeWVhciBpbiByYW5nZSwgbG93ZXIgYm91bmRhcnkgaXMgbGVhcCB5ZWFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubGVhcGRheXMoMjAxMiwyMDEzKSwgMSkKKworICAgIGRlZiB0ZXN0X3NldmVyYWxfbGVhcHllYXJzX2luX3JhbmdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmxlYXBkYXlzKDE5OTcsMjAyMCksIDUpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCiAgICAgICAgIE91dHB1dFRlc3RDYXNlLAogICAgICAgICBDYWxlbmRhclRlc3RDYXNlLAogICAgICAgICBNb25kYXlUZXN0Q2FzZSwKLSAgICAgICAgU3VuZGF5VGVzdENhc2UKKyAgICAgICAgU3VuZGF5VGVzdENhc2UsCisgICAgICAgIE1vbnRoUmFuZ2VUZXN0Q2FzZSwKKyAgICAgICAgTGVhcGRheXNUZXN0Q2FzZSwKICAgICApCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9jYWxsLnB5CmluZGV4IGZkM2VjM2MuLmQwNmMyYzkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2FsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhbGwucHkKQEAgLTEyLDcgKzEyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5oYXNfa2V5KQogCiAgICAgZGVmIHRlc3RfdmFyYXJnczEoc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHt9Lmhhc19rZXkoMCkKIAogICAgIGRlZiB0ZXN0X3ZhcmFyZ3MyKHNlbGYpOgpAQCAtMjUsMTIgKzI1LDEyIEBACiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF92YXJhcmdzMV9leHQoc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHt9Lmhhc19rZXkoKigwLCkpCiAKICAgICBkZWYgdGVzdF92YXJhcmdzMl9leHQoc2VsZik6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAgICAge30uaGFzX2tleSgqKDEsIDIpKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYXBpLnB5IGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CmluZGV4IGVlYTQxYzEuLjdjMjU5MjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhcGkucHkKQEAgLTEsMTAgKzEsMTAxIEBACiAjIFJ1biB0aGUgX3Rlc3RjYXBpIG1vZHVsZSB0ZXN0cyAodGVzdHMgZm9yIHRoZSBQeXRob24vQyBBUEkpOiAgYnkgZGVmbiwKICMgdGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgX3Rlc3RjYXBpIGV4cG9ydHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCAndGVzdF8nLgogCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CiBpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCiBpbXBvcnQgX3Rlc3RjYXBpCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBUZXN0UGVuZGluZ0NhbGxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBwZW5kaW5nY2FsbHNfc3VibWl0KHNlbGYsIGwsIG4pOgorICAgICAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgICAgICN0aGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0aHJlYWQgc3dpdGNoaW5nIHNvIGxldCdzCisgICAgICAgICAgICAjdXNlIGFuIGF0b21pYyBvcGVyYXRpb24KKyAgICAgICAgICAgIGwuYXBwZW5kKE5vbmUpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICB0aW1lLnNsZWVwKHJhbmRvbS5yYW5kb20oKSowLjAyKSAjMC4wMSBzZWNzIG9uIGF2ZXJhZ2UKKyAgICAgICAgICAgICN0cnkgc3VibWl0dGluZyBjYWxsYmFjayB1bnRpbCBzdWNjZXNzZnVsLgorICAgICAgICAgICAgI3JlbHkgb24gcmVndWxhciBpbnRlcnJ1cHQgdG8gZmx1c2ggcXVldWUgaWYgd2UgYXJlCisgICAgICAgICAgICAjdW5zdWNjZXNzZnVsLgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiBfdGVzdGNhcGkuX3BlbmRpbmdfdGhyZWFkZnVuYyhjYWxsYmFjayk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgZGVmIHBlbmRpbmdjYWxsc193YWl0KHNlbGYsIGwsIG4sIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgI25vdywgc3RpY2sgYXJvdW5kIHVudGlsIGxbMF0gaGFzIGdyb3duIHRvIDEwCisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgbGVuKGwpICE9IG46CisgICAgICAgICAgICAjdGhpcyBidXN5IGxvb3AgaXMgd2hlcmUgd2UgZXhwZWN0IHRvIGJlIGludGVycnVwdGVkIHRvCisgICAgICAgICAgICAjcnVuIG91ciBjYWxsYmFja3MuICBOb3RlIHRoYXQgY2FsbGJhY2tzIGFyZSBvbmx5IHJ1biBvbiB0aGUKKyAgICAgICAgICAgICNtYWluIHRocmVhZAorICAgICAgICAgICAgaWYgRmFsc2UgYW5kIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICIoJWkpIiUobGVuKGwpLCksCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwMCk6CisgICAgICAgICAgICAgICAgYSA9IGkqaQorICAgICAgICAgICAgaWYgY29udGV4dCBhbmQgbm90IGNvbnRleHQuZXZlbnQuaXNfc2V0KCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3VudCA8IDEwMDAwLAorICAgICAgICAgICAgICAgICJ0aW1lb3V0IHdhaXRpbmcgZm9yICVpIGNhbGxiYWNrcywgZ290ICVpIiUobiwgbGVuKGwpKSkKKyAgICAgICAgaWYgRmFsc2UgYW5kIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiglaSkiJShsZW4obCksKQorCisgICAgZGVmIHRlc3RfcGVuZGluZ2NhbGxzX3RocmVhZGVkKHNlbGYpOgorICAgICAgICAjZG8gZXZlcnkgY2FsbGJhY2sgb24gYSBzZXBhcmF0ZSB0aHJlYWQKKyAgICAgICAgbiA9IDMyICN0b3RhbCBjYWxsYmFja3MKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIGNsYXNzIGZvbyhvYmplY3QpOnBhc3MKKyAgICAgICAgY29udGV4dCA9IGZvbygpCisgICAgICAgIGNvbnRleHQubCA9IFtdCisgICAgICAgIGNvbnRleHQubiA9IDIgI3N1Ym1pdHMgcGVyIHRocmVhZAorICAgICAgICBjb250ZXh0Lm5UaHJlYWRzID0gbiAvLyBjb250ZXh0Lm4KKyAgICAgICAgY29udGV4dC5uRmluaXNoZWQgPSAwCisgICAgICAgIGNvbnRleHQubG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgY29udGV4dC5ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY29udGV4dC5uVGhyZWFkcyk6CisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5wZW5kaW5nY2FsbHNfdGhyZWFkLCBhcmdzID0gKGNvbnRleHQsKSkKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodCkKKworICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc193YWl0KGNvbnRleHQubCwgbiwgY29udGV4dCkKKworICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKworICAgIGRlZiBwZW5kaW5nY2FsbHNfdGhyZWFkKHNlbGYsIGNvbnRleHQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc19zdWJtaXQoY29udGV4dC5sLCBjb250ZXh0Lm4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3aXRoIGNvbnRleHQubG9jazoKKyAgICAgICAgICAgICAgICBjb250ZXh0Lm5GaW5pc2hlZCArPSAxCisgICAgICAgICAgICAgICAgbkZpbmlzaGVkID0gY29udGV4dC5uRmluaXNoZWQKKyAgICAgICAgICAgICAgICBpZiBGYWxzZSBhbmQgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJmaW5pc2hlZCB0aHJlYWRzOiAiLCBuRmluaXNoZWQKKyAgICAgICAgICAgIGlmIG5GaW5pc2hlZCA9PSBjb250ZXh0Lm5UaHJlYWRzOgorICAgICAgICAgICAgICAgIGNvbnRleHQuZXZlbnQuc2V0KCkKKworICAgIGRlZiB0ZXN0X3BlbmRpbmdjYWxsc19ub25fdGhyZWFkZWQoc2VsZik6CisgICAgICAgICNhZ2FpbiwganVzdCB1c2luZyB0aGUgbWFpbiB0aHJlYWQsIGxpa2VseSB0aGV5IHdpbGwgYWxsIGJlIGRpc3BhdGhjZWQgYXQKKyAgICAgICAgI29uY2UuICBJdCBpcyBvayB0byBhc2sgZm9yIHRvbyBtYW55LCBiZWNhdXNlIHdlIGxvb3AgdW50aWwgd2UgZmluZCBhIHNsb3QuCisgICAgICAgICN0aGUgbG9vcCBjYW4gYmUgaW50ZXJydXB0ZWQgdG8gZGlzcGF0Y2guCisgICAgICAgICN0aGVyZSBhcmUgb25seSAzMiBkaXNwYXRjaCBzbG90cywgc28gd2UgZ28gZm9yIHR3aWNlIHRoYXQhCisgICAgICAgIGwgPSBbXQorICAgICAgICBuID0gNjQKKyAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfc3VibWl0KGwsIG4pCisgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3dhaXQobCwgbikKKworCiBkZWYgdGVzdF9tYWluKCk6CiAKICAgICBmb3IgbmFtZSBpbiBkaXIoX3Rlc3RjYXBpKToKQEAgLTM1LDIwICsxMjYsMTUgQEAKICAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkLCBcCiAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgZmluZCBtYWluIHRocmVhZCBjb3JyZWN0bHkgaW4gdGhlIGxpc3QiCiAKLSAgICB0cnk6Ci0gICAgICAgIF90ZXN0Y2FwaS5fdGVzdF90aHJlYWRfc3RhdGUKLSAgICAgICAgaGF2ZV90aHJlYWRfc3RhdGUgPSBUcnVlCi0gICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICBoYXZlX3RocmVhZF9zdGF0ZSA9IEZhbHNlCi0KLSAgICBpZiBoYXZlX3RocmVhZF9zdGF0ZToKKyAgICBpZiB0aHJlYWRpbmc6CiAgICAgICAgIGltcG9ydCB0aHJlYWQKICAgICAgICAgaW1wb3J0IHRpbWUKICAgICAgICAgVGVzdFRocmVhZFN0YXRlKCkKLSAgICAgICAgaW1wb3J0IHRocmVhZGluZwogICAgICAgICB0PXRocmVhZGluZy5UaHJlYWQodGFyZ2V0PVRlc3RUaHJlYWRTdGF0ZSkKICAgICAgICAgdC5zdGFydCgpCiAgICAgICAgIHQuam9pbigpCiAKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQZW5kaW5nQ2FsbHMpCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2QucHkgYi9MaWIvdGVzdC90ZXN0X2NkLnB5CmluZGV4IGRhYWQyMjMuLmVkYWE4MmIgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jZC5weQpAQCAtMiw4ICsyLDkgQEAKICIiIldoaW1weSB0ZXN0IHNjcmlwdCBmb3IgdGhlIGNkIG1vZHVsZQogICAgUm9nZXIgRS4gTWFzc2UKICIiIgotaW1wb3J0IGNkCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlCisKK2NkID0gaW1wb3J0X21vZHVsZSgnY2QnKQogCiBjZGF0dHJzID0gWydCTE9DS1NJWkUnLCAnQ0RST00nLCAnREFUQVNJWkUnLCAnRVJST1InLCAnTk9ESVNDJywgJ1BBVVNFRCcsICdQTEFZSU5HJywgJ1JFQURZJywKICAgICAgICAgICAgJ1NUSUxMJywgJ19fZG9jX18nLCAnX19uYW1lX18nLCAnYXRpbWUnLCAnYXVkaW8nLCAnY2F0YWxvZycsICdjb250cm9sJywgJ2NyZWF0ZXBhcnNlcicsICdlcnJvcicsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NmZ3BhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5CmluZGV4IDc4NjU3ZGUuLmQ0NGE0MTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5CkBAIC0xLDEwICsxLDEyIEBACiBpbXBvcnQgQ29uZmlnUGFyc2VyCiBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgVXNlckRpY3QKIAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAorCiBjbGFzcyBTb3J0ZWREaWN0KFVzZXJEaWN0LlVzZXJEaWN0KToKICAgICBkZWYgaXRlbXMoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IHNlbGYuZGF0YS5pdGVtcygpCkBAIC0yNiwxMiArMjgsMTYgQEAKICAgICBfX2l0ZXJfXyA9IGl0ZXJrZXlzCiAgICAgZGVmIGl0ZXJ2YWx1ZXMoc2VsZik6IHJldHVybiBpdGVyKHNlbGYudmFsdWVzKCkpCiAKKwogY2xhc3MgVGVzdENhc2VCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBhbGxvd19ub192YWx1ZSA9IEZhbHNlCisKICAgICBkZWYgbmV3Y29uZmlnKHNlbGYsIGRlZmF1bHRzPU5vbmUpOgogICAgICAgICBpZiBkZWZhdWx0cyBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5jZiA9IHNlbGYuY29uZmlnX2NsYXNzKCkKKyAgICAgICAgICAgIHNlbGYuY2YgPSBzZWxmLmNvbmZpZ19jbGFzcyhhbGxvd19ub192YWx1ZT1zZWxmLmFsbG93X25vX3ZhbHVlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5jZiA9IHNlbGYuY29uZmlnX2NsYXNzKGRlZmF1bHRzKQorICAgICAgICAgICAgc2VsZi5jZiA9IHNlbGYuY29uZmlnX2NsYXNzKGRlZmF1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X25vX3ZhbHVlPXNlbGYuYWxsb3dfbm9fdmFsdWUpCiAgICAgICAgIHJldHVybiBzZWxmLmNmCiAKICAgICBkZWYgZnJvbXN0cmluZyhzZWxmLCBzdHJpbmcsIGRlZmF1bHRzPU5vbmUpOgpAQCAtNDEsNyArNDcsNyBAQAogICAgICAgICByZXR1cm4gY2YKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgotICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygKKyAgICAgICAgY29uZmlnX3N0cmluZyA9ICgKICAgICAgICAgICAgICJbRm9vIEJhcl1cbiIKICAgICAgICAgICAgICJmb289YmFyXG4iCiAgICAgICAgICAgICAiW1NwYWNleSBCYXJdXG4iCkBAIC02MSwxNyArNjcsMjggQEAKICAgICAgICAgICAgICJrZXkgd2l0aCBzcGFjZXMgOiB2YWx1ZVxuIgogICAgICAgICAgICAgImFub3RoZXIgd2l0aCBzcGFjZXMgPSBzcGxhdCFcbiIKICAgICAgICAgICAgICkKKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIGNvbmZpZ19zdHJpbmcgKz0gKAorICAgICAgICAgICAgICAgICJbTm9WYWx1ZV1cbiIKKyAgICAgICAgICAgICAgICAib3B0aW9uLXdpdGhvdXQtdmFsdWVcbiIKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoY29uZmlnX3N0cmluZykKICAgICAgICAgTCA9IGNmLnNlY3Rpb25zKCkKICAgICAgICAgTC5zb3J0KCkKKyAgICAgICAgRSA9IFtyJ0NvbW1lbnRlZCBCYXInLAorICAgICAgICAgICAgIHInRm9vIEJhcicsCisgICAgICAgICAgICAgcidJbnRlcm5hdGlvbmFsaXplZCBTdHVmZicsCisgICAgICAgICAgICAgcidMb25nIExpbmUnLAorICAgICAgICAgICAgIHInU2VjdGlvblx3aXRoJHdlaXJkJWNoYXJhY3RlcnNbJyAnXHQnLAorICAgICAgICAgICAgIHInU3BhY2VzJywKKyAgICAgICAgICAgICByJ1NwYWNleSBCYXInLAorICAgICAgICAgICAgIF0KKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIEUuYXBwZW5kKHInTm9WYWx1ZScpCisgICAgICAgIEUuc29ydCgpCiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBlcShMLCBbcidDb21tZW50ZWQgQmFyJywKLSAgICAgICAgICAgICAgIHInRm9vIEJhcicsCi0gICAgICAgICAgICAgICByJ0ludGVybmF0aW9uYWxpemVkIFN0dWZmJywKLSAgICAgICAgICAgICAgIHInTG9uZyBMaW5lJywKLSAgICAgICAgICAgICAgIHInU2VjdGlvblx3aXRoJHdlaXJkJWNoYXJhY3RlcnNbJyAnXHQnLAotICAgICAgICAgICAgICAgcidTcGFjZXMnLAotICAgICAgICAgICAgICAgcidTcGFjZXkgQmFyJywKLSAgICAgICAgICAgICAgIF0pCisgICAgICAgIGVxKEwsIEUpCiAKICAgICAgICAgIyBUaGUgdXNlIG9mIHNwYWNlcyBpbiB0aGUgc2VjdGlvbiBuYW1lcyBzZXJ2ZXMgYXMgYQogICAgICAgICAjIHJlZ3Jlc3Npb24gdGVzdCBmb3IgU291cmNlRm9yZ2UgYnVnICM1ODMyNDg6CkBAIC04MSwxNyArOTgsMTkgQEAKICAgICAgICAgZXEoY2YuZ2V0KCdDb21tZW50ZWQgQmFyJywgJ2ZvbycpLCAnYmFyJykKICAgICAgICAgZXEoY2YuZ2V0KCdTcGFjZXMnLCAna2V5IHdpdGggc3BhY2VzJyksICd2YWx1ZScpCiAgICAgICAgIGVxKGNmLmdldCgnU3BhY2VzJywgJ2Fub3RoZXIgd2l0aCBzcGFjZXMnKSwgJ3NwbGF0IScpCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBlcShjZi5nZXQoJ05vVmFsdWUnLCAnb3B0aW9uLXdpdGhvdXQtdmFsdWUnKSwgTm9uZSkKIAotICAgICAgICBzZWxmLmZhaWxJZignX19uYW1lX18nIGluIGNmLm9wdGlvbnMoIkZvbyBCYXIiKSwKLSAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fICJvcHRpb24iIHNob3VsZCBub3QgYmUgZXhwb3NlZCBieSB0aGUgQVBJIScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ19fbmFtZV9fJywgY2Yub3B0aW9ucygiRm9vIEJhciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXyAib3B0aW9uIiBzaG91bGQgbm90IGJlIGV4cG9zZWQgYnkgdGhlIEFQSSEnKQogCiAgICAgICAgICMgTWFrZSBzdXJlIHRoZSByaWdodCB0aGluZ3MgaGFwcGVuIGZvciByZW1vdmVfb3B0aW9uKCk7CiAgICAgICAgICMgYWRkZWQgdG8gaW5jbHVkZSBjaGVjayBmb3IgU291cmNlRm9yZ2UgYnVnICMxMjMzMjQ6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjZi5yZW1vdmVfb3B0aW9uKCdGb28gQmFyJywgJ2ZvbycpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2YucmVtb3ZlX29wdGlvbignRm9vIEJhcicsICdmb28nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVfb3B0aW9uKCkgZmFpbGVkIHRvIHJlcG9ydCBleGlzdGVuY2Ugb2Ygb3B0aW9uIikKLSAgICAgICAgc2VsZi5mYWlsSWYoY2YuaGFzX29wdGlvbignRm9vIEJhcicsICdmb28nKSwKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5oYXNfb3B0aW9uKCdGb28gQmFyJywgJ2ZvbycpLAogICAgICAgICAgICAgICAgICAgICAicmVtb3ZlX29wdGlvbigpIGZhaWxlZCB0byByZW1vdmUgb3B0aW9uIikKLSAgICAgICAgc2VsZi5mYWlsSWYoY2YucmVtb3ZlX29wdGlvbignRm9vIEJhcicsICdmb28nKSwKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5yZW1vdmVfb3B0aW9uKCdGb28gQmFyJywgJ2ZvbycpLAogICAgICAgICAgICAgICAgICAgICAicmVtb3ZlX29wdGlvbigpIGZhaWxlZCB0byByZXBvcnQgbm9uLWV4aXN0ZW5jZSBvZiBvcHRpb24iCiAgICAgICAgICAgICAgICAgICAgICIgdGhhdCB3YXMgcmVtb3ZlZCIpCiAKQEAgLTExMywxMCArMTMyLDEwIEBACiAgICAgICAgIGVxKGNmLm9wdGlvbnMoImEiKSwgWyJiIl0pCiAgICAgICAgIGVxKGNmLmdldCgiYSIsICJiIiksICJ2YWx1ZSIsCiAgICAgICAgICAgICJjb3VsZCBub3QgbG9jYXRlIG9wdGlvbiwgZXhwZWN0aW5nIGNhc2UtaW5zZW5zaXRpdmUgb3B0aW9uIG5hbWVzIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNmLmhhc19vcHRpb24oImEiLCAiYiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2YuaGFzX29wdGlvbigiYSIsICJiIikpCiAgICAgICAgIGNmLnNldCgiQSIsICJBLUIiLCAiQS1CIHZhbHVlIikKICAgICAgICAgZm9yIG9wdCBpbiAoImEtYiIsICJBLWIiLCAiYS1CIiwgIkEtQiIpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgIGNmLmhhc19vcHRpb24oIkEiLCBvcHQpLAogICAgICAgICAgICAgICAgICJoYXNfb3B0aW9uKCkgcmV0dXJuZWQgZmFsc2UgZm9yIG9wdGlvbiB3aGljaCBzaG91bGQgZXhpc3QiKQogICAgICAgICBlcShjZi5vcHRpb25zKCJBIiksIFsiYS1iIl0pCkBAIC0xMzMsNyArMTUyLDcgQEAKICAgICAgICAgIyBTRiBidWcgIzU2MTgyMjoKICAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoIltzZWN0aW9uXVxubmVrZXk9bmV2YWx1ZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHM9eyJrZXkiOiJ2YWx1ZSJ9KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY2YuaGFzX29wdGlvbigic2VjdGlvbiIsICJLZXkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmLmhhc19vcHRpb24oInNlY3Rpb24iLCAiS2V5IikpCiAKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfY2FzZV9zZW5zaXRpdml0eShzZWxmKToKQEAgLTE1Myw4ICsxNzIsNiBAQAogICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKENvbmZpZ1BhcnNlci5QYXJzaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIltGb29dXG4gIGV4dHJhLXNwYWNlcz0gc3BsYXRcbiIpCiAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoQ29uZmlnUGFyc2VyLlBhcnNpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiW0Zvb11cbm9wdGlvbi13aXRob3V0LXZhbHVlXG4iKQotICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKENvbmZpZ1BhcnNlci5QYXJzaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIltGb29dXG46dmFsdWUtd2l0aG91dC1vcHRpb24tbmFtZVxuIikKICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcihDb25maWdQYXJzZXIuUGFyc2luZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJbRm9vXVxuPXZhbHVlLXdpdGhvdXQtb3B0aW9uLW5hbWVcbiIpCkBAIC0xNjksOCArMTg2LDkgQEAKICAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2Yuc2VjdGlvbnMoKSwgW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBDb25maWdQYXJzZXIgc2hvdWxkIGhhdmUgbm8gZGVmaW5lZCBzZWN0aW9ucyIpCi0gICAgICAgIHNlbGYuZmFpbElmKGNmLmhhc19zZWN0aW9uKCJGb28iKSwKLSAgICAgICAgICAgICAgICAgICAgIm5ldyBDb25maWdQYXJzZXIgc2hvdWxkIGhhdmUgbm8gYWNrbm93bGVkZ2VkIHNlY3Rpb25zIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5oYXNfc2VjdGlvbigiRm9vIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBDb25maWdQYXJzZXIgc2hvdWxkIGhhdmUgbm8gYWNrbm93bGVkZ2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2VjdGlvbnMiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhDb25maWdQYXJzZXIuTm9TZWN0aW9uRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLm9wdGlvbnMsICJGb28iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhDb25maWdQYXJzZXIuTm9TZWN0aW9uRXJyb3IsCkBAIC0yMDgsOCArMjI2LDggQEAKICAgICAgICAgICAgICJFNT1GQUxTRSBBTkQgTU9SRSIKICAgICAgICAgICAgICkKICAgICAgICAgZm9yIHggaW4gcmFuZ2UoMSwgNSk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY2YuZ2V0Ym9vbGVhbignQk9PTFRFU1QnLCAndCVkJyAlIHgpKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoY2YuZ2V0Ym9vbGVhbignQk9PTFRFU1QnLCAnZiVkJyAlIHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmLmdldGJvb2xlYW4oJ0JPT0xURVNUJywgJ3QlZCcgJSB4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2YuZ2V0Ym9vbGVhbignQk9PTFRFU1QnLCAnZiVkJyAlIHgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLmdldGJvb2xlYW4sICdCT09MVEVTVCcsICdlJWQnICUgeCkKIApAQCAtMjIwLDE4ICsyMzgsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YuYWRkX3NlY3Rpb24sICJGb28iKQogCiAgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6Ci0gICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKAorICAgICAgICBjb25maWdfc3RyaW5nID0gKAogICAgICAgICAgICAgIltMb25nIExpbmVdXG4iCiAgICAgICAgICAgICAiZm9vOiB0aGlzIGxpbmUgaXMgbXVjaCwgbXVjaCBsb25nZXIgdGhhbiBteSBlZGl0b3JcbiIKICAgICAgICAgICAgICIgICBsaWtlcyBpdC5cbiIKICAgICAgICAgICAgICJbREVGQVVMVF1cbiIKICAgICAgICAgICAgICJmb286IGFub3RoZXIgdmVyeVxuIgotICAgICAgICAgICAgIiBsb25nIGxpbmUiCisgICAgICAgICAgICAiIGxvbmcgbGluZVxuIgogICAgICAgICAgICAgKQorICAgICAgICBpZiBzZWxmLmFsbG93X25vX3ZhbHVlOgorICAgICAgICAgICAgY29uZmlnX3N0cmluZyArPSAoCisgICAgICAgICAgICAiW1ZhbHVlbGVzc11cbiIKKyAgICAgICAgICAgICJvcHRpb24td2l0aG91dC12YWx1ZVxuIgorICAgICAgICAgICAgKQorCisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKGNvbmZpZ19zdHJpbmcpCiAgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgY2Yud3JpdGUob3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgb3V0cHV0LmdldHZhbHVlKCksCisgICAgICAgIGV4cGVjdF9zdHJpbmcgPSAoCiAgICAgICAgICAgICAiW0RFRkFVTFRdXG4iCiAgICAgICAgICAgICAiZm9vID0gYW5vdGhlciB2ZXJ5XG4iCiAgICAgICAgICAgICAiXHRsb25nIGxpbmVcbiIKQEAgLTI0MSw2ICsyNjUsMTMgQEAKICAgICAgICAgICAgICJcdGxpa2VzIGl0LlxuIgogICAgICAgICAgICAgIlxuIgogICAgICAgICAgICAgKQorICAgICAgICBpZiBzZWxmLmFsbG93X25vX3ZhbHVlOgorICAgICAgICAgICAgZXhwZWN0X3N0cmluZyArPSAoCisgICAgICAgICAgICAgICAgIltWYWx1ZWxlc3NdXG4iCisgICAgICAgICAgICAgICAgIm9wdGlvbi13aXRob3V0LXZhbHVlXG4iCisgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwgZXhwZWN0X3N0cmluZykKIAogICAgIGRlZiB0ZXN0X3NldF9zdHJpbmdfdHlwZXMoc2VsZik6CiAgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKCJbc2VjdF1cbiIKQEAgLTMyNiw4ICszNTcsMTQgQEAKIAogY2xhc3MgQ29uZmlnUGFyc2VyVGVzdENhc2UoVGVzdENhc2VCYXNlKToKICAgICBjb25maWdfY2xhc3MgPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyCisgICAgYWxsb3dfbm9fdmFsdWUgPSBUcnVlCiAKICAgICBkZWYgdGVzdF9pbnRlcnBvbGF0aW9uKHNlbGYpOgorICAgICAgICByYXd2YWwgPSB7CisgICAgICAgICAgICBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyOiAoInNvbWV0aGluZyAlKHdpdGgxMSlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG90cyBvZiBpbnRlcnBvbGF0aW9uICgxMSBzdGVwcykiKSwKKyAgICAgICAgICAgIENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyOiAiJSh3aXRoMSlzIiwKKyAgICAgICAgfQogICAgICAgICBjZiA9IHNlbGYuZ2V0X2ludGVycG9sYXRpb25fY29uZmlnKCkKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImdldG5hbWUiKSwgIkZvbyIpCkBAIC0zMzksNyArMzc2LDcgQEAKICAgICAgICAgc2VsZi5nZXRfZXJyb3IoQ29uZmlnUGFyc2VyLkludGVycG9sYXRpb25EZXB0aEVycm9yLCAiRm9vIiwgImJhcjExIikKIAogICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb25fbWlzc2luZ192YWx1ZShzZWxmKToKLSAgICAgICAgY2YgPSBzZWxmLmdldF9pbnRlcnBvbGF0aW9uX2NvbmZpZygpCisgICAgICAgIHNlbGYuZ2V0X2ludGVycG9sYXRpb25fY29uZmlnKCkKICAgICAgICAgZSA9IHNlbGYuZ2V0X2Vycm9yKENvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZXJwb2xhdGlvbiBFcnJvciIsICJuYW1lIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLnJlZmVyZW5jZSwgInJlZmVyZW5jZSIpCkBAIC0zNjEsNiArMzk4LDcgQEAKICAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ2RpY3QnLCB7J3BpJzogMy4xNDE1OSwgJyUoJzogMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUobGlzdCknOiAnJShsaXN0KSd9KQogICAgICAgICBjZi5zZXQoJ25vbi1zdHJpbmcnLCAnc3RyaW5nX3dpdGhfaW50ZXJwb2xhdGlvbicsICclKGxpc3QpcycpCisgICAgICAgIGNmLnNldCgnbm9uLXN0cmluZycsICduby12YWx1ZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ2ludCcsIHJhdz1UcnVlKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5nZXQsICdub24tc3RyaW5nJywgJ2ludCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ2xpc3QnLCByYXc9VHJ1ZSksCkBAIC0zNzMsNyArNDExLDM1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdz1UcnVlKSwgJyUobGlzdClzJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2YuZ2V0LCAnbm9uLXN0cmluZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmdfd2l0aF9pbnRlcnBvbGF0aW9uJywgcmF3PUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICduby12YWx1ZScpLCBOb25lKQogCitjbGFzcyBNdWx0aWxpbmVWYWx1ZXNUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgorICAgIGNvbmZpZ19jbGFzcyA9IENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIKKyAgICB3b25kZXJmdWxfc3BhbSA9ICgiSSdtIGhhdmluZyBzcGFtIHNwYW0gc3BhbSBzcGFtICIKKyAgICAgICAgICAgICAgICAgICAgICAic3BhbSBzcGFtIHNwYW0gYmVha2VkIGJlYW5zIHNwYW0gIgorICAgICAgICAgICAgICAgICAgICAgICJzcGFtIHNwYW0gYW5kIHNwYW0hIikucmVwbGFjZSgnICcsICdcdFxuJykKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICBzID0gJ3NlY3Rpb257fScuZm9ybWF0KGkpCisgICAgICAgICAgICBjZi5hZGRfc2VjdGlvbihzKQorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgICAgIGNmLnNldChzLCAnbG92ZWx5X3NwYW17fScuZm9ybWF0KGopLCBzZWxmLndvbmRlcmZ1bF9zcGFtKQorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgY2Yud3JpdGUoZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9kb21pbmF0aW5nX211bHRpbGluZV92YWx1ZXMoc2VsZik6CisgICAgICAgICMgd2UncmUgcmVhZGluZyBmcm9tIGZpbGUgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSBjb2RlIGNoYW5nZWQKKyAgICAgICAgIyBkdXJpbmcgcGVyZm9ybWFuY2UgdXBkYXRlcyBpbiBQeXRob24gMy4yCisgICAgICAgIGNmX2Zyb21fZmlsZSA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4pIGFzIGY6CisgICAgICAgICAgICBjZl9mcm9tX2ZpbGUucmVhZGZwKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZfZnJvbV9maWxlLmdldCgnc2VjdGlvbjgnLCAnbG92ZWx5X3NwYW00JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53b25kZXJmdWxfc3BhbS5yZXBsYWNlKCdcdFxuJywgJ1xuJykpCiAKIGNsYXNzIFJhd0NvbmZpZ1BhcnNlclRlc3RDYXNlKFRlc3RDYXNlQmFzZSk6CiAgICAgY29uZmlnX2NsYXNzID0gQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlcgpAQCAtNDU5LDYgKzUyNSwzOCBAQAogICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2YuYWRkX3NlY3Rpb24sICJERUZBVUxUIikKIAorCitjbGFzcyBTYWZlQ29uZmlnUGFyc2VyVGVzdENhc2VOb1ZhbHVlKFNhZmVDb25maWdQYXJzZXJUZXN0Q2FzZSk6CisgICAgYWxsb3dfbm9fdmFsdWUgPSBUcnVlCisKKworY2xhc3MgSXNzdWU3MDA1VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3Qgb3V0cHV0IHdoZW4gTm9uZSBpcyBzZXQoKSBhcyBhIHZhbHVlIGFuZCBhbGxvd19ub192YWx1ZSA9PSBGYWxzZS4KKworICAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU3MDA1CisKKyAgICAiIiIKKworICAgIGV4cGVjdGVkX291dHB1dCA9ICJbc2VjdGlvbl1cbm9wdGlvbiA9IE5vbmVcblxuIgorCisgICAgZGVmIHByZXBhcmUoc2VsZiwgY29uZmlnX2NsYXNzKToKKyAgICAgICAgIyBUaGlzIGlzIHRoZSBkZWZhdWx0LCBidXQgdGhhdCdzIHRoZSBwb2ludC4KKyAgICAgICAgY3AgPSBjb25maWdfY2xhc3MoYWxsb3dfbm9fdmFsdWU9RmFsc2UpCisgICAgICAgIGNwLmFkZF9zZWN0aW9uKCJzZWN0aW9uIikKKyAgICAgICAgY3Auc2V0KCJzZWN0aW9uIiwgIm9wdGlvbiIsIE5vbmUpCisgICAgICAgIHNpbyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgY3Aud3JpdGUoc2lvKQorICAgICAgICByZXR1cm4gc2lvLmdldHZhbHVlKCkKKworICAgIGRlZiB0ZXN0X25vbmVfYXNfdmFsdWVfc3RyaW5naWZpZWQoc2VsZik6CisgICAgICAgIG91dHB1dCA9IHNlbGYucHJlcGFyZShDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgc2VsZi5leHBlY3RlZF9vdXRwdXQpCisKKyAgICBkZWYgdGVzdF9ub25lX2FzX3ZhbHVlX3N0cmluZ2lmaWVkX3JhdyhzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5wcmVwYXJlKENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBzZWxmLmV4cGVjdGVkX291dHB1dCkKKworCiBjbGFzcyBTb3J0ZWRUZXN0Q2FzZShSYXdDb25maWdQYXJzZXJUZXN0Q2FzZSk6CiAgICAgZGVmIG5ld2NvbmZpZyhzZWxmLCBkZWZhdWx0cz1Ob25lKToKICAgICAgICAgc2VsZi5jZiA9IHNlbGYuY29uZmlnX2NsYXNzKGRlZmF1bHRzPWRlZmF1bHRzLCBkaWN0X3R5cGU9U29ydGVkRGljdCkKQEAgLTQ3NCwyMiArNTcyLDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiaz12XG4iKQogICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgIHNlbGYuY2Yud3JpdGUob3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlthXVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiayA9IHZcblxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiW2JdXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJvMSA9IDRcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIm8yID0gM1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAibzMgPSAyXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJvNCA9IDFcblxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW2FdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgImsgPSB2XG5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW2JdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIm8xID0gNFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvMiA9IDNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibzMgPSAyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIm80ID0gMVxuXG4iKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBDb25maWdQYXJzZXJUZXN0Q2FzZSwKKyAgICAgICAgTXVsdGlsaW5lVmFsdWVzVGVzdENhc2UsCiAgICAgICAgIFJhd0NvbmZpZ1BhcnNlclRlc3RDYXNlLAogICAgICAgICBTYWZlQ29uZmlnUGFyc2VyVGVzdENhc2UsCi0gICAgICAgIFNvcnRlZFRlc3RDYXNlCi0gICAgKQorICAgICAgICBTYWZlQ29uZmlnUGFyc2VyVGVzdENhc2VOb1ZhbHVlLAorICAgICAgICBTb3J0ZWRUZXN0Q2FzZSwKKyAgICAgICAgSXNzdWU3MDA1VGVzdENhc2UsCisgICAgICAgICkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NnaS5weSBiL0xpYi90ZXN0L3Rlc3RfY2dpLnB5CmluZGV4IGI3MjNkNzQuLmUyODJhNTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2dpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2dpLnB5CkBAIC0xLDEwICsxLDkgQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfd2FybmluZ3MsIF9jaGVja19weTNrX3dhcm5pbmdzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzCiBpbXBvcnQgY2dpCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCiBjbGFzcyBIYWNrZWRTeXNNb2R1bGU6CiAgICAgIyBUaGUgcmVncmVzc2lvbiB0ZXN0IHdpbGwgaGF2ZSByZWFsIHZhbHVlcyBpbiBzeXMuYXJndiwgd2hpY2gKQEAgLTExNSw3ICsxMTQsNyBAQAogCiAgICAgcmVzdWx0ID0ge30KICAgICBmb3IgaywgdiBpbiBkaWN0KGZvcm0pLml0ZW1zKCk6Ci0gICAgICAgIHJlc3VsdFtrXSA9IHR5cGUodikgaXMgbGlzdCBhbmQgZm9ybS5nZXRsaXN0KGspIG9yIHYudmFsdWUKKyAgICAgICAgcmVzdWx0W2tdID0gaXNpbnN0YW5jZSh2LCBsaXN0KSBhbmQgZm9ybS5nZXRsaXN0KGspIG9yIHYudmFsdWUKIAogICAgIHJldHVybiByZXN1bHQKIApAQCAtMTMzLDIzICsxMzIsMjMgQEAKICAgICAgICAgICAgIGZjZCA9IGNnaS5Gb3JtQ29udGVudERpY3QoZW52KQogICAgICAgICAgICAgc2QgPSBjZ2kuU3ZGb3JtQ29udGVudERpY3QoZW52KQogICAgICAgICAgICAgZnMgPSBjZ2kuRmllbGRTdG9yYWdlKGVudmlyb249ZW52KQotICAgICAgICAgICAgaWYgdHlwZShleHBlY3QpID09IHR5cGUoe30pOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3QsIGRpY3QpOgogICAgICAgICAgICAgICAgICMgdGVzdCBkaWN0IGludGVyZmFjZQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGV4cGVjdCksIGxlbihmY2QpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGV4cGVjdC5rZXlzKCkpLCBzb3J0ZWQoZmNkLmtleXMoKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZXhwZWN0LnZhbHVlcygpKSwgc29ydGVkKGZjZC52YWx1ZXMoKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZXhwZWN0Lml0ZW1zKCkpLCBzb3J0ZWQoZmNkLml0ZW1zKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChleHBlY3Qua2V5cygpLCBmY2Qua2V5cygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChleHBlY3QudmFsdWVzKCksIGZjZC52YWx1ZXMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZXhwZWN0Lml0ZW1zKCksIGZjZC5pdGVtcygpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNkLmdldCgibm9uZXhpc3RlbnQgZmllbGQiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2QpLCBsZW4oZnMpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHNkLmtleXMoKSksIHNvcnRlZChmcy5rZXlzKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChzZC5rZXlzKCksIGZzLmtleXMoKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmdldHZhbHVlKCJub25leGlzdGVudCBmaWVsZCIsICJkZWZhdWx0IiksICJkZWZhdWx0IikKICAgICAgICAgICAgICAgICAjIHRlc3QgaW5kaXZpZHVhbCBmaWVsZHMKICAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGV4cGVjdC5rZXlzKCk6CiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdF92YWwgPSBleHBlY3Rba2V5XQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oZmNkLmhhc19rZXkoa2V5KSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZmNkW2tleV0pLCBzb3J0ZWQoZXhwZWN0W2tleV0pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNkLmhhc19rZXkoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGZjZFtrZXldLCBleHBlY3Rba2V5XSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY2QuZ2V0KGtleSwgImRlZmF1bHQiKSwgZmNkW2tleV0pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhmcy5oYXNfa2V5KGtleSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcy5oYXNfa2V5KGtleSkpCiAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihleHBlY3RfdmFsKSA+IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdmFsdWUgPSAwCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xNTcsMTggKzE1NiwxOCBAQAogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBzZFtrZXldCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYoc2luZ2xlX3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzaW5nbGVfdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmdldHZhbHVlKGtleSksIGV4cGVjdF92YWwpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oc2luZ2xlX3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpbmdsZV92YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RfdmFsWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcy5nZXR2YWx1ZShrZXkpLCBleHBlY3RfdmFsWzBdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZC5nZXRsaXN0KGtleSkpLCBzb3J0ZWQoZXhwZWN0X3ZhbCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChzZC5nZXRsaXN0KGtleSksIGV4cGVjdF92YWwpCiAgICAgICAgICAgICAgICAgICAgIGlmIHNpbmdsZV92YWx1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHNkLnZhbHVlcygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZWx0cyhzb3J0ZWQoZXhwZWN0LnZhbHVlcygpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZC5pdGVtcygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Rfc2Vjb25kX2VsdHMoc29ydGVkKGV4cGVjdC5pdGVtcygpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2QudmFsdWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9lbHRzKGV4cGVjdC52YWx1ZXMoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2QuaXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X3NlY29uZF9lbHRzKGV4cGVjdC5pdGVtcygpKSkKIAogICAgIGRlZiB0ZXN0X3dlaXJkX2Zvcm1jb250ZW50ZGljdChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoZSB3ZWlyZCBGb3JtQ29udGVudERpY3QgY2xhc3NlcwpAQCAtMTc5LDggKzE3OCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRba10sIHYpCiAgICAgICAgIGZvciBrLCB2IGluIGQuaXRlbXMoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0W2tdLCB2KQotICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChleHBlY3QudmFsdWVzKCkpLCBzb3J0ZWQoZC52YWx1ZXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChleHBlY3QudmFsdWVzKCksIGQudmFsdWVzKCkpCiAKICAgICBkZWYgdGVzdF9sb2coc2VsZik6CiAgICAgICAgIGNnaS5sb2coIlRlc3RpbmciKQpAQCAtMjI3LDcgKzIyNSw3IEBACiAgICAgICAgICMgaWYgd2UncmUgbm90IGNodW5raW5nIHByb3Blcmx5LCByZWFkbGluZSBpcyBvbmx5IGNhbGxlZCB0d2ljZQogICAgICAgICAjIChieSByZWFkX2JpbmFyeSk7IGlmIHdlIGFyZSBjaHVua2luZyBwcm9wZXJseSwgaXQgd2lsbCBiZSBjYWxsZWQgNSB0aW1lcwogICAgICAgICAjIGFzIGxvbmcgYXMgdGhlIGNodW5rc2l6ZSBpcyAxIDw8IDE2LgotICAgICAgICBzZWxmLmFzc2VydF8oZi5udW1jYWxscyA+IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLm51bWNhbGxzID4gMikKIAogICAgIGRlZiB0ZXN0X2ZpZWxkc3RvcmFnZV9tdWx0aXBhcnQoc2VsZik6CiAgICAgICAgICNUZXN0IGJhc2ljIEZpZWxkU3RvcmFnZSBtdWx0aXBhcnQgcGFyc2luZwpAQCAtMjUzLDcgKzI1MSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTcyMTgzNzM3MzM1MDcwNTUyNjY4ODE2NDY4NC0tCiAiIiIKICAgICAgICAgZnMgPSBjZ2kuRmllbGRTdG9yYWdlKGZwPVN0cmluZ0lPKHBvc3RkYXRhKSwgZW52aXJvbj1lbnYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihmcy5saXN0KSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnMubGlzdCksIDQpCiAgICAgICAgIGV4cGVjdCA9IFt7J25hbWUnOidpZCcsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonMTIzNCd9LAogICAgICAgICAgICAgICAgICAgeyduYW1lJzondGl0bGUnLCAnZmlsZW5hbWUnOk5vbmUsICd2YWx1ZSc6Jyd9LAogICAgICAgICAgICAgICAgICAgeyduYW1lJzonZmlsZScsICdmaWxlbmFtZSc6J3Rlc3QudHh0JywndmFsdWUnOidUZXN0aW5nIDEyMy5cbid9LApAQCAtMjYxLDcgKzI1OSw3IEBACiAgICAgICAgIGZvciB4IGluIHJhbmdlKGxlbihmcy5saXN0KSk6CiAgICAgICAgICAgICBmb3IgaywgZXhwIGluIGV4cGVjdFt4XS5pdGVtcygpOgogICAgICAgICAgICAgICAgIGdvdCA9IGdldGF0dHIoZnMubGlzdFt4XSwgaykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnb3QsIGV4cCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwKQogCiAgICAgX3FzX3Jlc3VsdCA9IHsKICAgICAgICAgJ2tleTEnOiAndmFsdWUxJywKQEAgLTM0MSwxNCArMzM5LDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB2KQogCiAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9wYXJzZV9xcyhzZWxmKToKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpOgotICAgICAgICAgICAgIyB0aGlzIGZ1bmMgaXMgbW92ZWQgdG8gdXJscGFyc2UsIHRoaXMgaXMganVzdCBhIHNhbml0eSBjaGVjaworICAgICAgICAjIHRoaXMgZnVuYyBpcyBtb3ZlZCB0byB1cmxwYXJzZSwgdGhpcyBpcyBqdXN0IGEgc2FuaXR5IGNoZWNrCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCdjZ2kucGFyc2VfcXMgaXMgZGVwcmVjYXRlZCwgdXNlIHVybHBhcnNlLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnNlX3FzIGluc3RlYWQnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHsnYSc6IFsnQTEnXSwgJ0InOiBbJ0IzJ10sICdiJzogWydCMiddfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dpLnBhcnNlX3FzKCdhPUExJmI9QjImQj1CMycpKQogCiAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9wYXJzZV9xc2woc2VsZik6Ci0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKToKLSAgICAgICAgICAgICMgdGhpcyBmdW5jIGlzIG1vdmVkIHRvIHVybHBhcnNlLCB0aGlzIGlzIGp1c3QgYSBzYW5pdHkgY2hlY2sKKyAgICAgICAgIyB0aGlzIGZ1bmMgaXMgbW92ZWQgdG8gdXJscGFyc2UsIHRoaXMgaXMganVzdCBhIHNhbml0eSBjaGVjaworICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnY2dpLnBhcnNlX3FzbCBpcyBkZXByZWNhdGVkLCB1c2UgdXJscGFyc2UuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFyc2VfcXNsIGluc3RlYWQnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2EnLCAnQTEnKSwgKCdiJywgJ0IyJyksICgnQicsICdCMycpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dpLnBhcnNlX3FzbCgnYT1BMSZiPUIyJkI9QjMnKSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jaGFybWFwY29kZWMucHkgYi9MaWIvdGVzdC90ZXN0X2NoYXJtYXBjb2RlYy5weQppbmRleCAyODY2OTg0Li5kOTg0MDU5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NoYXJtYXBjb2RlYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NoYXJtYXBjb2RlYy5weQpAQCAtMjcsMjQgKzI3LDI0IEBACiAKIGNsYXNzIENoYXJtYXBDb2RlY1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yeChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pY29kZSgnYWJjJywgY29kZWNuYW1lKSwgdSdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmljb2RlKCd4ZGVmJywgY29kZWNuYW1lKSwgdSdhYmNkZWYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmljb2RlKCdkZWZ4JywgY29kZWNuYW1lKSwgdSdkZWZhYmMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmljb2RlKCdkeGYnLCBjb2RlY25hbWUpLCB1J2RhYmNmJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pY29kZSgnZHhmeCcsIGNvZGVjbmFtZSksIHUnZGFiY2ZhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2FiYycsIGNvZGVjbmFtZSksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCd4ZGVmJywgY29kZWNuYW1lKSwgdSdhYmNkZWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2RlZngnLCBjb2RlY25hbWUpLCB1J2RlZmFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnZHhmJywgY29kZWNuYW1lKSwgdSdkYWJjZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnZHhmeCcsIGNvZGVjbmFtZSksIHUnZGFiY2ZhYmMnKQogCiAgICAgZGVmIHRlc3RfZW5jb2RleChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModSdhYmMnLmVuY29kZShjb2RlY25hbWUpLCAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModSd4ZGVmJy5lbmNvZGUoY29kZWNuYW1lKSwgJ2FiY2RlZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHUnZGVmeCcuZW5jb2RlKGNvZGVjbmFtZSksICdkZWZhYmMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1J2R4ZicuZW5jb2RlKGNvZGVjbmFtZSksICdkYWJjZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHUnZHhmeCcuZW5jb2RlKGNvZGVjbmFtZSksICdkYWJjZmFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhYmMnLmVuY29kZShjb2RlY25hbWUpLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3hkZWYnLmVuY29kZShjb2RlY25hbWUpLCAnYWJjZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2RlZngnLmVuY29kZShjb2RlY25hbWUpLCAnZGVmYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2R4ZicuZW5jb2RlKGNvZGVjbmFtZSksICdkYWJjZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdkeGZ4Jy5lbmNvZGUoY29kZWNuYW1lKSwgJ2RhYmNmYWJjJykKIAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yeShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pY29kZSgneWRlZicsIGNvZGVjbmFtZSksIHUnZGVmJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pY29kZSgnZGVmeScsIGNvZGVjbmFtZSksIHUnZGVmJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pY29kZSgnZHlmJywgY29kZWNuYW1lKSwgdSdkZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWNvZGUoJ2R5ZnknLCBjb2RlY25hbWUpLCB1J2RmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCd5ZGVmJywgY29kZWNuYW1lKSwgdSdkZWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2RlZnknLCBjb2RlY25hbWUpLCB1J2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnZHlmJywgY29kZWNuYW1lKSwgdSdkZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnZHlmeScsIGNvZGVjbmFtZSksIHUnZGYnKQogCiAgICAgZGVmIHRlc3RfbWFwdG91bmRlZmluZWQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdW5pY29kZSwgJ2FiY1wwMDEnLCBjb2RlY25hbWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NsLnB5IGIvTGliL3Rlc3QvdGVzdF9jbC5weQppbmRleCBhMjcyOGI3Li41MDEwMmU5IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2NsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2wucHkKQEAgLTIsOCArMiw5IEBACiAiIiJXaGltcHkgdGVzdCBzY3JpcHQgZm9yIHRoZSBjbCBtb2R1bGUKICAgIFJvZ2VyIEUuIE1hc3NlCiAiIiIKLWltcG9ydCBjbAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaW1wb3J0X21vZHVsZQorCitjbCA9IGltcG9ydF9tb2R1bGUoJ2NsJykKIAogY2xhdHRycyA9IFsnQURERURfQUxHT1JJVEhNX0VSUk9SJywgJ0FMQVcnLCAnQUxHT1JJVEhNX0lEJywKICdBTEdPUklUSE1fVkVSU0lPTicsICdBVURJTycsICdBV0FSRV9FUlJPUicsICdBV0FSRV9NUEVHX0FVRElPJywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2xhc3MucHkgYi9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5CmluZGV4IGMyZDNjNTQuLjBmMjUxMDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2xhc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbGFzcy5weQpAQCAtNDc1LDcgKzQ3NSw3IEBACiAgICAgICAgIGRlbCB0ZXN0bWUKICAgICAgICAgaW1wb3J0IGdjCiAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbImNyYWIgcGVvcGxlLCBjcmFiIHBlb3BsZSJdLCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiY3JhYiBwZW9wbGUsIGNyYWIgcGVvcGxlIl0sIHgpCiAKICAgICBkZWYgdGVzdEJhZFR5cGVSZXR1cm5lZChzZWxmKToKICAgICAgICAgIyByZXR1cm4gdmFsdWVzIG9mIHNvbWUgbWV0aG9kIGFyZSB0eXBlLWNoZWNrZWQKQEAgLTUwNywxNCArNTA3LDE0IEBACiAKICAgICAgICAgY2FsbExzdFs6XSA9IFtdCiAgICAgICAgIGFzX2ludCA9IGludChtaXhJbnRBbmRMb25nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0eXBlKGFzX2ludCksIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFzX2ludCwgNDJMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYXNfaW50KSwgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc19pbnQsIDQyTCkKICAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19pbnRfXycsIChtaXhJbnRBbmRMb25nLCkpXSkKIAogICAgICAgICBjYWxsTHN0WzpdID0gW10KICAgICAgICAgYXNfbG9uZyA9IGxvbmcobWl4SW50QW5kTG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHlwZShhc19sb25nKSwgaW50KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhc19sb25nLCA2NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGFzX2xvbmcpLCBsb25nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzX2xvbmcsIDY0KQogICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2xvbmdfXycsIChtaXhJbnRBbmRMb25nLCkpXSkKIAogICAgIGRlZiB0ZXN0SGFzaFN0dWZmKHNlbGYpOgpAQCAtNTk5LDI0ICs1OTksMjQgQEAKIAogICAgICAgICBhMSA9IEEoMSkKICAgICAgICAgYTIgPSBBKDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGExLmYsIGExLmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGExLmYsIGEyLmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGExLmYsIGExLmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGExLmYsIEEoMSkuZikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGFzaChhMS5mKSwgaGFzaChhMS5mKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGFzaChhMS5mKSwgaGFzaChBKDEpLmYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGExLmYsIGExLmYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYTEuZiwgYTIuZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhMS5mLCBhMS5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGExLmYsIEEoMSkuZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGExLmYpLCBoYXNoKGExLmYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYTEuZiksIGhhc2goQSgxKS5mKSkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhBLmYsIGExLmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKEEuZiwgQS5nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhCLmYsIEEuZikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGFzaChCLmYpLCBoYXNoKEEuZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoQS5mLCBhMS5mKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKEEuZiwgQS5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIuZiwgQS5mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goQi5mKSwgaGFzaChBLmYpKQogCiAgICAgICAgICMgdGhlIGZvbGxvd2luZyB0cmlnZ2VycyBhIFN5c3RlbUVycm9yIGluIDIuNAogICAgICAgICBhID0gQShoYXNoKEEuZi5pbV9mdW5jKV4oLTEpKQogICAgICAgICBoYXNoKGEuZikKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKAorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCiAgICAgICAgICAgICAoIi4rX18oZ2V0fHNldHxkZWwpc2xpY2VfXyBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKICAgICAgICAgICAgICgiY2xhc3NpYyBpbnQgZGl2aXNpb24iLCBEZXByZWNhdGlvbldhcm5pbmcpLAogICAgICAgICAgICAgKCI8PiBub3Qgc3VwcG9ydGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWF0aC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IGNkYTE2OTUuLjhiNWM0YmYKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5CkBAIC0xLDcgKzEsNiBAQAogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiBmcm9tIHRlc3QudGVzdF9tYXRoIGltcG9ydCBwYXJzZV90ZXN0ZmlsZSwgdGVzdF9maWxlCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBvcywgc3lzCiBpbXBvcnQgY21hdGgsIG1hdGgKIGZyb20gY21hdGggaW1wb3J0IHBoYXNlLCBwb2xhciwgcmVjdCwgcGkKIApAQCAtNDYsMzcgKzQ1LDYgQEAKICAgICAgICAgKElORiwgTkFOKQogICAgICAgICBdXQogCi1kZWYgYWxtb3N0RXF1YWxGKGEsIGIsIHJlbF9lcnI9MmUtMTUsIGFic19lcnIgPSA1ZS0zMjMpOgotICAgICIiIkRldGVybWluZSB3aGV0aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBhIGFuZCBiIGFyZSBlcXVhbCB0byB3aXRoaW4KLSAgICBhIChzbWFsbCkgcm91bmRpbmcgZXJyb3IuICBUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHJlbF9lcnIgYW5kCi0gICAgYWJzX2VyciBhcmUgY2hvc2VuIHRvIGJlIHN1aXRhYmxlIGZvciBwbGF0Zm9ybXMgd2hlcmUgYSBmbG9hdCBpcwotICAgIHJlcHJlc2VudGVkIGJ5IGFuIElFRUUgNzU0IGRvdWJsZS4gIFRoZXkgYWxsb3cgYW4gZXJyb3Igb2YgYmV0d2VlbgotICAgIDkgYW5kIDE5IHVscHMuIiIiCi0KLSAgICAjIHNwZWNpYWwgdmFsdWVzIHRlc3RpbmcKLSAgICBpZiBtYXRoLmlzbmFuKGEpOgotICAgICAgICByZXR1cm4gbWF0aC5pc25hbihiKQotICAgIGlmIG1hdGguaXNpbmYoYSk6Ci0gICAgICAgIHJldHVybiBhID09IGIKLQotICAgICMgaWYgYm90aCBhIGFuZCBiIGFyZSB6ZXJvLCBjaGVjayB3aGV0aGVyIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaWduCi0gICAgIyAoaW4gdGhlb3J5IHRoZXJlIGFyZSBleGFtcGxlcyB3aGVyZSBpdCB3b3VsZCBiZSBsZWdpdGltYXRlIGZvciBhCi0gICAgIyBhbmQgYiB0byBoYXZlIG9wcG9zaXRlIHNpZ25zOyBpbiBwcmFjdGljZSB0aGVzZSBoYXJkbHkgZXZlcgotICAgICMgb2NjdXIpLgotICAgIGlmIG5vdCBhIGFuZCBub3QgYjoKLSAgICAgICAgcmV0dXJuIG1hdGguY29weXNpZ24oMS4sIGEpID09IG1hdGguY29weXNpZ24oMS4sIGIpCi0KLSAgICAjIGlmIGEtYiBvdmVyZmxvd3MsIG9yIGIgaXMgaW5maW5pdGUsIHJldHVybiBGYWxzZS4gIEFnYWluLCBpbgotICAgICMgdGhlb3J5IHRoZXJlIGFyZSBleGFtcGxlcyB3aGVyZSBhIGlzIHdpdGhpbiBhIGZldyB1bHBzIG9mIHRoZQotICAgICMgbWF4IHJlcHJlc2VudGFibGUgZmxvYXQsIGFuZCB0aGVuIGIgY291bGQgbGVnaXRpbWF0ZWx5IGJlCi0gICAgIyBpbmZpbml0ZS4gIEluIHByYWN0aWNlIHRoZXNlIGV4YW1wbGVzIGFyZSByYXJlLgotICAgIHRyeToKLSAgICAgICAgYWJzb2x1dGVfZXJyb3IgPSBhYnMoYi1hKQotICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gYWJzb2x1dGVfZXJyb3IgPD0gbWF4KGFic19lcnIsIHJlbF9lcnIgKiBhYnMoYSkpCi0KIGNsYXNzIENNYXRoVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgbGlzdCBvZiBhbGwgZnVuY3Rpb25zIGluIGNtYXRoCiAgICAgdGVzdF9mdW5jdGlvbnMgPSBbZ2V0YXR0cihjbWF0aCwgZm5hbWUpIGZvciBmbmFtZSBpbiBbCkBAIC05Myw0NyArNjEsNjMgQEAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF92YWx1ZXMuY2xvc2UoKQogCi0gICAgZGVmIHJBc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLCBiLCByZWxfZXJyID0gMmUtMTUsIGFic19lcnIgPSA1ZS0zMjMpOgotICAgICAgICAiIiJDaGVjayB0aGF0IHR3byBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSBhbG1vc3QgZXF1YWwuIiIiCisgICAgZGVmIHJBc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLCBiLCByZWxfZXJyID0gMmUtMTUsIGFic19lcnIgPSA1ZS0zMjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSBub3QgYWxtb3N0IGVxdWFsLgorCisgICAgICAgIERldGVybWluZSB3aGV0aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBhIGFuZCBiIGFyZSBlcXVhbCB0byB3aXRoaW4KKyAgICAgICAgYSAoc21hbGwpIHJvdW5kaW5nIGVycm9yLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGZvciByZWxfZXJyIGFuZAorICAgICAgICBhYnNfZXJyIGFyZSBjaG9zZW4gdG8gYmUgc3VpdGFibGUgZm9yIHBsYXRmb3JtcyB3aGVyZSBhIGZsb2F0IGlzCisgICAgICAgIHJlcHJlc2VudGVkIGJ5IGFuIElFRUUgNzU0IGRvdWJsZS4gIFRoZXkgYWxsb3cgYW4gZXJyb3Igb2YgYmV0d2VlbgorICAgICAgICA5IGFuZCAxOSB1bHBzLgorICAgICAgICAiIiIKIAogICAgICAgICAjIHNwZWNpYWwgdmFsdWVzIHRlc3RpbmcKICAgICAgICAgaWYgbWF0aC5pc25hbihhKToKICAgICAgICAgICAgIGlmIG1hdGguaXNuYW4oYik6CiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmLmZhaWwoIiVzIHNob3VsZCBiZSBuYW4iICUgcmVwcihiKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChtc2cgb3IgJ3shcn0gc2hvdWxkIGJlIG5hbicuZm9ybWF0KGIpKQogCiAgICAgICAgIGlmIG1hdGguaXNpbmYoYSk6CiAgICAgICAgICAgICBpZiBhID09IGI6CiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmLmZhaWwoImZpbml0ZSByZXN1bHQgd2hlcmUgaW5maW5pdHkgZXhjcGVjdGVkOiAiCi0gICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVzLCBnb3QgJXMiICUgKHJlcHIoYSksIHJlcHIoYikpKQorICAgICAgICAgICAgc2VsZi5mYWlsKG1zZyBvciAnZmluaXRlIHJlc3VsdCB3aGVyZSBpbmZpbml0eSBleHBlY3RlZDogJworICAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZCB7IXJ9LCBnb3QgeyFyfScuZm9ybWF0KGEsIGIpKQogCisgICAgICAgICMgaWYgYm90aCBhIGFuZCBiIGFyZSB6ZXJvLCBjaGVjayB3aGV0aGVyIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaWduCisgICAgICAgICMgKGluIHRoZW9yeSB0aGVyZSBhcmUgZXhhbXBsZXMgd2hlcmUgaXQgd291bGQgYmUgbGVnaXRpbWF0ZSBmb3IgYQorICAgICAgICAjIGFuZCBiIHRvIGhhdmUgb3Bwb3NpdGUgc2lnbnM7IGluIHByYWN0aWNlIHRoZXNlIGhhcmRseSBldmVyCisgICAgICAgICMgb2NjdXIpLgogICAgICAgICBpZiBub3QgYSBhbmQgbm90IGI6Ci0gICAgICAgICAgICBpZiBtYXRoLmF0YW4yKGEsIC0xLikgIT0gbWF0aC5hdGFuMihiLCAtMS4pOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiemVybyBoYXMgd3Jvbmcgc2lnbjogZXhwZWN0ZWQgJXMsIGdvdCAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwcihhKSwgcmVwcihiKSkpCisgICAgICAgICAgICBpZiBtYXRoLmNvcHlzaWduKDEuLCBhKSAhPSBtYXRoLmNvcHlzaWduKDEuLCBiKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwobXNnIG9yICd6ZXJvIGhhcyB3cm9uZyBzaWduOiBleHBlY3RlZCB7IXJ9LCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdnb3QgeyFyfScuZm9ybWF0KGEsIGIpKQogCi0gICAgICAgICMgdGVzdCBwYXNzZXMgaWYgZWl0aGVyIHRoZSBhYnNvbHV0ZSBlcnJvciBvciB0aGUgcmVsYXRpdmUKLSAgICAgICAgIyBlcnJvciBpcyBzdWZmaWNpZW50bHkgc21hbGwuICBUaGUgZGVmYXVsdHMgYW1vdW50IHRvIGFuCi0gICAgICAgICMgZXJyb3Igb2YgYmV0d2VlbiA5IHVscHMgYW5kIDE5IHVscHMgb24gYW4gSUVFRS03NTQgY29tcGxpYW50Ci0gICAgICAgICMgbWFjaGluZS4KLQorICAgICAgICAjIGlmIGEtYiBvdmVyZmxvd3MsIG9yIGIgaXMgaW5maW5pdGUsIHJldHVybiBGYWxzZS4gIEFnYWluLCBpbgorICAgICAgICAjIHRoZW9yeSB0aGVyZSBhcmUgZXhhbXBsZXMgd2hlcmUgYSBpcyB3aXRoaW4gYSBmZXcgdWxwcyBvZiB0aGUKKyAgICAgICAgIyBtYXggcmVwcmVzZW50YWJsZSBmbG9hdCwgYW5kIHRoZW4gYiBjb3VsZCBsZWdpdGltYXRlbHkgYmUKKyAgICAgICAgIyBpbmZpbml0ZS4gIEluIHByYWN0aWNlIHRoZXNlIGV4YW1wbGVzIGFyZSByYXJlLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBhYnNvbHV0ZV9lcnJvciA9IGFicyhiLWEpCiAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB0ZXN0IHBhc3NlcyBpZiBlaXRoZXIgdGhlIGFic29sdXRlIGVycm9yIG9yIHRoZSByZWxhdGl2ZQorICAgICAgICAgICAgIyBlcnJvciBpcyBzdWZmaWNpZW50bHkgc21hbGwuICBUaGUgZGVmYXVsdHMgYW1vdW50IHRvIGFuCisgICAgICAgICAgICAjIGVycm9yIG9mIGJldHdlZW4gOSB1bHBzIGFuZCAxOSB1bHBzIG9uIGFuIElFRUUtNzU0IGNvbXBsaWFudAorICAgICAgICAgICAgIyBtYWNoaW5lLgogICAgICAgICAgICAgaWYgYWJzb2x1dGVfZXJyb3IgPD0gbWF4KGFic19lcnIsIHJlbF9lcnIgKiBhYnMoYSkpOgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmZhaWwoIiVzIGFuZCAlcyBhcmUgbm90IHN1ZmZpY2llbnRseSBjbG9zZSIgJSAocmVwcihhKSwgcmVwcihiKSkpCisgICAgICAgIHNlbGYuZmFpbChtc2cgb3IKKyAgICAgICAgICAgICAgICAgICd7IXJ9IGFuZCB7IXJ9IGFyZSBub3Qgc3VmZmljaWVudGx5IGNsb3NlJy5mb3JtYXQoYSwgYikpCiAKICAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGVfZXhwZWN0ZWQgPSAyLjcxODI4MTgyODQ1OTA0NTIzNTM2CiAgICAgICAgIHBpX2V4cGVjdGVkID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NgogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNtYXRoLnBpLCBwaV9leHBlY3RlZCwgcGxhY2VzPTksCi0gICAgICAgICAgICBtc2c9ImNtYXRoLnBpIGlzICVzOyBzaG91bGQgYmUgJXMiICUgKGNtYXRoLnBpLCBwaV9leHBlY3RlZCkpCisgICAgICAgICAgICBtc2c9ImNtYXRoLnBpIGlzIHt9OyBzaG91bGQgYmUge30iLmZvcm1hdChjbWF0aC5waSwgcGlfZXhwZWN0ZWQpKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNtYXRoLmUsIGVfZXhwZWN0ZWQsIHBsYWNlcz05LAotICAgICAgICAgICAgbXNnPSJjbWF0aC5lIGlzICVzOyBzaG91bGQgYmUgJXMiICUgKGNtYXRoLmUsIGVfZXhwZWN0ZWQpKQorICAgICAgICAgICAgbXNnPSJjbWF0aC5lIGlzIHt9OyBzaG91bGQgYmUge30iLmZvcm1hdChjbWF0aC5lLCBlX2V4cGVjdGVkKSkKIAogICAgIGRlZiB0ZXN0X3VzZXJfb2JqZWN0KHNlbGYpOgogICAgICAgICAjIFRlc3QgYXV0b21hdGljIGNhbGxpbmcgb2YgX19jb21wbGV4X18gYW5kIF9fZmxvYXRfXyBieSBjbWF0aApAQCAtMzI1LDggKzMwOSw4IEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9zdHIgPSAiJXM6ICVzKGNvbXBsZXgoJXIsICVyKSkiICUgKGlkLCBmbiwgYXIsIGFpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1ZhbHVlRXJyb3Igbm90IHJhaXNlZCBpbiB0ZXN0ICVzJyAlIHRlc3Rfc3RyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1ZhbHVlRXJyb3Igbm90IHJhaXNlZCBpbiB0ZXN0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9OiB7fShjb21wbGV4KHshcn0sIHshcn0pKScuZm9ybWF0KGlkLCBmbiwgYXIsIGFpKSkKIAogICAgICAgICAgICAgaWYgJ292ZXJmbG93JyBpbiBmbGFnczoKICAgICAgICAgICAgICAgICB0cnk6CkBAIC0zMzQsOCArMzE4LDggQEAKICAgICAgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3N0ciA9ICIlczogJXMoY29tcGxleCglciwgJXIpKSIgJSAoaWQsIGZuLCBhciwgYWkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnT3ZlcmZsb3dFcnJvciBub3QgcmFpc2VkIGluIHRlc3QgJXMnICUgdGVzdF9zdHIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnT3ZlcmZsb3dFcnJvciBub3QgcmFpc2VkIGluIHRlc3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAne306IHt9KGNvbXBsZXgoeyFyfSwgeyFyfSkpJy5mb3JtYXQoaWQsIGZuLCBhciwgYWkpKQogCiAgICAgICAgICAgICBhY3R1YWwgPSBmdW5jdGlvbihhcmcpCiAKQEAgLTM1MywxNyArMzM3LDE5IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlYWxfYWJzX2VyciA9IDVlLTMyMwogCi0gICAgICAgICAgICBpZiBub3QgKGFsbW9zdEVxdWFsRihleHBlY3RlZC5yZWFsLCBhY3R1YWwucmVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnIgPSByZWFsX2Fic19lcnIpIGFuZAotICAgICAgICAgICAgICAgICAgICBhbG1vc3RFcXVhbEYoZXhwZWN0ZWQuaW1hZywgYWN0dWFsLmltYWcpKToKLSAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gKAotICAgICAgICAgICAgICAgICAgICAiJXM6ICVzKGNvbXBsZXgoJXIsICVyKSlcbiIgJSAoaWQsIGZuLCBhciwgYWkpICsKLSAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkOiBjb21wbGV4KCVyLCAlcilcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkLnJlYWwsIGV4cGVjdGVkLmltYWcpICsKLSAgICAgICAgICAgICAgICAgICAgIlJlY2VpdmVkOiBjb21wbGV4KCVyLCAlcilcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFjdHVhbC5yZWFsLCBhY3R1YWwuaW1hZykgKwotICAgICAgICAgICAgICAgICAgICAiUmVjZWl2ZWQgdmFsdWUgaW5zdWZmaWNpZW50bHkgY2xvc2UgdG8gZXhwZWN0ZWQgdmFsdWUuIikKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAoCisgICAgICAgICAgICAgICAgJ3t9OiB7fShjb21wbGV4KHshcn0sIHshcn0pKVxuJworICAgICAgICAgICAgICAgICdFeHBlY3RlZDogY29tcGxleCh7IXJ9LCB7IXJ9KVxuJworICAgICAgICAgICAgICAgICdSZWNlaXZlZDogY29tcGxleCh7IXJ9LCB7IXJ9KVxuJworICAgICAgICAgICAgICAgICdSZWNlaXZlZCB2YWx1ZSBpbnN1ZmZpY2llbnRseSBjbG9zZSB0byBleHBlY3RlZCB2YWx1ZS4nCisgICAgICAgICAgICAgICAgKS5mb3JtYXQoaWQsIGZuLCBhciwgYWksCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5yZWFsLCBleHBlY3RlZC5pbWFnLAorICAgICAgICAgICAgICAgICAgICAgYWN0dWFsLnJlYWwsIGFjdHVhbC5pbWFnKQorICAgICAgICAgICAgc2VsZi5yQXNzZXJ0QWxtb3N0RXF1YWwoZXhwZWN0ZWQucmVhbCwgYWN0dWFsLnJlYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2Vycj1yZWFsX2Fic19lcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWVycm9yX21lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLnJBc3NlcnRBbG1vc3RFcXVhbChleHBlY3RlZC5pbWFnLCBhY3R1YWwuaW1hZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ZXJyb3JfbWVzc2FnZSkKIAogICAgIGRlZiBhc3NlcnRDSVNFcXVhbChzZWxmLCBhLCBiKToKICAgICAgICAgZXBzID0gMUUtNwpAQCAtNDE2LDcgKzQwMiw3IEBACiAKICAgICAgICAgIyByZWFsIG9yIGltYWdpbmFyeSBwYXJ0IE5hTgogICAgICAgICBmb3IgeiBpbiBjb21wbGV4X25hbnM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihwaGFzZSh6KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihwaGFzZSh6KSkpCiAKICAgICBkZWYgdGVzdF9hYnMoc2VsZik6CiAgICAgICAgICMgemVyb3MKQEAgLTQyOSwxOCArNDE1LDE4IEBACiAKICAgICAgICAgIyByZWFsIG9yIGltYWdpbmFyeSBwYXJ0IE5hTgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhjb21wbGV4KE5BTiwgLUlORikpLCBJTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKGFicyhjb21wbGV4KE5BTiwgLTIuMykpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCAtMC4wKSkpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihhYnMoY29tcGxleChOQU4sIDAuMCkpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCAyLjMpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KE5BTiwgLTIuMykpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCAtMC4wKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleChOQU4sIDAuMCkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCAyLjMpKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKGNvbXBsZXgoTkFOLCBJTkYpKSwgSU5GKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhjb21wbGV4KC1JTkYsIE5BTikpLCBJTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKGFicyhjb21wbGV4KC0yLjMsIE5BTikpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoLTAuMCwgTkFOKSkpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihhYnMoY29tcGxleCgwLjAsIE5BTikpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoMi4zLCBOQU4pKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KC0yLjMsIE5BTikpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoLTAuMCwgTkFOKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleCgwLjAsIE5BTikpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoMi4zLCBOQU4pKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKGNvbXBsZXgoSU5GLCBOQU4pKSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihhYnMoY29tcGxleChOQU4sIE5BTikpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCBOQU4pKSkpCiAKICAgICAgICAgIyByZXN1bHQgb3ZlcmZsb3dzCiAgICAgICAgIGlmIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKQEAgLTQ1OSwyNiArNDQ1LDI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Q0VxdWFsKHJlY3QoMSwgLXBpLzIpLCAoMCwgLTEuKSkKIAogICAgIGRlZiB0ZXN0X2lzbmFuKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxJZihjbWF0aC5pc25hbigxKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoY21hdGguaXNuYW4oMWopKQotICAgICAgICBzZWxmLmZhaWxJZihjbWF0aC5pc25hbihJTkYpKQotICAgICAgICBzZWxmLmFzc2VydF8oY21hdGguaXNuYW4oTkFOKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNtYXRoLmlzbmFuKGNvbXBsZXgoTkFOLCAwKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWF0aC5pc25hbihjb21wbGV4KDAsIE5BTikpKQotICAgICAgICBzZWxmLmFzc2VydF8oY21hdGguaXNuYW4oY29tcGxleChOQU4sIE5BTikpKQotICAgICAgICBzZWxmLmFzc2VydF8oY21hdGguaXNuYW4oY29tcGxleChOQU4sIElORikpKQotICAgICAgICBzZWxmLmFzc2VydF8oY21hdGguaXNuYW4oY29tcGxleChJTkYsIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNtYXRoLmlzbmFuKDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNtYXRoLmlzbmFuKDFqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc25hbihJTkYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNuYW4oTkFOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzbmFuKGNvbXBsZXgoTkFOLCAwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc25hbihjb21wbGV4KDAsIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNuYW4oY29tcGxleChOQU4sIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNuYW4oY29tcGxleChOQU4sIElORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNuYW4oY29tcGxleChJTkYsIE5BTikpKQogCiAgICAgZGVmIHRlc3RfaXNpbmYoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbElmKGNtYXRoLmlzaW5mKDEpKQotICAgICAgICBzZWxmLmZhaWxJZihjbWF0aC5pc2luZigxaikpCi0gICAgICAgIHNlbGYuZmFpbElmKGNtYXRoLmlzaW5mKE5BTikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWF0aC5pc2luZihJTkYpKQotICAgICAgICBzZWxmLmFzc2VydF8oY21hdGguaXNpbmYoY29tcGxleChJTkYsIDApKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNtYXRoLmlzaW5mKGNvbXBsZXgoMCwgSU5GKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWF0aC5pc2luZihjb21wbGV4KElORiwgSU5GKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWF0aC5pc2luZihjb21wbGV4KE5BTiwgSU5GKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWF0aC5pc2luZihjb21wbGV4KElORiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY21hdGguaXNpbmYoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY21hdGguaXNpbmYoMWopKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNtYXRoLmlzaW5mKE5BTikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc2luZihJTkYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNpbmYoY29tcGxleChJTkYsIDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzaW5mKGNvbXBsZXgoMCwgSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc2luZihjb21wbGV4KElORiwgSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc2luZihjb21wbGV4KE5BTiwgSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc2luZihjb21wbGV4KElORiwgTkFOKSkpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWQucHkgYi9MaWIvdGVzdC90ZXN0X2NtZC5weQppbmRleCBiNDhiMGYxLi5jNDZmZWM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZC5weQpAQCAtNyw2ICs3LDcgQEAKIAogaW1wb3J0IGNtZAogaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGltcG9ydCByZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgU3RyaW5nSU8KQEAgLTYwLDE1ICs2MSwxNyBAQAogICAgID4+PiBteWNtZC5jb21wbGV0ZW5hbWVzKCIxMiIpCiAgICAgW10KICAgICA+Pj4gbXljbWQuY29tcGxldGVuYW1lcygiaGVscCIpCi0gICAgWydoZWxwJywgJ2hlbHAnXQorICAgIFsnaGVscCddCiAKICAgICBUZXN0IGZvciB0aGUgZnVuY3Rpb24gY29tcGxldGVfaGVscCgpOgogICAgID4+PiBteWNtZC5jb21wbGV0ZV9oZWxwKCJhIikKICAgICBbJ2FkZCddCiAgICAgPj4+IG15Y21kLmNvbXBsZXRlX2hlbHAoImhlIikKLSAgICBbJ2hlbHAnLCAnaGVscCddCisgICAgWydoZWxwJ10KICAgICA+Pj4gbXljbWQuY29tcGxldGVfaGVscCgiMTIiKQogICAgIFtdCisgICAgPj4+IHNvcnRlZChteWNtZC5jb21wbGV0ZV9oZWxwKCIiKSkKKyAgICBbJ2FkZCcsICdleGl0JywgJ2hlbHAnLCAnc2hlbGwnXQogCiAgICAgVGVzdCBmb3IgdGhlIGZ1bmN0aW9uIGRvX2hlbHAoKToKICAgICA+Pj4gbXljbWQuZG9faGVscCgidGVzdGV0IikKQEAgLTE4NSwxOSArMTg4LDE5IEBACiAgICAgICAgIGNtZCA9IHNlbGYuc2ltcGxlY21kKHN0ZGluPWlucHV0LCBzdGRvdXQ9b3V0cHV0KQogICAgICAgICBjbWQudXNlX3Jhd2lucHV0ID0gRmFsc2UKICAgICAgICAgY21kLmNtZGxvb3AoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAogICAgICAgICAgICAgKCIoQ21kKSB0ZXN0XG4iCiAgICAgICAgICAgICAgIihDbWQpIHRlc3QyXG4iCiAgICAgICAgICAgICAgIihDbWQpICIpKQogCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgdGVzdF9jbWQKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfY21kCiAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfY21kLCB2ZXJib3NlKQogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEFsdGVybmF0ZUlucHV0KQogCiBkZWYgdGVzdF9jb3ZlcmFnZShjb3ZlcmRpcik6Ci0gICAgaW1wb3J0IHRyYWNlCisgICAgdHJhY2UgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndHJhY2UnKQogICAgIHRyYWNlcj10cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXgsXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlPTAsIGNvdW50PTEpCiAgICAgdHJhY2VyLnJ1bigncmVsb2FkKGNtZCk7dGVzdF9tYWluKCknKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weSBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKaW5kZXggZWZlZjc0Zi4uYmUzYjcwZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CkBAIC00LDMzICs0LDE2IEBACiAKIGltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCwgdW5pdHRlc3QKIGltcG9ydCBzeXMKLWltcG9ydCBzdWJwcm9jZXNzCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbiwgcHl0aG9uX2V4aXRfY29kZQogCi1kZWYgX3NwYXduX3B5dGhvbigqYXJncyk6Ci0gICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRSddCi0gICAgY21kX2xpbmUuZXh0ZW5kKGFyZ3MpCi0gICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0KLWRlZiBfa2lsbF9weXRob24ocCk6Ci0gICAgcC5zdGRpbi5jbG9zZSgpCi0gICAgZGF0YSA9IHAuc3Rkb3V0LnJlYWQoKQotICAgIHAuc3Rkb3V0LmNsb3NlKCkKLSAgICAjIHRyeSB0byBjbGVhbnVwIHRoZSBjaGlsZCBzbyB3ZSBkb24ndCBhcHBlYXIgdG8gbGVhayB3aGVuIHJ1bm5pbmcKLSAgICAjIHdpdGggcmVncnRlc3QgLVIuICBUaGlzIHNob3VsZCBiZSBhIG5vLW9wIG9uIFdpbmRvd3MuCi0gICAgc3VicHJvY2Vzcy5fY2xlYW51cCgpCi0gICAgcmV0dXJuIGRhdGEKIAogY2xhc3MgQ21kTGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzdGFydF9weXRob24oc2VsZiwgKmFyZ3MpOgotICAgICAgICBwID0gX3NwYXduX3B5dGhvbigqYXJncykKLSAgICAgICAgcmV0dXJuIF9raWxsX3B5dGhvbihwKQorICAgICAgICBwID0gc3Bhd25fcHl0aG9uKCphcmdzKQorICAgICAgICByZXR1cm4ga2lsbF9weXRob24ocCkKIAogICAgIGRlZiBleGl0X2NvZGUoc2VsZiwgKmFyZ3MpOgotICAgICAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1FJ10KLSAgICAgICAgY21kX2xpbmUuZXh0ZW5kKGFyZ3MpCi0gICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoY21kX2xpbmUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHJldHVybiBweXRob25fZXhpdF9jb2RlKCphcmdzKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3JpZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5leGl0X2NvZGUoJy4nKSwgMCkKQEAgLTM5LDcgKzIyLDcgQEAKICAgICBkZWYgdmVyaWZ5X3ZhbGlkX2ZsYWcoc2VsZiwgY21kX2xpbmUpOgogICAgICAgICBkYXRhID0gc2VsZi5zdGFydF9weXRob24oY21kX2xpbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhID09ICcnIG9yIGRhdGEuZW5kc3dpdGgoJ1xuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnVHJhY2ViYWNrJyBub3QgaW4gZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgZGF0YSkKIAogICAgIGRlZiB0ZXN0X29wdGltaXplKHNlbGYpOgogICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctTycpCkBAIC01NSw3ICszOCw3IEBACiAgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1TJykKIAogICAgIGRlZiB0ZXN0X3VzYWdlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3VzYWdlJyBpbiBzZWxmLnN0YXJ0X3B5dGhvbignLWgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndXNhZ2UnLCBzZWxmLnN0YXJ0X3B5dGhvbignLWgnKSkKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHZlcnNpb24gPSAnUHl0aG9uICVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdCkBAIC04MywxMiArNjYsMTIgQEAKICAgICAgICAgIyAtbSBhbmQgLWkgbmVlZCB0byBwbGF5IHdlbGwgdG9nZXRoZXIKICAgICAgICAgIyBSdW5zIHRoZSB0aW1laXQgbW9kdWxlIGFuZCBjaGVja3MgdGhlIF9fbWFpbl9fCiAgICAgICAgICMgbmFtZXNwYWNlIGhhcyBiZWVuIHBvcHVsYXRlZCBhcHByb3ByaWF0ZWx5Ci0gICAgICAgIHAgPSBfc3Bhd25fcHl0aG9uKCctaScsICctbScsICd0aW1laXQnLCAnLW4nLCAnMScpCisgICAgICAgIHAgPSBzcGF3bl9weXRob24oJy1pJywgJy1tJywgJ3RpbWVpdCcsICctbicsICcxJykKICAgICAgICAgcC5zdGRpbi53cml0ZSgnVGltZXJcbicpCiAgICAgICAgIHAuc3RkaW4ud3JpdGUoJ2V4aXQoKVxuJykKLSAgICAgICAgZGF0YSA9IF9raWxsX3B5dGhvbihwKQorICAgICAgICBkYXRhID0ga2lsbF9weXRob24ocCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuc3RhcnRzd2l0aCgnMSBsb29wJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX19tYWluX18uVGltZXInIGluIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19fbWFpbl9fLlRpbWVyJywgZGF0YSkKIAogICAgIGRlZiB0ZXN0X3J1bl9jb2RlKHNlbGYpOgogICAgICAgICAjIFRlc3QgZXhwZWN0ZWQgb3BlcmF0aW9uIG9mIHRoZSAnLWMnIHN3aXRjaApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQppbmRleCA5OTVkNGE4Li4wOTk0NzFmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQpAQCAtMywzNiArMywxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCi1pbXBvcnQgc3lzCiBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBweV9jb21waWxlCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IHNodXRpbAotaW1wb3J0IHppcGZpbGUKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAocnVuX3B5dGhvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kaXIsIG1ha2Vfc2NyaXB0LCBjb21waWxlX3NjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9wa2csIG1ha2VfemlwX3NjcmlwdCwgbWFrZV96aXBfcGtnKQogCiB2ZXJib3NlID0gdGVzdC50ZXN0X3N1cHBvcnQudmVyYm9zZQogCi0jIFhYWCBuY29naGxhbjogU2hvdWxkIHdlIGNvbnNpZGVyIG1vdmluZyB0aGVzZSB0byB0ZXN0X3N1cHBvcnQ/Ci1mcm9tIHRlc3RfY21kX2xpbmUgaW1wb3J0IF9zcGF3bl9weXRob24sIF9raWxsX3B5dGhvbgotCi1kZWYgX3J1bl9weXRob24oKmFyZ3MpOgotICAgIGlmIF9fZGVidWdfXzoKLSAgICAgICAgcCA9IF9zcGF3bl9weXRob24oKmFyZ3MpCi0gICAgZWxzZToKLSAgICAgICAgcCA9IF9zcGF3bl9weXRob24oJy1PJywgKmFyZ3MpCi0gICAgc3Rkb3V0X2RhdGEgPSBfa2lsbF9weXRob24ocCkKLSAgICByZXR1cm4gcC53YWl0KCksIHN0ZG91dF9kYXRhCi0KLUBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi1kZWYgdGVtcF9kaXIoKToKLSAgICBkaXJuYW1lID0gdGVtcGZpbGUubWtkdGVtcCgpCi0gICAgZGlybmFtZSA9IG9zLnBhdGgucmVhbHBhdGgoZGlybmFtZSkKLSAgICB0cnk6Ci0gICAgICAgIHlpZWxkIGRpcm5hbWUKLSAgICBmaW5hbGx5OgotICAgICAgICBzaHV0aWwucm10cmVlKGRpcm5hbWUpCiAKIHRlc3Rfc291cmNlID0gIiIiXAogIyBTY3JpcHQgbWF5IGJlIHJ1biB3aXRoIG9wdGltaXNhdGlvbiBlbmFibGVkLCBzbyBkb24ndCByZWx5IG9uIGFzc2VydApAQCAtNjAsNjMgKzM3LDEyIEBACiAiIiIKIAogZGVmIF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlPXRlc3Rfc291cmNlKToKLSAgICBzY3JpcHRfZmlsZW5hbWUgPSBzY3JpcHRfYmFzZW5hbWUrb3MuZXh0c2VwKydweScKLSAgICBzY3JpcHRfbmFtZSA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCBzY3JpcHRfZmlsZW5hbWUpCi0gICAgc2NyaXB0X2ZpbGUgPSBvcGVuKHNjcmlwdF9uYW1lLCAndycpCi0gICAgc2NyaXB0X2ZpbGUud3JpdGUoc291cmNlKQotICAgIHNjcmlwdF9maWxlLmNsb3NlKCkKLSAgICByZXR1cm4gc2NyaXB0X25hbWUKLQotZGVmIF9jb21waWxlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9uYW1lKToKLSAgICBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKLSAgICBpZiBfX2RlYnVnX186Ci0gICAgICAgIGNvbXBpbGVkX25hbWUgPSBzY3JpcHRfbmFtZSArICdjJwotICAgIGVsc2U6Ci0gICAgICAgIGNvbXBpbGVkX25hbWUgPSBzY3JpcHRfbmFtZSArICdvJwotICAgIHJldHVybiBjb21waWxlZF9uYW1lCi0KLWRlZiBfbWFrZV90ZXN0X3ppcCh6aXBfZGlyLCB6aXBfYmFzZW5hbWUsIHNjcmlwdF9uYW1lLCBuYW1lX2luX3ppcD1Ob25lKToKLSAgICB6aXBfZmlsZW5hbWUgPSB6aXBfYmFzZW5hbWUrb3MuZXh0c2VwKyd6aXAnCi0gICAgemlwX25hbWUgPSBvcy5wYXRoLmpvaW4oemlwX2RpciwgemlwX2ZpbGVuYW1lKQotICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKHppcF9uYW1lLCAndycpCi0gICAgaWYgbmFtZV9pbl96aXAgaXMgTm9uZToKLSAgICAgICAgbmFtZV9pbl96aXAgPSBvcy5wYXRoLmJhc2VuYW1lKHNjcmlwdF9uYW1lKQotICAgIHppcF9maWxlLndyaXRlKHNjcmlwdF9uYW1lLCBuYW1lX2luX3ppcCkKLSAgICB6aXBfZmlsZS5jbG9zZSgpCi0gICAgI2lmIHZlcmJvc2U6Ci0gICAgIyAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3InKQotICAgICMgICAgcHJpbnQgJ0NvbnRlbnRzIG9mICVyOicgJSB6aXBfbmFtZQotICAgICMgICAgemlwX2ZpbGUucHJpbnRkaXIoKQotICAgICMgICAgemlwX2ZpbGUuY2xvc2UoKQotICAgIHJldHVybiB6aXBfbmFtZSwgb3MucGF0aC5qb2luKHppcF9uYW1lLCBuYW1lX2luX3ppcCkKLQotZGVmIF9tYWtlX3Rlc3RfcGtnKHBrZ19kaXIpOgotICAgIG9zLm1rZGlyKHBrZ19kaXIpCi0gICAgX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19faW5pdF9fJywgJycpCisgICAgcmV0dXJuIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQogCiBkZWYgX21ha2VfdGVzdF96aXBfcGtnKHppcF9kaXIsIHppcF9iYXNlbmFtZSwgcGtnX25hbWUsIHNjcmlwdF9iYXNlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXRlc3Rfc291cmNlLCBkZXB0aD0xKToKLSAgICBpbml0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdCh6aXBfZGlyLCAnX19pbml0X18nLCAnJykKLSAgICBpbml0X2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShpbml0X25hbWUpCi0gICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdCh6aXBfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKLSAgICBwa2dfbmFtZXMgPSBbb3Muc2VwLmpvaW4oW3BrZ19uYW1lXSppKSBmb3IgaSBpbiByYW5nZSgxLCBkZXB0aCsxKV0KLSAgICBzY3JpcHRfbmFtZV9pbl96aXAgPSBvcy5wYXRoLmpvaW4ocGtnX25hbWVzWy0xXSwgb3MucGF0aC5iYXNlbmFtZShzY3JpcHRfbmFtZSkpCi0gICAgemlwX2ZpbGVuYW1lID0gemlwX2Jhc2VuYW1lK29zLmV4dHNlcCsnemlwJwotICAgIHppcF9uYW1lID0gb3MucGF0aC5qb2luKHppcF9kaXIsIHppcF9maWxlbmFtZSkKLSAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3cnKQotICAgIGZvciBuYW1lIGluIHBrZ19uYW1lczoKLSAgICAgICAgaW5pdF9uYW1lX2luX3ppcCA9IG9zLnBhdGguam9pbihuYW1lLCBpbml0X2Jhc2VuYW1lKQotICAgICAgICB6aXBfZmlsZS53cml0ZShpbml0X25hbWUsIGluaXRfbmFtZV9pbl96aXApCi0gICAgemlwX2ZpbGUud3JpdGUoc2NyaXB0X25hbWUsIHNjcmlwdF9uYW1lX2luX3ppcCkKLSAgICB6aXBfZmlsZS5jbG9zZSgpCi0gICAgb3MudW5saW5rKGluaXRfbmFtZSkKLSAgICBvcy51bmxpbmsoc2NyaXB0X25hbWUpCi0gICAgI2lmIHZlcmJvc2U6Ci0gICAgIyAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3InKQotICAgICMgICAgcHJpbnQgJ0NvbnRlbnRzIG9mICVyOicgJSB6aXBfbmFtZQotICAgICMgICAgemlwX2ZpbGUucHJpbnRkaXIoKQotICAgICMgICAgemlwX2ZpbGUuY2xvc2UoKQotICAgIHJldHVybiB6aXBfbmFtZSwgb3MucGF0aC5qb2luKHppcF9uYW1lLCBzY3JpcHRfbmFtZV9pbl96aXApCisgICAgcmV0dXJuIG1ha2VfemlwX3BrZyh6aXBfZGlyLCB6aXBfYmFzZW5hbWUsIHBrZ19uYW1lLCBzY3JpcHRfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGRlcHRoKQogCiAjIFRoZXJlJ3Mgbm8gZWFzeSB3YXkgdG8gcGFzcyB0aGUgc2NyaXB0IGRpcmVjdG9yeSBpbiB0byBnZXQKICMgLW0gdG8gd29yayAoYXZvaWRpbmcgdGhhdCBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgbWFraW5nCkBAIC0xMzQsMTQgKzYwLDE0IEBACiAgICAgZWxzZToKICAgICAgICAgcGF0aCA9IHJlcHIocGF0aCkKICAgICBzb3VyY2UgPSBsYXVuY2hfc291cmNlICUgKHBhdGgsIG1vZHVsZV9uYW1lKQotICAgIHJldHVybiBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKKyAgICByZXR1cm4gbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCiAKIGNsYXNzIENtZExpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgX2NoZWNrX3NjcmlwdChzZWxmLCBzY3JpcHRfbmFtZSwgZXhwZWN0ZWRfZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCwgZXhwZWN0ZWRfcGFja2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY21kX2xpbmVfc3dpdGNoZXMpOgogICAgICAgICBydW5fYXJncyA9IGNtZF9saW5lX3N3aXRjaGVzICsgKHNjcmlwdF9uYW1lLCkKLSAgICAgICAgZXhpdF9jb2RlLCBkYXRhID0gX3J1bl9weXRob24oKnJ1bl9hcmdzKQorICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBydW5fcHl0aG9uKCpydW5fYXJncykKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICdPdXRwdXQgZnJvbSB0ZXN0IHNjcmlwdCAlcjonICUgc2NyaXB0X25hbWUKICAgICAgICAgICAgIHByaW50IGRhdGEKQEAgLTE1NCw5ICs4MCwxOSBAQAogICAgICAgICAgICAgcHJpbnQgcHJpbnRlZF9maWxlCiAgICAgICAgICAgICBwcmludCBwcmludGVkX3BhY2thZ2UKICAgICAgICAgICAgIHByaW50IHByaW50ZWRfYXJndjAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByaW50ZWRfZmlsZSBpbiBkYXRhKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJpbnRlZF9wYWNrYWdlIGluIGRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhwcmludGVkX2FyZ3YwIGluIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHJpbnRlZF9maWxlLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEluKHByaW50ZWRfcGFja2FnZSwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwcmludGVkX2FyZ3YwLCBkYXRhKQorCisgICAgZGVmIF9jaGVja19pbXBvcnRfZXJyb3Ioc2VsZiwgc2NyaXB0X25hbWUsIGV4cGVjdGVkX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY21kX2xpbmVfc3dpdGNoZXMpOgorICAgICAgICBydW5fYXJncyA9IGNtZF9saW5lX3N3aXRjaGVzICsgKHNjcmlwdF9uYW1lLCkKKyAgICAgICAgZXhpdF9jb2RlLCBkYXRhID0gcnVuX3B5dGhvbigqcnVuX2FyZ3MpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnT3V0cHV0IGZyb20gdGVzdCBzY3JpcHQgJXI6JyAlIHNjcmlwdF9uYW1lCisgICAgICAgICAgICBwcmludCBkYXRhCisgICAgICAgICAgICBwcmludCAnRXhwZWN0ZWQgb3V0cHV0OiAlcicgJSBleHBlY3RlZF9tc2cKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZF9tc2csIGRhdGEpCiAKICAgICBkZWYgdGVzdF9iYXNpY19zY3JpcHQoc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgpAQCAtMTY2LDcgKzEwMiw3IEBACiAgICAgZGVmIHRlc3Rfc2NyaXB0X2NvbXBpbGVkKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ3NjcmlwdCcpCi0gICAgICAgICAgICBjb21waWxlZF9uYW1lID0gX2NvbXBpbGVfdGVzdF9zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpCiAgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoY29tcGlsZWRfbmFtZSwgY29tcGlsZWRfbmFtZSwgY29tcGlsZWRfbmFtZSwgTm9uZSkKIApAQCAtMTc4LDI3ICsxMTQsMzkgQEAKICAgICBkZWYgdGVzdF9kaXJlY3RvcnlfY29tcGlsZWQoc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nKQotICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IF9jb21waWxlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIsIGNvbXBpbGVkX25hbWUsIHNjcmlwdF9kaXIsICcnKQogCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBmaW5kICdfX21haW5fXycgbW9kdWxlIGluICVyIiAlIHNjcmlwdF9kaXIKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ltcG9ydF9lcnJvcihzY3JpcHRfZGlyLCBtc2cpCisKICAgICBkZWYgdGVzdF96aXBmaWxlKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJykKLSAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwKHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCBydW5fbmFtZSwgemlwX25hbWUsICcnKQogCiAgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycpCi0gICAgICAgICAgICBjb21waWxlZF9uYW1lID0gX2NvbXBpbGVfdGVzdF9zY3JpcHQoc2NyaXB0X25hbWUpCi0gICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBjb21waWxlZF9uYW1lKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIGNvbXBpbGVkX25hbWUpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsIHJ1bl9uYW1lLCB6aXBfbmFtZSwgJycpCiAKKyAgICBkZWYgdGVzdF96aXBmaWxlX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ25vdF9tYWluJykKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBmaW5kICdfX21haW5fXycgbW9kdWxlIGluICVyIiAlIHppcF9uYW1lCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IoemlwX25hbWUsIG1zZykKKwogICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKLSAgICAgICAgICAgIF9tYWtlX3Rlc3RfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnc2NyaXB0JykKICAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnLnNjcmlwdCcpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUsIHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgJ3Rlc3RfcGtnJykKQEAgLTIxNSw2ICsxNjMsNDcgQEAKICAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnLnRlc3RfcGtnLnNjcmlwdCcsIHppcF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBydW5fbmFtZSwgcnVuX25hbWUsICd0ZXN0X3BrZy50ZXN0X3BrZycpCiAKKyAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdfX21haW5fXycpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUsIHNjcmlwdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCAndGVzdF9wa2cnKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnX19tYWluX18nKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBjb21waWxlZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUsICd0ZXN0X3BrZycpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBtc2cgPSAoIid0ZXN0X3BrZycgaXMgYSBwYWNrYWdlIGFuZCBjYW5ub3QgIgorICAgICAgICAgICAgICAgICAgICJiZSBkaXJlY3RseSBleGVjdXRlZCIpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IobGF1bmNoX25hbWUsIG1zZykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2VfcmVjdXJzaW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBtYWluX2RpciA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnX19tYWluX18nKQorICAgICAgICAgICAgbWFrZV9wa2cobWFpbl9kaXIpCisgICAgICAgICAgICBtc2cgPSAoIkNhbm5vdCB1c2UgcGFja2FnZSBhcyBfX21haW5fXyBtb2R1bGU7ICIKKyAgICAgICAgICAgICAgICAgICAiJ3Rlc3RfcGtnJyBpcyBhIHBhY2thZ2UgYW5kIGNhbm5vdCAiCisgICAgICAgICAgICAgICAgICAgImJlIGRpcmVjdGx5IGV4ZWN1dGVkIikKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ltcG9ydF9lcnJvcihsYXVuY2hfbmFtZSwgbXNnKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ21kTGluZVRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGUucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGUucHkKaW5kZXggYjY5MjIzZC4uOTdhZGY1OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZS5weQpAQCAtODAsNiArODAsMTEgQEAKIAogIiIiCiAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBfdGVzdGNhcGkKKworCiBkZWYgY29uc3RzKHQpOgogICAgICIiIllpZWxkIGEgZG9jdGVzdC1zYWZlIHNlcXVlbmNlIG9mIG9iamVjdCByZXBycy4iIiIKICAgICBmb3IgZWx0IGluIHQ6CkBAIC05NiwxMSArMTAxLDQ3IEBACiAgICAgICAgIHByaW50ICIlczogJXMiICUgKGF0dHIsIGdldGF0dHIoY28sICJjb18iICsgYXR0cikpCiAgICAgcHJpbnQgImNvbnN0czoiLCB0dXBsZShjb25zdHMoY28uY29fY29uc3RzKSkKIAorCitjbGFzcyBDb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9uZXdlbXB0eShzZWxmKToKKyAgICAgICAgY28gPSBfdGVzdGNhcGkuY29kZV9uZXdlbXB0eSgiZmlsZW5hbWUiLCAiZnVuY25hbWUiLCAxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19maWxlbmFtZSwgImZpbGVuYW1lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19uYW1lLCAiZnVuY25hbWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvLmNvX2ZpcnN0bGluZW5vLCAxNSkKKworCitjbGFzcyBDb2RlV2Vha1JlZlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIGEgY29kZSBvYmplY3QgaW4gYSBjbGVhbiBlbnZpcm9ubWVudCBzbyB0aGF0IHdlIGtub3cgd2UgaGF2ZQorICAgICAgICAjIHRoZSBvbmx5IHJlZmVyZW5jZSB0byBpdCBsZWZ0LgorICAgICAgICBuYW1lc3BhY2UgPSB7fQorICAgICAgICBleGVjICJkZWYgZigpOiBwYXNzIiBpbiBnbG9iYWxzKCksIG5hbWVzcGFjZQorICAgICAgICBmID0gbmFtZXNwYWNlWyJmIl0KKyAgICAgICAgZGVsIG5hbWVzcGFjZQorCisgICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKKyAgICAgICAgZGVmIGNhbGxiYWNrKGNvZGUpOgorICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCisKKyAgICAgICAgIyBmIGlzIG5vdyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uLCBhbmQgdGhyb3VnaCBpdCwgdGhlIGNvZGUKKyAgICAgICAgIyBvYmplY3QuICBXaGlsZSB3ZSBob2xkIGl0LCBjaGVjayB0aGF0IHdlIGNhbiBjcmVhdGUgYSB3ZWFrcmVmIGFuZAorICAgICAgICAjIGRlcmVmIGl0LiAgVGhlbiBkZWxldGUgaXQsIGFuZCBjaGVjayB0aGF0IHRoZSBjYWxsYmFjayBnZXRzIGNhbGxlZCBhbmQKKyAgICAgICAgIyB0aGUgcmVmZXJlbmNlIGRpZXMuCisgICAgICAgIGNvZGVyZWYgPSB3ZWFrcmVmLnJlZihmLl9fY29kZV9fLCBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJvb2woY29kZXJlZigpKSkKKyAgICAgICAgZGVsIGYKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShib29sKGNvZGVyZWYoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNhbGxlZCkKKworCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX2RvY3Rlc3QKKyAgICBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fZG9jdGVzdCwgcnVuX3VuaXR0ZXN0CiAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2NvZGUKICAgICBydW5fZG9jdGVzdCh0ZXN0X2NvZGUsIHZlcmJvc2UpCisgICAgcnVuX3VuaXR0ZXN0KENvZGVUZXN0LCBDb2RlV2Vha1JlZlRlc3QpCiAKIAotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CmluZGV4IDY5YzhmOTQuLjQ4MjVmNDMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgICAgIGNoYXJtYXAgPSBkaWN0KFsgKG9yZChjKSwgMipjLnVwcGVyKCkpIGZvciBjIGluICJhYmNkZWZnaCJdKQogICAgICAgICBzaW4gPSB1ImFiYyIKICAgICAgICAgc291dCA9ICJBQUJCQ0MiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvZGVjcy5jaGFybWFwX2VuY29kZShzaW4sICJzdHJpY3QiLCBjaGFybWFwKVswXSwgc291dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuY2hhcm1hcF9lbmNvZGUoc2luLCAic3RyaWN0IiwgY2hhcm1hcClbMF0sIHNvdXQpCiAKICAgICAgICAgc2luID0gdSJhYmNBIgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGNvZGVjcy5jaGFybWFwX2VuY29kZSwgc2luLCAic3RyaWN0IiwgY2hhcm1hcCkKQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgICAgICBjaGFybWFwW29yZCgiPyIpXSA9ICJYWVoiCiAgICAgICAgIHNpbiA9IHUiYWJjREVGIgogICAgICAgICBzb3V0ID0gIkFBQkJDQ1hZWlhZWlhZWiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29kZWNzLmNoYXJtYXBfZW5jb2RlKHNpbiwgInJlcGxhY2UiLCBjaGFybWFwKVswXSwgc291dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuY2hhcm1hcF9lbmNvZGUoc2luLCAicmVwbGFjZSIsIGNoYXJtYXApWzBdLCBzb3V0KQogCiAgICAgICAgIGNoYXJtYXBbb3JkKCI/IildID0gdSJYWVoiCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLmNoYXJtYXBfZW5jb2RlLCBzaW4sICJyZXBsYWNlIiwgY2hhcm1hcCkKQEAgLTMyNyw3ICszMjcsNyBAQAogCiAgICAgICAgICMgY2hlY2sgd2l0aCB0aGUgY29ycmVjdCBudW1iZXIgYW5kIHR5cGUgb2YgYXJndW1lbnRzCiAgICAgICAgIGV4YyA9IGV4Y3R5cGUoKmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0cihleGMpLCBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGV4YyksIG1zZykKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVlbmNvZGVlcnJvcihzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKApAQCAtNDM3LDE1ICs0MzcsMTUgQEAKICAgICAgICAgICAgVW5pY29kZUVycm9yKCJvdWNoIikKICAgICAgICAgKQogICAgICAgICAjIElmIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbiBpcyBwYXNzZWQgaW4sICJpZ25vcmUiIHJldHVybnMgYW4gZW1wdHkgcmVwbGFjZW1lbnQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKICAgICAgICAgICAgICh1IiIsIDEpCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycyhVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgIlx4ZmYiLCAwLCAxLCAib3VjaCIpKSwKICAgICAgICAgICAgICh1IiIsIDEpCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycyhVbmljb2RlVHJhbnNsYXRlRXJyb3IodSJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKICAgICAgICAgICAgICh1IiIsIDEpCiAgICAgICAgICkKQEAgLTQ3NCwxNSArNDc0LDE1IEBACiAgICAgICAgICAgICBCYWRPYmplY3RVbmljb2RlRGVjb2RlRXJyb3IoKQogICAgICAgICApCiAgICAgICAgICMgV2l0aCB0aGUgY29ycmVjdCBleGNlcHRpb24sICJyZXBsYWNlIiByZXR1cm5zIGFuICI/IiBvciB1Ilx1ZmZmZCIgcmVwbGFjZW1lbnQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MucmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSI/IiwgMSkKICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycyhVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgIlx4ZmYiLCAwLCAxLCAib3VjaCIpKSwKICAgICAgICAgICAgICh1Ilx1ZmZmZCIsIDEpCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MucmVwbGFjZV9lcnJvcnMoVW5pY29kZVRyYW5zbGF0ZUVycm9yKHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSJcdWZmZmQiLCAxKQogICAgICAgICApCkBAIC01MTQsNyArNTE0LDcgQEAKICAgICAgICAgIyBVc2UgdGhlIGNvcnJlY3QgZXhjZXB0aW9uCiAgICAgICAgIGNzID0gKDAsIDEsIDksIDEwLCA5OSwgMTAwLCA5OTksIDEwMDAsIDk5OTksIDEwMDAwLCAweDMwNDIpCiAgICAgICAgIHMgPSAiIi5qb2luKHVuaWNocihjKSBmb3IgYyBpbiBjcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzKAogICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCBzLCAwLCBsZW4ocyksICJvdWNoIikKICAgICAgICAgICAgICksCkBAIC01NDYsMzIgKzU0NiwzMiBAQAogICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKQogICAgICAgICApCiAgICAgICAgICMgVXNlIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKICAgICAgICAgICAgICh1IlxcdTMwNDIiLCAxKQogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCB1Ilx4MDAiLCAwLCAxLCAib3VjaCIpKSwKICAgICAgICAgICAgICh1IlxceDAwIiwgMSkKICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJceGZmIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSJcXHhmZiIsIDEpCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHUwMTAwIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSJcXHUwMTAwIiwgMSkKICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJcdWZmZmYiLCAwLCAxLCAib3VjaCIpKSwKICAgICAgICAgICAgICh1IlxcdWZmZmYiLCAxKQogICAgICAgICApCiAgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlPjB4ZmZmZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXFUwMDAxMDAwMCIsIDAsIDEsICJvdWNoIikpLAogICAgICAgICAgICAgICAgICh1IlxcVTAwMDEwMDAwIiwgMSkKICAgICAgICAgICAgICkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXFUwMDEwZmZmZiIsIDAsIDEsICJvdWNoIikpLAogICAgICAgICAgICAgICAgICh1IlxcVTAwMTBmZmZmIiwgMSkKICAgICAgICAgICAgICkKQEAgLTU4MSw3ICs1ODEsNyBAQAogICAgICAgICBlbmNzID0gKCJhc2NpaSIsICJsYXRpbi0xIiwgImlzby04ODU5LTEiLCAiaXNvLTg4NTktMTUiKQogCiAgICAgICAgIGZvciByZXMgaW4gcmVzdWx0czoKLSAgICAgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5iYWRoYW5kbGVyIiwgbGFtYmRhOiByZXMpCisgICAgICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuYmFkaGFuZGxlciIsIGxhbWJkYSB4OiByZXMpCiAgICAgICAgICAgICBmb3IgZW5jIGluIGVuY3M6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCiAgICAgICAgICAgICAgICAgICAgIFR5cGVFcnJvciwKQEAgLTYwMywxNCArNjAzLDE0IEBACiAgICAgICAgICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfbG9va3VwKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb2RlY3Muc3RyaWN0X2Vycm9ycywgY29kZWNzLmxvb2t1cF9lcnJvcigic3RyaWN0IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvZGVjcy5pZ25vcmVfZXJyb3JzLCBjb2RlY3MubG9va3VwX2Vycm9yKCJpZ25vcmUiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29kZWNzLnN0cmljdF9lcnJvcnMsIGNvZGVjcy5sb29rdXBfZXJyb3IoInN0cmljdCIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3Muc3RyaWN0X2Vycm9ycywgY29kZWNzLmxvb2t1cF9lcnJvcigic3RyaWN0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmlnbm9yZV9lcnJvcnMsIGNvZGVjcy5sb29rdXBfZXJyb3IoImlnbm9yZSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5zdHJpY3RfZXJyb3JzLCBjb2RlY3MubG9va3VwX2Vycm9yKCJzdHJpY3QiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy54bWxjaGFycmVmcmVwbGFjZV9lcnJvcnMsCiAgICAgICAgICAgICBjb2RlY3MubG9va3VwX2Vycm9yKCJ4bWxjaGFycmVmcmVwbGFjZSIpCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMsCiAgICAgICAgICAgICBjb2RlY3MubG9va3VwX2Vycm9yKCJiYWNrc2xhc2hyZXBsYWNlIikKICAgICAgICAgKQpAQCAtNjg2LDExICs2ODYsMTEgQEAKIAogICAgICAgICAjIFZhbGlkIG5lZ2F0aXZlIHBvc2l0aW9uCiAgICAgICAgIGhhbmRsZXIucG9zID0gLTEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIlx4ZmYwIi5kZWNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksIHUiPD8+MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlx4ZmYwIi5kZWNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksIHUiPD8+MCIpCiAKICAgICAgICAgIyBWYWxpZCBuZWdhdGl2ZSBwb3NpdGlvbgogICAgICAgICBoYW5kbGVyLnBvcyA9IC0yCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJceGZmMCIuZGVjb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCB1Ijw/Pjw/PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlx4ZmYwIi5kZWNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksIHUiPD8+PD8+IikKIAogICAgICAgICAjIE5lZ2F0aXZlIHBvc2l0aW9uIG91dCBvZiBib3VuZHMKICAgICAgICAgaGFuZGxlci5wb3MgPSAtMwpAQCAtNjk4LDExICs2OTgsMTEgQEAKIAogICAgICAgICAjIFZhbGlkIHBvc2l0aXZlIHBvc2l0aW9uCiAgICAgICAgIGhhbmRsZXIucG9zID0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiXHhmZjAiLmRlY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgdSI8Pz4wIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXHhmZjAiLmRlY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgdSI8Pz4wIikKIAogICAgICAgICAjIExhcmdlc3QgdmFsaWQgcG9zaXRpdmUgcG9zaXRpb24gKG9uZSBiZXlvbmQgZW5kIG9mIGlucHV0KQogICAgICAgICBoYW5kbGVyLnBvcyA9IDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIlx4ZmYwIi5kZWNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksIHUiPD8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXHhmZjAiLmRlY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgdSI8Pz4iKQogCiAgICAgICAgICMgSW52YWxpZCBwb3NpdGl2ZSBwb3NpdGlvbgogICAgICAgICBoYW5kbGVyLnBvcyA9IDMKQEAgLTcxMCw3ICs3MTAsNyBAQAogCiAgICAgICAgICMgUmVzdGFydCBhdCB0aGUgIjAiCiAgICAgICAgIGhhbmRsZXIucG9zID0gNgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiXFx1eXl5eTAiLmRlY29kZSgicmF3LXVuaWNvZGUtZXNjYXBlIiwgInRlc3QucG9zcmV0dXJuIiksIHUiPD8+MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlxcdXl5eXkwIi5kZWNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIsICJ0ZXN0LnBvc3JldHVybiIpLCB1Ijw/PjAiKQogCiAgICAgICAgIGNsYXNzIEQoZGljdCk6CiAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKQEAgLTc0MCwxMSArNzQwLDExIEBACiAKICAgICAgICAgIyBWYWxpZCBuZWdhdGl2ZSBwb3NpdGlvbgogICAgICAgICBoYW5kbGVyLnBvcyA9IC0xCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHUiXHhmZjAiLmVuY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgIjw/PjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXHhmZjAiLmVuY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgIjw/PjAiKQogCiAgICAgICAgICMgVmFsaWQgbmVnYXRpdmUgcG9zaXRpb24KICAgICAgICAgaGFuZGxlci5wb3MgPSAtMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1Ilx4ZmYwIi5lbmNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksICI8Pz48Pz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXHhmZjAiLmVuY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgIjw/Pjw/PiIpCiAKICAgICAgICAgIyBOZWdhdGl2ZSBwb3NpdGlvbiBvdXQgb2YgYm91bmRzCiAgICAgICAgIGhhbmRsZXIucG9zID0gLTMKQEAgLTc1MiwxMSArNzUyLDExIEBACiAKICAgICAgICAgIyBWYWxpZCBwb3NpdGl2ZSBwb3NpdGlvbgogICAgICAgICBoYW5kbGVyLnBvcyA9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModSJceGZmMCIuZW5jb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCAiPD8+MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJceGZmMCIuZW5jb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCAiPD8+MCIpCiAKICAgICAgICAgIyBMYXJnZXN0IHZhbGlkIHBvc2l0aXZlIHBvc2l0aW9uIChvbmUgYmV5b25kIGVuZCBvZiBpbnB1dAogICAgICAgICBoYW5kbGVyLnBvcyA9IDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModSJceGZmMCIuZW5jb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCAiPD8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx4ZmYwIi5lbmNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksICI8Pz4iKQogCiAgICAgICAgICMgSW52YWxpZCBwb3NpdGl2ZSBwb3NpdGlvbgogICAgICAgICBoYW5kbGVyLnBvcyA9IDMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKaW5kZXggNGQwM2FlNy4uN2NkNzE0MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKQEAgLTI2MywxMSArMjYzLDExIEBACiAgICAgICAgIGYud3JpdGUodSJzcGFtIikKICAgICAgICAgZCA9IHMuZ2V0dmFsdWUoKQogICAgICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgZXhhY3RseSBvbmUgQk9NIGluIGl0Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhkID09IHNlbGYuc3BhbWxlIG9yIGQgPT0gc2VsZi5zcGFtYmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkID09IHNlbGYuc3BhbWxlIG9yIGQgPT0gc2VsZi5zcGFtYmUpCiAgICAgICAgICMgdHJ5IHRvIHJlYWQgaXQgYmFjawogICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oZCkKICAgICAgICAgZiA9IHJlYWRlcihzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgdSJzcGFtc3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHUic3BhbXNwYW0iKQogCiAgICAgZGVmIHRlc3RfYmFkYm9tKHNlbGYpOgogICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oNCoiXHhmZiIpCkBAIC00MjEsMTEgKzQyMSwxMSBAQAogICAgICAgICBmLndyaXRlKHUic3BhbSIpCiAgICAgICAgIGQgPSBzLmdldHZhbHVlKCkKICAgICAgICAgIyBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGV4YWN0bHkgb25lIEJPTSBpbiBpdAotICAgICAgICBzZWxmLmFzc2VydF8oZCA9PSBzZWxmLnNwYW1sZSBvciBkID09IHNlbGYuc3BhbWJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZCA9PSBzZWxmLnNwYW1sZSBvciBkID09IHNlbGYuc3BhbWJlKQogICAgICAgICAjIHRyeSB0byByZWFkIGl0IGJhY2sKICAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKGQpCiAgICAgICAgIGYgPSByZWFkZXIocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksIHUic3BhbXNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB1InNwYW1zcGFtIikKIAogICAgIGRlZiB0ZXN0X2JhZGJvbShzZWxmKToKICAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCJceGZmXHhmZiIpCkBAIC02NzMsNyArNjczLDcgQEAKIAogY2xhc3MgRXNjYXBlRGVjb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvZGVjcy5lc2NhcGVfZGVjb2RlKCIiKSwgKCIiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuZXNjYXBlX2RlY29kZSgiIiksICgiIiwgMCkpCiAKIGNsYXNzIFJlY29kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVjb2Rpbmcoc2VsZik6CkBAIC04MDAsMTEgKzgwMCwxMSBAQAogICAgICAgICAgICAgIyBjb2RlIHByb2R1Y2VzIG9ubHkgbG93ZXIgY2FzZS4gQ29udmVydGluZyBqdXN0IHB1bnkgdG8KICAgICAgICAgICAgICMgbG93ZXIgaXMgYWxzbyBpbnN1ZmZpY2llbnQsIHNpbmNlIHNvbWUgb2YgdGhlIGlucHV0IGNoYXJhY3RlcnMKICAgICAgICAgICAgICMgYXJlIHVwcGVyIGNhc2UuCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmkuZW5jb2RlKCJwdW55Y29kZSIpLmxvd2VyKCksIHB1bnkubG93ZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pLmVuY29kZSgicHVueWNvZGUiKS5sb3dlcigpLCBwdW55Lmxvd2VyKCkpCiAKICAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CiAgICAgICAgIGZvciB1bmksIHB1bnkgaW4gcHVueWNvZGVfdGVzdGNhc2VzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pLCBwdW55LmRlY29kZSgicHVueWNvZGUiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pLCBwdW55LmRlY29kZSgicHVueWNvZGUiKSkKIAogY2xhc3MgVW5pY29kZUludGVybmFsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfYnVnMTI1MTMwMChzZWxmKToKQEAgLTgyNiw3ICs4MjYsNyBAQAogICAgICAgICAgICAgZm9yIGludGVybmFsLCB1bmkgaW4gb2s6CiAgICAgICAgICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwgPSAiIi5qb2luKHJldmVyc2VkKGludGVybmFsKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmksIGludGVybmFsLmRlY29kZSgidW5pY29kZV9pbnRlcm5hbCIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pLCBpbnRlcm5hbC5kZWNvZGUoInVuaWNvZGVfaW50ZXJuYWwiKSkKICAgICAgICAgICAgIGZvciBpbnRlcm5hbCBpbiBub3Rfb2s6CiAgICAgICAgICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwgPSAiIi5qb2luKHJldmVyc2VkKGludGVybmFsKSkKQEAgLTgzOCwxMCArODM4LDEwIEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgxMVx4MTFceDAwIi5kZWNvZGUoInVuaWNvZGVfaW50ZXJuYWwiKQogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciwgZXg6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoInVuaWNvZGVfaW50ZXJuYWwiLCBleC5lbmNvZGluZykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiXHgwMFx4MDBceDAwXHgwMFx4MDBceDExXHgxMVx4MDAiLCBleC5vYmplY3QpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNCwgZXguc3RhcnQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoOCwgZXguZW5kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInVuaWNvZGVfaW50ZXJuYWwiLCBleC5lbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJceDAwXHgwMFx4MDBceDAwXHgwMFx4MTFceDExXHgwMCIsIGV4Lm9iamVjdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQsIGV4LnN0YXJ0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOCwgZXguZW5kKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQogCkBAIC04NTIsMTAgKzg1MiwxNiBAQAogICAgICAgICAgICAgYWIgPSB1ImFiIi5lbmNvZGUoInVuaWNvZGVfaW50ZXJuYWwiKQogICAgICAgICAgICAgaWdub3JlZCA9IGRlY29kZXIoIiVzXHgyMlx4MjJceDIyXHgyMiVzIiAlIChhYls6NF0sIGFiWzQ6XSksCiAgICAgICAgICAgICAgICAgIlVuaWNvZGVJbnRlcm5hbFRlc3QiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKHUiYWIiLCAxMiksIGlnbm9yZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh1ImFiIiwgMTIpLCBpZ25vcmVkKQorCisgICAgZGVmIHRlc3RfZW5jb2RlX2xlbmd0aChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAzNzM5CisgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0ZW5jb2RlcigidW5pY29kZV9pbnRlcm5hbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlcih1ImEiKVsxXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyKHUiXHhlOVx1MDE0MiIpWzFdLCAyKQogCiAgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0ZW5jb2Rlcigic3RyaW5nLWVzY2FwZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVuY29kZXIocidceDAwJylbMV0sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RlcihyJ1x4MDAnKVsxXSwgNCkKIAogIyBGcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpZG4vZHJhZnQtam9zZWZzc29uLWlkbi10ZXN0LXZlY3RvcnMuaHRtbAogbmFtZXByZXBfdGVzdHMgPSBbCkBAIC0xMDI2LDEwMiArMTAzMiwxMDIgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJlcHBlZCA9IHVuaWNvZGUocHJlcHBlZCwgInV0Zi04IikKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5hbWVwcmVwKG9yaWcpLCBwcmVwcGVkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVwcmVwKG9yaWcpLCBwcmVwcGVkKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQoIlRlc3QgMy4lZDogJXMiICUgKHBvcysxLCBzdHIoZSkpKQogCiBjbGFzcyBJRE5BQ29kZWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9idWlsdGluX2RlY29kZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pY29kZSgicHl0aG9uLm9yZyIsICJpZG5hIiksIHUicHl0aG9uLm9yZyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWNvZGUoInB5dGhvbi5vcmcuIiwgImlkbmEiKSwgdSJweXRob24ub3JnLiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWNvZGUoInhuLS1weXRobi1tdWEub3JnIiwgImlkbmEiKSwgdSJweXRoXHhmNm4ub3JnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pY29kZSgieG4tLXB5dGhuLW11YS5vcmcuIiwgImlkbmEiKSwgdSJweXRoXHhmNm4ub3JnLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgicHl0aG9uLm9yZyIsICJpZG5hIiksIHUicHl0aG9uLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgicHl0aG9uLm9yZy4iLCAiaWRuYSIpLCB1InB5dGhvbi5vcmcuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCJ4bi0tcHl0aG4tbXVhLm9yZyIsICJpZG5hIiksIHUicHl0aFx4ZjZuLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgieG4tLXB5dGhuLW11YS5vcmcuIiwgImlkbmEiKSwgdSJweXRoXHhmNm4ub3JnLiIpCiAKICAgICBkZWYgdGVzdF9idWlsdGluX2VuY29kZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModSJweXRob24ub3JnIi5lbmNvZGUoImlkbmEiKSwgInB5dGhvbi5vcmciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygicHl0aG9uLm9yZy4iLmVuY29kZSgiaWRuYSIpLCAicHl0aG9uLm9yZy4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1InB5dGhceGY2bi5vcmciLmVuY29kZSgiaWRuYSIpLCAieG4tLXB5dGhuLW11YS5vcmciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1InB5dGhceGY2bi5vcmcuIi5lbmNvZGUoImlkbmEiKSwgInhuLS1weXRobi1tdWEub3JnLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJweXRob24ub3JnIi5lbmNvZGUoImlkbmEiKSwgInB5dGhvbi5vcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJweXRob24ub3JnLiIuZW5jb2RlKCJpZG5hIiksICJweXRob24ub3JnLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJweXRoXHhmNm4ub3JnIi5lbmNvZGUoImlkbmEiKSwgInhuLS1weXRobi1tdWEub3JnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InB5dGhceGY2bi5vcmcuIi5lbmNvZGUoImlkbmEiKSwgInhuLS1weXRobi1tdWEub3JnLiIpCiAKICAgICBkZWYgdGVzdF9zdHJlYW0oc2VsZik6CiAgICAgICAgIGltcG9ydCBTdHJpbmdJTwogICAgICAgICByID0gY29kZWNzLmdldHJlYWRlcigiaWRuYSIpKFN0cmluZ0lPLlN0cmluZ0lPKCJhYmMiKSkKICAgICAgICAgci5yZWFkKDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHIucmVhZCgpLCB1IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5yZWFkKCksIHUiIikKIAogICAgIGRlZiB0ZXN0X2luY3JlbWVudGFsX2RlY29kZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZGVjb2RlKCJweXRob24ub3JnIiwgImlkbmEiKSksCiAgICAgICAgICAgICB1InB5dGhvbi5vcmciCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZGVjb2RlKCJweXRob24ub3JnLiIsICJpZG5hIikpLAogICAgICAgICAgICAgdSJweXRob24ub3JnLiIKICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICIiLmpvaW4oY29kZWNzLml0ZXJkZWNvZGUoInhuLS1weXRobi1tdWEub3JnLiIsICJpZG5hIikpLAogICAgICAgICAgICAgdSJweXRoXHhmNm4ub3JnLiIKICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICIiLmpvaW4oY29kZWNzLml0ZXJkZWNvZGUoInhuLS1weXRobi1tdWEub3JnLiIsICJpZG5hIikpLAogICAgICAgICAgICAgdSJweXRoXHhmNm4ub3JnLiIKICAgICAgICAgKQogCiAgICAgICAgIGRlY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKCJpZG5hIikoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLmRlY29kZSgieG4tLXhhbSIsICksIHUiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5kZWNvZGUoInBsZS05dGEubyIsICksIHUiXHhlNHhhbXBsZS4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLmRlY29kZSh1InJnIiksIHUiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5kZWNvZGUodSIiLCBUcnVlKSwgdSJvcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCJ4bi0teGFtIiwgKSwgdSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCJwbGUtOXRhLm8iLCApLCB1Ilx4ZTR4YW1wbGUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSh1InJnIiksIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSh1IiIsIFRydWUpLCB1Im9yZyIpCiAKICAgICAgICAgZGVjb2Rlci5yZXNldCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIuZGVjb2RlKCJ4bi0teGFtIiwgKSwgdSIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLmRlY29kZSgicGxlLTl0YS5vIiwgKSwgdSJceGU0eGFtcGxlLiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIuZGVjb2RlKCJyZy4iKSwgdSJvcmcuIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5kZWNvZGUoIiIsIFRydWUpLCB1IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoInhuLS14YW0iLCApLCB1IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoInBsZS05dGEubyIsICksIHUiXHhlNHhhbXBsZS4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCJyZy4iKSwgdSJvcmcuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgiIiwgVHJ1ZSksIHUiIikKIAogICAgIGRlZiB0ZXN0X2luY3JlbWVudGFsX2VuY29kZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZW5jb2RlKHUicHl0aG9uLm9yZyIsICJpZG5hIikpLAogICAgICAgICAgICAgInB5dGhvbi5vcmciCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZW5jb2RlKHUicHl0aG9uLm9yZy4iLCAiaWRuYSIpKSwKICAgICAgICAgICAgICJweXRob24ub3JnLiIKICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICIiLmpvaW4oY29kZWNzLml0ZXJlbmNvZGUodSJweXRoXHhmNm4ub3JnLiIsICJpZG5hIikpLAogICAgICAgICAgICAgInhuLS1weXRobi1tdWEub3JnLiIKICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICIiLmpvaW4oY29kZWNzLml0ZXJlbmNvZGUodSJweXRoXHhmNm4ub3JnLiIsICJpZG5hIikpLAogICAgICAgICAgICAgInhuLS1weXRobi1tdWEub3JnLiIKICAgICAgICAgKQogCiAgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKCJpZG5hIikoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlbmNvZGVyLmVuY29kZSh1Ilx4ZTR4IiksICIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlbmNvZGVyLmVuY29kZSh1ImFtcGxlLm9yZyIpLCAieG4tLXhhbXBsZS05dGEuIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZW5jb2Rlci5lbmNvZGUodSIiLCBUcnVlKSwgIm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSJceGU0eCIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1ImFtcGxlLm9yZyIpLCAieG4tLXhhbXBsZS05dGEuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1IiIsIFRydWUpLCAib3JnIikKIAogICAgICAgICBlbmNvZGVyLnJlc2V0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZW5jb2Rlci5lbmNvZGUodSJceGU0eCIpLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZW5jb2Rlci5lbmNvZGUodSJhbXBsZS5vcmcuIiksICJ4bi0teGFtcGxlLTl0YS5vcmcuIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZW5jb2Rlci5lbmNvZGUodSIiLCBUcnVlKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSJceGU0eCIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1ImFtcGxlLm9yZy4iKSwgInhuLS14YW1wbGUtOXRhLm9yZy4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUiIiwgVHJ1ZSksICIiKQogCiBjbGFzcyBDb2RlY3NNb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29kZWNzLmRlY29kZSgnXHhlNFx4ZjZceGZjJywgJ2xhdGluLTEnKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuZGVjb2RlKCdceGU0XHhmNlx4ZmMnLCAnbGF0aW4tMScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1J1x4ZTRceGY2XHhmYycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLmRlY29kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29kZWNzLmRlY29kZSgnYWJjJyksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuZGVjb2RlKCdhYmMnKSwgdSdhYmMnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy5kZWNvZGUsICdceGZmJywgJ2FzY2lpJykKIAogICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29kZWNzLmVuY29kZSh1J1x4ZTRceGY2XHhmYycsICdsYXRpbi0xJyksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmVuY29kZSh1J1x4ZTRceGY2XHhmYycsICdsYXRpbi0xJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdceGU0XHhmNlx4ZmMnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5lbmNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yLCBjb2RlY3MuZW5jb2RlLCAiZm9vIiwgIl9fc3BhbV9fIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29kZWNzLmVuY29kZSh1J2FiYycpLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuZW5jb2RlKHUnYWJjJyksICdhYmMnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIGNvZGVjcy5lbmNvZGUsIHUnXHhmZmZmJywgJ2FzY2lpJykKIAogICAgIGRlZiB0ZXN0X3JlZ2lzdGVyKHNlbGYpOgpAQCAtMTE1NywxOSArMTE2MywxOSBAQAogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5yZWFkZXIoc2VsZi5zdHJlYW0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZGxpbmVzKCksIFt1J1x1ZDU1Y1xuJywgdSdcdWFlMDAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbdSdcdWQ1NWNcbicsIHUnXHVhZTAwJ10pCiAKIGNsYXNzIEVuY29kZWRGaWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKICAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCdceGVkXHg5NVx4OWNcblx4ZWFceGI4XHg4MCcpCiAgICAgICAgIGVmID0gY29kZWNzLkVuY29kZWRGaWxlKGYsICd1dGYtMTYtbGUnLCAndXRmLTgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlZi5yZWFkKCksICdcXFx4ZDVcblx4MDBceDAwXHhhZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWYucmVhZCgpLCAnXFxceGQ1XG5ceDAwXHgwMFx4YWUnKQogCiAgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgIGVmID0gY29kZWNzLkVuY29kZWRGaWxlKGYsICd1dGYtOCcsICdsYXRpbjEnKQogICAgICAgICBlZi53cml0ZSgnXHhjM1x4YmMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLmdldHZhbHVlKCksICdceGZjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHZhbHVlKCksICdceGZjJykKIAogY2xhc3MgU3RyMlN0clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xMTc4LDE0ICsxMTg0LDE0IEBACiAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoImJhc2U2NF9jb2RlYyIpKFN0cmluZ0lPLlN0cmluZ0lPKHNpbikpCiAgICAgICAgIHNvdXQgPSByZWFkZXIucmVhZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgIlx4ODAiKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzb3V0LCBzdHIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc291dCwgc3RyKQogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CiAgICAgICAgIHNpbiA9ICJceDgwIi5lbmNvZGUoImJhc2U2NF9jb2RlYyIpCiAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoImJhc2U2NF9jb2RlYyIpKFN0cmluZ0lPLlN0cmluZ0lPKHNpbikpCiAgICAgICAgIHNvdXQgPSByZWFkZXIucmVhZGxpbmUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXQsICJceDgwIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc291dCwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNvdXQsIHN0cikKIAogYWxsX3VuaWNvZGVfZW5jb2RpbmdzID0gWwogICAgICJhc2NpaSIsCkBAIC0xMjA5LDYgKzEyMTUsNyBAQAogICAgICJjcDQyNCIsCiAgICAgImNwNDM3IiwKICAgICAiY3A1MDAiLAorICAgICJjcDcyMCIsCiAgICAgImNwNzM3IiwKICAgICAiY3A3NzUiLAogICAgICJjcDg1MCIsCkBAIC0xMjE2LDYgKzEyMjMsNyBAQAogICAgICJjcDg1NSIsCiAgICAgImNwODU2IiwKICAgICAiY3A4NTciLAorICAgICJjcDg1OCIsCiAgICAgImNwODYwIiwKICAgICAiY3A4NjEiLAogICAgICJjcDg2MiIsCkBAIC0xMzQ3LDggKzEzNTUsNyBAQAogICAgICAgICAgICAgICAgIG5hbWUgPSAibGF0aW5fMSIKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RpbmcucmVwbGFjZSgiXyIsICItIiksIG5hbWUucmVwbGFjZSgiXyIsICItIikpCiAgICAgICAgICAgICAoYnl0ZXMsIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKHMpCi0gICAgICAgICAgICBpZiBlbmNvZGluZyAhPSAidW5pY29kZV9pbnRlcm5hbCI6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBsZW4ocyksICIlciAhPSAlciAoZW5jb2Rpbmc9JXIpIiAlIChzaXplLCBsZW4ocyksIGVuY29kaW5nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKHMpLCAiJXIgIT0gJXIgKGVuY29kaW5nPSVyKSIgJSAoc2l6ZSwgbGVuKHMpLCBlbmNvZGluZykpCiAgICAgICAgICAgICAoY2hhcnMsIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKGJ5dGVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFycywgcywgIiVyICE9ICVyIChlbmNvZGluZz0lcikiICUgKGNoYXJzLCBzLCBlbmNvZGluZykpCiAKQEAgLTE0NzEsMzMgKzE0NzgsMzMgQEAKIAogY2xhc3MgQ2hhcm1hcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2RlY29kZV93aXRoX3N0cmluZ19tYXAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAic3RyaWN0IiwgdSJhYmMiKSwKICAgICAgICAgICAgICh1ImFiYyIsIDMpCiAgICAgICAgICkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInJlcGxhY2UiLCB1ImFiIiksCiAgICAgICAgICAgICAodSJhYlx1ZmZmZCIsIDMpCiAgICAgICAgICkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInJlcGxhY2UiLCB1ImFiXHVmZmZlIiksCiAgICAgICAgICAgICAodSJhYlx1ZmZmZCIsIDMpCiAgICAgICAgICkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgImlnbm9yZSIsIHUiYWIiKSwKICAgICAgICAgICAgICh1ImFiIiwgMykKICAgICAgICAgKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAiaWdub3JlIiwgdSJhYlx1ZmZmZSIpLAogICAgICAgICAgICAgKHUiYWIiLCAzKQogICAgICAgICApCiAKICAgICAgICAgYWxsYnl0ZXMgPSAiIi5qb2luKGNocihpKSBmb3IgaSBpbiB4cmFuZ2UoMjU2KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoYWxsYnl0ZXMsICJpZ25vcmUiLCB1IiIpLAogICAgICAgICAgICAgKHUiIiwgbGVuKGFsbGJ5dGVzKSkKICAgICAgICAgKQpAQCAtMTUwNiwxNCArMTUxMywxNCBAQAogICAgIGRlZiB0ZXN0X2VuY29kZWRmaWxlKHNlbGYpOgogICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oIlx4YzNceGJjIikKICAgICAgICAgd2l0aCBjb2RlY3MuRW5jb2RlZEZpbGUoZiwgImxhdGluLTEiLCAidXRmLTgiKSBhcyBlZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVmLnJlYWQoKSwgIlx4ZmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlZi5yZWFkKCksICJceGZjIikKIAogICAgIGRlZiB0ZXN0X3N0cmVhbXJlYWRlcndyaXRlcihzZWxmKToKICAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCJceGMzXHhiYyIpCiAgICAgICAgIGluZm8gPSBjb2RlY3MubG9va3VwKCJ1dGYtOCIpCiAgICAgICAgIHdpdGggY29kZWNzLlN0cmVhbVJlYWRlcldyaXRlcihmLCBpbmZvLnN0cmVhbXJlYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uc3RyZWFtd3JpdGVyLCAnc3RyaWN0JykgYXMgc3J3OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3J3LnJlYWQoKSwgdSJceGZjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3J3LnJlYWQoKSwgdSJceGZjIikKIAogCiBjbGFzcyBCb21UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE1MzEsMjcgKzE1MzgsMjcgQEAKICAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCiAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQogICAgICAgICAgICAgICAgIGYuc2VlaygwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgpLCBkYXRhICogMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhICogMikKICAgICAgICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgZGF0YSAqIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSAqIDIpCiAKICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgQk9NIGlzIHdyaXR0ZW4gYWZ0ZXIgYSBzZWVrKDApCiAgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3KycsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YVswXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhmLnRlbGwoKSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGYudGVsbCgpLCAwKQogICAgICAgICAgICAgICAgIGYuc2VlaygwKQogICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKICAgICAgICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhKQogCiAgICAgICAgICAgICAjIChTdHJlYW1Xcml0ZXIpIENoZWNrIHRoYXQgdGhlIEJPTSBpcyB3cml0dGVuIGFmdGVyIGEgc2VlaygwKQogICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndysnLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlci53cml0ZShkYXRhWzBdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGYud3JpdGVyLnRlbGwoKSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGYud3JpdGVyLnRlbGwoKSwgMCkKICAgICAgICAgICAgICAgICBmLndyaXRlci5zZWVrKDApCiAgICAgICAgICAgICAgICAgZi53cml0ZXIud3JpdGUoZGF0YSkKICAgICAgICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhKQogCiAgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIEJPTSBpcyBub3Qgd3JpdHRlbiBhZnRlciBhIHNlZWsoKSBhdCBhIHBvc2l0aW9uCiAgICAgICAgICAgICAjIGRpZmZlcmVudCB0aGFuIHRoZSBzdGFydApAQCAtMTU2MCw3ICsxNTY3LDcgQEAKICAgICAgICAgICAgICAgICBmLnNlZWsoZi50ZWxsKCkpCiAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQogICAgICAgICAgICAgICAgIGYuc2VlaygwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgpLCBkYXRhICogMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhICogMikKIAogICAgICAgICAgICAgIyAoU3RyZWFtV3JpdGVyKSBDaGVjayB0aGF0IHRoZSBCT00gaXMgbm90IHdyaXR0ZW4gYWZ0ZXIgYSBzZWVrKCkKICAgICAgICAgICAgICMgYXQgYSBwb3NpdGlvbiBkaWZmZXJlbnQgdGhhbiB0aGUgc3RhcnQKQEAgLTE1NjksNyArMTU3Niw3IEBACiAgICAgICAgICAgICAgICAgZi53cml0ZXIuc2VlayhmLndyaXRlci50ZWxsKCkpCiAgICAgICAgICAgICAgICAgZi53cml0ZXIud3JpdGUoZGF0YSkKICAgICAgICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgZGF0YSAqIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSAqIDIpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2Rlb3AucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVvcC5weQppbmRleCBmZmY5NjljLi45OWZlNmY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVvcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVvcC5weQpAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAnJydzdWNjZWVkIGlmZiBzdHIgaXMgYSB2YWxpZCBwaWVjZSBvZiBjb2RlJycnCiAgICAgICAgIGlmIGlzX2p5dGhvbjoKICAgICAgICAgICAgIGNvZGUgPSBjb21waWxlX2NvbW1hbmQoc3RyLCAiPGlucHV0PiIsIHN5bWJvbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhjb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvZGUpCiAgICAgICAgICAgICBpZiBzeW1ib2wgPT0gInNpbmdsZSI6CiAgICAgICAgICAgICAgICAgZCxyID0ge30se30KICAgICAgICAgICAgICAgICBzYXZlZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CkBAIC0zNywxNCArMzcsMTQgQEAKICAgICAgICAgICAgICAgICBjdHggPSB7J2EnOiAyfQogICAgICAgICAgICAgICAgIGQgPSB7ICd2YWx1ZSc6IGV2YWwoY29kZSxjdHgpIH0KICAgICAgICAgICAgICAgICByID0geyAndmFsdWUnOiBldmFsKHN0cixjdHgpIH0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWZ5X2NhbGxhYmxlcyhyKSx1bmlmeV9jYWxsYWJsZXMoZCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWZ5X2NhbGxhYmxlcyhyKSx1bmlmeV9jYWxsYWJsZXMoZCkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBleHBlY3RlZCA9IGNvbXBpbGUoc3RyLCAiPGlucHV0PiIsIHN5bWJvbCwgUHlDRl9ET05UX0lNUExZX0RFREVOVCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCBjb21waWxlX2NvbW1hbmQoc3RyLCAiPGlucHV0PiIsIHN5bWJvbCksIGV4cGVjdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21waWxlX2NvbW1hbmQoc3RyLCAiPGlucHV0PiIsIHN5bWJvbCksIGV4cGVjdGVkKQogCiAgICAgZGVmIGFzc2VydEluY29tcGxldGUoc2VsZiwgc3RyLCBzeW1ib2w9J3NpbmdsZScpOgogICAgICAgICAnJydzdWNjZWVkIGlmZiBzdHIgaXMgdGhlIHN0YXJ0IG9mIGEgdmFsaWQgcGllY2Ugb2YgY29kZScnJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyggY29tcGlsZV9jb21tYW5kKHN0ciwgc3ltYm9sPXN5bWJvbCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGlsZV9jb21tYW5kKHN0ciwgc3ltYm9sPXN5bWJvbCksIE5vbmUpCiAKICAgICBkZWYgYXNzZXJ0SW52YWxpZChzZWxmLCBzdHIsIHN5bWJvbD0nc2luZ2xlJywgaXNfc3ludGF4PTEpOgogICAgICAgICAnJydzdWNjZWVkIGlmZiBzdHIgaXMgdGhlIHN0YXJ0IG9mIGFuIGludmFsaWQgcGllY2Ugb2YgY29kZScnJwpAQCAtNTIsMjEgKzUyLDIxIEBACiAgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQoc3RyLHN5bWJvbD1zeW1ib2wpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiB0aHJvd24gZm9yIGludmFsaWQgY29kZSIpCiAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc19zeW50YXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfc3ludGF4KQogICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNfc3ludGF4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc19zeW50YXgpCiAKICAgICBkZWYgdGVzdF92YWxpZChzZWxmKToKICAgICAgICAgYXYgPSBzZWxmLmFzc2VydFZhbGlkCiAKICAgICAgICAgIyBzcGVjaWFsIGNhc2UKICAgICAgICAgaWYgbm90IGlzX2p5dGhvbjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbXBpbGVfY29tbWFuZCgiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSgicGFzcyIsICI8aW5wdXQ+IiwgJ3NpbmdsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNGX0RPTlRfSU1QTFlfREVERU5UKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbXBpbGVfY29tbWFuZCgiXG4iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlKCJwYXNzIiwgIjxpbnB1dD4iLCAnc2luZ2xlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q0ZfRE9OVF9JTVBMWV9ERURFTlQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21waWxlX2NvbW1hbmQoIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlKCJwYXNzIiwgIjxpbnB1dD4iLCAnc2luZ2xlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNGX0RPTlRfSU1QTFlfREVERU5UKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGlsZV9jb21tYW5kKCJcbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlKCJwYXNzIiwgIjxpbnB1dD4iLCAnc2luZ2xlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNGX0RPTlRfSU1QTFlfREVERU5UKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGF2KCIiKQogICAgICAgICAgICAgYXYoIlxuIikKQEAgLTI5MCwxNCArMjkwLDEwIEBACiAgICAgICAgIGFpKCJbaSBmb3IgaSBpbiByYW5nZSgxMCldID0gKDEsIDIsIDMpIikKIAogICAgIGRlZiB0ZXN0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb21waWxlX2NvbW1hbmQoImEgPSAxXG4iLCAiYWJjIikuY29fZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUoImEgPSAxXG4iLCAiYWJjIiwgJ3NpbmdsZScpLmNvX2ZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhjb21waWxlX2NvbW1hbmQoImEgPSAxXG4iLCAiYWJjIikuY29fZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUoImEgPSAxXG4iLCAiZGVmIiwgJ3NpbmdsZScpLmNvX2ZpbGVuYW1lKQotCi0gICAgZGVmIHRlc3Rfbm9fdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgotICAgICAgICBjb2RlID0gY29tcGlsZV9jb21tYW5kKCInXHJmb29cciciLCBzeW1ib2w9J2V2YWwnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZSksICdccmZvb1xyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21waWxlX2NvbW1hbmQoImEgPSAxXG4iLCAiYWJjIikuY29fZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSgiYSA9IDFcbiIsICJhYmMiLCAnc2luZ2xlJykuY29fZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY29tcGlsZV9jb21tYW5kKCJhID0gMVxuIiwgImFiYyIpLmNvX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUoImEgPSAxXG4iLCAiZGVmIiwgJ3NpbmdsZScpLmNvX2ZpbGVuYW1lKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkKaW5kZXggZTgzMDE1ZS4uN2Y1ZGRiMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkKQEAgLTE2LDExICsxNiwyMCBAQAogCiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCiAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG1vZHVsZV9uYW1lICsgJy5weScpCi0gICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZnA6CisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCB0ZXh0LCBmaWxlbmFtZSwgJ2V4ZWMnKQogCisgICAgZGVmIHRlc3RfZXJyb3JfZnJvbV9zdHJpbmcoc2VsZik6CisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2Mjg5CisgICAgICAgIGlucHV0ID0gdSIjIGNvZGluZzogYXNjaWlcblxOe1NOT1dNQU59Ii5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIGNvbXBpbGUoaW5wdXQsICI8c3RyaW5nPiIsICJleGVjIikKKyAgICAgICAgZXhwZWN0ZWQgPSAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweGUyIGluIHBvc2l0aW9uIDE2OiAiIFwKKyAgICAgICAgICAgICAgICAgICAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuZXhjZXB0aW9uLmFyZ3NbMF0uc3RhcnRzd2l0aChleHBlY3RlZCkpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDb2RpbmdUZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZXJjaW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2VyY2lvbi5weQppbmRleCBkODQyZWU5Li4yYjU1YzQxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZXJjaW9uLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29lcmNpb24ucHkKQEAgLTI2Niw5ICsyNjYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2EgJXMgYicgJSBvcCwgeydhJzogYSwgJ2InOiBifSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZvcm1hdF9yZXN1bHQocmVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9yZXN1bHQoZXZhbCgnYSAlcyBiJyAlIG9wKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMgJXMgJXMgPT0gJXMgZmFpbGVkJyAlIChhLCBvcCwgYiwgcmVzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X3Jlc3VsdChyZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfcmVzdWx0KGV2YWwoJ2EgJXMgYicgJSBvcCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMgJXMgJXMgPT0gJXMgZmFpbGVkJyAlIChhLCBvcCwgYiwgcmVzKSkKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgeiA9IGNvcHkuY29weShhKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgY29weS5FcnJvcjoKQEAgLTI4Miw3ICsyODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiVHlwZUVycm9yIG5vdCByYWlzZWQiKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgZXhlYygneiAlcz0gYicgJSBvcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGlyZXMsIHopCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlyZXMsIHopCiAKICAgICBkZWYgdGVzdF9wcmVmaXhfYmlub3BzKHNlbGYpOgogICAgICAgICBmb3IgaWEsIGEgaW4gZW51bWVyYXRlKGNhbmRpZGF0ZXMpOgpAQCAtMjkzLDkgKzI5Myw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMoYSwgYiknICUgb3AsIHsnYSc6IGEsICdiJzogYn0pCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmb3JtYXRfcmVzdWx0KHJlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfcmVzdWx0KGV2YWwoJyVzKGEsIGIpJyAlIG9wKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMoJXMsICVzKSA9PSAlcyBmYWlsZWQnICUgKG9wLCBhLCBiLCByZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfcmVzdWx0KHJlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9yZXN1bHQoZXZhbCgnJXMoYSwgYiknICUgb3ApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzKCVzLCAlcykgPT0gJXMgZmFpbGVkJyAlIChvcCwgYSwgYiwgcmVzKSkKIAogICAgIGRlZiB0ZXN0X2NtcHR5cGVzKHNlbGYpOgogICAgICAgICAjIEJ1aWx0LWluIHRwX2NvbXBhcmUgc2xvdHMgZXhwZWN0IHRoZWlyIGFyZ3VtZW50cyB0byBoYXZlIHRoZQpAQCAtMzAzLDIxICszMDMsMjEgQEAKICAgICAgICAgIyBTRiAjOTgwMzUyCiAgICAgICAgIGV2aWxfY29lcmNlciA9IENvZXJjZVRvKDQyKQogICAgICAgICAjIE1ha2Ugc3VyZSB0aGVzZSBkb24ndCBjcmFzaCBhbnkgbW9yZQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhjbXAodSdmaXNoJywgZXZpbF9jb2VyY2VyKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoY21wKHNsaWNlKDEpLCBldmlsX2NvZXJjZXIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNtcCh1J2Zpc2gnLCBldmlsX2NvZXJjZXIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNtcChzbGljZSgxKSwgZXZpbF9jb2VyY2VyKSwgMCkKICAgICAgICAgIyAuLi5idXQgdGhhdCB0aGlzIHN0aWxsIHdvcmtzCiAgICAgICAgIGNsYXNzIFdhY2t5Q29tcGFyZXIob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvdGhlciA9PSA0MiwgJ2V4cGVjdGVkIGV2aWxfY29lcmNlciwgZ290ICVyJyAlIG90aGVyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdGhlciA9PSA0MiwgJ2V4cGVjdGVkIGV2aWxfY29lcmNlciwgZ290ICVyJyAlIG90aGVyKQogICAgICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBJbnZhbGlkIGNtcCBtYWtlcyB0aGlzIHVuaGFzaGFibGUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21wKFdhY2t5Q29tcGFyZXIoKSwgZXZpbF9jb2VyY2VyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoV2Fja3lDb21wYXJlcigpLCBldmlsX2NvZXJjZXIpLCAwKQogICAgICAgICAjIC4uLmFuZCBjbGFzc2ljIGNsYXNzZXMgdG9vLCBzaW5jZSB0aGF0IGNvZGUgcGF0aCBpcyBhIGxpdHRsZSBkaWZmZXJlbnQKICAgICAgICAgY2xhc3MgQ2xhc3NpY1dhY2t5Q29tcGFyZXI6CiAgICAgICAgICAgICBkZWYgX19jbXBfXyhzbGYsIG90aGVyKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8ob3RoZXIgPT0gNDIsICdleHBlY3RlZCBldmlsX2NvZXJjZXIsIGdvdCAlcicgJSBvdGhlcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3RoZXIgPT0gNDIsICdleHBlY3RlZCBldmlsX2NvZXJjZXIsIGdvdCAlcicgJSBvdGhlcikKICAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjbXAoQ2xhc3NpY1dhY2t5Q29tcGFyZXIoKSwgZXZpbF9jb2VyY2VyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoQ2xhc3NpY1dhY2t5Q29tcGFyZXIoKSwgZXZpbF9jb2VyY2VyKSwgMCkKIAogICAgIGRlZiB0ZXN0X2luZmluaXRlX3JlY19jbGFzc2ljX2NsYXNzZXMoc2VsZik6CiAgICAgICAgICMgaWYgX19jb2VyY2VfXygpIHJldHVybnMgaXRzIGFyZ3VtZW50cyByZXZlcnNlZCBpdCBjYXVzZXMgYW4gaW5maW5pdGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CmluZGV4IGY0OGFlNWEuLmY2YTQzZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQpAQCAtMSw5ICsxLDE0IEBACisKIGltcG9ydCB1bml0dGVzdCwgZG9jdGVzdCwgb3BlcmF0b3IKK2ltcG9ydCBpbnNwZWN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgQ291bnRlciwgT3JkZXJlZERpY3QKK2Zyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cwogaW1wb3J0IHBpY2tsZSwgY1BpY2tsZSwgY29weQorZnJvbSByYW5kb20gaW1wb3J0IHJhbmRyYW5nZSwgc2h1ZmZsZQogaW1wb3J0IGtleXdvcmQKIGltcG9ydCByZQoraW1wb3J0IHN5cwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgSGFzaGFibGUsIEl0ZXJhYmxlLCBJdGVyYXRvcgogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2l6ZWQsIENvbnRhaW5lciwgQ2FsbGFibGUKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IFNldCwgTXV0YWJsZVNldApAQCAtMTcsNyArMjIsNiBAQAogICAgIGRlZiB0ZXN0X2ZhY3Rvcnkoc2VsZik6CiAgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX25hbWVfXywgJ1BvaW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX2RvY19fLCAnUG9pbnQoeCwgeSknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBvaW50Ll9fc2xvdHNfXywgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUG9pbnQuX19tb2R1bGVfXywgX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUG9pbnQuX19nZXRpdGVtX18sIHR1cGxlLl9fZ2V0aXRlbV9fKQpAQCAtMzcsMTMgKzQxLDMwIEBACiAgICAgICAgIG5hbWVkdHVwbGUoJ18nLCAnYSBiIGMnKSAgICAgICAgIyBUZXN0IGxlYWRpbmcgdW5kZXJzY29yZXMgaW4gYSB0eXBlbmFtZQogCiAgICAgICAgIG50ID0gbmFtZWR0dXBsZSgnbnQnLCB1J3RoZSBxdWljayBicm93biBmb3gnKSAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB1bmljb2RlIGlucHV0Ci0gICAgICAgIHNlbGYuYXNzZXJ0XygidSciIG5vdCBpbiByZXByKG50Ll9maWVsZHMpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJ1JyIsIHJlcHIobnQuX2ZpZWxkcykpCiAgICAgICAgIG50ID0gbmFtZWR0dXBsZSgnbnQnLCAodSd0aGUnLCB1J3F1aWNrJykpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB1bmljb2RlIGlucHV0Ci0gICAgICAgIHNlbGYuYXNzZXJ0XygidSciIG5vdCBpbiByZXByKG50Ll9maWVsZHMpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJ1JyIsIHJlcHIobnQuX2ZpZWxkcykpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQb2ludC5fbWFrZSwgWzExXSkgICAgICAgICAgICAgICAgICAgICAjIGNhdGNoIHRvbyBmZXcgYXJncwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFBvaW50Ll9tYWtlLCBbMTEsIDIyLCAzM10pICAgICAgICAgICAgICMgY2F0Y2ggdG9vIG1hbnkgYXJncwogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZmFjdG9yeV9kb2NfYXR0cihzZWxmKToKKyAgICAgICAgUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBvaW50Ll9fZG9jX18sICdQb2ludCh4LCB5KScpCisKKyAgICBkZWYgdGVzdF9uYW1lX2ZpeGVyKHNlbGYpOgorICAgICAgICBmb3Igc3BlYywgcmVuYW1lZCBpbiBbCisgICAgICAgICAgICBbKCdlZmcnLCAnZyVoaScpLCAgKCdlZmcnLCAnXzEnKV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWVsZCB3aXRoIG5vbi1hbHBoYSBjaGFyCisgICAgICAgICAgICBbKCdhYmMnLCAnY2xhc3MnKSwgKCdhYmMnLCAnXzEnKV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWVsZCBoYXMga2V5d29yZAorICAgICAgICAgICAgWygnOGVmZycsICc5Z2hpJyksICgnXzAnLCAnXzEnKV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmllbGQgc3RhcnRzIHdpdGggZGlnaXQKKyAgICAgICAgICAgIFsoJ2FiYycsICdfZWZnJyksICgnYWJjJywgJ18xJyldLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpZWxkIHdpdGggbGVhZGluZyB1bmRlcnNjb3JlCisgICAgICAgICAgICBbKCdhYmMnLCAnZWZnJywgJ2VmZycsICdnaGknKSwgKCdhYmMnLCAnZWZnJywgJ18yJywgJ2doaScpXSwgICAgIyBkdXBsaWNhdGUgZmllbGQKKyAgICAgICAgICAgIFsoJ2FiYycsICcnLCAneCcpLCAoJ2FiYycsICdfMScsICd4JyldLCAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpZWxkbmFtZSBpcyBhIHNwYWNlCisgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVkdHVwbGUoJ05UJywgc3BlYywgcmVuYW1lPVRydWUpLl9maWVsZHMsIHJlbmFtZWQpCisKICAgICBkZWYgdGVzdF9pbnN0YW5jZShzZWxmKToKICAgICAgICAgUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknKQogICAgICAgICBwID0gUG9pbnQoMTEsIDIyKQpAQCAtNTcsOCArNzgsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsICdQb2ludChYWFg9MSwgeT0yKScsIGxvY2FscygpKSAgICMgd3Jvbmcga2V5d29yZCBhcmd1bWVudAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsICdQb2ludCh4PTEpJywgbG9jYWxzKCkpICAgICAgICAgICMgbWlzc2luZyBrZXl3b3JkIGFyZ3VtZW50CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihwKSwgJ1BvaW50KHg9MTEsIHk9MjIpJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdfX2RpY3RfXycgbm90IGluIGRpcihwKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZlcmlmeSBpbnN0YW5jZSBoYXMgbm8gZGljdAotICAgICAgICBzZWxmLmFzc2VydF8oJ19fd2Vha3JlZl9fJyBub3QgaW4gZGlyKHApKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdfX2RpY3RfXycsIGRpcihwKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZlcmlmeSBpbnN0YW5jZSBoYXMgbm8gZGljdAorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdfX3dlYWtyZWZfXycsIGRpcihwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQb2ludC5fbWFrZShbMTEsIDIyXSkpICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3QgX21ha2UgY2xhc3NtZXRob2QKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9maWVsZHMsICgneCcsICd5JykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3QgX2ZpZWxkcyBhdHRyaWJ1dGUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9yZXBsYWNlKHg9MSksICgxLCAyMikpICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3QgX3JlcGxhY2UgbWV0aG9kCkBAIC04NSw3ICsxMDYsNyBAQAogICAgICAgICBQb2ludCA9IG5hbWVkdHVwbGUoJ1BvaW50JywgJ3ggeScpCiAgICAgICAgIHAgPSBQb2ludCgxMSwgMjIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocCwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocCwgdHVwbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgKDExLCAyMikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYXRjaGVzIGEgcmVhbCB0dXBsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHApLCAoMTEsIDIyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29lcmNhYmxlIHRvIGEgcmVhbCB0dXBsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocCksIFsxMSwgMjJdKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29lcmNhYmxlIHRvIGEgbGlzdApAQCAtMjE1LDIxICsyMzYsMjEgQEAKIAogICAgICAgICAjIG5ldy1zdHlsZSBjbGFzcwogICAgICAgICBDID0gdHlwZSgnQycsIChvYmplY3QsKSwge25hbWU6IHN0dWJ9KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShDKCksIGFiYykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShDKCksIGFiYykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgYWJjKSkKICAgICAgICAgIyBvbGQtc3R5bGUgY2xhc3MKICAgICAgICAgY2xhc3MgQzogcGFzcwogICAgICAgICBzZXRhdHRyKEMsIG5hbWUsIHN0dWIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKEMoKSwgYWJjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKEMoKSwgYWJjKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBhYmMpKQogCiAgICAgICAgICMgbmV3LXN0eWxlIGNsYXNzCiAgICAgICAgIEMgPSB0eXBlKCdDJywgKG9iamVjdCwpLCB7J19faGFzaF9fJzogTm9uZX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShDKCksIGFiYykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShDKCksIGFiYykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEMsIGFiYykpCiAgICAgICAgICMgb2xkLXN0eWxlIGNsYXNzCiAgICAgICAgIGNsYXNzIEM6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKEMoKSwgYWJjKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKEMoKSwgYWJjKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQywgYWJjKSkKIAogICAgIGRlZiB2YWxpZGF0ZV9jb21wYXJpc29uKHNlbGYsIGluc3RhbmNlKToKQEAgLTI2OSw4ICsyOTAsOCBAQAogICAgICAgICAjIENoZWNrIHNvbWUgbm9uLWhhc2hhYmxlcwogICAgICAgICBub25fc2FtcGxlcyA9IFtsaXN0KCksIHNldCgpLCBkaWN0KCldCiAgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNpbnN0YW5jZSh4LCBIYXNoYWJsZSksIHJlcHIoeCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKHR5cGUoeCksIEhhc2hhYmxlKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBIYXNoYWJsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBIYXNoYWJsZSksIHJlcHIodHlwZSh4KSkpCiAgICAgICAgICMgQ2hlY2sgc29tZSBoYXNoYWJsZXMKICAgICAgICAgc2FtcGxlcyA9IFtOb25lLAogICAgICAgICAgICAgICAgICAgIGludCgpLCBmbG9hdCgpLCBjb21wbGV4KCksCkBAIC0yNzksOCArMzAwLDggQEAKICAgICAgICAgICAgICAgICAgICBpbnQsIGxpc3QsIG9iamVjdCwgdHlwZSwKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgIGZvciB4IGluIHNhbXBsZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZSh4LCBIYXNoYWJsZSksIHJlcHIoeCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyh0eXBlKHgpLCBIYXNoYWJsZSksIHJlcHIodHlwZSh4KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgSGFzaGFibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBIYXNoYWJsZSksIHJlcHIodHlwZSh4KSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgSGFzaGFibGUpCiAgICAgICAgICMgQ2hlY2sgZGlyZWN0IHN1YmNsYXNzaW5nCiAgICAgICAgIGNsYXNzIEgoSGFzaGFibGUpOgpAQCAtMjg4LDcgKzMwOSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEgsIHNlbGYpLl9faGFzaF9fKCkKICAgICAgICAgICAgIF9fZXFfXyA9IEhhc2hhYmxlLl9fZXFfXyAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChIKCkpLCAwKQotICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKGludCwgSCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhpbnQsIEgpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoSGFzaGFibGUsICdfX2hhc2hfXycpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfaXNpbnN0YW5jZShIYXNoYWJsZSwgJ19faGFzaF9fJykKIApAQCAtMjk2LDggKzMxNyw4IEBACiAgICAgICAgICMgQ2hlY2sgc29tZSBub24taXRlcmFibGVzCiAgICAgICAgIG5vbl9zYW1wbGVzID0gW05vbmUsIDQyLCAzLjE0LCAxal0KICAgICAgICAgZm9yIHggaW4gbm9uX3NhbXBsZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc2luc3RhbmNlKHgsIEl0ZXJhYmxlKSwgcmVwcih4KSkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3ModHlwZSh4KSwgSXRlcmFibGUpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIEl0ZXJhYmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIEl0ZXJhYmxlKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgIyBDaGVjayBzb21lIGl0ZXJhYmxlcwogICAgICAgICBzYW1wbGVzID0gW3N0cigpLAogICAgICAgICAgICAgICAgICAgIHR1cGxlKCksIGxpc3QoKSwgc2V0KCksIGZyb3plbnNldCgpLCBkaWN0KCksCkBAIC0zMDYsMTQgKzMyNywxNCBAQAogICAgICAgICAgICAgICAgICAgICh4IGZvciB4IGluIFtdKSwKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgIGZvciB4IGluIHNhbXBsZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZSh4LCBJdGVyYWJsZSksIHJlcHIoeCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyh0eXBlKHgpLCBJdGVyYWJsZSksIHJlcHIodHlwZSh4KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgSXRlcmFibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBJdGVyYWJsZSksIHJlcHIodHlwZSh4KSkpCiAgICAgICAgICMgQ2hlY2sgZGlyZWN0IHN1YmNsYXNzaW5nCiAgICAgICAgIGNsYXNzIEkoSXRlcmFibGUpOgogICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihJLCBzZWxmKS5fX2l0ZXJfXygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChJKCkpLCBbXSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhzdHIsIEkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3Moc3RyLCBJKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKEl0ZXJhYmxlLCAnX19pdGVyX18nKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoSXRlcmFibGUsICdfX2l0ZXJfXycpCiAKQEAgLTMyMSw4ICszNDIsOCBAQAogICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCA0MiwgMy4xNCwgMWosICIiLmVuY29kZSgnYXNjaWknKSwgIiIsICgpLCBbXSwKICAgICAgICAgICAgIHt9LCBzZXQoKV0KICAgICAgICAgZm9yIHggaW4gbm9uX3NhbXBsZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc2luc3RhbmNlKHgsIEl0ZXJhdG9yKSwgcmVwcih4KSkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3ModHlwZSh4KSwgSXRlcmF0b3IpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIEl0ZXJhdG9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIEl0ZXJhdG9yKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgc2FtcGxlcyA9IFtpdGVyKHN0cigpKSwKICAgICAgICAgICAgICAgICAgICBpdGVyKHR1cGxlKCkpLCBpdGVyKGxpc3QoKSksIGl0ZXIoZGljdCgpKSwKICAgICAgICAgICAgICAgICAgICBpdGVyKHNldCgpKSwgaXRlcihmcm96ZW5zZXQoKSksCkBAIC0zMzIsMTAgKzM1MywyMSBAQAogICAgICAgICAgICAgICAgICAgICh4IGZvciB4IGluIFtdKSwKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgIGZvciB4IGluIHNhbXBsZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZSh4LCBJdGVyYXRvciksIHJlcHIoeCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyh0eXBlKHgpLCBJdGVyYXRvciksIHJlcHIodHlwZSh4KSkpCi0gICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhJdGVyYXRvciwgJ25leHQnKQotICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoSXRlcmF0b3IsICduZXh0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBJdGVyYXRvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR5cGUoeCksIEl0ZXJhdG9yKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKEl0ZXJhdG9yLCAnbmV4dCcsICdfX2l0ZXJfXycpCisKKyAgICAgICAgIyBJc3N1ZSAxMDU2NQorICAgICAgICBjbGFzcyBOZXh0T25seToKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoTmV4dE9ubHkoKSwgSXRlcmF0b3IpCisgICAgICAgIGNsYXNzIE5leHRPbmx5TmV3KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKE5leHRPbmx5TmV3KCksIEl0ZXJhdG9yKQogCiAgICAgZGVmIHRlc3RfU2l6ZWQoc2VsZik6CiAgICAgICAgIG5vbl9zYW1wbGVzID0gW05vbmUsIDQyLCAzLjE0LCAxaiwKQEAgLTM0MywxNSArMzc1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICh4IGZvciB4IGluIFtdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGlzaW5zdGFuY2UoeCwgU2l6ZWQpLCByZXByKHgpKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyh0eXBlKHgpLCBTaXplZCksIHJlcHIodHlwZSh4KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoeCwgU2l6ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgU2l6ZWQpLCByZXByKHR5cGUoeCkpKQogICAgICAgICBzYW1wbGVzID0gW3N0cigpLAogICAgICAgICAgICAgICAgICAgIHR1cGxlKCksIGxpc3QoKSwgc2V0KCksIGZyb3plbnNldCgpLCBkaWN0KCksCiAgICAgICAgICAgICAgICAgICAgZGljdCgpLmtleXMoKSwgZGljdCgpLml0ZW1zKCksIGRpY3QoKS52YWx1ZXMoKSwKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgIGZvciB4IGluIHNhbXBsZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZSh4LCBTaXplZCksIHJlcHIoeCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyh0eXBlKHgpLCBTaXplZCksIHJlcHIodHlwZSh4KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgU2l6ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBTaXplZCksIHJlcHIodHlwZSh4KSkpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhTaXplZCwgJ19fbGVuX18nKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoU2l6ZWQsICdfX2xlbl9fJykKIApAQCAtMzYxLDE1ICszOTMsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgKHggZm9yIHggaW4gW10pLAogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNpbnN0YW5jZSh4LCBDb250YWluZXIpLCByZXByKHgpKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyh0eXBlKHgpLCBDb250YWluZXIpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIENvbnRhaW5lcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBDb250YWluZXIpLCByZXByKHR5cGUoeCkpKQogICAgICAgICBzYW1wbGVzID0gW3N0cigpLAogICAgICAgICAgICAgICAgICAgIHR1cGxlKCksIGxpc3QoKSwgc2V0KCksIGZyb3plbnNldCgpLCBkaWN0KCksCiAgICAgICAgICAgICAgICAgICAgZGljdCgpLmtleXMoKSwgZGljdCgpLml0ZW1zKCksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoeCwgQ29udGFpbmVyKSwgcmVwcih4KSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHR5cGUoeCksIENvbnRhaW5lciksIHJlcHIodHlwZSh4KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgQ29udGFpbmVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgQ29udGFpbmVyKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKENvbnRhaW5lciwgJ19fY29udGFpbnNfXycpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfaXNpbnN0YW5jZShDb250YWluZXIsICdfX2NvbnRhaW5zX18nKQogCkBAIC0zODAsMTYgKzQxMiwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAoeCBmb3IgeCBpbiBbXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgZm9yIHggaW4gbm9uX3NhbXBsZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc2luc3RhbmNlKHgsIENhbGxhYmxlKSwgcmVwcih4KSkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3ModHlwZSh4KSwgQ2FsbGFibGUpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIENhbGxhYmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIENhbGxhYmxlKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgc2FtcGxlcyA9IFtsYW1iZGE6IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgdHlwZSwgaW50LCBvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgbGVuLAogICAgICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kLCBbXS5hcHBlbmQsCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoeCwgQ2FsbGFibGUpLCByZXByKHgpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3ModHlwZSh4KSwgQ2FsbGFibGUpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIENhbGxhYmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgQ2FsbGFibGUpLCByZXByKHR5cGUoeCkpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoQ2FsbGFibGUsICdfX2NhbGxfXycpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfaXNpbnN0YW5jZShDYWxsYWJsZSwgJ19fY2FsbF9fJykKIApAQCAtMzk3LDE3ICs0MjksMTcgQEAKICAgICAgICAgZm9yIEIgaW4gSGFzaGFibGUsIEl0ZXJhYmxlLCBJdGVyYXRvciwgU2l6ZWQsIENvbnRhaW5lciwgQ2FsbGFibGU6CiAgICAgICAgICAgICBjbGFzcyBDKEIpOgogICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEMsIEIpKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhpbnQsIEMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgQikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoaW50LCBDKSkKIAogICAgIGRlZiB0ZXN0X3JlZ2lzdHJhdGlvbihzZWxmKToKICAgICAgICAgZm9yIEIgaW4gSGFzaGFibGUsIEl0ZXJhYmxlLCBJdGVyYXRvciwgU2l6ZWQsIENvbnRhaW5lciwgQ2FsbGFibGU6CiAgICAgICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSB0eXBlCiAgICAgICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICAjIE1ha2Ugc3VyZSBpdCBpc24ndCBoYXNoYWJsZSBieSBkZWZhdWx0Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKEMsIEIpLCBCLl9fbmFtZV9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEMsIEIpLCBCLl9fbmFtZV9fKQogICAgICAgICAgICAgQi5yZWdpc3RlcihDKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoQywgQikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBCKSkKIAogY2xhc3MgV2l0aFNldChNdXRhYmxlU2V0KToKIApAQCAtNDM3LDggKzQ2OSw4IEBACiAKICAgICBkZWYgdGVzdF9TZXQoc2VsZik6CiAgICAgICAgIGZvciBzYW1wbGUgaW4gW3NldCwgZnJvemVuc2V0XToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHNhbXBsZSgpLCBTZXQpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3Moc2FtcGxlLCBTZXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBTZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIFNldCkpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhTZXQsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycpCiAgICAgICAgIGNsYXNzIE15U2V0KFNldCk6CiAgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgpAQCAtNDYyLDEzICs0OTQsMTMgQEAKICAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFzaCgpCiAgICAgICAgIGEsIGIgPSBPbmVUd29UaHJlZVNldCgpLCBPbmVUd29UaHJlZVNldCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhoYXNoKGEpID09IGhhc2goYikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNoKGEpID09IGhhc2goYikpCiAKICAgICBkZWYgdGVzdF9NdXRhYmxlU2V0KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzZXQoKSwgTXV0YWJsZVNldCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNldCwgTXV0YWJsZVNldCkpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzaW5zdGFuY2UoZnJvemVuc2V0KCksIE11dGFibGVTZXQpKQotICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKGZyb3plbnNldCwgTXV0YWJsZVNldCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZXQoKSwgTXV0YWJsZVNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2V0LCBNdXRhYmxlU2V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGZyb3plbnNldCgpLCBNdXRhYmxlU2V0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoZnJvemVuc2V0LCBNdXRhYmxlU2V0KSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKE11dGFibGVTZXQsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCiAgICAgICAgICAgICAnYWRkJywgJ2Rpc2NhcmQnKQogCkBAIC01MDUsMTAgKzUzNywyNSBAQAogICAgICAgICBzID0gTXlTZXQoWzUsNDMsMiwxXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnBvcCgpLCAxKQogCisgICAgZGVmIHRlc3RfaXNzdWU4NzUwKHNlbGYpOgorICAgICAgICBlbXB0eSA9IFdpdGhTZXQoKQorICAgICAgICBmdWxsID0gV2l0aFNldChyYW5nZSgxMCkpCisgICAgICAgIHMgPSBXaXRoU2V0KGZ1bGwpCisgICAgICAgIHMgLT0gcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGVtcHR5KQorICAgICAgICBzID0gV2l0aFNldChmdWxsKQorICAgICAgICBzIF49IHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBlbXB0eSkKKyAgICAgICAgcyA9IFdpdGhTZXQoZnVsbCkKKyAgICAgICAgcyAmPSBzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZnVsbCkKKyAgICAgICAgcyB8PSBzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZnVsbCkKKwogICAgIGRlZiB0ZXN0X01hcHBpbmcoc2VsZik6CiAgICAgICAgIGZvciBzYW1wbGUgaW4gW2RpY3RdOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc2FtcGxlKCksIE1hcHBpbmcpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3Moc2FtcGxlLCBNYXBwaW5nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzYW1wbGUoKSwgTWFwcGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNhbXBsZSwgTWFwcGluZykpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhNYXBwaW5nLCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nLAogICAgICAgICAgICAgJ19fZ2V0aXRlbV9fJykKICAgICAgICAgY2xhc3MgTXlNYXBwaW5nKGNvbGxlY3Rpb25zLk1hcHBpbmcpOgpAQCAtNTIyLDM4ICs1NjksNDYzIEBACiAKICAgICBkZWYgdGVzdF9NdXRhYmxlTWFwcGluZyhzZWxmKToKICAgICAgICAgZm9yIHNhbXBsZSBpbiBbZGljdF06Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzYW1wbGUoKSwgTXV0YWJsZU1hcHBpbmcpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3Moc2FtcGxlLCBNdXRhYmxlTWFwcGluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVNYXBwaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBNdXRhYmxlTWFwcGluZykpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhNdXRhYmxlTWFwcGluZywgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsICdfX2xlbl9fJywKICAgICAgICAgICAgICdfX2dldGl0ZW1fXycsICdfX3NldGl0ZW1fXycsICdfX2RlbGl0ZW1fXycpCiAKICAgICBkZWYgdGVzdF9TZXF1ZW5jZShzZWxmKToKICAgICAgICAgZm9yIHNhbXBsZSBpbiBbdHVwbGUsIGxpc3QsIHN0cl06Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzYW1wbGUoKSwgU2VxdWVuY2UpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3Moc2FtcGxlLCBTZXF1ZW5jZSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKGJhc2VzdHJpbmcsIFNlcXVlbmNlKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UocmFuZ2UoMTApLCBTZXF1ZW5jZSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHhyYW5nZSwgU2VxdWVuY2UpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhzdHIsIFNlcXVlbmNlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzYW1wbGUoKSwgU2VxdWVuY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIFNlcXVlbmNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYmFzZXN0cmluZywgU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmFuZ2UoMTApLCBTZXF1ZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoeHJhbmdlLCBTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHN0ciwgU2VxdWVuY2UpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoU2VxdWVuY2UsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCiAgICAgICAgICAgICAnX19nZXRpdGVtX18nKQogCiAgICAgZGVmIHRlc3RfTXV0YWJsZVNlcXVlbmNlKHNlbGYpOgogICAgICAgICBmb3Igc2FtcGxlIGluIFt0dXBsZSwgc3RyXToKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGlzaW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVTZXF1ZW5jZSkpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKHNhbXBsZSwgTXV0YWJsZVNlcXVlbmNlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzYW1wbGUoKSwgTXV0YWJsZVNlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHNhbXBsZSwgTXV0YWJsZVNlcXVlbmNlKSkKICAgICAgICAgZm9yIHNhbXBsZSBpbiBbbGlzdF06Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzYW1wbGUoKSwgTXV0YWJsZVNlcXVlbmNlKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNhbXBsZSwgTXV0YWJsZVNlcXVlbmNlKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhiYXNlc3RyaW5nLCBNdXRhYmxlU2VxdWVuY2UpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBNdXRhYmxlU2VxdWVuY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIE11dGFibGVTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhiYXNlc3RyaW5nLCBNdXRhYmxlU2VxdWVuY2UpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoTXV0YWJsZVNlcXVlbmNlLCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywKICAgICAgICAgICAgICdfX2xlbl9fJywgJ19fZ2V0aXRlbV9fJywgJ19fc2V0aXRlbV9fJywgJ19fZGVsaXRlbV9fJywgJ2luc2VydCcpCiAKK2NsYXNzIFRlc3RDb3VudGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgYyA9IENvdW50ZXIoJ2FiY2FiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgQ291bnRlcih7J2EnOjMgLCAnYic6IDIsICdjJzogMX0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIENvdW50ZXIoYT0zLCBiPTIsIGM9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgTWFwcGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQ291bnRlciwgZGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKENvdW50ZXIsIE1hcHBpbmcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oYy52YWx1ZXMoKSksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGMudmFsdWVzKCkpLCBbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGMua2V5cygpKSwgWydhJywgJ2InLCAnYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjKSwgWydhJywgJ2InLCAnYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2EnLCAzKSwgKCdiJywgMiksICgnYycsIDEpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjWydiJ10sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1sneiddLCAwKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaGFzX2tleSgnYycpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmhhc19rZXkoJ3onKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fX2NvbnRhaW5zX18oJ2MnKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLl9fY29udGFpbnNfXygneicpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmdldCgnYicsIDEwKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmdldCgneicsIDEwKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgZGljdChhPTMsIGI9MiwgYz0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAiQ291bnRlcih7J2EnOiAzLCAnYic6IDIsICdjJzogMX0pIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1vc3RfY29tbW9uKCksIFsoJ2EnLCAzKSwgKCdiJywgMiksICgnYycsIDEpXSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubW9zdF9jb21tb24oaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2EnLCAzKSwgKCdiJywgMiksICgnYycsIDEpXVs6aV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihzb3J0ZWQoYy5lbGVtZW50cygpKSksICdhYWFiYmMnKQorICAgICAgICBjWydhJ10gKz0gMSAgICAgICAgICMgaW5jcmVtZW50IGFuIGV4aXN0aW5nIHZhbHVlCisgICAgICAgIGNbJ2InXSAtPSAyICAgICAgICAgIyBzdWIgZXhpc3RpbmcgdmFsdWUgdG8gemVybworICAgICAgICBkZWwgY1snYyddICAgICAgICAgICMgcmVtb3ZlIGFuIGVudHJ5CisgICAgICAgIGRlbCBjWydjJ10gICAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBkZWwgZG9lc24ndCByYWlzZSBLZXlFcnJvcgorICAgICAgICBjWydkJ10gLT0gMiAgICAgICAgICMgc3ViIGZyb20gYSBtaXNzaW5nIHZhbHVlCisgICAgICAgIGNbJ2UnXSA9IC01ICAgICAgICAgIyBkaXJlY3RseSBhc3NpZ24gYSBtaXNzaW5nIHZhbHVlCisgICAgICAgIGNbJ2YnXSArPSA0ICAgICAgICAgIyBhZGQgdG8gYSBtaXNzaW5nIHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgZGljdChhPTQsIGI9MCwgZD0tMiwgZT0tNSwgZj00KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKHNvcnRlZChjLmVsZW1lbnRzKCkpKSwgJ2FhYWFmZmZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBvcCgnZicpLCA0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdmJywgYykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBlbGVtLCBjbnQgPSBjLnBvcGl0ZW0oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBjKQorICAgICAgICBjLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnQ291bnRlcigpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgQ291bnRlci5mcm9ta2V5cywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgYykKKyAgICAgICAgYy51cGRhdGUoZGljdChhPTUsIGI9MykpCisgICAgICAgIGMudXBkYXRlKGM9MSkKKyAgICAgICAgYy51cGRhdGUoQ291bnRlcignYScgKiA1MCArICdiJyAqIDMwKSkKKyAgICAgICAgYy51cGRhdGUoKSAgICAgICAgICAjIHRlc3QgY2FzZSB3aXRoIG5vIGFyZ3MKKyAgICAgICAgYy5fX2luaXRfXygnYScgKiA1MDAgKyAnYicgKiAzMDApCisgICAgICAgIGMuX19pbml0X18oJ2NkYycpCisgICAgICAgIGMuX19pbml0X18oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGRpY3QoYT01NTUsIGI9MzMzLCBjPTMsIGQ9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zZXRkZWZhdWx0KCdkJywgNSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1snZCddLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2V0ZGVmYXVsdCgnZScsIDUpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNbJ2UnXSwgNSkKKworICAgIGRlZiB0ZXN0X2NvcHlpbmcoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBjb3VudGVycyBhcmUgY29weWFibGUsIGRlZXBjb3B5YWJsZSwgcGlja2xhYmxlLCBhbmQKKyAgICAgICAgI2hhdmUgYSByZXByL2V2YWwgcm91bmQtdHJpcAorICAgICAgICB3b3JkcyA9IENvdW50ZXIoJ3doaWNoIHdpdGNoIGhhZCB3aGljaCB3aXRjaGVzIHdyaXN0IHdhdGNoJy5zcGxpdCgpKQorICAgICAgICB1cGRhdGVfdGVzdCA9IENvdW50ZXIoKQorICAgICAgICB1cGRhdGVfdGVzdC51cGRhdGUod29yZHMpCisgICAgICAgIGZvciBpLCBkdXAgaW4gZW51bWVyYXRlKFsKKyAgICAgICAgICAgICAgICAgICAgd29yZHMuY29weSgpLAorICAgICAgICAgICAgICAgICAgICBjb3B5LmNvcHkod29yZHMpLAorICAgICAgICAgICAgICAgICAgICBjb3B5LmRlZXBjb3B5KHdvcmRzKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMCkpLAorICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAxKSksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgLTEpKSwKKyAgICAgICAgICAgICAgICAgICAgY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKHdvcmRzLCAwKSksCisgICAgICAgICAgICAgICAgICAgIGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyh3b3JkcywgMSkpLAorICAgICAgICAgICAgICAgICAgICBjUGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMod29yZHMsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKHdvcmRzLCAtMSkpLAorICAgICAgICAgICAgICAgICAgICBldmFsKHJlcHIod29yZHMpKSwKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgIENvdW50ZXIod29yZHMpLAorICAgICAgICAgICAgICAgICAgICBdKToKKyAgICAgICAgICAgIG1zZyA9IChpLCBkdXAsIHdvcmRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR1cCBpcyBub3Qgd29yZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgd29yZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4od29yZHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGR1cCksIHR5cGUod29yZHMpKQorCisgICAgZGVmIHRlc3RfY29udmVyc2lvbnMoc2VsZik6CisgICAgICAgICMgQ29udmVydCB0bzogc2V0LCBsaXN0LCBkaWN0CisgICAgICAgIHMgPSAnc2hlIHNlbGxzIHNlYSBzaGVsbHMgYnkgdGhlIHNlYSBzaG9yZScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoQ291bnRlcihzKS5lbGVtZW50cygpKSwgc29ydGVkKHMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChDb3VudGVyKHMpKSwgc29ydGVkKHNldChzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChDb3VudGVyKHMpKSwgZGljdChDb3VudGVyKHMpLml0ZW1zKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChDb3VudGVyKHMpKSwgc2V0KHMpKQorCisgICAgZGVmIHRlc3RfaW52YXJpYW50X2Zvcl90aGVfaW5fb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIGMgPSBDb3VudGVyKGE9MTAsIGI9LTIsIGM9MCkKKyAgICAgICAgZm9yIGVsZW0gaW4gYzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtIGluIGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGMpCisKKyAgICBkZWYgdGVzdF9tdWx0aXNldF9vcGVyYXRpb25zKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IGFkZGluZyBhIHplcm8gY291bnRlciB3aWxsIHN0cmlwIHplcm9zIGFuZCBuZWdhdGl2ZXMKKyAgICAgICAgYyA9IENvdW50ZXIoYT0xMCwgYj0tMiwgYz0wKSArIENvdW50ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoYyksIGRpY3QoYT0xMCkpCisKKyAgICAgICAgZWxlbWVudHMgPSAnYWJjZCcKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICAjIHRlc3QgcmFuZG9tIHBhaXJzIG9mIG11bHRpc2V0cworICAgICAgICAgICAgcCA9IENvdW50ZXIoZGljdCgoZWxlbSwgcmFuZHJhbmdlKC0yLDQpKSBmb3IgZWxlbSBpbiBlbGVtZW50cykpCisgICAgICAgICAgICBwLnVwZGF0ZShlPTEsIGY9LTEsIGc9MCkKKyAgICAgICAgICAgIHEgPSBDb3VudGVyKGRpY3QoKGVsZW0sIHJhbmRyYW5nZSgtMiw0KSkgZm9yIGVsZW0gaW4gZWxlbWVudHMpKQorICAgICAgICAgICAgcS51cGRhdGUoaD0xLCBpPS0xLCBqPTApCisgICAgICAgICAgICBmb3IgY291bnRlcm9wLCBudW1iZXJvcCBpbiBbCisgICAgICAgICAgICAgICAgKENvdW50ZXIuX19hZGRfXywgbGFtYmRhIHgsIHk6IG1heCgwLCB4K3kpKSwKKyAgICAgICAgICAgICAgICAoQ291bnRlci5fX3N1Yl9fLCBsYW1iZGEgeCwgeTogbWF4KDAsIHgteSkpLAorICAgICAgICAgICAgICAgIChDb3VudGVyLl9fb3JfXywgbGFtYmRhIHgsIHk6IG1heCgwLHgseSkpLAorICAgICAgICAgICAgICAgIChDb3VudGVyLl9fYW5kX18sIGxhbWJkYSB4LCB5OiBtYXgoMCwgbWluKHgseSkpKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY291bnRlcm9wKHAsIHEpCisgICAgICAgICAgICAgICAgZm9yIHggaW4gZWxlbWVudHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtYmVyb3AocFt4XSwgcVt4XSksIHJlc3VsdFt4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY291bnRlcm9wLCB4LCBwLCBxKSkKKyAgICAgICAgICAgICAgICAjIHZlcmlmeSB0aGF0IHJlc3VsdHMgZXhjbHVkZSBub24tcG9zaXRpdmUgY291bnRzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHg+MCBmb3IgeCBpbiByZXN1bHQudmFsdWVzKCkpCisKKyAgICAgICAgZWxlbWVudHMgPSAnYWJjZGVmJworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgIyB2ZXJpZnkgdGhhdCByYW5kb20gbXVsdGlzZXRzIHdpdGggbm8gcmVwZWF0cyBhcmUgZXhhY3RseSBsaWtlIHNldHMKKyAgICAgICAgICAgIHAgPSBDb3VudGVyKGRpY3QoKGVsZW0sIHJhbmRyYW5nZSgwLCAyKSkgZm9yIGVsZW0gaW4gZWxlbWVudHMpKQorICAgICAgICAgICAgcSA9IENvdW50ZXIoZGljdCgoZWxlbSwgcmFuZHJhbmdlKDAsIDIpKSBmb3IgZWxlbSBpbiBlbGVtZW50cykpCisgICAgICAgICAgICBmb3IgY291bnRlcm9wLCBzZXRvcCBpbiBbCisgICAgICAgICAgICAgICAgKENvdW50ZXIuX19zdWJfXywgc2V0Ll9fc3ViX18pLAorICAgICAgICAgICAgICAgIChDb3VudGVyLl9fb3JfXywgc2V0Ll9fb3JfXyksCisgICAgICAgICAgICAgICAgKENvdW50ZXIuX19hbmRfXywgc2V0Ll9fYW5kX18pLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgICAgICBjb3VudGVyX3Jlc3VsdCA9IGNvdW50ZXJvcChwLCBxKQorICAgICAgICAgICAgICAgIHNldF9yZXN1bHQgPSBzZXRvcChzZXQocC5lbGVtZW50cygpKSwgc2V0KHEuZWxlbWVudHMoKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudGVyX3Jlc3VsdCwgZGljdC5mcm9ta2V5cyhzZXRfcmVzdWx0LCAxKSkKKworICAgIGRlZiB0ZXN0X3N1YnRyYWN0KHNlbGYpOgorICAgICAgICBjID0gQ291bnRlcihhPS01LCBiPTAsIGM9NSwgZD0xMCwgZT0xNSxnPTQwKQorICAgICAgICBjLnN1YnRyYWN0KGE9MSwgYj0yLCBjPS0zLCBkPTEwLCBlPTIwLCBmPTMwLCBoPS01MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKGE9LTYsIGI9LTIsIGM9OCwgZD0wLCBlPS01LCBmPS0zMCwgZz00MCwgaD01MCkpCisgICAgICAgIGMgPSBDb3VudGVyKGE9LTUsIGI9MCwgYz01LCBkPTEwLCBlPTE1LGc9NDApCisgICAgICAgIGMuc3VidHJhY3QoQ291bnRlcihhPTEsIGI9MiwgYz0tMywgZD0xMCwgZT0yMCwgZj0zMCwgaD0tNTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIENvdW50ZXIoYT0tNiwgYj0tMiwgYz04LCBkPTAsIGU9LTUsIGY9LTMwLCBnPTQwLCBoPTUwKSkKKyAgICAgICAgYyA9IENvdW50ZXIoJ2FhYWJiY2QnKQorICAgICAgICBjLnN1YnRyYWN0KCdhYWFhYmJjY2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIENvdW50ZXIoYT0tMSwgYj0wLCBjPS0xLCBkPTEsIGU9LTEpKQorCitjbGFzcyBUZXN0T3JkZXJlZERpY3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgT3JkZXJlZERpY3QoWygnYScsIDEpLCAoJ2InLCAyKV0sIE5vbmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCisgICAgICAgIHBhaXJzID0gWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoT3JkZXJlZERpY3QoZGljdChwYWlycykpLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICMgZGljdCBpbnB1dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChPcmRlcmVkRGljdCgqKmRpY3QocGFpcnMpKS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgIyBrd2RzIGlucHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChPcmRlcmVkRGljdChwYWlycykuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAjIHBhaXJzIGlucHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCA5KSwgKCdkJywgNCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz0zLCBlPTUpLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgIyBtaXhlZCBpbnB1dAorCisgICAgICAgICMgbWFrZSBzdXJlIG5vIHBvc2l0aW9uYWwgYXJncyBjb25mbGljdCB3aXRoIHBvc3NpYmxlIGt3ZGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGFyZ3NwZWMoT3JkZXJlZERpY3QuX19kaWN0X19bJ19faW5pdF9fJ10pLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzZWxmJ10pCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBkaXJlY3QgY2FsbHMgdG8gX19pbml0X18gZG8gbm90IGNsZWFyIHByZXZpb3VzIGNvbnRlbnRzCisgICAgICAgIGQgPSBPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNDQpLCAoJ2UnLCA1NSldKQorICAgICAgICBkLl9faW5pdF9fKFsoJ2UnLCA1KSwgKCdmJywgNildLCBnPTcsIGQ9NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQuaXRlbXMoKSksCisgICAgICAgICAgICBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KSwgKCdnJywgNyldKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBPcmRlcmVkRGljdCgpLnVwZGF0ZShbKCdhJywgMSksICgnYicsIDIpXSwgTm9uZSkgICAgICAgICAgICAgICAgICAgICAgICAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgcGFpcnMgPSBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpXQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKGRpY3QocGFpcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkaWN0IGlucHV0CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUoKipkaWN0KHBhaXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMga3dkcyBpbnB1dAorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYWlycyBpbnB1dAorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDkpLCAoJ2QnLCA0KV0sIGM9MywgZT01KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtaXhlZCBpbnB1dAorCisgICAgICAgICMgSXNzdWUgOTEzNzogTmFtZWQgYXJndW1lbnQgY2FsbGVkICdvdGhlcicgb3IgJ3NlbGYnCisgICAgICAgICMgc2hvdWxkbid0IGJlIHRyZWF0ZWQgc3BlY2lhbGx5LgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKHNlbGY9MjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWygnc2VsZicsIDIzKV0pCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUob3RoZXI9e30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWygnb3RoZXInLCB7fSldKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKHJlZD01LCBibHVlPTYsIG90aGVyPTcsIHNlbGY9OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobGlzdChvZC5pdGVtcygpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnYmx1ZScsIDYpLCAoJ290aGVyJywgNyksICgncmVkJywgNSksICgnc2VsZicsIDgpXSkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGRpcmVjdCBjYWxscyB0byB1cGRhdGUgZG8gbm90IGNsZWFyIHByZXZpb3VzIGNvbnRlbnRzCisgICAgICAgICMgYWRkIHRoYXQgdXBkYXRlcyBpdGVtcyBhcmUgbm90IG1vdmVkIHRvIHRoZSBlbmQKKyAgICAgICAgZCA9IE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0NCksICgnZScsIDU1KV0pCisgICAgICAgIGQudXBkYXRlKFsoJ2UnLCA1KSwgKCdmJywgNildLCBnPTcsIGQ9NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQuaXRlbXMoKSksCisgICAgICAgICAgICBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KSwgKCdnJywgNyldKQorCisgICAgZGVmIHRlc3RfYWJjKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoT3JkZXJlZERpY3QoKSwgTXV0YWJsZU1hcHBpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE9yZGVyZWREaWN0LCBNdXRhYmxlTWFwcGluZykpCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCBsZW4ocGFpcnMpKQorICAgICAgICBvZC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kKSwgMCkKKworICAgIGRlZiB0ZXN0X2RlbGl0ZW0oc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIGRlbCBvZFsnYSddCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBvZCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBkZWwgb2RbJ2EnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzWzoyXSArIHBhaXJzWzM6XSkKKworICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoWygnZCcsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnYScsIDQpLCAoJ2UnLCA1KV0pCisgICAgICAgIG9kWydjJ10gPSAxMCAgICAgICAgICAgIyBleGlzdGluZyBlbGVtZW50CisgICAgICAgIG9kWydmJ10gPSAyMCAgICAgICAgICAgIyBuZXcgZWxlbWVudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnZCcsIDEpLCAoJ2InLCAyKSwgKCdjJywgMTApLCAoJ2EnLCA0KSwgKCdlJywgNSksICgnZicsIDIwKV0pCisKKyAgICBkZWYgdGVzdF9pdGVyYXRvcnMoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIFt0WzBdIGZvciB0IGluIHBhaXJzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5rZXlzKClbOl0sIFt0WzBdIGZvciB0IGluIHBhaXJzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC52YWx1ZXMoKVs6XSwgW3RbMV0gZm9yIHQgaW4gcGFpcnNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLml0ZW1zKClbOl0sIHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlcmtleXMoKSksIFt0WzBdIGZvciB0IGluIHBhaXJzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZXJ2YWx1ZXMoKSksIFt0WzFdIGZvciB0IGluIHBhaXJzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZXJpdGVtcygpKSwgcGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChvZCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFt0WzBdIGZvciB0IGluIHJldmVyc2VkKHBhaXJzKV0pCisKKyAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICB3aGlsZSBwYWlyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QucG9waXRlbSgpLCBwYWlycy5wb3AoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBvZC5wb3BpdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQorCisgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICB3aGlsZSBwYWlyczoKKyAgICAgICAgICAgIGssIHYgPSBwYWlycy5wb3AoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5wb3AoayksIHYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgb2QucG9wKCd4eXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QucG9wKGssIDEyMzQ1KSwgMTIzNDUpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgcG9wIHN0aWxsIHdvcmtzIHdoZW4gX19taXNzaW5nX18gaXMgZGVmaW5lZAorICAgICAgICBjbGFzcyBNaXNzaW5nKE9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIG0gPSBNaXNzaW5nKGE9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnBvcCgnYicsIDUpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucG9wKCdhJywgNiksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5wb3AoJ2EnLCA2KSwgNikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBtLnBvcCgnYScpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QxID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIG9kMiA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kMSwgb2QyKSAgICAgICAgICAjIHNhbWUgb3JkZXIgaW1wbGllcyBlcXVhbGl0eQorICAgICAgICBwYWlycyA9IHBhaXJzWzI6XSArIHBhaXJzWzoyXQorICAgICAgICBvZDIgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvZDEsIG9kMikgICAgICAgIyBkaWZmZXJlbnQgb3JkZXIgaW1wbGllcyBpbmVxdWFsaXR5CisgICAgICAgICMgY29tcGFyaXNvbiB0byByZWd1bGFyIGRpY3QgaXMgbm90IG9yZGVyIHNlbnNpdGl2ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kMSwgZGljdChvZDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3Qob2QyKSwgb2QxKQorICAgICAgICAjIGRpZmZlcmVudCBsZW5ndGggaW1wbGllZCBpbmVxdWFsaXR5CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob2QxLCBPcmRlcmVkRGljdChwYWlyc1s6LTFdKSkKKworICAgIGRlZiB0ZXN0X2NvcHlpbmcoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBvcmRlcmVkIGRpY3RzIGFyZSBjb3B5YWJsZSwgZGVlcGNvcHlhYmxlLCBwaWNrbGFibGUsCisgICAgICAgICMgYW5kIGhhdmUgYSByZXByL2V2YWwgcm91bmQtdHJpcAorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICB1cGRhdGVfdGVzdCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgdXBkYXRlX3Rlc3QudXBkYXRlKG9kKQorICAgICAgICBmb3IgaSwgZHVwIGluIGVudW1lcmF0ZShbCisgICAgICAgICAgICAgICAgICAgIG9kLmNvcHkoKSwKKyAgICAgICAgICAgICAgICAgICAgY29weS5jb3B5KG9kKSwKKyAgICAgICAgICAgICAgICAgICAgY29weS5kZWVwY29weShvZCksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDApKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMSkpLAorICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAyKSksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIC0xKSksCisgICAgICAgICAgICAgICAgICAgIGV2YWwocmVwcihvZCkpLAorICAgICAgICAgICAgICAgICAgICB1cGRhdGVfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgT3JkZXJlZERpY3Qob2QpLAorICAgICAgICAgICAgICAgICAgICBdKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdXAgaXMgbm90IG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGR1cC5pdGVtcygpKSwgbGlzdChvZC5pdGVtcygpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbihvZCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZHVwKSwgdHlwZShvZCkpCisKKyAgICBkZWYgdGVzdF95YW1sX2xpbmthZ2Uoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgX19yZWR1Y2VfXyBpcyBzZXR1cCBpbiBhIHdheSB0aGF0IHN1cHBvcnRzIFB5WUFNTCdzIGR1bXAoKSBmZWF0dXJlLgorICAgICAgICAjIEluIHlhbWwsIGxpc3RzIGFyZSBuYXRpdmUgYnV0IHR1cGxlcyBhcmUgbm90LgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICAjIHlhbWwuZHVtcChvZCkgLS0+CisgICAgICAgICMgJyEhcHl0aG9uL29iamVjdC9hcHBseTpfX21haW5fXy5PcmRlcmVkRGljdFxuLSAtIFthLCAxXVxuICAtIFtiLCAyXVxuJworICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKHR5cGUocGFpcik9PWxpc3QgZm9yIHBhaXIgaW4gb2QuX19yZWR1Y2VfXygpWzFdKSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZV9ub3RfdG9vX2ZhdChzZWxmKToKKyAgICAgICAgIyBkbyBub3Qgc2F2ZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGlmIG5vdCBuZWVkZWQKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QuX19yZWR1Y2VfXygpKSwgMikKKyAgICAgICAgb2QueCA9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kLl9fcmVkdWNlX18oKSksIDMpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG9kKSwKKyAgICAgICAgICAgICJPcmRlcmVkRGljdChbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0pIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHJlcHIob2QpKSwgb2QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihPcmRlcmVkRGljdCgpKSwgIk9yZGVyZWREaWN0KCkiKQorCisgICAgZGVmIHRlc3RfcmVwcl9yZWN1cnNpdmUoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlICM5ODI2CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QuZnJvbWtleXMoJ2FiYycpCisgICAgICAgIG9kWyd4J10gPSBvZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIob2QpLAorICAgICAgICAgICAgIk9yZGVyZWREaWN0KFsoJ2EnLCBOb25lKSwgKCdiJywgTm9uZSksICgnYycsIE5vbmUpLCAoJ3gnLCAuLi4pXSkiKQorCisgICAgZGVmIHRlc3Rfc2V0ZGVmYXVsdChzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgcGFpcl9vcmRlciA9IGxpc3Qob2QuaXRlbXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5zZXRkZWZhdWx0KCdhJywgMTApLCAzKQorICAgICAgICAjIG1ha2Ugc3VyZSBvcmRlciBkaWRuJ3QgY2hhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcl9vcmRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5zZXRkZWZhdWx0KCd4JywgMTApLCAxMCkKKyAgICAgICAgIyBtYWtlIHN1cmUgJ3gnIGlzIGFkZGVkIHRvIHRoZSBlbmQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpWy0xXSwgKCd4JywgMTApKQorCisgICAgICAgICMgbWFrZSBzdXJlIHNldGRlZmF1bHQgc3RpbGwgd29ya3Mgd2hlbiBfX21pc3NpbmdfXyBpcyBkZWZpbmVkCisgICAgICAgIGNsYXNzIE1pc3NpbmcoT3JkZXJlZERpY3QpOgorICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNaXNzaW5nKCkuc2V0ZGVmYXVsdCg1LCA5KSwgOSkKKworICAgIGRlZiB0ZXN0X3JlaW5zZXJ0KHNlbGYpOgorICAgICAgICAjIEdpdmVuIGluc2VydCBhLCBpbnNlcnQgYiwgZGVsZXRlIGEsIHJlLWluc2VydCBhLAorICAgICAgICAjIHZlcmlmeSB0aGF0IGEgaXMgbm93IGxhdGVyIHRoYW4gYi4KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kWydhJ10gPSAxCisgICAgICAgIG9kWydiJ10gPSAyCisgICAgICAgIGRlbCBvZFsnYSddCisgICAgICAgIG9kWydhJ10gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWygnYicsIDIpLCAoJ2EnLCAxKV0pCisKKyAgICBkZWYgdGVzdF92aWV3cyhzZWxmKToKKyAgICAgICAgcyA9ICd0aGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIGEgbGF6eSBkb2cgeWVzdGVyZGF5IGJlZm9yZSBkYXduJy5zcGxpdCgpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QuZnJvbWtleXMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLnZpZXdrZXlzKCkpLCAgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLnZpZXd2YWx1ZXMoKSksICBbTm9uZSBmb3IgayBpbiBzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLnZpZXdpdGVtcygpKSwgIFsoaywgTm9uZSkgZm9yIGsgaW4gc10pCisKKyAgICBkZWYgdGVzdF9vdmVycmlkZV91cGRhdGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgc3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdXBkYXRlKCkgd2l0aG91dCBicmVha2luZyBfX2luaXRfXygpCisgICAgICAgIGNsYXNzIE15T0QoT3JkZXJlZERpY3QpOgorICAgICAgICAgICAgZGVmIHVwZGF0ZShzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oKQorICAgICAgICBpdGVtcyA9IFsoJ2EnLCAxKSwgKCdjJywgMyksICgnYicsIDIpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoTXlPRChpdGVtcykuaXRlbXMoKSksIGl0ZW1zKQorCitjbGFzcyBHZW5lcmFsTWFwcGluZ1Rlc3RzKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKKyAgICB0eXBlMnRlc3QgPSBPcmRlcmVkRGljdAorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3BpdGVtKQorCitjbGFzcyBNeU9yZGVyZWREaWN0KE9yZGVyZWREaWN0KToKKyAgICBwYXNzCisKK2NsYXNzIFN1YmNsYXNzTWFwcGluZ1Rlc3RzKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKKyAgICB0eXBlMnRlc3QgPSBNeU9yZGVyZWREaWN0CisKKyAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcGl0ZW0pCisKIGltcG9ydCBjb2xsZWN0aW9ucwogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgTmFtZWRUdXBsZURvY3MgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZShtb2R1bGU9Y29sbGVjdGlvbnMpCi0gICAgdGVzdF9jbGFzc2VzID0gW1Rlc3ROYW1lZFR1cGxlLCBOYW1lZFR1cGxlRG9jcywgVGVzdE9uZVRyaWNrUG9ueUFCQ3MsIFRlc3RDb2xsZWN0aW9uQUJDc10KKyAgICB0ZXN0X2NsYXNzZXMgPSBbVGVzdE5hbWVkVHVwbGUsIE5hbWVkVHVwbGVEb2NzLCBUZXN0T25lVHJpY2tQb255QUJDcywKKyAgICAgICAgICAgICAgICAgICAgVGVzdENvbGxlY3Rpb25BQkNzLCBUZXN0Q291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgVGVzdE9yZGVyZWREaWN0LCBHZW5lcmFsTWFwcGluZ1Rlc3RzLCBTdWJjbGFzc01hcHBpbmdUZXN0c10KICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KGNvbGxlY3Rpb25zLCB2ZXJib3NlKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbW1hbmRzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21tYW5kcy5weQppbmRleCBhNTM5YzI0Li43MGNmYjU4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbW1hbmRzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tbWFuZHMucHkKQEAgLTUsMTMgKzUsMTEgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zLCB0ZW1wZmlsZSwgcmUKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbiwgaW1wb3J0X21vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncykKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbiwgaW1wb3J0X21vZHVsZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbiwgaW1wb3J0X21vZHVsZQogIyBTaWxlbmNlIFB5M2sgd2FybmluZwotaW1wb3J0X21vZHVsZSgnY29tbWFuZHMnLCBkZXByZWNhdGVkPVRydWUpCi1mcm9tIGNvbW1hbmRzIGltcG9ydCAqCitjb21tYW5kcyA9IGltcG9ydF9tb2R1bGUoJ2NvbW1hbmRzJywgZGVwcmVjYXRlZD1UcnVlKQogCiAjIFRoZSBtb2R1bGUgc2F5czoKICMgICAiTkIgVGhpcyBvbmx5IHdvcmtzIChhbmQgaXMgb25seSByZWxldmFudCkgZm9yIFVOSVguIgpAQCAtMjAsMTQgKzE4LDE0IEBACiAjIEknbGwgdGFrZSB0aGUgY29tbWVudCBhcyBnaXZlbiwgYW5kIHNraXAgdGhpcyBzdWl0ZS4KIAogaWYgb3MubmFtZSAhPSAncG9zaXgnOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkKCdOb3QgcG9zaXg7IHNraXBwaW5nIHRlc3RfY29tbWFuZHMnKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdOb3QgcG9zaXg7IHNraXBwaW5nIHRlc3RfY29tbWFuZHMnKQogCiAKIGNsYXNzIENvbW1hbmRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9nZXRvdXRwdXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdldG91dHB1dCgnZWNobyB4eXp6eScpLCAneHl6enknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnZXRzdGF0dXNvdXRwdXQoJ2VjaG8geHl6enknKSwgKDAsICd4eXp6eScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1hbmRzLmdldG91dHB1dCgnZWNobyB4eXp6eScpLCAneHl6enknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1hbmRzLmdldHN0YXR1c291dHB1dCgnZWNobyB4eXp6eScpLCAoMCwgJ3h5enp5JykpCiAKICAgICAgICAgIyB3ZSB1c2UgbWtkdGVtcCBpbiB0aGUgbmV4dCBsaW5lIHRvIGNyZWF0ZSBhbiBlbXB0eSBkaXJlY3RvcnkKICAgICAgICAgIyB1bmRlciBvdXIgZXhjbHVzaXZlIGNvbnRyb2w7IGZyb20gdGhhdCwgd2UgY2FuIGludmVudCBhIHBhdGhuYW1lCkBAIC0zNyw4ICszNSw4IEBACiAgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCAiZm9vIikKIAotICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBnZXRzdGF0dXNvdXRwdXQoJ2NhdCAnICsgbmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKHN0YXR1cywgMCkKKyAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gY29tbWFuZHMuZ2V0c3RhdHVzb3V0cHV0KCdjYXQgJyArIG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0YXR1cywgMCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIGRpciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCkBAIC01Nyw4ICs1NSwxMCBAQAogICAgICAgICAgICAgICAgICAgW14vXSogICAgICAgICMgU2tpcCB1c2VyLCBncm91cCwgc2l6ZSwgYW5kIGRhdGUuCiAgICAgICAgICAgICAgICAgICAvXC4gICAgICAgICAgIyBhbmQgZW5kIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCiAgICAgICAgICAgICAgICAnJycKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncyhxdWlldD1UcnVlKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChwYXQsIGdldHN0YXR1cygiLy4iKSwgcmUuVkVSQk9TRSkpCisKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoIi4qY29tbWFuZHMuZ2V0c3RhdHVzLi4gaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHBhdCwgY29tbWFuZHMuZ2V0c3RhdHVzKCIvLiIpLCByZS5WRVJCT1NFKSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKaW5kZXggYjMxMTFkZC4uOGE5NWY2ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weQpAQCAtNiw2ICs2LDE5IEBACiAKIGNsYXNzIFRlc3RTcGVjaWZpY3ModW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlc3Rfbm9fZW5kaW5nX25ld2xpbmUoc2VsZik6CisgICAgICAgIGNvbXBpbGUoImhpIiwgIjx0ZXN0PiIsICJleGVjIikKKyAgICAgICAgY29tcGlsZSgiaGlcciIsICI8dGVzdD4iLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgY29tcGlsZSgiIiwgIjx0ZXN0PiIsICJleGVjIikKKworICAgIGRlZiB0ZXN0X290aGVyX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBjb21waWxlKCJcclxuIiwgIjx0ZXN0PiIsICJleGVjIikKKyAgICAgICAgY29tcGlsZSgiXHIiLCAiPHRlc3Q+IiwgImV4ZWMiKQorICAgICAgICBjb21waWxlKCJoaVxyXG5zdHVmZlxyXG5kZWYgZigpOlxuICAgIHBhc3NcciIsICI8dGVzdD4iLCAiZXhlYyIpCisgICAgICAgIGNvbXBpbGUoInRoaXNfaXNccnJlYWxseV9vbGRfbWFjXHJkZWYgZigpOlxuICAgIHBhc3MiLCAiPHRlc3Q+IiwgImV4ZWMiKQorCiAgICAgZGVmIHRlc3RfZGVidWdfYXNzaWdubWVudChzZWxmKToKICAgICAgICAgIyBjYXRjaCBhc3NpZ25tZW50cyB0byBfX2RlYnVnX18KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsICdfX2RlYnVnX18gPSAxJywgJz8nLCAnc2luZ2xlJykKQEAgLTEzMCw3ICsxNDMsNyBAQAogCiAgICAgZGVmIHRlc3RfY29tcGxleF9hcmdzKHNlbGYpOgogCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAgICAgICAgICgidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIiwgU3ludGF4V2FybmluZykpOgogICAgICAgICAgICAgZXhlYyB0ZXh0d3JhcC5kZWRlbnQoJycnCiAgICAgICAgIGRlZiBjb21wX2FyZ3MoKGEsIGIpKToKQEAgLTI0MSw4ICsyNTQsOCBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJIb3cgbWFueSBiaXRzICpkb2VzKiB0aGlzIG1hY2hpbmUgaGF2ZT8/PyIpCiAgICAgICAgICMgVmVyaWZ5IHRyZWF0bWVudCBvZiBjb250YW50IGZvbGRpbmcgb24gLShzeXMubWF4aW50KzEpCiAgICAgICAgICMgaS5lLiAtMjE0NzQ4MzY0OCBvbiAzMiBiaXQgcGxhdGZvcm1zLiAgU2hvdWxkIHJldHVybiBpbnQsIG5vdCBsb25nLgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShldmFsKCIlcyIgJSAoLXN5cy5tYXhpbnQgLSAxKSksIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGV2YWwoIiVzIiAlICgtc3lzLm1heGludCAtIDIpKSwgbG9uZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsKCIlcyIgJSAoLXN5cy5tYXhpbnQgLSAxKSksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWwoIiVzIiAlICgtc3lzLm1heGludCAtIDIpKSwgbG9uZykKIAogICAgIGlmIHN5cy5tYXhpbnQgPT0gOTIyMzM3MjAzNjg1NDc3NTgwNzoKICAgICAgICAgZGVmIHRlc3RfMzJfNjNfYml0X3ZhbHVlcyhzZWxmKToKQEAgLTI1Nyw3ICsyNzAsNyBAQAogCiAgICAgICAgICAgICBmb3IgdmFyaWFibGUgaW4gc2VsZi50ZXN0XzMyXzYzX2JpdF92YWx1ZXMuZnVuY19jb2RlLmNvX2NvbnN0czoKICAgICAgICAgICAgICAgICBpZiB2YXJpYWJsZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFyaWFibGUsIGludCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YXJpYWJsZSwgaW50KQogCiAgICAgZGVmIHRlc3Rfc2VxdWVuY2VfdW5wYWNraW5nX2Vycm9yKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSBzZXF1ZW5jZSBwYWNraW5nL3VucGFja2luZyB3aXRoICJvciIuICBTRiBidWcgIzc1NzgxOApAQCAtMjc1LDExICsyODgsMTkgQEAKICAgICAgICAgICAgICcoYSwgTm9uZSkgPSAwLCAwJywKICAgICAgICAgICAgICdmb3IgTm9uZSBpbiByYW5nZSgxMCk6IHBhc3MnLAogICAgICAgICAgICAgJ2RlZiBmKE5vbmUpOiBwYXNzJywKKyAgICAgICAgICAgICdpbXBvcnQgTm9uZScsCisgICAgICAgICAgICAnaW1wb3J0IHggYXMgTm9uZScsCisgICAgICAgICAgICAnZnJvbSB4IGltcG9ydCBOb25lJywKKyAgICAgICAgICAgICdmcm9tIHggaW1wb3J0IHkgYXMgTm9uZScKICAgICAgICAgXQogICAgICAgICBmb3Igc3RtdCBpbiBzdG10czoKICAgICAgICAgICAgIHN0bXQgKz0gIlxuIgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIHN0bXQsICd0bXAnLCAnc2luZ2xlJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBzdG10LCAndG1wJywgJ2V4ZWMnKQorICAgICAgICAjIFRoaXMgaXMgb2suCisgICAgICAgIGNvbXBpbGUoImZyb20gTm9uZSBpbXBvcnQgeCIsICJ0bXAiLCAiZXhlYyIpCisgICAgICAgIGNvbXBpbGUoImZyb20geCBpbXBvcnQgTm9uZSBhcyB5IiwgInRtcCIsICJleGVjIikKKyAgICAgICAgY29tcGlsZSgiaW1wb3J0IE5vbmUgYXMgeCIsICJ0bXAiLCAiZXhlYyIpCiAKICAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6CiAgICAgICAgIHN1Y2NlZWQgPSBbCkBAIC0zMzcsNiArMzU4LDEwIEBACiAgICAgICAgIGYxLCBmMiA9IGYoKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGYxLmZ1bmNfY29kZSksIGlkKGYyLmZ1bmNfY29kZSkpCiAKKyAgICBkZWYgdGVzdF9sYW1iZGFfZG9jKHNlbGYpOgorICAgICAgICBsID0gbGFtYmRhOiAiZm9vIgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsLl9fZG9jX18pCisKICAgICBkZWYgdGVzdF91bmljb2RlX2VuY29kaW5nKHNlbGYpOgogICAgICAgICBjb2RlID0gdSIjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxucGFzc1xuIgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgY29kZSwgInRtcCIsICJleGVjIikKQEAgLTM2Miw1NiArMzg3LDU2IEBACiAgICAgICAgIGRbMV0gKz0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMV0sIDIpCiAgICAgICAgIGRlbCBkWzFdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxLCBkKQogICAgICAgICAjIFR1cGxlIG9mIGluZGljZXMKICAgICAgICAgZFsxLCAxXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzEsIDFdLCAxKQogICAgICAgICBkWzEsIDFdICs9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzEsIDFdLCAyKQogICAgICAgICBkZWwgZFsxLCAxXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLCAxKSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoMSwgMSksIGQpCiAgICAgICAgICMgU2ltcGxlIHNsaWNlCiAgICAgICAgIGRbMToyXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6Ml0sIDEpCiAgICAgICAgIGRbMToyXSArPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjJdLCAyKQogICAgICAgICBkZWwgZFsxOjJdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMSwgMikgaW4gZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2xpY2UoMSwgMiksIGQpCiAgICAgICAgICMgVHVwbGUgb2Ygc2ltcGxlIHNsaWNlcwogICAgICAgICBkWzE6MiwgMToyXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MiwgMToyXSwgMSkKICAgICAgICAgZFsxOjIsIDE6Ml0gKz0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyLCAxOjJdLCAyKQogICAgICAgICBkZWwgZFsxOjIsIDE6Ml0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoc2xpY2UoMSwgMiksIHNsaWNlKDEsIDIpKSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoc2xpY2UoMSwgMiksIHNsaWNlKDEsIDIpKSwgZCkKICAgICAgICAgIyBFeHRlbmRlZCBzbGljZQogICAgICAgICBkWzE6MjozXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MjozXSwgMSkKICAgICAgICAgZFsxOjI6M10gKz0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyOjNdLCAyKQogICAgICAgICBkZWwgZFsxOjI6M10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgxLCAyLCAzKSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzbGljZSgxLCAyLCAzKSwgZCkKICAgICAgICAgIyBUdXBsZSBvZiBleHRlbmRlZCBzbGljZXMKICAgICAgICAgZFsxOjI6MywgMToyOjNdID0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyOjMsIDE6MjozXSwgMSkKICAgICAgICAgZFsxOjI6MywgMToyOjNdICs9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MjozLCAxOjI6M10sIDIpCiAgICAgICAgIGRlbCBkWzE6MjozLCAxOjI6M10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoc2xpY2UoMSwgMiwgMyksIHNsaWNlKDEsIDIsIDMpKSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoc2xpY2UoMSwgMiwgMyksIHNsaWNlKDEsIDIsIDMpKSwgZCkKICAgICAgICAgIyBFbGxpcHNpcwogICAgICAgICBkWy4uLl0gPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsuLi5dLCAxKQogICAgICAgICBkWy4uLl0gKz0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLi4uXSwgMikKICAgICAgICAgZGVsIGRbLi4uXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVsbGlwc2lzIGluIGQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKEVsbGlwc2lzLCBkKQogICAgICAgICAjIFR1cGxlIG9mIEVsbGlwc2VzCiAgICAgICAgIGRbLi4uLCAuLi5dID0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLi4uLCAuLi5dLCAxKQogICAgICAgICBkWy4uLiwgLi4uXSArPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsuLi4sIC4uLl0sIDIpCiAgICAgICAgIGRlbCBkWy4uLiwgLi4uXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChFbGxpcHNpcywgRWxsaXBzaXMpIGluIGQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKChFbGxpcHNpcywgRWxsaXBzaXMpLCBkKQogCiAgICAgZGVmIHRlc3RfbWFuZ2xpbmcoc2VsZik6CiAgICAgICAgIGNsYXNzIEE6CkBAIC00MjEsMTAgKzQ0NiwxMCBAQAogICAgICAgICAgICAgICAgIGltcG9ydCBfX21hbmdsZWRfbW9kCiAgICAgICAgICAgICAgICAgaW1wb3J0IF9fcGFja2FnZV9fLm1vZHVsZQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiX0FfX21hbmdsZWQiIGluIEEuZi5mdW5jX2NvZGUuY29fdmFybmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiX19ub3RfbWFuZ2xlZF9fIiBpbiBBLmYuZnVuY19jb2RlLmNvX3Zhcm5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydF8oIl9BX19tYW5nbGVkX21vZCIgaW4gQS5mLmZ1bmNfY29kZS5jb192YXJuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJfX3BhY2thZ2VfXyIgaW4gQS5mLmZ1bmNfY29kZS5jb192YXJuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX0FfX21hbmdsZWQiLCBBLmYuZnVuY19jb2RlLmNvX3Zhcm5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJfX25vdF9tYW5nbGVkX18iLCBBLmYuZnVuY19jb2RlLmNvX3Zhcm5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJfQV9fbWFuZ2xlZF9tb2QiLCBBLmYuZnVuY19jb2RlLmNvX3Zhcm5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJfX3BhY2thZ2VfXyIsIEEuZi5mdW5jX2NvZGUuY29fdmFybmFtZXMpCiAKICAgICBkZWYgdGVzdF9jb21waWxlX2FzdChzZWxmKToKICAgICAgICAgZm5hbWUgPSBfX2ZpbGVfXwpAQCAtNDQ3LDcgKzQ3Miw3IEBACiAgICAgICAgIGZvciBmbmFtZSwgY29kZSBpbiBzYW1wbGVfY29kZToKICAgICAgICAgICAgIGNvMSA9IGNvbXBpbGUoY29kZSwgJyVzMScgJSBmbmFtZSwgJ2V4ZWMnKQogICAgICAgICAgICAgYXN0ID0gY29tcGlsZShjb2RlLCAnJXMyJyAlIGZuYW1lLCAnZXhlYycsIF9hc3QuUHlDRl9PTkxZX0FTVCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKGFzdCkgPT0gX2FzdC5Nb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShhc3QpID09IF9hc3QuTW9kdWxlKQogICAgICAgICAgICAgY28yID0gY29tcGlsZShhc3QsICclczMnICUgZm5hbWUsICdleGVjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY28xLCBjbzIpCiAgICAgICAgICAgICAjIHRoZSBjb2RlIG9iamVjdCdzIGZpbGVuYW1lIGNvbWVzIGZyb20gdGhlIHNlY29uZCBjb21waWxhdGlvbiBzdGVwCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmNjk4OQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQpAQCAtMCwwICsxLDgwIEBACitpbXBvcnQgY29tcGlsZWFsbAoraW1wb3J0IGltcAoraW1wb3J0IG9zCitpbXBvcnQgcHlfY29tcGlsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHRlbXBmaWxlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgQ29tcGlsZWFsbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5zb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0LnB5JykKKyAgICAgICAgc2VsZi5iY19wYXRoID0gc2VsZi5zb3VyY2VfcGF0aCArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb3VyY2VfcGF0aCwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgZmlsZS53cml0ZSgneCA9IDEyM1xuJykKKyAgICAgICAgc2VsZi5zb3VyY2VfcGF0aDIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfdGVzdDIucHknKQorICAgICAgICBzZWxmLmJjX3BhdGgyID0gc2VsZi5zb3VyY2VfcGF0aDIgKyAoJ2MnIGlmIF9fZGVidWdfXyBlbHNlICdvJykKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYuc291cmNlX3BhdGgyKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyZWN0b3J5KQorCisgICAgZGVmIGRhdGEoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihzZWxmLmJjX3BhdGgsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBkYXRhID0gZmlsZS5yZWFkKDgpCisgICAgICAgIG10aW1lID0gaW50KG9zLnN0YXQoc2VsZi5zb3VyY2VfcGF0aCkuc3RfbXRpbWUpCisgICAgICAgIGNvbXBhcmUgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgbXRpbWUpCisgICAgICAgIHJldHVybiBkYXRhLCBjb21wYXJlCisKKyAgICBkZWYgcmVjcmVhdGlvbl9jaGVjayhzZWxmLCBtZXRhZGF0YSk6CisgICAgICAgICIiIkNoZWNrIHRoYXQgY29tcGlsZWFsbCByZWNyZWF0ZXMgYnl0ZWNvZGUgd2hlbiB0aGUgbmV3IG1ldGFkYXRhIGlzCisgICAgICAgIHVzZWQuIiIiCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAnc3RhdCcpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCpzZWxmLmRhdGEoKSkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuYmNfcGF0aCwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgIGJjID0gZmlsZS5yZWFkKClbbGVuKG1ldGFkYXRhKTpdCisgICAgICAgIHdpdGggb3BlbihzZWxmLmJjX3BhdGgsICd3YicpIGFzIGZpbGU6CisgICAgICAgICAgICBmaWxlLndyaXRlKG1ldGFkYXRhKQorICAgICAgICAgICAgZmlsZS53cml0ZShiYykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgqc2VsZi5kYXRhKCkpCisgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIGZvcmNlPUZhbHNlLCBxdWlldD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKnNlbGYuZGF0YSgpKQorCisgICAgZGVmIHRlc3RfbXRpbWUoc2VsZik6CisgICAgICAgICMgVGVzdCBhIGNoYW5nZSBpbiBtdGltZSBsZWFkcyB0byBhIG5ldyAucHljLgorICAgICAgICBzZWxmLnJlY3JlYXRpb25fY2hlY2soc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIDEpKQorCisgICAgZGVmIHRlc3RfbWFnaWNfbnVtYmVyKHNlbGYpOgorICAgICAgICAjIFRlc3QgYSBjaGFuZ2UgaW4gbXRpbWUgbGVhZHMgdG8gYSBuZXcgLnB5Yy4KKyAgICAgICAgc2VsZi5yZWNyZWF0aW9uX2NoZWNrKGInXDBcMFwwXDAnKQorCisgICAgZGVmIHRlc3RfY29tcGlsZV9maWxlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvbXBpbGluZyBhIHNpbmdsZSBmaWxlLCBhbmQgY29tcGxldGUgZGlyZWN0b3J5CisgICAgICAgIGZvciBmbiBpbiAoc2VsZi5iY19wYXRoLCBzZWxmLmJjX3BhdGgyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjb21waWxlYWxsLmNvbXBpbGVfZmlsZShzZWxmLnNvdXJjZV9wYXRoLCBmb3JjZT1GYWxzZSwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHNlbGYuYmNfcGF0aCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBvcy5wYXRoLmlzZmlsZShzZWxmLmJjX3BhdGgyKSkKKyAgICAgICAgb3MudW5saW5rKHNlbGYuYmNfcGF0aCkKKyAgICAgICAgY29tcGlsZWFsbC5jb21waWxlX2RpcihzZWxmLmRpcmVjdG9yeSwgZm9yY2U9RmFsc2UsIHF1aWV0PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShzZWxmLmJjX3BhdGgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvcy5wYXRoLmlzZmlsZShzZWxmLmJjX3BhdGgyKSkKKyAgICAgICAgb3MudW5saW5rKHNlbGYuYmNfcGF0aCkKKyAgICAgICAgb3MudW5saW5rKHNlbGYuYmNfcGF0aDIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENvbXBpbGVhbGxUZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21waWxlci5weQppbmRleCBlNWI4MzY1Li4zMzJlMGJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZXIucHkKQEAgLTIzLDcgKzIzLDkgQEAKICAgICAgICAgIyB0byBnZW5lcmF0ZSBzb21lIGtpbmQgb2YgY29kZSBmb3IgaXQuCiAKICAgICAgICAgbmV4dF90aW1lID0gdGltZS50aW1lKCkgKyBfUFJJTlRfV09SS0lOR19NU0dfSU5URVJWQUwKLSAgICAgICAgbGliZGlyID0gb3MucGF0aC5kaXJuYW1lKHVuaXR0ZXN0Ll9fZmlsZV9fKQorICAgICAgICAjIHdhcm5pbmc6IGlmICdvcycgb3IgJ3Rlc3Rfc3VwcG9ydCcgYXJlIG1vdmVkIGluIHNvbWUgb3RoZXIgZGlyLAorICAgICAgICAjIHRoZXkgc2hvdWxkIGJlIGNoYW5nZWQgaGVyZS4KKyAgICAgICAgbGliZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLl9fZmlsZV9fKQogICAgICAgICB0ZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKHRlc3QudGVzdF9zdXBwb3J0Ll9fZmlsZV9fKQogCiAgICAgICAgIGZvciBkaXIgaW4gW2xpYmRpciwgdGVzdGRpcl06CkBAIC03OSwxOSArODEsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdHJpbmc+IiwgImV4ZWMiKQogICAgICAgICBkY3QgPSB7fQogICAgICAgICBleGVjIGMgaW4gZGN0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRjdC5nZXQoJ2UnKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGN0LmdldCgnZicpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjdC5nZXQoJ2UnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3QuZ2V0KCdmJyksIDEpCiAKICAgICBkZWYgdGVzdERlZmF1bHRBcmdzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZXIucGFyc2UsICJkZWYgZm9vKGE9MSwgYik6IHBhc3MiKQogCiAgICAgZGVmIHRlc3REb2NzdHJpbmdzKHNlbGYpOgogICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnImRvYyInLCAnPHN0cmluZz4nLCAnZXhlYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnX19kb2NfXycgaW4gYy5jb19uYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignX19kb2NfXycsIGMuY29fbmFtZXMpCiAgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdkZWYgZigpOlxuICJkb2MiJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQogICAgICAgICBnID0ge30KICAgICAgICAgZXhlYyBjIGluIGcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ1snZiddLl9fZG9jX18sICJkb2MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdbJ2YnXS5fX2RvY19fLCAiZG9jIikKIAogICAgIGRlZiB0ZXN0TGluZU5vKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhbGwgbm9kZXMgZXhjZXB0IE1vZHVsZSBoYXZlIGEgY29ycmVjdCBsaW5lbm8gYXR0cmlidXRlLgpAQCAtMTEwLDE2ICsxMTIsMTYgQEAKIAogICAgIGRlZiBfY2hlY2tfbGluZW5vKHNlbGYsIG5vZGUpOgogICAgICAgICBpZiBub3Qgbm9kZS5fX2NsYXNzX18gaW4gTk9MSU5FTk86Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShub2RlLmxpbmVubywgaW50KSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShub2RlLmxpbmVubywgaW50LAogICAgICAgICAgICAgICAgICJsaW5lbm89JXMgb24gJXMiICUgKG5vZGUubGluZW5vLCBub2RlLl9fY2xhc3NfXykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obm9kZS5saW5lbm8gPiAwLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUubGluZW5vID4gMCwKICAgICAgICAgICAgICAgICAibGluZW5vPSVzIG9uICVzIiAlIChub2RlLmxpbmVubywgbm9kZS5fX2NsYXNzX18pKQogICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5nZXRDaGlsZE5vZGVzKCk6CiAgICAgICAgICAgICBzZWxmLmNoZWNrX2xpbmVubyhjaGlsZCkKIAogICAgIGRlZiB0ZXN0RmxhdHRlbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmxhdHRlbihbMSwgWzJdXSksIFsxLCAyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmxhdHRlbigoMSwgKDIsKSkpLCBbMSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhdHRlbihbMSwgWzJdXSksIFsxLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbGF0dGVuKCgxLCAoMiwpKSksIFsxLCAyXSkKIAogICAgIGRlZiB0ZXN0TmVzdGVkU2NvcGUoc2VsZik6CiAgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdkZWYgZygpOlxuJwpAQCAtMTMxLDE0ICsxMzMsNDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4ZWMnKQogICAgICAgICBkY3QgPSB7fQogICAgICAgICBleGVjIGMgaW4gZGN0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRjdC5nZXQoJ3Jlc3VsdCcpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjdC5nZXQoJ3Jlc3VsdCcpLCAzKQogCiAgICAgZGVmIHRlc3RHZW5FeHAoc2VsZik6CiAgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdsaXN0KChpLGopIGZvciBpIGluIHJhbmdlKDMpIGlmIGkgPCAzJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICBmb3IgaiBpbiByYW5nZSg0KSBpZiBqID4gMiknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXZhbCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV2YWwoYyksIFsoMCwgMyksICgxLCAzKSwgKDIsIDMpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCBbKDAsIDMpLCAoMSwgMyksICgyLCAzKV0pCisKKyAgICBkZWYgdGVzdFNldExpdGVyYWwoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCd7MSwgMiwgM30nLCAnPHN0cmluZz4nLCAnZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgezEsMiwzfSkKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ3sxLCAyLCAzLH0nLCAnPHN0cmluZz4nLCAnZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgezEsMiwzfSkKKworICAgIGRlZiB0ZXN0RGljdExpdGVyYWwoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCd7MToyLCAyOjMsIDM6NH0nLCAnPHN0cmluZz4nLCAnZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgezE6MiwgMjozLCAzOjR9KQorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnezE6MiwgMjozLCAzOjQsfScsICc8c3RyaW5nPicsICdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCB7MToyLCAyOjMsIDM6NH0pCisKKyAgICBkZWYgdGVzdFNldENvbXAoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCd7eCBmb3IgeCBpbiByYW5nZSgxLCA0KX0nLCAnPHN0cmluZz4nLCAnZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgezEsIDIsIDN9KQorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgne3ggKiB5IGZvciB4IGluIHJhbmdlKDMpIGlmIHggIT0gMCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICBmb3IgeSBpbiByYW5nZSg0KSBpZiB5ICE9IDB9JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxLCAyLCAzLCA0LCA2fSkKKworICAgIGRlZiB0ZXN0RGljdENvbXAoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCd7eDp4KzEgZm9yIHggaW4gcmFuZ2UoMSwgNCl9JywgJzxzdHJpbmc+JywgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxOjIsIDI6MywgMzo0fSkKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ3soeCwgeSkgOiB5IGZvciB4IGluIHJhbmdlKDIpIGlmIHggIT0gMCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGZvciB5IGluIHJhbmdlKDMpIGlmIHkgIT0gMH0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgeygxLCAyKTogMiwgKDEsIDEpOiAxfSkKIAogICAgIGRlZiB0ZXN0V2l0aChzZWxmKToKICAgICAgICAgIyBTRiBidWcgMTYzODI0MwpAQCAtMTUxLDcgKzE4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGVjJyApCiAgICAgICAgIGRjdCA9IHsnVHJpdmlhbENvbnRleHQnOiBUcml2aWFsQ29udGV4dH0KICAgICAgICAgZXhlYyBjIGluIGRjdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkY3QuZ2V0KCdyZXN1bHQnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3QuZ2V0KCdyZXN1bHQnKSwgMSkKIAogICAgIGRlZiB0ZXN0V2l0aEFzcyhzZWxmKToKICAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnRcbicKQEAgLTE2Myw4ICsxOTUsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4ZWMnICkKICAgICAgICAgZGN0ID0geydUcml2aWFsQ29udGV4dCc6IFRyaXZpYWxDb250ZXh0fQogICAgICAgICBleGVjIGMgaW4gZGN0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRjdC5nZXQoJ3Jlc3VsdCcpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjdC5nZXQoJ3Jlc3VsdCcpLCAxKQogCisgICAgZGVmIHRlc3RXaXRoTXVsdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgY2xhc3MgQ3R4OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgorICAgICAgICAgICAgICAgIHNlbGYubiA9IG4KKyAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChzZWxmLm4pCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZiBmKCk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgd2l0aCBDdHgoMSkgYXMgdGMsIEN0eCgyKSBhcyB0YzI6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybiAxXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXN1bHQgPSBmKCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhlYycgKQorICAgICAgICBkY3QgPSB7J0N0eCc6IEN0eH0KKyAgICAgICAgZXhlYyBjIGluIGRjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjdC5nZXQoJ3Jlc3VsdCcpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgWzEsIDJdKQorCisgICAgZGVmIHRlc3RHbG9iYWwoc2VsZik6CisgICAgICAgIGNvZGUgPSBjb21waWxlci5jb21waWxlKCdnbG9iYWwgeFxueD0xJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICBkMSA9IHsnX19idWlsdGluc19fJzoge319CisgICAgICAgIGQyID0ge30KKyAgICAgICAgZXhlYyBjb2RlIGluIGQxLCBkMgorICAgICAgICAjIHggc2hvdWxkIGJlIGluIHRoZSBnbG9iYWxzIGRpY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5nZXQoJ3gnKSwgMSkKIAogICAgIGRlZiB0ZXN0UHJpbnRGdW5jdGlvbihzZWxmKToKICAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb25cbicKQEAgLTE3NCwxNCArMjM0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGVjJyApCiAgICAgICAgIGRjdCA9IHsnb3V0cHV0JzogU3RyaW5nSU8oKX0KICAgICAgICAgZXhlYyBjIGluIGRjdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkY3RbJ291dHB1dCddLmdldHZhbHVlKCksICdhKipiKysnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjdFsnb3V0cHV0J10uZ2V0dmFsdWUoKSwgJ2EqKmIrKycpCiAKICAgICBkZWYgX3Rlc3RFcnJFbmMoc2VsZiwgc3JjLCB0ZXh0LCBvZmZzZXQpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb21waWxlKHNyYywgIiIsICJleGVjIikKICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZS5vZmZzZXQsIG9mZnNldCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGUudGV4dCwgdGV4dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5vZmZzZXQsIG9mZnNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS50ZXh0LCB0ZXh0KQogCiAgICAgZGVmIHRlc3RTb3VyY2VDb2RlRW5jb2RpbmdzRXJyb3Ioc2VsZik6CiAgICAgICAgICMgVGVzdCBTeW50YXhFcnJvciB3aXRoIGVuY29kaW5nIGRlZmluaXRpb24KQEAgLTIyMCw2ICsyODAsOSBAQAogbFszOjRdCiBkID0geydhJzogMn0KIGQgPSB7fQorZCA9IHt4OiB5IGZvciB4LCB5IGluIHppcChyYW5nZSg1KSwgcmFuZ2UoNSwxMCkpfQorcyA9IHt4IGZvciB4IGluIHJhbmdlKDEwKX0KK3MgPSB7MX0KIHQgPSAoKQogdCA9ICgxLCAyKQogbCA9IFtdCkBAIC0yNDcsNyArMzEwLDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIGdsb2JhbCBURVNUX0FMTAotICAgIFRFU1RfQUxMID0gdGVzdC50ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgiY29tcGlsZXIiKQorICAgIFRFU1RfQUxMID0gdGVzdC50ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgiY3B1IikKICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29tcGlsZXJUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5IGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CmluZGV4IDYzNDI1MDEuLjU5ZTg2NzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKQEAgLTIsNyArMiw3IEBACiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiBmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZG9tCi1mcm9tIG1hdGggaW1wb3J0IGF0YW4yCitmcm9tIG1hdGggaW1wb3J0IGF0YW4yLCBpc25hbiwgY29weXNpZ24KIAogSU5GID0gZmxvYXQoImluZiIpCiBOQU4gPSBmbG9hdCgibmFuIikKQEAgLTM1LDE2ICszNSwzNiBAQAogICAgICAgICBpZiB4ID09IDA6CiAgICAgICAgICAgICByZXR1cm4gYWJzKHkpIDwgZXBzCiAgICAgICAgICMgY2hlY2sgdGhhdCByZWxhdGl2ZSBkaWZmZXJlbmNlIDwgZXBzCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhYnMoKHgteSkveSkgPCBlcHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhYnMoKHgteSkveSkgPCBlcHMpCisKKyAgICBkZWYgYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJhc3NlcnQgdGhhdCBmbG9hdHMgeCBhbmQgeSBhcmUgaWRlbnRpY2FsLCBpbiB0aGUgc2Vuc2UgdGhhdDoKKyAgICAgICAgKDEpIGJvdGggeCBhbmQgeSBhcmUgbmFucywgb3IKKyAgICAgICAgKDIpIGJvdGggeCBhbmQgeSBhcmUgaW5maW5pdGllcywgd2l0aCB0aGUgc2FtZSBzaWduLCBvcgorICAgICAgICAoMykgYm90aCB4IGFuZCB5IGFyZSB6ZXJvcywgd2l0aCB0aGUgc2FtZSBzaWduLCBvcgorICAgICAgICAoNCkgeCBhbmQgeSBhcmUgYm90aCBmaW5pdGUgYW5kIG5vbnplcm8sIGFuZCB4ID09IHkKKworICAgICAgICAiIiIKKyAgICAgICAgbXNnID0gJ2Zsb2F0cyB7IXJ9IGFuZCB7IXJ9IGFyZSBub3QgaWRlbnRpY2FsJworCisgICAgICAgIGlmIGlzbmFuKHgpIG9yIGlzbmFuKHkpOgorICAgICAgICAgICAgaWYgaXNuYW4oeCkgYW5kIGlzbmFuKHkpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbGlmIHggPT0geToKKyAgICAgICAgICAgIGlmIHggIT0gMC4wOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgIyBib3RoIHplcm87IGNoZWNrIHRoYXQgc2lnbnMgbWF0Y2gKKyAgICAgICAgICAgIGVsaWYgY29weXNpZ24oMS4wLCB4KSA9PSBjb3B5c2lnbigxLjAsIHkpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgKz0gJzogemVyb3MgaGF2ZSBkaWZmZXJlbnQgc2lnbnMnCisgICAgICAgIHNlbGYuZmFpbChtc2cuZm9ybWF0KHgsIHkpKQogCiAgICAgZGVmIGFzc2VydENsb3NlKHNlbGYsIHgsIHksIGVwcz0xZS05KToKICAgICAgICAgIiIiUmV0dXJuIHRydWUgaWZmIGNvbXBsZXhlcyB4IGFuZCB5ICJhcmUgY2xvc2VcIiIiIgogICAgICAgICBzZWxmLmFzc2VydENsb3NlQWJzKHgucmVhbCwgeS5yZWFsLCBlcHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2VBYnMoeC5pbWFnLCB5LmltYWcsIGVwcykKIAotICAgIGRlZiBhc3NlcnRJcyhzZWxmLCBhLCBiKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgaXMgYikKLQogICAgIGRlZiBjaGVja19kaXYoc2VsZiwgeCwgeSk6CiAgICAgICAgICIiIkNvbXB1dGUgY29tcGxleCB6PXgqeSwgYW5kIGNoZWNrIHRoYXQgei94PT15IGFuZCB6L3k9PXguIiIiCiAgICAgICAgIHogPSB4ICogeQpAQCAtOTUsOCArMTE1LDIxIEBACiAgICAgZGVmIHRlc3RfY29lcmNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBjb21wbGV4Ll9fY29lcmNlX18sIDErMWosIDFMPDwxMDAwMCkKIAorICAgIGRlZiB0ZXN0X25vX2ltcGxpY2l0X2NvZXJjZShzZWxmKToKKyAgICAgICAgIyBQeXRob24gMi43IHJlbW92ZWQgaW1wbGljaXQgY29lcmNpb24gZnJvbSB0aGUgY29tcGxleCB0eXBlCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2NvZXJjZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKyAyLjBqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA8IDIuMGopCisKICAgICBkZWYgdGVzdF9yaWNoY29tcGFyZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgY29tcGxleC5fX2VxX18sIDErMWosIDFMPDwxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4Ll9fZXFfXygxKzFqLCAxTDw8MTAwMDApLCBGYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4Ll9fbHRfXygxKzFqLCBOb25lKSwgTm90SW1wbGVtZW50ZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX2VxX18oMSsxaiwgMSsxaiksIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX2VxX18oMSsxaiwgMisyaiksIEZhbHNlKQpAQCAtMTA3LDYgKzE0MCwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXguX19ndF9fLCAxKzFqLCAyKzJqKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXguX19nZV9fLCAxKzFqLCAyKzJqKQogCisgICAgZGVmIHRlc3RfcmljaGNvbXBhcmVfYm91bmRhcmllcyhzZWxmKToKKyAgICAgICAgZGVmIGNoZWNrKG4sIGRlbHRhcywgaXNfZXF1YWwsIGltYWcgPSAwLjApOgorICAgICAgICAgICAgZm9yIGRlbHRhIGluIGRlbHRhczoKKyAgICAgICAgICAgICAgICBpID0gbiArIGRlbHRhCisgICAgICAgICAgICAgICAgeiA9IGNvbXBsZXgoaSwgaW1hZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19lcV9fKHosIGkpLCBpc19lcXVhbChkZWx0YSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fbmVfXyh6LCBpKSwgbm90IGlzX2VxdWFsKGRlbHRhKSkKKyAgICAgICAgIyBGb3IgSUVFRS03NTQgZG91YmxlcyB0aGUgZm9sbG93aW5nIHNob3VsZCBob2xkOgorICAgICAgICAjICAgIHggaW4gWzIgKiogKDUyICsgaSksIDIgKiogKDUzICsgaSArIDEpXSAtPiB4IG1vZCAyICoqIGkgPT0gMAorICAgICAgICAjIHdoZXJlIHRoZSBpbnRlcnZhbCBpcyByZXByZXNlbnRhYmxlLCBvZiBjb3Vyc2UuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwKToKKyAgICAgICAgICAgIHBvdyA9IDUyICsgaQorICAgICAgICAgICAgbXVsdCA9IDIgKiogaQorICAgICAgICAgICAgY2hlY2soMiAqKiBwb3csIHJhbmdlKDEsIDEwMSksIGxhbWJkYSBkZWx0YTogZGVsdGEgJSBtdWx0ID09IDApCisgICAgICAgICAgICBjaGVjaygyICoqIHBvdywgcmFuZ2UoMSwgMTAxKSwgbGFtYmRhIGRlbHRhOiBGYWxzZSwgZmxvYXQoaSkpCisgICAgICAgIGNoZWNrKDIgKiogNTMsIHJhbmdlKC0xMDAsIDApLCBsYW1iZGEgZGVsdGE6IFRydWUpCisKICAgICBkZWYgdGVzdF9tb2Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCAoMSsxaikuX19tb2RfXywgMCswaikKIApAQCAtMTYyLDggKzIxMiw4IEBACiAKICAgICBkZWYgdGVzdF9ib29sY29udGV4dChzZWxmKToKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oY29tcGxleChyYW5kb20oKSArIDFlLTYsIHJhbmRvbSgpICsgMWUtNikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgY29tcGxleCgwLjAsIDAuMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcGxleChyYW5kb20oKSArIDFlLTYsIHJhbmRvbSgpICsgMWUtNikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY29tcGxleCgwLjAsIDAuMCkpCiAKICAgICBkZWYgdGVzdF9jb25qdWdhdGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2UoY29tcGxleCg1LjMsIDkuOCkuY29uanVnYXRlKCksIDUuMy05LjhqKQpAQCAtMjEzLDkgKzI2MywxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIisxIiksICsxKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIigxKzJqKSIpLCAxKzJqKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIigxLjMrMi4yaikiKSwgMS4zKzIuMmopCi0gICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiMUUtNTAwIiksIDFlLTUwMCswaikKLSAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIxZS01MDBKIiksIDFlLTUwMGopCi0gICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiKzFlLTMxNS0xZS00MDBqIiksIDFlLTMxNS0xZS00MDBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIjMuMTQrMUoiKSwgMy4xNCsxaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIgKCArMy4xNC02SiApIiksIDMuMTQtNmopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiICggKzMuMTQtSiApIiksIDMuMTQtMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiICggKzMuMTQraiApIiksIDMuMTQrMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiSiIpLCAxaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIoIGogKSIpLCAxaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIrSiIpLCAxaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIoIC1qKSIpLCAtMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgnMWUtNTAwJyksIDAuMCArIDAuMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgnLTFlLTUwMGonKSwgMC4wIC0gMC4waikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCctMWUtNTAwKzFlLTUwMGonKSwgLTAuMCArIDAuMGopCiAKICAgICAgICAgY2xhc3MgY29tcGxleDIoY29tcGxleCk6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KGNvbXBsZXgyKDErMWopKSwgMSsxaikKQEAgLTIzNywxMyArMjk1LDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRfemVyb3MoY29tcGxleCgtMC4sIDEuKS5yZWFsKSwgc3BsaXRfemVyb3MoLTAuKSkKIAogICAgICAgICBjID0gMy4xNCArIDFqCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb21wbGV4KGMpIGlzIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21wbGV4KGMpIGlzIGMpCiAgICAgICAgIGRlbCBjCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCAiMSIsICIxIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCAxLCAiMSIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KCIgIDMuMTQrSiAgIiksIDMuMTQrMWopCiAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgodW5pY29kZSgiICAzLjE0K0ogICIpKSwgMy4xNCsxaikKIApAQCAtMjY5LDggKzMyNiwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMSsoMmopIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIigxKzJqKTEyMyIpCiAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCB1bmljb2RlKCIxIio1MDApKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgdW5pY29kZSgieCIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMWorMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxZTFlaiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxZSsrMWVqIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIikxKzJqKCIpCisgICAgICAgICMgdGhlIGZvbGxvd2luZyB0aHJlZSBhcmUgYWNjZXB0ZWQgYnkgUHl0aG9uIDIuNgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMS4uMWoiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMS4xMS4xaiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxZTEuMWoiKQorCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICAjIGNoZWNrIHRoYXQgY29tcGxleCBhY2NlcHRzIGxvbmcgdW5pY29kZSBzdHJpbmdzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoY29tcGxleCh1bmljb2RlKCIxIio1MDApKSksIGNvbXBsZXgpCiAKICAgICAgICAgY2xhc3MgRXZpbEV4YyhFeGNlcHRpb24pOgogICAgICAgICAgICAgcGFzcwpAQCAtMzEzLDYgKzM4MSw2MSBAQAogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoY29tcGxleDEoMWopKSwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgY29tcGxleDIoMWopKQogCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIHhjb21wbGV4KGNvbXBsZXgpOgorICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KGNvbXBsZXgoc2VsZikgKyBvdGhlcikKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgICAgICAgICBkZWYgX19zdWJfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgoY29tcGxleChzZWxmKSArIG90aGVyKQorICAgICAgICAgICAgX19yc3ViX18gPSBfX3N1Yl9fCisKKyAgICAgICAgICAgIGRlZiBfX211bF9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChjb21wbGV4KHNlbGYpICogb3RoZXIpCisgICAgICAgICAgICBfX3JtdWxfXyA9IF9fbXVsX18KKworICAgICAgICAgICAgZGVmIF9fZGl2X18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KGNvbXBsZXgoc2VsZikgLyBvdGhlcikKKworICAgICAgICAgICAgZGVmIF9fcmRpdl9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChvdGhlciAvIGNvbXBsZXgoc2VsZikpCisKKyAgICAgICAgICAgIF9fdHJ1ZWRpdl9fID0gX19kaXZfXworICAgICAgICAgICAgX19ydHJ1ZWRpdl9fID0gX19yZGl2X18KKworICAgICAgICAgICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgoY29tcGxleChzZWxmKSAvLyBvdGhlcikKKworICAgICAgICAgICAgZGVmIF9fcmZsb29yZGl2X18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KG90aGVyIC8vIGNvbXBsZXgoc2VsZikpCisKKyAgICAgICAgICAgIGRlZiBfX3Bvd19fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChjb21wbGV4KHNlbGYpICoqIG90aGVyKQorCisgICAgICAgICAgICBkZWYgX19ycG93X18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KG90aGVyICoqIGNvbXBsZXgoc2VsZikgKQorCisgICAgICAgICAgICBkZWYgX19tb2RfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgoY29tcGxleChzZWxmKSAlIG90aGVyKQorCisgICAgICAgICAgICBkZWYgX19ybW9kX18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KG90aGVyICUgY29tcGxleChzZWxmKSkKKworICAgICAgICBpbmZpeF9iaW5vcHMgPSAoJysnLCAnLScsICcqJywgJyoqJywgJyUnLCAnLy8nLCAnLycpCisgICAgICAgIHhjb21wbGV4X3ZhbHVlcyA9ICh4Y29tcGxleCgxKSwgeGNvbXBsZXgoMTIzLjApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNvbXBsZXgoLTEwKzJqKSwgeGNvbXBsZXgoMysxODdqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjb21wbGV4KDMtNzhqKSkKKyAgICAgICAgdGVzdF92YWx1ZXMgPSAoMSwgMTIzLjAsIDEwLTE5aiwgeGNvbXBsZXgoMSsyaiksCisgICAgICAgICAgICAgICAgICAgICAgIHhjb21wbGV4KDErODdqKSwgeGNvbXBsZXgoMTArOTBqKSkKKworICAgICAgICBmb3Igb3AgaW4gaW5maXhfYmlub3BzOgorICAgICAgICAgICAgZm9yIHggaW4geGNvbXBsZXhfdmFsdWVzOgorICAgICAgICAgICAgICAgIGZvciB5IGluIHRlc3RfdmFsdWVzOgorICAgICAgICAgICAgICAgICAgICBhID0gJ3ggJXMgeScgJSBvcAorICAgICAgICAgICAgICAgICAgICBiID0gJ3kgJXMgeCcgJSBvcAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShldmFsKGEpKSBpcyB0eXBlKGV2YWwoYikpIGlzIHhjb21wbGV4KQorCiAgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKICAgICAgICAgZm9yIHggaW4geHJhbmdlKC0zMCwgMzApOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHgpLCBoYXNoKGNvbXBsZXgoeCwgMCkpKQpAQCAtMzM1LDE3ICs0NTgsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtNmosY29tcGxleChyZXByKC02aikpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDZqLGNvbXBsZXgocmVwcig2aikpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDEuLCBJTkYpKSwgIigxK2luZipqKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDEuLCAtSU5GKSksICIoMS1pbmYqaikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgxLiwgSU5GKSksICIoMStpbmZqKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDEuLCAtSU5GKSksICIoMS1pbmZqKSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KElORiwgMSkpLCAiKGluZisxaikiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgtSU5GLCBJTkYpKSwgIigtaW5mK2luZipqKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KC1JTkYsIElORikpLCAiKC1pbmYraW5maikiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleChOQU4sIDEpKSwgIihuYW4rMWopIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMSwgTkFOKSksICIoMStuYW4qaikiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleChOQU4sIE5BTikpLCAiKG5hbituYW4qaikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgxLCBOQU4pKSwgIigxK25hbmopIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoTkFOLCBOQU4pKSwgIihuYW4rbmFuaikiKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDAsIElORikpLCAiaW5mKmoiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgwLCAtSU5GKSksICItaW5mKmoiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgwLCBOQU4pKSwgIm5hbipqIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMCwgSU5GKSksICJpbmZqIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMCwgLUlORikpLCAiLWluZmoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgwLCBOQU4pKSwgIm5hbmoiKQogCiAgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMSs2aiksIC0xLTZqKQpAQCAtMzc4LDggKzUwMSwxNDYgQEAKICAgICAgICAgZGVmIHRlc3RfcGx1c19taW51c18waihzZWxmKToKICAgICAgICAgICAgICMgdGVzdCB0aGF0IC0waiBhbmQgMGogbGl0ZXJhbHMgYXJlIG5vdCBpZGVudGlmaWVkCiAgICAgICAgICAgICB6MSwgejIgPSAwaiwgLTBqCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdGFuMih6MS5pbWFnLCAtMS4pLCBhdGFuMigwLiwgLTEuKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0YW4yKHoyLmltYWcsIC0xLiksIGF0YW4yKC0wLiwgLTEuKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXRhbjIoejEuaW1hZywgLTEuKSwgYXRhbjIoMC4sIC0xLikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0YW4yKHoyLmltYWcsIC0xLiksIGF0YW4yKC0wLiwgLTEuKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KCIxZTUwMCIpLCBjb21wbGV4KElORiwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KCItMWU1MDBqIiksIGNvbXBsZXgoMC4wLCAtSU5GKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KCItMWU1MDArMS44ZTMwOGoiKSwgY29tcGxleCgtSU5GLCBJTkYpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorICAgIGRlZiB0ZXN0X3JlcHJfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICB2YWxzID0gWzAuMCwgMWUtNTAwLCAxZS0zMTUsIDFlLTIwMCwgMC4wMTIzLCAzLjE0MTUsIDFlNTAsIElORiwgTkFOXQorICAgICAgICB2YWxzICs9IFstdiBmb3IgdiBpbiB2YWxzXQorCisgICAgICAgICMgY29tcGxleChyZXByKHopKSBzaG91bGQgcmVjb3ZlciB6IGV4YWN0bHksIGV2ZW4gZm9yIGNvbXBsZXgKKyAgICAgICAgIyBudW1iZXJzIGludm9sdmluZyBhbiBpbmZpbml0eSwgbmFuLCBvciBuZWdhdGl2ZSB6ZXJvCisgICAgICAgIGZvciB4IGluIHZhbHM6CisgICAgICAgICAgICBmb3IgeSBpbiB2YWxzOgorICAgICAgICAgICAgICAgIHogPSBjb21wbGV4KHgsIHkpCisgICAgICAgICAgICAgICAgcm91bmR0cmlwID0gY29tcGxleChyZXByKHopKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKHoucmVhbCwgcm91bmR0cmlwLnJlYWwpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGbG9hdHNBcmVJZGVudGljYWwoei5pbWFnLCByb3VuZHRyaXAuaW1hZykKKworICAgICAgICAjIGlmIHdlIHByZWRlZmluZSBzb21lIGNvbnN0YW50cywgdGhlbiBldmFsKHJlcHIoeikpIHNob3VsZAorICAgICAgICAjIGFsc28gd29yaywgZXhjZXB0IHRoYXQgaXQgbWlnaHQgY2hhbmdlIHRoZSBzaWduIG9mIHplcm9zCisgICAgICAgIGluZiwgbmFuID0gZmxvYXQoJ2luZicpLCBmbG9hdCgnbmFuJykKKyAgICAgICAgaW5maiwgbmFuaiA9IGNvbXBsZXgoMC4wLCBpbmYpLCBjb21wbGV4KDAuMCwgbmFuKQorICAgICAgICBmb3IgeCBpbiB2YWxzOgorICAgICAgICAgICAgZm9yIHkgaW4gdmFsczoKKyAgICAgICAgICAgICAgICB6ID0gY29tcGxleCh4LCB5KQorICAgICAgICAgICAgICAgIHJvdW5kdHJpcCA9IGV2YWwocmVwcih6KSkKKyAgICAgICAgICAgICAgICAjIGFkZGluZyAwLjAgaGFzIG5vIGVmZmVjdCBiZXNpZGUgY2hhbmdpbmcgLTAuMCB0byAwLjAKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZsb2F0c0FyZUlkZW50aWNhbCgwLjAgKyB6LnJlYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wICsgcm91bmR0cmlwLnJlYWwpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGbG9hdHNBcmVJZGVudGljYWwoMC4wICsgei5pbWFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCArIHJvdW5kdHJpcC5pbWFnKQorCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICAjIGVtcHR5IGZvcm1hdCBzdHJpbmcgaXMgc2FtZSBhcyBzdHIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxKzNqLCAnJyksIHN0cigxKzNqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzMuNWosICcnKSwgc3RyKDEuNSszLjVqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoM2osICcnKSwgc3RyKDNqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMy4yaiwgJycpLCBzdHIoMy4yaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDMrMGosICcnKSwgc3RyKDMrMGopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgzLjIrMGosICcnKSwgc3RyKDMuMiswaikpCisKKyAgICAgICAgIyBlbXB0eSBwcmVzZW50YXRpb24gdHlwZSBzaG91bGQgc3RpbGwgYmUgYW5hbG9nb3VzIHRvIHN0ciwKKyAgICAgICAgIyBldmVuIHdoZW4gZm9ybWF0IHN0cmluZyBpcyBub25lbXB0eSAoaXNzdWUgIzU5MjApLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgzLjIrMGosICctJyksIHN0cigzLjIrMGopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgzLjIrMGosICc8JyksIHN0cigzLjIrMGopKQorICAgICAgICB6ID0gNC83LiAtIDEwMGovNy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJycpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICctJyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJzwnKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnMTAnKSwgc3RyKHopKQorICAgICAgICB6ID0gY29tcGxleCgwLjAsIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJycpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICctJyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJzwnKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnMicpLCBzdHIoeikpCisgICAgICAgIHogPSBjb21wbGV4KC0wLjAsIDIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJycpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICctJyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJzwnKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnMycpLCBzdHIoeikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMSszaiwgJ2cnKSwgJzErM2onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgzaiwgJ2cnKSwgJzArM2onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrMy41aiwgJ2cnKSwgJzEuNSszLjVqJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrMy41aiwgJytnJyksICcrMS41KzMuNWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUtMy41aiwgJytnJyksICcrMS41LTMuNWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUtMy41aiwgJy1nJyksICcxLjUtMy41aicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszLjVqLCAnIGcnKSwgJyAxLjUrMy41aicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNS0zLjVqLCAnIGcnKSwgJyAxLjUtMy41aicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUrMy41aiwgJyBnJyksICctMS41KzMuNWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41LTMuNWosICcgZycpLCAnLTEuNS0zLjVqJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41LTMuNWUtMjBqLCAnZycpLCAnLTEuNS0zLjVlLTIwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUtMy41aiwgJ2YnKSwgJy0xLjUwMDAwMC0zLjUwMDAwMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41LTMuNWosICdGJyksICctMS41MDAwMDAtMy41MDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNS0zLjVqLCAnZScpLCAnLTEuNTAwMDAwZSswMC0zLjUwMDAwMGUrMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNS0zLjVqLCAnLjJlJyksICctMS41MGUrMDAtMy41MGUrMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNS0zLjVqLCAnLjJFJyksICctMS41MEUrMDAtMy41MEUrMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNWUxMC0zLjVlNWosICcuMkcnKSwgJy0xLjVFKzEwLTMuNUUrMDVqJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICc8MjBnJyksICAnMS41KzNqICAgICAgICAgICAgICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICcqPDIwZycpLCAnMS41KzNqKioqKioqKioqKioqKionKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICc+MjBnJyksICAnICAgICAgICAgICAgICAxLjUrM2onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICdeMjBnJyksICAnICAgICAgIDEuNSszaiAgICAgICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICc8MjAnKSwgICAnKDEuNSszaikgICAgICAgICAgICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICc+MjAnKSwgICAnICAgICAgICAgICAgKDEuNSszaiknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICdeMjAnKSwgICAnICAgICAgKDEuNSszaikgICAgICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjEyMy0zLjEyM2osICdeMjAuMicpLCAnICAgICAoMS4xLTMuMWopICAgICAnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszaiwgJzIwLjJmJyksICcgICAgICAgICAgMS41MCszLjAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszaiwgJz4yMC4yZicpLCAnICAgICAgICAgIDEuNTArMy4wMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICc8MjAuMmYnKSwgJzEuNTArMy4wMGogICAgICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41ZTIwKzNqLCAnPDIwLjJmJyksICcxNTAwMDAwMDAwMDAwMDAwMDAwMDAuMDArMy4wMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjVlMjArM2osICc+NDAuMmYnKSwgJyAgICAgICAgICAxNTAwMDAwMDAwMDAwMDAwMDAwMDAuMDArMy4wMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjVlMjArM2osICdeNDAsLjJmJyksICcgIDE1MCwwMDAsMDAwLDAwMCwwMDAsMDAwLDAwMC4wMCszLjAwaiAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41ZTIxKzNqLCAnXjQwLC4yZicpLCAnIDEsNTAwLDAwMCwwMDAsMDAwLDAwMCwwMDAsMDAwLjAwKzMuMDBqICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNWUyMSszMDAwaiwgJywuMmYnKSwgJzEsNTAwLDAwMCwwMDAsMDAwLDAwMCwwMDAsMDAwLjAwKzMsMDAwLjAwaicpCisKKyAgICAgICAgIyBhbHRlcm5hdGUgaXMgaW52YWxpZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoMS41KzAuNWopLl9fZm9ybWF0X18sICcjZicpCisKKyAgICAgICAgIyB6ZXJvIHBhZGRpbmcgaXMgaW52YWxpZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoMS41KzAuNWopLl9fZm9ybWF0X18sICcwMTBmJykKKworICAgICAgICAjICc9JyBhbGlnbm1lbnQgaXMgaW52YWxpZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoMS41KzNqKS5fX2Zvcm1hdF9fLCAnPTIwJykKKworICAgICAgICAjIGludGVnZXIgcHJlc2VudGF0aW9uIHR5cGVzIGFyZSBhbiBlcnJvcgorICAgICAgICBmb3IgdCBpbiAnYmNkb3hYJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgxLjUrMC41aikuX19mb3JtYXRfXywgdCkKKworICAgICAgICAjIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHdvcmtzIGluICcnLmZvcm1hdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyp7MDouM2Z9KicuZm9ybWF0KDMuMTQxNTkrMi43MTgyOGopLCAnKjMuMTQyKzIuNzE4aionKQorCisgICAgICAgICMgaXNzdWUgMzM4MjogJ2YnIGFuZCAnRicgd2l0aCBpbmYncyBhbmQgbmFuJ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChJTkYrMGopLCAnaW5mKzAuMDAwMDAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoSU5GKzBqKSwgJ0lORiswLjAwMDAwMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KC1JTkYrMGopLCAnLWluZiswLjAwMDAwMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KC1JTkYrMGopLCAnLUlORiswLjAwMDAwMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KGNvbXBsZXgoSU5GLCBJTkYpKSwgJ2luZitpbmZqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChjb21wbGV4KElORiwgSU5GKSksICdJTkYrSU5GaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoY29tcGxleChJTkYsIC1JTkYpKSwgJ2luZi1pbmZqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChjb21wbGV4KElORiwgLUlORikpLCAnSU5GLUlORmonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KGNvbXBsZXgoLUlORiwgSU5GKSksICctaW5mK2luZmonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KGNvbXBsZXgoLUlORiwgSU5GKSksICctSU5GK0lORmonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KGNvbXBsZXgoLUlORiwgLUlORikpLCAnLWluZi1pbmZqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChjb21wbGV4KC1JTkYsIC1JTkYpKSwgJy1JTkYtSU5GaicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChjb21wbGV4KE5BTiwgMCkpLCAnbmFuKzAuMDAwMDAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoY29tcGxleChOQU4sIDApKSwgJ05BTiswLjAwMDAwMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KGNvbXBsZXgoTkFOLCBOQU4pKSwgJ25hbituYW5qJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChjb21wbGV4KE5BTiwgTkFOKSksICdOQU4rTkFOaicpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoImNvbXBsZXggZGl2bW9kLi4sIC8vIGFuZCAlIGFyZSAiCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBsZXhfYXJncy5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGxleF9hcmdzLnB5CmluZGV4IGY0OTE1OWIuLjAzNmNiZWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleF9hcmdzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGxleF9hcmdzLnB5CkBAIC0xMDksNyArMTA5LDcgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKICAgICAgICAgICAgICgidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIiwgU3ludGF4V2FybmluZyksCiAgICAgICAgICAgICAoInBhcmVudGhlc2l6ZWQgYXJndW1lbnQgbmFtZXMgYXJlIGludmFsaWQiLCBTeW50YXhXYXJuaW5nKSk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29tcGxleEFyZ3NUZXN0Q2FzZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29udGFpbnMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbnRhaW5zLnB5CmluZGV4IDBkNTQwOTkuLjcxMzgwODEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGFpbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb250YWlucy5weQpAQCAtMjAsNTcgKzIwLDU3IEBACiAgICAgICAgIGEgPSBiYXNlX3NldCgxKQogICAgICAgICBiID0gc2V0KDEpCiAgICAgICAgIGMgPSBzZXEoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDEgaW4gYikKLSAgICAgICAgc2VsZi5hc3NlcnRfKDAgbm90IGluIGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygxIGluIGMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygwIG5vdCBpbiBjKQorICAgICAgICBzZWxmLmFzc2VydEluKDEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMCwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigxLCBjKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIGMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAxIGluIGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAxIG5vdCBpbiBhKQogCiAgICAgICAgICMgdGVzdCBjaGFyIGluIHN0cmluZwotICAgICAgICBzZWxmLmFzc2VydF8oJ2MnIGluICdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2QnIG5vdCBpbiAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYycsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdkJywgJ2FiYycpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKCcnIGluICcnKQotICAgICAgICBzZWxmLmFzc2VydF8oJycgaW4gJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEluKCcnLCAnYWJjJykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogTm9uZSBpbiAnYWJjJykKIAogICAgIGlmIGhhdmVfdW5pY29kZToKICAgICAgICAgZGVmIHRlc3RfY2hhcl9pbl91bmljb2RlKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCdjJyBpbiB1bmljb2RlKCdhYmMnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygnZCcgbm90IGluIHVuaWNvZGUoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignYycsIHVuaWNvZGUoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZCcsIHVuaWNvZGUoJ2FiYycpKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJycgaW4gdW5pY29kZSgnJykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odW5pY29kZSgnJykgaW4gJycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odW5pY29kZSgnJykgaW4gdW5pY29kZSgnJykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJycgaW4gdW5pY29kZSgnYWJjJykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odW5pY29kZSgnJykgaW4gJ2FiYycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odW5pY29kZSgnJykgaW4gdW5pY29kZSgnYWJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCcnLCB1bmljb2RlKCcnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odW5pY29kZSgnJyksICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih1bmljb2RlKCcnKSwgdW5pY29kZSgnJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCcnLCB1bmljb2RlKCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odW5pY29kZSgnJyksICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih1bmljb2RlKCcnKSwgdW5pY29kZSgnYWJjJykpCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBOb25lIGluIHVuaWNvZGUoJ2FiYycpKQogCiAgICAgICAgICAgICAjIHRlc3QgVW5pY29kZSBjaGFyIGluIFVuaWNvZGUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh1bmljb2RlKCdjJykgaW4gdW5pY29kZSgnYWJjJykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odW5pY29kZSgnZCcpIG5vdCBpbiB1bmljb2RlKCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odW5pY29kZSgnYycpLCB1bmljb2RlKCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odW5pY29kZSgnZCcpLCB1bmljb2RlKCdhYmMnKSkKIAogICAgICAgICAgICAgIyB0ZXN0IFVuaWNvZGUgY2hhciBpbiBzdHJpbmcKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh1bmljb2RlKCdjJykgaW4gJ2FiYycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odW5pY29kZSgnZCcpIG5vdCBpbiAnYWJjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odW5pY29kZSgnYycpLCAnYWJjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odW5pY29kZSgnZCcpLCAnYWJjJykKIAogICAgIGRlZiB0ZXN0X2J1aWx0aW5fc2VxdWVuY2VfdHlwZXMoc2VsZik6CiAgICAgICAgICMgYSBjb2xsZWN0aW9uIG9mIHRlc3RzIG9uIGJ1aWx0aW4gc2VxdWVuY2UgdHlwZXMKICAgICAgICAgYSA9IHJhbmdlKDEwKQogICAgICAgICBmb3IgaSBpbiBhOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGkgaW4gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDE2IG5vdCBpbiBhKQotICAgICAgICBzZWxmLmFzc2VydF8oYSBub3QgaW4gYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxNiwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihhLCBhKQogCiAgICAgICAgIGEgPSB0dXBsZShhKQogICAgICAgICBmb3IgaSBpbiBhOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGkgaW4gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDE2IG5vdCBpbiBhKQotICAgICAgICBzZWxmLmFzc2VydF8oYSBub3QgaW4gYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxNiwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihhLCBhKQogCiAgICAgICAgIGNsYXNzIERldmlhbnQxOgogICAgICAgICAgICAgIiIiQmVoYXZlcyBzdHJhbmdlbHkgd2hlbiBjb21wYXJlZApAQCAtODYsNyArODYsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmFMaXN0LnJlbW92ZSgxNCkKICAgICAgICAgICAgICAgICByZXR1cm4gMQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhEZXZpYW50MSgpIG5vdCBpbiBEZXZpYW50MS5hTGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihEZXZpYW50MSgpLCBEZXZpYW50MS5hTGlzdCkKIAogICAgICAgICBjbGFzcyBEZXZpYW50MjoKICAgICAgICAgICAgICIiIkJlaGF2ZXMgc3RyYW5nZWx5IHdoZW4gY29tcGFyZWQKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiZ290Y2hhIgogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhEZXZpYW50MigpIG5vdCBpbiBhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihEZXZpYW50MigpLCBhKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKaW5kZXggYzhhNDU5MS4uZjI4Yzk1ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQpAQCAtMSwxMyArMSwxNSBAQAogIiIiVW5pdCB0ZXN0cyBmb3IgY29udGV4dGxpYi5weSwgYW5kIG90aGVyIGNvbnRleHQgbWFuYWdlcnMuIiIiCiAKIGltcG9ydCBzeXMKLWltcG9ydCBvcwotaW1wb3J0IGRlY2ltYWwKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdGhyZWFkaW5nCiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0ICogICMgVGVzdHMgX19hbGxfXwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCiAKIGNsYXNzIENvbnRleHRNYW5hZ2VyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zMywxNiArMzUsMTIgQEAKICAgICAgICAgICAgICAgICB5aWVsZCA0MgogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoOTk5KQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgogICAgICAgICAgICAgd2l0aCB3b29ob28oKSBhcyB4OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDQyKQogICAgICAgICAgICAgICAgIHN0YXRlLmFwcGVuZCh4KQogICAgICAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCkKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxLCA0MiwgOTk5XSkKIAogICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX25vX3JlcmFpc2Uoc2VsZik6CkBAIC01Miw3ICs1MCw3IEBACiAgICAgICAgIGN0eCA9IHdoZWUoKQogICAgICAgICBjdHguX19lbnRlcl9fKCkKICAgICAgICAgIyBDYWxsaW5nIF9fZXhpdF9fIHNob3VsZCBub3QgcmVzdWx0IGluIGFuIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLmZhaWxJZihjdHguX19leGl0X18oVHlwZUVycm9yLCBUeXBlRXJyb3IoImZvbyIpLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguX19leGl0X18oVHlwZUVycm9yLCBUeXBlRXJyb3IoImZvbyIpLCBOb25lKSkKIAogICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX3RyYXBfeWllbGRfYWZ0ZXJfdGhyb3coc2VsZik6CiAgICAgICAgIEBjb250ZXh0bWFuYWdlcgpAQCAtODQsNyArODIsNyBAQAogICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoOTk5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMSwgNDIsIDk5OV0pCiAKLSAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKHNlbGYpOgorICAgIGRlZiBfY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoc2VsZik6CiAgICAgICAgIGRlZiBhdHRyaWJzKCoqa3cpOgogICAgICAgICAgICAgZGVmIGRlY29yYXRlKGZ1bmMpOgogICAgICAgICAgICAgICAgIGZvciBrLHYgaW4ga3cuaXRlbXMoKToKQEAgLTk1LDggKzkzLDE3IEBACiAgICAgICAgIEBhdHRyaWJzKGZvbz0nYmFyJykKICAgICAgICAgZGVmIGJheihzcGFtKToKICAgICAgICAgICAgICIiIldoZWUhIiIiCisgICAgICAgIHJldHVybiBiYXoKKworICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoc2VsZik6CisgICAgICAgIGJheiA9IHNlbGYuX2NyZWF0ZV9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19uYW1lX18sJ2JheicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6LmZvbywgJ2JhcicpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9kb2NfYXR0cmliKHNlbGYpOgorICAgICAgICBiYXogPSBzZWxmLl9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6Ll9fZG9jX18sICJXaGVlISIpCiAKIGNsYXNzIE5lc3RlZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEzNCwxOCArMTQxLDE0IEBACiAgICAgICAgICAgICAgICAgeWllbGQgNQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoNikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKICAgICAgICAgICAgIHdpdGggbmVzdGVkKGEoKSwgYigpKSBhcyAoeCwgeSk6CiAgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKHgpCiAgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKHkpCiAgICAgICAgICAgICAgICAgMSAvLyAwCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxLCA0LCAyLCA1LCA2LCAzXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzEsIDQsIDIsIDUsIDYsIDNdKQogCiAgICAgZGVmIHRlc3RfbmVzdGVkX3JpZ2h0X2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgc3RhdGUgPSBbXQogICAgICAgICBAY29udGV4dG1hbmFnZXIKICAgICAgICAgZGVmIGEoKToKICAgICAgICAgICAgIHlpZWxkIDEKQEAgLTE1NywxNSArMTYwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigpCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CiAgICAgICAgICAgICB3aXRoIG5lc3RlZChhKCksIGIoKSkgYXMgKHgsIHkpOgogICAgICAgICAgICAgICAgIDEgLy8gMAotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4LCB5KSwgKDEsIDIpKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJSZXJhaXNlZCB3cm9uZyBleGNlcHRpb24iKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4LCB5KSwgKDEsIDIpKQogCiAgICAgZGVmIHRlc3RfbmVzdGVkX2Jfc3dhbGxvd3Moc2VsZik6CiAgICAgICAgIEBjb250ZXh0bWFuYWdlcgpAQCAtMjQzLDE0ICsyNDEsMTEgQEAKICAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoMSkKICAgICAgICAgeCA9IEMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbXSkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKICAgICAgICAgICAgIHdpdGggY2xvc2luZyh4KSBhcyB5OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKICAgICAgICAgICAgICAgICAxIC8vIDAKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzFdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMV0pCiAKIGNsYXNzIEZpbGVDb250ZXh0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yNTksNDAgKzI1NCwzMiBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gTm9uZQogICAgICAgICAgICAgd2l0aCBvcGVuKHRmbiwgInciKSBhcyBmOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKGYuY2xvc2VkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCiAgICAgICAgICAgICAgICAgZi53cml0ZSgiQm9vaFxuIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhmLmNsb3NlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKICAgICAgICAgICAgIGYgPSBOb25lCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4odGZuLCAiciIpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKGYuY2xvc2VkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiQm9vaFxuIikKICAgICAgICAgICAgICAgICAgICAgMSAvLyAwCi0gICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYuY2xvc2VkKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRmbikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRmbikKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIExvY2tDb250ZXh0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGJvaWxlclBsYXRlKHNlbGYsIGxvY2ssIGxvY2tlZCk6Ci0gICAgICAgIHNlbGYuZmFpbElmKGxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2tlZCgpKQogICAgICAgICB3aXRoIGxvY2s6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MobG9ja2VkKCkpCi0gICAgICAgIHNlbGYuZmFpbElmKGxvY2tlZCgpKQotICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9ja2VkKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgogICAgICAgICAgICAgd2l0aCBsb2NrOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhsb2NrZWQoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9ja2VkKCkpCiAgICAgICAgICAgICAgICAgMSAvLyAwCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGxvY2tlZCgpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2tlZCgpKQogCiAgICAgZGVmIHRlc3RXaXRoTG9jayhzZWxmKToKICAgICAgICAgbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKQEAgLTMzMCw4ICszMTcsMTAgQEAKIAogIyBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSB0ZXN0IGFjdHVhbGx5IHJ1biB1bmRlciByZWdydGVzdC5weSEKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJXaXRoLXN0YXRlbWVudHMgbm93IGRpcmVjdGx5IHN1cHBvcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgY29udGV4dCBtYW5hZ2VycyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nvb2tpZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29va2llLnB5CmluZGV4IDgzOWUzZTAuLmQwOTM5OGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29va2llLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29va2llLnB5CkBAIC00NywxNyArNDcsMTcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMub3V0cHV0KFsncGF0aCddKSwKICAgICAgICAgICAgICdTZXQtQ29va2llOiBDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IFBhdGg9L2FjbWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuanNfb3V0cHV0KCksICIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuanNfb3V0cHV0KCksIHIiIiIKICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICA8IS0tIGJlZ2luIGhpZGluZwotICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBQYXRoPS9hY21lOyBWZXJzaW9uPTEiOworICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiQ3VzdG9tZXI9XCJXSUxFX0VfQ09ZT1RFXCI7IFBhdGg9L2FjbWU7IFZlcnNpb249MSI7CiAgICAgICAgIC8vIGVuZCBoaWRpbmcgLS0+CiAgICAgICAgIDwvc2NyaXB0PgogICAgICAgICAiIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5qc19vdXRwdXQoWydwYXRoJ10pLCAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmpzX291dHB1dChbJ3BhdGgnXSksIHIiIiIKICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICA8IS0tIGJlZ2luIGhpZGluZwotICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBQYXRoPS9hY21lIjsKKyAgICAgICAgZG9jdW1lbnQuY29va2llID0gIkN1c3RvbWVyPVwiV0lMRV9FX0NPWU9URVwiOyBQYXRoPS9hY21lIjsKICAgICAgICAgLy8gZW5kIGhpZGluZyAtLT4KICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgICIiIikKQEAgLTcyLDYgKzcyLDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXVsnZXhwaXJlcyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICdXZWQsIDAxLUphbi05OCAwMDowMDowMCBHTVQnKQogCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfZW5jb2RlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDk4MjQ6IHNvbWUgYnJvd3NlcnMgZG9uJ3QgZm9sbG93IHRoZSBzdGFuZGFyZDsgd2Ugbm93CisgICAgICAgICMgZW5jb2RlICwgYW5kIDsgdG8ga2VlcCB0aGVtIGZyb20gdHJpcHBpbmcgdXAuCisgICAgICAgIEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkKKyAgICAgICAgQ1sndmFsJ10gPSAic29tZSxmdW5reTtzdHVmZiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLm91dHB1dChbJ3ZhbCddKSwKKyAgICAgICAgICAgICdTZXQtQ29va2llOiB2YWw9InNvbWVcXDA1NGZ1bmt5XFwwNzNzdHVmZiInKQorCiAgICAgZGVmIHRlc3RfcXVvdGVkX21ldGEoc2VsZik6CiAgICAgICAgICMgVHJ5IGNvb2tpZSB3aXRoIHF1b3RlZCBtZXRhLWRhdGEKICAgICAgICAgQyA9IENvb2tpZS5TaW1wbGVDb29raWUoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb29raWVsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2Nvb2tpZWxpYi5weQppbmRleCAxMjkyYjI2Li5kZDBhZDMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nvb2tpZWxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Nvb2tpZWxpYi5weQpAQCAtMTgsMTUgKzE4LDE1IEBACiAKICAgICAgICAgYmFzZSA9IDEwMTkyMjcwMDAKICAgICAgICAgZGF5ID0gMjQqMzYwMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0aW1lMmlzb3ooYmFzZSksICIyMDAyLTA0LTE5IDE0OjM2OjQwWiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRpbWUyaXNveihiYXNlK2RheSksICIyMDAyLTA0LTIwIDE0OjM2OjQwWiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRpbWUyaXNveihiYXNlKzIqZGF5KSwgIjIwMDItMDQtMjEgMTQ6MzY6NDBaIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGltZTJpc296KGJhc2UrMypkYXkpLCAiMjAwMi0wNC0yMiAxNDozNjo0MFoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUyaXNveihiYXNlKSwgIjIwMDItMDQtMTkgMTQ6MzY6NDBaIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lMmlzb3ooYmFzZStkYXkpLCAiMjAwMi0wNC0yMCAxNDozNjo0MFoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUyaXNveihiYXNlKzIqZGF5KSwgIjIwMDItMDQtMjEgMTQ6MzY6NDBaIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lMmlzb3ooYmFzZSszKmRheSksICIyMDAyLTA0LTIyIDE0OjM2OjQwWiIpCiAKICAgICAgICAgYXogPSB0aW1lMmlzb3ooKQogICAgICAgICBieiA9IHRpbWUyaXNveig1MDAwMDApCiAgICAgICAgIGZvciB0ZXh0IGluIChheiwgYnopOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHJlLnNlYXJjaChyIl5cZHs0fS1cZFxkLVxkXGQgXGRcZDpcZFxkOlxkXGRaJCIsIHRleHQpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaChyIl5cZHs0fS1cZFxkLVxkXGQgXGRcZDpcZFxkOlxkXGRaJCIsIHRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgdGltZTJpc296IGZvcm1hdDogJXMgJXMiICUgKGF6LCBieikpCiAKICAgICBkZWYgdGVzdF9odHRwMnRpbWUoc2VsZik6CkBAIC0zNSwxMyArMzUsMTMgQEAKICAgICAgICAgZGVmIHBhcnNlX2RhdGUodGV4dCk6CiAgICAgICAgICAgICByZXR1cm4gdGltZS5nbXRpbWUoaHR0cDJ0aW1lKHRleHQpKVs6Nl0KIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZV9kYXRlKCIwMSBKYW4gMjAwMSIpLCAoMjAwMSwgMSwgMSwgMCwgMCwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9kYXRlKCIwMSBKYW4gMjAwMSIpLCAoMjAwMSwgMSwgMSwgMCwgMCwgMC4wKSkKIAogICAgICAgICAjIHRoaXMgdGVzdCB3aWxsIGJyZWFrIGFyb3VuZCB5ZWFyIDIwNzAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VfZGF0ZSgiMDMtRmViLTIwIiksICgyMDIwLCAyLCAzLCAwLCAwLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX2RhdGUoIjAzLUZlYi0yMCIpLCAoMjAyMCwgMiwgMywgMCwgMCwgMC4wKSkKIAogICAgICAgICAjIHRoaXMgdGVzdCB3aWxsIGJyZWFrIGFyb3VuZCB5ZWFyIDIwNDgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VfZGF0ZSgiMDMtRmViLTk4IiksICgxOTk4LCAyLCAzLCAwLCAwLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX2RhdGUoIjAzLUZlYi05OCIpLCAoMTk5OCwgMiwgMywgMCwgMCwgMC4wKSkKIAogICAgIGRlZiB0ZXN0X2h0dHAydGltZV9mb3JtYXRzKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgaHR0cDJ0aW1lLCB0aW1lMmlzb3oKQEAgLTcxLDE1ICs3MSwxNSBAQAogICAgICAgICB0ZXN0X3QgPSA3NjAyMzM2MDAgICMgYXNzdW1lIGJyb2tlbiBQT1NJWCBjb3VudGluZyBvZiBzZWNvbmRzCiAgICAgICAgIHJlc3VsdCA9IHRpbWUyaXNveih0ZXN0X3QpCiAgICAgICAgIGV4cGVjdGVkID0gIjE5OTQtMDItMDMgMDA6MDA6MDBaIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQsIGV4cGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgID0+ICAnJXMnICglcykiICUgKHRlc3RfdCwgcmVzdWx0LCBleHBlY3RlZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgID0+ICAnJXMnICglcykiICUgKHRlc3RfdCwgcmVzdWx0LCBleHBlY3RlZCkpCiAKICAgICAgICAgZm9yIHMgaW4gdGVzdHM6CiAgICAgICAgICAgICB0ID0gaHR0cDJ0aW1lKHMpCiAgICAgICAgICAgICB0MiA9IGh0dHAydGltZShzLmxvd2VyKCkpCiAgICAgICAgICAgICB0MyA9IGh0dHAydGltZShzLnVwcGVyKCkpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0ID09IHQyID09IHQzID09IHRlc3RfdCwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ID09IHQyID09IHQzID09IHRlc3RfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyAgPT4gICVzLCAlcywgJXMgKCVzKSIgJSAocywgdCwgdDIsIHQzLCB0ZXN0X3QpKQogCiAgICAgZGVmIHRlc3RfaHR0cDJ0aW1lX2dhcmJhZ2Uoc2VsZik6CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAnMDEtMDEtMTk4MCAwMDo2MTowMCcsCiAgICAgICAgICAgICAnMDEtMDEtMTk4MCAwMDowMDo2MicsCiAgICAgICAgICAgICBdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGh0dHAydGltZSh0ZXN0KSBpcyBOb25lLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGh0dHAydGltZSh0ZXN0KSBpcyBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwMnRpbWUoJXMpIGlzIG5vdCBOb25lXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAydGltZSh0ZXN0KSAlcyIgJSAodGVzdCwgaHR0cDJ0aW1lKHRlc3QpKQogICAgICAgICAgICAgICAgICAgICAgICAgICkKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICAgICAgJ2Zvbz1iYXI7IGV4cGlyZXM9MDEgSmFuIDIwNDAgMjI6MjM6MzIgR01UJywKICAgICAgICAgICAgICdmb289YmFyOyBleHBpcmVzPSIwMSBKYW4gMjA0MCAyMjoyMzozMiBHTVQiJywKICAgICAgICAgICAgIF06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZV9uc19oZWFkZXJzKFtoZHJdKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX25zX2hlYWRlcnMoW2hkcl0pLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X3BhcnNlX25zX2hlYWRlcnNfdmVyc2lvbihzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHBhcnNlX25zX2hlYWRlcnMKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgICAgJ2Zvbz1iYXI7IHZlcnNpb249IjEiJywKICAgICAgICAgICAgICdmb289YmFyOyBWZXJzaW9uPSIxIicsCiAgICAgICAgICAgICBdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VfbnNfaGVhZGVycyhbaGRyXSksIGV4cGVjdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9uc19oZWFkZXJzKFtoZHJdKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9uc19oZWFkZXJzX3NwZWNpYWxfbmFtZXMoc2VsZik6CiAgICAgICAgICMgbmFtZXMgc3VjaCBhcyAnZXhwaXJlcycgYXJlIG5vdCBzcGVjaWFsIGluIGZpcnN0IG5hbWU9dmFsdWUgcGFpcgpAQCAtMTM1LDE1ICsxMzUsMTUgQEAKICAgICAgICAgIyBDb29raWUgd2l0aCBuYW1lICdleHBpcmVzJwogICAgICAgICBoZHIgPSAnZXhwaXJlcz0wMSBKYW4gMjA0MCAyMjoyMzozMiBHTVQnCiAgICAgICAgIGV4cGVjdGVkID0gW1soImV4cGlyZXMiLCAiMDEgSmFuIDIwNDAgMjI6MjM6MzIgR01UIiksICgidmVyc2lvbiIsICIwIildXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZV9uc19oZWFkZXJzKFtoZHJdKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfbnNfaGVhZGVycyhbaGRyXSksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfam9pbl9oZWFkZXJfd29yZHMoc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBqb2luX2hlYWRlcl93b3JkcwogCiAgICAgICAgIGpvaW5lZCA9IGpvaW5faGVhZGVyX3dvcmRzKFtbKCJmb28iLCBOb25lKSwgKCJiYXIiLCAiYmF6IildXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoam9pbmVkLCAiZm9vOyBiYXI9YmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luZWQsICJmb287IGJhcj1iYXoiKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGpvaW5faGVhZGVyX3dvcmRzKFtbXV0pLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luX2hlYWRlcl93b3JkcyhbW11dKSwgIiIpCiAKICAgICBkZWYgdGVzdF9zcGxpdF9oZWFkZXJfd29yZHMoc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBzcGxpdF9oZWFkZXJfd29yZHMKQEAgLTE3NSw3ICsxNzUsNyBAQAogICAgICAgICAgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhOb25lLCBmKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIoZXJyb3IgLS0gdHJhY2ViYWNrIGZvbGxvd3MpXG5cbiVzIiAlIGYuZ2V0dmFsdWUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LCAgZXhwZWN0LCAiIiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAgZXhwZWN0LCAiIiIKIFdoZW4gcGFyc2luZzogJyVzJwogRXhwZWN0ZWQ6ICAgICAnJXMnCiBHb3Q6ICAgICAgICAgICclcycKQEAgLTIwOSw3ICsyMDksNyBAQAogICAgICAgICBmb3IgYXJnLCBleHBlY3QgaW4gdGVzdHM6CiAgICAgICAgICAgICBpbnB1dCA9IHNwbGl0X2hlYWRlcl93b3JkcyhbYXJnXSkKICAgICAgICAgICAgIHJlcyA9IGpvaW5faGVhZGVyX3dvcmRzKGlucHV0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLCBleHBlY3QsICIiIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIGV4cGVjdCwgIiIiCiBXaGVuIHBhcnNpbmc6ICclcycKIEV4cGVjdGVkOiAgICAgJyVzJwogR290OiAgICAgICAgICAnJXMnCkBAIC0zNjYsOCArMzY2LDggQEAKICAgICAgICAgICAgIF06CiAgICAgICAgICAgICByZXF1ZXN0ID0gdXJsbGliMi5SZXF1ZXN0KHVybCkKICAgICAgICAgICAgIHIgPSBwb2wuZG9tYWluX3JldHVybl9vayhkb21haW4sIHJlcXVlc3QpCi0gICAgICAgICAgICBpZiBvazogc2VsZi5hc3NlcnRfKHIpCi0gICAgICAgICAgICBlbHNlOiBzZWxmLmFzc2VydF8obm90IHIpCisgICAgICAgICAgICBpZiBvazogc2VsZi5hc3NlcnRUcnVlKHIpCisgICAgICAgICAgICBlbHNlOiBzZWxmLmFzc2VydFRydWUobm90IHIpCiAKICAgICBkZWYgdGVzdF9taXNzaW5nX3ZhbHVlKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgTW96aWxsYUNvb2tpZUphciwgbHdwX2Nvb2tpZV9zdHIKQEAgLTM3OSwxMiArMzc5LDEyIEBACiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdlZ2dzJykKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJyJzcGFtIjsgcGF0aD0vZm9vLycpCiAgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bImVnZ3MiXQotICAgICAgICBzZWxmLmFzc2VydF8oY29va2llLnZhbHVlIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvb2tpZS5uYW1lLCAiZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb29raWUudmFsdWUgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUubmFtZSwgImVnZ3MiKQogICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsnL2Zvby8nXVsnInNwYW0iJ10KLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvb2tpZS52YWx1ZSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb29raWUubmFtZSwgJyJzcGFtIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGx3cF9jb29raWVfc3RyKGNvb2tpZSksICgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS52YWx1ZSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS5uYW1lLCAnInNwYW0iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsd3BfY29va2llX3N0cihjb29raWUpLCAoCiAgICAgICAgICAgICByJyJzcGFtIjsgcGF0aD0iL2Zvby8iOyBkb21haW49Ind3dy5hY21lLmNvbSI7ICcKICAgICAgICAgICAgICdwYXRoX3NwZWM7IGRpc2NhcmQ7IHZlcnNpb249MCcpKQogICAgICAgICBvbGRfc3RyID0gcmVwcihjKQpAQCAtMzk1LDEzICszOTUsMTMgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluayhjLmZpbGVuYW1lKQogICAgICAgICAjIGNvb2tpZXMgdW5jaGFuZ2VkIGFwYXJ0IGZyb20gbG9zdCBpbmZvIHJlLiB3aGV0aGVyIHBhdGggd2FzIHNwZWNpZmllZAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHJlcHIoYyksCiAgICAgICAgICAgICByZS5zdWIoInBhdGhfc3BlY2lmaWVkPSVzIiAlIFRydWUsICJwYXRoX3NwZWNpZmllZD0lcyIgJSBGYWxzZSwKICAgICAgICAgICAgICAgICAgICBvbGRfc3RyKQogICAgICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9mb28vIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICcic3BhbSI7IGVnZ3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2Zvby8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnInNwYW0iOyBlZ2dzJykKIAogICAgIGRlZiB0ZXN0X3JmYzIxMDlfaGFuZGxpbmcoc2VsZik6CiAgICAgICAgICMgUkZDIDIxMDkgY29va2llcyBhcmUgaGFuZGxlZCBhcyBSRkMgMjk2NSBvciBOZXRzY2FwZSBjb29raWVzLApAQCAtNDI2LDcgKzQyNiw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgY29va2llID0gYy5fY29va2llc1sid3d3LmV4YW1wbGUuY29tIl1bIi8iXVsibmkiXQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh2ZXJzaW9uIGlzIE5vbmUpICAjIGRpZG4ndCBleHBlY3QgYSBzdG9yZWQgY29va2llCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZlcnNpb24gaXMgTm9uZSkgICMgZGlkbid0IGV4cGVjdCBhIHN0b3JlZCBjb29raWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUudmVyc2lvbiwgdmVyc2lvbikKICAgICAgICAgICAgICAgICAjIDI5NjUgY29va2llcyBhcmUgdW5hZmZlY3RlZApAQCAtNDQ5LDI5ICs0NDksMjkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGlyZXM9IkZvbyBCYXIgMjUgMzM6MjI6MTEgMzAyMiInKQogCiAgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbIi5hY21lLmNvbSJdWyIvIl1bInNwYW0iXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb29raWUuZG9tYWluLCAiLmFjbWUuY29tIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvb2tpZS5kb21haW5fc3BlY2lmaWVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb29raWUucG9ydCwgREVGQVVMVF9IVFRQX1BPUlQpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgY29va2llLnBvcnRfc3BlY2lmaWVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS5kb21haW4sICIuYWNtZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29va2llLmRvbWFpbl9zcGVjaWZpZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLnBvcnQsIERFRkFVTFRfSFRUUF9QT1JUKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNvb2tpZS5wb3J0X3NwZWNpZmllZCkKICAgICAgICAgIyBjYXNlIGlzIHByZXNlcnZlZAotICAgICAgICBzZWxmLmFzc2VydF8oY29va2llLmhhc19ub25zdGFuZGFyZF9hdHRyKCJibEFyZ2giKSBhbmQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS5oYXNfbm9uc3RhbmRhcmRfYXR0cigiYmxBcmdoIikgYW5kCiAgICAgICAgICAgICAgICAgICAgICBub3QgY29va2llLmhhc19ub25zdGFuZGFyZF9hdHRyKCJibGFyZ2giKSkKIAogICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdWyJuaSJdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvb2tpZS5kb21haW4sICJ3d3cuYWNtZS5jb20iKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNvb2tpZS5kb21haW5fc3BlY2lmaWVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb29raWUucG9ydCwgIjgwLDgwODAiKQotICAgICAgICBzZWxmLmFzc2VydF8oY29va2llLnBvcnRfc3BlY2lmaWVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS5kb21haW4sICJ3d3cuYWNtZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNvb2tpZS5kb21haW5fc3BlY2lmaWVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS5wb3J0LCAiODAsODA4MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb29raWUucG9ydF9zcGVjaWZpZWQpCiAKICAgICAgICAgY29va2llID0gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXVsibmluaSJdCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb29raWUucG9ydCBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNvb2tpZS5wb3J0X3NwZWNpZmllZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS5wb3J0IGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY29va2llLnBvcnRfc3BlY2lmaWVkKQogCiAgICAgICAgICMgaW52YWxpZCBleHBpcmVzIHNob3VsZCBub3QgY2F1c2UgY29va2llIHRvIGJlIGRyb3BwZWQKICAgICAgICAgZm9vID0gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXVsiZm9vIl0KICAgICAgICAgc3BhbSA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bImZvbyJdCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhmb28uZXhwaXJlcyBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc3BhbS5leHBpcmVzIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uZXhwaXJlcyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BhbS5leHBpcmVzIGlzIE5vbmUpCiAKICAgICBkZWYgdGVzdF9uc19wYXJzZXJfc3BlY2lhbF9uYW1lcyhzZWxmKToKICAgICAgICAgIyBuYW1lcyBzdWNoIGFzICdleHBpcmVzJyBhcmUgbm90IHNwZWNpYWwgaW4gZmlyc3QgbmFtZT12YWx1ZSBwYWlyCkBAIC00ODMsOCArNDgzLDggQEAKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ3ZlcnNpb249ZWdnczsgc3BhbT1lZ2dzJykKIAogICAgICAgICBjb29raWVzID0gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXQotICAgICAgICBzZWxmLmFzc2VydF8oJ2V4cGlyZXMnIGluIGNvb2tpZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygndmVyc2lvbicgaW4gY29va2llcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdleHBpcmVzJyBpbiBjb29raWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3ZlcnNpb24nIGluIGNvb2tpZXMpCiAKICAgICBkZWYgdGVzdF9leHBpcmVzKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgdGltZTJuZXRzY2FwZSwgQ29va2llSmFyCkBAIC00OTQsMTQgKzQ5NCwxNCBAQAogICAgICAgICBmdXR1cmUgPSB0aW1lMm5ldHNjYXBlKHRpbWUudGltZSgpKzM2MDApCiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdzcGFtPSJiYXIiOyBleHBpcmVzPSVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKICAgICAgICAgbm93ID0gdGltZTJuZXRzY2FwZSh0aW1lLnRpbWUoKS0xKQogICAgICAgICAjIC4uLiBhbmQgaWYgaW4gcGFzdCBvciBwcmVzZW50LCBkaXNjYXJkIGl0CiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdmb289ImVnZ3MiOyBleHBpcmVzPSVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdykKICAgICAgICAgaCA9IGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdzcGFtPSJiYXIiJyBpbiBoIGFuZCAiZm9vIiBub3QgaW4gaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnc3BhbT0iYmFyIicgaW4gaCBhbmQgImZvbyIgbm90IGluIGgpCiAKICAgICAgICAgIyBtYXgtYWdlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBleHBpcmVzLCBhbmQgemVybyBtYXgtYWdlIGlzIHJlcXVlc3QgdG8KICAgICAgICAgIyBkZWxldGUgYm90aCBuZXcgY29va2llIGFuZCBhbnkgb2xkIG1hdGNoaW5nIGNvb2tpZQpAQCAtNTA5LDIwICs1MDksMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlKQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnYmFyPSJiYXIiOyBleHBpcmVzPSVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ2VnZ3M9ImJhciI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGlyZXM9JXM7IG1heC1hZ2U9MCcgJSBmdXR1cmUpCiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdiYXI9ImJhciI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21heC1hZ2U9MDsgZXhwaXJlcz0lcycgJSBmdXR1cmUpCiAgICAgICAgIGggPSBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQogCiAgICAgICAgICMgdGVzdCBleHBpcnkgYXQgZW5kIG9mIHNlc3Npb24gZm9yIGNvb2tpZXMgd2l0aCBubyBleHBpcmVzIGF0dHJpYnV0ZQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5yaHViYXJiLm5ldC8iLCAnd2h1bT0iZml6eiInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQogICAgICAgICBjLmNsZWFyX3Nlc3Npb25fY29va2llcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdzcGFtPSJiYXIiJyBpbiBoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc3BhbT0iYmFyIicsIGgpCiAKICAgICAgICAgIyBYWFggUkZDIDI5NjUgZXhwaXJ5IHJ1bGVzIChzb21lIGFwcGx5IHRvIFYwIHRvbykKIApAQCAtNTM0LDM5ICs1MzQsMzkgQEAKIAogICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnc3BhbT0iYmFyIjsgVmVyc2lvbj0iMSInKQotICAgICAgICBzZWxmLmFzc2VydF8oIi8iIGluIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaCIsICdlZ2dzPSJiYXIiOyBWZXJzaW9uPSIxIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiLyIgaW4gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi8iLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKIAogICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoL3JodWJhcmIiLAogICAgICAgICAgICAgICAgICAgICAgICdlZ2dzPSJiYXIiOyBWZXJzaW9uPSIxIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiL2JsYWgvIiBpbiBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiL2JsYWgvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaC9yaHViYXJiLyIsCiAgICAgICAgICAgICAgICAgICAgICAgJ2VnZ3M9ImJhciI7IFZlcnNpb249IjEiJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCIvYmxhaC9yaHViYXJiLyIgaW4gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi9ibGFoL3JodWJhcmIvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCiAKICAgICAgICAgIyBOZXRzY2FwZQogCiAgICAgICAgIGMgPSBDb29raWVKYXIoKQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnc3BhbT0iYmFyIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiLyIgaW4gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi8iLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKIAogICAgICAgICBjID0gQ29va2llSmFyKCkKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaCIsICdlZ2dzPSJiYXIiJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCIvIiBpbiBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiLyIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIoKQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoL3JodWJhcmIiLCAnZWdncz0iYmFyIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiL2JsYWgiIGluIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvYmxhaCIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIoKQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoL3JodWJhcmIvIiwgJ2VnZ3M9ImJhciInKQotICAgICAgICBzZWxmLmFzc2VydF8oIi9ibGFoL3JodWJhcmIiIGluIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvYmxhaC9yaHViYXJiIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X3BhdGhfd2l0aF9xdWVyeShzZWxmKToKICAgICAgICAgY2ogPSBjb29raWVsaWIuQ29va2llSmFyKCkKQEAgLTU3NCw5ICs1NzQsOSBAQAogICAgICAgICB2YWx1ZSA9ICdlZ2dzPSJiYXIiJwogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjaiwgdXJpLCB2YWx1ZSkKICAgICAgICAgIyBkZWZhdWx0IHBhdGggZG9lcyBub3QgaW5jbHVkZSBxdWVyeSwgc28gaXMgIi8iLCBub3QgIi8/c3BhbSIKLSAgICAgICAgc2VsZi5hc3NlcnRfKCIvIiBpbiBjai5fY29va2llc1siZXhhbXBsZS5jb20iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiLyIsIGNqLl9jb29raWVzWyJleGFtcGxlLmNvbSJdKQogICAgICAgICAjIGNvb2tpZSBpcyBzZW50IGJhY2sgdG8gdGhlIHNhbWUgVVJJCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGludGVyYWN0X25ldHNjYXBlKGNqLCB1cmkpLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF9uZXRzY2FwZShjaiwgdXJpKSwgdmFsdWUpCiAKICAgICBkZWYgdGVzdF9lc2NhcGVfcGF0aChzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGVzY2FwZV9wYXRoCkBAIC02MDAsNyArNjAwLDcgQEAKICAgICAgICAgICAgICh1Ii9mb28vYmFyXHVhYmNkIiwgIi9mb28vYmFyJUVBJUFGJThEIiksICAjIFVURi04IGVuY29kZWQKICAgICAgICAgICAgIF0KICAgICAgICAgZm9yIGFyZywgcmVzdWx0IGluIGNhc2VzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXNjYXBlX3BhdGgoYXJnKSwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlc2NhcGVfcGF0aChhcmcpLCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9yZXF1ZXN0X3BhdGgoc2VsZik6CiAgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdApAQCAtNjA4LDI1ICs2MDgsMjUgQEAKICAgICAgICAgIyB3aXRoIHBhcmFtZXRlcnMKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yaGV1bS9yaGFwb250aWN1bTsiCiAgICAgICAgICAgICAgICAgICAgICAgImZvbz1iYXI7c2luZz1zb25nP2FwcGxlcz1wZWFycyZzcGFtPWVnZ3MjbmkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXF1ZXN0X3BhdGgocmVxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIi9yaGV1bS9yaGFwb250aWN1bTtmb289YmFyO3Npbmc9c29uZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9wYXRoKHJlcSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIi9yaGV1bS9yaGFwb250aWN1bTtmb289YmFyO3Npbmc9c29uZyIpCiAgICAgICAgICMgd2l0aG91dCBwYXJhbWV0ZXJzCiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vcmhldW0vcmhhcG9udGljdW0/IgogICAgICAgICAgICAgICAgICAgICAgICJhcHBsZXM9cGVhcnMmc3BhbT1lZ2dzI25pIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxdWVzdF9wYXRoKHJlcSksICIvcmhldW0vcmhhcG9udGljdW0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfcGF0aChyZXEpLCAiL3JoZXVtL3JoYXBvbnRpY3VtIikKICAgICAgICAgIyBtaXNzaW5nIGZpbmFsIHNsYXNoCiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXF1ZXN0X3BhdGgocmVxKSwgIi8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfcGF0aChyZXEpLCAiLyIpCiAKICAgICBkZWYgdGVzdF9yZXF1ZXN0X3BvcnQoc2VsZik6CiAgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgcmVxdWVzdF9wb3J0LCBERUZBVUxUX0hUVFBfUE9SVAogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tOjEyMzQvIiwKICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsiSG9zdCI6ICJ3d3cuYWNtZS5jb206NDMyMSJ9KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXF1ZXN0X3BvcnQocmVxKSwgIjEyMzQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfcG9ydChyZXEpLCAiMTIzNCIpCiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb20vIiwKICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsiSG9zdCI6ICJ3d3cuYWNtZS5jb206NDMyMSJ9KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXF1ZXN0X3BvcnQocmVxKSwgREVGQVVMVF9IVFRQX1BPUlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9wb3J0KHJlcSksIERFRkFVTFRfSFRUUF9QT1JUKQogCiAgICAgZGVmIHRlc3RfcmVxdWVzdF9ob3N0KHNlbGYpOgogICAgICAgICBmcm9tIHVybGxpYjIgaW1wb3J0IFJlcXVlc3QKQEAgLTYzNiw3OSArNjM2LDc5IEBACiAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17Ikhvc3QiOiAid3d3LmFjbWUuY29tOjgwIn0pCiAgICAgICAgICMgbGlid3d3LXBlcmwgd2FudHMgdGhpcyByZXNwb25zZSwgYnV0IHRoYXQgc2VlbXMgd3JvbmcgKFJGQyAyNjE2LAogICAgICAgICAjIHNlY3Rpb24gNS4yLCBwb2ludCAxLiwgYW5kIFJGQyAyOTY1IHNlY3Rpb24gMSwgcGFyYWdyYXBoIDMpCi0gICAgICAgICNzZWxmLmFzc2VydEVxdWFscyhyZXF1ZXN0X2hvc3QocmVxKSwgInd3dy5hY21lLmNvbSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcXVlc3RfaG9zdChyZXEpLCAiMS4xLjEuMSIpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfaG9zdChyZXEpLCAid3d3LmFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X2hvc3QocmVxKSwgIjEuMS4xLjEiKQogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIsCiAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17Ikhvc3QiOiAiaXJyZWxldmFudC5jb20ifSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxdWVzdF9ob3N0KHJlcSksICJ3d3cuYWNtZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfaG9zdChyZXEpLCAid3d3LmFjbWUuY29tIikKICAgICAgICAgIyBub3QgYWN0dWFsbHkgc3VyZSB0aGlzIG9uZSBpcyB2YWxpZCBSZXF1ZXN0IG9iamVjdCwgc28gbWF5YmUgc2hvdWxkCiAgICAgICAgICMgcmVtb3ZlIHRlc3QgZm9yIG5vIGhvc3QgaW4gdXJsIGluIHJlcXVlc3RfaG9zdCBmdW5jdGlvbj8KICAgICAgICAgcmVxID0gUmVxdWVzdCgiL3Jlc291cmNlLmh0bWwiLAogICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJIb3N0IjogInd3dy5hY21lLmNvbSJ9KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXF1ZXN0X2hvc3QocmVxKSwgInd3dy5hY21lLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9ob3N0KHJlcSksICJ3d3cuYWNtZS5jb20iKQogICAgICAgICAjIHBvcnQgc2hvdWxkbid0IGJlIGluIHJlcXVlc3QtaG9zdAogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tOjIzNDUvcmVzb3VyY2UuaHRtbCIsCiAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17Ikhvc3QiOiAid3d3LmFjbWUuY29tOjU0MzIifSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxdWVzdF9ob3N0KHJlcSksICJ3d3cuYWNtZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfaG9zdChyZXEpLCAid3d3LmFjbWUuY29tIikKIAogICAgIGRlZiB0ZXN0X2lzX0hETihzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGlzX0hETgotICAgICAgICBzZWxmLmFzc2VydF8oaXNfSEROKCJmb28uYmFyLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNfSEROKCIxZm9vMi4zYmFyNC41Y29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNfSEROKCIxOTIuMTY4LjEuMSIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzX0hETigiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNfSEROKCIuIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNfSEROKCIuZm9vLmJhci5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc19IRE4oIi4uZm9vIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNfSEROKCJmb28uIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc19IRE4oImZvby5iYXIuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc19IRE4oIjFmb28yLjNiYXI0LjVjb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc19IRE4oIjE5Mi4xNjguMS4xIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfSEROKCIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc19IRE4oIi4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc19IRE4oIi5mb28uYmFyLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzX0hETigiLi5mb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc19IRE4oImZvby4iKSkKIAogICAgIGRlZiB0ZXN0X3JlYWNoKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgcmVhY2gKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhY2goInd3dy5hY21lLmNvbSIpLCAiLmFjbWUuY29tIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhY2goImFjbWUuY29tIiksICJhY21lLmNvbSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWNoKCJhY21lLmxvY2FsIiksICIubG9jYWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWFjaCgiLmxvY2FsIiksICIubG9jYWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWFjaCgiLmNvbSIpLCAiLmNvbSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWNoKCIuIiksICIuIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhY2goIiIpLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhY2goIjE5Mi4xNjguMC4xIiksICIxOTIuMTY4LjAuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goInd3dy5hY21lLmNvbSIpLCAiLmFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiYWNtZS5jb20iKSwgImFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiYWNtZS5sb2NhbCIpLCAiLmxvY2FsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiLmxvY2FsIiksICIubG9jYWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWNoKCIuY29tIiksICIuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiLiIpLCAiLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goIiIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiMTkyLjE2OC4wLjEiKSwgIjE5Mi4xNjguMC4xIikKIAogICAgIGRlZiB0ZXN0X2RvbWFpbl9tYXRjaChzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGRvbWFpbl9tYXRjaCwgdXNlcl9kb21haW5fbWF0Y2gKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiMTkyLjE2OC4xLjEiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBkb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIi4xNjguMS4xIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhkb21haW5fbWF0Y2goIngueS5jb20iLCAieC5ZLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8oZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIi5ZLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGRvbWFpbl9tYXRjaCgieC55LmNvbSIsICJZLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8oZG9tYWluX21hdGNoKCJhLmIuYy5jb20iLCAiLmMuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZG9tYWluX21hdGNoKCIuYy5jb20iLCAiYS5iLmMuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhkb21haW5fbWF0Y2goImV4YW1wbGUubG9jYWwiLCAiLmxvY2FsIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZG9tYWluX21hdGNoKCJibGFoLmJsYWgiLCAiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZG9tYWluX21hdGNoKCIiLCAiLnJodWJhcmIucmh1YmFyYiIpKQotICAgICAgICBzZWxmLmFzc2VydF8oZG9tYWluX21hdGNoKCIiLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIjE5Mi4xNjguMS4xIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIuMTY4LjEuMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgInguWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRvbWFpbl9tYXRjaCgieC55LmNvbSIsICIuWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkb21haW5fbWF0Y2goIngueS5jb20iLCAiWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRvbWFpbl9tYXRjaCgiYS5iLmMuY29tIiwgIi5jLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGRvbWFpbl9tYXRjaCgiLmMuY29tIiwgImEuYi5jLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9tYWluX21hdGNoKCJleGFtcGxlLmxvY2FsIiwgIi5sb2NhbCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGRvbWFpbl9tYXRjaCgiYmxhaC5ibGFoIiwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGRvbWFpbl9tYXRjaCgiIiwgIi5yaHViYXJiLnJodWJhcmIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRvbWFpbl9tYXRjaCgiIiwgIiIpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1c2VyX2RvbWFpbl9tYXRjaCgiYWNtZS5jb20iLCAiYWNtZS5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgiYWNtZS5jb20iLCAiLmFjbWUuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1c2VyX2RvbWFpbl9tYXRjaCgicmh1YmFyYi5hY21lLmNvbSIsICIuYWNtZS5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVzZXJfZG9tYWluX21hdGNoKCJ3d3cucmh1YmFyYi5hY21lLmNvbSIsICIuYWNtZS5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgInguWS5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIi5ZLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIlkuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1c2VyX2RvbWFpbl9tYXRjaCgieS5jb20iLCAiWS5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgiLnkuY29tIiwgIlkuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1c2VyX2RvbWFpbl9tYXRjaCgiLnkuY29tIiwgIi5ZLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8odXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgImNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIm0iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICIubSIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIiIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIi4iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVzZXJfZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIxOTIuMTY4LjEuMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goImFjbWUuY29tIiwgImFjbWUuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goImFjbWUuY29tIiwgIi5hY21lLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goInJodWJhcmIuYWNtZS5jb20iLCAiLmFjbWUuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2RvbWFpbl9tYXRjaCgid3d3LnJodWJhcmIuYWNtZS5jb20iLCAiLmFjbWUuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICJ4LlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICIuWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICJZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goInkuY29tIiwgIlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIi55LmNvbSIsICJZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goIi55LmNvbSIsICIuWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIi5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICJjb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICJtIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiLm0iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICIuIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2RvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiMTkyLjE2OC4xLjEiKSkKICAgICAgICAgIyBub3QgYm90aCBIRE5zLCBzbyBtdXN0IHN0cmluZy1jb21wYXJlIGVxdWFsIHRvIG1hdGNoCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdXNlcl9kb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIi4xNjguMS4xIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdXNlcl9kb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIi4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiLjE2OC4xLjEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiLiIpKQogICAgICAgICAjIGVtcHR5IHN0cmluZyBpcyBhIHNwZWNpYWwgY2FzZQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHVzZXJfZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiIikpCiAKICAgICBkZWYgdGVzdF93cm9uZ19kb21haW4oc2VsZik6CiAgICAgICAgICMgQ29va2llcyB3aG9zZSBlZmZlY3RpdmUgcmVxdWVzdC1ob3N0IG5hbWUgZG9lcyBub3QgZG9tYWluLW1hdGNoIHRoZQpAQCAtNzE5LDcgKzcxOSw3IEBACiAgICAgICAgIGMgPSBDb29raWVKYXIoKQogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3Lm5hc3R5LmNvbS8iLAogICAgICAgICAgICAgICAgICAgICAgICdmb289YmFyOyBkb21haW49ZnJpZW5kbHkub3JnOyBWZXJzaW9uPSIxIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDApCiAKICAgICBkZWYgdGVzdF9zdHJpY3RfZG9tYWluKHNlbGYpOgogICAgICAgICAjIENvb2tpZXMgd2hvc2UgZG9tYWluIGlzIGEgY291bnRyeS1jb2RlIHRsZCBsaWtlIC5jby51ayBzaG91bGQKQEAgLTczMSwxMSArNzMxLDExIEBACiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGNqLCAiaHR0cDovL2V4YW1wbGUuY28udWsvIiwgJ25vPXByb2JsZW1vJykKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoY2osICJodHRwOi8vZXhhbXBsZS5jby51ay8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnb2tleT1kb2tleTsgRG9tYWluPS5leGFtcGxlLmNvLnVrJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGNqKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2opLCAyKQogICAgICAgICBmb3IgcHNldWRvX3RsZCBpbiBbIi5jby51ayIsICIub3JnLnphIiwgIi50eC51cyIsICIubmFtZS51cyJdOgogICAgICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoY2osICJodHRwOi8vZXhhbXBsZS4lcy8iICUgcHNldWRvX3RsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtPWVnZ3M7IERvbWFpbj0uY28udWsnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGNqKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNqKSwgMikKIAogICAgIGRlZiB0ZXN0X3R3b19jb21wb25lbnRfZG9tYWluX25zKHNlbGYpOgogICAgICAgICAjIE5ldHNjYXBlOiAud3d3LmJhci5jb20sIHd3dy5iYXIuY29tLCAuYmFyLmNvbSwgYmFyLmNvbSwgbm8gZG9tYWluCkBAIC03NDcsMTcgKzc0NywxNyBAQAogCiAgICAgICAgICMgdHdvLWNvbXBvbmVudCBWMCBkb21haW4gaXMgT0sKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9mb28ubmV0LyIsICducz1iYXInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGMuX2Nvb2tpZXNbImZvby5uZXQiXVsiLyJdWyJucyJdLnZhbHVlLCAiYmFyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9mb28ubmV0LyIpLCAibnM9YmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fY29va2llc1siZm9vLm5ldCJdWyIvIl1bIm5zIl0udmFsdWUsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLm5ldC8iKSwgIm5zPWJhciIpCiAgICAgICAgICMgKndpbGwqIGJlIHJldHVybmVkIHRvIGFueSBvdGhlciBkb21haW4gKHVubGlrZSBSRkMgMjk2NSkuLi4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuZm9vLm5ldC8iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIm5zPWJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuZm9vLm5ldC8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibnM9YmFyIikKICAgICAgICAgIyAuLi51bmxlc3MgcmVxdWVzdGVkIG90aGVyd2lzZQogICAgICAgICBwb2wgPSBEZWZhdWx0Q29va2llUG9saWN5KAogICAgICAgICAgICAgc3RyaWN0X25zX2RvbWFpbj1EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpblN0cmljdE5vbkRvbWFpbikKICAgICAgICAgYy5zZXRfcG9saWN5KHBvbCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuZm9vLm5ldC8iKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuZm9vLm5ldC8iKSwgIiIpCiAKICAgICAgICAgIyB1bmxpa2UgUkZDIDI5NjUsIGV2ZW4gZXhwbGljaXQgdHdvLWNvbXBvbmVudCBkb21haW4gaXMgT0ssCiAgICAgICAgICMgYmVjYXVzZSAuZm9vLm5ldCBtYXRjaGVzIGZvby5uZXQKQEAgLTc2NiwxNyArNzY2LDE3IEBACiAgICAgICAgICMgZXZlbiBpZiBzdGFydHMgd2l0aCBhIGRvdCAtLSBpbiBOUyBydWxlcywgLmZvby5uZXQgbWF0Y2hlcyBmb28ubmV0IQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5uZXQvZm9vL2Jhci8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbTI9ZWdnczsgZG9tYWluPS5mb28ubmV0JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjLl9jb29raWVzWyIuZm9vLm5ldCJdWyIvZm9vIl1bInNwYW0xIl0udmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2dzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYy5fY29va2llc1siLmZvby5uZXQiXVsiL2Zvby9iYXIiXVsic3BhbTIiXS52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImVnZ3MiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5uZXQvZm9vL2Jhci8iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW0yPWVnZ3M7IHNwYW0xPWVnZ3M7IG5zPWJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbIi5mb28ubmV0Il1bIi9mb28iXVsic3BhbTEiXS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fY29va2llc1siLmZvby5uZXQiXVsiL2Zvby9iYXIiXVsic3BhbTIiXS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9mb28ubmV0L2Zvby9iYXIvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW0yPWVnZ3M7IHNwYW0xPWVnZ3M7IG5zPWJhciIpCiAKICAgICAgICAgIyB0b3AtbGV2ZWwgZG9tYWluIGlzIHRvbyBnZW5lcmFsCiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLm5ldC8iLCAnbmluaT0ibmkiOyBkb21haW49Lm5ldCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCiAKICMjICAgICAgICAgIyBOZXRzY2FwZSBwcm90b2NvbCBkb2Vzbid0IGFsbG93IG5vbi1zcGVjaWFsIHRvcCBsZXZlbCBkb21haW5zIChzdWNoCiAjIyAgICAgICAgICMgYXMgY28udWspIGluIHRoZSBkb21haW4gYXR0cmlidXRlIHVubGVzcyB0aGVyZSBhcmUgYXQgbGVhc3QgdGhyZWUKQEAgLTc4NCw4ICs3ODQsOCBAQAogICAgICAgICAjIE9oIHllcyBpdCBkb2VzISAgUmVhbCBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgY2hlY2sgdGhpcywgYW5kIHJlYWwKICAgICAgICAgIyBjb29raWVzIChvZiBjb3Vyc2UpIHJlbHkgb24gdGhhdCBiZWhhdmlvdXIuCiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLmNvLnVrIiwgJ25hc3R5PXRyaWNrOyBkb21haW49LmNvLnVrJykKLSMjICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDQpCisjIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgNCkKIAogICAgIGRlZiB0ZXN0X3R3b19jb21wb25lbnRfZG9tYWluX3JmYzI5NjUoc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKQEAgLTc5NSw0MyArNzk1LDQzIEBACiAKICAgICAgICAgIyB0d28tY29tcG9uZW50IFYxIGRvbWFpbiBpcyBPSwogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZm9vLm5ldC8iLCAnZm9vPWJhcjsgVmVyc2lvbj0iMSInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGMuX2Nvb2tpZXNbImZvby5uZXQiXVsiLyJdWyJmb28iXS52YWx1ZSwgImJhciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0LyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiJFZlcnNpb249MTsgZm9vPWJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbImZvby5uZXQiXVsiLyJdWyJmb28iXS52YWx1ZSwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2Zvby5uZXQvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiRWZXJzaW9uPTE7IGZvbz1iYXIiKQogICAgICAgICAjIHdvbid0IGJlIHJldHVybmVkIHRvIGFueSBvdGhlciBkb21haW4gKGJlY2F1c2UgZG9tYWluIHdhcyBpbXBsaWVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmZvby5uZXQvIiksICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuZm9vLm5ldC8iKSwgIiIpCiAKICAgICAgICAgIyB1bmxlc3MgZG9tYWluIGlzIGdpdmVuIGV4cGxpY2l0bHksIGJlY2F1c2UgdGhlbiBpdCBtdXN0IGJlCiAgICAgICAgICMgcmV3cml0dGVuIHRvIHN0YXJ0IHdpdGggYSBkb3Q6IGZvby5uZXQgLS0+IC5mb28ubmV0LCB3aGljaCBkb2VzCiAgICAgICAgICMgbm90IGRvbWFpbi1tYXRjaCBmb28ubmV0CiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0L2ZvbyIsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NwYW09ZWdnczsgZG9tYWluPWZvby5uZXQ7IHBhdGg9L2ZvbzsgVmVyc2lvbj0iMSInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0L2ZvbyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiJFZlcnNpb249MTsgZm9vPWJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0L2ZvbyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIkVmVyc2lvbj0xOyBmb289YmFyIikKIAogICAgICAgICAjIGV4cGxpY2l0IGZvby5uZXQgZnJvbSB0aHJlZS1jb21wb25lbnQgZG9tYWluIHd3dy5mb28ubmV0ICpkb2VzKiBnZXQKICAgICAgICAgIyBzZXQsIGJlY2F1c2UgLmZvby5uZXQgZG9tYWluLW1hdGNoZXMgLmZvby5uZXQKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5mb28ubmV0L2Zvby8iLAogICAgICAgICAgICAgICAgICAgICAgICdzcGFtPWVnZ3M7IGRvbWFpbj1mb28ubmV0OyBWZXJzaW9uPSIxIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGMuX2Nvb2tpZXNbIi5mb28ubmV0Il1bIi9mb28vIl1bInNwYW0iXS52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImVnZ3MiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0L2Zvby8iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiRWZXJzaW9uPTE7IGZvbz1iYXIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmZvby5uZXQvZm9vLyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnJFZlcnNpb249MTsgc3BhbT1lZ2dzOyAkRG9tYWluPSJmb28ubmV0IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fY29va2llc1siLmZvby5uZXQiXVsiL2Zvby8iXVsic3BhbSJdLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2dzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2Zvby5uZXQvZm9vLyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIkVmVyc2lvbj0xOyBmb289YmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmZvby5uZXQvZm9vLyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICckVmVyc2lvbj0xOyBzcGFtPWVnZ3M7ICREb21haW49ImZvby5uZXQiJykKIAogICAgICAgICAjIHRvcC1sZXZlbCBkb21haW4gaXMgdG9vIGdlbmVyYWwKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2Zvby5uZXQvIiwKICAgICAgICAgICAgICAgICAgICAgICAnbmk9Im5pIjsgZG9tYWluPSIubmV0IjsgVmVyc2lvbj0iMSInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQogCiAgICAgICAgICMgUkZDIDI5NjUgZG9lc24ndCByZXF1aXJlIGJsb2NraW5nIHRoaXMKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2Zvby5jby51ay8iLAogICAgICAgICAgICAgICAgICAgICAgICduYXN0eT10cmljazsgZG9tYWluPS5jby51azsgVmVyc2lvbj0iMSInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAzKQogCiAgICAgZGVmIHRlc3RfZG9tYWluX2FsbG93KHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CkBAIC04NDUsMjcgKzg0NSwyNyBAQAogICAgICAgICBoZWFkZXJzID0gWyJTZXQtQ29va2llOiBDVVNUT01FUj1XSUxFX0VfQ09ZT1RFOyBwYXRoPS8iXQogICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly9hY21lLmNvbS8iKQogICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMCkKIAogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIpCiAgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQogICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKIAogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmNveW90ZS5jb20vIikKICAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICJodHRwOi8vd3d3LmNveW90ZS5jb20vIikKICAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCiAKICAgICAgICAgIyBzZXQgYSBjb29raWUgd2l0aCBub24tYWxsb3dlZCBkb21haW4uLi4KICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5jb3lvdGUuY29tLyIpCiAgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5jb3lvdGUuY29tLyIpCiAgICAgICAgIGNvb2tpZXMgPSBjLm1ha2VfY29va2llcyhyZXMsIHJlcSkKICAgICAgICAgYy5zZXRfY29va2llKGNvb2tpZXNbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCiAgICAgICAgICMgLi4uIGFuZCBjaGVjayBpcyBkb2Vzbid0IGdldCByZXR1cm5lZAogICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCByZXEuaGFzX2hlYWRlcigiQ29va2llIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcmVxLmhhc19oZWFkZXIoIkNvb2tpZSIpKQogCiAgICAgZGVmIHRlc3RfZG9tYWluX2Jsb2NrKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CkBAIC04NzksMzYgKzg3OSwzNiBAQAogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIpCiAgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQogICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMCkKIAogICAgICAgICBwID0gcG9sLnNldF9ibG9ja2VkX2RvbWFpbnMoWyJhY21lLmNvbSJdKQogICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKIAogICAgICAgICBjLmNsZWFyKCkKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5yb2FkcnVubmVyLm5ldC8iKQogICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cucm9hZHJ1bm5lci5uZXQvIikKICAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cucm9hZHJ1bm5lci5uZXQvIikKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygocmVxLmhhc19oZWFkZXIoIkNvb2tpZSIpIGFuZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSBhbmQKICAgICAgICAgICAgICAgICAgICAgICByZXEuaGFzX2hlYWRlcigiQ29va2llMiIpKSkKIAogICAgICAgICBjLmNsZWFyKCkKICAgICAgICAgcG9sLnNldF9ibG9ja2VkX2RvbWFpbnMoWyIuYWNtZS5jb20iXSkKICAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCiAKICAgICAgICAgIyBzZXQgYSBjb29raWUgd2l0aCBibG9ja2VkIGRvbWFpbi4uLgogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIpCiAgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQogICAgICAgICBjb29raWVzID0gYy5tYWtlX2Nvb2tpZXMocmVzLCByZXEpCiAgICAgICAgIGMuc2V0X2Nvb2tpZShjb29raWVzWzBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQogICAgICAgICAjIC4uLiBhbmQgY2hlY2sgaXMgZG9lc24ndCBnZXQgcmV0dXJuZWQKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgcmVxLmhhc19oZWFkZXIoIkNvb2tpZSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSkKIAogICAgIGRlZiB0ZXN0X3NlY3VyZShzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQpAQCAtOTI4LDEwICs5MjgsMTAgQEAKICAgICAgICAgICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5hY21lLmNvbS8iCiAgICAgICAgICAgICAgICAgaW50KGMsIHVybCwgImZvbzE9YmFyJXMlcyIgJSAodnMsIHdoaXRlc3BhY2UpKQogICAgICAgICAgICAgICAgIGludChjLCB1cmwsICJmb28yPWJhciVzOyBzZWN1cmUlcyIgJSAgKHZzLCB3aGl0ZXNwYWNlKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgICAgICBub3QgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXVsiZm9vMSJdLnNlY3VyZSwKICAgICAgICAgICAgICAgICAgICAgIm5vbi1zZWN1cmUgY29va2llIHJlZ2lzdGVyZWQgc2VjdXJlIikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgICAgICBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdWyJmb28yIl0uc2VjdXJlLAogICAgICAgICAgICAgICAgICAgICAic2VjdXJlIGNvb2tpZSByZWdpc3RlcmVkIG5vbi1zZWN1cmUiKQogCkBAIC05NDAsNyArOTQwLDcgQEAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2xpY3k9RGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpKQogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsIHInZm9vPVxiImEicjsgVmVyc2lvbj0xJykKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaCwgcickVmVyc2lvbj0xOyBmb289XFxiXCJhXCJyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLCByJyRWZXJzaW9uPTE7IGZvbz1cXGJcImFcInInKQogCiAgICAgZGVmIHRlc3RfbWlzc2luZ19maW5hbF9zbGFzaChzZWxmKToKICAgICAgICAgIyBNaXNzaW5nIHNsYXNoIGZyb20gcmVxdWVzdCBVUkwncyBhYnNfcGF0aCBzaG91bGQgYmUgYXNzdW1lZCBwcmVzZW50LgpAQCAtOTUwLDkgKzk1MCw5IEBACiAgICAgICAgIGMgPSBDb29raWVKYXIoRGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpKQogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgImZvbz1iYXI7IFZlcnNpb249MSIpCiAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQogICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSkKIAogICAgIGRlZiB0ZXN0X2RvbWFpbl9taXJyb3Ioc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKQEAgLTk2MywyMSArOTYzLDIxIEBACiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgInNwYW09ZWdnczsgVmVyc2lvbj0xIikKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQotICAgICAgICBzZWxmLmFzc2VydF8oIkRvbWFpbiIgbm90IGluIGgsCi0gICAgICAgICAgICAgICAgICAgICAiYWJzZW50IGRvbWFpbiByZXR1cm5lZCB3aXRoIGRvbWFpbiBwcmVzZW50IikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiRG9tYWluIiwgaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzZW50IGRvbWFpbiByZXR1cm5lZCB3aXRoIGRvbWFpbiBwcmVzZW50IikKIAogICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKICAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAnc3BhbT1lZ2dzOyBWZXJzaW9uPTE7IERvbWFpbj0uYmFyLmNvbScpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCckRG9tYWluPSIuYmFyLmNvbSInIGluIGgsICJkb21haW4gbm90IHJldHVybmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJERvbWFpbj0iLmJhci5jb20iJywgaCwgImRvbWFpbiBub3QgcmV0dXJuZWQiKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQogICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKICAgICAgICAgIyBub3RlIG1pc3NpbmcgaW5pdGlhbCBkb3QgaW4gRG9tYWluCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAnc3BhbT1lZ2dzOyBWZXJzaW9uPTE7IERvbWFpbj1iYXIuY29tJykKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQotICAgICAgICBzZWxmLmFzc2VydF8oJyREb21haW49ImJhci5jb20iJyBpbiBoLCAiZG9tYWluIG5vdCByZXR1cm5lZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyREb21haW49ImJhci5jb20iJywgaCwgImRvbWFpbiBub3QgcmV0dXJuZWQiKQogCiAgICAgZGVmIHRlc3RfcGF0aF9taXJyb3Ioc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKQEAgLTk4OCwxNCArOTg4LDEzIEBACiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgInNwYW09ZWdnczsgVmVyc2lvbj0xIikKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQotICAgICAgICBzZWxmLmFzc2VydF8oIlBhdGgiIG5vdCBpbiBoLAotICAgICAgICAgICAgICAgICAgICAgImFic2VudCBwYXRoIHJldHVybmVkIHdpdGggcGF0aCBwcmVzZW50IikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiUGF0aCIsIGgsICJhYnNlbnQgcGF0aCByZXR1cm5lZCB3aXRoIHBhdGggcHJlc2VudCIpCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBQYXRoPS8nKQogICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnJFBhdGg9Ii8iJyBpbiBoLCAicGF0aCBub3QgcmV0dXJuZWQiKQorICAgICAgICBzZWxmLmFzc2VydEluKCckUGF0aD0iLyInLCBoLCAicGF0aCBub3QgcmV0dXJuZWQiKQogCiAgICAgZGVmIHRlc3RfcG9ydF9taXJyb3Ioc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKQEAgLTEwMDYsMzAgKzEwMDUsMjkgQEAKICAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAic3BhbT1lZ2dzOyBWZXJzaW9uPTEiKQogICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiUG9ydCIgbm90IGluIGgsCi0gICAgICAgICAgICAgICAgICAgICAiYWJzZW50IHBvcnQgcmV0dXJuZWQgd2l0aCBwb3J0IHByZXNlbnQiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJQb3J0IiwgaCwgImFic2VudCBwb3J0IHJldHVybmVkIHdpdGggcG9ydCBwcmVzZW50IikKIAogICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKICAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAic3BhbT1lZ2dzOyBWZXJzaW9uPTE7IFBvcnQiKQogICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZS5zZWFyY2goIlwkUG9ydChbXj1dfCQpIiwgaCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2goIlwkUG9ydChbXj1dfCQpIiwgaCksCiAgICAgICAgICAgICAgICAgICAgICAicG9ydCB3aXRoIG5vIHZhbHVlIG5vdCByZXR1cm5lZCB3aXRoIG5vIHZhbHVlIikKIAogICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKICAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAnc3BhbT1lZ2dzOyBWZXJzaW9uPTE7IFBvcnQ9IjgwIicpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCckUG9ydD0iODAiJyBpbiBoLAotICAgICAgICAgICAgICAgICAgICAgInBvcnQgd2l0aCBzaW5nbGUgdmFsdWUgbm90IHJldHVybmVkIHdpdGggc2luZ2xlIHZhbHVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJFBvcnQ9IjgwIicsIGgsCisgICAgICAgICAgICAgICAgICAgICAgInBvcnQgd2l0aCBzaW5nbGUgdmFsdWUgbm90IHJldHVybmVkIHdpdGggc2luZ2xlIHZhbHVlIikKIAogICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKICAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAnc3BhbT1lZ2dzOyBWZXJzaW9uPTE7IFBvcnQ9IjgwLDgwODAiJykKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQotICAgICAgICBzZWxmLmFzc2VydF8oJyRQb3J0PSI4MCw4MDgwIicgaW4gaCwKLSAgICAgICAgICAgICAgICAgICAgICJwb3J0IHdpdGggbXVsdGlwbGUgdmFsdWVzIG5vdCByZXR1cm5lZCB3aXRoIG11bHRpcGxlICIKLSAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZXMiKQorICAgICAgICBzZWxmLmFzc2VydEluKCckUG9ydD0iODAsODA4MCInLCBoLAorICAgICAgICAgICAgICAgICAgICAgICJwb3J0IHdpdGggbXVsdGlwbGUgdmFsdWVzIG5vdCByZXR1cm5lZCB3aXRoIG11bHRpcGxlICIKKyAgICAgICAgICAgICAgICAgICAgICAidmFsdWVzIikKIAogICAgIGRlZiB0ZXN0X25vX3JldHVybl9jb21tZW50KHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CkBAIC0xMDQwLDcgKzEwMzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICdDb21tZW50PSJkb2VzIGFueWJvZHkgcmVhZCB0aGVzZT8iOyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ0NvbW1lbnRVUkw9Imh0dHA6Ly9mb28uYmFyLm5ldC9jb21tZW50Lmh0bWwiJykKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQotICAgICAgICBzZWxmLmFzc2VydF8oCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICJDb21tZW50IiBub3QgaW4gaCwKICAgICAgICAgICAgICJDb21tZW50IG9yIENvbW1lbnRVUkwgY29va2llLWF0dHJpYnV0ZXMgcmV0dXJuZWQgdG8gc2VydmVyIikKIApAQCAtMTA3MSwzNCArMTA2OSwzNCBAQAogICAgICAgICBmb3IgaSBpbiByYW5nZSg0KToKICAgICAgICAgICAgIGkgPSAwCiAgICAgICAgICAgICBmb3IgYyBpbiBjczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjLCBDb29raWUpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGMudmVyc2lvbiwgdmVyc2lvbnNbaV0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYy5uYW1lLCBuYW1lc1tpXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjLmRvbWFpbiwgZG9tYWluc1tpXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjLnBhdGgsIHBhdGhzW2ldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCBDb29raWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnZlcnNpb24sIHZlcnNpb25zW2ldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uYW1lLCBuYW1lc1tpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZG9tYWluLCBkb21haW5zW2ldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wYXRoLCBwYXRoc1tpXSkKICAgICAgICAgICAgICAgICBpID0gaSArIDEKIAogICAgIGRlZiB0ZXN0X3BhcnNlX25zX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBwYXJzZV9uc19oZWFkZXJzCiAKICAgICAgICAgIyBtaXNzaW5nIGRvbWFpbiB2YWx1ZSAoaW52YWxpZCBjb29raWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgcGFyc2VfbnNfaGVhZGVycyhbImZvbz1iYXI7IHBhdGg9LzsgZG9tYWluIl0pLAogICAgICAgICAgICAgW1soImZvbyIsICJiYXIiKSwKICAgICAgICAgICAgICAgKCJwYXRoIiwgIi8iKSwgKCJkb21haW4iLCBOb25lKSwgKCJ2ZXJzaW9uIiwgIjAiKV1dCiAgICAgICAgICAgICApCiAgICAgICAgICMgaW52YWxpZCBleHBpcmVzIHZhbHVlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgcGFyc2VfbnNfaGVhZGVycyhbImZvbz1iYXI7IGV4cGlyZXM9Rm9vIEJhciAxMiAzMzoyMjoxMSAyMDAwIl0pLAogICAgICAgICAgICAgW1soImZvbyIsICJiYXIiKSwgKCJleHBpcmVzIiwgTm9uZSksICgidmVyc2lvbiIsICIwIildXQogICAgICAgICAgICAgKQogICAgICAgICAjIG1pc3NpbmcgY29va2llIHZhbHVlICh2YWxpZCBjb29raWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgcGFyc2VfbnNfaGVhZGVycyhbImZvbyJdKSwKICAgICAgICAgICAgIFtbKCJmb28iLCBOb25lKSwgKCJ2ZXJzaW9uIiwgIjAiKV1dCiAgICAgICAgICAgICApCiAgICAgICAgICMgc2hvdWxkbid0IGFkZCB2ZXJzaW9uIGlmIGhlYWRlciBpcyBlbXB0eQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZV9uc19oZWFkZXJzKFsiIl0pLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9uc19oZWFkZXJzKFsiIl0pLCBbXSkKIAogICAgIGRlZiB0ZXN0X2JhZF9jb29raWVfaGVhZGVyKHNlbGYpOgogCkBAIC0xMTI0LDEzICsxMTIyLDEzIEBACiAgICAgICAgICAgICBdOgogICAgICAgICAgICAgYyA9IGNvb2tpZWphcl9mcm9tX2Nvb2tpZV9oZWFkZXJzKGhlYWRlcnMpCiAgICAgICAgICAgICAjIHRoZXNlIGJhZCBjb29raWVzIHNob3VsZG4ndCBiZSBzZXQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAwKQogCiAgICAgICAgICMgY29va2llIHdpdGggaW52YWxpZCBleHBpcmVzIGlzIHRyZWF0ZWQgYXMgc2Vzc2lvbiBjb29raWUKICAgICAgICAgaGVhZGVycyA9IFsiU2V0LUNvb2tpZTogYz1mb287IGV4cGlyZXM9Rm9vIEJhciAxMiAzMzoyMjoxMSAyMDAwIl0KICAgICAgICAgYyA9IGNvb2tpZWphcl9mcm9tX2Nvb2tpZV9oZWFkZXJzKGhlYWRlcnMpCiAgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbInd3dy5leGFtcGxlLmNvbSJdWyIvIl1bImMiXQotICAgICAgICBzZWxmLmFzc2VydF8oY29va2llLmV4cGlyZXMgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS5leHBpcmVzIGlzIE5vbmUpCiAKIAogY2xhc3MgTFdQQ29va2llVGVzdHMoVGVzdENhc2UpOgpAQCAtMTIwNyw4ICsxMjA1LDggQEAKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCiAKICAgICAgICAgaCA9IHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKQotICAgICAgICBzZWxmLmFzc2VydF8oIlBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxIiBpbiBoIGFuZAotICAgICAgICAgICAgICAgICAgICAgIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiIGluIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxIiwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiQ1VTVE9NRVI9V0lMRV9FX0NPWU9URSIsIGgpCiAKICAgICAgICAgaGVhZGVycy5hcHBlbmQoJ1NldC1Db29raWU6IFNISVBQSU5HPUZFREVYOyBwYXRoPS9mb28nKQogICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20iKQpAQCAtMTIxOCwxNyArMTIxNiwxNyBAQAogICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKIAogICAgICAgICBoID0gcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEiIGluIGggYW5kCi0gICAgICAgICAgICAgICAgICAgICAiQ1VTVE9NRVI9V0lMRV9FX0NPWU9URSIgaW4gaCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICJTSElQUElORz1GRURFWCIgbm90IGluIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxIiwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiQ1VTVE9NRVI9V0lMRV9FX0NPWU9URSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlNISVBQSU5HPUZFREVYIiwgaCkKIAogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tL2Zvby8iKQogICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKIAogICAgICAgICBoID0gcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoIlBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxIiBpbiBoIGFuZAotICAgICAgICAgICAgICAgICAgICAgICJDVVNUT01FUj1XSUxFX0VfQ09ZT1RFIiBpbiBoIGFuZAotICAgICAgICAgICAgICAgICAgICAgIGguc3RhcnRzd2l0aCgiU0hJUFBJTkc9RkVERVg7IikpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiLCBoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaC5zdGFydHN3aXRoKCJTSElQUElORz1GRURFWDsiKSkKIAogICAgIGRlZiB0ZXN0X25ldHNjYXBlX2V4YW1wbGVfMihzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphcgpAQCAtMTI2OSw3ICsxMjY3LDcgQEAKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iKQogICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXEuZ2V0X2hlYWRlcigiQ29va2llIiksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEiKQogCiAgICAgICAgIGhlYWRlcnMuYXBwZW5kKApAQCAtMTI4MCw3ICsxMjc4LDcgQEAKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS9hbW1vIikKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlLnNlYXJjaChyIlBBUlRfTlVNQkVSPVJJRElOR19ST0NLRVRfMDAyMztccyoiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gociJQQVJUX05VTUJFUj1SSURJTkdfUk9DS0VUXzAwMjM7XHMqIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpKSkKIApAQCAtMTMxNiw3ICsxMzE0LDcgQEAKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NSgKICAgICAgICAgICAgIGMsICdodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvbG9naW4nLAogICAgICAgICAgICAgJ0N1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgY29va2llKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNvb2tpZSkKIAogICAgICAgICAjCiAgICAgICAgICMgICAzLiAgVXNlciBBZ2VudCAtPiBTZXJ2ZXIKQEAgLTEzMzgsNyArMTMzNiw3IEBACiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgJ2h0dHA6Ly93d3cuYWNtZS5jb20vYWNtZS9waWNraXRlbScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BhcnRfTnVtYmVyPSJSb2NrZXRfTGF1bmNoZXJfMDAwMSI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicpOwotICAgICAgICBzZWxmLmFzc2VydF8ocmUuc2VhcmNoKAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKAogICAgICAgICAgICAgcideXCRWZXJzaW9uPSI/MSI/OyBDdXN0b21lcj0iP1dJTEVfRV9DT1lPVEUiPzsgXCRQYXRoPSIvYWNtZSIkJywKICAgICAgICAgICAgIGNvb2tpZSkpCiAKQEAgLTEzNjMsMTAgKzEzNjEsMTAgQEAKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9hY21lL3NoaXBwaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2hpcHBpbmc9IkZlZEV4IjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlLnNlYXJjaChyJ15cJFZlcnNpb249Ij8xIj87JywgY29va2llKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlLnNlYXJjaChyJ1BhcnRfTnVtYmVyPSI/Um9ja2V0X0xhdW5jaGVyXzAwMDEiPzsnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gocideXCRWZXJzaW9uPSI/MSI/OycsIGNvb2tpZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gocidQYXJ0X051bWJlcj0iP1JvY2tldF9MYXVuY2hlcl8wMDAxIj87JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdccypcJFBhdGg9IlwvYWNtZSInLCBjb29raWUpKQotICAgICAgICBzZWxmLmFzc2VydF8ocmUuc2VhcmNoKHInQ3VzdG9tZXI9Ij9XSUxFX0VfQ09ZT1RFIj87XHMqXCRQYXRoPSJcL2FjbWUiJywKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaChyJ0N1c3RvbWVyPSI/V0lMRV9FX0NPWU9URSI/O1xzKlwkUGF0aD0iXC9hY21lIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2llKSkKIAogICAgICAgICAjCkBAIC0xMzg4LDcgKzEzODYsNyBAQAogICAgICAgICAjICAgICAgIFRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlLgogCiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYWNtZS9wcm9jZXNzIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKAorICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICByZS5zZWFyY2gocidTaGlwcGluZz0iP0ZlZEV4Ij87XHMqXCRQYXRoPSJcL2FjbWUiJywgY29va2llKSBhbmQKICAgICAgICAgICAgICJXSUxFX0VfQ09ZT1RFIiBpbiBjb29raWUpCiAKQEAgLTE0MzksNyArMTQzNyw3IEBACiAgICAgICAgICMgdGhhbiBvbmNlLgogCiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYWNtZS9hbW1vLy4uLiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgcmUuc2VhcmNoKHIiUmlkaW5nX1JvY2tldF8wMDIzLipSb2NrZXRfTGF1bmNoZXJfMDAwMSIsIGNvb2tpZSkpCiAKICAgICAgICAgIyBBIHN1YnNlcXVlbnQgcmVxdWVzdCBieSB0aGUgdXNlciBhZ2VudCB0byB0aGUgKHNhbWUpIHNlcnZlciBmb3IgYSBVUkwgb2YKQEAgLTE0NTIsOCArMTQ1MCw4IEBACiAgICAgICAgICMgdGhlIHNlcnZlci4KIAogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvcGFydHMvIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJSb2NrZXRfTGF1bmNoZXJfMDAwMSIgaW4gY29va2llIGFuZAotICAgICAgICAgICAgICAgICAgICAgIlJpZGluZ19Sb2NrZXRfMDAyMyIgbm90IGluIGNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiUm9ja2V0X0xhdW5jaGVyXzAwMDEiLCBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlJpZGluZ19Sb2NrZXRfMDAyMyIsIGNvb2tpZSkKIAogICAgIGRlZiB0ZXN0X3JlamVjdGlvbihzZWxmKToKICAgICAgICAgIyBUZXN0IHJlamVjdGlvbiBvZiBTZXQtQ29va2llMiByZXNwb25zZXMgYmFzZWQgb24gZG9tYWluLCBwYXRoLCBwb3J0LgpAQCAtMTQ2OCw0NSArMTQ2Niw0NSBAQAogICAgICAgICAjIGlsbGVnYWwgZG9tYWluIChubyBlbWJlZGRlZCBkb3RzKQogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vPWJhcjsgZG9tYWluPSIuY29tIjsgdmVyc2lvbj0xJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGMpCiAKICAgICAgICAgIyBsZWdhbCBkb21haW4KICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bpbmc9cG9uZzsgZG9tYWluPSJhY21lLmNvbSI7IHZlcnNpb249MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCiAKICAgICAgICAgIyBpbGxlZ2FsIGRvbWFpbiAoaG9zdCBwcmVmaXggInd3dy5hIiBjb250YWlucyBhIGRvdCkKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hLmFjbWUuY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hpej1iYW5nOyBkb21haW49ImFjbWUuY29tIjsgdmVyc2lvbj0xJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKIAogICAgICAgICAjIGxlZ2FsIGRvbWFpbgogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmEuYWNtZS5jb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3b3c9Zmx1dHRlcjsgZG9tYWluPSIuYS5hY21lLmNvbSI7IHZlcnNpb249MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCiAKICAgICAgICAgIyBjYW4ndCBwYXJ0aWFsbHkgbWF0Y2ggYW4gSVAtYWRkcmVzcwogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vMTI1LjEyNS4xMjUuMTI1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnenp6ej1waW5nOyBkb21haW49IjEyNS4xMjUuMTI1IjsgdmVyc2lvbj0xJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKIAogICAgICAgICAjIGlsbGVnYWwgcGF0aCAobXVzdCBiZSBwcmVmaXggb2YgcmVxdWVzdCBwYXRoKQogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LnNvbC5ubyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JsYWg9cmh1YmFyYjsgZG9tYWluPSIuc29sLm5vIjsgcGF0aD0iL2ZvbyI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbj0xJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKIAogICAgICAgICAjIGxlZ2FsIHBhdGgKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5zb2wubm8vZm9vL2JhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jpbmc9Ym9uZzsgZG9tYWluPSIuc29sLm5vIjsgcGF0aD0iL2ZvbyI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbj0xJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKIAogICAgICAgICAjIGlsbGVnYWwgcG9ydCAocmVxdWVzdC1wb3J0IG5vdCBpbiBsaXN0KQogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LnNvbC5ubyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doaXo9ZmZmdDsgZG9tYWluPSIuc29sLm5vIjsgcG9ydD0iOTAsMTAwIjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uPTEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAzKQogCiAgICAgICAgICMgbGVnYWwgcG9ydAogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KApAQCAtMTUxNCwxMyArMTUxMiwxMyBAQAogICAgICAgICAgICAgcidiYW5nPXdhbGxvcDsgdmVyc2lvbj0xOyBkb21haW49Ii5zb2wubm8iOyAnCiAgICAgICAgICAgICByJ3BvcnQ9IjkwLDEwMCwgODAsODA4MCI7ICcKICAgICAgICAgICAgIHInbWF4LWFnZT0xMDA7IENvbW1lbnQgPSAiSnVzdCBraWRkaW5nISAoXCJ8XFxcXCkgIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDQpCiAKICAgICAgICAgIyBwb3J0IGF0dHJpYnV0ZSB3aXRob3V0IGFueSB2YWx1ZSAoY3VycmVudCBwb3J0KQogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LnNvbC5ubyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvbzk9YmFyOyB2ZXJzaW9uPTE7IGRvbWFpbj0iLnNvbC5ubyI7IHBvcnQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4LWFnZT0xMDA7JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgNSkKIAogICAgICAgICAjIGVuY29kZWQgcGF0aAogICAgICAgICAjIExXUCBoYXMgdGhpcyB0ZXN0LCBidXQgdW5lc2NhcGluZyBhbGxvd2VkIHBhdGggY2hhcmFjdGVycyBzZWVtcwpAQCAtMTUzMSw3ICsxNTI5LDcgQEAKICAgICAgICAgIyBjaGFyYWN0ZXI6CiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuc29sLm5vLzxvby8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInZm9vOD1iYXI7IHZlcnNpb249MTsgcGF0aD0iLyUzY29vIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDYpCiAKICAgICAgICAgIyBzYXZlIGFuZCByZXN0b3JlCiAgICAgICAgIGZpbGVuYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTgpAQCAtMTU0Niw3ICsxNTQ0LDcgQEAKICAgICAgICAgICAgIHRyeTogb3MudW5saW5rKGZpbGVuYW1lKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6IHBhc3MKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvbGQsIHJlcHIoYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2xkLCByZXByKGMpKQogCiAgICAgZGVmIHRlc3RfdXJsX2VuY29kaW5nKHNlbGYpOgogICAgICAgICAjIFRyeSBzb21lIFVSTCBlbmNvZGluZ3Mgb2YgdGhlIFBBVEhzLgpAQCAtMTU2MSwxMSArMTU1OSwxMSBAQAogICAgICAgICAgICAgYywgImh0dHA6Ly93d3cuYWNtZS5jb20vZm9vJTJmJTI1Lzw8JTBhbmV35S/m+OUiLAogICAgICAgICAgICAgJ2Jhcj1iYXo7IHBhdGg9Ii9mb28vIjsgdmVyc2lvbj0xJyk7CiAgICAgICAgIHZlcnNpb25fcmUgPSByZS5jb21waWxlKHInXlwkdmVyc2lvbj1cIj8xXCI/JywgcmUuSSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJmb289YmFyIiBpbiBjb29raWUgYW5kIHZlcnNpb25fcmUuc2VhcmNoKGNvb2tpZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZm9vPWJhciIgaW4gY29va2llIGFuZCB2ZXJzaW9uX3JlLnNlYXJjaChjb29raWUpKQogCiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoCiAgICAgICAgICAgICBjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9mb28vJTI1Lzw8JTBhbmV35S/m+OUiKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjb29raWUpCiAKICAgICAgICAgIyB1bmljb2RlIFVSTCBkb2Vzbid0IHJhaXNlIGV4Y2VwdGlvbgogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsIHUiaHR0cDovL3d3dy5hY21lLmNvbS9ceGZjIikKQEAgLTE2MDYsMTIgKzE2MDQsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBuZXdfYwogCiAgICAgICAgIG5ld19jID0gc2F2ZV9hbmRfcmVzdG9yZShjLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obmV3X2MpLCA2KSAgIyBub25lIGRpc2NhcmRlZAotICAgICAgICBzZWxmLmFzc2VydF8oIm5hbWU9J2ZvbzEnLCB2YWx1ZT0nYmFyJyIgaW4gcmVwcihuZXdfYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5ld19jKSwgNikgICMgbm9uZSBkaXNjYXJkZWQKKyAgICAgICAgc2VsZi5hc3NlcnRJbigibmFtZT0nZm9vMScsIHZhbHVlPSdiYXInIiwgcmVwcihuZXdfYykpCiAKICAgICAgICAgbmV3X2MgPSBzYXZlX2FuZF9yZXN0b3JlKGMsIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obmV3X2MpLCA0KSAgIyAyIG9mIHRoZW0gZGlzY2FyZGVkIG9uIHNhdmUKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJuYW1lPSdmb28xJywgdmFsdWU9J2JhciciIGluIHJlcHIobmV3X2MpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuZXdfYyksIDQpICAjIDIgb2YgdGhlbSBkaXNjYXJkZWQgb24gc2F2ZQorICAgICAgICBzZWxmLmFzc2VydEluKCJuYW1lPSdmb28xJywgdmFsdWU9J2JhciciLCByZXByKG5ld19jKSkKIAogICAgIGRlZiB0ZXN0X25ldHNjYXBlX21pc2Moc2VsZik6CiAgICAgICAgICMgU29tZSBhZGRpdGlvbmFsIE5ldHNjYXBlIGNvb2tpZXMgdGVzdHMuCkBAIC0xNjM2LDcgKzE2MzQsNyBAQAogCiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly9mb28uYmFyLmFjbWUuY29tL2ZvbyIpCiAgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQotICAgICAgICBzZWxmLmFzc2VydF8oCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICJQQVJUX05VTUJFUj0zLDQiIGluIHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSBhbmQKICAgICAgICAgICAgICJDdXN0b21lcj1XSUxFX0VfQ09ZT1RFIiBpbiByZXEuZ2V0X2hlYWRlcigiQ29va2llIikpCiAKQEAgLTE2NDksMTEgKzE2NDcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAiZm9vMT1iYXI7IFBPUlQ7IERpc2NhcmQ7IFZlcnNpb249MTsiKQogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZXhhbXBsZS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28yPWJhcjsgZG9tYWluPSIubG9jYWwiOyBWZXJzaW9uPTEnKQotICAgICAgICBzZWxmLmFzc2VydF8oImZvbzE9YmFyIiBpbiBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbzE9YmFyIiwgY29va2llKQogCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9leGFtcGxlLyIsICdmb28zPWJhcjsgVmVyc2lvbj0xJykKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2V4YW1wbGUvIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJmb28yPWJhciIgaW4gY29va2llIGFuZCBsZW4oYykgPT0gMykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vMj1iYXIiLCBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAzKQogCiAgICAgZGVmIHRlc3RfaW50cmFuZXRfZG9tYWluc19ucyhzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQpAQCAtMTY2MiwxMiArMTY2MSwxMiBAQAogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2V4YW1wbGUvIiwgImZvbzE9YmFyIikKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9leGFtcGxlLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28yPWJhcjsgZG9tYWluPS5sb2NhbCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJmb28xPWJhciIgaW4gY29va2llKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vMT1iYXIiLCBjb29raWUpCiAKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9leGFtcGxlLyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiZm9vMj1iYXIiIGluIGNvb2tpZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28yPWJhciIsIGNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9wYXRoKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CkBAIC0xNjkxLDE3ICsxNjkwLDE3IEBACiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYW50cy5jb20vIikKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiSlNFU1NJT05JRD1BQkNERVJBTkRPTTEyMyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcS5nZXRfaGVhZGVyKCJDb29raWUyIiksICckVmVyc2lvbj0iMSInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSlNFU1NJT05JRD1BQkNERVJBTkRPTTEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIkNvb2tpZTIiKSwgJyRWZXJzaW9uPSIxIicpCiAKICAgICAgICAgIyBtaXNzaW5nIHBhdGggaW4gdGhlIHJlcXVlc3QgVVJJCiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYW50cy5jb206ODA4MCIpCiAgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIkpTRVNTSU9OSUQ9QUJDREVSQU5ET00xMjMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXEuZ2V0X2hlYWRlcigiQ29va2llMiIpLCAnJFZlcnNpb249IjEiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hlYWRlcigiQ29va2llIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkpTRVNTSU9OSUQ9QUJDREVSQU5ET00xMjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJDb29raWUyIiksICckVmVyc2lvbj0iMSInKQogCiAgICAgZGVmIHRlc3Rfc2Vzc2lvbl9jb29raWVzKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyCkBAIC0xNzQxLDcgKzE3NDAsNyBAQAogICAgICAgICAgICAga2V5ID0gIiVzX2FmdGVyIiAlIGNvb2tpZS52YWx1ZQogICAgICAgICAgICAgY291bnRlcltrZXldID0gY291bnRlcltrZXldICsgMQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKAorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90ICgKICAgICAgICAgICAgICMgYSBwZXJtYW5lbnQgY29va2llIGdvdCBsb3N0IGFjY2lkZW50YWxseQogICAgICAgICAgICAgY291bnRlclsicGVybV9hZnRlciJdICE9IGNvdW50ZXJbInBlcm1fYmVmb3JlIl0gb3IKICAgICAgICAgICAgICMgYSBzZXNzaW9uIGNvb2tpZSBoYXNuJ3QgYmVlbiBjbGVhcmVkCkBAIC0xNzUxLDcgKzE3NTAsNiBAQAogCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc2V0cwogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCiAgICAgICAgIERhdGVUaW1lVGVzdHMsCiAgICAgICAgIEhlYWRlclRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb3B5LnB5IGIvTGliL3Rlc3QvdGVzdF9jb3B5LnB5CmluZGV4IGJlMzM0Y2MuLjZiNjRmMTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29weS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvcHkucHkKQEAgLTIsNiArMiw3IEBACiAKIGltcG9ydCBjb3B5CiBpbXBvcnQgY29weV9yZWcKK2ltcG9ydCB3ZWFrcmVmCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKQEAgLTExLDggKzEyLDggQEAKICAgICAjIEF0dGVtcHQgZnVsbCBsaW5lIGNvdmVyYWdlIG9mIGNvcHkucHkgZnJvbSB0b3AgdG8gYm90dG9tCiAKICAgICBkZWYgdGVzdF9leGNlcHRpb25zKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oY29weS5FcnJvciBpcyBjb3B5LmVycm9yKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhjb3B5LkVycm9yLCBFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weS5FcnJvciBpcyBjb3B5LmVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhjb3B5LkVycm9yLCBFeGNlcHRpb24pKQogCiAgICAgIyBUaGUgY29weSgpIG1ldGhvZAogCkBAIC01Myw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQsICJzaG91bGRuJ3QgY2FsbCB0aGlzIgogICAgICAgICB4ID0gQygpCiAgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgeCkKIAogICAgIGRlZiB0ZXN0X2NvcHlfcmVkdWNlKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CkBAIC02MSw3ICs2Miw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICIiCiAgICAgICAgIHggPSBDKCkKICAgICAgICAgeSA9IGNvcHkuY29weSh4KQotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQogCiAgICAgZGVmIHRlc3RfY29weV9jYW50KHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CkBAIC04NSw3ICs4Niw3IEBACiAgICAgICAgICAgICAgICAgICJoZWxsbyIsIHUiaGVsbG9cdTEyMzQiLCBmLmZ1bmNfY29kZSwKICAgICAgICAgICAgICAgICAgTmV3U3R5bGUsIHhyYW5nZSgxMCksIENsYXNzaWMsIG1heF0KICAgICAgICAgZm9yIHggaW4gdGVzdHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oY29weS5jb3B5KHgpIGlzIHgsIHJlcHIoeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weS5jb3B5KHgpIGlzIHgsIHJlcHIoeCkpCiAKICAgICBkZWYgdGVzdF9jb3B5X2xpc3Qoc2VsZik6CiAgICAgICAgIHggPSBbMSwgMiwgM10KQEAgLTE3OSw5ICsxODAsOSBAQAogICAgICAgICB4ID0gW3gsIHhdCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgbm90IHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5WzBdIGlzIG5vdCB4WzBdKQotICAgICAgICBzZWxmLmFzc2VydF8oeVswXSBpcyB5WzFdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHlbMF0gaXMgbm90IHhbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5WzBdIGlzIHlbMV0pCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9pc3N1YmNsYXNzKHNlbGYpOgogICAgICAgICAjIFhYWCBOb3RlOiB0aGVyZSdzIG5vIHdheSB0byB0ZXN0IHRoZSBUeXBlRXJyb3IgY29taW5nIG91dCBvZgpAQCAtMjI2LDcgKzIyNyw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQsICJzaG91bGRuJ3QgY2FsbCB0aGlzIgogICAgICAgICB4ID0gQygpCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9yZWR1Y2Uoc2VsZik6CiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKQEAgLTIzNCw3ICsyMzUsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAiIgogICAgICAgICB4ID0gQygpCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9jYW50KHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CkBAIC0yNTgsNjEgKzI1OSw2MSBAQAogICAgICAgICAgICAgICAgICAiaGVsbG8iLCB1ImhlbGxvXHUxMjM0IiwgZi5mdW5jX2NvZGUsCiAgICAgICAgICAgICAgICAgIE5ld1N0eWxlLCB4cmFuZ2UoMTApLCBDbGFzc2ljLCBtYXhdCiAgICAgICAgIGZvciB4IGluIHRlc3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNvcHkuZGVlcGNvcHkoeCkgaXMgeCwgcmVwcih4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3B5LmRlZXBjb3B5KHgpIGlzIHgsIHJlcHIoeCkpCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9saXN0KHNlbGYpOgogICAgICAgICB4ID0gW1sxLCAyXSwgM10KICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeCBpcyBub3QgeSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHhbMF0gaXMgbm90IHlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyBub3QgeVswXSkKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JlZmxleGl2ZV9saXN0KHNlbGYpOgogICAgICAgICB4ID0gW10KICAgICAgICAgeC5hcHBlbmQoeCkKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjbXAsIHksIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIG5vdCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeVswXSBpcyB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHlbMF0gaXMgeSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeSksIDEpCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV90dXBsZShzZWxmKToKICAgICAgICAgeCA9IChbMSwgMl0sIDMpCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgbm90IHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4WzBdIGlzIG5vdCB5WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyBub3QgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0gaXMgbm90IHlbMF0pCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9yZWZsZXhpdmVfdHVwbGUoc2VsZik6CiAgICAgICAgIHggPSAoW10sKQogICAgICAgICB4WzBdLmFwcGVuZCh4KQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNtcCwgeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgbm90IHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5WzBdIGlzIG5vdCB4WzBdKQotICAgICAgICBzZWxmLmFzc2VydF8oeVswXVswXSBpcyB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHlbMF0gaXMgbm90IHhbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5WzBdWzBdIGlzIHkpCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9kaWN0KHNlbGYpOgogICAgICAgICB4ID0geyJmb28iOiBbMSwgMl0sICJiYXIiOiAzfQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIG5vdCB5KQotICAgICAgICBzZWxmLmFzc2VydF8oeFsiZm9vIl0gaXMgbm90IHlbImZvbyJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyBub3QgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbImZvbyJdIGlzIG5vdCB5WyJmb28iXSkKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JlZmxleGl2ZV9kaWN0KHNlbGYpOgogICAgICAgICB4ID0ge30KICAgICAgICAgeFsnZm9vJ10gPSB4CiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY21wLCB5LCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyBub3QgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHlbJ2ZvbyddIGlzIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeVsnZm9vJ10gaXMgeSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeSksIDEpCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9rZWVwYWxpdmUoc2VsZik6CiAgICAgICAgIG1lbW8gPSB7fQogICAgICAgICB4ID0gNDIKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCwgbWVtbykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1lbW9baWQoeCldIGlzIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZW1vW2lkKHgpXSBpcyB4KQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfaW5zdF92YW5pbGxhKHNlbGYpOgogICAgICAgICBjbGFzcyBDOgpAQCAtMzIzLDcgKzMyNCw3IEBACiAgICAgICAgIHggPSBDKFs0Ml0pCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkuZm9vIGlzIG5vdCB4LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2luc3RfZGVlcGNvcHkoc2VsZik6CiAgICAgICAgIGNsYXNzIEM6CkBAIC0zMzYsOCArMzM3LDggQEAKICAgICAgICAgeCA9IEMoWzQyXSkKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyBub3QgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkuZm9vIGlzIG5vdCB4LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyBub3QgeC5mb28pCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9pbnN0X2dldGluaXRhcmdzKHNlbGYpOgogICAgICAgICBjbGFzcyBDOgpAQCAtMzUwLDggKzM1MSw4IEBACiAgICAgICAgIHggPSBDKFs0Ml0pCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgbm90IHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5LmZvbyBpcyBub3QgeC5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgbm90IHguZm9vKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfaW5zdF9nZXRzdGF0ZShzZWxmKToKICAgICAgICAgY2xhc3MgQzoKQEAgLTM2NCw4ICszNjUsOCBAQAogICAgICAgICB4ID0gQyhbNDJdKQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIG5vdCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeS5mb28gaXMgbm90IHguZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2luc3Rfc2V0c3RhdGUoc2VsZik6CiAgICAgICAgIGNsYXNzIEM6CkBAIC0zNzgsOCArMzc5LDggQEAKICAgICAgICAgeCA9IEMoWzQyXSkKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyBub3QgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkuZm9vIGlzIG5vdCB4LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyBub3QgeC5mb28pCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9pbnN0X2dldHN0YXRlX3NldHN0YXRlKHNlbGYpOgogICAgICAgICBjbGFzcyBDOgpAQCAtMzk0LDggKzM5NSw4IEBACiAgICAgICAgIHggPSBDKFs0Ml0pCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgbm90IHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5LmZvbyBpcyBub3QgeC5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgbm90IHguZm9vKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfcmVmbGV4aXZlX2luc3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIEM6CkBAIC00MDMsOCArNDA0LDggQEAKICAgICAgICAgeCA9IEMoKQogICAgICAgICB4LmZvbyA9IHgKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgbm90IHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5LmZvbyBpcyB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIHkpCiAKICAgICAjIF9yZWNvbnN0cnVjdCgpCiAKQEAgLTQxNCw5ICs0MTUsOSBAQAogICAgICAgICAgICAgICAgIHJldHVybiAiIgogICAgICAgICB4ID0gQygpCiAgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgeCkKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgeCkKIAogICAgIGRlZiB0ZXN0X3JlY29uc3RydWN0X25vc3RhdGUoc2VsZik6CiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKQEAgLTQyNSw5ICs0MjYsOSBAQAogICAgICAgICB4ID0gQygpCiAgICAgICAgIHguZm9vID0gNDIKICAgICAgICAgeSA9IGNvcHkuY29weSh4KQotICAgICAgICBzZWxmLmFzc2VydF8oeS5fX2NsYXNzX18gaXMgeC5fX2NsYXNzX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5Ll9fY2xhc3NfXyBpcyB4Ll9fY2xhc3NfXykKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkuX19jbGFzc19fIGlzIHguX19jbGFzc19fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5fX2NsYXNzX18gaXMgeC5fX2NsYXNzX18pCiAKICAgICBkZWYgdGVzdF9yZWNvbnN0cnVjdF9zdGF0ZShzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgpAQCAtNDQyLDcgKzQ0Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeS5mb28gaXMgbm90IHguZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgbm90IHguZm9vKQogCiAgICAgZGVmIHRlc3RfcmVjb25zdHJ1Y3Rfc3RhdGVfc2V0c3RhdGUoc2VsZik6CiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKQEAgLTQ1OSw3ICs0NjAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkuZm9vIGlzIG5vdCB4LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKIAogICAgIGRlZiB0ZXN0X3JlY29uc3RydWN0X3JlZmxleGl2ZShzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgpAQCAtNDY3LDggKzQ2OCw4IEBACiAgICAgICAgIHggPSBDKCkKICAgICAgICAgeC5mb28gPSB4CiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIG5vdCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeS5mb28gaXMgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyB5KQogCiAgICAgIyBBZGRpdGlvbnMgZm9yIFB5dGhvbiAyLjMgYW5kIHBpY2tsZSBwcm90b2NvbCAyCiAKQEAgLTQ4MywxMiArNDg0LDEyIEBACiAgICAgICAgIHggPSBDKFtbMSwgMl0sIDNdKQogICAgICAgICB5ID0gY29weS5jb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgbm90IHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4WzBdIGlzIHlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyB5WzBdKQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIG5vdCB5KQotICAgICAgICBzZWxmLmFzc2VydF8oeFswXSBpcyBub3QgeVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdIGlzIG5vdCB5WzBdKQogCiAgICAgZGVmIHRlc3RfcmVkdWNlXzV0dXBsZShzZWxmKToKICAgICAgICAgY2xhc3MgQyhkaWN0KToKQEAgLTUwMSwxMiArNTAyLDEyIEBACiAgICAgICAgIHggPSBDKFsoImZvbyIsIFsxLCAyXSksICgiYmFyIiwgMyldKQogICAgICAgICB5ID0gY29weS5jb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgbm90IHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4WyJmb28iXSBpcyB5WyJmb28iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WyJmb28iXSBpcyB5WyJmb28iXSkKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQotICAgICAgICBzZWxmLmFzc2VydF8oeCBpcyBub3QgeSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHhbImZvbyJdIGlzIG5vdCB5WyJmb28iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WyJmb28iXSBpcyBub3QgeVsiZm9vIl0pCiAKICAgICBkZWYgdGVzdF9jb3B5X3Nsb3RzKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CkBAIC01MTQsNyArNTE1LDcgQEAKICAgICAgICAgeCA9IEMoKQogICAgICAgICB4LmZvbyA9IFs0Ml0KICAgICAgICAgeSA9IGNvcHkuY29weSh4KQotICAgICAgICBzZWxmLmFzc2VydF8oeC5mb28gaXMgeS5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LmZvbyBpcyB5LmZvbykKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3Nsb3RzKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CkBAIC01MjMsNyArNTI0LDI3IEBACiAgICAgICAgIHguZm9vID0gWzQyXQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZm9vLCB5LmZvbykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHguZm9vIGlzIG5vdCB5LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguZm9vIGlzIG5vdCB5LmZvbykKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2RpY3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEMoZGljdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZD1Ob25lKToKKyAgICAgICAgICAgICAgICBpZiBub3QgZDoKKyAgICAgICAgICAgICAgICAgICAgZCA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi5fa2V5cyA9IGxpc3QoZC5rZXlzKCkpCisgICAgICAgICAgICAgICAgZGljdC5fX2luaXRfXyhzZWxmLCBkKQorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgaXRlbSk6CisgICAgICAgICAgICAgICAgZGljdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIGl0ZW0pCisgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLl9rZXlzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9rZXlzLmFwcGVuZChrZXkpCisgICAgICAgIHggPSBDKGQ9eydmb28nOjB9KQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fa2V5cywgeS5fa2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHhbJ2JhciddID0gMQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoeC5fa2V5cywgeS5fa2V5cykKIAogICAgIGRlZiB0ZXN0X2NvcHlfbGlzdF9zdWJjbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgQyhsaXN0KToKQEAgLTUzMyw4ICs1NTQsOCBAQAogICAgICAgICB5ID0gY29weS5jb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmZvbywgeS5mb28pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4WzBdIGlzIHlbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4LmZvbyBpcyB5LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0gaXMgeVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguZm9vIGlzIHkuZm9vKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfbGlzdF9zdWJjbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgQyhsaXN0KToKQEAgLTU0NCw4ICs1NjUsOCBAQAogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIHkuZm9vKQotICAgICAgICBzZWxmLmFzc2VydF8oeFswXSBpcyBub3QgeVswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHguZm9vIGlzIG5vdCB5LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0gaXMgbm90IHlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LmZvbyBpcyBub3QgeS5mb28pCiAKICAgICBkZWYgdGVzdF9jb3B5X3R1cGxlX3N1YmNsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBDKHR1cGxlKToKQEAgLTU2Miw4ICs1ODMsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHgpLCAoWzEsIDJdLCAzKSkKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSh5KSwgKFsxLCAyXSwgMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIG5vdCB5KQotICAgICAgICBzZWxmLmFzc2VydF8oeFswXSBpcyBub3QgeVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdIGlzIG5vdCB5WzBdKQogCiAgICAgZGVmIHRlc3RfZ2V0c3RhdGVfZXhjKHNlbGYpOgogICAgICAgICBjbGFzcyBFdmlsU3RhdGUob2JqZWN0KToKQEAgLTU4NSw2ICs2MDYsMTAzIEBACiAgICAgICAgIGJhciA9IGxhbWJkYTogTm9uZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuZGVlcGNvcHkoYmFyKSwgYmFyKQogCisgICAgZGVmIF9jaGVja193ZWFrcmVmKHNlbGYsIF9jb3B5KToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvYmogPSBDKCkKKyAgICAgICAgeCA9IHdlYWtyZWYucmVmKG9iaikKKyAgICAgICAgeSA9IF9jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisgICAgICAgIGRlbCBvYmoKKyAgICAgICAgeSA9IF9jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X3dlYWtyZWYoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3dlYWtyZWYoY29weS5jb3B5KQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfd2Vha3JlZihzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfd2Vha3JlZihjb3B5LmRlZXBjb3B5KQorCisgICAgZGVmIF9jaGVja19jb3B5X3dlYWtkaWN0KHNlbGYsIF9kaWN0dHlwZSk6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSwgYiwgYywgZCA9IFtDKCkgZm9yIGkgaW4geHJhbmdlKDQpXQorICAgICAgICB1ID0gX2RpY3R0eXBlKCkKKyAgICAgICAgdVthXSA9IGIKKyAgICAgICAgdVtjXSA9IGQKKyAgICAgICAgdiA9IGNvcHkuY29weSh1KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHYgaXMgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCB1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbYV0sIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodltjXSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDIpCisgICAgICAgIGRlbCBjLCBkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCAxKQorICAgICAgICB4LCB5ID0gQygpLCBDKCkKKyAgICAgICAgIyBUaGUgdW5kZXJseWluZyBjb250YWluZXJzIGFyZSBkZWNvdXBsZWQKKyAgICAgICAgdlt4XSA9IHkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih4LCB1KQorCisgICAgZGVmIHRlc3RfY29weV93ZWFra2V5ZGljdChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfY29weV93ZWFrZGljdCh3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KQorCisgICAgZGVmIHRlc3RfY29weV93ZWFrdmFsdWVkaWN0KHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19jb3B5X3dlYWtkaWN0KHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3dlYWtrZXlkaWN0KHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgc2VsZi5pID0gaQorICAgICAgICBhLCBiLCBjLCBkID0gW0MoaSkgZm9yIGkgaW4geHJhbmdlKDQpXQorICAgICAgICB1ID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSgpCisgICAgICAgIHVbYV0gPSBiCisgICAgICAgIHVbY10gPSBkCisgICAgICAgICMgS2V5cyBhcmVuJ3QgY29waWVkLCB2YWx1ZXMgYXJlCisgICAgICAgIHYgPSBjb3B5LmRlZXBjb3B5KHUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodiwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodlthXSBpcyBiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHZbY10gaXMgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2W2FdLmksIGIuaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2W2NdLmksIGQuaSkKKyAgICAgICAgZGVsIGMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDEpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV93ZWFrdmFsdWVkaWN0KHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgc2VsZi5pID0gaQorICAgICAgICBhLCBiLCBjLCBkID0gW0MoaSkgZm9yIGkgaW4geHJhbmdlKDQpXQorICAgICAgICB1ID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKyAgICAgICAgdVthXSA9IGIKKyAgICAgICAgdVtjXSA9IGQKKyAgICAgICAgIyBLZXlzIGFyZSBjb3BpZWQsIHZhbHVlcyBhcmVuJ3QKKyAgICAgICAgdiA9IGNvcHkuZGVlcGNvcHkodSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2LCB1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgMikKKyAgICAgICAgKHgsIHkpLCAoeiwgdCkgPSBzb3J0ZWQodi5pdGVtcygpLCBrZXk9bGFtYmRhIHBhaXI6IHBhaXJbMF0uaSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh4IGlzIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5pLCBhLmkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeiBpcyBjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHouaSwgYy5pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodCBpcyBkKQorICAgICAgICBkZWwgeCwgeSwgeiwgdAorICAgICAgICBkZWwgZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgMSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2JvdW5kX21ldGhvZChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgbShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGYgPSBGb28oKQorICAgICAgICBmLmIgPSBmLm0KKyAgICAgICAgZyA9IGNvcHkuZGVlcGNvcHkoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLm0sIGcuYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGcuYi5pbV9zZWxmIGlzIGcpCisgICAgICAgIGcuYigpCisKKwogZGVmIGdsb2JhbF9mb28oeCwgeSk6IHJldHVybiB4K3kKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb3B5X3JlZy5weSBiL0xpYi90ZXN0L3Rlc3RfY29weV9yZWcucHkKaW5kZXggYzNkMzk2NC4uOGNkYjhiNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb3B5X3JlZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvcHlfcmVnLnB5CkBAIC00MCw3ICs0MCw3IEBACiAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICBpbXBvcnQgY29weQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBjb3B5LmNvcHkoVHJ1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgY29weS5jb3B5KFRydWUpKQogCiAgICAgZGVmIHRlc3RfZXh0ZW5zaW9uX3JlZ2lzdHJ5KHNlbGYpOgogICAgICAgICBtb2QsIGZ1bmMsIGNvZGUgPSAnanVuazEgJywgJyBqdW5rMicsIDB4YWJjZApAQCAtNTEsMTAgKzUxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QsIGZ1bmMsIGNvZGUpCiAgICAgICAgICAgICBjb3B5X3JlZy5hZGRfZXh0ZW5zaW9uKG1vZCwgZnVuYywgY29kZSkKICAgICAgICAgICAgICMgU2hvdWxkIGJlIGluIHRoZSByZWdpc3RyeS4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhjb3B5X3JlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5W21vZCwgZnVuY10gPT0gY29kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhjb3B5X3JlZy5faW52ZXJ0ZWRfcmVnaXN0cnlbY29kZV0gPT0gKG1vZCwgZnVuYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weV9yZWcuX2V4dGVuc2lvbl9yZWdpc3RyeVttb2QsIGZ1bmNdID09IGNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weV9yZWcuX2ludmVydGVkX3JlZ2lzdHJ5W2NvZGVdID09IChtb2QsIGZ1bmMpKQogICAgICAgICAgICAgIyBTaG91bGRuJ3QgYmUgaW4gdGhlIGNhY2hlLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNvZGUgbm90IGluIGNvcHlfcmVnLl9leHRlbnNpb25fY2FjaGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGNvZGUsIGNvcHlfcmVnLl9leHRlbnNpb25fY2FjaGUpCiAgICAgICAgICAgICAjIFJlZHVuZGFudCByZWdpc3RyYXRpb24gc2hvdWxkIGJlIE9LLgogICAgICAgICAgICAgY29weV9yZWcuYWRkX2V4dGVuc2lvbihtb2QsIGZ1bmMsIGNvZGUpICAjIHNob3VsZG4ndCBibG93IHVwCiAgICAgICAgICAgICAjIENvbmZsaWN0aW5nIGNvZGUuCkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgICAgICBlLnJlc3RvcmUoKQogCiAgICAgICAgICMgU2hvdWxkbid0IGJlIHRoZXJlIGFueW1vcmUuCi0gICAgICAgIHNlbGYuYXNzZXJ0XygobW9kLCBmdW5jKSBub3QgaW4gY29weV9yZWcuX2V4dGVuc2lvbl9yZWdpc3RyeSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigobW9kLCBmdW5jKSwgY29weV9yZWcuX2V4dGVuc2lvbl9yZWdpc3RyeSkKICAgICAgICAgIyBUaGUgY29kZSAqbWF5KiBiZSBpbiBjb3B5X3JlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LCB0aG91Z2gsIGlmCiAgICAgICAgICMgd2UgaGFwcGVuZWQgdG8gcGljayBvbiBhIHJlZ2lzdGVyZWQgY29kZS4gIFNvIGRvbid0IGNoZWNrIGZvcgogICAgICAgICAjIHRoYXQuCkBAIC0xMDEsMTYgKzEwMSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLCBmdW5jLCBjb2RlKQogCiAgICAgZGVmIHRlc3Rfc2xvdG5hbWVzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhvdXRTbG90cyksIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhXZWFrcmVmKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRob3V0U2xvdHMpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhXZWFrcmVmKSwgW10pCiAgICAgICAgIGV4cGVjdGVkID0gWydfV2l0aFByaXZhdGVfX3NwYW0nXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhQcml2YXRlKSwgZXhwZWN0ZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvcHlfcmVnLl9zbG90bmFtZXMoV2l0aFNpbmdsZVN0cmluZyksIFsnc3BhbSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHlfcmVnLl9zbG90bmFtZXMoV2l0aFByaXZhdGUpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhTaW5nbGVTdHJpbmcpLCBbJ3NwYW0nXSkKICAgICAgICAgZXhwZWN0ZWQgPSBbJ2VnZ3MnLCAnc3BhbSddCiAgICAgICAgIGV4cGVjdGVkLnNvcnQoKQogICAgICAgICByZXN1bHQgPSBjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhJbmhlcml0ZWQpCiAgICAgICAgIHJlc3VsdC5zb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3BpY2tsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY3BpY2tsZS5weQppbmRleCBjNjNjYTNlLi5jMjQwNjY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NwaWNrbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jcGlja2xlLnB5CkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IGNQaWNrbGUsIHVuaXR0ZXN0CiBmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIGZyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGlja2xlVGVzdHMsIEFic3RyYWN0UGlja2xlTW9kdWxlVGVzdHMKK2Zyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiBjbGFzcyBjUGlja2xlVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cywgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cyk6CkBAIC05NSw2ICs5NiwxMiBAQAogICAgICAgICBiID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCiAKK2NsYXNzIGNQaWNrbGVQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMoQWJzdHJhY3RQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMpOgorCisgICAgcGlja2xlcl9jbGFzcyA9IGNQaWNrbGUuUGlja2xlcgorICAgIHVucGlja2xlcl9jbGFzcyA9IGNQaWNrbGUuVW5waWNrbGVyCisKKwogY2xhc3MgTm9kZShvYmplY3QpOgogICAgIHBhc3MKIApAQCAtMTI1LDYgKzEzMiw3IEBACiAgICAgICAgIGNQaWNrbGVMaXN0UGlja2xlclRlc3RzLAogICAgICAgICBjUGlja2xlRmFzdFBpY2tsZXJUZXN0cywKICAgICAgICAgY1BpY2tsZURlZXBSZWN1cnNpdmUsCisgICAgICAgIGNQaWNrbGVQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMsCiAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA4MzE4OTVjLi5hZjNmZTYyCi0tLSBhL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQpAQCAtMzksNyArMzksNyBAQAogIyBEb24ndCByZW1vdmUgdGhpcyBjb21tZW50LiBFdmVyeXRoaW5nIGJlbG93IGl0IGlzIGF1dG8tZ2VuZXJhdGVkLgogIy0tY3V0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENQcm9maWxlVGVzdC5leHBlY3RlZF9vdXRwdXRbJ3ByaW50X3N0YXRzJ10gPSAiIiJcCi0gICAgICAgICAxMjYgZnVuY3Rpb24gY2FsbHMgKDEwNiBwcmltaXRpdmUgY2FsbHMpIGluIDEuMDAwIENQVSBzZWNvbmRzCisgICAgICAgICAxMjYgZnVuY3Rpb24gY2FsbHMgKDEwNiBwcmltaXRpdmUgY2FsbHMpIGluIDEuMDAwIHNlY29uZHMKIAogICAgT3JkZXJlZCBieTogc3RhbmRhcmQgbmFtZQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5IGIvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IGY2ZjNhODEuLjRkYjIwMGQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IGNyeXB0CisKK2NyeXB0ID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NyeXB0JykKIAogY2xhc3MgQ3J5cHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3N2LnB5IGIvTGliL3Rlc3QvdGVzdF9jc3YucHkKaW5kZXggN2NjZTc3NC4uN2IxNmUyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jc3YucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jc3YucHkKQEAgLTksNiArOSw3IEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBjc3YKIGltcG9ydCBnYworaW1wb3J0IGlvCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiBjbGFzcyBUZXN0X0Nzdih1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zMjUsMjIgKzMyNiwxNyBAQAogICAgICAgICBleHBlY3RlZF9kaWFsZWN0cyA9IGNzdi5saXN0X2RpYWxlY3RzKCkgKyBbbmFtZV0KICAgICAgICAgZXhwZWN0ZWRfZGlhbGVjdHMuc29ydCgpCiAgICAgICAgIGNzdi5yZWdpc3Rlcl9kaWFsZWN0KG5hbWUsIG15ZXhjZWx0c3YpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjc3YuZ2V0X2RpYWxlY3QobmFtZSkuZGVsaW1pdGVyLCAnXHQnKQotICAgICAgICAgICAgZ290X2RpYWxlY3RzID0gY3N2Lmxpc3RfZGlhbGVjdHMoKQotICAgICAgICAgICAgZ290X2RpYWxlY3RzLnNvcnQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kaWFsZWN0cywgZ290X2RpYWxlY3RzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgY3N2LnVucmVnaXN0ZXJfZGlhbGVjdChuYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY3N2LnVucmVnaXN0ZXJfZGlhbGVjdCwgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjc3YuZ2V0X2RpYWxlY3QobmFtZSkuZGVsaW1pdGVyLCAnXHQnKQorICAgICAgICBnb3RfZGlhbGVjdHMgPSBzb3J0ZWQoY3N2Lmxpc3RfZGlhbGVjdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kaWFsZWN0cywgZ290X2RpYWxlY3RzKQogCiAgICAgZGVmIHRlc3RfcmVnaXN0ZXJfa3dhcmdzKHNlbGYpOgogICAgICAgICBuYW1lID0gJ2ZlZGNiYScKICAgICAgICAgY3N2LnJlZ2lzdGVyX2RpYWxlY3QobmFtZSwgZGVsaW1pdGVyPSc7JykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNzdi5nZXRfZGlhbGVjdChuYW1lKS5kZWxpbWl0ZXIsICdcdCcpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MobGlzdChjc3YucmVhZGVyKCdYO1k7WicsIG5hbWUpKSwgWydYJywgJ1knLCAnWiddKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgY3N2LnVucmVnaXN0ZXJfZGlhbGVjdChuYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY3N2LnVucmVnaXN0ZXJfZGlhbGVjdCwgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjc3YuZ2V0X2RpYWxlY3QobmFtZSkuZGVsaW1pdGVyLCAnOycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW1snWCcsICdZJywgJ1onXV0sIGxpc3QoY3N2LnJlYWRlcihbJ1g7WTtaJ10sIG5hbWUpKSkKIAogICAgIGRlZiB0ZXN0X2luY29tcGxldGVfZGlhbGVjdChzZWxmKToKICAgICAgICAgY2xhc3MgbXlleGNlbHRzdihjc3YuRGlhbGVjdCk6CkBAIC01OTUsMTEgKzU5MSwxNSBAQAogICAgICMjIyAic2hvcnQiIG1lYW5zIHRoZXJlIGFyZSBmZXdlciBlbGVtZW50cyBpbiB0aGUgcm93IHRoYW4gZmllbGRuYW1lcwogICAgIGRlZiB0ZXN0X3dyaXRlX3NpbXBsZV9kaWN0KHNlbGYpOgogICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQotICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgZmlsZW9iaiA9IGlvLm9wZW4oZmQsICd3K2InKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3cml0ZXIgPSBjc3YuRGljdFdyaXRlcihmaWxlb2JqLCBmaWVsZG5hbWVzID0gWyJmMSIsICJmMiIsICJmMyJdKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlaGVhZGVyKCkKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWRsaW5lKCksICJmMSxmMixmM1xyXG4iKQogICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KHsiZjEiOiAxMCwgImYzIjogImFiYyJ9KQogICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBmaWxlb2JqLnJlYWRsaW5lKCkgIyBoZWFkZXIKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksICIxMCwsYWJjXHJcbiIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKQEAgLTg5MSw3ICs4OTEsNyBAQAogJ0hhcnJ5JydzJzonQXJsaW5ndG9uIEhlaWdodHMnOidJTCc6JzIvMS8wMyc6J0tpbWkgSGF5ZXMnCiAnU2hhcmsgQ2l0eSc6J0dsZW5kYWxlIEhlaWdodHMnOidJTCc6JzEyLzI4LzAyJzonUHJlemVuY2UnCiAnVG9tbXknJ3MgUGxhY2UnOidCbHVlIElzbGFuZCc6J0lMJzonMTIvMjgvMDInOidCbHVlIFN1bmRheS9XaGl0ZSBDcm93JwotJ1N0b25lY3V0dGVycyBTZWFmb29kIGFuZCBDaG9wIEhvdXNlJzonTGVtb250JzonSUwnOicxMi8xOS8wMic6J1dlZWsgQmFjaycKKydTdG9uZWN1dHRlcnMgJydTZWFmb29kJycgYW5kIENob3AgSG91c2UnOidMZW1vbnQnOidJTCc6JzEyLzE5LzAyJzonV2VlayBCYWNrJwogIiIiCiAgICAgaGVhZGVyID0gJycnXAogInZlbnVlIiwiY2l0eSIsInN0YXRlIiwiZGF0ZSIsInBlcmZvcm1lcnMiCkBAIC05MzUsNyArOTM1LDcgQEAKICAgICAgICAgIyBnaXZlbiB0aGF0IGFsbCB0aHJlZSBsaW5lcyBpbiBzYW1wbGUzIGFyZSBlcXVhbCwKICAgICAgICAgIyBJIHRoaW5rIHRoYXQgYW55IGNoYXJhY3RlciBjb3VsZCBoYXZlIGJlZW4gJ2d1ZXNzZWQnIGFzIHRoZQogICAgICAgICAjIGRlbGltaXRlciwgZGVwZW5kaW5nIG9uIGRpY3Rpb25hcnkgb3JkZXIKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRpYWxlY3QuZGVsaW1pdGVyIGluIHNlbGYuc2FtcGxlMykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihkaWFsZWN0LmRlbGltaXRlciwgc2VsZi5zYW1wbGUzKQogICAgICAgICBkaWFsZWN0ID0gc25pZmZlci5zbmlmZihzZWxmLnNhbXBsZTMsIGRlbGltaXRlcnM9Ij8sIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LmRlbGltaXRlciwgIj8iKQogICAgICAgICBkaWFsZWN0ID0gc25pZmZlci5zbmlmZihzZWxmLnNhbXBsZTMsIGRlbGltaXRlcnM9Ii8sIikKQEAgLTk1MCw2ICs5NTAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LmRlbGltaXRlciwgInwiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3QucXVvdGVjaGFyLCAiJyIpCiAKKyAgICBkZWYgdGVzdF9kb3VibGVxdW90ZShzZWxmKToKKyAgICAgICAgc25pZmZlciA9IGNzdi5TbmlmZmVyKCkKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5oZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGlhbGVjdC5kb3VibGVxdW90ZSkKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGUyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlhbGVjdC5kb3VibGVxdW90ZSkKKwogaWYgbm90IGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgogICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOiBwcmludCAiKioqIHNraXBwaW5nIGxlYWthZ2UgdGVzdHMgKioqIgogZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3R5cGVzLnB5IGIvTGliL3Rlc3QvdGVzdF9jdHlwZXMucHkKaW5kZXggMGJkMmVkNi4uMTdmMjg3NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jdHlwZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jdHlwZXMucHkKQEAgLTEsMTcgKzEsMTUgQEAKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUsIF9jaGVja19weTNrX3dhcm5pbmdzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKICNTa2lwIHRlc3RzIGlmIF9jdHlwZXMgbW9kdWxlIGRvZXMgbm90IGV4aXN0CiBpbXBvcnRfbW9kdWxlKCdfY3R5cGVzJykKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygoImJ1ZmZlci4uIG5vdCBzdXBwb3J0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjbGFzc2ljIChpbnR8bG9uZykgZGl2aXNpb24iLCBEZXByZWNhdGlvbldhcm5pbmcpLCk6Ci0gICAgICAgIGltcG9ydCBjdHlwZXMudGVzdAotICAgICAgICBza2lwcGVkLCB0ZXN0Y2FzZXMgPSBjdHlwZXMudGVzdC5nZXRfdGVzdHMoY3R5cGVzLnRlc3QsICJ0ZXN0XyoucHkiLCB2ZXJib3NpdHk9MCkKLSAgICAgICAgc3VpdGVzID0gW3VuaXR0ZXN0Lm1ha2VTdWl0ZSh0KSBmb3IgdCBpbiB0ZXN0Y2FzZXNdCi0gICAgICAgIHJ1bl91bml0dGVzdCh1bml0dGVzdC5UZXN0U3VpdGUoc3VpdGVzKSkKKyAgICBpbXBvcnQgY3R5cGVzLnRlc3QKKyAgICBza2lwcGVkLCB0ZXN0Y2FzZXMgPSBjdHlwZXMudGVzdC5nZXRfdGVzdHMoY3R5cGVzLnRlc3QsICJ0ZXN0XyoucHkiLCB2ZXJib3NpdHk9MCkKKyAgICBzdWl0ZXMgPSBbdW5pdHRlc3QubWFrZVN1aXRlKHQpIGZvciB0IGluIHRlc3RjYXNlc10KKyAgICBydW5fdW5pdHRlc3QodW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlcykpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5IGIvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkKaW5kZXggNTRjMzEwZS4uZmEwZDQ2OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkKQEAgLTksMjQgKzksMjYgQEAKICMgT25seSBjYWxsZWQsIG5vdCB0ZXN0ZWQ6IGdldG1vdXNlKCksIHVuZ2V0bW91c2UoKQogIwogCi1pbXBvcnQgY3Vyc2VzLCBzeXMsIHRlbXBmaWxlLCBvcwotaW1wb3J0IGN1cnNlcy5wYW5lbAoraW1wb3J0IHN5cywgdGVtcGZpbGUsIG9zCiAKICMgT3B0aW9uYWxseSB0ZXN0IGN1cnNlcyBtb2R1bGUuICBUaGlzIGN1cnJlbnRseSByZXF1aXJlcyB0aGF0IHRoZQogIyAnY3Vyc2VzJyByZXNvdXJjZSBiZSBnaXZlbiBvbiB0aGUgcmVncnRlc3QgY29tbWFuZCBsaW5lIHVzaW5nIHRoZSAtdQogIyBvcHRpb24uICBJZiBub3QgYXZhaWxhYmxlLCBub3RoaW5nIGFmdGVyIHRoaXMgbGluZSB3aWxsIGJlIGV4ZWN1dGVkLgogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCByZXF1aXJlcywgVGVzdFNraXBwZWQKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIGltcG9ydF9tb2R1bGUKIHJlcXVpcmVzKCdjdXJzZXMnKQorY3Vyc2VzID0gaW1wb3J0X21vZHVsZSgnY3Vyc2VzJykKK2N1cnNlcy5wYW5lbCA9IGltcG9ydF9tb2R1bGUoJ2N1cnNlcy5wYW5lbCcpCiAKIAogIyBYWFg6IGlmIG5ld3Rlcm0gd2FzIHN1cHBvcnRlZCB3ZSBjb3VsZCB1c2UgaXQgaW5zdGVhZCBvZiBpbml0c2NyIGFuZCBub3QgZXhpdAogdGVybSA9IG9zLmVudmlyb24uZ2V0KCdURVJNJykKIGlmIG5vdCB0ZXJtIG9yIHRlcm0gPT0gJ3Vua25vd24nOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkLCAiJFRFUk09JXIsIGNhbGxpbmcgaW5pdHNjcigpIG1heSBjYXVzZSBleGl0IiAlIHRlcm0KKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIiRURVJNPSVyLCBjYWxsaW5nIGluaXRzY3IoKSBtYXkgY2F1c2UgZXhpdCIgJSB0ZXJtCiAKIGlmIHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIjoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCgiY3lnd2luJ3MgY3Vyc2VzIG1vc3RseSBqdXN0IGhhbmdzIikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiY3lnd2luJ3MgY3Vyc2VzIG1vc3RseSBqdXN0IGhhbmdzIikKIAogZGVmIHdpbmRvd19mdW5jcyhzdGRzY3IpOgogICAgICJUZXN0IHRoZSBtZXRob2RzIG9mIHdpbmRvd3MiCkBAIC0yNzYsNyArMjc4LDcgQEAKICAgICB1bml0X3Rlc3RzKCkKIGVsc2U6CiAgICAgaWYgbm90IHN5cy5fX3N0ZG91dF9fLmlzYXR0eSgpOgotICAgICAgICByYWlzZSBUZXN0U2tpcHBlZCgic3lzLl9fc3Rkb3V0X18gaXMgbm90IGEgdHR5IikKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInN5cy5fX3N0ZG91dF9fIGlzIG5vdCBhIHR0eSIpCiAgICAgIyB0ZXN0aW5nIHNldHVwdGVybSgpIGluc2lkZSBpbml0c2NyL2VuZHdpbgogICAgICMgY2F1c2VzIHRlcm1pbmFsIGJyZWFrYWdlCiAgICAgY3Vyc2VzLnNldHVwdGVybShmZD1zeXMuX19zdGRvdXRfXy5maWxlbm8oKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGF0ZXRpbWUucHkgYi9MaWIvdGVzdC90ZXN0X2RhdGV0aW1lLnB5CmluZGV4IDczNTU4MmYuLjE1MTg4ZGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGF0ZXRpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYXRldGltZS5weQpAQCAtMiw3ICsyLDcgQEAKIAogU2VlIGh0dHA6Ly93d3cuem9wZS5vcmcvTWVtYmVycy9mZHJha2UvRGF0ZVRpbWVXaWtpL1Rlc3RDYXNlcwogIiIiCi0KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KIGltcG9ydCBzeXMKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBjUGlja2xlCkBAIC03OSw5ICs3OSw5IEBACiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgb2Zmc2V0LCBuYW1lKToKICAgICAgICAgICAgICAgICBzZWxmLl9fb2Zmc2V0ID0gb2Zmc2V0CiAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKE5vdEVub3VnaCwgdHppbmZvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTm90RW5vdWdoLCB0emluZm8pKQogICAgICAgICBuZSA9IE5vdEVub3VnaCgzLCAiTm90QnlBTG9uZ1Nob3QiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShuZSwgdHppbmZvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG5lLCB0emluZm8pCiAKICAgICAgICAgZHQgPSBkYXRldGltZS5ub3coKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBuZS50em5hbWUsIGR0KQpAQCAtOTAsNyArOTAsNyBAQAogCiAgICAgZGVmIHRlc3Rfbm9ybWFsKHNlbGYpOgogICAgICAgICBmbyA9IEZpeGVkT2Zmc2V0KDMsICJUaHJlZSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKGZvLCB0emluZm8pKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZm8sIHR6aW5mbykKICAgICAgICAgZm9yIGR0IGluIGRhdGV0aW1lLm5vdygpLCBOb25lOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby51dGNvZmZzZXQoZHQpLCB0aW1lZGVsdGEobWludXRlcz0zKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8udHpuYW1lKGR0KSwgIlRocmVlIikKQEAgLTEwMSwyNSArMTAxLDI1IEBACiAgICAgICAgICMgY2Fycnkgbm8gZGF0YSksIGJ1dCB0aGV5IG5lZWQgdG8gYmUgcGlja2xhYmxlIGFueXdheSBlbHNlCiAgICAgICAgICMgY29uY3JldGUgc3ViY2xhc3NlcyBjYW4ndCBiZSBwaWNrbGVkLgogICAgICAgICBvcmlnID0gdHppbmZvLl9fbmV3X18odHppbmZvKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShvcmlnKSBpcyB0emluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKG9yaWcpIGlzIHR6aW5mbykKICAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CiAgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCiAgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoZGVyaXZlZCkgaXMgdHppbmZvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZGVyaXZlZCkgaXMgdHppbmZvKQogCiAgICAgZGVmIHRlc3RfcGlja2xpbmdfc3ViY2xhc3Moc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHdlIGNhbiBwaWNrbGUvdW5waWNrbGUgYW4gaW5zdGFuY2Ugb2YgYSBzdWJjbGFzcy4KICAgICAgICAgb2Zmc2V0ID0gdGltZWRlbHRhKG1pbnV0ZXM9LTMwMCkKICAgICAgICAgb3JpZyA9IFBpY2tsYWJsZUZpeGVkT2Zmc2V0KG9mZnNldCwgJ2Nvb2tpZScpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKG9yaWcsIHR6aW5mbykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKG9yaWcpIGlzIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3JpZywgdHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShvcmlnKSBpcyBQaWNrbGFibGVGaXhlZE9mZnNldCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLnV0Y29mZnNldChOb25lKSwgb2Zmc2V0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcudHpuYW1lKE5vbmUpLCAnY29va2llJykKICAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CiAgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCiAgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoZGVyaXZlZCwgdHppbmZvKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGRlcml2ZWQpIGlzIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRlcml2ZWQsIHR6aW5mbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGRlcml2ZWQpIGlzIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnV0Y29mZnNldChOb25lKSwgb2Zmc2V0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnR6bmFtZShOb25lKSwgJ2Nvb2tpZScpCiAKQEAgLTEzNiwxNiArMTM2LDEzIEBACiAgICAgZGVmIHRlc3RfaGFybWxlc3NfbWl4ZWRfY29tcGFyaXNvbihzZWxmKToKICAgICAgICAgbWUgPSBzZWxmLnRoZWNsYXNzKDEsIDEsIDEpCiAKLSAgICAgICAgc2VsZi5mYWlsSWYobWUgPT0gKCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtZSAhPSAoKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoKCkgPT0gbWUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygoKSAhPSBtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZSA9PSAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1lICE9ICgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCgpID09IG1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKCkgIT0gbWUpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1lIGluIFsxLCAyMEwsIFtdLCBtZV0pCi0gICAgICAgIHNlbGYuZmFpbElmKG1lIG5vdCBpbiBbMSwgMjBMLCBbXSwgbWVdKQotCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhbXSBpbiBbbWUsIDEsIDIwTCwgW11dKQotICAgICAgICBzZWxmLmZhaWxJZihbXSBub3QgaW4gW21lLCAxLCAyMEwsIFtdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtZSwgWzEsIDIwTCwgW10sIG1lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihbXSwgW21lLCAxLCAyMEwsIFtdXSkKIAogICAgIGRlZiB0ZXN0X2hhcm1mdWxfbWl4ZWRfY29tcGFyaXNvbihzZWxmKToKICAgICAgICAgbWUgPSBzZWxmLnRoZWNsYXNzKDEsIDEsIDEpCkBAIC0yNjYsNiArMjYzLDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2Vjb25kcywgc2Vjb25kcykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5taWNyb3NlY29uZHMsIHVzKQogCisgICAgZGVmIHRlc3RfdG90YWxfc2Vjb25kcyhzZWxmKToKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEoZGF5cz0zNjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQudG90YWxfc2Vjb25kcygpLCAzMTUzNjAwMC4wKQorICAgICAgICBmb3IgdG90YWxfc2Vjb25kcyBpbiBbMTIzNDU2Ljc4OTAxMiwgLTEyMzQ1Ni43ODkwMTIsIDAuMTIzNDU2LCAwLCAxZTZdOgorICAgICAgICAgICAgdGQgPSB0aW1lZGVsdGEoc2Vjb25kcz10b3RhbF9zZWNvbmRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC50b3RhbF9zZWNvbmRzKCksIHRvdGFsX3NlY29uZHMpCisgICAgICAgICMgSXNzdWU4NjQ0OiBUZXN0IHRoYXQgdGQudG90YWxfc2Vjb25kcygpIGhhcyB0aGUgc2FtZQorICAgICAgICAjIGFjY3VyYWN5IGFzIHRkIC8gdGltZWRlbHRhKHNlY29uZHM9MSkuCisgICAgICAgIGZvciBtcyBpbiBbLTEsIC0yLCAtMTIzXToKKyAgICAgICAgICAgIHRkID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz1tcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQudG90YWxfc2Vjb25kcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKDI0KjM2MDAqdGQuZGF5cyArIHRkLnNlY29uZHMpKjEwKio2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRkLm1pY3Jvc2Vjb25kcykvMTAqKjYpCisKICAgICBkZWYgdGVzdF9jYXJyaWVzKHNlbGYpOgogICAgICAgICB0MSA9IHRpbWVkZWx0YShkYXlzPTEwMCwKICAgICAgICAgICAgICAgICAgICAgICAgd2Vla3M9LTcsCkBAIC0zMDcsMjkgKzMxOCwyOSBAQAogICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6CiAgICAgICAgIHQxID0gdGltZWRlbHRhKDIsIDMsIDQpCiAgICAgICAgIHQyID0gdGltZWRlbHRhKDIsIDMsIDQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA9PSB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDw9IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPj0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgIT0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPCB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA+IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID49IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxICE9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMCkKIAogICAgICAgICBmb3IgYXJncyBpbiAoMywgMywgMyksICgyLCA0LCA0KSwgKDIsIDMsIDUpOgogICAgICAgICAgICAgdDIgPSB0aW1lZGVsdGEoKmFyZ3MpICAgIyB0aGlzIGlzIGxhcmdlciB0aGFuIHQxCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPCB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MiA+IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDw9IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQyID49IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxICE9IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQyICE9IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA9PSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDIgPT0gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxID4gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQyIDwgdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxID49IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MiA8PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPj0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgIT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgIT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID09IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA9PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPCB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPj0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDw9IHQxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgLTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MiwgdDEpLCAxKQogCkBAIC0zNzcsNyArMzg4LDcgQEAKIAogICAgICAgICAgICAgIyBWZXJpZnkgdGQgLT4gc3RyaW5nIC0+IHRkIGlkZW50aXR5LgogICAgICAgICAgICAgcyA9IHJlcHIodGQpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5zdGFydHN3aXRoKCdkYXRldGltZS4nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQogICAgICAgICAgICAgcyA9IHNbOTpdCiAgICAgICAgICAgICB0ZDIgPSBldmFsKHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLCB0ZDIpCkBAIC0zODcsMTAgKzM5OCwxMCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZCwgdGQyKQogCiAgICAgZGVmIHRlc3RfcmVzb2x1dGlvbl9pbmZvKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh0aW1lZGVsdGEubWluLCB0aW1lZGVsdGEpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh0aW1lZGVsdGEubWF4LCB0aW1lZGVsdGEpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh0aW1lZGVsdGEucmVzb2x1dGlvbiwgdGltZWRlbHRhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRpbWVkZWx0YS5tYXggPiB0aW1lZGVsdGEubWluKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGltZWRlbHRhLm1pbiwgdGltZWRlbHRhKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGltZWRlbHRhLm1heCwgdGltZWRlbHRhKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGltZWRlbHRhLnJlc29sdXRpb24sIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YS5tYXggPiB0aW1lZGVsdGEubWluKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVkZWx0YS5taW4sIHRpbWVkZWx0YSgtOTk5OTk5OTk5KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lZGVsdGEubWF4LCB0aW1lZGVsdGEoOTk5OTk5OTk5LCAyNCozNjAwLTEsIDFlNi0xKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lZGVsdGEucmVzb2x1dGlvbiwgdGltZWRlbHRhKDAsIDAsIDEpKQpAQCAtNDM3LDExICs0NDgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoLTEsIDI0KjM2MDAtMSwgOTk5OTk5KSkKIAogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0aW1lZGVsdGEoMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0aW1lZGVsdGEoMCwgMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0aW1lZGVsdGEoMCwgMCwgMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0aW1lZGVsdGEobWljcm9zZWNvbmRzPTEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHRpbWVkZWx0YSgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YSgwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YSgwLCAwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YShtaWNyb3NlY29uZHM9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdGltZWRlbHRhKDApKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NfdGltZWRlbHRhKHNlbGYpOgogCkBAIC00NTcsMTcgKzQ2OCwxNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiByb3VuZChzdW0pCiAKICAgICAgICAgdDEgPSBUKGRheXM9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodDEpIGlzIFQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQxKSBpcyBUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLmFzX2hvdXJzKCksIDI0KQogCiAgICAgICAgIHQyID0gVChkYXlzPS0xLCBzZWNvbmRzPS0zNjAwKQotICAgICAgICBzZWxmLmFzc2VydF8odHlwZSh0MikgaXMgVCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodDIpIGlzIFQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuYXNfaG91cnMoKSwgLTI1KQogCiAgICAgICAgIHQzID0gdDEgKyB0MgotICAgICAgICBzZWxmLmFzc2VydF8odHlwZSh0MykgaXMgdGltZWRlbHRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0MykgaXMgdGltZWRlbHRhKQogICAgICAgICB0NCA9IFQuZnJvbV90ZCh0MykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodDQpIGlzIFQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQ0KSBpcyBUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLmRheXMsIHQ0LmRheXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMuc2Vjb25kcywgdDQuc2Vjb25kcykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My5taWNyb3NlY29uZHMsIHQ0Lm1pY3Jvc2Vjb25kcykKQEAgLTUzMCw3ICs1NDEsNyBAQAogICAgICAgICAgICAgICAgICAgIHNlbGYudGhlY2xhc3MudG9kYXkoKSk6CiAgICAgICAgICAgICAjIFZlcmlmeSBkdCAtPiBzdHJpbmcgLT4gZGF0ZSBpZGVudGl0eS4KICAgICAgICAgICAgIHMgPSByZXByKGR0KQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuc3RhcnRzd2l0aCgnZGF0ZXRpbWUuJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCdkYXRldGltZS4nKSkKICAgICAgICAgICAgIHMgPSBzWzk6XQogICAgICAgICAgICAgZHQyID0gZXZhbChzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZHQyKQpAQCAtNzY1LDcgKzc3Niw3IEBACiAKICAgICAgICAgIyBJdCB3b3JrZWQgb3IgaXQgZGlkbid0LiAgSWYgaXQgZGlkbid0LCBhc3N1bWUgaXQncyByZWFzb24gIzIsIGFuZAogICAgICAgICAjIGxldCB0aGUgdGVzdCBwYXNzIGlmIHRoZXkncmUgd2l0aGluIGhhbGYgYSBzZWNvbmQgb2YgZWFjaCBvdGhlci4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHRvZGF5ID09IHRvZGF5YWdhaW4gb3IKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRvZGF5ID09IHRvZGF5YWdhaW4gb3IKICAgICAgICAgICAgICAgICAgICAgICAgIGFicyh0b2RheWFnYWluIC0gdG9kYXkpIDwgdGltZWRlbHRhKHNlY29uZHM9MC41KSkKIAogICAgIGRlZiB0ZXN0X3dlZWtkYXkoc2VsZik6CkBAIC05MDIsMTAgKzkxMywxMCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oZm10KSwgJ0InKQogCiAgICAgZGVmIHRlc3RfcmVzb2x1dGlvbl9pbmZvKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1pbiwgc2VsZi50aGVjbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHNlbGYudGhlY2xhc3MubWF4LCBzZWxmLnRoZWNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5yZXNvbHV0aW9uLCB0aW1lZGVsdGEpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi50aGVjbGFzcy5tYXggPiBzZWxmLnRoZWNsYXNzLm1pbikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYudGhlY2xhc3MubWluLCBzZWxmLnRoZWNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5tYXgsIHNlbGYudGhlY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLnJlc29sdXRpb24sIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWF4ID4gc2VsZi50aGVjbGFzcy5taW4pCiAKICAgICBkZWYgdGVzdF9leHRyZW1lX3RpbWVkZWx0YShzZWxmKToKICAgICAgICAgYmlnID0gc2VsZi50aGVjbGFzcy5tYXggLSBzZWxmLnRoZWNsYXNzLm1pbgpAQCAtOTUzLDI5ICs5NjQsMjkgQEAKICAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgogICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMiwgMywgNCkKICAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKDIsIDMsIDQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA9PSB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDw9IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPj0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgIT0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPCB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA+IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID49IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxICE9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMCkKIAogICAgICAgICBmb3IgYXJncyBpbiAoMywgMywgMyksICgyLCA0LCA0KSwgKDIsIDMsIDUpOgogICAgICAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCphcmdzKSAgICMgdGhpcyBpcyBsYXJnZXIgdGhhbiB0MQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDwgdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgPiB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8PSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MiA+PSB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSAhPSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MiAhPSB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPT0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQyID09IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA+IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MiA8IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA+PSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDIgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID49IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyICE9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA9PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID49IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8PSB0MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIC0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMSkKIApAQCAtMTAyOSwxMyArMTA0MCwxMyBAQAogICAgICAgICB0aGVpciA9IENvbXBhcmFibGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChvdXIsIHRoZWlyKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodGhlaXIsIG91ciksIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvdXIgPT0gdGhlaXIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0aGVpciA9PSBvdXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXIgPT0gdGhlaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aGVpciA9PSBvdXIpCiAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICAjIEFsbCBkYXRlcyBhcmUgY29uc2lkZXJlZCB0cnVlLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi50aGVjbGFzcy5taW4pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLnRoZWNsYXNzLm1heCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWluKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50aGVjbGFzcy5tYXgpCiAKICAgICBkZWYgdGVzdF9zdHJmdGltZV9vdXRfb2ZfcmFuZ2Uoc2VsZik6CiAgICAgICAgICMgRm9yIG5hc3R5IHRlY2huaWNhbCByZWFzb25zLCB3ZSBjYW4ndCBoYW5kbGUgeWVhcnMgYmVmb3JlIDE5MDAuCkBAIC0xMTU4LDcgKzExNjksNyBAQAogICAgICAgICAgICAgICAgICAgIHNlbGYudGhlY2xhc3Mubm93KCkpOgogICAgICAgICAgICAgIyBWZXJpZnkgZHQgLT4gc3RyaW5nIC0+IGRhdGV0aW1lIGlkZW50aXR5LgogICAgICAgICAgICAgcyA9IHJlcHIoZHQpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5zdGFydHN3aXRoKCdkYXRldGltZS4nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQogICAgICAgICAgICAgcyA9IHNbOTpdCiAgICAgICAgICAgICBkdDIgPSBldmFsKHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBkdDIpCkBAIC0xMjMyLDcgKzEyNDMsNyBAQAogICAgICAgICBkdDIgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDEwLCAwLCAwKQogICAgICAgICBkdDMgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDksIDAsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQxLCBkdDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkdDIgPiBkdDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdDIgPiBkdDMpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgY29tcGFyaXNvbiBkb2Vzbid0IGZvcmdldCBtaWNyb3NlY29uZHMsIGFuZCBpc24ndCBkb25lCiAgICAgICAgICMgdmlhIGNvbXBhcmluZyBhIGZsb2F0IHRpbWVzdGFtcCAoYW4gSUVFRSBkb3VibGUgZG9lc24ndCBoYXZlIGVub3VnaApAQCAtMTI0Myw3ICsxMjU0LDcgQEAKICAgICAgICAgdXMgPSB0aW1lZGVsdGEobWljcm9zZWNvbmRzPTEpCiAgICAgICAgIGR0MiA9IGR0MSArIHVzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyIC0gZHQxLCB1cykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGR0MSA8IGR0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0MSA8IGR0MikKIAogICAgIGRlZiB0ZXN0X3N0cmZ0aW1lX3dpdGhfYmFkX3R6bmFtZV9yZXBsYWNlKHNlbGYpOgogICAgICAgICAjIHZlcmlmeSBvayBpZiB0emluZm8udHpuYW1lKCkucmVwbGFjZSgpIHJldHVybnMgYSBub24tc3RyaW5nCkBAIC0xNDIzLDEyICsxNDM0LDEyIEBACiAgICAgICAgIGFyZ3MgPSBbMjAwMCwgMTEsIDI5LCAyMCwgNTgsIDE2LCA5OTk5OThdCiAgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygqYXJncykKICAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPT0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8PSB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxID49IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxICE9IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxIDwgdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPiB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID09IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA8IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDApCiAKQEAgLTE0MzYsMTggKzE0NDcsMTggQEAKICAgICAgICAgICAgIG5ld2FyZ3MgPSBhcmdzWzpdCiAgICAgICAgICAgICBuZXdhcmdzW2ldID0gYXJnc1tpXSArIDEKICAgICAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygqbmV3YXJncykgICAjIHRoaXMgaXMgbGFyZ2VyIHRoYW4gdDEKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQyID4gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPD0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgPj0gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgIT0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgIT0gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxID09IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MiA9PSB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPiB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDIgPCB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPj0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQyIDw9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPiB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSAhPSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiAhPSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyID09IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPD0gdDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MSwgdDIpLCAtMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDEpCiAKQEAgLTE0ODAsOCArMTQ5MSw4IEBACiAgICAgZGVmIHRlc3RfbWljcm9zZWNvbmRfcm91bmRpbmcoc2VsZik6CiAgICAgICAgICMgVGVzdCB3aGV0aGVyIGZyb210aW1lc3RhbXAgInJvdW5kcyB1cCIgZmxvYXRzIHRoYXQgYXJlIGxlc3MKICAgICAgICAgIyB0aGFuIG9uZSBtaWNyb3NlY29uZCBzbWFsbGVyIHRoYW4gYW4gaW50ZWdlci4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKDAuOTk5OTk5OSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAoMC45OTk5OTk5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAoMSkpCiAKICAgICBkZWYgdGVzdF9pbnNhbmVfZnJvbXRpbWVzdGFtcChzZWxmKToKICAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBwbGF0Zm9ybSBtYXBzIHRpbWVfdCB0byBkb3VibGUsCkBAIC0xNTAwLDIxICsxNTExLDE2IEBACiAgICAgICAgIGZvciBpbnNhbmUgaW4gLTFlMjAwLCAxZTIwMDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MudXRjZnJvbXRpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2FuZSkKLQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIGRvZXNuJ3QgYWNjZXB0IG5lZ2F0aXZlIHRpbWVzdGFtcHMiKQogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2Zsb2F0X2Zyb210aW1lc3RhbXAoc2VsZik6Ci0gICAgICAgICMgV2luZG93cyBkb2Vzbid0IGFjY2VwdCBuZWdhdGl2ZSB0aW1lc3RhbXBzCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICMgVGhlIHJlc3VsdCBpcyB0ei1kZXBlbmRlbnQ7IGF0IGxlYXN0IHRlc3QgdGhhdCB0aGlzIGRvZXNuJ3QKICAgICAgICAgIyBmYWlsIChsaWtlIGl0IGRpZCBiZWZvcmUgYnVnIDE2NDY3Mjggd2FzIGZpeGVkKS4KICAgICAgICAgc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKC0xLjA1KQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3MgZG9lc24ndCBhY2NlcHQgbmVnYXRpdmUgdGltZXN0YW1wcyIpCiAgICAgZGVmIHRlc3RfbmVnYXRpdmVfZmxvYXRfdXRjZnJvbXRpbWVzdGFtcChzZWxmKToKLSAgICAgICAgIyBXaW5kb3dzIGRvZXNuJ3QgYWNjZXB0IG5lZ2F0aXZlIHRpbWVzdGFtcHMKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MudXRjZnJvbXRpbWVzdGFtcCgtMS4wNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZCwgc2VsZi50aGVjbGFzcygxOTY5LCAxMiwgMzEsIDIzLCA1OSwgNTgsIDk1MDAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi50aGVjbGFzcygxOTY5LCAxMiwgMzEsIDIzLCA1OSwgNTgsIDk1MDAwMCkpCiAKICAgICBkZWYgdGVzdF91dGNub3coc2VsZik6CiAgICAgICAgIGltcG9ydCB0aW1lCkBAIC0xNTI4LDcgKzE1MzQsNyBAQAogICAgICAgICAgICAgaWYgYWJzKGZyb21fdGltZXN0YW1wIC0gZnJvbV9ub3cpIDw9IHRvbGVyYW5jZToKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgIyBFbHNlIHRyeSBhZ2FpbiBhIGZldyB0aW1lcy4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGFicyhmcm9tX3RpbWVzdGFtcCAtIGZyb21fbm93KSA8PSB0b2xlcmFuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhYnMoZnJvbV90aW1lc3RhbXAgLSBmcm9tX25vdykgPD0gdG9sZXJhbmNlKQogCiAgICAgZGVmIHRlc3Rfc3RycHRpbWUoc2VsZik6CiAgICAgICAgIGltcG9ydCBfc3RycHRpbWUKQEAgLTE2OTcsNyArMTcwMyw3IEBACiAKICAgICAgICAgIyBWZXJpZnkgdCAtPiBzdHJpbmcgLT4gdGltZSBpZGVudGl0eS4KICAgICAgICAgcyA9IHJlcHIodCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuc3RhcnRzd2l0aCgnZGF0ZXRpbWUuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQogICAgICAgICBzID0gc1s5Ol0KICAgICAgICAgdDIgPSBldmFsKHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdDIpCkBAIC0xNzExLDEyICsxNzE3LDEyIEBACiAgICAgICAgIGFyZ3MgPSBbMSwgMiwgMywgNF0KICAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQogICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA9PSB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDw9IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPj0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgIT0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPCB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA+IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID49IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxICE9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMCkKIApAQCAtMTcyNCwxOCArMTczMCwxOCBAQAogICAgICAgICAgICAgbmV3YXJncyA9IGFyZ3NbOl0KICAgICAgICAgICAgIG5ld2FyZ3NbaV0gPSBhcmdzW2ldICsgMQogICAgICAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCpuZXdhcmdzKSAgICMgdGhpcyBpcyBsYXJnZXIgdGhhbiB0MQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDwgdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgPiB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8PSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MiA+PSB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSAhPSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MiAhPSB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPT0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQyID09IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA+IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MiA8IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA+PSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDIgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID49IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyICE9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA9PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID49IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8PSB0MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIC0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMSkKIApAQCAtMTg4OCwxMCArMTg5NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICIlcygyMywgMTUpIiAlIG5hbWUpCiAKICAgICBkZWYgdGVzdF9yZXNvbHV0aW9uX2luZm8oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHNlbGYudGhlY2xhc3MubWluLCBzZWxmLnRoZWNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5tYXgsIHNlbGYudGhlY2xhc3MpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzZWxmLnRoZWNsYXNzLnJlc29sdXRpb24sIHRpbWVkZWx0YSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnRoZWNsYXNzLm1heCA+IHNlbGYudGhlY2xhc3MubWluKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5taW4sIHNlbGYudGhlY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1heCwgc2VsZi50aGVjbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYudGhlY2xhc3MucmVzb2x1dGlvbiwgdGltZWRlbHRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50aGVjbGFzcy5tYXggPiBzZWxmLnRoZWNsYXNzLm1pbikKIAogICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgogICAgICAgICBhcmdzID0gMjAsIDU5LCAxNiwgNjQqKjIKQEAgLTE5MTEsMTIgKzE5MTcsMTIgQEAKIAogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CiAgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNscygxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNscygwLCAxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNscygwLCAwLCAxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNscygwLCAwLCAwLCAxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCBjbHMoMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgY2xzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbHMoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbHMoMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbHMoMCwgMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbHMoMCwgMCwgMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY2xzKDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNscygpKQogCiAgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKICAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwpAQCAtMjAxMyw3ICsyMDE5LDcgQEAKICAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiBwYXNzCiAgICAgICAgIGIgPSBCZXR0ZXJUcnkoKQogICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModC50emluZm8gaXMgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQudHppbmZvIGlzIGIpCiAKICAgICBkZWYgdGVzdF91dGNfb2Zmc2V0X291dF9vZl9ib3VuZHMoc2VsZik6CiAgICAgICAgIGNsYXNzIEVkZ3kodHppbmZvKToKQEAgLTIwNTIsOSArMjA1OCw5IEBACiAgICAgICAgIGZvciB0IGluIChjbHMoMSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICBjbHMoMSwgMSwgMSwgdHppbmZvPU5vbmUpLAogICAgICAgICAgICAgICAgICAgY2xzKDEsIDEsIDEsIHR6aW5mbz1DMSgpKSk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModC51dGNvZmZzZXQoKSBpcyBOb25lKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQuZHN0KCkgaXMgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0LnR6bmFtZSgpIGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC51dGNvZmZzZXQoKSBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZHN0KCkgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnR6bmFtZSgpIGlzIE5vbmUpCiAKICAgICAgICAgY2xhc3MgQzModHppbmZvKToKICAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXM9LTE0MzkpCkBAIC0yMTQ4LDcgKzIxNTQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWludXRlLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0LnR6aW5mbyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC50emluZm8gaXMgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3pvbmVzKHNlbGYpOgogICAgICAgICBlc3QgPSBGaXhlZE9mZnNldCgtMzAwLCAiRVNUIiwgMSkKQEAgLTIxNjMsMjUgKzIxNjksMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS50emluZm8sIGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi50emluZm8sIHV0YykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My50emluZm8sIG1ldCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQ0LnR6aW5mbyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDQudHppbmZvIGlzIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDUudHppbmZvLCB1dGMpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTMwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz02MCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0NC51dGNvZmZzZXQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDQudXRjb2Zmc2V0KCkgaXMgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0MS51dGNvZmZzZXQsICJubyBhcmdzIikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnR6bmFtZSgpLCAiRVNUIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi50em5hbWUoKSwgIlVUQyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudHpuYW1lKCksICJNRVQiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDQudHpuYW1lKCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LnR6bmFtZSgpIGlzIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdDEudHpuYW1lLCAibm8gYXJncyIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS5kc3QoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuZHN0KCksIHRpbWVkZWx0YShtaW51dGVzPS0yKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My5kc3QoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0NC5kc3QoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDQuZHN0KCkgaXMgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0MS5kc3QsICJubyBhcmdzIikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQyKSkKQEAgLTIyNTcsNyArMjI2Myw3IEBACiAgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCiAgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoZGVyaXZlZC50emluZm8sIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkZXJpdmVkLnR6aW5mbywgUGlja2xhYmxlRml4ZWRPZmZzZXQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPS0zMDApKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnR6bmFtZSgpLCAnY29va2llJykKIApAQCAtMjI2NiwyMCArMjI3MiwyMCBAQAogICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCiAKICAgICAgICAgdCA9IGNscygwLCB0emluZm89Rml4ZWRPZmZzZXQoLTMwMCwgIiIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCiAKICAgICAgICAgdCA9IGNscyg1LCB0emluZm89Rml4ZWRPZmZzZXQoLTMwMCwgIiIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCiAKICAgICAgICAgdCA9IGNscyg1LCB0emluZm89Rml4ZWRPZmZzZXQoMzAwLCAiIikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0KQogCiAgICAgICAgIHQgPSBjbHMoMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMjMqNjAgKyA1OSwgIiIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdCkKIAogICAgICAgICAjIE1vc3RseSBlbnN1cmluZyB0aGlzIGRvZXNuJ3Qgb3ZlcmZsb3cgaW50ZXJuYWxseS4KICAgICAgICAgdCA9IGNscygwLCB0emluZm89Rml4ZWRPZmZzZXQoMjMqNjAgKyA1OSwgIiIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCiAKICAgICAgICAgIyBCdXQgdGhpcyBzaG91bGQgeWllbGQgYSB2YWx1ZSBlcnJvciAtLSB0aGUgdXRjb2Zmc2V0IGlzIGJvZ3VzLgogICAgICAgICB0ID0gY2xzKDAsIHR6aW5mbz1GaXhlZE9mZnNldCgyNCo2MCwgIiIpKQpAQCAtMjMxMywxMyArMjMxOSwxMyBAQAogICAgICAgICAjIEVuc3VyZSB3ZSBjYW4gZ2V0IHJpZCBvZiBhIHR6aW5mby4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnR6bmFtZSgpLCAiKzEwMCIpCiAgICAgICAgIGJhc2UyID0gYmFzZS5yZXBsYWNlKHR6aW5mbz1Ob25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYmFzZTIudHppbmZvIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiYXNlMi50em5hbWUoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZTIudHppbmZvIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlMi50em5hbWUoKSBpcyBOb25lKQogCiAgICAgICAgICMgRW5zdXJlIHdlIGNhbiBhZGQgb25lLgogICAgICAgICBiYXNlMyA9IGJhc2UyLnJlcGxhY2UodHppbmZvPXoxMDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgYmFzZTMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiYXNlLnR6aW5mbyBpcyBiYXNlMy50emluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlLnR6aW5mbyBpcyBiYXNlMy50emluZm8pCiAKICAgICAgICAgIyBPdXQgb2YgYm91bmRzLgogICAgICAgICBiYXNlID0gY2xzKDEpCkBAIC0yMzU2LDcgKzIzNjIsNyBAQAogCiAgICAgICAgICMgQnV0IGlmIHRoZXkncmUgbm90IGlkZW50aWNhbCwgaXQgaXNuJ3QgaWdub3JlZC4KICAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1WYXJpZXMoKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDwgdDIpICAjIHQxJ3Mgb2Zmc2V0IGNvdW50ZXIgc3RpbGwgZ29pbmcgdXAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpICAjIHQxJ3Mgb2Zmc2V0IGNvdW50ZXIgc3RpbGwgZ29pbmcgdXAKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3RpbWV0eihzZWxmKToKIApAQCAtMjQxMiwxMiArMjQxOCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvPUZpeGVkT2Zmc2V0KC0xNDM5LCAiIikpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhvc2UgY29tcGFyZSBjb3JyZWN0bHksIGFuZCB3L28gb3ZlcmZsb3cuCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgIT0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MiA+IHQxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPiB0MSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPT0gdDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MiA9PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID09IHQxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPT0gdDIpCiAKICAgICAgICAgIyBFcXVhbCBhZmVyIGFkanVzdG1lbnQuCiAgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDEsICIiKSkKQEAgLTI0MjYsMjEgKzI0MzIsMjEgQEAKIAogICAgICAgICAjIENoYW5nZSB0MSBub3QgdG8gc3VidHJhY3QgYSBtaW51dGUsIGFuZCB0MSBzaG91bGQgYmUgbGFyZ2VyLgogICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMTIsIDMxLCAyMywgNTksIHR6aW5mbz1GaXhlZE9mZnNldCgwLCAiIikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA+IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPiB0MikKIAogICAgICAgICAjIENoYW5nZSB0MSB0byBzdWJ0cmFjdCAyIG1pbnV0ZXMsIGFuZCB0MSBzaG91bGQgYmUgc21hbGxlci4KICAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDEsIDEyLCAzMSwgMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMiwgIiIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCiAKICAgICAgICAgIyBCYWNrIHRvIHRoZSBvcmlnaW5hbCB0MSwgYnV0IG1ha2Ugc2Vjb25kcyByZXNvbHZlIGl0LgogICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMTIsIDMxLCAyMywgNTksIHR6aW5mbz1GaXhlZE9mZnNldCgxLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQ9MSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxID4gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+IHQyKQogCiAgICAgICAgICMgTGlrZXdpc2UsIGJ1dCBtYWtlIG1pY3Jvc2Vjb25kcyByZXNvbHZlIGl0LgogICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMTIsIDMxLCAyMywgNTksIHR6aW5mbz1GaXhlZE9mZnNldCgxLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZD0xKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPiB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID4gdDIpCiAKICAgICAgICAgIyBNYWtlIHQyIG5haXZlIGFuZCBpdCBzaG91bGQgZmFpbC4KICAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzLm1pbgpAQCAtMjQ4NCw4ICsyNDkwLDcgQEAKICAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKICAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShkZXJpdmVkLnR6aW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaWNrbGFibGVGaXhlZE9mZnNldCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGVyaXZlZC50emluZm8sIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMzAwKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC50em5hbWUoKSwgJ2Nvb2tpZScpCiAKQEAgLTI1NTUsNyArMjU2MCw3IEBACiAgICAgICAgIHR6NTUgPSBGaXhlZE9mZnNldCgtMzMwLCAid2VzdCA1OjMwIikKICAgICAgICAgdGltZWF3YXJlID0gbm93LnRpbWUoKS5yZXBsYWNlKHR6aW5mbz10ejU1KQogICAgICAgICBub3dhd2FyZSA9IHNlbGYudGhlY2xhc3MuY29tYmluZShub3cuZGF0ZSgpLCB0aW1lYXdhcmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3dhd2FyZS50emluZm8gaXMgdHo1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vd2F3YXJlLnR6aW5mbyBpcyB0ejU1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlLnRpbWV0eigpLCB0aW1lYXdhcmUpCiAKICAgICAgICAgIyBDYW4ndCBtaXggYXdhcmUgYW5kIG5vbi1hd2FyZS4KQEAgLTI1NzQsMTUgKzI1NzksMTUgQEAKICAgICAgICAgIyBBZGRpbmcgYSBkZWx0YSBzaG91bGQgcHJlc2VydmUgdHppbmZvLgogICAgICAgICBkZWx0YSA9IHRpbWVkZWx0YSh3ZWVrcz0xLCBtaW51dGVzPTEyLCBtaWNyb3NlY29uZHM9NTY3OCkKICAgICAgICAgbm93YXdhcmVwbHVzID0gbm93YXdhcmUgKyBkZWx0YQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm93YXdhcmUudHppbmZvIGlzIHR6NTUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3dhd2FyZS50emluZm8gaXMgdHo1NSkKICAgICAgICAgbm93YXdhcmVwbHVzMiA9IGRlbHRhICsgbm93YXdhcmUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vd2F3YXJlcGx1czIudHppbmZvIGlzIHR6NTUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3dhd2FyZXBsdXMyLnR6aW5mbyBpcyB0ejU1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlcGx1cywgbm93YXdhcmVwbHVzMikKIAogICAgICAgICAjIHRoYXQgLSBkZWx0YSBzaG91bGQgYmUgd2hhdCB3ZSBzdGFydGVkIHdpdGgsIGFuZCB0aGF0IC0gd2hhdCB3ZQogICAgICAgICAjIHN0YXJ0ZWQgd2l0aCBzaG91bGQgYmUgZGVsdGEuCiAgICAgICAgIGRpZmYgPSBub3dhd2FyZXBsdXMgLSBkZWx0YQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGlmZi50emluZm8gaXMgdHo1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpZmYudHppbmZvIGlzIHR6NTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm93YXdhcmUsIGRpZmYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBkZWx0YSAtIG5vd2F3YXJlcGx1cykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3dhd2FyZXBsdXMgLSBub3dhd2FyZSwgZGVsdGEpCkBAIC0yNTkxLDcgKzI1OTYsNyBAQAogICAgICAgICB0enIgPSBGaXhlZE9mZnNldChyYW5kb20ucmFuZHJhbmdlKC0xNDM5LCAxNDQwKSwgInJhbmRvbXRpbWV6b25lIikKICAgICAgICAgIyBBdHRhY2ggaXQgdG8gbm93YXdhcmVwbHVzLgogICAgICAgICBub3dhd2FyZXBsdXMgPSBub3dhd2FyZXBsdXMucmVwbGFjZSh0emluZm89dHpyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm93YXdhcmVwbHVzLnR6aW5mbyBpcyB0enIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3dhd2FyZXBsdXMudHppbmZvIGlzIHR6cikKICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpZmZlcmVuY2UgdGFrZXMgdGhlIHRpbWV6b25lIGFkanVzdG1lbnRzIGludG8gYWNjb3VudC4KICAgICAgICAgZ290ID0gbm93YXdhcmUgLSBub3dhd2FyZXBsdXMKICAgICAgICAgIyBFeHBlY3RlZDogIChub3dhd2FyZSBiYXNlIC0gbm93YXdhcmUgb2Zmc2V0KSAtCkBAIC0yNjE4LDcgKzI2MjMsNyBAQAogICAgICAgICBvZmY0MiA9IEZpeGVkT2Zmc2V0KDQyLCAiNDIiKQogICAgICAgICBhbm90aGVyID0gbWV0aChvZmY0MikKICAgICAgICAgYWdhaW4gPSBtZXRoKHR6PW9mZjQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYW5vdGhlci50emluZm8gaXMgYWdhaW4udHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW5vdGhlci50emluZm8gaXMgYWdhaW4udHppbmZvKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFub3RoZXIudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTQyKSkKICAgICAgICAgIyBCYWQgYXJndW1lbnQgd2l0aCBhbmQgdy9vIG5hbWluZyB0aGUga2V5d29yZC4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCAxNikKQEAgLTI2MzUsNyArMjY0MCw3IEBACiAgICAgICAgIHV0YyA9IEZpeGVkT2Zmc2V0KDAsICJ1dGMiLCAwKQogICAgICAgICBmb3IgZHVtbXkgaW4gcmFuZ2UoMyk6CiAgICAgICAgICAgICBub3cgPSBkYXRldGltZS5ub3cod2VpcmR0eikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3cudHppbmZvIGlzIHdlaXJkdHopCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm93LnR6aW5mbyBpcyB3ZWlyZHR6KQogICAgICAgICAgICAgdXRjbm93ID0gZGF0ZXRpbWUudXRjbm93KCkucmVwbGFjZSh0emluZm89dXRjKQogICAgICAgICAgICAgbm93MiA9IHV0Y25vdy5hc3RpbWV6b25lKHdlaXJkdHopCiAgICAgICAgICAgICBpZiBhYnMobm93IC0gbm93MikgPCB0aW1lZGVsdGEoc2Vjb25kcz0zMCk6CkBAIC0yNjU2LDcgKzI2NjEsNyBAQAogICAgICAgICBvZmY0MiA9IEZpeGVkT2Zmc2V0KDQyLCAiNDIiKQogICAgICAgICBhbm90aGVyID0gbWV0aCh0cywgb2ZmNDIpCiAgICAgICAgIGFnYWluID0gbWV0aCh0cywgdHo9b2ZmNDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhhbm90aGVyLnR6aW5mbyBpcyBhZ2Fpbi50emluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbm90aGVyLnR6aW5mbyBpcyBhZ2Fpbi50emluZm8pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5vdGhlci51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NDIpKQogICAgICAgICAjIEJhZCBhcmd1bWVudCB3aXRoIGFuZCB3L28gbmFtaW5nIHRoZSBrZXl3b3JkLgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHRzLCAxNikKQEAgLTI4NTAsMTMgKzI4NTUsMTMgQEAKICAgICAgICAgIyBFbnN1cmUgd2UgY2FuIGdldCByaWQgb2YgYSB0emluZm8uCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS50em5hbWUoKSwgIisxMDAiKQogICAgICAgICBiYXNlMiA9IGJhc2UucmVwbGFjZSh0emluZm89Tm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGJhc2UyLnR6aW5mbyBpcyBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYmFzZTIudHpuYW1lKCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UyLnR6aW5mbyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZTIudHpuYW1lKCkgaXMgTm9uZSkKIAogICAgICAgICAjIEVuc3VyZSB3ZSBjYW4gYWRkIG9uZS4KICAgICAgICAgYmFzZTMgPSBiYXNlMi5yZXBsYWNlKHR6aW5mbz16MTAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGJhc2UzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYmFzZS50emluZm8gaXMgYmFzZTMudHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZS50emluZm8gaXMgYmFzZTMudHppbmZvKQogCiAgICAgICAgICMgT3V0IG9mIGJvdW5kcy4KICAgICAgICAgYmFzZSA9IGNscygyMDAwLCAyLCAyOSkKQEAgLTI4NjksMjAgKzI4NzQsMjAgQEAKICAgICAgICAgZm01aCA9IEZpeGVkT2Zmc2V0KC10aW1lZGVsdGEoaG91cnM9NSksICJtMzAwIikKIAogICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3Mubm93KHR6PWY0NG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkdC50emluZm8gaXMgZjQ0bSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0LnR6aW5mbyBpcyBmNDRtKQogICAgICAgICAjIFJlcGxhY2luZyB3aXRoIGRlZ2VuZXJhdGUgdHppbmZvIHJhaXNlcyBhbiBleGNlcHRpb24uCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGR0LmFzdGltZXpvbmUsIGZub25lKQogICAgICAgICAjIERpdHRvIHdpdGggTm9uZSB0ei4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkdC5hc3RpbWV6b25lLCBOb25lKQogICAgICAgICAjIFJlcGxhY2luZyB3aXRoIHNhbWUgdHppbmZvIG1ha2VzIG5vIGNoYW5nZS4KICAgICAgICAgeCA9IGR0LmFzdGltZXpvbmUoZHQudHppbmZvKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoeC50emluZm8gaXMgZjQ0bSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHgudHppbmZvIGlzIGY0NG0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5kYXRlKCksIGR0LmRhdGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnRpbWUoKSwgZHQudGltZSgpKQogCiAgICAgICAgICMgUmVwbGFjaW5nIHdpdGggZGlmZmVyZW50IHR6aW5mbyBkb2VzIGFkanVzdC4KICAgICAgICAgZ290ID0gZHQuYXN0aW1lem9uZShmbTVoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZ290LnR6aW5mbyBpcyBmbTVoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ290LnR6aW5mbyBpcyBmbTVoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKGhvdXJzPS01KSkKICAgICAgICAgZXhwZWN0ZWQgPSBkdCAtIGR0LnV0Y29mZnNldCgpICAjIGluIGVmZmVjdCwgY29udmVydCB0byBVVEMKICAgICAgICAgZXhwZWN0ZWQgKz0gZm01aC51dGNvZmZzZXQoZHQpICAjIGFuZCBmcm9tIHRoZXJlIHRvIGxvY2FsIHRpbWUKQEAgLTI4OTAsNyArMjg5NSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LmRhdGUoKSwgZXhwZWN0ZWQuZGF0ZSgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdC50aW1lKCksIGV4cGVjdGVkLnRpbWUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QudGltZXR6KCksIGV4cGVjdGVkLnRpbWV0eigpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZ290LnR6aW5mbyBpcyBleHBlY3RlZC50emluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnb3QudHppbmZvIGlzIGV4cGVjdGVkLnR6aW5mbykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfYXdhcmVfc3VidHJhY3Qoc2VsZik6CkBAIC0yOTY1LDcgKzI5NzAsNyBAQAogCiAgICAgICAgICMgQnV0IGlmIHRoZXkncmUgbm90IGlkZW50aWNhbCwgaXQgaXNuJ3QgaWdub3JlZC4KICAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1WYXJpZXMoKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDwgdDIpICAjIHQxJ3Mgb2Zmc2V0IGNvdW50ZXIgc3RpbGwgZ29pbmcgdXAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpICAjIHQxJ3Mgb2Zmc2V0IGNvdW50ZXIgc3RpbGwgZ29pbmcgdXAKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2RhdGV0aW1ldHooc2VsZik6CiAKQEAgLTMzMTYsMTAgKzMzMjEsMTAgQEAKICAgICAgICAgIyB0eXBlIGNvbXBhcmlzb24sIGRlc3BpdGUgdGhhdCBkYXRldGltZSBpcyBhIHN1YmNsYXNzIG9mIGRhdGUuCiAgICAgICAgIGFzX2RhdGUgPSBkYXRlLnRvZGF5KCkKICAgICAgICAgYXNfZGF0ZXRpbWUgPSBkYXRldGltZS5jb21iaW5lKGFzX2RhdGUsIHRpbWUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGFzX2RhdGUgIT0gYXNfZGF0ZXRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhhc19kYXRldGltZSAhPSBhc19kYXRlKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGFzX2RhdGUgPT0gYXNfZGF0ZXRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgYXNfZGF0ZXRpbWUgPT0gYXNfZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzX2RhdGUgIT0gYXNfZGF0ZXRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc19kYXRldGltZSAhPSBhc19kYXRlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGFzX2RhdGUgPT0gYXNfZGF0ZXRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYXNfZGF0ZXRpbWUgPT0gYXNfZGF0ZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGUgPCBhc19kYXRldGltZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGV0aW1lIDwgYXNfZGF0ZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGUgPD0gYXNfZGF0ZXRpbWUpCkBAIC0zMzMxLDkgKzMzMzYsOSBAQAogCiAgICAgICAgICMgTmV2ZXJ0aGVsc3MsIGNvbXBhcmlzb24gc2hvdWxkIHdvcmsgd2l0aCB0aGUgYmFzZS1jbGFzcyAoZGF0ZSkKICAgICAgICAgIyBwcm9qZWN0aW9uIGlmIHVzZSBvZiBhIGRhdGUgbWV0aG9kIGlzIGZvcmNlZC4KLSAgICAgICAgc2VsZi5hc3NlcnRfKGFzX2RhdGUuX19lcV9fKGFzX2RhdGV0aW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzX2RhdGUuX19lcV9fKGFzX2RhdGV0aW1lKSkKICAgICAgICAgZGlmZmVyZW50X2RheSA9IChhc19kYXRlLmRheSArIDEpICUgMjAgKyAxCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgYXNfZGF0ZS5fX2VxX18oYXNfZGF0ZXRpbWUucmVwbGFjZShkYXk9CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYXNfZGF0ZS5fX2VxX18oYXNfZGF0ZXRpbWUucmVwbGFjZShkYXk9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudF9kYXkpKSkKIAogICAgICAgICAjIEFuZCBkYXRlIHNob3VsZCBjb21wYXJlIHdpdGggb3RoZXIgc3ViY2xhc3NlcyBvZiBkYXRlLiAgSWYgYQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kYm0ucHkgYi9MaWIvdGVzdC90ZXN0X2RibS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDA1NDFmODYuLjQxYjBiNWMKLS0tIGEvTGliL3Rlc3QvdGVzdF9kYm0ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm0ucHkKQEAgLTEsNiArMSw2IEBACiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgZGJtCitkYm0gPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnZGJtJykKIAogY2xhc3MgRGJtVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yMSw5ICsyMSw5IEBACiAgICAgICAgICAgICBzZWxmLmRba10gPSB2CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHNlbGYuZC5rZXlzKCkpLCBzb3J0ZWQoayBmb3IgKGssIHYpIGluIGEpKQogICAgICAgICBmb3IgaywgdiBpbiBhOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGsgaW4gc2VsZi5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBzZWxmLmQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZFtrXSwgdikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCd4eHgnIG5vdCBpbiBzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3h4eCcsIHNlbGYuZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5kWyd4eHgnXSkKICAgICAgICAgc2VsZi5kLmNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5IGIvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CmluZGV4IDQxNzY3YzMuLmRjMjE3NzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKQEAgLTI0LDE1ICsyNCwxNSBAQAogd2l0aCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudC4KICIiIgogCi1pbXBvcnQgZ2xvYgogaW1wb3J0IG1hdGgKIGltcG9ydCBvcywgc3lzCitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBwaWNrbGUsIGNvcHkKIGltcG9ydCB1bml0dGVzdAogZnJvbSBkZWNpbWFsIGltcG9ydCAqCiBpbXBvcnQgbnVtYmVycwotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKFRlc3RTa2lwcGVkLCBydW5fdW5pdHRlc3QsIHJ1bl9kb2N0ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3Jlc291cmNlX2VuYWJsZWQsIF9jaGVja19weTNrX3dhcm5pbmdzKQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgcnVuX2RvY3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcmVzb3VyY2VfZW5hYmxlZCwgY2hlY2tfcHkza193YXJuaW5ncykKIGltcG9ydCByYW5kb20KIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCkBAIC02MCw2ICs2MCwxMSBAQAogICAgICAgICApCiAgICAgc2V0Y29udGV4dChEZWZhdWx0VGVzdENvbnRleHQpCiAKKyMgZGVjb3JhdG9yIGZvciBza2lwcGluZyB0ZXN0cyBvbiBub24tSUVFRSA3NTQgcGxhdGZvcm1zCityZXF1aXJlc19JRUVFXzc1NCA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoCisgICAgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorCiBURVNUREFUQURJUiA9ICdkZWNpbWFsdGVzdGRhdGEnCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGZpbGUgPSBzeXMuYXJndlswXQpAQCAtMjE3LDE2ICsyMjIsMTcgQEAKICAgICBkZWYgZXZhbF9maWxlKHNlbGYsIGZpbGUpOgogICAgICAgICBnbG9iYWwgc2tpcF9leHBlY3RlZAogICAgICAgICBpZiBza2lwX2V4cGVjdGVkOgotICAgICAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZm9yIGxpbmUgaW4gb3BlbihmaWxlKToKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoJ1xyXG4nLCAnJykucmVwbGFjZSgnXG4nLCAnJykKLSAgICAgICAgICAgICNwcmludCBsaW5lCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdCA9IHNlbGYuZXZhbF9saW5lKGxpbmUpCi0gICAgICAgICAgICBleGNlcHQgRGVjaW1hbEV4Y2VwdGlvbiwgZXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICNFeGNlcHRpb24gcmFpc2VkIHdoZXJlIHRoZXJlIHNob3Vkbid0IGhhdmUgYmVlbiBvbmUuCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdFeGNlcHRpb24gIicrZXhjZXB0aW9uLl9fY2xhc3NfXy5fX25hbWVfXyArICciIHJhaXNlZCBvbiBsaW5lICcrbGluZSkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGUpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoJ1xyXG4nLCAnJykucmVwbGFjZSgnXG4nLCAnJykKKyAgICAgICAgICAgICAgICAjcHJpbnQgbGluZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdCA9IHNlbGYuZXZhbF9saW5lKGxpbmUpCisgICAgICAgICAgICAgICAgZXhjZXB0IERlY2ltYWxFeGNlcHRpb24gYXMgZXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAjRXhjZXB0aW9uIHJhaXNlZCB3aGVyZSB0aGVyZSBzaG91ZG4ndCBoYXZlIGJlZW4gb25lLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4Y2VwdGlvbiAiJytleGNlcHRpb24uX19jbGFzc19fLl9fbmFtZV9fICsgJyIgcmFpc2VkIG9uIGxpbmUgJytsaW5lKQogCiAgICAgICAgIHJldHVybgogCkBAIC0zODEsMTMgKzM4Nyw5IEBACiAgICAgICAgIG15ZXhjZXB0aW9ucyA9IHNlbGYuZ2V0ZXhjZXB0aW9ucygpCiAgICAgICAgIHNlbGYuY29udGV4dC5jbGVhcl9mbGFncygpCiAKLSAgICAgICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncyhxdWlldD1UcnVlKToKLSAgICAgICAgICAgIG15ZXhjZXB0aW9ucy5zb3J0KCkKLSAgICAgICAgICAgIHRoZWlyZXhjZXB0aW9ucy5zb3J0KCkKLQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgYW5zLAogICAgICAgICAgICAgICAgICAgICAgICAgICdJbmNvcnJlY3QgYW5zd2VyIGZvciAnICsgcyArICcgLS0gZ290ICcgKyByZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlleGNlcHRpb25zLCB0aGVpcmV4Y2VwdGlvbnMsCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChteWV4Y2VwdGlvbnMsIHRoZWlyZXhjZXB0aW9ucywKICAgICAgICAgICAgICAgJ0luY29ycmVjdCBmbGFncyBzZXQgaW4gJyArIHMgKyAnIC0tIGdvdCAnICsgc3RyKG15ZXhjZXB0aW9ucykpCiAgICAgICAgIHJldHVybgogCkBAIC01MDAsNiArNTAyLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERlY2ltYWwsICgxLCAoNCwgMTAsIDQsIDksIDEpLCAyKSApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERlY2ltYWwsICgxLCAoNCwgMywgNCwgJ2EnLCAxKSwgMikgKQogCisgICAgZGVmIHRlc3RfZXhwbGljaXRfZnJvbV9ib29sKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woRGVjaW1hbCgwKSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woRGVjaW1hbCgxKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbChGYWxzZSksIERlY2ltYWwoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbChUcnVlKSwgRGVjaW1hbCgxKSkKKwogICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2Zyb21fRGVjaW1hbChzZWxmKToKIAogICAgICAgICAjcG9zaXRpdmUKQEAgLTUyNiw2ICs1MzQsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICcwJykKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCiAKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9mcm9tX2Zsb2F0KHNlbGYpOgorICAgICAgICByID0gRGVjaW1hbCgwLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyKSwgRGVjaW1hbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIociksCisgICAgICAgICAgICAgICAgJzAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1NzgyNzAyMTE4MTU4MzQwNDU0MTAxNTYyNScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEZWNpbWFsKGZsb2F0KCduYW4nKSkuaXNfcW5hbigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbChmbG9hdCgnaW5mJykpLmlzX2luZmluaXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEZWNpbWFsKGZsb2F0KCctaW5mJykpLmlzX2luZmluaXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoZmxvYXQoJ25hbicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJ05hTicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbChmbG9hdCgnaW5mJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnSW5maW5pdHknKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoZmxvYXQoJy1pbmYnKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihEZWNpbWFsKCctSW5maW5pdHknKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoZmxvYXQoJy0wLjAnKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihEZWNpbWFsKCctMCcpKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjAwKToKKyAgICAgICAgICAgIHggPSByYW5kb20uZXhwb3ZhcmlhdGUoMC4wMSkgKiAocmFuZG9tLnJhbmRvbSgpICogMi4wIC0gMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBmbG9hdChEZWNpbWFsKHgpKSkgIyByb3VuZHRyaXAKKwogICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2NvbnRleHRfY3JlYXRlX2RlY2ltYWwoc2VsZik6CiAKICAgICAgICAgbmMgPSBjb3B5LmNvcHkoZ2V0Y29udGV4dCgpKQpAQCAtNTQyLDcgKzU3MSw3IEBACiAKICAgICAgICAgIyBmcm9tIGludAogICAgICAgICBkID0gbmMuY3JlYXRlX2RlY2ltYWwoNDU2KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShkLCBEZWNpbWFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQsIERlY2ltYWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmMuY3JlYXRlX2RlY2ltYWwoNDU2NzgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5jLmNyZWF0ZV9kZWNpbWFsKCc0NTdFKzInKSkKIApAQCAtNjM4LDcgKzY2Nyw3IEBACiAgICAgICAgICAgICAoJy8vJywgJ19fZmxvb3JkaXZfXycsICdfX3JmbG9vcmRpdl9fJyksCiAgICAgICAgICAgICAoJyoqJywgJ19fcG93X18nLCAnX19ycG93X18nKQogICAgICAgICBdCi0gICAgICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBpZiAxIC8gMiA9PSAwOgogICAgICAgICAgICAgICAgICMgdGVzdGluZyB3aXRoIGNsYXNzaWMgZGl2aXNpb24sIHNvIGFkZCBfX2Rpdl9fCiAgICAgICAgICAgICAgICAgb3BsaXN0LmFwcGVuZCgoJy8nLCAnX19kaXZfXycsICdfX3JkaXZfXycpKQpAQCAtNjU0LDYgKzY4Myw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ0RlY2ltYWwoMTApJyArIHN5bSArICdFKCknKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwJyArIHJvcCArICdzdHInKQogCisKIGNsYXNzIERlY2ltYWxGb3JtYXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAnJydVbml0IHRlc3RzIGZvciB0aGUgZm9ybWF0IGZ1bmN0aW9uLicnJwogICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmcoc2VsZik6CkBAIC03NDMsMTEgKzc3Myw1NiBAQAogCiAgICAgICAgICAgICAoJycsICcxLjAwJywgJzEuMDAnKSwKIAotICAgICAgICAgICAgIyBjaGVjayBhbGlnbm1lbnQKKyAgICAgICAgICAgICMgdGVzdCBhbGlnbm1lbnQgYW5kIHBhZGRpbmcKKyAgICAgICAgICAgICgnNicsICcxMjMnLCAnICAgMTIzJyksCiAgICAgICAgICAgICAoJzw2JywgJzEyMycsICcxMjMgICAnKSwKICAgICAgICAgICAgICgnPjYnLCAnMTIzJywgJyAgIDEyMycpLAogICAgICAgICAgICAgKCdeNicsICcxMjMnLCAnIDEyMyAgJyksCiAgICAgICAgICAgICAoJz0rNicsICcxMjMnLCAnKyAgMTIzJyksCisgICAgICAgICAgICAoJyM8MTAnLCAnTmFOJywgJ05hTiMjIyMjIyMnKSwKKyAgICAgICAgICAgICgnIzwxMCcsICctNC4zJywgJy00LjMjIyMjIyMnKSwKKyAgICAgICAgICAgICgnIzwrMTAnLCAnMC4wMTMwJywgJyswLjAxMzAjIyMnKSwKKyAgICAgICAgICAgICgnIzwgMTAnLCAnMC4wMTMwJywgJyAwLjAxMzAjIyMnKSwKKyAgICAgICAgICAgICgnQD4xMCcsICctSW5mJywgJ0AtSW5maW5pdHknKSwKKyAgICAgICAgICAgICgnIz41JywgJy1JbmYnLCAnLUluZmluaXR5JyksCisgICAgICAgICAgICAoJz9eNScsICcxMjMnLCAnPzEyMz8nKSwKKyAgICAgICAgICAgICgnJV42JywgJzEyMycsICclMTIzJSUnKSwKKyAgICAgICAgICAgICgnIF42JywgJy00NS42JywgJy00NS42ICcpLAorICAgICAgICAgICAgKCcvPTEwJywgJy00NS42JywgJy0vLy8vLzQ1LjYnKSwKKyAgICAgICAgICAgICgnLz0rMTAnLCAnNDUuNicsICcrLy8vLy80NS42JyksCisgICAgICAgICAgICAoJy89IDEwJywgJzQ1LjYnLCAnIC8vLy8vNDUuNicpLAorCisgICAgICAgICAgICAjIHRob3VzYW5kcyBzZXBhcmF0b3IKKyAgICAgICAgICAgICgnLCcsICcxMjM0NTY3JywgJzEsMjM0LDU2NycpLAorICAgICAgICAgICAgKCcsJywgJzEyMzQ1NicsICcxMjMsNDU2JyksCisgICAgICAgICAgICAoJywnLCAnMTIzNDUnLCAnMTIsMzQ1JyksCisgICAgICAgICAgICAoJywnLCAnMTIzNCcsICcxLDIzNCcpLAorICAgICAgICAgICAgKCcsJywgJzEyMycsICcxMjMnKSwKKyAgICAgICAgICAgICgnLCcsICcxMicsICcxMicpLAorICAgICAgICAgICAgKCcsJywgJzEnLCAnMScpLAorICAgICAgICAgICAgKCcsJywgJzAnLCAnMCcpLAorICAgICAgICAgICAgKCcsJywgJy0xMjM0NTY3JywgJy0xLDIzNCw1NjcnKSwKKyAgICAgICAgICAgICgnLCcsICctMTIzNDU2JywgJy0xMjMsNDU2JyksCisgICAgICAgICAgICAoJzcsJywgJzEyMzQ1NicsICcxMjMsNDU2JyksCisgICAgICAgICAgICAoJzgsJywgJzEyMzQ1NicsICcgMTIzLDQ1NicpLAorICAgICAgICAgICAgKCcwOCwnLCAnMTIzNDU2JywgJzAsMTIzLDQ1NicpLCAjIHNwZWNpYWwgY2FzZTogZXh0cmEgMCBuZWVkZWQKKyAgICAgICAgICAgICgnKzA4LCcsICcxMjM0NTYnLCAnKzEyMyw0NTYnKSwgIyBidXQgbm90IGlmIHRoZXJlJ3MgYSBzaWduCisgICAgICAgICAgICAoJyAwOCwnLCAnMTIzNDU2JywgJyAxMjMsNDU2JyksCisgICAgICAgICAgICAoJzA4LCcsICctMTIzNDU2JywgJy0xMjMsNDU2JyksCisgICAgICAgICAgICAoJyswOSwnLCAnMTIzNDU2JywgJyswLDEyMyw0NTYnKSwKKyAgICAgICAgICAgICMgLi4uIHdpdGggZnJhY3Rpb25hbCBwYXJ0Li4uCisgICAgICAgICAgICAoJzA3LCcsICcxMjM0LjU2JywgJzEsMjM0LjU2JyksCisgICAgICAgICAgICAoJzA4LCcsICcxMjM0LjU2JywgJzEsMjM0LjU2JyksCisgICAgICAgICAgICAoJzA5LCcsICcxMjM0LjU2JywgJzAxLDIzNC41NicpLAorICAgICAgICAgICAgKCcwMTAsJywgJzEyMzQuNTYnLCAnMDAxLDIzNC41NicpLAorICAgICAgICAgICAgKCcwMTEsJywgJzEyMzQuNTYnLCAnMCwwMDEsMjM0LjU2JyksCisgICAgICAgICAgICAoJzAxMiwnLCAnMTIzNC41NicsICcwLDAwMSwyMzQuNTYnKSwKKyAgICAgICAgICAgICgnMDgsLjFmJywgJzEyMzQuNScsICcwMSwyMzQuNScpLAorICAgICAgICAgICAgIyBubyB0aG91c2FuZHMgc2VwYXJhdG9ycyBpbiBmcmFjdGlvbiBwYXJ0CisgICAgICAgICAgICAoJywnLCAnMS4yMzQ1Njc4OScsICcxLjIzNDU2Nzg5JyksCisgICAgICAgICAgICAoJywlJywgJzEyMy40NTY3ODknLCAnMTIsMzQ1LjY3ODklJyksCisgICAgICAgICAgICAoJyxlJywgJzEyMzQ1NicsICcxLjIzNDU2ZSs1JyksCisgICAgICAgICAgICAoJyxFJywgJzEyMzQ1NicsICcxLjIzNDU2RSs1JyksCiAKICAgICAgICAgICAgICMgaXNzdWUgNjg1MAogICAgICAgICAgICAgKCdhPS03LjAnLCAnMC4xMjM0NScsICdhYWFhMC4xJyksCkBAIC03NTUsNiArODMwLDc5IEBACiAgICAgICAgIGZvciBmbXQsIGQsIHJlc3VsdCBpbiB0ZXN0X3ZhbHVlczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KERlY2ltYWwoZCksIGZtdCksIHJlc3VsdCkKIAorICAgIGRlZiB0ZXN0X25fZm9ybWF0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIGxvY2FsZSBpbXBvcnQgQ0hBUl9NQVgKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBTZXQgdXAgc29tZSBsb2NhbGVjb252LWxpa2UgZGljdGlvbmFyaWVzCisgICAgICAgIGVuX1VTID0geworICAgICAgICAgICAgJ2RlY2ltYWxfcG9pbnQnIDogJy4nLAorICAgICAgICAgICAgJ2dyb3VwaW5nJyA6IFszLCAzLCAwXSwKKyAgICAgICAgICAgICd0aG91c2FuZHNfc2VwJzogJywnCisgICAgICAgICAgICB9CisKKyAgICAgICAgZnJfRlIgPSB7CisgICAgICAgICAgICAnZGVjaW1hbF9wb2ludCcgOiAnLCcsCisgICAgICAgICAgICAnZ3JvdXBpbmcnIDogW0NIQVJfTUFYXSwKKyAgICAgICAgICAgICd0aG91c2FuZHNfc2VwJyA6ICcnCisgICAgICAgICAgICB9CisKKyAgICAgICAgcnVfUlUgPSB7CisgICAgICAgICAgICAnZGVjaW1hbF9wb2ludCcgOiAnLCcsCisgICAgICAgICAgICAnZ3JvdXBpbmcnIDogWzMsIDMsIDBdLAorICAgICAgICAgICAgJ3Rob3VzYW5kc19zZXAnIDogJyAnCisgICAgICAgICAgICB9CisKKyAgICAgICAgY3JhenkgPSB7CisgICAgICAgICAgICAnZGVjaW1hbF9wb2ludCcgOiAnJicsCisgICAgICAgICAgICAnZ3JvdXBpbmcnIDogWzEsIDQsIDIsIENIQVJfTUFYXSwKKyAgICAgICAgICAgICd0aG91c2FuZHNfc2VwJyA6ICctJworICAgICAgICAgICAgfQorCisKKyAgICAgICAgZGVmIGdldF9mbXQoeCwgbG9jYWxlLCBmbXQ9J24nKToKKyAgICAgICAgICAgIHJldHVybiBEZWNpbWFsLl9fZm9ybWF0X18oRGVjaW1hbCh4KSwgZm10LCBfbG9jYWxlY29udj1sb2NhbGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KERlY2ltYWwoJzEyLjcnKSwgZW5fVVMpLCAnMTIuNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdChEZWNpbWFsKCcxMi43JyksIGZyX0ZSKSwgJzEyLDcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoRGVjaW1hbCgnMTIuNycpLCBydV9SVSksICcxMiw3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KERlY2ltYWwoJzEyLjcnKSwgY3JhenkpLCAnMS0yJjcnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIGVuX1VTKSwgJzEyMyw0NTYsNzg5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1Njc4OSwgZnJfRlIpLCAnMTIzNDU2Nzg5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1Njc4OSwgcnVfUlUpLCAnMTIzIDQ1NiA3ODknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2Nzg5MDEyMywgY3JhenkpLCAnMTIzNDU2LTc4LTkwMTItMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1Njc4OSwgZW5fVVMsICcuNm4nKSwgJzEuMjM0NTdlKzgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2Nzg5LCBmcl9GUiwgJy42bicpLCAnMSwyMzQ1N2UrOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIHJ1X1JVLCAnLjZuJyksICcxLDIzNDU3ZSs4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1Njc4OSwgY3JhenksICcuNm4nKSwgJzEmMjM0NTdlKzgnKQorCisgICAgICAgICMgemVybyBwYWRkaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0LCBmcl9GUiwgJzAzbicpLCAnMTIzNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0LCBmcl9GUiwgJzA0bicpLCAnMTIzNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0LCBmcl9GUiwgJzA1bicpLCAnMDEyMzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNCwgZnJfRlIsICcwNm4nKSwgJzAwMTIzNCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1LCBlbl9VUywgJzA1bicpLCAnMTIsMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1LCBlbl9VUywgJzA2bicpLCAnMTIsMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1LCBlbl9VUywgJzA3bicpLCAnMDEyLDM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NSwgZW5fVVMsICcwOG4nKSwgJzAsMDEyLDM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NSwgZW5fVVMsICcwOW4nKSwgJzAsMDEyLDM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NSwgZW5fVVMsICcwMTBuJyksICcwMCwwMTIsMzQ1JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2LCBjcmF6eSwgJzA2bicpLCAnMS0yMzQ1LTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2LCBjcmF6eSwgJzA3bicpLCAnMS0yMzQ1LTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2LCBjcmF6eSwgJzA4bicpLCAnMS0yMzQ1LTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2LCBjcmF6eSwgJzA5bicpLCAnMDEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwMTBuJyksICcwLTAxLTIzNDUtNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTYsIGNyYXp5LCAnMDExbicpLCAnMC0wMS0yMzQ1LTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2LCBjcmF6eSwgJzAxMm4nKSwgJzAwLTAxLTIzNDUtNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTYsIGNyYXp5LCAnMDEzbicpLCAnMDAwLTAxLTIzNDUtNicpCisKKwogY2xhc3MgRGVjaW1hbEFyaXRobWV0aWNPcGVyYXRvcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAnJydVbml0IHRlc3RzIGZvciBhbGwgYXJpdGhtZXRpYyBvcGVyYXRvcnMsIGJpbmFyeSBhbmQgdW5hcnkuJycnCiAKQEAgLTk3OSwxOCArMTEyNyw2MiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhEZWNpbWFsKDQ1KSksIGFicyhEZWNpbWFsKC00NSkpKSAgIyBhYnMKIAogICAgIGRlZiB0ZXN0X25hbl9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgIyBjb21wYXJpc29ucyBpbnZvbHZpbmcgc2lnbmFsaW5nIG5hbnMgc2lnbmFsIEludmFsaWRPcGVyYXRpb24KKworICAgICAgICAjIG9yZGVyIGNvbXBhcmlzb25zICg8LCA8PSwgPiwgPj0pIGludm9sdmluZyBvbmx5IHF1aWV0IG5hbnMKKyAgICAgICAgIyBhbHNvIHNpZ25hbCBJbnZhbGlkT3BlcmF0aW9uCisKKyAgICAgICAgIyBlcXVhbGl0eSBjb21wYXJpc29ucyAoPT0sICE9KSBpbnZvbHZpbmcgb25seSBxdWlldCBuYW5zCisgICAgICAgICMgZG9uJ3Qgc2lnbmFsLCBidXQgcmV0dXJuIEZhbHNlIG9yIFRydWUgcmVzcGVjdGl2ZWx5LgorCiAgICAgICAgIG4gPSBEZWNpbWFsKCdOYU4nKQogICAgICAgICBzID0gRGVjaW1hbCgnc05hTicpCiAgICAgICAgIGkgPSBEZWNpbWFsKCdJbmYnKQogICAgICAgICBmID0gRGVjaW1hbCgnMicpCi0gICAgICAgIGZvciB4LCB5IGluIFsobiwgbiksIChuLCBpKSwgKGksIG4pLCAobiwgZiksIChmLCBuKSwKLSAgICAgICAgICAgICAgICAgICAgIChzLCBuKSwgKG4sIHMpLCAocywgaSksIChpLCBzKSwgKHMsIGYpLCAoZiwgcyksIChzLCBzKV06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oeCAhPSB5KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCAoeCA9PSB5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKHggPCB5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKHggPD0geSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obm90ICh4ID4geSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obm90ICh4ID49IHkpKQorCisgICAgICAgIHFuYW5fcGFpcnMgPSAobiwgbiksIChuLCBpKSwgKGksIG4pLCAobiwgZiksIChmLCBuKQorICAgICAgICBzbmFuX3BhaXJzID0gKHMsIG4pLCAobiwgcyksIChzLCBpKSwgKGksIHMpLCAocywgZiksIChmLCBzKSwgKHMsIHMpCisgICAgICAgIG9yZGVyX29wcyA9IG9wZXJhdG9yLmx0LCBvcGVyYXRvci5sZSwgb3BlcmF0b3IuZ3QsIG9wZXJhdG9yLmdlCisgICAgICAgIGVxdWFsaXR5X29wcyA9IG9wZXJhdG9yLmVxLCBvcGVyYXRvci5uZQorCisgICAgICAgICMgcmVzdWx0cyB3aGVuIEludmFsaWRPcGVyYXRpb24gaXMgbm90IHRyYXBwZWQKKyAgICAgICAgZm9yIHgsIHkgaW4gcW5hbl9wYWlycyArIHNuYW5fcGFpcnM6CisgICAgICAgICAgICBmb3Igb3AgaW4gb3JkZXJfb3BzICsgZXF1YWxpdHlfb3BzOgorICAgICAgICAgICAgICAgIGdvdCA9IG9wKHgsIHkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBUcnVlIGlmIG9wIGlzIG9wZXJhdG9yLm5lIGVsc2UgRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGV4cGVjdGVkLCBnb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgezAhcn0gZm9yIG9wZXJhdG9yLnsxfSh7MiFyfSwgezMhcn0pOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IHs0IXJ9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgb3AuX19uYW1lX18sIHgsIHksIGdvdCkpCisKKyAgICAgICAgIyByZXBlYXQgdGhlIGFib3ZlLCBidXQgdGhpcyB0aW1lIHRyYXAgdGhlIEludmFsaWRPcGVyYXRpb24KKyAgICAgICAgd2l0aCBsb2NhbGNvbnRleHQoKSBhcyBjdHg6CisgICAgICAgICAgICBjdHgudHJhcHNbSW52YWxpZE9wZXJhdGlvbl0gPSAxCisKKyAgICAgICAgICAgIGZvciB4LCB5IGluIHFuYW5fcGFpcnM6CisgICAgICAgICAgICAgICAgZm9yIG9wIGluIGVxdWFsaXR5X29wczoKKyAgICAgICAgICAgICAgICAgICAgZ290ID0gb3AoeCwgeSkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBUcnVlIGlmIG9wIGlzIG9wZXJhdG9yLm5lIGVsc2UgRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhleHBlY3RlZCwgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB7MCFyfSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYXRvci57MX0oezIhcn0sIHszIXJ9KTsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnb3QgezQhcn0iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgb3AuX19uYW1lX18sIHgsIHksIGdvdCkpCisKKyAgICAgICAgICAgIGZvciB4LCB5IGluIHNuYW5fcGFpcnM6CisgICAgICAgICAgICAgICAgZm9yIG9wIGluIGVxdWFsaXR5X29wczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW52YWxpZE9wZXJhdGlvbiwgb3BlcmF0b3IuZXEsIHgsIHkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEludmFsaWRPcGVyYXRpb24sIG9wZXJhdG9yLm5lLCB4LCB5KQorCisgICAgICAgICAgICBmb3IgeCwgeSBpbiBxbmFuX3BhaXJzICsgc25hbl9wYWlyczoKKyAgICAgICAgICAgICAgICBmb3Igb3AgaW4gb3JkZXJfb3BzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbnZhbGlkT3BlcmF0aW9uLCBvcCwgeCwgeSkKKworICAgIGRlZiB0ZXN0X2NvcHlfc2lnbihzZWxmKToKKyAgICAgICAgZCA9IERlY2ltYWwoMSkuY29weV9zaWduKERlY2ltYWwoLTIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCgxKS5jb3B5X3NpZ24oLTIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIERlY2ltYWwoMSkuY29weV9zaWduLCAnLTInKQogCiAjIFRoZSBmb2xsb3dpbmcgYXJlIHR3byBmdW5jdGlvbnMgdXNlZCB0byB0ZXN0IHRocmVhZGluZyBpbiB0aGUgbmV4dCBjbGFzcwogCkBAIC0xMDYzLDIyICsxMjU1LDIyIEBACiAgICAgICAgIGRjID0gRGVjaW1hbCgnNDUnKQogCiAgICAgICAgICN0d28gRGVjaW1hbHMKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRjID4gZGEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYyA+PSBkYSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRhIDwgZGMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYSA8PSBkYykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRhID09IGRiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGEgIT0gZGMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYSA8PSBkYikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRhID49IGRiKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZGMsIGRhKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkYywgZGEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhkYSwgZGMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGRhLCBkYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYSwgZGIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGEsIGRjKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChkYSwgZGIpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGRhLCBkYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZGMsZGEpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChkYSxkYyksIC0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChkYSxkYiksIDApCiAKICAgICAgICAgI2EgRGVjaW1hbCBhbmQgYW4gaW50Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYyA+IDIzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoMjMgPCBkYykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRjID09IDQ1KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZGMsIDIzKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoMjMsIGRjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjLCA0NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZGMsMjMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCgyMyxkYyksIC0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChkYyw0NSksIDApCkBAIC0xMDk3LDEwICsxMjg5LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKIAogICAgICAgICAjIHdpdGggTm9uZQotICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEZWNpbWFsKDEpIDwgTm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEZWNpbWFsKDEpID4gTm9uZSkKIAorICAgIGRlZiB0ZXN0X2RlY2ltYWxfZmxvYXRfY29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgZGEgPSBEZWNpbWFsKCcwLjI1JykKKyAgICAgICAgZGIgPSBEZWNpbWFsKCczLjAnKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoZGEsIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZGEsIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGRiLCAwLjI1KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkYiwgMC4yNSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYSwgMS41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhLCAwLjI1KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoMy4wLCBkYSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoMy4wLCBkYSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKDAuMjUsIGRiKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgwLjI1LCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgwLjI1LCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLjAsIGRiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKDAuMSwgRGVjaW1hbCgnMC4xJykpCisKICAgICBkZWYgdGVzdF9jb3B5X2FuZF9kZWVwY29weV9tZXRob2RzKHNlbGYpOgogICAgICAgICBkID0gRGVjaW1hbCgnNDMuMjQnKQogICAgICAgICBjID0gY29weS5jb3B5KGQpCkBAIC0xMTExLDYgKzEzMjAsMTAgQEAKICAgICBkZWYgdGVzdF9oYXNoX21ldGhvZChzZWxmKToKICAgICAgICAgI2p1c3QgdGhhdCBpdCdzIGhhc2hhYmxlCiAgICAgICAgIGhhc2goRGVjaW1hbCgyMykpCisgICAgICAgIGhhc2goRGVjaW1hbCgnSW5maW5pdHknKSkKKyAgICAgICAgaGFzaChEZWNpbWFsKCctSW5maW5pdHknKSkKKyAgICAgICAgaGFzaChEZWNpbWFsKCduYW4xMjMnKSkKKyAgICAgICAgaGFzaChEZWNpbWFsKCctTmFOJykpCiAKICAgICAgICAgdGVzdF92YWx1ZXMgPSBbRGVjaW1hbChzaWduKigyKiptICsgbikpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtIGluIFswLCAxNCwgMTUsIDE2LCAxNywgMzAsIDMxLApAQCAtMTE0NSw5ICsxMzU4LDE4IEBACiAKICAgICAgICAgI3RoZSBzYW1lIGhhc2ggdGhhdCB0byBhbiBpbnQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKERlY2ltYWwoMjMpKSwgaGFzaCgyMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgRGVjaW1hbCgnTmFOJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNoKERlY2ltYWwoJ0luZicpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2goRGVjaW1hbCgnLUluZicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBEZWNpbWFsKCdzTmFOJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNoKERlY2ltYWwoJ0luZicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2goRGVjaW1hbCgnLUluZicpKSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIGhhc2hlcyBvZiBhIERlY2ltYWwgZmxvYXQgbWF0Y2ggd2hlbiB0aGV5CisgICAgICAgICMgcmVwcmVzZW50IGV4YWN0bHkgdGhlIHNhbWUgdmFsdWVzCisgICAgICAgIHRlc3Rfc3RyaW5ncyA9IFsnaW5mJywgJy1JbmYnLCAnMC4wJywgJy0uMGUxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICczNC4wJywgJzIuNScsICcxMTIzOTAuNjI1JywgJy0wLjUxNTYyNSddCisgICAgICAgIGZvciBzIGluIHRlc3Rfc3RyaW5nczoKKyAgICAgICAgICAgIGYgPSBmbG9hdChzKQorICAgICAgICAgICAgZCA9IERlY2ltYWwocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChmKSwgaGFzaChkKSkKIAogICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBoYXNoIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZQogICAgICAgICAjIGN1cnJlbnQgY29udGV4dCAoaXNzdWUgIzE3NTcpCkBAIC0xMTc0LDIyICsxMzk2LDIyIEBACiAgICAgICAgIGwyID0gMjgKIAogICAgICAgICAjYmV0d2VlbiBEZWNpbWFscwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobWluKGQxLGQyKSBpcyBkMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1pbihkMixkMSkgaXMgZDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtYXgoZDEsZDIpIGlzIGQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobWF4KGQyLGQxKSBpcyBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtaW4oZDEsZDIpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtaW4oZDIsZDEpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXgoZDEsZDIpLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXgoZDIsZDEpLCBkMikKIAogICAgICAgICAjYmV0d2VlbiBEZWNpbWFsIGFuZCBsb25nCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtaW4oZDEsbDIpIGlzIGQxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobWluKGwyLGQxKSBpcyBkMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1heChsMSxkMikgaXMgZDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtYXgoZDIsbDEpIGlzIGQyKQorICAgICAgICBzZWxmLmFzc2VydElzKG1pbihkMSxsMiksIGQxKQorICAgICAgICBzZWxmLmFzc2VydElzKG1pbihsMixkMSksIGQxKQorICAgICAgICBzZWxmLmFzc2VydElzKG1heChsMSxkMiksIGQyKQorICAgICAgICBzZWxmLmFzc2VydElzKG1heChkMixsMSksIGQyKQogCiAgICAgZGVmIHRlc3RfYXNfbm9uemVybyhzZWxmKToKICAgICAgICAgI2FzIGZhbHNlCi0gICAgICAgIHNlbGYuZmFpbElmKERlY2ltYWwoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRGVjaW1hbCgwKSkKICAgICAgICAgI2FzIHRydWUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKERlY2ltYWwoJzAuMzcyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEZWNpbWFsKCcwLjM3MicpKQogCiAgICAgZGVmIHRlc3RfdG9zdHJpbmdfbWV0aG9kcyhzZWxmKToKICAgICAgICAgI1Rlc3Qgc3RyIGFuZCByZXByIG1ldGhvZHMuCkBAIC0xMzY5LDEwICsxNTkxLDEwIEBACiAgICAgICAgIGQxID0gTXlEZWNpbWFsKDEpCiAgICAgICAgIGQyID0gTXlEZWNpbWFsKDIpCiAgICAgICAgIGQgPSBkMSArIGQyCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGQpIGlzIERlY2ltYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShkKSwgRGVjaW1hbCkKIAogICAgICAgICBkID0gZDEubWF4KGQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShkKSBpcyBEZWNpbWFsKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZCksIERlY2ltYWwpCiAKICAgICBkZWYgdGVzdF9pbXBsaWNpdF9jb250ZXh0KHNlbGYpOgogICAgICAgICAjIENoZWNrIHJlc3VsdHMgd2hlbiBjb250ZXh0IGdpdmVuIGltcGxpY2l0bHkuICAoSXNzdWUgMjQ3OCkKQEAgLTE0MzEsMTAgKzE2NTMsMTAgQEAKIGNsYXNzIERlY2ltYWxQeXRob25BUEl0ZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9hYmMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKERlY2ltYWwsIG51bWJlcnMuTnVtYmVyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc3N1YmNsYXNzKERlY2ltYWwsIG51bWJlcnMuUmVhbCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKERlY2ltYWwoMCksIG51bWJlcnMuTnVtYmVyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc2luc3RhbmNlKERlY2ltYWwoMCksIG51bWJlcnMuUmVhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKERlY2ltYWwsIG51bWJlcnMuTnVtYmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKERlY2ltYWwsIG51bWJlcnMuUmVhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShEZWNpbWFsKDApLCBudW1iZXJzLk51bWJlcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKERlY2ltYWwoMCksIG51bWJlcnMuUmVhbCkKIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKICAgICAgICAgZCA9IERlY2ltYWwoJy0zLjE0MTU5MDAwMCcpCkBAIC0xNDcyLDYgKzE2OTQsNTUgQEAKICAgICAgICAgICAgIHIgPSBkLnRvX2ludGVncmFsKFJPVU5EX0RPV04pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwobWF0aC50cnVuYyhkKSksIHIpCiAKKyAgICBkZWYgdGVzdF9mcm9tX2Zsb2F0KHNlbGYpOgorCisgICAgICAgIGNsYXNzICBNeURlY2ltYWwoRGVjaW1hbCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgciA9IE15RGVjaW1hbC5mcm9tX2Zsb2F0KDAuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHIpLCBNeURlY2ltYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHIpLAorICAgICAgICAgICAgICAgICcwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUnKQorICAgICAgICBiaWdpbnQgPSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE15RGVjaW1hbC5mcm9tX2Zsb2F0KGJpZ2ludCksIE15RGVjaW1hbChiaWdpbnQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ25hbicpKS5pc19xbmFuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShNeURlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnaW5mJykpLmlzX2luZmluaXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShNeURlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnLWluZicpKS5pc19pbmZpbml0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihNeURlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnbmFuJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnTmFOJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihNeURlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnaW5mJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnSW5maW5pdHknKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKE15RGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCctaW5mJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnLUluZmluaXR5JykpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIE15RGVjaW1hbC5mcm9tX2Zsb2F0LCAnYWJjJykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjAwKToKKyAgICAgICAgICAgIHggPSByYW5kb20uZXhwb3ZhcmlhdGUoMC4wMSkgKiAocmFuZG9tLnJhbmRvbSgpICogMi4wIC0gMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBmbG9hdChNeURlY2ltYWwuZnJvbV9mbG9hdCh4KSkpICMgcm91bmR0cmlwCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KHNlbGYpOgorICAgICAgICBjb250ZXh0ID0gQ29udGV4dChwcmVjPTUsIHJvdW5kaW5nPVJPVU5EX0RPV04pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQobWF0aC5waSksCisgICAgICAgICAgICBEZWNpbWFsKCczLjE0MTUnKQorICAgICAgICApCisgICAgICAgIGNvbnRleHQgPSBDb250ZXh0KHByZWM9NSwgcm91bmRpbmc9Uk9VTkRfVVApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQobWF0aC5waSksCisgICAgICAgICAgICBEZWNpbWFsKCczLjE0MTYnKQorICAgICAgICApCisgICAgICAgIGNvbnRleHQgPSBDb250ZXh0KHByZWM9NSwgdHJhcHM9W0luZXhhY3RdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEluZXhhY3QsCisgICAgICAgICAgICBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQsCisgICAgICAgICAgICBtYXRoLnBpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCgtMC4wKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRlY2ltYWwoJy0wJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KDEuMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEZWNpbWFsKCcxJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KDEwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRlY2ltYWwoJzEwJykiKQorCiBjbGFzcyBDb250ZXh0QVBJdGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgpAQCAtMTQ4Myw4ICsxNzU0LDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodjEsIHYyKQogCiAgICAgZGVmIHRlc3RfZXF1YWxpdHlfd2l0aF9vdGhlcl90eXBlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKERlY2ltYWwoMTApIGluIFsnYScsIDEuMCwgRGVjaW1hbCgxMCksICgxLDIpLCB7fV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhEZWNpbWFsKDEwKSBub3QgaW4gWydhJywgMS4wLCAoMSwyKSwge31dKQorICAgICAgICBzZWxmLmFzc2VydEluKERlY2ltYWwoMTApLCBbJ2EnLCAxLjAsIERlY2ltYWwoMTApLCAoMSwyKSwge31dKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKERlY2ltYWwoMTApLCBbJ2EnLCAxLjAsICgxLDIpLCB7fV0pCiAKICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgogICAgICAgICAjIEFsbCBjb3BpZXMgc2hvdWxkIGJlIGRlZXAKQEAgLTE0OTQsNiArMTc2NSw0MzggQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChjLmZsYWdzKSwgaWQoZC5mbGFncykpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYy50cmFwcyksIGlkKGQudHJhcHMpKQogCisgICAgZGVmIHRlc3RfYWJzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmFicyhEZWNpbWFsKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmFicygtMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5hYnMsICctMScpCisKKyAgICBkZWYgdGVzdF9hZGQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuYWRkKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5hZGQoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5hZGQoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5hZGQoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5hZGQsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmFkZCwgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb21wYXJlKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZShEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmUoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3NpZ25hbChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV9zaWduYWwoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfc2lnbmFsKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZV9zaWduYWwsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfc2lnbmFsLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvdGFsKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvbXBhcmVfdG90YWwoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfdG90YWwoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3RvdGFsKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV90b3RhbCgxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfdG90YWwsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfdG90YWwsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfdG90YWxfbWFnKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvbXBhcmVfdG90YWxfbWFnKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3RvdGFsX21hZygxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfdG90YWxfbWFnKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV90b3RhbF9tYWcoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlX3RvdGFsX21hZywgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZV90b3RhbF9tYWcsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2NvcHlfYWJzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvcHlfYWJzKERlY2ltYWwoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9hYnMoLTEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29weV9hYnMsICctMScpCisKKyAgICBkZWYgdGVzdF9jb3B5X2RlY2ltYWwoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29weV9kZWNpbWFsKERlY2ltYWwoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9kZWNpbWFsKC0xKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvcHlfZGVjaW1hbCwgJy0xJykKKworICAgIGRlZiB0ZXN0X2NvcHlfbmVnYXRlKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvcHlfbmVnYXRlKERlY2ltYWwoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9uZWdhdGUoLTEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29weV9uZWdhdGUsICctMScpCisKKyAgICBkZWYgdGVzdF9jb3B5X3NpZ24oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29weV9zaWduKERlY2ltYWwoMSksIERlY2ltYWwoLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9zaWduKDEsIC0yKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfc2lnbihEZWNpbWFsKDEpLCAtMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb3B5X3NpZ24oMSwgRGVjaW1hbCgtMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29weV9zaWduLCAnMScsIC0yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29weV9zaWduLCAxLCAnLTInKQorCisgICAgZGVmIHRlc3RfZGl2aWRlKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmRpdmlkZShEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2aWRlLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5kaXZpZGUsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X2RpdmlkZV9pbnQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuZGl2aWRlX2ludChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlX2ludCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZV9pbnQoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZpZGVfaW50KDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2aWRlX2ludCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2aWRlX2ludCwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfZGl2bW9kKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmRpdm1vZChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2bW9kKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2bW9kKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2bW9kKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2bW9kLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5kaXZtb2QsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X2V4cChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5leHAoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leHAoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZXhwLCAnMTAnKQorCisgICAgZGVmIHRlc3RfZm1hKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmZtYShEZWNpbWFsKDIpLCBEZWNpbWFsKDMpLCBEZWNpbWFsKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm1hKDIsIDMsIDQpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm1hKERlY2ltYWwoMiksIDMsIDQpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm1hKDIsIERlY2ltYWwoMyksIDQpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm1hKDIsIDMsIERlY2ltYWwoNCkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm1hKERlY2ltYWwoMiksIERlY2ltYWwoMyksIDQpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZm1hLCAnMicsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5mbWEsIDIsICczJywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmZtYSwgMiwgMywgJzQnKQorCisgICAgZGVmIHRlc3RfaXNfZmluaXRlKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX2Zpbml0ZShEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX2Zpbml0ZSgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19maW5pdGUsICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19pbmZpbml0ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19pbmZpbml0ZShEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX2luZmluaXRlKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX2luZmluaXRlLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfbmFuKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX25hbihEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX25hbigxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19uYW4sICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19ub3JtYWwoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfbm9ybWFsKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfbm9ybWFsKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX25vcm1hbCwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX3FuYW4oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfcW5hbihEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX3FuYW4oMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfcW5hbiwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX3NpZ25lZChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19zaWduZWQoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19zaWduZWQoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfc2lnbmVkLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfc25hbihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19zbmFuKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfc25hbigxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19zbmFuLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfc3Vibm9ybWFsKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX3N1Ym5vcm1hbChEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX3N1Ym5vcm1hbCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19zdWJub3JtYWwsICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc196ZXJvKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX3plcm8oRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc196ZXJvKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX3plcm8sICcxMCcpCisKKyAgICBkZWYgdGVzdF9sbihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sbihEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxuKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxuLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbG9nMTAoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubG9nMTAoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2cxMCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2cxMCwgJzEwJykKKworICAgIGRlZiB0ZXN0X2xvZ2Ioc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubG9nYihEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2IoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9nYiwgJzEwJykKKworICAgIGRlZiB0ZXN0X2xvZ2ljYWxfYW5kKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZ2ljYWxfYW5kKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX2FuZCgxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfYW5kKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9hbmQoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX2FuZCwgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF9hbmQsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2xvZ2ljYWxfaW52ZXJ0KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZ2ljYWxfaW52ZXJ0KERlY2ltYWwoMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX2ludmVydCgxMDAwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfaW52ZXJ0LCAnMTAwMCcpCisKKyAgICBkZWYgdGVzdF9sb2dpY2FsX29yKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZ2ljYWxfb3IoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfb3IoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX29yKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9vcigxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfb3IsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfb3IsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2xvZ2ljYWxfeG9yKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZ2ljYWxfeG9yKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX3hvcigxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfeG9yKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF94b3IoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX3hvciwgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF94b3IsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X21heChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5tYXgoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heCgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1heCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWF4LCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9tYXhfbWFnKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm1heF9tYWcoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heF9tYWcoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXhfbWFnKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWF4X21hZygxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1heF9tYWcsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1heF9tYWcsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X21pbihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5taW4oRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbigxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbihEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbigxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1pbiwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWluLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9taW5fbWFnKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm1pbl9tYWcoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbl9tYWcoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW5fbWFnKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWluX21hZygxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1pbl9tYWcsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1pbl9tYWcsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X21pbnVzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm1pbnVzKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWludXMoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWludXMsICcxMCcpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBseShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5tdWx0aXBseShEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubXVsdGlwbHkoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tdWx0aXBseShEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm11bHRpcGx5KDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubXVsdGlwbHksICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm11bHRpcGx5LCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9uZXh0X21pbnVzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm5leHRfbWludXMoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uZXh0X21pbnVzKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm5leHRfbWludXMsICcxMCcpCisKKyAgICBkZWYgdGVzdF9uZXh0X3BsdXMoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubmV4dF9wbHVzKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dF9wbHVzKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm5leHRfcGx1cywgJzEwJykKKworICAgIGRlZiB0ZXN0X25leHRfdG93YXJkKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm5leHRfdG93YXJkKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uZXh0X3Rvd2FyZCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5leHRfdG93YXJkKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dF90b3dhcmQoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5uZXh0X3Rvd2FyZCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubmV4dF90b3dhcmQsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X25vcm1hbGl6ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5ub3JtYWxpemUoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5ub3JtYWxpemUoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubm9ybWFsaXplLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbnVtYmVyX2NsYXNzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5udW1iZXJfY2xhc3MoMTIzKSwgYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgxMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm51bWJlcl9jbGFzcygwKSwgYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5udW1iZXJfY2xhc3MoLTQ1KSwgYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgtNDUpKSkKKworICAgIGRlZiB0ZXN0X3Bvd2VyKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnBvd2VyKERlY2ltYWwoMSksIERlY2ltYWwoNCksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3dlcigxLCA0LCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBvd2VyKERlY2ltYWwoMSksIDQsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucG93ZXIoMSwgRGVjaW1hbCg0KSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3dlcigxLCA0LCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBvd2VyKERlY2ltYWwoMSksIERlY2ltYWwoNCksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucG93ZXIsICcxJywgNCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnBvd2VyLCAxLCAnNCcsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5wb3dlciwgMSwgNCwgJzInKQorCisgICAgZGVmIHRlc3RfcGx1cyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5wbHVzKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucGx1cygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5wbHVzLCAnMTAnKQorCisgICAgZGVmIHRlc3RfcXVhbnRpemUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMucXVhbnRpemUoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnF1YW50aXplKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucXVhbnRpemUoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5xdWFudGl6ZSgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnF1YW50aXplLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5xdWFudGl6ZSwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfcmVtYWluZGVyKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnJlbWFpbmRlcihEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucmVtYWluZGVyLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5yZW1haW5kZXIsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3JlbWFpbmRlcl9uZWFyKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnJlbWFpbmRlcl9uZWFyKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yZW1haW5kZXJfbmVhcigxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcl9uZWFyKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyX25lYXIoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5yZW1haW5kZXJfbmVhciwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucmVtYWluZGVyX25lYXIsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3JvdGF0ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5yb3RhdGUoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJvdGF0ZSgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJvdGF0ZShEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJvdGF0ZSgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnJvdGF0ZSwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucm90YXRlLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9zcXJ0KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnNxcnQoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zcXJ0KDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNxcnQsICcxMCcpCisKKyAgICBkZWYgdGVzdF9zYW1lX3F1YW50dW0oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuc2FtZV9xdWFudHVtKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zYW1lX3F1YW50dW0oMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zYW1lX3F1YW50dW0oRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zYW1lX3F1YW50dW0oMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zYW1lX3F1YW50dW0sICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNhbWVfcXVhbnR1bSwgMSwgJzInKQorCisgICAgZGVmIHRlc3Rfc2NhbGViKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnNjYWxlYihEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2NhbGViKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2NhbGViKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2NhbGViKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2NhbGViLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zY2FsZWIsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3NoaWZ0KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnNoaWZ0KERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zaGlmdCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNoaWZ0KERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2hpZnQoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zaGlmdCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2hpZnQsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3N1YnRyYWN0KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnN1YnRyYWN0KERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zdWJ0cmFjdCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnN1YnRyYWN0KERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc3VidHJhY3QoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zdWJ0cmFjdCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc3VidHJhY3QsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3RvX2VuZ19zdHJpbmcoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMudG9fZW5nX3N0cmluZyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnRvX2VuZ19zdHJpbmcoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMudG9fZW5nX3N0cmluZywgJzEwJykKKworICAgIGRlZiB0ZXN0X3RvX3NjaV9zdHJpbmcoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMudG9fc2NpX3N0cmluZyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnRvX3NjaV9zdHJpbmcoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMudG9fc2NpX3N0cmluZywgJzEwJykKKworICAgIGRlZiB0ZXN0X3RvX2ludGVncmFsX2V4YWN0KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnRvX2ludGVncmFsX2V4YWN0KERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMudG9faW50ZWdyYWxfZXhhY3QoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMudG9faW50ZWdyYWxfZXhhY3QsICcxMCcpCisKKyAgICBkZWYgdGVzdF90b19pbnRlZ3JhbF92YWx1ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy50b19pbnRlZ3JhbF92YWx1ZShEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnRvX2ludGVncmFsX3ZhbHVlKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnRvX2ludGVncmFsX3ZhbHVlLCAnMTAnKQorCiBjbGFzcyBXaXRoU3RhdGVtZW50VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBDYW4ndCBkbyB0aGVzZSBhcyBkb2NzdHJpbmdzIHVudGlsIFB5dGhvbiAyLjYKICAgICAjIGFzIGRvY3Rlc3QgY2FuJ3QgaGFuZGxlIF9fZnV0dXJlX18gc3RhdGVtZW50cwpAQCAtMTUwNCw5ICsyMjA3LDkgQEAKICAgICAgICAgd2l0aCBsb2NhbGNvbnRleHQoKSBhcyBlbnRlcl9jdHg6CiAgICAgICAgICAgICBzZXRfY3R4ID0gZ2V0Y29udGV4dCgpCiAgICAgICAgIGZpbmFsX2N0eCA9IGdldGNvbnRleHQoKQotICAgICAgICBzZWxmLmFzc2VydF8ob3JpZ19jdHggaXMgZmluYWxfY3R4LCAnZGlkIG5vdCByZXN0b3JlIGNvbnRleHQgY29ycmVjdGx5JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9yaWdfY3R4IGlzIG5vdCBzZXRfY3R4LCAnZGlkIG5vdCBjb3B5IHRoZSBjb250ZXh0JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldF9jdHggaXMgZW50ZXJfY3R4LCAnX19lbnRlcl9fIHJldHVybmVkIHdyb25nIGNvbnRleHQnKQorICAgICAgICBzZWxmLmFzc2VydElzKG9yaWdfY3R4LCBmaW5hbF9jdHgsICdkaWQgbm90IHJlc3RvcmUgY29udGV4dCBjb3JyZWN0bHknKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG9yaWdfY3R4LCBzZXRfY3R4LCAnZGlkIG5vdCBjb3B5IHRoZSBjb250ZXh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZXRfY3R4LCBlbnRlcl9jdHgsICdfX2VudGVyX18gcmV0dXJuZWQgd3JvbmcgY29udGV4dCcpCiAKICAgICBkZWYgdGVzdF9sb2NhbGNvbnRleHRhcmcoc2VsZik6CiAgICAgICAgICMgVXNlIGEgY29weSBvZiB0aGUgc3VwcGxpZWQgY29udGV4dCBpbiB0aGUgYmxvY2sKQEAgLTE1MTUsMTAgKzIyMTgsMTAgQEAKICAgICAgICAgd2l0aCBsb2NhbGNvbnRleHQobmV3X2N0eCkgYXMgZW50ZXJfY3R4OgogICAgICAgICAgICAgc2V0X2N0eCA9IGdldGNvbnRleHQoKQogICAgICAgICBmaW5hbF9jdHggPSBnZXRjb250ZXh0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9yaWdfY3R4IGlzIGZpbmFsX2N0eCwgJ2RpZCBub3QgcmVzdG9yZSBjb250ZXh0IGNvcnJlY3RseScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZXRfY3R4LnByZWMgPT0gbmV3X2N0eC5wcmVjLCAnZGlkIG5vdCBzZXQgY29ycmVjdCBjb250ZXh0JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5ld19jdHggaXMgbm90IHNldF9jdHgsICdkaWQgbm90IGNvcHkgdGhlIGNvbnRleHQnKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0X2N0eCBpcyBlbnRlcl9jdHgsICdfX2VudGVyX18gcmV0dXJuZWQgd3JvbmcgY29udGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3JpZ19jdHgsIGZpbmFsX2N0eCwgJ2RpZCBub3QgcmVzdG9yZSBjb250ZXh0IGNvcnJlY3RseScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0X2N0eC5wcmVjLCBuZXdfY3R4LnByZWMsICdkaWQgbm90IHNldCBjb3JyZWN0IGNvbnRleHQnKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG5ld19jdHgsIHNldF9jdHgsICdkaWQgbm90IGNvcHkgdGhlIGNvbnRleHQnKQorICAgICAgICBzZWxmLmFzc2VydElzKHNldF9jdHgsIGVudGVyX2N0eCwgJ19fZW50ZXJfXyByZXR1cm5lZCB3cm9uZyBjb250ZXh0JykKIAogY2xhc3MgQ29udGV4dEZsYWdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9mbGFnc19pcnJlbGV2YW50KHNlbGYpOgpAQCAtMTU1OSwyMCArMjI2MiwxNiBAQAogICAgICAgICAgICAgICAgIGZvciBmbGFnIGluIGV4dHJhX2ZsYWdzOgogICAgICAgICAgICAgICAgICAgICBpZiBmbGFnIG5vdCBpbiBleHBlY3RlZF9mbGFnczoKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZsYWdzLmFwcGVuZChmbGFnKQotICAgICAgICAgICAgICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZsYWdzLnNvcnQoKQogCiAgICAgICAgICAgICAgICAgIyBmbGFncyB3ZSBhY3R1YWxseSBnb3QKICAgICAgICAgICAgICAgICBuZXdfZmxhZ3MgPSBbayBmb3Igayx2IGluIGNvbnRleHQuZmxhZ3MuaXRlbXMoKSBpZiB2XQotICAgICAgICAgICAgICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6Ci0gICAgICAgICAgICAgICAgICAgIG5ld19mbGFncy5zb3J0KCkKIAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5zLCBuZXdfYW5zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiBwcm9kdWNlcyBkaWZmZXJlbnQgYW5zd2VycyBkZXBlbmRpbmcgb24gZmxhZ3Mgc2V0OiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAlcywgZ290ICVzLiIgJSAoYW5zLCBuZXdfYW5zKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19mbGFncywgZXhwZWN0ZWRfZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmF0aW9uIHJhaXNlcyBkaWZmZXJlbnQgZmxhZ3MgZGVwZW5kaW5nIG9uIGZsYWdzIHNldDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXMsIGdvdCAlcyIgJSAoZXhwZWN0ZWRfZmxhZ3MsIG5ld19mbGFncykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKG5ld19mbGFncywgZXhwZWN0ZWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiByYWlzZXMgZGlmZmVyZW50IGZsYWdzIGRlcGVuZGluZyBvbiBmbGFncyBzZXQ6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAlcywgZ290ICVzIiAlIChleHBlY3RlZF9mbGFncywgbmV3X2ZsYWdzKSkKIAogZGVmIHRlc3RfbWFpbihhcml0aD1GYWxzZSwgdmVyYm9zZT1Ob25lLCB0b2RvX3Rlc3RzPU5vbmUsIGRlYnVnPU5vbmUpOgogICAgICIiIiBFeGVjdXRlIHRoZSB0ZXN0cy4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVmYXVsdGRpY3QucHkgYi9MaWIvdGVzdC90ZXN0X2RlZmF1bHRkaWN0LnB5CmluZGV4IDdhZDIzOTIuLmE1MjRhZDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVmYXVsdGRpY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZWZhdWx0ZGljdC5weQpAQCAtMjQsMjEgKzI0LDIxIEBACiAgICAgICAgIGQxWzEzXQogICAgICAgICBkMVsxNF0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgezEyOiBbNDIsIDI0XSwgMTM6IFtdLCAxNDogW119KQotICAgICAgICBzZWxmLmFzc2VydF8oZDFbMTJdIGlzIG5vdCBkMVsxM10gaXMgbm90IGQxWzE0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWzEyXSBpcyBub3QgZDFbMTNdIGlzIG5vdCBkMVsxNF0pCiAgICAgICAgIGQyID0gZGVmYXVsdGRpY3QobGlzdCwgZm9vPTEsIGJhcj0yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmRlZmF1bHRfZmFjdG9yeSwgbGlzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMiwgeyJmb28iOiAxLCAiYmFyIjogMn0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDJbImZvbyJdLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyWyJiYXIiXSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMls0Ml0sIFtdKQotICAgICAgICBzZWxmLmFzc2VydF8oImZvbyIgaW4gZDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiZm9vIiBpbiBkMi5rZXlzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiYmFyIiBpbiBkMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJiYXIiIGluIGQyLmtleXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDQyIGluIGQyKQotICAgICAgICBzZWxmLmFzc2VydF8oNDIgaW4gZDIua2V5cygpKQotICAgICAgICBzZWxmLmFzc2VydF8oMTIgbm90IGluIGQyKQotICAgICAgICBzZWxmLmFzc2VydF8oMTIgbm90IGluIGQyLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vIiwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbyIsIGQyLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiYmFyIiwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImJhciIsIGQyLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbig0MiwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oNDIsIGQyLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMiwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTIsIGQyLmtleXMoKSkKICAgICAgICAgZDIuZGVmYXVsdF9mYWN0b3J5ID0gTm9uZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmRlZmF1bHRfZmFjdG9yeSwgTm9uZSkKICAgICAgICAgdHJ5OgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZDIpLCAiZGVmYXVsdGRpY3QoPHR5cGUgJ2ludCc+LCB7MTI6IDQyfSkiKQogICAgICAgICBkZWYgZm9vKCk6IHJldHVybiA0MwogICAgICAgICBkMyA9IGRlZmF1bHRkaWN0KGZvbykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQzLmRlZmF1bHRfZmFjdG9yeSBpcyBmb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMy5kZWZhdWx0X2ZhY3RvcnkgaXMgZm9vKQogICAgICAgICBkM1sxM10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQzKSwgImRlZmF1bHRkaWN0KCVzLCB7MTM6IDQzfSkiICUgcmVwcihmb28pKQogCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgZDIgPSBjb3B5LmRlZXBjb3B5KGQxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmRlZmF1bHRfZmFjdG9yeSwgZm9vYmFyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBkMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQxWzFdIGlzIG5vdCBkMlsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWzFdIGlzIG5vdCBkMlsxXSkKICAgICAgICAgZDEuZGVmYXVsdF9mYWN0b3J5ID0gbGlzdAogICAgICAgICBkMiA9IGNvcHkuZGVlcGNvcHkoZDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuZGVmYXVsdF9mYWN0b3J5LCBsaXN0KQpAQCAtMTU2LDcgKzE1Niw3IEBACiAgICAgICAgICAgICBkZWYgX2ZhY3Rvcnkoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIGQgPSBzdWIoKQotICAgICAgICBzZWxmLmFzc2VydF8ocmVwcihkKS5zdGFydHN3aXRoKAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihkKS5zdGFydHN3aXRoKAogICAgICAgICAgICAgImRlZmF1bHRkaWN0KDxib3VuZCBtZXRob2Qgc3ViLl9mYWN0b3J5IG9mIGRlZmF1bHRkaWN0KC4uLiIpKQogCiAgICAgICAgICMgTk9URTogcHJpbnRpbmcgYSBzdWJjbGFzcyBvZiBhIGJ1aWx0aW4gdHlwZSBkb2VzIG5vdCBjYWxsIGl0cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKaW5kZXggNTU4ODhkMC4uYTBkMzBmMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CkBAIC02LDcgKzYsNiBAQAogaW1wb3J0IGNvcHkKIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQogaW1wb3J0IHJhbmRvbQotaW1wb3J0IG9zCiAKIEJJRyA9IDEwMDAwMAogCkBAIC01MCw3ICs0OSw5IEBACiAgICAgZGVmIHRlc3RfbWF4bGVuKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXF1ZSwgJ2FiYycsIC0xKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXF1ZSwgJ2FiYycsIC0yKQotICAgICAgICBkID0gZGVxdWUocmFuZ2UoMTApLCBtYXhsZW49MykKKyAgICAgICAgaXQgPSBpdGVyKHJhbmdlKDEwKSkKKyAgICAgICAgZCA9IGRlcXVlKGl0LCBtYXhsZW49MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkKSwgJ2RlcXVlKFs3LCA4LCA5XSwgbWF4bGVuPTMpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCByYW5nZSg3LCAxMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGVxdWUocmFuZ2UoMTApLCAzKSkKQEAgLTg3LDYgKzg4LDY0IEBACiAgICAgICAgICAgICBmby5jbG9zZSgpCiAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKKyAgICBkZWYgdGVzdF9tYXhsZW5femVybyhzZWxmKToKKyAgICAgICAgaXQgPSBpdGVyKHJhbmdlKDEwMCkpCisgICAgICAgIGRlcXVlKGl0LCBtYXhsZW49MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCisKKyAgICAgICAgaXQgPSBpdGVyKHJhbmdlKDEwMCkpCisgICAgICAgIGQgPSBkZXF1ZShtYXhsZW49MCkKKyAgICAgICAgZC5leHRlbmQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQorCisgICAgICAgIGl0ID0gaXRlcihyYW5nZSgxMDApKQorICAgICAgICBkID0gZGVxdWUobWF4bGVuPTApCisgICAgICAgIGQuZXh0ZW5kbGVmdChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCisKKyAgICBkZWYgdGVzdF9tYXhsZW5fYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcXVlKCkubWF4bGVuLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcXVlKCdhYmMnKS5tYXhsZW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVxdWUoJ2FiYycsIG1heGxlbj00KS5tYXhsZW4sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVxdWUoJ2FiYycsIG1heGxlbj0yKS5tYXhsZW4sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVxdWUoJ2FiYycsIG1heGxlbj0wKS5tYXhsZW4sIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZCA9IGRlcXVlKCdhYmMnKQorICAgICAgICAgICAgZC5tYXhsZW4gPSAxMAorCisgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CisgICAgICAgIGZvciBzIGluICgnJywgJ2FicmFjYWRhYnJhJywgJ3NpbXNhbGFiaW0nKjUwMCsnYWJjJyk6CisgICAgICAgICAgICBzID0gbGlzdChzKQorICAgICAgICAgICAgZCA9IGRlcXVlKHMpCisgICAgICAgICAgICBmb3IgbGV0dGVyIGluICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KGxldHRlciksIGQuY291bnQobGV0dGVyKSwgKHMsIGQsIGxldHRlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5jb3VudCkgICAgICAgIyB0b28gZmV3IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmNvdW50LCAxLCAyKSAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgY2xhc3MgQmFkQ29tcGFyZToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIEFyaXRobWV0aWNFcnJvcgorICAgICAgICBkID0gZGVxdWUoWzEsIDIsIEJhZENvbXBhcmUoKSwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyaXRobWV0aWNFcnJvciwgZC5jb3VudCwgMikKKyAgICAgICAgZCA9IGRlcXVlKFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJpdGhtZXRpY0Vycm9yLCBkLmNvdW50LCBCYWRDb21wYXJlKCkpCisgICAgICAgIGNsYXNzIE11dGF0aW5nQ29tcGFyZToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHNlbGYuZC5wb3AoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIG0gPSBNdXRhdGluZ0NvbXBhcmUoKQorICAgICAgICBkID0gZGVxdWUoWzEsIDIsIDMsIG0sIDQsIDVdKQorICAgICAgICBtLmQgPSBkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZC5jb3VudCwgMykKKworICAgICAgICAjIHRlc3QgaXNzdWUxMTAwNAorICAgICAgICAjIGJsb2NrIGFkdmFuY2UgZmFpbGVkIGFmdGVyIHJvdGF0aW9uIGFsaWduZWQgZWxlbWVudHMgb24gcmlnaHQgc2lkZSBvZiBibG9jaworICAgICAgICBkID0gZGVxdWUoW05vbmVdKjE2KQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZCkpOgorICAgICAgICAgICAgZC5yb3RhdGUoLTEpCisgICAgICAgIGQucm90YXRlKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb3VudCgxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNvdW50KE5vbmUpLCAxNikKKwogICAgIGRlZiB0ZXN0X2NvbXBhcmlzb25zKHNlbGYpOgogICAgICAgICBkID0gZGVxdWUoJ3hhYmMnKTsgZC5wb3BsZWZ0KCkKICAgICAgICAgZm9yIGUgaW4gW2QsIGRlcXVlKCdhYmMnKSwgZGVxdWUoJ2FiJyksIGRlcXVlKCksIGxpc3QoZCldOgpAQCAtMTcyLDExICsyMzEsMjMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCBuLWkpCiAgICAgICAgICAgICBqID0gcmFuZG9tLnJhbmRyYW5nZSgtbGVuKGQpLCBsZW4oZCkpCiAgICAgICAgICAgICB2YWwgPSBkW2pdCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odmFsIGluIGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHZhbCwgZCkKICAgICAgICAgICAgIGRlbCBkW2pdCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odmFsIG5vdCBpbiBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbih2YWwsIGQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAwKQogCisgICAgZGVmIHRlc3RfcmV2ZXJzZShzZWxmKToKKyAgICAgICAgbiA9IDUwMCAgICAgICAgICMgTyhuKioyKSB0ZXN0LCBkb24ndCBtYWtlIHRoaXMgdG9vIGJpZworICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kb20oKSBmb3IgaSBpbiByYW5nZShuKV0KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICBkID0gZGVxdWUoZGF0YVs6aV0pCisgICAgICAgICAgICByID0gZC5yZXZlcnNlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChyZXZlcnNlZChkYXRhWzppXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyLCBOb25lKQorICAgICAgICAgICAgZC5yZXZlcnNlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgZGF0YVs6aV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5yZXZlcnNlLCAxKSAgICAgICAgICAjIEFyaXR5IGlzIHplcm8KKwogICAgIGRlZiB0ZXN0X3JvdGF0ZShzZWxmKToKICAgICAgICAgcyA9IHR1cGxlKCdhYmNkZScpCiAgICAgICAgIG4gPSBsZW4ocykKQEAgLTI3NSw3ICszNDYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGQucmVtb3ZlLCAnYycpCiAgICAgICAgIGZvciB4LCB5IGluIHppcChkLCBlKToKICAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgb3JpZ2luYWwgb3JkZXIgYW5kIHZhbHVlcyBhcmUgcmV0YWluZWQuCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oeCBpcyB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeSkKIAogICAgICAgICAjIEhhbmRsZSBldmlsIG11dGF0b3IKICAgICAgICAgZm9yIG1hdGNoIGluIChUcnVlLCBGYWxzZSk6CkBAIC0yODksNyArMzYwLDcgQEAKICAgICAgICAgZSA9IGV2YWwocmVwcihkKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQogICAgICAgICBkLmFwcGVuZChkKQotICAgICAgICBzZWxmLmFzc2VydF8oJy4uLicgaW4gcmVwcihkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignLi4uJywgcmVwcihkKSkKIAogICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYpOgogICAgICAgICBkID0gZGVxdWUoeHJhbmdlKDIwMCkpCkBAIC00NDQsNyArNTE1LDcgQEAKICAgICAgICAgICAgIG9iai54ID0gaXRlcihjb250YWluZXIpCiAgICAgICAgICAgICBkZWwgb2JqLCBjb250YWluZXIKICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHJlZigpIGlzIE5vbmUsICJDeWNsZSB3YXMgbm90IGNvbGxlY3RlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmKCkgaXMgTm9uZSwgIkN5Y2xlIHdhcyBub3QgY29sbGVjdGVkIikKIAogY2xhc3MgVGVzdFZhcmlvdXNJdGVyYXRvckFyZ3ModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5IGIvTGliL3Rlc3QvdGVzdF9kZXNjci5weQppbmRleCA1NWM1MjY2Li5jNDgyY2FjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKQEAgLTY3LDggKzY3LDkgQEAKICAgICAgICAgIyBGaW5kIG1ldGhvZCBpbiBwYXJlbnQgY2xhc3MKICAgICAgICAgd2hpbGUgbWV0aCBub3QgaW4gdC5fX2RpY3RfXzoKICAgICAgICAgICAgIHQgPSB0Ll9fYmFzZXNfX1swXQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgIyBpbiBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLiBQeVB5KSwgJ20nIGNhbiBiZSBhIHJlZ3VsYXIgdW5ib3VuZAorICAgICAgICAjIG1ldGhvZCBvYmplY3Q7IHRoZSBnZXRhdHRyKCkgYmVsb3cgb2J0YWlucyBpdHMgdW5kZXJseWluZyBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG0sICdpbV9mdW5jJywgbSksIHQuX19kaWN0X19bbWV0aF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobShhKSwgcmVzKQogICAgICAgICBibSA9IGdldGF0dHIoYSwgbWV0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibSgpLCByZXMpCkBAIC04Nyw3ICs4OCw5IEBACiAgICAgICAgIG0gPSBnZXRhdHRyKHQsIG1ldGgpCiAgICAgICAgIHdoaWxlIG1ldGggbm90IGluIHQuX19kaWN0X186CiAgICAgICAgICAgICB0ID0gdC5fX2Jhc2VzX19bMF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCB0Ll9fZGljdF9fW21ldGhdKQorICAgICAgICAjIGluIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuIFB5UHkpLCAnbScgY2FuIGJlIGEgcmVndWxhciB1bmJvdW5kCisgICAgICAgICMgbWV0aG9kIG9iamVjdDsgdGhlIGdldGF0dHIoKSBiZWxvdyBvYnRhaW5zIGl0cyB1bmRlcmx5aW5nIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobSwgJ2ltX2Z1bmMnLCBtKSwgdC5fX2RpY3RfX1ttZXRoXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtKGEsIGIpLCByZXMpCiAgICAgICAgIGJtID0gZ2V0YXR0cihhLCBtZXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJtKGIpLCByZXMpCkBAIC05OSw3ICsxMDIsOSBAQAogICAgICAgICBtID0gZ2V0YXR0cih0LCBtZXRoKQogICAgICAgICB3aGlsZSBtZXRoIG5vdCBpbiB0Ll9fZGljdF9fOgogICAgICAgICAgICAgdCA9IHQuX19iYXNlc19fWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgIyBpbiBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLiBQeVB5KSwgJ20nIGNhbiBiZSBhIHJlZ3VsYXIgdW5ib3VuZAorICAgICAgICAjIG1ldGhvZCBvYmplY3Q7IHRoZSBnZXRhdHRyKCkgYmVsb3cgb2J0YWlucyBpdHMgdW5kZXJseWluZyBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG0sICdpbV9mdW5jJywgbSksIHQuX19kaWN0X19bbWV0aF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobShhLCBiLCBjKSwgcmVzKQogICAgICAgICBibSA9IGdldGF0dHIoYSwgbWV0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibShiLCBjKSwgcmVzKQpAQCAtMTEyLDcgKzExNyw5IEBACiAgICAgICAgIG0gPSBnZXRhdHRyKHQsIG1ldGgpCiAgICAgICAgIHdoaWxlIG1ldGggbm90IGluIHQuX19kaWN0X186CiAgICAgICAgICAgICB0ID0gdC5fX2Jhc2VzX19bMF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCB0Ll9fZGljdF9fW21ldGhdKQorICAgICAgICAjIGluIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuIFB5UHkpLCAnbScgY2FuIGJlIGEgcmVndWxhciB1bmJvdW5kCisgICAgICAgICMgbWV0aG9kIG9iamVjdDsgdGhlIGdldGF0dHIoKSBiZWxvdyBvYnRhaW5zIGl0cyB1bmRlcmx5aW5nIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobSwgJ2ltX2Z1bmMnLCBtKSwgdC5fX2RpY3RfX1ttZXRoXSkKICAgICAgICAgZFsnYSddID0gZGVlcGNvcHkoYSkKICAgICAgICAgbShkWydhJ10sIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCByZXMpCkBAIC0xMjksNyArMTM2LDkgQEAKICAgICAgICAgbSA9IGdldGF0dHIodCwgbWV0aCkKICAgICAgICAgd2hpbGUgbWV0aCBub3QgaW4gdC5fX2RpY3RfXzoKICAgICAgICAgICAgIHQgPSB0Ll9fYmFzZXNfX1swXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIHQuX19kaWN0X19bbWV0aF0pCisgICAgICAgICMgaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gUHlQeSksICdtJyBjYW4gYmUgYSByZWd1bGFyIHVuYm91bmQKKyAgICAgICAgIyBtZXRob2Qgb2JqZWN0OyB0aGUgZ2V0YXR0cigpIGJlbG93IG9idGFpbnMgaXRzIHVuZGVybHlpbmcgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtLCAnaW1fZnVuYycsIG0pLCB0Ll9fZGljdF9fW21ldGhdKQogICAgICAgICBkWydhJ10gPSBkZWVwY29weShhKQogICAgICAgICBtKGRbJ2EnXSwgYiwgYykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIHJlcykKQEAgLTE0Niw3ICsxNTUsOSBAQAogICAgICAgICB3aGlsZSBtZXRoIG5vdCBpbiB0Ll9fZGljdF9fOgogICAgICAgICAgICAgdCA9IHQuX19iYXNlc19fWzBdCiAgICAgICAgIG0gPSBnZXRhdHRyKHQsIG1ldGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgIyBpbiBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLiBQeVB5KSwgJ20nIGNhbiBiZSBhIHJlZ3VsYXIgdW5ib3VuZAorICAgICAgICAjIG1ldGhvZCBvYmplY3Q7IHRoZSBnZXRhdHRyKCkgYmVsb3cgb2J0YWlucyBpdHMgdW5kZXJseWluZyBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG0sICdpbV9mdW5jJywgbSksIHQuX19kaWN0X19bbWV0aF0pCiAgICAgICAgIGRpY3Rpb25hcnlbJ2EnXSA9IGRlZXBjb3B5KGEpCiAgICAgICAgIG0oZGljdGlvbmFyeVsnYSddLCBiLCBjLCBkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3Rpb25hcnlbJ2EnXSwgcmVzKQpAQCAtMTc0LDcgKzE4NSwxMCBAQAogCiAgICAgZGVmIHRlc3RfZGljdHMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBkaWN0IG9wZXJhdGlvbnMuLi4KLSAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHsxOjJ9LCB7MjoxfSwgLTEsICJjbXAoYSxiKSIsICJfX2NtcF9fIikKKyAgICAgICAgaWYgaGFzYXR0cihkaWN0LCAnX19jbXBfXycpOiAgICMgUHlQeSBoYXMgb25seSByaWNoIGNvbXBhcmlzb24gb24gZGljdHMKKyAgICAgICAgICAgIHNlbGYuYmlub3BfdGVzdCh7MToyfSwgezI6MX0sIC0xLCAiY21wKGEsYikiLCAiX19jbXBfXyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoezE6Mn0sIHsyOjF9LCBUcnVlLCAiYSA8IGIiLCAiX19sdF9fIikKICAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHsxOjIsMzo0fSwgMSwgMSwgImIgaW4gYSIsICJfX2NvbnRhaW5zX18iKQogICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoezE6MiwzOjR9LCAyLCAwLCAiYiBpbiBhIiwgIl9fY29udGFpbnNfXyIpCiAgICAgICAgIHNlbGYuYmlub3BfdGVzdCh7MToyLDM6NH0sIDEsIDIsICJhW2JdIiwgIl9fZ2V0aXRlbV9fIikKQEAgLTIzNyw3ICsyNTEsNiBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJOb3RJbXBsZW1lbnRlZCBzaG91bGQgaGF2ZSBjYXVzZWQgVHlwZUVycm9yIikKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBDKHN5cy5tYXhpbnQrMSkKICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CkBAIC0yODUsNiArMjk4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEpLCAiMjM0LjUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucHJlYywgMTIpCiAKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0aGUgbW9kdWxlICd4eHN1YnR5cGUnIGlzIGludGVybmFsIikKICAgICBkZWYgdGVzdF9zcGFtX2xpc3RzKHNlbGYpOgogICAgICAgICAjIFRlc3Rpbmcgc3BhbWxpc3Qgb3BlcmF0aW9ucy4uLgogICAgICAgICBpbXBvcnQgY29weSwgeHhzdWJ0eXBlIGFzIHNwYW0KQEAgLTMyOCw2ICszNDIsNyBAQAogICAgICAgICBhLnNldHN0YXRlKDQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZ2V0c3RhdGUoKSwgNDIpCiAKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0aGUgbW9kdWxlICd4eHN1YnR5cGUnIGlzIGludGVybmFsIikKICAgICBkZWYgdGVzdF9zcGFtX2RpY3RzKHNlbGYpOgogICAgICAgICAjIFRlc3Rpbmcgc3BhbWRpY3Qgb3BlcmF0aW9ucy4uLgogICAgICAgICBpbXBvcnQgY29weSwgeHhzdWJ0eXBlIGFzIHNwYW0KQEAgLTM4MywxMiArMzk4LDEyIEBACiAKICAgICBkZWYgdGVzdF9weXRob25fZGljdHMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBQeXRob24gc3ViY2xhc3Mgb2YgZGljdC4uLgotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhkaWN0LCBkaWN0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoe30sIGRpY3QpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhkaWN0LCBkaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHt9LCBkaWN0KQogICAgICAgICBkID0gZGljdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwge30pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkLl9fY2xhc3NfXyBpcyBkaWN0KQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShkLCBkaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuX19jbGFzc19fIGlzIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLCBkaWN0KQogICAgICAgICBjbGFzcyBDKGRpY3QpOgogICAgICAgICAgICAgc3RhdGUgPSAtMQogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGZfbG9jYWwsICphLCAqKmt3KToKQEAgLTQwMSwxMyArNDE2LDEzIEBACiAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXQoa2V5LCAwKQogICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGZfbG9jYWwsIGtleSwgdmFsdWUpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGtleSwgdHlwZSgwKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGtleSwgdHlwZSgwKSkKICAgICAgICAgICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGZfbG9jYWwsIGtleSwgdmFsdWUpCiAgICAgICAgICAgICBkZWYgc2V0c3RhdGUoc2VsZiwgc3RhdGUpOgogICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZQogICAgICAgICAgICAgZGVmIGdldHN0YXRlKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnN0YXRlCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKEMsIGRpY3QpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBkaWN0KSkKICAgICAgICAgYTEgPSBDKDEyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGExLnN0YXRlLCAxMikKICAgICAgICAgYTIgPSBDKGZvbz0xLCBiYXI9MikKQEAgLTUwMSw3ICs1MTYsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiA0MgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMubmFtZSwgJ0MnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuYmFzZXMsICgpKQotICAgICAgICBzZWxmLmFzc2VydF8oJ3NwYW0nIGluIEMuZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc3BhbScsIEMuZGljdCkKICAgICAgICAgYyA9IEMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc3BhbSgpLCA0MikKIApAQCAtNTY4LDcgKzU4Myw3IEBACiAgICAgICAgICAgICBkZWYgX3NldF94KHNlbGYsIHgpOgogICAgICAgICAgICAgICAgIHNlbGYuX194ID0gLXgKICAgICAgICAgYSA9IEEoKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGhhc2F0dHIoYSwgIngiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGEsICJ4IikpCiAgICAgICAgIGEueCA9IDEyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS54LCAxMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9BX194LCAtMTIpCkBAIC02MjgsNyArNjQzLDYgQEAKICAgICBkZWYgdGVzdF9tb2R1bGVfc3ViY2xhc3NlcyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIFB5dGhvbiBzdWJjbGFzcyBvZiBtb2R1bGUuLi4KICAgICAgICAgbG9nID0gW10KLSAgICAgICAgaW1wb3J0IHR5cGVzLCBzeXMKICAgICAgICAgTVQgPSB0eXBlKHN5cykKICAgICAgICAgY2xhc3MgTU0oTVQpOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgpAQCAtODgzLDggKzg5NywxMSBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGNhbGxhYmxlKCphcmdzKQogICAgICAgICAgICAgZXhjZXB0IGV4YywgbXNnOgotICAgICAgICAgICAgICAgIGlmIG5vdCBzdHIobXNnKS5zdGFydHN3aXRoKGV4cGVjdGVkKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJNZXNzYWdlICVyLCBleHBlY3RlZCAlciIgJSAoc3RyKG1zZyksIGV4cGVjdGVkKSkKKyAgICAgICAgICAgICAgICAjIHRoZSBleGFjdCBtc2cgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgYW4gaW1wbCBkZXRhaWwKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuY2hlY2tfaW1wbF9kZXRhaWwoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0cihtc2cpLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJNZXNzYWdlICVyLCBleHBlY3RlZCAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHIobXNnKSwgZXhwZWN0ZWQpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkICVzIiAlIGV4YykKIApAQCAtMTA3Nyw2ICsxMDk0LDcgQEAKICAgICAgICAgeC5jID0gQ291bnRlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAzKQogICAgICAgICBkZWwgeAorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAwKQogICAgICAgICBjbGFzcyBEKEMpOgogICAgICAgICAgICAgcGFzcwpAQCAtMTA4NSw2ICsxMTAzLDcgQEAKICAgICAgICAgeC56ID0gQ291bnRlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAyKQogICAgICAgICBkZWwgeAorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAwKQogICAgICAgICBjbGFzcyBFKEQpOgogICAgICAgICAgICAgX19zbG90c19fID0gWydlJ10KQEAgLTEwOTQsMzIgKzExMTMsMzMgQEAKICAgICAgICAgeC5lID0gQ291bnRlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAzKQogICAgICAgICBkZWwgeAorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAwKQogCiAgICAgICAgICMgVGVzdCBjeWNsaWNhbCBsZWFrcyBbU0YgYnVnIDUxOTYyMV0KICAgICAgICAgY2xhc3MgRihvYmplY3QpOgogICAgICAgICAgICAgX19zbG90c19fID0gWydhJywgJ2InXQotICAgICAgICBsb2cgPSBbXQogICAgICAgICBzID0gRigpCiAgICAgICAgIHMuYSA9IFtDb3VudGVkKCksIHNdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAxKQogICAgICAgICBzID0gTm9uZQotICAgICAgICBpbXBvcnQgZ2MKLSAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVkLmNvdW50ZXIsIDApCiAKICAgICAgICAgIyBUZXN0IGxvb2t1cCBsZWFrcyBbU0YgYnVnIDU3MjU2N10KLSAgICAgICAgaW1wb3J0IHN5cyxnYwotICAgICAgICBjbGFzcyBHKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCi0gICAgICAgIGcgPSBHKCkKLSAgICAgICAgb3JpZ19vYmplY3RzID0gbGVuKGdjLmdldF9vYmplY3RzKCkpCi0gICAgICAgIGZvciBpIGluIHhyYW5nZSgxMCk6Ci0gICAgICAgICAgICBnPT1nCi0gICAgICAgIG5ld19vYmplY3RzID0gbGVuKGdjLmdldF9vYmplY3RzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZ19vYmplY3RzLCBuZXdfb2JqZWN0cykKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGlmIGhhc2F0dHIoZ2MsICdnZXRfb2JqZWN0cycpOgorICAgICAgICAgICAgY2xhc3MgRyhvYmplY3QpOgorICAgICAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICAgICAgZyA9IEcoKQorICAgICAgICAgICAgb3JpZ19vYmplY3RzID0gbGVuKGdjLmdldF9vYmplY3RzKCkpCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTApOgorICAgICAgICAgICAgICAgIGc9PWcKKyAgICAgICAgICAgIG5ld19vYmplY3RzID0gbGVuKGdjLmdldF9vYmplY3RzKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWdfb2JqZWN0cywgbmV3X29iamVjdHMpCisKICAgICAgICAgY2xhc3MgSChvYmplY3QpOgogICAgICAgICAgICAgX19zbG90c19fID0gWydhJywgJ2InXQogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtMTEzNSwxOSArMTE1NSwxNSBAQAogCiAgICAgICAgIGNsYXNzIFgob2JqZWN0KToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9ICJhIgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgZGVsIFgoKS5hCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkbid0IHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKIAogICAgIGRlZiB0ZXN0X3Nsb3RzX3NwZWNpYWwoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBfX2RpY3RfXyBhbmQgX193ZWFrcmVmX18gaW4gX19zbG90c19fLi4uCiAgICAgICAgIGNsYXNzIEQob2JqZWN0KToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiX19kaWN0X18iXQogICAgICAgICBhID0gRCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKGEsICJfX2RpY3RfXyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhLCAiX19kaWN0X18iKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGEsICJfX3dlYWtyZWZfXyIpKQogICAgICAgICBhLmZvbyA9IDQyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2RpY3RfXywgeyJmb28iOiA0Mn0pCkBAIC0xMTU1LDcgKzExNzEsNyBAQAogICAgICAgICBjbGFzcyBXKG9iamVjdCk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbIl9fd2Vha3JlZl9fIl0KICAgICAgICAgYSA9IFcoKQotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihhLCAiX193ZWFrcmVmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYSwgIl9fd2Vha3JlZl9fIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhLCAiX19kaWN0X18iKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYS5mb28gPSA0MgpAQCAtMTE2NywxNiArMTE4MywxNiBAQAogICAgICAgICBjbGFzcyBDMShXLCBEKToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFtdCiAgICAgICAgIGEgPSBDMSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKGEsICJfX2RpY3RfXyIpKQotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihhLCAiX193ZWFrcmVmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYSwgIl9fZGljdF9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGEsICJfX3dlYWtyZWZfXyIpKQogICAgICAgICBhLmZvbyA9IDQyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2RpY3RfXywgeyJmb28iOiA0Mn0pCiAKICAgICAgICAgY2xhc3MgQzIoRCwgVyk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbXQogICAgICAgICBhID0gQzIoKQotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihhLCAiX19kaWN0X18iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoYSwgIl9fd2Vha3JlZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGEsICJfX2RpY3RfXyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhLCAiX193ZWFrcmVmX18iKSkKICAgICAgICAgYS5mb28gPSA0MgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19kaWN0X18sIHsiZm9vIjogNDJ9KQogCkBAIC0xMTkzLDcgKzEyMDksNyBAQAogICAgICAgICBNeUFCQy5yZWdpc3RlcihVbnJlbGF0ZWQpCiAKICAgICAgICAgdSA9IFVucmVsYXRlZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHUsIE15QUJDKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHUsIE15QUJDKQogCiAgICAgICAgICMgVGhpcyB1c2VkIHRvIGNyYXNoCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgTXlBQkMuYS5fX3NldF9fLCB1LCAzKQpAQCAtMTM3NiwxMyArMTM5Miw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VwZXIoRCxEKS5nb28oKSwgKEQsKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdXBlcihELGQpLmdvbygpLCAoRCwpKQogCi0gICAgICAgICMgVmVyaWZ5IHRoYXQgYXJndW1lbnQgaXMgY2hlY2tlZCBmb3IgY2FsbGFiaWxpdHkgKFNGIGJ1ZyA3NTM0NTEpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNsYXNzbWV0aG9kKDEpLl9fZ2V0X18oMSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiY2xhc3NtZXRob2Qgc2hvdWxkIGNoZWNrIGZvciBjYWxsYWJpbGl0eSIpCisgICAgICAgICMgVmVyaWZ5IHRoYXQgYSBub24tY2FsbGFibGUgd2lsbCByYWlzZQorICAgICAgICBtZXRoID0gY2xhc3NtZXRob2QoMSkuX19nZXRfXygxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgpCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCBjbGFzc21ldGhvZCgpIGRvZXNuJ3QgYWxsb3cga2V5d29yZCBhcmdzCiAgICAgICAgIHRyeToKQEAgLTEzOTIsNiArMTQwNCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImNsYXNzbWV0aG9kIHNob3VsZG4ndCBhY2NlcHQga2V5d29yZCBhcmdzIikKIAorICAgIEB0ZXN0X3N1cHBvcnQuaW1wbF9kZXRhaWwoInRoZSBtb2R1bGUgJ3h4c3VidHlwZScgaXMgaW50ZXJuYWwiKQogICAgIGRlZiB0ZXN0X2NsYXNzbWV0aG9kc19pbl9jKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgQy1iYXNlZCBjbGFzcyBtZXRob2RzLi4uCiAgICAgICAgIGltcG9ydCB4eHN1YnR5cGUgYXMgc3BhbQpAQCAtMTQyMyw2ICsxNDM2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvbygxKSwgKGQsIDEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZm9vKGQsIDEpLCAoZCwgMSkpCiAKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0aGUgbW9kdWxlICd4eHN1YnR5cGUnIGlzIGludGVybmFsIikKICAgICBkZWYgdGVzdF9zdGF0aWNtZXRob2RzX2luX2Moc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBDLWJhc2VkIHN0YXRpYyBtZXRob2RzLi4uCiAgICAgICAgIGltcG9ydCB4eHN1YnR5cGUgYXMgc3BhbQpAQCAtMTQ1Niw3ICsxNDcwLDcgQEAKICAgICAgICAgY2xhc3MgRTogIyAqbm90KiBzdWJjbGFzc2luZyBmcm9tIEMKICAgICAgICAgICAgIGZvbyA9IEMuZm9vCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRSgpLmZvbywgQy5mb28pICMgaS5lLiwgdW5ib3VuZAotICAgICAgICBzZWxmLmFzc2VydF8ocmVwcihDLmZvby5fX2dldF9fKEMoKSkpLnN0YXJ0c3dpdGgoIjxib3VuZCBtZXRob2QgIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKEMuZm9vLl9fZ2V0X18oQygpKSkuc3RhcnRzd2l0aCgiPGJvdW5kIG1ldGhvZCAiKSkKIAogICAgIGRlZiB0ZXN0X2NvbXBhdHRyKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgY29tcHV0ZWQgYXR0cmlidXRlcy4uLgpAQCAtMTUzOSw2ICsxNTUzLDE0IEBACiAgICAgICAgICAgICAgICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKICAgICAgICAgICAgICAgICAgICAgZGVmIG1ybyhzZWxmKToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbc2VsZiwgZGljdCwgb2JqZWN0XQorICAgICAgICAgICAgIyBJbiBDUHl0aG9uLCB0aGUgY2xhc3MgY3JlYXRpb24gYWJvdmUgYWxyZWFkeSByYWlzZXMKKyAgICAgICAgICAgICMgVHlwZUVycm9yLCBhcyBhIHByb3RlY3Rpb24gYWdhaW5zdCB0aGUgZmFjdCB0aGF0CisgICAgICAgICAgICAjIGluc3RhbmNlcyBvZiBYIHdvdWxkIHNlZ2ZhdWx0IGl0LiAgSW4gb3RoZXIgUHl0aG9uCisgICAgICAgICAgICAjIGltcGxlbWVudGF0aW9ucyBpdCB3b3VsZCBiZSBvayB0byBsZXQgdGhlIGNsYXNzIFgKKyAgICAgICAgICAgICMgYmUgY3JlYXRlZCwgYnV0IGluc3RlYWQgZ2V0IGEgY2xlYW4gVHlwZUVycm9yIG9uIHRoZQorICAgICAgICAgICAgIyBfX3NldGl0ZW1fXyBiZWxvdy4KKyAgICAgICAgICAgIHggPSBvYmplY3QuX19uZXdfXyhYKQorICAgICAgICAgICAgeFs1XSA9IDYKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKQEAgLTE2MzksNyArMTY2MSwxMTIgQEAKICAgICAgICAgY2xhc3MgRShvYmplY3QpOgogICAgICAgICAgICAgZm9vID0gQy5mb28KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFKCkuZm9vLCBDLmZvbykgIyBpLmUuLCB1bmJvdW5kCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXByKEMuZm9vLl9fZ2V0X18oQygxKSkpLnN0YXJ0c3dpdGgoIjxib3VuZCBtZXRob2QgIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKEMuZm9vLl9fZ2V0X18oQygxKSkpLnN0YXJ0c3dpdGgoIjxib3VuZCBtZXRob2QgIikpCisKKyAgICBkZWYgdGVzdF9zcGVjaWFsX21ldGhvZF9sb29rdXAoc2VsZik6CisgICAgICAgICMgVGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgYnlwYXNzZXMgX19nZXRhdHRyX18gYW5kCisgICAgICAgICMgX19nZXRhdHRyaWJ1dGVfXywgYnV0IHRoZXkgc3RpbGwgY2FuIGJlIGRlc2NyaXB0b3JzLgorCisgICAgICAgIGRlZiBydW5fY29udGV4dChtYW5hZ2VyKToKKyAgICAgICAgICAgIHdpdGggbWFuYWdlcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBpZGVuKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZGVmIGhlbGxvKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJoZWxsbyIKKyAgICAgICAgZGVmIGVtcHR5X3NlcShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBkZWYgemVybyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGRlZiBjb21wbGV4X251bShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAxagorICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgZGVmIHJldHVybl90cnVlKHNlbGYsIHRoaW5nPU5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZGVmIGRvX2lzaW5zdGFuY2Uob2JqKToKKyAgICAgICAgICAgIHJldHVybiBpc2luc3RhbmNlKGludCwgb2JqKQorICAgICAgICBkZWYgZG9faXNzdWJjbGFzcyhvYmopOgorICAgICAgICAgICAgcmV0dXJuIGlzc3ViY2xhc3MoaW50LCBvYmopCisgICAgICAgIGRlZiBzd2FsbG93KCphcmdzKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGRvX2RpY3RfbWlzc2luZyhjaGVja2VyKToKKyAgICAgICAgICAgIGNsYXNzIERpY3RTdWIoY2hlY2tlci5fX2NsYXNzX18sIGRpY3QpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGljdFN1YigpWyJoaSJdLCA0KQorICAgICAgICBkZWYgc29tZV9udW1iZXIoc2VsZl8sIGtleSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSwgImhpIikKKyAgICAgICAgICAgIHJldHVybiA0CisgICAgICAgIGRlZiBmb3JtYXRfaW1wbChzZWxmLCBzcGVjKToKKyAgICAgICAgICAgIHJldHVybiAiaGVsbG8iCisKKyAgICAgICAgIyBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgZXZlcnkgc3BlY2lhbCBtZXRob2QgdGVzdGVkIGhlcmUsIGJ1dCBJJ20KKyAgICAgICAgIyBvbmx5IGxpc3RpbmcgdGhlIG9uZXMgSSBjYW4gcmVtZW1iZXIgb3V0c2lkZSBvZiB0eXBlb2JqZWN0LmMsIHNpbmNlIGl0CisgICAgICAgICMgZG9lcyBpdCByaWdodC4KKyAgICAgICAgc3BlY2lhbHMgPSBbCisgICAgICAgICAgICAoIl9fdW5pY29kZV9fIiwgdW5pY29kZSwgaGVsbG8sIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fcmV2ZXJzZWRfXyIsIHJldmVyc2VkLCBlbXB0eV9zZXEsIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fbGVuZ3RoX2hpbnRfXyIsIGxpc3QsIHplcm8sIHNldCgpLAorICAgICAgICAgICAgIHsiX19pdGVyX18iIDogaWRlbiwgIm5leHQiIDogc3RvcH0pLAorICAgICAgICAgICAgKCJfX3NpemVvZl9fIiwgc3lzLmdldHNpemVvZiwgemVybywgc2V0KCksIHt9KSwKKyAgICAgICAgICAgICgiX19pbnN0YW5jZWNoZWNrX18iLCBkb19pc2luc3RhbmNlLCByZXR1cm5fdHJ1ZSwgc2V0KCksIHt9KSwKKyAgICAgICAgICAgICgiX19taXNzaW5nX18iLCBkb19kaWN0X21pc3NpbmcsIHNvbWVfbnVtYmVyLAorICAgICAgICAgICAgIHNldCgoIl9fY2xhc3NfXyIsKSksIHt9KSwKKyAgICAgICAgICAgICgiX19zdWJjbGFzc2NoZWNrX18iLCBkb19pc3N1YmNsYXNzLCByZXR1cm5fdHJ1ZSwKKyAgICAgICAgICAgICBzZXQoKCJfX2Jhc2VzX18iLCkpLCB7fSksCisgICAgICAgICAgICAoIl9fZW50ZXJfXyIsIHJ1bl9jb250ZXh0LCBpZGVuLCBzZXQoKSwgeyJfX2V4aXRfXyIgOiBzd2FsbG93fSksCisgICAgICAgICAgICAoIl9fZXhpdF9fIiwgcnVuX2NvbnRleHQsIHN3YWxsb3csIHNldCgpLCB7Il9fZW50ZXJfXyIgOiBpZGVufSksCisgICAgICAgICAgICAoIl9fY29tcGxleF9fIiwgY29tcGxleCwgY29tcGxleF9udW0sIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fZm9ybWF0X18iLCBmb3JtYXQsIGZvcm1hdF9pbXBsLCBzZXQoKSwge30pLAorICAgICAgICAgICAgXQorCisgICAgICAgIGNsYXNzIENoZWNrZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyLCB0ZXN0PXNlbGYpOgorICAgICAgICAgICAgICAgIHRlc3QuZmFpbCgiX19nZXRhdHRyX18gY2FsbGVkIHdpdGggezB9Ii5mb3JtYXQoYXR0cikpCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBhdHRyLCB0ZXN0PXNlbGYpOgorICAgICAgICAgICAgICAgIGlmIGF0dHIgbm90IGluIG9rOgorICAgICAgICAgICAgICAgICAgICB0ZXN0LmZhaWwoIl9fZ2V0YXR0cmlidXRlX18gY2FsbGVkIHdpdGggezB9Ii5mb3JtYXQoYXR0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIGF0dHIpCisgICAgICAgIGNsYXNzIFNwZWNpYWxEZXNjcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltcGwpOgorICAgICAgICAgICAgICAgIHNlbGYuaW1wbCA9IGltcGwKKyAgICAgICAgICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iaiwgb3duZXIpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbXBsLl9fZ2V0X18ob2JqLCBvd25lcikKKyAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRXJyRGVzY3Iob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iaiwgb3duZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIE15RXhjZXB0aW9uCisKKyAgICAgICAgZm9yIG5hbWUsIHJ1bm5lciwgbWV0aF9pbXBsLCBvaywgZW52IGluIHNwZWNpYWxzOgorICAgICAgICAgICAgY2xhc3MgWChDaGVja2VyKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBmb3IgYXR0ciwgb2JqIGluIGVudi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKFgsIGF0dHIsIG9iaikKKyAgICAgICAgICAgIHNldGF0dHIoWCwgbmFtZSwgbWV0aF9pbXBsKQorICAgICAgICAgICAgcnVubmVyKFgoKSkKKworICAgICAgICAgICAgcmVjb3JkID0gW10KKyAgICAgICAgICAgIGNsYXNzIFgoQ2hlY2tlcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZm9yIGF0dHIsIG9iaiBpbiBlbnYuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihYLCBhdHRyLCBvYmopCisgICAgICAgICAgICBzZXRhdHRyKFgsIG5hbWUsIFNwZWNpYWxEZXNjcihtZXRoX2ltcGwpKQorICAgICAgICAgICAgcnVubmVyKFgoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkLCBbMV0sIG5hbWUpCisKKyAgICAgICAgICAgIGNsYXNzIFgoQ2hlY2tlcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZm9yIGF0dHIsIG9iaiBpbiBlbnYuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihYLCBhdHRyLCBvYmopCisgICAgICAgICAgICBzZXRhdHRyKFgsIG5hbWUsIEVyckRlc2NyKCkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVubmVyKFgoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBNeUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiezAhcn0gZGlkbid0IHJhaXNlIi5mb3JtYXQobmFtZSkpCiAKICAgICBkZWYgdGVzdF9zcGVjaWFscyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNwZWNpYWwgb3BlcmF0b3JzLi4uCkBAIC0xNjUyLDIzICsxNzc5LDIzIEBACiAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgogICAgICAgICBjMSA9IEMoKQogICAgICAgICBjMiA9IEMoKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG5vdCBjMSkgIyBXaGF0PworICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG5vdCBjMSkgIyBXaGF0PwogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGMxKSwgaWQoYzIpKQogICAgICAgICBoYXNoKGMxKQogICAgICAgICBoYXNoKGMyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChjMSwgYzIpLCBjbXAoaWQoYzEpLCBpZChjMikpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMxLCBjMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGMxICE9IGMyKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGMxICE9IGMxKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGMxID09IGMyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYzEgIT0gYzIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYzEgIT0gYzEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYzEgPT0gYzIpCiAgICAgICAgICMgTm90ZSB0aGF0IHRoZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluIHN0ci9yZXByLCBhbmQgdGhhdCB2YXJpZXMKICAgICAgICAgIyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIHRlc3QgaXMgcnVuIHN0YW5kYWxvbmUgb3IgZnJvbSBhIGZyYW1ld29yay4KLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cihjMSkuZmluZCgnQyBvYmplY3QgYXQgJykgPj0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihjMSkuZmluZCgnQyBvYmplY3QgYXQgJykgPj0gMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYzEpLCByZXByKGMxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKC0xIG5vdCBpbiBjMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtMSwgYzEpCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpIGluIGMxKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDEwIGluIGMxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBjMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMCwgYzEpCiAgICAgICAgICMgVGVzdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgZHluYW1pYyBjbGFzc2VzCiAgICAgICAgIGNsYXNzIEQob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKQEAgLTE2NzYsMjMgKzE4MDMsMjMgQEAKICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCiAgICAgICAgIGQxID0gRCgpCiAgICAgICAgIGQyID0gRCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgbm90IGQxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG5vdCBkMSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkMSksIGlkKGQyKSkKICAgICAgICAgaGFzaChkMSkKICAgICAgICAgaGFzaChkMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZDEsIGQyKSwgY21wKGlkKGQxKSwgaWQoZDIpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgZDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZDEsIGQyKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGQxICE9IGQxKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGQxID09IGQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGQxICE9IGQxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGQxID09IGQyKQogICAgICAgICAjIE5vdGUgdGhhdCB0aGUgbW9kdWxlIG5hbWUgYXBwZWFycyBpbiBzdHIvcmVwciwgYW5kIHRoYXQgdmFyaWVzCiAgICAgICAgICMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyB0ZXN0IGlzIHJ1biBzdGFuZGFsb25lIG9yIGZyb20gYSBmcmFtZXdvcmsuCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHIoZDEpLmZpbmQoJ0Qgb2JqZWN0IGF0ICcpID49IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoZDEpLmZpbmQoJ0Qgb2JqZWN0IGF0ICcpID49IDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQxKSwgcmVwcihkMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtMSBub3QgaW4gZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTEsIGQxKQogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaSBpbiBkMSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgxMCBpbiBkMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIGQxKQogICAgICAgICAjIFRlc3Qgb3ZlcnJpZGRlbiBiZWhhdmlvciBmb3Igc3RhdGljIGNsYXNzZXMKICAgICAgICAgY2xhc3MgUHJveHkob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKQEAgLTE3MTcsMTEgKzE4NDQsMTEgQEAKICAgICAgICAgcDEgPSBQcm94eSgxKQogICAgICAgICBwXzEgPSBQcm94eSgtMSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBub3QgcDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgbm90IHAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gocDApLCBoYXNoKDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAwLCBwMCkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwMCwgcDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgcDAgIT0gcDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcDAgIT0gcDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm90IHAwLCBwMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAocDAsIHAxKSwgLTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHAwLCBwMCksIDApCkBAIC0xNzI5LDEwICsxODU2LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHAwKSwgIlByb3h5OjAiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocDApLCAiUHJveHkoMCkiKQogICAgICAgICBwMTAgPSBQcm94eShyYW5nZSgxMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoLTEgaW4gcDEwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC0xLCBwMTApCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpIGluIHAxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgxMCBpbiBwMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIHAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMCwgcDEwKQogICAgICAgICAjIFRlc3Qgb3ZlcnJpZGRlbiBiZWhhdmlvciBmb3IgZHluYW1pYyBjbGFzc2VzCiAgICAgICAgIGNsYXNzIERQcm94eShvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMTc1Nyw3ICsxODg0LDcgQEAKICAgICAgICAgcDEgPSBEUHJveHkoMSkKICAgICAgICAgcF8xID0gRFByb3h5KC0xKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAwKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG5vdCBwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBub3QgcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChwMCksIGhhc2goMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDAsIHAwKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAwLCBwMSkKQEAgLTE3NjksMTUgKzE4OTYsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocDApLCAiRFByb3h5OjAiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocDApLCAiRFByb3h5KDApIikKICAgICAgICAgcDEwID0gRFByb3h5KHJhbmdlKDEwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgtMSBpbiBwMTApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTEsIHAxMCkKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGkgaW4gcDEwKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDEwIGluIHAxMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgcDEwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEwLCBwMTApCiAKICAgICAgICAgIyBTYWZldHkgdGVzdCBmb3IgX19jbXBfXwogICAgICAgICBkZWYgdW5zYWZlY21wKGEsIGIpOgotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoYS5fX2NsYXNzX18sICJfX2NtcF9fIik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihhLCAnX19jbXBfXycpOgorICAgICAgICAgICAgICAgIHJldHVybiAgICMgc29tZSB0eXBlcyBkb24ndCBoYXZlIGEgX19jbXBfXyBhbnkgbW9yZSAoc28gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IGRvZXNuJ3QgbWFrZSBzZW5zZSBhbnkgbW9yZSksIG9yIG1heWJlIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIG5ldmVyIGhhZCBhIF9fY21wX18gYXQgYWxsLCBlLmcuIGluIFB5UHkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhLl9fY2xhc3NfXy5fX2NtcF9fKGEsIGIpCiAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgpAQCAtMTc5Myw3ICsxOTIyLDggQEAKICAgICAgICAgdW5zYWZlY21wKDEsIDFMKQogICAgICAgICB1bnNhZmVjbXAoMUwsIDEpCiAKLSAgICBkZWYgdGVzdF9yZWN1cnNpb25zKHNlbGYpOgorICAgIEB0ZXN0X3N1cHBvcnQuaW1wbF9kZXRhaWwoImN1c3RvbSBsb2dpYyBmb3IgcHJpbnRpbmcgdG8gcmVhbCBmaWxlIG9iamVjdHMiKQorICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbnNfMShzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHJlY3Vyc2lvbiBjaGVja3MgLi4uCiAgICAgICAgIGNsYXNzIExldHRlcihzdHIpOgogICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBsZXR0ZXIpOgpAQCAtMTgwNSw3ICsxOTM1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFUFMnCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKICAgICAgICAgIyBzeXMuc3Rkb3V0IG5lZWRzIHRvIGJlIHRoZSBvcmlnaW5hbCB0byB0cmlnZ2VyIHRoZSByZWN1cnNpb24gYnVnCi0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgdGVzdF9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgIHN5cy5zdGRvdXQgPSB0ZXN0X3N1cHBvcnQuZ2V0X29yaWdpbmFsX3N0ZG91dCgpCiAgICAgICAgIHRyeToKQEAgLTE4MTgsNiArMTk0Nyw3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gdGVzdF9zdGRvdXQKIAorICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbnNfMihzZWxmKToKICAgICAgICAgIyBCdWcgIzEyMDI1MzMuCiAgICAgICAgIGNsYXNzIEEob2JqZWN0KToKICAgICAgICAgICAgIHBhc3MKQEAgLTE4MzgsNiArMTk2OCw3IEBACiAgICAgICAgIHIgPSB3ZWFrcmVmLnJlZihjKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSwgYykKICAgICAgICAgZGVsIGMKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSwgTm9uZSkKICAgICAgICAgZGVsIHIKICAgICAgICAgY2xhc3MgTm9XZWFrKG9iamVjdCk6CkBAIC0xODQ2LDcgKzE5NzcsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3ZWFrcmVmLnJlZihubykKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgbXNnOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHN0cihtc2cpLmZpbmQoIndlYWsgcmVmZXJlbmNlIikgPj0gMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIobXNnKS5maW5kKCJ3ZWFrIHJlZmVyZW5jZSIpID49IDApCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIndlYWtyZWYucmVmKG5vKSBzaG91bGQgYmUgaWxsZWdhbCIpCiAgICAgICAgIGNsYXNzIFdlYWsob2JqZWN0KToKQEAgLTE4NTUsNiArMTk4Niw3IEBACiAgICAgICAgIHIgPSB3ZWFrcmVmLnJlZih5ZXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocigpLCB5ZXMpCiAgICAgICAgIGRlbCB5ZXMKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSwgTm9uZSkKICAgICAgICAgZGVsIHIKIApAQCAtMTg4MiwxOCArMjAxNCwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYSwgIngiKSkKIAogICAgICAgICByYXcgPSBDLl9fZGljdF9fWyd4J10KLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocmF3LCBwcm9wZXJ0eSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyYXcsIHByb3BlcnR5KQogCiAgICAgICAgIGF0dHJzID0gZGlyKHJhdykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJfX2RvY19fIiBpbiBhdHRycykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJmZ2V0IiBpbiBhdHRycykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJmc2V0IiBpbiBhdHRycykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJmZGVsIiBpbiBhdHRycykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX19kb2NfXyIsIGF0dHJzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmZ2V0IiwgYXR0cnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZzZXQiLCBhdHRycykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZmRlbCIsIGF0dHJzKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3Ll9fZG9jX18sICJJJ20gdGhlIHggcHJvcGVydHkuIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJhdy5mZ2V0IGlzIEMuX19kaWN0X19bJ2dldHgnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJhdy5mc2V0IGlzIEMuX19kaWN0X19bJ3NldHgnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJhdy5mZGVsIGlzIEMuX19kaWN0X19bJ2RlbHgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJhdy5mZ2V0IGlzIEMuX19kaWN0X19bJ2dldHgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJhdy5mc2V0IGlzIEMuX19kaWN0X19bJ3NldHgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJhdy5mZGVsIGlzIEMuX19kaWN0X19bJ2RlbHgnXSkKIAogICAgICAgICBmb3IgYXR0ciBpbiAiX19kb2NfXyIsICJmZ2V0IiwgImZzZXQiLCAiZmRlbCI6CiAgICAgICAgICAgICB0cnk6CkBAIC0xOTE4LDYgKzIwNTAsOSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvciBmcm9tIGJhZCBwcm9wZXJ0eSIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0aWVzX2RvY19hdHRyaWIoc2VsZik6CiAgICAgICAgIGNsYXNzIEUob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBnZXR0ZXIoc2VsZik6CiAgICAgICAgICAgICAgICAgImdldHRlciBtZXRob2QiCkBAIC0xOTMwLDYgKzIwNjUsNyBAQAogICAgICAgICAgICAgcHJvcDIgPSBwcm9wZXJ0eShmc2V0PXNldHRlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcDIuX19kb2NfXywgTm9uZSkKIAorICAgIGRlZiB0ZXN0X3Rlc3RjYXBpX25vX3NlZ2ZhdWx0KHNlbGYpOgogICAgICAgICAjIHRoaXMgc2VnZmF1bHRlZCBpbiAyLjViMgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCkBAIC0xOTU1LDcgKzIwOTEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuZm9vLl9fZG9jX18sICJoZWxsbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjLCAiZm9vIikpCiAgICAgICAgIGMuZm9vID0gLTQyCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKGMsICdfZm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGMsICdfZm9vJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fZm9vLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZvbywgNDIpCiAgICAgICAgIGRlbCBjLmZvbwpAQCAtMjEwNiw3ICsyMjQyLDcgQEAKIAogICAgICAgICBjc3R1ZmYgPSBbJ0NkYXRhJywgJ0NtZXRob2QnLCAnX19kb2NfXycsICdfX21vZHVsZV9fJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoQyksIGNzdHVmZikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdpbV9zZWxmJyBpbiBkaXIoQy5DbWV0aG9kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihDLkNtZXRob2QpKQogCiAgICAgICAgIGMgPSBDKCkgICMgYy5fX2RvY19fIGlzIGFuIG9kZCB0aGluZyB0byBzZWUgaGVyZTsgZGl0dG8gYy5fX21vZHVsZV9fLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihjKSwgY3N0dWZmKQpAQCAtMjExNCw3ICsyMjUwLDcgQEAKICAgICAgICAgYy5jZGF0YSA9IDIKICAgICAgICAgYy5jbWV0aG9kID0gbGFtYmRhIHNlbGY6IDAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoYyksIGNzdHVmZiArIFsnY2RhdGEnLCAnY21ldGhvZCddKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2ltX3NlbGYnIGluIGRpcihjLkNtZXRob2QpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKGMuQ21ldGhvZCkpCiAKICAgICAgICAgY2xhc3MgQShDKToKICAgICAgICAgICAgIEFkYXRhID0gMQpAQCAtMjEyMiwxMCArMjI1OCwxMCBAQAogCiAgICAgICAgIGFzdHVmZiA9IFsnQWRhdGEnLCAnQW1ldGhvZCddICsgY3N0dWZmCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKEEpLCBhc3R1ZmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnaW1fc2VsZicgaW4gZGlyKEEuQW1ldGhvZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltX3NlbGYnLCBkaXIoQS5BbWV0aG9kKSkKICAgICAgICAgYSA9IEEoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihhKSwgYXN0dWZmKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2ltX3NlbGYnIGluIGRpcihhLkFtZXRob2QpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKGEuQW1ldGhvZCkpCiAgICAgICAgIGEuYWRhdGEgPSA0MgogICAgICAgICBhLmFtZXRob2QgPSBsYW1iZGEgc2VsZjogMwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihhKSwgYXN0dWZmICsgWydhZGF0YScsICdhbWV0aG9kJ10pCkBAIC0yMTQ0LDEyICsyMjgwLDEyIEBACiAKICAgICAgICAgYyA9IEMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyZXN0aW5nKGRpcihjKSksIGNzdHVmZikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdpbV9zZWxmJyBpbiBkaXIoQy5DbWV0aG9kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihDLkNtZXRob2QpKQogCiAgICAgICAgIGMuY2RhdGEgPSAyCiAgICAgICAgIGMuY21ldGhvZCA9IGxhbWJkYSBzZWxmOiAwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJlc3RpbmcoZGlyKGMpKSwgY3N0dWZmICsgWydjZGF0YScsICdjbWV0aG9kJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnaW1fc2VsZicgaW4gZGlyKGMuQ21ldGhvZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltX3NlbGYnLCBkaXIoYy5DbWV0aG9kKSkKIAogICAgICAgICBjbGFzcyBBKEMpOgogICAgICAgICAgICAgQWRhdGEgPSAxCkBAIC0yMTU3LDE2ICsyMjkzLDE1IEBACiAKICAgICAgICAgYXN0dWZmID0gWydBZGF0YScsICdBbWV0aG9kJ10gKyBjc3R1ZmYKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmVzdGluZyhkaXIoQSkpLCBhc3R1ZmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnaW1fc2VsZicgaW4gZGlyKEEuQW1ldGhvZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltX3NlbGYnLCBkaXIoQS5BbWV0aG9kKSkKICAgICAgICAgYSA9IEEoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyZXN0aW5nKGRpcihhKSksIGFzdHVmZikKICAgICAgICAgYS5hZGF0YSA9IDQyCiAgICAgICAgIGEuYW1ldGhvZCA9IGxhbWJkYSBzZWxmOiAzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJlc3RpbmcoZGlyKGEpKSwgYXN0dWZmICsgWydhZGF0YScsICdhbWV0aG9kJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnaW1fc2VsZicgaW4gZGlyKGEuQW1ldGhvZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltX3NlbGYnLCBkaXIoYS5BbWV0aG9kKSkKIAogICAgICAgICAjIFRyeSBhIG1vZHVsZSBzdWJjbGFzcy4KLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBjbGFzcyBNKHR5cGUoc3lzKSk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIG1pbnN0YW5jZSA9IE0oIm0iKQpAQCAtMjE5MSw3ICsyMzI2LDEwIEBACiAKICAgICAgICAgIyBUd28gZXNzZW50aWFsbHkgZmVhdHVyZWxlc3Mgb2JqZWN0cywganVzdCBpbmhlcml0aW5nIHN0dWZmIGZyb20KICAgICAgICAgIyBvYmplY3QuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKE5vbmUpLCBkaXIoRWxsaXBzaXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihOb3RJbXBsZW1lbnRlZCksIGRpcihFbGxpcHNpcykpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5jaGVja19pbXBsX2RldGFpbCgpOgorICAgICAgICAgICAgIyBOb25lIGRpZmZlcnMgaW4gUHlQeTogaXQgaGFzIGEgX19ub256ZXJvX18KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKE5vbmUpLCBkaXIoRWxsaXBzaXMpKQogCiAgICAgICAgICMgTmFzdHkgdGVzdCBjYXNlIGZvciBwcm94aWVkIG9iamVjdHMKICAgICAgICAgY2xhc3MgV3JhcHBlcihvYmplY3QpOgpAQCAtMjM0NCwxMyArMjQ4MiwxMyBAQAogICAgICAgICBhID0gaGV4aW50KDEyMzQ1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIDEyMzQ1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChhKSwgMTIzNDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhpbnQoYSkuX19jbGFzc19fIGlzIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChhKS5fX2NsYXNzX18gaXMgaW50KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goMTIzNDUpKQotICAgICAgICBzZWxmLmFzc2VydF8oKCthKS5fX2NsYXNzX18gaXMgaW50KQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPj4gMCkuX19jbGFzc19fIGlzIGludCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhIDw8IDApLl9fY2xhc3NfXyBpcyBpbnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoaGV4aW50KDApIDw8IDEyKS5fX2NsYXNzX18gaXMgaW50KQotICAgICAgICBzZWxmLmFzc2VydF8oKGhleGludCgwKSA+PiAxMikuX19jbGFzc19fIGlzIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgrYSkuX19jbGFzc19fIGlzIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID4+IDApLl9fY2xhc3NfXyBpcyBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8PCAwKS5fX2NsYXNzX18gaXMgaW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGhleGludCgwKSA8PCAxMikuX19jbGFzc19fIGlzIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChoZXhpbnQoMCkgPj4gMTIpLl9fY2xhc3NfXyBpcyBpbnQpCiAKICAgICAgICAgY2xhc3Mgb2N0bG9uZyhsb25nKToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFtdCkBAIC0yMzcwLDM2ICsyNTA4LDM2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgMTIzNDVMKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoYSksIDEyMzQ1TCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGEpLCBoYXNoKDEyMzQ1TCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhsb25nKGEpLl9fY2xhc3NfXyBpcyBsb25nKQotICAgICAgICBzZWxmLmFzc2VydF8oKCthKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgtYSkuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoLW9jdGxvbmcoMCkpLl9fY2xhc3NfXyBpcyBsb25nKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPj4gMCkuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA8PCAwKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhIC0gMCkuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSAqIDEpLl9fY2xhc3NfXyBpcyBsb25nKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgKiogMSkuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSAvLyAxKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgxICogYSkuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSB8IDApLl9fY2xhc3NfXyBpcyBsb25nKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgXiAwKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhICYgLTFMKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKChvY3Rsb25nKDApIDw8IDEyKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKChvY3Rsb25nKDApID4+IDEyKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGFicyhvY3Rsb25nKDApKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvbmcoYSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoK2EpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKC1hKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgtb2N0bG9uZygwKSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+PiAwKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDw8IDApLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgLSAwKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICogMSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqKiAxKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIC8vIDEpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKDEgKiBhKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIHwgMCkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSBeIDApLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgJiAtMUwpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKG9jdGxvbmcoMCkgPDwgMTIpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKG9jdGxvbmcoMCkgPj4gMTIpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJzKG9jdGxvbmcoMCkpLl9fY2xhc3NfXyBpcyBsb25nKQogCiAgICAgICAgICMgQmVjYXVzZSBvY3Rsb25nIG92ZXJyaWRlcyBfX2FkZF9fLCB3ZSBjYW4ndCBjaGVjayB0aGUgYWJzZW5jZSBvZiArMAogICAgICAgICAjIG9wdGltaXphdGlvbnMgdXNpbmcgb2N0bG9uZy4KICAgICAgICAgY2xhc3MgbG9uZ2Nsb25lKGxvbmcpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gbG9uZ2Nsb25lKDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSArIDApLl9fY2xhc3NfXyBpcyBsb25nKQotICAgICAgICBzZWxmLmFzc2VydF8oKDAgKyBhKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICsgMCkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoMCArIGEpLl9fY2xhc3NfXyBpcyBsb25nKQogCiAgICAgICAgICMgQ2hlY2sgdGhhdCBuZWdhdGl2ZSBjbG9uZXMgZG9uJ3Qgc2VnZmF1bHQKICAgICAgICAgYSA9IGxvbmdjbG9uZSgtMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZGljdF9fLCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGEpLCAtMSkgICMgc2VsZi5hc3NlcnRfIFB5TnVtYmVyX0xvbmcoKSBjb3BpZXMgdGhlIHNpZ24gYml0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhhKSwgLTEpICAjIHNlbGYuYXNzZXJ0VHJ1ZSBQeU51bWJlcl9Mb25nKCkgY29waWVzIHRoZSBzaWduIGJpdAogCiAgICAgICAgIGNsYXNzIHByZWNmbG9hdChmbG9hdCk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ3ByZWMnXQpAQCAtMjQxMSw5ICsyNTQ5LDkgQEAKICAgICAgICAgYSA9IHByZWNmbG9hdCgxMjM0NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCAxMjM0NS4wKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KGEpLCAxMjM0NS4wKQotICAgICAgICBzZWxmLmFzc2VydF8oZmxvYXQoYSkuX19jbGFzc19fIGlzIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmxvYXQoYSkuX19jbGFzc19fIGlzIGZsb2F0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goMTIzNDUuMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoK2EpLl9fY2xhc3NfXyBpcyBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgrYSkuX19jbGFzc19fIGlzIGZsb2F0KQogCiAgICAgICAgIGNsYXNzIG1hZGNvbXBsZXgoY29tcGxleCk6CiAgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CkBAIC0yNDYxLDIwICsyNTk5LDIwIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIHQpCiAgICAgICAgIGEgPSBtYWR0dXBsZSgoMSwyLDMsNCw1KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShhKSwgKDEsMiwzLDQsNSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0dXBsZShhKS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0dXBsZShhKS5fX2NsYXNzX18gaXMgdHVwbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaCgoMSwyLDMsNCw1KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhWzpdLl9fY2xhc3NfXyBpcyB0dXBsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhICogMSkuX19jbGFzc19fIGlzIHR1cGxlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgKiAwKS5fX2NsYXNzX18gaXMgdHVwbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSArICgpKS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhWzpdLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICogMSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKiAwKS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSArICgpKS5fX2NsYXNzX18gaXMgdHVwbGUpCiAgICAgICAgIGEgPSBtYWR0dXBsZSgoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShhKSwgKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0dXBsZShhKS5fX2NsYXNzX18gaXMgdHVwbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSArIGEpLl9fY2xhc3NfXyBpcyB0dXBsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhICogMCkuX19jbGFzc19fIGlzIHR1cGxlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgKiAxKS5fX2NsYXNzX18gaXMgdHVwbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSAqIDIpLl9fY2xhc3NfXyBpcyB0dXBsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGFbOl0uX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHVwbGUoYSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKyBhKS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqIDApLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICogMSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKiAyKS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhWzpdLl9fY2xhc3NfXyBpcyB0dXBsZSkKIAogICAgICAgICBjbGFzcyBtYWRzdHJpbmcoc3RyKToKICAgICAgICAgICAgIF9yZXYgPSBOb25lCkBAIC0yNDk2LDUxICsyNjM0LDUxIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIHMpCiAgICAgICAgIHMgPSBtYWRzdHJpbmcoIjEyMzQ1IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocyksICIxMjM0NSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHIocykuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihzKS5fX2NsYXNzX18gaXMgc3RyKQogCiAgICAgICAgIGJhc2UgPSAiXHgwMCIgKiA1CiAgICAgICAgIHMgPSBtYWRzdHJpbmcoYmFzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBiYXNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cihzKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKHMpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChzKSwgaGFzaChiYXNlKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7czogMX1bYmFzZV0sIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2Jhc2U6IDF9W3NdLCAxKQotICAgICAgICBzZWxmLmFzc2VydF8oKHMgKyAiIikuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzICsgIiIpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICIiLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKCIiICsgcykuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgiIiArIHMpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIgKyBzLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKHMgKiAwKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHMgKiAwKS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKiAwLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKChzICogMSkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzICogMSkuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICogMSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChzICogMikuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzICogMikuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICogMiwgYmFzZSArIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzWzpdLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzWzpdLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1s6XSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNbMDowXS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc1swOjBdLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1swOjBdLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMuc3RyaXAoKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdHJpcCgpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdHJpcCgpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8ocy5sc3RyaXAoKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5sc3RyaXAoKS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMubHN0cmlwKCksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzLnJzdHJpcCgpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnJzdHJpcCgpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yc3RyaXAoKSwgYmFzZSkKICAgICAgICAgaWRlbnRpdHl0YWIgPSAnJy5qb2luKFtjaHIoaSkgZm9yIGkgaW4gcmFuZ2UoMjU2KV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzLnRyYW5zbGF0ZShpZGVudGl0eXRhYikuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMudHJhbnNsYXRlKGlkZW50aXR5dGFiKS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudHJhbnNsYXRlKGlkZW50aXR5dGFiKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMudHJhbnNsYXRlKGlkZW50aXR5dGFiLCAieCIpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnRyYW5zbGF0ZShpZGVudGl0eXRhYiwgIngiKS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudHJhbnNsYXRlKGlkZW50aXR5dGFiLCAieCIpLCBiYXNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudHJhbnNsYXRlKGlkZW50aXR5dGFiLCAiXHgwMCIpLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMucmVwbGFjZSgieCIsICJ4IikuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMucmVwbGFjZSgieCIsICJ4IikuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJlcGxhY2UoIngiLCAieCIpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8ocy5sanVzdChsZW4ocykpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmxqdXN0KGxlbihzKSkuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmxqdXN0KGxlbihzKSksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzLnJqdXN0KGxlbihzKSkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMucmp1c3QobGVuKHMpKS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmp1c3QobGVuKHMpKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMuY2VudGVyKGxlbihzKSkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuY2VudGVyKGxlbihzKSkuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNlbnRlcihsZW4ocykpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8ocy5sb3dlcigpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmxvd2VyKCkuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmxvd2VyKCksIGJhc2UpCiAKICAgICAgICAgY2xhc3MgbWFkdW5pY29kZSh1bmljb2RlKToKQEAgLTI1NTksNDcgKzI2OTcsNDcgQEAKICAgICAgICAgYmFzZSA9IHUiMTIzNDUiCiAgICAgICAgIHUgPSBtYWR1bmljb2RlKGJhc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSh1KSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVuaWNvZGUodSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmljb2RlKHUpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godSksIGhhc2goYmFzZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe3U6IDF9W2Jhc2VdLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtiYXNlOiAxfVt1XSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUuc3RyaXAoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuc3RyaXAoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LnN0cmlwKCksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1LmxzdHJpcCgpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5sc3RyaXAoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmxzdHJpcCgpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8odS5yc3RyaXAoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUucnN0cmlwKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5yc3RyaXAoKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUucmVwbGFjZSh1IngiLCB1IngiKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUucmVwbGFjZSh1IngiLCB1IngiKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LnJlcGxhY2UodSJ4IiwgdSJ4IiksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1LnJlcGxhY2UodSJ4eSIsIHUieHkiKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUucmVwbGFjZSh1Inh5IiwgdSJ4eSIpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUucmVwbGFjZSh1Inh5IiwgdSJ4eSIpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8odS5jZW50ZXIobGVuKHUpKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuY2VudGVyKGxlbih1KSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5jZW50ZXIobGVuKHUpKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUubGp1c3QobGVuKHUpKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUubGp1c3QobGVuKHUpKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmxqdXN0KGxlbih1KSksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1LnJqdXN0KGxlbih1KSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnJqdXN0KGxlbih1KSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5yanVzdChsZW4odSkpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8odS5sb3dlcigpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5sb3dlcigpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUubG93ZXIoKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUudXBwZXIoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUudXBwZXIoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LnVwcGVyKCksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1LmNhcGl0YWxpemUoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuY2FwaXRhbGl6ZSgpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuY2FwaXRhbGl6ZSgpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8odS50aXRsZSgpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS50aXRsZSgpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUudGl0bGUoKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCh1ICsgdSIiKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCh1ICsgdSIiKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ICsgdSIiLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKHUiIiArIHUpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHUiIiArIHUpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiIiArIHUsIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygodSAqIDApLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHUgKiAwKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ICogMCwgdSIiKQotICAgICAgICBzZWxmLmFzc2VydF8oKHUgKiAxKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCh1ICogMSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSAqIDEsIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygodSAqIDIpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHUgKiAyKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ICogMiwgYmFzZSArIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1WzpdLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodVs6XS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzpdLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8odVswOjBdLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodVswOjBdLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMDowXSwgdSIiKQogCiAgICAgICAgIGNsYXNzIHN1Ymxpc3QobGlzdCk6CkBAIC0yNzE4LDcgKzI4NTYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbY2lzdHIoJ29uZScpXSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2Npc3RyKCd0V28nKV0sIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtjaXN0cignVEhyRUUnKV0sIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjaXN0cignT05lJykgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjaXN0cignT05lJyksIGQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoY2lzdHIoJ3RockVFJykpLCAzKQogCiAgICAgZGVmIHRlc3RfY2xhc3NpY19jb21wYXJpc29ucyhzZWxmKToKQEAgLTI3NDUsMTIgKzI4ODMsMTIgQEAKICAgICAgICAgICAgIGMgPSB7MTogYzEsIDI6IGMyLCAzOiBjM30KICAgICAgICAgICAgIGZvciB4IGluIDEsIDIsIDM6CiAgICAgICAgICAgICAgICAgZm9yIHkgaW4gMSwgMiwgMzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNtcChjW3hdLCBjW3ldKSA9PSBjbXAoeCwgeSksICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtcChjW3hdLCBjW3ldKSA9PSBjbXAoeCwgeSksICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKICAgICAgICAgICAgICAgICAgICAgZm9yIG9wIGluICI8IiwgIjw9IiwgIj09IiwgIiE9IiwgIj4iLCAiPj0iOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGV2YWwoImNbeF0gJXMgY1t5XSIgJSBvcCkgPT0gZXZhbCgieCAlcyB5IiAlIG9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCJjW3hdICVzIGNbeV0iICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIng9JWQsIHk9JWQiICUgKHgsIHkpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oY21wKGNbeF0sIHkpID09IGNtcCh4LCB5KSwgIng9JWQsIHk9JWQiICUgKHgsIHkpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oY21wKHgsIGNbeV0pID09IGNtcCh4LCB5KSwgIng9JWQsIHk9JWQiICUgKHgsIHkpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY21wKGNbeF0sIHkpID09IGNtcCh4LCB5KSwgIng9JWQsIHk9JWQiICUgKHgsIHkpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY21wKHgsIGNbeV0pID09IGNtcCh4LCB5KSwgIng9JWQsIHk9JWQiICUgKHgsIHkpKQogCiAgICAgZGVmIHRlc3RfcmljaF9jb21wYXJpc29ucyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHJpY2ggY29tcGFyaXNvbnMuLi4KQEAgLTI4MjMsMTEgKzI5NjEsMTEgQEAKICAgICAgICAgICAgIGZvciB4IGluIDEsIDIsIDM6CiAgICAgICAgICAgICAgICAgZm9yIHkgaW4gMSwgMiwgMzoKICAgICAgICAgICAgICAgICAgICAgZm9yIG9wIGluICI8IiwgIjw9IiwgIj09IiwgIiE9IiwgIj4iLCAiPj0iOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGV2YWwoImNbeF0gJXMgY1t5XSIgJSBvcCkgPT0gZXZhbCgieCAlcyB5IiAlIG9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCJjW3hdICVzIGNbeV0iICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIng9JWQsIHk9JWQiICUgKHgsIHkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGV2YWwoImNbeF0gJXMgeSIgJSBvcCkgPT0gZXZhbCgieCAlcyB5IiAlIG9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCJjW3hdICVzIHkiICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIng9JWQsIHk9JWQiICUgKHgsIHkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGV2YWwoInggJXMgY1t5XSIgJSBvcCkgPT0gZXZhbCgieCAlcyB5IiAlIG9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCJ4ICVzIGNbeV0iICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIng9JWQsIHk9JWQiICUgKHgsIHkpKQogCiAgICAgZGVmIHRlc3RfY29lcmNpb25zKHNlbGYpOgpAQCAtMjg5Myw5ICszMDMxLDkgQEAKICAgICAgICAgICAgIGZvciBjbHMyIGluIEMsIEQsIEUsIEY6CiAgICAgICAgICAgICAgICAgeCA9IGNscygpCiAgICAgICAgICAgICAgICAgeC5fX2NsYXNzX18gPSBjbHMyCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHguX19jbGFzc19fIGlzIGNsczIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguX19jbGFzc19fIGlzIGNsczIpCiAgICAgICAgICAgICAgICAgeC5fX2NsYXNzX18gPSBjbHMKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oeC5fX2NsYXNzX18gaXMgY2xzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4Ll9fY2xhc3NfXyBpcyBjbHMpCiAgICAgICAgIGRlZiBjYW50KHgsIEMpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHguX19jbGFzc19fID0gQwpAQCAtMjkwNSw3ICszMDQzLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBhbGxvdyAlci5fX2NsYXNzX18gPSAlciIgJSAoeCwgQykpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZGVsYXR0cih4LCAiX19jbGFzc19fIikKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYWxsb3cgZGVsICVyLl9fY2xhc3NfXyIgJSB4KQpAQCAtMjk1NywxMSArMzA5NSwxMSBAQAogICAgICAgICAgICAgeCA9IGNscygpCiAgICAgICAgICAgICB4LmEgPSAxCiAgICAgICAgICAgICB4Ll9fY2xhc3NfXyA9IGNsczIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh4Ll9fY2xhc3NfXyBpcyBjbHMyLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguX19jbGFzc19fIGlzIGNsczIsCiAgICAgICAgICAgICAgICAgICAgImFzc2lnbmluZyAlciBhcyBfX2NsYXNzX18gZm9yICVyIHNpbGVudGx5IGZhaWxlZCIgJSAoY2xzMiwgeCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYSwgMSkKICAgICAgICAgICAgIHguX19jbGFzc19fID0gY2xzCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oeC5fX2NsYXNzX18gaXMgY2xzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguX19jbGFzc19fIGlzIGNscywKICAgICAgICAgICAgICAgICAgICAiYXNzaWduaW5nICVyIGFzIF9fY2xhc3NfXyBmb3IgJXIgc2lsZW50bHkgZmFpbGVkIiAlIChjbHMsIHgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDEpCiAgICAgICAgIGZvciBjbHMgaW4gRywgSiwgSywgTCwgTSwgTiwgUCwgUiwgbGlzdCwgSW50OgpAQCAtMzA0OSw2ICszMTg3LDE2IEBACiAgICAgICAgICAgICBtb2QuX19kaWN0X19bInNwYW0iXSA9ICJlZ2dzIgogCiAgICAgICAgICMgRXhjZXB0aW9uJ3MgX19kaWN0X18gY2FuIGJlIHJlcGxhY2VkLCBidXQgbm90IGRlbGV0ZWQKKyAgICAgICAgIyAoYXQgbGVhc3Qgbm90IGFueSBtb3JlIHRoYW4gcmVndWxhciBleGNlcHRpb24ncyBfX2RpY3RfXyBjYW4KKyAgICAgICAgIyBiZSBkZWxldGVkOyBvbiBDUHl0aG9uIGl0IGlzIG5vdCB0aGUgY2FzZSwgd2hlcmVhcyBvbiBQeVB5IHRoZXkKKyAgICAgICAgIyBjYW4sIGp1c3QgbGlrZSBhbnkgb3RoZXIgbmV3LXN0eWxlIGluc3RhbmNlJ3MgX19kaWN0X18uKQorICAgICAgICBkZWYgY2FuX2RlbGV0ZV9kaWN0KGUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBlLl9fZGljdF9fCisgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBjbGFzcyBFeGNlcHRpb24xKEV4Y2VwdGlvbiwgQmFzZSk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGNsYXNzIEV4Y2VwdGlvbjIoQmFzZSwgRXhjZXB0aW9uKToKQEAgLTMwNTcsMTIgKzMyMDUsNyBAQAogICAgICAgICAgICAgZSA9IEV4Y2VwdGlvblR5cGUoKQogICAgICAgICAgICAgZS5fX2RpY3RfXyA9IHsiYSI6IDF9CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYSwgMSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBkZWwgZS5fX2RpY3RfXwotICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXIncyBfX2RpY3RfXyBjYW4gYmUgZGVsZXRlZCIgJSBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYW5fZGVsZXRlX2RpY3QoZSksIGNhbl9kZWxldGVfZGljdChWYWx1ZUVycm9yKCkpKQogCiAgICAgZGVmIHRlc3RfcGlja2xlcyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHBpY2tsaW5nIGFuZCBjb3B5aW5nIG5ldy1zdHlsZSBjbGFzc2VzIGFuZCBvYmplY3RzLi4uCkBAIC0zMTI2LDcgKzMyNjksNyBAQAogICAgICAgICAgICAgICAgIGZvciBjbHMgaW4gQywgQzEsIEMyOgogICAgICAgICAgICAgICAgICAgICBzID0gcC5kdW1wcyhjbHMsIGJpbikKICAgICAgICAgICAgICAgICAgICAgY2xzMiA9IHAubG9hZHMocykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNsczIgaXMgY2xzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzMiBpcyBjbHMpCiAKICAgICAgICAgICAgICAgICBhID0gQzEoMSwgMik7IGEuYXBwZW5kKDQyKTsgYS5hcHBlbmQoMjQpCiAgICAgICAgICAgICAgICAgYiA9IEMyKCJoZWxsbyIsICJ3b3JsZCIsIDQyKQpAQCAtMzE1Niw3ICszMjk5LDcgQEAKICAgICAgICAgaW1wb3J0IGNvcHkKICAgICAgICAgZm9yIGNscyBpbiBDLCBDMSwgQzI6CiAgICAgICAgICAgICBjbHMyID0gY29weS5kZWVwY29weShjbHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oY2xzMiBpcyBjbHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzMiBpcyBjbHMpCiAKICAgICAgICAgYSA9IEMxKDEsIDIpOyBhLmFwcGVuZCg0Mik7IGEuYXBwZW5kKDI0KQogICAgICAgICBiID0gQzIoImhlbGxvIiwgIndvcmxkIiwgNDIpCkBAIC0zMzU1LDEzICszNDk4LDEyIEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoImQuZm9vIHNob3VsZCBiZSB1bmRlZmluZWQgbm93IikKIAogICAgICAgICAjIFRlc3QgYSBuYXN0eSBidWcgaW4gcmVjdXJzZV9kb3duX3N1YmNsYXNzZXMoKQotICAgICAgICBpbXBvcnQgZ2MKICAgICAgICAgY2xhc3MgQShvYmplY3QpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBjbGFzcyBCKEEpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBkZWwgQgotICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBBLl9fc2V0aXRlbV9fID0gbGFtYmRhICphOiBOb25lICMgY3Jhc2gKIAogICAgIGRlZiB0ZXN0X2J1ZmZlcl9pbmhlcml0YW5jZShzZWxmKToKQEAgLTM0NTMsNiArMzU5NSw3IEBACiAgICAgICAgIGMgPSBDKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2csIFtdKQogICAgICAgICBkZWwgYworICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLCBbMV0pCiAKICAgICAgICAgY2xhc3MgRChvYmplY3QpOiBwYXNzCkBAIC0zNTQ4LDcgKzM2OTEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2F0dHIobSwgIl9fbmFtZV9fIiksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihtLCAiX19maWxlX18iKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKG0sICJmb28iKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fZGljdF9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uX19kaWN0X18pICAgIyBOb25lIG9yIHt9IGFyZSBib3RoIHJlYXNvbmFibGUgYW5zd2VycwogICAgICAgICBtLmZvbyA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fZGljdF9fLCB7ImZvbyI6IDF9KQogCkBAIC0zNjgzLDE3ICszODI2LDIzIEBACiAgICAgICAgIGMgPSBDKCkKICAgICAgICAgYy5hdHRyID0gNDIKIAotICAgICAgICAjIFRoZSBtb3N0IGludGVyZXN0aW5nIHRoaW5nIGhlcmUgaXMgd2hldGhlciB0aGlzIGJsb3dzIHVwLCBkdWUgdG8gZmxhd2VkCi0gICAgICAgICMgR0MgdHJhY2tpbmcgbG9naWMgaW4gdHlwZW9iamVjdC5jJ3MgY2FsbF9maW5hbGl6ZXIoKSAoYSAyLjIuMSBidWcpLgorICAgICAgICAjIFRoZSBtb3N0IGludGVyZXN0aW5nIHRoaW5nIGhlcmUgaXMgd2hldGhlciB0aGlzIGJsb3dzIHVwLCBkdWUgdG8KKyAgICAgICAgIyBmbGF3ZWQgR0MgdHJhY2tpbmcgbG9naWMgaW4gdHlwZW9iamVjdC5jJ3MgY2FsbF9maW5hbGl6ZXIoKSAoYSAyLjIuMQorICAgICAgICAjIGJ1ZykuCiAgICAgICAgIGRlbCBjCiAKICAgICAgICAgIyBJZiB0aGF0IGRpZG4ndCBibG93IHVwLCBpdCdzIGFsc28gaW50ZXJlc3RpbmcgdG8gc2VlIHdoZXRoZXIgY2xlYXJpbmcKLSAgICAgICAgIyB0aGUgbGFzdCBjb250YWluZXIgc2xvdCB3b3JrczogIHRoYXQgd2lsbCBhdHRlbXB0IHRvIGRlbGV0ZSBjIGFnYWluLAotICAgICAgICAjIHdoaWNoIHdpbGwgY2F1c2UgYyB0byBnZXQgYXBwZW5kZWQgYmFjayB0byB0aGUgY29udGFpbmVyIGFnYWluICJkdXJpbmciCi0gICAgICAgICMgdGhlIGRlbC4KLSAgICAgICAgZGVsIEMuY29udGFpbmVyWy0xXQorICAgICAgICAjIHRoZSBsYXN0IGNvbnRhaW5lciBzbG90IHdvcmtzOiB0aGF0IHdpbGwgYXR0ZW1wdCB0byBkZWxldGUgYyBhZ2FpbiwKKyAgICAgICAgIyB3aGljaCB3aWxsIGNhdXNlIGMgdG8gZ2V0IGFwcGVuZGVkIGJhY2sgdG8gdGhlIGNvbnRhaW5lciBhZ2FpbgorICAgICAgICAjICJkdXJpbmciIHRoZSBkZWwuICAoT24gbm9uLUNQeXRob24gaW1wbGVtZW50YXRpb25zLCBob3dldmVyLCBfX2RlbF9fCisgICAgICAgICMgaXMgdHlwaWNhbGx5IG5vdCBjYWxsZWQgYWdhaW4uKQorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEMuY29udGFpbmVyKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmNvbnRhaW5lclstMV0uYXR0ciwgNDIpCisgICAgICAgIGRlbCBDLmNvbnRhaW5lclstMV0KKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmNoZWNrX2ltcGxfZGV0YWlsKCk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihDLmNvbnRhaW5lciksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuY29udGFpbmVyWy0xXS5hdHRyLCA0MikKIAogICAgICAgICAjIE1ha2UgYyBtb3J0YWwgYWdhaW4sIHNvIHRoYXQgdGhlIHRlc3QgZnJhbWV3b3JrIHdpdGggLWwgZG9lc24ndCByZXBvcnQKICAgICAgICAgIyBpdCBhcyBhIGxlYWsuCkBAIC0zNzE5LDkgKzM4NjgsMTAgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgY2xhc3MgQyhBLEIpIDoKICAgICAgICAgICAgIF9fc2xvdHNfXz0oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19iYXNpY3NpemVfXywgQi5fX2Jhc2ljc2l6ZV9fKQotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihDLCAnX19kaWN0X18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoQywgJ19fd2Vha3JlZl9fJykpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5jaGVja19pbXBsX2RldGFpbCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fYmFzaWNzaXplX18sIEIuX19iYXNpY3NpemVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoQywgJ19fZGljdF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKEMsICdfX3dlYWtyZWZfXycpKQogICAgICAgICBDKCkueCA9IDIKIAogICAgIGRlZiB0ZXN0X3JtdWwoc2VsZik6CkBAIC0zNzc1LDM0ICszOTI1LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmEsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQzIuX19zdWJjbGFzc2VzX18oKSwgW0RdKQogCi0gICAgICAgICMgc3R1ZmYgdGhhdCBzaG91bGRuJ3Q6Ci0gICAgICAgIGNsYXNzIEwobGlzdCk6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgTC5fX2Jhc2VzX18gPSAoZGljdCwpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCB0dXJuIGxpc3Qgc3ViY2xhc3MgaW50byBkaWN0IHN1YmNsYXNzIikKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsaXN0Ll9fYmFzZXNfXyA9IChkaWN0LCkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gYXNzaWduIHRvIGxpc3QuX19iYXNlc19fIikKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBELl9fYmFzZXNfXyA9IChDMiwgbGlzdCkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFzc2VydCAwLCAiYmVzdF9iYXNlIGNhbGN1bGF0aW9uIGZvdW5kIHdhbnRpbmciCi0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZGVsIEQuX19iYXNlc19fCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBiZSBhYmxlIHRvIGRlbGV0ZSAuX19iYXNlc19fIikKQEAgLTM4NzAsNiArMzk5NSwzNiBAQAogICAgICAgICAgICAgaWYgdHAgaXMgbm90IG9iamVjdDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cC5fX2Jhc2VzX18pLCAxLCB0cCkKIAorICAgICAgICBjbGFzcyBMKGxpc3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEwuX19iYXNlc19fID0gKGRpY3QsKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgdHVybiBsaXN0IHN1YmNsYXNzIGludG8gZGljdCBzdWJjbGFzcyIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGlzdC5fX2Jhc2VzX18gPSAoZGljdCwpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBiZSBhYmxlIHRvIGFzc2lnbiB0byBsaXN0Ll9fYmFzZXNfXyIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgRC5fX2Jhc2VzX18gPSAoQywgbGlzdCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCAwLCAiYmVzdF9iYXNlIGNhbGN1bGF0aW9uIGZvdW5kIHdhbnRpbmciCisKIAogICAgIGRlZiB0ZXN0X211dGFibGVfYmFzZXNfd2l0aF9mYWlsaW5nX21ybyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIG11dGFibGUgYmFzZXMgd2l0aCBmYWlsaW5nIG1yby4uLgpAQCAtNDAxNCw2ICs0MTY5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFKCkgLy8gQygpLCAiQy5fX2Zsb29yZGl2X18iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMoKSAvLyBFKCksICJDLl9fZmxvb3JkaXZfXyIpICMgVGhpcyBvbmUgd291bGQgZmFpbAogCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidGVzdGluZyBhbiBpbnRlcm5hbCBraW5kIG9mIG1ldGhvZCBvYmplY3QiKQogICAgIGRlZiB0ZXN0X21ldGhfY2xhc3NfZ2V0KHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgX19nZXRfXyBtZXRob2Qgb2YgTUVUSF9DTEFTUyBDIG1ldGhvZHMuLi4KICAgICAgICAgIyBGdWxsIGNvdmVyYWdlIG9mIGRlc2Nyb2JqZWN0LmM6OmNsYXNzbWV0aG9kX2dldCgpCkBAIC00MDcyLDI5ICs0MjI4LDI5IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGEgPSBDKCkKICAgICAgICAgcGEgPSBQcm94eShhKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShhLCBDKSkgICMgQmFzZWxpbmUKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocGEsIEMpKSAjIFRlc3QKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGEsIEMpICAjIEJhc2VsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYSwgQykgIyBUZXN0CiAgICAgICAgICMgVGVzdCB3aXRoIGEgY2xhc3NpYyBzdWJjbGFzcwogICAgICAgICBjbGFzcyBEKEMpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gRCgpCiAgICAgICAgIHBhID0gUHJveHkoYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYSwgQykpICAjIEJhc2VsaW5lCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHBhLCBDKSkgIyBUZXN0CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhLCBDKSAgIyBCYXNlbGluZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGEsIEMpICMgVGVzdAogICAgICAgICAjIFRlc3Qgd2l0aCBhIG5ldy1zdHlsZSBjbGFzcwogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGEgPSBDKCkKICAgICAgICAgcGEgPSBQcm94eShhKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShhLCBDKSkgICMgQmFzZWxpbmUKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocGEsIEMpKSAjIFRlc3QKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGEsIEMpICAjIEJhc2VsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYSwgQykgIyBUZXN0CiAgICAgICAgICMgVGVzdCB3aXRoIGEgbmV3LXN0eWxlIHN1YmNsYXNzCiAgICAgICAgIGNsYXNzIEQoQyk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGEgPSBEKCkKICAgICAgICAgcGEgPSBQcm94eShhKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShhLCBDKSkgICMgQmFzZWxpbmUKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocGEsIEMpKSAjIFRlc3QKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGEsIEMpICAjIEJhc2VsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYSwgQykgIyBUZXN0CiAKICAgICBkZWYgdGVzdF9wcm94eV9zdXBlcihzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHN1cGVyKCkgZm9yIGEgcHJveHkgb2JqZWN0Li4uCkBAIC00MTYyLDcgKzQzMTgsNyBAQAogCiAgICAgZGVmIHRlc3RfZmlsZV9mYXVsdChzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHN5cy5zdGRvdXQgaXMgY2hhbmdlZCBpbiBnZXRhdHRyLi4uCi0gICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgdGVzdF9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgIGNsYXNzIFN0ZG91dEd1YXJkOgogICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzeXMuX19zdGRvdXRfXwpAQCAtNDE3Miw2ICs0MzI4LDggQEAKICAgICAgICAgICAgIHByaW50ICJPb3BzISIKICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSB0ZXN0X3N0ZG91dAogCiAgICAgZGVmIHRlc3RfdmljaW91c19kZXNjcmlwdG9yX25vbnNlbnNlKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgdmljaW91c19kZXNjcmlwdG9yX25vbnNlbnNlLi4uCkBAIC00MTk5LDcgKzQzNTcsNyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5hdHRyLCAxKQogICAgICAgICAjIHRoaXMgbWFrZXMgYSBjcmFzaCBtb3JlIGxpa2VseToKLSAgICAgICAgaW1wb3J0IGdjOyBnYy5jb2xsZWN0KCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2F0dHIoYywgJ2F0dHInKSwgRmFsc2UpCiAKICAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgpAQCAtNDIyMSwxMSArNDM3OSwxNyBAQAogICAgICAgICBsID0gW10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLl9fYWRkX18sIGwuX19hZGRfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLl9fYWRkX18sIFtdLl9fYWRkX18pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsLl9fYWRkX18gIT0gWzVdLl9fYWRkX18pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsLl9fYWRkX18gIT0gbC5fX211bF9fKQotICAgICAgICBzZWxmLmFzc2VydF8obC5fX2FkZF9fLl9fbmFtZV9fID09ICdfX2FkZF9fJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGwuX19hZGRfXy5fX3NlbGZfXyBpcyBsKQotICAgICAgICBzZWxmLmFzc2VydF8obC5fX2FkZF9fLl9fb2JqY2xhc3NfXyBpcyBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobC5fX2FkZF9fICE9IFs1XS5fX2FkZF9fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobC5fX2FkZF9fICE9IGwuX19tdWxfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXy5fX25hbWVfXyA9PSAnX19hZGRfXycpCisgICAgICAgIGlmIGhhc2F0dHIobC5fX2FkZF9fLCAnX19zZWxmX18nKToKKyAgICAgICAgICAgICMgQ1B5dGhvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXy5fX3NlbGZfXyBpcyBsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXy5fX29iamNsYXNzX18gaXMgbGlzdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUHl0aG9uIGltcGxlbWVudGF0aW9ucyB3aGVyZSBbXS5fX2FkZF9fIGlzIGEgbm9ybWFsIGJvdW5kIG1ldGhvZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXy5pbV9zZWxmIGlzIGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobC5fX2FkZF9fLmltX2NsYXNzIGlzIGxpc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5fX2FkZF9fLl9fZG9jX18sIGxpc3QuX19hZGRfXy5fX2RvY19fKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoYXNoKGwuX19hZGRfXykKQEAgLTQyNDIsOCArNDQwNiw2IEBACiAgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgTm90SW1wbGVtZW50ZWQuLi4KICAgICAgICAgIyBhbGwgYmluYXJ5IG1ldGhvZHMgc2hvdWxkIGJlIGFibGUgdG8gcmV0dXJuIGEgTm90SW1wbGVtZW50ZWQKLSAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBpbXBvcnQgdHlwZXMKICAgICAgICAgaW1wb3J0IG9wZXJhdG9yCiAKICAgICAgICAgZGVmIHNwZWNpYWxtZXRob2Qoc2VsZiwgb3RoZXIpOgpAQCAtNDMyMiw2ICs0NDg0LDM1IEBACiAgICAgICAgIGNbMToyXSA9IDMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnZhbHVlLCAzKQogCisgICAgZGVmIHRlc3Rfc2V0X2FuZF9ub19nZXQoc2VsZik6CisgICAgICAgICMgU2VlCisgICAgICAgICMgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDEwLUphbnVhcnkvMDk1NjM3Lmh0bWwKKyAgICAgICAgY2xhc3MgRGVzY3Iob2JqZWN0KToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgICAgICAgICAgZGVmIF9fc2V0X18oc2VsZiwgb2JqLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgb2JqLl9fZGljdF9fW3NlbGYubmFtZV0gPSB2YWx1ZQorICAgICAgICBkZXNjciA9IERlc2NyKCJhIikKKworICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBhID0gZGVzY3IKKworICAgICAgICB4ID0gWCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeC5hLCBkZXNjcikKKyAgICAgICAgeC5hID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDQyKQorCisgICAgICAgICMgQWxzbyBjaGVjayB0eXBlX2dldGF0dHJvIGZvciBjb3JyZWN0bmVzcy4KKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE1ldGEKKyAgICAgICAgWC5hID0gNDIKKyAgICAgICAgTWV0YS5hID0gRGVzY3IoImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYSwgNDIpCisKICAgICBkZWYgdGVzdF9nZXRhdHRyX2hvb2tzKHNlbGYpOgogICAgICAgICAjIGlzc3VlIDQyMzAKIApAQCAtNDM0MywxMSArNDUzNCwxMSBAQAogICAgICAgICAgICAgX19nZXRhdHRyX18gPSBkZXNjcgogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBBKCksICJhdHRyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVzY3IuY291bnRlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXNjci5jb3VudGVyLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgQigpLCAiYXR0ciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlc2NyLmNvdW50ZXIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzY3IuY291bnRlciwgMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIEMoKSwgImF0dHIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZXNjci5jb3VudGVyLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2NyLmNvdW50ZXIsIDQpCiAKICAgICAgICAgaW1wb3J0IGdjCiAgICAgICAgIGNsYXNzIEV2aWxHZXRhdHRyaWJ1dGUob2JqZWN0KToKQEAgLTQzNjIsNiArNDU1MywxNyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBFdmlsR2V0YXR0cmlidXRlKCksICJhdHRyIikKIAorICAgIGRlZiB0ZXN0X2Fic3RyYWN0bWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyB0eXBlIHByZXRlbmRzIG5vdCB0byBoYXZlIF9fYWJzdHJhY3RtZXRob2RzX18uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCB0eXBlLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpCisgICAgICAgIGNsYXNzIG1ldGEodHlwZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBtZXRhLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpCisgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgWC5fX2Fic3RyYWN0bWV0aG9kc19fCisKIAogY2xhc3MgRGljdFByb3h5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTQzNzQsNyArNDU3Niw3IEBACiAgICAgICAgICMgVGVzdGluZyBkaWN0LXByb3h5IGl0ZXJrZXlzLi4uCiAgICAgICAgIGtleXMgPSBbIGtleSBmb3Iga2V5IGluIHNlbGYuQy5fX2RpY3RfXy5pdGVya2V5cygpIF0KICAgICAgICAga2V5cy5zb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoa2V5cywgWydfX2RpY3RfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIFsnX19kaWN0X18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywKICAgICAgICAgICAgICdfX3dlYWtyZWZfXycsICdtZXRoJ10pCiAKICAgICBkZWYgdGVzdF9pdGVyX3ZhbHVlcyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGljdC5weSBiL0xpYi90ZXN0L3Rlc3RfZGljdC5weQppbmRleCAzNDM0NzY0Li4yOTE2N2QwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RpY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaWN0LnB5CkBAIC05LDMyICs5LDMyIEBACiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CiAgICAgICAgICMgY2FsbGluZyBidWlsdC1pbiB0eXBlcyB3aXRob3V0IGFyZ3VtZW50IG11c3QgcmV0dXJuIGVtcHR5CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdCgpLCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRpY3QoKSBpcyBub3Qge30pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZGljdCgpLCB7fSkKIAogICAgIGRlZiB0ZXN0X2xpdGVyYWxfY29uc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgICMgY2hlY2sgbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgZGlmZmVyZW50IHNpemVkIGRpY3RzICh0byBleGVyY2lzZSB0aGUgQlVJTERfTUFQIG9wYXJnCisgICAgICAgICMgY2hlY2sgbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgZGlmZmVyZW50IHNpemVkIGRpY3RzCisgICAgICAgICMgKHRvIGV4ZXJjaXNlIHRoZSBCVUlMRF9NQVAgb3BhcmcpLgogICAgICAgICBmb3IgbiBpbiAoMCwgMSwgNiwgMjU2LCA0MDApOgotICAgICAgICAgICAgaXRlbXMgPSBbKCcnLmpvaW4oW3JhbmRvbS5jaG9pY2Uoc3RyaW5nLmxldHRlcnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoOCldKSwKLSAgICAgICAgICAgICAgICAgICAgICBpKQorICAgICAgICAgICAgaXRlbXMgPSBbKCcnLmpvaW4ocmFuZG9tLnNhbXBsZShzdHJpbmcubGV0dGVycywgOCkpLCBpKQogICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobildCiAgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShpdGVtcykKLSAgICAgICAgICAgIGRpY3RsaXRlcmFsID0gJ3snICsgJywgJy5qb2luKCclcjogJWQnICUgaXRlbSBmb3IgaXRlbSBpbiBpdGVtcykgKyAnfScKKyAgICAgICAgICAgIGZvcm1hdHRlZF9pdGVtcyA9ICgneyFyfTogezpkfScuZm9ybWF0KGssIHYpIGZvciBrLCB2IGluIGl0ZW1zKQorICAgICAgICAgICAgZGljdGxpdGVyYWwgPSAneycgKyAnLCAnLmpvaW4oZm9ybWF0dGVkX2l0ZW1zKSArICd9JwogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGRpY3RsaXRlcmFsKSwgZGljdChpdGVtcykpCiAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8obm90IHt9KQotICAgICAgICBzZWxmLmFzc2VydF8oezE6IDJ9KQotICAgICAgICBzZWxmLmFzc2VydF8oYm9vbCh7fSkgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhib29sKHsxOiAyfSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhub3Qge30sIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh7MTogMn0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbCh7fSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woezE6IDJ9KSwgVHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CiAgICAgICAgIGQgPSB7fQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQua2V5cygpLCBbXSkKICAgICAgICAgZCA9IHsnYSc6IDEsICdiJzogMn0KICAgICAgICAgayA9IGQua2V5cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkLmhhc19rZXkoJ2EnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuaGFzX2tleSgnYicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5oYXNfa2V5KCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmhhc19rZXkoJ2InKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQua2V5cywgTm9uZSkKIApAQCAtNTcsNyArNTcsNyBAQAogCiAgICAgZGVmIHRlc3RfaGFzX2tleShzZWxmKToKICAgICAgICAgZCA9IHt9Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZC5oYXNfa2V5KCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZC5oYXNfa2V5KCdhJykpCiAgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9CiAgICAgICAgIGsgPSBkLmtleXMoKQogICAgICAgICBrLnNvcnQoKQpAQCAtNjcsMTIgKzY3LDEzIEBACiAKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKICAgICAgICAgZCA9IHt9Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKCdhJyBpbiBkKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBub3QgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ2EnIGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYScgbm90IGluIGQpCiAgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9Ci0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgaW4gZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdiJyBpbiBkKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2MnIG5vdCBpbiBkKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYicsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2MnLCBkKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5fX2NvbnRhaW5zX18pCiAKQEAgLTIwNiw3ICsyMDcsNyBAQAogICAgIGRlZiB0ZXN0X2Zyb21rZXlzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QuZnJvbWtleXMoJ2FiYycpLCB7J2EnOk5vbmUsICdiJzpOb25lLCAnYyc6Tm9uZX0pCiAgICAgICAgIGQgPSB7fQotICAgICAgICBzZWxmLmFzc2VydF8obm90KGQuZnJvbWtleXMoJ2FiYycpIGlzIGQpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGQuZnJvbWtleXMoJ2FiYycpLCBkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZnJvbWtleXMoJ2FiYycpLCB7J2EnOk5vbmUsICdiJzpOb25lLCAnYyc6Tm9uZX0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cygoNCw1KSwwKSwgezQ6MCwgNTowfSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKFtdKSwge30pCkBAIC0yMTcsMTQgKzIxOCwxNCBAQAogICAgICAgICBjbGFzcyBkaWN0bGlrZShkaWN0KTogcGFzcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3RsaWtlLmZyb21rZXlzKCdhJyksIHsnYSc6Tm9uZX0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdGxpa2UoKS5mcm9ta2V5cygnYScpLCB7J2EnOk5vbmV9KQotICAgICAgICBzZWxmLmFzc2VydF8odHlwZShkaWN0bGlrZS5mcm9ta2V5cygnYScpKSBpcyBkaWN0bGlrZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUoZGljdGxpa2UoKS5mcm9ta2V5cygnYScpKSBpcyBkaWN0bGlrZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRpY3RsaWtlLmZyb21rZXlzKCdhJyksIGRpY3RsaWtlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGljdGxpa2UoKS5mcm9ta2V5cygnYScpLCBkaWN0bGlrZSkKICAgICAgICAgY2xhc3MgbXlkaWN0KGRpY3QpOgogICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKICAgICAgICAgICAgICAgICByZXR1cm4gVXNlckRpY3QuVXNlckRpY3QoKQogICAgICAgICB1ZCA9IG15ZGljdC5mcm9ta2V5cygnYWInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVkLCB7J2EnOk5vbmUsICdiJzpOb25lfSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodWQsIFVzZXJEaWN0LlVzZXJEaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHVkLCBVc2VyRGljdC5Vc2VyRGljdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaWN0LmZyb21rZXlzKQogCiAgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCkBAIC0yNjEsMTAgKzI2MiwxMCBAQAogCiAgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgogICAgICAgICBkID0ge30KLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuZ2V0KCdjJykgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLmdldCgnYycpLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdjJywgMyksIDMpCi0gICAgICAgIGQgPSB7J2EnIDogMSwgJ2InIDogMn0KLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuZ2V0KCdjJykgaXMgTm9uZSkKKyAgICAgICAgZCA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLmdldCgnYycpLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdjJywgMyksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2EnKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYScsIDMpLCAxKQpAQCAtMjc0LDkgKzI3NSw5IEBACiAgICAgZGVmIHRlc3Rfc2V0ZGVmYXVsdChzZWxmKToKICAgICAgICAgIyBkaWN0LnNldGRlZmF1bHQoKQogICAgICAgICBkID0ge30KLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuc2V0ZGVmYXVsdCgna2V5MCcpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZC5zZXRkZWZhdWx0KCdrZXkwJyksIE5vbmUpCiAgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5MCcsIFtdKQotICAgICAgICBzZWxmLmFzc2VydF8oZC5zZXRkZWZhdWx0KCdrZXkwJykgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLnNldGRlZmF1bHQoJ2tleTAnKSwgTm9uZSkKICAgICAgICAgZC5zZXRkZWZhdWx0KCdrZXknLCBbXSkuYXBwZW5kKDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsna2V5J11bMF0sIDMpCiAgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5JywgW10pLmFwcGVuZCg0KQpAQCAtMzE4LDkgKzMxOSw5IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmEsIGludChrYSkpCiAgICAgICAgICAgICAgICAgICAgIGtiLCB2YiA9IHRiID0gYi5wb3BpdGVtKCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YiwgaW50KGtiKSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdChjb3B5bW9kZSA8IDAgYW5kIHRhICE9IHRiKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8obm90IGEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvcHltb2RlIDwgMCBhbmQgdGEgIT0gdGIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYikKIAogICAgICAgICBkID0ge30KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKQEAgLTMzNyw4ICszMzgsOCBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcCwgaykKIAotICAgICAgICAjIHZlcmlmeSBsb25ncy9pbnRzIGdldCBzYW1lIHZhbHVlIHdoZW4ga2V5ID4gMzIgYml0cyAoZm9yIDY0LWJpdCBhcmNocykKLSAgICAgICAgIyBzZWUgU0YgYnVnICM2ODk2NTkKKyAgICAgICAgIyB2ZXJpZnkgbG9uZ3MvaW50cyBnZXQgc2FtZSB2YWx1ZSB3aGVuIGtleSA+IDMyIGJpdHMKKyAgICAgICAgIyAoZm9yIDY0LWJpdCBhcmNocykuICBTZWUgU0YgYnVnICM2ODk2NTkuCiAgICAgICAgIHggPSA0NTAzNTk5NjI3MzcwNDk2TAogICAgICAgICB5ID0gNDUwMzU5OTYyNzM3MDQ5NgogICAgICAgICBoID0ge3g6ICdhbnl0aGluZycsIHk6ICdzb21ldGhpbmcgZWxzZSd9CkBAIC0zNjYsMTUgKzM2NywxMiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQucG9wLCB4KQogCiAgICAgZGVmIHRlc3RfbXV0YXRpbmdpdGVyYXRpb24oc2VsZik6CisgICAgICAgICMgY2hhbmdpbmcgZGljdCBzaXplIGR1cmluZyBpdGVyYXRpb24KICAgICAgICAgZCA9IHt9CiAgICAgICAgIGRbMV0gPSAxCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgogICAgICAgICAgICAgZm9yIGkgaW4gZDoKICAgICAgICAgICAgICAgICBkW2krMV0gPSAxCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImNoYW5naW5nIGRpY3Qgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIGRvZXNuJ3QgcmFpc2UgRXJyb3IiKQogCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgZCA9IHt9CkBAIC0zOTUsOCArMzkzLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCByZXByLCBkKQogCiAgICAgZGVmIHRlc3RfbGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKHt9IDwge30pKQotICAgICAgICBzZWxmLmFzc2VydF8obm90ICh7MTogMn0gPCB7MUw6IDJMfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoe30gPCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh7MTogMn0gPCB7MUw6IDJMfSkKIAogICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKTogcGFzcwogCkBAIC00MDgsMTcgKzQwNiwxNCBAQAogCiAgICAgICAgIGQxID0ge0JhZENtcCgpOiAxfQogICAgICAgICBkMiA9IHsxOiAxfQotICAgICAgICB0cnk6CisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGMpOgogICAgICAgICAgICAgZDEgPCBkMgotICAgICAgICBleGNlcHQgRXhjOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCI8IGRpZG4ndCByYWlzZSBFeGMiKQogCiAgICAgZGVmIHRlc3RfbWlzc2luZyhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgZGljdCBkb2Vzbid0IGhhdmUgYSBfX21pc3NpbmdfXyBtZXRob2QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKGRpY3QsICJfX21pc3NpbmdfXyIpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKHt9LCAiX19taXNzaW5nX18iKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihkaWN0LCAiX19taXNzaW5nX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHt9LCAiX19taXNzaW5nX18iKSkKICAgICAgICAgIyBUZXN0IHNldmVyYWwgY2FzZXM6CiAgICAgICAgICMgKEQpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJldHVybmluZyBhIHZhbHVlCiAgICAgICAgICMgKEUpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJhaXNpbmcgUnVudGltZUVycm9yCkBAIC00MzAsNDkgKzQyNSw0MCBAQAogICAgICAgICBkID0gRCh7MTogMiwgMzogNH0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxXSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzNdLCA0KQotICAgICAgICBzZWxmLmFzc2VydF8oMiBub3QgaW4gZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDIgbm90IGluIGQua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMiwgZC5rZXlzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsyXSwgNDIpCisKICAgICAgICAgY2xhc3MgRShkaWN0KToKICAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihrZXkpCiAgICAgICAgIGUgPSBFKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgYzoKICAgICAgICAgICAgIGVbNDJdCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3MsICg0MiwpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJlWzQyXSBkaWRuJ3QgcmFpc2UgUnVudGltZUVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5hcmdzLCAoNDIsKSkKKwogICAgICAgICBjbGFzcyBGKGRpY3QpOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgICMgQW4gaW5zdGFuY2UgdmFyaWFibGUgX19taXNzaW5nX18gc2hvdWxkIGhhdmUgbm8gZWZmZWN0CiAgICAgICAgICAgICAgICAgc2VsZi5fX21pc3NpbmdfXyA9IGxhbWJkYSBrZXk6IE5vbmUKICAgICAgICAgZiA9IEYoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpIGFzIGM6CiAgICAgICAgICAgICBmWzQyXQotICAgICAgICBleGNlcHQgS2V5RXJyb3IsIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3MsICg0MiwpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJmWzQyXSBkaWRuJ3QgcmFpc2UgS2V5RXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhjZXB0aW9uLmFyZ3MsICg0MiwpKQorCiAgICAgICAgIGNsYXNzIEcoZGljdCk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGcgPSBHKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKSBhcyBjOgogICAgICAgICAgICAgZ1s0Ml0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzLCAoNDIsKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZ1s0Ml0gZGlkbid0IHJhaXNlIEtleUVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5hcmdzLCAoNDIsKSkKIAogICAgIGRlZiB0ZXN0X3R1cGxlX2tleWVycm9yKHNlbGYpOgogICAgICAgICAjIFNGICMxNTc2NjU3CiAgICAgICAgIGQgPSB7fQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpIGFzIGM6CiAgICAgICAgICAgICBkWygxLCldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoKDEsKSwpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJtaXNzaW5nIEtleUVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5hcmdzLCAoKDEsKSwpKQogCiAgICAgZGVmIHRlc3RfYmFkX2tleShzZWxmKToKICAgICAgICAgIyBEaWN0aW9uYXJ5IGxvb2t1cHMgc2hvdWxkIGZhaWwgaWYgX19jbXBfXygpIHJhaXNlcyBhbiBleGNlcHRpb24uCkBAIC01MDAsMTIgKzQ4Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAnZC5zZXRkZWZhdWx0KHgyLCA0MiknLAogICAgICAgICAgICAgICAgICAgICAgJ2QucG9wKHgyKScsCiAgICAgICAgICAgICAgICAgICAgICAnZC51cGRhdGUoe3gyOiAyfSknXToKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQ3VzdG9tRXhjZXB0aW9uKToKICAgICAgICAgICAgICAgICBleGVjIHN0bXQgaW4gbG9jYWxzKCkKLSAgICAgICAgICAgIGV4Y2VwdCBDdXN0b21FeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlN0YXRlbWVudCBkaWRuJ3QgcmFpc2UgZXhjZXB0aW9uIikKIAogICAgIGRlZiB0ZXN0X3Jlc2l6ZTEoc2VsZik6CiAgICAgICAgICMgRGljdCByZXNpemluZyBidWcsIGZvdW5kIGJ5IEphY2sgSmFuc2VuIGluIDIuMiBDVlMgZGV2ZWxvcG1lbnQuCkBAIC01NDgsMTEgKzUzMCw5IEBACiAgICAgZGVmIHRlc3RfZW1wdHlfcHJlc2l6ZWRfZGljdF9pbl9mcmVlbGlzdChzZWxmKToKICAgICAgICAgIyBCdWcgIzM1Mzc6IGlmIGFuIGVtcHR5IGJ1dCBwcmVzaXplZCBkaWN0IHdpdGggYSBzaXplIGxhcmdlcgogICAgICAgICAjIHRoYW4gNyB3YXMgaW4gdGhlIGZyZWVsaXN0LCBpdCB0cmlnZ2VyZWQgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZCA9IHsnYSc6IDEvLzAsICAnYic6IE5vbmUsICdjJzogTm9uZSwgJ2QnOiBOb25lLCAnZSc6IE5vbmUsCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgZCA9IHsnYSc6IDEgLy8gMCwgJ2InOiBOb25lLCAnYyc6IE5vbmUsICdkJzogTm9uZSwgJ2UnOiBOb25lLAogICAgICAgICAgICAgICAgICAnZic6IE5vbmUsICdnJzogTm9uZSwgJ2gnOiBOb25lfQotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCiAgICAgICAgIGQgPSB7fQogCiAgICAgZGVmIHRlc3RfY29udGFpbmVyX2l0ZXJhdG9yKHNlbGYpOgpAQCAtNTY3LDcgKzU0NywxMDggQEAKICAgICAgICAgICAgIG9iai54ID0gaShjb250YWluZXIpCiAgICAgICAgICAgICBkZWwgb2JqLCBjb250YWluZXIKICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHJlZigpIGlzIE5vbmUsICJDeWNsZSB3YXMgbm90IGNvbGxlY3RlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlZigpLCBOb25lLCAiQ3ljbGUgd2FzIG5vdCBjb2xsZWN0ZWQiKQorCisgICAgZGVmIF9ub3RfdHJhY2tlZChzZWxmLCB0KToKKyAgICAgICAgIyBOZXN0ZWQgY29udGFpbmVycyBjYW4gdGFrZSBzZXZlcmFsIGNvbGxlY3Rpb25zIHRvIHVudHJhY2sKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQodCksIHQpCisKKyAgICBkZWYgX3RyYWNrZWQoc2VsZiwgdCk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKHQpLCB0KQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKHQpLCB0KQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF90cmFja19saXRlcmFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IEdDLW9wdGltaXphdGlvbiBvZiBkaWN0IGxpdGVyYWxzCisgICAgICAgIHgsIHksIHosIHcgPSAxLjUsICJhIiwgKDEsIE5vbmUpLCBbXQorCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKHt9KQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh7eDooKSwgeTp4LCB6OjF9KQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh7MTogImEiLCAiYiI6IDJ9KQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh7MTogMiwgKE5vbmUsIFRydWUsIEZhbHNlLCAoKSk6IGludH0pCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKHsxOiBvYmplY3QoKX0pCisKKyAgICAgICAgIyBEaWN0cyB3aXRoIG11dGFibGUgZWxlbWVudHMgYXJlIGFsd2F5cyB0cmFja2VkLCBldmVuIGlmIHRob3NlCisgICAgICAgICMgZWxlbWVudHMgYXJlIG5vdCB0cmFja2VkIHJpZ2h0IG5vdy4KKyAgICAgICAgc2VsZi5fdHJhY2tlZCh7MTogW119KQorICAgICAgICBzZWxmLl90cmFja2VkKHsxOiAoW10sKX0pCisgICAgICAgIHNlbGYuX3RyYWNrZWQoezE6IHt9fSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh7MTogc2V0KCl9KQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF90cmFja19keW5hbWljKHNlbGYpOgorICAgICAgICAjIFRlc3QgR0Mtb3B0aW1pemF0aW9uIG9mIGR5bmFtaWNhbGx5LWNyZWF0ZWQgZGljdHMKKyAgICAgICAgY2xhc3MgTXlPYmplY3Qob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgeCwgeSwgeiwgdywgbyA9IDEuNSwgImEiLCAoMSwgb2JqZWN0KCkpLCBbXSwgTXlPYmplY3QoKQorCisgICAgICAgIGQgPSBkaWN0KCkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZFsxXSA9ICJhIgorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkKQorICAgICAgICBkW3ldID0gMgorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkKQorICAgICAgICBkW3pdID0gMworICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkLmNvcHkoKSkKKyAgICAgICAgZFs0XSA9IHcKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkKQorICAgICAgICBzZWxmLl90cmFja2VkKGQuY29weSgpKQorICAgICAgICBkWzRdID0gTm9uZQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkLmNvcHkoKSkKKworICAgICAgICAjIGRkIGlzbid0IHRyYWNrZWQgcmlnaHQgbm93LCBidXQgaXQgbWF5IG11dGF0ZSBhbmQgdGhlcmVmb3JlIGQKKyAgICAgICAgIyB3aGljaCBjb250YWlucyBpdCBtdXN0IGJlIHRyYWNrZWQuCisgICAgICAgIGQgPSBkaWN0KCkKKyAgICAgICAgZGQgPSBkaWN0KCkKKyAgICAgICAgZFsxXSA9IGRkCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGRkKQorICAgICAgICBzZWxmLl90cmFja2VkKGQpCisgICAgICAgIGRkWzFdID0gZAorICAgICAgICBzZWxmLl90cmFja2VkKGRkKQorCisgICAgICAgIGQgPSBkaWN0LmZyb21rZXlzKFt4LCB5LCB6XSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZGQgPSBkaWN0KCkKKyAgICAgICAgZGQudXBkYXRlKGQpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGRkKQorICAgICAgICBkID0gZGljdC5mcm9ta2V5cyhbeCwgeSwgeiwgb10pCisgICAgICAgIHNlbGYuX3RyYWNrZWQoZCkKKyAgICAgICAgZGQgPSBkaWN0KCkKKyAgICAgICAgZGQudXBkYXRlKGQpCisgICAgICAgIHNlbGYuX3RyYWNrZWQoZGQpCisKKyAgICAgICAgZCA9IGRpY3QoeD14LCB5PXksIHo9eikKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZCA9IGRpY3QoeD14LCB5PXksIHo9eiwgdz13KQorICAgICAgICBzZWxmLl90cmFja2VkKGQpCisgICAgICAgIGQgPSBkaWN0KCkKKyAgICAgICAgZC51cGRhdGUoeD14LCB5PXksIHo9eikKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZC51cGRhdGUodz13KQorICAgICAgICBzZWxmLl90cmFja2VkKGQpCisKKyAgICAgICAgZCA9IGRpY3QoWyh4LCB5KSwgKHosIDEpXSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZCA9IGRpY3QoWyh4LCB5KSwgKHosIHcpXSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkKQorICAgICAgICBkID0gZGljdCgpCisgICAgICAgIGQudXBkYXRlKFsoeCwgeSksICh6LCAxKV0pCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGQudXBkYXRlKFsoeCwgeSksICh6LCB3KV0pCisgICAgICAgIHNlbGYuX3RyYWNrZWQoZCkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfc3VidHlwZXMoc2VsZik6CisgICAgICAgICMgRGljdCBzdWJ0eXBlcyBhcmUgYWx3YXlzIHRyYWNrZWQKKyAgICAgICAgY2xhc3MgTXlEaWN0KGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl90cmFja2VkKE15RGljdCgpKQogCiAKIGZyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cwpAQCAtNTgyLDcgKzY2Myw3IEBACiAgICAgdHlwZTJ0ZXN0ID0gRGljdAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKICAgICAgICAgKCdkaWN0KC5oYXNfa2V5Li58IGluZXF1YWxpdHkgY29tcGFyaXNvbnMpIG5vdCBzdXBwb3J0ZWQgaW4gMy54JywKICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaWN0Y29tcHMucHkgYi9MaWIvdGVzdC90ZXN0X2RpY3Rjb21wcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWY5ZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9kaWN0Y29tcHMucHkKQEAgLTAsMCArMSw1NCBAQAorCitkb2N0ZXN0cyA9ICIiIgorCisgICAgPj4+IGsgPSAib2xkIHZhbHVlIgorICAgID4+PiB7IGs6IE5vbmUgZm9yIGsgaW4gcmFuZ2UoMTApIH0KKyAgICB7MDogTm9uZSwgMTogTm9uZSwgMjogTm9uZSwgMzogTm9uZSwgNDogTm9uZSwgNTogTm9uZSwgNjogTm9uZSwgNzogTm9uZSwgODogTm9uZSwgOTogTm9uZX0KKyAgICA+Pj4gaworICAgICdvbGQgdmFsdWUnCisKKyAgICA+Pj4geyBrOiBrKzEwIGZvciBrIGluIHJhbmdlKDEwKSB9CisgICAgezA6IDEwLCAxOiAxMSwgMjogMTIsIDM6IDEzLCA0OiAxNCwgNTogMTUsIDY6IDE2LCA3OiAxNywgODogMTgsIDk6IDE5fQorCisgICAgPj4+IGcgPSAiR2xvYmFsIHZhcmlhYmxlIgorICAgID4+PiB7IGs6IGcgZm9yIGsgaW4gcmFuZ2UoMTApIH0KKyAgICB7MDogJ0dsb2JhbCB2YXJpYWJsZScsIDE6ICdHbG9iYWwgdmFyaWFibGUnLCAyOiAnR2xvYmFsIHZhcmlhYmxlJywgMzogJ0dsb2JhbCB2YXJpYWJsZScsIDQ6ICdHbG9iYWwgdmFyaWFibGUnLCA1OiAnR2xvYmFsIHZhcmlhYmxlJywgNjogJ0dsb2JhbCB2YXJpYWJsZScsIDc6ICdHbG9iYWwgdmFyaWFibGUnLCA4OiAnR2xvYmFsIHZhcmlhYmxlJywgOTogJ0dsb2JhbCB2YXJpYWJsZSd9CisKKyAgICA+Pj4geyBrOiB2IGZvciBrIGluIHJhbmdlKDEwKSBmb3IgdiBpbiByYW5nZSgxMCkgaWYgayA9PSB2IH0KKyAgICB7MDogMCwgMTogMSwgMjogMiwgMzogMywgNDogNCwgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOX0KKworICAgID4+PiB7IGs6IHYgZm9yIHYgaW4gcmFuZ2UoMTApIGZvciBrIGluIHJhbmdlKHYqOSwgdioxMCkgfQorICAgIHs5OiAxLCAxODogMiwgMTk6IDIsIDI3OiAzLCAyODogMywgMjk6IDMsIDM2OiA0LCAzNzogNCwgMzg6IDQsIDM5OiA0LCA0NTogNSwgNDY6IDUsIDQ3OiA1LCA0ODogNSwgNDk6IDUsIDU0OiA2LCA1NTogNiwgNTY6IDYsIDU3OiA2LCA1ODogNiwgNTk6IDYsIDYzOiA3LCA2NDogNywgNjU6IDcsIDY2OiA3LCA2NzogNywgNjg6IDcsIDY5OiA3LCA3MjogOCwgNzM6IDgsIDc0OiA4LCA3NTogOCwgNzY6IDgsIDc3OiA4LCA3ODogOCwgNzk6IDgsIDgxOiA5LCA4MjogOSwgODM6IDksIDg0OiA5LCA4NTogOSwgODY6IDksIDg3OiA5LCA4ODogOSwgODk6IDl9CisKKyAgICA+Pj4geyB4OiB5IGZvciB5LCB4IGluICgoMSwgMiksICgzLCA0KSkgfSA9IDUgIyBkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgLi4uCisgICAgU3ludGF4RXJyb3I6IC4uLgorCisgICAgPj4+IHsgeDogeSBmb3IgeSwgeCBpbiAoKDEsIDIpLCAoMywgNCkpIH0gKz0gNSAjIGRvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogLi4uCisKKyIiIgorCitfX3Rlc3RfXyA9IHsnZG9jdGVzdHMnIDogZG9jdGVzdHN9CisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICBpbXBvcnQgc3lzCisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfZGljdGNvbXBzCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZGljdGNvbXBzLCB2ZXJib3NlKQorCisgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X2RpY3Rjb21wcywgdmVyYm9zZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludChjb3VudHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGljdHZpZXdzLnB5IGIvTGliL3Rlc3QvdGVzdF9kaWN0dmlld3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwMzY3NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZGljdHZpZXdzLnB5CkBAIC0wLDAgKzEsMTU0IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIERpY3RTZXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yc19ub3RfY2FsbGFibGUoc2VsZik6CisgICAgICAgIGt0ID0gdHlwZSh7fS52aWV3a2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGt0LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBrdCkKKyAgICAgICAgaXQgPSB0eXBlKHt9LnZpZXdpdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGl0LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpdCkKKyAgICAgICAgdnQgPSB0eXBlKHt9LnZpZXd2YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB2dCwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdnQpCisKKyAgICBkZWYgdGVzdF9kaWN0X2tleXMoc2VsZik6CisgICAgICAgIGQgPSB7MTogMTAsICJhIjogIkFCQyJ9CisgICAgICAgIGtleXMgPSBkLnZpZXdrZXlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGtleXMpLCBzZXQoWzEsICJhIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIHNldChbMSwgImEiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5cywgc2V0KFsxLCAiYSIsICJiIl0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleXMsIHNldChbMSwgImIiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5cywgc2V0KFsxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5cywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMSwga2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiYSIsIGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIloiLCBrZXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmlld2tleXMoKSwgZC52aWV3a2V5cygpKQorICAgICAgICBlID0gezE6IDExLCAiYSI6ICJkZWYifQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmlld2tleXMoKSwgZS52aWV3a2V5cygpKQorICAgICAgICBkZWwgZVsiYSJdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZC52aWV3a2V5cygpLCBlLnZpZXdrZXlzKCkpCisKKyAgICBkZWYgdGVzdF9kaWN0X2l0ZW1zKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBpdGVtcyA9IGQudmlld2l0ZW1zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXRlbXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChpdGVtcyksIHNldChbKDEsIDEwKSwgKCJhIiwgIkFCQyIpXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbXMsIHNldChbKDEsIDEwKSwgKCJhIiwgIkFCQyIpXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaXRlbXMsIHNldChbKDEsIDEwKSwgKCJhIiwgIkFCQyIpLCAianVuayJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpdGVtcywgc2V0KFsoMSwgMTApLCAoImEiLCAiZGVmIildKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpdGVtcywgc2V0KFsoMSwgMTApXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaXRlbXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEluKCgxLCAxMCksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydEluKCgiYSIsICJBQkMiKSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKDEsIDExKSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKCksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgxLCksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgxLCAyLCAzKSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52aWV3aXRlbXMoKSwgZC52aWV3aXRlbXMoKSkKKyAgICAgICAgZSA9IGQuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52aWV3aXRlbXMoKSwgZS52aWV3aXRlbXMoKSkKKyAgICAgICAgZVsiYSJdID0gImRlZiIKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkLnZpZXdpdGVtcygpLCBlLnZpZXdpdGVtcygpKQorCisgICAgZGVmIHRlc3RfZGljdF9taXhlZF9rZXlzX2l0ZW1zKHNlbGYpOgorICAgICAgICBkID0geygxLCAxKTogMTEsICgyLCAyKTogMjJ9CisgICAgICAgIGUgPSB7MTogMSwgMjogMn0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnZpZXdrZXlzKCksIGUudmlld2l0ZW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZC52aWV3aXRlbXMoKSwgZS52aWV3a2V5cygpKQorCisgICAgZGVmIHRlc3RfZGljdF92YWx1ZXMoc2VsZik6CisgICAgICAgIGQgPSB7MTogMTAsICJhIjogIkFCQyJ9CisgICAgICAgIHZhbHVlcyA9IGQudmlld3ZhbHVlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHZhbHVlcyksIHNldChbMTAsICJBQkMiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlcyksIDIpCisKKyAgICBkZWYgdGVzdF9kaWN0X3JlcHIoc2VsZik6CisgICAgICAgIGQgPSB7MTogMTAsICJhIjogIkFCQyJ9CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXByKGQpLCBzdHIpCisgICAgICAgIHIgPSByZXByKGQudmlld2l0ZW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyID09ICJkaWN0X2l0ZW1zKFsoJ2EnLCAnQUJDJyksICgxLCAxMCldKSIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPT0gImRpY3RfaXRlbXMoWygxLCAxMCksICgnYScsICdBQkMnKV0pIikKKyAgICAgICAgciA9IHJlcHIoZC52aWV3a2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uociwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUociA9PSAiZGljdF9rZXlzKFsnYScsIDFdKSIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPT0gImRpY3Rfa2V5cyhbMSwgJ2EnXSkiKQorICAgICAgICByID0gcmVwcihkLnZpZXd2YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gImRpY3RfdmFsdWVzKFsnQUJDJywgMTBdKSIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPT0gImRpY3RfdmFsdWVzKFsxMCwgJ0FCQyddKSIpCisKKyAgICBkZWYgdGVzdF9rZXlzX3NldF9vcGVyYXRpb25zKHNlbGYpOgorICAgICAgICBkMSA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgZDIgPSB7J2InOiAzLCAnYyc6IDJ9CisgICAgICAgIGQzID0geydkJzogNCwgJ2UnOiA1fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgJiBkMS52aWV3a2V5cygpLCB7J2EnLCAnYid9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgJiBkMi52aWV3a2V5cygpLCB7J2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpICYgZDMudmlld2tleXMoKSwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSAmIHNldChkMS52aWV3a2V5cygpKSwgeydhJywgJ2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpICYgc2V0KGQyLnZpZXdrZXlzKCkpLCB7J2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpICYgc2V0KGQzLnZpZXdrZXlzKCkpLCBzZXQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBkMS52aWV3a2V5cygpLCB7J2EnLCAnYid9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBkMi52aWV3a2V5cygpLCB7J2EnLCAnYicsICdjJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSB8IGQzLnZpZXdrZXlzKCksIHsnYScsICdiJywgJ2QnLCAnZSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBzZXQoZDEudmlld2tleXMoKSksIHsnYScsICdiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSB8IHNldChkMi52aWV3a2V5cygpKSwgeydhJywgJ2InLCAnYyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBzZXQoZDMudmlld2tleXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydhJywgJ2InLCAnZCcsICdlJ30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIF4gZDEudmlld2tleXMoKSwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSBeIGQyLnZpZXdrZXlzKCksIHsnYScsICdjJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSBeIGQzLnZpZXdrZXlzKCksIHsnYScsICdiJywgJ2QnLCAnZSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgXiBzZXQoZDEudmlld2tleXMoKSksIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgXiBzZXQoZDIudmlld2tleXMoKSksIHsnYScsICdjJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSBeIHNldChkMy52aWV3a2V5cygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnLCAnYicsICdkJywgJ2UnfSkKKworICAgIGRlZiB0ZXN0X2l0ZW1zX3NldF9vcGVyYXRpb25zKHNlbGYpOgorICAgICAgICBkMSA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgZDIgPSB7J2EnOiAyLCAnYic6IDJ9CisgICAgICAgIGQzID0geydkJzogNCwgJ2UnOiA1fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZDEudmlld2l0ZW1zKCkgJiBkMS52aWV3aXRlbXMoKSwgeygnYScsIDEpLCAoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgJiBkMi52aWV3aXRlbXMoKSwgeygnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSAmIGQzLnZpZXdpdGVtcygpLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSAmIHNldChkMS52aWV3aXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgJiBzZXQoZDIudmlld2l0ZW1zKCkpLCB7KCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpICYgc2V0KGQzLnZpZXdpdGVtcygpKSwgc2V0KCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSB8IGQxLnZpZXdpdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIHwgZDIudmlld2l0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2EnLCAyKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIHwgZDMudmlld2l0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKSwgKCdkJywgNCksICgnZScsIDUpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSB8IHNldChkMS52aWV3aXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgfCBzZXQoZDIudmlld2l0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdhJywgMiksICgnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSB8IHNldChkMy52aWV3aXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKSwgKCdkJywgNCksICgnZScsIDUpfSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIF4gZDEudmlld2l0ZW1zKCksIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIF4gZDIudmlld2l0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2EnLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgXiBkMy52aWV3aXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7KCdhJywgMSksICgnYicsIDIpLCAoJ2QnLCA0KSwgKCdlJywgNSl9KQorCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChEaWN0U2V0VGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaWZmbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9kaWZmbGliLnB5CmluZGV4IGFkNWE2YjMuLjM1MzM0NTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGlmZmxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkKQEAgLTQsOCArNCw0NyBAQAogaW1wb3J0IGRvY3Rlc3QKIGltcG9ydCBzeXMKIAotY2xhc3MgVGVzdFNGYnVncyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKK2NsYXNzIFRlc3RXaXRoQXNjaWkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X29uZV9pbnNlcnQoc2VsZik6CisgICAgICAgIHNtID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgJ2InICogMTAwLCAnYScgKyAnYicgKiAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc20ucmF0aW8oKSwgMC45OTUsIHBsYWNlcz0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc20uZ2V0X29wY29kZXMoKSksCisgICAgICAgICAgICBbICAgKCdpbnNlcnQnLCAwLCAwLCAwLCAxKSwKKyAgICAgICAgICAgICAgICAoJ2VxdWFsJywgMCwgMTAwLCAxLCAxMDEpXSkKKyAgICAgICAgc20gPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCAnYicgKiAxMDAsICdiJyAqIDUwICsgJ2EnICsgJ2InICogNTApCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc20ucmF0aW8oKSwgMC45OTUsIHBsYWNlcz0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc20uZ2V0X29wY29kZXMoKSksCisgICAgICAgICAgICBbICAgKCdlcXVhbCcsIDAsIDUwLCAwLCA1MCksCisgICAgICAgICAgICAgICAgKCdpbnNlcnQnLCA1MCwgNTAsIDUwLCA1MSksCisgICAgICAgICAgICAgICAgKCdlcXVhbCcsIDUwLCAxMDAsIDUxLCAxMDEpXSkKKworICAgIGRlZiB0ZXN0X29uZV9kZWxldGUoc2VsZik6CisgICAgICAgIHNtID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgJ2EnICogNDAgKyAnYycgKyAnYicgKiA0MCwgJ2EnICogNDAgKyAnYicgKiA0MCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzbS5yYXRpbygpLCAwLjk5NCwgcGxhY2VzPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzbS5nZXRfb3Bjb2RlcygpKSwKKyAgICAgICAgICAgIFsgICAoJ2VxdWFsJywgMCwgNDAsIDAsIDQwKSwKKyAgICAgICAgICAgICAgICAoJ2RlbGV0ZScsIDQwLCA0MSwgNDAsIDQwKSwKKyAgICAgICAgICAgICAgICAoJ2VxdWFsJywgNDEsIDgxLCA0MCwgODApXSkKKworCitjbGFzcyBUZXN0QXV0b2p1bmsodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciB0aGUgYXV0b2p1bmsgcGFyYW1ldGVyIGFkZGVkIGluIDIuNyIiIgorICAgIGRlZiB0ZXN0X29uZV9pbnNlcnRfaG9tb2dlbm91c19zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgIyBCeSBkZWZhdWx0IGF1dG9qdW5rPVRydWUgYW5kIHRoZSBoZXVyaXN0aWMga2lja3MgaW4gZm9yIGEgc2VxdWVuY2UKKyAgICAgICAgIyBvZiBsZW5ndGggMjAwKworICAgICAgICBzZXExID0gJ2InICogMjAwCisgICAgICAgIHNlcTIgPSAnYScgKyAnYicgKiAyMDAKKworICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsIHNlcTEsIHNlcTIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc20ucmF0aW8oKSwgMCwgcGxhY2VzPTMpCisKKyAgICAgICAgIyBOb3cgdHVybiB0aGUgaGV1cmlzdGljIG9mZgorICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsIHNlcTEsIHNlcTIsIGF1dG9qdW5rPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNtLnJhdGlvKCksIDAuOTk3NSwgcGxhY2VzPTMpCisKKworY2xhc3MgVGVzdFNGYnVncyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmF0aW9fZm9yX251bGxfc2VxbihzZWxmKToKICAgICAgICAgIyBDaGVjayBjbGVhcmluZyBvZiBTRiBidWcgNzYzMDIzCiAgICAgICAgIHMgPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCBbXSwgW10pCkBAIC0xNDMsMTQgKzE4MiwxMyBAQAogICAgICAgICAgICAgIGsubWFrZV90YWJsZShmMy5zcGxpdGxpbmVzKFRydWUpLHQzLnNwbGl0bGluZXMoVHJ1ZSkpLAogICAgICAgICAgICAgIF0pCiAgICAgICAgIGFjdHVhbCA9IGZ1bGwucmVwbGFjZSgnPC9ib2R5PicsJ1xuJXNcbjwvYm9keT4nICUgdGFibGVzKQotICAgICAgICAjIHRlbXBvcmFyaWx5IHVuY29tbWVudCBuZXh0IHRocmVlIGxpbmVzIHRvIGJhc2VsaW5lIHRoaXMgdGVzdAotICAgICAgICAjZiA9IG9wZW4oJ3Rlc3RfZGlmZmxpYl9leHBlY3QuaHRtbCcsJ3cnKQotICAgICAgICAjZi53cml0ZShhY3R1YWwpCi0gICAgICAgICNmLmNsb3NlKCkKLSAgICAgICAgZXhwZWN0ID0gb3BlbihmaW5kZmlsZSgndGVzdF9kaWZmbGliX2V4cGVjdC5odG1sJykpLnJlYWQoKQogCisgICAgICAgICMgdGVtcG9yYXJpbHkgdW5jb21tZW50IG5leHQgdHdvIGxpbmVzIHRvIGJhc2VsaW5lIHRoaXMgdGVzdAorICAgICAgICAjd2l0aCBvcGVuKCd0ZXN0X2RpZmZsaWJfZXhwZWN0Lmh0bWwnLCd3JykgYXMgZnA6CisgICAgICAgICMgICAgZnAud3JpdGUoYWN0dWFsKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLGV4cGVjdCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbmRmaWxlKCd0ZXN0X2RpZmZsaWJfZXhwZWN0Lmh0bWwnKSkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZnAucmVhZCgpKQogCiAgICAgZGVmIHRlc3RfcmVjdXJzaW9uX2xpbWl0KHNlbGYpOgogICAgICAgICAjIENoZWNrIGlmIHRoZSBwcm9ibGVtIGRlc2NyaWJlZCBpbiBwYXRjaCAjMTQxMzcxMSBleGlzdHMuCkBAIC0xNjAsMTAgKzE5OCwzNCBAQAogICAgICAgICBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCBvbGQsIG5ldykuZ2V0X29wY29kZXMoKQogCiAKK2NsYXNzIFRlc3RPdXRwdXRGb3JtYXQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RhYl9kZWxpbWl0ZXIoc2VsZik6CisgICAgICAgIGFyZ3MgPSBbJ29uZScsICd0d28nLCAnT3JpZ2luYWwnLCAnQ3VycmVudCcsCisgICAgICAgICAgICAnMjAwNS0wMS0yNiAyMzozMDo1MCcsICcyMDEwLTA0LTAyIDEwOjIwOjUyJ10KKyAgICAgICAgdWQgPSBkaWZmbGliLnVuaWZpZWRfZGlmZigqYXJncywgbGluZXRlcm09JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh1ZClbMDoyXSwgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLSBPcmlnaW5hbFx0MjAwNS0wMS0yNiAyMzozMDo1MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiKysrIEN1cnJlbnRcdDIwMTAtMDQtMDIgMTA6MjA6NTIiXSkKKyAgICAgICAgY2QgPSBkaWZmbGliLmNvbnRleHRfZGlmZigqYXJncywgbGluZXRlcm09JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjZClbMDoyXSwgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIioqKiBPcmlnaW5hbFx0MjAwNS0wMS0yNiAyMzozMDo1MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tIEN1cnJlbnRcdDIwMTAtMDQtMDIgMTA6MjA6NTIiXSkKKworICAgIGRlZiB0ZXN0X25vX3RyYWlsaW5nX3RhYl9vbl9lbXB0eV9maWxlZGF0ZShzZWxmKToKKyAgICAgICAgYXJncyA9IFsnb25lJywgJ3R3bycsICdPcmlnaW5hbCcsICdDdXJyZW50J10KKyAgICAgICAgdWQgPSBkaWZmbGliLnVuaWZpZWRfZGlmZigqYXJncywgbGluZXRlcm09JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh1ZClbMDoyXSwgWyItLS0gT3JpZ2luYWwiLCAiKysrIEN1cnJlbnQiXSkKKworICAgICAgICBjZCA9IGRpZmZsaWIuY29udGV4dF9kaWZmKCphcmdzLCBsaW5ldGVybT0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNkKVswOjJdLCBbIioqKiBPcmlnaW5hbCIsICItLS0gQ3VycmVudCJdKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBkaWZmbGliLkh0bWxEaWZmLl9kZWZhdWx0X3ByZWZpeCA9IDAKICAgICBEb2N0ZXN0cyA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKGRpZmZsaWIpCi0gICAgcnVuX3VuaXR0ZXN0KFRlc3RTRnBhdGNoZXMsIFRlc3RTRmJ1Z3MsIERvY3Rlc3RzKQorICAgIHJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdFdpdGhBc2NpaSwgVGVzdEF1dG9qdW5rLCBUZXN0U0ZwYXRjaGVzLCBUZXN0U0ZidWdzLAorICAgICAgICBUZXN0T3V0cHV0Rm9ybWF0LCBEb2N0ZXN0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaXJjYWNoZS5weSBiL0xpYi90ZXN0L3Rlc3RfZGlyY2FjaGUucHkKaW5kZXggMjc2YzUyYS4uYzZhZDMxYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaXJjYWNoZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RpcmNhY2hlLnB5CkBAIC00LDcgKzQsNyBAQAogIiIiCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIGltcG9ydF9tb2R1bGUKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQogZGlyY2FjaGUgPSBpbXBvcnRfbW9kdWxlKCdkaXJjYWNoZScsIGRlcHJlY2F0ZWQ9VHJ1ZSkKIGltcG9ydCBvcywgdGltZSwgc3lzLCB0ZW1wZmlsZQogCkBAIC0zNSwxMCArMzUsMTAgQEAKICAgICBkZWYgdGVzdF9saXN0ZGlyKHNlbGYpOgogICAgICAgICAjIyBTVUNDRVNTRlVMIENBU0VTCiAgICAgICAgIGVudHJpZXMgPSBkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZW50cmllcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cmllcywgW10pCiAKICAgICAgICAgIyBDaGVjayB0aGF0IGNhY2hlIGlzIGFjdHVhbGx5IGNhY2hpbmcsIG5vdCBqdXN0IHBhc3NpbmcgdGhyb3VnaC4KLSAgICAgICAgc2VsZi5hc3NlcnRfKGRpcmNhY2hlLmxpc3RkaXIoc2VsZi50ZW1wZGlyKSBpcyBlbnRyaWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlyY2FjaGUubGlzdGRpcihzZWxmLnRlbXBkaXIpIGlzIGVudHJpZXMpCiAKICAgICAgICAgIyBEaXJlY3RvcmllcyBhcmVuJ3QgImZpbGVzIiBvbiBXaW5kb3dzLCBhbmQgZGlyZWN0b3J5IG10aW1lIGhhcwogICAgICAgICAjIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGVuIGZpbGVzIHVuZGVyIGEgZGlyZWN0b3J5IGdldCBjcmVhdGVkLgpAQCAtNTIsOCArNTIsOCBAQAogICAgICAgICAgICAgdGltZS5zbGVlcCgxKQogICAgICAgICAgICAgc2VsZi53cml0ZVRlbXAoInRlc3QxIikKICAgICAgICAgICAgIGVudHJpZXMgPSBkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVudHJpZXMsIFsndGVzdDEnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikgaXMgZW50cmllcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cmllcywgWyd0ZXN0MSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmNhY2hlLmxpc3RkaXIoc2VsZi50ZW1wZGlyKSBpcyBlbnRyaWVzKQogCiAgICAgICAgICMjIFVOU1VDQ0VTU0ZVTCBDQVNFUwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBkaXJjYWNoZS5saXN0ZGlyLCBzZWxmLnRlbXBkaXIrIl9ub25leGlzdGVudCIpCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIHNlbGYubWtkaXJUZW1wKCJBIikKICAgICAgICAgbHN0ID0gWydBJywgJ3Rlc3QyJywgJ3Rlc3Rfbm9uZXhpc3RlbnQnXQogICAgICAgICBkaXJjYWNoZS5hbm5vdGF0ZShzZWxmLnRlbXBkaXIsIGxzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobHN0LCBbJ0EvJywgJ3Rlc3QyJywgJ3Rlc3Rfbm9uZXhpc3RlbnQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFsnQS8nLCAndGVzdDInLCAndGVzdF9ub25leGlzdGVudCddKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGlzLnB5IGIvTGliL3Rlc3QvdGVzdF9kaXMucHkKaW5kZXggZmQ1MDhhOS4uMzg0OWRjMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaXMucHkKQEAgLTU0LDI5ICs1NCwyMyBAQAogCiBkaXNfYnVnMTMzMzk4MiA9ICIiIlwKICAlLTRkICAgICAgICAgMCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMCkKLSAgICAgICAgICAgICAgMyBKVU1QX0lGX1RSVUUgICAgICAgICAgICA0MSAodG8gNDcpCi0gICAgICAgICAgICAgIDYgUE9QX1RPUAotICAgICAgICAgICAgICA3IExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChBc3NlcnRpb25FcnJvcikKLSAgICAgICAgICAgICAxMCBCVUlMRF9MSVNUICAgICAgICAgICAgICAgMAotICAgICAgICAgICAgIDEzIERVUF9UT1AKLSAgICAgICAgICAgICAxNCBTVE9SRV9GQVNUICAgICAgICAgICAgICAgMSAoX1sxXSkKLSAgICAgICAgICAgICAxNyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoeCkKLSAgICAgICAgICAgICAyMCBHRVRfSVRFUgotICAgICAgICA+PiAgIDIxIEZPUl9JVEVSICAgICAgICAgICAgICAgIDEzICh0byAzNykKLSAgICAgICAgICAgICAyNCBTVE9SRV9GQVNUICAgICAgICAgICAgICAgMiAocykKLSAgICAgICAgICAgICAyNyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMSAoX1sxXSkKLSAgICAgICAgICAgICAzMCBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMiAocykKLSAgICAgICAgICAgICAzMyBMSVNUX0FQUEVORAotICAgICAgICAgICAgIDM0IEpVTVBfQUJTT0xVVEUgICAgICAgICAgIDIxCi0gICAgICAgID4+ICAgMzcgREVMRVRFX0ZBU1QgICAgICAgICAgICAgIDEgKF9bMV0pCisgICAgICAgICAgICAgIDMgUE9QX0pVTVBfSUZfVFJVRSAgICAgICAgMzgKKyAgICAgICAgICAgICAgNiBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoQXNzZXJ0aW9uRXJyb3IpCisgICAgICAgICAgICAgIDkgQlVJTERfTElTVCAgICAgICAgICAgICAgIDAKKyAgICAgICAgICAgICAxMiBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoeCkKKyAgICAgICAgICAgICAxNSBHRVRfSVRFUgorICAgICAgICA+PiAgIDE2IEZPUl9JVEVSICAgICAgICAgICAgICAgIDEyICh0byAzMSkKKyAgICAgICAgICAgICAxOSBTVE9SRV9GQVNUICAgICAgICAgICAgICAgMSAocykKKyAgICAgICAgICAgICAyMiBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMSAocykKKyAgICAgICAgICAgICAyNSBMSVNUX0FQUEVORCAgICAgICAgICAgICAgMgorICAgICAgICAgICAgIDI4IEpVTVBfQUJTT0xVVEUgICAgICAgICAgIDE2CiAKLSAlLTRkICAgICAgICA0MCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMiAoMSkKLSAgICAgICAgICAgICA0MyBCSU5BUllfQURECi0gICAgICAgICAgICAgNDQgUkFJU0VfVkFSQVJHUyAgICAgICAgICAgIDIKLSAgICAgICAgPj4gICA0NyBQT1BfVE9QCisgJS00ZCAgID4+ICAgMzEgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDEpCisgICAgICAgICAgICAgMzQgQklOQVJZX0FERAorICAgICAgICAgICAgIDM1IFJBSVNFX1ZBUkFSR1MgICAgICAgICAgICAyCiAKLSAlLTRkICAgICAgICA0OCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKLSAgICAgICAgICAgICA1MSBSRVRVUk5fVkFMVUUKKyAlLTRkICAgPj4gICAzOCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKKyAgICAgICAgICAgICA0MSBSRVRVUk5fVkFMVUUKICIiIiUoYnVnMTMzMzk4Mi5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8gKyAxLAogICAgICBidWcxMzMzOTgyLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubyArIDIsCiAgICAgIGJ1ZzEzMzM5ODIuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vICsgMykKQEAgLTEwOSw4ICsxMDMsOCBAQAogCiAgICAgZGVmIHRlc3Rfb3BtYXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbWFwWyJTVE9QX0NPREUiXSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXMub3BtYXBbIkxPQURfQ09OU1QiXSBpbiBkaXMuaGFzY29uc3QsIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbWFwWyJTVE9SRV9OQU1FIl0gaW4gZGlzLmhhc25hbWUsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlzLm9wbWFwWyJMT0FEX0NPTlNUIl0sIGRpcy5oYXNjb25zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihkaXMub3BtYXBbIlNUT1JFX05BTUUiXSwgZGlzLmhhc25hbWUpCiAKICAgICBkZWYgdGVzdF9vcG5hbWUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbmFtZVtkaXMub3BtYXBbIkxPQURfRkFTVCJdXSwgIkxPQURfRkFTVCIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RsLnB5IGIvTGliL3Rlc3QvdGVzdF9kbC5weQppbmRleCBjMDRiYzFiLi42MDY5YTc3IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2RsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGwucHkKQEAgLTIsNyArMiw4IEBACiAiIiJUZXN0IGRsbW9kdWxlLmMKICAgIFJvZ2VyIEUuIE1hc3NlICByZXZpc2VkIHN0cmF0ZWd5IGJ5IEJhcnJ5IFdhcnNhdwogIiIiCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLFRlc3RTa2lwcGVkLCBpbXBvcnRfbW9kdWxlCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKIGRsID0gaW1wb3J0X21vZHVsZSgnZGwnLCBkZXByZWNhdGVkPVRydWUpCiAKIHNoYXJlZGxpYnMgPSBbCkBAIC0zMSw3ICszMiw3IEBACiAgICAgICAgICAgICAgICAgcHJpbnQgJ3dvcmtlZCEnCiAgICAgICAgICAgICBicmVhawogICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkLCAnQ291bGQgbm90IG9wZW4gYW55IHNoYXJlZCBsaWJyYXJpZXMnCisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAnQ291bGQgbm90IG9wZW4gYW55IHNoYXJlZCBsaWJyYXJpZXMnCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQppbmRleCBhNzQ3N2YyLi5jMDI3YWNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CkBAIC00OTksNiArNDk5LDggQEAKIHdpbGwgb25seSBiZSBnZW5lcmF0ZWQgZm9yIGl0IG9uY2U6CiAKICAgICA+Pj4gZnJvbSB0ZXN0IGltcG9ydCBkb2N0ZXN0X2FsaWFzZXMKKyAgICA+Pj4gYXNzZXJ0IGRvY3Rlc3RfYWxpYXNlcy5Ud29OYW1lcy5mCisgICAgPj4+IGFzc2VydCBkb2N0ZXN0X2FsaWFzZXMuVHdvTmFtZXMuZwogICAgID4+PiB0ZXN0cyA9IGV4Y2xfZW1wdHlfZmluZGVyLmZpbmQoZG9jdGVzdF9hbGlhc2VzKQogICAgID4+PiBwcmludCBsZW4odGVzdHMpCiAgICAgMgpAQCAtODYzLDYgKzg2NSw3NyBAQAogICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQogCitJR05PUkVfRVhDRVBUSU9OX0RFVEFJTCBhbHNvIGlnbm9yZXMgZGlmZmVyZW5jZSBpbiBleGNlcHRpb24gZm9ybWF0dGluZworYmV0d2VlbiBQeXRob24gdmVyc2lvbnMuIEZvciBleGFtcGxlLCBpbiBQeXRob24gMy54LCB0aGUgbW9kdWxlIHBhdGggb2YKK3RoZSBleGNlcHRpb24gaXMgaW4gdGhlIG91dHB1dCwgYnV0IHRoaXMgd2lsbCBmYWlsIHVuZGVyIFB5dGhvbiAyOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IGZyb20gaHR0cGxpYiBpbXBvcnQgSFRUUEV4Y2VwdGlvbgorICAgIC4uLiAgICAgPj4+IHJhaXNlIEhUVFBFeGNlcHRpb24oJ21lc3NhZ2UnKQorICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgaHR0cGxpYi5IVFRQRXhjZXB0aW9uOiBtZXNzYWdlCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA0LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHJhaXNlIEhUVFBFeGNlcHRpb24oJ21lc3NhZ2UnKQorICAgIEV4cGVjdGVkOgorICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIGh0dHBsaWIuSFRUUEV4Y2VwdGlvbjogbWVzc2FnZQorICAgIEdvdDoKKyAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAuLi4KKyAgICAgICAgSFRUUEV4Y2VwdGlvbjogbWVzc2FnZQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MikKKworQnV0IGluIFB5dGhvbiAyIHRoZSBtb2R1bGUgcGF0aCBpcyBub3QgaW5jbHVkZWQsIGFuIHRoZXJlZm9yZSBhIHRlc3QgbXVzdCBsb29rCitsaWtlIHRoZSBmb2xsb3dpbmcgdGVzdCB0byBzdWNjZWVkIGluIFB5dGhvbiAyLiBCdXQgdGhhdCB0ZXN0IHdpbGwgZmFpbCB1bmRlcgorUHl0aG9uIDMuCisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICByJycnCisgICAgLi4uICAgICA+Pj4gZnJvbSBodHRwbGliIGltcG9ydCBIVFRQRXhjZXB0aW9uCisgICAgLi4uICAgICA+Pj4gcmFpc2UgSFRUUEV4Y2VwdGlvbignbWVzc2FnZScpCisgICAgLi4uICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uICAgICBIVFRQRXhjZXB0aW9uOiBtZXNzYWdlCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKKworSG93ZXZlciwgd2l0aCBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTCwgdGhlIG1vZHVsZSBuYW1lIG9mIHRoZSBleGNlcHRpb24KKyhpZiBhbnkpIHdpbGwgYmUgaWdub3JlZDoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBmcm9tIGh0dHBsaWIgaW1wb3J0IEhUVFBFeGNlcHRpb24KKyAgICAuLi4gICAgID4+PiByYWlzZSBIVFRQRXhjZXB0aW9uKCdtZXNzYWdlJykgI2RvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgSFRUUEV4Y2VwdGlvbjogbWVzc2FnZQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisKK1RoZSBtb2R1bGUgcGF0aCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZCwgc28gdHdvIGRpZmZlcmVudCBtb2R1bGUgcGF0aHMgd2lsbAorc3RpbGwgcGFzcyBpZiBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTCBpcyBnaXZlbi4gVGhpcyBpcyBpbnRlbnRpb25hbCwgc28gaXQgY2FuCitiZSB1c2VkIHdoZW4gZXhjZXB0aW9ucyBoYXZlIGNoYW5nZWQgbW9kdWxlLgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IGZyb20gaHR0cGxpYiBpbXBvcnQgSFRUUEV4Y2VwdGlvbgorICAgIC4uLiAgICAgPj4+IHJhaXNlIEhUVFBFeGNlcHRpb24oJ21lc3NhZ2UnKSAjZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCisgICAgLi4uICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uICAgICBmb28uYmFyLkhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorCiBCdXQgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwgZG9lcyBub3QgYWxsb3cgYSBtaXNtYXRjaCBpbiB0aGUgZXhjZXB0aW9uIHR5cGU6CiAKICAgICA+Pj4gZGVmIGYoeCk6CkBAIC0xNjQ4LDEwICsxNzIxLDEzIEBACiAKICAgICAgID4+PiBkb2MgPSAnJycKICAgICAgIC4uLiA+Pj4geCA9IDQyCisgICAgICAuLi4gPj4+IHJhaXNlIEV4Y2VwdGlvbignY2zDqScpCisgICAgICAuLi4gVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uIEV4Y2VwdGlvbjogY2zDqQogICAgICAgLi4uID4+PiBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKICAgICAgIC4uLiAnJycKICAgICAgID4+PiBwYXJzZXIgPSBkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIoKQotICAgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCB7fSwgImZvbyIsICJmb28ucHkiLCAwKQorICAgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCB7fSwgImZvby1iw6RyQGJheiIsICJmb28tYsOkckBiYXoucHkiLCAwKQogICAgICAgPj4+IHJ1bm5lciA9IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKQogCiAgICAgVG8gZGVtb25zdHJhdGUgdGhpcywgd2UnbGwgY3JlYXRlIGEgZmFrZSBzdGFuZGFyZCBpbnB1dCB0aGF0CkBAIC0xNjY3LDEyICsxNzQzLDEyIEBACiAgICAgICA+Pj4gdHJ5OiBydW5uZXIucnVuKHRlc3QpCiAgICAgICAuLi4gZmluYWxseTogc3lzLnN0ZGluID0gcmVhbF9zdGRpbgogICAgICAgLS1SZXR1cm4tLQotICAgICAgPiA8ZG9jdGVzdCBmb29bMV0+KDEpPG1vZHVsZT4oKS0+Tm9uZQorICAgICAgPiA8ZG9jdGVzdCBmb28tYsOkckBiYXpbMl0+KDEpPG1vZHVsZT4oKS0+Tm9uZQogICAgICAgLT4gaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpCiAgICAgICAoUGRiKSBwcmludCB4CiAgICAgICA0MgogICAgICAgKFBkYikgY29udGludWUKLSAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKKyAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MykKIAogICAgICAgWW91IGNhbiBhbHNvIHB1dCBwZGIuc2V0X3RyYWNlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gYSB0ZXN0OgogCkBAIC0xNjg0LDcgKzE3NjAsNyBAQAogICAgICAgLi4uID4+PiB4PTEKICAgICAgIC4uLiA+Pj4gY2FsbHNfc2V0X3RyYWNlKCkKICAgICAgIC4uLiAnJycKLSAgICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywgZ2xvYmFscygpLCAiZm9vIiwgImZvby5weSIsIDApCisgICAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIGdsb2JhbHMoKSwgImZvby1iw6RyQGJheiIsICJmb28tYsOkckBiYXoucHkiLCAwKQogICAgICAgPj4+IHJlYWxfc3RkaW4gPSBzeXMuc3RkaW4KICAgICAgID4+PiBzeXMuc3RkaW4gPSBfRmFrZUlucHV0KFsKICAgICAgIC4uLiAgICAncHJpbnQgeScsICAjIHByaW50IGRhdGEgZGVmaW5lZCBpbiB0aGUgZnVuY3Rpb24KQEAgLTE3MDMsNyArMTc3OSw3IEBACiAgICAgICAoUGRiKSBwcmludCB5CiAgICAgICAyCiAgICAgICAoUGRiKSB1cAotICAgICAgPiA8ZG9jdGVzdCBmb29bMV0+KDEpPG1vZHVsZT4oKQorICAgICAgPiA8ZG9jdGVzdCBmb28tYsOkckBiYXpbMV0+KDEpPG1vZHVsZT4oKQogICAgICAgLT4gY2FsbHNfc2V0X3RyYWNlKCkKICAgICAgIChQZGIpIHByaW50IHgKICAgICAgIDEKQEAgLTE3MjEsNyArMTc5Nyw3IEBACiAgICAgICAuLi4gLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKICAgICAgIC4uLiA+Pj4gZigzKQogICAgICAgLi4uICcnJwotICAgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCBnbG9iYWxzKCksICJmb28iLCAiZm9vLnB5IiwgMCkKKyAgICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywgZ2xvYmFscygpLCAiZm9vLWLDpHJAYmF6IiwgImZvby1iw6RyQGJhei5weSIsIDApCiAgICAgICA+Pj4gcmVhbF9zdGRpbiA9IHN5cy5zdGRpbgogICAgICAgPj4+IHN5cy5zdGRpbiA9IF9GYWtlSW5wdXQoWwogICAgICAgLi4uICAgICdsaXN0JywgICAgICMgbGlzdCBzb3VyY2UgZnJvbSBleGFtcGxlIDIKQEAgLTE3MzUsNyArMTgxMSw3IEBACiAgICAgICAuLi4gZmluYWxseTogc3lzLnN0ZGluID0gcmVhbF9zdGRpbgogICAgICAgLi4uICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCiAgICAgICAtLVJldHVybi0tCi0gICAgICA+IDxkb2N0ZXN0IGZvb1sxXT4oMylnKCktPk5vbmUKKyAgICAgID4gPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzFdPigzKWcoKS0+Tm9uZQogICAgICAgLT4gaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpCiAgICAgICAoUGRiKSBsaXN0CiAgICAgICAgIDEgICAgIGRlZiBnKHgpOgpAQCAtMTc0NCw3ICsxODIwLDcgQEAKICAgICAgIFtFT0ZdCiAgICAgICAoUGRiKSBuZXh0CiAgICAgICAtLVJldHVybi0tCi0gICAgICA+IDxkb2N0ZXN0IGZvb1swXT4oMilmKCktPk5vbmUKKyAgICAgID4gPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzBdPigyKWYoKS0+Tm9uZQogICAgICAgLT4gZyh4KjIpCiAgICAgICAoUGRiKSBsaXN0CiAgICAgICAgIDEgICAgIGRlZiBmKHgpOgpAQCAtMTc1MiwxNCArMTgyOCwxNCBAQAogICAgICAgW0VPRl0KICAgICAgIChQZGIpIG5leHQKICAgICAgIC0tUmV0dXJuLS0KLSAgICAgID4gPGRvY3Rlc3QgZm9vWzJdPigxKTxtb2R1bGU+KCktPk5vbmUKKyAgICAgID4gPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzJdPigxKTxtb2R1bGU+KCktPk5vbmUKICAgICAgIC0+IGYoMykKICAgICAgIChQZGIpIGxpc3QKICAgICAgICAgMSAgLT4gZigzKQogICAgICAgW0VPRl0KICAgICAgIChQZGIpIGNvbnRpbnVlCiAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICBGaWxlICJmb28ucHkiLCBsaW5lIDcsIGluIGZvbworICAgICAgRmlsZSAiZm9vLWLDpHJAYmF6LnB5IiwgbGluZSA3LCBpbiBmb28tYsOkckBiYXoKICAgICAgIEZhaWxlZCBleGFtcGxlOgogICAgICAgICAgIGYoMykKICAgICAgIEV4cGVjdGVkIG5vdGhpbmcKQEAgLTE3OTMsNyArMTg2OSw3IEBACiAgICAgLi4uICcnJwogICAgID4+PiBwYXJzZXIgPSBkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIoKQogICAgID4+PiBydW5uZXIgPSBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkKLSAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIGdsb2JhbHMoKSwgImZvbyIsICJmb28ucHkiLCAwKQorICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywgZ2xvYmFscygpLCAiZm9vLWLDpHJAYmF6IiwgImZvby1iw6RyQGJhei5weSIsIDApCiAgICAgPj4+IHJlYWxfc3RkaW4gPSBzeXMuc3RkaW4KICAgICA+Pj4gc3lzLnN0ZGluID0gX0Zha2VJbnB1dChbCiAgICAgLi4uICAgICdwcmludCB5JywgICMgcHJpbnQgZGF0YSBkZWZpbmVkIGluIHRoZSBmdW5jdGlvbgpAQCAtMTg0NSw3ICsxOTIxLDcgQEAKICAgICAoUGRiKSBwcmludCB5CiAgICAgMQogICAgIChQZGIpIHVwCi0gICAgPiA8ZG9jdGVzdCBmb29bMV0+KDEpPG1vZHVsZT4oKQorICAgID4gPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzFdPigxKTxtb2R1bGU+KCkKICAgICAtPiBjYWxsc19zZXRfdHJhY2UoKQogICAgIChQZGIpIHByaW50IGZvbwogICAgICoqKiBOYW1lRXJyb3I6IG5hbWUgJ2ZvbycgaXMgbm90IGRlZmluZWQKQEAgLTE4NjMsMTkgKzE5MzksMTkgQEAKICAgICAgICAgID4+PiBpbXBvcnQgdGVzdC5zYW1wbGVfZG9jdGVzdAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUodGVzdC5zYW1wbGVfZG9jdGVzdCkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz00PgogCiAgICAgICAgV2UgY2FuIGFsc28gc3VwcGx5IHRoZSBtb2R1bGUgYnkgbmFtZToKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3QnKQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz00PgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTQ+CiAKICAgICAgICBXZSBjYW4gdXNlIHRoZSBjdXJyZW50IG1vZHVsZToKIAogICAgICAgICAgPj4+IHN1aXRlID0gdGVzdC5zYW1wbGVfZG9jdGVzdC50ZXN0X3N1aXRlKCkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz00PgogCiAgICAgICAgV2UgY2FuIHN1cHBseSBnbG9iYWwgdmFyaWFibGVzLiAgSWYgd2UgcGFzcyBnbG9icywgdGhleSB3aWxsIGJlCiAgICAgICAgdXNlZCBpbnN0ZWFkIG9mIHRoZSBtb2R1bGUgZ2xvYmFscy4gIEhlcmUgd2UnbGwgcGFzcyBhbiBlbXB0eQpAQCAtMTg4Myw3ICsxOTU5LDcgQEAKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3QnLCBnbG9icz17fSkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9NT4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz01PgogCiAgICAgICAgQWx0ZXJuYXRpdmVseSwgd2UgY2FuIHByb3ZpZGUgZXh0cmEgZ2xvYmFscy4gIEhlcmUgd2UnbGwgbWFrZSBhbgogICAgICAgIGVycm9yIGdvIGF3YXkgYnkgcHJvdmlkaW5nIGFuIGV4dHJhIGdsb2JhbCB2YXJpYWJsZToKQEAgLTE4OTEsNyArMTk2Nyw3IEBACiAgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdCcsCiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWdsb2JzPXsneSc6IDF9KQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz0zPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTM+CiAKICAgICAgICBZb3UgY2FuIHBhc3Mgb3B0aW9uIGZsYWdzLiAgSGVyZSB3ZSdsbCBjYXVzZSBhbiBleHRyYSBlcnJvcgogICAgICAgIGJ5IGRpc2FibGluZyB0aGUgYmxhbmstbGluZSBmZWF0dXJlOgpAQCAtMTg5OSw3ICsxOTc1LDcgQEAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0JywKICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25mbGFncz1kb2N0ZXN0LkRPTlRfQUNDRVBUX0JMQU5LTElORSkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9NT4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz01PgogCiAgICAgICAgWW91IGNhbiBzdXBwbHkgc2V0VXAgYW5kIHRlYXJEb3duIGZ1bmN0aW9uczoKIApAQCAtMTkxNiw3ICsxOTkyLDcgQEAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0JywKICAgICAgICAgIC4uLiAgICAgIHNldFVwPXNldFVwLCB0ZWFyRG93bj10ZWFyRG93bikKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz0zPgogCiAgICAgICAgQnV0IHRoZSB0ZWFyRG93biByZXN0b3JlcyBzYW5pdHk6CiAKQEAgLTE5MzQsNyArMjAxMCw3IEBACiAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0Jywgc2V0VXA9c2V0VXApCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTM+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KIAogICAgICAgIEhlcmUsIHdlIGRpZG4ndCBuZWVkIHRvIHVzZSBhIHRlYXJEb3duIGZ1bmN0aW9uIGJlY2F1c2Ugd2UKICAgICAgICBtb2RpZmllZCB0aGUgdGVzdCBnbG9iYWxzLCB3aGljaCBhcmUgYSBjb3B5IG9mIHRoZQpAQCAtMTk1Myw3ICsyMDI5LDcgQEAKICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RvY3Rlc3QyLnR4dCcsCiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnKQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0zPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTM+CiAKICAgICAgICBUaGUgdGVzdCBmaWxlcyBhcmUgbG9va2VkIGZvciBpbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCiAgICAgICAgY2FsbGluZyBtb2R1bGUuICBBIHBhY2thZ2Uga2V5d29yZCBhcmd1bWVudCBjYW4gYmUgcHJvdmlkZWQgdG8KQEAgLTE5NjUsNyArMjA0MSw3IEBACiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZT0ndGVzdCcpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTM+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KIAogICAgICAgIFN1cHBvcnQgZm9yIHVzaW5nIGEgcGFja2FnZSdzIF9fbG9hZGVyX18uZ2V0X2RhdGEoKSBpcyBhbHNvCiAgICAgICAgcHJvdmlkZWQuCkBAIC0xOTg0LDE0ICsyMDYwLDE0IEBACiAgICAgICAgICAuLi4gZmluYWxseToKICAgICAgICAgIC4uLiAgICAgaWYgYWRkZWRfbG9hZGVyOgogICAgICAgICAgLi4uICAgICAgICAgZGVsIHRlc3QuX19sb2FkZXJfXwotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0zPgogCiAgICAgICAgJy8nIHNob3VsZCBiZSB1c2VkIGFzIGEgcGF0aCBzZXBhcmF0b3IuICBJdCB3aWxsIGJlIGNvbnZlcnRlZAogICAgICAgIHRvIGEgbmF0aXZlIHNlcGFyYXRvciBhdCBydW4gdGltZToKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJy4uL3Rlc3QvdGVzdF9kb2N0ZXN0LnR4dCcpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTE+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MT4KIAogICAgICAgIElmIERvY0ZpbGVTdWl0ZSBpcyB1c2VkIGZyb20gYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbiwgdGhlbiBmaWxlcwogICAgICAgIGFyZSByZXNvbHZlZCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IG9mIHN5cy5hcmd2WzBdOgpAQCAtMjAxNiw3ICsyMDkyLDcgQEAKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUodGVzdF9maWxlLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTE+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MT4KIAogICAgICAgIEl0IGlzIGFuIGVycm9yIHRvIHNwZWNpZnkgYHBhY2thZ2VgIHdoZW4gYG1vZHVsZV9yZWxhdGl2ZT1GYWxzZWA6CiAKQEAgLTIwMzIsNyArMjEwOCw3IEBACiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYnM9eydmYXZvcml0ZV9jb2xvcic6ICdibHVlJ30pCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTI+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mj4KIAogICAgICAgIEluIHRoaXMgY2FzZSwgd2Ugc3VwcGxpZWQgYSBtaXNzaW5nIGZhdm9yaXRlIGNvbG9yLiBZb3UgY2FuCiAgICAgICAgcHJvdmlkZSBkb2N0ZXN0IG9wdGlvbnM6CkBAIC0yMDQzLDcgKzIxMTksNyBAQAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmZsYWdzPWRvY3Rlc3QuRE9OVF9BQ0NFUFRfQkxBTktMSU5FLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYnM9eydmYXZvcml0ZV9jb2xvcic6ICdibHVlJ30pCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTM+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KIAogICAgICAgIEFuZCwgeW91IGNhbiBwcm92aWRlIHNldFVwIGFuZCB0ZWFyRG93biBmdW5jdGlvbnM6CiAKQEAgLTIwNjIsNyArMjEzOCw3IEBACiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VXA9c2V0VXAsIHRlYXJEb3duPXRlYXJEb3duKQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0yPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTI+CiAKICAgICAgICBCdXQgdGhlIHRlYXJEb3duIHJlc3RvcmVzIHNhbml0eToKIApAQCAtMjA4MSw3ICsyMTU3LDcgQEAKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdC50eHQnLCBzZXRVcD1zZXRVcCkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MD4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MSBlcnJvcnM9MCBmYWlsdXJlcz0wPgogCiAgICAgICAgSGVyZSwgd2UgZGlkbid0IG5lZWQgdG8gdXNlIGEgdGVhckRvd24gZnVuY3Rpb24gYmVjYXVzZSB3ZQogICAgICAgIG1vZGlmaWVkIHRoZSB0ZXN0IGdsb2JhbHMuICBUaGUgdGVzdCBnbG9iYWxzIGFyZQpAQCAtMjA5Myw3ICsyMTY5LDcgQEAKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdDMudHh0JykKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MD4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MSBlcnJvcnM9MCBmYWlsdXJlcz0wPgogCiAgICAgICAgSWYgdGhlIHRlc3RzIGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIHdlIGhhdmUgdG8gc3BlY2lmeSB3aGljaAogICAgICAgIGVuY29kaW5nIHRoZSBmaWxlIGlzIGVuY29kZWQgd2l0aC4gV2UgZG8gc28gYnkgdXNpbmcgdGhlIGBlbmNvZGluZ2AKQEAgLTIxMDQsNyArMjE4MCw3IEBACiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9J3V0Zi04JykKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mj4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0yPgogCiAgICAgICAgIiIiCiAKQEAgLTI1MTEsNiArMjU4Nyw3IEBACiAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KGRvY3Rlc3QsIHZlcmJvc2l0eT1UcnVlKQogCiAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2RvY3Rlc3QKKwogICAgICMgSWdub3JlIGFsbCB3YXJuaW5ncyBhYm91dCB0aGUgdXNlIG9mIGNsYXNzIFRlc3RlciBpbiB0aGlzIG1vZHVsZS4KICAgICBkZXByZWNhdGlvbnMgPSBbKCJjbGFzcyBUZXN0ZXIgaXMgZGVwcmVjYXRlZCIsIERlcHJlY2F0aW9uV2FybmluZyldCiAgICAgaWYgc3lzLnB5M2t3YXJuaW5nOgpAQCAtMjUyMCw4ICsyNTk3LDkgQEAKICAgICAgICAgIyBDaGVjayB0aGUgZG9jdGVzdCBjYXNlcyBkZWZpbmVkIGhlcmU6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X2RvY3Rlc3QsIHZlcmJvc2l0eT1UcnVlKQogCi1pbXBvcnQgdHJhY2UsIHN5cworaW1wb3J0IHN5cwogZGVmIHRlc3RfY292ZXJhZ2UoY292ZXJkaXIpOgorICAgIHRyYWNlID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RyYWNlJykKICAgICB0cmFjZXIgPSB0cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXgsXSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZT0wLCBjb3VudD0xKQogICAgIHRyYWNlci5ydW4oJ3JlbG9hZChkb2N0ZXN0KTsgdGVzdF9tYWluKCknKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0Mi5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdDIucHkKaW5kZXggODY1YTMyZS4uOGMwNDNiYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QyLnB5CkBAIC0xMiw3ICsxMiwxMSBAQAogCiAiIiIKIAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraWYgc3lzLmZsYWdzLm9wdGltaXplID49IDI6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbm5vdCB0ZXN0IGRvY3N0cmluZ3Mgd2l0aCAtTzIiKQogCiBjbGFzcyBDKG9iamVjdCk6CiAgICAgdSIiIkNsYXNzIEMuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jeG1scnBjLnB5CmluZGV4IDEzYTNhOWYuLjcxNjMzM2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZG9jeG1scnBjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZG9jeG1scnBjLnB5CkBAIC0xLDE0ICsxLDI4IEBACiBmcm9tIERvY1hNTFJQQ1NlcnZlciBpbXBvcnQgRG9jWE1MUlBDU2VydmVyCiBpbXBvcnQgaHR0cGxpYgoraW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWltcG9ydCB0aHJlYWRpbmcKK3RocmVhZGluZyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogaW1wb3J0IHRpbWUKIGltcG9ydCBzb2NrZXQKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHhtbHJwY2xpYgogCiBQT1JUID0gTm9uZQogCitkZWYgbWFrZV9yZXF1ZXN0X2FuZF9za2lwSWYoY29uZGl0aW9uLCByZWFzb24pOgorICAgICMgSWYgd2Ugc2tpcCB0aGUgdGVzdCwgd2UgaGF2ZSB0byBtYWtlIGEgcmVxdWVzdCBiZWNhdXNlIHRoZQorICAgICMgdGhlIHNlcnZlciBjcmVhdGVkIGluIHNldFVwIGJsb2NrcyBleHBlY3Rpbmcgb25lIHRvIGNvbWUgaW4uCisgICAgaWYgbm90IGNvbmRpdGlvbjoKKyAgICAgICAgcmV0dXJuIGxhbWJkYSBmdW5jOiBmdW5jCisgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnJlcXVlc3QoIkdFVCIsICIvIikKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LmdldHJlc3BvbnNlKCkKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KHJlYXNvbikKKyAgICAgICAgcmV0dXJuIG1ha2VfcmVxdWVzdF9hbmRfc2tpcAorICAgIHJldHVybiBkZWNvcmF0b3IKKworCiBkZWYgc2VydmVyKGV2dCwgbnVtcmVxdWVzdHMpOgogICAgIHNlcnYgPSBEb2NYTUxSUENTZXJ2ZXIoKCJsb2NhbGhvc3QiLCAwKSwgbG9nUmVxdWVzdHM9RmFsc2UpCiAKQEAgLTIwLDggKzM0LDggQEAKICAgICAgICAgc2Vydi5zZXRfc2VydmVyX3RpdGxlKCJEb2NYTUxSUENTZXJ2ZXIgVGVzdCBEb2N1bWVudGF0aW9uIikKICAgICAgICAgc2Vydi5zZXRfc2VydmVyX25hbWUoIkRvY1hNTFJQQ1NlcnZlciBUZXN0IERvY3MiKQogICAgICAgICBzZXJ2LnNldF9zZXJ2ZXJfZG9jdW1lbnRhdGlvbigKLSIiIlRoaXMgaXMgYW4gWE1MLVJQQyBzZXJ2ZXIncyBkb2N1bWVudGF0aW9uLCBidXQgdGhlIHNlcnZlciBjYW4gYmUgdXNlZCBieQotUE9TVGluZyB0byAvUlBDMi4gVHJ5IHNlbGYuYWRkLCB0b28uIiIiKQorICAgICAgICAgICAgIlRoaXMgaXMgYW4gWE1MLVJQQyBzZXJ2ZXIncyBkb2N1bWVudGF0aW9uLCBidXQgdGhlIHNlcnZlciAiCisgICAgICAgICAgICAiY2FuIGJlIHVzZWQgYnkgUE9TVGluZyB0byAvUlBDMi4gVHJ5IHNlbGYuYWRkLCB0b28uIikKIAogICAgICAgICAjIENyZWF0ZSBhbmQgcmVnaXN0ZXIgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCiAgICAgICAgIGNsYXNzIFRlc3RDbGFzcyhvYmplY3QpOgpAQCAtNTUsNiArNjksNyBAQAogCiBjbGFzcyBEb2NYTUxSUENIVFRQR0VUU2VydmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKICAgICAgICAgIyBFbmFibGUgc2VydmVyIGZlZWRiYWNrCiAgICAgICAgIERvY1hNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyID0gVHJ1ZQogCkBAIC03Niw2ICs5MSw3IEBACiAKICAgICAgICAgIyBEaXNhYmxlIHNlcnZlciBmZWVkYmFjawogICAgICAgICBEb2NYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlciA9IEZhbHNlCisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKIAogICAgIGRlZiB0ZXN0X3ZhbGlkX2dldF9yZXNwb25zZShzZWxmKToKICAgICAgICAgc2VsZi5jbGllbnQucmVxdWVzdCgiR0VUIiwgIi8iKQpAQCAtMTA2LDM2ICsxMjIsNjggQEAKICAgICAgICAgc2VsZi5jbGllbnQucmVxdWVzdCgiR0VUIiwgIi8iKQogICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldHJlc3BvbnNlKCkKIAotICAgICAgICBzZWxmLmFzc2VydF8oCi0iIiI8ZGw+PGR0PjxhIG5hbWU9Ii0mbHQ7bGFtYmRhJmd0OyI+PHN0cm9uZz4mbHQ7bGFtYmRhJmd0Ozwvc3Ryb25nPjwvYT4oeCwgeSk8L2R0PjwvZGw+IiIiCi0gICAgICAgICAgICBpbiByZXNwb25zZS5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzxkbD48ZHQ+PGEgbmFtZT0iLSZsdDtsYW1iZGEmZ3Q7Ij48c3Ryb25nPicKKyAgICAgICAgICAgICAgICAgICAgICAnJmx0O2xhbWJkYSZndDs8L3N0cm9uZz48L2E+KHgsIHkpPC9kdD48L2RsPicsCisgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVhZCgpKQogCisgICAgQG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdF9hdXRvbGlua2luZyhzZWxmKToKLSAgICAgICAgIiIiVGVzdCB0aGF0IHRoZSBzZXJ2ZXIgY29ycmVjdGx5IGF1dG9tYXRpY2FsbHkgd3JhcHMgcmVmZXJlbmNlcyB0byBQRVBTCi0gICAgICAgIGFuZCBSRkNzIHdpdGggbGlua3MsIGFuZCB0aGF0IGl0IGxpbmtpZmllcyB0ZXh0IHN0YXJ0aW5nIHdpdGggaHR0cCBvcgotICAgICAgICBmdHAgcHJvdG9jb2wgcHJlZml4ZXMuCisgICAgICAgICIiIlRlc3QgdGhhdCB0aGUgc2VydmVyIGNvcnJlY3RseSBhdXRvbWF0aWNhbGx5IHdyYXBzIHJlZmVyZW5jZXMgdG8KKyAgICAgICAgUEVQUyBhbmQgUkZDcyB3aXRoIGxpbmtzLCBhbmQgdGhhdCBpdCBsaW5raWZpZXMgdGV4dCBzdGFydGluZyB3aXRoCisgICAgICAgIGh0dHAgb3IgZnRwIHByb3RvY29sIHByZWZpeGVzLgogCiAgICAgICAgIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgImFkZCIgbWV0aG9kIGNvbnRhaW5zIHRoZSB0ZXN0IG1hdGVyaWFsLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5jbGllbnQucmVxdWVzdCgiR0VUIiwgIi8iKQogICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldHJlc3BvbnNlKCkKIAotICAgICAgICBzZWxmLmFzc2VydF8oICMgVGhpcyBpcyB1Z2x5IC4uLiBob3cgY2FuIGl0IGJlIG1hZGUgYmV0dGVyPwotIiIiPGRsPjxkdD48YSBuYW1lPSItYWRkIj48c3Ryb25nPmFkZDwvc3Ryb25nPjwvYT4oeCwgeSk8L2R0PjxkZD48dHQ+QWRkJm5ic3A7dHdvJm5ic3A7aW5zdGFuY2VzJm5ic3A7dG9nZXRoZXIuJm5ic3A7VGhpcyZuYnNwO2ZvbGxvd3MmbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTAwMDgvIj5QRVAwMDg8L2E+LCZuYnNwO2J1dCZuYnNwO2hhcyZuYnNwO25vdGhpbmc8YnI+XG50byZuYnNwO2RvJm5ic3A7d2l0aCZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzE5NTIudHh0Ij5SRkMxOTUyPC9hPi4mbmJzcDtDYXNlJm5ic3A7c2hvdWxkJm5ic3A7bWF0dGVyOiZuYnNwO3BFcDAwOCZuYnNwO2FuZCZuYnNwO3JGQzE5NTIuJm5ic3A7Jm5ic3A7VGhpbmdzPGJyPlxudGhhdCZuYnNwO3N0YXJ0Jm5ic3A7d2l0aCZuYnNwO2h0dHAmbmJzcDthbmQmbmJzcDtmdHAmbmJzcDtzaG91bGQmbmJzcDtiZSZuYnNwO2F1dG8tbGlua2VkLCZuYnNwO3Rvbzo8YnI+XG48YSBocmVmPSJodHRwOi8vZ29vZ2xlLmNvbSI+aHR0cDovL2dvb2dsZS5jb208L2E+LjwvdHQ+PC9kZD48L2RsPiIiIgotICAgICAgICAgIGluIHJlc3BvbnNlLnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgICgnPGRsPjxkdD48YSBuYW1lPSItYWRkIj48c3Ryb25nPmFkZDwvc3Ryb25nPjwvYT4oeCwgeSk8L2R0PjxkZD4nCisgICAgICAgICAgICAgJzx0dD5BZGQmbmJzcDt0d28mbmJzcDtpbnN0YW5jZXMmbmJzcDt0b2dldGhlci4mbmJzcDtUaGlzJm5ic3A7JworICAgICAgICAgICAgICdmb2xsb3dzJm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMDA4LyI+JworICAgICAgICAgICAgICdQRVAwMDg8L2E+LCZuYnNwO2J1dCZuYnNwO2hhcyZuYnNwO25vdGhpbmc8YnI+XG50byZuYnNwO2RvJm5ic3A7JworICAgICAgICAgICAgICd3aXRoJm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMTk1Mi50eHQiPicKKyAgICAgICAgICAgICAnUkZDMTk1MjwvYT4uJm5ic3A7Q2FzZSZuYnNwO3Nob3VsZCZuYnNwO21hdHRlcjombmJzcDtwRXAwMDgmbmJzcDsnCisgICAgICAgICAgICAgJ2FuZCZuYnNwO3JGQzE5NTIuJm5ic3A7Jm5ic3A7VGhpbmdzPGJyPlxudGhhdCZuYnNwO3N0YXJ0Jm5ic3A7JworICAgICAgICAgICAgICd3aXRoJm5ic3A7aHR0cCZuYnNwO2FuZCZuYnNwO2Z0cCZuYnNwO3Nob3VsZCZuYnNwO2JlJm5ic3A7JworICAgICAgICAgICAgICdhdXRvLWxpbmtlZCwmbmJzcDt0b286PGJyPlxuPGEgaHJlZj0iaHR0cDovL2dvb2dsZS5jb20iPicKKyAgICAgICAgICAgICAnaHR0cDovL2dvb2dsZS5jb208L2E+LjwvdHQ+PC9kZD48L2RsPicpLCByZXNwb25zZS5yZWFkKCkpCiAKKyAgICBAbWFrZV9yZXF1ZXN0X2FuZF9za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X3N5c3RlbV9tZXRob2RzKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHRoZSBwcmVjZW5zZSBvZiB0aHJlZSBjb25zZWN1dGl2ZSBzeXN0ZW0uKiBtZXRob2RzLgogCi0gICAgICAgIFRoaXMgYWxzbyB0ZXN0cyB0aGVpciB1c2Ugb2YgcGFyYW1ldGVyIHR5cGUgcmVjb2duaXRpb24gYW5kIHRoZSBzeXN0ZW1zCi0gICAgICAgIHJlbGF0ZWQgdG8gdGhhdCBwcm9jZXNzLgorICAgICAgICBUaGlzIGFsc28gdGVzdHMgdGhlaXIgdXNlIG9mIHBhcmFtZXRlciB0eXBlIHJlY29nbml0aW9uIGFuZCB0aGUKKyAgICAgICAgc3lzdGVtcyByZWxhdGVkIHRvIHRoYXQgcHJvY2Vzcy4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuY2xpZW50LnJlcXVlc3QoIkdFVCIsICIvIikKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXRyZXNwb25zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKAotIiIiPGRsPjxkdD48YSBuYW1lPSItc3lzdGVtLmxpc3RNZXRob2RzIj48c3Ryb25nPnN5c3RlbS5saXN0TWV0aG9kczwvc3Ryb25nPjwvYT4oKTwvZHQ+PGRkPjx0dD48YSBocmVmPSIjLXN5c3RlbS5saXN0TWV0aG9kcyI+c3lzdGVtLmxpc3RNZXRob2RzPC9hPigpJm5ic3A7PSZndDsmbmJzcDtbXCdhZGRcJywmbmJzcDtcJ3N1YnRyYWN0XCcsJm5ic3A7XCdtdWx0aXBsZVwnXTxicj5cbiZuYnNwOzxicj5cblJldHVybnMmbmJzcDthJm5ic3A7bGlzdCZuYnNwO29mJm5ic3A7dGhlJm5ic3A7bWV0aG9kcyZuYnNwO3N1cHBvcnRlZCZuYnNwO2J5Jm5ic3A7dGhlJm5ic3A7c2VydmVyLjwvdHQ+PC9kZD48L2RsPlxuIDxkbD48ZHQ+PGEgbmFtZT0iLXN5c3RlbS5tZXRob2RIZWxwIj48c3Ryb25nPnN5c3RlbS5tZXRob2RIZWxwPC9zdHJvbmc+PC9hPihtZXRob2RfbmFtZSk8L2R0PjxkZD48dHQ+PGEgaHJlZj0iIy1zeXN0ZW0ubWV0aG9kSGVscCI+c3lzdGVtLm1ldGhvZEhlbHA8L2E+KFwnYWRkXCcpJm5ic3A7PSZndDsmbmJzcDsiQWRkcyZuYnNwO3R3byZuYnNwO2ludGVnZXJzJm5ic3A7dG9nZXRoZXIiPGJyPlxuJm5ic3A7PGJyPlxuUmV0dXJucyZuYnNwO2EmbmJzcDtzdHJpbmcmbmJzcDtjb250YWluaW5nJm5ic3A7ZG9jdW1lbnRhdGlvbiZuYnNwO2ZvciZuYnNwO3RoZSZuYnNwO3NwZWNpZmllZCZuYnNwO21ldGhvZC48L3R0PjwvZGQ+PC9kbD5cbiA8ZGw+PGR0PjxhIG5hbWU9Ii1zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlIj48c3Ryb25nPnN5c3RlbS5tZXRob2RTaWduYXR1cmU8L3N0cm9uZz48L2E+KG1ldGhvZF9uYW1lKTwvZHQ+PGRkPjx0dD48YSBocmVmPSIjLXN5c3RlbS5tZXRob2RTaWduYXR1cmUiPnN5c3RlbS5tZXRob2RTaWduYXR1cmU8L2E+KFwnYWRkXCcpJm5ic3A7PSZndDsmbmJzcDtbZG91YmxlLCZuYnNwO2ludCwmbmJzcDtpbnRdPGJyPlxuJm5ic3A7PGJyPlxuUmV0dXJucyZuYnNwO2EmbmJzcDtsaXN0Jm5ic3A7ZGVzY3JpYmluZyZuYnNwO3RoZSZuYnNwO3NpZ25hdHVyZSZuYnNwO29mJm5ic3A7dGhlJm5ic3A7bWV0aG9kLiZuYnNwO0luJm5ic3A7dGhlPGJyPlxuYWJvdmUmbmJzcDtleGFtcGxlLCZuYnNwO3RoZSZuYnNwO2FkZCZuYnNwO21ldGhvZCZuYnNwO3Rha2VzJm5ic3A7dHdvJm5ic3A7aW50ZWdlcnMmbmJzcDthcyZuYnNwO2FyZ3VtZW50czxicj5cbmFuZCZuYnNwO3JldHVybnMmbmJzcDthJm5ic3A7ZG91YmxlJm5ic3A7cmVzdWx0Ljxicj5cbiZuYnNwOzxicj5cblRoaXMmbmJzcDtzZXJ2ZXImbmJzcDtkb2VzJm5ic3A7Tk9UJm5ic3A7c3VwcG9ydCZuYnNwO3N5c3RlbS5tZXRob2RTaWduYXR1cmUuPC90dD48L2RkPjwvZGw+IiIiCi0gICAgICAgICAgICBpbiByZXNwb25zZS5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICAoJzxkbD48ZHQ+PGEgbmFtZT0iLXN5c3RlbS5saXN0TWV0aG9kcyI+PHN0cm9uZz5zeXN0ZW0ubGlzdE1ldGhvZHMnCisgICAgICAgICAgICAgJzwvc3Ryb25nPjwvYT4oKTwvZHQ+PGRkPjx0dD48YSBocmVmPSIjLXN5c3RlbS5saXN0TWV0aG9kcyI+c3lzdGVtJworICAgICAgICAgICAgICcubGlzdE1ldGhvZHM8L2E+KCkmbmJzcDs9Jmd0OyZuYnNwO1tcJ2FkZFwnLCZuYnNwO1wnc3VidHJhY3RcJywnCisgICAgICAgICAgICAgJyZuYnNwO1wnbXVsdGlwbGVcJ108YnI+XG4mbmJzcDs8YnI+XG5SZXR1cm5zJm5ic3A7YSZuYnNwO2xpc3QnCisgICAgICAgICAgICAgJyZuYnNwO29mJm5ic3A7dGhlJm5ic3A7bWV0aG9kcyZuYnNwO3N1cHBvcnRlZCZuYnNwO2J5Jm5ic3A7dGhlJworICAgICAgICAgICAgICcmbmJzcDtzZXJ2ZXIuPC90dD48L2RkPjwvZGw+XG4gPGRsPjxkdD48YSBuYW1lPSItc3lzdGVtLm1ldGhvZEhlbHAiPicKKyAgICAgICAgICAgICAnPHN0cm9uZz5zeXN0ZW0ubWV0aG9kSGVscDwvc3Ryb25nPjwvYT4obWV0aG9kX25hbWUpPC9kdD48ZGQ+PHR0PicKKyAgICAgICAgICAgICAnPGEgaHJlZj0iIy1zeXN0ZW0ubWV0aG9kSGVscCI+c3lzdGVtLm1ldGhvZEhlbHA8L2E+KFwnYWRkXCcpJm5ic3A7JworICAgICAgICAgICAgICc9Jmd0OyZuYnNwOyJBZGRzJm5ic3A7dHdvJm5ic3A7aW50ZWdlcnMmbmJzcDt0b2dldGhlciI8YnI+XG4mbmJzcDsnCisgICAgICAgICAgICAgJzxicj5cblJldHVybnMmbmJzcDthJm5ic3A7c3RyaW5nJm5ic3A7Y29udGFpbmluZyZuYnNwO2RvY3VtZW50YXRpb24nCisgICAgICAgICAgICAgJyZuYnNwO2ZvciZuYnNwO3RoZSZuYnNwO3NwZWNpZmllZCZuYnNwO21ldGhvZC48L3R0PjwvZGQ+PC9kbD5cbiAnCisgICAgICAgICAgICAgJzxkbD48ZHQ+PGEgbmFtZT0iLXN5c3RlbS5tZXRob2RTaWduYXR1cmUiPjxzdHJvbmc+c3lzdGVtLicKKyAgICAgICAgICAgICAnbWV0aG9kU2lnbmF0dXJlPC9zdHJvbmc+PC9hPihtZXRob2RfbmFtZSk8L2R0PjxkZD48dHQ+PGEgaHJlZj0iIy0nCisgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUiPnN5c3RlbS5tZXRob2RTaWduYXR1cmU8L2E+KFwnYWRkXCcpJm5ic3A7JworICAgICAgICAgICAgICc9Jmd0OyZuYnNwO1tkb3VibGUsJm5ic3A7aW50LCZuYnNwO2ludF08YnI+XG4mbmJzcDs8YnI+XG5SZXR1cm5zJworICAgICAgICAgICAgICcmbmJzcDthJm5ic3A7bGlzdCZuYnNwO2Rlc2NyaWJpbmcmbmJzcDt0aGUmbmJzcDtzaWduYXR1cmUmbmJzcDtvZicKKyAgICAgICAgICAgICAnJm5ic3A7dGhlJm5ic3A7bWV0aG9kLiZuYnNwO0luJm5ic3A7dGhlPGJyPlxuYWJvdmUmbmJzcDtleGFtcGxlLCcKKyAgICAgICAgICAgICAnJm5ic3A7dGhlJm5ic3A7YWRkJm5ic3A7bWV0aG9kJm5ic3A7dGFrZXMmbmJzcDt0d28mbmJzcDtpbnRlZ2VycycKKyAgICAgICAgICAgICAnJm5ic3A7YXMmbmJzcDthcmd1bWVudHM8YnI+XG5hbmQmbmJzcDtyZXR1cm5zJm5ic3A7YSZuYnNwO2RvdWJsZScKKyAgICAgICAgICAgICAnJm5ic3A7cmVzdWx0Ljxicj5cbiZuYnNwOzxicj5cblRoaXMmbmJzcDtzZXJ2ZXImbmJzcDtkb2VzJm5ic3A7JworICAgICAgICAgICAgICdOT1QmbmJzcDtzdXBwb3J0Jm5ic3A7c3lzdGVtLm1ldGhvZFNpZ25hdHVyZS48L3R0PjwvZGQ+PC9kbD4nKSwKKyAgICAgICAgICAgIHJlc3BvbnNlLnJlYWQoKSkKIAogICAgIGRlZiB0ZXN0X2F1dG9saW5rX2RvdHRlZF9tZXRob2RzKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHRoYXQgc2VsZmRvdCB2YWx1ZXMgYXJlIG1hZGUgc3Ryb25nIGF1dG9tYXRpY2FsbHkgaW4gdGhlCkBAIC0xNDMsOCArMTkxLDggQEAKICAgICAgICAgc2VsZi5jbGllbnQucmVxdWVzdCgiR0VUIiwgIi8iKQogICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldHJlc3BvbnNlKCkKIAotICAgICAgICBzZWxmLmFzc2VydF8oIiIiVHJ5Jm5ic3A7c2VsZi48c3Ryb25nPmFkZDwvc3Ryb25nPiwmbmJzcDt0b28uIiIiIGluCi0gICAgICAgICAgICByZXNwb25zZS5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIiIiVHJ5Jm5ic3A7c2VsZi48c3Ryb25nPmFkZDwvc3Ryb25nPiwmbmJzcDt0b28uIiIiLAorICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlYWQoKSkKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRG9jWE1MUlBDSFRUUEdFVFNlcnZlcikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkLnB5IGIvTGliL3Rlc3QvdGVzdF9kdW1teV90aHJlYWQucHkKaW5kZXggNThmYWViNC4uZDliZGQzYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kdW1teV90aHJlYWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kdW1teV90aHJlYWQucHkKQEAgLTI0LDQzICsyNCw0MyBAQAogCiAgICAgZGVmIHRlc3RfaW5pdGxvY2soc2VsZik6CiAgICAgICAgICNNYWtlIHN1cmUgbG9ja3Mgc3RhcnQgbG9ja2VkCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3Qgc2VsZi5sb2NrLmxvY2tlZCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYubG9jay5sb2NrZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJMb2NrIG9iamVjdCBpcyBub3QgaW5pdGlhbGl6ZWQgdW5sb2NrZWQuIikKIAogICAgIGRlZiB0ZXN0X3JlbGVhc2Uoc2VsZik6CiAgICAgICAgICMgVGVzdCBzZWxmLmxvY2sucmVsZWFzZSgpCiAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKCkKICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHNlbGYubG9jay5sb2NrZWQoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmxvY2subG9ja2VkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jayBvYmplY3QgZGlkIG5vdCByZWxlYXNlIHByb3Blcmx5LiIpCiAKICAgICBkZWYgdGVzdF9pbXByb3Blcl9yZWxlYXNlKHNlbGYpOgogICAgICAgICAjTWFrZSBzdXJlIHJlbGVhc2Ugb2YgYW4gdW5sb2NrZWQgdGhyZWFkIHJhaXNlcyBfdGhyZWFkLmVycm9yCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhfdGhyZWFkLmVycm9yLCBzZWxmLmxvY2sucmVsZWFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoX3RocmVhZC5lcnJvciwgc2VsZi5sb2NrLnJlbGVhc2UpCiAKICAgICBkZWYgdGVzdF9jb25kX2FjcXVpcmVfc3VjY2VzcyhzZWxmKToKICAgICAgICAgI01ha2Ugc3VyZSB0aGUgY29uZGl0aW9uYWwgYWNxdWlyaW5nIG9mIHRoZSBsb2NrIHdvcmtzLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5sb2NrLmFjcXVpcmUoMCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvY2suYWNxdWlyZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb25kaXRpb25hbCBhY3F1aXJpbmcgb2YgdGhlIGxvY2sgZmFpbGVkLiIpCiAKICAgICBkZWYgdGVzdF9jb25kX2FjcXVpcmVfZmFpbChzZWxmKToKICAgICAgICAgI1Rlc3QgYWNxdWlyaW5nIGxvY2tlZCBsb2NrIHJldHVybnMgRmFsc2UKICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCBzZWxmLmxvY2suYWNxdWlyZSgwKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmxvY2suYWNxdWlyZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb25kaXRpb25hbCBhY3F1aXJpbmcgb2YgYSBsb2NrZWQgbG9jayBpbmNvcnJlY3RseSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgInN1Y2NlZWRlZC4iKQogCiAgICAgZGVmIHRlc3RfdW5jb25kX2FjcXVpcmVfc3VjY2VzcyhzZWxmKToKICAgICAgICAgI01ha2Ugc3VyZSB1bmNvbmRpdGlvbmFsIGFjcXVpcmluZyBvZiBhIGxvY2sgd29ya3MuCiAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYubG9jay5sb2NrZWQoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9jay5sb2NrZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJVbmNvbmRpb25hbCBsb2NraW5nIGZhaWxlZC4iKQogCiAgICAgZGVmIHRlc3RfdW5jb25kX2FjcXVpcmVfcmV0dXJuX3ZhbChzZWxmKToKICAgICAgICAgI01ha2Ugc3VyZSB0aGF0IGFuIHVuY29uZGl0aW9uYWwgbG9ja2luZyByZXR1cm5zIFRydWUuCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmxvY2suYWNxdWlyZSgxKSBpcyBUcnVlLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb2NrLmFjcXVpcmUoMSkgaXMgVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICJVbmNvbmRpdGlvbmFsIGxvY2tpbmcgZGlkIG5vdCByZXR1cm4gVHJ1ZS4iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5sb2NrLmFjcXVpcmUoKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb2NrLmFjcXVpcmUoKSBpcyBUcnVlKQogCiAgICAgZGVmIHRlc3RfdW5jb25kX2FjcXVpcmVfYmxvY2tpbmcoc2VsZik6CiAgICAgICAgICNNYWtlIHN1cmUgdGhhdCB1bmNvbmRpdGlvbmFsIGFjcXVpcmluZyBvZiBhIGxvY2tlZCBsb2NrIGJsb2Nrcy4KQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgZW5kX3RpbWUgPSBpbnQodGltZS50aW1lKCkpCiAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgImRvbmUiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygoZW5kX3RpbWUgLSBzdGFydF90aW1lKSA+PSBERUxBWSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChlbmRfdGltZSAtIHN0YXJ0X3RpbWUpID49IERFTEFZLAogICAgICAgICAgICAgICAgICAgICAgICAgIkJsb2NraW5nIGJ5IHVuY29uZGl0aW9uYWwgYWNxdWlyaW5nIGZhaWxlZC4iKQogCiBjbGFzcyBNaXNjVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtODgsMzMgKzg4LDMzIEBACiAKICAgICBkZWYgdGVzdF9leGl0KHNlbGYpOgogICAgICAgICAjTWFrZSBzdXJlIF90aHJlYWQuZXhpdCgpIHJhaXNlcyBTeXN0ZW1FeGl0Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhTeXN0ZW1FeGl0LCBfdGhyZWFkLmV4aXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIF90aHJlYWQuZXhpdCkKIAogICAgIGRlZiB0ZXN0X2lkZW50KHNlbGYpOgogICAgICAgICAjVGVzdCBzYW5pdHkgb2YgX3RocmVhZC5nZXRfaWRlbnQoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShfdGhyZWFkLmdldF9pZGVudCgpLCBpbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIl90aHJlYWQuZ2V0X2lkZW50KCkgcmV0dXJuZWQgYSBub24taW50ZWdlciIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhfdGhyZWFkLmdldF9pZGVudCgpICE9IDAsCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShfdGhyZWFkLmdldF9pZGVudCgpLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3RocmVhZC5nZXRfaWRlbnQoKSByZXR1cm5lZCBhIG5vbi1pbnRlZ2VyIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF90aHJlYWQuZ2V0X2lkZW50KCkgIT0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICJfdGhyZWFkLmdldF9pZGVudCgpIHJldHVybmVkIDAiKQogCiAgICAgZGVmIHRlc3RfTG9ja1R5cGUoc2VsZik6CiAgICAgICAgICNNYWtlIHN1cmUgX3RocmVhZC5Mb2NrVHlwZSBpcyB0aGUgc2FtZSB0eXBlIGFzIF90aHJlYWQuYWxsb2NhdGVfbG9ja2UoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShfdGhyZWFkLmFsbG9jYXRlX2xvY2soKSwgX3RocmVhZC5Mb2NrVHlwZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAiX3RocmVhZC5Mb2NrVHlwZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Ygd2hhdCBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKF90aHJlYWQuYWxsb2NhdGVfbG9jaygpLCBfdGhyZWFkLkxvY2tUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90aHJlYWQuTG9ja1R5cGUgaXMgbm90IGFuIGluc3RhbmNlIG9mIHdoYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIHJldHVybmVkIGJ5IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpIikKIAogICAgIGRlZiB0ZXN0X2ludGVycnVwdF9tYWluKHNlbGYpOgogICAgICAgICAjQ2FsbGluZyBzdGFydF9uZXdfdGhyZWFkIHdpdGggYSBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIGludGVycnVwdF9tYWluCiAgICAgICAgICMgc2hvdWxkIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0IHVwb24gY29tcGxldGlvbi4KICAgICAgICAgZGVmIGNhbGxfaW50ZXJydXB0KCk6CiAgICAgICAgICAgICBfdGhyZWFkLmludGVycnVwdF9tYWluKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX2ludGVycnVwdCwgdHVwbGUoKSkKIAogICAgIGRlZiB0ZXN0X2ludGVycnVwdF9pbl9tYWluKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGlmIGludGVycnVwdF9tYWluIGlzIGNhbGxlZCBpbiBtYWluIHRocmVhdCB0aGF0CiAgICAgICAgICMgS2V5Ym9hcmRJbnRlcnJ1cHQgaXMgcmFpc2VkIGluc3RhbnRseS4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBfdGhyZWFkLmludGVycnVwdF9tYWluKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgX3RocmVhZC5pbnRlcnJ1cHRfbWFpbikKIAogY2xhc3MgVGhyZWFkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3QgdGhyZWFkIGNyZWF0aW9uLiIiIgpAQCAtMTI4LDE2ICsxMjgsMTYgQEAKICAgICAgICAgdGVzdGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKDEpCiAgICAgICAgIF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZChhcmdfdGVzdGVyLCAodGVzdGluZ19xdWV1ZSwgVHJ1ZSwgVHJ1ZSkpCiAgICAgICAgIHJlc3VsdCA9IHRlc3RpbmdfcXVldWUuZ2V0KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlc3VsdFswXSBhbmQgcmVzdWx0WzFdLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0WzBdIGFuZCByZXN1bHRbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgcGFzc2luZyBmb3IgdGhyZWFkIGNyZWF0aW9uIHVzaW5nIHR1cGxlIGZhaWxlZCIpCiAgICAgICAgIF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZChhcmdfdGVzdGVyLCB0dXBsZSgpLCB7J3F1ZXVlJzp0ZXN0aW5nX3F1ZXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmcxJzpUcnVlLCAnYXJnMic6VHJ1ZX0pCiAgICAgICAgIHJlc3VsdCA9IHRlc3RpbmdfcXVldWUuZ2V0KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlc3VsdFswXSBhbmQgcmVzdWx0WzFdLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0WzBdIGFuZCByZXN1bHRbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgcGFzc2luZyBmb3IgdGhyZWFkIGNyZWF0aW9uIHVzaW5nIGt3YXJncyBmYWlsZWQiKQogICAgICAgICBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoYXJnX3Rlc3RlciwgKHRlc3RpbmdfcXVldWUsIFRydWUpLCB7J2FyZzInOlRydWV9KQogICAgICAgICByZXN1bHQgPSB0ZXN0aW5nX3F1ZXVlLmdldCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHRbMF0gYW5kIHJlc3VsdFsxXSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdFswXSBhbmQgcmVzdWx0WzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IHBhc3NpbmcgZm9yIHRocmVhZCBjcmVhdGlvbiB1c2luZyBib3RoIHR1cGxlIgogICAgICAgICAgICAgICAgICAgICAgICAgIiBhbmQga3dhcmdzIGZhaWxlZCIpCiAKQEAgLTE2NCw3ICsxNjQsNyBAQAogICAgICAgICB0aW1lLnNsZWVwKERFTEFZKQogICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICdkb25lJwotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGVzdGluZ19xdWV1ZS5xc2l6ZSgpID09IHRocmVhZF9jb3VudCwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RpbmdfcXVldWUucXNpemUoKSA9PSB0aHJlYWRfY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAiTm90IGFsbCAlcyB0aHJlYWRzIGV4ZWN1dGVkIHByb3Blcmx5IGFmdGVyICVzIHNlYy4iICUKICAgICAgICAgICAgICAgICAgICAgICAgICh0aHJlYWRfY291bnQsIERFTEFZKSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQppbmRleCAzNTIyYjRmLi42YjlmZjc5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQpAQCAtMTAzLDYgKzEwMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5lbnVtLCAnYWJjJywgJ2EnKSAjIHdyb25nIHR5cGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmVudW0sICdhYmMnLCAyLCAzKSAjIHRvbyBtYW55IGFyZ3VtZW50cwogCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF90dXBsZV9yZXVzZShzZWxmKToKICAgICAgICAgIyBUZXN0cyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgd2hlcmUgdHVwbGUgaXMgcmV1c2VkCiAgICAgICAgICMgd2hlbmV2ZXIgbm90aGluZyBlbHNlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGl0CkBAIC0xNDEsMTAgKzE0MiwxNyBAQAogICAgICAgICAjIGRvbid0IGFsbG93IGtleXdvcmQgYXJndW1lbnRzCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmV2ZXJzZWQsIFtdLCBhPTEpCiAKKyAgICBkZWYgdGVzdF9jbGFzc2ljX2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWzIsIDFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChBKCkpKSwgWzIsIDFdKQorCiAgICAgZGVmIHRlc3RfeHJhbmdlX29wdGltaXphdGlvbihzZWxmKToKICAgICAgICAgeCA9IHhyYW5nZSgxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmV2ZXJzZWQoeCkpLCB0eXBlKGl0ZXIoeCkpKQogCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9sZW4oc2VsZik6CiAgICAgICAgICMgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIG5vdCBhbiBpbnRlcmZhY2UgcmVxdWlyZW1lbnQKICAgICAgICAgZnJvbSB0ZXN0LnRlc3RfaXRlcmxlbiBpbXBvcnQgbGVuCkBAIC0xOTgsNiArMjA2LDE4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJub24tY2FsbGFibGUgX19yZXZlcnNlZF9fIGRpZG4ndCByYWlzZSEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCBzeXMuZ2V0cmVmY291bnQocikpCiAKKyAgICBkZWYgdGVzdF9vYmptZXRob2RzKHNlbGYpOgorICAgICAgICAjIE9iamVjdHMgbXVzdCBoYXZlIF9fbGVuX18oKSBhbmQgX19nZXRpdGVtX18oKSBpbXBsZW1lbnRlZC4KKyAgICAgICAgY2xhc3MgTm9MZW4ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmKTogcmV0dXJuIDEKKyAgICAgICAgbmwgPSBOb0xlbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmV2ZXJzZWQsIG5sKQorCisgICAgICAgIGNsYXNzIE5vR2V0SXRlbShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6IHJldHVybiAyCisgICAgICAgIG5naSA9IE5vR2V0SXRlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmV2ZXJzZWQsIG5naSkKKwogCiBjbGFzcyBFbnVtZXJhdGVTdGFydFRlc3RDYXNlKEVudW1lcmF0ZVRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lcG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKaW5kZXggYWFiMmM2Yi4uMjE2ZTJjNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CkBAIC0yMSwyMyArMjEsMjEgQEAKICIiIgogVGVzdHMgZm9yIGVwb2xsIHdyYXBwZXIuCiAiIiIKLWltcG9ydCBvcwogaW1wb3J0IHNvY2tldAogaW1wb3J0IGVycm5vCiBpbXBvcnQgdGltZQogaW1wb3J0IHNlbGVjdAotaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGlmIG5vdCBoYXNhdHRyKHNlbGVjdCwgImVwb2xsIik6Ci0gICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RTa2lwcGVkKCJ0ZXN0IHdvcmtzIG9ubHkgb24gTGludXggMi42IikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgidGVzdCB3b3JrcyBvbmx5IG9uIExpbnV4IDIuNiIpCiAKIHRyeToKICAgICBzZWxlY3QuZXBvbGwoKQogZXhjZXB0IElPRXJyb3IsIGU6CiAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6Ci0gICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZCgia2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBlcG9sbCgpIikKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgZXBvbGwoKSIpCiAKIGNsYXNzIFRlc3RFUG9sbCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTU4LDcgKzU2LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZWxmLnNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGUuYXJnc1swXSwgZXJybm8uRUlOUFJPR1JFU1MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUlOUFJPR1JFU1MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiQ29ubmVjdCBzaG91bGQgaGF2ZSByYWlzZWQgRUlOUFJPR1JFU1MiKQogICAgICAgICBzZXJ2ZXIsIGFkZHIgPSBzZWxmLnNlcnZlclNvY2tldC5hY2NlcHQoKQpAQCAtNzEsMTAgKzY5LDEwIEBACiAgICAgICAgICAgICBlcCA9IHNlbGVjdC5lcG9sbCgxNikKICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihzdHIoZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhlcC5maWxlbm8oKSA+IDAsIGVwLmZpbGVubygpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGVwLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVwLmZpbGVubygpID4gMCwgZXAuZmlsZW5vKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZXAuY2xvc2VkKQogICAgICAgICBlcC5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhlcC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcC5jbG9zZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGVwLmZpbGVubykKIAogICAgIGRlZiB0ZXN0X2JhZGNyZWF0ZShzZWxmKToKQEAgLTE0MSw3ICsxMzksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlcDIucG9sbCgxLCA0KQogICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGUuYXJnc1swXSwgZXJybm8uRUJBREYsIGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUJBREYsIGUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImVwb2xsIG9uIGNsb3NlZCBmZCBkaWRuJ3QgcmFpc2UgRUJBREYiKQogCkBAIC0xNTcsMjAgKzE1NSwyMCBAQAogICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQogICAgICAgICBldmVudHMgPSBlcC5wb2xsKDEsIDQpCiAgICAgICAgIHRoZW4gPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLmZhaWxJZih0aGVuIC0gbm93ID4gMC4xLCB0aGVuIC0gbm93KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRoZW4gLSBub3cgPiAwLjEsIHRoZW4gLSBub3cpCiAKICAgICAgICAgZXZlbnRzLnNvcnQoKQogICAgICAgICBleHBlY3RlZCA9IFsoY2xpZW50LmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpLAogICAgICAgICAgICAgICAgICAgICAoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpXQogICAgICAgICBleHBlY3RlZC5zb3J0KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhldmVudHMsIGV4cGVjdGVkKQotICAgICAgICBzZWxmLmZhaWxJZih0aGVuIC0gbm93ID4gMC4wMSwgdGhlbiAtIG5vdykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRoZW4gLSBub3cgPiAwLjAxLCB0aGVuIC0gbm93KQogCiAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCiAgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwodGltZW91dD0yLjEsIG1heGV2ZW50cz00KQogICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5mYWlsSWYoZXZlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2ZW50cykKIAogICAgICAgICBjbGllbnQuc2VuZCgiSGVsbG8hIikKICAgICAgICAgc2VydmVyLnNlbmQoIndvcmxkISEhIikKQEAgLTE3OCwyNCArMTc2LDI0IEBACiAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCiAgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwoMSwgNCkKICAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuZmFpbElmKHRoZW4gLSBub3cgPiAwLjAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRoZW4gLSBub3cgPiAwLjAxKQogCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKICAgICAgICAgZXhwZWN0ZWQgPSBbKGNsaWVudC5maWxlbm8oKSwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpLAogICAgICAgICAgICAgICAgICAgICAoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCldCiAgICAgICAgIGV4cGVjdGVkLnNvcnQoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV2ZW50cywgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKIAogICAgICAgICBlcC51bnJlZ2lzdGVyKGNsaWVudC5maWxlbm8oKSkKICAgICAgICAgZXAubW9kaWZ5KHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LkVQT0xMT1VUKQogICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQogICAgICAgICBldmVudHMgPSBlcC5wb2xsKDEsIDQpCiAgICAgICAgIHRoZW4gPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLmZhaWxJZih0aGVuIC0gbm93ID4gMC4wMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSkKIAogICAgICAgICBleHBlY3RlZCA9IFsoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhldmVudHMsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGVjdC5lcG9sbCwgLTIpCkBAIC0yMTEsNyArMjA5LDcgQEAKICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKICAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQogICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5mYWlsSWYodGhlbiAtIG5vdyA+IDAuMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhlbiAtIG5vdyA+IDAuMDEpCiAKICAgICAgICAgc2VydmVyLmNsb3NlKCkKICAgICAgICAgZXAudW5yZWdpc3RlcihmZCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXJybm8ucHkgYi9MaWIvdGVzdC90ZXN0X2Vycm5vLnB5CmluZGV4IDk1MjM5MDcuLmJiODkxOGYgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXJybm8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lcnJuby5weQpAQCAtMTQsMTMgKzE0LDEzIEBACiAgICAgZGVmIHRlc3RfZm9yX2ltcHJvcGVyX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgTm8gdW5leHBlY3RlZCBhdHRyaWJ1dGVzIHNob3VsZCBiZSBvbiB0aGUgbW9kdWxlLgogICAgICAgICBmb3IgZXJyb3JfY29kZSBpbiBzdGRfY19lcnJvcnM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihlcnJubywgZXJyb3JfY29kZSksCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnJubywgZXJyb3JfY29kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm5vIGlzIG1pc3NpbmcgJXMiICUgZXJyb3JfY29kZSkKIAogICAgIGRlZiB0ZXN0X3VzaW5nX2Vycm9yY29kZShzZWxmKToKICAgICAgICAgIyBFdmVyeSBrZXkgdmFsdWUgaW4gZXJybm8uZXJyb3Jjb2RlIHNob3VsZCBiZSBvbiB0aGUgbW9kdWxlLgogICAgICAgICBmb3IgdmFsdWUgaW4gZXJybm8uZXJyb3Jjb2RlLml0ZXJ2YWx1ZXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKGVycm5vLCB2YWx1ZSksICdubyAlcyBhdHRyIGluIGVycm5vJyAlIHZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJybm8sIHZhbHVlKSwgJ25vICVzIGF0dHIgaW4gZXJybm8nICUgdmFsdWUpCiAKIAogY2xhc3MgRXJyb3Jjb2RlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjgsOCArMjgsOCBAQAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfaW5fZXJyb3Jjb2RlKHNlbGYpOgogICAgICAgICBmb3IgYXR0cmlidXRlIGluIGVycm5vLl9fZGljdF9fLml0ZXJrZXlzKCk6CiAgICAgICAgICAgICBpZiBhdHRyaWJ1dGUuaXN1cHBlcigpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhnZXRhdHRyKGVycm5vLCBhdHRyaWJ1dGUpIGluIGVycm5vLmVycm9yY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vICVzIGF0dHIgaW4gZXJybm8uZXJyb3Jjb2RlJyAlIGF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGdldGF0dHIoZXJybm8sIGF0dHJpYnV0ZSksIGVycm5vLmVycm9yY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubyAlcyBhdHRyIGluIGVycm5vLmVycm9yY29kZScgJSBhdHRyaWJ1dGUpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5IGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CmluZGV4IGRjZGQ4ODUuLmExOWM4MmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKQEAgLTYsNyArNiw3IEBACiBpbXBvcnQgcGlja2xlLCBjUGlja2xlCiAKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChURVNURk4sIHVubGluaywgcnVuX3VuaXR0ZXN0LCBjYXB0dXJlZF9vdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MsIGNweXRob25fb25seSkKIGZyb20gdGVzdC50ZXN0X3BlcDM1MiBpbXBvcnQgaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCiAKICMgWFhYIFRoaXMgaXMgbm90IHJlYWxseSBlbm91Z2gsIGVhY2ggKm9wZXJhdGlvbiogc2hvdWxkIGJlIHRlc3RlZCEKQEAgLTMyLDggKzMyLDggQEAKICAgICAgICAgICAgIHJhaXNlIGV4Yygic3BhbSIpCiAgICAgICAgIGV4Y2VwdCBleGMsIGVycjoKICAgICAgICAgICAgIGJ1ZjIgPSBzdHIoZXJyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWYxLCBidWYyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleGMuX19uYW1lX18sIGV4Y25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmMSwgYnVmMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuX19uYW1lX18sIGV4Y25hbWUpCiAKICAgICBkZWYgdGVzdFJhaXNpbmcoc2VsZik6CiAgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goQXR0cmlidXRlRXJyb3IsICJBdHRyaWJ1dGVFcnJvciIpCkBAIC0xNDcsNiArMTQ3LDcgQEAKICAgICAgICAgY2ttc2cocywgIidjb250aW51ZScgbm90IHByb3Blcmx5IGluIGxvb3AiKQogICAgICAgICBja21zZygiY29udGludWVcbiIsICInY29udGludWUnIG5vdCBwcm9wZXJseSBpbiBsb29wIikKIAorICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdFNldHRpbmdFeGNlcHRpb24oc2VsZik6CiAgICAgICAgICMgdGVzdCB0aGF0IHNldHRpbmcgYW4gZXhjZXB0aW9uIGF0IHRoZSBDIGxldmVsIHdvcmtzIGV2ZW4gaWYgdGhlCiAgICAgICAgICMgZXhjZXB0aW9uIG9iamVjdCBjYW4ndCBiZSBjb25zdHJ1Y3RlZC4KQEAgLTE2Miw4ICsxNjMsOCBAQAogICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZXJyOgogICAgICAgICAgICAgICAgIGV4YywgZXJyLCB0YiA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICAgICAgY28gPSB0Yi50Yl9mcmFtZS5mX2NvZGUKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjby5jb19uYW1lLCAidGVzdF9jYXBpMSIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNvLmNvX2ZpbGVuYW1lLmVuZHN3aXRoKCd0ZXN0X2V4Y2VwdGlvbnMnK29zLmV4dHNlcCsncHknKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvLmNvX25hbWUsICJ0ZXN0X2NhcGkxIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY28uY29fZmlsZW5hbWUuZW5kc3dpdGgoJ3Rlc3RfZXhjZXB0aW9ucycrb3MuZXh0c2VwKydweScpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIGV4Y2VwdGlvbiIpCiAKQEAgLTE3NCwxMCArMTc1LDEwIEBACiAgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yLCBlcnI6CiAgICAgICAgICAgICAgICAgZXhjLCBlcnIsIHRiID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgICAgICBjbyA9IHRiLnRiX2ZyYW1lLmZfY29kZQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvLmNvX25hbWUsICJfX2luaXRfXyIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNvLmNvX2ZpbGVuYW1lLmVuZHN3aXRoKCd0ZXN0X2V4Y2VwdGlvbnMnK29zLmV4dHNlcCsncHknKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvLmNvX25hbWUsICJfX2luaXRfXyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvLmNvX2ZpbGVuYW1lLmVuZHN3aXRoKCd0ZXN0X2V4Y2VwdGlvbnMnK29zLmV4dHNlcCsncHknKSkKICAgICAgICAgICAgICAgICBjbzIgPSB0Yi50Yl9mcmFtZS5mX2JhY2suZl9jb2RlCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY28yLmNvX25hbWUsICJ0ZXN0X2NhcGkyIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvMi5jb19uYW1lLCAidGVzdF9jYXBpMiIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgZXhjZXB0aW9uIikKIApAQCAtMTkxLDEyICsxOTIsMTIgQEAKICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cihXaW5kb3dzRXJyb3IoMTAwMSkpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoV2luZG93c0Vycm9yKDEwMDEpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMDAxIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cihXaW5kb3dzRXJyb3IoMTAwMSwgIm1lc3NhZ2UiKSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihXaW5kb3dzRXJyb3IoMTAwMSwgIm1lc3NhZ2UiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW0Vycm9yIDEwMDFdIG1lc3NhZ2UiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoV2luZG93c0Vycm9yKDEwMDEsICJtZXNzYWdlIikuZXJybm8sIDIyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoV2luZG93c0Vycm9yKDEwMDEsICJtZXNzYWdlIikud2luZXJyb3IsIDEwMDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFdpbmRvd3NFcnJvcigxMDAxLCAibWVzc2FnZSIpLmVycm5vLCAyMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoV2luZG93c0Vycm9yKDEwMDEsICJtZXNzYWdlIikud2luZXJyb3IsIDEwMDEpCiAKICAgICBAaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCiAgICAgZGVmIHRlc3RBdHRyaWJ1dGVzKHNlbGYpOgpAQCAtMjgzLDE0ICsyODQsMTQgQEAKICAgICAgICAgICAgICAgICBpZiB0eXBlKGUpIGlzIG5vdCBleGM6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgIyBWZXJpZnkgbW9kdWxlIG5hbWUKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0eXBlKGUpLl9fbW9kdWxlX18sICdleGNlcHRpb25zJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZSkuX19tb2R1bGVfXywgJ2V4Y2VwdGlvbnMnKQogICAgICAgICAgICAgICAgICMgVmVyaWZ5IG5vIHJlZiBsZWFrcyBpbiBFeGNfc3RyKCkKICAgICAgICAgICAgICAgICBzID0gc3RyKGUpCiAgICAgICAgICAgICAgICAgZm9yIGNoZWNrQXJnTmFtZSBpbiBleHBlY3RlZDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVwcihnZXRhdHRyKGUsIGNoZWNrQXJnTmFtZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGV4cGVjdGVkW2NoZWNrQXJnTmFtZV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uICIlcyIsIGF0dHJpYnV0ZSAiJXMiJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwcihlKSwgY2hlY2tBcmdOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGdldGF0dHIoZSwgY2hlY2tBcmdOYW1lKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihleHBlY3RlZFtjaGVja0FyZ05hbWVdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uICIlcyIsIGF0dHJpYnV0ZSAiJXMiJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXByKGUpLCBjaGVja0FyZ05hbWUpKQogCiAgICAgICAgICAgICAgICAgIyB0ZXN0IGZvciBwaWNrbGluZyBzdXBwb3J0CiAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGlja2xlLCBjUGlja2xlOgpAQCAtMjk5LDkgKzMwMCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2hlY2tBcmdOYW1lIGluIGV4cGVjdGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdCA9IHJlcHIoZ2V0YXR0cihuZXcsIGNoZWNrQXJnTmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCA9IHJlcHIoZXhwZWN0ZWRbY2hlY2tBcmdOYW1lXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnb3QsIHdhbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BpY2tsZWQgIiVyIiwgYXR0cmlidXRlICIlcyInICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSwgY2hlY2tBcmdOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgd2FudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaWNrbGVkICIlciIsIGF0dHJpYnV0ZSAiJXMiJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSwgY2hlY2tBcmdOYW1lKSkKIAogCiAgICAgZGVmIHRlc3REZXByZWNhdGVkTWVzc2FnZUF0dHJpYnV0ZShzZWxmKToKQEAgLTMyMyw3ICszMjQsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMCkKICAgICAgICAgIyBEZWxldGluZyB0aGUgbWVzc2FnZSBpcyBzdXBwb3J0ZWQsIHRvby4KICAgICAgICAgZGVsIGV4Yy5tZXNzYWdlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBleGMsICJtZXNzYWdlIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBleGMubWVzc2FnZQogCiAgICAgQGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncwogICAgIGRlZiB0ZXN0UGlja2xlTWVzc2FnZUF0dHJpYnV0ZShzZWxmKToKQEAgLTM0Myw3ICszNDUsNyBAQAogICAgICAgICAjIGdvaW5nIHRocm91Z2ggdGhlICdhcmdzJyBhdHRyaWJ1dGUuCiAgICAgICAgIGFyZ3MgPSAoMSwgMiwgMykKICAgICAgICAgZXhjID0gQmFzZUV4Y2VwdGlvbigqYXJncykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZXhjWzpdLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y1s6XSwgYXJncykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuYXJnc1s6XSwgYXJncykKIAogICAgIGRlZiB0ZXN0S2V5d29yZEFyZ3Moc2VsZik6CkBAIC0zNTcsNyArMzU5LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhbmN5X2FyZyA9IGZhbmN5X2FyZwogCiAgICAgICAgIHggPSBEZXJpdmVkRXhjZXB0aW9uKGZhbmN5X2FyZz00MikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5mYW5jeV9hcmcsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZmFuY3lfYXJnLCA0MikKIAogICAgIGRlZiB0ZXN0SW5maW5pdGVSZWN1cnNpb24oc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CkBAIC0zODYsMTEgKzM4OCwxMSBAQAogICAgIGRlZiB0ZXN0VW5pY29kZVN0clVzYWdlKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBib3RoIGluc3RhbmNlcyBhbmQgY2xhc3NlcyBoYXZlIGEgc3RyIGFuZCB1bmljb2RlCiAgICAgICAgICMgcmVwcmVzZW50YXRpb24uCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHIoRXhjZXB0aW9uKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHVuaWNvZGUoRXhjZXB0aW9uKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cihFeGNlcHRpb24oJ2EnKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh1bmljb2RlKEV4Y2VwdGlvbih1J2EnKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh1bmljb2RlKEV4Y2VwdGlvbih1J1x4ZTEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVuaWNvZGUoRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihFeGNlcHRpb24oJ2EnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmljb2RlKEV4Y2VwdGlvbih1J2EnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmljb2RlKEV4Y2VwdGlvbih1J1x4ZTEnKSkpCiAKICAgICBkZWYgdGVzdFVuaWNvZGVDaGFuZ2VBdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZSA3MzA5LiBUaGlzIHdhcyBhIGNyYXNoZXIuCkBAIC00NTksOCArNDYxLDggQEAKICAgICAgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIGUsIHYsIHRiID0gZygpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZSBpcyBSdW50aW1lRXJyb3IsIGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIiBpbiBzdHIodiksIHYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZSBpcyBSdW50aW1lRXJyb3IsIGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBleGNlZWRlZCIsIHN0cih2KSkKIAogCiAKQEAgLTU3MCw2ICs1NzIsNDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBzdHIsIGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShlKSwgdSdmXHhmNlx4ZjYnKQogCisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl93aXRoX2RvYyhzZWxmKToKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICBkb2MyID0gIlRoaXMgaXMgYSB0ZXN0IGRvY3N0cmluZy4iCisgICAgICAgIGRvYzQgPSAiVGhpcyBpcyBhbm90aGVyIHRlc3QgZG9jc3RyaW5nLiIKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FcnJvciwgX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IxIikKKworICAgICAgICAjIHRlc3QgYmFzaWMgdXNhZ2Ugb2YgUHlFcnJfTmV3RXhjZXB0aW9uCisgICAgICAgIGVycm9yMSA9IF90ZXN0Y2FwaS5tYWtlX2V4Y2VwdGlvbl93aXRoX2RvYygiX3Rlc3RjYXBpLmVycm9yMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlcnJvcjEpLCB0eXBlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhlcnJvcjEsIEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGVycm9yMS5fX2RvY19fKQorCisgICAgICAgICMgdGVzdCB3aXRoIGdpdmVuIGRvY3N0cmluZworICAgICAgICBlcnJvcjIgPSBfdGVzdGNhcGkubWFrZV9leGNlcHRpb25fd2l0aF9kb2MoIl90ZXN0Y2FwaS5lcnJvcjIiLCBkb2MyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yMi5fX2RvY19fLCBkb2MyKQorCisgICAgICAgICMgdGVzdCB3aXRoIGV4cGxpY2l0IGJhc2UgKHdpdGhvdXQgZG9jc3RyaW5nKQorICAgICAgICBlcnJvcjMgPSBfdGVzdGNhcGkubWFrZV9leGNlcHRpb25fd2l0aF9kb2MoIl90ZXN0Y2FwaS5lcnJvcjMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZT1lcnJvcjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGVycm9yMywgZXJyb3IyKSkKKworICAgICAgICAjIHRlc3Qgd2l0aCBleHBsaWNpdCBiYXNlIHR1cGxlCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXJyb3I0ID0gX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKCJfdGVzdGNhcGkuZXJyb3I0IiwgZG9jNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjMsIEMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhlcnJvcjQsIGVycm9yMykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGVycm9yNCwgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3I0Ll9fZG9jX18sIGRvYzQpCisKKyAgICAgICAgIyB0ZXN0IHdpdGggZXhwbGljaXQgZGljdGlvbmFyeQorICAgICAgICBlcnJvcjUgPSBfdGVzdGNhcGkubWFrZV9leGNlcHRpb25fd2l0aF9kb2MoIl90ZXN0Y2FwaS5lcnJvcjUiLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yNCwgeydhJzogMX0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGVycm9yNSwgZXJyb3I0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcjUuYSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcjUuX19kb2NfXywgIiIpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25UZXN0cywgVGVzdFNhbWVTdHJBbmRVbmljb2RlTXNnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5CmluZGV4IGY0YWIyMDQuLjk1MGFjMjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXh0Y2FsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2V4dGNhbGwucHkKQEAgLTEsNCArMSw1IEBACiAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCiAiIiJEb2N0ZXN0IGZvciBtZXRob2QvZnVuY3Rpb24gY2FsbHMuCiAKIFdlJ3JlIGdvaW5nIHRoZSB1c2UgdGhlc2UgdHlwZXMgZm9yIGV4dHJhIHRlc3RpbmcKQEAgLTI1MSwxMyArMjUyLDUwIEBACiAgICAgICAuLi4KICAgICBUeXBlRXJyb3I6IGlkKCkgdGFrZXMgbm8ga2V5d29yZCBhcmd1bWVudHMKIAorQSBjb3JuZXIgY2FzZSBvZiBrZXl3b3JkIGRpY3Rpb25hcnkgaXRlbXMgYmVpbmcgZGVsZXRlZCBkdXJpbmcKK3RoZSBmdW5jdGlvbiBjYWxsIHNldHVwLiBTZWUgPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDE2Pi4KKworICAgID4+PiBjbGFzcyBOYW1lKHN0cik6CisgICAgLi4uICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgICBkZWwgeFtzZWxmXQorICAgIC4uLiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAuLi4gICAgICAgICAgICAgIHBhc3MKKyAgICAuLi4gICAgICAgICByZXR1cm4gc3RyLl9fZXFfXyhzZWxmLCBvdGhlcikKKyAgICAuLi4gICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gc3RyLl9faGFzaF9fKHNlbGYpCisKKyAgICA+Pj4geCA9IHtOYW1lKCJhIik6MSwgTmFtZSgiYiIpOjJ9CisgICAgPj4+IGRlZiBmKGEsIGIpOgorICAgIC4uLiAgICAgcHJpbnQgYSxiCisgICAgPj4+IGYoKip4KQorICAgIDEgMgorCitBIG9ic2N1cmUgbWVzc2FnZToKKworICAgID4+PiBkZWYgZihhLCBiKToKKyAgICAuLi4gICAgcGFzcworICAgID4+PiBmKGI9MSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGYoKSB0YWtlcyBleGFjdGx5IDIgYXJndW1lbnRzICgxIGdpdmVuKQorCitUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgaW4gaW5jbHVkZXMga2V5d29yZHM6CisKKyAgICA+Pj4gZGVmIGYoYSk6CisgICAgLi4uICAgIHBhc3MKKyAgICA+Pj4gZig2LCBhPTQsICooMSwgMiwgMykpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgdGFrZXMgZXhhY3RseSAxIGFyZ3VtZW50ICg1IGdpdmVuKQogIiIiCiAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogCi1jbGFzcyBVbmljb2RlS2V5d29yZEFyZ3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEV4dENhbGxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfa2V5d29yZHMoc2VsZik6CiAgICAgICAgIGRlZiBmKGEpOgpAQCAtMjc0LDkgKzMxMiw4IEBACiAKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9leHRjYWxsICMgc2VsZiBpbXBvcnQKLSAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9leHRjYWxsLCBUcnVlKQotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVW5pY29kZUtleXdvcmRBcmdzVGVzdCkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3Qoc3lzLm1vZHVsZXNbX19uYW1lX19dLCBUcnVlKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRXh0Q2FsbFRlc3QpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggMzUwZTIzMy4uYzhlYTdiNwotLS0gYS9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKQEAgLTMsMTIgKzMsMTYgQEAKIE9TLzIrRU1YIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmlsZSBsb2NraW5nIG9wZXJhdGlvbnMuCiAKICIiIgotaW1wb3J0IGZjbnRsCiBpbXBvcnQgb3MKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVEVTVEZOLCB1bmxpbmssIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKHZlcmJvc2UsIFRFU1RGTiwgdW5saW5rLCBydW5fdW5pdHRlc3QsCisgICAgaW1wb3J0X21vZHVsZSkKKworIyBTa2lwIHRlc3QgaWYgbm8gZm5jdGwgbW9kdWxlLgorZmNudGwgPSBpbXBvcnRfbW9kdWxlKCdmY250bCcpCisKIAogIyBUT0RPIC0gV3JpdGUgdGVzdHMgZm9yIGZsb2NrKCkgYW5kIGxvY2tmKCkuCiAKQEAgLTg5LDggKzkzLDcgQEAKICAgICAgICAgICAgICMgVGhpcyBmbGFnIGlzIGxhcmdlciB0aGFuIDIqKjMxIGluIDY0LWJpdCBidWlsZHMKICAgICAgICAgICAgIGZsYWdzID0gZmNudGwuRE5fTVVMVElTSE9UCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICMgRl9OT1RJRlkgb3IgRE5fTVVMVElTSE9UIHVuYXZhaWxhYmxlLCBza2lwcGluZwotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJGX05PVElGWSBvciBETl9NVUxUSVNIT1QgdW5hdmFpbGFibGUiKQogICAgICAgICBmZCA9IG9zLm9wZW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChURVNURk4pKSwgb3MuT19SRE9OTFkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBjbWQsIGZsYWdzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlLnB5CmluZGV4IDc0NDQ1NDguLmRmZmE0YjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKQEAgLTEsMjEgKzEsMjUgQEAKKyMgTk9URTogdGhpcyBmaWxlIHRlc3RzIHRoZSBuZXcgYGlvYCBsaWJyYXJ5IGJhY2twb3J0ZWQgZnJvbSBQeXRob24gMy54LgorIyBTaW1pbGFyIHRlc3RzIGZvciB0aGUgYnVpbHRpbiBmaWxlIG9iamVjdCBjYW4gYmUgZm91bmQgaW4gdGVzdF9maWxlMmsucHkuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKwogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBpdGVydG9vbHMKLWltcG9ydCB0aW1lCi1pbXBvcnQgdGhyZWFkaW5nCiBmcm9tIGFycmF5IGltcG9ydCBhcnJheQogZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQogCi1mcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBmaW5kZmlsZSwgcnVuX3VuaXR0ZXN0CitpbXBvcnQgaW8KK2ltcG9ydCBfcHlpbyBhcyBweWlvCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0CiBmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAogCiBjbGFzcyBBdXRvRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIGZpbGUgdGVzdHMgZm9yIHdoaWNoIGEgdGVzdCBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHVwCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAnd2InKQorICAgICAgICBzZWxmLmYgPSBzZWxmLm9wZW4oVEVTVEZOLCAnd2InKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmY6CkBAIC0yNSw4ICsyOSw4IEBACiAgICAgZGVmIHRlc3RXZWFrUmVmcyhzZWxmKToKICAgICAgICAgIyB2ZXJpZnkgd2VhayByZWZlcmVuY2VzCiAgICAgICAgIHAgPSBwcm94eShzZWxmLmYpCi0gICAgICAgIHAud3JpdGUoJ3Rlc3RzdHJpbmcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmYudGVsbCgpLCBwLnRlbGwoKSkKKyAgICAgICAgcC53cml0ZShiJ3Rlc3RzdHJpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi50ZWxsKCksIHAudGVsbCgpKQogICAgICAgICBzZWxmLmYuY2xvc2UoKQogICAgICAgICBzZWxmLmYgPSBOb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBnZXRhdHRyLCBwLCAndGVsbCcpCkBAIC0zNCwzOCArMzgsMzUgQEAKICAgICBkZWYgdGVzdEF0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgdmVyaWZ5IGV4cGVjdGVkIGF0dHJpYnV0ZXMgZXhpc3QKICAgICAgICAgZiA9IHNlbGYuZgotCiAgICAgICAgIGYubmFtZSAgICAgIyBtZXJlbHkgc2hvdWxkbid0IGJsb3cgdXAKICAgICAgICAgZi5tb2RlICAgICAjIGRpdHRvCiAgICAgICAgIGYuY2xvc2VkICAgIyBkaXR0bwogCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKAotICAgICAgICAgICAgKCdmaWxlLnNvZnRzcGFjZSBub3Qgc3VwcG9ydGVkIGluIDMueCcsIERlcHJlY2F0aW9uV2FybmluZykpOgotICAgICAgICAgICAgc29mdHNwYWNlID0gZi5zb2Z0c3BhY2UKLSAgICAgICAgICAgICMgdmVyaWZ5IHNvZnRzcGFjZSBpcyB3cml0YWJsZQotICAgICAgICAgICAgZi5zb2Z0c3BhY2UgPSBzb2Z0c3BhY2UgICAgIyBtZXJlbHkgc2hvdWxkbid0IGJsb3cgdXAKLQotICAgICAgICAjIHZlcmlmeSB0aGUgb3RoZXJzIGFyZW4ndAotICAgICAgICBmb3IgYXR0ciBpbiAnbmFtZScsICdtb2RlJywgJ2Nsb3NlZCc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciksIHNldGF0dHIsIGYsIGF0dHIsICdvb3BzJykKLQogICAgIGRlZiB0ZXN0UmVhZGludG8oc2VsZik6CiAgICAgICAgICMgdmVyaWZ5IHJlYWRpbnRvCi0gICAgICAgIHNlbGYuZi53cml0ZSgnMTInKQorICAgICAgICBzZWxmLmYud3JpdGUoYicxMicpCiAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgIGEgPSBhcnJheSgnYycsICd4JyoxMCkKLSAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICdyYicpCisgICAgICAgIGEgPSBhcnJheSgnYicsIGIneCcqMTApCisgICAgICAgIHNlbGYuZiA9IHNlbGYub3BlbihURVNURk4sICdyYicpCiAgICAgICAgIG4gPSBzZWxmLmYucmVhZGludG8oYSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzEyJywgYS50b3N0cmluZygpWzpuXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEyJywgYS50b3N0cmluZygpWzpuXSkKKworICAgIGRlZiB0ZXN0UmVhZGludG9fdGV4dChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgcmVhZGludG8gcmVmdXNlcyB0ZXh0IGZpbGVzCisgICAgICAgIGEgPSBhcnJheSgnYicsIGIneCcqMTApCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHNlbGYuZiA9IHNlbGYub3BlbihURVNURk4sICdyJykKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLmYsICJyZWFkaW50byIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYucmVhZGludG8sIGEpCiAKICAgICBkZWYgdGVzdFdyaXRlbGluZXNVc2VyTGlzdChzZWxmKToKICAgICAgICAgIyB2ZXJpZnkgd3JpdGVsaW5lcyB3aXRoIGluc3RhbmNlIHNlcXVlbmNlCi0gICAgICAgIGwgPSBVc2VyTGlzdChbJzEnLCAnMiddKQorICAgICAgICBsID0gVXNlckxpc3QoW2InMScsIGInMiddKQogICAgICAgICBzZWxmLmYud3JpdGVsaW5lcyhsKQogICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgc2VsZi5mID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3JiJykKICAgICAgICAgYnVmID0gc2VsZi5mLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWYsICcxMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCBiJzEyJykKIAogICAgIGRlZiB0ZXN0V3JpdGVsaW5lc0ludGVnZXJzKHNlbGYpOgogICAgICAgICAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggaW50ZWdlcnMKQEAgLTg0LDE0OSArODUsOTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgW05vblN0cmluZygpLCBOb25TdHJpbmcoKV0pCiAKLSAgICBkZWYgdGVzdFJlcHIoc2VsZik6Ci0gICAgICAgICMgdmVyaWZ5IHJlcHIgd29ya3MKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlcHIoc2VsZi5mKS5zdGFydHN3aXRoKCI8b3BlbiBmaWxlICciICsgVEVTVEZOKSkKLQogICAgIGRlZiB0ZXN0RXJyb3JzKHNlbGYpOgotICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKICAgICAgICAgZiA9IHNlbGYuZgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLm5hbWUsIFRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBmLmlzYXR0eSgpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuaXNhdHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRpbnRvLCAiIikKKyAgICAgICAgaWYgaGFzYXR0cihmLCAicmVhZGludG8iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChJT0Vycm9yLCBUeXBlRXJyb3IpLCBmLnJlYWRpbnRvLCAiIikKICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQogCiAgICAgZGVmIHRlc3RNZXRob2RzKHNlbGYpOgotICAgICAgICBtZXRob2RzID0gWydmaWxlbm8nLCAnZmx1c2gnLCAnaXNhdHR5JywgJ25leHQnLCAncmVhZCcsICdyZWFkaW50bycsCi0gICAgICAgICAgICAgICAgICAgJ3JlYWRsaW5lJywgJ3JlYWRsaW5lcycsICdzZWVrJywgJ3RlbGwnLCAndHJ1bmNhdGUnLAotICAgICAgICAgICAgICAgICAgICd3cml0ZScsICd4cmVhZGxpbmVzJywgJ19faXRlcl9fJ10KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2F0aGVvcycpOgotICAgICAgICAgICAgbWV0aG9kcy5yZW1vdmUoJ3RydW5jYXRlJykKKyAgICAgICAgbWV0aG9kcyA9IFsoJ2ZpbGVubycsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ2ZsdXNoJywgKCkpLAorICAgICAgICAgICAgICAgICAgICgnaXNhdHR5JywgKCkpLAorICAgICAgICAgICAgICAgICAgICgnbmV4dCcsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ3JlYWQnLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCd3cml0ZScsIChiIiIsKSksCisgICAgICAgICAgICAgICAgICAgKCdyZWFkbGluZScsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ3JlYWRsaW5lcycsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ3NlZWsnLCAoMCwpKSwKKyAgICAgICAgICAgICAgICAgICAoJ3RlbGwnLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCd3cml0ZScsIChiIiIsKSksCisgICAgICAgICAgICAgICAgICAgKCd3cml0ZWxpbmVzJywgKFtdLCkpLAorICAgICAgICAgICAgICAgICAgICgnX19pdGVyX18nLCAoKSksCisgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2F0aGVvcycpOgorICAgICAgICAgICAgbWV0aG9kcy5hcHBlbmQoKCd0cnVuY2F0ZScsICgpKSkKIAogICAgICAgICAjIF9fZXhpdF9fIHNob3VsZCBjbG9zZSB0aGUgZmlsZQogICAgICAgICBzZWxmLmYuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmYuY2xvc2VkKQogCi0gICAgICAgIGZvciBtZXRob2RuYW1lIGluIG1ldGhvZHM6CisgICAgICAgIGZvciBtZXRob2RuYW1lLCBhcmdzIGluIG1ldGhvZHM6CiAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYuZiwgbWV0aG9kbmFtZSkKICAgICAgICAgICAgICMgc2hvdWxkIHJhaXNlIG9uIGNsb3NlZCBmaWxlCi0gICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncyhxdWlldD1UcnVlKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZXRob2QpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzLCBbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ldGhvZCwgKmFyZ3MpCiAKICAgICAgICAgIyBmaWxlIGlzIGNsb3NlZCwgX19leGl0X18gc2hvdWxkbid0IGRvIGFueXRoaW5nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZi5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSksIE5vbmUpCiAgICAgICAgICMgaXQgbXVzdCBhbHNvIHJldHVybiBOb25lIGlmIGFuIGV4Y2VwdGlvbiB3YXMgZ2l2ZW4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgMSAvLyAwCiAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZi5fX2V4aXRfXygqc3lzLmV4Y19pbmZvKCkpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuX19leGl0X18oKnN5cy5leGNfaW5mbygpKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0UmVhZFdoZW5Xcml0aW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYucmVhZCkKIAotICAgIGRlZiB0ZXN0SXNzdWU1Njc3KHNlbGYpOgotICAgICAgICAjIFJlbWFyazogRG8gbm90IHBlcmZvcm0gbW9yZSB0aGFuIG9uZSB0ZXN0IHBlciBvcGVuIGZpbGUsCi0gICAgICAgICMgc2luY2UgdGhhdCBkb2VzIE5PVCBjYXRjaCB0aGUgcmVhZGxpbmUgZXJyb3Igb24gV2luZG93cy4KLSAgICAgICAgZGF0YSA9ICd4eHgnCi0gICAgICAgIGZvciBtb2RlIGluIFsndycsICd3YicsICdhJywgJ2FiJ106Ci0gICAgICAgICAgICBmb3IgYXR0ciBpbiBbJ3JlYWQnLCAncmVhZGxpbmUnLCAncmVhZGxpbmVzJ106Ci0gICAgICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCi0gICAgICAgICAgICAgICAgc2VsZi5mLndyaXRlKGRhdGEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZ2V0YXR0cihzZWxmLmYsIGF0dHIpKQotICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCitjbGFzcyBDQXV0b0ZpbGVUZXN0cyhBdXRvRmlsZVRlc3RzKToKKyAgICBvcGVuID0gaW8ub3BlbgogCi0gICAgICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKLSAgICAgICAgICAgIHNlbGYuZi53cml0ZShkYXRhKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbGFtYmRhOiBbbGluZSBmb3IgbGluZSBpbiBzZWxmLmZdKQotICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKK2NsYXNzIFB5QXV0b0ZpbGVUZXN0cyhBdXRvRmlsZVRlc3RzKToKKyAgICBvcGVuID0gc3RhdGljbWV0aG9kKHB5aW8ub3BlbikKIAotICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCi0gICAgICAgICAgICBzZWxmLmYud3JpdGUoZGF0YSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi5yZWFkaW50bywgYnl0ZWFycmF5KGxlbihkYXRhKSkpCi0gICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotCi0gICAgICAgIGZvciBtb2RlIGluIFsncicsICdyYicsICdVJywgJ1ViJywgJ1VyJywgJ3JVJywgJ3JiVScsICdyVWInXToKLSAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5mLndyaXRlLCBkYXRhKQotICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLQotICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgW2RhdGEsIGRhdGFdKQotICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLQotICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYudHJ1bmNhdGUpCi0gICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQogCiBjbGFzcyBPdGhlckZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgdGVzdE9wZW5EaXIoc2VsZik6Ci0gICAgICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgICAgICBmb3IgbW9kZSBpbiAoTm9uZSwgInciKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBtb2RlOgotICAgICAgICAgICAgICAgICAgICBmID0gb3Blbih0aGlzX2RpciwgbW9kZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBmID0gb3Blbih0aGlzX2RpcikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbGVuYW1lLCB0aGlzX2RpcikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJvcGVuaW5nIGEgZGlyZWN0b3J5IGRpZG4ndCByYWlzZSBhbiBJT0Vycm9yIikKLQogICAgIGRlZiB0ZXN0TW9kZVN0cmluZ3Moc2VsZik6CiAgICAgICAgICMgY2hlY2sgaW52YWxpZCBtb2RlIHN0cmluZ3MKICAgICAgICAgZm9yIG1vZGUgaW4gKCIiLCAiYVUiLCAid1UrIik6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQorICAgICAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCBtb2RlKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJyVyIGlzIGFuIGludmFsaWQgZmlsZSBtb2RlJyAlIG1vZGUpCiAKLSAgICAgICAgIyBTb21lIGludmFsaWQgbW9kZXMgZmFpbCBvbiBXaW5kb3dzLCBidXQgcGFzcyBvbiBVbml4Ci0gICAgICAgICMgSXNzdWUzOTY1OiBhdm9pZCBhIGNyYXNoIG9uIFdpbmRvd3Mgd2hlbiBmaWxlbmFtZSBpcyB1bmljb2RlCi0gICAgICAgIGZvciBuYW1lIGluIChURVNURk4sIHVuaWNvZGUoVEVTVEZOKSwgdW5pY29kZShURVNURk4gKyAnXHQnKSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgInJyIikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0KICAgICBkZWYgdGVzdFN0ZGluKHNlbGYpOgogICAgICAgICAjIFRoaXMgY2F1c2VzIHRoZSBpbnRlcnByZXRlciB0byBleGl0IG9uIE9TRjEgdjUuMS4KICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdvc2YxVjUnOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc3lzLnN0ZGluLnNlZWssIC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKElPRXJyb3IsIFZhbHVlRXJyb3IpLCBzeXMuc3RkaW4uc2VlaywgLTEpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCA+PnN5cy5fX3N0ZG91dF9fLCAoCisgICAgICAgICAgICBwcmludCgoCiAgICAgICAgICAgICAgICAgJyAgU2tpcHBpbmcgc3lzLnN0ZGluLnNlZWsoLTEpLCBpdCBtYXkgY3Jhc2ggdGhlIGludGVycHJldGVyLicKLSAgICAgICAgICAgICAgICAnIFRlc3QgbWFudWFsbHkuJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc3lzLnN0ZGluLnRydW5jYXRlKQotCi0gICAgZGVmIHRlc3RVbmljb2RlT3BlbihzZWxmKToKLSAgICAgICAgIyB2ZXJpZnkgcmVwciB3b3JrcyBmb3IgdW5pY29kZSB0b28KLSAgICAgICAgZiA9IG9wZW4odW5pY29kZShURVNURk4pLCAidyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXByKGYpLnN0YXJ0c3dpdGgoIjxvcGVuIGZpbGUgdSciICsgVEVTVEZOKSkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIG9zLnVubGluayhURVNURk4pCisgICAgICAgICAgICAgICAgJyBUZXN0IG1hbnVhbGx5LicpLCBmaWxlPXN5cy5fX3N0ZG91dF9fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgVmFsdWVFcnJvciksIHN5cy5zdGRpbi50cnVuY2F0ZSkKIAogICAgIGRlZiB0ZXN0QmFkTW9kZUFyZ3VtZW50KHNlbGYpOgogICAgICAgICAjIHZlcmlmeSB0aGF0IHdlIGdldCBhIHNlbnNpYmxlIGVycm9yIG1lc3NhZ2UgZm9yIGJhZCBtb2RlIGFyZ3VtZW50CiAgICAgICAgIGJhZF9tb2RlID0gInF3ZXJ0eSIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCBiYWRfbW9kZSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCBiYWRfbW9kZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gIT0gMDoKICAgICAgICAgICAgICAgICBzID0gc3RyKG1zZykKICAgICAgICAgICAgICAgICBpZiBURVNURk4gaW4gcyBvciBiYWRfbW9kZSBub3QgaW4gczoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJiYWQgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBzKQotICAgICAgICAgICAgIyBpZiBtc2dbMF0gPT0gMCwgd2UncmUgcHJvYmFibHkgb24gV2luZG93cyB3aGVyZSB0aGVyZSBtYXkgYmUKKyAgICAgICAgICAgICMgaWYgbXNnLmFyZ3NbMF0gPT0gMCwgd2UncmUgcHJvYmFibHkgb24gV2luZG93cyB3aGVyZSB0aGVyZSBtYXkgYmUKICAgICAgICAgICAgICMgbm8gb2J2aW91cyB3YXkgdG8gZGlzY292ZXIgd2h5IG9wZW4oKSBmYWlsZWQuCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmLmNsb3NlKCkKQEAgLTIzNywzMSArMTg1LDMyIEBACiAgICAgICAgICMgbWlzYmVoYXZpb3VyIGVzcGVjaWFsbHkgd2l0aCByZXBlYXRlZCBjbG9zZSgpIGNhbGxzCiAgICAgICAgIGZvciBzIGluICgtMSwgMCwgMSwgNTEyKToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICd3JywgcykKLSAgICAgICAgICAgICAgICBmLndyaXRlKHN0cihzKSkKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3diJywgcykKKyAgICAgICAgICAgICAgICBmLndyaXRlKHN0cihzKS5lbmNvZGUoImFzY2lpIikpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAncicsIHMpCi0gICAgICAgICAgICAgICAgZCA9IGludChmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3JiJywgcykKKyAgICAgICAgICAgICAgICBkID0gaW50KGYucmVhZCgpLmRlY29kZSgiYXNjaWkiKSkKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvciBzZXR0aW5nIGJ1ZmZlciBzaXplICVkOiAlcycgJSAocywgc3RyKG1zZykpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZCwgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgcykKIAogICAgIGRlZiB0ZXN0VHJ1bmNhdGVPbldpbmRvd3Moc2VsZik6Ci0gICAgICAgIG9zLnVubGluayhURVNURk4pCisgICAgICAgICMgU0YgYnVnIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvODAxNjMxPgorICAgICAgICAjICJmaWxlLnRydW5jYXRlIGZhdWx0IG9uIHdpbmRvd3MiCiAKLSAgICAgICAgZGVmIGJ1ZzgwMTYzMSgpOgotICAgICAgICAgICAgIyBTRiBidWcgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi84MDE2MzE+Ci0gICAgICAgICAgICAjICJmaWxlLnRydW5jYXRlIGZhdWx0IG9uIHdpbmRvd3MiCi0gICAgICAgICAgICBmID0gb3BlbihURVNURk4sICd3YicpCi0gICAgICAgICAgICBmLndyaXRlKCcxMjM0NTY3ODkwMScpICAgIyAxMSBieXRlcworICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3diJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKGInMTIzNDU2Nzg5MDEnKSAgICMgMTEgYnl0ZXMKICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgICAgICBmID0gb3BlbihURVNURk4sJ3JiKycpCisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwncmIrJykKICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoNSkKLSAgICAgICAgICAgIGlmIGRhdGEgIT0gJzEyMzQ1JzoKKyAgICAgICAgICAgIGlmIGRhdGEgIT0gYicxMjM0NSc6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJSZWFkIG9uIGZpbGUgb3BlbmVkIGZvciB1cGRhdGUgZmFpbGVkICVyIiAlIGRhdGEpCiAgICAgICAgICAgICBpZiBmLnRlbGwoKSAhPSA1OgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRmlsZSBwb3MgYWZ0ZXIgcmVhZCB3cm9uZyAlZCIgJSBmLnRlbGwoKSkKQEAgLTI3NCw1NiArMjIzLDQyIEBACiAgICAgICAgICAgICBzaXplID0gb3MucGF0aC5nZXRzaXplKFRFU1RGTikKICAgICAgICAgICAgIGlmIHNpemUgIT0gNToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgc2l6ZSBhZnRlciBmdHJ1bmNhdGUgd3JvbmcgJWQiICUgc2l6ZSkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBidWc4MDE2MzEoKQogICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQogCiAgICAgZGVmIHRlc3RJdGVyYXRpb24oc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGUgY29tcGxleCBpbnRlcmFjdGlvbiB3aGVuIG1peGluZyBmaWxlLWl0ZXJhdGlvbiBhbmQgdGhlCi0gICAgICAgICMgdmFyaW91cyByZWFkKiBtZXRob2RzLiBPc3RlbnNpYmx5LCB0aGUgbWl4dHVyZSBjb3VsZCBqdXN0IGJlIHRlc3RlZAotICAgICAgICAjIHRvIHdvcmsgd2hlbiBpdCBzaG91bGQgd29yayBhY2NvcmRpbmcgdG8gdGhlIFB5dGhvbiBsYW5ndWFnZSwKLSAgICAgICAgIyBpbnN0ZWFkIG9mIGZhaWwgd2hlbiBpdCBzaG91bGQgZmFpbCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgQ1B5dGhvbgotICAgICAgICAjIGltcGxlbWVudGF0aW9uLiAgUGVvcGxlIGRvbid0IGFsd2F5cyBwcm9ncmFtIFB5dGhvbiB0aGUgd2F5IHRoZXkKLSAgICAgICAgIyBzaG91bGQsIHRob3VnaCwgYW5kIHRoZSBpbXBsZW1lbmF0aW9uIG1pZ2h0IGNoYW5nZSBpbiBzdWJ0bGUgd2F5cywKLSAgICAgICAgIyBzbyB3ZSBleHBsaWNpdGx5IHRlc3QgZm9yIGVycm9ycywgdG9vOyB0aGUgdGVzdCB3aWxsIGp1c3QgaGF2ZSB0bwotICAgICAgICAjIGJlIHVwZGF0ZWQgd2hlbiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlcy4KKyAgICAgICAgIyB2YXJpb3VzIHJlYWQqIG1ldGhvZHMuCiAgICAgICAgIGRhdGFvZmZzZXQgPSAxNjM4NAotICAgICAgICBmaWxsZXIgPSAiaGFtXG4iCisgICAgICAgIGZpbGxlciA9IGIiaGFtXG4iCiAgICAgICAgIGFzc2VydCBub3QgZGF0YW9mZnNldCAlIGxlbihmaWxsZXIpLCBcCiAgICAgICAgICAgICAiZGF0YW9mZnNldCBtdXN0IGJlIG11bHRpcGxlIG9mIGxlbihmaWxsZXIpIgogICAgICAgICBuY2h1bmtzID0gZGF0YW9mZnNldCAvLyBsZW4oZmlsbGVyKQogICAgICAgICB0ZXN0bGluZXMgPSBbCi0gICAgICAgICAgICAic3BhbSwgc3BhbSBhbmQgZWdnc1xuIiwKLSAgICAgICAgICAgICJlZ2dzLCBzcGFtLCBoYW0gYW5kIHNwYW1cbiIsCi0gICAgICAgICAgICAic2F1c3NhZ2VzLCBzcGFtLCBzcGFtIGFuZCBlZ2dzXG4iLAotICAgICAgICAgICAgInNwYW0sIGhhbSwgc3BhbSBhbmQgZWdnc1xuIiwKLSAgICAgICAgICAgICJzcGFtLCBzcGFtLCBzcGFtLCBzcGFtLCBzcGFtLCBoYW0sIHNwYW1cbiIsCi0gICAgICAgICAgICAid29uZGVyZnVsIHNwYWFhYWFhbS5cbiIKKyAgICAgICAgICAgIGIic3BhbSwgc3BhbSBhbmQgZWdnc1xuIiwKKyAgICAgICAgICAgIGIiZWdncywgc3BhbSwgaGFtIGFuZCBzcGFtXG4iLAorICAgICAgICAgICAgYiJzYXVzc2FnZXMsIHNwYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCisgICAgICAgICAgICBiInNwYW0sIGhhbSwgc3BhbSBhbmQgZWdnc1xuIiwKKyAgICAgICAgICAgIGIic3BhbSwgc3BhbSwgc3BhbSwgc3BhbSwgc3BhbSwgaGFtLCBzcGFtXG4iLAorICAgICAgICAgICAgYiJ3b25kZXJmdWwgc3BhYWFhYWFtLlxuIgogICAgICAgICBdCiAgICAgICAgIG1ldGhvZHMgPSBbKCJyZWFkbGluZSIsICgpKSwgKCJyZWFkIiwgKCkpLCAoInJlYWRsaW5lcyIsICgpKSwKLSAgICAgICAgICAgICAgICAgICAoInJlYWRpbnRvIiwgKGFycmF5KCJjIiwgIiAiKjEwMCksKSldCisgICAgICAgICAgICAgICAgICAgKCJyZWFkaW50byIsIChhcnJheSgiYiIsIGIiICIqMTAwKSwpKV0KIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIFByZXBhcmUgdGhlIHRlc3RmaWxlCi0gICAgICAgICAgICBiYWcgPSBvcGVuKFRFU1RGTiwgInciKQorICAgICAgICAgICAgYmFnID0gc2VsZi5vcGVuKFRFU1RGTiwgIndiIikKICAgICAgICAgICAgIGJhZy53cml0ZShmaWxsZXIgKiBuY2h1bmtzKQogICAgICAgICAgICAgYmFnLndyaXRlbGluZXModGVzdGxpbmVzKQogICAgICAgICAgICAgYmFnLmNsb3NlKCkKICAgICAgICAgICAgICMgVGVzdCBmb3IgYXBwcm9wcmlhdGUgZXJyb3JzIG1peGluZyByZWFkKiBhbmQgaXRlcmF0aW9uCiAgICAgICAgICAgICBmb3IgbWV0aG9kbmFtZSwgYXJncyBpbiBtZXRob2RzOgotICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTikKLSAgICAgICAgICAgICAgICBpZiBmLm5leHQoKSAhPSBmaWxsZXI6CisgICAgICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICdyYicpCisgICAgICAgICAgICAgICAgaWYgbmV4dChmKSAhPSBmaWxsZXI6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCwgIkJyb2tlbiB0ZXN0ZmlsZSIKICAgICAgICAgICAgICAgICBtZXRoID0gZ2V0YXR0cihmLCBtZXRob2RuYW1lKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgbWV0aCgqYXJncykKLSAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXMlciBhZnRlciBuZXh0KCkgZGlkbid0IHJhaXNlIFZhbHVlRXJyb3IiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWV0aG9kbmFtZSwgYXJncykpCisgICAgICAgICAgICAgICAgbWV0aCgqYXJncykgICMgVGhpcyBzaW1wbHkgc2hvdWxkbid0IGZhaWwKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICAgICAgIyBUZXN0IHRvIHNlZSBpZiBoYXJtbGVzcyAoYnkgYWNjaWRlbnQpIG1peGluZyBvZiByZWFkKiBhbmQKQEAgLTMzMyw5ICsyNjgsOSBAQAogICAgICAgICAgICAgIyAoImgiLCAiYSIsICJtIiwgIlxuIiksIHNvIDQwOTYgbGluZXMgb2YgdGhhdCBzaG91bGQgZ2V0IHVzCiAgICAgICAgICAgICAjIGV4YWN0bHkgb24gdGhlIGJ1ZmZlciBib3VuZGFyeSBmb3IgYW55IHBvd2VyLW9mLTIgYnVmZmVyc2l6ZQogICAgICAgICAgICAgIyBiZXR3ZWVuIDQgYW5kIDE2Mzg0IChpbmNsdXNpdmUpLgotICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOKQorICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICdyYicpCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuY2h1bmtzKToKLSAgICAgICAgICAgICAgICBmLm5leHQoKQorICAgICAgICAgICAgICAgIG5leHQoZikKICAgICAgICAgICAgIHRlc3RsaW5lID0gdGVzdGxpbmVzLnBvcCgwKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKQEAgLTM0Niw3ICsyODEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGxpbmUoKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCiAgICAgICAgICAgICB0ZXN0bGluZSA9IHRlc3RsaW5lcy5wb3AoMCkKLSAgICAgICAgICAgIGJ1ZiA9IGFycmF5KCJjIiwgIlx4MDAiICogbGVuKHRlc3RsaW5lKSkKKyAgICAgICAgICAgIGJ1ZiA9IGFycmF5KCJiIiwgYiJceDAwIiAqIGxlbih0ZXN0bGluZSkpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZi5yZWFkaW50byhidWYpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKQEAgLTM3NSw3ICszMTAsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGxpbmVzKCkgYWZ0ZXIgbmV4dCgpIHdpdGggZW1wdHkgYnVmZmVyICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4gR290ICVyLCBleHBlY3RlZCAlciIgJSAobGluZSwgdGVzdGxpbmUpKQogICAgICAgICAgICAgIyBSZWFkaW5nIGFmdGVyIGl0ZXJhdGlvbiBoaXQgRU9GIHNob3VsZG4ndCBodXJ0IGVpdGhlcgotICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOKQorICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICdyYicpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwpAQCAtMzkxLDIzMiArMzI2LDE5IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQogCi1jbGFzcyBGaWxlU3ViY2xhc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBDT3RoZXJGaWxlVGVzdHMoT3RoZXJGaWxlVGVzdHMpOgorICAgIG9wZW4gPSBpby5vcGVuCiAKLSAgICBkZWYgdGVzdEV4aXQoc2VsZik6Ci0gICAgICAgICMgdGVzdCB0aGF0IGV4aXRpbmcgd2l0aCBjb250ZXh0IGNhbGxzIHN1YmNsYXNzJyBjbG9zZQotICAgICAgICBjbGFzcyBDKGZpbGUpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgICAgICAgICBzZWxmLnN1YmNsYXNzX2Nsb3NlZCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgZmlsZS5fX2luaXRfXyhzZWxmLCAqYXJncykKLSAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgICAgICAgICBzZWxmLnN1YmNsYXNzX2Nsb3NlZCA9IFRydWUKLSAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKHNlbGYpCi0KLSAgICAgICAgd2l0aCBDKFRFU1RGTiwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZi5zdWJjbGFzc19jbG9zZWQpCi0KLQotY2xhc3MgRmlsZVRocmVhZGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIFRoZXNlIHRlc3RzIGNoZWNrIHRoZSBhYmlsaXR5IHRvIGNhbGwgdmFyaW91cyBtZXRob2RzIG9mIGZpbGUgb2JqZWN0cwotICAgICMgKGluY2x1ZGluZyBjbG9zZSgpKSBjb25jdXJyZW50bHkgd2l0aG91dCBjcmFzaGluZyB0aGUgUHl0aG9uIGludGVycHJldGVyLgotICAgICMgU2VlICM4MTU2NDYsICM1OTU2MDEKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5mID0gTm9uZQotICAgICAgICBzZWxmLmZpbGVuYW1lID0gVEVTVEZOCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKCJcbiIuam9pbigiMDEyMzQ1Njc4OSIpKQotICAgICAgICBzZWxmLl9jb3VudF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotICAgICAgICBzZWxmLmNsb3NlX2NvdW50ID0gMAotICAgICAgICBzZWxmLmNsb3NlX3N1Y2Nlc3NfY291bnQgPSAwCi0gICAgICAgIHNlbGYudXNlX2J1ZmZlcmluZyA9IEZhbHNlCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IChFbnZpcm9ubWVudEVycm9yLCBWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBfY3JlYXRlX2ZpbGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYudXNlX2J1ZmZlcmluZzoKLSAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oc2VsZi5maWxlbmFtZSwgIncrIiwgYnVmZmVyaW5nPTEwMjQqMTYpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3KyIpCi0KLSAgICBkZWYgX2Nsb3NlX2ZpbGUoc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5fY291bnRfbG9jazoKLSAgICAgICAgICAgIHNlbGYuY2xvc2VfY291bnQgKz0gMQotICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICB3aXRoIHNlbGYuX2NvdW50X2xvY2s6Ci0gICAgICAgICAgICBzZWxmLmNsb3NlX3N1Y2Nlc3NfY291bnQgKz0gMQotCi0gICAgZGVmIF9jbG9zZV9hbmRfcmVvcGVuX2ZpbGUoc2VsZik6Ci0gICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGUoKQotICAgICAgICAjIGlmIGNsb3NlIHJhaXNlcyBhbiBleGNlcHRpb24gdGhhdHMgZmluZSwgc2VsZi5mIHJlbWFpbnMgdmFsaWQgc28KLSAgICAgICAgIyB3ZSBkb24ndCBuZWVkIHRvIHJlb3Blbi4KLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUoKQotCi0gICAgZGVmIF9ydW5fd29ya2VycyhzZWxmLCBmdW5jLCBuYl93b3JrZXJzLCBkdXJhdGlvbj0wLjIpOgotICAgICAgICB3aXRoIHNlbGYuX2NvdW50X2xvY2s6Ci0gICAgICAgICAgICBzZWxmLmNsb3NlX2NvdW50ID0gMAotICAgICAgICAgICAgc2VsZi5jbG9zZV9zdWNjZXNzX2NvdW50ID0gMAotICAgICAgICBzZWxmLmRvX2NvbnRpbnVlID0gVHJ1ZQotICAgICAgICB0aHJlYWRzID0gW10KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobmJfd29ya2Vycyk6Ci0gICAgICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWZ1bmMpCi0gICAgICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodCkKLSAgICAgICAgICAgIGZvciBfIGluIHhyYW5nZSgxMDApOgotICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoZHVyYXRpb24vMTAwKQotICAgICAgICAgICAgICAgIHdpdGggc2VsZi5fY291bnRfbG9jazoKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jbG9zZV9jb3VudC1zZWxmLmNsb3NlX3N1Y2Nlc3NfY291bnQgPiBuYl93b3JrZXJzKzE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnUScsCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgdGltZS5zbGVlcChkdXJhdGlvbikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuZG9fY29udGludWUgPSBGYWxzZQotICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICB0LmpvaW4oKQotCi0gICAgZGVmIF90ZXN0X2Nsb3NlX29wZW5faW8oc2VsZiwgaW9fZnVuYywgbmJfd29ya2Vycz01KToKLSAgICAgICAgZGVmIHdvcmtlcigpOgotICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUoKQotICAgICAgICAgICAgZnVuY3MgPSBpdGVydG9vbHMuY3ljbGUoKAotICAgICAgICAgICAgICAgIGxhbWJkYTogaW9fZnVuYygpLAotICAgICAgICAgICAgICAgIGxhbWJkYTogc2VsZi5fY2xvc2VfYW5kX3Jlb3Blbl9maWxlKCksCi0gICAgICAgICAgICApKQotICAgICAgICAgICAgZm9yIGYgaW4gZnVuY3M6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZG9fY29udGludWU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuX3J1bl93b3JrZXJzKHdvcmtlciwgbmJfd29ya2VycykKLSAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAjIFVzZWZ1bCB2ZXJib3NlIHN0YXRpc3RpY3Mgd2hlbiB0dW5pbmcgdGhpcyB0ZXN0IHRvIHRha2UKLSAgICAgICAgICAgICMgbGVzcyB0aW1lIHRvIHJ1biBidXQgc3RpbGwgZW5zdXJpbmcgdGhhdCBpdHMgc3RpbGwgdXNlZnVsLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyB0aGUgcGVyY2VudCBvZiBjbG9zZSBjYWxscyB0aGF0IHJhaXNlZCBhbiBlcnJvcgotICAgICAgICAgICAgcGVyY2VudCA9IDEwMC4gLSAxMDAuKnNlbGYuY2xvc2Vfc3VjY2Vzc19jb3VudC9zZWxmLmNsb3NlX2NvdW50Ci0gICAgICAgICAgICBwcmludCBzZWxmLmNsb3NlX2NvdW50LCAoJyUuNGYgJyAlIHBlcmNlbnQpLAotCi0gICAgZGVmIHRlc3RfY2xvc2Vfb3BlbihzZWxmKToKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCi0KLSAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX2ZsdXNoKHNlbGYpOgotICAgICAgICBkZWYgaW9fZnVuYygpOgotICAgICAgICAgICAgc2VsZi5mLmZsdXNoKCkKLSAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCi0KLSAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX2l0ZXIoc2VsZik6Ci0gICAgICAgIGRlZiBpb19mdW5jKCk6Ci0gICAgICAgICAgICBsaXN0KGl0ZXIoc2VsZi5mKSkKLSAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCi0KLSAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX2lzYXR0eShzZWxmKToKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIHNlbGYuZi5pc2F0dHkoKQotICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKLQotICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcHJpbnQoc2VsZik6Ci0gICAgICAgIGRlZiBpb19mdW5jKCk6Ci0gICAgICAgICAgICBwcmludCA+PiBzZWxmLmYsICcnCi0gICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQotCi0gICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9wcmludF9idWZmZXJlZChzZWxmKToKLSAgICAgICAgc2VsZi51c2VfYnVmZmVyaW5nID0gVHJ1ZQotICAgICAgICBkZWYgaW9fZnVuYygpOgotICAgICAgICAgICAgcHJpbnQgPj4gc2VsZi5mLCAnJwotICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKLQotICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcmVhZChzZWxmKToKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIHNlbGYuZi5yZWFkKDApCi0gICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQotCi0gICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9yZWFkaW50byhzZWxmKToKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIGEgPSBhcnJheSgnYycsICd4eHh4eCcpCi0gICAgICAgICAgICBzZWxmLmYucmVhZGludG8oYSkKLSAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCi0KLSAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3JlYWRsaW5lKHNlbGYpOgotICAgICAgICBkZWYgaW9fZnVuYygpOgotICAgICAgICAgICAgc2VsZi5mLnJlYWRsaW5lKCkKLSAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCi0KLSAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3JlYWRsaW5lcyhzZWxmKToKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIHNlbGYuZi5yZWFkbGluZXMoKQotICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKLQotICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fc2VlayhzZWxmKToKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIHNlbGYuZi5zZWVrKDAsIDApCi0gICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQotCi0gICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl90ZWxsKHNlbGYpOgotICAgICAgICBkZWYgaW9fZnVuYygpOgotICAgICAgICAgICAgc2VsZi5mLnRlbGwoKQotICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKLQotICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fdHJ1bmNhdGUoc2VsZik6Ci0gICAgICAgIGRlZiBpb19mdW5jKCk6Ci0gICAgICAgICAgICBzZWxmLmYudHJ1bmNhdGUoKQotICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKLQotICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fd3JpdGUoc2VsZik6Ci0gICAgICAgIGRlZiBpb19mdW5jKCk6Ci0gICAgICAgICAgICBzZWxmLmYud3JpdGUoJycpCi0gICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQotCi0gICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl93cml0ZWxpbmVzKHNlbGYpOgotICAgICAgICBkZWYgaW9fZnVuYygpOgotICAgICAgICAgICAgc2VsZi5mLndyaXRlbGluZXMoJycpCi0gICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQotCi0KLWNsYXNzIFN0ZG91dFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X21vdmVfc3Rkb3V0X29uX3dyaXRlKHNlbGYpOgotICAgICAgICAjIElzc3VlIDMyNDI6IHN5cy5zdGRvdXQgY2FuIGJlIHJlcGxhY2VkIChhbmQgZnJlZWQpIGR1cmluZyBhCi0gICAgICAgICMgcHJpbnQgc3RhdGVtZW50OyBwcmV2ZW50IGEgc2VnZmF1bHQgaW4gdGhpcyBjYXNlCi0gICAgICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAotCi0gICAgICAgIGNsYXNzIEZpbGU6Ci0gICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6Ci0gICAgICAgICAgICAgICAgaWYgJ1xuJyBpbiBkYXRhOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gRmlsZSgpCi0gICAgICAgICAgICBwcmludCAic29tZSB0ZXh0IgotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0Ci0KLSAgICBkZWYgdGVzdF9kZWxfc3Rkb3V0X2JlZm9yZV9wcmludChzZWxmKToKLSAgICAgICAgIyBJc3N1ZSA0NTk3OiAncHJpbnQnIHdpdGggbm8gYXJndW1lbnQgd2Fzbid0IHJlcG9ydGluZyB3aGVuCi0gICAgICAgICMgc3lzLnN0ZG91dCB3YXMgZGVsZXRlZC4KLSAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0Ci0gICAgICAgIGRlbCBzeXMuc3Rkb3V0Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHByaW50Ci0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0cihlKSwgImxvc3Qgc3lzLnN0ZG91dCIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFJ1bnRpbWVFcnJvciIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKK2NsYXNzIFB5T3RoZXJGaWxlVGVzdHMoT3RoZXJGaWxlVGVzdHMpOgorICAgIG9wZW4gPSBzdGF0aWNtZXRob2QocHlpby5vcGVuKQogCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICAjIEhpc3RvcmljYWxseSwgdGhlc2UgdGVzdHMgaGF2ZSBiZWVuIHNsb3BweSBhYm91dCByZW1vdmluZyBURVNURk4uCiAgICAgIyBTbyBnZXQgcmlkIG9mIGl0IG5vIG1hdHRlciB3aGF0LgogICAgIHRyeToKLSAgICAgICAgcnVuX3VuaXR0ZXN0KEF1dG9GaWxlVGVzdHMsIE90aGVyRmlsZVRlc3RzLCBGaWxlU3ViY2xhc3NUZXN0cywKLSAgICAgICAgICAgIEZpbGVUaHJlYWRpbmdUZXN0cywgU3Rkb3V0VGVzdHMpCisgICAgICAgIHJ1bl91bml0dGVzdChDQXV0b0ZpbGVUZXN0cywgUHlBdXRvRmlsZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgQ090aGVyRmlsZVRlc3RzLCBQeU90aGVyRmlsZVRlc3RzKQogICAgIGZpbmFsbHk6CiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFU1RGTik6CiAgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlMmsucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGUyay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTlmMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlMmsucHkKQEAgLTAsMCArMSw2ODAgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgdGltZQorZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKK2Zyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0CisKK2NsYXNzIEF1dG9GaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgZmlsZSB0ZXN0cyBmb3Igd2hpY2ggYSB0ZXN0IGZpbGUgaXMgYXV0b21hdGljYWxseSBzZXQgdXAKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICd3YicpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZjoKKyAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisKKyAgICBkZWYgdGVzdFdlYWtSZWZzKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3ZWFrIHJlZmVyZW5jZXMKKyAgICAgICAgcCA9IHByb3h5KHNlbGYuZikKKyAgICAgICAgcC53cml0ZSgndGVzdHN0cmluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgcC50ZWxsKCkpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHNlbGYuZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVmZXJlbmNlRXJyb3IsIGdldGF0dHIsIHAsICd0ZWxsJykKKworICAgIGRlZiB0ZXN0QXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgZXhwZWN0ZWQgYXR0cmlidXRlcyBleGlzdAorICAgICAgICBmID0gc2VsZi5mCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNvZnRzcGFjZSA9IGYuc29mdHNwYWNlCisgICAgICAgIGYubmFtZSAgICAgIyBtZXJlbHkgc2hvdWxkbid0IGJsb3cgdXAKKyAgICAgICAgZi5tb2RlICAgICAjIGRpdHRvCisgICAgICAgIGYuY2xvc2VkICAgIyBkaXR0bworCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgICMgdmVyaWZ5IHNvZnRzcGFjZSBpcyB3cml0YWJsZQorICAgICAgICAgICAgZi5zb2Z0c3BhY2UgPSBzb2Z0c3BhY2UgICAgIyBtZXJlbHkgc2hvdWxkbid0IGJsb3cgdXAKKworICAgICAgICAjIHZlcmlmeSB0aGUgb3RoZXJzIGFyZW4ndAorICAgICAgICBmb3IgYXR0ciBpbiAnbmFtZScsICdtb2RlJywgJ2Nsb3NlZCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciksIHNldGF0dHIsIGYsIGF0dHIsICdvb3BzJykKKworICAgIGRlZiB0ZXN0UmVhZGludG8oc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHJlYWRpbnRvCisgICAgICAgIHNlbGYuZi53cml0ZSgnMTInKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBhID0gYXJyYXkoJ2MnLCAneCcqMTApCisgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICBuID0gc2VsZi5mLnJlYWRpbnRvKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEyJywgYS50b3N0cmluZygpWzpuXSkKKworICAgIGRlZiB0ZXN0V3JpdGVsaW5lc1VzZXJMaXN0KHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggaW5zdGFuY2Ugc2VxdWVuY2UKKyAgICAgICAgbCA9IFVzZXJMaXN0KFsnMScsICcyJ10pCisgICAgICAgIHNlbGYuZi53cml0ZWxpbmVzKGwpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICBidWYgPSBzZWxmLmYucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCAnMTInKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzSW50ZWdlcnMoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHdyaXRlbGluZXMgd2l0aCBpbnRlZ2VycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzLCBbMSwgMiwgM10pCisKKyAgICBkZWYgdGVzdFdyaXRlbGluZXNJbnRlZ2Vyc1VzZXJMaXN0KHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggaW50ZWdlcnMgaW4gVXNlckxpc3QKKyAgICAgICAgbCA9IFVzZXJMaXN0KFsxLDIsM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIGwpCisKKyAgICBkZWYgdGVzdFdyaXRlbGluZXNOb25TdHJpbmcoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHdyaXRlbGluZXMgd2l0aCBub24tc3RyaW5nIG9iamVjdAorICAgICAgICBjbGFzcyBOb25TdHJpbmc6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW05vblN0cmluZygpLCBOb25TdHJpbmcoKV0pCisKKyAgICBkZWYgdGVzdFJlcHIoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHJlcHIgd29ya3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoc2VsZi5mKS5zdGFydHN3aXRoKCI8b3BlbiBmaWxlICciICsgVEVTVEZOKSkKKworICAgIGRlZiB0ZXN0RXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgZiA9IHNlbGYuZgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuaXNhdHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRpbnRvLCAiIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0TWV0aG9kcyhzZWxmKToKKyAgICAgICAgbWV0aG9kcyA9IFsnZmlsZW5vJywgJ2ZsdXNoJywgJ2lzYXR0eScsICduZXh0JywgJ3JlYWQnLCAncmVhZGludG8nLAorICAgICAgICAgICAgICAgICAgICdyZWFkbGluZScsICdyZWFkbGluZXMnLCAnc2VlaycsICd0ZWxsJywgJ3RydW5jYXRlJywKKyAgICAgICAgICAgICAgICAgICAnd3JpdGUnLCAnX19pdGVyX18nXQorICAgICAgICBkZXByZWNhdGVkX21ldGhvZHMgPSBbJ3hyZWFkbGluZXMnXQorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnYXRoZW9zJyk6CisgICAgICAgICAgICBtZXRob2RzLnJlbW92ZSgndHJ1bmNhdGUnKQorCisgICAgICAgICMgX19leGl0X18gc2hvdWxkIGNsb3NlIHRoZSBmaWxlCisgICAgICAgIHNlbGYuZi5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mLmNsb3NlZCkKKworICAgICAgICBmb3IgbWV0aG9kbmFtZSBpbiBtZXRob2RzOgorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLmYsIG1ldGhvZG5hbWUpCisgICAgICAgICAgICAjIHNob3VsZCByYWlzZSBvbiBjbG9zZWQgZmlsZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWV0aG9kKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBmb3IgbWV0aG9kbmFtZSBpbiBkZXByZWNhdGVkX21ldGhvZHM6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLmYsIG1ldGhvZG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWV0aG9kKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgW10pCisKKyAgICAgICAgIyBmaWxlIGlzIGNsb3NlZCwgX19leGl0X18gc2hvdWxkbid0IGRvIGFueXRoaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpLCBOb25lKQorICAgICAgICAjIGl0IG11c3QgYWxzbyByZXR1cm4gTm9uZSBpZiBhbiBleGNlcHRpb24gd2FzIGdpdmVuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5fX2V4aXRfXygqc3lzLmV4Y19pbmZvKCkpLCBOb25lKQorCisgICAgZGVmIHRlc3RSZWFkV2hlbldyaXRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi5yZWFkKQorCisgICAgZGVmIHRlc3ROYXN0eVdyaXRlbGluZXNHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGRlZiBuYXN0eSgpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAgICAgaWYgaSA9PSAzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHlpZWxkIHN0cihpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgbmFzdHkoKSkKKworICAgIGRlZiB0ZXN0SXNzdWU1Njc3KHNlbGYpOgorICAgICAgICAjIFJlbWFyazogRG8gbm90IHBlcmZvcm0gbW9yZSB0aGFuIG9uZSB0ZXN0IHBlciBvcGVuIGZpbGUsCisgICAgICAgICMgc2luY2UgdGhhdCBkb2VzIE5PVCBjYXRjaCB0aGUgcmVhZGxpbmUgZXJyb3Igb24gV2luZG93cy4KKyAgICAgICAgZGF0YSA9ICd4eHgnCisgICAgICAgIGZvciBtb2RlIGluIFsndycsICd3YicsICdhJywgJ2FiJ106CisgICAgICAgICAgICBmb3IgYXR0ciBpbiBbJ3JlYWQnLCAncmVhZGxpbmUnLCAncmVhZGxpbmVzJ106CisgICAgICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICAgICAgc2VsZi5mLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZ2V0YXR0cihzZWxmLmYsIGF0dHIpKQorICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisKKyAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQorICAgICAgICAgICAgc2VsZi5mLndyaXRlKGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBsYW1iZGE6IFtsaW5lIGZvciBsaW5lIGluIHNlbGYuZl0pCisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuZi53cml0ZShkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5mLnJlYWRpbnRvLCBieXRlYXJyYXkobGVuKGRhdGEpKSkKKyAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisKKyAgICAgICAgZm9yIG1vZGUgaW4gWydyJywgJ3JiJywgJ1UnLCAnVWInLCAnVXInLCAnclUnLCAncmJVJywgJ3JVYiddOgorICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYud3JpdGUsIGRhdGEpCisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzLCBbZGF0YSwgZGF0YV0pCisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi50cnVuY2F0ZSkKKyAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisKK2NsYXNzIE90aGVyRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0T3BlbkRpcihzZWxmKToKKyAgICAgICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpcgorICAgICAgICBmb3IgbW9kZSBpbiAoTm9uZSwgInciKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBtb2RlOgorICAgICAgICAgICAgICAgICAgICBmID0gb3Blbih0aGlzX2RpciwgbW9kZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmID0gb3Blbih0aGlzX2RpcikKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbGVuYW1lLCB0aGlzX2RpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJvcGVuaW5nIGEgZGlyZWN0b3J5IGRpZG4ndCByYWlzZSBhbiBJT0Vycm9yIikKKworICAgIGRlZiB0ZXN0TW9kZVN0cmluZ3Moc2VsZik6CisgICAgICAgICMgY2hlY2sgaW52YWxpZCBtb2RlIHN0cmluZ3MKKyAgICAgICAgZm9yIG1vZGUgaW4gKCIiLCAiYVUiLCAid1UrIik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJyVyIGlzIGFuIGludmFsaWQgZmlsZSBtb2RlJyAlIG1vZGUpCisKKyAgICAgICAgIyBTb21lIGludmFsaWQgbW9kZXMgZmFpbCBvbiBXaW5kb3dzLCBidXQgcGFzcyBvbiBVbml4CisgICAgICAgICMgSXNzdWUzOTY1OiBhdm9pZCBhIGNyYXNoIG9uIFdpbmRvd3Mgd2hlbiBmaWxlbmFtZSBpcyB1bmljb2RlCisgICAgICAgIGZvciBuYW1lIGluIChURVNURk4sIHVuaWNvZGUoVEVTVEZOKSwgdW5pY29kZShURVNURk4gKyAnXHQnKSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgInJyIikKKyAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0U3RkaW4oc2VsZik6CisgICAgICAgICMgVGhpcyBjYXVzZXMgdGhlIGludGVycHJldGVyIHRvIGV4aXQgb24gT1NGMSB2NS4xLgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ29zZjFWNSc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzeXMuc3RkaW4uc2VlaywgLTEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCA+PnN5cy5fX3N0ZG91dF9fLCAoCisgICAgICAgICAgICAgICAgJyAgU2tpcHBpbmcgc3lzLnN0ZGluLnNlZWsoLTEpLCBpdCBtYXkgY3Jhc2ggdGhlIGludGVycHJldGVyLicKKyAgICAgICAgICAgICAgICAnIFRlc3QgbWFudWFsbHkuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc3lzLnN0ZGluLnRydW5jYXRlKQorCisgICAgZGVmIHRlc3RVbmljb2RlT3BlbihzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgcmVwciB3b3JrcyBmb3IgdW5pY29kZSB0b28KKyAgICAgICAgZiA9IG9wZW4odW5pY29kZShURVNURk4pLCAidyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGYpLnN0YXJ0c3dpdGgoIjxvcGVuIGZpbGUgdSciICsgVEVTVEZOKSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdEJhZE1vZGVBcmd1bWVudChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCB3ZSBnZXQgYSBzZW5zaWJsZSBlcnJvciBtZXNzYWdlIGZvciBiYWQgbW9kZSBhcmd1bWVudAorICAgICAgICBiYWRfbW9kZSA9ICJxd2VydHkiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgYmFkX21vZGUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBtc2c6CisgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSAhPSAwOgorICAgICAgICAgICAgICAgIHMgPSBzdHIobXNnKQorICAgICAgICAgICAgICAgIGlmIFRFU1RGTiBpbiBzIG9yIGJhZF9tb2RlIG5vdCBpbiBzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImJhZCBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkIG1vZGU6ICVzIiAlIHMpCisgICAgICAgICAgICAjIGlmIG1zZy5hcmdzWzBdID09IDAsIHdlJ3JlIHByb2JhYmx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhlcmUgbWF5CisgICAgICAgICAgICAjIGJlIG5vIG9idmlvdXMgd2F5IHRvIGRpc2NvdmVyIHdoeSBvcGVuKCkgZmFpbGVkLgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGVycm9yIGZvciBpbnZhbGlkIG1vZGU6ICVzIiAlIGJhZF9tb2RlKQorCisgICAgZGVmIHRlc3RTZXRCdWZmZXJTaXplKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgYnVmZmVyIHNpemUgZG9lc24ndCBjYXVzZQorICAgICAgICAjIG1pc2JlaGF2aW91ciBlc3BlY2lhbGx5IHdpdGggcmVwZWF0ZWQgY2xvc2UoKSBjYWxscworICAgICAgICBmb3IgcyBpbiAoLTEsIDAsIDEsIDUxMik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycsIHMpCisgICAgICAgICAgICAgICAgZi53cml0ZShzdHIocykpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAncicsIHMpCisgICAgICAgICAgICAgICAgZCA9IGludChmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvciBzZXR0aW5nIGJ1ZmZlciBzaXplICVkOiAlcycgJSAocywgc3RyKG1zZykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzKQorCisgICAgZGVmIHRlc3RUcnVuY2F0ZU9uV2luZG93cyhzZWxmKToKKyAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworICAgICAgICBkZWYgYnVnODAxNjMxKCk6CisgICAgICAgICAgICAjIFNGIGJ1ZyA8aHR0cDovL3d3dy5weXRob24ub3JnL3NmLzgwMTYzMT4KKyAgICAgICAgICAgICMgImZpbGUudHJ1bmNhdGUgZmF1bHQgb24gd2luZG93cyIKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgICAgIGYud3JpdGUoJzEyMzQ1Njc4OTAxJykgICAjIDExIGJ5dGVzCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCdyYisnKQorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCg1KQorICAgICAgICAgICAgaWYgZGF0YSAhPSAnMTIzNDUnOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVhZCBvbiBmaWxlIG9wZW5lZCBmb3IgdXBkYXRlIGZhaWxlZCAlciIgJSBkYXRhKQorICAgICAgICAgICAgaWYgZi50ZWxsKCkgIT0gNToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgcG9zIGFmdGVyIHJlYWQgd3JvbmcgJWQiICUgZi50ZWxsKCkpCisKKyAgICAgICAgICAgIGYudHJ1bmNhdGUoKQorICAgICAgICAgICAgaWYgZi50ZWxsKCkgIT0gNToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgcG9zIGFmdGVyIGZ0cnVuY2F0ZSB3cm9uZyAlZCIgJSBmLnRlbGwoKSkKKworICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzaXplID0gb3MucGF0aC5nZXRzaXplKFRFU1RGTikKKyAgICAgICAgICAgIGlmIHNpemUgIT0gNToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgc2l6ZSBhZnRlciBmdHJ1bmNhdGUgd3JvbmcgJWQiICUgc2l6ZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBidWc4MDE2MzEoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0SXRlcmF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGNvbXBsZXggaW50ZXJhY3Rpb24gd2hlbiBtaXhpbmcgZmlsZS1pdGVyYXRpb24gYW5kIHRoZQorICAgICAgICAjIHZhcmlvdXMgcmVhZCogbWV0aG9kcy4gT3N0ZW5zaWJseSwgdGhlIG1peHR1cmUgY291bGQganVzdCBiZSB0ZXN0ZWQKKyAgICAgICAgIyB0byB3b3JrIHdoZW4gaXQgc2hvdWxkIHdvcmsgYWNjb3JkaW5nIHRvIHRoZSBQeXRob24gbGFuZ3VhZ2UsCisgICAgICAgICMgaW5zdGVhZCBvZiBmYWlsIHdoZW4gaXQgc2hvdWxkIGZhaWwgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IENQeXRob24KKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbi4gIFBlb3BsZSBkb24ndCBhbHdheXMgcHJvZ3JhbSBQeXRob24gdGhlIHdheSB0aGV5CisgICAgICAgICMgc2hvdWxkLCB0aG91Z2gsIGFuZCB0aGUgaW1wbGVtZW5hdGlvbiBtaWdodCBjaGFuZ2UgaW4gc3VidGxlIHdheXMsCisgICAgICAgICMgc28gd2UgZXhwbGljaXRseSB0ZXN0IGZvciBlcnJvcnMsIHRvbzsgdGhlIHRlc3Qgd2lsbCBqdXN0IGhhdmUgdG8KKyAgICAgICAgIyBiZSB1cGRhdGVkIHdoZW4gdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZXMuCisgICAgICAgIGRhdGFvZmZzZXQgPSAxNjM4NAorICAgICAgICBmaWxsZXIgPSAiaGFtXG4iCisgICAgICAgIGFzc2VydCBub3QgZGF0YW9mZnNldCAlIGxlbihmaWxsZXIpLCBcCisgICAgICAgICAgICAiZGF0YW9mZnNldCBtdXN0IGJlIG11bHRpcGxlIG9mIGxlbihmaWxsZXIpIgorICAgICAgICBuY2h1bmtzID0gZGF0YW9mZnNldCAvLyBsZW4oZmlsbGVyKQorICAgICAgICB0ZXN0bGluZXMgPSBbCisgICAgICAgICAgICAic3BhbSwgc3BhbSBhbmQgZWdnc1xuIiwKKyAgICAgICAgICAgICJlZ2dzLCBzcGFtLCBoYW0gYW5kIHNwYW1cbiIsCisgICAgICAgICAgICAic2F1c3NhZ2VzLCBzcGFtLCBzcGFtIGFuZCBlZ2dzXG4iLAorICAgICAgICAgICAgInNwYW0sIGhhbSwgc3BhbSBhbmQgZWdnc1xuIiwKKyAgICAgICAgICAgICJzcGFtLCBzcGFtLCBzcGFtLCBzcGFtLCBzcGFtLCBoYW0sIHNwYW1cbiIsCisgICAgICAgICAgICAid29uZGVyZnVsIHNwYWFhYWFhbS5cbiIKKyAgICAgICAgXQorICAgICAgICBtZXRob2RzID0gWygicmVhZGxpbmUiLCAoKSksICgicmVhZCIsICgpKSwgKCJyZWFkbGluZXMiLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCJyZWFkaW50byIsIChhcnJheSgiYyIsICIgIioxMDApLCkpXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgUHJlcGFyZSB0aGUgdGVzdGZpbGUKKyAgICAgICAgICAgIGJhZyA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgICAgICBiYWcud3JpdGUoZmlsbGVyICogbmNodW5rcykKKyAgICAgICAgICAgIGJhZy53cml0ZWxpbmVzKHRlc3RsaW5lcykKKyAgICAgICAgICAgIGJhZy5jbG9zZSgpCisgICAgICAgICAgICAjIFRlc3QgZm9yIGFwcHJvcHJpYXRlIGVycm9ycyBtaXhpbmcgcmVhZCogYW5kIGl0ZXJhdGlvbgorICAgICAgICAgICAgZm9yIG1ldGhvZG5hbWUsIGFyZ3MgaW4gbWV0aG9kczoKKyAgICAgICAgICAgICAgICBmID0gb3BlbihURVNURk4pCisgICAgICAgICAgICAgICAgaWYgZi5uZXh0KCkgIT0gZmlsbGVyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwsICJCcm9rZW4gdGVzdGZpbGUiCisgICAgICAgICAgICAgICAgbWV0aCA9IGdldGF0dHIoZiwgbWV0aG9kbmFtZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1ldGgoKmFyZ3MpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzJXIgYWZ0ZXIgbmV4dCgpIGRpZG4ndCByYWlzZSBWYWx1ZUVycm9yIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZG5hbWUsIGFyZ3MpKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICAjIFRlc3QgdG8gc2VlIGlmIGhhcm1sZXNzIChieSBhY2NpZGVudCkgbWl4aW5nIG9mIHJlYWQqIGFuZAorICAgICAgICAgICAgIyBpdGVyYXRpb24gc3RpbGwgd29ya3MuIFRoaXMgZGVwZW5kcyBvbiB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwKKyAgICAgICAgICAgICMgaXRlcmF0aW9uIGJ1ZmZlciAoY3VycmVudGx5IDgxOTIsKSBidXQgd2UgY2FuIHRlc3QgaXQgaW4gYQorICAgICAgICAgICAgIyBmbGV4aWJsZSBtYW5uZXIuICBFYWNoIGxpbmUgaW4gdGhlIGJhZyBvJyBoYW0gaXMgNCBieXRlcworICAgICAgICAgICAgIyAoImgiLCAiYSIsICJtIiwgIlxuIiksIHNvIDQwOTYgbGluZXMgb2YgdGhhdCBzaG91bGQgZ2V0IHVzCisgICAgICAgICAgICAjIGV4YWN0bHkgb24gdGhlIGJ1ZmZlciBib3VuZGFyeSBmb3IgYW55IHBvd2VyLW9mLTIgYnVmZmVyc2l6ZQorICAgICAgICAgICAgIyBiZXR3ZWVuIDQgYW5kIDE2Mzg0IChpbmNsdXNpdmUpLgorICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobmNodW5rcyk6CisgICAgICAgICAgICAgICAgZi5uZXh0KCkKKyAgICAgICAgICAgIHRlc3RsaW5lID0gdGVzdGxpbmVzLnBvcCgwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGxpbmUoKSBhZnRlciBuZXh0KCkgd2l0aCBzdXBwb3NlZGx5IGVtcHR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbi1idWZmZXIgZmFpbGVkIGFueXdheSIpCisgICAgICAgICAgICBpZiBsaW5lICE9IHRlc3RsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGxpbmUoKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisgICAgICAgICAgICB0ZXN0bGluZSA9IHRlc3RsaW5lcy5wb3AoMCkKKyAgICAgICAgICAgIGJ1ZiA9IGFycmF5KCJjIiwgIlx4MDAiICogbGVuKHRlc3RsaW5lKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLnJlYWRpbnRvKGJ1ZikKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGludG8oKSBhZnRlciBuZXh0KCkgd2l0aCBzdXBwb3NlZGx5IGVtcHR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbi1idWZmZXIgZmFpbGVkIGFueXdheSIpCisgICAgICAgICAgICBsaW5lID0gYnVmLnRvc3RyaW5nKCkKKyAgICAgICAgICAgIGlmIGxpbmUgIT0gdGVzdGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkaW50bygpIGFmdGVyIG5leHQoKSB3aXRoIGVtcHR5IGJ1ZmZlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQuIEdvdCAlciwgZXhwZWN0ZWQgJXIiICUgKGxpbmUsIHRlc3RsaW5lKSkKKworICAgICAgICAgICAgdGVzdGxpbmUgPSB0ZXN0bGluZXMucG9wKDApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZChsZW4odGVzdGxpbmUpKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkKCkgYWZ0ZXIgbmV4dCgpIHdpdGggc3VwcG9zZWRseSBlbXB0eSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24tYnVmZmVyIGZhaWxlZCBhbnl3YXkiKQorICAgICAgICAgICAgaWYgbGluZSAhPSB0ZXN0bGluZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWQoKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lcygpIGFmdGVyIG5leHQoKSB3aXRoIHN1cHBvc2VkbHkgZW1wdHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uLWJ1ZmZlciBmYWlsZWQgYW55d2F5IikKKyAgICAgICAgICAgIGlmIGxpbmVzICE9IHRlc3RsaW5lczoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lcygpIGFmdGVyIG5leHQoKSB3aXRoIGVtcHR5IGJ1ZmZlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQuIEdvdCAlciwgZXhwZWN0ZWQgJXIiICUgKGxpbmUsIHRlc3RsaW5lKSkKKyAgICAgICAgICAgICMgUmVhZGluZyBhZnRlciBpdGVyYXRpb24gaGl0IEVPRiBzaG91bGRuJ3QgaHVydCBlaXRoZXIKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgZi5yZWFkaW50byhidWYpCisgICAgICAgICAgICAgICAgICAgIGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkKiBmYWlsZWQgYWZ0ZXIgbmV4dCgpIGNvbnN1bWVkIGZpbGUiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKK2NsYXNzIEZpbGVTdWJjbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0RXhpdChzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoYXQgZXhpdGluZyB3aXRoIGNvbnRleHQgY2FsbHMgc3ViY2xhc3MnIGNsb3NlCisgICAgICAgIGNsYXNzIEMoZmlsZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuc3ViY2xhc3NfY2xvc2VkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmaWxlLl9faW5pdF9fKHNlbGYsICphcmdzKQorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc3ViY2xhc3NfY2xvc2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZpbGUuY2xvc2Uoc2VsZikKKworICAgICAgICB3aXRoIEMoVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLnN1YmNsYXNzX2Nsb3NlZCkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgRmlsZVRocmVhZGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZXNlIHRlc3RzIGNoZWNrIHRoZSBhYmlsaXR5IHRvIGNhbGwgdmFyaW91cyBtZXRob2RzIG9mIGZpbGUgb2JqZWN0cworICAgICMgKGluY2x1ZGluZyBjbG9zZSgpKSBjb25jdXJyZW50bHkgd2l0aG91dCBjcmFzaGluZyB0aGUgUHl0aG9uIGludGVycHJldGVyLgorICAgICMgU2VlICM4MTU2NDYsICM1OTU2MDEKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorICAgICAgICBzZWxmLmYgPSBOb25lCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBURVNURk4KKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIlxuIi5qb2luKCIwMTIzNDU2Nzg5IikpCisgICAgICAgIHNlbGYuX2NvdW50X2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuY2xvc2VfY291bnQgPSAwCisgICAgICAgIHNlbGYuY2xvc2Vfc3VjY2Vzc19jb3VudCA9IDAKKyAgICAgICAgc2VsZi51c2VfYnVmZmVyaW5nID0gRmFsc2UKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgKEVudmlyb25tZW50RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisKKyAgICBkZWYgX2NyZWF0ZV9maWxlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnVzZV9idWZmZXJpbmc6CisgICAgICAgICAgICBzZWxmLmYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3KyIsIGJ1ZmZlcmluZz0xMDI0KjE2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mID0gb3BlbihzZWxmLmZpbGVuYW1lLCAidysiKQorCisgICAgZGVmIF9jbG9zZV9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuX2NvdW50X2xvY2s6CisgICAgICAgICAgICBzZWxmLmNsb3NlX2NvdW50ICs9IDEKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLl9jb3VudF9sb2NrOgorICAgICAgICAgICAgc2VsZi5jbG9zZV9zdWNjZXNzX2NvdW50ICs9IDEKKworICAgIGRlZiBfY2xvc2VfYW5kX3Jlb3Blbl9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9jbG9zZV9maWxlKCkKKyAgICAgICAgIyBpZiBjbG9zZSByYWlzZXMgYW4gZXhjZXB0aW9uIHRoYXRzIGZpbmUsIHNlbGYuZiByZW1haW5zIHZhbGlkIHNvCisgICAgICAgICMgd2UgZG9uJ3QgbmVlZCB0byByZW9wZW4uCisgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKCkKKworICAgIGRlZiBfcnVuX3dvcmtlcnMoc2VsZiwgZnVuYywgbmJfd29ya2VycywgZHVyYXRpb249MC4yKToKKyAgICAgICAgd2l0aCBzZWxmLl9jb3VudF9sb2NrOgorICAgICAgICAgICAgc2VsZi5jbG9zZV9jb3VudCA9IDAKKyAgICAgICAgICAgIHNlbGYuY2xvc2Vfc3VjY2Vzc19jb3VudCA9IDAKKyAgICAgICAgc2VsZi5kb19jb250aW51ZSA9IFRydWUKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5iX3dvcmtlcnMpOgorICAgICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mdW5jKQorICAgICAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCisgICAgICAgICAgICBmb3IgXyBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKGR1cmF0aW9uLzEwMCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuX2NvdW50X2xvY2s6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VfY291bnQtc2VsZi5jbG9zZV9zdWNjZXNzX2NvdW50ID4gbmJfd29ya2VycysxOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ1EnLAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoZHVyYXRpb24pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmRvX2NvbnRpbnVlID0gRmFsc2UKKyAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgdC5qb2luKCkKKworICAgIGRlZiBfdGVzdF9jbG9zZV9vcGVuX2lvKHNlbGYsIGlvX2Z1bmMsIG5iX3dvcmtlcnM9NSk6CisgICAgICAgIGRlZiB3b3JrZXIoKToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKCkKKyAgICAgICAgICAgIGZ1bmNzID0gaXRlcnRvb2xzLmN5Y2xlKCgKKyAgICAgICAgICAgICAgICBsYW1iZGE6IGlvX2Z1bmMoKSwKKyAgICAgICAgICAgICAgICBsYW1iZGE6IHNlbGYuX2Nsb3NlX2FuZF9yZW9wZW5fZmlsZSgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgICAgIGZvciBmIGluIGZ1bmNzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRvX2NvbnRpbnVlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl9ydW5fd29ya2Vycyh3b3JrZXIsIG5iX3dvcmtlcnMpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgIyBVc2VmdWwgdmVyYm9zZSBzdGF0aXN0aWNzIHdoZW4gdHVuaW5nIHRoaXMgdGVzdCB0byB0YWtlCisgICAgICAgICAgICAjIGxlc3MgdGltZSB0byBydW4gYnV0IHN0aWxsIGVuc3VyaW5nIHRoYXQgaXRzIHN0aWxsIHVzZWZ1bC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgdGhlIHBlcmNlbnQgb2YgY2xvc2UgY2FsbHMgdGhhdCByYWlzZWQgYW4gZXJyb3IKKyAgICAgICAgICAgIHBlcmNlbnQgPSAxMDAuIC0gMTAwLipzZWxmLmNsb3NlX3N1Y2Nlc3NfY291bnQvc2VsZi5jbG9zZV9jb3VudAorICAgICAgICAgICAgcHJpbnQgc2VsZi5jbG9zZV9jb3VudCwgKCclLjRmICcgJSBwZXJjZW50KSwKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW4oc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9mbHVzaChzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi5mbHVzaCgpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9pdGVyKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgbGlzdChpdGVyKHNlbGYuZikpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9pc2F0dHkoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYuaXNhdHR5KCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3ByaW50KHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgcHJpbnQgPj4gc2VsZi5mLCAnJworICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcHJpbnRfYnVmZmVyZWQoc2VsZik6CisgICAgICAgIHNlbGYudXNlX2J1ZmZlcmluZyA9IFRydWUKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHByaW50ID4+IHNlbGYuZiwgJycKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3JlYWQoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYucmVhZCgwKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcmVhZGludG8oc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBhID0gYXJyYXkoJ2MnLCAneHh4eHgnKQorICAgICAgICAgICAgc2VsZi5mLnJlYWRpbnRvKGEpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9yZWFkbGluZShzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3NlZWsoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYuc2VlaygwLCAwKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fdGVsbChzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi50ZWxsKCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3RydW5jYXRlKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLnRydW5jYXRlKCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3dyaXRlKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLndyaXRlKCcnKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fd3JpdGVsaW5lcyhzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi53cml0ZWxpbmVzKCcnKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworCitjbGFzcyBTdGRvdXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9tb3ZlX3N0ZG91dF9vbl93cml0ZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAzMjQyOiBzeXMuc3Rkb3V0IGNhbiBiZSByZXBsYWNlZCAoYW5kIGZyZWVkKSBkdXJpbmcgYQorICAgICAgICAjIHByaW50IHN0YXRlbWVudDsgcHJldmVudCBhIHNlZ2ZhdWx0IGluIHRoaXMgY2FzZQorICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKKworICAgICAgICBjbGFzcyBGaWxlOgorICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgICAgIGlmICdcbicgaW4gZGF0YToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IEZpbGUoKQorICAgICAgICAgICAgcHJpbnQgInNvbWUgdGV4dCIKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAorCisgICAgZGVmIHRlc3RfZGVsX3N0ZG91dF9iZWZvcmVfcHJpbnQoc2VsZik6CisgICAgICAgICMgSXNzdWUgNDU5NzogJ3ByaW50JyB3aXRoIG5vIGFyZ3VtZW50IHdhc24ndCByZXBvcnRpbmcgd2hlbgorICAgICAgICAjIHN5cy5zdGRvdXQgd2FzIGRlbGV0ZWQuCisgICAgICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBkZWwgc3lzLnN0ZG91dAorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludAorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgImxvc3Qgc3lzLnN0ZG91dCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFJ1bnRpbWVFcnJvciIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICAgICAgZGVmIGdldF9tZXNzYWdlKGVuY29kaW5nLCAqY29kZSk6CisgICAgICAgICAgICBjb2RlID0gJ1xuJy5qb2luKGNvZGUpCisgICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICAgICAgZW52WydQWVRIT05JT0VOQ09ESU5HJ10gPSBlbmNvZGluZworICAgICAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBjb2RlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGVudj1lbnYpCisgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jZXNzLnJldHVybmNvZGUsIDApCisgICAgICAgICAgICByZXR1cm4gc3Rkb3V0CisKKyAgICAgICAgZGVmIGNoZWNrX21lc3NhZ2UodGV4dCwgZW5jb2RpbmcsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHN0ZG91dCA9IGdldF9tZXNzYWdlKGVuY29kaW5nLAorICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzIiwKKyAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC53cml0ZSglcikiICUgdGV4dCwKKyAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC5mbHVzaCgpIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBleHBlY3RlZCkKKworICAgICAgICAjIHRlc3QgdGhlIGVuY29kaW5nCisgICAgICAgIGNoZWNrX21lc3NhZ2UodScxNVx1MjBhYycsICJpc28tODg1OS0xNSIsICIxNVx4YTQiKQorICAgICAgICBjaGVja19tZXNzYWdlKHUnMTVcdTIwYWMnLCAidXRmLTgiLCAnMTVceGUyXHg4Mlx4YWMnKQorICAgICAgICBjaGVja19tZXNzYWdlKHUnMTVcdTIwYWMnLCAidXRmLTE2LWxlIiwgJzFceDAwNVx4MDBceGFjXHgyMCcpCisKKyAgICAgICAgIyB0ZXN0IHRoZSBlcnJvciBoYW5kbGVyCisgICAgICAgIGNoZWNrX21lc3NhZ2UodScxNVx1MjBhYycsICJpc28tODg1OS0xOmlnbm9yZSIsICIxNSIpCisgICAgICAgIGNoZWNrX21lc3NhZ2UodScxNVx1MjBhYycsICJpc28tODg1OS0xOnJlcGxhY2UiLCAiMTU/IikKKyAgICAgICAgY2hlY2tfbWVzc2FnZSh1JzE1XHUyMGFjJywgImlzby04ODU5LTE6YmFja3NsYXNocmVwbGFjZSIsICIxNVxcdTIwYWMiKQorCisgICAgICAgICMgdGVzdCB0aGUgYnVmZmVyIEFQSQorICAgICAgICBmb3Igb2JqdHlwZSBpbiAoJ2J1ZmZlcicsICdieXRlYXJyYXknKToKKyAgICAgICAgICAgIHN0ZG91dCA9IGdldF9tZXNzYWdlKCdhc2NpaScsCisgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMnLAorICAgICAgICAgICAgICAgIHInc3lzLnN0ZG91dC53cml0ZSglcygiXHhlOSIpKScgJSBvYmp0eXBlLAorICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCknKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICJceGU5IikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgIyBIaXN0b3JpY2FsbHksIHRoZXNlIHRlc3RzIGhhdmUgYmVlbiBzbG9wcHkgYWJvdXQgcmVtb3ZpbmcgVEVTVEZOLgorICAgICMgU28gZ2V0IHJpZCBvZiBpdCBubyBtYXR0ZXIgd2hhdC4KKyAgICB0cnk6CisgICAgICAgIHJ1bl91bml0dGVzdChBdXRvRmlsZVRlc3RzLCBPdGhlckZpbGVUZXN0cywgRmlsZVN1YmNsYXNzVGVzdHMsCisgICAgICAgICAgICBGaWxlVGhyZWFkaW5nVGVzdHMsIFN0ZG91dFRlc3RzKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFU1RGTik6CisgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKaW5kZXggNTAzNTYyYi4uNDczOWVkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQpAQCAtMSw1ICsxLDUgQEAKIAotaW1wb3J0IG9zLCBmaWxlY21wLCBzaHV0aWwsIHRlbXBmaWxlLCBzaHV0aWwKK2ltcG9ydCBvcywgZmlsZWNtcCwgc2h1dGlsLCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCkBAIC0yNSwxOSArMjUsMTkgQEAKICAgICAgICAgb3MudW5saW5rKHNlbGYubmFtZV9kaWZmKQogCiAgICAgZGVmIHRlc3RfbWF0Y2hpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGl0c2VsZiBmYWlscyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lLCBzaGFsbG93PUZhbHNlKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUsIHNoYWxsb3c9RmFsc2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGl0c2VsZiBmYWlscyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZSwgc2hhbGxvdz1GYWxzZSksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZSwgc2hhbGxvdz1GYWxzZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGZpbGUgdG8gaWRlbnRpY2FsIGZpbGUgZmFpbHMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWUpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGlkZW50aWNhbCBmaWxlIGZhaWxzIikKIAogICAgIGRlZiB0ZXN0X2RpZmZlcmVudChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsSWYoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfZGlmZiksCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfZGlmZiksCiAgICAgICAgICAgICAgICAgICAgICJNaXNtYXRjaGVkIGZpbGVzIGNvbXBhcmUgYXMgZXF1YWwiKQotICAgICAgICBzZWxmLmZhaWxJZihmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYuZGlyKSwKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYuZGlyKSwKICAgICAgICAgICAgICAgICAgICAgIkZpbGUgYW5kIGRpcmVjdG9yeSBjb21wYXJlIGFzIGVxdWFsIikKIAogY2xhc3MgRGlyQ29tcGFyZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTY5LDE5ICs2OSwxOSBAQAogICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyX2RpZmYpCiAKICAgICBkZWYgdGVzdF9jbXBmaWxlcyhzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyLCBbJ2ZpbGUnXSkgPT0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyLCBbJ2ZpbGUnXSkgPT0KICAgICAgICAgICAgICAgICAgICAgICAgIChbJ2ZpbGUnXSwgW10sIFtdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZGlyZWN0b3J5IHRvIGl0c2VsZiBmYWlscyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLCBbJ2ZpbGUnXSkgPT0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIFsnZmlsZSddKSA9PQogICAgICAgICAgICAgICAgICAgICAgICAgKFsnZmlsZSddLCBbXSwgW10pLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBkaXJlY3RvcnkgdG8gc2FtZSBmYWlscyIpCiAKICAgICAgICAgIyBUcnkgaXQgd2l0aCBzaGFsbG93PUZhbHNlCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpciwgWydmaWxlJ10sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpciwgWydmaWxlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWxsb3c9RmFsc2UpID09CiAgICAgICAgICAgICAgICAgICAgICAgICAoWydmaWxlJ10sIFtdLCBbXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGRpcmVjdG9yeSB0byBpdHNlbGYgZmFpbHMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgWydmaWxlJ10sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLCBbJ2ZpbGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhbGxvdz1GYWxzZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGRpcmVjdG9yeSB0byBzYW1lIGZhaWxzIikKIApAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICBvdXRwdXQud3JpdGUoJ0RpZmZlcmVudCBjb250ZW50cy5cbicpCiAgICAgICAgIG91dHB1dC5jbG9zZSgpCiAKLSAgICAgICAgc2VsZi5mYWlsSWYoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnZmlsZScsICdmaWxlMiddKSA9PQogICAgICAgICAgICAgICAgICAgICAoWydmaWxlJ10sIFsnZmlsZTInXSwgW10pLAogICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIG1pc21hdGNoZWQgZGlyZWN0b3JpZXMgZmFpbHMiKQpAQCAtMTAzLDI4ICsxMDMsMjggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2QubGVmdF9saXN0LCBkLnJpZ2h0X2xpc3RdLFtbJ2ZpbGUnXSwgWydGaUxlJ11dKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbZC5sZWZ0X2xpc3QsIGQucmlnaHRfbGlzdF0sW1snZmlsZSddLCBbJ2ZpbGUnXV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLmNvbW1vbiA9PSBbJ2ZpbGUnXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQubGVmdF9vbmx5ID09IGQucmlnaHRfb25seSA9PSBbXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQuc2FtZV9maWxlcyA9PSBbJ2ZpbGUnXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQuZGlmZl9maWxlcyA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuY29tbW9uID09IFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5sZWZ0X29ubHkgPT0gZC5yaWdodF9vbmx5ID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5zYW1lX2ZpbGVzID09IFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5kaWZmX2ZpbGVzID09IFtdKQogCiAgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyBmb3IgY29tcGFyaXNvbiBvZiB0d28gZGlmZmVyZW50IGRpcmVjdG9yaWVzCiAgICAgICAgIGQgPSBmaWxlY21wLmRpcmNtcChzZWxmLmRpciwgc2VsZi5kaXJfZGlmZikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQubGVmdF9saXN0ID09IFsnZmlsZSddKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZC5yaWdodF9saXN0ID09IFsnZmlsZScsICdmaWxlMiddKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZC5jb21tb24gPT0gWydmaWxlJ10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLmxlZnRfb25seSA9PSBbXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQucmlnaHRfb25seSA9PSBbJ2ZpbGUyJ10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLnNhbWVfZmlsZXMgPT0gWydmaWxlJ10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLmRpZmZfZmlsZXMgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmxlZnRfbGlzdCA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQucmlnaHRfbGlzdCA9PSBbJ2ZpbGUnLCAnZmlsZTInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuY29tbW9uID09IFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5sZWZ0X29ubHkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnJpZ2h0X29ubHkgPT0gWydmaWxlMiddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5zYW1lX2ZpbGVzID09IFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5kaWZmX2ZpbGVzID09IFtdKQogCiAgICAgICAgICMgQWRkIGRpZmZlcmVudCBmaWxlMgogICAgICAgICBvdXRwdXQgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpciwgJ2ZpbGUyJyksICd3JykKICAgICAgICAgb3V0cHV0LndyaXRlKCdEaWZmZXJlbnQgY29udGVudHMuXG4nKQogICAgICAgICBvdXRwdXQuY2xvc2UoKQogICAgICAgICBkID0gZmlsZWNtcC5kaXJjbXAoc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLnNhbWVfZmlsZXMgPT0gWydmaWxlJ10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLmRpZmZfZmlsZXMgPT0gWydmaWxlMiddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5zYW1lX2ZpbGVzID09IFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5kaWZmX2ZpbGVzID09IFsnZmlsZTInXSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CmluZGV4IDlmYjNlYTcuLjg0YWVkMWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CkBAIC02NSw4ICs2NSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5hbWUoKSwgdDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkubGluZW5vKCksIDIxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVsaW5lbm8oKSwgNikKLSAgICAgICAgc2VsZi5mYWlsSWYoZmkuaXNmaXJzdGxpbmUoKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoZmkuaXNzdGRpbigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpLmlzZmlyc3RsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmkuaXNzdGRpbigpKQogCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnJXMuIE5leHRmaWxlIChicz0lcyknICUgKHN0YXJ0KzIsIGJzKQpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVuYW1lKCksIHQzKQogCiAgICAgICAgICAgICBsaW5lID0gZmkucmVhZGxpbmUoKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYobGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGluZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkubGluZW5vKCksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVsaW5lbm8oKSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5hbWUoKSwgdDQpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CmluZGV4IDdlZWVmN2IuLjk2ODhmZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CkBAIC0xLDIzICsxLDI2IEBACiAjIEFkYXB0ZWQgZnJvbSB0ZXN0X2ZpbGUucHkgYnkgRGFuaWVsIFN0dXR6YmFjaAotI2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKIAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KIGltcG9ydCB1bml0dGVzdAogZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKIGZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBmaW5kZmlsZSwgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2JhZF9mZCkKLWZyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsIG1ha2VfYmFkX2ZkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBweTNrX2J5dGVzIGFzIGJ5dGVzCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgcnVuX3B5dGhvbgogCi1pbXBvcnQgX2ZpbGVpbworZnJvbSBfaW8gaW1wb3J0IEZpbGVJTyBhcyBfRmlsZUlPCiAKIGNsYXNzIEF1dG9GaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgZmlsZSB0ZXN0cyBmb3Igd2hpY2ggYSB0ZXN0IGZpbGUgaXMgYXV0b21hdGljYWxseSBzZXQgdXAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5mID0gX2ZpbGVpby5fRmlsZUlPKFRFU1RGTiwgJ3cnKQorICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3cnKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmY6CkBAIC0yOCwzMSArMzEsMzEgQEAKICAgICAgICAgIyB2ZXJpZnkgd2VhayByZWZlcmVuY2VzCiAgICAgICAgIHAgPSBwcm94eShzZWxmLmYpCiAgICAgICAgIHAud3JpdGUoYnl0ZXMocmFuZ2UoMTApKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5mLnRlbGwoKSwgcC50ZWxsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgcC50ZWxsKCkpCiAgICAgICAgIHNlbGYuZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuZiA9IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVmZXJlbmNlRXJyb3IsIGdldGF0dHIsIHAsICd0ZWxsJykKIAogICAgIGRlZiB0ZXN0U2Vla1RlbGwoc2VsZik6Ci0gICAgICAgIHNlbGYuZi53cml0ZShieXRlcyhieXRlYXJyYXkocmFuZ2UoMjApKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZi50ZWxsKCksIDIwKQorICAgICAgICBzZWxmLmYud3JpdGUoYnl0ZXMocmFuZ2UoMjApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCAyMCkKICAgICAgICAgc2VsZi5mLnNlZWsoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5mLnRlbGwoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCAwKQogICAgICAgICBzZWxmLmYuc2VlaygxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5mLnRlbGwoKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgMTApCiAgICAgICAgIHNlbGYuZi5zZWVrKDUsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZi50ZWxsKCksIDE1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi50ZWxsKCksIDE1KQogICAgICAgICBzZWxmLmYuc2VlaygtNSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5mLnRlbGwoKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgMTApCiAgICAgICAgIHNlbGYuZi5zZWVrKC01LCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmYudGVsbCgpLCAxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCAxNSkKIAogICAgIGRlZiB0ZXN0QXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyB2ZXJpZnkgZXhwZWN0ZWQgYXR0cmlidXRlcyBleGlzdAogICAgICAgICBmID0gc2VsZi5mCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5tb2RlLCAid2IiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLmNsb3NlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5tb2RlLCAid2IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2xvc2VkLCBGYWxzZSkKIAogICAgICAgICAjIHZlcmlmeSB0aGUgYXR0cmlidXRlcyBhcmUgcmVhZG9ubHkKICAgICAgICAgZm9yIGF0dHIgaW4gJ21vZGUnLCAnY2xvc2VkJzoKQEAgLTYxLDMxICs2NCw0NCBAQAogCiAgICAgZGVmIHRlc3RSZWFkaW50byhzZWxmKToKICAgICAgICAgIyB2ZXJpZnkgcmVhZGludG8KLSAgICAgICAgc2VsZi5mLndyaXRlKGJ5dGVzKGJ5dGVhcnJheShbMSwgMl0pKSkKKyAgICAgICAgc2VsZi5mLndyaXRlKGIiXHgwMVx4MDIiKQogICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICBhID0gYXJyYXkoJ2InLCBiJ3gnKjEwKQotICAgICAgICBzZWxmLmYgPSBfZmlsZWlvLl9GaWxlSU8oVEVTVEZOLCAncicpCisgICAgICAgIGEgPSBhcnJheShiJ2InLCBiJ3gnKjEwKQorICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3InKQogICAgICAgICBuID0gc2VsZi5mLnJlYWRpbnRvKGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFycmF5KCdiJywgWzEsIDJdKSwgYVs6bl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJyYXkoYidiJywgWzEsIDJdKSwgYVs6bl0pCisKKyAgICBkZWYgdGVzdF9ub25lX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuZi53cml0ZShiImhpXG5ieWVcbmFiYyIpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHNlbGYuZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnJlYWQoTm9uZSksIGIiaGlcbmJ5ZVxuYWJjIikKKyAgICAgICAgc2VsZi5mLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYucmVhZGxpbmUoTm9uZSksIGIiaGlcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnJlYWRsaW5lcyhOb25lKSwgW2IiYnllXG4iLCBiImFiYyJdKQogCiAgICAgZGVmIHRlc3RSZXByKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXByKHNlbGYuZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJfZmlsZWlvLl9GaWxlSU8oJWQsICVzKSIgJSAoc2VsZi5mLmZpbGVubygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoc2VsZi5mLm1vZGUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYuZiksICI8X2lvLkZpbGVJTyBuYW1lPSVyIG1vZGU9JyVzJz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmYubmFtZSwgc2VsZi5mLm1vZGUpKQorICAgICAgICBkZWwgc2VsZi5mLm5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYuZiksICI8X2lvLkZpbGVJTyBmZD0lciBtb2RlPSclcyc+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5mLmZpbGVubygpLCBzZWxmLmYubW9kZSkpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLmYpLCAiPF9pby5GaWxlSU8gW2Nsb3NlZF0+IikKIAogICAgIGRlZiB0ZXN0RXJyb3JzKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5mCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZi5pc2F0dHkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBmLmNsb3NlZCkKLSAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWxzKGYubmFtZSwgVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuaXNhdHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWQsIDEwKSAjIE9wZW4gZm9yIHJlYWRpbmcKICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhmLmNsb3NlZCkKLSAgICAgICAgZiA9IF9maWxlaW8uX0ZpbGVJTyhURVNURk4sICdyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQorICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sICdyJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRpbnRvLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmNsb3NlZCkKICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQogCiAgICAgZGVmIHRlc3RNZXRob2RzKHNlbGYpOgogICAgICAgICBtZXRob2RzID0gWydmaWxlbm8nLCAnaXNhdHR5JywgJ3JlYWQnLCAncmVhZGludG8nLApAQCAtOTUsNyArMTExLDcgQEAKICAgICAgICAgICAgIG1ldGhvZHMucmVtb3ZlKCd0cnVuY2F0ZScpCiAKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmYuY2xvc2VkKQogCiAgICAgICAgIGZvciBtZXRob2RuYW1lIGluIG1ldGhvZHM6CiAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYuZiwgbWV0aG9kbmFtZSkKQEAgLTEwNyw1NSArMTIzLDE1NCBAQAogICAgICAgICAjIFdpbmRvd3MgYWx3YXlzIHJldHVybnMgIltFcnJubyAxM106IFBlcm1pc3Npb24gZGVuaWVkCiAgICAgICAgICMgVW5peCBjYWxscyBkaXJjaGVjaygpIGFuZCByZXR1cm5zICJbRXJybm8gMjFdOiBJcyBhIGRpcmVjdG9yeSIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgX2ZpbGVpby5fRmlsZUlPKCcuJywgJ3InKQorICAgICAgICAgICAgX0ZpbGVJTygnLicsICdyJykKICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5lcnJubywgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgIi4iKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgSU9FcnJvciIpCiAKKyAgICAjQSBzZXQgb2YgZnVuY3Rpb25zIHRlc3RpbmcgdGhhdCB3ZSBnZXQgZXhwZWN0ZWQgYmVoYXZpb3VyIGlmIHNvbWVvbmUgaGFzCisgICAgI21hbnVhbGx5IGNsb3NlZCB0aGUgaW50ZXJuYWwgZmlsZSBkZXNjcmlwdG9yLiAgRmlyc3QsIGEgZGVjb3JhdG9yOgorICAgIGRlZiBDbG9zZWRGRChmdW5jKToKKyAgICAgICAgQHdyYXBzKGZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYpOgorICAgICAgICAgICAgI2ZvcmNpYmx5IGNsb3NlIHRoZSBmZCBiZWZvcmUgaW52b2tpbmcgdGhlIHByb2JsZW0gZnVuY3Rpb24KKyAgICAgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgICAgIG9zLmNsb3NlKGYuZmlsZW5vKCkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnVuYyhzZWxmLCBmKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIKKworICAgIGRlZiBDbG9zZWRGRFJhaXNlcyhmdW5jKToKKyAgICAgICAgQHdyYXBzKGZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYpOgorICAgICAgICAgICAgI2ZvcmNpYmx5IGNsb3NlIHRoZSBmZCBiZWZvcmUgaW52b2tpbmcgdGhlIHByb2JsZW0gZnVuY3Rpb24KKyAgICAgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgICAgIG9zLmNsb3NlKGYuZmlsZW5vKCkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnVuYyhzZWxmLCBmKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVCQURGKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBJT0Vycm9yIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiB3cmFwcGVyCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZShzZWxmLCBmKToKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRXcml0ZShzZWxmLCBmKToKKyAgICAgICAgZi53cml0ZSgnYScpCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRTZWVrKHNlbGYsIGYpOgorICAgICAgICBmLnNlZWsoMCkKKworICAgIEBDbG9zZWRGRFJhaXNlcworICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFRlbGwoc2VsZiwgZik6CisgICAgICAgIGYudGVsbCgpCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRUcnVuY2F0ZShzZWxmLCBmKToKKyAgICAgICAgZi50cnVuY2F0ZSgwKQorCisgICAgQENsb3NlZEZECisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkU2Vla2FibGUoc2VsZiwgZik6CisgICAgICAgIGYuc2Vla2FibGUoKQorCisgICAgQENsb3NlZEZECisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkUmVhZGFibGUoc2VsZiwgZik6CisgICAgICAgIGYucmVhZGFibGUoKQorCisgICAgQENsb3NlZEZECisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkV3JpdGFibGUoc2VsZiwgZik6CisgICAgICAgIGYud3JpdGFibGUoKQorCisgICAgQENsb3NlZEZECisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkRmlsZW5vKHNlbGYsIGYpOgorICAgICAgICBmLmZpbGVubygpCisKKyAgICBAQ2xvc2VkRkQKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRJc2F0dHkoc2VsZiwgZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pc2F0dHkoKSwgRmFsc2UpCisKKyAgICBkZWYgUmVvcGVuRm9yUmVhZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCisgICAgICAgIG9zLmNsb3NlKHNlbGYuZi5maWxlbm8oKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuZgorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkUmVhZChzZWxmLCBmKToKKyAgICAgICAgZiA9IHNlbGYuUmVvcGVuRm9yUmVhZCgpCisgICAgICAgIGYucmVhZCgxKQorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkUmVhZGFsbChzZWxmLCBmKToKKyAgICAgICAgZiA9IHNlbGYuUmVvcGVuRm9yUmVhZCgpCisgICAgICAgIGYucmVhZGFsbCgpCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRSZWFkaW50byhzZWxmLCBmKToKKyAgICAgICAgZiA9IHNlbGYuUmVvcGVuRm9yUmVhZCgpCisgICAgICAgIGEgPSBhcnJheShiJ2InLCBiJ3gnKjEwKQorICAgICAgICBmLnJlYWRpbnRvKGEpCiAKIGNsYXNzIE90aGVyRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0QWJsZXMoc2VsZik6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBfZmlsZWlvLl9GaWxlSU8oVEVTVEZOLCAidyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWRhYmxlKCksIEZhbHNlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi53cml0YWJsZSgpLCBUcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAidyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgICAgIGYgPSBfZmlsZWlvLl9GaWxlSU8oVEVTVEZOLCAiciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWRhYmxlKCksIFRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLndyaXRhYmxlKCksIEZhbHNlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAiciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgICAgIGYgPSBfZmlsZWlvLl9GaWxlSU8oVEVTVEZOLCAiYSsiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkYWJsZSgpLCBUcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi53cml0YWJsZSgpLCBUcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5zZWVrYWJsZSgpLCBUcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5pc2F0dHkoKSwgRmFsc2UpCisgICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sICJhKyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaXNhdHR5KCksIEZhbHNlKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZiA9IF9maWxlaW8uX0ZpbGVJTygiL2Rldi90dHkiLCAiYSIpCisgICAgICAgICAgICAgICAgICAgIGYgPSBfRmlsZUlPKCIvZGV2L3R0eSIsICJhIikKICAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyBXaGVuIHJ1biBpbiBhIGNyb24gam9iIHRoZXJlIGp1c3QgYXJlbid0IGFueQogICAgICAgICAgICAgICAgICAgICAjIHR0eXMsIHNvIHNraXAgdGhlIHRlc3QuICBUaGlzIGFsc28gaGFuZGxlcyBvdGhlcgogICAgICAgICAgICAgICAgICAgICAjIE9TJ2VzIHRoYXQgZG9uJ3Qgc3VwcG9ydCAvZGV2L3R0eS4KICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBfZmlsZWlvLl9GaWxlSU8oIi9kZXYvdHR5IiwgImEiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWRhYmxlKCksIEZhbHNlKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLndyaXRhYmxlKCksIFRydWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIFRydWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAiZGFyd2luIiBhbmQgXAogICAgICAgICAgICAgICAgICAgICAgICAnYnNkJyBub3QgaW4gc3lzLnBsYXRmb3JtIGFuZCBcCiAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnc3Vub3MnKToKICAgICAgICAgICAgICAgICAgICAgICAgICMgU29tZWhvdyAvZGV2L3R0eSBhcHBlYXJzIHNlZWthYmxlIG9uIHNvbWUgQlNEcwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5zZWVrYWJsZSgpLCBGYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5pc2F0dHkoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmlzYXR0eSgpLCBUcnVlKQogICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCkBAIC0xNjQsNyArMjc5LDcgQEAKICAgICAgICAgIyBjaGVjayBpbnZhbGlkIG1vZGUgc3RyaW5ncwogICAgICAgICBmb3IgbW9kZSBpbiAoIiIsICJhVSIsICJ3VSsiLCAicnciLCAicnQiKToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmID0gX2ZpbGVpby5fRmlsZUlPKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sIG1vZGUpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgpAQCAtMTczLDE5ICsyODgsMzggQEAKIAogICAgIGRlZiB0ZXN0VW5pY29kZU9wZW4oc2VsZik6CiAgICAgICAgICMgdmVyaWZ5IHJlcHIgd29ya3MgZm9yIHVuaWNvZGUgdG9vCi0gICAgICAgIGYgPSBfZmlsZWlvLl9GaWxlSU8oc3RyKFRFU1RGTiksICJ3IikKKyAgICAgICAgZiA9IF9GaWxlSU8oc3RyKFRFU1RGTiksICJ3IikKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIG9zLnVubGluayhURVNURk4pCiAKKyAgICBkZWYgdGVzdEJ5dGVzT3BlbihzZWxmKToKKyAgICAgICAgIyBPcGVuaW5nIGEgYnl0ZXMgZmlsZW5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm4gPSBURVNURk4uZW5jb2RlKCJhc2NpaSIpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAjIFNraXAgdGVzdAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGYgPSBfRmlsZUlPKGZuLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoYiJhYmMiKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiYWJjIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKICAgICBkZWYgdGVzdEludmFsaWRGZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX2ZpbGVpby5fRmlsZUlPLCAtMTApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIF9maWxlaW8uX0ZpbGVJTywgbWFrZV9iYWRfZmQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX0ZpbGVJTywgLTEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBfRmlsZUlPLCBtYWtlX2JhZF9mZCgpKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1zdmNydC5nZXRfb3NmaGFuZGxlLCBtYWtlX2JhZF9mZCgpKQogCiAgICAgZGVmIHRlc3RCYWRNb2RlQXJndW1lbnQoc2VsZik6CiAgICAgICAgICMgdmVyaWZ5IHRoYXQgd2UgZ2V0IGEgc2Vuc2libGUgZXJyb3IgbWVzc2FnZSBmb3IgYmFkIG1vZGUgYXJndW1lbnQKICAgICAgICAgYmFkX21vZGUgPSAicXdlcnR5IgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmID0gX2ZpbGVpby5fRmlsZUlPKFRFU1RGTiwgYmFkX21vZGUpCisgICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sIGJhZF9tb2RlKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSAhPSAwOgogICAgICAgICAgICAgICAgIHMgPSBzdHIobXNnKQpAQCAtMTk4LDcgKzMzMiw3IEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGVycm9yIGZvciBpbnZhbGlkIG1vZGU6ICVzIiAlIGJhZF9tb2RlKQogCiAgICAgZGVmIHRlc3RUcnVuY2F0ZShzZWxmKToKLSAgICAgICAgZiA9IF9maWxlaW8uX0ZpbGVJTyhURVNURk4sICd3JykKKyAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAndycpCiAgICAgICAgIGYud3JpdGUoYnl0ZXMoYnl0ZWFycmF5KHJhbmdlKDEwKSkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxMCkKICAgICAgICAgZi50cnVuY2F0ZSg1KQpAQCAtMjA3LDE4ICszNDEsMTkgQEAKICAgICAgICAgZi50cnVuY2F0ZSgxNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCwgb3MuU0VFS19FTkQpLCAxNSkKKyAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdFRydW5jYXRlT25XaW5kb3dzKHNlbGYpOgogICAgICAgICBkZWYgYnVnODAxNjMxKCk6CiAgICAgICAgICAgICAjIFNGIGJ1ZyA8aHR0cDovL3d3dy5weXRob24ub3JnL3NmLzgwMTYzMT4KICAgICAgICAgICAgICMgImZpbGUudHJ1bmNhdGUgZmF1bHQgb24gd2luZG93cyIKLSAgICAgICAgICAgIGYgPSBfZmlsZWlvLl9GaWxlSU8oVEVTVEZOLCAndycpCi0gICAgICAgICAgICBmLndyaXRlKGJ5dGVzKGJ5dGVhcnJheShyYW5nZSgxMSkpKSkKKyAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZShieXRlcyhyYW5nZSgxMSkpKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgICAgIGYgPSBfZmlsZWlvLl9GaWxlSU8oVEVTVEZOLCdyKycpCisgICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sJ3IrJykKICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoNSkKLSAgICAgICAgICAgIGlmIGRhdGEgIT0gYnl0ZXMoYnl0ZWFycmF5KHJhbmdlKDUpKSk6CisgICAgICAgICAgICBpZiBkYXRhICE9IGJ5dGVzKHJhbmdlKDUpKToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJlYWQgb24gZmlsZSBvcGVuZWQgZm9yIHVwZGF0ZSBmYWlsZWQgJXIiICUgZGF0YSkKICAgICAgICAgICAgIGlmIGYudGVsbCgpICE9IDU6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHBvcyBhZnRlciByZWFkIHdyb25nICVkIiAlIGYudGVsbCgpKQpAQCAtMjU2LDE2ICszOTEsMzUgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdEludmFsaWRJbml0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9maWxlaW8uX0ZpbGVJTywgIjEiLCAwLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9GaWxlSU8sICIxIiwgMCwgMCkKIAogICAgIGRlZiB0ZXN0V2FybmluZ3Moc2VsZik6CiAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSkgYXMgdzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9maWxlaW8uX0ZpbGVJTywgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9GaWxlSU8sIFtdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Lndhcm5pbmdzLCBbXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9maWxlaW8uX0ZpbGVJTywgIi9zb21lL2ludmFsaWQvbmFtZSIsICJydCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfRmlsZUlPLCAiL3NvbWUvaW52YWxpZC9uYW1lIiwgInJ0IikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCiAKKyAgICBkZWYgdGVzdF9zdXJyb2dhdGVzKHNlbGYpOgorICAgICAgICAjIElzc3VlICM4NDM4OiB0cnkgdG8gb3BlbiBhIGZpbGVuYW1lIGNvbnRhaW5pbmcgc3Vycm9nYXRlcy4KKyAgICAgICAgIyBJdCBzaG91bGQgZWl0aGVyIGZhaWwgYmVjYXVzZSB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIHRoZSBmaWxlbmFtZQorICAgICAgICAjIGNhbid0IGJlIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nLCBidXQgbm90IGJlY2F1c2UKKyAgICAgICAgIyBvZiBhIExvb2t1cEVycm9yIGZvciB0aGUgZXJyb3IgaGFuZGxlciAic3Vycm9nYXRlZXNjYXBlIi4KKyAgICAgICAgZmlsZW5hbWUgPSB1J1x1ZGM4MC50eHQnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggX0ZpbGVJTyhmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgKFVuaWNvZGVFbmNvZGVFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgU3Bhd24gYSBzZXBhcmF0ZSBQeXRob24gcHJvY2VzcyB3aXRoIGEgZGlmZmVyZW50ICJmaWxlIHN5c3RlbQorICAgICAgICAjIGRlZmF1bHQgZW5jb2RpbmciLCB0byBleGVyY2lzZSB0aGlzIGZ1cnRoZXIuCisgICAgICAgIGVudiA9IGRpY3Qob3MuZW52aXJvbikKKyAgICAgICAgZW52W2InTENfQ1RZUEUnXSA9IGInQycKKyAgICAgICAgXywgb3V0ID0gcnVuX3B5dGhvbignLWMnLCAnaW1wb3J0IF9pbzsgX2lvLkZpbGVJTyglciknICUgZmlsZW5hbWUsIGVudj1lbnYpCisgICAgICAgIGlmICgnVW5pY29kZUVuY29kZUVycm9yJyBub3QgaW4gb3V0IGFuZAorICAgICAgICAgICAgJ0lPRXJyb3I6IFtFcnJubyAyXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JyBub3QgaW4gb3V0KToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnQmFkIG91dHB1dDogJXInICUgb3V0KQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgIyBIaXN0b3JpY2FsbHksIHRoZXNlIHRlc3RzIGhhdmUgYmVlbiBzbG9wcHkgYWJvdXQgcmVtb3ZpbmcgVEVTVEZOLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mbG9hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKaW5kZXggMjNjMGM1NC4uZTE2YmUwNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CkBAIC01LDExICs1LDI3IEBACiBpbXBvcnQgbWF0aAogZnJvbSBtYXRoIGltcG9ydCBpc2luZiwgaXNuYW4sIGNvcHlzaWduLCBsZGV4cAogaW1wb3J0IG9wZXJhdG9yCi1pbXBvcnQgcmFuZG9tLCBmcmFjdGlvbnMKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBmcmFjdGlvbnMKK2ltcG9ydCBzeXMKIAogSU5GID0gZmxvYXQoImluZiIpCiBOQU4gPSBmbG9hdCgibmFuIikKIAoraGF2ZV9nZXRmb3JtYXQgPSBoYXNhdHRyKGZsb2F0LCAiX19nZXRmb3JtYXRfXyIpCityZXF1aXJlc19nZXRmb3JtYXQgPSB1bml0dGVzdC5za2lwVW5sZXNzKGhhdmVfZ2V0Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMgX19nZXRmb3JtYXRfXyIpCityZXF1aXJlc19zZXRmb3JtYXQgPSB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoZmxvYXQsICJfX3NldGZvcm1hdF9fIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlcyBfX3NldGZvcm1hdF9fIikKKyMgZGVjb3JhdG9yIGZvciBza2lwcGluZyB0ZXN0cyBvbiBub24tSUVFRSA3NTQgcGxhdGZvcm1zCityZXF1aXJlc19JRUVFXzc1NCA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoaGF2ZV9nZXRmb3JtYXQgYW5kCisgICAgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorCisjbG9jYXRlIGZpbGUgd2l0aCBmbG9hdCBmb3JtYXQgdGVzdCB2YWx1ZXMKK3Rlc3RfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIKK2Zvcm1hdF90ZXN0ZmlsZSA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgJ2Zvcm1hdGZsb2F0X3Rlc3RjYXNlcy50eHQnKQorCiBjbGFzcyBHZW5lcmFsRmxvYXRDYXNlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKQEAgLTI0LDExICs0MCwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIistMy4xNCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLSszLjE0IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICItLTMuMTQiKQorICAgICAgICAjIGNoZWNrIHRoYXQgd2UgZG9uJ3QgYWNjZXB0IGFsdGVybmF0ZSBleHBvbmVudCBtYXJrZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLTEuN2QyOSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiM0QtMTQiKQogICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh1bmljb2RlKCIgIDMuMTQgICIpKSwgMy4xNCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQodW5pY29kZSgiICBcdTA2NjMuXHUwNjYxXHUwNjY0ICAiLCdyYXctdW5pY29kZS1lc2NhcGUnKSksIDMuMTQpCi0gICAgICAgICAgICAjIEltcGxlbWVudGF0aW9uIGxpbWl0YXRpb24gaW4gUHlGbG9hdF9Gcm9tU3RyaW5nKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCB1bmljb2RlKCIxIioxMDAwMCkpCisKKyAgICAgICAgIyBleHRyYSBsb25nIHN0cmluZ3Mgc2hvdWxkIG5vIGxvbmdlciBiZSBhIHByb2JsZW0KKyAgICAgICAgIyAoaW4gMi42LCBsb25nIHVuaWNvZGUgaW5wdXRzIHRvIGZsb2F0IHJhaXNlZCBWYWx1ZUVycm9yKQorICAgICAgICBmbG9hdCgnLicgKyAnMScqMTAwMCkKKyAgICAgICAgZmxvYXQodW5pY29kZSgnLicgKyAnMScqMTAwMCkpCiAKICAgICBAdGVzdF9zdXBwb3J0LnJ1bl93aXRoX2xvY2FsZSgnTENfTlVNRVJJQycsICdmcl9GUicsICdkZV9ERScpCiAgICAgZGVmIHRlc3RfZmxvYXRfd2l0aF9jb21tYShzZWxmKToKQEAgLTEzMyw2ICsxNTUsMjM0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0KCctaW5mJykuYXNfaW50ZWdlcl9yYXRpbykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQoJ25hbicpLmFzX2ludGVnZXJfcmF0aW8pCiAKKyAgICBkZWYgYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24oc2VsZiwgYSwgYik6CisgICAgICAgICMgZmFpbCB1bmxlc3MgYSA9PSBiIGFuZCBhIGFuZCBiIGhhdmUgdGhlIHNhbWUgc2lnbiBiaXQ7CisgICAgICAgICMgdGhlIG9ubHkgZGlmZmVyZW5jZSBmcm9tIGFzc2VydEVxdWFsIGlzIHRoYXQgdGhpcyB0ZXN0CisgICAgICAgICMgZGlzdGluZ2lzaGVzIC0wLjAgYW5kIDAuMC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSwgY29weXNpZ24oMS4wLCBhKSksIChiLCBjb3B5c2lnbigxLjAsIGIpKSkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Zsb2F0X21vZChzZWxmKToKKyAgICAgICAgIyBDaGVjayBiZWhhdmlvdXIgb2YgJSBvcGVyYXRvciBmb3IgSUVFRSA3NTQgc3BlY2lhbCBjYXNlcy4KKyAgICAgICAgIyBJbiBwYXJ0aWN1bGFyLCBjaGVjayBzaWducyBvZiB6ZXJvcy4KKyAgICAgICAgbW9kID0gb3BlcmF0b3IubW9kCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoLTEuMCwgMS4wKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgtMWUtMTAwLCAxLjApLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKC0wLjAsIDEuMCksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoMC4wLCAxLjApLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKDFlLTEwMCwgMS4wKSwgMWUtMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgxLjAsIDEuMCksIDAuMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgtMS4wLCAtMS4wKSwgLTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoLTFlLTEwMCwgLTEuMCksIC0xZS0xMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKC0wLjAsIC0xLjApLCAtMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgwLjAsIC0xLjApLCAtMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgxZS0xMDAsIC0xLjApLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgxLjAsIC0xLjApLCAtMC4wKQorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZmxvYXRfcG93KHNlbGYpOgorICAgICAgICAjIHRlc3QgYnVpbHRpbiBwb3cgYW5kICoqIG9wZXJhdG9yIGZvciBJRUVFIDc1NCBzcGVjaWFsIGNhc2VzLgorICAgICAgICAjIFNwZWNpYWwgY2FzZXMgdGFrZW4gZnJvbSBzZWN0aW9uIEYuOS40LjQgb2YgdGhlIEM5OSBzcGVjaWZpY2F0aW9uCisKKyAgICAgICAgZm9yIHBvd19vcCBpbiBwb3csIG9wZXJhdG9yLnBvdzoKKyAgICAgICAgICAgICMgeCoqTkFOIGlzIE5BTiBmb3IgYW55IHggZXhjZXB0IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoLUlORiwgTkFOKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKC0yLjAsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgtMS4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoLTAuNSwgTkFOKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKC0wLjAsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgwLjAsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgwLjUsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgyLjAsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChJTkYsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIE5BTikpKQorCisgICAgICAgICAgICAjIE5BTioqeSBpcyBOQU4gZm9yIGFueSB5IGV4Y2VwdCArLTAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoTkFOLCAtSU5GKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgLTIuMCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIC0xLjApKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoTkFOLCAtMC41KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgMC41KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgMS4wKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgMi4wKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgSU5GKSkpCisKKyAgICAgICAgICAgICMgKCstMCkqKnkgcmFpc2VzIFplcm9EaXZpc2lvbkVycm9yIGZvciB5IGEgbmVnYXRpdmUgb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBwb3dfb3AsIC0wLjAsIC0xLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAwLjAsIC0xLjApCisKKyAgICAgICAgICAgICMgKCstMCkqKnkgcmFpc2VzIFplcm9EaXZpc2lvbkVycm9yIGZvciB5IGZpbml0ZSBhbmQgbmVnYXRpdmUKKyAgICAgICAgICAgICMgYnV0IG5vdCBhbiBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgLTAuMCwgLTIuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBwb3dfb3AsIC0wLjAsIC0wLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAwLjAsIC0yLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAwLjAsIC0wLjUpCisKKyAgICAgICAgICAgICMgKCstMCkqKnkgaXMgKy0wIGZvciB5IGEgcG9zaXRpdmUgb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIDEuMCksIC0wLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIDEuMCksIDAuMCkKKworICAgICAgICAgICAgIyAoKy0wKSoqeSBpcyAwIGZvciB5IGZpbml0ZSBhbmQgcG9zaXRpdmUgYnV0IG5vdCBhbiBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgMC41KSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgMi4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCAwLjUpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIDIuMCksIDAuMCkKKworICAgICAgICAgICAgIyAoLTEpKiorLWluZiBpcyAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAtSU5GKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgSU5GKSwgMS4wKQorCisgICAgICAgICAgICAjIDEqKnkgaXMgMSBmb3IgYW55IHksIGV2ZW4gaWYgeSBpcyBhbiBpbmZpbml0eSBvciBuYW4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLUlORiksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTIuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTEuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTAuNSksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAwLjUpLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIDEuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgMi4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCBJTkYpLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIE5BTiksIDEuMCkKKworICAgICAgICAgICAgIyB4KiorLTAgaXMgMSBmb3IgYW55IHgsIGV2ZW4gaWYgeCBpcyBhIHplcm8sIGluZmluaXR5LCBvciBuYW4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjUsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC41LCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChOQU4sIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjUsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC41LCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoTkFOLCAtMC4wKSwgMS4wKQorCisgICAgICAgICAgICAjIHgqKnkgcmFpc2VzIFZhbHVlRXJyb3IgZm9yIGZpbml0ZSBuZWdhdGl2ZSB4IGFuZCBub24taW50ZWdyYWwgeQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93X29wLCAtMi4wLCAtMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93X29wLCAtMi4wLCAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3dfb3AsIC0xLjAsIC0wLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3dfb3AsIC0xLjAsIDAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTAuNSwgLTAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTAuNSwgMC41KQorCisgICAgICAgICAgICAjIHgqKi1JTkYgaXMgSU5GIGZvciBhYnMoeCkgPCAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAtSU5GKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgLUlORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgLUlORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgLUlORiksIElORikKKworICAgICAgICAgICAgIyB4KiotSU5GIGlzIDAgZm9yIGFicyh4KSA+IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIC1JTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtSU5GKSwgMC4wKQorCisgICAgICAgICAgICAjIHgqKklORiBpcyAwIGZvciBhYnMoeCkgPCAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCBJTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCBJTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIElORiksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgSU5GKSwgMC4wKQorCisgICAgICAgICAgICAjIHgqKklORiBpcyBJTkYgZm9yIGFicyh4KSA+IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIElORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIElORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgSU5GKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCBJTkYpLCBJTkYpCisKKyAgICAgICAgICAgICMgKC1JTkYpKip5IGlzIC0wLjAgZm9yIHkgYSBuZWdhdGl2ZSBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgLTEuMCksIC0wLjApCisKKyAgICAgICAgICAgICMgKC1JTkYpKip5IGlzIDAuMCBmb3IgeSBuZWdhdGl2ZSBidXQgbm90IGFuIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAtMC41KSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgLTIuMCksIDAuMCkKKworICAgICAgICAgICAgIyAoLUlORikqKnkgaXMgLUlORiBmb3IgeSBhIHBvc2l0aXZlIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAxLjApLCAtSU5GKQorCisgICAgICAgICAgICAjICgtSU5GKSoqeSBpcyBJTkYgZm9yIHkgcG9zaXRpdmUgYnV0IG5vdCBhbiBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgMC41KSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgMi4wKSwgSU5GKQorCisgICAgICAgICAgICAjIElORioqeSBpcyBJTkYgZm9yIHkgcG9zaXRpdmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgMC41KSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAxLjApLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIDIuMCksIElORikKKworICAgICAgICAgICAgIyBJTkYqKnkgaXMgMC4wIGZvciB5IG5lZ2F0aXZlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIC0yLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIC0xLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIC0wLjUpLCAwLjApCisKKyAgICAgICAgICAgICMgYmFzaWMgY2hlY2tzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBzcGVjaWFsIGNhc2VzIGFib3ZlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtMi4wKSwgMC4yNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIC0xLjApLCAtMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIDEuMCksIC0yLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAyLjApLCA0LjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAtMi4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLTEuMCksIC0xLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgMS4wKSwgLTEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDIuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTIuMCksIDAuMjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0xLjApLCAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgMS4wKSwgMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAyLjApLCA0LjApCisKKyAgICAgICAgICAgICMgMSAqKiBsYXJnZSBhbmQgLTEgKiogbGFyZ2U7IHNvbWUgbGlibXMgYXBwYXJlbnRseQorICAgICAgICAgICAgIyBoYXZlIHByb2JsZW1zIHdpdGggdGhlc2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTFlMTAwKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAxZTEwMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIC0xZTEwMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDFlMTAwKSwgMS4wKQorCisgICAgICAgICAgICAjIGNoZWNrIHNpZ24gZm9yIHJlc3VsdHMgdGhhdCB1bmRlcmZsb3cgdG8gMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTIwMDAuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTIuMCwgLTIwMDAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIC0yMDAxLjApLCAtMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMjAwMC4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMjAwMC41KSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMjAwMS4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuNSwgMjAwMC4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93X29wLCAtMC41LCAyMDAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAyMDAxLjApLCAtMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC41LCAyMDAwLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjUsIDIwMDAuNSksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgMjAwMS4wKSwgMC4wKQorCisgICAgICAgICAgICAjIGNoZWNrIHdlIGRvbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBmb3Igc3Vibm9ybWFsIHJlc3VsdHMsCisgICAgICAgICAgICAjIGFuZCB2YWxpZGF0ZSBzaWducy4gIFRlc3RzIGN1cnJlbnRseSBkaXNhYmxlZCwgc2luY2UKKyAgICAgICAgICAgICMgdGhleSBmYWlsIG9uIHN5c3RlbXMgd2hlcmUgYSBzdWJub3JtYWwgcmVzdWx0IGZyb20gcG93CisgICAgICAgICAgICAjIGlzIGZsdXNoZWQgdG8gemVybyAoZS5nLiBEZWJpYW4vaWE2NC4pCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA8IHBvd19vcCgwLjUsIDEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoLTAuNSwgMTA0OCkgPCAxZS0zMTUpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA8IHBvd19vcCgwLjUsIDEwNDcpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPiBwb3dfb3AoLTAuNSwgMTA0NykgPiAtMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMi4wLCAtMTA0OCkgPCAxZS0zMTUpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA8IHBvd19vcCgtMi4wLCAtMTA0OCkgPCAxZS0zMTUpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA8IHBvd19vcCgyLjAsIC0xMDQ3KSA8IDFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wID4gcG93X29wKC0yLjAsIC0xMDQ3KSA+IC0xZS0zMTUpCisKKworQHJlcXVpcmVzX3NldGZvcm1hdAogY2xhc3MgRm9ybWF0RnVuY3Rpb25zVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTQ0LDEwICszOTQsMTAgQEAKICAgICAgICAgZmxvYXQuX19zZXRmb3JtYXRfXygnZmxvYXQnLCBzZWxmLnNhdmVfZm9ybWF0c1snZmxvYXQnXSkKIAogICAgIGRlZiB0ZXN0X2dldGZvcm1hdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oJ2RvdWJsZScpIGluCi0gICAgICAgICAgICAgICAgICAgICBbJ3Vua25vd24nLCAnSUVFRSwgYmlnLWVuZGlhbicsICdJRUVFLCBsaXR0bGUtZW5kaWFuJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhmbG9hdC5fX2dldGZvcm1hdF9fKCdmbG9hdCcpIGluCi0gICAgICAgICAgICAgICAgICAgICBbJ3Vua25vd24nLCAnSUVFRSwgYmlnLWVuZGlhbicsICdJRUVFLCBsaXR0bGUtZW5kaWFuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZmxvYXQuX19nZXRmb3JtYXRfXygnZG91YmxlJyksCisgICAgICAgICAgICAgICAgICAgICAgWyd1bmtub3duJywgJ0lFRUUsIGJpZy1lbmRpYW4nLCAnSUVFRSwgbGl0dGxlLWVuZGlhbiddKQorICAgICAgICBzZWxmLmFzc2VydEluKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oJ2Zsb2F0JyksCisgICAgICAgICAgICAgICAgICAgICAgWyd1bmtub3duJywgJ0lFRUUsIGJpZy1lbmRpYW4nLCAnSUVFRSwgbGl0dGxlLWVuZGlhbiddKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdC5fX2dldGZvcm1hdF9fLCAnY2hpY2tlbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQuX19nZXRmb3JtYXRfXywgMSkKIApAQCAtMTgzLDYgKzQzMyw3IEBACiAjIG9uIG5vbi1JRUVFIHBsYXRmb3JtcywgYXR0ZW1wdGluZyB0byB1bnBhY2sgYSBiaXQgcGF0dGVybgogIyByZXByZXNlbnRpbmcgYW4gaW5maW5pdHkgb3IgYSBOYU4gc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbi4KIAorQHJlcXVpcmVzX3NldGZvcm1hdAogY2xhc3MgVW5rbm93bkZvcm1hdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2F2ZV9mb3JtYXRzID0geydkb3VibGUnOmZsb2F0Ll9fZ2V0Zm9ybWF0X18oJ2RvdWJsZScpLApAQCAtMjE1LDQzICs0NjYsMTE5IEBACiAjIGxldCdzIGFsc28gdHJ5IHRvIGd1YXJhbnRlZSB0aGF0IC0wLjAgYW5kIDAuMCBkb24ndCBnZXQgY29uZnVzZWQuCiAKIGNsYXNzIElFRUVGb3JtYXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaWYgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpOgotICAgICAgICBkZWYgdGVzdF9kb3VibGVfc3BlY2lhbHNfZG9fdW5wYWNrKHNlbGYpOgotICAgICAgICAgICAgZm9yIGZtdCwgZGF0YSBpbiBbKCc+ZCcsIEJFX0RPVUJMRV9JTkYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc+ZCcsIEJFX0RPVUJMRV9OQU4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZCcsIExFX0RPVUJMRV9JTkYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZCcsIExFX0RPVUJMRV9OQU4pXToKLSAgICAgICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKGZtdCwgZGF0YSkKIAotICAgIGlmIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImZsb2F0Iikuc3RhcnRzd2l0aCgiSUVFRSIpOgotICAgICAgICBkZWYgdGVzdF9mbG9hdF9zcGVjaWFsc19kb191bnBhY2soc2VsZik6Ci0gICAgICAgICAgICBmb3IgZm10LCBkYXRhIGluIFsoJz5mJywgQkVfRkxPQVRfSU5GKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPmYnLCBCRV9GTE9BVF9OQU4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZicsIExFX0ZMT0FUX0lORiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxmJywgTEVfRkxPQVRfTkFOKV06Ci0gICAgICAgICAgICAgICAgc3RydWN0LnVucGFjayhmbXQsIGRhdGEpCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZG91YmxlX3NwZWNpYWxzX2RvX3VucGFjayhzZWxmKToKKyAgICAgICAgZm9yIGZtdCwgZGF0YSBpbiBbKCc+ZCcsIEJFX0RPVUJMRV9JTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJz5kJywgQkVfRE9VQkxFX05BTiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGQnLCBMRV9ET1VCTEVfSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZCcsIExFX0RPVUJMRV9OQU4pXToKKyAgICAgICAgICAgIHN0cnVjdC51bnBhY2soZm10LCBkYXRhKQogCi0gICAgaWYgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpOgotICAgICAgICBkZWYgdGVzdF9uZWdhdGl2ZV96ZXJvKHNlbGYpOgotICAgICAgICAgICAgaW1wb3J0IG1hdGgKLSAgICAgICAgICAgIGRlZiBwb3NfcG9zKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDAuMCwgbWF0aC5hdGFuMigwLjAsIC0xKQotICAgICAgICAgICAgZGVmIHBvc19uZWcoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gMC4wLCBtYXRoLmF0YW4yKC0wLjAsIC0xKQotICAgICAgICAgICAgZGVmIG5lZ19wb3MoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gLTAuMCwgbWF0aC5hdGFuMigwLjAsIC0xKQotICAgICAgICAgICAgZGVmIG5lZ19uZWcoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gLTAuMCwgbWF0aC5hdGFuMigtMC4wLCAtMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvc19wb3MoKSwgbmVnX3BvcygpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG9zX25lZygpLCBuZWdfbmVnKCkpCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZmxvYXRfc3BlY2lhbHNfZG9fdW5wYWNrKHNlbGYpOgorICAgICAgICBmb3IgZm10LCBkYXRhIGluIFsoJz5mJywgQkVfRkxPQVRfSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc+ZicsIEJFX0ZMT0FUX05BTiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGYnLCBMRV9GTE9BVF9JTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxmJywgTEVfRkxPQVRfTkFOKV06CisgICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKGZtdCwgZGF0YSkKIAotICAgIGlmIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKLSAgICAgICAgZGVmIHRlc3RfdW5kZXJmbG93X3NpZ24oc2VsZik6Ci0gICAgICAgICAgICBpbXBvcnQgbWF0aAotICAgICAgICAgICAgIyBjaGVjayB0aGF0IC0xZS0xMDAwIGdpdmVzIC0wLjAsIG5vdCAwLjAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguYXRhbjIoLTFlLTEwMDAsIC0xKSwgbWF0aC5hdGFuMigtMC4wLCAtMSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmF0YW4yKGZsb2F0KCctMWUtMTAwMCcpLCAtMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLmF0YW4yKC0wLjAsIC0xKSkKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV96ZXJvKHNlbGYpOgorICAgICAgICBkZWYgcG9zX3BvcygpOgorICAgICAgICAgICAgcmV0dXJuIDAuMCwgbWF0aC5hdGFuMigwLjAsIC0xKQorICAgICAgICBkZWYgcG9zX25lZygpOgorICAgICAgICAgICAgcmV0dXJuIDAuMCwgbWF0aC5hdGFuMigtMC4wLCAtMSkKKyAgICAgICAgZGVmIG5lZ19wb3MoKToKKyAgICAgICAgICAgIHJldHVybiAtMC4wLCBtYXRoLmF0YW4yKDAuMCwgLTEpCisgICAgICAgIGRlZiBuZWdfbmVnKCk6CisgICAgICAgICAgICByZXR1cm4gLTAuMCwgbWF0aC5hdGFuMigtMC4wLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NfcG9zKCksIG5lZ19wb3MoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NfbmVnKCksIG5lZ19uZWcoKSkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X3VuZGVyZmxvd19zaWduKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgLTFlLTEwMDAgZ2l2ZXMgLTAuMCwgbm90IDAuMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoLTFlLTEwMDAsIC0xKSwgbWF0aC5hdGFuMigtMC4wLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMihmbG9hdCgnLTFlLTEwMDAnKSwgLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGguYXRhbjIoLTAuMCwgLTEpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICAjIHRoZXNlIHNob3VsZCBiZSByZXdyaXR0ZW4gdG8gdXNlIGJvdGggZm9ybWF0KHgsIHNwZWMpIGFuZAorICAgICAgICAjIHguX19mb3JtYXRfXyhzcGVjKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDAuMCwgJ2YnKSwgJzAuMDAwMDAwJykKKworICAgICAgICAjIHRoZSBkZWZhdWx0IGlzICdnJywgZXhjZXB0IGZvciBlbXB0eSBmb3JtYXQgc3BlYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgwLjAsICcnKSwgJzAuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDAuMDEsICcnKSwgJzAuMDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgwLjAxLCAnZycpLCAnMC4wMScpCisKKyAgICAgICAgIyBlbXB0eSBwcmVzZW50YXRpb24gdHlwZSBzaG91bGQgZm9ybWF0IGluIHRoZSBzYW1lIHdheSBhcyBzdHIKKyAgICAgICAgIyAoaXNzdWUgNTkyMCkKKyAgICAgICAgeCA9IDEwMC83LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh4LCAnJyksIHN0cih4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeCwgJy0nKSwgc3RyKHgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh4LCAnPicpLCBzdHIoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHgsICcyJyksIHN0cih4KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjAsICdmJyksICcxLjAwMDAwMCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuMCwgJ2YnKSwgJy0xLjAwMDAwMCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoIDEuMCwgJyBmJyksICcgMS4wMDAwMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS4wLCAnIGYnKSwgJy0xLjAwMDAwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KCAxLjAsICcrZicpLCAnKzEuMDAwMDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuMCwgJytmJyksICctMS4wMDAwMDAnKQorCisgICAgICAgICMgJSBmb3JtYXR0aW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjAsICclJyksICctMTAwLjAwMDAwMCUnKQorCisgICAgICAgICMgY29udmVyc2lvbiB0byBzdHJpbmcgc2hvdWxkIGZhaWwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAzLjAsICJzIikKKworICAgICAgICAjIG90aGVyIGZvcm1hdCBzcGVjaWZpZXJzIHNob3VsZG4ndCB3b3JrIG9uIGZsb2F0cywKKyAgICAgICAgIyAgaW4gcGFydGljdWxhciBpbnQgc3BlY2lmaWVycworICAgICAgICBmb3IgZm9ybWF0X3NwZWMgaW4gKFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdhJyksIG9yZCgneicpKzEpXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ0EnKSwgb3JkKCdaJykrMSldKToKKyAgICAgICAgICAgIGlmIG5vdCBmb3JtYXRfc3BlYyBpbiAnZUVmRmdHbiUnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMC4wLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDEuMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAtMS4wLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDFlMTAwLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIC0xZTEwMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAxZS0xMDAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgLTFlLTEwMCwgZm9ybWF0X3NwZWMpCisKKyAgICAgICAgIyBpc3N1ZSAzMzgyOiAnZicgYW5kICdGJyB3aXRoIGluZidzIGFuZCBuYW4ncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KElORiksICdpbmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KElORiksICdJTkYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KC1JTkYpLCAnLWluZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoLUlORiksICctSU5GJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChOQU4pLCAnbmFuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChOQU4pLCAnTkFOJykKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Zvcm1hdF90ZXN0ZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKGZvcm1hdF90ZXN0ZmlsZSkgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBvcGVuKGZvcm1hdF90ZXN0ZmlsZSk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCctLScpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGxocywgcmhzID0gbWFwKHN0ci5zdHJpcCwgbGluZS5zcGxpdCgnLT4nKSkKKyAgICAgICAgICAgICAgICBmbXQsIGFyZyA9IGxocy5zcGxpdCgpCisgICAgICAgICAgICAgICAgYXJnID0gZmxvYXQoYXJnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10ICUgYXJnLCByaHMpCisgICAgICAgICAgICAgICAgaWYgbm90IG1hdGguaXNuYW4oYXJnKSBhbmQgY29weXNpZ24oMS4wLCBhcmcpID4gMC4wOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCAlIC1hcmcsICctJyArIHJocykKKworICAgIGRlZiB0ZXN0X2lzc3VlNTg2NChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMTIzLjQ1NiwgJy40JyksICcxMjMuNScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEyMzQuNTYsICcuNCcpLCAnMS4yMzVlKzAzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMTIzNDUuNiwgJy40JyksICcxLjIzNWUrMDQnKQogCiBjbGFzcyBSZXByVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CkBAIC0yNjUsMTYgKzU5MiwyNDAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgZXZhbChyZXByKHYpKSkKICAgICAgICAgZmxvYXRzX2ZpbGUuY2xvc2UoKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0YXR0cihzeXMsICdmbG9hdF9yZXByX3N0eWxlJywgJycpID09ICdzaG9ydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgImFwcGxpZXMgb25seSB3aGVuIHVzaW5nIHNob3J0IGZsb2F0IHJlcHIgc3R5bGUiKQorICAgIGRlZiB0ZXN0X3Nob3J0X3JlcHIoc2VsZik6CisgICAgICAgICMgdGVzdCBzaG9ydCBmbG9hdCByZXByIGludHJvZHVjZWQgaW4gUHl0aG9uIDMuMS4gIE9uZSBhc3BlY3QKKyAgICAgICAgIyBvZiB0aGlzIHJlcHIgaXMgdGhhdCB3ZSBnZXQgc29tZSBkZWdyZWUgb2Ygc3RyIC0+IGZsb2F0IC0+CisgICAgICAgICMgc3RyIHJvdW5kdHJpcHBpbmcuICBJbiBwYXJ0aWN1bGFyLCBmb3IgYW55IG51bWVyaWMgc3RyaW5nCisgICAgICAgICMgY29udGFpbmluZyAxNSBvciBmZXdlciBzaWduaWZpY2FudCBkaWdpdHMsIHRob3NlIGV4YWN0IHNhbWUKKyAgICAgICAgIyBkaWdpdHMgKG1vZHVsbyB0cmFpbGluZyB6ZXJvcykgc2hvdWxkIGFwcGVhciBpbiB0aGUgb3V0cHV0LgorICAgICAgICAjIE5vIG1vcmUgcmVwcigwLjAzKSAtPiAiMC4wMjk5OTk5OTk5OTk5OTk5OTkiIQorCisgICAgICAgIHRlc3Rfc3RyaW5ncyA9IFsKKyAgICAgICAgICAgICMgb3V0cHV0IGFsd2F5cyBpbmNsdWRlcyAqZWl0aGVyKiBhIGRlY2ltYWwgcG9pbnQgYW5kIGF0CisgICAgICAgICAgICAjIGxlYXN0IG9uZSBkaWdpdCBhZnRlciB0aGF0IHBvaW50LCBvciBhbiBleHBvbmVudC4KKyAgICAgICAgICAgICcwLjAnLAorICAgICAgICAgICAgJzEuMCcsCisgICAgICAgICAgICAnMC4wMScsCisgICAgICAgICAgICAnMC4wMicsCisgICAgICAgICAgICAnMC4wMycsCisgICAgICAgICAgICAnMC4wNCcsCisgICAgICAgICAgICAnMC4wNScsCisgICAgICAgICAgICAnMS4yMzQ1Njc4OScsCisgICAgICAgICAgICAnMTAuMCcsCisgICAgICAgICAgICAnMTAwLjAnLAorICAgICAgICAgICAgIyB2YWx1ZXMgPj0gMWUxNiBnZXQgYW4gZXhwb25lbnQuLi4KKyAgICAgICAgICAgICcxMDAwMDAwMDAwMDAwMDAwLjAnLAorICAgICAgICAgICAgJzk5OTk5OTk5OTk5OTk5OTAuMCcsCisgICAgICAgICAgICAnMWUrMTYnLAorICAgICAgICAgICAgJzFlKzE3JywKKyAgICAgICAgICAgICMgLi4uIGFuZCBzbyBkbyB2YWx1ZXMgPCAxZS00CisgICAgICAgICAgICAnMC4wMDEnLAorICAgICAgICAgICAgJzAuMDAxMDAxJywKKyAgICAgICAgICAgICcwLjAwMDEwMDAwMDAwMDAwMDAxJywKKyAgICAgICAgICAgICcwLjAwMDEnLAorICAgICAgICAgICAgJzkuOTk5OTk5OTk5OTk5ZS0wNScsCisgICAgICAgICAgICAnMWUtMDUnLAorICAgICAgICAgICAgIyB2YWx1ZXMgZGVzaWduZWQgdG8gcHJvdm9rZSBmYWlsdXJlIGlmIHRoZSBGUFUgcm91bmRpbmcKKyAgICAgICAgICAgICMgcHJlY2lzaW9uIGlzbid0IHNldCBjb3JyZWN0bHkKKyAgICAgICAgICAgICc4LjcyMjkzNzcxMTEwMzYxZSsyNScsCisgICAgICAgICAgICAnNy40NzAwNTMwNzM0MjMxM2UrMjYnLAorICAgICAgICAgICAgJzIuODY0MzgwMDA0Mzk2OThlKzI4JywKKyAgICAgICAgICAgICc4Ljg5MTQyOTA1MjQ2MTc5ZSsyOCcsCisgICAgICAgICAgICAnMy4wODU3ODA4NzA3OTIzMmUrMzUnLAorICAgICAgICAgICAgXQorCisgICAgICAgIGZvciBzIGluIHRlc3Rfc3RyaW5nczoKKyAgICAgICAgICAgIG5lZ3MgPSAnLScrcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCByZXByKGZsb2F0KHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmVncywgcmVwcihmbG9hdChuZWdzKSkpCisKKworQHJlcXVpcmVzX0lFRUVfNzU0CitjbGFzcyBSb3VuZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zZWNvbmRfYXJndW1lbnRfdHlwZShzZWxmKToKKyAgICAgICAgIyBhbnkgdHlwZSB3aXRoIGFuIF9faW5kZXhfXyBtZXRob2Qgc2hvdWxkIGJlIHBlcm1pdHRlZCBhcworICAgICAgICAjIGEgc2Vjb25kIGFyZ3VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMTIuMzQsIFRydWUpLCAxMi4zKQorCisgICAgICAgIGNsYXNzIE15SW5kZXgob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6IHJldHVybiA0CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTAuMTIzNDU2LCBNeUluZGV4KCkpLCAtMC4xMjM1KQorICAgICAgICAjIGJ1dCBmbG9hdHMgc2hvdWxkIGJlIGlsbGVnYWwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgMy4xNDE1OSwgMi4wKQorCisgICAgZGVmIHRlc3RfaW5mX25hbihzZWxmKToKKyAgICAgICAgIyByb3VuZGluZyBhbiBpbmZpbml0eSBvciBuYW4gcmV0dXJucyB0aGUgc2FtZSBudW1iZXI7CisgICAgICAgICMgKGluIHB5M2ssIHJvdW5kaW5nIGFuIGluZmluaXR5IG9yIG5hbiByYWlzZXMgYW4gZXJyb3IsCisgICAgICAgICMgIHNpbmNlIHRoZSByZXN1bHQgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBsb25nKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLUlORiksIC1JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJvdW5kKE5BTikpKQorICAgICAgICBmb3IgbiBpbiByYW5nZSgtNSwgNSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKElORiwgbiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLUlORiwgbiksIC1JTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyb3VuZChOQU4sIG4pKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJvdW5kLCBJTkYsIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgLUlORiwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJvdW5kLCBOQU4sICJjZWNpIG4nZXN0IHBhcyB1biBpbnRlZ2VyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgLTAuMCwgMWopCisKKyAgICBkZWYgdGVzdF9sYXJnZV9uKHNlbGYpOgorICAgICAgICBmb3IgbiBpbiBbMzI0LCAzMjUsIDQwMCwgMioqMzEtMSwgMioqMzEsIDIqKjMyLCAyKioxMDBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxMjMuNDU2LCBuKSwgMTIzLjQ1NikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTEyMy40NTYsIG4pLCAtMTIzLjQ1NikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUzMDAsIG4pLCAxZTMwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUtMzIwLCBuKSwgMWUtMzIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlMTUwLCAzMDApLCAxZTE1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxZTMwMCwgMzA3KSwgMWUzMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTMuMTQxNSwgMzA4KSwgLTMuMTQxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxZTE1MCwgMzA5KSwgMWUxNTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMS40ZS0zMTUsIDMxNSksIDFlLTMxNSkKKworICAgIGRlZiB0ZXN0X3NtYWxsX24oc2VsZik6CisgICAgICAgIGZvciBuIGluIFstMzA4LCAtMzA5LCAtNDAwLCAxLTIqKjMxLCAtMioqMzEsIC0yKiozMS0xLCAtMioqMTAwXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMTIzLjQ1NiwgbiksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTEyMy40NTYsIG4pLCAtMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxZTMwMCwgbiksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUtMzIwLCBuKSwgMC4wKQorCisgICAgZGVmIHRlc3Rfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHJvdW5kLCAxLjZlMzA4LCAtMzA4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByb3VuZCwgLTEuN2UzMDgsIC0zMDgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhnZXRhdHRyKHN5cywgJ2Zsb2F0X3JlcHJfc3R5bGUnLCAnJykgPT0gJ3Nob3J0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBhcHBsaWVzIG9ubHkgd2hlbiB1c2luZyBzaG9ydCBmbG9hdCByZXByIHN0eWxlIikKKyAgICBkZWYgdGVzdF9wcmV2aW91c19yb3VuZF9idWdzKHNlbGYpOgorICAgICAgICAjIHBhcnRpY3VsYXIgY2FzZXMgdGhhdCBoYXZlIG9jY3VycmVkIGluIGJ1ZyByZXBvcnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNTYyOTQ5OTUzNDIxMzEyLjUsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICA1NjI5NDk5NTM0MjEzMTIuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1NjI5NDk5NTM0MjEzMS41LCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA1NjI5NDk5NTM0MjEzMS41KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0YXR0cihzeXMsICdmbG9hdF9yZXByX3N0eWxlJywgJycpID09ICdzaG9ydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgYXBwbGllcyBvbmx5IHdoZW4gdXNpbmcgc2hvcnQgZmxvYXQgcmVwciBzdHlsZSIpCisgICAgZGVmIHRlc3RfaGFsZndheV9jYXNlcyhzZWxmKToKKyAgICAgICAgIyBIYWxmd2F5IGNhc2VzIG5lZWQgc3BlY2lhbCBhdHRlbnRpb24sIHNpbmNlIHRoZSBjdXJyZW50CisgICAgICAgICMgaW1wbGVtZW50YXRpb24gaGFzIHRvIGRlYWwgd2l0aCB0aGVtIHNwZWNpYWxseS4gIE5vdGUgdGhhdAorICAgICAgICAjIDIueCByb3VuZHMgaGFsZndheSB2YWx1ZXMgdXAgKGkuZS4sIGF3YXkgZnJvbSB6ZXJvKSB3aGlsZQorICAgICAgICAjIDMueCBkb2VzIHJvdW5kLWhhbGYtdG8tZXZlbi4KKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjEyNSwgMiksIDAuMTMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC4zNzUsIDIpLCAwLjM4KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDAuNjI1LCAyKSwgMC42MykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjg3NSwgMiksIDAuODgpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTAuMTI1LCAyKSwgLTAuMTMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTAuMzc1LCAyKSwgLTAuMzgpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTAuNjI1LCAyKSwgLTAuNjMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTAuODc1LCAyKSwgLTAuODgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjI1LCAxKSwgMC4zKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDAuNzUsIDEpLCAwLjgpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTAuMjUsIDEpLCAtMC4zKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjc1LCAxKSwgLTAuOCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC02LjUsIDApLCAtNy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC01LjUsIDApLCAtNi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xLjUsIDApLCAtMi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0wLjUsIDApLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDAuNSwgMCksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxLjUsIDApLCAyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMi41LCAwKSwgMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDMuNSwgMCksIDQuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg0LjUsIDApLCA1LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNS41LCAwKSwgNi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDYuNSwgMCksIDcuMCkKKworICAgICAgICAjIHNhbWUgYnV0IHdpdGhvdXQgYW4gZXhwbGljaXQgc2Vjb25kIGFyZ3VtZW50OyBpbiAzLnggdGhlc2UKKyAgICAgICAgIyB3aWxsIGdpdmUgaW50ZWdlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtNi41KSwgLTcuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtNS41KSwgLTYuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMS41KSwgLTIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMC41KSwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgwLjUpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMS41KSwgMi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDIuNSksIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgzLjUpLCA0LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNC41KSwgNS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDUuNSksIDYuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg2LjUpLCA3LjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMjUuMCwgLTEpLCAtMzAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMTUuMCwgLTEpLCAtMjAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtNS4wLCAtMSksIC0xMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDUuMCwgLTEpLCAxMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDE1LjAsIC0xKSwgMjAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgyNS4wLCAtMSksIDMwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMzUuMCwgLTEpLCA0MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDQ1LjAsIC0xKSwgNTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1NS4wLCAtMSksIDYwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNjUuMCwgLTEpLCA3MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDc1LjAsIC0xKSwgODAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg4NS4wLCAtMSksIDkwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoOTUuMCwgLTEpLCAxMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxMjMyNS4wLCAtMSksIDEyMzMwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgzNTAuMCwgLTIpLCA0MDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg0NTAuMCwgLTIpLCA1MDAuMCkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDAuNWUyMSwgLTIxKSwgMWUyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgxLjVlMjEsIC0yMSksIDJlMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMi41ZTIxLCAtMjEpLCAzZTIxKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDUuNWUyMSwgLTIxKSwgNmUyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCg4LjVlMjEsIC0yMSksIDllMjEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgtMS41ZTIyLCAtMjIpLCAtMmUyMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgtMC41ZTIyLCAtMjIpLCAtMWUyMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjVlMjIsIC0yMiksIDFlMjIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMS41ZTIyLCAtMjIpLCAyZTIyKQorCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9mb3JtYXRfc3BlY2lhbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3JtYXR0aW5nIG9mIG5hbnMgYW5kIGluZnMuCisKKyAgICAgICAgZGVmIHRlc3QoZm10LCB2YWx1ZSwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgIyBUZXN0IHdpdGggYm90aCAlIGFuZCBmb3JtYXQoKS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10ICUgdmFsdWUsIGV4cGVjdGVkLCBmbXQpCisgICAgICAgICAgICBpZiBub3QgJyMnIGluIGZtdDoKKyAgICAgICAgICAgICAgICAjIFVudGlsIGlzc3VlIDcwOTQgaXMgaW1wbGVtZW50ZWQsIGZvcm1hdCgpIGZvciBmbG9hdHMgZG9lc24ndAorICAgICAgICAgICAgICAgICMgIHN1cHBvcnQgJyMnIGZvcm1hdHRpbmcKKyAgICAgICAgICAgICAgICBmbXQgPSBmbXRbMTpdICMgc3RyaXAgb2ZmIHRoZSAlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQodmFsdWUsIGZtdCksIGV4cGVjdGVkLCBmbXQpCisKKyAgICAgICAgZm9yIGZtdCBpbiBbJyVlJywgJyVmJywgJyVnJywgJyUuMGUnLCAnJS42ZicsICclLjIwZycsCisgICAgICAgICAgICAgICAgICAgICclI2UnLCAnJSNmJywgJyUjZycsICclIy4yMGUnLCAnJSMuMTVmJywgJyUjLjNnJ106CisgICAgICAgICAgICBwZm10ID0gJyUrJyArIGZtdFsxOl0KKyAgICAgICAgICAgIHNmbXQgPSAnJSAnICsgZm10WzE6XQorICAgICAgICAgICAgdGVzdChmbXQsIElORiwgJ2luZicpCisgICAgICAgICAgICB0ZXN0KGZtdCwgLUlORiwgJy1pbmYnKQorICAgICAgICAgICAgdGVzdChmbXQsIE5BTiwgJ25hbicpCisgICAgICAgICAgICB0ZXN0KGZtdCwgLU5BTiwgJ25hbicpCisgICAgICAgICAgICAjIFdoZW4gYXNraW5nIGZvciBhIHNpZ24sIGl0J3MgYWx3YXlzIHByb3ZpZGVkLiBuYW5zIGFyZQorICAgICAgICAgICAgIyAgYWx3YXlzIHBvc2l0aXZlLgorICAgICAgICAgICAgdGVzdChwZm10LCBJTkYsICcraW5mJykKKyAgICAgICAgICAgIHRlc3QocGZtdCwgLUlORiwgJy1pbmYnKQorICAgICAgICAgICAgdGVzdChwZm10LCBOQU4sICcrbmFuJykKKyAgICAgICAgICAgIHRlc3QocGZtdCwgLU5BTiwgJytuYW4nKQorICAgICAgICAgICAgIyBXaGVuIHVzaW5nICcgJyBmb3IgYSBzaWduIGNvZGUsIG9ubHkgaW5mcyBjYW4gYmUgbmVnYXRpdmUuCisgICAgICAgICAgICAjICBPdGhlcnMgaGF2ZSBhIHNwYWNlLgorICAgICAgICAgICAgdGVzdChzZm10LCBJTkYsICcgaW5mJykKKyAgICAgICAgICAgIHRlc3Qoc2ZtdCwgLUlORiwgJy1pbmYnKQorICAgICAgICAgICAgdGVzdChzZm10LCBOQU4sICcgbmFuJykKKyAgICAgICAgICAgIHRlc3Qoc2ZtdCwgLU5BTiwgJyBuYW4nKQorCisKICMgQmVnaW5uaW5nIHdpdGggUHl0aG9uIDIuNiBmbG9hdCBoYXMgY3Jvc3MgcGxhdGZvcm0gY29tcGF0aWJsZQogIyB3YXlzIHRvIGNyZWF0ZSBhbmQgcmVwcmVzZW50IGluZiBhbmQgbmFuCiBjbGFzcyBJbmZOYW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9pbmZfZnJvbV9zdHIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luZihmbG9hdCgiaW5mIikpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbmYoZmxvYXQoIitpbmYiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luZihmbG9hdCgiLWluZiIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5mKGZsb2F0KCJpbmZpbml0eSIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5mKGZsb2F0KCIraW5maW5pdHkiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luZihmbG9hdCgiLWluZmluaXR5IikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYoZmxvYXQoImluZiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5mKGZsb2F0KCIraW5mIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYoZmxvYXQoIi1pbmYiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luZihmbG9hdCgiaW5maW5pdHkiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luZihmbG9hdCgiK2luZmluaXR5IikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYoZmxvYXQoIi1pbmZpbml0eSIpKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoImluZiIpKSwgImluZiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiK2luZiIpKSwgImluZiIpCkBAIC0zMTYsOSArODY3LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoLTFlMzAwICogMWUzMDApLCAiLWluZiIpCiAKICAgICBkZWYgdGVzdF9uYW5fZnJvbV9zdHIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc25hbihmbG9hdCgibmFuIikpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNuYW4oZmxvYXQoIituYW4iKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc25hbihmbG9hdCgiLW5hbiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKGZsb2F0KCJuYW4iKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihmbG9hdCgiK25hbiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKGZsb2F0KCItbmFuIikpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgibmFuIikpLCAibmFuIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCIrbmFuIikpLCAibmFuIikKQEAgLTM0NywxNCArODk4LDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKC0xZTMwMCAqIDFlMzAwICogMCksICJuYW4iKQogCiAgICAgZGVmIG5vdGVzdF9mbG9hdF9uYW4oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhOQU4uaXNfbmFuKCkpCi0gICAgICAgIHNlbGYuZmFpbElmKElORi5pc19uYW4oKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoKDAuKS5pc19uYW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE5BTi5pc19uYW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShJTkYuaXNfbmFuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKDAuKS5pc19uYW4oKSkKIAogICAgIGRlZiBub3Rlc3RfZmxvYXRfaW5mKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oSU5GLmlzX2luZigpKQotICAgICAgICBzZWxmLmZhaWxJZihOQU4uaXNfaW5mKCkpCi0gICAgICAgIHNlbGYuZmFpbElmKCgwLikuaXNfaW5mKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShJTkYuaXNfaW5mKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoTkFOLmlzX2luZigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCgwLikuaXNfaW5mKCkpCisKKyAgICBkZWYgdGVzdF9oYXNoX2luZihzZWxmKToKKyAgICAgICAgIyB0aGUgYWN0dWFsIHZhbHVlcyBoZXJlIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhbgorICAgICAgICAjIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYnV0IHRoZXkgbmVlZCB0byBiZQorICAgICAgICAjIGlkZW50aWNhbCB0byB0aG9zZSB1c2VkIGluIHRoZSBEZWNpbWFsIG1vZHVsZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGZsb2F0KCdpbmYnKSksIDMxNDE1OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGZsb2F0KCctaW5mJykpLCAtMjcxODI4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZmxvYXQoJ25hbicpKSwgMCkKKwogCiBmcm9tSGV4ID0gZmxvYXQuZnJvbWhleAogdG9IZXggPSBmbG9hdC5oZXgKQEAgLTc4NSw2ICsxMzQ1LDcgQEAKICAgICAgICAgVW5rbm93bkZvcm1hdFRlc3RDYXNlLAogICAgICAgICBJRUVFRm9ybWF0VGVzdENhc2UsCiAgICAgICAgIFJlcHJUZXN0Q2FzZSwKKyAgICAgICAgUm91bmRUZXN0Q2FzZSwKICAgICAgICAgSW5mTmFuVGVzdCwKICAgICAgICAgSGV4RmxvYXRUZXN0Q2FzZSwKICAgICAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mbm1hdGNoLnB5IGIvTGliL3Rlc3QvdGVzdF9mbm1hdGNoLnB5CmluZGV4IGJkNjdlMDUuLjM3ZWM1MGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm5tYXRjaC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZubWF0Y2gucHkKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIGRlZiBjaGVja19tYXRjaChzZWxmLCBmaWxlbmFtZSwgcGF0dGVybiwgc2hvdWxkX21hdGNoPTEsIGZuPWZubWF0Y2gpOgogICAgICAgICBpZiBzaG91bGRfbWF0Y2g6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm4oZmlsZW5hbWUsIHBhdHRlcm4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAlciB0byBtYXRjaCBwYXR0ZXJuICVyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXIgdG8gbWF0Y2ggcGF0dGVybiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgcGF0dGVybikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZuKGZpbGVuYW1lLCBwYXR0ZXJuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXIgbm90IHRvIG1hdGNoIHBhdHRlcm4gJXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIHBhdHRlcm4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAlciBub3QgdG8gbWF0Y2ggcGF0dGVybiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgcGF0dGVybikpCiAKICAgICBkZWYgdGVzdF9mbm1hdGNoKHNlbGYpOgogICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfbWF0Y2gKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoX01BWENBQ0hFICsgMSk6CiAgICAgICAgICAgICBmbm1hdGNoKCdmb28nLCAnPycgKiBpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oX2NhY2hlKSA8PSBfTUFYQ0FDSEUpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGxlbihfY2FjaGUpLCBfTUFYQ0FDSEUpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEZubWF0Y2hUZXN0Q2FzZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkgYi9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CmluZGV4IDMxYjRkZDguLjM5MzA2NjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQpAQCAtMSwyMSArMSwxOSBAQAogIiIiVGhpcyB0ZXN0IGNoZWNrcyBmb3IgY29ycmVjdCBmb3JrKCkgYmVoYXZpb3IuCiAiIiIKIAotaW1wb3J0IGVycm5vCiBpbXBvcnQgaW1wCiBpbXBvcnQgb3MKIGltcG9ydCBzaWduYWwKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi1pbXBvcnQgdGhyZWFkaW5nCiAKIGZyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZCwgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4sIGdldF9hdHRyaWJ1dGUsIGltcG9ydF9tb2R1bGUKK3RocmVhZGluZyA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKLXRyeToKLSAgICBvcy5mb3JrCi1leGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQsICJvcy5mb3JrIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3RfZm9yazEiCisjU2tpcCB0ZXN0IGlmIGZvcmsgZG9lcyBub3QgZXhpc3QuCitnZXRfYXR0cmlidXRlKG9zLCAnZm9yaycpCisKIAogY2xhc3MgRm9ya1Rlc3QoRm9ya1dhaXQpOgogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CmluZGV4IGNkNDZiYzIuLmYzOTQyNmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CkBAIC0xMCwxMSArMTAsNyBAQAogIyB0aGV5IGNyYXNoIHB5dGhvbikKICMgdGVzdCBvbiB1bmljb2RlIHN0cmluZ3MgYXMgd2VsbAogCi1vdmVyZmxvd29rID0gMQotb3ZlcmZsb3dyZXF1aXJlZCA9IDAKLQotCi1kZWYgdGVzdGZvcm1hdChmb3JtYXRzdHIsIGFyZ3MsIG91dHB1dD1Ob25lLCBsaW1pdD1Ob25lKToKK2RlZiB0ZXN0Zm9ybWF0KGZvcm1hdHN0ciwgYXJncywgb3V0cHV0PU5vbmUsIGxpbWl0PU5vbmUsIG92ZXJmbG93b2s9RmFsc2UpOgogICAgIGlmIHZlcmJvc2U6CiAgICAgICAgIGlmIG91dHB1dDoKICAgICAgICAgICAgIHByaW50ICIlcyAlJSAlcyA9PyAlcyAuLi4iICVcCkBAIC0yOSwxNiArMjUsMTEgQEAKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICdvdmVyZmxvdyAodGhpcyBpcyBmaW5lKScKICAgICBlbHNlOgotICAgICAgICBpZiBvdmVyZmxvd3JlcXVpcmVkOgorICAgICAgICBpZiBvdXRwdXQgYW5kIGxpbWl0IGlzIE5vbmUgYW5kIHJlc3VsdCAhPSBvdXRwdXQ6CiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50ICdubycKLSAgICAgICAgICAgIHByaW50ICJvdmVyZmxvdyBleHBlY3RlZCBvbiAlcyAlJSAlcyIgJSBcCi0gICAgICAgICAgICAgICAgICAocmVwcihmb3JtYXRzdHIpLCByZXByKGFyZ3MpKQotICAgICAgICBlbGlmIG91dHB1dCBhbmQgbGltaXQgaXMgTm9uZSBhbmQgcmVzdWx0ICE9IG91dHB1dDoKLSAgICAgICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgJ25vJwotICAgICAgICAgICAgcHJpbnQgIiVzICUlICVzID09ICVzICE9ICVzIiAlIFwKLSAgICAgICAgICAgICAgICAgIChyZXByKGZvcm1hdHN0ciksIHJlcHIoYXJncyksIHJlcHIocmVzdWx0KSwgcmVwcihvdXRwdXQpKQorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIiVyICUlICVyID09ICVyICE9ICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXRzdHIsIGFyZ3MsIHJlc3VsdCwgb3V0cHV0KSkKICAgICAgICAgIyB3aGVuICdsaW1pdCcgaXMgc3BlY2lmaWVkLCBpdCBkZXRlcm1pbmVzIGhvdyBtYW55IGNoYXJhY3RlcnMKICAgICAgICAgIyBtdXN0IG1hdGNoIGV4YWN0bHk7IGxlbmd0aHMgbXVzdCBhbHdheXMgbWF0Y2guCiAgICAgICAgICMgZXg6IGxpbWl0PTUsICcxMjM0NTY3OCcgbWF0Y2hlcyAnMTIzNDVfX18nCkBAIC01NSwxOSArNDYsMjcgQEAKICAgICAgICAgICAgICAgICBwcmludCAneWVzJwogCiAKLWRlZiB0ZXN0Ym90aChmb3JtYXRzdHIsICphcmdzKToKLSAgICB0ZXN0Zm9ybWF0KGZvcm1hdHN0ciwgKmFyZ3MpCitkZWYgdGVzdGJvdGgoZm9ybWF0c3RyLCAqYXJncywgKiprd2FyZ3MpOgorICAgIHRlc3Rmb3JtYXQoZm9ybWF0c3RyLCAqYXJncywgKiprd2FyZ3MpCiAgICAgaWYgaGF2ZV91bmljb2RlOgotICAgICAgICB0ZXN0Zm9ybWF0KHVuaWNvZGUoZm9ybWF0c3RyKSwgKmFyZ3MpCisgICAgICAgIHRlc3Rmb3JtYXQodW5pY29kZShmb3JtYXRzdHIpLCAqYXJncywgKiprd2FyZ3MpCiAKIAogY2xhc3MgRm9ybWF0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgogICAgICAgICB0ZXN0Ym90aCgiJS4xZCIsICgxLCksICIxIikKLSAgICAgICAgdGVzdGJvdGgoIiUuKmQiLCAoc3lzLm1heGludCwxKSkgICMgZXhwZWN0IG92ZXJmbG93Ci0gICAgICAgIHRlc3Rib3RoKCIlLjEwMGQiLCAoMSwpLCAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScpCi0gICAgICAgIHRlc3Rib3RoKCIlIy4xMTd4IiwgKDEsKSwgJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJykKLSAgICAgICAgdGVzdGJvdGgoIiUjLjExOHgiLCAoMSwpLCAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJykKKyAgICAgICAgdGVzdGJvdGgoIiUuKmQiLCAoc3lzLm1heGludCwxKSwgb3ZlcmZsb3dvaz1UcnVlKSAgIyBleHBlY3Qgb3ZlcmZsb3cKKyAgICAgICAgdGVzdGJvdGgoIiUuMTAwZCIsICgxLCksICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAxJywgb3ZlcmZsb3dvaz1UcnVlKQorICAgICAgICB0ZXN0Ym90aCgiJSMuMTE3eCIsICgxLCksICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworICAgICAgICAgICAgICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworICAgICAgICAgICAgICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScsCisgICAgICAgICAgICAgICAgIG92ZXJmbG93b2s9VHJ1ZSkKKyAgICAgICAgdGVzdGJvdGgoIiUjLjExOHgiLCAoMSwpLCAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJywKKyAgICAgICAgICAgICAgICAgb3ZlcmZsb3dvaz1UcnVlKQogCiAgICAgICAgIHRlc3Rib3RoKCIlZiIsICgxLjAsKSwgIjEuMDAwMDAwIikKICAgICAgICAgIyB0aGVzZSBhcmUgdHJ5aW5nIHRvIHRlc3QgdGhlIGxpbWl0cyBvZiB0aGUgaW50ZXJuYWwgbWFnaWMtbnVtYmVyLWxlbmd0aApAQCAtODEsMTUgKzgwLDE0IEBACiAgICAgICAgIHRlc3Rib3RoKCclMTIuKmYnLCAoMTIzNDU2LCAxLjApKQogCiAgICAgICAgICMgY2hlY2sgZm9yIGludGVybmFsIG92ZXJmbG93IHZhbGlkYXRpb24gb24gbGVuZ3RoIG9mIHByZWNpc2lvbgotICAgICAgICBvdmVyZmxvd3JlcXVpcmVkID0gMQorICAgICAgICAjIHRoZXNlIHRlc3RzIHNob3VsZCBubyBsb25nZXIgY2F1c2Ugb3ZlcmZsb3cgaW4gUHl0aG9uCisgICAgICAgICMgMi43LzMuMSBhbmQgbGF0ZXIuCiAgICAgICAgIHRlc3Rib3RoKCIlIy4qZyIsICgxMTAsIC0xLmUrMTAwLzMuKSkKICAgICAgICAgdGVzdGJvdGgoIiUjLipHIiwgKDExMCwgLTEuZSsxMDAvMy4pKQogICAgICAgICB0ZXN0Ym90aCgiJSMuKmYiLCAoMTEwLCAtMS5lKzEwMC8zLikpCiAgICAgICAgIHRlc3Rib3RoKCIlIy4qRiIsICgxMTAsIC0xLmUrMTAwLzMuKSkKLSAgICAgICAgb3ZlcmZsb3dyZXF1aXJlZCA9IDAKIAogICAgICAgICAjIEZvcm1hdHRpbmcgb2YgbG9uZyBpbnRlZ2Vycy4gT3ZlcmZsb3cgaXMgbm90IG9rCi0gICAgICAgIG92ZXJmbG93b2sgPSAwCiAgICAgICAgIHRlc3Rib3RoKCIleCIsIDEwTCwgImEiKQogICAgICAgICB0ZXN0Ym90aCgiJXgiLCAxMDAwMDAwMDAwMDBMLCAiMTc0ODc2ZTgwMCIpCiAgICAgICAgIHRlc3Rib3RoKCIlbyIsIDEwTCwgIjEyIikKQEAgLTIzMiw2ICsyMzAsMTAgQEAKICAgICAgICAgdGVzdGJvdGgoIiVvIiwgLTA0MkwsICItNDIiKQogICAgICAgICB0ZXN0Ym90aCgiJW8iLCBmbG9hdCgwNDIpLCAiNDIiKQogCisgICAgICAgICMgYWx0ZXJuYXRlIGZsb2F0IGZvcm1hdHRpbmcKKyAgICAgICAgdGVzdGZvcm1hdCgnJWcnLCAxLjEsICcxLjEnKQorICAgICAgICB0ZXN0Zm9ybWF0KCclI2cnLCAxLjEsICcxLjEwMDAwJykKKwogICAgICAgICAjIFRlc3QgZXhjZXB0aW9uIGZvciB1bmtub3duIGZvcm1hdCBjaGFyYWN0ZXJzCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnVGVzdGluZyBleGNlcHRpb25zJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcGZvcm1hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZnBmb3JtYXQucHkKaW5kZXggYTk1MWNkMC4uZTZkZTNiMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mcGZvcm1hdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZwZm9ybWF0LnB5CkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgICAgICBuID0gcmVwcihuKQogICAgICAgICBleHBlY3RlZCA9ICIlLipmIiAlIChkaWdpdHMsIGZsb2F0KG4pKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKIAogICAgIGRlZiBjaGVja1NjaShzZWxmLCBuLCBkaWdpdHMpOgogICAgICAgICByZXN1bHQgPSBzY2kobiwgZGlnaXRzKQpAQCAtMzksMTEgKzM5LDExIEBACiAgICAgICAgICAgICBleHAgPSBleHBbMF0gKyAiMCIgKyBleHBbMTpdCiAgICAgICAgIGV4cGVjdGVkID0gIiVzZSVzIiAlIChudW0sIGV4cCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9iYXNpY19jYXNlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZml4KDEwMC4wLzMsIDMpLCAnMzMuMzMzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2NpKDEwMC4wLzMsIDMpLCAnMy4zMzNlKzAwMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4KDEwMC4wLzMsIDMpLCAnMzMuMzMzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2koMTAwLjAvMywgMyksICczLjMzM2UrMDAxJykKIAogICAgIGRlZiB0ZXN0X3JlYXNvbmFibGVfdmFsdWVzKHNlbGYpOgogICAgICAgICBmb3IgZCBpbiByYW5nZSg3KToKQEAgLTU0LDEyICs1NCwxMiBAQAogCiAgICAgZGVmIHRlc3RfZmFpbGluZ192YWx1ZXMoc2VsZik6CiAgICAgICAgICMgTm93IGZvciAndW5yZWFzb25hYmxlIG4gYW5kIGQnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZpeCgxLjAsIDEwMDApLCAnMS4nKygnMCcqMTAwMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNjaSgiMSIrKCcwJyoxMDAwKSwgMCksICcxZSsxMDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXgoMS4wLCAxMDAwKSwgJzEuJysoJzAnKjEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjaSgiMSIrKCcwJyoxMDAwKSwgMCksICcxZSsxMDAwJykKIAogICAgICAgICAjIFRoaXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50LiAgc2NpIHJhaXNlcyBhbiBleGNlcHRpb247IGZpeCBkb2Vzbid0LgogICAgICAgICB5YWNodCA9ICJUaHJvYXR3b2JibGVyIE1hbmdyb3ZlIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmaXgoeWFjaHQsIDEwKSwgeWFjaHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4KHlhY2h0LCAxMCksIHlhY2h0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzY2koeWFjaHQsIDEwKQogICAgICAgICBleGNlcHQgTm90QU51bWJlcjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5IGIvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkKaW5kZXggMDUwOWY5Mi4uYTc5ODQ3NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkKQEAgLTMsNiArMyw3IEBACiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogaW1wb3J0IG1hdGgKK2ltcG9ydCBudW1iZXJzCiBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBmcmFjdGlvbnMKIGltcG9ydCB1bml0dGVzdApAQCAtMTEsMjAgKzEyLDk1IEBACiBGID0gZnJhY3Rpb25zLkZyYWN0aW9uCiBnY2QgPSBmcmFjdGlvbnMuZ2NkCiAKKyMgZGVjb3JhdG9yIGZvciBza2lwcGluZyB0ZXN0cyBvbiBub24tSUVFRSA3NTQgcGxhdGZvcm1zCityZXF1aXJlc19JRUVFXzc1NCA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoCisgICAgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorCitjbGFzcyBEdW1teUZsb2F0KG9iamVjdCk6CisgICAgIiIiRHVtbXkgZmxvYXQgY2xhc3MgZm9yIHRlc3RpbmcgY29tcGFyaXNvbnMgd2l0aCBGcmFjdGlvbnMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkR1bW15RmxvYXQgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgZnJvbSBmbG9hdCIpCisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgZGVmIF9yaWNoY21wKHNlbGYsIG90aGVyLCBvcCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIG51bWJlcnMuUmF0aW9uYWwpOgorICAgICAgICAgICAgcmV0dXJuIG9wKEYuZnJvbV9mbG9hdChzZWxmLnZhbHVlKSwgb3RoZXIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvdGhlciwgRHVtbXlGbG9hdCk6CisgICAgICAgICAgICByZXR1cm4gb3Aoc2VsZi52YWx1ZSwgb3RoZXIudmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOiByZXR1cm4gc2VsZi5fcmljaGNtcChvdGhlciwgb3BlcmF0b3IuZXEpCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLl9yaWNoY21wKG90aGVyLCBvcGVyYXRvci5sZSkKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKTogcmV0dXJuIHNlbGYuX3JpY2hjbXAob3RoZXIsIG9wZXJhdG9yLmx0KQorICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOiByZXR1cm4gc2VsZi5fcmljaGNtcChvdGhlciwgb3BlcmF0b3IuZ2UpCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLl9yaWNoY21wKG90aGVyLCBvcGVyYXRvci5ndCkKKworICAgICMgc2hvdWxkbid0IGJlIGNhbGxpbmcgX19mbG9hdF9fIGF0IGFsbCB3aGVuIGRvaW5nIGNvbXBhcmlzb25zCisgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiX19mbG9hdF9fIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcGFyaXNvbnMiCisKKyAgICAjIHNhbWUgZ29lcyBmb3Igc3VidHJhY3Rpb24KKyAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBGYWxzZSwgIl9fc3ViX18gc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wYXJpc29ucyIKKyAgICBfX3JzdWJfXyA9IF9fc3ViX18KKworICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworCitjbGFzcyBEdW1teVJhdGlvbmFsKG9iamVjdCk6CisgICAgIiIiVGVzdCBjb21wYXJpc29uIG9mIEZyYWN0aW9uIHdpdGggYSBuYWl2ZSByYXRpb25hbCBpbXBsZW1lbnRhdGlvbi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW0sIGRlbik6CisgICAgICAgIGcgPSBnY2QobnVtLCBkZW4pCisgICAgICAgIHNlbGYubnVtID0gbnVtIC8vIGcKKyAgICAgICAgc2VsZi5kZW4gPSBkZW4gLy8gZworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGZyYWN0aW9ucy5GcmFjdGlvbik6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYubnVtID09IG90aGVyLl9udW1lcmF0b3IgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVuID09IG90aGVyLl9kZW5vbWluYXRvcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybihzZWxmLm51bSAqIG90aGVyLl9kZW5vbWluYXRvciA8IHNlbGYuZGVuICogb3RoZXIuX251bWVyYXRvcikKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4oc2VsZi5udW0gKiBvdGhlci5fZGVub21pbmF0b3IgPiBzZWxmLmRlbiAqIG90aGVyLl9udW1lcmF0b3IpCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuKHNlbGYubnVtICogb3RoZXIuX2Rlbm9taW5hdG9yIDw9IHNlbGYuZGVuICogb3RoZXIuX251bWVyYXRvcikKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4oc2VsZi5udW0gKiBvdGhlci5fZGVub21pbmF0b3IgPj0gc2VsZi5kZW4gKiBvdGhlci5fbnVtZXJhdG9yKQorCisgICAgIyB0aGlzIGNsYXNzIGlzIGZvciB0ZXN0aW5nIGNvbXBhcmlzb25zOyBjb252ZXJzaW9uIHRvIGZsb2F0CisgICAgIyBzaG91bGQgbmV2ZXIgYmUgdXNlZCBmb3IgYSBjb21wYXJpc29uLCBzaW5jZSBpdCBsb3NlcyBhY2N1cmFjeQorICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgIGFzc2VydCBGYWxzZSwgIl9fZmxvYXRfXyBzaG91bGQgbm90IGJlIGludm9rZWQiCisKKyAgICAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgX19oYXNoX18gPSBOb25lCisKIAogY2xhc3MgR2NkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdE1pc2Moc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAsIGdjZCgwLCAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgZ2NkKDEsIDApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygtMSwgZ2NkKC0xLCAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgZ2NkKDAsIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygtMSwgZ2NkKDAsIC0xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgZ2NkKDcsIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygtMSwgZ2NkKDcsIC0xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgZ2NkKC0yMywgMTUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMiwgZ2NkKDEyMCwgODQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygtMTIsIGdjZCg4NCwgLTEyMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2NkKDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdjZCgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgZ2NkKC0xLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIGdjZCgwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2NkKDcsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBnY2QoNywgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdjZCgtMjMsIDE1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMiwgZ2NkKDEyMCwgODQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xMiwgZ2NkKDg0LCAtMTIwKSkKIAogCiBkZWYgX2NvbXBvbmVudHMocik6CkBAIC0zNSw4ICsxMTEsOCBAQAogCiAgICAgZGVmIGFzc2VydFR5cGVkRXF1YWxzKHNlbGYsIGV4cGVjdGVkLCBhY3R1YWwpOgogICAgICAgICAiIiJBc3NlcnRzIHRoYXQgYm90aCB0aGUgdHlwZXMgYW5kIHZhbHVlcyBhcmUgdGhlIHNhbWUuIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR5cGUoZXhwZWN0ZWQpLCB0eXBlKGFjdHVhbCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBhY3R1YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShleHBlY3RlZCksIHR5cGUoYWN0dWFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQogCiAgICAgZGVmIGFzc2VydFJhaXNlc01lc3NhZ2Uoc2VsZiwgZXhjX3R5cGUsIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGFibGUsICphcmdzLCAqKmt3YXJncyk6CkBAIC00NCw0MiArMTIwLDczIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNhbGxhYmxlKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgZXhjZXB0IGV4Y190eXBlLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVzc2FnZSwgc3RyKGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCBzdHIoZSkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzIG5vdCByYWlzZWQiICUgZXhjX3R5cGUuX19uYW1lX18pCiAKICAgICBkZWYgdGVzdEluaXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgwLCAxKSwgX2NvbXBvbmVudHMoRigpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDcsIDEpLCBfY29tcG9uZW50cyhGKDcpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDcsIDMpLCBfY29tcG9uZW50cyhGKEYoNywgMykpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksIF9jb21wb25lbnRzKEYoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDcsIDEpLCBfY29tcG9uZW50cyhGKDcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNywgMyksIF9jb21wb25lbnRzKEYoRig3LCAzKSkpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgtMSwgMSksIF9jb21wb25lbnRzKEYoLTEsIDEpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKC0xLCAxKSwgX2NvbXBvbmVudHMoRigxLCAtMSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMSwgMSksIF9jb21wb25lbnRzKEYoLTIsIC0yKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgxLCAyKSwgX2NvbXBvbmVudHMoRig1LCAxMCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoNywgMTUpLCBfY29tcG9uZW50cyhGKDcsIDE1KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgxMCoqMjMsIDEpLCBfY29tcG9uZW50cyhGKDEwKioyMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMSwgMSksIF9jb21wb25lbnRzKEYoLTEsIDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEsIDEpLCBfY29tcG9uZW50cyhGKDEsIC0xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEsIDEpLCBfY29tcG9uZW50cyhGKC0yLCAtMikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLCAyKSwgX2NvbXBvbmVudHMoRig1LCAxMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg3LCAxNSksIF9jb21wb25lbnRzKEYoNywgMTUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAqKjIzLCAxKSwgX2NvbXBvbmVudHMoRigxMCoqMjMpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgzLCA3NyksIF9jb21wb25lbnRzKEYoRigzLCA3KSwgMTEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTksIDUpLCBfY29tcG9uZW50cyhGKDIsIEYoLTEwLCA5KSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgyNDg2LCAyNDg1KSwgX2NvbXBvbmVudHMoRihGKDIyLCA3KSwgRigzNTUsIDExMykpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoWmVyb0RpdmlzaW9uRXJyb3IsICJGcmFjdGlvbigxMiwgMCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRiwgMTIsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgMS41KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIDEuNSArIDNqKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRigxLCAyKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCAiMy8yIiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCAzLCAwaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCAzLCAxaikKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0SW5pdEZyb21GbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSwgMiksIF9jb21wb25lbnRzKEYoMi41KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLCBfY29tcG9uZW50cyhGKC0wLjApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMzYwMjg3OTcwMTg5NjM5NywgMzYwMjg3OTcwMTg5NjM5NjgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoMC4xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJ25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnLWluZicpKQorCisgICAgZGVmIHRlc3RJbml0RnJvbURlY2ltYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDExLCAxMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCcxLjEnKSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg3LCAyMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnMy41ZS0yJykpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCcuMDAwZTIwJykpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdzbmFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RGcm9tU3RyaW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoNSwgMSksIF9jb21wb25lbnRzKEYoIjUiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgzLCAyKSwgX2NvbXBvbmVudHMoRigiMy8yIikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMywgMiksIF9jb21wb25lbnRzKEYoIiBcbiAgKzMvMiIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKC0zLCAyKSwgX2NvbXBvbmVudHMoRigiLTMvMiAgIikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMTMsIDIpLCBfY29tcG9uZW50cyhGKCIgICAgMDEzLzAyIFxuICAiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgxMywgMiksIF9jb21wb25lbnRzKEYodSIgICAgMDEzLzAyIFxuICAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUsIDEpLCBfY29tcG9uZW50cyhGKCI1IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgzLCAyKSwgX2NvbXBvbmVudHMoRigiMy8yIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgzLCAyKSwgX2NvbXBvbmVudHMoRigiIFxuICArMy8yIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMywgMiksIF9jb21wb25lbnRzKEYoIi0zLzIgICIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTMsIDIpLCBfY29tcG9uZW50cyhGKCIgICAgMDEzLzAyIFxuICAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEzLCAyKSwgX2NvbXBvbmVudHMoRih1IiAgICAwMTMvMDIgXG4gICIpKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMTYsIDUpLCBfY29tcG9uZW50cyhGKCIgMy4yICIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKC0xNiwgNSksIF9jb21wb25lbnRzKEYodSIgLTMuMiAiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgtMywgMSksIF9jb21wb25lbnRzKEYodSIgLTMuICIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDMsIDUpLCBfY29tcG9uZW50cyhGKHUiIC42ICIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTYsIDUpLCBfY29tcG9uZW50cyhGKCIgMy4yICIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTE2LCA1KSwgX2NvbXBvbmVudHMoRih1IiAtMy4yICIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTMsIDEpLCBfY29tcG9uZW50cyhGKHUiIC0zLiAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDMsIDUpLCBfY29tcG9uZW50cyhGKHUiIC42ICIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSwgMzEyNSksIF9jb21wb25lbnRzKEYoIjMyLmUtNSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAwMDAwMCwgMSksIF9jb21wb25lbnRzKEYoIjFFKzA2IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMTIzMDAsIDEpLCBfY29tcG9uZW50cyhGKCItMS4yM2U0IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigiIC4wZSswXHQiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLCBfY29tcG9uZW50cyhGKCItMC4wMDBlMCIpKSkKIAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKQEAgLTg5LDYgKzE5Niw5IEBACiAgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJzMvJyIsCiAgICAgICAgICAgICBGLCAiMy8iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJy8yJyIsCisgICAgICAgICAgICBGLCAiLzIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCiAgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJzMgLzInIiwKICAgICAgICAgICAgIEYsICIzIC8yIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKApAQCAtMTA0LDEwICsyMTQsNiBAQAogICAgICAgICAgICAgVmFsdWVFcnJvciwgIkludmFsaWQgbGl0ZXJhbCBmb3IgRnJhY3Rpb246ICczYTInIiwKICAgICAgICAgICAgIEYsICIzYTIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICAjIE9ubHkgcGFyc2Ugb3JkaW5hcnkgZGVjaW1hbHMsIG5vdCBzY2llbnRpZmljIGZvcm0uCi0gICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJzMuMmU0JyIsCi0gICAgICAgICAgICBGLCAiMy4yZTQiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCiAgICAgICAgICAgICAjIERvbid0IGFjY2VwdCBjb21iaW5hdGlvbnMgb2YgZGVjaW1hbHMgYW5kIGZyYWN0aW9ucy4KICAgICAgICAgICAgIFZhbHVlRXJyb3IsICJJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAnMy83LjInIiwKICAgICAgICAgICAgIEYsICIzLzcuMiIpCkBAIC0xMjMsMzMgKzIyOSwzMyBAQAogICAgIGRlZiB0ZXN0SW1tdXRhYmxlKHNlbGYpOgogICAgICAgICByID0gRig3LCAzKQogICAgICAgICByLl9faW5pdF9fKDIsIDE1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoNywgMyksIF9jb21wb25lbnRzKHIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg3LCAzKSwgX2NvbXBvbmVudHMocikpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHIsICdudW1lcmF0b3InLCAxMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHIsICdkZW5vbWluYXRvcicsIDYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCg3LCAzKSwgX2NvbXBvbmVudHMocikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDcsIDMpLCBfY29tcG9uZW50cyhyKSkKIAogICAgICAgICAjIEJ1dCBpZiB5b3UgX3JlYWxseV8gbmVlZCB0bzoKICAgICAgICAgci5fbnVtZXJhdG9yID0gNAogICAgICAgICByLl9kZW5vbWluYXRvciA9IDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDQsIDIpLCBfY29tcG9uZW50cyhyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNCwgMiksIF9jb21wb25lbnRzKHIpKQogICAgICAgICAjIFdoaWNoIGJyZWFrcyBzb21lIGltcG9ydGFudCBvcGVyYXRpb25zOgotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhGKDQsIDIpLCByKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKEYoNCwgMiksIHIpCiAKICAgICBkZWYgdGVzdEZyb21GbG9hdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLmZyb21fZmxvYXQsIDMrNGopCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgxMCwgMSksIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgxMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwgMSksIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgxMCkpKQogICAgICAgICBiaWdpbnQgPSAxMjM0NTY3ODkwMTIzNDU2Nzg5Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChiaWdpbnQsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoYmlnaW50KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgwLCAxKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KC0wLjApKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDEwLCAxKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KDEwLjApKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKC01LCAyKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KC0yLjUpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDk5OTk5OTk5OTk5OTk5OTkxNjExMzkyLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KDFlMjMpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmxvYXQoMTAqKjIzKSwgZmxvYXQoRi5mcm9tX2Zsb2F0KDFlMjMpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDM2MDI4Nzk3MDE4OTYzOTcsIDExMjU4OTk5MDY4NDI2MjQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMy4yKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDMuMiwgZmxvYXQoRi5mcm9tX2Zsb2F0KDMuMikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiaWdpbnQsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoYmlnaW50KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoLTAuMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwgMSksIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgxMC4wKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC01LCAyKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KC0yLjUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoOTk5OTk5OTk5OTk5OTk5OTE2MTEzOTIsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgxZTIzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMTAqKjIzKSwgZmxvYXQoRi5mcm9tX2Zsb2F0KDFlMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMzYwMjg3OTcwMTg5NjM5NywgMTEyNTg5OTkwNjg0MjYyNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KDMuMikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMuMiwgZmxvYXQoRi5mcm9tX2Zsb2F0KDMuMikpKQogCiAgICAgICAgIGluZiA9IDFlMTAwMAogICAgICAgICBuYW4gPSBpbmYgLSBpbmYKQEAgLTE2NSwxMyArMjcxLDEzIEBACiAKICAgICBkZWYgdGVzdEZyb21EZWNpbWFsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYuZnJvbV9kZWNpbWFsLCAzKzRqKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGKDEwLCAxKSwgRi5mcm9tX2RlY2ltYWwoMTApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGKDApLCBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCItMCIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRig1LCAxMCksIEYuZnJvbV9kZWNpbWFsKERlY2ltYWwoIjAuNSIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRig1LCAxMDAwKSwgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiNWUtMyIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRig1MDAwKSwgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiNWUzIikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxIC0gRigxLCAxMCoqMzApLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCIwLiIgKyAiOSIgKiAzMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMTAsIDEpLCBGLmZyb21fZGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigwKSwgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiLTAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRig1LCAxMCksIEYuZnJvbV9kZWNpbWFsKERlY2ltYWwoIjAuNSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDUsIDEwMDApLCBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCI1ZS0zIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoNTAwMCksIEYuZnJvbV9kZWNpbWFsKERlY2ltYWwoIjVlMyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxIC0gRigxLCAxMCoqMzApLAorICAgICAgICAgICAgICAgICAgICAgICAgIEYuZnJvbV9kZWNpbWFsKERlY2ltYWwoIjAuIiArICI5IiAqIDMwKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAogICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgSW5maW5pdHkgdG8gRnJhY3Rpb24uIiwKQEAgLTIwMCwyOSArMzA2LDI5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoLTEsIG1hdGgudHJ1bmMoRigtMTEsIDEwKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoLTEsIGludChGKC0xMSwgMTApKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYm9vbChGKDAsIDEpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgYm9vbChGKDMsIDIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgYm9vbChGKDAsIDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBib29sKEYoMywgMikpKQogICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMSwgZmxvYXQoRigxLCAxMCkpKQogCiAgICAgICAgICMgQ2hlY2sgdGhhdCBfX2Zsb2F0X18gaXNuJ3QgaW1wbGVtZW50ZWQgYnkgY29udmVydGluZyB0aGUKICAgICAgICAgIyBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIHRvIGZsb2F0IGJlZm9yZSBkaXZpZGluZy4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIGxvbmcoJzInKjQwMCsnNycpKQotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFscygyLjAvMywKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgyLjAvMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQoRihsb25nKCcyJyo0MDArJzcnKSwgbG9uZygnMycqNDAwKycxJykpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMSswaiwgY29tcGxleChGKDEsMTApKSkKIAogCiAgICAgZGVmIHRlc3RBcml0aG1ldGljKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGKDEsIDIpLCBGKDEsIDEwKSArIEYoMiwgNSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEYoLTMsIDEwKSwgRigxLCAxMCkgLSBGKDIsIDUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGKDEsIDI1KSwgRigxLCAxMCkgKiBGKDIsIDUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGKDEsIDQpLCBGKDEsIDEwKSAvIEYoMiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigxLCAyKSwgRigxLCAxMCkgKyBGKDIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoLTMsIDEwKSwgRigxLCAxMCkgLSBGKDIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMSwgMjUpLCBGKDEsIDEwKSAqIEYoMiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigxLCA0KSwgRigxLCAxMCkgLyBGKDIsIDUpKQogICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDIsIEYoOSwgMTApIC8vIEYoMiwgNSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMTAqKjIzLCBGKDEwKioyMywgMSkgLy8gRigxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRigyLCAzKSwgRigtNywgMykgJSBGKDMsIDIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGKDgsIDI3KSwgRigyLCAzKSAqKiBGKDMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGKDI3LCA4KSwgRigyLCAzKSAqKiBGKC0zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDIsIDMpLCBGKC03LCAzKSAlIEYoMywgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRig4LCAyNyksIEYoMiwgMykgKiogRigzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDI3LCA4KSwgRigyLCAzKSAqKiBGKC0zKSkKICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygyLjAsIEYoNCkgKiogRigxLCAyKSkKICAgICAgICAgIyBXaWxsIHJldHVybiAxaiBpbiAzLjA6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvdywgRigtMSksIEYoMSwgMikpCkBAIC0yODgsNyArMzk0LDcgQEAKICAgICAgICAgICAgIFR5cGVFcnJvciwKICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBvcGVyYW5kIHR5cGUocykgZm9yICs6ICdGcmFjdGlvbicgYW5kICdEZWNpbWFsJyIsCiAgICAgICAgICAgICBvcGVyYXRvci5hZGQsIEYoMywxMSksIERlY2ltYWwoJzMuMTQxNTkyNicpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhGKDUsIDIpLCBEZWNpbWFsKCcyLjUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChGKDUsIDIpLCBEZWNpbWFsKCcyLjUnKSkKIAogICAgIGRlZiB0ZXN0Q29tcGFyaXNvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpIDwgRigyLCAzKSkKQEAgLTMwMSw2ICs0MDcsNTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpICE9IEYoMSwgMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpICE9IEYoMSwgMykpCiAKKyAgICBkZWYgdGVzdENvbXBhcmlzb25zRHVtbXlSYXRpb25hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPT0gRHVtbXlSYXRpb25hbCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKER1bW15UmF0aW9uYWwoMSwgMikgPT0gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpID09IER1bW15UmF0aW9uYWwoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRHVtbXlSYXRpb25hbCgzLCA0KSA9PSBGKDEsIDIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpIDwgRHVtbXlSYXRpb25hbCgzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpIDwgRHVtbXlSYXRpb25hbCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpIDwgRHVtbXlSYXRpb25hbCgxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpID4gRHVtbXlSYXRpb25hbCgzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpID4gRHVtbXlSYXRpb25hbCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPiBEdW1teVJhdGlvbmFsKDEsIDcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8PSBEdW1teVJhdGlvbmFsKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8PSBEdW1teVJhdGlvbmFsKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMSwgMikgPD0gRHVtbXlSYXRpb25hbCgxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpID49IER1bW15UmF0aW9uYWwoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpID49IER1bW15UmF0aW9uYWwoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpID49IER1bW15UmF0aW9uYWwoMSwgNykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKER1bW15UmF0aW9uYWwoMSwgMikgPCBGKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPCBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPCBGKDEsIDcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPiBGKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPiBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRHVtbXlSYXRpb25hbCgxLCAyKSA+IEYoMSwgNykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpIDw9IEYoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpIDw9IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRHVtbXlSYXRpb25hbCgxLCAyKSA8PSBGKDEsIDcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPj0gRigzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKER1bW15UmF0aW9uYWwoMSwgMikgPj0gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKER1bW15UmF0aW9uYWwoMSwgMikgPj0gRigxLCA3KSkKKworICAgIGRlZiB0ZXN0Q29tcGFyaXNvbnNEdW1teUZsb2F0KHNlbGYpOgorICAgICAgICB4ID0gRHVtbXlGbG9hdCgxLi8zLikKKyAgICAgICAgeSA9IEYoMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggIT0geSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggPCB5IG9yIHggPiB5KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHggPT0geSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh4IDw9IHkgYW5kIHggPj0geSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgIT0geCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgPCB4IG9yIHkgPiB4KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHkgPT0geCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh5IDw9IHggYW5kIHkgPj0geCkKKwogICAgIGRlZiB0ZXN0TWl4ZWRMZXNzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoMiA8IEYoNSwgMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMiA8IEYoNCwgMikpCkBAIC0zMTIsNiArNDYyLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjQgPCBGKDEsIDIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDAuNSA8IEYoMSwgMikpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbG9hdCgnaW5mJykgPCBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmxvYXQoJy1pbmYnKSA8IEYoMCwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsb2F0KCduYW4nKSA8IEYoLTMsIDcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8IGZsb2F0KCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDE3LCAxMikgPCBmbG9hdCgnLWluZicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMTQ0LCAtODkpIDwgZmxvYXQoJ25hbicpKQorCiAgICAgZGVmIHRlc3RNaXhlZExlc3NFcXVhbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuNSA8PSBGKDEsIDIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDAuNiA8PSBGKDEsIDIpKQpAQCAtMzIyLDYgKzQ3OSwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoRig0LCAyKSA8PSAyKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoNSwgMikgPD0gMikKIAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsb2F0KCdpbmYnKSA8PSBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmxvYXQoJy1pbmYnKSA8PSBGKDAsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbG9hdCgnbmFuJykgPD0gRigtMywgNykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpIDw9IGZsb2F0KCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDE3LCAxMikgPD0gZmxvYXQoJy1pbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDE0NCwgLTg5KSA8PSBmbG9hdCgnbmFuJykpCisKICAgICBkZWYgdGVzdEJpZ0Zsb2F0Q29tcGFyaXNvbnMoc2VsZik6CiAgICAgICAgICMgQmVjYXVzZSAxMCoqMjMgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhIGZsb2F0OgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMTAqKjIzKSA9PSBmbG9hdCgxMCoqMjMpKQpAQCAtMzM0LDggKzQ5OCwyMSBAQAogCiAgICAgZGVmIHRlc3RCaWdDb21wbGV4Q29tcGFyaXNvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxMCoqMjMpID09IGNvbXBsZXgoMTAqKjIzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMTAqKjIzKSA+IGNvbXBsZXgoMTAqKjIzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEwKioyMykgPD0gY29tcGxleCgxMCoqMjMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmd0LCBGKDEwKioyMyksIGNvbXBsZXgoMTAqKjIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSwgRigxMCoqMjMpLCBjb21wbGV4KDEwKioyMykpCisKKyAgICAgICAgeCA9IEYoMywgOCkKKyAgICAgICAgeiA9IGNvbXBsZXgoMC4zNzUsIDAuMCkKKyAgICAgICAgdyA9IGNvbXBsZXgoMC4zNzUsIDAuMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggPT0geikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh4ICE9IHopCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeCA9PSB3KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCAhPSB3KQorICAgICAgICBmb3Igb3AgaW4gb3BlcmF0b3IubHQsIG9wZXJhdG9yLmxlLCBvcGVyYXRvci5ndCwgb3BlcmF0b3IuZ2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wLCB4LCB6KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgeiwgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3AsIHgsIHcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wLCB3LCB4KQogCiAgICAgZGVmIHRlc3RNaXhlZEVxdWFsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoMC41ID09IEYoMSwgMikpCkBAIC0zNDYsMjAgKzUyMywyNCBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDIgPT0gRigzLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoNCwgMikgPT0gMikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDUsIDIpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRig1LCAyKSA9PSBmbG9hdCgnbmFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmxvYXQoJ25hbicpID09IEYoMywgNykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRig1LCAyKSA9PSBmbG9hdCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmxvYXQoJy1pbmYnKSA9PSBGKDIsIDUpKQogCiAgICAgZGVmIHRlc3RTdHJpbmdpZmljYXRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJGcmFjdGlvbig3LCAzKSIsIHJlcHIoRig3LCAzKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJGcmFjdGlvbig2MjgzMTg1MzA3LCAyMDAwMDAwMDAwKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoRignMy4xNDE1OTI2NTM1JykpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiRnJhY3Rpb24oLTEsIDEwMDAwMDAwMDAwMDAwMDAwMDAwMCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKEYoMSwgLTEwKioyMCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiNy8zIiwgc3RyKEYoNywgMykpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiNyIsIHN0cihGKDcsIDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRnJhY3Rpb24oNywgMykiLCByZXByKEYoNywgMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGcmFjdGlvbig2MjgzMTg1MzA3LCAyMDAwMDAwMDAwKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihGKCczLjE0MTU5MjY1MzUnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZyYWN0aW9uKC0xLCAxMDAwMDAwMDAwMDAwMDAwMDAwMDApIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByKEYoMSwgLTEwKioyMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI3LzMiLCBzdHIoRig3LCAzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjciLCBzdHIoRig3LCAxKSkpCiAKICAgICBkZWYgdGVzdEhhc2goc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhhc2goMi41KSwgaGFzaChGKDUsIDIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGFzaCgxMCoqNTApLCBoYXNoKEYoMTAqKjUwKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGhhc2goZmxvYXQoMTAqKjIzKSksIGhhc2goRigxMCoqMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKDIuNSksIGhhc2goRig1LCAyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCgxMCoqNTApLCBoYXNoKEYoMTAqKjUwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaGFzaChmbG9hdCgxMCoqMjMpKSwgaGFzaChGKDEwKioyMykpKQogCiAgICAgZGVmIHRlc3RBcHByb3hpbWF0ZVBpKHNlbGYpOgogICAgICAgICAjIEFsZ29yaXRobSBib3Jyb3dlZCBmcm9tCkBAIC0zNzIsNyArNTUzLDcgQEAKICAgICAgICAgICAgIGQsIGRhID0gZCtkYSwgZGErMzIKICAgICAgICAgICAgIHQgPSAodCAqIG4pIC8gZAogICAgICAgICAgICAgcyArPSB0Ci0gICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWxzKG1hdGgucGksIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwobWF0aC5waSwgcykKIAogICAgIGRlZiB0ZXN0QXBwcm94aW1hdGVDb3MxKHNlbGYpOgogICAgICAgICAjIEFsZ29yaXRobSBib3Jyb3dlZCBmcm9tCkBAIC0zODYsNyArNTY3LDcgQEAKICAgICAgICAgICAgIG51bSAqPSB4ICogeAogICAgICAgICAgICAgc2lnbiAqPSAtMQogICAgICAgICAgICAgcyArPSBudW0gLyBmYWN0ICogc2lnbgotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFscyhtYXRoLmNvcygxKSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChtYXRoLmNvcygxKSwgcykKIAogICAgIGRlZiB0ZXN0X2NvcHlfZGVlcGNvcHlfcGlja2xlKHNlbGYpOgogICAgICAgICByID0gRigxMywgNykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5IGIvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKaW5kZXggMTY1NGJlMC4uNzcxZjU5OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKQEAgLTIsNyArMiw3IEBACiAKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dCwgcnVuX3VuaXR0ZXN0CiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBzeXMsIG9zCitpbXBvcnQgc3lzCiAKIGNsYXNzIEZyb3plblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9mcm96ZW4oc2VsZik6CkBAIC0yMywxNiArMjMsMTUgQEAKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgeDoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fLnNwYW0gZmFpbGVkOiIgKyBzdHIoeCkpCiAKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAibWFjIjogICMgT24gdGhlIE1hYyB0aGlzIGltcG9ydCBkb2VzIHN1Y2NlZWQuCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fLmZvbyBzaG91bGQgaGF2ZSBmYWlsZWQiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fLmZvbworICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXy5mb28gc2hvdWxkIGhhdmUgZmFpbGVkIikKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdGRvdXQuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hlbGxvIHdvcmxkLi4uXG5IZWxsbyB3b3JsZC4uLlxuSGVsbG8gd29ybGQuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0hlbGxvIHdvcmxkLi4uXG5IZWxsbyB3b3JsZC4uLlxuSGVsbG8gd29ybGQuLi5cbicpCiAKICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX2hlbGxvX18nXQogICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18nXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQppbmRleCAxYzJjZWViLi45MTk5NTgyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQpAQCAtMSwxNyArMSwyNCBAQAogIiIiVGVzdCBzY3JpcHQgZm9yIGZ0cGxpYiBtb2R1bGUuIiIiCiAKLSMgTW9kaWZpZWQgYnkgR2lhbXBhb2xvIFJvZG9sYScgdG8gdGVzdCBGVFAgY2xhc3MgYW5kIElQdjYgZW52aXJvbm1lbnQKKyMgTW9kaWZpZWQgYnkgR2lhbXBhb2xvIFJvZG9sYScgdG8gdGVzdCBGVFAgY2xhc3MsIElQdjYgYW5kIFRMUworIyBlbnZpcm9ubWVudAogCiBpbXBvcnQgZnRwbGliCi1pbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgYXN5bmNvcmUKIGltcG9ydCBhc3luY2hhdAogaW1wb3J0IHNvY2tldAogaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcwordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCiAKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgSE9TVAordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKIAogIyB0aGUgZHVtbXkgZGF0YSByZXR1cm5lZCBieSBzZXJ2ZXIgb3ZlciB0aGUgZGF0YSBjaGFubmVsIHdoZW4KQEAgLTIyLDYgKzI5LDcgQEAKIAogCiBjbGFzcyBEdW1teURUUEhhbmRsZXIoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CisgICAgZHRwX2Nvbm5fY2xvc2VkID0gRmFsc2UKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uLCBiYXNlY2xhc3MpOgogICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCkBAIC0zMiwxMiArNDAsMjIgQEAKICAgICAgICAgc2VsZi5iYXNlY2xhc3MubGFzdF9yZWNlaXZlZF9kYXRhICs9IHNlbGYucmVjdigxMDI0KQogCiAgICAgZGVmIGhhbmRsZV9jbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5iYXNlY2xhc3MucHVzaCgnMjI2IHRyYW5zZmVyIGNvbXBsZXRlJykKLSAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICMgWFhYOiB0aGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIG1hbnkgdGltZXMgaW4gYSByb3cgZm9yIGEgc2luZ2xlCisgICAgICAgICMgY29ubmVjdGlvbiwgaW5jbHVkaW5nIGluIGNsZWFyLXRleHQgKG5vbi1UTFMpIG1vZGUuCisgICAgICAgICMgKGJlaGF2aW91ciB3aXRuZXNzZWQgd2l0aCB0ZXN0X2RhdGFfY29ubmVjdGlvbikKKyAgICAgICAgaWYgbm90IHNlbGYuZHRwX2Nvbm5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5iYXNlY2xhc3MucHVzaCgnMjI2IHRyYW5zZmVyIGNvbXBsZXRlJykKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5kdHBfY29ubl9jbG9zZWQgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQogCiAKIGNsYXNzIER1bW15RlRQSGFuZGxlcihhc3luY2hhdC5hc3luY19jaGF0KToKIAorICAgIGR0cF9oYW5kbGVyID0gRHVtbXlEVFBIYW5kbGVyCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CiAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubikKICAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcigiXHJcbiIpCkBAIC00Niw2ICs2NCw3IEBACiAgICAgICAgIHNlbGYubGFzdF9yZWNlaXZlZF9jbWQgPSBOb25lCiAgICAgICAgIHNlbGYubGFzdF9yZWNlaXZlZF9kYXRhID0gJycKICAgICAgICAgc2VsZi5uZXh0X3Jlc3BvbnNlID0gJycKKyAgICAgICAgc2VsZi5yZXN0ID0gTm9uZQogICAgICAgICBzZWxmLnB1c2goJzIyMCB3ZWxjb21lJykKIAogICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6CkBAIC04MCwzOCArOTksMzggQEAKICAgICAgICAgYWRkciA9IG1hcChpbnQsIGFyZy5zcGxpdCgnLCcpKQogICAgICAgICBpcCA9ICclZC4lZC4lZC4lZCcgJXR1cGxlKGFkZHJbOjRdKQogICAgICAgICBwb3J0ID0gKGFkZHJbNF0gKiAyNTYpICsgYWRkcls1XQotICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9MikKLSAgICAgICAgc2VsZi5kdHAgPSBEdW1teURUUEhhbmRsZXIocywgYmFzZWNsYXNzPXNlbGYpCisgICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQogICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKIAogICAgIGRlZiBjbWRfcGFzdihzZWxmLCBhcmcpOgogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCiAgICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCiAgICAgICAgIHNvY2subGlzdGVuKDUpCi0gICAgICAgIHNvY2suc2V0dGltZW91dCgyKQorICAgICAgICBzb2NrLnNldHRpbWVvdXQoMTApCiAgICAgICAgIGlwLCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzoyXQogICAgICAgICBpcCA9IGlwLnJlcGxhY2UoJy4nLCAnLCcpCiAgICAgICAgIHAxLCBwMiA9IGRpdm1vZChwb3J0LCAyNTYpCiAgICAgICAgIHNlbGYucHVzaCgnMjI3IGVudGVyaW5nIHBhc3NpdmUgbW9kZSAoJXMsJWQsJWQpJyAlKGlwLCBwMSwgcDIpKQogICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQotICAgICAgICBzZWxmLmR0cCA9IER1bW15RFRQSGFuZGxlcihjb25uLCBiYXNlY2xhc3M9c2VsZikKKyAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKGNvbm4sIGJhc2VjbGFzcz1zZWxmKQogCiAgICAgZGVmIGNtZF9lcHJ0KHNlbGYsIGFyZyk6CiAgICAgICAgIGFmLCBpcCwgcG9ydCA9IGFyZy5zcGxpdChhcmdbMF0pWzE6LTFdCiAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKLSAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTIpCi0gICAgICAgIHNlbGYuZHRwID0gRHVtbXlEVFBIYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQorICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9MTApCisgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKICAgICAgICAgc2VsZi5wdXNoKCcyMDAgYWN0aXZlIGRhdGEgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpCiAKICAgICBkZWYgY21kX2Vwc3Yoc2VsZiwgYXJnKToKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2KQogICAgICAgICBzb2NrLmJpbmQoKHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMF0sIDApKQogICAgICAgICBzb2NrLmxpc3Rlbig1KQotICAgICAgICBzb2NrLnNldHRpbWVvdXQoMikKKyAgICAgICAgc29jay5zZXR0aW1lb3V0KDEwKQogICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgIHNlbGYucHVzaCgnMjI5IGVudGVyaW5nIGV4dGVuZGVkIHBhc3NpdmUgbW9kZSAofHx8JWR8KScgJXBvcnQpCiAgICAgICAgIGNvbm4sIGFkZHIgPSBzb2NrLmFjY2VwdCgpCi0gICAgICAgIHNlbGYuZHRwID0gRHVtbXlEVFBIYW5kbGVyKGNvbm4sIGJhc2VjbGFzcz1zZWxmKQorICAgICAgICBzZWxmLmR0cCA9IHNlbGYuZHRwX2hhbmRsZXIoY29ubiwgYmFzZWNsYXNzPXNlbGYpCiAKICAgICBkZWYgY21kX2VjaG8oc2VsZiwgYXJnKToKICAgICAgICAgIyBzZW5kcyBiYWNrIHRoZSByZWNlaXZlZCBzdHJpbmcgKHVzZWQgYnkgdGhlIHRlc3Qgc3VpdGUpCkBAIC0xNjAsMTAgKzE3OSwxOSBAQAogICAgIGRlZiBjbWRfc3RvcihzZWxmLCBhcmcpOgogICAgICAgICBzZWxmLnB1c2goJzEyNSBzdG9yIG9rJykKIAorICAgIGRlZiBjbWRfcmVzdChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnJlc3QgPSBhcmcKKyAgICAgICAgc2VsZi5wdXNoKCczNTAgcmVzdCBvaycpCisKICAgICBkZWYgY21kX3JldHIoc2VsZiwgYXJnKToKICAgICAgICAgc2VsZi5wdXNoKCcxMjUgcmV0ciBvaycpCi0gICAgICAgIHNlbGYuZHRwLnB1c2goUkVUUl9EQVRBKQorICAgICAgICBpZiBzZWxmLnJlc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvZmZzZXQgPSBpbnQoc2VsZi5yZXN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2Zmc2V0ID0gMAorICAgICAgICBzZWxmLmR0cC5wdXNoKFJFVFJfREFUQVtvZmZzZXQ6XSkKICAgICAgICAgc2VsZi5kdHAuY2xvc2Vfd2hlbl9kb25lKCkKKyAgICAgICAgc2VsZi5yZXN0ID0gTm9uZQogCiAgICAgZGVmIGNtZF9saXN0KHNlbGYsIGFyZyk6CiAgICAgICAgIHNlbGYucHVzaCgnMTI1IGxpc3Qgb2snKQpAQCAtMjI2LDEyICsyNTQsMTU2IEBACiAgICAgICAgIHJhaXNlCiAKIAoraWYgc3NsIGlzIG5vdCBOb25lOgorCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImtleWNlcnQucGVtIikKKworICAgIGNsYXNzIFNTTENvbm5lY3Rpb24ob2JqZWN0LCBhc3luY29yZS5kaXNwYXRjaGVyKToKKyAgICAgICAgIiIiQW4gYXN5bmNvcmUuZGlzcGF0Y2hlciBzdWJjbGFzcyBzdXBwb3J0aW5nIFRMUy9TU0wuIiIiCisKKyAgICAgICAgX3NzbF9hY2NlcHRpbmcgPSBGYWxzZQorICAgICAgICBfc3NsX2Nsb3NpbmcgPSBGYWxzZQorCisgICAgICAgIGRlZiBzZWN1cmVfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29ja2V0LCBzdXBwcmVzc19yYWdnZWRfZW9mcz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IFRydWUKKworICAgICAgICBkZWYgX2RvX3NzbF9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBGYWxzZQorCisgICAgICAgIGRlZiBfZG9fc3NsX3NodXRkb3duKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fc3NsX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzZWxmLnNvY2tldC51bndyYXAoKQorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgIyBBbnkgInNvY2tldCBlcnJvciIgY29ycmVzcG9uZHMgdG8gYSBTU0xfRVJST1JfU1lTQ0FMTCByZXR1cm4KKyAgICAgICAgICAgICAgICAjIGZyb20gT3BlblNTTCdzIFNTTF9zaHV0ZG93bigpLCBjb3JyZXNwb25kaW5nIHRvIGEKKyAgICAgICAgICAgICAgICAjIGNsb3NlZCBzb2NrZXQgY29uZGl0aW9uLiBTZWUgYWxzbzoKKyAgICAgICAgICAgICAgICAjIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9vcGVuc3NsLXVzZXJzQG9wZW5zc2wub3JnL21zZzYwNzEwLmh0bWwKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLl9zc2xfY2xvc2luZyA9IEZhbHNlCisgICAgICAgICAgICBzdXBlcihTU0xDb25uZWN0aW9uLCBzZWxmKS5jbG9zZSgpCisKKyAgICAgICAgZGVmIGhhbmRsZV9yZWFkX2V2ZW50KHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5fc3NsX2FjY2VwdGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3NsX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX3NodXRkb3duKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3VwZXIoU1NMQ29ubmVjdGlvbiwgc2VsZikuaGFuZGxlX3JlYWRfZXZlbnQoKQorCisgICAgICAgIGRlZiBoYW5kbGVfd3JpdGVfZXZlbnQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLl9zc2xfYWNjZXB0aW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zc2xfY2xvc2luZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfc2h1dGRvd24oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdXBlcihTU0xDb25uZWN0aW9uLCBzZWxmKS5oYW5kbGVfd3JpdGVfZXZlbnQoKQorCisgICAgICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihTU0xDb25uZWN0aW9uLCBzZWxmKS5zZW5kKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfRU9GLCBzc2wuU1NMX0VSUk9SX1pFUk9fUkVUVVJOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGRlZiByZWN2KHNlbGYsIGJ1ZmZlcl9zaXplKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoU1NMQ29ubmVjdGlvbiwgc2VsZikucmVjdihidWZmZXJfc2l6ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX0VPRiwgc3NsLlNTTF9FUlJPUl9aRVJPX1JFVFVSTik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShzZWxmLnNvY2tldCwgc3NsLlNTTFNvY2tldCkgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuX3NzbG9iaiBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX3NodXRkb3duKCkKKworCisgICAgY2xhc3MgRHVtbXlUTFNfRFRQSGFuZGxlcihTU0xDb25uZWN0aW9uLCBEdW1teURUUEhhbmRsZXIpOgorICAgICAgICAiIiJBIER1bW15RFRQSGFuZGxlciBzdWJjbGFzcyBzdXBwb3J0aW5nIFRMUy9TU0wuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4sIGJhc2VjbGFzcyk6CisgICAgICAgICAgICBEdW1teURUUEhhbmRsZXIuX19pbml0X18oc2VsZiwgY29ubiwgYmFzZWNsYXNzKQorICAgICAgICAgICAgaWYgc2VsZi5iYXNlY2xhc3Muc2VjdXJlX2RhdGFfY2hhbm5lbDoKKyAgICAgICAgICAgICAgICBzZWxmLnNlY3VyZV9jb25uZWN0aW9uKCkKKworCisgICAgY2xhc3MgRHVtbXlUTFNfRlRQSGFuZGxlcihTU0xDb25uZWN0aW9uLCBEdW1teUZUUEhhbmRsZXIpOgorICAgICAgICAiIiJBIER1bW15RlRQSGFuZGxlciBzdWJjbGFzcyBzdXBwb3J0aW5nIFRMUy9TU0wuIiIiCisKKyAgICAgICAgZHRwX2hhbmRsZXIgPSBEdW1teVRMU19EVFBIYW5kbGVyCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICAgICAgRHVtbXlGVFBIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgICAgICBzZWxmLnNlY3VyZV9kYXRhX2NoYW5uZWwgPSBGYWxzZQorCisgICAgICAgIGRlZiBjbWRfYXV0aChzZWxmLCBsaW5lKToKKyAgICAgICAgICAgICIiIlNldCB1cCBzZWN1cmUgY29udHJvbCBjaGFubmVsLiIiIgorICAgICAgICAgICAgc2VsZi5wdXNoKCcyMzQgQVVUSCBUTFMgc3VjY2Vzc2Z1bCcpCisgICAgICAgICAgICBzZWxmLnNlY3VyZV9jb25uZWN0aW9uKCkKKworICAgICAgICBkZWYgY21kX3Bic3ooc2VsZiwgbGluZSk6CisgICAgICAgICAgICAiIiJOZWdvdGlhdGUgc2l6ZSBvZiBidWZmZXIgZm9yIHNlY3VyZSBkYXRhIHRyYW5zZmVyLgorICAgICAgICAgICAgRm9yIFRMUy9TU0wgdGhlIG9ubHkgdmFsaWQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgaXMgJzAnLgorICAgICAgICAgICAgQW55IG90aGVyIHZhbHVlIGlzIGFjY2VwdGVkIGJ1dCBpZ25vcmVkLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBzZWxmLnB1c2goJzIwMCBQQlNaPTAgc3VjY2Vzc2Z1bC4nKQorCisgICAgICAgIGRlZiBjbWRfcHJvdChzZWxmLCBsaW5lKToKKyAgICAgICAgICAgICIiIlNldHVwIHVuL3NlY3VyZSBkYXRhIGNoYW5uZWwuIiIiCisgICAgICAgICAgICBhcmcgPSBsaW5lLnVwcGVyKCkKKyAgICAgICAgICAgIGlmIGFyZyA9PSAnQyc6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCcyMDAgUHJvdGVjdGlvbiBzZXQgdG8gQ2xlYXInKQorICAgICAgICAgICAgICAgIHNlbGYuc2VjdXJlX2RhdGFfY2hhbm5lbCA9IEZhbHNlCisgICAgICAgICAgICBlbGlmIGFyZyA9PSAnUCc6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCcyMDAgUHJvdGVjdGlvbiBzZXQgdG8gUHJpdmF0ZScpCisgICAgICAgICAgICAgICAgc2VsZi5zZWN1cmVfZGF0YV9jaGFubmVsID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goIjUwMiBVbnJlY29nbml6ZWQgUFJPVCB0eXBlICh1c2UgQyBvciBQKS4iKQorCisKKyAgICBjbGFzcyBEdW1teVRMU19GVFBTZXJ2ZXIoRHVtbXlGVFBTZXJ2ZXIpOgorICAgICAgICBoYW5kbGVyID0gRHVtbXlUTFNfRlRQSGFuZGxlcgorCisKIGNsYXNzIFRlc3RGVFBDbGFzcyhUZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlGVFBTZXJ2ZXIoKEhPU1QsIDApKQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PTEwKQogICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC0zMTYsNiArNDg4LDE1IEBACiAgICAgICAgIHNlbGYuY2xpZW50LnJldHJiaW5hcnkoJ3JldHInLCByZWNlaXZlZC5hcHBlbmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihyZWNlaXZlZCksIFJFVFJfREFUQSkKIAorICAgIGRlZiB0ZXN0X3JldHJiaW5hcnlfcmVzdChzZWxmKToKKyAgICAgICAgZm9yIHJlc3QgaW4gKDAsIDEwLCAyMCk6CisgICAgICAgICAgICByZWNlaXZlZCA9IFtdCisgICAgICAgICAgICBzZWxmLmNsaWVudC5yZXRyYmluYXJ5KCdyZXRyJywgcmVjZWl2ZWQuYXBwZW5kLCByZXN0PXJlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4ocmVjZWl2ZWQpLCBSRVRSX0RBVEFbcmVzdDpdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J3Jlc3QgdGVzdCBjYXNlICVkICVkICVkJyAlIChyZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oJycuam9pbihyZWNlaXZlZCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oUkVUUl9EQVRBW3Jlc3Q6XSkpKQorCiAgICAgZGVmIHRlc3RfcmV0cmxpbmVzKHNlbGYpOgogICAgICAgICByZWNlaXZlZCA9IFtdCiAgICAgICAgIHNlbGYuY2xpZW50LnJldHJsaW5lcygncmV0cicsIHJlY2VpdmVkLmFwcGVuZCkKQEAgLTMzMSw2ICs1MTIsMTMgQEAKICAgICAgICAgc2VsZi5jbGllbnQuc3RvcmJpbmFyeSgnc3RvcicsIGYsIGNhbGxiYWNrPWxhbWJkYSB4OiBmbGFnLmFwcGVuZChOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZsYWcpCiAKKyAgICBkZWYgdGVzdF9zdG9yYmluYXJ5X3Jlc3Qoc2VsZik6CisgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTyhSRVRSX0RBVEEpCisgICAgICAgIGZvciByIGluICgzMCwgJzMwJyk6CisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnN0b3JiaW5hcnkoJ3N0b3InLCBmLCByZXN0PXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLmhhbmRsZXIucmVzdCwgc3RyKHIpKQorCiAgICAgZGVmIHRlc3Rfc3RvcmxpbmVzKHNlbGYpOgogICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oUkVUUl9EQVRBLnJlcGxhY2UoJ1xyXG4nLCAnXG4nKSkKICAgICAgICAgc2VsZi5jbGllbnQuc3RvcmxpbmVzKCdzdG9yJywgZikKQEAgLTM1Nyw3ICs1NDUsNyBAQAogCiAgICAgZGVmIHRlc3RfbWFrZXBhc3Yoc2VsZik6CiAgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLmNsaWVudC5tYWtlcGFzdigpCi0gICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCAyKQorICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgMTApCiAgICAgICAgIGNvbm4uY2xvc2UoKQogICAgICAgICAjIElQdjQgaXMgaW4gdXNlLCBqdXN0IG1ha2Ugc3VyZSBzZW5kX2Vwc3YgaGFzIG5vdCBiZWVuIHVzZWQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyLmxhc3RfcmVjZWl2ZWRfY21kLCAncGFzdicpCkBAIC0zODQsNyArNTcyLDcgQEAKIAogICAgIGRlZiB0ZXN0X21ha2VwYXN2KHNlbGYpOgogICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5jbGllbnQubWFrZXBhc3YoKQotICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgMikKKyAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQogICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyLmxhc3RfcmVjZWl2ZWRfY21kLCAnZXBzdicpCiAKQEAgLTM5OSw2ICs1ODcsODEgQEAKICAgICAgICAgcmV0cigpCiAKIAorY2xhc3MgVGVzdFRMU19GVFBDbGFzc01peGluKFRlc3RGVFBDbGFzcyk6CisgICAgIiIiUmVwZWF0IFRlc3RGVFBDbGFzcyB0ZXN0cyBzdGFydGluZyB0aGUgVExTIGxheWVyIGZvciBib3RoIGNvbnRyb2wKKyAgICBhbmQgZGF0YSBjb25uZWN0aW9ucyBmaXJzdC4KKyAgICAiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVRMU19GVFBTZXJ2ZXIoKEhPU1QsIDApKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAgICAjIGVuYWJsZSBUTFMKKyAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisKKworY2xhc3MgVGVzdFRMU19GVFBDbGFzcyhUZXN0Q2FzZSk6CisgICAgIiIiU3BlY2lmaWMgVExTX0ZUUCBjbGFzcyB0ZXN0cy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVRMU19GVFBTZXJ2ZXIoKEhPU1QsIDApKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3RfY29udHJvbF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKKyAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQorCisgICAgZGVmIHRlc3RfZGF0YV9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAjIGNsZWFyIHRleHQKKyAgICAgICAgc29jayA9IHNlbGYuY2xpZW50LnRyYW5zZmVyY21kKCdsaXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHNvY2ssIHNzbC5TU0xTb2NrZXQpCisgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnZvaWRyZXNwKCksICIyMjYgdHJhbnNmZXIgY29tcGxldGUiKQorCisgICAgICAgICMgc2VjdXJlZCwgYWZ0ZXIgUFJPVCBQCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisgICAgICAgIHNvY2sgPSBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgnbGlzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC52b2lkcmVzcCgpLCAiMjI2IHRyYW5zZmVyIGNvbXBsZXRlIikKKworICAgICAgICAjIFBST1QgQyBpcyBpc3N1ZWQsIHRoZSBjb25uZWN0aW9uIG11c3QgYmUgaW4gY2xlYXJ0ZXh0IGFnYWluCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfYygpCisgICAgICAgIHNvY2sgPSBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgnbGlzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC52b2lkcmVzcCgpLCAiMjI2IHRyYW5zZmVyIGNvbXBsZXRlIikKKworICAgIGRlZiB0ZXN0X2xvZ2luKHNlbGYpOgorICAgICAgICAjIGxvZ2luKCkgaXMgc3VwcG9zZWQgdG8gaW1wbGljaXRseSBzZWN1cmUgdGhlIGNvbnRyb2wgY29ubmVjdGlvbgorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKKyAgICAgICAgc2VsZi5jbGllbnQubG9naW4oKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBBVVRIIFRMUyBkb2Vzbid0IGdldCBpc3N1ZWQgYWdhaW4KKyAgICAgICAgc2VsZi5jbGllbnQubG9naW4oKQorCisgICAgZGVmIHRlc3RfYXV0aF9pc3N1ZWRfdHdpY2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmNsaWVudC5hdXRoKQorCisgICAgZGVmIHRlc3RfYXV0aF9zc2woc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnNzbF92ZXJzaW9uID0gc3NsLlBST1RPQ09MX1NTTHYzCisgICAgICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuY2xpZW50LmF1dGgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsaWVudC5zc2xfdmVyc2lvbiA9IHNzbC5QUk9UT0NPTF9UTFN2MQorCisKIGNsYXNzIFRlc3RUaW1lb3V0cyhUZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC00MzksNyArNzAyLDcgQEAKIAogICAgIGRlZiB0ZXN0VGltZW91dERlZmF1bHQoc2VsZik6CiAgICAgICAgICMgZGVmYXVsdCAtLSB1c2UgZ2xvYmFsIHNvY2tldCB0aW1lb3V0Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdHAgPSBmdHBsaWIuRlRQKCJsb2NhbGhvc3QiKQpAQCAtNDUxLDcgKzcxNCw3IEBACiAKICAgICBkZWYgdGVzdFRpbWVvdXROb25lKHNlbGYpOgogICAgICAgICAjIG5vIHRpbWVvdXQgLS0gZG8gbm90IHVzZSBnbG9iYWwgc29ja2V0IHRpbWVvdXQKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQogICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMzApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ0cCA9IGZ0cGxpYi5GVFAoImxvY2FsaG9zdCIsIHRpbWVvdXQ9Tm9uZSkKQEAgLTUwMCw2ICs3NjMsMTAgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRlc3RzLmFwcGVuZChUZXN0SVB2NkVudmlyb25tZW50KQorCisgICAgaWYgc3NsIGlzIG5vdCBOb25lOgorICAgICAgICB0ZXN0cy5leHRlbmQoW1Rlc3RUTFNfRlRQQ2xhc3NNaXhpbiwgVGVzdFRMU19GVFBDbGFzc10pCisKICAgICB0aHJlYWRfaW5mbyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQogICAgIHRyeToKICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weSBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CmluZGV4IGYzNzRjOGQuLmI2MzljYTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CkBAIC0xMywxNSArMTMsMjAgQEAKICAgICAgICAgc2VsZi5maSA9IEYoKQogICAgICAgICBzZWxmLmIgPSBiCiAKLSAgICBkZWYgY2Fubm90X3NldF9hdHRyKHNlbGYsb2JqLCBuYW1lLCB2YWx1ZSwgZXhjZXB0aW9ucyk6Ci0gICAgICAgICMgVGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBhcyBhIHRlc3QgKG5hbWUgZG9lc24ndCBzdGFydCB3aXRoICd0ZXN0JyksCi0gICAgICAgICMgYnV0IG1heSBiZSB1c2VkIGJ5IG90aGVyIHRlc3RzLgotICAgICAgICB0cnk6IHNldGF0dHIob2JqLCBuYW1lLCB2YWx1ZSkKLSAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbnM6IHBhc3MKLSAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBzZXQgJXMgdG8gJXIiICUgKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgdHJ5OiBkZWxhdHRyKG9iaiwgbmFtZSkKLSAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbnM6IHBhc3MKLSAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBkZWwgJXMiICUgbmFtZSkKKyAgICBkZWYgY2Fubm90X3NldF9hdHRyKHNlbGYsIG9iaiwgbmFtZSwgdmFsdWUsIGV4Y2VwdGlvbnMpOgorICAgICAgICAjIEhlbHBlciBtZXRob2QgZm9yIG90aGVyIHRlc3RzLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXRhdHRyKG9iaiwgbmFtZSwgdmFsdWUpCisgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBzZXQgJXMgdG8gJXIiICUgKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsYXR0cihvYmosIG5hbWUpCisgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBkZWwgJXMiICUgbmFtZSkKIAogCiBjbGFzcyBGdW5jdGlvblByb3BlcnRpZXNUZXN0KEZ1bmNBdHRyc1Rlc3QpOgpAQCAtMzEsMTYgKzM2LDE2IEBACiAKICAgICBkZWYgdGVzdF9kaXJfaW5jbHVkZXNfY29ycmVjdF9hdHRycyhzZWxmKToKICAgICAgICAgc2VsZi5iLmtub3duX2F0dHIgPSA3Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xygna25vd25fYXR0cicgaW4gZGlyKHNlbGYuYiksCi0gICAgICAgICAgICAic2V0IGF0dHJpYnV0ZXMgbm90IGluIGRpciBsaXN0aW5nIG9mIG1ldGhvZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2tub3duX2F0dHInLCBkaXIoc2VsZi5iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzZXQgYXR0cmlidXRlcyBub3QgaW4gZGlyIGxpc3Rpbmcgb2YgbWV0aG9kIikKICAgICAgICAgIyBUZXN0IG9uIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0IG9mIG1ldGhvZAogICAgICAgICBzZWxmLmYuYS5pbV9mdW5jLmtub3duX2F0dHIgPSA3Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xygna25vd25fYXR0cicgaW4gZGlyKHNlbGYuZi5hKSwKLSAgICAgICAgICAgICJzZXQgYXR0cmlidXRlIG9uIHVuYm91bmQgbWV0aG9kIGltcGxlbWVudGF0aW9uIGluIGNsYXNzIG5vdCBpbiAiCi0gICAgICAgICAgICAgICAgICAgICAiZGlyIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdrbm93bl9hdHRyJyBpbiBkaXIoc2VsZi5maS5hKSwKLSAgICAgICAgICAgICJzZXQgYXR0cmlidXRlIG9uIHVuYm91bmQgbWV0aG9kIGltcGxlbWVudGF0aW9ucywgc2hvdWxkIHNob3cgdXAiCi0gICAgICAgICAgICAgICAgICAgICAiIGluIG5leHQgZGlyIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigna25vd25fYXR0cicsIGRpcihzZWxmLmYuYSksCisgICAgICAgICAgICAgICAgICAgICAgICAic2V0IGF0dHJpYnV0ZSBvbiB1bmJvdW5kIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3Mgbm90IGluIGRpciIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2tub3duX2F0dHInLCBkaXIoc2VsZi5maS5hKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzZXQgYXR0cmlidXRlIG9uIHVuYm91bmQgbWV0aG9kIGltcGxlbWVudGF0aW9ucywgIgorICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBzaG93IHVwIGluIG5leHQgZGlyIikKIAogICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV9mdW5jdGlvbl9lcXVhbGl0eShzZWxmKToKICAgICAgICAgIyBCb2R5IG9mIGBkdXBsaWNhdGUnIGlzIHRoZSBleGFjdCBzYW1lIGFzIHNlbGYuYgpAQCAtNTYsOSArNjEsMjkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0KCksIDMpICMgc2VsZi5iIGFsd2F5cyByZXR1cm5zIDMsIGFyYml0cmFyaWx5CiAKICAgICBkZWYgdGVzdF9mdW5jX2dsb2JhbHMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfZ2xvYmFscywgZ2xvYmFscygpKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuYi5mdW5jX2dsb2JhbHMsIGdsb2JhbHMoKSkKICAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5iLCAnZnVuY19nbG9iYWxzJywgMiwgVHlwZUVycm9yKQogCisgICAgZGVmIHRlc3RfZnVuY19jbG9zdXJlKHNlbGYpOgorICAgICAgICBhID0gMTIKKyAgICAgICAgZGVmIGYoKTogcHJpbnQgYQorICAgICAgICBjID0gZi5mdW5jX2Nsb3N1cmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGMsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKyAgICAgICAgIyBkb24ndCBoYXZlIGEgdHlwZSBvYmplY3QgaGFuZHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjWzBdLl9fY2xhc3NfXy5fX25hbWVfXywgImNlbGwiKQorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihmLCAiZnVuY19jbG9zdXJlIiwgYywgVHlwZUVycm9yKQorCisgICAgZGVmIHRlc3RfZW1wdHlfY2VsbChzZWxmKToKKyAgICAgICAgZGVmIGYoKTogcHJpbnQgYQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLmZ1bmNfY2xvc3VyZVswXS5jZWxsX2NvbnRlbnRzCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byByZWFkIGFuIGVtcHR5IGNlbGwiKQorICAgICAgICBhID0gMTIKKwogICAgIGRlZiB0ZXN0X2Z1bmNfbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19uYW1lX18sICdiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuZnVuY19uYW1lLCAnYicpCkBAIC05NiwxNiArMTIxLDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mdW5jX2NvZGUsIGQuZnVuY19jb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMoKSwgNykKICAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKGQoKSwgNykKLSAgICAgICAgdHJ5OiBiLmZ1bmNfY29kZSA9IGMuZnVuY19jb2RlCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCi0gICAgICAgIGVsc2U6IHNlbGYuZmFpbCgKLSAgICAgICAgICAgICJmdW5jX2NvZGUgd2l0aCBkaWZmZXJlbnQgbnVtYmVycyBvZiBmcmVlIHZhcnMgc2hvdWxkIG5vdCBiZSAiCi0gICAgICAgICAgICAicG9zc2libGUiKQotICAgICAgICB0cnk6IGUuZnVuY19jb2RlID0gZC5mdW5jX2NvZGUKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKLSAgICAgICAgZWxzZTogc2VsZi5mYWlsKAotICAgICAgICAgICAgImZ1bmNfY29kZSB3aXRoIGRpZmZlcmVudCBudW1iZXJzIG9mIGZyZWUgdmFycyBzaG91bGQgbm90IGJlICIKLSAgICAgICAgICAgICJwb3NzaWJsZSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGIuZnVuY19jb2RlID0gYy5mdW5jX2NvZGUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImZ1bmNfY29kZSB3aXRoIGRpZmZlcmVudCBudW1iZXJzIG9mIGZyZWUgdmFycyBzaG91bGQgIgorICAgICAgICAgICAgICAgICAgICAgICJub3QgYmUgcG9zc2libGUiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlLmZ1bmNfY29kZSA9IGQuZnVuY19jb2RlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJmdW5jX2NvZGUgd2l0aCBkaWZmZXJlbnQgbnVtYmVycyBvZiBmcmVlIHZhcnMgc2hvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgICAibm90IGJlIHBvc3NpYmxlIikKIAogICAgIGRlZiB0ZXN0X2JsYW5rX2Z1bmNfZGVmYXVsdHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfZGVmYXVsdHMsIE5vbmUpCkBAIC0xMjYsMTMgKzE1NSwxNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X2Z1bmMoMywgNSksIDgpCiAgICAgICAgIGRlbCBzZWNvbmRfZnVuYy5mdW5jX2RlZmF1bHRzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kX2Z1bmMuZnVuY19kZWZhdWx0cywgTm9uZSkKLSAgICAgICAgdHJ5OiBzZWNvbmRfZnVuYygpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLSAgICAgICAgZWxzZTogc2VsZi5mYWlsKAotICAgICAgICAgICAgImZ1bmNfZGVmYXVsdHMgZG9lcyBub3QgdXBkYXRlOyBkZWxldGluZyBpdCBkb2VzIG5vdCByZW1vdmUgIgotICAgICAgICAgICAgInJlcXVpcmVtZW50IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2Vjb25kX2Z1bmMoKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJmdW5jX2RlZmF1bHRzIGRvZXMgbm90IHVwZGF0ZTsgZGVsZXRpbmcgaXQgZG9lcyBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmUgcmVxdWlyZW1lbnQiKQogCi1jbGFzcyBJbXBsaWNpdFJlZmVyZW5jZXNUZXN0KEZ1bmNBdHRyc1Rlc3QpOgorCitjbGFzcyBJbnN0YW5jZW1ldGhvZEF0dHJUZXN0KEZ1bmNBdHRyc1Rlc3QpOgogICAgIGRlZiB0ZXN0X2ltX2NsYXNzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5hLmltX2NsYXNzLCBzZWxmLmYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5hLmltX2NsYXNzLCBzZWxmLmYpCkBAIC0xNTksOSArMTkxLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5pZCgpLCBpZChzZWxmLmZpKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmZpLmlkKCksIGlkKHNlbGYuZikpCiAgICAgICAgICMgVGVzdCB1c2FnZQotICAgICAgICB0cnk6IHNlbGYuZi5pZC51bmtub3duX2F0dHIKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOiBwYXNzCi0gICAgICAgIGVsc2U6IHNlbGYuZmFpbCgidXNpbmcgdW5rbm93biBhdHRyaWJ1dGVzIHNob3VsZCByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZi5pZC51bmtub3duX2F0dHIKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJ1c2luZyB1bmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKICAgICAgICAgIyBUZXN0IGFzc2lnbm1lbnQgYW5kIGRlbGV0aW9uCiAgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZi5pZCwgJ3Vua25vd25fYXR0cicsIDIsIEF0dHJpYnV0ZUVycm9yKQogICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmZpLmlkLCAndW5rbm93bl9hdHRyJywgMiwgQXR0cmlidXRlRXJyb3IpCkBAIC0xNzEsMzUgKzIwNiw1MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5hLmtub3duX2F0dHIsIDcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5hLmtub3duX2F0dHIsIDcpCiAKKwogY2xhc3MgQXJiaXRyYXJ5RnVuY3Rpb25BdHRyVGVzdChGdW5jQXR0cnNUZXN0KToKICAgICBkZWYgdGVzdF9zZXRfYXR0cihzZWxmKToKKyAgICAgICAgIyBzZXR0aW5nIGF0dHJpYnV0ZXMgb25seSB3b3JrcyBvbiBmdW5jdGlvbiBvYmplY3RzCiAgICAgICAgIHNlbGYuYi5rbm93bl9hdHRyID0gNwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5rbm93bl9hdHRyLCA3KQogICAgICAgICBmb3IgZnVuYyBpbiBbc2VsZi5mLmEsIHNlbGYuZmkuYV06Ci0gICAgICAgICAgICB0cnk6IGZ1bmMua25vd25fYXR0ciA9IDcKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjogcGFzcwotICAgICAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJzZXR0aW5nIGF0dHJpYnV0ZXMgb24gbWV0aG9kcyBzaG91bGQgcmFpc2UgZXJyb3IiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMua25vd25fYXR0ciA9IDcKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2V0dGluZyBhdHRyaWJ1dGVzIG9uIG1ldGhvZHMgc2hvdWxkIHJhaXNlIGVycm9yIikKIAogICAgIGRlZiB0ZXN0X2RlbGV0ZV91bmtub3duX2F0dHIoc2VsZik6Ci0gICAgICAgIHRyeTogZGVsIHNlbGYuYi51bmtub3duX2F0dHIKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOiBwYXNzCi0gICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiZGVsZXRpbmcgdW5rbm93biBhdHRyaWJ1dGUgc2hvdWxkIHJhaXNlIFR5cGVFcnJvciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLmIudW5rbm93bl9hdHRyCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZGVsZXRpbmcgdW5rbm93biBhdHRyaWJ1dGUgc2hvdWxkIHJhaXNlIFR5cGVFcnJvciIpCiAKICAgICBkZWYgdGVzdF9zZXR0aW5nX2F0dHJzX2R1cGxpY2F0ZXMoc2VsZik6Ci0gICAgICAgIHRyeTogc2VsZi5mLmEua2xhc3MgPSBzZWxmLmYKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOiBwYXNzCi0gICAgICAgIGVsc2U6IHNlbGYuZmFpbCgic2V0dGluZyBhcmJpdHJhcnkgYXR0cmlidXRlIGluIHVuYm91bmQgZnVuY3Rpb24gIgotICAgICAgICAgICAgICAgICAgICAgICAgIiBzaG91bGQgcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmYuYS5rbGFzcyA9IHNlbGYuZgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNldHRpbmcgYXJiaXRyYXJ5IGF0dHJpYnV0ZSBpbiB1bmJvdW5kIGZ1bmN0aW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAiIHNob3VsZCByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCiAgICAgICAgIHNlbGYuZi5hLmltX2Z1bmMua2xhc3MgPSBzZWxmLmYKICAgICAgICAgZm9yIG1ldGhvZCBpbiBbc2VsZi5mLmEsIHNlbGYuZmkuYSwgc2VsZi5maS5hLmltX2Z1bmNdOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2Qua2xhc3MsIHNlbGYuZikKIAogICAgIGRlZiB0ZXN0X3Vuc2V0X2F0dHIoc2VsZik6CiAgICAgICAgIGZvciBmdW5jIGluIFtzZWxmLmIsIHNlbGYuZi5hLCBzZWxmLmZpLmFdOgotICAgICAgICAgICAgdHJ5OiAgZnVuYy5ub25fZXhpc3RlbnRfYXR0cgotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOiBwYXNzCi0gICAgICAgICAgICBlbHNlOiBzZWxmLmZhaWwoInVzaW5nIHVua25vd24gYXR0cmlidXRlcyBzaG91bGQgcmFpc2UgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdHRyaWJ1dGVFcnJvciIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnVuYy5ub25fZXhpc3RlbnRfYXR0cgorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1c2luZyB1bmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIHJhaXNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkF0dHJpYnV0ZUVycm9yIikKKwogCiBjbGFzcyBGdW5jdGlvbkRpY3RzVGVzdChGdW5jQXR0cnNUZXN0KToKICAgICBkZWYgdGVzdF9zZXR0aW5nX2RpY3RfdG9faW52YWxpZChzZWxmKToKQEAgLTIxNiwxMyArMjY2LDEzIEBACiAgICAgICAgICMgU2V0dGluZyBkaWN0IGlzIG9ubHkgcG9zc2libGUgb24gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0cwogICAgICAgICBzZWxmLmYuYS5pbV9mdW5jLl9fZGljdF9fID0gZAogICAgICAgICAjIFRlc3QgYXNzaWdubWVudAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHNlbGYuYi5fX2RpY3RfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzZWxmLmIuZnVuY19kaWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKGQsIHNlbGYuYi5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLCBzZWxmLmIuZnVuY19kaWN0KQogICAgICAgICAjIC4uLiBhbmQgb24gYWxsIHRoZSBkaWZmZXJlbnQgd2F5cyBvZiByZWZlcmVuY2luZyB0aGUgbWV0aG9kJ3MgZnVuYwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHNlbGYuZi5hLmltX2Z1bmMuX19kaWN0X18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi5mLmEuX19kaWN0X18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi5maS5hLmltX2Z1bmMuX19kaWN0X18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi5maS5hLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydElzKGQsIHNlbGYuZi5hLmltX2Z1bmMuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZCwgc2VsZi5mLmEuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZCwgc2VsZi5maS5hLmltX2Z1bmMuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZCwgc2VsZi5maS5hLl9fZGljdF9fKQogICAgICAgICAjIFRlc3QgdmFsdWUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIua25vd25fYXR0ciwgNykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19kaWN0X19bJ2tub3duX2F0dHInXSwgNykKQEAgLTIzNCwxMiArMjg0LDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5hLmtub3duX2F0dHIsIDcpCiAKICAgICBkZWYgdGVzdF9kZWxldGVfZnVuY19kaWN0KHNlbGYpOgotICAgICAgICB0cnk6IGRlbCBzZWxmLmIuX19kaWN0X18KLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcwotICAgICAgICBlbHNlOiBzZWxmLmZhaWwoImRlbGV0aW5nIGZ1bmN0aW9uIGRpY3Rpb25hcnkgc2hvdWxkIHJhaXNlIFR5cGVFcnJvciIpCi0gICAgICAgIHRyeTogZGVsIHNlbGYuYi5mdW5jX2RpY3QKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcwotICAgICAgICBlbHNlOiBzZWxmLmZhaWwoImRlbGV0aW5nIGZ1bmN0aW9uIGRpY3Rpb25hcnkgc2hvdWxkIHJhaXNlIFR5cGVFcnJvciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLmIuX19kaWN0X18KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZGVsZXRpbmcgZnVuY3Rpb24gZGljdGlvbmFyeSBzaG91bGQgcmFpc2UgVHlwZUVycm9yIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuYi5mdW5jX2RpY3QKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZGVsZXRpbmcgZnVuY3Rpb24gZGljdGlvbmFyeSBzaG91bGQgcmFpc2UgVHlwZUVycm9yIikKIAogICAgIGRlZiB0ZXN0X3VuYXNzaWduZWRfZGljdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19kaWN0X18sIHt9KQpAQCAtMjUwLDYgKzMwNiw3IEBACiAgICAgICAgIGRbc2VsZi5iXSA9IHZhbHVlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtzZWxmLmJdLCB2YWx1ZSkKIAorCiBjbGFzcyBGdW5jdGlvbkRvY3N0cmluZ1Rlc3QoRnVuY0F0dHJzVGVzdCk6CiAgICAgZGVmIHRlc3Rfc2V0X2RvY3N0cmluZ19hdHRyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX2RvY19fLCBOb25lKQpAQCAtMjczLDEwICszMzAsMjQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19kb2NfXywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuZnVuY19kb2MsIE5vbmUpCiAKKworY2xhc3MgU3RhdGljTWV0aG9kQXR0cnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9mdW5jX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjID0gY2xhc3NtZXRob2QoZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuX19mdW5jX18gaXMgZikKKworICAgICAgICBzID0gc3RhdGljbWV0aG9kKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLl9fZnVuY19fIGlzIGYpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRnVuY3Rpb25Qcm9wZXJ0aWVzVGVzdCwgSW1wbGljaXRSZWZlcmVuY2VzVGVzdCwKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEZ1bmN0aW9uUHJvcGVydGllc1Rlc3QsIEluc3RhbmNlbWV0aG9kQXR0clRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmJpdHJhcnlGdW5jdGlvbkF0dHJUZXN0LCBGdW5jdGlvbkRpY3RzVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uRG9jc3RyaW5nVGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uRG9jc3RyaW5nVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY01ldGhvZEF0dHJzVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQppbmRleCAzMWY4ZjcwLi42YmM3YjJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQpAQCAtMSw3ICsxLDkgQEAKIGltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2ltcG9ydCBwaWNrbGUKIAogQHN0YXRpY21ldGhvZAogZGVmIFB5dGhvblBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgpAQCAtMTksNiArMjEsMTAgQEAKICAgICAiIiJjYXB0dXJlIGFsbCBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cyIiIgogICAgIHJldHVybiBhcmdzLCBrdwogCitkZWYgc2lnbmF0dXJlKHBhcnQpOgorICAgICIiIiByZXR1cm4gdGhlIHNpZ25hdHVyZSBvZiBhIHBhcnRpYWwgb2JqZWN0ICIiIgorICAgIHJldHVybiAocGFydC5mdW5jLCBwYXJ0LmFyZ3MsIHBhcnQua2V5d29yZHMsIHBhcnQuX19kaWN0X18pCisKIGNsYXNzIFRlc3RQYXJ0aWFsKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIHRoZXR5cGUgPSBmdW5jdG9vbHMucGFydGlhbApAQCAtOTksNyArMTA1LDcgQEAKICAgICAgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgKmFyZ3MpCiAgICAgICAgICAgICBleHBlY3RlZCA9IGFyZ3MgKyAoJ3gnLCkKICAgICAgICAgICAgIGdvdCwgZW1wdHkgPSBwKCd4JykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHBlY3RlZCA9PSBnb3QgYW5kIGVtcHR5ID09IHt9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0ge30pCiAKICAgICBkZWYgdGVzdF9rZXl3b3JkKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgY29ycmVjdGx5CkBAIC0xMDcsMTUgKzExMywxNSBAQAogICAgICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPWEpCiAgICAgICAgICAgICBleHBlY3RlZCA9IHsnYSc6YSwneCc6Tm9uZX0KICAgICAgICAgICAgIGVtcHR5LCBnb3QgPSBwKHg9Tm9uZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHBlY3RlZCA9PSBnb3QgYW5kIGVtcHR5ID09ICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0gKCkpCiAKICAgICBkZWYgdGVzdF9ub19zaWRlX2VmZmVjdHMoc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgdGhhdCBhZmZlY3Qgc3Vic2VxdWVudCBjYWxscwogICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDAsIGE9MSkKICAgICAgICAgYXJnczEsIGt3MSA9IHAoMSwgYj0yKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYXJnczEgPT0gKDAsMSkgYW5kIGt3MSA9PSB7J2EnOjEsJ2InOjJ9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJnczEgPT0gKDAsMSkgYW5kIGt3MSA9PSB7J2EnOjEsJ2InOjJ9KQogICAgICAgICBhcmdzMiwga3cyID0gcCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhhcmdzMiA9PSAoMCwpIGFuZCBrdzIgPT0geydhJzoxfSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3MyID09ICgwLCkgYW5kIGt3MiA9PSB7J2EnOjF9KQogCiAgICAgZGVmIHRlc3RfZXJyb3JfcHJvcGFnYXRpb24oc2VsZik6CiAgICAgICAgIGRlZiBmKHgsIHkpOgpAQCAtMTM5LDYgKzE0NSwxMiBAQAogICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKCcnLmpvaW4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihkYXRhKSwgJzAxMjM0NTY3ODknKQogCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi50aGV0eXBlKHNpZ25hdHVyZSwgJ2FzZGYnLCBiYXI9VHJ1ZSkKKyAgICAgICAgZi5hZGRfc29tZXRoaW5nX3RvX19kaWN0X18gPSBUcnVlCisgICAgICAgIGZfY29weSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKGYpLCBzaWduYXR1cmUoZl9jb3B5KSkKKwogY2xhc3MgUGFydGlhbFN1YmNsYXNzKGZ1bmN0b29scy5wYXJ0aWFsKToKICAgICBwYXNzCiAKQEAgLTE0NiwxMSArMTU4LDEzIEBACiAKICAgICB0aGV0eXBlID0gUGFydGlhbFN1YmNsYXNzCiAKLQogY2xhc3MgVGVzdFB5dGhvblBhcnRpYWwoVGVzdFBhcnRpYWwpOgogCiAgICAgdGhldHlwZSA9IFB5dGhvblBhcnRpYWwKIAorICAgICMgdGhlIHB5dGhvbiB2ZXJzaW9uIGlzbid0IHBpY2tsYWJsZQorICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKTogcGFzcworCiBjbGFzcyBUZXN0VXBkYXRlV3JhcHBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgY2hlY2tfd3JhcHBlcihzZWxmLCB3cmFwcGVyLCB3cmFwcGVkLApAQCAtMTU4LDE1ICsxNzIsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkPWZ1bmN0b29scy5XUkFQUEVSX1VQREFURVMpOgogICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgd2VyZSBhc3NpZ25lZAogICAgICAgICBmb3IgbmFtZSBpbiBhc3NpZ25lZDoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhnZXRhdHRyKHdyYXBwZXIsIG5hbWUpIGlzIGdldGF0dHIod3JhcHBlZCwgbmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cih3cmFwcGVyLCBuYW1lKSBpcyBnZXRhdHRyKHdyYXBwZWQsIG5hbWUpKQogICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgd2VyZSB1cGRhdGVkCiAgICAgICAgIGZvciBuYW1lIGluIHVwZGF0ZWQ6CiAgICAgICAgICAgICB3cmFwcGVyX2F0dHIgPSBnZXRhdHRyKHdyYXBwZXIsIG5hbWUpCiAgICAgICAgICAgICB3cmFwcGVkX2F0dHIgPSBnZXRhdHRyKHdyYXBwZWQsIG5hbWUpCiAgICAgICAgICAgICBmb3Iga2V5IGluIHdyYXBwZWRfYXR0cjoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mod3JhcHBlZF9hdHRyW2tleV0gaXMgd3JhcHBlcl9hdHRyW2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZWRfYXR0cltrZXldIGlzIHdyYXBwZXJfYXR0cltrZXldKQogCi0gICAgZGVmIHRlc3RfZGVmYXVsdF91cGRhdGUoc2VsZik6CisgICAgZGVmIF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgICIiIlRoaXMgaXMgYSB0ZXN0IiIiCiAgICAgICAgICAgICBwYXNzCkBAIC0xNzQsMTEgKzE4OCwyMCBAQAogICAgICAgICBkZWYgd3JhcHBlcigpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZikKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIsIGYKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlKHNlbGYpOgorICAgICAgICB3cmFwcGVyLCBmID0gc2VsZi5fZGVmYXVsdF91cGRhdGUoKQogICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fbmFtZV9fLCAnZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2RvY19fLCAnVGhpcyBpcyBhIHRlc3QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuYXR0ciwgJ1RoaXMgaXMgYWxzbyBhIHRlc3QnKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZGVmYXVsdF91cGRhdGVfZG9jKHNlbGYpOgorICAgICAgICB3cmFwcGVyLCBmID0gc2VsZi5fZGVmYXVsdF91cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19kb2NfXywgJ1RoaXMgaXMgYSB0ZXN0JykKKwogICAgIGRlZiB0ZXN0X25vX3VwZGF0ZShzZWxmKToKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgICIiIlRoaXMgaXMgYSB0ZXN0IiIiCkBAIC0xOTAsNyArMjEzLDcgQEAKICAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYsICgpLCAoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fbmFtZV9fLCAnd3JhcHBlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2RvY19fLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxJZihoYXNhdHRyKHdyYXBwZXIsICdhdHRyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih3cmFwcGVyLCAnYXR0cicpKQogCiAgICAgZGVmIHRlc3Rfc2VsZWN0aXZlX3VwZGF0ZShzZWxmKToKICAgICAgICAgZGVmIGYoKToKQEAgLTIxNSwxMSArMjM4LDExIEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZ1bmN0b29scy51cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBtYXgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ21heCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3cmFwcGVyLl9fZG9jX18uc3RhcnRzd2l0aCgnbWF4KCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3JhcHBlci5fX2RvY19fLnN0YXJ0c3dpdGgoJ21heCgnKSkKIAogY2xhc3MgVGVzdFdyYXBzKFRlc3RVcGRhdGVXcmFwcGVyKToKIAotICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlKHNlbGYpOgorICAgIGRlZiBfZGVmYXVsdF91cGRhdGUoc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgogICAgICAgICAgICAgcGFzcwpAQCAtMjI4LDEwICsyNTEsMTkgQEAKICAgICAgICAgZGVmIHdyYXBwZXIoKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYpCisgICAgICAgIHJldHVybiB3cmFwcGVyCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgd3JhcHBlciA9IHNlbGYuX2RlZmF1bHRfdXBkYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fbmFtZV9fLCAnZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2RvY19fLCAnVGhpcyBpcyBhIHRlc3QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuYXR0ciwgJ1RoaXMgaXMgYWxzbyBhIHRlc3QnKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgc3lzLmZsYWdzLm9wdGltaXplIDw9IDEsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlX2RvYyhzZWxmKToKKyAgICAgICAgd3JhcHBlciA9IHNlbGYuX2RlZmF1bHRfdXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fZG9jX18sICdUaGlzIGlzIGEgdGVzdCcpCisKICAgICBkZWYgdGVzdF9ub191cGRhdGUoc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgpAQCAtMjQzLDcgKzI3NSw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmLCAoKSwgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ3dyYXBwZXInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19kb2NfXywgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaGFzYXR0cih3cmFwcGVyLCAnYXR0cicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIod3JhcHBlciwgJ2F0dHInKSkKIAogICAgIGRlZiB0ZXN0X3NlbGVjdGl2ZV91cGRhdGUoc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CkBAIC0zMDYsMTYgKzMzOCwxMDMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoNDIsICIiLCAiMSIpLCAiMSIpICMgZnVuYyBpcyBuZXZlciBjYWxsZWQgd2l0aCBvbmUgaXRlbQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgNDIsICg0MiwgNDIpKQogCitjbGFzcyBUZXN0Q21wVG9LZXkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NtcF90b19rZXkoc2VsZik6CisgICAgICAgIGRlZiBteWNtcCh4LCB5KToKKyAgICAgICAgICAgIHJldHVybiB5IC0geAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyYW5nZSg1KSwga2V5PWZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWzQsIDMsIDIsIDEsIDBdKQogCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgZGVmIG15Y21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIHkgLSB4CisgICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKQorICAgICAgICBrID0ga2V5KDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2goaykpCiAKK2NsYXNzIFRlc3RUb3RhbE9yZGVyaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2x0KHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID4gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKworICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2xlKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPD0gb3RoZXIudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPCBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+IEEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDw9IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisKKyAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19ndChzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID4gb3RoZXIudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPCBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+IEEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDw9IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisKKyAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19nZShzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDwgQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPiBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorCisgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbm9fb3ZlcndyaXRlKHNlbGYpOgorICAgICAgICAjIG5ldyBtZXRob2RzIHNob3VsZCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQShzdHIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgiYSIpIDwgQSgiYiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgiYiIpID4gQSgiYSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgiYSIpIDw9IEEoImIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoImIiKSA+PSBBKCJhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKCJiIikgPD0gQSgiYiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgiYiIpID49IEEoImIiKSkKKworICAgIGRlZiB0ZXN0X25vX29wZXJhdGlvbnNfZGVmaW5lZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAgICAgcGFzcwogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgaW1wb3J0IHN5cwogICAgIHRlc3RfY2xhc3NlcyA9ICgKICAgICAgICAgVGVzdFBhcnRpYWwsCiAgICAgICAgIFRlc3RQYXJ0aWFsU3ViY2xhc3MsCiAgICAgICAgIFRlc3RQeXRob25QYXJ0aWFsLAogICAgICAgICBUZXN0VXBkYXRlV3JhcHBlciwKKyAgICAgICAgVGVzdFRvdGFsT3JkZXJpbmcsCiAgICAgICAgIFRlc3RXcmFwcywKICAgICAgICAgVGVzdFJlZHVjZSwKICAgICApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weSBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5CmluZGV4IDgxZDBhM2UuLjg0ZjljNDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICBkZWYgdGVzdF91bmljb2RlX2xpdGVyYWxzX2V4ZWMoc2VsZik6CiAgICAgICAgIHNjb3BlID0ge30KICAgICAgICAgZXhlYyAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzOyB4ID0gJyciIGluIHNjb3BlCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNjb3BlWyJ4Il0sIHVuaWNvZGUpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2NvcGVbIngiXSwgdW5pY29kZSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZTQucHkgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZTQucHkKaW5kZXggMjU4MGM1NS4uNTNmOGFkZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdXR1cmU0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlNC5weQpAQCAtNSw3ICs1LDcgQEAKIAogY2xhc3MgVGVzdEZ1dHVyZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGFzc2VydFR5cGUoc2VsZiwgb2JqLCB0eXApOgotICAgICAgICBzZWxmLmFzc2VydF8odHlwZShvYmopIGlzIHR5cCwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUob2JqKSBpcyB0eXAsCiAgICAgICAgICAgICAidHlwZSglcikgaXMgJXIsIG5vdCAlciIgJSAob2JqLCB0eXBlKG9iaiksIHR5cCkpCiAKICAgICBkZWYgdGVzdF91bmljb2RlX3N0cmluZ3Moc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZTUucHkgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZTUucHkKaW5kZXggMWUxYTkzMC4uNDk4NDA3MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdXR1cmU1LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlNS5weQpAQCAtOSw3ICs5LDcgQEAKIGNsYXNzIFRlc3RNdWx0aXBsZUZlYXR1cmVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfbGl0ZXJhbHMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKCIiLCB1bmljb2RlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKCIiLCB1bmljb2RlKQogCiAgICAgZGVmIHRlc3RfcHJpbnRfZnVuY3Rpb24oc2VsZik6CiAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgczoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlX2J1aWx0aW5zLnB5IGIvTGliL3Rlc3QvdGVzdF9mdXR1cmVfYnVpbHRpbnMucHkKaW5kZXggMGUxNmNhZi4uOTZjMzc4OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdXR1cmVfYnVpbHRpbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdXR1cmVfYnVpbHRpbnMucHkKQEAgLTIsNyArMiw2IEBACiAKICMgd2UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3Igb2YgdGhlc2UgZnV0dXJlIGJ1aWx0aW5zOgogZnJvbSBmdXR1cmVfYnVpbHRpbnMgaW1wb3J0IGhleCwgb2N0LCBtYXAsIHppcCwgZmlsdGVyCi1mcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiBjbGFzcyBCdWlsdGluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfaGV4KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nYy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2MucHkKaW5kZXggNmUyZWE0MS4uNWEzNWRlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2djLnB5CkBAIC0yNDQsNyArMjQ0LDcgQEAKICAgICAjIC0gdGhlIGNhbGwgdG8gYXNzZXJ0RXF1YWwgc29tZWhvdyBhdm9pZHMgYnVpbGRpbmcgaXRzIGFyZ3MgdHVwbGUKICAgICBkZWYgdGVzdF9nZXRfY291bnQoc2VsZik6CiAgICAgICAgICMgQXZvaWQgZnV0dXJlIGFsbG9jYXRpb24gb2YgbWV0aG9kIG9iamVjdAotICAgICAgICBhc3NlcnRFcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgYXNzZXJ0RXF1YWwgPSBzZWxmLl9iYXNlQXNzZXJ0RXF1YWwKICAgICAgICAgZ2MuY29sbGVjdCgpCiAgICAgICAgIGFzc2VydEVxdWFsKGdjLmdldF9jb3VudCgpLCAoMCwgMCwgMCkpCiAgICAgICAgIGEgPSBkaWN0KCkKQEAgLTQxNSw2ICs0MTUsMzcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdldF9yZWZlcmVudHMoMSwgJ2EnLCA0aiksIFtdKQogCisgICAgZGVmIHRlc3RfaXNfdHJhY2tlZChzZWxmKToKKyAgICAgICAgIyBBdG9taWMgYnVpbHQtaW4gdHlwZXMgYXJlIG5vdCB0cmFja2VkLCB1c2VyLWRlZmluZWQgb2JqZWN0cyBhbmQKKyAgICAgICAgIyBtdXRhYmxlIGNvbnRhaW5lcnMgYXJlLgorICAgICAgICAjIE5PVEU6IHR5cGVzIHdpdGggc3BlY2lhbCBvcHRpbWl6YXRpb25zIChlLmcuIHR1cGxlKSBoYXZlIHRlc3RzCisgICAgICAgICMgaW4gdGhlaXIgb3duIHRlc3QgZmlsZXMgaW5zdGVhZC4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZCgxLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoMS4wICsgNS4waikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChUcnVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKCJhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZCh1ImEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKGJ5dGVhcnJheSgiYSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHR5cGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKG9iamVjdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChvYmplY3QoKSkpCisKKyAgICAgICAgY2xhc3MgT2xkU3R5bGU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE5ld1N0eWxlKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKGdjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoT2xkU3R5bGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChPbGRTdHlsZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoTmV3U3R5bGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChOZXdTdHlsZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoW10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChzZXQoKSkpCisKICAgICBkZWYgdGVzdF9idWcxMDU1ODIwYihzZWxmKToKICAgICAgICAgIyBDb3JyZXNwb25kcyB0byB0ZW1wMmIucHkgaW4gdGhlIGJ1ZyByZXBvcnQuCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5IGIvTGliL3Rlc3QvdGVzdF9nZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzM2RjZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CkBAIC0wLDAgKzEsNjk5IEBACisjIFZlcmlmeSB0aGF0IGdkYiBjYW4gcHJldHR5LXByaW50IHRoZSB2YXJpb3VzIFB5T2JqZWN0KiB0eXBlcworIworIyBUaGUgY29kZSBmb3IgdGVzdGluZyBnZGIgd2FzIGFkYXB0ZWQgZnJvbSBzaW1pbGFyIHdvcmsgaW4gVW5sYWRlbiBTd2FsbG93J3MKKyMgTGliL3Rlc3QvdGVzdF9qaXRfZ2RiLnB5CisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzY29uZmlnCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgZmluZGZpbGUKKwordHJ5OgorICAgIGdkYl92ZXJzaW9uLCBfID0gc3VicHJvY2Vzcy5Qb3BlbihbImdkYiIsICItLXZlcnNpb24iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKQorZXhjZXB0IE9TRXJyb3I6CisgICAgIyBUaGlzIGlzIHdoYXQgIm5vIGdkYiIgbG9va3MgbGlrZS4gIFRoZXJlIG1heSwgaG93ZXZlciwgYmUgb3RoZXIKKyAgICAjIGVycm9ycyB0aGF0IG1hbmlmZXN0IHRoaXMgd2F5IHRvby4KKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ291bGRuJ3QgZmluZCBnZGIgb24gdGhlIHBhdGgiKQorZ2RiX3ZlcnNpb25fbnVtYmVyID0gcmUuc2VhcmNoKHIiXkdOVSBnZGIgW15cZF0qKFxkKylcLiIsIGdkYl92ZXJzaW9uKQoraWYgaW50KGdkYl92ZXJzaW9uX251bWJlci5ncm91cCgxKSkgPCA3OgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJnZGIgdmVyc2lvbnMgYmVmb3JlIDcuMCBkaWRuJ3Qgc3VwcG9ydCBweXRob24gZW1iZWRkaW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgU2F3OlxuIiArIGdkYl92ZXJzaW9uKQorCisjIFZlcmlmeSB0aGF0ICJnZGIiIHdhcyBidWlsdCB3aXRoIHRoZSBlbWJlZGRlZCBweXRob24gc3VwcG9ydCBlbmFibGVkOgorY21kID0gIi0tZXZhbC1jb21tYW5kPXB5dGhvbiBpbXBvcnQgc3lzOyBwcmludCBzeXMudmVyc2lvbl9pbmZvIgorcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnZGIiLCAiLS1iYXRjaCIsIGNtZF0sCisgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorZ2RicHlfdmVyc2lvbiwgXyA9IHAuY29tbXVuaWNhdGUoKQoraWYgZ2RicHlfdmVyc2lvbiA9PSAnJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2RiIG5vdCBidWlsdCB3aXRoIGVtYmVkZGVkIHB5dGhvbiBzdXBwb3J0IikKKworZGVmIGdkYl9oYXNfZnJhbWVfc2VsZWN0KCk6CisgICAgIyBEb2VzIHRoaXMgYnVpbGQgb2YgZ2RiIGhhdmUgZ2RiLkZyYW1lLnNlbGVjdCA/CisgICAgY21kID0gIi0tZXZhbC1jb21tYW5kPXB5dGhvbiBwcmludChkaXIoZ2RiLkZyYW1lKSkiCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnZGIiLCAiLS1iYXRjaCIsIGNtZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICBzdGRvdXQsIF8gPSBwLmNvbW11bmljYXRlKCkKKyAgICBtID0gcmUubWF0Y2gocicuKlxbKC4qKVxdLionLCBzdGRvdXQpCisgICAgaWYgbm90IG06CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJVbmFibGUgdG8gcGFyc2Ugb3V0cHV0IGZyb20gZ2RiLkZyYW1lLnNlbGVjdCB0ZXN0IikKKyAgICBnZGJfZnJhbWVfZGlyID0gbS5ncm91cCgxKS5zcGxpdCgnLCAnKQorICAgIHJldHVybiAiJ3NlbGVjdCciIGluIGdkYl9mcmFtZV9kaXIKKworSEFTX1BZVVBfUFlET1dOID0gZ2RiX2hhc19mcmFtZV9zZWxlY3QoKQorCitjbGFzcyBEZWJ1Z2dlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3QgdGhhdCB0aGUgZGVidWdnZXIgY2FuIGRlYnVnIFB5dGhvbi4iIiIKKworICAgIGRlZiBydW5fZ2RiKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiUnVucyBnZGIgd2l0aCB0aGUgY29tbWFuZCBsaW5lIGdpdmVuIGJ5ICphcmdzLgorCisgICAgICAgIFJldHVybnMgaXRzIHN0ZG91dCwgc3RkZXJyCisgICAgICAgICIiIgorICAgICAgICBvdXQsIGVyciA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICAgICBhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgKS5jb21tdW5pY2F0ZSgpCisgICAgICAgIHJldHVybiBvdXQsIGVycgorCisgICAgZGVmIGdldF9zdGFja190cmFjZShzZWxmLCBzb3VyY2U9Tm9uZSwgc2NyaXB0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50PSdQeU9iamVjdF9QcmludCcsCisgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9zaXRlPUZhbHNlKToKKyAgICAgICAgJycnCisgICAgICAgIFJ1biAncHl0aG9uIC1jIFNPVVJDRScgdW5kZXIgZ2RiIHdpdGggYSBicmVha3BvaW50LgorCisgICAgICAgIFN1cHBvcnQgaW5qZWN0aW5nIGNvbW1hbmRzIGFmdGVyIHRoZSBicmVha3BvaW50IGlzIHJlYWNoZWQKKworICAgICAgICBSZXR1cm5zIHRoZSBzdGRvdXQgZnJvbSBnZGIKKworICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ6IGlmIHByb3ZpZGVkLCBhIGxpc3Qgb2Ygc3RyaW5nczogZ2RiIGNvbW1hbmRzCisgICAgICAgICcnJworICAgICAgICAjIFdlIHVzZSAic2V0IGJyZWFrcG9pbnQgcGVuZGluZyB5ZXMiIHRvIGF2b2lkIGJsb2NraW5nIHdpdGggYToKKyAgICAgICAgIyAgIEZ1bmN0aW9uICJmb28iIG5vdCBkZWZpbmVkLgorICAgICAgICAjICAgTWFrZSBicmVha3BvaW50IHBlbmRpbmcgb24gZnV0dXJlIHNoYXJlZCBsaWJyYXJ5IGxvYWQ/ICh5IG9yIFtuXSkKKyAgICAgICAgIyBlcnJvciwgd2hpY2ggdHlwaWNhbGx5IGhhcHBlbnMgcHl0aG9uIGlzIGR5bmFtaWNhbGx5IGxpbmtlZCAodGhlCisgICAgICAgICMgYnJlYWtwb2ludHMgb2YgaW50ZXJlc3QgYXJlIHRvIGJlIGZvdW5kIGluIHRoZSBzaGFyZWQgbGlicmFyeSkKKyAgICAgICAgIyBXaGVuIHRoaXMgaGFwcGVucywgd2Ugc3RpbGwgZ2V0OgorICAgICAgICAjICAgRnVuY3Rpb24gIlB5T2JqZWN0X1ByaW50IiBub3QgZGVmaW5lZC4KKyAgICAgICAgIyBlbWl0dGVkIHRvIHN0ZGVyciBlYWNoIHRpbWUsIGFsYXMuCisKKyAgICAgICAgIyBJbml0aWFsbHkgSSBoYWQgIi0tZXZhbC1jb21tYW5kPWNvbnRpbnVlIiBoZXJlLCBidXQgcmVtb3ZlZCBpdCB0bworICAgICAgICAjIGF2b2lkIHJlcGVhdGVkIHByaW50IGJyZWFrcG9pbnRzIHdoZW4gdHJhdmVyc2luZyBoaWVyYXJjaGljYWwgZGF0YQorICAgICAgICAjIHN0cnVjdHVyZXMKKworICAgICAgICAjIEdlbmVyYXRlIGEgbGlzdCBvZiBjb21tYW5kcyBpbiBnZGIncyBsYW5ndWFnZToKKyAgICAgICAgY29tbWFuZHMgPSBbJ3NldCBicmVha3BvaW50IHBlbmRpbmcgeWVzJywKKyAgICAgICAgICAgICAgICAgICAgJ2JyZWFrICVzJyAlIGJyZWFrcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICdydW4nXQorICAgICAgICBpZiBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ6CisgICAgICAgICAgICBjb21tYW5kcyArPSBjbWRzX2FmdGVyX2JyZWFrcG9pbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbW1hbmRzICs9IFsnYmFja3RyYWNlJ10KKworICAgICAgICAjIHByaW50IGNvbW1hbmRzCisKKyAgICAgICAgIyBVc2UgImNvbW1hbmRzIiB0byBnZW5lcmF0ZSB0aGUgYXJndW1lbnRzIHdpdGggd2hpY2ggdG8gaW52b2tlICJnZGIiOgorICAgICAgICBhcmdzID0gWyJnZGIiLCAiLS1iYXRjaCJdCisgICAgICAgIGFyZ3MgKz0gWyctLWV2YWwtY29tbWFuZD0lcycgJSBjbWQgZm9yIGNtZCBpbiBjb21tYW5kc10KKyAgICAgICAgYXJncyArPSBbIi0tYXJncyIsCisgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlXQorCisgICAgICAgIGlmIG5vdCBpbXBvcnRfc2l0ZToKKyAgICAgICAgICAgICMgLVMgc3VwcHJlc3NlcyB0aGUgZGVmYXVsdCAnaW1wb3J0IHNpdGUnCisgICAgICAgICAgICBhcmdzICs9IFsiLVMiXQorCisgICAgICAgIGlmIHNvdXJjZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItYyIsIHNvdXJjZV0KKyAgICAgICAgZWxpZiBzY3JpcHQ6CisgICAgICAgICAgICBhcmdzICs9IFtzY3JpcHRdCisKKyAgICAgICAgIyBwcmludCBhcmdzCisgICAgICAgICMgcHJpbnQgJyAnLmpvaW4oYXJncykKKworICAgICAgICAjIFVzZSAiYXJncyIgdG8gaW52b2tlIGdkYiwgY2FwdHVyaW5nIHN0ZG91dCwgc3RkZXJyOgorICAgICAgICBvdXQsIGVyciA9IHNlbGYucnVuX2dkYigqYXJncykKKworICAgICAgICAjIElnbm9yZSBzb21lIG5vaXNlIG9uIHN0ZGVyciBkdWUgdG8gdGhlIHBlbmRpbmcgYnJlYWtwb2ludDoKKyAgICAgICAgZXJyID0gZXJyLnJlcGxhY2UoJ0Z1bmN0aW9uICIlcyIgbm90IGRlZmluZWQuXG4nICUgYnJlYWtwb2ludCwgJycpCisgICAgICAgICMgSWdub3JlIHNvbWUgb3RoZXIgbm9pc2Ugb24gc3RkZXJyIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODYwMCkKKyAgICAgICAgZXJyID0gZXJyLnJlcGxhY2UoIndhcm5pbmc6IFVuYWJsZSB0byBmaW5kIGxpYnRocmVhZF9kYiBtYXRjaGluZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbmZlcmlvcidzIHRocmVhZCBsaWJyYXJ5LCB0aHJlYWQgZGVidWdnaW5nIHdpbGwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgbm90IGJlIGF2YWlsYWJsZS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQorCisgICAgICAgICMgRW5zdXJlIG5vIHVuZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXM6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAnJykKKworICAgICAgICByZXR1cm4gb3V0CisKKyAgICBkZWYgZ2V0X2dkYl9yZXByKHNlbGYsIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3NpdGU9RmFsc2UpOgorICAgICAgICAjIEdpdmVuIGFuIGlucHV0IHB5dGhvbiBzb3VyY2UgcmVwcmVzZW50YXRpb24gb2YgZGF0YSwKKyAgICAgICAgIyBydW4gInB5dGhvbiAtYydwcmludCBEQVRBJyIgdW5kZXIgZ2RiIHdpdGggYSBicmVha3BvaW50IG9uCisgICAgICAgICMgUHlPYmplY3RfUHJpbnQgYW5kIHNjcmFwZSBvdXQgZ2RiJ3MgcmVwcmVzZW50YXRpb24gb2YgdGhlICJvcCIKKyAgICAgICAgIyBwYXJhbWV0ZXIsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgZ2RiIGRpc3BsYXlzIHRoZSBzYW1lIHN0cmluZworICAgICAgICAjCisgICAgICAgICMgRm9yIGEgbmVzdGVkIHN0cnVjdHVyZSwgdGhlIGZpcnN0IHRpbWUgd2UgaGl0IHRoZSBicmVha3BvaW50IHdpbGwKKyAgICAgICAgIyBnaXZlIHVzIHRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlCisgICAgICAgIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9zdGFja190cmFjZShzb3VyY2UsIGJyZWFrcG9pbnQ9J1B5T2JqZWN0X1ByaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1jbWRzX2FmdGVyX2JyZWFrcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRfc2l0ZT1pbXBvcnRfc2l0ZSkKKyAgICAgICAgIyBnZGIgY2FuIGluc2VydCBhZGRpdGlvbmFsICdcbicgYW5kIHNwYWNlIGNoYXJhY3RlcnMgaW4gdmFyaW91cyBwbGFjZXMKKyAgICAgICAgIyBpbiBpdHMgb3V0cHV0LCBkZXBlbmRpbmcgb24gdGhlIHdpZHRoIG9mIHRoZSB0ZXJtaW5hbCBpdCdzIGNvbm5lY3RlZAorICAgICAgICAjIHRvICh1c2luZyBpdHMgIndyYXBfaGVyZSIgZnVuY3Rpb24pCisgICAgICAgIG0gPSByZS5tYXRjaCgnLiojMFxzK1B5T2JqZWN0X1ByaW50XHMrXChccypvcFw9XHMqKC4qPyksXHMrZnA9LipcKS4qJywKKyAgICAgICAgICAgICAgICAgICAgIGdkYl9vdXRwdXQsIHJlLkRPVEFMTCkKKyAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgZ2RiIG91dHB1dDogJXJcbiVzJyAlIChnZGJfb3V0cHV0LCBnZGJfb3V0cHV0KSkKKyAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMSksIGdkYl9vdXRwdXQKKworICAgIGRlZiBhc3NlcnRFbmRzV2l0aChzZWxmLCBhY3R1YWwsIGV4cF9lbmQpOgorICAgICAgICAnJydFbnN1cmUgdGhhdCB0aGUgZ2l2ZW4gImFjdHVhbCIgc3RyaW5nIGVuZHMgd2l0aCAiZXhwX2VuZCInJycKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFjdHVhbC5lbmRzd2l0aChleHBfZW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nJXIgZGlkIG5vdCBlbmQgd2l0aCAlcicgJSAoYWN0dWFsLCBleHBfZW5kKSkKKworICAgIGRlZiBhc3NlcnRNdWx0aWxpbmVNYXRjaGVzKHNlbGYsIGFjdHVhbCwgcGF0dGVybik6CisgICAgICAgIG0gPSByZS5tYXRjaChwYXR0ZXJuLCBhY3R1YWwsIHJlLkRPVEFMTCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0sIG1zZz0nJXIgZGlkIG5vdCBtYXRjaCAlcicgJSAoYWN0dWFsLCBwYXR0ZXJuKSkKKworICAgIGRlZiBnZXRfc2FtcGxlX3NjcmlwdChzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbmRmaWxlKCdnZGJfc2FtcGxlLnB5JykKKworY2xhc3MgUHJldHR5UHJpbnRUZXN0cyhEZWJ1Z2dlclRlc3RzKToKKyAgICBkZWYgdGVzdF9nZXR0aW5nX2JhY2t0cmFjZShzZWxmKToKKyAgICAgICAgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKCdwcmludCA0MicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnUHlPYmplY3RfUHJpbnQnIGluIGdkYl9vdXRwdXQpCisKKyAgICBkZWYgYXNzZXJ0R2RiUmVwcihzZWxmLCB2YWwsIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1Ob25lKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBnZGIncyByZW5kZXJpbmcgb2YgdGhlIHZhbHVlIGluIGEgZGVidWdnZWQgcHJvY2VzcworICAgICAgICAjIG1hdGNoZXMgcmVwcih2YWx1ZSkgaW4gdGhpcyBwcm9jZXNzOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCdwcmludCAnICsgcmVwcih2YWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgcmVwcih2YWwpLCBnZGJfb3V0cHV0KQorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdmFyaW91cyAiaW50IiB2YWx1ZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcig0MikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKDApCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigtNykKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHN5cy5tYXhpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigtc3lzLm1heGludCkKKworICAgIGRlZiB0ZXN0X2xvbmcoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiB2YXJpb3VzICJsb25nIiB2YWx1ZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigwTCkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKDEwMDAwMDAwMDAwMDBMKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoLTFMKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoLTEwMDAwMDAwMDAwMDAwMDBMKQorCisgICAgZGVmIHRlc3Rfc2luZ2xldG9ucyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIFRydWUsIEZhbHNlIGFuZCBOb25lJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoTm9uZSkKKworICAgIGRlZiB0ZXN0X2RpY3RzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZGljdGlvbmFyaWVzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoe30pCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7J2Zvbyc6ICdiYXInfSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzo0Mn0pCisKKyAgICBkZWYgdGVzdF9saXN0cyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGxpc3RzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihyYW5nZSg1KSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ3Moc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBzdHJpbmdzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcignQW5kIG5vdyBmb3Igc29tZXRoaW5nIGhvcGVmdWxseSB0aGUgc2FtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcignc3RyaW5nIHdpdGggZW1iZWRkZWQgTlVMIGhlcmUgXDAgYW5kIHRoZW4gc29tZSBtb3JlIHRleHQnKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoJ3RoaXMgaXMgYnl0ZSAyNTU6XHhmZiBhbmQgYnl0ZSAxMjg6XHg4MCcpCisKKyAgICBkZWYgdGVzdF90dXBsZXMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiB0dXBsZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih0dXBsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKDEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKCgnZm9vJywgJ2JhcicsICdiYXonKSkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiB1bmljb2RlIHZhbHVlcycKKyAgICAgICAgIyBUZXN0IHRoZSBlbXB0eSB1bmljb2RlIHN0cmluZzoKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHUnJykKKworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodSdoZWxsbyB3b3JsZCcpCisKKyAgICAgICAgIyBUZXN0IHByaW50aW5nIGEgc2luZ2xlIGNoYXJhY3RlcjoKKyAgICAgICAgIyAgICBVKzI2MjAgU0tVTEwgQU5EIENST1NTQk9ORVMKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHUnXHUyNjIwJykKKworICAgICAgICAjIFRlc3QgcHJpbnRpbmcgYSBKYXBhbmVzZSB1bmljb2RlIHN0cmluZworICAgICAgICAjIChJIGJlbGlldmUgdGhpcyByZWFkcyAibW9qaWJha2UiLCB1c2luZyAzIGNoYXJhY3RlcnMgZnJvbSB0aGUgQ0pLCisgICAgICAgICMgVW5pZmllZCBJZGVvZ3JhcGhzIGFyZWEsIGZvbGxvd2VkIGJ5IFUrMzA1MSBISVJBR0FOQSBMRVRURVIgS0UpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih1J1x1NjU4N1x1NWI1N1x1NTMxNlx1MzA1MScpCisKKyAgICAgICAgIyBUZXN0IGEgY2hhcmFjdGVyIG91dHNpZGUgdGhlIEJNUDoKKyAgICAgICAgIyAgICBVKzFEMTIxIE1VU0lDQUwgU1lNQk9MIEMgQ0xFRgorICAgICAgICAjIFRoaXMgaXM6CisgICAgICAgICMgVVRGLTg6IDB4RjAgMHg5RCAweDg0IDB4QTEKKyAgICAgICAgIyBVVEYtMTY6IDB4RDgzNCAweEREMjEKKyAgICAgICAgIyBUaGlzIHdpbGwgb25seSB3b3JrIG9uIHdpZGUtdW5pY29kZSBidWlsZHM6CisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih1IlxVMDAwMUQxMjEiKQorCisgICAgZGVmIHRlc3Rfc2V0cyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHNldHMnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldChbJ2EnLCAnYiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldChbNCwgNSwgNl0pKQorCisgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgaGFuZGxlZCBzZXRzIGNvbnRhaW5pbmcgdGhlICJkdW1teSIga2V5IHZhbHVlLAorICAgICAgICAjIHdoaWNoIGhhcHBlbnMgb24gZGVsZXRpb246CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycncyA9IHNldChbJ2EnLCdiJ10pCitzLnBvcCgpCitwcmludCBzJycnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCAic2V0KFsnYiddKSIpCisKKyAgICBkZWYgdGVzdF9mcm96ZW5zZXRzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZnJvemVuc2V0cycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KFsnYScsICdiJ10pKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KFs0LCA1LCA2XSkpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgYSBSdW50aW1lRXJyb3IKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK3RyeToKKyAgICByYWlzZSBSdW50aW1lRXJyb3IoIkkgYW0gYW4gZXJyb3IiKQorZXhjZXB0IFJ1bnRpbWVFcnJvciwgZToKKyAgICBwcmludCBlCisnJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbnMuUnVudGltZUVycm9yKCdJIGFtIGFuIGVycm9yJywpIikKKworCisgICAgICAgICMgVGVzdCBkaXZpc2lvbiBieSB6ZXJvOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJwordHJ5OgorICAgIGEgPSAxIC8gMAorZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yLCBlOgorICAgIHByaW50IGUKKycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9ucy5aZXJvRGl2aXNpb25FcnJvcignaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybycsKSIpCisKKyAgICBkZWYgdGVzdF9jbGFzc2ljX2NsYXNzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgY2xhc3NpYyBjbGFzcyBpbnN0YW5jZXMnCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb286CisgICAgcGFzcworZm9vID0gRm9vKCkKK2Zvby5hbl9pbnQgPSA0MgorcHJpbnQgZm9vJycnKQorICAgICAgICBtID0gcmUubWF0Y2gocic8Rm9vXChhbl9pbnQ9NDJcKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywgZ2RiX3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdVbmV4cGVjdGVkIGNsYXNzaWMtY2xhc3MgcmVuZGVyaW5nICVyJyAlIGdkYl9yZXByKQorCisgICAgZGVmIHRlc3RfbW9kZXJuX2NsYXNzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgbmV3LXN0eWxlIGNsYXNzIGluc3RhbmNlcycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbyhvYmplY3QpOgorICAgIHBhc3MKK2ZvbyA9IEZvbygpCitmb28uYW5faW50ID0gNDIKK3ByaW50IGZvbycnJykKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInPEZvb1woYW5faW50PTQyXCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsIGdkYl9yZXByKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nVW5leHBlY3RlZCBuZXctc3R5bGUgY2xhc3MgcmVuZGVyaW5nICVyJyAlIGdkYl9yZXByKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NpbmdfbGlzdChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGFuIGluc3RhbmNlIG9mIGEgbGlzdCBzdWJjbGFzcycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbyhsaXN0KToKKyAgICBwYXNzCitmb28gPSBGb28oKQorZm9vICs9IFsxLCAyLCAzXQorZm9vLmFuX2ludCA9IDQyCitwcmludCBmb28nJycpCisgICAgICAgIG0gPSByZS5tYXRjaChyJzxGb29cKGFuX2ludD00MlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLCBnZGJfcmVwcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0sCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J1VuZXhwZWN0ZWQgbmV3LXN0eWxlIGNsYXNzIHJlbmRlcmluZyAlcicgJSBnZGJfcmVwcikKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nX3R1cGxlKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgYW4gaW5zdGFuY2Ugb2YgYSB0dXBsZSBzdWJjbGFzcycKKyAgICAgICAgIyBUaGlzIHNob3VsZCBleGVyY2lzZSB0aGUgbmVnYXRpdmUgdHBfZGljdG9mZnNldCBjb2RlIGluIHRoZQorICAgICAgICAjIG5ldy1zdHlsZSBjbGFzcyBzdXBwb3J0CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb28odHVwbGUpOgorICAgIHBhc3MKK2ZvbyA9IEZvbygoMSwgMiwgMykpCitmb28uYW5faW50ID0gNDIKK3ByaW50IGZvbycnJykKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInPEZvb1woYW5faW50PTQyXCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsIGdkYl9yZXByKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nVW5leHBlY3RlZCBuZXctc3R5bGUgY2xhc3MgcmVuZGVyaW5nICVyJyAlIGdkYl9yZXByKQorCisgICAgZGVmIGFzc2VydFNhbmUoc2VsZiwgc291cmNlLCBjb3JydXB0aW9uLCBleHB2YWx1ZT1Ob25lLCBleHB0eXBlPU5vbmUpOgorICAgICAgICAnJydSdW4gUHl0aG9uIHVuZGVyIGdkYiwgY29ycnVwdGluZyB2YXJpYWJsZXMgaW4gdGhlIGluZmVyaW9yIHByb2Nlc3MKKyAgICAgICAgaW1tZWRpYXRlbHkgYmVmb3JlIHRha2luZyBhIGJhY2t0cmFjZS4KKworICAgICAgICBWZXJpZnkgdGhhdCB0aGUgdmFyaWFibGUncyByZXByZXNlbnRhdGlvbiBpcyB0aGUgZXhwZWN0ZWQgZmFpbHNhZmUKKyAgICAgICAgcmVwcmVzZW50YXRpb24nJycKKyAgICAgICAgaWYgY29ycnVwdGlvbjoKKyAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bY29ycnVwdGlvbiwgJ2JhY2t0cmFjZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydiYWNrdHJhY2UnXQorCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PWNtZHNfYWZ0ZXJfYnJlYWtwb2ludCkKKworICAgICAgICBpZiBleHB2YWx1ZToKKyAgICAgICAgICAgIGlmIGdkYl9yZXByID09IHJlcHIoZXhwdmFsdWUpOgorICAgICAgICAgICAgICAgICMgZ2RiIG1hbmFnZWQgdG8gcHJpbnQgdGhlIHZhbHVlIGluIHNwaXRlIG9mIHRoZSBjb3JydXB0aW9uOworICAgICAgICAgICAgICAgICMgdGhpcyBpcyBnb29kIChzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTgzMzApCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgZXhwdHlwZToKKyAgICAgICAgICAgIHBhdHRlcm4gPSAnPCcgKyBleHB0eXBlICsgJyBhdCByZW1vdGUgMHhbMC05YS1mXSs+JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBNYXRjaCBhbnl0aGluZyBmb3IgdGhlIHR5cGUgbmFtZTsgMHhERUFEQkVFRiBjb3VsZCBwb2ludCB0bworICAgICAgICAgICAgIyBzb21ldGhpbmcgYXJiaXRyYXJ5IChzZWUgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MzMwKQorICAgICAgICAgICAgcGF0dGVybiA9ICc8LiogYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicKKworICAgICAgICBtID0gcmUubWF0Y2gocGF0dGVybiwgZ2RiX3JlcHIpCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGdkYl9yZXByLCBnZGJfb3V0cHV0KSkKKworICAgIGRlZiB0ZXN0X05VTExfcHRyKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBOVUxMIFB5T2JqZWN0KiBpcyBoYW5kbGVkIGdyYWNlZnVsbHknCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gKAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoJ3ByaW50IDQyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3NldCB2YXJpYWJsZSBvcD0wJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2t0cmFjZSddKQorICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICcweDAnKQorCisgICAgZGVmIHRlc3RfTlVMTF9vYl90eXBlKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBQeU9iamVjdCogd2l0aCBOVUxMIG9iX3R5cGUgaXMgaGFuZGxlZCBncmFjZWZ1bGx5JworICAgICAgICBzZWxmLmFzc2VydFNhbmUoJ3ByaW50IDQyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZXQgb3AtPm9iX3R5cGU9MCcpCisKKyAgICBkZWYgdGVzdF9jb3JydXB0X29iX3R5cGUoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCBhIFB5T2JqZWN0KiB3aXRoIGEgY29ycnVwdCBvYl90eXBlIGlzIGhhbmRsZWQgZ3JhY2VmdWxseScKKyAgICAgICAgc2VsZi5hc3NlcnRTYW5lKCdwcmludCA0MicsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2V0IG9wLT5vYl90eXBlPTB4REVBREJFRUYnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwdmFsdWU9NDIpCisKKyAgICBkZWYgdGVzdF9jb3JydXB0X3RwX2ZsYWdzKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBQeU9iamVjdCogd2l0aCBhIHR5cGUgd2l0aCBjb3JydXB0IHRwX2ZsYWdzIGlzIGhhbmRsZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0U2FuZSgncHJpbnQgNDInLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NldCBvcC0+b2JfdHlwZS0+dHBfZmxhZ3M9MHgwJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHZhbHVlPTQyKQorCisgICAgZGVmIHRlc3RfY29ycnVwdF90cF9uYW1lKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBQeU9iamVjdCogd2l0aCBhIHR5cGUgd2l0aCBjb3JydXB0IHRwX25hbWUgaXMgaGFuZGxlZCcKKyAgICAgICAgc2VsZi5hc3NlcnRTYW5lKCdwcmludCA0MicsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2V0IG9wLT5vYl90eXBlLT50cF9uYW1lPTB4REVBREJFRUYnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwdmFsdWU9NDIpCisKKyAgICBkZWYgdGVzdF9OVUxMX2luc3RhbmNlX2RpY3Qoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCBhIFB5SW5zdGFuY2VPYmplY3Qgd2l0aCB3aXRoIGEgTlVMTCBpbl9kaWN0IGlzIGhhbmRsZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0U2FuZSgnJycKK2NsYXNzIEZvbzoKKyAgICBwYXNzCitmb28gPSBGb28oKQorZm9vLmFuX2ludCA9IDQyCitwcmludCBmb28nJycsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2V0ICgoUHlJbnN0YW5jZU9iamVjdCopb3ApLT5pbl9kaWN0ID0gMCcsCisgICAgICAgICAgICAgICAgICAgICAgICBleHB0eXBlPSdGb28nKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbnNfaGVscChzZWxmKToKKyAgICAgICAgJ0Vuc3VyZSB0aGF0IHRoZSBuZXctc3R5bGUgY2xhc3MgX0hlbHBlciBpbiBzaXRlLnB5IGNhbiBiZSBoYW5kbGVkJworICAgICAgICAjICh0aGlzIHdhcyB0aGUgaXNzdWUgY2F1c2luZyB0cmFjZWJhY2tzIGluCisgICAgICAgICMgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MDMyI21zZzEwMDUzNyApCisKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcigncHJpbnQgX19idWlsdGluc19fLmhlbHAnLCBpbXBvcnRfc2l0ZT1UcnVlKQorICAgICAgICBtID0gcmUubWF0Y2gocic8X0hlbHBlciBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywgZ2RiX3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdVbmV4cGVjdGVkIHJlbmRlcmluZyAlcicgJSBnZGJfcmVwcikKKworICAgIGRlZiB0ZXN0X3NlbGZyZWZlcmVudGlhbF9saXN0KHNlbGYpOgorICAgICAgICAnJydFbnN1cmUgdGhhdCBhIHJlZmVyZW5jZSBsb29wIGludm9sdmluZyBhIGxpc3QgZG9lc24ndCBsZWFkIHByb3h5dmFsCisgICAgICAgIGludG8gYW4gaW5maW5pdGUgbG9vcDonJycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcigiYSA9IFszLCA0LCA1XSA7IGEuYXBwZW5kKGEpIDsgcHJpbnQgYSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgJ1szLCA0LCA1LCBbLi4uXV0nKQorCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoImEgPSBbMywgNCwgNV0gOyBiID0gW2FdIDsgYS5hcHBlbmQoYikgOyBwcmludCBhIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCAnWzMsIDQsIDUsIFtbLi4uXV1dJykKKworICAgIGRlZiB0ZXN0X3NlbGZyZWZlcmVudGlhbF9kaWN0KHNlbGYpOgorICAgICAgICAnJydFbnN1cmUgdGhhdCBhIHJlZmVyZW5jZSBsb29wIGludm9sdmluZyBhIGRpY3QgZG9lc24ndCBsZWFkIHByb3h5dmFsCisgICAgICAgIGludG8gYW4gaW5maW5pdGUgbG9vcDonJycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcigiYSA9IHt9IDsgYiA9IHsnYmFyJzphfSA7IGFbJ2ZvbyddID0gYiA7IHByaW50IGEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICJ7J2Zvbyc6IHsnYmFyJzogey4uLn19fSIpCisKKyAgICBkZWYgdGVzdF9zZWxmcmVmZXJlbnRpYWxfb2xkX3N0eWxlX2luc3RhbmNlKHNlbGYpOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCcnJworY2xhc3MgRm9vOgorICAgIHBhc3MKK2ZvbyA9IEZvbygpCitmb28uYW5fYXR0ciA9IGZvbworcHJpbnQgZm9vJycnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxGb29cKGFuX2F0dHI9PFwuXC5cLj5cKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl9yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgZGVmIHRlc3Rfc2VsZnJlZmVyZW50aWFsX25ld19zdHlsZV9pbnN0YW5jZShzZWxmKToKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbyhvYmplY3QpOgorICAgIHBhc3MKK2ZvbyA9IEZvbygpCitmb28uYW5fYXR0ciA9IGZvbworcHJpbnQgZm9vJycnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxGb29cKGFuX2F0dHI9PFwuXC5cLj5cKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl9yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb28ob2JqZWN0KToKKyAgICBwYXNzCithID0gRm9vKCkKK2IgPSBGb28oKQorYS5hbl9hdHRyID0gYgorYi5hbl9hdHRyID0gYQorcHJpbnQgYScnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8Rm9vXChhbl9hdHRyPTxGb29cKGFuX2F0dHI9PFwuXC5cLj5cKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+XCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJfcmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBnZGIgcmVwcmVzZW50YXRpb246ICVyXG4lcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdkYl9yZXByLCBnZGJfb3V0cHV0KSkKKworICAgIGRlZiB0ZXN0X3RydW5jYXRpb24oc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB2ZXJ5IGxvbmcgb3V0cHV0IGlzIHRydW5jYXRlZCcKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcigncHJpbnQgcmFuZ2UoMTAwMCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiOTIsIDkzLCA5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LCAxNjAsIDE2MSwgMTYyLCAxNjMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMjI0LCAyMjUsIDIyNi4uLih0cnVuY2F0ZWQpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2RiX3JlcHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQgKyBsZW4oJy4uLih0cnVuY2F0ZWQpJykpCisKKyAgICBkZWYgdGVzdF9idWlsdGluX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCdwcmludCBsZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCAnPGJ1aWx0LWluIGZ1bmN0aW9uIGxlbj4nKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbl9tZXRob2Qoc2VsZik6CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJ2ltcG9ydCBzeXM7IHByaW50IHN5cy5zdGRvdXQucmVhZGxpbmVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8YnVpbHQtaW4gbWV0aG9kIHJlYWRsaW5lcyBvZiBmaWxlIG9iamVjdCBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl9yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgZGVmIHRlc3RfZnJhbWVzKHNlbGYpOgorICAgICAgICBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2UoJycnCitkZWYgZm9vKGEsIGIsIGMpOgorICAgIHBhc3MKKworZm9vKDMsIDQsIDUpCitwcmludCBmb28uX19jb2RlX18nJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50PSdQeU9iamVjdF9QcmludCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydwcmludCAoUHlGcmFtZU9iamVjdCopKCgoUHlDb2RlT2JqZWN0KilvcCktPmNvX3pvbWJpZWZyYW1lKSddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJy4qXHMrXCQxID1ccytGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgPHN0cmluZz4sIGxpbmUgMywgaW4gZm9vIFwoXClccysuKicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuRE9UQUxMKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIChnZGJfb3V0cHV0LCBnZGJfb3V0cHV0KSkKKworY2xhc3MgUHlMaXN0VGVzdHMoRGVidWdnZXJUZXN0cyk6CisgICAgZGVmIGFzc2VydExpc3Rpbmcoc2VsZiwgZXhwZWN0ZWQsIGFjdHVhbCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RW5kc1dpdGgoYWN0dWFsLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2NvbW1hbmQoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB0aGUgInB5LWxpc3QiIGNvbW1hbmQgd29ya3MnCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS1saXN0J10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0aW5nKCcgICA1ICAgIFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIDYgICAgZGVmIGJhcihhLCBiLCBjKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICA3ICAgICAgICBiYXooYSwgYiwgYylcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICA4ICAgIFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIDkgICAgZGVmIGJheigqYXJncyk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnID4xMCAgICAgICAgcHJpbnQoNDIpXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAxMSAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIDEyICAgIGZvbygxLCAyLCAzKVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0KQorCisgICAgZGVmIHRlc3Rfb25lX2Fic19hcmcoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlICJweS1saXN0IiBjb21tYW5kIHdpdGggb25lIGFic29sdXRlIGFyZ3VtZW50JworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktbGlzdCA5J10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0aW5nKCcgICA5ICAgIGRlZiBiYXooKmFyZ3MpOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyA+MTAgICAgICAgIHByaW50KDQyKVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgMTEgICAgXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAxMiAgICBmb28oMSwgMiwgMylcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidCkKKworICAgIGRlZiB0ZXN0X3R3b19hYnNfYXJncyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgInB5LWxpc3QiIGNvbW1hbmQgd2l0aCB0d28gYWJzb2x1dGUgYXJndW1lbnRzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktbGlzdCAxLDMnXSkKKworICAgICAgICBzZWxmLmFzc2VydExpc3RpbmcoJyAgIDEgICAgIyBTYW1wbGUgc2NyaXB0IGZvciB1c2UgYnkgdGVzdF9nZGIucHlcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAyICAgIFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIDMgICAgZGVmIGZvbyhhLCBiLCBjKTpcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidCkKKworY2xhc3MgU3RhY2tOYXZpZ2F0aW9uVGVzdHMoRGVidWdnZXJUZXN0cyk6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBkZWYgdGVzdF9weXVwX2NvbW1hbmQoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB0aGUgInB5LXVwIiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktdXAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicnJ14uKgorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDcsIGluIGJhciBcKGE9MSwgYj0yLCBjPTNcKQorICAgIGJhelwoYSwgYiwgY1wpCiskJycnKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBkZWYgdGVzdF9kb3duX2F0X2JvdHRvbShzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSBoYW5kbGluZyBvZiAicHktZG93biIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2snCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS1kb3duJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RW5kc1dpdGgoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBmaW5kIGEgbmV3ZXIgcHl0aG9uIGZyYW1lXG4nKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBkZWYgdGVzdF91cF9hdF90b3Aoc2VsZik6CisgICAgICAgICdWZXJpZnkgaGFuZGxpbmcgb2YgInB5LXVwIiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjaycKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJ10gKiA0KQorICAgICAgICBzZWxmLmFzc2VydEVuZHNXaXRoKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gZmluZCBhbiBvbGRlciBweXRob24gZnJhbWVcbicpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUFlVUF9QWURPV04sICJ0ZXN0IHJlcXVpcmVzIHB5LXVwL3B5LWRvd24gY29tbWFuZHMiKQorICAgIGRlZiB0ZXN0X3VwX3RoZW5fZG93bihzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSAicHktdXAiIGZvbGxvd2VkIGJ5ICJweS1kb3duIicKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJywgJ3B5LWRvd24nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicnJ14uKgorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDcsIGluIGJhciBcKGE9MSwgYj0yLCBjPTNcKQorICAgIGJhelwoYSwgYiwgY1wpCisjWzAtOV0rIEZyYW1lIDB4WzAtOWEtZl0rLCBmb3IgZmlsZSAuKmdkYl9zYW1wbGUucHksIGxpbmUgMTAsIGluIGJheiBcKGFyZ3M9XCgxLCAyLCAzXClcKQorICAgIHByaW50XCg0MlwpCiskJycnKQorCitjbGFzcyBQeUJ0VGVzdHMoRGVidWdnZXJUZXN0cyk6CisgICAgZGVmIHRlc3RfYmFzaWNfY29tbWFuZChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGF0IHRoZSAicHktYnQiIGNvbW1hbmQgd29ya3MnCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS1idCddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJycnXi4qCisjWzAtOV0rIEZyYW1lIDB4WzAtOWEtZl0rLCBmb3IgZmlsZSAuKmdkYl9zYW1wbGUucHksIGxpbmUgNywgaW4gYmFyIFwoYT0xLCBiPTIsIGM9M1wpCisgICAgYmF6XChhLCBiLCBjXCkKKyNbMC05XSsgRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIC4qZ2RiX3NhbXBsZS5weSwgbGluZSA0LCBpbiBmb28gXChhPTEsIGI9MiwgYz0zXCkKKyAgICBiYXJcKGEsIGIsIGNcKQorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDEyLCBpbiA8bW9kdWxlPiBcKFwpCitmb29cKDEsIDIsIDNcKQorJycnKQorCitjbGFzcyBQeVByaW50VGVzdHMoRGVidWdnZXJUZXN0cyk6CisgICAgZGVmIHRlc3RfYmFzaWNfY29tbWFuZChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGF0IHRoZSAicHktcHJpbnQiIGNvbW1hbmQgd29ya3MnCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS1wcmludCBhcmdzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmxvY2FsICdhcmdzJyA9IFwoMSwgMiwgM1wpXG4uKiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUFlVUF9QWURPV04sICJ0ZXN0IHJlcXVpcmVzIHB5LXVwL3B5LWRvd24gY29tbWFuZHMiKQorICAgIGRlZiB0ZXN0X3ByaW50X2FmdGVyX3VwKHNlbGYpOgorICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktdXAnLCAncHktcHJpbnQgYycsICdweS1wcmludCBiJywgJ3B5LXByaW50IGEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciIuKlxubG9jYWwgJ2MnID0gM1xubG9jYWwgJ2InID0gMlxubG9jYWwgJ2EnID0gMVxuLioiKQorCisgICAgZGVmIHRlc3RfcHJpbnRpbmdfZ2xvYmFsKHNlbGYpOgorICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktcHJpbnQgX19uYW1lX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciIuKlxuZ2xvYmFsICdfX25hbWVfXycgPSAnX19tYWluX18nXG4uKiIpCisKKyAgICBkZWYgdGVzdF9wcmludGluZ19idWlsdGluKHNlbGYpOgorICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktcHJpbnQgbGVuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmJ1aWx0aW4gJ2xlbicgPSA8YnVpbHQtaW4gZnVuY3Rpb24gbGVuPlxuLioiKQorCitjbGFzcyBQeUxvY2Fsc1Rlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIGRlZiB0ZXN0X2Jhc2ljX2NvbW1hbmQoc2VsZik6CisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS1sb2NhbHMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciIuKlxuYXJncyA9IFwoMSwgMiwgM1wpXG4uKiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUFlVUF9QWURPV04sICJ0ZXN0IHJlcXVpcmVzIHB5LXVwL3B5LWRvd24gY29tbWFuZHMiKQorICAgIGRlZiB0ZXN0X2xvY2Fsc19hZnRlcl91cChzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJywgJ3B5LWxvY2FscyddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5hID0gMVxuYiA9IDJcbmMgPSAzXG4uKiIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBjZmxhZ3MgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKClbJ1BZX0NGTEFHUyddCisgICAgZmluYWxfb3B0ID0gIiIKKyAgICBmb3Igb3B0IGluIGNmbGFncy5zcGxpdCgpOgorICAgICAgICBpZiBvcHQuc3RhcnRzd2l0aCgnLU8nKToKKyAgICAgICAgICAgIGZpbmFsX29wdCA9IG9wdAorICAgIGlmIGZpbmFsX29wdCBhbmQgZmluYWxfb3B0ICE9ICctTzAnOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiUHl0aG9uIHdhcyBidWlsdCB3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzIGNhbid0IHJlbGlhYmx5IHN1Y2NlZWQiKQorCisgICAgcnVuX3VuaXR0ZXN0KFByZXR0eVByaW50VGVzdHMsCisgICAgICAgICAgICAgICAgIFB5TGlzdFRlc3RzLAorICAgICAgICAgICAgICAgICBTdGFja05hdmlnYXRpb25UZXN0cywKKyAgICAgICAgICAgICAgICAgUHlCdFRlc3RzLAorICAgICAgICAgICAgICAgICBQeVByaW50VGVzdHMsCisgICAgICAgICAgICAgICAgIFB5TG9jYWxzVGVzdHMKKyAgICAgICAgICAgICAgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dkYm0ucHkgYi9MaWIvdGVzdC90ZXN0X2dkYm0ucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA3NjY4OWYwLi5mNGJiYzM4Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2RibS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dkYm0ucHkKQEAgLTEsNyArMSw3IEBACi1pbXBvcnQgZ2RibQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmsKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmssIGltcG9ydF9tb2R1bGUKK2dkYm0gPSBpbXBvcnRfbW9kdWxlKCdnZGJtJykKIAogCiBmaWxlbmFtZSA9IFRFU1RGTgpAQCAtMjMsMTAgKzIzLDEwIEBACiAgICAgICAgIHNlbGYuZ1snMTIzNDU2Nzg5MTAnXSA9ICcwMTkyMzc0MTA5ODIzNDA5MTI4NDAxOTgyNDInCiAgICAgICAgIGtleV9zZXQgPSBzZXQoc2VsZi5nLmtleXMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlfc2V0LCBmcm96ZW5zZXQoWydhJywgJzEyMzQ1Njc4OTEwJ10pKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5nLmhhc19rZXkoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZy5oYXNfa2V5KCdhJykpCiAgICAgICAgIGtleSA9IHNlbGYuZy5maXJzdGtleSgpCiAgICAgICAgIHdoaWxlIGtleToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkgaW4ga2V5X3NldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBrZXlfc2V0KQogICAgICAgICAgICAga2V5X3NldC5yZW1vdmUoa2V5KQogICAgICAgICAgICAga2V5ID0gc2VsZi5nLm5leHRrZXkoa2V5KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLmdbJ3h4eCddKQpAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgICAgIHNlbGYuZ1sneCddID0gJ3gnICogMTAwMDAKICAgICAgICAgc2l6ZTEgPSBvcy5wYXRoLmdldHNpemUoZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzaXplMCA8IHNpemUxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2l6ZTAgPCBzaXplMSkKIAogICAgICAgICBkZWwgc2VsZi5nWyd4J10KICAgICAgICAgIyAnc2l6ZScgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZXZlbiBhZnRlciBkZWxldGluZyBhbiBlbnRyeS4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgICAgICBzZWxmLmcucmVvcmdhbml6ZSgpCiAgICAgICAgIHNpemUyID0gb3MucGF0aC5nZXRzaXplKGZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2l6ZTEgPiBzaXplMiA+PSBzaXplMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpemUxID4gc2l6ZTIgPj0gc2l6ZTApCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CmluZGV4IDM3MDJhYmMuLjE5YmZlMDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKQEAgLTkyOCw2ICs5MjgsMTYgQEAKICdmJwogPj4+IHJlcHIoZykgICMgZG9jdGVzdDogK0VMTElQU0lTCiAnPGdlbmVyYXRvciBvYmplY3QgZiBhdCAuLi4+JworCitMYW1iZGFzIHNob3VsZG4ndCBoYXZlIHRoZWlyIHVzdWFsIHJldHVybiBiZWhhdmlvci4KKworPj4+IHggPSBsYW1iZGE6ICh5aWVsZCAxKQorPj4+IGxpc3QoeCgpKQorWzFdCisKKz4+PiB4ID0gbGFtYmRhOiAoKHlpZWxkIDEpLCAoeWllbGQgMikpCis+Pj4gbGlzdCh4KCkpCitbMSwgMl0KICIiIgogCiAjIGNvbmpvaW4gaXMgYSBzaW1wbGUgYmFja3RyYWNraW5nIGdlbmVyYXRvciwgbmFtZWQgaW4gaG9ub3Igb2YgSWNvbidzCkBAIC05NTAsMTEgKzk2MCwxMSBAQAogIyBpdGVyYXRvcnMgaGF2ZSBzaWRlLWVmZmVjdHMsIHNvIHRoYXQgd2hpY2ggdmFsdWVzICpjYW4qIGJlIGdlbmVyYXRlZCBhdAogIyBlYWNoIHNsb3QgZGVwZW5kIG9uIHRoZSB2YWx1ZXMgaXRlcmF0ZWQgYXQgcHJldmlvdXMgc2xvdHMuCiAKLWRlZiBjb25qb2luKGdzKToKK2RlZiBzaW1wbGVfY29uam9pbihncyk6CiAKICAgICB2YWx1ZXMgPSBbTm9uZV0gKiBsZW4oZ3MpCiAKLSAgICBkZWYgZ2VuKGksIHZhbHVlcz12YWx1ZXMpOgorICAgIGRlZiBnZW4oaSk6CiAgICAgICAgIGlmIGkgPj0gbGVuKGdzKToKICAgICAgICAgICAgIHlpZWxkIHZhbHVlcwogICAgICAgICBlbHNlOgpAQCAtOTc5LDcgKzk4OSw3IEBACiAgICAgIyBEbyBvbmUgbG9vcCBuZXN0IGF0IHRpbWUgcmVjdXJzaXZlbHksIHVudGlsIHRoZSAjIG9mIGxvb3AgbmVzdHMKICAgICAjIHJlbWFpbmluZyBpcyBkaXZpc2libGUgYnkgMy4KIAotICAgIGRlZiBnZW4oaSwgdmFsdWVzPXZhbHVlcyk6CisgICAgZGVmIGdlbihpKToKICAgICAgICAgaWYgaSA+PSBuOgogICAgICAgICAgICAgeWllbGQgdmFsdWVzCiAKQEAgLTk5Nyw3ICsxMDA3LDcgQEAKICAgICAjIHJlbWFpbi4gIERvbid0IGNhbGwgZGlyZWN0bHk6ICB0aGlzIGlzIGFuIGludGVybmFsIG9wdGltaXphdGlvbiBmb3IKICAgICAjIGdlbidzIHVzZS4KIAotICAgIGRlZiBfZ2VuMyhpLCB2YWx1ZXM9dmFsdWVzKToKKyAgICBkZWYgX2dlbjMoaSk6CiAgICAgICAgIGFzc2VydCBpIDwgbiBhbmQgKG4taSkgJSAzID09IDAKICAgICAgICAgaXAxLCBpcDIsIGlwMyA9IGkrMSwgaSsyLCBpKzMKICAgICAgICAgZywgZzEsIGcyID0gZ3NbaSA6IGlwM10KQEAgLTE1NTQsNyArMTU2NCw4IEBACiA+Pj4gZj1sYW1iZGE6ICh5aWVsZCAxKSwoeWllbGQgMikKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgLi4uCi1TeW50YXhFcnJvcjogJ3lpZWxkJyBvdXRzaWRlIGZ1bmN0aW9uICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjFdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjFdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6ICd5aWVsZCcgb3V0c2lkZSBmdW5jdGlvbgogCiA+Pj4gZGVmIGYoKTogcmV0dXJuIGxhbWJkYSB4PSh5aWVsZCk6IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKQEAgLTE1NjQsMTcgKzE1NzUsMjAgQEAKID4+PiBkZWYgZigpOiB4ID0geWllbGQgPSB5CiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgIC4uLgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8geWllbGQgZXhwcmVzc2lvbiBub3QgcG9zc2libGUgKDxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLmNvcm91dGluZVsyM10+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLmNvcm91dGluZVsyM10+IiwgbGluZSAxCitTeW50YXhFcnJvcjogYXNzaWdubWVudCB0byB5aWVsZCBleHByZXNzaW9uIG5vdCBwb3NzaWJsZQogCiA+Pj4gZGVmIGYoKTogKHlpZWxkIGJhcikgPSB5CiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgIC4uLgotU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byB5aWVsZCBleHByZXNzaW9uICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjRdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjRdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byB5aWVsZCBleHByZXNzaW9uCiAKID4+PiBkZWYgZigpOiAoeWllbGQgYmFyKSArPSB5CiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgIC4uLgotU3ludGF4RXJyb3I6IGF1Z21lbnRlZCBhc3NpZ25tZW50IHRvIHlpZWxkIGV4cHJlc3Npb24gbm90IHBvc3NpYmxlICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjVdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjVdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byB5aWVsZCBleHByZXNzaW9uCiAKIAogTm93IGNoZWNrIHNvbWUgdGhyb3coKSBjb25kaXRpb25zOgpAQCAtMTY4Niw2ICsxNzAwLDE3IEBACiA+Pj4gZGVsIGcKIGV4aXRpbmcKIAorPj4+IGNsYXNzIGNvbnRleHQob2JqZWN0KToKKy4uLiAgICBkZWYgX19lbnRlcl9fKHNlbGYpOiBwYXNzCisuLi4gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKTogcHJpbnQgJ2V4aXRpbmcnCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgd2l0aCBjb250ZXh0KCk6CisuLi4gICAgICAgICAgeWllbGQKKz4+PiBnID0gZigpCis+Pj4gZy5uZXh0KCkKKz4+PiBkZWwgZworZXhpdGluZworCiAKIEdlbmVyYXRvckV4aXQgaXMgbm90IGNhdWdodCBieSBleGNlcHQgRXhjZXB0aW9uOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQppbmRleCA1M2M0NjA3Li4zOTc1YjU2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKQEAgLTEsNDEgKzEsODcgQEAKKyIiIgorVGVzdHMgY29tbW9uIHRvIGdlbmVyaWNwYXRoLCBtYWNwYXRoLCBudHBhdGggYW5kIHBvc2l4cGF0aAorIiIiCisKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGltcG9ydCBvcwogaW1wb3J0IGdlbmVyaWNwYXRoCitpbXBvcnQgc3lzCiAKLWNsYXNzIEFsbENvbW1vblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIGFzc2VydElzKHNlbGYsIGEsIGIpOgotICAgICAgICBzZWxmLmFzc2VydF8oYSBpcyBiKQorZGVmIHNhZmVfcm1kaXIoZGlybmFtZSk6CisgICAgdHJ5OgorICAgICAgICBvcy5ybWRpcihkaXJuYW1lKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBwYXNzCisKKworY2xhc3MgR2VuZXJpY1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlIHBhdGggbW9kdWxlIHRvIGJlIHRlc3RlZAorICAgIHBhdGhtb2R1bGUgPSBnZW5lcmljcGF0aAorICAgIGNvbW1vbl9hdHRyaWJ1dGVzID0gWydjb21tb25wcmVmaXgnLCAnZ2V0c2l6ZScsICdnZXRhdGltZScsICdnZXRjdGltZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldG10aW1lJywgJ2V4aXN0cycsICdpc2RpcicsICdpc2ZpbGUnXQorICAgIGF0dHJpYnV0ZXMgPSBbXQorCisgICAgZGVmIHRlc3Rfbm9fYXJndW1lbnQoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluIHNlbGYuY29tbW9uX2F0dHJpYnV0ZXMgKyBzZWxmLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLnBhdGhtb2R1bGUsIGF0dHIpKCkKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWwoInt9Lnt9KCkgZGlkIG5vdCByYWlzZSBhIFR5cGVFcnJvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLnBhdGhtb2R1bGUuX19uYW1lX18sIGF0dHIpKQogCiAgICAgZGVmIHRlc3RfY29tbW9ucHJlZml4KHNlbGYpOgorICAgICAgICBjb21tb25wcmVmaXggPSBzZWxmLnBhdGhtb2R1bGUuY29tbW9ucHJlZml4CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBnZW5lcmljcGF0aC5jb21tb25wcmVmaXgoW10pLAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFtdKSwKICAgICAgICAgICAgICIiCiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGdlbmVyaWNwYXRoLmNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW5zb24vc3BhbSIsICIvaG9tZS9zd2VuL3NwYW0iXSksCisgICAgICAgICAgICBjb21tb25wcmVmaXgoWyIvaG9tZS9zd2Vuc29uL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pLAogICAgICAgICAgICAgIi9ob21lL3N3ZW4iCiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGdlbmVyaWNwYXRoLmNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW4vc3BhbSIsICIvaG9tZS9zd2VuL2VnZ3MiXSksCisgICAgICAgICAgICBjb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9lZ2dzIl0pLAogICAgICAgICAgICAgIi9ob21lL3N3ZW4vIgogICAgICAgICApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBnZW5lcmljcGF0aC5jb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pLAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbi9zcGFtIiwgIi9ob21lL3N3ZW4vc3BhbSJdKSwKICAgICAgICAgICAgICIvaG9tZS9zd2VuL3NwYW0iCiAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvbW1vbnByZWZpeChbImhvbWU6c3dlbnNvbjpzcGFtIiwgImhvbWU6c3dlbjpzcGFtIl0pLAorICAgICAgICAgICAgImhvbWU6c3dlbiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiOmhvbWU6c3dlbjpzcGFtIiwgIjpob21lOnN3ZW46ZWdncyJdKSwKKyAgICAgICAgICAgICI6aG9tZTpzd2VuOiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiOmhvbWU6c3dlbjpzcGFtIiwgIjpob21lOnN3ZW46c3BhbSJdKSwKKyAgICAgICAgICAgICI6aG9tZTpzd2VuOnNwYW0iCisgICAgICAgICkKKworICAgICAgICB0ZXN0bGlzdCA9IFsnJywgJ2FiYycsICdYYmNkJywgJ1hiJywgJ1hZJywgJ2FiY2QnLAorICAgICAgICAgICAgICAgICAgICAnYVhjJywgJ2FiZCcsICdhYicsICdhWCcsICdhYmNYJ10KKyAgICAgICAgZm9yIHMxIGluIHRlc3RsaXN0OgorICAgICAgICAgICAgZm9yIHMyIGluIHRlc3RsaXN0OgorICAgICAgICAgICAgICAgIHAgPSBjb21tb25wcmVmaXgoW3MxLCBzMl0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxLnN0YXJ0c3dpdGgocCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMyLnN0YXJ0c3dpdGgocCkpCisgICAgICAgICAgICAgICAgaWYgczEgIT0gczI6CisgICAgICAgICAgICAgICAgICAgIG4gPSBsZW4ocCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzMVtuOm4rMV0sIHMyW246bisxXSkKIAogICAgIGRlZiB0ZXN0X2dldHNpemUoc2VsZik6CiAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJpY3BhdGguZ2V0c2l6ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXRobW9kdWxlLmdldHNpemUodGVzdF9zdXBwb3J0LlRFU1RGTiksIDMpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBub3QgZi5jbG9zZWQ6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X3RpbWUoc2VsZik6CiAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCkBAIC01MCwxMzUgKzk2LDE2MSBAQAogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsICJmb29iYXIiKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oCi0gICAgICAgICAgICAgICAgZ2VuZXJpY3BhdGguZ2V0Y3RpbWUodGVzdF9zdXBwb3J0LlRFU1RGTikgPD0KLSAgICAgICAgICAgICAgICBnZW5lcmljcGF0aC5nZXRtdGltZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoCisgICAgICAgICAgICAgICAgc2VsZi5wYXRobW9kdWxlLmdldGN0aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4pLAorICAgICAgICAgICAgICAgIHNlbGYucGF0aG1vZHVsZS5nZXRtdGltZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQogICAgICAgICAgICAgKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2VkOgogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9leGlzdHMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5lcmljcGF0aC5leGlzdHModGVzdF9zdXBwb3J0LlRFU1RGTiksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5leGlzdHModGVzdF9zdXBwb3J0LlRFU1RGTiksIFRydWUpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5wYXRobW9kdWxlID09IGdlbmVyaWNwYXRoOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmxleGlzdHModGVzdF9zdXBwb3J0LlRFU1RGTiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZW5lcmljcGF0aC5leGlzdHMpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9pc2RpcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5lcmljcGF0aC5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmlzZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5lcmljcGF0aC5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCiAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIG9zLm1rZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmlzZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIFRydWUpCiAgICAgICAgICAgICBvcy5ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3Mucm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZW5lcmljcGF0aC5pc2RpcikKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNhZmVfcm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X2lzZmlsZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5lcmljcGF0aC5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQogICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmLndyaXRlKCJmb28iKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmlzZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmlzZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKICAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQogICAgICAgICAgICAgb3MubWtkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmlzZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCiAgICAgICAgICAgICBvcy5ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3Mucm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzYWZlX3JtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZW5lcmljcGF0aC5pc2RpcikKIAotICAgICAgICBkZWYgdGVzdF9zYW1lZmlsZShzZWxmKToKLSAgICAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsICJ3YiIpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKAotICAgICAgICAgICAgICAgICAgICBnZW5lcmljcGF0aC5zYW1lZmlsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgIFRydWUKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIGxpbmtzLCBhc3N1bWUgdGhhdCBvcy5zdGF0IGRvZXNuJ3QgcmV0dXJuIHJlc29uYWJsZQotICAgICAgICAgICAgICAgICMgaW5vZGUgaW5mb3JtYXRpb24gYW5kIHRodXMsIHRoYXQgc2FtZWZpbGUoKSBkb2Vzbid0IHdvcmsKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgotICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKAotICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKAotICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY3BhdGguc2FtZWZpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiCi0gICAgICAgICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiKQotICAgICAgICAgICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiLCAid2IiKQotICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJiYXIiKQotICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcygKLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWNwYXRoLnNhbWVmaWxlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIgotICAgICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIikKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcworIyBGb2xsb3dpbmcgVGVzdENhc2UgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHJ1biBmcm9tIHRlc3RfZ2VuZXJpY3BhdGguCisjIEl0IGlzIGluaGVyaXRlZCBieSBvdGhlciB0ZXN0IG1vZHVsZXMgKG1hY3BhdGgsIG50cGF0aCwgcG9zaXhwYXRoKS4KIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZW5lcmljcGF0aC5zYW1lZmlsZSkKK2NsYXNzIENvbW1vblRlc3QoR2VuZXJpY1Rlc3QpOgorICAgICMgVGhlIHBhdGggbW9kdWxlIHRvIGJlIHRlc3RlZAorICAgIHBhdGhtb2R1bGUgPSBOb25lCisgICAgY29tbW9uX2F0dHJpYnV0ZXMgPSBHZW5lcmljVGVzdC5jb21tb25fYXR0cmlidXRlcyArIFsKKyAgICAgICAgIyBQcm9wZXJ0aWVzCisgICAgICAgICdjdXJkaXInLCAncGFyZGlyJywgJ2V4dHNlcCcsICdzZXAnLAorICAgICAgICAncGF0aHNlcCcsICdkZWZwYXRoJywgJ2FsdHNlcCcsICdkZXZudWxsJywKKyAgICAgICAgIyBNZXRob2RzCisgICAgICAgICdub3JtY2FzZScsICdzcGxpdGRyaXZlJywgJ2V4cGFuZHZhcnMnLCAnbm9ybXBhdGgnLCAnYWJzcGF0aCcsCisgICAgICAgICdqb2luJywgJ3NwbGl0JywgJ3NwbGl0ZXh0JywgJ2lzYWJzJywgJ2Jhc2VuYW1lJywgJ2Rpcm5hbWUnLAorICAgICAgICAnbGV4aXN0cycsICdpc2xpbmsnLCAnaXNtb3VudCcsICdleHBhbmR1c2VyJywgJ25vcm1wYXRoJywgJ3JlYWxwYXRoJywKKyAgICBdCisKKyAgICBkZWYgdGVzdF9ub3JtY2FzZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IG5vcm1jYXNlKCkgaXMgaWRlbXBvdGVudAorICAgICAgICBwID0gIkZvTy8uL0JhUiIKKyAgICAgICAgcCA9IHNlbGYucGF0aG1vZHVsZS5ub3JtY2FzZShwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHNlbGYucGF0aG1vZHVsZS5ub3JtY2FzZShwKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0ZHJpdmUoc2VsZik6CisgICAgICAgICMgc3BsaXRkcml2ZSBmb3Igbm9uLU5UIHBhdGhzCisgICAgICAgIHNwbGl0ZHJpdmUgPSBzZWxmLnBhdGhtb2R1bGUuc3BsaXRkcml2ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZHJpdmUoIi9mb28vYmFyIiksICgiIiwgIi9mb28vYmFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkcml2ZSgiZm9vOmJhciIpLCAoIiIsICJmb286YmFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkcml2ZSgiOmZvbzpiYXIiKSwgKCIiLCAiOmZvbzpiYXIiKSkKKworICAgIGRlZiB0ZXN0X2V4cGFuZHZhcnMoc2VsZik6CisgICAgICAgIGlmIHNlbGYucGF0aG1vZHVsZS5fX25hbWVfXyA9PSAnbWFjcGF0aCc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdtYWNwYXRoLmV4cGFuZHZhcnMgaXMgYSBzdHViJykKKyAgICAgICAgZXhwYW5kdmFycyA9IHNlbGYucGF0aG1vZHVsZS5leHBhbmR2YXJzCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnYuY2xlYXIoKQorICAgICAgICAgICAgZW52WyJmb28iXSA9ICJiYXIiCisgICAgICAgICAgICBlbnZbIntmb28iXSA9ICJiYXoxIgorICAgICAgICAgICAgZW52WyJ7Zm9vfSJdID0gImJhejIiCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoImZvbyIpLCAiZm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJGZvbyBiYXIiKSwgImJhciBiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIke2Zvb31iYXIiKSwgImJhcmJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiRbZm9vXWJhciIpLCAiJFtmb29dYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJGJhciBiYXIiKSwgIiRiYXIgYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJD9iYXIiKSwgIiQ/YmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJHtmb299YmFyIiksICJiYXJiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkZm9vfWJhciIpLCAiYmFyfWJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiR7Zm9vIiksICIke2ZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiR7e2Zvb319IiksICJiYXoxfSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiRmb28kZm9vIiksICJiYXJiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkYmFyJGJhciIpLCAiJGJhciRiYXIiKQorCisgICAgZGVmIHRlc3RfYWJzcGF0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vIiwgc2VsZi5wYXRobW9kdWxlLmFic3BhdGgoImZvbyIpKQorCisgICAgICAgICMgQWJzcGF0aCByZXR1cm5zIGJ5dGVzIHdoZW4gdGhlIGFyZyBpcyBieXRlcworICAgICAgICBmb3IgcGF0aCBpbiAoJycsICdmb28nLCAnZlx4ZjJceGYyJywgJy9mb28nLCAnQzpcXCcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYucGF0aG1vZHVsZS5hYnNwYXRoKHBhdGgpLCBzdHIpCisKKyAgICBkZWYgdGVzdF9yZWFscGF0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vIiwgc2VsZi5wYXRobW9kdWxlLnJlYWxwYXRoKCJmb28iKSkKKworICAgIGRlZiB0ZXN0X25vcm1wYXRoX2lzc3VlNTgyNyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgbm9ybXBhdGggcHJlc2VydmVzIHVuaWNvZGUKKyAgICAgICAgZm9yIHBhdGggaW4gKHUnJywgdScuJywgdScvJywgdSdcXCcsIHUnLy8vZm9vLy4vL2Jhci8vJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5wYXRobW9kdWxlLm5vcm1wYXRoKHBhdGgpLCB1bmljb2RlKQorCisgICAgZGVmIHRlc3RfYWJzcGF0aF9pc3N1ZTM0MjYoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBhYnNwYXRoIHJldHVybnMgdW5pY29kZSB3aGVuIHRoZSBhcmcgaXMgdW5pY29kZQorICAgICAgICAjIHdpdGggYm90aCBBU0NJSSBhbmQgbm9uLUFTQ0lJIGN3ZHMuCisgICAgICAgIGFic3BhdGggPSBzZWxmLnBhdGhtb2R1bGUuYWJzcGF0aAorICAgICAgICBmb3IgcGF0aCBpbiAodScnLCB1J2Z1dScsIHUnZlx4ZjlceGY5JywgdScvZnV1JywgdSdVOlxcJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYWJzcGF0aChwYXRoKSwgdW5pY29kZSkKKworICAgICAgICB1bmljd2QgPSB1J1x4ZTd3XHhmMCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnNlbmNvZGluZyA9IHRlc3Rfc3VwcG9ydC5URVNURk5fRU5DT0RJTkcgb3IgImFzY2lpIgorICAgICAgICAgICAgdW5pY3dkLmVuY29kZShmc2VuY29kaW5nKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgICAgICAgICAgIyBGUyBlbmNvZGluZyBpcyBwcm9iYWJseSBBU0NJSQorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudGVtcF9jd2QodW5pY3dkKToKKyAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiAodScnLCB1J2Z1dScsIHUnZlx4ZjlceGY5JywgdScvZnV1JywgdSdVOlxcJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhYnNwYXRoKHBhdGgpLCB1bmljb2RlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicsCisgICAgICAgICJNYWMgT1MgWCBkZW5pZXMgdGhlIGNyZWF0aW9uIG9mIGEgZGlyZWN0b3J5IHdpdGggYW4gaW52YWxpZCB1dGY4IG5hbWUiKQorICAgIGRlZiB0ZXN0X25vbmFzY2lpX2Fic3BhdGgoc2VsZik6CisgICAgICAgICMgVGVzdCBub24tQVNDSUksIG5vbi1VVEY4IGJ5dGVzIGluIHRoZSBwYXRoLgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50ZW1wX2N3ZCgnXHhlN3dceGYwJyk6CisgICAgICAgICAgICBzZWxmLnRlc3RfYWJzcGF0aCgpCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQWxsQ29tbW9uVGVzdCkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEdlbmVyaWNUZXN0KQorCiAKIGlmIF9fbmFtZV9fPT0iX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmV4cHMucHkgYi9MaWIvdGVzdC90ZXN0X2dlbmV4cHMucHkKaW5kZXggYTg2ZjEyZi4uM2Q4OTZhNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5leHBzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXhwcy5weQpAQCAtMTM3LDEyICsxMzcsMTQgQEAKICAgICA+Pj4gKHkgZm9yIHkgaW4gKDEsMikpID0gMTAKICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgLi4uCi0gICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbiAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmV4cHMuX190ZXN0X18uZG9jdGVzdHNbNDBdPiwgbGluZSAxKQorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmV4cHMuX190ZXN0X18uZG9jdGVzdHNbNDBdPiIsIGxpbmUgMQorICAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZ2VuZXJhdG9yIGV4cHJlc3Npb24KIAogICAgID4+PiAoeSBmb3IgeSBpbiAoMSwyKSkgKz0gMTAKICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgLi4uCi0gICAgU3ludGF4RXJyb3I6IGF1Z21lbnRlZCBhc3NpZ25tZW50IHRvIGdlbmVyYXRvciBleHByZXNzaW9uIG5vdCBwb3NzaWJsZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmV4cHMuX190ZXN0X18uZG9jdGVzdHNbNDFdPiwgbGluZSAxKQorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmV4cHMuX190ZXN0X18uZG9jdGVzdHNbNDFdPiIsIGxpbmUgMQorICAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZ2VuZXJhdG9yIGV4cHJlc3Npb24KIAogCiAjIyMjIyMjIyMjIyBUZXN0cyBib3Jyb3dlZCBmcm9tIG9yIGluc3BpcmVkIGJ5IHRlc3RfZ2VuZXJhdG9ycy5weSAjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJncy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0YXJncy5weQppbmRleCBlMmMzNmRkLi40YWM1YWEyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzLnB5CkBAIC0yMSw5ICsyMSw2IEBACiAgICAgIyB0aGlzIHRlc3Qgd2lsbCBmYWlsIGJlY2F1c2UgaXQgZG9lcyBub3QgdGVzdCB0aGUgcmlnaHQgcGFydCBvZiB0aGUKICAgICAjIFB5QXJnX1BhcnNlVHVwbGUoKSBpbXBsZW1lbnRhdGlvbi4KICAgICBkZWYgdGVzdF93aXRoX21hcnNoYWwoc2VsZik6Ci0gICAgICAgIGlmIG5vdCB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgYXJnID0gdW5pY29kZShyJ1wyMjInLCAndW5pY29kZS1lc2NhcGUnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIG1hcnNoYWwubG9hZHMsIGFyZykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKaW5kZXggOWI5MGE2OS4uZDA2Mjk2YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CkBAIC0xLDE2ICsxLDcgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2tleXdvcmRzCi0KIGltcG9ydCB3YXJuaW5ncwotd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSIuKmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9X19uYW1lX18pCi13YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9Ii4qaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT0idW5pdHRlc3QiKQogCiAiIiIKID4gSG93IGFib3V0IHRoZSBmb2xsb3dpbmcgY291bnRlcnByb3Bvc2FsLiBUaGlzIGFsc28gY2hhbmdlcyBzb21lIG9mCkBAIC00OCw3ICszOSw4IEBACiBWRVJZX0xBUkdFID0gMHhGRjAwMDAxMjEyMTIxMjEyMTIxMjEyNDJMCiAKIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBVQ0hBUl9NQVgsIFVTSFJUX01BWCwgVUlOVF9NQVgsIFVMT05HX01BWCwgSU5UX01BWCwgXAotICAgICBJTlRfTUlOLCBMT05HX01JTiwgTE9OR19NQVgsIFBZX1NTSVpFX1RfTUlOLCBQWV9TU0laRV9UX01BWAorICAgICBJTlRfTUlOLCBMT05HX01JTiwgTE9OR19NQVgsIFBZX1NTSVpFX1RfTUlOLCBQWV9TU0laRV9UX01BWCwgXAorICAgICBTSFJUX01JTiwgU0hSVF9NQVgKIAogIyBmYWtlLCB0aGV5IGFyZSBub3QgZGVmaW5lZCBpbiBQeXRob24ncyBoZWFkZXIgZmlsZXMKIExMT05HX01BWCA9IDIqKjYzLTEKQEAgLTY3LDY5ICs1OSw2OSBAQAogICAgIGRlZiB0ZXN0X2Ioc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2IKICAgICAgICAgIyBiIHJldHVybnMgJ3Vuc2lnbmVkIGNoYXInLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZyAoMCAuLi4gVUNIQVJfTUFYKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgzLCBnZXRhcmdzX2IoMy4xNCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX2IoTG9uZygpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOTksIGdldGFyZ3NfYihJbnQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19iLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2IoTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19iKEludCgpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2IsIC0xKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBnZXRhcmdzX2IoMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFVDSEFSX01BWCwgZ2V0YXJnc19iKFVDSEFSX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19iKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVDSEFSX01BWCwgZ2V0YXJnc19iKFVDSEFSX01BWCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfYiwgVUNIQVJfTUFYICsgMSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19iKDQyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3NfYig0MkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2IoNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2IoNDJMKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19iLCBWRVJZX0xBUkdFKQogCiAgICAgZGVmIHRlc3RfQihzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfQgogICAgICAgICAjIEIgcmV0dXJucyAndW5zaWduZWQgY2hhcicsIG5vIHJhbmdlIGNoZWNraW5nCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDMsIGdldGFyZ3NfQigzLjE0KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOTksIGdldGFyZ3NfQihMb25nKCkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg5OSwgZ2V0YXJnc19CKEludCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0IsIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfQihMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0IoSW50KCkpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFVDSEFSX01BWCwgZ2V0YXJnc19CKC0xKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoLTFMKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZ2V0YXJnc19CKDApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChVQ0hBUl9NQVgsIGdldGFyZ3NfQihVQ0hBUl9NQVgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBnZXRhcmdzX0IoVUNIQVJfTUFYKzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVDSEFSX01BWCwgZ2V0YXJnc19CKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVQ0hBUl9NQVgsIGdldGFyZ3NfQigtMUwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfQigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVQ0hBUl9NQVgsIGdldGFyZ3NfQihVQ0hBUl9NQVgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfQihVQ0hBUl9NQVgrMSkpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3NfQig0MikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX0IoNDJMKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoVUNIQVJfTUFYICYgVkVSWV9MQVJHRSwgZ2V0YXJnc19CKFZFUllfTEFSR0UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0IoNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0IoNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVQ0hBUl9NQVggJiBWRVJZX0xBUkdFLCBnZXRhcmdzX0IoVkVSWV9MQVJHRSkpCiAKICAgICBkZWYgdGVzdF9IKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19ICiAgICAgICAgICMgSCByZXR1cm5zICd1bnNpZ25lZCBzaG9ydCcsIG5vIHJhbmdlIGNoZWNraW5nCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDMsIGdldGFyZ3NfSCgzLjE0KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOTksIGdldGFyZ3NfSChMb25nKCkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg5OSwgZ2V0YXJnc19IKEludCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0gsIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfSChMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0goSW50KCkpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFVTSFJUX01BWCwgZ2V0YXJnc19IKC0xKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZ2V0YXJnc19IKDApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChVU0hSVF9NQVgsIGdldGFyZ3NfSChVU0hSVF9NQVgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBnZXRhcmdzX0goVVNIUlRfTUFYKzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVTSFJUX01BWCwgZ2V0YXJnc19IKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0goMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVVNIUlRfTUFYLCBnZXRhcmdzX0goVVNIUlRfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0goVVNIUlRfTUFYKzEpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX0goNDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19IKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSCg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSCg0MkwpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFZFUllfTEFSR0UgJiBVU0hSVF9NQVgsIGdldGFyZ3NfSChWRVJZX0xBUkdFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWRVJZX0xBUkdFICYgVVNIUlRfTUFYLCBnZXRhcmdzX0goVkVSWV9MQVJHRSkpCiAKICAgICBkZWYgdGVzdF9JKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19JCiAgICAgICAgICMgSSByZXR1cm5zICd1bnNpZ25lZCBpbnQnLCBubyByYW5nZSBjaGVja2luZwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgzLCBnZXRhcmdzX0koMy4xNCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX0koTG9uZygpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOTksIGdldGFyZ3NfSShJbnQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19JLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0koTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19JKEludCgpKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChVSU5UX01BWCwgZ2V0YXJnc19JKC0xKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZ2V0YXJnc19JKDApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChVSU5UX01BWCwgZ2V0YXJnc19JKFVJTlRfTUFYKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZ2V0YXJnc19JKFVJTlRfTUFYKzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVJTlRfTUFYLCBnZXRhcmdzX0koLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSSgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVSU5UX01BWCwgZ2V0YXJnc19JKFVJTlRfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0koVUlOVF9NQVgrMSkpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3NfSSg0MikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX0koNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19JKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19JKDQyTCkpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoVkVSWV9MQVJHRSAmIFVJTlRfTUFYLCBnZXRhcmdzX0koVkVSWV9MQVJHRSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVkVSWV9MQVJHRSAmIFVJTlRfTUFYLCBnZXRhcmdzX0koVkVSWV9MQVJHRSkpCiAKICAgICBkZWYgdGVzdF9rKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19rCkBAIC0xMzksODMgKzEzMSwxMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2ssIExvbmcoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2ssIEludCgpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFVMT05HX01BWCwgZ2V0YXJnc19rKC0xKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZ2V0YXJnc19rKDApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChVTE9OR19NQVgsIGdldGFyZ3NfayhVTE9OR19NQVgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBnZXRhcmdzX2soVUxPTkdfTUFYKzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVMT05HX01BWCwgZ2V0YXJnc19rKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2soMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUxPTkdfTUFYLCBnZXRhcmdzX2soVUxPTkdfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2soVUxPTkdfTUFYKzEpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX2soNDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19rKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfayg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfayg0MkwpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFZFUllfTEFSR0UgJiBVTE9OR19NQVgsIGdldGFyZ3NfayhWRVJZX0xBUkdFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWRVJZX0xBUkdFICYgVUxPTkdfTUFYLCBnZXRhcmdzX2soVkVSWV9MQVJHRSkpCiAKIGNsYXNzIFNpZ25lZF9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaChzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfaAorICAgICAgICAjIGggcmV0dXJucyAnc2hvcnQnLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZyAoU0hSVF9NSU4gLi4uIFNIUlRfTUFYKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfaCwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19oKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfaChJbnQoKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19oLCBTSFJUX01JTi0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNIUlRfTUlOLCBnZXRhcmdzX2goU0hSVF9NSU4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNIUlRfTUFYLCBnZXRhcmdzX2goU0hSVF9NQVgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2gsIFNIUlRfTUFYKzEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19oKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19oKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaCwgVkVSWV9MQVJHRSkKKwogICAgIGRlZiB0ZXN0X2koc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2kKICAgICAgICAgIyBpIHJldHVybnMgJ2ludCcsIGFuZCBkb2VzIHJhbmdlIGNoZWNraW5nIChJTlRfTUlOIC4uLiBJTlRfTUFYKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgzLCBnZXRhcmdzX2koMy4xNCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX2koTG9uZygpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOTksIGdldGFyZ3NfaShJbnQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19pLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2koTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19pKEludCgpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2ksIElOVF9NSU4tMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoSU5UX01JTiwgZ2V0YXJnc19pKElOVF9NSU4pKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChJTlRfTUFYLCBnZXRhcmdzX2koSU5UX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSU5UX01JTiwgZ2V0YXJnc19pKElOVF9NSU4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKElOVF9NQVgsIGdldGFyZ3NfaShJTlRfTUFYKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19pLCBJTlRfTUFYKzEpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3NfaSg0MikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX2koNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19pKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19pKDQyTCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaSwgVkVSWV9MQVJHRSkKIAogICAgIGRlZiB0ZXN0X2woc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2wKICAgICAgICAgIyBsIHJldHVybnMgJ2xvbmcnLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZyAoTE9OR19NSU4gLi4uIExPTkdfTUFYKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgzLCBnZXRhcmdzX2woMy4xNCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX2woTG9uZygpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOTksIGdldGFyZ3NfbChJbnQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19sLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2woTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19sKEludCgpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2wsIExPTkdfTUlOLTEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKExPTkdfTUlOLCBnZXRhcmdzX2woTE9OR19NSU4pKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChMT05HX01BWCwgZ2V0YXJnc19sKExPTkdfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMT05HX01JTiwgZ2V0YXJnc19sKExPTkdfTUlOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMT05HX01BWCwgZ2V0YXJnc19sKExPTkdfTUFYKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19sLCBMT05HX01BWCsxKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX2woNDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19sKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfbCg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfbCg0MkwpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2wsIFZFUllfTEFSR0UpCiAKICAgICBkZWYgdGVzdF9uKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19uCiAgICAgICAgICMgbiByZXR1cm5zICdQeV9zc2l6ZV90JywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcKICAgICAgICAgIyAoUFlfU1NJWkVfVF9NSU4gLi4uIFBZX1NTSVpFX1RfTUFYKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgzLCBnZXRhcmdzX24oMy4xNCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX24oTG9uZygpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOTksIGdldGFyZ3NfbihJbnQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19uLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX24oTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19uKEludCgpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX24sIFBZX1NTSVpFX1RfTUlOLTEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFBZX1NTSVpFX1RfTUlOLCBnZXRhcmdzX24oUFlfU1NJWkVfVF9NSU4pKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChQWV9TU0laRV9UX01BWCwgZ2V0YXJnc19uKFBZX1NTSVpFX1RfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQWV9TU0laRV9UX01JTiwgZ2V0YXJnc19uKFBZX1NTSVpFX1RfTUlOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQWV9TU0laRV9UX01BWCwgZ2V0YXJnc19uKFBZX1NTSVpFX1RfTUFYKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19uLCBQWV9TU0laRV9UX01BWCsxKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX24oNDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19uKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfbig0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfbig0MkwpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX24sIFZFUllfTEFSR0UpCiAKIAogY2xhc3MgTG9uZ0xvbmdfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X0woc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wKLSAgICAgICAgIyBMIHJldHVybnMgJ2xvbmcgbG9uZycsIGFuZCBkb2VzIHJhbmdlIGNoZWNraW5nIChMTE9OR19NSU4gLi4uIExMT05HX01BWCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19MLCAiSGVsbG8iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgzLCBnZXRhcmdzX0woMy4xNCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX0woTG9uZygpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOTksIGdldGFyZ3NfTChJbnQoKSkpCisgICAgICAgICMgTCByZXR1cm5zICdsb25nIGxvbmcnLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZyAoTExPTkdfTUlOCisgICAgICAgICMgLi4uIExMT05HX01BWCkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoCisgICAgICAgICAgICAgICAgImlnbm9yZSIsCisgICAgICAgICAgICAgICAgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9Ii4qaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0IiwKKyAgICAgICAgICAgICAgICBtb2R1bGU9X19uYW1lX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGdldGFyZ3NfTCgzLjE0KSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoCisgICAgICAgICAgICAgICAgImVycm9yIiwKKyAgICAgICAgICAgICAgICBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0iLippbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiLAorICAgICAgICAgICAgICAgIG1vZHVsZT0idW5pdHRlc3QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGVwcmVjYXRpb25XYXJuaW5nLCBnZXRhcmdzX0wsIDMuMTQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0wsICJIZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfTChMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0woSW50KCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfTCwgTExPTkdfTUlOLTEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKExMT05HX01JTiwgZ2V0YXJnc19MKExMT05HX01JTikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKExMT05HX01BWCwgZ2V0YXJnc19MKExMT05HX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTExPTkdfTUlOLCBnZXRhcmdzX0woTExPTkdfTUlOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMTE9OR19NQVgsIGdldGFyZ3NfTChMTE9OR19NQVgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX0wsIExMT05HX01BWCsxKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX0woNDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19MKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfTCg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfTCg0MkwpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX0wsIFZFUllfTEFSR0UpCiAKICAgICBkZWYgdGVzdF9LKHNlbGYpOgpAQCAtMjI0LDE0ICsyNDcsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0ssIDMuMTQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19LLCBMb25nKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19LLCBJbnQoKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoVUxMT05HX01BWCwgZ2V0YXJnc19LKFVMTE9OR19NQVgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBnZXRhcmdzX0soMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDAsIGdldGFyZ3NfSyhVTExPTkdfTUFYKzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVMTE9OR19NQVgsIGdldGFyZ3NfSyhVTExPTkdfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0soMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19LKFVMTE9OR19NQVgrMSkpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3NfSyg0MikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX0soNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19LKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19LKDQyTCkpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoVkVSWV9MQVJHRSAmIFVMTE9OR19NQVgsIGdldGFyZ3NfSyhWRVJZX0xBUkdFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWRVJZX0xBUkdFICYgVUxMT05HX01BWCwgZ2V0YXJnc19LKFZFUllfTEFSR0UpKQogCiAKIGNsYXNzIFR1cGxlX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTIzOSw3ICsyNjIsNyBAQAogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc190dXBsZQogCiAgICAgICAgIHJldCA9IGdldGFyZ3NfdHVwbGUoMSwgKDIsIDMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXQsICgxLDIsMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAoMSwyLDMpKQogCiAgICAgICAgICMgbWFrZSBzdXJlIGludmFsaWQgdHVwbGUgYXJndW1lbnRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseQogICAgICAgICBjbGFzcyBzZXE6CkBAIC0yNTIsMjUgKzI3NSwyNSBAQAogY2xhc3MgS2V5d29yZHNfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3Bvc2l0aW9uYWxfYXJncyhzZWxmKToKICAgICAgICAgIyB1c2luZyBhbGwgcG9zaXRpb25hbCBhcmdzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcygoMSwyKSwgMywgKDQsKDUsNikpLCAoNyw4LDkpLCAxMCksCiAgICAgICAgICAgICAoMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApCiAgICAgICAgICAgICApCiAgICAgZGVmIHRlc3RfbWl4ZWRfYXJncyhzZWxmKToKICAgICAgICAgIyBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKCgxLDIpLCAzLCAoNCwoNSw2KSksIGFyZzQ9KDcsOCw5KSwgYXJnNT0xMCksCiAgICAgICAgICAgICAoMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApCiAgICAgICAgICAgICApCiAgICAgZGVmIHRlc3Rfa2V5d29yZF9hcmdzKHNlbGYpOgogICAgICAgICAjIGFsbCBrZXl3b3JkcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGdldGFyZ3Nfa2V5d29yZHMoYXJnMT0oMSwyKSwgYXJnMj0zLCBhcmczPSg0LCg1LDYpKSwgYXJnND0oNyw4LDkpLCBhcmc1PTEwKSwKICAgICAgICAgICAgICgxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCkKICAgICAgICAgICAgICkKICAgICBkZWYgdGVzdF9vcHRpb25hbF9hcmdzKHNlbGYpOgogICAgICAgICAjIG1pc3Npbmcgb3B0aW9uYWwga2V5d29yZCBhcmdzLCBza2lwcGluZyB0dXBsZXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKGFyZzE9KDEsMiksIGFyZzI9MywgYXJnNT0xMCksCiAgICAgICAgICAgICAoMSwgMiwgMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTApCiAgICAgICAgICAgICApCkBAIC0yNzksMTQgKzMwMiwxNCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKGFyZzE9KDEsMikpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0cihlcnIpLCAiUmVxdWlyZWQgYXJndW1lbnQgJ2FyZzInIChwb3MgMikgbm90IGZvdW5kIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICJSZXF1aXJlZCBhcmd1bWVudCAnYXJnMicgKHBvcyAyKSBub3QgZm91bmQiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdUeXBlRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQnKQogICAgIGRlZiB0ZXN0X3Rvb19tYW55X2FyZ3Moc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGdldGFyZ3Nfa2V5d29yZHMoKDEsMiksMywoNCwoNSw2KSksKDcsOCw5KSwxMCwxMTEpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0cihlcnIpLCAiZnVuY3Rpb24gdGFrZXMgYXQgbW9zdCA1IGFyZ3VtZW50cyAoNiBnaXZlbikiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgImZ1bmN0aW9uIHRha2VzIGF0IG1vc3QgNSBhcmd1bWVudHMgKDYgZ2l2ZW4pIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgnVHlwZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkJykKICAgICBkZWYgdGVzdF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CkBAIC0yOTQsNyArMzE3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcygoMSwyKSwzLGFyZzU9MTAsYXJnNjY2PTY2NikKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKGVyciksICInYXJnNjY2JyBpcyBhbiBpbnZhbGlkIGtleXdvcmQgYXJndW1lbnQgZm9yIHRoaXMgZnVuY3Rpb24iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgIidhcmc2NjYnIGlzIGFuIGludmFsaWQga2V5d29yZCBhcmd1bWVudCBmb3IgdGhpcyBmdW5jdGlvbiIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoJ1R5cGVFcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCcpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0b3B0LnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKaW5kZXggNDk2NzM4OC4uZjkyNDI4NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKQEAgLTEsNDUgKzEsNDIgQEAKICMgdGVzdF9nZXRvcHQucHkKICMgRGF2aWQgR29vZGdlciA8ZGdvb2RnZXJAYmlnZm9vdC5jb20+IDIwMDAtMDgtMTkKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgcnVuX2RvY3Rlc3QsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgcnVuX2RvY3Rlc3QsIHJ1bl91bml0dGVzdCwgRW52aXJvbm1lbnRWYXJHdWFyZAogaW1wb3J0IHVuaXR0ZXN0CiAKIGltcG9ydCBnZXRvcHQKLWltcG9ydCBvcwogCiBzZW50aW5lbCA9IG9iamVjdCgpCiAKIGNsYXNzIEdldG9wdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYub2xkX3Bvc2l4bHlfY29ycmVjdCA9IG9zLmVudmlyb24uZ2V0KCJQT1NJWExZX0NPUlJFQ1QiLCBzZW50aW5lbCkKLSAgICAgICAgaWYgc2VsZi5vbGRfcG9zaXhseV9jb3JyZWN0IGlzIG5vdCBzZW50aW5lbDoKLSAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uWyJQT1NJWExZX0NPUlJFQ1QiXQorICAgICAgICBzZWxmLmVudiA9IEVudmlyb25tZW50VmFyR3VhcmQoKQorICAgICAgICBpZiAiUE9TSVhMWV9DT1JSRUNUIiBpbiBzZWxmLmVudjoKKyAgICAgICAgICAgIGRlbCBzZWxmLmVudlsiUE9TSVhMWV9DT1JSRUNUIl0KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5vbGRfcG9zaXhseV9jb3JyZWN0IGlzIHNlbnRpbmVsOgotICAgICAgICAgICAgb3MuZW52aXJvbi5wb3AoIlBPU0lYTFlfQ09SUkVDVCIsIE5vbmUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvcy5lbnZpcm9uWyJQT1NJWExZX0NPUlJFQ1QiXSA9IHNlbGYub2xkX3Bvc2l4bHlfY29ycmVjdAorICAgICAgICBzZWxmLmVudi5fX2V4aXRfXygpCisgICAgICAgIGRlbCBzZWxmLmVudgogCiAgICAgZGVmIGFzc2VydEVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGdldG9wdC5HZXRvcHRFcnJvciwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfaGFzX2FyZyhzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGdldG9wdC5zaG9ydF9oYXNfYXJnKCdhJywgJ2E6JykpCi0gICAgICAgIHNlbGYuZmFpbElmKGdldG9wdC5zaG9ydF9oYXNfYXJnKCdhJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldG9wdC5zaG9ydF9oYXNfYXJnKCdhJywgJ2E6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2V0b3B0LnNob3J0X2hhc19hcmcoJ2EnLCAnYScpKQogICAgICAgICBzZWxmLmFzc2VydEVycm9yKGdldG9wdC5zaG9ydF9oYXNfYXJnLCAnYScsICdiJykKIAogICAgIGRlZiB0ZXN0X2xvbmdfaGFzX2FyZ3Moc2VsZik6CiAgICAgICAgIGhhc19hcmcsIG9wdGlvbiA9IGdldG9wdC5sb25nX2hhc19hcmdzKCdhYmMnLCBbJ2FiYz0nXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhhc19hcmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNfYXJnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbiwgJ2FiYycpCiAKICAgICAgICAgaGFzX2FyZywgb3B0aW9uID0gZ2V0b3B0LmxvbmdfaGFzX2FyZ3MoJ2FiYycsIFsnYWJjJ10pCi0gICAgICAgIHNlbGYuZmFpbElmKGhhc19hcmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzX2FyZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24sICdhYmMnKQogCiAgICAgICAgIGhhc19hcmcsIG9wdGlvbiA9IGdldG9wdC5sb25nX2hhc19hcmdzKCdhYmMnLCBbJ2FiY2QnXSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaGFzX2FyZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNfYXJnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbiwgJ2FiY2QnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXJyb3IoZ2V0b3B0LmxvbmdfaGFzX2FyZ3MsICdhYmMnLCBbJ2RlZiddKQpAQCAtMTI0LDEzICsxMjEsMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcnKSwgKCctYicsICcxJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLS1hbHBoYScsICcnKSwgKCctLWJldGEnLCAnMicpXSkKIAorICAgICAgICAjIHJlY29nbml6ZSAiLSIgYXMgYW4gYXJndW1lbnQKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nbnVfZ2V0b3B0KFsnLWEnLCAnLScsICctYicsICctJ10sICdhYjonLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJy0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcnKSwgKCctYicsICctJyldKQorCiAgICAgICAgICMgUG9zaXggc3R5bGUgdmlhICsKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nbnVfZ2V0b3B0KGNtZGxpbmUsICcrYWI6JywgWydhbHBoYScsICdiZXRhPSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy1hJywgJycpXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJ2FyZzEnLCAnLWInLCAnMScsICctLWFscGhhJywgJy0tYmV0YT0yJ10pCiAKICAgICAgICAgIyBQb3NpeCBzdHlsZSB2aWEgUE9TSVhMWV9DT1JSRUNUCi0gICAgICAgIG9zLmVudmlyb25bIlBPU0lYTFlfQ09SUkVDVCJdID0gIjEiCisgICAgICAgIHNlbGYuZW52WyJQT1NJWExZX0NPUlJFQ1QiXSA9ICIxIgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdudV9nZXRvcHQoY21kbGluZSwgJ2FiOicsIFsnYWxwaGEnLCAnYmV0YT0nXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcnKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWydhcmcxJywgJy1iJywgJzEnLCAnLS1hbHBoYScsICctLWJldGE9MiddKQpAQCAtMTczLDkgKzE3NSw5IEBACiAKICAgICBkZWYgdGVzdF9pc3N1ZTQ2Mjkoc2VsZik6CiAgICAgICAgIGxvbmdvcHRzLCBzaG9ydG9wdHMgPSBnZXRvcHQuZ2V0b3B0KFsnLS1oZWxwPSddLCAnJywgWydoZWxwPSddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsb25nb3B0cywgWygnLS1oZWxwJywgJycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nb3B0cywgWygnLS1oZWxwJywgJycpXSkKICAgICAgICAgbG9uZ29wdHMsIHNob3J0b3B0cyA9IGdldG9wdC5nZXRvcHQoWyctLWhlbHA9eCddLCAnJywgWydoZWxwPSddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsb25nb3B0cywgWygnLS1oZWxwJywgJ3gnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZ29wdHMsIFsoJy0taGVscCcsICd4JyldKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhnZXRvcHQuR2V0b3B0RXJyb3IsIGdldG9wdC5nZXRvcHQsIFsnLS1oZWxwPSddLCAnJywgWydoZWxwJ10pCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0dGV4dC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0dGV4dC5weQppbmRleCBhYjZiYzlhLi5mMDM2OTU0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldHRleHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXR0ZXh0LnB5CkBAIC01OCwyOSArNTgsMjYgQEAKIE1PRklMRSA9IG9zLnBhdGguam9pbihMT0NBTEVESVIsICdnZXR0ZXh0Lm1vJykKIFVNT0ZJTEUgPSBvcy5wYXRoLmpvaW4oTE9DQUxFRElSLCAndWdldHRleHQubW8nKQogTU1PRklMRSA9IG9zLnBhdGguam9pbihMT0NBTEVESVIsICdtZXRhZGF0YS5tbycpCi10cnk6Ci0gICAgTEFORyA9IG9zLmVudmlyb25bJ0xBTkdVQUdFJ10KLWV4Y2VwdDoKLSAgICBMQU5HID0gJ2VuJwogCiAKIGNsYXNzIEdldHRleHRCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihMT0NBTEVESVIpOgogICAgICAgICAgICAgb3MubWFrZWRpcnMoTE9DQUxFRElSKQotICAgICAgICBmcCA9IG9wZW4oTU9GSUxFLCAnd2InKQotICAgICAgICBmcC53cml0ZShiYXNlNjQuZGVjb2Rlc3RyaW5nKEdOVV9NT19EQVRBKSkKLSAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICBmcCA9IG9wZW4oVU1PRklMRSwgJ3diJykKLSAgICAgICAgZnAud3JpdGUoYmFzZTY0LmRlY29kZXN0cmluZyhVTU9fREFUQSkpCi0gICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZnAgPSBvcGVuKE1NT0ZJTEUsICd3YicpCi0gICAgICAgIGZwLndyaXRlKGJhc2U2NC5kZWNvZGVzdHJpbmcoTU1PX0RBVEEpKQotICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgIG9zLmVudmlyb25bJ0xBTkdVQUdFJ10gPSAneHgnCisgICAgICAgIHdpdGggb3BlbihNT0ZJTEUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoYmFzZTY0LmRlY29kZXN0cmluZyhHTlVfTU9fREFUQSkpCisgICAgICAgIHdpdGggb3BlbihVTU9GSUxFLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGJhc2U2NC5kZWNvZGVzdHJpbmcoVU1PX0RBVEEpKQorICAgICAgICB3aXRoIG9wZW4oTU1PRklMRSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShiYXNlNjQuZGVjb2Rlc3RyaW5nKE1NT19EQVRBKSkKKworICAgICAgICBzZWxmLmVudiA9IHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkKKyAgICAgICAgc2VsZi5lbnZbJ0xBTkdVQUdFJ10gPSAneHgnCisgICAgICAgIGdldHRleHQuX3RyYW5zbGF0aW9ucy5jbGVhcigpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIG9zLmVudmlyb25bJ0xBTkdVQUdFJ10gPSBMQU5HCisgICAgICAgIHNlbGYuZW52Ll9fZXhpdF9fKCkKKyAgICAgICAgZGVsIHNlbGYuZW52CiAgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5zcGxpdChMT0NBTEVESVIpWzBdKQogCiAKQEAgLTEzNiw5ICsxMzMsOCBAQAogICAgIGRlZiB0ZXN0X3RoZV9hbHRlcm5hdGl2ZV9pbnRlcmZhY2Uoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICAjIHRlc3QgdGhlIGFsdGVybmF0aXZlIGludGVyZmFjZQotICAgICAgICBmcCA9IG9wZW4oc2VsZi5tb2ZpbGUsICdyYicpCi0gICAgICAgIHQgPSBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5tb2ZpbGUsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgdCA9IGdldHRleHQuR05VVHJhbnNsYXRpb25zKGZwKQogICAgICAgICAjIEluc3RhbGwgdGhlIHRyYW5zbGF0aW9uIG9iamVjdAogICAgICAgICB0Lmluc3RhbGwoKQogICAgICAgICBlcShfKCdudWRnZSBudWRnZScpLCAnd2luayB3aW5rJykKQEAgLTIyOCw5ICsyMjQsOCBAQAogCiAgICAgZGVmIHRlc3RfcGx1cmFsX2Zvcm1zMihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIGZwID0gb3BlbihzZWxmLm1vZmlsZSwgJ3JiJykKLSAgICAgICAgdCA9IGdldHRleHQuR05VVHJhbnNsYXRpb25zKGZwKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihzZWxmLm1vZmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICB0ID0gZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMoZnApCiAgICAgICAgIHggPSB0Lm5nZXR0ZXh0KCdUaGVyZSBpcyAlcyBmaWxlJywgJ1RoZXJlIGFyZSAlcyBmaWxlcycsIDEpCiAgICAgICAgIGVxKHgsICdIYXkgJXMgZmljaGVybycpCiAgICAgICAgIHggPSB0Lm5nZXR0ZXh0KCdUaGVyZSBpcyAlcyBmaWxlJywgJ1RoZXJlIGFyZSAlcyBmaWxlcycsIDIpCkBAIC0zMDAsMTUgKzI5NSwxMiBAQAogY2xhc3MgVW5pY29kZVRyYW5zbGF0aW9uc1Rlc3QoR2V0dGV4dEJhc2VUZXN0KToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIEdldHRleHRCYXNlVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBmcCA9IG9wZW4oVU1PRklMRSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oVU1PRklMRSwgJ3JiJykgYXMgZnA6CiAgICAgICAgICAgICBzZWxmLnQgPSBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgc2VsZi5fID0gc2VsZi50LnVnZXR0ZXh0CiAKICAgICBkZWYgdGVzdF91bmljb2RlX21zZ2lkKHNlbGYpOgotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHNlbGYuXygnJyksIHVuaWNvZGUpKQogICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShzZWxmLl8odScnKSwgdW5pY29kZSkpCiAKQEAgLTMyMCwxNSArMzEyLDEyIEBACiBjbGFzcyBXZWlyZE1ldGFkYXRhVGVzdChHZXR0ZXh0QmFzZVRlc3QpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgR2V0dGV4dEJhc2VUZXN0LnNldFVwKHNlbGYpCi0gICAgICAgIGZwID0gb3BlbihNTU9GSUxFLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihNTU9GSUxFLCAncmInKSBhcyBmcDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnQgPSBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBzZWxmLnRlYXJEb3duKCkKICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3Rfd2VpcmRfbWV0YWRhdGEoc2VsZik6CiAgICAgICAgIGluZm8gPSBzZWxmLnQuaW5mbygpCkBAIC0zMzYsNiArMzI1LDM3IEBACiAgICAgICAgICAgICdKb2huIERvZSA8amRvZUBleGFtcGxlLmNvbT5cbkphbmUgRm9vYmFyIDxqZm9vYmFyQGV4YW1wbGUuY29tPicpCiAKIAorY2xhc3MgRHVtbXlHTlVUcmFuc2xhdGlvbnMoZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMpOgorICAgIGRlZiBmb28oc2VsZik6CisgICAgICAgIHJldHVybiAnZm9vJworCisKK2NsYXNzIEdldHRleHRDYWNoZVRlc3RDYXNlKEdldHRleHRCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RfY2FjaGUoc2VsZik6CisgICAgICAgIHNlbGYubG9jYWxlZGlyID0gb3MuY3VyZGlyCisgICAgICAgIHNlbGYubW9maWxlID0gTU9GSUxFCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2V0dGV4dC5fdHJhbnNsYXRpb25zKSwgMCkKKworICAgICAgICB0ID0gZ2V0dGV4dC50cmFuc2xhdGlvbignZ2V0dGV4dCcsIHNlbGYubG9jYWxlZGlyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdldHRleHQuX3RyYW5zbGF0aW9ucyksIDEpCisKKyAgICAgICAgdCA9IGdldHRleHQudHJhbnNsYXRpb24oJ2dldHRleHQnLCBzZWxmLmxvY2FsZWRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfPUR1bW15R05VVHJhbnNsYXRpb25zKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdldHRleHQuX3RyYW5zbGF0aW9ucyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2NsYXNzX18sIER1bW15R05VVHJhbnNsYXRpb25zKQorCisgICAgICAgICMgQ2FsbGluZyBpdCBhZ2FpbiBkb2Vzbid0IGFkZCB0byB0aGUgY2FjaGUKKworICAgICAgICB0ID0gZ2V0dGV4dC50cmFuc2xhdGlvbignZ2V0dGV4dCcsIHNlbGYubG9jYWxlZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc189RHVtbXlHTlVUcmFuc2xhdGlvbnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2V0dGV4dC5fdHJhbnNsYXRpb25zKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Ll9fY2xhc3NfXywgRHVtbXlHTlVUcmFuc2xhdGlvbnMpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2wucHkgYi9MaWIvdGVzdC90ZXN0X2dsLnB5CmluZGV4IDIwZmQ3NzYuLmM5MjY0ZWUgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nbC5weQpAQCAtMyw4ICszLDExIEBACiAgICAgdGFrZW4gbW9zdGx5IGZyb20gdGhlIGRvY3VtZW50YXRpb24uCiAgICAgUm9nZXIgRS4gTWFzc2UKICIiIgotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVGVzdFNraXBwZWQKLWltcG9ydCBnbCwgR0wsIHRpbWUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaW1wb3J0X21vZHVsZQoraW1wb3J0IHRpbWUKK2dsID0gaW1wb3J0X21vZHVsZSgnZ2wnKQorR0wgPSBpbXBvcnRfbW9kdWxlKCdHTCcpCiAKIGdsYXR0cnMgPSBbJ1JHQmNvbG9yJywgJ1JHQmN1cnNvcicsICdSR0Jtb2RlJywgJ1JHQnJhbmdlJywgJ1JHQndyaXRlbWFzaycsCiAnX19kb2NfXycsICdfX25hbWVfXycsICdhZGR0b3B1cCcsICdhbHRnZXRtYXRyaXgnLCAnYXJjJywgJ2FyY2YnLApAQCAtODcsNyArOTAsNyBAQAogICAgIHRyeToKICAgICAgICAgZGlzcGxheSA9IG9zLmVudmlyb25bJ0RJU1BMQVknXQogICAgIGV4Y2VwdDoKLSAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQsICJObyAkRElTUExBWSAtLSBza2lwcGluZyBnbCB0ZXN0IgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIk5vICRESVNQTEFZIC0tIHNraXBwaW5nIGdsIHRlc3QiCiAKICAgICAjIHRvdWNoIGFsbCB0aGUgYXR0cmlidXRlcyBvZiBnbCB3aXRob3V0IGRvaW5nIGFueXRoaW5nCiAgICAgaWYgdmVyYm9zZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQppbmRleCBmMTk5M2FiLi42OTIzMjJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dsb2IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CkBAIC01OSw4ICs1OSw4IEBACiAgICAgICAgIGlmIHNldCh0eXBlKHgpIGZvciB4IGluIHRtcCkgPT0gdW5pc2V0OgogICAgICAgICAgICAgdTEgPSBnbG9iLmdsb2IodScqJykKICAgICAgICAgICAgIHUyID0gZ2xvYi5nbG9iKHUnLi8qJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldCh0eXBlKHIpIGZvciByIGluIHUxKSwgdW5pc2V0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2V0KHR5cGUocikgZm9yIHIgaW4gdTIpLCB1bmlzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCh0eXBlKHIpIGZvciByIGluIHUxKSwgdW5pc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQodHlwZShyKSBmb3IgciBpbiB1MiksIHVuaXNldCkKIAogICAgIGRlZiB0ZXN0X2dsb2Jfb25lX2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydFNlcXVlbmNlc0VxdWFsX25vb3JkZXIKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgcmVzID0gZ2xvYi5nbG9iKHNlbGYudGVtcGRpciArICcqJyArIG9zLnNlcCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKICAgICAgICAgIyBlaXRoZXIgb2YgdGhlc2UgcmVzdWx0cyBhcmUgcmVhc29uYWJsZQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzWzBdIGluIFtzZWxmLnRlbXBkaXIsIHNlbGYudGVtcGRpciArIG9zLnNlcF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVzWzBdLCBbc2VsZi50ZW1wZGlyLCBzZWxmLnRlbXBkaXIgKyBvcy5zZXBdKQogCiAgICAgZGVmIHRlc3RfZ2xvYl9icm9rZW5fc3ltbGlua3Moc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIob3MsICdzeW1saW5rJyk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkgYi9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKaW5kZXggNThkZGE0MC4uMDg0ZjU5MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQpAQCAtMSw1MyArMSw0NyBAQAogIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCAxLCBncmFtbWFyLgogIyBUaGlzIGp1c3QgdGVzdHMgd2hldGhlciB0aGUgcGFyc2VyIGFjY2VwdHMgdGhlbSBhbGwuCiAKLSMgTk9URTogV2hlbiB5b3UgcnVuIHRoaXMgdGVzdCBhcyBhIHNjcmlwdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHlvdQotIyBnZXQgd2FybmluZ3MgYWJvdXQgY2VydGFpbiBoZXgvb2N0IGNvbnN0YW50cy4gIFNpbmNlIHRob3NlIGFyZQotIyBpc3N1ZWQgYnkgdGhlIHBhcnNlciwgeW91IGNhbid0IHN1cHByZXNzIHRoZW0gYnkgYWRkaW5nIGEKLSMgZmlsdGVyd2FybmluZ3MoKSBjYWxsIHRvIHRoaXMgbW9kdWxlLiAgVGhlcmVmb3JlLCB0byBzaHV0IHVwIHRoZQotIyByZWdyZXNzaW9uIHRlc3QsIHRoZSBmaWx0ZXJ3YXJuaW5ncygpIGNhbGwgaGFzIGJlZW4gYWRkZWQgdG8KLSMgcmVncnRlc3QucHkuCi0KLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIGNoZWNrX3N5bnRheF9lcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2hlY2tfcHkza193YXJuaW5ncykKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfc3ludGF4X2Vycm9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19weTNrX3dhcm5pbmdzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKICMgdGVzdGluZyBpbXBvcnQgKgogZnJvbSBzeXMgaW1wb3J0ICoKIAorCiBjbGFzcyBUb2tlblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0QmFja3NsYXNoKHNlbGYpOgogICAgICAgICAjIEJhY2tzbGFzaCBtZWFucyBsaW5lIGNvbnRpbnVhdGlvbjoKICAgICAgICAgeCA9IDEgXAogICAgICAgICArIDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgMiwgJ2JhY2tzbGFzaCBmb3IgbGluZSBjb250aW51YXRpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDIsICdiYWNrc2xhc2ggZm9yIGxpbmUgY29udGludWF0aW9uJykKIAogICAgICAgICAjIEJhY2tzbGFzaCBkb2VzIG5vdCBtZWFucyBjb250aW51YXRpb24gaW4gY29tbWVudHMgOlwKICAgICAgICAgeCA9IDAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgMCwgJ2JhY2tzbGFzaCBlbmRpbmcgY29tbWVudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMCwgJ2JhY2tzbGFzaCBlbmRpbmcgY29tbWVudCcpCiAKICAgICBkZWYgdGVzdFBsYWluSW50ZWdlcnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDB4ZmYsIDI1NSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMDM3NywgMjU1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyMTQ3NDgzNjQ3LCAwMTc3Nzc3Nzc3NzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmZiwgMjU1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAzNzcsIDI1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyMTQ3NDgzNjQ3LCAwMTc3Nzc3Nzc3NzcpCiAgICAgICAgICMgIjB4IiBpcyBub3QgYSB2YWxpZCBsaXRlcmFsCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAiMHgiKQogICAgICAgICBmcm9tIHN5cyBpbXBvcnQgbWF4aW50CiAgICAgICAgIGlmIG1heGludCA9PSAyMTQ3NDgzNjQ3OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTIxNDc0ODM2NDctMSwgLTAyMDAwMDAwMDAwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTIxNDc0ODM2NDctMSwgLTAyMDAwMDAwMDAwMCkKICAgICAgICAgICAgICMgWFhYIC0yMTQ3NDgzNjQ4Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMDM3Nzc3Nzc3Nzc3ID4gMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygweGZmZmZmZmZmID4gMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwMzc3Nzc3Nzc3NzcgPiAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDB4ZmZmZmZmZmYgPiAwKQogICAgICAgICAgICAgZm9yIHMgaW4gJzIxNDc0ODM2NDgnLCAnMDQwMDAwMDAwMDAwJywgJzB4MTAwMDAwMDAwJzoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHggPSBldmFsKHMpCiAgICAgICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiT3ZlcmZsb3dFcnJvciBvbiBodWdlIGludGVnZXIgbGl0ZXJhbCAlciIgJSBzKQogICAgICAgICBlbGlmIG1heGludCA9PSA5MjIzMzcyMDM2ODU0Nzc1ODA3OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTkyMjMzNzIwMzY4NTQ3NzU4MDctMSwgLTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDAxNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3ID4gMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygweGZmZmZmZmZmZmZmZmZmZmYgPiAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtOTIyMzM3MjAzNjg1NDc3NTgwNy0xLCAtMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMDE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcgPiAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDB4ZmZmZmZmZmZmZmZmZmZmZiA+IDApCiAgICAgICAgICAgICBmb3IgcyBpbiAnOTIyMzM3MjAzNjg1NDc3NTgwOCcsICcwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsIFwKICAgICAgICAgICAgICAgICAgICAgICcweDEwMDAwMDAwMDAwMDAwMDAwJzoKICAgICAgICAgICAgICAgICB0cnk6CkBAIC04MiwxNSArNzYsMTUgQEAKICAgICAgICAgeCA9IDMuMWU0CiAKICAgICBkZWYgdGVzdFN0cmluZ0xpdGVyYWxzKHNlbGYpOgotICAgICAgICB4ID0gJyc7IHkgPSAiIjsgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAwIGFuZCB4ID09IHkpCi0gICAgICAgIHggPSAnXCcnOyB5ID0gIiciOyBzZWxmLmFzc2VydF8obGVuKHgpID09IDEgYW5kIHggPT0geSBhbmQgb3JkKHgpID09IDM5KQotICAgICAgICB4ID0gJyInOyB5ID0gIlwiIjsgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAxIGFuZCB4ID09IHkgYW5kIG9yZCh4KSA9PSAzNCkKKyAgICAgICAgeCA9ICcnOyB5ID0gIiI7IHNlbGYuYXNzZXJ0VHJ1ZShsZW4oeCkgPT0gMCBhbmQgeCA9PSB5KQorICAgICAgICB4ID0gJ1wnJzsgeSA9ICInIjsgc2VsZi5hc3NlcnRUcnVlKGxlbih4KSA9PSAxIGFuZCB4ID09IHkgYW5kIG9yZCh4KSA9PSAzOSkKKyAgICAgICAgeCA9ICciJzsgeSA9ICJcIiI7IHNlbGYuYXNzZXJ0VHJ1ZShsZW4oeCkgPT0gMSBhbmQgeCA9PSB5IGFuZCBvcmQoeCkgPT0gMzQpCiAgICAgICAgIHggPSAiZG9lc24ndCBcInNocmlua1wiIGRvZXMgaXQiCiAgICAgICAgIHkgPSAnZG9lc25cJ3QgInNocmluayIgZG9lcyBpdCcKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAyNCBhbmQgeCA9PSB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHgpID09IDI0IGFuZCB4ID09IHkpCiAgICAgICAgIHggPSAiZG9lcyBcInNocmlua1wiIGRvZXNuJ3QgaXQiCiAgICAgICAgIHkgPSAnZG9lcyAic2hyaW5rIiBkb2VzblwndCBpdCcKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAyNCBhbmQgeCA9PSB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHgpID09IDI0IGFuZCB4ID09IHkpCiAgICAgICAgIHggPSAiIiIKIFRoZSAicXVpY2siCiBicm93biBmb3gKQEAgLTk4LDI4ICs5MiwyOCBAQAogdGhlICdsYXp5JyBkb2cuCiAiIiIKICAgICAgICAgeSA9ICdcblRoZSAicXVpY2siXG5icm93biBmb3hcbmp1bXBzIG92ZXJcbnRoZSBcJ2xhenlcJyBkb2cuXG4nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKICAgICAgICAgeSA9ICcnJwogVGhlICJxdWljayIKIGJyb3duIGZveAoganVtcHMgb3ZlcgogdGhlICdsYXp5JyBkb2cuCiAnJycKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQogICAgICAgICB5ID0gIlxuXAogVGhlIFwicXVpY2tcIlxuXAogYnJvd24gZm94XG5cCiBqdW1wcyBvdmVyXG5cCiB0aGUgJ2xhenknIGRvZy5cblwKICIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQogICAgICAgICB5ID0gJ1xuXAogVGhlIFwicXVpY2tcIlxuXAogYnJvd24gZm94XG5cCiBqdW1wcyBvdmVyXG5cCiB0aGUgXCdsYXp5XCcgZG9nLlxuXAogJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LCB5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCiAKIAogY2xhc3MgR3JhbW1hclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE1NiwxOCArMTUwLDE4IEBACiAgICAgICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKICAgICAgICAgZXhlYygnZGVmIGY0KHR3bywgKGNvbXBvdW5kLCAoYXJndW1lbnQsIGxpc3QpKSk6IHBhc3MnKQogICAgICAgICBleGVjKCdkZWYgZjUoKGNvbXBvdW5kLCBmaXJzdCksIHR3byk6IHBhc3MnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmMi5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgnb25lX2FyZ3VtZW50JywpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmMy5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgndHdvJywgJ2FyZ3VtZW50cycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCdvbmVfYXJndW1lbnQnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjMuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLCAoJ3R3bycsICdhcmd1bWVudHMnKSkKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGY0LmZ1bmNfY29kZS5jb192YXJuYW1lcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjQuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAogICAgICAgICAgICAgICAgICAgICgndHdvJywgJyhjb21wb3VuZCwgKGFyZ3VtZW50LCBsaXN0KSknLCAnY29tcG91bmQnLCAnYXJndW1lbnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGlzdCcsKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGY1LmZ1bmNfY29kZS5jb192YXJuYW1lcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjUuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAogICAgICAgICAgICAgICAgICAgICgnKGNvbXBvdW5kLCBmaXJzdCknLCAndHdvJywgJ2NvbXBvdW5kJywgJ2ZpcnN0JykpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmNC5mdW5jX2NvZGUuY29fdmFybmFtZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGY0LmZ1bmNfY29kZS5jb192YXJuYW1lcywKICAgICAgICAgICAgICAgICAgICgndHdvJywgJy4xJywgJ2NvbXBvdW5kJywgJ2FyZ3VtZW50JywgICdsaXN0JykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmNS5mdW5jX2NvZGUuY29fdmFybmFtZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGY1LmZ1bmNfY29kZS5jb192YXJuYW1lcywKICAgICAgICAgICAgICAgICAgICgnLjAnLCAndHdvJywgJ2NvbXBvdW5kJywgJ2ZpcnN0JykpCiAgICAgICAgIGRlZiBhMShvbmVfYXJnLCk6IHBhc3MKICAgICAgICAgZGVmIGEyKHR3bywgYXJncywpOiBwYXNzCkBAIC0yMDQsMTAgKzE5OCwxMCBAQAogICAgICAgICAjIGNldmFsIHVucGFja3MgdGhlIGZvcm1hbCBhcmd1bWVudHMgaW50byB0aGUgZmlyc3QgYXJnY291bnQgbmFtZXM7CiAgICAgICAgICMgdGh1cywgdGhlIG5hbWVzIG5lc3RlZCBpbnNpZGUgdHVwbGVzIG11c3QgYXBwZWFyIGFmdGVyIHRoZXNlIG5hbWVzLgogICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModjMuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLCAoJ2EnLCAnKGIsIGMpJywgJ3Jlc3QnLCAnYicsICdjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYzLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCdhJywgJyhiLCBjKScsICdyZXN0JywgJ2InLCAnYycpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModjMuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLCAoJ2EnLCAnLjEnLCAncmVzdCcsICdiJywgJ2MnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModjMoMSwgKDIsIDMpLCA0KSwgKDEsIDIsIDMsICg0LCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2My5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgnYScsICcuMScsICdyZXN0JywgJ2InLCAnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYzKDEsICgyLCAzKSwgNCksICgxLCAyLCAzLCAoNCwpKSkKICAgICAgICAgZGVmIGQwMShhPTEpOiBwYXNzCiAgICAgICAgIGQwMSgpCiAgICAgICAgIGQwMSgxKQpAQCAtMjg5LDcgKzI4Myw3IEBACiAgICAgICAgICMga2V5d29yZCBhcmd1bWVudHMgYWZ0ZXIgKmFyZ2xpc3QKICAgICAgICAgZGVmIGYoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgICAgIHJldHVybiBhcmdzLCBrd2FyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZigxLCB4PTIsICpbMywgNF0sIHk9NSksICgoMSwgMywgNCksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigxLCB4PTIsICpbMywgNF0sIHk9NSksICgoMSwgMywgNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd4JzoyLCAneSc6NX0pKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgImYoMSwgKigyLDMpLCA0KSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAiZigxLCB4PTIsICooMyw0KSwgeD01KSIpCkBAIC0zMDEsMTUgKzI5NSwxNSBAQAogICAgIGRlZiB0ZXN0TGFtYmRlZihzZWxmKToKICAgICAgICAgIyMjIGxhbWJkZWY6ICdsYW1iZGEnIFt2YXJhcmdzbGlzdF0gJzonIHRlc3QKICAgICAgICAgbDEgPSBsYW1iZGEgOiAwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGwxKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEoKSwgMCkKICAgICAgICAgbDIgPSBsYW1iZGEgOiBhW2RdICMgWFhYIGp1c3QgdGVzdGluZyB0aGUgZXhwcmVzc2lvbgogICAgICAgICBsMyA9IGxhbWJkYSA6IFsyIDwgeCBmb3IgeCBpbiBbLTEsIDMsIDBMXV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDMoKSwgWzAsIDEsIDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwzKCksIFswLCAxLCAwXSkKICAgICAgICAgbDQgPSBsYW1iZGEgeCA9IGxhbWJkYSB5ID0gbGFtYmRhIHo9MSA6IHogOiB5KCkgOiB4KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDQoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsNCgpLCAxKQogICAgICAgICBsNSA9IGxhbWJkYSB4LCB5LCB6PTI6IHggKyB5ICsgegotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsNSgxLCAyKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDUoMSwgMiwgMyksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDUoMSwgMiksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDUoMSwgMiwgMyksIDYpCiAgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAibGFtYmRhIHg6IHggPSAyIikKICAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJsYW1iZGEgKE5vbmUsKTogTm9uZSIpCiAKQEAgLTU0NSw4ICs1MzksNiBAQAogICAgICAgICBnID0ge30KICAgICAgICAgbCA9IHt9CiAKLSAgICAgICAgaW1wb3J0IHdhcm5pbmdzCi0gICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiZ2xvYmFsIHN0YXRlbWVudCIsIG1vZHVsZT0iPHN0cmluZz4iKQogICAgICAgICBleGVjICdnbG9iYWwgYTsgYSA9IDE7IGIgPSAyJyBpbiBnLCBsCiAgICAgICAgIGlmICdfX2J1aWx0aW5zX18nIGluIGc6IGRlbCBnWydfX2J1aWx0aW5zX18nXQogICAgICAgICBpZiAnX19idWlsdGluc19fJyBpbiBsOiBkZWwgbFsnX19idWlsdGluc19fJ10KQEAgLTU1NCw3ICs1NDYsNyBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCdleGVjIC4uLiBpbiBnICglcyksIGwgKCVzKScgJShnLGwpKQogCiAgICAgZGVmIHRlc3RBc3NlcnQoc2VsZik6Ci0gICAgICAgICMgYXNzZXJ0X3N0bXQ6ICdhc3NlcnQnIHRlc3QgWycsJyB0ZXN0XQorICAgICAgICAjIGFzc2VydFRydWVzdG10OiAnYXNzZXJ0JyB0ZXN0IFsnLCcgdGVzdF0KICAgICAgICAgYXNzZXJ0IDEKICAgICAgICAgYXNzZXJ0IDEsIDEKICAgICAgICAgYXNzZXJ0IGxhbWJkYSB4OngKQEAgLTU2Miw3ICs1NTQsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBhc3NlcnQgMCwgIm1zZyIKICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZS5hcmdzWzBdLCAibXNnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAibXNnIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIF9fZGVidWdfXzoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkFzc2VydGlvbkVycm9yIG5vdCByYWlzZWQgYnkgYXNzZXJ0IDAiKQpAQCAtNTk2LDcgKzU4OCw3IEBACiAgICAgICAgICAgICB4ID0gMQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgeCA9IDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAyKQogCiAgICAgZGVmIHRlc3RGb3Ioc2VsZik6CiAgICAgICAgICMgJ2ZvcicgZXhwcmxpc3QgJ2luJyBleHBybGlzdCAnOicgc3VpdGUgWydlbHNlJyAnOicgc3VpdGVdCkBAIC03NTEsMTEgKzc0MywxMSBAQAogICAgICAgICBkWzEsMiwzXSA9IDQKICAgICAgICAgTCA9IGxpc3QoZCkKICAgICAgICAgTC5zb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKEwpLCAnWzEsICgxLCksICgxLCAyKSwgKDEsIDIsIDMpXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEwpLCAnWzEsICgxLCksICgxLCAyKSwgKDEsIDIsIDMpXScpCiAKICAgICBkZWYgdGVzdEF0b21zKHNlbGYpOgogICAgICAgICAjIyMgYXRvbTogJygnIFt0ZXN0bGlzdF0gJyknIHwgJ1snIFt0ZXN0bGlzdF0gJ10nIHwgJ3snIFtkaWN0bWFrZXJdICd9JyB8ICdgJyB0ZXN0bGlzdCAnYCcgfCBOQU1FIHwgTlVNQkVSIHwgU1RSSU5HCi0gICAgICAgICMjIyBkaWN0bWFrZXI6IHRlc3QgJzonIHRlc3QgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10KKyAgICAgICAgIyMjIGRpY3RvcnNldG1ha2VyOiAodGVzdCAnOicgdGVzdCAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXSkgfCAodGVzdCAoJywnIHRlc3QpKiBbJywnXSkKIAogICAgICAgICB4ID0gKDEpCiAgICAgICAgIHggPSAoMSBvciAyIG9yIDMpCkBAIC03NzUsNiArNzY3LDExIEBACiAgICAgICAgIHggPSB7J29uZSc6IDEsICd0d28nOiAyLH0KICAgICAgICAgeCA9IHsnb25lJzogMSwgJ3R3byc6IDIsICd0aHJlZSc6IDMsICdmb3VyJzogNCwgJ2ZpdmUnOiA1LCAnc2l4JzogNn0KIAorICAgICAgICB4ID0geydvbmUnfQorICAgICAgICB4ID0geydvbmUnLCAxLH0KKyAgICAgICAgeCA9IHsnb25lJywgJ3R3bycsICd0aHJlZSd9CisgICAgICAgIHggPSB7MiwgMywgNCx9CisKICAgICAgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZwogICAgICAgICB4ID0gZXZhbCgnYHhgJykKICAgICAgICAgeCA9IGV2YWwoJ2AxIG9yIDIgb3IgM2AnKQpAQCAtODEwLDYgKzgwNywxMyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEcuZGVjb3JhdGVkLCBUcnVlKQogCisgICAgZGVmIHRlc3REaWN0Y29tcHMoc2VsZik6CisgICAgICAgICMgZGljdG9yc2V0bWFrZXI6ICggKHRlc3QgJzonIHRlc3QgKGNvbXBfZm9yIHwKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10pKSB8CisgICAgICAgICMgICAgICAgICAgICAgICAgICAgKHRlc3QgKGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10pKSApCisgICAgICAgIG51bXMgPSBbMSwgMiwgM10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7aTppKzEgZm9yIGkgaW4gbnVtc30sIHsxOiAyLCAyOiAzLCAzOiA0fSkKKwogICAgIGRlZiB0ZXN0TGlzdGNvbXBzKHNlbGYpOgogICAgICAgICAjIGxpc3QgY29tcHJlaGVuc2lvbiB0ZXN0cwogICAgICAgICBudW1zID0gWzEsIDIsIDMsIDQsIDVdCkBAIC05MjcsNiArOTMxLDI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3ggZm9yIHgsIGluIFsoNCwpLCAoNSwpLCAoNiwpXV0sIFs0LCA1LCA2XSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHggZm9yIHgsIGluIFsoNywpLCAoOCwpLCAoOSwpXSksIFs3LCA4LCA5XSkKIAorICAgIGRlZiB0ZXN0X3dpdGhfc3RhdGVtZW50KHNlbGYpOgorICAgICAgICBjbGFzcyBtYW5hZ2VyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoMSwgMikKKyAgICAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggbWFuYWdlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4OgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyAoeCwgeSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggbWFuYWdlcigpLCBtYW5hZ2VyKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggbWFuYWdlcigpIGFzIHgsIG1hbmFnZXIoKSBhcyB5OgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4LCBtYW5hZ2VyKCk6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdElmRWxzZUV4cHIoc2VsZik6CiAgICAgICAgICMgVGVzdCBpZmVsc2UgZXhwcmVzc2lvbnMgaW4gdmFyaW91cyBjYXNlcwogICAgICAgICBkZWYgX2NoZWNrZXZhbChtc2csIHJldCk6CkBAIC05NTMsOSArOTc3LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDYgLyAyIGlmIDEgZWxzZSAzKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiA8IDQgaWYgMCBlbHNlIDIpLCAyKQogCisgICAgZGVmIHRlc3RfcGFyZW5fZXZhbHVhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxNiAvLyAoNCAvLyAyKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTYgLy8gNCkgLy8gMiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxNiAvLyA0IC8vIDIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGYWxzZSBpcyAoMiBpcyAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoRmFsc2UgaXMgMikgaXMgMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGYWxzZSBpcyAyIGlzIDMpCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAgICAgKCJiYWNrcXVvdGUgbm90IHN1cHBvcnRlZCIsIFN5bnRheFdhcm5pbmcpLAogICAgICAgICAgICAgKCJ0dXBsZSBwYXJhbWV0ZXIgdW5wYWNraW5nIGhhcyBiZWVuIHJlbW92ZWQiLCBTeW50YXhXYXJuaW5nKSwKICAgICAgICAgICAgICgicGFyZW50aGVzaXplZCBhcmd1bWVudCBuYW1lcyBhcmUgaW52YWxpZCIsIFN5bnRheFdhcm5pbmcpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ncnAucHkgYi9MaWIvdGVzdC90ZXN0X2dycC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDU2NGM3ZjAuLmU5ZTE3NTgKLS0tIGEvTGliL3Rlc3QvdGVzdF9ncnAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ncnAucHkKQEAgLTEsOSArMSwxMCBAQAogIiIiVGVzdCBzY3JpcHQgZm9yIHRoZSBncnAgbW9kdWxlLiIiIgogCi1pbXBvcnQgZ3JwCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKK2dycCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdncnAnKQorCiBjbGFzcyBHcm91cERhdGFiYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGNoZWNrX3ZhbHVlKHNlbGYsIHZhbHVlKToKQEAgLTExLDEzICsxMiwxMyBAQAogICAgICAgICAjIGF0dHJpYnV0ZXMgcHJvbWlzZWQgYnkgdGhlIGRvY3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWUpLCA0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWzBdLCB2YWx1ZS5ncl9uYW1lKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh2YWx1ZS5ncl9uYW1lLCBiYXNlc3RyaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLmdyX25hbWUsIGJhc2VzdHJpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbMV0sIHZhbHVlLmdyX3Bhc3N3ZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodmFsdWUuZ3JfcGFzc3dkLCBiYXNlc3RyaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLmdyX3Bhc3N3ZCwgYmFzZXN0cmluZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVsyXSwgdmFsdWUuZ3JfZ2lkKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh2YWx1ZS5ncl9naWQsIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YWx1ZS5ncl9naWQsIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVszXSwgdmFsdWUuZ3JfbWVtKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh2YWx1ZS5ncl9tZW0sIGxpc3QpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsdWUuZ3JfbWVtLCBsaXN0KQogCiAgICAgZGVmIHRlc3RfdmFsdWVzKHNlbGYpOgogICAgICAgICBlbnRyaWVzID0gZ3JwLmdldGdyYWxsKCkKQEAgLTMyLDEyICszMywxNiBAQAogICAgICAgICAgICAgZTIgPSBncnAuZ2V0Z3JnaWQoZS5ncl9naWQpCiAgICAgICAgICAgICBzZWxmLmNoZWNrX3ZhbHVlKGUyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMi5ncl9naWQsIGUuZ3JfZ2lkKQotICAgICAgICAgICAgZTIgPSBncnAuZ2V0Z3JuYW0oZS5ncl9uYW1lKQorICAgICAgICAgICAgbmFtZSA9IGUuZ3JfbmFtZQorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCcrJykgb3IgbmFtZS5zdGFydHN3aXRoKCctJyk6CisgICAgICAgICAgICAgICAgIyBOSVMtcmVsYXRlZCBlbnRyeQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlMiA9IGdycC5nZXRncm5hbShuYW1lKQogICAgICAgICAgICAgc2VsZi5jaGVja192YWx1ZShlMikKICAgICAgICAgICAgICMgVGhlcmUgYXJlIGluc3RhbmNlcyB3aGVyZSBnZXRncmFsbCgpIHJldHVybnMgZ3JvdXAgbmFtZXMgaW4KICAgICAgICAgICAgICMgbG93ZXJjYXNlIHdoaWxlIGdldGdyZ2lkKCkgcmV0dXJucyBwcm9wZXIgY2FzaW5nLgogICAgICAgICAgICAgIyBEaXNjb3ZlcmVkIG9uIFVidW50dSA1LjA0IChjdXN0b20pLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMi5ncl9uYW1lLmxvd2VyKCksIGUuZ3JfbmFtZS5sb3dlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMi5ncl9uYW1lLmxvd2VyKCksIG5hbWUubG93ZXIoKSkKIAogICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBncnAuZ2V0Z3JnaWQpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKaW5kZXggMTA1ODgyYS4uNTczODc5ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nemlwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpAQCAtNSw4ICs1LDkgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGltcG9ydCBvcwotaW1wb3J0IGd6aXAKLQoraW1wb3J0IGlvCitpbXBvcnQgc3RydWN0CitnemlwID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2d6aXAnKQogCiBkYXRhMSA9ICIiIiAgaW50IGxlbmd0aD1ERUZBVUxUQUxMT0MsIGVyciA9IFpfT0s7CiAgIFB5T2JqZWN0ICpSZXRWYWw7CkBAIC0zMiwxNCArMzMsMTUgQEAKIAogCiAgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6Ci0gICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIDsgZi53cml0ZShkYXRhMSAqIDUwKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YTEgKiA1MCkKIAotICAgICAgICAjIFRyeSBmbHVzaCBhbmQgZmlsZW5vLgotICAgICAgICBmLmZsdXNoKCkKLSAgICAgICAgZi5maWxlbm8oKQotICAgICAgICBpZiBoYXNhdHRyKG9zLCAnZnN5bmMnKToKLSAgICAgICAgICAgIG9zLmZzeW5jKGYuZmlsZW5vKCkpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgIyBUcnkgZmx1c2ggYW5kIGZpbGVuby4KKyAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICAgICAgZi5maWxlbm8oKQorICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgJ2ZzeW5jJyk6CisgICAgICAgICAgICAgICAgb3MuZnN5bmMoZi5maWxlbm8oKSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgICAgICMgVGVzdCBtdWx0aXBsZSBjbG9zZSgpIGNhbGxzLgogICAgICAgICBmLmNsb3NlKCkKQEAgLTQ3LDExOCArNDksMjMwIEBACiAgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgIyBUcnkgcmVhZGluZy4KLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3InKSA7IGQgPSBmLnJlYWQoKSA7IGYuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZCA9IGYucmVhZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGF0YTEqNTApCiAKKyAgICBkZWYgdGVzdF9pb19vbl9jbG9zZWRfb2JqZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBJL08gb3BlcmF0aW9ucyBvbiBjbG9zZWQgR3ppcEZpbGUgb2JqZWN0cyByYWlzZSBhCisgICAgICAgICMgVmFsdWVFcnJvciwganVzdCBsaWtlIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBvbiBmaWxlIG9iamVjdHMuCisKKyAgICAgICAgIyBXcml0ZSB0byBhIGZpbGUsIG9wZW4gaXQgZm9yIHJlYWRpbmcsIHRoZW4gY2xvc2UgaXQuCisgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCisgICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmLnJlYWQoMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZi50ZWxsKCkKKyAgICAgICAgIyBPcGVuIHRoZSBmaWxlIGZvciB3cml0aW5nLCB0aGVuIGNsb3NlIGl0LgorICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAndycpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZi53cml0ZSgnJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYuZmx1c2goKQorCiAgICAgZGVmIHRlc3RfYXBwZW5kKHNlbGYpOgogICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQogICAgICAgICAjIEFwcGVuZCB0byB0aGUgcHJldmlvdXMgZmlsZQotICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAnYWInKSA7IGYud3JpdGUoZGF0YTIgKiAxNSkgOyBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdhYicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGEyICogMTUpCiAKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgOyBkID0gZi5yZWFkKCkgOyBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBkID0gZi5yZWFkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCAoZGF0YTEqNTApICsgKGRhdGEyKjE1KSkKIAogICAgIGRlZiB0ZXN0X21hbnlfYXBwZW5kKHNlbGYpOgogICAgICAgICAjIEJ1ZyAjMTA3NDI2MSB3YXMgdHJpZ2dlcmVkIHdoZW4gcmVhZGluZyBhIGZpbGUgdGhhdCBjb250YWluZWQKICAgICAgICAgIyBtYW55LCBtYW55IG1lbWJlcnMuICBDcmVhdGUgc3VjaCBhIGZpbGUgYW5kIHZlcmlmeSB0aGF0IHJlYWRpbmcgaXQKICAgICAgICAgIyB3b3Jrcy4KLSAgICAgICAgZiA9IGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAnd2InLCA5KQotICAgICAgICBmLndyaXRlKCdhJykKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsMjAwKToKLSAgICAgICAgICAgIGYgPSBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIiwgOSkgIyBhcHBlbmQKKyAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgJ3diJywgOSkgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoJ2EnKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDIwMCk6CisgICAgICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiLCA5KSBhcyBmOiAjIGFwcGVuZAorICAgICAgICAgICAgICAgIGYud3JpdGUoJ2EnKQogCiAgICAgICAgICMgVHJ5IHJlYWRpbmcgdGhlIGZpbGUKLSAgICAgICAgemdmaWxlID0gZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpCi0gICAgICAgIGNvbnRlbnRzID0gIiIKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHp0eHQgPSB6Z2ZpbGUucmVhZCg4MTkyKQotICAgICAgICAgICAgY29udGVudHMgKz0genR4dAotICAgICAgICAgICAgaWYgbm90IHp0eHQ6IGJyZWFrCi0gICAgICAgIHpnZmlsZS5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbnRlbnRzLCAnYScqMjAxKQorICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyB6Z2ZpbGU6CisgICAgICAgICAgICBjb250ZW50cyA9ICIiCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHp0eHQgPSB6Z2ZpbGUucmVhZCg4MTkyKQorICAgICAgICAgICAgICAgIGNvbnRlbnRzICs9IHp0eHQKKyAgICAgICAgICAgICAgICBpZiBub3QgenR4dDogYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgJ2EnKjIwMSkKIAorICAgIGRlZiB0ZXN0X2J1ZmZlcmVkX3JlYWRlcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzQ3MTogYSBHemlwRmlsZSBjYW4gYmUgd3JhcHBlZCBpbiBhIEJ1ZmZlcmVkUmVhZGVyIGZvcgorICAgICAgICAjIHBlcmZvcm1hbmNlLgorICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQorCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBpby5CdWZmZXJlZFJlYWRlcihmKSBhcyByOgorICAgICAgICAgICAgICAgIGxpbmVzID0gW2xpbmUgZm9yIGxpbmUgaW4gcl0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCA1MCAqIGRhdGExLnNwbGl0bGluZXMoVHJ1ZSkpCiAKICAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgIyBUcnkgLnJlYWRsaW5lKCkgd2l0aCB2YXJ5aW5nIGxpbmUgbGVuZ3RocwogCi0gICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpCi0gICAgICAgIGxpbmVfbGVuZ3RoID0gMAotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgTCA9IGYucmVhZGxpbmUobGluZV9sZW5ndGgpCi0gICAgICAgICAgICBpZiBMID09ICIiIGFuZCBsaW5lX2xlbmd0aCAhPSAwOiBicmVhawotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihMKSA8PSBsaW5lX2xlbmd0aCkKLSAgICAgICAgICAgIGxpbmVfbGVuZ3RoID0gKGxpbmVfbGVuZ3RoICsgMSkgJSA1MAotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBsaW5lX2xlbmd0aCA9IDAKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgTCA9IGYucmVhZGxpbmUobGluZV9sZW5ndGgpCisgICAgICAgICAgICAgICAgaWYgbm90IEwgYW5kIGxpbmVfbGVuZ3RoICE9IDA6IGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihMKSA8PSBsaW5lX2xlbmd0aCkKKyAgICAgICAgICAgICAgICBsaW5lX2xlbmd0aCA9IChsaW5lX2xlbmd0aCArIDEpICUgNTAKIAogICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgIyBUcnkgLnJlYWRsaW5lcygpCiAKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykKLSAgICAgICAgTCA9IGYucmVhZGxpbmVzKCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgTCA9IGYucmVhZGxpbmVzKCkKIAotICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgTCA9IGYucmVhZGxpbmVzKDE1MCkKLSAgICAgICAgICAgIGlmIEwgPT0gW106IGJyZWFrCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgTCA9IGYucmVhZGxpbmVzKDE1MCkKKyAgICAgICAgICAgICAgICBpZiBMID09IFtdOiBicmVhawogCiAgICAgZGVmIHRlc3Rfc2Vla19yZWFkKHNlbGYpOgogICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQogICAgICAgICAjIFRyeSBzZWVrLCByZWFkIHRlc3QKIAotICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgb2xkcG9zID0gZi50ZWxsKCkKLSAgICAgICAgICAgIGxpbmUxID0gZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZTE6IGJyZWFrCi0gICAgICAgICAgICBuZXdwb3MgPSBmLnRlbGwoKQotICAgICAgICAgICAgZi5zZWVrKG9sZHBvcykgICMgbmVnYXRpdmUgc2VlawotICAgICAgICAgICAgaWYgbGVuKGxpbmUxKT4xMDoKLSAgICAgICAgICAgICAgICBhbW91bnQgPSAxMAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhbW91bnQgPSBsZW4obGluZTEpCi0gICAgICAgICAgICBsaW5lMiA9IGYucmVhZChhbW91bnQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxWzphbW91bnRdLCBsaW5lMikKLSAgICAgICAgICAgIGYuc2VlayhuZXdwb3MpICAjIHBvc2l0aXZlIHNlZWsKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBmOgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBvbGRwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgICAgIGxpbmUxID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUxOiBicmVhaworICAgICAgICAgICAgICAgIG5ld3BvcyA9IGYudGVsbCgpCisgICAgICAgICAgICAgICAgZi5zZWVrKG9sZHBvcykgICMgbmVnYXRpdmUgc2VlaworICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lMSk+MTA6CisgICAgICAgICAgICAgICAgICAgIGFtb3VudCA9IDEwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50ID0gbGVuKGxpbmUxKQorICAgICAgICAgICAgICAgIGxpbmUyID0gZi5yZWFkKGFtb3VudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxWzphbW91bnRdLCBsaW5lMikKKyAgICAgICAgICAgICAgICBmLnNlZWsobmV3cG9zKSAgIyBwb3NpdGl2ZSBzZWVrCiAKICAgICBkZWYgdGVzdF9zZWVrX3doZW5jZShzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgIyBUcnkgc2Vlayh3aGVuY2U9MSksIHJlYWQgdGVzdAogCi0gICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIGYucmVhZCgxMCkKLSAgICAgICAgZi5zZWVrKDEwLCB3aGVuY2U9MSkKLSAgICAgICAgeSA9IGYucmVhZCgxMCkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHksIGRhdGExWzIwOjMwXSkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGY6CisgICAgICAgICAgICBmLnJlYWQoMTApCisgICAgICAgICAgICBmLnNlZWsoMTAsIHdoZW5jZT0xKQorICAgICAgICAgICAgeSA9IGYucmVhZCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCBkYXRhMVsyMDozMF0pCiAKICAgICBkZWYgdGVzdF9zZWVrX3dyaXRlKHNlbGYpOgogICAgICAgICAjIFRyeSBzZWVrLCB3cml0ZSB0ZXN0Ci0gICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3JykKLSAgICAgICAgZm9yIHBvcyBpbiByYW5nZSgwLCAyNTYsIDE2KToKLSAgICAgICAgICAgIGYuc2Vlayhwb3MpCi0gICAgICAgICAgICBmLndyaXRlKCdHWlxuJykKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICBmb3IgcG9zIGluIHJhbmdlKDAsIDI1NiwgMTYpOgorICAgICAgICAgICAgICAgIGYuc2Vlayhwb3MpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnR1pcbicpCiAKICAgICBkZWYgdGVzdF9tb2RlKHNlbGYpOgogICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQotICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3JiJykKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubXlmaWxlb2JqLm1vZGUsICdyYicpCiAKICAgICBkZWYgdGVzdF8xNjQ3NDg0KHNlbGYpOgogICAgICAgICBmb3IgbW9kZSBpbiAoJ3diJywgJ3JiJyk6Ci0gICAgICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCBtb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoZiwgIm5hbWUiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5uYW1lLCBzZWxmLmZpbGVuYW1lKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihmLCAibmFtZSIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5uYW1lLCBzZWxmLmZpbGVuYW1lKQorCisgICAgZGVmIHRlc3RfbXRpbWUoc2VsZik6CisgICAgICAgIG10aW1lID0gMTIzNDU2Nzg5CisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAndycsIG10aW1lID0gbXRpbWUpIGFzIGZXcml0ZToKKyAgICAgICAgICAgIGZXcml0ZS53cml0ZShkYXRhMSkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGZSZWFkOgorICAgICAgICAgICAgZGF0YVJlYWQgPSBmUmVhZC5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YVJlYWQsIGRhdGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZlJlYWQsICdtdGltZScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmUmVhZC5tdGltZSwgbXRpbWUpCisKKyAgICBkZWYgdGVzdF9tZXRhZGF0YShzZWxmKToKKyAgICAgICAgbXRpbWUgPSAxMjM0NTY3ODkKKworICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnLCBtdGltZSA9IG10aW1lKSBhcyBmV3JpdGU6CisgICAgICAgICAgICBmV3JpdGUud3JpdGUoZGF0YTEpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGZSZWFkOgorICAgICAgICAgICAgIyBzZWUgUkZDIDE5NTI6IGh0dHA6Ly93d3cuZmFxcy5vcmcvcmZjcy9yZmMxOTUyLmh0bWwKKworICAgICAgICAgICAgaWRCeXRlcyA9IGZSZWFkLnJlYWQoMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWRCeXRlcywgJ1x4MWZceDhiJykgIyBnemlwIElECisKKyAgICAgICAgICAgIGNtQnl0ZSA9IGZSZWFkLnJlYWQoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21CeXRlLCAnXHgwOCcpICMgZGVmbGF0ZQorCisgICAgICAgICAgICBmbGFnc0J5dGUgPSBmUmVhZC5yZWFkKDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYWdzQnl0ZSwgJ1x4MDgnKSAjIG9ubHkgdGhlIEZOQU1FIGZsYWcgaXMgc2V0CisKKyAgICAgICAgICAgIG10aW1lQnl0ZXMgPSBmUmVhZC5yZWFkKDQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lQnl0ZXMsIHN0cnVjdC5wYWNrKCc8aScsIG10aW1lKSkgIyBsaXR0bGUtZW5kaWFuCisKKyAgICAgICAgICAgIHhmbEJ5dGUgPSBmUmVhZC5yZWFkKDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhmbEJ5dGUsICdceDAyJykgIyBtYXhpbXVtIGNvbXByZXNzaW9uCisKKyAgICAgICAgICAgIG9zQnl0ZSA9IGZSZWFkLnJlYWQoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3NCeXRlLCAnXHhmZicpICMgT1MgInVua25vd24iIChPUy1pbmRlcGVuZGVudCkKKworICAgICAgICAgICAgIyBTaW5jZSB0aGUgRk5BTUUgZmxhZyBpcyBzZXQsIHRoZSB6ZXJvLXRlcm1pbmF0ZWQgZmlsZW5hbWUgZm9sbG93cy4KKyAgICAgICAgICAgICMgUkZDIDE5NTIgc3BlY2lmaWVzIHRoYXQgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgaW5wdXQgZmlsZSwgaWYgYW55LgorICAgICAgICAgICAgIyBIb3dldmVyLCB0aGUgZ3ppcCBtb2R1bGUgZGVmYXVsdHMgdG8gc3RvcmluZyB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0CisgICAgICAgICAgICAjIGZpbGUgaW4gdGhpcyBmaWVsZC4KKyAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5maWxlbmFtZS5lbmNvZGUoJ0xhdGluLTEnKSArICdceDAwJworICAgICAgICAgICAgbmFtZUJ5dGVzID0gZlJlYWQucmVhZChsZW4oZXhwZWN0ZWQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lQnl0ZXMsIGV4cGVjdGVkKQorCisgICAgICAgICAgICAjIFNpbmNlIG5vIG90aGVyIGZsYWdzIHdlcmUgc2V0LCB0aGUgaGVhZGVyIGVuZHMgaGVyZS4KKyAgICAgICAgICAgICMgUmF0aGVyIHRoYW4gcHJvY2VzcyB0aGUgY29tcHJlc3NlZCBkYXRhLCBsZXQncyBzZWVrIHRvIHRoZSB0cmFpbGVyLgorICAgICAgICAgICAgZlJlYWQuc2Vlayhvcy5zdGF0KHNlbGYuZmlsZW5hbWUpLnN0X3NpemUgLSA4KQorCisgICAgICAgICAgICBjcmMzMkJ5dGVzID0gZlJlYWQucmVhZCg0KSAjIENSQzMyIG9mIHVuY29tcHJlc3NlZCBkYXRhIFtkYXRhMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JjMzJCeXRlcywgJ1x4YWZceGQ3ZFx4ODMnKQorCisgICAgICAgICAgICBpc2l6ZUJ5dGVzID0gZlJlYWQucmVhZCg0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2l6ZUJ5dGVzLCBzdHJ1Y3QucGFjaygnPGknLCBsZW4oZGF0YTEpKSkKKworICAgIGRlZiB0ZXN0X3dpdGhfb3BlbihzZWxmKToKKyAgICAgICAgIyBHemlwRmlsZSBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInh4eCIpCisgICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICJyYiIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiX19lbnRlcl9fIG9uIGEgY2xvc2VkIGZpbGUgZGlkbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIjEgLy8gMCBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIikKKworICAgIGRlZiB0ZXN0X3plcm9fcGFkZGVkX2ZpbGUoc2VsZik6CisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhMSAqIDUwKQorCisgICAgICAgICMgUGFkIHRoZSBmaWxlIHdpdGggemVyb2VzCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiXHgwMCIgKiA1MCkKKworICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGQgPSBmLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkYXRhMSAqIDUwLCAiSW5jb3JyZWN0IGRhdGEgaW4gZmlsZSIpCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RHemlwKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNoLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CmluZGV4IDdjZTQwYjkuLmQyNTcxZDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2gucHkKQEAgLTM1LDYgKzM1LDcgQEAKICAgICAgICAgc2VsZi5zYW1lX2hhc2goaW50KC0yKio2MyksIGxvbmcoLTIqKjYzKSwgZmxvYXQoLTIqKjYzKSkKICAgICAgICAgc2VsZi5zYW1lX2hhc2goaW50KDEtMioqNjMpLCBsb25nKDEtMioqNjMpKQogICAgICAgICBzZWxmLnNhbWVfaGFzaChpbnQoMioqNjMtMSksIGxvbmcoMioqNjMtMSkpCisgICAgICAgIHNlbGYuc2FtZV9oYXNoKGxvbmcoMioqNjMpLCBmbG9hdCgyKio2MykpCiAKICAgICBkZWYgdGVzdF9jb2VyY2VkX2Zsb2F0cyhzZWxmKToKICAgICAgICAgc2VsZi5zYW1lX2hhc2gobG9uZygxLjIzZTMwMCksIGZsb2F0KDEuMjNlMzAwKSkKQEAgLTEwNCwxMSArMTA1LDExIEBACiAgICAgICAgIG9iamVjdHMgPSAoc2VsZi5kZWZhdWx0X2V4cGVjdGVkICsKICAgICAgICAgICAgICAgICAgICBzZWxmLmZpeGVkX2V4cGVjdGVkKQogICAgICAgICBmb3Igb2JqIGluIG9iamVjdHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShvYmosIEhhc2hhYmxlKSwgcmVwcihvYmopKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iaiwgSGFzaGFibGUpCiAKICAgICBkZWYgdGVzdF9ub3RfaGFzaGFibGUoc2VsZik6CiAgICAgICAgIGZvciBvYmogaW4gc2VsZi5lcnJvcl9leHBlY3RlZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShvYmosIEhhc2hhYmxlKSwgcmVwcihvYmopKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKG9iaiwgSGFzaGFibGUpCiAKIAogIyBJc3N1ZSAjNDcwMTogQ2hlY2sgdGhhdCBzb21lIGJ1aWx0aW4gdHlwZXMgYXJlIGNvcnJlY3RseSBoYXNoYWJsZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CmluZGV4IDUyYzUwZjUuLmVkNDE2NzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKQEAgLTYsMTEgKzYsMjMgQEAKICMgIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAoraW1wb3J0IGFycmF5CiBpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHN5cwordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IF80RywgcHJlY2lzaW9uYmlnbWVtdGVzdAogCisjIFdlcmUgd2UgY29tcGlsZWQgLS13aXRoLXB5ZGVidWcgb3Igd2l0aCAjZGVmaW5lIFB5X0RFQlVHPworQ09NUElMRURfV0lUSF9QWURFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKKworCiBkZWYgaGV4c3RyKHMpOgogICAgIGltcG9ydCBzdHJpbmcKICAgICBoID0gc3RyaW5nLmhleGRpZ2l0cwpAQCAtMjYsMjQgKzM4LDkzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEyMjQnLCAnU0hBMjI0JywgJ3NoYTI1NicsICdTSEEyNTYnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMzg0JywgJ1NIQTM4NCcsICdzaGE1MTInLCAnU0hBNTEyJyApCiAKKyAgICBfd2Fybl9vbl9leHRlbnNpb25faW1wb3J0ID0gQ09NUElMRURfV0lUSF9QWURFQlVHCisKKyAgICBkZWYgX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgorICAgICAgICAiIiJJbXBvcnQgYSBtb2R1bGUgYW5kIHJldHVybiBhIHJlZmVyZW5jZSB0byBpdCBvciBOb25lIG9uIGZhaWx1cmUuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnK21vZHVsZV9uYW1lKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycm9yOgorICAgICAgICAgICAgaWYgc2VsZi5fd2Fybl9vbl9leHRlbnNpb25faW1wb3J0OgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ0RpZCBhIEMgZXh0ZW5zaW9uIGZhaWwgdG8gY29tcGlsZT8gJXMnICUgZXJyb3IpCisgICAgICAgIHJldHVybiBsb2NhbHMoKS5nZXQobW9kdWxlX25hbWUpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgYWxnb3JpdGhtcyA9IHNldCgpCisgICAgICAgIGZvciBhbGdvcml0aG0gaW4gc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lczoKKyAgICAgICAgICAgIGFsZ29yaXRobXMuYWRkKGFsZ29yaXRobS5sb3dlcigpKQorICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0ID0ge30KKyAgICAgICAgZm9yIGFsZ29yaXRobSBpbiBhbGdvcml0aG1zOgorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFthbGdvcml0aG1dID0gc2V0KCkKKworICAgICAgICAjIEZvciBlYWNoIGFsZ29yaXRobSwgdGVzdCB0aGUgZGlyZWN0IGNvbnN0cnVjdG9yIGFuZCB0aGUgdXNlCisgICAgICAgICMgb2YgaGFzaGxpYi5uZXcgZ2l2ZW4gdGhlIGFsZ29yaXRobSBuYW1lLgorICAgICAgICBmb3IgYWxnb3JpdGhtLCBjb25zdHJ1Y3RvcnMgaW4gc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdC5pdGVtcygpOgorICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChnZXRhdHRyKGhhc2hsaWIsIGFsZ29yaXRobSkpCisgICAgICAgICAgICBkZWYgX3Rlc3RfYWxnb3JpdGhtX3ZpYV9oYXNobGliX25ldyhkYXRhPU5vbmUsIF9hbGc9YWxnb3JpdGhtKToKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNobGliLm5ldyhfYWxnKQorICAgICAgICAgICAgICAgIHJldHVybiBoYXNobGliLm5ldyhfYWxnLCBkYXRhKQorICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChfdGVzdF9hbGdvcml0aG1fdmlhX2hhc2hsaWJfbmV3KQorCisgICAgICAgIF9oYXNobGliID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX2hhc2hsaWInKQorICAgICAgICBpZiBfaGFzaGxpYjoKKyAgICAgICAgICAgICMgVGhlc2UgdHdvIGFsZ29yaXRobXMgc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50IHdoZW4gdGhpcyBtb2R1bGUKKyAgICAgICAgICAgICMgaXMgY29tcGlsZWQuICBJZiBub3QsIHNvbWV0aGluZyB3YXMgY29tcGlsZWQgd3JvbmcuCisgICAgICAgICAgICBhc3NlcnQgaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfbWQ1JykKKyAgICAgICAgICAgIGFzc2VydCBoYXNhdHRyKF9oYXNobGliLCAnb3BlbnNzbF9zaGExJykKKyAgICAgICAgICAgIGZvciBhbGdvcml0aG0sIGNvbnN0cnVjdG9ycyBpbiBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgPSBnZXRhdHRyKF9oYXNobGliLCAnb3BlbnNzbF8nK2FsZ29yaXRobSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBjb25zdHJ1Y3RvcjoKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChjb25zdHJ1Y3RvcikKKworICAgICAgICBfbWQ1ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX21kNScpCisgICAgICAgIGlmIF9tZDU6CisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydtZDUnXS5hZGQoX21kNS5uZXcpCisgICAgICAgIF9zaGEgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhJykKKyAgICAgICAgaWYgX3NoYToKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTEnXS5hZGQoX3NoYS5uZXcpCisgICAgICAgIF9zaGEyNTYgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhMjU2JykKKyAgICAgICAgaWYgX3NoYTI1NjoKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTIyNCddLmFkZChfc2hhMjU2LnNoYTIyNCkKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTI1NiddLmFkZChfc2hhMjU2LnNoYTI1NikKKyAgICAgICAgX3NoYTUxMiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGE1MTInKQorICAgICAgICBpZiBfc2hhNTEyOgorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMzg0J10uYWRkKF9zaGE1MTIuc2hhMzg0KQorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhNTEyJ10uYWRkKF9zaGE1MTIuc2hhNTEyKQorCisgICAgICAgIHN1cGVyKEhhc2hMaWJUZXN0Q2FzZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIHRlc3RfaGFzaF9hcnJheShzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCJiIiwgcmFuZ2UoMTApKQorICAgICAgICBjb25zdHJ1Y3RvcnMgPSBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0Lml0ZXJ2YWx1ZXMoKQorICAgICAgICBmb3IgY29ucyBpbiBpdGVydG9vbHMuY2hhaW4uZnJvbV9pdGVyYWJsZShjb25zdHJ1Y3RvcnMpOgorICAgICAgICAgICAgYyA9IGNvbnMoYSkKKyAgICAgICAgICAgIGMuaGV4ZGlnZXN0KCkKKworICAgIGRlZiB0ZXN0X2FsZ29yaXRobXNfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2hsaWIuYWxnb3JpdGhtcywKKyAgICAgICAgICAgIHR1cGxlKFtfYWxnbyBmb3IgX2FsZ28gaW4gc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lcyBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FsZ28uaXNsb3dlcigpXSkpCisKICAgICBkZWYgdGVzdF91bmtub3duX2hhc2goc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGhhc2hsaWIubmV3KCdzcGFtIHNwYW0gc3BhbSBzcGFtIHNwYW0nKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygwID09ICJoYXNobGliIGRpZG4ndCByZWplY3QgYm9ndXMgaGFzaCBuYW1lIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwID09ICJoYXNobGliIGRpZG4ndCByZWplY3QgYm9ndXMgaGFzaCBuYW1lIikKIAogICAgIGRlZiB0ZXN0X2hleGRpZ2VzdChzZWxmKToKICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lczoKICAgICAgICAgICAgIGggPSBoYXNobGliLm5ldyhuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGhleHN0cihoLmRpZ2VzdCgpKSA9PSBoLmhleGRpZ2VzdCgpKQotCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGV4c3RyKGguZGlnZXN0KCkpID09IGguaGV4ZGlnZXN0KCkpCiAKICAgICBkZWYgdGVzdF9sYXJnZV91cGRhdGUoc2VsZik6CiAgICAgICAgIGFhcyA9ICdhJyAqIDEyOAogICAgICAgICBiZWVzID0gJ2InICogMTI3CiAgICAgICAgIGNlZXMgPSAnYycgKiAxMjYKKyAgICAgICAgYWJjcyA9IGFhcyArIGJlZXMgKyBjZWVzCiAKICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lczoKICAgICAgICAgICAgIG0xID0gaGFzaGxpYi5uZXcobmFtZSkKQEAgLTUyLDE3ICsxMzMsMzkgQEAKICAgICAgICAgICAgIG0xLnVwZGF0ZShjZWVzKQogCiAgICAgICAgICAgICBtMiA9IGhhc2hsaWIubmV3KG5hbWUpCi0gICAgICAgICAgICBtMi51cGRhdGUoYWFzICsgYmVlcyArIGNlZXMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xLmRpZ2VzdCgpLCBtMi5kaWdlc3QoKSkKKyAgICAgICAgICAgIG0yLnVwZGF0ZShhYmNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5kaWdlc3QoKSwgbTIuZGlnZXN0KCksIG5hbWUrJyB1cGRhdGUgcHJvYmxlbS4nKQorCisgICAgICAgICAgICBtMyA9IGhhc2hsaWIubmV3KG5hbWUsIGFiY3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xLmRpZ2VzdCgpLCBtMy5kaWdlc3QoKSwgbmFtZSsnIG5ldyBwcm9ibGVtLicpCiAKICAgICBkZWYgY2hlY2soc2VsZiwgbmFtZSwgZGF0YSwgZGlnZXN0KToKLSAgICAgICAgIyB0ZXN0IHRoZSBkaXJlY3QgY29uc3RydWN0b3JzCi0gICAgICAgIGNvbXB1dGVkID0gZ2V0YXR0cihoYXNobGliLCBuYW1lKShkYXRhKS5oZXhkaWdlc3QoKQotICAgICAgICBzZWxmLmFzc2VydF8oY29tcHV0ZWQgPT0gZGlnZXN0KQotICAgICAgICAjIHRlc3QgdGhlIGdlbmVyYWwgbmV3KCkgaW50ZXJmYWNlCi0gICAgICAgIGNvbXB1dGVkID0gaGFzaGxpYi5uZXcobmFtZSwgZGF0YSkuaGV4ZGlnZXN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbXB1dGVkID09IGRpZ2VzdCkKKyAgICAgICAgY29uc3RydWN0b3JzID0gc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFtuYW1lXQorICAgICAgICAjIDIgaXMgZm9yIGhhc2hsaWIubmFtZSguLi4pIGFuZCBoYXNobGliLm5ldyhuYW1lLCAuLi4pCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihjb25zdHJ1Y3RvcnMpLCAyKQorICAgICAgICBmb3IgaGFzaF9vYmplY3RfY29uc3RydWN0b3IgaW4gY29uc3RydWN0b3JzOgorICAgICAgICAgICAgY29tcHV0ZWQgPSBoYXNoX29iamVjdF9jb25zdHJ1Y3RvcihkYXRhKS5oZXhkaWdlc3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQsIGRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgIkhhc2ggYWxnb3JpdGhtICVzIGNvbnN0cnVjdGVkIHVzaW5nICVzIHJldHVybmVkIGhleGRpZ2VzdCIKKyAgICAgICAgICAgICAgICAgICAgIiAlciBmb3IgJWQgYnl0ZSBpbnB1dCBkYXRhIHRoYXQgc2hvdWxkIGhhdmUgaGFzaGVkIHRvICVyLiIKKyAgICAgICAgICAgICAgICAgICAgJSAobmFtZSwgaGFzaF9vYmplY3RfY29uc3RydWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkLCBsZW4oZGF0YSksIGRpZ2VzdCkpCiAKKyAgICBkZWYgY2hlY2tfdW5pY29kZShzZWxmLCBhbGdvcml0aG1fbmFtZSk6CisgICAgICAgICMgVW5pY29kZSBvYmplY3RzIGFyZSBub3QgYWxsb3dlZCBhcyBpbnB1dC4KKyAgICAgICAgZXhwZWN0ZWQgPSBoYXNobGliLm5ldyhhbGdvcml0aG1fbmFtZSwgc3RyKHUnc3BhbScpKS5oZXhkaWdlc3QoKQorICAgICAgICBzZWxmLmNoZWNrKGFsZ29yaXRobV9uYW1lLCB1J3NwYW0nLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgICMgSW4gcHl0aG9uIDIueCB1bmljb2RlIGlzIGF1dG8tZW5jb2RlZCB0byB0aGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcKKyAgICAgICAgIyB3aGVuIHBhc3NlZCB0byBoYXNobGliIGZ1bmN0aW9ucy4KKyAgICAgICAgc2VsZi5jaGVja191bmljb2RlKCdtZDUnKQorICAgICAgICBzZWxmLmNoZWNrX3VuaWNvZGUoJ3NoYTEnKQorICAgICAgICBzZWxmLmNoZWNrX3VuaWNvZGUoJ3NoYTIyNCcpCisgICAgICAgIHNlbGYuY2hlY2tfdW5pY29kZSgnc2hhMjU2JykKKyAgICAgICAgc2VsZi5jaGVja191bmljb2RlKCdzaGEzODQnKQorICAgICAgICBzZWxmLmNoZWNrX3VuaWNvZGUoJ3NoYTUxMicpCiAKICAgICBkZWYgdGVzdF9jYXNlX21kNV8wKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCdtZDUnLCAnJywgJ2Q0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlJykKQEAgLTE5NiwxMCArMjk5LDQ1IEBACiAgICAgICAgICAgImU3MTg0ODNkMGNlNzY5NjQ0ZTJlNDJjN2JjMTViNDYzOGUxZjk4YjEzYjIwNDQyODU2MzJhODAzYWZhOTczZWIiKwogICAgICAgICAgICJkZTBmZjI0NDg3N2VhNjBhNGNiMDQzMmNlNTc3YzMxYmViMDA5YzVjMmM0OWFhMmU0ZWFkYjIxN2FkOGNjMDliIikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgQHRlc3Rfc3VwcG9ydC5yZWFwX3RocmVhZHMKKyAgICBkZWYgdGVzdF90aHJlYWRlZF9oYXNoaW5nKHNlbGYpOgorICAgICAgICAjIFVwZGF0aW5nIHRoZSBzYW1lIGhhc2ggb2JqZWN0IGZyb20gc2V2ZXJhbCB0aHJlYWRzIGF0IG9uY2UKKyAgICAgICAgIyB1c2luZyBkYXRhIGNodW5rIHNpemVzIGNvbnRhaW5pbmcgdGhlIHNhbWUgYnl0ZSBzZXF1ZW5jZXMuCisgICAgICAgICMKKyAgICAgICAgIyBJZiB0aGUgaW50ZXJuYWwgbG9ja3MgYXJlIHdvcmtpbmcgdG8gcHJldmVudCBtdWx0aXBsZQorICAgICAgICAjIHVwZGF0ZXMgb24gdGhlIHNhbWUgb2JqZWN0IGZyb20gcnVubmluZyBhdCBvbmNlLCB0aGUgcmVzdWx0aW5nCisgICAgICAgICMgaGFzaCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRvaW5nIGl0IHNpbmdsZSB0aHJlYWRlZCB1cGZyb250LgorICAgICAgICBoYXNoZXIgPSBoYXNobGliLnNoYTEoKQorICAgICAgICBudW1fdGhyZWFkcyA9IDUKKyAgICAgICAgc21hbGxlc3RfZGF0YSA9ICdzd2luZWZsdScKKyAgICAgICAgZGF0YSA9IHNtYWxsZXN0X2RhdGEqMjAwMDAwCisgICAgICAgIGV4cGVjdGVkX2hhc2ggPSBoYXNobGliLnNoYTEoZGF0YSpudW1fdGhyZWFkcykuaGV4ZGlnZXN0KCkKKworICAgICAgICBkZWYgaGFzaF9pbl9jaHVua3MoY2h1bmtfc2l6ZSwgZXZlbnQpOgorICAgICAgICAgICAgaW5kZXggPSAwCisgICAgICAgICAgICB3aGlsZSBpbmRleCA8IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBoYXNoZXIudXBkYXRlKGRhdGFbaW5kZXg6aW5kZXgrY2h1bmtfc2l6ZV0pCisgICAgICAgICAgICAgICAgaW5kZXggKz0gY2h1bmtfc2l6ZQorICAgICAgICAgICAgZXZlbnQuc2V0KCkKKworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICBmb3IgdGhyZWFkbnVtIGluIHhyYW5nZShudW1fdGhyZWFkcyk6CisgICAgICAgICAgICBjaHVua19zaXplID0gbGVuKGRhdGEpIC8vICgxMCoqdGhyZWFkbnVtKQorICAgICAgICAgICAgYXNzZXJ0IGNodW5rX3NpemUgPiAwCisgICAgICAgICAgICBhc3NlcnQgY2h1bmtfc2l6ZSAlIGxlbihzbWFsbGVzdF9kYXRhKSA9PSAwCisgICAgICAgICAgICBldmVudCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgICAgICBldmVudHMuYXBwZW5kKGV2ZW50KQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9aGFzaF9pbl9jaHVua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGNodW5rX3NpemUsIGV2ZW50KSkuc3RhcnQoKQorCisgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CisgICAgICAgICAgICBldmVudC53YWl0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2hhc2gsIGhhc2hlci5oZXhkaWdlc3QoKSkKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoSGFzaExpYlRlc3RDYXNlKQogCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaGVhcHEucHkgYi9MaWIvdGVzdC90ZXN0X2hlYXBxLnB5CmluZGV4IGVmZDEwODAuLmU0ZDJjYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGVhcHEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9oZWFwcS5weQpAQCAtNywyMyArNyw4IEBACiAKICMgV2UgZG8gYSBiaXQgb2YgdHJpY2tlcnkgaGVyZSB0byBiZSBhYmxlIHRvIHRlc3QgYm90aCB0aGUgQyBpbXBsZW1lbnRhdGlvbgogIyBhbmQgdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kdWxlLgotCi0jIE1ha2UgaXQgaW1wb3NzaWJsZSB0byBpbXBvcnQgdGhlIEMgaW1wbGVtZW50YXRpb24gYW55bW9yZS4KLXN5cy5tb2R1bGVzWydfaGVhcHEnXSA9IDAKLSMgV2UgbXVzdCBhbHNvIGhhbmRsZSB0aGUgY2FzZSB0aGF0IGhlYXBxIHdhcyBpbXBvcnRlZCBiZWZvcmUuCi1pZiAnaGVhcHEnIGluIHN5cy5tb2R1bGVzOgotICAgIGRlbCBzeXMubW9kdWxlc1snaGVhcHEnXQotCi0jIE5vdyB3ZSBjYW4gaW1wb3J0IHRoZSBtb2R1bGUgYW5kIGdldCB0aGUgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24uCi1pbXBvcnQgaGVhcHEgYXMgcHlfaGVhcHEKLQotIyBSZXN0b3JlIGV2ZXJ5dGhpbmcgdG8gbm9ybWFsLgotZGVsIHN5cy5tb2R1bGVzWydfaGVhcHEnXQotZGVsIHN5cy5tb2R1bGVzWydoZWFwcSddCi0KLSMgVGhpcyBpcyBub3cgdGhlIG1vZHVsZSB3aXRoIHRoZSBDIGltcGxlbWVudGF0aW9uLgogaW1wb3J0IGhlYXBxIGFzIGNfaGVhcHEKLQorcHlfaGVhcHEgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnaGVhcHEnLCBibG9ja2VkPVsnX2hlYXBxJ10pCiAKIGNsYXNzIFRlc3RIZWFwKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBtb2R1bGUgPSBOb25lCkBAIC02MSw3ICs0Niw3IEBACiAgICAgICAgIGZvciBwb3MsIGl0ZW0gaW4gZW51bWVyYXRlKGhlYXApOgogICAgICAgICAgICAgaWYgcG9zOiAjIHBvcyAwIGhhcyBubyBwYXJlbnQKICAgICAgICAgICAgICAgICBwYXJlbnRwb3MgPSAocG9zLTEpID4+IDEKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaGVhcFtwYXJlbnRwb3NdIDw9IGl0ZW0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhlYXBbcGFyZW50cG9zXSA8PSBpdGVtKQogCiAgICAgZGVmIHRlc3RfaGVhcGlmeShzZWxmKToKICAgICAgICAgZm9yIHNpemUgaW4gcmFuZ2UoMzApOgpAQCAtMTkzLDYgKzE3OCwxMyBAQAogY2xhc3MgVGVzdEhlYXBQeXRob24oVGVzdEhlYXApOgogICAgIG1vZHVsZSA9IHB5X2hlYXBxCiAKKyAgICAjIEFzIGFuIGVhcmx5IGFkb3B0ZXIsIHdlIHNhbml0eSBjaGVjayB0aGUKKyAgICAjIHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlIHV0aWxpdHkgZnVuY3Rpb24KKyAgICBkZWYgdGVzdF9wdXJlX3B5dGhvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzeXMubW9kdWxlc1snaGVhcHEnXSBpcyBzZWxmLm1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5tb2R1bGUuaGVhcGlmeSwgJ2Z1bmNfY29kZScpKQorCisKIGNsYXNzIFRlc3RIZWFwQyhUZXN0SGVhcCk6CiAgICAgbW9kdWxlID0gY19oZWFwcQogCkBAIC0yMTcsNiArMjA5LDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHNvcnQoZGF0YSwgTFQpLCB0YXJnZXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHNvcnQoZGF0YSwgTEUpLCB0YXJnZXQpCiAKKyAgICAjIEFzIGFuIGVhcmx5IGFkb3B0ZXIsIHdlIHNhbml0eSBjaGVjayB0aGUKKyAgICAjIHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlIHV0aWxpdHkgZnVuY3Rpb24KKyAgICBkZWYgdGVzdF9hY2NlbGVyYXRlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5cy5tb2R1bGVzWydoZWFwcSddIGlzIHNlbGYubW9kdWxlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoc2VsZi5tb2R1bGUuaGVhcGlmeSwgJ2Z1bmNfY29kZScpKQorCiAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMzMyLDE0ICszMzAsNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAyLCBMZW5Pbmx5KCkpCiAKICAgICBkZWYgdGVzdF9nZXRfb25seShzZWxmKToKLSAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmhlYXBpZnksIHNlbGYubW9kdWxlLmhlYXBwb3ApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBHZXRPbmx5KCkpCi0gICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5oZWFwcHVzaCwgc2VsZi5tb2R1bGUuaGVhcHJlcGxhY2UpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBHZXRPbmx5KCksIDEwKQotICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUubmxhcmdlc3QsIHNlbGYubW9kdWxlLm5zbWFsbGVzdCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIDIsIEdldE9ubHkoKSkKLQotICAgIGRlZiB0ZXN0X2dldF9vbmx5KHNlbGYpOgogICAgICAgICBzZXEgPSBbQ21wRXJyKCksIENtcEVycigpLCBDbXBFcnIoKV0KICAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmhlYXBpZnksIHNlbGYubW9kdWxlLmhlYXBwb3ApOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGYsIHNlcSkKQEAgLTM1OCw3ICszNDgsNyBAQAogICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUubmxhcmdlc3QsIHNlbGYubW9kdWxlLm5zbWFsbGVzdCk6CiAgICAgICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgogICAgICAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgTCwgUik6Ci0gICAgICAgICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiY29tcGFyaW5nIHVuZXF1YWwgdHlwZXMgbm90IHN1cHBvcnRlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZyksIHF1aWV0PVRydWUpOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDIsIGcocykpLCBmKDIscykpCkBAIC0zNzIsOCArMzYyLDYgQEAKIAogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgZnJvbSB0eXBlcyBpbXBvcnQgQnVpbHRpbkZ1bmN0aW9uVHlwZQotCiAgICAgdGVzdF9jbGFzc2VzID0gW1Rlc3RIZWFwUHl0aG9uLCBUZXN0SGVhcEMsIFRlc3RFcnJvckhhbmRsaW5nXQogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9obWFjLnB5IGIvTGliL3Rlc3QvdGVzdF9obWFjLnB5CmluZGV4IGQ5NzU4M2YuLmNkMTQ4ZTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2htYWMucHkKQEAgLTIxMywxOSArMjEzLDEzIEBACiAKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdlcnJvcicsIFJ1bnRpbWVXYXJuaW5nKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lV2FybmluZyk6CiAgICAgICAgICAgICAgICAgaG1hYy5ITUFDKCdhJywgJ2InLCBkaWdlc3Rtb2Q9TW9ja0NyYXp5SGFzaCkKLSAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lV2FybmluZzoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhwZWN0ZWQgd2FybmluZyBhYm91dCBtaXNzaW5nIGJsb2NrX3NpemUnKQogCiAgICAgICAgICAgICBNb2NrQ3JhenlIYXNoLmJsb2NrX3NpemUgPSAxCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVXYXJuaW5nKToKICAgICAgICAgICAgICAgICBobWFjLkhNQUMoJ2EnLCAnYicsIGRpZ2VzdG1vZD1Nb2NrQ3JhenlIYXNoKQotICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVXYXJuaW5nOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdFeHBlY3RlZCB3YXJuaW5nIGFib3V0IHNtYWxsIGJsb2NrX3NpemUnKQogCiAKQEAgLTI2MCw3ICsyNTQsNyBAQAogICAgICAgICAjIFRlc3RpbmcgaWYgSE1BQyBkZWZhdWx0cyB0byBNRDUgYWxnb3JpdGhtLgogICAgICAgICAjIE5PVEU6IHRoaXMgd2hpdGVib3ggdGVzdCBkZXBlbmRzIG9uIHRoZSBobWFjIGNsYXNzIGludGVybmFscwogICAgICAgICBoID0gaG1hYy5ITUFDKCJrZXkiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaC5kaWdlc3RfY29ucyA9PSBoYXNobGliLm1kNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguZGlnZXN0X2NvbnMgPT0gaGFzaGxpYi5tZDUpCiAKICAgICBkZWYgdGVzdF9leGVyY2lzZV9hbGxfbWV0aG9kcyhzZWxmKToKICAgICAgICAgIyBFeGVyY2lzaW5nIGFsbCBtZXRob2RzIG9uY2UuCkBAIC0yODAsMTEgKzI3NCwxMSBAQAogICAgICAgICAjIFRlc3RpbmcgaWYgYXR0cmlidXRlcyBhcmUgb2Ygc2FtZSB0eXBlLgogICAgICAgICBoMSA9IGhtYWMuSE1BQygia2V5IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGgxLmRpZ2VzdF9jb25zID09IGgyLmRpZ2VzdF9jb25zLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEuZGlnZXN0X2NvbnMgPT0gaDIuZGlnZXN0X2NvbnMsCiAgICAgICAgICAgICAiZGlnZXN0IGNvbnN0cnVjdG9ycyBkb24ndCBtYXRjaC4iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShoMS5pbm5lcikgPT0gdHlwZShoMi5pbm5lciksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGgxLmlubmVyKSA9PSB0eXBlKGgyLmlubmVyKSwKICAgICAgICAgICAgICJUeXBlcyBvZiBpbm5lciBkb24ndCBtYXRjaC4iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShoMS5vdXRlcikgPT0gdHlwZShoMi5vdXRlciksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGgxLm91dGVyKSA9PSB0eXBlKGgyLm91dGVyKSwKICAgICAgICAgICAgICJUeXBlcyBvZiBvdXRlciBkb24ndCBtYXRjaC4iKQogCiAgICAgZGVmIHRlc3RfcmVhbGNvcHkoc2VsZik6CkBAIC0yOTIsMTAgKzI4NiwxMCBAQAogICAgICAgICBoMSA9IGhtYWMuSE1BQygia2V5IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKICAgICAgICAgIyBVc2luZyBpZCgpIGluIGNhc2Ugc29tZWJvZHkgaGFzIG92ZXJyaWRkZW4gX19jbXBfXy4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlkKGgxKSAhPSBpZChoMiksICJObyByZWFsIGNvcHkgb2YgdGhlIEhNQUMgaW5zdGFuY2UuIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlkKGgxLmlubmVyKSAhPSBpZChoMi5pbm5lciksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpZChoMSkgIT0gaWQoaDIpLCAiTm8gcmVhbCBjb3B5IG9mIHRoZSBITUFDIGluc3RhbmNlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpZChoMS5pbm5lcikgIT0gaWQoaDIuaW5uZXIpLAogICAgICAgICAgICAgIk5vIHJlYWwgY29weSBvZiB0aGUgYXR0cmlidXRlICdpbm5lcicuIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlkKGgxLm91dGVyKSAhPSBpZChoMi5vdXRlciksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpZChoMS5vdXRlcikgIT0gaWQoaDIub3V0ZXIpLAogICAgICAgICAgICAgIk5vIHJlYWwgY29weSBvZiB0aGUgYXR0cmlidXRlICdvdXRlcicuIikKIAogICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgpAQCAtMzAzLDkgKzI5Nyw5IEBACiAgICAgICAgIGgxID0gaG1hYy5ITUFDKCJrZXkiKQogICAgICAgICBoMS51cGRhdGUoInNvbWUgcmFuZG9tIHRleHQiKQogICAgICAgICBoMiA9IGgxLmNvcHkoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaDEuZGlnZXN0KCkgPT0gaDIuZGlnZXN0KCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMS5kaWdlc3QoKSA9PSBoMi5kaWdlc3QoKSwKICAgICAgICAgICAgICJEaWdlc3Qgb2YgY29weSBkb2Vzbid0IG1hdGNoIG9yaWdpbmFsIGRpZ2VzdC4iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaDEuaGV4ZGlnZXN0KCkgPT0gaDIuaGV4ZGlnZXN0KCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMS5oZXhkaWdlc3QoKSA9PSBoMi5oZXhkaWdlc3QoKSwKICAgICAgICAgICAgICJIZXhkaWdlc3Qgb2YgY29weSBkb2Vzbid0IG1hdGNoIG9yaWdpbmFsIGhleGRpZ2VzdC4iKQogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2hvdHNob3QucHkgYi9MaWIvdGVzdC90ZXN0X2hvdHNob3QucHkKaW5kZXggOGE4OWIzNy4uN2RhOTc0NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ob3RzaG90LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaG90c2hvdC5weQpAQCAtNjUsMTEgKzY1LDExIEBACiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGNhbGxhYmxlLCBldmVudHMsIHByb2ZpbGVyPU5vbmUpOgogICAgICAgICBpZiBwcm9maWxlciBpcyBOb25lOgogICAgICAgICAgICAgcHJvZmlsZXIgPSBzZWxmLm5ld19wcm9maWxlcigpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgcHJvZmlsZXIuX3Byb2YuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHByb2ZpbGVyLl9wcm9mLmNsb3NlZCkKICAgICAgICAgcHJvZmlsZXIucnVuY2FsbChjYWxsYWJsZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCBwcm9maWxlci5fcHJvZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcHJvZmlsZXIuX3Byb2YuY2xvc2VkKQogICAgICAgICBwcm9maWxlci5jbG9zZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhwcm9maWxlci5fcHJvZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9maWxlci5fcHJvZi5jbG9zZWQpCiAgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGV2ZW50cykKIAogICAgIGRlZiB0ZXN0X2FkZGluZm8oc2VsZik6CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgIGxvZyA9IHNlbGYuZ2V0X2xvZ3JlYWRlcigpCiAgICAgICAgIGluZm8gPSBsb2cuX2luZm8KICAgICAgICAgbGlzdChsb2cpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpbmZvWyJ0ZXN0LWtleSJdID09IFsidGVzdC12YWx1ZSJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mb1sidGVzdC1rZXkiXSA9PSBbInRlc3QtdmFsdWUiXSkKIAogICAgIGRlZiB0ZXN0X2xpbmVfbnVtYmVycyhzZWxmKToKICAgICAgICAgZGVmIGYoKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHRtbGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaHRtbGxpYi5weQppbmRleCBlMWY0MzM0Li4wMzgxM2IwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0bWxsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odG1sbGliLnB5CkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICAgICAgICAgIDxhIG5hbWU9J2Zyb2InPiA8L2E+CiAgICAgICAgICAgICAiIiIpCiAgICAgICAgIHBhcnNlci5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlci5nZXRfYW5jaG9yX2luZm8oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWygnaHR0cDovL2Zvby5vcmcvJywgJ3NwbGF0JywgJycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vd3d3LnB5dGhvbi5vcmcvJywgJycsICcnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnJywgJ2Zyb2InLCAnJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRfYW5jaG9yX2luZm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdodHRwOi8vZm9vLm9yZy8nLCAnc3BsYXQnLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cDovL3d3dy5weXRob24ub3JnLycsICcnLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnJywgJ2Zyb2InLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAKICAgICBkZWYgdGVzdF9kZWNsX2NvbGxlY3Rpb24oc2VsZik6CiAgICAgICAgICMgU2VlIFNGIHBhdGNoICM1NDUzMDAKQEAgLTU2LDEwICs1NiwxMCBAQAogICAgICAgICAgICAgPC9odG1sPgogICAgICAgICAgICAgIiIiKQogICAgICAgICBwYXJzZXIuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZXIuZ2V0X2RlY2xfaW5mbygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbImlmICFzdXBwb3J0RW1wdHlQYXJhcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kaWYiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRfZGVjbF9pbmZvKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWyJpZiAhc3VwcG9ydEVtcHR5UGFyYXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kaWYiCisgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEhUTUxQYXJzZXJUZXN0Q2FzZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IGM0NWNmMDAuLjcxNzU4NWMKLS0tIGEvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQpAQCAtMzIwLDYgKzMyMCwxMSBAQAogICAgICAgICAgICAgKCJlbmR0YWciLCAicCIpLAogICAgICAgICBdKQogCisgICAgZGVmIHRlc3RfdW5lc2NhcGVfZnVuY3Rpb24oc2VsZik6CisgICAgICAgIHBhcnNlciA9IEhUTUxQYXJzZXIuSFRNTFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnVuZXNjYXBlKCcmI2JhZDsnKSwnJiNiYWQ7JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIudW5lc2NhcGUoJyYjMDAzODsnKSwnJicpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoSFRNTFBhcnNlclRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CmluZGV4IDczMGU4ODUuLjI3MDg3MjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKQEAgLTEsOSArMSwxMiBAQAoraW1wb3J0IGh0dHBsaWIKIGltcG9ydCBhcnJheQogaW1wb3J0IGh0dHBsaWIKIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHNvY2tldAoraW1wb3J0IGVycm5vCiAKLWZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCitpbXBvcnQgdW5pdHRlc3QKK1Rlc3RDYXNlID0gdW5pdHRlc3QuVGVzdENhc2UKIAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIApAQCAtMjMsNiArMjYsMjEgQEAKICAgICAgICAgICAgIHJhaXNlIGh0dHBsaWIuVW5pbXBsZW1lbnRlZEZpbGVNb2RlKCkKICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZWNsYXNzKHNlbGYudGV4dCkKIAorY2xhc3MgRVBpcGVTb2NrZXQoRmFrZVNvY2tldCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgcGlwZV90cmlnZ2VyKToKKyAgICAgICAgIyBXaGVuIHNlbmRhbGwoKSBpcyBjYWxsZWQgd2l0aCBwaXBlX3RyaWdnZXIsIHJhaXNlIEVQSVBFLgorICAgICAgICBGYWtlU29ja2V0Ll9faW5pdF9fKHNlbGYsIHRleHQpCisgICAgICAgIHNlbGYucGlwZV90cmlnZ2VyID0gcGlwZV90cmlnZ2VyCisKKyAgICBkZWYgc2VuZGFsbChzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgc2VsZi5waXBlX3RyaWdnZXIgaW4gZGF0YToKKyAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnJuby5FUElQRSwgImdvdGNoYSIpCisgICAgICAgIHNlbGYuZGF0YSArPSBkYXRhCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKwogY2xhc3MgTm9FT0ZTdHJpbmdJTyhTdHJpbmdJTy5TdHJpbmdJTyk6CiAgICAgIiIiTGlrZSBTdHJpbmdJTywgYnV0IHJhaXNlcyBBc3NlcnRpb25FcnJvciBvbiBFT0YuCiAKQEAgLTQ3LDggKzY1LDYgQEAKICAgICAgICAgIyBTb21lIGhlYWRlcnMgYXJlIGFkZGVkIGF1dG9tYXRpY2FsbHksIGJ1dCBzaG91bGQgbm90IGJlIGFkZGVkIGJ5CiAgICAgICAgICMgLnJlcXVlc3QoKSBpZiB0aGV5IGFyZSBleHBsaWNpdGx5IHNldC4KIAotICAgICAgICBpbXBvcnQgaHR0cGxpYgotCiAgICAgICAgIGNsYXNzIEhlYWRlckNvdW50aW5nQnVmZmVyKGxpc3QpOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHNlbGYuY291bnQgPSB7fQpAQCAtNzQsNiArOTAsMzMgQEAKICAgICAgICAgICAgICAgICBjb25uLnJlcXVlc3QoJ1BPU1QnLCAnLycsIGJvZHksIGhlYWRlcnMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLl9idWZmZXIuY291bnRbaGVhZGVyLmxvd2VyKCldLCAxKQogCisgICAgZGVmIHRlc3RfcHV0aGVhZGVyKHNlbGYpOgorICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgIGNvbm4ucHV0cmVxdWVzdCgnR0VUJywnLycpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdDb250ZW50LWxlbmd0aCcsNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnQ29udGVudC1sZW5ndGg6IDQyJyBpbiBjb25uLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9pcHY2aG9zdF9oZWFkZXIoc2VsZik6CisgICAgICAgICMgRGVmYXVsdCBob3N0IGhlYWRlciBvbiBJUHY2IHRyYW5zYWN0aW9uIHNob3VsZCB3cmFwcGVkIGJ5IFtdIGlmCisgICAgICAgICMgaXRzIGFjdHVhbCBJUHY2IGFkZHJlc3MKKyAgICAgICAgZXhwZWN0ZWQgPSAnR0VUIC9mb28gSFRUUC8xLjFcclxuSG9zdDogWzIwMDE6Ol06ODFcclxuJyBcCisgICAgICAgICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZzogaWRlbnRpdHlcclxuXHJcbicKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oJ1syMDAxOjpdOjgxJykKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoJycpCisgICAgICAgIGNvbm4uc29jayA9IHNvY2sKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnL2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLmRhdGEuc3RhcnRzd2l0aChleHBlY3RlZCkpCisKKyAgICAgICAgZXhwZWN0ZWQgPSAnR0VUIC9mb28gSFRUUC8xLjFcclxuSG9zdDogWzIwMDE6MTAyQTo6XVxyXG4nIFwKKyAgICAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nOiBpZGVudGl0eVxyXG5cclxuJworICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbignWzIwMDE6MTAyQTo6XScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KCcnKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGNvbm4ucmVxdWVzdCgnR0VUJywgJy9mb28nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5kYXRhLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpKQorCisKIGNsYXNzIEJhc2ljVGVzdChUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc3RhdHVzX2xpbmVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgSFRUUCBzdGF0dXMgbGluZXMKQEAgLTkwLDYgKzEzMywxMCBAQAogICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHR0cGxpYi5CYWRTdGF0dXNMaW5lLCByZXNwLmJlZ2luKQogCisgICAgZGVmIHRlc3RfYmFkX3N0YXR1c19yZXByKHNlbGYpOgorICAgICAgICBleGMgPSBodHRwbGliLkJhZFN0YXR1c0xpbmUoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihleGMpLCAnJydCYWRTdGF0dXNMaW5lKCJcJ1wnIiwpJycnKQorCiAgICAgZGVmIHRlc3RfcGFydGlhbF9yZWFkcyhzZWxmKToKICAgICAgICAgIyBpZiB3ZSBoYXZlIGEgbGVuZ2h0LCB0aGUgc3lzdGVtIGtub3dzIHdoZW4gdG8gY2xvc2UgaXRzZWxmCiAgICAgICAgICMgc2FtZSBiZWhhdmlvdXIgdGhhbiB3aGVuIHdlIHJlYWQgdGhlIHdob2xlIHRoaW5nIHdpdGggcmVhZCgpCkBAIC0xNjksMTMgKzIxNiwxMyBAQAogICAgICAgICBzb2NrID0gRmFrZVNvY2tldChOb25lKQogICAgICAgICBjb25uLnNvY2sgPSBzb2NrCiAgICAgICAgIGNvbm4uc2VuZChleHBlY3RlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHNvY2suZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgc29jay5kYXRhKQogICAgICAgICBzb2NrLmRhdGEgPSAnJwogICAgICAgICBjb25uLnNlbmQoYXJyYXkuYXJyYXkoJ2MnLCBleHBlY3RlZCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzb2NrLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHNvY2suZGF0YSkKICAgICAgICAgc29jay5kYXRhID0gJycKICAgICAgICAgY29ubi5zZW5kKFN0cmluZ0lPLlN0cmluZ0lPKGV4cGVjdGVkKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHNvY2suZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgc29jay5kYXRhKQogCiAgICAgZGVmIHRlc3RfY2h1bmtlZChzZWxmKToKICAgICAgICAgY2h1bmtlZF9zdGFydCA9ICgKQEAgLTE4OSw3ICsyMzYsNyBAQAogICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgJzBcclxuJykKICAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKICAgICAgICAgcmVzcC5iZWdpbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3AucmVhZCgpLCAnaGVsbG8gd29ybGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgpLCAnaGVsbG8gd29ybGQnKQogICAgICAgICByZXNwLmNsb3NlKCkKIAogICAgICAgICBmb3IgeCBpbiAoJycsICdmb29cclxuJyk6CkBAIC0xOTksNyArMjQ2LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXNwLnJlYWQoKQogICAgICAgICAgICAgZXhjZXB0IGh0dHBsaWIuSW5jb21wbGV0ZVJlYWQsIGk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaS5wYXJ0aWFsLCAnaGVsbG8gd29ybGQnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5wYXJ0aWFsLCAnaGVsbG8gd29ybGQnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihpKSwnSW5jb21wbGV0ZVJlYWQoMTEgYnl0ZXMgcmVhZCknKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGkpLCdJbmNvbXBsZXRlUmVhZCgxMSBieXRlcyByZWFkKScpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMjE5LDkgKzI2Niw5IEBACiAgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGNodW5rZWRfc3RhcnQgKyAnMFxyXG4nKQogICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJIRUFEIikKICAgICAgICAgcmVzcC5iZWdpbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3AucmVhZCgpLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcC5zdGF0dXMsIDIwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcC5yZWFzb24sICdPSycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3Auc3RhdHVzLCAyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFzb24sICdPSycpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLmlzY2xvc2VkKCkpCiAKICAgICBkZWYgdGVzdF9uZWdhdGl2ZV9jb250ZW50X2xlbmd0aChzZWxmKToKQEAgLTIyOSw3ICsyNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGg6IC0xXHJcblxyXG5IZWxsb1xyXG4nKQogICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJHRVQiKQogICAgICAgICByZXNwLmJlZ2luKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcC5yZWFkKCksICdIZWxsb1xyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgpLCAnSGVsbG9cclxuJykKICAgICAgICAgcmVzcC5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX3JlYWQoc2VsZik6CkBAIC0yMzksNyArMjg2LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzcC5yZWFkKCkKICAgICAgICAgZXhjZXB0IGh0dHBsaWIuSW5jb21wbGV0ZVJlYWQgYXMgaToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGkucGFydGlhbCwgJ0hlbGxvXHJcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkucGFydGlhbCwgJ0hlbGxvXHJcbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmNvbXBsZXRlUmVhZCg3IGJ5dGVzIHJlYWQsIDMgbW9yZSBleHBlY3RlZCkiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaSksCkBAIC0yNDksMTAgKzI5Niw5MyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcmVzcC5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9lcGlwZShzZWxmKToKKyAgICAgICAgc29jayA9IEVQaXBlU29ja2V0KAorICAgICAgICAgICAgIkhUVFAvMS4wIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkXHJcbiIKKyAgICAgICAgICAgICJDb250ZW50LXR5cGU6IHRleHQvaHRtbFxyXG4iCisgICAgICAgICAgICAiV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09XCJleGFtcGxlXCJcclxuIiwKKyAgICAgICAgICAgIGIiQ29udGVudC1MZW5ndGgiKQorICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbigiZXhhbXBsZS5jb20iKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBjb25uLnJlcXVlc3QoIlBVVCIsICIvdXJsIiwgImJvZHkiKSkKKyAgICAgICAgcmVzcCA9IGNvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQwMSwgcmVzcC5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkJhc2ljIHJlYWxtPVwiZXhhbXBsZVwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwLmdldGhlYWRlcigid3d3LWF1dGhlbnRpY2F0ZSIpKQorCisgICAgZGVmIHRlc3RfZmlsZW5vYXR0cihzZWxmKToKKyAgICAgICAgIyBKdXN0IHRlc3QgdGhlIGZpbGVubyBhdHRyaWJ1dGUgaW4gdGhlIEhUVFBSZXNwb25zZSBPYmplY3QuCisgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgMjAwIE9rXHJcblxyXG5UZXh0IgorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChib2R5KQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVzcCwnZmlsZW5vJyksCisgICAgICAgICAgICAgICAgJ0hUVFBSZXNwb25zZSBzaG91bGQgZXhwb3NlIGEgZmlsZW5vIGF0dHJpYnV0ZScpCisKKyAgICAjIFRlc3QgbGluZXMgb3ZlcmZsb3dpbmcgdGhlIG1heCBsaW5lIHNpemUgKF9NQVhMSU5FIGluIGh0dHAuY2xpZW50KQorCisgICAgZGVmIHRlc3Rfb3ZlcmZsb3dpbmdfc3RhdHVzX2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcFRlc3QoImRpc2FibGVkIGZvciBIVFRQIDAuOSBzdXBwb3J0IikKKyAgICAgICAgYm9keSA9ICJIVFRQLzEuMSAyMDAgT2siICsgImsiICogNjU1MzYgKyAiXHJcbiIKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKEZha2VTb2NrZXQoYm9keSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChodHRwbGliLkxpbmVUb29Mb25nLCBodHRwbGliLkJhZFN0YXR1c0xpbmUpLCByZXNwLmJlZ2luKQorCisgICAgZGVmIHRlc3Rfb3ZlcmZsb3dpbmdfaGVhZGVyX2xpbmUoc2VsZik6CisgICAgICAgIGJvZHkgPSAoCisgICAgICAgICAgICAnSFRUUC8xLjEgMjAwIE9LXHJcbicKKyAgICAgICAgICAgICdYLUZvbzogYmFyJyArICdyJyAqIDY1NTM2ICsgJ1xyXG5cclxuJworICAgICAgICApCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShGYWtlU29ja2V0KGJvZHkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhodHRwbGliLkxpbmVUb29Mb25nLCByZXNwLmJlZ2luKQorCisgICAgZGVmIHRlc3Rfb3ZlcmZsb3dpbmdfY2h1bmtlZF9saW5lKHNlbGYpOgorICAgICAgICBib2R5ID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4xIDIwMCBPS1xyXG4nCisgICAgICAgICAgICAnVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcclxuXHJcbicKKyAgICAgICAgICAgICsgJzAnICogNjU1MzYgKyAnYVxyXG4nCisgICAgICAgICAgICAnaGVsbG8gd29ybGRcclxuJworICAgICAgICAgICAgJzBcclxuJworICAgICAgICApCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShGYWtlU29ja2V0KGJvZHkpKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHR0cGxpYi5MaW5lVG9vTG9uZywgcmVzcC5yZWFkKQorCiAKIGNsYXNzIE9mZmxpbmVUZXN0KFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZXNwb25zZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGh0dHBsaWIucmVzcG9uc2VzW2h0dHBsaWIuTk9UX0ZPVU5EXSwgIk5vdCBGb3VuZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHR0cGxpYi5yZXNwb25zZXNbaHR0cGxpYi5OT1RfRk9VTkRdLCAiTm90IEZvdW5kIikKKworCitjbGFzcyBTb3VyY2VBZGRyZXNzVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zZXJ2KQorICAgICAgICBzZWxmLnNvdXJjZV9wb3J0ID0gdGVzdF9zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQorICAgICAgICBzZWxmLnNlcnYubGlzdGVuKDUpCisgICAgICAgIHNlbGYuY29ubiA9IE5vbmUKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb25uOgorICAgICAgICAgICAgc2VsZi5jb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuY29ubiA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ID0gTm9uZQorCisgICAgZGVmIHRlc3RIVFRQQ29ubmVjdGlvblNvdXJjZUFkZHJlc3Moc2VsZik6CisgICAgICAgIHNlbGYuY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oSE9TVCwgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPSgnJywgc2VsZi5zb3VyY2VfcG9ydCkpCisgICAgICAgIHNlbGYuY29ubi5jb25uZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbm4uc29jay5nZXRzb2NrbmFtZSgpWzFdLCBzZWxmLnNvdXJjZV9wb3J0KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihodHRwbGliLCAnSFRUUFNDb25uZWN0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAnaHR0cGxpYi5IVFRQU0Nvbm5lY3Rpb24gbm90IGRlZmluZWQnKQorICAgIGRlZiB0ZXN0SFRUUFNDb25uZWN0aW9uU291cmNlQWRkcmVzcyhzZWxmKToKKyAgICAgICAgc2VsZi5jb25uID0gaHR0cGxpYi5IVFRQU0Nvbm5lY3Rpb24oSE9TVCwgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPSgnJywgc2VsZi5zb3VyY2VfcG9ydCkpCisgICAgICAgICMgV2UgZG9uJ3QgdGVzdCBhbnl0aGluZyBoZXJlIG90aGVyIHRoZSBjb25zdHJ1Y3RvciBub3QgYmFyZmluZyBhcworICAgICAgICAjIHRoaXMgY29kZSBkb2Vzbid0IGRlYWwgd2l0aCBzZXR0aW5nIHVwIGFuIGFjdGl2ZSBydW5uaW5nIFNTTCBzZXJ2ZXIKKyAgICAgICAgIyBmb3IgYW4gc3NsX3dyYXBwZWQgY29ubmVjdCgpIHRvIGFjdHVhbGx5IHJldHVybiBmcm9tLgorCiAKIGNsYXNzIFRpbWVvdXRUZXN0KFRlc3RDYXNlKToKICAgICBQT1JUID0gTm9uZQpAQCAtMjcxLDcgKzQwMSw3IEBACiAgICAgICAgIEhUVFBDb25uZWN0aW9uIGFuZCBpbnRvIHRoZSBzb2NrZXQuCiAgICAgICAgICcnJwogICAgICAgICAjIGRlZmF1bHQgLS0gdXNlIGdsb2JhbCBzb2NrZXQgdGltZW91dAotICAgICAgICBzZWxmLmFzc2VydF8oc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCiAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaHR0cENvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKEhPU1QsIFRpbWVvdXRUZXN0LlBPUlQpCkBAIC0yODIsNyArNDEyLDcgQEAKICAgICAgICAgaHR0cENvbm4uY2xvc2UoKQogCiAgICAgICAgICMgbm8gdGltZW91dCAtLSBkbyBub3QgdXNlIGdsb2JhbCBzb2NrZXQgZGVmYXVsdAotICAgICAgICBzZWxmLmFzc2VydF8oc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCiAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaHR0cENvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKEhPU1QsIFRpbWVvdXRUZXN0LlBPUlQsCkBAIC0zMTEsNyArNDQxLDcgQEAKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoSGVhZGVyVGVzdHMsIE9mZmxpbmVUZXN0LCBCYXNpY1Rlc3QsIFRpbWVvdXRUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFNUaW1lb3V0VGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBTVGltZW91dFRlc3QsIFNvdXJjZUFkZHJlc3NUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5IGIvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQppbmRleCA1YzQ4NjcxLi5jYzliOTNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKQEAgLTcsMTggKzcsMjMgQEAKIGZyb20gQmFzZUhUVFBTZXJ2ZXIgaW1wb3J0IEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIsIEhUVFBTZXJ2ZXIKIGZyb20gU2ltcGxlSFRUUFNlcnZlciBpbXBvcnQgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCiBmcm9tIENHSUhUVFBTZXJ2ZXIgaW1wb3J0IENHSUhUVFBSZXF1ZXN0SGFuZGxlcgoraW1wb3J0IENHSUhUVFBTZXJ2ZXIKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCitpbXBvcnQgcmUKIGltcG9ydCBiYXNlNjQKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB1cmxsaWIKIGltcG9ydCBodHRwbGliCiBpbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB0aHJlYWRpbmcKIAogaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIAogCiBjbGFzcyBOb0xvZ1JlcXVlc3RIYW5kbGVyOgpAQCAtMjYsNiArMzEsMjEgQEAKICAgICAgICAgIyBkb24ndCB3cml0ZSBsb2cgbWVzc2FnZXMgdG8gc3RkZXJyCiAgICAgICAgIHBhc3MKIAorY2xhc3MgU29ja2V0bGVzc1JlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmdldF9jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnByb3RvY29sX3ZlcnNpb24gPSAiSFRUUC8xLjEiCisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgICBzZWxmLmdldF9jYWxsZWQgPSBUcnVlCisgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZShiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorCisgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKIAogY2xhc3MgVGVzdFNlcnZlclRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9vYmplY3QsIHJlcXVlc3RfaGFuZGxlcik6CkBAIC00OSw2ICs2OSw4IEBACiAKIGNsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgICAgIG9zLmVudmlyb24gPSB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpCiAgICAgICAgIHNlbGYuc2VydmVyX3N0YXJ0ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICBzZWxmLnRocmVhZCA9IFRlc3RTZXJ2ZXJUaHJlYWQoc2VsZiwgc2VsZi5yZXF1ZXN0X2hhbmRsZXIpCiAgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKQEAgLTU2LDEyICs3OCw3OCBAQAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLnRocmVhZC5zdG9wKCkKKyAgICAgICAgb3MuZW52aXJvbi5fX2V4aXRfXygpCisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKIAogICAgIGRlZiByZXF1ZXN0KHNlbGYsIHVyaSwgbWV0aG9kPSdHRVQnLCBib2R5PU5vbmUsIGhlYWRlcnM9e30pOgogICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdsb2NhbGhvc3QnLCBzZWxmLlBPUlQpCiAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5yZXF1ZXN0KG1ldGhvZCwgdXJpLCBib2R5LCBoZWFkZXJzKQogICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmdldHJlc3BvbnNlKCkKIAorY2xhc3MgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBmdW5jdGlvbmFpbGl0eSBvZiB0aGUgQmFzZUhUVFBTZXJ2ZXIgZm9jdXNzaW5nIG9uCisgICAgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci4KKyAgICAiIiIKKworICAgIEhUVFBSZXNwb25zZU1hdGNoID0gcmUuY29tcGlsZSgnSFRUUC8xLlswLTldKyAyMDAgT0snKQorCisgICAgZGVmIHNldFVwIChzZWxmKToKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gU29ja2V0bGVzc1JlcXVlc3RIYW5kbGVyKCkKKworICAgIGRlZiBzZW5kX3R5cGljYWxfcmVxdWVzdChzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTyhtZXNzYWdlKQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHNlbGYuaGFuZGxlci5yZmlsZSA9IGlucHV0CisgICAgICAgIHNlbGYuaGFuZGxlci53ZmlsZSA9IG91dHB1dAorICAgICAgICBzZWxmLmhhbmRsZXIuaGFuZGxlX29uZV9yZXF1ZXN0KCkKKyAgICAgICAgb3V0cHV0LnNlZWsoMCkKKyAgICAgICAgcmV0dXJuIG91dHB1dC5yZWFkbGluZXMoKQorCisgICAgZGVmIHZlcmlmeV9nZXRfY2FsbGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5oYW5kbGVyLmdldF9jYWxsZWQpCisKKyAgICBkZWYgdmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMoc2VsZiwgaGVhZGVycyk6CisgICAgICAgIGZvciBmaWVsZE5hbWUgaW4gJ1NlcnZlcjogJywgJ0RhdGU6ICcsICdDb250ZW50LVR5cGU6ICc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShoLnN0YXJ0c3dpdGgoZmllbGROYW1lKSBmb3IgaCBpbiBoZWFkZXJzKSwgMSkKKworICAgIGRlZiB2ZXJpZnlfaHR0cF9zZXJ2ZXJfcmVzcG9uc2Uoc2VsZiwgcmVzcG9uc2UpOgorICAgICAgICBtYXRjaCA9IHNlbGYuSFRUUFJlc3BvbnNlTWF0Y2guc2VhcmNoKHJlc3BvbnNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2ggaXMgbm90IE5vbmUpCisKKyAgICBkZWYgdGVzdF9odHRwXzFfMShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdCgnR0VUIC8gSFRUUC8xLjFcclxuXHJcbicpCisgICAgICAgIHNlbGYudmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHJlc3VsdFswXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMTotMV0pCisgICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sICc8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKworICAgIGRlZiB0ZXN0X2h0dHBfMV8wKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KCdHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykKKyAgICAgICAgc2VsZi52ZXJpZnlfaHR0cF9zZXJ2ZXJfcmVzcG9uc2UocmVzdWx0WzBdKQorICAgICAgICBzZWxmLnZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHJlc3VsdFsxOi0xXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy0xXSwgJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorCisgICAgZGVmIHRlc3RfaHR0cF8wXzkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2VuZF90eXBpY2FsX3JlcXVlc3QoJ0dFVCAvIEhUVFAvMC45XHJcblxyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKKworICAgIGRlZiB0ZXN0X3dpdGhfY29udGludWVfMV8wKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KCdHRVQgLyBIVFRQLzEuMFxyXG5FeHBlY3Q6IDEwMC1jb250aW51ZVxyXG5cclxuJykKKyAgICAgICAgc2VsZi52ZXJpZnlfaHR0cF9zZXJ2ZXJfcmVzcG9uc2UocmVzdWx0WzBdKQorICAgICAgICBzZWxmLnZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHJlc3VsdFsxOi0xXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy0xXSwgJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorCisgICAgZGVmIHRlc3RfcmVxdWVzdF9sZW5ndGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEwNzE0OiBodWdlIHJlcXVlc3QgbGluZXMgYXJlIGRpc2NhcmRlZCwgdG8gYXZvaWQgRGVuaWFsCisgICAgICAgICMgb2YgU2VydmljZSBhdHRhY2tzLgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KGInR0VUICcgKyBiJ3gnICogNjU1MzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCBiJ0hUVFAvMS4xIDQxNCBSZXF1ZXN0LVVSSSBUb28gTG9uZ1xyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQorCiAKIGNsYXNzIEJhc2VIVFRQU2VydmVyVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKICAgICBjbGFzcyByZXF1ZXN0X2hhbmRsZXIoTm9Mb2dSZXF1ZXN0SGFuZGxlciwgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CkBAIC05Nyw0MiArMTg1LDQyIEBACiAgICAgZGVmIHRlc3RfY29tbWFuZChzZWxmKToKICAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnR0VUJywgJy8nKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5zdGF0dXMsIDUwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDEpCiAKICAgICBkZWYgdGVzdF9yZXF1ZXN0X2xpbmVfdHJpbW1pbmcoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnSFRUUC8xLjFcbicKICAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnR0VUJywgJy8nKQogICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMuc3RhdHVzLCA1MDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNTAxKQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbl9ib2d1cyhzZWxmKToKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICdGVUJBUicKICAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnR0VUJywgJy8nKQogICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMuc3RhdHVzLCA0MDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDAwKQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbl9kaWdpdHMoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnSFRUUC85LjkuOScKICAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnR0VUJywgJy8nKQogICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMuc3RhdHVzLCA0MDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDAwKQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbl9ub25lX2dldChzZWxmKToKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICcnCiAgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgNTAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9uZShzZWxmKToKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICcnCiAgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ1BVVCcsICcvJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgNDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwMCkKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25faW52YWxpZChzZWxmKToKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuID0gOTkKQEAgLTE0MCwyMSArMjI4LDIxIEBACiAgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgNTA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwNSkKIAogICAgIGRlZiB0ZXN0X3NlbmRfYmxhbmsoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnJwogICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCcnLCAnJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgNDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwMCkKIAogICAgIGRlZiB0ZXN0X2hlYWRlcl9jbG9zZShzZWxmKToKICAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnR0VUJywgJy8nKQogICAgICAgICBzZWxmLmNvbi5wdXRoZWFkZXIoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKQogICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMuc3RhdHVzLCA1MDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNTAxKQogCiAgICAgZGVmIHRlc3RfaGVhZF9rZWVwX2FsaXZlKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJ0hUVFAvMS4xJwpAQCAtMTYyLDI4ICsyNTAsMjkgQEAKICAgICAgICAgc2VsZi5jb24ucHV0aGVhZGVyKCdDb25uZWN0aW9uJywgJ2tlZXAtYWxpdmUnKQogICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMuc3RhdHVzLCA1MDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNTAxKQogCiAgICAgZGVmIHRlc3RfaGFuZGxlcihzZWxmKToKICAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnVEVTVCcsICcvJykKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMuc3RhdHVzLCAyMDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMjA0KQogCiAgICAgZGVmIHRlc3RfcmV0dXJuX2hlYWRlcl9rZWVwX2FsaXZlKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdLRUVQJywgJy8nKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5nZXRoZWFkZXIoJ0Nvbm5lY3Rpb24nKSwgJ2tlZXAtYWxpdmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXRoZWFkZXIoJ0Nvbm5lY3Rpb24nKSwgJ2tlZXAtYWxpdmUnKQogICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdURVNUJywgJy8nKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5jb24uY2xvc2UpCiAKICAgICBkZWYgdGVzdF9pbnRlcm5hbF9rZXlfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0tFWUVSUk9SJywgJy8nKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5zdGF0dXMsIDk5OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA5OTkpCiAKICAgICBkZWYgdGVzdF9yZXR1cm5fY3VzdG9tX3N0YXR1cyhzZWxmKToKICAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnQ1VTVE9NJywgJy8nKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5zdGF0dXMsIDk5OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA5OTkpCiAKIAogY2xhc3MgU2ltcGxlSFRUUFNlcnZlclRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CkBAIC0yMTQsOSArMzAzLDkgQEAKIAogICAgIGRlZiBjaGVja19zdGF0dXNfYW5kX3JlYXNvbihzZWxmLCByZXNwb25zZSwgc3RhdHVzLCBkYXRhPU5vbmUpOgogICAgICAgICBib2R5ID0gcmVzcG9uc2UucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXNwb25zZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcG9uc2Uuc3RhdHVzLCBzdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXNwb25zZS5yZWFzb24gIT0gTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZXNwb25zZS5yZWFzb24pCiAgICAgICAgIGlmIGRhdGE6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJvZHkpCiAKQEAgLTI3Nyw4ICszNjYsOCBAQAogcHJpbnQKIAogZm9ybSA9IGNnaS5GaWVsZFN0b3JhZ2UoKQotcHJpbnQgIiUlcywgJSVzLCAlJXMiICUlIChmb3JtLmdldGZpcnN0KCJzcGFtIiksIGZvcm0uZ2V0Zmlyc3QoImVnZ3MiKSxcCi0gICAgICAgICAgICAgIGZvcm0uZ2V0Zmlyc3QoImJhY29uIikpCitwcmludCAiJSVzLCAlJXMsICUlcyIgJSUgKGZvcm0uZ2V0Zmlyc3QoInNwYW0iKSwgZm9ybS5nZXRmaXJzdCgiZWdncyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmdldGZpcnN0KCJiYWNvbiIpKQogIiIiCiAKIGNsYXNzIENHSUhUVFBTZXJ2ZXJUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgpAQCAtMzI0LDQzICs0MTMsMTE2IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBCYXNlVGVzdENhc2UudGVhckRvd24oc2VsZikKIAorICAgIGRlZiB0ZXN0X3VybF9jb2xsYXBzZV9wYXRoX3NwbGl0KHNlbGYpOgorICAgICAgICB0ZXN0X3ZlY3RvcnMgPSB7CisgICAgICAgICAgICAnJzogKCcvJywgJycpLAorICAgICAgICAgICAgJy4uJzogSW5kZXhFcnJvciwKKyAgICAgICAgICAgICcvLi8vLi4nOiBJbmRleEVycm9yLAorICAgICAgICAgICAgJy8nOiAoJy8nLCAnJyksCisgICAgICAgICAgICAnLy8nOiAoJy8nLCAnJyksCisgICAgICAgICAgICAnL1xcJzogKCcvJywgJ1xcJyksCisgICAgICAgICAgICAnLy4vLyc6ICgnLycsICcnKSwKKyAgICAgICAgICAgICdjZ2ktYmluL2ZpbGUxLnB5JzogKCcvY2dpLWJpbicsICdmaWxlMS5weScpLAorICAgICAgICAgICAgJy9jZ2ktYmluL2ZpbGUxLnB5JzogKCcvY2dpLWJpbicsICdmaWxlMS5weScpLAorICAgICAgICAgICAgJ2EnOiAoJy8nLCAnYScpLAorICAgICAgICAgICAgJy9hJzogKCcvJywgJ2EnKSwKKyAgICAgICAgICAgICcvL2EnOiAoJy8nLCAnYScpLAorICAgICAgICAgICAgJy4vYSc6ICgnLycsICdhJyksCisgICAgICAgICAgICAnLi9DOi8nOiAoJy9DOicsICcnKSwKKyAgICAgICAgICAgICcvYS9iJzogKCcvYScsICdiJyksCisgICAgICAgICAgICAnL2EvYi8nOiAoJy9hL2InLCAnJyksCisgICAgICAgICAgICAnL2EvYi9jLy4uJzogKCcvYS9iJywgJycpLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kJzogKCcvYS9iJywgJ2QnKSwKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZC9lLy4uL2YnOiAoJy9hL2IvZCcsICdmJyksCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QvZS8uLi8uLi9mJzogKCcvYS9iJywgJ2YnKSwKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZC9lLy4uLy4vLi8uLy4uLy9mJzogKCcvYS9iJywgJ2YnKSwKKyAgICAgICAgICAgICcuLi9hL2IvYy8uLi9kL2UvLi4vLi8uLy4vLi4vL2YnOiBJbmRleEVycm9yLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vLi4vLi4vZic6ICgnL2EnLCAnZicpLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vLi4vLi4vLi4vZic6ICgnLycsICdmJyksCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QvZS8uLi8uLi8uLi8uLi8uLi9mJzogSW5kZXhFcnJvciwKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZC9lLy4uLy4uLy4uLy4uL2YvLi4nOiAoJy8nLCAnJyksCisgICAgICAgIH0KKyAgICAgICAgZm9yIHBhdGgsIGV4cGVjdGVkIGluIHRlc3RfdmVjdG9ycy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIHR5cGUpIGFuZCBpc3N1YmNsYXNzKGV4cGVjdGVkLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHSUhUVFBTZXJ2ZXIuX3VybF9jb2xsYXBzZV9wYXRoX3NwbGl0LCBwYXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBDR0lIVFRQU2VydmVyLl91cmxfY29sbGFwc2VfcGF0aF9zcGxpdChwYXRoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0ncGF0aCA9ICVyXG5Hb3Q6ICAgICVyXG5XYW50ZWQ6ICVyJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aCwgYWN0dWFsLCBleHBlY3RlZCkpCisKICAgICBkZWYgdGVzdF9oZWFkZXJzX2FuZF9jb250ZW50KHNlbGYpOgogICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ZpbGUxLnB5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKCdIZWxsbyBXb3JsZFxuJywgJ3RleHQvaHRtbCcsIDIwMCksIFwKLSAgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnSGVsbG8gV29ybGRcbicsICd0ZXh0L2h0bWwnLCAyMDApLAorICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKIAogICAgIGRlZiB0ZXN0X3Bvc3Qoc2VsZik6CiAgICAgICAgIHBhcmFtcyA9IHVybGxpYi51cmxlbmNvZGUoeydzcGFtJyA6IDEsICdlZ2dzJyA6ICdweXRob24nLCAnYmFjb24nIDogMTIzNDU2fSkKICAgICAgICAgaGVhZGVycyA9IHsnQ29udGVudC10eXBlJyA6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfQogICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ZpbGUyLnB5JywgJ1BPU1QnLCBwYXJhbXMsIGhlYWRlcnMpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnJlYWQoKSwgJzEsIHB5dGhvbiwgMTIzNDU2XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5yZWFkKCksICcxLCBweXRob24sIDEyMzQ1NlxuJykKIAogICAgIGRlZiB0ZXN0X2ludmFsaWR1cmkoc2VsZik6CiAgICAgICAgIHJlcyA9IHNlbGYucmVxdWVzdCgnL2NnaS1iaW4vaW52YWxpZCcpCiAgICAgICAgIHJlcy5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgNDA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwNCkKIAogICAgIGRlZiB0ZXN0X2F1dGhvcml6YXRpb24oc2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSB7J0F1dGhvcml6YXRpb24nIDogJ0Jhc2ljICVzJyAlIFwKLSAgICAgICAgICAgICAgICBiYXNlNjQuYjY0ZW5jb2RlKCd1c2VybmFtZTpwYXNzJyl9CisgICAgICAgIGhlYWRlcnMgPSB7J0F1dGhvcml6YXRpb24nIDogJ0Jhc2ljICVzJyAlCisgICAgICAgICAgICAgICAgICAgYmFzZTY0LmI2NGVuY29kZSgndXNlcm5hbWU6cGFzcycpfQogICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ZpbGUxLnB5JywgJ0dFVCcsIGhlYWRlcnM9aGVhZGVycykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKCdIZWxsbyBXb3JsZFxuJywgJ3RleHQvaHRtbCcsIDIwMCksIFwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ0hlbGxvIFdvcmxkXG4nLCAndGV4dC9odG1sJywgMjAwKSwKKyAgICAgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQorCisgICAgZGVmIHRlc3Rfbm9fbGVhZGluZ19zbGFzaChzZWxmKToKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjI1NAorICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJ2NnaS1iaW4vZmlsZTEucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnSGVsbG8gV29ybGRcbicsICd0ZXh0L2h0bWwnLCAyMDApLAogICAgICAgICAgICAgIChyZXMucmVhZCgpLCByZXMuZ2V0aGVhZGVyKCdDb250ZW50LXR5cGUnKSwgcmVzLnN0YXR1cykpCiAKKyAgICBkZWYgdGVzdF9vc19lbnZpcm9uX2lzX25vdF9hbHRlcmVkKHNlbGYpOgorICAgICAgICBzaWduYXR1cmUgPSAiVGVzdCBDR0kgU2VydmVyIgorICAgICAgICBvcy5lbnZpcm9uWydTRVJWRVJfU09GVFdBUkUnXSA9IHNpZ25hdHVyZQorICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ZpbGUxLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYidIZWxsbyBXb3JsZFxuJywgJ3RleHQvaHRtbCcsIDIwMCksCisgICAgICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5lbnZpcm9uWydTRVJWRVJfU09GVFdBUkUnXSwgc2lnbmF0dXJlKQorCisKK2NsYXNzIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIgVGVzdCB1cmwgcGFyc2luZyAiIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudHJhbnNsYXRlZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIHNlbGYudHJhbnNsYXRlZCA9IG9zLnBhdGguam9pbihzZWxmLnRyYW5zbGF0ZWQsICdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuaGFuZGxlciA9IFNvY2tldGxlc3NSZXF1ZXN0SGFuZGxlcigpCisKKyAgICBkZWYgdGVzdF9xdWVyeV9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGgoJy9maWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCcvZmlsZW5hbWU/Zm9vPWJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCcvZmlsZW5hbWU/YT1iJnNwYW09ZWdncyN6b3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKworICAgIGRlZiB0ZXN0X3N0YXJ0X3dpdGhfZG91YmxlX3NsYXNoKHNlbGYpOgorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCcvL2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGgoJy8vZmlsZW5hbWU/Zm9vPWJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBjd2QgPSBvcy5nZXRjd2QoKQotICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCiAgICAgdHJ5OgotICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEJhc2VIVFRQU2VydmVyVGVzdENhc2UsCisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VIVFRQU2VydmVyVGVzdENhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlSFRUUFNlcnZlclRlc3RDYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHSUhUVFBTZXJ2ZXJUZXN0Q2FzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICBmaW5hbGx5OgotICAgICAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCi0gICAgICAgIG9zLmVudmlyb24uY2xlYXIoKQotICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShlbnYpCiAgICAgICAgIG9zLmNoZGlyKGN3ZCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1hZ2VvcC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1hZ2VvcC5weQppbmRleCA5MDYzYjIyLi41NjMyMGZiIDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2ltYWdlb3AucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbWFnZW9wLnB5CkBAIC0xODAsNiArMTgwLDcgQEAKICAgICAiIiJyZXR1cm4gYSB0dXBsZSBjb25zaXN0aW5nIG9mCiAgICAgICAgaW1hZ2UgKGluICdpbWdmaWxlJyBmb3JtYXQpIHdpZHRoIGFuZCBoZWlnaHQKICAgICAiIiIKKyAgICBpbXBvcnQgaW1nZmlsZQogICAgIHRyeToKICAgICAgICAgc2l6ZXMgPSBpbWdmaWxlLmdldHNpemVzKG5hbWUpCiAgICAgZXhjZXB0IGltZ2ZpbGUuZXJyb3I6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKaW5kZXggZjI4OGVmMC4uMTViMGVhMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQpAQCAtNywxMyArNywxMCBAQAogZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgogaW1wb3J0IGltYXBsaWIKIGltcG9ydCBvcy5wYXRoCi1pbXBvcnQgc2VsZWN0Ci1pbXBvcnQgc29ja2V0CiBpbXBvcnQgU29ja2V0U2VydmVyCi1pbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHJlYXBfdGhyZWFkcywgdmVyYm9zZSwgdHJhbnNpZW50X2ludGVybmV0CiBpbXBvcnQgdW5pdHRlc3QKIAogdHJ5OgpAQCAtNTcsMjAgKzU0LDExIEBACiAKICAgICBJTUFQNF9TU0wgPSBOb25lCiAKLWNsYXNzIFRpbWVvdXRTdHJlYW1SZXF1ZXN0SGFuZGxlcihTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIpOgorCitjbGFzcyBTaW1wbGVJTUFQSGFuZGxlcihTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIpOgogCiAgICAgdGltZW91dCA9IDEKIAotICAgIGRlZiBzZXR1cChzZWxmKToKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gc2VsZi5yZXF1ZXN0Ci0gICAgICAgIGlmIHNlbGYudGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5zZXR0aW1lb3V0KHNlbGYudGltZW91dCkKLSAgICAgICAgc2VsZi5yZmlsZSA9IHNlbGYuY29ubmVjdGlvbi5tYWtlZmlsZSgncmInLCBzZWxmLnJidWZzaXplKQotICAgICAgICBzZWxmLndmaWxlID0gc2VsZi5jb25uZWN0aW9uLm1ha2VmaWxlKCd3YicsIHNlbGYud2J1ZnNpemUpCi0KLQotY2xhc3MgU2ltcGxlSU1BUEhhbmRsZXIoVGltZW91dFN0cmVhbVJlcXVlc3RIYW5kbGVyKToKLQogICAgIGRlZiBfc2VuZChzZWxmLCBtZXNzYWdlKToKICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlNFTlQ6IiwgbWVzc2FnZS5zdHJpcCgpCiAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUobWVzc2FnZSkKQEAgLTExMSw2ICs5OSw3IEBACiAgICAgICAgIHNlbGYuX3NlbmQoJyogQ0FQQUJJTElUWSBJTUFQNHJldjFcclxuJykKICAgICAgICAgc2VsZi5fc2VuZCgnJXMgT0sgQ0FQQUJJTElUWSBjb21wbGV0ZWRcclxuJyAlICh0YWcsKSkKIAorCiBjbGFzcyBCYXNlVGhyZWFkZWROZXR3b3JrZWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgbWFrZV9zZXJ2ZXIoc2VsZiwgYWRkciwgaGRscik6CkBAIC0xMjMsNyArMTEyLDcgQEAKIAogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiY3JlYXRpbmcgc2VydmVyIgogICAgICAgICBzZXJ2ZXIgPSBNeVNlcnZlcihhZGRyLCBoZGxyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHNlcnZlci5zb2NrZXQuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHNlcnZlci5zb2NrZXQuZ2V0c29ja25hbWUoKSkKIAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgInNlcnZlciBjcmVhdGVkIgpAQCAtMTU3LDM3ICsxNDYsNzcgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYucmVhcF9zZXJ2ZXIoc2VydmVyLCB0aHJlYWQpCiAKKyAgICBAcmVhcF90aHJlYWRzCiAgICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9zZXJ2ZXIoU2ltcGxlSU1BUEhhbmRsZXIpIGFzIHNlcnZlcjoKICAgICAgICAgICAgIGNsaWVudCA9IHNlbGYuaW1hcF9jbGFzcygqc2VydmVyLnNlcnZlcl9hZGRyZXNzKQogICAgICAgICAgICAgY2xpZW50LnNodXRkb3duKCkKIAorICAgIEByZWFwX3RocmVhZHMKICAgICBkZWYgdGVzdF9pc3N1ZTU5NDkoc2VsZik6CiAKLSAgICAgICAgY2xhc3MgRU9GSGFuZGxlcihUaW1lb3V0U3RyZWFtUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBjbGFzcyBFT0ZIYW5kbGVyKFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgICAgICBkZWYgaGFuZGxlKHNlbGYpOgogICAgICAgICAgICAgICAgICMgRU9GIHdpdGhvdXQgc2VuZGluZyBhIGNvbXBsZXRlIHdlbGNvbWUgbWVzc2FnZS4KICAgICAgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKCcqIE9LJykKLSAgICAgICAgICAgICAgICAjIGV4cGxpY2l0bHkgc2h1dGRvd24uICBzb2NrZXQuY2xvc2UoKSBtZXJlbHkgcmVsZWFzZXMKLSAgICAgICAgICAgICAgICAjIHRoZSBzb2NrZXQgYW5kIHdhaXRzIGZvciBHQyB0byBwZXJmb3JtIHRoZSBhY3R1YWwgY2xvc2UuCi0gICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0LnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQogCiAgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfc2VydmVyKEVPRkhhbmRsZXIpIGFzIHNlcnZlcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGltYXBsaWIuSU1BUDQuYWJvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYXBfY2xhc3MsICpzZXJ2ZXIuc2VydmVyX2FkZHJlc3MpCiAKKwogY2xhc3MgVGhyZWFkZWROZXR3b3JrZWRUZXN0cyhCYXNlVGhyZWFkZWROZXR3b3JrZWRUZXN0cyk6CiAKICAgICBzZXJ2ZXJfY2xhc3MgPSBTb2NrZXRTZXJ2ZXIuVENQU2VydmVyCiAgICAgaW1hcF9jbGFzcyA9IGltYXBsaWIuSU1BUDQKIAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wsICJTU0wgbm90IGF2YWlsYWJsZSIpCiBjbGFzcyBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzU1NMKEJhc2VUaHJlYWRlZE5ldHdvcmtlZFRlc3RzKToKIAogICAgIHNlcnZlcl9jbGFzcyA9IFNlY3VyZVRDUFNlcnZlcgogICAgIGltYXBfY2xhc3MgPSBJTUFQNF9TU0wKIAogCitjbGFzcyBSZW1vdGVJTUFQVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaG9zdCA9ICdjeXJ1cy5hbmRyZXcuY211LmVkdScKKyAgICBwb3J0ID0gMTQzCisgICAgdXNlcm5hbWUgPSAnYW5vbnltb3VzJworICAgIHBhc3N3b3JkID0gJ3Bhc3MnCisgICAgaW1hcF9jbGFzcyA9IGltYXBsaWIuSU1BUDQKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgd2l0aCB0cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5ob3N0KToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VsZi5pbWFwX2NsYXNzKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLmxvZ291dCgpCisKKyAgICBkZWYgdGVzdF9sb2dpbmNhcGEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnTE9HSU5ESVNBQkxFRCcgaW4gc2VsZi5zZXJ2ZXIuY2FwYWJpbGl0aWVzKQorCisgICAgZGVmIHRlc3RfYW5vbmxvZ2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0FVVEg9QU5PTllNT1VTJyBpbiBzZWxmLnNlcnZlci5jYXBhYmlsaXRpZXMpCisgICAgICAgIHJzID0gc2VsZi5zZXJ2ZXIubG9naW4oc2VsZi51c2VybmFtZSwgc2VsZi5wYXNzd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyc1swXSwgJ09LJykKKworICAgIGRlZiB0ZXN0X2xvZ291dChzZWxmKToKKyAgICAgICAgcnMgPSBzZWxmLnNlcnZlci5sb2dvdXQoKQorICAgICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyc1swXSwgJ0JZRScpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLCAiU1NMIG5vdCBhdmFpbGFibGUiKQorY2xhc3MgUmVtb3RlSU1BUF9TU0xUZXN0KFJlbW90ZUlNQVBUZXN0KToKKyAgICBwb3J0ID0gOTkzCisgICAgaW1hcF9jbGFzcyA9IElNQVA0X1NTTAorCisgICAgZGVmIHRlc3RfbG9naW5jYXBhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdMT0dJTkRJU0FCTEVEJyBpbiBzZWxmLnNlcnZlci5jYXBhYmlsaXRpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnQVVUSD1QTEFJTicgaW4gc2VsZi5zZXJ2ZXIuY2FwYWJpbGl0aWVzKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0cyA9IFtUZXN0SW1hcGxpYl0KIApAQCAtMTk4LDE0ICsyMjcsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXljZXJ0LnBlbSIpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoQ0VSVEZJTEUpOgogICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlcyEiKQotICAgICAgICAgICAgdGVzdHMuYXBwZW5kKFRocmVhZGVkTmV0d29ya2VkVGVzdHNTU0wpCi0gICAgICAgIHRlc3RzLmFwcGVuZChUaHJlYWRlZE5ldHdvcmtlZFRlc3RzKQotCi0gICAgdGhyZWFkaW5mbyA9IHN1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKyAgICAgICAgdGVzdHMuZXh0ZW5kKFsKKyAgICAgICAgICAgIFRocmVhZGVkTmV0d29ya2VkVGVzdHMsIFRocmVhZGVkTmV0d29ya2VkVGVzdHNTU0wsCisgICAgICAgICAgICBSZW1vdGVJTUFQVGVzdCwgUmVtb3RlSU1BUF9TU0xUZXN0LAorICAgICAgICBdKQogCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQogCi0gICAgc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqdGhyZWFkaW5mbykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ25ldHdvcmsnXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQppbmRleCBjOTY4MmFiLi43N2U0NGJlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQpAQCAtOCw3ICs4LDcgQEAKICAgICAiIiJWZXJ5IGJhc2ljIHRlc3Qgb2YgaW1wb3J0IGxvY2sgZnVuY3Rpb25zLiIiIgogCiAgICAgZGVmIHZlcmlmeV9sb2NrX3N0YXRlKHNlbGYsIGV4cGVjdGVkKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoaW1wLmxvY2tfaGVsZCgpLCBleHBlY3RlZCwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXAubG9ja19oZWxkKCksIGV4cGVjdGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgaW1wLmxvY2tfaGVsZCgpIHRvIGJlICVyIiAlIGV4cGVjdGVkKQogICAgIGRlZiB0ZXN0TG9jayhzZWxmKToKICAgICAgICAgTE9PUFMgPSA1MApAQCAtNDMsMTYgKzQzLDI2IEBACiAgICAgcmVsb2FkKCkuIiIiCiAKICAgICBkZWYgdGVzdF9zb3VyY2Uoc2VsZik6Ci0gICAgICAgIGltcG9ydCBvcwotICAgICAgICBpbXAucmVsb2FkKG9zKQorICAgICAgICAjIFhYWCAobmNvZ2hsYW4pOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSB0ZXN0X3N1cHBvcnQuQ2xlYW5JbXBvcnQKKyAgICAgICAgIyBoZXJlLCBidXQgdGhhdCBicmVha3MgYmVjYXVzZSB0aGUgb3MgbW9kdWxlIHJlZ2lzdGVycyBzb21lCisgICAgICAgICMgaGFuZGxlcnMgaW4gY29weV9yZWcgb24gaW1wb3J0LiBTaW5jZSBDbGVhbkltcG9ydCBkb2Vzbid0CisgICAgICAgICMgcmV2ZXJ0IHRoYXQgcmVnaXN0cmF0aW9uLCB0aGUgbW9kdWxlIGlzIGxlZnQgaW4gYSBicm9rZW4KKyAgICAgICAgIyBzdGF0ZSBhZnRlciByZXZlcnNpb24uIFJlaW5pdGlhbGlzaW5nIHRoZSBtb2R1bGUgY29udGVudHMKKyAgICAgICAgIyBhbmQganVzdCByZXZlcnRpbmcgb3MuZW52aXJvbiB0byBpdHMgcHJldmlvdXMgc3RhdGUgaXMgYW4gT0sKKyAgICAgICAgIyB3b3JrYXJvdW5kCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKToKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAgaW1wLnJlbG9hZChvcykKIAogICAgIGRlZiB0ZXN0X2V4dGVuc2lvbihzZWxmKToKLSAgICAgICAgaW1wb3J0IHRpbWUKLSAgICAgICAgaW1wLnJlbG9hZCh0aW1lKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5DbGVhbkltcG9ydCgndGltZScpOgorICAgICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIGltcC5yZWxvYWQodGltZSkKIAogICAgIGRlZiB0ZXN0X2J1aWx0aW4oc2VsZik6Ci0gICAgICAgIGltcG9ydCBtYXJzaGFsCi0gICAgICAgIGltcC5yZWxvYWQobWFyc2hhbCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuQ2xlYW5JbXBvcnQoJ21hcnNoYWwnKToKKyAgICAgICAgICAgIGltcG9ydCBtYXJzaGFsCisgICAgICAgICAgICBpbXAucmVsb2FkKG1hcnNoYWwpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weQppbmRleCA2MDM0NmFiLi41NzUxOTAxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weQpAQCAtMSwxNiArMSwxNSBAQAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKLWltcG9ydCBzdGF0Ci1pbXBvcnQgcmFuZG9tCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3lzCi1pbXBvcnQgcHlfY29tcGlsZQotaW1wb3J0IHdhcm5pbmdzCi1pbXBvcnQgbWFyc2hhbAogaW1wb3J0IGltcAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKHVubGluaywgVEVTVEZOLCB1bmxvYWQsIHJ1bl91bml0dGVzdCwKLSAgICBjaGVja193YXJuaW5ncywgVGVzdEZhaWxlZCkKLQoraW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBvcworaW1wb3J0IHB5X2NvbXBpbGUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0ICh1bmxpbmssIFRFU1RGTiwgdW5sb2FkLCBydW5fdW5pdHRlc3QsIHJtdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19qeXRob24sIGNoZWNrX3dhcm5pbmdzLCBFbnZpcm9ubWVudFZhckd1YXJkKQoraW1wb3J0IHRleHR3cmFwCitmcm9tIHRlc3QgaW1wb3J0IHNjcmlwdF9oZWxwZXIKIAogZGVmIHJlbW92ZV9maWxlcyhuYW1lKToKICAgICBmb3IgZiBpbiAobmFtZSArIG9zLmV4dHNlcCArICJweSIsCkBAIC0xOCwxNSArMTcsMTggQEAKICAgICAgICAgICAgICAgbmFtZSArIG9zLmV4dHNlcCArICJweW8iLAogICAgICAgICAgICAgICBuYW1lICsgb3MuZXh0c2VwICsgInB5dyIsCiAgICAgICAgICAgICAgIG5hbWUgKyAiJHB5LmNsYXNzIik6Ci0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGYpOgotICAgICAgICAgICAgb3MucmVtb3ZlKGYpCisgICAgICAgIHVubGluayhmKQogCiAKLWNsYXNzIEltcG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgSW1wb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIHRlc3RDYXNlU2Vuc2l0aXZpdHkoc2VsZik6Ci0gICAgICAgICMgQnJpZWYgZGlncmVzc2lvbiB0byB0ZXN0IHRoYXQgaW1wb3J0IGlzIGNhc2Utc2Vuc2l0aXZlOiAgaWYgd2UgZ290IHRoaXMKLSAgICAgICAgIyBmYXIsIHdlIGtub3cgZm9yIHN1cmUgdGhhdCAicmFuZG9tIiBleGlzdHMuCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB1bmxvYWQoVEVTVEZOKQorICAgIHNldFVwID0gdGVhckRvd24KKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkoc2VsZik6CisgICAgICAgICMgQnJpZWYgZGlncmVzc2lvbiB0byB0ZXN0IHRoYXQgaW1wb3J0IGlzIGNhc2Utc2Vuc2l0aXZlOiAgaWYgd2UgZ290CisgICAgICAgICMgdGhpcyBmYXIsIHdlIGtub3cgZm9yIHN1cmUgdGhhdCAicmFuZG9tIiBleGlzdHMuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBSQW5Eb00KICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMzQsMTYzICszNiwxNjIgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IG9mIFJBbkRvTSBzaG91bGQgaGF2ZSBmYWlsZWQgKGNhc2UgbWlzbWF0Y2gpIikKIAotICAgIGRlZiB0ZXN0RG91YmxlQ29uc3Qoc2VsZik6Ci0gICAgICAgICMgQW5vdGhlciBicmllZiBkaWdyZXNzaW9uIHRvIHRlc3QgdGhlIGFjY3VyYWN5IG9mIG1hbmlmZXN0IGZsb2F0IGNvbnN0YW50cy4KKyAgICBkZWYgdGVzdF9kb3VibGVfY29uc3Qoc2VsZik6CisgICAgICAgICMgQW5vdGhlciBicmllZiBkaWdyZXNzaW9uIHRvIHRlc3QgdGhlIGFjY3VyYWN5IG9mIG1hbmlmZXN0IGZsb2F0CisgICAgICAgICMgY29uc3RhbnRzLgogICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGRvdWJsZV9jb25zdCAgIyBkb24ndCBibGluayAtLSB0aGF0ICp3YXMqIHRoZSB0ZXN0CiAKLSAgICBkZWYgdGVzdEltcG9ydChzZWxmKToKKyAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6CiAgICAgICAgIGRlZiB0ZXN0X3dpdGhfZXh0ZW5zaW9uKGV4dCk6Ci0gICAgICAgICAgICAjIGV4dCBub3JtYWxseSAiLnB5IjsgcGVyaGFwcyAiLnB5dyIKKyAgICAgICAgICAgICMgVGhlIGV4dGVuc2lvbiBpcyBub3JtYWxseSAiLnB5IiwgcGVyaGFwcyAiLnB5dyIuCiAgICAgICAgICAgICBzb3VyY2UgPSBURVNURk4gKyBleHQKICAgICAgICAgICAgIHB5byA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweW8iCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgaWYgaXNfanl0aG9uOgogICAgICAgICAgICAgICAgIHB5YyA9IFRFU1RGTiArICIkcHkuY2xhc3MiCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHB5YyA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweWMiCiAKLSAgICAgICAgICAgIGYgPSBvcGVuKHNvdXJjZSwgInciKQotICAgICAgICAgICAgcHJpbnQgPj4gZiwgIiMgVGhpcyB0ZXN0cyBQeXRob24ncyBhYmlsaXR5IHRvIGltcG9ydCBhIiwgZXh0LCAiZmlsZS4iCi0gICAgICAgICAgICBhID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwKQotICAgICAgICAgICAgYiA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMCkKLSAgICAgICAgICAgIHByaW50ID4+IGYsICJhID0iLCBhCi0gICAgICAgICAgICBwcmludCA+PiBmLCAiYiA9IiwgYgotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZiwgKCIjIFRoaXMgdGVzdHMgUHl0aG9uJ3MgYWJpbGl0eSB0byBpbXBvcnQgYSIsIGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUuIikKKyAgICAgICAgICAgICAgICBhID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwKQorICAgICAgICAgICAgICAgIGIgPSByYW5kb20ucmFuZHJhbmdlKDEwMDApCisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZiwgImEgPSIsIGEKKyAgICAgICAgICAgICAgICBwcmludCA+PiBmLCAiYiA9IiwgYgogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhURVNURk4pCiAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBmcm9tICVzIGZhaWxlZDogJXMiICUgKGV4dCwgZXJyKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobW9kLmEsIGEsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYSwgYSwKICAgICAgICAgICAgICAgICAgICAgIm1vZHVsZSBsb2FkZWQgKCVzKSBidXQgY29udGVudHMgaW52YWxpZCIgJSBtb2QpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobW9kLmIsIGIsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYiwgYiwKICAgICAgICAgICAgICAgICAgICAgIm1vZHVsZSBsb2FkZWQgKCVzKSBidXQgY29udGVudHMgaW52YWxpZCIgJSBtb2QpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG9zLnVubGluayhzb3VyY2UpCisgICAgICAgICAgICAgICAgdW5saW5rKHNvdXJjZSkKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGltcC5yZWxvYWQobW9kKQogICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlcnI6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgZnJvbSAucHljLy5weW8gZmFpbGVkOiAlcyIgJSBlcnIpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHB5YykKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHB5bykKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tURVNURk5dCisgICAgICAgICAgICAgICAgdW5saW5rKHB5YykKKyAgICAgICAgICAgICAgICB1bmxpbmsocHlvKQorICAgICAgICAgICAgICAgIHVubG9hZChURVNURk4pCiAKICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdF93aXRoX2V4dGVuc2lvbihvcy5leHRzZXAgKyAicHkiKQogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgotICAgICAgICAgICAgICAgIGZvciBleHQgaW4gIi5QWSIsICIuUHkiLCAiLnBZIiwgIi5weXciLCAiLlBZVyIsICIucFl3IjoKKyAgICAgICAgICAgICAgICBmb3IgZXh0IGluIFsiLlBZIiwgIi5QeSIsICIucFkiLCAiLnB5dyIsICIuUFlXIiwgIi5wWXciXToKICAgICAgICAgICAgICAgICAgICAgdGVzdF93aXRoX2V4dGVuc2lvbihleHQpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KIAotICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKLSAgICAgICAgZGVmIHRlc3RfZXhlY3V0ZV9iaXRfbm90X2NvcGllZChzZWxmKToKLSAgICAgICAgICAgICMgSXNzdWUgNjA3MDogdW5kZXIgcG9zaXggLnB5YyBmaWxlcyBnb3QgdGhlaXIgZXhlY3V0ZSBiaXQgc2V0IGlmCi0gICAgICAgICAgICAjIHRoZSAucHkgZmlsZSBoYWQgdGhlIGV4ZWN1dGUgYml0IHNldCwgYnV0IHRoZXkgYXJlbid0IGV4ZWN1dGFibGUuCi0gICAgICAgICAgICBvbGRtYXNrID0gb3MudW1hc2soMDIyKQotICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmbmFtZSA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweSIKLSAgICAgICAgICAgICAgICBmID0gb3BlbihmbmFtZSwgJ3cnKS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgb3MuY2htb2QoZm5hbWUsIChzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEggfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lYVVNSIHwgc3RhdC5TX0lYR1JQIHwgc3RhdC5TX0lYT1RIKSkKLSAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgICAgICAgICBmbiA9IGZuYW1lICsgJ2MnCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAidGVzdCBtZWFuaW5nZnVsIG9ubHkgb24gcG9zaXggc3lzdGVtcyIpCisgICAgZGVmIHRlc3RfZXhlY3V0ZV9iaXRfbm90X2NvcGllZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA2MDcwOiB1bmRlciBwb3NpeCAucHljIGZpbGVzIGdvdCB0aGVpciBleGVjdXRlIGJpdCBzZXQgaWYKKyAgICAgICAgIyB0aGUgLnB5IGZpbGUgaGFkIHRoZSBleGVjdXRlIGJpdCBzZXQsIGJ1dCB0aGV5IGFyZW4ndCBleGVjdXRhYmxlLgorICAgICAgICBvbGRtYXNrID0gb3MudW1hc2soMDIyKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbmFtZSA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweSIKKyAgICAgICAgICAgIGYgPSBvcGVuKGZuYW1lLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLmNobW9kKGZuYW1lLCAoc3RhdC5TX0lSVVNSIHwgc3RhdC5TX0lSR1JQIHwgc3RhdC5TX0lST1RIIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lYVVNSIHwgc3RhdC5TX0lYR1JQIHwgc3RhdC5TX0lYT1RIKSkKKyAgICAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICAgICAgZm4gPSBmbmFtZSArICdjJworICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZuKToKKyAgICAgICAgICAgICAgICBmbiA9IGZuYW1lICsgJ28nCiAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZuKToKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmbmFtZSArICdvJwotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOiByYWlzZSBUZXN0RmFpbGVkKCJfX2ltcG9ydF9fIGRpZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAibm90IHJlc3VsdCBpbiBjcmVhdGlvbiBvZiBlaXRoZXIgYSAucHljIG9yIC5weW8gZmlsZSIpCi0gICAgICAgICAgICAgICAgcyA9IG9zLnN0YXQoZm4pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RhdC5TX0lNT0RFKHMuc3RfbW9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSVVNSIHwgc3RhdC5TX0lSR1JQIHwgc3RhdC5TX0lST1RIKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBvcy51bWFzayhvbGRtYXNrKQotICAgICAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCi0gICAgICAgICAgICAgICAgaWYgVEVTVEZOIGluIHN5cy5tb2R1bGVzOiBkZWwgc3lzLm1vZHVsZXNbVEVTVEZOXQotICAgICAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIl9faW1wb3J0X18gZGlkIG5vdCByZXN1bHQgaW4gY3JlYXRpb24gb2YgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVpdGhlciBhIC5weWMgb3IgLnB5byBmaWxlIikKKyAgICAgICAgICAgIHMgPSBvcy5zdGF0KGZuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUocy5zdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSVVNSIHwgc3RhdC5TX0lSR1JQIHwgc3RhdC5TX0lST1RIKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW1hc2sob2xkbWFzaykKKyAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCisgICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCiAKLSAgICBkZWYgdGVzdEltcE1vZHVsZShzZWxmKToKKyAgICBkZWYgdGVzdF9pbXBfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBpbXAgbW9kdWxlIGNhbiBjb3JyZWN0bHkgbG9hZCBhbmQgZmluZCAucHkgZmlsZXMKLSAgICAgICAgaW1wb3J0IGltcAotICAgICAgICB4ID0gaW1wLmZpbmRfbW9kdWxlKCJvcyIpCi0gICAgICAgIG9zID0gaW1wLmxvYWRfbW9kdWxlKCJvcyIsICp4KQorCisgICAgICAgICMgWFhYIChuY29naGxhbik6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHRlc3Rfc3VwcG9ydC5DbGVhbkltcG9ydAorICAgICAgICAjIGhlcmUsIGJ1dCB0aGF0IGJyZWFrcyBiZWNhdXNlIHRoZSBvcyBtb2R1bGUgcmVnaXN0ZXJzIHNvbWUKKyAgICAgICAgIyBoYW5kbGVycyBpbiBjb3B5X3JlZyBvbiBpbXBvcnQuIFNpbmNlIENsZWFuSW1wb3J0IGRvZXNuJ3QKKyAgICAgICAgIyByZXZlcnQgdGhhdCByZWdpc3RyYXRpb24sIHRoZSBtb2R1bGUgaXMgbGVmdCBpbiBhIGJyb2tlbgorICAgICAgICAjIHN0YXRlIGFmdGVyIHJldmVyc2lvbi4gUmVpbml0aWFsaXNpbmcgdGhlIG1vZHVsZSBjb250ZW50cworICAgICAgICAjIGFuZCBqdXN0IHJldmVydGluZyBvcy5lbnZpcm9uIHRvIGl0cyBwcmV2aW91cyBzdGF0ZSBpcyBhbiBPSworICAgICAgICAjIHdvcmthcm91bmQKKyAgICAgICAgb3JpZ19wYXRoID0gb3MucGF0aAorICAgICAgICBvcmlnX2dldGVudiA9IG9zLmdldGVudgorICAgICAgICB3aXRoIEVudmlyb25tZW50VmFyR3VhcmQoKToKKyAgICAgICAgICAgIHggPSBpbXAuZmluZF9tb2R1bGUoIm9zIikKKyAgICAgICAgICAgIG5ld19vcyA9IGltcC5sb2FkX21vZHVsZSgib3MiLCAqeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3MsIG5ld19vcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3JpZ19wYXRoLCBuZXdfb3MucGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob3JpZ19nZXRlbnYsIG5ld19vcy5nZXRlbnYpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfd2l0aF9sYXJnZV9zdGFjayhzZWxmLCBtb2R1bGU9J2xvbmdsaXN0Jyk6Ci0gICAgICAgICMgY3JlYXRlIG1vZHVsZSB3L2xpc3Qgb2YgNjUwMDAgZWxlbWVudHMgdG8gdGVzdCBidWcgIzU2MTg1OAorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTU2MTg1OC4KICAgICAgICAgZmlsZW5hbWUgPSBtb2R1bGUgKyBvcy5leHRzZXAgKyAncHknCiAKLSAgICAgICAgIyBjcmVhdGUgYSBmaWxlIHdpdGggYSBsaXN0IG9mIDY1MDAwIGVsZW1lbnRzCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAndysnKQotICAgICAgICBmLndyaXRlKCdkID0gW1xuJykKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNjUwMDApOgotICAgICAgICAgICAgZi53cml0ZSgnIiIsXG4nKQotICAgICAgICBmLndyaXRlKCddJykKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICMgQ3JlYXRlIGEgZmlsZSB3aXRoIGEgbGlzdCBvZiA2NTAwMCBlbGVtZW50cy4KKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndysnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnZCA9IFtcbicpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg2NTAwMCk6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnIiIsXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnXScpCiAKLSAgICAgICAgIyBjb21waWxlICYgcmVtb3ZlIC5weSBmaWxlLCB3ZSBvbmx5IG5lZWQgLnB5YyAob3IgLnB5bykKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICdyJykKLSAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVuYW1lKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQorICAgICAgICAjIENvbXBpbGUgJiByZW1vdmUgLnB5IGZpbGUsIHdlIG9ubHkgbmVlZCAucHljIChvciAucHlvKS4KKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGY6CisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZW5hbWUpCisgICAgICAgIHVubGluayhmaWxlbmFtZSkKIAotICAgICAgICAjIG5lZWQgdG8gYmUgYWJsZSB0byBsb2FkIGZyb20gY3VycmVudCBkaXIKKyAgICAgICAgIyBOZWVkIHRvIGJlIGFibGUgdG8gbG9hZCBmcm9tIGN1cnJlbnQgZGlyLgogICAgICAgICBzeXMucGF0aC5hcHBlbmQoJycpCiAKLSAgICAgICAgIyB0aGlzIHVzZWQgdG8gY3Jhc2gKKyAgICAgICAgIyBUaGlzIHVzZWQgdG8gY3Jhc2guCiAgICAgICAgIGV4ZWMgJ2ltcG9ydCAnICsgbW9kdWxlCiAKLSAgICAgICAgIyBjbGVhbnVwCisgICAgICAgICMgQ2xlYW51cC4KICAgICAgICAgZGVsIHN5cy5wYXRoWy0xXQotICAgICAgICBmb3IgZXh0IGluICdweWMnLCAncHlvJzoKLSAgICAgICAgICAgIGZuYW1lID0gbW9kdWxlICsgb3MuZXh0c2VwICsgZXh0Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbmFtZSk6Ci0gICAgICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQorICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAnYycpCisgICAgICAgIHVubGluayhmaWxlbmFtZSArICdvJykKIAogICAgIGRlZiB0ZXN0X2ZhaWxpbmdfaW1wb3J0X3N0aWNrcyhzZWxmKToKICAgICAgICAgc291cmNlID0gVEVTVEZOICsgb3MuZXh0c2VwICsgInB5IgotICAgICAgICBmID0gb3Blbihzb3VyY2UsICJ3IikKLSAgICAgICAgcHJpbnQgPj4gZiwgImEgPSAxIC8vIDAiCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CisgICAgICAgICAgICBwcmludCA+PiBmLCAiYSA9IDEgLy8gMCIKIAogICAgICAgICAjIE5ldyBpbiAyLjQsIHdlIHNob3VsZG4ndCBiZSBhYmxlIHRvIGltcG9ydCB0aGF0IG5vIG1hdHRlciBob3cgb2Z0ZW4KICAgICAgICAgIyB3ZSB0cnkuCiAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBpIGluIDEsIDIsIDM6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIFRFU1RGTiBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZGFtYWdlZCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMgb24gJWkuIHRyeSIgJSBpKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgid2FzIGFibGUgdG8gaW1wb3J0IGEgZGFtYWdlZCBtb2R1bGUgb24gJWkuIHRyeSIgJSBpKQorICAgICAgICAgICAgZm9yIGkgaW4gWzEsIDIsIDNdOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBfX2ltcG9ydF9fLCBURVNURk4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihURVNURk4sIHN5cy5tb2R1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhbWFnZWQgbW9kdWxlIGluIHN5cy5tb2R1bGVzIG9uICVpIHRyeSIgJSBpKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnBhdGgucG9wKDApCisgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KICAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCiAKICAgICBkZWYgdGVzdF9mYWlsaW5nX3JlbG9hZChzZWxmKToKICAgICAgICAgIyBBIGZhaWxpbmcgcmVsb2FkIHNob3VsZCBsZWF2ZSB0aGUgbW9kdWxlIG9iamVjdCBpbiBzeXMubW9kdWxlcy4KICAgICAgICAgc291cmNlID0gVEVTVEZOICsgb3MuZXh0c2VwICsgInB5IgotICAgICAgICBmID0gb3Blbihzb3VyY2UsICJ3IikKLSAgICAgICAgcHJpbnQgPj4gZiwgImEgPSAxIgotICAgICAgICBwcmludCA+PiBmLCAiYiA9IDIiCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CisgICAgICAgICAgICBwcmludCA+PiBmLCAiYSA9IDEiCisgICAgICAgICAgICBwcmludCA+PiBmLCAiYiA9IDIiCiAKICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oVEVTVEZOIGluIHN5cy5tb2R1bGVzLCAiZXhwZWN0ZWQgbW9kdWxlIGluIHN5cy5tb2R1bGVzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZC5hLCAxLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZC5iLCAyLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oVEVTVEZOLCBzeXMubW9kdWxlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmEsIDEsICJtb2R1bGUgaGFzIHdyb25nIGF0dHJpYnV0ZSB2YWx1ZXMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYiwgMiwgIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCiAKICAgICAgICAgICAgICMgT24gV2luWFAsIGp1c3QgcmVwbGFjaW5nIHRoZSAucHkgZmlsZSB3YXNuJ3QgZW5vdWdoIHRvCiAgICAgICAgICAgICAjIGNvbnZpbmNlIHJlbG9hZCgpIHRvIHJlcGFyc2UgaXQuICBNYXliZSB0aGUgdGltZXN0YW1wIGRpZG4ndApAQCAtMTk5LDY4ICsyMDAsNzMgQEAKICAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCiAKICAgICAgICAgICAgICMgTm93IGRhbWFnZSB0aGUgbW9kdWxlLgotICAgICAgICAgICAgZiA9IG9wZW4oc291cmNlLCAidyIpCi0gICAgICAgICAgICBwcmludCA+PiBmLCAiYSA9IDEwIgotICAgICAgICAgICAgcHJpbnQgPj4gZiwgImIgPSAyMC8vMCIKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGYsICJhID0gMTAiCisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZiwgImIgPSAyMC8vMCIKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGltcC5yZWxvYWQsIG1vZCkKIAogICAgICAgICAgICAgIyBCdXQgd2Ugc3RpbGwgZXhwZWN0IHRoZSBtb2R1bGUgdG8gYmUgaW4gc3lzLm1vZHVsZXMuCiAgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5nZXQoVEVTVEZOKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYobW9kIGlzIE5vbmUsICJleHBlY3RlZCBtb2R1bGUgdG8gc3RpbGwgYmUgaW4gc3lzLm1vZHVsZXMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2QsIE5vbmUsICJleHBlY3RlZCBtb2R1bGUgdG8gYmUgaW4gc3lzLm1vZHVsZXMiKQogCiAgICAgICAgICAgICAjIFdlIHNob3VsZCBoYXZlIHJlcGxhY2VkIGEgdy8gMTAsIGJ1dCB0aGUgb2xkIGIgdmFsdWUgc2hvdWxkCiAgICAgICAgICAgICAjIHN0aWNrLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobW9kLmEsIDEwLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZC5iLCAyLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmEsIDEwLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmIsIDIsICJtb2R1bGUgaGFzIHdyb25nIGF0dHJpYnV0ZSB2YWx1ZXMiKQogCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMucGF0aC5wb3AoMCkKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQogICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzKFRFU1RGTikKLSAgICAgICAgICAgIGlmIFRFU1RGTiBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbVEVTVEZOXQorICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKIAogICAgIGRlZiB0ZXN0X2luZmluaXRlX3JlbG9hZChzZWxmKToKLSAgICAgICAgIyBCdWcgIzc0MjM0MiByZXBvcnRzIHRoYXQgUHl0aG9uIHNlZ2ZhdWx0cyAoaW5maW5pdGUgcmVjdXJzaW9uIGluIEMpCi0gICAgICAgICMgIHdoZW4gZmFjZWQgd2l0aCBzZWxmLXJlY3Vyc2l2ZSByZWxvYWQoKWluZy4KKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNzQyMzQyIHJlcG9ydHMgdGhhdCBQeXRob24gc2VnZmF1bHRzCisgICAgICAgICMgKGluZmluaXRlIHJlY3Vyc2lvbiBpbiBDKSB3aGVuIGZhY2VkIHdpdGggc2VsZi1yZWN1cnNpdmUgcmVsb2FkKClpbmcuCiAKICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBpbmZpbml0ZV9yZWxvYWQKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5wYXRoLnBvcCgwKQorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCiAKICAgICBkZWYgdGVzdF9pbXBvcnRfbmFtZV9iaW5kaW5nKHNlbGYpOgotICAgICAgICAjIGltcG9ydCB4LnkueiBiaW5kcyB4IGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZQorICAgICAgICAjIGltcG9ydCB4LnkueiBiaW5kcyB4IGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZS4KICAgICAgICAgaW1wb3J0IHRlc3QgYXMgeAogICAgICAgICBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKLSAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgdGVzdCwgeC5fX25hbWVfXykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIodGVzdC50ZXN0X3N1cHBvcnQsICJfX2ZpbGVfXyIpKQorICAgICAgICBzZWxmLmFzc2VydElzKHgsIHRlc3QsIHguX19uYW1lX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHRlc3QudGVzdF9zdXBwb3J0LCAiX19maWxlX18iKSkKIAotICAgICAgICAjIGltcG9ydCB4LnkueiBhcyB3IGJpbmRzIHogYXMgdworICAgICAgICAjIGltcG9ydCB4LnkueiBhcyB3IGJpbmRzIHogYXMgdy4KICAgICAgICAgaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0IGFzIHkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgdGVzdC50ZXN0X3N1cHBvcnQsIHkuX19uYW1lX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeSwgdGVzdC50ZXN0X3N1cHBvcnQsIHkuX19uYW1lX18pCiAKICAgICBkZWYgdGVzdF9pbXBvcnRfaW5pdGxlc3NfZGlyZWN0b3J5X3dhcm5pbmcoc2VsZik6Ci0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIEltcG9ydFdhcm5pbmcpKToKICAgICAgICAgICAgICMgSnVzdCBhIHJhbmRvbSBub24tcGFja2FnZSBkaXJlY3Rvcnkgd2UgYWx3YXlzIGV4cGVjdCB0byBiZQogICAgICAgICAgICAgIyBzb21ld2hlcmUgaW4gc3lzLnBhdGguLi4KLSAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZXJyb3InLCBJbXBvcnRXYXJuaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0V2FybmluZywgX19pbXBvcnRfXywgInNpdGUtcGFja2FnZXMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sICJzaXRlLXBhY2thZ2VzIikKIAotICAgIGRlZiB0ZXN0X2ltcG9ydGJ5ZmlsZW5hbWUoc2VsZik6CisgICAgZGVmIHRlc3RfaW1wb3J0X2J5X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKFRFU1RGTikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjOgogICAgICAgICAgICAgX19pbXBvcnRfXyhwYXRoKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkltcG9ydCBieSBmaWxlbmFtZSBpcyBub3Qgc3VwcG9ydGVkLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIuYXJnc1swXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IGJ5IHBhdGggZGlkbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkltcG9ydCBieSBmaWxlbmFtZSBpcyBub3Qgc3VwcG9ydGVkLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYy5leGNlcHRpb24uYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X2ltcG9ydF9pbl9kZWxfZG9lc19ub3RfY3Jhc2goc2VsZik6CisgICAgICAgICMgSXNzdWUgNDIzNgorICAgICAgICB0ZXN0Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KCcnLCBURVNURk4sIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wCisgICAgICAgICAgICBzeXMuYXJndi5pbnNlcnQoMCwgQygpKQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKHRlc3RmbikKIAogCi1jbGFzcyBUZXN0UHljUmV3cml0aW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFB5Y1Jld3JpdGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFRlc3QgdGhhdCB0aGUgYGNvX2ZpbGVuYW1lYCBhdHRyaWJ1dGUgb24gY29kZSBvYmplY3RzIGFsd2F5cyBwb2ludHMKICAgICAjIHRvIHRoZSByaWdodCBmaWxlLCBldmVuIHdoZW4gdmFyaW91cyB0aGluZ3MgaGFwcGVuIChlLmcuIGJvdGggdGhlIC5weQogICAgICMgYW5kIHRoZSAucHljIGZpbGUgYXJlIHJlbmFtZWQpLgpAQCAtMjkyLDEyICsyOTgsMTAgQEAKICAgICAgICAgaWYgc2VsZi5vcmlnX21vZHVsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYubW9kdWxlX25hbWVdID0gc2VsZi5vcmlnX21vZHVsZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3NlbGYubW9kdWxlX25hbWVdCi0gICAgICAgIGZvciBmaWxlX25hbWUgaW4gc2VsZi5maWxlX25hbWUsIHNlbGYuY29tcGlsZWRfbmFtZToKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVfbmFtZSk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVfbmFtZSkKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5kaXJfbmFtZSk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyX25hbWUpCisgICAgICAgICAgICB1bmxvYWQoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgdW5saW5rKHNlbGYuZmlsZV9uYW1lKQorICAgICAgICB1bmxpbmsoc2VsZi5jb21waWxlZF9uYW1lKQorICAgICAgICBybXRyZWUoc2VsZi5kaXJfbmFtZSkKIAogICAgIGRlZiBpbXBvcnRfbW9kdWxlKHNlbGYpOgogICAgICAgICBucyA9IGdsb2JhbHMoKQpAQCAtMzUxLDYgKzM1NSw3IEBACiAgICAgICAgIG1vZCA9IHNlbGYuaW1wb3J0X21vZHVsZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmNvbnN0YW50LmNvX2ZpbGVuYW1lLCBmb3JlaWduX2NvZGUuY29fZmlsZW5hbWUpCiAKKwogY2xhc3MgUGF0aHNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aCA9IFRFU1RGTgogCkBAIC0zNTksNTggKzM2NCw3OCBAQAogICAgICAgICBzZWxmLnN5c3BhdGggPSBzeXMucGF0aFs6XQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYucGF0aCkKLSAgICAgICAgc3lzLnBhdGggPSBzZWxmLnN5c3BhdGgKKyAgICAgICAgcm10cmVlKHNlbGYucGF0aCkKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c3BhdGgKIAotICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEyOTMKKyAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEyOTMuCiAgICAgZGVmIHRlc3RfdHJhaWxpbmdfc2xhc2goc2VsZik6Ci0gICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLnBhdGgsICd0ZXN0X3RyYWlsaW5nX3NsYXNoLnB5JyksICd3JykKLSAgICAgICAgZi53cml0ZSgidGVzdGRhdGEgPSAndGVzdF90cmFpbGluZ19zbGFzaCciKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLnBhdGgsICd0ZXN0X3RyYWlsaW5nX3NsYXNoLnB5JyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoInRlc3RkYXRhID0gJ3Rlc3RfdHJhaWxpbmdfc2xhc2gnIikKICAgICAgICAgc3lzLnBhdGguYXBwZW5kKHNlbGYucGF0aCsnLycpCiAgICAgICAgIG1vZCA9IF9faW1wb3J0X18oInRlc3RfdHJhaWxpbmdfc2xhc2giKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC50ZXN0ZGF0YSwgJ3Rlc3RfdHJhaWxpbmdfc2xhc2gnKQogICAgICAgICB1bmxvYWQoInRlc3RfdHJhaWxpbmdfc2xhc2giKQogCi1jbGFzcyBSZWxhdGl2ZUltcG9ydCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzNjc3LgorICAgIGRlZiBfdGVzdF9VTkNfcGF0aChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLnBhdGgsICd0ZXN0X3RyYWlsaW5nX3NsYXNoLnB5JyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoInRlc3RkYXRhID0gJ3Rlc3RfdHJhaWxpbmdfc2xhc2gnIikKKyAgICAgICAgIyBDcmVhdGUgdGhlIFVOQyBwYXRoLCBsaWtlIFxcbXlob3N0XGMkXGZvb1xiYXIuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmFic3BhdGgoc2VsZi5wYXRoKQorICAgICAgICBpbXBvcnQgc29ja2V0CisgICAgICAgIGhuID0gc29ja2V0LmdldGhvc3RuYW1lKCkKKyAgICAgICAgZHJpdmUgPSBwYXRoWzBdCisgICAgICAgIHVuYyA9ICJcXFxcJXNcXCVzJCIlKGhuLCBkcml2ZSkKKyAgICAgICAgdW5jICs9IHBhdGhbMjpdCisgICAgICAgIHN5cy5wYXRoLmFwcGVuZChwYXRoKQorICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKCJ0ZXN0X3RyYWlsaW5nX3NsYXNoIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QudGVzdGRhdGEsICd0ZXN0X3RyYWlsaW5nX3NsYXNoJykKKyAgICAgICAgdW5sb2FkKCJ0ZXN0X3RyYWlsaW5nX3NsYXNoIikKKworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICB0ZXN0X1VOQ19wYXRoID0gX3Rlc3RfVU5DX3BhdGgKKworCitjbGFzcyBSZWxhdGl2ZUltcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWyJ0ZXN0LnJlbGltcG9ydCJdCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdW5sb2FkKCJ0ZXN0LnJlbGltcG9ydCIpCisgICAgc2V0VXAgPSB0ZWFyRG93bgogCiAgICAgZGVmIHRlc3RfcmVsaW1wb3J0X3N0YXIoc2VsZik6CiAgICAgICAgICMgVGhpcyB3aWxsIGltcG9ydCAqIGZyb20gLnRlc3RfaW1wb3J0LgogICAgICAgICBmcm9tIC4gaW1wb3J0IHJlbGltcG9ydAotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihyZWxpbXBvcnQsICJSZWxhdGl2ZUltcG9ydCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihyZWxpbXBvcnQsICJSZWxhdGl2ZUltcG9ydFRlc3RzIikpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTMyMjEoc2VsZik6CisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzIyMS4KICAgICAgICAgZGVmIGNoZWNrX2Fic29sdXRlKCk6CiAgICAgICAgICAgICBleGVjICJmcm9tIG9zIGltcG9ydCBwYXRoIiBpbiBucwogICAgICAgICBkZWYgY2hlY2tfcmVsYXRpdmUoKToKICAgICAgICAgICAgIGV4ZWMgImZyb20gLiBpbXBvcnQgcmVsaW1wb3J0IiBpbiBucworCiAgICAgICAgICMgQ2hlY2sgYm90aCBPSyB3aXRoIF9fcGFja2FnZV9fIGFuZCBfX25hbWVfXyBjb3JyZWN0CiAgICAgICAgIG5zID0gZGljdChfX3BhY2thZ2VfXz0ndGVzdCcsIF9fbmFtZV9fPSd0ZXN0Lm5vdGFyZWFsbW9kdWxlJykKICAgICAgICAgY2hlY2tfYWJzb2x1dGUoKQogICAgICAgICBjaGVja19yZWxhdGl2ZSgpCisKICAgICAgICAgIyBDaGVjayBib3RoIE9LIHdpdGggb25seSBfX25hbWVfXyB3cm9uZwogICAgICAgICBucyA9IGRpY3QoX19wYWNrYWdlX189J3Rlc3QnLCBfX25hbWVfXz0nbm90YXJlYWxwa2cubm90YXJlYWxtb2R1bGUnKQogICAgICAgICBjaGVja19hYnNvbHV0ZSgpCiAgICAgICAgIGNoZWNrX3JlbGF0aXZlKCkKKwogICAgICAgICAjIENoZWNrIHJlbGF0aXZlIGZhaWxzIHdpdGggb25seSBfX3BhY2thZ2VfXyB3cm9uZwogICAgICAgICBucyA9IGRpY3QoX19wYWNrYWdlX189J2ZvbycsIF9fbmFtZV9fPSd0ZXN0Lm5vdGFyZWFsbW9kdWxlJykKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcuK2ZvbycsIFJ1bnRpbWVXYXJuaW5nKSk6CiAgICAgICAgICAgICBjaGVja19hYnNvbHV0ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJ2ZvbycgaW4gc3RyKHcubWVzc2FnZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuY2F0ZWdvcnksIFJ1bnRpbWVXYXJuaW5nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FcnJvciwgY2hlY2tfcmVsYXRpdmUpCisKICAgICAgICAgIyBDaGVjayByZWxhdGl2ZSBmYWlscyB3aXRoIF9fcGFja2FnZV9fIGFuZCBfX25hbWVfXyB3cm9uZwogICAgICAgICBucyA9IGRpY3QoX19wYWNrYWdlX189J2ZvbycsIF9fbmFtZV9fPSdub3RhcmVhbHBrZy5ub3RhcmVhbG1vZHVsZScpCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnLitmb28nLCBSdW50aW1lV2FybmluZykpOgogICAgICAgICAgICAgY2hlY2tfYWJzb2x1dGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCdmb28nIGluIHN0cih3Lm1lc3NhZ2UpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmNhdGVnb3J5LCBSdW50aW1lV2FybmluZykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IsIGNoZWNrX3JlbGF0aXZlKQorCiAgICAgICAgICMgQ2hlY2sgYm90aCBmYWlsIHdpdGggcGFja2FnZSBzZXQgdG8gYSBub24tc3RyaW5nCiAgICAgICAgIG5zID0gZGljdChfX3BhY2thZ2VfXz1vYmplY3QoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2hlY2tfYWJzb2x1dGUpCkBAIC00MjAsMTkgKzQ0NSwxNiBAQAogICAgICAgICAjIElmIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydCBzeW50YXggaXMgdXNlZCwgdGhlbiBkbyBub3QgdHJ5CiAgICAgICAgICMgdG8gcGVyZm9ybSBhbiBhYnNvbHV0ZSBpbXBvcnQgaW4gdGhlIGZhY2Ugb2YgZmFpbHVyZS4KICAgICAgICAgIyBJc3N1ZSAjNzkwMi4KLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKICAgICAgICAgICAgIGZyb20gLm9zIGltcG9ydCBzZXAKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnQgdHJpZ2dlcmVkIGFuICIKICAgICAgICAgICAgICAgICAgICAgICAiaW1wbGljaXQgYWJzb2x1dGUgaW1wb3J0IikKIAogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgcnVuX3VuaXR0ZXN0KEltcG9ydFRlc3QsIFRlc3RQeWNSZXdyaXRpbmcsIFBhdGhzVGVzdHMsIFJlbGF0aXZlSW1wb3J0KQorICAgIHJ1bl91bml0dGVzdChJbXBvcnRUZXN0cywgUHljUmV3cml0aW5nVGVzdHMsIFBhdGhzVGVzdHMsIFJlbGF0aXZlSW1wb3J0VGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgIyB0ZXN0IG5lZWRzIHRvIGJlIGEgcGFja2FnZSwgc28gd2UgY2FuIGRvIHJlbGF0aXZlIGltcG9ydAorICAgICMgVGVzdCBuZWVkcyB0byBiZSBhIHBhY2thZ2UsIHNvIHdlIGNhbiBkbyByZWxhdGl2ZSBpbXBvcnRzLgogICAgIGZyb20gdGVzdC50ZXN0X2ltcG9ydCBpbXBvcnQgdGVzdF9tYWluCiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5CmluZGV4IGM0ZjczOTkuLmNmYWIxZjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weQpAQCAtMTc3LDExICsxNzcsMTEgQEAKIAogICAgICAgICBUZXN0SW1wb3J0ZXIubW9kdWxlc1sncmVsb2FkbW9kdWxlJ10gPSAoRmFsc2UsIHRlc3RfY28pCiAgICAgICAgIGltcG9ydCByZWxvYWRtb2R1bGUKLSAgICAgICAgc2VsZi5mYWlsSWYoaGFzYXR0cihyZWxvYWRtb2R1bGUsJ3JlbG9hZGVkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihyZWxvYWRtb2R1bGUsJ3JlbG9hZGVkJykpCiAKICAgICAgICAgVGVzdEltcG9ydGVyLm1vZHVsZXNbJ3JlbG9hZG1vZHVsZSddID0gKEZhbHNlLCByZWxvYWRfY28pCiAgICAgICAgIGltcC5yZWxvYWQocmVsb2FkbW9kdWxlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGFzYXR0cihyZWxvYWRtb2R1bGUsJ3JlbG9hZGVkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHJlbG9hZG1vZHVsZSwncmVsb2FkZWQnKSkKIAogICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm9sZGFicwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMuZ2V0X25hbWUoKSwKQEAgLTIyNywxNSArMjI3LDkgQEAKIAogICAgIGRlZiB0ZXN0QmxvY2tlcihzZWxmKToKICAgICAgICAgbW5hbWUgPSAiZXhjZXB0aW9ucyIgICMgYW4gYXJiaXRyYXJ5IGhhcm1sZXNzIGJ1aWx0aW4gbW9kdWxlCi0gICAgICAgIGlmIG1uYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21uYW1lXQorICAgICAgICB0ZXN0X3N1cHBvcnQudW5sb2FkKG1uYW1lKQogICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChJbXBvcnRCbG9ja2VyKG1uYW1lKSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX19pbXBvcnRfXyhtbmFtZSkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCInJXMnIHdhcyBub3Qgc3VwcG9zZWQgdG8gYmUgaW1wb3J0YWJsZSIgJSBtbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sIG1uYW1lKQogCiAgICAgZGVmIHRlc3RJbXBXcmFwcGVyKHNlbGYpOgogICAgICAgICBpID0gSW1wV3JhcHBlcigpCkBAIC0yNDcsNyArMjQxLDggQEAKICAgICAgICAgICAgIGZvciBuIGluIHN5cy5tb2R1bGVzLmtleXMoKToKICAgICAgICAgICAgICAgICBpZiBuLnN0YXJ0c3dpdGgocGFyZW50KToKICAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25dCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiVGhlIGNvbXBpbGVyIHBhY2thZ2UgaXMgZGVwcmVjYXRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIHJlbW92ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgICAgIGZvciBtbmFtZSBpbiBtbmFtZXM6CiAgICAgICAgICAgICAgICAgbSA9IF9faW1wb3J0X18obW5hbWUsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFsiX19kdW1teV9fIl0pCiAgICAgICAgICAgICAgICAgbS5fX2xvYWRlcl9fICAjIHRvIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYW5kbGVkIHRoZSBpbXBvcnQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkOGRhNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliLnB5CkBAIC0wLDAgKzEsMTc2IEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiB1bmNhY2hlKCpuYW1lcyk6CisgICAgIiIiVW5jYWNoZSBhIG1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzLgorCisgICAgQSBiYXNpYyBzYW5pdHkgY2hlY2sgaXMgcGVyZm9ybWVkIHRvIHByZXZlbnQgdW5jYWNoaW5nIG1vZHVsZXMgdGhhdCBlaXRoZXIKKyAgICBjYW5ub3Qvc2hvdWxkbid0IGJlIHVuY2FjaGVkLgorCisgICAgIiIiCisgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgIGlmIG5hbWUgaW4gKCdzeXMnLCAnbWFyc2hhbCcsICdpbXAnKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgImNhbm5vdCB1bmNhY2hlIHswfSBhcyBpdCB3aWxsIGJyZWFrIF9pbXBvcnRsaWIiLmZvcm1hdChuYW1lKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgaW1wb3J0X3N0YXRlKCoqa3dhcmdzKToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gbWFuYWdlIHRoZSB2YXJpb3VzIGltcG9ydGVycyBhbmQgc3RvcmVkIHN0YXRlIGluIHRoZQorICAgIHN5cyBtb2R1bGUuCisKKyAgICBUaGUgJ21vZHVsZXMnIGF0dHJpYnV0ZSBpcyBub3Qgc3VwcG9ydGVkIGFzIHRoZSBpbnRlcnByZXRlciBzdGF0ZSBzdG9yZXMgYQorICAgIHBvaW50ZXIgdG8gdGhlIGRpY3QgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgdXNlcyBpbnRlcm5hbGx5OworICAgIHJlYXNzaWduaW5nIHRvIHN5cy5tb2R1bGVzIGRvZXMgbm90IGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LgorCisgICAgIiIiCisgICAgb3JpZ2luYWxzID0ge30KKyAgICB0cnk6CisgICAgICAgIGZvciBhdHRyLCBkZWZhdWx0IGluICgoJ21ldGFfcGF0aCcsIFtdKSwgKCdwYXRoJywgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdwYXRoX2hvb2tzJywgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdwYXRoX2ltcG9ydGVyX2NhY2hlJywge30pKToKKyAgICAgICAgICAgIG9yaWdpbmFsc1thdHRyXSA9IGdldGF0dHIoc3lzLCBhdHRyKQorICAgICAgICAgICAgaWYgYXR0ciBpbiBrd2FyZ3M6CisgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0ga3dhcmdzW2F0dHJdCisgICAgICAgICAgICAgICAgZGVsIGt3YXJnc1thdHRyXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBkZWZhdWx0CisgICAgICAgICAgICBzZXRhdHRyKHN5cywgYXR0ciwgbmV3X3ZhbHVlKQorICAgICAgICBpZiBsZW4oa3dhcmdzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICd1bnJlY29nbml6ZWQgYXJndW1lbnRzOiB7MH0nLmZvcm1hdChrd2FyZ3Mua2V5cygpKSkKKyAgICAgICAgeWllbGQKKyAgICBmaW5hbGx5OgorICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gb3JpZ2luYWxzLml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKHN5cywgYXR0ciwgdmFsdWUpCisKKworY2xhc3MgbW9ja19tb2R1bGVzKG9iamVjdCk6CisKKyAgICAiIiJBIG1vY2sgaW1wb3J0ZXIvbG9hZGVyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICpuYW1lcyk6CisgICAgICAgIHNlbGYubW9kdWxlcyA9IHt9CisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoJy5fX2luaXRfXycpOgorICAgICAgICAgICAgICAgIGltcG9ydF9uYW1lID0gbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbXBvcnRfbmFtZSA9IG5hbWVbOi1sZW4oJy5fX2luaXRfXycpXQorICAgICAgICAgICAgaWYgJy4nIG5vdCBpbiBuYW1lOgorICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBOb25lCisgICAgICAgICAgICBlbGlmIGltcG9ydF9uYW1lID09IG5hbWU6CisgICAgICAgICAgICAgICAgcGFja2FnZSA9IG5hbWUucnNwbGl0KCcuJywgMSlbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFja2FnZSA9IGltcG9ydF9uYW1lCisgICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShpbXBvcnRfbmFtZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gJzxtb2NrIF9fZmlsZV9fPicKKyAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHBhY2thZ2UKKyAgICAgICAgICAgIG1vZHVsZS5hdHRyID0gbmFtZQorICAgICAgICAgICAgaWYgaW1wb3J0X25hbWUgIT0gbmFtZToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbJzxtb2NrIF9fcGF0aF9fPiddCisgICAgICAgICAgICBzZWxmLm1vZHVsZXNbaW1wb3J0X25hbWVdID0gbW9kdWxlCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZXNbbmFtZV0KKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgaWYgZnVsbG5hbWUgbm90IGluIHNlbGYubW9kdWxlczoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgaWYgZnVsbG5hbWUgbm90IGluIHNlbGYubW9kdWxlczoKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXMubW9kdWxlc1tmdWxsbmFtZV0gPSBzZWxmLm1vZHVsZXNbZnVsbG5hbWVdCisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fdW5jYWNoZSA9IHVuY2FjaGUoKnNlbGYubW9kdWxlcy5rZXlzKCkpCisgICAgICAgIHNlbGYuX3VuY2FjaGUuX19lbnRlcl9fKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgorICAgICAgICBzZWxmLl91bmNhY2hlLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCisKKworCitjbGFzcyBJbXBvcnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlLiIiIgorCisgICAgZGVmIHRlc3RfbW9kdWxlX2ltcG9ydChzZWxmKToKKyAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIHRvcC1sZXZlbCBtb2R1bGUuCisgICAgICAgIHdpdGggbW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnKSBhcyBtb2NrOgorICAgICAgICAgICAgd2l0aCBpbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICd0b3BfbGV2ZWwnKQorCisgICAgZGVmIHRlc3RfYWJzb2x1dGVfcGFja2FnZV9pbXBvcnQoc2VsZik6CisgICAgICAgICMgVGVzdCBpbXBvcnRpbmcgYSBtb2R1bGUgZnJvbSBhIHBhY2thZ2Ugd2l0aCBhbiBhYnNvbHV0ZSBuYW1lLgorICAgICAgICBwa2dfbmFtZSA9ICdwa2cnCisgICAgICAgIHBrZ19sb25nX25hbWUgPSAnezB9Ll9faW5pdF9fJy5mb3JtYXQocGtnX25hbWUpCisgICAgICAgIG5hbWUgPSAnezB9Lm1vZCcuZm9ybWF0KHBrZ19uYW1lKQorICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBuYW1lKSBhcyBtb2NrOgorICAgICAgICAgICAgd2l0aCBpbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKKworICAgIGRlZiB0ZXN0X3NoYWxsb3dfcmVsYXRpdmVfcGFja2FnZV9pbXBvcnQoc2VsZik6CisgICAgICAgIG1vZHVsZXMgPSBbJ2EuX19pbml0X18nLCAnYS5iLl9faW5pdF9fJywgJ2EuYi5jLl9faW5pdF9fJywgJ2EuYi5jLmQnXQorICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuZCcsICdhLmIuYycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdhLmIuYy5kJykKKworICAgIGRlZiB0ZXN0X2RlZXBfcmVsYXRpdmVfcGFja2FnZV9pbXBvcnQoc2VsZik6CisgICAgICAgICMgVGVzdCBpbXBvcnRpbmcgYSBtb2R1bGUgZnJvbSBhIHBhY2thZ2UgdGhyb3VnaCBhIHJlbGF0dmUgaW1wb3J0LgorICAgICAgICBtb2R1bGVzID0gWydhLl9faW5pdF9fJywgJ2EuYi5fX2luaXRfXycsICdhLmMnXQorICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuLmMnLCAnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ2EuYycpCisKKyAgICBkZWYgdGVzdF9hYnNvbHV0ZV9pbXBvcnRfd2l0aF9wYWNrYWdlKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGEgbW9kdWxlIGZyb20gYSBwYWNrYWdlIHdpdGggYW4gYWJzb2x1dGUgbmFtZSB3aXRoCisgICAgICAgICMgdGhlICdwYWNrYWdlJyBhcmd1bWVudCBnaXZlbi4KKyAgICAgICAgcGtnX25hbWUgPSAncGtnJworICAgICAgICBwa2dfbG9uZ19uYW1lID0gJ3swfS5fX2luaXRfXycuZm9ybWF0KHBrZ19uYW1lKQorICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKKyAgICAgICAgd2l0aCBtb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBuYW1lKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfaW1wb3J0X3dvX3BhY2thZ2Uoc2VsZik6CisgICAgICAgICMgUmVsYXRpdmUgaW1wb3J0cyBjYW5ub3QgaGFwcGVuIHdpdGhvdXQgdGhlICdwYWNrYWdlJyBhcmd1bWVudCBiZWluZworICAgICAgICAjIHNldC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSwgJy5zdXBwb3J0JykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisgICAgcnVuX3VuaXR0ZXN0KEltcG9ydE1vZHVsZVRlc3RzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkgYi9MaWIvdGVzdC90ZXN0X2luZGV4LnB5CmluZGV4IGM5ODU1NjkuLmE5MmI0NDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbmRleC5weQpAQCAtNDksNiArNDksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC03TC5fX2luZGV4X18oKSwgLTcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vLl9faW5kZXhfXygpLCA0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubi5fX2luZGV4X18oKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLl9faW5kZXhfXygpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLl9faW5kZXhfXygpLCAwKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NlcyhzZWxmKToKICAgICAgICAgciA9IHJhbmdlKDEwKQpAQCAtNjAsMTAgKzYyLDEwIEBACiAgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuby5pbmQgPSAnZHVtYicKICAgICAgICAgc2VsZi5uLmluZCA9ICdiYWQnCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4LCBzZWxmLm8pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4LCBzZWxmLm4pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIHNsaWNlKHNlbGYubykuaW5kaWNlcywgMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgc2xpY2Uoc2VsZi5uKS5pbmRpY2VzLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4LCBzZWxmLm8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXgsIHNlbGYubikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzbGljZShzZWxmLm8pLmluZGljZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2xpY2Uoc2VsZi5uKS5pbmRpY2VzLCAwKQogCiAKIGNsYXNzIFNlcVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg5LDYgKzkxLDI0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5vOnNlbGYubzJdLCBzZWxmLnNlcVsxOjNdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW3NlbGYubjpzZWxmLm4yXSwgc2VsZi5zZXFbMjo0XSkKIAorICAgIGRlZiB0ZXN0X3NsaWNlX2J1Zzc1MzIoc2VsZik6CisgICAgICAgIHNlcWxlbiA9IGxlbihzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5vLmluZCA9IGludChzZXFsZW4gKiAxLjUpCisgICAgICAgIHNlbGYubi5pbmQgPSBzZXFsZW4gKyAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5vOl0sIHNlbGYuc2VxWzA6MF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbOnNlbGYub10sIHNlbGYuc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW3NlbGYubjpdLCBzZWxmLnNlcVswOjBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxWzpzZWxmLm5dLCBzZWxmLnNlcSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnNlcSwgQ2xhc3NpY1NlcSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBUaGVzZSB0ZXN0cyBmYWlsIGZvciBDbGFzc2ljU2VxIChzZWUgYnVnICM3NTMyKQorICAgICAgICBzZWxmLm8yLmluZCA9IC1zZXFsZW4gLSAyCisgICAgICAgIHNlbGYubjIuaW5kID0gLWludChzZXFsZW4gKiAxLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5vMjpdLCBzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVs6c2VsZi5vMl0sIHNlbGYuc2VxWzA6MF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5uMjpdLCBzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVs6c2VsZi5uMl0sIHNlbGYuc2VxWzA6MF0pCisKICAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CiAgICAgICAgIHNlbGYuby5pbmQgPSAzCiAgICAgICAgIHNlbGYubi5pbmQgPSAyCkBAIC0xMTUsMTEgKzEzNSwxMSBAQAogICAgICAgICBzZWxmLm8uaW5kID0gJ2R1bWInCiAgICAgICAgIHNlbGYubi5pbmQgPSAnYmFkJwogICAgICAgICBpbmRleG9iaiA9IGxhbWJkYSB4LCBvYmo6IG9iai5zZXFbeF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgaW5kZXhvYmosIHNlbGYubywgc2VsZikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgaW5kZXhvYmosIHNlbGYubiwgc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbmRleG9iaiwgc2VsZi5vLCBzZWxmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluZGV4b2JqLCBzZWxmLm4sIHNlbGYpCiAgICAgICAgIHNsaWNlb2JqID0gbGFtYmRhIHgsIG9iajogb2JqLnNlcVt4Ol0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgc2xpY2VvYmosIHNlbGYubywgc2VsZikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgc2xpY2VvYmosIHNlbGYubiwgc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzbGljZW9iaiwgc2VsZi5vLCBzZWxmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNsaWNlb2JqLCBzZWxmLm4sIHNlbGYpCiAKIAogY2xhc3MgTGlzdFRlc3RDYXNlKFNlcVRlc3RDYXNlKToKQEAgLTE1MiwxOSArMTcyLDY4IEBACiAKICAgICAgICAgbHN0ID0gWzUsIDYsIDcsIDgsIDksIDExXQogICAgICAgICBsMiA9IGxzdC5fX2ltdWxfXyhzZWxmLm4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsMiBpcyBsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobDIsIGxzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFs1LCA2LCA3LCA4LCA5LCAxMV0gKiAzKQogCiAKK2NsYXNzIF9CYXNlU2VxOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZXJhYmxlKToKKyAgICAgICAgc2VsZi5fbGlzdCA9IGxpc3QoaXRlcmFibGUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiByZXByKHNlbGYuX2xpc3QpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3QgPT0gb3RoZXIKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2xpc3QpCisKKyAgICBkZWYgX19tdWxfXyhzZWxmLCBuKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuX2xpc3QqbikKKyAgICBfX3JtdWxfXyA9IF9fbXVsX18KKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBzZWxmLl9saXN0W2luZGV4XQorCisKK2NsYXNzIF9HZXRTbGljZU1peGluOgorCisgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3QuX19nZXRzbGljZV9fKGksIGopCisKKworY2xhc3MgQ2xhc3NpY1NlcShfQmFzZVNlcSk6IHBhc3MKK2NsYXNzIE5ld1NlcShfQmFzZVNlcSwgb2JqZWN0KTogcGFzcworY2xhc3MgQ2xhc3NpY1NlcURlcHJlY2F0ZWQoX0dldFNsaWNlTWl4aW4sIENsYXNzaWNTZXEpOiBwYXNzCitjbGFzcyBOZXdTZXFEZXByZWNhdGVkKF9HZXRTbGljZU1peGluLCBOZXdTZXEpOiBwYXNzCisKKwogY2xhc3MgVHVwbGVUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CiAgICAgc2VxID0gKDAsMTAsMjAsMzAsNDAsNTApCiAKIGNsYXNzIFN0cmluZ1Rlc3RDYXNlKFNlcVRlc3RDYXNlKToKICAgICBzZXEgPSAidGhpcyBpcyBhIHRlc3QiCiAKK2NsYXNzIEJ5dGVBcnJheVRlc3RDYXNlKFNlcVRlc3RDYXNlKToKKyAgICBzZXEgPSBieXRlYXJyYXkoInRoaXMgaXMgYSB0ZXN0IikKKwogY2xhc3MgVW5pY29kZVRlc3RDYXNlKFNlcVRlc3RDYXNlKToKICAgICBzZXEgPSB1InRoaXMgaXMgYSB0ZXN0IgogCitjbGFzcyBDbGFzc2ljU2VxVGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9IENsYXNzaWNTZXEoKDAsMTAsMjAsMzAsNDAsNTApKQorCitjbGFzcyBOZXdTZXFUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CisgICAgc2VxID0gTmV3U2VxKCgwLDEwLDIwLDMwLDQwLDUwKSkKKworY2xhc3MgQ2xhc3NpY1NlcURlcHJlY2F0ZWRUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CisgICAgc2VxID0gQ2xhc3NpY1NlcURlcHJlY2F0ZWQoKDAsMTAsMjAsMzAsNDAsNTApKQorCitjbGFzcyBOZXdTZXFEZXByZWNhdGVkVGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9IE5ld1NlcURlcHJlY2F0ZWQoKDAsMTAsMjAsMzAsNDAsNTApKQorCiAKIGNsYXNzIFhSYW5nZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTg3LDcgKzI1NiwyMSBAQAogICAgIGRlZiBfZ2V0aXRlbV9oZWxwZXIoc2VsZiwgYmFzZSk6CiAgICAgICAgIGNsYXNzIEdldEl0ZW0oYmFzZSk6CiAgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gbWF4aW50ICNjYW5ub3QgcmV0dXJuIGxvbmcgaGVyZQorICAgICAgICAgICAgICAgIHJldHVybiBtYXhpbnQgIyBjYW5ub3QgcmV0dXJuIGxvbmcgaGVyZQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGtleQorICAgICAgICB4ID0gR2V0SXRlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLnBvc10sIHNlbGYucG9zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWddLCBzZWxmLm5lZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W3NlbGYubmVnOnNlbGYucG9zXS5pbmRpY2VzKG1heHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBtYXhzaXplLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W3NlbGYubmVnOnNlbGYucG9zOjFdLmluZGljZXMobWF4c2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIG1heHNpemUsIDEpKQorCisgICAgZGVmIF9nZXRzbGljZV9oZWxwZXJfZGVwcmVjYXRlZChzZWxmLCBiYXNlKToKKyAgICAgICAgY2xhc3MgR2V0SXRlbShiYXNlKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBtYXhpbnQgIyBjYW5ub3QgcmV0dXJuIGxvbmcgaGVyZQogICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGtleQogICAgICAgICAgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKToKQEAgLTE5NSwyMCArMjc4LDI1IEBACiAgICAgICAgIHggPSBHZXRJdGVtKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W3NlbGYucG9zXSwgc2VsZi5wb3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZ10sIHNlbGYubmVnKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W3NlbGYubmVnOnNlbGYucG9zXSwgKG1heGludCttaW5zaXplLCBtYXhzaXplKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZzpzZWxmLnBvczoxXS5pbmRpY2VzKG1heHNpemUpLCAoMCwgbWF4c2l6ZSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZzpzZWxmLnBvc10sIChtYXhpbnQrbWluc2l6ZSwgbWF4c2l6ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZzpzZWxmLnBvczoxXS5pbmRpY2VzKG1heHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBtYXhzaXplLCAxKSkKIAogICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CiAgICAgICAgIHNlbGYuX2dldGl0ZW1faGVscGVyKG9iamVjdCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5fZ2V0c2xpY2VfaGVscGVyX2RlcHJlY2F0ZWQob2JqZWN0KQogCiAgICAgZGVmIHRlc3RfZ2V0aXRlbV9jbGFzc2ljKHNlbGYpOgogICAgICAgICBjbGFzcyBFbXB0eTogcGFzcwotICAgICAgICBzZWxmLl9nZXRpdGVtX2hlbHBlcihFbXB0eSkKKyAgICAgICAgIyBYWFggVGhpcyB0ZXN0IGZhaWxzIChzZWUgYnVnICM3NTMyKQorICAgICAgICAjc2VsZi5fZ2V0aXRlbV9oZWxwZXIoRW1wdHkpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuX2dldHNsaWNlX2hlbHBlcl9kZXByZWNhdGVkKEVtcHR5KQogCiAgICAgZGVmIHRlc3Rfc2VxdWVuY2VfcmVwZWF0KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbGFtYmRhOiAiYSIgKiBzZWxmLnBvcykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKE92ZXJmbG93RXJyb3IsIGxhbWJkYTogImEiICogc2VsZi5uZWcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxhbWJkYTogImEiICogc2VsZi5wb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxhbWJkYTogImEiICogc2VsZi5uZWcpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpAQCAtMjE2LDExICszMDQsMjAgQEAKICAgICAgICAgQmFzZVRlc3RDYXNlLAogICAgICAgICBMaXN0VGVzdENhc2UsCiAgICAgICAgIFR1cGxlVGVzdENhc2UsCisgICAgICAgIEJ5dGVBcnJheVRlc3RDYXNlLAogICAgICAgICBTdHJpbmdUZXN0Q2FzZSwKICAgICAgICAgVW5pY29kZVRlc3RDYXNlLAorICAgICAgICBDbGFzc2ljU2VxVGVzdENhc2UsCisgICAgICAgIE5ld1NlcVRlc3RDYXNlLAogICAgICAgICBYUmFuZ2VUZXN0Q2FzZSwKICAgICAgICAgT3ZlcmZsb3dUZXN0Q2FzZSwKICAgICApCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICAgICAgQ2xhc3NpY1NlcURlcHJlY2F0ZWRUZXN0Q2FzZSwKKyAgICAgICAgICAgIE5ld1NlcURlcHJlY2F0ZWRUZXN0Q2FzZSwKKyAgICAgICAgKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQppbmRleCBkYzk3NjVmLi5mY2RmZDk0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CkBAIC0xLDE3ICsxLDI0IEBACitpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGxpbmVjYWNoZQogaW1wb3J0IGRhdGV0aW1lCitmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAorZnJvbSBVc2VyRGljdCBpbXBvcnQgVXNlckRpY3QKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBfY2hlY2tfcHkza193YXJuaW5ncworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja19weTNrX3dhcm5pbmdzCiAKLXdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoCit3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoCiAgICAgICAgICgidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIiwgU3ludGF4V2FybmluZyksCiAgICAgICAgIHF1aWV0PVRydWUpOgogICAgIGZyb20gdGVzdCBpbXBvcnQgaW5zcGVjdF9mb2RkZXIgYXMgbW9kCiAgICAgZnJvbSB0ZXN0IGltcG9ydCBpbnNwZWN0X2ZvZGRlcjIgYXMgbW9kMgogCisjIEMgbW9kdWxlIGZvciB0ZXN0X2ZpbmRzb3VyY2VfYmluYXJ5CitpbXBvcnQgdW5pY29kZWRhdGEKKwogIyBGdW5jdGlvbnMgdGVzdGVkIGluIHRoaXMgc3VpdGU6CiAjIGlzbW9kdWxlLCBpc2NsYXNzLCBpc21ldGhvZCwgaXNmdW5jdGlvbiwgaXN0cmFjZWJhY2ssIGlzZnJhbWUsIGlzY29kZSwKICMgaXNidWlsdGluLCBpc3JvdXRpbmUsIGlzZ2VuZXJhdG9yLCBpc2dlbmVyYXRvcmZ1bmN0aW9uLCBnZXRtZW1iZXJzLApAQCAtNDMsMTMgKzUwLDEzIEBACiAKICAgICBkZWYgaXN0ZXN0KHNlbGYsIHByZWRpY2F0ZSwgZXhwKToKICAgICAgICAgb2JqID0gZXZhbChleHApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhwcmVkaWNhdGUob2JqKSwgJyVzKCVzKScgJSAocHJlZGljYXRlLl9fbmFtZV9fLCBleHApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJlZGljYXRlKG9iaiksICclcyglcyknICUgKHByZWRpY2F0ZS5fX25hbWVfXywgZXhwKSkKIAogICAgICAgICBmb3Igb3RoZXIgaW4gc2VsZi5wcmVkaWNhdGVzIC0gc2V0KFtwcmVkaWNhdGVdKToKICAgICAgICAgICAgIGlmIHByZWRpY2F0ZSA9PSBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24gYW5kXAogICAgICAgICAgICAgICAgb3RoZXIgPT0gaW5zcGVjdC5pc2Z1bmN0aW9uOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihvdGhlcihvYmopLCAnbm90ICVzKCVzKScgJSAob3RoZXIuX19uYW1lX18sIGV4cCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG90aGVyKG9iaiksICdub3QgJXMoJXMpJyAlIChvdGhlci5fX25hbWVfXywgZXhwKSkKIAogZGVmIGdlbmVyYXRvcl9mdW5jdGlvbl9leGFtcGxlKHNlbGYpOgogICAgIGZvciBpIGluIHhyYW5nZSgyKToKQEAgLTY4LDcgKzc1LDYgQEAKICAgICBkZWYgdGVzdF9leGNsdWRpbmdfcHJlZGljYXRlcyhzZWxmKToKICAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2J1aWx0aW4sICdzeXMuZXhpdCcpCiAgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNidWlsdGluLCAnW10uYXBwZW5kJykKLSAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2NsYXNzLCAnbW9kLlN0dXBpZEdpdCcpCiAgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNjb2RlLCAnbW9kLnNwYW0uZnVuY19jb2RlJykKICAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2ZyYW1lLCAndGIudGJfZnJhbWUnKQogICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzZnVuY3Rpb24sICdtb2Quc3BhbScpCkBAIC04NCwxNSArOTAsNjEgQEAKICAgICAgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNnZXRzZXRkZXNjcmlwdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUodGIudGJfZnJhbWUpLmZfbG9jYWxzJykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGluc3BlY3QuaXNnZXRzZXRkZXNjcmlwdG9yKHR5cGUodGIudGJfZnJhbWUpLmZfbG9jYWxzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2dldHNldGRlc2NyaXB0b3IodHlwZSh0Yi50Yl9mcmFtZSkuZl9sb2NhbHMpKQogICAgICAgICBpZiBoYXNhdHRyKHR5cGVzLCAnTWVtYmVyRGVzY3JpcHRvclR5cGUnKToKICAgICAgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNtZW1iZXJkZXNjcmlwdG9yLCAnZGF0ZXRpbWUudGltZWRlbHRhLmRheXMnKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaW5zcGVjdC5pc21lbWJlcmRlc2NyaXB0b3IoZGF0ZXRpbWUudGltZWRlbHRhLmRheXMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzbWVtYmVyZGVzY3JpcHRvcihkYXRldGltZS50aW1lZGVsdGEuZGF5cykpCiAKICAgICBkZWYgdGVzdF9pc3JvdXRpbmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhpbnNwZWN0Lmlzcm91dGluZShtb2Quc3BhbSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhpbnNwZWN0Lmlzcm91dGluZShbXS5jb3VudCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0Lmlzcm91dGluZShtb2Quc3BhbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0Lmlzcm91dGluZShbXS5jb3VudCkpCisKKyAgICBkZWYgdGVzdF9pc2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzY2xhc3MsICdtb2QuU3R1cGlkR2l0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3QuaXNjbGFzcyhsaXN0KSkKKworICAgICAgICBjbGFzcyBuZXdzdHlsZShvYmplY3QpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LmlzY2xhc3MobmV3c3R5bGUpKQorCisgICAgICAgIGNsYXNzIEN1c3RvbUdldGF0dHIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3QuaXNjbGFzcyhDdXN0b21HZXRhdHRyKCkpKQorCisgICAgZGVmIHRlc3RfZ2V0X3Nsb3RfbWVtYmVycyhzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gKCJhIiwgImIiKQorCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeC5hID0gNDIKKyAgICAgICAgbWVtYmVycyA9IGRpY3QoaW5zcGVjdC5nZXRtZW1iZXJzKHgpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgbWVtYmVycykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYicsIG1lbWJlcnMpCisKKyAgICBkZWYgdGVzdF9pc2Fic3RyYWN0KHNlbGYpOgorICAgICAgICBmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKKworICAgICAgICBjbGFzcyBBYnN0cmFjdENsYXNzRXhhbXBsZShvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgICAgICAgICAgQGFic3RyYWN0bWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBDbGFzc0V4YW1wbGUoQWJzdHJhY3RDbGFzc0V4YW1wbGUpOgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYSA9IENsYXNzRXhhbXBsZSgpCisKKyAgICAgICAgIyBUZXN0IGdlbmVyYWwgYmVoYXZpb3VyLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5pc2Fic3RyYWN0KEFic3RyYWN0Q2xhc3NFeGFtcGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzYWJzdHJhY3QoQ2xhc3NFeGFtcGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzYWJzdHJhY3QoYSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2Fic3RyYWN0KGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2Fic3RyYWN0KDUpKQorCiAKIGNsYXNzIFRlc3RJbnRlcnByZXRlclN0YWNrKElzVGVzdEJhc2UpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgpAQCAtMTA1LDcgKzE1Nyw3IEBACiAgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNmcmFtZSwgJ21vZC5mcicpCiAKICAgICBkZWYgdGVzdF9zdGFjayhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihtb2Quc3QpID49IDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obW9kLnN0KSA+PSA1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5zdFswXVsxOl0sCiAgICAgICAgICAgICAgKG1vZGZpbGUsIDE2LCAnZWdncycsIFsnICAgIHN0ID0gaW5zcGVjdC5zdGFjaygpXG4nXSwgMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLnN0WzFdWzE6XSwKQEAgLTE0OCw3ICsyMDAsOCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKLSAgICAgICAgc2VsZi5zb3VyY2UgPSBmaWxlKGluc3BlY3QuZ2V0c291cmNlZmlsZShzZWxmLmZvZGRlckZpbGUpKS5yZWFkKCkKKyAgICAgICAgd2l0aCBvcGVuKGluc3BlY3QuZ2V0c291cmNlZmlsZShzZWxmLmZvZGRlckZpbGUpKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuc291cmNlID0gZnAucmVhZCgpCiAKICAgICBkZWYgc291cmNlcmFuZ2Uoc2VsZiwgdG9wLCBib3R0b20pOgogICAgICAgICBsaW5lcyA9IHNlbGYuc291cmNlLnNwbGl0KCJcbiIpCkBAIC0xODQsNiArMjM3LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jdGlvbnMsIFsoJ2VnZ3MnLCBtb2QuZWdncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdzcGFtJywgbW9kLnNwYW0pXSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X2dldGRvYyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGRvYyhtb2QpLCAnQSBtb2R1bGUgZG9jc3RyaW5nLicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRkb2MobW9kLlN0dXBpZEdpdCksCkBAIC0yMjAsNiArMjc1LDExIEBACiAgICAgZGVmIHRlc3RfZ2V0c291cmNlZmlsZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldHNvdXJjZWZpbGUobW9kLnNwYW0pLCBtb2RmaWxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlZmlsZShnaXQuYWJ1c2UpLCBtb2RmaWxlKQorICAgICAgICBmbiA9ICJfbm9uX2V4aXN0aW5nX2ZpbGVuYW1lX3VzZWRfZm9yX3NvdXJjZWZpbGVfdGVzdC5weSIKKyAgICAgICAgY28gPSBjb21waWxlKCJOb25lIiwgZm4sICJleGVjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldHNvdXJjZWZpbGUoY28pLCBOb25lKQorICAgICAgICBsaW5lY2FjaGUuY2FjaGVbY28uY29fZmlsZW5hbWVdID0gKDEsIE5vbmUsICJOb25lIiwgY28uY29fZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRzb3VyY2VmaWxlKGNvKSwgZm4pCiAKICAgICBkZWYgdGVzdF9nZXRmaWxlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0ZmlsZShtb2QuU3R1cGlkR2l0KSwgbW9kLl9fZmlsZV9fKQpAQCAtMzEwLDYgKzM3MCwyMyBAQAogICAgIGRlZiB0ZXN0X21ldGhvZF9pbl9keW5hbWljX2NsYXNzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIubWV0aG9kX2luX2R5bmFtaWNfY2xhc3MsIDk1LCA5NykKIAorICAgIEB1bml0dGVzdC5za2lwSWYoCisgICAgICAgIG5vdCBoYXNhdHRyKHVuaWNvZGVkYXRhLCAnX19maWxlX18nKSBvcgorICAgICAgICAgICAgdW5pY29kZWRhdGEuX19maWxlX19bLTQ6XSBpbiAoIi5weWMiLCAiLnB5byIpLAorICAgICAgICAidW5pY29kZWRhdGEgaXMgbm90IGFuIGV4dGVybmFsIGJpbmFyeSBtb2R1bGUiKQorICAgIGRlZiB0ZXN0X2ZpbmRzb3VyY2VfYmluYXJ5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgdW5pY29kZWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgdW5pY29kZWRhdGEpCisKKyAgICBkZWYgdGVzdF9maW5kc291cmNlX2NvZGVfaW5fbGluZWNhY2hlKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFsieD0xIl0KKyAgICAgICAgY28gPSBjb21waWxlKGxpbmVzWzBdLCAiX2R5bmFtaWNhbGx5X2NyZWF0ZWRfZmlsZSIsICJleGVjIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCBjbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIGNvKQorICAgICAgICBsaW5lY2FjaGUuY2FjaGVbY28uY29fZmlsZW5hbWVdID0gKDEsIE5vbmUsIGxpbmVzLCBjby5jb19maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmZpbmRzb3VyY2UoY28pLCAobGluZXMsMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRzb3VyY2UoY28pLCBsaW5lc1swXSkKKwogIyBIZWxwZXIgZm9yIHRlc3RpbmcgY2xhc3NpZnlfY2xhc3NfYXR0cnMuCiBkZWYgYXR0cnNfd29fb2JqcyhjbHMpOgogICAgIHJldHVybiBbdFs6M10gZm9yIHQgaW4gaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhjbHMpXQpAQCAtMzY0LDcgKzQ0MSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0QXJnU3BlY0VxdWFscyhBLm0sIFsnc2VsZiddKQogCiAgICAgZGVmIHRlc3RfZ2V0YXJnc3BlY19zdWJsaXN0b2ZvbmUoc2VsZik6Ci0gICAgICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygKICAgICAgICAgICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpLAogICAgICAgICAgICAgICAgICgicGFyZW50aGVzaXplZCBhcmd1bWVudCBuYW1lcyBhcmUgaW52YWxpZCIsIFN5bnRheFdhcm5pbmcpKToKICAgICAgICAgICAgIGV4ZWMgJ2RlZiBzdWJsaXN0T2ZPbmUoKGZvbywpKTogcmV0dXJuIDEnCkBAIC0zNzMsMTM1ICs0NTAsMjg5IEBACiAgICAgICAgICAgICBleGVjICdkZWYgZmFrZVN1Ymxpc3RPZk9uZSgoZm9vKSk6IHJldHVybiAxJwogICAgICAgICAgICAgc2VsZi5hc3NlcnRBcmdTcGVjRXF1YWxzKGZha2VTdWJsaXN0T2ZPbmUsIFsnZm9vJ10pCiAKKworICAgIGRlZiBfY2xhc3NpZnlfdGVzdChzZWxmLCBuZXdzdHlsZSk6CisgICAgICAgICIiIkhlbHBlciBmb3IgdGVzdGluZyB0aGF0IGNsYXNzaWZ5X2NsYXNzX2F0dHJzIGZpbmRzIGEgYnVuY2ggb2YKKyAgICAgICAgZGlmZmVyZW50IGtpbmRzIG9mIGF0dHJpYnV0ZXMgb24gYSBnaXZlbiBjbGFzcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5ld3N0eWxlOgorICAgICAgICAgICAgYmFzZSA9IG9iamVjdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xhc3MgYmFzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQShiYXNlKToKKyAgICAgICAgICAgIGRlZiBzKCk6IHBhc3MKKyAgICAgICAgICAgIHMgPSBzdGF0aWNtZXRob2QocykKKworICAgICAgICAgICAgZGVmIGMoY2xzKTogcGFzcworICAgICAgICAgICAgYyA9IGNsYXNzbWV0aG9kKGMpCisKKyAgICAgICAgICAgIGRlZiBnZXRwKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBwID0gcHJvcGVydHkoZ2V0cCkKKworICAgICAgICAgICAgZGVmIG0oc2VsZik6IHBhc3MKKworICAgICAgICAgICAgZGVmIG0xKHNlbGYpOiBwYXNzCisKKyAgICAgICAgICAgIGRhdGFibG9iID0gJzEnCisKKyAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnYycsICdjbGFzcyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGNsYXNzIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdwJywgJ3Byb3BlcnR5JywgQSksIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtJywgJ21ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20xJywgJ21ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBkZWYgbShzZWxmKTogcGFzcworCisgICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhCKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncCcsICdwcm9wZXJ0eScsIEEpLCBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbScsICdtZXRob2QnLCBCKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtMScsICdtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkYXRhYmxvYicsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKKworCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBkZWYgbShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGMoc2VsZik6IHBhc3MKKworICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoQykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdjJywgJ21ldGhvZCcsIEMpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3AnLCAncHJvcGVydHknLCBBKSwgYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20nLCAnbWV0aG9kJywgQyksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbTEnLCAnbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZGF0YWJsb2InLCAnZGF0YScsIEEpLCBhdHRycywgJ21pc3NpbmcgZGF0YScpCisKKyAgICAgICAgY2xhc3MgRChCLCBDKToKKyAgICAgICAgICAgIGRlZiBtMShzZWxmKTogcGFzcworCisgICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhEKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKKyAgICAgICAgaWYgbmV3c3R5bGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCgnYycsICdtZXRob2QnLCBDKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCgnYycsICdjbGFzcyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGNsYXNzIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdwJywgJ3Byb3BlcnR5JywgQSksIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtJywgJ21ldGhvZCcsIEIpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20xJywgJ21ldGhvZCcsIEQpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorCisKICAgICBkZWYgdGVzdF9jbGFzc2lmeV9vbGRzdHlsZShzZWxmKToKLSAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgIGRlZiBzKCk6IHBhc3MKLSAgICAgICAgICAgIHMgPSBzdGF0aWNtZXRob2QocykKLQotICAgICAgICAgICAgZGVmIGMoY2xzKTogcGFzcwotICAgICAgICAgICAgYyA9IGNsYXNzbWV0aG9kKGMpCi0KLSAgICAgICAgICAgIGRlZiBnZXRwKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBwID0gcHJvcGVydHkoZ2V0cCkKLQotICAgICAgICAgICAgZGVmIG0oc2VsZik6IHBhc3MKLQotICAgICAgICAgICAgZGVmIG0xKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgICAgIGRhdGFibG9iID0gJzEnCi0KLSAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnYycsICdjbGFzcyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgY2xhc3MgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgncCcsICdwcm9wZXJ0eScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20nLCAnbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20xJywgJ21ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdkYXRhYmxvYicsICdkYXRhJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGRhdGEnKQotCi0gICAgICAgIGNsYXNzIEIoQSk6Ci0gICAgICAgICAgICBkZWYgbShzZWxmKTogcGFzcwotCi0gICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhCKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGNsYXNzIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3AnLCAncHJvcGVydHknLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtJywgJ21ldGhvZCcsIEIpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtMScsICdtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnZGF0YWJsb2InLCAnZGF0YScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKKyAgICAgICAgIiIiY2xhc3NpZnlfY2xhc3NfYXR0cnMgZmluZHMgc3RhdGljIG1ldGhvZHMsIGNsYXNzIG1ldGhvZHMsCisgICAgICAgIHByb3BlcnRpZXMsIG5vcm1hbCBtZXRob2RzLCBhbmQgZGF0YSBhdHRyaWJ1dGVzIG9uIGFuIG9sZC1zdHlsZQorICAgICAgICBjbGFzcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NsYXNzaWZ5X3Rlc3QoRmFsc2UpCiAKIAotICAgICAgICBjbGFzcyBDKEEpOgotICAgICAgICAgICAgZGVmIG0oc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBjKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnYycsICdtZXRob2QnLCBDKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgncCcsICdwcm9wZXJ0eScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20nLCAnbWV0aG9kJywgQykgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20xJywgJ21ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdkYXRhYmxvYicsICdkYXRhJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGRhdGEnKQotCi0gICAgICAgIGNsYXNzIEQoQiwgQyk6Ci0gICAgICAgICAgICBkZWYgbTEoc2VsZik6IHBhc3MKLQotICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoRCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdjJywgJ2NsYXNzIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdwJywgJ3Byb3BlcnR5JywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnbScsICdtZXRob2QnLCBCKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnbTEnLCAnbWV0aG9kJywgRCkgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgZGF0YScpCi0KLSAgICAjIFJlcGVhdCBhbGwgdGhhdCwgYnV0IHcvIG5ldy1zdHlsZSBjbGFzc2VzLgogICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X25ld3N0eWxlKHNlbGYpOgotICAgICAgICBjbGFzcyBBKG9iamVjdCk6Ci0KLSAgICAgICAgICAgIGRlZiBzKCk6IHBhc3MKLSAgICAgICAgICAgIHMgPSBzdGF0aWNtZXRob2QocykKLQotICAgICAgICAgICAgZGVmIGMoY2xzKTogcGFzcwotICAgICAgICAgICAgYyA9IGNsYXNzbWV0aG9kKGMpCi0KLSAgICAgICAgICAgIGRlZiBnZXRwKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBwID0gcHJvcGVydHkoZ2V0cCkKLQotICAgICAgICAgICAgZGVmIG0oc2VsZik6IHBhc3MKLQotICAgICAgICAgICAgZGVmIG0xKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgICAgIGRhdGFibG9iID0gJzEnCi0KLSAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnYycsICdjbGFzcyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgY2xhc3MgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgncCcsICdwcm9wZXJ0eScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20nLCAnbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20xJywgJ21ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdkYXRhYmxvYicsICdkYXRhJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGRhdGEnKQotCi0gICAgICAgIGNsYXNzIEIoQSk6Ci0KLSAgICAgICAgICAgIGRlZiBtKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnYycsICdjbGFzcyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgY2xhc3MgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgncCcsICdwcm9wZXJ0eScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20nLCAnbWV0aG9kJywgQikgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20xJywgJ21ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdkYXRhYmxvYicsICdkYXRhJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorICAgICAgICAiIiJKdXN0IGxpa2UgdGVzdF9jbGFzc2lmeV9vbGRzdHlsZSwgYnV0IGZvciBhIG5ldy1zdHlsZSBjbGFzcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NsYXNzaWZ5X3Rlc3QoVHJ1ZSkKIAogCi0gICAgICAgIGNsYXNzIEMoQSk6CiAKLSAgICAgICAgICAgIGRlZiBtKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgYyhzZWxmKTogcGFzcworY2xhc3MgVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoQykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdjJywgJ21ldGhvZCcsIEMpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdwJywgJ3Byb3BlcnR5JywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnbScsICdtZXRob2QnLCBDKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnbTEnLCAnbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgZGF0YScpCisgICAgIyB0dXBsZSBwYXJhbWV0ZXJzIGFyZSBuYW1lZCAnLjEnLCAnLjInLCBldGMuCisgICAgaXNfdHVwbGVuYW1lID0gcmUuY29tcGlsZShyJ15cLlxkKyQnKS5tYXRjaAogCi0gICAgICAgIGNsYXNzIEQoQiwgQyk6CisgICAgZGVmIGFzc2VydEVxdWFsQ2FsbEFyZ3Moc2VsZiwgZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzPU5vbmUpOgorICAgICAgICBsb2NzID0gZGljdChsb2NzIG9yIHt9LCBmdW5jPWZ1bmMpCisgICAgICAgIHIxID0gZXZhbCgnZnVuYyglcyknICUgY2FsbF9wYXJhbXNfc3RyaW5nLCBOb25lLCBsb2NzKQorICAgICAgICByMiA9IGV2YWwoJ2luc3BlY3QuZ2V0Y2FsbGFyZ3MoZnVuYywgJXMpJyAlIGNhbGxfcGFyYW1zX3N0cmluZywgTm9uZSwKKyAgICAgICAgICAgICAgICAgIGxvY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocjEsIHIyKQogCi0gICAgICAgICAgICBkZWYgbTEoc2VsZik6IHBhc3MKKyAgICBkZWYgYXNzZXJ0RXF1YWxFeGNlcHRpb24oc2VsZiwgZnVuYywgY2FsbF9wYXJhbV9zdHJpbmcsIGxvY3M9Tm9uZSk6CisgICAgICAgIGxvY3MgPSBkaWN0KGxvY3Mgb3Ige30sIGZ1bmM9ZnVuYykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZhbCgnZnVuYyglcyknICUgY2FsbF9wYXJhbV9zdHJpbmcsIE5vbmUsIGxvY3MpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGV4MToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhjZXB0aW9uIG5vdCByYWlzZWQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmFsKCdpbnNwZWN0LmdldGNhbGxhcmdzKGZ1bmMsICVzKScgJSBjYWxsX3BhcmFtX3N0cmluZywgTm9uZSwKKyAgICAgICAgICAgICAgICAgbG9jcykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXgyOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdFeGNlcHRpb24gbm90IHJhaXNlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShleDEpLCB0eXBlKGV4MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGV4MSksIHN0cihleDIpKQogCi0gICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhEKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ2MnLCAnbWV0aG9kJywgQykgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3AnLCAncHJvcGVydHknLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtJywgJ21ldGhvZCcsIEIpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtMScsICdtZXRob2QnLCBEKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnZGF0YWJsb2InLCAnZGF0YScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKKyAgICBkZWYgbWFrZUNhbGxhYmxlKHNlbGYsIHNpZ25hdHVyZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBpdHMgbG9jYWxzKCksIGV4Y2x1ZGluZyB0aGUKKyAgICAgICAgYXV0b2dlbmVyYXRlZCAnLjEnLCAnLjInLCBldGMuIHR1cGxlIHBhcmFtIG5hbWVzIChpZiBhbnkpLiIiIgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpLAorICAgICAgICAgICAgcXVpZXQ9VHJ1ZSk6CisgICAgICAgICAgICBjb2RlID0gKCJsYW1iZGEgJXM6IGRpY3QoaSBmb3IgaSBpbiBsb2NhbHMoKS5pdGVtcygpICIKKyAgICAgICAgICAgICAgICAgICAgImlmIG5vdCBpc190dXBsZW5hbWUoaVswXSkpIikKKyAgICAgICAgICAgIHJldHVybiBldmFsKGNvZGUgJSBzaWduYXR1cmUsIHsnaXNfdHVwbGVuYW1lJyA6IHNlbGYuaXNfdHVwbGVuYW1lfSkKKworICAgIGRlZiB0ZXN0X3BsYWluKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGI9MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYT0yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTMsIGE9MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgYj0zJykKKyAgICAgICAgIyBleHBhbmQgKml0ZXJhYmxlIC8gKiptYXBwaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKigyLCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJypbMl0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyooMiwgMyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJypbMiwgM10nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqeyJhIjoyfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYj0zLCAqKnsiYSI6Mn0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsICoqeyJiIjozfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKip7ImIiOjMsICJhIjoyfScpCisgICAgICAgICMgZXhwYW5kIFVzZXJMaXN0IC8gVXNlckRpY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqVXNlckxpc3QoWzJdKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKlVzZXJMaXN0KFsyLCAzXSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqVXNlckRpY3QoYT0yKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgKipVc2VyRGljdChiPTMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTIsICoqVXNlckRpY3QoYT0zKScpCisgICAgICAgICMgdW5pY29kZSBrZXl3b3JkIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKnt1ImEiOjJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTMsICoqe3UiYSI6Mn0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsICoqe3UiYiI6M30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqe3UiYiI6MywgdSJhIjoyfScpCisKKyAgICBkZWYgdGVzdF92YXJhcmdzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGI9MSwgKmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMsIDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyooMiwzLDQpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAqWzMsNF0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMsICpVc2VyTGlzdChbNF0pJykKKworICAgIGRlZiB0ZXN0X3Zhcmt3KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGI9MSwgKipjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdhPTInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIGI9MywgYz00JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTMsIGE9MiwgYz00JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdjPTQsICoqeyJhIjoyLCAiYiI6M30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIGM9NCwgKip7ImIiOjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTIsICoqeyJhIjozLCAiYyI6NH0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqVXNlckRpY3QoYT0yLCBiPTMsIGM9NCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIGM9NCwgKipVc2VyRGljdChiPTMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTIsICoqVXNlckRpY3QoYT0zLCBjPTQpJykKKyAgICAgICAgIyB1bmljb2RlIGtleXdvcmQgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2M9NCwgKip7dSJhIjoyLCB1ImIiOjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCBjPTQsICoqe3UiYiI6M30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MiwgKip7dSJhIjozLCB1ImMiOjR9JykKKworICAgIGRlZiB0ZXN0X3R1cGxlYXJncyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYubWFrZUNhbGxhYmxlKCcoYixjKSwgKGQsKGUsZikpPSgwLFsxLDJdKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKDIsMyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ1syLDNdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdVc2VyTGlzdChbMiwzXSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJygyLDMpLCAoNCwoNSw2KSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJygyLDMpLCAoNCxbNSw2XSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJygyLDMpLCBbNCxVc2VyTGlzdChbNSw2XSldJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2ZlYXR1cmVzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGI9MiwgKGMsKGQsZSkpPSgzLFs0LDVdKSwgKmYsICoqZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgKDQsWzUsNl0pLCA3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzLCAqWyg0LFs1LDZdKSwgN10sIHg9OCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgeD04LCAqWyg0LFs1LDZdKSwgN10nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIHg9OCwgKlszLCAoNCxbNSw2XSksIDddLCB5PTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ3g9OCwgKlsyLCAzLCAoNCxbNSw2XSldLCB5PTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ3g9OCwgKlVzZXJMaXN0KFsyLCAzLCAoNCxbNSw2XSldKSwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyoqeyJ5Ijo5LCAieiI6MTB9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCB4PTgsICpVc2VyTGlzdChbMywgKDQsWzUsNl0pXSksICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqKlVzZXJEaWN0KHk9OSwgej0xMCknKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBmMCA9IHNlbGYubWFrZUNhbGxhYmxlKCcnKQorICAgICAgICBmMSA9IHNlbGYubWFrZUNhbGxhYmxlKCdhLCBiJykKKyAgICAgICAgZjIgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0xJykKKyAgICAgICAgIyBmMCB0YWtlcyBubyBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMCwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYwLCAneD0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMCwgJzEseD0xJykKKyAgICAgICAgIyBmMSB0YWtlcyBleGFjdGx5IDIgYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjEsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYxLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjEsICdhPTInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYxLCAnYj0zJykKKyAgICAgICAgIyBmMiB0YWtlcyBhdCBsZWFzdCAxIGFyZ3VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjIsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYyLCAnYj0zJykKKyAgICAgICAgZm9yIGYgaW4gZjEsIGYyOgorICAgICAgICAgICAgIyBmMS9mMiB0YWtlcyBleGFjdGx5L2F0IG1vc3QgMiBhcmd1bWVudHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIDMsIDQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMSwgMiwgMywgYT0xJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIDMsIDQsIGM9NScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcyLCAzLCA0LCBhPTEsIGM9NScpCisgICAgICAgICAgICAjIGYgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnYz0yJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIGM9MycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcyLCAzLCBjPTQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMiwgYz00LCBiPTMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnKip7dSJcdTAzYzBcdTAzYjkiOiA0fScpCisgICAgICAgICAgICAjIGYgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMSwgYT0yJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzEsICoqeyJhIjoyfScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxLCAyLCBiPTMnKQorICAgICAgICAgICAgIyBYWFg6IFB5dGhvbiBpbmNvbnNpc3RlbmN5CisgICAgICAgICAgICAjIC0gZm9yIGZ1bmN0aW9ucyBhbmQgYm91bmQgbWV0aG9kczogdW5leHBlY3RlZCBrZXl3b3JkICdjJworICAgICAgICAgICAgIyAtIGZvciB1bmJvdW5kIG1ldGhvZHM6IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCAnYScKKyAgICAgICAgICAgICNzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxLCBjPTMsIGE9MicpCisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnKGEsYik9KDAsMSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnWzFdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnKDEsMiwzKScpCisKK2NsYXNzIFRlc3RHZXRjYWxsYXJnc01ldGhvZHMoVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2xzID0gRm9vCisgICAgICAgIHNlbGYuaW5zdCA9IEZvbygpCisKKyAgICBkZWYgbWFrZUNhbGxhYmxlKHNlbGYsIHNpZ25hdHVyZSk6CisgICAgICAgIGFzc2VydCAnc2VsZicgbm90IGluIHNpZ25hdHVyZQorICAgICAgICBtayA9IHN1cGVyKFRlc3RHZXRjYWxsYXJnc01ldGhvZHMsIHNlbGYpLm1ha2VDYWxsYWJsZQorICAgICAgICBzZWxmLmNscy5tZXRob2QgPSBtaygnc2VsZiwgJyArIHNpZ25hdHVyZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuaW5zdC5tZXRob2QKKworY2xhc3MgVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMoVGVzdEdldGNhbGxhcmdzTWV0aG9kcyk6CisKKyAgICBkZWYgbWFrZUNhbGxhYmxlKHNlbGYsIHNpZ25hdHVyZSk6CisgICAgICAgIHN1cGVyKFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzLCBzZWxmKS5tYWtlQ2FsbGFibGUoc2lnbmF0dXJlKQorICAgICAgICByZXR1cm4gc2VsZi5jbHMubWV0aG9kCisKKyAgICBkZWYgYXNzZXJ0RXF1YWxDYWxsQXJncyhzZWxmLCBmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3M9Tm9uZSk6CisgICAgICAgIHJldHVybiBzdXBlcihUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgc2VsZikuYXNzZXJ0RXF1YWxDYWxsQXJncygKKyAgICAgICAgICAgICpzZWxmLl9nZXRBc3NlcnRFcXVhbFBhcmFtcyhmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3MpKQorCisgICAgZGVmIGFzc2VydEVxdWFsRXhjZXB0aW9uKHNlbGYsIGZ1bmMsIGNhbGxfcGFyYW1zX3N0cmluZywgbG9jcz1Ob25lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzLCBzZWxmKS5hc3NlcnRFcXVhbEV4Y2VwdGlvbigKKyAgICAgICAgICAgICpzZWxmLl9nZXRBc3NlcnRFcXVhbFBhcmFtcyhmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3MpKQorCisgICAgZGVmIF9nZXRBc3NlcnRFcXVhbFBhcmFtcyhzZWxmLCBmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3M9Tm9uZSk6CisgICAgICAgIGFzc2VydCAnaW5zdCcgbm90IGluIGNhbGxfcGFyYW1zX3N0cmluZworICAgICAgICBsb2NzID0gZGljdChsb2NzIG9yIHt9LCBpbnN0PXNlbGYuaW5zdCkKKyAgICAgICAgcmV0dXJuIChmdW5jLCAnaW5zdCwnICsgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzKQogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3REZWNvcmF0b3JzLCBUZXN0UmV0cmlldmluZ1NvdXJjZUNvZGUsIFRlc3RPbmVsaW5lcnMsCi0gICAgICAgICAgICAgICAgIFRlc3RCdWdneUNhc2VzLAotICAgICAgICAgICAgICAgICBUZXN0SW50ZXJwcmV0ZXJTdGFjaywgVGVzdENsYXNzZXNBbmRGdW5jdGlvbnMsIFRlc3RQcmVkaWNhdGVzKQorICAgIHJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdERlY29yYXRvcnMsIFRlc3RSZXRyaWV2aW5nU291cmNlQ29kZSwgVGVzdE9uZWxpbmVycywgVGVzdEJ1Z2d5Q2FzZXMsCisgICAgICAgIFRlc3RJbnRlcnByZXRlclN0YWNrLCBUZXN0Q2xhc3Nlc0FuZEZ1bmN0aW9ucywgVGVzdFByZWRpY2F0ZXMsCisgICAgICAgIFRlc3RHZXRjYWxsYXJnc0Z1bmN0aW9ucywgVGVzdEdldGNhbGxhcmdzTWV0aG9kcywKKyAgICAgICAgVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW50LnB5IGIvTGliL3Rlc3QvdGVzdF9pbnQucHkKaW5kZXggNTFmZDE5NS4uZmE0NjIxMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbnQucHkKQEAgLTIsNiArMiw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBoYXZlX3VuaWNvZGUKK2ltcG9ydCBtYXRoCiAKIEwgPSBbCiAgICAgICAgICgnMCcsIDApLApAQCAtNzUsMTUgKzc2LDE1IEBACiAgICAgICAgIHMgPSByZXByKC0xLXN5cy5tYXhpbnQpCiAgICAgICAgIHggPSBpbnQocykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4KzEsIC1zeXMubWF4aW50KQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh4LCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgaW50KQogICAgICAgICAjIHNob3VsZCByZXR1cm4gbG9uZwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChzWzE6XSksIHN5cy5tYXhpbnQrMSkKIAogICAgICAgICAjIHNob3VsZCByZXR1cm4gbG9uZwogICAgICAgICB4ID0gaW50KDFlMTAwKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh4LCBsb25nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxvbmcpCiAgICAgICAgIHggPSBpbnQoLTFlMTAwKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh4LCBsb25nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxvbmcpCiAKIAogICAgICAgICAjIFNGIGJ1ZyA0MzQxODY6ICAweDgwMDAwMDAwLzIgIT0gMHg4MDAwMDAwMD4+MS4KQEAgLTEwMSwxMSArMTAyLDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzEyM1x4MDAgMjQ1JywgMjApCiAKICAgICAgICAgeCA9IGludCgnMScgKiA2MDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHgsIGxvbmcpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbG9uZykKIAogICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CiAgICAgICAgICAgICB4ID0gaW50KHVuaWNocigweDY2MSkgKiA2MDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh4LCBsb25nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBsb25nKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCAxLCAxMikKIApAQCAtMjQ2LDYgKzI0Nyw3NCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMmJyNDVxYycsIDM1KSwgNDI5NDk2NzI5N0wpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxejE0MXo1JywgMzYpLCA0Mjk0OTY3Mjk3TCkKIAorICAgIGRlZiB0ZXN0X2JpdF9sZW5ndGgoc2VsZik6CisgICAgICAgIHRpbnkgPSAxZS0xMAorICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoLTY1MDAwLCA2NTAwMCk6CisgICAgICAgICAgICBrID0geC5iaXRfbGVuZ3RoKCkKKyAgICAgICAgICAgICMgQ2hlY2sgZXF1aXZhbGVuY2Ugd2l0aCBQeXRob24gdmVyc2lvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBsZW4oYmluKHgpLmxzdHJpcCgnLTBiJykpKQorICAgICAgICAgICAgIyBCZWhhdmlvdXIgYXMgc3BlY2lmaWVkIGluIHRoZSBkb2NzCisgICAgICAgICAgICBpZiB4ICE9IDA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKihrLTEpIDw9IGFicyh4KSA8IDIqKmspCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgMCkKKyAgICAgICAgICAgICMgQWx0ZXJuYXRpdmUgZGVmaW5pdGlvbjogeC5iaXRfbGVuZ3RoKCkgPT0gMSArIGZsb29yKGxvZ18yKHgpKQorICAgICAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgICAgICMgV2hlbiB4IGlzIGFuIGV4YWN0IHBvd2VyIG9mIDIsIG51bWVyaWMgZXJyb3JzIGNhbgorICAgICAgICAgICAgICAgICMgY2F1c2UgZmxvb3IobG9nKHgpL2xvZygyKSkgdG8gYmUgb25lIHRvbyBzbWFsbDsgZm9yCisgICAgICAgICAgICAgICAgIyBzbWFsbCB4IHRoaXMgY2FuIGJlIGZpeGVkIGJ5IGFkZGluZyBhIHNtYWxsIHF1YW50aXR5CisgICAgICAgICAgICAgICAgIyB0byB0aGUgcXVvdGllbnQgYmVmb3JlIHRha2luZyB0aGUgZmxvb3IuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCAxICsgbWF0aC5mbG9vcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGgubG9nKGFicyh4KSkvbWF0aC5sb2coMikgKyB0aW55KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwKS5iaXRfbGVuZ3RoKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEpLmJpdF9sZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEpLmJpdF9sZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMikuYml0X2xlbmd0aCgpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMikuYml0X2xlbmd0aCgpLCAyKQorICAgICAgICBmb3IgaSBpbiBbMiwgMywgMTUsIDE2LCAxNywgMzEsIDMyLCAzMywgNjMsIDY0XToKKyAgICAgICAgICAgIGEgPSAyKippCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLTEpLmJpdF9sZW5ndGgoKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEtYSkuYml0X2xlbmd0aCgpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSkuYml0X2xlbmd0aCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtYSkuYml0X2xlbmd0aCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhKzEpLmJpdF9sZW5ndGgoKSwgaSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLWEtMSkuYml0X2xlbmd0aCgpLCBpKzEpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisgICAgZGVmIHRlc3RfZmxvYXRfY29udmVyc2lvbihzZWxmKToKKyAgICAgICAgIyB2YWx1ZXMgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGZsb2F0cworICAgICAgICBleGFjdF92YWx1ZXMgPSBbLTIsIC0xLCAwLCAxLCAyLCAyKio1MiwgMioqNTMtMSwgMioqNTMsIDIqKjUzKzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgMioqNTMrNCwgMioqNTQtNCwgMioqNTQtMiwgMioqNjMsIC0yKio2MywgMioqNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTIqKjY0LCAxMCoqMjAsIDEwKioyMSwgMTAqKjIyXQorICAgICAgICBmb3IgdmFsdWUgaW4gZXhhY3RfdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoaW50KHZhbHVlKSkpLCB2YWx1ZSkKKworICAgICAgICAjIHRlc3Qgcm91bmQtaGFsZi10by1ldmVuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjUzKzEpKSwgMioqNTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjUzKzIpKSwgMioqNTMrMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTMrMykpLCAyKio1Mys0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1Mys1KSksIDIqKjUzKzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjUzKzYpKSwgMioqNTMrNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTMrNykpLCAyKio1Mys4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KC0yKio1My0xKSksIC0yKio1MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoLTIqKjUzLTIpKSwgLTIqKjUzLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KC0yKio1My0zKSksIC0yKio1My00KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgtMioqNTMtNSkpLCAtMioqNTMtNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoLTIqKjUzLTYpKSwgLTIqKjUzLTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KC0yKio1My03KSksIC0yKio1My04KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0LTIpKSwgMioqNTQtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQtMSkpLCAyKio1NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQrMikpLCAyKio1NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQrMykpLCAyKio1NCs0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1NCs1KSksIDIqKjU0KzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0KzYpKSwgMioqNTQrOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQrMTApKSwgMioqNTQrOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQrMTEpKSwgMioqNTQrMTIpCisKICAgICBkZWYgdGVzdF9pbnRjb252ZXJzaW9uKHNlbGYpOgogICAgICAgICAjIFRlc3QgX19pbnRfXygpCiAgICAgICAgIGNsYXNzIENsYXNzaWNNaXNzaW5nTWV0aG9kczoKQEAgLTMyMyw3ICszOTIsNyBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgaW50KFRydW5jUmV0dXJuc05vbkludGVncmFsKCkpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZSksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX190cnVuY19fIHJldHVybmVkIG5vbi1JbnRlZ3JhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAodHlwZSBOb25JbnRlZ3JhbCkiKQogICAgICAgICAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvLnB5IGIvTGliL3Rlc3QvdGVzdF9pby5weQppbmRleCBlNzU3OTkyLi4wYmFkNTZkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW8ucHkKQEAgLTEsNCArMSwyNCBAQAotIiIiVW5pdCB0ZXN0cyBmb3IgaW8ucHkuIiIiCisiIiJVbml0IHRlc3RzIGZvciB0aGUgaW8gbW9kdWxlLiIiIgorCisjIFRlc3RzIG9mIGlvIGFyZSBzY2F0dGVyZWQgb3ZlciB0aGUgdGVzdCBzdWl0ZToKKyMgKiB0ZXN0X2J1ZmlvIC0gdGVzdHMgZmlsZSBidWZmZXJpbmcKKyMgKiB0ZXN0X21lbW9yeWlvIC0gdGVzdHMgQnl0ZXNJTyBhbmQgU3RyaW5nSU8KKyMgKiB0ZXN0X2ZpbGVpbyAtIHRlc3RzIEZpbGVJTworIyAqIHRlc3RfZmlsZSAtIHRlc3RzIHRoZSBmaWxlIGludGVyZmFjZQorIyAqIHRlc3RfaW8gLSB0ZXN0cyBldmVyeXRoaW5nIGVsc2UgaW4gdGhlIGlvIG1vZHVsZQorIyAqIHRlc3RfdW5pdm5ld2xpbmVzIC0gdGVzdHMgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydAorIyAqIHRlc3RfbGFyZ2VmaWxlIC0gdGVzdHMgb3BlcmF0aW9ucyBvbiBhIGZpbGUgZ3JlYXRlciB0aGFuIDIqKjMyIGJ5dGVzCisjICAgICAob25seSBlbmFibGVkIHdpdGggLXVsYXJnZWZpbGUpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFUVEVOVElPTiBURVNUIFdSSVRFUlMhISEKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdoZW4gd3JpdGluZyB0ZXN0cyBmb3IgaW8sIGl0J3MgaW1wb3J0YW50IHRvIHRlc3QgYm90aCB0aGUgQyBhbmQgUHl0aG9uCisjIGltcGxlbWVudGF0aW9ucy4gVGhpcyBpcyB1c3VhbGx5IGRvbmUgYnkgd3JpdGluZyBhIGJhc2UgdGVzdCB0aGF0IHJlZmVycyB0bworIyB0aGUgdHlwZSBpdCBpcyB0ZXN0aW5nIGFzIGEgYXR0cmlidXRlLiBUaGVuIGl0IHByb3ZpZGVzIGN1c3RvbSBzdWJjbGFzc2VzIHRvCisjIHRlc3QgYm90aCBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgZmlsZSBoYXMgbG90cyBvZiBleGFtcGxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwogCkBAIC02LDMwICsyNiw0NSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBhcnJheQotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IGFiYworaW1wb3J0IHNpZ25hbAoraW1wb3J0IGVycm5vCiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY3ljbGUsIGNvdW50Ci1mcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKIAogaW1wb3J0IGNvZGVjcwotaW1wb3J0IGlvICAjIFRoZSBtb2R1bGUgdW5kZXIgdGVzdAoraW1wb3J0IGlvICAjIEMgaW1wbGVtZW50YXRpb24gb2YgaW8KK2ltcG9ydCBfcHlpbyBhcyBweWlvICMgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGlvCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworX19tZXRhY2xhc3NfXyA9IHR5cGUKK2J5dGVzID0gc3VwcG9ydC5weTNrX2J5dGVzCisKK2RlZiBfZGVmYXVsdF9jaHVua19zaXplKCk6CisgICAgIiIiR2V0IHRoZSBkZWZhdWx0IFRleHRJT1dyYXBwZXIgY2h1bmsgc2l6ZSIiIgorICAgIHdpdGggaW8ub3BlbihfX2ZpbGVfXywgInIiLCBlbmNvZGluZz0ibGF0aW4xIikgYXMgZjoKKyAgICAgICAgcmV0dXJuIGYuX0NIVU5LX1NJWkUKIAogCi1jbGFzcyBNb2NrUmF3SU8oaW8uUmF3SU9CYXNlKToKK2NsYXNzIE1vY2tSYXdJT1dpdGhvdXRSZWFkOgorICAgICIiIkEgUmF3SU8gaW1wbGVtZW50YXRpb24gd2l0aG91dCByZWFkKCksIHNvIGFzIHRvIGV4ZXJjaXNlIHRoZSBkZWZhdWx0CisgICAgUmF3SU8ucmVhZCgpIHdoaWNoIGNhbGxzIHJlYWRpbnRvKCkuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhZF9zdGFjaz0oKSk6CiAgICAgICAgIHNlbGYuX3JlYWRfc3RhY2sgPSBsaXN0KHJlYWRfc3RhY2spCiAgICAgICAgIHNlbGYuX3dyaXRlX3N0YWNrID0gW10KLQotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3N0YWNrLnBvcCgwKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByZXR1cm4gYiIiCisgICAgICAgIHNlbGYuX3JlYWRzID0gMAorICAgICAgICBzZWxmLl9leHRyYW5lb3VzX3JlYWRzID0gMAogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgotICAgICAgICBzZWxmLl93cml0ZV9zdGFjay5hcHBlbmQoYls6XSkKKyAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2suYXBwZW5kKGJ5dGVzKGIpKQogICAgICAgICByZXR1cm4gbGVuKGIpCiAKICAgICBkZWYgd3JpdGFibGUoc2VsZik6CkBAIC00NSw0OSArODAsMTc2IEBACiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZSk6Ci0gICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIDAgICAjIHdyb25nIGJ1dCB3ZSBnb3R0YSByZXR1cm4gc29tZXRoaW5nCiAKICAgICBkZWYgdGVsbChzZWxmKToKLSAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIHJldHVybiAwICAgIyBzYW1lIGNvbW1lbnQgYXMgYWJvdmUKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBidWYpOgorICAgICAgICBzZWxmLl9yZWFkcyArPSAxCisgICAgICAgIG1heF9sZW4gPSBsZW4oYnVmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fcmVhZF9zdGFja1swXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhbmVvdXNfcmVhZHMgKz0gMQorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgZGVsIHNlbGYuX3JlYWRfc3RhY2tbMF0KKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIG4gPSBsZW4oZGF0YSkKKyAgICAgICAgaWYgbGVuKGRhdGEpIDw9IG1heF9sZW46CisgICAgICAgICAgICBkZWwgc2VsZi5fcmVhZF9zdGFja1swXQorICAgICAgICAgICAgYnVmWzpuXSA9IGRhdGEKKyAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWZbOl0gPSBkYXRhWzptYXhfbGVuXQorICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGFja1swXSA9IGRhdGFbbWF4X2xlbjpdCisgICAgICAgICAgICByZXR1cm4gbWF4X2xlbgorCisgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKKyAgICAgICAgcmV0dXJuIHBvcworCitjbGFzcyBDTW9ja1Jhd0lPV2l0aG91dFJlYWQoTW9ja1Jhd0lPV2l0aG91dFJlYWQsIGlvLlJhd0lPQmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQeU1vY2tSYXdJT1dpdGhvdXRSZWFkKE1vY2tSYXdJT1dpdGhvdXRSZWFkLCBweWlvLlJhd0lPQmFzZSk6CisgICAgcGFzcwogCiAKLWNsYXNzIE1vY2tGaWxlSU8oaW8uQnl0ZXNJTyk6CitjbGFzcyBNb2NrUmF3SU8oTW9ja1Jhd0lPV2l0aG91dFJlYWQpOgorCisgICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICAgICAgc2VsZi5fcmVhZHMgKz0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9zdGFjay5wb3AoMCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5fZXh0cmFuZW91c19yZWFkcyArPSAxCisgICAgICAgICAgICByZXR1cm4gYiIiCisKK2NsYXNzIENNb2NrUmF3SU8oTW9ja1Jhd0lPLCBpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworY2xhc3MgUHlNb2NrUmF3SU8oTW9ja1Jhd0lPLCBweWlvLlJhd0lPQmFzZSk6CisgICAgcGFzcworCisKK2NsYXNzIE1pc2JlaGF2ZWRSYXdJTyhNb2NrUmF3SU8pOgorICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgcmV0dXJuIE1vY2tSYXdJTy53cml0ZShzZWxmLCBiKSAqIDIKKworICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgICAgIHJldHVybiBNb2NrUmF3SU8ucmVhZChzZWxmLCBuKSAqIDIKKworICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlKToKKyAgICAgICAgcmV0dXJuIC0xMjMKKworICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICByZXR1cm4gLTQ1NgorCisgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGJ1Zik6CisgICAgICAgIE1vY2tSYXdJTy5yZWFkaW50byhzZWxmLCBidWYpCisgICAgICAgIHJldHVybiBsZW4oYnVmKSAqIDUKKworY2xhc3MgQ01pc2JlaGF2ZWRSYXdJTyhNaXNiZWhhdmVkUmF3SU8sIGlvLlJhd0lPQmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQeU1pc2JlaGF2ZWRSYXdJTyhNaXNiZWhhdmVkUmF3SU8sIHB5aW8uUmF3SU9CYXNlKToKKyAgICBwYXNzCisKKworY2xhc3MgQ2xvc2VGYWlsdXJlSU8oTW9ja1Jhd0lPKToKKyAgICBjbG9zZWQgPSAwCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gMQorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorCitjbGFzcyBDQ2xvc2VGYWlsdXJlSU8oQ2xvc2VGYWlsdXJlSU8sIGlvLlJhd0lPQmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQeUNsb3NlRmFpbHVyZUlPKENsb3NlRmFpbHVyZUlPLCBweWlvLlJhd0lPQmFzZSk6CisgICAgcGFzcworCisKK2NsYXNzIE1vY2tGaWxlSU86CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CiAgICAgICAgIHNlbGYucmVhZF9oaXN0b3J5ID0gW10KLSAgICAgICAgaW8uQnl0ZXNJTy5fX2luaXRfXyhzZWxmLCBkYXRhKQorICAgICAgICBzdXBlcihNb2NrRmlsZUlPLCBzZWxmKS5fX2luaXRfXyhkYXRhKQogCiAgICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgcmVzID0gaW8uQnl0ZXNJTy5yZWFkKHNlbGYsIG4pCisgICAgICAgIHJlcyA9IHN1cGVyKE1vY2tGaWxlSU8sIHNlbGYpLnJlYWQobikKICAgICAgICAgc2VsZi5yZWFkX2hpc3RvcnkuYXBwZW5kKE5vbmUgaWYgcmVzIGlzIE5vbmUgZWxzZSBsZW4ocmVzKSkKICAgICAgICAgcmV0dXJuIHJlcwogCisgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgorICAgICAgICByZXMgPSBzdXBlcihNb2NrRmlsZUlPLCBzZWxmKS5yZWFkaW50byhiKQorICAgICAgICBzZWxmLnJlYWRfaGlzdG9yeS5hcHBlbmQocmVzKQorICAgICAgICByZXR1cm4gcmVzCiAKLWNsYXNzIE1vY2tOb25CbG9ja1dyaXRlcklPKGlvLlJhd0lPQmFzZSk6CitjbGFzcyBDTW9ja0ZpbGVJTyhNb2NrRmlsZUlPLCBpby5CeXRlc0lPKToKKyAgICBwYXNzCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYmxvY2tpbmdfc2NyaXB0KToKLSAgICAgICAgc2VsZi5fYmxvY2tpbmdfc2NyaXB0ID0gbGlzdChibG9ja2luZ19zY3JpcHQpCitjbGFzcyBQeU1vY2tGaWxlSU8oTW9ja0ZpbGVJTywgcHlpby5CeXRlc0lPKToKKyAgICBwYXNzCisKKworY2xhc3MgTW9ja05vbkJsb2NrV3JpdGVySU86CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuX3dyaXRlX3N0YWNrID0gW10KKyAgICAgICAgc2VsZi5fYmxvY2tlcl9jaGFyID0gTm9uZQogCi0gICAgZGVmIHdyaXRlKHNlbGYsIGIpOgotICAgICAgICBzZWxmLl93cml0ZV9zdGFjay5hcHBlbmQoYls6XSkKLSAgICAgICAgbiA9IHNlbGYuX2Jsb2NraW5nX3NjcmlwdC5wb3AoMCkKLSAgICAgICAgaWYgKG4gPCAwKToKLSAgICAgICAgICAgIHJhaXNlIGlvLkJsb2NraW5nSU9FcnJvcigwLCAidGVzdCBibG9ja2luZyIsIC1uKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIG4KKyAgICBkZWYgcG9wX3dyaXR0ZW4oc2VsZik6CisgICAgICAgIHMgPSBiIiIuam9pbihzZWxmLl93cml0ZV9zdGFjaykKKyAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2tbOl0gPSBbXQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIGJsb2NrX29uKHNlbGYsIGNoYXIpOgorICAgICAgICAiIiJCbG9jayB3aGVuIGEgZ2l2ZW4gY2hhciBpcyBlbmNvdW50ZXJlZC4iIiIKKyAgICAgICAgc2VsZi5fYmxvY2tlcl9jaGFyID0gY2hhcgorCisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgogICAgICAgICByZXR1cm4gVHJ1ZQogCisgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICBiID0gYnl0ZXMoYikKKyAgICAgICAgbiA9IC0xCisgICAgICAgIGlmIHNlbGYuX2Jsb2NrZXJfY2hhcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuID0gYi5pbmRleChzZWxmLl9ibG9ja2VyX2NoYXIpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2Jsb2NrZXJfY2hhciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zdGFjay5hcHBlbmQoYls6bl0pCisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5CbG9ja2luZ0lPRXJyb3IoMCwgInRlc3QgYmxvY2tpbmciLCBuKQorICAgICAgICBzZWxmLl93cml0ZV9zdGFjay5hcHBlbmQoYikKKyAgICAgICAgcmV0dXJuIGxlbihiKQorCitjbGFzcyBDTW9ja05vbkJsb2NrV3JpdGVySU8oTW9ja05vbkJsb2NrV3JpdGVySU8sIGlvLlJhd0lPQmFzZSk6CisgICAgQmxvY2tpbmdJT0Vycm9yID0gaW8uQmxvY2tpbmdJT0Vycm9yCisKK2NsYXNzIFB5TW9ja05vbkJsb2NrV3JpdGVySU8oTW9ja05vbkJsb2NrV3JpdGVySU8sIHB5aW8uUmF3SU9CYXNlKToKKyAgICBCbG9ja2luZ0lPRXJyb3IgPSBweWlvLkJsb2NraW5nSU9FcnJvcgorCiAKIGNsYXNzIElPVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHdyaXRlX29wcyhzZWxmLCBmKToKLQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYiJibGFoLiIpLCA1KQogICAgICAgICBmLnRydW5jYXRlKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDUpCkBAIC0xMDcsMTAgKzI2OSw2IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRydW5jYXRlKDEyKSwgMTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDEzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYiJoaWoiKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCwxKSwgMTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDE2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudHJ1bmNhdGUoMTIpLCAxMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnNlZWssIDAuMCkKIAogICAgIGRlZiByZWFkX29wcyhzZWxmLCBmLCBidWZmZXJlZD1GYWxzZSk6CkBAIC0xMzMsMTAgKzI5MSw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKC02LCAxKSwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoNSksIGIiIHdvcmwiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxMCkKLSAgICAgICAgZi5zZWVrKDApCi0gICAgICAgIGYucmVhZCgyKQotICAgICAgICBmLnNlZWsoMCwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnNlZWssIDAuMCkKICAgICAgICAgaWYgYnVmZmVyZWQ6CiAgICAgICAgICAgICBmLnNlZWsoMCkKQEAgLTE2NCw2NyArMzE4LDcxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKC0xLCAyKSwgc2VsZi5MQVJHRSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMiksIGIieCIpCiAKKyAgICBkZWYgdGVzdF9pbnZhbGlkX29wZXJhdGlvbnMoc2VsZik6CisgICAgICAgICMgVHJ5IHdyaXRpbmcgb24gYSBmaWxlIG9wZW5lZCBpbiByZWFkIG1vZGUgYW5kIHZpY2UtdmVyc2EuCisgICAgICAgIGZvciBtb2RlIGluICgidyIsICJ3YiIpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIG1vZGUpIGFzIGZwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLnJlYWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZnAucmVhZGxpbmUpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLndyaXRlLCBiImJsYWgiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZnAud3JpdGVsaW5lcywgW2IiYmxhaFxuIl0pCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiciIpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZnAud3JpdGUsICJibGFoIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLndyaXRlbGluZXMsIFsiYmxhaFxuIl0pCisKICAgICBkZWYgdGVzdF9yYXdfZmlsZV9pbyhzZWxmKToKLSAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQotICAgICAgICBzZWxmLndyaXRlX29wcyhmKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIiwgYnVmZmVyaW5nPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQotICAgICAgICBzZWxmLnJlYWRfb3BzKGYpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi53cml0ZV9vcHMoZikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIsIGJ1ZmZlcmluZz0wKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRhYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYucmVhZF9vcHMoZikKIAogICAgIGRlZiB0ZXN0X2J1ZmZlcmVkX2ZpbGVfaW8oc2VsZik6Ci0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQotICAgICAgICBzZWxmLndyaXRlX29wcyhmKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRhYmxlKCksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCi0gICAgICAgIHNlbGYucmVhZF9vcHMoZiwgVHJ1ZSkKLSAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInIrYiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCi0gICAgICAgIHNlbGYud3JpdGVfb3BzKGYpCi0gICAgICAgIGYuc2VlaygwKQotICAgICAgICBzZWxmLnJlYWRfb3BzKGYsIFRydWUpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLndyaXRlX29wcyhmKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLnJlYWRfb3BzKGYsIFRydWUpCiAKICAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKLSAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgZi53cml0ZShiImFiY1xuZGVmXG54eXp6eVxuZm9vIikKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCBiImFiY1xuIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKDEwKSwgYiJkZWZcbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgyKSwgYiJ4eSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSg0KSwgYiJ6enlcbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCBiImZvbyIpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJhYmNcbmRlZlxueHl6enlcbmZvb1x4MDBiYXJcbmFub3RoZXIgbGluZSIpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksIGIiYWJjXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKDEwKSwgYiJkZWZcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoMiksIGIieHkiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKDQpLCBiInp6eVxuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCBiImZvb1x4MDBiYXJcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoTm9uZSksIGIiYW5vdGhlciBsaW5lIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkbGluZSwgNS4zKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRsaW5lLCA1LjMpCiAKICAgICBkZWYgdGVzdF9yYXdfYnl0ZXNfaW8oc2VsZik6Ci0gICAgICAgIGYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgZiA9IHNlbGYuQnl0ZXNJTygpCiAgICAgICAgIHNlbGYud3JpdGVfb3BzKGYpCiAgICAgICAgIGRhdGEgPSBmLmdldHZhbHVlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiImhlbGxvIHdvcmxkXG4iKQotICAgICAgICBmID0gaW8uQnl0ZXNJTyhkYXRhKQorICAgICAgICBmID0gc2VsZi5CeXRlc0lPKGRhdGEpCiAgICAgICAgIHNlbGYucmVhZF9vcHMoZiwgVHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2xhcmdlX2ZpbGVfb3BzKHNlbGYpOgogICAgICAgICAjIE9uIFdpbmRvd3MgYW5kIE1hYyBPU1ggdGhpcyB0ZXN0IGNvbXN1bWVzIGxhcmdlIHJlc291cmNlczsgSXQgdGFrZXMKICAgICAgICAgIyBhIGxvbmcgdGltZSB0byBidWlsZCB0aGUgPjJHQiBmaWxlIGFuZCB0YWtlcyA+MkdCIG9mIGRpc2sgc3BhY2UKICAgICAgICAgIyB0aGVyZWZvcmUgdGhlIHJlc291cmNlIG11c3QgYmUgZW5hYmxlZCB0byBydW4gdGhpcyB0ZXN0LgotICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicpIG9yIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgIGlmIG5vdCB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgibGFyZ2VmaWxlIik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicgb3Igc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgaWYgbm90IHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgibGFyZ2VmaWxlIik6CiAgICAgICAgICAgICAgICAgcHJpbnQoIlxuVGVzdGluZyBsYXJnZSBmaWxlIG9wcyBza2lwcGVkIG9uICVzLiIgJSBzeXMucGxhdGZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgIHByaW50KCJJdCByZXF1aXJlcyAlZCBieXRlcyBhbmQgYSBsb25nIHRpbWUuIiAlIHNlbGYuTEFSR0UsCkBAIC0yMzIsMjIgKzM5MCwyMCBAQAogICAgICAgICAgICAgICAgIHByaW50KCJVc2UgJ3JlZ3J0ZXN0LnB5IC11IGxhcmdlZmlsZSB0ZXN0X2lvJyB0byBydW4gaXQuIiwKICAgICAgICAgICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3K2IiLCAwKQotICAgICAgICBzZWxmLmxhcmdlX2ZpbGVfb3BzKGYpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidytiIikKLSAgICAgICAgc2VsZi5sYXJnZV9maWxlX29wcyhmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3K2IiLCAwKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5sYXJnZV9maWxlX29wcyhmKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIncrYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmxhcmdlX2ZpbGVfb3BzKGYpCiAKICAgICBkZWYgdGVzdF93aXRoX29wZW4oc2VsZik6CiAgICAgICAgIGZvciBidWZzaXplIGluICgwLCAxLCAxMDApOgogICAgICAgICAgICAgZiA9IE5vbmUKLSAgICAgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZzaXplKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZnNpemUpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZShiInh4eCIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2xvc2VkLCBUcnVlKQogICAgICAgICAgICAgZiA9IE5vbmUKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmc2l6ZSkgYXMgZjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmc2l6ZSkgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgMSAvLyAwCiAgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNsb3NlZCwgVHJ1ZSkKQEAgLTI1Niw2MCArNDEyLDEwNSBAQAogCiAgICAgIyBpc3N1ZSA1MDA4CiAgICAgZGVmIHRlc3RfYXBwZW5kX21vZGVfdGVsbChzZWxmKToKLSAgICAgICAgd2l0aCBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShiInh4eCIpCi0gICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiYWIiLCBidWZmZXJpbmc9MCkgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJhYiIsIGJ1ZmZlcmluZz0wKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMykKLSAgICAgICAgd2l0aCBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJhYiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiYWIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMykKLSAgICAgICAgd2l0aCBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJhIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhmLnRlbGwoKSA+IDApCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi50ZWxsKCkgPiAwKQogCiAgICAgZGVmIHRlc3RfZGVzdHJ1Y3RvcihzZWxmKToKICAgICAgICAgcmVjb3JkID0gW10KLSAgICAgICAgY2xhc3MgTXlGaWxlSU8oaW8uRmlsZUlPKToKKyAgICAgICAgY2xhc3MgTXlGaWxlSU8oc2VsZi5GaWxlSU8pOgogICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgxKQotICAgICAgICAgICAgICAgIGlvLkZpbGVJTy5fX2RlbF9fKHNlbGYpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmID0gc3VwZXIoTXlGaWxlSU8sIHNlbGYpLl9fZGVsX18KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmKCkKICAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDIpCi0gICAgICAgICAgICAgICAgaW8uRmlsZUlPLmNsb3NlKHNlbGYpCisgICAgICAgICAgICAgICAgc3VwZXIoTXlGaWxlSU8sIHNlbGYpLmNsb3NlKCkKICAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDMpCi0gICAgICAgICAgICAgICAgaW8uRmlsZUlPLmZsdXNoKHNlbGYpCi0gICAgICAgIGYgPSBNeUZpbGVJTyh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidyIpCi0gICAgICAgIGYud3JpdGUoInh4eCIpCisgICAgICAgICAgICAgICAgc3VwZXIoTXlGaWxlSU8sIHNlbGYpLmZsdXNoKCkKKyAgICAgICAgZiA9IE15RmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICBmLndyaXRlKGIieHh4IikKICAgICAgICAgZGVsIGYKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxLCAyLCAzXSkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiInh4eCIpCisKKyAgICBkZWYgX2NoZWNrX2Jhc2VfZGVzdHJ1Y3RvcihzZWxmLCBiYXNlKToKKyAgICAgICAgcmVjb3JkID0gW10KKyAgICAgICAgY2xhc3MgTXlJTyhiYXNlKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIFRoaXMgZXhlcmNpc2VzIHRoZSBhdmFpbGFiaWxpdHkgb2YgYXR0cmlidXRlcyBvbiBvYmplY3QKKyAgICAgICAgICAgICAgICAjIGRlc3RydWN0aW9uLgorICAgICAgICAgICAgICAgICMgKGluIHRoZSBDIHZlcnNpb24sIGNsb3NlKCkgaXMgY2FsbGVkIGJ5IHRoZSB0cF9kZWFsbG9jCisgICAgICAgICAgICAgICAgIyBmdW5jdGlvbiwgbm90IGJ5IF9fZGVsX18pCisgICAgICAgICAgICAgICAgc2VsZi5vbl9kZWwgPSAxCisgICAgICAgICAgICAgICAgc2VsZi5vbl9jbG9zZSA9IDIKKyAgICAgICAgICAgICAgICBzZWxmLm9uX2ZsdXNoID0gMworICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZChzZWxmLm9uX2RlbCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGYgPSBzdXBlcihNeUlPLCBzZWxmKS5fX2RlbF9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZChzZWxmLm9uX2Nsb3NlKQorICAgICAgICAgICAgICAgIHN1cGVyKE15SU8sIHNlbGYpLmNsb3NlKCkKKyAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKHNlbGYub25fZmx1c2gpCisgICAgICAgICAgICAgICAgc3VwZXIoTXlJTywgc2VsZikuZmx1c2goKQorICAgICAgICBmID0gTXlJTygpCisgICAgICAgIGRlbCBmCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkLCBbMSwgMiwgM10pCiAKLSAgICBkZWYgdGVzdF9jbG9zZV9mbHVzaGVzKHNlbGYpOgotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICBmLndyaXRlKGIieHh4IikKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIieHh4IikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgZGVmIHRlc3RfSU9CYXNlX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Jhc2VfZGVzdHJ1Y3RvcihzZWxmLklPQmFzZSkKIAotICAgIGRlZiBYWFh0ZXN0X2FycmF5X3dyaXRlcyhzZWxmKToKLSAgICAgICAgIyBYWFggbWVtb3J5IHZpZXcgbm90IGF2YWlsYWJsZSB5ZXQKLSAgICAgICAgYSA9IGFycmF5LmFycmF5KCdpJywgcmFuZ2UoMTApKQotICAgICAgICBuID0gbGVuKG1lbW9yeXZpZXcoYSkpCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZShhKSwgbikKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZShhKSwgbikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgZGVmIHRlc3RfUmF3SU9CYXNlX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Jhc2VfZGVzdHJ1Y3RvcihzZWxmLlJhd0lPQmFzZSkKKworICAgIGRlZiB0ZXN0X0J1ZmZlcmVkSU9CYXNlX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Jhc2VfZGVzdHJ1Y3RvcihzZWxmLkJ1ZmZlcmVkSU9CYXNlKQorCisgICAgZGVmIHRlc3RfVGV4dElPQmFzZV9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19iYXNlX2Rlc3RydWN0b3Ioc2VsZi5UZXh0SU9CYXNlKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmx1c2hlcyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIieHh4IikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiInh4eCIpCisKKyAgICBkZWYgdGVzdF9hcnJheV93cml0ZXMoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShiJ2knLCByYW5nZSgxMCkpCisgICAgICAgIG4gPSBsZW4oYS50b3N0cmluZygpKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgMCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZShhKSwgbikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYSksIG4pCiAKICAgICBkZWYgdGVzdF9jbG9zZWZkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpby5vcGVuLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYub3Blbiwgc3VwcG9ydC5URVNURk4sICd3JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VmZD1GYWxzZSkKIAotICAgIGRlZiB0ZXN0UmVhZENsb3NlZChzZWxmKToKLSAgICAgICAgd2l0aCBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3IikgYXMgZjoKKyAgICBkZWYgdGVzdF9yZWFkX2Nsb3NlZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoImVnZ1xuIikKLSAgICAgICAgd2l0aCBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGUgPSBpby5vcGVuKGYuZmlsZW5vKCksICJyIiwgY2xvc2VmZD1GYWxzZSkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIikgYXMgZjoKKyAgICAgICAgICAgIGZpbGUgPSBzZWxmLm9wZW4oZi5maWxlbm8oKSwgInIiLCBjbG9zZWZkPUZhbHNlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlLnJlYWQoKSwgImVnZ1xuIikKICAgICAgICAgICAgIGZpbGUuc2VlaygwKQogICAgICAgICAgICAgZmlsZS5jbG9zZSgpCkBAIC0zMTcsMTAwICs1MTgsMjYzIEBACiAKICAgICBkZWYgdGVzdF9ub19jbG9zZWZkX3dpdGhfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgICMgY2FuJ3QgdXNlIGNsb3NlZmQgaW4gY29tYmluYXRpb24gd2l0aCBhIGZpbGUgbmFtZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpby5vcGVuLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiciIsIGNsb3NlZmQ9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYub3Blbiwgc3VwcG9ydC5URVNURk4sICJyIiwgY2xvc2VmZD1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X2Nsb3NlZmRfYXR0cihzZWxmKToKLSAgICAgICAgd2l0aCBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShiImVnZ1xuIikKLSAgICAgICAgd2l0aCBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIucmF3LmNsb3NlZmQsIFRydWUpCi0gICAgICAgICAgICBmaWxlID0gaW8ub3BlbihmLmZpbGVubygpLCAiciIsIGNsb3NlZmQ9RmFsc2UpCisgICAgICAgICAgICBmaWxlID0gc2VsZi5vcGVuKGYuZmlsZW5vKCksICJyIiwgY2xvc2VmZD1GYWxzZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZS5idWZmZXIucmF3LmNsb3NlZmQsIEZhbHNlKQogCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIEZpbGVJTyBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcworICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCisgICAgICAgIGYgPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgZi53cml0ZShiImFiY3h4eCIpCisgICAgICAgIGYuZiA9IGYKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICBkZWwgZgorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiY3h4eCIpCisKKyAgICBkZWYgdGVzdF91bmJvdW5kZWRfZmlsZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTE3NDYwNjogcmVhZGluZyBmcm9tIGFuIHVuYm91bmRlZCBzdHJlYW0gc3VjaCBhcyAvZGV2L3plcm8uCisgICAgICAgIHplcm8gPSAiL2Rldi96ZXJvIgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoemVybyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ7MH0gZG9lcyBub3QgZXhpc3QiLmZvcm1hdCh6ZXJvKSkKKyAgICAgICAgaWYgc3lzLm1heHNpemUgPiAweDdGRkZGRkZGOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBjYW4gb25seSBydW4gaW4gYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSIpCisgICAgICAgIGlmIHN1cHBvcnQucmVhbF9tYXhfbWVtdXNlIDwgc3VwcG9ydC5fMkc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ0ZXN0IHJlcXVpcmVzIGF0IGxlYXN0IDJHQiBvZiBtZW1vcnkiKQorICAgICAgICB3aXRoIHNlbGYub3Blbih6ZXJvLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGYucmVhZCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oemVybywgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGYucmVhZCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oemVybywgInIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZi5yZWFkKQorCiAgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6Ci0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkKICAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgogICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCiAgICAgICAgIGYuZmx1c2ggPSBiYWRfZmx1c2gKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogCiAgICAgZGVmIHRlc3RfbXVsdGlfY2xvc2Uoc2VsZik6Ci0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5mbHVzaCkKIAorICAgIGRlZiB0ZXN0X1Jhd0lPQmFzZV9yZWFkKHNlbGYpOgorICAgICAgICAjIEV4ZXJjaXNlIHRoZSBkZWZhdWx0IFJhd0lPQmFzZS5yZWFkKCkgaW1wbGVtZW50YXRpb24gKHdoaWNoIGNhbGxzCisgICAgICAgICMgcmVhZGludG8oKSBpbnRlcm5hbGx5KS4KKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJT1dpdGhvdXRSZWFkKChiImFiYyIsIGIiZCIsIE5vbmUsIGIiZWZnIiwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgYiJhYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgYiJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5yZWFkKDIpLCBiImQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgYiJlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgYiJnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5yZWFkKDIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIGIiIikKIAotY2xhc3MgTWVtb3J5U2Vla1Rlc3RNaXhpbjoKK2NsYXNzIENJT1Rlc3QoSU9UZXN0KToKKyAgICBwYXNzCiAKLSAgICBkZWYgdGVzdEluaXQoc2VsZik6Ci0gICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCi0gICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQotCi0gICAgZGVmIHRlc3RSZWFkKHNlbGYpOgotICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQotICAgICAgICBieXRlc0lvID0gc2VsZi5pb2NsYXNzKGJ1ZikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWZbOjFdLCBieXRlc0lvLnJlYWQoMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJ1ZlsxOjVdLCBieXRlc0lvLnJlYWQoNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJ1Zls1Ol0sIGJ5dGVzSW8ucmVhZCg5MDApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLkVPRiwgYnl0ZXNJby5yZWFkKCkpCi0KLSAgICBkZWYgdGVzdFJlYWROb0FyZ3Moc2VsZik6Ci0gICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCi0gICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJ1ZiwgYnl0ZXNJby5yZWFkKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuRU9GLCBieXRlc0lvLnJlYWQoKSkKLQotICAgIGRlZiB0ZXN0U2VlayhzZWxmKToKLSAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKLSAgICAgICAgYnl0ZXNJbyA9IHNlbGYuaW9jbGFzcyhidWYpCi0KLSAgICAgICAgYnl0ZXNJby5yZWFkKDUpCi0gICAgICAgIGJ5dGVzSW8uc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWYsIGJ5dGVzSW8ucmVhZCgpKQotCi0gICAgICAgIGJ5dGVzSW8uc2VlaygzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWZbMzpdLCBieXRlc0lvLnJlYWQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBieXRlc0lvLnNlZWssIDAuMCkKLQotICAgIGRlZiB0ZXN0VGVsbChzZWxmKToKLSAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKLSAgICAgICAgYnl0ZXNJbyA9IHNlbGYuaW9jbGFzcyhidWYpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMCwgYnl0ZXNJby50ZWxsKCkpCi0gICAgICAgIGJ5dGVzSW8uc2Vlayg1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg1LCBieXRlc0lvLnRlbGwoKSkKLSAgICAgICAgYnl0ZXNJby5zZWVrKDEwMDAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMDAwMCwgYnl0ZXNJby50ZWxsKCkpCitjbGFzcyBQeUlPVGVzdChJT1Rlc3QpOgorICAgIHRlc3RfYXJyYXlfd3JpdGVzID0gdW5pdHRlc3Quc2tpcCgKKyAgICAgICAgImxlbihhcnJheS5hcnJheSkgcmV0dXJucyBudW1iZXIgb2YgZWxlbWVudHMgcmF0aGVyIHRoYW4gYnl0ZWxlbmd0aCIKKyAgICApKElPVGVzdC50ZXN0X2FycmF5X3dyaXRlcykKIAogCi1jbGFzcyBCeXRlc0lPVGVzdChNZW1vcnlTZWVrVGVzdE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBidWZ0eXBlKHMpOgotICAgICAgICByZXR1cm4gcy5lbmNvZGUoInV0Zi04IikKLSAgICBpb2NsYXNzID0gaW8uQnl0ZXNJTwotICAgIEVPRiA9IGIiIgorY2xhc3MgQ29tbW9uQnVmZmVyZWRUZXN0czoKKyAgICAjIFRlc3RzIGNvbW1vbiB0byBCdWZmZXJlZFJlYWRlciwgQnVmZmVyZWRXcml0ZXIgYW5kIEJ1ZmZlcmVkUmFuZG9tCisKKyAgICBkZWYgdGVzdF9kZXRhY2goc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmID0gc2VsZi50cChyYXcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYnVmLmRldGFjaCgpLCByYXcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1Zi5kZXRhY2gpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgYnVmaW8uZmlsZW5vKCkpCisKKyAgICBkZWYgdGVzdF9ub19maWxlbm8oc2VsZik6CisgICAgICAgICMgWFhYIHdpbGwgd2UgYWx3YXlzIGhhdmUgZmlsZW5vKCkgZnVuY3Rpb24/IElmIHNvLCBraWxsCisgICAgICAgICMgdGhpcyB0ZXN0LiBFbHNlLCB3cml0ZSBpdC4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAjIEludmFsaWQgd2hlbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLnNlZWssIDAsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5zZWVrLCAwLCAzKQorCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGVfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgdHAgPSBzZWxmLnRwCisgICAgICAgIHJlY29yZCA9IFtdCisgICAgICAgIGNsYXNzIE15QnVmZmVyZWRJTyh0cCk6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmID0gc3VwZXIoTXlCdWZmZXJlZElPLCBzZWxmKS5fX2RlbF9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgyKQorICAgICAgICAgICAgICAgIHN1cGVyKE15QnVmZmVyZWRJTywgc2VsZikuY2xvc2UoKQorICAgICAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMykKKyAgICAgICAgICAgICAgICBzdXBlcihNeUJ1ZmZlcmVkSU8sIHNlbGYpLmZsdXNoKCkKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gTXlCdWZmZXJlZElPKHJhd2lvKQorICAgICAgICB3cml0YWJsZSA9IGJ1ZmlvLndyaXRhYmxlKCkKKyAgICAgICAgZGVsIGJ1ZmlvCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIGlmIHdyaXRhYmxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxLCAyLCAzXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkLCBbMSwgMl0pCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgICMgVGVzdCB1c2FiaWxpdHkgYXMgYSBjb250ZXh0IG1hbmFnZXIKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgZGVmIF93aXRoKCk6CisgICAgICAgICAgICB3aXRoIGJ1ZmlvOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgX3dpdGgoKQorICAgICAgICAjIGJ1ZmlvIHNob3VsZCBub3cgYmUgY2xvc2VkLCBhbmQgdXNpbmcgaXQgYSBzZWNvbmQgdGltZSBzaG91bGQgcmFpc2UKKyAgICAgICAgIyBhIFZhbHVlRXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF93aXRoKQorCisgICAgZGVmIHRlc3RfZXJyb3JfdGhyb3VnaF9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZXhjZXB0aW9uIHN0YXRlIGlzIG5vdCBtb2RpZmllZCBieSBhIGRlc3RydWN0b3IsCisgICAgICAgICMgZXZlbiBpZiBjbG9zZSgpIGZhaWxzLgorICAgICAgICByYXdpbyA9IHNlbGYuQ2xvc2VGYWlsdXJlSU8oKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc2VsZi50cChyYXdpbykueHl6enkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmKQorICAgICAgICBzID0gcy5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgczoKKyAgICAgICAgICAgICMgVGhlIGRlc3RydWN0b3IgKm1heSogaGF2ZSBwcmludGVkIGFuIHVucmFpc2FibGUgZXJyb3IsIGNoZWNrIGl0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnNwbGl0bGluZXMoKSksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gSU9FcnJvcjogIiksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiIGlnbm9yZWQiKSwgcykKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYiA9IHNlbGYudHAocmF3KQorICAgICAgICBjbHNuYW1lID0gIiVzLiVzIiAlIChzZWxmLnRwLl9fbW9kdWxlX18sIHNlbGYudHAuX19uYW1lX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihiKSwgIjwlcz4iICUgY2xzbmFtZSkKKyAgICAgICAgcmF3Lm5hbWUgPSAiZHVtbXkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihiKSwgIjwlcyBuYW1lPXUnZHVtbXknPiIgJSBjbHNuYW1lKQorICAgICAgICByYXcubmFtZSA9IGIiZHVtbXkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihiKSwgIjwlcyBuYW1lPSdkdW1teSc+IiAlIGNsc25hbWUpCisKKyAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgcmF3LmZsdXNoID0gYmFkX2ZsdXNoCisgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorCisgICAgZGVmIHRlc3RfbXVsdGlfY2xvc2Uoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYiA9IHNlbGYudHAocmF3KQorICAgICAgICBiLmNsb3NlKCkKKyAgICAgICAgYi5jbG9zZSgpCisgICAgICAgIGIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiLmZsdXNoKQorCisgICAgZGVmIHRlc3RfcmVhZG9ubHlfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWYgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgeCA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcikpOgorICAgICAgICAgICAgYnVmLnJhdyA9IHgKIAogCi1jbGFzcyBTdHJpbmdJT1Rlc3QoTWVtb3J5U2Vla1Rlc3RNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGJ1ZnR5cGUgPSBzdHIKLSAgICBpb2NsYXNzID0gaW8uU3RyaW5nSU8KLSAgICBFT0YgPSAiIgorY2xhc3MgQnVmZmVyZWRSZWFkZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBDb21tb25CdWZmZXJlZFRlc3RzKToKKyAgICByZWFkX21vZGUgPSAicmIiCiAKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTyhbYiJhYmMiXSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBidWZpby5fX2luaXRfXyhyYXdpbykKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8sIGJ1ZmZlcl9zaXplPTEwMjQpCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvLCBidWZmZXJfc2l6ZT0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiYyIsIGJ1ZmlvLnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPS0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMSkKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTyhbYiJhYmMiXSkKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiLCBidWZpby5yZWFkKCkpCiAKLWNsYXNzIEJ1ZmZlcmVkUmVhZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgZm9yIGFyZyBpbiAoTm9uZSwgNyk6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjZGVmZyIsIGJ1ZmlvLnJlYWQoYXJnKSkKKyAgICAgICAgIyBJbnZhbGlkIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ucmVhZCwgLTIpCiAKLSAgICBkZWYgdGVzdFJlYWQoc2VsZik6Ci0gICAgICAgIHJhd2lvID0gTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCi0gICAgICAgIGJ1ZmlvID0gaW8uQnVmZmVyZWRSZWFkZXIocmF3aW8pCisgICAgZGVmIHRlc3RfcmVhZDEoc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYSIsIGJ1ZmlvLnJlYWQoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJiIiwgYnVmaW8ucmVhZDEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8uX3JlYWRzLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYyIsIGJ1ZmlvLnJlYWQxKDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8uX3JlYWRzLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZCIsIGJ1ZmlvLnJlYWQxKDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8uX3JlYWRzLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZWZnIiwgYnVmaW8ucmVhZDEoMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fcmVhZHMsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLCBidWZpby5yZWFkMSgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9yZWFkcywgNCkKKyAgICAgICAgIyBJbnZhbGlkIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ucmVhZDEsIC0xKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiYWJjZGVmIiwgYnVmaW8ucmVhZCg2KSkKKyAgICBkZWYgdGVzdF9yZWFkaW50byhzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgIGIgPSBieXRlYXJyYXkoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50byhiKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImFiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50byhiKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImNkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50byhiKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50byhiKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImdmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50byhiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImdmIikKIAotICAgIGRlZiB0ZXN0QnVmZmVyaW5nKHNlbGYpOgorICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgZGVmIGJ1ZmlvKCk6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiY1xuIiwgYiJkXG4iLCBiImVmIikpCisgICAgICAgICAgICByZXR1cm4gc2VsZi50cChyYXdpbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpbygpLnJlYWRsaW5lcygpLCBbYiJhYmNcbiIsIGIiZFxuIiwgYiJlZiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvKCkucmVhZGxpbmVzKDUpLCBbYiJhYmNcbiIsIGIiZFxuIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8oKS5yZWFkbGluZXMoTm9uZSksIFtiImFiY1xuIiwgYiJkXG4iLCBiImVmIl0pCisKKyAgICBkZWYgdGVzdF9idWZmZXJpbmcoc2VsZik6CiAgICAgICAgIGRhdGEgPSBiImFiY2RlZmdoaSIKICAgICAgICAgZGxlbiA9IGxlbihkYXRhKQogCkBAIC00MjEsNjEgKzc4NSw1NCBAQAogICAgICAgICBdCiAKICAgICAgICAgZm9yIGJ1ZnNpemUsIGJ1Zl9yZWFkX3NpemVzLCByYXdfcmVhZF9zaXplcyBpbiB0ZXN0czoKLSAgICAgICAgICAgIHJhd2lvID0gTW9ja0ZpbGVJTyhkYXRhKQotICAgICAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFJlYWRlcihyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZSkKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrRmlsZUlPKGRhdGEpCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUpCiAgICAgICAgICAgICBwb3MgPSAwCiAgICAgICAgICAgICBmb3IgbmJ5dGVzIGluIGJ1Zl9yZWFkX3NpemVzOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJ1ZmlvLnJlYWQobmJ5dGVzKSwgZGF0YVtwb3M6cG9zK25ieXRlc10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkKG5ieXRlcyksIGRhdGFbcG9zOnBvcytuYnl0ZXNdKQogICAgICAgICAgICAgICAgIHBvcyArPSBuYnl0ZXMKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJhd2lvLnJlYWRfaGlzdG9yeSwgcmF3X3JlYWRfc2l6ZXMpCisgICAgICAgICAgICAjIHRoaXMgaXMgbWlsZGx5IGltcGxlbWVudGF0aW9uLWRlcGVuZGVudAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5yZWFkX2hpc3RvcnksIHJhd19yZWFkX3NpemVzKQogCi0gICAgZGVmIHRlc3RSZWFkTm9uQmxvY2tpbmcoc2VsZik6CisgICAgZGVmIHRlc3RfcmVhZF9ub25fYmxvY2tpbmcoc2VsZik6CiAgICAgICAgICMgSW5qZWN0IHNvbWUgTm9uZSdzIGluIHRoZXJlIHRvIHNpbXVsYXRlIEVXT1VMREJMT0NLCi0gICAgICAgIHJhd2lvID0gTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIE5vbmUsIGIiZWZnIiwgTm9uZSwgTm9uZSkpCi0gICAgICAgIGJ1ZmlvID0gaW8uQnVmZmVyZWRSZWFkZXIocmF3aW8pCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKGIiYWJjIiwgYiJkIiwgTm9uZSwgYiJlZmciLCBOb25lLCBOb25lLCBOb25lKSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiYWJjZCIsIGJ1ZmlvLnJlYWQoNikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiZSIsIGJ1ZmlvLnJlYWQoMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiZmciLCBidWZpby5yZWFkKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhOb25lIGlzIGJ1ZmlvLnJlYWQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiIiLCBidWZpby5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmNkIiwgYnVmaW8ucmVhZCg2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImUiLCBidWZpby5yZWFkKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZmciLCBidWZpby5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLCBidWZpby5wZWVrKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTm9uZSBpcyBidWZpby5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLCBidWZpby5yZWFkKCkpCiAKLSAgICBkZWYgdGVzdFJlYWRUb0VvZihzZWxmKToKLSAgICAgICAgcmF3aW8gPSBNb2NrUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKLSAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFJlYWRlcihyYXdpbykKKyAgICBkZWYgdGVzdF9yZWFkX3Bhc3RfZW9mKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFiY2RlZmciLCBidWZpby5yZWFkKDkwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjZGVmZyIsIGJ1ZmlvLnJlYWQoOTAwMCkpCiAKLSAgICBkZWYgdGVzdFJlYWROb0FyZ3Moc2VsZik6Ci0gICAgICAgIHJhd2lvID0gTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCi0gICAgICAgIGJ1ZmlvID0gaW8uQnVmZmVyZWRSZWFkZXIocmF3aW8pCisgICAgZGVmIHRlc3RfcmVhZF9hbGwoc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiYWJjZGVmZyIsIGJ1ZmlvLnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiY2RlZmciLCBidWZpby5yZWFkKCkpCiAKLSAgICBkZWYgdGVzdEZpbGVubyhzZWxmKToKLSAgICAgICAgcmF3aW8gPSBNb2NrUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKLSAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFJlYWRlcihyYXdpbykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0MiwgYnVmaW8uZmlsZW5vKCkpCi0KLSAgICBkZWYgdGVzdEZpbGVub05vRmlsZW5vKHNlbGYpOgotICAgICAgICAjIFhYWCB3aWxsIHdlIGFsd2F5cyBoYXZlIGZpbGVubygpIGZ1bmN0aW9uPyBJZiBzbywga2lsbAotICAgICAgICAjIHRoaXMgdGVzdC4gRWxzZSwgd3JpdGUgaXQuCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiB0ZXN0VGhyZWFkcyhzZWxmKToKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX3Jlc291cmNlKCdjcHUnKQorICAgIGRlZiB0ZXN0X3RocmVhZHMoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgV3JpdGUgb3V0IG1hbnkgYnl0ZXMgd2l0aCBleGFjdGx5IHRoZSBzYW1lIG51bWJlciBvZiAwJ3MsCiAgICAgICAgICAgICAjIDEncy4uLiAyNTUncy4gVGhpcyB3aWxsIGhlbHAgdXMgY2hlY2sgdGhhdCBjb25jdXJyZW50IHJlYWRpbmcKICAgICAgICAgICAgICMgZG9lc24ndCBkdXBsaWNhdGUgb3IgZm9yZ2V0IGNvbnRlbnRzLgogICAgICAgICAgICAgTiA9IDEwMDAKLSAgICAgICAgICAgIGwgPSByYW5nZSgyNTYpICogTgorICAgICAgICAgICAgbCA9IGxpc3QocmFuZ2UoMjU2KSkgKiBOCiAgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShsKQogICAgICAgICAgICAgcyA9IGJ5dGVzKGJ5dGVhcnJheShsKSkKLSAgICAgICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZShzKQotICAgICAgICAgICAgd2l0aCBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIsIGJ1ZmZlcmluZz0wKSBhcyByYXc6Ci0gICAgICAgICAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFJlYWRlcihyYXcsIDgpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5yZWFkX21vZGUsIGJ1ZmZlcmluZz0wKSBhcyByYXc6CisgICAgICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdywgOCkKICAgICAgICAgICAgICAgICBlcnJvcnMgPSBbXQogICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBbXQogICAgICAgICAgICAgICAgIGRlZiBmKCk6CkBAIC01MDMsODIgKzg2MCwyNjUgQEAKICAgICAgICAgICAgICAgICAgICAgYyA9IGJ5dGVzKGJ5dGVhcnJheShbaV0pKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoYyksIE4pCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5NaXNiZWhhdmVkUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5zZWVrLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby50ZWxsKQorCisgICAgZGVmIHRlc3Rfbm9fZXh0cmFuZW91c19yZWFkKHNlbGYpOgorICAgICAgICAjIElzc3VlICM5NTUwOyB3aGVuIHRoZSByYXcgSU8gb2JqZWN0IGhhcyBzYXRpc2ZpZWQgdGhlIHJlYWQgcmVxdWVzdCwKKyAgICAgICAgIyB3ZSBzaG91bGQgbm90IGlzc3VlIGFueSBhZGRpdGlvbmFsIHJlYWRzLCBvdGhlcndpc2UgaXQgbWF5IGJsb2NrCisgICAgICAgICMgKGUuZy4gc29ja2V0KS4KKyAgICAgICAgYnVmc2l6ZSA9IDE2CisgICAgICAgIGZvciBuIGluICgyLCBidWZzaXplIC0gMSwgYnVmc2l6ZSwgYnVmc2l6ZSArIDEsIGJ1ZnNpemUgKiAyKToKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oW2IieCIgKiBuXSkKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZChuKSwgYiJ4IiAqIG4pCisgICAgICAgICAgICAjIFNpbXBsZSBjYXNlOiBvbmUgcmF3IHJlYWQgaXMgZW5vdWdoIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9leHRyYW5lb3VzX3JlYWRzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIGZvciB7fToge30gIT0gMCIuZm9ybWF0KG4sIHJhd2lvLl9leHRyYW5lb3VzX3JlYWRzKSkKKyAgICAgICAgICAgICMgQSBtb3JlIGNvbXBsZXggY2FzZSB3aGVyZSB0d28gcmF3IHJlYWRzIGFyZSBuZWVkZWQgdG8gc2F0aXNmeQorICAgICAgICAgICAgIyB0aGUgcmVxdWVzdC4KKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oW2IieCIgKiAobiAtIDEpLCBiIngiXSkKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZChuKSwgYiJ4IiAqIG4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9leHRyYW5lb3VzX3JlYWRzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIGZvciB7fToge30gIT0gMCIuZm9ybWF0KG4sIHJhd2lvLl9leHRyYW5lb3VzX3JlYWRzKSkKIAogCitjbGFzcyBDQnVmZmVyZWRSZWFkZXJUZXN0KEJ1ZmZlcmVkUmVhZGVyVGVzdCk6CisgICAgdHAgPSBpby5CdWZmZXJlZFJlYWRlcgogCi1jbGFzcyBCdWZmZXJlZFdyaXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBCdWZmZXJlZFJlYWRlclRlc3QudGVzdF9jb25zdHJ1Y3RvcihzZWxmKQorICAgICAgICAjIFRoZSBhbGxvY2F0aW9uIGNhbiBzdWNjZWVkIG9uIDMyLWJpdCBidWlsZHMsIGUuZy4gd2l0aCBtb3JlCisgICAgICAgICMgdGhhbiAyR0IgUkFNIGFuZCBhIDY0LWJpdCBrZXJuZWwuCisgICAgICAgIGlmIHN5cy5tYXhzaXplID4gMHg3RkZGRkZGRjoKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIE1lbW9yeUVycm9yLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgICAgICAgICBidWZpby5fX2luaXRfXywgcmF3aW8sIHN5cy5tYXhzaXplKQogCi0gICAgZGVmIHRlc3RXcml0ZShzZWxmKToKKyAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTyhbYiJhYmMiXSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9LTE2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPS0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5yZWFkKQorCisgICAgZGVmIHRlc3RfbWlzYmVoYXZlZF9pb19yZWFkKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgIyBfcHlpby5CdWZmZXJlZFJlYWRlciBzZWVtcyB0byBpbXBsZW1lbnQgcmVhZGluZyBkaWZmZXJlbnQsIHNvIHRoYXQKKyAgICAgICAgIyBjaGVja2luZyB0aGlzIGlzIG5vdCBzbyBlYXN5LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5yZWFkLCAxMCkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBDIEJ1ZmZlcmVkUmVhZGVyIG9iamVjdHMgYXJlIGNvbGxlY3RlZC4KKyAgICAgICAgIyBUaGUgUHl0aG9uIHZlcnNpb24gaGFzIF9fZGVsX18sIHNvIGl0IGVuZHMgaW50byBnYy5nYXJiYWdlIGluc3RlYWQKKyAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCisgICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBmLmYgPSBmCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgZGVsIGYKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisKK2NsYXNzIFB5QnVmZmVyZWRSZWFkZXJUZXN0KEJ1ZmZlcmVkUmVhZGVyVGVzdCk6CisgICAgdHAgPSBweWlvLkJ1ZmZlcmVkUmVhZGVyCisKKworY2xhc3MgQnVmZmVyZWRXcml0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBDb21tb25CdWZmZXJlZFRlc3RzKToKKyAgICB3cml0ZV9tb2RlID0gIndiIgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvKQorICAgICAgICBidWZpby5fX2luaXRfXyhyYXdpbywgYnVmZmVyX3NpemU9MTAyNCkKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8sIGJ1ZmZlcl9zaXplPTE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGJ1ZmlvLndyaXRlKGIiYWJjIikpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPS0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMSkKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgYnVmaW8ud3JpdGUoYiJnaGkiKSkKKyAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIi5qb2luKHJhd2lvLl93cml0ZV9zdGFjayksIGIiYWJjZ2hpIikKKworICAgIGRlZiB0ZXN0X2RldGFjaF9mbHVzaChzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWYgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgYnVmLndyaXRlKGIiaG93ZHkhIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyYXcuX3dyaXRlX3N0YWNrKQorICAgICAgICBidWYuZGV0YWNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuX3dyaXRlX3N0YWNrLCBbYiJob3dkeSEiXSkKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgogICAgICAgICAjIFdyaXRlIHRvIHRoZSBidWZmZXJlZCBJTyBidXQgZG9uJ3Qgb3ZlcmZsb3cgdGhlIGJ1ZmZlci4KLSAgICAgICAgd3JpdGVyID0gTW9ja1Jhd0lPKCkKLSAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFdyaXRlcih3cml0ZXIsIDgpCi0KKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAod3JpdGVyLCA4KQogICAgICAgICBidWZpby53cml0ZShiImFiYyIpCi0KICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3cml0ZXIuX3dyaXRlX3N0YWNrKQogCi0gICAgZGVmIHRlc3RXcml0ZU92ZXJmbG93KHNlbGYpOgotICAgICAgICB3cml0ZXIgPSBNb2NrUmF3SU8oKQotICAgICAgICBidWZpbyA9IGlvLkJ1ZmZlcmVkV3JpdGVyKHdyaXRlciwgOCkKKyAgICBkZWYgdGVzdF93cml0ZV9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAod3JpdGVyLCA4KQorICAgICAgICBjb250ZW50cyA9IGIiYWJjZGVmZ2hpamtsbW5vcCIKKyAgICAgICAgZm9yIG4gaW4gcmFuZ2UoMCwgbGVuKGNvbnRlbnRzKSwgMyk6CisgICAgICAgICAgICBidWZpby53cml0ZShjb250ZW50c1tuOm4rM10pCisgICAgICAgIGZsdXNoZWQgPSBiIiIuam9pbih3cml0ZXIuX3dyaXRlX3N0YWNrKQorICAgICAgICAjIEF0IGxlYXN0ICh0b3RhbCAtIDgpIGJ5dGVzIHdlcmUgaW1wbGljaXRseSBmbHVzaGVkLCBwZXJoYXBzIG1vcmUKKyAgICAgICAgIyBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmx1c2hlZC5zdGFydHN3aXRoKGNvbnRlbnRzWzotOF0pLCBmbHVzaGVkKQogCi0gICAgICAgIGJ1ZmlvLndyaXRlKGIiYWJjIikKLSAgICAgICAgYnVmaW8ud3JpdGUoYiJkZWZnaGlqa2wiKQorICAgIGRlZiBjaGVja193cml0ZXMoc2VsZiwgaW50ZXJtZWRpYXRlX2Z1bmMpOgorICAgICAgICAjIExvdHMgb2Ygd3JpdGVzLCB0ZXN0IHRoZSBmbHVzaGVkIG91dHB1dCBpcyBhcyBleHBlY3RlZC4KKyAgICAgICAgY29udGVudHMgPSBieXRlcyhyYW5nZSgyNTYpKSAqIDEwMDAKKyAgICAgICAgbiA9IDAKKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAod3JpdGVyLCAxMykKKyAgICAgICAgIyBHZW5lcmF0b3Igb2Ygd3JpdGUgc2l6ZXM6IHJlcGVhdCBlYWNoIE4gMTUgdGltZXMgdGhlbiBwcm9jZWVkIHRvIE4rMQorICAgICAgICBkZWYgZ2VuX3NpemVzKCk6CisgICAgICAgICAgICBmb3Igc2l6ZSBpbiBjb3VudCgxKToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxNSk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNpemUKKyAgICAgICAgc2l6ZXMgPSBnZW5fc2l6ZXMoKQorICAgICAgICB3aGlsZSBuIDwgbGVuKGNvbnRlbnRzKToKKyAgICAgICAgICAgIHNpemUgPSBtaW4obmV4dChzaXplcyksIGxlbihjb250ZW50cykgLSBuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShjb250ZW50c1tuOm4rc2l6ZV0pLCBzaXplKQorICAgICAgICAgICAgaW50ZXJtZWRpYXRlX2Z1bmMoYnVmaW8pCisgICAgICAgICAgICBuICs9IHNpemUKKyAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLAorICAgICAgICAgICAgYiIiLmpvaW4od3JpdGVyLl93cml0ZV9zdGFjaykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiJhYmNkZWZnaGlqa2wiLCB3cml0ZXIuX3dyaXRlX3N0YWNrWzBdKQorICAgIGRlZiB0ZXN0X3dyaXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMobGFtYmRhIGJ1ZmlvOiBOb25lKQogCi0gICAgZGVmIHRlc3RXcml0ZU5vbkJsb2NraW5nKHNlbGYpOgotICAgICAgICByYXcgPSBNb2NrTm9uQmxvY2tXcml0ZXJJTygoOSwgMiwgMTAsIC02LCAxMCwgOCwgMTIpKQotICAgICAgICBidWZpbyA9IGlvLkJ1ZmZlcmVkV3JpdGVyKHJhdywgOCwgMTYpCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF9mbHVzaGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyaXRlcyhsYW1iZGEgYnVmaW86IGJ1ZmlvLmZsdXNoKCkpCiAKLSAgICAgICAgYnVmaW8ud3JpdGUoYiJhc2RmIikKLSAgICAgICAgYnVmaW8ud3JpdGUoYiJhc2RmYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiYXNkZmFzZGZhIiwgcmF3Ll93cml0ZV9zdGFja1swXSkKKyAgICBkZWYgdGVzdF93cml0ZXNfYW5kX3NlZWtzKHNlbGYpOgorICAgICAgICBkZWYgX3NlZWthYnMoYnVmaW8pOgorICAgICAgICAgICAgcG9zID0gYnVmaW8udGVsbCgpCisgICAgICAgICAgICBidWZpby5zZWVrKHBvcyArIDEsIDApCisgICAgICAgICAgICBidWZpby5zZWVrKHBvcyAtIDEsIDApCisgICAgICAgICAgICBidWZpby5zZWVrKHBvcywgMCkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3NlZWthYnMpCisgICAgICAgIGRlZiBfc2Vla3JlbChidWZpbyk6CisgICAgICAgICAgICBwb3MgPSBidWZpby5zZWVrKDAsIDEpCisgICAgICAgICAgICBidWZpby5zZWVrKCsxLCAxKQorICAgICAgICAgICAgYnVmaW8uc2VlaygtMSwgMSkKKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsocG9zLCAwKQorICAgICAgICBzZWxmLmNoZWNrX3dyaXRlcyhfc2Vla3JlbCkKIAotICAgICAgICBidWZpby53cml0ZShiImFzZGZhc2RmYXNkZiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiYXNkZmFzZGZhc2RmIiwgcmF3Ll93cml0ZV9zdGFja1sxXSkKLSAgICAgICAgYnVmaW8ud3JpdGUoYiJhc2RmYXNkZmFzZGYiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImRmYXNkZmFzZGYiLCByYXcuX3dyaXRlX3N0YWNrWzJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFzZGZhc2RmYXNkZiIsIHJhdy5fd3JpdGVfc3RhY2tbM10pCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF90cnVuY2F0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKGxhbWJkYSBidWZpbzogYnVmaW8udHJ1bmNhdGUoYnVmaW8udGVsbCgpKSkKIAotICAgICAgICBidWZpby53cml0ZShiImFzZGZhc2RmYXNkZiIpCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9uX2Jsb2NraW5nKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tOb25CbG9ja1dyaXRlcklPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdywgOCkKIAotICAgICAgICAjIFhYWCBJIGRvbid0IGxpa2UgdGhpcyB0ZXN0LiBJdCByZWxpZXMgdG9vIGhlYXZpbHkgb24gaG93IHRoZQotICAgICAgICAjIGFsZ29yaXRobSBhY3R1YWxseSB3b3Jrcywgd2hpY2ggd2UgbWlnaHQgY2hhbmdlLiBSZWZhY3RvcgotICAgICAgICAjIGxhdGVyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiYWJjZCIpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiZWZnaGkiKSwgNSkKKyAgICAgICAgIyAxIGJ5dGUgd2lsbCBiZSB3cml0dGVuLCB0aGUgcmVzdCB3aWxsIGJlIGJ1ZmZlcmVkCisgICAgICAgIHJhdy5ibG9ja19vbihiImsiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiamtsbW4iKSwgNSkKIAotICAgIGRlZiB0ZXN0RmlsZW5vKHNlbGYpOgotICAgICAgICByYXdpbyA9IE1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQotICAgICAgICBidWZpbyA9IGlvLkJ1ZmZlcmVkV3JpdGVyKHJhd2lvKQorICAgICAgICAjIDggYnl0ZXMgd2lsbCBiZSB3cml0dGVuLCA4IHdpbGwgYmUgYnVmZmVyZWQgYW5kIHRoZSByZXN0IHdpbGwgYmUgbG9zdAorICAgICAgICByYXcuYmxvY2tfb24oYiIwIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnVmaW8ud3JpdGUoYiJvcHFyd3h5ejAxMjM0NTY3ODkiKQorICAgICAgICBleGNlcHQgc2VsZi5CbG9ja2luZ0lPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHdyaXR0ZW4gPSBlLmNoYXJhY3RlcnNfd3JpdHRlbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJCbG9ja2luZ0lPRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXR0ZW4sIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5wb3Bfd3JpdHRlbigpLAorICAgICAgICAgICAgYiJhYmNkZWZnaGlqa2xtbm9wcXJ3eHl6IikKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0MiwgYnVmaW8uZmlsZW5vKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJBQkNERUZHSEkiKSwgOSkKKyAgICAgICAgcyA9IHJhdy5wb3Bfd3JpdHRlbigpCisgICAgICAgICMgUHJldmlvdXNseSBidWZmZXJlZCBieXRlcyB3ZXJlIGZsdXNoZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aChiIjAxMjM0NTY3QSIpLCBzKQogCi0gICAgZGVmIHRlc3RGbHVzaChzZWxmKToKLSAgICAgICAgd3JpdGVyID0gTW9ja1Jhd0lPKCkKLSAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFdyaXRlcih3cml0ZXIsIDgpCisgICAgZGVmIHRlc3Rfd3JpdGVfYW5kX3Jld2luZChzZWxmKToKKyAgICAgICAgcmF3ID0gaW8uQnl0ZXNJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJhYmNkZWYiKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50ZWxsKCksIDYpCisgICAgICAgIGJ1ZmlvLnNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShiIlhZIiksIDIpCisgICAgICAgIGJ1ZmlvLnNlZWsoNiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZ2V0dmFsdWUoKSwgYiJYWWNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiMTIzNDU2IiksIDYpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZ2V0dmFsdWUoKSwgYiJYWWNkZWYxMjM0NTYiKQogCisgICAgZGVmIHRlc3RfZmx1c2goc2VsZik6CisgICAgICAgIHdyaXRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHdyaXRlciwgOCkKICAgICAgICAgYnVmaW8ud3JpdGUoYiJhYmMiKQogICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiLCB3cml0ZXIuX3dyaXRlX3N0YWNrWzBdKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiYWJjIiwgd3JpdGVyLl93cml0ZV9zdGFja1swXSkKKyAgICBkZWYgdGVzdF9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cCh3cml0ZXIsIDgpCisgICAgICAgIGJ1ZmlvLndyaXRlKGIiYWJjIikKKyAgICAgICAgZGVsIGJ1ZmlvCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiLCB3cml0ZXIuX3dyaXRlX3N0YWNrWzBdKQogCi0gICAgZGVmIHRlc3RUaHJlYWRzKHNlbGYpOgotICAgICAgICAjIEJ1ZmZlcmVkV3JpdGVyIHNob3VsZCBub3QgcmFpc2UgZXhjZXB0aW9ucyBvciBjcmFzaAotICAgICAgICAjIHdoZW4gY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KKyAgICBkZWYgdGVzdF90cnVuY2F0ZShzZWxmKToKKyAgICAgICAgIyBUcnVuY2F0ZSBpbXBsaWNpdGx5IGZsdXNoZXMgdGhlIGJ1ZmZlci4KKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIHNlbGYud3JpdGVfbW9kZSwgYnVmZmVyaW5nPTApIGFzIHJhdzoKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcsIDgpCisgICAgICAgICAgICBidWZpby53cml0ZShiImFiY2RlZiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnRydW5jYXRlKDMpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50ZWxsKCksIDYpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiYWJjIikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfcmVzb3VyY2UoJ2NwdScpCisgICAgZGVmIHRlc3RfdGhyZWFkcyhzZWxmKToKICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBXcml0ZSBvdXQgbWFueSBieXRlcyBmcm9tIG1hbnkgdGhyZWFkcyBhbmQgdGVzdCB0aGV5IHdlcmUKKyAgICAgICAgICAgICMgYWxsIGZsdXNoZWQuCisgICAgICAgICAgICBOID0gMTAwMAorICAgICAgICAgICAgY29udGVudHMgPSBieXRlcyhyYW5nZSgyNTYpKSAqIE4KKyAgICAgICAgICAgIHNpemVzID0gY3ljbGUoWzEsIDE5XSkKKyAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICBxdWV1ZSA9IGRlcXVlKCkKKyAgICAgICAgICAgIHdoaWxlIG4gPCBsZW4oY29udGVudHMpOgorICAgICAgICAgICAgICAgIHNpemUgPSBuZXh0KHNpemVzKQorICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVuZChjb250ZW50c1tuOm4rc2l6ZV0pCisgICAgICAgICAgICAgICAgbiArPSBzaXplCisgICAgICAgICAgICBkZWwgY29udGVudHMKICAgICAgICAgICAgICMgV2UgdXNlIGEgcmVhbCBmaWxlIG9iamVjdCBiZWNhdXNlIGl0IGFsbG93cyB1cyB0bwogICAgICAgICAgICAgIyBleGVyY2lzZSBzaXR1YXRpb25zIHdoZXJlIHRoZSBHSUwgaXMgcmVsZWFzZWQgYmVmb3JlCiAgICAgICAgICAgICAjIHdyaXRpbmcgdGhlIGJ1ZmZlciB0byB0aGUgcmF3IHN0cmVhbXMuIFRoaXMgaXMgaW4gYWRkaXRpb24KICAgICAgICAgICAgICMgdG8gY29uY3VycmVuY3kgaXNzdWVzIGR1ZSB0byBzd2l0Y2hpbmcgdGhyZWFkcyBpbiB0aGUgbWlkZGxlCiAgICAgICAgICAgICAjIG9mIFB5dGhvbiBjb2RlLgotICAgICAgICAgICAgd2l0aCBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKSBhcyByYXc6Ci0gICAgICAgICAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFdyaXRlcihyYXcsIDgpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi53cml0ZV9tb2RlLCBidWZmZXJpbmc9MCkgYXMgcmF3OgorICAgICAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcsIDgpCiAgICAgICAgICAgICAgICAgZXJyb3JzID0gW10KICAgICAgICAgICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFdyaXRlIGVub3VnaCBieXRlcyB0byBmbHVzaCB0aGUgYnVmZmVyCi0gICAgICAgICAgICAgICAgICAgICAgICBzID0gYiJhIiAqIDE5Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1MCk6CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHF1ZXVlLnBvcGxlZnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZpby53cml0ZShzKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKGUpCkBAIC01OTEsNzAgKzExMzEsMzcwIEBACiAgICAgICAgICAgICAgICAgICAgIHQuam9pbigpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnJvcnMsCiAgICAgICAgICAgICAgICAgICAgICJ0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgd2VyZSBjYXVnaHQ6ICVyIiAlIGVycm9ycykKKyAgICAgICAgICAgICAgICBidWZpby5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDI1Nik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KGJ5dGVzKFtpXSkpLCBOKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAKLSAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKLSAgICAgICAgcmF3ID0gTW9ja1Jhd0lPKCkKLSAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCi0gICAgICAgIHJhdy5mbHVzaCA9IGJhZF9mbHVzaAotICAgICAgICBiID0gaW8uQnVmZmVyZWRXcml0ZXIocmF3KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgZGVmIHRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1pc2JlaGF2ZWRSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8uc2VlaywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8udGVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8ud3JpdGUsIGIiYWJjZGVmIikKIAotICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgotICAgICAgICByYXcgPSBNb2NrUmF3SU8oKQotICAgICAgICBiID0gaW8uQnVmZmVyZWRXcml0ZXIocmF3KQotICAgICAgICBiLmNsb3NlKCkKLSAgICAgICAgYi5jbG9zZSgpCi0gICAgICAgIGIuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiLmZsdXNoKQorICAgIGRlZiB0ZXN0X21heF9idWZmZXJfc2l6ZV9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgibWF4X2J1ZmZlcl9zaXplIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCA4LCAxMikKIAogCitjbGFzcyBDQnVmZmVyZWRXcml0ZXJUZXN0KEJ1ZmZlcmVkV3JpdGVyVGVzdCk6CisgICAgdHAgPSBpby5CdWZmZXJlZFdyaXRlcgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIEJ1ZmZlcmVkV3JpdGVyVGVzdC50ZXN0X2NvbnN0cnVjdG9yKHNlbGYpCisgICAgICAgICMgVGhlIGFsbG9jYXRpb24gY2FuIHN1Y2NlZWQgb24gMzItYml0IGJ1aWxkcywgZS5nLiB3aXRoIG1vcmUKKyAgICAgICAgIyB0aGFuIDJHQiBSQU0gYW5kIGEgNjQtYml0IGtlcm5lbC4KKyAgICAgICAgaWYgc3lzLm1heHNpemUgPiAweDdGRkZGRkZGOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT3ZlcmZsb3dFcnJvciwgTWVtb3J5RXJyb3IsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgc3lzLm1heHNpemUpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby53cml0ZSwgYiJkZWYiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPS0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ud3JpdGUsIGIiZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ud3JpdGUsIGIiZGVmIikKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBDIEJ1ZmZlcmVkV3JpdGVyIG9iamVjdHMgYXJlIGNvbGxlY3RlZCwgYW5kIGNvbGxlY3RpbmcgdGhlbSBmbHVzaGVzCisgICAgICAgICMgYWxsIGRhdGEgdG8gZGlzay4KKyAgICAgICAgIyBUaGUgUHl0aG9uIHZlcnNpb24gaGFzIF9fZGVsX18sIHNvIGl0IGVuZHMgaW50byBnYy5nYXJiYWdlIGluc3RlYWQKKyAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCisgICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBmLndyaXRlKGIiMTIzeHh4IikKKyAgICAgICAgZi54ID0gZgorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgIGRlbCBmCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiMTIzeHh4IikKKworCitjbGFzcyBQeUJ1ZmZlcmVkV3JpdGVyVGVzdChCdWZmZXJlZFdyaXRlclRlc3QpOgorICAgIHRwID0gcHlpby5CdWZmZXJlZFdyaXRlcgorCiBjbGFzcyBCdWZmZXJlZFJXUGFpclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIHRlc3RSV1BhaXIoc2VsZik6Ci0gICAgICAgIHIgPSBNb2NrUmF3SU8oKCkpCi0gICAgICAgIHcgPSBNb2NrUmF3SU8oKQotICAgICAgICBwYWlyID0gaW8uQnVmZmVyZWRSV1BhaXIociwgdykKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgc2VsZi5Nb2NrUmF3SU8oKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwYWlyLmNsb3NlZCkKIAotICAgICAgICAjIFhYWCBNb3JlIFRlc3RzCisgICAgZGVmIHRlc3RfZGV0YWNoKHNlbGYpOgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLlVuc3VwcG9ydGVkT3BlcmF0aW9uLCBwYWlyLmRldGFjaCkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX21heF9idWZmZXJfc2l6ZV9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgibWF4X2J1ZmZlcl9zaXplIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpLCA4LCAxMikKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3dpdGhfbm90X3JlYWRhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBOb3RSZWFkYWJsZShNb2NrUmF3SU8pOgorICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYudHAsIE5vdFJlYWRhYmxlKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl93aXRoX25vdF93cml0ZWFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIE5vdFdyaXRlYWJsZShNb2NrUmF3SU8pOgorICAgICAgICAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYudHAsIHNlbGYuTW9ja1Jhd0lPKCksIE5vdFdyaXRlYWJsZSgpKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjZGVmIiksIHNlbGYuTW9ja1Jhd0lPKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWQoMyksIGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWQoMSksIGIiZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpci5yZWFkKCksIGIiZWYiKQorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmMiKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWQoTm9uZSksIGIiYWJjIikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgcGFpciA9IGxhbWJkYTogc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmNcbmRlZlxuaCIpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIoKS5yZWFkbGluZXMoKSwgW2IiYWJjXG4iLCBiImRlZlxuIiwgYiJoIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpcigpLnJlYWRsaW5lcygpLCBbYiJhYmNcbiIsIGIiZGVmXG4iLCBiImgiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyKCkucmVhZGxpbmVzKDUpLCBbYiJhYmNcbiIsIGIiZGVmXG4iXSkKKworICAgIGRlZiB0ZXN0X3JlYWQxKHNlbGYpOgorICAgICAgICAjIC5yZWFkMSgpIGlzIGRlbGVnYXRlZCB0byB0aGUgdW5kZXJseWluZyByZWFkZXIgb2JqZWN0LCBzbyB0aGlzIHRlc3QKKyAgICAgICAgIyBjYW4gYmUgc2hhbGxvdy4KKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjZGVmIiksIHNlbGYuTW9ja1Jhd0lPKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWQxKDMpLCBiImFiYyIpCisKKyAgICBkZWYgdGVzdF9yZWFkaW50byhzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjZGVmIiksIHNlbGYuTW9ja1Jhd0lPKCkpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheSg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIucmVhZGludG8oZGF0YSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYiJhYmNkZSIpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgdykKKworICAgICAgICBwYWlyLndyaXRlKGIiYWJjIikKKyAgICAgICAgcGFpci5mbHVzaCgpCisgICAgICAgIHBhaXIud3JpdGUoYiJkZWYiKQorICAgICAgICBwYWlyLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Ll93cml0ZV9zdGFjaywgW2IiYWJjIiwgYiJkZWYiXSkKKworICAgIGRlZiB0ZXN0X3BlZWsoc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY2RlZiIpLCBzZWxmLk1vY2tSYXdJTygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLnBlZWsoMykuc3RhcnRzd2l0aChiImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIucmVhZCgzKSwgYiJhYmMiKQorCisgICAgZGVmIHRlc3RfcmVhZGFibGUoc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLnJlYWRhYmxlKCkpCisKKyAgICBkZWYgdGVzdF93cml0ZWFibGUoc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLndyaXRhYmxlKCkpCisKKyAgICBkZWYgdGVzdF9zZWVrYWJsZShzZWxmKToKKyAgICAgICAgIyBCdWZmZXJlZFJXUGFpcnMgYXJlIG5ldmVyIHNlZWthYmxlLCBldmVuIGlmIHRoZWlyIHJlYWRlcnMgYW5kIHdyaXRlcnMKKyAgICAgICAgIyBhcmUuCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFpci5zZWVrYWJsZSgpKQorCisgICAgIyAuZmx1c2goKSBpcyBkZWxlZ2F0ZWQgdG8gdGhlIHVuZGVybHlpbmcgd3JpdGVyIG9iamVjdCBhbmQgaGFzIGJlZW4KKyAgICAjIHRlc3RlZCBpbiB0aGUgdGVzdF93cml0ZSBtZXRob2QuCisKKyAgICBkZWYgdGVzdF9jbG9zZV9hbmRfY2xvc2VkKHNlbGYpOgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhaXIuY2xvc2VkKQorICAgICAgICBwYWlyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhaXIuY2xvc2VkKQorCisgICAgZGVmIHRlc3RfaXNhdHR5KHNlbGYpOgorICAgICAgICBjbGFzcyBTZWxlY3RhYmxlSXNBdHR5KE1vY2tSYXdJTyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaXNhdHR5KToKKyAgICAgICAgICAgICAgICBNb2NrUmF3SU8uX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLl9pc2F0dHkgPSBpc2F0dHkKKworICAgICAgICAgICAgZGVmIGlzYXR0eShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faXNhdHR5CisKKyAgICAgICAgcGFpciA9IHNlbGYudHAoU2VsZWN0YWJsZUlzQXR0eShGYWxzZSksIFNlbGVjdGFibGVJc0F0dHkoRmFsc2UpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhaXIuaXNhdHR5KCkpCisKKyAgICAgICAgcGFpciA9IHNlbGYudHAoU2VsZWN0YWJsZUlzQXR0eShUcnVlKSwgU2VsZWN0YWJsZUlzQXR0eShGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLmlzYXR0eSgpKQorCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKFNlbGVjdGFibGVJc0F0dHkoRmFsc2UpLCBTZWxlY3RhYmxlSXNBdHR5KFRydWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFpci5pc2F0dHkoKSkKKworICAgICAgICBwYWlyID0gc2VsZi50cChTZWxlY3RhYmxlSXNBdHR5KFRydWUpLCBTZWxlY3RhYmxlSXNBdHR5KFRydWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFpci5pc2F0dHkoKSkKKworY2xhc3MgQ0J1ZmZlcmVkUldQYWlyVGVzdChCdWZmZXJlZFJXUGFpclRlc3QpOgorICAgIHRwID0gaW8uQnVmZmVyZWRSV1BhaXIKKworY2xhc3MgUHlCdWZmZXJlZFJXUGFpclRlc3QoQnVmZmVyZWRSV1BhaXJUZXN0KToKKyAgICB0cCA9IHB5aW8uQnVmZmVyZWRSV1BhaXIKIAogCi1jbGFzcyBCdWZmZXJlZFJhbmRvbVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQnVmZmVyZWRSYW5kb21UZXN0KEJ1ZmZlcmVkUmVhZGVyVGVzdCwgQnVmZmVyZWRXcml0ZXJUZXN0KToKKyAgICByZWFkX21vZGUgPSAicmIrIgorICAgIHdyaXRlX21vZGUgPSAid2IrIgogCi0gICAgZGVmIHRlc3RSZWFkQW5kV3JpdGUoc2VsZik6Ci0gICAgICAgIHJhdyA9IE1vY2tSYXdJTygoYiJhc2RmIiwgYiJnaGprIikpCi0gICAgICAgIHJ3ID0gaW8uQnVmZmVyZWRSYW5kb20ocmF3LCA4LCAxMikKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgQnVmZmVyZWRSZWFkZXJUZXN0LnRlc3RfY29uc3RydWN0b3Ioc2VsZikKKyAgICAgICAgQnVmZmVyZWRXcml0ZXJUZXN0LnRlc3RfY29uc3RydWN0b3Ioc2VsZikKKworICAgIGRlZiB0ZXN0X3JlYWRfYW5kX3dyaXRlKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygoYiJhc2RmIiwgYiJnaGprIikpCisgICAgICAgIHJ3ID0gc2VsZi50cChyYXcsIDgpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFzIiwgcncucmVhZCgyKSkKICAgICAgICAgcncud3JpdGUoYiJkZGQiKQogICAgICAgICBydy53cml0ZShiImVlZSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmF3Ll93cml0ZV9zdGFjaykgIyBCdWZmZXIgd3JpdGVzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJnaGprIiwgcncucmVhZCgpKSAjIFRoaXMgcmVhZCBmb3JjZXMgd3JpdGUgZmx1c2gKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiJkZGRlZWUiLCByYXcuX3dyaXRlX3N0YWNrWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZ2hqayIsIHJ3LnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImRkZGVlZSIsIHJhdy5fd3JpdGVfc3RhY2tbMF0pCiAKLSAgICBkZWYgdGVzdFNlZWtBbmRUZWxsKHNlbGYpOgotICAgICAgICByYXcgPSBpby5CeXRlc0lPKGIiYXNkZmdoamtsIikKLSAgICAgICAgcncgPSBpby5CdWZmZXJlZFJhbmRvbShyYXcpCisgICAgZGVmIHRlc3Rfc2Vla19hbmRfdGVsbChzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5CeXRlc0lPKGIiYXNkZmdoamtsIikKKyAgICAgICAgcncgPSBzZWxmLnRwKHJhdykKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFzIiwgcncucmVhZCgyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMiwgcncudGVsbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYXMiLCBydy5yZWFkKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHJ3LnRlbGwoKSkKICAgICAgICAgcncuc2VlaygwLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFzZGYiLCBydy5yZWFkKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYXNkZiIsIHJ3LnJlYWQoNCkpCiAKICAgICAgICAgcncud3JpdGUoYiJhc2RmIikKICAgICAgICAgcncuc2VlaygwLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFzZGZhc2RmbCIsIHJ3LnJlYWQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoOSwgcncudGVsbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYXNkZmFzZGZsIiwgcncucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDksIHJ3LnRlbGwoKSkKICAgICAgICAgcncuc2VlaygtNCwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNSwgcncudGVsbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIHJ3LnRlbGwoKSkKICAgICAgICAgcncuc2VlaygyLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg3LCBydy50ZWxsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiZmwiLCBydy5yZWFkKDExKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBydy50ZWxsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJmbCIsIHJ3LnJlYWQoMTEpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJ3LnNlZWssIDAuMCkKIAorICAgIGRlZiBjaGVja19mbHVzaF9hbmRfcmVhZChzZWxmLCByZWFkX2Z1bmMpOgorICAgICAgICByYXcgPSBzZWxmLkJ5dGVzSU8oYiJhYmNkZWZnaGkiKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYiIsIHJlYWRfZnVuYyhidWZpbywgMikpCisgICAgICAgIGJ1ZmlvLndyaXRlKGIiMTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZWYiLCByZWFkX2Z1bmMoYnVmaW8sIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGJ1ZmlvLnRlbGwoKSkKKyAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGJ1ZmlvLnRlbGwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImdoaSIsIHJlYWRfZnVuYyhidWZpbykpCisgICAgICAgIHJhdy5zZWVrKDAsIDApCisgICAgICAgIHJhdy53cml0ZShiIlhZWiIpCisgICAgICAgICMgZmx1c2goKSByZXNldHMgdGhlIHJlYWQgYnVmZmVyCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgYnVmaW8uc2VlaygwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiWFlaIiwgcmVhZF9mdW5jKGJ1ZmlvLCAzKSkKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2FuZF9yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2FuZF9yZWFkKGxhbWJkYSBidWZpbywgKmFyZ3M6IGJ1ZmlvLnJlYWQoKmFyZ3MpKQorCisgICAgZGVmIHRlc3RfZmx1c2hfYW5kX3JlYWRpbnRvKHNlbGYpOgorICAgICAgICBkZWYgX3JlYWRpbnRvKGJ1ZmlvLCBuPS0xKToKKyAgICAgICAgICAgIGIgPSBieXRlYXJyYXkobiBpZiBuID49IDAgZWxzZSA5OTk5KQorICAgICAgICAgICAgbiA9IGJ1ZmlvLnJlYWRpbnRvKGIpCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMoYls6bl0pCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfYW5kX3JlYWQoX3JlYWRpbnRvKQorCisgICAgZGVmIHRlc3RfZmx1c2hfYW5kX3BlZWsoc2VsZik6CisgICAgICAgIGRlZiBfcGVlayhidWZpbywgbj0tMSk6CisgICAgICAgICAgICAjIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgdGhlIGJ1ZmZlciBjYW4gY29udGFpbiB0aGUgd2hvbGUKKyAgICAgICAgICAgICMgcmF3IHN0cmVhbSwgb3RoZXJ3aXNlIHBlZWsoKSBjYW4gcmV0dXJuIGxlc3MuCisgICAgICAgICAgICBiID0gYnVmaW8ucGVlayhuKQorICAgICAgICAgICAgaWYgbiAhPSAtMToKKyAgICAgICAgICAgICAgICBiID0gYls6bl0KKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsobGVuKGIpLCAxKQorICAgICAgICAgICAgcmV0dXJuIGIKKyAgICAgICAgc2VsZi5jaGVja19mbHVzaF9hbmRfcmVhZChfcGVlaykKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2FuZF93cml0ZShzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5CeXRlc0lPKGIiYWJjZGVmZ2hpIikKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdykKKworICAgICAgICBidWZpby53cml0ZShiIjEyMyIpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgYnVmaW8ud3JpdGUoYiI0NSIpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgYnVmaW8uc2VlaygwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiMTIzNDVmZ2hpIiwgcmF3LmdldHZhbHVlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIxMjM0NWZnaGkiLCBidWZpby5yZWFkKCkpCisKKyAgICBkZWYgdGVzdF90aHJlYWRzKHNlbGYpOgorICAgICAgICBCdWZmZXJlZFJlYWRlclRlc3QudGVzdF90aHJlYWRzKHNlbGYpCisgICAgICAgIEJ1ZmZlcmVkV3JpdGVyVGVzdC50ZXN0X3RocmVhZHMoc2VsZikKKworICAgIGRlZiB0ZXN0X3dyaXRlc19hbmRfcGVlayhzZWxmKToKKyAgICAgICAgZGVmIF9wZWVrKGJ1ZmlvKToKKyAgICAgICAgICAgIGJ1ZmlvLnBlZWsoMSkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3BlZWspCisgICAgICAgIGRlZiBfcGVlayhidWZpbyk6CisgICAgICAgICAgICBwb3MgPSBidWZpby50ZWxsKCkKKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsoLTEsIDEpCisgICAgICAgICAgICBidWZpby5wZWVrKDEpCisgICAgICAgICAgICBidWZpby5zZWVrKHBvcywgMCkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3BlZWspCisKKyAgICBkZWYgdGVzdF93cml0ZXNfYW5kX3JlYWRzKHNlbGYpOgorICAgICAgICBkZWYgX3JlYWQoYnVmaW8pOgorICAgICAgICAgICAgYnVmaW8uc2VlaygtMSwgMSkKKyAgICAgICAgICAgIGJ1ZmlvLnJlYWQoMSkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3JlYWQpCisKKyAgICBkZWYgdGVzdF93cml0ZXNfYW5kX3JlYWQxcyhzZWxmKToKKyAgICAgICAgZGVmIF9yZWFkMShidWZpbyk6CisgICAgICAgICAgICBidWZpby5zZWVrKC0xLCAxKQorICAgICAgICAgICAgYnVmaW8ucmVhZDEoMSkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3JlYWQxKQorCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF9yZWFkaW50b3Moc2VsZik6CisgICAgICAgIGRlZiBfcmVhZChidWZpbyk6CisgICAgICAgICAgICBidWZpby5zZWVrKC0xLCAxKQorICAgICAgICAgICAgYnVmaW8ucmVhZGludG8oYnl0ZWFycmF5KDEpKQorICAgICAgICBzZWxmLmNoZWNrX3dyaXRlcyhfcmVhZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2FmdGVyX3JlYWRhaGVhZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNjYyOTogd3JpdGluZyBhZnRlciB0aGUgYnVmZmVyIHdhcyBmaWxsZWQgYnkgcmVhZGFoZWFkIHNob3VsZAorICAgICAgICAjIGZpcnN0IHJld2luZCB0aGUgcmF3IHN0cmVhbS4KKyAgICAgICAgZm9yIG92ZXJ3cml0ZV9zaXplIGluIFsxLCA1XToKKyAgICAgICAgICAgIHJhdyA9IHNlbGYuQnl0ZXNJTyhiIkEiICogMTApCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCA0KQorICAgICAgICAgICAgIyBUcmlnZ2VyIHJlYWRhaGVhZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkKDEpLCBiIkEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50ZWxsKCksIDEpCisgICAgICAgICAgICAjIE92ZXJ3cml0aW5nIHNob3VsZCByZXdpbmQgdGhlIHJhdyBzdHJlYW0gaWYgaXQgbmVlZHMgc28KKyAgICAgICAgICAgIGJ1ZmlvLndyaXRlKGIiQiIgKiBvdmVyd3JpdGVfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udGVsbCgpLCBvdmVyd3JpdGVfc2l6ZSArIDEpCisgICAgICAgICAgICAjIElmIHRoZSB3cml0ZSBzaXplIHdhcyBzbWFsbGVyIHRoYW4gdGhlIGJ1ZmZlciBzaXplLCBmbHVzaCgpIGFuZAorICAgICAgICAgICAgIyBjaGVjayB0aGF0IHJld2luZCBoYXBwZW5zLgorICAgICAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50ZWxsKCksIG92ZXJ3cml0ZV9zaXplICsgMSkKKyAgICAgICAgICAgIHMgPSByYXcuZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLAorICAgICAgICAgICAgICAgIGIiQSIgKyBiIkIiICogb3ZlcndyaXRlX3NpemUgKyBiIkEiICogKDkgLSBvdmVyd3JpdGVfc2l6ZSkpCisKKyAgICBkZWYgdGVzdF90cnVuY2F0ZV9hZnRlcl9yZWFkX29yX3dyaXRlKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLkJ5dGVzSU8oYiJBIiAqIDEwKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZCgyKSwgYiJBQSIpICMgdGhlIHJlYWQgYnVmZmVyIGdldHMgZmlsbGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udHJ1bmNhdGUoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShiIkJCIiksIDIpICMgdGhlIHdyaXRlIGJ1ZmZlciBpbmNyZWFzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50cnVuY2F0ZSgpLCA0KQorCisgICAgZGVmIHRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKToKKyAgICAgICAgQnVmZmVyZWRSZWFkZXJUZXN0LnRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKQorICAgICAgICBCdWZmZXJlZFdyaXRlclRlc3QudGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpCisKK2NsYXNzIENCdWZmZXJlZFJhbmRvbVRlc3QoQ0J1ZmZlcmVkUmVhZGVyVGVzdCwgQ0J1ZmZlcmVkV3JpdGVyVGVzdCwgQnVmZmVyZWRSYW5kb21UZXN0KToKKyAgICB0cCA9IGlvLkJ1ZmZlcmVkUmFuZG9tCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgQnVmZmVyZWRSYW5kb21UZXN0LnRlc3RfY29uc3RydWN0b3Ioc2VsZikKKyAgICAgICAgIyBUaGUgYWxsb2NhdGlvbiBjYW4gc3VjY2VlZCBvbiAzMi1iaXQgYnVpbGRzLCBlLmcuIHdpdGggbW9yZQorICAgICAgICAjIHRoYW4gMkdCIFJBTSBhbmQgYSA2NC1iaXQga2VybmVsLgorICAgICAgICBpZiBzeXMubWF4c2l6ZSA+IDB4N0ZGRkZGRkY6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgVmFsdWVFcnJvciksCisgICAgICAgICAgICAgICAgYnVmaW8uX19pbml0X18sIHJhd2lvLCBzeXMubWF4c2l6ZSkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgQ0J1ZmZlcmVkUmVhZGVyVGVzdC50ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKQorICAgICAgICBDQnVmZmVyZWRXcml0ZXJUZXN0LnRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpCisKK2NsYXNzIFB5QnVmZmVyZWRSYW5kb21UZXN0KEJ1ZmZlcmVkUmFuZG9tVGVzdCk6CisgICAgdHAgPSBweWlvLkJ1ZmZlcmVkUmFuZG9tCisKKwogIyBUbyBmdWxseSBleGVyY2lzZSBzZWVrL3RlbGwsIHRoZSBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2RlciBoYXMgdGhlc2UKICMgcHJvcGVydGllczoKICMgICAtIEEgc2luZ2xlIG91dHB1dCBjaGFyYWN0ZXIgY2FuIGNvcnJlc3BvbmQgdG8gbWFueSBieXRlcyBvZiBpbnB1dC4KQEAgLTc4OCwxNDUgKzE2MjgsMTMxIEBACiAgICAgICAgICAnbS0tLS0tLS0tLS0tLS0tLicpCiAgICAgXQogCi0gICAgZGVmIHRlc3REZWNvZGVyKHNlbGYpOgorICAgIGRlZiB0ZXN0X2RlY29kZXIoc2VsZik6CiAgICAgICAgICMgVHJ5IGEgZmV3IG9uZS1zaG90IHRlc3QgY2FzZXMuCiAgICAgICAgIGZvciBpbnB1dCwgZW9mLCBvdXRwdXQgaW4gc2VsZi50ZXN0X2Nhc2VzOgogICAgICAgICAgICAgZCA9IFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGQuZGVjb2RlKGlucHV0LCBlb2YpLCBvdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGVjb2RlKGlucHV0LCBlb2YpLCBvdXRwdXQpCiAKICAgICAgICAgIyBBbHNvIHRlc3QgYW4gdW5maW5pc2hlZCBkZWNvZGUsIGZvbGxvd2VkIGJ5IGZvcmNpbmcgRU9GLgogICAgICAgICBkID0gU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkLmRlY29kZShiJ29pYWJjZCcpLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZC5kZWNvZGUoYicnLCAxKSwgJ2FiY2QuJykKLQotICAgIGRlZiB0ZXN0X2FwcGVuZF9ib20oc2VsZik6Ci0gICAgICAgICMgVGhlIEJPTSBpcyBub3Qgd3JpdHRlbiBhZ2FpbiB3aGVuIGFwcGVuZGluZyB0byBhIG5vbi1lbXB0eSBmaWxlCi0gICAgICAgIGZpbGVuYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTgotICAgICAgICBmb3IgY2hhcnNldCBpbiAoJ3V0Zi04LXNpZycsICd1dGYtMTYnLCAndXRmLTMyJyk6Ci0gICAgICAgICAgICB3aXRoIGlvLm9wZW4oZmlsZW5hbWUsICd3JywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKLSAgICAgICAgICAgICAgICBmLndyaXRlKCdhYWEnKQotICAgICAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCi0gICAgICAgICAgICB3aXRoIGlvLm9wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksICdhYWEnLmVuY29kZShjaGFyc2V0KSkKLQotICAgICAgICAgICAgd2l0aCBpby5vcGVuKGZpbGVuYW1lLCAnYScsIGVuY29kaW5nPWNoYXJzZXQpIGFzIGY6Ci0gICAgICAgICAgICAgICAgZi53cml0ZSgneHh4JykKLSAgICAgICAgICAgIHdpdGggaW8ub3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgJ2FhYXh4eCcuZW5jb2RlKGNoYXJzZXQpKQotCi0gICAgZGVmIHRlc3Rfc2Vla19ib20oc2VsZik6Ci0gICAgICAgICMgU2FtZSB0ZXN0LCBidXQgd2hlbiBzZWVraW5nIG1hbnVhbGx5Ci0gICAgICAgIGZpbGVuYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTgotICAgICAgICBmb3IgY2hhcnNldCBpbiAoJ3V0Zi04LXNpZycsICd1dGYtMTYnLCAndXRmLTMyJyk6Ci0gICAgICAgICAgICB3aXRoIGlvLm9wZW4oZmlsZW5hbWUsICd3JywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKLSAgICAgICAgICAgICAgICBmLndyaXRlKCdhYWEnKQotICAgICAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCi0gICAgICAgICAgICB3aXRoIGlvLm9wZW4oZmlsZW5hbWUsICdyKycsIGVuY29kaW5nPWNoYXJzZXQpIGFzIGY6Ci0gICAgICAgICAgICAgICAgZi5zZWVrKHBvcykKLSAgICAgICAgICAgICAgICBmLndyaXRlKCd6enonKQotICAgICAgICAgICAgICAgIGYuc2VlaygwKQotICAgICAgICAgICAgICAgIGYud3JpdGUoJ2JiYicpCi0gICAgICAgICAgICB3aXRoIGlvLm9wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksICdiYmJ6enonLmVuY29kZShjaGFyc2V0KSkKLQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGVjb2RlKGInb2lhYmNkJyksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGVjb2RlKGInJywgMSksICdhYmNkLicpCiAKIGNsYXNzIFRleHRJT1dyYXBwZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi50ZXN0ZGF0YSA9IGIiQUFBXHJcbkJCQlxyQ0NDXHJcbkRERFxuRUVFXHJcbiIKICAgICAgICAgc2VsZi5ub3JtYWxpemVkID0gYiJBQUFcbkJCQlxuQ0NDXG5ERERcbkVFRVxuIi5kZWNvZGUoImFzY2lpIikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAKLSAgICBkZWYgdGVzdExpbmVCdWZmZXJpbmcoc2VsZik6Ci0gICAgICAgIHIgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgYiA9IGlvLkJ1ZmZlcmVkV3JpdGVyKHIsIDEwMDApCi0gICAgICAgIHQgPSBpby5UZXh0SU9XcmFwcGVyKGIsIG5ld2xpbmU9IlxuIiwgbGluZV9idWZmZXJpbmc9VHJ1ZSkKLSAgICAgICAgdC53cml0ZSh1IlgiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyLmdldHZhbHVlKCksIGIiIikgICMgTm8gZmx1c2ggaGFwcGVuZWQKLSAgICAgICAgdC53cml0ZSh1IllcbloiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyLmdldHZhbHVlKCksIGIiWFlcbloiKSAgIyBBbGwgZ290IGZsdXNoZWQKLSAgICAgICAgdC53cml0ZSh1IkFcckIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyLmdldHZhbHVlKCksIGIiWFlcblpBXHJCIikKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgciA9IHNlbGYuQnl0ZXNJTyhiIlx4YzNceGE5XG5cbiIpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkUmVhZGVyKHIsIDEwMDApCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYikKKyAgICAgICAgdC5fX2luaXRfXyhiLCBlbmNvZGluZz0ibGF0aW4xIiwgbmV3bGluZT0iXHJcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5lbmNvZGluZywgImxhdGluMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5saW5lX2J1ZmZlcmluZywgRmFsc2UpCisgICAgICAgIHQuX19pbml0X18oYiwgZW5jb2Rpbmc9InV0ZjgiLCBsaW5lX2J1ZmZlcmluZz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZW5jb2RpbmcsICJ1dGY4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmxpbmVfYnVmZmVyaW5nLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJceGU5XG4iLCB0LnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5fX2luaXRfXywgYiwgbmV3bGluZT00MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5fX2luaXRfXywgYiwgbmV3bGluZT0neHl6enknKQogCi0gICAgZGVmIHRlc3RFbmNvZGluZ0Vycm9yc1JlYWRpbmcoc2VsZik6CisgICAgZGVmIHRlc3RfZGV0YWNoKHNlbGYpOgorICAgICAgICByID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIocikKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuZGV0YWNoKCksIGIpCisKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0LndyaXRlKCJob3dkeSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoci5nZXR2YWx1ZSgpKQorICAgICAgICB0LmRldGFjaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXR2YWx1ZSgpLCBiImhvd2R5IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5kZXRhY2gpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLkJ5dGVzSU8oImhlbGxvIi5lbmNvZGUoInV0Zi04IikpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkUmVhZGVyKHJhdykKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0idXRmLTgiKQorICAgICAgICBtb2RuYW1lID0gc2VsZi5UZXh0SU9XcmFwcGVyLl9fbW9kdWxlX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8JXMuVGV4dElPV3JhcHBlciBlbmNvZGluZz0ndXRmLTgnPiIgJSBtb2RuYW1lKQorICAgICAgICByYXcubmFtZSA9ICJkdW1teSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8JXMuVGV4dElPV3JhcHBlciBuYW1lPXUnZHVtbXknIGVuY29kaW5nPSd1dGYtOCc+IiAlIG1vZG5hbWUpCisgICAgICAgIHJhdy5uYW1lID0gYiJkdW1teSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8JXMuVGV4dElPV3JhcHBlciBuYW1lPSdkdW1teScgZW5jb2Rpbmc9J3V0Zi04Jz4iICUgbW9kbmFtZSkKKworICAgIGRlZiB0ZXN0X2xpbmVfYnVmZmVyaW5nKHNlbGYpOgorICAgICAgICByID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIociwgMTAwMCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBuZXdsaW5lPSJcbiIsIGxpbmVfYnVmZmVyaW5nPVRydWUpCisgICAgICAgIHQud3JpdGUoIlgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0dmFsdWUoKSwgYiIiKSAgIyBObyBmbHVzaCBoYXBwZW5lZAorICAgICAgICB0LndyaXRlKCJZXG5aIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldHZhbHVlKCksIGIiWFlcbloiKSAgIyBBbGwgZ290IGZsdXNoZWQKKyAgICAgICAgdC53cml0ZSgiQVxyQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXR2YWx1ZSgpLCBiIlhZXG5aQVxyQiIpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGUgZW5jb2RpbmcgYXR0cmlidXRlIGlzIGFsd2F5cyBzZXQsIGFuZCB2YWxpZAorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0idXRmOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5lbmNvZGluZywgInV0ZjgiKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmVuY29kaW5nIGlzIG5vdCBOb25lKQorICAgICAgICBjb2RlY3MubG9va3VwKHQuZW5jb2RpbmcpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19lcnJvcnNfcmVhZGluZyhzZWxmKToKICAgICAgICAgIyAoMSkgZGVmYXVsdAotICAgICAgICBiID0gaW8uQnl0ZXNJTyhiImFiY1xuXHhmZlxuIikKLSAgICAgICAgdCA9IGlvLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTyhiImFiY1xuXHhmZlxuIikKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHQucmVhZCkKICAgICAgICAgIyAoMikgZXhwbGljaXQgc3RyaWN0Ci0gICAgICAgIGIgPSBpby5CeXRlc0lPKGIiYWJjXG5ceGZmXG4iKQotICAgICAgICB0ID0gaW8uVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InN0cmljdCIpCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oYiJhYmNcblx4ZmZcbiIpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJzdHJpY3QiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHQucmVhZCkKICAgICAgICAgIyAoMykgaWdub3JlCi0gICAgICAgIGIgPSBpby5CeXRlc0lPKGIiYWJjXG5ceGZmXG4iKQotICAgICAgICB0ID0gaW8uVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9Imlnbm9yZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHQucmVhZCgpLCAiYWJjXG5cbiIpCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oYiJhYmNcblx4ZmZcbiIpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJpZ25vcmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVhZCgpLCAiYWJjXG5cbiIpCiAgICAgICAgICMgKDQpIHJlcGxhY2UKLSAgICAgICAgYiA9IGlvLkJ5dGVzSU8oYiJhYmNcblx4ZmZcbiIpCi0gICAgICAgIHQgPSBpby5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0icmVwbGFjZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHQucmVhZCgpLCB1ImFiY1xuXHVmZmZkXG4iKQorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKGIiYWJjXG5ceGZmXG4iKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0icmVwbGFjZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZWFkKCksICJhYmNcblx1ZmZmZFxuIikKIAotICAgIGRlZiB0ZXN0RW5jb2RpbmdFcnJvcnNXcml0aW5nKHNlbGYpOgorICAgIGRlZiB0ZXN0X2VuY29kaW5nX2Vycm9yc193cml0aW5nKHNlbGYpOgogICAgICAgICAjICgxKSBkZWZhdWx0Ci0gICAgICAgIGIgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgdCA9IGlvLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB0LndyaXRlLCB1Ilx4ZmYiKQorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHQud3JpdGUsICJceGZmIikKICAgICAgICAgIyAoMikgZXhwbGljaXQgc3RyaWN0Ci0gICAgICAgIGIgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgdCA9IGlvLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJzdHJpY3QiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHQud3JpdGUsIHUiXHhmZiIpCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0ic3RyaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB0LndyaXRlLCAiXHhmZiIpCiAgICAgICAgICMgKDMpIGlnbm9yZQotICAgICAgICBiID0gaW8uQnl0ZXNJTygpCi0gICAgICAgIHQgPSBpby5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIiwKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJpZ25vcmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lPSJcbiIpCi0gICAgICAgIHQud3JpdGUodSJhYmNceGZmZGVmXG4iKQorICAgICAgICB0LndyaXRlKCJhYmNceGZmZGVmXG4iKQogICAgICAgICB0LmZsdXNoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYi5nZXR2YWx1ZSgpLCBiImFiY2RlZlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdldHZhbHVlKCksIGIiYWJjZGVmXG4iKQogICAgICAgICAjICg0KSByZXBsYWNlCi0gICAgICAgIGIgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgdCA9IGlvLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJyZXBsYWNlIiwKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJyZXBsYWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZT0iXG4iKQotICAgICAgICB0LndyaXRlKHUiYWJjXHhmZmRlZlxuIikKKyAgICAgICAgdC53cml0ZSgiYWJjXHhmZmRlZlxuIikKICAgICAgICAgdC5mbHVzaCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIuZ2V0dmFsdWUoKSwgYiJhYmM/ZGVmXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ2V0dmFsdWUoKSwgYiJhYmM/ZGVmXG4iKQogCi0gICAgZGVmIHRlc3ROZXdsaW5lc0lucHV0KHNlbGYpOgotICAgICAgICB0ZXN0ZGF0YSA9IGIiQUFBXG5CQkJcbkNDQ1xyREREXHJFRUVcclxuRkZGXHJcbkdHRyIKLSAgICAgICAgbm9ybWFsaXplZCA9IHRlc3RkYXRhLnJlcGxhY2UoYiJcclxuIiwgYiJcbiIpLnJlcGxhY2UoYiJcciIsIGIiXG4iKQotICAgICAgICBmb3IgbmV3bGluZSwgZXhwZWN0ZWQgaW4gWwotICAgICAgICAgICAgKE5vbmUsIG5vcm1hbGl6ZWQuZGVjb2RlKCJhc2NpaSIpLnNwbGl0bGluZXMoVHJ1ZSkpLAotICAgICAgICAgICAgKCIiLCB0ZXN0ZGF0YS5kZWNvZGUoImFzY2lpIikuc3BsaXRsaW5lcyhUcnVlKSksCi0gICAgICAgICAgICAoIlxuIiwgWyJBQUFcbiIsICJCQkJcbiIsICJDQ0NcckRERFxyRUVFXHJcbiIsICJGRkZcclxuIiwgIkdHRyJdKSwKLSAgICAgICAgICAgICgiXHJcbiIsIFsiQUFBXG5CQkJcbkNDQ1xyREREXHJFRUVcclxuIiwgIkZGRlxyXG4iLCAiR0dHIl0pLAotICAgICAgICAgICAgKCJcciIsICBbIkFBQVxuQkJCXG5DQ0NcciIsICJERERcciIsICJFRUVcciIsICJcbkZGRlxyIiwgIlxuR0dHIl0pLAotICAgICAgICAgICAgXToKLSAgICAgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8odGVzdGRhdGEpCi0gICAgICAgICAgICB0eHQgPSBpby5UZXh0SU9XcmFwcGVyKGJ1ZiwgZW5jb2Rpbmc9ImFzY2lpIiwgbmV3bGluZT1uZXdsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHh0LnJlYWRsaW5lcygpLCBleHBlY3RlZCkKLSAgICAgICAgICAgIHR4dC5zZWVrKDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0eHQucmVhZCgpLCAiIi5qb2luKGV4cGVjdGVkKSkKLQotICAgIGRlZiB0ZXN0TmV3bGluZXNPdXRwdXQoc2VsZik6Ci0gICAgICAgIHRlc3RkaWN0ID0gewotICAgICAgICAgICAgIiI6IGIiQUFBXG5CQkJcbkNDQ1xuWFxyWVxyXG5aIiwKLSAgICAgICAgICAgICJcbiI6IGIiQUFBXG5CQkJcbkNDQ1xuWFxyWVxyXG5aIiwKLSAgICAgICAgICAgICJcciI6IGIiQUFBXHJCQkJcckNDQ1xyWFxyWVxyXHJaIiwKLSAgICAgICAgICAgICJcclxuIjogYiJBQUFcclxuQkJCXHJcbkNDQ1xyXG5YXHJZXHJcclxuWiIsCi0gICAgICAgICAgICB9Ci0gICAgICAgIHRlc3RzID0gWyhOb25lLCB0ZXN0ZGljdFtvcy5saW5lc2VwXSldICsgc29ydGVkKHRlc3RkaWN0Lml0ZW1zKCkpCi0gICAgICAgIGZvciBuZXdsaW5lLCBleHBlY3RlZCBpbiB0ZXN0czoKLSAgICAgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQotICAgICAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihidWYsIGVuY29kaW5nPSJhc2NpaSIsIG5ld2xpbmU9bmV3bGluZSkKLSAgICAgICAgICAgIHR4dC53cml0ZSgiQUFBXG5CIikKLSAgICAgICAgICAgIHR4dC53cml0ZSgiQkJcbkNDQ1xuIikKLSAgICAgICAgICAgIHR4dC53cml0ZSgiWFxyWVxyXG5aIikKLSAgICAgICAgICAgIHR4dC5mbHVzaCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWYuY2xvc2VkLCBGYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJ1Zi5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKLQotICAgIGRlZiB0ZXN0TmV3bGluZXMoc2VsZik6CisgICAgZGVmIHRlc3RfbmV3bGluZXMoc2VsZik6CiAgICAgICAgIGlucHV0X2xpbmVzID0gWyAidW5peFxuIiwgIndpbmRvd3NcclxuIiwgIm9zOVxyIiwgImxhc3RcbiIsICJub25sIiBdCiAKICAgICAgICAgdGVzdHMgPSBbCkBAIC05NTAsOCArMTc3Niw4IEBACiAgICAgICAgICAgICBmb3IgZG9fcmVhZHMgaW4gKEZhbHNlLCBUcnVlKToKICAgICAgICAgICAgICAgICBmb3IgYnVmc2l6ZSBpbiByYW5nZSgxLCAxMCk6CiAgICAgICAgICAgICAgICAgICAgIGZvciBuZXdsaW5lLCBleHBfbGluZXMgaW4gdGVzdHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWZpbyA9IGlvLkJ1ZmZlcmVkUmVhZGVyKGlvLkJ5dGVzSU8oZGF0YSksIGJ1ZnNpemUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0aW8gPSBpby5UZXh0SU9XcmFwcGVyKGJ1ZmlvLCBuZXdsaW5lPW5ld2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBidWZpbyA9IHNlbGYuQnVmZmVyZWRSZWFkZXIoc2VsZi5CeXRlc0lPKGRhdGEpLCBidWZzaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGlvID0gc2VsZi5UZXh0SU9XcmFwcGVyKGJ1ZmlvLCBuZXdsaW5lPW5ld2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9fcmVhZHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X2xpbmVzID0gW10KQEAgLTk1OSw4NCArMTc4NSwxMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSB0ZXh0aW8ucmVhZCgyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjMiA9PSAnJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjMiksIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMyKSwgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X2xpbmVzLmFwcGVuZChjMiArIHRleHRpby5yZWFkbGluZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RfbGluZXMgPSBsaXN0KHRleHRpbykKIAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGdvdF9saW5lLCBleHBfbGluZSBpbiB6aXAoZ290X2xpbmVzLCBleHBfbGluZXMpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdvdF9saW5lLCBleHBfbGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihnb3RfbGluZXMpLCBsZW4oZXhwX2xpbmVzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdF9saW5lLCBleHBfbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdvdF9saW5lcyksIGxlbihleHBfbGluZXMpKQogCi0gICAgZGVmIHRlc3ROZXdsaW5lc0lucHV0KHNlbGYpOgotICAgICAgICB0ZXN0ZGF0YSA9IGIiQUFBXG5CQkJcbkNDQ1xyREREXHJFRUVcclxuRkZGXHJcbkdHRyIKKyAgICBkZWYgdGVzdF9uZXdsaW5lc19pbnB1dChzZWxmKToKKyAgICAgICAgdGVzdGRhdGEgPSBiIkFBQVxuQkJceDAwQlxuQ0NDXHJERERcckVFRVxyXG5GRkZcclxuR0dHIgogICAgICAgICBub3JtYWxpemVkID0gdGVzdGRhdGEucmVwbGFjZShiIlxyXG4iLCBiIlxuIikucmVwbGFjZShiIlxyIiwgYiJcbiIpCiAgICAgICAgIGZvciBuZXdsaW5lLCBleHBlY3RlZCBpbiBbCiAgICAgICAgICAgICAoTm9uZSwgbm9ybWFsaXplZC5kZWNvZGUoImFzY2lpIikuc3BsaXRsaW5lcyhUcnVlKSksCiAgICAgICAgICAgICAoIiIsIHRlc3RkYXRhLmRlY29kZSgiYXNjaWkiKS5zcGxpdGxpbmVzKFRydWUpKSwKLSAgICAgICAgICAgICgiXG4iLCBbIkFBQVxuIiwgIkJCQlxuIiwgIkNDQ1xyREREXHJFRUVcclxuIiwgIkZGRlxyXG4iLCAiR0dHIl0pLAotICAgICAgICAgICAgKCJcclxuIiwgWyJBQUFcbkJCQlxuQ0NDXHJERERcckVFRVxyXG4iLCAiRkZGXHJcbiIsICJHR0ciXSksCi0gICAgICAgICAgICAoIlxyIiwgIFsiQUFBXG5CQkJcbkNDQ1xyIiwgIkRERFxyIiwgIkVFRVxyIiwgIlxuRkZGXHIiLCAiXG5HR0ciXSksCisgICAgICAgICAgICAoIlxuIiwgWyJBQUFcbiIsICJCQlx4MDBCXG4iLCAiQ0NDXHJERERcckVFRVxyXG4iLCAiRkZGXHJcbiIsICJHR0ciXSksCisgICAgICAgICAgICAoIlxyXG4iLCBbIkFBQVxuQkJceDAwQlxuQ0NDXHJERERcckVFRVxyXG4iLCAiRkZGXHJcbiIsICJHR0ciXSksCisgICAgICAgICAgICAoIlxyIiwgIFsiQUFBXG5CQlx4MDBCXG5DQ0NcciIsICJERERcciIsICJFRUVcciIsICJcbkZGRlxyIiwgIlxuR0dHIl0pLAogICAgICAgICAgICAgXToKLSAgICAgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8odGVzdGRhdGEpCi0gICAgICAgICAgICB0eHQgPSBpby5UZXh0SU9XcmFwcGVyKGJ1ZiwgZW5jb2Rpbmc9ImFzY2lpIiwgbmV3bGluZT1uZXdsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHh0LnJlYWRsaW5lcygpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGJ1ZiA9IHNlbGYuQnl0ZXNJTyh0ZXN0ZGF0YSkKKyAgICAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihidWYsIGVuY29kaW5nPSJhc2NpaSIsIG5ld2xpbmU9bmV3bGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWRsaW5lcygpLCBleHBlY3RlZCkKICAgICAgICAgICAgIHR4dC5zZWVrKDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0eHQucmVhZCgpLCAiIi5qb2luKGV4cGVjdGVkKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWQoKSwgIiIuam9pbihleHBlY3RlZCkpCiAKLSAgICBkZWYgdGVzdE5ld2xpbmVzT3V0cHV0KHNlbGYpOgotICAgICAgICBkYXRhID0gdSJBQUFcbkJCQlxyQ0NDXG4iCi0gICAgICAgIGRhdGFfbGYgPSBiIkFBQVxuQkJCXHJDQ0NcbiIKLSAgICAgICAgZGF0YV9jciA9IGIiQUFBXHJCQkJcckNDQ1xyIgotICAgICAgICBkYXRhX2NybGYgPSBiIkFBQVxyXG5CQkJcckNDQ1xyXG4iCi0gICAgICAgIHNhdmVfbGluZXNlcCA9IG9zLmxpbmVzZXAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZm9yIG9zLmxpbmVzZXAsIG5ld2xpbmUsIGV4cGVjdGVkIGluIFsKLSAgICAgICAgICAgICAgICAoIlxuIiwgTm9uZSwgZGF0YV9sZiksCi0gICAgICAgICAgICAgICAgKCJcclxuIiwgTm9uZSwgZGF0YV9jcmxmKSwKLSAgICAgICAgICAgICAgICAoIlxuIiwgIiIsIGRhdGFfbGYpLAotICAgICAgICAgICAgICAgICgiXHJcbiIsICIiLCBkYXRhX2xmKSwKLSAgICAgICAgICAgICAgICAoIlxuIiwgIlxuIiwgZGF0YV9sZiksCi0gICAgICAgICAgICAgICAgKCJcclxuIiwgIlxuIiwgZGF0YV9sZiksCi0gICAgICAgICAgICAgICAgKCJcbiIsICJcciIsIGRhdGFfY3IpLAotICAgICAgICAgICAgICAgICgiXHJcbiIsICJcciIsIGRhdGFfY3IpLAotICAgICAgICAgICAgICAgICgiXG4iLCAiXHJcbiIsIGRhdGFfY3JsZiksCi0gICAgICAgICAgICAgICAgKCJcclxuIiwgIlxyXG4iLCBkYXRhX2NybGYpLAotICAgICAgICAgICAgICAgIF06Ci0gICAgICAgICAgICAgICAgYnVmID0gaW8uQnl0ZXNJTygpCi0gICAgICAgICAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihidWYsIGVuY29kaW5nPSJhc2NpaSIsIG5ld2xpbmU9bmV3bGluZSkKLSAgICAgICAgICAgICAgICB0eHQud3JpdGUoZGF0YSkKLSAgICAgICAgICAgICAgICB0eHQuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJ1Zi5jbG9zZWQsIFRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmLmdldHZhbHVlKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MubGluZXNlcCA9IHNhdmVfbGluZXNlcAorICAgIGRlZiB0ZXN0X25ld2xpbmVzX291dHB1dChzZWxmKToKKyAgICAgICAgdGVzdGRpY3QgPSB7CisgICAgICAgICAgICAiIjogYiJBQUFcbkJCQlxuQ0NDXG5YXHJZXHJcbloiLAorICAgICAgICAgICAgIlxuIjogYiJBQUFcbkJCQlxuQ0NDXG5YXHJZXHJcbloiLAorICAgICAgICAgICAgIlxyIjogYiJBQUFcckJCQlxyQ0NDXHJYXHJZXHJccloiLAorICAgICAgICAgICAgIlxyXG4iOiBiIkFBQVxyXG5CQkJcclxuQ0NDXHJcblhccllcclxyXG5aIiwKKyAgICAgICAgICAgIH0KKyAgICAgICAgdGVzdHMgPSBbKE5vbmUsIHRlc3RkaWN0W29zLmxpbmVzZXBdKV0gKyBzb3J0ZWQodGVzdGRpY3QuaXRlbXMoKSkKKyAgICAgICAgZm9yIG5ld2xpbmUsIGV4cGVjdGVkIGluIHRlc3RzOgorICAgICAgICAgICAgYnVmID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihidWYsIGVuY29kaW5nPSJhc2NpaSIsIG5ld2xpbmU9bmV3bGluZSkKKyAgICAgICAgICAgIHR4dC53cml0ZSgiQUFBXG5CIikKKyAgICAgICAgICAgIHR4dC53cml0ZSgiQkJcbkNDQ1xuIikKKyAgICAgICAgICAgIHR4dC53cml0ZSgiWFxyWVxyXG5aIikKKyAgICAgICAgICAgIHR4dC5mbHVzaCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5jbG9zZWQsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICBsID0gW10KKyAgICAgICAgYmFzZSA9IHNlbGYuQnl0ZXNJTworICAgICAgICBjbGFzcyBNeUJ5dGVzSU8oYmFzZSk6CisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgbC5hcHBlbmQoc2VsZi5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgICAgIGJhc2UuY2xvc2Uoc2VsZikKKyAgICAgICAgYiA9IE15Qnl0ZXNJTygpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdC53cml0ZSgiYWJjIikKKyAgICAgICAgZGVsIHQKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYiJhYmMiXSwgbCkKKworICAgIGRlZiB0ZXN0X292ZXJyaWRlX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHJlY29yZCA9IFtdCisgICAgICAgIGNsYXNzIE15VGV4dElPKHNlbGYuVGV4dElPV3JhcHBlcik6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmID0gc3VwZXIoTXlUZXh0SU8sIHNlbGYpLl9fZGVsX18KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgc3VwZXIoTXlUZXh0SU8sIHNlbGYpLmNsb3NlKCkKKyAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDMpCisgICAgICAgICAgICAgICAgc3VwZXIoTXlUZXh0SU8sIHNlbGYpLmZsdXNoKCkKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIHQgPSBNeVRleHRJTyhiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICBkZWwgdAorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgWzEsIDIsIDNdKQorCisgICAgZGVmIHRlc3RfZXJyb3JfdGhyb3VnaF9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZXhjZXB0aW9uIHN0YXRlIGlzIG5vdCBtb2RpZmllZCBieSBhIGRlc3RydWN0b3IsCisgICAgICAgICMgZXZlbiBpZiBjbG9zZSgpIGZhaWxzLgorICAgICAgICByYXdpbyA9IHNlbGYuQ2xvc2VGYWlsdXJlSU8oKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc2VsZi5UZXh0SU9XcmFwcGVyKHJhd2lvKS54eXp6eQorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGYpCisgICAgICAgIHMgPSBzLmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiBzOgorICAgICAgICAgICAgIyBUaGUgZGVzdHJ1Y3RvciAqbWF5KiBoYXZlIHByaW50ZWQgYW4gdW5yYWlzYWJsZSBlcnJvciwgY2hlY2sgaXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuc3BsaXRsaW5lcygpKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBJT0Vycm9yOiAiKSwgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKCIgaWdub3JlZCIpLCBzKQogCiAgICAgIyBTeXN0ZW1hdGljIHRlc3RzIG9mIHRoZSB0ZXh0IEkvTyBBUEkKIAotICAgIGRlZiB0ZXN0QmFzaWNJTyhzZWxmKToKKyAgICBkZWYgdGVzdF9iYXNpY19pbyhzZWxmKToKICAgICAgICAgZm9yIGNodW5rc2l6ZSBpbiAoMSwgMiwgMywgNCwgNSwgMTUsIDE2LCAxNywgMzEsIDMyLCAzMywgNjMsIDY0LCA2NSk6CiAgICAgICAgICAgICBmb3IgZW5jIGluICJhc2NpaSIsICJsYXRpbjEiLCAidXRmOCIgOiMgLCAidXRmLTE2LWJlIiwgInV0Zi0xNi1sZSI6Ci0gICAgICAgICAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIncrIiwgZW5jb2Rpbmc9ZW5jKQorICAgICAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3KyIsIGVuY29kaW5nPWVuYykKICAgICAgICAgICAgICAgICBmLl9DSFVOS19TSVpFID0gY2h1bmtzaXplCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi53cml0ZSh1ImFiYyIpLCAzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZSgiYWJjIiksIDMpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInIrIiwgZW5jb2Rpbmc9ZW5jKQorICAgICAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyKyIsIGVuY29kaW5nPWVuYykKICAgICAgICAgICAgICAgICBmLl9DSFVOS19TSVpFID0gY2h1bmtzaXplCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi50ZWxsKCksIDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksIHUiYWJjIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJhYmMiKQogICAgICAgICAgICAgICAgIGNvb2tpZSA9IGYudGVsbCgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5zZWVrKDApLCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgyKSwgdSJhYiIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKDEpLCB1ImMiKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgxKSwgdSIiKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgpLCB1IiIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi50ZWxsKCksIGNvb2tpZSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnNlZWsoMCksIDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5zZWVrKDAsIDIpLCBjb29raWUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi53cml0ZSh1ImRlZiIpLCAzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuc2Vlayhjb29raWUpLCBjb29raWUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksIHUiZGVmIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwKSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChOb25lKSwgImFiYyIpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMiksICJhYiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksICJjIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgIiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgIiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgY29va2llKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDApLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDAsIDIpLCBjb29raWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKCJkZWYiKSwgMykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vlayhjb29raWUpLCBjb29raWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgImRlZiIpCiAgICAgICAgICAgICAgICAgaWYgZW5jLnN0YXJ0c3dpdGgoInV0ZiIpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLm11bHRpX2xpbmVfdGVzdChmLCBlbmMpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCkBAIC0xMDQ0LDEzICsxOTE0LDEzIEBACiAgICAgZGVmIG11bHRpX2xpbmVfdGVzdChzZWxmLCBmLCBlbmMpOgogICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgZi50cnVuY2F0ZSgpCi0gICAgICAgIHNhbXBsZSA9IHUic1x4ZmZcdTBmZmZcdWZmZmYiCisgICAgICAgIHNhbXBsZSA9ICJzXHhmZlx1MGZmZlx1ZmZmZiIKICAgICAgICAgd2xpbmVzID0gW10KICAgICAgICAgZm9yIHNpemUgaW4gKDAsIDEsIDIsIDMsIDQsIDUsIDMwLCAzMSwgMzIsIDMzLCA2MiwgNjMsIDY0LCA2NSwgMTAwMCk6CiAgICAgICAgICAgICBjaGFycyA9IFtdCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzaXplKToKICAgICAgICAgICAgICAgICBjaGFycy5hcHBlbmQoc2FtcGxlW2kgJSBsZW4oc2FtcGxlKV0pCi0gICAgICAgICAgICBsaW5lID0gdSIiLmpvaW4oY2hhcnMpICsgdSJcbiIKKyAgICAgICAgICAgIGxpbmUgPSAiIi5qb2luKGNoYXJzKSArICJcbiIKICAgICAgICAgICAgIHdsaW5lcy5hcHBlbmQoKGYudGVsbCgpLCBsaW5lKSkKICAgICAgICAgICAgIGYud3JpdGUobGluZSkKICAgICAgICAgZi5zZWVrKDApCkBAIC0xMDYxLDc5ICsxOTMxLDgyIEBACiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgcmxpbmVzLmFwcGVuZCgocG9zLCBsaW5lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmxpbmVzLCB3bGluZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmxpbmVzLCB3bGluZXMpCiAKLSAgICBkZWYgdGVzdFRlbGxpbmcoc2VsZik6Ci0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3KyIsIGVuY29kaW5nPSJ1dGY4IikKKyAgICBkZWYgdGVzdF90ZWxsaW5nKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidysiLCBlbmNvZGluZz0idXRmOCIpCiAgICAgICAgIHAwID0gZi50ZWxsKCkKLSAgICAgICAgZi53cml0ZSh1Ilx4ZmZcbiIpCisgICAgICAgIGYud3JpdGUoIlx4ZmZcbiIpCiAgICAgICAgIHAxID0gZi50ZWxsKCkKLSAgICAgICAgZi53cml0ZSh1Ilx4ZmZcbiIpCisgICAgICAgIGYud3JpdGUoIlx4ZmZcbiIpCiAgICAgICAgIHAyID0gZi50ZWxsKCkKICAgICAgICAgZi5zZWVrKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYudGVsbCgpLCBwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkbGluZSgpLCB1Ilx4ZmZcbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYudGVsbCgpLCBwMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkbGluZSgpLCB1Ilx4ZmZcbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYudGVsbCgpLCBwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCAiXHhmZlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCAiXHhmZlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcDIpCiAgICAgICAgIGYuc2VlaygwKQogICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGluZSwgdSJceGZmXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCAiXHhmZlxuIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGYudGVsbCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi50ZWxsKCksIHAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwMikKICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICBkZWYgdGVzdFNlZWtpbmcoc2VsZik6Ci0gICAgICAgIGNodW5rX3NpemUgPSBpby5UZXh0SU9XcmFwcGVyLl9DSFVOS19TSVpFCisgICAgZGVmIHRlc3Rfc2Vla2luZyhzZWxmKToKKyAgICAgICAgY2h1bmtfc2l6ZSA9IF9kZWZhdWx0X2NodW5rX3NpemUoKQogICAgICAgICBwcmVmaXhfc2l6ZSA9IGNodW5rX3NpemUgLSAyCiAgICAgICAgIHVfcHJlZml4ID0gImEiICogcHJlZml4X3NpemUKICAgICAgICAgcHJlZml4ID0gYnl0ZXModV9wcmVmaXguZW5jb2RlKCJ1dGYtOCIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4odV9wcmVmaXgpLCBsZW4ocHJlZml4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odV9wcmVmaXgpLCBsZW4ocHJlZml4KSkKICAgICAgICAgdV9zdWZmaXggPSAiXHU4ODg4XG4iCiAgICAgICAgIHN1ZmZpeCA9IGJ5dGVzKHVfc3VmZml4LmVuY29kZSgidXRmLTgiKSkKICAgICAgICAgbGluZSA9IHByZWZpeCArIHN1ZmZpeAotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKQogICAgICAgICBmLndyaXRlKGxpbmUqMikKICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInIiLCBlbmNvZGluZz0idXRmLTgiKQogICAgICAgICBzID0gZi5yZWFkKHByZWZpeF9zaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLCB1bmljb2RlKHByZWZpeCwgImFzY2lpIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYudGVsbCgpLCBwcmVmaXhfc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkbGluZSgpLCB1X3N1ZmZpeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBwcmVmaXguZGVjb2RlKCJhc2NpaSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwcmVmaXhfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksIHVfc3VmZml4KQogCi0gICAgZGVmIHRlc3RTZWVraW5nVG9vKHNlbGYpOgorICAgIGRlZiB0ZXN0X3NlZWtpbmdfdG9vKHNlbGYpOgogICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzcGVjaWZpYyBidWcKICAgICAgICAgZGF0YSA9IGInXHhlMFx4YmZceGJmXG4nCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCiAgICAgICAgIGYud3JpdGUoZGF0YSkKICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInIiLCBlbmNvZGluZz0idXRmLTgiKQogICAgICAgICBmLl9DSFVOS19TSVpFICAjIEp1c3QgdGVzdCB0aGF0IGl0IGV4aXN0cwogICAgICAgICBmLl9DSFVOS19TSVpFID0gMgogICAgICAgICBmLnJlYWRsaW5lKCkKICAgICAgICAgZi50ZWxsKCkKIAotICAgIGRlZiB0ZXN0U2Vla0FuZFRlbGwoc2VsZik6Ci0gICAgICAgICIiIlRlc3Qgc2Vlay90ZWxsIHVzaW5nIHRoZSBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2Rlci4iIiIKKyAgICBkZWYgdGVzdF9zZWVrX2FuZF90ZWxsKHNlbGYpOgorICAgICAgICAjVGVzdCBzZWVrL3RlbGwgdXNpbmcgdGhlIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyLgorICAgICAgICAjIE1ha2UgdGVzdCBmYXN0ZXIgYnkgZG9pbmcgc21hbGxlciBzZWVrcworICAgICAgICBDSFVOS19TSVpFID0gMTI4CiAKLSAgICAgICAgZGVmIHRlc3RTZWVrQW5kVGVsbFdpdGhEYXRhKGRhdGEsIG1pbl9wb3M9MCk6CisgICAgICAgIGRlZiB0ZXN0X3NlZWtfYW5kX3RlbGxfd2l0aF9kYXRhKGRhdGEsIG1pbl9wb3M9MCk6CiAgICAgICAgICAgICAiIiJUZWxsL3NlZWsgdG8gdmFyaW91cyBwb2ludHMgd2l0aGluIGEgZGF0YSBzdHJlYW0gYW5kIGVuc3VyZQogICAgICAgICAgICAgdGhhdCB0aGUgZGVjb2RlZCBkYXRhIHJldHVybmVkIGJ5IHJlYWQoKSBpcyBjb25zaXN0ZW50LiIiIgotICAgICAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpCiAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIGVuY29kaW5nPSd0ZXN0X2RlY29kZXInKQorICAgICAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgZW5jb2Rpbmc9J3Rlc3RfZGVjb2RlcicpCisgICAgICAgICAgICBmLl9DSFVOS19TSVpFID0gQ0hVTktfU0laRQogICAgICAgICAgICAgZGVjb2RlZCA9IGYucmVhZCgpCiAgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWluX3BvcywgbGVuKGRlY29kZWQpICsgMSk6ICMgc2VlayBwb3NpdGlvbnMKICAgICAgICAgICAgICAgICBmb3IgaiBpbiBbMSwgNSwgbGVuKGRlY29kZWQpIC0gaV06ICMgcmVhZCBsZW5ndGhzCi0gICAgICAgICAgICAgICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIGVuY29kaW5nPSd0ZXN0X2RlY29kZXInKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoaSksIGRlY29kZWRbOmldKQorICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBlbmNvZGluZz0ndGVzdF9kZWNvZGVyJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoaSksIGRlY29kZWRbOmldKQogICAgICAgICAgICAgICAgICAgICBjb29raWUgPSBmLnRlbGwoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoaiksIGRlY29kZWRbaTppICsgal0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKGopLCBkZWNvZGVkW2k6aSArIGpdKQogICAgICAgICAgICAgICAgICAgICBmLnNlZWsoY29va2llKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgZGVjb2RlZFtpOl0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRlY29kZWRbaTpdKQogICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICAjIEVuYWJsZSB0aGUgdGVzdCBkZWNvZGVyLgpAQCAtMTE0MywyMyArMjAxNiwyMiBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIFRyeSBlYWNoIHRlc3QgY2FzZS4KICAgICAgICAgICAgIGZvciBpbnB1dCwgXywgXyBpbiBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2RlclRlc3QudGVzdF9jYXNlczoKLSAgICAgICAgICAgICAgICB0ZXN0U2Vla0FuZFRlbGxXaXRoRGF0YShpbnB1dCkKKyAgICAgICAgICAgICAgICB0ZXN0X3NlZWtfYW5kX3RlbGxfd2l0aF9kYXRhKGlucHV0KQogCiAgICAgICAgICAgICAjIFBvc2l0aW9uIGVhY2ggdGVzdCBjYXNlIHNvIHRoYXQgaXQgY3Jvc3NlcyBhIGNodW5rIGJvdW5kYXJ5LgotICAgICAgICAgICAgQ0hVTktfU0laRSA9IGlvLlRleHRJT1dyYXBwZXIuX0NIVU5LX1NJWkUKICAgICAgICAgICAgIGZvciBpbnB1dCwgXywgXyBpbiBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2RlclRlc3QudGVzdF9jYXNlczoKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBDSFVOS19TSVpFIC0gbGVuKGlucHV0KS8vMgogICAgICAgICAgICAgICAgIHByZWZpeCA9IGInLicqb2Zmc2V0CiAgICAgICAgICAgICAgICAgIyBEb24ndCBib3RoZXIgc2Vla2luZyBpbnRvIHRoZSBwcmVmaXggKHRha2VzIHRvbyBsb25nKS4KICAgICAgICAgICAgICAgICBtaW5fcG9zID0gb2Zmc2V0KjIKLSAgICAgICAgICAgICAgICB0ZXN0U2Vla0FuZFRlbGxXaXRoRGF0YShwcmVmaXggKyBpbnB1dCwgbWluX3BvcykKKyAgICAgICAgICAgICAgICB0ZXN0X3NlZWtfYW5kX3RlbGxfd2l0aF9kYXRhKHByZWZpeCArIGlucHV0LCBtaW5fcG9zKQogCiAgICAgICAgICMgRW5zdXJlIG91ciB0ZXN0IGRlY29kZXIgd29uJ3QgaW50ZXJmZXJlIHdpdGggc3Vic2VxdWVudCB0ZXN0cy4KICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyLmNvZGVjRW5hYmxlZCA9IDAKIAotICAgIGRlZiB0ZXN0RW5jb2RlZFdyaXRlcyhzZWxmKToKLSAgICAgICAgZGF0YSA9IHUiMTIzNDU2Nzg5MCIKKyAgICBkZWYgdGVzdF9lbmNvZGVkX3dyaXRlcyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICIxMjM0NTY3ODkwIgogICAgICAgICB0ZXN0cyA9ICgidXRmLTE2IiwKICAgICAgICAgICAgICAgICAgInV0Zi0xNi1sZSIsCiAgICAgICAgICAgICAgICAgICJ1dGYtMTYtYmUiLApAQCAtMTE2Nyw3NiArMjAzOSw1NiBAQAogICAgICAgICAgICAgICAgICAidXRmLTMyLWxlIiwKICAgICAgICAgICAgICAgICAgInV0Zi0zMi1iZSIpCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiB0ZXN0czoKLSAgICAgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQotICAgICAgICAgICAgZiA9IGlvLlRleHRJT1dyYXBwZXIoYnVmLCBlbmNvZGluZz1lbmNvZGluZykKKyAgICAgICAgICAgIGJ1ZiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgICAgICBmID0gc2VsZi5UZXh0SU9XcmFwcGVyKGJ1ZiwgZW5jb2Rpbmc9ZW5jb2RpbmcpCiAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSBCT00gaXMgd3JpdHRlbiBvbmx5IG9uY2UgKHNlZSBpc3N1ZTE3NTMpLgogICAgICAgICAgICAgZi53cml0ZShkYXRhKQogICAgICAgICAgICAgZi53cml0ZShkYXRhKQogICAgICAgICAgICAgZi5zZWVrKDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgZGF0YSAqIDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWYuZ2V0dmFsdWUoKSwgKGRhdGEgKiAyKS5lbmNvZGUoZW5jb2RpbmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSAqIDIpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEgKiAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYuZ2V0dmFsdWUoKSwgKGRhdGEgKiAyKS5lbmNvZGUoZW5jb2RpbmcpKQogCi0gICAgZGVmIHRpbWluZ1Rlc3Qoc2VsZik6Ci0gICAgICAgIHRpbWVyID0gdGltZS50aW1lCi0gICAgICAgIGVuYyA9ICJ1dGY4IgotICAgICAgICBsaW5lID0gIlwwXHgwZlx4ZmZcdTBmZmZcdWZmZmZcVTAwMGZmZmZmXFUwMDEwZmZmZiIqMyArICJcbiIKLSAgICAgICAgbmxpbmVzID0gMTAwMDAKLSAgICAgICAgbmNoYXJzID0gbGVuKGxpbmUpCi0gICAgICAgIG5ieXRlcyA9IGxlbihsaW5lLmVuY29kZShlbmMpKQotICAgICAgICBmb3IgY2h1bmtfc2l6ZSBpbiAoMzIsIDY0LCAxMjgsIDI1Nik6Ci0gICAgICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidysiLCBlbmNvZGluZz1lbmMpCi0gICAgICAgICAgICBmLl9DSFVOS19TSVpFID0gY2h1bmtfc2l6ZQotICAgICAgICAgICAgdDAgPSB0aW1lcigpCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShubGluZXMpOgotICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKLSAgICAgICAgICAgIGYuZmx1c2goKQotICAgICAgICAgICAgdDEgPSB0aW1lcigpCi0gICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgdDIgPSB0aW1lcigpCi0gICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgIHdoaWxlIGYucmVhZGxpbmUoKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICB0MyA9IHRpbWVyKCkKLSAgICAgICAgICAgIGYuc2VlaygwKQotICAgICAgICAgICAgd2hpbGUgZi5yZWFkbGluZSgpOgotICAgICAgICAgICAgICAgIGYudGVsbCgpCi0gICAgICAgICAgICB0NCA9IHRpbWVyKCkKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIlxuVGltaW5nIHRlc3Q6ICVkIGxpbmVzIG9mICVkIGNoYXJhY3RlcnMgKCVkIGJ5dGVzKSIgJQotICAgICAgICAgICAgICAgICAgICAgIChubGluZXMsIG5jaGFycywgbmJ5dGVzKSkKLSAgICAgICAgICAgICAgICBwcmludCgiRmlsZSBjaHVuayBzaXplOiAgICAgICAgICAlNnMiICUgZi5fQ0hVTktfU0laRSkKLSAgICAgICAgICAgICAgICBwcmludCgiV3JpdGluZzogICAgICAgICAgICAgICAgICAlNi4zZiBzZWNvbmRzIiAlICh0MS10MCkpCi0gICAgICAgICAgICAgICAgcHJpbnQoIlJlYWRpbmcgdXNpbmcgaXRlcmF0aW9uOiAgJTYuM2Ygc2Vjb25kcyIgJSAodDItdDEpKQotICAgICAgICAgICAgICAgIHByaW50KCJSZWFkaW5nIHVzaW5nIHJlYWRsaW5lKCk6ICU2LjNmIHNlY29uZHMiICUgKHQzLXQyKSkKLSAgICAgICAgICAgICAgICBwcmludCgiVXNpbmcgcmVhZGxpbmUoKSt0ZWxsKCk6ICAlNi4zZiBzZWNvbmRzIiAlICh0NC10MykpCisgICAgZGVmIHRlc3RfdW5yZWFkYWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgVW5SZWFkYWJsZShzZWxmLkJ5dGVzSU8pOgorICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoVW5SZWFkYWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQucmVhZCkKIAotICAgIGRlZiB0ZXN0UmVhZE9uZUJ5T25lKHNlbGYpOgotICAgICAgICB0eHQgPSBpby5UZXh0SU9XcmFwcGVyKGlvLkJ5dGVzSU8oYiJBQVxyXG5CQiIpKQorICAgIGRlZiB0ZXN0X3JlYWRfb25lX2J5X29uZShzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhiIkFBXHJcbkJCIikpCiAgICAgICAgIHJlYWRzID0gIiIKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGMgPSB0eHQucmVhZCgxKQogICAgICAgICAgICAgaWYgbm90IGM6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHJlYWRzICs9IGMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhZHMsICJBQVxuQkIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRzLCAiQUFcbkJCIikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhiIkFBXG5CQlxuQ0MiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eHQucmVhZGxpbmVzKCksIFsiQUFcbiIsICJCQlxuIiwgIkNDIl0pCisgICAgICAgIHR4dC5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWRsaW5lcyhOb25lKSwgWyJBQVxuIiwgIkJCXG4iLCAiQ0MiXSkKKyAgICAgICAgdHh0LnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eHQucmVhZGxpbmVzKDUpLCBbIkFBXG4iLCAiQkJcbiJdKQogCiAgICAgIyByZWFkIGluIGFtb3VudHMgZXF1YWwgdG8gVGV4dElPV3JhcHBlci5fQ0hVTktfU0laRSB3aGljaCBpcyAxMjguCi0gICAgZGVmIHRlc3RSZWFkQnlDaHVuayhzZWxmKToKKyAgICBkZWYgdGVzdF9yZWFkX2J5X2NodW5rKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSAiXHJcbiIgc3RyYWRkbGVzIDEyOCBjaGFyIGJvdW5kYXJ5LgotICAgICAgICB0eHQgPSBpby5UZXh0SU9XcmFwcGVyKGlvLkJ5dGVzSU8oYiJBIiAqIDEyNyArIGIiXHJcbkIiKSkKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhiIkEiICogMTI3ICsgYiJcclxuQiIpKQogICAgICAgICByZWFkcyA9ICIiCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBjID0gdHh0LnJlYWQoMTI4KQogICAgICAgICAgICAgaWYgbm90IGM6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHJlYWRzICs9IGMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhZHMsICJBIioxMjcrIlxuQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZHMsICJBIioxMjcrIlxuQiIpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTEzOTVfMShzZWxmKToKLSAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihpby5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQogCiAgICAgICAgICMgcmVhZCBvbmUgY2hhciBhdCBhIHRpbWUKICAgICAgICAgcmVhZHMgPSAiIgpAQCAtMTI0NSwxMCArMjA5NywxMCBAQAogICAgICAgICAgICAgaWYgbm90IGM6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHJlYWRzICs9IGMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhZHMsIHNlbGYubm9ybWFsaXplZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkcywgc2VsZi5ub3JtYWxpemVkKQogCiAgICAgZGVmIHRlc3RfaXNzdWUxMzk1XzIoc2VsZik6Ci0gICAgICAgIHR4dCA9IGlvLlRleHRJT1dyYXBwZXIoaW8uQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKICAgICAgICAgdHh0Ll9DSFVOS19TSVpFID0gNAogCiAgICAgICAgIHJlYWRzID0gIiIKQEAgLTEyNTcsMTAgKzIxMDksMTAgQEAKICAgICAgICAgICAgIGlmIG5vdCBjOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICByZWFkcyArPSBjCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWRzLCBzZWxmLm5vcm1hbGl6ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZHMsIHNlbGYubm9ybWFsaXplZCkKIAogICAgIGRlZiB0ZXN0X2lzc3VlMTM5NV8zKHNlbGYpOgotICAgICAgICB0eHQgPSBpby5UZXh0SU9XcmFwcGVyKGlvLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCiAgICAgICAgIHR4dC5fQ0hVTktfU0laRSA9IDQKIAogICAgICAgICByZWFkcyA9IHR4dC5yZWFkKDQpCkBAIC0xMjY4LDQwICsyMTIwLDE1MSBAQAogICAgICAgICByZWFkcyArPSB0eHQucmVhZGxpbmUoKQogICAgICAgICByZWFkcyArPSB0eHQucmVhZGxpbmUoKQogICAgICAgICByZWFkcyArPSB0eHQucmVhZGxpbmUoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWFkcywgc2VsZi5ub3JtYWxpemVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRzLCBzZWxmLm5vcm1hbGl6ZWQpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTEzOTVfNChzZWxmKToKLSAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihpby5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQogICAgICAgICB0eHQuX0NIVU5LX1NJWkUgPSA0CiAKICAgICAgICAgcmVhZHMgPSB0eHQucmVhZCg0KQogICAgICAgICByZWFkcyArPSB0eHQucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWRzLCBzZWxmLm5vcm1hbGl6ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZHMsIHNlbGYubm9ybWFsaXplZCkKIAogICAgIGRlZiB0ZXN0X2lzc3VlMTM5NV81KHNlbGYpOgotICAgICAgICB0eHQgPSBpby5UZXh0SU9XcmFwcGVyKGlvLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCiAgICAgICAgIHR4dC5fQ0hVTktfU0laRSA9IDQKIAogICAgICAgICByZWFkcyA9IHR4dC5yZWFkKDQpCiAgICAgICAgIHBvcyA9IHR4dC50ZWxsKCkKICAgICAgICAgdHh0LnNlZWsoMCkKICAgICAgICAgdHh0LnNlZWsocG9zKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0eHQucmVhZCg0KSwgIkJCQlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eHQucmVhZCg0KSwgIkJCQlxuIikKIAogICAgIGRlZiB0ZXN0X2lzc3VlMjI4MihzZWxmKToKLSAgICAgICAgYnVmZmVyID0gaW8uQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKQotICAgICAgICB0eHQgPSBpby5UZXh0SU9XcmFwcGVyKGJ1ZmZlciwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgYnVmZmVyID0gc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpCisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihidWZmZXIsIGVuY29kaW5nPSJhc2NpaSIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZmZXIuc2Vla2FibGUoKSwgdHh0LnNlZWthYmxlKCkpCiAKLSAgICBkZWYgY2hlY2tfbmV3bGluZV9kZWNvZGVyX3V0Zjgoc2VsZiwgZGVjb2Rlcik6CisgICAgZGVmIHRlc3RfYXBwZW5kX2JvbShzZWxmKToKKyAgICAgICAgIyBUaGUgQk9NIGlzIG5vdCB3cml0dGVuIGFnYWluIHdoZW4gYXBwZW5kaW5nIHRvIGEgbm9uLWVtcHR5IGZpbGUKKyAgICAgICAgZmlsZW5hbWUgPSBzdXBwb3J0LlRFU1RGTgorICAgICAgICBmb3IgY2hhcnNldCBpbiAoJ3V0Zi04LXNpZycsICd1dGYtMTYnLCAndXRmLTMyJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ3cnLCBlbmNvZGluZz1jaGFyc2V0KSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ2FhYScpCisgICAgICAgICAgICAgICAgcG9zID0gZi50ZWxsKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdhYWEnLmVuY29kZShjaGFyc2V0KSkKKworICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICdhJywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCd4eHgnKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2FhYXh4eCcuZW5jb2RlKGNoYXJzZXQpKQorCisgICAgZGVmIHRlc3Rfc2Vla19ib20oc2VsZik6CisgICAgICAgICMgU2FtZSB0ZXN0LCBidXQgd2hlbiBzZWVraW5nIG1hbnVhbGx5CisgICAgICAgIGZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4KKyAgICAgICAgZm9yIGNoYXJzZXQgaW4gKCd1dGYtOC1zaWcnLCAndXRmLTE2JywgJ3V0Zi0zMicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICd3JywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdhYWEnKQorICAgICAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ3IrJywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ3p6eicpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgZi53cml0ZSgnYmJiJykKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdiYmJ6enonLmVuY29kZShjaGFyc2V0KSkKKworICAgIGRlZiB0ZXN0X2Vycm9yc19wcm9wZXJ0eShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5lcnJvcnMsICJzdHJpY3QiKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInciLCBlcnJvcnM9InJlcGxhY2UiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmVycm9ycywgInJlcGxhY2UiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdF90aHJlYWRzX3dyaXRlKHNlbGYpOgorICAgICAgICAjIElzc3VlNjc1MDogY29uY3VycmVudCB3cml0ZXMgY291bGQgZHVwbGljYXRlIGRhdGEKKyAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInciLCBidWZmZXJpbmc9MSkgYXMgZjoKKyAgICAgICAgICAgIGRlZiBydW4obik6CisgICAgICAgICAgICAgICAgdGV4dCA9ICJUaHJlYWQlMDNkXG4iICUgbgorICAgICAgICAgICAgICAgIGV2ZW50LndhaXQoKQorICAgICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKKyAgICAgICAgICAgIHRocmVhZHMgPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhIG49eDogcnVuKG4pKQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZSgyMCldCisgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKQorICAgICAgICAgICAgZXZlbnQuc2V0KCkKKyAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4pIGFzIGY6CisgICAgICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGZvciBuIGluIHJhbmdlKDIwKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnQuY291bnQoIlRocmVhZCUwM2RcbiIgJSBuKSwgMSkKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgdHh0LmZsdXNoID0gYmFkX2ZsdXNoCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHR4dC5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorCisgICAgZGVmIHRlc3RfbXVsdGlfY2xvc2Uoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHR4dC5jbG9zZSgpCisgICAgICAgIHR4dC5jbG9zZSgpCisgICAgICAgIHR4dC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR4dC5mbHVzaCkKKworICAgIGRlZiB0ZXN0X3JlYWRvbmx5X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIGJ1ZiA9IHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKSk6CisgICAgICAgICAgICB0eHQuYnVmZmVyID0gYnVmCisKK2NsYXNzIENUZXh0SU9XcmFwcGVyVGVzdChUZXh0SU9XcmFwcGVyVGVzdCk6CisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgciA9IHNlbGYuQnl0ZXNJTyhiIlx4YzNceGE5XG5cbiIpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkUmVhZGVyKHIsIDEwMDApCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Ll9faW5pdF9fLCBiLCBuZXdsaW5lPTQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuX19pbml0X18sIGIsIG5ld2xpbmU9J3h5enp5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5yZWFkKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIEMgVGV4dElPV3JhcHBlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcworICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCisgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGluIGdjLmdhcmJhZ2UgaW5zdGVhZC4KKyAgICAgICAgcmF3aW8gPSBpby5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHJhd2lvKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHQud3JpdGUoIjQ1NmRlZiIpCisgICAgICAgIHQueCA9IHQKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih0KQorICAgICAgICBkZWwgdAorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIjQ1NmRlZiIpCisKK2NsYXNzIFB5VGV4dElPV3JhcHBlclRlc3QoVGV4dElPV3JhcHBlclRlc3QpOgorICAgIHBhc3MKKworCitjbGFzcyBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tfbmV3bGluZV9kZWNvZGluZ191dGY4KHNlbGYsIGRlY29kZXIpOgogICAgICAgICAjIFVURi04IHNwZWNpZmljIHRlc3RzIGZvciBhIG5ld2xpbmUgZGVjb2RlcgogICAgICAgICBkZWYgX2NoZWNrX2RlY29kZShiLCBzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICAjIFdlIGV4ZXJjaXNlIGdldHN0YXRlKCkgLyBzZXRzdGF0ZSgpIGFzIHdlbGwgYXMgZGVjb2RlKCkKICAgICAgICAgICAgIHN0YXRlID0gZGVjb2Rlci5nZXRzdGF0ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLmRlY29kZShiLCAqKmt3YXJncyksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKGIsICoqa3dhcmdzKSwgcykKICAgICAgICAgICAgIGRlY29kZXIuc2V0c3RhdGUoc3RhdGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLmRlY29kZShiLCAqKmt3YXJncyksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKGIsICoqa3dhcmdzKSwgcykKIAogICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHhlOFx4YTJceDg4JywgIlx1ODg4OCIpCiAKQEAgLTEzMzYsNTQgKzIyOTksNzMgQEAKICAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4ZThceGEyXHg4OFxyJywgIlx1ODg4OCIpCiAgICAgICAgIF9jaGVja19kZWNvZGUoYidcbicsICJcbiIpCiAKLSAgICBkZWYgY2hlY2tfbmV3bGluZV9kZWNvZGVyKHNlbGYsIGRlY29kZXIsIGVuY29kaW5nKToKKyAgICBkZWYgY2hlY2tfbmV3bGluZV9kZWNvZGluZyhzZWxmLCBkZWNvZGVyLCBlbmNvZGluZyk6CiAgICAgICAgIHJlc3VsdCA9IFtdCi0gICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKGVuY29kaW5nKSgpCi0gICAgICAgIGRlZiBfZGVjb2RlX2J5dGV3aXNlKHMpOgotICAgICAgICAgICAgZm9yIGIgaW4gZW5jb2Rlci5lbmNvZGUocyk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkZWNvZGVyLmRlY29kZShiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5uZXdsaW5lcywgTm9uZSkKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcihlbmNvZGluZykoKQorICAgICAgICAgICAgZGVmIF9kZWNvZGVfYnl0ZXdpc2Uocyk6CisgICAgICAgICAgICAgICAgIyBEZWNvZGUgb25lIGJ5dGUgYXQgYSB0aW1lCisgICAgICAgICAgICAgICAgZm9yIGIgaW4gZW5jb2Rlci5lbmNvZGUocyk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVjb2Rlci5kZWNvZGUoYikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbmNvZGVyID0gTm9uZQorICAgICAgICAgICAgZGVmIF9kZWNvZGVfYnl0ZXdpc2Uocyk6CisgICAgICAgICAgICAgICAgIyBEZWNvZGUgb25lIGNoYXIgYXQgYSB0aW1lCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkZWNvZGVyLmRlY29kZShjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCBOb25lKQogICAgICAgICBfZGVjb2RlX2J5dGV3aXNlKCJhYmNcblxyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5uZXdsaW5lcywgJ1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCAnXG4nKQogICAgICAgICBfZGVjb2RlX2J5dGV3aXNlKCJcbmFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIubmV3bGluZXMsICgnXG4nLCAnXHJcbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIubmV3bGluZXMsICgnXG4nLCAnXHJcbicpKQogICAgICAgICBfZGVjb2RlX2J5dGV3aXNlKCJhYmNcciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIubmV3bGluZXMsICgnXG4nLCAnXHJcbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIubmV3bGluZXMsICgnXG4nLCAnXHJcbicpKQogICAgICAgICBfZGVjb2RlX2J5dGV3aXNlKCJhYmMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLm5ld2xpbmVzLCAoJ1xyJywgJ1xuJywgJ1xyXG4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCAoJ1xyJywgJ1xuJywgJ1xyXG4nKSkKICAgICAgICAgX2RlY29kZV9ieXRld2lzZSgiYWJjXHIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiIi5qb2luKHJlc3VsdCksICJhYmNcblxuYWJjYWJjXG5hYmNhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiLmpvaW4ocmVzdWx0KSwgImFiY1xuXG5hYmNhYmNcbmFiY2FiYyIpCiAgICAgICAgIGRlY29kZXIucmVzZXQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLmRlY29kZSgiYWJjIi5lbmNvZGUoZW5jb2RpbmcpKSwgImFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIubmV3bGluZXMsIE5vbmUpCisgICAgICAgIGlucHV0ID0gImFiYyIKKyAgICAgICAgaWYgZW5jb2RlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVuY29kZXIucmVzZXQoKQorICAgICAgICAgICAgaW5wdXQgPSBlbmNvZGVyLmVuY29kZShpbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZShpbnB1dCksICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIubmV3bGluZXMsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9uZXdsaW5lX2RlY29kZXIoc2VsZik6CiAgICAgICAgIGVuY29kaW5ncyA9ICgKLSAgICAgICAgICAgICd1dGYtOCcsICdsYXRpbi0xJywKKyAgICAgICAgICAgICMgTm9uZSBtZWFuaW5nIHRoZSBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyIHRha2VzIHVuaWNvZGUgaW5wdXQKKyAgICAgICAgICAgICMgcmF0aGVyIHRoYW4gYnl0ZXMgaW5wdXQKKyAgICAgICAgICAgIE5vbmUsICd1dGYtOCcsICdsYXRpbi0xJywKICAgICAgICAgICAgICd1dGYtMTYnLCAndXRmLTE2LWxlJywgJ3V0Zi0xNi1iZScsCiAgICAgICAgICAgICAndXRmLTMyJywgJ3V0Zi0zMi1sZScsICd1dGYtMzItYmUnLAogICAgICAgICApCiAgICAgICAgIGZvciBlbmMgaW4gZW5jb2RpbmdzOgotICAgICAgICAgICAgZGVjb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoZW5jKSgpCi0gICAgICAgICAgICBkZWNvZGVyID0gaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihkZWNvZGVyLCB0cmFuc2xhdGU9VHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfbmV3bGluZV9kZWNvZGVyKGRlY29kZXIsIGVuYykKKyAgICAgICAgICAgIGRlY29kZXIgPSBlbmMgYW5kIGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoZW5jKSgpCisgICAgICAgICAgICBkZWNvZGVyID0gc2VsZi5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKGRlY29kZXIsIHRyYW5zbGF0ZT1UcnVlKQorICAgICAgICAgICAgc2VsZi5jaGVja19uZXdsaW5lX2RlY29kaW5nKGRlY29kZXIsIGVuYykKICAgICAgICAgZGVjb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoInV0Zi04IikoKQotICAgICAgICBkZWNvZGVyID0gaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihkZWNvZGVyLCB0cmFuc2xhdGU9VHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja19uZXdsaW5lX2RlY29kZXJfdXRmOChkZWNvZGVyKQorICAgICAgICBkZWNvZGVyID0gc2VsZi5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKGRlY29kZXIsIHRyYW5zbGF0ZT1UcnVlKQorICAgICAgICBzZWxmLmNoZWNrX25ld2xpbmVfZGVjb2RpbmdfdXRmOChkZWNvZGVyKQogCi0gICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6Ci0gICAgICAgIHR4dCA9IGlvLlRleHRJT1dyYXBwZXIoaW8uQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKLSAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCi0gICAgICAgIHR4dC5mbHVzaCA9IGJhZF9mbHVzaAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICBkZWYgdGVzdF9uZXdsaW5lX2J5dGVzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDU0MzM6IEV4Y2Vzc2l2ZSBvcHRpbWl6YXRpb24gaW4gSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcgorICAgICAgICBkZWYgX2NoZWNrKGRlYyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYy5uZXdsaW5lcywgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjLmRlY29kZSgiXHUwRDAwIiksICJcdTBEMDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWMubmV3bGluZXMsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYy5kZWNvZGUoIlx1MEEwMCIpLCAiXHUwQTAwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjLm5ld2xpbmVzLCBOb25lKQorICAgICAgICBkZWMgPSBzZWxmLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgdHJhbnNsYXRlPUZhbHNlKQorICAgICAgICBfY2hlY2soZGVjKQorICAgICAgICBkZWMgPSBzZWxmLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgdHJhbnNsYXRlPVRydWUpCisgICAgICAgIF9jaGVjayhkZWMpCiAKLSAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKLSAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihpby5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQotICAgICAgICB0eHQuY2xvc2UoKQotICAgICAgICB0eHQuY2xvc2UoKQotICAgICAgICB0eHQuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0eHQuZmx1c2gpCitjbGFzcyBDSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QoSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QpOgorICAgIHBhc3MKKworY2xhc3MgUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdChJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdCk6CisgICAgcGFzcwogCiAKICMgWFhYIFRlc3RzIGZvciBvcGVuKCkKQEAgLTEzOTEsNTQgKzIzNzMsMzc5IEBACiBjbGFzcyBNaXNjSU9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAotICAgIGRlZiB0ZXN0SW1wb3J0X19hbGxfXyhzZWxmKToKLSAgICAgICAgZm9yIG5hbWUgaW4gaW8uX19hbGxfXzoKLSAgICAgICAgICAgIG9iaiA9IGdldGF0dHIoaW8sIG5hbWUsIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ob2JqIGlzIG5vdCBOb25lLCBuYW1lKQorICAgIGRlZiB0ZXN0X19fYWxsX18oc2VsZik6CisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuaW8uX19hbGxfXzoKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIoc2VsZi5pbywgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmogaXMgbm90IE5vbmUsIG5hbWUpCiAgICAgICAgICAgICBpZiBuYW1lID09ICJvcGVuIjoKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxpZiAiZXJyb3IiIGluIG5hbWUubG93ZXIoKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhvYmosIEV4Y2VwdGlvbiksIG5hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKG9iaiwgaW8uSU9CYXNlKSkKLQorICAgICAgICAgICAgZWxpZiAiZXJyb3IiIGluIG5hbWUubG93ZXIoKSBvciBuYW1lID09ICJVbnN1cHBvcnRlZE9wZXJhdGlvbiI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Mob2JqLCBFeGNlcHRpb24pLCBuYW1lKQorICAgICAgICAgICAgZWxpZiBub3QgbmFtZS5zdGFydHN3aXRoKCJTRUVLXyIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKG9iaiwgc2VsZi5JT0Jhc2UpKQogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKLSAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYubW9kZSwgIndiIikKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5tb2RlLCAid2IiKQogICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiVSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYubmFtZSwgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLmJ1ZmZlci5uYW1lLCAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5idWZmZXIucmF3Lm5hbWUsIHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYubW9kZSwgICAgICAgICAgICAiVSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuYnVmZmVyLm1vZGUsICAgICAicmIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLmJ1ZmZlci5yYXcubW9kZSwgInJiIikKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIlUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgICAgICAgICAgICBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmJ1ZmZlci5uYW1lLCAgICAgc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIucmF3Lm5hbWUsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgICAgICAgICAgICAiVSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIubW9kZSwgICAgICJyYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIucmF3Lm1vZGUsICJyYiIpCiAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3KyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYubW9kZSwgICAgICAgICAgICAidysiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLmJ1ZmZlci5tb2RlLCAgICAgInJiKyIpICMgRG9lcyBpdCByZWFsbHkgbWF0dGVyPwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLmJ1ZmZlci5yYXcubW9kZSwgInJiKyIpCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3KyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5tb2RlLCAgICAgICAgICAgICJ3KyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIubW9kZSwgICAgICJyYisiKSAjIERvZXMgaXQgcmVhbGx5IG1hdHRlcj8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmJ1ZmZlci5yYXcubW9kZSwgInJiKyIpCiAKLSAgICAgICAgZyA9IGlvLm9wZW4oZi5maWxlbm8oKSwgIndiIiwgY2xvc2VmZD1GYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZy5tb2RlLCAgICAgIndiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZy5yYXcubW9kZSwgIndiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZy5uYW1lLCAgICAgZi5maWxlbm8oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZy5yYXcubmFtZSwgZi5maWxlbm8oKSkKKyAgICAgICAgZyA9IHNlbGYub3BlbihmLmZpbGVubygpLCAid2IiLCBjbG9zZWZkPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcubW9kZSwgICAgICJ3YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5yYXcubW9kZSwgIndiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLm5hbWUsICAgICBmLmZpbGVubygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcucmF3Lm5hbWUsIGYuZmlsZW5vKCkpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBnLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2lvX2FmdGVyX2Nsb3NlKHNlbGYpOgorICAgICAgICBmb3Iga3dhcmdzIGluIFsKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidyJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3YiJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3IiwgImJ1ZmZlcmluZyI6IDF9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3IiwgImJ1ZmZlcmluZyI6IDJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3YiIsICJidWZmZXJpbmciOiAwfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAiciJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJyYiJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJyIiwgImJ1ZmZlcmluZyI6IDF9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJyIiwgImJ1ZmZlcmluZyI6IDJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJyYiIsICJidWZmZXJpbmciOiAwfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidysifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidytiIn0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncrIiwgImJ1ZmZlcmluZyI6IDF9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3KyIsICJidWZmZXJpbmciOiAyfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidytiIiwgImJ1ZmZlcmluZyI6IDB9LAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICoqa3dhcmdzKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLmZsdXNoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5maWxlbm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLmlzYXR0eSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYuX19pdGVyX18pCisgICAgICAgICAgICBpZiBoYXNhdHRyKGYsICJwZWVrIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5wZWVrLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkKQorICAgICAgICAgICAgaWYgaGFzYXR0cihmLCAicmVhZDEiKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWQxLCAxMDI0KQorICAgICAgICAgICAgaWYgaGFzYXR0cihmLCAicmVhZGludG8iKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWRpbnRvLCBieXRlYXJyYXkoMTAyNCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWRsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkbGluZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnNlZWssIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnRlbGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnRydW5jYXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi53cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIiBpZiAiYiIgaW4ga3dhcmdzWydtb2RlJ10gZWxzZSAiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYud3JpdGVsaW5lcywgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuZXh0LCBmKQorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdpb2Vycm9yKHNlbGYpOgorICAgICAgICAjIFZhcmlvdXMgQmxvY2tpbmdJT0Vycm9yIGlzc3VlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuQmxvY2tpbmdJT0Vycm9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuQmxvY2tpbmdJT0Vycm9yLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuQmxvY2tpbmdJT0Vycm9yLCAxLCAyLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuQmxvY2tpbmdJT0Vycm9yLCAxLCAiIiwgTm9uZSkKKyAgICAgICAgYiA9IHNlbGYuQmxvY2tpbmdJT0Vycm9yKDEsICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY2hhcmFjdGVyc193cml0dGVuLCAwKQorICAgICAgICBjbGFzcyBDKHVuaWNvZGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjID0gQygiIikKKyAgICAgICAgYiA9IHNlbGYuQmxvY2tpbmdJT0Vycm9yKDEsIGMpCisgICAgICAgIGMuYiA9IGIKKyAgICAgICAgYi5jID0gYworICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMpCisgICAgICAgIGRlbCBjLCBiCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQorCisgICAgZGVmIHRlc3RfYWJjcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSB2aXNpYmxlIGJhc2UgY2xhc3NlcyBhcmUgQUJDcy4KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuSU9CYXNlLCBhYmMuQUJDTWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuUmF3SU9CYXNlLCBhYmMuQUJDTWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuQnVmZmVyZWRJT0Jhc2UsIGFiYy5BQkNNZXRhKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5UZXh0SU9CYXNlLCBhYmMuQUJDTWV0YSkKKworICAgIGRlZiBfY2hlY2tfYWJjX2luaGVyaXRhbmNlKHNlbGYsIGFiY21vZHVsZSk6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuSU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5SYXdJT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLkJ1ZmZlcmVkSU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5UZXh0SU9CYXNlKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuSU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5SYXdJT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLkJ1ZmZlcmVkSU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5UZXh0SU9CYXNlKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInciKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5JT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLlJhd0lPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuQnVmZmVyZWRJT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLlRleHRJT0Jhc2UpCisKKyAgICBkZWYgdGVzdF9hYmNfaW5oZXJpdGFuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBpbXBsZW1lbnRhdGlvbnMgaW5oZXJpdCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgQUJDcworICAgICAgICBzZWxmLl9jaGVja19hYmNfaW5oZXJpdGFuY2Uoc2VsZikKKworICAgIGRlZiB0ZXN0X2FiY19pbmhlcml0YW5jZV9vZmZpY2lhbChzZWxmKToKKyAgICAgICAgIyBUZXN0IGltcGxlbWVudGF0aW9ucyBpbmhlcml0IGZyb20gdGhlIG9mZmljaWFsIEFCQ3Mgb2YgdGhlCisgICAgICAgICMgYmFzZWxpbmUgImlvIiBtb2R1bGUuCisgICAgICAgIHNlbGYuX2NoZWNrX2FiY19pbmhlcml0YW5jZShpbykKKworY2xhc3MgQ01pc2NJT1Rlc3QoTWlzY0lPVGVzdCk6CisgICAgaW8gPSBpbworCitjbGFzcyBQeU1pc2NJT1Rlc3QoTWlzY0lPVGVzdCk6CisgICAgaW8gPSBweWlvCisKKworQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsICdQT1NJWCBzaWduYWxzIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFNpZ25hbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRhbHJtID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2VsZi5hbGFybV9pbnRlcnJ1cHQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNlbGYub2xkYWxybSkKKworICAgIGRlZiBhbGFybV9pbnRlcnJ1cHQoc2VsZiwgc2lnLCBmcmFtZSk6CisgICAgICAgIDEgLy8gMAorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGUoc2VsZiwgaXRlbSwgYnl0ZXMsICoqZmRvcGVuX2t3YXJncyk6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYSBwYXJ0aWFsIHdyaXRlLCB3aGVuIGl0IGdldHMgaW50ZXJydXB0ZWQsIHByb3Blcmx5CisgICAgICAgIGludm9rZXMgdGhlIHNpZ25hbCBoYW5kbGVyLCBhbmQgYnViYmxlcyB1cCB0aGUgZXhjZXB0aW9uIHJhaXNlZAorICAgICAgICBpbiB0aGUgbGF0dGVyLiIiIgorICAgICAgICByZWFkX3Jlc3VsdHMgPSBbXQorICAgICAgICBkZWYgX3JlYWQoKToKKyAgICAgICAgICAgIHMgPSBvcy5yZWFkKHIsIDEpCisgICAgICAgICAgICByZWFkX3Jlc3VsdHMuYXBwZW5kKHMpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fcmVhZCkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2lvID0gc2VsZi5pby5vcGVuKHcsICoqZmRvcGVuX2t3YXJncykKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAjIEZpbGwgdGhlIHBpcGUgZW5vdWdoIHRoYXQgdGhlIHdyaXRlIHdpbGwgYmUgYmxvY2tpbmcuCisgICAgICAgICAgICAjIEl0IHdpbGwgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIHRpbWVyIGFybWVkIGFib3ZlLiAgU2luY2UgdGhlCisgICAgICAgICAgICAjIG90aGVyIHRocmVhZCBoYXMgcmVhZCBvbmUgYnl0ZSwgdGhlIGxvdy1sZXZlbCB3cml0ZSB3aWxsCisgICAgICAgICAgICAjIHJldHVybiB3aXRoIGEgc3VjY2Vzc2Z1bCAocGFydGlhbCkgcmVzdWx0IHJhdGhlciB0aGFuIGFuIEVJTlRSLgorICAgICAgICAgICAgIyBUaGUgYnVmZmVyZWQgSU8gbGF5ZXIgbXVzdCBjaGVjayBmb3IgcGVuZGluZyBzaWduYWwKKyAgICAgICAgICAgICMgaGFuZGxlcnMsIHdoaWNoIGluIHRoaXMgY2FzZSB3aWxsIGludm9rZSBhbGFybV9pbnRlcnJ1cHQoKS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lvLndyaXRlLCBpdGVtICogKDEwMjQgKiAxMDI0KSkKKyAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICAjIFdlIGdvdCBvbmUgYnl0ZSwgZ2V0IGFub3RoZXIgb25lIGFuZCBjaGVjayB0aGF0IGl0IGlzbid0IGEKKyAgICAgICAgICAgICMgcmVwZWF0IG9mIHRoZSBmaXJzdCBvbmUuCisgICAgICAgICAgICByZWFkX3Jlc3VsdHMuYXBwZW5kKG9zLnJlYWQociwgMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfcmVzdWx0cywgW2J5dGVzWzA6MV0sIGJ5dGVzWzE6Ml1dKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UodykKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICAjIFRoaXMgaXMgZGVsaWJlcmF0ZS4gSWYgd2UgZGlkbid0IGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgICAgICMgYmVmb3JlIGNsb3Npbmcgd2lvLCB3aW8gd291bGQgdHJ5IHRvIGZsdXNoIGl0cyBpbnRlcm5hbAorICAgICAgICAgICAgIyBidWZmZXIsIGFuZCBibG9jayBhZ2Fpbi4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aW8uY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZWRfd3JpdGVfdW5idWZmZXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZShiInh5IiwgYiJ4eSIsIG1vZGU9IndiIiwgYnVmZmVyaW5nPTApCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRlZF93cml0ZV9idWZmZXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZShiInh5IiwgYiJ4eSIsIG1vZGU9IndiIikKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVkX3dyaXRlX3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGUoInh5IiwgYiJ4eSIsIG1vZGU9InciLCBlbmNvZGluZz0iYXNjaWkiKQorCisgICAgZGVmIGNoZWNrX3JlZW50cmFudF93cml0ZShzZWxmLCBkYXRhLCAqKmZkb3Blbl9rd2FyZ3MpOgorICAgICAgICBkZWYgb25fYWxhcm0oKmFyZ3MpOgorICAgICAgICAgICAgIyBXaWxsIGJlIGNhbGxlZCByZWVudHJhbnRseSBmcm9tIHRoZSBzYW1lIHRocmVhZAorICAgICAgICAgICAgd2lvLndyaXRlKGRhdGEpCisgICAgICAgICAgICAxLzAKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb25fYWxhcm0pCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgd2lvID0gc2VsZi5pby5vcGVuKHcsICoqZmRvcGVuX2t3YXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAjIEVpdGhlciB0aGUgcmVlbnRyYW50IGNhbGwgdG8gd2lvLndyaXRlKCkgZmFpbHMgd2l0aCBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAjIG9yIHRoZSBzaWduYWwgaGFuZGxlciByYWlzZXMgWmVyb0RpdmlzaW9uRXJyb3IuCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgUnVudGltZUVycm9yKSkgYXMgY206CisgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpby53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgd2lvLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGJ1ZmZlciBkb2Vzbid0IGZpbGwgdXAgYW5kIGJsb2NrIGZ1cnRoZXIgd3JpdGVzCisgICAgICAgICAgICAgICAgICAgIG9zLnJlYWQociwgbGVuKGRhdGEpICogMTAwKQorICAgICAgICAgICAgZXhjID0gY20uZXhjZXB0aW9uCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4YywgUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGV4Yykuc3RhcnRzd2l0aCgicmVlbnRyYW50IGNhbGwiKSwgc3RyKGV4YykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3aW8uY2xvc2UoKQorICAgICAgICAgICAgb3MuY2xvc2UocikKKworICAgIGRlZiB0ZXN0X3JlZW50cmFudF93cml0ZV9idWZmZXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWVudHJhbnRfd3JpdGUoYiJ4eSIsIG1vZGU9IndiIikKKworICAgIGRlZiB0ZXN0X3JlZW50cmFudF93cml0ZV90ZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlZW50cmFudF93cml0ZSgieHkiLCBtb2RlPSJ3IiwgZW5jb2Rpbmc9ImFzY2lpIikKKworICAgIGRlZiBjaGVja19pbnRlcnJ1cHRlZF9yZWFkX3JldHJ5KHNlbGYsIGRlY29kZSwgKipmZG9wZW5fa3dhcmdzKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBhIGJ1ZmZlcmVkIHJlYWQsIHdoZW4gaXQgZ2V0cyBpbnRlcnJ1cHRlZCAoZWl0aGVyCisgICAgICAgIHJldHVybmluZyBhIHBhcnRpYWwgcmVzdWx0IG9yIEVJTlRSKSwgcHJvcGVybHkgaW52b2tlcyB0aGUgc2lnbmFsCisgICAgICAgIGhhbmRsZXIgYW5kIHJldHJpZXMgaWYgdGhlIGxhdHRlciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuIiIiCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgZmRvcGVuX2t3YXJnc1siY2xvc2VmZCJdID0gRmFsc2UKKyAgICAgICAgZGVmIGFsYXJtX2hhbmRsZXIoc2lnLCBmcmFtZSk6CisgICAgICAgICAgICBvcy53cml0ZSh3LCBiImJhciIpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGFsYXJtX2hhbmRsZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJpbyA9IHNlbGYuaW8ub3BlbihyLCAqKmZkb3Blbl9rd2FyZ3MpCisgICAgICAgICAgICBvcy53cml0ZSh3LCBiImZvbyIpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgYmVoYXZpb3VyOgorICAgICAgICAgICAgIyAtIGZpcnN0IHJhdyByZWFkKCkgcmV0dXJucyBwYXJ0aWFsIGIiZm9vIgorICAgICAgICAgICAgIyAtIHNlY29uZCByYXcgcmVhZCgpIHJldHVybnMgRUlOVFIKKyAgICAgICAgICAgICMgLSB0aGlyZCByYXcgcmVhZCgpIHJldHVybnMgYiJiYXIiCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShyaW8ucmVhZCg2KSksICJmb29iYXIiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmlvLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICBvcy5jbG9zZShyKQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZXJkX3JlYWRfcmV0cnlfYnVmZmVyZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfcmVhZF9yZXRyeShsYW1iZGEgeDogeC5kZWNvZGUoJ2xhdGluMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT0icmIiKQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZXJkX3JlYWRfcmV0cnlfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF9yZWFkX3JldHJ5KGxhbWJkYSB4OiB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT0iciIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiBjaGVja19pbnRlcnJ1cHRlZF93cml0ZV9yZXRyeShzZWxmLCBpdGVtLCAqKmZkb3Blbl9rd2FyZ3MpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGEgYnVmZmVyZWQgd3JpdGUsIHdoZW4gaXQgZ2V0cyBpbnRlcnJ1cHRlZCAoZWl0aGVyCisgICAgICAgIHJldHVybmluZyBhIHBhcnRpYWwgcmVzdWx0IG9yIEVJTlRSKSwgcHJvcGVybHkgaW52b2tlcyB0aGUgc2lnbmFsCisgICAgICAgIGhhbmRsZXIgYW5kIHJldHJpZXMgaWYgdGhlIGxhdHRlciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuIiIiCisgICAgICAgIHNlbGVjdCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgic2VsZWN0IikKKyAgICAgICAgIyBBIHF1YW50aXR5IHRoYXQgZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUgb2YgYW4gYW5vbnltb3VzIHBpcGUncworICAgICAgICAjIHdyaXRlIGVuZC4KKyAgICAgICAgTiA9IDEwMjQgKiAxMDI0CisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgZmRvcGVuX2t3YXJnc1siY2xvc2VmZCJdID0gRmFsc2UKKyAgICAgICAgIyBXZSBuZWVkIGEgc2VwYXJhdGUgdGhyZWFkIHRvIHJlYWQgZnJvbSB0aGUgcGlwZSBhbmQgYWxsb3cgdGhlCisgICAgICAgICMgd3JpdGUoKSB0byBmaW5pc2guICBUaGlzIHRocmVhZCBpcyBzdGFydGVkIGFmdGVyIHRoZSBTSUdBTFJNIGlzCisgICAgICAgICMgcmVjZWl2ZWQgKGZvcmNpbmcgYSBmaXJzdCBFSU5UUiBpbiB3cml0ZSgpKS4KKyAgICAgICAgcmVhZF9yZXN1bHRzID0gW10KKyAgICAgICAgd3JpdGVfZmluaXNoZWQgPSBGYWxzZQorICAgICAgICBkZWYgX3JlYWQoKToKKyAgICAgICAgICAgIHdoaWxlIG5vdCB3cml0ZV9maW5pc2hlZDoKKyAgICAgICAgICAgICAgICB3aGlsZSByIGluIHNlbGVjdC5zZWxlY3QoW3JdLCBbXSwgW10sIDEuMClbMF06CisgICAgICAgICAgICAgICAgICAgIHMgPSBvcy5yZWFkKHIsIDEwMjQpCisgICAgICAgICAgICAgICAgICAgIHJlYWRfcmVzdWx0cy5hcHBlbmQocykKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PV9yZWFkKQorICAgICAgICB0LmRhZW1vbiA9IFRydWUKKyAgICAgICAgZGVmIGFsYXJtMShzaWcsIGZyYW1lKToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGFsYXJtMikKKyAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICBkZWYgYWxhcm0yKHNpZywgZnJhbWUpOgorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGFsYXJtMSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2lvID0gc2VsZi5pby5vcGVuKHcsICoqZmRvcGVuX2t3YXJncykKKyAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgIyBFeHBlY3RlZCBiZWhhdmlvdXI6CisgICAgICAgICAgICAjIC0gZmlyc3QgcmF3IHdyaXRlKCkgaXMgcGFydGlhbCAoYmVjYXVzZSBvZiB0aGUgbGltaXRlZCBwaXBlIGJ1ZmZlcgorICAgICAgICAgICAgIyAgIGFuZCB0aGUgZmlyc3QgYWxhcm0pCisgICAgICAgICAgICAjIC0gc2Vjb25kIHJhdyB3cml0ZSgpIHJldHVybnMgRUlOVFIgKGJlY2F1c2Ugb2YgdGhlIHNlY29uZCBhbGFybSkKKyAgICAgICAgICAgICMgLSBzdWJzZXF1ZW50IHdyaXRlKClzIGFyZSBzdWNjZXNzZnVsIChlaXRoZXIgcGFydGlhbCBvciBjb21wbGV0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTiwgd2lvLndyaXRlKGl0ZW0gKiBOKSkKKyAgICAgICAgICAgIHdpby5mbHVzaCgpCisgICAgICAgICAgICB3cml0ZV9maW5pc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE4sIHN1bShsZW4oeCkgZm9yIHggaW4gcmVhZF9yZXN1bHRzKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHdyaXRlX2ZpbmlzaGVkID0gVHJ1ZQorICAgICAgICAgICAgb3MuY2xvc2UodykKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICAjIFRoaXMgaXMgZGVsaWJlcmF0ZS4gSWYgd2UgZGlkbid0IGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgICAgICMgYmVmb3JlIGNsb3Npbmcgd2lvLCB3aW8gd291bGQgdHJ5IHRvIGZsdXNoIGl0cyBpbnRlcm5hbAorICAgICAgICAgICAgIyBidWZmZXIsIGFuZCBjb3VsZCBibG9jayAoaW4gY2FzZSBvZiBmYWlsdXJlKS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aW8uY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZXJkX3dyaXRlX3JldHJ5X2J1ZmZlcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3dyaXRlX3JldHJ5KGIieCIsIG1vZGU9IndiIikKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVyZF93cml0ZV9yZXRyeV90ZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3dyaXRlX3JldHJ5KCJ4IiwgbW9kZT0idyIsIGVuY29kaW5nPSJsYXRpbjEiKQorCisKK2NsYXNzIENTaWduYWxzVGVzdChTaWduYWxzVGVzdCk6CisgICAgaW8gPSBpbworCitjbGFzcyBQeVNpZ25hbHNUZXN0KFNpZ25hbHNUZXN0KToKKyAgICBpbyA9IHB5aW8KKworICAgICMgSGFuZGxpbmcgcmVlbnRyYW5jeSBpc3N1ZXMgd291bGQgc2xvdyBkb3duIF9weWlvIGV2ZW4gbW9yZSwgc28gdGhlCisgICAgIyB0ZXN0cyBhcmUgZGlzYWJsZWQuCisgICAgdGVzdF9yZWVudHJhbnRfd3JpdGVfYnVmZmVyZWQgPSBOb25lCisgICAgdGVzdF9yZWVudHJhbnRfd3JpdGVfdGV4dCA9IE5vbmUKKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChJT1Rlc3QsIEJ5dGVzSU9UZXN0LCBTdHJpbmdJT1Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlclRlc3QsIEJ1ZmZlcmVkV3JpdGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcmVkUldQYWlyVGVzdCwgQnVmZmVyZWRSYW5kb21UZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXJUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dElPV3JhcHBlclRlc3QsIE1pc2NJT1Rlc3QpCisgICAgdGVzdHMgPSAoQ0lPVGVzdCwgUHlJT1Rlc3QsCisgICAgICAgICAgICAgQ0J1ZmZlcmVkUmVhZGVyVGVzdCwgUHlCdWZmZXJlZFJlYWRlclRlc3QsCisgICAgICAgICAgICAgQ0J1ZmZlcmVkV3JpdGVyVGVzdCwgUHlCdWZmZXJlZFdyaXRlclRlc3QsCisgICAgICAgICAgICAgQ0J1ZmZlcmVkUldQYWlyVGVzdCwgUHlCdWZmZXJlZFJXUGFpclRlc3QsCisgICAgICAgICAgICAgQ0J1ZmZlcmVkUmFuZG9tVGVzdCwgUHlCdWZmZXJlZFJhbmRvbVRlc3QsCisgICAgICAgICAgICAgU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXJUZXN0LAorICAgICAgICAgICAgIENJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdCwgUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdCwKKyAgICAgICAgICAgICBDVGV4dElPV3JhcHBlclRlc3QsIFB5VGV4dElPV3JhcHBlclRlc3QsCisgICAgICAgICAgICAgQ01pc2NJT1Rlc3QsIFB5TWlzY0lPVGVzdCwKKyAgICAgICAgICAgICBDU2lnbmFsc1Rlc3QsIFB5U2lnbmFsc1Rlc3QsCisgICAgICAgICAgICAgKQorCisgICAgIyBQdXQgdGhlIG5hbWVzcGFjZXMgb2YgdGhlIElPIG1vZHVsZSB3ZSBhcmUgdGVzdGluZyBhbmQgc29tZSB1c2VmdWwgbW9jaworICAgICMgY2xhc3NlcyBpbiB0aGUgX19kaWN0X18gb2YgZWFjaCB0ZXN0LgorICAgIG1vY2tzID0gKE1vY2tSYXdJTywgTWlzYmVoYXZlZFJhd0lPLCBNb2NrRmlsZUlPLCBDbG9zZUZhaWx1cmVJTywKKyAgICAgICAgICAgICBNb2NrTm9uQmxvY2tXcml0ZXJJTywgTW9ja1Jhd0lPV2l0aG91dFJlYWQpCisgICAgYWxsX21lbWJlcnMgPSBpby5fX2FsbF9fICsgWyJJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyIl0KKyAgICBjX2lvX25zID0gZGljdCgobmFtZSwgZ2V0YXR0cihpbywgbmFtZSkpIGZvciBuYW1lIGluIGFsbF9tZW1iZXJzKQorICAgIHB5X2lvX25zID0gZGljdCgobmFtZSwgZ2V0YXR0cihweWlvLCBuYW1lKSkgZm9yIG5hbWUgaW4gYWxsX21lbWJlcnMpCisgICAgZ2xvYnMgPSBnbG9iYWxzKCkKKyAgICBjX2lvX25zLnVwZGF0ZSgoeC5fX25hbWVfXywgZ2xvYnNbIkMiICsgeC5fX25hbWVfX10pIGZvciB4IGluIG1vY2tzKQorICAgIHB5X2lvX25zLnVwZGF0ZSgoeC5fX25hbWVfXywgZ2xvYnNbIlB5IiArIHguX19uYW1lX19dKSBmb3IgeCBpbiBtb2NrcykKKyAgICAjIEF2b2lkIHR1cm5pbmcgb3BlbiBpbnRvIGEgYm91bmQgbWV0aG9kLgorICAgIHB5X2lvX25zWyJvcGVuIl0gPSBweWlvLk9wZW5XcmFwcGVyCisgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgIGlmIHRlc3QuX19uYW1lX18uc3RhcnRzd2l0aCgiQyIpOgorICAgICAgICAgICAgZm9yIG5hbWUsIG9iaiBpbiBjX2lvX25zLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2V0YXR0cih0ZXN0LCBuYW1lLCBvYmopCisgICAgICAgIGVsaWYgdGVzdC5fX25hbWVfXy5zdGFydHN3aXRoKCJQeSIpOgorICAgICAgICAgICAgZm9yIG5hbWUsIG9iaiBpbiBweV9pb19ucy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIodGVzdCwgbmFtZSwgb2JqKQorCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oKQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5IGIvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQppbmRleCBkNDZiMTBkLi5hZTk2NWQ4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKQEAgLTEsMTggKzEsMjQgQEAKK2ltcG9ydCBhcnJheQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZCwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUsIGdldF9hdHRyaWJ1dGUKIGltcG9ydCBvcywgc3RydWN0Ci10cnk6Ci0gICAgaW1wb3J0IGZjbnRsLCB0ZXJtaW9zCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQoIk5vIGZjbnRsIG9yIHRlcm1pb3MgbW9kdWxlIikKLWlmIG5vdCBoYXNhdHRyKHRlcm1pb3MsJ1RJT0NHUEdSUCcpOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJ0ZXJtaW9zIG1vZHVsZSBkb2Vzbid0IGhhdmUgVElPQ0dQR1JQIikKK2ZjbnRsID0gaW1wb3J0X21vZHVsZSgnZmNudGwnKQordGVybWlvcyA9IGltcG9ydF9tb2R1bGUoJ3Rlcm1pb3MnKQorZ2V0X2F0dHJpYnV0ZSh0ZXJtaW9zLCAnVElPQ0dQR1JQJykgI0Nhbid0IHJ1biB0ZXN0cyB3aXRob3V0IHRoaXMgZmVhdHVyZQogCiB0cnk6CiAgICAgdHR5ID0gb3BlbigiL2Rldi90dHkiLCAiciIpCi0gICAgdHR5LmNsb3NlKCkKIGV4Y2VwdCBJT0Vycm9yOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJVbmFibGUgdG8gb3BlbiAvZGV2L3R0eSIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlVuYWJsZSB0byBvcGVuIC9kZXYvdHR5IikKK2Vsc2U6CisgICAgIyBTa2lwIGlmIGFub3RoZXIgcHJvY2VzcyBpcyBpbiBmb3JlZ3JvdW5kCisgICAgciA9IGZjbnRsLmlvY3RsKHR0eSwgdGVybWlvcy5USU9DR1BHUlAsICIgICAgIikKKyAgICB0dHkuY2xvc2UoKQorICAgIHJwZ3JwID0gc3RydWN0LnVucGFjaygiaSIsIHIpWzBdCisgICAgaWYgcnBncnAgbm90IGluIChvcy5nZXRwZ3JwKCksIG9zLmdldHNpZCgwKSk6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJOZWl0aGVyIHRoZSBwcm9jZXNzIGdyb3VwIG5vciB0aGUgc2Vzc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmUgYXR0YWNoZWQgdG8gL2Rldi90dHkiKQorICAgIGRlbCB0dHksIHIsIHJwZ3JwCiAKIHRyeToKICAgICBpbXBvcnQgcHR5CkBAIC0yNywyMSArMzMsNDEgQEAKICAgICAgICAgdHR5ID0gb3BlbigiL2Rldi90dHkiLCAiciIpCiAgICAgICAgIHIgPSBmY250bC5pb2N0bCh0dHksIHRlcm1pb3MuVElPQ0dQR1JQLCAiICAgICIpCiAgICAgICAgIHJwZ3JwID0gc3RydWN0LnVucGFjaygiaSIsIHIpWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhycGdycCBpbiBpZHMsICIlcyBub3QgaW4gJXMiICUgKHJwZ3JwLCBpZHMpKQorICAgICAgICBzZWxmLmFzc2VydEluKHJwZ3JwLCBpZHMpCisKKyAgICBkZWYgX2NoZWNrX2lvY3RsX211dGF0ZV9sZW4oc2VsZiwgbmJ5dGVzPU5vbmUpOgorICAgICAgICBidWYgPSBhcnJheS5hcnJheSgnaScpCisgICAgICAgIGludHNpemUgPSBidWYuaXRlbXNpemUKKyAgICAgICAgaWRzID0gKG9zLmdldHBncnAoKSwgb3MuZ2V0c2lkKDApKQorICAgICAgICAjIEEgZmlsbCB2YWx1ZSB1bmxpa2VseSB0byBiZSBpbiBgaWRzYAorICAgICAgICBmaWxsID0gLTEyMzQ1CisgICAgICAgIGlmIG5ieXRlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgRXh0ZW5kIHRoZSBidWZmZXIgc28gdGhhdCBpdCBpcyBleGFjdGx5IGBuYnl0ZXNgIGJ5dGVzIGxvbmcKKyAgICAgICAgICAgIGJ1Zi5leHRlbmQoW2ZpbGxdICogKG5ieXRlcyAvLyBpbnRzaXplKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZikgKiBpbnRzaXplLCBuYnl0ZXMpICAgIyBzYW5pdHkgY2hlY2sKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoZmlsbCkKKyAgICAgICAgd2l0aCBvcGVuKCIvZGV2L3R0eSIsICJyIikgYXMgdHR5OgorICAgICAgICAgICAgciA9IGZjbnRsLmlvY3RsKHR0eSwgdGVybWlvcy5USU9DR1BHUlAsIGJ1ZiwgMSkKKyAgICAgICAgcnBncnAgPSBidWZbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCAwKQorICAgICAgICBzZWxmLmFzc2VydEluKHJwZ3JwLCBpZHMpCiAKICAgICBkZWYgdGVzdF9pb2N0bF9tdXRhdGUoc2VsZik6Ci0gICAgICAgIGltcG9ydCBhcnJheQotICAgICAgICBidWYgPSBhcnJheS5hcnJheSgnaScsIFswXSkKLSAgICAgICAgaWRzID0gKG9zLmdldHBncnAoKSwgb3MuZ2V0c2lkKDApKQotICAgICAgICB0dHkgPSBvcGVuKCIvZGV2L3R0eSIsICJyIikKLSAgICAgICAgciA9IGZjbnRsLmlvY3RsKHR0eSwgdGVybWlvcy5USU9DR1BHUlAsIGJ1ZiwgMSkKLSAgICAgICAgcnBncnAgPSBidWZbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMociwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJwZ3JwIGluIGlkcywgIiVzIG5vdCBpbiAlcyIgJSAocnBncnAsIGlkcykpCisgICAgICAgIHNlbGYuX2NoZWNrX2lvY3RsX211dGF0ZV9sZW4oKQorCisgICAgZGVmIHRlc3RfaW9jdGxfbXV0YXRlXzEwMjQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzk3NTg6IGEgbXV0YWJsZSBidWZmZXIgb2YgZXhhY3RseSAxMDI0IGJ5dGVzIHdvdWxkbid0IGJlCisgICAgICAgICMgY29waWVkIGJhY2sgYWZ0ZXIgdGhlIHN5c3RlbSBjYWxsLgorICAgICAgICBzZWxmLl9jaGVja19pb2N0bF9tdXRhdGVfbGVuKDEwMjQpCisKKyAgICBkZWYgdGVzdF9pb2N0bF9tdXRhdGVfMjA0OChzZWxmKToKKyAgICAgICAgIyBUZXN0IHdpdGggYSBsYXJnZXIgYnVmZmVyLCBqdXN0IGZvciB0aGUgcmVjb3JkLgorICAgICAgICBzZWxmLl9jaGVja19pb2N0bF9tdXRhdGVfbGVuKDIwNDgpCiAKICAgICBkZWYgdGVzdF9pb2N0bF9zaWduZWRfdW5zaWduZWRfY29kZV9wYXJhbShzZWxmKToKICAgICAgICAgaWYgbm90IHB0eToKLSAgICAgICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKCdwdHkgbW9kdWxlIHJlcXVpcmVkJykKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdwdHkgbW9kdWxlIHJlcXVpcmVkJykKICAgICAgICAgbWZkLCBzZmQgPSBwdHkub3BlbnB0eSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHRlcm1pb3MuVElPQ1NXSU5TWiA8IDA6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXIucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXIucHkKaW5kZXggNjEzMjA0MS4uNjQ5ODRjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlci5weQpAQCAtMiw3ICsyLDcgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rLCBoYXZlX3VuaWNvZGUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jaGVja19weTNrX3dhcm5pbmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19weTNrX3dhcm5pbmdzLCBjcHl0aG9uX29ubHkKIAogIyBUZXN0IHJlc3VsdCBvZiB0cmlwbGUgbG9vcCAodG9vIGJpZyB0byBpbmxpbmUpCiBUUklQTEVUUyA9IFsoMCwgMCwgMCksICgwLCAwLCAxKSwgKDAsIDAsIDIpLApAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICBzZXEgPSByYW5nZSgxMCkKICAgICAgICAgaXQgPSBpdGVyKHNlcSkKICAgICAgICAgaXQyID0gaXRlcihpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGl0IGlzIGl0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGl0IGlzIGl0MikKIAogICAgICMgVGVzdCB0aGF0IGZvciBsb29wcyBvdmVyIGl0ZXJhdG9ycyB3b3JrCiAgICAgZGVmIHRlc3RfaXRlcl9mb3JfbG9vcChzZWxmKToKQEAgLTEyMSw2ICsxMjEsMTMgQEAKICAgICBkZWYgdGVzdF9zZXFfY2xhc3NfaXRlcihzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19pdGVyYXRvcihpdGVyKFNlcXVlbmNlQ2xhc3MoMTApKSwgcmFuZ2UoMTApKQogCisgICAgIyBUZXN0IGEgbmV3X3N0eWxlIGNsYXNzIHdpdGggX19pdGVyX18gYnV0IG5vIG5leHQoKSBtZXRob2QKKyAgICBkZWYgdGVzdF9uZXdfc3R5bGVfaXRlcl9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgSXRlckNsYXNzKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpdGVyLCBJdGVyQ2xhc3MoKSkKKwogICAgICMgVGVzdCB0d28tYXJndW1lbnQgaXRlcigpIHdpdGggY2FsbGFibGUgaW5zdGFuY2UKICAgICBkZWYgdGVzdF9pdGVyX2NhbGxhYmxlKHNlbGYpOgogICAgICAgICBjbGFzcyBDOgpAQCAtNDAxLDcgKzQwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpXQogCiAgICAgICAgICMgRGVwcmVjYXRlZCBtYXAoTm9uZSwgLi4uKQotICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAoTm9uZSwgU2VxdWVuY2VDbGFzcyg1KSksIHJhbmdlKDUpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAoTm9uZSwgZCksIGQua2V5cygpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAoTm9uZSwgZCwKQEAgLTUwNCw3ICs1MTEsNyBAQAogCiAgICAgIyBUZXN0IHJlZHVjZXMoKSdzIHVzZSBvZiBpdGVyYXRvcnMuCiAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9idWlsdGluX3JlZHVjZShzZWxmKToKLSAgICAgICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYnVpbHRpbl9yZWR1Y2UoKQogCiAgICAgZGVmIF90ZXN0X2J1aWx0aW5fcmVkdWNlKHNlbGYpOgpAQCAtNTY3LDIzICs1NzQsMjMgQEAKICAgICBkZWYgdGVzdF9pbl9hbmRfbm90X2luKHNlbGYpOgogICAgICAgICBmb3Igc2M1IGluIEl0ZXJhdGluZ1NlcXVlbmNlQ2xhc3MoNSksIFNlcXVlbmNlQ2xhc3MoNSk6CiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaSBpbiBzYzUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBzYzUpCiAgICAgICAgICAgICBmb3IgaSBpbiAiYWJjIiwgLTEsIDUsIDQyLjQyLCAoMywgNCksIFtdLCB7MTogMX0sIDMtMTJqLCBzYzU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGkgbm90IGluIHNjNSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGksIHNjNSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogMyBpbiAxMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IDMgbm90IGluIG1hcCkKIAogICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogMywgMWo6IDJqfQogICAgICAgICBmb3IgayBpbiBkOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGsgaW4gZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhrIG5vdCBpbiBkLml0ZXJ2YWx1ZXMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaywgZC5pdGVydmFsdWVzKCkpCiAgICAgICAgIGZvciB2IGluIGQudmFsdWVzKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8odiBpbiBkLml0ZXJ2YWx1ZXMoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh2IG5vdCBpbiBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBkLml0ZXJ2YWx1ZXMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odiwgZCkKICAgICAgICAgZm9yIGssIHYgaW4gZC5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygoaywgdikgaW4gZC5pdGVyaXRlbXMoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xygodiwgaykgbm90IGluIGQuaXRlcml0ZW1zKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKChrLCB2KSwgZC5pdGVyaXRlbXMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKHYsIGspLCBkLml0ZXJpdGVtcygpKQogCiAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInciKQogICAgICAgICB0cnk6CkBAIC01OTQsOSArNjAxLDkgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIGNodW5rIGluICJhYmMiOgogICAgICAgICAgICAgICAgIGYuc2VlaygwLCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjaHVuayBub3QgaW4gZikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGNodW5rLCBmKQogICAgICAgICAgICAgICAgIGYuc2VlaygwLCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygoY2h1bmsgKyAiXG4iKSBpbiBmKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKGNodW5rICsgIlxuIiksIGYpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHRyeToKQEAgLTc4Niw4ICs3OTMsOSBAQAogICAgICAgICAoYSwgYiksIChjLCkgPSBJdGVyYXRpbmdTZXF1ZW5jZUNsYXNzKDIpLCB7NDI6IDI0fQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLCBiLCBjKSwgKDAsIDEsIDQyKSkKIAotICAgICAgICAjIFRlc3QgcmVmZXJlbmNlIGNvdW50IGJlaGF2aW9yCiAKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfcmVmX2NvdW50aW5nX2JlaGF2aW9yKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBjb3VudCA9IDAKICAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CkBAIC04ODUsNiArODkzLDIxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgemlwKHJhbmdlKDUpLCByYW5nZSg1KSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgW10pCiAKKyAgICBkZWYgdGVzdF8zNzIwKHNlbGYpOgorICAgICAgICAjIEF2b2lkIGEgY3Jhc2gsIHdoZW4gYW4gaXRlcmF0b3IgZGVsZXRlcyBpdHMgbmV4dCgpIG1ldGhvZC4KKyAgICAgICAgY2xhc3MgQmFkSXRlcmF0b3Iob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgZGVsIEJhZEl0ZXJhdG9yLm5leHQKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIEJhZEl0ZXJhdG9yKCkgOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQppbmRleCBkZTcxZmRhLi5lNDE2NzU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQpAQCAtMiw2ICsyLDggQEAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgKgogZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQorZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCitmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24KIGltcG9ydCBzeXMKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHJhbmRvbQpAQCAtMTA5LDYgKzExMSwxNCBAQAogICAgICAgICAgICAgICAgIGlmIHNvcnRlZChpbmRpY2VzKSA9PSBsaXN0KGluZGljZXMpOgogICAgICAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCiAKKyAgICAgICAgZGVmIGNvbWJpbmF0aW9uczMoaXRlcmFibGUsIHIpOgorICAgICAgICAgICAgJ1B1cmUgcHl0aG9uIHZlcnNpb24gZnJvbSBjd3IoKScKKyAgICAgICAgICAgIHBvb2wgPSB0dXBsZShpdGVyYWJsZSkKKyAgICAgICAgICAgIG4gPSBsZW4ocG9vbCkKKyAgICAgICAgICAgIGZvciBpbmRpY2VzIGluIGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KHJhbmdlKG4pLCByKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2V0KGluZGljZXMpKSA9PSByOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCisKICAgICAgICAgZm9yIG4gaW4gcmFuZ2UoNyk6CiAgICAgICAgICAgICB2YWx1ZXMgPSBbNSp4LTEyIGZvciB4IGluIHJhbmdlKG4pXQogICAgICAgICAgICAgZm9yIHIgaW4gcmFuZ2UobisyKToKQEAgLTEyMCwxNiArMTMwLDg3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCByKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHItbGVuZ3RoIGNvbWJpbmF0aW9ucwogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQoYykpLCByKSAgICAgICAgICAgICAgICAgICAgIyBubyBkdXBsaWNhdGUgZWxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMpLCBzb3J0ZWQoYykpICAgICAgICAgICAgICAgICMga2VlcCBvcmlnaW5hbCBvcmRlcmluZwotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYWxsKGUgaW4gdmFsdWVzIGZvciBlIGluIGMpKSAgICAgICAgICAgIyBlbGVtZW50cyB0YWtlbiBmcm9tIGlucHV0IGl0ZXJhYmxlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwoZSBpbiB2YWx1ZXMgZm9yIGUgaW4gYykpICAgICAgICAgICAjIGVsZW1lbnRzIHRha2VuIGZyb20gaW5wdXQgaXRlcmFibGUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlIGZvciBlIGluIHZhbHVlcyBpZiBlIGluIGNdKSAgICAgICMgY29tYiBpcyBhIHN1YnNlcXVlbmNlIG9mIHRoZSBpbnB1dCBpdGVyYWJsZQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGNvbWJpbmF0aW9uczEodmFsdWVzLCByKSkpICMgbWF0Y2hlcyBmaXJzdCBwdXJlIHB5dGhvbiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QoY29tYmluYXRpb25zMih2YWx1ZXMsIHIpKSkgIyBtYXRjaGVzIHNlY29uZCBwdXJlIHB5dGhvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QoY29tYmluYXRpb25zMyh2YWx1ZXMsIHIpKSkgIyBtYXRjaGVzIHNlY29uZCBwdXJlIHB5dGhvbiB2ZXJzaW9uCiAKICAgICAgICAgIyBUZXN0IGltcGxlbWVudGF0aW9uIGRldGFpbDogIHR1cGxlIHJlLXVzZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQobWFwKGlkLCBjb21iaW5hdGlvbnMoJ2FiY2RlJywgMykpKSksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGVuKHNldChtYXAoaWQsIGxpc3QoY29tYmluYXRpb25zKCdhYmNkZScsIDMpKSkpKSwgMSkKIAorICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KHNlbGYpOgorICAgICAgICBjd3IgPSBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN3ciwgJ2FiYycpICAgICAgICMgbWlzc2luZyByIGFyZ3VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3dyLCAnYWJjJywgMiwgMSkgIyB0b28gbWFueSBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjd3IsIE5vbmUpICAgICAgICAjIHBvb2wgaXMgbm90IGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN3ciwgJ2FiYycsIC0yKSAgIyByIGlzIG5lZ2F0aXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjd3IoJ0FCQycsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdBJywnQScpLCAoJ0EnLCdCJyksICgnQScsJ0MnKSwgKCdCJywnQicpLCAoJ0InLCdDJyksICgnQycsJ0MnKV0pCisKKyAgICAgICAgZGVmIGN3cjEoaXRlcmFibGUsIHIpOgorICAgICAgICAgICAgJ1B1cmUgcHl0aG9uIHZlcnNpb24gc2hvd24gaW4gdGhlIGRvY3MnCisgICAgICAgICAgICAjIG51bWJlciBpdGVtcyByZXR1cm5lZDogIChuK3ItMSkhIC8gciEgLyAobi0xKSEgd2hlbiBuPjAKKyAgICAgICAgICAgIHBvb2wgPSB0dXBsZShpdGVyYWJsZSkKKyAgICAgICAgICAgIG4gPSBsZW4ocG9vbCkKKyAgICAgICAgICAgIGlmIG5vdCBuIGFuZCByOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaW5kaWNlcyA9IFswXSAqIHIKKyAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UocikpOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmRpY2VzW2ldICE9IG4gLSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBpbmRpY2VzW2k6XSA9IFtpbmRpY2VzW2ldICsgMV0gKiAociAtIGkpCisgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorCisgICAgICAgIGRlZiBjd3IyKGl0ZXJhYmxlLCByKToKKyAgICAgICAgICAgICdQdXJlIHB5dGhvbiB2ZXJzaW9uIHNob3duIGluIHRoZSBkb2NzJworICAgICAgICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQorICAgICAgICAgICAgbiA9IGxlbihwb29sKQorICAgICAgICAgICAgZm9yIGluZGljZXMgaW4gcHJvZHVjdChyYW5nZShuKSwgcmVwZWF0PXIpOgorICAgICAgICAgICAgICAgIGlmIHNvcnRlZChpbmRpY2VzKSA9PSBsaXN0KGluZGljZXMpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCisKKyAgICAgICAgZGVmIG51bWNvbWJzKG4sIHIpOgorICAgICAgICAgICAgaWYgbm90IG46CisgICAgICAgICAgICAgICAgcmV0dXJuIDAgaWYgciBlbHNlIDEKKyAgICAgICAgICAgIHJldHVybiBmYWN0KG4rci0xKSAvLyBmYWN0KHIpIC8vIGZhY3Qobi0xKQorCisgICAgICAgIGZvciBuIGluIHJhbmdlKDcpOgorICAgICAgICAgICAgdmFsdWVzID0gWzUqeC0xMiBmb3IgeCBpbiByYW5nZShuKV0KKyAgICAgICAgICAgIGZvciByIGluIHJhbmdlKG4rMik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGlzdChjd3IodmFsdWVzLCByKSkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdCksIG51bWNvbWJzKG4sIHIpKSAgICAgICAgICAgIyByaWdodCBudW1iZXIgb2YgY29tYnMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCBsZW4oc2V0KHJlc3VsdCkpKSAgICAgICAgICMgbm8gcmVwZWF0cworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzb3J0ZWQocmVzdWx0KSkgICAgICAgICAgICAgICAgIyBsZXhpY29ncmFwaGljIG9yZGVyCisKKyAgICAgICAgICAgICAgICByZWd1bGFyX2NvbWJzID0gbGlzdChjb21iaW5hdGlvbnModmFsdWVzLCByKSkgICAgICAgICAgICMgY29tcGFyZSB0byBjb21icyB3aXRob3V0IHJlcGxhY2VtZW50CisgICAgICAgICAgICAgICAgaWYgbiA9PSAwIG9yIHIgPD0gMToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHJlZ3VsYXJfY29tYnMpICAgICAgICAgICAgIyBjYXNlcyB0aGF0IHNob3VsZCBiZSBpZGVudGljYWwKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KHJlc3VsdCkgPj0gc2V0KHJlZ3VsYXJfY29tYnMpKSAgICAgIyByZXN0IHNob3VsZCBiZSBzdXBlcnNldHMgb2YgcmVndWxhciBjb21icworCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgcikgICAgICAgICAgICAgICAgICAgICAgICAgIyByLWxlbmd0aCBjb21iaW5hdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgbm9ydW5zID0gW2sgZm9yIGssdiBpbiBncm91cGJ5KGMpXSAgICAgICAgICAgICAgICAgICMgY29tYm8gd2l0aG91dCBjb25zZWN1dGl2ZSByZXBlYXRzCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5vcnVucyksIGxlbihzZXQobm9ydW5zKSkpICAgICAjIG5vIHJlcGVhdHMgb3RoZXIgdGhhbiBjb25zZWN1dGl2ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYyksIHNvcnRlZChjKSkgICAgICAgICAgICAgICAgIyBrZWVwIG9yaWdpbmFsIG9yZGVyaW5nCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwoZSBpbiB2YWx1ZXMgZm9yIGUgaW4gYykpICAgICAgICAgICAjIGVsZW1lbnRzIHRha2VuIGZyb20gaW5wdXQgaXRlcmFibGUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3J1bnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UgZm9yIGUgaW4gdmFsdWVzIGlmIGUgaW4gY10pICAgICAjIGNvbWIgaXMgYSBzdWJzZXF1ZW5jZSBvZiB0aGUgaW5wdXQgaXRlcmFibGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChjd3IxKHZhbHVlcywgcikpKSAgICAgICAgICMgbWF0Y2hlcyBmaXJzdCBwdXJlIHB5dGhvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QoY3dyMih2YWx1ZXMsIHIpKSkgICAgICAgICAjIG1hdGNoZXMgc2Vjb25kIHB1cmUgcHl0aG9uIHZlcnNpb24KKworICAgICAgICAjIFRlc3QgaW1wbGVtZW50YXRpb24gZGV0YWlsOiAgdHVwbGUgcmUtdXNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChtYXAoaWQsIGN3cignYWJjZGUnLCAzKSkpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsZW4oc2V0KG1hcChpZCwgbGlzdChjd3IoJ2FiY2RlJywgMykpKSkpLCAxKQorCiAgICAgZGVmIHRlc3RfcGVybXV0YXRpb25zKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBlcm11dGF0aW9ucykgICAgICAgICAgICAgICMgdG9vIGZldyBhcmd1bWVudHMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwZXJtdXRhdGlvbnMsICdhYmMnLCAyLCAxKSAjIHRvbyBtYW55IGFyZ3VtZW50cwpAQCAtMTgzLDcgKzI2NCw3IEBACiAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcmVzdWx0OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwKSwgcikgICAgICAgICAgICAgICAgICAgICAgICAgIyByLWxlbmd0aCBwZXJtdXRhdGlvbnMKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2V0KHApKSwgcikgICAgICAgICAgICAgICAgICAgICMgbm8gZHVwbGljYXRlIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhhbGwoZSBpbiB2YWx1ZXMgZm9yIGUgaW4gcCkpICAgICAgICAgICAjIGVsZW1lbnRzIHRha2VuIGZyb20gaW5wdXQgaXRlcmFibGUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbChlIGluIHZhbHVlcyBmb3IgZSBpbiBwKSkgICAgICAgICAgICMgZWxlbWVudHMgdGFrZW4gZnJvbSBpbnB1dCBpdGVyYWJsZQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KHBlcm11dGF0aW9uczEodmFsdWVzLCByKSkpICMgbWF0Y2hlcyBmaXJzdCBwdXJlIHB5dGhvbiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QocGVybXV0YXRpb25zMih2YWx1ZXMsIHIpKSkgIyBtYXRjaGVzIHNlY29uZCBwdXJlIHB5dGhvbiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgaWYgciA9PSBuOgpAQCAtMTk0LDEzICsyNzUsNjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2V0KG1hcChpZCwgcGVybXV0YXRpb25zKCdhYmNkZScsIDMpKSkpLCAxKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxlbihzZXQobWFwKGlkLCBsaXN0KHBlcm11dGF0aW9ucygnYWJjZGUnLCAzKSkpKSksIDEpCiAKKyAgICBkZWYgdGVzdF9jb21iaW5hdG9yaWNzKHNlbGYpOgorICAgICAgICAjIFRlc3QgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHByb2R1Y3QoKSwgcGVybXV0YXRpb25zKCksCisgICAgICAgICMgY29tYmluYXRpb25zKCkgYW5kIGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCkuCisKKyAgICAgICAgZm9yIG4gaW4gcmFuZ2UoNik6CisgICAgICAgICAgICBzID0gJ0FCQ0RFRkcnWzpuXQorICAgICAgICAgICAgZm9yIHIgaW4gcmFuZ2UoOCk6CisgICAgICAgICAgICAgICAgcHJvZCA9IGxpc3QocHJvZHVjdChzLCByZXBlYXQ9cikpCisgICAgICAgICAgICAgICAgY3dyID0gbGlzdChjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChzLCByKSkKKyAgICAgICAgICAgICAgICBwZXJtID0gbGlzdChwZXJtdXRhdGlvbnMocywgcikpCisgICAgICAgICAgICAgICAgY29tYiA9IGxpc3QoY29tYmluYXRpb25zKHMsIHIpKQorCisgICAgICAgICAgICAgICAgIyBDaGVjayBzaXplCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocHJvZCksIG4qKnIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY3dyKSwgKGZhY3QobityLTEpIC8vIGZhY3QocikgLy8gZmFjdChuLTEpKSBpZiBuIGVsc2UgKG5vdCByKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwZXJtKSwgMCBpZiByPm4gZWxzZSBmYWN0KG4pIC8vIGZhY3Qobi1yKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjb21iKSwgMCBpZiByPm4gZWxzZSBmYWN0KG4pIC8vIGZhY3QocikgLy8gZmFjdChuLXIpKQorCisgICAgICAgICAgICAgICAgIyBDaGVjayBsZXhpY29ncmFwaGljIG9yZGVyIHdpdGhvdXQgcmVwZWF0ZWQgdHVwbGVzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9kLCBzb3J0ZWQoc2V0KHByb2QpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN3ciwgc29ydGVkKHNldChjd3IpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlcm0sIHNvcnRlZChzZXQocGVybSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tYiwgc29ydGVkKHNldChjb21iKSkpCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGludGVycmVsYXRpb25zaGlwcworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3dyLCBbdCBmb3IgdCBpbiBwcm9kIGlmIHNvcnRlZCh0KT09bGlzdCh0KV0pICMgY3dyOiBwcm9kcyB3aGljaCBhcmUgc29ydGVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZXJtLCBbdCBmb3IgdCBpbiBwcm9kIGlmIGxlbihzZXQodCkpPT1yXSkgICAgIyBwZXJtOiBwcm9kcyB3aXRoIG5vIGR1cHMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWIsIFt0IGZvciB0IGluIHBlcm0gaWYgc29ydGVkKHQpPT1saXN0KHQpXSkgIyBjb21iOiBwZXJtcyB0aGF0IGFyZSBzb3J0ZWQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWIsIFt0IGZvciB0IGluIGN3ciBpZiBsZW4oc2V0KHQpKT09cl0pICAgICAgIyBjb21iOiBjd3JzIHdpdGhvdXQgZHVwcworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tYiwgZmlsdGVyKHNldChjd3IpLl9fY29udGFpbnNfXywgcGVybSkpICAgICAjIGNvbWI6IHBlcm0gdGhhdCBpcyBhIGN3cgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tYiwgZmlsdGVyKHNldChwZXJtKS5fX2NvbnRhaW5zX18sIGN3cikpICAgICAjIGNvbWI6IGN3ciB0aGF0IGlzIGEgcGVybQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tYiwgc29ydGVkKHNldChjd3IpICYgc2V0KHBlcm0pKSkgICAgICAgICAgICAjIGNvbWI6IGJvdGggYSBjd3IgYW5kIGEgcGVybQorCisgICAgZGVmIHRlc3RfY29tcHJlc3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcyhkYXRhPSdBQkNERUYnLCBzZWxlY3RvcnM9WzEsMCwxLDAsMSwxXSkpLCBsaXN0KCdBQ0VGJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcygnQUJDREVGJywgWzEsMCwxLDAsMSwxXSkpLCBsaXN0KCdBQ0VGJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcygnQUJDREVGJywgWzAsMCwwLDAsMCwwXSkpLCBsaXN0KCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKCdBQkNERUYnLCBbMSwxLDEsMSwxLDFdKSksIGxpc3QoJ0FCQ0RFRicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMV0pKSwgbGlzdCgnQUMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKCdBQkMnLCBbMCwxLDEsMSwxLDFdKSksIGxpc3QoJ0JDJykpCisgICAgICAgIG4gPSAxMDAwMAorICAgICAgICBkYXRhID0gY2hhaW4uZnJvbV9pdGVyYWJsZShyZXBlYXQocmFuZ2UoNiksIG4pKQorICAgICAgICBzZWxlY3RvcnMgPSBjaGFpbi5mcm9tX2l0ZXJhYmxlKHJlcGVhdCgoMCwgMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoZGF0YSwgc2VsZWN0b3JzKSksIFsxLDMsNV0gKiBuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXByZXNzLCBOb25lLCByYW5nZSg2KSkgICAgICAjIDFzdCBhcmcgbm90IGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcHJlc3MsIHJhbmdlKDYpLCBOb25lKSAgICAgICMgMm5kIGFyZyBub3QgaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wcmVzcywgcmFuZ2UoNikpICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wcmVzcywgcmFuZ2UoNiksIE5vbmUpICAgICAgIyB0b28gbWFueSBhcmdzCisKICAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoKSksIFsoJ2EnLCAwKSwgKCdiJywgMSksICgnYycsIDIpXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoMykpLCBbKCdhJywgMyksICgnYicsIDQpLCAoJ2MnLCA1KV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgyLCB6aXAoJ2FiYycsY291bnQoMykpKSwgWygnYScsIDMpLCAoJ2InLCA0KV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgyLCB6aXAoJ2FiYycsY291bnQoLTEpKSksIFsoJ2EnLCAtMSksICgnYicsIDApXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDIsIHppcCgnYWJjJyxjb3VudCgtMykpKSwgWygnYScsIC0zKSwgKCdiJywgLTIpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb3VudCwgMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb3VudCwgMiwgMywgNCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb3VudCwgJ2EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKGNvdW50KG1heHNpemUtNSksIDEwKSksIHJhbmdlKG1heHNpemUtNSwgbWF4c2l6ZSs1KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZShjb3VudCgtbWF4c2l6ZS01KSwgMTApKSwgcmFuZ2UoLW1heHNpemUtNSwgLW1heHNpemUrNSkpCkBAIC0yMTEsNiArMzQxLDcgQEAKICAgICAgICAgYyA9IGNvdW50KC05KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYyksICdjb3VudCgtOSknKQogICAgICAgICBjLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY291bnQoMTAuMjUpKSwgJ2NvdW50KDEwLjI1KScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uZXh0KCksIC04KQogICAgICAgICBmb3IgaSBpbiAoLXN5cy5tYXhpbnQtNSwgLXN5cy5tYXhpbnQrNSAsLTEwLCAtMSwgMCwgMTAsIHN5cy5tYXhpbnQtNSwgc3lzLm1heGludCs1KToKICAgICAgICAgICAgICMgVGVzdCByZXByIChpZ25vcmluZyB0aGUgTCBpbiBsb25ncykKQEAgLTIyNSw2ICszNTYsNDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChjb3B5LmRlZXBjb3B5KGMpKSwgdmFsdWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhjKSkpLCB2YWx1ZSkKIAorICAgIGRlZiB0ZXN0X2NvdW50X3dpdGhfc3RyaWRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgnYWJjJyxjb3VudCgyLDMpKSwgWygnYScsIDIpLCAoJ2InLCA1KSwgKCdjJywgOCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgnYWJjJyxjb3VudChzdGFydD0yLHN0ZXA9MykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2EnLCAyKSwgKCdiJywgNSksICgnYycsIDgpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoc3RlcD0tMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2EnLCAwKSwgKCdiJywgLTEpLCAoJ2MnLCAtMildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgnYWJjJyxjb3VudCgyLDApKSwgWygnYScsIDIpLCAoJ2InLCAyKSwgKCdjJywgMildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgnYWJjJyxjb3VudCgyLDEpKSwgWygnYScsIDIpLCAoJ2InLCAzKSwgKCdjJywgNCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMjAsIGNvdW50KG1heHNpemUtMTUsIDMpKSwgdGFrZSgyMCwgcmFuZ2UobWF4c2l6ZS0xNSwgbWF4c2l6ZSsxMDAsIDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDIwLCBjb3VudCgtbWF4c2l6ZS0xNSwgMykpLCB0YWtlKDIwLCByYW5nZSgtbWF4c2l6ZS0xNSwtbWF4c2l6ZSsxMDAsIDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDMsIGNvdW50KDIsIDMuMjUtNGopKSwgWzIsIDUuMjUtNGosIDguNS04al0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgzLCBjb3VudChEZWNpbWFsKCcxLjEnKSwgRGVjaW1hbCgnLjEnKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWNpbWFsKCcxLjEnKSwgRGVjaW1hbCgnMS4yJyksIERlY2ltYWwoJzEuMycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDMsIGNvdW50KEZyYWN0aW9uKDIsMyksIEZyYWN0aW9uKDEsNykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbRnJhY3Rpb24oMiwzKSwgRnJhY3Rpb24oMTcsMjEpLCBGcmFjdGlvbigyMCwyMSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodGFrZSgzLCBjb3VudCgxMCwgMi41KSkpLCByZXByKFsxMCwgMTIuNSwgMTUuMF0pKQorICAgICAgICBjID0gY291bnQoMywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoMywgNSknKQorICAgICAgICBjLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYyksICdjb3VudCg4LCA1KScpCisgICAgICAgIGMgPSBjb3VudCgtOSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoLTksIDApJykKKyAgICAgICAgYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoLTksIDApJykKKyAgICAgICAgYyA9IGNvdW50KC05LCAtMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoLTksIC0zKScpCisgICAgICAgIGMubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC0xMiwgLTMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoLTEyLCAtMyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY291bnQoMTAuNSwgMS4yNSkpLCAnY291bnQoMTAuNSwgMS4yNSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY291bnQoMTAuNSwgMSkpLCAnY291bnQoMTAuNSknKSAgICAgICAgICAgIyBzdXBwcmVzcyBzdGVwPTEgd2hlbiBpdCdzIGFuIGludAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY291bnQoMTAuNSwgMS4wMCkpLCAnY291bnQoMTAuNSwgMS4wKScpICAgIyBkbyBzaG93IGZsb2F0IHZhbHVlcyBsaWxrZSAxLjAKKyAgICAgICAgZm9yIGkgaW4gKC1zeXMubWF4aW50LTUsIC1zeXMubWF4aW50KzUgLC0xMCwgLTEsIDAsIDEwLCBzeXMubWF4aW50LTUsIHN5cy5tYXhpbnQrNSk6CisgICAgICAgICAgICBmb3IgaiBpbiAgKC1zeXMubWF4aW50LTUsIC1zeXMubWF4aW50KzUgLC0xMCwgLTEsIDAsIDEsIDEwLCBzeXMubWF4aW50LTUsIHN5cy5tYXhpbnQrNSk6CisgICAgICAgICAgICAgICAgIyBUZXN0IHJlcHIgKGlnbm9yaW5nIHRoZSBMIGluIGxvbmdzKQorICAgICAgICAgICAgICAgIHIxID0gcmVwcihjb3VudChpLCBqKSkucmVwbGFjZSgnTCcsICcnKQorICAgICAgICAgICAgICAgIGlmIGogPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcjIgPSAoJ2NvdW50KCVyKScgJSBpKS5yZXBsYWNlKCdMJywgJycpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcjIgPSAoJ2NvdW50KCVyLCAlciknICUgKGksIGopKS5yZXBsYWNlKCdMJywgJycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIpCisKICAgICBkZWYgdGVzdF9jeWNsZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDEwLCBjeWNsZSgnYWJjJykpLCBsaXN0KCdhYmNhYmNhYmNhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjeWNsZSgnJykpLCBbXSkKQEAgLTUxNSw2ICs2ODgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxlbihzZXQobWFwKGlkLCBsaXN0KHByb2R1Y3QoJ2FiYycsICdkZWYnKSkpKSksIDEpCiAKICAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXBlYXQob2JqZWN0PSdhJywgdGltZXM9MykpLCBbJ2EnLCAnYScsICdhJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKHhyYW5nZSgzKSxyZXBlYXQoJ2EnKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWygwLCAnYScpLCAoMSwgJ2EnKSwgKDIsICdhJyldKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmVwZWF0KCdhJywgMykpLCBbJ2EnLCAnYScsICdhJ10pCkBAIC02MDQsNiArNzc4LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGlzbGljZSwgeHJhbmdlKDEwKSwgMSwgJ2EnLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KGlzbGljZShjb3VudCgpLCAxLCAxMCwgbWF4c2l6ZSkpKSwgMSkKIAorICAgICAgICAjIElzc3VlICMxMDMyMzogIExlc3MgaXNsaWNlIGluIGEgcHJlZGljdGFibGUgc3RhdGUKKyAgICAgICAgYyA9IGNvdW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZShjLCAxLCAzLCA1MCkpLCBbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChjKSwgMykKKwogICAgIGRlZiB0ZXN0X3Rha2V3aGlsZShzZWxmKToKICAgICAgICAgZGF0YSA9IFsxLCAzLCA1LCAyMCwgMiwgNCwgNiwgOF0KICAgICAgICAgdW5kZXJ0ZW4gPSBsYW1iZGEgeDogeDwxMApAQCAtNzAxLDcgKzg4MCw3IEBACiAgICAgICAgICMgdGVlIHBhc3MtdGhyb3VnaCB0byBjb3B5YWJsZSBpdGVyYXRvcgogICAgICAgICBhLCBiID0gdGVlKCdhYmMnKQogICAgICAgICBjLCBkID0gdGVlKGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGMpCiAKICAgICAgICAgIyB0ZXN0IHRlZV9uZXcKICAgICAgICAgdDEsIHQyID0gdGVlKCdhYmMnKQpAQCAtNzA5LDcgKzg4OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdG5ldykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0bmV3LCAxMCkKICAgICAgICAgdDMgPSB0bmV3KHQxKQotICAgICAgICBzZWxmLmFzc2VydF8obGlzdCh0MSkgPT0gbGlzdCh0MikgPT0gbGlzdCh0MykgPT0gbGlzdCgnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaXN0KHQxKSA9PSBsaXN0KHQyKSA9PSBsaXN0KHQzKSA9PSBsaXN0KCdhYmMnKSkKIAogICAgICAgICAjIHRlc3QgdGhhdCB0ZWUgb2JqZWN0cyBhcmUgd2VhayByZWZlcmVuY2FibGUKICAgICAgICAgYSwgYiA9IHRlZSh4cmFuZ2UoMTApKQpAQCAtNzU1LDYgKzkzNCwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tYmluYXRpb25zKHJhbmdlKDQpLCAzKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWygwLDEsMiksICgwLDEsMyksICgwLDIsMyksICgxLDIsMyldKQogCisgICAgZGVmIHRlc3RfY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnQUJDJywgMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ0EnLCdBJyksICgnQScsJ0InKSwgKCdBJywnQycpLCAoJ0InLCdCJyksICgnQicsJ0MnKSwgKCdDJywnQycpXSkKKworICAgIGRlZiB0ZXN0X2NvbXByZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0pKSwgbGlzdCgnQUNFRicpKQorCiAgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoY291bnQoMTApLCA1KSksIFsxMCwgMTEsIDEyLCAxMywgMTRdKQogCkBAIC04MzUsNiArMTAyMSwxOSBAQAogICAgICAgICBhID0gW10KICAgICAgICAgc2VsZi5tYWtlY3ljbGUoY29tYmluYXRpb25zKFsxLDIsYSwzXSwgMyksIGEpCiAKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KFsxLDIsYSwzXSwgMyksIGEpCisKKyAgICBkZWYgdGVzdF9jb21wcmVzcyhzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKGNvbXByZXNzKCdBQkNERUYnLCBbMSwwLDEsMCwxLDBdKSwgYSkKKworICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgSW50ID0gdHlwZSgnSW50JywgKGludCwpLCBkaWN0KHg9YSkpCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKGNvdW50KEludCgwKSwgSW50KDEpKSwgYSkKKwogICAgIGRlZiB0ZXN0X2N5Y2xlKHNlbGYpOgogICAgICAgICBhID0gW10KICAgICAgICAgc2VsZi5tYWtlY3ljbGUoY3ljbGUoW2FdKjIpLCBhKQpAQCAtOTg4LDYgKzExODcsMTUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgY2hhaW4oTihzKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGlzdCwgY2hhaW4oRShzKSkpCiAKKyAgICBkZWYgdGVzdF9jb21wcmVzcyhzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIG4gPSBsZW4ocykKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKGcocyksIHJlcGVhdCgxKSkpLCBsaXN0KGcocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wcmVzcywgWChzKSwgcmVwZWF0KDEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBjb21wcmVzcyhOKHMpLCByZXBlYXQoMSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIGNvbXByZXNzKEUocyksIHJlcGVhdCgxKSkpCisKICAgICBkZWYgdGVzdF9wcm9kdWN0KHNlbGYpOgogICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcm9kdWN0LCBYKHMpKQpAQCAtMTE3OSw3ICsxMzg3LDcgQEAKICAgICBkZWYgdGVzdF9rZXl3b3Jkc19pbl9zdWJjbGFzcyhzZWxmKToKICAgICAgICAgIyBjb3VudCBpcyBub3Qgc3ViY2xhc3NhYmxlLi4uCiAgICAgICAgIGZvciBjbHMgaW4gKHJlcGVhdCwgaXppcCwgaWZpbHRlciwgaWZpbHRlcmZhbHNlLCBjaGFpbiwgaW1hcCwKLSAgICAgICAgICAgICAgICAgICAgc3Rhcm1hcCwgaXNsaWNlLCB0YWtld2hpbGUsIGRyb3B3aGlsZSwgY3ljbGUpOgorICAgICAgICAgICAgICAgICAgICBzdGFybWFwLCBpc2xpY2UsIHRha2V3aGlsZSwgZHJvcHdoaWxlLCBjeWNsZSwgY29tcHJlc3MpOgogICAgICAgICAgICAgY2xhc3MgU3ViY2xhc3MoY2xzKToKICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmV3YXJnPU5vbmUsICphcmdzKToKICAgICAgICAgICAgICAgICAgICAgY2xzLl9faW5pdF9fKHNlbGYsICphcmdzKQpAQCAtMTE4Nyw3ICsxMzk1LDcgQEAKICAgICAgICAgICAgICAgICBTdWJjbGFzcyhuZXdhcmc9MSkKICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKICAgICAgICAgICAgICAgICAjIHdlIGV4cGVjdCB0eXBlIGVycm9ycyBiZWNhdXNlIG9mIHdyb25nIGFyZ3VtZW50IGNvdW50Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYoImRvZXMgbm90IHRha2Uga2V5d29yZCBhcmd1bWVudHMiIGluIGVyci5hcmdzWzBdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oImRvZXMgbm90IHRha2Uga2V5d29yZCBhcmd1bWVudHMiLCBlcnIuYXJnc1swXSkKIAogCiBsaWJyZWZ0ZXN0ID0gIiIiIERvY3Rlc3QgZm9yIGV4YW1wbGVzIGluIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZTogbGliaXRlcnRvb2xzLnRleApAQCAtMTMxNCwyNyArMTUyMiw2IEBACiAuLi4gICAgIHMgPSBsaXN0KGl0ZXJhYmxlKQogLi4uICAgICByZXR1cm4gY2hhaW4uZnJvbV9pdGVyYWJsZShjb21iaW5hdGlvbnMocywgcikgZm9yIHIgaW4gcmFuZ2UobGVuKHMpKzEpKQogCi0+Pj4gZGVmIGNvbXByZXNzKGRhdGEsIHNlbGVjdG9ycyk6Ci0uLi4gICAgICJjb21wcmVzcygnQUJDREVGJywgWzEsMCwxLDAsMSwxXSkgLS0+IEEgQyBFIEYiCi0uLi4gICAgIHJldHVybiAoZCBmb3IgZCwgcyBpbiBpemlwKGRhdGEsIHNlbGVjdG9ycykgaWYgcykKLQotPj4+IGRlZiBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcik6Ci0uLi4gICAgICJjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnQUJDJywgMykgLS0+IEFBIEFCIEFDIEJCIEJDIENDIgotLi4uICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCi0uLi4gICAgIG4gPSBsZW4ocG9vbCkKLS4uLiAgICAgaWYgbm90IG4gYW5kIHI6Ci0uLi4gICAgICAgICByZXR1cm4KLS4uLiAgICAgaW5kaWNlcyA9IFswXSAqIHIKLS4uLiAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQotLi4uICAgICB3aGlsZSAxOgotLi4uICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UocikpOgotLi4uICAgICAgICAgICAgIGlmIGluZGljZXNbaV0gIT0gbiAtIDE6Ci0uLi4gICAgICAgICAgICAgICAgIGJyZWFrCi0uLi4gICAgICAgICBlbHNlOgotLi4uICAgICAgICAgICAgIHJldHVybgotLi4uICAgICAgICAgaW5kaWNlc1tpOl0gPSBbaW5kaWNlc1tpXSArIDFdICogKHIgLSBpKQotLi4uICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQotCiA+Pj4gZGVmIHVuaXF1ZV9ldmVyc2VlbihpdGVyYWJsZSwga2V5PU5vbmUpOgogLi4uICAgICAiTGlzdCB1bmlxdWUgZWxlbWVudHMsIHByZXNlcnZpbmcgb3JkZXIuIFJlbWVtYmVyIGFsbCBlbGVtZW50cyBldmVyIHNlZW4uIgogLi4uICAgICAjIHVuaXF1ZV9ldmVyc2VlbignQUFBQUJCQkNDREFBQkJCJykgLS0+IEEgQiBDIEQKQEAgLTE0MTgsMzAgKzE2MDUsMTAgQEAKID4+PiBsaXN0KHBvd2Vyc2V0KFsxLDIsM10pKQogWygpLCAoMSwpLCAoMiwpLCAoMywpLCAoMSwgMiksICgxLCAzKSwgKDIsIDMpLCAoMSwgMiwgMyldCiAKLT4+PiBsaXN0KGNvbXByZXNzKCdhYmNkZWYnLCBbMSwwLDEsMCwxLDFdKSkKLVsnYScsICdjJywgJ2UnLCAnZiddCi0KLT4+PiBsaXN0KGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCdhYmMnLCAyKSkKLVsoJ2EnLCAnYScpLCAoJ2EnLCAnYicpLCAoJ2EnLCAnYycpLCAoJ2InLCAnYicpLCAoJ2InLCAnYycpLCAoJ2MnLCAnYycpXQotCi0+Pj4gbGlzdChjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnMDEnLCAzKSkKLVsoJzAnLCAnMCcsICcwJyksICgnMCcsICcwJywgJzEnKSwgKCcwJywgJzEnLCAnMScpLCAoJzEnLCAnMScsICcxJyldCi0KLT4+PiBkZWYgY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQyKGl0ZXJhYmxlLCByKToKLS4uLiAgICAgJ0FsdGVybmF0ZSB2ZXJzaW9uIHRoYXQgZmlsdGVycyBmcm9tIHByb2R1Y3QoKScKLS4uLiAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQotLi4uICAgICBuID0gbGVuKHBvb2wpCi0uLi4gICAgIGZvciBpbmRpY2VzIGluIHByb2R1Y3QocmFuZ2UobiksIHJlcGVhdD1yKToKLS4uLiAgICAgICAgIGlmIHNvcnRlZChpbmRpY2VzKSA9PSBsaXN0KGluZGljZXMpOgotLi4uICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKLQotPj4+IGxpc3QoY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoJ2FiYycsIDIpKSA9PSBsaXN0KGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50MignYWJjJywgMikpCis+Pj4gYWxsKGxlbihsaXN0KHBvd2Vyc2V0KHJhbmdlKG4pKSkpID09IDIqKm4gZm9yIG4gaW4gcmFuZ2UoMTgpKQogVHJ1ZQogCi0+Pj4gbGlzdChjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnMDEnLCAzKSkgPT0gbGlzdChjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudDIoJzAxJywgMykpCi1UcnVlCi0KLT4+PiBsaXN0KGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCcyMzEwJywgNikpID09IGxpc3QoY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQyKCcyMzEwJywgNikpCis+Pj4gbGlzdChwb3dlcnNldCgnYWJjZGUnKSkgPT0gc29ydGVkKHNvcnRlZChzZXQocG93ZXJzZXQoJ2FiY2RlJykpKSwga2V5PWxlbikKIFRydWUKIAogPj4+IGxpc3QodW5pcXVlX2V2ZXJzZWVuKCdBQUFBQkJCQ0NEQUFCQkInKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5IGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKaW5kZXggYjg4N2RjMC4uZTVlZWNmYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKQEAgLTEwLDE1ICsxMCwxNSBAQAogCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogaWYgbm90IGhhc2F0dHIoc2VsZWN0LCAia3F1ZXVlIik6Ci0gICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RTa2lwcGVkKCJ0ZXN0IHdvcmtzIG9ubHkgb24gQlNEIikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgidGVzdCB3b3JrcyBvbmx5IG9uIEJTRCIpCiAKIGNsYXNzIFRlc3RLUXVldWUodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2NyZWF0ZV9xdWV1ZShzZWxmKToKICAgICAgICAga3EgPSBzZWxlY3Qua3F1ZXVlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGtxLmZpbGVubygpID4gMCwga3EuZmlsZW5vKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qga3EuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoa3EuZmlsZW5vKCkgPiAwLCBrcS5maWxlbm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBrcS5jbG9zZWQpCiAgICAgICAgIGtxLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGtxLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtxLmNsb3NlZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwga3EuZmlsZW5vKQogCiAgICAgZGVmIHRlc3RfY3JlYXRlX2V2ZW50KHNlbGYpOgpAQCAtMzQsOCArMzQsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LCBldikKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChldiwgb3RoZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGV2LCBvdGhlciksIC0xKQotICAgICAgICBzZWxmLmFzc2VydF8oZXYgPCBvdGhlcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG90aGVyID49IGV2KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXYgPCBvdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG90aGVyID49IGV2KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgZXYsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wLCBldiwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXAsIGV2LCAiZXYiKQpAQCAtNzAsNiArNzAsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldiwgZXYpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXYsIG90aGVyKQogCisgICAgICAgIGJpZ251bSA9IHN5cy5tYXhzaXplICogMiArIDEKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KGJpZ251bSwgMSwgMiwgMywgc3lzLm1heHNpemUsIGJpZ251bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5pZGVudCwgYmlnbnVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZpbHRlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5mbGFncywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5mZmxhZ3MsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZGF0YSwgc3lzLm1heHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYudWRhdGEsIGJpZ251bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldiwgZXYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXYsIG90aGVyKQorCiAgICAgZGVmIHRlc3RfcXVldWVfZXZlbnQoc2VsZik6CiAgICAgICAgIHNlcnZlclNvY2tldCA9IHNvY2tldC5zb2NrZXQoKQogICAgICAgICBzZXJ2ZXJTb2NrZXQuYmluZCgoJzEyNy4wLjAuMScsIDApKQpAQCAtNzksNyArOTAsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGUuYXJnc1swXSwgZXJybm8uRUlOUFJPR1JFU1MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUlOUFJPR1JFU1MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkNvbm5lY3Qgc2hvdWxkIGhhdmUgcmFpc2VkIEVJTlBST0dSRVNTIikKICAgICAgICAgICAgIHBhc3MgIyBGcmVlQlNEIGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIGhlcmUKQEAgLTExMyw3ICsxMjQsNyBAQAogICAgICAgICBldmVudHMgPSBrcS5jb250cm9sKE5vbmUsIDQsIDEpCiAgICAgICAgIGV2ZW50cyA9IFsoZS5pZGVudCwgZS5maWx0ZXIsIGUuZmxhZ3MpIGZvciBlIGluIGV2ZW50c10KICAgICAgICAgZXZlbnRzLnNvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhldmVudHMsIFsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsKICAgICAgICAgICAgIChjbGllbnQuZmlsZW5vKCksIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsIGZsYWdzKSwKICAgICAgICAgICAgIChzZXJ2ZXIuZmlsZW5vKCksIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsIGZsYWdzKV0pCiAKQEAgLTEzMiw3ICsxNDMsNyBAQAogICAgICAgICBldmVudHMgPSBbKGUuaWRlbnQsIGUuZmlsdGVyLCBlLmZsYWdzKSBmb3IgZSBpbiBldmVudHNdCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhldmVudHMsIFsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsKICAgICAgICAgICAgIChjbGllbnQuZmlsZW5vKCksIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsIGZsYWdzKSwKICAgICAgICAgICAgIChjbGllbnQuZmlsZW5vKCksIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwgZmxhZ3MpLAogICAgICAgICAgICAgKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSwgZmxhZ3MpLApAQCAtMTU1LDcgKzE2Niw3IEBACiAgICAgICAgIGV2ZW50cyA9IGtxLmNvbnRyb2woW10sIDQsIDAuOTkpCiAgICAgICAgIGV2ZW50cyA9IFsoZS5pZGVudCwgZS5maWx0ZXIsIGUuZmxhZ3MpIGZvciBlIGluIGV2ZW50c10KICAgICAgICAgZXZlbnRzLnNvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhldmVudHMsIFsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsKICAgICAgICAgICAgIChzZXJ2ZXIuZmlsZW5vKCksIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsIGZsYWdzKV0pCiAKICAgICAgICAgY2xpZW50LmNsb3NlKCkKQEAgLTE3Miw3ICsxODMsNyBAQAogICAgICAgICByID0ga3EuY29udHJvbChbZXZlbnQxLCBldmVudDJdLCAxLCAxKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyWzBdLmZsYWdzICYgc2VsZWN0LktRX0VWX0VSUk9SKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiLnJlY3YoclswXS5kYXRhKSwgYidmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucmVjdihyWzBdLmRhdGEpLCBiJ2ZvbycpCiAKICAgICAgICAgYS5jbG9zZSgpCiAgICAgICAgIGIuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQppbmRleCAxZGEwZTdkLi4xNmRhOGQ4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQpAQCAtMSwxMiArMSwxNiBAQAogIiIiVGVzdCBsYXJnZWZpbGUgc3VwcG9ydCBvbiBzeXN0ZW0gd2hlcmUgdGhpcyBtYWtlcyBzZW5zZS4KICIiIgogCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKIGltcG9ydCBvcwogaW1wb3J0IHN0YXQKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIHZlcmJvc2UsIHJlcXVpcmVzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0U2tpcHBlZCwgdW5saW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmsKK2ltcG9ydCBpbyAgIyBDIGltcGxlbWVudGF0aW9uIG9mIGlvCitpbXBvcnQgX3B5aW8gYXMgcHlpbyAjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBpbwogCiB0cnk6CiAgICAgaW1wb3J0IHNpZ25hbApAQCAtMTgsMTAgKzIyLDEwIEBACiAgICAgcGFzcwogCiAjIGNyZWF0ZSA+MkdCIGZpbGUgKDJHQiA9IDIxNDc0ODM2NDggYnl0ZXMpCi1zaXplID0gMjUwMDAwMDAwMEwKK3NpemUgPSAyNTAwMDAwMDAwCiAKIAotY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgTGFyZ2VGaWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCB0aGF0IGVhY2ggZmlsZSBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZCBmb3IgYSBsYXJnZQogICAgIChpLmUuID4gMkdCLCBkbyAgd2UgaGF2ZSB0byBjaGVjayA+IDRHQikgZmlsZXMuCiAKQEAgLTMzLDI4ICszNywyOCBAQAogCiAgICAgZGVmIHRlc3Rfc2VlayhzZWxmKToKICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgIHByaW50ICdjcmVhdGUgbGFyZ2UgZmlsZSB2aWEgc2VlayAobWF5IGJlIHNwYXJzZSBmaWxlKSAuLi4nCi0gICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKCd6JykKKyAgICAgICAgICAgIHByaW50KCdjcmVhdGUgbGFyZ2UgZmlsZSB2aWEgc2VlayAobWF5IGJlIHNwYXJzZSBmaWxlKSAuLi4nKQorICAgICAgICB3aXRoIHNlbGYub3BlbihURVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIneicpCiAgICAgICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgICAgIGYuc2VlayhzaXplKQotICAgICAgICAgICAgZi53cml0ZSgnYScpCisgICAgICAgICAgICBmLndyaXRlKGInYScpCiAgICAgICAgICAgICBmLmZsdXNoKCkKICAgICAgICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgJ2NoZWNrIGZpbGUgc2l6ZSB3aXRoIG9zLmZzdGF0JworICAgICAgICAgICAgICAgIHByaW50KCdjaGVjayBmaWxlIHNpemUgd2l0aCBvcy5mc3RhdCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmZzdGF0KGYuZmlsZW5vKCkpW3N0YXQuU1RfU0laRV0sIHNpemUrMSkKIAogICAgIGRlZiB0ZXN0X29zc3RhdChzZWxmKToKICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgIHByaW50ICdjaGVjayBmaWxlIHNpemUgd2l0aCBvcy5zdGF0JworICAgICAgICAgICAgcHJpbnQoJ2NoZWNrIGZpbGUgc2l6ZSB3aXRoIG9zLnN0YXQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQoVEVTVEZOKVtzdGF0LlNUX1NJWkVdLCBzaXplKzEpCiAKICAgICBkZWYgdGVzdF9zZWVrX3JlYWQoc2VsZik6CiAgICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAncGxheSBhcm91bmQgd2l0aCBzZWVrKCkgYW5kIHJlYWQoKSB3aXRoIHRoZSBidWlsdCBsYXJnZWZpbGUnCi0gICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICBwcmludCgncGxheSBhcm91bmQgd2l0aCBzZWVrKCkgYW5kIHJlYWQoKSB3aXRoIHRoZSBidWlsdCBsYXJnZWZpbGUnKQorICAgICAgICB3aXRoIHNlbGYub3BlbihURVNURk4sICdyYicpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksICd6JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCBiJ3onKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMSkKICAgICAgICAgICAgIGYuc2VlaygwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMCkKQEAgLTc3LDE1ICs4MSwxNSBAQAogICAgICAgICAgICAgZi5zZWVrKHNpemUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBzaXplKQogICAgICAgICAgICAgIyB0aGUgJ2EnIHRoYXQgd2FzIHdyaXR0ZW4gYXQgdGhlIGVuZCBvZiBmaWxlIGFib3ZlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksIGInYScpCiAgICAgICAgICAgICBmLnNlZWsoLXNpemUtMSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCAneicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgYid6JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDEpCiAKICAgICBkZWYgdGVzdF9sc2VlayhzZWxmKToKICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgIHByaW50ICdwbGF5IGFyb3VuZCB3aXRoIG9zLmxzZWVrKCkgd2l0aCB0aGUgYnVpbHQgbGFyZ2VmaWxlJwotICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgcHJpbnQoJ3BsYXkgYXJvdW5kIHdpdGggb3MubHNlZWsoKSB3aXRoIHRoZSBidWlsdCBsYXJnZWZpbGUnKQorICAgICAgICB3aXRoIHNlbGYub3BlbihURVNURk4sICdyYicpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmxzZWVrKGYuZmlsZW5vKCksIDAsIDApLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCA0MiwgMCksIDQyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCA0MiwgMSksIDg0KQpAQCAtOTUsMTYgKzk5LDE2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmxzZWVrKGYuZmlsZW5vKCksIC1zaXplLTEsIDIpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCBzaXplLCAwKSwgc2l6ZSkKICAgICAgICAgICAgICMgdGhlICdhJyB0aGF0IHdhcyB3cml0dGVuIGF0IHRoZSBlbmQgb2YgZmlsZSBhYm92ZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksICdhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCBiJ2EnKQogCiAgICAgZGVmIHRlc3RfdHJ1bmNhdGUoc2VsZik6CiAgICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAndHJ5IHRydW5jYXRlJwotICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncitiJykgYXMgZjoKKyAgICAgICAgICAgIHByaW50KCd0cnkgdHJ1bmNhdGUnKQorICAgICAgICB3aXRoIHNlbGYub3BlbihURVNURk4sICdyK2InKSBhcyBmOgogICAgICAgICAgICAgIyB0aGlzIGlzIGFscmVhZHkgZGVjaWRlZCBiZWZvcmUgc3RhcnQgcnVubmluZyB0aGUgdGVzdCBzdWl0ZQogICAgICAgICAgICAgIyBidXQgd2UgZG8gaXQgYW55d2F5IGZvciBleHRyYSBwcm90ZWN0aW9uCiAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihmLCAndHJ1bmNhdGUnKToKLSAgICAgICAgICAgICAgICByYWlzZSBUZXN0U2tpcHBlZCwgIm9wZW4oKS50cnVuY2F0ZSgpIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0iCisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9wZW4oKS50cnVuY2F0ZSgpIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0iKQogICAgICAgICAgICAgZi5zZWVrKDAsIDIpCiAgICAgICAgICAgICAjIGVsc2Ugd2UndmUgbG9zdCB0cmFjayBvZiB0aGUgdHJ1ZSBzaXplCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBzaXplKzEpCkBAIC0xMjAsMTcgKzEyNCwyOSBAQAogICAgICAgICAgICAgbmV3c2l6ZSAtPSAxCiAgICAgICAgICAgICBmLnNlZWsoNDIpCiAgICAgICAgICAgICBmLnRydW5jYXRlKG5ld3NpemUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA0MikgICAgICAgIyBlbHNlIHBvaW50ZXIgbW92ZWQKKyAgICAgICAgICAgIGlmIHNlbGYubmV3X2lvOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDQyKQogICAgICAgICAgICAgZi5zZWVrKDAsIDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBuZXdzaXplKSAgIyBlbHNlIHdhc24ndCB0cnVuY2F0ZWQKLQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgbmV3c2l6ZSkKICAgICAgICAgICAgICMgWFhYIHRydW5jYXRlKGxhcmdlciB0aGFuIHRydWUgc2l6ZSkgaXMgaWxsLWRlZmluZWQKICAgICAgICAgICAgICMgYWNyb3NzIHBsYXRmb3JtOyBjdXQgaXQgd2FhYWFheSBiYWNrCiAgICAgICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgICAgIGYudHJ1bmNhdGUoMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDApICAgICAgICMgZWxzZSBwb2ludGVyIG1vdmVkCisgICAgICAgICAgICBpZiBzZWxmLm5ld19pbzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAwKSAgICAgICAjIGVsc2UgcG9pbnRlciBtb3ZlZAorICAgICAgICAgICAgZi5zZWVrKDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmLnJlYWQoKSksIDEpICAjIGVsc2Ugd2Fzbid0IHRydW5jYXRlZAogCisgICAgZGVmIHRlc3Rfc2Vla2FibGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzUwMTY7IHNlZWthYmxlKCkgY2FuIHJldHVybiBGYWxzZSB3aGVuIHRoZSBjdXJyZW50IHBvc2l0aW9uCisgICAgICAgICMgaXMgbmVnYXRpdmUgd2hlbiB0cnVuY2F0ZWQgdG8gYW4gaW50LgorICAgICAgICBpZiBub3Qgc2VsZi5uZXdfaW86CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJidWlsdGluIGZpbGUgZG9lc24ndCBoYXZlIHNlZWthYmxlKCkiKQorICAgICAgICBmb3IgcG9zIGluICgyKiozMS0xLCAyKiozMSwgMioqMzErMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihURVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5zZWVrKHBvcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5zZWVrYWJsZSgpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICAjIE9uIFdpbmRvd3MgYW5kIE1hYyBPU1ggdGhpcyB0ZXN0IGNvbXN1bWVzIGxhcmdlIHJlc291cmNlczsgSXQKQEAgLTE0NCwzNCArMTYwLDQxIEBACiAgICAgICAgICMgT25seSBydW4gaWYgdGhlIGN1cnJlbnQgZmlsZXN5c3RlbSBzdXBwb3J0cyBsYXJnZSBmaWxlcy4KICAgICAgICAgIyAoU2tpcCB0aGlzIHRlc3Qgb24gV2luZG93cywgc2luY2Ugd2Ugbm93IGFsd2F5cyBzdXBwb3J0CiAgICAgICAgICMgbGFyZ2UgZmlsZXMuKQotICAgICAgICBmID0gb3BlbihURVNURk4sICd3YicpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3diJywgYnVmZmVyaW5nPTApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgMioqMzEgPT0gMjE0NzQ4MzY0OAotICAgICAgICAgICAgZi5zZWVrKDIxNDc0ODM2NDlMKQorICAgICAgICAgICAgZi5zZWVrKDIxNDc0ODM2NDkpCiAgICAgICAgICAgICAjIFNlZWtpbmcgaXMgbm90IGVub3VnaCBvZiBhIHRlc3Q6IHlvdSBtdXN0IHdyaXRlIGFuZAogICAgICAgICAgICAgIyBmbHVzaCwgdG9vIQotICAgICAgICAgICAgZi53cml0ZSgieCIpCisgICAgICAgICAgICBmLndyaXRlKGIneCcpCiAgICAgICAgICAgICBmLmZsdXNoKCkKICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKLSAgICAgICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkLCAiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGxhcmdlZmlsZSBzdXBwb3J0IgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSBsYXJnZWZpbGUgc3VwcG9ydCIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgc3VpdGUuYWRkVGVzdChUZXN0Q2FzZSgndGVzdF9zZWVrJykpCi0gICAgc3VpdGUuYWRkVGVzdChUZXN0Q2FzZSgndGVzdF9vc3N0YXQnKSkKLSAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X3NlZWtfcmVhZCcpKQotICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3RfbHNlZWsnKSkKLSAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGY6Ci0gICAgICAgIGlmIGhhc2F0dHIoZiwgJ3RydW5jYXRlJyk6Ci0gICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X3RydW5jYXRlJykpCi0gICAgdW5saW5rKFRFU1RGTikKKyAgICBmb3IgX29wZW4sIHByZWZpeCBpbiBbKGlvLm9wZW4sICdDJyksIChweWlvLm9wZW4sICdQeScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlbiwgJ0J1aWx0aW4nKV06CisgICAgICAgIGNsYXNzIFRlc3RDYXNlKExhcmdlRmlsZVRlc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBUZXN0Q2FzZS5vcGVuID0gc3RhdGljbWV0aG9kKF9vcGVuKQorICAgICAgICBUZXN0Q2FzZS5uZXdfaW8gPSBfb3BlbiBpcyBub3Qgb3BlbgorICAgICAgICBUZXN0Q2FzZS5fX25hbWVfXyA9IHByZWZpeCArIExhcmdlRmlsZVRlc3QuX19uYW1lX18KKyAgICAgICAgc3VpdGUuYWRkVGVzdChUZXN0Q2FzZSgndGVzdF9zZWVrJykpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3Rfb3NzdGF0JykpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3Rfc2Vla19yZWFkJykpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3RfbHNlZWsnKSkKKyAgICAgICAgd2l0aCBfb3BlbihURVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICBpZiBoYXNhdHRyKGYsICd0cnVuY2F0ZScpOgorICAgICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3RfdHJ1bmNhdGUnKSkKKyAgICAgICAgc3VpdGUuYWRkVGVzdChUZXN0Q2FzZSgndGVzdF9zZWVrYWJsZScpKQorICAgICAgICB1bmxpbmsoVEVTVEZOKQogICAgIHRyeToKICAgICAgICAgcnVuX3VuaXR0ZXN0KHN1aXRlKQogICAgIGZpbmFsbHk6CiAgICAgICAgIHVubGluayhURVNURk4pCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9saWIydG8zLnB5IGIvTGliL3Rlc3QvdGVzdF9saWIydG8zLnB5CmluZGV4IGUzMzIwNjIuLjEwOWEyNmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbGliMnRvMy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xpYjJ0bzMucHkKQEAgLTEsMTMgKzEsMTUgQEAKICMgU2tpcHBpbmcgdGVzdF9wYXJzZXIgYW5kIHRlc3RfYWxsX2ZpeGVycwogIyBiZWNhdXNlIG9mIHJ1bm5pbmcKLWZyb20gbGliMnRvMy50ZXN0cyBpbXBvcnQgdGVzdF9maXhlcnMsIHRlc3RfcHl0cmVlLCB0ZXN0X3V0aWwsIHRlc3RfcmVmYWN0b3IKK2Zyb20gbGliMnRvMy50ZXN0cyBpbXBvcnQgKHRlc3RfZml4ZXJzLCB0ZXN0X3B5dHJlZSwgdGVzdF91dGlsLCB0ZXN0X3JlZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXJzZXIsIHRlc3RfbWFpbiBhcyB0ZXN0X21haW5fKQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogZGVmIHN1aXRlKCk6CiAgICAgdGVzdHMgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQogICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgIGZvciBtIGluICh0ZXN0X2ZpeGVycyx0ZXN0X3B5dHJlZSx0ZXN0X3V0aWwsIHRlc3RfcmVmYWN0b3IpOgorICAgIGZvciBtIGluICh0ZXN0X2ZpeGVycywgdGVzdF9weXRyZWUsdGVzdF91dGlsLCB0ZXN0X3JlZmFjdG9yLCB0ZXN0X3BhcnNlciwKKyAgICAgICAgICAgICAgdGVzdF9tYWluXyk6CiAgICAgICAgIHRlc3RzLmFkZFRlc3RzKGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pKQogICAgIHJldHVybiB0ZXN0cwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xpbmVjYWNoZS5weSBiL0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5CmluZGV4IDk0NWQ3NjguLjQwN2JlYmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5CkBAIC0xMiw3ICsxMiw3IEBACiBURVNUUyA9ICdjamtlbmNvZGluZ3NfdGVzdCBpbnNwZWN0X2ZvZGRlciBpbnNwZWN0X2ZvZGRlcjIgbWFwcGluZ190ZXN0cycKIFRFU1RTID0gVEVTVFMuc3BsaXQoKQogVEVTVF9QQVRIID0gb3MucGF0aC5kaXJuYW1lKHN1cHBvcnQuX19maWxlX18pCi1NT0RVTEVTID0gImxpbmVjYWNoZSB1bml0dGVzdCIuc3BsaXQoKQorTU9EVUxFUyA9ICJsaW5lY2FjaGUgYWJjIi5zcGxpdCgpCiBNT0RVTEVfUEFUSCA9IG9zLnBhdGguZGlybmFtZShGSUxFTkFNRSkKIAogU09VUkNFXzEgPSAnJycKQEAgLTQyLDQwICs0MiwzOCBAQAogICAgICAgICBnZXRsaW5lID0gbGluZWNhY2hlLmdldGxpbmUKIAogICAgICAgICAjIEJhZCB2YWx1ZXMgZm9yIGxpbmUgbnVtYmVyIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdldGxpbmUoRklMRU5BTUUsIDIqKjE1KSwgRU1QVFkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdldGxpbmUoRklMRU5BTUUsIC0xKSwgRU1QVFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0bGluZShGSUxFTkFNRSwgMioqMTUpLCBFTVBUWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRsaW5lKEZJTEVOQU1FLCAtMSksIEVNUFRZKQogCiAgICAgICAgICMgRmxvYXQgdmFsdWVzIGN1cnJlbnRseSByYWlzZSBUeXBlRXJyb3IsIHNob3VsZCBpdD8KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRsaW5lLCBGSUxFTkFNRSwgMS4xKQogCiAgICAgICAgICMgQmFkIGZpbGVuYW1lcyBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnZXRsaW5lKEVNUFRZLCAxKSwgRU1QVFkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdldGxpbmUoSU5WQUxJRF9OQU1FLCAxKSwgRU1QVFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0bGluZShFTVBUWSwgMSksIEVNUFRZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGxpbmUoSU5WQUxJRF9OQU1FLCAxKSwgRU1QVFkpCiAKICAgICAgICAgIyBDaGVjayB3aGV0aGVyIGxpbmVzIGNvcnJlc3BvbmQgdG8gdGhvc2UgZnJvbSBmaWxlIGl0ZXJhdGlvbgogICAgICAgICBmb3IgZW50cnkgaW4gVEVTVFM6CiAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihURVNUX1BBVEgsIGVudHJ5KSArICcucHknCiAgICAgICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKG9wZW4oZmlsZW5hbWUpKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsaW5lLCBnZXRsaW5lKGZpbGVuYW1lLCBpbmRleCArIDEpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZ2V0bGluZShmaWxlbmFtZSwgaW5kZXggKyAxKSkKIAogICAgICAgICAjIENoZWNrIG1vZHVsZSBsb2FkaW5nCiAgICAgICAgIGZvciBlbnRyeSBpbiBNT0RVTEVTOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oTU9EVUxFX1BBVEgsIGVudHJ5KSArICcucHknCiAgICAgICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKG9wZW4oZmlsZW5hbWUpKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsaW5lLCBnZXRsaW5lKGZpbGVuYW1lLCBpbmRleCArIDEpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZ2V0bGluZShmaWxlbmFtZSwgaW5kZXggKyAxKSkKIAogICAgICAgICAjIENoZWNrIHRoYXQgYm9ndXMgZGF0YSBpc24ndCByZXR1cm5lZCAoaXNzdWUgIzEzMDk1NjcpCiAgICAgICAgIGVtcHR5ID0gbGluZWNhY2hlLmdldGxpbmVzKCdhL2IvYy9fX2luaXRfXy5weScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVtcHR5LCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbXB0eSwgW10pCiAKICAgICBkZWYgdGVzdF9ub19lbmRpbmdfbmV3bGluZShzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGZwOgotICAgICAgICAgICAgICAgIGZwLndyaXRlKFNPVVJDRV8zKQotICAgICAgICAgICAgbGluZXMgPSBsaW5lY2FjaGUuZ2V0bGluZXMoc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIlxuIiwgImRlZiBmKCk6XG4iLCAiICAgIHJldHVybiAzXG4iXSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShTT1VSQ0VfMykKKyAgICAgICAgbGluZXMgPSBsaW5lY2FjaGUuZ2V0bGluZXMoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsiXG4iLCAiZGVmIGYoKTpcbiIsICIgICAgcmV0dXJuIDNcbiJdKQogCiAgICAgZGVmIHRlc3RfY2xlYXJjYWNoZShzZWxmKToKICAgICAgICAgY2FjaGVkID0gW10KQEAgLTg2LDUxICs4NCw0NSBAQAogCiAgICAgICAgICMgQXJlIGFsbCBmaWxlcyBjYWNoZWQ/CiAgICAgICAgIGNhY2hlZF9lbXB0eSA9IFtmbiBmb3IgZm4gaW4gY2FjaGVkIGlmIGZuIG5vdCBpbiBsaW5lY2FjaGUuY2FjaGVdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNhY2hlZF9lbXB0eSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FjaGVkX2VtcHR5LCBbXSkKIAogICAgICAgICAjIENhbiB3ZSBjbGVhciB0aGUgY2FjaGU/CiAgICAgICAgIGxpbmVjYWNoZS5jbGVhcmNhY2hlKCkKICAgICAgICAgY2FjaGVkX2VtcHR5ID0gW2ZuIGZvciBmbiBpbiBjYWNoZWQgaWYgZm4gaW4gbGluZWNhY2hlLmNhY2hlXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjYWNoZWRfZW1wdHksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhY2hlZF9lbXB0eSwgW10pCiAKICAgICBkZWYgdGVzdF9jaGVja2NhY2hlKHNlbGYpOgogICAgICAgICBnZXRsaW5lID0gbGluZWNhY2hlLmdldGxpbmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBDcmVhdGUgYSBzb3VyY2UgZmlsZSBhbmQgY2FjaGUgaXRzIGNvbnRlbnRzCi0gICAgICAgICAgICBzb3VyY2VfbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgJy5weScKLSAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2VfbmFtZSwgJ3cnKSBhcyBzb3VyY2U6Ci0gICAgICAgICAgICAgICAgc291cmNlLndyaXRlKFNPVVJDRV8xKQotICAgICAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZ2V0bGluZShzb3VyY2VfbmFtZSwgMSkKKyAgICAgICAgIyBDcmVhdGUgYSBzb3VyY2UgZmlsZSBhbmQgY2FjaGUgaXRzIGNvbnRlbnRzCisgICAgICAgIHNvdXJjZV9uYW1lID0gc3VwcG9ydC5URVNURk4gKyAnLnB5JworICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHNvdXJjZV9uYW1lKQorICAgICAgICB3aXRoIG9wZW4oc291cmNlX25hbWUsICd3JykgYXMgc291cmNlOgorICAgICAgICAgICAgc291cmNlLndyaXRlKFNPVVJDRV8xKQorICAgICAgICBnZXRsaW5lKHNvdXJjZV9uYW1lLCAxKQogCi0gICAgICAgICAgICAgICAgIyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGNvbnRlbnRzCi0gICAgICAgICAgICAgICAgc291cmNlX2xpc3QgPSBbXQotICAgICAgICAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlX25hbWUpCi0gICAgICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShzb3VyY2UpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsaW5lLCBnZXRsaW5lKHNvdXJjZV9uYW1lLCBpbmRleCArIDEpKQotICAgICAgICAgICAgICAgICAgICBzb3VyY2VfbGlzdC5hcHBlbmQobGluZSkKLSAgICAgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQorICAgICAgICAjIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgY29udGVudHMKKyAgICAgICAgc291cmNlX2xpc3QgPSBbXQorICAgICAgICB3aXRoIG9wZW4oc291cmNlX25hbWUpIGFzIHNvdXJjZToKKyAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoc291cmNlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoc291cmNlX25hbWUsIGluZGV4ICsgMSkpCisgICAgICAgICAgICAgICAgc291cmNlX2xpc3QuYXBwZW5kKGxpbmUpCiAKLSAgICAgICAgICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZV9uYW1lLCAndycpCi0gICAgICAgICAgICAgICAgc291cmNlLndyaXRlKFNPVVJDRV8yKQotICAgICAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihzb3VyY2VfbmFtZSwgJ3cnKSBhcyBzb3VyY2U6CisgICAgICAgICAgICBzb3VyY2Uud3JpdGUoU09VUkNFXzIpCiAKLSAgICAgICAgICAgICAgICAjIFRyeSB0byB1cGRhdGUgYSBib2d1cyBjYWNoZSBlbnRyeQotICAgICAgICAgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKCdkdW1teScpCisgICAgICAgICMgVHJ5IHRvIHVwZGF0ZSBhIGJvZ3VzIGNhY2hlIGVudHJ5CisgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKCdkdW1teScpCiAKLSAgICAgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGNhY2hlIG1hdGNoZXMgdGhlIG9sZCBjb250ZW50cwotICAgICAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoc291cmNlX2xpc3QpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsaW5lLCBnZXRsaW5lKHNvdXJjZV9uYW1lLCBpbmRleCArIDEpKQorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGNhY2hlIG1hdGNoZXMgdGhlIG9sZCBjb250ZW50cworICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKHNvdXJjZV9saXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZ2V0bGluZShzb3VyY2VfbmFtZSwgaW5kZXggKyAxKSkKIAotICAgICAgICAgICAgICAgICMgVXBkYXRlIHRoZSBjYWNoZSBhbmQgY2hlY2sgd2hldGhlciBpdCBtYXRjaGVzIHRoZSBuZXcgc291cmNlIGZpbGUKLSAgICAgICAgICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShzb3VyY2VfbmFtZSkKLSAgICAgICAgICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZV9uYW1lKQotICAgICAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoc291cmNlKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGluZSwgZ2V0bGluZShzb3VyY2VfbmFtZSwgaW5kZXggKyAxKSkKLSAgICAgICAgICAgICAgICAgICAgc291cmNlX2xpc3QuYXBwZW5kKGxpbmUpCi0KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHNvdXJjZV9uYW1lKQorICAgICAgICAjIFVwZGF0ZSB0aGUgY2FjaGUgYW5kIGNoZWNrIHdoZXRoZXIgaXQgbWF0Y2hlcyB0aGUgbmV3IHNvdXJjZSBmaWxlCisgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKHNvdXJjZV9uYW1lKQorICAgICAgICB3aXRoIG9wZW4oc291cmNlX25hbWUpIGFzIHNvdXJjZToKKyAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoc291cmNlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoc291cmNlX25hbWUsIGluZGV4ICsgMSkpCisgICAgICAgICAgICAgICAgc291cmNlX2xpc3QuYXBwZW5kKGxpbmUpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChMaW5lQ2FjaGVUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbGludXhhdWRpb2Rldi5weSBiL0xpYi90ZXN0L3Rlc3RfbGludXhhdWRpb2Rldi5weQppbmRleCBlNDA2YmU2Li5mZWY0NmI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xpbnV4YXVkaW9kZXYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9saW51eGF1ZGlvZGV2LnB5CkBAIC0xLDcgKzEsNyBAQAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIHRlc3Rfc3VwcG9ydC5yZXF1aXJlcygnYXVkaW8nKQogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIHJ1bl91bml0dGVzdAogCiBpbXBvcnQgZXJybm8KIGltcG9ydCBzeXMKQEAgLTYxLDM2ICs2MSwzNiBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKC0xLCBzaXplLCBuY2hhbm5lbHMsIGZtdCkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5hcmdzWzBdLCAiZXhwZWN0ZWQgcmF0ZSA+PSAwLCBub3QgLTEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgImV4cGVjdGVkIHJhdGUgPj0gMCwgbm90IC0xIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5kZXYuc2V0cGFyYW1ldGVycyhyYXRlLCAtMiwgbmNoYW5uZWxzLCBmbXQpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuYXJnc1swXSwgImV4cGVjdGVkIHNhbXBsZSBzaXplID49IDAsIG5vdCAtMiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzWzBdLCAiZXhwZWN0ZWQgc2FtcGxlIHNpemUgPj0gMCwgbm90IC0yIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5kZXYuc2V0cGFyYW1ldGVycyhyYXRlLCBzaXplLCAzLCBmbXQpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuYXJnc1swXSwgIm5jaGFubmVscyBtdXN0IGJlIDEgb3IgMiwgbm90IDMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgIm5jaGFubmVscyBtdXN0IGJlIDEgb3IgMiwgbm90IDMiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKHJhdGUsIHNpemUsIG5jaGFubmVscywgMTc3KQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmFyZ3NbMF0sICJ1bmtub3duIGF1ZGlvIGVuY29kaW5nOiAxNzciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgInVua25vd24gYXVkaW8gZW5jb2Rpbmc6IDE3NyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuZGV2LnNldHBhcmFtZXRlcnMocmF0ZSwgc2l6ZSwgbmNoYW5uZWxzLCBsaW51eGF1ZGlvZGV2LkFGTVRfVTE2X0xFKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmFyZ3NbMF0sICJmb3IgbGluZWFyIHVuc2lnbmVkIDE2LWJpdCBsaXR0bGUtZW5kaWFuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdWRpbywgZXhwZWN0ZWQgc2FtcGxlIHNpemUgMTYsIG5vdCA4IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3NbMF0sICJmb3IgbGluZWFyIHVuc2lnbmVkIDE2LWJpdCBsaXR0bGUtZW5kaWFuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1ZGlvLCBleHBlY3RlZCBzYW1wbGUgc2l6ZSAxNiwgbm90IDgiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKHJhdGUsIDE2LCBuY2hhbm5lbHMsIGZtdCkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5hcmdzWzBdLCAiZm9yIGxpbmVhciB1bnNpZ25lZCA4LWJpdCBhdWRpbywgZXhwZWN0ZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhbXBsZSBzaXplIDgsIG5vdCAxNiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzWzBdLCAiZm9yIGxpbmVhciB1bnNpZ25lZCA4LWJpdCBhdWRpbywgZXhwZWN0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2FtcGxlIHNpemUgOCwgbm90IDE2IikKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRyeToKICAgICAgICAgZHNwID0gbGludXhhdWRpb2Rldi5vcGVuKCd3JykKICAgICBleGNlcHQgbGludXhhdWRpb2Rldi5lcnJvciwgbXNnOgogICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsIGVycm5vLkVOT0RFViwgZXJybm8uRUJVU1kpOgotICAgICAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQobXNnKQorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QobXNnKQogICAgICAgICByYWlzZQogICAgIGRzcC5jbG9zZSgpCiAgICAgcnVuX3VuaXR0ZXN0KExpbnV4QXVkaW9EZXZUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbGlzdC5weSBiL0xpYi90ZXN0L3Rlc3RfbGlzdC5weQppbmRleCAxNjcyOTNhLi42ZTA4MGRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xpc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9saXN0LnB5CkBAIC05LDcgKzksNyBAQAogICAgICAgICBsMF8zID0gWzAsIDEsIDIsIDNdCiAgICAgICAgIGwwXzNfYmlzID0gbGlzdChsMF8zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwwXzMsIGwwXzNfYmlzKQotICAgICAgICBzZWxmLmFzc2VydF8obDBfMyBpcyBub3QgbDBfM19iaXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsMF8zIGlzIG5vdCBsMF8zX2JpcykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KCgpKSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCgoMCwgMSwgMiwgMykpLCBbMCwgMSwgMiwgM10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCgnJyksIFtdKQpAQCAtMzksMTEgKzM5LDExIEBACiAKICAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKICAgICAgICAgc3VwZXIoTGlzdFRlc3QsIHNlbGYpLnRlc3RfdHJ1dGgoKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IFtdKQotICAgICAgICBzZWxmLmFzc2VydF8oWzQyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFs0Ml0pCiAKICAgICBkZWYgdGVzdF9pZGVudGl0eShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKFtdIGlzIG5vdCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFtdIGlzIG5vdCBbXSkKIAogICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKICAgICAgICAgc3VwZXIoTGlzdFRlc3QsIHNlbGYpLnRlc3RfbGVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9sb2NhbGUucHkKaW5kZXggM2Y2MTFiZS4uOGJiOTljYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb2NhbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb2NhbGUucHkKQEAgLTEsNCArMSw0IEBACi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHZlcmJvc2UsIFRlc3RTa2lwcGVkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHZlcmJvc2UKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGxvY2FsZQogaW1wb3J0IHN5cwpAQCAtMTYsNyArMTYsNyBAQAogICAgICAgICAgICAgIyBUaGUgbG9jYWxlIHRlc3Qgd29yayBmaW5lIG9uIE9TWCAxMC42LCBJIChyb25hbGRvdXNzb3JlbikKICAgICAgICAgICAgICMgaGF2ZW4ndCBoYWQgdGltZSB5ZXQgdG8gdmVyaWZ5IGlmIHRlc3RzIHdvcmsgb24gT1NYIDEwLjUKICAgICAgICAgICAgICMgKDEwLjQgaXMga25vd24gdG8gYmUgYmFkKQotICAgICAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQoIkxvY2FsZSBzdXBwb3J0IG9uIE1hY09TWCBpcyBtaW5pbWFsIikKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJMb2NhbGUgc3VwcG9ydCBvbiBNYWNPU1ggaXMgbWluaW1hbCIpCiAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgogICAgICAgICB0bG9jcyA9ICgiRW4iLCAiRW5nbGlzaCIpCiAgICAgZWxzZToKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGJyZWFrCiAgICAgZWxzZToKLSAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQoCisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KAogICAgICAgICAgICAgIlRlc3QgbG9jYWxlIG5vdCBzdXBwb3J0ZWQgKHRyaWVkICVzKSIgJSAoJywgJy5qb2luKHRsb2NzKSkpCiAgICAgZW5VU19sb2NhbGUgPSB0bG9jCiAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfTlVNRVJJQywgb2xkbG9jYWxlKQpAQCAtMjI3LDYgKzIyNywzOCBAQAogICAgICAgICAgICAgICAgIChzZWxmLnNlcCwgc2VsZi5zZXApKQogCiAKK2NsYXNzIFRlc3RGb3JtYXRQYXR0ZXJuQXJnKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgaGFuZGxpbmcgb2YgcGF0dGVybiBhcmd1bWVudCBvZiBmb3JtYXQKKworICAgIGRlZiB0ZXN0X29ubHlPbmVQYXR0ZXJuKHNlbGYpOgorICAgICAgICAjIElzc3VlIDI1MjI6IGFjY2VwdCBleGFjdGx5IG9uZSAlIHBhdHRlcm4sIGFuZCBubyBleHRyYSBjaGFycy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiVmXG4iLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiVmXHIiLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiVmXHJcbiIsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2NhbGUuZm9ybWF0LCAiICVmIiwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2FsZS5mb3JtYXQsICIlZmciLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiVeZyIsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2NhbGUuZm9ybWF0LCAiJWYlJSIsICdmb28nKQorCisKK2NsYXNzIFRlc3RMb2NhbGVGb3JtYXRTdHJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkdlbmVyYWwgdGVzdHMgb24gbG9jYWxlLmZvcm1hdF9zdHJpbmciIiIKKworICAgIGRlZiB0ZXN0X3BlcmNlbnRfZXNjYXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5mb3JtYXRfc3RyaW5nKCclZiUlJywgMS4wKSwgJyVmJSUnICUgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5mb3JtYXRfc3RyaW5nKCclZCAlZiUlZCcsICgxLCAxLjApKSwKKyAgICAgICAgICAgICclZCAlZiUlZCcgJSAoMSwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuZm9ybWF0X3N0cmluZygnJShmb28pcyAlJWQnLCB7J2Zvbyc6ICdiYXInfSksCisgICAgICAgICAgICAoJyUoZm9vKXMgJSVkJyAlIHsnZm9vJzogJ2Jhcid9KSkKKworICAgIGRlZiB0ZXN0X21hcHBpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxlLmZvcm1hdF9zdHJpbmcoJyUoZm9vKXMgYmluZy4nLCB7J2Zvbyc6ICdiYXInfSksCisgICAgICAgICAgICAoJyUoZm9vKXMgYmluZy4nICUgeydmb28nOiAnYmFyJ30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5mb3JtYXRfc3RyaW5nKCclKGZvbylzJywgeydmb28nOiAnYmFyJ30pLAorICAgICAgICAgICAgKCclKGZvbylzJyAlIHsnZm9vJzogJ2Jhcid9KSkKKworCisKIGNsYXNzIFRlc3ROdW1iZXJGb3JtYXR0aW5nKEJhc2VMb2NhbGl6ZWRUZXN0LCBFblVTTnVtYmVyRm9ybWF0dGluZyk6CiAgICAgIyBUZXN0IG51bWJlciBmb3JtYXR0aW5nIHdpdGggYSByZWFsIEVuZ2xpc2ggbG9jYWxlLgogCkBAIC0zNTMsMTggKzM4NSwzMSBAQAogICAgICAgICAgICAgIyB0ZXN0IGNyYXNoZXIgZnJvbSBidWcgIzMzMDMKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbG9jYWxlLnN0cmNvbGwsIHUiYSIsIE5vbmUpCiAKKyAgICBkZWYgdGVzdF9zZXRsb2NhbGVfY2F0ZWdvcnkoc2VsZik6CisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCkKKyAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfVElNRSkKKyAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUpCisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0NPTExBVEUpCisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX01PTkVUQVJZKQorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19OVU1FUklDKQorCisgICAgICAgICMgY3Jhc2hlciBmcm9tIGJ1ZyAjNzQxOQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhsb2NhbGUuRXJyb3IsIGxvY2FsZS5zZXRsb2NhbGUsIDEyMzQ1KQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0cyA9IFsKICAgICAgICAgVGVzdE1pc2NlbGxhbmVvdXMsCisgICAgICAgIFRlc3RGb3JtYXRQYXR0ZXJuQXJnLAorICAgICAgICBUZXN0TG9jYWxlRm9ybWF0U3RyaW5nLAogICAgICAgICBUZXN0RW5VU051bWJlckZvcm1hdHRpbmcsCiAgICAgICAgIFRlc3RDTnVtYmVyRm9ybWF0dGluZywKICAgICAgICAgVGVzdEZyRlJOdW1iZXJGb3JtYXR0aW5nLAogICAgIF0KLSAgICAjIFRlc3RTa2lwcGVkIGNhbid0IGJlIHJhaXNlZCBpbnNpZGUgdW5pdHRlc3RzLCBoYW5kbGUgaXQgbWFudWFsbHkgaW5zdGVhZAorICAgICMgU2tpcFRlc3QgY2FuJ3QgYmUgcmFpc2VkIGluc2lkZSB1bml0dGVzdHMsIGhhbmRsZSBpdCBtYW51YWxseSBpbnN0ZWFkCiAgICAgdHJ5OgogICAgICAgICBnZXRfZW5VU19sb2NhbGUoKQotICAgIGV4Y2VwdCBUZXN0U2tpcHBlZCBhcyBlOgorICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdCBhcyBlOgogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgIlNvbWUgdGVzdHMgd2lsbCBiZSBkaXNhYmxlZDogJXMiICUgZQogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKaW5kZXggMjdlZWIyNy4uOWY4Mzc0YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQpAQCAtMjYsMjcgKzI2LDI3IEBACiBpbXBvcnQgbG9nZ2luZy5jb25maWcKIAogaW1wb3J0IGNvZGVjcwotaW1wb3J0IGNvcHkKIGltcG9ydCBjUGlja2xlCiBpbXBvcnQgY1N0cmluZ0lPCiBpbXBvcnQgZ2MKK2ltcG9ydCBqc29uCiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNvY2tldAogZnJvbSBTb2NrZXRTZXJ2ZXIgaW1wb3J0IFRocmVhZGluZ1RDUFNlcnZlciwgU3RyZWFtUmVxdWVzdEhhbmRsZXIKLWltcG9ydCBzdHJpbmcKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0LCBydW5fd2l0aF9sb2NhbGUsIHJ1bl91bml0dGVzdAogaW1wb3J0IHRleHR3cmFwCi1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgdGltZQotaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHdlYWtyZWYKLQordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCiAKIGNsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNzEsNyArNzEsNyBAQAogCiAgICAgICAgICMgU2V0IHR3byB1bnVzZWQgbG9nZ2Vyczogb25lIG5vbi1BU0NJSSBhbmQgb25lIFVuaWNvZGUuCiAgICAgICAgICMgVGhpcyBpcyB0byB0ZXN0IGNvcnJlY3Qgb3BlcmF0aW9uIHdoZW4gc29ydGluZyBleGlzdGluZwotICAgICAgICAjIGxvZ2dlcnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gY29kZS4gU2VlIGlzc3VlcyA4MjAxLCA5MzEwLgorICAgICAgICAjIGxvZ2dlcnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gY29kZS4gU2VlIGlzc3VlIDgyMDEuCiAgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCJceGFiXHhkN1x4YmIiKQogICAgICAgICBsb2dnaW5nLmdldExvZ2dlcih1Ilx1MDEzZlx1MDBkNlx1MDA0NyIpCiAKQEAgLTkwLDYgKzkwLDEwIEBACiAgICAgICAgIGxldmVsLiIiIgogICAgICAgICBzZWxmLnN0cmVhbS5jbG9zZSgpCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnJvb3RfaGRscikKKyAgICAgICAgd2hpbGUgc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyczoKKyAgICAgICAgICAgIGggPSBzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdCisgICAgICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaCkKKyAgICAgICAgICAgIGguY2xvc2UoKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnNldExldmVsKHNlbGYub3JpZ2luYWxfbG9nZ2luZ19sZXZlbCkKICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICB0cnk6CkBAIC0xMTYsMTMgKzEyMCwxMyBAQAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICAjIFN0cmluZ0lPLlN0cmluZ0lPIGxhY2tzIGEgcmVzZXQoKSBtZXRob2QuCiAgICAgICAgICAgICBhY3R1YWxfbGluZXMgPSBzdHJlYW0uZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGFjdHVhbF9saW5lcyksIGxlbihleHBlY3RlZF92YWx1ZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhY3R1YWxfbGluZXMpLCBsZW4oZXhwZWN0ZWRfdmFsdWVzKSkKICAgICAgICAgZm9yIGFjdHVhbCwgZXhwZWN0ZWQgaW4gemlwKGFjdHVhbF9saW5lcywgZXhwZWN0ZWRfdmFsdWVzKToKICAgICAgICAgICAgIG1hdGNoID0gcGF0LnNlYXJjaChhY3R1YWwpCiAgICAgICAgICAgICBpZiBub3QgbWF0Y2g6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJMb2cgbGluZSBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBwYXR0ZXJuOlxuIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHVwbGUobWF0Y2guZ3JvdXBzKCkpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUobWF0Y2guZ3JvdXBzKCkpLCBleHBlY3RlZCkKICAgICAgICAgcyA9IHN0cmVhbS5yZWFkKCkKICAgICAgICAgaWYgczoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVtYWluaW5nIG91dHB1dCBhdCBlbmQgb2YgbG9nIHN0cmVhbTpcbiIgKyBzKQpAQCAtNjM3LDE0ICs2NDEsOCBAQAogICAgICIiIgogCiAgICAgZGVmIGFwcGx5X2NvbmZpZyhzZWxmLCBjb25mKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZm4gPSB0ZW1wZmlsZS5ta3RlbXAoIi5pbmkiKQotICAgICAgICAgICAgZiA9IG9wZW4oZm4sICJ3IikKLSAgICAgICAgICAgIGYud3JpdGUodGV4dHdyYXAuZGVkZW50KGNvbmYpKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBsb2dnaW5nLmNvbmZpZy5maWxlQ29uZmlnKGZuKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorICAgICAgICBmaWxlID0gY1N0cmluZ0lPLlN0cmluZ0lPKHRleHR3cmFwLmRlZGVudChjb25mKSkKKyAgICAgICAgbG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZyhmaWxlKQogCiAgICAgZGVmIHRlc3RfY29uZmlnMF9vayhzZWxmKToKICAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgZmlsZSB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCkBAIC02OTQsNyArNjkyLDcgQEAKICAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CiAgICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oImp1c3QgdGVzdGluZyIpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LnNlZWsoMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKICAgICAgICAgICAgICAgICAiRVJST1I6cm9vdDpqdXN0IHRlc3RpbmdcbkdvdCBhIFtSdW50aW1lRXJyb3JdXG4iKQogICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5CiAgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCkBAIC03NjgsNiArNzY2LDcgQEAKICAgICAgICAgc2VsZi5zZXJ2ZXJfY2xvc2UoKQogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBTb2NrZXRIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAKICAgICAiIiJUZXN0IGZvciBTb2NrZXRIYW5kbGVyIG9iamVjdHMuIiIiCkBAIC04MTIsNyArODExLDcgQEAKICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRjcCIpCiAgICAgICAgIGxvZ2dlci5lcnJvcigic3BhbSIpCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygiZWdncyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZ2V0X291dHB1dCgpLCAic3BhbVxuZWdnc1xuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9vdXRwdXQoKSwgInNwYW1cbmVnZ3NcbiIpCiAKIAogY2xhc3MgTWVtb3J5VGVzdChCYXNlVGVzdCk6CkBAIC04MzEsNyArODMwLDcgQEAKICAgICAgICAgICAgIGtleSA9IGlkKG9iaiksIHJlcHIob2JqKQogICAgICAgICAgICAgc2VsZi5fc3Vydml2b3JzW2tleV0gPSB3ZWFrcmVmLnJlZihvYmopCiAKLSAgICBkZWYgX2Fzc2VydF9zdXJ2aXZhbChzZWxmKToKKyAgICBkZWYgX2Fzc2VydFRydWVzdXJ2aXZhbChzZWxmKToKICAgICAgICAgIiIiQXNzZXJ0IHRoYXQgYWxsIG9iamVjdHMgd2F0Y2hlZCBmb3Igc3Vydml2YWwgaGF2ZSBzdXJ2aXZlZC4iIiIKICAgICAgICAgIyBUcmlnZ2VyIGN5Y2xlIGJyZWFraW5nLgogICAgICAgICBnYy5jb2xsZWN0KCkKQEAgLTg1Nyw3ICs4NTYsNyBAQAogICAgICAgICBdKQogICAgICAgICBkZWwgZm9vCiAgICAgICAgICMgZm9vIGhhcyBzdXJ2aXZlZC4KLSAgICAgICAgc2VsZi5fYXNzZXJ0X3N1cnZpdmFsKCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZXN1cnZpdmFsKCkKICAgICAgICAgIyBmb28gaGFzIHJldGFpbmVkIGl0cyBzZXR0aW5ncy4KICAgICAgICAgYmFyID0gbG9nZ2luZy5nZXRMb2dnZXIoImZvbyIpCiAgICAgICAgIGJhci5kZWJ1ZyhzZWxmLm5leHRfbWVzc2FnZSgpKQpAQCAtODg2LDcgKzg4NSw3IEBACiAgICAgICAgICAgICAjIGNoZWNrIHdlIHdyb3RlIGV4YWN0bHkgdGhvc2UgYnl0ZXMsIGlnbm9yaW5nIHRyYWlsaW5nIFxuIGV0YwogICAgICAgICAgICAgZiA9IG9wZW4oZm4pCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZi5yZWFkKCkucnN0cmlwKCksIGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKS5yc3RyaXAoKSwgZGF0YSkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6CkBAIC05MTUsMTUgKzkxNCw4NjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAnXHhlNFx4ZWUgXHhmMVx4ZTJceGU4XHhlNFx4ZTBceGVkXHhlOFx4ZmZcbicpCiAKIAorY2xhc3MgV2FybmluZ3NUZXN0KEJhc2VUZXN0KToKKworICAgIGRlZiB0ZXN0X3dhcm5pbmdzKHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBsb2dnaW5nLmNhcHR1cmVXYXJuaW5ncyhUcnVlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgICAgICBmaWxlID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgICAgICBoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKGZpbGUpCisgICAgICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInB5Lndhcm5pbmdzIikKKyAgICAgICAgICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoKQorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIkknbSB3YXJuaW5nIHlvdS4uLiIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaCkKKyAgICAgICAgICAgICAgICBzID0gZmlsZS5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgaC5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZmluZCgiVXNlcldhcm5pbmc6IEknbSB3YXJuaW5nIHlvdS4uLlxuIikgPiAwKQorCisgICAgICAgICAgICAgICAgI1NlZSBpZiBhbiBleHBsaWNpdCBmaWxlIHVzZXMgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2hvd3dhcm5pbmcoIkV4cGxpY2l0IiwgVXNlcldhcm5pbmcsICJkdW1teS5weSIsIDQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsICJEdW1teSBsaW5lIikKKyAgICAgICAgICAgICAgICBzID0gZmlsZS5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLAorICAgICAgICAgICAgICAgICAgICAgICAgImR1bW15LnB5OjQyOiBVc2VyV2FybmluZzogRXhwbGljaXRcbiAgRHVtbXkgbGluZVxuIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5jYXB0dXJlV2FybmluZ3MoRmFsc2UpCisKKworZGVmIGZvcm1hdEZ1bmMoZm9ybWF0LCBkYXRlZm10PU5vbmUpOgorICAgIHJldHVybiBsb2dnaW5nLkZvcm1hdHRlcihmb3JtYXQsIGRhdGVmbXQpCisKK2RlZiBoYW5kbGVyRnVuYygpOgorICAgIHJldHVybiBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorCitjbGFzcyBDdXN0b21IYW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisgICAgcGFzcworCitjbGFzcyBDb25maWdEaWN0VGVzdChCYXNlVGVzdCk6CisKKyAgICAiIiJSZWFkaW5nIGxvZ2dpbmcgY29uZmlnIGZyb20gYSBkaWN0aW9uYXJ5LiIiIgorCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHddKykgXCtcKyAoW1x3XSspJCIKKworICAgICMgY29uZmlnMCBpcyBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCisgICAgY29uZmlnMCA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzEgYWRkcyBhIGxpdHRsZSB0byB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KKyAgICBjb25maWcxID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgY29uZmlnMiBoYXMgYSBzdWJ0bGUgY29uZmlndXJhdGlvbiBlcnJvciB0aGF0IHNob3VsZCBiZSByZXBvcnRlZAorICAgIGNvbmZpZzIgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRib3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICNBcyBjb25maWcxIGJ1dCB3aXRoIGEgbWlzc3BlbHQgbGV2ZWwgb24gYSBoYW5kbGVyCisgICAgY29uZmlnMmEgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05UT1NFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisKKyAgICAjQXMgY29uZmlnMSBidXQgd2l0aCBhIG1pc3NwZWx0IGxldmVsIG9uIGEgbG9nZ2VyCisgICAgY29uZmlnMmIgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV1JBTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWczIGhhcyBhIGxlc3Mgc3VidGxlIGNvbmZpZ3VyYXRpb24gZXJyb3IKKyAgICBjb25maWczID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdtaXNzcGVsbGVkX25hbWUnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzQgc3BlY2lmaWVzIGEgY3VzdG9tIGZvcm1hdHRlciBjbGFzcyB0byBiZSBsb2FkZWQKKyAgICBjb25maWc0ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnKCknIDogX19uYW1lX18gKyAnLkV4Y2VwdGlvbkZvcm1hdHRlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpczolKG5hbWUpczolKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIEFzIGNvbmZpZzQgYnV0IHVzaW5nIGFuIGFjdHVhbCBjYWxsYWJsZSByYXRoZXIgdGhhbiBhIHN0cmluZworICAgIGNvbmZpZzRhID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnKCknIDogRXhjZXB0aW9uRm9ybWF0dGVyLAorICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdmb3JtMicgOiB7CisgICAgICAgICAgICAgICAgJygpJyA6IF9fbmFtZV9fICsgJy5mb3JtYXRGdW5jJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzOiUobmFtZSlzOiUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnZm9ybTMnIDogeworICAgICAgICAgICAgICAgICcoKScgOiBmb3JtYXRGdW5jLAorICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdoYW5kMicgOiB7CisgICAgICAgICAgICAgICAgJygpJyA6IGhhbmRsZXJGdW5jLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWc1IHNwZWNpZmllcyBhIGN1c3RvbSBoYW5kbGVyIGNsYXNzIHRvIGJlIGxvYWRlZAorICAgIGNvbmZpZzUgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6IF9fbmFtZV9fICsgJy5DdXN0b21IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgY29uZmlnNiBzcGVjaWZpZXMgYSBjdXN0b20gaGFuZGxlciBjbGFzcyB0byBiZSBsb2FkZWQKKyAgICAjIGJ1dCBoYXMgYmFkIGFyZ3VtZW50cworICAgIGNvbmZpZzYgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6IF9fbmFtZV9fICsgJy5DdXN0b21IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgICAgICAnOScgOiAnaW52YWxpZCBwYXJhbWV0ZXIgbmFtZScsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjY29uZmlnIDcgZG9lcyBub3QgZGVmaW5lIGNvbXBpbGVyLnBhcnNlciBidXQgZGVmaW5lcyBjb21waWxlci5sZXhlcgorICAgICNzbyBjb21waWxlci5wYXJzZXIgc2hvdWxkIGJlIGRpc2FibGVkIGFmdGVyIGFwcGx5aW5nIGl0CisgICAgY29uZmlnNyA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIubGV4ZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgIGNvbmZpZzggPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Rpc2FibGVfZXhpc3RpbmdfbG9nZ2VycycgOiBGYWxzZSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdjb21waWxlci5sZXhlcicgOiB7CisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgIGNvbmZpZzkgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICBjb25maWc5YSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnaW5jcmVtZW50YWwnIDogVHJ1ZSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnSU5GTycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgIH0KKworICAgIGNvbmZpZzliID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdpbmNyZW1lbnRhbCcgOiBUcnVlLAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0lORk8nLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdJTkZPJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgfQorCisgICAgI0FzIGNvbmZpZzEgYnV0IHdpdGggYSBmaWx0ZXIgYWRkZWQKKyAgICBjb25maWcxMCA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnZmlsdGVycycgOiB7CisgICAgICAgICAgICAnZmlsdDEnIDogeworICAgICAgICAgICAgICAgICduYW1lJyA6ICdjb21waWxlci5wYXJzZXInLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgICAgICdmaWx0ZXJzJyA6IFsnZmlsdDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdmaWx0ZXJzJyA6IFsnZmlsdDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICB9LAorICAgIH0KKworICAgICNBcyBjb25maWcxIGJ1dCB1c2luZyBjZmc6Ly8gcmVmZXJlbmNlcworICAgIGNvbmZpZzExID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICd0cnVlX2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJfY29uZmlncyc6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnIDogJ2NmZzovL3RydWVfZm9ybWF0dGVycycsCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogJ2NmZzovL2hhbmRsZXJfY29uZmlnc1toYW5kMV0nLAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjQXMgY29uZmlnMTEgYnV0IG1pc3NpbmcgdGhlIHZlcnNpb24ga2V5CisgICAgY29uZmlnMTIgPSB7CisgICAgICAgICd0cnVlX2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJfY29uZmlncyc6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnIDogJ2NmZzovL3RydWVfZm9ybWF0dGVycycsCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogJ2NmZzovL2hhbmRsZXJfY29uZmlnc1toYW5kMV0nLAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjQXMgY29uZmlnMTEgYnV0IHVzaW5nIGFuIHVuc3VwcG9ydGVkIHZlcnNpb24KKyAgICBjb25maWcxMyA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAyLAorICAgICAgICAndHJ1ZV9mb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVyX2NvbmZpZ3MnOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdmb3JtYXR0ZXJzJyA6ICdjZmc6Ly90cnVlX2Zvcm1hdHRlcnMnLAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6ICdjZmc6Ly9oYW5kbGVyX2NvbmZpZ3NbaGFuZDFdJywKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgZGVmIGFwcGx5X2NvbmZpZyhzZWxmLCBjb25mKToKKyAgICAgICAgbG9nZ2luZy5jb25maWcuZGljdENvbmZpZyhjb25mKQorCisgICAgZGVmIHRlc3RfY29uZmlnMF9vayhzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMCkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgICAgICMgV29uJ3Qgb3V0cHV0IGFueXRoaW5nCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgIyBPdXRwdXRzIGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzFfb2soc2VsZiwgY29uZmlnPWNvbmZpZzEpOgorICAgICAgICAjIEEgY29uZmlnIGRlZmluaW5nIGEgc3ViLXBhcnNlciBhcyB3ZWxsLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKGNvbmZpZykKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzJfZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdGFuZGFyZEVycm9yLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWcyKQorCisgICAgZGVmIHRlc3RfY29uZmlnMmFfZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdGFuZGFyZEVycm9yLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWcyYSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzJiX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMmIpCisKKyAgICBkZWYgdGVzdF9jb25maWczX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMykKKworICAgIGRlZiB0ZXN0X2NvbmZpZzRfb2soc2VsZik6CisgICAgICAgICMgQSBjb25maWcgc3BlY2lmeWluZyBhIGN1c3RvbSBmb3JtYXR0ZXIgY2xhc3MuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc0KQorICAgICAgICAgICAgI2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigianVzdCB0ZXN0aW5nIikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAiRVJST1I6cm9vdDpqdXN0IHRlc3RpbmdcbkdvdCBhIFtSdW50aW1lRXJyb3JdXG4iKQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5CisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWc0YV9vayhzZWxmKToKKyAgICAgICAgIyBBIGNvbmZpZyBzcGVjaWZ5aW5nIGEgY3VzdG9tIGZvcm1hdHRlciBjbGFzcy4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzRhKQorICAgICAgICAgICAgI2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigianVzdCB0ZXN0aW5nIikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAiRVJST1I6cm9vdDpqdXN0IHRlc3RpbmdcbkdvdCBhIFtSdW50aW1lRXJyb3JdXG4iKQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5CisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWc1X29rKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfY29uZmlnMV9vayhjb25maWc9c2VsZi5jb25maWc1KQorCisgICAgZGVmIHRlc3RfY29uZmlnNl9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdGFuZGFyZEVycm9yLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWc2KQorCisgICAgZGVmIHRlc3RfY29uZmlnN19vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzEpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc3KQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9nZ2VyLmRpc2FibGVkKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLmxleGVyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzMnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzQnKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICAjU2FtZSBhcyB0ZXN0X2NvbmZpZ183X29rIGJ1dCBkb24ndCBkaXNhYmxlIG9sZCBsb2dnZXJzLgorICAgIGRlZiB0ZXN0X2NvbmZpZ184X29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzgpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9nZ2VyLmRpc2FibGVkKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLmxleGVyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzMnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzQnKSwKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnNScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnNicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZ185X29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnOSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgI05vdGhpbmcgd2lsbCBiZSBvdXRwdXQgc2luY2UgYm90aCBoYW5kbGVyIGFuZCBsb2dnZXIgYXJlIHNldCB0byBXQVJOSU5HCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc5YSkKKyAgICAgICAgICAgICNOb3RoaW5nIHdpbGwgYmUgb3V0cHV0IHNpbmNlIGJvdGggaGFuZGxlciBpcyBzdGlsbCBzZXQgdG8gV0FSTklORworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnOWIpCisgICAgICAgICAgICAjTWVzc2FnZSBzaG91bGQgbm93IGJlIG91dHB1dAorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzMnKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jb25maWdfMTBfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxMCkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdjb21waWxlcicpCisgICAgICAgICAgICAjTm90IG91dHB1dCwgYmVjYXVzZSBmaWx0ZXJlZAorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdjb21waWxlci5sZXhlcicpCisgICAgICAgICAgICAjTm90IG91dHB1dCwgYmVjYXVzZSBmaWx0ZXJlZAorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIuY29kZWdlbiIpCisgICAgICAgICAgICAjT3V0cHV0LCBhcyBub3QgZmlsdGVyZWQKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ1dBUk5JTkcnLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnNCcpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzExX29rKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfY29uZmlnMV9vayhzZWxmLmNvbmZpZzExKQorCisgICAgZGVmIHRlc3RfY29uZmlnMTJfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMTIpCisKKyAgICBkZWYgdGVzdF9jb25maWcxM19mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdGFuZGFyZEVycm9yLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWcxMykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ2xpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrJykKKyAgICBkZWYgc2V0dXBfdmlhX2xpc3RlbmVyKHNlbGYsIHRleHQpOgorICAgICAgICAjIEFzayBmb3IgYSByYW5kb21seSBhc3NpZ25lZCBwb3J0IChieSB1c2luZyBwb3J0IDApCisgICAgICAgIHQgPSBsb2dnaW5nLmNvbmZpZy5saXN0ZW4oMCkKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHQucmVhZHkud2FpdCgpCisgICAgICAgICMgTm93IGdldCB0aGUgcG9ydCBhbGxvY2F0ZWQKKyAgICAgICAgcG9ydCA9IHQucG9ydAorICAgICAgICB0LnJlYWR5LmNsZWFyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNvY2suc2V0dGltZW91dCgyLjApCisgICAgICAgICAgICBzb2NrLmNvbm5lY3QoKCdsb2NhbGhvc3QnLCBwb3J0KSkKKworICAgICAgICAgICAgc2xlbiA9IHN0cnVjdC5wYWNrKCc+TCcsIGxlbih0ZXh0KSkKKyAgICAgICAgICAgIHMgPSBzbGVuICsgdGV4dAorICAgICAgICAgICAgc2VudHNvZmFyID0gMAorICAgICAgICAgICAgbGVmdCA9IGxlbihzKQorICAgICAgICAgICAgd2hpbGUgbGVmdCA+IDA6CisgICAgICAgICAgICAgICAgc2VudCA9IHNvY2suc2VuZChzW3NlbnRzb2ZhcjpdKQorICAgICAgICAgICAgICAgIHNlbnRzb2ZhciArPSBzZW50CisgICAgICAgICAgICAgICAgbGVmdCAtPSBzZW50CisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHQucmVhZHkud2FpdCgyLjApCisgICAgICAgICAgICBsb2dnaW5nLmNvbmZpZy5zdG9wTGlzdGVuaW5nKCkKKyAgICAgICAgICAgIHQuam9pbigyLjApCisKKyAgICBkZWYgdGVzdF9saXN0ZW5fY29uZmlnXzEwX29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKGpzb24uZHVtcHMoc2VsZi5jb25maWcxMCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignY29tcGlsZXInKQorICAgICAgICAgICAgI05vdCBvdXRwdXQsIGJlY2F1c2UgZmlsdGVyZWQKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignY29tcGlsZXIubGV4ZXInKQorICAgICAgICAgICAgI05vdCBvdXRwdXQsIGJlY2F1c2UgZmlsdGVyZWQKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyLmNvZGVnZW4iKQorICAgICAgICAgICAgI091dHB1dCwgYXMgbm90IGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdXQVJOSU5HJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzQnKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisKKyAgICBkZWYgdGVzdF9saXN0ZW5fY29uZmlnXzFfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIodGV4dHdyYXAuZGVkZW50KENvbmZpZ0ZpbGVUZXN0LmNvbmZpZzEpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisKK2NsYXNzIE1hbmFnZXJUZXN0KEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdF9tYW5hZ2VyX2xvZ2dlcmNsYXNzKHNlbGYpOgorICAgICAgICBsb2dnZWQgPSBbXQorCisgICAgICAgIGNsYXNzIE15TG9nZ2VyKGxvZ2dpbmcuTG9nZ2VyKToKKyAgICAgICAgICAgIGRlZiBfbG9nKHNlbGYsIGxldmVsLCBtc2csIGFyZ3MsIGV4Y19pbmZvPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICAgICAgICAgIGxvZ2dlZC5hcHBlbmQobXNnKQorCisgICAgICAgIG1hbiA9IGxvZ2dpbmcuTWFuYWdlcihOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hbi5zZXRMb2dnZXJDbGFzcywgaW50KQorICAgICAgICBtYW4uc2V0TG9nZ2VyQ2xhc3MoTXlMb2dnZXIpCisgICAgICAgIGxvZ2dlciA9IG1hbi5nZXRMb2dnZXIoJ3Rlc3QnKQorICAgICAgICBsb2dnZXIud2FybmluZygnc2hvdWxkIGFwcGVhciBpbiBsb2dnZWQnKQorICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ3Nob3VsZCBub3QgYXBwZWFyIGluIGxvZ2dlZCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnZWQsIFsnc2hvdWxkIGFwcGVhciBpbiBsb2dnZWQnXSkKKworCitjbGFzcyBDaGlsZExvZ2dlclRlc3QoQmFzZVRlc3QpOgorICAgIGRlZiB0ZXN0X2NoaWxkX2xvZ2dlcnMoc2VsZik6CisgICAgICAgIHIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgIGwxID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYycpCisgICAgICAgIGwyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RlZi5naGknKQorICAgICAgICBjMSA9IHIuZ2V0Q2hpbGQoJ3h5eicpCisgICAgICAgIGMyID0gci5nZXRDaGlsZCgndXZ3Lnh5eicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMSBpcyBsb2dnaW5nLmdldExvZ2dlcigneHl6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBsb2dnaW5nLmdldExvZ2dlcigndXZ3Lnh5eicpKQorICAgICAgICBjMSA9IGwxLmdldENoaWxkKCdkZWYnKQorICAgICAgICBjMiA9IGMxLmdldENoaWxkKCdnaGknKQorICAgICAgICBjMyA9IGwxLmdldENoaWxkKCdkZWYuZ2hpJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGMzKQorCisKICMgU2V0IHRoZSBsb2NhbGUgdG8gdGhlIHBsYXRmb3JtLWRlcGVuZGVudCBkZWZhdWx0LiAgSSBoYXZlIG5vIGlkZWEKICMgd2h5IHRoZSB0ZXN0IGRvZXMgdGhpcywgYnV0IGluIGFueSBjYXNlIHdlIHNhdmUgdGhlIGN1cnJlbnQgbG9jYWxlCiAjIGZpcnN0IGFuZCByZXN0b3JlIGl0IGF0IHRoZSBlbmQuCiBAcnVuX3dpdGhfbG9jYWxlKCdMQ19BTEwnLCAnJykKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoQnVpbHRpbkxldmVsc1Rlc3QsIEJhc2ljRmlsdGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgQ3VzdG9tTGV2ZWxzQW5kRmlsdGVyc1Rlc3QsIE1lbW9yeUhhbmRsZXJUZXN0LAotICAgICAgICAgICAgICAgICAgICBDb25maWdGaWxlVGVzdCwgU29ja2V0SGFuZGxlclRlc3QsIE1lbW9yeVRlc3QsCi0gICAgICAgICAgICAgICAgICAgIEVuY29kaW5nVGVzdCkKKyAgICAgICAgICAgICAgICAgQ3VzdG9tTGV2ZWxzQW5kRmlsdGVyc1Rlc3QsIE1lbW9yeUhhbmRsZXJUZXN0LAorICAgICAgICAgICAgICAgICBDb25maWdGaWxlVGVzdCwgU29ja2V0SGFuZGxlclRlc3QsIE1lbW9yeVRlc3QsCisgICAgICAgICAgICAgICAgIEVuY29kaW5nVGVzdCwgV2FybmluZ3NUZXN0LCBDb25maWdEaWN0VGVzdCwgTWFuYWdlclRlc3QsCisgICAgICAgICAgICAgICAgIENoaWxkTG9nZ2VyVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sb25nLnB5IGIvTGliL3Rlc3QvdGVzdF9sb25nLnB5CmluZGV4IGE2ZWQxY2IuLjU4Y2ZjM2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xvbmcucHkKQEAgLTMsNiArMyw3IEBACiBpbXBvcnQgc3lzCiAKIGltcG9ydCByYW5kb20KK2ltcG9ydCBtYXRoCiAKICMgVXNlZCBmb3IgbGF6eSBmb3JtYXR0aW5nIG9mIGZhaWx1cmUgbWVzc2FnZXMKIGNsYXNzIEZybShvYmplY3QpOgpAQCAtMTQsNyArMTUsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5mb3JtYXQgJSBzZWxmLmFyZ3MKIAogIyBTSElGVCBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlIGluIGxvbmdpbnRyZXByLmggZm9yIGJlc3QgdGVzdGluZy4KLVNISUZUID0gMTUKK1NISUZUID0gc3lzLmxvbmdfaW5mby5iaXRzX3Blcl9kaWdpdAogQkFTRSA9IDIgKiogU0hJRlQKIE1BU0sgPSBCQVNFIC0gMQogS0FSQVRTVUJBX0NVVE9GRiA9IDcwICAgIyBmcm9tIGxvbmdvYmplY3QuYwpAQCAtODcsNyArODgsNyBAQAogICAgICMgVGhlIHNpZ24gb2YgdGhlIG51bWJlciBpcyBhbHNvIHJhbmRvbS4KIAogICAgIGRlZiBnZXRyYW4oc2VsZiwgbmRpZ2l0cyk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhuZGlnaXRzID4gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5kaWdpdHMgPiAwKQogICAgICAgICBuYml0c19oaSA9IG5kaWdpdHMgKiBTSElGVAogICAgICAgICBuYml0c19sbyA9IG5iaXRzX2hpIC0gU0hJRlQgKyAxCiAgICAgICAgIGFuc3dlciA9IDBMCkBAIC05NiwxMyArOTcsMTMgQEAKICAgICAgICAgd2hpbGUgbmJpdHMgPCBuYml0c19sbzoKICAgICAgICAgICAgIGJpdHMgPSAociA+PiAxKSArIDEKICAgICAgICAgICAgIGJpdHMgPSBtaW4oYml0cywgbmJpdHNfaGkgLSBuYml0cykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygxIDw9IGJpdHMgPD0gU0hJRlQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMSA8PSBiaXRzIDw9IFNISUZUKQogICAgICAgICAgICAgbmJpdHMgPSBuYml0cyArIGJpdHMKICAgICAgICAgICAgIGFuc3dlciA9IGFuc3dlciA8PCBiaXRzCiAgICAgICAgICAgICBpZiByICYgMToKICAgICAgICAgICAgICAgICBhbnN3ZXIgPSBhbnN3ZXIgfCAoKDEgPDwgYml0cykgLSAxKQogICAgICAgICAgICAgciA9IGludChyYW5kb20ucmFuZG9tKCkgKiAoU0hJRlQgKiAyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5iaXRzX2xvIDw9IG5iaXRzIDw9IG5iaXRzX2hpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmJpdHNfbG8gPD0gbmJpdHMgPD0gbmJpdHNfaGkpCiAgICAgICAgIGlmIHJhbmRvbS5yYW5kb20oKSA8IDAuNToKICAgICAgICAgICAgIGFuc3dlciA9IC1hbnN3ZXIKICAgICAgICAgcmV0dXJuIGFuc3dlcgpAQCAtMTI4LDkgKzEyOSw5IEBACiAgICAgICAgIGVxKHIsIHIyLCBGcm0oImRpdm1vZCByZXR1cm5zIGRpZmZlcmVudCBtb2QgdGhhbiAlJSBmb3IgJXIgYW5kICVyIiwgeCwgeSkpCiAgICAgICAgIGVxKHgsIHEqeSArIHIsIEZybSgieCAhPSBxKnkgKyByIGFmdGVyIGRpdm1vZCBvbiB4PSVyLCB5PSVyIiwgeCwgeSkpCiAgICAgICAgIGlmIHkgPiAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDAgPD0gciA8IHksIEZybSgiYmFkIG1vZCBmcm9tIGRpdm1vZCBvbiAlciBhbmQgJXIiLCB4LCB5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IHIgPCB5LCBGcm0oImJhZCBtb2QgZnJvbSBkaXZtb2Qgb24gJXIgYW5kICVyIiwgeCwgeSkpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oeSA8IHIgPD0gMCwgRnJtKCJiYWQgbW9kIGZyb20gZGl2bW9kIG9uICVyIGFuZCAlciIsIHgsIHkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgPCByIDw9IDAsIEZybSgiYmFkIG1vZCBmcm9tIGRpdm1vZCBvbiAlciBhbmQgJXIiLCB4LCB5KSkKIAogICAgIGRlZiB0ZXN0X2RpdmlzaW9uKHNlbGYpOgogICAgICAgICBkaWdpdHMgPSByYW5nZSgxLCBNQVhESUdJVFMrMSkgKyByYW5nZShLQVJBVFNVQkFfQ1VUT0ZGLApAQCAtMTQyLDYgKzE0MywzNSBAQAogICAgICAgICAgICAgICAgIHkgPSBzZWxmLmdldHJhbihsZW55KSBvciAxTAogICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oeCwgeSkKIAorICAgICAgICAjIHNwZWNpZmljIG51bWJlcnMgY2hvc2VuIHRvIGV4ZXJjaXNlIGNvcm5lciBjYXNlcyBvZiB0aGUKKyAgICAgICAgIyBjdXJyZW50IGxvbmcgZGl2aXNpb24gaW1wbGVtZW50YXRpb24KKworICAgICAgICAjIDMwLWJpdCBjYXNlcyBpbnZvbHZpbmcgYSBxdW90aWVudCBkaWdpdCBlc3RpbWF0ZSBvZiBCQVNFKzEKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbigxMjMxOTQ4NDEyMjkwODc5Mzk1OTY2NzAyODgxTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTQ3MzQxMzY3MTMxNDI4Njk4TCkKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbig4MTU0Mjc3NTY0ODEyNzU0MzAzNDIzMTIwMjE1MTU1ODc4ODNMLAorICAgICAgICAgICAgICAgICAgICAgICA3MDcyNzA4MzYwNjkwMjc3NDVMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDYyNzk3NjA3MzY5NzAxMjgyMDg0OTQ0MzM2MzU2MzU5OTA0MUwsCisgICAgICAgICAgICAgICAgICAgICAgIDY0MzU4ODc5ODQ5NjA1NzAyMEwpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oMTExNTE0MTM3MzY1Mzc1MjMwMzcxMDkzMjc1NjMyNTU3ODA2NUwsCisgICAgICAgICAgICAgICAgICAgICAgIDEwMzg1NTYzMzUxNzE0NTM5Mzc3MjY4ODI2MjdMKQorICAgICAgICAjIDMwLWJpdCBjYXNlcyB0aGF0IHJlcXVpcmUgdGhlIHBvc3Qtc3VidHJhY3Rpb24gY29ycmVjdGlvbiBzdGVwCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oOTIyNDk4OTA1NDA1NDM2NzUxOTQwOTg5MzIwOTMwMzY4NDk0TCwKKyAgICAgICAgICAgICAgICAgICAgICAgOTQ5OTg1ODcwNjg2Nzg2MTM1NjI2OTQzMzk2TCkKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbig3NjgyMzU4NTMzMjgwOTExNjcyMDQwMDk2NTIxNzQwMzE4NDRMLAorICAgICAgICAgICAgICAgICAgICAgICAxMDkxNTU1NTQxMTgwMzcxNTU0NDI2NTQ1MjY2TCkKKworICAgICAgICAjIDE1LWJpdCBjYXNlcyBpbnZvbHZpbmcgYSBxdW90aWVudCBkaWdpdCBlc3RpbWF0ZSBvZiBCQVNFKzEKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbigyMDE3MjE4ODk0NzQ0M0wsIDYxNTYxMTM5N0wpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oMTAyMDkwODUzMDI3MDE1NTAyNUwsIDk1MDc5NTcxMEwpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oMTI4NTg5NTY1NzIzMTEyNDA4TCwgNzM2MzkzNzE4TCkKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbig2MDk5MTk3ODAyODU3NjE1NzVMLCAxODYxMzI3NDU0Njc4NEwpCisgICAgICAgICMgMTUtYml0IGNhc2VzIHRoYXQgcmVxdWlyZSB0aGUgcG9zdC1zdWJ0cmFjdGlvbiBjb3JyZWN0aW9uIHN0ZXAKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbig3MTAwMzE2ODE1NzYzODgwMzJMLCAyNjc2OTQwNDM5MTMwOEwpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oMTkzMzYyMjYxNDI2ODIyMUwsIDMwMjEyODUzMzQ4ODM2TCkKKworCisKICAgICBkZWYgdGVzdF9rYXJhdHN1YmEoc2VsZik6CiAgICAgICAgIGRpZ2l0cyA9IHJhbmdlKDEsIDUpICsgcmFuZ2UoS0FSQVRTVUJBX0NVVE9GRiwgS0FSQVRTVUJBX0NVVE9GRiArIDEwKQogICAgICAgICBkaWdpdHMuZXh0ZW5kKFtLQVJBVFNVQkFfQ1VUT0ZGICogMTAsIEtBUkFUU1VCQV9DVVRPRkYgKiAxMDBdKQpAQCAtMjkwLDYgKzMyMCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygzLjUpLCAzTCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKC0zLjUpLCAtM0wpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygiLTMiKSwgLTNMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoIjBiMTAiLCAyKSwgMkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygiMG8xMCIsIDgpLCA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCIweDEwIiwgMTYpLCAxNkwpCiAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcodW5pY29kZSgiLTMiKSksIC0zTCkKICAgICAgICAgIyBEaWZmZXJlbnQgYmFzZToKQEAgLTQ5Nyw5ICs1MzAsOSBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgbG9uZyhUcnVuY1JldHVybnNOb25JbnRlZ3JhbCgpKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX190cnVuY19fIHJldHVybmVkIG5vbi1JbnRlZ3JhbCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAodHlwZSBOb25JbnRlZ3JhbCkiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX190cnVuY19fIHJldHVybmVkIG5vbi1JbnRlZ3JhbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICh0eXBlIE5vbkludGVncmFsKSIpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIHdpdGggJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYmFzZSwgdHJ1bmNfcmVzdWx0X2Jhc2UpLCkpCkBAIC01MzgsNyArNTcxLDcgQEAKICAgICAgICAgICAgIHkgPSBpbnQoeCkKICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImludChsb25nKHN5cy5tYXhpbnQpICsgMSkgbXVzdG4ndCBvdmVyZmxvdyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHksIGxvbmcpLAorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeSwgbG9uZywKICAgICAgICAgICAgICJpbnQobG9uZyhzeXMubWF4aW50KSArIDEpIHNob3VsZCBoYXZlIHJldHVybmVkIGxvbmciKQogCiAgICAgICAgIHggPSBodWdlbmVnX2FzbG9uZyAtIDEKQEAgLTU0NiwxNCArNTc5LDE0IEBACiAgICAgICAgICAgICB5ID0gaW50KHgpCiAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZygtc3lzLm1heGludC0xKSAtIDEpIG11c3RuJ3Qgb3ZlcmZsb3ciKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh5LCBsb25nKSwKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHksIGxvbmcsCiAgICAgICAgICAgICAgICAiaW50KGxvbmcoLXN5cy5tYXhpbnQtMSkgLSAxKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBsb25nIikKIAogICAgICAgICBjbGFzcyBsb25nMihsb25nKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgeCA9IGxvbmcyKDFMPDwxMDApCiAgICAgICAgIHkgPSBpbnQoeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUoeSkgaXMgbG9uZywKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoeSkgaXMgbG9uZywKICAgICAgICAgICAgICJvdmVyZmxvd2luZyBpbnQgY29udmVyc2lvbiBtdXN0IHJldHVybiBsb25nIG5vdCBsb25nIHN1YnR5cGUiKQogCiAgICAgICAgICMgbG9uZyAtPiBQeV9zc2l6ZV90IGNvbnZlcnNpb24KQEAgLTU2MSwxOCArNTk0LDMyIEBACiAgICAgICAgICAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIGksIGopOgogICAgICAgICAgICAgICAgIHJldHVybiBpLCBqCiAKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKClbLTVMOjdMXSwgKC01LCA3KSkKICAgICAgICAgICAgICMgdXNlIHRoZSBjbGFtcGluZyBlZmZlY3QgdG8gdGVzdCB0aGUgc21hbGxlc3QgYW5kIGxhcmdlc3QgbG9uZ3MKICAgICAgICAgICAgICMgdGhhdCBmaXQgYSBQeV9zc2l6ZV90CiAgICAgICAgICAgICBzbGljZW1pbiwgc2xpY2VtYXggPSBYKClbLTJMKioxMDA6MkwqKjEwMF0KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgpW3NsaWNlbWluOnNsaWNlbWF4XSwgKHNsaWNlbWluLCBzbGljZW1heCkpCiAKKyAgICBkZWYgdGVzdF9pc3N1ZTk4Njkoc2VsZik6CisgICAgICAgICMgSXNzdWUgOTg2OTogSW50ZXJwcmV0ZXIgY3Jhc2ggd2hlbiBpbml0aWFsaXppbmcgYW4gaW5zdGFuY2UKKyAgICAgICAgIyBvZiBhIGxvbmcgc3ViY2xhc3MgZnJvbSBhbiBvYmplY3Qgd2hvc2UgX19sb25nX18gbWV0aG9kIHJldHVybnMKKyAgICAgICAgIyBhIHBsYWluIGludC4KKyAgICAgICAgY2xhc3MgQmFkTG9uZyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwCisKKyAgICAgICAgY2xhc3MgTXlMb25nKGxvbmcpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHggPSBNeUxvbmcoQmFkTG9uZygpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAxMDAwMDAwKQorCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGVzdHMgb2YgYXV0byBpbnQtPmxvbmcgY29udmVyc2lvbgogCiAgICAgZGVmIHRlc3RfYXV0b19vdmVyZmxvdyhzZWxmKToKLSAgICAgICAgaW1wb3J0IG1hdGgsIHN5cwotCiAgICAgICAgIHNwZWNpYWwgPSBbMCwgMSwgMiwgMywgc3lzLm1heGludC0xLCBzeXMubWF4aW50LCBzeXMubWF4aW50KzFdCiAgICAgICAgIHNxcnQgPSBpbnQobWF0aC5zcXJ0KHN5cy5tYXhpbnQpKQogICAgICAgICBzcGVjaWFsLmV4dGVuZChbc3FydC0xLCBzcXJ0LCBzcXJ0KzFdKQpAQCAtNjA2LDcgKzY1Myw3IEBACiAgICAgICAgICAgICAgICAgY2hlY2tpdCh4LCAnKicsIHkpCiAKICAgICAgICAgICAgICAgICBpZiB5OgotICAgICAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGxvbmd4IC8gbG9uZ3kKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdCA9IHggLyB5CiAgICAgICAgICAgICAgICAgICAgIGNoZWNraXQoeCwgJy8nLCB5KQpAQCAtNjMzLDkgKzY4MCw2NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG93LGxvbmd4LCBsb25neSwgbG9uZyh6KSkKIAotICAgIGRlZiB0ZXN0X2Zsb2F0X292ZXJmbG93KHNlbGYpOgotICAgICAgICBpbXBvcnQgbWF0aAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBkZWYgdGVzdF9mbG9hdF9jb252ZXJzaW9uKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIERCTF9NQVggPSBzeXMuZmxvYXRfaW5mby5tYXgKKyAgICAgICAgREJMX01BWF9FWFAgPSBzeXMuZmxvYXRfaW5mby5tYXhfZXhwCisgICAgICAgIERCTF9NQU5UX0RJRyA9IHN5cy5mbG9hdF9pbmZvLm1hbnRfZGlnCiAKKyAgICAgICAgZXhhY3RfdmFsdWVzID0gWzBMLCAxTCwgMkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1My0zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKDIqKjUzLTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTMtMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1MyksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1MysyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKDIqKjU0LTQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTQtMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1NCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1NCs0KV0KKyAgICAgICAgZm9yIHggaW4gZXhhY3RfdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGZsb2F0KHgpKSwgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhmbG9hdCgteCkpLCAteCkKKworICAgICAgICAjIHRlc3Qgcm91bmQtaGFsZi1ldmVuCisgICAgICAgIGZvciB4LCB5IGluIFsoMSwgMCksICgyLCAyKSwgKDMsIDQpLCAoNCwgNCksICg1LCA0KSwgKDYsIDYpLCAoNywgOCldOgorICAgICAgICAgICAgZm9yIHAgaW4geHJhbmdlKDE1KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZmxvYXQoMkwqKnAqKDIqKjUzK3gpKSksIDJMKipwKigyKio1Myt5KSkKKworICAgICAgICBmb3IgeCwgeSBpbiBbKDAsIDApLCAoMSwgMCksICgyLCAwKSwgKDMsIDQpLCAoNCwgNCksICg1LCA0KSwgKDYsIDgpLAorICAgICAgICAgICAgICAgICAgICAgKDcsIDgpLCAoOCwgOCksICg5LCA4KSwgKDEwLCA4KSwgKDExLCAxMiksICgxMiwgMTIpLAorICAgICAgICAgICAgICAgICAgICAgKDEzLCAxMiksICgxNCwgMTYpLCAoMTUsIDE2KV06CisgICAgICAgICAgICBmb3IgcCBpbiB4cmFuZ2UoMTUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhmbG9hdCgyTCoqcCooMioqNTQreCkpKSwgMkwqKnAqKDIqKjU0K3kpKQorCisgICAgICAgICMgYmVoYXZpb3VyIG5lYXIgZXh0cmVtZXMgb2YgZmxvYXRpbmctcG9pbnQgcmFuZ2UKKyAgICAgICAgbG9uZ19kYmxfbWF4ID0gbG9uZyhEQkxfTUFYKQorICAgICAgICB0b3BfcG93ZXIgPSAyKipEQkxfTUFYX0VYUAorICAgICAgICBoYWxmd2F5ID0gKGxvbmdfZGJsX21heCArIHRvcF9wb3dlcikvLzIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChsb25nX2RibF9tYXgpLCBEQkxfTUFYKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KGxvbmdfZGJsX21heCsxKSwgREJMX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChoYWxmd2F5LTEpLCBEQkxfTUFYKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgaGFsZndheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgxLWhhbGZ3YXkpLCAtREJMX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIC1oYWxmd2F5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgdG9wX3Bvd2VyLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCB0b3BfcG93ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCB0b3BfcG93ZXIrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIDIqdG9wX3Bvd2VyLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCAyKnRvcF9wb3dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIHRvcF9wb3dlcip0b3BfcG93ZXIpCisKKyAgICAgICAgZm9yIHAgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICB4ID0gbG9uZygyKipwICogKDIqKjUzICsgMSkgKyAxKQorICAgICAgICAgICAgeSA9IGxvbmcoMioqcCAqICgyKio1MysgMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZmxvYXQoeCkpLCB5KQorCisgICAgICAgICAgICB4ID0gbG9uZygyKipwICogKDIqKjUzICsgMSkpCisgICAgICAgICAgICB5ID0gbG9uZygyKipwICogMioqNTMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZmxvYXQoeCkpLCB5KQorCisgICAgZGVmIHRlc3RfZmxvYXRfb3ZlcmZsb3coc2VsZik6CiAgICAgICAgIGZvciB4IGluIC0yLjAsIC0xLjAsIDAuMCwgMS4wLCAyLjA6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KGxvbmcoeCkpLCB4KQogCkBAIC02NjUsOCArNzY5LDYgQEAKICAgICAgICAgICAgICAgICAiZmxvYXQoc2h1Z2UpIHNob3VsZCBub3QgZXF1YWwgaW50KHNodWdlKSIpCiAKICAgICBkZWYgdGVzdF9sb2dzKHNlbGYpOgotICAgICAgICBpbXBvcnQgbWF0aAotCiAgICAgICAgIExPRzEwRSA9IG1hdGgubG9nMTAobWF0aC5lKQogCiAgICAgICAgIGZvciBleHAgaW4gcmFuZ2UoMTApICsgWzEwMCwgMTAwMCwgMTAwMDBdOgpAQCAtNjg2LDcgKzc4OCw2IEBACiAKICAgICBkZWYgdGVzdF9taXhlZF9jb21wYXJlcyhzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIGltcG9ydCBtYXRoCiAKICAgICAgICAgIyBXZSdyZSBtb3N0bHkgY29uY2VybmVkIHdpdGggdGhhdCBtaXhpbmcgZmxvYXRzIGFuZCBsb25ncyBkb2VzIHRoZQogICAgICAgICAjIHJpZ2h0IHN0dWZmLCBldmVuIHdoZW4gbG9uZ3MgYXJlIHRvbyBsYXJnZSB0byBmaXQgaW4gYSBmbG9hdC4KQEAgLTc3MCw2ICs4NzEsNDIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbG9uZywgZmxvYXQoJy1pbmYnKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9uZywgZmxvYXQoJ25hbicpKQogCisgICAgZGVmIHRlc3RfYml0X2xlbmd0aChzZWxmKToKKyAgICAgICAgdGlueSA9IDFlLTEwCisgICAgICAgIGZvciB4IGluIHhyYW5nZSgtNjUwMDAsIDY1MDAwKToKKyAgICAgICAgICAgIHggPSBsb25nKHgpCisgICAgICAgICAgICBrID0geC5iaXRfbGVuZ3RoKCkKKyAgICAgICAgICAgICMgQ2hlY2sgZXF1aXZhbGVuY2Ugd2l0aCBQeXRob24gdmVyc2lvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBsZW4oYmluKHgpLmxzdHJpcCgnLTBiJykpKQorICAgICAgICAgICAgIyBCZWhhdmlvdXIgYXMgc3BlY2lmaWVkIGluIHRoZSBkb2NzCisgICAgICAgICAgICBpZiB4ICE9IDA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKihrLTEpIDw9IGFicyh4KSA8IDIqKmspCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgMCkKKyAgICAgICAgICAgICMgQWx0ZXJuYXRpdmUgZGVmaW5pdGlvbjogeC5iaXRfbGVuZ3RoKCkgPT0gMSArIGZsb29yKGxvZ18yKHgpKQorICAgICAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgICAgICMgV2hlbiB4IGlzIGFuIGV4YWN0IHBvd2VyIG9mIDIsIG51bWVyaWMgZXJyb3JzIGNhbgorICAgICAgICAgICAgICAgICMgY2F1c2UgZmxvb3IobG9nKHgpL2xvZygyKSkgdG8gYmUgb25lIHRvbyBzbWFsbDsgZm9yCisgICAgICAgICAgICAgICAgIyBzbWFsbCB4IHRoaXMgY2FuIGJlIGZpeGVkIGJ5IGFkZGluZyBhIHNtYWxsIHF1YW50aXR5CisgICAgICAgICAgICAgICAgIyB0byB0aGUgcXVvdGllbnQgYmVmb3JlIHRha2luZyB0aGUgZmxvb3IuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCAxICsgbWF0aC5mbG9vcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGgubG9nKGFicyh4KSkvbWF0aC5sb2coMikgKyB0aW55KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwTCkuYml0X2xlbmd0aCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxTCkuYml0X2xlbmd0aCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMUwpLmJpdF9sZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMkwpLmJpdF9sZW5ndGgoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTJMKS5iaXRfbGVuZ3RoKCksIDIpCisgICAgICAgIGZvciBpIGluIFsyLCAzLCAxNSwgMTYsIDE3LCAzMSwgMzIsIDMzLCA2MywgNjQsIDIzNF06CisgICAgICAgICAgICBhID0gMkwqKmkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEtMSkuYml0X2xlbmd0aCgpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMS1hKS5iaXRfbGVuZ3RoKCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhKS5iaXRfbGVuZ3RoKCksIGkrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC1hKS5iaXRfbGVuZ3RoKCksIGkrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGErMSkuYml0X2xlbmd0aCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtYS0xKS5iaXRfbGVuZ3RoKCksIGkrMSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChMb25nVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sb25nX2Z1dHVyZS5weSBiL0xpYi90ZXN0L3Rlc3RfbG9uZ19mdXR1cmUucHkKaW5kZXggMjViZDdhNy4uNzZjM2JmYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb25nX2Z1dHVyZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xvbmdfZnV0dXJlLnB5CkBAIC0zLDggKzMsNTIgQEAKICMgdGVzdF9sb25nLnB5IGluc3RlYWQuICBJbiB0aGUgbWVhbnRpbWUsIGl0J3MgdG9vIG9ic2N1cmUgdG8gdHJ5IHRvCiAjIHRyaWNrIGp1c3QgcGFydCBvZiB0ZXN0X2xvbmcgaW50byB1c2luZyBmdXR1cmUgZGl2aXNpb24uCiAKK2ltcG9ydCBzeXMKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBtYXRoCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgX2NoZWNrX3B5M2tfd2FybmluZ3MKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCisjIGRlY29yYXRvciBmb3Igc2tpcHBpbmcgdGVzdHMgb24gbm9uLUlFRUUgNzU0IHBsYXRmb3JtcworcmVxdWlyZXNfSUVFRV83NTQgPSB1bml0dGVzdC5za2lwVW5sZXNzKAorICAgIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKworREJMX01BWCA9IHN5cy5mbG9hdF9pbmZvLm1heAorREJMX01BWF9FWFAgPSBzeXMuZmxvYXRfaW5mby5tYXhfZXhwCitEQkxfTUlOX0VYUCA9IHN5cy5mbG9hdF9pbmZvLm1pbl9leHAKK0RCTF9NQU5UX0RJRyA9IHN5cy5mbG9hdF9pbmZvLm1hbnRfZGlnCitEQkxfTUlOX09WRVJGTE9XID0gMioqREJMX01BWF9FWFAgLSAyKiooREJMX01BWF9FWFAgLSBEQkxfTUFOVF9ESUcgLSAxKQorCisjIHB1cmUgUHl0aG9uIHZlcnNpb24gb2YgY29ycmVjdGx5LXJvdW5kZWQgdHJ1ZSBkaXZpc2lvbgorZGVmIHRydWVkaXYoYSwgYik6CisgICAgIiIiQ29ycmVjdGx5LXJvdW5kZWQgdHJ1ZSBkaXZpc2lvbiBmb3IgaW50ZWdlcnMuIiIiCisgICAgbmVnYXRpdmUgPSBhXmIgPCAwCisgICAgYSwgYiA9IGFicyhhKSwgYWJzKGIpCisKKyAgICAjIGV4Y2VwdGlvbnM6ICBkaXZpc2lvbiBieSB6ZXJvLCBvdmVyZmxvdworICAgIGlmIG5vdCBiOgorICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcigiZGl2aXNpb24gYnkgemVybyIpCisgICAgaWYgYSA+PSBEQkxfTUlOX09WRVJGTE9XICogYjoKKyAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcigiaW50L2ludCB0b28gbGFyZ2UgdG8gcmVwcmVzZW50IGFzIGEgZmxvYXQiKQorCisgICAjIGZpbmQgaW50ZWdlciBkIHNhdGlzZnlpbmcgMioqKGQgLSAxKSA8PSBhL2IgPCAyKipkCisgICAgZCA9IGEuYml0X2xlbmd0aCgpIC0gYi5iaXRfbGVuZ3RoKCkKKyAgICBpZiBkID49IDAgYW5kIGEgPj0gMioqZCAqIGIgb3IgZCA8IDAgYW5kIGEgKiAyKiotZCA+PSBiOgorICAgICAgICBkICs9IDEKKworICAgICMgY29tcHV0ZSAyKiotZXhwICogYSAvIGIgZm9yIHN1aXRhYmxlIGV4cAorICAgIGV4cCA9IG1heChkLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcKKyAgICBhLCBiID0gYSA8PCBtYXgoLWV4cCwgMCksIGIgPDwgbWF4KGV4cCwgMCkKKyAgICBxLCByID0gZGl2bW9kKGEsIGIpCisKKyAgICAjIHJvdW5kLWhhbGYtdG8tZXZlbjogZnJhY3Rpb25hbCBwYXJ0IGlzIHIvYiwgd2hpY2ggaXMgPiAwLjUgaWZmCisgICAgIyAyKnIgPiBiLCBhbmQgPT0gMC41IGlmZiAyKnIgPT0gYi4KKyAgICBpZiAyKnIgPiBiIG9yIDIqciA9PSBiIGFuZCBxICUgMiA9PSAxOgorICAgICAgICBxICs9IDEKKworICAgIHJlc3VsdCA9IG1hdGgubGRleHAoZmxvYXQocSksIGV4cCkKKyAgICByZXR1cm4gLXJlc3VsdCBpZiBuZWdhdGl2ZSBlbHNlIHJlc3VsdAogCiBjbGFzcyBUcnVlRGl2aXNpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Qoc2VsZik6CkBAIC0zMCwyMyArNzQsMTQ0IEBACiAgICAgICAgIGZvciBvdmVyZmxvdyBpbiBbImZsb2F0KGh1Z2UpIiwgImZsb2F0KG1odWdlKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImh1Z2UgLyAxIiwgImh1Z2UgLyAyTCIsICJodWdlIC8gLTEiLCAiaHVnZSAvIC0yTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm1odWdlIC8gMTAwIiwgIm1odWdlIC8gMTAwTCJdOgotICAgICAgICAgICAgIyBYWFgoY3dpbnRlcikgdGhpcyB0ZXN0IGRvZXNuJ3QgcGFzcyB3aGVuIGNvbnZlcnRlZCB0bwotICAgICAgICAgICAgIyB1c2UgYXNzZXJ0UmFpc2VzLgotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBJZiB0aGUgImV2YWwiIGRvZXMgbm90IGhhcHBlbiBpbiB0aGlzIG1vZHVsZSwKKyAgICAgICAgICAgICMgdHJ1ZSBkaXZpc2lvbiBpcyBub3QgZW5hYmxlZAorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yKToKICAgICAgICAgICAgICAgICBldmFsKG92ZXJmbG93LCBuYW1lc3BhY2UpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBPdmVyZmxvd0Vycm9yIGZyb20gJXIiICUgb3ZlcmZsb3cpCi0gICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgZm9yIHVuZGVyZmxvdyBpbiBbIjEgLyBodWdlIiwgIjJMIC8gaHVnZSIsICItMSAvIGh1Z2UiLCAiLTJMIC8gaHVnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjEwMCAvIG1odWdlIiwgIjEwMEwgLyBtaHVnZSJdOgogICAgICAgICAgICAgcmVzdWx0ID0gZXZhbCh1bmRlcmZsb3csIG5hbWVzcGFjZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAwLjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB1bmRlcmZsb3cgdG8gMCBmcm9tICVyIiAlIHVuZGVyZmxvdykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAwLjAsICdleHBlY3RlZCB1bmRlcmZsb3cgdG8gMCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tIHshcn0nLmZvcm1hdCh1bmRlcmZsb3cpKQogCi0gICAgICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoKCdjbGFzc2ljIGxvbmcgZGl2aXNpb24nLCBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIGZvciB6ZXJvIGluIFsiaHVnZSAvIDAiLCAiaHVnZSAvIDBMIiwgIm1odWdlIC8gMCIsICJtaHVnZSAvIDBMIl06Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGV2YWwsIHplcm8sIG5hbWVzcGFjZSkKKyAgICAgICAgZm9yIHplcm8gaW4gWyJodWdlIC8gMCIsICJodWdlIC8gMEwiLCAibWh1Z2UgLyAwIiwgIm1odWdlIC8gMEwiXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgICAgIGV2YWwoemVybywgbmFtZXNwYWNlKQorCisgICAgZGVmIGNoZWNrX3RydWVkaXYoc2VsZiwgYSwgYiwgc2tpcF9zbWFsbD1UcnVlKToKKyAgICAgICAgIiIiVmVyaWZ5IHRoYXQgdGhlIHJlc3VsdCBvZiBhL2IgaXMgY29ycmVjdGx5IHJvdW5kZWQsIGJ5CisgICAgICAgIGNvbXBhcmluZyBpdCB3aXRoIGEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgY29ycmVjdGx5CisgICAgICAgIHJvdW5kZWQgZGl2aXNpb24uICBiIHNob3VsZCBiZSBub256ZXJvLiIiIgorCisgICAgICAgIGEsIGIgPSBsb25nKGEpLCBsb25nKGIpCisKKyAgICAgICAgIyBza2lwIGNoZWNrIGZvciBzbWFsbCBhIGFuZCBiOiBpbiB0aGlzIGNhc2UsIHRoZSBjdXJyZW50CisgICAgICAgICMgaW1wbGVtZW50YXRpb24gY29udmVydHMgdGhlIGFyZ3VtZW50cyB0byBmbG9hdCBkaXJlY3RseSBhbmQKKyAgICAgICAgIyB0aGVuIGFwcGxpZXMgYSBmbG9hdCBkaXZpc2lvbi4gIFRoaXMgY2FuIGdpdmUgZG91Ymx5LXJvdW5kZWQKKyAgICAgICAgIyByZXN1bHRzIG9uIHg4Ny11c2luZyBtYWNoaW5lcyAocGFydGljdWxhcmx5IDMyLWJpdCBMaW51eCkuCisgICAgICAgIGlmIHNraXBfc21hbGwgYW5kIG1heChhYnMoYSksIGFicyhiKSkgPCAyKipEQkxfTUFOVF9ESUc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHVzZSByZXByIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gLTAuMCBhbmQgMC4wCisgICAgICAgICAgICBleHBlY3RlZCA9IHJlcHIodHJ1ZWRpdihhLCBiKSkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBleHBlY3RlZCA9ICdvdmVyZmxvdycKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSAnemVyb2RpdmlzaW9uJworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdvdCA9IHJlcHIoYSAvIGIpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgZ290ID0gJ292ZXJmbG93JworICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBnb3QgPSAnemVyb2RpdmlzaW9uJworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCwgIkluY29ycmVjdGx5IHJvdW5kZWQgZGl2aXNpb24ge30ve306ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQge30sIGdvdCB7fSIuZm9ybWF0KGEsIGIsIGV4cGVjdGVkLCBnb3QpKQorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfY29ycmVjdGx5X3JvdW5kZWRfdHJ1ZV9kaXZpc2lvbihzZWxmKToKKyAgICAgICAgIyBtb3JlIHN0cmluZ2VudCB0ZXN0cyB0aGFuIHRob3NlIGFib3ZlLCBjaGVja2luZyB0aGF0IHRoZQorICAgICAgICAjIHJlc3VsdCBvZiB0cnVlIGRpdmlzaW9uIG9mIGludHMgaXMgYWx3YXlzIGNvcnJlY3RseSByb3VuZGVkLgorICAgICAgICAjIFRoaXMgdGVzdCBzaG91bGQgcHJvYmFibHkgYmUgY29uc2lkZXJlZCBDUHl0aG9uLXNwZWNpZmljLgorCisgICAgICAgICMgRXhlcmNpc2UgYWxsIHRoZSBjb2RlIHBhdGhzIG5vdCBpbnZvbHZpbmcgR2Itc2l6ZWQgaW50cy4KKyAgICAgICAgIyAuLi4gZGl2aXNpb25zIGludm9sdmluZyB6ZXJvCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMjMsIDApCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigtNDU2LCAwKQorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMCwgMykKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDAsIC0zKQorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMCwgMCkKKyAgICAgICAgIyAuLi4gb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGJ5IGxhcmdlIG1hcmdpbgorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoNjcxICogMTIzNDUgKiAyKipEQkxfTUFYX0VYUCwgMTIzNDUpCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMjM0NSwgMzQ1Njc4ICogMioqKERCTF9NQU5UX0RJRyAtIERCTF9NSU5fRVhQKSkKKyAgICAgICAgIyAuLi4gYSBtdWNoIGxhcmdlciBvciBzbWFsbGVyIHRoYW4gYgorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMTIzNDUqMioqMTAwLCA5ODc2NSkKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEyMzQ1KjIqKjMwLCA5ODc2NSo3Kio4MSkKKyAgICAgICAgIyAuLi4gYSAvIGIgbmVhciBhIGJvdW5kYXJ5OiBvbmUgb2YgMSwgMioqREJMX01BTlRfRElHLCAyKipEQkxfTUlOX0VYUCwKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgMioqREJMX01BWF9FWFAsIDIqKihEQkxfTUlOX0VYUC1EQkxfTUFOVF9ESUcpCisgICAgICAgIGJhc2VzID0gKDAsIERCTF9NQU5UX0RJRywgREJMX01JTl9FWFAsCisgICAgICAgICAgICAgICAgIERCTF9NQVhfRVhQLCBEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRykKKyAgICAgICAgZm9yIGJhc2UgaW4gYmFzZXM6CisgICAgICAgICAgICBmb3IgZXhwIGluIHJhbmdlKGJhc2UgLSAxNSwgYmFzZSArIDE1KToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoNzUzMTIqMioqbWF4KGV4cCwgMCksIDY5MTg3KjIqKm1heCgtZXhwLCAwKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoNjkxODcqMioqbWF4KGV4cCwgMCksIDc1MzEyKjIqKm1heCgtZXhwLCAwKSkKKworICAgICAgICAjIG92ZXJmbG93IGNvcm5lciBjYXNlCisgICAgICAgIGZvciBtIGluIFsxLCAyLCA3LCAxNywgMTIzNDUsIDcqKjEwMCwKKyAgICAgICAgICAgICAgICAgIC0xLCAtMiwgLTUsIC0yMywgLTY3ODkxLCAtNDEqKjUwXToKKyAgICAgICAgICAgIGZvciBuIGluIHJhbmdlKC0xMCwgMTApOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdihtKkRCTF9NSU5fT1ZFUkZMT1cgKyBuLCBtKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdihtKkRCTF9NSU5fT1ZFUkZMT1cgKyBuLCAtbSkKKworICAgICAgICAjIGNoZWNrIGRldGVjdGlvbiBvZiBpbmV4YWN0bmVzcyBpbiBzaGlmdGluZyBzdGFnZQorICAgICAgICBmb3IgbiBpbiByYW5nZSgyNTApOgorICAgICAgICAgICAgIyAoMioqREJMX01BTlRfRElHKzEpLygyKipEQkxfTUFOVF9ESUcpIGxpZXMgaGFsZndheQorICAgICAgICAgICAgIyBiZXR3ZWVuIHR3byByZXByZXNlbnRhYmxlIGZsb2F0cywgYW5kIHdvdWxkIHVzdWFsbHkgYmUKKyAgICAgICAgICAgICMgcm91bmRlZCBkb3duIHVuZGVyIHJvdW5kLWhhbGYtdG8tZXZlbi4gIFRoZSB0aW5pZXN0IG9mCisgICAgICAgICAgICAjIGFkZGl0aW9ucyB0byB0aGUgbnVtZXJhdG9yIHNob3VsZCBjYXVzZSBpdCB0byBiZSByb3VuZGVkCisgICAgICAgICAgICAjIHVwIGluc3RlYWQuCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoKDIqKkRCTF9NQU5UX0RJRyArIDEpKjEyMzQ1KjIqKjIwMCArIDIqKm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAyKipEQkxfTUFOVF9ESUcqMTIzNDUpCisKKyAgICAgICAgIyAxLzI3MzEgaXMgb25lIG9mIHRoZSBzbWFsbGVzdCBkaXZpc2lvbiBjYXNlcyB0aGF0J3Mgc3ViamVjdAorICAgICAgICAjIHRvIGRvdWJsZSByb3VuZGluZyBvbiBJRUVFIDc1NCBtYWNoaW5lcyB3b3JraW5nIGludGVybmFsbHkgd2l0aAorICAgICAgICAjIDY0LWJpdCBwcmVjaXNpb24uICBPbiBzdWNoIG1hY2hpbmVzLCB0aGUgbmV4dCBjaGVjayB3b3VsZCBmYWlsLAorICAgICAgICAjIHdlcmUgaXQgbm90IGV4cGxpY2l0bHkgc2tpcHBlZCBpbiBjaGVja190cnVlZGl2LgorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMSwgMjczMSkKKworICAgICAgICAjIGEgcGFydGljdWxhcmx5IGJhZCBjYXNlIGZvciB0aGUgb2xkIGFsZ29yaXRobTogIGdpdmVzIGFuCisgICAgICAgICMgZXJyb3Igb2YgY2xvc2UgdG8gMy41IHVscHMuCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigyOTUxNDc5MzEzNzI1ODIyNzMwMjMsIDI5NTE0NzkzMjI2NTExNjMwMzM2MCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMTAqKihpKzEpLCAxMCoqaSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMCoqaSwgMTAqKihpKzEpKQorCisgICAgICAgICMgdGVzdCByb3VuZC1oYWxmLXRvLWV2ZW4gYmVoYXZpb3VyLCBub3JtYWwgcmVzdWx0CisgICAgICAgIGZvciBtIGluIFsxLCAyLCA0LCA3LCA4LCAxNiwgMTcsIDMyLCAxMjM0NSwgNyoqMTAwLAorICAgICAgICAgICAgICAgICAgLTEsIC0yLCAtNSwgLTIzLCAtNjc4OTEsIC00MSoqNTBdOgorICAgICAgICAgICAgZm9yIG4gaW4gcmFuZ2UoLTEwLCAxMCk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDIqKkRCTF9NQU5UX0RJRyptICsgbiwgbSkKKworICAgICAgICAjIHRlc3Qgcm91bmQtaGFsZi10by1ldmVuLCBzdWJub3JtYWwgcmVzdWx0CisgICAgICAgIGZvciBuIGluIHJhbmdlKC0yMCwgMjApOgorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KG4sIDIqKjEwNzYpCisKKyAgICAgICAgIyBsYXJnZWlzaCByYW5kb20gZGl2aXNpb25zOiBhL2Igd2hlcmUgfGF8IDw9IHxifCA8PQorICAgICAgICAjIDIqfGF8OyB8YW5zfCBpcyBiZXR3ZWVuIDAuNSBhbmQgMS4wLCBzbyBlcnJvciBzaG91bGQKKyAgICAgICAgIyBhbHdheXMgYmUgYm91bmRlZCBieSAyKiotNTQgd2l0aCBlcXVhbGl0eSBwb3NzaWJsZSBvbmx5CisgICAgICAgICMgaWYgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBxPWFucyoyKio1MyBpcyB6ZXJvLgorICAgICAgICBmb3IgTSBpbiBbMTAqKjEwLCAxMCoqMTAwLCAxMCoqMTAwMF06CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgICAgICBhID0gcmFuZG9tLnJhbmRyYW5nZSgxLCBNKQorICAgICAgICAgICAgICAgIGIgPSByYW5kb20ucmFuZHJhbmdlKGEsIDIqYSsxKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdihhLCBiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigtYSwgYikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoYSwgLWIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KC1hLCAtYikKKworICAgICAgICAjIGFuZCBzb21lIChnZW51aW5lbHkpIHJhbmRvbSB0ZXN0cworICAgICAgICBmb3IgXyBpbiByYW5nZSgxMDAwMCk6CisgICAgICAgICAgICBhX2JpdHMgPSByYW5kb20ucmFuZHJhbmdlKDEwMDApCisgICAgICAgICAgICBiX2JpdHMgPSByYW5kb20ucmFuZHJhbmdlKDEsIDEwMDApCisgICAgICAgICAgICB4ID0gcmFuZG9tLnJhbmRyYW5nZSgyKiphX2JpdHMpCisgICAgICAgICAgICB5ID0gcmFuZG9tLnJhbmRyYW5nZSgxLCAyKipiX2JpdHMpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdih4LCAteSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigteCwgeSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigteCwgLXkpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYWNvcy5weSBiL0xpYi90ZXN0L3Rlc3RfbWFjb3MucHkKaW5kZXggZTY1YjE3NC4uNWFmNTEwNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYWNvcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hY29zLnB5CkBAIC0xLDEzICsxLDY4IEBACiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBNYWNPUwotaW1wb3J0IENhcmJvbi5GaWxlCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworCitNYWNPUyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdNYWNPUycpCiAKIFRFU1RGTjIgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgJzInCiAKIGNsYXNzIFRlc3RNYWNPUyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVzdEdldENyZWF0b3JBbmRUeXBlKHNlbGYpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy9EZXZlbG9wZXIvVG9vbHMvU2V0RmlsZScpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3JykKKyAgICAgICAgICAgIGZwLndyaXRlKCdcbicpCisgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgKKyAgICAgICAgICAgICAgICAgICAgWycvRGV2ZWxvcGVyL1Rvb2xzL1NldEZpbGUnLCAnLXQnLCAnQUJDRCcsICctYycsICdFRkdIJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk5dKQorCisgICAgICAgICAgICBjciwgdHAgPSBNYWNPUy5HZXRDcmVhdG9yQW5kVHlwZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cCwgJ0FCQ0QnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjciwgJ0VGR0gnKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0U2V0Q3JlYXRvckFuZFR5cGUoc2VsZik6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygnL0RldmVsb3Blci9Ub29scy9HZXRGaWxlSW5mbycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3JykKKyAgICAgICAgICAgIGZwLndyaXRlKCdcbicpCisgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICAgICAgICAgIE1hY09TLlNldENyZWF0b3JBbmRUeXBlKHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICAgICdBQkNEJywgJ0VGR0gnKQorCisgICAgICAgICAgICBjciwgdHAgPSBNYWNPUy5HZXRDcmVhdG9yQW5kVHlwZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjciwgJ0FCQ0QnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cCwgJ0VGR0gnKQorCisgICAgICAgICAgICBkYXRhID0gc3VicHJvY2Vzcy5Qb3BlbihbIi9EZXZlbG9wZXIvVG9vbHMvR2V0RmlsZUluZm8iLCB0ZXN0X3N1cHBvcnQuVEVTVEZOXSwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorCisgICAgICAgICAgICB0cCA9IE5vbmUKKyAgICAgICAgICAgIGNyID0gTm9uZQorICAgICAgICAgICAgZm9yICBsbiBpbiBkYXRhLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsbi5zdGFydHN3aXRoKCd0eXBlOicpOgorICAgICAgICAgICAgICAgICAgICB0cCA9IGxuLnNwbGl0KClbLTFdWzE6LTFdCisgICAgICAgICAgICAgICAgaWYgbG4uc3RhcnRzd2l0aCgnY3JlYXRvcjonKToKKyAgICAgICAgICAgICAgICAgICAgY3IgPSBsbi5zcGxpdCgpWy0xXVsxOi0xXQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyLCAnQUJDRCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRwLCAnRUZHSCcpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisKICAgICBkZWYgdGVzdE9wZW5SRihzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3JykKQEAgLTIyLDE0ICs3NywxNCBAQAogICAgICAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICdyJykKICAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGEsICdoZWxsbyB3b3JsZFxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJ2hlbGxvIHdvcmxkXG4nKQogCiAgICAgICAgICAgICByZnAgPSBNYWNPUy5vcGVucmYodGVzdF9zdXBwb3J0LlRFU1RGTiwgJypyYicpCiAgICAgICAgICAgICBkYXRhID0gcmZwLnJlYWQoMTAwKQogICAgICAgICAgICAgZGF0YTIgPSByZnAucmVhZCgxMDApCiAgICAgICAgICAgICByZnAuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0YSwgJ2dvb2RieWUgd29ybGRcbicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkYXRhMiwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICdnb29kYnllIHdvcmxkXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgJycpCiAKIAogICAgICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYWNvc3Rvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9tYWNvc3Rvb2xzLnB5CmluZGV4IGFhNjU5MTkuLjRmMTU5ODIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFjb3N0b29scy5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hY29zdG9vbHMucHkKQEAgLTEsMTMgKzEsMTUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IG1hY29zdG9vbHMKLWltcG9ydCBDYXJib24uRmlsZQotaW1wb3J0IE1hY09TCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKK01hY09TID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ01hY09TJykKKyNUaGUgZm9sbG93aW5nIG1vZHVsZXMgc2hvdWxkIGV4aXN0IGlmIE1hY09TIGV4aXN0cy4KK2ltcG9ydCBDYXJib24uRmlsZQoraW1wb3J0IG1hY29zdG9vbHMKKwogVEVTVEZOMiA9IHRlc3Rfc3VwcG9ydC5URVNURk4gKyAnMicKIAogY2xhc3MgVGVzdE1hY29zdG9vbHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNzgsNyArODAsNyBAQAogZGVmIHRlc3RfbWFpbigpOgogICAgICMgU2tpcCBvbiB3aWRlIHVuaWNvZGUKICAgICBpZiBsZW4odSdcMCcuZW5jb2RlKCd1bmljb2RlLWludGVybmFsJykpID09IDQ6Ci0gICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZCgidGVzdF9tYWNvc3Rvb2xzIGlzIGJyb2tlbiBpbiBVU0M0IikKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInRlc3RfbWFjb3N0b29scyBpcyBicm9rZW4gaW4gVVNDNCIpCiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0TWFjb3N0b29scykKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21hY3BhdGgucHkgYi9MaWIvdGVzdC90ZXN0X21hY3BhdGgucHkKaW5kZXggMjRkOGJiMi4uMmM4NmM1MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYWNwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFjcGF0aC5weQpAQCAtMSw4NiArMSw1NiBAQAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCiBpbXBvcnQgbWFjcGF0aAotZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCB0ZXN0X2dlbmVyaWNwYXRoCiBpbXBvcnQgdW5pdHRlc3QKIAogCiBjbGFzcyBNYWNQYXRoVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYWJzcGF0aChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hY3BhdGguYWJzcGF0aCgieHg6eXkiKSA9PSAieHg6eXkiKQotCi0gICAgICAgICMgSXNzdWUgMzQyNjogY2hlY2sgdGhhdCBhYnNwYXRoIHJldHVucyB1bmljb2RlIHdoZW4gdGhlIGFyZyBpcyB1bmljb2RlCi0gICAgICAgICMgYW5kIHN0ciB3aGVuIGl0J3Mgc3RyLCB3aXRoIGJvdGggQVNDSUkgYW5kIG5vbi1BU0NJSSBjd2RzCi0gICAgICAgIHNhdmVkX2N3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgIGN3ZHMgPSBbJ2N3ZCddCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGN3ZHMuYXBwZW5kKHUnXHhlN3dceGYwJy5lbmNvZGUoc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICdhc2NpaScpKQotICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgotICAgICAgICAgICAgcGFzcyAjIHRoZSBjd2QgY2FuJ3QgYmUgZW5jb2RlZCAtLSB0ZXN0IHdpdGggYXNjaWkgY3dkIG9ubHkKLSAgICAgICAgZm9yIGN3ZCBpbiBjd2RzOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKGN3ZCkKLSAgICAgICAgICAgICAgICBvcy5jaGRpcihjd2QpCi0gICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gKCcnLCAnZm9vJywgJ2ZceGYyXHhmMicsICcvZm9vJywgJ0M6XFwnKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobWFjcGF0aC5hYnNwYXRoKHBhdGgpLCBzdHIpKQotICAgICAgICAgICAgICAgIGZvciB1cGF0aCBpbiAodScnLCB1J2Z1dScsIHUnZlx4ZjlceGY5JywgdScvZnV1JywgdSdVOlxcJyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1hY3BhdGguYWJzcGF0aCh1cGF0aCksIHVuaWNvZGUpKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBvcy5jaGRpcihzYXZlZF9jd2QpCi0gICAgICAgICAgICAgICAgb3Mucm1kaXIoY3dkKQotCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjcGF0aC5hYnNwYXRoKCJ4eDp5eSIpLCAieHg6eXkiKQogCiAgICAgZGVmIHRlc3RfaXNhYnMoc2VsZik6CiAgICAgICAgIGlzYWJzID0gbWFjcGF0aC5pc2FicwotICAgICAgICBzZWxmLmFzc2VydF8oaXNhYnMoInh4Onl5IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2FicygieHg6eXk6IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2FicygieHg6IikpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzYWJzKCJmb28iKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNhYnMoIjpmb28iKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNhYnMoIjpmb286YmFyIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzYWJzKCI6Zm9vOmJhcjoiKSkKLQotCi0gICAgZGVmIHRlc3RfY29tbW9ucHJlZml4KHNlbGYpOgotICAgICAgICBjb21tb25wcmVmaXggPSBtYWNwYXRoLmNvbW1vbnByZWZpeAotICAgICAgICBzZWxmLmFzc2VydF8oY29tbW9ucHJlZml4KFsiaG9tZTpzd2Vuc29uOnNwYW0iLCAiaG9tZTpzd2VuOnNwYW0iXSkKLSAgICAgICAgICAgICAgICAgICAgID09ICJob21lOnN3ZW4iKQotICAgICAgICBzZWxmLmFzc2VydF8oY29tbW9ucHJlZml4KFsiOmhvbWU6c3dlbjpzcGFtIiwgIjpob21lOnN3ZW46ZWdncyJdKQotICAgICAgICAgICAgICAgICAgICAgPT0gIjpob21lOnN3ZW46IikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbW1vbnByZWZpeChbIjpob21lOnN3ZW46c3BhbSIsICI6aG9tZTpzd2VuOnNwYW0iXSkKLSAgICAgICAgICAgICAgICAgICAgID09ICI6aG9tZTpzd2VuOnNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNhYnMoInh4Onl5IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2FicygieHg6eXk6IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2FicygieHg6IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNhYnMoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzYWJzKCI6Zm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNhYnMoIjpmb286YmFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNhYnMoIjpmb286YmFyOiIpKQogCiAgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CiAgICAgICAgIHNwbGl0ID0gbWFjcGF0aC5zcGxpdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzcGxpdCgiZm9vOmJhciIpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KCJmb286YmFyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZm9vOicsICdiYXInKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXQoImNvbmt5Om1vdW50cG9pbnQ6Zm9vOmJhciIpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KCJjb25reTptb3VudHBvaW50OmZvbzpiYXIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjb25reTptb3VudHBvaW50OmZvbycsICdiYXInKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzcGxpdCgiOiIpLCAoJycsICcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXQoIjpjb25reTptb3VudHBvaW50OiIpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KCI6IiksICgnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KCI6Y29ua3k6bW91bnRwb2ludDoiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc6Y29ua3k6bW91bnRwb2ludCcsICcnKSkKIAotICAgIGRlZiB0ZXN0X3NwbGl0ZHJpdmUoc2VsZik6Ci0gICAgICAgIHNwbGl0ZHJpdmUgPSBtYWNwYXRoLnNwbGl0ZHJpdmUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXRkcml2ZSgiZm9vOmJhciIpLCAoJycsICdmb286YmFyJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNwbGl0ZHJpdmUoIjpmb286YmFyIiksICgnJywgJzpmb286YmFyJykpCi0KICAgICBkZWYgdGVzdF9zcGxpdGV4dChzZWxmKToKICAgICAgICAgc3BsaXRleHQgPSBtYWNwYXRoLnNwbGl0ZXh0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNwbGl0ZXh0KCI6Zm9vLmV4dCIpLCAoJzpmb28nLCAnLmV4dCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzcGxpdGV4dCgiZm9vOmZvby5leHQiKSwgKCdmb286Zm9vJywgJy5leHQnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXRleHQoIi5leHQiKSwgKCcuZXh0JywgJycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzcGxpdGV4dCgiZm9vLmV4dDpmb28iKSwgKCdmb28uZXh0OmZvbycsICcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXRleHQoIjpmb28uZXh0OiIpLCAoJzpmb28uZXh0OicsICcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXRleHQoIiIpLCAoJycsICcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXRleHQoImZvby5iYXIuZXh0IiksICgnZm9vLmJhcicsICcuZXh0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRleHQoIjpmb28uZXh0IiksICgnOmZvbycsICcuZXh0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRleHQoImZvbzpmb28uZXh0IiksICgnZm9vOmZvbycsICcuZXh0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRleHQoIi5leHQiKSwgKCcuZXh0JywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCJmb28uZXh0OmZvbyIpLCAoJ2Zvby5leHQ6Zm9vJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCI6Zm9vLmV4dDoiKSwgKCc6Zm9vLmV4dDonLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRleHQoIiIpLCAoJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGV4dCgiZm9vLmJhci5leHQiKSwgKCdmb28uYmFyJywgJy5leHQnKSkKKworICAgIGRlZiB0ZXN0X25vcm1wYXRoKHNlbGYpOgorICAgICAgICAjIElzc3VlIDU4Mjc6IE1ha2Ugc3VyZSBub3JtcGF0aCBwcmVzZXJ2ZXMgdW5pY29kZQorICAgICAgICBmb3IgcGF0aCBpbiAodScnLCB1Jy4nLCB1Jy8nLCB1J1xcJywgdSc6JywgdScvLy9mb28vLi8vYmFyLy8nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtYWNwYXRoLm5vcm1wYXRoKHBhdGgpLCB1bmljb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3JtcGF0aCgpIHJldHVybmVkIHN0ciBpbnN0ZWFkIG9mIHVuaWNvZGUnKQorCitjbGFzcyBNYWNDb21tb25UZXN0KHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdCk6CisgICAgcGF0aG1vZHVsZSA9IG1hY3BhdGgKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChNYWNQYXRoVGVzdENhc2UpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChNYWNQYXRoVGVzdENhc2UsIE1hY0NvbW1vblRlc3QpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQppbmRleCA0NGUzY2E4Li44M2UzMTMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CkBAIC0yMywxNyArMjMsMTcgQEAKIAogICAgIGRlZiBfY2hlY2tfc2FtcGxlKHNlbGYsIG1zZyk6CiAgICAgICAgICMgSW5zcGVjdCBhIG1haWxib3guTWVzc2FnZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2FtcGxlIG1lc3NhZ2UKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UobXNnLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShtc2csIG1haWxib3guTWVzc2FnZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2csIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZywgbWFpbGJveC5NZXNzYWdlKQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBfc2FtcGxlX2hlYWRlcnMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8odmFsdWUgaW4gbXNnLmdldF9hbGwoa2V5KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5pc19tdWx0aXBhcnQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihtc2cuZ2V0X3BheWxvYWQoKSkgPT0gbGVuKF9zYW1wbGVfcGF5bG9hZHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2YWx1ZSwgbXNnLmdldF9hbGwoa2V5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmdldF9wYXlsb2FkKCkpLCBsZW4oX3NhbXBsZV9wYXlsb2FkcykpCiAgICAgICAgIGZvciBpLCBwYXlsb2FkIGluIGVudW1lcmF0ZShfc2FtcGxlX3BheWxvYWRzKToKICAgICAgICAgICAgIHBhcnQgPSBtc2cuZ2V0X3BheWxvYWQoaSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHBhcnQsIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzaW5zdGFuY2UocGFydCwgbWFpbGJveC5NZXNzYWdlKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhwYXJ0LmdldF9wYXlsb2FkKCkgPT0gcGF5bG9hZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYXJ0LCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UocGFydCwgbWFpbGJveC5NZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9wYXlsb2FkKCksIHBheWxvYWQpCiAKICAgICBkZWYgX2RlbGV0ZV9yZWN1cnNpdmVseShzZWxmLCB0YXJnZXQpOgogICAgICAgICAjIERlbGV0ZSBhIGZpbGUgb3IgZGVsZXRlIGEgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5CkBAIC02NiwxNiArNjYsMTYgQEAKICAgICAgICAgIyBBZGQgY29waWVzIG9mIGEgc2FtcGxlIG1lc3NhZ2UKICAgICAgICAga2V5cyA9IFtdCiAgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDEpCiAgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQobWFpbGJveC5NZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkpKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMikKICAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKF9zYW1wbGVfbWVzc2FnZSkpKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMykKICAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChTdHJpbmdJTy5TdHJpbmdJTyhfc2FtcGxlX21lc3NhZ2UpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDQpCiAgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoX3NhbXBsZV9tZXNzYWdlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXlzWzBdKSA9PSBzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5c1swXSksIHNlbGYuX3RlbXBsYXRlICUgMCkKICAgICAgICAgZm9yIGkgaW4gKDEsIDIsIDMsIDQpOgogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKHNlbGYuX2JveFtrZXlzW2ldXSkKIApAQCAtOTEsMjMgKzkxLDIzIEBACiAgICAgICAgICMgKFVzZWQgYnkgdGVzdF9yZW1vdmUoKSBhbmQgdGVzdF9kZWxpdGVtKCkuKQogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCiAgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDIpCiAgICAgICAgIG1ldGhvZChrZXkwKQogICAgICAgICBsID0gbGVuKHNlbGYuX2JveCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGwgPT0gMSwgImFjdHVhbCBsOiAlcyIgJSBsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFtrZXkwXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogbWV0aG9kKGtleTApKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSkgPT0gc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLCBzZWxmLl90ZW1wbGF0ZSAlIDEpCiAgICAgICAgIGtleTIgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDIpCiAgICAgICAgIG1ldGhvZChrZXkyKQogICAgICAgICBsID0gbGVuKHNlbGYuX2JveCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGwgPT0gMSwgImFjdHVhbCBsOiAlcyIgJSBsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFtrZXkyXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogbWV0aG9kKGtleTIpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSkgPT0gc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLCBzZWxmLl90ZW1wbGF0ZSAlIDEpCiAgICAgICAgIG1ldGhvZChrZXkxKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94W2tleTFdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBtZXRob2Qoa2V5MSkpCiAKQEAgLTExNSwzNSArMTE1LDM1IEBACiAgICAgICAgICMgRGlzY2FyZCBtZXNzYWdlcwogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCiAgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDIpCiAgICAgICAgIHNlbGYuX2JveC5kaXNjYXJkKGtleTApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hba2V5MF0pCiAgICAgICAgIHNlbGYuX2JveC5kaXNjYXJkKGtleTApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hba2V5MF0pCiAKICAgICBkZWYgdGVzdF9nZXQoc2VsZik6CiAgICAgICAgICMgUmV0cmlldmUgbWVzc2FnZXMgdXNpbmcgZ2V0KCkKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQogICAgICAgICBtc2cgPSBzZWxmLl9ib3guZ2V0KGtleTApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dbJ2Zyb20nXSA9PSAnZm9vJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfcGF5bG9hZCgpID09ICcwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXQoJ2ZvbycpIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0KCdmb28nLCBGYWxzZSkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWydmcm9tJ10sICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgpLCAnMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5fYm94LmdldCgnZm9vJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5fYm94LmdldCgnZm9vJywgRmFsc2UpKQogICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQogICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgsIGZhY3Rvcnk9cmZjODIyLk1lc3NhZ2UpCiAgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKICAgICAgICAgbXNnID0gc2VsZi5fYm94LmdldChrZXkxKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnWydmcm9tJ10gPT0gJ2ZvbycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZnAucmVhZCgpID09ICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbJ2Zyb20nXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmZwLnJlYWQoKSwgJzEnKQogCiAgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKICAgICAgICAgIyBSZXRyaWV2ZSBtZXNzYWdlIHVzaW5nIF9fZ2V0aXRlbV9fKCkKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQogICAgICAgICBtc2cgPSBzZWxmLl9ib3hba2V5MF0KLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZ1snZnJvbSddID09ICdmb28nKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9wYXlsb2FkKCkgPT0gJzAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1snZnJvbSddLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoKSwgJzAnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hbJ2ZvbyddKQogICAgICAgICBzZWxmLl9ib3guZGlzY2FyZChrZXkwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hba2V5MF0pCkBAIC0xNTMsMjYgKzE1MywyNiBAQAogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCiAgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgbXNnMCA9IHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkwKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShtc2cwLCBtYWlsYm94Lk1lc3NhZ2UpKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnMFsnZnJvbSddID09ICdmb28nKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnMC5nZXRfcGF5bG9hZCgpID09ICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZzAsIG1haWxib3guTWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cwWydmcm9tJ10sICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzAuZ2V0X3BheWxvYWQoKSwgJzAnKQogICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUoc2VsZi5fYm94LmdldF9tZXNzYWdlKGtleTEpKQogCiAgICAgZGVmIHRlc3RfZ2V0X3N0cmluZyhzZWxmKToKICAgICAgICAgIyBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBvZiBtZXNzYWdlcwogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCiAgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApID09IHNlbGYuX3RlbXBsYXRlICUgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpID09IF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSwgc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLCBfc2FtcGxlX21lc3NhZ2UpCiAKICAgICBkZWYgdGVzdF9nZXRfZmlsZShzZWxmKToKICAgICAgICAgIyBHZXQgZmlsZSByZXByZXNlbnRhdGlvbnMgb2YgbWVzc2FnZXMKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChfc2FtcGxlX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X2ZpbGUoa2V5MCkucmVhZCgpLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgID09IHNlbGYuX3RlbXBsYXRlICUgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfZmlsZShrZXkxKS5yZWFkKCkucmVwbGFjZShvcy5saW5lc2VwLCAnXG4nKQotICAgICAgICAgICAgICAgICAgICAgPT0gX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfZmlsZShrZXkwKS5yZWFkKCkucmVwbGFjZShvcy5saW5lc2VwLCAnXG4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9maWxlKGtleTEpLnJlYWQoKS5yZXBsYWNlKG9zLmxpbmVzZXAsICdcbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9zYW1wbGVfbWVzc2FnZSkKIAogICAgIGRlZiB0ZXN0X2l0ZXJrZXlzKHNlbGYpOgogICAgICAgICAjIEdldCBrZXlzIHVzaW5nIGl0ZXJrZXlzKCkKQEAgLTIyMiwxNSArMjIyLDE2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuZWRfa2V5cy5hcHBlbmQoa2V5KQogICAgICAgICAgICAgICAgIHJldHVybmVkX3ZhbHVlcy5hcHBlbmQodmFsdWUpCiAgICAgICAgIGlmIGRvX2tleXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8obGVuKGtleXMpID09IGxlbihyZXR1cm5lZF9rZXlzKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzZXQoa2V5cykgPT0gc2V0KHJldHVybmVkX2tleXMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIGxlbihyZXR1cm5lZF9rZXlzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGtleXMpLCBzZXQocmV0dXJuZWRfa2V5cykpCiAgICAgICAgIGlmIGRvX3ZhbHVlczoKICAgICAgICAgICAgIGNvdW50ID0gMAogICAgICAgICAgICAgZm9yIHZhbHVlIGluIHJldHVybmVkX3ZhbHVlczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8odmFsdWVbJ2Zyb20nXSA9PSAnZm9vJykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaW50KHZhbHVlLmdldF9wYXlsb2FkKCkpIDwgcmVwZXRpdGlvbnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVsnZnJvbSddLCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KHZhbHVlLmdldF9wYXlsb2FkKCkpIDwgcmVwZXRpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZS5nZXRfcGF5bG9hZCgpLCByZXBldGl0aW9ucykpCiAgICAgICAgICAgICAgICAgY291bnQgKz0gMQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGxlbih2YWx1ZXMpID09IGNvdW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgY291bnQpCiAKICAgICBkZWYgdGVzdF9oYXNfa2V5KHNlbGYpOgogICAgICAgICAjIENoZWNrIGV4aXN0ZW5jZSBvZiBrZXlzIHVzaW5nIGhhc19rZXkoKQpAQCAtMjQyLDYxICsyNDMsNjEgQEAKIAogICAgIGRlZiBfdGVzdF9oYXNfa2V5X29yX2NvbnRhaW5zKHNlbGYsIG1ldGhvZCk6CiAgICAgICAgICMgKFVzZWQgYnkgdGVzdF9oYXNfa2V5KCkgYW5kIHRlc3RfY29udGFpbnMoKS4pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgbWV0aG9kKCdmb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2QoJ2ZvbycpKQogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtZXRob2Qoa2V5MCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgbWV0aG9kKCdmb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ldGhvZChrZXkwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2QoJ2ZvbycpKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtZXRob2Qoa2V5MSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtZXRob2Qoa2V5MCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgbWV0aG9kKCdmb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ldGhvZChrZXkxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ldGhvZChrZXkwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2QoJ2ZvbycpKQogICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgbWV0aG9kKGtleTApKQotICAgICAgICBzZWxmLmFzc2VydF8obWV0aG9kKGtleTEpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG1ldGhvZCgnZm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKGtleTApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kKGtleTEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGhvZCgnZm9vJykpCiAgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBtZXRob2Qoa2V5MSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgbWV0aG9kKGtleTApKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG1ldGhvZCgnZm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKGtleTEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGhvZChrZXkwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2QoJ2ZvbycpKQogCiAgICAgZGVmIHRlc3RfbGVuKHNlbGYsIHJlcGV0aXRpb25zPTEwKToKICAgICAgICAgIyBHZXQgbWVzc2FnZSBjb3VudAogICAgICAgICBrZXlzID0gW10KICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHJlcGV0aXRpb25zKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgaSkKICAgICAgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSBpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSBpICsgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksICBpICsgMSkKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHJlcGV0aXRpb25zKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSByZXBldGl0aW9ucyAtIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCByZXBldGl0aW9ucyAtIGkpCiAgICAgICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleXNbaV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gcmVwZXRpdGlvbnMgLSBpIC0gMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIHJlcGV0aXRpb25zIC0gaSAtIDEpCiAKICAgICBkZWYgdGVzdF9zZXRfaXRlbShzZWxmKToKICAgICAgICAgIyBNb2RpZnkgbWVzc2FnZXMgdXNpbmcgX19zZXRpdGVtX18oKQogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApID09IFwKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDAnKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAxJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpID09IFwKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDEnKQogICAgICAgICBzZWxmLl9ib3hba2V5MF0gPSBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDAnCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMCcpCiAgICAgICAgIHNlbGYuX2JveFtrZXkxXSA9IHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMScKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpID09IFwKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAxJykKICAgICAgICAgc2VsZi5fYm94W2tleTBdID0gX3NhbXBsZV9tZXNzYWdlCiAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3hba2V5MF0pCiAgICAgICAgIHNlbGYuX2JveFtrZXkxXSA9IHNlbGYuX2JveFtrZXkwXQogICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUoc2VsZi5fYm94W2tleTFdKQogICAgICAgICBzZWxmLl9ib3hba2V5MF0gPSBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJwotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDAnKQogICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUoc2VsZi5fYm94W2tleTFdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBzZWxmLl9ib3guX19zZXRpdGVtX18oJ2ZvbycsICdiYXInKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94Wydmb28nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDIpCiAKICAgICBkZWYgdGVzdF9jbGVhcihzZWxmLCBpdGVyYXRpb25zPTEwKToKICAgICAgICAgIyBSZW1vdmUgYWxsIG1lc3NhZ2VzIHVzaW5nIGNsZWFyKCkKQEAgLTMwNCwyOSArMzA1LDI5IEBACiAgICAgICAgIGZvciBpIGluIHhyYW5nZShpdGVyYXRpb25zKToKICAgICAgICAgICAgIHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSBpKQogICAgICAgICBmb3IgaSwga2V5IGluIGVudW1lcmF0ZShrZXlzKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpID09IHNlbGYuX3RlbXBsYXRlICUgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5KSwgc2VsZi5fdGVtcGxhdGUgJSBpKQogICAgICAgICBzZWxmLl9ib3guY2xlYXIoKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMCkKICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpKQogCiAgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgogICAgICAgICAjIEdldCBhbmQgcmVtb3ZlIGEgbWVzc2FnZSB1c2luZyBwb3AoKQogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkwIGluIHNlbGYuX2JveCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXkwLCBzZWxmLl9ib3gpCiAgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGtleTEgaW4gc2VsZi5fYm94KQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LnBvcChrZXkwKS5nZXRfcGF5bG9hZCgpID09ICcwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGtleTAgbm90IGluIHNlbGYuX2JveCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGtleTEgaW4gc2VsZi5fYm94KQorICAgICAgICBzZWxmLmFzc2VydEluKGtleTEsIHNlbGYuX2JveCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3gucG9wKGtleTApLmdldF9wYXlsb2FkKCksICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrZXkwLCBzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5MSwgc2VsZi5fYm94KQogICAgICAgICBrZXkyID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkyIGluIHNlbGYuX2JveCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5wb3Aoa2V5MikuZ2V0X3BheWxvYWQoKSA9PSAnMicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkyIG5vdCBpbiBzZWxmLl9ib3gpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkxIGluIHNlbGYuX2JveCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5wb3Aoa2V5MSkuZ2V0X3BheWxvYWQoKSA9PSAnMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkxIG5vdCBpbiBzZWxmLl9ib3gpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydEluKGtleTIsIHNlbGYuX2JveCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3gucG9wKGtleTIpLmdldF9wYXlsb2FkKCksICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrZXkyLCBzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5MSwgc2VsZi5fYm94KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5wb3Aoa2V5MSkuZ2V0X3BheWxvYWQoKSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtleTEsIHNlbGYuX2JveCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMCkKIAogICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZiwgaXRlcmF0aW9ucz0xMCk6CiAgICAgICAgICMgR2V0IGFuZCByZW1vdmUgYW4gYXJiaXRyYXJ5IChrZXksIG1lc3NhZ2UpIHVzaW5nIHBvcGl0ZW0oKQpAQCAtMzM2LDExICszMzcsMTEgQEAKICAgICAgICAgc2VlbiA9IFtdCiAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMCk6CiAgICAgICAgICAgICBrZXksIG1zZyA9IHNlbGYuX2JveC5wb3BpdGVtKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkgaW4ga2V5cykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkgbm90IGluIHNlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwga2V5cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa2V5LCBzZWVuKQogICAgICAgICAgICAgc2Vlbi5hcHBlbmQoa2V5KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGludChtc2cuZ2V0X3BheWxvYWQoKSkgPT0ga2V5cy5pbmRleChrZXkpKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KG1zZy5nZXRfcGF5bG9hZCgpKSwga2V5cy5pbmRleChrZXkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAwKQogICAgICAgICBmb3Iga2V5IGluIGtleXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hba2V5XSkKIApAQCAtMzUxLDMyICszNTIsMzIgQEAKICAgICAgICAga2V5MiA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMicpCiAgICAgICAgIHNlbGYuX2JveC51cGRhdGUoe2tleTA6IHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTI6IF9zYW1wbGVfbWVzc2FnZX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAzKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSA9PQotICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAxJykKICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKHNlbGYuX2JveFtrZXkyXSkKICAgICAgICAgc2VsZi5fYm94LnVwZGF0ZShbKGtleTIsIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMicpLAogICAgICAgICAgICAgICAgICAgICAoa2V5MSwgc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAxJyksCiAgICAgICAgICAgICAgICAgICAgIChrZXkwLCBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJyldKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApID09Ci0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpID09Ci0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDEnKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MikgPT0KLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDInKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBzZWxmLl9ib3gudXBkYXRlKHsnZm9vJzogJ2JhcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkwOiBzZWxmLl90ZW1wbGF0ZSAlICJjaGFuZ2VkIDAifSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAzKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgImNoYW5nZWQgMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSA9PQotICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAiY2hhbmdlZCAxIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTIpID09Ci0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICJjaGFuZ2VkIDIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgImNoYW5nZWQgMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAiY2hhbmdlZCAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICJjaGFuZ2VkIDIiKQogCiAgICAgZGVmIHRlc3RfZmx1c2goc2VsZik6CiAgICAgICAgICMgV3JpdGUgY2hhbmdlcyB0byBkaXNrCkBAIC0zODQsMTEgKzM4NSwxMSBAQAogCiAgICAgZGVmIHRlc3RfbG9ja191bmxvY2soc2VsZik6CiAgICAgICAgICMgTG9jayBhbmQgdW5sb2NrIHRoZSBtYWlsYm94Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5fZ2V0X2xvY2tfcGF0aCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLl9nZXRfbG9ja19wYXRoKCkpKQogICAgICAgICBzZWxmLl9ib3gubG9jaygpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhzZWxmLl9nZXRfbG9ja19wYXRoKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5fZ2V0X2xvY2tfcGF0aCgpKSkKICAgICAgICAgc2VsZi5fYm94LnVubG9jaygpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5fZ2V0X2xvY2tfcGF0aCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLl9nZXRfbG9ja19wYXRoKCkpKQogCiAgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CiAgICAgICAgICMgQ2xvc2UgbWFpbGJveCBhbmQgZmx1c2ggY2hhbmdlcyB0byBkaXNrCkBAIC00MDQsOSArNDA1LDkgQEAKICAgICAgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCiAgICAgICAgIHNlbGYuX2JveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCkKICAgICAgICAga2V5cyA9IHNlbGYuX2JveC5rZXlzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihrZXlzKSA9PSAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrZXlzKSwgMykKICAgICAgICAgZm9yIGtleSBpbiBrZXlzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleSkgaW4gY29udGVudHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleSksIGNvbnRlbnRzKQogCiAgICAgZGVmIHRlc3RfZHVtcF9tZXNzYWdlKHNlbGYpOgogICAgICAgICAjIFdyaXRlIG1lc3NhZ2UgcmVwcmVzZW50YXRpb25zIHRvIGRpc2sKQEAgLTQxNCw4ICs0MTUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgIF9zYW1wbGVfbWVzc2FnZSwgU3RyaW5nSU8uU3RyaW5nSU8oX3NhbXBsZV9tZXNzYWdlKSk6CiAgICAgICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgICAgICBzZWxmLl9ib3guX2R1bXBfbWVzc2FnZShpbnB1dCwgb3V0cHV0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG91dHB1dC5nZXR2YWx1ZSgpID09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgX3NhbXBsZV9tZXNzYWdlLnJlcGxhY2UoJ1xuJywgb3MubGluZXNlcCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2FtcGxlX21lc3NhZ2UucmVwbGFjZSgnXG4nLCBvcy5saW5lc2VwKSkKICAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogc2VsZi5fYm94Ll9kdW1wX21lc3NhZ2UoTm9uZSwgb3V0cHV0KSkKQEAgLTQ3NSw3ICs0NzYsNyBAQAogICAgICAgICBtc2cuc2V0X3N1YmRpcignY3VyJykKICAgICAgICAgbXNnLnNldF9pbmZvKCdmb28nKQogICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKG1zZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnY3VyJywgJyVzJXNmb28nICUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnY3VyJywgJyVzJXNmb28nICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5LCBzZWxmLl9ib3guY29sb24pKSkpCiAKICAgICBkZWYgdGVzdF9nZXRfTU0oc2VsZik6CkBAIC00ODUsOSArNDg2LDkgQEAKICAgICAgICAgbXNnLnNldF9mbGFncygnUkYnKQogICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKG1zZykKICAgICAgICAgbXNnX3JldHVybmVkID0gc2VsZi5fYm94LmdldF9tZXNzYWdlKGtleSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UobXNnX3JldHVybmVkLCBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCkgPT0gJ2N1cicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dfcmV0dXJuZWQuZ2V0X2ZsYWdzKCkgPT0gJ0ZSJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZ19yZXR1cm5lZCwgbWFpbGJveC5NYWlsZGlyTWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X3N1YmRpcigpLCAnY3VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X2ZsYWdzKCksICdGUicpCiAKICAgICBkZWYgdGVzdF9zZXRfTU0oc2VsZik6CiAgICAgICAgICMgU2V0IHdpdGggYSBNYWlsZGlyTWVzc2FnZSBpbnN0YW5jZQpAQCAtNDk1LDIyICs0OTYsMjIgQEAKICAgICAgICAgbXNnMC5zZXRfZmxhZ3MoJ1RQJykKICAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChtc2cwKQogICAgICAgICBtc2dfcmV0dXJuZWQgPSBzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5KQotICAgICAgICBzZWxmLmFzc2VydF8obXNnX3JldHVybmVkLmdldF9zdWJkaXIoKSA9PSAnbmV3JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZ19yZXR1cm5lZC5nZXRfZmxhZ3MoKSA9PSAnUFQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfZmxhZ3MoKSwgJ1BUJykKICAgICAgICAgbXNnMSA9IG1haWxib3guTWFpbGRpck1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAxKQogICAgICAgICBzZWxmLl9ib3hba2V5XSA9IG1zZzEKICAgICAgICAgbXNnX3JldHVybmVkID0gc2VsZi5fYm94LmdldF9tZXNzYWdlKGtleSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCkgPT0gJ25ldycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dfcmV0dXJuZWQuZ2V0X2ZsYWdzKCkgPT0gJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dfcmV0dXJuZWQuZ2V0X3BheWxvYWQoKSA9PSAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9zdWJkaXIoKSwgJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9mbGFncygpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X3BheWxvYWQoKSwgJzEnKQogICAgICAgICBtc2cyID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDIpCiAgICAgICAgIG1zZzIuc2V0X2luZm8oJzIsUycpCiAgICAgICAgIHNlbGYuX2JveFtrZXldID0gbXNnMgogICAgICAgICBzZWxmLl9ib3hba2V5XSA9IHNlbGYuX3RlbXBsYXRlICUgMwogICAgICAgICBtc2dfcmV0dXJuZWQgPSBzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5KQotICAgICAgICBzZWxmLmFzc2VydF8obXNnX3JldHVybmVkLmdldF9zdWJkaXIoKSA9PSAnbmV3JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZ19yZXR1cm5lZC5nZXRfZmxhZ3MoKSA9PSAnUycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dfcmV0dXJuZWQuZ2V0X3BheWxvYWQoKSA9PSAnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9zdWJkaXIoKSwgJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9mbGFncygpLCAnUycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9wYXlsb2FkKCksICczJykKIAogICAgIGRlZiB0ZXN0X2NvbnNpc3RlbnRfZmFjdG9yeShzZWxmKToKICAgICAgICAgIyBBZGQgYSBtZXNzYWdlLgpAQCAtNTI1LDcgKzUyNiw3IEBACiAgICAgICAgIGJveCA9IG1haWxib3guTWFpbGRpcihzZWxmLl9wYXRoLCBmYWN0b3J5PUZha2VNZXNzYWdlKQogICAgICAgICBib3guY29sb24gPSBzZWxmLl9ib3guY29sb24KICAgICAgICAgbXNnMiA9IGJveC5nZXRfbWVzc2FnZShrZXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG1zZzIsIEZha2VNZXNzYWdlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZzIsIEZha2VNZXNzYWdlKQogCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV9uZXcoc2VsZik6CiAgICAgICAgICMgSW5pdGlhbGl6ZSBhIG5vbi1leGlzdGVudCBtYWlsYm94CkBAIC01NTMsNjUgKzU1NCw2MyBAQAogICAgICAgICBmb3Igc3ViZGlyIGluICcnLCAndG1wJywgJ25ldycsICdjdXInOgogICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJkaXIpCiAgICAgICAgICAgICBtb2RlID0gb3Muc3RhdChwYXRoKVtzdGF0LlNUX01PREVdCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oc3RhdC5TX0lTRElSKG1vZGUpLCAiTm90IGEgZGlyZWN0b3J5OiAnJXMnIiAlIHBhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdC5TX0lTRElSKG1vZGUpLCAiTm90IGEgZGlyZWN0b3J5OiAnJXMnIiAlIHBhdGgpCiAKICAgICBkZWYgdGVzdF9saXN0X2ZvbGRlcnMoc2VsZik6CiAgICAgICAgICMgTGlzdCBmb2xkZXJzCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCdvbmUnKQogICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcigndHdvJykKICAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ3RocmVlJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PQotICAgICAgICAgICAgICAgICAgICAgc2V0KCgnb25lJywgJ3R3bycsICd0aHJlZScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoKCdvbmUnLCAndHdvJywgJ3RocmVlJykpKQogCiAgICAgZGVmIHRlc3RfZ2V0X2ZvbGRlcihzZWxmKToKICAgICAgICAgIyBPcGVuIGZvbGRlcnMKICAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ2Zvby5iYXInKQogICAgICAgICBmb2xkZXIwID0gc2VsZi5fYm94LmdldF9mb2xkZXIoJ2Zvby5iYXInKQogICAgICAgICBmb2xkZXIwLmFkZChzZWxmLl90ZW1wbGF0ZSAlICdiYXInKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJy5mb28uYmFyJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJy5mb28uYmFyJykpKQogICAgICAgICBmb2xkZXIxID0gc2VsZi5fYm94LmdldF9mb2xkZXIoJ2Zvby5iYXInKQotICAgICAgICBzZWxmLmFzc2VydF8oZm9sZGVyMS5nZXRfc3RyaW5nKGZvbGRlcjEua2V5cygpWzBdKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbGRlcjEuZ2V0X3N0cmluZyhmb2xkZXIxLmtleXMoKVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnYmFyJykKIAogICAgIGRlZiB0ZXN0X2FkZF9hbmRfcmVtb3ZlX2ZvbGRlcnMoc2VsZik6CiAgICAgICAgICMgRGVsZXRlIGZvbGRlcnMKICAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ29uZScpCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0d28nKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IHNldCgoJ29uZScsICd0d28nKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIHNldCgoJ29uZScsICd0d28nKSkpCiAgICAgICAgIHNlbGYuX2JveC5yZW1vdmVfZm9sZGVyKCdvbmUnKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IHNldCgoJ3R3bycsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIHNldCgoJ3R3bycsKSkpCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0aHJlZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSAyKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gc2V0KCgndHdvJywgJ3RocmVlJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCBzZXQoKCd0d28nLCAndGhyZWUnKSkpCiAgICAgICAgIHNlbGYuX2JveC5yZW1vdmVfZm9sZGVyKCd0aHJlZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSAxKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gc2V0KCgndHdvJywpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywpKSkKICAgICAgICAgc2VsZi5fYm94LnJlbW92ZV9mb2xkZXIoJ3R3bycpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSAwKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSwgW10pCiAKICAgICBkZWYgdGVzdF9jbGVhbihzZWxmKToKICAgICAgICAgIyBSZW1vdmUgb2xkIGZpbGVzIGZyb20gJ3RtcCcKICAgICAgICAgZm9vX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ3RtcCcsICdmb28nKQogICAgICAgICBiYXJfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAndG1wJywgJ2JhcicpCi0gICAgICAgIGYgPSBvcGVuKGZvb19wYXRoLCAndycpCi0gICAgICAgIGYud3JpdGUoIkAiKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZiA9IG9wZW4oYmFyX3BhdGgsICd3JykKLSAgICAgICAgZi53cml0ZSgiQCIpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oZm9vX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIkAiKQorICAgICAgICB3aXRoIG9wZW4oYmFyX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIkAiKQogICAgICAgICBzZWxmLl9ib3guY2xlYW4oKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMoZm9vX3BhdGgpKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMoYmFyX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm9vX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYmFyX3BhdGgpKQogICAgICAgICBmb29fc3RhdCA9IG9zLnN0YXQoZm9vX3BhdGgpCiAgICAgICAgIG9zLnV0aW1lKGZvb19wYXRoLCAodGltZS50aW1lKCkgLSAxMjk2MDAgLSAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvb19zdGF0LnN0X210aW1lKSkKICAgICAgICAgc2VsZi5fYm94LmNsZWFuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBvcy5wYXRoLmV4aXN0cyhmb29fcGF0aCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhiYXJfcGF0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZm9vX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYmFyX3BhdGgpKQogCiAgICAgZGVmIHRlc3RfY3JlYXRlX3RtcChzZWxmLCByZXBldGl0aW9ucz0xMCk6CiAgICAgICAgICMgQ3JlYXRlIGZpbGVzIGluIHRtcCBkaXJlY3RvcnkKQEAgLTYzMSw2MSArNjMwLDY0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRtcCIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGUgaW4gd3JvbmcgbG9jYXRpb246ICclcyciICUgaGVhZCkKICAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5tYXRjaCh0YWlsKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGNoIGlzIG5vdCBOb25lLCAiSW52YWxpZCBmaWxlIG5hbWU6ICclcyciICUgdGFpbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaCBpcyBub3QgTm9uZSwgIkludmFsaWQgZmlsZSBuYW1lOiAnJXMnIiAlIHRhaWwpCiAgICAgICAgICAgICBncm91cHMgPSBtYXRjaC5ncm91cHMoKQogICAgICAgICAgICAgaWYgcHJldmlvdXNfZ3JvdXBzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpbnQoZ3JvdXBzWzBdID49IHByZXZpb3VzX2dyb3Vwc1swXSksCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChncm91cHNbMF0gPj0gcHJldmlvdXNfZ3JvdXBzWzBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbi1tb25vdG9uaWMgc2Vjb25kczogJyVzJyBiZWZvcmUgJyVzJyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJldmlvdXNfZ3JvdXBzWzBdLCBncm91cHNbMF0pKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpbnQoZ3JvdXBzWzFdID49IHByZXZpb3VzX2dyb3Vwc1sxXSkgb3IKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KGdyb3Vwc1sxXSA+PSBwcmV2aW91c19ncm91cHNbMV0pIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1swXSAhPSBncm91cHNbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb24tbW9ub3RvbmljIG1pbGxpc2Vjb25kczogJyVzJyBiZWZvcmUgJyVzJyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJldmlvdXNfZ3JvdXBzWzFdLCBncm91cHNbMV0pKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpbnQoZ3JvdXBzWzJdKSA9PSBwaWQsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChncm91cHNbMl0pID09IHBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3MgSUQgbWlzbWF0Y2g6ICclcycgc2hvdWxkIGJlICclcyciICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyb3Vwc1syXSwgcGlkKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaW50KGdyb3Vwc1szXSkgPT0gaW50KHByZXZpb3VzX2dyb3Vwc1szXSkgKyAxLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQoZ3JvdXBzWzNdKSA9PSBpbnQocHJldmlvdXNfZ3JvdXBzWzNdKSArIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb24tc2VxdWVudGlhbCBjb3VudGVyOiAnJXMnIGJlZm9yZSAnJXMnIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2aW91c19ncm91cHNbM10sIGdyb3Vwc1szXSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGdyb3Vwc1s0XSA9PSBob3N0bmFtZSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JvdXBzWzRdID09IGhvc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSG9zdCBuYW1lIG1pc21hdGNoOiAnJXMnIHNob3VsZCBiZSAnJXMnIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncm91cHNbNF0sIGhvc3RuYW1lKSkKICAgICAgICAgICAgIHByZXZpb3VzX2dyb3VwcyA9IGdyb3VwcwogICAgICAgICAgICAgdG1wX2ZpbGUud3JpdGUoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICAgICAgdG1wX2ZpbGUuc2VlaygwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHRtcF9maWxlLnJlYWQoKSA9PSBfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodG1wX2ZpbGUucmVhZCgpID09IF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgICAgIHRtcF9maWxlLmNsb3NlKCkKICAgICAgICAgZmlsZV9jb3VudCA9IGxlbihvcy5saXN0ZGlyKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAidG1wIikpKQotICAgICAgICBzZWxmLmFzc2VydF8oZmlsZV9jb3VudCA9PSByZXBldGl0aW9ucywKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVfY291bnQgPT0gcmVwZXRpdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAiV3JvbmcgZmlsZSBjb3VudDogJyVzJyBzaG91bGQgYmUgJyVzJyIgJQogICAgICAgICAgICAgICAgICAgICAgKGZpbGVfY291bnQsIHJlcGV0aXRpb25zKSkKIAogICAgIGRlZiB0ZXN0X3JlZnJlc2goc2VsZik6CiAgICAgICAgICMgVXBkYXRlIHRoZSB0YWJsZSBvZiBjb250ZW50cwotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94Ll90b2MgPT0ge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHt9KQogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCiAgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5fdG9jID09IHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7fSkKICAgICAgICAgc2VsZi5fYm94Ll9yZWZyZXNoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5fdG9jID09IHtrZXkwOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTE6IG9zLnBhdGguam9pbignbmV3Jywga2V5MSl9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7a2V5MDogb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTE6IG9zLnBhdGguam9pbignbmV3Jywga2V5MSl9KQogICAgICAgICBrZXkyID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guX3RvYyA9PSB7a2V5MDogb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkxOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTEpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guX3RvYywge2tleTA6IG9zLnBhdGguam9pbignbmV3Jywga2V5MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkxOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTEpfSkKICAgICAgICAgc2VsZi5fYm94Ll9yZWZyZXNoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5fdG9jID09IHtrZXkwOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTE6IG9zLnBhdGguam9pbignbmV3Jywga2V5MSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Mjogb3MucGF0aC5qb2luKCduZXcnLCBrZXkyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHtrZXkwOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5MTogb3MucGF0aC5qb2luKCduZXcnLCBrZXkxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTI6IG9zLnBhdGguam9pbignbmV3Jywga2V5Mil9KQogCiAgICAgZGVmIHRlc3RfbG9va3VwKHNlbGYpOgogICAgICAgICAjIExvb2sgdXAgbWVzc2FnZSBzdWJwYXRocyBpbiB0aGUgVE9DCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveC5fbG9va3VwKCdmb28nKSkKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94Ll9sb29rdXAoa2V5MCkgPT0gb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guX2xvb2t1cChrZXkwKSwgb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKSkKICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnbmV3Jywga2V5MCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guX3RvYyA9PSB7a2V5MDogb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHtrZXkwOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTApfSkKKyAgICAgICAgIyBCZSBzdXJlIHRoYXQgdGhlIFRPQyBpcyByZWFkIGJhY2sgZnJvbSBkaXNrIChzZWUgaXNzdWUgIzY4OTYKKyAgICAgICAgIyBhYm91dCBiYWQgbXRpbWUgYmVoYXZpb3VyIG9uIHNvbWUgc3lzdGVtcykuCisgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveC5fbG9va3VwKGtleTApKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94Ll90b2MgPT0ge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHt9KQogCiAgICAgZGVmIHRlc3RfbG9ja191bmxvY2soc2VsZik6CiAgICAgICAgICMgTG9jayBhbmQgdW5sb2NrIHRoZSBtYWlsYm94LiBGb3IgTWFpbGRpciwgdGhpcyBkb2VzIG5vdGhpbmcuCkBAIC02OTksMTAgKzcwMSwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoLCBmYWN0b3J5PWR1bW15X2ZhY3RvcnkpCiAgICAgICAgIGZvbGRlciA9IGJveC5hZGRfZm9sZGVyKCdmb2xkZXIxJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZvbGRlci5fZmFjdG9yeSBpcyBkdW1teV9mYWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydElzKGZvbGRlci5fZmFjdG9yeSwgZHVtbXlfZmFjdG9yeSkKIAogICAgICAgICBmb2xkZXIxX2FsaWFzID0gYm94LmdldF9mb2xkZXIoJ2ZvbGRlcjEnKQotICAgICAgICBzZWxmLmFzc2VydF8oZm9sZGVyMV9hbGlhcy5fZmFjdG9yeSBpcyBkdW1teV9mYWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydElzKGZvbGRlcjFfYWxpYXMuX2ZhY3RvcnksIGR1bW15X2ZhY3RvcnkpCiAKICAgICBkZWYgdGVzdF9kaXJlY3RvcnlfaW5fZm9sZGVyIChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgbWFpbGJveGVzIHN0aWxsIHdvcmsgaWYgdGhlcmUncyBhIHN0cmF5IGV4dHJhIGRpcmVjdG9yeQpAQCAtNzI5LDcgKzczMSw3IEBACiAgICAgICAgICAgICBvcy51bWFzayhvcmlnX3VtYXNrKQogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHNlbGYuX2JveC5fbG9va3VwKGtleSkpCiAgICAgICAgIG1vZGUgPSBvcy5zdGF0KHBhdGgpLnN0X21vZGUKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1vZGUgJiAwMTExID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZSAmIDAxMTEsIDApCiAKICAgICBkZWYgdGVzdF9mb2xkZXJfZmlsZV9wZXJtcyhzZWxmKToKICAgICAgICAgIyBGcm9tIGJ1ZyAjMzIyOCwgd2Ugd2FudCB0byB2ZXJpZnkgdGhhdCB0aGUgZmlsZSBjcmVhdGVkIGluc2lkZSBhIE1haWxkaXIKQEAgLTc0OCw2ICs3NTAsMzcgQEAKICAgICAgICAgcGVybXMgPSBzdC5zdF9tb2RlCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKHBlcm1zICYgMDExMSkpICMgRXhlY3V0ZSBiaXRzIHNob3VsZCBhbGwgYmUgb2ZmLgogCisgICAgZGVmIHRlc3RfcmVyZWFkKHNlbGYpOgorICAgICAgICAjIFdhaXQgZm9yIDIgc2Vjb25kcworICAgICAgICB0aW1lLnNsZWVwKDIpCisKKyAgICAgICAgIyBJbml0aWFsbHksIHRoZSBtYWlsYm94IGhhcyBub3QgYmVlbiByZWFkIGFuZCB0aGUgdGltZSBpcyBudWxsLgorICAgICAgICBhc3NlcnQgZ2V0YXR0cihzZWxmLl9ib3gsICdfbGFzdF9yZWFkJywgTm9uZSkgaXMgTm9uZQorCisgICAgICAgICMgUmVmcmVzaCBtYWlsYm94OyB0aGUgdGltZXMgc2hvdWxkIG5vdyBiZSBzZXQgdG8gc29tZXRoaW5nLgorICAgICAgICBzZWxmLl9ib3guX3JlZnJlc2goKQorICAgICAgICBhc3NlcnQgZ2V0YXR0cihzZWxmLl9ib3gsICdfbGFzdF9yZWFkJywgTm9uZSkgaXMgbm90IE5vbmUKKworICAgICAgICAjIFRyeSBjYWxsaW5nIF9yZWZyZXNoKCkgYWdhaW47IHRoZSBtb2RpZmljYXRpb24gdGltZXMgc2hvdWxkbid0IGhhdmUKKyAgICAgICAgIyBjaGFuZ2VkLCBzbyB0aGUgbWFpbGJveCBzaG91bGQgbm90IGJlIHJlLXJlYWRpbmcuICBSZS1yZWFkaW5nIGNhdXNlcworICAgICAgICAjIHRoZSAuX3RvYyBhdHRyaWJ1dGUgdG8gYmUgYXNzaWduZWQgYSBuZXcgZGljdGlvbmFyeSBvYmplY3QsIHNvCisgICAgICAgICMgd2UnbGwgY2hlY2sgdGhhdCB0aGUgLl90b2MgYXR0cmlidXRlIGlzbid0IGEgZGlmZmVyZW50IG9iamVjdC4KKyAgICAgICAgb3JpZ190b2MgPSBzZWxmLl9ib3guX3RvYworICAgICAgICBkZWYgcmVmcmVzaGVkKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYm94Ll90b2MgaXMgbm90IG9yaWdfdG9jCisKKyAgICAgICAgdGltZS5zbGVlcCgxKSAgICAgICAgICMgV2FpdCAxc2VjIHRvIGVuc3VyZSB0aW1lLnRpbWUoKSdzIHZhbHVlIGNoYW5nZXMKKyAgICAgICAgc2VsZi5fYm94Ll9yZWZyZXNoKCkKKyAgICAgICAgYXNzZXJ0IG5vdCByZWZyZXNoZWQoKQorCisgICAgICAgICMgTm93LCB3cml0ZSBzb21ldGhpbmcgaW50byBjdXIgYW5kIHJlbW92ZSBpdC4gIFRoaXMgY2hhbmdlcworICAgICAgICAjIHRoZSBtdGltZSBhbmQgc2hvdWxkIGNhdXNlIGEgcmUtcmVhZC4KKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ2N1cicsICdzdHJheS1maWxlJykKKyAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3JykKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5fYm94Ll9yZWZyZXNoKCkKKyAgICAgICAgYXNzZXJ0IHJlZnJlc2hlZCgpCiAKIGNsYXNzIF9UZXN0TWJveE1NREYoVGVzdE1haWxib3gpOgogCkBAIC03NjAsOCArNzkzLDggQEAKICAgICBkZWYgdGVzdF9hZGRfZnJvbV9zdHJpbmcoc2VsZik6CiAgICAgICAgICMgQWRkIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggJ0Zyb20gJyB0byB0aGUgbWFpbGJveAogICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKCdGcm9tIGZvb0BiYXIgYmxhaFxuRnJvbTogZm9vXG5cbjAnKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94W2tleV0uZ2V0X2Zyb20oKSA9PSAnZm9vQGJhciBibGFoJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveFtrZXldLmdldF9wYXlsb2FkKCkgPT0gJzAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveFtrZXldLmdldF9mcm9tKCksICdmb29AYmFyIGJsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveFtrZXldLmdldF9wYXlsb2FkKCksICcwJykKIAogICAgIGRlZiB0ZXN0X2FkZF9tYm94X29yX21tZGZfbWVzc2FnZShzZWxmKToKICAgICAgICAgIyBBZGQgYW4gbWJveE1lc3NhZ2Ugb3IgTU1ERk1lc3NhZ2UKQEAgLTc3NywxMSArODEwLDExIEBACiAgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCiAgICAgICAgIG10aW1lID0gb3MucGF0aC5nZXRtdGltZShzZWxmLl9wYXRoKQogICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAzKQogICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2JveC5pdGVya2V5cygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleSkgaW4gdmFsdWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpLCB2YWx1ZXMpCiAgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtdGltZSA9PSBvcy5wYXRoLmdldG10aW1lKHNlbGYuX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCBvcy5wYXRoLmdldG10aW1lKHNlbGYuX3BhdGgpKQogCiAgICAgZGVmIHRlc3RfYWRkX2FuZF9jbG9zZShzZWxmKToKICAgICAgICAgIyBWZXJpZnlpbmcgdGhhdCBjbG9zaW5nIGEgbWFpbGJveCBkb2Vzbid0IGNoYW5nZSBhZGRlZCBpdGVtcwpAQCAtNzkzLDcgKzgyNiw4IEBACiAgICAgICAgIHNlbGYuX2JveC5fZmlsZS5zZWVrKDApCiAgICAgICAgIGNvbnRlbnRzID0gc2VsZi5fYm94Ll9maWxlLnJlYWQoKQogICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8oY29udGVudHMgPT0gb3BlbihzZWxmLl9wYXRoLCAncmInKS5yZWFkKCkpCisgICAgICAgIHdpdGggb3BlbihzZWxmLl9wYXRoLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgZi5yZWFkKCkpCiAgICAgICAgIHNlbGYuX2JveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCkKIAogICAgIGRlZiB0ZXN0X2xvY2tfY29uZmxpY3Qoc2VsZik6CkBAIC04MzQsNyArODY4LDcgQEAKICAgICAgICAgc2VsZi5fYm94LmxvY2soKQogICAgICAgICBrZXkyID0gc2VsZi5fYm94LmFkZChtc2cpCiAgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guX2xvY2tlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuX2JveC5fbG9ja2VkKQogICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQogCiAKQEAgLTg3NSw5ICs5MDksOSBAQAogICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcignb25lJykKICAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ3R3bycpCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0aHJlZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSAzKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHNldCgoJ29uZScsICd0d28nLCAndGhyZWUnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KCgnb25lJywgJ3R3bycsICd0aHJlZScpKSkKIAogICAgIGRlZiB0ZXN0X2dldF9mb2xkZXIoc2VsZik6CiAgICAgICAgICMgT3BlbiBmb2xkZXJzCkBAIC04ODgsNTQgKzkyMiw1NCBAQAogICAgICAgICBuZXdfZm9sZGVyID0gc2VsZi5fYm94LmFkZF9mb2xkZXIoJ2Zvby5iYXInKQogICAgICAgICBmb2xkZXIwID0gc2VsZi5fYm94LmdldF9mb2xkZXIoJ2Zvby5iYXInKQogICAgICAgICBmb2xkZXIwLmFkZChzZWxmLl90ZW1wbGF0ZSAlICdiYXInKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ2Zvby5iYXInKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnZm9vLmJhcicpKSkKICAgICAgICAgZm9sZGVyMSA9IHNlbGYuX2JveC5nZXRfZm9sZGVyKCdmb28uYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZvbGRlcjEuZ2V0X3N0cmluZyhmb2xkZXIxLmtleXMoKVswXSkgPT0gXAotICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb2xkZXIxLmdldF9zdHJpbmcoZm9sZGVyMS5rZXlzKClbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2JhcicpCiAKICAgICAgICAgIyBUZXN0IGZvciBidWcgIzE1Njk3OTA6IHZlcmlmeSB0aGF0IGZvbGRlcnMgcmV0dXJuZWQgYnkgLmdldF9mb2xkZXIoKQogICAgICAgICAjIHVzZSB0aGUgc2FtZSBmYWN0b3J5IGZ1bmN0aW9uLgotICAgICAgICBzZWxmLmFzc2VydF8obmV3X2ZvbGRlci5fZmFjdG9yeSBpcyBzZWxmLl9ib3guX2ZhY3RvcnkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhmb2xkZXIwLl9mYWN0b3J5IGlzIHNlbGYuX2JveC5fZmFjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhuZXdfZm9sZGVyLl9mYWN0b3J5LCBzZWxmLl9ib3guX2ZhY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9sZGVyMC5fZmFjdG9yeSwgc2VsZi5fYm94Ll9mYWN0b3J5KQogCiAgICAgZGVmIHRlc3RfYWRkX2FuZF9yZW1vdmVfZm9sZGVycyhzZWxmKToKICAgICAgICAgIyBEZWxldGUgZm9sZGVycwogICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcignb25lJykKICAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ3R3bycpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSAyKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gc2V0KCgnb25lJywgJ3R3bycpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgnb25lJywgJ3R3bycpKSkKICAgICAgICAgc2VsZi5fYm94LnJlbW92ZV9mb2xkZXIoJ29uZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSAxKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gc2V0KCgndHdvJywpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywgKSkpCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0aHJlZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSAyKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gc2V0KCgndHdvJywgJ3RocmVlJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCBzZXQoKCd0d28nLCAndGhyZWUnKSkpCiAgICAgICAgIHNlbGYuX2JveC5yZW1vdmVfZm9sZGVyKCd0aHJlZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSAxKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gc2V0KCgndHdvJywpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywgKSkpCiAgICAgICAgIHNlbGYuX2JveC5yZW1vdmVfZm9sZGVyKCd0d28nKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCksIFtdKQogCiAgICAgZGVmIHRlc3Rfc2VxdWVuY2VzKHNlbGYpOgogICAgICAgICAjIEdldCBhbmQgc2V0IHNlcXVlbmNlcwotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSA9PSB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLCB7fSkKICAgICAgICAgbXNnMCA9IG1haWxib3guTUhNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKICAgICAgICAgbXNnMC5hZGRfc2VxdWVuY2UoJ2ZvbycpCiAgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKG1zZzApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpID09IHsnZm9vJzpba2V5MF19KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksIHsnZm9vJzpba2V5MF19KQogICAgICAgICBtc2cxID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAxKQogICAgICAgICBtc2cxLnNldF9zZXF1ZW5jZXMoWydiYXInLCAncmVwbGllZCcsICdmb28nXSkKICAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQobXNnMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpba2V5MCwga2V5MV0sICdiYXInOltrZXkxXSwgJ3JlcGxpZWQnOltrZXkxXX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6W2tleTAsIGtleTFdLCAnYmFyJzpba2V5MV0sICdyZXBsaWVkJzpba2V5MV19KQogICAgICAgICBtc2cwLnNldF9zZXF1ZW5jZXMoWydmbGFnZ2VkJ10pCiAgICAgICAgIHNlbGYuX2JveFtrZXkwXSA9IG1zZzAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpba2V5MV0sICdiYXInOltrZXkxXSwgJ3JlcGxpZWQnOltrZXkxXSwKLSAgICAgICAgICAgICAgICAgICAgICAnZmxhZ2dlZCc6W2tleTBdfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpba2V5MV0sICdiYXInOltrZXkxXSwgJ3JlcGxpZWQnOltrZXkxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZsYWdnZWQnOltrZXkwXX0pCiAgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCkgPT0geydmbGFnZ2VkJzpba2V5MF19KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksIHsnZmxhZ2dlZCc6W2tleTBdfSkKIAogICAgIGRlZiB0ZXN0X2lzc3VlMjYyNShzZWxmKToKICAgICAgICAgbXNnMCA9IG1haWxib3guTUhNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKQEAgLTk0Myw2ICs5NzcsMTMgQEAKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQobXNnMCkKICAgICAgICAgcmVmbXNnMCA9IHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkwKQogCisgICAgZGVmIHRlc3RfaXNzdWU3NjI3KHNlbGYpOgorICAgICAgICBtc2cwID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChtc2cwKQorICAgICAgICBzZWxmLl9ib3gubG9jaygpCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MCkKKyAgICAgICAgc2VsZi5fYm94LnVubG9jaygpCisKICAgICBkZWYgdGVzdF9wYWNrKHNlbGYpOgogICAgICAgICAjIFBhY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYWlsYm94CiAgICAgICAgIG1zZzAgPSBtYWlsYm94Lk1ITWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCkBAIC05NTcsMTkgKzk5OCwxOSBAQAogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChtc2cxKQogICAgICAgICBrZXkyID0gc2VsZi5fYm94LmFkZChtc2cyKQogICAgICAgICBrZXkzID0gc2VsZi5fYm94LmFkZChtc2czKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSA9PQotICAgICAgICAgICAgICAgICAgICAgeydmb28nOltrZXkwLGtleTEsa2V5MixrZXkzXSwgJ3Vuc2Vlbic6W2tleTBdLAotICAgICAgICAgICAgICAgICAgICAgICdmbGFnZ2VkJzpba2V5Ml0sICdiYXInOltrZXkzXSwgJ3JlcGxpZWQnOltrZXkzXX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6W2tleTAsa2V5MSxrZXkyLGtleTNdLCAndW5zZWVuJzpba2V5MF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICdmbGFnZ2VkJzpba2V5Ml0sICdiYXInOltrZXkzXSwgJ3JlcGxpZWQnOltrZXkzXX0pCiAgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpba2V5MCxrZXkxLGtleTNdLCAndW5zZWVuJzpba2V5MF0sICdiYXInOltrZXkzXSwKLSAgICAgICAgICAgICAgICAgICAgICAncmVwbGllZCc6W2tleTNdfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpba2V5MCxrZXkxLGtleTNdLCAndW5zZWVuJzpba2V5MF0sICdiYXInOltrZXkzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcGxpZWQnOltrZXkzXX0pCiAgICAgICAgIHNlbGYuX2JveC5wYWNrKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5rZXlzKCkgPT0gWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5rZXlzKCksIFsxLCAyLCAzXSkKICAgICAgICAga2V5MCA9IGtleTAKICAgICAgICAga2V5MSA9IGtleTAgKyAxCiAgICAgICAgIGtleTIgPSBrZXkxICsgMQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSA9PQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksCiAgICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6WzEsIDIsIDNdLCAndW5zZWVuJzpbMV0sICdiYXInOlszXSwgJ3JlcGxpZWQnOlszXX0pCiAKICAgICAgICAgIyBUZXN0IGNhc2UgZm9yIHBhY2tpbmcgd2hpbGUgaG9sZGluZyB0aGUgbWFpbGJveCBsb2NrZWQuCkBAIC05ODMsOSArMTAyNCw5IEBACiAgICAgICAgIHNlbGYuX2JveC5sb2NrKCkKICAgICAgICAgc2VsZi5fYm94LnBhY2soKQogICAgICAgICBzZWxmLl9ib3gudW5sb2NrKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpbMSwgMiwgMywgNCwgNV0sCi0gICAgICAgICAgICAgICAgICAgICAgJ3Vuc2Vlbic6WzFdLCAnYmFyJzpbM10sICdyZXBsaWVkJzpbM119KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydmb28nOlsxLCAyLCAzLCA0LCA1XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Vuc2Vlbic6WzFdLCAnYmFyJzpbM10sICdyZXBsaWVkJzpbM119KQogCiAgICAgZGVmIF9nZXRfbG9ja19wYXRoKHNlbGYpOgogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICcubWhfc2VxdWVuY2VzLmxvY2snKQpAQCAtMTAwMywyMSArMTA0NCwyMSBAQAogCiAgICAgZGVmIHRlc3RfbGFiZWxzKHNlbGYpOgogICAgICAgICAjIEdldCBsYWJlbHMgZnJvbSB0aGUgbWFpbGJveAotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9sYWJlbHMoKSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X2xhYmVscygpLCBbXSkKICAgICAgICAgbXNnMCA9IG1haWxib3guQmFieWxNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKICAgICAgICAgbXNnMC5hZGRfbGFiZWwoJ2ZvbycpCiAgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKG1zZzApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X2xhYmVscygpID09IFsnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9sYWJlbHMoKSwgWydmb28nXSkKICAgICAgICAgbXNnMSA9IG1haWxib3guQmFieWxNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMSkKICAgICAgICAgbXNnMS5zZXRfbGFiZWxzKFsnYmFyJywgJ2Fuc3dlcmVkJywgJ2ZvbyddKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChtc2cxKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0KHNlbGYuX2JveC5nZXRfbGFiZWxzKCkpID09IHNldChbJ2ZvbycsICdiYXInXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5nZXRfbGFiZWxzKCkpLCBzZXQoWydmb28nLCAnYmFyJ10pKQogICAgICAgICBtc2cwLnNldF9sYWJlbHMoWydibGFoJywgJ2ZpbGVkJ10pCiAgICAgICAgIHNlbGYuX2JveFtrZXkwXSA9IG1zZzAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3guZ2V0X2xhYmVscygpKSA9PQotICAgICAgICAgICAgICAgICAgICAgc2V0KFsnZm9vJywgJ2JhcicsICdibGFoJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3guZ2V0X2xhYmVscygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoWydmb28nLCAnYmFyJywgJ2JsYWgnXSkpCiAgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3guZ2V0X2xhYmVscygpKSA9PSBzZXQoWydibGFoJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3guZ2V0X2xhYmVscygpKSwgc2V0KFsnYmxhaCddKSkKIAogCiBjbGFzcyBUZXN0TWVzc2FnZShUZXN0QmFzZSk6CkBAIC0xMDQ1LDI0ICsxMDg2LDIzIEBACiAKICAgICBkZWYgdGVzdF9pbml0aWFsaXplX3dpdGhfZmlsZShzZWxmKToKICAgICAgICAgIyBJbml0aWFsaXplIGJhc2VkIG9uIGNvbnRlbnRzIG9mIGZpbGUKLSAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3crJykKLSAgICAgICAgZi53cml0ZShfc2FtcGxlX21lc3NhZ2UpCi0gICAgICAgIGYuc2VlaygwKQotICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KGYpCi0gICAgICAgIHNlbGYuX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKG1zZykKLSAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihzZWxmLl9wYXRoLCAndysnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkoZikKKyAgICAgICAgICAgIHNlbGYuX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKG1zZykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCiAKICAgICBkZWYgdGVzdF9pbml0aWFsaXplX3dpdGhfbm90aGluZyhzZWxmKToKICAgICAgICAgIyBJbml0aWFsaXplIHdpdGhvdXQgYXJndW1lbnRzCiAgICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkoKQogICAgICAgICBzZWxmLl9wb3N0X2luaXRpYWxpemVfaG9vayhtc2cpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG1zZywgZW1haWwubWVzc2FnZS5NZXNzYWdlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UobXNnLCBtYWlsYm94Lk1lc3NhZ2UpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShtc2csIHNlbGYuX2ZhY3RvcnkpKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmtleXMoKSA9PSBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBtc2cuaXNfbXVsdGlwYXJ0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3BheWxvYWQoKSA9PSBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2csIG1haWxib3guTWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZywgc2VsZi5fZmFjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cua2V5cygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtc2cuaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKCksIE5vbmUpCiAKICAgICBkZWYgdGVzdF9pbml0aWFsaXplX2luY29ycmVjdGx5KHNlbGYpOgogICAgICAgICAjIEluaXRpYWxpemUgd2l0aCBpbnZhbGlkIGFyZ3VtZW50CkBAIC0xMDk3LDcyICsxMTM3LDczIEBACiAgICAgX2ZhY3RvcnkgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlCiAKICAgICBkZWYgX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKHNlbGYsIG1zZyk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuX3N1YmRpciA9PSAnbmV3JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5faW5mbyA9PSAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuX3N1YmRpciwgJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLl9pbmZvLCcnKQogCiAgICAgZGVmIHRlc3Rfc3ViZGlyKHNlbGYpOgogICAgICAgICAjIFVzZSBnZXRfc3ViZGlyKCkgYW5kIHNldF9zdWJkaXIoKQogICAgICAgICBtc2cgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc3ViZGlyKCkgPT0gJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ25ldycpCiAgICAgICAgIG1zZy5zZXRfc3ViZGlyKCdjdXInKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zdWJkaXIoKSA9PSAnY3VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnY3VyJykKICAgICAgICAgbXNnLnNldF9zdWJkaXIoJ25ldycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3N1YmRpcigpID09ICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IG1zZy5zZXRfc3ViZGlyKCd0bXAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc3ViZGlyKCkgPT0gJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ25ldycpCiAgICAgICAgIG1zZy5zZXRfc3ViZGlyKCduZXcnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zdWJkaXIoKSA9PSAnbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnbmV3JykKICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKIAogICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpOgogICAgICAgICAjIFVzZSBnZXRfZmxhZ3MoKSwgc2V0X2ZsYWdzKCksIGFkZF9mbGFnKCksIHJlbW92ZV9mbGFnKCkKICAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3N1YmRpcigpID09ICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ25ldycpCiAgICAgICAgIG1zZy5zZXRfZmxhZ3MoJ0YnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zdWJkaXIoKSA9PSAnbmV3JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZmxhZ3MoKSA9PSAnRicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnRicpCiAgICAgICAgIG1zZy5zZXRfZmxhZ3MoJ1NEVFAnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9mbGFncygpID09ICdEUFNUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdEUFNUJykKICAgICAgICAgbXNnLmFkZF9mbGFnKCdGVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJ0RGUFNUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdERlBTVCcpCiAgICAgICAgIG1zZy5yZW1vdmVfZmxhZygnVERSUCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJ0ZTJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc3ViZGlyKCkgPT0gJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnRlMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQogICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQogCiAgICAgZGVmIHRlc3RfZGF0ZShzZWxmKToKICAgICAgICAgIyBVc2UgZ2V0X2RhdGUoKSBhbmQgc2V0X2RhdGUoKQogICAgICAgICBtc2cgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGFicyhtc2cuZ2V0X2RhdGUoKSAtIHRpbWUudGltZSgpKSA8IDYwKQorICAgICAgICBkaWZmID0gbXNnLmdldF9kYXRlKCkgLSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJzKGRpZmYpIDwgNjAsIGRpZmYpCiAgICAgICAgIG1zZy5zZXRfZGF0ZSgwLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2RhdGUoKSA9PSAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9kYXRlKCksIDAuMCkKIAogICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CiAgICAgICAgICMgVXNlIGdldF9pbmZvKCkgYW5kIHNldF9pbmZvKCkKICAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2luZm8oKSA9PSAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2luZm8oKSwgJycpCiAgICAgICAgIG1zZy5zZXRfaW5mbygnMSxmb289YmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfaW5mbygpID09ICcxLGZvbz1iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnMSxmb289YmFyJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1zZy5zZXRfaW5mbyhOb25lKSkKICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKIAogICAgIGRlZiB0ZXN0X2luZm9fYW5kX2ZsYWdzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW50ZXJhY3Rpb24gb2YgaW5mbyBhbmQgZmxhZyBtZXRob2RzCiAgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9pbmZvKCkgPT0gJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9pbmZvKCksICcnKQogICAgICAgICBtc2cuc2V0X2ZsYWdzKCdTRicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJ0ZTJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfaW5mbygpID09ICcyLEZTJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdGUycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9pbmZvKCksICcyLEZTJykKICAgICAgICAgbXNnLnNldF9pbmZvKCcxLCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2luZm8oKSA9PSAnMSwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9pbmZvKCksICcxLCcpCiAgICAgICAgIG1zZy5yZW1vdmVfZmxhZygnUlBUJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZmxhZ3MoKSA9PSAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfaW5mbygpID09ICcxLCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2luZm8oKSwgJzEsJykKICAgICAgICAgbXNnLmFkZF9mbGFnKCdEJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZmxhZ3MoKSA9PSAnRCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2luZm8oKSA9PSAnMixEJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdEJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2luZm8oKSwgJzIsRCcpCiAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCiAKIApAQCAtMTE3OCwxNCArMTIxOSwxNCBAQAogICAgICAgICBtc2cgPSBtYWlsYm94Lk1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICBtc2cuc2V0X3VuaXhmcm9tKCdGcm9tIGZvb0BiYXIgYmxhaCcpCiAgICAgICAgIG1zZyA9IG1haWxib3gubWJveE1lc3NhZ2UobXNnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9mcm9tKCkgPT0gJ2Zvb0BiYXIgYmxhaCcsIG1zZy5nZXRfZnJvbSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZnJvbSgpLCAnZm9vQGJhciBibGFoJykKIAogICAgIGRlZiB0ZXN0X2Zyb20oc2VsZik6CiAgICAgICAgICMgR2V0IGFuZCBzZXQgIkZyb20gIiBsaW5lCiAgICAgICAgIG1zZyA9IG1haWxib3gubWJveE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICBzZWxmLl9jaGVja19mcm9tKG1zZykKICAgICAgICAgbXNnLnNldF9mcm9tKCdmb28gYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZnJvbSgpID09ICdmb28gYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2Zyb20oKSwgJ2ZvbyBiYXInKQogICAgICAgICBtc2cuc2V0X2Zyb20oJ2Zvb0BiYXInLCBUcnVlKQogICAgICAgICBzZWxmLl9jaGVja19mcm9tKG1zZywgJ2Zvb0BiYXInKQogICAgICAgICBtc2cuc2V0X2Zyb20oJ2JsYWhAdGVtcCcsIHRpbWUubG9jYWx0aW1lKCkpCkBAIC0xMTk0LDIzICsxMjM1LDIzIEBACiAgICAgZGVmIHRlc3RfZmxhZ3Moc2VsZik6CiAgICAgICAgICMgVXNlIGdldF9mbGFncygpLCBzZXRfZmxhZ3MoKSwgYWRkX2ZsYWcoKSwgcmVtb3ZlX2ZsYWcoKQogICAgICAgICBtc2cgPSBtYWlsYm94Lm1ib3hNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZmxhZ3MoKSA9PSAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICcnKQogICAgICAgICBtc2cuc2V0X2ZsYWdzKCdGJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZmxhZ3MoKSA9PSAnRicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnRicpCiAgICAgICAgIG1zZy5zZXRfZmxhZ3MoJ1hPRFInKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9mbGFncygpID09ICdST0RYJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdST0RYJykKICAgICAgICAgbXNnLmFkZF9mbGFnKCdGQScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJ1JPREZBWCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnUk9ERkFYJykKICAgICAgICAgbXNnLnJlbW92ZV9mbGFnKCdGRFhBJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZmxhZ3MoKSA9PSAnUk8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ1JPJykKICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKIAogICAgIGRlZiBfY2hlY2tfZnJvbShzZWxmLCBtc2csIHNlbmRlcj1Ob25lKToKICAgICAgICAgIyBDaGVjayBjb250ZW50cyBvZiAiRnJvbSAiIGxpbmUKICAgICAgICAgaWYgc2VuZGVyIGlzIE5vbmU6CiAgICAgICAgICAgICBzZW5kZXIgPSAiTUFJTEVSLURBRU1PTiIKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlLm1hdGNoKHNlbmRlciArIHIiIFx3ezN9IFx3ezN9IFtcZCBdXGQgW1xkIF1cZDpcZHsyfToiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlxkezJ9IFxkezR9IiwgbXNnLmdldF9mcm9tKCkpIGlzIG5vdCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goc2VuZGVyICsgciIgXHd7M30gXHd7M30gW1xkIF1cZCBbXGQgXVxkOlxkezJ9OiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXGR7Mn0gXGR7NH0iLCBtc2cuZ2V0X2Zyb20oKSkpCiAKIAogY2xhc3MgVGVzdE1ib3hNZXNzYWdlKF9UZXN0TWJveE1NREZNZXNzYWdlKToKQEAgLTEyMjMsMzAgKzEyNjQsMzAgQEAKICAgICBfZmFjdG9yeSA9IG1haWxib3guTUhNZXNzYWdlCiAKICAgICBkZWYgX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKHNlbGYsIG1zZyk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuX3NlcXVlbmNlcyA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuX3NlcXVlbmNlcywgW10pCiAKICAgICBkZWYgdGVzdF9zZXF1ZW5jZXMoc2VsZik6CiAgICAgICAgICMgR2V0LCBzZXQsIGpvaW4sIGFuZCBsZWF2ZSBzZXF1ZW5jZXMKICAgICAgICAgbXNnID0gbWFpbGJveC5NSE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zZXF1ZW5jZXMoKSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbXSkKICAgICAgICAgbXNnLnNldF9zZXF1ZW5jZXMoWydmb29iYXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc2VxdWVuY2VzKCkgPT0gWydmb29iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ2Zvb2JhciddKQogICAgICAgICBtc2cuc2V0X3NlcXVlbmNlcyhbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc2VxdWVuY2VzKCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgW10pCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ3Vuc2VlbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3NlcXVlbmNlcygpID09IFsndW5zZWVuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgWyd1bnNlZW4nXSkKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgnZmxhZ2dlZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3NlcXVlbmNlcygpID09IFsndW5zZWVuJywgJ2ZsYWdnZWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ3Vuc2VlbicsICdmbGFnZ2VkJ10pCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zZXF1ZW5jZXMoKSA9PSBbJ3Vuc2VlbicsICdmbGFnZ2VkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgWyd1bnNlZW4nLCAnZmxhZ2dlZCddKQogICAgICAgICBtc2cucmVtb3ZlX3NlcXVlbmNlKCd1bnNlZW4nKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zZXF1ZW5jZXMoKSA9PSBbJ2ZsYWdnZWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ2ZsYWdnZWQnXSkKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgnZm9vYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc2VxdWVuY2VzKCkgPT0gWydmbGFnZ2VkJywgJ2Zvb2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsnZmxhZ2dlZCcsICdmb29iYXInXSkKICAgICAgICAgbXNnLnJlbW92ZV9zZXF1ZW5jZSgncmVwbGllZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3NlcXVlbmNlcygpID09IFsnZmxhZ2dlZCcsICdmb29iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ2ZsYWdnZWQnLCAnZm9vYmFyJ10pCiAgICAgICAgIG1zZy5zZXRfc2VxdWVuY2VzKFsnZm9vYmFyJywgJ3JlcGxpZWQnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc2VxdWVuY2VzKCkgPT0gWydmb29iYXInLCAncmVwbGllZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsnZm9vYmFyJywgJ3JlcGxpZWQnXSkKIAogCiBjbGFzcyBUZXN0QmFieWxNZXNzYWdlKFRlc3RNZXNzYWdlKToKQEAgLTEyNTQsNTQgKzEyOTUsNTQgQEAKICAgICBfZmFjdG9yeSA9IG1haWxib3guQmFieWxNZXNzYWdlCiAKICAgICBkZWYgX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKHNlbGYsIG1zZyk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuX2xhYmVscyA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuX2xhYmVscywgW10pCiAKICAgICBkZWYgdGVzdF9sYWJlbHMoc2VsZik6CiAgICAgICAgICMgR2V0LCBzZXQsIGpvaW4sIGFuZCBsZWF2ZSBsYWJlbHMKICAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9sYWJlbHMoKSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbXSkKICAgICAgICAgbXNnLnNldF9sYWJlbHMoWydmb29iYXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfbGFiZWxzKCkgPT0gWydmb29iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbJ2Zvb2JhciddKQogICAgICAgICBtc2cuc2V0X2xhYmVscyhbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfbGFiZWxzKCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgW10pCiAgICAgICAgIG1zZy5hZGRfbGFiZWwoJ2ZpbGVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfbGFiZWxzKCkgPT0gWydmaWxlZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsnZmlsZWQnXSkKICAgICAgICAgbXNnLmFkZF9sYWJlbCgncmVzZW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfbGFiZWxzKCkgPT0gWydmaWxlZCcsICdyZXNlbnQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbJ2ZpbGVkJywgJ3Jlc2VudCddKQogICAgICAgICBtc2cuYWRkX2xhYmVsKCdyZXNlbnQnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9sYWJlbHMoKSA9PSBbJ2ZpbGVkJywgJ3Jlc2VudCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsnZmlsZWQnLCAncmVzZW50J10pCiAgICAgICAgIG1zZy5yZW1vdmVfbGFiZWwoJ2ZpbGVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfbGFiZWxzKCkgPT0gWydyZXNlbnQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbJ3Jlc2VudCddKQogICAgICAgICBtc2cuYWRkX2xhYmVsKCdmb29iYXInKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9sYWJlbHMoKSA9PSBbJ3Jlc2VudCcsICdmb29iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbJ3Jlc2VudCcsICdmb29iYXInXSkKICAgICAgICAgbXNnLnJlbW92ZV9sYWJlbCgndW5zZWVuJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfbGFiZWxzKCkgPT0gWydyZXNlbnQnLCAnZm9vYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydyZXNlbnQnLCAnZm9vYmFyJ10pCiAgICAgICAgIG1zZy5zZXRfbGFiZWxzKFsnZm9vYmFyJywgJ2Fuc3dlcmVkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2xhYmVscygpID09IFsnZm9vYmFyJywgJ2Fuc3dlcmVkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydmb29iYXInLCAnYW5zd2VyZWQnXSkKIAogICAgIGRlZiB0ZXN0X3Zpc2libGUoc2VsZik6CiAgICAgICAgICMgR2V0LCBzZXQsIGFuZCB1cGRhdGUgdmlzaWJsZSBoZWFkZXJzCiAgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgdmlzaWJsZSA9IG1zZy5nZXRfdmlzaWJsZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2aXNpYmxlLmtleXMoKSA9PSBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHZpc2libGUuZ2V0X3BheWxvYWQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpc2libGUua2V5cygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh2aXNpYmxlLmdldF9wYXlsb2FkKCksIE5vbmUpCiAgICAgICAgIHZpc2libGVbJ1VzZXItQWdlbnQnXSA9ICdGb29CYXIgMS4wJwogICAgICAgICB2aXNpYmxlWydYLVdoYXRldmVyJ10gPSAnQmxhaCcKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfdmlzaWJsZSgpLmtleXMoKSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3Zpc2libGUoKS5rZXlzKCksIFtdKQogICAgICAgICBtc2cuc2V0X3Zpc2libGUodmlzaWJsZSkKICAgICAgICAgdmlzaWJsZSA9IG1zZy5nZXRfdmlzaWJsZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2aXNpYmxlLmtleXMoKSA9PSBbJ1VzZXItQWdlbnQnLCAnWC1XaGF0ZXZlciddKQotICAgICAgICBzZWxmLmFzc2VydF8odmlzaWJsZVsnVXNlci1BZ2VudCddID09ICdGb29CYXIgMS4wJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHZpc2libGVbJ1gtV2hhdGV2ZXInXSA9PSAnQmxhaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2aXNpYmxlLmdldF9wYXlsb2FkKCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aXNpYmxlLmtleXMoKSwgWydVc2VyLUFnZW50JywgJ1gtV2hhdGV2ZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aXNpYmxlWydVc2VyLUFnZW50J10sICdGb29CYXIgMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aXNpYmxlWydYLVdoYXRldmVyJ10sICdCbGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh2aXNpYmxlLmdldF9wYXlsb2FkKCksIE5vbmUpCiAgICAgICAgIG1zZy51cGRhdGVfdmlzaWJsZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2aXNpYmxlLmtleXMoKSA9PSBbJ1VzZXItQWdlbnQnLCAnWC1XaGF0ZXZlciddKQotICAgICAgICBzZWxmLmFzc2VydF8odmlzaWJsZS5nZXRfcGF5bG9hZCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZS5rZXlzKCksIFsnVXNlci1BZ2VudCcsICdYLVdoYXRldmVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModmlzaWJsZS5nZXRfcGF5bG9hZCgpLCBOb25lKQogICAgICAgICB2aXNpYmxlID0gbXNnLmdldF92aXNpYmxlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHZpc2libGUua2V5cygpID09IFsnVXNlci1BZ2VudCcsICdEYXRlJywgJ0Zyb20nLCAnVG8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTdWJqZWN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZS5rZXlzKCksIFsnVXNlci1BZ2VudCcsICdEYXRlJywgJ0Zyb20nLCAnVG8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N1YmplY3QnXSkKICAgICAgICAgZm9yIGhlYWRlciBpbiAoJ1VzZXItQWdlbnQnLCAnRGF0ZScsICdGcm9tJywgJ1RvJywgJ1N1YmplY3QnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh2aXNpYmxlW2hlYWRlcl0gPT0gbXNnW2hlYWRlcl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpc2libGVbaGVhZGVyXSwgbXNnW2hlYWRlcl0pCiAKIAogY2xhc3MgVGVzdE1NREZNZXNzYWdlKF9UZXN0TWJveE1NREZNZXNzYWdlKToKQEAgLTEzNDQsOSArMTM4NSw5IEBACiAgICAgICAgIGRhdGUgPSBtc2dfbWFpbGRpci5nZXRfZGF0ZSgpCiAgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnX21haWxkaXIpCiAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJ0RGUFJTVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3N1YmRpcigpID09ICdjdXInKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9kYXRlKCkgPT0gZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdERlBSU1QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICdjdXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZGF0ZSgpLCBkYXRlKQogCiAgICAgZGVmIHRlc3RfbWFpbGRpcl90b19tYm94bW1kZihzZWxmKToKICAgICAgICAgIyBDb252ZXJ0IE1haWxkaXJNZXNzYWdlIHRvIG1ib3htZXNzYWdlIGFuZCBNTURGTWVzc2FnZQpAQCAtMTM1OCwxMSArMTM5OSwxMSBAQAogICAgICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKICAgICAgICAgICAgICAgICBtc2dfbWFpbGRpci5zZXRfZmxhZ3Moc2V0dGluZykKICAgICAgICAgICAgICAgICBtc2cgPSBjbGFzc18obXNnX21haWxkaXIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZmxhZ3MoKSA9PSByZXN1bHQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZnJvbSgpID09ICdNQUlMRVItREFFTU9OICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuYXNjdGltZSh0aW1lLmdtdGltZSgwLjApKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgcmVzdWx0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mcm9tKCksICdNQUlMRVItREFFTU9OICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLmFzY3RpbWUodGltZS5nbXRpbWUoMC4wKSkpCiAgICAgICAgICAgICBtc2dfbWFpbGRpci5zZXRfc3ViZGlyKCdjdXInKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNsYXNzXyhtc2dfbWFpbGRpcikuZ2V0X2ZsYWdzKCkgPT0gJ1JPREZBJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3NfKG1zZ19tYWlsZGlyKS5nZXRfZmxhZ3MoKSwgJ1JPREZBJykKIAogICAgIGRlZiB0ZXN0X21haWxkaXJfdG9fbWgoc2VsZik6CiAgICAgICAgICMgQ29udmVydCBNYWlsZGlyTWVzc2FnZSB0byBNSE1lc3NhZ2UKQEAgLTEzNzIsOCArMTQxMyw4IEBACiAgICAgICAgICAgICAgICAgICgnVCcsIFsndW5zZWVuJ10pLCAoJ0RGUFJTVCcsIFsncmVwbGllZCcsICdmbGFnZ2VkJ10pKQogICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgogICAgICAgICAgICAgbXNnX21haWxkaXIuc2V0X2ZsYWdzKHNldHRpbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NSE1lc3NhZ2UobXNnX21haWxkaXIpLmdldF9zZXF1ZW5jZXMoKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1ITWVzc2FnZShtc2dfbWFpbGRpcikuZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9tYWlsZGlyX3RvX2JhYnlsKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgTWFpbGRpck1lc3NhZ2UgdG8gQmFieWwKQEAgLTEzODQsOCArMTQyNSw4IEBACiAgICAgICAgICAgICAgICAgICgnREZQUlNUJywgWydkZWxldGVkJywgJ2Fuc3dlcmVkJywgJ2ZvcndhcmRlZCddKSkKICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKICAgICAgICAgICAgIG1zZ19tYWlsZGlyLnNldF9mbGFncyhzZXR0aW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guQmFieWxNZXNzYWdlKG1zZ19tYWlsZGlyKS5nZXRfbGFiZWxzKCkgPT0gXAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5CYWJ5bE1lc3NhZ2UobXNnX21haWxkaXIpLmdldF9sYWJlbHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KQogCiAgICAgZGVmIHRlc3RfbWJveG1tZGZfdG9fbWFpbGRpcihzZWxmKToKICAgICAgICAgIyBDb252ZXJ0IG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZSB0byBNYWlsZGlyTWVzc2FnZQpAQCAtMTM5NywxMSArMTQzOCwxMSBAQAogICAgICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKICAgICAgICAgICAgICAgICBtc2dfbWJveE1NREYuc2V0X2ZsYWdzKHNldHRpbmcpCiAgICAgICAgICAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2dfbWJveE1NREYpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZmxhZ3MoKSA9PSByZXN1bHQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZGF0ZSgpID09IDAuMCwgbXNnLmdldF9kYXRlKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZGF0ZSgpLCAwLjApCiAgICAgICAgICAgICBtc2dfbWJveE1NREYuc2V0X2ZsYWdzKCdPJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZ19tYm94TU1ERikuZ2V0X3N1YmRpcigpID09IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY3VyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2dfbWJveE1NREYpLmdldF9zdWJkaXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cicpCiAKICAgICBkZWYgdGVzdF9tYm94bW1kZl90b19tYm94bW1kZihzZWxmKToKICAgICAgICAgIyBDb252ZXJ0IG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZSB0byBtYm94TWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UKQEAgLTE0MTEsOCArMTQ1Miw4IEBACiAgICAgICAgICAgICBtc2dfbWJveE1NREYuc2V0X2Zyb20oJ2Zvb0BiYXInKQogICAgICAgICAgICAgZm9yIGNsYXNzMl8gaW4gKG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgogICAgICAgICAgICAgICAgIG1zZzIgPSBjbGFzczJfKG1zZ19tYm94TU1ERikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8obXNnMi5nZXRfZmxhZ3MoKSA9PSAnUk9ERkEnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cyLmdldF9mcm9tKCkgPT0gJ2Zvb0BiYXInKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMi5nZXRfZmxhZ3MoKSwgJ1JPREZBJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzIuZ2V0X2Zyb20oKSwgJ2Zvb0BiYXInKQogCiAgICAgZGVmIHRlc3RfbWJveG1tZGZfdG9fbWgoc2VsZik6CiAgICAgICAgICMgQ29udmVydCBtYm94TWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UgdG8gTUhNZXNzYWdlCkBAIC0xNDI0LDggKzE0NjUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgKCdST0RGQScsIFsncmVwbGllZCcsICdmbGFnZ2VkJ10pKQogICAgICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKICAgICAgICAgICAgICAgICBtc2dfbWJveE1NREYuc2V0X2ZsYWdzKHNldHRpbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guTUhNZXNzYWdlKG1zZ19tYm94TU1ERikuZ2V0X3NlcXVlbmNlcygpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gcmVzdWx0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NSE1lc3NhZ2UobXNnX21ib3hNTURGKS5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9tYm94bW1kZl90b19iYWJ5bChzZWxmKToKICAgICAgICAgIyBDb252ZXJ0IG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZSB0byBCYWJ5bE1lc3NhZ2UKQEAgLTE0MzcsNyArMTQ3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAoJ1JPREZBJywgWydkZWxldGVkJywgJ2Fuc3dlcmVkJ10pKQogICAgICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKICAgICAgICAgICAgICAgICBtc2cuc2V0X2ZsYWdzKHNldHRpbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guQmFieWxNZXNzYWdlKG1zZykuZ2V0X2xhYmVscygpID09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guQmFieWxNZXNzYWdlKG1zZykuZ2V0X2xhYmVscygpLCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9taF90b19tYWlsZGlyKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgTUhNZXNzYWdlIHRvIE1haWxkaXJNZXNzYWdlCkBAIC0xNDQ1LDE0ICsxNDg2LDE0IEBACiAgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CiAgICAgICAgICAgICBtc2cgPSBtYWlsYm94Lk1ITWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKHNldHRpbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9mbGFncygpID09IHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X3N1YmRpcigpID09ICdjdXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X2ZsYWdzKCksIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9zdWJkaXIoKSwgJ2N1cicpCiAgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgndW5zZWVuJykKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgncmVwbGllZCcpCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQotICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9mbGFncygpID09ICdGUicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X3N1YmRpcigpID09ICdjdXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfZmxhZ3MoKSwgJ0ZSJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X3N1YmRpcigpLCAnY3VyJykKIAogICAgIGRlZiB0ZXN0X21oX3RvX21ib3htbWRmKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgTUhNZXNzYWdlIHRvIG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZQpAQCAtMTQ2MSwxMyArMTUwMiwxMyBAQAogICAgICAgICAgICAgbXNnID0gbWFpbGJveC5NSE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZShzZXR0aW5nKQogICAgICAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNsYXNzXyhtc2cpLmdldF9mbGFncygpID09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzXyhtc2cpLmdldF9mbGFncygpLCByZXN1bHQpCiAgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgndW5zZWVuJykKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgncmVwbGllZCcpCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQogICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjbGFzc18obXNnKS5nZXRfZmxhZ3MoKSA9PSAnT0ZBJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3NfKG1zZykuZ2V0X2ZsYWdzKCksICdPRkEnKQogCiAgICAgZGVmIHRlc3RfbWhfdG9fbWgoc2VsZik6CiAgICAgICAgICMgQ29udmVydCBNSE1lc3NhZ2UgdG8gTUhNZXNzYWdlCkBAIC0xNDc1LDggKzE1MTYsOCBAQAogICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCd1bnNlZW4nKQogICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdyZXBsaWVkJykKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgnZmxhZ2dlZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94Lk1ITWVzc2FnZShtc2cpLmdldF9zZXF1ZW5jZXMoKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICBbJ3Vuc2VlbicsICdyZXBsaWVkJywgJ2ZsYWdnZWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1ITWVzc2FnZShtc2cpLmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3Vuc2VlbicsICdyZXBsaWVkJywgJ2ZsYWdnZWQnXSkKIAogICAgIGRlZiB0ZXN0X21oX3RvX2JhYnlsKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgTUhNZXNzYWdlIHRvIEJhYnlsTWVzc2FnZQpAQCAtMTQ4NSwxMyArMTUyNiwxMyBAQAogICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgogICAgICAgICAgICAgbXNnID0gbWFpbGJveC5NSE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZShzZXR0aW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guQmFieWxNZXNzYWdlKG1zZykuZ2V0X2xhYmVscygpID09IHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5CYWJ5bE1lc3NhZ2UobXNnKS5nZXRfbGFiZWxzKCksIHJlc3VsdCkKICAgICAgICAgbXNnID0gbWFpbGJveC5NSE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCd1bnNlZW4nKQogICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdyZXBsaWVkJykKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgnZmxhZ2dlZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94LkJhYnlsTWVzc2FnZShtc2cpLmdldF9sYWJlbHMoKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICBbJ3Vuc2VlbicsICdhbnN3ZXJlZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guQmFieWxNZXNzYWdlKG1zZykuZ2V0X2xhYmVscygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsndW5zZWVuJywgJ2Fuc3dlcmVkJ10pCiAKICAgICBkZWYgdGVzdF9iYWJ5bF90b19tYWlsZGlyKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgQmFieWxNZXNzYWdlIHRvIE1haWxkaXJNZXNzYWdlCkBAIC0xNTAxLDE0ICsxNTQyLDE0IEBACiAgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CiAgICAgICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKHNldHRpbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9mbGFncygpID09IHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X3N1YmRpcigpID09ICdjdXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X2ZsYWdzKCksIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9zdWJkaXIoKSwgJ2N1cicpCiAgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgZm9yIGxhYmVsIGluICgndW5zZWVuJywgJ2RlbGV0ZWQnLCAnZmlsZWQnLCAnYW5zd2VyZWQnLCAnZm9yd2FyZGVkJywKICAgICAgICAgICAgICAgICAgICAgICAnZWRpdGVkJywgJ3Jlc2VudCcpOgogICAgICAgICAgICAgbXNnLmFkZF9sYWJlbChsYWJlbCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfZmxhZ3MoKSA9PSAnUFJUJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfc3ViZGlyKCkgPT0gJ2N1cicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9mbGFncygpLCAnUFJUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X3N1YmRpcigpLCAnY3VyJykKIAogICAgIGRlZiB0ZXN0X2JhYnlsX3RvX21ib3htbWRmKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgQmFieWxNZXNzYWdlIHRvIG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZQpAQCAtMTUxOSwxMyArMTU2MCwxMyBAQAogICAgICAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CiAgICAgICAgICAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICAgICAgICAgIG1zZy5hZGRfbGFiZWwoc2V0dGluZykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oY2xhc3NfKG1zZykuZ2V0X2ZsYWdzKCkgPT0gcmVzdWx0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3NfKG1zZykuZ2V0X2ZsYWdzKCksIHJlc3VsdCkKICAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICBmb3IgbGFiZWwgaW4gKCd1bnNlZW4nLCAnZGVsZXRlZCcsICdmaWxlZCcsICdhbnN3ZXJlZCcsICdmb3J3YXJkZWQnLAogICAgICAgICAgICAgICAgICAgICAgICdlZGl0ZWQnLCAncmVzZW50Jyk6CiAgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKGxhYmVsKQogICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjbGFzc18obXNnKS5nZXRfZmxhZ3MoKSA9PSAnT0RBJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3NfKG1zZykuZ2V0X2ZsYWdzKCksICdPREEnKQogCiAgICAgZGVmIHRlc3RfYmFieWxfdG9fbWgoc2VsZik6CiAgICAgICAgICMgQ29udmVydCBCYWJ5bE1lc3NhZ2UgdG8gTUhNZXNzYWdlCkBAIC0xNTM1LDEzICsxNTc2LDEzIEBACiAgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CiAgICAgICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKHNldHRpbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NSE1lc3NhZ2UobXNnKS5nZXRfc2VxdWVuY2VzKCkgPT0gcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1ITWVzc2FnZShtc2cpLmdldF9zZXF1ZW5jZXMoKSwgcmVzdWx0KQogICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgIGZvciBsYWJlbCBpbiAoJ3Vuc2VlbicsICdkZWxldGVkJywgJ2ZpbGVkJywgJ2Fuc3dlcmVkJywgJ2ZvcndhcmRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXRlZCcsICdyZXNlbnQnKToKICAgICAgICAgICAgIG1zZy5hZGRfbGFiZWwobGFiZWwpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94Lk1ITWVzc2FnZShtc2cpLmdldF9zZXF1ZW5jZXMoKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICBbJ3Vuc2VlbicsICdyZXBsaWVkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NSE1lc3NhZ2UobXNnKS5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWyd1bnNlZW4nLCAncmVwbGllZCddKQogCiAgICAgZGVmIHRlc3RfYmFieWxfdG9fYmFieWwoc2VsZik6CiAgICAgICAgICMgQ29udmVydCBCYWJ5bE1lc3NhZ2UgdG8gQmFieWxNZXNzYWdlCkBAIC0xNTUxLDEyICsxNTkyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXRlZCcsICdyZXNlbnQnKToKICAgICAgICAgICAgIG1zZy5hZGRfbGFiZWwobGFiZWwpCiAgICAgICAgIG1zZzIgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShtc2cpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cyLmdldF9sYWJlbHMoKSA9PSBbJ3Vuc2VlbicsICdkZWxldGVkJywgJ2ZpbGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5zd2VyZWQnLCAnZm9yd2FyZGVkJywgJ2VkaXRlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc2VudCddKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF92aXNpYmxlKCkua2V5cygpID09IG1zZzIuZ2V0X3Zpc2libGUoKS5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMi5nZXRfbGFiZWxzKCksIFsndW5zZWVuJywgJ2RlbGV0ZWQnLCAnZmlsZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fuc3dlcmVkJywgJ2ZvcndhcmRlZCcsICdlZGl0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc2VudCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfdmlzaWJsZSgpLmtleXMoKSwgbXNnMi5nZXRfdmlzaWJsZSgpLmtleXMoKSkKICAgICAgICAgZm9yIGtleSBpbiBtc2cuZ2V0X3Zpc2libGUoKS5rZXlzKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF92aXNpYmxlKClba2V5XSA9PSBtc2cyLmdldF92aXNpYmxlKClba2V5XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF92aXNpYmxlKClba2V5XSwgbXNnMi5nZXRfdmlzaWJsZSgpW2tleV0pCiAKIAogY2xhc3MgVGVzdFByb3h5RmlsZUJhc2UoVGVzdEJhc2UpOgpAQCAtMTU2NCw2OSArMTYwNSw2NiBAQAogICAgIGRlZiBfdGVzdF9yZWFkKHNlbGYsIHByb3h5KToKICAgICAgICAgIyBSZWFkIGJ5IGJ5dGUKICAgICAgICAgcHJveHkuc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZCgpID09ICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoKSwgJ2JhcicpCiAgICAgICAgIHByb3h5LnNlZWsoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWQoKSA9PSAnYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoKSwgJ2FyJykKICAgICAgICAgcHJveHkuc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZCgyKSA9PSAnYmEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoMiksICdiYScpCiAgICAgICAgIHByb3h5LnNlZWsoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWQoLTEpID09ICdhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZCgtMSksICdhcicpCiAgICAgICAgIHByb3h5LnNlZWsoMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWQoMTAwMCkgPT0gJ3InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoMTAwMCksICdyJykKIAogICAgIGRlZiBfdGVzdF9yZWFkbGluZShzZWxmLCBwcm94eSk6CiAgICAgICAgICMgUmVhZCBieSBsaW5lCiAgICAgICAgIHByb3h5LnNlZWsoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWRsaW5lKCkgPT0gJ2ZvbycgKyBvcy5saW5lc2VwKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZGxpbmUoKSA9PSAnYmFyJyArIG9zLmxpbmVzZXApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkbGluZSgpID09ICdmcmVkJyArIG9zLmxpbmVzZXApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkbGluZSgpID09ICdib2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKCksICdmb28nICsgb3MubGluZXNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZSgpLCAnYmFyJyArIG9zLmxpbmVzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmUoKSwgJ2ZyZWQnICsgb3MubGluZXNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZSgpLCAnYm9iJykKICAgICAgICAgcHJveHkuc2VlaygyKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZGxpbmUoKSA9PSAnbycgKyBvcy5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKCksICdvJyArIG9zLmxpbmVzZXApCiAgICAgICAgIHByb3h5LnNlZWsoNiArIDIgKiBsZW4ob3MubGluZXNlcCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkbGluZSgpID09ICdmcmVkJyArIG9zLmxpbmVzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmUoKSwgJ2ZyZWQnICsgb3MubGluZXNlcCkKICAgICAgICAgcHJveHkuc2Vlayg2ICsgMiAqIGxlbihvcy5saW5lc2VwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWRsaW5lKDIpID09ICdmcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkbGluZSgtMTApID09ICdlZCcgKyBvcy5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKDIpLCAnZnInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKC0xMCksICdlZCcgKyBvcy5saW5lc2VwKQogCiAgICAgZGVmIF90ZXN0X3JlYWRsaW5lcyhzZWxmLCBwcm94eSk6CiAgICAgICAgICMgUmVhZCBtdWx0aXBsZSBsaW5lcwogICAgICAgICBwcm94eS5zZWVrKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkbGluZXMoKSA9PSBbJ2ZvbycgKyBvcy5saW5lc2VwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXInICsgb3MubGluZXNlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJlZCcgKyBvcy5saW5lc2VwLCAnYm9iJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmVzKCksIFsnZm9vJyArIG9zLmxpbmVzZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXInICsgb3MubGluZXNlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyZWQnICsgb3MubGluZXNlcCwgJ2JvYiddKQogICAgICAgICBwcm94eS5zZWVrKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkbGluZXMoMikgPT0gWydmb28nICsgb3MubGluZXNlcF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmVzKDIpLCBbJ2ZvbycgKyBvcy5saW5lc2VwXSkKICAgICAgICAgcHJveHkuc2VlaygzICsgbGVuKG9zLmxpbmVzZXApKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZGxpbmVzKDQgKyBsZW4ob3MubGluZXNlcCkpID09Ci0gICAgICAgICAgICAgICAgICAgICBbJ2JhcicgKyBvcy5saW5lc2VwLCAnZnJlZCcgKyBvcy5saW5lc2VwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZXMoNCArIGxlbihvcy5saW5lc2VwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydiYXInICsgb3MubGluZXNlcCwgJ2ZyZWQnICsgb3MubGluZXNlcF0pCiAgICAgICAgIHByb3h5LnNlZWsoMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWRsaW5lcygxMDAwKSA9PSBbb3MubGluZXNlcCwgJ2JhcicgKyBvcy5saW5lc2VwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJlZCcgKyBvcy5saW5lc2VwLCAnYm9iJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmVzKDEwMDApLCBbb3MubGluZXNlcCwgJ2JhcicgKyBvcy5saW5lc2VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcmVkJyArIG9zLmxpbmVzZXAsICdib2InXSkKIAogICAgIGRlZiBfdGVzdF9pdGVyYXRpb24oc2VsZiwgcHJveHkpOgogICAgICAgICAjIEl0ZXJhdGUgYnkgbGluZQogICAgICAgICBwcm94eS5zZWVrKDApCiAgICAgICAgIGl0ZXJhdG9yID0gaXRlcihwcm94eSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGl0ZXJhdG9yLm5leHQoKSA9PSAnZm9vJyArIG9zLmxpbmVzZXApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhpdGVyYXRvci5uZXh0KCkgPT0gJ2JhcicgKyBvcy5saW5lc2VwKQotICAgICAgICBzZWxmLmFzc2VydF8oaXRlcmF0b3IubmV4dCgpID09ICdmcmVkJyArIG9zLmxpbmVzZXApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhpdGVyYXRvci5uZXh0KCkgPT0gJ2JvYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIGxhbWJkYTogaXRlcmF0b3IubmV4dCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXRlcmF0b3IpLAorICAgICAgICAgICAgWydmb28nICsgb3MubGluZXNlcCwgJ2JhcicgKyBvcy5saW5lc2VwLCAnZnJlZCcgKyBvcy5saW5lc2VwLCAnYm9iJ10pCiAKICAgICBkZWYgX3Rlc3Rfc2Vla19hbmRfdGVsbChzZWxmLCBwcm94eSk6CiAgICAgICAgICMgU2VlayBhbmQgdXNlIHRlbGwgdG8gY2hlY2sgcG9zaXRpb24KICAgICAgICAgcHJveHkuc2VlaygzKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkudGVsbCgpID09IDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkKGxlbihvcy5saW5lc2VwKSkgPT0gb3MubGluZXNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS50ZWxsKCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZChsZW4ob3MubGluZXNlcCkpLCBvcy5saW5lc2VwKQogICAgICAgICBwcm94eS5zZWVrKDIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkKDEgKyBsZW4ob3MubGluZXNlcCkpID09ICdyJyArIG9zLmxpbmVzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZCgxICsgbGVuKG9zLmxpbmVzZXApKSwgJ3InICsgb3MubGluZXNlcCkKICAgICAgICAgcHJveHkuc2VlaygtMyAtIGxlbihvcy5saW5lc2VwKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWQoMykgPT0gJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZCgzKSwgJ2JhcicpCiAgICAgICAgIHByb3h5LnNlZWsoMiwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWQoKSA9PSAnbycgKyBvcy5saW5lc2VwICsgJ2JhcicgKyBvcy5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoKSwgJ28nICsgb3MubGluZXNlcCArICdiYXInICsgb3MubGluZXNlcCkKICAgICAgICAgcHJveHkuc2VlaygxMDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkKCkgPT0gJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZCgpLCAnJykKIAogICAgIGRlZiBfdGVzdF9jbG9zZShzZWxmLCBwcm94eSk6CiAgICAgICAgICMgQ2xvc2UgYSBmaWxlCkBAIC0xNjQ5LDExICsxNjg3LDExIEBACiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJ2ZvbycpCiAgICAgICAgIHBvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCiAgICAgICAgIHByb3h5MCA9IG1haWxib3guX1Byb3h5RmlsZShzZWxmLl9maWxlKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkwLnRlbGwoKSA9PSBwb3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9maWxlLnRlbGwoKSA9PSBwb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkwLnRlbGwoKSwgcG9zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2ZpbGUudGVsbCgpLCBwb3MpCiAgICAgICAgIHByb3h5MSA9IG1haWxib3guX1Byb3h5RmlsZShzZWxmLl9maWxlLCAwKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkxLnRlbGwoKSA9PSAwKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fZmlsZS50ZWxsKCkgPT0gcG9zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5MS50ZWxsKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZmlsZS50ZWxsKCksIHBvcykKIAogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJ2JhcicpCkBAIC0xNjk4LDggKzE3MzYsOCBAQAogICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdmb28nICsgb3MubGluZXNlcCArICdiYXInKQogICAgICAgICBwb3MgPSBzZWxmLl9maWxlLnRlbGwoKQogICAgICAgICBwcm94eSA9IG1haWxib3guX1BhcnRpYWxGaWxlKHNlbGYuX2ZpbGUsIDIsIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS50ZWxsKCkgPT0gMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2ZpbGUudGVsbCgpID09IHBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS50ZWxsKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZmlsZS50ZWxsKCksIHBvcykKIAogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJyoqKmJhcioqKicpCkBAIC0xNzcxLDE4ICsxODA5LDE2IEBACiAgICAgICAgIGZpbGVuYW1lID0gb3MuZXh0c2VwLmpvaW4oKHN0cih0KSwgc3RyKHBpZCksICJteWhvc3RuYW1lIiwgIm15ZG9tYWluIikpCiAgICAgICAgIHRtcG5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAidG1wIiwgZmlsZW5hbWUpCiAgICAgICAgIG5ld25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCBkaXIsIGZpbGVuYW1lKQotICAgICAgICBmcCA9IG9wZW4odG1wbmFtZSwgInciKQotICAgICAgICBzZWxmLl9tc2dmaWxlcy5hcHBlbmQodG1wbmFtZSkKLSAgICAgICAgaWYgbWJveDoKLSAgICAgICAgICAgIGZwLndyaXRlKEZST01fKQotICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbih0bXBuYW1lLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5fbXNnZmlsZXMuYXBwZW5kKHRtcG5hbWUpCisgICAgICAgICAgICBpZiBtYm94OgorICAgICAgICAgICAgICAgIGZwLndyaXRlKEZST01fKQorICAgICAgICAgICAgZnAud3JpdGUoRFVNTVlfTUVTU0FHRSkKICAgICAgICAgaWYgaGFzYXR0cihvcywgImxpbmsiKToKICAgICAgICAgICAgIG9zLmxpbmsodG1wbmFtZSwgbmV3bmFtZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZwID0gb3BlbihuZXduYW1lLCAidyIpCi0gICAgICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKG5ld25hbWUsICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoRFVNTVlfTUVTU0FHRSkKICAgICAgICAgc2VsZi5fbXNnZmlsZXMuYXBwZW5kKG5ld25hbWUpCiAgICAgICAgIHJldHVybiB0bXBuYW1lCiAKQEAgLTE3OTEsMzYgKzE4MjcsMzYgQEAKICAgICAgICAgIyBUZXN0IGZvciByZWdyZXNzaW9uIG9uIGJ1ZyAjMTE3NDkwOgogICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgYm94ZXMgYXR0cmlidXRlIGFjdHVhbGx5IGdldHMgc2V0LgogICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgI3NlbGYuYXNzZXJ0XyhoYXNhdHRyKHNlbGYubWJveCwgImJveGVzIikpCi0gICAgICAgICNzZWxmLmFzc2VydF8obGVuKHNlbGYubWJveC5ib3hlcykgPT0gMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYubWJveCwgImJveGVzIikpCisgICAgICAgICNzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveC5ib3hlcykgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubWJveC5uZXh0KCksIE5vbmUpCiAKICAgICBkZWYgdGVzdF9ub25lbXB0eV9tYWlsZGlyX2N1cihzZWxmKToKICAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJjdXIiKQogICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgI3NlbGYuYXNzZXJ0XyhsZW4oc2VsZi5tYm94LmJveGVzKSA9PSAxKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBub3QgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5tYm94LmJveGVzKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHNlbGYubWJveC5uZXh0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQogCiAgICAgZGVmIHRlc3Rfbm9uZW1wdHlfbWFpbGRpcl9uZXcoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlTWVzc2FnZSgibmV3IikKICAgICAgICAgc2VsZi5tYm94ID0gbWFpbGJveC5NYWlsZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICNzZWxmLmFzc2VydF8obGVuKHNlbGYubWJveC5ib3hlcykgPT0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgbm90IE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgICNzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveC5ib3hlcykgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubWJveC5uZXh0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X25vbmVtcHR5X21haWxkaXJfYm90aChzZWxmKToKICAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJjdXIiKQogICAgICAgICBzZWxmLmNyZWF0ZU1lc3NhZ2UoIm5ldyIpCiAgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICAjc2VsZi5hc3NlcnRfKGxlbihzZWxmLm1ib3guYm94ZXMpID09IDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIG5vdCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBub3QgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5tYm94LmJveGVzKSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHNlbGYubWJveC5uZXh0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubWJveC5uZXh0KCksIE5vbmUpCiAKICAgICBkZWYgdGVzdF91bml4X21ib3goc2VsZik6CiAgICAgICAgICMjIyBzaG91bGQgYmUgYmV0dGVyIQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5IGIvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CmluZGV4IDEzNjU4NTEuLjEwYTUxNjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKQEAgLTEyOSw3ICsxMjksNyBAQAogCiAgICAgZGVmIHRlc3RfYnVmZmVyKHNlbGYpOgogICAgICAgICBmb3IgcyBpbiBbIiIsICJBbmRy6CBQcmV2aW4iLCAiYWJjIiwgIiAiKjEwMDAwXToKLSAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCgiYnVmZmVyLi4gbm90IHN1cHBvcnRlZCIsCisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCgiYnVmZmVyLi4gbm90IHN1cHBvcnRlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICAgICAgICAgIGIgPSBidWZmZXIocykKICAgICAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhiKSkKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICAgICAgdCA9IGNvbnN0cnVjdG9yKHNlbGYuZC5rZXlzKCkpCiAgICAgICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHModCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIG5ldykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG5ldywgY29uc3RydWN0b3IpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobmV3LCBjb25zdHJ1Y3RvcikpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHQpLCBpZChuZXcpKQogICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHQsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikpCiAgICAgICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWQoZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSkKQEAgLTIxMCw4ICsyMTAsOCBAQAogCiAgICAgZGVmIHRlc3RfdmVyc2lvbl9hcmd1bWVudChzZWxmKToKICAgICAgICAgIyBQeXRob24gMi40LjAgY3Jhc2hlcyBmb3IgYW55IGNhbGwgdG8gbWFyc2hhbC5kdW1wcyh4LCB5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoNSwgMCkpLCA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoNSwgMSkpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyg1LCAwKSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKDUsIDEpKSwgNSkKIAogICAgIGRlZiB0ZXN0X2Z1enooc2VsZik6CiAgICAgICAgICMgc2ltcGxlIHRlc3QgdGhhdCBpdCdzIGF0IGxlYXN0IG5vdCAqdG90YWxseSogdHJpdmlhbCB0bwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9tYXRoLnB5CmluZGV4IDkwODkwMTMuLjk3M2QxYWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hdGgucHkKQEAgLTcsMjAgKzcsMTAzIEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCByYW5kb20KK2ltcG9ydCBzdHJ1Y3QKIAogZXBzID0gMUUtMDUKIE5BTiA9IGZsb2F0KCduYW4nKQogSU5GID0gZmxvYXQoJ2luZicpCiBOSU5GID0gZmxvYXQoJy1pbmYnKQogCisjIGRlY29yYXRvciBmb3Igc2tpcHBpbmcgdGVzdHMgb24gbm9uLUlFRUUgNzU0IHBsYXRmb3JtcworcmVxdWlyZXNfSUVFRV83NTQgPSB1bml0dGVzdC5za2lwVW5sZXNzKAorICAgIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKworIyBkZXRlY3QgZXZpZGVuY2Ugb2YgZG91YmxlLXJvdW5kaW5nOiBmc3VtIGlzIG5vdCBhbHdheXMgY29ycmVjdGx5CisjIHJvdW5kZWQgb24gbWFjaGluZXMgdGhhdCBzdWZmZXIgZnJvbSBkb3VibGUgcm91bmRpbmcuCit4LCB5ID0gMWUxNiwgMi45OTk5ICMgdXNlIHRlbXBvcmFyeSB2YWx1ZXMgdG8gZGVmZWF0IHBlZXBob2xlIG9wdGltaXplcgorSEFWRV9ET1VCTEVfUk9VTkRJTkcgPSAoeCArIHkgPT0gMWUxNiArIDQpCisKICMgbG9jYXRlIGZpbGUgd2l0aCB0ZXN0IHZhbHVlcwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBmaWxlID0gc3lzLmFyZ3ZbMF0KIGVsc2U6CiAgICAgZmlsZSA9IF9fZmlsZV9fCiB0ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKSBvciBvcy5jdXJkaXIKK21hdGhfdGVzdGNhc2VzID0gb3MucGF0aC5qb2luKHRlc3RfZGlyLCAnbWF0aF90ZXN0Y2FzZXMudHh0JykKIHRlc3RfZmlsZSA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgJ2NtYXRoX3Rlc3RjYXNlcy50eHQnKQogCitkZWYgdG9fdWxwcyh4KToKKyAgICAiIiJDb252ZXJ0IGEgbm9uLU5hTiBmbG9hdCB4IHRvIGFuIGludGVnZXIsIGluIHN1Y2ggYSB3YXkgdGhhdAorICAgIGFkamFjZW50IGZsb2F0cyBhcmUgY29udmVydGVkIHRvIGFkamFjZW50IGludGVnZXJzLiAgVGhlbgorICAgIGFicyh1bHBzKHgpIC0gdWxwcyh5KSkgZ2l2ZXMgdGhlIGRpZmZlcmVuY2UgaW4gdWxwcyBiZXR3ZWVuIHR3bworICAgIGZsb2F0cy4KKworICAgIFRoZSByZXN1bHRzIGZyb20gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgbWFrZSBzZW5zZSBvbiBwbGF0Zm9ybXMKKyAgICB3aGVyZSBDIGRvdWJsZXMgYXJlIHJlcHJlc2VudGVkIGluIElFRUUgNzU0IGJpbmFyeTY0IGZvcm1hdC4KKworICAgICIiIgorICAgIG4gPSBzdHJ1Y3QudW5wYWNrKCc8cScsIHN0cnVjdC5wYWNrKCc8ZCcsIHgpKVswXQorICAgIGlmIG4gPCAwOgorICAgICAgICBuID0gfihuKzIqKjYzKQorICAgIHJldHVybiBuCisKK2RlZiB1bHBzX2NoZWNrKGV4cGVjdGVkLCBnb3QsIHVscHM9MjApOgorICAgICIiIkdpdmVuIG5vbi1OYU4gZmxvYXRzIGBleHBlY3RlZGAgYW5kIGBnb3RgLAorICAgIGNoZWNrIHRoYXQgdGhleSdyZSBlcXVhbCB0byB3aXRoaW4gdGhlIGdpdmVuIG51bWJlciBvZiB1bHBzLgorCisgICAgUmV0dXJucyBOb25lIG9uIHN1Y2Nlc3MgYW5kIGFuIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4iIiIKKworICAgIHVscHNfZXJyb3IgPSB0b191bHBzKGdvdCkgLSB0b191bHBzKGV4cGVjdGVkKQorICAgIGlmIGFicyh1bHBzX2Vycm9yKSA8PSB1bHBzOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiAiZXJyb3IgPSB7fSB1bHBzOyBwZXJtaXR0ZWQgZXJyb3IgPSB7fSB1bHBzIi5mb3JtYXQodWxwc19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVscHMpCisKK2RlZiBhY2NfY2hlY2soZXhwZWN0ZWQsIGdvdCwgcmVsX2Vycj0yZS0xNSwgYWJzX2VyciA9IDVlLTMyMyk6CisgICAgIiIiRGV0ZXJtaW5lIHdoZXRoZXIgbm9uLU5hTiBmbG9hdHMgYSBhbmQgYiBhcmUgZXF1YWwgdG8gd2l0aGluIGEKKyAgICAoc21hbGwpIHJvdW5kaW5nIGVycm9yLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGZvciByZWxfZXJyIGFuZAorICAgIGFic19lcnIgYXJlIGNob3NlbiB0byBiZSBzdWl0YWJsZSBmb3IgcGxhdGZvcm1zIHdoZXJlIGEgZmxvYXQgaXMKKyAgICByZXByZXNlbnRlZCBieSBhbiBJRUVFIDc1NCBkb3VibGUuICBUaGV5IGFsbG93IGFuIGVycm9yIG9mIGJldHdlZW4KKyAgICA5IGFuZCAxOSB1bHBzLiIiIgorCisgICAgIyBuZWVkIHRvIHNwZWNpYWwgY2FzZSBpbmZpbml0aWVzLCBzaW5jZSBpbmYgLSBpbmYgZ2l2ZXMgbmFuCisgICAgaWYgbWF0aC5pc2luZihleHBlY3RlZCkgYW5kIGdvdCA9PSBleHBlY3RlZDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGVycm9yID0gZ290IC0gZXhwZWN0ZWQKKworICAgIHBlcm1pdHRlZF9lcnJvciA9IG1heChhYnNfZXJyLCByZWxfZXJyICogYWJzKGV4cGVjdGVkKSkKKyAgICBpZiBhYnMoZXJyb3IpIDwgcGVybWl0dGVkX2Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiAiZXJyb3IgPSB7fTsgcGVybWl0dGVkIGVycm9yID0ge30iLmZvcm1hdChlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0dGVkX2Vycm9yKQorCitkZWYgcGFyc2VfbXRlc3RmaWxlKGZuYW1lKToKKyAgICAiIiJQYXJzZSBhIGZpbGUgd2l0aCB0ZXN0IHZhbHVlcworCisgICAgLS0gc3RhcnRzIGEgY29tbWVudAorICAgIGJsYW5rIGxpbmVzLCBvciBsaW5lcyBjb250YWluaW5nIG9ubHkgYSBjb21tZW50LCBhcmUgaWdub3JlZAorICAgIG90aGVyIGxpbmVzIGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBmb3JtCisgICAgICBpZCBmbiBhcmcgLT4gZXhwZWN0ZWQgW2ZsYWddKgorCisgICAgIiIiCisgICAgd2l0aCBvcGVuKGZuYW1lKSBhcyBmcDoKKyAgICAgICAgZm9yIGxpbmUgaW4gZnA6CisgICAgICAgICAgICAjIHN0cmlwIGNvbW1lbnRzLCBhbmQgc2tpcCBibGFuayBsaW5lcworICAgICAgICAgICAgaWYgJy0tJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzpsaW5lLmluZGV4KCctLScpXQorICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBsaHMsIHJocyA9IGxpbmUuc3BsaXQoJy0+JykKKyAgICAgICAgICAgIGlkLCBmbiwgYXJnID0gbGhzLnNwbGl0KCkKKyAgICAgICAgICAgIHJoc19waWVjZXMgPSByaHMuc3BsaXQoKQorICAgICAgICAgICAgZXhwID0gcmhzX3BpZWNlc1swXQorICAgICAgICAgICAgZmxhZ3MgPSByaHNfcGllY2VzWzE6XQorCisgICAgICAgICAgICB5aWVsZCAoaWQsIGZuLCBmbG9hdChhcmcpLCBmbG9hdChleHApLCBmbGFncykKKwogZGVmIHBhcnNlX3Rlc3RmaWxlKGZuYW1lKToKICAgICAiIiJQYXJzZSBhIGZpbGUgd2l0aCB0ZXN0IHZhbHVlcwogCkBAIC02Nyw3ICsxNTAsNyBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdhY29zKDEpJywgbWF0aC5hY29zKDEpLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFjb3MsIElORikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hY29zLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmFjb3MoTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYWNvcyhOQU4pKSkKIAogICAgIGRlZiB0ZXN0QWNvc2goc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5hY29zaCkKQEAgLTc1LDkgKzE1OCw5IEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ2Fjb3NoKDIpJywgbWF0aC5hY29zaCgyKSwgMS4zMTY5NTc4OTY5MjQ4MTY4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFjb3NoLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFjb3NoLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5hY29zaChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hY29zaChJTkYpLCBJTkYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYWNvc2gsIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYWNvc2goTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYWNvc2goTkFOKSkpCiAKICAgICBkZWYgdGVzdEFzaW4oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5hc2luKQpAQCAtODYsMTYgKzE2OSwxNiBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdhc2luKDEpJywgbWF0aC5hc2luKDEpLCBtYXRoLnBpLzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYXNpbiwgSU5GKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFzaW4sIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXNpbihOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hc2luKE5BTikpKQogCiAgICAgZGVmIHRlc3RBc2luaChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmFzaW5oKQogICAgICAgICBzZWxmLmZ0ZXN0KCdhc2luaCgwKScsIG1hdGguYXNpbmgoMCksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ2FzaW5oKDEpJywgbWF0aC5hc2luaCgxKSwgMC44ODEzNzM1ODcwMTk1NDMwNSkKICAgICAgICAgc2VsZi5mdGVzdCgnYXNpbmgoLTEpJywgbWF0aC5hc2luaCgtMSksIC0wLjg4MTM3MzU4NzAxOTU0MzA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmFzaW5oKElORiksIElORikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5hc2luaChOSU5GKSwgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hc2luaChOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmFzaW5oKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmFzaW5oKE5JTkYpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmFzaW5oKE5BTikpKQogCiAgICAgZGVmIHRlc3RBdGFuKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYXRhbikKQEAgLTEwNCw3ICsxODcsNyBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuKDEpJywgbWF0aC5hdGFuKDEpLCBtYXRoLnBpLzQpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4oaW5mKScsIG1hdGguYXRhbihJTkYpLCBtYXRoLnBpLzIpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4oLWluZiknLCBtYXRoLmF0YW4oTklORiksIC1tYXRoLnBpLzIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbihOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuKE5BTikpKQogCiAgICAgZGVmIHRlc3RBdGFuaChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmF0YW4pCkBAIC0xMTUsNyArMTk4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hdGFuaCwgLTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYXRhbmgsIElORikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hdGFuaCwgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuaChOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuaChOQU4pKSkKIAogICAgIGRlZiB0ZXN0QXRhbjIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5hdGFuMikKQEAgLTEzMiw3ICsyMTUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoMC4sIDAuKSwgMC4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigwLiwgMi4zKSwgMC4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigwLiwgSU5GKSwgMC4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbjIoMC4sIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKDAuLCBOQU4pKSkKICAgICAgICAgIyBtYXRoLmF0YW4yKC0wLCB4KQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtMC4sIC1pbmYpJywgbWF0aC5hdGFuMigtMC4sIE5JTkYpLCAtbWF0aC5waSkKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTAuLCAtMi4zKScsIG1hdGguYXRhbjIoLTAuLCAtMi4zKSwgLW1hdGgucGkpCkBAIC0xNDAsNyArMjIzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKC0wLiwgMC4pLCAtMC4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigtMC4sIDIuMyksIC0wLikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKC0wLiwgSU5GKSwgLTAuKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmF0YW4yKC0wLiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoLTAuLCBOQU4pKSkKICAgICAgICAgIyBtYXRoLmF0YW4yKElORiwgeCkKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoaW5mLCAtaW5mKScsIG1hdGguYXRhbjIoSU5GLCBOSU5GKSwgbWF0aC5waSozLzQpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKGluZiwgLTIuMyknLCBtYXRoLmF0YW4yKElORiwgLTIuMyksIG1hdGgucGkvMikKQEAgLTE0OCw3ICsyMzEsNyBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMihpbmYsIDAuKScsIG1hdGguYXRhbjIoSU5GLCAwLjApLCBtYXRoLnBpLzIpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKGluZiwgMi4zKScsIG1hdGguYXRhbjIoSU5GLCAyLjMpLCBtYXRoLnBpLzIpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKGluZiwgaW5mKScsIG1hdGguYXRhbjIoSU5GLCBJTkYpLCBtYXRoLnBpLzQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbjIoSU5GLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihJTkYsIE5BTikpKQogICAgICAgICAjIG1hdGguYXRhbjIoTklORiwgeCkKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLWluZiwgLWluZiknLCBtYXRoLmF0YW4yKE5JTkYsIE5JTkYpLCAtbWF0aC5waSozLzQpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIC0yLjMpJywgbWF0aC5hdGFuMihOSU5GLCAtMi4zKSwgLW1hdGgucGkvMikKQEAgLTE1Niw0MyArMjM5LDQzIEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIDAuKScsIG1hdGguYXRhbjIoTklORiwgMC4wKSwgLW1hdGgucGkvMikKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLWluZiwgMi4zKScsIG1hdGguYXRhbjIoTklORiwgMi4zKSwgLW1hdGgucGkvMikKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLWluZiwgaW5mKScsIG1hdGguYXRhbjIoTklORiwgSU5GKSwgLW1hdGgucGkvNCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuMihOSU5GLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOSU5GLCBOQU4pKSkKICAgICAgICAgIyBtYXRoLmF0YW4yKCtmaW5pdGUsIHgpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKDIuMywgLWluZiknLCBtYXRoLmF0YW4yKDIuMywgTklORiksIG1hdGgucGkpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKDIuMywgLTAuKScsIG1hdGguYXRhbjIoMi4zLCAtMC4pLCBtYXRoLnBpLzIpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKDIuMywgMC4pJywgbWF0aC5hdGFuMigyLjMsIDAuKSwgbWF0aC5waS8yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoMi4zLCBJTkYpLCAwLikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuMigyLjMsIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKDIuMywgTkFOKSkpCiAgICAgICAgICMgbWF0aC5hdGFuMigtZmluaXRlLCB4KQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtMi4zLCAtaW5mKScsIG1hdGguYXRhbjIoLTIuMywgTklORiksIC1tYXRoLnBpKQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtMi4zLCAtMC4pJywgbWF0aC5hdGFuMigtMi4zLCAtMC4pLCAtbWF0aC5waS8yKQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtMi4zLCAwLiknLCBtYXRoLmF0YW4yKC0yLjMsIDAuKSwgLW1hdGgucGkvMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKC0yLjMsIElORiksIC0wLikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuMigtMi4zLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMigtMi4zLCBOQU4pKSkKICAgICAgICAgIyBtYXRoLmF0YW4yKE5BTiwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIE5JTkYpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIC0yLjMpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIC0wLikpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgMC4pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIDIuMykpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgSU5GKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIE5JTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIC0yLjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIC0wLikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgMC4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIDIuMykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCBOQU4pKSkKIAogICAgIGRlZiB0ZXN0Q2VpbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmNlaWwpCiAgICAgICAgICMgVGhlc2UgdHlwZXMgd2lsbCBiZSBpbnQgaW4gcHkzay4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmxvYXQsIHR5cGUobWF0aC5jZWlsKDEpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmxvYXQsIHR5cGUobWF0aC5jZWlsKDFMKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZsb2F0LCB0eXBlKG1hdGguY2VpbCgxLjApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmNlaWwoMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0LCB0eXBlKG1hdGguY2VpbCgxTCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0LCB0eXBlKG1hdGguY2VpbCgxLjApKSkKICAgICAgICAgc2VsZi5mdGVzdCgnY2VpbCgwLjUpJywgbWF0aC5jZWlsKDAuNSksIDEpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoMS4wKScsIG1hdGguY2VpbCgxLjApLCAxKQogICAgICAgICBzZWxmLmZ0ZXN0KCdjZWlsKDEuNSknLCBtYXRoLmNlaWwoMS41KSwgMikKICAgICAgICAgc2VsZi5mdGVzdCgnY2VpbCgtMC41KScsIG1hdGguY2VpbCgtMC41KSwgMCkKICAgICAgICAgc2VsZi5mdGVzdCgnY2VpbCgtMS4wKScsIG1hdGguY2VpbCgtMS4wKSwgLTEpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoLTEuNSknLCBtYXRoLmNlaWwoLTEuNSksIC0xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNlaWwoSU5GKSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNlaWwoTklORiksIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguY2VpbChOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNlaWwoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY2VpbChOSU5GKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jZWlsKE5BTikpKQogCiAgICAgICAgIGNsYXNzIFRlc3RDZWlsKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgpAQCAtMjA3LDM5ICsyOTAsMzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmNlaWwsIHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jZWlsLCB0LCAwKQogCi0gICAgaWYgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpOgotICAgICAgICBkZWYgdGVzdENvcHlzaWduKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEsIDQyKSwgMS4wKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDAuLCA0MiksIDAuMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgLTQyKSwgLTEuMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigzLCAwLiksIDMuMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbig0LiwgLTAuKSwgLTQuMCkKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdENvcHlzaWduKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMSwgNDIpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigwLiwgNDIpLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgLTQyKSwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDMsIDAuKSwgMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oNC4sIC0wLiksIC00LjApCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jb3B5c2lnbikKLSAgICAgICAgICAgICMgY29weXNpZ24gc2hvdWxkIGxldCB1cyBkaXN0aW5ndWlzaCBzaWducyBvZiB6ZXJvcwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5jb3B5c2lnbigxLiwgMC4pLCAxLikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29weXNpZ24oMS4sIC0wLiksIC0xLikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29weXNpZ24oSU5GLCAwLiksIElORikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29weXNpZ24oSU5GLCAtMC4pLCBOSU5GKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5jb3B5c2lnbihOSU5GLCAwLiksIElORikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29weXNpZ24oTklORiwgLTAuKSwgTklORikKLSAgICAgICAgICAgICMgYW5kIG9mIGluZmluaXRpZXMKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29weXNpZ24oMS4sIElORiksIDEuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5jb3B5c2lnbigxLiwgTklORiksIC0xLikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29weXNpZ24oSU5GLCBJTkYpLCBJTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNvcHlzaWduKElORiwgTklORiksIE5JTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNvcHlzaWduKE5JTkYsIElORiksIElORikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29weXNpZ24oTklORiwgTklORiksIE5JTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgMS4pKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCBJTkYpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCBOSU5GKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgTkFOKSkpCi0gICAgICAgICAgICAjIGNvcHlzaWduKElORiwgTkFOKSBtYXkgYmUgSU5GIG9yIGl0IG1heSBiZSBOSU5GLCBzaW5jZQotICAgICAgICAgICAgIyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHNpZ24gYml0IG9mIE5BTiBpcyBzZXQgb24gYW55Ci0gICAgICAgICAgICAjIGdpdmVuIHBsYXRmb3JtLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYobWF0aC5jb3B5c2lnbihJTkYsIE5BTikpKQotICAgICAgICAgICAgIyBzaW1pbGFybHksIGNvcHlzaWduKDIuLCBOQU4pIGNvdWxkIGJlIDIuIG9yIC0yLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWJzKG1hdGguY29weXNpZ24oMi4sIE5BTikpLCAyLikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmNvcHlzaWduKQorICAgICAgICAjIGNvcHlzaWduIHNob3VsZCBsZXQgdXMgZGlzdGluZ3Vpc2ggc2lnbnMgb2YgemVyb3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCAwLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIC0wLiksIC0xLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKElORiwgMC4pLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihJTkYsIC0wLiksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihOSU5GLCAwLiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKE5JTkYsIC0wLiksIE5JTkYpCisgICAgICAgICMgYW5kIG9mIGluZmluaXRpZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCBJTkYpLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCBOSU5GKSwgLTEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oSU5GLCBJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihJTkYsIE5JTkYpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oTklORiwgSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oTklORiwgTklORiksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCAxLikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCBOSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCBOQU4pKSkKKyAgICAgICAgIyBjb3B5c2lnbihJTkYsIE5BTikgbWF5IGJlIElORiBvciBpdCBtYXkgYmUgTklORiwgc2luY2UKKyAgICAgICAgIyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHNpZ24gYml0IG9mIE5BTiBpcyBzZXQgb24gYW55CisgICAgICAgICMgZ2l2ZW4gcGxhdGZvcm0uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKG1hdGguY29weXNpZ24oSU5GLCBOQU4pKSkKKyAgICAgICAgIyBzaW1pbGFybHksIGNvcHlzaWduKDIuLCBOQU4pIGNvdWxkIGJlIDIuIG9yIC0yLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhtYXRoLmNvcHlzaWduKDIuLCBOQU4pKSwgMi4pCiAKICAgICBkZWYgdGVzdENvcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmNvcykKQEAgLTI0OCwyMCArMzMxLDIwIEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ2NvcyhwaS8yKScsIG1hdGguY29zKG1hdGgucGkvMiksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ2NvcyhwaSknLCBtYXRoLmNvcyhtYXRoLnBpKSwgLTEpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguY29zKElORikpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5jb3MoTklORikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3MoSU5GKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcyhOSU5GKSkpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5jb3MsIElORikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguY29zLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmNvcyhOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3MoTkFOKSkpCiAKICAgICBkZWYgdGVzdENvc2goc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jb3NoKQogICAgICAgICBzZWxmLmZ0ZXN0KCdjb3NoKDApJywgbWF0aC5jb3NoKDApLCAxKQogICAgICAgICBzZWxmLmZ0ZXN0KCdjb3NoKDIpLTIqY29zaCgxKSoqMicsIG1hdGguY29zaCgyKS0yKm1hdGguY29zaCgxKSoqMiwgLTEpICMgVGhhbmtzIHRvIExhbWJlcnQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5jb3NoKElORiksIElORikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5jb3NoKE5JTkYpLCBJTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguY29zaChOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvc2goSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29zaChOSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvc2goTkFOKSkpCiAKICAgICBkZWYgdGVzdERlZ3JlZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5kZWdyZWVzKQpAQCAtMjc0LDkgKzM1Nyw5IEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ2V4cCgtMSknLCBtYXRoLmV4cCgtMSksIDEvbWF0aC5lKQogICAgICAgICBzZWxmLmZ0ZXN0KCdleHAoMCknLCBtYXRoLmV4cCgwKSwgMSkKICAgICAgICAgc2VsZi5mdGVzdCgnZXhwKDEpJywgbWF0aC5leHAoMSksIG1hdGguZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5leHAoSU5GKSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmV4cChOSU5GKSwgMC4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguZXhwKE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZXhwKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmV4cChOSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZXhwKE5BTikpKQogCiAgICAgZGVmIHRlc3RGYWJzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZmFicykKQEAgLTMwMSw5ICszODQsOSBAQAogICAgIGRlZiB0ZXN0Rmxvb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5mbG9vcikKICAgICAgICAgIyBUaGVzZSB0eXBlcyB3aWxsIGJlIGludCBpbiBweTNrLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmbG9hdCwgdHlwZShtYXRoLmZsb29yKDEpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmxvYXQsIHR5cGUobWF0aC5mbG9vcigxTCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmbG9hdCwgdHlwZShtYXRoLmZsb29yKDEuMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0LCB0eXBlKG1hdGguZmxvb3IoMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0LCB0eXBlKG1hdGguZmxvb3IoMUwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmZsb29yKDEuMCkpKQogICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigwLjUpJywgbWF0aC5mbG9vcigwLjUpLCAwKQogICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigxLjApJywgbWF0aC5mbG9vcigxLjApLCAxKQogICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigxLjUpJywgbWF0aC5mbG9vcigxLjUpLCAxKQpAQCAtMzE0LDkgKzM5Nyw5IEBACiAgICAgICAgICMgVGhpcyBmYWlscyBvbiBzb21lIHBsYXRmb3JtcyAtIHNvIGNoZWNrIGl0IGhlcmUKICAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoMS4yM2UxNjcpJywgbWF0aC5mbG9vcigxLjIzZTE2NyksIDEuMjNlMTY3KQogICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigtMS4yM2UxNjcpJywgbWF0aC5mbG9vcigtMS4yM2UxNjcpLCAtMS4yM2UxNjcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY2VpbChJTkYpLCBJTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY2VpbChOSU5GKSwgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5mbG9vcihOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNlaWwoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY2VpbChOSU5GKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5mbG9vcihOQU4pKSkKIAogICAgICAgICBjbGFzcyBUZXN0Rmxvb3Iob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CkBAIC0zMzksMTkgKzQyMiwxOSBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKC0xMCwxKScsIG1hdGguZm1vZCgtMTAsMSksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ2Ztb2QoLTEwLDAuNSknLCBtYXRoLmZtb2QoLTEwLDAuNSksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ2Ztb2QoLTEwLDEuNSknLCBtYXRoLmZtb2QoLTEwLDEuNSksIC0xKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmZtb2QoTkFOLCAxLikpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmZtb2QoMS4sIE5BTikpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmZtb2QoTkFOLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5mbW9kKE5BTiwgMS4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5mbW9kKDEuLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5mbW9kKE5BTiwgTkFOKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguZm1vZCwgMS4sIDAuKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZtb2QsIElORiwgMS4pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguZm1vZCwgTklORiwgMS4pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguZm1vZCwgSU5GLCAwLikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5mbW9kKDMuMCwgSU5GKSwgMy4wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmZtb2QoLTMuMCwgSU5GKSwgLTMuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5mbW9kKDMuMCwgTklORiksIDMuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5mbW9kKC0zLjAsIE5JTkYpLCAtMy4wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmZtb2QoMC4wLCAzLjApLCAwLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguZm1vZCgwLjAsIE5JTkYpLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mbW9kKDMuMCwgSU5GKSwgMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZm1vZCgtMy4wLCBJTkYpLCAtMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZm1vZCgzLjAsIE5JTkYpLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mbW9kKC0zLjAsIE5JTkYpLCAtMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZm1vZCgwLjAsIDMuMCksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZtb2QoMC4wLCBOSU5GKSwgMC4wKQogCiAgICAgZGVmIHRlc3RGcmV4cChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmZyZXhwKQpAQCAtMzY3LDEwICs0NTAsMTMgQEAKICAgICAgICAgdGVzdGZyZXhwKCdmcmV4cCgxKScsIG1hdGguZnJleHAoMSksICgwLjUsIDEpKQogICAgICAgICB0ZXN0ZnJleHAoJ2ZyZXhwKDIpJywgbWF0aC5mcmV4cCgyKSwgKDAuNSwgMikpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5mcmV4cChJTkYpWzBdLCBJTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguZnJleHAoTklORilbMF0sIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguZnJleHAoTkFOKVswXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mcmV4cChJTkYpWzBdLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mcmV4cChOSU5GKVswXSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5mcmV4cChOQU4pWzBdKSkKIAorICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIEB1bml0dGVzdC5za2lwSWYoSEFWRV9ET1VCTEVfUk9VTkRJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZzdW0gaXMgbm90IGV4YWN0IG9uIG1hY2hpbmVzIHdpdGggZG91YmxlIHJvdW5kaW5nIikKICAgICBkZWYgdGVzdEZzdW0oc2VsZik6CiAgICAgICAgICMgbWF0aC5mc3VtIHJlbGllcyBvbiBleGFjdCByb3VuZGluZyBmb3IgY29ycmVjdCBvcGVyYXRpb24uCiAgICAgICAgICMgVGhlcmUncyBhIGtub3duIHByb2JsZW0gd2l0aCBJQTMyIGZsb2F0aW5nLXBvaW50IHRoYXQgY2F1c2VzCkBAIC0zODAsMTQgKzQ2Niw2IEBACiAgICAgICAgICMgcHJvYmxlbSBkZXNjcmliZWQgaW4gaXNzdWUgIzI5MzcsIHdlIHNpbXBseSBza2lwIHRoZSB3aG9sZQogICAgICAgICAjIHRlc3QuCiAKLSAgICAgICAgaWYgbm90IGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgb24gSUVFRSA3NTQgY29tcGxpYW50IG1hY2hpbmVzLCBib3RoIG9mIHRoZSBleHByZXNzaW9ucwotICAgICAgICAjIGJlbG93IHNob3VsZCByb3VuZCB0byAxMDAwMDAwMDAwMDAwMDAwMi4wLgotICAgICAgICBpZiAxZTE2KzIuMCAhPSAxZTE2KzIuOTk5OToKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgICMgUHl0aG9uIHZlcnNpb24gb2YgbWF0aC5mc3VtLCBmb3IgY29tcGFyaXNvbi4gIFVzZXMgYQogICAgICAgICAjIGRpZmZlcmVudCBhbGdvcml0aG0gYmFzZWQgb24gZnJleHAsIGxkZXhwIGFuZCBpbnRlZ2VyCiAgICAgICAgICMgYXJpdGhtZXRpYy4KQEAgLTQ3NSw4ICs1NTMsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguaHlwb3QoSU5GLCBOQU4pLCBJTkYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5oeXBvdChOQU4sIE5JTkYpLCBJTkYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5oeXBvdChOSU5GLCBOQU4pLCBJTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguaHlwb3QoMS4wLCBOQU4pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5oeXBvdChOQU4sIC0yLjApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5oeXBvdCgxLjAsIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmh5cG90KE5BTiwgLTIuMCkpKQogCiAgICAgZGVmIHRlc3RMZGV4cChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmxkZXhwKQpAQCAtNDg2LDI5ICs1NjQsMjkgQEAKICAgICAgICAgc2VsZi5mdGVzdCgnbGRleHAoLTEsMSknLCBtYXRoLmxkZXhwKC0xLDEpLCAtMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbWF0aC5sZGV4cCwgMS4sIDEwMDAwMDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG1hdGgubGRleHAsIC0xLiwgMTAwMDAwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sZGV4cCgxLiwgLTEwMDAwMDApLCAwLikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sZGV4cCgtMS4sIC0xMDAwMDAwKSwgLTAuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmxkZXhwKElORiwgMzApLCBJTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoTklORiwgLTIxMyksIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgubGRleHAoTkFOLCAwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgxLiwgLTEwMDAwMDApLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKC0xLiwgLTEwMDAwMDApLCAtMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cChJTkYsIDMwKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoTklORiwgLTIxMyksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgubGRleHAoTkFOLCAwKSkpCiAKICAgICAgICAgIyBsYXJnZSBzZWNvbmQgYXJndW1lbnQKICAgICAgICAgZm9yIG4gaW4gWzEwKio1LCAxMEwqKjUsIDEwKioxMCwgMTBMKioxMCwgMTAqKjIwLCAxMCoqNDBdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sZGV4cChJTkYsIC1uKSwgSU5GKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sZGV4cChOSU5GLCAtbiksIE5JTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmxkZXhwKDEuLCAtbiksIDAuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sZGV4cCgtMS4sIC1uKSwgLTAuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sZGV4cCgwLiwgLW4pLCAwLikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoLTAuLCAtbiksIC0wLikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgubGRleHAoTkFOLCAtbikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKElORiwgLW4pLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoTklORiwgLW4pLCBOSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKDEuLCAtbiksIDAuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKC0xLiwgLW4pLCAtMC4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoMC4sIC1uKSwgMC4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoLTAuLCAtbiksIC0wLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgubGRleHAoTkFOLCAtbikpKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBtYXRoLmxkZXhwLCAxLiwgbikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG1hdGgubGRleHAsIC0xLiwgbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoMC4sIG4pLCAwLikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoLTAuLCBuKSwgLTAuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sZGV4cChJTkYsIG4pLCBJTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmxkZXhwKE5JTkYsIG4pLCBOSU5GKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5sZGV4cChOQU4sIG4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgwLiwgbiksIDAuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKC0wLiwgbiksIC0wLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cChJTkYsIG4pLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoTklORiwgbiksIE5JTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxkZXhwKE5BTiwgbikpKQogCiAgICAgZGVmIHRlc3RMb2coc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5sb2cpCkBAIC01MTgsOSArNTk2LDkgQEAKICAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDMyLDIpJywgbWF0aC5sb2coMzIsMiksIDUpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2xvZygxMCoqNDAsIDEwKScsIG1hdGgubG9nKDEwKio0MCwgMTApLCA0MCkKICAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDEwKio0MCwgMTAqKjIwKScsIG1hdGgubG9nKDEwKio0MCwgMTAqKjIwKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sb2coSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubG9nKElORiksIElORikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5sb2csIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgubG9nKE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxvZyhOQU4pKSkKIAogICAgIGRlZiB0ZXN0TG9nMXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5sb2cxcCkKQEAgLTUyOCwyMSArNjA2LDIxIEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzFwKDApJywgbWF0aC5sb2cxcCgwKSwgMCkKICAgICAgICAgc2VsZi5mdGVzdCgnbG9nMXAoZS0xKScsIG1hdGgubG9nMXAobWF0aC5lLTEpLCAxKQogICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxcCgxKScsIG1hdGgubG9nMXAoMSksIG1hdGgubG9nKDIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmxvZzFwKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxvZzFwKElORiksIElORikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5sb2cxcCwgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5sb2cxcChOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5sb2cxcChOQU4pKSkKICAgICAgICAgbj0gMioqOTAKLSAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbHMobWF0aC5sb2cxcChuKSwgNjIuMzgzMjQ2MjUwMzk1MDc1KQotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFscyhtYXRoLmxvZzFwKG4pLCBtYXRoLmxvZzFwKGZsb2F0KG4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChtYXRoLmxvZzFwKG4pLCA2Mi4zODMyNDYyNTAzOTUwNzUpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwobWF0aC5sb2cxcChuKSwgbWF0aC5sb2cxcChmbG9hdChuKSkpCiAKICAgICBkZWYgdGVzdExvZzEwKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgubG9nMTApCiAgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzEwKDAuMSknLCBtYXRoLmxvZzEwKDAuMSksIC0xKQogICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxMCgxKScsIG1hdGgubG9nMTAoMSksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzEwKDEwKScsIG1hdGgubG9nMTAoMTApLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmxvZyhJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sb2coSU5GKSwgSU5GKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmxvZzEwLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmxvZzEwKE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxvZzEwKE5BTikpKQogCiAgICAgZGVmIHRlc3RNb2RmKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgubW9kZikKQEAgLTU1NiwxMiArNjM0LDEyIEBACiAgICAgICAgIHRlc3Rtb2RmKCdtb2RmKDEuNSknLCBtYXRoLm1vZGYoMS41KSwgKDAuNSwgMS4wKSkKICAgICAgICAgdGVzdG1vZGYoJ21vZGYoLTEuNSknLCBtYXRoLm1vZGYoLTEuNSksICgtMC41LCAtMS4wKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLm1vZGYoSU5GKSwgKDAuMCwgSU5GKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5tb2RmKE5JTkYpLCAoLTAuMCwgTklORikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5tb2RmKElORiksICgwLjAsIElORikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5tb2RmKE5JTkYpLCAoLTAuMCwgTklORikpCiAKICAgICAgICAgbW9kZl9uYW4gPSBtYXRoLm1vZGYoTkFOKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtb2RmX25hblswXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1vZGZfbmFuWzFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obW9kZl9uYW5bMF0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtb2RmX25hblsxXSkpCiAKICAgICBkZWYgdGVzdFBvdyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnBvdykKQEAgLTU3Myw5ICs2NTEsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIDEpLCBOSU5GKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChtYXRoLnBvdygxLCBJTkYpKSwgMS4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG1hdGgucG93KDEsIE5JTkYpKSwgMS4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgucG93KE5BTiwgMSkpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnBvdygyLCBOQU4pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5wb3coMCwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgucG93KE5BTiwgMSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdygyLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5wb3coMCwgTkFOKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMSwgTkFOKSwgMSkKIAogICAgICAgICAjIHBvdygwLiwgeCkKQEAgLTU4OSw3ICs2NjcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgMC4sIC0yLjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAwLiwgLTMuKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgMC4sIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgucG93KDAuLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5wb3coMC4sIE5BTikpKQogCiAgICAgICAgICMgcG93KElORiwgeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhJTkYsIElORiksIElORikKQEAgLTYwMiw3ICs2ODAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgLTIuMyksIDAuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgLTMuKSwgMC4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coSU5GLCBOSU5GKSwgMC4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgucG93KElORiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgucG93KElORiwgTkFOKSkpCiAKICAgICAgICAgIyBwb3coLTAuLCB4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0wLiwgSU5GKSwgMC4pCkBAIC02MTUsNyArNjkzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIC0wLiwgLTIuMykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIC0wLiwgLTMuKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgLTAuLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnBvdygtMC4sIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdygtMC4sIE5BTikpKQogCiAgICAgICAgICMgcG93KE5JTkYsIHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTklORiwgSU5GKSwgSU5GKQpAQCAtNjI4LDcgKzcwNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTklORiwgLTIuMyksIDAuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIC0zLiksIC0wLikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCBOSU5GKSwgMC4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgucG93KE5JTkYsIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdyhOSU5GLCBOQU4pKSkKIAogICAgICAgICAjIHBvdygtMSwgeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMS4sIElORiksIDEuKQpAQCAtNjQxLDcgKzcxOSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAtMS4sIC0yLjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuLCAtMy4pLCAtMS4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuLCBOSU5GKSwgMS4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgucG93KC0xLiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgucG93KC0xLiwgTkFOKSkpCiAKICAgICAgICAgIyBwb3coMSwgeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLiwgSU5GKSwgMS4pCkBAIC03MjQsMzAgKzgwMiwzMCBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdzaW4ocGkvMiknLCBtYXRoLnNpbihtYXRoLnBpLzIpLCAxKQogICAgICAgICBzZWxmLmZ0ZXN0KCdzaW4oLXBpLzIpJywgbWF0aC5zaW4oLW1hdGgucGkvMiksIC0xKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnNpbihJTkYpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguc2luKE5JTkYpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguc2luKElORikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5zaW4oTklORikpKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguc2luLCBJTkYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnNpbiwgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5zaW4oTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguc2luKE5BTikpKQogCiAgICAgZGVmIHRlc3RTaW5oKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguc2luaCkKICAgICAgICAgc2VsZi5mdGVzdCgnc2luaCgwKScsIG1hdGguc2luaCgwKSwgMCkKICAgICAgICAgc2VsZi5mdGVzdCgnc2luaCgxKSoqMi1jb3NoKDEpKioyJywgbWF0aC5zaW5oKDEpKioyLW1hdGguY29zaCgxKSoqMiwgLTEpCiAgICAgICAgIHNlbGYuZnRlc3QoJ3NpbmgoMSkrc2luaCgtMSknLCBtYXRoLnNpbmgoMSkrbWF0aC5zaW5oKC0xKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5zaW5oKElORiksIElORikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5zaW5oKE5JTkYpLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnNpbmgoTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5zaW5oKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnNpbmgoTklORiksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguc2luaChOQU4pKSkKIAogICAgIGRlZiB0ZXN0U3FydChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnNxcnQpCiAgICAgICAgIHNlbGYuZnRlc3QoJ3NxcnQoMCknLCBtYXRoLnNxcnQoMCksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ3NxcnQoMSknLCBtYXRoLnNxcnQoMSksIDEpCiAgICAgICAgIHNlbGYuZnRlc3QoJ3NxcnQoNCknLCBtYXRoLnNxcnQoNCksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguc3FydChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5zcXJ0KElORiksIElORikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5zcXJ0LCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnNxcnQoTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguc3FydChOQU4pKSkKIAogICAgIGRlZiB0ZXN0VGFuKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgudGFuKQpAQCAtNzU1LDEyICs4MzMsMTIgQEAKICAgICAgICAgc2VsZi5mdGVzdCgndGFuKHBpLzQpJywgbWF0aC50YW4obWF0aC5waS80KSwgMSkKICAgICAgICAgc2VsZi5mdGVzdCgndGFuKC1waS80KScsIG1hdGgudGFuKC1tYXRoLnBpLzQpLCAtMSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC50YW4oSU5GKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnRhbihOSU5GKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnRhbihJTkYpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgudGFuKE5JTkYpKSkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC50YW4sIElORikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgudGFuLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnRhbihOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC50YW4oTkFOKSkpCiAKICAgICBkZWYgdGVzdFRhbmgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC50YW5oKQpAQCAtNzY4LDcgKzg0Niw3IEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ3RhbmgoMSkrdGFuaCgtMSknLCBtYXRoLnRhbmgoMSkrbWF0aC50YW5oKC0xKSwgMCkKICAgICAgICAgc2VsZi5mdGVzdCgndGFuaChpbmYpJywgbWF0aC50YW5oKElORiksIDEpCiAgICAgICAgIHNlbGYuZnRlc3QoJ3RhbmgoLWluZiknLCBtYXRoLnRhbmgoTklORiksIC0xKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnRhbmgoTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgudGFuaChOQU4pKSkKICAgICAgICAgIyBjaGVjayB0aGF0IHRhbmgoLTAuKSA9PSAtMC4gb24gSUVFRSA3NTQgc3lzdGVtcwogICAgICAgICBpZiBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgudGFuaCgtMC4pLCAtMC4pCkBAIC03OTgsMjkgKzg3NiwyNCBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC50cnVuYykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnRydW5jLCAxLCAyKQotICAgICAgICAjIFhYWDogVGhpcyBpcyBub3QgaWRlYWwsIGJ1dCBzZWUgdGhlIGNvbW1lbnQgaW4gbWF0aF90cnVuYygpLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgbWF0aC50cnVuYywgVGVzdE5vVHJ1bmMoKSkKLQotICAgICAgICB0ID0gVGVzdE5vVHJ1bmMoKQotICAgICAgICB0Ll9fdHJ1bmNfXyA9IGxhbWJkYSAqYXJnczogYXJncwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoKSwgbWF0aC50cnVuYyh0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnRydW5jLCB0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciksIG1hdGgudHJ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3ROb1RydW5jKCkpCiAKICAgICBkZWYgdGVzdElzbmFuKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihmbG9hdCgibmFuIikpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihmbG9hdCgiaW5mIikqIDAuKSkKLSAgICAgICAgc2VsZi5mYWlsSWYobWF0aC5pc25hbihmbG9hdCgiaW5mIikpKQotICAgICAgICBzZWxmLmZhaWxJZihtYXRoLmlzbmFuKDAuKSkKLSAgICAgICAgc2VsZi5mYWlsSWYobWF0aC5pc25hbigxLikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGZsb2F0KCJuYW4iKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGZsb2F0KCJpbmYiKSogMC4pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGguaXNuYW4oZmxvYXQoImluZiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzbmFuKDAuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzbmFuKDEuKSkKIAogICAgIGRlZiB0ZXN0SXNpbmYoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzaW5mKGZsb2F0KCJpbmYiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzaW5mKGZsb2F0KCItaW5mIikpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc2luZigxRTQwMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzaW5mKC0xRTQwMCkpCi0gICAgICAgIHNlbGYuZmFpbElmKG1hdGguaXNpbmYoZmxvYXQoIm5hbiIpKSkKLSAgICAgICAgc2VsZi5mYWlsSWYobWF0aC5pc2luZigwLikpCi0gICAgICAgIHNlbGYuZmFpbElmKG1hdGguaXNpbmYoMS4pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2luZihmbG9hdCgiaW5mIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2luZihmbG9hdCgiLWluZiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoMUU0MDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2luZigtMUU0MDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGguaXNpbmYoZmxvYXQoIm5hbiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzaW5mKDAuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzaW5mKDEuKSkKIAogICAgICMgUkVEX0ZMQUcgMTYtT2N0LTIwMDAgVGltCiAgICAgIyBXaGlsZSAyLjAgaXMgbW9yZSBjb25zaXN0ZW50IGFib3V0IGV4Y2VwdGlvbnMgdGhhbiBwcmV2aW91cyByZWxlYXNlcywgaXQKQEAgLTg2MCw5ICs5MzMsOCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNxcnQoLTEpIGRpZG4ndCByYWlzZSBWYWx1ZUVycm9yIikKIAorICAgIEByZXF1aXJlc19JRUVFXzc1NAogICAgIGRlZiB0ZXN0X3Rlc3RmaWxlKHNlbGYpOgotICAgICAgICBpZiBub3QgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGZvciBpZCwgZm4sIGFyLCBhaSwgZXIsIGVpLCBmbGFncyBpbiBwYXJzZV90ZXN0ZmlsZSh0ZXN0X2ZpbGUpOgogICAgICAgICAgICAgIyBTa2lwIGlmIGVpdGhlciB0aGUgaW5wdXQgb3IgcmVzdWx0IGlzIGNvbXBsZXgsIG9yIGlmCiAgICAgICAgICAgICAjIGZsYWdzIGlzIG5vbmVtcHR5CkBAIC04ODQsNiArOTU2LDY5IEBACiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1lc3NhZ2UpCiAgICAgICAgICAgICBzZWxmLmZ0ZXN0KCIlczolcyglcikiICUgKGlkLCBmbiwgYXIpLCByZXN1bHQsIGVyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorICAgIGRlZiB0ZXN0X210ZXN0ZmlsZShzZWxmKToKKyAgICAgICAgQUxMT1dFRF9FUlJPUiA9IDIwICAjIHBlcm1pdHRlZCBlcnJvciwgaW4gdWxwcworICAgICAgICBmYWlsX2ZtdCA9ICJ7fTp7fSh7IXJ9KTogZXhwZWN0ZWQgeyFyfSwgZ290IHshcn0iCisKKyAgICAgICAgZmFpbHVyZXMgPSBbXQorICAgICAgICBmb3IgaWQsIGZuLCBhcmcsIGV4cGVjdGVkLCBmbGFncyBpbiBwYXJzZV9tdGVzdGZpbGUobWF0aF90ZXN0Y2FzZXMpOgorICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIobWF0aCwgZm4pCisKKyAgICAgICAgICAgIGlmICdpbnZhbGlkJyBpbiBmbGFncyBvciAnZGl2aWRlLWJ5LXplcm8nIGluIGZsYWdzOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gJ1ZhbHVlRXJyb3InCisgICAgICAgICAgICBlbGlmICdvdmVyZmxvdycgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAnT3ZlcmZsb3dFcnJvcicKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGdvdCA9IGZ1bmMoYXJnKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgZ290ID0gJ1ZhbHVlRXJyb3InCisgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICBnb3QgPSAnT3ZlcmZsb3dFcnJvcicKKworICAgICAgICAgICAgYWNjdXJhY3lfZmFpbHVyZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZ290LCBmbG9hdCkgYW5kIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIGZsb2F0KToKKyAgICAgICAgICAgICAgICBpZiBtYXRoLmlzbmFuKGV4cGVjdGVkKSBhbmQgbWF0aC5pc25hbihnb3QpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBtYXRoLmlzbmFuKGV4cGVjdGVkKSBhbmQgbm90IG1hdGguaXNuYW4oZ290KToKKyAgICAgICAgICAgICAgICAgICAgaWYgZm4gPT0gJ2xnYW1tYSc6CisgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIHVzZSBhIHdlYWtlciBhY2N1cmFjeSB0ZXN0IGZvciBsZ2FtbWE7CisgICAgICAgICAgICAgICAgICAgICAgICAjIGxnYW1tYSBvbmx5IGFjaGlldmVzIGFuIGFic29sdXRlIGVycm9yIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAjIGEgZmV3IG11bHRpcGxlcyBvZiB0aGUgbWFjaGluZSBhY2N1cmFjeSwgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgZ2VuZXJhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5X2ZhaWx1cmUgPSBhY2NfY2hlY2soZXhwZWN0ZWQsIGdvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsX2VyciA9IDVlLTE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXJyID0gNWUtMTUpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgZm4gPT0gJ2VyZmMnOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBlcmZjIGhhcyBsZXNzLXRoYW4taWRlYWwgYWNjdXJhY3kgZm9yIGxhcmdlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGFyZ3VtZW50cyAoeCB+IDI1IG9yIHNvKSwgbWFpbmx5IGR1ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZXJyb3IgaW52b2x2ZWQgaW4gY29tcHV0aW5nIGV4cCgteCp4KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgWFhYIFdvdWxkIGJlIGJldHRlciB0byB3ZWFrZW4gdGhpcyB0ZXN0IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZm9yIGxhcmdlIHgsIGluc3RlYWQgb2YgZm9yIGFsbCB4LgorICAgICAgICAgICAgICAgICAgICAgICAgYWNjdXJhY3lfZmFpbHVyZSA9IHVscHNfY2hlY2soZXhwZWN0ZWQsIGdvdCwgMjAwMCkKKworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYWNjdXJhY3lfZmFpbHVyZSA9IHVscHNfY2hlY2soZXhwZWN0ZWQsIGdvdCwgMjApCisgICAgICAgICAgICAgICAgICAgIGlmIGFjY3VyYWN5X2ZhaWx1cmUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZ290LCBzdHIpIGFuZCBpc2luc3RhbmNlKGV4cGVjdGVkLCBzdHIpOgorICAgICAgICAgICAgICAgIGlmIGdvdCA9PSBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZmFpbF9tc2cgPSBmYWlsX2ZtdC5mb3JtYXQoaWQsIGZuLCBhcmcsIGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICBpZiBhY2N1cmFjeV9mYWlsdXJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZhaWxfbXNnICs9ICcgKHt9KScuZm9ybWF0KGFjY3VyYWN5X2ZhaWx1cmUpCisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoZmFpbF9tc2cpCisKKyAgICAgICAgaWYgZmFpbHVyZXM6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0ZhaWx1cmVzIGluIHRlc3RfbXRlc3RmaWxlOlxuICAnICsKKyAgICAgICAgICAgICAgICAgICAgICAnXG4gICcuam9pbihmYWlsdXJlcykpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIGZyb20gZG9jdGVzdCBpbXBvcnQgRG9jRmlsZVN1aXRlCiAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weSBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKaW5kZXggODViNWUxMy4uYzQ5NDc1OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQorKysgYi9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CkBAIC00LDIzICs0LDY2IEBACiAiIiIKIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKIAogaW1wb3J0IGlvCi1pbXBvcnQgc3lzCi1pbXBvcnQgYXJyYXkKK2ltcG9ydCBfcHlpbyBhcyBweWlvCitpbXBvcnQgcGlja2xlCiAKLXRyeToKLSAgICBpbXBvcnQgX2J5dGVzaW8KLSAgICBoYXNfY19pbXBsZW1lbnRhdGlvbiA9IFRydWUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBoYXNfY19pbXBsZW1lbnRhdGlvbiA9IEZhbHNlCitjbGFzcyBNZW1vcnlTZWVrVGVzdE1peGluOgorCisgICAgZGVmIHRlc3RJbml0KHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBieXRlc0lvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgIGRlZiB0ZXN0UmVhZChzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgYnl0ZXNJbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjFdLCBieXRlc0lvLnJlYWQoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzE6NV0sIGJ5dGVzSW8ucmVhZCg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbNTpdLCBieXRlc0lvLnJlYWQoOTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkVPRiwgYnl0ZXNJby5yZWFkKCkpCisKKyAgICBkZWYgdGVzdFJlYWROb0FyZ3Moc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCBieXRlc0lvLnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkVPRiwgYnl0ZXNJby5yZWFkKCkpCisKKyAgICBkZWYgdGVzdFNlZWsoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIGJ5dGVzSW8ucmVhZCg1KQorICAgICAgICBieXRlc0lvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIGJ5dGVzSW8ucmVhZCgpKQorCisgICAgICAgIGJ5dGVzSW8uc2VlaygzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZlszOl0sIGJ5dGVzSW8ucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ5dGVzSW8uc2VlaywgMC4wKQorCisgICAgZGVmIHRlc3RUZWxsKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBieXRlc0lvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJ5dGVzSW8udGVsbCgpKQorICAgICAgICBieXRlc0lvLnNlZWsoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBieXRlc0lvLnRlbGwoKSkKKyAgICAgICAgYnl0ZXNJby5zZWVrKDEwMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwMDAwLCBieXRlc0lvLnRlbGwoKSkKIAogCiBjbGFzcyBNZW1vcnlUZXN0TWl4aW46CiAKKyAgICBkZWYgdGVzdF9kZXRhY2goc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuVW5zdXBwb3J0ZWRPcGVyYXRpb24sIGJ1Zi5kZXRhY2gpCisKICAgICBkZWYgd3JpdGVfb3BzKHNlbGYsIGYsIHQpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUodCgiYmxhaC4iKSksIDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDApLCAwKQpAQCAtMTU3LDcgKzIwMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoKSwgc2VsZi5FT0YpCiAgICAgICAgIG1lbWlvLnNlZWsoMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG1lbWlvLnJlYWRsaW5lKCkpLCB0eXBlKGJ1ZikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoTm9uZSksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSgpLCBidWYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ucmVhZGxpbmUsICcnKQogICAgICAgICBtZW1pby5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICBtZW1pby5yZWFkbGluZSkKQEAgLTE4OSw4ICsyMzIsOCBAQAogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYgKiAxMCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZXIobWVtaW8pLCBtZW1pbykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIobWVtaW8sICdfX2l0ZXJfXycpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGFzYXR0cihtZW1pbywgJ25leHQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobWVtaW8sICdfX2l0ZXJfXycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtZW1pbywgJ25leHQnKSkKICAgICAgICAgaSA9IDAKICAgICAgICAgZm9yIGxpbmUgaW4gbWVtaW86CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGJ1ZikKQEAgLTIwNCw3ICsyNDcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIDEwKQogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYgKiAyKQogICAgICAgICBtZW1pby5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLm5leHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIG1lbWlvKQogCiAgICAgZGVmIHRlc3RfZ2V0dmFsdWUoc2VsZik6CiAgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCkBAIC0zMDcsMTIgKzM1MCw1OCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QxKCksIGJ1ZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MigpLCBidWYpCiAKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kaWN0X2xlYWsoc2VsZik6CisgICAgICAgICMgVGVzdCBjYXNlIGZvciBpc3N1ZSAjNjI0Mi4KKyAgICAgICAgIyBUaGlzIHdpbGwgYmUgY2F1Z2h0IGJ5IHJlZ3J0ZXN0LnB5IC1SIGlmIHRoaXMgbGVhay4KKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgICAgIG1lbWlvLmZvbyA9IDEKIAotY2xhc3MgUHlCeXRlc0lPVGVzdChNZW1vcnlUZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorICAgICAgICBtZW1pby5mb28gPSA0MgorICAgICAgICBtZW1pby5zZWVrKDIpCisKKyAgICAgICAgY2xhc3MgUGlja2xlVGVzdE1lbUlPKHNlbGYuaW9jbGFzcyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18obWUsIGluaXR2YWx1ZSwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmlvY2xhc3MuX19pbml0X18obWUsIGluaXR2YWx1ZSkKKyAgICAgICAgICAgICAgICBtZS5mb28gPSBmb28KKyAgICAgICAgICAgICMgX19nZXRuZXdhcmdzX18gaXMgdW5kZWZpbmVkIG9uIHB1cnBvc2UuIFRoaXMgY2hlY2tzIHRoYXQgUEVQIDMwNworICAgICAgICAgICAgIyBpcyB1c2VkIHRvIHByb3ZpZGUgcGlja2xpbmcgc3VwcG9ydC4KKworICAgICAgICAjIFBpY2tsZSBleHBlY3RzIHRoZSBjbGFzcyB0byBiZSBvbiB0aGUgbW9kdWxlIGxldmVsLiBIZXJlIHdlIHVzZSBhCisgICAgICAgICMgbGl0dGxlIGhhY2sgdG8gYWxsb3cgdGhlIFBpY2tsZVRlc3RNZW1JTyBjbGFzcyB0byBkZXJpdmUgZnJvbQorICAgICAgICAjIHNlbGYuaW9jbGFzcyB3aXRob3V0IGhhdmluZyB0byBkZWZpbmUgYWxsIGNvbWJpbmF0aW9ucyBleHBsaWN0bHkgb24KKyAgICAgICAgIyB0aGUgbW9kdWxlLWxldmVsLgorICAgICAgICBpbXBvcnQgX19tYWluX18KKyAgICAgICAgUGlja2xlVGVzdE1lbUlPLl9fbW9kdWxlX18gPSAnX19tYWluX18nCisgICAgICAgIF9fbWFpbl9fLlBpY2tsZVRlc3RNZW1JTyA9IFBpY2tsZVRlc3RNZW1JTworICAgICAgICBzdWJtZW1pbyA9IFBpY2tsZVRlc3RNZW1JTyhidWYsIDgwKQorICAgICAgICBzdWJtZW1pby5zZWVrKDIpCisKKyAgICAgICAgIyBXZSBvbmx5IHN1cHBvcnQgcGlja2xlIHByb3RvY29sIDIgYW5kIG9ud2FyZCBzaW5jZSB3ZSB1c2UgZXh0ZW5kZWQKKyAgICAgICAgIyBfX3JlZHVjZV9fIEFQSSBvZiBQRVAgMzA3IHRvIHByb3ZpZGUgcGlja2xpbmcgc3VwcG9ydC4KKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDIsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKToKKyAgICAgICAgICAgIGZvciBvYmogaW4gKG1lbWlvLCBzdWJtZW1pbyk6CisgICAgICAgICAgICAgICAgb2JqMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2JqLCBwcm90b2NvbD1wcm90bykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZ2V0dmFsdWUoKSwgb2JqMi5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fY2xhc3NfXywgb2JqMi5fX2NsYXNzX18pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZm9vLCBvYmoyLmZvbykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai50ZWxsKCksIG9iajIudGVsbCgpKQorICAgICAgICAgICAgICAgIG9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGlja2xlLmR1bXBzLCBvYmosIHByb3RvKQorICAgICAgICBkZWwgX19tYWluX18uUGlja2xlVGVzdE1lbUlPCisKKworY2xhc3MgUHlCeXRlc0lPVGVzdChNZW1vcnlUZXN0TWl4aW4sIE1lbW9yeVNlZWtUZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gcHlpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBidWZ0eXBlKHMpOgogICAgICAgICByZXR1cm4gcy5lbmNvZGUoImFzY2lpIikKLSAgICBpb2NsYXNzID0gaW8uX0J5dGVzSU8KKyAgICBpb2NsYXNzID0gcHlpby5CeXRlc0lPCiAgICAgRU9GID0gYiIiCiAKICAgICBkZWYgdGVzdF9yZWFkMShzZWxmKToKQEAgLTM0MiwxMiArNDMxLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGludG8oYiksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLnJlYWRpbnRvLCAnJykKLSAgICAgICAgYSA9IGFycmF5LmFycmF5KGInYicsIG1hcChvcmQsIGIiaGVsbG8gd29ybGQiKSkKKyAgICAgICAgaW1wb3J0IGFycmF5CisgICAgICAgIGEgPSBhcnJheS5hcnJheShiJ2InLCBiImhlbGxvIHdvcmxkIikKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQogICAgICAgICBtZW1pby5yZWFkaW50byhhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudG9zdHJpbmcoKSwgYiIxMjM0NTY3ODkwZCIpCiAgICAgICAgIG1lbWlvLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8ucmVhZGludG8sIGIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGIiMTIzIikKKyAgICAgICAgYiA9IGJ5dGVhcnJheSgpCisgICAgICAgIG1lbWlvLnNlZWsoNDIpCisgICAgICAgIG1lbWlvLnJlYWRpbnRvKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiIiKQogCiAgICAgZGVmIHRlc3RfcmVsYXRpdmVfc2VlayhzZWxmKToKICAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKQEAgLTM3NCwxOCArNDY5LDM5IEBACiAKICAgICBkZWYgdGVzdF9ieXRlc19hcnJheShzZWxmKToKICAgICAgICAgYnVmID0gYiIxMjM0NTY3ODkwIgotCi0gICAgICAgIGEgPSBhcnJheS5hcnJheShiJ2InLCBtYXAob3JkLCBidWYpKQorICAgICAgICBpbXBvcnQgYXJyYXkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KGInYicsIGJ1ZikKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ud3JpdGUoYSksIDEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZikKIAorICAgIGRlZiB0ZXN0X2lzc3VlNTQ0OShzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgc2VsZi5pb2NsYXNzKGluaXRpYWxfYnl0ZXM9YnVmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuaW9jbGFzcywgYnVmLCBmb289Tm9uZSkKIAotY2xhc3MgUHlTdHJpbmdJT1Rlc3QoTWVtb3J5VGVzdE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgYnVmdHlwZSA9IHVuaWNvZGUKLSAgICBpb2NsYXNzID0gaW8uU3RyaW5nSU8KLSAgICBFT0YgPSAiIgorCitjbGFzcyBUZXh0SU9UZXN0TWl4aW46CisKKyAgICBkZWYgdGVzdF9uZXdsaW5lc19wcm9wZXJ0eShzZWxmKToKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MobmV3bGluZT1Ob25lKQorICAgICAgICAjIFRoZSBDIFN0cmluZ0lPIGRlY29kZXMgbmV3bGluZXMgaW4gd3JpdGUoKSBjYWxscywgYnV0IHRoZSBQeXRob24KKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBvbmx5IGRvZXMgd2hlbiByZWFkaW5nLiAgVGhpcyBmdW5jdGlvbiBmb3JjZXMgdGhlbSB0bworICAgICAgICAjIGJlIGRlY29kZWQgZm9yIHRlc3RpbmcuCisgICAgICAgIGRlZiBmb3JjZV9kZWNvZGUoKToKKyAgICAgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgICAgIG1lbWlvLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLm5ld2xpbmVzLCBOb25lKQorICAgICAgICBtZW1pby53cml0ZSgiYVxuIikKKyAgICAgICAgZm9yY2VfZGVjb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5uZXdsaW5lcywgIlxuIikKKyAgICAgICAgbWVtaW8ud3JpdGUoImJcclxuIikKKyAgICAgICAgZm9yY2VfZGVjb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5uZXdsaW5lcywgKCJcbiIsICJcclxuIikpCisgICAgICAgIG1lbWlvLndyaXRlKCJjXHJkIikKKyAgICAgICAgZm9yY2VfZGVjb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5uZXdsaW5lcywgKCJcciIsICJcbiIsICJcclxuIikpCiAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9zZWVrKHNlbGYpOgogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCkBAIC0zOTcsMjkgKzUxMywxOTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMikKIAorICAgIGRlZiB0ZXN0X3RleHRpb19wcm9wZXJ0aWVzKHNlbGYpOgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisKKyAgICAgICAgIyBUaGVzZSBhcmUganVzdCBkdW1teSB2YWx1ZXMgYnV0IHdlIG5ldmVydGhlbGVzcyBjaGVjayB0aGVtIGZvciBmZWFyCisgICAgICAgICMgb2YgdW5leHBlY3RlZCBicmVha2FnZS4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWVtaW8uZW5jb2RpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1lbWlvLmVycm9ycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZW1pby5saW5lX2J1ZmZlcmluZykKKworICAgIGRlZiB0ZXN0X25ld2xpbmVfbm9uZShzZWxmKToKKyAgICAgICAgIyBuZXdsaW5lPU5vbmUKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoImFcbmJcclxuY1xyZCIsIG5ld2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1lbWlvKSwgWyJhXG4iLCAiYlxuIiwgImNcbiIsICJkIl0pCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDEpLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgyKSwgIlxuYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgyKSwgIlxuYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgxKSwgIlxuIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MobmV3bGluZT1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG1lbWlvLndyaXRlKCJhXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBtZW1pby53cml0ZSgiYlxyXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBtZW1pby53cml0ZSgiY1xyZCIpKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCAiYVxuYlxuY1xuZCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXHJcbmIiLCBuZXdsaW5lPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgzKSwgImFcbmIiKQorCisgICAgZGVmIHRlc3RfbmV3bGluZV9lbXB0eShzZWxmKToKKyAgICAgICAgIyBuZXdsaW5lPSIiCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXG5iXHJcbmNccmQiLCBuZXdsaW5lPSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVtaW8pLCBbImFcbiIsICJiXHJcbiIsICJjXHIiLCAiZCJdKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCg0KSwgImFcbmJcciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgyKSwgIlxuYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgxKSwgIlxyIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MobmV3bGluZT0iIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtZW1pby53cml0ZSgiYVxuIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbWVtaW8ud3JpdGUoImJcciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG1lbWlvLndyaXRlKCJcbmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtZW1pby53cml0ZSgiXHJkIikpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1lbWlvKSwgWyJhXG4iLCAiYlxyXG4iLCAiY1xyIiwgImQiXSkKKworICAgIGRlZiB0ZXN0X25ld2xpbmVfbGYoc2VsZik6CisgICAgICAgICMgbmV3bGluZT0iXG4iCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXG5iXHJcbmNccmQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVtaW8pLCBbImFcbiIsICJiXHJcbiIsICJjXHJkIl0pCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lX2NyKHNlbGYpOgorICAgICAgICAjIG5ld2xpbmU9IlxyIgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygiYVxuYlxyXG5jXHJkIiwgbmV3bGluZT0iXHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgImFccmJcclxyY1xyZCIpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1lbWlvKSwgWyJhXHIiLCAiYlxyIiwgIlxyIiwgImNcciIsICJkIl0pCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lX2NybGYoc2VsZik6CisgICAgICAgICMgbmV3bGluZT0iXHJcbiIKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoImFcbmJcclxuY1xyZCIsIG5ld2xpbmU9IlxyXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgImFcclxuYlxyXHJcbmNccmQiKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZW1pbyksIFsiYVxyXG4iLCAiYlxyXHJcbiIsICJjXHJkIl0pCisKKyAgICBkZWYgdGVzdF9pc3N1ZTUyNjUoc2VsZik6CisgICAgICAgICMgU3RyaW5nSU8gY2FuIGR1cGxpY2F0ZSBuZXdsaW5lcyBpbiB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygiYVxyXG5iXHJcbiIsIG5ld2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDUpLCAiYVxuYlxuIikKKworCitjbGFzcyBQeVN0cmluZ0lPVGVzdChNZW1vcnlUZXN0TWl4aW4sIE1lbW9yeVNlZWtUZXN0TWl4aW4sCisgICAgICAgICAgICAgICAgICAgICBUZXh0SU9UZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBidWZ0eXBlID0gdW5pY29kZQorICAgIGlvY2xhc3MgPSBweWlvLlN0cmluZ0lPCisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBweWlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCisgICAgRU9GID0gIiIKKworCitjbGFzcyBQeVN0cmluZ0lPUGlja2xlVGVzdChUZXh0SU9UZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGlmIHBpY2tsZSByZXN0b3JlcyBwcm9wZXJseSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgU3RyaW5nSU8uCisgICAgIiIiCisgICAgYnVmdHlwZSA9IHVuaWNvZGUKKyAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IHB5aW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKyAgICBFT0YgPSAiIgorCisgICAgY2xhc3MgaW9jbGFzcyhweWlvLlN0cmluZ0lPKToKKyAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMocHlpby5TdHJpbmdJTygqYXJncywgKiprd2FyZ3MpKSkKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBwYXNzCisKKworY2xhc3MgQ0J5dGVzSU9UZXN0KFB5Qnl0ZXNJT1Rlc3QpOgorICAgIGlvY2xhc3MgPSBpby5CeXRlc0lPCisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorCisgICAgdGVzdF9ieXRlc19hcnJheSA9IHVuaXR0ZXN0LnNraXAoCisgICAgICAgICJhcnJheS5hcnJheSgpIGRvZXMgbm90IGhhdmUgdGhlIG5ldyBidWZmZXIgQVBJIgorICAgICkoUHlCeXRlc0lPVGVzdC50ZXN0X2J5dGVzX2FycmF5KQorCisKKyAgICBkZWYgdGVzdF9nZXRzdGF0ZShzZWxmKToKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBzdGF0ZSA9IG1lbWlvLl9fZ2V0c3RhdGVfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN0YXRlKSwgMykKKyAgICAgICAgYnl0ZWFycmF5KHN0YXRlWzBdKSAjIENoZWNrIGlmIHN0YXRlWzBdIHN1cHBvcnRzIHRoZSBidWZmZXIgaW50ZXJmYWNlLgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMV0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3RhdGVbMl0sIGRpY3QpIG9yIHN0YXRlWzJdIGlzIE5vbmUpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19nZXRzdGF0ZV9fKQorCisgICAgZGVmIHRlc3Rfc2V0c3RhdGUoc2VsZik6CisgICAgICAgICMgVGhpcyBjaGVja3Mgd2hldGhlciBfX3NldHN0YXRlX18gZG9lcyBwcm9wZXIgaW5wdXQgdmFsaWRhdGlvbi4KKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBtZW1pby5fX3NldHN0YXRlX18oKGIibm8gZXJyb3IiLCAwLCBOb25lKSkKKyAgICAgICAgbWVtaW8uX19zZXRzdGF0ZV9fKChieXRlYXJyYXkoYiJubyBlcnJvciIpLCAwLCBOb25lKSkKKyAgICAgICAgbWVtaW8uX19zZXRzdGF0ZV9fKChiIm5vIGVycm9yIiwgMCwgeydzcGFtJzogM30pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIChiIiIsIC0xLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgidW5pY29kZSIsIDAsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIiIiwgMC4wLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIChiIiIsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIibGVuLXRlc3QiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAwKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIiY2xvc2VkIiwgMCwgTm9uZSkpCisKKworY2xhc3MgQ1N0cmluZ0lPVGVzdChQeVN0cmluZ0lPVGVzdCk6CisgICAgaW9jbGFzcyA9IGlvLlN0cmluZ0lPCisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorCiAgICAgIyBYWFg6IEZvciB0aGUgUHl0aG9uIHZlcnNpb24gb2YgaW8uU3RyaW5nSU8sIHRoaXMgaXMgaGlnaGx5CiAgICAgIyBkZXBlbmRlbnQgb24gdGhlIGVuY29kaW5nIHVzZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlci4KLSAgICAjIGRlZiB0ZXN0X3dpZGVjaGFyKHNlbGYpOgotICAgICMgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiXFUwMDAyMDMwYVxVMDAwMjAzNDciKQotICAgICMgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKLSAgICAjCi0gICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCi0gICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby53cml0ZShidWYpLCBsZW4oYnVmKSkKLSAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgbGVuKGJ1ZikpCi0gICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCi0gICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby53cml0ZShidWYpLCBsZW4oYnVmKSkKLSAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgbGVuKGJ1ZikgKiAyKQotICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmICsgYnVmKQorICAgIGRlZiB0ZXN0X3dpZGVjaGFyKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIlxVMDAwMjAzMGFcVTAwMDIwMzQ3IikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQogCi1pZiBoYXNfY19pbXBsZW1lbnRhdGlvbjoKLSAgICBjbGFzcyBDQnl0ZXNJT1Rlc3QoUHlCeXRlc0lPVGVzdCk6Ci0gICAgICAgIGlvY2xhc3MgPSBpby5CeXRlc0lPCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLndyaXRlKGJ1ZiksIGxlbihidWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgbGVuKGJ1ZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLndyaXRlKGJ1ZiksIGxlbihidWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgbGVuKGJ1ZikgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZiArIGJ1ZikKKworICAgIGRlZiB0ZXN0X2dldHN0YXRlKHNlbGYpOgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIHN0YXRlID0gbWVtaW8uX19nZXRzdGF0ZV9fKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RhdGUpLCA0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMF0sIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVsxXSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMl0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3RhdGVbM10sIGRpY3QpIG9yIHN0YXRlWzNdIGlzIE5vbmUpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19nZXRzdGF0ZV9fKQorCisgICAgZGVmIHRlc3Rfc2V0c3RhdGUoc2VsZik6CisgICAgICAgICMgVGhpcyBjaGVja3Mgd2hldGhlciBfX3NldHN0YXRlX18gZG9lcyBwcm9wZXIgaW5wdXQgdmFsaWRhdGlvbi4KKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBtZW1pby5fX3NldHN0YXRlX18oKCJubyBlcnJvciIsICJcbiIsIDAsIE5vbmUpKQorICAgICAgICBtZW1pby5fX3NldHN0YXRlX18oKCJubyBlcnJvciIsICIiLCAwLCB7J3NwYW0nOiAzfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCIiLCAiZiIsIDAsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiIiwgIiIsIC0xLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIChiIiIsICIiLCAwLCBOb25lKSkKKyAgICAgICAgIyB0cnVuayBpcyBtb3JlIHRvbGVyYW50IHRoYW4gcHkzayBvbiB0aGUgdHlwZSBvZiB0aGUgbmV3bGluZSBwYXJhbQorICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiIiwgYiIiLCAwLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiIiwgIiIsIDAuMCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoIiIsICIiLCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgibGVuLXRlc3QiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAwKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCJjbG9zZWQiLCAiIiwgMCwgTm9uZSkpCisKKworY2xhc3MgQ1N0cmluZ0lPUGlja2xlVGVzdChQeVN0cmluZ0lPUGlja2xlVGVzdCk6CisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorCisgICAgY2xhc3MgaW9jbGFzcyhpby5TdHJpbmdJTyk6CisgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGlvLlN0cmluZ0lPKCphcmdzLCAqKmt3YXJncyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbD0yKSkKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBwYXNzCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gW1B5Qnl0ZXNJT1Rlc3QsIFB5U3RyaW5nSU9UZXN0XQotICAgIGlmIGhhc19jX2ltcGxlbWVudGF0aW9uOgotICAgICAgICB0ZXN0cy5leHRlbmQoW0NCeXRlc0lPVGVzdF0pCi0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgdGVzdHMgPSBbUHlCeXRlc0lPVGVzdCwgUHlTdHJpbmdJT1Rlc3QsIENCeXRlc0lPVGVzdCwgQ1N0cmluZ0lPVGVzdCwKKyAgICAgICAgICAgICBQeVN0cmluZ0lPUGlja2xlVGVzdCwgQ1N0cmluZ0lPUGlja2xlVGVzdF0KKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weSBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjVkZGVhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CkBAIC0wLDAgKzEsMzYxIEBACisiIiJVbml0IHRlc3RzIGZvciB0aGUgbWVtb3J5dmlldworCitYWFggV2UgbmVlZCBtb3JlIHRlc3RzISBTb21lIHRlc3RzIGFyZSBpbiB0ZXN0X2J5dGVzCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgZ2MKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgYXJyYXkKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgaW8KKworCitjbGFzcyBBYnN0cmFjdE1lbW9yeVRlc3RzOgorICAgIHNvdXJjZV9ieXRlcyA9IGIiYWJjZGVmIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9zb3VyY2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZV9ieXRlcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIF90eXBlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihOb25lLCBbc2VsZi5yb190eXBlLCBzZWxmLnJ3X3R5cGVdKQorCisgICAgZGVmIGNoZWNrX2dldGl0ZW1fd2l0aF90eXBlKHNlbGYsIHRwKToKKyAgICAgICAgaXRlbSA9IHNlbGYuZ2V0aXRlbV90eXBlCisgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgIG9sZHJlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KGIpCisgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVswXSwgaXRlbShiImEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1bMF0sIGJ5dGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bNV0sIGl0ZW0oYiJmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVstMV0sIGl0ZW0oYiJmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVstNl0sIGl0ZW0oYiJhIikpCisgICAgICAgICMgQm91bmRzIGNoZWNraW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogbVs2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBtWy03XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBtW3N5cy5tYXhzaXplXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBtWy1zeXMubWF4c2l6ZV0pCisgICAgICAgICMgVHlwZSBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbVtOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1bMC4wXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1bImEiXSkKKyAgICAgICAgbSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoYiksIG9sZHJlZmNvdW50KQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgc2VsZi5jaGVja19nZXRpdGVtX3dpdGhfdHlwZSh0cCkKKworICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0pLCBbbVtpXSBmb3IgaSBpbiByYW5nZShsZW4obSkpXSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uX19yZXByX18oKSwgc3RyKQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbV9yZWFkb25seShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucm9fdHlwZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiID0gc2VsZi5yb190eXBlKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgb2xkcmVmY291bnQgPSBzeXMuZ2V0cmVmY291bnQoYikKKyAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgZGVmIHNldGl0ZW0odmFsdWUpOgorICAgICAgICAgICAgbVswXSA9IHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgYiJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRpdGVtLCA2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRpdGVtLCBtZW1vcnl2aWV3KGIiYSIpKQorICAgICAgICBtID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChiKSwgb2xkcmVmY291bnQpCisKKyAgICBkZWYgdGVzdF9zZXRpdGVtX3dyaXRhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5yd190eXBlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRwID0gc2VsZi5yd190eXBlCisgICAgICAgIGIgPSBzZWxmLnJ3X3R5cGUoc2VsZi5fc291cmNlKQorICAgICAgICBvbGRyZWZjb3VudCA9IHN5cy5nZXRyZWZjb3VudChiKQorICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICBtWzBdID0gdHAoYiIwIikKKyAgICAgICAgc2VsZi5fY2hlY2tfY29udGVudHModHAsIGIsIGIiMGJjZGVmIikKKyAgICAgICAgbVsxOjNdID0gdHAoYiIxMiIpCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBiIjAxMmRlZiIpCisgICAgICAgIG1bMToxXSA9IHRwKGIiIikKKyAgICAgICAgc2VsZi5fY2hlY2tfY29udGVudHModHAsIGIsIGIiMDEyZGVmIikKKyAgICAgICAgbVs6XSA9IHRwKGIiYWJjZGVmIikKKyAgICAgICAgc2VsZi5fY2hlY2tfY29udGVudHModHAsIGIsIGIiYWJjZGVmIikKKworICAgICAgICAjIE92ZXJsYXBwaW5nIGNvcGllcyBvZiBhIHZpZXcgaW50byBpdHNlbGYKKyAgICAgICAgbVswOjNdID0gbVsyOjVdCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBiImNkZWRlZiIpCisgICAgICAgIG1bOl0gPSB0cChiImFiY2RlZiIpCisgICAgICAgIG1bMjo1XSA9IG1bMDozXQorICAgICAgICBzZWxmLl9jaGVja19jb250ZW50cyh0cCwgYiwgYiJhYmFiY2YiKQorCisgICAgICAgIGRlZiBzZXRpdGVtKGtleSwgdmFsdWUpOgorICAgICAgICAgICAgbVtrZXldID0gdHAodmFsdWUpCisgICAgICAgICMgQm91bmRzIGNoZWNraW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHNldGl0ZW0sIDYsIGIiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHNldGl0ZW0sIC03LCBiImEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzZXRpdGVtLCBzeXMubWF4c2l6ZSwgYiJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgc2V0aXRlbSwgLXN5cy5tYXhzaXplLCBiImEiKQorICAgICAgICAjIFdyb25nIGluZGV4L3NsaWNlIHR5cGVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgMC4wLCBiImEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGl0ZW0sICgwLCksIGIiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgImEiLCBiImEiKQorICAgICAgICAjIFRyeWluZyB0byByZXNpemUgdGhlIG1lbW9yeSBvYmplY3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0aXRlbSwgMCwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRpdGVtLCAwLCBiImFiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0aXRlbSwgc2xpY2UoMSwxKSwgYiJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0aXRlbSwgc2xpY2UoMCwyKSwgYiJhIikKKworICAgICAgICBtID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChiKSwgb2xkcmVmY291bnQpCisKKyAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBkZWwgbVsxXQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGRlbCBtWzE6NF0KKworICAgIGRlZiB0ZXN0X3RvYnl0ZXMoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KHRwKHNlbGYuX3NvdXJjZSkpCisgICAgICAgICAgICBiID0gbS50b2J5dGVzKCkKKyAgICAgICAgICAgICMgVGhpcyBjYWxscyBzZWxmLmdldGl0ZW1fdHlwZSgpIG9uIGVhY2ggc2VwYXJhdGUgYnl0ZSBvZiBiImFiY2RlZiIKKyAgICAgICAgICAgIGV4cGVjdGVkID0gYiIiLmpvaW4oCisgICAgICAgICAgICAgICAgc2VsZi5nZXRpdGVtX3R5cGUoYykgZm9yIGMgaW4gYiJhYmNkZWYiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiLCBieXRlcykKKworICAgIGRlZiB0ZXN0X3RvbGlzdChzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcodHAoc2VsZi5fc291cmNlKSkKKyAgICAgICAgICAgIGwgPSBtLnRvbGlzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIG1hcChvcmQsIGIiYWJjZGVmIikpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIG1lbW9yeXZpZXdzIGNhbiBjb21wYXJlIGZvciBlcXVhbGl0eSB3aXRoIG90aGVyIG9iamVjdHMKKyAgICAgICAgIyBoYXZpbmcgdGhlIGJ1ZmZlciBpbnRlcmZhY2UuCisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KHRwKHNlbGYuX3NvdXJjZSkpCisgICAgICAgICAgICBmb3IgdHBfY29tcCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSA9PSB0cF9jb21wKGIiYWJjZGVmIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtICE9IHRwX2NvbXAoYiJhYmNkZWYiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0gPT0gdHBfY29tcChiImFiY2RlIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0gIT0gdHBfY29tcChiImFiY2RlIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtID09IHRwX2NvbXAoYiJhYmNkZTEiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSAhPSB0cF9jb21wKGIiYWJjZGUxIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSA9PSBtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0gPT0gbVs6XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtWzA6Nl0gPT0gbVs6XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobVswOjVdID09IG0pCisKKyAgICAgICAgICAgICMgQ29tcGFyaXNvbiB3aXRoIG9iamVjdHMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCB0aGUgYnVmZmVyIEFQSQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtID09IHUiYWJjZGVmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtICE9IHUiYWJjZGVmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodSJhYmNkZWYiID09IG0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodSJhYmNkZWYiICE9IG0pCisKKyAgICAgICAgICAgICMgVW5vcmRlcmVkIGNvbXBhcmlzb25zIGFyZSB1bmltcGxlbWVudGVkLCBhbmQgdGhlcmVmb3JlIGdpdmUKKyAgICAgICAgICAgICMgYXJiaXRyYXJ5IHJlc3VsdHMgKHRoZXkgcmFpc2UgYSBUeXBlRXJyb3IgaW4gcHkzaykKKworICAgIGRlZiBjaGVja19hdHRyaWJ1dGVzX3dpdGhfdHlwZShzZWxmLCB0cCk6CisgICAgICAgIG0gPSBzZWxmLl92aWV3KHRwKHNlbGYuX3NvdXJjZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5mb3JtYXQsIHNlbGYuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobS5mb3JtYXQsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zaXplLCBzZWxmLml0ZW1zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubmRpbSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnNoYXBlLCAoNiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnN0cmlkZXMsIChzZWxmLml0ZW1zaXplLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zdWJvZmZzZXRzLCBOb25lKQorICAgICAgICByZXR1cm4gbQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlc19yZWFkb25seShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucm9fdHlwZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBtID0gc2VsZi5jaGVja19hdHRyaWJ1dGVzX3dpdGhfdHlwZShzZWxmLnJvX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZWFkb25seSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfd3JpdGFibGUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJ3X3R5cGU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbSA9IHNlbGYuY2hlY2tfYXR0cmlidXRlc193aXRoX3R5cGUoc2VsZi5yd190eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmVhZG9ubHksIEZhbHNlKQorCisgICAgIyBEaXNhYmxlZDogdW5pY29kZSB1c2VzIHRoZSBvbGQgYnVmZmVyIEFQSSBpbiAyLngKKworICAgICNkZWYgdGVzdF9nZXRidWZmZXIoc2VsZik6CisgICAgICAgICMjIFRlc3QgUHlPYmplY3RfR2V0QnVmZmVyKCkgb24gYSBtZW1vcnl2aWV3IG9iamVjdC4KKyAgICAgICAgI2ZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgICNiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgI29sZHJlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KGIpCisgICAgICAgICAgICAjbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgICNvbGR2aWV3cmVmY291bnQgPSBzeXMuZ2V0cmVmY291bnQobSkKKyAgICAgICAgICAgICNzID0gdW5pY29kZShtLCAidXRmLTgiKQorICAgICAgICAgICAgI3NlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBzLmVuY29kZSgidXRmLTgiKSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChtKSwgb2xkdmlld3JlZmNvdW50KQorICAgICAgICAgICAgI20gPSBOb25lCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoYiksIG9sZHJlZmNvdW50KQorCisgICAgZGVmIHRlc3RfZ2Moc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRwLCB0eXBlKToKKyAgICAgICAgICAgICAgICAjIElmIHRwIGlzIGEgZmFjdG9yeSByYXRoZXIgdGhhbiBhIHBsYWluIHR5cGUsIHNraXAKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBjbGFzcyBNeVNvdXJjZSh0cCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgY2xhc3MgTXlPYmplY3Q6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAjIENyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZSB0aHJvdWdoIGEgbWVtb3J5dmlldyBvYmplY3QKKyAgICAgICAgICAgIGIgPSBNeVNvdXJjZSh0cChiJ2FiYycpKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIG8gPSBNeU9iamVjdCgpCisgICAgICAgICAgICBiLm0gPSBtCisgICAgICAgICAgICBiLm8gPSBvCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKG8pCisgICAgICAgICAgICBiID0gbSA9IG8gPSBOb25lCisgICAgICAgICAgICAjIFRoZSBjeWNsZSBtdXN0IGJlIGJyb2tlbgorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cigpKQorCisgICAgZGVmIHRlc3Rfd3JpdGFibGVfcmVhZG9ubHkoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEwNDUxOiBtZW1vcnl2aWV3IGluY29ycmVjdGx5IGV4cG9zZXMgYSByZWFkb25seQorICAgICAgICAjIGJ1ZmZlciBhcyB3cml0YWJsZSBjYXVzaW5nIGEgc2VnZmF1bHQgaWYgdXNpbmcgbW1hcAorICAgICAgICB0cCA9IHNlbGYucm9fdHlwZQorICAgICAgICBpZiB0cCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgIGkgPSBpby5CeXRlc0lPKGInWlpaWicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaS5yZWFkaW50bywgbSkKKworIyBWYXJpYXRpb25zIG9uIHNvdXJjZSBvYmplY3RzIGZvciB0aGUgYnVmZmVyOiBieXRlcy1saWtlIG9iamVjdHMsIHRoZW4gYXJyYXlzCisjIHdpdGggaXRlbXNpemUgPiAxLgorIyBOT1RFOiBzdXBwb3J0IGZvciBtdWx0aS1kaW1lbnNpb25hbCBvYmplY3RzIGlzIHVuaW1wbGVtZW50ZWQuCisKK2NsYXNzIEJhc2VCeXRlc01lbW9yeVRlc3RzKEFic3RyYWN0TWVtb3J5VGVzdHMpOgorICAgIHJvX3R5cGUgPSBieXRlcworICAgIHJ3X3R5cGUgPSBieXRlYXJyYXkKKyAgICBnZXRpdGVtX3R5cGUgPSBieXRlcworICAgIGl0ZW1zaXplID0gMQorICAgIGZvcm1hdCA9ICdCJworCisjIERpc2FibGVkOiBhcnJheS5hcnJheSgpIGRvZXMgbm90IHN1cHBvcnQgdGhlIG5ldyBidWZmZXIgQVBJIGluIDIueAorCisjY2xhc3MgQmFzZUFycmF5TWVtb3J5VGVzdHMoQWJzdHJhY3RNZW1vcnlUZXN0cyk6CisgICAgI3JvX3R5cGUgPSBOb25lCisgICAgI3J3X3R5cGUgPSBsYW1iZGEgc2VsZiwgYjogYXJyYXkuYXJyYXkoJ2knLCBtYXAob3JkLCBiKSkKKyAgICAjZ2V0aXRlbV90eXBlID0gbGFtYmRhIHNlbGYsIGI6IGFycmF5LmFycmF5KCdpJywgbWFwKG9yZCwgYikpLnRvc3RyaW5nKCkKKyAgICAjaXRlbXNpemUgPSBhcnJheS5hcnJheSgnaScpLml0ZW1zaXplCisgICAgI2Zvcm1hdCA9ICdpJworCisgICAgI2RlZiB0ZXN0X2dldGJ1ZmZlcihzZWxmKToKKyAgICAgICAgIyMgWFhYIFRlc3Qgc2hvdWxkIGJlIGFkYXB0ZWQgZm9yIG5vbi1ieXRlIGJ1ZmZlcnMKKyAgICAgICAgI3Bhc3MKKworICAgICNkZWYgdGVzdF90b2xpc3Qoc2VsZik6CisgICAgICAgICMjIFhYWCBOb3RJbXBsZW1lbnRlZEVycm9yOiB0b2xpc3QoKSBvbmx5IHN1cHBvcnRzIGJ5dGUgdmlld3MKKyAgICAgICAgI3Bhc3MKKworCisjIFZhcmlhdGlvbnMgb24gaW5kaXJlY3Rpb24gbGV2ZWxzOiBtZW1vcnl2aWV3LCBzbGljZSBvZiBtZW1vcnl2aWV3LAorIyBzbGljZSBvZiBzbGljZSBvZiBtZW1vcnl2aWV3LgorIyBUaGlzIGlzIGltcG9ydGFudCB0byB0ZXN0IGFsbG9jYXRpb24gc3VidGxldGllcy4KKworY2xhc3MgQmFzZU1lbW9yeXZpZXdUZXN0czoKKyAgICBkZWYgX3ZpZXcoc2VsZiwgb2JqKToKKyAgICAgICAgcmV0dXJuIG1lbW9yeXZpZXcob2JqKQorCisgICAgZGVmIF9jaGVja19jb250ZW50cyhzZWxmLCB0cCwgb2JqLCBjb250ZW50cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB0cChjb250ZW50cykpCisKK2NsYXNzIEJhc2VNZW1vcnlTbGljZVRlc3RzOgorICAgIHNvdXJjZV9ieXRlcyA9IGIiWGFiY2RlZlkiCisKKyAgICBkZWYgX3ZpZXcoc2VsZiwgb2JqKToKKyAgICAgICAgbSA9IG1lbW9yeXZpZXcob2JqKQorICAgICAgICByZXR1cm4gbVsxOjddCisKKyAgICBkZWYgX2NoZWNrX2NvbnRlbnRzKHNlbGYsIHRwLCBvYmosIGNvbnRlbnRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmpbMTo3XSwgdHAoY29udGVudHMpKQorCisgICAgZGVmIHRlc3RfcmVmcyhzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgbSA9IG1lbW9yeXZpZXcodHAoc2VsZi5fc291cmNlKSkKKyAgICAgICAgICAgIG9sZHJlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KG0pCisgICAgICAgICAgICBtWzE6Ml0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KG0pLCBvbGRyZWZjb3VudCkKKworY2xhc3MgQmFzZU1lbW9yeVNsaWNlU2xpY2VUZXN0czoKKyAgICBzb3VyY2VfYnl0ZXMgPSBiIlhhYmNkZWZZIgorCisgICAgZGVmIF92aWV3KHNlbGYsIG9iaik6CisgICAgICAgIG0gPSBtZW1vcnl2aWV3KG9iaikKKyAgICAgICAgcmV0dXJuIG1bOjddWzE6XQorCisgICAgZGVmIF9jaGVja19jb250ZW50cyhzZWxmLCB0cCwgb2JqLCBjb250ZW50cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqWzE6N10sIHRwKGNvbnRlbnRzKSkKKworCisjIENvbmNyZXRlIHRlc3QgY2xhc3NlcworCitjbGFzcyBCeXRlc01lbW9yeXZpZXdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLAorICAgIEJhc2VNZW1vcnl2aWV3VGVzdHMsIEJhc2VCeXRlc01lbW9yeVRlc3RzKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBvYiA9IHRwKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZW1vcnl2aWV3KG9iKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZW1vcnl2aWV3KG9iamVjdD1vYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbW9yeXZpZXcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbW9yeXZpZXcsIG9iLCBvYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtb3J5dmlldywgYXJndW1lbnQ9b2IpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbW9yeXZpZXcsIG9iLCBhcmd1bWVudD1UcnVlKQorCisjY2xhc3MgQXJyYXlNZW1vcnl2aWV3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICAjQmFzZU1lbW9yeXZpZXdUZXN0cywgQmFzZUFycmF5TWVtb3J5VGVzdHMpOgorCisgICAgI2RlZiB0ZXN0X2FycmF5X2Fzc2lnbihzZWxmKToKKyAgICAgICAgIyMgSXNzdWUgIzQ1Njk6IHNlZ2ZhdWx0IHdoZW4gbXV0YXRpbmcgYSBtZW1vcnl2aWV3IHdpdGggaXRlbXNpemUgIT0gMQorICAgICAgICAjYSA9IGFycmF5LmFycmF5KCdpJywgcmFuZ2UoMTApKQorICAgICAgICAjbSA9IG1lbW9yeXZpZXcoYSkKKyAgICAgICAgI25ld19hID0gYXJyYXkuYXJyYXkoJ2knLCByYW5nZSg5LCAtMSwgLTEpKQorICAgICAgICAjbVs6XSA9IG5ld19hCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKGEsIG5ld19hKQorCisKK2NsYXNzIEJ5dGVzTWVtb3J5U2xpY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLAorICAgIEJhc2VNZW1vcnlTbGljZVRlc3RzLCBCYXNlQnl0ZXNNZW1vcnlUZXN0cyk6CisgICAgcGFzcworCisjY2xhc3MgQXJyYXlNZW1vcnlTbGljZVRlc3QodW5pdHRlc3QuVGVzdENhc2UsCisgICAgI0Jhc2VNZW1vcnlTbGljZVRlc3RzLCBCYXNlQXJyYXlNZW1vcnlUZXN0cyk6CisgICAgI3Bhc3MKKworY2xhc3MgQnl0ZXNNZW1vcnlTbGljZVNsaWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICBCYXNlTWVtb3J5U2xpY2VTbGljZVRlc3RzLCBCYXNlQnl0ZXNNZW1vcnlUZXN0cyk6CisgICAgcGFzcworCisjY2xhc3MgQXJyYXlNZW1vcnlTbGljZVNsaWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICAjQmFzZU1lbW9yeVNsaWNlU2xpY2VUZXN0cywgQmFzZUFycmF5TWVtb3J5VGVzdHMpOgorICAgICNwYXNzCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWhsaWIucHkgYi9MaWIvdGVzdC90ZXN0X21obGliLnB5CmluZGV4IDA0NTcxZWEuLjk5NmRmNDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWhsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9taGxpYi5weQpAQCAtNyw3ICs3LDcgQEAKICMjIyAgICAgIG1obGliLiAgSXQgc2hvdWxkLgogCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCBUZXN0U2tpcHBlZCwgaW1wb3J0X21vZHVsZQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIGltcG9ydF9tb2R1bGUKIGltcG9ydCBvcywgU3RyaW5nSU8KIGltcG9ydCBzeXMKIG1obGliID0gaW1wb3J0X21vZHVsZSgnbWhsaWInLCBkZXByZWNhdGVkPVRydWUpCkBAIC0yMSw4ICsyMSw4IEBACiAgICAgIyBsaW5rIGNvdW50cywgYW5kIHRoYXQgY2F1c2VzIHRlc3RfbGlzdGZvbGRlcnMoKSBoZXJlIHRvIGdldCBiYWNrCiAgICAgIyBhbiBlbXB0eSBsaXN0IGZyb20gaXRzIGNhbGwgb2YgbGlzdGFsbGZvbGRlcnMoKS4KICAgICAjIFRoZSBvdGhlciB0ZXN0cyBoZXJlIHBhc3Mgb24gV2luZG93cy4KLSAgICByYWlzZSBUZXN0U2tpcHBlZCgic2tpcHBlZCBvbiAlcyAtLSAiICUgc3lzLnBsYXRmb3JtICsKLSAgICAgICAgICAgICAgICAgICAgICAidG9vIG1hbnkgVW5peCBhc3N1bXB0aW9ucyIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNraXBwZWQgb24gJXMgLS0gIiAlIHN5cy5wbGF0Zm9ybSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtYW55IFVuaXggYXNzdW1wdGlvbnMiKQogCiBfbWhyb290ID0gVEVTVEZOKyJfTUgiCiBfbWhwYXRoID0gb3MucGF0aC5qb2luKF9taHJvb3QsICJNSCIpCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgd3JpdGVDdXJNZXNzYWdlKCdpbmJveCcsIDIpCiAgICAgICAgIG1oID0gZ2V0TUgoKQogCi0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIGVxKG1oLmdldHByb2ZpbGUoJ0VkaXRvcicpLCAnZW1hY3MnKQogICAgICAgICBlcShtaC5nZXRwcm9maWxlKCdub3Qtc2V0JyksIE5vbmUpCiAgICAgICAgIGVxKG1oLmdldHBhdGgoKSwgb3MucGF0aC5hYnNwYXRoKF9taHBhdGgpKQpAQCAtMTcxLDcgKzE3MSw3IEBACiAKICAgICBkZWYgdGVzdF9saXN0Zm9sZGVycyhzZWxmKToKICAgICAgICAgbWggPSBnZXRNSCgpCi0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAKICAgICAgICAgZm9sZGVycyA9IG1oLmxpc3Rmb2xkZXJzKCkKICAgICAgICAgZm9sZGVycy5zb3J0KCkKQEAgLTE5OCw3ICsxOTgsNyBAQAogCiAgICAgZGVmIHRlc3Rfc2VxdWVuY2Uoc2VsZik6CiAgICAgICAgIG1oID0gZ2V0TUgoKQotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICB3cml0ZUN1ck1lc3NhZ2UoJ3dpZGUnLCA1NSkKIAogICAgICAgICBmID0gbWgub3BlbmZvbGRlcignd2lkZScpCkBAIC0yNTMsMTIgKzI1MywxMiBAQAogCiAgICAgZGVmIHRlc3RfbW9kaWZ5KHNlbGYpOgogICAgICAgICBtaCA9IGdldE1IKCkKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKIAogICAgICAgICBtaC5tYWtlZm9sZGVyKCJkdW1teTEiKQotICAgICAgICBzZWxmLmFzc2VydF8oImR1bW15MSIgaW4gbWgubGlzdGZvbGRlcnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZHVtbXkxIiwgbWgubGlzdGZvbGRlcnMoKSkKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihfbWhwYXRoLCAiZHVtbXkxIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKHBhdGgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICAgICAgZiA9IG1oLm9wZW5mb2xkZXIoJ2R1bW15MScpCiAgICAgICAgIGRlZiBjcmVhdGUobik6CkBAIC0zMTAsMTIgKzMxMCwxMiBAQAogCiAgICAgICAgIG1oLmRlbGV0ZWZvbGRlcignZHVtbXkxJykKICAgICAgICAgbWguZGVsZXRlZm9sZGVyKCdkdW1teTInKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2R1bW15MScgbm90IGluIG1oLmxpc3Rmb2xkZXJzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgb3MucGF0aC5leGlzdHMocGF0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2R1bW15MScsIG1oLmxpc3Rmb2xkZXJzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBtaCA9IGdldE1IKCkKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKIAogICAgICAgICBmID0gbWgub3BlbmZvbGRlcignaW5ib3gnKQogICAgICAgICBtc2cgPSBmLm9wZW5tZXNzYWdlKDEpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21pbWV0b29scy5weSBiL0xpYi90ZXN0L3Rlc3RfbWltZXRvb2xzLnB5CmluZGV4IGVkMDFlZGUuLjg2YTI2ZGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWltZXRvb2xzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWltZXRvb2xzLnB5CkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIHMgPSBzZXQoWyIiXSkKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CiAgICAgICAgICAgICBuYiA9IG1pbWV0b29scy5jaG9vc2VfYm91bmRhcnkoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5iIG5vdCBpbiBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYiwgcykKICAgICAgICAgICAgIHMuYWRkKG5iKQogCiAgICAgZGVmIHRlc3RfbWVzc2FnZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5IGIvTGliL3Rlc3QvdGVzdF9taW1ldHlwZXMucHkKaW5kZXggMDE5MGMyZi4uMzUwOGI1NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9taW1ldHlwZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9taW1ldHlwZXMucHkKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgbWltZXR5cGVzCiBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cwogCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCkBAIC00Nyw3ICs0OCw3IEBACiAKICAgICBkZWYgdGVzdF9ndWVzc19hbGxfdHlwZXMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgICMgRmlyc3QgdHJ5IHN0cmljdC4gIFVzZSBhIHNldCBoZXJlIGZvciB0ZXN0aW5nIHRoZSByZXN1bHRzIGJlY2F1c2UgaWYKICAgICAgICAgIyB0ZXN0X3VybGxpYjIgaXMgcnVuIGJlZm9yZSB0ZXN0X21pbWV0eXBlcywgZ2xvYmFsIHN0YXRlIGlzIG1vZGlmaWVkCiAgICAgICAgICMgc3VjaCB0aGF0IHRoZSAnYWxsJyBzZXQgd2lsbCBoYXZlIG1vcmUgaXRlbXMgaW4gaXQuCkBAIC02Miw4ICs2MywzMSBAQAogICAgICAgICBlcShhbGwsIFtdKQogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKSwgIldpbmRvd3Mgb25seSIpCitjbGFzcyBXaW4zMk1pbWVUeXBlc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgZW5zdXJlIGFsbCBlbnRyaWVzIGFjdHVhbGx5IGNvbWUgZnJvbSB0aGUgV2luZG93cyByZWdpc3RyeQorICAgICAgICBzZWxmLm9yaWdpbmFsX3R5cGVzX21hcCA9IG1pbWV0eXBlcy50eXBlc19tYXAuY29weSgpCisgICAgICAgIG1pbWV0eXBlcy50eXBlc19tYXAuY2xlYXIoKQorICAgICAgICBtaW1ldHlwZXMuaW5pdCgpCisgICAgICAgIHNlbGYuZGIgPSBtaW1ldHlwZXMuTWltZVR5cGVzKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyByZXN0b3JlIGRlZmF1bHQgc2V0dGluZ3MKKyAgICAgICAgbWltZXR5cGVzLnR5cGVzX21hcC5jbGVhcigpCisgICAgICAgIG1pbWV0eXBlcy50eXBlc19tYXAudXBkYXRlKHNlbGYub3JpZ2luYWxfdHlwZXNfbWFwKQorCisgICAgZGVmIHRlc3RfcmVnaXN0cnlfcGFyc2luZyhzZWxmKToKKyAgICAgICAgIyB0aGUgb3JpZ2luYWwsIG1pbmltdW0gY29udGVudHMgb2YgdGhlIE1JTUUgZGF0YWJhc2UgaW4gdGhlCisgICAgICAgICMgV2luZG93cyByZWdpc3RyeSBpcyB1bmRvY3VtZW50ZWQgQUZBSUsuCisgICAgICAgICMgVXNlIGZpbGUgdHlwZXMgdGhhdCBzaG91bGQgKmFsd2F5cyogZXhpc3Q6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX3R5cGUoImZvby50eHQiKSwgKCJ0ZXh0L3BsYWluIiwgTm9uZSkpCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE1pbWVUeXBlc1Rlc3RDYXNlKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTWltZVR5cGVzVGVzdENhc2UsCisgICAgICAgIFdpbjMyTWltZVR5cGVzVGVzdENhc2UKKyAgICAgICAgKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkgYi9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkKaW5kZXggMTIwYzM3Yy4uZWZiOTI0MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWluaWRvbS5weQpAQCAtMSwxMCArMSw4IEBACiAjIHRlc3QgZm9yIHhtbC5kb20ubWluaWRvbQogCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKIGltcG9ydCBwaWNrbGUKIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QsIFRlc3RTa2lwcGVkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAogaW1wb3J0IHhtbC5kb20KQEAgLTE1LDEyICsxMyw4IEBACiBmcm9tIHhtbC5kb20ubWluaWRvbSBpbXBvcnQgZ2V0RE9NSW1wbGVtZW50YXRpb24KIAogCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIGJhc2UgPSBzeXMuYXJndlswXQotZWxzZToKLSAgICBiYXNlID0gX19maWxlX18KLXRzdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJhc2UpLCAidGVzdCIrb3MuZXh0c2VwKyJ4bWwiKQotZGVsIGJhc2UKK3RzdGZpbGUgPSBmaW5kZmlsZSgidGVzdC54bWwiLCBzdWJkaXI9InhtbHRlc3RkYXRhIikKKwogCiAjIFRoZSB0ZXN0cyBvZiBEb2N1bWVudFR5cGUgaW1wb3J0aW5nIHVzZSB0aGVzZSBoZWxwZXJzIHRvIGNvbnN0cnVjdAogIyB0aGUgZG9jdW1lbnRzIHRvIHdvcmsgd2l0aCwgc2luY2Ugbm90IGFsbCBET00gYnVpbGRlcnMgYWN0dWFsbHkKQEAgLTczNCw3ICs3MjgsNyBAQAogICAgIGRlZiBjaGVja19jbG9uZV9hdHRyaWJ1dGUoc2VsZiwgZGVlcCwgdGVzdE5hbWUpOgogICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYyBhdHRyPSd2YWx1ZScvPiIpCiAgICAgICAgIGF0dHIgPSBkb2MuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoImF0dHIiKQotICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKGF0dHIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYXR0ciwgTm9uZSkKICAgICAgICAgY2xvbmUgPSBhdHRyLmNsb25lTm9kZShkZWVwKQogICAgICAgICBzZWxmLmNvbmZpcm0obm90IGNsb25lLmlzU2FtZU5vZGUoYXR0cikpCiAgICAgICAgIHNlbGYuY29uZmlybShub3QgYXR0ci5pc1NhbWVOb2RlKGNsb25lKSkKQEAgLTc1NCw3ICs3NDgsNyBAQAogICAgIGRlZiBjaGVja19jbG9uZV9waShzZWxmLCBkZWVwLCB0ZXN0TmFtZSk6CiAgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8P3RhcmdldCBkYXRhPz48ZG9jLz4iKQogICAgICAgICBwaSA9IGRvYy5maXJzdENoaWxkCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBpLm5vZGVUeXBlLCBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaS5ub2RlVHlwZSwgTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpCiAgICAgICAgIGNsb25lID0gcGkuY2xvbmVOb2RlKGRlZXApCiAgICAgICAgIHNlbGYuY29uZmlybShjbG9uZS50YXJnZXQgPT0gcGkudGFyZ2V0CiAgICAgICAgICAgICAgICAgYW5kIGNsb25lLmRhdGEgPT0gcGkuZGF0YSkKQEAgLTc5MCwxMiArNzg0LDE4MSBAQAogICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplIC0tIHNpbmdsZSBlbXB0eSBub2RlIHJlbW92ZWQiKQogICAgICAgICBkb2MudW5saW5rKCkKIAorICAgIGRlZiB0ZXN0Tm9ybWFsaXplQ29tYmluZUFuZE5leHRTaWJsaW5nKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoImZpcnN0IikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJzZWNvbmQiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudCgiaSIpKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMworICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDMsCisgICAgICAgICAgICAgICAgInRlc3ROb3JtYWxpemVDb21iaW5lQW5kTmV4dFNpYmxpbmcgLS0gcHJlcGFyYXRpb24iKQorICAgICAgICBkb2Mubm9ybWFsaXplKCkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5kYXRhID09ICJmaXJzdHNlY29uZCIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkIGlzIG5vdCByb290Lmxhc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLnByZXZpb3VzU2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QubGFzdENoaWxkLnByZXZpb3VzU2libGluZyBpcyByb290LmZpcnN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5sYXN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemVDb21iaW5lZEFuZE5leHRTaWJsaW5nIC0tIHJlc3VsdCIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3ROb3JtYWxpemVEZWxldGVXaXRoUHJldlNpYmxpbmcoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiZmlyc3QiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDIsCisgICAgICAgICAgICAgICAgInRlc3ROb3JtYWxpemVEZWxldGVXaXRoUHJldlNpYmxpbmcgLS0gcHJlcGFyYXRpb24iKQorICAgICAgICBkb2Mubm9ybWFsaXplKCkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDEKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5kYXRhID09ICJmaXJzdCIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkIGlzIHJvb3QubGFzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5uZXh0U2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemVEZWxldGVXaXRoUHJldlNpYmxpbmcgLS0gcmVzdWx0IikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhOZXh0U2libGluZyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoInNlY29uZCIpKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDIsCisgICAgICAgICAgICAgICAgInRlc3ROb3JtYWxpemVEZWxldGVXaXRoTmV4dFNpYmxpbmcgLS0gcHJlcGFyYXRpb24iKQorICAgICAgICBkb2Mubm9ybWFsaXplKCkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDEKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5kYXRhID09ICJzZWNvbmQiCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZCBpcyByb290Lmxhc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aE5leHRTaWJsaW5nIC0tIHJlc3VsdCIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3ROb3JtYWxpemVEZWxldGVXaXRoVHdvTm9uVGV4dFNpYmxpbmdzKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudCgiaSIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoImkiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDMKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAzLAorICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aFR3b1NpYmxpbmdzIC0tIHByZXBhcmF0aW9uIikKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQgaXMgbm90IHJvb3QubGFzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5uZXh0U2libGluZyBpcyByb290Lmxhc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5sYXN0Q2hpbGQucHJldmlvdXNTaWJsaW5nIGlzIHJvb3QuZmlyc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290Lmxhc3RDaGlsZC5uZXh0U2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhUd29TaWJsaW5ncyAtLSByZXN1bHQiKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0Tm9ybWFsaXplRGVsZXRlQW5kQ29tYmluZShzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoInNlY29uZCIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJmb3VydGgiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gNQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDUsCisgICAgICAgICAgICAgICAgInRlc3ROb3JtYWxpemVEZWxldGVBbmRDb21iaW5lIC0tIHByZXBhcmF0aW9uIikKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQgaXMgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLmRhdGEgPT0gInNlY29uZGZvdXJ0aCIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLnByZXZpb3VzU2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5uZXh0U2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZURlbGV0ZUFuZENvbWJpbmUgLS0gcmVzdWx0IikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdE5vcm1hbGl6ZVJlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2M+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGkvPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9vPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPG8+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxvPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInQyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjeDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L28+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInQzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3gzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvbz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9kb2M+IikKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgcm9vdC5jaGlsZE5vZGVzWzBdLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIHJvb3QuY2hpbGROb2Rlc1swXS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIngiKSkKKyAgICAgICAgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJ4MiIpKQorICAgICAgICByb290LmNoaWxkTm9kZXNbMV0uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJ4MyIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAzCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMworICAgICAgICAgICAgICAgIGFuZCBsZW4ocm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMpID09IDQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoID09IDQKKyAgICAgICAgICAgICAgICBhbmQgbGVuKHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzKSA9PSAzCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAzCisgICAgICAgICAgICAgICAgYW5kIGxlbihyb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoID09IDIKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplMiAtLSBwcmVwYXJhdGlvbiIpCisgICAgICAgIGRvYy5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDIKKyAgICAgICAgICAgICAgICBhbmQgbGVuKHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyCisgICAgICAgICAgICAgICAgYW5kIGxlbihyb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMgorICAgICAgICAgICAgICAgIGFuZCBsZW4ocm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2RlcykgPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZTIgLS0gY2hpbGROb2RlcyBsZW5ndGhzIikKKyAgICAgICAgc2VsZi5jb25maXJtKHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzFdLmRhdGEgPT0gInR4IgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLmRhdGEgPT0gInQyeDIiCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzFdLmRhdGEgPT0gInQzeDMiCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZTIgLS0gam9pbmVkIHRleHQgZmllbGRzIikKKyAgICAgICAgc2VsZi5jb25maXJtKHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzFdLm5leHRTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV0ucHJldmlvdXNTaWJsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBpcyByb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5uZXh0U2libGluZworICAgICAgICAgICAgICAgICAgICAgICAgaXMgcm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMV0ubmV4dFNpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1sxXS5wcmV2aW91c1NpYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLnByZXZpb3VzU2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLm5leHRTaWJsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBpcyByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1sxXQorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemUyIC0tIHNpYmxpbmcgcG9pbnRlcnMiKQorICAgICAgICBkb2MudW5saW5rKCkKKworCisgICAgZGVmIHRlc3RCdWcwNzc3ODg0KHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPG8+dGV4dDwvbz4iKQorICAgICAgICB0ZXh0ID0gZG9jLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5ub2RlVHlwZSwgTm9kZS5URVhUX05PREUpCisgICAgICAgICMgU2hvdWxkIHJ1biBxdWlldGx5LCBkb2luZyBub3RoaW5nLgorICAgICAgICB0ZXh0Lm5vcm1hbGl6ZSgpCisgICAgICAgIGRvYy51bmxpbmsoKQorCiAgICAgZGVmIHRlc3RCdWcxNDMzNjk0KHNlbGYpOgogICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPG8+PGkvPnQ8L28+IikKICAgICAgICAgbm9kZSA9IGRvYy5kb2N1bWVudEVsZW1lbnQKICAgICAgICAgbm9kZS5jaGlsZE5vZGVzWzFdLm5vZGVWYWx1ZSA9ICIiCiAgICAgICAgIG5vZGUubm9ybWFsaXplKCkKLSAgICAgICAgc2VsZi5jb25maXJtKG5vZGUuY2hpbGROb2Rlc1stMV0ubmV4dFNpYmxpbmcgPT0gTm9uZSwKKyAgICAgICAgc2VsZi5jb25maXJtKG5vZGUuY2hpbGROb2Rlc1stMV0ubmV4dFNpYmxpbmcgaXMgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICJGaW5hbCBjaGlsZCdzIC5uZXh0U2libGluZyBzaG91bGQgYmUgTm9uZSIpCiAKICAgICBkZWYgdGVzdFNpYmxpbmdzKHNlbGYpOgpAQCAtMTA2Myw3ICsxMjI2LDcgQEAKICAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2M+YTwvZG9jPiIpCiAgICAgICAgIGVsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50CiAgICAgICAgIHRleHQgPSBlbGVtLmNoaWxkTm9kZXNbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGV4dC5ub2RlVHlwZSwgTm9kZS5URVhUX05PREUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5ub2RlVHlwZSwgTm9kZS5URVhUX05PREUpCiAKICAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0LCAiYSIpCiAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJiIikpCkBAIC0xMzIwLDYgKzE0ODMsMTMgQEAKICAgICAgICAgZG9jLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVDb21tZW50KCJmb28tLWJhciIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkb2MudG94bWwpCiAKKyAgICBkZWYgdGVzdEVtcHR5WE1MTlNWYWx1ZShzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxlbGVtZW50IHhtbG5zPScnPlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiPGZvby8+XG48L2VsZW1lbnQ+IikKKyAgICAgICAgZG9jMiA9IHBhcnNlU3RyaW5nKGRvYy50b3htbCgpKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jMi5uYW1lc3BhY2VVUkkgPT0geG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChNaW5pZG9tVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5IGIvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CmluZGV4IDU1MDY5NTYuLjA0N2Q3MDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKQEAgLTEsNyArMSw4IEBACi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdAotaW1wb3J0IG1tYXAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlLCB1bmxpbmssIHJlcXVpcmVzCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBvcywgcmUsIGl0ZXJ0b29scworaW1wb3J0IG9zLCByZSwgaXRlcnRvb2xzLCBzb2NrZXQsIHN5cworCittbWFwID0gaW1wb3J0X21vZHVsZSgnbW1hcCcpCiAKIFBBR0VTSVpFID0gbW1hcC5QQUdFU0laRQogCkBAIC0zMjUsNiArMzI2LDM2IEBACiAgICAgICAgICAgICBtZi5jbG9zZSgpCiAgICAgICAgICAgICBmLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2xlbmd0aF8wX29mZnNldChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTA5MTY6IHRlc3QgbWFwcGluZyBvZiByZW1haW5kZXIgb2YgZmlsZSBieSBwYXNzaW5nIDAgZm9yCisgICAgICAgICMgbWFwIGxlbmd0aCB3aXRoIGFuIG9mZnNldCBkb2Vzbid0IGNhdXNlIGEgc2VnZmF1bHQuCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAic3RhdCIpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibmVlZHMgb3Muc3RhdCIpCisgICAgICAgICMgTk9URTogYWxsb2NhdGlvbiBncmFudWxhcml0eSBpcyBjdXJyZW50bHkgNjU1MzYgdW5kZXIgV2luNjQsCisgICAgICAgICMgYW5kIHRoZXJlZm9yZSB0aGUgbWluaW11bSBvZmZzZXQgYWxpZ25tZW50LgorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgoNjU1MzYgKiAyKSAqIGInbScpICMgQXJiaXRyYXJ5IGNoYXJhY3RlcgorCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBtZiA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwLCBvZmZzZXQ9NjU1MzYsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG1mLl9fZ2V0aXRlbV9fLCA4MDAwMCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbWYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbGVuZ3RoXzBfbGFyZ2Vfb2Zmc2V0KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMDk1OTogdGVzdCBtYXBwaW5nIG9mIGEgZmlsZSBieSBwYXNzaW5nIDAgZm9yCisgICAgICAgICMgbWFwIGxlbmd0aCB3aXRoIGEgbGFyZ2Ugb2Zmc2V0IGRvZXNuJ3QgY2F1c2UgYSBzZWdmYXVsdC4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJzdGF0Iik6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZWVkcyBvcy5zdGF0IikKKworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgxMTU2OTkgKiBiJ20nKSAjIEFyYml0cmFyeSBjaGFyYWN0ZXIKKworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAidytiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1tYXAubW1hcCwgZi5maWxlbm8oKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0yMTQ3NDE4MTEyKQorCiAgICAgZGVmIHRlc3RfbW92ZShzZWxmKToKICAgICAgICAgIyBtYWtlIG1vdmUgd29ya3MgZXZlcnl3aGVyZSAoNjQtYml0IGZvcm1hdCBwcm9ibGVtIGVhcmxpZXIpCiAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3crJykKQEAgLTM1OCwxNSArMzg5LDIyIEBACiAgICAgICAgICAgICAgICAgbS5tb3ZlKHNvdXJjZSwgZGVzdCwgc2l6ZSkKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5tb3ZlLCAtMSwgLTEsIC0xKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIC0xLCAtMSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5tb3ZlLCAtMSwgMCwgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ubW92ZSwgMCwgLTEsIC0xKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIC0xLCAwLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIDAsIC0xLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIDAsIDAsIC0xKQorCisgICAgICAgIG9mZnNldHMgPSBbKC0xLCAtMSwgLTEpLCAoLTEsIC0xLCAwKSwgKC0xLCAwLCAtMSksICgwLCAtMSwgLTEpLAorICAgICAgICAgICAgICAgICAgICgtMSwgMCwgMCksICgwLCAtMSwgMCksICgwLCAwLCAtMSldCisgICAgICAgIGZvciBzb3VyY2UsIGRlc3QsIHNpemUgaW4gb2Zmc2V0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ubW92ZSwgc291cmNlLCBkZXN0LCBzaXplKQorCiAgICAgICAgIG0uY2xvc2UoKQogCisgICAgICAgIG0gPSBtbWFwLm1tYXAoLTEsIDEpICMgc2luZ2xlIGJ5dGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5tb3ZlLCAwLCAwLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIDEsIDAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ubW92ZSwgMCwgMSwgMSkKKyAgICAgICAgbS5tb3ZlKDAsIDAsIDEpCisgICAgICAgIG0ubW92ZSgwLCAwLCAwKQorCisKICAgICBkZWYgdGVzdF9hbm9ueW1vdXMoc2VsZik6CiAgICAgICAgICMgYW5vbnltb3VzIG1tYXAubW1hcCgtMSwgUEFHRSkKICAgICAgICAgbSA9IG1tYXAubW1hcCgtMSwgUEFHRVNJWkUpCkBAIC00MDksNyArNDQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9ICIiLmpvaW4ocmV2ZXJzZWQoZGF0YSkpCiAgICAgICAgICAgICAgICAgICAgIExbc3RhcnQ6c3RvcDpzdGVwXSA9IGRhdGEKICAgICAgICAgICAgICAgICAgICAgbVtzdGFydDpzdG9wOnN0ZXBdID0gZGF0YQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtWzpdLCAiIi5qb2luKEwpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bOl0sICIiLmpvaW4oTCkpCiAKICAgICBkZWYgbWFrZV9tbWFwX2ZpbGUgKHNlbGYsIGYsIGhhbGZzaXplKToKICAgICAgICAgIyBXcml0ZSAyIHBhZ2VzIHdvcnRoIG9mIGRhdGEgdG8gdGhlIGZpbGUKQEAgLTQ5Myw4ICs1MzEsOCBAQAogICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2Vycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhtbWFwLmVycm9yLCBFbnZpcm9ubWVudEVycm9yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJtbWFwLmVycm9yIiBpbiBzdHIobW1hcC5lcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKG1tYXAuZXJyb3IsIEVudmlyb25tZW50RXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJtbWFwLmVycm9yIiwgc3RyKG1tYXAuZXJyb3IpKQogCiAgICAgZGVmIHRlc3RfaW9fbWV0aG9kcyhzZWxmKToKICAgICAgICAgZGF0YSA9ICIwMTIzNDU2Nzg5IgpAQCAtNTA0LDI3ICs1NDIsMjcgQEAKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICMgVGVzdCB3cml0ZV9ieXRlKCkKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihkYXRhKSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLnRlbGwoKSwgaSkKLSAgICAgICAgICAgIG0ud3JpdGVfYnl0ZShkYXRhW2k6aSsxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG0udGVsbCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCBpKQorICAgICAgICAgICAgbS53cml0ZV9ieXRlKGRhdGFbaV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCBpKzEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ud3JpdGVfYnl0ZSwgIngiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtWzpdLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bOl0sIGRhdGEpCiAgICAgICAgICMgVGVzdCByZWFkX2J5dGUoKQogICAgICAgICBtLnNlZWsoMCkKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihkYXRhKSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLnRlbGwoKSwgaSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG0ucmVhZF9ieXRlKCksIGRhdGFbaTppKzFdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobS50ZWxsKCksIGkrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50ZWxsKCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmVhZF9ieXRlKCksIGRhdGFbaV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCBpKzEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ucmVhZF9ieXRlKQogICAgICAgICAjIFRlc3QgcmVhZCgpCiAgICAgICAgIG0uc2VlaygzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLnJlYWQoMyksICIzNDUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLnRlbGwoKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJlYWQoMyksICIzNDUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCA2KQogICAgICAgICAjIFRlc3Qgd3JpdGUoKQogICAgICAgICBtLnNlZWsoMykKICAgICAgICAgbS53cml0ZSgiYmFyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobS50ZWxsKCksIDYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1bOl0sICIwMTJiYXI2Nzg5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCAiMDEyYmFyNjc4OSIpCiAgICAgICAgIG0uc2Vlayg4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLndyaXRlLCAiYmFyIikKIApAQCAtNTM5LDggKzU3Nyw4IEBACiAgICAgICAgICAgICBtMVs6XSA9IGRhdGExCiAgICAgICAgICAgICBtMiA9IG1tYXAubW1hcCgtMSwgbGVuKGRhdGEyKSwgdGFnbmFtZT0iZm9vIikKICAgICAgICAgICAgIG0yWzpdID0gZGF0YTIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG0xWzpdLCBkYXRhMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG0yWzpdLCBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTFbOl0sIGRhdGEyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMls6XSwgZGF0YTIpCiAgICAgICAgICAgICBtMi5jbG9zZSgpCiAgICAgICAgICAgICBtMS5jbG9zZSgpCiAKQEAgLTU0OSw4ICs1ODcsOCBAQAogICAgICAgICAgICAgbTFbOl0gPSBkYXRhMQogICAgICAgICAgICAgbTIgPSBtbWFwLm1tYXAoLTEsIGxlbihkYXRhMiksIHRhZ25hbWU9ImJvbyIpCiAgICAgICAgICAgICBtMls6XSA9IGRhdGEyCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtMVs6XSwgZGF0YTEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtMls6XSwgZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xWzpdLCBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTJbOl0sIGRhdGEyKQogICAgICAgICAgICAgbTIuY2xvc2UoKQogICAgICAgICAgICAgbTEuY2xvc2UoKQogCkBAIC01NzgsOSArNjE2LDc0IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgbS5jbG9zZSgpCiAKKyAgICAgICAgZGVmIHRlc3RfaW52YWxpZF9kZXNjcmlwdG9yKHNlbGYpOgorICAgICAgICAgICAgIyBzb2NrZXQgZmlsZSBkZXNjcmlwdG9ycyBhcmUgdmFsaWQsIGJ1dCBvdXQgb2YgcmFuZ2UKKyAgICAgICAgICAgICMgZm9yIF9nZXRfb3NmaGFuZGxlLCBjYXVzaW5nIGEgY3Jhc2ggd2hlbiB2YWxpZGF0aW5nIHRoZQorICAgICAgICAgICAgIyBwYXJhbWV0ZXJzIHRvIF9nZXRfb3NmaGFuZGxlLgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMobW1hcC5lcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAocy5maWxlbm8oKSwgMTApCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisKK2NsYXNzIExhcmdlTW1hcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKworICAgIGRlZiBfd29ya2luZ19sYXJnZWZpbGUoc2VsZik6CisgICAgICAgICMgT25seSBydW4gaWYgdGhlIGN1cnJlbnQgZmlsZXN5c3RlbSBzdXBwb3J0cyBsYXJnZSBmaWxlcy4KKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAnd2InLCBidWZmZXJpbmc9MCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi5zZWVrKDB4ODAwMDAwMDEpCisgICAgICAgICAgICBmLndyaXRlKGIneCcpCisgICAgICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgbGFyZ2VmaWxlIHN1cHBvcnQiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorCisgICAgZGVmIHRlc3RfbGFyZ2Vfb2Zmc2V0KHNlbGYpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nIG9yIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIHJlcXVpcmVzKCdsYXJnZWZpbGUnLAorICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzICVzIGJ5dGVzIGFuZCBhIGxvbmcgdGltZSB0byBydW4nICUgc3RyKDB4MTgwMDAwMDAwKSkKKyAgICAgICAgc2VsZi5fd29ya2luZ19sYXJnZWZpbGUoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi5zZWVrKDB4MTRGRkZGRkZGKQorICAgICAgICAgICAgZi53cml0ZShiIiAiKQorCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDAsIG9mZnNldD0weDE0MDAwMDAwMCwgYWNjZXNzPW1tYXAuQUNDRVNTX1JFQUQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzB4RkZGRkZGRl0sIGIiICIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG0uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbGFyZ2VfZmlsZXNpemUoc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicgb3Igc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgcmVxdWlyZXMoJ2xhcmdlZmlsZScsCisgICAgICAgICAgICAgICAgJ3Rlc3QgcmVxdWlyZXMgJXMgYnl0ZXMgYW5kIGEgbG9uZyB0aW1lIHRvIHJ1bicgJSBzdHIoMHgxODAwMDAwMDApKQorICAgICAgICBzZWxmLl93b3JraW5nX2xhcmdlZmlsZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsoMHgxN0ZGRkZGRkYpCisgICAgICAgICAgICBmLndyaXRlKGIiICIpCisKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMHgxMDAwMCwgYWNjZXNzPW1tYXAuQUNDRVNTX1JFQUQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnNpemUoKSwgMHgxODAwMDAwMDApCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG0uY2xvc2UoKQorCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoTW1hcFRlc3RzKQorICAgIHJ1bl91bml0dGVzdChNbWFwVGVzdHMsIExhcmdlTW1hcFRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21vZHVsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CmluZGV4IGFjOTk3NzMuLjU2MDVlM2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CkBAIC0xLDYgKzEsNiBAQAogIyBUZXN0IHRoZSBtb2R1bGUgdHlwZQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgZ2NfY29sbGVjdAogCiBpbXBvcnQgc3lzCiBNb2R1bGVUeXBlID0gdHlwZShzeXMpCkBAIC0xMCw3ICsxMCw3IEBACiAgICAgICAgICMgQW4gdW5pbml0aWFsaXplZCBtb2R1bGUgaGFzIG5vIF9fZGljdF9fIG9yIF9fbmFtZV9fLAogICAgICAgICAjIGFuZCBfX2RvY19fIGlzIE5vbmUKICAgICAgICAgZm9vID0gTW9kdWxlVHlwZS5fX25ld19fKE1vZHVsZVR5cGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmb28uX19kaWN0X18gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvby5fX2RpY3RfXyBpcyBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FcnJvciwgZGlyLCBmb28pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHMgPSBmb28uX19uYW1lX18KQEAgLTUzLDcgKzUzLDMwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLmJhciwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLAogICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyIsICJiYXIiOiA0Mn0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmb28uX19kaWN0X18gaXMgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvby5fX2RpY3RfXyBpcyBkKQorCisgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgIGRlZiB0ZXN0X2RvbnRfY2xlYXJfZGljdChzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgNzE0MC4KKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIGZvbyA9IE1vZHVsZVR5cGUoImZvbyIpCisgICAgICAgICAgICBmb28uYmFyID0gNAorICAgICAgICAgICAgcmV0dXJuIGZvbworICAgICAgICBnY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCkuX19kaWN0X19bImJhciJdLCA0KQorCisgICAgZGVmIHRlc3RfY2xlYXJfZGljdF9pbl9yZWZfY3ljbGUoc2VsZik6CisgICAgICAgIGRlc3Ryb3llZCA9IFtdCisgICAgICAgIG0gPSBNb2R1bGVUeXBlKCJmb28iKQorICAgICAgICBtLmRlc3Ryb3llZCA9IGRlc3Ryb3llZAorICAgICAgICBzID0gIiIiY2xhc3MgQToKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgZGVzdHJveWVkLmFwcGVuZCgxKQorYSA9IEEoKSIiIgorICAgICAgICBleGVjKHMsIG0uX19kaWN0X18pCisgICAgICAgIGRlbCBtCisgICAgICAgIGdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc3Ryb3llZCwgWzFdKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KE1vZHVsZVRlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X21vZHVsZWZpbmRlci5weQppbmRleCA5ZDdmNzZhLi5lNzFkMWUwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21vZHVsZWZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X21vZHVsZWZpbmRlci5weQpAQCAtMjExLDExICsyMTEsMTcgQEAKIAogZGVmIGNyZWF0ZV9wYWNrYWdlKHNvdXJjZSk6CiAgICAgb2ZpID0gTm9uZQotICAgIGZvciBsaW5lIGluIHNvdXJjZS5zcGxpdGxpbmVzKCk6Ci0gICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiICIpIG9yIGxpbmUuc3RhcnRzd2l0aCgiXHQiKToKLSAgICAgICAgICAgIG9maS53cml0ZShsaW5lLnN0cmlwKCkgKyAiXG4iKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb2ZpID0gb3Blbl9maWxlKG9zLnBhdGguam9pbihURVNUX0RJUiwgbGluZS5zdHJpcCgpKSkKKyAgICB0cnk6CisgICAgICAgIGZvciBsaW5lIGluIHNvdXJjZS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiAiKSBvciBsaW5lLnN0YXJ0c3dpdGgoIlx0Iik6CisgICAgICAgICAgICAgICAgb2ZpLndyaXRlKGxpbmUuc3RyaXAoKSArICJcbiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG9maToKKyAgICAgICAgICAgICAgICAgICAgb2ZpLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBvZmkgPSBvcGVuX2ZpbGUob3MucGF0aC5qb2luKFRFU1RfRElSLCBsaW5lLnN0cmlwKCkpKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIG9maToKKyAgICAgICAgICAgIG9maS5jbG9zZSgpCiAKIGNsYXNzIE1vZHVsZUZpbmRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBfZG9fdGVzdChzZWxmLCBpbmZvLCByZXBvcnQ9RmFsc2UpOgpAQCAtMjQwLDEyICsyNDYsMTIgQEAKICAgICAgICAgICAgIG1vcmUgPSBsaXN0KGZvdW5kIC0gbW9kdWxlcykKICAgICAgICAgICAgIGxlc3MgPSBsaXN0KG1vZHVsZXMgLSBmb3VuZCkKICAgICAgICAgICAgICMgY2hlY2sgaWYgd2UgZm91bmQgd2hhdCB3ZSBleHBlY3RlZCwgbm90IG1vcmUsIG5vdCBsZXNzCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgobW9yZSwgbGVzcyksIChbXSwgW10pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobW9yZSwgbGVzcyksIChbXSwgW10pKQogCiAgICAgICAgICAgICAjIGNoZWNrIGZvciBtaXNzaW5nIGFuZCBtYXliZSBtaXNzaW5nIG1vZHVsZXMKICAgICAgICAgICAgIGJhZCwgbWF5YmUgPSBtZi5hbnlfbWlzc2luZ19tYXliZSgpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiYWQsIG1pc3NpbmcpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChtYXliZSwgbWF5YmVfbWlzc2luZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkLCBtaXNzaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXliZSwgbWF5YmVfbWlzc2luZykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRpc3R1dGlscy5kaXJfdXRpbC5yZW1vdmVfdHJlZShURVNUX0RJUikKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKaW5kZXggODUzNmYwYS4uNjNjMWU2MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CkBAIC01LDcgKzUsNiBAQAogIwogCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTgogaW1wb3J0IHVuaXR0ZXN0LCBTdHJpbmdJTywgY29kZWNzLCBzeXMsIG9zCiBpbXBvcnQgX211bHRpYnl0ZWNvZGVjCkBAIC00NywxMiArNDYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGVceDkyaGFtXHg5M3NwYW0nLCAndGVzdC5jamt0ZXN0JykKIAogICAgIGRlZiB0ZXN0X2NvZGluZ3NwZWMoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBlbmMgaW4gQUxMX0NKS0VOQ09ESU5HUzoKLSAgICAgICAgICAgICAgICBwcmludCA+PiBvcGVuKFRFU1RGTiwgJ3cnKSwgJyMgY29kaW5nOicsIGVuYwotICAgICAgICAgICAgICAgIGV4ZWMgb3BlbihURVNURk4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorICAgICAgICBmb3IgZW5jIGluIEFMTF9DSktFTkNPRElOR1M6CisgICAgICAgICAgICBjb2RlID0gJyMgY29kaW5nOiB7fVxuJy5mb3JtYXQoZW5jKQorICAgICAgICAgICAgZXhlYyBjb2RlCiAKICAgICBkZWYgdGVzdF9pbml0X3NlZ2ZhdWx0KHNlbGYpOgogICAgICAgICAjIGJ1ZyAjMzMwNTogdGhpcyB1c2VkIHRvIHNlZ2ZhdWx0CkBAIC0yMjYsMTAgKzIyMiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzbzIwMjJqcDIuZGVjb2RlKCdpc28yMDIyLWpwLTInKSwgdW5pKQogCiAgICAgZGVmIHRlc3RfaXNvMjAyMl9qcF9nMChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsSWYoJ1x4MGUnIGluIHUnXE57U09GVCBIWVBIRU59Jy5lbmNvZGUoJ2lzby0yMDIyLWpwLTInKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignXHgwZScsIHUnXE57U09GVCBIWVBIRU59Jy5lbmNvZGUoJ2lzby0yMDIyLWpwLTInKSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluICgnaXNvLTIwMjItanAtMjAwNCcsICdpc28tMjAyMi1qcC0zJyk6CiAgICAgICAgICAgICBlID0gdSdcdTM0MDYnLmVuY29kZShlbmNvZGluZykKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGZpbHRlcihsYW1iZGEgeDogeCA+PSAnXHg4MCcsIGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWx0ZXIobGFtYmRhIHg6IHggPj0gJ1x4ODAnLCBlKSkKIAogICAgIGRlZiB0ZXN0X2J1ZzE1NzI4MzIoc2VsZik6CiAgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlID49IDB4MTAwMDA6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKaW5kZXggODJlNDZkNi4uMDYzOTAzMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQpAQCAtNiw2ICs2LDcgQEAKIAogaW1wb3J0IHN5cywgY29kZWNzCiBpbXBvcnQgdW5pdHRlc3QsIHJlCitmcm9tIGh0dHBsaWIgaW1wb3J0IEhUVFBFeGNlcHRpb24KIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCkBAIC0yNTEsOSArMjUyLDkgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgogICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprdykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpICMgdGVzdCBpdCB0byByZXBvcnQgdGhlIGVycm9yIGVhcmx5Ci0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RTa2lwcGVkKCJDb3VsZCBub3QgcmV0cmlldmUgIitzZWxmLm1hcGZpbGV1cmwpCisgICAgICAgICAgICBzZWxmLm9wZW5fbWFwcGluZ19maWxlKCkuY2xvc2UoKSAjIHRlc3QgaXQgdG8gcmVwb3J0IHRoZSBlcnJvciBlYXJseQorICAgICAgICBleGNlcHQgKElPRXJyb3IsIEhUVFBFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IHJldHJpZXZlICIrc2VsZi5tYXBmaWxldXJsKQogCiAgICAgZGVmIG9wZW5fbWFwcGluZ19maWxlKHNlbGYpOgogICAgICAgICByZXR1cm4gdGVzdF9zdXBwb3J0Lm9wZW5fdXJscmVzb3VyY2Uoc2VsZi5tYXBmaWxldXJsKQpAQCAtMjY5LDM2ICsyNzAsMzggQEAKICAgICAgICAgdW5pY2hycyA9IGxhbWJkYSBzOiB1Jycuam9pbihfdW5pY2hyKGMpIGZvciBjIGluIHMuc3BsaXQoJysnKSkKICAgICAgICAgdXJ0X3dhID0ge30KIAotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLm9wZW5fbWFwcGluZ19maWxlKCk6Ci0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZGF0YSA9IGxpbmUuc3BsaXQoJyMnKVswXS5zdHJpcCgpLnNwbGl0KCkKLSAgICAgICAgICAgIGlmIGxlbihkYXRhKSAhPSAyOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHdpdGggc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGRhdGEgPSBsaW5lLnNwbGl0KCcjJylbMF0uc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGNzZXR2YWwgPSBldmFsKGRhdGFbMF0pCi0gICAgICAgICAgICBpZiBjc2V0dmFsIDw9IDB4N0Y6Ci0gICAgICAgICAgICAgICAgY3NldGNoID0gY2hyKGNzZXR2YWwgJiAweGZmKQotICAgICAgICAgICAgZWxpZiBjc2V0dmFsID49IDB4MTAwMDAwMDoKLSAgICAgICAgICAgICAgICBjc2V0Y2ggPSBjaHIoY3NldHZhbCA+PiAyNCkgKyBjaHIoKGNzZXR2YWwgPj4gMTYpICYgMHhmZikgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hyKChjc2V0dmFsID4+IDgpICYgMHhmZikgKyBjaHIoY3NldHZhbCAmIDB4ZmYpCi0gICAgICAgICAgICBlbGlmIGNzZXR2YWwgPj0gMHgxMDAwMDoKLSAgICAgICAgICAgICAgICBjc2V0Y2ggPSBjaHIoY3NldHZhbCA+PiAxNikgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hyKChjc2V0dmFsID4+IDgpICYgMHhmZikgKyBjaHIoY3NldHZhbCAmIDB4ZmYpCi0gICAgICAgICAgICBlbGlmIGNzZXR2YWwgPj0gMHgxMDA6Ci0gICAgICAgICAgICAgICAgY3NldGNoID0gY2hyKGNzZXR2YWwgPj4gOCkgKyBjaHIoY3NldHZhbCAmIDB4ZmYpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY3NldHZhbCA9IGV2YWwoZGF0YVswXSkKKyAgICAgICAgICAgICAgICBpZiBjc2V0dmFsIDw9IDB4N0Y6CisgICAgICAgICAgICAgICAgICAgIGNzZXRjaCA9IGNocihjc2V0dmFsICYgMHhmZikKKyAgICAgICAgICAgICAgICBlbGlmIGNzZXR2YWwgPj0gMHgxMDAwMDAwOgorICAgICAgICAgICAgICAgICAgICBjc2V0Y2ggPSBjaHIoY3NldHZhbCA+PiAyNCkgKyBjaHIoKGNzZXR2YWwgPj4gMTYpICYgMHhmZikgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocigoY3NldHZhbCA+PiA4KSAmIDB4ZmYpICsgY2hyKGNzZXR2YWwgJiAweGZmKQorICAgICAgICAgICAgICAgIGVsaWYgY3NldHZhbCA+PSAweDEwMDAwOgorICAgICAgICAgICAgICAgICAgICBjc2V0Y2ggPSBjaHIoY3NldHZhbCA+PiAxNikgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocigoY3NldHZhbCA+PiA4KSAmIDB4ZmYpICsgY2hyKGNzZXR2YWwgJiAweGZmKQorICAgICAgICAgICAgICAgIGVsaWYgY3NldHZhbCA+PSAweDEwMDoKKyAgICAgICAgICAgICAgICAgICAgY3NldGNoID0gY2hyKGNzZXR2YWwgPj4gOCkgKyBjaHIoY3NldHZhbCAmIDB4ZmYpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgdW5pY2ggPSB1bmljaHJzKGRhdGFbMV0pCi0gICAgICAgICAgICBpZiB1bmljaCA9PSB1J1x1ZmZmZCcgb3IgdW5pY2ggaW4gdXJ0X3dhOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICB1cnRfd2FbdW5pY2hdID0gY3NldGNoCisgICAgICAgICAgICAgICAgdW5pY2ggPSB1bmljaHJzKGRhdGFbMV0pCisgICAgICAgICAgICAgICAgaWYgdW5pY2ggPT0gdSdcdWZmZmQnIG9yIHVuaWNoIGluIHVydF93YToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB1cnRfd2FbdW5pY2hdID0gY3NldGNoCiAKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rwb2ludChjc2V0Y2gsIHVuaWNoKQorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3Rwb2ludChjc2V0Y2gsIHVuaWNoKQogCiAgICAgZGVmIF90ZXN0X21hcHBpbmdfZmlsZV91Y20oc2VsZik6Ci0gICAgICAgIHVjbWRhdGEgPSBzZWxmLm9wZW5fbWFwcGluZ19maWxlKCkucmVhZCgpCisgICAgICAgIHdpdGggc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpIGFzIGY6CisgICAgICAgICAgICB1Y21kYXRhID0gZi5yZWFkKCkKICAgICAgICAgdWMgPSByZS5maW5kYWxsKCc8YSB1PSIoW0EtRjAtOV17NH0pIiBiPSIoWzAtOUEtRiBdKykiLz4nLCB1Y21kYXRhKQogICAgICAgICBmb3IgdW5pLCBjb2RlZCBpbiB1YzoKICAgICAgICAgICAgIHVuaWNoID0gdW5pY2hyKGludCh1bmksIDE2KSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKaW5kZXggNzU4MmNjMy4uNzhiMDAyZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKQEAgLTUsNyArNSw2IEBACiAjCiAKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IFF1ZXVlCiBpbXBvcnQgdGltZQogaW1wb3J0IHN5cwpAQCAtMTMsMzAgKzEyLDM0IEBACiBpbXBvcnQgZ2MKIGltcG9ydCBzaWduYWwKIGltcG9ydCBhcnJheQotaW1wb3J0IGNvcHkKIGltcG9ydCBzb2NrZXQKIGltcG9ydCByYW5kb20KIGltcG9ydCBsb2dnaW5nCi1mcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLQorZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK19tdWx0aXByb2Nlc3NpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX211bHRpcHJvY2Vzc2luZycpCisjIGltcG9ydCB0aHJlYWRpbmcgYWZ0ZXIgX211bHRpcHJvY2Vzc2luZyB0byByYWlzZSBhIG1vcmUgcmV2ZWxhbnQgZXJyb3IKKyMgbWVzc2FnZTogIk5vIG1vZHVsZSBuYW1lZCBfbXVsdGlwcm9jZXNzaW5nIi4gX211bHRpcHJvY2Vzc2luZyBpcyBub3QgY29tcGlsZWQKKyMgd2l0aG91dCB0aHJlYWQgc3VwcG9ydC4KK2ltcG9ydCB0aHJlYWRpbmcKIAogIyBXb3JrIGFyb3VuZCBicm9rZW4gc2VtX29wZW4gaW1wbGVtZW50YXRpb25zCi10cnk6Ci0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZQotZXhjZXB0IEltcG9ydEVycm9yLCBlOgotICAgIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RTa2lwcGVkCi0gICAgcmFpc2UgVGVzdFNraXBwZWQoZSkKK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUnKQogCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmR1bW15CiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcuaGVhcAogaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5wb29sCi1pbXBvcnQgX211bHRpcHJvY2Vzc2luZwogCiBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgdXRpbAogCit0cnk6CisgICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBWYWx1ZSwgY29weQorICAgIEhBU19TSEFSRURDVFlQRVMgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgSEFTX1NIQVJFRENUWVBFUyA9IEZhbHNlCisKICMKICMKICMKQEAgLTQ4LDcgKzUxLDcgQEAKICMKIAogTE9HX0xFVkVMID0gdXRpbC5TVUJXQVJOSU5HCi0jTE9HX0xFVkVMID0gbG9nZ2luZy5XQVJOSU5HCisjTE9HX0xFVkVMID0gbG9nZ2luZy5ERUJVRwogCiBERUxUQSA9IDAuMQogQ0hFQ0tfVElNSU5HUyA9IEZhbHNlICAgICAjIG1ha2luZyB0cnVlIG1ha2VzIHRlc3RzIHRha2UgYSBsb3QgbG9uZ2VyCkBAIC02Niw2ICs2OSwxNiBAQAogV0lOMzIgPSAoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIpCiAKICMKKyMgU29tZSB0ZXN0cyByZXF1aXJlIGN0eXBlcworIworCit0cnk6CisgICAgZnJvbSBjdHlwZXMgaW1wb3J0IFN0cnVjdHVyZSwgY19pbnQsIGNfZG91YmxlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgU3RydWN0dXJlID0gb2JqZWN0CisgICAgY19pbnQgPSBjX2RvdWJsZSA9IE5vbmUKKworIwogIyBDcmVhdGVzIGEgd3JhcHBlciBmb3IgYSBmdW5jdGlvbiB3aGljaCByZWNvcmRzIHRoZSB0aW1lIGl0IHRha2VzIHRvIGZpbmlzaAogIwogCkBAIC0xMDIsNiArMTE1LDEzIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgcmVzKQogCisgICAgIyBGb3IgdGhlIHNhbml0eSBvZiBXaW5kb3dzIHVzZXJzLCByYXRoZXIgdGhhbiBjcmFzaGluZyBvciBmcmVlemluZyBpbgorICAgICMgbXVsdGlwbGUgd2F5cy4KKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInNob3VsZG4ndCB0cnkgdG8gcGlja2xlIGEgdGVzdCBjYXNlIikKKworICAgIF9fcmVkdWNlX2V4X18gPSBfX3JlZHVjZV9fCisKICMKICMgUmV0dXJuIHRoZSB2YWx1ZSBvZiBhIHNlbWFwaG9yZQogIwpAQCAtMTM1LDE3ICsxNTUsMTggQEAKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUoY3VycmVudC5pc19hbGl2ZSgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGN1cnJlbnQuZGFlbW9uKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhdXRoa2V5LCBieXRlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhdXRoa2V5LCBieXRlcykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihhdXRoa2V5KSA+IDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycmVudC5pZGVudCwgb3MuZ2V0cGlkKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycmVudC5leGl0Y29kZSwgTm9uZSkKIAotICAgIGRlZiBfdGVzdChzZWxmLCBxLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgY3VycmVudCA9IHNlbGYuY3VycmVudF9wcm9jZXNzKCkKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3QoY2xzLCBxLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgY3VycmVudCA9IGNscy5jdXJyZW50X3Byb2Nlc3MoKQogICAgICAgICBxLnB1dChhcmdzKQogICAgICAgICBxLnB1dChrd2RzKQogICAgICAgICBxLnB1dChjdXJyZW50Lm5hbWUpCi0gICAgICAgIGlmIHNlbGYuVFlQRSAhPSAndGhyZWFkcyc6CisgICAgICAgIGlmIGNscy5UWVBFICE9ICd0aHJlYWRzJzoKICAgICAgICAgICAgIHEucHV0KGJ5dGVzKGN1cnJlbnQuYXV0aGtleSkpCiAgICAgICAgICAgICBxLnB1dChjdXJyZW50LnBpZCkKIApAQCAtMTYyLDMzICsxODMsMzQgQEAKICAgICAgICAgY3VycmVudCA9IHNlbGYuY3VycmVudF9wcm9jZXNzKCkKIAogICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3RocmVhZHMnOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocC5hdXRoa2V5LCBjdXJyZW50LmF1dGhrZXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHAuaXNfYWxpdmUoKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHAuZGFlbW9uLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hdXRoa2V5LCBjdXJyZW50LmF1dGhrZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5pc19hbGl2ZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmRhZW1vbiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKSBpcyBsaXN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIE5vbmUpCiAKICAgICAgICAgcC5zdGFydCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocC5leGl0Y29kZSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocC5pc19hbGl2ZSgpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5pc19hbGl2ZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocS5nZXQoKSwgYXJnc1sxOl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHEuZ2V0KCksIGt3YXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocS5nZXQoKSwgcC5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0KCksIGFyZ3NbMTpdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0KCksIGt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldCgpLCBwLm5hbWUpCiAgICAgICAgIGlmIHNlbGYuVFlQRSAhPSAndGhyZWFkcyc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhxLmdldCgpLCBjdXJyZW50LmF1dGhrZXkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhxLmdldCgpLCBwLnBpZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5nZXQoKSwgY3VycmVudC5hdXRoa2V5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldCgpLCBwLnBpZCkKIAogICAgICAgICBwLmpvaW4oKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHAuZXhpdGNvZGUsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHAuaXNfYWxpdmUoKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwIG5vdCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5pc19hbGl2ZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQogCi0gICAgZGVmIF90ZXN0X3Rlcm1pbmF0ZShzZWxmKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfdGVybWluYXRlKGNscyk6CiAgICAgICAgIHRpbWUuc2xlZXAoMTAwMCkKIAogICAgIGRlZiB0ZXN0X3Rlcm1pbmF0ZShzZWxmKToKQEAgLTIwMCw3ICsyMjIsNyBAQAogICAgICAgICBwLnN0YXJ0KCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaXNfYWxpdmUoKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIE5vbmUpCiAKICAgICAgICAgcC50ZXJtaW5hdGUoKQpAQCAtMjEwLDcgKzIzMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoam9pbi5lbGFwc2VkLCAwLjApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQogCiAgICAgICAgIHAuam9pbigpCiAKQEAgLTIyOSwyMSArMjUxLDIyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKSwgbGlzdCkKIAogICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD10aW1lLnNsZWVwLCBhcmdzPShERUxUQSwpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQogCiAgICAgICAgIHAuc3RhcnQoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQorICAgICAgICBzZWxmLmFzc2VydEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCiAKICAgICAgICAgcC5qb2luKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgbm90IGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKIAotICAgIGRlZiBfdGVzdF9yZWN1cnNpb24oc2VsZiwgd2Nvbm4sIGlkKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfcmVjdXJzaW9uKGNscywgd2Nvbm4sIGlkKToKICAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IGZvcmtpbmcKICAgICAgICAgd2Nvbm4uc2VuZChpZCkKICAgICAgICAgaWYgbGVuKGlkKSA8IDI6CiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKLSAgICAgICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKAotICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9c2VsZi5fdGVzdF9yZWN1cnNpb24sIGFyZ3M9KHdjb25uLCBpZCtbaV0pCisgICAgICAgICAgICAgICAgcCA9IGNscy5Qcm9jZXNzKAorICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Y2xzLl90ZXN0X3JlY3Vyc2lvbiwgYXJncz0od2Nvbm4sIGlkK1tpXSkKICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIHAuc3RhcnQoKQogICAgICAgICAgICAgICAgIHAuam9pbigpCkBAIC0zMjYsNyArMzQ5LDggQEAKIGNsYXNzIF9UZXN0UXVldWUoQmFzZVRlc3RDYXNlKToKIAogCi0gICAgZGVmIF90ZXN0X3B1dChzZWxmLCBxdWV1ZSwgY2hpbGRfY2FuX3N0YXJ0LCBwYXJlbnRfY2FuX2NvbnRpbnVlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfcHV0KGNscywgcXVldWUsIGNoaWxkX2Nhbl9zdGFydCwgcGFyZW50X2Nhbl9jb250aW51ZSk6CiAgICAgICAgIGNoaWxkX2Nhbl9zdGFydC53YWl0KCkKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNik6CiAgICAgICAgICAgICBxdWV1ZS5nZXQoKQpAQCAtMzkwLDcgKzQxNCw4IEBACiAKICAgICAgICAgcHJvYy5qb2luKCkKIAotICAgIGRlZiBfdGVzdF9nZXQoc2VsZiwgcXVldWUsIGNoaWxkX2Nhbl9zdGFydCwgcGFyZW50X2Nhbl9jb250aW51ZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2dldChjbHMsIHF1ZXVlLCBjaGlsZF9jYW5fc3RhcnQsIHBhcmVudF9jYW5fY29udGludWUpOgogICAgICAgICBjaGlsZF9jYW5fc3RhcnQud2FpdCgpCiAgICAgICAgICNxdWV1ZS5wdXQoMSkKICAgICAgICAgcXVldWUucHV0KDIpCkBAIC00NTEsNyArNDc2LDggQEAKIAogICAgICAgICBwcm9jLmpvaW4oKQogCi0gICAgZGVmIF90ZXN0X2Zvcmsoc2VsZiwgcXVldWUpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF9mb3JrKGNscywgcXVldWUpOgogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCwgMjApOgogICAgICAgICAgICAgcXVldWUucHV0KGkpCiAgICAgICAgICMgbm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQgdGhlIGl0ZW1zIG1heSBvbmx5IGJlIGJ1ZmZlcmVkLCBzbyB0aGUKQEAgLTQ5OSw3ICs1MjUsOCBAQAogICAgICAgICBxLmdldCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5xc2l6ZSgpLCAwKQogCi0gICAgZGVmIF90ZXN0X3Rhc2tfZG9uZShzZWxmLCBxKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfdGFza19kb25lKGNscywgcSk6CiAgICAgICAgIGZvciBvYmogaW4gaXRlcihxLmdldCwgTm9uZSk6CiAgICAgICAgICAgICB0aW1lLnNsZWVwKERFTFRBKQogICAgICAgICAgICAgcS50YXNrX2RvbmUoKQpAQCAtNTA4LDcgKzUzNSw3IEBACiAgICAgICAgIHF1ZXVlID0gc2VsZi5Kb2luYWJsZVF1ZXVlKCkKIAogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDUpIGFuZCBub3QgaGFzYXR0cihxdWV1ZSwgJ3Rhc2tfZG9uZScpOgotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXF1aXJlcyAncXVldWUudGFza19kb25lKCknIG1ldGhvZCIpCiAKICAgICAgICAgd29ya2VycyA9IFtzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfdGFza19kb25lLCBhcmdzPShxdWV1ZSwpKQogICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSg0KV0KQEAgLTYxMSw3ICs2MzgsOCBAQAogCiBjbGFzcyBfVGVzdENvbmRpdGlvbihCYXNlVGVzdENhc2UpOgogCi0gICAgZGVmIGYoc2VsZiwgY29uZCwgc2xlZXBpbmcsIHdva2VuLCB0aW1lb3V0PU5vbmUpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmKGNscywgY29uZCwgc2xlZXBpbmcsIHdva2VuLCB0aW1lb3V0PU5vbmUpOgogICAgICAgICBjb25kLmFjcXVpcmUoKQogICAgICAgICBzbGVlcGluZy5yZWxlYXNlKCkKICAgICAgICAgY29uZC53YWl0KHRpbWVvdXQpCkBAIC03NDMsNyArNzcxLDggQEAKIAogY2xhc3MgX1Rlc3RFdmVudChCYXNlVGVzdENhc2UpOgogCi0gICAgZGVmIF90ZXN0X2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfZXZlbnQoY2xzLCBldmVudCk6CiAgICAgICAgIHRpbWUuc2xlZXAoVElNRU9VVDIpCiAgICAgICAgIGV2ZW50LnNldCgpCiAKQEAgLTc1MywyMCArNzgyLDIyIEBACiAKICAgICAgICAgIyBSZW1vdmVkIHRlbXBvcmFpbHksIGR1ZSB0byBBUEkgc2hlYXIsIHRoaXMgZG9lcyBub3QKICAgICAgICAgIyB3b3JrIHdpdGggdGhyZWFkaW5nLl9FdmVudCBvYmplY3RzLiBpc19zZXQgPT0gaXNTZXQKLSAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwoZXZlbnQuaXNfc2V0KCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50LmlzX3NldCgpLCBGYWxzZSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoMC4wKSwgTm9uZSkKKyAgICAgICAgIyBSZW1vdmVkLCB0aHJlYWRpbmcuRXZlbnQud2FpdCgpIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgX19mbGFnCisgICAgICAgICMgaW5zdGVhZCBvZiBOb25lLiBBUEkgU2hlYXIgd2l0aCB0aGUgc2VtYXBob3JlIGJhY2tlZCBtcC5FdmVudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoMC4wKSwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwod2FpdC5lbGFwc2VkLCAwLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdChUSU1FT1VUMSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdChUSU1FT1VUMSksIEZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHdhaXQuZWxhcHNlZCwgVElNRU9VVDEpCiAKICAgICAgICAgZXZlbnQuc2V0KCkKIAogICAgICAgICAjIFNlZSBub3RlIGFib3ZlIG9uIHRoZSBBUEkgZGlmZmVyZW5jZXMKLSAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKGV2ZW50LmlzX3NldCgpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudC5pc19zZXQoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YWl0KCksIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwod2FpdC5lbGFwc2VkLCAwLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdChUSU1FT1VUMSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdChUSU1FT1VUMSksIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwod2FpdC5lbGFwc2VkLCAwLjApCiAgICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChldmVudC5pc19zZXQoKSwgVHJ1ZSkKIApAQCAtNzc1LDcgKzgwNiw3IEBACiAgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKGV2ZW50LmlzX3NldCgpLCBGYWxzZSkKIAogICAgICAgICBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfZXZlbnQsIGFyZ3M9KGV2ZW50LCkpLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YWl0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdCgpLCBUcnVlKQogCiAjCiAjCkBAIC03ODMsNiArODE0LDggQEAKIAogY2xhc3MgX1Rlc3RWYWx1ZShCYXNlVGVzdENhc2UpOgogCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCisKICAgICBjb2Rlc192YWx1ZXMgPSBbCiAgICAgICAgICgnaScsIDQzNDMsIDI0MjM0KSwKICAgICAgICAgKCdkJywgMy42MjUsIC00LjI1KSwKQEAgLTc5MCwxNSArODIzLDE3IEBACiAgICAgICAgICgnYycsIGxhdGluKCd4JyksIGxhdGluKCd5JykpCiAgICAgICAgIF0KIAotICAgIGRlZiBfdGVzdChzZWxmLCB2YWx1ZXMpOgotICAgICAgICBmb3Igc3YsIGN2IGluIHppcCh2YWx1ZXMsIHNlbGYuY29kZXNfdmFsdWVzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIG5vdCBIQVNfU0hBUkVEQ1RZUEVTOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicmVxdWlyZXMgbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcyIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3QoY2xzLCB2YWx1ZXMpOgorICAgICAgICBmb3Igc3YsIGN2IGluIHppcCh2YWx1ZXMsIGNscy5jb2Rlc192YWx1ZXMpOgogICAgICAgICAgICAgc3YudmFsdWUgPSBjdlsyXQogCiAKICAgICBkZWYgdGVzdF92YWx1ZShzZWxmLCByYXc9RmFsc2UpOgotICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgICAgICByZXR1cm4KLQogICAgICAgICBpZiByYXc6CiAgICAgICAgICAgICB2YWx1ZXMgPSBbc2VsZi5SYXdWYWx1ZShjb2RlLCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICBmb3IgY29kZSwgdmFsdWUsIF8gaW4gc2VsZi5jb2Rlc192YWx1ZXNdCkBAIC04MjAsOSArODU1LDYgQEAKICAgICAgICAgc2VsZi50ZXN0X3ZhbHVlKHJhdz1UcnVlKQogCiAgICAgZGVmIHRlc3RfZ2V0b2JqX2dldGxvY2soc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuVFlQRSAhPSAncHJvY2Vzc2VzJzoKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIHZhbDEgPSBzZWxmLlZhbHVlKCdpJywgNSkKICAgICAgICAgbG9jazEgPSB2YWwxLmdldF9sb2NrKCkKICAgICAgICAgb2JqMSA9IHZhbDEuZ2V0X29iaigpCkBAIC04NTAsMTQgKzg4MiwxNSBAQAogCiBjbGFzcyBfVGVzdEFycmF5KEJhc2VUZXN0Q2FzZSk6CiAKLSAgICBkZWYgZihzZWxmLCBzZXEpOgorICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGYoY2xzLCBzZXEpOgogICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oc2VxKSk6CiAgICAgICAgICAgICBzZXFbaV0gKz0gc2VxW2ktMV0KIAorICAgIEB1bml0dGVzdC5za2lwSWYoY19pbnQgaXMgTm9uZSwgInJlcXVpcmVzIF9jdHlwZXMiKQogICAgIGRlZiB0ZXN0X2FycmF5KHNlbGYsIHJhdz1GYWxzZSk6Ci0gICAgICAgIGlmIHNlbGYuVFlQRSAhPSAncHJvY2Vzc2VzJzoKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIHNlcSA9IFs2ODAsIDYyNiwgOTM0LCA4MjEsIDE1MCwgMjMzLCA1NDgsIDk4MiwgNzE0LCA4MzFdCiAgICAgICAgIGlmIHJhdzoKICAgICAgICAgICAgIGFyciA9IHNlbGYuUmF3QXJyYXkoJ2knLCBzZXEpCkBAIC04ODAsMTMgKzkxMywxMiBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhcnJbOl0pLCBzZXEpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKGNfaW50IGlzIE5vbmUsICJyZXF1aXJlcyBfY3R5cGVzIikKICAgICBkZWYgdGVzdF9yYXdhcnJheShzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X2FycmF5KHJhdz1UcnVlKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihjX2ludCBpcyBOb25lLCAicmVxdWlyZXMgX2N0eXBlcyIpCiAgICAgZGVmIHRlc3RfZ2V0b2JqX2dldGxvY2tfb2JqKHNlbGYpOgotICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgICAgICByZXR1cm4KLQogICAgICAgICBhcnIxID0gc2VsZi5BcnJheSgnaScsIHJhbmdlKDEwKSkKICAgICAgICAgbG9jazEgPSBhcnIxLmdldF9sb2NrKCkKICAgICAgICAgb2JqMSA9IGFycjEuZ2V0X29iaigpCkBAIC05OTEsNiArMTAyMywxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBtYXAoc3FyLCByYW5nZSgxMDApLCBjaHVua3NpemU9MjApLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChzcXIsIHJhbmdlKDEwMCkpKQogCisgICAgZGVmIHRlc3RfbWFwX2NodW5rc2l6ZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wb29sLm1hcF9hc3luYyhzcXIsIFtdLCBjaHVua3NpemU9MSkuZ2V0KHRpbWVvdXQ9VElNRU9VVDEpCisgICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJwb29sLm1hcF9hc3luYyB3aXRoIGNodW5rc2l6ZSBzdGFsbGVkIG9uIG51bGwgbGlzdCIpCisKICAgICBkZWYgdGVzdF9hc3luYyhzZWxmKToKICAgICAgICAgcmVzID0gc2VsZi5wb29sLmFwcGx5X2FzeW5jKHNxciwgKDcsIFRJTUVPVVQxLCkpCiAgICAgICAgIGdldCA9IFRpbWluZ1dyYXBwZXIocmVzLmdldCkKQEAgLTEwNDcsNiArMTA4NSwzOCBAQAogICAgICAgICBqb2luID0gVGltaW5nV3JhcHBlcihzZWxmLnBvb2wuam9pbikKICAgICAgICAgam9pbigpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShqb2luLmVsYXBzZWQgPCAwLjIpCisKK2NsYXNzIF9UZXN0UG9vbFdvcmtlckxpZmV0aW1lKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCApCisgICAgZGVmIHRlc3RfcG9vbF93b3JrZXJfbGlmZXRpbWUoc2VsZik6CisgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgzLCBtYXh0YXNrc3BlcmNoaWxkPTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGxlbihwLl9wb29sKSkKKyAgICAgICAgb3JpZ3dvcmtlcnBpZHMgPSBbdy5waWQgZm9yIHcgaW4gcC5fcG9vbF0KKyAgICAgICAgIyBSdW4gbWFueSB0YXNrcyBzbyBlYWNoIHdvcmtlciBnZXRzIHJlcGxhY2VkIChob3BlZnVsbHkpCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocC5hcHBseV9hc3luYyhzcXIsIChpLCApKSkKKyAgICAgICAgIyBGZXRjaCB0aGUgcmVzdWx0cyBhbmQgdmVyaWZ5IHdlIGdvdCB0aGUgcmlnaHQgYW5zd2VycywKKyAgICAgICAgIyBhbHNvIGVuc3VyaW5nIGFsbCB0aGUgdGFza3MgaGF2ZSBjb21wbGV0ZWQuCisgICAgICAgIGZvciAoaiwgcmVzKSBpbiBlbnVtZXJhdGUocmVzdWx0cyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXQoKSwgc3FyKGopKQorICAgICAgICAjIFJlZmlsbCB0aGUgcG9vbAorICAgICAgICBwLl9yZXBvcHVsYXRlX3Bvb2woKQorICAgICAgICAjIFdhaXQgdW50aWwgYWxsIHdvcmtlcnMgYXJlIGFsaXZlCisgICAgICAgIGNvdW50ZG93biA9IDUKKyAgICAgICAgd2hpbGUgY291bnRkb3duIGFuZCBub3QgYWxsKHcuaXNfYWxpdmUoKSBmb3IgdyBpbiBwLl9wb29sKToKKyAgICAgICAgICAgIGNvdW50ZG93biAtPSAxCisgICAgICAgICAgICB0aW1lLnNsZWVwKERFTFRBKQorICAgICAgICBmaW5hbHdvcmtlcnBpZHMgPSBbdy5waWQgZm9yIHcgaW4gcC5fcG9vbF0KKyAgICAgICAgIyBBbGwgcGlkcyBzaG91bGQgYmUgYXNzaWduZWQuICBTZWUgaXNzdWUgIzc4MDUuCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oTm9uZSwgb3JpZ3dvcmtlcnBpZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oTm9uZSwgZmluYWx3b3JrZXJwaWRzKQorICAgICAgICAjIEZpbmFsbHksIGNoZWNrIHRoYXQgdGhlIHdvcmtlciBwaWRzIGhhdmUgY2hhbmdlZAorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNvcnRlZChvcmlnd29ya2VycGlkcyksIHNvcnRlZChmaW5hbHdvcmtlcnBpZHMpKQorICAgICAgICBwLmNsb3NlKCkKKyAgICAgICAgcC5qb2luKCkKKwogIwogIyBUZXN0IHRoYXQgbWFuYWdlciBoYXMgZXhwZWN0ZWQgbnVtYmVyIG9mIHNoYXJlZCBvYmplY3RzIGxlZnQKICMKQEAgLTEwNjMsOCArMTEzMywxMCBAQAogICAgICAgICBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkgICMgZGlzY2FyZCBkZWFkIHByb2Nlc3Mgb2JqcwogICAgICAgICBnYy5jb2xsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICMgZG8gZ2FyYmFnZSBjb2xsZWN0aW9uCiAgICAgICAgIHJlZnMgPSBzZWxmLm1hbmFnZXIuX251bWJlcl9vZl9vYmplY3RzKCkKKyAgICAgICAgZGVidWdfaW5mbyA9IHNlbGYubWFuYWdlci5fZGVidWdfaW5mbygpCiAgICAgICAgIGlmIHJlZnMgIT0gRVhQRUNURURfTlVNQkVSOgogICAgICAgICAgICAgcHJpbnQgc2VsZi5tYW5hZ2VyLl9kZWJ1Z19pbmZvKCkKKyAgICAgICAgICAgIHByaW50IGRlYnVnX2luZm8KIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZnMsIEVYUEVDVEVEX05VTUJFUikKIApAQCAtMTE1OCw3ICsxMjMwLDggQEAKIAogICAgIEFMTE9XRURfVFlQRVMgPSAoJ21hbmFnZXInLCkKIAotICAgIGRlZiBfcHV0dGVyKHNlbGYsIGFkZHJlc3MsIGF1dGhrZXkpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcHV0dGVyKGNscywgYWRkcmVzcywgYXV0aGtleSk6CiAgICAgICAgIG1hbmFnZXIgPSBRdWV1ZU1hbmFnZXIyKAogICAgICAgICAgICAgYWRkcmVzcz1hZGRyZXNzLCBhdXRoa2V5PWF1dGhrZXksIHNlcmlhbGl6ZXI9U0VSSUFMSVpFUgogICAgICAgICAgICAgKQpAQCAtMTE5Niw3ICsxMjY5LDggQEAKIAogY2xhc3MgX1Rlc3RNYW5hZ2VyUmVzdGFydChCYXNlVGVzdENhc2UpOgogCi0gICAgZGVmIF9wdXR0ZXIoc2VsZiwgYWRkcmVzcywgYXV0aGtleSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9wdXR0ZXIoY2xzLCBhZGRyZXNzLCBhdXRoa2V5KToKICAgICAgICAgbWFuYWdlciA9IFF1ZXVlTWFuYWdlcigKICAgICAgICAgICAgIGFkZHJlc3M9YWRkcmVzcywgYXV0aGtleT1hdXRoa2V5LCBzZXJpYWxpemVyPVNFUklBTElaRVIpCiAgICAgICAgIG1hbmFnZXIuY29ubmVjdCgpCkBAIC0xMjA3LDcgKzEyODEsMTEgQEAKICAgICAgICAgYXV0aGtleSA9IG9zLnVyYW5kb20oMzIpCiAgICAgICAgIG1hbmFnZXIgPSBRdWV1ZU1hbmFnZXIoCiAgICAgICAgICAgICBhZGRyZXNzPSgnbG9jYWxob3N0JywgMCksIGF1dGhrZXk9YXV0aGtleSwgc2VyaWFsaXplcj1TRVJJQUxJWkVSKQotICAgICAgICBhZGRyID0gbWFuYWdlci5nZXRfc2VydmVyKCkuYWRkcmVzcworICAgICAgICBzcnZyID0gbWFuYWdlci5nZXRfc2VydmVyKCkKKyAgICAgICAgYWRkciA9IHNydnIuYWRkcmVzcworICAgICAgICAjIENsb3NlIHRoZSBjb25uZWN0aW9uLkxpc3RlbmVyIHNvY2tldCB3aGljaCBnZXRzIG9wZW5lZCBhcyBhIHBhcnQKKyAgICAgICAgIyBvZiBtYW5hZ2VyLmdldF9zZXJ2ZXIoKS4gSXQncyBub3QgbmVlZGVkIGZvciB0aGUgdGVzdC4KKyAgICAgICAgc3J2ci5saXN0ZW5lci5jbG9zZSgpCiAgICAgICAgIG1hbmFnZXIuc3RhcnQoKQogCiAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3B1dHRlciwgYXJncz0obWFuYWdlci5hZGRyZXNzLCBhdXRoa2V5KSkKQEAgLTEyMzEsNyArMTMwOSw4IEBACiAKICAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCAndGhyZWFkcycpCiAKLSAgICBkZWYgX2VjaG8oc2VsZiwgY29ubik6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9lY2hvKGNscywgY29ubik6CiAgICAgICAgIGZvciBtc2cgaW4gaXRlcihjb25uLnJlY3ZfYnl0ZXMsIFNFTlRJTkVMKToKICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhtc2cpCiAgICAgICAgIGNvbm4uY2xvc2UoKQpAQCAtMTM4MCw4ICsxNDU5LDkgQEAKIAogICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsICd0aHJlYWRzJykKIAotICAgIGRlZiBfdGVzdChzZWxmLCBhZGRyZXNzKToKLSAgICAgICAgY29ubiA9IHNlbGYuY29ubmVjdGlvbi5DbGllbnQoYWRkcmVzcykKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3QoY2xzLCBhZGRyZXNzKToKKyAgICAgICAgY29ubiA9IGNscy5jb25uZWN0aW9uLkNsaWVudChhZGRyZXNzKQogICAgICAgICBjb25uLnNlbmQoJ2hlbGxvJykKICAgICAgICAgY29ubi5jbG9zZSgpCiAKQEAgLTE1MzAsMTIgKzE2MTAsNiBAQAogIwogIwogCi10cnk6Ci0gICAgZnJvbSBjdHlwZXMgaW1wb3J0IFN0cnVjdHVyZSwgVmFsdWUsIGNvcHksIGNfaW50LCBjX2RvdWJsZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIFN0cnVjdHVyZSA9IG9iamVjdAotICAgIGNfaW50ID0gY19kb3VibGUgPSBOb25lCi0KIGNsYXNzIF9Gb28oU3RydWN0dXJlKToKICAgICBfZmllbGRzXyA9IFsKICAgICAgICAgKCd4JywgY19pbnQpLApAQCAtMTU0Niw3ICsxNjIwLDEyIEBACiAKICAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKIAotICAgIGRlZiBfZG91YmxlKHNlbGYsIHgsIHksIGZvbywgYXJyLCBzdHJpbmcpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgbm90IEhBU19TSEFSRURDVFlQRVM6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXF1aXJlcyBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZG91YmxlKGNscywgeCwgeSwgZm9vLCBhcnIsIHN0cmluZyk6CiAgICAgICAgIHgudmFsdWUgKj0gMgogICAgICAgICB5LnZhbHVlICo9IDIKICAgICAgICAgZm9vLnggKj0gMgpAQCAtMTU1NiwxNSArMTYzNSwxMiBAQAogICAgICAgICAgICAgYXJyW2ldICo9IDIKIAogICAgIGRlZiB0ZXN0X3NoYXJlZGN0eXBlcyhzZWxmLCBsb2NrPUZhbHNlKToKLSAgICAgICAgaWYgY19pbnQgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIHggPSBWYWx1ZSgnaScsIDcsIGxvY2s9bG9jaykKICAgICAgICAgeSA9IFZhbHVlKGNfZG91YmxlLCAxLjAvMy4wLCBsb2NrPWxvY2spCiAgICAgICAgIGZvbyA9IFZhbHVlKF9Gb28sIDMsIDIsIGxvY2s9bG9jaykKICAgICAgICAgYXJyID0gc2VsZi5BcnJheSgnZCcsIHJhbmdlKDEwKSwgbG9jaz1sb2NrKQogICAgICAgICBzdHJpbmcgPSBzZWxmLkFycmF5KCdjJywgMjAsIGxvY2s9bG9jaykKLSAgICAgICAgc3RyaW5nLnZhbHVlID0gJ2hlbGxvJworICAgICAgICBzdHJpbmcudmFsdWUgPSBsYXRpbignaGVsbG8nKQogCiAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX2RvdWJsZSwgYXJncz0oeCwgeSwgZm9vLCBhcnIsIHN0cmluZykpCiAgICAgICAgIHAuc3RhcnQoKQpAQCAtMTU4Miw5ICsxNjU4LDYgQEAKICAgICAgICAgc2VsZi50ZXN0X3NoYXJlZGN0eXBlcyhsb2NrPVRydWUpCiAKICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgotICAgICAgICBpZiBjX2ludCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgZm9vID0gX0ZvbygyLCA1LjApCiAgICAgICAgIGJhciA9IGNvcHkoZm9vKQogICAgICAgICBmb28ueCA9IDAKQEAgLTE2MDAsNyArMTY3Myw4IEBACiAKICAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKIAotICAgIGRlZiBfdGVzdF9maW5hbGl6ZShzZWxmLCBjb25uKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfZmluYWxpemUoY2xzLCBjb25uKToKICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CiAgICAgICAgICAgICBwYXNzCiAKQEAgLTE2NTYsMTMgKzE3MzAsMTcgQEAKICAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKIAogICAgIGRlZiB0ZXN0X2ltcG9ydChzZWxmKToKLSAgICAgICAgbW9kdWxlcyA9ICgKKyAgICAgICAgbW9kdWxlcyA9IFsKICAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcnLCAnbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24nLAogICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5oZWFwJywgJ211bHRpcHJvY2Vzc2luZy5tYW5hZ2VycycsCiAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnBvb2wnLCAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MnLAotICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24nLCAnbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcycsCisgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbicsCiAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplJywgJ211bHRpcHJvY2Vzc2luZy51dGlsJwotICAgICAgICAgICAgKQorICAgICAgICAgICAgXQorCisgICAgICAgIGlmIGNfaW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBUaGlzIG1vZHVsZSByZXF1aXJlcyBfY3R5cGVzCisgICAgICAgICAgICBtb2R1bGVzLmFwcGVuZCgnbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcycpCiAKICAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlczoKICAgICAgICAgICAgIF9faW1wb3J0X18obmFtZSkKQEAgLTE2OTAsNyArMTc2OCw4IEBACiAgICAgICAgIGxvZ2dlci5pbmZvKCdub3Igd2lsbCB0aGlzJykKICAgICAgICAgbG9nZ2VyLnNldExldmVsKExPR19MRVZFTCkKIAotICAgIGRlZiBfdGVzdF9sZXZlbChzZWxmLCBjb25uKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfbGV2ZWwoY2xzLCBjb25uKToKICAgICAgICAgbG9nZ2VyID0gbXVsdGlwcm9jZXNzaW5nLmdldF9sb2dnZXIoKQogICAgICAgICBjb25uLnNlbmQobG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkpCiAKQEAgLTE3MTYsMTggKzE3OTUsMzggQEAKICAgICAgICAgcm9vdF9sb2dnZXIuc2V0TGV2ZWwocm9vdF9sZXZlbCkKICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxldmVsPUxPR19MRVZFTCkKIAorCisjIGNsYXNzIF9UZXN0TG9nZ2luZ1Byb2Nlc3NOYW1lKEJhc2VUZXN0Q2FzZSk6CisjCisjICAgICBkZWYgaGFuZGxlKHNlbGYsIHJlY29yZCk6CisjICAgICAgICAgYXNzZXJ0IHJlY29yZC5wcm9jZXNzTmFtZSA9PSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkubmFtZQorIyAgICAgICAgIHNlbGYuX19oYW5kbGVkID0gVHJ1ZQorIworIyAgICAgZGVmIHRlc3RfbG9nZ2luZyhzZWxmKToKKyMgICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5IYW5kbGVyKCkKKyMgICAgICAgICBoYW5kbGVyLmhhbmRsZSA9IHNlbGYuaGFuZGxlCisjICAgICAgICAgc2VsZi5fX2hhbmRsZWQgPSBGYWxzZQorIyAgICAgICAgICMgQnlwYXNzIGdldExvZ2dlcigpIGFuZCBzaWRlLWVmZmVjdHMKKyMgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkoCisjICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnRlc3QuVGVzdExvZ2dpbmdQcm9jZXNzTmFtZScpCisjICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKyMgICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyMKKyMgICAgICAgICBsb2dnZXIud2FybignZm9vJykKKyMgICAgICAgICBhc3NlcnQgc2VsZi5fX2hhbmRsZWQKKwogIwogIyBUZXN0IHRvIHZlcmlmeSBoYW5kbGUgdmVyaWZpY2F0aW9uLCBzZWUgaXNzdWUgMzMyMQogIwogCiBjbGFzcyBUZXN0SW52YWxpZEhhbmRsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKFdJTjMyLCAic2tpcHBlZCBvbiBXaW5kb3dzIikKICAgICBkZWYgdGVzdF9pbnZhbGlkX2hhbmRsZXMoc2VsZik6Ci0gICAgICAgIGlmIFdJTjMyOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGNvbm4gPSBfbXVsdGlwcm9jZXNzaW5nLkNvbm5lY3Rpb24oNDQ5Nzc2MDgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGNvbm4ucG9sbCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgX211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uLCAtMSkKKwogIwogIyBGdW5jdGlvbnMgdXNlZCB0byBjcmVhdGUgdGVzdCBjYXNlcyBmcm9tIHRoZSBiYXNlIG9uZXMgaW4gdGhpcyBtb2R1bGUKICMKQEAgLTE3NDQsNyArMTg0Myw3IEBACiBkZWYgY3JlYXRlX3Rlc3RfY2FzZXMoTWl4aW4sIHR5cGUpOgogICAgIHJlc3VsdCA9IHt9CiAgICAgZ2xvYiA9IGdsb2JhbHMoKQotICAgIFR5cGUgPSB0eXBlWzBdLnVwcGVyKCkgKyB0eXBlWzE6XQorICAgIFR5cGUgPSB0eXBlLmNhcGl0YWxpemUoKQogCiAgICAgZm9yIG5hbWUgaW4gZ2xvYi5rZXlzKCk6CiAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnX1Rlc3QnKToKQEAgLTE4MzMsNiArMTkzMiwzNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRmFrZUNvbm5lY3Rpb24oKSwgYidhYmMnKQogCiAjCisjIFRlc3QgTWFuYWdlci5zdGFydCgpL1Bvb2wuX19pbml0X18oKSBpbml0aWFsaXplciBmZWF0dXJlIC0gc2VlIGlzc3VlIDU1ODUKKyMKKworZGVmIGluaXRpYWxpemVyKG5zKToKKyAgICBucy50ZXN0ICs9IDEKKworY2xhc3MgVGVzdEluaXRpYWxpemVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm1nciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5ucyA9IHNlbGYubWdyLk5hbWVzcGFjZSgpCisgICAgICAgIHNlbGYubnMudGVzdCA9IDAKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5tZ3Iuc2h1dGRvd24oKQorCisgICAgZGVmIHRlc3RfbWFuYWdlcl9pbml0aWFsaXplcihzZWxmKToKKyAgICAgICAgbSA9IG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbS5zdGFydCwgMSkKKyAgICAgICAgbS5zdGFydChpbml0aWFsaXplciwgKHNlbGYubnMsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5zLnRlc3QsIDEpCisgICAgICAgIG0uc2h1dGRvd24oKQorCisgICAgZGVmIHRlc3RfcG9vbF9pbml0aWFsaXplcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtdWx0aXByb2Nlc3NpbmcuUG9vbCwgaW5pdGlhbGl6ZXI9MSkKKyAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDEsIGluaXRpYWxpemVyLCAoc2VsZi5ucywpKQorICAgICAgICBwLmNsb3NlKCkKKyAgICAgICAgcC5qb2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5zLnRlc3QsIDEpCisKKyMKICMgSXNzdWUgNTE1NSwgNTMxMywgNTMzMTogVGVzdCBwcm9jZXNzIGluIHByb2Nlc3NlcwogIyBWZXJpZmllcyBvcy5jbG9zZShzeXMuc3RkaW4uZmlsZW5vKSB2cy4gc3lzLnN0ZGluLmNsb3NlKCkgYmVoYXZpb3IKICMKQEAgLTE4OTgsNyArMjAyNyw4IEBACiAgICAgICAgIGZsaWtlLmZsdXNoKCkKICAgICAgICAgYXNzZXJ0IHNpby5nZXR2YWx1ZSgpID09ICdmb28nCiAKLXRlc3RjYXNlc19vdGhlciA9IFtPdGhlclRlc3QsIFRlc3RJbnZhbGlkSGFuZGxlLCBUZXN0U3RkaW5CYWRmaWxlZGVzY3JpcHRvcl0KK3Rlc3RjYXNlc19vdGhlciA9IFtPdGhlclRlc3QsIFRlc3RJbnZhbGlkSGFuZGxlLCBUZXN0SW5pdGlhbGl6ZXJzLAorICAgICAgICAgICAgICAgICAgIFRlc3RTdGRpbkJhZGZpbGVkZXNjcmlwdG9yXQogCiAjCiAjCkBAIC0xOTA5LDggKzIwMzksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsb2NrID0gbXVsdGlwcm9jZXNzaW5nLlJMb2NrKCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZAotICAgICAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQoIk9TRXJyb3IgcmFpc2VzIG9uIFJMb2NrIGNyZWF0aW9uLCBzZWUgaXNzdWUgMzExMSEiKQorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VzIG9uIFJMb2NrIGNyZWF0aW9uLCBzZWUgaXNzdWUgMzExMSEiKQogCiAgICAgaWYgcnVuIGlzIE5vbmU6CiAgICAgICAgIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCBhcyBydW4KQEAgLTE5MzQsOCArMjA2MywxNCBAQAogCiAgICAgbG9hZFRlc3RzRnJvbVRlc3RDYXNlID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlCiAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUobG9hZFRlc3RzRnJvbVRlc3RDYXNlKHRjKSBmb3IgdGMgaW4gdGVzdGNhc2VzKQotICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKAotICAgICAgICAgICAgKCIuK19fKGdldHxzZXQpc2xpY2VfXyBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgIyAobmNvZ2hsYW4pOiBXaGV0aGVyIG9yIG5vdCBzeXMuZXhjX2NsZWFyIGlzIGV4ZWN1dGVkIGJ5IHRoZSB0aHJlYWRpbmcKKyAgICAjIG1vZHVsZSBkdXJpbmcgdGhlc2UgdGVzdHMgaXMgYXQgbGVhc3QgcGxhdGZvcm0gZGVwZW5kZW50IGFuZCBwb3NzaWJseQorICAgICMgbm9uLWRldGVybWluaXN0aWMgb24gYW55IGdpdmVuIHBsYXRmb3JtLiBTbyB3ZSBkb24ndCBtaW5kIGlmIHRoZSBsaXN0ZWQKKyAgICAjIHdhcm5pbmdzIGFyZW4ndCBhY3R1YWxseSByYWlzZWQuCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICgiLitfXyhnZXR8c2V0KXNsaWNlX18gaGFzIGJlZW4gcmVtb3ZlZCIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAociJzeXMuZXhjX2NsZWFyXChcKSBub3Qgc3VwcG9ydGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgIHF1aWV0PVRydWUpOgogICAgICAgICBydW4oc3VpdGUpCiAKICAgICBUaHJlYWRzTWl4aW4ucG9vbC50ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdXRleC5weSBiL0xpYi90ZXN0L3Rlc3RfbXV0ZXgucHkKaW5kZXggNGUzZjdjZC4uMjg4MjIxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdXRleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X211dGV4LnB5CkBAIC05LDE0ICs5LDE0IEBACiAKICAgICAgICAgZGVmIGNhbGxlZF9ieV9tdXRleChzb21lX2RhdGEpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb21lX2RhdGEsICJzcGFtIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtLnRlc3QoKSwgIm11dGV4IG5vdCBoZWxkIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLnRlc3QoKSwgIm11dGV4IG5vdCBoZWxkIikKICAgICAgICAgICAgICMgTmVzdGVkIGxvY2tpbmcKICAgICAgICAgICAgIG0ubG9jayhjYWxsZWRfYnlfbXV0ZXgyLCAiZWdncyIpCiAKICAgICAgICAgZGVmIGNhbGxlZF9ieV9tdXRleDIoc29tZV9kYXRhKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNvbWVfZGF0YSwgImVnZ3MiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG0udGVzdCgpLCAibXV0ZXggbm90IGhlbGQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHJlYWR5X2Zvcl8yLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0udGVzdCgpLCAibXV0ZXggbm90IGhlbGQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlYWR5X2Zvcl8yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJjYWxsZWRfYnlfbXV0ZXgyIGNhbGxlZCB0b28gc29vbiIpCiAKICAgICAgICAgbSA9IG11dGV4Lm11dGV4KCkKQEAgLTI2LDcgKzI2LDcgQEAKICAgICAgICAgIyB1bmxvY2sgYm90aCBsb2NrcwogICAgICAgICBtLnVubG9jaygpCiAgICAgICAgIG0udW5sb2NrKCkKLSAgICAgICAgc2VsZi5mYWlsSWYobS50ZXN0KCksICJtdXRleCBzdGlsbCBoZWxkIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLnRlc3QoKSwgIm11dGV4IHN0aWxsIGhlbGQiKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE11dGV4VGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbmV0cmMucHkgYi9MaWIvdGVzdC90ZXN0X25ldHJjLnB5CmluZGV4IGI1MzYyNTUuLmE5ODg0MzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbmV0cmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9uZXRyYy5weQpAQCAtMyw3ICszLDEzIEBACiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiBURVNUX05FVFJDID0gIiIiCisKKyAjdGhpcyBpcyBhIGNvbW1lbnQKKyN0aGlzIGlzIGEgY29tbWVudAorIyB0aGlzIGlzIGEgY29tbWVudAorCiBtYWNoaW5lIGZvbyBsb2dpbiBsb2cxIHBhc3N3b3JkIHBhc3MxIGFjY291bnQgYWNjdDEKK21hY2hpbmUgYmFyIGxvZ2luIGxvZzEgcGFzc3dvcmQgcGFzcyMgYWNjb3VudCBhY2N0MQogCiBtYWNkZWYgbWFjcm8xCiBsaW5lMQpAQCAtMjgsMTggKzM0LDIxIEBACiAgICAgICAgIGZwID0gb3Blbih0ZW1wX2ZpbGVuYW1lLCBtb2RlKQogICAgICAgICBmcC53cml0ZShURVNUX05FVFJDKQogICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgIHNlbGYubmV0cmMgPSBuZXRyYy5uZXRyYyh0ZW1wX2ZpbGVuYW1lKQorICAgICAgICBzZWxmLm5yYyA9IG5ldHJjLm5ldHJjKHRlbXBfZmlsZW5hbWUpCiAKICAgICBkZWYgdGVhckRvd24gKHNlbGYpOgotICAgICAgICBkZWwgc2VsZi5uZXRyYwogICAgICAgICBvcy51bmxpbmsodGVtcF9maWxlbmFtZSkKIAogICAgIGRlZiB0ZXN0X2Nhc2VfMShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubmV0cmMubWFjcm9zID09IHsnbWFjcm8xJzpbJ2xpbmUxXG4nLCAnbGluZTJcbiddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYWNybzInOlsnbGluZTNcbicsICdsaW5lNFxuJ119Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5uZXRyYy5ob3N0c1snZm9vJ10gPT0gKCdsb2cxJywgJ2FjY3QxJywgJ3Bhc3MxJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm5ldHJjLmhvc3RzWydkZWZhdWx0J10gPT0gKCdsb2cyJywgTm9uZSwgJ3Bhc3MyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ucmMuaG9zdHNbJ2ZvbyddLCAoJ2xvZzEnLCAnYWNjdDEnLCAncGFzczEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5yYy5ob3N0c1snZGVmYXVsdCddLCAoJ2xvZzInLCBOb25lLCAncGFzczInKSkKKworICAgIGRlZiB0ZXN0X21hY3JvcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5yYy5tYWNyb3MsIHsnbWFjcm8xJzpbJ2xpbmUxXG4nLCAnbGluZTJcbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYWNybzInOlsnbGluZTNcbicsICdsaW5lNFxuJ119KQorCisgICAgZGVmIHRlc3RfcGFyc2VzX3Bhc3N3b3Jkc193aXRoX2hhc2hfY2hhcmFjdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnJjLmhvc3RzWydiYXInXSwgKCdsb2cxJywgJ2FjY3QxJywgJ3Bhc3MjJykpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE5ldHJjVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25ldy5weSBiL0xpYi90ZXN0L3Rlc3RfbmV3LnB5CmluZGV4IDIzMWY0YmIuLmE4NGIzZDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbmV3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbmV3LnB5CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAgICAgIGQgPSBuZXcuY29kZShhcmdjb3VudCwgbmxvY2Fscywgc3RhY2tzaXplLCBmbGFncywgY29kZXN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMsIHQsIHZhcm5hbWVzLCBmaWxlbmFtZSwgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdGxpbmVubywgbG5vdGFiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodFswXSkgaXMgUywgImVlaywgdHVwbGUgY2hhbmdlZCB1bmRlciB1cyEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodFswXSkgaXMgUywgImVlaywgdHVwbGUgY2hhbmdlZCB1bmRlciB1cyEiKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChOZXdUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9uaXMucHkgYi9MaWIvdGVzdC90ZXN0X25pcy5weQppbmRleCBjOTU4ZDRiLi44ZDQ5NTUwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25pcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X25pcy5weQpAQCAtMSw2ICsxLDcgQEAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBuaXMKKworbmlzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ25pcycpCiAKIGNsYXNzIE5pc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9tYXBzKHNlbGYpOgpAQCAtMTAsNyArMTEsNyBAQAogICAgICAgICAgICAgIyBOSVMgaXMgcHJvYmFibHkgbm90IGFjdGl2ZSwgc28gdGhpcyB0ZXN0IGlzbid0IHVzZWZ1bAogICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQgIlRlc3QgU2tpcHBlZDoiLCBtc2cKLSAgICAgICAgICAgICMgQ2FuJ3QgcmFpc2UgVGVzdFNraXBwZWQgYXMgcmVncnRlc3Qgb25seSByZWNvZ25pemVzIHRoZSBleGNlcHRpb24KKyAgICAgICAgICAgICMgQ2FuJ3QgcmFpc2UgU2tpcFRlc3QgYXMgcmVncnRlc3Qgb25seSByZWNvZ25pemVzIHRoZSBleGNlcHRpb24KICAgICAgICAgICAgICMgICBpbXBvcnQgdGltZS4KICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKaW5kZXggNGEwZjFjNS4uMzA0MGEwOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQpAQCAtMSwxOSArMSwxNyBAQAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBvcGVuX3VybHJlc291cmNlLCBUZXN0U2tpcHBlZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBvcGVuX3VybHJlc291cmNlCiBpbXBvcnQgdW5pdHRlc3QKIAorZnJvbSBodHRwbGliIGltcG9ydCBIVFRQRXhjZXB0aW9uCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGZyb20gdW5pY29kZWRhdGEgaW1wb3J0IG5vcm1hbGl6ZSwgdW5pZGF0YV92ZXJzaW9uCiAKLVRFU1REQVRBRklMRSA9ICJOb3JtYWxpemF0aW9uVGVzdCIgKyBvcy5leHRzZXAgKyAidHh0IgorVEVTVERBVEFGSUxFID0gIk5vcm1hbGl6YXRpb25UZXN0LnR4dCIKIFRFU1REQVRBVVJMID0gImh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLyIgKyB1bmlkYXRhX3ZlcnNpb24gKyAiL3VjZC8iICsgVEVTVERBVEFGSUxFCiAKLWlmIG9zLnBhdGguZXhpc3RzKFRFU1REQVRBRklMRSk6Ci0gICAgZiA9IG9wZW4oVEVTVERBVEFGSUxFKQotICAgIGwgPSBmLnJlYWRsaW5lKCkKLSAgICBmLmNsb3NlKCkKLSAgICBpZiBub3QgdW5pZGF0YV92ZXJzaW9uIGluIGw6Ci0gICAgICAgIG9zLnVubGluayhURVNUREFUQUZJTEUpCitkZWYgY2hlY2tfdmVyc2lvbih0ZXN0ZmlsZSk6CisgICAgaGRyID0gdGVzdGZpbGUucmVhZGxpbmUoKQorICAgIHJldHVybiB1bmlkYXRhX3ZlcnNpb24gaW4gaGRyCiAKIGNsYXNzIFJhbmdlRXJyb3IoRXhjZXB0aW9uKToKICAgICBwYXNzCkBAIC0zOSw4ICszNywxNCBAQAogCiBjbGFzcyBOb3JtYWxpemF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbWFpbihzZWxmKToKKyAgICAgICAgcGFydCA9IE5vbmUKICAgICAgICAgcGFydDFfZGF0YSA9IHt9Ci0gICAgICAgIGZvciBsaW5lIGluIG9wZW5fdXJscmVzb3VyY2UoVEVTVERBVEFVUkwpOgorICAgICAgICAjIEhpdCB0aGUgZXhjZXB0aW9uIGVhcmx5CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RkYXRhID0gb3Blbl91cmxyZXNvdXJjZShURVNUREFUQVVSTCwgY2hlY2tfdmVyc2lvbikKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiICsgVEVTVERBVEFVUkwpCisgICAgICAgIGZvciBsaW5lIGluIHRlc3RkYXRhOgogICAgICAgICAgICAgaWYgJyMnIGluIGxpbmU6CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoJyMnKVswXQogICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQpAQCAtNjQsMTQgKzY4LDE0IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgIyBQZXJmb3JtIHRlc3RzCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYzIgPT0gIE5GQyhjMSkgPT0gIE5GQyhjMikgPT0gIE5GQyhjMyksIGxpbmUpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYzQgPT0gIE5GQyhjNCkgPT0gIE5GQyhjNSksIGxpbmUpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYzMgPT0gIE5GRChjMSkgPT0gIE5GRChjMikgPT0gIE5GRChjMyksIGxpbmUpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYzUgPT0gIE5GRChjNCkgPT0gIE5GRChjNSksIGxpbmUpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYzQgPT0gTkZLQyhjMSkgPT0gTkZLQyhjMikgPT0gXAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyID09ICBORkMoYzEpID09ICBORkMoYzIpID09ICBORkMoYzMpLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGM0ID09ICBORkMoYzQpID09ICBORkMoYzUpLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMzID09ICBORkQoYzEpID09ICBORkQoYzIpID09ICBORkQoYzMpLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGM1ID09ICBORkQoYzQpID09ICBORkQoYzUpLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGM0ID09IE5GS0MoYzEpID09IE5GS0MoYzIpID09IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORktDKGMzKSA9PSBORktDKGM0KSA9PSBORktDKGM1KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGM1ID09IE5GS0QoYzEpID09IE5GS0QoYzIpID09IFwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjNSA9PSBORktEKGMxKSA9PSBORktEKGMyKSA9PSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZLRChjMykgPT0gTkZLRChjNCkgPT0gTkZLRChjNSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSkKIApAQCAtODQsNyArODgsNyBAQAogICAgICAgICAgICAgWCA9IHVuaWNocihjKQogICAgICAgICAgICAgaWYgWCBpbiBwYXJ0MV9kYXRhOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoWCA9PSBORkMoWCkgPT0gTkZEKFgpID09IE5GS0MoWCkgPT0gTkZLRChYKSwgYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShYID09IE5GQyhYKSA9PSBORkQoWCkgPT0gTkZLQyhYKSA9PSBORktEKFgpLCBjKQogCiAgICAgZGVmIHRlc3RfYnVnXzgzNDY3NihzZWxmKToKICAgICAgICAgIyBDaGVjayBmb3IgYnVnIDgzNDY3NgpAQCAtOTIsMTEgKzk2LDYgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgIyBIaXQgdGhlIGV4Y2VwdGlvbiBlYXJseQotICAgIHRyeToKLSAgICAgICAgb3Blbl91cmxyZXNvdXJjZShURVNUREFUQVVSTCkKLSAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQoImNvdWxkIG5vdCByZXRyaWV2ZSAiICsgVEVTVERBVEFVUkwpCiAgICAgcnVuX3VuaXR0ZXN0KE5vcm1hbGl6YXRpb25UZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkgYi9MaWIvdGVzdC90ZXN0X250cGF0aC5weQppbmRleCBhNDIxOTA3Li5lMTg1MmMwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X250cGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X250cGF0aC5weQpAQCAtMSw3ICsxLDcgQEAKIGltcG9ydCBudHBhdGgKIGltcG9ydCBvcwotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVGVzdEZhaWxlZAotaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0IGFzIHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdEZhaWxlZAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHRlc3RfZ2VuZXJpY3BhdGgKIGltcG9ydCB1bml0dGVzdAogCiAKQEAgLTEyMywyMSArMTIzLDE1IEBACiAgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCdDOi8vLy9hL2InKSIsIHInQzpcYVxiJykKICAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJy8vbWFjaGluZS9zaGFyZS8vYS9iJykiLCByJ1xcbWFjaGluZVxzaGFyZVxhXGInKQogCi0gICAgICAgICMgSXNzdWUgNTgyNzogTWFrZSBzdXJlIG5vcm1wYXRoIHByZXNlcnZlcyB1bmljb2RlCi0gICAgICAgIGZvciBwYXRoIGluICh1JycsIHUnLicsIHUnLycsIHUnXFwnLCB1Jy8vL2Zvby8uLy9iYXIvLycpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobnRwYXRoLm5vcm1wYXRoKHBhdGgpLCB1bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9ybXBhdGgoKSByZXR1cm5lZCBzdHIgaW5zdGVhZCBvZiB1bmljb2RlJykKLQogICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnXFxcXC5cXE5VTCcpIiwgcidcXC5cTlVMJykKICAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ1xcXFw/XFxEOi9YWVxcWicpIiwgcidcXD9cRDovWFlcWicpCiAKICAgICBkZWYgdGVzdF9leHBhbmR2YXJzKHNlbGYpOgotICAgICAgICBvbGRlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKLSAgICAgICAgICAgIG9zLmVudmlyb25bImZvbyJdID0gImJhciIKLSAgICAgICAgICAgIG9zLmVudmlyb25bIntmb28iXSA9ICJiYXoxIgotICAgICAgICAgICAgb3MuZW52aXJvblsie2Zvb30iXSA9ICJiYXoyIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52LmNsZWFyKCkKKyAgICAgICAgICAgIGVudlsiZm9vIl0gPSAiYmFyIgorICAgICAgICAgICAgZW52WyJ7Zm9vIl0gPSAiYmF6MSIKKyAgICAgICAgICAgIGVudlsie2Zvb30iXSA9ICJiYXoyIgogICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiZm9vIiknLCAiZm9vIikKICAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiRmb28gYmFyIiknLCAiYmFyIGJhciIpCiAgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIke2Zvb31iYXIiKScsICJiYXJiYXIiKQpAQCAtMTU3LDkgKzE1MSw2IEBACiAgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIlP2JhciUiKScsICIlP2JhciUiKQogICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJWZvbyUlYmFyIiknLCAiYmFyJWJhciIpCiAgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCJcJyVmb28lXCclYmFyIiknLCAiXCclZm9vJVwnJWJhciIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKLSAgICAgICAgICAgIG9zLmVudmlyb24udXBkYXRlKG9sZGVudikKIAogICAgIGRlZiB0ZXN0X2Fic3BhdGgoc2VsZik6CiAgICAgICAgICMgbnRwYXRoLmFic3BhdGgoKSBjYW4gb25seSBiZSB1c2VkIG9uIGEgc3lzdGVtIHdpdGggdGhlICJudCIgbW9kdWxlCkBAIC0xNzYsMjMgKzE2Nyw2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5hYnNwYXRoKCJDOlxcIiknLCAiQzpcXCIpCiAKLSAgICAgICAgICAgICMgSXNzdWUgMzQyNjogY2hlY2sgdGhhdCBhYnNwYXRoIHJldHVucyB1bmljb2RlIHdoZW4gdGhlIGFyZyBpcwotICAgICAgICAgICAgIyB1bmljb2RlIGFuZCBzdHIgd2hlbiBpdCdzIHN0ciwgd2l0aCBib3RoIEFTQ0lJIGFuZCBub24tQVNDSUkgY3dkcwotICAgICAgICAgICAgc2F2ZWRfY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGZvciBjd2QgaW4gKHUnY3dkJywgdSdceGU3d1x4ZjAnKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKGN3ZCkKLSAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQotICAgICAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiAoJycsICdmb28nLCAnZlx4ZjJceGYyJywgJy9mb28nLCAnQzpcXCcpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobnRwYXRoLmFic3BhdGgocGF0aCksIHN0cikpCi0gICAgICAgICAgICAgICAgICAgIGZvciB1cGF0aCBpbiAodScnLCB1J2Z1dScsIHUnZlx4ZjlceGY5JywgdScvZnV1JywgdSdVOlxcJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShudHBhdGguYWJzcGF0aCh1cGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlKSkKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcihzYXZlZF9jd2QpCi0gICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGN3ZCkKLQotCiAgICAgZGVmIHRlc3RfcmVscGF0aChzZWxmKToKICAgICAgICAgY3VycmVudGRpciA9IG9zLnBhdGguc3BsaXQob3MuZ2V0Y3dkKCkpWy0xXQogICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhIiknLCAnYScpCkBAIC0yMDQsMTAgKzE3OCwyNSBAQAogICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhIiwgImIvYyIpJywgJy4uXFwuLlxcYScpCiAgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi8vY29ua3kvbW91bnRwb2ludC9hIiwgIi8vY29ua3kvbW91bnRwb2ludC9iL2MiKScsICcuLlxcLi5cXGEnKQogICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhIiwgImEiKScsICcuJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi94L3kveiIpJywgJy4uXFwuLlxcLi5cXGZvb1xcYmFyXFxiYXQnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiL2Zvby9iYXIiKScsICdiYXQnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiLyIpJywgJ2Zvb1xcYmFyXFxiYXQnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIvIiwgIi9mb28vYmFyL2JhdCIpJywgJy4uXFwuLlxcLi4nKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiL3giKScsICcuLlxcZm9vXFxiYXJcXGJhdCcpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi94IiwgIi9mb28vYmFyL2JhdCIpJywgJy4uXFwuLlxcLi5cXHgnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIvIiwgIi8iKScsICcuJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL2EiLCAiL2EiKScsICcuJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL2EvYiIsICIvYS9iIiknLCAnLicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImM6L2ZvbyIsICJDOi9GT08iKScsICcuJykKKworCitjbGFzcyBOdENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0KToKKyAgICBwYXRobW9kdWxlID0gbnRwYXRoCisgICAgYXR0cmlidXRlcyA9IFsncmVscGF0aCcsICdzcGxpdHVuYyddCiAKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdE50cGF0aCkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3ROdHBhdGgsIE50Q29tbW9uVGVzdCkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vbGRfbWFpbGJveC5weSBiL0xpYi90ZXN0L3Rlc3Rfb2xkX21haWxib3gucHkKaW5kZXggYWRkOTQwNi4uZThkZmY1MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vbGRfbWFpbGJveC5weQorKysgYi9MaWIvdGVzdC90ZXN0X29sZF9tYWlsYm94LnB5CkBAIC00OCwxOCArNDgsMTYgQEAKICAgICAgICAgZmlsZW5hbWUgPSBvcy5leHRzZXAuam9pbigoc3RyKHQpLCBzdHIocGlkKSwgIm15aG9zdG5hbWUiLCAibXlkb21haW4iKSkKICAgICAgICAgdG1wbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJ0bXAiLCBmaWxlbmFtZSkKICAgICAgICAgbmV3bmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9kaXIsIGRpciwgZmlsZW5hbWUpCi0gICAgICAgIGZwID0gb3Blbih0bXBuYW1lLCAidyIpCi0gICAgICAgIHNlbGYuX21zZ2ZpbGVzLmFwcGVuZCh0bXBuYW1lKQotICAgICAgICBpZiBtYm94OgotICAgICAgICAgICAgZnAud3JpdGUoRlJPTV8pCi0gICAgICAgIGZwLndyaXRlKERVTU1ZX01FU1NBR0UpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHRtcG5hbWUsICJ3IikgYXMgZnA6CisgICAgICAgICAgICBzZWxmLl9tc2dmaWxlcy5hcHBlbmQodG1wbmFtZSkKKyAgICAgICAgICAgIGlmIG1ib3g6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoRlJPTV8pCisgICAgICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQogICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGluayIpOgogICAgICAgICAgICAgb3MubGluayh0bXBuYW1lLCBuZXduYW1lKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZnAgPSBvcGVuKG5ld25hbWUsICJ3IikKLSAgICAgICAgICAgIGZwLndyaXRlKERVTU1ZX01FU1NBR0UpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4obmV3bmFtZSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQogICAgICAgICBzZWxmLl9tc2dmaWxlcy5hcHBlbmQobmV3bmFtZSkKICAgICAgICAgcmV0dXJuIHRtcG5hbWUKIApAQCAtNjcsNDYgKzY1LDQ3IEBACiAgICAgICAgICIiIlRlc3QgYW4gZW1wdHkgbWFpbGRpciBtYWlsYm94IiIiCiAgICAgICAgICMgVGVzdCBmb3IgcmVncmVzc2lvbiBvbiBidWcgIzExNzQ5MDoKICAgICAgICAgc2VsZi5tYm94ID0gbWFpbGJveC5NYWlsZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5tYm94KSA9PSAwKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveCkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKIAogICAgIGRlZiB0ZXN0X25vbmVtcHR5X21haWxkaXJfY3VyKHNlbGYpOgogICAgICAgICBzZWxmLmNyZWF0ZU1lc3NhZ2UoImN1ciIpCiAgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYubWJveCkgPT0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgbm90IE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5tYm94KSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYm94Lm5leHQoKSBpcyBub3QgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKIAogICAgIGRlZiB0ZXN0X25vbmVtcHR5X21haWxkaXJfbmV3KHNlbGYpOgogICAgICAgICBzZWxmLmNyZWF0ZU1lc3NhZ2UoIm5ldyIpCiAgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYubWJveCkgPT0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgbm90IE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5tYm94KSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYm94Lm5leHQoKSBpcyBub3QgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKIAogICAgIGRlZiB0ZXN0X25vbmVtcHR5X21haWxkaXJfYm90aChzZWxmKToKICAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJjdXIiKQogICAgICAgICBzZWxmLmNyZWF0ZU1lc3NhZ2UoIm5ldyIpCiAgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYubWJveCkgPT0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgbm90IE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIG5vdCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveCkgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgbm90IE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIG5vdCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQogCiAgICAgZGVmIHRlc3RfdW5peF9tYm94KHNlbGYpOgogICAgICAgICAjIyMgc2hvdWxkIGJlIGJldHRlciEKICAgICAgICAgaW1wb3J0IGVtYWlsLnBhcnNlcgogICAgICAgICBmbmFtZSA9IHNlbGYuY3JlYXRlTWVzc2FnZSgiY3VyIiwgVHJ1ZSkKICAgICAgICAgbiA9IDAKLSAgICAgICAgZm9yIG1zZyBpbiBtYWlsYm94LlBvcnRhYmxlVW5peE1haWxib3gob3BlbihmbmFtZSksCisgICAgICAgIHdpdGggb3BlbihmbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIGZvciBtc2cgaW4gbWFpbGJveC5Qb3J0YWJsZVVuaXhNYWlsYm94KGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsLnBhcnNlci5QYXJzZXIoKS5wYXJzZSk6Ci0gICAgICAgICAgICBuICs9IDEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWyJzdWJqZWN0Il0sICJTaW1wbGUgVGVzdCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdHIobXNnKSksIGxlbihGUk9NXykrbGVuKERVTU1ZX01FU1NBR0UpKQorICAgICAgICAgICAgICAgIG4gKz0gMQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWyJzdWJqZWN0Il0sICJTaW1wbGUgVGVzdCIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RyKG1zZykpLCBsZW4oRlJPTV8pK2xlbihEVU1NWV9NRVNTQUdFKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCAxKQogCiBjbGFzcyBNYm94VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTE5LDggKzExOCw4IEBACiAKICAgICBkZWYgdGVzdF9mcm9tX3JlZ2V4IChzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIG5ldyByZWdleCBmcm9tIGJ1ZyAjMTYzMzY3OAotICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAndycpCi0gICAgICAgIGYud3JpdGUoIiIiRnJvbSBmcmVkQGV4YW1wbGUuY29tIE1vbiBNYXkgMzEgMTM6MjQ6NTAgMjAwNCArMDIwMAorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiIiJGcm9tIGZyZWRAZXhhbXBsZS5jb20gTW9uIE1heSAzMSAxMzoyNDo1MCAyMDA0ICswMjAwCiBTdWJqZWN0OiBtZXNzYWdlIDEKIAogYm9keTEKQEAgLTEzNyw5ICsxMzYsOSBAQAogCiBib2R5NAogIiIiKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgYm94ID0gbWFpbGJveC5Vbml4TWFpbGJveChvcGVuKHNlbGYuX3BhdGgsICdyJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4obGlzdChpdGVyKGJveCkpKSA9PSA0KQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fcGF0aCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgYm94ID0gbWFpbGJveC5Vbml4TWFpbGJveChmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihsaXN0KGl0ZXIoYm94KSkpID09IDQpCiAKIAogICAgICMgWFhYIFdlIHN0aWxsIG5lZWQgbW9yZSB0ZXN0cyEKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3Bjb2Rlcy5weSBiL0xpYi90ZXN0L3Rlc3Rfb3Bjb2Rlcy5weQppbmRleCAzNmJkM2ZmLi42ZDExN2Q2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wY29kZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGNvZGVzLnB5CkBAIC0xLDYgKzEsNiBAQAogIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCAyLCBvcGNvZGVzCiAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgX2NoZWNrX3B5M2tfd2FybmluZ3MKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfcHkza193YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CiAKIGNsYXNzIE9wY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgICAgIHRyeTogIHJhaXNlIERDbGFzcywgYQogICAgICAgICBleGNlcHQgRENsYXNzLCB2OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodiwgRENsYXNzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LCBEQ2xhc3MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiIpCiAKQEAgLTcyLDM5ICs3Miw0NSBAQAogCiAgICAgICAgIGYgPSBldmFsKCdsYW1iZGE6IE5vbmUnKQogICAgICAgICBnID0gZXZhbCgnbGFtYmRhOiBOb25lJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoZiwgZykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQogCiAgICAgICAgIGYgPSBldmFsKCdsYW1iZGEgYTogYScpCiAgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYTogYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGYsIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKIAogICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE9MTogYScpCiAgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYT0xOiBhJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoZiwgZykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQogCiAgICAgICAgIGYgPSBldmFsKCdsYW1iZGE6IDAnKQogICAgICAgICBnID0gZXZhbCgnbGFtYmRhOiAxJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoZiwgZykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQogCiAgICAgICAgIGYgPSBldmFsKCdsYW1iZGE6IE5vbmUnKQogICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE6IE5vbmUnKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhmLCBnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGYsIGcpCiAKICAgICAgICAgZiA9IGV2YWwoJ2xhbWJkYSBhOiBOb25lJykKICAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYSBiOiBOb25lJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoZiwgZykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQogCiAgICAgICAgIGYgPSBldmFsKCdsYW1iZGEgYTogTm9uZScpCiAgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYT1Ob25lOiBOb25lJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoZiwgZykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQogCiAgICAgICAgIGYgPSBldmFsKCdsYW1iZGEgYT0wOiBOb25lJykKICAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYSBhPTE6IE5vbmUnKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhmLCBnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGYsIGcpCisKKyAgICBkZWYgdGVzdF9tb2R1bG9fb2Zfc3RyaW5nX3N1YmNsYXNzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIE15U3RyaW5nKHN0cik6CisgICAgICAgICAgICBkZWYgX19tb2RfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTXlTdHJpbmcoKSAlIDMsIDQyKQogCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCgiZXhjZXB0aW9ucyBtdXN0IGRlcml2ZSBmcm9tIEJhc2VFeGNlcHRpb24iLAorICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoImV4Y2VwdGlvbnMgbXVzdCBkZXJpdmUgZnJvbSBCYXNlRXhjZXB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiY2F0Y2hpbmcgY2xhc3NlcyB0aGF0IGRvbid0IGluaGVyaXQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb20gQmFzZUV4Y2VwdGlvbiBpcyBub3QgYWxsb3dlZCIsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkgYi9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKaW5kZXggNjQ3MWY1OC4uMjBjNGZlMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQpAQCAtMSwxMCArMSwxMCBAQAogIyBUZXN0IHRvIHNlZSBpZiBvcGVucHR5IHdvcmtzLiAoQnV0IGRvbid0IHdvcnJ5IGlmIGl0IGlzbid0IGF2YWlsYWJsZS4pCiAKIGltcG9ydCBvcywgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVGVzdFNraXBwZWQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBpZiBub3QgaGFzYXR0cihvcywgIm9wZW5wdHkiKToKLSAgICByYWlzZSBUZXN0U2tpcHBlZCwgIk5vIG9wZW5wdHkoKSBhdmFpbGFibGUuIgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAiTm8gb3BlbnB0eSgpIGF2YWlsYWJsZS4iCiAKIAogY2xhc3MgT3BlbnB0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKaW5kZXggNGU5YjNjNC4uODFhODAyMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CkBAIC0zNCwxNjYgKzM0LDE2NiBAQAogCiBjbGFzcyBPcGVyYXRvclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9sdChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0LCAxaiwgMmopCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmx0KDEsIDApKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5sdCgxLCAwLjApKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5sdCgxLCAxKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IubHQoMSwgMS4wKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmx0KDEsIDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubHQoMSwgMi4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sdCwgMWosIDJqKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmx0KDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmx0KDEsIDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubHQoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubHQoMSwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmx0KDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubHQoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2xlKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubGUsIDFqLCAyaikKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IubGUoMSwgMCkpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmxlKDEsIDAuMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5sZSgxLCAxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmxlKDEsIDEuMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5sZSgxLCAyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmxlKDEsIDIuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubGUsIDFqLCAyaikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sZSgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sZSgxLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubGUoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sZSgxLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubGUoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZXEoc2VsZik6CiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCiAgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5lcSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFN5bnRheEVycm9yLCBvcGVyYXRvci5lcSwgQygpLCBDKCkpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmVxKDEsIDApKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5lcSgxLCAwLjApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZXEoMSwgMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5lcSgxLCAxLjApKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5lcSgxLCAyKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuZXEoMSwgMi4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5lcSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIG9wZXJhdG9yLmVxLCBDKCksIEMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5lcSgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5lcSgxLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZXEoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5lcSgxLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmVxKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmVxKDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9uZShzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IubmUsIEMoKSwgQygpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubmUoMSwgMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5uZSgxLCAwLjApKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5uZSgxLCAxKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IubmUoMSwgMS4wKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLm5lKDEsIDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubmUoMSwgMi4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIG9wZXJhdG9yLm5lLCBDKCksIEMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lKDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubmUoMSwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5uZSgxLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5uZSgxLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubmUoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZ2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSwgMWosIDJqKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZ2UoMSwgMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5nZSgxLCAwLjApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZ2UoMSwgMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5nZSgxLCAxLjApKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5nZSgxLCAyKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuZ2UoMSwgMi4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSwgMWosIDJqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2UoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZSgxLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2UoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZSgxLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmdlKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmdlKDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9ndChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmd0LCAxaiwgMmopCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5ndCgxLCAwKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmd0KDEsIDAuMCkpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmd0KDEsIDEpKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5ndCgxLCAxLjApKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5ndCgxLCAyKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuZ3QoMSwgMi4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgMWosIDJqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ3QoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5ndCgxLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmd0KDEsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmd0KDEsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ3QoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ3QoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2FicyhzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hYnMsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5hYnMoLTEpID09IDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5hYnMoMSkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hYnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYWJzKC0xKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYWJzKDEpID09IDEpCiAKICAgICBkZWYgdGVzdF9hZGQoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWRkLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuYWRkKDMsIDQpID09IDcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWRkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmFkZCgzLCA0KSA9PSA3KQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV9hbmQoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFuZF8pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFuZF8sIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5hbmRfKDB4ZiwgMHhhKSA9PSAweGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYW5kXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYW5kXygweGYsIDB4YSkgPT0gMHhhKQogCiAgICAgZGVmIHRlc3RfY29uY2F0KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmNvbmNhdCgncHknLCAndGhvbicpID09ICdweXRob24nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuY29uY2F0KFsxLCAyXSwgWzMsIDRdKSA9PSBbMSwgMiwgMywgNF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5jb25jYXQoU2VxMShbNSwgNl0pLCBTZXExKFs3XSkpID09IFs1LCA2LCA3XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmNvbmNhdChTZXEyKFs1LCA2XSksIFNlcTIoWzddKSkgPT0gWzUsIDYsIDddKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQsIDEzLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0LCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29uY2F0KCdweScsICd0aG9uJykgPT0gJ3B5dGhvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb25jYXQoWzEsIDJdLCBbMywgNF0pID09IFsxLCAyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbmNhdChTZXExKFs1LCA2XSksIFNlcTEoWzddKSkgPT0gWzUsIDYsIDddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29uY2F0KFNlcTIoWzUsIDZdKSwgU2VxMihbN10pKSA9PSBbNSwgNiwgN10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0LCAxMywgMjkpCiAKICAgICBkZWYgdGVzdF9jb3VudE9mKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb3VudE9mKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb3VudE9mLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuY291bnRPZihbMSwgMiwgMSwgMywgMSwgNF0sIDMpID09IDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5jb3VudE9mKFsxLCAyLCAxLCAzLCAxLCA0XSwgNSkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb3VudE9mKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvdW50T2YsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb3VudE9mKFsxLCAyLCAxLCAzLCAxLCA0XSwgMykgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCA1KSA9PSAwKQogCiAgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKICAgICAgICAgYSA9IFs0LCAzLCAyLCAxXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZGVsaXRlbShhLCAxKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oYSA9PSBbNCwgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsaXRlbSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZGVsaXRlbShhLCAxKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbNCwgMiwgMV0pCiAKICAgICBkZWYgdGVzdF9kZWxzbGljZShzZWxmKToKICAgICAgICAgYSA9IHJhbmdlKDEwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxzbGljZSwgYSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsc2xpY2UsIGEsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5kZWxzbGljZShhLCAyLCA4KSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oYSA9PSBbMCwgMSwgOCwgOV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsc2xpY2UsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsc2xpY2UsIGEsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5kZWxzbGljZShhLCAyLCA4KSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbMCwgMSwgOCwgOV0pCiAgICAgICAgIG9wZXJhdG9yLmRlbHNsaWNlKGEsIDAsIHRlc3Rfc3VwcG9ydC5NQVhfUHlfc3NpemVfdCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID09IFtdKQogCiAgICAgZGVmIHRlc3RfZGl2KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kaXYsIDUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRpdiwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmZsb29yZGl2KDUsIDIpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGl2LCA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRpdiwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmZsb29yZGl2KDUsIDIpID09IDIpCiAKICAgICBkZWYgdGVzdF9mbG9vcmRpdihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZmxvb3JkaXYsIDUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZmxvb3JkaXYoNSwgMikgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmZsb29yZGl2KDUsIDIpID09IDIpCiAKICAgICBkZWYgdGVzdF90cnVlZGl2KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCA1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IudHJ1ZWRpdig1LCAyKSA9PSAyLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1ZWRpdiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IudHJ1ZWRpdig1LCAyKSA9PSAyLjUpCiAKICAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgogICAgICAgICBhID0gcmFuZ2UoMTApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIGEsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5nZXRpdGVtKGEsIDIpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCBhLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2V0aXRlbShhLCAyKSA9PSAyKQogCiAgICAgZGVmIHRlc3RfZ2V0c2xpY2Uoc2VsZik6CiAgICAgICAgIGEgPSByYW5nZSgxMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0c2xpY2UpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldHNsaWNlLCBhLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZ2V0c2xpY2UoYSwgNCwgNikgPT0gWzQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldHNsaWNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldHNsaWNlLCBhLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2V0c2xpY2UoYSwgNCwgNikgPT0gWzQsIDVdKQogICAgICAgICBiID0gb3BlcmF0b3IuZ2V0c2xpY2UoYSwgMCwgdGVzdF9zdXBwb3J0Lk1BWF9QeV9zc2l6ZV90KQotICAgICAgICBzZWxmLmFzc2VydF8oYiA9PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiA9PSBhKQogCiAgICAgZGVmIHRlc3RfaW5kZXhPZihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZiwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmluZGV4T2YoWzQsIDMsIDIsIDFdLCAzKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZiwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmluZGV4T2YoWzQsIDMsIDIsIDFdLCAzKSA9PSAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5pbmRleE9mLCBbNCwgMywgMiwgMV0sIDApCiAKICAgICBkZWYgdGVzdF9pbnZlcnQoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW52ZXJ0LCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuaW52KDQpID09IC01KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbnZlcnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pbnYoNCkgPT0gLTUpCiAKICAgICBkZWYgdGVzdF9pc0NhbGxhYmxlKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc0NhbGxhYmxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzQ2FsbGFibGUpCiAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGRlZiBjaGVjayhzZWxmLCBvLCB2KToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXNDYWxsYWJsZShvKSwgdikKLSAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pc0NhbGxhYmxlKG8pLCB2KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbGFibGUobyksIHYpCiAgICAgICAgIGNoZWNrKHNlbGYsIDQsIDApCiAgICAgICAgIGNoZWNrKHNlbGYsIG9wZXJhdG9yLmlzQ2FsbGFibGUsIDEpCkBAIC0yMDEsMTA2ICsyMDEsMTA2IEBACiAgICAgICAgIGNoZWNrKHNlbGYsIEMoKSwgMCkKIAogICAgIGRlZiB0ZXN0X2lzTWFwcGluZ1R5cGUoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUoMSkpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUob3BlcmF0b3IuaXNNYXBwaW5nVHlwZSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5pc01hcHBpbmdUeXBlKG9wZXJhdG9yLl9fZGljdF9fKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUoe30pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNNYXBwaW5nVHlwZSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc01hcHBpbmdUeXBlKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNNYXBwaW5nVHlwZShvcGVyYXRvci5fX2RpY3RfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc01hcHBpbmdUeXBlKHt9KSkKIAogICAgIGRlZiB0ZXN0X2lzTnVtYmVyVHlwZShzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNOdW1iZXJUeXBlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuaXNOdW1iZXJUeXBlKDgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuaXNOdW1iZXJUeXBlKDhqKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmlzTnVtYmVyVHlwZSg4TCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5pc051bWJlclR5cGUoOC4zKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuaXNOdW1iZXJUeXBlKGRpcigpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc051bWJlclR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc051bWJlclR5cGUoOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc051bWJlclR5cGUoOGopKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNOdW1iZXJUeXBlKDhMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzTnVtYmVyVHlwZSg4LjMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmlzTnVtYmVyVHlwZShkaXIoKSkpCiAKICAgICBkZWYgdGVzdF9pc1NlcXVlbmNlVHlwZShzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5pc1NlcXVlbmNlVHlwZShkaXIoKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5pc1NlcXVlbmNlVHlwZSgoKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5pc1NlcXVlbmNlVHlwZSh4cmFuZ2UoMTApKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKCd5ZWFoYnVkZHknKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc1NlcXVlbmNlVHlwZShkaXIoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc1NlcXVlbmNlVHlwZSgoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc1NlcXVlbmNlVHlwZSh4cmFuZ2UoMTApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKCd5ZWFoYnVkZHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc1NlcXVlbmNlVHlwZSgzKSkKICAgICAgICAgY2xhc3MgRGljdChkaWN0KTogcGFzcwotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5pc1NlcXVlbmNlVHlwZShEaWN0KCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKERpY3QoKSkpCiAKICAgICBkZWYgdGVzdF9sc2hpZnQoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHNoaWZ0LCBOb25lLCA0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmxzaGlmdCg1LCAxKSA9PSAxMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmxzaGlmdCg1LCAwKSA9PSA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIE5vbmUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubHNoaWZ0KDUsIDEpID09IDEwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubHNoaWZ0KDUsIDApID09IDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCwgMiwgLTEpCiAKICAgICBkZWYgdGVzdF9tb2Qoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubW9kLCBOb25lLCA0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLm1vZCg1LCAyKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tb2QsIE5vbmUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubW9kKDUsIDIpID09IDEpCiAKICAgICBkZWYgdGVzdF9tdWwoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm11bCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubXVsLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubXVsKDUsIDIpID09IDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm11bCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5tdWwoNSwgMikgPT0gMTApCiAKICAgICBkZWYgdGVzdF9uZWcoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubmVnKDUpID09IC01KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubmVnKC01KSA9PSA1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubmVnKDApID09IDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5uZWcoLTApID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lZywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lZyg1KSA9PSAtNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lZygtNSkgPT0gNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lZygwKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubmVnKC0wKSA9PSAwKQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV9vcihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iub3JfKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5vcl8sIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5vcl8oMHhhLCAweDUpID09IDB4ZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5vcl8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iub3JfLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iub3JfKDB4YSwgMHg1KSA9PSAweGYpCiAKICAgICBkZWYgdGVzdF9wb3Moc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG9zLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucG9zKDUpID09IDUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5wb3MoLTUpID09IC01KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucG9zKDApID09IDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5wb3MoLTApID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG9zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnBvcyg1KSA9PSA1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucG9zKC01KSA9PSAtNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnBvcygwKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucG9zKC0wKSA9PSAwKQogCiAgICAgZGVmIHRlc3RfcG93KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3cpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnBvdygzLDUpID09IDMqKjUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5fX3Bvd19fKDMsNSkgPT0gMyoqNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucG93KDMsNSkgPT0gMyoqNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLl9fcG93X18oMyw1KSA9PSAzKio1KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3csIDEsIDIsIDMpCiAKICAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CiAgICAgICAgIGEgPSByYW5nZSgzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yZXBlYXQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJlcGVhdCwgYSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJlcGVhdChhLCAyKSA9PSBhK2EpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yZXBlYXQoYSwgMSkgPT0gYSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJlcGVhdChhLCAwKSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yZXBlYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucmVwZWF0LCBhLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IGErYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDApID09IFtdKQogICAgICAgICBhID0gKDEsIDIsIDMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gYSthKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IGEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yZXBlYXQoYSwgMCkgPT0gKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gYSthKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMCkgPT0gKCkpCiAgICAgICAgIGEgPSAnMTIzJwotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IGErYSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBhKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucmVwZWF0KGEsIDApID09ICcnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IGErYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDApID09ICcnKQogICAgICAgICBhID0gU2VxMShbNCwgNSwgNl0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gWzQsIDUsIDYsIDQsIDUsIDZdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IFs0LCA1LCA2XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJlcGVhdChhLCAwKSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAyKSA9PSBbNCwgNSwgNiwgNCwgNSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMSkgPT0gWzQsIDUsIDZdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDApID09IFtdKQogICAgICAgICBhID0gU2VxMihbNCwgNSwgNl0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gWzQsIDUsIDYsIDQsIDUsIDZdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IFs0LCA1LCA2XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJlcGVhdChhLCAwKSA9PSBbXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucmVwZWF0LCA2LCA3KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IFs0LCA1LCA2LCA0LCA1LCA2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBbNCwgNSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucmVwZWF0LCA2LCA3KQogCiAgICAgZGVmIHRlc3RfcnNoaWZ0KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yc2hpZnQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgTm9uZSwgNDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yc2hpZnQoNSwgMSkgPT0gMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJzaGlmdCg1LCAwKSA9PSA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIE5vbmUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucnNoaWZ0KDUsIDEpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yc2hpZnQoNSwgMCkgPT0gNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IucnNoaWZ0LCAyLCAtMSkKIAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgpAQCAtMzA4LDYwICszMDgsNjEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb250YWlucywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbnRhaW5zKHJhbmdlKDQpLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5jb250YWlucyhyYW5nZSg0KSwgNSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzKHJhbmdlKDQpLCAyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzKHJhbmdlKDQpLCA1KSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXMocmFuZ2UoNCksIDIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzKHJhbmdlKDQpLCA1KSkKIAogICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CiAgICAgICAgIGEgPSByYW5nZSgzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBhKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBhLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3Iuc2V0aXRlbShhLCAwLCAyKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oYSA9PSBbMiwgMSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBhLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc2V0aXRlbShhLCAwLCAyKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbMiwgMSwgMl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEsIDQsIDIpCiAKICAgICBkZWYgdGVzdF9zZXRzbGljZShzZWxmKToKICAgICAgICAgYSA9IHJhbmdlKDQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldHNsaWNlLCBhKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRzbGljZSwgYSwgTm9uZSwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnNldHNsaWNlKGEsIDEsIDMsIFsyLCAxXSkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgPT0gWzAsIDIsIDEsIDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldHNsaWNlLCBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldHNsaWNlLCBhLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc2V0c2xpY2UoYSwgMSwgMywgWzIsIDFdKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbMCwgMiwgMSwgM10pCiAgICAgICAgIG9wZXJhdG9yLnNldHNsaWNlKGEsIDAsIHRlc3Rfc3VwcG9ydC5NQVhfUHlfc3NpemVfdCwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbXSkKIAogICAgIGRlZiB0ZXN0X3N1YihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc3ViKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5zdWIoNSwgMikgPT0gMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc3ViLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc3ViKDUsIDIpID09IDMpCiAKICAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnRydXRoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoU3ludGF4RXJyb3IsIG9wZXJhdG9yLnRydXRoLCBDKCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci50cnV0aCg1KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnRydXRoKFswXSkpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLnRydXRoKDApKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci50cnV0aChbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1dGgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBvcGVyYXRvci50cnV0aCwgQygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IudHJ1dGgoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci50cnV0aChbMF0pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLnRydXRoKDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLnRydXRoKFtdKSkKIAogICAgIGRlZiB0ZXN0X2JpdHdpc2VfeG9yKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnhvciwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnhvcigweGIsIDB4YykgPT0gMHg3KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnhvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci54b3IoMHhiLCAweGMpID09IDB4NykKIAogICAgIGRlZiB0ZXN0X2lzKHNlbGYpOgogICAgICAgICBhID0gYiA9ICd4eXpwZHEnCiAgICAgICAgIGMgPSBhWzozXSArIGJbMzpdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzXykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmlzXyhhLCBiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuaXNfKGEsYykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNfKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNfKGEsIGIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmlzXyhhLGMpKQogCiAgICAgZGVmIHRlc3RfaXNfbm90KHNlbGYpOgogICAgICAgICBhID0gYiA9ICd4eXpwZHEnCiAgICAgICAgIGMgPSBhWzozXSArIGJbMzpdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzX25vdCkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuaXNfbm90KGEsIGIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuaXNfbm90KGEsYykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNfbm90KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmlzX25vdChhLCBiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzX25vdChhLGMpKQogCiAgICAgZGVmIHRlc3RfYXR0cmdldHRlcihzZWxmKToKICAgICAgICAgY2xhc3MgQToKQEAgLTM4Nyw3ICszODgsNyBAQAogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFN5bnRheEVycm9yLCBvcGVyYXRvci5hdHRyZ2V0dGVyKCdmb28nKSwgQygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IuYXR0cmdldHRlcignZm9vJyksIEMoKSkKIAogICAgICAgICAjIHJlY3Vyc2l2ZSBnZXRzCiAgICAgICAgIGEgPSBBKCkKQEAgLTQxOSw3ICs0MjAsNyBAQAogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFN5bnRheEVycm9yLCBvcGVyYXRvci5pdGVtZ2V0dGVyKDQyKSwgQygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IuaXRlbWdldHRlcig0MiksIEMoKSkKIAogICAgICAgICBmID0gb3BlcmF0b3IuaXRlbWdldHRlcignbmFtZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgYSkKQEAgLTQ1NCwxMiArNDU1LDEyIEBACiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGYsIGEpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2ZvbycsIDEsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYoYSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgMykKICAgICAgICAgZiA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcignYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZihhKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgYSwgYSkKICAgICAgICAgZiA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcignYmFyJywgZj01KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmKGEpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksIDUpCiAKICAgICBkZWYgdGVzdF9pbnBsYWNlKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQppbmRleCA0YWI0ZDg5Li5mODZlYTAxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKQEAgLTEsNSArMSwzIEBACi0jIS91c3IvYmluL3B5dGhvbgotCiAjCiAjIFRlc3Qgc3VpdGUgZm9yIE9wdGlrLiAgU3VwcGxpZWQgYnkgSm9oYW5uZXMgR2lqc2JlcnMKICMgKHRhcmFkaW5vQHNvZnRob21lLm5ldCkgLS0gdHJhbnNsYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBPcHRpawpAQCAtMTksOSArMTcsOSBAQAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbiwgT3B0aW9uLCBJbmRlbnRlZEhlbHBGb3JtYXR0ZXIsIFwKLSAgICAgVGl0bGVkSGVscEZvcm1hdHRlciwgT3B0aW9uUGFyc2VyLCBPcHRpb25Db250YWluZXIsIE9wdGlvbkdyb3VwLCBcCi0gICAgIFNVUFBSRVNTX0hFTFAsIFNVUFBSRVNTX1VTQUdFLCBPcHRpb25FcnJvciwgT3B0aW9uQ29uZmxpY3RFcnJvciwgXAorZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24sIE9wdGlvbiwgXAorICAgICBUaXRsZWRIZWxwRm9ybWF0dGVyLCBPcHRpb25QYXJzZXIsIE9wdGlvbkdyb3VwLCBcCisgICAgIFNVUFBSRVNTX1VTQUdFLCBPcHRpb25FcnJvciwgT3B0aW9uQ29uZmxpY3RFcnJvciwgXAogICAgICBCYWRPcHRpb25FcnJvciwgT3B0aW9uVmFsdWVFcnJvciwgVmFsdWVzCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBfbWF0Y2hfYWJicmV2CiBmcm9tIG9wdHBhcnNlIGltcG9ydCBfcGFyc2VfbnVtCkBAIC0xMTAsNyArMTA4LDcgQEAKICAgICAgICAgZXhjZXB0IGV4cGVjdGVkX2V4Y2VwdGlvbiwgZXJyOgogICAgICAgICAgICAgYWN0dWFsX21lc3NhZ2UgPSBzdHIoZXJyKQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZF9tZXNzYWdlLCByZXR5cGUpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhleHBlY3RlZF9tZXNzYWdlLnNlYXJjaChhY3R1YWxfbWVzc2FnZSksCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX21lc3NhZ2Uuc2VhcmNoKGFjdHVhbF9tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiXAogZXhwZWN0ZWQgZXhjZXB0aW9uIG1lc3NhZ2UgcGF0dGVybjoKIC8lcy8KQEAgLTE2OSw3ICsxNjcsNyBAQAogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAogCiAgICAgICAgIGV4Y2VwdCBJbnRlcmNlcHRlZEVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAgICAgdHlwZShvdXRwdXQpIGlzIHR5cGVzLlN0cmluZ1R5cGUsCiAgICAgICAgICAgICAgICAgImV4cGVjdGVkIG91dHB1dCB0byBiZSBhbiBvcmRpbmFyeSBzdHJpbmcsIG5vdCAlciIKICAgICAgICAgICAgICAgICAlIHR5cGUob3V0cHV0KSkKQEAgLTM0Miw3ICszNDAsNyBAQAogCiAgICAgZGVmIHRlc3RfZ2V0X29wdGlvbihzZWxmKToKICAgICAgICAgb3B0MSA9IHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi12IikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uob3B0MSwgT3B0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wdDEsIE9wdGlvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQxLl9zaG9ydF9vcHRzLCBbIi12IiwgIi1uIl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0MS5fbG9uZ19vcHRzLCBbIi0tdmVyYm9zZSIsICItLW5vaXN5Il0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0MS5hY3Rpb24sICJzdG9yZV90cnVlIikKQEAgLTM1MywzMyArMzUxLDMzIEBACiAgICAgICAgIG9wdDIgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItLXZlcmJvc2UiKQogICAgICAgICBvcHQzID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLW4iKQogICAgICAgICBvcHQ0ID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS1ub2lzeSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhvcHQxIGlzIG9wdDIgaXMgb3B0MyBpcyBvcHQ0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0MSBpcyBvcHQyIGlzIG9wdDMgaXMgb3B0NCkKIAogICAgIGRlZiB0ZXN0X2hhc19vcHRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItdiIpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLS12ZXJib3NlIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItdiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLS12ZXJib3NlIikpCiAKLSAgICBkZWYgYXNzZXJ0X3JlbW92ZWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItdiIpIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItLXZlcmJvc2UiKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLW4iKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS1ub2lzeSIpIGlzIE5vbmUpCisgICAgZGVmIGFzc2VydFRydWVyZW1vdmVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXYiKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS12ZXJib3NlIikgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi1uIikgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi0tbm9pc3kiKSBpcyBOb25lKQogCi0gICAgICAgIHNlbGYuZmFpbElmKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi12IikpCi0gICAgICAgIHNlbGYuZmFpbElmKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi0tdmVyYm9zZSIpKQotICAgICAgICBzZWxmLmZhaWxJZihzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItbiIpKQotICAgICAgICBzZWxmLmZhaWxJZihzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItLW5vaXN5IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLXYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItLXZlcmJvc2UiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItbiIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi0tbm9pc3kiKSkKIAotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLXEiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi0tc2lsZW50IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItcSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLS1zaWxlbnQiKSkKIAogICAgIGRlZiB0ZXN0X3JlbW92ZV9zaG9ydF9vcHQoc2VsZik6CiAgICAgICAgIHNlbGYucGFyc2VyLnJlbW92ZV9vcHRpb24oIi1uIikKLSAgICAgICAgc2VsZi5hc3NlcnRfcmVtb3ZlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZXJlbW92ZWQoKQogCiAgICAgZGVmIHRlc3RfcmVtb3ZlX2xvbmdfb3B0KHNlbGYpOgogICAgICAgICBzZWxmLnBhcnNlci5yZW1vdmVfb3B0aW9uKCItLXZlcmJvc2UiKQotICAgICAgICBzZWxmLmFzc2VydF9yZW1vdmVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlcmVtb3ZlZCgpCiAKICAgICBkZWYgdGVzdF9yZW1vdmVfbm9uZXhpc3RlbnQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYucGFyc2VyLnJlbW92ZV9vcHRpb24sICgnZm9vJywpLCBOb25lLApAQCAtNDI5LDE5ICs0MjcsMTkgQEAKIAogICAgIGRlZiB0ZXN0X3N0cl9hbGlhc2VzX3N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXMiLCB0eXBlPSJzdHIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItcyIpLnR5cGUsICJzdHJpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi1zIikudHlwZSwgInN0cmluZyIpCiAKICAgICBkZWYgdGVzdF9uZXdfdHlwZV9vYmplY3Qoc2VsZik6CiAgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgdHlwZT1zdHIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi1zIikudHlwZSwgInN0cmluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXMiKS50eXBlLCAic3RyaW5nIikKICAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXgiLCB0eXBlPWludCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXgiKS50eXBlLCAiaW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCIteCIpLnR5cGUsICJpbnQiKQogCiAgICAgZGVmIHRlc3Rfb2xkX3R5cGVfb2JqZWN0KHNlbGYpOgogICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItcyIsIHR5cGU9dHlwZXMuU3RyaW5nVHlwZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXMiKS50eXBlLCAic3RyaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItcyIpLnR5cGUsICJzdHJpbmciKQogICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCIteCIsIHR5cGU9dHlwZXMuSW50VHlwZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXgiKS50eXBlLCAiaW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCIteCIpLnR5cGUsICJpbnQiKQogCiAKICMgQ3VzdG9tIHR5cGUgZm9yIHRlc3RpbmcgcHJvY2Vzc2luZyBvZiBkZWZhdWx0IHZhbHVlcy4KQEAgLTEwMDUsNyArMTAwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0iU29tZSBtb3JlIG9wdGlvbnMiKQogICAgICAgICBncm91cC5zZXRfdGl0bGUoIkJhY29uIikKICAgICAgICAgZ3JvdXAuYWRkX29wdGlvbigiLS1iYWNvbiIsIHR5cGU9ImludCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnBhcnNlci5nZXRfb3B0aW9uX2dyb3VwKCItLWJhY29uIiksIGdyb3VwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbl9ncm91cCgiLS1iYWNvbiIpLCBncm91cCkKIAogIyAtLSBUZXN0IGV4dGVuZGluZyBhbmQgcGFyc2VyLnBhcnNlX2FyZ3MoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTExMDEsMTUgKzEwOTksMTUgQEAKICAgICAgICAgaWYgb3B0ID09ICIteCI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbi5fc2hvcnRfb3B0cywgWyIteCJdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24uX2xvbmdfb3B0cywgW10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocGFyc2VyXyBpcyBzZWxmLnBhcnNlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh2YWx1ZSBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhcnNlcl8gaXMgc2VsZi5wYXJzZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsdWUgaXMgTm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFycyhwYXJzZXJfLnZhbHVlcyksIHsnZmlsZW5hbWUnOiBOb25lfSkKIAogICAgICAgICAgICAgcGFyc2VyXy52YWx1ZXMueCA9IDQyCiAgICAgICAgIGVsaWYgb3B0ID09ICItLWZpbGUiOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24uX3Nob3J0X29wdHMsIFsiLWYiXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9uLl9sb25nX29wdHMsIFsiLS1maWxlIl0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocGFyc2VyXyBpcyBzZWxmLnBhcnNlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXJzZXJfIGlzIHNlbGYucGFyc2VyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgImZvbyIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMocGFyc2VyXy52YWx1ZXMpLCB7J2ZpbGVuYW1lJzogTm9uZSwgJ3gnOiA0Mn0pCiAKQEAgLTExNDcsNyArMTE0NSw3IEBACiAKICAgICBkZWYgcHJvY2Vzc190dXBsZShzZWxmLCBvcHRpb24sIG9wdCwgdmFsdWUsIHBhcnNlcl8sIGxlbiwgdHlwZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuLCAzKQotICAgICAgICBzZWxmLmFzc2VydF8odHlwZSBpcyBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlIGlzIGludCkKIAogICAgICAgICBpZiBvcHQgPT0gIi1wIjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICIxLDIsMyIpCkBAIC0xMjM4LDggKzEyMzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25fbGlzdD1vcHRpb25zKQogCiAgICAgZGVmIHZhcmlhYmxlX2FyZ3Moc2VsZiwgb3B0aW9uLCBvcHQsIHZhbHVlLCBwYXJzZXIpOgotICAgICAgICBzZWxmLmFzc2VydF8odmFsdWUgaXMgTm9uZSkKLSAgICAgICAgZG9uZSA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlIGlzIE5vbmUpCiAgICAgICAgIHZhbHVlID0gW10KICAgICAgICAgcmFyZ3MgPSBwYXJzZXIucmFyZ3MKICAgICAgICAgd2hpbGUgcmFyZ3M6CkBAIC0xMjk0LDcgKzEyOTEsNyBAQAogCiBjbGFzcyBUZXN0Q29uZmxpY3QoQ29uZmxpY3RCYXNlKToKICAgICAiIiJVc2UgdGhlIGRlZmF1bHQgY29uZmxpY3QgcmVzb2x1dGlvbiBmb3IgT3B0aWsgMS4yOiBlcnJvci4iIiIKLSAgICBkZWYgYXNzZXJ0X2NvbmZsaWN0X2Vycm9yKHNlbGYsIGZ1bmMpOgorICAgIGRlZiBhc3NlcnRUcnVlY29uZmxpY3RfZXJyb3Ioc2VsZiwgZnVuYyk6CiAgICAgICAgIGVyciA9IHNlbGYuYXNzZXJ0UmFpc2VzKAogICAgICAgICAgICAgZnVuYywgKCItdiIsICItLXZlcnNpb24iKSwgeydhY3Rpb24nIDogImNhbGxiYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FsbGJhY2snIDogc2VsZi5zaG93X3ZlcnNpb24sCkBAIC0xMzA2LDExICsxMzAzLDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLm9wdGlvbl9pZCwgIi12Ly0tdmVyc2lvbiIpCiAKICAgICBkZWYgdGVzdF9jb25mbGljdF9lcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfY29uZmxpY3RfZXJyb3Ioc2VsZi5wYXJzZXIuYWRkX29wdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlY29uZmxpY3RfZXJyb3Ioc2VsZi5wYXJzZXIuYWRkX29wdGlvbikKIAogICAgIGRlZiB0ZXN0X2NvbmZsaWN0X2Vycm9yX2dyb3VwKHNlbGYpOgogICAgICAgICBncm91cCA9IE9wdGlvbkdyb3VwKHNlbGYucGFyc2VyLCAiR3JvdXAgMSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NvbmZsaWN0X2Vycm9yKGdyb3VwLmFkZF9vcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZWNvbmZsaWN0X2Vycm9yKGdyb3VwLmFkZF9vcHRpb24pCiAKICAgICBkZWYgdGVzdF9ub19zdWNoX2NvbmZsaWN0X2hhbmRsZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKApAQCAtMTMzMCw4ICsxMzI3LDggQEAKICAgICAgICAgdmVyYm9zZV9vcHQgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItLXZlcmJvc2UiKQogICAgICAgICB2ZXJzaW9uX29wdCA9IHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi0tdmVyc2lvbiIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHZfb3B0IGlzIHZlcnNpb25fb3B0KQotICAgICAgICBzZWxmLmFzc2VydF8odl9vcHQgaXMgbm90IHZlcmJvc2Vfb3B0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodl9vcHQgaXMgdmVyc2lvbl9vcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2X29wdCBpcyBub3QgdmVyYm9zZV9vcHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodl9vcHQuX2xvbmdfb3B0cywgWyItLXZlcnNpb24iXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZXJzaW9uX29wdC5fc2hvcnRfb3B0cywgWyItdiJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlcnNpb25fb3B0Ll9sb25nX29wdHMsIFsiLS12ZXJzaW9uIl0pCkBAIC0xNDYyLDcgKzE0NTksNyBAQAogICAgICAgICAjIHNjcmV3cyB0aGluZ3MgdXAgZm9yIG90aGVyIHRlc3RzIHdoZW4gaXQncyBwYXJ0IG9mIHRoZSBQeXRob24KICAgICAgICAgIyB0ZXN0IHN1aXRlLgogICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgotICAgICAgICAgICAgZW52LnNldCgnQ09MVU1OUycsIHN0cihjb2x1bW5zKSkKKyAgICAgICAgICAgIGVudlsnQ09MVU1OUyddID0gc3RyKGNvbHVtbnMpCiAgICAgICAgICAgICByZXR1cm4gSW50ZXJjZXB0aW5nT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbnMpCiAKICAgICBkZWYgYXNzZXJ0SGVscEVxdWFscyhzZWxmLCBleHBlY3RlZF9vdXRwdXQpOgpAQCAtMTQ5MSw3ICsxNDg4LDcgQEAKIAogICAgIGRlZiB0ZXN0X2hlbHBfdGl0bGVfZm9ybWF0dGVyKHNlbGYpOgogICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgotICAgICAgICAgICAgZW52LnNldCgiQ09MVU1OUyIsICI4MCIpCisgICAgICAgICAgICBlbnZbIkNPTFVNTlMiXSA9ICI4MCIKICAgICAgICAgICAgIHNlbGYucGFyc2VyLmZvcm1hdHRlciA9IFRpdGxlZEhlbHBGb3JtYXR0ZXIoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRIZWxwRXF1YWxzKF9leHBlY3RlZF9oZWxwX3RpdGxlX2Zvcm1hdHRlcikKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcy5weSBiL0xpYi90ZXN0L3Rlc3Rfb3MucHkKaW5kZXggZGI3ZTliNC4uNmY2ODYyMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X29zLnB5CkBAIC0zLDEwICszLDE2IEBACiAjIHBvcnRhYmxlIHRoYW4gdGhleSBoYWQgYmVlbiB0aG91Z2h0IHRvIGJlLgogCiBpbXBvcnQgb3MKK2ltcG9ydCBlcnJubwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBtbWFwCitpbXBvcnQgdXVpZAogCiB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRlbXBuYW0iLCBSdW50aW1lV2FybmluZywgX19uYW1lX18pCiB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRtcG5hbSIsIFJ1bnRpbWVXYXJuaW5nLCBfX25hbWVfXykKQEAgLTIxLDcgKzI3LDcgQEAKICAgICBkZWYgdGVzdF9hY2Nlc3Moc2VsZik6CiAgICAgICAgIGYgPSBvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIG9zLk9fQ1JFQVR8b3MuT19SRFdSKQogICAgICAgICBvcy5jbG9zZShmKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MuYWNjZXNzKHRlc3Rfc3VwcG9ydC5URVNURk4sIG9zLldfT0spKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuYWNjZXNzKHRlc3Rfc3VwcG9ydC5URVNURk4sIG9zLldfT0spKQogCiAgICAgZGVmIHRlc3RfY2xvc2VyYW5nZShzZWxmKToKICAgICAgICAgZmlyc3QgPSBvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIG9zLk9fQ1JFQVR8b3MuT19SRFdSKQpAQCAtMzYsMTAgKzQyLDcgQEAKICAgICAgICAgICAgICAgICByZXRyaWVzICs9IDEKICAgICAgICAgICAgICAgICBpZiByZXRyaWVzID4gMTA6CiAgICAgICAgICAgICAgICAgICAgICMgWFhYIHRlc3Qgc2tpcHBlZAotICAgICAgICAgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAoCi0gICAgICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgYWxsb2NhdGUgdHdvIGNvbnNlY3V0aXZlIGZkcywgIgotICAgICAgICAgICAgICAgICAgICAgICAgInNraXBwaW5nIHRlc3RfY2xvc2VyYW5nZSIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjb3VsZG4ndCBhbGxvY2F0ZSB0d28gY29uc2VjdXRpdmUgZmRzIikKICAgICAgICAgICAgICAgICBmaXJzdCwgc2Vjb25kID0gc2Vjb25kLCBvcy5kdXAoc2Vjb25kKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuY2xvc2Uoc2Vjb25kKQpAQCAtNDcsNiArNTAsNyBAQAogICAgICAgICBvcy5jbG9zZXJhbmdlKGZpcnN0LCBmaXJzdCArIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLndyaXRlLCBmaXJzdCwgImEiKQogCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6CiAgICAgICAgIHBhdGggPSB1bmljb2RlKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAgICAgICAgIG9sZCA9IHN5cy5nZXRyZWZjb3VudChwYXRoKQpAQCAtNjcsNyArNzEsNyBAQAogCiAgICAgZGVmIGNoZWNrX3RlbXBmaWxlKHNlbGYsIG5hbWUpOgogICAgICAgICAjIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3Q6Ci0gICAgICAgIHNlbGYuZmFpbElmKG9zLnBhdGguZXhpc3RzKG5hbWUpLAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAiZmlsZSBhbHJlYWR5IGV4aXN0cyBmb3IgdGVtcG9yYXJ5IGZpbGUiKQogICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBjYW4gY3JlYXRlIHRoZSBmaWxlCiAgICAgICAgIG9wZW4obmFtZSwgInciKQpAQCAtNzYsMTYgKzgwLDE4IEBACiAgICAgZGVmIHRlc3RfdGVtcG5hbShzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJ0ZW1wbmFtIik6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0ZW1wbmFtIiwgUnVudGltZVdhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIidGVzdF9vcyQiKQotICAgICAgICBzZWxmLmNoZWNrX3RlbXBmaWxlKG9zLnRlbXBuYW0oKSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0ZW1wbmFtIiwgUnVudGltZVdhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByInRlc3Rfb3MkIikKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidGVtcG5hbSIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdGVtcGZpbGUob3MudGVtcG5hbSgpKQogCi0gICAgICAgIG5hbWUgPSBvcy50ZW1wbmFtKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHNlbGYuY2hlY2tfdGVtcGZpbGUobmFtZSkKKyAgICAgICAgICAgIG5hbWUgPSBvcy50ZW1wbmFtKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RlbXBmaWxlKG5hbWUpCiAKLSAgICAgICAgbmFtZSA9IG9zLnRlbXBuYW0odGVzdF9zdXBwb3J0LlRFU1RGTiwgInBmeCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmJhc2VuYW1lKG5hbWUpWzozXSA9PSAicGZ4IikKLSAgICAgICAgc2VsZi5jaGVja190ZW1wZmlsZShuYW1lKQorICAgICAgICAgICAgbmFtZSA9IG9zLnRlbXBuYW0odGVzdF9zdXBwb3J0LlRFU1RGTiwgInBmeCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5iYXNlbmFtZShuYW1lKVs6M10gPT0gInBmeCIpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RlbXBmaWxlKG5hbWUpCiAKICAgICBkZWYgdGVzdF90bXBmaWxlKHNlbGYpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihvcywgInRtcGZpbGUiKToKQEAgLTEwNCw2NCArMTEwLDY5IEBACiAgICAgICAgICMgdGVzdCB0aGF0IGEgc3Vic2VxdWVudCBjYWxsIHRvIG9zLnRtcGZpbGUoKSByYWlzZXMgdGhlIHNhbWUgZXJyb3IuIElmCiAgICAgICAgICMgaXQgZG9lc24ndCwgYXNzdW1lIHdlJ3JlIG9uIFhQIG9yIGJlbG93IGFuZCB0aGUgdXNlciBydW5uaW5nIHRoZSB0ZXN0CiAgICAgICAgICMgaGFzIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMsIGFuZCBwcm9jZWVkIHdpdGggdGhlIHRlc3QgYXMgbm9ybWFsLgotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIG5hbWUgPSAnXFxweXRob25fdGVzdF9vc190ZXN0X3RtcGZpbGUudHh0JwotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobmFtZSk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKG5hbWUpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZnAgPSBvcGVuKG5hbWUsICd3JykKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBmaXJzdDoKLSAgICAgICAgICAgICAgICAjIG9wZW4oKSBmYWlsZWQsIGFzc2VydCB0bXBmaWxlKCkgZmFpbHMgaW4gdGhlIHNhbWUgd2F5LgotICAgICAgICAgICAgICAgICMgQWx0aG91Z2ggb3BlbigpIHJhaXNlcyBhbiBJT0Vycm9yIGFuZCBvcy50bXBmaWxlKCkgcmFpc2VzIGFuCi0gICAgICAgICAgICAgICAgIyBPU0Vycm9yKCksICdhcmdzJyB3aWxsIGJlICgxMywgJ1Blcm1pc3Npb24gZGVuaWVkJykgaW4gYm90aAotICAgICAgICAgICAgICAgICMgY2FzZXMuCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmcCA9IG9zLnRtcGZpbGUoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBzZWNvbmQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3QuYXJncywgc2Vjb25kLmFyZ3MpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBvcy50bXBmaWxlKCkgdG8gcmFpc2UgT1NFcnJvciIpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgb3BlbigpIHdvcmtlZCwgdGhlcmVmb3JlLCB0bXBmaWxlKCkgc2hvdWxkIHdvcmsuICBDbG9zZSBvdXIKLSAgICAgICAgICAgICAgICAjIGR1bW15IGZpbGUgYW5kIHByb2NlZWQgd2l0aCB0aGUgdGVzdCBhcyBub3JtYWwuCi0gICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShuYW1lKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRtcGZpbGUiLCBEZXByZWNhdGlvbldhcm5pbmcpCiAKLSAgICAgICAgZnAgPSBvcy50bXBmaWxlKCkKLSAgICAgICAgZnAud3JpdGUoImZvb2JhciIpCi0gICAgICAgIGZwLnNlZWsoMCwwKQotICAgICAgICBzID0gZnAucmVhZCgpCi0gICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMgPT0gImZvb2JhciIpCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgICAgICBuYW1lID0gJ1xccHl0aG9uX3Rlc3Rfb3NfdGVzdF90bXBmaWxlLnR4dCcKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG5hbWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmcCA9IG9wZW4obmFtZSwgJ3cnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBmaXJzdDoKKyAgICAgICAgICAgICAgICAgICAgIyBvcGVuKCkgZmFpbGVkLCBhc3NlcnQgdG1wZmlsZSgpIGZhaWxzIGluIHRoZSBzYW1lIHdheS4KKyAgICAgICAgICAgICAgICAgICAgIyBBbHRob3VnaCBvcGVuKCkgcmFpc2VzIGFuIElPRXJyb3IgYW5kIG9zLnRtcGZpbGUoKSByYWlzZXMgYW4KKyAgICAgICAgICAgICAgICAgICAgIyBPU0Vycm9yKCksICdhcmdzJyB3aWxsIGJlICgxMywgJ1Blcm1pc3Npb24gZGVuaWVkJykgaW4gYm90aAorICAgICAgICAgICAgICAgICAgICAjIGNhc2VzLgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBmcCA9IG9zLnRtcGZpbGUoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgc2Vjb25kOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdC5hcmdzLCBzZWNvbmQuYXJncykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgb3MudG1wZmlsZSgpIHRvIHJhaXNlIE9TRXJyb3IiKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIG9wZW4oKSB3b3JrZWQsIHRoZXJlZm9yZSwgdG1wZmlsZSgpIHNob3VsZCB3b3JrLiAgQ2xvc2Ugb3VyCisgICAgICAgICAgICAgICAgICAgICMgZHVtbXkgZmlsZSBhbmQgcHJvY2VlZCB3aXRoIHRoZSB0ZXN0IGFzIG5vcm1hbC4KKyAgICAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUobmFtZSkKKworICAgICAgICAgICAgZnAgPSBvcy50bXBmaWxlKCkKKyAgICAgICAgICAgIGZwLndyaXRlKCJmb29iYXIiKQorICAgICAgICAgICAgZnAuc2VlaygwLDApCisgICAgICAgICAgICBzID0gZnAucmVhZCgpCisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocyA9PSAiZm9vYmFyIikKIAogICAgIGRlZiB0ZXN0X3RtcG5hbShzZWxmKToKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBub3QgaGFzYXR0cihvcywgInRtcG5hbSIpOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidG1wbmFtIiwgUnVudGltZVdhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIidGVzdF9vcyQiKQotICAgICAgICBuYW1lID0gb3MudG1wbmFtKCkKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgid2luMzIiLCk6Ci0gICAgICAgICAgICAjIFRoZSBXaW5kb3dzIHRtcG5hbSgpIHNlZW1zIHVzZWxlc3MuICBGcm9tIHRoZSBNUyBkb2NzOgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyAgICAgVGhlIGNoYXJhY3RlciBzdHJpbmcgdGhhdCB0bXBuYW0gY3JlYXRlcyBjb25zaXN0cyBvZgotICAgICAgICAgICAgIyAgICAgdGhlIHBhdGggcHJlZml4LCBkZWZpbmVkIGJ5IHRoZSBlbnRyeSBQX3RtcGRpciBpbiB0aGUKLSAgICAgICAgICAgICMgICAgIGZpbGUgU1RESU8uSCwgZm9sbG93ZWQgYnkgYSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZQotICAgICAgICAgICAgIyAgICAgZGlnaXQgY2hhcmFjdGVycyAnMCcgdGhyb3VnaCAnOSc7IHRoZSBudW1lcmljYWwgdmFsdWUKLSAgICAgICAgICAgICMgICAgIG9mIHRoaXMgc3RyaW5nIGlzIGluIHRoZSByYW5nZSAxIC0gNjUsNTM1LiAgQ2hhbmdpbmcgdGhlCi0gICAgICAgICAgICAjICAgICBkZWZpbml0aW9ucyBvZiBMX3RtcG5hbSBvciBQX3RtcGRpciBpbiBTVERJTy5IIGRvZXMgbm90Ci0gICAgICAgICAgICAjICAgICBjaGFuZ2UgdGhlIG9wZXJhdGlvbiBvZiB0bXBuYW0uCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFRoZSByZWFsbHkgYml6YXJyZSBwYXJ0IGlzIHRoYXQsIGF0IGxlYXN0IHVuZGVyIE1TVkM2LAotICAgICAgICAgICAgIyBQX3RtcGRpciBpcyAiXFwiLiAgVGhhdCBpcywgdGhlIHBhdGggcmV0dXJuZWQgcmVmZXJzIHRvCi0gICAgICAgICAgICAjIHRoZSByb290IG9mIHRoZSBjdXJyZW50IGRyaXZlLiAgVGhhdCdzIGEgdGVycmlibGUgcGxhY2UgdG8KLSAgICAgICAgICAgICMgcHV0IHRlbXAgZmlsZXMsIGFuZCwgZGVwZW5kaW5nIG9uIHByaXZpbGVnZXMsIHRoZSB1c2VyCi0gICAgICAgICAgICAjIG1heSBub3QgZXZlbiBiZSBhYmxlIHRvIG9wZW4gYSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeS4KLSAgICAgICAgICAgIHNlbGYuZmFpbElmKG9zLnBhdGguZXhpc3RzKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUgYWxyZWFkeSBleGlzdHMgZm9yIHRlbXBvcmFyeSBmaWxlIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfdGVtcGZpbGUobmFtZSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0bXBuYW0iLCBSdW50aW1lV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIidGVzdF9vcyQiKQorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0bXBuYW0iLCBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgICAgIG5hbWUgPSBvcy50bXBuYW0oKQorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgid2luMzIiLCk6CisgICAgICAgICAgICAgICAgIyBUaGUgV2luZG93cyB0bXBuYW0oKSBzZWVtcyB1c2VsZXNzLiAgRnJvbSB0aGUgTVMgZG9jczoKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyAgICAgVGhlIGNoYXJhY3RlciBzdHJpbmcgdGhhdCB0bXBuYW0gY3JlYXRlcyBjb25zaXN0cyBvZgorICAgICAgICAgICAgICAgICMgICAgIHRoZSBwYXRoIHByZWZpeCwgZGVmaW5lZCBieSB0aGUgZW50cnkgUF90bXBkaXIgaW4gdGhlCisgICAgICAgICAgICAgICAgIyAgICAgZmlsZSBTVERJTy5ILCBmb2xsb3dlZCBieSBhIHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlCisgICAgICAgICAgICAgICAgIyAgICAgZGlnaXQgY2hhcmFjdGVycyAnMCcgdGhyb3VnaCAnOSc7IHRoZSBudW1lcmljYWwgdmFsdWUKKyAgICAgICAgICAgICAgICAjICAgICBvZiB0aGlzIHN0cmluZyBpcyBpbiB0aGUgcmFuZ2UgMSAtIDY1LDUzNS4gIENoYW5naW5nIHRoZQorICAgICAgICAgICAgICAgICMgICAgIGRlZmluaXRpb25zIG9mIExfdG1wbmFtIG9yIFBfdG1wZGlyIGluIFNURElPLkggZG9lcyBub3QKKyAgICAgICAgICAgICAgICAjICAgICBjaGFuZ2UgdGhlIG9wZXJhdGlvbiBvZiB0bXBuYW0uCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgVGhlIHJlYWxseSBiaXphcnJlIHBhcnQgaXMgdGhhdCwgYXQgbGVhc3QgdW5kZXIgTVNWQzYsCisgICAgICAgICAgICAgICAgIyBQX3RtcGRpciBpcyAiXFwiLiAgVGhhdCBpcywgdGhlIHBhdGggcmV0dXJuZWQgcmVmZXJzIHRvCisgICAgICAgICAgICAgICAgIyB0aGUgcm9vdCBvZiB0aGUgY3VycmVudCBkcml2ZS4gIFRoYXQncyBhIHRlcnJpYmxlIHBsYWNlIHRvCisgICAgICAgICAgICAgICAgIyBwdXQgdGVtcCBmaWxlcywgYW5kLCBkZXBlbmRpbmcgb24gcHJpdmlsZWdlcywgdGhlIHVzZXIKKyAgICAgICAgICAgICAgICAjIG1heSBub3QgZXZlbiBiZSBhYmxlIHRvIG9wZW4gYSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIGFscmVhZHkgZXhpc3RzIGZvciB0ZW1wb3JhcnkgZmlsZSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdGVtcGZpbGUobmFtZSkKIAogIyBUZXN0IGF0dHJpYnV0ZXMgb24gcmV0dXJuIHZhbHVlcyBmcm9tIG9zLipzdGF0KiBmYW1pbHkuCiBjbGFzcyBTdGF0QXR0cmlidXRlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTg0LDEwICsxOTUsOCBAQAogICAgICAgICByZXN1bHQgPSBvcy5zdGF0KHNlbGYuZm5hbWUpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgZGlyZWN0IGFjY2VzcyB3b3JrcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHRbc3RhdC5TVF9TSVpFXSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LnN0X3NpemUsIDMpCi0KLSAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFtzdGF0LlNUX1NJWkVdLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdF9zaXplLCAzKQogCiAgICAgICAgICMgTWFrZSBzdXJlIGFsbCB0aGUgYXR0cmlidXRlcyBhcmUgdGhlcmUKICAgICAgICAgbWVtYmVycyA9IGRpcihyZXN1bHQpCkBAIC0xOTgsOSArMjA3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgZGVmIHRydW5jKHgpOiByZXR1cm4gaW50KHgpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgZGVmIHRydW5jKHgpOiByZXR1cm4geAotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRydW5jKGdldGF0dHIocmVzdWx0LCBhdHRyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2dldGF0dHIoc3RhdCwgbmFtZSldKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhhdHRyIGluIG1lbWJlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cnVuYyhnZXRhdHRyKHJlc3VsdCwgYXR0cikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2dldGF0dHIoc3RhdCwgbmFtZSldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYXR0ciwgbWVtYmVycykKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHRbMjAwXQpAQCAtMjEyLDcgKzIyMSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdC5zdF9tb2RlID0gMQogICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gdGhyb3duIikKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKToKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICB0cnk6CkBAIC0yNDksMTggKzI1OCwxNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gb3Muc3RhdHZmcyhzZWxmLmZuYW1lKQogICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKICAgICAgICAgICAgICMgT24gQXRoZU9TLCBnbGliYyBhbHdheXMgcmV0dXJucyBFTk9TWVMKLSAgICAgICAgICAgIGltcG9ydCBlcnJubwogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBNYWtlIHN1cmUgZGlyZWN0IGFjY2VzcyB3b3JrcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZl9iZnJlZSwgcmVzdWx0WzNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5mX2JmcmVlLCByZXN1bHRbM10pCiAKICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZSB0aGVyZS4KICAgICAgICAgbWVtYmVycyA9ICgnYnNpemUnLCAnZnJzaXplJywgJ2Jsb2NrcycsICdiZnJlZScsICdiYXZhaWwnLCAnZmlsZXMnLAogICAgICAgICAgICAgICAgICAgICAnZmZyZWUnLCAnZmF2YWlsJywgJ2ZsYWcnLCAnbmFtZW1heCcpCiAgICAgICAgIGZvciB2YWx1ZSwgbWVtYmVyIGluIGVudW1lcmF0ZShtZW1iZXJzKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdldGF0dHIocmVzdWx0LCAnZl8nICsgbWVtYmVyKSwgcmVzdWx0W3ZhbHVlXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihyZXN1bHQsICdmXycgKyBtZW1iZXIpLCByZXN1bHRbdmFsdWVdKQogCiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgYXNzaWdubWVudCByZWFsbHkgZmFpbHMKICAgICAgICAgdHJ5OgpAQCAtMjk1LDcgKzMwMyw3IEBACiAgICAgICAgICMgdGltZSBzdGFtcHMgaW4gc3RhdCwgYnV0IG5vdCBpbiB1dGltZS4KICAgICAgICAgb3MudXRpbWUodGVzdF9zdXBwb3J0LlRFU1RGTiwgKHN0LnN0X2F0aW1lLCBpbnQoc3Quc3RfbXRpbWUtZGVsdGEpKSkKICAgICAgICAgc3QyID0gb3Muc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdDIuc3RfbXRpbWUsIGludChzdC5zdF9tdGltZS1kZWx0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3QyLnN0X210aW1lLCBpbnQoc3Quc3RfbXRpbWUtZGVsdGEpKQogCiAgICAgIyBSZXN0cmljdCB0ZXN0IHRvIFdpbjMyLCBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgb3RoZXIKICAgICAjIHN5c3RlbXMgc3VwcG9ydCBjZW50aXNlY29uZHMKQEAgLTMxMiw3ICszMjAsMTIgQEAKICAgICAgICAgICAgIGRlZiB0ZXN0XzE1NjUxNTAoc2VsZik6CiAgICAgICAgICAgICAgICAgdDEgPSAxMTU5MTk1MDM5LjI1CiAgICAgICAgICAgICAgICAgb3MudXRpbWUoc2VsZi5mbmFtZSwgKHQxLCB0MSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3Muc3RhdChzZWxmLmZuYW1lKS5zdF9tdGltZSwgdDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHNlbGYuZm5hbWUpLnN0X210aW1lLCB0MSkKKworICAgICAgICAgICAgZGVmIHRlc3RfbGFyZ2VfdGltZShzZWxmKToKKyAgICAgICAgICAgICAgICB0MSA9IDUwMDAwMDAwMDAgIyBzb21lIGRheSBpbiAyMTI4CisgICAgICAgICAgICAgICAgb3MudXRpbWUoc2VsZi5mbmFtZSwgKHQxLCB0MSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHNlbGYuZm5hbWUpLnN0X210aW1lLCB0MSkKIAogICAgICAgICBkZWYgdGVzdF8xNjg2NDc1KHNlbGYpOgogICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCBhbiBvcGVuIGZpbGUgY2FuIGJlIHN0YXQnZWQKQEAgLTM0NCw4ICszNTcsOSBAQAogICAgIGRlZiB0ZXN0X3VwZGF0ZTIoc2VsZik6CiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIvYmluL3NoIik6CiAgICAgICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShIRUxMTz0iV29ybGQiKQotICAgICAgICAgICAgdmFsdWUgPSBvcy5wb3BlbigiL2Jpbi9zaCAtYyAnZWNobyAkSEVMTE8nIikucmVhZCgpLnN0cmlwKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHZhbHVlLCAiV29ybGQiKQorICAgICAgICAgICAgd2l0aCBvcy5wb3BlbigiL2Jpbi9zaCAtYyAnZWNobyAkSEVMTE8nIikgYXMgcG9wZW46CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwb3Blbi5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICJXb3JsZCIpCiAKIGNsYXNzIFdhbGtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgZm9yIG9zLndhbGsoKS4iIiIKQEAgLTQ2Nyw3ICs0ODEsNyBAQAogICAgICAgICBvcy5tYWtlZGlycyhwYXRoKQogCiAgICAgICAgICMgVHJ5IHBhdGhzIHdpdGggYSAnLicgaW4gdGhlbQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoT1NFcnJvciwgb3MubWFrZWRpcnMsIG9zLmN1cmRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MubWFrZWRpcnMsIG9zLmN1cmRpcikKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihiYXNlLCAnZGlyMScsICdkaXIyJywgJ2RpcjMnLCAnZGlyNCcsICdkaXI1Jywgb3MuY3VyZGlyKQogICAgICAgICBvcy5tYWtlZGlycyhwYXRoKQogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGJhc2UsICdkaXIxJywgb3MuY3VyZGlyLCAnZGlyMicsICdkaXIzJywgJ2RpcjQnLApAQCAtNTAwLDE4ICs1MTQsMjAgQEAKIGNsYXNzIFVSYW5kb21UZXN0cyAodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3VyYW5kb20oc2VsZik6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MudXJhbmRvbSgxKSksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MudXJhbmRvbSgxMCkpLCAxMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy51cmFuZG9tKDEwMCkpLCAxMDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MudXJhbmRvbSgxMDAwKSksIDEwMDApCi0gICAgICAgICAgICAgICAgIyBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM3MDgKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy51cmFuZG9tKDAuOSkpLCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMS4xKSksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MudXJhbmRvbSgyLjApKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMSkpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MudXJhbmRvbSgxMCkpLCAxMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMTAwKSksIDEwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMTAwMCkpLCAxMDAwKQorICAgICAgICAgICAgIyBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM3MDgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3MudXJhbmRvbSwgMC45KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy51cmFuZG9tLCAxLjEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLnVyYW5kb20sIDIuMCkKICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKKyAgICBkZWYgdGVzdF9leGVjdnBlX3dpdGhfYmFkX2FyZ2xpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9zLmV4ZWN2cGUsICdub3RlcGFkJywgW10sIE5vbmUpCisKIGNsYXNzIFdpbjMyRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLnJlbmFtZSwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgdGVzdF9zdXBwb3J0LlRFU1RGTisiLmJhayIpCkBAIC01MjMsMTYgKzUzOSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLmNoZGlyLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfbWtkaXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2hkaXIsIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5ta2RpciwgdGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF91dGltZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy51dGltZSwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgTm9uZSkKIAotICAgIGRlZiB0ZXN0X2FjY2VzcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy51dGltZSwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgMCkKLQogICAgIGRlZiB0ZXN0X2NobW9kKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLnV0aW1lLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLmNobW9kLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCAwKQogCiBjbGFzcyBUZXN0SW52YWxpZEZEKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzaW5nbGVzID0gWyJmY2hkaXIiLCAiZmRvcGVuIiwgImR1cCIsICJmZGF0YXN5bmMiLCAiZnN0YXQiLApAQCAtNTQ4LDcgKzU2NiwxMyBAQAogICAgICAgICBsb2NhbHMoKVsidGVzdF8iK2ZdID0gZ2V0X3NpbmdsZShmKQogCiAgICAgZGVmIGNoZWNrKHNlbGYsIGYsICphcmdzKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZiwgdGVzdF9zdXBwb3J0Lm1ha2VfYmFkX2ZkKCksICphcmdzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmKHRlc3Rfc3VwcG9ydC5tYWtlX2JhZF9mZCgpLCAqYXJncykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUJBREYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIiVyIGRpZG4ndCByYWlzZSBhIE9TRXJyb3Igd2l0aCBhIGJhZCBmaWxlIGRlc2NyaXB0b3IiCisgICAgICAgICAgICAgICAgICAgICAgJSBmKQogCiAgICAgZGVmIHRlc3RfaXNhdHR5KHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKG9zLCAiaXNhdHR5Iik6CkBAIC01NjYsOSArNTkwLDggQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgaWYgaSA8IDI6Ci0gICAgICAgICAgICAgICAgIyBVbmFibGUgdG8gYWNxdWlyZSBhIHJhbmdlIG9mIGludmFsaWQgZmlsZSBkZXNjcmlwdG9ycywKLSAgICAgICAgICAgICAgICAjIHNvIHNraXAgdGhlIHRlc3QgKGluIDIuNisgdGhpcyBpcyBhIHVuaXR0ZXN0LlNraXBUZXN0KS4KLSAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKKyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBhY3F1aXJlIGEgcmFuZ2Ugb2YgaW52YWxpZCBmaWxlIGRlc2NyaXB0b3JzIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuY2xvc2VyYW5nZShmZCwgZmQgKyBpLTEpLCBOb25lKQogCiAgICAgZGVmIHRlc3RfZHVwMihzZWxmKToKQEAgLTU4NywxMSArNjEwLDkgQEAKICAgICAgICAgaWYgaGFzYXR0cihvcywgImZwYXRoY29uZiIpOgogICAgICAgICAgICAgc2VsZi5jaGVjayhvcy5mcGF0aGNvbmYsICJQQ19OQU1FX01BWCIpCiAKLSAgICAjdGhpcyBpcyBhIHdlaXJkIG9uZSwgaXQgcmFpc2VzIElPRXJyb3IgdW5saWtlIHRoZSBvdGhlcnMKICAgICBkZWYgdGVzdF9mdHJ1bmNhdGUoc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIob3MsICJmdHJ1bmNhdGUiKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG9zLmZ0cnVuY2F0ZSwgdGVzdF9zdXBwb3J0Lm1ha2VfYmFkX2ZkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKQorICAgICAgICAgICAgc2VsZi5jaGVjayhvcy5mdHJ1bmNhdGUsIDApCiAKICAgICBkZWYgdGVzdF9sc2VlayhzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihvcywgImxzZWVrIik6CkBAIC02NDgsNyArNjY5LDYgQEAKICAgICAgICAgICAgIGRlZiB0ZXN0X3NldHJldWlkX25lZzEoc2VsZik6CiAgICAgICAgICAgICAgICAgIyBOZWVkcyB0byBhY2NlcHQgLTEuICBXZSBydW4gdGhpcyBpbiBhIHN1YnByb2Nlc3MgdG8gYXZvaWQKICAgICAgICAgICAgICAgICAjIGFsdGVyaW5nIHRoZSB0ZXN0IHJ1bm5lcidzIHByb2Nlc3Mgc3RhdGUgKGlzc3VlODA0NSkuCi0gICAgICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWwogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZXVpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKQEAgLTY2Myw3ICs2ODMsNiBAQAogICAgICAgICAgICAgZGVmIHRlc3Rfc2V0cmVnaWRfbmVnMShzZWxmKToKICAgICAgICAgICAgICAgICAjIE5lZWRzIHRvIGFjY2VwdCAtMS4gIFdlIHJ1biB0aGlzIGluIGEgc3VicHJvY2VzcyB0byBhdm9pZAogICAgICAgICAgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KLSAgICAgICAgICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCiAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgb3Msc3lzO29zLnNldHJlZ2lkKC0xLC0xKTtzeXMuZXhpdCgwKSddKQpAQCAtNjcxLDYgKzY5MCwxMjAgQEAKICAgICBjbGFzcyBQb3NpeFVpZEdpZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcGFzcwogCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKK2NsYXNzIFdpbjMyS2lsbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgX2tpbGwoc2VsZiwgc2lnKToKKyAgICAgICAgIyBTdGFydCBzeXMuZXhlY3V0YWJsZSBhcyBhIHN1YnByb2Nlc3MgYW5kIGNvbW11bmljYXRlIGZyb20gdGhlCisgICAgICAgICMgc3VicHJvY2VzcyB0byB0aGUgcGFyZW50IHRoYXQgdGhlIGludGVycHJldGVyIGlzIHJlYWR5LiBXaGVuIGl0CisgICAgICAgICMgYmVjb21lcyByZWFkeSwgc2VuZCAqc2lnKiB2aWEgb3Mua2lsbCB0byB0aGUgc3VicHJvY2VzcyBhbmQgY2hlY2sKKyAgICAgICAgIyB0aGF0IHRoZSByZXR1cm4gY29kZSBpcyBlcXVhbCB0byAqc2lnKi4KKyAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKKyAgICAgICAgaW1wb3J0IG1zdmNydAorCisgICAgICAgICMgU2luY2Ugd2UgY2FuJ3QgYWNjZXNzIHRoZSBjb250ZW50cyBvZiB0aGUgcHJvY2Vzcycgc3Rkb3V0IHVudGlsIHRoZQorICAgICAgICAjIHByb2Nlc3MgaGFzIGV4aXRlZCwgdXNlIFBlZWtOYW1lZFBpcGUgdG8gc2VlIHdoYXQncyBpbnNpZGUgc3Rkb3V0CisgICAgICAgICMgd2l0aG91dCB3YWl0aW5nLiBUaGlzIGlzIGRvbmUgc28gd2UgY2FuIHRlbGwgdGhhdCB0aGUgaW50ZXJwcmV0ZXIKKyAgICAgICAgIyBpcyBzdGFydGVkIGFuZCBydW5uaW5nIGF0IGEgcG9pbnQgd2hlcmUgaXQgY291bGQgaGFuZGxlIGEgc2lnbmFsLgorICAgICAgICBQZWVrTmFtZWRQaXBlID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5QZWVrTmFtZWRQaXBlCisgICAgICAgIFBlZWtOYW1lZFBpcGUucmVzdHlwZSA9IHdpbnR5cGVzLkJPT0wKKyAgICAgICAgUGVla05hbWVkUGlwZS5hcmd0eXBlcyA9ICh3aW50eXBlcy5IQU5ETEUsICMgUGlwZSBoYW5kbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuUE9JTlRFUihjdHlwZXMuY19jaGFyKSwgIyBzdGRvdXQgYnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ludHlwZXMuRFdPUkQsICMgQnVmZmVyIHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuUE9JTlRFUih3aW50eXBlcy5EV09SRCksICMgYnl0ZXMgcmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5QT0lOVEVSKHdpbnR5cGVzLkRXT1JEKSwgIyBieXRlcyBhdmFpbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5QT0lOVEVSKHdpbnR5cGVzLkRXT1JEKSkgIyBieXRlcyBsZWZ0CisgICAgICAgIG1zZyA9ICJydW5uaW5nIgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC53cml0ZSgne30nKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC5mbHVzaCgpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnB1dCgpIi5mb3JtYXQobXNnKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHByb2Muc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocHJvYy5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm9jLnN0ZGluLmNsb3NlKQorCisgICAgICAgIGNvdW50LCBtYXggPSAwLCAxMDAKKyAgICAgICAgd2hpbGUgY291bnQgPCBtYXggYW5kIHByb2MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAjIENyZWF0ZSBhIHN0cmluZyBidWZmZXIgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBzdGRvdXQgZnJvbSB0aGUgcGlwZQorICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKGxlbihtc2cpKQorICAgICAgICAgICAgIyBPYnRhaW4gdGhlIHRleHQgY3VycmVudGx5IGluIHByb2Muc3Rkb3V0CisgICAgICAgICAgICAjIEJ5dGVzIHJlYWQvYXZhaWwvbGVmdCBhcmUgbGVmdCBhcyBOVUxMIGFuZCB1bnVzZWQKKyAgICAgICAgICAgIHJzbHQgPSBQZWVrTmFtZWRQaXBlKG1zdmNydC5nZXRfb3NmaGFuZGxlKHByb2Muc3Rkb3V0LmZpbGVubygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgY3R5cGVzLnNpemVvZihidWYpLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyc2x0LCAwLCAiUGVla05hbWVkUGlwZSBmYWlsZWQiKQorICAgICAgICAgICAgaWYgYnVmLnZhbHVlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBidWYudmFsdWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWQgbm90IHJlY2VpdmUgY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBzdWJwcm9jZXNzIikKKworICAgICAgICBvcy5raWxsKHByb2MucGlkLCBzaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvYy53YWl0KCksIHNpZykKKworICAgIGRlZiB0ZXN0X2tpbGxfc2lndGVybShzZWxmKToKKyAgICAgICAgIyBTSUdURVJNIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBzcGVjaWFsLCBidXQgbWFrZSBzdXJlIGl0IHdvcmtzCisgICAgICAgIHNlbGYuX2tpbGwoc2lnbmFsLlNJR1RFUk0pCisKKyAgICBkZWYgdGVzdF9raWxsX2ludChzZWxmKToKKyAgICAgICAgIyBvcy5raWxsIG9uIFdpbmRvd3MgY2FuIHRha2UgYW4gaW50IHdoaWNoIGdldHMgc2V0IGFzIHRoZSBleGl0IGNvZGUKKyAgICAgICAgc2VsZi5fa2lsbCgxMDApCisKKyAgICBkZWYgX2tpbGxfd2l0aF9ldmVudChzZWxmLCBldmVudCwgbmFtZSk6CisgICAgICAgIHRhZ25hbWUgPSAidGVzdF9vc18lcyIgJSB1dWlkLnV1aWQxKCkKKyAgICAgICAgbSA9IG1tYXAubW1hcCgtMSwgMSwgdGFnbmFtZSkKKyAgICAgICAgbVswXSA9ICcwJworICAgICAgICAjIFJ1biBhIHNjcmlwdCB3aGljaCBoYXMgY29uc29sZSBjb250cm9sIGhhbmRsaW5nIGVuYWJsZWQuCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpbl9jb25zb2xlX2hhbmRsZXIucHkiKSwgdGFnbmFtZV0sCisgICAgICAgICAgICAgICAgICAgY3JlYXRpb25mbGFncz1zdWJwcm9jZXNzLkNSRUFURV9ORVdfUFJPQ0VTU19HUk9VUCkKKyAgICAgICAgIyBMZXQgdGhlIGludGVycHJldGVyIHN0YXJ0dXAgYmVmb3JlIHdlIHNlbmQgc2lnbmFscy4gU2VlICMzMTM3LgorICAgICAgICBjb3VudCwgbWF4ID0gMCwgMjAKKyAgICAgICAgd2hpbGUgY291bnQgPCBtYXggYW5kIHByb2MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBtWzBdID09ICcxJzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlN1YnByb2Nlc3MgZGlkbid0IGZpbmlzaCBpbml0aWFsaXphdGlvbiIpCisgICAgICAgIG9zLmtpbGwocHJvYy5waWQsIGV2ZW50KQorICAgICAgICAjIHByb2Muc2VuZF9zaWduYWwoZXZlbnQpIGNvdWxkIGFsc28gYmUgZG9uZSBoZXJlLgorICAgICAgICAjIEFsbG93IHRpbWUgZm9yIHRoZSBzaWduYWwgdG8gYmUgcGFzc2VkIGFuZCB0aGUgcHJvY2VzcyB0byBleGl0LgorICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgaWYgbm90IHByb2MucG9sbCgpOgorICAgICAgICAgICAgIyBGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MgaWYgd2Ugd2VyZW4ndCBhYmxlIHRvIHNpZ25hbCBpdC4KKyAgICAgICAgICAgIG9zLmtpbGwocHJvYy5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICBzZWxmLmZhaWwoInN1YnByb2Nlc3MgZGlkIG5vdCBzdG9wIG9uIHt9Ii5mb3JtYXQobmFtZSkpCisKKyAgICBAdW5pdHRlc3Quc2tpcCgic3VicHJvY2Vzc2VzIGFyZW4ndCBpbmhlcml0aW5nIENUUkwrQyBwcm9wZXJ0eSIpCisgICAgZGVmIHRlc3RfQ1RSTF9DX0VWRU5UKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKKyAgICAgICAgaW1wb3J0IGN0eXBlcworCisgICAgICAgICMgTWFrZSBhIE5VTEwgdmFsdWUgYnkgY3JlYXRpbmcgYSBwb2ludGVyIHdpdGggbm8gYXJndW1lbnQuCisgICAgICAgIE5VTEwgPSBjdHlwZXMuUE9JTlRFUihjdHlwZXMuY19pbnQpKCkKKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5TZXRDb25zb2xlQ3RybEhhbmRsZXIKKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyLmFyZ3R5cGVzID0gKGN0eXBlcy5QT0lOVEVSKGN0eXBlcy5jX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW50eXBlcy5CT09MKQorICAgICAgICBTZXRDb25zb2xlQ3RybEhhbmRsZXIucmVzdHlwZSA9IHdpbnR5cGVzLkJPT0wKKworICAgICAgICAjIENhbGxpbmcgdGhpcyB3aXRoIE5VTEwgYW5kIEZBTFNFIGNhdXNlcyB0aGUgY2FsbGluZyBwcm9jZXNzIHRvCisgICAgICAgICMgaGFuZGxlIENUUkwrQywgcmF0aGVyIHRoYW4gaWdub3JlIGl0LiBUaGlzIHByb3BlcnR5IGlzIGluaGVyaXRlZAorICAgICAgICAjIGJ5IHN1YnByb2Nlc3Nlcy4KKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyKE5VTEwsIDApCisKKyAgICAgICAgc2VsZi5fa2lsbF93aXRoX2V2ZW50KHNpZ25hbC5DVFJMX0NfRVZFTlQsICJDVFJMX0NfRVZFTlQiKQorCisgICAgZGVmIHRlc3RfQ1RSTF9CUkVBS19FVkVOVChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF93aXRoX2V2ZW50KHNpZ25hbC5DVFJMX0JSRUFLX0VWRU5ULCAiQ1RSTF9CUkVBS19FVkVOVCIpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCiAgICAgICAgIEZpbGVUZXN0cywKQEAgLTY4Myw3ICs4MTYsOCBAQAogICAgICAgICBVUmFuZG9tVGVzdHMsCiAgICAgICAgIFdpbjMyRXJyb3JUZXN0cywKICAgICAgICAgVGVzdEludmFsaWRGRCwKLSAgICAgICAgUG9zaXhVaWRHaWRUZXN0cworICAgICAgICBQb3NpeFVpZEdpZFRlc3RzLAorICAgICAgICBXaW4zMktpbGxUZXN0cwogICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkgYi9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CmluZGV4IDJmYTk5NjIuLjdhMzU3YTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQpAQCAtMSwxMCArMSwxMSBAQAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIHRlc3Rfc3VwcG9ydC5yZXF1aXJlcygnYXVkaW8nKQogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgVGVzdFNraXBwZWQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZpbmRmaWxlCisKK29zc2F1ZGlvZGV2ID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ29zc2F1ZGlvZGV2JykKIAogaW1wb3J0IGVycm5vCi1pbXBvcnQgb3NzYXVkaW9kZXYKIGltcG9ydCBzeXMKIGltcG9ydCBzdW5hdQogaW1wb3J0IHRpbWUKQEAgLTQ2LDcgKzQ3LDcgQEAKICAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKICAgICAgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKLSAgICAgICAgICAgICAgICByYWlzZSBUZXN0U2tpcHBlZChtc2cpCisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QobXNnKQogICAgICAgICAgICAgcmFpc2UKIAogICAgICAgICAjIGF0IGxlYXN0IGNoZWNrIHRoYXQgdGhlc2UgbWV0aG9kcyBjYW4gYmUgaW52b2tlZApAQCAtNTcsNyArNTgsNyBAQAogICAgICAgICBkc3AuZmlsZW5vKCkKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgd29yay4KLSAgICAgICAgc2VsZi5mYWlsSWYoZHNwLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkc3AuY2xvc2VkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzcC5uYW1lLCAiL2Rldi9kc3AiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzcC5tb2RlLCAidyIsICJiYWQgZHNwLm1vZGU6ICVyIiAlIGRzcC5tb2RlKQogCkBAIC04Myw3ICs4NCw3IEBACiAgICAgICAgIGVsYXBzZWRfdGltZSA9IHQyIC0gdDEKIAogICAgICAgICBwZXJjZW50X2RpZmYgPSAoYWJzKGVsYXBzZWRfdGltZSAtIGV4cGVjdGVkX3RpbWUpIC8gZXhwZWN0ZWRfdGltZSkgKiAxMDAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHBlcmNlbnRfZGlmZiA8PSAxMC4wLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocGVyY2VudF9kaWZmIDw9IDEwLjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZWxhcHNlZCB0aW1lID4gMTAlIG9mZiBvZiBleHBlY3RlZCB0aW1lIikKIAogICAgIGRlZiBzZXRfcGFyYW1ldGVycyhzZWxmLCBkc3ApOgpAQCAtMTMxLDcgKzEzMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgXToKICAgICAgICAgICAgIChmbXQsIGNoYW5uZWxzLCByYXRlKSA9IGNvbmZpZwogICAgICAgICAgICAgcmVzdWx0ID0gZHNwLnNldHBhcmFtZXRlcnMoZm10LCBjaGFubmVscywgcmF0ZSwgRmFsc2UpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKHJlc3VsdCwgY29uZmlnLAorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQsIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWRseSBnb3QgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24iKQogCiAgICAgICAgICAgICB0cnk6CkBAIC0xNTUsNyArMTU2LDcgQEAKICAgICAgICAgICAgICNzZWxmLnNldF9iYWRfcGFyYW1ldGVycyhkc3ApCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkc3AuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRzcC5jbG9zZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHNwLmNsb3NlZCkKIAogCiBkZWYgdGVzdF9tYWluKCk6CkBAIC0xNjQsNyArMTY1LDcgQEAKICAgICBleGNlcHQgKG9zc2F1ZGlvZGV2LmVycm9yLCBJT0Vycm9yKSwgbXNnOgogICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKLSAgICAgICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKG1zZykKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KG1zZykKICAgICAgICAgcmFpc2UKICAgICBkc3AuY2xvc2UoKQogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CmluZGV4IDZhY2QxZTcuLjMzYjkxYmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CkBAIC0xLDUgKzEsNCBAQAogaW1wb3J0IHBhcnNlcgotaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CkBAIC0yMCw4ICsxOSw4IEBACiAgICAgICAgIGV4Y2VwdCBwYXJzZXIuUGFyc2VyRXJyb3IsIHdoeToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY291bGQgbm90IHJvdW5kdHJpcCAlcjogJXMiICUgKHMsIHdoeSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModCwgc3QyLnRvdHVwbGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZS1nZW5lcmF0ZSBzeW50YXggdHJlZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgc3QyLnRvdHVwbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHJlLWdlbmVyYXRlIHN5bnRheCB0cmVlIikKIAogICAgIGRlZiBjaGVja19leHByKHNlbGYsIHMpOgogICAgICAgICBzZWxmLnJvdW5kdHJpcChwYXJzZXIuZXhwciwgcykKQEAgLTMzLDcgKzMyLDcgQEAKICAgICAgICAgY29kZSA9IHN1aXRlLmNvbXBpbGUoKQogICAgICAgICBzY29wZSA9IHt9CiAgICAgICAgIGV4ZWMgY29kZSBpbiBzY29wZQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzY29wZVsieCJdLCB1bmljb2RlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNjb3BlWyJ4Il0sIHVuaWNvZGUpCiAKICAgICBkZWYgY2hlY2tfc3VpdGUoc2VsZiwgcyk6CiAgICAgICAgIHNlbGYucm91bmR0cmlwKHBhcnNlci5zdWl0ZSwgcykKQEAgLTU5LDEzICs1OCwzNyBAQAogCiAgICAgZGVmIHRlc3RfZXhwcmVzc2lvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKDEpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7MToxfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiezE6MSwgMjoyLCAzOjN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7MToxLCAyOjIsIDM6Myx9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7MX0iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInsxLCAyLCAzfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiezEsIDIsIDMsfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiW10iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIlsxXSIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiWzEsIDIsIDNdIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJbMSwgMiwgMyxdIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCIoKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiKDEsKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiKDEsIDIsIDMpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCIoMSwgMiwgMywpIikKICAgICAgICAgc2VsZi5jaGVja19leHByKCJbeCoqMyBmb3IgeCBpbiByYW5nZSgyMCldIikKICAgICAgICAgc2VsZi5jaGVja19leHByKCJbeCoqMyBmb3IgeCBpbiByYW5nZSgyMCkgaWYgeCAlIDNdIikKICAgICAgICAgc2VsZi5jaGVja19leHByKCJbeCoqMyBmb3IgeCBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeCAlIDNdIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJbeCt5IGZvciB4IGluIHJhbmdlKDMwKSBmb3IgeSBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeSAlIDNdIikKKyAgICAgICAgI3NlbGYuY2hlY2tfZXhwcigiW3ggZm9yIHggaW4gbGFtYmRhOiBUcnVlLCBsYW1iZGE6IEZhbHNlIGlmIHgoKV0iKQogICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxpc3QoeCoqMyBmb3IgeCBpbiByYW5nZSgyMCkpIikKICAgICAgICAgc2VsZi5jaGVja19leHByKCJsaXN0KHgqKjMgZm9yIHggaW4gcmFuZ2UoMjApIGlmIHggJSAzKSIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGlzdCh4KiozIGZvciB4IGluIHJhbmdlKDIwKSBpZiB4ICUgMiBpZiB4ICUgMykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxpc3QoeCt5IGZvciB4IGluIHJhbmdlKDMwKSBmb3IgeSBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeSAlIDMpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCoqMyBmb3IgeCBpbiByYW5nZSgzMCl9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCoqMyBmb3IgeCBpbiByYW5nZSgzMCkgaWYgeCAlIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCoqMyBmb3IgeCBpbiByYW5nZSgzMCkgaWYgeCAlIDIgaWYgeCAlIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCt5IGZvciB4IGluIHJhbmdlKDMwKSBmb3IgeSBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeSAlIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCoqMzogeSoqMiBmb3IgeCwgeSBpbiB6aXAocmFuZ2UoMzApLCByYW5nZSgzMCkpfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigie3gqKjM6IHkqKjIgZm9yIHgsIHkgaW4gemlwKHJhbmdlKDMwKSwgcmFuZ2UoMzApKSBpZiB4ICUgM30iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInt4KiozOiB5KioyIGZvciB4LCB5IGluIHppcChyYW5nZSgzMCksIHJhbmdlKDMwKSkgaWYgeCAlIDMgaWYgeSAlIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eDp5IGZvciB4IGluIHJhbmdlKDMwKSBmb3IgeSBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeSAlIDN9IikKICAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oKmFyZ3MpIikKICAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oKmFyZ3MsICoqa3cpIikKICAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oKiprdykiKQpAQCAtOTQsNiArMTE3LDcgQEAKICAgICAgICAgc2VsZi5jaGVja19leHByKCJsYW1iZGEgZm9vPWJhciwgYmxhej1ibGF0KzIsICoqejogMCIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhIGZvbz1iYXIsIGJsYXo9YmxhdCsyLCAqeSwgKip6OiAwIikKICAgICAgICAgc2VsZi5jaGVja19leHByKCJsYW1iZGEgeCwgKnksICoqejogMCIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhIHg6IDUgaWYgeCBlbHNlIDIiKQogICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIih4IGZvciB4IGluIHJhbmdlKDEwKSkiKQogICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbyh4IGZvciB4IGluIHJhbmdlKDEwKSkiKQogCkBAIC0yMTMsNiArMjM3LDcgQEAKICAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJ3aXRoIG9wZW4oJ3gnKTogcGFzc1xuIikKICAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgid2l0aCBvcGVuKCd4JykgYXMgZjogcGFzc1xuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgid2l0aCBvcGVuKCd4JykgYXMgZiwgb3BlbigneScpIGFzIGc6IHBhc3NcbiIpCiAKICAgICBkZWYgdGVzdF90cnlfc3RtdChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgidHJ5OiBwYXNzXG5leGNlcHQ6IHBhc3NcbiIpCkBAIC0yMzMsNyArMjU4LDcgQEAKICAgICBkZWYgdGVzdF9wb3NpdGlvbihzZWxmKToKICAgICAgICAgIyBBbiBhYnNvbHV0ZWx5IG1pbmltYWwgdGVzdCBvZiBwb3NpdGlvbiBpbmZvcm1hdGlvbi4gIEJldHRlcgogICAgICAgICAjIHRlc3RzIHdvdWxkIGJlIGEgYmlnIHByb2plY3QuCi0gICAgICAgIGNvZGUgPSAiZGVmIGYoeCk6XG4gICAgcmV0dXJuIHggKyAxXG4iCisgICAgICAgIGNvZGUgPSAiZGVmIGYoeCk6XG4gICAgcmV0dXJuIHggKyAxIgogICAgICAgICBzdDEgPSBwYXJzZXIuc3VpdGUoY29kZSkKICAgICAgICAgc3QyID0gc3QxLnRvdHVwbGUobGluZV9pbmZvPTEsIGNvbF9pbmZvPTEpCiAKQEAgLTUyMiwxNCArNTQ3LDE0IEBACiAgICAgZGVmIHRlc3RfY29tcGlsZV9leHByKHNlbGYpOgogICAgICAgICBzdCA9IHBhcnNlci5leHByKCcyICsgMycpCiAgICAgICAgIGNvZGUgPSBwYXJzZXIuY29tcGlsZXN0KHN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhldmFsKGNvZGUpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZSksIDUpCiAKICAgICBkZWYgdGVzdF9jb21waWxlX3N1aXRlKHNlbGYpOgogICAgICAgICBzdCA9IHBhcnNlci5zdWl0ZSgneCA9IDI7IHkgPSB4ICsgMycpCiAgICAgICAgIGNvZGUgPSBwYXJzZXIuY29tcGlsZXN0KHN0KQogICAgICAgICBnbG9icyA9IHt9CiAgICAgICAgIGV4ZWMgY29kZSBpbiBnbG9icwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnbG9ic1sneSddLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JzWyd5J10sIDUpCiAKICAgICBkZWYgdGVzdF9jb21waWxlX2Vycm9yKHNlbGYpOgogICAgICAgICBzdCA9IHBhcnNlci5zdWl0ZSgnMSA9IDMgKyA0JykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGRiLnB5IGIvTGliL3Rlc3QvdGVzdF9wZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAzYzIwYgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CkBAIC0wLDAgKzEsMjg3IEBACisjIEEgdGVzdCBzdWl0ZSBmb3IgcGRiOyBhdCB0aGUgbW9tZW50LCB0aGlzIG9ubHkgdmFsaWRhdGVzIHNraXBwaW5nIG9mCisjIHNwZWNpZmllZCB0ZXN0IG1vZHVsZXMgKFJGRSAjNTE0MikuCisKK2ltcG9ydCBpbXAKK2ltcG9ydCBzeXMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKyMgVGhpcyBsaXR0bGUgaGVscGVyIGNsYXNzIGlzIGVzc2VudGlhbCBmb3IgdGVzdGluZyBwZGIgdW5kZXIgZG9jdGVzdC4KK2Zyb20gdGVzdF9kb2N0ZXN0IGltcG9ydCBfRmFrZUlucHV0CisKKworY2xhc3MgUGRiVGVzdElucHV0KG9iamVjdCk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRoYXQgbWFrZXMgdGVzdGluZyBQZGIgaW4gZG9jdGVzdHMgZWFzaWVyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0KToKKyAgICAgICAgc2VsZi5pbnB1dCA9IGlucHV0CisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWxfc3RkaW4gPSBzeXMuc3RkaW4KKyAgICAgICAgc3lzLnN0ZGluID0gX0Zha2VJbnB1dChzZWxmLmlucHV0KQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGMpOgorICAgICAgICBzeXMuc3RkaW4gPSBzZWxmLnJlYWxfc3RkaW4KKworCitkZWYgd3JpdGUoeCk6CisgICAgcHJpbnQgeAorCitkZWYgdGVzdF9wZGJfZGlzcGxheWhvb2soKToKKyAgICAiIiJUaGlzIHRlc3RzIHRoZSBjdXN0b20gZGlzcGxheWhvb2sgZm9yIHBkYi4KKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbihmb28sIGJhcik6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKCkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIHBhc3MKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbCisgICAgLi4uICAgICAnZm9vJywKKyAgICAuLi4gICAgICdiYXInLAorICAgIC4uLiAgICAgJ2ZvciBpIGluIHJhbmdlKDUpOiB3cml0ZShpKScsCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiBdKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oMSwgTm9uZSkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfZGlzcGxheWhvb2tbMF0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcGFzcworICAgIChQZGIpIGZvbworICAgIDEKKyAgICAoUGRiKSBiYXIKKyAgICAoUGRiKSBmb3IgaSBpbiByYW5nZSg1KTogd3JpdGUoaSkKKyAgICAwCisgICAgMQorICAgIDIKKyAgICAzCisgICAgNAorICAgIChQZGIpIGNvbnRpbnVlCisgICAgIiIiCisKK2RlZiB0ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzKCk6CisgICAgIiIiVGVzdCBiYXNpYyBjb21tYW5kcyByZWxhdGVkIHRvIGJyZWFrcG9pbnRzLgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKCkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIHByaW50KDEpCisgICAgLi4uICAgICBwcmludCgyKQorICAgIC4uLiAgICAgcHJpbnQoMykKKyAgICAuLi4gICAgIHByaW50KDQpCisKKyAgICBGaXJzdCwgbmVlZCB0byBjbGVhciBiZGIgc3RhdGUgdGhhdCBtaWdodCBiZSBsZWZ0IG92ZXIgZnJvbSBwcmV2aW91cyB0ZXN0cy4KKyAgICBPdGhlcndpc2UsIHRoZSBuZXcgYnJlYWtwb2ludHMgbWlnaHQgZ2V0IGFzc2lnbmVkIGRpZmZlcmVudCBudW1iZXJzLgorCisgICAgPj4+IGZyb20gYmRiIGltcG9ydCBCcmVha3BvaW50CisgICAgPj4+IEJyZWFrcG9pbnQubmV4dCA9IDEKKyAgICA+Pj4gQnJlYWtwb2ludC5icGxpc3QgPSB7fQorICAgID4+PiBCcmVha3BvaW50LmJwYnludW1iZXIgPSBbTm9uZV0KKworICAgIE5vdyB0ZXN0IHRoZSBicmVha3BvaW50IGNvbW1hbmRzLiAgTk9STUFMSVpFX1dISVRFU1BBQ0UgaXMgbmVlZGVkIGJlY2F1c2UKKyAgICB0aGUgYnJlYWtwb2ludCBsaXN0IG91dHB1dHMgYSB0YWIgZm9yIHRoZSAic3RvcCBvbmx5IiBhbmQgImlnbm9yZSBuZXh0IgorICAgIGxpbmVzLCB3aGljaCB3ZSBkb24ndCB3YW50IHRvIHB1dCBpbiBoZXJlLgorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCisgICAgLi4uICAgICAnYnJlYWsgMycsCisgICAgLi4uICAgICAnZGlzYWJsZSAxJywKKyAgICAuLi4gICAgICdpZ25vcmUgMSAxMCcsCisgICAgLi4uICAgICAnY29uZGl0aW9uIDEgMSA8IDInLAorICAgIC4uLiAgICAgJ2JyZWFrIDQnLAorICAgIC4uLiAgICAgJ2JyZWFrIDQnLAorICAgIC4uLiAgICAgJ2JyZWFrJywKKyAgICAuLi4gICAgICdjbGVhciAzJywKKyAgICAuLi4gICAgICdicmVhaycsCisgICAgLi4uICAgICAnY29uZGl0aW9uIDEnLAorICAgIC4uLiAgICAgJ2VuYWJsZSAxJywKKyAgICAuLi4gICAgICdjbGVhciAxJywKKyAgICAuLi4gICAgICdjb21tYW5kcyAyJywKKyAgICAuLi4gICAgICdwcmludCA0MicsCisgICAgLi4uICAgICAnZW5kJywKKyAgICAuLi4gICAgICdjb250aW51ZScsICAjIHdpbGwgc3RvcCBhdCBicmVha3BvaW50IDIgKGxpbmUgNCkKKyAgICAuLi4gICAgICdjbGVhcicsICAgICAjIGNsZWFyIGFsbCEKKyAgICAuLi4gICAgICd5JywKKyAgICAuLi4gICAgICd0YnJlYWsgNScsCisgICAgLi4uICAgICAnY29udGludWUnLCAgIyB3aWxsIHN0b3AgYXQgdGVtcG9yYXJ5IGJyZWFrcG9pbnQKKyAgICAuLi4gICAgICdicmVhaycsICAgICAjIG1ha2Ugc3VyZSBicmVha3BvaW50IGlzIGdvbmUKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uIF0pOgorICAgIC4uLiAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBwcmludCgxKQorICAgIChQZGIpIGJyZWFrIDMKKyAgICBCcmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjozCisgICAgKFBkYikgZGlzYWJsZSAxCisgICAgKFBkYikgaWdub3JlIDEgMTAKKyAgICBXaWxsIGlnbm9yZSBuZXh0IDEwIGNyb3NzaW5ncyBvZiBicmVha3BvaW50IDEuCisgICAgKFBkYikgY29uZGl0aW9uIDEgMSA8IDIKKyAgICAoUGRiKSBicmVhayA0CisgICAgQnJlYWtwb2ludCAyIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAorICAgIChQZGIpIGJyZWFrIDQKKyAgICBCcmVha3BvaW50IDMgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjo0CisgICAgKFBkYikgYnJlYWsKKyAgICBOdW0gVHlwZSAgICAgICAgIERpc3AgRW5iICAgV2hlcmUKKyAgICAxICAgYnJlYWtwb2ludCAgIGtlZXAgbm8gICAgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjozCisgICAgICAgICAgICBzdG9wIG9ubHkgaWYgMSA8IDIKKyAgICAgICAgICAgIGlnbm9yZSBuZXh0IDEwIGhpdHMKKyAgICAyICAgYnJlYWtwb2ludCAgIGtlZXAgeWVzICAgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjo0CisgICAgMyAgIGJyZWFrcG9pbnQgICBrZWVwIHllcyAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAorICAgIChQZGIpIGNsZWFyIDMKKyAgICBEZWxldGVkIGJyZWFrcG9pbnQgMworICAgIChQZGIpIGJyZWFrCisgICAgTnVtIFR5cGUgICAgICAgICBEaXNwIEVuYiAgIFdoZXJlCisgICAgMSAgIGJyZWFrcG9pbnQgICBrZWVwIG5vICAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MworICAgICAgICAgICAgc3RvcCBvbmx5IGlmIDEgPCAyCisgICAgICAgICAgICBpZ25vcmUgbmV4dCAxMCBoaXRzCisgICAgMiAgIGJyZWFrcG9pbnQgICBrZWVwIHllcyAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAorICAgIChQZGIpIGNvbmRpdGlvbiAxCisgICAgQnJlYWtwb2ludCAxIGlzIG5vdyB1bmNvbmRpdGlvbmFsLgorICAgIChQZGIpIGVuYWJsZSAxCisgICAgKFBkYikgY2xlYXIgMQorICAgIERlbGV0ZWQgYnJlYWtwb2ludCAxCisgICAgKFBkYikgY29tbWFuZHMgMgorICAgIChjb20pIHByaW50IDQyCisgICAgKGNvbSkgZW5kCisgICAgKFBkYikgY29udGludWUKKyAgICAxCisgICAgNDIKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT4oNCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBwcmludCgyKQorICAgIChQZGIpIGNsZWFyCisgICAgQ2xlYXIgYWxsIGJyZWFrcz8geQorICAgIChQZGIpIHRicmVhayA1CisgICAgQnJlYWtwb2ludCA0IGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgMgorICAgIERlbGV0ZWQgYnJlYWtwb2ludCA0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoMykKKyAgICAoUGRiKSBicmVhaworICAgIChQZGIpIGNvbnRpbnVlCisgICAgMworICAgIDQKKyAgICAiIiIKKworCitkZWYgdGVzdF9wZGJfc2tpcF9tb2R1bGVzKCk6CisgICAgIiIiVGhpcyBpbGx1c3RyYXRlcyB0aGUgc2ltcGxlIGNhc2Ugb2YgbW9kdWxlIHNraXBwaW5nLgorCisgICAgPj4+IGRlZiBza2lwX21vZHVsZSgpOgorICAgIC4uLiAgICAgaW1wb3J0IHN0cmluZworICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVsnc3RyaW5nKiddKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgc3RyaW5nLmxvd2VyKCdGT08nKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uIF0pOgorICAgIC4uLiAgICAgc2tpcF9tb2R1bGUoKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNbMF0+KDQpc2tpcF9tb2R1bGUoKQorICAgIC0+IHN0cmluZy5sb3dlcignRk9PJykKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNbMF0+KDQpc2tpcF9tb2R1bGUoKS0+Tm9uZQorICAgIC0+IHN0cmluZy5sb3dlcignRk9PJykKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCisKKyMgTW9kdWxlIGZvciB0ZXN0aW5nIHNraXBwaW5nIG9mIG1vZHVsZSB0aGF0IG1ha2VzIGEgY2FsbGJhY2sKK21vZCA9IGltcC5uZXdfbW9kdWxlKCdtb2R1bGVfdG9fc2tpcCcpCitleGVjICdkZWYgZm9vX3BvbnkoY2FsbGJhY2spOiB4ID0gMTsgY2FsbGJhY2soKTsgcmV0dXJuIE5vbmUnIGluIG1vZC5fX2RpY3RfXworCisKK2RlZiB0ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFjaygpOgorICAgICIiIlRoaXMgaWxsdXN0cmF0ZXMgc2tpcHBpbmcgb2YgbW9kdWxlcyB0aGF0IGNhbGwgaW50byBvdGhlciBjb2RlLgorCisgICAgPj4+IGRlZiBza2lwX21vZHVsZSgpOgorICAgIC4uLiAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bJ21vZHVsZV90b19za2lwKiddKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgbW9kLmZvb19wb255KGNhbGxiYWNrKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uIF0pOgorICAgIC4uLiAgICAgc2tpcF9tb2R1bGUoKQorICAgIC4uLiAgICAgcGFzcyAgIyBwcm92aWRlcyBzb21ldGhpbmcgdG8gInN0ZXAiIHRvCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPig1KXNraXBfbW9kdWxlKCkKKyAgICAtPiBtb2QuZm9vX3BvbnkoY2FsbGJhY2spCisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPigyKWNhbGxiYWNrKCkKKyAgICAtPiBkZWYgY2FsbGJhY2soKToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPigzKWNhbGxiYWNrKCkKKyAgICAtPiByZXR1cm4gTm9uZQorICAgIChQZGIpIHN0ZXAKKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPigzKWNhbGxiYWNrKCktPk5vbmUKKyAgICAtPiByZXR1cm4gTm9uZQorICAgIChQZGIpIHN0ZXAKKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPig1KXNraXBfbW9kdWxlKCktPk5vbmUKKyAgICAtPiBtb2QuZm9vX3BvbnkoY2FsbGJhY2spCisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1sxXT4oMTApPG1vZHVsZT4oKQorICAgIC0+IHBhc3MgICMgcHJvdmlkZXMgc29tZXRoaW5nIHRvICJzdGVwIiB0bworICAgIChQZGIpIGNvbnRpbnVlCisgICAgIiIiCisKKworZGVmIHRlc3RfcGRiX2NvbnRpbnVlX2luX2JvdHRvbWZyYW1lKCk6CisgICAgIiIiVGVzdCB0aGF0ICJjb250aW51ZSIgYW5kICJuZXh0IiB3b3JrIHByb3Blcmx5IGluIGJvdHRvbSBmcmFtZSAoaXNzdWUgIzUyOTQpLgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiLCBzeXM7IGluc3QgPSBwZGIuUGRiKCkKKyAgICAuLi4gICAgIGluc3Quc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGluc3QuYm90ZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkgICMgaGFja2VyeSB0byBnZXQgdGhlIHJpZ2h0IGJvdGZyYW1lCisgICAgLi4uICAgICBwcmludCgxKQorICAgIC4uLiAgICAgcHJpbnQoMikKKyAgICAuLi4gICAgIHByaW50KDMpCisgICAgLi4uICAgICBwcmludCg0KQorCisgICAgRmlyc3QsIG5lZWQgdG8gY2xlYXIgYmRiIHN0YXRlIHRoYXQgbWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gcHJldmlvdXMgdGVzdHMuCisgICAgT3RoZXJ3aXNlLCB0aGUgbmV3IGJyZWFrcG9pbnRzIG1pZ2h0IGdldCBhc3NpZ25lZCBkaWZmZXJlbnQgbnVtYmVycy4KKworICAgID4+PiBmcm9tIGJkYiBpbXBvcnQgQnJlYWtwb2ludAorICAgID4+PiBCcmVha3BvaW50Lm5leHQgPSAxCisgICAgPj4+IEJyZWFrcG9pbnQuYnBsaXN0ID0ge30KKyAgICA+Pj4gQnJlYWtwb2ludC5icGJ5bnVtYmVyID0gW05vbmVdCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWworICAgIC4uLiAgICAgJ25leHQnLAorICAgIC4uLiAgICAgJ2JyZWFrIDcnLAorICAgIC4uLiAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICduZXh0JywKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiBdKToKKyAgICAuLi4gICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2NvbnRpbnVlX2luX2JvdHRvbWZyYW1lWzBdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGluc3QuYm90ZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkgICMgaGFja2VyeSB0byBnZXQgdGhlIHJpZ2h0IGJvdGZyYW1lCisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT4oNSl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBwcmludCgxKQorICAgIChQZGIpIGJyZWFrIDcKKyAgICBCcmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT46NworICAgIChQZGIpIGNvbnRpbnVlCisgICAgMQorICAgIDIKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfY29udGludWVfaW5fYm90dG9tZnJhbWVbMF0+KDcpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoMykKKyAgICAoUGRiKSBuZXh0CisgICAgMworICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT4oOCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBwcmludCg0KQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgNAorICAgICIiIgorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfcGRiCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfcGRiLCB2ZXJib3NpdHk9VHJ1ZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weSBiL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5CmluZGV4IDI5ODVjYzIuLmQwNWZlYTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5CkBAIC0xOSwxNSArMTksMTQgQEAKIGNsYXNzIFRlc3RUcmFuZm9ybXModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfdW5vdChzZWxmKToKLSAgICAgICAgIyBVTkFSWV9OT1QgSlVNUF9JRl9GQUxTRSBQT1BfVE9QICAtLT4gIEpVTVBfSUZfVFJVRSBQT1BfVE9QJworICAgICAgICAjIFVOQVJZX05PVCBQT1BfSlVNUF9JRl9GQUxTRSAgLS0+ICBQT1BfSlVNUF9JRl9UUlVFCiAgICAgICAgIGRlZiB1bm90KHgpOgogICAgICAgICAgICAgaWYgbm90IHggPT0gMjoKICAgICAgICAgICAgICAgICBkZWwgeAogICAgICAgICBhc20gPSBkaXNhc3NlbWJsZSh1bm90KQotICAgICAgICBmb3IgZWxlbSBpbiAoJ1VOQVJZX05PVCcsICdKVU1QX0lGX0ZBTFNFJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZWxlbSBub3QgaW4gYXNtKQotICAgICAgICBmb3IgZWxlbSBpbiAoJ0pVTVBfSUZfVFJVRScsICdQT1BfVE9QJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZWxlbSBpbiBhc20pCisgICAgICAgIGZvciBlbGVtIGluICgnVU5BUllfTk9UJywgJ1BPUF9KVU1QX0lGX0ZBTFNFJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignUE9QX0pVTVBfSUZfVFJVRScsIGFzbSkKIAogICAgIGRlZiB0ZXN0X2VsaW1faW52ZXJzaW9uX29mX2lzX29yX2luKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCkBAIC0zNyw3ICszNiw3IEBACiAgICAgICAgICAgICAoJ25vdCBhIG5vdCBpbiBiJywgJyhpbiknLCksCiAgICAgICAgICAgICApOgogICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gaW4gYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCiAKICAgICBkZWYgdGVzdF9ub25lX2FzX2NvbnN0YW50KHNlbGYpOgogICAgICAgICAjIExPQURfR0xPQkFMIE5vbmUgIC0tPiAgTE9BRF9DT05TVCBOb25lCkBAIC00NiwyNiArNDUsMjYgQEAKICAgICAgICAgICAgIHJldHVybiB4CiAgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCiAgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9HTE9CQUwnLCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZWxlbSBub3QgaW4gYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCiAgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9DT05TVCcsICcoTm9uZSknKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhlbGVtIGluIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgJ0FkZGluZyBhIGRvY3N0cmluZyBtYWRlIHRoaXMgdGVzdCBmYWlsIGluIFB5Mi41LjAnCiAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBzZWxmLmFzc2VydF8oJ0xPQURfQ09OU1QnIGluIGRpc2Fzc2VtYmxlKGYpKQotICAgICAgICBzZWxmLmFzc2VydF8oJ0xPQURfR0xPQkFMJyBub3QgaW4gZGlzYXNzZW1ibGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0xPQURfQ09OU1QnLCBkaXNhc3NlbWJsZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9HTE9CQUwnLCBkaXNhc3NlbWJsZShmKSkKIAogICAgIGRlZiB0ZXN0X3doaWxlX29uZShzZWxmKToKLSAgICAgICAgIyBTa2lwIG92ZXI6ICBMT0FEX0NPTlNUIHRydWVjb25zdCAgSlVNUF9JRl9GQUxTRSB4eCAgUE9QX1RPUAorICAgICAgICAjIFNraXAgb3ZlcjogIExPQURfQ09OU1QgdHJ1ZWNvbnN0ICBQT1BfSlVNUF9JRl9GQUxTRSB4eAogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByZXR1cm4gbGlzdAogICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfQ09OU1QnLCAnSlVNUF9JRl9GQUxTRScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gbm90IGluIGFzbSkKKyAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0NPTlNUJywgJ1BPUF9KVU1QX0lGX0ZBTFNFJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKICAgICAgICAgZm9yIGVsZW0gaW4gKCdKVU1QX0FCU09MVVRFJywpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gaW4gYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCiAKICAgICBkZWYgdGVzdF9wYWNrX3VucGFjayhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtNzQsOSArNzMsOSBAQAogICAgICAgICAgICAgKCdhLCBiLCBjID0gYSwgYiwgYycsICdST1RfVEhSRUUnLCksCiAgICAgICAgICAgICApOgogICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gaW4gYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCdCVUlMRF9UVVBMRScgbm90IGluIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygnVU5QQUNLX1RVUExFJyBub3QgaW4gYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOUEFDS19UVVBMRScsIGFzbSkKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfdHVwbGVzX29mX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtODcsOCArODYsOCBAQAogICAgICAgICAgICAgKCcoKDEsIDIpLCAzLCA0KScsICcoKCgxLCAyKSwgMywgNCkpJyksCiAgICAgICAgICAgICApOgogICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gaW4gYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCdCVUlMRF9UVVBMRScgbm90IGluIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfVFVQTEUnLCBhc20pCiAKICAgICAgICAgIyBCdWcgMTA1MzgxOTogIFR1cGxlIG9mIGNvbnN0YW50cyBtaXNpZGVudGlmaWVkIHdoZW4gcHJlc2VudGVkIHdpdGg6CiAgICAgICAgICMgLiAuIC4gb3Bjb2RlX3dpdGhfYXJnIDEwMCAgIHVuYXJ5X29wY29kZSAgIEJVSUxEX1RVUExFIDEgIC4gLiAuCkBAIC0xMjYsMTcgKzEyNSwxNyBAQAogICAgICAgICAgICAgKCdhID0gMTMgfCA3JywgJygxNSknKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IG9yCiAgICAgICAgICAgICApOgogICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gaW4gYXNtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJ0JJTkFSWV8nIG5vdCBpbiBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZXycsIGFzbSkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHVuZm9sZGFibGVzIGFyZSBza2lwcGVkCiAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9MisiYiInKQotICAgICAgICBzZWxmLmFzc2VydF8oJygyKScgaW4gYXNtKQotICAgICAgICBzZWxmLmFzc2VydF8oIignYicpIiBpbiBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJygyKScsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiKCdiJykiLCBhc20pCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCBsYXJnZSBzZXF1ZW5jZXMgZG8gbm90IHJlc3VsdCBmcm9tIGZvbGRpbmcKICAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnYT0ieCIqMTAwMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnKDEwMDApJyBpbiBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJygxMDAwKScsIGFzbSkKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfdW5hcnlvcHNfb25fY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCkBAIC0xNDUsOCArMTQ0LDggQEAKICAgICAgICAgICAgICgnfi0yJywgJygxKScpLCAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAogICAgICAgICApOgogICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gaW4gYXNtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJ1VOQVJZXycgbm90IGluIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTkFSWV8nLCBhc20pCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1bmZvbGRhYmxlcyBhcmUgc2tpcHBlZAogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCkBAIC0xNTQsMTYgKzE1MywxNiBAQAogICAgICAgICAgICAgKCd+ImFiYyInLCAiKCdhYmMnKSIpLCAgICAgICAgICAgICAgICAgICMgdW5hcnkgaW52ZXJ0CiAgICAgICAgICk6CiAgICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZWxlbSBpbiBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygnVU5BUllfJyBpbiBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignVU5BUllfJywgYXNtKQogCiAgICAgZGVmIHRlc3RfZWxpbV9leHRyYV9yZXR1cm4oc2VsZik6CiAgICAgICAgICMgUkVUVVJOIExPQURfQ09OU1QgTm9uZSBSRVRVUk4gIC0tPiAgUkVUVVJOCiAgICAgICAgIGRlZiBmKHgpOgogICAgICAgICAgICAgcmV0dXJuIHgKICAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdMT0FEX0NPTlNUJyBub3QgaW4gYXNtKQotICAgICAgICBzZWxmLmFzc2VydF8oJyhOb25lKScgbm90IGluIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9DT05TVCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignKE5vbmUpJywgYXNtKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMSkKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF90b19yZXR1cm4oc2VsZik6CkBAIC0xNzEsOCArMTcwLDggQEAKICAgICAgICAgZGVmIGYoY29uZCwgdHJ1ZV92YWx1ZSwgZmFsc2VfdmFsdWUpOgogICAgICAgICAgICAgcmV0dXJuIHRydWVfdmFsdWUgaWYgY29uZCBlbHNlIGZhbHNlX3ZhbHVlCiAgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnSlVNUF9GT1JXQVJEJyBub3QgaW4gYXNtKQotICAgICAgICBzZWxmLmFzc2VydF8oJ0pVTVBfQUJTT0xVVEUnIG5vdCBpbiBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9BQlNPTFVURScsIGFzbSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfYWZ0ZXJfcmV0dXJuMShzZWxmKToKQEAgLTE4Nyw4ICsxODYsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiA1CiAgICAgICAgICAgICByZXR1cm4gNgogICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydF8oJ0pVTVBfRk9SV0FSRCcgbm90IGluIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdKVU1QX0FCU09MVVRFJyBub3QgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCA2KQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjIoc2VsZik6CkBAIC0xOTcsNyArMTk2LDcgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgaWYgY29uZDE6IHJldHVybiA0CiAgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnSlVNUF9GT1JXQVJEJyBub3QgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCiAgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIG9uZSBqdW1wIGZvciB0aGUgd2hpbGUgbG9vcC4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnSlVNUF9BQlNPTFVURScpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMikKQEAgLTIwOCw3ICsyMDcsNyBAQAogICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAgICAgdGVzdF9jbGFzc2VzID0gKFRlc3RUcmFuZm9ybXMsKQogCi0gICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKICAgICAgICAgICAgICgiYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQiLCBTeW50YXhXYXJuaW5nKSk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weQppbmRleCA2OTFjODVhLi40MjNkMzMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weQpAQCAtMTksOCArMTksOCBAQAogY2xhc3MgUGVwMjQ3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgY2hlY2tfbW9kdWxlKHNlbGYsIG1vZHVsZSwga2V5PU5vbmUpOgotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihtb2R1bGUsICdkaWdlc3Rfc2l6ZScpKQotICAgICAgICBzZWxmLmFzc2VydF8obW9kdWxlLmRpZ2VzdF9zaXplIGlzIE5vbmUgb3IgbW9kdWxlLmRpZ2VzdF9zaXplID4gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnZGlnZXN0X3NpemUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vZHVsZS5kaWdlc3Rfc2l6ZSBpcyBOb25lIG9yIG1vZHVsZS5kaWdlc3Rfc2l6ZSA+IDApCiAKICAgICAgICAgaWYgbm90IGtleSBpcyBOb25lOgogICAgICAgICAgICAgb2JqMSA9IG1vZHVsZS5uZXcoa2V5KQpAQCAtMzksMjQgKzM5LDI0IEBACiAgICAgICAgICAgICBvYmozLnVwZGF0ZSgnc3RyaW5nJykKICAgICAgICAgICAgIGgyID0gb2JqMy5kaWdlc3QoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGgxLCBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoMSwgaDIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIob2JqMSwgJ2RpZ2VzdF9zaXplJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG9iajEsICdkaWdlc3Rfc2l6ZScpKQogCiAgICAgICAgIGlmIG5vdCBtb2R1bGUuZGlnZXN0X3NpemUgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9iajEuZGlnZXN0X3NpemUsIG1vZHVsZS5kaWdlc3Rfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqMS5kaWdlc3Rfc2l6ZSwgbW9kdWxlLmRpZ2VzdF9zaXplKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9iajEuZGlnZXN0X3NpemUsIGxlbihoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqMS5kaWdlc3Rfc2l6ZSwgbGVuKGgxKSkKICAgICAgICAgb2JqMS51cGRhdGUoJ3N0cmluZycpCiAgICAgICAgIG9ial9jb3B5ID0gb2JqMS5jb3B5KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob2JqMS5kaWdlc3QoKSwgb2JqX2NvcHkuZGlnZXN0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9iajEuaGV4ZGlnZXN0KCksIG9ial9jb3B5LmhleGRpZ2VzdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iajEuZGlnZXN0KCksIG9ial9jb3B5LmRpZ2VzdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iajEuaGV4ZGlnZXN0KCksIG9ial9jb3B5LmhleGRpZ2VzdCgpKQogCiAgICAgICAgIGRpZ2VzdCwgaGV4ZGlnZXN0ID0gb2JqMS5kaWdlc3QoKSwgb2JqMS5oZXhkaWdlc3QoKQogICAgICAgICBoZDIgPSAiIgogICAgICAgICBmb3IgYnl0ZSBpbiBkaWdlc3Q6CiAgICAgICAgICAgICBoZDIgKz0gJyUwMngnICUgb3JkKGJ5dGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhkMiwgaGV4ZGlnZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhkMiwgaGV4ZGlnZXN0KQogCiAgICAgZGVmIHRlc3RfbWQ1KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX21vZHVsZShtZDUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CmluZGV4IGNiNjIxMGIuLjZjOGEyNWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CkBAIC0xLDIyICsxLDU4IEBACiAjIFRlc3QgdGhlIFVuaWNvZGUgdmVyc2lvbnMgb2Ygbm9ybWFsIGZpbGUgZnVuY3Rpb25zCiAjIG9wZW4sIG9zLm9wZW4sIG9zLnN0YXQuIG9zLmxpc3RkaXIsIG9zLnJlbmFtZSwgb3MucmVtb3ZlLCBvcy5ta2Rpciwgb3MuY2hkaXIsIG9zLnJtZGlyCiBpbXBvcnQgc3lzLCBvcywgdW5pdHRlc3QKK2Zyb20gdW5pY29kZWRhdGEgaW1wb3J0IG5vcm1hbGl6ZQogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgotICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZCwgInRlc3Qgd29ya3Mgb25seSBvbiBOVCsiCiAKIGZpbGVuYW1lcyA9IFsKLSAgICAnYWJjJywKLSAgICB1J2FzY2lpJywKLSAgICB1J0dyXHhmY1x4ZGYtR290dCcsCi0gICAgdSdcdTAzOTNcdTAzYjVcdTAzYjlcdTAzYWMtXHUwM2MzXHUwM2IxXHUwM2MyJywKLSAgICB1J1x1MDQxN1x1MDQzNFx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQ0MVx1MDQ0Mlx1MDQzMlx1MDQ0M1x1MDQzOVx1MDQ0Mlx1MDQzNScsCi0gICAgdSdcdTMwNmJcdTMwN2RcdTMwOTMnLAotICAgIHUnXHUwNWQ0XHUwNWU5XHUwNWU3XHUwNWU2XHUwNWU1XHUwNWUxJywKLSAgICB1J1x1NjZlOFx1NjZlOVx1NjZlYicsCi0gICAgdSdcdTY2ZThcdTA1ZTlcdTMwOTNcdTA0MzRcdTAzOTNceGRmJywKKyAgICAnMV9hYmMnLAorICAgIHUnMl9hc2NpaScsCisgICAgdSczX0dyXHhmY1x4ZGYtR290dCcsCisgICAgdSc0X1x1MDM5M1x1MDNiNVx1MDNiOVx1MDNhYy1cdTAzYzNcdTAzYjFcdTAzYzInLAorICAgIHUnNV9cdTA0MTdcdTA0MzRcdTA0NDBcdTA0MzBcdTA0MzJcdTA0NDFcdTA0NDJcdTA0MzJcdTA0NDNcdTA0MzlcdTA0NDJcdTA0MzUnLAorICAgIHUnNl9cdTMwNmJcdTMwN2RcdTMwOTMnLAorICAgIHUnN19cdTA1ZDRcdTA1ZTlcdTA1ZTdcdTA1ZTZcdTA1ZTVcdTA1ZTEnLAorICAgIHUnOF9cdTY2ZThcdTY2ZTlcdTY2ZWInLAorICAgIHUnOV9cdTY2ZThcdTA1ZTlcdTMwOTNcdTA0MzRcdTAzOTNceGRmJywKKyAgICAjIFNwZWNpZmljIGNvZGUgcG9pbnRzOiBmbiwgTkZDKGZuKSBhbmQgTkZLQyhmbikgYWxsIGRpZmZlcmVudHMKKyAgICB1JzEwX1x1MWZlZVx1MWZmZCcsCiAgICAgXQogCisjIE1hYyBPUyBYIGRlY29tcG9zZXMgVW5pY29kZSBuYW1lcywgdXNpbmcgTm9ybWFsIEZvcm0gRC4KKyMgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vbWFjL2xpYnJhcnkvcWEvcWEyMDAxL3FhMTE3My5odG1sCisjICJIb3dldmVyLCBtb3N0IHZvbHVtZSBmb3JtYXRzIGRvIG5vdCBmb2xsb3cgdGhlIGV4YWN0IHNwZWNpZmljYXRpb24gZm9yCisjIHRoZXNlIG5vcm1hbCBmb3Jtcy4gIEZvciBleGFtcGxlLCBIRlMgUGx1cyB1c2VzIGEgdmFyaWFudCBvZiBOb3JtYWwgRm9ybSBECisjIGluIHdoaWNoIFUrMjAwMCB0aHJvdWdoIFUrMkZGRiwgVStGOTAwIHRocm91Z2ggVStGQUZGLCBhbmQgVSsyRjgwMCB0aHJvdWdoCisjIFUrMkZBRkYgYXJlIG5vdCBkZWNvbXBvc2VkLiIKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKyAgICBmaWxlbmFtZXMuZXh0ZW5kKFsKKyAgICAgICAgIyBTcGVjaWZpYyBjb2RlIHBvaW50czogTkZDKGZuKSwgTkZEKGZuKSwgTkZLQyhmbikgYW5kIE5GS0QoZm4pIGFsbCBkaWZmZXJlbnRzCisgICAgICAgIHUnMTFfXHUwMzg1XHUwM2QzXHUwM2Q0JywKKyAgICAgICAgdScxMl9cdTAwYThcdTAzMDFcdTAzZDJcdTAzMDFcdTAzZDJcdTAzMDgnLCAgICAjID09IE5GRCh1J1x1MDM4NVx1MDNkM1x1MDNkNCcpCisgICAgICAgIHUnMTNfXHUwMDIwXHUwMzA4XHUwMzAxXHUwMzhlXHUwM2FiJywgICAgICAgICAgIyA9PSBORktDKHUnXHUwMzg1XHUwM2QzXHUwM2Q0JykKKyAgICAgICAgdScxNF9cdTFlOWJcdTFmYzFcdTFmY2RcdTFmY2VcdTFmY2ZcdTFmZGRcdTFmZGVcdTFmZGZcdTFmZWQnLAorCisgICAgICAgICMgU3BlY2lmaWMgY29kZSBwb2ludHM6IGZuLCBORkMoZm4pIGFuZCBORktDKGZuKSBhbGwgZGlmZmVyZW50cworICAgICAgICB1JzE1X1x1MWZlZVx1MWZmZFx1ZmFkMScsCisgICAgICAgIHUnMTZfXHUyMDAwXHUyMDAwXHUyMDAwQScsCisgICAgICAgIHUnMTdfXHUyMDAxXHUyMDAxXHUyMDAxQScsCisgICAgICAgIHUnMThfXHUyMDAzXHUyMDAzXHUyMDAzQScsICMgPT0gTkZDKHUnXHUyMDAxXHUyMDAxXHUyMDAxQScpCisgICAgICAgIHUnMTlfXHUwMDIwXHUwMDIwXHUwMDIwQScsICMgdSdcdTAwMjAnID09IHUnICcgPT0gTkZLQyh1J1x1MjAwMCcpID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBORktDKHUnXHUyMDAxJykgPT0gTkZLQyh1J1x1MjAwMycpCitdKQorCisKKyMgSXMgaXQgVW5pY29kZS1mcmllbmRseT8KK2lmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgorICAgIGZzZW5jb2RpbmcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkgb3Igc3lzLmdldGRlZmF1bHRlbmNvZGluZygpCisgICAgdHJ5OgorICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICBuYW1lLmVuY29kZShmc2VuY29kaW5nKQorICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvbmx5IE5UKyBhbmQgc3lzdGVtcyB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuaWNvZGUtZnJpZW5kbHkgZmlsZXN5c3RlbSBlbmNvZGluZyIpCisKKwogIyBEZXN0cm95IGRpcmVjdG9yeSBkaXJuYW1lIGFuZCBhbGwgZmlsZXMgdW5kZXIgaXQsIHRvIG9uZSBsZXZlbC4KIGRlZiBkZWx0cmVlKGRpcm5hbWUpOgogICAgICMgRG9uJ3QgaGlkZSBsZWdpdGltYXRlIGVycm9yczogIGlmIG9uZSBvZiB0aGVzZSBzdWNrZXJzIGV4aXN0cywgaXQncwpAQCAtMjcsMzUgKzYzLDQ1IEBACiAgICAgICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKGRpcm5hbWUsIGZuYW1lKSkKICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKIAorCiBjbGFzcyBVbmljb2RlRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBmaWxlcyA9IFtvcy5wYXRoLmpvaW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgZikgZm9yIGYgaW4gZmlsZW5hbWVzXQorICAgIGZpbGVzID0gc2V0KGZpbGVuYW1lcykKKyAgICBub3JtYWxfZm9ybSA9IE5vbmUKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbGVzID0gc2V0KCkKICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5maWxlczoKLSAgICAgICAgICAgIGYgPSBvcGVuKG5hbWUsICd3JykKLSAgICAgICAgICAgIGYud3JpdGUoKG5hbWUrJ1xuJykuZW5jb2RlKCJ1dGYtOCIpKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKHRlc3Rfc3VwcG9ydC5URVNURk4sIHNlbGYubm9ybShuYW1lKSkKKyAgICAgICAgICAgIHdpdGggb3BlbihuYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgobmFtZSsnXG4nKS5lbmNvZGUoInV0Zi04IikpCiAgICAgICAgICAgICBvcy5zdGF0KG5hbWUpCisgICAgICAgICAgICBmaWxlcy5hZGQobmFtZSkKKyAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGRlbHRyZWUodGVzdF9zdXBwb3J0LlRFU1RGTikKIAorICAgIGRlZiBub3JtKHNlbGYsIHMpOgorICAgICAgICBpZiBzZWxmLm5vcm1hbF9mb3JtIGFuZCBpc2luc3RhbmNlKHMsIHVuaWNvZGUpOgorICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShzZWxmLm5vcm1hbF9mb3JtLCBzKQorICAgICAgICByZXR1cm4gcworCiAgICAgZGVmIF9hcHBseV9mYWlsdXJlKHNlbGYsIGZuLCBmaWxlbmFtZSwgZXhwZWN0ZWRfZXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBjaGVja19mbl9pbl9leGNlcHRpb24gPSBUcnVlKToKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGVkX2V4Y2VwdGlvbikgYXMgYzoKICAgICAgICAgICAgIGZuKGZpbGVuYW1lKQotICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQoIkV4cGVjdGVkIHRvIGZhaWwgY2FsbGluZyAnJXMoJXIpJyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZm4uX19uYW1lX18sIGZpbGVuYW1lKSkKLSAgICAgICAgZXhjZXB0IGV4cGVjdGVkX2V4Y2VwdGlvbiwgZGV0YWlsczoKLSAgICAgICAgICAgIGlmIGNoZWNrX2ZuX2luX2V4Y2VwdGlvbiBhbmQgZGV0YWlscy5maWxlbmFtZSAhPSBmaWxlbmFtZToKLSAgICAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCgiRnVuY3Rpb24gJyVzKCVyKSBmYWlsZWQgd2l0aCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIGZpbGVuYW1lIGluIHRoZSBleGNlcHRpb246ICVyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZm4uX19uYW1lX18sIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy5maWxlbmFtZSkpCisgICAgICAgIGV4Y19maWxlbmFtZSA9IGMuZXhjZXB0aW9uLmZpbGVuYW1lCisgICAgICAgICMgdGhlICJmaWxlbmFtZSIgZXhjZXB0aW9uIGF0dHJpYnV0ZSBtYXkgYmUgZW5jb2RlZAorICAgICAgICBpZiBpc2luc3RhbmNlKGV4Y19maWxlbmFtZSwgc3RyKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgaWYgY2hlY2tfZm5faW5fZXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNfZmlsZW5hbWUsIGZpbGVuYW1lLCAiRnVuY3Rpb24gJyVzKCVyKSBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCBiYWQgZmlsZW5hbWUgaW4gdGhlIGV4Y2VwdGlvbjogJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZuLl9fbmFtZV9fLCBmaWxlbmFtZSwgZXhjX2ZpbGVuYW1lKSkKIAogICAgIGRlZiB0ZXN0X2ZhaWx1cmVzKHNlbGYpOgogICAgICAgICAjIFBhc3Mgbm9uLWV4aXN0aW5nIFVuaWNvZGUgZmlsZW5hbWVzIGFsbCBvdmVyIHRoZSBwbGFjZS4KQEAgLTc2LDM5ICsxMjIsODkgQEAKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgb3Muc3RhdChuYW1lKQogCisgICAgIyBTa2lwIHRoZSB0ZXN0IG9uIGRhcndpbiwgYmVjYXVzZSBkYXJ3aW4gZG9lcyBub3JtYWxpemUgdGhlIGZpbGVuYW1lIHRvCisgICAgIyBORkQgKGEgdmFyaWFudCBvZiBVbmljb2RlIE5GRCBmb3JtKS4gTm9ybWFsaXplIHRoZSBmaWxlbmFtZSB0byBORkMsIE5GS0MsCisgICAgIyBORktEIGluIFB5dGhvbiBpcyB1c2VsZXNzLCBiZWNhdXNlIGRhcndpbiB3aWxsIG5vcm1hbGl6ZSBpdCBsYXRlciBhbmQgc28KKyAgICAjIG9wZW4oKSwgb3Muc3RhdCgpLCBldGMuIGRvbid0IHJhaXNlIGFueSBleGNlcHRpb24uCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicsICdpcnJldmVsYW50IHRlc3Qgb24gTWFjIE9TIFgnKQorICAgIGRlZiB0ZXN0X25vcm1hbGl6ZShzZWxmKToKKyAgICAgICAgZmlsZXMgPSBzZXQoZiBmb3IgZiBpbiBzZWxmLmZpbGVzIGlmIGlzaW5zdGFuY2UoZiwgdW5pY29kZSkpCisgICAgICAgIG90aGVycyA9IHNldCgpCisgICAgICAgIGZvciBuZiBpbiBzZXQoWydORkMnLCAnTkZEJywgJ05GS0MnLCAnTkZLRCddKToKKyAgICAgICAgICAgIG90aGVycyB8PSBzZXQobm9ybWFsaXplKG5mLCBmaWxlKSBmb3IgZmlsZSBpbiBmaWxlcykKKyAgICAgICAgb3RoZXJzIC09IGZpbGVzCisgICAgICAgIGZvciBuYW1lIGluIG90aGVyczoKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3BlbiwgbmFtZSwgSU9FcnJvcikKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3Muc3RhdCwgbmFtZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3MuY2hkaXIsIG5hbWUsIE9TRXJyb3IpCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLnJtZGlyLCBuYW1lLCBPU0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5yZW1vdmUsIG5hbWUsIE9TRXJyb3IpCisgICAgICAgICAgICAjIGxpc3RkaXIgbWF5IGFwcGVuZCBhIHdpbGRjYXJkIHRvIHRoZSBmaWxlbmFtZSwgc28gZG9udCBjaGVjaworICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5saXN0ZGlyLCBuYW1lLCBPU0Vycm9yLCBGYWxzZSkKKworICAgICMgU2tpcCB0aGUgdGVzdCBvbiBkYXJ3aW4sIGJlY2F1c2UgZGFyd2luIHVzZXMgYSBub3JtYWxpemF0aW9uIGRpZmZlcmVudAorICAgICMgdGhhbiBQeXRob24gTkZEIG5vcm1hbGl6YXRpb246IGZpbGVuYW1lcyBhcmUgZGlmZmVyZW50IGV2ZW4gaWYgd2UgdXNlCisgICAgIyBQeXRob24gTkZEIG5vcm1hbGl6YXRpb24uCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicsICdpcnJldmVsYW50IHRlc3Qgb24gTWFjIE9TIFgnKQogICAgIGRlZiB0ZXN0X2xpc3RkaXIoc2VsZik6CisgICAgICAgIHNmMCA9IHNldChzZWxmLmZpbGVzKQogICAgICAgICBmMSA9IG9zLmxpc3RkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgZjIgPSBvcy5saXN0ZGlyKHVuaWNvZGUodGVzdF9zdXBwb3J0LlRFU1RGTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpKSkKLSAgICAgICAgc2YyID0gc2V0KHUiXFwiLmpvaW4oKHVuaWNvZGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIGYpKQotICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gZjIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihmMSksIGxlbihzZWxmLmZpbGVzKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2YyLCBzZXQoc2VsZi5maWxlcykpCisgICAgICAgIHNmMiA9IHNldChvcy5wYXRoLmpvaW4odW5pY29kZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgZikgZm9yIGYgaW4gZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2YwLCBzZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGYxKSwgbGVuKGYyKSkKIAogICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5maWxlczoKLSAgICAgICAgICAgIG9zLnJlbmFtZShuYW1lLCJ0bXAiKQotICAgICAgICAgICAgb3MucmVuYW1lKCJ0bXAiLG5hbWUpCisgICAgICAgICAgICBvcy5yZW5hbWUobmFtZSwgInRtcCIpCisgICAgICAgICAgICBvcy5yZW5hbWUoInRtcCIsIG5hbWUpCiAKICAgICBkZWYgdGVzdF9kaXJlY3Rvcnkoc2VsZik6Ci0gICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4odGVzdF9zdXBwb3J0LlRFU1RGTix1J0dyXHhmY1x4ZGYtXHU2NmU4XHU2NmU5XHU2NmViJykKKyAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguam9pbih0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnR3JceGZjXHhkZi1cdTY2ZThcdTY2ZTlcdTY2ZWInKQogICAgICAgICBmaWxlbmFtZSA9IHUnXHhkZi1cdTY2ZThcdTY2ZTlcdTY2ZWInCiAgICAgICAgIG9sZHdkID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKICAgICAgICAgb3MuY2hkaXIoZGlybmFtZSkKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3JykKLSAgICAgICAgZi53cml0ZSgoZmlsZW5hbWUgKyAnXG4nKS5lbmNvZGUoInV0Zi04IikpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBvcy5hY2Nlc3MoZmlsZW5hbWUsb3MuUl9PSykKLSAgICAgICAgb3MucmVtb3ZlKGZpbGVuYW1lKQotICAgICAgICBvcy5jaGRpcihvbGR3ZCkKLSAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgoZmlsZW5hbWUgKyAnXG4nKS5lbmNvZGUoInV0Zi04IikpCisgICAgICAgICAgICBvcy5hY2Nlc3MoZmlsZW5hbWUsb3MuUl9PSykKKyAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZHdkKQorICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKworCitjbGFzcyBVbmljb2RlTkZDRmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgorICAgIG5vcm1hbF9mb3JtID0gJ05GQycKKworCitjbGFzcyBVbmljb2RlTkZERmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgorICAgIG5vcm1hbF9mb3JtID0gJ05GRCcKKworCitjbGFzcyBVbmljb2RlTkZLQ0ZpbGVUZXN0cyhVbmljb2RlRmlsZVRlc3RzKToKKyAgICBub3JtYWxfZm9ybSA9ICdORktDJworCisKK2NsYXNzIFVuaWNvZGVORktERmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgorICAgIG5vcm1hbF9mb3JtID0gJ05GS0QnCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRyeToKLSAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChVbmljb2RlRmlsZVRlc3RzKQorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICAgICAgVW5pY29kZUZpbGVUZXN0cywKKyAgICAgICAgICAgIFVuaWNvZGVORkNGaWxlVGVzdHMsCisgICAgICAgICAgICBVbmljb2RlTkZERmlsZVRlc3RzLAorICAgICAgICAgICAgVW5pY29kZU5GS0NGaWxlVGVzdHMsCisgICAgICAgICAgICBVbmljb2RlTkZLREZpbGVUZXN0cywKKyAgICAgICAgKQogICAgIGZpbmFsbHk6CiAgICAgICAgIGRlbHRyZWUodGVzdF9zdXBwb3J0LlRFU1RGTikKIAorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMzUyLnB5CmluZGV4IDNmMjNhZjUuLjg4YjMxMzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMzUyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMzUyLnB5CkBAIC0zMSw3ICszMSw3IEBACiAgICAgaW5oZXJpdGFuY2UgaGllcmFyY2h5KSIiIgogCiAgICAgZGVmIHRlc3RfYnVpbHRpbnNfbmV3X3N0eWxlKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhFeGNlcHRpb24sIG9iamVjdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEV4Y2VwdGlvbiwgb2JqZWN0KSkKIAogICAgIEBpZ25vcmVfZGVwcmVjYXRpb25fd2FybmluZ3MKICAgICBkZWYgdmVyaWZ5X2luc3RhbmNlX2ludGVyZmFjZShzZWxmLCBpbnMpOgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgIGxhc3RfZXhjID0gZ2V0YXR0cihfX2J1aWx0aW5fXywgc3VwZXJjbGFzc19uYW1lKQogICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiYmFzZSBjbGFzcyAlcyBub3QgYSBidWlsdC1pbiIgJSBzdXBlcmNsYXNzX25hbWUpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3VwZXJjbGFzc19uYW1lIGluIGV4Y19zZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN1cGVyY2xhc3NfbmFtZSwgZXhjX3NldCkKICAgICAgICAgICAgIGV4Y19zZXQuZGlzY2FyZChzdXBlcmNsYXNzX25hbWUpCiAgICAgICAgICAgICBzdXBlcmNsYXNzZXMgPSBbXSAgIyBMb29wIHdpbGwgaW5zZXJ0IGJhc2UgZXhjZXB0aW9uCiAgICAgICAgICAgICBsYXN0X2RlcHRoID0gMApAQCAtNzgsMjcgKzc4LDI3IEBACiAgICAgICAgICAgICAgICAgZWxpZiBsYXN0X2RlcHRoID4gZGVwdGg6CiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHN1cGVyY2xhc3Nlc1stMV1bMF0gPj0gZGVwdGg6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcmNsYXNzZXMucG9wKCkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhleGMsIHN1cGVyY2xhc3Nlc1stMV1bMV0pLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGV4Yywgc3VwZXJjbGFzc2VzWy0xXVsxXSksCiAgICAgICAgICAgICAgICAgIiVzIGlzIG5vdCBhIHN1YmNsYXNzIG9mICVzIiAlIChleGMuX19uYW1lX18sCiAgICAgICAgICAgICAgICAgICAgIHN1cGVyY2xhc3Nlc1stMV1bMV0uX19uYW1lX18pKQogICAgICAgICAgICAgICAgIHRyeTogICMgU29tZSBleGNlcHRpb25zIHJlcXVpcmUgYXJndW1lbnRzOyBqdXN0IHNraXAgdGhlbQogICAgICAgICAgICAgICAgICAgICBzZWxmLnZlcmlmeV9pbnN0YW5jZV9pbnRlcmZhY2UoZXhjKCkpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleGNfbmFtZSBpbiBleGNfc2V0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhjX25hbWUsIGV4Y19zZXQpCiAgICAgICAgICAgICAgICAgZXhjX3NldC5kaXNjYXJkKGV4Y19uYW1lKQogICAgICAgICAgICAgICAgIGxhc3RfZXhjID0gZXhjCiAgICAgICAgICAgICAgICAgbGFzdF9kZXB0aCA9IGRlcHRoCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpbmhlcml0YW5jZV90cmVlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKGV4Y19zZXQpLCAwLCAiJXMgbm90IGFjY291bnRlZCBmb3IiICUgZXhjX3NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXhjX3NldCksIDAsICIlcyBub3QgYWNjb3VudGVkIGZvciIgJSBleGNfc2V0KQogCiAgICAgaW50ZXJmYWNlX3Rlc3RzID0gKCJsZW5ndGgiLCAiYXJncyIsICJtZXNzYWdlIiwgInN0ciIsICJ1bmljb2RlIiwgInJlcHIiLAogICAgICAgICAgICAgImluZGV4aW5nIikKIAogICAgIGRlZiBpbnRlcmZhY2VfdGVzdF9kcml2ZXIoc2VsZiwgcmVzdWx0cyk6CiAgICAgICAgIGZvciB0ZXN0X25hbWUsIChnaXZlbiwgZXhwZWN0ZWQpIGluIHppcChzZWxmLmludGVyZmFjZV90ZXN0cywgcmVzdWx0cyk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChnaXZlbiwgZXhwZWN0ZWQsICIlczogJXMgIT0gJXMiICUgKHRlc3RfbmFtZSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2l2ZW4sIGV4cGVjdGVkLCAiJXM6ICVzICE9ICVzIiAlICh0ZXN0X25hbWUsCiAgICAgICAgICAgICAgICAgZ2l2ZW4sIGV4cGVjdGVkKSkKIAogICAgIEBpZ25vcmVfZGVwcmVjYXRpb25fd2FybmluZ3MKQEAgLTIxNSwyOCArMjE1LDE5IEBACiAgICAgICAgICAgICB3YXJuaW5ncy5yZXNldHdhcm5pbmdzKCkKICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJlcnJvciIpCiAgICAgICAgICAgICBzdHJfZXhjID0gInNwYW0iCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZyk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICByYWlzZSBTdGFuZGFyZEVycm9yCiAgICAgICAgICAgICAgICAgZXhjZXB0IHN0cl9leGM6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBEZXByZWNhdGlvbldhcm5pbmc6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXRjaGluZyBhIHN0cmluZyBleGNlcHRpb24gZGlkIG5vdCByYWlzZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlcHJlY2F0aW9uV2FybmluZyIpCisKICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZXZlbiBpZiB0aGUgc3RyaW5nIGV4Y2VwdGlvbiBpcyBsaXN0ZWQgaW4gYSB0dXBsZQogICAgICAgICAgICAgIyB0aGF0IGEgd2FybmluZyBpcyByYWlzZWQuCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZyk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICByYWlzZSBTdGFuZGFyZEVycm9yCiAgICAgICAgICAgICAgICAgZXhjZXB0IChBc3NlcnRpb25FcnJvciwgc3RyX2V4Yyk6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBEZXByZWNhdGlvbldhcm5pbmc6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXRjaGluZyBhIHN0cmluZyBleGNlcHRpb24gc3BlY2lmaWVkIGluIGEgdHVwbGUgZGlkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IHJhaXNlIERlcHJlY2F0aW9uV2FybmluZyIpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkgYi9MaWIvdGVzdC90ZXN0X3BpY2tsZS5weQppbmRleCBmYjEwZmZlLi42YzgzODExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BpY2tsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BpY2tsZS5weQpAQCAtNiw2ICs2LDcgQEAKIGZyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGlja2xlVGVzdHMKIGZyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGlja2xlTW9kdWxlVGVzdHMKIGZyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGVyc2lzdGVudFBpY2tsZXJUZXN0cworZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMKIAogY2xhc3MgUGlja2xlVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cywgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cyk6CiAKQEAgLTYwLDExICs2MSwxOCBAQAogICAgICAgICB1ID0gUGVyc1VucGlja2xlcihmKQogICAgICAgICByZXR1cm4gdS5sb2FkKCkKIAorY2xhc3MgUGlja2xlclVucGlja2xlck9iamVjdFRlc3RzKEFic3RyYWN0UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzKToKKworICAgIHBpY2tsZXJfY2xhc3MgPSBwaWNrbGUuUGlja2xlcgorICAgIHVucGlja2xlcl9jbGFzcyA9IHBpY2tsZS5VbnBpY2tsZXIKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKICAgICAgICAgUGlja2xlVGVzdHMsCiAgICAgICAgIFBpY2tsZXJUZXN0cywKLSAgICAgICAgUGVyc1BpY2tsZXJUZXN0cworICAgICAgICBQZXJzUGlja2xlclRlc3RzLAorICAgICAgICBQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMsCiAgICAgKQogICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdChwaWNrbGUpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlwZXMucHkgYi9MaWIvdGVzdC90ZXN0X3BpcGVzLnB5CmluZGV4IDA3MmQwMjMuLmM4YjhiZTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGlwZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waXBlcy5weQpAQCAtMiwxMCArMiwxMCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmssIFRlc3RTa2lwcGVkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rLCByZWFwX2NoaWxkcmVuCiAKIGlmIG9zLm5hbWUgIT0gJ3Bvc2l4JzoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCgncGlwZXMgbW9kdWxlIG9ubHkgd29ya3Mgb24gcG9zaXgnKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdwaXBlcyBtb2R1bGUgb25seSB3b3JrcyBvbiBwb3NpeCcpCiAKIFRFU1RGTjIgPSBURVNURk4gKyAiMiIKIApAQCAtMjMsNDMgKzIzLDU1IEBACiAgICAgICAgIGYgPSB0Lm9wZW4oVEVTVEZOLCAndycpCiAgICAgICAgIGYud3JpdGUoJ2hlbGxvIHdvcmxkICMxJykKICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlbihURVNURk4pLnJlYWQoKSwgJ0hFTExPIFdPUkxEICMxJykKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdIRUxMTyBXT1JMRCAjMScpCiAKICAgICBkZWYgdGVzdFNpbXBsZVBpcGUyKHNlbGYpOgotICAgICAgICBmaWxlKFRFU1RGTiwgJ3cnKS53cml0ZSgnaGVsbG8gd29ybGQgIzInKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdoZWxsbyB3b3JsZCAjMicpCiAgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCiAgICAgICAgIHQuYXBwZW5kKHNfY29tbWFuZCArICcgPCAkSU4gPiAkT1VUJywgcGlwZXMuRklMRUlOX0ZJTEVPVVQpCiAgICAgICAgIHQuY29weShURVNURk4sIFRFU1RGTjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlbihURVNURk4yKS5yZWFkKCksICdIRUxMTyBXT1JMRCAjMicpCisgICAgICAgIHdpdGggb3BlbihURVNURk4yKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ0hFTExPIFdPUkxEICMyJykKIAogICAgIGRlZiB0ZXN0U2ltcGxlUGlwZTMoc2VsZik6Ci0gICAgICAgIGZpbGUoVEVTVEZOLCAndycpLndyaXRlKCdoZWxsbyB3b3JsZCAjMicpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ2hlbGxvIHdvcmxkICMyJykKICAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKICAgICAgICAgdC5hcHBlbmQoc19jb21tYW5kICsgJyA8ICRJTicsIHBpcGVzLkZJTEVJTl9TVERPVVQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5vcGVuKFRFU1RGTiwgJ3InKS5yZWFkKCksICdIRUxMTyBXT1JMRCAjMicpCisgICAgICAgIHdpdGggdC5vcGVuKFRFU1RGTiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ0hFTExPIFdPUkxEICMyJykKIAogICAgIGRlZiB0ZXN0RW1wdHlQaXBlbGluZTEoc2VsZik6CiAgICAgICAgICMgY29weSB0aHJvdWdoIGVtcHR5IHBpcGUKICAgICAgICAgZCA9ICdlbXB0eSBwaXBlbGluZSB0ZXN0IENPUFknCi0gICAgICAgIGZpbGUoVEVTVEZOLCAndycpLndyaXRlKGQpCi0gICAgICAgIGZpbGUoVEVTVEZOMiwgJ3cnKS53cml0ZSgnJykKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOMiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnJykKICAgICAgICAgdD1waXBlcy5UZW1wbGF0ZSgpCiAgICAgICAgIHQuY29weShURVNURk4sIFRFU1RGTjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlbihURVNURk4yKS5yZWFkKCksIGQpCisgICAgICAgIHdpdGggb3BlbihURVNURk4yKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZCkKIAogICAgIGRlZiB0ZXN0RW1wdHlQaXBlbGluZTIoc2VsZik6CiAgICAgICAgICMgcmVhZCB0aHJvdWdoIGVtcHR5IHBpcGUKICAgICAgICAgZCA9ICdlbXB0eSBwaXBlbGluZSB0ZXN0IFJFQUQnCi0gICAgICAgIGZpbGUoVEVTVEZOLCAndycpLndyaXRlKGQpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZCkKICAgICAgICAgdD1waXBlcy5UZW1wbGF0ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5vcGVuKFRFU1RGTiwgJ3InKS5yZWFkKCksIGQpCisgICAgICAgIHdpdGggdC5vcGVuKFRFU1RGTiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZCkKIAogICAgIGRlZiB0ZXN0RW1wdHlQaXBlbGluZTMoc2VsZik6CiAgICAgICAgICMgd3JpdGUgdGhyb3VnaCBlbXB0eSBwaXBlCiAgICAgICAgIGQgPSAnZW1wdHkgcGlwZWxpbmUgdGVzdCBXUklURScKICAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKLSAgICAgICAgdC5vcGVuKFRFU1RGTiwgJ3cnKS53cml0ZShkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oVEVTVEZOKS5yZWFkKCksIGQpCisgICAgICAgIHdpdGggdC5vcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZCkKIAogICAgIGRlZiB0ZXN0UXVvdGluZyhzZWxmKToKICAgICAgICAgc2FmZXVucXVvdGVkID0gc3RyaW5nLmFzY2lpX2xldHRlcnMgKyBzdHJpbmcuZGlnaXRzICsgJ0AlXy0rPTosLi8nCkBAIC0xODYsNiArMTk4LDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChTaW1wbGVQaXBlVGVzdHMpCisgICAgcmVhcF9jaGlsZHJlbigpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtnLnB5IGIvTGliL3Rlc3QvdGVzdF9wa2cucHkKaW5kZXggM2E5NTRjYS4uNmZiM2YzZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2cucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wa2cucHkKQEAgLTUxLDcgKzUxLDggQEAKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c3BhdGgKLSAgICAgICAgY2xlYW5vdXQoc2VsZi5yb290KQorICAgICAgICBpZiBzZWxmLnJvb3Q6ICMgT25seSBjbGVhbiBpZiB0aGUgdGVzdCB3YXMgYWN0dWFsbHkgcnVuCisgICAgICAgICAgICBjbGVhbm91dChzZWxmLnJvb3QpCiAKICAgICAgICAgIyBkZWxldGUgYWxsIG1vZHVsZXMgY29uY2VybmluZyB0aGUgdGVzdGVkIGhpZWFyY2h5CiAgICAgICAgIGlmIHNlbGYucGtnbmFtZToKQEAgLTEwMSw5ICsxMDIsNiBAQAogICAgICAgICBdCiAgICAgICAgIHNlbGYubWtoaWVyKGhpZXIpCiAKLSAgICAgICAgaW1wb3J0IHQyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuX19kb2NfXywgImRvYyBmb3IgdDIiKQotCiAgICAgICAgIGltcG9ydCB0Mi5zdWIKICAgICAgICAgaW1wb3J0IHQyLnN1Yi5zdWJzdWIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5fX25hbWVfXywgInQyIikKQEAgLTEyNiw3ICsxMjQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YnN1Yi5fX25hbWVfXywgInQyLnN1Yi5zdWJzdWIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yi5zdWJzdWIuX19uYW1lX18sICJ0Mi5zdWIuc3Vic3ViIikKICAgICAgICAgZm9yIG5hbWUgaW4gWydzcGFtJywgJ3N1YicsICdzdWJzdWInLCAndDInXToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhsb2NhbHMoKVsibmFtZSJdLCAiRmFpbGVkIHRvIGltcG9ydCAlcyIgJSBuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2FscygpWyJuYW1lIl0sICJGYWlsZWQgdG8gaW1wb3J0ICVzIiAlIG5hbWUpCiAKICAgICAgICAgaW1wb3J0IHQyLnN1YgogICAgICAgICBpbXBvcnQgdDIuc3ViLnN1YnN1YgpAQCAtMTM2LDcgKzEzNCw3IEBACiAKICAgICAgICAgcyA9ICIiIgogICAgICAgICAgICAgZnJvbSB0MiBpbXBvcnQgKgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpcigpLCBbJ3NlbGYnLCAnc3ViJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlyKCksIFsnc2VsZicsICdzdWInXSkKICAgICAgICAgICAgICIiIgogICAgICAgICBzZWxmLnJ1bl9jb2RlKHMpCiAKQEAgLTI1NCwyNiArMjUyLDM3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0YXMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nXSkKLSAgICAgICAgc2VsZi5mYWlsSWYodDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCiAgICAgICAgIGZyb20gdDcgaW1wb3J0IHN1YiBhcyBzdWJwYXIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnBhcikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX25hbWVfXycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXyddKQotICAgICAgICBzZWxmLmZhaWxJZih0NykKLSAgICAgICAgc2VsZi5mYWlsSWYoc3ViKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKICAgICAgICAgZnJvbSB0Ny5zdWIgaW1wb3J0IHN1YnN1YiBhcyBzdWJzdWJzdWIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnN1YnN1YikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX25hbWVfXycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ3NwYW0nXSkKLSAgICAgICAgc2VsZi5mYWlsSWYodDcpCi0gICAgICAgIHNlbGYuZmFpbElmKHN1YikKLSAgICAgICAgc2VsZi5mYWlsSWYoc3Vic3ViKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWJzdWIpCiAgICAgICAgIGZyb20gdDcuc3ViLnN1YnN1YiBpbXBvcnQgc3BhbSBhcyBoYW0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW0sIDEpCi0gICAgICAgIHNlbGYuZmFpbElmKHQ3KQotICAgICAgICBzZWxmLmZhaWxJZihzdWIpCi0gICAgICAgIHNlbGYuZmFpbElmKHN1YnN1YikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3Vic3ViKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfOChzZWxmKToKKyAgICAgICAgaGllciA9IFsKKyAgICAgICAgICAgICAgICAoInQ4IiwgTm9uZSksCisgICAgICAgICAgICAgICAgKCJ0OCBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICInZG9jIGZvciB0OCciKSwKKyAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5ta2hpZXIoaGllcikKKworICAgICAgICBpbXBvcnQgdDgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0OC5fX2RvY19fLCAiZG9jIGZvciB0OCIpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weQppbmRleCA1ZTAyYjFiLi4zMGQ0OGNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weQpAQCAtMjIsNyArMjIsOCBAQAogICAgICAgICBzZWxmLnBhY2thZ2VfZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVzdF9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlX25hbWUpCiAgICAgICAgIG9zLm1rZGlyKHNlbGYucGFja2FnZV9kaXIpCi0gICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHNlbGYucGFja2FnZV9kaXIsICdfX2luaXRfXycrb3MuZXh0c2VwKydweScpLCAndycpCisgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9kaXIsICdfX2luaXRfXycrb3MuZXh0c2VwKydweScpLCAndycpLmNsb3NlKCkKICAgICAgICAgc2VsZi5tb2R1bGVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhY2thZ2VfZGlyLCAnZm9vJytvcy5leHRzZXArJ3B5JykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTUyLDcgKzUzLDcgQEAKICAgICAgICAgdHJ5OiBfX2ltcG9ydF9fKHNlbGYubW9kdWxlX25hbWUpCiAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjogcGFzcwogICAgICAgICBlbHNlOiByYWlzZSBSdW50aW1lRXJyb3IsICdGYWlsZWQgdG8gaW5kdWNlIFN5bnRheEVycm9yJwotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tb2R1bGVfbmFtZSBub3QgaW4gc3lzLm1vZHVsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5tb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzeXMubW9kdWxlc1tzZWxmLnBhY2thZ2VfbmFtZV0sICdmb28nKSkKIAogICAgICAgICAjIC4uLm1ha2UgdXAgYSB2YXJpYWJsZSBuYW1lIHRoYXQgaXNuJ3QgYm91bmQgaW4gX19idWlsdGluc19fCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BsYXRmb3JtLnB5IGIvTGliL3Rlc3QvdGVzdF9wbGF0Zm9ybS5weQppbmRleCA5OGQ2OTExLi4xYWU1ODg4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BsYXRmb3JtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGxhdGZvcm0ucHkKQEAgLTQ4LDI1ICs0OCw3MyBAQAogICAgIGRlZiB0ZXN0X3Byb2Nlc3NvcihzZWxmKToKICAgICAgICAgcmVzID0gcGxhdGZvcm0ucHJvY2Vzc29yKCkKIAotICAgIGRlZiB0ZXN0X3B5dGhvbl9pbXBsZW1lbnRhdGlvbihzZWxmKToKLSAgICAgICAgcmVzID0gcGxhdGZvcm0ucHl0aG9uX2ltcGxlbWVudGF0aW9uKCkKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2F2ZV92ZXJzaW9uID0gc3lzLnZlcnNpb24KKyAgICAgICAgc2VsZi5zYXZlX3N1YnZlcnNpb24gPSBzeXMuc3VidmVyc2lvbgorICAgICAgICBzZWxmLnNhdmVfcGxhdGZvcm0gPSBzeXMucGxhdGZvcm0KIAotICAgIGRlZiB0ZXN0X3B5dGhvbl92ZXJzaW9uKHNlbGYpOgotICAgICAgICByZXMxID0gcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKQotICAgICAgICByZXMyID0gcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb25fdHVwbGUoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlczEsICIuIi5qb2luKHJlczIpKQorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3lzLnZlcnNpb24gPSBzZWxmLnNhdmVfdmVyc2lvbgorICAgICAgICBzeXMuc3VidmVyc2lvbiA9IHNlbGYuc2F2ZV9zdWJ2ZXJzaW9uCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9IHNlbGYuc2F2ZV9wbGF0Zm9ybQogCi0gICAgZGVmIHRlc3RfcHl0aG9uX2JyYW5jaChzZWxmKToKLSAgICAgICAgcmVzID0gcGxhdGZvcm0ucHl0aG9uX2JyYW5jaCgpCisgICAgZGVmIHRlc3Rfc3lzX3ZlcnNpb24oc2VsZik6CisgICAgICAgICMgT2xkIHRlc3QuCisgICAgICAgIGZvciBpbnB1dCwgb3V0cHV0IGluICgKKyAgICAgICAgICAgICgnMi40LjMgKCMxLCBKdW4gMjEgMjAwNiwgMTM6NTQ6MjEpIFxuW0dDQyAzLjMuNCAocHJlIDMuMy41IDIwMDQwODA5KV0nLAorICAgICAgICAgICAgICgnQ1B5dGhvbicsICcyLjQuMycsICcnLCAnJywgJzEnLCAnSnVuIDIxIDIwMDYgMTM6NTQ6MjEnLCAnR0NDIDMuMy40IChwcmUgMy4zLjUgMjAwNDA4MDkpJykpLAorICAgICAgICAgICAgKCdJcm9uUHl0aG9uIDEuMC42MDgxNiBvbiAuTkVUIDIuMC41MDcyNy40MicsCisgICAgICAgICAgICAgKCdJcm9uUHl0aG9uJywgJzEuMC42MDgxNicsICcnLCAnJywgJycsICcnLCAnLk5FVCAyLjAuNTA3MjcuNDInKSksCisgICAgICAgICAgICAoJ0lyb25QeXRob24gMS4wICgxLjAuNjEwMDUuMTk3Nykgb24gLk5FVCAyLjAuNTA3MjcuNDInLAorICAgICAgICAgICAgICgnSXJvblB5dGhvbicsICcxLjAuMCcsICcnLCAnJywgJycsICcnLCAnLk5FVCAyLjAuNTA3MjcuNDInKSksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgIyBicmFuY2ggYW5kIHJldmlzaW9uIGFyZSBub3QgInBhcnNlZCIsIGJ1dCBmZXRjaGVkCisgICAgICAgICAgICAjIGZyb20gc3lzLnN1YnZlcnNpb24uICBJZ25vcmUgdGhlbQorICAgICAgICAgICAgKG5hbWUsIHZlcnNpb24sIGJyYW5jaCwgcmV2aXNpb24sIGJ1aWxkbm8sIGJ1aWxkZGF0ZSwgY29tcGlsZXIpIFwKKyAgICAgICAgICAgICAgICAgICA9IHBsYXRmb3JtLl9zeXNfdmVyc2lvbihpbnB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgKG5hbWUsIHZlcnNpb24sICcnLCAnJywgYnVpbGRubywgYnVpbGRkYXRlLCBjb21waWxlciksIG91dHB1dCkKIAotICAgIGRlZiB0ZXN0X3B5dGhvbl9yZXZpc2lvbihzZWxmKToKLSAgICAgICAgcmVzID0gcGxhdGZvcm0ucHl0aG9uX3JldmlzaW9uKCkKLQotICAgIGRlZiB0ZXN0X3B5dGhvbl9idWlsZChzZWxmKToKLSAgICAgICAgcmVzID0gcGxhdGZvcm0ucHl0aG9uX2J1aWxkKCkKLQotICAgIGRlZiB0ZXN0X3B5dGhvbl9jb21waWxlcihzZWxmKToKLSAgICAgICAgcmVzID0gcGxhdGZvcm0ucHl0aG9uX2NvbXBpbGVyKCkKKyAgICAgICAgIyBUZXN0cyBmb3IgcHl0aG9uX2ltcGxlbWVudGF0aW9uKCksIHB5dGhvbl92ZXJzaW9uKCksIHB5dGhvbl9icmFuY2goKSwKKyAgICAgICAgIyBweXRob25fcmV2aXNpb24oKSwgcHl0aG9uX2J1aWxkKCksIGFuZCBweXRob25fY29tcGlsZXIoKS4KKyAgICAgICAgc3lzX3ZlcnNpb25zID0geworICAgICAgICAgICAgKCIyLjYuMSAocjI2MTo2NzUxNSwgRGVjICA2IDIwMDgsIDE1OjI2OjAwKSBcbltHQ0MgNC4wLjEgKEFwcGxlIENvbXB1dGVyLCBJbmMuIGJ1aWxkIDUzNzApXSIsCisgICAgICAgICAgICAgKCdDUHl0aG9uJywgJ3RhZ3MvcjI2MScsICc2NzUxNScpLCBzZWxmLnNhdmVfcGxhdGZvcm0pCisgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgKCJDUHl0aG9uIiwgIjIuNi4xIiwgInRhZ3MvcjI2MSIsICI2NzUxNSIsCisgICAgICAgICAgICAgICAgICgncjI2MTo2NzUxNScsICdEZWMgIDYgMjAwOCAxNToyNjowMCcpLAorICAgICAgICAgICAgICAgICAnR0NDIDQuMC4xIChBcHBsZSBDb21wdXRlciwgSW5jLiBidWlsZCA1MzcwKScpLAorICAgICAgICAgICAgKCJJcm9uUHl0aG9uIDIuMCAoMi4wLjAuMCkgb24gLk5FVCAyLjAuNTA3MjcuMzA1MyIsIE5vbmUsICJjbGkiKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICgiSXJvblB5dGhvbiIsICIyLjAuMCIsICIiLCAiIiwgKCIiLCAiIiksCisgICAgICAgICAgICAgICAgICIuTkVUIDIuMC41MDcyNy4zMDUzIiksCisgICAgICAgICAgICAoIjIuNSAodHJ1bms6NjEwNywgTWFyIDI2IDIwMDksIDEzOjAyOjE4KSBcbltKYXZhIEhvdFNwb3QoVE0pIENsaWVudCBWTSAoXCJBcHBsZSBDb21wdXRlciwgSW5jLlwiKV0iLAorICAgICAgICAgICAgKCdKeXRob24nLCAndHJ1bmsnLCAnNjEwNycpLCAiamF2YTEuNS4wXzE2IikKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAoIkp5dGhvbiIsICIyLjUuMCIsICJ0cnVuayIsICI2MTA3IiwKKyAgICAgICAgICAgICAgICAgKCd0cnVuazo2MTA3JywgJ01hciAyNiAyMDA5JyksICJqYXZhMS41LjBfMTYiKSwKKyAgICAgICAgICAgICgiMi41LjIgKDYzMzc4LCBNYXIgMjYgMjAwOSwgMTg6MDM6MjkpXG5bUHlQeSAxLjAuMF0iLAorICAgICAgICAgICAgICgnUHlQeScsICd0cnVuaycsICc2MzM3OCcpLCBzZWxmLnNhdmVfcGxhdGZvcm0pCisgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgKCJQeVB5IiwgIjIuNS4yIiwgInRydW5rIiwgIjYzMzc4IiwgKCc2MzM3OCcsICdNYXIgMjYgMjAwOScpLAorICAgICAgICAgICAgICAgICAiIikKKyAgICAgICAgICAgIH0KKyAgICAgICAgZm9yICh2ZXJzaW9uX3RhZywgc3VidmVyc2lvbiwgc3lzX3BsYXRmb3JtKSwgaW5mbyBpbiBcCisgICAgICAgICAgICAgICAgc3lzX3ZlcnNpb25zLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc3lzLnZlcnNpb24gPSB2ZXJzaW9uX3RhZworICAgICAgICAgICAgaWYgc3VidmVyc2lvbiBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAic3VidmVyc2lvbiIpOgorICAgICAgICAgICAgICAgICAgICBkZWwgc3lzLnN1YnZlcnNpb24KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3lzLnN1YnZlcnNpb24gPSBzdWJ2ZXJzaW9uCisgICAgICAgICAgICBpZiBzeXNfcGxhdGZvcm0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtID0gc3lzX3BsYXRmb3JtCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsYXRmb3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLCBpbmZvWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5weXRob25fdmVyc2lvbigpLCBpbmZvWzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5weXRob25fYnJhbmNoKCksIGluZm9bMl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsYXRmb3JtLnB5dGhvbl9yZXZpc2lvbigpLCBpbmZvWzNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5weXRob25fYnVpbGQoKSwgaW5mb1s0XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ucHl0aG9uX2NvbXBpbGVyKCksIGluZm9bNV0pCiAKICAgICBkZWYgdGVzdF9zeXN0ZW1fYWxpYXMoc2VsZik6CiAgICAgICAgIHJlcyA9IHBsYXRmb3JtLnN5c3RlbV9hbGlhcygKQEAgLTc3LDEyICsxMjUsMzMgQEAKIAogICAgIGRlZiB0ZXN0X3VuYW1lKHNlbGYpOgogICAgICAgICByZXMgPSBwbGF0Zm9ybS51bmFtZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhbnkocmVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShyZXMpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLCAid2luZG93cyBvbmx5IHRlc3QiKQorICAgIGRlZiB0ZXN0X3VuYW1lX3dpbjMyX0FSQ0hJVEVXNjQzMihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA3ODYwOiBtYWtlIHN1cmUgd2UgZ2V0IGFyY2hpdGVjdHVyZSBmcm9tIHRoZSBjb3JyZWN0IHZhcmlhYmxlCisgICAgICAgICMgb24gNjQgYml0IFdpbmRvd3M6IGlmIFBST0NFU1NPUl9BUkNISVRFVzY0MzIgZXhpc3RzIHdlIHNob3VsZCBiZQorICAgICAgICAjIHVzaW5nIGl0LCBwZXIKKyAgICAgICAgIyBodHRwOi8vYmxvZ3MubXNkbi5jb20vZGF2aWQud2FuZy9hcmNoaXZlLzIwMDYvMDMvMjYvSE9XVE8tRGV0ZWN0LVByb2Nlc3MtQml0bmVzcy5hc3B4CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnZpcm9uOgorICAgICAgICAgICAgICAgIGlmICdQUk9DRVNTT1JfQVJDSElURVc2NDMyJyBpbiBlbnZpcm9uOgorICAgICAgICAgICAgICAgICAgICBkZWwgZW52aXJvblsnUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMiddCisgICAgICAgICAgICAgICAgZW52aXJvblsnUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRSddID0gJ2ZvbycKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS5fdW5hbWVfY2FjaGUgPSBOb25lCisgICAgICAgICAgICAgICAgc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lLCBwcm9jZXNzb3IgPSBwbGF0Zm9ybS51bmFtZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNoaW5lLCAnZm9vJykKKyAgICAgICAgICAgICAgICBlbnZpcm9uWydQUk9DRVNTT1JfQVJDSElURVc2NDMyJ10gPSAnYmFyJworICAgICAgICAgICAgICAgIHBsYXRmb3JtLl91bmFtZV9jYWNoZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBzeXN0ZW0sIG5vZGUsIHJlbGVhc2UsIHZlcnNpb24sIG1hY2hpbmUsIHByb2Nlc3NvciA9IHBsYXRmb3JtLnVuYW1lKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hY2hpbmUsICdiYXInKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcGxhdGZvcm0uX3VuYW1lX2NhY2hlID0gTm9uZQogCiAgICAgZGVmIHRlc3RfamF2YV92ZXIoc2VsZik6CiAgICAgICAgIHJlcyA9IHBsYXRmb3JtLmphdmFfdmVyKCkKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdqYXZhJzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhhbGwocmVzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwocmVzKSkKIAogICAgIGRlZiB0ZXN0X3dpbjMyX3ZlcihzZWxmKToKICAgICAgICAgcmVzID0gcGxhdGZvcm0ud2luMzJfdmVyKCkKQEAgLTEwNywzNyArMTc2LDQzIEBACiAgICAgICAgICAgICAgICAgICAgIHJlYWxfdmVyID0gbG4uc3RyaXAoKS5zcGxpdCgpWy0xXQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZmQuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYocmVhbF92ZXIgaXMgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc1swXSwgcmVhbF92ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlYWxfdmVyIGlzIE5vbmUpCisgICAgICAgICAgICByZXN1bHRfbGlzdCA9IHJlc1swXS5zcGxpdCgnLicpCisgICAgICAgICAgICBleHBlY3RfbGlzdCA9IHJlYWxfdmVyLnNwbGl0KCcuJykKKyAgICAgICAgICAgIGxlbl9kaWZmID0gbGVuKHJlc3VsdF9saXN0KSAtIGxlbihleHBlY3RfbGlzdCkKKyAgICAgICAgICAgICMgT24gU25vdyBMZW9wYXJkLCBzd192ZXJzIHJlcG9ydHMgMTAuNi4wIGFzIDEwLjYKKyAgICAgICAgICAgIGlmIGxlbl9kaWZmID4gMDoKKyAgICAgICAgICAgICAgICBleHBlY3RfbGlzdC5leHRlbmQoWycwJ10gKiBsZW5fZGlmZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0X2xpc3QsIGV4cGVjdF9saXN0KQogCiAgICAgICAgICAgICAjIHJlc1sxXSBjbGFpbXMgdG8gY29udGFpbgogICAgICAgICAgICAgIyAodmVyc2lvbiwgZGV2X3N0YWdlLCBub25fcmVsZWFzZV92ZXJzaW9uKQogICAgICAgICAgICAgIyBUaGF0IGluZm9ybWF0aW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc1sxXSwgKCcnLCAnJywgJycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMV0sICgnJywgJycsICcnKSkKIAogICAgICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXNbMl0sICdpMzg2JykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1syXSwgJ2kzODYnKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXNbMl0sICdQb3dlclBDJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1syXSwgJ1Bvd2VyUEMnKQogCiAKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgIGRlZiB0ZXN0X21hY192ZXJfd2l0aF9mb3JrKHNlbGYpOgotICAgICAgICAgICAgIyBJc3N1ZTc4OTU6IHBsYXRmb3JtLm1hY192ZXIoKSBjcmFzaGVzIHdoZW4gdXNpbmcgZm9yayB3aXRob3V0IGV4ZWMKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBmaXggZm9yIHRoYXQgaXNzdWUgd29ya3MuCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKLSAgICAgICAgICAgIGlmIHBpZCA9PSAwOgotICAgICAgICAgICAgICAgICMgY2hpbGQKLSAgICAgICAgICAgICAgICBpbmZvID0gcGxhdGZvcm0ubWFjX3ZlcigpCi0gICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicsICJPU1ggb25seSB0ZXN0IikKKyAgICBkZWYgdGVzdF9tYWNfdmVyX3dpdGhfZm9yayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZTc4OTU6IHBsYXRmb3JtLm1hY192ZXIoKSBjcmFzaGVzIHdoZW4gdXNpbmcgZm9yayB3aXRob3V0IGV4ZWMKKyAgICAgICAgIworICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgZml4IGZvciB0aGF0IGlzc3VlIHdvcmtzLgorICAgICAgICAjCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICMgY2hpbGQKKyAgICAgICAgICAgIGluZm8gPSBwbGF0Zm9ybS5tYWNfdmVyKCkKKyAgICAgICAgICAgIG9zLl9leGl0KDApCiAKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBwYXJlbnQKLSAgICAgICAgICAgICAgICBjcGlkLCBzdHMgPSBvcy53YWl0cGlkKHBpZCwgMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjcGlkLCBwaWQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RzLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBwYXJlbnQKKyAgICAgICAgICAgIGNwaWQsIHN0cyA9IG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcGlkLCBwaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cywgMCkKIAogICAgIGRlZiB0ZXN0X2Rpc3Qoc2VsZik6CiAgICAgICAgIHJlcyA9IHBsYXRmb3JtLmRpc3QoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKaW5kZXggNDc2MzBkYy4uZTZlMGY4NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CkBAIC05LDcgKzksNyBAQAogCiAjIFRoaXMgdGVzdCBkYXRhIHdhcyBnZW5lcmF0ZWQgdGhyb3VnaCBDb2NvYSdzIE5TRGljdGlvbmFyeSBjbGFzcwogVEVTVERBVEEgPSAiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElTVCAxLjAvL0VOIiBcCis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iIFwKICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgogPGRpY3Q+CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BvbGwucHkgYi9MaWIvdGVzdC90ZXN0X3BvbGwucHkKaW5kZXggZmI2Y2QzMC4uZDMzYWY5MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQpAQCAtMSwxMiArMSwxMiBAQAogIyBUZXN0IGNhc2UgZm9yIHRoZSBvcy5wb2xsKCkgZnVuY3Rpb24KIAogaW1wb3J0IG9zLCBzZWxlY3QsIHJhbmRvbSwgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RTa2lwcGVkLCBURVNURk4sIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKIAogdHJ5OgogICAgIHNlbGVjdC5wb2xsCiBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQsICJzZWxlY3QucG9sbCBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3BvbGwiCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICJzZWxlY3QucG9sbCBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3BvbGwiCiAKIAogZGVmIGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIGZsYWcpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3Blbi5weSBiL0xpYi90ZXN0L3Rlc3RfcG9wZW4ucHkKaW5kZXggMDY5ZjM3MC4uOTJiNWU5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3Blbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvcGVuLnB5CkBAIC0xNCwxMyArMTQsMTEgQEAKICMgVGhpcyByZXN1bHRzIGluIFB5dGhvbiBiZWluZyBzcGF3bmVkIGFuZCBwcmludGluZyB0aGUgc3lzLmFyZ3YgbGlzdC4KICMgV2UgY2FuIHRoZW4gZXZhbCgpIHRoZSByZXN1bHQgb2YgdGhpcywgYW5kIHNlZSB3aGF0IGVhY2ggYXJndiB3YXMuCiBweXRob24gPSBzeXMuZXhlY3V0YWJsZQotaWYgJyAnIGluIHB5dGhvbjoKLSAgICBweXRob24gPSAnIicgKyBweXRob24gKyAnIicgICAgICMgcXVvdGUgZW1iZWRkZWQgc3BhY2UgZm9yIGNtZGxpbmUKIAogY2xhc3MgUG9wZW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgX2RvX3Rlc3RfY29tbWFuZGxpbmUoc2VsZiwgY21kbGluZSwgZXhwZWN0ZWQpOgogICAgICAgICBjbWQgPSAnJXMgLWMgImltcG9ydCBzeXM7cHJpbnQgc3lzLmFyZ3YiICVzJyAlIChweXRob24sIGNtZGxpbmUpCi0gICAgICAgIGRhdGEgPSBvcy5wb3BlbihjbWQpLnJlYWQoKQorICAgICAgICBkYXRhID0gb3MucG9wZW4oY21kKS5yZWFkKCkgKyAnXG4nCiAgICAgICAgIGdvdCA9IGV2YWwoZGF0YSlbMTpdICMgc3RyaXAgb2ZmIGFyZ3ZbMF0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQogCkBAIC00MCw2ICszOCwxMyBAQAogICAgICAgICApCiAgICAgICAgIHRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKIAorICAgIGRlZiB0ZXN0X3JldHVybl9jb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBvcGVuKCJleGl0IDAiKS5jbG9zZSgpLCBOb25lKQorICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBvcGVuKCJleGl0IDQyIikuY2xvc2UoKSwgNDIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBvcGVuKCJleGl0IDQyIikuY2xvc2UoKSwgNDIgPDwgOCkKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUG9wZW5UZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BvcGVuMi5weSBiL0xpYi90ZXN0L3Rlc3RfcG9wZW4yLnB5CmluZGV4IDJiN2MzMGQuLmVhNDEwNzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9wZW4yLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9wZW4yLnB5CkBAIC0xMiwxMyArMTIsMTMgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHBvcGVuMgogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZCwgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4KIAogaWYgc3lzLnBsYXRmb3JtWzo0XSA9PSAnYmVvcycgb3Igc3lzLnBsYXRmb3JtWzo2XSA9PSAnYXRoZW9zJzoKICAgICAjICBMb2NrcyBnZXQgbWVzc2VkIHVwIG9yIHNvbWV0aGluZy4gIEdlbmVyYWxseSB3ZSdyZSBzdXBwb3NlZAogICAgICMgIHRvIGF2b2lkIG1peGluZyAicG9zaXgiIGZvcmsgJiBleGVjIHdpdGggbmF0aXZlIHRocmVhZHMsIGFuZAogICAgICMgIHRoZXkgbWF5IGJlIHJpZ2h0IGFib3V0IHRoYXQgYWZ0ZXIgYWxsLgotICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJwb3BlbjIoKSBkb2Vzbid0IHdvcmsgb24gIiArIHN5cy5wbGF0Zm9ybSkKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgicG9wZW4yKCkgZG9lc24ndCB3b3JrIG9uICIgKyBzeXMucGxhdGZvcm0pCiAKICMgaWYgd2UgZG9uJ3QgaGF2ZSBvcy5wb3BlbiwgY2hlY2sgdGhhdAogIyB3ZSBoYXZlIG9zLmZvcmsuICBpZiBub3QsIHNraXAgdGhlIHRlc3QKQEAgLTUwLDE1ICs1MCwyMSBAQAogICAgICAgICBmb3IgaW5zdCBpbiBwb3BlbjIuX2FjdGl2ZToKICAgICAgICAgICAgIGluc3Qud2FpdCgpCiAgICAgICAgIHBvcGVuMi5fY2xlYW51cCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9wZW4yLl9hY3RpdmUsICJfYWN0aXZlIG5vdCBlbXB0eSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9wZW4yLl9hY3RpdmUsICJwb3BlbjIuX2FjdGl2ZSBub3QgZW1wdHkiKQorICAgICAgICAjIFRoZSBvcy5wb3BlbiooKSBBUEkgZGVsZWdhdGVzIHRvIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSAob24gVW5peCkKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgZm9yIGluc3QgaW4gc3VicHJvY2Vzcy5fYWN0aXZlOgorICAgICAgICAgICAgaW5zdC53YWl0KCkKKyAgICAgICAgc3VicHJvY2Vzcy5fY2xlYW51cCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3VicHJvY2Vzcy5fYWN0aXZlLCAic3VicHJvY2Vzcy5fYWN0aXZlIG5vdCBlbXB0eSIpCiAgICAgICAgIHJlYXBfY2hpbGRyZW4oKQogCiAgICAgZGVmIHZhbGlkYXRlX291dHB1dChzZWxmLCB0ZXN0c3RyLCBleHBlY3RlZF9vdXQsIHIsIHcsIGU9Tm9uZSk6CiAgICAgICAgIHcud3JpdGUodGVzdHN0cikKICAgICAgICAgdy5jbG9zZSgpCiAgICAgICAgIGdvdCA9IHIucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX291dCwgZ290LnN0cmlwKCksICJ3cm90ZSAlciByZWFkICVyIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0c3RyLCBnb3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX291dCwgZ290LnN0cmlwKCksICJ3cm90ZSAlciByZWFkICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RzdHIsIGdvdCkpCiAKICAgICAgICAgaWYgZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGdvdCA9IGUucmVhZCgpCkBAIC04NCw3ICs5MCw3IEBACiAKICAgICAgICAgICAgIHcsIHIgPSBvcy5wb3BlbjIoWyJlY2hvIiwgc2VsZi50ZXN0c3RyXSkKICAgICAgICAgICAgIGdvdCA9IHIucmVhZCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnb3QsIHNlbGYudGVzdHN0ciArICJcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgc2VsZi50ZXN0c3RyICsgIlxuIikKIAogICAgICAgICB3LCByID0gb3MucG9wZW4yKHNlbGYuY21kKQogICAgICAgICBzZWxmLnZhbGlkYXRlX291dHB1dChzZWxmLnRlc3RzdHIsIHNlbGYuZXhwZWN0ZWQsIHIsIHcpCkBAIC05Nyw3ICsxMDMsNyBAQAogCiAgICAgICAgICAgICB3LCByLCBlID0gb3MucG9wZW4zKFsiZWNobyIsIHNlbGYudGVzdHN0cl0pCiAgICAgICAgICAgICBnb3QgPSByLnJlYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ290LCBzZWxmLnRlc3RzdHIgKyAiXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIHNlbGYudGVzdHN0ciArICJcbiIpCiAgICAgICAgICAgICBnb3QgPSBlLnJlYWQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnb3QsICJ1bmV4cGVjdGVkICVyIG9uIHN0ZGVyciIgJSBnb3QpCiAKQEAgLTExMSw3ICsxMTcsNyBAQAogCiAgICAgICAgICAgICB3LCByID0gb3MucG9wZW40KFsiZWNobyIsIHNlbGYudGVzdHN0cl0pCiAgICAgICAgICAgICBnb3QgPSByLnJlYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ290LCBzZWxmLnRlc3RzdHIgKyAiXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIHNlbGYudGVzdHN0ciArICJcbiIpCiAKICAgICAgICAgdywgciA9IG9zLnBvcGVuNChzZWxmLmNtZCkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9vdXRwdXQoc2VsZi50ZXN0c3RyLCBzZWxmLmV4cGVjdGVkLCByLCB3KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQppbmRleCAxOGVkMjI0Li40Mzc1ZjcxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQpAQCAtMSw0MyArMSwzMDYgQEAKLWltcG9ydCBzb2NrZXQKLWltcG9ydCB0aHJlYWRpbmcKKyIiIlRlc3Qgc2NyaXB0IGZvciBwb3BsaWIgbW9kdWxlLiIiIgorCisjIE1vZGlmaWVkIGJ5IEdpYW1wYW9sbyBSb2RvbGEnIHRvIGdpdmUgcG9wbGliLlBPUDMgYW5kIHBvcGxpYi5QT1AzX1NTTAorIyBhIHJlYWwgdGVzdCBzdWl0ZQorCiBpbXBvcnQgcG9wbGliCitpbXBvcnQgYXN5bmNvcmUKK2ltcG9ydCBhc3luY2hhdAoraW1wb3J0IHNvY2tldAoraW1wb3J0IG9zCiBpbXBvcnQgdGltZQoraW1wb3J0IGVycm5vCiAKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgSE9TVAordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKLUhPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAogCi1kZWYgc2VydmVyKGV2dCwgc2Vydik6Ci0gICAgc2Vydi5saXN0ZW4oNSkKLSAgICB0cnk6Ci0gICAgICAgIGNvbm4sIGFkZHIgPSBzZXJ2LmFjY2VwdCgpCi0gICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgY29ubi5zZW5kKCIrIEhvbGEgbXVuZG9cbiIpCi0gICAgICAgIGNvbm4uY2xvc2UoKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHNlcnYuY2xvc2UoKQotICAgICAgICBldnQuc2V0KCkKKyMgdGhlIGR1bW15IGRhdGEgcmV0dXJuZWQgYnkgc2VydmVyIHdoZW4gTElTVCBhbmQgUkVUUiBjb21tYW5kcyBhcmUgaXNzdWVkCitMSVNUX1JFU1AgPSAnMSAxXHJcbjIgMlxyXG4zIDNcclxuNCA0XHJcbjUgNVxyXG4uXHJcbicKK1JFVFJfUkVTUCA9ICIiIkZyb206IHBvc3RtYXN0ZXJAcHl0aG9uLm9yZ1wKK1xyXG5Db250ZW50LVR5cGU6IHRleHQvcGxhaW5cclxuXAorTUlNRS1WZXJzaW9uOiAxLjBcclxuXAorU3ViamVjdDogRHVtbXlcclxuXAorXHJcblwKK2xpbmUxXHJcblwKK2xpbmUyXHJcblwKK2xpbmUzXHJcblwKKy5cclxuIiIiCiAKLWNsYXNzIEdlbmVyYWxUZXN0cyhUZXN0Q2FzZSk6CisKK2NsYXNzIER1bW15UE9QM0hhbmRsZXIoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcigiXHJcbiIpCisgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuJykKKworICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuaW5fYnVmZmVyLmFwcGVuZChkYXRhKQorCisgICAgZGVmIGZvdW5kX3Rlcm1pbmF0b3Ioc2VsZik6CisgICAgICAgIGxpbmUgPSAnJy5qb2luKHNlbGYuaW5fYnVmZmVyKQorICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCisgICAgICAgIGNtZCA9IGxpbmUuc3BsaXQoJyAnKVswXS5sb3dlcigpCisgICAgICAgIHNwYWNlID0gbGluZS5maW5kKCcgJykKKyAgICAgICAgaWYgc3BhY2UgIT0gLTE6CisgICAgICAgICAgICBhcmcgPSBsaW5lW3NwYWNlICsgMTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmcgPSAiIgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdjbWRfJyArIGNtZCk6CisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsICdjbWRfJyArIGNtZCkKKyAgICAgICAgICAgIG1ldGhvZChhcmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2goJy1FUlIgdW5yZWNvZ25pemVkIFBPUDMgY29tbWFuZCAiJXMiLicgJWNtZCkKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKKyAgICBkZWYgcHVzaChzZWxmLCBkYXRhKToKKyAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoKHNlbGYsIGRhdGEgKyAnXHJcbicpCisKKyAgICBkZWYgY21kX2VjaG8oc2VsZiwgYXJnKToKKyAgICAgICAgIyBzZW5kcyBiYWNrIHRoZSByZWNlaXZlZCBzdHJpbmcgKHVzZWQgYnkgdGhlIHRlc3Qgc3VpdGUpCisgICAgICAgIHNlbGYucHVzaChhcmcpCisKKyAgICBkZWYgY21kX3VzZXIoc2VsZiwgYXJnKToKKyAgICAgICAgaWYgYXJnICE9ICJndWlkbyI6CisgICAgICAgICAgICBzZWxmLnB1c2goIi1FUlIgbm8gc3VjaCB1c2VyIikKKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgcGFzc3dvcmQgcmVxdWlyZWQnKQorCisgICAgZGVmIGNtZF9wYXNzKHNlbGYsIGFyZyk6CisgICAgICAgIGlmIGFyZyAhPSAicHl0aG9uIjoKKyAgICAgICAgICAgIHNlbGYucHVzaCgiLUVSUiB3cm9uZyBwYXNzd29yZCIpCisgICAgICAgIHNlbGYucHVzaCgnK09LIDEwIG1lc3NhZ2VzJykKKworICAgIGRlZiBjbWRfc3RhdChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyAxMCAxMDAnKQorCisgICAgZGVmIGNtZF9saXN0KHNlbGYsIGFyZyk6CisgICAgICAgIGlmIGFyZzoKKyAgICAgICAgICAgIHNlbGYucHVzaCgnK09LICVzICVzJyAlKGFyZywgYXJnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHVzaCgnK09LJykKKyAgICAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQucHVzaChzZWxmLCBMSVNUX1JFU1ApCisKKyAgICBjbWRfdWlkbCA9IGNtZF9saXN0CisKKyAgICBkZWYgY21kX3JldHIoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgJXMgYnl0ZXMnICVsZW4oUkVUUl9SRVNQKSkKKyAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoKHNlbGYsIFJFVFJfUkVTUCkKKworICAgIGNtZF90b3AgPSBjbWRfcmV0cgorCisgICAgZGVmIGNtZF9kZWxlKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnK09LIG1lc3NhZ2UgbWFya2VkIGZvciBkZWxldGlvbi4nKQorCisgICAgZGVmIGNtZF9ub29wKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnK09LIGRvbmUgbm90aGluZy4nKQorCisgICAgZGVmIGNtZF9ycG9wKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnK09LIGRvbmUgbm90aGluZy4nKQorCisKK2NsYXNzIER1bW15UE9QM1NlcnZlcihhc3luY29yZS5kaXNwYXRjaGVyLCB0aHJlYWRpbmcuVGhyZWFkKToKKworICAgIGhhbmRsZXIgPSBEdW1teVBPUDNIYW5kbGVyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcywgYWY9c29ja2V0LkFGX0lORVQpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KGFmLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYmluZChhZGRyZXNzKQorICAgICAgICBzZWxmLmxpc3Rlbig1KQorICAgICAgICBzZWxmLmFjdGl2ZSA9IEZhbHNlCisgICAgICAgIHNlbGYuYWN0aXZlX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVs6Ml0KKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmFjdGl2ZQorICAgICAgICBzZWxmLl9fZmxhZyA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuc3RhcnQoc2VsZikKKyAgICAgICAgc2VsZi5fX2ZsYWcud2FpdCgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLmFjdGl2ZSA9IFRydWUKKyAgICAgICAgc2VsZi5fX2ZsYWcuc2V0KCkKKyAgICAgICAgd2hpbGUgc2VsZi5hY3RpdmUgYW5kIGFzeW5jb3JlLnNvY2tldF9tYXA6CisgICAgICAgICAgICBzZWxmLmFjdGl2ZV9sb2NrLmFjcXVpcmUoKQorICAgICAgICAgICAgYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMSwgY291bnQ9MSkKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlX2xvY2sucmVsZWFzZSgpCisgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbChpZ25vcmVfYWxsPVRydWUpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuYWN0aXZlCisgICAgICAgIHNlbGYuYWN0aXZlID0gRmFsc2UKKyAgICAgICAgc2VsZi5qb2luKCkKKworICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5hY2NlcHQoKQorICAgICAgICBzZWxmLmhhbmRsZXIgPSBzZWxmLmhhbmRsZXIoY29ubikKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorICAgIGhhbmRsZV9yZWFkID0gaGFuZGxlX2Nvbm5lY3QKKworICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKKworY2xhc3MgVGVzdFBPUDNDbGFzcyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgYXNzZXJ0T0soc2VsZiwgcmVzcCk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLnN0YXJ0c3dpdGgoIitPSyIpKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15UE9QM1NlcnZlcigoSE9TVCwgMCkpCisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5jbGllbnQgPSBwb3BsaWIuUE9QMyhzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9nZXR3ZWxjb21lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LmdldHdlbGNvbWUoKSwgJytPSyBkdW1teSBwb3AzIHNlcnZlciByZWFkeS4nKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC5fc2hvcnRjbWQsICdlY2hvIC1lcnInKQorCisgICAgZGVmIHRlc3RfdXNlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPSyhzZWxmLmNsaWVudC51c2VyKCdndWlkbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhwb3BsaWIuZXJyb3JfcHJvdG8sIHNlbGYuY2xpZW50LnVzZXIsICdpbnZhbGlkJykKKworICAgIGRlZiB0ZXN0X3Bhc3NfKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9LKHNlbGYuY2xpZW50LnBhc3NfKCdweXRob24nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC51c2VyLCAnaW52YWxpZCcpCisKKyAgICBkZWYgdGVzdF9zdGF0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnN0YXQoKSwgKDEwLCAxMDApKQorCisgICAgZGVmIHRlc3RfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5saXN0KClbMTpdLAorICAgICAgICAgICAgICAgICAgICAgICAgIChbJzEgMScsICcyIDInLCAnMyAzJywgJzQgNCcsICc1IDUnXSwgMjUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGllbnQubGlzdCgnMScpLmVuZHN3aXRoKCJPSyAxIDEiKSkKKworICAgIGRlZiB0ZXN0X3JldHIoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gKCcrT0sgMTE2IGJ5dGVzJywKKyAgICAgICAgICAgICAgICAgICAgWydGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmcnLCAnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJywKKyAgICAgICAgICAgICAgICAgICAgICdNSU1FLVZlcnNpb246IDEuMCcsICdTdWJqZWN0OiBEdW1teScsCisgICAgICAgICAgICAgICAgICAgICAnJywgJ2xpbmUxJywgJ2xpbmUyJywgJ2xpbmUzJ10sCisgICAgICAgICAgICAgICAgICAgIDExMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5yZXRyKCdmb28nKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9kZWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9LKHNlbGYuY2xpZW50LmRlbGUoJ2ZvbycpKQorCisgICAgZGVmIHRlc3Rfbm9vcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPSyhzZWxmLmNsaWVudC5ub29wKCkpCisKKyAgICBkZWYgdGVzdF9ycG9wKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9LKHNlbGYuY2xpZW50LnJwb3AoJ2ZvbycpKQorCisgICAgZGVmIHRlc3RfdG9wKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICAoJytPSyAxMTYgYnl0ZXMnLAorICAgICAgICAgICAgICAgICAgICAgWydGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmcnLCAnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJywKKyAgICAgICAgICAgICAgICAgICAgICAnTUlNRS1WZXJzaW9uOiAxLjAnLCAnU3ViamVjdDogRHVtbXknLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAnbGluZTEnLCAnbGluZTInLCAnbGluZTMnXSwKKyAgICAgICAgICAgICAgICAgICAgIDExMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC50b3AoMSwgMSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfdWlkbChzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQudWlkbCgpCisgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoJ2ZvbycpCisKKworU1VQUE9SVFNfU1NMID0gRmFsc2UKK2lmIGhhc2F0dHIocG9wbGliLCAnUE9QM19TU0wnKToKKyAgICBpbXBvcnQgc3NsCisKKyAgICBTVVBQT1JUU19TU0wgPSBUcnVlCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJrZXljZXJ0LnBlbSIpCisKKyAgICBjbGFzcyBEdW1teVBPUDNfU1NMSGFuZGxlcihEdW1teVBPUDNIYW5kbGVyKToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CisgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2tldCwgY2VydGZpbGU9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UpCisgICAgICAgICAgICAjIE11c3QgdHJ5IGhhbmRzaGFrZSBiZWZvcmUgY2FsbGluZyBwdXNoKCkKKyAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoIlxyXG4iKQorICAgICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQorICAgICAgICAgICAgc2VsZi5wdXNoKCcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuJykKKworICAgICAgICBkZWYgX2RvX3NzbF9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBGYWxzZQorCisgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3NzbF9hY2NlcHRpbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIER1bW15UE9QM0hhbmRsZXIuaGFuZGxlX3JlYWQoc2VsZikKKworICAgIGNsYXNzIFRlc3RQT1AzX1NTTENsYXNzKFRlc3RQT1AzQ2xhc3MpOgorICAgICAgICAjIHJlcGVhdCBwcmV2aW91cyB0ZXN0cyBieSB1c2luZyBwb3BsaWIuUE9QM19TU0wKKworICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15UE9QM1NlcnZlcigoSE9TVCwgMCkpCisgICAgICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVyID0gRHVtbXlQT1AzX1NTTEhhbmRsZXIKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDNfU1NMKHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisKKyAgICAgICAgZGVmIHRlc3RfX2FsbF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUE9QM19TU0wnLCBwb3BsaWIuX19hbGxfXykKKworCitjbGFzcyBUZXN0VGltZW91dHMoVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMykKICAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlciwgYXJncz0oc2VsZi5ldnQsc2VsZi5zb2NrKSkuc3RhcnQoKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnNlcnZlciwgYXJncz0oc2VsZi5ldnQsc2VsZi5zb2NrKSkuc3RhcnQoKQogICAgICAgICB0aW1lLnNsZWVwKC4xKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLmV2dC53YWl0KCkKIAotICAgIGRlZiB0ZXN0QmFzaWMoc2VsZik6Ci0gICAgICAgICMgY29ubmVjdHMKLSAgICAgICAgcG9wID0gcG9wbGliLlBPUDMoSE9TVCwgc2VsZi5wb3J0KQotICAgICAgICBwb3Auc29jay5jbG9zZSgpCisgICAgZGVmIHNlcnZlcihzZWxmLCBldnQsIHNlcnYpOgorICAgICAgICBzZXJ2Lmxpc3Rlbig1KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uLCBhZGRyID0gc2Vydi5hY2NlcHQoKQorICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uLnNlbmQoIisgSG9sYSBtdW5kb1xuIikKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2Vydi5jbG9zZSgpCisgICAgICAgICAgICBldnQuc2V0KCkKIAogICAgIGRlZiB0ZXN0VGltZW91dERlZmF1bHQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQpAQCAtNjUsOCArMzI4LDE2IEBACiAgICAgICAgIHBvcC5zb2NrLmNsb3NlKCkKIAogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChHZW5lcmFsVGVzdHMpCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbVGVzdFBPUDNDbGFzcywgVGVzdFRpbWVvdXRzXQorICAgIGlmIFNVUFBPUlRTX1NTTDoKKyAgICAgICAgdGVzdHMuYXBwZW5kKFRlc3RQT1AzX1NTTENsYXNzKQorICAgIHRocmVhZF9pbmZvID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgdHJ5OgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKyAgICBmaW5hbGx5OgorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnRocmVhZF9pbmZvKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CmluZGV4IGZiODMwYWUuLmE1ZGIyMWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQpAQCAtMiwxMCArMiw4IEBACiAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKLXRyeToKLSAgICBpbXBvcnQgcG9zaXgKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQsICJwb3NpeCBpcyBub3QgYXZhaWxhYmxlIgorIyBTa2lwIHRoZXNlIHRlc3RzIGlmIHRoZXJlIGlzIG5vIHBvc2l4IG1vZHVsZS4KK3Bvc2l4ID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3Bvc2l4JykKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgc3lzCkBAIC0xNiw2ICsxNCw4IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncworCisKIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCAnLiogcG90ZW50aWFsIHNlY3VyaXR5IHJpc2sgLionLAogICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCiAKQEAgLTM4LDIxICszOCw4NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0cGlkIiwgImdldHBncnAiLCAiZ2V0cHBpZCIsICJnZXR1aWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogCi0gICAgICAgIGZvciBuYW1lIGluIE5PX0FSR19GVU5DVElPTlM6Ci0gICAgICAgICAgICBwb3NpeF9mdW5jID0gZ2V0YXR0cihwb3NpeCwgbmFtZSwgTm9uZSkKLSAgICAgICAgICAgIGlmIHBvc2l4X2Z1bmMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcG9zaXhfZnVuYygpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeF9mdW5jLCAxKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIiIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIGZvciBuYW1lIGluIE5PX0FSR19GVU5DVElPTlM6CisgICAgICAgICAgICAgICAgcG9zaXhfZnVuYyA9IGdldGF0dHIocG9zaXgsIG5hbWUsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgcG9zaXhfZnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcG9zaXhfZnVuYygpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhfZnVuYywgMSkKKworICAgIGlmIGhhc2F0dHIocG9zaXgsICdnZXRyZXN1aWQnKToKKyAgICAgICAgZGVmIHRlc3RfZ2V0cmVzdWlkKHNlbGYpOgorICAgICAgICAgICAgdXNlcl9pZHMgPSBwb3NpeC5nZXRyZXN1aWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odXNlcl9pZHMpLCAzKQorICAgICAgICAgICAgZm9yIHZhbCBpbiB1c2VyX2lkczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh2YWwsIDApCisKKyAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZ2V0cmVzZ2lkJyk6CisgICAgICAgIGRlZiB0ZXN0X2dldHJlc2dpZChzZWxmKToKKyAgICAgICAgICAgIGdyb3VwX2lkcyA9IHBvc2l4LmdldHJlc2dpZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihncm91cF9pZHMpLCAzKQorICAgICAgICAgICAgZm9yIHZhbCBpbiBncm91cF9pZHM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwodmFsLCAwKQorCisgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3NldHJlc3VpZCcpOgorICAgICAgICBkZWYgdGVzdF9zZXRyZXN1aWQoc2VsZik6CisgICAgICAgICAgICBjdXJyZW50X3VzZXJfaWRzID0gcG9zaXguZ2V0cmVzdWlkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvc2l4LnNldHJlc3VpZCgqY3VycmVudF91c2VyX2lkcykpCisgICAgICAgICAgICAjIC0xIG1lYW5zIGRvbid0IGNoYW5nZSB0aGF0IHZhbHVlLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9zaXguc2V0cmVzdWlkKC0xLCAtMSwgLTEpKQorCisgICAgICAgIGRlZiB0ZXN0X3NldHJlc3VpZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICAgICAjIERvbid0IGRvIHRoaXMgdGVzdCBpZiBzb21lb25lIGlzIHNpbGx5IGVub3VnaCB0byBydW4gdXMgYXMgcm9vdC4KKyAgICAgICAgICAgIGN1cnJlbnRfdXNlcl9pZHMgPSBwb3NpeC5nZXRyZXN1aWQoKQorICAgICAgICAgICAgaWYgMCBub3QgaW4gY3VycmVudF91c2VyX2lkczoKKyAgICAgICAgICAgICAgICBuZXdfdXNlcl9pZHMgPSAoY3VycmVudF91c2VyX2lkc1swXSsxLCAtMSwgLTEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcG9zaXguc2V0cmVzdWlkLCAqbmV3X3VzZXJfaWRzKQorCisgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3NldHJlc2dpZCcpOgorICAgICAgICBkZWYgdGVzdF9zZXRyZXNnaWQoc2VsZik6CisgICAgICAgICAgICBjdXJyZW50X2dyb3VwX2lkcyA9IHBvc2l4LmdldHJlc2dpZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb3NpeC5zZXRyZXNnaWQoKmN1cnJlbnRfZ3JvdXBfaWRzKSkKKyAgICAgICAgICAgICMgLTEgbWVhbnMgZG9uJ3QgY2hhbmdlIHRoYXQgdmFsdWUuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb3NpeC5zZXRyZXNnaWQoLTEsIC0xLCAtMSkpCisKKyAgICAgICAgZGVmIHRlc3Rfc2V0cmVzZ2lkX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgICAgICMgRG9uJ3QgZG8gdGhpcyB0ZXN0IGlmIHNvbWVvbmUgaXMgc2lsbHkgZW5vdWdoIHRvIHJ1biB1cyBhcyByb290LgorICAgICAgICAgICAgY3VycmVudF9ncm91cF9pZHMgPSBwb3NpeC5nZXRyZXNnaWQoKQorICAgICAgICAgICAgaWYgMCBub3QgaW4gY3VycmVudF9ncm91cF9pZHM6CisgICAgICAgICAgICAgICAgbmV3X2dyb3VwX2lkcyA9IChjdXJyZW50X2dyb3VwX2lkc1swXSsxLCAtMSwgLTEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcG9zaXguc2V0cmVzZ2lkLCAqbmV3X2dyb3VwX2lkcykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdpbml0Z3JvdXBzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgbmVlZHMgb3MuaW5pdGdyb3VwcygpIikKKyAgICBkZWYgdGVzdF9pbml0Z3JvdXBzKHNlbGYpOgorICAgICAgICAjIEl0IHRha2VzIGEgc3RyaW5nIGFuZCBhbiBpbnRlZ2VyOyBjaGVjayB0aGF0IGl0IHJhaXNlcyBhIFR5cGVFcnJvcgorICAgICAgICAjIGZvciBvdGhlciBhcmd1bWVudCBsaXN0cy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC5pbml0Z3JvdXBzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4LmluaXRncm91cHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXguaW5pdGdyb3VwcywgMywgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXguaW5pdGdyb3VwcywgImZvbyIsIDMsIG9iamVjdCgpKQorCisgICAgICAgICMgSWYgYSBub24tcHJpdmlsZWdlZCB1c2VyIGludm9rZXMgaXQsIGl0IHNob3VsZCBmYWlsIHdpdGggT1NFcnJvcgorICAgICAgICAjIEVQRVJNLgorICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgorICAgICAgICAgICAgbmFtZSA9IHB3ZC5nZXRwd3VpZChwb3NpeC5nZXR1aWQoKSkucHdfbmFtZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBvc2l4LmluaXRncm91cHMobmFtZSwgMTMpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRVBFUk0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgT1NFcnJvciB0byBiZSByYWlzZWQgYnkgaW5pdGdyb3VwcyIpCiAKICAgICBkZWYgdGVzdF9zdGF0dmZzKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnc3RhdHZmcycpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHBvc2l4LnN0YXR2ZnMob3MuY3VyZGlyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC5zdGF0dmZzKG9zLmN1cmRpcikpCiAKICAgICBkZWYgdGVzdF9mc3RhdHZmcyhzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2ZzdGF0dmZzJyk6CiAgICAgICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8ocG9zaXguZnN0YXR2ZnMoZnAuZmlsZW5vKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC5mc3RhdHZmcyhmcC5maWxlbm8oKSkpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKIApAQCAtNzIsNyArMTM3LDcgQEAKICAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZkID0gcG9zaXguZHVwKGZwLmZpbGVubygpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGZkLCBpbnQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmZCwgaW50KQogICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCkBAIC0xMzgsMTMgKzIwMywxMyBAQAogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZnN0YXQnKToKICAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhwb3NpeC5mc3RhdChmcC5maWxlbm8oKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LmZzdGF0KGZwLmZpbGVubygpKSkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3Rfc3RhdChzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3N0YXQnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhwb3NpeC5zdGF0KHRlc3Rfc3VwcG9ydC5URVNURk4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LnN0YXQodGVzdF9zdXBwb3J0LlRFU1RGTikpCiAKICAgICBkZWYgX3Rlc3RfYWxsX2Nob3duX2NvbW1vbihzZWxmLCBjaG93bl9mdW5jLCBmaXJzdF9wYXJhbSk6CiAgICAgICAgICIiIkNvbW1vbiBjb2RlIGZvciBjaG93biwgZmNob3duIGFuZCBsY2hvd24gdGVzdHMuIiIiCkBAIC0xNjcsNyArMjMyLDggQEAKICAgICAgICAgIyB0ZXN0IGEgc3VjY2Vzc2Z1bCBjaG93biBjYWxsCiAgICAgICAgIGNob3duX2Z1bmMoZmlyc3RfcGFyYW0sIG9zLmdldHVpZCgpLCBvcy5nZXRnaWQoKSkKIAotICAgIGRlZiBfdGVzdF9jaG93bihzZWxmKToKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnY2hvd24nKSwgInRlc3QgbmVlZHMgb3MuY2hvd24oKSIpCisgICAgZGVmIHRlc3RfY2hvd24oc2VsZik6CiAgICAgICAgICMgcmFpc2UgYW4gT1NFcnJvciBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdAogICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcG9zaXguY2hvd24sIHRlc3Rfc3VwcG9ydC5URVNURk4sIC0xLCAtMSkKQEAgLTE3NiwxMCArMjQyLDggQEAKICAgICAgICAgb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpLmNsb3NlKCkKICAgICAgICAgc2VsZi5fdGVzdF9hbGxfY2hvd25fY29tbW9uKHBvc2l4LmNob3duLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCi0gICAgaWYgaGFzYXR0cihwb3NpeCwgJ2Nob3duJyk6Ci0gICAgICAgIHRlc3RfY2hvd24gPSBfdGVzdF9jaG93bgotCi0gICAgZGVmIF90ZXN0X2ZjaG93bihzZWxmKToKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnZmNob3duJyksICJ0ZXN0IG5lZWRzIG9zLmZjaG93bigpIikKKyAgICBkZWYgdGVzdF9mY2hvd24oc2VsZik6CiAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCiAgICAgICAgICMgcmUtY3JlYXRlIHRoZSBmaWxlCkBAIC0xOTAsMTggKzI1NCwxMyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdGVzdF9maWxlLmNsb3NlKCkKIAotICAgIGlmIGhhc2F0dHIocG9zaXgsICdmY2hvd24nKToKLSAgICAgICAgdGVzdF9mY2hvd24gPSBfdGVzdF9mY2hvd24KLQotICAgIGRlZiBfdGVzdF9sY2hvd24oc2VsZik6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2xjaG93bicpLCAidGVzdCBuZWVkcyBvcy5sY2hvd24oKSIpCisgICAgZGVmIHRlc3RfbGNob3duKHNlbGYpOgogICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgIyBjcmVhdGUgYSBzeW1saW5rCiAgICAgICAgIG9zLnN5bWxpbmsoJy90bXAvZHVtbXktc3ltbGluay10YXJnZXQnLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQogICAgICAgICBzZWxmLl90ZXN0X2FsbF9jaG93bl9jb21tb24ocG9zaXgubGNob3duLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCi0gICAgaWYgaGFzYXR0cihwb3NpeCwgJ2xjaG93bicpOgotICAgICAgICB0ZXN0X2xjaG93biA9IF90ZXN0X2xjaG93bgotCiAgICAgZGVmIHRlc3RfY2hkaXIoc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdjaGRpcicpOgogICAgICAgICAgICAgcG9zaXguY2hkaXIob3MuY3VyZGlyKQpAQCAtMjA5LDIxICsyNjgsMjEgQEAKIAogICAgIGRlZiB0ZXN0X2xzZGlyKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnbHNkaXInKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXN0X3N1cHBvcnQuVEVTVEZOIGluIHBvc2l4LmxzZGlyKG9zLmN1cmRpcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHRlc3Rfc3VwcG9ydC5URVNURk4sIHBvc2l4LmxzZGlyKG9zLmN1cmRpcikpCiAKICAgICBkZWYgdGVzdF9hY2Nlc3Moc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdhY2Nlc3MnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhwb3NpeC5hY2Nlc3ModGVzdF9zdXBwb3J0LlRFU1RGTiwgb3MuUl9PSykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXguYWNjZXNzKHRlc3Rfc3VwcG9ydC5URVNURk4sIG9zLlJfT0spKQogCiAgICAgZGVmIHRlc3RfdW1hc2soc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICd1bWFzaycpOgogICAgICAgICAgICAgb2xkX21hc2sgPSBwb3NpeC51bWFzaygwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uob2xkX21hc2ssIGludCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2xkX21hc2ssIGludCkKICAgICAgICAgICAgIHBvc2l4LnVtYXNrKG9sZF9tYXNrKQogCiAgICAgZGVmIHRlc3Rfc3RyZXJyb3Ioc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdzdHJlcnJvcicpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHBvc2l4LnN0cmVycm9yKDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LnN0cmVycm9yKDApKQogCiAgICAgZGVmIHRlc3RfcGlwZShzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3BpcGUnKToKQEAgLTIzMywxNCArMjkyLDE4IEBACiAKICAgICBkZWYgdGVzdF90ZW1wbmFtKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAndGVtcG5hbScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHBvc2l4LnRlbXBuYW0oKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhwb3NpeC50ZW1wbmFtKG9zLmN1cmRpcikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocG9zaXgudGVtcG5hbShvcy5jdXJkaXIsICdibGFoJykpCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0ZW1wbmFtIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC50ZW1wbmFtKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LnRlbXBuYW0ob3MuY3VyZGlyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXgudGVtcG5hbShvcy5jdXJkaXIsICdibGFoJykpCiAKICAgICBkZWYgdGVzdF90bXBmaWxlKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAndG1wZmlsZScpOgotICAgICAgICAgICAgZnAgPSBwb3NpeC50bXBmaWxlKCkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRtcGZpbGUiLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgZnAgPSBwb3NpeC50bXBmaWxlKCkKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF91dGltZShzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3V0aW1lJyk6CkBAIC0yNzQsMTAgKzMzNywxMCBAQAogICAgICAgICAgICAgICAgIG9zLm1rZGlyKGJhc2VfcGF0aCkKICAgICAgICAgICAgICAgICBvcy5jaGRpcihiYXNlX3BhdGgpCiAgICAgICAgICAgICBleGNlcHQ6Ci0jICAgICAgICAgICAgICAgSnVzdCByZXR1cm5pbmcgbm90aGluZyBpbnN0ZWFkIG9mIHRoZSBUZXN0U2tpcHBlZCBleGNlcHRpb24sCisjICAgICAgICAgICAgICAgSnVzdCByZXR1cm5pbmcgbm90aGluZyBpbnN0ZWFkIG9mIHRoZSBTa2lwVGVzdCBleGNlcHRpb24sCiAjICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUgdGVzdCByZXN1bHRzIGluIEVycm9yIGluIHRoYXQgY2FzZS4KICMgICAgICAgICAgICAgICBJcyB0aGF0IG9rPwotIyAgICAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQsICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIKKyMgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAgICAgdHJ5OgpAQCAtMjg1LDcgKzM0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKGRpcm5hbWUpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZCwgIm1rZGlyIGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IHN1ZmZpY2llbnRseSBkZWVwIGZvciBnZXRjd2QgdGVzdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAibWtkaXIgY2Fubm90IGNyZWF0ZSBkaXJlY3Rvcnkgc3VmZmljaWVudGx5IGRlZXAgZm9yIGdldGN3ZCB0ZXN0IgogCiAgICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKQEAgLTMwNyw1MyArMzcwLDU2IEBACiAgICAgICAgICAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYmFzZV9wYXRoKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2dldGVnaWQnKSwgInRlc3QgbmVlZHMgb3MuZ2V0ZWdpZCgpIikKICAgICBkZWYgdGVzdF9nZXRncm91cHMoc2VsZik6Ci0gICAgICAgIHdpdGggb3MucG9wZW4oJ2lkIC1HIDI+L2Rldi9udWxsJykgYXMgaWRnOgorICAgICAgICB3aXRoIG9zLnBvcGVuKCdpZCAtRycpIGFzIGlkZzoKICAgICAgICAgICAgIGdyb3VwcyA9IGlkZy5yZWFkKCkuc3RyaXAoKQogCiAgICAgICAgIGlmIG5vdCBncm91cHM6Ci0gICAgICAgICAgICAjIFRoaXMgdGVzdCBuZWVkcyAnaWQgLUcnCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJuZWVkIHdvcmtpbmcgJ2lkIC1HJyIpCiAKICAgICAgICAgIyAnaWQgLUcnIGFuZCAnb3MuZ2V0Z3JvdXBzKCknIHNob3VsZCByZXR1cm4gdGhlIHNhbWUKICAgICAgICAgIyBncm91cHMsIGlnbm9yaW5nIG9yZGVyIGFuZCBkdXBsaWNhdGVzLgorICAgICAgICAjICMxMDgyMiAtIGl0IGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgd2hldGhlciBwb3NpeC5nZXRncm91cHMoKQorICAgICAgICAjIGluY2x1ZGVzIHRoZSBlZmZlY3RpdmUgZ2lkIHNvIHdlIGluY2x1ZGUgaXQgYW55d2F5LCBzaW5jZSBpZCAtRyBkb2VzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICAgc2V0KFtpbnQoeCkgZm9yIHggaW4gZ3JvdXBzLnNwbGl0KCldKSwKLSAgICAgICAgICAgICAgICBzZXQocG9zaXguZ2V0Z3JvdXBzKCkpKQorICAgICAgICAgICAgICAgIHNldChwb3NpeC5nZXRncm91cHMoKSArIFtwb3NpeC5nZXRlZ2lkKCldKSkKIAogY2xhc3MgUG9zaXhHcm91cHNUZXN0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGlmIHBvc2l4LmdldHVpZCgpID09IDAgYW5kIGhhc2F0dHIocG9zaXgsICdnZXRncm91cHMnKSBhbmQgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgogCi0gICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuc2F2ZWRfZ3JvdXBzID0gcG9zaXguZ2V0Z3JvdXBzKCkKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIHBvc2l4LmdldHVpZCgpICE9IDA6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibm90IGVub3VnaCBwcml2aWxlZ2VzIikKKyAgICAgICAgaWYgbm90IGhhc2F0dHIocG9zaXgsICdnZXRncm91cHMnKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJuZWVkIHBvc2l4LmdldGdyb3VwcyIpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJnZXRncm91cHMoMikgaXMgYnJva2VuIG9uIE9TWCIpCisgICAgICAgIHNlbGYuc2F2ZWRfZ3JvdXBzID0gcG9zaXguZ2V0Z3JvdXBzKCkKIAotICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnc2V0Z3JvdXBzJyk6Ci0gICAgICAgICAgICAgICAgcG9zaXguc2V0Z3JvdXBzKHNlbGYuc2F2ZWRfZ3JvdXBzKQotICAgICAgICAgICAgZWxpZiBoYXNhdHRyKHBvc2l4LCAnaW5pdGdyb3VwcycpOgotICAgICAgICAgICAgICAgIG5hbWUgPSBwd2QuZ2V0cHd1aWQocG9zaXguZ2V0dWlkKCkpLnB3X25hbWUKLSAgICAgICAgICAgICAgICBwb3NpeC5pbml0Z3JvdXBzKG5hbWUsIHNlbGYuc2F2ZWRfZ3JvdXBzWzBdKQotCi0gICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdpbml0Z3JvdXBzJyk6Ci0gICAgICAgICAgICBkZWYgdGVzdF9pbml0Z3JvdXBzKHNlbGYpOgotICAgICAgICAgICAgICAgICMgZmluZCBtaXNzaW5nIGdyb3VwCi0KLSAgICAgICAgICAgICAgICBncm91cHMgPSBzb3J0ZWQoc2VsZi5zYXZlZF9ncm91cHMpCi0gICAgICAgICAgICAgICAgZm9yIGcxLGcyIGluIHppcChncm91cHNbOi0xXSwgZ3JvdXBzWzE6XSk6Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBnMSArIDEKLSAgICAgICAgICAgICAgICAgICAgaWYgZyA8IGcyOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBnID0gZzIgKyAxCi0gICAgICAgICAgICAgICAgbmFtZSA9IHB3ZC5nZXRwd3VpZChwb3NpeC5nZXR1aWQoKSkucHdfbmFtZQotICAgICAgICAgICAgICAgIHBvc2l4LmluaXRncm91cHMobmFtZSwgZykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGcsIHBvc2l4LmdldGdyb3VwcygpKQotCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnc2V0Z3JvdXBzJyk6Ci0gICAgICAgICAgICBkZWYgdGVzdF9zZXRncm91cHMoc2VsZik6Ci0gICAgICAgICAgICAgICAgZm9yIGdyb3VwcyBpbiBbWzBdLCByYW5nZSgxNildOgotICAgICAgICAgICAgICAgICAgICBwb3NpeC5zZXRncm91cHMoZ3JvdXBzKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChncm91cHMsIHBvc2l4LmdldGdyb3VwcygpKQorICAgICAgICAgICAgcG9zaXguc2V0Z3JvdXBzKHNlbGYuc2F2ZWRfZ3JvdXBzKQorICAgICAgICBlbGlmIGhhc2F0dHIocG9zaXgsICdpbml0Z3JvdXBzJyk6CisgICAgICAgICAgICBuYW1lID0gcHdkLmdldHB3dWlkKHBvc2l4LmdldHVpZCgpKS5wd19uYW1lCisgICAgICAgICAgICBwb3NpeC5pbml0Z3JvdXBzKG5hbWUsIHNlbGYuc2F2ZWRfZ3JvdXBzWzBdKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2luaXRncm91cHMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBuZWVkcyBwb3NpeC5pbml0Z3JvdXBzKCkiKQorICAgIGRlZiB0ZXN0X2luaXRncm91cHMoc2VsZik6CisgICAgICAgICMgZmluZCBtaXNzaW5nIGdyb3VwCisKKyAgICAgICAgZyA9IG1heChzZWxmLnNhdmVkX2dyb3VwcykgKyAxCisgICAgICAgIG5hbWUgPSBwd2QuZ2V0cHd1aWQocG9zaXguZ2V0dWlkKCkpLnB3X25hbWUKKyAgICAgICAgcG9zaXguaW5pdGdyb3VwcyhuYW1lLCBnKQorICAgICAgICBzZWxmLmFzc2VydEluKGcsIHBvc2l4LmdldGdyb3VwcygpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ3NldGdyb3VwcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IG5lZWRzIHBvc2l4LnNldGdyb3VwcygpIikKKyAgICBkZWYgdGVzdF9zZXRncm91cHMoc2VsZik6CisgICAgICAgIGZvciBncm91cHMgaW4gW1swXSwgcmFuZ2UoMTYpXToKKyAgICAgICAgICAgIHBvc2l4LnNldGdyb3Vwcyhncm91cHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChncm91cHMsIHBvc2l4LmdldGdyb3VwcygpKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKaW5kZXggNGNkZjU1MS4uOGJiNzhkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKQEAgLTEsNyArMSw3IEBACiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgdGVzdF9nZW5lcmljcGF0aAogCi1pbXBvcnQgcG9zaXhwYXRoLCBvcywgc3lzCitpbXBvcnQgcG9zaXhwYXRoLCBvcwogZnJvbSBwb3NpeHBhdGggaW1wb3J0IHJlYWxwYXRoLCBhYnNwYXRoLCBkaXJuYW1lLCBiYXNlbmFtZQogCiAjIEFuIGFic29sdXRlIHBhdGggdG8gYSB0ZW1wb3JhcnkgZmlsZW5hbWUgZm9yIHRlc3RpbmcuIFdlIGNhbid0IHJlbHkgb24gVEVTVEZOCkBAIC0yNSwyOSArMjUsMTEgQEAKICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTiArIHN1ZmZpeCkKICAgICAgICAgICAgIHNhZmVfcm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTiArIHN1ZmZpeCkKIAotICAgIGRlZiBhc3NlcnRJcyhzZWxmLCBhLCBiKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgaXMgYikKLQotICAgIGRlZiB0ZXN0X25vcm1jYXNlKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgbm9ybWNhc2UoKSBpcyBpZGVtcG90ZW50Ci0gICAgICAgIHAgPSAiRm9PLy4vQmFSIgotICAgICAgICBwID0gcG9zaXhwYXRoLm5vcm1jYXNlKHApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgcG9zaXhwYXRoLm5vcm1jYXNlKHApKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLm5vcm1jYXNlKQotCiAgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguam9pbigiL2ZvbyIsICJiYXIiLCAiL2JhciIsICJiYXoiKSwgIi9iYXIvYmF6IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguam9pbigiL2ZvbyIsICJiYXIiLCAiYmF6IiksICIvZm9vL2Jhci9iYXoiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5qb2luKCIvZm9vLyIsICJiYXIvIiwgImJhei8iKSwgIi9mb28vYmFyL2Jhei8iKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmpvaW4pCi0KLSAgICBkZWYgdGVzdF9zcGxpdGRyaXZlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGRyaXZlKCIvZm9vL2JhciIpLCAoIiIsICIvZm9vL2JhciIpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNwbGl0ZHJpdmUpCi0KICAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi9mb28vYmFyIiksICgiL2ZvbyIsICJiYXIiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi8iKSwgKCIvIiwgIiIpKQpAQCAtNTUsOCArMzcsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdCgiLy8vL2ZvbyIpLCAoIi8vLy8iLCAiZm9vIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnNwbGl0KCIvL2Zvby8vYmFyIiksICgiLy9mb28iLCAiYmFyIikpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguc3BsaXQpCi0KICAgICBkZWYgc3BsaXRleHRUZXN0KHNlbGYsIHBhdGgsIGZpbGVuYW1lLCBleHQpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGV4dChwYXRoKSwgKGZpbGVuYW1lLCBleHQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGV4dCgiLyIgKyBwYXRoKSwgKCIvIiArIGZpbGVuYW1lLCBleHQpKQpAQCAtNzgsNyArNTgsNiBAQAogICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiLi4iLCAiLi4iLCAiIikKICAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoIi4uLi4uLi4uIiwgIi4uLi4uLi4uIiwgIiIpCiAgICAgICAgIHNlbGYuc3BsaXRleHRUZXN0KCIiLCAiIiwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNwbGl0ZXh0KQogCiAgICAgZGVmIHRlc3RfaXNhYnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzYWJzKCIiKSwgRmFsc2UpCkBAIC04Nyw4ICs2Niw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzYWJzKCIvZm9vL2JhciIpLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2FicygiZm9vL2JhciIpLCBGYWxzZSkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5pc2FicykKLQogICAgIGRlZiB0ZXN0X2Jhc2VuYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5iYXNlbmFtZSgiL2Zvby9iYXIiKSwgImJhciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmJhc2VuYW1lKCIvIiksICIiKQpAQCAtOTYsOCArNzMsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5iYXNlbmFtZSgiLy8vL2ZvbyIpLCAiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguYmFzZW5hbWUoIi8vZm9vLy9iYXIiKSwgImJhciIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguYmFzZW5hbWUpCi0KICAgICBkZWYgdGVzdF9kaXJuYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5kaXJuYW1lKCIvZm9vL2JhciIpLCAiL2ZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmRpcm5hbWUoIi8iKSwgIi8iKQpAQCAtMTA1LDY3ICs4MCw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmRpcm5hbWUoIi8vLy9mb28iKSwgIi8vLy8iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5kaXJuYW1lKCIvL2Zvby8vYmFyIiksICIvL2ZvbyIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguZGlybmFtZSkKLQotICAgIGRlZiB0ZXN0X2NvbW1vbnByZWZpeChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHBvc2l4cGF0aC5jb21tb25wcmVmaXgoW10pLAotICAgICAgICAgICAgIiIKLSAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcG9zaXhwYXRoLmNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW5zb24vc3BhbSIsICIvaG9tZS9zd2VuL3NwYW0iXSksCi0gICAgICAgICAgICAiL2hvbWUvc3dlbiIKLSAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcG9zaXhwYXRoLmNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW4vc3BhbSIsICIvaG9tZS9zd2VuL2VnZ3MiXSksCi0gICAgICAgICAgICAiL2hvbWUvc3dlbi8iCi0gICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHBvc2l4cGF0aC5jb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pLAotICAgICAgICAgICAgIi9ob21lL3N3ZW4vc3BhbSIKLSAgICAgICAgKQotCi0gICAgICAgIHRlc3RsaXN0ID0gWycnLCAnYWJjJywgJ1hiY2QnLCAnWGInLCAnWFknLCAnYWJjZCcsICdhWGMnLCAnYWJkJywgJ2FiJywgJ2FYJywgJ2FiY1gnXQotICAgICAgICBmb3IgczEgaW4gdGVzdGxpc3Q6Ci0gICAgICAgICAgICBmb3IgczIgaW4gdGVzdGxpc3Q6Ci0gICAgICAgICAgICAgICAgcCA9IHBvc2l4cGF0aC5jb21tb25wcmVmaXgoW3MxLCBzMl0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHMxLnN0YXJ0c3dpdGgocCkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHMyLnN0YXJ0c3dpdGgocCkpCi0gICAgICAgICAgICAgICAgaWYgczEgIT0gczI6Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBsZW4ocCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzMVtuOm4rMV0sIHMyW246bisxXSkKLQotICAgIGRlZiB0ZXN0X2dldHNpemUoc2VsZik6Ci0gICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmdldHNpemUodGVzdF9zdXBwb3J0LlRFU1RGTiksIDMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBub3QgZi5jbG9zZWQ6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICBkZWYgdGVzdF90aW1lKHNlbGYpOgotICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKCJmb28iKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiYWIiKQotICAgICAgICAgICAgZi53cml0ZSgiYmFyIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikKLSAgICAgICAgICAgIGQgPSBmLnJlYWQoKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsICJmb29iYXIiKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oCi0gICAgICAgICAgICAgICAgcG9zaXhwYXRoLmdldGN0aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4pIDw9Ci0gICAgICAgICAgICAgICAgcG9zaXhwYXRoLmdldG10aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBub3QgZi5jbG9zZWQ6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0KICAgICBkZWYgdGVzdF9pc2xpbmsoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzbGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiKSwgRmFsc2UpCiAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsICJ3YiIpCkBAIC0xODQsNTYgKzk4LDYgQEAKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguaXNsaW5rKQotCi0gICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5leGlzdHModGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQotICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKCJmb28iKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5leGlzdHModGVzdF9zdXBwb3J0LlRFU1RGTiksIFRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5sZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5leGlzdHMpCi0KLSAgICBkZWYgdGVzdF9pc2RpcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQotICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKCJmb28iKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCi0gICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIG9zLm1rZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKLSAgICAgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmlzZGlyKQotCi0gICAgZGVmIHRlc3RfaXNmaWxlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQotICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKCJmb28iKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIFRydWUpCi0gICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIG9zLm1rZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQotICAgICAgICAgICAgb3Mucm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguaXNkaXIpCi0KICAgICBkZWYgdGVzdF9zYW1lZmlsZShzZWxmKToKICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiwgIndiIikKICAgICAgICAgdHJ5OgpAQCAtMjc1LDggKzEzOSw2IEBACiAgICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNhbWVmaWxlKQotCiAgICAgZGVmIHRlc3Rfc2FtZXN0YXQoc2VsZik6CiAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsICJ3YiIpCiAgICAgICAgIHRyeToKQEAgLTMxNiwxMyArMTc4LDkgQEAKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguc2FtZXN0YXQpCi0KICAgICBkZWYgdGVzdF9pc21vdW50KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc21vdW50KCIvIiksIFRydWUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguaXNtb3VudCkKLQogICAgIGRlZiB0ZXN0X2V4cGFuZHVzZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHVzZXIoImZvbyIpLCAiZm9vIikKICAgICAgICAgdHJ5OgpAQCAtMzMwLDQ3ICsxODgsMjAgQEAKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4vIiksIGJhc2VzdHJpbmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+LyIpLCBiYXNlc3RyaW5nKQogICAgICAgICAgICAgIyBpZiBob21lIGRpcmVjdG9yeSA9PSByb290IGRpcmVjdG9yeSwgdGhpcyB0ZXN0IG1ha2VzIG5vIHNlbnNlCiAgICAgICAgICAgICBpZiBwb3NpeHBhdGguZXhwYW5kdXNlcigifiIpICE9ICcvJzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgICAgICBwb3NpeHBhdGguZXhwYW5kdXNlcigifiIpICsgIi8iLAogICAgICAgICAgICAgICAgICAgICBwb3NpeHBhdGguZXhwYW5kdXNlcigifi8iKQogICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+cm9vdC8iKSwgYmFzZXN0cmluZykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShwb3NpeHBhdGguZXhwYW5kdXNlcigifmZvby8iKSwgYmFzZXN0cmluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn5yb290LyIpLCBiYXNlc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+Zm9vLyIpLCBiYXNlc3RyaW5nKQogCiAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgotICAgICAgICAgICAgICAgIGVudi5zZXQoJ0hPTUUnLCAnLycpCisgICAgICAgICAgICAgICAgZW52WydIT01FJ10gPSAnLycKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+IiksICIvIikKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5leHBhbmR1c2VyKQotCi0gICAgZGVmIHRlc3RfZXhwYW5kdmFycyhzZWxmKToKLSAgICAgICAgb2xkZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJmb28iXSA9ICJiYXIiCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJ7Zm9vIl0gPSAiYmF6MSIKLSAgICAgICAgICAgIG9zLmVudmlyb25bIntmb299Il0gPSAiYmF6MiIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoImZvbyIpLCAiZm9vIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiRmb28gYmFyIiksICJiYXIgYmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiR7Zm9vfWJhciIpLCAiYmFyYmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiRbZm9vXWJhciIpLCAiJFtmb29dYmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiRiYXIgYmFyIiksICIkYmFyIGJhciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCIkP2JhciIpLCAiJD9iYXIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycygiJHtmb299YmFyIiksICJiYXJiYXIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycygiJGZvb31iYXIiKSwgImJhcn1iYXIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycygiJHtmb28iKSwgIiR7Zm9vIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiR7e2Zvb319IiksICJiYXoxfSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCIkZm9vJGZvbyIpLCAiYmFyYmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiRiYXIkYmFyIiksICIkYmFyJGJhciIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKLSAgICAgICAgICAgIG9zLmVudmlyb24udXBkYXRlKG9sZGVudikKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5leHBhbmR2YXJzKQotCiAgICAgZGVmIHRlc3Rfbm9ybXBhdGgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLm5vcm1wYXRoKCIiKSwgIi4iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5ub3JtcGF0aCgiLyIpLCAiLyIpCkBAIC0zODAsNDMgKzIxMSw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLm5vcm1wYXRoKCIvLy9mb28vLi8vYmFyLy8uLy8uLi8vLi8vYmF6IiksICIvZm9vL2JheiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLm5vcm1wYXRoKCIvLy8uLi8vLi9mb28vLi8vYmFyIiksICIvZm9vL2JhciIpCiAKLSAgICAgICAgIyBJc3N1ZSA1ODI3OiBNYWtlIHN1cmUgbm9ybXBhdGggcHJlc2VydmVzIHVuaWNvZGUKLSAgICAgICAgZm9yIHBhdGggaW4gKHUnJywgdScuJywgdScvJywgdSdcXCcsIHUnLy8vZm9vLy4vL2Jhci8vJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwb3NpeHBhdGgubm9ybXBhdGgocGF0aCksIHVuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3JtcGF0aCgpIHJldHVybmVkIHN0ciBpbnN0ZWFkIG9mIHVuaWNvZGUnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLm5vcm1wYXRoKQotCi0gICAgZGVmIHRlc3RfYWJzcGF0aChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJmb28iIGluIHBvc2l4cGF0aC5hYnNwYXRoKCJmb28iKSkKLQotICAgICAgICAjIElzc3VlIDM0MjY6IGNoZWNrIHRoYXQgYWJzcGF0aCByZXR1bnMgdW5pY29kZSB3aGVuIHRoZSBhcmcgaXMgdW5pY29kZQotICAgICAgICAjIGFuZCBzdHIgd2hlbiBpdCdzIHN0ciwgd2l0aCBib3RoIEFTQ0lJIGFuZCBub24tQVNDSUkgY3dkcwotICAgICAgICBzYXZlZF9jd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICBjd2RzID0gWydjd2QnXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjd2RzLmFwcGVuZCh1J1x4ZTd3XHhmMCcuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAnYXNjaWknKSkKLSAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MgIyB0aGUgY3dkIGNhbid0IGJlIGVuY29kZWQgLS0gdGVzdCB3aXRoIGFzY2lpIGN3ZCBvbmx5Ci0gICAgICAgIGZvciBjd2QgaW4gY3dkczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5ta2Rpcihjd2QpCi0gICAgICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQotICAgICAgICAgICAgICAgIGZvciBwYXRoIGluICgnJywgJ2ZvbycsICdmXHhmMlx4ZjInLCAnL2ZvbycsICdDOlxcJyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHBvc2l4cGF0aC5hYnNwYXRoKHBhdGgpLCBzdHIpKQotICAgICAgICAgICAgICAgIGZvciB1cGF0aCBpbiAodScnLCB1J2Z1dScsIHUnZlx4ZjlceGY5JywgdScvZnV1JywgdSdVOlxcJyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHBvc2l4cGF0aC5hYnNwYXRoKHVwYXRoKSwgdW5pY29kZSkpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG9zLmNoZGlyKHNhdmVkX2N3ZCkKLSAgICAgICAgICAgICAgICBvcy5ybWRpcihjd2QpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguYWJzcGF0aCkKLQotICAgIGRlZiB0ZXN0X3JlYWxwYXRoKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oImZvbyIgaW4gcmVhbHBhdGgoImZvbyIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5yZWFscGF0aCkKLQogICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6CiAgICAgICAgIGRlZiB0ZXN0X3JlYWxwYXRoX2Jhc2ljKHNlbGYpOgogICAgICAgICAgICAgIyBCYXNpYyBvcGVyYXRpb24uCkBAIC00ODYsNyArMjgwLDggQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiArICIvbGluay15Ly4uIiksIEFCU1RGTiArICIvayIpCiAgICAgICAgICAgICAgICAgIyBSZWxhdGl2ZSBwYXRoLgogICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUoQUJTVEZOKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKGJhc2VuYW1lKEFCU1RGTikgKyAiL2xpbmsteS8uLiIpLCBBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZW5hbWUoQUJTVEZOKSArICIvbGluay15Ly4uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQlNURk4gKyAiL2siKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKEFCU1RGTiArICIvbGluay15IikKQEAgLTUyNywxMSArMzIyLDI3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCJhL2IiLCAiLi4vYyIpLCAiLi4vIitjdXJkaXIrIi9hL2IiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiYSIsICJiL2MiKSwgIi4uLy4uL2EiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiYSIsICJhIiksICIuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi9mb28vYmFyL2JhdCIsICIveC95L3oiKSwgJy4uLy4uLy4uL2Zvby9iYXIvYmF0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi9mb28vYmFyL2JhdCIsICIvZm9vL2JhciIpLCAnYmF0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi9mb28vYmFyL2JhdCIsICIvIiksICdmb28vYmFyL2JhdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvIiwgIi9mb28vYmFyL2JhdCIpLCAnLi4vLi4vLi4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi94IiksICcuLi9mb28vYmFyL2JhdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIveCIsICIvZm9vL2Jhci9iYXQiKSwgJy4uLy4uLy4uL3gnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiLyIsICIvIiksICcuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi9hIiwgIi9hIiksICcuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi9hL2IiLCAiL2EvYiIpLCAnLicpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5nZXRjd2QgPSByZWFsX2dldGN3ZAogCisKK2NsYXNzIFBvc2l4Q29tbW9uVGVzdCh0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QpOgorICAgIHBhdGhtb2R1bGUgPSBwb3NpeHBhdGgKKyAgICBhdHRyaWJ1dGVzID0gWydyZWxwYXRoJywgJ3NhbWVmaWxlJywgJ3NhbWVvcGVuZmlsZScsICdzYW1lc3RhdCddCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUG9zaXhQYXRoVGVzdCkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFBvc2l4UGF0aFRlc3QsIFBvc2l4Q29tbW9uVGVzdCkKKwogCiBpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3cucHkgYi9MaWIvdGVzdC90ZXN0X3Bvdy5weQppbmRleCAzNjFhNDc1Li4xZWU2N2JjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Bvdy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvdy5weQpAQCAtNSwxNyArNSwxNyBAQAogICAgIGRlZiBwb3d0ZXN0KHNlbGYsIHR5cGUpOgogICAgICAgICBpZiB0eXBlICE9IGZsb2F0OgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTEwMDAsIDEwMDApOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdyh0eXBlKGkpLCAwKSwgMSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3codHlwZShpKSwgMSksIHR5cGUoaSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KHR5cGUoMCksIDEpLCB0eXBlKDApKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdyh0eXBlKDEpLCAxKSwgdHlwZSgxKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyh0eXBlKGkpLCAwKSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyh0eXBlKGkpLCAxKSwgdHlwZShpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyh0eXBlKDApLCAxKSwgdHlwZSgwKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyh0eXBlKDEpLCAxKSwgdHlwZSgxKSkKIAogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTEwMCwgMTAwKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3codHlwZShpKSwgMyksIGkqaSppKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KHR5cGUoaSksIDMpLCBpKmkqaSkKIAogICAgICAgICAgICAgcG93MiA9IDEKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsMzEpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdygyLCBpKSwgcG93MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLCBpKSwgcG93MikKICAgICAgICAgICAgICAgICBpZiBpICE9IDMwIDogcG93MiA9IHBvdzIqMgogCiAgICAgICAgICAgICBmb3Igb3RoZXJ0eXBlIGluIGludCwgbG9uZzoKQEAgLTY3LDMwICs2NywzMCBAQAogCiAgICAgZGVmIHRlc3Rfb3RoZXIoc2VsZik6CiAgICAgICAgICMgT3RoZXIgdGVzdHMtLSBub3QgdmVyeSBzeXN0ZW1hdGljCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdygzLDMpICUgOCwgcG93KDMsMyw4KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KDMsMykgJSAtOCwgcG93KDMsMywtOCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdygzLDIpICUgLTIsIHBvdygzLDIsLTIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3coLTMsMykgJSA4LCBwb3coLTMsMyw4KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KC0zLDMpICUgLTgsIHBvdygtMywzLC04KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KDUsMikgJSAtOCwgcG93KDUsMiwtOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDMsMykgJSA4LCBwb3coMywzLDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygzLDMpICUgLTgsIHBvdygzLDMsLTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygzLDIpICUgLTIsIHBvdygzLDIsLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtMywzKSAlIDgsIHBvdygtMywzLDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtMywzKSAlIC04LCBwb3coLTMsMywtOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDUsMikgJSAtOCwgcG93KDUsMiwtOCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KDNMLDNMKSAlIDgsIHBvdygzTCwzTCw4KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KDNMLDNMKSAlIC04LCBwb3coM0wsM0wsLTgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3coM0wsMikgJSAtMiwgcG93KDNMLDIsLTIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3coLTNMLDNMKSAlIDgsIHBvdygtM0wsM0wsOCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdygtM0wsM0wpICUgLTgsIHBvdygtM0wsM0wsLTgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3coNUwsMikgJSAtOCwgcG93KDVMLDIsLTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygzTCwzTCkgJSA4LCBwb3coM0wsM0wsOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDNMLDNMKSAlIC04LCBwb3coM0wsM0wsLTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygzTCwyKSAlIC0yLCBwb3coM0wsMiwtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KC0zTCwzTCkgJSA4LCBwb3coLTNMLDNMLDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtM0wsM0wpICUgLTgsIHBvdygtM0wsM0wsLTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyg1TCwyKSAlIC04LCBwb3coNUwsMiwtOCkpCiAKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTEwLCAxMSk6CiAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgwLCA2KToKICAgICAgICAgICAgICAgICBmb3IgayBpbiByYW5nZSgtNywgMTEpOgogICAgICAgICAgICAgICAgICAgICBpZiBqID49IDAgYW5kIGsgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3coaSxqKSAlIGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KGksaixrKQogICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICBpZiBqID49IDAgYW5kIGsgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3cobG9uZyhpKSxqKSAlIGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KGxvbmcoaSksaixrKQogICAgICAgICAgICAgICAgICAgICAgICAgKQpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgZGVmIHRlc3RfYnVnNzA1MjMxKHNlbGYpOgogICAgICAgICAjIC0xLjAgcmFpc2VkIHRvIGFuIGludGVnZXIgc2hvdWxkIG5ldmVyIGJsb3cgdXAuICBJdCBkaWQgaWYgdGhlCiAgICAgICAgICMgcGxhdGZvcm0gcG93KCkgd2FzIGJ1Z2d5LCBhbmQgUHl0aG9uIGRpZG4ndCB3b3JtIGFyb3VuZCBpdC4KLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgYSA9IC0xLjAKICAgICAgICAgIyBUaGUgbmV4dCB0d28gdGVzdHMgY2FuIHN0aWxsIGZhaWwgaWYgdGhlIHBsYXRmb3JtIGZsb29yKCkKICAgICAgICAgIyBmdW5jdGlvbiBkb2Vzbid0IHRyZWF0IGFsbCBsYXJnZSBpbnB1dHMgYXMgaW50ZWdlcnMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5IGIvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkKaW5kZXggZjZkY2M4Yy4uZTAxMzdkZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkKQEAgLTExNywxMCArMTE3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgIHt9LCBkaWN0MigpLCBkaWN0MygpLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUsIHBwcmludCwKICAgICAgICAgICAgICAgICAgICAgICAgLTYsIC02TCwgLTYtNmosIC0xLjUsICJ4IiwgdW5pKCJ4IiksICgzLCksIFszXSwgezM6IDZ9LAotICAgICAgICAgICAgICAgICAgICAgICAoMSwyKSwgWzMsNF0sIHs1OiA2LCA3OiA4fSwKKyAgICAgICAgICAgICAgICAgICAgICAgKDEsMiksIFszLDRdLCB7NTogNn0sCiAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlMigoMSwyKSksIHR1cGxlMygoMSwyKSksIHR1cGxlMyhyYW5nZSgxMDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgWzMsNF0sIGxpc3QyKFszLDRdKSwgbGlzdDMoWzMsNF0pLCBsaXN0MyhyYW5nZSgxMDApKSwKLSAgICAgICAgICAgICAgICAgICAgICAgezU6IDYsIDc6IDh9LCBkaWN0Mih7NTogNn0pLCBkaWN0Myh7NTogNn0pLAorICAgICAgICAgICAgICAgICAgICAgICBkaWN0Mih7NTogNn0pLCBkaWN0Myh7NTogNn0pLAogICAgICAgICAgICAgICAgICAgICAgICByYW5nZSgxMCwgLTExLCAtMSkKICAgICAgICAgICAgICAgICAgICAgICApOgogICAgICAgICAgICAgbmF0aXZlID0gcmVwcihzaW1wbGUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ByaW50LnB5IGIvTGliL3Rlc3QvdGVzdF9wcmludC5weQppbmRleCAzOTRhMmYxLi43NTdmOTBmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKQEAgLTgsNyArOCw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKLWltcG9ydCBzeXMKIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiAKIE5vdERlZmluZWQgPSBvYmplY3QoKQpAQCAtMTI4LDExICsxMjcsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Jycuam9pbihidWYuYnVmKSwgJ2hpIG5vdGhpbmdcbicpCiAgICAgICAgIGJ1ZiA9IFJlY29yZGVyKEZhbHNlKQogICAgICAgICBwcmludCgnaGknLCAnYnllJywgZW5kPXUnXG4nLCBmaWxlPWJ1ZikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYnVmLmJ1ZlsxXSwgdW5pY29kZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJ1Zi5idWZbM10sIHVuaWNvZGUpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYnVmLmJ1ZlsxXSwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJ1Zi5idWZbM10sIHVuaWNvZGUpCiAgICAgICAgIGRlbCBidWYuYnVmWzpdCiAgICAgICAgIHByaW50KHNlcD11J3gnLCBmaWxlPWJ1ZikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYnVmLmJ1ZlstMV0sIHVuaWNvZGUpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYnVmLmJ1ZlstMV0sIHVuaWNvZGUpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggMDAxNmQ1MS4uYWE5M2QzOQotLS0gYS9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CkBAIC0xLDYgKzEsNSBAQAogIiIiVGVzdCBzdWl0ZSBmb3IgdGhlIHByb2ZpbGUgbW9kdWxlLiIiIgogCi1pbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBwc3RhdHMKIGltcG9ydCB1bml0dGVzdApAQCAtNTcsNyArNTYsNyBAQAogICAgICAgICAgICAgc3RhdHMgPSBwc3RhdHMuU3RhdHMocHJvZiwgc3RyZWFtPXMpCiAgICAgICAgICAgICBzdGF0cy5wcmludF9zdGF0cygpCiAgICAgICAgICAgICByZXMgPSBzLmdldHZhbHVlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmV4cGVjdGVkX2xpc3Rfc29ydF9vdXRwdXQgaW4gcmVzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmV4cGVjdGVkX2xpc3Rfc29ydF9vdXRwdXQsIHJlcywKICAgICAgICAgICAgICAgICAiUHJvZmlsaW5nIHswIXJ9IGRpZG4ndCByZXBvcnQgbGlzdC5zb3J0OlxuezF9Ii5mb3JtYXQoc3RtdCwgcmVzKSkKIAogCkBAIC05NCw3ICs5Myw3IEBACiAjIERvbid0IHJlbW92ZSB0aGlzIGNvbW1lbnQuIEV2ZXJ5dGhpbmcgYmVsb3cgaXQgaXMgYXV0by1nZW5lcmF0ZWQuCiAjLS1jdXQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUHJvZmlsZVRlc3QuZXhwZWN0ZWRfb3V0cHV0WydwcmludF9zdGF0cyddID0gIiIiXAotICAgICAgICAgMTI3IGZ1bmN0aW9uIGNhbGxzICgxMDcgcHJpbWl0aXZlIGNhbGxzKSBpbiA5OTkuNzQ5IENQVSBzZWNvbmRzCisgICAgICAgICAxMjcgZnVuY3Rpb24gY2FsbHMgKDEwNyBwcmltaXRpdmUgY2FsbHMpIGluIDk5OS43NDkgc2Vjb25kcwogCiAgICBPcmRlcmVkIGJ5OiBzdGFuZGFyZCBuYW1lCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJvcGVydHkucHkgYi9MaWIvdGVzdC90ZXN0X3Byb3BlcnR5LnB5CmluZGV4IDdhODAwM2YuLmU1ZmMxNzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHJvcGVydHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcm9wZXJ0eS5weQpAQCAtMSw2ICsxLDcgQEAKICMgVGVzdCBjYXNlIGZvciBwcm9wZXJ0eQogIyBtb3JlIHRlc3RzIGFyZSBpbiB0ZXN0X2Rlc2NyCiAKK2ltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKQEAgLTg2LDEyICs4NywxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2Uuc3BhbSwgMTApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgMTApCiAgICAgICAgIGRlbGF0dHIoYmFzZSwgInNwYW0iKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGhhc2F0dHIoYmFzZSwgInNwYW0iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBoYXNhdHRyKGJhc2UsICJfc3BhbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIoYmFzZSwgInNwYW0iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGJhc2UsICJfc3BhbSIpKQogICAgICAgICBiYXNlLnNwYW0gPSAyMAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2Uuc3BhbSwgMjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgMjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fX2NsYXNzX18uc3BhbS5fX2RvY19fLCAiQmFzZUNsYXNzLmdldHRlciIpCiAKICAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3Moc2VsZik6CiAgICAgICAgICMgc2VlICMxNjIwCkBAIC05OSwxNCArOTksMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlHZXQsIGdldGF0dHIsIHN1YiwgInNwYW0iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eVNldCwgc2V0YXR0ciwgc3ViLCAic3BhbSIsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5RGVsLCBkZWxhdHRyLCBzdWIsICJzcGFtIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X3Byb3BlcnR5X2RlY29yYXRvcl9zdWJjbGFzc19kb2Moc2VsZik6CisgICAgICAgIHN1YiA9IFN1YkNsYXNzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIuX19jbGFzc19fLnNwYW0uX19kb2NfXywgIlN1YkNsYXNzLmdldHRlciIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfYmFzZWNsYXNzX2RvYyhzZWxmKToKKyAgICAgICAgYmFzZSA9IEJhc2VDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fX2NsYXNzX18uc3BhbS5fX2RvY19fLCAiQmFzZUNsYXNzLmdldHRlciIpCisKICAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfZG9jKHNlbGYpOgogICAgICAgICBiYXNlID0gUHJvcGVydHlEb2NCYXNlKCkKICAgICAgICAgc3ViID0gUHJvcGVydHlEb2NTdWIoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLnNwYW0uX19kb2NfXywgInNwYW0gc3BhbSBzcGFtIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIuX19jbGFzc19fLnNwYW0uX19kb2NfXywgInNwYW0gc3BhbSBzcGFtIikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X3Byb3BlcnR5X2dldHRlcl9kb2Nfb3ZlcnJpZGUoc2VsZik6CiAgICAgICAgIG5ld2dldHRlcnN1YiA9IFByb3BlcnR5U3ViTmV3R2V0dGVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdnZXR0ZXJzdWIuc3BhbSwgNSkKQEAgLTEyNiwxNiArMTM5LDYgQEAKIAogY2xhc3MgUHJvcGVydHlTdWJjbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiB0ZXN0X2RvY3N0cmluZ19jb3B5KHNlbGYpOgotICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKLSAgICAgICAgICAgIEBQcm9wZXJ0eVN1YgotICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6Ci0gICAgICAgICAgICAgICAgIiIic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIiIiCi0gICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIEZvby5zcGFtLl9fZG9jX18sCi0gICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIikKLQogICAgIGRlZiB0ZXN0X3Nsb3RzX2RvY3N0cmluZ19jb3B5X2V4Y2VwdGlvbihzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CkBAIC0xNDgsNiArMTUxLDIwIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0dHJpYnV0ZUVycm9yIG5vdCByYWlzZWQiKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2NvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gcHJvcGVydHkgc3ViY2xhc3MiIiIKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgRm9vLnNwYW0uX19kb2NfXywKKyAgICAgICAgICAgICJzcGFtIHdyYXBwZWQgaW4gcHJvcGVydHkgc3ViY2xhc3MiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPD0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RfcHJvcGVydHlfc2V0dGVyX2NvcGllc19nZXR0ZXJfZG9jc3RyaW5nKHNlbGYpOgogICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKTogc2VsZi5fc3BhbSA9IDEKQEAgLTE3OSw2ICsxOTYsOCBAQAogICAgICAgICAgICAgRm9vU3ViLnNwYW0uX19kb2NfXywKICAgICAgICAgICAgICJzcGFtIHdyYXBwZWQgaW4gcHJvcGVydHkgc3ViY2xhc3MiKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPD0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RfcHJvcGVydHlfbmV3X2dldHRlcl9uZXdfZG9jc3RyaW5nKHNlbGYpOgogCiAgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wdHkucHkgYi9MaWIvdGVzdC90ZXN0X3B0eS5weQppbmRleCBjMDAyNDRmLi4wNWFiNTk4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B0eS5weQpAQCAtMSwxMCArMSwxNCBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCisKKyNTa2lwIHRoZXNlIHRlc3RzIGlmIGVpdGhlciBmY250bCBvciB0ZXJtaW9zIGlzIG5vdCBhdmFpbGFibGUKK2ZjbnRsID0gaW1wb3J0X21vZHVsZSgnZmNudGwnKQoraW1wb3J0X21vZHVsZSgndGVybWlvcycpCisKIGltcG9ydCBlcnJubwotaW1wb3J0IGZjbnRsCiBpbXBvcnQgcHR5CiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBzaWduYWwKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RTa2lwcGVkLCBydW5fdW5pdHRlc3QKIGltcG9ydCB1bml0dGVzdAogCiBURVNUX1NUUklOR18xID0gIkkgd2lzaCB0byBidXkgYSBmaXNoIGxpY2Vuc2UuXG4iCkBAIC02OSw3ICs3Myw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiR290IHNsYXZlX2ZkICclZCciICUgc2xhdmVfZmQpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyAiIEFuIG9wdGlvbmFsIGZlYXR1cmUgY291bGQgbm90IGJlIGltcG9ydGVkICIgLi4uID8KLSAgICAgICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkLCAiUHNldWRvLXRlcm1pbmFscyAoc2VlbWluZ2x5KSBub3QgZnVuY3Rpb25hbC4iCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIlBzZXVkby10ZXJtaW5hbHMgKHNlZW1pbmdseSkgbm90IGZ1bmN0aW9uYWwuIgogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5pc2F0dHkoc2xhdmVfZmQpLCAnc2xhdmVfZmQgaXMgbm90IGEgdHR5JykKIApAQCAtODIsNyArODYsNyBAQAogICAgICAgICBmY250bC5mY250bChtYXN0ZXJfZmQsIGZjbnRsLkZfU0VURkwsIG9yaWdfZmxhZ3MgfCBvcy5PX05PTkJMT0NLKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzMSA9IG9zLnJlYWQobWFzdGVyX2ZkLCAxMDI0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJycsIHMxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgczEpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUdBSU46CiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTkyLDE0ICs5NiwxNCBAQAogICAgICAgICBkZWJ1ZygiV3JpdGluZyB0byBzbGF2ZV9mZCIpCiAgICAgICAgIG9zLndyaXRlKHNsYXZlX2ZkLCBURVNUX1NUUklOR18xKQogICAgICAgICBzMSA9IG9zLnJlYWQobWFzdGVyX2ZkLCAxMDI0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnSSB3aXNoIHRvIGJ1eSBhIGZpc2ggbGljZW5zZS5cbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZV9vdXRwdXQoczEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdJIHdpc2ggdG8gYnV5IGEgZmlzaCBsaWNlbnNlLlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVfb3V0cHV0KHMxKSkKIAogICAgICAgICBkZWJ1ZygiV3JpdGluZyBjaHVua2VkIG91dHB1dCIpCiAgICAgICAgIG9zLndyaXRlKHNsYXZlX2ZkLCBURVNUX1NUUklOR18yWzo1XSkKICAgICAgICAgb3Mud3JpdGUoc2xhdmVfZmQsIFRFU1RfU1RSSU5HXzJbNTpdKQogICAgICAgICBzMiA9IG9zLnJlYWQobWFzdGVyX2ZkLCAxMDI0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnRm9yIG15IHBldCBmaXNoLCBFcmljLlxuJywgbm9ybWFsaXplX291dHB1dChzMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvciBteSBwZXQgZmlzaCwgRXJpYy5cbicsIG5vcm1hbGl6ZV9vdXRwdXQoczIpKQogCiAgICAgICAgIG9zLmNsb3NlKHNsYXZlX2ZkKQogICAgICAgICBvcy5jbG9zZShtYXN0ZXJfZmQpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B3ZC5weSBiL0xpYi90ZXN0L3Rlc3RfcHdkLnB5CmluZGV4IDI1NWEzNGMuLjY3ZTExYjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHdkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHdkLnB5CkBAIC0xLDcgKzEsOCBAQAoraW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCi1pbXBvcnQgcHdkCitwd2QgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgncHdkJykKIAogY2xhc3MgUHdkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTEzLDE5ICsxNCwxOSBAQAogICAgICAgICBmb3IgZSBpbiBlbnRyaWVzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZSksIDcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbMF0sIGUucHdfbmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGUucHdfbmFtZSwgYmFzZXN0cmluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19uYW1lLCBiYXNlc3RyaW5nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzFdLCBlLnB3X3Bhc3N3ZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGUucHdfcGFzc3dkLCBiYXNlc3RyaW5nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLnB3X3Bhc3N3ZCwgYmFzZXN0cmluZykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVsyXSwgZS5wd191aWQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShlLnB3X3VpZCwgaW50KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLnB3X3VpZCwgaW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzNdLCBlLnB3X2dpZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGUucHdfZ2lkLCBpbnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfZ2lkLCBpbnQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbNF0sIGUucHdfZ2Vjb3MpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShlLnB3X2dlY29zLCBiYXNlc3RyaW5nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLnB3X2dlY29zLCBiYXNlc3RyaW5nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzVdLCBlLnB3X2RpcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGUucHdfZGlyLCBiYXNlc3RyaW5nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLnB3X2RpciwgYmFzZXN0cmluZykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVs2XSwgZS5wd19zaGVsbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGUucHdfc2hlbGwsIGJhc2VzdHJpbmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfc2hlbGwsIGJhc2VzdHJpbmcpCiAKICAgICAgICAgICAgICMgVGhlIGZvbGxvd2luZyB3b24ndCB3b3JrLCBiZWNhdXNlIG9mIGR1cGxpY2F0ZSBlbnRyaWVzCiAgICAgICAgICAgICAjIGZvciBvbmUgdWlkCkBAIC00Myw4ICs0NCw4IEBACiAgICAgICAgIGZvciBlIGluIGVudHJpZXM6CiAgICAgICAgICAgICBpZiBub3QgZVswXSBvciBlWzBdID09ICcrJzoKICAgICAgICAgICAgICAgICBjb250aW51ZSAjIHNraXAgTklTIGVudHJpZXMgZXRjLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHB3ZC5nZXRwd25hbShlLnB3X25hbWUpIGluIGVudHJpZXNieW5hbWVbZS5wd19uYW1lXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhwd2QuZ2V0cHd1aWQoZS5wd191aWQpIGluIGVudHJpZXNieXVpZFtlLnB3X3VpZF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHB3ZC5nZXRwd25hbShlLnB3X25hbWUpLCBlbnRyaWVzYnluYW1lW2UucHdfbmFtZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHB3ZC5nZXRwd3VpZChlLnB3X3VpZCksIGVudHJpZXNieXVpZFtlLnB3X3VpZF0pCiAKICAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHdkLmdldHB3dWlkKQpAQCAtODMsMTEgKzg0LDEzIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHB3ZC5nZXRwd25hbSwgZmFrZW5hbWUpCiAKLSAgICAgICAgIyBDaG9vc2UgYSBub24tZXhpc3RlbnQgdWlkLgotICAgICAgICBmYWtldWlkID0gNDEyNwotICAgICAgICB3aGlsZSBmYWtldWlkIGluIGJ5dWlkczoKLSAgICAgICAgICAgIGZha2V1aWQgPSAoZmFrZXVpZCAqIDMpICUgMHgxMDAwMAotCisgICAgICAgICMgSW4gc29tZSBjYXNlcywgYnl1aWRzIGlzbid0IGEgY29tcGxldGUgbGlzdCBvZiBhbGwgdXNlcnMgaW4gdGhlCisgICAgICAgICMgc3lzdGVtLCBzbyBpZiB3ZSB0cnkgdG8gcGljayBhIHZhbHVlIG5vdCBpbiBieXVpZHMgKHZpYSBhIHBlcnR1cmJpbmcKKyAgICAgICAgIyBsb29wLCBzYXkpLCBwd2QuZ2V0cHd1aWQoKSBtaWdodCBzdGlsbCBiZSBhYmxlIHRvIGZpbmQgZGF0YSBmb3IgdGhhdAorICAgICAgICAjIHVpZC4gVXNpbmcgc3lzLm1heGludCBtYXkgcHJvdm9rZSB0aGUgc2FtZSBwcm9ibGVtcywgYnV0IGhvcGVmdWxseQorICAgICAgICAjIGl0IHdpbGwgYmUgYSBtb3JlIHJlcGVhdGFibGUgZmFpbHVyZS4KKyAgICAgICAgZmFrZXVpZCA9IHN5cy5tYXhpbnQKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmYWtldWlkLCBieXVpZHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBwd2QuZ2V0cHd1aWQsIGZha2V1aWQpCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHkza3dhcm4ucHkgYi9MaWIvdGVzdC90ZXN0X3B5M2t3YXJuLnB5CmluZGV4IDNhMTIyNTEuLjJhZmQ4YTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHkza3dhcm4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weTNrd2Fybi5weQpAQCAtMSwxMyArMSwxMCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAoY2hlY2tfd2FybmluZ3MsIENsZWFuSW1wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RTa2lwcGVkLCBydW5fdW5pdHRlc3QpCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjaGVja19weTNrX3dhcm5pbmdzLCBDbGVhbkltcG9ydCwgcnVuX3VuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIAotZnJvbSBjb250ZXh0bGliIGltcG9ydCBuZXN0ZWQKLQogaWYgbm90IHN5cy5weTNrd2FybmluZzoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCgnJXMgbXVzdCBiZSBydW4gd2l0aCB0aGUgLTMgZmxhZycgJSBfX25hbWVfXykKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnJXMgbXVzdCBiZSBydW4gd2l0aCB0aGUgLTMgZmxhZycgJSBfX25hbWVfXykKIAogdHJ5OgogICAgIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IF9fd2FybmluZ3JlZ2lzdHJ5X18gYXMgX3JlZ2lzdHJ5CkBAIC00NCw4OCArNDEsNjggQEAKIAogICAgIGRlZiB0ZXN0X2JhY2txdW90ZShzZWxmKToKICAgICAgICAgZXhwZWN0ZWQgPSAnYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQgaW4gMy54OyB1c2UgcmVwcigpJwotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKChleHBlY3RlZCwgU3ludGF4V2FybmluZykpOgogICAgICAgICAgICAgZXhlYyAiYDJgIiBpbiB7fQotICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9wYXJlbl9hcmdfbmFtZXMoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gJ3BhcmVudGhlc2l6ZWQgYXJndW1lbnQgbmFtZXMgYXJlIGludmFsaWQgaW4gMy54JwogICAgICAgICBkZWYgY2hlY2socyk6Ci0gICAgICAgICAgICBleGVjIHMgaW4ge30KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6Ci0gICAgICAgICAgICBjaGVjaygiZGVmIGYoKHgpKTogcGFzcyIpCi0gICAgICAgICAgICBjaGVjaygiZGVmIGYoKCgoeCkpKSwgKHkpKTogcGFzcyIpCi0gICAgICAgICAgICBjaGVjaygiZGVmIGYoKHgpLCAoKCh5KSkpLCBtPTMyKTogcGFzcyIpCi0gICAgICAgICAgICAjIFNvbWV0aGluZyBsaWtlIGRlZiBmKChhLCAoYikpKTogcGFzcyB3aWxsIHJhaXNlIHRoZSB0dXBsZQotICAgICAgICAgICAgIyB1bnBhY2tpbmcgd2FybmluZy4KKyAgICAgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoZXhwZWN0ZWQsIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgICAgICAgICBleGVjIHMgaW4ge30KKyAgICAgICAgY2hlY2soImRlZiBmKCh4KSk6IHBhc3MiKQorICAgICAgICBjaGVjaygiZGVmIGYoKCgoeCkpKSwgKHkpKTogcGFzcyIpCisgICAgICAgIGNoZWNrKCJkZWYgZigoeCksICgoKHkpKSksIG09MzIpOiBwYXNzIikKKyAgICAgICAgIyBTb21ldGhpbmcgbGlrZSBkZWYgZigoYSwgKGIpKSk6IHBhc3Mgd2lsbCByYWlzZSB0aGUgdHVwbGUKKyAgICAgICAgIyB1bnBhY2tpbmcgd2FybmluZy4KIAotICAgIGRlZiB0ZXN0X2Jvb2xfYXNzaWduKHNlbGYpOgorICAgIGRlZiB0ZXN0X2ZvcmJpZGRlbl9uYW1lcyhzZWxmKToKICAgICAgICAgIyBTbyB3ZSBkb24ndCBzY3JldyB1cCBvdXIgZ2xvYmFscwogICAgICAgICBkZWYgc2FmZV9leGVjKGV4cHIpOgogICAgICAgICAgICAgZGVmIGYoKiprd2FyZ3MpOiBwYXNzCiAgICAgICAgICAgICBleGVjIGV4cHIgaW4geydmJyA6IGZ9CiAKLSAgICAgICAgZXhwZWN0ZWQgPSAiYXNzaWdubWVudCB0byBUcnVlIG9yIEZhbHNlIGlzIGZvcmJpZGRlbiBpbiAzLngiCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgICAgc2FmZV9leGVjKCJUcnVlID0gRmFsc2UiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICBzYWZlX2V4ZWMoIkZhbHNlID0gVHJ1ZSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCi0gICAgICAgICAgICB3LnJlc2V0KCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoIm9iai5GYWxzZSA9IFRydWUiKQotICAgICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjogcGFzcwotICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2FmZV9leGVjKCJvYmouVHJ1ZSA9IEZhbHNlIikKLSAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6IHBhc3MKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKLSAgICAgICAgICAgIHcucmVzZXQoKQotICAgICAgICAgICAgc2FmZV9leGVjKCJkZWYgRmFsc2UoKTogcGFzcyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCi0gICAgICAgICAgICB3LnJlc2V0KCkKLSAgICAgICAgICAgIHNhZmVfZXhlYygiZGVmIFRydWUoKTogcGFzcyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCi0gICAgICAgICAgICB3LnJlc2V0KCkKLSAgICAgICAgICAgIHNhZmVfZXhlYygiY2xhc3MgRmFsc2U6IHBhc3MiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICBzYWZlX2V4ZWMoImNsYXNzIFRydWU6IHBhc3MiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICBzYWZlX2V4ZWMoImRlZiBmKFRydWU9NDMpOiBwYXNzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKLSAgICAgICAgICAgIHcucmVzZXQoKQotICAgICAgICAgICAgc2FmZV9leGVjKCJkZWYgZihGYWxzZT1Ob25lKTogcGFzcyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCi0gICAgICAgICAgICB3LnJlc2V0KCkKLSAgICAgICAgICAgIHNhZmVfZXhlYygiZihGYWxzZT1UcnVlKSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCi0gICAgICAgICAgICB3LnJlc2V0KCkKLSAgICAgICAgICAgIHNhZmVfZXhlYygiZihUcnVlPTEpIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKKyAgICAgICAgdGVzdHMgPSBbKCJUcnVlIiwgImFzc2lnbm1lbnQgdG8gVHJ1ZSBvciBGYWxzZSBpcyBmb3JiaWRkZW4gaW4gMy54IiksCisgICAgICAgICAgICAgICAgICgiRmFsc2UiLCAiYXNzaWdubWVudCB0byBUcnVlIG9yIEZhbHNlIGlzIGZvcmJpZGRlbiBpbiAzLngiKSwKKyAgICAgICAgICAgICAgICAgKCJub25sb2NhbCIsICJub25sb2NhbCBpcyBhIGtleXdvcmQgaW4gMy54IildCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoJycsIFN5bnRheFdhcm5pbmcpKSBhcyB3OgorICAgICAgICAgICAgZm9yIGtleXdvcmQsIGV4cGVjdGVkIGluIHRlc3RzOgorICAgICAgICAgICAgICAgIHNhZmVfZXhlYygiezB9ID0gRmFsc2UiLmZvcm1hdChrZXl3b3JkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoIm9iai57MH0gPSBUcnVlIi5mb3JtYXQoa2V5d29yZCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoImRlZiB7MH0oKTogcGFzcyIuZm9ybWF0KGtleXdvcmQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoImNsYXNzIHswfTogcGFzcyIuZm9ybWF0KGtleXdvcmQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoImRlZiBmKHswfT00Myk6IHBhc3MiLmZvcm1hdChrZXl3b3JkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCiAKIAogICAgIGRlZiB0ZXN0X3R5cGVfaW5lcXVhbGl0eV9jb21wYXJpc29ucyhzZWxmKToKICAgICAgICAgZXhwZWN0ZWQgPSAndHlwZSBpbmVxdWFsaXR5IGNvbXBhcmlzb25zIG5vdCBzdXBwb3J0ZWQgaW4gMy54JwotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhpbnQgPCBzdHIsIHcsIGV4cGVjdGVkKQogICAgICAgICAgICAgdy5yZXNldCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcodHlwZSA8IG9iamVjdCwgdywgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9vYmplY3RfaW5lcXVhbGl0eV9jb21wYXJpc29ucyhzZWxmKToKICAgICAgICAgZXhwZWN0ZWQgPSAnY29tcGFyaW5nIHVuZXF1YWwgdHlwZXMgbm90IHN1cHBvcnRlZCBpbiAzLngnCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHN0ciA8IFtdLCB3LCBleHBlY3RlZCkKICAgICAgICAgICAgIHcucmVzZXQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKG9iamVjdCgpIDwgKDEsIDIpLCB3LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2RpY3RfaW5lcXVhbGl0eV9jb21wYXJpc29ucyhzZWxmKToKICAgICAgICAgZXhwZWN0ZWQgPSAnZGljdCBpbmVxdWFsaXR5IGNvbXBhcmlzb25zIG5vdCBzdXBwb3J0ZWQgaW4gMy54JwotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyh7fSA8IHsyOjN9LCB3LCBleHBlY3RlZCkKICAgICAgICAgICAgIHcucmVzZXQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHt9IDw9IHt9LCB3LCBleHBlY3RlZCkKQEAgLTE0Miw3ICsxMTksNyBAQAogICAgICAgICAgICAgcmV0dXJuIGcKICAgICAgICAgY2VsbDAsID0gZigwKS5mdW5jX2Nsb3N1cmUKICAgICAgICAgY2VsbDEsID0gZigxKS5mdW5jX2Nsb3N1cmUKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoY2VsbDAgPT0gY2VsbDEsIHcsIGV4cGVjdGVkKQogICAgICAgICAgICAgdy5yZXNldCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoY2VsbDAgPCBjZWxsMSwgdywgZXhwZWN0ZWQpCkBAIC0xNTMsNyArMTMwLDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZGVmIGcoeCk6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGYuZnVuY19jb2RlIDwgZy5mdW5jX2NvZGUsIHcsIGV4cGVjdGVkKQogICAgICAgICAgICAgdy5yZXNldCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoZi5mdW5jX2NvZGUgPD0gZy5mdW5jX2NvZGUsIHcsIGV4cGVjdGVkKQpAQCAtMTY3LDcgKzE0NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICdvcmRlciBjb21wYXJpc29ucyBub3Qgc3VwcG9ydGVkIGluIDMueCcpCiAgICAgICAgIGZ1bmMgPSBldmFsCiAgICAgICAgIG1ldGggPSB7fS5nZXQKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoZnVuYyA8IG1ldGgsIHcsIGV4cGVjdGVkKQogICAgICAgICAgICAgdy5yZXNldCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoZnVuYyA+IG1ldGgsIHcsIGV4cGVjdGVkKQpAQCAtMTgyLDEyICsxNTksMjIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm9XYXJuaW5nKGxhbSA9PSBmdW5jLCB3KQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb1dhcm5pbmcobGFtICE9IGZ1bmMsIHcpCiAKKyAgICBkZWYgdGVzdF9mcmFtZV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9ICIlcyBoYXMgYmVlbiByZW1vdmVkIGluIDMueCIKKyAgICAgICAgZiA9IHN5cy5fZ2V0ZnJhbWUoMCkKKyAgICAgICAgZm9yIGF0dHIgaW4gKCJmX2V4Y190cmFjZWJhY2siLCAiZl9leGNfdmFsdWUiLCAiZl9leGNfdHlwZSIpOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSB0ZW1wbGF0ZSAlIGF0dHIKKyAgICAgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGdldGF0dHIoZiwgYXR0ciksIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzZXRhdHRyKGYsIGF0dHIsIE5vbmUpLCB3LCBleHBlY3RlZCkKKwogICAgIGRlZiB0ZXN0X3NvcnRfY21wX2FyZyhzZWxmKToKICAgICAgICAgZXhwZWN0ZWQgPSAidGhlIGNtcCBhcmd1bWVudCBpcyBub3Qgc3VwcG9ydGVkIGluIDMueCIKICAgICAgICAgbHN0ID0gcmFuZ2UoNSkKICAgICAgICAgY21wID0gbGFtYmRhIHgseTogLTEKIAotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhsc3Quc29ydChjbXA9Y21wKSwgdywgZXhwZWN0ZWQpCiAgICAgICAgICAgICB3LnJlc2V0KCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzb3J0ZWQobHN0LCBjbXA9Y21wKSwgdywgZXhwZWN0ZWQpCkBAIC0xOTgsNyArMTg1LDcgQEAKIAogICAgIGRlZiB0ZXN0X3N5c19leGNfY2xlYXIoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gJ3N5cy5leGNfY2xlYXIoKSBub3Qgc3VwcG9ydGVkIGluIDMueDsgdXNlIGV4Y2VwdCBjbGF1c2VzJwotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzeXMuZXhjX2NsZWFyKCksIHcsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfbWV0aG9kc19tZW1iZXJzKHNlbGYpOgpAQCAtMjA3LDE3ICsxOTQsMTcgQEAKICAgICAgICAgICAgIF9fbWV0aG9kc19fID0gWydhJ10KICAgICAgICAgICAgIF9fbWVtYmVyc19fID0gWydiJ10KICAgICAgICAgYyA9IEMoKQotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhkaXIoYyksIHcsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfc29mdHNwYWNlKHNlbGYpOgogICAgICAgICBleHBlY3RlZCA9ICdmaWxlLnNvZnRzcGFjZSBub3Qgc3VwcG9ydGVkIGluIDMueCcKICAgICAgICAgd2l0aCBmaWxlKF9fZmlsZV9fKSBhcyBmOgotICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhmLnNvZnRzcGFjZSwgdywgZXhwZWN0ZWQpCiAgICAgICAgICAgICBkZWYgc2V0KCk6CiAgICAgICAgICAgICAgICAgZi5zb2Z0c3BhY2UgPSAwCi0gICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHNldCgpLCB3LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X3NsaWNlX21ldGhvZHMoc2VsZik6CkBAIC0yMzMsNyArMjIwLDcgQEAKICAgICAgICAgZXhwZWN0ZWQgPSAiaW4gMy54LCBfX3swfXNsaWNlX18gaGFzIGJlZW4gcmVtb3ZlZDsgdXNlIF9fezB9aXRlbV9fIgogCiAgICAgICAgIGZvciBvYmogaW4gKFNwYW0oKSwgRWdnKCkpOgotICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhvYmpbMToyXSwgdywgZXhwZWN0ZWQuZm9ybWF0KCdnZXQnKSkKICAgICAgICAgICAgICAgICB3LnJlc2V0KCkKICAgICAgICAgICAgICAgICBkZWwgb2JqWzM6NF0KQEAgLTI0NCwyNCArMjMxLDIzIEBACiAKICAgICBkZWYgdGVzdF90dXBsZV9wYXJhbWV0ZXJfdW5wYWNraW5nKHNlbGYpOgogICAgICAgICBleHBlY3RlZCA9ICJ0dXBsZSBwYXJhbWV0ZXIgdW5wYWNraW5nIGhhcyBiZWVuIHJlbW92ZWQgaW4gMy54IgotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKChleHBlY3RlZCwgU3ludGF4V2FybmluZykpOgogICAgICAgICAgICAgZXhlYyAiZGVmIGYoKGEsIGIpKTogcGFzcyIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2J1ZmZlcihzZWxmKToKICAgICAgICAgZXhwZWN0ZWQgPSAnYnVmZmVyKCkgbm90IHN1cHBvcnRlZCBpbiAzLngnCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGJ1ZmZlcignYScpLCB3LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2ZpbGVfeHJlYWRsaW5lcyhzZWxmKToKICAgICAgICAgZXhwZWN0ZWQgPSAoImYueHJlYWRsaW5lcygpIG5vdCBzdXBwb3J0ZWQgaW4gMy54LCAiCiAgICAgICAgICAgICAgICAgICAgICJ0cnkgJ2ZvciBsaW5lIGluIGYnIGluc3RlYWQiKQogICAgICAgICB3aXRoIGZpbGUoX19maWxlX18pIGFzIGY6Ci0gICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGYueHJlYWRsaW5lcygpLCB3LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2hhc2hfaW5oZXJpdGFuY2Uoc2VsZik6Ci0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgIyBXaXRoIG9iamVjdCBhcyB0aGUgYmFzZSBjbGFzcwogICAgICAgICAgICAgY2xhc3MgV2Fybk9ubHlDbXAob2JqZWN0KToKICAgICAgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6IHBhc3MKQEAgLTMwOSw2ICsyOTUsMTggQEAKICAgICAgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6IHBhc3MKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAwKQogCisgICAgZGVmIHRlc3Rfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGlzQ2FsbGFibGUsIHNlcXVlbmNlSW5jbHVkZXMKKworICAgICAgICBjYWxsYWJsZV93YXJuID0gKCJvcGVyYXRvci5pc0NhbGxhYmxlKCkgaXMgbm90IHN1cHBvcnRlZCBpbiAzLnguICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlIGhhc2F0dHIob2JqLCAnX19jYWxsX18nKS4iKQorICAgICAgICBzZXFfd2FybiA9ICgib3BlcmF0b3Iuc2VxdWVuY2VJbmNsdWRlcygpIGlzIG5vdCBzdXBwb3J0ZWQgIgorICAgICAgICAgICAgICAgICAgICAiaW4gMy54LiBVc2Ugb3BlcmF0b3IuY29udGFpbnMoKS4iKQorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGlzQ2FsbGFibGUoc2VsZiksIHcsIGNhbGxhYmxlX3dhcm4pCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzZXF1ZW5jZUluY2x1ZGVzKHJhbmdlKDMpLCAyKSwgdywgc2VxX3dhcm4pCisKIAogY2xhc3MgVGVzdFN0ZGxpYlJlbW92YWxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzI1LDcgKzMyMywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJT0NUTCcsICdqcGVnJywgJ3BhbmVsJywgJ3BhbmVscGFyc2VyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVhZGNkJywgJ1NWJywgJ3RvcmdiJywgJ1dBSVQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhcndpbicgOiAoJ2F1dG9HSUwnLCAnQ2FyYm9uJywgJ09TQVRlcm1pbm9sb2d5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljZ2x1ZScsICdOYXYnLCAnTWFjT1MnLCAnYWVwYWNrJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljZ2x1ZScsICdOYXYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1hY09TIHNob3VsZCAoYW5kIGRvZXMpIGdpdmUgYSBQeTNrV2FybmluZywgYnV0IG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBlYXJsaWVyIHRlc3RzIGFscmVhZHkgaW1wb3J0cyB0aGUgTWFjT1MgZXh0ZW5zaW9uIHdoaWNoIGNhdXNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgdGVzdCB0byBmYWlsLiBEaXNhYmxpbmcgdGhlIHRlc3QgZm9yICdNYWNPUycgYXZvaWRzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzcHVyaW91cyB0ZXN0IGZhaWx1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMnTWFjT1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWVwYWNrJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FldG9vbHMnLCAnYWV0eXBlcycsICdhcHBsZXNpbmdsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsZXRyYXdtYWluJywgJ2FwcGxldHJ1bm5lcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmd2ZW11bGF0b3InLCAnYmdlbmxvY2F0aW9ucycsCkBAIC0zNDcsNyArMzUxLDcgQEAKICAgICBkZWYgY2hlY2tfcmVtb3ZhbChzZWxmLCBtb2R1bGVfbmFtZSwgb3B0aW9uYWw9RmFsc2UpOgogICAgICAgICAiIiJNYWtlIHN1cmUgdGhlIHNwZWNpZmllZCBtb2R1bGUsIHdoZW4gaW1wb3J0ZWQsIHJhaXNlcyBhCiAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZyBhbmQgc3BlY2lmaWVzIGl0c2VsZiBpbiB0aGUgbWVzc2FnZS4iIiIKLSAgICAgICAgd2l0aCBuZXN0ZWQoQ2xlYW5JbXBvcnQobW9kdWxlX25hbWUpLCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpKToKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChtb2R1bGVfbmFtZSksIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCAiLisgKG1vZHVsZXxwYWNrYWdlKSAuKyByZW1vdmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgX19uYW1lX18pCiAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCAiLisgcmVtb3ZlZCAuKyAobW9kdWxlfHBhY2thZ2UpIiwKQEAgLTM1NSw5ICszNTksOSBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIF9faW1wb3J0X18obW9kdWxlX25hbWUsIGxldmVsPTApCiAgICAgICAgICAgICBleGNlcHQgRGVwcmVjYXRpb25XYXJuaW5nIGFzIGV4YzoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8obW9kdWxlX25hbWUgaW4gZXhjLmFyZ3NbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyB3YXJuaW5nIGRpZG4ndCBjb250YWluIG1vZHVsZSBuYW1lIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG1vZHVsZV9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlX25hbWUsIGV4Yy5hcmdzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIHdhcm5pbmcgZGlkbid0IGNvbnRhaW4gbW9kdWxlIG5hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG1vZHVsZV9uYW1lKQogICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgICAgIGlmIG5vdCBvcHRpb25hbDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJOb24tb3B0aW9uYWwgbW9kdWxlIHswfSByYWlzZWQgYW4gIgpAQCAtMzY3LDcgKzM3MSw3IEBACiAgICAgICAgICAgICAgICAgIyBUaGV5IHdvbid0IHJlcnVuIHRoZWlyIGluaXQgY29kZSBldmVuIHdpdGggQ2xlYW5JbXBvcnQuCiAgICAgICAgICAgICAgICAgaWYgbm90IGNoZWNrX2RlcHJlY2F0ZWRfbW9kdWxlKG1vZHVsZV9uYW1lKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJEZXByZWNhdGlvbldhcm5pbmcgbm90IHJhaXNlZCBmb3IgezB9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobW9kdWxlX25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChtb2R1bGVfbmFtZSkpCiAKICAgICBkZWYgdGVzdF9wbGF0Zm9ybV9pbmRlcGVuZGVudF9yZW1vdmFscyhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgbW9kdWxlcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3JtcyByYWlzZQpAQCAtMzkxLDI1ICszOTUsMTQgQEAKICAgICAgICAgZm9yIHBhdGhfbW9kIGluICgibnRwYXRoIiwgIm1hY3BhdGgiLCAib3MyZW14cGF0aCIsICJwb3NpeHBhdGgiKToKICAgICAgICAgICAgIG1vZCA9IF9faW1wb3J0X18ocGF0aF9tb2QpCiAgICAgICAgICAgICByZXNldF9tb2R1bGVfcmVnaXN0cnkobW9kKQotICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgICAgIG1vZC53YWxrKCJjcmFzaGVycyIsIGR1bWJvLCBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKHcubWVzc2FnZSksIG1zZykKLQotICAgIGRlZiB0ZXN0X2NvbW1hbmRzX21lbWJlcnMoc2VsZik6Ci0gICAgICAgIGltcG9ydCBjb21tYW5kcwotICAgICAgICAjIGNvbW1hbmRzIG1vZHVsZSB0ZXN0cyBtYXkgaGF2ZSBhbHJlYWR5IHRyaWdnZXJlZCB0aGlzIHdhcm5pbmcKLSAgICAgICAgcmVzZXRfbW9kdWxlX3JlZ2lzdHJ5KGNvbW1hbmRzKQotICAgICAgICBtZW1iZXJzID0geyJtazJhcmciIDogMiwgIm1rYXJnIiA6IDEsICJnZXRzdGF0dXMiIDogMX0KLSAgICAgICAgZm9yIG5hbWUsIGFyZ19jb3VudCBpbiBtZW1iZXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIikKLSAgICAgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihjb21tYW5kcywgbmFtZSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEZXByZWNhdGlvbldhcm5pbmcsIGZ1bmMsICooW05vbmVdKmFyZ19jb3VudCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Lm1lc3NhZ2UpLCBtc2cpCiAKICAgICBkZWYgdGVzdF9yZWR1Y2VfbW92ZShzZWxmKToKICAgICAgICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgYWRkCiAgICAgICAgICMgcmVkdWNlIHRlc3RzIG1heSBoYXZlIGFscmVhZHkgdHJpZ2dlcmVkIHRoaXMgd2FybmluZwotICAgICAgICByZXNldF9tb2R1bGVfcmVnaXN0cnkodW5pdHRlc3QpCisgICAgICAgIHJlc2V0X21vZHVsZV9yZWdpc3RyeSh1bml0dGVzdC5jYXNlKQogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCAicmVkdWNlIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZywgcmVkdWNlLCBhZGQsIHJhbmdlKDEwKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5IGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKaW5kZXggNmE5NzEzNy4uNmFhOTZkNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgJycnIHN1Y2NlZWQgaWZmIGhhc2F0dHIob2JqLGF0dHIpIG9yIGF0dHIgaW4gaWdub3JlLiAnJycKICAgICAgICAgaWYgYXR0ciBpbiBpZ25vcmU6IHJldHVybgogICAgICAgICBpZiBub3QgaGFzYXR0cihvYmosIGF0dHIpOiBwcmludCAiPz8/IiwgYXR0cgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGFzYXR0cihvYmosIGF0dHIpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihvYmosIGF0dHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGVjdGVkIGhhc2F0dHIoJXIsICVyKScgJSAob2JqLCBhdHRyKSkKIAogCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIGlmIGtleSBpbiBpZ25vcmU6IHJldHVybgogICAgICAgICBpZiBrZXkgbm90IGluIG9iajoKICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIioqKiIsIGtleQotICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5IGluIG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIG9iaikKIAogICAgIGRlZiBhc3NlcnRFcXVhbHNPcklnbm9yZWQoc2VsZiwgYSwgYiwgaWdub3JlKToKICAgICAgICAgJycnIHN1Y2NlZWQgaWZmIGEgPT0gYiBvciBhIGluIGlnbm9yZSBvciBiIGluIGlnbm9yZSAnJycKQEAgLTk0LDEyICs5NCwxMiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRIYXNhdHRyKG1vZHVsZSwgbmFtZSwgaWdub3JlKQogICAgICAgICAgICAgcHlfaXRlbSA9IGdldGF0dHIobW9kdWxlLCBuYW1lKQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgcHljbGJyLkZ1bmN0aW9uKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShweV9pdGVtLCAoRnVuY3Rpb25UeXBlLCBCdWlsdGluRnVuY3Rpb25UeXBlKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHB5X2l0ZW0sIChGdW5jdGlvblR5cGUsIEJ1aWx0aW5GdW5jdGlvblR5cGUpKQogICAgICAgICAgICAgICAgIGlmIHB5X2l0ZW0uX19tb2R1bGVfXyAhPSBtb2R1bGVOYW1lOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAgICMgc2tpcCBmdW5jdGlvbnMgdGhhdCBjYW1lIGZyb20gc29tZXdoZXJlIGVsc2UKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhweV9pdGVtLl9fbW9kdWxlX18sIHZhbHVlLm1vZHVsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5X2l0ZW0uX19tb2R1bGVfXywgdmFsdWUubW9kdWxlKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShweV9pdGVtLCAoQ2xhc3NUeXBlLCB0eXBlKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHB5X2l0ZW0sIChDbGFzc1R5cGUsIHR5cGUpKQogICAgICAgICAgICAgICAgIGlmIHB5X2l0ZW0uX19tb2R1bGVfXyAhPSBtb2R1bGVOYW1lOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAgICMgc2tpcCBjbGFzc2VzIHRoYXQgY2FtZSBmcm9tIHNvbWV3aGVyZSBlbHNlCiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcShmb3VuZE1ldGhvZHMsIGFjdHVhbE1ldGhvZHMsIGlnbm9yZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocHlfaXRlbS5fX21vZHVsZV9fLCB2YWx1ZS5tb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlfaXRlbS5fX21vZHVsZV9fLCB2YWx1ZS5tb2R1bGUpCiAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHNPcklnbm9yZWQocHlfaXRlbS5fX25hbWVfXywgdmFsdWUubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlKQpAQCAtMTUwLDcgKzE1MCw3IEBACiAKICAgICBkZWYgdGVzdF9lYXN5KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdweWNsYnInKQotICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdkb2N0ZXN0JykKKyAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnZG9jdGVzdCcsIGlnbm9yZT0oIkRvY1Rlc3RDYXNlIiwpKQogICAgICAgICAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCiAgICAgICAgIHJmYzgyMiA9IGltcG9ydF9tb2R1bGUoJ3JmYzgyMicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgncmZjODIyJywgcmZjODIyKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weSBiL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKaW5kZXggZDIzZGU3NC4uMDY4NTQ4OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CkBAIC0xMCw3ICsxMCw4IEBACiBpbXBvcnQgeG1sLmV0cmVlCiBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKIGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgZm9yZ2V0LCBybXRyZWUsIEVudmlyb25tZW50VmFyR3VhcmQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0ICgKKyAgICBURVNURk4sIGZvcmdldCwgcm10cmVlLCBFbnZpcm9ubWVudFZhckd1YXJkLCByZWFwX2NoaWxkcmVuKQogCiBmcm9tIHRlc3QgaW1wb3J0IHB5ZG9jX21vZAogCkBAIC0xNzksOCArMTgwLDExIEBACiAgICAgb3V0cHV0IG9mIHB5ZG9jLgogICAgICIiIgogICAgIGNtZCA9IFtzeXMuZXhlY3V0YWJsZSwgcHlkb2MuX19maWxlX18sICIgIi5qb2luKGFyZ3MpLCBtb2R1bGVfbmFtZV0KLSAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQotICAgIHJldHVybiBvdXRwdXQuc3RyaXAoKQorICAgIHRyeToKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgcmV0dXJuIG91dHB1dC5zdHJpcCgpCisgICAgZmluYWxseToKKyAgICAgICAgcmVhcF9jaGlsZHJlbigpCiAKIGRlZiBnZXRfcHlkb2NfaHRtbChtb2R1bGUpOgogICAgICJSZXR1cm5zIHB5ZG9jIGdlbmVyYXRlZCBvdXRwdXQgYXMgaHRtbCIKQEAgLTIxNiw2ICsyMjAsOCBAQAogCiBjbGFzcyBQeURvY0RvY1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RfaHRtbF9kb2Moc2VsZik6CiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY19odG1sKHB5ZG9jX21vZCkKICAgICAgICAgbW9kX2ZpbGUgPSBpbnNwZWN0LmdldGFic2ZpbGUocHlkb2NfbW9kKQpAQCAtMjI5LDYgKzIzNSw4IEBACiAgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF9odG1sLCByZXN1bHQpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RfdGV4dF9kb2Moc2VsZik6CiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY190ZXh0KHB5ZG9jX21vZCkKICAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX3RleHRfcGF0dGVybiAlIFwKQEAgLTI1OCw4ICsyNjYsOCBAQAogICAgICAgICAgICAgKCdpX2FtX25vdF9oZXJlJywgJ2lfYW1fbm90X2hlcmUnKSwKICAgICAgICAgICAgICgndGVzdC5pX2FtX25vdF9oZXJlX2VpdGhlcicsICdpX2FtX25vdF9oZXJlX2VpdGhlcicpLAogICAgICAgICAgICAgKCd0ZXN0LmlfYW1fbm90X2hlcmUubmVpdGhlcl9hbV9pJywgJ2lfYW1fbm90X2hlcmUubmVpdGhlcl9hbV9pJyksCi0gICAgICAgICAgICAoJ2lfYW1fbm90X2hlcmUuezB9Jy5mb3JtYXQobW9kbmFtZSksICdpX2FtX25vdF9oZXJlLnswfScuZm9ybWF0KG1vZG5hbWUpKSwKLSAgICAgICAgICAgICgndGVzdC57MH0nLmZvcm1hdChtb2RuYW1lKSwgbW9kbmFtZSksCisgICAgICAgICAgICAoJ2lfYW1fbm90X2hlcmUue30nLmZvcm1hdChtb2RuYW1lKSwgJ2lfYW1fbm90X2hlcmUue30nLmZvcm1hdChtb2RuYW1lKSksCisgICAgICAgICAgICAoJ3Rlc3Que30nLmZvcm1hdChtb2RuYW1lKSwgbW9kbmFtZSksCiAgICAgICAgICAgICApCiAKICAgICAgICAgQGNvbnRleHRtYW5hZ2VyCkBAIC0yNzAsMjEgKzI3OCwyMCBAQAogICAgICAgICAgICAgc3lzLnBhdGgucG9wKDApCiAgICAgICAgICAgICBybXRyZWUoZGlyKQogCi0gICAgICAgIHdpdGggbmV3ZGlyaW5wYXRoKFRFU1RGTik6Ci0gICAgICAgICAgICB3aXRoIEVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6Ci0gICAgICAgICAgICAgICAgZW52LnNldCgnUFlUSE9OUEFUSCcsIFRFU1RGTikKLSAgICAgICAgICAgICAgICBmdWxsbW9kbmFtZSA9IG9zLnBhdGguam9pbihURVNURk4sIG1vZG5hbWUpCi0gICAgICAgICAgICAgICAgc291cmNlZm4gPSBmdWxsbW9kbmFtZSArIG9zLmV4dHNlcCArICJweSIKLSAgICAgICAgICAgICAgICBmb3IgaW1wb3J0c3RyaW5nLCBleHBlY3RlZGlubXNnIGluIHRlc3RwYWlyczoKLSAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc291cmNlZm4sICd3JykKLSAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiaW1wb3J0IHswfVxuIi5mb3JtYXQoaW1wb3J0c3RyaW5nKSkKLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bl9weWRvYyhtb2RuYW1lKQotICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yZ2V0KG1vZG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gYmFkaW1wb3J0X3BhdHRlcm4gJSAobW9kbmFtZSwgZXhwZWN0ZWRpbm1zZykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0KQorICAgICAgICB3aXRoIG5ld2RpcmlucGF0aChURVNURk4pLCBFbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WydQWVRIT05QQVRIJ10gPSBURVNURk4KKyAgICAgICAgICAgIGZ1bGxtb2RuYW1lID0gb3MucGF0aC5qb2luKFRFU1RGTiwgbW9kbmFtZSkKKyAgICAgICAgICAgIHNvdXJjZWZuID0gZnVsbG1vZG5hbWUgKyBvcy5leHRzZXAgKyAicHkiCisgICAgICAgICAgICBmb3IgaW1wb3J0c3RyaW5nLCBleHBlY3RlZGlubXNnIGluIHRlc3RwYWlyczoKKyAgICAgICAgICAgICAgICBmID0gb3Blbihzb3VyY2VmbiwgJ3cnKQorICAgICAgICAgICAgICAgIGYud3JpdGUoImltcG9ydCB7fVxuIi5mb3JtYXQoaW1wb3J0c3RyaW5nKSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bl9weWRvYyhtb2RuYW1lKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGZvcmdldChtb2RuYW1lKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gYmFkaW1wb3J0X3BhdHRlcm4gJSAobW9kbmFtZSwgZXhwZWN0ZWRpbm1zZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9pbnB1dF9zdHJpcChzZWxmKToKICAgICAgICAgbWlzc2luZ19tb2R1bGUgPSAiIHRlc3QuaV9hbV9ub3RfaGVyZSAiCkBAIC0zMTQsNyArMzIxLDcgQEAKICAgICAgICAgIyBDaGVjayB0aGF0IHB5ZG9jZm9kZGVyIG1vZHVsZSBjYW4gYmUgZGVzY3JpYmVkCiAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgcHlkb2Nmb2RkZXIKICAgICAgICAgZG9jID0gcHlkb2MucmVuZGVyX2RvYyhweWRvY2ZvZGRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJweWRvY2ZvZGRlciIgaW4gZG9jKQorICAgICAgICBzZWxmLmFzc2VydEluKCJweWRvY2ZvZGRlciIsIGRvYykKIAogICAgIGRlZiB0ZXN0X2NsYXNzaWNfY2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEM6ICJDbGFzc2ljIGNsYXNzIgpAQCAtMzIyLDcgKzMyOSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlkb2MuZGVzY3JpYmUoQyksICdjbGFzcyBDJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweWRvYy5kZXNjcmliZShjKSwgJ2luc3RhbmNlIG9mIEMnKQogICAgICAgICBleHBlY3RlZCA9ICdpbnN0YW5jZSBvZiBDIGluIG1vZHVsZSAlcycgJSBfX25hbWVfXwotICAgICAgICBzZWxmLmFzc2VydF8oZXhwZWN0ZWQgaW4gcHlkb2MucmVuZGVyX2RvYyhjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgcHlkb2MucmVuZGVyX2RvYyhjKSkKIAogICAgIGRlZiB0ZXN0X2NsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6ICJOZXctc3R5bGUgY2xhc3MiCkBAIC0zMzEsNyArMzM4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweWRvYy5kZXNjcmliZShDKSwgJ2NsYXNzIEMnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLmRlc2NyaWJlKGMpLCAnQycpCiAgICAgICAgIGV4cGVjdGVkID0gJ0MgaW4gbW9kdWxlICVzIG9iamVjdCcgJSBfX25hbWVfXwotICAgICAgICBzZWxmLmFzc2VydF8oZXhwZWN0ZWQgaW4gcHlkb2MucmVuZGVyX2RvYyhjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgcHlkb2MucmVuZGVyX2RvYyhjKSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkgYi9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKaW5kZXggMDYyOGE1Ny4uODQwYTdhOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weQpAQCAtNCw3ICs0LDYgQEAKIGltcG9ydCBTdHJpbmdJTywgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IHB5ZXhwYXQKIGZyb20geG1sLnBhcnNlcnMgaW1wb3J0IGV4cGF0CiAKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHNvcnRkaWN0LCBydW5fdW5pdHRlc3QKQEAgLTIzLDE3ICsyMiwxNyBAQAogICAgIGRlZiB0ZXN0X3JldHVybnNfdW5pY29kZShzZWxmKToKICAgICAgICAgZm9yIHgsIHkgaW4gc2VsZi5zZXRfZ2V0X3BhaXJzOgogICAgICAgICAgICAgc2VsZi5wYXJzZXIucmV0dXJuc191bmljb2RlID0geAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5wYXJzZXIucmV0dXJuc191bmljb2RlLCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5yZXR1cm5zX3VuaWNvZGUsIHkpCiAKICAgICBkZWYgdGVzdF9vcmRlcmVkX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIGZvciB4LCB5IGluIHNlbGYuc2V0X2dldF9wYWlyczoKICAgICAgICAgICAgIHNlbGYucGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IHgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcywgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzLCB5KQogCiAgICAgZGVmIHRlc3Rfc3BlY2lmaWVkX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIGZvciB4LCB5IGluIHNlbGYuc2V0X2dldF9wYWlyczoKICAgICAgICAgICAgIHNlbGYucGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0geAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5wYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzLCB5KQogCiAKIGRhdGEgPSAnJydcCkBAIC0xNDEsMjMgKzE0MCwyMyBAQAogCiAgICAgICAgICMgVmVyaWZ5IG91dHB1dAogICAgICAgICBvcCA9IG91dC5vdXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMF0sICdQSTogXCd4bWwtc3R5bGVzaGVldFwnIFwnaHJlZj0ic3R5bGVzaGVldC5jc3MiXCcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxXSwgIkNvbW1lbnQ6ICcgY29tbWVudCBkYXRhICciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsyXSwgIk5vdGF0aW9uIGRlY2xhcmVkOiAoJ25vdGF0aW9uJywgTm9uZSwgJ25vdGF0aW9uLmpwZWcnLCBOb25lKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzNdLCAiVW5wYXJzZWQgZW50aXR5IGRlY2w6ICgndW5wYXJzZWRfZW50aXR5JywgTm9uZSwgJ2VudGl0eS5maWxlJywgTm9uZSwgJ25vdGF0aW9uJykiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs0XSwgIlN0YXJ0IGVsZW1lbnQ6ICdyb290JyB7J2F0dHIxJzogJ3ZhbHVlMScsICdhdHRyMic6ICd2YWx1ZTJcXHhlMVxceGJkXFx4ODAnfSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzVdLCAiTlMgZGVjbDogJ215bnMnICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzZdLCAiU3RhcnQgZWxlbWVudDogJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCcge30iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs3XSwgIkNoYXJhY3RlciBkYXRhOiAnQ29udGVudHMgb2Ygc3ViZWxlbWVudHMnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbOF0sICJFbmQgZWxlbWVudDogJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs5XSwgIkVuZCBvZiBOUyBkZWNsOiAnbXlucyciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxMF0sICJTdGFydCBlbGVtZW50OiAnc3ViMicge30iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxMV0sICdTdGFydCBvZiBDREFUQSBzZWN0aW9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTJdLCAiQ2hhcmFjdGVyIGRhdGE6ICdjb250ZW50cyBvZiBDREFUQSBzZWN0aW9uJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzEzXSwgJ0VuZCBvZiBDREFUQSBzZWN0aW9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTRdLCAiRW5kIGVsZW1lbnQ6ICdzdWIyJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzE1XSwgIkV4dGVybmFsIGVudGl0eSByZWY6IChOb25lLCAnZW50aXR5LmZpbGUnLCBOb25lKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzE2XSwgIkVuZCBlbGVtZW50OiAncm9vdCciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzBdLCAnUEk6IFwneG1sLXN0eWxlc2hlZXRcJyBcJ2hyZWY9InN0eWxlc2hlZXQuY3NzIlwnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxXSwgIkNvbW1lbnQ6ICcgY29tbWVudCBkYXRhICciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzJdLCAiTm90YXRpb24gZGVjbGFyZWQ6ICgnbm90YXRpb24nLCBOb25lLCAnbm90YXRpb24uanBlZycsIE5vbmUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFszXSwgIlVucGFyc2VkIGVudGl0eSBkZWNsOiAoJ3VucGFyc2VkX2VudGl0eScsIE5vbmUsICdlbnRpdHkuZmlsZScsIE5vbmUsICdub3RhdGlvbicpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs0XSwgIlN0YXJ0IGVsZW1lbnQ6ICdyb290JyB7J2F0dHIxJzogJ3ZhbHVlMScsICdhdHRyMic6ICd2YWx1ZTJcXHhlMVxceGJkXFx4ODAnfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNV0sICJOUyBkZWNsOiAnbXlucycgJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2UnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs2XSwgIlN0YXJ0IGVsZW1lbnQ6ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIHt9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs3XSwgIkNoYXJhY3RlciBkYXRhOiAnQ29udGVudHMgb2Ygc3ViZWxlbWVudHMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs4XSwgIkVuZCBlbGVtZW50OiAnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbOV0sICJFbmQgb2YgTlMgZGVjbDogJ215bnMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMF0sICJTdGFydCBlbGVtZW50OiAnc3ViMicge30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzExXSwgJ1N0YXJ0IG9mIENEQVRBIHNlY3Rpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEyXSwgIkNoYXJhY3RlciBkYXRhOiAnY29udGVudHMgb2YgQ0RBVEEgc2VjdGlvbiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEzXSwgJ0VuZCBvZiBDREFUQSBzZWN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNF0sICJFbmQgZWxlbWVudDogJ3N1YjInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNV0sICJFeHRlcm5hbCBlbnRpdHkgcmVmOiAoTm9uZSwgJ2VudGl0eS5maWxlJywgTm9uZSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE2XSwgIkVuZCBlbGVtZW50OiAncm9vdCciKQogCiAgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKICAgICAgICAgIyBUcnkgdGhlIHBhcnNlIGFnYWluLCB0aGlzIHRpbWUgcHJvZHVjaW5nIFVuaWNvZGUgb3V0cHV0CkBAIC0xNzAsMjMgKzE2OSwyMyBAQAogICAgICAgICBwYXJzZXIuUGFyc2UoZGF0YSwgMSkKIAogICAgICAgICBvcCA9IG91dC5vdXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMF0sICdQSTogdVwneG1sLXN0eWxlc2hlZXRcJyB1XCdocmVmPSJzdHlsZXNoZWV0LmNzcyJcJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzFdLCAiQ29tbWVudDogdScgY29tbWVudCBkYXRhICciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsyXSwgIk5vdGF0aW9uIGRlY2xhcmVkOiAodSdub3RhdGlvbicsIE5vbmUsIHUnbm90YXRpb24uanBlZycsIE5vbmUpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbM10sICJVbnBhcnNlZCBlbnRpdHkgZGVjbDogKHUndW5wYXJzZWRfZW50aXR5JywgTm9uZSwgdSdlbnRpdHkuZmlsZScsIE5vbmUsIHUnbm90YXRpb24nKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzRdLCAiU3RhcnQgZWxlbWVudDogdSdyb290JyB7dSdhdHRyMSc6IHUndmFsdWUxJywgdSdhdHRyMic6IHUndmFsdWUyXFx1MWY0MCd9IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbNV0sICJOUyBkZWNsOiB1J215bnMnIHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs2XSwgIlN0YXJ0IGVsZW1lbnQ6IHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyB7fSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzddLCAiQ2hhcmFjdGVyIGRhdGE6IHUnQ29udGVudHMgb2Ygc3ViZWxlbWVudHMnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbOF0sICJFbmQgZWxlbWVudDogdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbOV0sICJFbmQgb2YgTlMgZGVjbDogdSdteW5zJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzEwXSwgIlN0YXJ0IGVsZW1lbnQ6IHUnc3ViMicge30iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxMV0sICdTdGFydCBvZiBDREFUQSBzZWN0aW9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTJdLCAiQ2hhcmFjdGVyIGRhdGE6IHUnY29udGVudHMgb2YgQ0RBVEEgc2VjdGlvbiciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxM10sICdFbmQgb2YgQ0RBVEEgc2VjdGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzE0XSwgIkVuZCBlbGVtZW50OiB1J3N1YjInIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTVdLCAiRXh0ZXJuYWwgZW50aXR5IHJlZjogKE5vbmUsIHUnZW50aXR5LmZpbGUnLCBOb25lKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzE2XSwgIkVuZCBlbGVtZW50OiB1J3Jvb3QnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFswXSwgJ1BJOiB1XCd4bWwtc3R5bGVzaGVldFwnIHVcJ2hyZWY9InN0eWxlc2hlZXQuY3NzIlwnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxXSwgIkNvbW1lbnQ6IHUnIGNvbW1lbnQgZGF0YSAnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsyXSwgIk5vdGF0aW9uIGRlY2xhcmVkOiAodSdub3RhdGlvbicsIE5vbmUsIHUnbm90YXRpb24uanBlZycsIE5vbmUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFszXSwgIlVucGFyc2VkIGVudGl0eSBkZWNsOiAodSd1bnBhcnNlZF9lbnRpdHknLCBOb25lLCB1J2VudGl0eS5maWxlJywgTm9uZSwgdSdub3RhdGlvbicpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs0XSwgIlN0YXJ0IGVsZW1lbnQ6IHUncm9vdCcge3UnYXR0cjEnOiB1J3ZhbHVlMScsIHUnYXR0cjInOiB1J3ZhbHVlMlxcdTFmNDAnfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNV0sICJOUyBkZWNsOiB1J215bnMnIHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzZdLCAiU3RhcnQgZWxlbWVudDogdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIHt9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs3XSwgIkNoYXJhY3RlciBkYXRhOiB1J0NvbnRlbnRzIG9mIHN1YmVsZW1lbnRzJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbOF0sICJFbmQgZWxlbWVudDogdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs5XSwgIkVuZCBvZiBOUyBkZWNsOiB1J215bnMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMF0sICJTdGFydCBlbGVtZW50OiB1J3N1YjInIHt9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMV0sICdTdGFydCBvZiBDREFUQSBzZWN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMl0sICJDaGFyYWN0ZXIgZGF0YTogdSdjb250ZW50cyBvZiBDREFUQSBzZWN0aW9uJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTNdLCAnRW5kIG9mIENEQVRBIHNlY3Rpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE0XSwgIkVuZCBlbGVtZW50OiB1J3N1YjInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNV0sICJFeHRlcm5hbCBlbnRpdHkgcmVmOiAoTm9uZSwgdSdlbnRpdHkuZmlsZScsIE5vbmUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNl0sICJFbmQgZWxlbWVudDogdSdyb290JyIpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9maWxlKHNlbGYpOgogICAgICAgICAjIFRyeSBwYXJzaW5nIGEgZmlsZQpAQCAtMjAwLDIzICsxOTksMjMgQEAKICAgICAgICAgcGFyc2VyLlBhcnNlRmlsZShmaWxlKQogCiAgICAgICAgIG9wID0gb3V0Lm91dAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFswXSwgJ1BJOiB1XCd4bWwtc3R5bGVzaGVldFwnIHVcJ2hyZWY9InN0eWxlc2hlZXQuY3NzIlwnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMV0sICJDb21tZW50OiB1JyBjb21tZW50IGRhdGEgJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzJdLCAiTm90YXRpb24gZGVjbGFyZWQ6ICh1J25vdGF0aW9uJywgTm9uZSwgdSdub3RhdGlvbi5qcGVnJywgTm9uZSkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFszXSwgIlVucGFyc2VkIGVudGl0eSBkZWNsOiAodSd1bnBhcnNlZF9lbnRpdHknLCBOb25lLCB1J2VudGl0eS5maWxlJywgTm9uZSwgdSdub3RhdGlvbicpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbNF0sICJTdGFydCBlbGVtZW50OiB1J3Jvb3QnIHt1J2F0dHIxJzogdSd2YWx1ZTEnLCB1J2F0dHIyJzogdSd2YWx1ZTJcXHUxZjQwJ30iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs1XSwgIk5TIGRlY2w6IHUnbXlucycgdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzZdLCAiU3RhcnQgZWxlbWVudDogdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIHt9IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbN10sICJDaGFyYWN0ZXIgZGF0YTogdSdDb250ZW50cyBvZiBzdWJlbGVtZW50cyciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs4XSwgIkVuZCBlbGVtZW50OiB1J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs5XSwgIkVuZCBvZiBOUyBkZWNsOiB1J215bnMnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTBdLCAiU3RhcnQgZWxlbWVudDogdSdzdWIyJyB7fSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzExXSwgJ1N0YXJ0IG9mIENEQVRBIHNlY3Rpb24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxMl0sICJDaGFyYWN0ZXIgZGF0YTogdSdjb250ZW50cyBvZiBDREFUQSBzZWN0aW9uJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzEzXSwgJ0VuZCBvZiBDREFUQSBzZWN0aW9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTRdLCAiRW5kIGVsZW1lbnQ6IHUnc3ViMiciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxNV0sICJFeHRlcm5hbCBlbnRpdHkgcmVmOiAoTm9uZSwgdSdlbnRpdHkuZmlsZScsIE5vbmUpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTZdLCAiRW5kIGVsZW1lbnQ6IHUncm9vdCciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzBdLCAnUEk6IHVcJ3htbC1zdHlsZXNoZWV0XCcgdVwnaHJlZj0ic3R5bGVzaGVldC5jc3MiXCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzFdLCAiQ29tbWVudDogdScgY29tbWVudCBkYXRhICciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzJdLCAiTm90YXRpb24gZGVjbGFyZWQ6ICh1J25vdGF0aW9uJywgTm9uZSwgdSdub3RhdGlvbi5qcGVnJywgTm9uZSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzNdLCAiVW5wYXJzZWQgZW50aXR5IGRlY2w6ICh1J3VucGFyc2VkX2VudGl0eScsIE5vbmUsIHUnZW50aXR5LmZpbGUnLCBOb25lLCB1J25vdGF0aW9uJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzRdLCAiU3RhcnQgZWxlbWVudDogdSdyb290JyB7dSdhdHRyMSc6IHUndmFsdWUxJywgdSdhdHRyMic6IHUndmFsdWUyXFx1MWY0MCd9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs1XSwgIk5TIGRlY2w6IHUnbXlucycgdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNl0sICJTdGFydCBlbGVtZW50OiB1J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCcge30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzddLCAiQ2hhcmFjdGVyIGRhdGE6IHUnQ29udGVudHMgb2Ygc3ViZWxlbWVudHMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs4XSwgIkVuZCBlbGVtZW50OiB1J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzldLCAiRW5kIG9mIE5TIGRlY2w6IHUnbXlucyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEwXSwgIlN0YXJ0IGVsZW1lbnQ6IHUnc3ViMicge30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzExXSwgJ1N0YXJ0IG9mIENEQVRBIHNlY3Rpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEyXSwgIkNoYXJhY3RlciBkYXRhOiB1J2NvbnRlbnRzIG9mIENEQVRBIHNlY3Rpb24nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxM10sICdFbmQgb2YgQ0RBVEEgc2VjdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTRdLCAiRW5kIGVsZW1lbnQ6IHUnc3ViMiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE1XSwgIkV4dGVybmFsIGVudGl0eSByZWY6IChOb25lLCB1J2VudGl0eS5maWxlJywgTm9uZSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE2XSwgIkVuZCBlbGVtZW50OiB1J3Jvb3QnIikKIAogCiBjbGFzcyBOYW1lc3BhY2VTZXBhcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTIzMiwxNCArMjMxLDE0IEBACiAgICAgICAgICAgICBleHBhdC5QYXJzZXJDcmVhdGUobmFtZXNwYWNlX3NlcGFyYXRvcj00MikKICAgICAgICAgICAgIHNlbGYuZmFpbCgpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwKICAgICAgICAgICAgICAgICAnUGFyc2VyQ3JlYXRlKCkgYXJndW1lbnQgMiBtdXN0IGJlIHN0cmluZyBvciBOb25lLCBub3QgaW50JykKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleHBhdC5QYXJzZXJDcmVhdGUobmFtZXNwYWNlX3NlcGFyYXRvcj0ndG9vIGxvbmcnKQogICAgICAgICAgICAgc2VsZi5mYWlsKCkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwKICAgICAgICAgICAgICAgICAnbmFtZXNwYWNlX3NlcGFyYXRvciBtdXN0IGJlIGF0IG1vc3Qgb25lIGNoYXJhY3Rlciwgb21pdHRlZCwgb3IgTm9uZScpCiAKICAgICBkZWYgdGVzdF96ZXJvX2xlbmd0aChzZWxmKToKQEAgLTI2NSw3ICsyNjQsNyBAQAogICAgICAgICBwLkVuZEVsZW1lbnRIYW5kbGVyID0gY29sbGVjdG9yCiAgICAgICAgIHAuUGFyc2UoIjxlPiA8ZS8+IDxlPjwvZT4gPC9lPiIsIDEpCiAgICAgICAgIHRhZyA9IExbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKEwpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihMKSwgNikKICAgICAgICAgZm9yIGVudHJ5IGluIEw6CiAgICAgICAgICAgICAjIEwgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc3RyaW5nIHJlcGVhdGVkIG92ZXIgYW5kIG92ZXIuCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFnIGlzIGVudHJ5KQpAQCAtMjc5LDcgKzI3OCw3IEBACiAgICAgICAgIHNlbGYucGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5DaGFyYWN0ZXJEYXRhSGFuZGxlcgogCiAgICAgZGVmIGNoZWNrKHNlbGYsIGV4cGVjdGVkLCBsYWJlbCk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc3R1ZmYsIGV4cGVjdGVkLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsIGV4cGVjdGVkLAogICAgICAgICAgICAgICAgICIlc1xuc3R1ZmYgICAgPSAlclxuZXhwZWN0ZWQgPSAlciIKICAgICAgICAgICAgICAgICAlIChsYWJlbCwgc2VsZi5zdHVmZiwgbWFwKHVuaWNvZGUsIGV4cGVjdGVkKSkpCiAKQEAgLTMxMiw0NyArMzExLDQ3IEBACiAgICAgICAgICMgTWFrZSBzdXJlIGJ1ZmZlcmluZyBpcyB0dXJuZWQgb24KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmJ1ZmZlcl90ZXh0KQogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4yPGMvPjM8L2E+IiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5zdHVmZiwgWycxMjMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IGNvbGxhcHNlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdHVmZiwgWycxMjMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyZWQgdGV4dCBub3QgcHJvcGVybHkgY29sbGFwc2VkIikKIAogICAgIGRlZiB0ZXN0MShzZWxmKToKICAgICAgICAgIyBYWFggVGhpcyB0ZXN0IGV4cG9zZXMgbW9yZSBkZXRhaWwgb2YgRXhwYXQncyB0ZXh0IGNodW5raW5nIHRoYW4gd2UKICAgICAgICAgIyBYWFggbGlrZSwgYnV0IGl0IHRlc3RzIHdoYXQgd2UgbmVlZCB0byBjb25jaXNlbHkuCiAgICAgICAgIHNlbGYuc2V0SGFuZGxlcnMoWyJTdGFydEVsZW1lbnRIYW5kbGVyIl0pCiAgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKCI8YT4xPGIgYnVmZmVyLXRleHQ9J25vJy8+MlxuMzxjIGJ1ZmZlci10ZXh0PSd5ZXMnLz40XG41PC9hPiIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc3R1ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsiPGE+IiwgIjEiLCAiPGI+IiwgIjIiLCAiXG4iLCAiMyIsICI8Yz4iLCAiNFxuNSJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyaW5nIGNvbnRyb2wgbm90IHJlYWN0aW5nIGFzIGV4cGVjdGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiPGE+IiwgIjEiLCAiPGI+IiwgIjIiLCAiXG4iLCAiMyIsICI8Yz4iLCAiNFxuNSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJpbmcgY29udHJvbCBub3QgcmVhY3RpbmcgYXMgZXhwZWN0ZWQiKQogCiAgICAgZGVmIHRlc3QyKHNlbGYpOgogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4mbHQ7MiZndDs8Yy8+JiMzMjtcbiYjeDIwOzM8L2E+IiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5zdHVmZiwgWyIxPDI+IFxuIDMiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IGNvbGxhcHNlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdHVmZiwgWyIxPDI+IFxuIDMiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyZWQgdGV4dCBub3QgcHJvcGVybHkgY29sbGFwc2VkIikKIAogICAgIGRlZiB0ZXN0MyhzZWxmKToKICAgICAgICAgc2VsZi5zZXRIYW5kbGVycyhbIlN0YXJ0RWxlbWVudEhhbmRsZXIiXSkKICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8Yi8+MjxjLz4zPC9hPiIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc3R1ZmYsIFsiPGE+IiwgIjEiLCAiPGI+IiwgIjIiLCAiPGM+IiwgIjMiXSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLCBbIjxhPiIsICIxIiwgIjxiPiIsICIyIiwgIjxjPiIsICIzIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJlZCB0ZXh0IG5vdCBwcm9wZXJseSBzcGxpdCIpCiAKICAgICBkZWYgdGVzdDQoc2VsZik6CiAgICAgICAgIHNlbGYuc2V0SGFuZGxlcnMoWyJTdGFydEVsZW1lbnRIYW5kbGVyIiwgIkVuZEVsZW1lbnRIYW5kbGVyIl0pCiAgICAgICAgIHNlbGYucGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gTm9uZQogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4yPGMvPjM8L2E+IiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5zdHVmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWyI8YT4iLCAiPGI+IiwgIjwvYj4iLCAiPGM+IiwgIjwvYz4iLCAiPC9hPiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyI8YT4iLCAiPGI+IiwgIjwvYj4iLCAiPGM+IiwgIjwvYz4iLCAiPC9hPiJdKQogCiAgICAgZGVmIHRlc3Q1KHNlbGYpOgogICAgICAgICBzZWxmLnNldEhhbmRsZXJzKFsiU3RhcnRFbGVtZW50SGFuZGxlciIsICJFbmRFbGVtZW50SGFuZGxlciJdKQogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiPjwvYj4yPGMvPjM8L2E+IiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5zdHVmZiwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLAogICAgICAgICAgICAgWyI8YT4iLCAiMSIsICI8Yj4iLCAiPC9iPiIsICIyIiwgIjxjPiIsICI8L2M+IiwgIjMiLCAiPC9hPiJdKQogCiAgICAgZGVmIHRlc3Q2KHNlbGYpOgogICAgICAgICBzZWxmLnNldEhhbmRsZXJzKFsiQ29tbWVudEhhbmRsZXIiLCAiRW5kRWxlbWVudEhhbmRsZXIiLAogICAgICAgICAgICAgICAgICAgICAiU3RhcnRFbGVtZW50SGFuZGxlciJdKQogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4yPGM+PC9jPjM0NTwvYT4gIiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5zdHVmZiwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLAogICAgICAgICAgICAgWyI8YT4iLCAiMSIsICI8Yj4iLCAiPC9iPiIsICIyIiwgIjxjPiIsICI8L2M+IiwgIjM0NSIsICI8L2E+Il0sCiAgICAgICAgICAgICAiYnVmZmVyZWQgdGV4dCBub3QgcHJvcGVybHkgc3BsaXQiKQogCkBAIC0zNjAsMTAgKzM1OSwxMCBAQAogICAgICAgICBzZWxmLnNldEhhbmRsZXJzKFsiQ29tbWVudEhhbmRsZXIiLCAiRW5kRWxlbWVudEhhbmRsZXIiLAogICAgICAgICAgICAgICAgICAgICAiU3RhcnRFbGVtZW50SGFuZGxlciJdKQogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4yPGM+PC9jPjM8IS0tYWJjLS0+NDwhLS1kZWYtLT41PC9hPiAiLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnN0dWZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbIjxhPiIsICIxIiwgIjxiPiIsICI8L2I+IiwgIjIiLCAiPGM+IiwgIjwvYz4iLCAiMyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiPCEtLWFiYy0tPiIsICI0IiwgIjwhLS1kZWYtLT4iLCAiNSIsICI8L2E+Il0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJlZCB0ZXh0IG5vdCBwcm9wZXJseSBzcGxpdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdHVmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbIjxhPiIsICIxIiwgIjxiPiIsICI8L2I+IiwgIjIiLCAiPGM+IiwgIjwvYz4iLCAiMyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICI8IS0tYWJjLS0+IiwgIjQiLCAiPCEtLWRlZi0tPiIsICI1IiwgIjwvYT4iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyZWQgdGV4dCBub3QgcHJvcGVybHkgc3BsaXQiKQogCiAKICMgVGVzdCBoYW5kbGluZyBvZiBleGNlcHRpb24gZnJvbSBjYWxsYmFjazoKQEAgLTM3OCw5ICszNzcsOSBAQAogICAgICAgICAgICAgcGFyc2VyLlBhcnNlKCI8YT48Yj48Yy8+PC9iPjwvYT4iLCAxKQogICAgICAgICAgICAgc2VsZi5mYWlsKCkKICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGUuYXJnc1swXSwgJ2EnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIFJ1bnRpbWVFcnJvciBmb3IgZWxlbWVudCAnYScsIGJ1dCIgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZvdW5kICVyIiAlIGUuYXJnc1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAnYScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBSdW50aW1lRXJyb3IgZm9yIGVsZW1lbnQgJ2EnLCBidXQiICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZvdW5kICVyIiAlIGUuYXJnc1swXSkKIAogCiAjIFRlc3QgQ3VycmVudCogbWVtYmVyczoKQEAgLTM5OSw3ICszOTgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi51cHRvIDwgbGVuKHNlbGYuZXhwZWN0ZWRfbGlzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAndG9vIG1hbnkgcGFyc2VyIGV2ZW50cycpCiAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5leHBlY3RlZF9saXN0W3NlbGYudXB0b10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG9zLCBleHBlY3RlZCwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3MsIGV4cGVjdGVkLAogICAgICAgICAgICAgICAgICdFeHBlY3RlZCBwb3NpdGlvbiAlcywgZ290IHBvc2l0aW9uICVzJyAlKHBvcywgZXhwZWN0ZWQpKQogICAgICAgICBzZWxmLnVwdG8gKz0gMQogCkBAIC00NDAsMTAgKzQzOSwxMCBAQAogICAgICIiIgogCiAgICAgZGVmIHRlc3RfMTAyNV9ieXRlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5zbWFsbF9idWZmZXJfdGVzdCgxMDI1KSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNtYWxsX2J1ZmZlcl90ZXN0KDEwMjUpLCAyKQogCiAgICAgZGVmIHRlc3RfMTAwMF9ieXRlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5zbWFsbF9idWZmZXJfdGVzdCgxMDAwKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNtYWxsX2J1ZmZlcl90ZXN0KDEwMDApLCAxKQogCiAgICAgZGVmIHRlc3Rfd3Jvbmdfc2l6ZShzZWxmKToKICAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKQEAgLTQ2NywxNSArNDY2LDE1IEBACiAgICAgICAgICMgb25jZS4KICAgICAgICAgc2VsZi5uID0gMAogICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5uLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubiwgMSkKIAogICAgICAgICAjIFJlYXNzaWduIHRvIGJ1ZmZlcl9zaXplLCBidXQgYXNzaWduIHRoZSBzYW1lIHNpemUuCiAgICAgICAgIHBhcnNlci5idWZmZXJfc2l6ZSA9IHBhcnNlci5idWZmZXJfc2l6ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCAxKQogCiAgICAgICAgICMgVHJ5IHBhcnNpbmcgcmVzdCBvZiB0aGUgZG9jdW1lbnQKICAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDIpCiAKIAogICAgIGRlZiB0ZXN0X2Rpc2FibGluZ19idWZmZXIoc2VsZik6CkBAIC00ODYsMjcgKzQ4NSwyNyBAQAogICAgICAgICBwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLmNvdW50aW5nX2hhbmRsZXIKICAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQogICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSAxMDI0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCiAKICAgICAgICAgIyBQYXJzZSBvbmUgY2h1bmsgb2YgWE1MCiAgICAgICAgIHNlbGYubiA9IDAKICAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDEsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5uLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDEpCiAKICAgICAgICAgIyBUdXJuIG9mZiBidWZmZXJpbmcgYW5kIHBhcnNlIHRoZSBuZXh0IGNodW5rLgogICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAwCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFyc2VyLmJ1ZmZlcl90ZXh0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CiAgICAgICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMiwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5uLCAxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDExKQogCiAgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhcnNlci5idWZmZXJfdGV4dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKICAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDMsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubiwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCAxMikKIAogCiAKQEAgLTUzNCwxNCArNTMzLDE0IEBACiAgICAgICAgIHBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuY291bnRpbmdfaGFuZGxlcgogICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCiAgICAgICAgIHBhcnNlci5idWZmZXJfc2l6ZSA9IDEwMjQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKIAogICAgICAgICBzZWxmLm4gPSAwCiAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwxLCAwKQogICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgKj0gMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZXIuYnVmZmVyX3NpemUsIDIwNDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmJ1ZmZlcl9zaXplLCAyMDQ4KQogICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5uLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubiwgMikKIAogICAgIGRlZiB0ZXN0X2NoYW5nZV9zaXplXzIoc2VsZik6CiAgICAgICAgIHhtbDEgPSAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvODg1OSc/PjxhPmE8cz4lcyIgJSAoJ2EnICogMTAyMykKQEAgLTU1MCwxNCArNTQ5LDE0IEBACiAgICAgICAgIHBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuY291bnRpbmdfaGFuZGxlcgogICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCiAgICAgICAgIHBhcnNlci5idWZmZXJfc2l6ZSA9IDIwNDgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VyLmJ1ZmZlcl9zaXplLCAyMDQ4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMjA0OCkKIAogICAgICAgICBzZWxmLm49MAogICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMSwgMCkKICAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplIC8vPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCiAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwyLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm4sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCA0KQogCiBjbGFzcyBNYWxmb3JtZWRJbnB1dFRleHQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0MShzZWxmKToKQEAgLTU2Nyw3ICs1NjYsNyBAQAogICAgICAgICAgICAgcGFyc2VyLlBhcnNlKHhtbCwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgpCiAgICAgICAgIGV4Y2VwdCBleHBhdC5FeHBhdEVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZSksICd1bmNsb3NlZCB0b2tlbjogbGluZSAyLCBjb2x1bW4gMCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ3VuY2xvc2VkIHRva2VuOiBsaW5lIDIsIGNvbHVtbiAwJykKIAogICAgIGRlZiB0ZXN0MihzZWxmKToKICAgICAgICAgeG1sID0gIjw/eG1sIHZlcnNpb25ceGMyXHg4NT0nMS4wJz8+XHJcbiIKQEAgLTU3Niw3ICs1NzUsNyBAQAogICAgICAgICAgICAgcGFyc2VyLlBhcnNlKHhtbCwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgpCiAgICAgICAgIGV4Y2VwdCBleHBhdC5FeHBhdEVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZSksICdYTUwgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkOiBsaW5lIDEsIGNvbHVtbiAxNCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ1hNTCBkZWNsYXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQ6IGxpbmUgMSwgY29sdW1uIDE0JykKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChTZXRBdHRyaWJ1dGVUZXN0LApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9xdWV1ZS5weSBiL0xpYi90ZXN0L3Rlc3RfcXVldWUucHkKaW5kZXggY2VjYjBhMS4uMGIzOGU3ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9xdWV1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3F1ZXVlLnB5CkBAIC0xLDExICsxLDEwIEBACiAjIFNvbWUgc2ltcGxlIHF1ZXVlIG1vZHVsZSB0ZXN0cywgcGx1cyBzb21lIGZhaWx1cmUgY29uZGl0aW9ucwogIyB0byBlbnN1cmUgdGhlIFF1ZXVlIGxvY2tzIHJlbWFpbiBzdGFibGUuCiBpbXBvcnQgUXVldWUKLWltcG9ydCBzeXMKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIAogUVVFVUVfU0laRSA9IDUKIApAQCAtOTYsMTYgKzk1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlmb1F1ZXVlID0gWzIyMiwgMzMzLCAxMTFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5UXVldWUgPSBbMTExLCAyMjIsIDMzM10pCiAgICAgICAgIGFjdHVhbF9vcmRlciA9IFtxLmdldCgpLCBxLmdldCgpLCBxLmdldCgpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhY3R1YWxfb3JkZXIsIHRhcmdldF9vcmRlcltxLl9fY2xhc3NfXy5fX25hbWVfX10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJEaWRuJ3Qgc2VlbSB0byBxdWV1ZSB0aGUgY29ycmVjdCBkYXRhISIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX29yZGVyLCB0YXJnZXRfb3JkZXJbcS5fX2NsYXNzX18uX19uYW1lX19dLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEaWRuJ3Qgc2VlbSB0byBxdWV1ZSB0aGUgY29ycmVjdCBkYXRhISIpCiAgICAgICAgIGZvciBpIGluIHJhbmdlKFFVRVVFX1NJWkUtMSk6CiAgICAgICAgICAgICBxLnB1dChpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGVtcHR5IikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZnVsbCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZW1wdHkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIG5vdCBiZSBmdWxsIikKICAgICAgICAgbGFzdCA9IDIgKiBRVUVVRV9TSVpFCiAgICAgICAgIGZ1bGwgPSAzICogMiAqIFFVRVVFX1NJWkUKICAgICAgICAgcS5wdXQobGFzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIGJlIGZ1bGwiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5mdWxsKCksICJRdWV1ZSBzaG91bGQgYmUgZnVsbCIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHEucHV0KGZ1bGwsIGJsb2NrPTApCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCBhcHBlYXIgdG8gYmxvY2sgd2l0aCBhIGZ1bGwgcXVldWUiKQpAQCAtMTIyLDcgKzEyMSw3IEBACiAgICAgICAgICMgRW1wdHkgaXQKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoUVVFVUVfU0laRSk6CiAgICAgICAgICAgICBxLmdldCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgYmUgZW1wdHkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIGJlIGVtcHR5IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcS5nZXQoYmxvY2s9MCkKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IGFwcGVhciB0byBibG9jayB3aXRoIGFuIGVtcHR5IHF1ZXVlIikKQEAgLTE1NSw4ICsxNTQsOCBAQAogICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKICAgICAgICAgICAgIHEucHV0KGkpCiAgICAgICAgIHEuam9pbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuY3VtLCBzdW0ocmFuZ2UoMTAwKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJxLmpvaW4oKSBkaWQgbm90IGJsb2NrIHVudGlsIGFsbCB0YXNrcyB3ZXJlIGRvbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3VtLCBzdW0ocmFuZ2UoMTAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgInEuam9pbigpIGRpZCBub3QgYmxvY2sgdW50aWwgYWxsIHRhc2tzIHdlcmUgZG9uZSIpCiAgICAgICAgIGZvciBpIGluICgwLDEpOgogICAgICAgICAgICAgcS5wdXQoTm9uZSkgICAgICAgICAjIGluc3RydWN0IHRoZSB0aHJlYWRzIHRvIGNsb3NlCiAgICAgICAgIHEuam9pbigpICAgICAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgeW91IGNhbiBqb2luIHR3aWNlCkBAIC0yNDQsNyArMjQzLDcgQEAKICAgICAgICAgZXhjZXB0IEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcS5wdXQoImxhc3QiKQotICAgICAgICBzZWxmLmFzc2VydF8ocS5mdWxsKCksICJRdWV1ZSBzaG91bGQgYmUgZnVsbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBiZSBmdWxsIikKICAgICAgICAgIyBUZXN0IGEgZmFpbGluZyBibG9ja2luZyBwdXQKICAgICAgICAgcS5mYWlsX25leHRfcHV0ID0gVHJ1ZQogICAgICAgICB0cnk6CkBAIC0yNjYsMTcgKzI2NSwxNyBAQAogICAgICAgICAjIENoZWNrIHRoZSBRdWV1ZSBpc24ndCBkYW1hZ2VkLgogICAgICAgICAjIHB1dCBmYWlsZWQsIGJ1dCBnZXQgc3VjY2VlZGVkIC0gcmUtYWRkCiAgICAgICAgIHEucHV0KCJsYXN0IikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIGJlIGZ1bGwiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5mdWxsKCksICJRdWV1ZSBzaG91bGQgYmUgZnVsbCIpCiAgICAgICAgIHEuZ2V0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZnVsbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcS5mdWxsKCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGZ1bGwiKQogICAgICAgICBxLnB1dCgibGFzdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBiZSBmdWxsIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIGJlIGZ1bGwiKQogICAgICAgICAjIFRlc3QgYSBibG9ja2luZyBwdXQKICAgICAgICAgc2VsZi5kb19ibG9ja2luZ190ZXN0KHEucHV0LCAoImZ1bGwiLCksIHEuZ2V0LCAoKSkKICAgICAgICAgIyBFbXB0eSBpdAogICAgICAgICBmb3IgaSBpbiByYW5nZShRVUVVRV9TSVpFKToKICAgICAgICAgICAgIHEuZ2V0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBiZSBlbXB0eSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgYmUgZW1wdHkiKQogICAgICAgICBxLnB1dCgiZmlyc3QiKQogICAgICAgICBxLmZhaWxfbmV4dF9nZXQgPSBUcnVlCiAgICAgICAgIHRyeToKQEAgLTI4NCwxNiArMjgzLDE2IEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIlRoZSBxdWV1ZSBkaWRuJ3QgZmFpbCB3aGVuIGl0IHNob3VsZCBoYXZlIikKICAgICAgICAgZXhjZXB0IEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGVtcHR5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGVtcHR5IikKICAgICAgICAgcS5mYWlsX25leHRfZ2V0ID0gVHJ1ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBxLmdldCh0aW1lb3V0PTAuMSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgiVGhlIHF1ZXVlIGRpZG4ndCBmYWlsIHdoZW4gaXQgc2hvdWxkIGhhdmUiKQogICAgICAgICBleGNlcHQgRmFpbGluZ1F1ZXVlRXhjZXB0aW9uOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmFzc2VydF8obm90IHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZW1wdHkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZW1wdHkiKQogICAgICAgICBxLmdldCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgYmUgZW1wdHkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIGJlIGVtcHR5IikKICAgICAgICAgcS5mYWlsX25leHRfZ2V0ID0gVHJ1ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmRvX2V4Y2VwdGlvbmFsX2Jsb2NraW5nX3Rlc3QocS5nZXQsICgpLCBxLnB1dCwgKCdlbXB0eScsKSwKQEAgLTMwMiw5ICszMDEsOSBAQAogICAgICAgICBleGNlcHQgRmFpbGluZ1F1ZXVlRXhjZXB0aW9uOgogICAgICAgICAgICAgcGFzcwogICAgICAgICAjIHB1dCBzdWNjZWVkZWQsIGJ1dCBnZXQgZmFpbGVkLgotICAgICAgICBzZWxmLmFzc2VydF8obm90IHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZW1wdHkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZW1wdHkiKQogICAgICAgICBxLmdldCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgYmUgZW1wdHkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIGJlIGVtcHR5IikKIAogICAgIGRlZiB0ZXN0X2ZhaWxpbmdfcXVldWUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0byBtYWtlIHN1cmUgYSBxdWV1ZSBpcyBmdW5jdGlvbmluZyBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3F1b3ByaS5weSBiL0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5CmluZGV4IDU2YTc5M2MuLmMzYzRkMTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5CkBAIC0xMzAsMTcgKzEzMCwxNyBAQAogICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KICAgICBkZWYgdGVzdF9lbmNvZGVzdHJpbmcoc2VsZik6CiAgICAgICAgIGZvciBwLCBlIGluIHNlbGYuU1RSSU5HUzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhxdW9wcmkuZW5jb2Rlc3RyaW5nKHApID09IGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmVuY29kZXN0cmluZyhwKSA9PSBlKQogCiAgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgogICAgIGRlZiB0ZXN0X2RlY29kZXN0cmluZyhzZWxmKToKICAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5TVFJJTkdTOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHF1b3ByaS5kZWNvZGVzdHJpbmcoZSkgPT0gcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmkuZGVjb2Rlc3RyaW5nKGUpID09IHApCiAKICAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCiAgICAgZGVmIHRlc3RfaWRlbXBvdGVudF9zdHJpbmcoc2VsZik6CiAgICAgICAgIGZvciBwLCBlIGluIHNlbGYuU1RSSU5HUzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhxdW9wcmkuZGVjb2Rlc3RyaW5nKHF1b3ByaS5lbmNvZGVzdHJpbmcoZSkpID09IGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmRlY29kZXN0cmluZyhxdW9wcmkuZW5jb2Rlc3RyaW5nKGUpKSA9PSBlKQogCiAgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgogICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgICAgICAgICAgaW5mcCA9IGNTdHJpbmdJTy5TdHJpbmdJTyhwKQogICAgICAgICAgICAgb3V0ZnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICAgICAgICAgcXVvcHJpLmVuY29kZShpbmZwLCBvdXRmcCwgcXVvdGV0YWJzPUZhbHNlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG91dGZwLmdldHZhbHVlKCkgPT0gZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRmcC5nZXR2YWx1ZSgpID09IGUpCiAKICAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCiAgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgpAQCAtMTU2LDI4ICsxNTYsMjkgQEAKICAgICAgICAgICAgIGluZnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8oZSkKICAgICAgICAgICAgIG91dGZwID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgICAgIHF1b3ByaS5kZWNvZGUoaW5mcCwgb3V0ZnApCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ob3V0ZnAuZ2V0dmFsdWUoKSA9PSBwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dGZwLmdldHZhbHVlKCkgPT0gcCkKIAogICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KICAgICBkZWYgdGVzdF9lbWJlZGRlZF93cyhzZWxmKToKICAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5FU1RSSU5HUzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhxdW9wcmkuZW5jb2Rlc3RyaW5nKHAsIHF1b3RldGFicz1UcnVlKSA9PSBlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHF1b3ByaS5kZWNvZGVzdHJpbmcoZSkgPT0gcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmkuZW5jb2Rlc3RyaW5nKHAsIHF1b3RldGFicz1UcnVlKSA9PSBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaS5kZWNvZGVzdHJpbmcoZSkgPT0gcCkKIAogICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KICAgICBkZWYgdGVzdF9lbmNvZGVfaGVhZGVyKHNlbGYpOgogICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLkhTVFJJTkdTOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHF1b3ByaS5lbmNvZGVzdHJpbmcocCwgaGVhZGVyPVRydWUpID09IGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmVuY29kZXN0cmluZyhwLCBoZWFkZXI9VHJ1ZSkgPT0gZSkKIAogICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KICAgICBkZWYgdGVzdF9kZWNvZGVfaGVhZGVyKHNlbGYpOgogICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLkhTVFJJTkdTOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHF1b3ByaS5kZWNvZGVzdHJpbmcoZSwgaGVhZGVyPVRydWUpID09IHApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmRlY29kZXN0cmluZyhlLCBoZWFkZXI9VHJ1ZSkgPT0gcCkKIAogICAgIGRlZiB0ZXN0X3NjcmlwdGVuY29kZShzZWxmKToKICAgICAgICAgKHAsIGUpID0gc2VsZi5TVFJJTkdTWy0xXQogICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItbXF1b3ByaSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm9jZXNzLnN0ZG91dC5jbG9zZSkKICAgICAgICAgY291dCwgY2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUocCkKICAgICAgICAgIyBPbiBXaW5kb3dzLCBQeXRob24gd2lsbCBvdXRwdXQgdGhlIHJlc3VsdCB0byBzdGRvdXQgdXNpbmcKICAgICAgICAgIyBDUkxGLCBhcyB0aGUgbW9kZSBvZiBzdGRvdXQgaXMgdGV4dCBtb2RlLiBUbyBjb21wYXJlIHRoaXMKQEAgLTE4OCw2ICsxODksNyBAQAogICAgICAgICAocCwgZSkgPSBzZWxmLlNUUklOR1NbLTFdCiAgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1tcXVvcHJpIiwgIi1kIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHByb2Nlc3Muc3Rkb3V0LmNsb3NlKQogICAgICAgICBjb3V0LCBjZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZShlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdXQuc3BsaXRsaW5lcygpLCBwLnNwbGl0bGluZXMoKSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQppbmRleCA1MGQ0NWYyLi5kZjgyOTkwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQpAQCAtNSw3ICs1LDcgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgd2FybmluZ3MKLWZyb20gbWF0aCBpbXBvcnQgbG9nLCBleHAsIHNxcnQsIHBpLCBmc3VtIGFzIG1zdW0KK2Zyb20gbWF0aCBpbXBvcnQgbG9nLCBleHAsIHBpLCBmc3VtLCBzaW4KIGZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKQEAgLTUzLDEwICs1Myw4IEBACiAgICAgICAgIHN0YXRlMyA9IHNlbGYuZ2VuLmdldHN0YXRlKCkgICAgIyBzL2IgZGlzdGluY3QgZnJvbSBzdGF0ZTIKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdGF0ZTIsIHN0YXRlMykKIAotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncyhxdWlldD1UcnVlKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncyhxdWlldD1UcnVlKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uanVtcGFoZWFkKSAgIyBuZWVkcyBhbiBhcmcKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uanVtcGFoZWFkLCAiaWNrIikgICMgd3JvbmcgdHlwZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5qdW1wYWhlYWQsIDIuMykgICMgd3JvbmcgdHlwZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5qdW1wYWhlYWQsIDIsIDMpICAjIHRvbyBtYW55CiAKICAgICBkZWYgdGVzdF9zYW1wbGUoc2VsZik6CkBAIC02OSw3ICs2Nyw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgaykKICAgICAgICAgICAgIHVuaXEgPSBzZXQocykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHVuaXEpLCBrKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHVuaXEgPD0gc2V0KHBvcHVsYXRpb24pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVuaXEgPD0gc2V0KHBvcHVsYXRpb24pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2VuLnNhbXBsZShbXSwgMCksIFtdKSAgIyB0ZXN0IGVkZ2UgY2FzZSBOPT1rPT0wCiAKICAgICBkZWYgdGVzdF9zYW1wbGVfZGlzdHJpYnV0aW9uKHNlbGYpOgpAQCAtMTE0LDcgKzExMiw3IEBACiAgICAgICAgICAgICBzYW1wID0gc2VsZi5nZW4uc2FtcGxlKGQsIGspCiAgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHdlIGdvdCBpbnRzIGJhY2sgKGtleXMpOyB0aGUgdmFsdWVzIGFyZSBjb21wbGV4LgogICAgICAgICAgICAgZm9yIHggaW4gc2FtcDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZSh4KSBpcyBpbnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoeCkgaXMgaW50KQogICAgICAgICBzYW1wLnNvcnQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNhbXAsIHJhbmdlKE4pKQogCkBAIC0yMzksNyArMjM3LDcgQEAKICAgICAgICAgY3VtID0gMAogICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKICAgICAgICAgICAgIHIgPSBzZWxmLmdlbi5yYW5kcmFuZ2Uoc3BhbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygwIDw9IHIgPCBzcGFuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gciA8IHNwYW4pCiAgICAgICAgICAgICBjdW0gfD0gcgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1bSwgc3Bhbi0xKQogCkBAIC0yNDksNyArMjQ3LDcgQEAKICAgICAgICAgICAgIHN0b3AgPSBzZWxmLmdlbi5yYW5kcmFuZ2UoMiAqKiAoaS0yKSkKICAgICAgICAgICAgIGlmIHN0b3AgPD0gc3RhcnQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oc3RhcnQgPD0gc2VsZi5nZW4ucmFuZHJhbmdlKHN0YXJ0LCBzdG9wKSA8IHN0b3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhcnQgPD0gc2VsZi5nZW4ucmFuZHJhbmdlKHN0YXJ0LCBzdG9wKSA8IHN0b3ApCiAKICAgICBkZWYgdGVzdF9yYW5nZWxpbWl0cyhzZWxmKToKICAgICAgICAgZm9yIHN0YXJ0LCBzdG9wIGluIFsoLTIsMCksICgtKDIqKjYwKS0yLC0oMioqNjApKSwgKDIqKjYwLDIqKjYwKzIpXToKQEAgLTI1OSw3ICsyNTcsNyBAQAogICAgIGRlZiB0ZXN0X2dlbnJhbmRiaXRzKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSByYW5nZXMKICAgICAgICAgZm9yIGsgaW4geHJhbmdlKDEsIDEwMDApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDAgPD0gc2VsZi5nZW4uZ2V0cmFuZGJpdHMoaykgPCAyKiprKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gc2VsZi5nZW4uZ2V0cmFuZGJpdHMoaykgPCAyKiprKQogCiAgICAgICAgICMgVmVyaWZ5IGFsbCBiaXRzIGFjdGl2ZQogICAgICAgICBnZXRiaXRzID0gc2VsZi5nZW4uZ2V0cmFuZGJpdHMKQEAgLTI4NSwxNyArMjgzLDE3IEBACiAgICAgICAgICAgICBudW1iaXRzID0gaSsxCiAgICAgICAgICAgICBrID0gaW50KDEuMDAwMDEgKyBfbG9nKG4sIDIpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBudW1iaXRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG4gPT0gMioqKGstMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobiA9PSAyKiooay0xKSkKIAogICAgICAgICAgICAgbiArPSBuIC0gMSAgICAgICMgY2hlY2sgMSBiZWxvdyB0aGUgbmV4dCBwb3dlciBvZiB0d28KICAgICAgICAgICAgIGsgPSBpbnQoMS4wMDAwMSArIF9sb2cobiwgMikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oayBpbiBbbnVtYml0cywgbnVtYml0cysxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygyKiprID4gbiA+IDIqKihrLTIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBbbnVtYml0cywgbnVtYml0cysxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTIpKQogCiAgICAgICAgICAgICBuIC09IG4gPj4gMTUgICAgICMgY2hlY2sgYSBsaXR0bGUgZmFydGhlciBiZWxvdyB0aGUgbmV4dCBwb3dlciBvZiB0d28KICAgICAgICAgICAgIGsgPSBpbnQoMS4wMDAwMSArIF9sb2cobiwgMikpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIG51bWJpdHMpICAgICAgICAjIG5vdGUgdGhlIHN0cm9uZ2VyIGFzc2VydGlvbgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDIqKmsgPiBuID4gMioqKGstMSkpICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTEpKSAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCiAKIAogY2xhc3MgTWVyc2VubmVUd2lzdGVyX1Rlc3RCYXNpY09wcyhUZXN0QmFzaWNPcHMpOgpAQCAtMzkxLDcgKzM4OSw3IEBACiAgICAgICAgIGN1bSA9IDAKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CiAgICAgICAgICAgICByID0gc2VsZi5nZW4ucmFuZHJhbmdlKHNwYW4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMCA8PSByIDwgc3BhbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IHIgPCBzcGFuKQogICAgICAgICAgICAgY3VtIHw9IHIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdW0sIHNwYW4tMSkKIApAQCAtNDAxLDcgKzM5OSw3IEBACiAgICAgICAgICAgICBzdG9wID0gc2VsZi5nZW4ucmFuZHJhbmdlKDIgKiogKGktMikpCiAgICAgICAgICAgICBpZiBzdG9wIDw9IHN0YXJ0OgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHN0YXJ0IDw9IHNlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCwgc3RvcCkgPCBzdG9wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YXJ0IDw9IHNlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCwgc3RvcCkgPCBzdG9wKQogCiAgICAgZGVmIHRlc3RfcmFuZ2VsaW1pdHMoc2VsZik6CiAgICAgICAgIGZvciBzdGFydCwgc3RvcCBpbiBbKC0yLDApLCAoLSgyKio2MCktMiwtKDIqKjYwKSksICgyKio2MCwyKio2MCsyKV06CkBAIC00MTUsNyArNDEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICA5NzkwNDg0NTc3NzM0MzUxMDQwNDcxODk1NjExNUwpCiAgICAgICAgICMgVmVyaWZ5IHJhbmdlcwogICAgICAgICBmb3IgayBpbiB4cmFuZ2UoMSwgMTAwMCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMCA8PSBzZWxmLmdlbi5nZXRyYW5kYml0cyhrKSA8IDIqKmspCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSBzZWxmLmdlbi5nZXRyYW5kYml0cyhrKSA8IDIqKmspCiAKICAgICAgICAgIyBWZXJpZnkgYWxsIGJpdHMgYWN0aXZlCiAgICAgICAgIGdldGJpdHMgPSBzZWxmLmdlbi5nZXRyYW5kYml0cwpAQCAtNDQxLDM1ICs0MzksNDMgQEAKICAgICAgICAgICAgIG51bWJpdHMgPSBpKzEKICAgICAgICAgICAgIGsgPSBpbnQoMS4wMDAwMSArIF9sb2cobiwgMikpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIG51bWJpdHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obiA9PSAyKiooay0xKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuID09IDIqKihrLTEpKQogCiAgICAgICAgICAgICBuICs9IG4gLSAxICAgICAgIyBjaGVjayAxIGJlbG93IHRoZSBuZXh0IHBvd2VyIG9mIHR3bwogICAgICAgICAgICAgayA9IGludCgxLjAwMDAxICsgX2xvZyhuLCAyKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhrIGluIFtudW1iaXRzLCBudW1iaXRzKzFdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDIqKmsgPiBuID4gMioqKGstMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIFtudW1iaXRzLCBudW1iaXRzKzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKmsgPiBuID4gMioqKGstMikpCiAKICAgICAgICAgICAgIG4gLT0gbiA+PiAxNSAgICAgIyBjaGVjayBhIGxpdHRsZSBmYXJ0aGVyIGJlbG93IHRoZSBuZXh0IHBvd2VyIG9mIHR3bwogICAgICAgICAgICAgayA9IGludCgxLjAwMDAxICsgX2xvZyhuLCAyKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbnVtYml0cykgICAgICAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMioqayA+IG4gPiAyKiooay0xKSkgICAjIG5vdGUgdGhlIHN0cm9uZ2VyIGFzc2VydGlvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKmsgPiBuID4gMioqKGstMSkpICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KIAogICAgIGRlZiB0ZXN0X3JhbmRyYW5nZV9idWdfMTU5MDg5MShzZWxmKToKICAgICAgICAgc3RhcnQgPSAxMDAwMDAwMDAwMDAwCiAgICAgICAgIHN0b3AgPSAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAgICAgIHN0ZXAgPSAtMjAwCiAgICAgICAgIHggPSBzZWxmLmdlbi5yYW5kcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdG9wIDwgeCA8PSBzdGFydCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0b3AgPCB4IDw9IHN0YXJ0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4K3N0b3ApJXN0ZXAsIDApCiAKLV9nYW1tYWNvZWZmID0gKDAuOTk5OTk5OTk5OTk5NTE4MywgNjc2LjUyMDM2ODEyMTg4MzUsIC0xMjU5LjEzOTIxNjcyMjI4OSwKLSAgICAgICAgICAgICAgNzcxLjMyMzQyODc3NTc2NzQsICAtMTc2LjYxNTAyOTE0OTgzODYsIDEyLjUwNzM0MzI0MDA5MDU2LAotICAgICAgICAgICAgICAtMC4xMzg1NzEwMzMxMjk2NTI2LCAwLjk5MzQ5MzcxMTM5MzA3NDhlLTA1LCAwLjE2NTk0NzAxODc0MDg0NjJlLTA2KQotCi1kZWYgZ2FtbWEoeiwgY29mPV9nYW1tYWNvZWZmLCBnPTcpOgotICAgIHogLT0gMS4wCi0gICAgcyA9IG1zdW0oW2NvZlswXV0gKyBbY29mW2ldIC8gKHoraSkgZm9yIGkgaW4gcmFuZ2UoMSxsZW4oY29mKSldKQotICAgIHogKz0gMC41Ci0gICAgcmV0dXJuICh6K2cpKip6IC8gZXhwKHorZykgKiBzcXJ0KDIuMCpwaSkgKiBzCitkZWYgZ2FtbWEoeiwgc3FydDJwaT0oMi4wKnBpKSoqMC41KToKKyAgICAjIFJlZmxlY3Rpb24gdG8gcmlnaHQgaGFsZiBvZiBjb21wbGV4IHBsYW5lCisgICAgaWYgeiA8IDAuNToKKyAgICAgICAgcmV0dXJuIHBpIC8gc2luKHBpKnopIC8gZ2FtbWEoMS4wLXopCisgICAgIyBMYW5jem9zIGFwcHJveGltYXRpb24gd2l0aCBnPTcKKyAgICBheiA9IHogKyAoNy4wIC0gMC41KQorICAgIHJldHVybiBheiAqKiAoei0wLjUpIC8gZXhwKGF6KSAqIHNxcnQycGkgKiBmc3VtKFsKKyAgICAgICAgMC45OTk5OTk5OTk5OTk1MTgzLAorICAgICAgICA2NzYuNTIwMzY4MTIxODgzNSAvIHosCisgICAgICAgIC0xMjU5LjEzOTIxNjcyMjI4OSAvICh6KzEuMCksCisgICAgICAgIDc3MS4zMjM0Mjg3NzU3Njc0IC8gKHorMi4wKSwKKyAgICAgICAgLTE3Ni42MTUwMjkxNDk4Mzg2IC8gKHorMy4wKSwKKyAgICAgICAgMTIuNTA3MzQzMjQwMDkwNTYgLyAoeis0LjApLAorICAgICAgICAtMC4xMzg1NzEwMzMxMjk2NTI2IC8gKHorNS4wKSwKKyAgICAgICAgMC45OTM0OTM3MTEzOTMwNzQ4ZS0wNSAvICh6KzYuMCksCisgICAgICAgIDAuMTY1OTQ3MDE4NzQwODQ2MmUtMDYgLyAoeis3LjApLAorICAgIF0pCiAKIGNsYXNzIFRlc3REaXN0cmlidXRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF96ZXJvaW5wdXRzKHNlbGYpOgpAQCAtNTI4LDcgKzUzNCw3IEBACiAKICAgICBkZWYgdGVzdF9fYWxsX18oc2VsZik6CiAgICAgICAgICMgdGVzdHMgdmFsaWRpdHkgYnV0IG5vdCBjb21wbGV0ZW5lc3Mgb2YgdGhlIF9fYWxsX18gbGlzdAotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2V0KHJhbmRvbS5fX2FsbF9fKSA8PSBzZXQoZGlyKHJhbmRvbSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KHJhbmRvbS5fX2FsbF9fKSA8PSBzZXQoZGlyKHJhbmRvbSkpKQogCiAgICAgZGVmIHRlc3RfcmFuZG9tX3N1YmNsYXNzX3dpdGhfa3dhcmdzKHNlbGYpOgogICAgICAgICAjIFNGIGJ1ZyAjMTQ4NjY2MyAtLSB0aGlzIHVzZWQgdG8gZXJyb25lb3VzbHkgcmFpc2UgYSBUeXBlRXJyb3IKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmUucHkgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CmluZGV4IGY4YTU2NDcuLmY5NzgwODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZS5weQpAQCAtMSw3ICsxLDcgQEAKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQogaW1wb3J0IHJlCiBmcm9tIHJlIGltcG9ydCBTY2FubmVyCi1pbXBvcnQgc3lzLCBvcywgdHJhY2ViYWNrCitpbXBvcnQgc3lzLCB0cmFjZWJhY2sKIGZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKIAogIyBNaXNjIHRlc3RzIGZyb20gVGltIFBldGVycycgcmUuZG9jCkBAIC02MDMsNyArNjAzLDcgQEAKICAgICAgICAgICAgIHVuaWNvZGUKICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKICAgICAgICAgICAgIHJldHVybiAjIG5vIHByb2JsZW0gaWYgd2UgaGF2ZSBubyB1bmljb2RlCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZS5jb21waWxlKCdidWdfOTI2MDc1JykgaXMgbm90CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5jb21waWxlKCdidWdfOTI2MDc1JykgaXMgbm90CiAgICAgICAgICAgICAgICAgICAgICByZS5jb21waWxlKGV2YWwoInUnYnVnXzkyNjA3NSciKSkpCiAKICAgICBkZWYgdGVzdF9idWdfOTMxODQ4KHNlbGYpOgpAQCAtNjMwLDYgKzYzMCwyNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZXIubmV4dCgpLnNwYW4oKSwgKDQsIDQpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBpdGVyLm5leHQpCiAKKyAgICBkZWYgdGVzdF9idWdfNjU2MShzZWxmKToKKyAgICAgICAgIyAnXGQnIHNob3VsZCBtYXRjaCBjaGFyYWN0ZXJzIGluIFVuaWNvZGUgY2F0ZWdvcnkgJ05kJworICAgICAgICAjIChOdW1iZXIsIERlY2ltYWwgRGlnaXQpLCBidXQgbm90IHRob3NlIGluICdObCcgKE51bWJlciwKKyAgICAgICAgIyBMZXR0ZXIpIG9yICdObycgKE51bWJlciwgT3RoZXIpLgorICAgICAgICBkZWNpbWFsX2RpZ2l0cyA9IFsKKyAgICAgICAgICAgIHUnXHUwMDM3JywgIyAnXE57RElHSVQgU0VWRU59JywgY2F0ZWdvcnkgJ05kJworICAgICAgICAgICAgdSdcdTBlNTgnLCAjICdcTntUSEFJIERJR0lUIFNJWH0nLCBjYXRlZ29yeSAnTmQnCisgICAgICAgICAgICB1J1x1ZmYxMCcsICMgJ1xOe0ZVTExXSURUSCBESUdJVCBaRVJPfScsIGNhdGVnb3J5ICdOZCcKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHggaW4gZGVjaW1hbF9kaWdpdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeXGQkJywgeCwgcmUuVU5JQ09ERSkuZ3JvdXAoMCksIHgpCisKKyAgICAgICAgbm90X2RlY2ltYWxfZGlnaXRzID0gWworICAgICAgICAgICAgdSdcdTIxNjUnLCAjICdcTntST01BTiBOVU1FUkFMIFNJWH0nLCBjYXRlZ29yeSAnTmwnCisgICAgICAgICAgICB1J1x1MzAzOScsICMgJ1xOe0hBTkdaSE9VIE5VTUVSQUwgVFdFTlRZfScsIGNhdGVnb3J5ICdObCcKKyAgICAgICAgICAgIHUnXHUyMDgyJywgIyAnXE57U1VCU0NSSVBUIFRXT30nLCBjYXRlZ29yeSAnTm8nCisgICAgICAgICAgICB1J1x1MzJiNCcsICMgJ1xOe0NJUkNMRUQgTlVNQkVSIFRISVJUWSBOSU5FfScsIGNhdGVnb3J5ICdObycKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHggaW4gbm90X2RlY2ltYWxfZGlnaXRzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goJ15cZCQnLCB4LCByZS5VTklDT0RFKSkKKwogICAgIGRlZiB0ZXN0X2VtcHR5X2FycmF5KHNlbGYpOgogICAgICAgICAjIFNGIGJ1ZiAxNjQ3NTQxCiAgICAgICAgIGltcG9ydCBhcnJheQpAQCAtNjkxLDcgKzcxMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIF9zcmUuY29tcGlsZSwgImFiYyIsIDAsIFtsb25nX292ZXJmbG93XSkKIAogZGVmIHJ1bl9yZV90ZXN0cygpOgotICAgIGZyb20gdGVzdC5yZV90ZXN0cyBpbXBvcnQgYmVuY2htYXJrcywgdGVzdHMsIFNVQ0NFRUQsIEZBSUwsIFNZTlRBWF9FUlJPUgorICAgIGZyb20gdGVzdC5yZV90ZXN0cyBpbXBvcnQgdGVzdHMsIFNVQ0NFRUQsIEZBSUwsIFNZTlRBWF9FUlJPUgogICAgIGlmIHZlcmJvc2U6CiAgICAgICAgIHByaW50ICdSdW5uaW5nIHJlX3Rlc3RzIHRlc3Qgc3VpdGUnCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkgYi9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5CmluZGV4IGEyMjEwZDQuLjExMDQ1YzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weQpAQCAtNiw5ICs2LDEwIEBACiB3aHkgdGhlIHRlc3RzIGNvdmVyIG9ubHkgYSBzbWFsbCBzdWJzZXQgb2YgdGhlIGludGVyZmFjZS4KICIiIgogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQogCi1pbXBvcnQgcmVhZGxpbmUKKyMgU2tpcCB0ZXN0cyBpZiB0aGVyZSBpcyBubyByZWFkbGluZSBtb2R1bGUKK3JlYWRsaW5lID0gaW1wb3J0X21vZHVsZSgncmVhZGxpbmUnKQogCiBjbGFzcyBUZXN0SGlzdG9yeU1hbmlwdWxhdGlvbiAodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0SGlzdG9yeVVwZGF0ZXMoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlcHIucHkgYi9MaWIvdGVzdC90ZXN0X3JlcHIucHkKaW5kZXggOGM2ODNmYi4uOGIyMGFjZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZXByLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVwci5weQpAQCAtOCw3ICs4LDcgQEAKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIF9jaGVja19weTNrX3dhcm5pbmdzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3B5M2tfd2FybmluZ3MKIGZyb20gcmVwciBpbXBvcnQgcmVwciBhcyByICMgRG9uJ3Qgc2hhZG93IGJ1aWx0aW4gcmVwcgogZnJvbSByZXByIGltcG9ydCBSZXByCiAKQEAgLTIyLDcgKzIyLDcgQEAKIGNsYXNzIFJlcHJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIGVxKHIoImFiYyIpLCAiJ2FiYyciKQogICAgICAgICBlcShyKCJhYmNkZWZnaGlqa2xtbm9wIiksIidhYmNkZWZnaGlqa2xtbm9wJyIpCiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgZXEocihzKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF90dXBsZShzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgZXEocigoMSwpKSwgIigxLCkiKQogCiAgICAgICAgIHQzID0gKDEsIDIsIDMpCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CiAgICAgICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCiAKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyBUdXBsZXMgZ2l2ZSB1cCBhZnRlciA2IGVsZW1lbnRzCiAgICAgICAgIGVxKHIoKCkpLCAiKCkiKQogICAgICAgICBlcShyKCgxLCkpLCAiKDEsKSIpCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgICAgICAgICAgICAiYXJyYXkoJ2knLCBbMSwgMiwgMywgNCwgNSwgLi4uXSkiKQogCiAgICAgZGVmIHRlc3RfbnVtYmVycyhzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgZXEocigxMjMpLCByZXByKDEyMykpCiAgICAgICAgIGVxKHIoMTIzTCksIHJlcHIoMTIzTCkpCiAgICAgICAgIGVxKHIoMS4wLzMpLCByZXByKDEuMC8zKSkKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICBlcShyKG4pLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2luc3RhbmNlKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBpMSA9IENsYXNzV2l0aFJlcHIoImEiKQogICAgICAgICBlcShyKGkxKSwgcmVwcihpMSkpCiAKQEAgLTEyMywzOSArMTIzLDM5IEBACiAgICAgICAgIGVxKHIoaTMpLCAoIjxDbGFzc1dpdGhGYWlsaW5nUmVwciBpbnN0YW5jZSBhdCAleD4iJWlkKGkzKSkpCiAKICAgICAgICAgcyA9IHIoQ2xhc3NXaXRoRmFpbGluZ1JlcHIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLnN0YXJ0c3dpdGgoIjxjbGFzcyAiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuZW5kc3dpdGgoIj4iKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuZmluZCgiLi4uIikgPT0gOCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiPGNsYXNzICIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiPiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5maW5kKCIuLi4iKSA9PSA4KQogCiAgICAgZGVmIHRlc3RfZmlsZShzZWxmKToKICAgICAgICAgZnAgPSBvcGVuKHVuaXR0ZXN0Ll9fZmlsZV9fKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVwcihmcCkuc3RhcnRzd2l0aCgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZnApLnN0YXJ0c3dpdGgoCiAgICAgICAgICAgICAiPG9wZW4gZmlsZSAnJXMnLCBtb2RlICdyJyBhdCAweCIgJSB1bml0dGVzdC5fX2ZpbGVfXykpCiAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlcHIoZnApLnN0YXJ0c3dpdGgoCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGZwKS5zdGFydHN3aXRoKAogICAgICAgICAgICAgIjxjbG9zZWQgZmlsZSAnJXMnLCBtb2RlICdyJyBhdCAweCIgJSB1bml0dGVzdC5fX2ZpbGVfXykpCiAKICAgICBkZWYgdGVzdF9sYW1iZGEoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXByKGxhbWJkYSB4OiB4KS5zdGFydHN3aXRoKAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihsYW1iZGEgeDogeCkuc3RhcnRzd2l0aCgKICAgICAgICAgICAgICI8ZnVuY3Rpb24gPGxhbWJkYSIpKQogICAgICAgICAjIFhYWCBhbm9ueW1vdXMgZnVuY3Rpb25zPyAgc2VlIGZ1bmNfcmVwcgogCiAgICAgZGVmIHRlc3RfYnVpbHRpbl9mdW5jdGlvbihzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyBGdW5jdGlvbnMKICAgICAgICAgZXEocmVwcihoYXNoKSwgJzxidWlsdC1pbiBmdW5jdGlvbiBoYXNoPicpCiAgICAgICAgICMgTWV0aG9kcwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVwcignJy5zcGxpdCkuc3RhcnRzd2l0aCgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoJycuc3BsaXQpLnN0YXJ0c3dpdGgoCiAgICAgICAgICAgICAnPGJ1aWx0LWluIG1ldGhvZCBzcGxpdCBvZiBzdHIgb2JqZWN0IGF0IDB4JykpCiAKICAgICBkZWYgdGVzdF94cmFuZ2Uoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIGVxKHJlcHIoeHJhbmdlKDEpKSwgJ3hyYW5nZSgxKScpCiAgICAgICAgIGVxKHJlcHIoeHJhbmdlKDEsIDIpKSwgJ3hyYW5nZSgxLCAyKScpCiAgICAgICAgIGVxKHJlcHIoeHJhbmdlKDEsIDIsIDMpKSwgJ3hyYW5nZSgxLCA0LCAzKScpCiAKICAgICBkZWYgdGVzdF9uZXN0aW5nKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICAjIGV2ZXJ5dGhpbmcgaXMgbWVhbnQgdG8gZ2l2ZSB1cCBhZnRlciA2IGxldmVscy4KICAgICAgICAgZXEocihbW1tbW1tbXV1dXV1dXSksICJbW1tbW1tbXV1dXV1dXSIpCiAgICAgICAgIGVxKHIoW1tbW1tbW1tdXV1dXV1dXSksICJbW1tbW1tbLi4uXV1dXV1dXSIpCkBAIC0xNzQsMTYgKzE3NCwxNiBAQAogICAgIGRlZiB0ZXN0X2J1ZmZlcihzZWxmKToKICAgICAgICAgIyBYWFggZG9lc24ndCB0ZXN0IGJ1ZmZlcnMgd2l0aCBubyBiX2Jhc2Ugb3IgcmVhZC13cml0ZSBidWZmZXJzIChzZWUKICAgICAgICAgIyBidWZmZXJvYmplY3QuYykuICBUaGUgdGVzdCBpcyBmYWlybHkgaW5jb21wbGV0ZSB0b28uICBTaWdoLgotICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgeCA9IGJ1ZmZlcignZm9vJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlcHIoeCkuc3RhcnRzd2l0aCgnPHJlYWQtb25seSBidWZmZXIgZm9yIDB4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHgpLnN0YXJ0c3dpdGgoJzxyZWFkLW9ubHkgYnVmZmVyIGZvciAweCcpKQogCiAgICAgZGVmIHRlc3RfY2VsbChzZWxmKToKICAgICAgICAgIyBYWFggSG1tPyBIb3cgdG8gZ2V0IGF0IGEgY2VsbCBvYmplY3Q/CiAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X2Rlc2NyaXB0b3JzKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICAjIG1ldGhvZCBkZXNjcmlwdG9ycwogICAgICAgICBlcShyZXByKGRpY3QuaXRlbXMpLCAiPG1ldGhvZCAnaXRlbXMnIG9mICdkaWN0JyBvYmplY3RzPiIpCiAgICAgICAgICMgWFhYIG1lbWJlciBkZXNjcmlwdG9ycwpAQCAtMTkzLDkgKzE5Myw5IEBACiAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICBkZWYgZm9vKGNscyk6IHBhc3MKICAgICAgICAgeCA9IHN0YXRpY21ldGhvZChDLmZvbykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlcHIoeCkuc3RhcnRzd2l0aCgnPHN0YXRpY21ldGhvZCBvYmplY3QgYXQgMHgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoeCkuc3RhcnRzd2l0aCgnPHN0YXRpY21ldGhvZCBvYmplY3QgYXQgMHgnKSkKICAgICAgICAgeCA9IGNsYXNzbWV0aG9kKEMuZm9vKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVwcih4KS5zdGFydHN3aXRoKCc8Y2xhc3NtZXRob2Qgb2JqZWN0IGF0IDB4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHgpLnN0YXJ0c3dpdGgoJzxjbGFzc21ldGhvZCBvYmplY3QgYXQgMHgnKSkKIAogICAgIGRlZiB0ZXN0X3Vuc29ydGFibGUoc2VsZik6CiAgICAgICAgICMgUmVwci5yZXByKCkgdXNlZCB0byBjYWxsIHNvcnRlZCgpIG9uIHNldHMsIGZyb3plbnNldHMgYW5kIGRpY3RzCkBAIC0yNDQsNyArMjQ0LDcgQEAKICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLnN1YnBrZ25hbWUsIHNlbGYucGtnbmFtZSArIG9zLmV4dHNlcCArICdweScpKQogICAgICAgICBmcm9tIGFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbi5hcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24gaW1wb3J0IGFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbgogICAgICAgICBlcShyZXByKGFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbiksCkBAIC0yNTIsNyArMjUyLDcgQEAKICAgICAgICAgZXEocmVwcihzeXMpLCAiPG1vZHVsZSAnc3lzJyAoYnVpbHQtaW4pPiIpCiAKICAgICBkZWYgdGVzdF90eXBlKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5zdWJwa2duYW1lLCAnZm9vJytvcy5leHRzZXArJ3B5JyksICcnJ1wKIGNsYXNzIGZvbyhvYmplY3QpOgogICAgIHBhc3MKQEAgLTI3Myw3ICsyNzMsNyBAQAogJycnKQogICAgICAgICBmcm9tIGFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbi5hcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24gaW1wb3J0IGJhcgogICAgICAgICAjIE1vZHVsZSBuYW1lIG1heSBiZSBwcmVmaXhlZCB3aXRoICJ0ZXN0LiIsIGRlcGVuZGluZyBvbiBob3cgcnVuLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVwcihiYXIuYmFyKS5zdGFydHN3aXRoKAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihiYXIuYmFyKS5zdGFydHN3aXRoKAogICAgICAgICAgICAgIjxjbGFzcyAlcy5iYXIgYXQgMHgiICUgYmFyLl9fbmFtZV9fKSkKIAogICAgIGRlZiB0ZXN0X2luc3RhbmNlKHNlbGYpOgpAQCAtMjgzLDExICsyODMsMTEgQEAKICcnJykKICAgICAgICAgZnJvbSBhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24uYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uIGltcG9ydCBiYXoKICAgICAgICAgaWJheiA9IGJhei5iYXooKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVwcihpYmF6KS5zdGFydHN3aXRoKAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihpYmF6KS5zdGFydHN3aXRoKAogICAgICAgICAgICAgIjwlcy5iYXogaW5zdGFuY2UgYXQgMHgiICUgYmF6Ll9fbmFtZV9fKSkKIAogICAgIGRlZiB0ZXN0X21ldGhvZChzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgdG91Y2gob3MucGF0aC5qb2luKHNlbGYuc3VicGtnbmFtZSwgJ3F1eCcrb3MuZXh0c2VwKydweScpLCAnJydcCiBjbGFzcyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYToKICAgICBkZWYgYW1ldGhvZChzZWxmKTogcGFzcwpAQCAtMjk4LDcgKzI5OCw3IEBACiAgICAgICAgICc8dW5ib3VuZCBtZXRob2QgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEuYW1ldGhvZD4nKQogICAgICAgICAjIEJvdW5kIG1ldGhvZCBuZXh0CiAgICAgICAgIGlxdXggPSBxdXguYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVwcihpcXV4LmFtZXRob2QpLnN0YXJ0c3dpdGgoCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGlxdXguYW1ldGhvZCkuc3RhcnRzd2l0aCgKICAgICAgICAgICAgICc8Ym91bmQgbWV0aG9kIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhLmFtZXRob2Qgb2YgPCVzLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIGluc3RhbmNlIGF0IDB4JyBcCiAgICAgICAgICAgICAlIChxdXguX19uYW1lX18sKSApKQogCkBAIC0zMjAsOCArMzIwLDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChSZXByVGVzdHMpCi0gICAgaWYgb3MubmFtZSAhPSAnbWFjJzoKLSAgICAgICAgcnVuX3VuaXR0ZXN0KExvbmdSZXByVGVzdCkKKyAgICBydW5fdW5pdHRlc3QoTG9uZ1JlcHJUZXN0KQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5IGIvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQppbmRleCBmMzU0YTFiLi41MjY5MmE3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKQEAgLTEsOSArMSw5IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci0KLWltcG9ydCByZXNvdXJjZQogaW1wb3J0IHRpbWUKIAorcmVzb3VyY2UgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgncmVzb3VyY2UnKQorCiAjIFRoaXMgdGVzdCBpcyBjaGVja2luZyBhIGZldyBzcGVjaWZpYyBwcm9ibGVtIHNwb3RzIHdpdGggdGhlIHJlc291cmNlIG1vZHVsZS4KIAogY2xhc3MgUmVzb3VyY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmZjODIyLnB5IGIvTGliL3Rlc3QvdGVzdF9yZmM4MjIucHkKaW5kZXggYTA1MzI1ZC4uZDhhMDI4MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZmM4MjIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZmM4MjIucHkKQEAgLTE2LDIzICsxNiwyMyBAQAogICAgIGRlZiB0ZXN0X2dldChzZWxmKToKICAgICAgICAgbXNnID0gc2VsZi5jcmVhdGVfbWVzc2FnZSgKICAgICAgICAgICAgICdUbzogImxhc3QsIGZpcnN0IiA8dXNlcmlkQGZvby5uZXQ+XG5cbnRlc3RcbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0KCJ0byIpID09ICcibGFzdCwgZmlyc3QiIDx1c2VyaWRAZm9vLm5ldD4nKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldCgiVE8iKSA9PSAnImxhc3QsIGZpcnN0IiA8dXNlcmlkQGZvby5uZXQ+JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXQoIk5vLVN1Y2gtSGVhZGVyIikgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXQoIk5vLVN1Y2gtSGVhZGVyIiwgIk5vLVN1Y2gtVmFsdWUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmdldCgidG8iKSA9PSAnImxhc3QsIGZpcnN0IiA8dXNlcmlkQGZvby5uZXQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5nZXQoIlRPIikgPT0gJyJsYXN0LCBmaXJzdCIgPHVzZXJpZEBmb28ubmV0PicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuZ2V0KCJOby1TdWNoLUhlYWRlciIpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuZ2V0KCJOby1TdWNoLUhlYWRlciIsICJOby1TdWNoLVZhbHVlIikKICAgICAgICAgICAgICAgICAgICAgID09ICJOby1TdWNoLVZhbHVlIikKIAogICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CiAgICAgICAgIG1zZyA9IHNlbGYuY3JlYXRlX21lc3NhZ2UoCiAgICAgICAgICAgICAnVG86ICJsYXN0LCBmaXJzdCIgPHVzZXJpZEBmb28ubmV0PlxuXG50ZXN0XG4nKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG1zZy5oYXNfa2V5KCJOZXctSGVhZGVyIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuc2V0ZGVmYXVsdCgiTmV3LUhlYWRlciIsICJOZXctVmFsdWUiKSA9PSAiTmV3LVZhbHVlIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5zZXRkZWZhdWx0KCJOZXctSGVhZGVyIiwgIkRpZmZlcmVudC1WYWx1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgbXNnLmhhc19rZXkoIk5ldy1IZWFkZXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5zZXRkZWZhdWx0KCJOZXctSGVhZGVyIiwgIk5ldy1WYWx1ZSIpID09ICJOZXctVmFsdWUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLnNldGRlZmF1bHQoIk5ldy1IZWFkZXIiLCAiRGlmZmVyZW50LVZhbHVlIikKICAgICAgICAgICAgICAgICAgICAgID09ICJOZXctVmFsdWUiKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnWyJuZXctaGVhZGVyIl0gPT0gIk5ldy1WYWx1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2dbIm5ldy1oZWFkZXIiXSA9PSAiTmV3LVZhbHVlIikKIAotICAgICAgICBzZWxmLmFzc2VydF8obXNnLnNldGRlZmF1bHQoIkFub3RoZXItSGVhZGVyIikgPT0gIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dbImFub3RoZXItaGVhZGVyIl0gPT0gIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuc2V0ZGVmYXVsdCgiQW5vdGhlci1IZWFkZXIiKSA9PSAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZ1siYW5vdGhlci1oZWFkZXIiXSA9PSAiIikKIAogICAgIGRlZiBjaGVjayhzZWxmLCBtc2csIHJlc3VsdHMpOgogICAgICAgICAiIiJDaGVjayBhZGRyZXNzZXMgYW5kIHRoZSBkYXRlLiIiIgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yaWNoY21wLnB5IGIvTGliL3Rlc3QvdGVzdF9yaWNoY21wLnB5CmluZGV4IDdlNDQxMmEuLjcwZmEwZDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmljaGNtcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JpY2hjbXAucHkKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVhbHJlcyksIGxlbihleHByZXMpKQogICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihyZWFscmVzKSk6CiAgICAgICAgICAgICAgICAgIyByZXN1bHRzIGFyZSBib29sLCBzbyB3ZSBjYW4gdXNlICJpcyIgaGVyZQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhyZWFscmVzW2ldIGlzIGV4cHJlc1tpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVhbHJlc1tpXSBpcyBleHByZXNbaV0pCiAKICAgICBkZWYgdGVzdF9taXhlZChzZWxmKToKICAgICAgICAgIyBjaGVjayB0aGF0IGNvbXBhcmlzb25zIGludm9sdmluZyBWZWN0b3Igb2JqZWN0cwpAQCAtMTYzLDcgKzE2Myw3IEBACiAgICAgICAgICAgICAgICAgZm9yIG9wIGluIG9wbWFwW29wbmFtZV06CiAgICAgICAgICAgICAgICAgICAgIHJlYWxyZXMgPSBvcCh0YSwgdGIpCiAgICAgICAgICAgICAgICAgICAgIHJlYWxyZXMgPSBnZXRhdHRyKHJlYWxyZXMsICJ4IiwgcmVhbHJlcykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHJlYWxyZXMgaXMgZXhwcmVzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVhbHJlcyBpcyBleHByZXMpCiAKICAgICBkZWYgdGVzdF92YWx1ZXMoc2VsZik6CiAgICAgICAgICMgY2hlY2sgYWxsIG9wZXJhdG9ycyBhbmQgYWxsIGNvbXBhcmlzb24gcmVzdWx0cwpAQCAtMTkyLDEzICsxOTIsMTMgQEAKIAogICAgIGRlZiB0ZXN0X21pc2JlaGF2aW4oc2VsZik6CiAgICAgICAgIGNsYXNzIE1pc2I6Ci0gICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKTogcmV0dXJuIDAKLSAgICAgICAgICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOiByZXR1cm4gMAotICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6IHJldHVybiAwCi0gICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKTogcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQsICJUaGlzIHNob3VsZG4ndCBoYXBwZW4iCi0gICAgICAgICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKTogcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQsICJUaGlzIHNob3VsZG4ndCBoYXBwZW4iCi0gICAgICAgICAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKTogcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQsICJUaGlzIHNob3VsZG4ndCBoYXBwZW4iCi0gICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6IHJhaXNlIFJ1bnRpbWVFcnJvciwgImV4cGVjdGVkIgorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmXywgb3RoZXIpOiByZXR1cm4gMAorICAgICAgICAgICAgZGVmIF9fZ3RfXyhzZWxmXywgb3RoZXIpOiByZXR1cm4gMAorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmXywgb3RoZXIpOiByZXR1cm4gMAorICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmXywgb3RoZXIpOiBzZWxmLmZhaWwoIlRoaXMgc2hvdWxkbid0IGhhcHBlbiIpCisgICAgICAgICAgICBkZWYgX19nZV9fKHNlbGZfLCBvdGhlcik6IHNlbGYuZmFpbCgiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIikKKyAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZl8sIG90aGVyKTogc2VsZi5mYWlsKCJUaGlzIHNob3VsZG4ndCBoYXBwZW4iKQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZl8sIG90aGVyKTogcmFpc2UgUnVudGltZUVycm9yLCAiZXhwZWN0ZWQiCiAgICAgICAgIGEgPSBNaXNiKCkKICAgICAgICAgYiA9IE1pc2IoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGE8YiwgMCkKQEAgLTIzOSw4ICsyMzksOCBAQAogICAgICAgICBiLmFwcGVuZCgxNykKICAgICAgICAgIyBFdmVuIHJlY3Vyc2l2ZSBsaXN0cyBvZiBkaWZmZXJlbnQgbGVuZ3RocyBhcmUgZGlmZmVyZW50LAogICAgICAgICAjIGJ1dCB0aGV5IGNhbm5vdCBiZSBvcmRlcmVkCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKGEgPT0gYikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhICE9IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKGEgPT0gYikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICE9IGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IubHQsIGEsIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IubGUsIGEsIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IuZ3QsIGEsIGIpCkBAIC0yNTAsOSArMjUwLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5uZSwgYSwgYikKICAgICAgICAgYS5pbnNlcnQoMCwgMTEpCiAgICAgICAgIGIuaW5zZXJ0KDAsIDEyKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IChhID09IGIpKQotICAgICAgICBzZWxmLmFzc2VydF8oYSAhPSBiKQotICAgICAgICBzZWxmLmFzc2VydF8oYSA8IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKGEgPT0gYikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICE9IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIDwgYikKIAogY2xhc3MgRGljdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yNzEsMTkgKzI3MSwxNiBAQAogICAgICAgICAgICAgaW1hZzFiW2tdID0gdgogICAgICAgICBpbWFnMiA9IGltYWcxYi5jb3B5KCkKICAgICAgICAgaW1hZzJba10gPSB2ICsgMS4wCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhpbWFnMWEgPT0gaW1hZzFhKQotICAgICAgICBzZWxmLmFzc2VydF8oaW1hZzFhID09IGltYWcxYikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGltYWcyID09IGltYWcyKQotICAgICAgICBzZWxmLmFzc2VydF8oaW1hZzFhICE9IGltYWcyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW1hZzFhID09IGltYWcxYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGltYWcxYSA9PSBpbWFnMWIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbWFnMiA9PSBpbWFnMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGltYWcxYSAhPSBpbWFnMikKICAgICAgICAgZm9yIG9wbmFtZSBpbiAoImx0IiwgImxlIiwgImd0IiwgImdlIik6CiAgICAgICAgICAgICBmb3Igb3AgaW4gb3BtYXBbb3BuYW1lXToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wLCBpbWFnMWEsIGltYWcyKQogCiBjbGFzcyBMaXN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgYXNzZXJ0SXMoc2VsZiwgYSwgYik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGIpCi0KICAgICBkZWYgdGVzdF9jb3ZlcmFnZShzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBhbGwgY29tcGFyaXNvbnMgZm9yIGxpc3RzCiAgICAgICAgIHggPSBbNDJdCkBAIC0zMzEsNyArMzI4LDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVmVjdG9yVGVzdCwgTnVtYmVyVGVzdCwgTWlzY1Rlc3QsIExpc3RUZXN0KQotICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCgiZGljdCBpbmVxdWFsaXR5IGNvbXBhcmlzb25zICIKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCgiZGljdCBpbmVxdWFsaXR5IGNvbXBhcmlzb25zICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3Qgc3VwcG9ydGVkIGluIDMueCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChEaWN0VGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfcmxjb21wbGV0ZXIucHkgYi9MaWIvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMGU3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5CkBAIC0wLDAgKzEsNzMgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IF9fYnVpbHRpbl9fIGFzIGJ1aWx0aW5zCitpbXBvcnQgcmxjb21wbGV0ZXIKKworY2xhc3MgQ29tcGxldGVNZShvYmplY3QpOgorICAgICIiIiBUcml2aWFsIGNsYXNzIHVzZWQgaW4gdGVzdGluZyBybGNvbXBsZXRlci5Db21wbGV0ZXIuICIiIgorICAgIHNwYW0gPSAxCisKKworY2xhc3MgVGVzdFJsY29tcGxldGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc3RkY29tcGxldGVyID0gcmxjb21wbGV0ZXIuQ29tcGxldGVyKCkKKyAgICAgICAgc2VsZi5jb21wbGV0ZXIgPSBybGNvbXBsZXRlci5Db21wbGV0ZXIoZGljdChzcGFtPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZ2c9c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRlTWU9Q29tcGxldGVNZSkpCisKKyAgICAgICAgIyBmb3JjZXMgc3RkY29tcGxldGVyIHRvIGJpbmQgYnVpbHRpbnMgbmFtZXNwYWNlCisgICAgICAgIHNlbGYuc3RkY29tcGxldGVyLmNvbXBsZXRlKCcnLCAwKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBjbGFzcyBBKGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKGxpc3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnN0ZGNvbXBsZXRlci51c2VfbWFpbl9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmNvbXBsZXRlci51c2VfbWFpbl9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShybGNvbXBsZXRlci5Db21wbGV0ZXIoQSgpKS51c2VfbWFpbl9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBybGNvbXBsZXRlci5Db21wbGV0ZXIsIEIoKDEsKSkpCisKKyAgICBkZWYgdGVzdF9nbG9iYWxfbWF0Y2hlcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHdpdGggYnVpbHRpbnMgbmFtZXNwYWNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHNlbGYuc3RkY29tcGxldGVyLmdsb2JhbF9tYXRjaGVzKCdkaScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbeCsnKCcgZm9yIHggaW4gZGlyKGJ1aWx0aW5zKSBpZiB4LnN0YXJ0c3dpdGgoJ2RpJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZWxmLnN0ZGNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnc3QnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW3grJygnIGZvciB4IGluIGRpcihidWlsdGlucykgaWYgeC5zdGFydHN3aXRoKCdzdCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0ZGNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnYWtha3NhamFkaGFrJyksIFtdKQorCisgICAgICAgICMgdGVzdCB3aXRoIGEgY3VzdG9taXplZCBuYW1lc3BhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnQ29tcGxldGVNJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydDb21wbGV0ZU1lKCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tcGxldGVyLmdsb2JhbF9tYXRjaGVzKCdlZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnZWdnKCddKQorICAgICAgICAjIFhYWDogc2VlIGlzc3VlNTI1NgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tcGxldGVyLmdsb2JhbF9tYXRjaGVzKCdDb21wbGV0ZU0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ0NvbXBsZXRlTWUoJ10pCisKKyAgICBkZWYgdGVzdF9hdHRyX21hdGNoZXMoc2VsZik6CisgICAgICAgICMgdGVzdCB3aXRoIGJ1aWx0aW5zIG5hbWVzcGFjZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RkY29tcGxldGVyLmF0dHJfbWF0Y2hlcygnc3RyLnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0ci57fSgnLmZvcm1hdCh4KSBmb3IgeCBpbiBkaXIoc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnN0YXJ0c3dpdGgoJ3MnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGRjb21wbGV0ZXIuYXR0cl9tYXRjaGVzKCd0dXBsZS5mb29zcGFtZWdnJyksIFtdKQorCisgICAgICAgICMgdGVzdCB3aXRoIGEgY3VzdG9taXplZCBuYW1lc3BhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5hdHRyX21hdGNoZXMoJ0NvbXBsZXRlTWUuc3AnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ0NvbXBsZXRlTWUuc3BhbSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tcGxldGVyLmF0dHJfbWF0Y2hlcygnQ29tcGxldGVtZS5lZ2cnKSwgW10pCisKKyAgICAgICAgQ29tcGxldGVNZS5tZSA9IENvbXBsZXRlTWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5hdHRyX21hdGNoZXMoJ0NvbXBsZXRlTWUubWUubWUuc3AnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ0NvbXBsZXRlTWUubWUubWUuc3BhbSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tcGxldGVyLmF0dHJfbWF0Y2hlcygnZWdnLnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2VnZy57fSgnLmZvcm1hdCh4KSBmb3IgeCBpbiBkaXIoc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnN0YXJ0c3dpdGgoJ3MnKV0pCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0Umxjb21wbGV0ZXIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yb2JvdHBhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3Rfcm9ib3RwYXJzZXIucHkKaW5kZXggNjUwYjYwMy4uMzM3NmE4YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yb2JvdHBhcnNlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JvYm90cGFyc2VyLnB5CkBAIC0yMCw5ICsyMCw5IEBACiAgICAgICAgICAgICB1cmwgPSBzZWxmLnVybAogICAgICAgICAgICAgYWdlbnQgPSBzZWxmLmFnZW50CiAgICAgICAgIGlmIHNlbGYuZ29vZDoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLnBhcnNlci5jYW5fZmV0Y2goYWdlbnQsIHVybCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuY2FuX2ZldGNoKGFnZW50LCB1cmwpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYoc2VsZi5wYXJzZXIuY2FuX2ZldGNoKGFnZW50LCB1cmwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnBhcnNlci5jYW5fZmV0Y2goYWdlbnQsIHVybCkpCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuc3RyCkBAIC0yMDIsNyArMjAyLDE4IEBACiBSb2JvdFRlc3QoMTMsIGRvYywgZ29vZCwgYmFkLCBhZ2VudD0iZ29vZ2xlYm90IikKIAogCi0jIDE0LiBGb3IgaXNzdWUgIzQxMDggKG9iZXkgZmlyc3QgKiBlbnRyeSkKKyMgMTQuIEZvciBpc3N1ZSAjNjMyNSAocXVlcnkgc3RyaW5nIHN1cHBvcnQpCitkb2MgPSAiIiIKK1VzZXItYWdlbnQ6ICoKK0Rpc2FsbG93OiAvc29tZS9wYXRoP25hbWU9dmFsdWUKKyIiIgorCitnb29kID0gWycvc29tZS9wYXRoJ10KK2JhZCA9IFsnL3NvbWUvcGF0aD9uYW1lPXZhbHVlJ10KKworUm9ib3RUZXN0KDE0LCBkb2MsIGdvb2QsIGJhZCkKKworIyAxNS4gRm9yIGlzc3VlICM0MTA4IChvYmV5IGZpcnN0ICogZW50cnkpCiBkb2MgPSAiIiIKIFVzZXItYWdlbnQ6ICoKIERpc2FsbG93OiAvc29tZS9wYXRoCkBAIC0yMTQsMjIgKzIyNSwzNiBAQAogZ29vZCA9IFsnL2Fub3RoZXIvcGF0aCddCiBiYWQgPSBbJy9zb21lL3BhdGgnXQogCi1Sb2JvdFRlc3QoMTQsIGRvYywgZ29vZCwgYmFkKQorUm9ib3RUZXN0KDE1LCBkb2MsIGdvb2QsIGJhZCkKIAogCi1jbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHJ1blRlc3Qoc2VsZik6CitjbGFzcyBOZXR3b3JrVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RQYXNzd29yZFByb3RlY3RlZFNpdGUoc2VsZik6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCi0gICAgICAgICMgd2hvbGUgc2l0ZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQuCi0gICAgICAgIHVybCA9ICdodHRwOi8vbXVlYmxlc21vcmFsZWRhLmNvbScKLSAgICAgICAgcGFyc2VyID0gcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyKCkKLSAgICAgICAgcGFyc2VyLnNldF91cmwodXJsKQotICAgICAgICBwYXJzZXIucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmNhbl9mZXRjaCgiKiIsIHVybCsiL3JvYm90cy50eHQiKSwgRmFsc2UpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgnbXVlYmxlc21vcmFsZWRhLmNvbScpOgorICAgICAgICAgICAgdXJsID0gJ2h0dHA6Ly9tdWVibGVzbW9yYWxlZGEuY29tJworICAgICAgICAgICAgcGFyc2VyID0gcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyKCkKKyAgICAgICAgICAgIHBhcnNlci5zZXRfdXJsKHVybCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXJzZXIucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCclcyBpcyB1bmF2YWlsYWJsZScgJSB1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5jYW5fZmV0Y2goIioiLCB1cmwrIi9yb2JvdHMudHh0IiksIEZhbHNlKQorCisgICAgZGVmIHRlc3RQeXRob25Pcmcoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgnd3d3LnB5dGhvbi5vcmcnKToKKyAgICAgICAgICAgIHBhcnNlciA9IHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcigKKyAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5weXRob24ub3JnL3JvYm90cy50eHQiKQorICAgICAgICAgICAgcGFyc2VyLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgIHBhcnNlci5jYW5fZmV0Y2goIioiLCAiaHR0cDovL3d3dy5weXRob24ub3JnL3JvYm90cy50eHQiKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0cykKLSAgICBUZXN0Q2FzZSgpLnJ1bigpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChOZXR3b3JrVGVzdENhc2UpCiAKIGlmIF9fbmFtZV9fPT0nX19tYWluX18nOgogICAgIHRlc3Rfc3VwcG9ydC52ZXJib3NlID0gMQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ydW5weS5weSBiL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKaW5kZXggMTY1Y2I2My4uZGJjYjIzZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ydW5weS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CkBAIC0zLDEwICszLDE0IEBACiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCitpbXBvcnQgcmUKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgcnVuX3VuaXR0ZXN0LCBmb3JnZXQKLWZyb20gcnVucHkgaW1wb3J0IF9ydW5fY29kZSwgX3J1bl9tb2R1bGVfY29kZSwgcnVuX21vZHVsZQorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0ICh0ZW1wX2RpciwgbWFrZV9zY3JpcHQsIGNvbXBpbGVfc2NyaXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3BrZywgbWFrZV96aXBfc2NyaXB0LCBtYWtlX3ppcF9wa2cpCiAKKworZnJvbSBydW5weSBpbXBvcnQgX3J1bl9jb2RlLCBfcnVuX21vZHVsZV9jb2RlLCBydW5fbW9kdWxlLCBydW5fcGF0aAogIyBOb3RlOiBUaGlzIG1vZHVsZSBjYW4ndCBzYWZlbHkgdGVzdCBfcnVuX21vZHVsZV9hc19tYWluIGFzIGl0CiAjIHJ1bnMgaXRzIHRlc3RzIGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHdoaWNoIHdvdWxkIG1lc3Mgd2l0aCB0aGUKICMgcmVhbCBfX21haW5fXyBtb2R1bGUgKHVzdWFsbHkgdGVzdC5yZWdydGVzdCkKQEAgLTE1LDYgKzE5LDcgQEAKICMgU2V0IHVwIHRoZSB0ZXN0IGNvZGUgYW5kIGV4cGVjdGVkIHJlc3VsdHMKIAogY2xhc3MgUnVuTW9kdWxlQ29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlVuaXQgdGVzdHMgZm9yIHJ1bnB5Ll9ydW5fY29kZSBhbmQgcnVucHkuX3J1bl9tb2R1bGVfY29kZSIiIgogCiAgICAgZXhwZWN0ZWRfcmVzdWx0ID0gWyJUb3AgbGV2ZWwgYXNzaWdubWVudCIsICJMb3dlciBsZXZlbCByZWZlcmVuY2UiXQogICAgIHRlc3Rfc291cmNlID0gKApAQCAtMzcsMTQgKzQyLDE0IEBACiAgICAgZGVmIHRlc3RfcnVuX2NvZGUoc2VsZik6CiAgICAgICAgIHNhdmVkX2FyZ3YwID0gc3lzLmFyZ3ZbMF0KICAgICAgICAgZCA9IF9ydW5fY29kZShzZWxmLnRlc3Rfc291cmNlLCB7fSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRbInJlc3VsdCJdID09IHNlbGYuZXhwZWN0ZWRfcmVzdWx0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZFsiX19uYW1lX18iXSBpcyBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZFsiX19maWxlX18iXSBpcyBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZFsiX19sb2FkZXJfXyJdIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkWyJfX3BhY2thZ2VfXyJdIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkWyJydW5fYXJndjAiXSBpcyBzYXZlZF9hcmd2MCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJydW5fbmFtZSIgbm90IGluIGQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzeXMuYXJndlswXSBpcyBzYXZlZF9hcmd2MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyJyZXN1bHQiXSwgc2VsZi5leHBlY3RlZF9yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZFsiX19uYW1lX18iXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkWyJfX2ZpbGVfXyJdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGRbIl9fbG9hZGVyX18iXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkWyJfX3BhY2thZ2VfXyJdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGRbInJ1bl9hcmd2MCJdLCBzYXZlZF9hcmd2MCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigicnVuX25hbWUiLCBkKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5hcmd2WzBdLCBzYXZlZF9hcmd2MCkKIAogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGVfY29kZShzZWxmKToKICAgICAgICAgaW5pdGlhbCA9IG9iamVjdCgpCkBAIC02MCwyMiArNjUsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoInJlc3VsdCIgbm90IGluIGQxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZDJbImluaXRpYWwiXSBpcyBpbml0aWFsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZDJbInJlc3VsdCJdID09IHNlbGYuZXhwZWN0ZWRfcmVzdWx0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZDJbIm5lc3RlZCJdWyJ4Il0gPT0gMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQyWyJfX25hbWVfXyJdIGlzIG5hbWUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkMlsicnVuX25hbWVfaW5fc3lzX21vZHVsZXMiXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQyWyJtb2R1bGVfaW5fc3lzX21vZHVsZXMiXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQyWyJfX2ZpbGVfXyJdIGlzIGZpbGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkMlsicnVuX2FyZ3YwIl0gaXMgZmlsZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQyWyJfX2xvYWRlcl9fIl0gaXMgbG9hZGVyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZDJbIl9fcGFja2FnZV9fIl0gaXMgcGFja2FnZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN5cy5hcmd2WzBdIGlzIHNhdmVkX2FyZ3YwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobmFtZSBub3QgaW4gc3lzLm1vZHVsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oInJlc3VsdCIsIGQxKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJpbml0aWFsIl0sIGluaXRpYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDJbInJlc3VsdCJdLCBzZWxmLmV4cGVjdGVkX3Jlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMlsibmVzdGVkIl1bIngiXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsiX19uYW1lX18iXSwgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQyWyJydW5fbmFtZV9pbl9zeXNfbW9kdWxlcyJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZDJbIm1vZHVsZV9pbl9zeXNfbW9kdWxlcyJdKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJfX2ZpbGVfXyJdLCBmaWxlKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJydW5fYXJndjAiXSwgZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsiX19sb2FkZXJfXyJdLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZDJbIl9fcGFja2FnZV9fIl0sIHBhY2thZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLmFyZ3ZbMF0sIHNhdmVkX2FyZ3YwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHN5cy5tb2R1bGVzKQogCiAKIGNsYXNzIFJ1bk1vZHVsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlVuaXQgdGVzdHMgZm9yIHJ1bnB5LnJ1bl9tb2R1bGUiIiIKIAogICAgIGRlZiBleHBlY3RfaW1wb3J0X2Vycm9yKHNlbGYsIG1vZF9uYW1lKToKICAgICAgICAgdHJ5OgpAQCAtOTQsOCArMTAwLDggQEAKICAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCJhLmJlZSIpCiAgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigiLmhvd2FyZCIpCiAgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigiLi5lYXRlbiIpCi0gICAgICAgICMgUGFja2FnZQotICAgICAgICBzZWxmLmV4cGVjdF9pbXBvcnRfZXJyb3IoImxvZ2dpbmciKQorICAgICAgICAjIFBhY2thZ2Ugd2l0aG91dCBfX21haW5fXy5weQorICAgICAgICBzZWxmLmV4cGVjdF9pbXBvcnRfZXJyb3IoIm11bHRpcHJvY2Vzc2luZyIpCiAKICAgICBkZWYgdGVzdF9saWJyYXJ5X21vZHVsZShzZWxmKToKICAgICAgICAgcnVuX21vZHVsZSgicnVucHkiKQpAQCAtMTA3LDkgKzExMyw5IEBACiAgICAgICAgIHBrZ19maWxlLmNsb3NlKCkKICAgICAgICAgcmV0dXJuIHBrZ19mbmFtZQogCi0gICAgZGVmIF9tYWtlX3BrZyhzZWxmLCBzb3VyY2UsIGRlcHRoKToKKyAgICBkZWYgX21ha2VfcGtnKHNlbGYsIHNvdXJjZSwgZGVwdGgsIG1vZF9iYXNlPSJydW5weV90ZXN0Iik6CiAgICAgICAgIHBrZ19uYW1lID0gIl9fcnVucHlfcGtnX18iCi0gICAgICAgIHRlc3RfZm5hbWUgPSAicnVucHlfdGVzdCIrb3MuZXh0c2VwKyJweSIKKyAgICAgICAgdGVzdF9mbmFtZSA9IG1vZF9iYXNlK29zLmV4dHNlcCsicHkiCiAgICAgICAgIHBrZ19kaXIgPSBzdWJfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIgIFBhY2thZ2UgdHJlZSBpbjoiLCBzdWJfZGlyCiAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBwa2dfZGlyKQpAQCAtMTI0LDcgKzEzMCw3IEBACiAgICAgICAgIG1vZF9maWxlLndyaXRlKHNvdXJjZSkKICAgICAgICAgbW9kX2ZpbGUuY2xvc2UoKQogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBDcmVhdGVkOiIsIG1vZF9mbmFtZQotICAgICAgICBtb2RfbmFtZSA9IChwa2dfbmFtZSsiLiIpKmRlcHRoICsgInJ1bnB5X3Rlc3QiCisgICAgICAgIG1vZF9uYW1lID0gKHBrZ19uYW1lKyIuIikqZGVwdGggKyBtb2RfYmFzZQogICAgICAgICByZXR1cm4gcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZQogCiAgICAgZGVmIF9kZWxfcGtnKHNlbGYsIHRvcCwgZGVwdGgsIG1vZF9uYW1lKToKQEAgLTE1OSwyMCArMTY1LDQyIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJSdW5uaW5nIGZyb20gc291cmNlOiIsIG1vZF9uYW1lCiAgICAgICAgICAgICBkMSA9IHJ1bl9tb2R1bGUobW9kX25hbWUpICMgUmVhZCBmcm9tIHNvdXJjZQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJ4IiBpbiBkMSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkMVsieCJdID09IDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ4IiwgZDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZDFbIngiXSA9PSAxKQogICAgICAgICAgICAgZGVsIGQxICMgRW5zdXJlIF9fbG9hZGVyX18gZW50cnkgZG9lc24ndCBrZWVwIGZpbGUgb3BlbgogICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RfbmFtZSkKICAgICAgICAgICAgIG9zLnJlbW92ZShtb2RfZm5hbWUpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiUnVubmluZyBmcm9tIGNvbXBpbGVkOiIsIG1vZF9uYW1lCiAgICAgICAgICAgICBkMiA9IHJ1bl9tb2R1bGUobW9kX25hbWUpICMgUmVhZCBmcm9tIGJ5dGVjb2RlCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoIngiIGluIGQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQyWyJ4Il0gPT0gMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIngiLCBkMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsieCJdID09IDEpCiAgICAgICAgICAgICBkZWwgZDIgIyBFbnN1cmUgX19sb2FkZXJfXyBlbnRyeSBkb2Vzbid0IGtlZXAgZmlsZSBvcGVuCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9kZWxfcGtnKHBrZ19kaXIsIGRlcHRoLCBtb2RfbmFtZSkKICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIk1vZHVsZSBleGVjdXRlZCBzdWNjZXNzZnVsbHkiCiAKKyAgICBkZWYgX2NoZWNrX3BhY2thZ2Uoc2VsZiwgZGVwdGgpOgorICAgICAgICBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lID0gKAorICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coIng9MVxuIiwgZGVwdGgsICJfX21haW5fXyIpKQorICAgICAgICBwa2dfbmFtZSwgXywgXyA9IG1vZF9uYW1lLnJwYXJ0aXRpb24oIi4iKQorICAgICAgICBmb3JnZXQobW9kX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJSdW5uaW5nIGZyb20gc291cmNlOiIsIHBrZ19uYW1lCisgICAgICAgICAgICBkMSA9IHJ1bl9tb2R1bGUocGtnX25hbWUpICMgUmVhZCBmcm9tIHNvdXJjZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigieCIsIGQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWyJ4Il0gPT0gMSkKKyAgICAgICAgICAgIGRlbCBkMSAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCisgICAgICAgICAgICBvcy5yZW1vdmUobW9kX2ZuYW1lKQorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlJ1bm5pbmcgZnJvbSBjb21waWxlZDoiLCBwa2dfbmFtZQorICAgICAgICAgICAgZDIgPSBydW5fbW9kdWxlKHBrZ19uYW1lKSAjIFJlYWQgZnJvbSBieXRlY29kZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigieCIsIGQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQyWyJ4Il0gPT0gMSkKKyAgICAgICAgICAgIGRlbCBkMiAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2RlbF9wa2cocGtnX2RpciwgZGVwdGgsIHBrZ19uYW1lKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiUGFja2FnZSBleGVjdXRlZCBzdWNjZXNzZnVsbHkiCisKICAgICBkZWYgX2FkZF9yZWxhdGl2ZV9tb2R1bGVzKHNlbGYsIGJhc2VfZGlyLCBzb3VyY2UsIGRlcHRoKToKICAgICAgICAgaWYgZGVwdGggPD0gMToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlJlbGF0aXZlIG1vZHVsZSB0ZXN0IG5lZWRzIGRlcHRoID4gMSIpCkBAIC0yMTEsMTkgKzIzOSwxOSBAQAogICAgICAgICAgICAgcGtnX25hbWUgPSBtb2RfbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJSdW5uaW5nIGZyb20gc291cmNlOiIsIG1vZF9uYW1lCiAgICAgICAgICAgICBkMSA9IHJ1bl9tb2R1bGUobW9kX25hbWUsIHJ1bl9uYW1lPXJ1bl9uYW1lKSAjIFJlYWQgZnJvbSBzb3VyY2UKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcygiX19wYWNrYWdlX18iIGluIGQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQxWyJfX3BhY2thZ2VfXyJdID09IHBrZ19uYW1lKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJzaWJsaW5nIiBpbiBkMSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcygibmVwaGV3IiBpbiBkMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fcGFja2FnZV9fIiwgZDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZDFbIl9fcGFja2FnZV9fIl0gPT0gcGtnX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzaWJsaW5nIiwgZDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJuZXBoZXciLCBkMSkKICAgICAgICAgICAgIGRlbCBkMSAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KICAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCiAgICAgICAgICAgICBvcy5yZW1vdmUobW9kX2ZuYW1lKQogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlJ1bm5pbmcgZnJvbSBjb21waWxlZDoiLCBtb2RfbmFtZQogICAgICAgICAgICAgZDIgPSBydW5fbW9kdWxlKG1vZF9uYW1lLCBydW5fbmFtZT1ydW5fbmFtZSkgIyBSZWFkIGZyb20gYnl0ZWNvZGUKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcygiX19wYWNrYWdlX18iIGluIGQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQyWyJfX3BhY2thZ2VfXyJdID09IHBrZ19uYW1lKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJzaWJsaW5nIiBpbiBkMikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcygibmVwaGV3IiBpbiBkMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fcGFja2FnZV9fIiwgZDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZDJbIl9fcGFja2FnZV9fIl0gPT0gcGtnX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzaWJsaW5nIiwgZDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJuZXBoZXciLCBkMikKICAgICAgICAgICAgIGRlbCBkMiAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuX2RlbF9wa2cocGtnX2RpciwgZGVwdGgsIG1vZF9uYW1lKQpAQCAtMjM0LDYgKzI2MiwxMSBAQAogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aAogICAgICAgICAgICAgc2VsZi5fY2hlY2tfbW9kdWxlKGRlcHRoKQogCisgICAgZGVmIHRlc3RfcnVuX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgxLCA0KToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3BhY2thZ2UoZGVwdGgpCisKICAgICBkZWYgdGVzdF9leHBsaWNpdF9yZWxhdGl2ZV9pbXBvcnQoc2VsZik6CiAgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgyLCA1KToKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJUZXN0aW5nIHJlbGF0aXZlIGltcG9ydHMgYXQgZGVwdGg6IiwgZGVwdGgKQEAgLTI0NSw5ICsyNzgsMTI1IEBACiAgICAgICAgICAgICBzZWxmLl9jaGVja19yZWxhdGl2ZV9pbXBvcnRzKGRlcHRoLCAiX19tYWluX18iKQogCiAKK2NsYXNzIFJ1blBhdGhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJVbml0IHRlc3RzIGZvciBydW5weS5ydW5fcGF0aCIiIgorICAgICMgQmFzZWQgb24gY29ycmVzcG9uZGluZyB0ZXN0cyBpbiB0ZXN0X2NtZF9saW5lX3NjcmlwdAorCisgICAgdGVzdF9zb3VyY2UgPSAiIiJcCisjIFNjcmlwdCBtYXkgYmUgcnVuIHdpdGggb3B0aW1pc2F0aW9uIGVuYWJsZWQsIHNvIGRvbid0IHJlbHkgb24gYXNzZXJ0CisjIHN0YXRlbWVudHMgYmVpbmcgZXhlY3V0ZWQKK2RlZiBhc3NlcnRFcXVhbChsaHMsIHJocyk6CisgICAgaWYgbGhzICE9IHJoczoKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJyVyICE9ICVyJyAlIChsaHMsIHJocykpCitkZWYgYXNzZXJ0SXMobGhzLCByaHMpOgorICAgIGlmIGxocyBpcyBub3QgcmhzOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignJXIgaXMgbm90ICVyJyAlIChsaHMsIHJocykpCisjIENoZWNrIGJhc2ljIGNvZGUgZXhlY3V0aW9uCityZXN1bHQgPSBbJ1RvcCBsZXZlbCBhc3NpZ25tZW50J10KK2RlZiBmKCk6CisgICAgcmVzdWx0LmFwcGVuZCgnTG93ZXIgbGV2ZWwgcmVmZXJlbmNlJykKK2YoKQorYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ1RvcCBsZXZlbCBhc3NpZ25tZW50JywgJ0xvd2VyIGxldmVsIHJlZmVyZW5jZSddKQorIyBDaGVjayB0aGUgc3lzIG1vZHVsZQoraW1wb3J0IHN5cworYXNzZXJ0SXMoZ2xvYmFscygpLCBzeXMubW9kdWxlc1tfX25hbWVfX10uX19kaWN0X18pCithcmd2MCA9IHN5cy5hcmd2WzBdCisiIiIKKworICAgIGRlZiBfbWFrZV90ZXN0X3NjcmlwdChzZWxmLCBzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZT1Ob25lKToKKyAgICAgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgICAgICBzb3VyY2UgPSBzZWxmLnRlc3Rfc291cmNlCisgICAgICAgIHJldHVybiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKKworICAgIGRlZiBfY2hlY2tfc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBleHBlY3RlZF9uYW1lLCBleHBlY3RlZF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3YwLCBleHBlY3RlZF9wYWNrYWdlKToKKyAgICAgICAgcmVzdWx0ID0gcnVuX3BhdGgoc2NyaXB0X25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJfX25hbWVfXyJdLCBleHBlY3RlZF9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsiX19maWxlX18iXSwgZXhwZWN0ZWRfZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiYXJndjAiLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJhcmd2MCJdLCBleHBlY3RlZF9hcmd2MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbIl9fcGFja2FnZV9fIl0sIGV4cGVjdGVkX3BhY2thZ2UpCisKKyAgICBkZWYgX2NoZWNrX2ltcG9ydF9lcnJvcihzZWxmLCBzY3JpcHRfbmFtZSwgbXNnKToKKyAgICAgICAgbXNnID0gcmUuZXNjYXBlKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoSW1wb3J0RXJyb3IsIG1zZywgcnVuX3BhdGgsIHNjcmlwdF9uYW1lKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ3NjcmlwdCcKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSwgIjxydW5fcGF0aD4iLCBzY3JpcHRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NjcmlwdF9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdzY3JpcHQnCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoY29tcGlsZWRfbmFtZSwgIjxydW5fcGF0aD4iLCBjb21waWxlZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X2RpciwgIjxydW5fcGF0aD4iLCBzY3JpcHRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfZGlyLCAnJykKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCAiPHJ1bl9wYXRoPiIsIGNvbXBpbGVkX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpciwgJycpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcnlfZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnbm90X21haW4nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBtc2cgPSAiY2FuJ3QgZmluZCAnX19tYWluX18nIG1vZHVsZSBpbiAlciIgJSBzY3JpcHRfZGlyCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3Ioc2NyaXB0X2RpciwgbXNnKQorCisgICAgZGVmIHRlc3RfemlwZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSwgIjxydW5fcGF0aD4iLCBmbmFtZSwgemlwX25hbWUsICcnKQorCisgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBjb21waWxlZF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGZuYW1lLCB6aXBfbmFtZSwgJycpCisKKyAgICBkZWYgdGVzdF96aXBmaWxlX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ25vdF9tYWluJworICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQorICAgICAgICAgICAgemlwX25hbWUsIGZuYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgbXNnID0gImNhbid0IGZpbmQgJ19fbWFpbl9fJyBtb2R1bGUgaW4gJXIiICUgemlwX25hbWUKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ltcG9ydF9lcnJvcih6aXBfbmFtZSwgbXNnKQorCisgICAgZGVmIHRlc3RfbWFpbl9yZWN1cnNpb25fZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyLCB0ZW1wX2RpcigpIGFzIGR1bW15X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ19fbWFpbl9fJworICAgICAgICAgICAgc291cmNlID0gKCJpbXBvcnQgcnVucHlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAicnVucHkucnVuX3BhdGgoJXIpXG4iKSAlIGR1bW15X2RpcgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lLCBzb3VyY2UpCisgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCisgICAgICAgICAgICBtc2cgPSAicmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoUnVudGltZUVycm9yLCBtc2csIHJ1bl9wYXRoLCB6aXBfbmFtZSkKKworCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoUnVuTW9kdWxlQ29kZVRlc3QpCi0gICAgcnVuX3VuaXR0ZXN0KFJ1bk1vZHVsZVRlc3QpCisgICAgcnVuX3VuaXR0ZXN0KFJ1bk1vZHVsZUNvZGVUZXN0LCBSdW5Nb2R1bGVUZXN0LCBSdW5QYXRoVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zYXgucHkgYi9MaWIvdGVzdC90ZXN0X3NheC5weQppbmRleCBjNTgyOTg1Li5hZGI5MzA1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NheC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NheC5weQpAQCAtMSw0ICsxLDQgQEAKLSMgcmVncmVzc2lvbiB0ZXN0IGZvciBTQVggMi4wICAgICAgICAgICAgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KKyMgcmVncmVzc2lvbiB0ZXN0IGZvciBTQVggMi4wICAgICAgICAgICAgLSotIGNvZGluZzogdXRmLTggLSotCiAjICRJZCQKIAogZnJvbSB4bWwuc2F4IGltcG9ydCBtYWtlX3BhcnNlciwgQ29udGVudEhhbmRsZXIsIFwKQEAgLTExLDExICsxMSwxNCBAQAogZnJvbSB4bWwuc2F4LnNheHV0aWxzIGltcG9ydCBYTUxHZW5lcmF0b3IsIGVzY2FwZSwgdW5lc2NhcGUsIHF1b3RlYXR0ciwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxGaWx0ZXJCYXNlCiBmcm9tIHhtbC5zYXguZXhwYXRyZWFkZXIgaW1wb3J0IGNyZWF0ZV9wYXJzZXIKK2Zyb20geG1sLnNheC5oYW5kbGVyIGltcG9ydCBmZWF0dXJlX25hbWVzcGFjZXMKIGZyb20geG1sLnNheC54bWxyZWFkZXIgaW1wb3J0IElucHV0U291cmNlLCBBdHRyaWJ1dGVzSW1wbCwgQXR0cmlidXRlc05TSW1wbAogZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgcnVuX3VuaXR0ZXN0CiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBvcworCitURVNUX1hNTEZJTEUgPSBmaW5kZmlsZSgidGVzdC54bWwiLCBzdWJkaXI9InhtbHRlc3RkYXRhIikKK1RFU1RfWE1MRklMRV9PVVQgPSBmaW5kZmlsZSgidGVzdC54bWwub3V0Iiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCiAKIG5zX3VyaSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcveG1sLW5zL3NheHRlc3QvIgogCkBAIC0yNiwxNiArMjksMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLmdldE5hbWVCeVFOYW1lLCAiYXR0ciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5nZXRRTmFtZUJ5TmFtZSwgImF0dHIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuX19nZXRpdGVtX18sICJhdHRyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0TGVuZ3RoKCksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldE5hbWVzKCksIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXRRTmFtZXMoKSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihhdHRycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TGVuZ3RoKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TmFtZXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhdHRycyksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXR0cnMuaGFzX2tleSgiYXR0ciIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5rZXlzKCksIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXQoImF0dHJzIiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldCgiYXR0cnMiLCAyNSksIDI1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5pdGVtcygpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMudmFsdWVzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmtleXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KCJhdHRycyIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgiYXR0cnMiLCAyNSksIDI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLml0ZW1zKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLnZhbHVlcygpLCBbXSkKIAogICAgIGRlZiB2ZXJpZnlfZW1wdHlfbnNhdHRycyhzZWxmLCBhdHRycyk6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5nZXRWYWx1ZSwgKG5zX3VyaSwgImF0dHIiKSkKQEAgLTQzLDMzICs0NiwzMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuZ2V0TmFtZUJ5UU5hbWUsICJuczphdHRyIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLmdldFFOYW1lQnlOYW1lLCAobnNfdXJpLCAiYXR0ciIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuX19nZXRpdGVtX18sIChuc191cmksICJhdHRyIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldExlbmd0aCgpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXROYW1lcygpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0UU5hbWVzKCksIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYXR0cnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldExlbmd0aCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFFOYW1lcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXR0cnMpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGF0dHJzLmhhc19rZXkoKG5zX3VyaSwgImF0dHIiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmtleXMoKSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIiksIDI1KSwgMjUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLml0ZW1zKCksIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy52YWx1ZXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMua2V5cygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIiksIDI1KSwgMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuaXRlbXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMudmFsdWVzKCksIFtdKQogCiAgICAgZGVmIHZlcmlmeV9hdHRyc193YXR0cihzZWxmLCBhdHRycyk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldExlbmd0aCgpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXROYW1lcygpLCBbImF0dHIiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0UU5hbWVzKCksIFsiYXR0ciJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYXR0cnMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldExlbmd0aCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVzKCksIFsiYXR0ciJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFFOYW1lcygpLCBbImF0dHIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXR0cnMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYXR0cnMuaGFzX2tleSgiYXR0ciIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5rZXlzKCksIFsiYXR0ciJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXQoImF0dHIiKSwgInZhbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldCgiYXR0ciIsIDI1KSwgInZhbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLml0ZW1zKCksIFsoImF0dHIiLCAidmFsIildKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy52YWx1ZXMoKSwgWyJ2YWwiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0VmFsdWUoImF0dHIiKSwgInZhbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldFZhbHVlQnlRTmFtZSgiYXR0ciIpLCAidmFsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0TmFtZUJ5UU5hbWUoImF0dHIiKSwgImF0dHIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRyc1siYXR0ciJdLCAidmFsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0UU5hbWVCeU5hbWUoImF0dHIiKSwgImF0dHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmtleXMoKSwgWyJhdHRyIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KCJhdHRyIiksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgiYXR0ciIsIDI1KSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuaXRlbXMoKSwgWygiYXR0ciIsICJ2YWwiKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMudmFsdWVzKCksIFsidmFsIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0VmFsdWUoImF0dHIiKSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0VmFsdWVCeVFOYW1lKCJhdHRyIiksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVCeVFOYW1lKCJhdHRyIiksICJhdHRyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyc1siYXR0ciJdLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRRTmFtZUJ5TmFtZSgiYXR0ciIpLCAiYXR0ciIpCiAKIGNsYXNzIE1ha2VQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9tYWtlX3BhcnNlcjIoc2VsZik6CkBAIC05OSw0NyArMTAyLDQ3IEBACiBjbGFzcyBTYXh1dGlsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgPT09PT0gZXNjYXBlCiAgICAgZGVmIHRlc3RfZXNjYXBlX2Jhc2ljKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlc2NhcGUoIkRvbmFsZCBEdWNrICYgQ28iKSwgIkRvbmFsZCBEdWNrICZhbXA7IENvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlc2NhcGUoIkRvbmFsZCBEdWNrICYgQ28iKSwgIkRvbmFsZCBEdWNrICZhbXA7IENvIikKIAogICAgIGRlZiB0ZXN0X2VzY2FwZV9hbGwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVzY2FwZSgiPERvbmFsZCBEdWNrICYgQ28+IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICImbHQ7RG9uYWxkIER1Y2sgJmFtcDsgQ28mZ3Q7IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlc2NhcGUoIjxEb25hbGQgRHVjayAmIENvPiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICImbHQ7RG9uYWxkIER1Y2sgJmFtcDsgQ28mZ3Q7IikKIAogICAgIGRlZiB0ZXN0X2VzY2FwZV9leHRyYShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXNjYXBlKCJIZWkgcOUgZGVnIiwgeyLlIiA6ICImYXJpbmc7In0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVpIHAmYXJpbmc7IGRlZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXNjYXBlKCJIZWkgcMOlIGRlZyIsIHsiw6UiIDogIiZhcmluZzsifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkhlaSBwJmFyaW5nOyBkZWciKQogCiAgICAgIyA9PT09PSB1bmVzY2FwZQogICAgIGRlZiB0ZXN0X3VuZXNjYXBlX2Jhc2ljKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmVzY2FwZSgiRG9uYWxkIER1Y2sgJmFtcDsgQ28iKSwgIkRvbmFsZCBEdWNrICYgQ28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuZXNjYXBlKCJEb25hbGQgRHVjayAmYW1wOyBDbyIpLCAiRG9uYWxkIER1Y2sgJiBDbyIpCiAKICAgICBkZWYgdGVzdF91bmVzY2FwZV9hbGwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuZXNjYXBlKCImbHQ7RG9uYWxkIER1Y2sgJmFtcDsgQ28mZ3Q7IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICI8RG9uYWxkIER1Y2sgJiBDbz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuZXNjYXBlKCImbHQ7RG9uYWxkIER1Y2sgJmFtcDsgQ28mZ3Q7IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxEb25hbGQgRHVjayAmIENvPiIpCiAKICAgICBkZWYgdGVzdF91bmVzY2FwZV9leHRyYShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5lc2NhcGUoIkhlaSBw5SBkZWciLCB7IuUiIDogIiZhcmluZzsifSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJIZWkgcCZhcmluZzsgZGVnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmVzY2FwZSgiSGVpIHDDpSBkZWciLCB7IsOlIiA6ICImYXJpbmc7In0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJIZWkgcCZhcmluZzsgZGVnIikKIAogICAgIGRlZiB0ZXN0X3VuZXNjYXBlX2FtcF9leHRyYShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5lc2NhcGUoIiZhbXA7Zm9vOyIsIHsiJmZvbzsiOiAic3BsYXQifSksICImZm9vOyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5lc2NhcGUoIiZhbXA7Zm9vOyIsIHsiJmZvbzsiOiAic3BsYXQifSksICImZm9vOyIpCiAKICAgICAjID09PT09IHF1b3RlYXR0cgogICAgIGRlZiB0ZXN0X3F1b3RlYXR0cl9iYXNpYyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocXVvdGVhdHRyKCJEb25hbGQgRHVjayAmIENvIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICciRG9uYWxkIER1Y2sgJmFtcDsgQ28iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdW90ZWF0dHIoIkRvbmFsZCBEdWNrICYgQ28iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnIkRvbmFsZCBEdWNrICZhbXA7IENvIicpCiAKICAgICBkZWYgdGVzdF9zaW5nbGVfcXVvdGVhdHRyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhxdW90ZWF0dHIoJ0luY2x1ZGVzICJkb3VibGUiIHF1b3RlcycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnXCdJbmNsdWRlcyAiZG91YmxlIiBxdW90ZXNcJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvdGVhdHRyKCdJbmNsdWRlcyAiZG91YmxlIiBxdW90ZXMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXCdJbmNsdWRlcyAiZG91YmxlIiBxdW90ZXNcJycpCiAKICAgICBkZWYgdGVzdF9kb3VibGVfcXVvdGVhdHRyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhxdW90ZWF0dHIoIkluY2x1ZGVzICdzaW5nbGUnIHF1b3RlcyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJJbmNsdWRlcyAnc2luZ2xlJyBxdW90ZXNcIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvdGVhdHRyKCJJbmNsdWRlcyAnc2luZ2xlJyBxdW90ZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXCJJbmNsdWRlcyAnc2luZ2xlJyBxdW90ZXNcIiIpCiAKICAgICBkZWYgdGVzdF9zaW5nbGVfZG91YmxlX3F1b3RlYXR0cihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocXVvdGVhdHRyKCJJbmNsdWRlcyAnc2luZ2xlJyBhbmQgXCJkb3VibGVcIiBxdW90ZXMiKSwKLSAgICAgICAgICAgICAgICAgICAgIlwiSW5jbHVkZXMgJ3NpbmdsZScgYW5kICZxdW90O2RvdWJsZSZxdW90OyBxdW90ZXNcIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvdGVhdHRyKCJJbmNsdWRlcyAnc2luZ2xlJyBhbmQgXCJkb3VibGVcIiBxdW90ZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXCJJbmNsdWRlcyAnc2luZ2xlJyBhbmQgJnF1b3Q7ZG91YmxlJnF1b3Q7IHF1b3Rlc1wiIikKIAogICAgICMgPT09PT0gbWFrZV9wYXJzZXIKICAgICBkZWYgdGVzdF9tYWtlX3BhcnNlcihzZWxmKToKQEAgLTE2MSw3ICsxNjQsNyBAQAogICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKICAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz48L2RvYz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPjwvZG9jPiIpCiAKICAgICBkZWYgdGVzdF94bWxnZW5fY29udGVudChzZWxmKToKICAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQpAQCAtMTczLDcgKzE3Niw3IEBACiAgICAgICAgIGdlbi5lbmRFbGVtZW50KCJkb2MiKQogICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPmh1aGVpPC9kb2M+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz5odWhlaTwvZG9jPiIpCiAKICAgICBkZWYgdGVzdF94bWxnZW5fcGkoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKQEAgLTE4NSw3ICsxODgsNyBAQAogICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKICAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPD90ZXN0IGRhdGE/Pjxkb2M+PC9kb2M+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPD90ZXN0IGRhdGE/Pjxkb2M+PC9kb2M+IikKIAogICAgIGRlZiB0ZXN0X3htbGdlbl9jb250ZW50X2VzY2FwZShzZWxmKToKICAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQpAQCAtMTk3LDcgKzIwMCw3IEBACiAgICAgICAgIGdlbi5lbmRFbGVtZW50KCJkb2MiKQogICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLAogICAgICAgICAgICAgc3RhcnQgKyAiPGRvYz4mbHQ7aHVoZWkmYW1wOzwvZG9jPiIpCiAKICAgICBkZWYgdGVzdF94bWxnZW5fYXR0cl9lc2NhcGUoc2VsZik6CkBAIC0yMTUsNyArMjE4LDcgQEAKICAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImRvYyIpCiAgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKwogICAgICAgICAgICAgKCI8ZG9jIGE9J1wiJz48ZSBhPVwiJ1wiPjwvZT4iCiAgICAgICAgICAgICAgIjxlIGE9XCInJnF1b3Q7XCI+PC9lPiIKICAgICAgICAgICAgICAiPGUgYT1cIiYjMTA7JiMxMzsmIzk7XCI+PC9lPjwvZG9jPiIpKQpAQCAtMjMwLDcgKzIzMyw3IEBACiAgICAgICAgIGdlbi5lbmRFbGVtZW50KCJkb2MiKQogICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPiA8L2RvYz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPiA8L2RvYz4iKQogCiAgICAgZGVmIHRlc3RfeG1sZ2VuX25zKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCkBAIC0yNDYsNyArMjQ5LDcgQEAKICAgICAgICAgZ2VuLmVuZFByZWZpeE1hcHBpbmcoIm5zMSIpCiAgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgXAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArIFwKICAgICAgICAgICAgKCc8bnMxOmRvYyB4bWxuczpuczE9IiVzIj48dWRvYz48L3Vkb2M+PC9uczE6ZG9jPicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc191cmkpKQogCkBAIC0yNTksNyArMjYyLDcgQEAKICAgICAgICAgZ2VuLmVuZEVsZW1lbnROUygoTm9uZSwgJ2EnKSwgJ2EnKQogICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCsnPGEgYj0iYyI+PC9hPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0Kyc8YSBiPSJjIj48L2E+JykKIAogICAgIGRlZiB0ZXN0XzE0NjMwMjZfMihzZWxmKToKICAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQpAQCAtMjcyLDcgKzI3NSw3IEBACiAgICAgICAgIGdlbi5lbmRQcmVmaXhNYXBwaW5nKE5vbmUpCiAgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0Kyc8YSB4bWxucz0icXV4Ij48L2E+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQrJzxhIHhtbG5zPSJxdXgiPjwvYT4nKQogCiAgICAgZGVmIHRlc3RfMTQ2MzAyNl8zKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCkBAIC0yODUsOSArMjg4LDYzIEBACiAgICAgICAgIGdlbi5lbmRQcmVmaXhNYXBwaW5nKCdteScpCiAgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksCiAgICAgICAgICAgICBzdGFydCsnPG15OmEgeG1sbnM6bXk9InF1eCIgYj0iYyI+PC9teTphPicpCiAKKyAgICBkZWYgdGVzdF81MDI3XzEoc2VsZik6CisgICAgICAgICMgVGhlIHhtbCBwcmVmaXggKGFzIGluIHhtbDpsYW5nIGJlbG93KSBpcyByZXNlcnZlZCBhbmQgYm91bmQgYnkKKyAgICAgICAgIyBkZWZpbml0aW9uIHRvIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS4gIFhNTEdlbmVyYXRvciBoYWQKKyAgICAgICAgIyBhIGJ1ZyB3aGVyZWJ5IGEgS2V5RXJyb3IgaXMgdGhyb3duIGJlY2F1c2UgdGhpcyBuYW1lc3BhY2UgaXMgbWlzc2luZworICAgICAgICAjIGZyb20gYSBkaWN0aW9uYXJ5LgorICAgICAgICAjCisgICAgICAgICMgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgYnVnIGJ5IHBhcnNpbmcgYSBkb2N1bWVudC4KKyAgICAgICAgdGVzdF94bWwgPSBTdHJpbmdJTygKKyAgICAgICAgICAgICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4nCisgICAgICAgICAgICAnPGE6ZzEgeG1sbnM6YT0iaHR0cDovL2V4YW1wbGUuY29tL25zIj4nCisgICAgICAgICAgICAgJzxhOmcyIHhtbDpsYW5nPSJlbiI+SGVsbG88L2E6ZzI+JworICAgICAgICAgICAgJzwvYTpnMT4nKQorCisgICAgICAgIHBhcnNlciA9IG1ha2VfcGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldEZlYXR1cmUoZmVhdHVyZV9uYW1lc3BhY2VzLCBUcnVlKQorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcihnZW4pCisgICAgICAgIHBhcnNlci5wYXJzZSh0ZXN0X3htbCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsgKAorICAgICAgICAgICAgICAgICAgICAgICAgICc8YTpnMSB4bWxuczphPSJodHRwOi8vZXhhbXBsZS5jb20vbnMiPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJzxhOmcyIHhtbDpsYW5nPSJlbiI+SGVsbG88L2E6ZzI+JworICAgICAgICAgICAgICAgICAgICAgICAgICc8L2E6ZzE+JykpCisKKyAgICBkZWYgdGVzdF81MDI3XzIoc2VsZik6CisgICAgICAgICMgVGhlIHhtbCBwcmVmaXggKGFzIGluIHhtbDpsYW5nIGJlbG93KSBpcyByZXNlcnZlZCBhbmQgYm91bmQgYnkKKyAgICAgICAgIyBkZWZpbml0aW9uIHRvIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS4gIFhNTEdlbmVyYXRvciBoYWQKKyAgICAgICAgIyBhIGJ1ZyB3aGVyZWJ5IGEgS2V5RXJyb3IgaXMgdGhyb3duIGJlY2F1c2UgdGhpcyBuYW1lc3BhY2UgaXMgbWlzc2luZworICAgICAgICAjIGZyb20gYSBkaWN0aW9uYXJ5LgorICAgICAgICAjCisgICAgICAgICMgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgYnVnIGJ5IGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlCisgICAgICAgICMgWE1MR2VuZXJhdG9yLgorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRQcmVmaXhNYXBwaW5nKCdhJywgJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucycpCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnROUygoJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucycsICdnMScpLCAnZzEnLCB7fSkKKyAgICAgICAgbGFuZ19hdHRyID0geygnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJywgJ2xhbmcnKTogJ2VuJ30KKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudE5TKCgnaHR0cDovL2V4YW1wbGUuY29tL25zJywgJ2cyJyksICdnMicsIGxhbmdfYXR0cikKKyAgICAgICAgZ2VuLmNoYXJhY3RlcnMoJ0hlbGxvJykKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnROUygoJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucycsICdnMicpLCAnZzInKQorICAgICAgICBnZW4uZW5kRWxlbWVudE5TKCgnaHR0cDovL2V4YW1wbGUuY29tL25zJywgJ2cxJyksICdnMScpCisgICAgICAgIGdlbi5lbmRQcmVmaXhNYXBwaW5nKCdhJykKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsgKAorICAgICAgICAgICAgICAgICAgICAgICAgICc8YTpnMSB4bWxuczphPSJodHRwOi8vZXhhbXBsZS5jb20vbnMiPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJzxhOmcyIHhtbDpsYW5nPSJlbiI+SGVsbG88L2E6ZzI+JworICAgICAgICAgICAgICAgICAgICAgICAgICc8L2E6ZzE+JykpCisKIAogY2xhc3MgWE1MRmlsdGVyQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2ZpbHRlcl9iYXNpYyhzZWxmKToKQEAgLTMwMyw3ICszNjAsNyBAQAogICAgICAgICBmaWx0ZXIuZW5kRWxlbWVudCgiZG9jIikKICAgICAgICAgZmlsdGVyLmVuZERvY3VtZW50KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz5jb250ZW50IDwvZG9jPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjxkb2M+Y29udGVudCA8L2RvYz4iKQogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIwpAQCAtMzExLDcgKzM2OCw3IEBACiAjCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi14bWxfdGVzdF9vdXQgPSBvcGVuKGZpbmRmaWxlKCJ0ZXN0Iitvcy5leHRzZXArInhtbCIrb3MuZXh0c2VwKyJvdXQiKSkucmVhZCgpCit4bWxfdGVzdF9vdXQgPSBvcGVuKFRFU1RfWE1MRklMRV9PVVQpLnJlYWQoKQogCiBjbGFzcyBFeHBhdFJlYWRlclRlc3QoWG1sVGVzdEJhc2UpOgogCkBAIC0zMjMsOSArMzgwLDkgQEAKICAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKIAogICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQotICAgICAgICBwYXJzZXIucGFyc2Uob3BlbihmaW5kZmlsZSgidGVzdCIrb3MuZXh0c2VwKyJ4bWwiKSkpCisgICAgICAgIHBhcnNlci5wYXJzZShvcGVuKFRFU1RfWE1MRklMRSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQogCiAgICAgIyA9PT09PSBEVERIYW5kbGVyIHN1cHBvcnQKIApAQCAtMzUzLDkgKzQxMCw5IEBACiAgICAgICAgIHBhcnNlci5mZWVkKCc8ZG9jPjwvZG9jPicpCiAgICAgICAgIHBhcnNlci5jbG9zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGFuZGxlci5fbm90YXRpb25zLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuX25vdGF0aW9ucywKICAgICAgICAgICAgIFsoIkdJRiIsICItLy9Db21wdVNlcnZlLy9OT1RBVElPTiBHcmFwaGljcyBJbnRlcmNoYW5nZSBGb3JtYXQgODlhLy9FTiIsIE5vbmUpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGFuZGxlci5fZW50aXRpZXMsIFsoImltZyIsIE5vbmUsICJleHBhdC5naWYiLCAiR0lGIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuX2VudGl0aWVzLCBbKCJpbWciLCBOb25lLCAiZXhwYXQuZ2lmIiwgIkdJRiIpXSkKIAogICAgICMgPT09PT0gRW50aXR5UmVzb2x2ZXIgc3VwcG9ydAogCkBAIC0zNzgsOCArNDM1LDggQEAKICAgICAgICAgcGFyc2VyLmZlZWQoJzxkb2M+JnRlc3Q7PC9kb2M+JykKICAgICAgICAgcGFyc2VyLmNsb3NlKCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAiPGRvYz48ZW50aXR5PjwvZW50aXR5PjwvZG9jPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPGRvYz48ZW50aXR5PjwvZW50aXR5PjwvZG9jPiIpCiAKICAgICAjID09PT09IEF0dHJpYnV0ZXMgc3VwcG9ydAogCkBAIC00MzEsMTggKzQ4OCwxOCBAQAogCiAgICAgICAgIGF0dHJzID0gZ2F0aGVyLl9hdHRycwogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldExlbmd0aCgpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXROYW1lcygpLCBbKG5zX3VyaSwgImF0dHIiKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TGVuZ3RoKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TmFtZXMoKSwgWyhuc191cmksICJhdHRyIildKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGF0dHJzLmdldFFOYW1lcygpID09IFtdIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMuZ2V0UU5hbWVzKCkgPT0gWyJuczphdHRyIl0pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYXR0cnMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhdHRycyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhdHRycy5oYXNfa2V5KChuc191cmksICJhdHRyIikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSksICJ2YWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSwgMjUpLCAidmFsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuaXRlbXMoKSwgWygobnNfdXJpLCAiYXR0ciIpLCAidmFsIildKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy52YWx1ZXMoKSwgWyJ2YWwiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0VmFsdWUoKG5zX3VyaSwgImF0dHIiKSksICJ2YWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRyc1sobnNfdXJpLCAiYXR0ciIpXSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIikpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSwgMjUpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5pdGVtcygpLCBbKChuc191cmksICJhdHRyIiksICJ2YWwiKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMudmFsdWVzKCksIFsidmFsIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0VmFsdWUoKG5zX3VyaSwgImF0dHIiKSksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzWyhuc191cmksICJhdHRyIildLCAidmFsIikKIAogICAgICMgPT09PT0gSW5wdXRTb3VyY2Ugc3VwcG9ydAogCkBAIC00NTIsOSArNTA5LDkgQEAKICAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKIAogICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQotICAgICAgICBwYXJzZXIucGFyc2UoZmluZGZpbGUoInRlc3QiK29zLmV4dHNlcCsieG1sIikpCisgICAgICAgIHBhcnNlci5wYXJzZShURVNUX1hNTEZJTEUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQogCiAgICAgZGVmIHRlc3RfZXhwYXRfaW5wc291cmNlX3N5c2lkKHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKQEAgLTQ2Miw5ICs1MTksOSBAQAogICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQogCiAgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCi0gICAgICAgIHBhcnNlci5wYXJzZShJbnB1dFNvdXJjZShmaW5kZmlsZSgidGVzdCIrb3MuZXh0c2VwKyJ4bWwiKSkpCisgICAgICAgIHBhcnNlci5wYXJzZShJbnB1dFNvdXJjZShURVNUX1hNTEZJTEUpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKIAogICAgIGRlZiB0ZXN0X2V4cGF0X2lucHNvdXJjZV9zdHJlYW0oc2VsZik6CiAgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQpAQCAtNDczLDEwICs1MzAsMTAgQEAKIAogICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQogICAgICAgICBpbnBzcmMgPSBJbnB1dFNvdXJjZSgpCi0gICAgICAgIGlucHNyYy5zZXRCeXRlU3RyZWFtKG9wZW4oZmluZGZpbGUoInRlc3QiK29zLmV4dHNlcCsieG1sIikpKQorICAgICAgICBpbnBzcmMuc2V0Qnl0ZVN0cmVhbShvcGVuKFRFU1RfWE1MRklMRSkpCiAgICAgICAgIHBhcnNlci5wYXJzZShpbnBzcmMpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQogCiAgICAgIyA9PT09PSBJbmNyZW1lbnRhbFBhcnNlciBzdXBwb3J0CiAKQEAgLTQ5MCw3ICs1NDcsNyBAQAogICAgICAgICBwYXJzZXIuZmVlZCgiPC9kb2M+IikKICAgICAgICAgcGFyc2VyLmNsb3NlKCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz48L2RvYz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPjwvZG9jPiIpCiAKICAgICBkZWYgdGVzdF9leHBhdF9pbmNyZW1lbnRhbF9yZXNldChzZWxmKToKICAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQpAQCAtNTExLDcgKzU2OCw3IEBACiAgICAgICAgIHBhcnNlci5mZWVkKCI8L2RvYz4iKQogICAgICAgICBwYXJzZXIuY2xvc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPnRleHQ8L2RvYz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPnRleHQ8L2RvYz4iKQogCiAgICAgIyA9PT09PSBMb2NhdG9yIHN1cHBvcnQKIApAQCAtNTI1LDE5ICs1ODIsMTkgQEAKICAgICAgICAgcGFyc2VyLmZlZWQoIjwvZG9jPiIpCiAgICAgICAgIHBhcnNlci5jbG9zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VyLmdldFN5c3RlbUlkKCksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlci5nZXRQdWJsaWNJZCgpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZXIuZ2V0TGluZU51bWJlcigpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRTeXN0ZW1JZCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRQdWJsaWNJZCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRMaW5lTnVtYmVyKCksIDEpCiAKICAgICBkZWYgdGVzdF9leHBhdF9sb2NhdG9yX3dpdGhpbmZvKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCiAgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCiAgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQogICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQotICAgICAgICBwYXJzZXIucGFyc2UoZmluZGZpbGUoInRlc3QueG1sIikpCisgICAgICAgIHBhcnNlci5wYXJzZShURVNUX1hNTEZJTEUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VyLmdldFN5c3RlbUlkKCksIGZpbmRmaWxlKCJ0ZXN0LnhtbCIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZXIuZ2V0UHVibGljSWQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0U3lzdGVtSWQoKSwgVEVTVF9YTUxGSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRQdWJsaWNJZCgpLCBOb25lKQogCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC01NTgsNyArNjE1LDcgQEAKICAgICAgICAgICAgIHBhcnNlci5wYXJzZShzb3VyY2UpCiAgICAgICAgICAgICBzZWxmLmZhaWwoKQogICAgICAgICBleGNlcHQgU0FYRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZS5nZXRTeXN0ZW1JZCgpLCBuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmdldFN5c3RlbUlkKCksIG5hbWUpCiAKICAgICBkZWYgdGVzdF9leHBhdF9pbmNvbXBsZXRlKHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKQEAgLTYyMiwyMSArNjc5LDIxIEBACiAgICAgICAgIGF0dHJzID0gQXR0cmlidXRlc05TSW1wbCh7KG5zX3VyaSwgImF0dHIiKSA6ICJ2YWwifSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsobnNfdXJpLCAiYXR0ciIpIDogIm5zOmF0dHIifSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXRMZW5ndGgoKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0TmFtZXMoKSwgWyhuc191cmksICJhdHRyIildKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXRRTmFtZXMoKSwgWyJuczphdHRyIl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihhdHRycyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TGVuZ3RoKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TmFtZXMoKSwgWyhuc191cmksICJhdHRyIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFFOYW1lcygpLCBbIm5zOmF0dHIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXR0cnMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYXR0cnMuaGFzX2tleSgobnNfdXJpLCAiYXR0ciIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMua2V5cygpLCBbKG5zX3VyaSwgImF0dHIiKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpKSwgInZhbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpLCAyNSksICJ2YWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5pdGVtcygpLCBbKChuc191cmksICJhdHRyIiksICJ2YWwiKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLnZhbHVlcygpLCBbInZhbCJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXRWYWx1ZSgobnNfdXJpLCAiYXR0ciIpKSwgInZhbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldFZhbHVlQnlRTmFtZSgibnM6YXR0ciIpLCAidmFsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0TmFtZUJ5UU5hbWUoIm5zOmF0dHIiKSwgKG5zX3VyaSwgImF0dHIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnNbKG5zX3VyaSwgImF0dHIiKV0sICJ2YWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXRRTmFtZUJ5TmFtZSgobnNfdXJpLCAiYXR0ciIpKSwgIm5zOmF0dHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmtleXMoKSwgWyhuc191cmksICJhdHRyIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpKSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIiksIDI1KSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuaXRlbXMoKSwgWygobnNfdXJpLCAiYXR0ciIpLCAidmFsIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLnZhbHVlcygpLCBbInZhbCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFZhbHVlKChuc191cmksICJhdHRyIikpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRWYWx1ZUJ5UU5hbWUoIm5zOmF0dHIiKSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TmFtZUJ5UU5hbWUoIm5zOmF0dHIiKSwgKG5zX3VyaSwgImF0dHIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyc1sobnNfdXJpLCAiYXR0ciIpXSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVCeU5hbWUoKG5zX3VyaSwgImF0dHIiKSksICJuczphdHRyIikKIAogCiAgICAgIyBEdXJpbmcgdGhlIGRldmVsb3BtZW50IG9mIFB5dGhvbiAyLjUsIGFuIGF0dGVtcHQgdG8gbW92ZSB0aGUgInhtbCIKQEAgLTY3Miw3ICs3MjksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgeG1sLnNheC5leHBhdHJlYWRlcgogICAgICAgICAgICAgbW9kdWxlID0geG1sLnNheC5leHBhdHJlYWRlcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobW9kdWxlLl9fbmFtZV9fLCAieG1sLnNheC5leHBhdHJlYWRlciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgInhtbC5zYXguZXhwYXRyZWFkZXIiKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3lzLm1vZHVsZXMudXBkYXRlKG9sZF9tb2R1bGVzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5IGIvTGliL3Rlc3QvdGVzdF9zY29wZS5weQppbmRleCAxNjlhNzI3Li45NDU4M2UxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKQEAgLTEsNiArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChjaGVja19zeW50YXhfZXJyb3IsIF9jaGVja19weTNrX3dhcm5pbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QpCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjaGVja19zeW50YXhfZXJyb3IsIGNoZWNrX3B5M2tfd2FybmluZ3MsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QKIAogCiBjbGFzcyBTY29wZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTI4NywxOSArMjg3LDggQEAKICAgICAgICAgICAgIGlubmVyKCkKICAgICAgICAgICAgIHkgPSAxCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXJyb3JJbk91dGVyKCkKLSAgICAgICAgZXhjZXB0IFVuYm91bmRMb2NhbEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBlcnJvckluSW5uZXIoKQotICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5ib3VuZExvY2FsRXJyb3IsIGVycm9ySW5PdXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yLCBlcnJvckluSW5uZXIpCiAKICAgICAgICAgIyB0ZXN0IGZvciBidWcgIzE1MDE5MzQ6IGluY29ycmVjdCBMT0FEL1NUT1JFX0dMT0JBTCBnZW5lcmF0aW9uCiAgICAgICAgIGV4ZWMgIiIiCkBAIC0zMzAsNyArMzE5LDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ha2VSZXR1cm5lcjIoYT0xMSkoKVsnYSddLCAxMSkKIAotICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCgidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIiwKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCgidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW50YXhXYXJuaW5nKSk6CiAgICAgICAgICAgICBleGVjICIiIlwKIGRlZiBtYWtlQWRkUGFpcigoYSwgYikpOgpAQCAtNDY4LDcgKzQ1Nyw3IEBACiAgICAgbG9jYWxzKClbJ2xvb2tlZF91cF9ieV9sb2FkX25hbWUnXSA9IFRydWUKICAgICBwYXNzZWQgPSBsb29rZWRfdXBfYnlfbG9hZF9uYW1lCiAKLXNlbGYuYXNzZXJ0XyhYLnBhc3NlZCkKK3NlbGYuYXNzZXJ0VHJ1ZShYLnBhc3NlZCkKICIiIgogCiAgICAgZGVmIHRlc3RMb2NhbHNGdW5jdGlvbihzZWxmKToKQEAgLTQ4Myw3ICs0NzIsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGcKIAogICAgICAgICBkID0gZigyKSg0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2gnIGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2gnLCBkKQogICAgICAgICBkZWwgZFsnaCddCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeyd4JzogMiwgJ3knOiA3LCAndyc6IDZ9KQogCkBAIC01MTcsOCArNTA2LDggQEAKICAgICAgICAgICAgIHJldHVybiBDCiAKICAgICAgICAgdmFybmFtZXMgPSBmKDEpLnoKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJ4IiBub3QgaW4gdmFybmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygieSIgaW4gdmFybmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIngiLCB2YXJuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigieSIsIHZhcm5hbWVzKQogCiAgICAgZGVmIHRlc3RMb2NhbHNDbGFzc19XaXRoVHJhY2Uoc2VsZik6CiAgICAgICAgICMgSXNzdWUyMzcyODogYWZ0ZXIgdGhlIHRyYWNlIGZ1bmN0aW9uIHJldHVybnMsIHRoZSBsb2NhbHMoKQpAQCAtNTM0LDcgKzUyMyw3IEBACiAgICAgICAgICAgICAgICAgZGVmIGYoc2VsZik6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4CiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIDEyKSAjIFVzZWQgdG8gcmFpc2UgVW5ib3VuZExvY2FsRXJyb3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMTIpICMgVXNlZCB0byByYWlzZSBVbmJvdW5kTG9jYWxFcnJvcgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCiAKQEAgLTY1OCw2ICs2NDcsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBnbG9iYWxfbnNbInJlc3VsdDIiXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5LCBnbG9iYWxfbnNbInJlc3VsdDkiXSkKIAorICAgIGRlZiB0ZXN0VG9wSXNOb3RTaWduaWZpY2FudChzZWxmKToKKyAgICAgICAgIyBTZWUgIzk5OTcuCisgICAgICAgIGRlZiB0b3AoYSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBiKCk6CisgICAgICAgICAgICBnbG9iYWwgYQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiaW1wb3J0IFwqIG9ubHkgYWxsb3dlZCBhdCBtb2R1bGUgbGV2ZWwiLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zY3JpcHRwYWNrYWdlcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc2NyaXB0cGFja2FnZXMucHkKaW5kZXggZWUxNGJlMi4uN2UwMmZhMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zY3JpcHRwYWNrYWdlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NjcmlwdHBhY2thZ2VzLnB5CkBAIC0yLDcgKzIsOSBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1pbXBvcnQgYWV0b29scworCisjIFNraXAgdGhpcyB0ZXN0IGlmIGFldG9vbHMgZG9lcyBub3QgZXhpc3QuCit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnYWV0b29scycpCiAKIGNsYXNzIFRlc3RTY3JpcHRwYWNrYWdlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKaW5kZXggNmNmYjk2YS4uNzliMjQ5YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKQEAgLTQsNiArNCw4IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIAorQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicsICdyaXNjb3MnKSwKKyAgICAgICAgICAgICAgICAgImNhbid0IGVhc2lseSB0ZXN0IG9uIHRoaXMgc3lzdGVtIikKIGNsYXNzIFNlbGVjdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGNsYXNzIE5vcGU6CkBAIC0yMCwyMSArMjIsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxlY3Quc2VsZWN0LCBbXSwgW10sIFtdLCAibm90IGEgbnVtYmVyIikKIAogICAgIGRlZiB0ZXN0X3JldHVybmVkX2xpc3RfaWRlbnRpdHkoc2VsZik6Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnbWFjJywgJ29zMicpOgotICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgImNhbid0IGVhc2lseSB0ZXN0IG9uIHRoaXMgc3lzdGVtIgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICMgU2VlIGlzc3VlICM4MzI5CiAgICAgICAgIHIsIHcsIHggPSBzZWxlY3Quc2VsZWN0KFtdLCBbXSwgW10sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UociBpcyB3KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIgaXMgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3IGlzIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QociwgdykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChyLCB4KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHcsIHgpCiAKICAgICBkZWYgdGVzdF9zZWxlY3Qoc2VsZik6Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnbWFjJywgJ29zMicpOgotICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgImNhbid0IGVhc2lseSB0ZXN0IG9uIHRoaXMgc3lzdGVtIgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGNtZCA9ICdmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBlY2hvIHRlc3RpbmcuLi47IHNsZWVwIDE7IGRvbmUnCiAgICAgICAgIHAgPSBvcy5wb3BlbihjbWQsICdyJykKICAgICAgICAgZm9yIHRvdXQgaW4gKDAsIDEsIDIsIDQsIDgsIDE2KSArIChOb25lLCkqMTA6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CmluZGV4IDM1MzlhMTQuLmU4Y2NlZGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CkBAIC02LDcgKzYsNiBAQAogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgY29weQogaW1wb3J0IHBpY2tsZQotaW1wb3J0IG9zCiBmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlLCBzaHVmZmxlCiBpbXBvcnQgc3lzCiBpbXBvcnQgY29sbGVjdGlvbnMKQEAgLTY2LDcgKzY1LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYyBpbiBzZWxmLnMsIGMgaW4gc2VsZi5kKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5fX2NvbnRhaW5zX18sIFtbXV0pCiAgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoW2Zyb3plbnNldChzZWxmLmxldHRlcnMpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYudGhldHlwZShzZWxmLmxldHRlcnMpIGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi50aGV0eXBlKHNlbGYubGV0dGVycyksIHMpCiAKICAgICBkZWYgdGVzdF91bmlvbihzZWxmKToKICAgICAgICAgdSA9IHNlbGYucy51bmlvbihzZWxmLm90aGVyd29yZCkKQEAgLTEzMCw3ICsxMjksNyBAQAogICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSBzMS5pc2Rpc2pvaW50KHMyKQogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGYoczEsIHMyKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhhY3R1YWwgaXMgVHJ1ZSBvciBhY3R1YWwgaXMgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhY3R1YWwgaXMgVHJ1ZSBvciBhY3R1YWwgaXMgRmFsc2UpCiAKICAgICBkZWYgdGVzdF9hbmQoc2VsZik6CiAgICAgICAgIGkgPSBzZWxmLnMuaW50ZXJzZWN0aW9uKHNlbGYub3RoZXJ3b3JkKQpAQCAtMjEzLDE5ICsyMTIsMTkgQEAKIAogICAgIGRlZiB0ZXN0X3N1Yl9hbmRfc3VwZXIoc2VsZik6CiAgICAgICAgIHAsIHEsIHIgPSBtYXAoc2VsZi50aGV0eXBlLCBbJ2FiJywgJ2FiY2RlJywgJ2RlZiddKQotICAgICAgICBzZWxmLmFzc2VydF8ocCA8IHEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhwIDw9IHEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhxIDw9IHEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhxID4gcCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHEgPj0gcCkKLSAgICAgICAgc2VsZi5mYWlsSWYocSA8IHIpCi0gICAgICAgIHNlbGYuZmFpbElmKHEgPD0gcikKLSAgICAgICAgc2VsZi5mYWlsSWYocSA+IHIpCi0gICAgICAgIHNlbGYuZmFpbElmKHEgPj0gcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldCgnYScpLmlzc3Vic2V0KCdhYmMnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldCgnYWJjJykuaXNzdXBlcnNldCgnYScpKQotICAgICAgICBzZWxmLmZhaWxJZihzZXQoJ2EnKS5pc3N1YnNldCgnY2JzJykpCi0gICAgICAgIHNlbGYuZmFpbElmKHNldCgnY2JzJykuaXNzdXBlcnNldCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCA8IHEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwIDw9IHEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxIDw9IHEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxID4gcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEgPj0gcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxIDwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxIDw9IHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocSA+IHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocSA+PSByKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KCdhJykuaXNzdWJzZXQoJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KCdhYmMnKS5pc3N1cGVyc2V0KCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2V0KCdhJykuaXNzdWJzZXQoJ2NicycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNldCgnY2JzJykuaXNzdXBlcnNldCgnYScpKQogCiAgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CkBAIC0yNzMsNyArMjcyLDcgQEAKICAgICAgICAgcz1IKCkKICAgICAgICAgZj1zZXQoKQogICAgICAgICBmLmFkZChzKQotICAgICAgICBzZWxmLmFzc2VydF8ocyBpbiBmKQorICAgICAgICBzZWxmLmFzc2VydEluKHMsIGYpCiAgICAgICAgIGYucmVtb3ZlKHMpCiAgICAgICAgIGYuYWRkKHMpCiAgICAgICAgIGYuZGlzY2FyZChzKQpAQCAtMzM5LDcgKzMzOCw3IEBACiAgICAgICAgIG9iai54ID0gaXRlcihjb250YWluZXIpCiAgICAgICAgIGRlbCBvYmosIGNvbnRhaW5lcgogICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlZigpIGlzIE5vbmUsICJDeWNsZSB3YXMgbm90IGNvbGxlY3RlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWYoKSBpcyBOb25lLCAiQ3ljbGUgd2FzIG5vdCBjb2xsZWN0ZWQiKQogCiBjbGFzcyBUZXN0U2V0KFRlc3RKb2ludE9wcyk6CiAgICAgdGhldHlwZSA9IHNldApAQCAtMzczLDcgKzM3Miw3IEBACiAKICAgICBkZWYgdGVzdF9hZGQoc2VsZik6CiAgICAgICAgIHNlbGYucy5hZGQoJ1EnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ1EnIGluIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignUScsIHNlbGYucykKICAgICAgICAgZHVwID0gc2VsZi5zLmNvcHkoKQogICAgICAgICBzZWxmLnMuYWRkKCdRJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIGR1cCkKQEAgLTM4MSwxMyArMzgwLDEzIEBACiAKICAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CiAgICAgICAgIHNlbGYucy5yZW1vdmUoJ2EnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIG5vdCBpbiBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBzZWxmLnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnMucmVtb3ZlLCAnUScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnJlbW92ZSwgW10pCiAgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoW2Zyb3plbnNldChzZWxmLndvcmQpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYudGhldHlwZShzZWxmLndvcmQpIGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi50aGV0eXBlKHNlbGYud29yZCksIHMpCiAgICAgICAgIHMucmVtb3ZlKHNlbGYudGhldHlwZShzZWxmLndvcmQpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi50aGV0eXBlKHNlbGYud29yZCkgbm90IGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi50aGV0eXBlKHNlbGYud29yZCksIHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnMucmVtb3ZlLCBzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSkKIAogICAgIGRlZiB0ZXN0X3JlbW92ZV9rZXllcnJvcl91bnBhY2tpbmcoc2VsZik6CkBAIC00MDYsNyArNDA1LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zLnJlbW92ZShrZXkpCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGUuYXJnc1swXSBpcyBrZXksCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5hcmdzWzBdIGlzIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiS2V5RXJyb3Igc2hvdWxkIGJlIHswfSwgbm90IHsxfSIuZm9ybWF0KGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuYXJnc1swXSkpCiAgICAgICAgIGVsc2U6CkBAIC00MTQsMjYgKzQxMywyNiBAQAogCiAgICAgZGVmIHRlc3RfZGlzY2FyZChzZWxmKToKICAgICAgICAgc2VsZi5zLmRpc2NhcmQoJ2EnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIG5vdCBpbiBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBzZWxmLnMpCiAgICAgICAgIHNlbGYucy5kaXNjYXJkKCdRJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlzY2FyZCwgW10pCiAgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoW2Zyb3plbnNldChzZWxmLndvcmQpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYudGhldHlwZShzZWxmLndvcmQpIGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi50aGV0eXBlKHNlbGYud29yZCksIHMpCiAgICAgICAgIHMuZGlzY2FyZChzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYudGhldHlwZShzZWxmLndvcmQpIG5vdCBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYudGhldHlwZShzZWxmLndvcmQpLCBzKQogICAgICAgICBzLmRpc2NhcmQoc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCiAKICAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CiAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oc2VsZi5zKSk6CiAgICAgICAgICAgICBlbGVtID0gc2VsZi5zLnBvcCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZWxlbSBub3QgaW4gc2VsZi5zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBzZWxmLnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnMucG9wKQogCiAgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgogICAgICAgICByZXR2YWwgPSBzZWxmLnMudXBkYXRlKHNlbGYub3RoZXJ3b3JkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKICAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjIGluIHNlbGYucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQYXNzVGhydSwgc2VsZi5zLnVwZGF0ZSwgY2hlY2tfcGFzc190aHJ1KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnVwZGF0ZSwgW1tdXSkKICAgICAgICAgZm9yIHAsIHEgaW4gKCgnY2RjJywgJ2FiY2QnKSwgKCdlZmdmZScsICdhYmNlZmcnKSwgKCdjY2InLCAnYWJjJyksICgnZWYnLCAnYWJjZWYnKSk6CkBAIC00NTEsMTYgKzQ1MCwxNiBAQAogICAgIGRlZiB0ZXN0X2lvcihzZWxmKToKICAgICAgICAgc2VsZi5zIHw9IHNldChzZWxmLm90aGVyd29yZCkKICAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjIGluIHNlbGYucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogCiAgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmKToKICAgICAgICAgcmV0dmFsID0gc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUoc2VsZi5vdGhlcndvcmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgogICAgICAgICAgICAgaWYgYyBpbiBzZWxmLm90aGVyd29yZCBhbmQgYyBpbiBzZWxmLndvcmQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGMgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBub3QgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQYXNzVGhydSwgc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUsIGNoZWNrX3Bhc3NfdGhydSgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5pbnRlcnNlY3Rpb25fdXBkYXRlLCBbW11dKQogICAgICAgICBmb3IgcCwgcSBpbiAoKCdjZGMnLCAnYycpLCAoJ2VmZ2ZlJywgJycpLCAoJ2NjYicsICdiYycpLCAoJ2VmJywgJycpKToKQEAgLTQ3OCwxOCArNDc3LDE4IEBACiAgICAgICAgIHNlbGYucyAmPSBzZXQoc2VsZi5vdGhlcndvcmQpCiAgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6CiAgICAgICAgICAgICBpZiBjIGluIHNlbGYub3RoZXJ3b3JkIGFuZCBjIGluIHNlbGYud29yZDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjIG5vdCBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCiAKICAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKICAgICAgICAgcmV0dmFsID0gc2VsZi5zLmRpZmZlcmVuY2VfdXBkYXRlKHNlbGYub3RoZXJ3b3JkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKICAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKICAgICAgICAgICAgIGlmIGMgaW4gc2VsZi53b3JkIGFuZCBjIG5vdCBpbiBzZWxmLm90aGVyd29yZDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjIG5vdCBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFBhc3NUaHJ1LCBzZWxmLnMuZGlmZmVyZW5jZV91cGRhdGUsIGNoZWNrX3Bhc3NfdGhydSgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5kaWZmZXJlbmNlX3VwZGF0ZSwgW1tdXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLCBbW11dKQpAQCAtNTE1LDE4ICs1MTQsMTggQEAKICAgICAgICAgc2VsZi5zIC09IHNldChzZWxmLm90aGVyd29yZCkKICAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKICAgICAgICAgICAgIGlmIGMgaW4gc2VsZi53b3JkIGFuZCBjIG5vdCBpbiBzZWxmLm90aGVyd29yZDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjIG5vdCBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCiAKICAgICBkZWYgdGVzdF9zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoc2VsZik6CiAgICAgICAgIHJldHZhbCA9IHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoc2VsZi5vdGhlcndvcmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgogICAgICAgICAgICAgaWYgKGMgaW4gc2VsZi53b3JkKSBeIChjIGluIHNlbGYub3RoZXJ3b3JkKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjIG5vdCBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFBhc3NUaHJ1LCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLCBjaGVja19wYXNzX3RocnUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLCBbW11dKQogICAgICAgICBmb3IgcCwgcSBpbiAoKCdjZGMnLCAnYWJkJyksICgnZWZnZmUnLCAnYWJjZWZnJyksICgnY2NiJywgJ2EnKSwgKCdlZicsICdhYmNlZicpKToKQEAgLTUzOSw5ICs1MzgsOSBAQAogICAgICAgICBzZWxmLnMgXj0gc2V0KHNlbGYub3RoZXJ3b3JkKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgogICAgICAgICAgICAgaWYgKGMgaW4gc2VsZi53b3JkKSBeIChjIGluIHNlbGYub3RoZXJ3b3JkKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjIG5vdCBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCiAKICAgICBkZWYgdGVzdF9pbnBsYWNlX29uX3NlbGYoc2VsZik6CiAgICAgICAgIHQgPSBzZWxmLnMuY29weSgpCkBAIC01NjUsNyArNTY0LDcgQEAKICAgICAjIEMgQVBJIHRlc3Qgb25seSBhdmFpbGFibGUgaW4gYSBkZWJ1ZyBidWlsZAogICAgIGlmIGhhc2F0dHIoc2V0LCAidGVzdF9jX2FwaSIpOgogICAgICAgICBkZWYgdGVzdF9jX2FwaShzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KCdhYmMnKS50ZXN0X2NfYXBpKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCgpLnRlc3RfY19hcGkoKSwgVHJ1ZSkKIAogY2xhc3MgU2V0U3ViY2xhc3Moc2V0KToKICAgICBwYXNzCkBAIC03NjksNyArNzY4LDcgQEAKIAogICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbihzZWxmKToKICAgICAgICAgZm9yIHYgaW4gc2VsZi5zZXQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8odiBpbiBzZWxmLnZhbHVlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgc2VsZi52YWx1ZXMpCiAgICAgICAgIHNldGl0ZXIgPSBpdGVyKHNlbGYuc2V0KQogICAgICAgICAjIG5vdGU6IF9fbGVuZ3RoX2hpbnRfXyBpcyBhbiBpbnRlcm5hbCB1bmRvY3VtZW50ZWQgQVBJLAogICAgICAgICAjIGRvbid0IHJlbHkgb24gaXQgaW4geW91ciBvd24gcHJvZ3JhbXMKQEAgLTgwNCwxMCArODAzLDEwIEBACiAgICAgICAgIHNlbGYucmVwciAgID0gInNldChbM10pIgogCiAgICAgZGVmIHRlc3RfaW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcygzIGluIHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydEluKDMsIHNlbGYuc2V0KQogCiAgICAgZGVmIHRlc3Rfbm90X2luKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoMiBub3QgaW4gc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMiwgc2VsZi5zZXQpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtODIxLDEwICs4MjAsMTAgQEAKICAgICAgICAgc2VsZi5yZXByICAgPSAic2V0KFsoMCwgJ3plcm8nKV0pIgogCiAgICAgZGVmIHRlc3RfaW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcygoMCwgInplcm8iKSBpbiBzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoMCwgInplcm8iKSwgc2VsZi5zZXQpCiAKICAgICBkZWYgdGVzdF9ub3RfaW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyg5IG5vdCBpbiBzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbig5LCBzZWxmLnNldCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTE2LDcgKzExMTUsNyBAQAogICAgICAgICAgICAgcG9wcGVkW3NlbGYuc2V0LnBvcCgpXSA9IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocG9wcGVkKSwgbGVuKHNlbGYudmFsdWVzKSkKICAgICAgICAgZm9yIHYgaW4gc2VsZi52YWx1ZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModiBpbiBwb3BwZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHYsIHBvcHBlZCkKIAogICAgIGRlZiB0ZXN0X3VwZGF0ZV9lbXB0eV90dXBsZShzZWxmKToKICAgICAgICAgc2VsZi5zZXQudXBkYXRlKCgpKQpAQCAtMTM0OSw3ICsxMzQ4LDcgQEAKICAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBGYWxzZQogCiAgICAgZGVmIHRlc3RfZ2VfZ3RfbGVfbHQoc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHN1cGVyKFRlc3RPbmx5U2V0c09wZXJhdG9yLCBzZWxmKS50ZXN0X2dlX2d0X2xlX2x0KCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM4NCwyMyArMTM4MywxNyBAQAogY2xhc3MgVGVzdENvcHlpbmcodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfY29weShzZWxmKToKLSAgICAgICAgZHVwID0gc2VsZi5zZXQuY29weSgpCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICBkdXBfbGlzdCA9IHNvcnRlZChkdXApCi0gICAgICAgICAgICBzZXRfbGlzdCA9IHNvcnRlZChzZWxmLnNldCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwX2xpc3QpLCBsZW4oc2V0X2xpc3QpKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZHVwX2xpc3QpKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkdXBfbGlzdFtpXSBpcyBzZXRfbGlzdFtpXSkKKyAgICAgICAgZHVwID0gbGlzdChzZWxmLnNldC5jb3B5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbihzZWxmLnNldCkpCisgICAgICAgIGZvciBlbCBpbiBzZWxmLnNldDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWwsIGR1cCkKKyAgICAgICAgICAgIHBvcyA9IGR1cC5pbmRleChlbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZWwsIGR1cC5wb3AocG9zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkdXApCiAKICAgICBkZWYgdGVzdF9kZWVwX2NvcHkoc2VsZik6CiAgICAgICAgIGR1cCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5zZXQpCi0gICAgICAgICMjcHJpbnQgdHlwZShkdXApLCByZXByKGR1cCkKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKToKLSAgICAgICAgICAgIGR1cF9saXN0ID0gc29ydGVkKGR1cCkKLSAgICAgICAgICAgIHNldF9saXN0ID0gc29ydGVkKHNlbGYuc2V0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXBfbGlzdCksIGxlbihzZXRfbGlzdCkpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihkdXBfbGlzdCkpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXBfbGlzdFtpXSwgc2V0X2xpc3RbaV0pCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoZHVwLCBzZWxmLnNldCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xNDQxLDEzICsxNDM0LDEzIEBACiAKICAgICBkZWYgdGVzdF9iaW5vcHNWc1N1YnNldHMoc2VsZik6CiAgICAgICAgIGEsIGIgPSBzZWxmLmEsIHNlbGYuYgotICAgICAgICBzZWxmLmFzc2VydF8oYSAtIGIgPCBhKQotICAgICAgICBzZWxmLmFzc2VydF8oYiAtIGEgPCBiKQotICAgICAgICBzZWxmLmFzc2VydF8oYSAmIGIgPCBhKQotICAgICAgICBzZWxmLmFzc2VydF8oYSAmIGIgPCBiKQotICAgICAgICBzZWxmLmFzc2VydF8oYSB8IGIgPiBhKQotICAgICAgICBzZWxmLmFzc2VydF8oYSB8IGIgPiBiKQotICAgICAgICBzZWxmLmFzc2VydF8oYSBeIGIgPCBhIHwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgLSBiIDwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgLSBhIDwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgJiBiIDwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgJiBiIDwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgfCBiID4gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgfCBiID4gYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgXiBiIDwgYSB8IGIpCiAKICAgICBkZWYgdGVzdF9jb21tdXRhdGl2aXR5KHNlbGYpOgogICAgICAgICBhLCBiID0gc2VsZi5hLCBzZWxmLmIKQEAgLTE1NTksOSArMTU1Miw4IEBACiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CiAgICAgICAgIGZvciBjb25zIGluIChzZXQsIGZyb3plbnNldCk6CiAgICAgICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgotICAgICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjb25zKGcocykpKSwgc29ydGVkKGcocykpKQorICAgICAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoY29ucyhnKHMpKSwgc2V0KGcocykpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29ucyAsIFgocykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb25zICwgTihzKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgY29ucyAsIEUocykpCkBAIC0xNTc2LDggKzE1NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCBib29sKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoYWN0dWFsKSwgc29ydGVkKGV4cGVjdGVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIFgocykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCBOKHMpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBtZXRoLCBFKHMpKQpAQCAtMTU5MSw4ICsxNTgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdCA9IHMuY29weSgpCiAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIocywgbWV0aG5hbWUpKGxpc3QoZyhkYXRhKSkpCiAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIodCwgbWV0aG5hbWUpKGcoZGF0YSkpCi0gICAgICAgICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzKSwgc29ydGVkKHQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKHMsIHQpCiAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIoc2V0KCdqYW51YXJ5JyksIG1ldGhuYW1lKSwgWChkYXRhKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIoc2V0KCdqYW51YXJ5JyksIG1ldGhuYW1lKSwgTihkYXRhKSkKQEAgLTE2OTksMTMgKzE2ODksMTIgQEAKICAgICAgICAgICAgIGVkZ2UgPSB2ZXJ0ZXggICAgICAgICAgICAgICAgICAgICAgICMgQ3Vib2N0YWhlZHJvbiB2ZXJ0aWNlcyBhcmUgZWRnZXMgaW4gQ3ViZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWRnZSksIDIpICAgICAgIyBUd28gY3ViZSB2ZXJ0aWNlcyBkZWZpbmUgYW4gZWRnZQogICAgICAgICAgICAgZm9yIGN1YmV2ZXJ0IGluIGVkZ2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGN1YmV2ZXJ0IGluIGcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjdWJldmVydCwgZykKIAogCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc2V0cwogICAgIHRlc3RfY2xhc3NlcyA9ICgKICAgICAgICAgVGVzdFNldCwKICAgICAgICAgVGVzdFNldFN1YmNsYXNzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZXRjb21wcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc2V0Y29tcHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1ZTZmNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2V0Y29tcHMucHkKQEAgLTAsMCArMSwxNTEgQEAKK2RvY3Rlc3RzID0gIiIiCisjIyMjIyMjIyMjIyBUZXN0cyBtb3N0bHkgY29waWVkIGZyb20gdGVzdF9saXN0Y29tcHMucHkgIyMjIyMjIyMjIyMjCisKK1Rlc3Qgc2ltcGxlIGxvb3Agd2l0aCBjb25kaXRpb25hbAorCisgICAgPj4+IHN1bSh7aSppIGZvciBpIGluIHJhbmdlKDEwMCkgaWYgaSYxID09IDF9KQorICAgIDE2NjY1MAorCitUZXN0IHNpbXBsZSBjYXNlCisKKyAgICA+Pj4gezIqeSArIHggKyAxIGZvciB4IGluICgwLCkgZm9yIHkgaW4gKDEsKX0KKyAgICBzZXQoWzNdKQorCitUZXN0IHNpbXBsZSBuZXN0aW5nCisKKyAgICA+Pj4gbGlzdChzb3J0ZWQoeyhpLGopIGZvciBpIGluIHJhbmdlKDMpIGZvciBqIGluIHJhbmdlKDQpfSkpCisgICAgWygwLCAwKSwgKDAsIDEpLCAoMCwgMiksICgwLCAzKSwgKDEsIDApLCAoMSwgMSksICgxLCAyKSwgKDEsIDMpLCAoMiwgMCksICgyLCAxKSwgKDIsIDIpLCAoMiwgMyldCisKK1Rlc3QgbmVzdGluZyB3aXRoIHRoZSBpbm5lciBleHByZXNzaW9uIGRlcGVuZGVudCBvbiB0aGUgb3V0ZXIKKworICAgID4+PiBsaXN0KHNvcnRlZCh7KGksaikgZm9yIGkgaW4gcmFuZ2UoNCkgZm9yIGogaW4gcmFuZ2UoaSl9KSkKKyAgICBbKDEsIDApLCAoMiwgMCksICgyLCAxKSwgKDMsIDApLCAoMywgMSksICgzLCAyKV0KKworTWFrZSBzdXJlIHRoZSBpbmR1Y3Rpb24gdmFyaWFibGUgaXMgbm90IGV4cG9zZWQKKworICAgID4+PiBpID0gMjAKKyAgICA+Pj4gc3VtKHtpKmkgZm9yIGkgaW4gcmFuZ2UoMTAwKX0pCisgICAgMzI4MzUwCisKKyAgICA+Pj4gaQorICAgIDIwCisKK1ZlcmlmeSB0aGF0IHN5bnRheCBlcnJvcidzIGFyZSByYWlzZWQgZm9yIHNldGNvbXBzIHVzZWQgYXMgbHZhbHVlcworCisgICAgPj4+IHt5IGZvciB5IGluICgxLDIpfSA9IDEwICAgICAgICAgICMgZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgIC4uLgorICAgIFN5bnRheEVycm9yOiAuLi4KKworICAgID4+PiB7eSBmb3IgeSBpbiAoMSwyKX0gKz0gMTAgICAgICAgICAjIGRvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogLi4uCisKKworTWFrZSBhIG5lc3RlZCBzZXQgY29tcHJlaGVuc2lvbiB0aGF0IGFjdHMgbGlrZSBzZXQocmFuZ2UoKSkKKworICAgID4+PiBkZWYgc3JhbmdlKG4pOgorICAgIC4uLiAgICAgcmV0dXJuIHtpIGZvciBpIGluIHJhbmdlKG4pfQorICAgID4+PiBsaXN0KHNvcnRlZChzcmFuZ2UoMTApKSkKKyAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKworU2FtZSBhZ2Fpbiwgb25seSBhcyBhIGxhbWJkYSBleHByZXNzaW9uIGluc3RlYWQgb2YgYSBmdW5jdGlvbiBkZWZpbml0aW9uCisKKyAgICA+Pj4gbHJhbmdlID0gbGFtYmRhIG46ICB7aSBmb3IgaSBpbiByYW5nZShuKX0KKyAgICA+Pj4gbGlzdChzb3J0ZWQobHJhbmdlKDEwKSkpCisgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisKK0dlbmVyYXRvcnMgY2FuIGNhbGwgb3RoZXIgZ2VuZXJhdG9yczoKKworICAgID4+PiBkZWYgZ3JhbmdlKG4pOgorICAgIC4uLiAgICAgZm9yIHggaW4ge2kgZm9yIGkgaW4gcmFuZ2Uobil9OgorICAgIC4uLiAgICAgICAgIHlpZWxkIHgKKyAgICA+Pj4gbGlzdChzb3J0ZWQoZ3JhbmdlKDUpKSkKKyAgICBbMCwgMSwgMiwgMywgNF0KKworCitNYWtlIHN1cmUgdGhhdCBOb25lIGlzIGEgdmFsaWQgcmV0dXJuIHZhbHVlCisKKyAgICA+Pj4ge05vbmUgZm9yIGkgaW4gcmFuZ2UoMTApfQorICAgIHNldChbTm9uZV0pCisKKyMjIyMjIyMjIyMjIFRlc3RzIGZvciB2YXJpb3VzIHNjb3BpbmcgY29ybmVyIGNhc2VzICMjIyMjIyMjIyMjIworCitSZXR1cm4gbGFtYmRhcyB0aGF0IHVzZSB0aGUgaXRlcmF0aW9uIHZhcmlhYmxlIGFzIGEgZGVmYXVsdCBhcmd1bWVudAorCisgICAgPj4+IGl0ZW1zID0geyhsYW1iZGEgaT1pOiBpKSBmb3IgaSBpbiByYW5nZSg1KX0KKyAgICA+Pj4ge3goKSBmb3IgeCBpbiBpdGVtc30gPT0gc2V0KHJhbmdlKDUpKQorICAgIFRydWUKKworU2FtZSBhZ2Fpbiwgb25seSB0aGlzIHRpbWUgYXMgYSBjbG9zdXJlIHZhcmlhYmxlCisKKyAgICA+Pj4gaXRlbXMgPSB7KGxhbWJkYTogaSkgZm9yIGkgaW4gcmFuZ2UoNSl9CisgICAgPj4+IHt4KCkgZm9yIHggaW4gaXRlbXN9CisgICAgc2V0KFs0XSkKKworQW5vdGhlciB3YXkgdG8gdGVzdCB0aGF0IHRoZSBpdGVyYXRpb24gdmFyaWFibGUgaXMgbG9jYWwgdG8gdGhlIGxpc3QgY29tcAorCisgICAgPj4+IGl0ZW1zID0geyhsYW1iZGE6IGkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgID4+PiBpID0gMjAKKyAgICA+Pj4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICBzZXQoWzRdKQorCitBbmQgY29uZmlybSB0aGF0IGEgY2xvc3VyZSBjYW4ganVtcCBvdmVyIHRoZSBsaXN0IGNvbXAgc2NvcGUKKworICAgID4+PiBpdGVtcyA9IHsobGFtYmRhOiB5KSBmb3IgaSBpbiByYW5nZSg1KX0KKyAgICA+Pj4geSA9IDIKKyAgICA+Pj4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICBzZXQoWzJdKQorCitXZSBhbHNvIHJlcGVhdCBlYWNoIG9mIHRoZSBhYm92ZSBzY29waW5nIHRlc3RzIGluc2lkZSBhIGZ1bmN0aW9uCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuYygpOgorICAgIC4uLiAgICAgaXRlbXMgPSB7KGxhbWJkYSBpPWk6IGkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgIC4uLiAgICAgcmV0dXJuIHt4KCkgZm9yIHggaW4gaXRlbXN9CisgICAgPj4+IHRlc3RfZnVuYygpID09IHNldChyYW5nZSg1KSkKKyAgICBUcnVlCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuYygpOgorICAgIC4uLiAgICAgaXRlbXMgPSB7KGxhbWJkYTogaSkgZm9yIGkgaW4gcmFuZ2UoNSl9CisgICAgLi4uICAgICByZXR1cm4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICA+Pj4gdGVzdF9mdW5jKCkKKyAgICBzZXQoWzRdKQorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmMoKToKKyAgICAuLi4gICAgIGl0ZW1zID0geyhsYW1iZGE6IGkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgIC4uLiAgICAgaSA9IDIwCisgICAgLi4uICAgICByZXR1cm4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICA+Pj4gdGVzdF9mdW5jKCkKKyAgICBzZXQoWzRdKQorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmMoKToKKyAgICAuLi4gICAgIGl0ZW1zID0geyhsYW1iZGE6IHkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgIC4uLiAgICAgeSA9IDIKKyAgICAuLi4gICAgIHJldHVybiB7eCgpIGZvciB4IGluIGl0ZW1zfQorICAgID4+PiB0ZXN0X2Z1bmMoKQorICAgIHNldChbMl0pCisKKyIiIgorCisKK19fdGVzdF9fID0geydkb2N0ZXN0cycgOiBkb2N0ZXN0c30KKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGltcG9ydCBzeXMKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zZXRjb21wcworICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3NldGNvbXBzLCB2ZXJib3NlKQorCisgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3NldGNvbXBzLCB2ZXJib3NlKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHByaW50KGNvdW50cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZXRzLnB5IGIvTGliL3Rlc3QvdGVzdF9zZXRzLnB5CmluZGV4IDk5MDVkMTMuLjA3NTRlZDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2V0cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NldHMucHkKQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbihzZWxmKToKICAgICAgICAgZm9yIHYgaW4gc2VsZi5zZXQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8odiBpbiBzZWxmLnZhbHVlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgc2VsZi52YWx1ZXMpCiAKICAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKICAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyhzZWxmLnNldCkKQEAgLTEwNSwxMCArMTA1LDEwIEBACiAgICAgICAgIHNlbGYucmVwciAgID0gIlNldChbM10pIgogCiAgICAgZGVmIHRlc3RfaW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcygzIGluIHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMyBpbiBzZWxmLnNldCkKIAogICAgIGRlZiB0ZXN0X25vdF9pbihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKDIgbm90IGluIHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMiBub3QgaW4gc2VsZi5zZXQpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTIyLDEwICsxMjIsMTAgQEAKICAgICAgICAgc2VsZi5yZXByICAgPSAiU2V0KFsoMCwgJ3plcm8nKV0pIgogCiAgICAgZGVmIHRlc3RfaW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcygoMCwgInplcm8iKSBpbiBzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgwLCAiemVybyIpIGluIHNlbGYuc2V0KQogCiAgICAgZGVmIHRlc3Rfbm90X2luKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoOSBub3QgaW4gc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSg5IG5vdCBpbiBzZWxmLnNldCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00MDQsNyArNDA0LDcgQEAKICAgICAgICAgICAgIHBvcHBlZFtzZWxmLnNldC5wb3AoKV0gPSBOb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBvcHBlZCksIGxlbihzZWxmLnZhbHVlcykpCiAgICAgICAgIGZvciB2IGluIHNlbGYudmFsdWVzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHYgaW4gcG9wcGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBwb3BwZWQpCiAKICAgICBkZWYgdGVzdF91cGRhdGVfZW1wdHlfdHVwbGUoc2VsZik6CiAgICAgICAgIHNlbGYuc2V0LnVuaW9uX3VwZGF0ZSgoKSkKQEAgLTYzNyw3ICs2MzcsNyBAQAogICAgICAgICBzZWxmLm90aGVySXNJdGVyYWJsZSA9IEZhbHNlCiAKICAgICBkZWYgdGVzdF9nZV9ndF9sZV9sdChzZWxmKToKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgc3VwZXIoVGVzdE9ubHlTZXRzT3BlcmF0b3IsIHNlbGYpLnRlc3RfZ2VfZ3RfbGVfbHQoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02ODYsMTggKzY4NiwxMSBAQAogICAgICAgICBzZXRfbGlzdCA9IHNvcnRlZChzZWxmLnNldCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwX2xpc3QpLCBsZW4oc2V0X2xpc3QpKQogICAgICAgICBmb3IgaSwgZWwgaW4gZW51bWVyYXRlKGR1cF9saXN0KToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbCBpcyBzZXRfbGlzdFtpXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZWwsIHNldF9saXN0W2ldKQogCiAgICAgZGVmIHRlc3RfZGVlcF9jb3B5KHNlbGYpOgogICAgICAgICBkdXAgPSBjb3B5LmRlZXBjb3B5KHNlbGYuc2V0KQotICAgICAgICAjI3ByaW50IHR5cGUoZHVwKSwgcmVwcihkdXApCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICBkdXBfbGlzdCA9IHNvcnRlZChkdXApCi0gICAgICAgICAgICBzZXRfbGlzdCA9IHNvcnRlZChzZWxmLnNldCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwX2xpc3QpLCBsZW4oc2V0X2xpc3QpKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZHVwX2xpc3QpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwX2xpc3RbaV0sIHNldF9saXN0W2ldKQotCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoZHVwLCBzZWxmLnNldCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC03MTgsNyArNzExLDcgQEAKICAgICAgICAgc2VsZi5zZXQgPSBTZXQoWyJ6ZXJvIiwgMCwgTm9uZV0pCiAKICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBzdXBlcihUZXN0Q29weWluZ1RyaXBsZSwgc2VsZikudGVzdF9jb3B5KCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzQyLDEzICs3MzUsMTMgQEAKIAogICAgIGRlZiB0ZXN0X2Jpbm9wc1ZzU3Vic2V0cyhzZWxmKToKICAgICAgICAgYSwgYiA9IHNlbGYuYSwgc2VsZi5iCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIC0gYiA8PSBhKQotICAgICAgICBzZWxmLmFzc2VydF8oYiAtIGEgPD0gYikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgJiBiIDw9IGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhICYgYiA8PSBiKQotICAgICAgICBzZWxmLmFzc2VydF8oYSB8IGIgPj0gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgfCBiID49IGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIF4gYiA8PSBhIHwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgLSBiIDw9IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIC0gYSA8PSBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSAmIGIgPD0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgJiBiIDw9IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIHwgYiA+PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSB8IGIgPj0gYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgXiBiIDw9IGEgfCBiKQogCiAgICAgZGVmIHRlc3RfY29tbXV0YXRpdml0eShzZWxmKToKICAgICAgICAgYSwgYiA9IHNlbGYuYSwgc2VsZi5iCkBAIC03NjQsOSArNzU3LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gYSwgemVybykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIHwgYSwgYSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICYgYSwgYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgPD0gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgPj0gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgPT0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPD0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPj0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gYSkKIAogICAgIGRlZiB0ZXN0X3N1bW1hdGlvbnMoc2VsZik6CiAgICAgICAgICMgY2hlY2sgdGhhdCBzdW1zIG9mIHBhcnRzIGVxdWFsIHRoZSB3aG9sZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaGEucHkgYi9MaWIvdGVzdC90ZXN0X3NoYS5weQppbmRleCAwNjQ3ZGIzLi42YjM4NDM1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NoYS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NoYS5weQpAQCAtMTgsMTkgKzE4LDE5IEBACiAgICAgICAgICMgQ2hlY2sgZGlnZXN0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIHZhbHVlCiAgICAgICAgIG9iaiA9IHNoYS5uZXcoZGF0YSkKICAgICAgICAgY29tcHV0ZWQgPSBvYmouaGV4ZGlnZXN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbXB1dGVkID09IGRpZ2VzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXB1dGVkID09IGRpZ2VzdCkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSB2YWx1ZSBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZQogICAgICAgICAjIGRpZ2VzdCBvcGVyYXRpb25zLgogICAgICAgICBjb21wdXRlZF9hZ2FpbiA9IG9iai5oZXhkaWdlc3QoKQotICAgICAgICBzZWxmLmFzc2VydF8oY29tcHV0ZWQgPT0gY29tcHV0ZWRfYWdhaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21wdXRlZCA9PSBjb21wdXRlZF9hZ2FpbikKIAogICAgICAgICAjIENoZWNrIGhleGRpZ2VzdCgpIG91dHB1dCBtYXRjaGVzIGRpZ2VzdCgpJ3Mgb3V0cHV0CiAgICAgICAgIGRpZ2VzdCA9IG9iai5kaWdlc3QoKQogICAgICAgICBoZXhkID0gIiIKICAgICAgICAgZm9yIGMgaW4gZGlnZXN0OgogICAgICAgICAgICAgaGV4ZCArPSAnJTAyeCcgJSBvcmQoYykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbXB1dGVkID09IGhleGQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21wdXRlZCA9PSBoZXhkKQogCiAgICAgZGVmIHRlc3RfY2FzZV8xKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCJhYmMiLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkgYi9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQppbmRleCAyNTMyYTQ5Li5mZGMwYmMxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQpAQCAtNywxMCArNyw3MSBAQAogaW1wb3J0IHN0YXQKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKK2Zyb20gb3MucGF0aCBpbXBvcnQgc3BsaXRkcml2ZQorZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZSwgc3Bhd24KK2Zyb20gc2h1dGlsIGltcG9ydCAoX21ha2VfdGFyYmFsbCwgX21ha2VfemlwZmlsZSwgbWFrZV9hcmNoaXZlLAorICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwgdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgZ2V0X2FyY2hpdmVfZm9ybWF0cykKK2ltcG9ydCB0YXJmaWxlCitpbXBvcnQgd2FybmluZ3MKKwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBjaGVja193YXJuaW5ncywgY2FwdHVyZWRfc3Rkb3V0CisKK1RFU1RGTjIgPSBURVNURk4gKyAiMiIKKwordHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCisKK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHpsaWIgPSBOb25lCisKK3RyeToKKyAgICBpbXBvcnQgemlwZmlsZQorICAgIFpJUF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFpJUF9TVVBQT1JUID0gZmluZF9leGVjdXRhYmxlKCd6aXAnKQogCiBjbGFzcyBUZXN0U2h1dGlsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFNodXRpbCwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnRlbXBkaXJzID0gW10KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFNodXRpbCwgc2VsZikudGVhckRvd24oKQorICAgICAgICB3aGlsZSBzZWxmLnRlbXBkaXJzOgorICAgICAgICAgICAgZCA9IHNlbGYudGVtcGRpcnMucG9wKCkKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCwgb3MubmFtZSBpbiAoJ250JywgJ2N5Z3dpbicpKQorCisgICAgZGVmIHdyaXRlX2ZpbGUoc2VsZiwgcGF0aCwgY29udGVudD0neHh4Jyk6CisgICAgICAgICIiIldyaXRlcyBhIGZpbGUgaW4gdGhlIGdpdmVuIHBhdGguCisKKworICAgICAgICBwYXRoIGNhbiBiZSBhIHN0cmluZyBvciBhIHNlcXVlbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oKnBhdGgpCisgICAgICAgIGYgPSBvcGVuKHBhdGgsICd3JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZShjb250ZW50KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgbWtkdGVtcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgY2xlYW5lZCB1cC4KKworICAgICAgICBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICIiIgorICAgICAgICBkID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYudGVtcGRpcnMuYXBwZW5kKGQpCisgICAgICAgIHJldHVybiBkCiAgICAgZGVmIHRlc3Rfcm10cmVlX2Vycm9ycyhzZWxmKToKICAgICAgICAgIyBmaWxlbmFtZSBpcyBndWFyYW50ZWVkIG5vdCB0byBleGlzdAogICAgICAgICBmaWxlbmFtZSA9IHRlbXBmaWxlLm1rdGVtcCgpCkBAIC00NSwxNSArMTA2LDI5IEBACiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTikKIAogICAgIGRlZiBjaGVja19hcmdzX3RvX29uZXJyb3Ioc2VsZiwgZnVuYywgYXJnLCBleGMpOgorICAgICAgICAjIHRlc3Rfcm10cmVlX2Vycm9ycyBkZWxpYmVyYXRlbHkgcnVucyBybXRyZWUKKyAgICAgICAgIyBvbiBhIGRpcmVjdG9yeSB0aGF0IGlzIGNobW9kIDQwMCwgd2hpY2ggd2lsbCBmYWlsLgorICAgICAgICAjIFRoaXMgZnVuY3Rpb24gaXMgcnVuIHdoZW4gc2h1dGlsLnJtdHJlZSBmYWlscy4KKyAgICAgICAgIyA5OS45JSBvZiB0aGUgdGltZSBpdCBpbml0aWFsbHkgZmFpbHMgdG8gcmVtb3ZlCisgICAgICAgICMgYSBmaWxlIGluIHRoZSBkaXJlY3RvcnksIHNvIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gKKyAgICAgICAgIyBmdW5jIGlzIG9zLnJlbW92ZS4KKyAgICAgICAgIyBIb3dldmVyLCBzb21lIExpbnV4IG1hY2hpbmVzIHJ1bm5pbmcgWkZTIG9uCisgICAgICAgICMgRlVTRSBleHBlcmllbmNlZCBhIGZhaWx1cmUgZWFybGllciBpbiB0aGUgcHJvY2VzcworICAgICAgICAjIGF0IG9zLmxpc3RkaXIuICBUaGUgZmlyc3QgZmFpbHVyZSBtYXkgbGVnYWxseQorICAgICAgICAjIGJlIGVpdGhlci4KICAgICAgICAgaWYgc2VsZi5lcnJvclN0YXRlID09IDA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMsIG9zLnJlbW92ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJnLCBzZWxmLmNoaWxkcGF0aCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKGV4Y1swXSwgT1NFcnJvcikpCisgICAgICAgICAgICBpZiBmdW5jIGlzIG9zLnJlbW92ZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZywgc2VsZi5jaGlsZHBhdGgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnVuYywgb3MubGlzdGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jIG11c3QgYmUgZWl0aGVyIG9zLnJlbW92ZSBvciBvcy5saXN0ZGlyIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZywgVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZXhjWzBdLCBPU0Vycm9yKSkKICAgICAgICAgICAgIHNlbGYuZXJyb3JTdGF0ZSA9IDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYywgb3Mucm1kaXIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZywgVEVTVEZOKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoZXhjWzBdLCBPU0Vycm9yKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGV4Y1swXSwgT1NFcnJvcikpCiAgICAgICAgICAgICBzZWxmLmVycm9yU3RhdGUgPSAyCiAKICAgICBkZWYgdGVzdF9ybXRyZWVfZG9udF9kZWxldGVfZmlsZShzZWxmKToKQEAgLTEzOCw2ICsyMTMsNyBAQAogICAgICAgICAgICAgd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0X2RpcjInLCAnc3ViZGlyJywgJ3Rlc3QudHh0JyksICc0NTYnKQogICAgICAgICAgICAgd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0X2RpcjInLCAnc3ViZGlyMicsICd0ZXN0LnB5JyksICc0NTYnKQogCisKICAgICAgICAgICAgICMgdGVzdGluZyBnbG9iLWxpa2UgcGF0dGVybnMKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwYXR0ZXJucyA9IHNodXRpbC5pZ25vcmVfcGF0dGVybnMoJyoudG1wJywgJ3Rlc3RfZGlyMicpCkBAIC0yMDEsNyArMjc3LDggQEAKIAogICAgICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlbihzcmMsJ3InKS5yZWFkKCksICdjaGVkZGFyJykKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQogCiAgICAgICAgICAgICAgICAgIyBVc2luZyBgc3JjYCBoZXJlIHdvdWxkIG1lYW4gd2UgZW5kIHVwIHdpdGggYSBzeW1saW5rIHBvaW50aW5nCkBAIC0yMDksNyArMjg2LDggQEAKICAgICAgICAgICAgICAgICAjIFRFU1RGTi9jaGVlc2UuCiAgICAgICAgICAgICAgICAgb3Muc3ltbGluaygnY2hlZXNlJywgZHN0KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oc3JjLCdyJykucmVhZCgpLCAnY2hlZGRhcicpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnY2hlZGRhcicpCiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMjI5LDYgKzMwNywyNjAgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKIAorICAgIGlmIGhhc2F0dHIob3MsICJta2ZpZm8iKToKKyAgICAgICAgIyBJc3N1ZSAjMzAwMjogY29weWZpbGUgYW5kIGNvcHl0cmVlIGJsb2NrIGluZGVmaW5pdGVseSBvbiBuYW1lZCBwaXBlcworICAgICAgICBkZWYgdGVzdF9jb3B5ZmlsZV9uYW1lZF9waXBlKHNlbGYpOgorICAgICAgICAgICAgb3MubWtmaWZvKFRFU1RGTikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuU3BlY2lhbEZpbGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUsIFRFU1RGTiwgVEVTVEZOMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuU3BlY2lhbEZpbGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUsIF9fZmlsZV9fLCBURVNURk4pCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisKKyAgICAgICAgZGVmIHRlc3RfY29weXRyZWVfbmFtZWRfcGlwZShzZWxmKToKKyAgICAgICAgICAgIG9zLm1rZGlyKFRFU1RGTikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWJkaXIgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCAic3ViZGlyIikKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihzdWJkaXIpCisgICAgICAgICAgICAgICAgcGlwZSA9IG9zLnBhdGguam9pbihzdWJkaXIsICJteXBpcGUiKQorICAgICAgICAgICAgICAgIG9zLm1rZmlmbyhwaXBlKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKFRFU1RGTiwgVEVTVEZOMikKKyAgICAgICAgICAgICAgICBleGNlcHQgc2h1dGlsLkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUuYXJnc1swXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlcnJvcnMpLCAxKQorICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgZXJyb3JfbXNnID0gZXJyb3JzWzBdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImAlc2AgaXMgYSBuYW1lZCBwaXBlIiAlIHBpcGUsIGVycm9yX21zZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNodXRpbC5FcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOLCBpZ25vcmVfZXJyb3JzPVRydWUpCisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yLCBpZ25vcmVfZXJyb3JzPVRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfbWFrZV90YXJiYWxsKHNlbGYpOgorICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyB0byB0YXIKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdmaWxlMSddLCAneHh4JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdmaWxlMiddLCAneHh4JykKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHRtcGRpciwgJ3N1YicpKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ3N1YicsICdmaWxlMyddLCAneHh4JykKKworICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgdW5pdHRlc3Quc2tpcFVubGVzcyhzcGxpdGRyaXZlKHRtcGRpcilbMF0gPT0gc3BsaXRkcml2ZSh0bXBkaXIyKVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIGFuZCB0YXJnZXQgc2hvdWxkIGJlIG9uIHNhbWUgZHJpdmUiKQorCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisKKyAgICAgICAgIyB3b3JraW5nIHdpdGggcmVsYXRpdmUgcGF0aHMgdG8gYXZvaWQgdGFyIHdhcm5pbmdzCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9tYWtlX3RhcmJhbGwoc3BsaXRkcml2ZShiYXNlX25hbWUpWzFdLCAnLicpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXIuZ3onCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKworICAgICAgICAjIHRyeWluZyBhbiB1bmNvbXByZXNzZWQgb25lCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9tYWtlX3RhcmJhbGwoc3BsaXRkcml2ZShiYXNlX25hbWUpWzFdLCAnLicsIGNvbXByZXNzPU5vbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXInCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKworICAgIGRlZiBfdGFyaW5mbyhzZWxmLCBwYXRoKToKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHBhdGgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWVzID0gdGFyLmdldG5hbWVzKCkKKyAgICAgICAgICAgIG5hbWVzLnNvcnQoKQorICAgICAgICAgICAgcmV0dXJuIHR1cGxlKG5hbWVzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKworICAgIGRlZiBfY3JlYXRlX2ZpbGVzKHNlbGYpOgorICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyB0byB0YXIKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgZGlzdCA9IG9zLnBhdGguam9pbih0bXBkaXIsICdkaXN0JykKKyAgICAgICAgb3MubWtkaXIoZGlzdCkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFtkaXN0LCAnZmlsZTEnXSwgJ3h4eCcpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbZGlzdCwgJ2ZpbGUyJ10sICd4eHgnKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZGlzdCwgJ3N1YicpKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW2Rpc3QsICdzdWInLCAnZmlsZTMnXSwgJ3h4eCcpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihkaXN0LCAnc3ViMicpKQorICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgcmV0dXJuIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAiUmVxdWlyZXMgemxpYiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmluZF9leGVjdXRhYmxlKCd0YXInKSBhbmQgZmluZF9leGVjdXRhYmxlKCdnemlwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ05lZWQgdGhlIHRhciBjb21tYW5kIHRvIHJ1bicpCisgICAgZGVmIHRlc3RfdGFyZmlsZV92c190YXIoc2VsZik6CisgICAgICAgIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9tYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXIuZ3onCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKworICAgICAgICAjIG5vdyBjcmVhdGUgYW5vdGhlciB0YXJiYWxsIHVzaW5nIGB0YXJgCisgICAgICAgIHRhcmJhbGwyID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2FyY2hpdmUyLnRhci5neicpCisgICAgICAgIHRhcl9jbWQgPSBbJ3RhcicsICctY2YnLCAnYXJjaGl2ZTIudGFyJywgJ2Rpc3QnXQorICAgICAgICBnemlwX2NtZCA9IFsnZ3ppcCcsICctZjknLCAnYXJjaGl2ZTIudGFyJ10KKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzOgorICAgICAgICAgICAgICAgIHNwYXduKHRhcl9jbWQpCisgICAgICAgICAgICAgICAgc3Bhd24oZ3ppcF9jbWQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsMikpCisgICAgICAgICMgbGV0J3MgY29tcGFyZSBib3RoIHRhcmJhbGxzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGFyaW5mbyh0YXJiYWxsKSwgc2VsZi5fdGFyaW5mbyh0YXJiYWxsMikpCisKKyAgICAgICAgIyB0cnlpbmcgYW4gdW5jb21wcmVzc2VkIG9uZQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICAgICAgIyBub3cgZm9yIGEgZHJ5X3J1bgorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lLCBkcnlfcnVuPVRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXInCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhaSVBfU1VQUE9SVCwgJ05lZWQgemlwIHN1cHBvcnQgdG8gcnVuJykKKyAgICBkZWYgdGVzdF9tYWtlX3ppcGZpbGUoc2VsZik6CisgICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHRhcgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUxJ10sICd4eHgnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUyJ10sICd4eHgnKQorCisgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorICAgICAgICBfbWFrZV96aXBmaWxlKGJhc2VfbmFtZSwgdG1wZGlyKQorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy56aXAnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKworCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlKHNlbGYpOgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnYXJjaGl2ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ha2VfYXJjaGl2ZSwgYmFzZV9uYW1lLCAneHh4JykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmVfb3duZXJfZ3JvdXAoc2VsZik6CisgICAgICAgICMgdGVzdGluZyBtYWtlX2FyY2hpdmUgd2l0aCBvd25lciBhbmQgZ3JvdXAsIHdpdGggdmFyaW91cyBjb21iaW5hdGlvbnMKKyAgICAgICAgIyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUncyBub3QgZ2lkL3VpZCBzdXBwb3J0CisgICAgICAgIGlmIFVJRF9HSURfU1VQUE9SVDoKKyAgICAgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3JvdXAgPSBvd25lciA9ICdyb290JworCisgICAgICAgIGJhc2VfZGlyLCByb290X2RpciwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSAsICdhcmNoaXZlJykKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2Rpciwgb3duZXI9b3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPSdramhramhramcnLCBncm91cD0nb2lob2hvaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFVJRF9HSURfU1VQUE9SVCwgIlJlcXVpcmVzIGdycCBhbmQgcHdkIHN1cHBvcnQiKQorICAgIGRlZiB0ZXN0X3RhcmZpbGVfcm9vdF9vd25lcihzZWxmKToKKyAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KKyAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXJjaGl2ZV9uYW1lID0gX21ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGFyY2hpdmVfbmFtZSkpCisKKyAgICAgICAgIyBub3cgY2hlY2tzIHRoZSByaWdodHMKKyAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gYXJjaGl2ZS5nZXRtZW1iZXJzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIudWlkLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLmdpZCwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlX2N3ZChzZWxmKToKKyAgICAgICAgY3VycmVudF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBkZWYgX2JyZWFrcygqYXJncywgKiprdyk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoKQorCisgICAgICAgIHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KCd4eHgnLCBfYnJlYWtzLCBbXSwgJ3h4eCBmaWxlJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1ha2VfYXJjaGl2ZSgneHh4JywgJ3h4eCcsIHJvb3RfZGlyPXNlbGYubWtkdGVtcCgpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldGN3ZCgpLCBjdXJyZW50X2RpcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQoJ3h4eCcpCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChzZWxmKToKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0LCAneHh4JywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwgJ3h4eCcsIGxhbWJkYTogeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwgJ3h4eCcsIGxhbWJkYTogeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWygxLCAyKSwgKDEsIDIsIDMpXSkKKworICAgICAgICByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCgneHh4JywgbGFtYmRhOiB4LCBbKDEsIDIpXSwgJ3h4eCBmaWxlJykKKyAgICAgICAgZm9ybWF0cyA9IFtuYW1lIGZvciBuYW1lLCBwYXJhbXMgaW4gZ2V0X2FyY2hpdmVfZm9ybWF0cygpXQorICAgICAgICBzZWxmLmFzc2VydEluKCd4eHgnLCBmb3JtYXRzKQorCisgICAgICAgIHVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQoJ3h4eCcpCisgICAgICAgIGZvcm1hdHMgPSBbbmFtZSBmb3IgbmFtZSwgcGFyYW1zIGluIGdldF9hcmNoaXZlX2Zvcm1hdHMoKV0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigneHh4JywgZm9ybWF0cykKKwogCiBjbGFzcyBUZXN0TW92ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTI1OSw5ICs1OTEsMTEgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgX2NoZWNrX21vdmVfZmlsZShzZWxmLCBzcmMsIGRzdCwgcmVhbF9kc3QpOgotICAgICAgICBjb250ZW50cyA9IG9wZW4oc3JjLCAicmIiKS5yZWFkKCkKKyAgICAgICAgd2l0aCBvcGVuKHNyYywgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGNvbnRlbnRzID0gZi5yZWFkKCkKICAgICAgICAgc2h1dGlsLm1vdmUoc3JjLCBkc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsIG9wZW4ocmVhbF9kc3QsICJyYiIpLnJlYWQoKSkKKyAgICAgICAgd2l0aCBvcGVuKHJlYWxfZHN0LCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgZi5yZWFkKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc3JjKSkKIAogICAgIGRlZiBfY2hlY2tfbW92ZV9kaXIoc2VsZiwgc3JjLCBkc3QsIHJlYWxfZHN0KToKQEAgLTM0OSw4ICs2ODMsOCBAQAogICAgICAgICAgICAgZm9yIHNyYywgZHN0IGluIFsoJ3NyY2RpcicsICdzcmNkaXIvZGVzdCcpXToKICAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCBzcmMpCiAgICAgICAgICAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKFRFU1RGTiwgZHN0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzaHV0aWwuZGVzdGluc3JjKHNyYywgZHN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdkZXN0aW5zcmMoKSB3cm9uZ2x5IGNvbmNsdWRlZCB0aGF0ICcKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2h1dGlsLl9kZXN0aW5zcmMoc3JjLCBkc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J19kZXN0aW5zcmMoKSB3cm9uZ2x5IGNvbmNsdWRlZCB0aGF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RzdCAoJXMpIGlzIG5vdCBpbiBzcmMgKCVzKScgJSAoZHN0LCBzcmMpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKQEAgLTM2MSw4ICs2OTUsOCBAQAogICAgICAgICAgICAgZm9yIHNyYywgZHN0IGluIFsoJ3NyY2RpcicsICdzcmMvZGVzdCcpLCAoJ3NyY2RpcicsICdzcmNkaXIubmV3JyldOgogICAgICAgICAgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihURVNURk4sIHNyYykKICAgICAgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCBkc3QpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYoc2h1dGlsLmRlc3RpbnNyYyhzcmMsIGRzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdkZXN0aW5zcmMoKSB3cm9uZ2x5IGNvbmNsdWRlZCB0aGF0ICcKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNodXRpbC5fZGVzdGluc3JjKHNyYywgZHN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J19kZXN0aW5zcmMoKSB3cm9uZ2x5IGNvbmNsdWRlZCB0aGF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHN0ICglcykgaXMgaW4gc3JjICglcyknICUgKGRzdCwgc3JjKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOLCBpZ25vcmVfZXJyb3JzPVRydWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CmluZGV4IGFlNWI1ODYuLjhmZWIxNDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CkBAIC0xLDYgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotZnJvbSBjb250ZXh0bGliIGltcG9ydCBjbG9zaW5nLCBuZXN0ZWQKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY2xvc2luZwogaW1wb3J0IGdjCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgc2VsZWN0CkBAIC05LDkgKzksOCBAQAogaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IHN5cywgb3MsIHRpbWUsIGVycm5vCiAKLWlmIHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJykgb3Igc3lzLnBsYXRmb3JtID09ICdyaXNjb3MnOgotICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZCgiQ2FuJ3QgdGVzdCBzaWduYWwgb24gJXMiICUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0pCitpZiBzeXMucGxhdGZvcm0gaW4gKCdvczInLCAncmlzY29zJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIHN5cy5wbGF0Zm9ybSkKIAogCiBjbGFzcyBIYW5kbGVyQkNhbGxlZChFeGNlcHRpb24pOgpAQCAtMzcsNiArMzYsNyBAQAogICAgICAgICByZXR1cm4gTm9uZQogCiAKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJOb3QgdmFsaWQgb24gV2luZG93cyIpCiBjbGFzcyBJbnRlclByb2Nlc3NTaWduYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgTUFYX0RVUkFUSU9OID0gMjAgICAjIEVudGlyZSB0ZXN0IHNob3VsZCBsYXN0IGF0IG1vc3QgMjAgc2VjLgogCkBAIC0xMzksMjEgKzEzOSwxOSBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJwYXVzZSByZXR1cm5lZCBvZiBpdHMgb3duIGFjY29yZCwgYW5kIHRoZSBzaWduYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIiBkaWRuJ3QgYXJyaXZlIGFmdGVyIGFub3RoZXIgc2Vjb25kLiIpCiAKKyAgICAjIElzc3VlIDM4NjQuIFVua25vd24gaWYgdGhpcyBhZmZlY3RzIGVhcmxpZXIgdmVyc2lvbnMgb2YgZnJlZWJzZCBhbHNvLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtPT0nZnJlZWJzZDYnLAorICAgICAgICAnaW50ZXIgcHJvY2VzcyBzaWduYWxzIG5vdCByZWxpYWJsZSAoZG8gbm90IG1peCB3ZWxsIHdpdGggdGhyZWFkaW5nKSAnCisgICAgICAgICdvbiBmcmVlYnNkNicpCiAgICAgZGVmIHRlc3RfbWFpbihzZWxmKToKLSAgICAgICAgIyBJc3N1ZSAzODY0LCB1bmtub3duIGlmIHRoaXMgYWZmZWN0cyBlYXJsaWVyIHZlcnNpb25zIG9mIGZyZWVic2QgYWxzbwotICAgICAgICBpZiBzeXMucGxhdGZvcm09PSdmcmVlYnNkNic6Ci0gICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdza2lwcGluZyAtLSBpbnRlciBwcm9jZXNzIHNpZ25hbHMgbm90ICcKLSAgICAgICAgICAgICAgICAgICAgJ3JlbGlhYmxlIChkbyBub3QgbWl4IHdlbGwgd2l0aCB0aHJlYWRpbmcpIG9uIGZyZWVic2Q2XG4nKQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICMgVGhpcyBmdW5jdGlvbiBzcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHRvIGluc3VsYXRlIHRoZSBtYWluCiAgICAgICAgICMgdGVzdC1ydW5uaW5nIHByb2Nlc3MgZnJvbSBhbGwgdGhlIHNpZ25hbHMuIEl0IHRoZW4KICAgICAgICAgIyBjb21tdW5pY2F0ZXMgd2l0aCB0aGF0IGNoaWxkIHByb2Nlc3Mgb3ZlciBhIHBpcGUgYW5kCiAgICAgICAgICMgcmUtcmFpc2VzIGluZm9ybWF0aW9uIGFib3V0IGFueSBleGNlcHRpb25zIHRoZSBjaGlsZAogICAgICAgICAjIHRocm93cy4gVGhlIHJlYWwgd29yayBoYXBwZW5zIGluIHNlbGYucnVuX3Rlc3QoKS4KICAgICAgICAgb3NfZG9uZV9yLCBvc19kb25lX3cgPSBvcy5waXBlKCkKLSAgICAgICAgd2l0aCBuZXN0ZWQoY2xvc2luZyhvcy5mZG9wZW4ob3NfZG9uZV9yKSksCi0gICAgICAgICAgICAgICAgICAgIGNsb3Npbmcob3MuZmRvcGVuKG9zX2RvbmVfdywgJ3cnKSkpIGFzIChkb25lX3IsIGRvbmVfdyk6CisgICAgICAgIHdpdGggY2xvc2luZyhvcy5mZG9wZW4ob3NfZG9uZV9yKSkgYXMgZG9uZV9yLCBcCisgICAgICAgICAgICAgY2xvc2luZyhvcy5mZG9wZW4ob3NfZG9uZV93LCAndycpKSBhcyBkb25lX3c6CiAgICAgICAgICAgICBjaGlsZCA9IG9zLmZvcmsoKQogICAgICAgICAgICAgaWYgY2hpbGQgPT0gMDoKICAgICAgICAgICAgICAgICAjIEluIHRoZSBjaGlsZCBwcm9jZXNzOyBydW4gdGhlIHRlc3QgYW5kIHJlcG9ydCByZXN1bHRzCkBAIC0xODgsNiArMTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5NQVhfRFVSQVRJT04pCiAKIAorQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIk5vdCB2YWxpZCBvbiBXaW5kb3dzIikKIGNsYXNzIEJhc2ljU2lnbmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0cml2aWFsX3NpZ25hbF9oYW5kbGVyKHNlbGYsICphcmdzKToKICAgICAgICAgcGFzcwpAQCAtMjA0LDEyICsyMDMsMzEgQEAKIAogICAgIGRlZiB0ZXN0X2dldHNpZ25hbChzZWxmKToKICAgICAgICAgaHVwID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzZWxmLnRyaXZpYWxfc2lnbmFsX2hhbmRsZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0hVUCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudHJpdmlhbF9zaWduYWxfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdIVVApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudHJpdmlhbF9zaWduYWxfaGFuZGxlcikKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBodXApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0hVUCksIGh1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdIVVApLCBodXApCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIHNwZWNpZmljIikKK2NsYXNzIFdpbmRvd3NTaWduYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaXNzdWU5MzI0KHNlbGYpOgorICAgICAgICAjIFVwZGF0ZWQgZm9yIGlzc3VlICMxMDAwMywgYWRkaW5nIFNJR0JSRUFLCisgICAgICAgIGhhbmRsZXIgPSBsYW1iZGEgeCwgeTogTm9uZQorICAgICAgICBmb3Igc2lnIGluIChzaWduYWwuU0lHQUJSVCwgc2lnbmFsLlNJR0JSRUFLLCBzaWduYWwuU0lHRlBFLAorICAgICAgICAgICAgICAgICAgICBzaWduYWwuU0lHSUxMLCBzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHU0VHViwKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLlNJR1RFUk0pOgorICAgICAgICAgICAgIyBTZXQgYW5kIHRoZW4gcmVzZXQgYSBoYW5kbGVyIGZvciBzaWduYWxzIHRoYXQgd29yayBvbiB3aW5kb3dzCisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZywgc2lnbmFsLnNpZ25hbChzaWcsIGhhbmRsZXIpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKC0xLCBoYW5kbGVyKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKDcsIGhhbmRsZXIpCisKKworQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIk5vdCB2YWxpZCBvbiBXaW5kb3dzIikKIGNsYXNzIFdha2V1cFNpZ25hbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBUSU1FT1VUX0ZVTEwgPSAxMAogICAgIFRJTUVPVVRfSEFMRiA9IDUKQEAgLTIyMywxMCArMjQxLDEwIEBACiAgICAgICAgICMgYmVmb3JlIHNlbGVjdCBpcyBjYWxsZWQKICAgICAgICAgdGltZS5zbGVlcChzZWxmLlRJTUVPVVRfRlVMTCkKICAgICAgICAgbWlkX3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLmFzc2VydF8obWlkX3RpbWUgLSBiZWZvcmVfdGltZSA8IHNlbGYuVElNRU9VVF9IQUxGKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWlkX3RpbWUgLSBiZWZvcmVfdGltZSA8IHNlbGYuVElNRU9VVF9IQUxGKQogICAgICAgICBzZWxlY3Quc2VsZWN0KFtzZWxmLnJlYWRdLCBbXSwgW10sIHNlbGYuVElNRU9VVF9GVUxMKQogICAgICAgICBhZnRlcl90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGFmdGVyX3RpbWUgLSBtaWRfdGltZSA8IHNlbGYuVElNRU9VVF9IQUxGKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWZ0ZXJfdGltZSAtIG1pZF90aW1lIDwgc2VsZi5USU1FT1VUX0hBTEYpCiAKICAgICBkZWYgdGVzdF93YWtldXBfZmRfZHVyaW5nKHNlbGYpOgogICAgICAgICBpbXBvcnQgc2VsZWN0CkBAIC0yMzcsNyArMjU1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZWN0LmVycm9yLCBzZWxlY3Quc2VsZWN0LAogICAgICAgICAgICAgW3NlbGYucmVhZF0sIFtdLCBbXSwgc2VsZi5USU1FT1VUX0ZVTEwpCiAgICAgICAgIGFmdGVyX3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLmFzc2VydF8oYWZ0ZXJfdGltZSAtIGJlZm9yZV90aW1lIDwgc2VsZi5USU1FT1VUX0hBTEYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhZnRlcl90aW1lIC0gYmVmb3JlX3RpbWUgPCBzZWxmLlRJTUVPVVRfSEFMRikKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgaW1wb3J0IGZjbnRsCkBAIC0yNTUsMzMgKzI3MywxOCBAQAogICAgICAgICBvcy5jbG9zZShzZWxmLndyaXRlKQogICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBzZWxmLmFscm0pCiAKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJOb3QgdmFsaWQgb24gV2luZG93cyIpCiBjbGFzcyBTaWdpbnRlcnJ1cHRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBzaWdudW0gPSBzaWduYWwuU0lHVVNSMQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJJbnN0YWxsIGEgbm8tb3Agc2lnbmFsIGhhbmRsZXIgdGhhdCBjYW4gYmUgc2V0IHRvIGFsbG93CiAgICAgICAgIGludGVycnVwdHMgb3Igbm90LCBhbmQgYXJyYW5nZSBmb3IgdGhlIG9yaWdpbmFsIHNpZ25hbCBoYW5kbGVyIHRvIGJlCiAgICAgICAgIHJlLWluc3RhbGxlZCB3aGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fY2xlYW51cHMgPSBbXQorICAgICAgICBzZWxmLnNpZ251bSA9IHNpZ25hbC5TSUdVU1IxCiAgICAgICAgIG9sZGhhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNlbGYuc2lnbnVtLCBsYW1iZGEgeCx5OiBOb25lKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoc2lnbmFsLnNpZ25hbCwgc2VsZi5zaWdudW0sIG9sZGhhbmRsZXIpCiAKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgIiIiUnVuIGFueSBjbGVhbnVwIGZ1bmN0aW9ucyB3aGljaCBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGZvciAoZiwgYSkgaW4gc2VsZi5fY2xlYW51cHM6Ci0gICAgICAgICAgICBmKCphKQotCi0KLSAgICBkZWYgYWRkQ2xlYW51cChzZWxmLCBmLCAqYSk6Ci0gICAgICAgICIiIlJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QgbWV0aG9kCi0gICAgICAgIHJ1bi4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2NsZWFudXBzLmFwcGVuZCgoZiwgYSkpCi0KLQogICAgIGRlZiByZWFkcGlwZV9pbnRlcnJ1cHRlZChzZWxmKToKICAgICAgICAgIiIiUGVyZm9ybSBhIHJlYWQgZHVyaW5nIHdoaWNoIGEgc2lnbmFsIHdpbGwgYXJyaXZlLiAgUmV0dXJuIFRydWUgaWYgdGhlCiAgICAgICAgIHJlYWQgaXMgaW50ZXJydXB0ZWQgYnkgdGhlIHNpZ25hbCBhbmQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gIFJldHVybiBGYWxzZQpAQCAtMzcyLDcgKzM3NSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaSkKIAogCi0KK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJOb3QgdmFsaWQgb24gV2luZG93cyIpCiBjbGFzcyBJdGltZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuaG5kbF9jYWxsZWQgPSBGYWxzZQpAQCAtNDM0LDEzICs0MzcsMTAgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaG5kbF9jYWxsZWQsIFRydWUpCiAKKyAgICAjIElzc3VlIDM4NjQuIFVua25vd24gaWYgdGhpcyBhZmZlY3RzIGVhcmxpZXIgdmVyc2lvbnMgb2YgZnJlZWJzZCBhbHNvLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluICgnZnJlZWJzZDYnLCAnbmV0YnNkNScpLAorICAgICAgICAnaXRpbWVyIG5vdCByZWxpYWJsZSAoZG9lcyBub3QgbWl4IHdlbGwgd2l0aCB0aHJlYWRpbmcpIG9uIHNvbWUgQlNEcy4nKQogICAgIGRlZiB0ZXN0X2l0aW1lcl92aXJ0dWFsKHNlbGYpOgotICAgICAgICAjIElzc3VlIDM4NjQsIHVua25vd24gaWYgdGhpcyBhZmZlY3RzIGVhcmxpZXIgdmVyc2lvbnMgb2YgZnJlZWJzZCBhbHNvCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybT09J2ZyZWVic2Q2JzoKLSAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ3NraXBwaW5nIC0tIGl0aW1lciBub3QgcmVsaWFibGUgKGRvZXMgbm90ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaXggd2VsbCB3aXRoIHRocmVhZGluZykgb24gZnJlZWJzZDZcbicpCi0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5pdGltZXIgPSBzaWduYWwuSVRJTUVSX1ZJUlRVQUwKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVlRBTFJNLCBzZWxmLnNpZ192dGFscm0pCiAgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2VsZi5pdGltZXIsIDAuMywgMC4yKQpAQCAtNDUyLDIyICs0NTIsMTggQEAKICAgICAgICAgICAgIGlmIHNpZ25hbC5nZXRpdGltZXIoc2VsZi5pdGltZXIpID09ICgwLjAsIDAuMCk6CiAgICAgICAgICAgICAgICAgYnJlYWsgIyBzaWdfdnRhbHJtIGhhbmRsZXIgc3RvcHBlZCB0aGlzIGl0aW1lcgogICAgICAgICBlbHNlOiAjIElzc3VlIDg0MjQKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInRlc3RfaXRpbWVyX3ZpcnR1YWw6IHRpbWVvdXQ6IGxpa2VseSBjYXVzZTogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFjaGluZSB0b28gc2xvdyBvciBsb2FkIHRvbyBoaWdoLlxuIikKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGltZW91dDogbGlrZWx5IGNhdXNlOiBtYWNoaW5lIHRvbyBzbG93IG9yIGxvYWQgdG9vICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImhpZ2giKQogCiAgICAgICAgICMgdmlydHVhbCBpdGltZXIgc2hvdWxkIGJlICgwLjAsIDAuMCkgbm93Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNpZ25hbC5nZXRpdGltZXIoc2VsZi5pdGltZXIpLCAoMC4wLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRpdGltZXIoc2VsZi5pdGltZXIpLCAoMC4wLCAwLjApKQogICAgICAgICAjIGFuZCB0aGUgaGFuZGxlciBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmhuZGxfY2FsbGVkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaG5kbF9jYWxsZWQsIFRydWUpCiAKKyAgICAjIElzc3VlIDM4NjQuIFVua25vd24gaWYgdGhpcyBhZmZlY3RzIGVhcmxpZXIgdmVyc2lvbnMgb2YgZnJlZWJzZCBhbHNvLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtPT0nZnJlZWJzZDYnLAorICAgICAgICAnaXRpbWVyIG5vdCByZWxpYWJsZSAoZG9lcyBub3QgbWl4IHdlbGwgd2l0aCB0aHJlYWRpbmcpIG9uIGZyZWVic2Q2JykKICAgICBkZWYgdGVzdF9pdGltZXJfcHJvZihzZWxmKToKLSAgICAgICAgIyBJc3N1ZSAzODY0LCB1bmtub3duIGlmIHRoaXMgYWZmZWN0cyBlYXJsaWVyIHZlcnNpb25zIG9mIGZyZWVic2QgYWxzbwotICAgICAgICBpZiBzeXMucGxhdGZvcm09PSdmcmVlYnNkNic6Ci0gICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdza2lwcGluZyAtLSBpdGltZXIgbm90IHJlbGlhYmxlIChkb2VzIG5vdCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWl4IHdlbGwgd2l0aCB0aHJlYWRpbmcpIG9uIGZyZWVic2Q2XG4nKQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuaXRpbWVyID0gc2lnbmFsLklUSU1FUl9QUk9GCiAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1BST0YsIHNlbGYuc2lnX3Byb2YpCiAgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2VsZi5pdGltZXIsIDAuMiwgMC4yKQpAQCAtNDc5LDE4ICs0NzUsMTggQEAKICAgICAgICAgICAgIGlmIHNpZ25hbC5nZXRpdGltZXIoc2VsZi5pdGltZXIpID09ICgwLjAsIDAuMCk6CiAgICAgICAgICAgICAgICAgYnJlYWsgIyBzaWdfcHJvZiBoYW5kbGVyIHN0b3BwZWQgdGhpcyBpdGltZXIKICAgICAgICAgZWxzZTogIyBJc3N1ZSA4NDI0Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJ0ZXN0X2l0aW1lcl9wcm9mOiB0aW1lb3V0OiBsaWtlbHkgY2F1c2U6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hY2hpbmUgdG9vIHNsb3cgb3IgbG9hZCB0b28gaGlnaC5cbiIpCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRpbWVvdXQ6IGxpa2VseSBjYXVzZTogbWFjaGluZSB0b28gc2xvdyBvciBsb2FkIHRvbyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJoaWdoIikKIAogICAgICAgICAjIHByb2ZpbGluZyBpdGltZXIgc2hvdWxkIGJlICgwLjAsIDAuMCkgbm93Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNpZ25hbC5nZXRpdGltZXIoc2VsZi5pdGltZXIpLCAoMC4wLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRpdGltZXIoc2VsZi5pdGltZXIpLCAoMC4wLCAwLjApKQogICAgICAgICAjIGFuZCB0aGUgaGFuZGxlciBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaG5kbF9jYWxsZWQsIFRydWUpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEJhc2ljU2lnbmFsVGVzdHMsIEludGVyUHJvY2Vzc1NpZ25hbFRlc3RzLAotICAgICAgICBXYWtldXBTaWduYWxUZXN0cywgU2lnaW50ZXJydXB0VGVzdCwgSXRpbWVyVGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdha2V1cFNpZ25hbFRlc3RzLCBTaWdpbnRlcnJ1cHRUZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRpbWVyVGVzdCwgV2luZG93c1NpZ25hbFRlc3RzKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NpdGUucHkgYi9MaWIvdGVzdC90ZXN0X3NpdGUucHkKaW5kZXggNGEwNTE5Ni4uMTk4OGVmMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQpAQCAtNSwxOSArNSwyNCBAQAogCiAiIiIKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdCwgVEVTVEZOLCBFbnZpcm9ubWVudFZhckd1YXJkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgRW52aXJvbm1lbnRWYXJHdWFyZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfb3V0cHV0CiBpbXBvcnQgX19idWlsdGluX18KIGltcG9ydCBvcwogaW1wb3J0IHN5cworaW1wb3J0IHJlCiBpbXBvcnQgZW5jb2RpbmdzCiBpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5c2NvbmZpZworZnJvbSBjb3B5IGltcG9ydCBjb3B5CisKICMgTmVlZCB0byBtYWtlIHN1cmUgdG8gbm90IGltcG9ydCAnc2l0ZScgaWYgc29tZW9uZSBzcGVjaWZpZWQgYGAtU2BgIGF0IHRoZQogIyBjb21tYW5kLWxpbmUuICBEZXRlY3QgdGhpcyBieSBqdXN0IG1ha2luZyBzdXJlICdzaXRlJyBoYXMgbm90IGJlZW4gaW1wb3J0ZWQKICMgYWxyZWFkeS4KIGlmICJzaXRlIiBpbiBzeXMubW9kdWxlczoKICAgICBpbXBvcnQgc2l0ZQogZWxzZToKLSAgICByYWlzZSBUZXN0U2tpcHBlZCgiaW1wb3J0YXRpb24gb2Ygc2l0ZS5weSBzdXBwcmVzc2VkIikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiaW1wb3J0YXRpb24gb2Ygc2l0ZS5weSBzdXBwcmVzc2VkIikKIAogaWYgbm90IG9zLnBhdGguaXNkaXIoc2l0ZS5VU0VSX1NJVEUpOgogICAgICMgbmVlZCB0byBhZGQgdXNlciBzaXRlIGRpcmVjdG9yeSBmb3IgdGVzdHMKQEAgLTM1LDEwICs0MCwxOCBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIiIiU2F2ZSBhIGNvcHkgb2Ygc3lzLnBhdGgiIiIKICAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIHNlbGYub2xkX2Jhc2UgPSBzaXRlLlVTRVJfQkFTRQorICAgICAgICBzZWxmLm9sZF9zaXRlID0gc2l0ZS5VU0VSX1NJVEUKKyAgICAgICAgc2VsZi5vbGRfcHJlZml4ZXMgPSBzaXRlLlBSRUZJWEVTCisgICAgICAgIHNlbGYub2xkX3ZhcnMgPSBjb3B5KHN5c2NvbmZpZy5fQ09ORklHX1ZBUlMpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgICIiIlJlc3RvcmUgc3lzLnBhdGgiIiIKLSAgICAgICAgc3lzLnBhdGggPSBzZWxmLnN5c19wYXRoCisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5zeXNfcGF0aAorICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IHNlbGYub2xkX2Jhc2UKKyAgICAgICAgc2l0ZS5VU0VSX1NJVEUgPSBzZWxmLm9sZF9zaXRlCisgICAgICAgIHNpdGUuUFJFRklYRVMgPSBzZWxmLm9sZF9wcmVmaXhlcworICAgICAgICBzeXNjb25maWcuX0NPTkZJR19WQVJTID0gc2VsZi5vbGRfdmFycwogCiAgICAgZGVmIHRlc3RfbWFrZXBhdGgoc2VsZik6CiAgICAgICAgICMgVGVzdCBtYWtlcGF0aCgpIGhhdmUgYW4gYWJzb2x1dGUgcGF0aCBmb3IgaXRzIGZpcnN0IHJldHVybiB2YWx1ZQpAQCAtNDcsMjYgKzYwLDI2IEBACiAgICAgICAgIHBhdGhfcGFydHMgPSAoIkJlZ2lubmluZyIsICJFbmQiKQogICAgICAgICBvcmlnaW5hbF9kaXIgPSBvcy5wYXRoLmpvaW4oKnBhdGhfcGFydHMpCiAgICAgICAgIGFic19kaXIsIG5vcm1fZGlyID0gc2l0ZS5tYWtlcGF0aCgqcGF0aF9wYXJ0cykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwob3MucGF0aC5hYnNwYXRoKG9yaWdpbmFsX2RpciksIGFic19kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5hYnNwYXRoKG9yaWdpbmFsX2RpciksIGFic19kaXIpCiAgICAgICAgIGlmIG9yaWdpbmFsX2RpciA9PSBvcy5wYXRoLm5vcm1jYXNlKG9yaWdpbmFsX2Rpcik6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhYnNfZGlyLCBub3JtX2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzX2Rpciwgbm9ybV9kaXIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChvcy5wYXRoLm5vcm1jYXNlKGFic19kaXIpLCBub3JtX2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5ub3JtY2FzZShhYnNfZGlyKSwgbm9ybV9kaXIpCiAKICAgICBkZWYgdGVzdF9pbml0X3BhdGhpbmZvKHNlbGYpOgogICAgICAgICBkaXJfc2V0ID0gc2l0ZS5faW5pdF9wYXRoaW5mbygpCiAgICAgICAgIGZvciBlbnRyeSBpbiBbc2l0ZS5tYWtlcGF0aChwYXRoKVsxXSBmb3IgcGF0aCBpbiBzeXMucGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGF0aCBhbmQgb3MucGF0aC5pc2RpcihwYXRoKV06Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZW50cnkgaW4gZGlyX3NldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgZnJvbSBzeXMucGF0aCBub3QgZm91bmQgaW4gc2V0IHJldHVybmVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgX2luaXRfcGF0aGluZm8oKTogJXMiICUgKGVudHJ5LCBkaXJfc2V0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZW50cnksIGRpcl9zZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBmcm9tIHN5cy5wYXRoIG5vdCBmb3VuZCBpbiBzZXQgcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgX2luaXRfcGF0aGluZm8oKTogJXMiICUgKGVudHJ5LCBkaXJfc2V0KSkKIAogICAgIGRlZiBwdGhfZmlsZV90ZXN0cyhzZWxmLCBwdGhfZmlsZSk6CiAgICAgICAgICIiIkNvbnRhaW4gY29tbW9uIGNvZGUgZm9yIHRlc3RpbmcgcmVzdWx0cyBvZiByZWFkaW5nIGEgLnB0aCBmaWxlIiIiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhwdGhfZmlsZS5pbXBvcnRlZCBpbiBzeXMubW9kdWxlcywKLSAgICAgICAgICAgICAgICAiJXMgbm90IGluIHN5cy5wYXRoIiAlIHB0aF9maWxlLmltcG9ydGVkKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2l0ZS5tYWtlcGF0aChwdGhfZmlsZS5nb29kX2Rpcl9wYXRoKVswXSBpbiBzeXMucGF0aCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCBvcy5wYXRoLmV4aXN0cyhwdGhfZmlsZS5iYWRfZGlyX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydEluKHB0aF9maWxlLmltcG9ydGVkLCBzeXMubW9kdWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAiJXMgbm90IGluIHN5cy5tb2R1bGVzIiAlIHB0aF9maWxlLmltcG9ydGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKHNpdGUubWFrZXBhdGgocHRoX2ZpbGUuZ29vZF9kaXJfcGF0aClbMF0sIHN5cy5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHB0aF9maWxlLmJhZF9kaXJfcGF0aCkpCiAKICAgICBkZWYgdGVzdF9hZGRwYWNrYWdlKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBhZGRwYWNrYWdlKCkgaW1wb3J0cyBpZiB0aGUgbGluZSBzdGFydHMgd2l0aCAnaW1wb3J0JywKQEAgLTgzLDYgKzk2LDU4IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBwdGhfZmlsZS5jbGVhbnVwKCkKIAorICAgIGRlZiBtYWtlX3B0aChzZWxmLCBjb250ZW50cywgcHRoX2Rpcj0nLicsIHB0aF9uYW1lPVRFU1RGTik6CisgICAgICAgICMgQ3JlYXRlIGEgLnB0aCBmaWxlIGFuZCByZXR1cm4gaXRzIChhYnNwYXRoLCBiYXNlbmFtZSkuCisgICAgICAgIHB0aF9kaXIgPSBvcy5wYXRoLmFic3BhdGgocHRoX2RpcikKKyAgICAgICAgcHRoX2Jhc2VuYW1lID0gcHRoX25hbWUgKyAnLnB0aCcKKyAgICAgICAgcHRoX2ZuID0gb3MucGF0aC5qb2luKHB0aF9kaXIsIHB0aF9iYXNlbmFtZSkKKyAgICAgICAgcHRoX2ZpbGUgPSBvcGVuKHB0aF9mbiwgJ3cnKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBvcy5yZW1vdmUocHRoX2ZuKSkKKyAgICAgICAgcHRoX2ZpbGUud3JpdGUoY29udGVudHMpCisgICAgICAgIHB0aF9maWxlLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHB0aF9kaXIsIHB0aF9iYXNlbmFtZQorCisgICAgZGVmIHRlc3RfYWRkcGFja2FnZV9pbXBvcnRfYmFkX3N5bnRheChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMDY0MgorICAgICAgICBwdGhfZGlyLCBwdGhfZm4gPSBzZWxmLm1ha2VfcHRoKCJpbXBvcnQgYmFkKXN5bnRheFxuIikKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIGVycl9vdXQ6CisgICAgICAgICAgICBzaXRlLmFkZHBhY2thZ2UocHRoX2RpciwgcHRoX2ZuLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgImxpbmUgMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICByZS5lc2NhcGUob3MucGF0aC5qb2luKHB0aF9kaXIsIHB0aF9mbikpKQorICAgICAgICAjIFhYWDogdGhlIHByZXZpb3VzIHR3byBzaG91bGQgYmUgaW5kZXBlbmRlbnQgY2hlY2tzIHNvIHRoYXQgdGhlCisgICAgICAgICMgb3JkZXIgZG9lc24ndCBtYXR0ZXIuICBUaGUgbmV4dCB0aHJlZSBjb3VsZCBiZSBhIHNpbmdsZSBjaGVjaworICAgICAgICAjIGJ1dCBteSByZWdleCBmb28gaXNuJ3QgZ29vZCBlbm91Z2ggdG8gd3JpdGUgaXQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdUcmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCByJ2ltcG9ydCBiYWRcKXN5bnRheCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdTeW50YXhFcnJvcicpCisKKyAgICBkZWYgdGVzdF9hZGRwYWNrYWdlX2ltcG9ydF9iYWRfZXhlYyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMDY0MgorICAgICAgICBwdGhfZGlyLCBwdGhfZm4gPSBzZWxmLm1ha2VfcHRoKCJyYW5kb21wYXRoXG5pbXBvcnQgbm9zdWNobW9kdWxlXG4iKQorICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgZXJyX291dDoKKyAgICAgICAgICAgIHNpdGUuYWRkcGFja2FnZShwdGhfZGlyLCBwdGhfZm4sIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAibGluZSAyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIHJlLmVzY2FwZShvcy5wYXRoLmpvaW4ocHRoX2RpciwgcHRoX2ZuKSkpCisgICAgICAgICMgWFhYOiBkaXR0byBwcmV2aW91cyBYWFggY29tbWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdJbXBvcnRFcnJvcicpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBkb2VzIG5vdCByYWlzZSBhbiAiCisgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGZvciBmaWxlIHBhdGhzIGNvbnRhaW5pbmcgbnVsbCBjaGFyYWN0ZXJzIikKKyAgICBkZWYgdGVzdF9hZGRwYWNrYWdlX2ltcG9ydF9iYWRfcHRoX2ZpbGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgNTI1OAorICAgICAgICBwdGhfZGlyLCBwdGhfZm4gPSBzZWxmLm1ha2VfcHRoKCJhYmNceDAwZGVmXG4iKQorICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgZXJyX291dDoKKyAgICAgICAgICAgIHNpdGUuYWRkcGFja2FnZShwdGhfZGlyLCBwdGhfZm4sIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAibGluZSAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIHJlLmVzY2FwZShvcy5wYXRoLmpvaW4ocHRoX2RpciwgcHRoX2ZuKSkpCisgICAgICAgICMgWFhYOiBkaXR0byBwcmV2aW91cyBYWFggY29tbWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdUeXBlRXJyb3InKQorCiAgICAgZGVmIHRlc3RfYWRkc2l0ZWRpcihzZWxmKToKICAgICAgICAgIyBTYW1lIHRlc3RzIGZvciB0ZXN0X2FkZHBhY2thZ2Ugc2luY2UgYWRkc2l0ZWRpcigpIGVzc2VudGlhbGx5IGp1c3QKICAgICAgICAgIyBjYWxscyBhZGRwYWNrYWdlKCkgZm9yIGV2ZXJ5IC5wdGggZmlsZSBpbiB0aGUgZGlyZWN0b3J5CkBAIC05OCwxNCArMTYzLDE5IEBACiAKICAgICBkZWYgdGVzdF9zX29wdGlvbihzZWxmKToKICAgICAgICAgdXNlcnNpdGUgPSBzaXRlLlVTRVJfU0lURQotICAgICAgICBzZWxmLmFzc2VydF8odXNlcnNpdGUgaW4gc3lzLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odXNlcnNpdGUsIHN5cy5wYXRoKQogCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCiAgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywKLSAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuZXhpdCglciBpbiBzeXMucGF0aCknICUgdXNlcnNpdGVdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KCVyIGluIHN5cy5wYXRoKScgJSB1c2Vyc2l0ZV0sCisgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxLCAiJXIgaXMgbm90IGluIHN5cy5wYXRoIChzeXMuZXhpdCByZXR1cm5lZCAlcikiCisgICAgICAgICAgICAgICAgJSAodXNlcnNpdGUsIHJjKSkKIAorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICctcycsICctYycsCi0gICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLmV4aXQoJXIgaW4gc3lzLnBhdGgpJyAlIHVzZXJzaXRlXSkKKyAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuZXhpdCglciBpbiBzeXMucGF0aCknICUgdXNlcnNpdGVdLAorICAgICAgICAgICAgZW52PWVudikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKIAogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQpAQCAtMTIyLDYgKzE5Miw2NSBAQAogICAgICAgICAgICAgZW52PWVudikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKIAorICAgIGRlZiB0ZXN0X2dldHVzZXJiYXNlKHNlbGYpOgorICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IE5vbmUKKyAgICAgICAgdXNlcl9iYXNlID0gc2l0ZS5nZXR1c2VyYmFzZSgpCisKKyAgICAgICAgIyB0aGUgY2FsbCBzZXRzIHNpdGUuVVNFUl9CQVNFCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l0ZS5VU0VSX0JBU0UsIHVzZXJfYmFzZSkKKworICAgICAgICAjIGxldCdzIHNldCBQWVRIT05VU0VSQkFTRSBhbmQgc2VlIGlmIGl0IHVzZXMgaXQKKyAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBOb25lCisgICAgICAgIGltcG9ydCBzeXNjb25maWcKKyAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSUyA9IE5vbmUKKworICAgICAgICB3aXRoIEVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnZpcm9uOgorICAgICAgICAgICAgZW52aXJvblsnUFlUSE9OVVNFUkJBU0UnXSA9ICd4b3hvJworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpdGUuZ2V0dXNlcmJhc2UoKS5zdGFydHN3aXRoKCd4b3hvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l0ZS5nZXR1c2VyYmFzZSgpKQorCisgICAgZGVmIHRlc3RfZ2V0dXNlcnNpdGVwYWNrYWdlcyhzZWxmKToKKyAgICAgICAgc2l0ZS5VU0VSX1NJVEUgPSBOb25lCisgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gTm9uZQorICAgICAgICB1c2VyX3NpdGUgPSBzaXRlLmdldHVzZXJzaXRlcGFja2FnZXMoKQorCisgICAgICAgICMgdGhlIGNhbGwgc2V0cyBVU0VSX0JBU0UgKmFuZCogVVNFUl9TSVRFCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l0ZS5VU0VSX1NJVEUsIHVzZXJfc2l0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfc2l0ZS5zdGFydHN3aXRoKHNpdGUuVVNFUl9CQVNFKSwgdXNlcl9zaXRlKQorCisgICAgZGVmIHRlc3RfZ2V0c2l0ZXBhY2thZ2VzKHNlbGYpOgorICAgICAgICBzaXRlLlBSRUZJWEVTID0gWyd4b3hvJ10KKyAgICAgICAgZGlycyA9IHNpdGUuZ2V0c2l0ZXBhY2thZ2VzKCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXJzKSwgMSkKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdMaWInLCAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMF0sIHdhbnRlZCkKKyAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3B5dGhvbicgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpdGUtcGFja2FnZXMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3NpdGUtcHl0aG9uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1sxXSwgd2FudGVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMF0sICd4b3hvJykKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdsaWInLCAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMV0sIHdhbnRlZCkKKworICAgICAgICAjIGxldCdzIHRyeSB0aGUgc3BlY2lmaWMgQXBwbGUgbG9jYXRpb24KKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiBhbmQKKyAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiUFlUSE9ORlJBTUVXT1JLIikpOgorICAgICAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IFsnUHl0aG9uLmZyYW1ld29yayddCisgICAgICAgICAgICBkaXJzID0gc2l0ZS5nZXRzaXRlcGFja2FnZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDQpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ34nLCAnTGlicmFyeScsICdQeXRob24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy52ZXJzaW9uWzozXSwgJ3NpdGUtcGFja2FnZXMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzJdLCBvcy5wYXRoLmV4cGFuZHVzZXIod2FudGVkKSkKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbignL0xpYnJhcnknLCAnUHl0aG9uJywgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXRlLXBhY2thZ2VzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1szXSwgd2FudGVkKQogCiBjbGFzcyBQdGhGaWxlKG9iamVjdCk6CiAgICAgIiIiSGVscGVyIGNsYXNzIGZvciBoYW5kbGluZyB0ZXN0aW5nIG9mIC5wdGggZmlsZXMiIiIKQEAgLTE4Nyw3ICszMTYsNyBAQAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICAiIiJSZXN0b3JlIHN5cy5wYXRoIiIiCi0gICAgICAgIHN5cy5wYXRoID0gc2VsZi5zeXNfcGF0aAorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYuc3lzX3BhdGgKIAogICAgIGRlZiB0ZXN0X2Fic19fZmlsZV9fKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgaW1wb3J0ZWQgbW9kdWxlcyBoYXZlIHRoZWlyIF9fZmlsZV9fIGF0dHJpYnV0ZQpAQCAtMjA5LDcgKzMzOCw3IEBACiAgICAgICAgIHNpdGUucmVtb3ZlZHVwcGF0aHMoKQogICAgICAgICBzZWVuX3BhdGhzID0gc2V0KCkKICAgICAgICAgZm9yIHBhdGggaW4gc3lzLnBhdGg6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MocGF0aCBub3QgaW4gc2Vlbl9wYXRocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocGF0aCwgc2Vlbl9wYXRocykKICAgICAgICAgICAgIHNlZW5fcGF0aHMuYWRkKHBhdGgpCiAKICAgICBkZWYgdGVzdF9hZGRfYnVpbGRfZGlyKHNlbGYpOgpAQCAtMjIwLDE3ICszNDksMTcgQEAKIAogICAgIGRlZiB0ZXN0X3NldHRpbmdfcXVpdChzZWxmKToKICAgICAgICAgIyAncXVpdCcgYW5kICdleGl0JyBzaG91bGQgYmUgaW5qZWN0ZWQgaW50byBfX2J1aWx0aW5fXwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGFzYXR0cihfX2J1aWx0aW5fXywgInF1aXQiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIoX19idWlsdGluX18sICJleGl0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKF9fYnVpbHRpbl9fLCAicXVpdCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfX2J1aWx0aW5fXywgImV4aXQiKSkKIAogICAgIGRlZiB0ZXN0X3NldHRpbmdfY29weXJpZ2h0KHNlbGYpOgogICAgICAgICAjICdjb3B5cmlnaHQnIGFuZCAnY3JlZGl0cycgc2hvdWxkIGJlIGluIF9fYnVpbHRpbl9fCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhoYXNhdHRyKF9fYnVpbHRpbl9fLCAiY29weXJpZ2h0IikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhoYXNhdHRyKF9fYnVpbHRpbl9fLCAiY3JlZGl0cyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfX2J1aWx0aW5fXywgImNvcHlyaWdodCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfX2J1aWx0aW5fXywgImNyZWRpdHMiKSkKIAogICAgIGRlZiB0ZXN0X3NldHRpbmdfaGVscChzZWxmKToKICAgICAgICAgIyAnaGVscCcgc2hvdWxkIGJlIHNldCBpbiBfX2J1aWx0aW5fXwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGFzYXR0cihfX2J1aWx0aW5fXywgImhlbHAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX19idWlsdGluX18sICJoZWxwIikpCiAKICAgICBkZWYgdGVzdF9hbGlhc2luZ19tYmNzKHNlbGYpOgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKQEAgLTI0NCw3ICszNzMsNyBAQAogCiAgICAgZGVmIHRlc3Rfc2V0ZGVmYXVsdGVuY29kaW5nX3JlbW92ZWQoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHN5cy5zZXRkZWZhdWx0ZW5jb2RpbmcgaXMgZ29uZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IGhhc2F0dHIoc3lzLCAic2V0ZGVmYXVsdGVuY29kaW5nIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihzeXMsICJzZXRkZWZhdWx0ZW5jb2RpbmciKSkKIAogICAgIGRlZiB0ZXN0X3NpdGVjdXN0b21pemVfZXhlY3V0ZWQoc2VsZik6CiAgICAgICAgICMgSWYgc2l0ZWN1c3RvbWl6ZSBpcyBhdmFpbGFibGUsIGl0IHNob3VsZCBoYXZlIGJlZW4gaW1wb3J0ZWQuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5IGIvTGliL3Rlc3QvdGVzdF9zbGljZS5weQppbmRleCAyZjY1MzA4Li4zMzA0ZDZiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKQEAgLTcxLDcgKzcxLDcgQEAKIAogICAgICAgICBvYmogPSBBbnlDbGFzcygpCiAgICAgICAgIHMgPSBzbGljZShvYmopCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzLnN0b3AgaXMgb2JqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdG9wIGlzIG9iaikKIAogICAgIGRlZiB0ZXN0X2luZGljZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSAgICAgICAgICAgKS5pbmRpY2VzKDEwKSwgKDAsIDEwLCAgMSkpCkBAIC0xMTUsOSArMTE1LDkgQEAKICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKChpLCBqLCBrKSkKIAogICAgICAgICB4ID0gWCgpCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHhbMToyXSA9IDQyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRtcCwgWygxLCAyLCA0MildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRtcCwgWygxLCAyLCA0MildKQogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgogICAgICAgICBzID0gc2xpY2UoMTAsIDIwLCAzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CmluZGV4IDY0NGNiZjcuLjQyYTEwYmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKQEAgLTEsNyArMSw2IEBACiBpbXBvcnQgYXN5bmNvcmUKIGltcG9ydCBlbWFpbC51dGlscwogaW1wb3J0IHNvY2tldAotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHNtdHBkCiBpbXBvcnQgc210cGxpYgogaW1wb3J0IFN0cmluZ0lPCkBAIC05LDkgKzgsMTQgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgc2VsZWN0CiAKLWZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCitpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCiBIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKIAogZGVmIHNlcnZlcihldnQsIGJ1Ziwgc2Vydik6CkBAIC0zNiwyMCArNDAsMjUgQEAKICAgICAgICAgc2Vydi5jbG9zZSgpCiAgICAgICAgIGV2dC5zZXQoKQogCi1jbGFzcyBHZW5lcmFsVGVzdHMoVGVzdENhc2UpOgorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIEdlbmVyYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKICAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDE1KQogICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKICAgICAgICAgc2VydmFyZ3MgPSAoc2VsZi5ldnQsICIyMjAgSG9sYSBtdW5kb1xuIiwgc2VsZi5zb2NrKQotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIsIGFyZ3M9c2VydmFyZ3MpLnN0YXJ0KCkKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIsIGFyZ3M9c2VydmFyZ3MpCisgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKICAgICAgICAgc2VsZi5ldnQud2FpdCgpCiAgICAgICAgIHNlbGYuZXZ0LmNsZWFyKCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCiAKICAgICBkZWYgdGVzdEJhc2ljMShzZWxmKToKICAgICAgICAgIyBjb25uZWN0cwpAQCAtMTM0LDcgKzE0Myw4IEBACiAjIHRlc3Qgc2VydmVyIHRpbWVzIG91dCwgY2F1c2luZyB0aGUgdGVzdCB0byBmYWlsLgogCiAjIFRlc3QgYmVoYXZpb3Igb2Ygc210cGQuRGVidWdnaW5nU2VydmVyCi1jbGFzcyBEZWJ1Z2dpbmdTZXJ2ZXJUZXN0cyhUZXN0Q2FzZSk6CitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgRGVidWdnaW5nU2VydmVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAjIHRlbXBvcmFyaWx5IHJlcGxhY2Ugc3lzLnN0ZG91dCB0byBjYXB0dXJlIERlYnVnZ2luZ1NlcnZlciBvdXRwdXQKQEAgLTE0Miw2ICsxNTIsNyBAQAogICAgICAgICBzZWxmLm91dHB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub3V0cHV0CiAKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQogICAgICAgICBzZWxmLnNlcnZfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgc2VsZi5jbGllbnRfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgIyBQaWNrIGEgcmFuZG9tIHVudXNlZCBwb3J0IGJ5IHBhc3NpbmcgMCBmb3IgdGhlIHBvcnQgbnVtYmVyCkBAIC0xNDksNyArMTYwLDggQEAKICAgICAgICAgIyBLZWVwIGEgbm90ZSBvZiB3aGF0IHBvcnQgd2FzIGFzc2lnbmVkCiAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQogICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5zZXJ2LCBzZWxmLnNlcnZfZXZ0LCBzZWxmLmNsaWVudF9ldnQpCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWRlYnVnZ2luZ19zZXJ2ZXIsIGFyZ3M9c2Vydl9hcmdzKS5zdGFydCgpCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZGVidWdnaW5nX3NlcnZlciwgYXJncz1zZXJ2X2FyZ3MpCisgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKIAogICAgICAgICAjIHdhaXQgdW50aWwgc2VydmVyIHRocmVhZCBoYXMgYXNzaWduZWQgYSBwb3J0IG51bWJlcgogICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQpAQCAtMTYwLDYgKzE3Miw4IEBACiAgICAgICAgIHNlbGYuY2xpZW50X2V2dC5zZXQoKQogICAgICAgICAjIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdGhyZWFkIHRvIHRlcm1pbmF0ZQogICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQogICAgICAgICAjIHJlc3RvcmUgc3lzLnN0ZG91dAogICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5vbGRfc3Rkb3V0CiAKQEAgLTIyNyw3ICsyNDEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3V0cHV0LmdldHZhbHVlKCksIG1leHBlY3QpCiAKIAotY2xhc3MgTm9uQ29ubmVjdGluZ1Rlc3RzKFRlc3RDYXNlKToKK2NsYXNzIE5vbkNvbm5lY3RpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdE5vdENvbm5lY3RlZChzZWxmKToKICAgICAgICAgIyBUZXN0IHZhcmlvdXMgb3BlcmF0aW9ucyBvbiBhbiB1bmNvbm5lY3RlZCBTTVRQIG9iamVjdCB0aGF0CkBAIC0yNDgsMjQgKzI2MiwyOSBAQAogCiAKICMgdGVzdCByZXNwb25zZSBvZiBjbGllbnQgdG8gYSBub24tc3VjY2Vzc2Z1bCBIRUxPIG1lc3NhZ2UKLWNsYXNzIEJhZEhFTE9TZXJ2ZXJUZXN0cyhUZXN0Q2FzZSk6CitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgQmFkSEVMT1NlcnZlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5vbGRfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICBzZWxmLm91dHB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub3V0cHV0CiAKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQogICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMTUpCiAgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQogICAgICAgICBzZXJ2YXJncyA9IChzZWxmLmV2dCwgIjE5OSBubyBoZWxsbyBmb3IgeW91IVxuIiwgc2VsZi5zb2NrKQotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIsIGFyZ3M9c2VydmFyZ3MpLnN0YXJ0KCkKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIsIGFyZ3M9c2VydmFyZ3MpCisgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKICAgICAgICAgc2VsZi5ldnQud2FpdCgpCiAgICAgICAgIHNlbGYuZXZ0LmNsZWFyKCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCiAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm9sZF9zdGRvdXQKIAogICAgIGRlZiB0ZXN0RmFpbGluZ0hFTE8oc2VsZik6CkBAIC0zNDcsNiArMzY2LDkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucHVzaCgnNTUwIE5vIGFjY2VzcyBmb3IgeW91IScpCiAKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCiAKIGNsYXNzIFNpbVNNVFBTZXJ2ZXIoc210cGQuU01UUFNlcnZlcik6CiAKQEAgLTM2NSwxMiArMzg3LDE3IEBACiAgICAgZGVmIGFkZF9mZWF0dXJlKHNlbGYsIGZlYXR1cmUpOgogICAgICAgICBzZWxmLl9leHRyYV9mZWF0dXJlcy5hcHBlbmQoZmVhdHVyZSkKIAorICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKIAogIyBUZXN0IHZhcmlvdXMgU01UUCAmIEVTTVRQIGNvbW1hbmRzL2JlaGF2aW9ycyB0aGF0IHJlcXVpcmUgYSBzaW11bGF0ZWQgc2VydmVyCiAjIChpLmUuLCBzb21ldGhpbmcgd2l0aCBtb3JlIGZlYXR1cmVzIHRoYW4gRGVidWdnaW5nU2VydmVyKQotY2xhc3MgU01UUFNpbVRlc3RzKFRlc3RDYXNlKToKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBTTVRQU2ltVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgICAgIHNlbGYuc2Vydl9ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICBzZWxmLmNsaWVudF9ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICAjIFBpY2sgYSByYW5kb20gdW51c2VkIHBvcnQgYnkgcGFzc2luZyAwIGZvciB0aGUgcG9ydCBudW1iZXIKQEAgLTM3OCw3ICs0MDUsOCBAQAogICAgICAgICAjIEtlZXAgYSBub3RlIG9mIHdoYXQgcG9ydCB3YXMgYXNzaWduZWQKICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgIHNlcnZfYXJncyA9IChzZWxmLnNlcnYsIHNlbGYuc2Vydl9ldnQsIHNlbGYuY2xpZW50X2V2dCkKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZGVidWdnaW5nX3NlcnZlciwgYXJncz1zZXJ2X2FyZ3MpLnN0YXJ0KCkKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1kZWJ1Z2dpbmdfc2VydmVyLCBhcmdzPXNlcnZfYXJncykKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQogCiAgICAgICAgICMgd2FpdCB1bnRpbCBzZXJ2ZXIgdGhyZWFkIGhhcyBhc3NpZ25lZCBhIHBvcnQgbnVtYmVyCiAgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCkBAIC0zODksNiArNDE3LDggQEAKICAgICAgICAgc2VsZi5jbGllbnRfZXZ0LnNldCgpCiAgICAgICAgICMgd2FpdCBmb3IgdGhlIHNlcnZlciB0aHJlYWQgdG8gdGVybWluYXRlCiAgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCisgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCiAKICAgICBkZWYgdGVzdEJhc2ljKHNlbGYpOgogICAgICAgICAjIHNtb2tlIHRlc3QKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQppbmRleCA1YjJlOTFhLi5mMjUzNDNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5CkBAIC0xMSw5ICsxMSw5IEBACiAgICAgcmVtb3RlUG9ydCA9IDQ2NQogCiAgICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKLSAgICAgICAgI1NpbGVudGx5IHNraXAgdGVzdCBpZiBubyBTU0w7IGluIDIuNyB3ZSB1c2UgU2tpcFRlc3QgaW5zdGVhZC4KLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc210cGxpYiwgJ1NNVFBfU1NMJyk6IHJldHVybgotICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFBfU1NMKHNlbGYudGVzdFNlcnZlciwgc2VsZi5yZW1vdGVQb3J0KQorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2V0X2F0dHJpYnV0ZShzbXRwbGliLCAnU01UUF9TU0wnKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi50ZXN0U2VydmVyKToKKyAgICAgICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUF9TU0woc2VsZi50ZXN0U2VydmVyLCBzZWxmLnJlbW90ZVBvcnQpCiAgICAgICAgIHNlcnZlci5laGxvKCkKICAgICAgICAgc2VydmVyLnF1aXQoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CmluZGV4IDM4NzRhMGYuLmQ0MWJjYTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CkBAIC02LDE1ICs2LDM5IEBACiBpbXBvcnQgZXJybm8KIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzZWxlY3QKLWltcG9ydCB0aHJlYWQsIHRocmVhZGluZwogaW1wb3J0IHRpbWUKIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCBRdWV1ZQogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgYXJyYXkKK2ltcG9ydCBjb250ZXh0bGliCiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiBpbXBvcnQgc2lnbmFsCitpbXBvcnQgbWF0aAorCitkZWYgdHJ5X2FkZHJlc3MoaG9zdCwgcG9ydD0wLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpOgorICAgICIiIlRyeSB0byBiaW5kIGEgc29ja2V0IG9uIHRoZSBnaXZlbiBob3N0OnBvcnQgYW5kIHJldHVybiBUcnVlCisgICAgaWYgdGhhdCBoYXMgYmVlbiBwb3NzaWJsZS4iIiIKKyAgICB0cnk6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrLmJpbmQoKGhvc3QsIHBvcnQpKQorICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBzb2NrZXQuZ2FpZXJyb3IpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCitNU0cgPSBiJ01pY2hhZWwgR2lsZml4IHdhcyBoZXJlXG4nCitTVVBQT1JUU19JUFY2ID0gc29ja2V0Lmhhc19pcHY2IGFuZCB0cnlfYWRkcmVzcygnOjoxJywgZmFtaWx5PXNvY2tldC5BRl9JTkVUNikKKwordHJ5OgorICAgIGltcG9ydCB0aHJlYWQKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkID0gTm9uZQorICAgIHRocmVhZGluZyA9IE5vbmUKIAogSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCiBNU0cgPSAnTWljaGFlbCBHaWxmaXggd2FzIGhlcmVcbicKQEAgLTEyMyw3ICsxNDcsNyBAQAogICAgICAgICBzZWxmLnNlcnZlcl9yZWFkeS53YWl0KCkKICAgICAgICAgc2VsZi5jbGllbnRfcmVhZHkuc2V0KCkKICAgICAgICAgc2VsZi5jbGllbnRTZXRVcCgpCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIGlmIG5vdCBjYWxsYWJsZSh0ZXN0X2Z1bmMpOgogICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdF9mdW5jIG11c3QgYmUgYSBjYWxsYWJsZSBmdW5jdGlvbi4iKQogICAgICAgICB0cnk6CkBAIC0xNjIsNiArMTg2LDExIEBACiAgICAgZGVmIGNsaWVudFNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQogCisgICAgZGVmIGNsaWVudFRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5jbG9zZSgpCisgICAgICAgIHNlbGYuY2xpID0gTm9uZQorICAgICAgICBUaHJlYWRhYmxlVGVzdC5jbGllbnRUZWFyRG93bihzZWxmKQorCiBjbGFzcyBTb2NrZXRDb25uZWN0ZWRUZXN0KFRocmVhZGVkVENQU29ja2V0VGVzdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgpAQCAtMjM4LDExICsyNjcsMTEgQEAKICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5oZXJyb3IKICAgICAgICAgZGVmIHJhaXNlX2dhaWVycm9yKCphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZ2FpZXJyb3IKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKHNvY2tldC5lcnJvciwgcmFpc2VfZXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgcmFpc2VfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgcmFpc2luZyBzb2NrZXQgZXhjZXB0aW9uLiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhzb2NrZXQuZXJyb3IsIHJhaXNlX2hlcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCByYWlzZV9oZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgcmFpc2luZyBzb2NrZXQgZXhjZXB0aW9uLiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhzb2NrZXQuZXJyb3IsIHJhaXNlX2dhaWVycm9yLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHJhaXNlX2dhaWVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHJhaXNpbmcgc29ja2V0IGV4Y2VwdGlvbi4iKQogCiAgICAgZGVmIHRlc3RDcnVjaWFsQ29uc3RhbnRzKHNlbGYpOgpAQCAtMjY0LDcgKzI5Myw3IEBACiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CiAgICAgICAgICAgICAjIFByb2JhYmx5IG5hbWUgbG9va3VwIHdhc24ndCBzZXQgdXAgcmlnaHQ7IHNraXAgdGhpcyB0ZXN0CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5hc3NlcnRfKGlwLmZpbmQoJy4nKSA+PSAwLCAiRXJyb3IgcmVzb2x2aW5nIGhvc3QgdG8gaXAuIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlwLmZpbmQoJy4nKSA+PSAwLCAiRXJyb3IgcmVzb2x2aW5nIGhvc3QgdG8gaXAuIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaG5hbWUsIGFsaWFzZXMsIGlwYWRkcnMgPSBzb2NrZXQuZ2V0aG9zdGJ5YWRkcihpcCkKICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKQEAgLTMyNyw4ICszNTYsMTAgQEAKICAgICAgICAgIyBGaW5kIG9uZSBzZXJ2aWNlIHRoYXQgZXhpc3RzLCB0aGVuIGNoZWNrIGFsbCB0aGUgcmVsYXRlZCBpbnRlcmZhY2VzLgogICAgICAgICAjIEkndmUgb3JkZXJlZCB0aGlzIGJ5IHByb3RvY29scyB0aGF0IGhhdmUgYm90aCBhIHRjcCBhbmQgdWRwCiAgICAgICAgICMgcHJvdG9jb2wsIGF0IGxlYXN0IGZvciBtb2Rlcm4gTGludXhlcy4KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnbGludXgyJywgJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJlZWJzZDcnLCAnZnJlZWJzZDgnLCAnZGFyd2luJyk6CisgICAgICAgIGlmIChzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKSBvcgorICAgICAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2ZyZWVic2QnKSBvcgorICAgICAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ25ldGJzZCcpIG9yCisgICAgICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicpOgogICAgICAgICAgICAgIyBhdm9pZCB0aGUgJ2VjaG8nIHNlcnZpY2Ugb24gdGhpcyBwbGF0Zm9ybSwgYXMgdGhlcmUgaXMgYW4KICAgICAgICAgICAgICMgYXNzdW1wdGlvbiBicmVha2luZyBub24tc3RhbmRhcmQgcG9ydC9wcm90b2NvbCBlbnRyeQogICAgICAgICAgICAgc2VydmljZXMgPSAoJ2RheXRpbWUnLCAncW90ZCcsICdkb21haW4nKQpAQCAtMzU3LDYgKzM4OCw5IEBACiAgICAgICAgIGVxKHNvY2tldC5nZXRzZXJ2Ynlwb3J0KHBvcnQsICd0Y3AnKSwgc2VydmljZSkKICAgICAgICAgaWYgdWRwcG9ydCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGVxKHNvY2tldC5nZXRzZXJ2Ynlwb3J0KHVkcHBvcnQsICd1ZHAnKSwgc2VydmljZSkKKyAgICAgICAgIyBNYWtlIHN1cmUgZ2V0c2VydmJ5cG9ydCBkb2VzIG5vdCBhY2NlcHQgb3V0IG9mIHJhbmdlIHBvcnRzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrZXQuZ2V0c2VydmJ5cG9ydCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2tldC5nZXRzZXJ2Ynlwb3J0LCA2NTUzNikKIAogICAgIGRlZiB0ZXN0RGVmYXVsdFRpbWVvdXQoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBkZWZhdWx0IHRpbWVvdXQKQEAgLTM5MSw4ICs0MjUsOCBAQAogICAgICAgICAgICAgcmV0dXJuICAjIE5vIGluZXRfYXRvbiwgbm90aGluZyB0byBjaGVjawogICAgICAgICAjIFRlc3QgdGhhdCBpc3N1ZTEwMDgwODYgYW5kIGlzc3VlNzY3MTUwIGFyZSBmaXhlZC4KICAgICAgICAgIyBJdCBtdXN0IHJldHVybiA0IGJ5dGVzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXHgwMCcqNCwgc29ja2V0LmluZXRfYXRvbignMC4wLjAuMCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXHhmZicqNCwgc29ja2V0LmluZXRfYXRvbignMjU1LjI1NS4yNTUuMjU1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDAnKjQsIHNvY2tldC5pbmV0X2F0b24oJzAuMC4wLjAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhmZicqNCwgc29ja2V0LmluZXRfYXRvbignMjU1LjI1NS4yNTUuMjU1JykpCiAKICAgICBkZWYgdGVzdElQdjR0b1N0cmluZyhzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAnaW5ldF9wdG9uJyk6CkBAIC00MDAsMTYgKzQzNCwxNiBAQAogICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgaW5ldF9hdG9uIGFzIGYsIGluZXRfcHRvbiwgQUZfSU5FVAogICAgICAgICBnID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVULCBhKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdceDAwXHgwMFx4MDBceDAwJywgZignMC4wLjAuMCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXHhmZlx4MDBceGZmXHgwMCcsIGYoJzI1NS4wLjI1NS4wJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdceGFhXHhhYVx4YWFceGFhJywgZignMTcwLjE3MC4xNzAuMTcwJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdceDAxXHgwMlx4MDNceDA0JywgZignMS4yLjMuNCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXHhmZlx4ZmZceGZmXHhmZicsIGYoJzI1NS4yNTUuMjU1LjI1NScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwXHgwMFx4MDBceDAwJywgZignMC4wLjAuMCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGZmXHgwMFx4ZmZceDAwJywgZignMjU1LjAuMjU1LjAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhhYVx4YWFceGFhXHhhYScsIGYoJzE3MC4xNzAuMTcwLjE3MCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAxXHgwMlx4MDNceDA0JywgZignMS4yLjMuNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGZmXHhmZlx4ZmZceGZmJywgZignMjU1LjI1NS4yNTUuMjU1JykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1x4MDBceDAwXHgwMFx4MDAnLCBnKCcwLjAuMC4wJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdceGZmXHgwMFx4ZmZceDAwJywgZygnMjU1LjAuMjU1LjAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1x4YWFceGFhXHhhYVx4YWEnLCBnKCcxNzAuMTcwLjE3MC4xNzAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1x4ZmZceGZmXHhmZlx4ZmYnLCBnKCcyNTUuMjU1LjI1NS4yNTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMFx4MDBceDAwXHgwMCcsIGcoJzAuMC4wLjAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhmZlx4MDBceGZmXHgwMCcsIGcoJzI1NS4wLjI1NS4wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4YWFceGFhXHhhYVx4YWEnLCBnKCcxNzAuMTcwLjE3MC4xNzAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhmZlx4ZmZceGZmXHhmZicsIGcoJzI1NS4yNTUuMjU1LjI1NScpKQogCiAgICAgZGVmIHRlc3RJUHY2dG9TdHJpbmcoc2VsZik6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvY2tldCwgJ2luZXRfcHRvbicpOgpAQCAtNDIyLDEwICs0NTYsMTAgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVUNiwgYSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXHgwMCcgKiAxNiwgZignOjonKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1x4MDAnICogMTYsIGYoJzA6OjAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1x4MDBceDAxJyArICdceDAwJyAqIDE0LCBmKCcxOjonKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDAnICogMTYsIGYoJzo6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDAnICogMTYsIGYoJzA6OjAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMFx4MDEnICsgJ1x4MDAnICogMTQsIGYoJzE6OicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgJ1x4NDVceGVmXHg3Nlx4Y2JceDAwXHgxYVx4NTZceGVmXHhhZlx4ZWJceDBiXHhhY1x4MTlceDI0XHhhZVx4YWUnLAogICAgICAgICAgICAgZignNDVlZjo3NmNiOjFhOjU2ZWY6YWZlYjpiYWM6MTkyNDphZWFlJykKICAgICAgICAgKQpAQCAtNDM2LDE0ICs0NzAsMTQgQEAKICAgICAgICAgZnJvbSBzb2NrZXQgaW1wb3J0IGluZXRfbnRvYSBhcyBmLCBpbmV0X250b3AsIEFGX0lORVQKICAgICAgICAgZyA9IGxhbWJkYSBhOiBpbmV0X250b3AoQUZfSU5FVCwgYSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnMS4wLjEuMCcsIGYoJ1x4MDFceDAwXHgwMVx4MDAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzE3MC44NS4xNzAuODUnLCBmKCdceGFhXHg1NVx4YWFceDU1JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcyNTUuMjU1LjI1NS4yNTUnLCBmKCdceGZmXHhmZlx4ZmZceGZmJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcxLjIuMy40JywgZignXHgwMVx4MDJceDAzXHgwNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjAuMS4wJywgZignXHgwMVx4MDBceDAxXHgwMCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxNzAuODUuMTcwLjg1JywgZignXHhhYVx4NTVceGFhXHg1NScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyNTUuMjU1LjI1NS4yNTUnLCBmKCdceGZmXHhmZlx4ZmZceGZmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEuMi4zLjQnLCBmKCdceDAxXHgwMlx4MDNceDA0JykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzEuMC4xLjAnLCBnKCdceDAxXHgwMFx4MDFceDAwJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcxNzAuODUuMTcwLjg1JywgZygnXHhhYVx4NTVceGFhXHg1NScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnMjU1LjI1NS4yNTUuMjU1JywgZygnXHhmZlx4ZmZceGZmXHhmZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjAuMS4wJywgZygnXHgwMVx4MDBceDAxXHgwMCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxNzAuODUuMTcwLjg1JywgZygnXHhhYVx4NTVceGFhXHg1NScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyNTUuMjU1LjI1NS4yNTUnLCBnKCdceGZmXHhmZlx4ZmZceGZmJykpCiAKICAgICBkZWYgdGVzdFN0cmluZ1RvSVB2NihzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAnaW5ldF9udG9wJyk6CkBAIC00NTYsNDcgKzQ5MCw2MiBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGYgPSBsYW1iZGEgYTogaW5ldF9udG9wKEFGX0lORVQ2LCBhKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCc6OicsIGYoJ1x4MDAnICogMTYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnOjoxJywgZignXHgwMCcgKiAxNSArICdceDAxJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc6OicsIGYoJ1x4MDAnICogMTYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc6OjEnLCBmKCdceDAwJyAqIDE1ICsgJ1x4MDEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICdhZWY6YjAxOjUwNjoxMDAxOmZmZmY6OTk5Nzo1NToxNzAnLAogICAgICAgICAgICAgZignXHgwYVx4ZWZceDBiXHgwMVx4MDVceDA2XHgxMFx4MDFceGZmXHhmZlx4OTlceDk3XHgwMFx4NTVceDAxXHg3MCcpCiAgICAgICAgICkKIAogICAgICMgWFhYIFRoZSBmb2xsb3dpbmcgZG9uJ3QgdGVzdCBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25hbGl0eS4uLgogCi0gICAgZGVmIHRlc3RTb2NrTmFtZShzZWxmKToKLSAgICAgICAgIyBUZXN0aW5nIGdldHNvY2tuYW1lKCkuICBVc2UgYSB0ZW1wb3Jhcnkgc29ja2V0IHRvIGVsaWNpdCBhbiB1bnVzZWQKLSAgICAgICAgIyBlcGhlbWVyYWwgcG9ydCB0aGF0IHdlIGNhbiB1c2UgbGF0ZXIgaW4gdGhlIHRlc3QuCi0gICAgICAgIHRlbXBzb2NrID0gc29ja2V0LnNvY2tldCgpCi0gICAgICAgIHRlbXBzb2NrLmJpbmQoKCIwLjAuMC4wIiwgMCkpCi0gICAgICAgIChob3N0LCBwb3J0KSA9IHRlbXBzb2NrLmdldHNvY2tuYW1lKCkKLSAgICAgICAgdGVtcHNvY2suY2xvc2UoKQotICAgICAgICBkZWwgdGVtcHNvY2sKKyAgICBkZWYgX2dldF91bnVzZWRfcG9ydChzZWxmLCBiaW5kX2FkZHJlc3M9JzAuMC4wLjAnKToKKyAgICAgICAgIiIiVXNlIGEgdGVtcG9yYXJ5IHNvY2tldCB0byBlbGljaXQgYW4gdW51c2VkIGVwaGVtZXJhbCBwb3J0LgogCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBiaW5kX2FkZHJlc3M6IEhvc3RuYW1lIG9yIElQIGFkZHJlc3MgdG8gc2VhcmNoIGZvciBhIHBvcnQgb24uCisKKyAgICAgICAgUmV0dXJuczogQSBtb3N0IGxpa2VseSB0byBiZSB1bnVzZWQgcG9ydC4KKyAgICAgICAgIiIiCisgICAgICAgIHRlbXBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHRlbXBzb2NrLmJpbmQoKGJpbmRfYWRkcmVzcywgMCkpCisgICAgICAgIGhvc3QsIHBvcnQgPSB0ZW1wc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIHRlbXBzb2NrLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHBvcnQKKworICAgIGRlZiB0ZXN0U29ja05hbWUoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBnZXRzb2NrbmFtZSgpCisgICAgICAgIHBvcnQgPSBzZWxmLl9nZXRfdW51c2VkX3BvcnQoKQogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKICAgICAgICAgc29jay5iaW5kKCgiMC4wLjAuMCIsIHBvcnQpKQogICAgICAgICBuYW1lID0gc29jay5nZXRzb2NrbmFtZSgpCiAgICAgICAgICMgWFhYKG5ub3J3aXR6KTogaHR0cDovL3Rpbnl1cmwuY29tL29zNWp6IHNlZW1zIHRvIGluZGljYXRlCiAgICAgICAgICMgaXQgcmVhc29uYWJsZSB0byBnZXQgdGhlIGhvc3QncyBhZGRyIGluIGFkZGl0aW9uIHRvIDAuMC4wLjAuCiAgICAgICAgICMgQXQgbGVhc3QgZm9yIGVDb3MuICBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgUy8zOTAgdG8gcGFzcy4KLSAgICAgICAgbXlfaXBfYWRkciA9IHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0bmFtZSgpKQotICAgICAgICBzZWxmLmFzc2VydF8obmFtZVswXSBpbiAoIjAuMC4wLjAiLCBteV9pcF9hZGRyKSwgJyVzIGludmFsaWQnICUgbmFtZVswXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXlfaXBfYWRkciA9IHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0bmFtZSgpKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgIyBQcm9iYWJseSBuYW1lIGxvb2t1cCB3YXNuJ3Qgc2V0IHVwIHJpZ2h0OyBza2lwIHRoaXMgdGVzdAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZVswXSwgKCIwLjAuMC4wIiwgbXlfaXBfYWRkciksICclcyBpbnZhbGlkJyAlIG5hbWVbMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZVsxXSwgcG9ydCkKIAogICAgIGRlZiB0ZXN0R2V0U29ja09wdChzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGdldHNvY2tvcHQoKQogICAgICAgICAjIFdlIGtub3cgYSBzb2NrZXQgc2hvdWxkIHN0YXJ0IHdpdGhvdXQgcmV1c2U9PTAKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCiAgICAgICAgIHJldXNlID0gc29jay5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSKQotICAgICAgICBzZWxmLmZhaWxJZihyZXVzZSAhPSAwLCAiaW5pdGlhbCBtb2RlIGlzIHJldXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXVzZSAhPSAwLCAiaW5pdGlhbCBtb2RlIGlzIHJldXNlIikKIAogICAgIGRlZiB0ZXN0U2V0U29ja09wdChzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNldHNvY2tvcHQoKQogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQogICAgICAgICByZXVzZSA9IHNvY2suZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUikKLSAgICAgICAgc2VsZi5mYWlsSWYocmV1c2UgPT0gMCwgImZhaWxlZCB0byBzZXQgcmV1c2UgbW9kZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmV1c2UgPT0gMCwgImZhaWxlZCB0byBzZXQgcmV1c2UgbW9kZSIpCiAKICAgICBkZWYgdGVzdFNlbmRBZnRlckNsb3NlKHNlbGYpOgogICAgICAgICAjIHRlc3Rpbmcgc2VuZCgpIGFmdGVyIGNsb3NlKCkgd2l0aCB0aW1lb3V0CkBAIC01MTMsMTUgKzU2MiwxMDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnByb3RvLCAwKQogICAgICAgICBzb2NrLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2dldHNvY2thZGRyYXJnKHNlbGYpOgorICAgICAgICBob3N0ID0gJzAuMC4wLjAnCisgICAgICAgIHBvcnQgPSBzZWxmLl9nZXRfdW51c2VkX3BvcnQoYmluZF9hZGRyZXNzPWhvc3QpCisgICAgICAgIGJpZ19wb3J0ID0gcG9ydCArIDY1NTM2CisgICAgICAgIG5lZ19wb3J0ID0gcG9ydCAtIDY1NTM2CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29jay5iaW5kLCAoaG9zdCwgYmlnX3BvcnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29jay5iaW5kLCAoaG9zdCwgbmVnX3BvcnQpKQorICAgICAgICAgICAgc29jay5iaW5kKChob3N0LCBwb3J0KSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAibnQiLCAiV2luZG93cyBzcGVjaWZpYyIpCiAgICAgZGVmIHRlc3Rfc29ja19pb2N0bChzZWxmKToKLSAgICAgICAgaWYgb3MubmFtZSAhPSAibnQiOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKHNvY2tldC5zb2NrZXQsICdpb2N0bCcpKQotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihzb2NrZXQsICdTSU9fUkNWQUxMJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKHNvY2tldCwgJ1JDVkFMTF9PTicpKQotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihzb2NrZXQsICdSQ1ZBTExfT0ZGJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNvY2tldC5zb2NrZXQsICdpb2N0bCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzb2NrZXQsICdTSU9fUkNWQUxMJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNvY2tldCwgJ1JDVkFMTF9PTicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzb2NrZXQsICdSQ1ZBTExfT0ZGJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNvY2tldCwgJ1NJT19LRUVQQUxJVkVfVkFMUycpKQorICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLmlvY3RsLCAtMSwgTm9uZSkKKyAgICAgICAgcy5pb2N0bChzb2NrZXQuU0lPX0tFRVBBTElWRV9WQUxTLCAoMSwgMTAwLCAxMDApKQorCisgICAgZGVmIHRlc3RHZXRhZGRyaW5mbyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKCdsb2NhbGhvc3QnLCA4MCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5nYWllcnJvciBhcyBlcnI6CisgICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gc29ja2V0LkVBSV9TRVJWSUNFOgorICAgICAgICAgICAgICAgICMgc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjgyNjQ3CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiYnVnZ3kgbGliYyB2ZXJzaW9uIikKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgICMgbGVuIG9mIGV2ZXJ5IHNlcXVlbmNlIGlzIHN1cHBvc2VkIHRvIGJlID09IDUKKyAgICAgICAgZm9yIGluZm8gaW4gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaW5mbyksIDUpCisgICAgICAgICMgaG9zdCBjYW4gYmUgYSBkb21haW4gbmFtZSwgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4KKyAgICAgICAgIyBJUHY0L3Y2IGFkZHJlc3Mgb3IgTm9uZQorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oJ2xvY2FsaG9zdCcsIDgwKQorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oJzEyNy4wLjAuMScsIDgwKQorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oTm9uZSwgODApCisgICAgICAgIGlmIFNVUFBPUlRTX0lQVjY6CisgICAgICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oJzo6MScsIDgwKQorICAgICAgICAjIHBvcnQgY2FuIGJlIGEgc3RyaW5nIHNlcnZpY2UgbmFtZSBzdWNoIGFzICJodHRwIiwgYSBudW1lcmljCisgICAgICAgICMgcG9ydCBudW1iZXIgb3IgTm9uZQorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgImh0dHAiKQorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgODApCisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lKQorICAgICAgICAjIHRlc3QgZmFtaWx5IGFuZCBzb2NrdHlwZSBmaWx0ZXJzCisgICAgICAgIGluZm9zID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIHNvY2tldC5BRl9JTkVUKQorICAgICAgICBmb3IgZmFtaWx5LCBfLCBfLCBfLCBfIGluIGluZm9zOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYW1pbHksIHNvY2tldC5BRl9JTkVUKQorICAgICAgICBpbmZvcyA9IHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCAwLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGZvciBfLCBzb2NrdHlwZSwgXywgXywgXyBpbiBpbmZvczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ja3R5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgIyB0ZXN0IHByb3RvIGFuZCBmbGFncyBhcmd1bWVudHMKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIDAsIDAsIHNvY2tldC5TT0xfVENQKQorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgMCwgMCwgMCwgc29ja2V0LkFJX1BBU1NJVkUpCisgICAgICAgICMgYSBzZXJ2ZXIgd2lsbGluZyB0byBzdXBwb3J0IGJvdGggSVB2NCBhbmQgSVB2NiB3aWxsCisgICAgICAgICMgdXN1YWxseSBkbyB0aGlzCisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhOb25lLCAwLCBzb2NrZXQuQUZfVU5TUEVDLCBzb2NrZXQuU09DS19TVFJFQU0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuQUlfUEFTU0lWRSkKIAogCisgICAgZGVmIGNoZWNrX3NlbmRhbGxfaW50ZXJydXB0ZWQoc2VsZiwgd2l0aF90aW1lb3V0KToKKyAgICAgICAgIyBzb2NrZXRwYWlyKCkgaXMgbm90IHN0cmljbHkgcmVxdWlyZWQsIGJ1dCBpdCBtYWtlcyB0aGluZ3MgZWFzaWVyLgorICAgICAgICBpZiBub3QgaGFzYXR0cihzaWduYWwsICdhbGFybScpIG9yIG5vdCBoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNpZ25hbC5hbGFybSBhbmQgc29ja2V0LnNvY2tldHBhaXIgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCIpCisgICAgICAgICMgT3VyIHNpZ25hbCBoYW5kbGVycyBjbG9iYmVyIHRoZSBDIGVycm5vIGJ5IGNhbGxpbmcgYSBtYXRoIGZ1bmN0aW9uCisgICAgICAgICMgd2l0aCBhbiBpbnZhbGlkIGRvbWFpbiB2YWx1ZS4KKyAgICAgICAgZGVmIG9rX2hhbmRsZXIoKmFyZ3MpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hY29zaCwgMCkKKyAgICAgICAgZGVmIHJhaXNpbmdfaGFuZGxlcigqYXJncyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFjb3NoLCAwKQorICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIGMsIHMgPSBzb2NrZXQuc29ja2V0cGFpcigpCisgICAgICAgIG9sZF9hbGFybSA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHJhaXNpbmdfaGFuZGxlcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgd2l0aF90aW1lb3V0OgorICAgICAgICAgICAgICAgICMgSnVzdCBhYm92ZSB0aGUgb25lIHNlY29uZCBtaW5pbXVtIGZvciBzaWduYWwuYWxhcm0KKyAgICAgICAgICAgICAgICBjLnNldHRpbWVvdXQoMS41KQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAgICAgYy5zZW5kYWxsKGIieCIgKiAoMTAyNCoqMikpCisgICAgICAgICAgICBpZiB3aXRoX3RpbWVvdXQ6CisgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb2tfaGFuZGxlcikKKyAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgYy5zZW5kYWxsLCBiIngiICogKDEwMjQqKjIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb2xkX2FsYXJtKQorICAgICAgICAgICAgYy5jbG9zZSgpCisgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NlbmRhbGxfaW50ZXJydXB0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc2VuZGFsbF9pbnRlcnJ1cHRlZChGYWxzZSkKKworICAgIGRlZiB0ZXN0X3NlbmRhbGxfaW50ZXJydXB0ZWRfd2l0aF90aW1lb3V0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3NlbmRhbGxfaW50ZXJydXB0ZWQoVHJ1ZSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQmFzaWNUQ1BUZXN0KFNvY2tldENvbm5lY3RlZFRlc3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKQEAgLTU4MywxMiArNzI0LDIzIEBACiAgICAgICAgICAgICByZXR1cm4gIyBPbiBXaW5kb3dzLCB0aGlzIGRvZXNuJ3QgZXhpc3QKICAgICAgICAgZmQgPSBzZWxmLmNsaV9jb25uLmZpbGVubygpCiAgICAgICAgIHNvY2sgPSBzb2NrZXQuZnJvbWZkKGZkLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKICAgICAgICAgbXNnID0gc29jay5yZWN2KDEwMjQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCiAKICAgICBkZWYgX3Rlc3RGcm9tRmQoc2VsZik6CiAgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoTVNHKQogCisgICAgZGVmIHRlc3REdXAoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBkdXAoKQorICAgICAgICBzb2NrID0gc2VsZi5jbGlfY29ubi5kdXAoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKKyAgICAgICAgbXNnID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBkZWYgX3Rlc3REdXAoc2VsZik6CisgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoTVNHKQorCiAgICAgZGVmIHRlc3RTaHV0ZG93bihzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNodXRkb3duKCkKICAgICAgICAgbXNnID0gc2VsZi5jbGlfY29ubi5yZWN2KDEwMjQpCkBAIC02MDIsNiArNzU0LDcgQEAKICAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChNU0cpCiAgICAgICAgIHNlbGYuc2Vydl9jb25uLnNodXRkb3duKDIpCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBCYXNpY1VEUFRlc3QoVGhyZWFkZWRVRFBTb2NrZXRUZXN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CkBAIC02MzAsNiArNzgzLDcgQEAKICAgICBkZWYgX3Rlc3RSZWN2RnJvbU5lZ2F0aXZlKHNlbGYpOgogICAgICAgICBzZWxmLmNsaS5zZW5kdG8oTVNHLCAwLCAoSE9TVCwgc2VsZi5wb3J0KSkKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIFRDUENsb3NlclRlc3QoVGhyZWFkZWRUQ1BTb2NrZXRUZXN0KToKIAogICAgIGRlZiB0ZXN0Q2xvc2Uoc2VsZik6CkBAIC02NDUsNiArNzk5LDcgQEAKICAgICAgICAgc2VsZi5jbGkuY29ubmVjdCgoSE9TVCwgc2VsZi5wb3J0KSkKICAgICAgICAgdGltZS5zbGVlcCgxLjApCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBCYXNpY1NvY2tldFBhaXJUZXN0KFNvY2tldFBhaXJUZXN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CkBAIC02NjQsNiArODE5LDcgQEAKICAgICAgICAgbXNnID0gc2VsZi5jbGkucmVjdigxMDI0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgTm9uQmxvY2tpbmdUQ1BUZXN0cyhUaHJlYWRlZFRDUFNvY2tldFRlc3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKQEAgLTY3OCw3ICs4MzQsNyBAQAogICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLmFzc2VydF8oKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIHNldHRpbmcgbm9uLWJsb2NraW5nIG1vZGUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChlbmQgLSBzdGFydCkgPCAxLjAsICJFcnJvciBzZXR0aW5nIG5vbi1ibG9ja2luZyBtb2RlLiIpCiAKICAgICBkZWYgX3Rlc3RTZXRCbG9ja2luZyhzZWxmKToKICAgICAgICAgcGFzcwpAQCAtNjk1LDYgKzg1MSw3IEBACiAgICAgICAgIHJlYWQsIHdyaXRlLCBlcnIgPSBzZWxlY3Quc2VsZWN0KFtzZWxmLnNlcnZdLCBbXSwgW10pCiAgICAgICAgIGlmIHNlbGYuc2VydiBpbiByZWFkOgogICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIHRyeWluZyB0byBkbyBhY2NlcHQgYWZ0ZXIgc2VsZWN0LiIpCiAKQEAgLTcwNSw2ICs4NjIsNyBAQAogICAgIGRlZiB0ZXN0Q29ubmVjdChzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIG5vbi1ibG9ja2luZyBjb25uZWN0CiAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgY29ubi5jbG9zZSgpCiAKICAgICBkZWYgX3Rlc3RDb25uZWN0KHNlbGYpOgogICAgICAgICBzZWxmLmNsaS5zZXR0aW1lb3V0KDEwKQpAQCAtNzIzLDYgKzg4MSw3IEBACiAgICAgICAgIHJlYWQsIHdyaXRlLCBlcnIgPSBzZWxlY3Quc2VsZWN0KFtjb25uXSwgW10sIFtdKQogICAgICAgICBpZiBjb25uIGluIHJlYWQ6CiAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YobGVuKE1TRykpCisgICAgICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIGR1cmluZyBzZWxlY3QgY2FsbCB0byBub24tYmxvY2tpbmcgc29ja2V0LiIpCkBAIC03MzIsNiArODkxLDcgQEAKICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgIHNlbGYuY2xpLnNlbmQoTVNHKQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgRmlsZU9iamVjdENsYXNzVGVzdENhc2UoU29ja2V0Q29ubmVjdGVkVGVzdCk6CiAKICAgICBidWZzaXplID0gLTEgIyBVc2UgZGVmYXVsdCBidWZmZXIgc2l6ZQpAQCAtNzQ1LDcgKzkwNSw3IEBACiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuc2Vydl9maWxlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuc2Vydl9maWxlLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc2Vydl9maWxlLmNsb3NlZCkKICAgICAgICAgc2VsZi5zZXJ2X2ZpbGUgPSBOb25lCiAgICAgICAgIFNvY2tldENvbm5lY3RlZFRlc3QudGVhckRvd24oc2VsZikKIApAQCAtNzU1LDcgKzkxNSw3IEBACiAKICAgICBkZWYgY2xpZW50VGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuY2xpX2ZpbGUuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5jbGlfZmlsZS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNsaV9maWxlLmNsb3NlZCkKICAgICAgICAgc2VsZi5jbGlfZmlsZSA9IE5vbmUKICAgICAgICAgU29ja2V0Q29ubmVjdGVkVGVzdC5jbGllbnRUZWFyRG93bihzZWxmKQogCkBAIC04MzAsMTAgKzk5MCwxMCBAQAogICAgICAgICBzZWxmLmNsaV9maWxlLndyaXRlKCJFbmQgT2YgTGluZSIpCiAKICAgICBkZWYgdGVzdENsb3NlZEF0dHIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgc2VsZi5zZXJ2X2ZpbGUuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuc2Vydl9maWxlLmNsb3NlZCkKIAogICAgIGRlZiBfdGVzdENsb3NlZEF0dHIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgc2VsZi5jbGlfZmlsZS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5jbGlfZmlsZS5jbG9zZWQpCiAKIAogY2xhc3MgRmlsZU9iamVjdEludGVycnVwdGVkVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtODYwLDggKzEwMjAsOCBAQAogICAgICAgICAgICAgICAgIGxhbWJkYSA6ICIiLAogICAgICAgICAgICAgXSkKICAgICAgICAgZm8gPSBzb2NrZXQuX2ZpbGVvYmplY3QobW9ja19zb2NrLCAqKmt3YXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZm8ucmVhZGxpbmUoc2l6ZSksICJUaGlzIGlzIHRoZSBmaXJzdCBsaW5lXG4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmby5yZWFkbGluZShzaXplKSwgIkFuZCB0aGUgc2Vjb25kIGxpbmUgaXMgaGVyZVxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkbGluZShzaXplKSwgIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmVcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZGxpbmUoc2l6ZSksICJBbmQgdGhlIHNlY29uZCBsaW5lIGlzIGhlcmVcbiIpCiAKICAgICBkZWYgX3Rlc3RfcmVhZChzZWxmLCBzaXplPS0xLCAqKmt3YXJncyk6CiAgICAgICAgIG1vY2tfc29jayA9IHNlbGYuTW9ja1NvY2tldChyZWN2X2Z1bmNzPVsKQEAgLTg3MSw3ICsxMDMxLDcgQEAKICAgICAgICAgICAgICAgICBsYW1iZGEgOiAiIiwKICAgICAgICAgICAgIF0pCiAgICAgICAgIGZvID0gc29ja2V0Ll9maWxlb2JqZWN0KG1vY2tfc29jaywgKiprd2FyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZvLnJlYWQoc2l6ZSksICJUaGlzIGlzIHRoZSBmaXJzdCBsaW5lXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZChzaXplKSwgIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmVcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFuZCB0aGUgc2Vjb25kIGxpbmUgaXMgaGVyZVxuIikKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6CkBAIC04OTYsOCArMTA1Niw4IEBACiAgICAgICAgICAgICAgICAgbGFtYmRhIDogIiIsCiAgICAgICAgICAgICBdKQogICAgICAgICBmbyA9IHNvY2tldC5fZmlsZW9iamVjdChtb2NrX3NvY2ssIGJ1ZnNpemU9MCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZm8ucmVhZGxpbmUoc2l6ZSksICJhYVxuIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZm8ucmVhZGxpbmUoc2l6ZSksICJCQmJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkbGluZShzaXplKSwgImFhXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWRsaW5lKHNpemUpLCAiQkJiYiIpCiAKICAgICBkZWYgdGVzdF9ub19idWZmZXIoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmVfbm9fYnVmZmVyKCkKQEAgLTk1NCwxMyArMTExNCw0NSBAQAogICAgICIiIgogCiBjbGFzcyBOZXR3b3JrQ29ubmVjdGlvbk5vU2VydmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdFdpdGhvdXRTZXJ2ZXIoc2VsZik6Ci0gICAgICAgIHBvcnQgPSB0ZXN0X3N1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcygKLSAgICAgICAgICAgIHNvY2tldC5lcnJvciwKLSAgICAgICAgICAgIGxhbWJkYTogc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBwb3J0KSkKLSAgICAgICAgKQorICAgIGNsYXNzIE1vY2tTb2NrZXQoc29ja2V0LnNvY2tldCk6CisgICAgICAgIGRlZiBjb25uZWN0KHNlbGYsICphcmdzKToKKyAgICAgICAgICAgIHJhaXNlIHNvY2tldC50aW1lb3V0KCd0aW1lZCBvdXQnKQogCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgbW9ja2VkX3NvY2tldF9tb2R1bGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIHNvY2tldCB3aGljaCB0aW1lcyBvdXQgb24gY29ubmVjdCIiIgorICAgICAgICBvbGRfc29ja2V0ID0gc29ja2V0LnNvY2tldAorICAgICAgICBzb2NrZXQuc29ja2V0ID0gc2VsZi5Nb2NrU29ja2V0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc29ja2V0ID0gb2xkX3NvY2tldAorCisgICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKKyAgICAgICAgcG9ydCA9IHRlc3Rfc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xpLmNsb3NlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgICAgICBjbGkuY29ubmVjdCgoSE9TVCwgcG9ydCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQ09OTlJFRlVTRUQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjOTc5MjogZXJyb3JzIHJhaXNlZCBieSBjcmVhdGVfY29ubmVjdGlvbigpIHNob3VsZCBoYXZlCisgICAgICAgICMgYSBwcm9wZXIgZXJybm8gYXR0cmlidXRlLgorICAgICAgICBwb3J0ID0gdGVzdF9zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgICAgICBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHBvcnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUNPTk5SRUZVU0VEKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fdGltZW91dChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjOTc5MjogY3JlYXRlX2Nvbm5lY3Rpb24oKSBzaG91bGQgbm90IHJlY2FzdCB0aW1lb3V0IGVycm9ycworICAgICAgICAjIGFzIGdlbmVyaWMgc29ja2V0IGVycm9ycy4KKyAgICAgICAgd2l0aCBzZWxmLm1vY2tlZF9zb2NrZXRfbW9kdWxlKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0KToKKyAgICAgICAgICAgICAgICBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIDEyMzQpKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBOZXR3b3JrQ29ubmVjdGlvbkF0dHJpYnV0ZXNUZXN0KFNvY2tldFRDUFRlc3QsIFRocmVhZGFibGVUZXN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CkBAIC05NjgsNyArMTE2MCw3IEBACiAgICAgICAgIFRocmVhZGFibGVUZXN0Ll9faW5pdF9fKHNlbGYpCiAKICAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6Ci0gICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5zb3VyY2VfcG9ydCA9IHRlc3Rfc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKIAogICAgIGRlZiBjbGllbnRUZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5jbGkuY2xvc2UoKQpAQCAtOTc3LDMwICsxMTY5LDQzIEBACiAKICAgICBkZWYgX2p1c3RBY2NlcHQoc2VsZik6CiAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgY29ubi5jbG9zZSgpCiAKICAgICB0ZXN0RmFtaWx5ID0gX2p1c3RBY2NlcHQKICAgICBkZWYgX3Rlc3RGYW1pbHkoc2VsZik6CiAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpLCB0aW1lb3V0PTMwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5jbGkuY2xvc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZmFtaWx5LCAyKQogCisgICAgdGVzdFNvdXJjZUFkZHJlc3MgPSBfanVzdEFjY2VwdAorICAgIGRlZiBfdGVzdFNvdXJjZUFkZHJlc3Moc2VsZik6CisgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpLCB0aW1lb3V0PTMwLAorICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPSgnJywgc2VsZi5zb3VyY2VfcG9ydCkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmNsaS5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaS5nZXRzb2NrbmFtZSgpWzFdLCBzZWxmLnNvdXJjZV9wb3J0KQorICAgICAgICAjIFRoZSBwb3J0IG51bWJlciBiZWluZyB1c2VkIGlzIHN1ZmZpY2llbnQgdG8gc2hvdyB0aGF0IHRoZSBiaW5kKCkKKyAgICAgICAgIyBjYWxsIGhhcHBlbmVkLgorCiAgICAgdGVzdFRpbWVvdXREZWZhdWx0ID0gX2p1c3RBY2NlcHQKICAgICBkZWYgX3Rlc3RUaW1lb3V0RGVmYXVsdChzZWxmKToKICAgICAgICAgIyBwYXNzaW5nIG5vIGV4cGxpY2l0IHRpbWVvdXQgdXNlcyBzb2NrZXQncyBnbG9iYWwgZGVmYXVsdAotICAgICAgICBzZWxmLmFzc2VydF8oc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCiAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg0MikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlbGYucG9ydCkpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5jbGkuY2xvc2UpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5jbGkuZ2V0dGltZW91dCgpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaS5nZXR0aW1lb3V0KCksIDQyKQogCiAgICAgdGVzdFRpbWVvdXROb25lID0gX2p1c3RBY2NlcHQKICAgICBkZWYgX3Rlc3RUaW1lb3V0Tm9uZShzZWxmKToKICAgICAgICAgIyBOb25lIHRpbWVvdXQgbWVhbnMgdGhlIHNhbWUgYXMgc29jay5zZXR0aW1lb3V0KE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgdGltZW91dD1Ob25lKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY2xpLmNsb3NlKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZ2V0dGltZW91dCgpLCBOb25lKQpAQCAtMTAxMyw4ICsxMjE4LDEwIEBACiAgICAgdGVzdFRpbWVvdXRWYWx1ZU5vbmFtZWQgPSBfanVzdEFjY2VwdAogICAgIGRlZiBfdGVzdFRpbWVvdXRWYWx1ZU5vbmFtZWQoc2VsZik6CiAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpLCAzMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY2xpLmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpLmdldHRpbWVvdXQoKSwgMzApCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBOZXR3b3JrQ29ubmVjdGlvbkJlaGF2aW91clRlc3QoU29ja2V0VENQVGVzdCwgVGhyZWFkYWJsZVRlc3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKQEAgLTEwMzEsNiArMTIzOCw3IEBACiAKICAgICBkZWYgdGVzdEluc2lkZVRpbWVvdXQoc2VsZik6CiAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNvbm4uY2xvc2UpCiAgICAgICAgIHRpbWUuc2xlZXAoMykKICAgICAgICAgY29ubi5zZW5kKCJkb25lISIpCiAgICAgdGVzdE91dHNpZGVUaW1lb3V0ID0gdGVzdEluc2lkZVRpbWVvdXQKQEAgLTEwNDIsMzEgKzEyNTAsNyBAQAogCiAgICAgZGVmIF90ZXN0T3V0c2lkZVRpbWVvdXQoc2VsZik6CiAgICAgICAgIHNlbGYuY2xpID0gc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgdGltZW91dD0xKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoc29ja2V0LnRpbWVvdXQsIGxhbWJkYTogc29jay5yZWN2KDUpKQotCi1jbGFzcyBUZXN0SXNzdWU5NTQzKFNvY2tldFRDUFRlc3QsIE5ldHdvcmtDb25uZWN0aW9uVGVzdCk6Ci0gICAgIiIiCi0gICAgVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgY29kZSBpbiB0aGUgX2ZpbGVvYmplY3QuZmx1c2goKSBtZXRob2Qgd2hlbiB0aGUKLSAgICB3aG9sZSB3cml0ZSBidWZmZXIgaGFzbid0IGJlZW4gZmx1c2hlZC4KLSAgICBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTk1NDMKLSAgICAiIiIKLSAgICAjIFhYWDogdGhpcyBpcyBqdXN0IGEgc2FuaXR5IGNoZWNrLCBwcm9wZXIgdGVzdHMgZm9yIGZsdXNoKCkgc2hvdWxkIHN0aWxsCi0gICAgIyAgICAgIGJlIGFkZGVkCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBTb2NrZXRUQ1BUZXN0LnNldFVwKHNlbGYpCi0gICAgICAgIE5ldHdvcmtDb25uZWN0aW9uVGVzdC5jbGllbnRTZXRVcChzZWxmKQotCi0gICAgZGVmIHRlc3RfaXNzdWU5NTQzKHNlbGYpOgotICAgICAgICBzZWxmLmNsaS5jbG9zZSgpCi0gICAgICAgIGZpbGVfYSA9IHNlbGYuc2Vydi5tYWtlZmlsZSgndycpCi0gICAgICAgIGZpbGVfYS53cml0ZSgneCcpCi0gICAgICAgICMgZmx1c2goKSB3aWxsIHRyeSB0byBzZW5kIGRhdGEgdG8gc2VsZi5jbGkgYW5kIHJhaXNlIGFuIGVycm9yIGJlY2F1c2UKLSAgICAgICAgIyBpdCdzIGNsb3NlZAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIGZpbGVfYS5mbHVzaCkKLSAgICAgICAgIyBjbG9zZSgpIHdpbGwgcmFpc2UgYW4gZXJyb3IgdG9vLCBiZWNhdXNlIGl0IGNhbGxzIGZsdXNoKCkgYmVmb3JlCi0gICAgICAgICMgY2xvc2luZyB0aGUgZmlsZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIGZpbGVfYS5jbG9zZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVfYS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBsYW1iZGE6IHNvY2sucmVjdig1KSkKIAogCiBjbGFzcyBVcmxsaWIyRmlsZW9iamVjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTA4NiwxMiArMTI3MCwxMiBAQAogICAgICAgICBzID0gTW9ja1NvY2tldCgpCiAgICAgICAgIGYgPSBzb2NrZXQuX2ZpbGVvYmplY3QocykKICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgcy5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgcy5jbG9zZWQpCiAKICAgICAgICAgcyA9IE1vY2tTb2NrZXQoKQogICAgICAgICBmID0gc29ja2V0Ll9maWxlb2JqZWN0KHMsIGNsb3NlPVRydWUpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8ocy5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmNsb3NlZCkKIAogY2xhc3MgVENQVGltZW91dFRlc3QoU29ja2V0VENQVGVzdCk6CiAKQEAgLTEwOTksNyArMTI4Myw3IEBACiAgICAgICAgIGRlZiByYWlzZV90aW1lb3V0KCphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICBzZWxmLnNlcnYuc2V0dGltZW91dCgxLjApCiAgICAgICAgICAgICBzZWxmLnNlcnYuYWNjZXB0KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKHNvY2tldC50aW1lb3V0LCByYWlzZV90aW1lb3V0LAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgcmFpc2VfdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBnZW5lcmF0aW5nIGEgdGltZW91dCBleGNlcHRpb24gKFRDUCkiKQogCiAgICAgZGVmIHRlc3RUaW1lb3V0WmVybyhzZWxmKToKQEAgLTExNTYsNyArMTM0MCw3IEBACiAgICAgICAgIGRlZiByYWlzZV90aW1lb3V0KCphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICBzZWxmLnNlcnYuc2V0dGltZW91dCgxLjApCiAgICAgICAgICAgICBzZWxmLnNlcnYucmVjdigxMDI0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoc29ja2V0LnRpbWVvdXQsIHJhaXNlX3RpbWVvdXQsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCByYWlzZV90aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGdlbmVyYXRpbmcgYSB0aW1lb3V0IGV4Y2VwdGlvbiAoVURQKSIpCiAKICAgICBkZWYgdGVzdFRpbWVvdXRaZXJvKHNlbGYpOgpAQCAtMTE3NiwxMCArMTM2MCwxMCBAQAogY2xhc3MgVGVzdEV4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RFeGNlcHRpb25UcmVlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhzb2NrZXQuZXJyb3IsIEV4Y2VwdGlvbikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKHNvY2tldC5oZXJyb3IsIHNvY2tldC5lcnJvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKHNvY2tldC5nYWllcnJvciwgc29ja2V0LmVycm9yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzc3ViY2xhc3Moc29ja2V0LnRpbWVvdXQsIHNvY2tldC5lcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5lcnJvciwgRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmhlcnJvciwgc29ja2V0LmVycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmdhaWVycm9yLCBzb2NrZXQuZXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQudGltZW91dCwgc29ja2V0LmVycm9yKSkKIAogY2xhc3MgVGVzdExpbnV4QWJzdHJhY3ROYW1lc3BhY2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xMjA4LDYgKzEzOTIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHMuYmluZCwgYWRkcmVzcykKIAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQnVmZmVySU9UZXN0KFNvY2tldENvbm5lY3RlZFRlc3QpOgogICAgICIiIgogICAgIFRlc3QgdGhlIGJ1ZmZlciB2ZXJzaW9ucyBvZiBzb2NrZXQucmVjdigpIGFuZCBzb2NrZXQuc2VuZCgpLgpAQCAtMTIxNSwzMCArMTQwMCw2NiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CiAgICAgICAgIFNvY2tldENvbm5lY3RlZFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQogCi0gICAgZGVmIHRlc3RSZWN2SW50byhzZWxmKToKKyAgICBkZWYgdGVzdFJlY3ZJbnRvQXJyYXkoc2VsZik6CiAgICAgICAgIGJ1ZiA9IGFycmF5LmFycmF5KCdjJywgJyAnKjEwMjQpCiAgICAgICAgIG5ieXRlcyA9IHNlbGYuY2xpX2Nvbm4ucmVjdl9pbnRvKGJ1ZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYnl0ZXMsIGxlbihNU0cpKQogICAgICAgICBtc2cgPSBidWYudG9zdHJpbmcoKVs6bGVuKE1TRyldCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCiAKLSAgICBkZWYgX3Rlc3RSZWN2SW50byhzZWxmKToKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICBkZWYgX3Rlc3RSZWN2SW50b0FycmF5KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBidWYgPSBidWZmZXIoTVNHKQogICAgICAgICBzZWxmLnNlcnZfY29ubi5zZW5kKGJ1ZikKIAotICAgIGRlZiB0ZXN0UmVjdkZyb21JbnRvKHNlbGYpOgorICAgIGRlZiB0ZXN0UmVjdkludG9CeXRlYXJyYXkoc2VsZik6CisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheSgxMDI0KQorICAgICAgICBuYnl0ZXMgPSBzZWxmLmNsaV9jb25uLnJlY3ZfaW50byhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKKyAgICAgICAgbXNnID0gYnVmWzpsZW4oTVNHKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIF90ZXN0UmVjdkludG9CeXRlYXJyYXkgPSBfdGVzdFJlY3ZJbnRvQXJyYXkKKworICAgIGRlZiB0ZXN0UmVjdkludG9NZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBidWYgPSBieXRlYXJyYXkoMTAyNCkKKyAgICAgICAgbmJ5dGVzID0gc2VsZi5jbGlfY29ubi5yZWN2X2ludG8obWVtb3J5dmlldyhidWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ieXRlcywgbGVuKE1TRykpCisgICAgICAgIG1zZyA9IGJ1Zls6bGVuKE1TRyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBfdGVzdFJlY3ZJbnRvTWVtb3J5dmlldyA9IF90ZXN0UmVjdkludG9BcnJheQorCisgICAgZGVmIHRlc3RSZWN2RnJvbUludG9BcnJheShzZWxmKToKICAgICAgICAgYnVmID0gYXJyYXkuYXJyYXkoJ2MnLCAnICcqMTAyNCkKICAgICAgICAgbmJ5dGVzLCBhZGRyID0gc2VsZi5jbGlfY29ubi5yZWN2ZnJvbV9pbnRvKGJ1ZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYnl0ZXMsIGxlbihNU0cpKQogICAgICAgICBtc2cgPSBidWYudG9zdHJpbmcoKVs6bGVuKE1TRyldCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCiAKLSAgICBkZWYgX3Rlc3RSZWN2RnJvbUludG8oc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgZGVmIF90ZXN0UmVjdkZyb21JbnRvQXJyYXkoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcihNU0cpCiAgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoYnVmKQogCisgICAgZGVmIHRlc3RSZWN2RnJvbUludG9CeXRlYXJyYXkoc2VsZik6CisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheSgxMDI0KQorICAgICAgICBuYnl0ZXMsIGFkZHIgPSBzZWxmLmNsaV9jb25uLnJlY3Zmcm9tX2ludG8oYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ieXRlcywgbGVuKE1TRykpCisgICAgICAgIG1zZyA9IGJ1Zls6bGVuKE1TRyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBfdGVzdFJlY3ZGcm9tSW50b0J5dGVhcnJheSA9IF90ZXN0UmVjdkZyb21JbnRvQXJyYXkKKworICAgIGRlZiB0ZXN0UmVjdkZyb21JbnRvTWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KDEwMjQpCisgICAgICAgIG5ieXRlcywgYWRkciA9IHNlbGYuY2xpX2Nvbm4ucmVjdmZyb21faW50byhtZW1vcnl2aWV3KGJ1ZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKKyAgICAgICAgbXNnID0gYnVmWzpsZW4oTVNHKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIF90ZXN0UmVjdkZyb21JbnRvTWVtb3J5dmlldyA9IF90ZXN0UmVjdkZyb21JbnRvQXJyYXkKKwogCiBUSVBDX1NUWVBFID0gMjAwMAogVElQQ19MT1dFUiA9IDIwMApAQCAtMTMyMCw5ICsxNTQxLDggQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3RzID0gW0dlbmVyYWxNb2R1bGVUZXN0cywgQmFzaWNUQ1BUZXN0LCBUQ1BDbG9zZXJUZXN0LCBUQ1BUaW1lb3V0VGVzdCwKLSAgICAgICAgICAgICBUZXN0RXhjZXB0aW9ucywgQnVmZmVySU9UZXN0LCBCYXNpY1RDUFRlc3QyXQotICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnbWFjJzoKLSAgICAgICAgdGVzdHMuZXh0ZW5kKFsgQmFzaWNVRFBUZXN0LCBVRFBUaW1lb3V0VGVzdCBdKQorICAgICAgICAgICAgIFRlc3RFeGNlcHRpb25zLCBCdWZmZXJJT1Rlc3QsIEJhc2ljVENQVGVzdDIsIEJhc2ljVURQVGVzdCwKKyAgICAgICAgICAgICBVRFBUaW1lb3V0VGVzdCBdCiAKICAgICB0ZXN0cy5leHRlbmQoWwogICAgICAgICBOb25CbG9ja2luZ1RDUFRlc3RzLApAQCAtMTMzNSw3ICsxNTU1LDYgQEAKICAgICAgICAgTmV0d29ya0Nvbm5lY3Rpb25Ob1NlcnZlciwKICAgICAgICAgTmV0d29ya0Nvbm5lY3Rpb25BdHRyaWJ1dGVzVGVzdCwKICAgICAgICAgTmV0d29ya0Nvbm5lY3Rpb25CZWhhdmlvdXJUZXN0LAotICAgICAgICBUZXN0SXNzdWU5NTQzLAogICAgIF0pCiAgICAgaWYgaGFzYXR0cihzb2NrZXQsICJzb2NrZXRwYWlyIik6CiAgICAgICAgIHRlc3RzLmFwcGVuZChCYXNpY1NvY2tldFBhaXJUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkgYi9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQppbmRleCAyN2UxZDNmLi40ODI1YTRhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQpAQCAtMywyMSArMywyMSBAQAogIiIiCiAKIGltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgZXJybm8KIGltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNpZ25hbAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgU29ja2V0U2VydmVyCiAKIGltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcmVhcF9jaGlsZHJlbiwgdmVyYm9zZSwgVGVzdFNraXBwZWQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiBhcyBURVNUX0ZJTEUKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlYXBfY2hpbGRyZW4sIHJlYXBfdGhyZWFkcywgdmVyYm9zZQordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCiAKIHRlc3QudGVzdF9zdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKIApAQCAtNTcsMTAgKzU3LDExIEBACiAgICAgICAgIG9zLl9leGl0KDcyKQogICAgIHlpZWxkIE5vbmUKICAgICBwaWQyLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKLSAgICB0ZXN0Y2FzZS5hc3NlcnRFcXVhbHMocGlkMiwgcGlkKQotICAgIHRlc3RjYXNlLmFzc2VydEVxdWFscyg3MiA8PCA4LCBzdGF0dXMpCisgICAgdGVzdGNhc2UuYXNzZXJ0RXF1YWwocGlkMiwgcGlkKQorICAgIHRlc3RjYXNlLmFzc2VydEVxdWFsKDcyIDw8IDgsIHN0YXR1cykKIAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgU29ja2V0U2VydmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCBhbGwgc29ja2V0IHNlcnZlcnMuIiIiCiAKQEAgLTExOSw5ICsxMjAsMTEgQEAKIAogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiY3JlYXRpbmcgc2VydmVyIgogICAgICAgICBzZXJ2ZXIgPSBNeVNlcnZlcihhZGRyLCBNeUhhbmRsZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgc2VydmVyLnNvY2tldC5nZXRzb2NrbmFtZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgc2VydmVyLnNvY2tldC5nZXRzb2NrbmFtZSgpKQogICAgICAgICByZXR1cm4gc2VydmVyCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEByZWFwX3RocmVhZHMKICAgICBkZWYgcnVuX3NlcnZlcihzZWxmLCBzdnJjbHMsIGhkbHJiYXNlLCB0ZXN0ZnVuYyk6CiAgICAgICAgIHNlcnZlciA9IHNlbGYubWFrZV9zZXJ2ZXIoc2VsZi5waWNrYWRkcihzdnJjbHMuYWRkcmVzc19mYW1pbHkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2cmNscywgaGRscmJhc2UpCkBAIC0xNTgsNyArMTYxLDcgQEAKICAgICAgICAgd2hpbGUgZGF0YSBhbmQgJ1xuJyBub3QgaW4gYnVmOgogICAgICAgICAgICAgZGF0YSA9IHJlY2VpdmUocywgMTAwKQogICAgICAgICAgICAgYnVmICs9IGRhdGEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVmLCBURVNUX1NUUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIFRFU1RfU1RSKQogICAgICAgICBzLmNsb3NlKCkKIAogICAgIGRlZiBkZ3JhbV9leGFtaW5lKHNlbGYsIHByb3RvLCBhZGRyKToKQEAgLTE2OCw3ICsxNzEsNyBAQAogICAgICAgICB3aGlsZSBkYXRhIGFuZCAnXG4nIG5vdCBpbiBidWY6CiAgICAgICAgICAgICBkYXRhID0gcmVjZWl2ZShzLCAxMDApCiAgICAgICAgICAgICBidWYgKz0gZGF0YQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWYsIFRFU1RfU1RSKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgVEVTVF9TVFIpCiAgICAgICAgIHMuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfVENQU2VydmVyKHNlbGYpOgpAQCAtMjQzLDYgKzI0Niw3IEBACiAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLkRhdGFncmFtUmVxdWVzdEhhbmRsZXIsCiAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZ3JhbV9leGFtaW5lKQogCisgICAgQHJlYXBfdGhyZWFkcwogICAgIGRlZiB0ZXN0X3NodXRkb3duKHNlbGYpOgogICAgICAgICAjIElzc3VlICMyMzAyOiBzaHV0ZG93bigpIHNob3VsZCBhbHdheXMgc3VjY2VlZCBpbiBtYWtpbmcgYW4KICAgICAgICAgIyBvdGhlciB0aHJlYWQgbGVhdmUgc2VydmVfZm9yZXZlcigpLgpAQCAtMjcxLDcgKzI3NSw3IEBACiBkZWYgdGVzdF9tYWluKCk6CiAgICAgaWYgaW1wLmxvY2tfaGVsZCgpOgogICAgICAgICAjIElmIHRoZSBpbXBvcnQgbG9jayBpcyBoZWxkLCB0aGUgdGhyZWFkcyB3aWxsIGhhbmcKLSAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQoImNhbid0IHJ1biB3aGVuIGltcG9ydCBsb2NrIGlzIGhlbGQiKQorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiY2FuJ3QgcnVuIHdoZW4gaW1wb3J0IGxvY2sgaXMgaGVsZCIpCiAKICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU29ja2V0U2VydmVyVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9zb3J0LnB5CmluZGV4IGRlMTc1YzUuLmQ3NWFiYzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvcnQucHkKQEAgLTI3NCw3ICsyNzQsNyBAQAogICAgICAgICBUZXN0QnVncywKICAgICApCiAKLSAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAgICAgKCJ0aGUgY21wIGFyZ3VtZW50IGlzIG5vdCBzdXBwb3J0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NxbGl0ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3FsaXRlLnB5CmluZGV4IGQ2M2JiMWQuLmRiMjczMzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3FsaXRlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3FsaXRlLnB5CkBAIC0xLDkgKzEsOCBAQAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBUZXN0U2tpcHBlZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCiAKLXRyeToKLSAgICBpbXBvcnQgX3NxbGl0ZTMKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCgnbm8gc3FsaXRlIGF2YWlsYWJsZScpCisjIFNraXAgdGVzdCBpZiBfc3FsaXRlMyBtb2R1bGUgd2FzIG5vdCBidWlsdC4KK2ltcG9ydF9tb2R1bGUoJ19zcWxpdGUzJykKKwogZnJvbSBzcWxpdGUzLnRlc3QgaW1wb3J0IChkYmFwaSwgdHlwZXMsIHVzZXJmdW5jdGlvbnMsIHB5MjV0ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSwgdHJhbnNhY3Rpb25zLCBob29rcywgcmVncmVzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5IGIvTGliL3Rlc3QvdGVzdF9zc2wucHkKaW5kZXggYzFlNTNlYy4uMjU2NzIxOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zc2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zc2wucHkKQEAgLTYsMTcgKzYsMTYgQEAKIGltcG9ydCBhc3luY29yZQogaW1wb3J0IHNvY2tldAogaW1wb3J0IHNlbGVjdAotaW1wb3J0IGVycm5vCi1pbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRpbWUKIGltcG9ydCBnYwogaW1wb3J0IG9zCiBpbXBvcnQgZXJybm8KIGltcG9ydCBwcHJpbnQKIGltcG9ydCB1cmxsaWIsIHVybHBhcnNlCi1pbXBvcnQgc2h1dGlsCiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgd2Vha3JlZgoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHBsYXRmb3JtCiAKIGZyb20gQmFzZUhUVFBTZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2ZXIKIGZyb20gU2ltcGxlSFRUUFNlcnZlciBpbXBvcnQgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCkBAIC01Nyw2ICs1NiwzMiBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZQogCisjIElzc3VlICM5NDE1OiBVYnVudHUgaGlqYWNrcyB0aGVpciBPcGVuU1NMIGFuZCBmb3JjZWZ1bGx5IGRpc2FibGVzIFNTTHYyCitkZWYgc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbChmdW5jKToKKyAgICAjIFdlIG5lZWQgdG8gYWNjZXNzIHRoZSBsb3dlci1sZXZlbCB3cmFwcGVyIGluIG9yZGVyIHRvIGNyZWF0ZSBhbgorICAgICMgaW1wbGljaXQgU1NMIGNvbnRleHQgd2l0aG91dCB0cnlpbmcgdG8gY29ubmVjdCBvciBsaXN0ZW4uCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgX3NzbAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgIyBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gd29uJ3QgZ2V0IGV4ZWN1dGVkLCBqdXN0IGlnbm9yZSB0aGUgZXJyb3IKKyAgICAgICAgcGFzcworICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICBkZWYgZigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgIF9zc2wuc3Nsd3JhcChzLl9zb2NrLCAwLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5DRVJUX05PTkUsIHNzbC5QUk9UT0NPTF9TU0x2MiwgTm9uZSwgTm9uZSkKKyAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgKHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA9PSAoMCwgOSwgOCwgMTUsIDE1KSBhbmQKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb24oKSA9PSAoJ2RlYmlhbicsICdzcXVlZXplL3NpZCcsICcnKQorICAgICAgICAgICAgICAgIGFuZCAnSW52YWxpZCBTU0wgcHJvdG9jb2wgdmFyaWFudCBzcGVjaWZpZWQnIGluIHN0cihlKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlBhdGNoZWQgVWJ1bnR1IE9wZW5TU0wgYnJlYWtzIGJlaGF2aW91ciIpCisgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICByZXR1cm4gZgorCisKK2NsYXNzIEJhc2ljU29ja2V0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjIKICAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYyMwpAQCAtMTAwLDYgKzEyNSw1MiBAQAogICAgICAgICBpZiBub3QgcDIuZW5kc3dpdGgoJ1xuJyArIHNzbC5QRU1fRk9PVEVSICsgJ1xuJyk6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkRFUi10by1QRU0gZGlkbid0IGluY2x1ZGUgY29ycmVjdCBmb290ZXI6XG4lclxuIiAlIHAyKQogCisgICAgZGVmIHRlc3Rfb3BlbnNzbF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBuID0gc3NsLk9QRU5TU0xfVkVSU0lPTl9OVU1CRVIKKyAgICAgICAgdCA9IHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTworICAgICAgICBzID0gc3NsLk9QRU5TU0xfVkVSU0lPTgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobiwgKGludCwgbG9uZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0LCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHMsIHN0cikKKyAgICAgICAgIyBTb21lIHNhbml0eSBjaGVja3MgZm9sbG93CisgICAgICAgICMgPj0gMC45CisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG4sIDB4OTAwMDAwKQorICAgICAgICAjIDwgMi4wCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhuLCAweDIwMDAwMDAwKQorICAgICAgICBtYWpvciwgbWlub3IsIGZpeCwgcGF0Y2gsIHN0YXR1cyA9IHQKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobWFqb3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhtYWpvciwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobWlub3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhtaW5vciwgMjU2KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChmaXgsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhmaXgsIDI1NikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGF0Y2gsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHBhdGNoLCAyNikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RhdHVzLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzdGF0dXMsIDE1KQorICAgICAgICAjIFZlcnNpb24gc3RyaW5nIGFzIHJldHVybmVkIGJ5IE9wZW5TU0wsIHRoZSBmb3JtYXQgbWlnaHQgY2hhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIk9wZW5TU0wgezpkfS57OmR9Lns6ZH0iLmZvcm1hdChtYWpvciwgbWlub3IsIGZpeCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgKHMsIHQpKQorCisgICAgZGVmIHRlc3RfY2lwaGVycyhzZWxmKToKKyAgICAgICAgaWYgbm90IHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmVtb3RlID0gKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHJlbW90ZVswXSk6CisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwgY2lwaGVycz0iQUxMIikKKyAgICAgICAgICAgIHMuY29ubmVjdChyZW1vdGUpCisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwgY2lwaGVycz0iREVGQVVMVCIpCisgICAgICAgICAgICBzLmNvbm5lY3QocmVtb3RlKQorICAgICAgICAgICAgIyBFcnJvciBjaGVja2luZyBvY2N1cnMgd2hlbiBjb25uZWN0aW5nLCBiZWNhdXNlIHRoZSBTU0wgY29udGV4dAorICAgICAgICAgICAgIyBpc24ndCBjcmVhdGVkIGJlZm9yZS4KKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FLCBjaXBoZXJzPSJeJDosOz8qJ2Rvcm90aHl4IikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoc3NsLlNTTEVycm9yLCAiTm8gY2lwaGVyIGNhbiBiZSBzZWxlY3RlZCIpOgorICAgICAgICAgICAgICAgIHMuY29ubmVjdChyZW1vdGUpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X3JlZmN5Y2xlKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3OTQzOiBhbiBTU0wgb2JqZWN0IGRvZXNuJ3QgY3JlYXRlIHJlZmVyZW5jZSBjeWNsZXMgd2l0aAogICAgICAgICAjIGl0c2VsZi4KQEAgLTEwOSwxMjAgKzE4MCwxNzMgQEAKICAgICAgICAgZGVsIHNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3IoKSwgTm9uZSkKIAorICAgIGRlZiB0ZXN0X3dyYXBwZWRfdW5jb25uZWN0ZWQoc2VsZik6CisgICAgICAgICMgVGhlIF9kZWxlZ2F0ZV9tZXRob2RzIGluIHNvY2tldC5weSBhcmUgY29ycmVjdGx5IGRlbGVnYXRlZCB0byBieSBhbgorICAgICAgICAjIHVuY29ubmVjdGVkIFNTTFNvY2tldCwgc28gdGhleSB3aWxsIHJhaXNlIGEgc29ja2V0LmVycm9yIHJhdGhlciB0aGFuCisgICAgICAgICMgc29tZXRoaW5nIHVuZXhwZWN0ZWQgbGlrZSBUeXBlRXJyb3IuCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKQorICAgICAgICBzcyA9IHNzbC53cmFwX3NvY2tldChzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3YsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdl9pbnRvLCBieXRlYXJyYXkoYid4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdmZyb20sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdmZyb21faW50bywgYnl0ZWFycmF5KGIneCcpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnNlbmQsIGIneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3Muc2VuZHRvLCBiJ3gnLCAoJzAuMC4wLjAnLCAwKSkKKwogCiBjbGFzcyBOZXR3b3JrZWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jb25uZWN0KHNlbGYpOgotICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FKQotICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCi0gICAgICAgIGMgPSBzLmdldHBlZXJjZXJ0KCkKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiUGVlciBjZXJ0ICVzIHNob3VsZG4ndCBiZSBoZXJlISIpCi0gICAgICAgIHMuY2xvc2UoKQotCi0gICAgICAgICMgdGhpcyBzaG91bGQgZmFpbCBiZWNhdXNlIHdlIGhhdmUgbm8gdmVyaWZpY2F0aW9uIGNlcnRzCi0gICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVEKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FKQogICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQotICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYyA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgaWYgYzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlBlZXIgY2VydCAlcyBzaG91bGRuJ3QgYmUgaGVyZSEiKQogICAgICAgICAgICAgcy5jbG9zZSgpCiAKLSAgICAgICAgIyB0aGlzIHNob3VsZCBzdWNjZWVkIGJlY2F1c2Ugd2Ugc3BlY2lmeSB0aGUgcm9vdCBjZXJ0Ci0gICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPVNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAgICAjIHRoaXMgc2hvdWxkIGZhaWwgYmVjYXVzZSB3ZSBoYXZlIG5vIHZlcmlmaWNhdGlvbiBjZXJ0cworICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKIAorICAgICAgICAgICAgIyB0aGlzIHNob3VsZCBzdWNjZWVkIGJlY2F1c2Ugd2Ugc3BlY2lmeSB0aGUgcm9vdCBjZXJ0CisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPVNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY29ubmVjdF9leChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTEzMjY6IGNoZWNrIGNvbm5lY3RfZXgoKSBpbXBsZW1lbnRhdGlvbgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPVNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHMuY29ubmVjdF9leCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZ2V0cGVlcmNlcnQoKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9ub25fYmxvY2tpbmdfY29ubmVjdF9leChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTEzMjY6IG5vbi1ibG9ja2luZyBjb25uZWN0X2V4KCkgc2hvdWxkIGFsbG93IGhhbmRzaGFrZQorICAgICAgICAjIHRvIHByb2NlZWQgYWZ0ZXIgdGhlIHNvY2tldCBnZXRzIHJlYWR5LgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPVNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgICAgICByYyA9IHMuY29ubmVjdF9leCgoJ3N2bi5weXRob24ub3JnJywgNDQzKSkKKyAgICAgICAgICAgICAgICAjIEVXT1VMREJMT0NLIHVuZGVyIFdpbmRvd3MsIEVJTlBST0dSRVNTIGVsc2V3aGVyZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmMsICgwLCBlcnJuby5FSU5QUk9HUkVTUywgZXJybm8uRVdPVUxEQkxPQ0spKQorICAgICAgICAgICAgICAgICMgV2FpdCBmb3IgY29ubmVjdCB0byBmaW5pc2gKKyAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtdLCBbc10sIFtdLCA1LjApCisgICAgICAgICAgICAgICAgIyBOb24tYmxvY2tpbmcgaGFuZHNoYWtlCisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcy5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtzXSwgW10sIFtdLCA1LjApCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtdLCBbc10sIFtdLCA1LjApCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgIyBTU0wgZXN0YWJsaXNoZWQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5nZXRwZWVyY2VydCgpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAibnQiLCAiQ2FuJ3QgdXNlIGEgc29ja2V0IGFzIGEgZmlsZSB1bmRlciBXaW5kb3dzIikKICAgICBkZWYgdGVzdF9tYWtlZmlsZV9jbG9zZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNTIzODogY3JlYXRpbmcgYSBmaWxlLWxpa2Ugb2JqZWN0IHdpdGggbWFrZWZpbGUoKSBzaG91bGRuJ3QKICAgICAgICAgIyBkZWxheSBjbG9zaW5nIHRoZSB1bmRlcmx5aW5nICJyZWFsIHNvY2tldCIgKGhlcmUgdGVzdGVkIHdpdGggaXRzCiAgICAgICAgICMgZmlsZSBkZXNjcmlwdG9yLCBoZW5jZSBza2lwcGluZyB0aGUgdGVzdCB1bmRlciBXaW5kb3dzKS4KLSAgICAgICAgaWYgb3MubmFtZSA9PSAibnQiOgotICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIlNraXBwZWQ6IGNhbid0IHVzZSBhIHNvY2tldCBhcyBhIGZpbGUgdW5kZXIgV2luZG93cyIKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkKLSAgICAgICAgc3MuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKLSAgICAgICAgZmQgPSBzcy5maWxlbm8oKQotICAgICAgICBmID0gc3MubWFrZWZpbGUoKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgIyBUaGUgZmQgaXMgc3RpbGwgb3BlbgotICAgICAgICBvcy5yZWFkKGZkLCAwKQotICAgICAgICAjIENsb3NpbmcgdGhlIFNTTCBzb2NrZXQgc2hvdWxkIGNsb3NlIHRoZSBmZCB0b28KLSAgICAgICAgc3MuY2xvc2UoKQotICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBzcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkKKyAgICAgICAgICAgIHNzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBmZCA9IHNzLmZpbGVubygpCisgICAgICAgICAgICBmID0gc3MubWFrZWZpbGUoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAjIFRoZSBmZCBpcyBzdGlsbCBvcGVuCiAgICAgICAgICAgICBvcy5yZWFkKGZkLCAwKQotICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUJBREYpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIk9TRXJyb3Igd2Fzbid0IHJhaXNlZCIpCisgICAgICAgICAgICAjIENsb3NpbmcgdGhlIFNTTCBzb2NrZXQgc2hvdWxkIGNsb3NlIHRoZSBmZCB0b28KKyAgICAgICAgICAgIHNzLmNsb3NlKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgICAgIG9zLnJlYWQoZmQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQkFERikKIAogICAgIGRlZiB0ZXN0X25vbl9ibG9ja2luZ19oYW5kc2hha2Uoc2VsZik6Ci0gICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKQotICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCi0gICAgICAgIHMuc2V0YmxvY2tpbmcoRmFsc2UpCi0gICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKLSAgICAgICAgY291bnQgPSAwCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY291bnQgKz0gMQotICAgICAgICAgICAgICAgIHMuZG9faGFuZHNoYWtlKCkKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciwgZXJyOgotICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtzXSwgW10sIFtdKQotICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtdLCBbc10sIFtdKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHMuY2xvc2UoKQotICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuTmVlZGVkICVkIGNhbGxzIHRvIGRvX2hhbmRzaGFrZSgpIHRvIGVzdGFibGlzaCBzZXNzaW9uLlxuIiAlIGNvdW50KQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKKyAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgcy5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtzXSwgW10sIFtdKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW10sIFtzXSwgW10pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbk5lZWRlZCAlZCBjYWxscyB0byBkb19oYW5kc2hha2UoKSB0byBlc3RhYmxpc2ggc2Vzc2lvbi5cbiIgJSBjb3VudCkKIAogICAgIGRlZiB0ZXN0X2dldF9zZXJ2ZXJfY2VydGlmaWNhdGUoc2VsZik6Ci0gICAgICAgIHBlbSA9IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQotICAgICAgICBpZiBub3QgcGVtOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBzZXJ2ZXIgY2VydGlmaWNhdGUgb24gc3ZuLnB5dGhvbi5vcmc6NDQzISIpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIHBlbSA9IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgaWYgbm90IHBlbToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIHNlcnZlciBjZXJ0aWZpY2F0ZSBvbiBzdm4ucHl0aG9uLm9yZzo0NDMhIikKIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwZW0gPSBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZSgoInN2bi5weXRob24ub3JnIiwgNDQzKSwgY2FfY2VydHM9Q0VSVEZJTEUpCi0gICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6Ci0gICAgICAgICAgICAjc2hvdWxkIGZhaWwKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiR290IHNlcnZlciBjZXJ0aWZpY2F0ZSAlcyBmb3Igc3ZuLnB5dGhvbi5vcmchIiAlIHBlbSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwZW0gPSBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZSgoInN2bi5weXRob24ub3JnIiwgNDQzKSwgY2FfY2VydHM9Q0VSVEZJTEUpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgorICAgICAgICAgICAgICAgICNzaG91bGQgZmFpbAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJHb3Qgc2VydmVyIGNlcnRpZmljYXRlICVzIGZvciBzdm4ucHl0aG9uLm9yZyEiICUgcGVtKQogCi0gICAgICAgIHBlbSA9IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpLCBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCi0gICAgICAgIGlmIG5vdCBwZW06Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIk5vIHNlcnZlciBjZXJ0aWZpY2F0ZSBvbiBzdm4ucHl0aG9uLm9yZzo0NDMhIikKLSAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcblZlcmlmaWVkIGNlcnRpZmljYXRlIGZvciBzdm4ucHl0aG9uLm9yZzo0NDMgaXNcbiVzXG4iICUgcGVtKQorICAgICAgICAgICAgcGVtID0gc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MyksIGNhX2NlcnRzPVNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkKKyAgICAgICAgICAgIGlmIG5vdCBwZW06CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBzZXJ2ZXIgY2VydGlmaWNhdGUgb24gc3ZuLnB5dGhvbi5vcmc6NDQzISIpCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcblZlcmlmaWVkIGNlcnRpZmljYXRlIGZvciBzdm4ucHl0aG9uLm9yZzo0NDMgaXNcbiVzXG4iICUgcGVtKQogCi0gICAgIyBUZXN0IGRpc2FibGVkOiBPUEVOU1NMX1ZFUlNJT04qIG5vdCBhdmFpbGFibGUgaW4gUHl0aG9uIDIuNgogICAgIGRlZiB0ZXN0X2FsZ29yaXRobXMoc2VsZik6Ci0gICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgidGVzdF9hbGdvcml0aG1zIGRpc2FibGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcyBpdCBmYWlscyBvbiBzb21lIG9sZCBPcGVuU1NMIHZlcnNpb25zIikKLSAgICAgICAgcmV0dXJuCiAgICAgICAgICMgSXNzdWUgIzg0ODQ6IGFsbCBhbGdvcml0aG1zIHNob3VsZCBiZSBhdmFpbGFibGUgd2hlbiB2ZXJpZnlpbmcgYQogICAgICAgICAjIGNlcnRpZmljYXRlLgorICAgICAgICAjIFNIQTI1NiB3YXMgYWRkZWQgaW4gT3BlblNTTCAwLjkuOAorICAgICAgICBpZiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPCAoMCwgOSwgOCwgMCwgMTUpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiU0hBMjU2IG5vdCBhdmFpbGFibGUgb24gJXIiICUgc3NsLk9QRU5TU0xfVkVSU0lPTikKICAgICAgICAgIyBOT1RFOiBodHRwczovL3NoYTI1Ni50YnMtaW50ZXJuZXQuY29tIGlzIGFub3RoZXIgcG9zc2libGUgdGVzdCBob3N0Ci0gICAgICAgIHJlbW90ZSA9ICgic2hhMi5oYm9lY2suZGUiLCA0NDMpCisgICAgICAgIHJlbW90ZSA9ICgic2hhMjU2LnRicy1pbnRlcm5ldC5jb20iLCA0NDMpCiAgICAgICAgIHNoYTI1Nl9jZXJ0ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJzaGEyNTYucGVtIikKLSAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9c2hhMjU2X2NlcnQsKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzaGEyNTYudGJzLWludGVybmV0LmNvbSIpOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1zaGEyNTZfY2VydCwpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KHJlbW90ZSkKICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKQEAgLTI3Niw3ICs0MDAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9c2VsZi5zZXJ2ZXIuY2VydGlmaWNhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zZWxmLnNlcnZlci5wcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPXNlbGYuc2VydmVyLmNhY2VydHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c2VsZi5zZXJ2ZXIuY2VydHJlcXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c2VsZi5zZXJ2ZXIuY2VydHJlcXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPXNlbGYuc2VydmVyLmNpcGhlcnMpCiAgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyBYWFggVmFyaW91cyBlcnJvcnMgY2FuIGhhdmUgaGFwcGVuZWQgaGVyZSwgZm9yIGV4YW1wbGUKICAgICAgICAgICAgICAgICAgICAgIyBhIG1pc21hdGNoaW5nIHByb3RvY29sIHZlcnNpb24sIGFuIGludmFsaWQgY2VydGlmaWNhdGUsCkBAIC0zNjIsNyArNDg3LDcgQEAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNlcnRpZmljYXRlLCBzc2xfdmVyc2lvbj1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9Tm9uZSwgY2FjZXJ0cz1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UsIHN0YXJ0dGxzX3NlcnZlcj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgIHdyYXBfYWNjZXB0aW5nX3NvY2tldD1GYWxzZSk6CisgICAgICAgICAgICAgICAgICAgICB3cmFwX2FjY2VwdGluZ19zb2NrZXQ9RmFsc2UsIGNpcGhlcnM9Tm9uZSk6CiAKICAgICAgICAgICAgIGlmIHNzbF92ZXJzaW9uIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfVExTdjEKQEAgLTM3Miw2ICs0OTcsNyBAQAogICAgICAgICAgICAgc2VsZi5wcm90b2NvbCA9IHNzbF92ZXJzaW9uCiAgICAgICAgICAgICBzZWxmLmNlcnRyZXFzID0gY2VydHJlcXMKICAgICAgICAgICAgIHNlbGYuY2FjZXJ0cyA9IGNhY2VydHMKKyAgICAgICAgICAgIHNlbGYuY2lwaGVycyA9IGNpcGhlcnMKICAgICAgICAgICAgIHNlbGYuY2hhdHR5ID0gY2hhdHR5CiAgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25jaGF0dHkgPSBjb25uZWN0aW9uY2hhdHR5CiAgICAgICAgICAgICBzZWxmLnN0YXJ0dGxzX3NlcnZlciA9IHN0YXJ0dGxzX3NlcnZlcgpAQCAtMzgyLDcgKzUwOCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPXNlbGYuY2VydGlmaWNhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcyA9IHNlbGYuY2VydHJlcXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzID0gc2VsZi5jYWNlcnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbiA9IHNlbGYucHJvdG9jb2wpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uID0gc2VsZi5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycyA9IHNlbGYuY2lwaGVycykKICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZSBhbmQgc2VsZi5jaGF0dHk6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyBzZXJ2ZXI6ICB3cmFwcGVkIHNlcnZlciBzb2NrZXQgYXMgJXNcbicgJSBzdHIoc2VsZi5zb2NrKSkKICAgICAgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQpAQCAtNjI4LDE0ICs3NTUsMTQgQEAKICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5zb2NrZXQuZXJyb3IgaXMgJXNcbiIgJSB4WzFdKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlVzZSBvZiBpbnZhbGlkIGNlcnQgc2hvdWxkIGhhdmUgZmFpbGVkISIpCisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlVzZSBvZiBpbnZhbGlkIGNlcnQgc2hvdWxkIGhhdmUgZmFpbGVkISIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZXJ2ZXIuc3RvcCgpCiAgICAgICAgICAgICBzZXJ2ZXIuam9pbigpCiAKICAgICBkZWYgc2VydmVyX3BhcmFtc190ZXN0KGNlcnRmaWxlLCBwcm90b2NvbCwgY2VydHJlcXMsIGNhY2VydHNmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2NlcnRmaWxlLCBjbGllbnRfcHJvdG9jb2w9Tm9uZSwgaW5kYXRhPSJGT09cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnM9Tm9uZSwgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwX2FjY2VwdGluZ19zb2NrZXQ9RmFsc2UpOgogICAgICAgICAiIiIKICAgICAgICAgTGF1bmNoIGEgc2VydmVyLCBjb25uZWN0IGEgY2xpZW50IHRvIGl0IGFuZCB0cnkgdmFyaW91cyByZWFkcwpAQCAtNjQ1LDYgKzc3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0cmVxcz1jZXJ0cmVxcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXByb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjZXJ0cz1jYWNlcnRzZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnM9Y2lwaGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1jaGF0dHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uY2hhdHR5PWNvbm5lY3Rpb25jaGF0dHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwX2FjY2VwdGluZ19zb2NrZXQ9d3JhcF9hY2NlcHRpbmdfc29ja2V0KQpAQCAtNjU5LDIzICs3ODcsMjUgQEAKICAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jbGllbnRfY2VydGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPWNhY2VydHNmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPWNpcGhlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1jZXJ0cmVxcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249Y2xpZW50X3Byb3RvY29sKQogICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCi0gICAgICAgICAgICBpZiBjb25uZWN0aW9uY2hhdHR5OgotICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgIiBjbGllbnQ6ICBzZW5kaW5nICVzLi4uXG4iICUgKHJlcHIoaW5kYXRhKSkpCi0gICAgICAgICAgICBzLndyaXRlKGluZGF0YSkKLSAgICAgICAgICAgIG91dGRhdGEgPSBzLnJlYWQoKQotICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsaWVudDogIHJlYWQgJXNcbiIgJSByZXByKG91dGRhdGEpKQotICAgICAgICAgICAgaWYgb3V0ZGF0YSAhPSBpbmRhdGEubG93ZXIoKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCi0gICAgICAgICAgICAgICAgICAgICJiYWQgZGF0YSA8PCVzPj4gKCVkKSByZWNlaXZlZDsgZXhwZWN0ZWQgPDwlcz4+ICglZClcbiIKLSAgICAgICAgICAgICAgICAgICAgJSAob3V0ZGF0YVs6bWluKGxlbihvdXRkYXRhKSwyMCldLCBsZW4ob3V0ZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgIGluZGF0YVs6bWluKGxlbihpbmRhdGEpLDIwKV0ubG93ZXIoKSwgbGVuKGluZGF0YSkpKQorICAgICAgICAgICAgZm9yIGFyZyBpbiBbaW5kYXRhLCBieXRlYXJyYXkoaW5kYXRhKSwgbWVtb3J5dmlldyhpbmRhdGEpXToKKyAgICAgICAgICAgICAgICBpZiBjb25uZWN0aW9uY2hhdHR5OgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjbGllbnQ6ICBzZW5kaW5nICVzLi4uXG4iICUgKHJlcHIoYXJnKSkpCisgICAgICAgICAgICAgICAgcy53cml0ZShhcmcpCisgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IHMucmVhZCgpCisgICAgICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2xpZW50OiAgcmVhZCAlc1xuIiAlIHJlcHIob3V0ZGF0YSkpCisgICAgICAgICAgICAgICAgaWYgb3V0ZGF0YSAhPSBpbmRhdGEubG93ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIGRhdGEgPDwlcz4+ICglZCkgcmVjZWl2ZWQ7IGV4cGVjdGVkIDw8JXM+PiAoJWQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAlIChvdXRkYXRhWzptaW4obGVuKG91dGRhdGEpLDIwKV0sIGxlbihvdXRkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGF0YVs6bWluKGxlbihpbmRhdGEpLDIwKV0ubG93ZXIoKSwgbGVuKGluZGF0YSkpKQogICAgICAgICAgICAgcy53cml0ZSgib3ZlclxuIikKICAgICAgICAgICAgIGlmIGNvbm5lY3Rpb25jaGF0dHk6CiAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CkBAIC03MDMsOSArODMzLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuZ2V0X3Byb3RvY29sX25hbWUoc2VydmVyX3Byb3RvY29sKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnR0eXBlKSkKICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBOT1RFOiB3ZSBtdXN0IGVuYWJsZSAiQUxMIiBjaXBoZXJzLCBvdGhlcndpc2UgYW4gU1NMdjIzIGNsaWVudAorICAgICAgICAgICAgIyB3aWxsIHNlbmQgYW4gU1NMdjMgaGVsbG8gKHJhdGhlciB0aGFuIFNTTHYyKSBzdGFydGluZyBmcm9tCisgICAgICAgICAgICAjIE9wZW5TU0wgMS4wLjAgKHNlZSBpc3N1ZSAjODMyMikuCiAgICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoQ0VSVEZJTEUsIHNlcnZlcl9wcm90b2NvbCwgY2VydHNyZXFzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRGSUxFLCBDRVJURklMRSwgY2xpZW50X3Byb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPSJBTEwiLCBjaGF0dHk9RmFsc2UpCiAgICAgICAgICMgUHJvdG9jb2wgbWlzbWF0Y2ggY2FuIHJlc3VsdCBpbiBlaXRoZXIgYW4gU1NMRXJyb3IsIG9yIGEKICAgICAgICAgIyAiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIiBlcnJvci4KICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKQEAgLTc2NCw2ICs4OTcsNyBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0LmpvaW4oKQogCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgICAgIGRlZiB0ZXN0X2VjaG8oc2VsZik6CiAgICAgICAgICAgICAiIiJCYXNpYyB0ZXN0IG9mIGFuIFNTTCBjbGllbnQgY29ubmVjdGluZyB0byBhIHNlcnZlciIiIgogICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CkBAIC04MjksMTIgKzk2MywxMSBAQAogICAgICAgICAgICAgYmFkX2NlcnRfdGVzdChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFka2V5LnBlbSIpKQogCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3NzbHYyKHNlbGYpOgogICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhbiBTU0x2MiBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCiAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbnRlc3RfcHJvdG9jb2xfc3NsdjIgZGlzYWJsZWQsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcyBpdCBmYWlscyBvbiBPcGVuU1NMIDEuMC4wKyIpCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYyLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKQEAgLTg0MiwxMiArOTc1LDExIEBACiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKIAorICAgICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAogICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF9zc2x2MjMoc2VsZik6CiAgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHRvIGFuIFNTTHYyMyBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCiAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbnRlc3RfcHJvdG9jb2xfc3NsdjIzIGRpc2FibGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXMgaXQgZmFpbHMgb24gT3BlblNTTCAxLjAuMCsiKQotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUpCiAgICAgICAgICAgICBleGNlcHQgKHNzbC5TU0xFcnJvciwgc29ja2V0LmVycm9yKSwgeDoKQEAgLTg2OCwxMiArMTAwMCwxMSBAQAogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCiAKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKICAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfc3NsdjMoc2VsZik6CiAgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHRvIGFuIFNTTHYzIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMiIiIKICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxudGVzdF9wcm90b2NvbF9zc2x2MyBkaXNhYmxlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzIGl0IGZhaWxzIG9uIE9wZW5TU0wgMS4wLjArIikKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgVHJ1ZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQpAQCAtODgxLDEyICsxMDEyLDExIEBACiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9UTFN2MSwgRmFsc2UpCiAKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKICAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfdGxzdjEoc2VsZik6CiAgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHRvIGEgVExTdjEgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucyIiIgogICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG50ZXN0X3Byb3RvY29sX3Rsc3YxIGRpc2FibGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXMgaXQgZmFpbHMgb24gT3BlblNTTCAxLjAuMCsiKQotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCkBAIC05NzUsNyArMTEwNSw3IEBACiAgICAgICAgICAgICAgICAgIyBub3cgZmV0Y2ggdGhlIHNhbWUgZGF0YSBmcm9tIHRoZSBIVFRQUyBzZXJ2ZXIKICAgICAgICAgICAgICAgICB1cmwgPSAnaHR0cHM6Ly8xMjcuMC4wLjE6JWQvJXMnICUgKAogICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCwgb3MucGF0aC5zcGxpdChDRVJURklMRSlbMV0pCi0gICAgICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAgICAgICAgIGYgPSB1cmxsaWIudXJsb3Blbih1cmwpCiAgICAgICAgICAgICAgICAgZGxlbiA9IGYuaW5mbygpLmdldGhlYWRlcigiY29udGVudC1sZW5ndGgiKQogICAgICAgICAgICAgICAgIGlmIGRsZW4gYW5kIChpbnQoZGxlbikgPiAwKToKQEAgLTEwOTEsNyArMTIyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhID0gcy5yZWFkKCkKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEgPSBvdXRkYXRhLmRlY29kZSgnQVNDSUknLCAnc3RyaWN0JykKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG91dGRhdGEgIT0gaW5kYXRhLmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldoaWxlIHNlbmRpbmcgd2l0aCA8PCVzPj4gYmFkIGRhdGEgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPDwlcj4+ICglZCkgcmVjZWl2ZWQ7ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIDw8JXI+PiAoJWQpXG4iICUgKApAQCAtMTEwMSwxMiArMTIzMSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdF9zdWNjZXNzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gc2VuZCB3aXRoIG1ldGhvZCA8PCVzPj47ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHRvIHN1Y2NlZWQuXG4iICUgKG1ldGhfbmFtZSwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0cihlKS5zdGFydHN3aXRoKG1ldGhfbmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ldGhvZCA8PCVzPj4gZmFpbGVkIHdpdGggdW5leHBlY3RlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb24gbWVzc2FnZTogJXNcbiIgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRoX25hbWUsIGUKQEAgLTExMjAsNyArMTI1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhID0gcmVjdl9tZXRoKCphcmdzKQogICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IG91dGRhdGEuZGVjb2RlKCdBU0NJSScsICdzdHJpY3QnKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3V0ZGF0YSAhPSBpbmRhdGEubG93ZXIoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2hpbGUgcmVjZWl2aW5nIHdpdGggPDwlcz4+IGJhZCBkYXRhICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8JXI+PiAoJWQpIHJlY2VpdmVkOyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCA8PCVyPj4gKCVkKVxuIiAlICgKQEAgLTExMzAsMTIgKzEyNjAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3Rfc3VjY2VzczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJlY2VpdmUgd2l0aCBtZXRob2QgPDwlcz4+OyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB0byBzdWNjZWVkLlxuIiAlIChtZXRoX25hbWUsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdHIoZSkuc3RhcnRzd2l0aChtZXRoX25hbWUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZXRob2QgPDwlcz4+IGZhaWxlZCB3aXRoIHVuZXhwZWN0ZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uIG1lc3NhZ2U6ICVzXG4iICUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aF9uYW1lLCBlCkBAIC0xMTc5LDEyICsxMzA5LDggQEAKICAgICAgICAgICAgICAgICAgICAgYy5zZXR0aW1lb3V0KDAuMikKICAgICAgICAgICAgICAgICAgICAgYy5jb25uZWN0KChob3N0LCBwb3J0KSkKICAgICAgICAgICAgICAgICAgICAgIyBXaWxsIGF0dGVtcHQgaGFuZHNoYWtlIGFuZCB0aW1lIG91dAotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzc2wud3JhcF9zb2NrZXQoYykKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciwgZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgidGltZWQgb3V0IiBpbiBzdHIoZSksIHN0cihlKSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU1NMRXJyb3Igd2Fzbid0IHJhaXNlZCIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKHNzbC5TU0xFcnJvciwgInRpbWVkIG91dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldCwgYykKICAgICAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICAgICBjLmNsb3NlKCkKICAgICAgICAgICAgICAgICB0cnk6CkBAIC0xMTkyLDEyICsxMzE4LDggQEAKICAgICAgICAgICAgICAgICAgICAgYy5zZXR0aW1lb3V0KDAuMikKICAgICAgICAgICAgICAgICAgICAgYyA9IHNzbC53cmFwX3NvY2tldChjKQogICAgICAgICAgICAgICAgICAgICAjIFdpbGwgYXR0ZW1wdCBoYW5kc2hha2UgYW5kIHRpbWUgb3V0Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoInRpbWVkIG91dCIgaW4gc3RyKGUpLCBzdHIoZSkpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNTTEVycm9yIHdhc24ndCByYWlzZWQiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChzc2wuU1NMRXJyb3IsICJ0aW1lZCBvdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmNvbm5lY3QsIChob3N0LCBwb3J0KSkKICAgICAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICAgICBjLmNsb3NlKCkKICAgICAgICAgICAgIGZpbmFsbHk6CkBAIC0xMjA4LDcgKzEzMzAsNyBAQAogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9RmFsc2UpOgogICAgIGlmIHNraXBfZXhwZWN0ZWQ6Ci0gICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZCgiTm8gU1NMIHN1cHBvcnQiKQorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTm8gU1NMIHN1cHBvcnQiKQogCiAgICAgZ2xvYmFsIENFUlRGSUxFLCBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQKICAgICBDRVJURklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKQEAgLTEyMjEsNyArMTM0Myw3IEBACiAgICAgICAgIG5vdCBvcy5wYXRoLmV4aXN0cyhTVk5fUFlUSE9OX09SR19ST09UX0NFUlQpKToKICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgY2VydGlmaWNhdGUgZmlsZXMhIikKIAotICAgIHRlc3RzID0gW0Jhc2ljVGVzdHNdCisgICAgdGVzdHMgPSBbQmFzaWNUZXN0cywgQmFzaWNTb2NrZXRUZXN0c10KIAogICAgIGlmIHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyk6CiAgICAgICAgIHRlc3RzLmFwcGVuZChOZXR3b3JrZWRUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RhcnRmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9zdGFydGZpbGUucHkKaW5kZXggYzRkMTJkNy4uOGVlYWU3MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdGFydGZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdGFydGZpbGUucHkKQEAgLTksOSArOSwxMSBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgb3MKK2Zyb20gb3MgaW1wb3J0IHBhdGgKIAotIyB1c2UgdGhpcyBmb3JtIHNvIHRoYXQgdGhlIHRlc3QgaXMgc2tpcHBlZCB3aGVuIHN0YXJ0ZmlsZSBpcyBub3QgYXZhaWxhYmxlOgotZnJvbSBvcyBpbXBvcnQgc3RhcnRmaWxlLCBwYXRoCitzdGFydGZpbGUgPSB0ZXN0X3N1cHBvcnQuZ2V0X2F0dHJpYnV0ZShvcywgJ3N0YXJ0ZmlsZScpCisKIAogY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X25vbmV4aXN0aW5nKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHIucHkgYi9MaWIvdGVzdC90ZXN0X3N0ci5weQppbmRleCBkZTk4OGE4Li40Zjg4YjI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0ci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0ci5weQpAQCAtODYsNyArODYsNyBAQAogICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiAibm90IHVuaWNvZGUiCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cihGb28wKCkpLnN0YXJ0c3dpdGgoIjwiKSkgIyB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIF9fdW5pY29kZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoRm9vMCgpKS5zdGFydHN3aXRoKCI8IikpICMgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBfX3VuaWNvZGVfXwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb28xKCkpLCAiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vMigpKSwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzMoKSksICJmb28iKQpAQCAtMjc2LDcgKzI3Niw3IEBACiAgICAgICAgICMgZm9ybWF0IHNwZWNpZmllcnMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmFiY30nLmZvcm1hdChDKCkpLCAnYWJjJykKIAotICAgICAgICAjICFyIGFuZCAhcyBjb2Vyc2lvbnMKKyAgICAgICAgIyAhciBhbmQgIXMgY29lcmNpb25zCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXN9Jy5mb3JtYXQoJ0hlbGxvJyksICdIZWxsbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXM6fScuZm9ybWF0KCdIZWxsbycpLCAnSGVsbG8nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFzOjE1fScuZm9ybWF0KCdIZWxsbycpLCAnSGVsbG8gICAgICAgICAgJykKQEAgLTI5MCwxMiArMjkwLDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfScuZm9ybWF0KFtdKSwgJ1tdJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezB9Jy5mb3JtYXQoWzFdKSwgJ1sxXScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfScuZm9ybWF0KEUoJ2RhdGEnKSksICdFKGRhdGEpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwc30nLmZvcm1hdChFKCdkYXRhJykpLCAnIEUoZGF0YSkgICcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmR9Jy5mb3JtYXQoRygnZGF0YScpKSwgJ0coZGF0YSknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDo+MTVzfScuZm9ybWF0KEcoJ2RhdGEnKSksICcgc3RyaW5nIGlzIGRhdGEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFzfScuZm9ybWF0KEcoJ2RhdGEnKSksICdzdHJpbmcgaXMgZGF0YScpCiAKKyAgICAgICAgbXNnID0gJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0IHN0cmluZyBpcyBkZXByZWNhdGVkJworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygobXNnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeMTB9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJyBFKGRhdGEpICAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwc30nLmZvcm1hdChFKCdkYXRhJykpLCAnIEUoZGF0YSkgICcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDo+MTVzfScuZm9ybWF0KEcoJ2RhdGEnKSksICcgc3RyaW5nIGlzIGRhdGEnKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswOmRhdGU6ICVZLSVtLSVkfSIuZm9ybWF0KEkoeWVhcj0yMDA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPTgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5PTI3KSksCkBAIC0zNDcsOSArMzUwLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswIX0iLmZvcm1hdCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswIXJzfSIuZm9ybWF0LCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAieyF9Ii5mb3JtYXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7On0iLmZvcm1hdCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIns6c30iLmZvcm1hdCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInt9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJ7On0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgIns6c30iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInt9Ii5mb3JtYXQpCiAKICAgICAgICAgIyBpc3N1ZSA2MDg5CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MFswXXh9Ii5mb3JtYXQsIFtOb25lXSkKQEAgLTM2OCw5ICszNzEsNTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAiIiwgIi0iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezA6PXN9Ii5mb3JtYXQsICcnKQogCisgICAgZGVmIHRlc3RfZm9ybWF0X2F1dG9fbnVtYmVyaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHg9MTAwKToKKyAgICAgICAgICAgICAgICBzZWxmLl94ID0geAorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fScuZm9ybWF0KDEwKSwgJzEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezo1fScuZm9ybWF0KCdzJyksICdzICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3shcn0nLmZvcm1hdCgncycpLCAiJ3MnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgney5feH0nLmZvcm1hdChDKDEwKSksICcxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3tbMV19Jy5mb3JtYXQoWzEsIDJdKSwgJzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7W2FdfScuZm9ybWF0KHsnYSc6NCwgJ2InOjJ9KSwgJzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhe31ie31jJy5mb3JtYXQoMCwgMSksICdhMGIxYycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXs6e319YicuZm9ybWF0KCd4JywgJ14xMCcpLCAnYSAgICB4ICAgICBiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXs6e314fWInLmZvcm1hdCgyMCwgJyMnKSwgJ2EweDE0YicpCisKKyAgICAgICAgIyBjYW4ndCBtaXggYW5kIG1hdGNoIG51bWJlcmluZyBhbmQgYXV0by1udW1iZXJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ3t9ezF9Jy5mb3JtYXQsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICd7MX17fScuZm9ybWF0LCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAnezp7MX19Jy5mb3JtYXQsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICd7MDp7fX0nLmZvcm1hdCwgMSwgMikKKworICAgICAgICAjIGNhbiBtaXggYW5kIG1hdGNoIGF1dG8tbnVtYmVyaW5nIGFuZCBuYW1lZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7Zn17fScuZm9ybWF0KDQsIGY9J3Rlc3QnKSwgJ3Rlc3Q0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne317Zn0nLmZvcm1hdCg0LCBmPSd0ZXN0JyksICc0dGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6e2Z9fXtnfXt9Jy5mb3JtYXQoMSwgMywgZz0nZycsIGY9MiksICcgMWczJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne2Y6e319e317Z30nLmZvcm1hdCgyLCA0LCBmPTEsIGc9J2cnKSwgJyAxNGcnKQorCiAgICAgZGVmIHRlc3RfYnVmZmVyX2lzX3JlYWRvbmx5KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5zdGRpbi5yZWFkaW50bywgYiIiKQogCisgICAgZGVmIHRlc3RfZW5jb2RlX2FuZF9kZWNvZGVfa3dhcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmNkZScuZW5jb2RlKCdhc2NpaScsICdyZXBsYWNlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FiY2RlJy5lbmNvZGUoJ2FzY2lpJywgZXJyb3JzPSdyZXBsYWNlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiY2RlJy5lbmNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhYmNkZScuZW5jb2RlKGVuY29kaW5nPSdhc2NpaScsIGVycm9ycz0naWdub3JlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0FuZHJcMjAyIHgnLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuZHJcMjAyIHgnLmRlY29kZSgnYXNjaWknLCBlcnJvcnM9J2lnbm9yZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBbmRyXDIwMiB4Jy5kZWNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQW5kclwyMDIgeCcuZGVjb2RlKGVuY29kaW5nPSdhc2NpaScsIGVycm9ycz0ncmVwbGFjZScpKQorCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RyVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggOTMyOGRiMC4uYjI2ZWJlYwotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKQEAgLTQsNyArNCw2IEBACiAKIGltcG9ydCBjYWxlbmRhcgogaW1wb3J0IHN5cwotaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBpbXBvcnQgdGltZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQppbmRleCA0ODY3N2UwLi43OTQ3ZTQzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQpAQCAtMjAyLDEzICsyMDIsMTMgQEAKIGNsYXNzIEJ5dGVzQWxpYXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2J1aWx0aW4oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHIgaXMgYnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIgaXMgYnl0ZXMpCiAKICAgICBkZWYgdGVzdF9zeW50YXgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJzcGFtIiwgInNwYW0iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJyImVnZ1xmb28iLCAiZWdnXFxmb28iKQotICAgICAgICBzZWxmLmFzc2VydF8odHlwZShiIiIpLCBzdHIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKGJyIiIpLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGIiIiksIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYnIiIiksIHN0cikKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RyaW5nVGVzdCwgTW9kdWxlVGVzdCwgQnl0ZXNBbGlhc1Rlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cmluZ3ByZXAucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmluZ3ByZXAucHkKaW5kZXggNjA0MjVkZC4uMTViZGY4NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJpbmdwcmVwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RyaW5ncHJlcC5weQpAQCAtOCw2NiArOCw2NiBAQAogCiBjbGFzcyBTdHJpbmdwcmVwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYTEodSJcdTAyMjEiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYTEodSJcdTAyMjIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2ExKHUiXHUwMjIxIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYTEodSJcdTAyMjIiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYjEodSJcdTAwYWQiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYjEodSJcdTAwYWUiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2IxKHUiXHUwMGFkIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYjEodSJcdTAwYWUiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobWFwX3RhYmxlX2IyKHUiXHUwMDQxIiksIHUiXHUwMDYxIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1hcF90YWJsZV9iMih1Ilx1MDA2MSIpLCB1Ilx1MDA2MSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXBfdGFibGVfYjIodSJcdTAwNDEiKSwgdSJcdTAwNjEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFwX3RhYmxlX2IyKHUiXHUwMDYxIiksIHUiXHUwMDYxIikKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobWFwX3RhYmxlX2IzKHUiXHUwMDQxIiksIHUiXHUwMDYxIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1hcF90YWJsZV9iMyh1Ilx1MDA2MSIpLCB1Ilx1MDA2MSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXBfdGFibGVfYjModSJcdTAwNDEiKSwgdSJcdTAwNjEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFwX3RhYmxlX2IzKHUiXHUwMDYxIiksIHUiXHUwMDYxIikKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzExKHUiXHUwMDIwIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2MxMSh1Ilx1MDAyMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzExKHUiXHUwMDIwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzExKHUiXHUwMDIxIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2MxMih1Ilx1MDBhMCIpKQotICAgICAgICBzZWxmLmZhaWxJZihpbl90YWJsZV9jMTIodSJcdTAwYTEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2MxMih1Ilx1MDBhMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MxMih1Ilx1MDBhMSIpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpbl90YWJsZV9jMTIodSJcdTAwYTAiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzEyKHUiXHUwMGExIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMTIodSJcdTAwYTAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jMTIodSJcdTAwYTEiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzExX2MxMih1Ilx1MDBhMCIpKQotICAgICAgICBzZWxmLmZhaWxJZihpbl90YWJsZV9jMTFfYzEyKHUiXHUwMGExIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMTFfYzEyKHUiXHUwMGEwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzExX2MxMih1Ilx1MDBhMSIpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpbl90YWJsZV9jMjEodSJcdTAwMWYiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzIxKHUiXHUwMDIwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMjEodSJcdTAwMWYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jMjEodSJcdTAwMjAiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzIyKHUiXHUwMDlmIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2MyMih1Ilx1MDBhMCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzIyKHUiXHUwMDlmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzIyKHUiXHUwMGEwIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2MyMV9jMjIodSJcdTAwOWYiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzIxX2MyMih1Ilx1MDBhMCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzIxX2MyMih1Ilx1MDA5ZiIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MyMV9jMjIodSJcdTAwYTAiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzModSJcdWUwMDAiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzModSJcdWY5MDAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2MzKHUiXHVlMDAwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzModSJcdWY5MDAiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzQodSJcdWZmZmYiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzQodSJcdTAwMDAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2M0KHUiXHVmZmZmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzQodSJcdTAwMDAiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzUodSJcdWQ4MDAiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzUodSJcdWQ3ZmYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2M1KHUiXHVkODAwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzUodSJcdWQ3ZmYiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzYodSJcdWZmZjkiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzYodSJcdWZmZmUiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2M2KHUiXHVmZmY5IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzYodSJcdWZmZmUiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzcodSJcdTJmZjAiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzcodSJcdTJmZmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2M3KHUiXHUyZmYwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzcodSJcdTJmZmMiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzgodSJcdTAzNDAiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzgodSJcdTAzNDIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2M4KHUiXHUwMzQwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzgodSJcdTAzNDIiKSkKIAogICAgICAgICAjIEMuOSBpcyBub3QgaW4gdGhlIGJtcAotICAgICAgICAjIHNlbGYuZmFpbFVubGVzcyhpbl90YWJsZV9jOSh1IlxVMDAwRTAwMDEiKSkKLSAgICAgICAgIyBzZWxmLmZhaWxJZihpbl90YWJsZV9jOCh1IlxVMDAwRTAwMDIiKSkKKyAgICAgICAgIyBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzkodSJcVTAwMEUwMDAxIikpCisgICAgICAgICMgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jOCh1IlxVMDAwRTAwMDIiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfZDEodSJcdTA1YmUiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfZDEodSJcdTA1YmYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2QxKHUiXHUwNWJlIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfZDEodSJcdTA1YmYiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfZDIodSJcdTAwNDEiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfZDIodSJcdTAwNDAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2QyKHUiXHUwMDQxIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfZDIodSJcdTAwNDAiKSkKIAogICAgICAgICAjIFRoaXMgd291bGQgZ2VuZXJhdGUgYSBoYXNoIG9mIGFsbCBwcmVkaWNhdGVzLiBIb3dldmVyLCBydW5uaW5nCiAgICAgICAgICMgaXQgaXMgcXVpdGUgZXhwZW5zaXZlLCBhbmQgb25seSBzZXJ2ZXMgdG8gZGV0ZWN0IGNoYW5nZXMgaW4gdGhlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cm9wLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJvcC5weQppbmRleCA3Y2RhODNmLi44Y2UyOWVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cm9wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3Ryb3AucHkKQEAgLTEwLDEwNCArMTAsMTA0IEBACiBjbGFzcyBTdHJvcEZ1bmN0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYXRvaShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmF0b2koIiAxICIpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5hdG9pKCIgMSAiKSA9PSAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJvcC5hdG9pLCAiIDF4IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Ryb3AuYXRvaSwgIiB4MSAiKQogCiAgICAgZGVmIHRlc3RfYXRvbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmF0b2woIiAxICIpID09IDFMKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuYXRvbCgiIDEgIikgPT0gMUwpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cm9wLmF0b2wsICIgMXgiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJvcC5hdG9sLCAiIHgxICIpCiAKICAgICBkZWYgdGVzdF9hdG9mKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AuYXRvZigiIDEgIikgPT0gMS4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuYXRvZigiIDEgIikgPT0gMS4wKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJvcC5hdG9mLCAiIDF4IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Ryb3AuYXRvZiwgIiB4MSAiKQogCiAgICAgZGVmIHRlc3RfY2FwaXRhbGl6ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmNhcGl0YWxpemUoIiBoZWxsbyAiKSA9PSAiIGhlbGxvICIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5jYXBpdGFsaXplKCJoZWxsbyAiKSA9PSAiSGVsbG8gIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmNhcGl0YWxpemUoIiBoZWxsbyAiKSA9PSAiIGhlbGxvICIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5jYXBpdGFsaXplKCJoZWxsbyAiKSA9PSAiSGVsbG8gIikKIAogICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5maW5kKCJhYmNkZWZnaGlhYmMiLCAiYWJjIikgPT0gMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmZpbmQoImFiY2RlZmdoaWFiYyIsICJhYmMiLCAxKSA9PSA5KQotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AuZmluZCgiYWJjZGVmZ2hpYWJjIiwgImRlZiIsIDQpID09IC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuZmluZCgiYWJjZGVmZ2hpYWJjIiwgImFiYyIpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5maW5kKCJhYmNkZWZnaGlhYmMiLCAiYWJjIiwgMSkgPT0gOSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmZpbmQoImFiY2RlZmdoaWFiYyIsICJkZWYiLCA0KSA9PSAtMSkKIAogICAgIGRlZiB0ZXN0X3JmaW5kKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AucmZpbmQoImFiY2RlZmdoaWFiYyIsICJhYmMiKSA9PSA5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AucmZpbmQoImFiY2RlZmdoaWFiYyIsICJhYmMiKSA9PSA5KQogCiAgICAgZGVmIHRlc3RfbG93ZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5sb3dlcigiSGVMTG8iKSA9PSAiaGVsbG8iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AubG93ZXIoIkhlTExvIikgPT0gImhlbGxvIikKIAogICAgIGRlZiB0ZXN0X3VwcGVyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AudXBwZXIoIkhlTExvIikgPT0gIkhFTExPIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLnVwcGVyKCJIZUxMbyIpID09ICJIRUxMTyIpCiAKICAgICBkZWYgdGVzdF9zd2FwY2FzZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLnN3YXBjYXNlKCJIZUxMbyBjT21wVXRlUnMiKSA9PSAiaEVsbE8gQ29NUHVURXJTIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLnN3YXBjYXNlKCJIZUxMbyBjT21wVXRlUnMiKSA9PSAiaEVsbE8gQ29NUHVURXJTIikKIAogICAgIGRlZiB0ZXN0X3N0cmlwKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3Auc3RyaXAoIiBcdFxuIGhlbGxvIFx0XG4gIikgPT0gImhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLnN0cmlwKCIgXHRcbiBoZWxsbyBcdFxuICIpID09ICJoZWxsbyIpCiAKICAgICBkZWYgdGVzdF9sc3RyaXAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5sc3RyaXAoIiBcdFxuIGhlbGxvIFx0XG4gIikgPT0gImhlbGxvIFx0XG4gIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmxzdHJpcCgiIFx0XG4gaGVsbG8gXHRcbiAiKSA9PSAiaGVsbG8gXHRcbiAiKQogCiAgICAgZGVmIHRlc3RfcnN0cmlwKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AucnN0cmlwKCIgXHRcbiBoZWxsbyBcdFxuICIpID09ICIgXHRcbiBoZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5yc3RyaXAoIiBcdFxuIGhlbGxvIFx0XG4gIikgPT0gIiBcdFxuIGhlbGxvIikKIAogICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CiAgICAgICAgIHJlcGxhY2UgPSBzdHJvcC5yZXBsYWNlCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgMSkKICAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvIXRocmVlISIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgMikKICAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvQHRocmVlISIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnLCAzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgMykKICAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvQHRocmVlQCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnLCA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgNCkKICAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvQHRocmVlQCIpCiAKICAgICAgICAgIyBDQVVUSU9OOiBhIHJlcGxhY2UgY291bnQgb2YgMCBtZWFucyBpbmZpbml0eSBvbmx5IHRvIHN0cm9wLAogICAgICAgICAjIG5vdCB0byB0aGUgc3RyaW5nIC5yZXBsYWNlKCkgbWV0aG9kIG9yIHRvIHRoZQogICAgICAgICAjIHN0cmluZy5yZXBsYWNlKCkgZnVuY3Rpb24uCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJyEnLCAnQCcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnLCAwKQogICAgICAgICAgICAgICAgICAgICAgPT0gIm9uZUB0d29AdGhyZWVAIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJyEnLCAnQCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnKQogICAgICAgICAgICAgICAgICAgICAgPT0gIm9uZUB0d29AdGhyZWVAIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJ3gnLCAnQCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICd4JywgJ0AnKQogICAgICAgICAgICAgICAgICAgICAgPT0gIm9uZSF0d28hdGhyZWUhIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJ3gnLCAnQCcsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICd4JywgJ0AnLCAyKQogICAgICAgICAgICAgICAgICAgICAgPT0gIm9uZSF0d28hdGhyZWUhIikKIAogICAgIGRlZiB0ZXN0X3NwbGl0KHNlbGYpOgogICAgICAgICBzcGxpdCA9IHN0cm9wLnNwbGl0Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzcGxpdCgidGhpcyBpcyB0aGUgc3BsaXQgZnVuY3Rpb24iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoInRoaXMgaXMgdGhlIHNwbGl0IGZ1bmN0aW9uIikKICAgICAgICAgICAgICAgICAgICAgID09IFsndGhpcycsICdpcycsICd0aGUnLCAnc3BsaXQnLCAnZnVuY3Rpb24nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNwbGl0KCJhfGJ8Y3xkIiwgJ3wnKSA9PSBbJ2EnLCAnYicsICdjJywgJ2QnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNwbGl0KCJhfGJ8Y3xkIiwgJ3wnLCAyKSA9PSBbJ2EnLCAnYicsICdjfGQnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNwbGl0KCJhIGIgYyBkIiwgTm9uZSwgMSkgPT0gWydhJywgJ2IgYyBkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDIpID09IFsnYScsICdiJywgJ2MgZCddKQotICAgICAgICBzZWxmLmFzc2VydF8oc3BsaXQoImEgYiBjIGQiLCBOb25lLCAzKSA9PSBbJ2EnLCAnYicsICdjJywgJ2QnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNwbGl0KCJhIGIgYyBkIiwgTm9uZSwgNCkgPT0gWydhJywgJ2InLCAnYycsICdkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDApID09IFsnYScsICdiJywgJ2MnLCAnZCddKQotICAgICAgICBzZWxmLmFzc2VydF8oc3BsaXQoImEgIGIgIGMgIGQiLCBOb25lLCAyKSA9PSAgWydhJywgJ2InLCAnYyAgZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoImF8YnxjfGQiLCAnfCcpID09IFsnYScsICdiJywgJ2MnLCAnZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoImF8YnxjfGQiLCAnfCcsIDIpID09IFsnYScsICdiJywgJ2N8ZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoImEgYiBjIGQiLCBOb25lLCAxKSA9PSBbJ2EnLCAnYiBjIGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhIGIgYyBkIiwgTm9uZSwgMikgPT0gWydhJywgJ2InLCAnYyBkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDMpID09IFsnYScsICdiJywgJ2MnLCAnZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoImEgYiBjIGQiLCBOb25lLCA0KSA9PSBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhIGIgYyBkIiwgTm9uZSwgMCkgPT0gWydhJywgJ2InLCAnYycsICdkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGxpdCgiYSAgYiAgYyAgZCIsIE5vbmUsIDIpID09ICBbJ2EnLCAnYicsICdjICBkJ10pCiAKICAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3Auam9pbihbJ2EnLCAnYicsICdjJywgJ2QnXSkgPT0gJ2EgYiBjIGQnKQotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3Auam9pbigoJ2EnLCAnYicsICdjJywgJ2QnKSwgJycpID09ICdhYmNkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmpvaW4oU2VxdWVuY2UoKSkgPT0gJ3cgeCB5IHonKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3Auam9pbihbJ2EnLCAnYicsICdjJywgJ2QnXSkgPT0gJ2EgYiBjIGQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3Auam9pbigoJ2EnLCAnYicsICdjJywgJ2QnKSwgJycpID09ICdhYmNkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmpvaW4oU2VxdWVuY2UoKSkgPT0gJ3cgeCB5IHonKQogCiAgICAgICAgICMgdHJ5IGEgZmV3IGxvbmcgb25lcwotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3Auam9pbihbJ3gnICogMTAwXSAqIDEwMCwgJzonKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3Auam9pbihbJ3gnICogMTAwXSAqIDEwMCwgJzonKQogICAgICAgICAgICAgICAgICAgICAgPT0gKCgneCcgKiAxMDApICsgIjoiKSAqIDk5ICsgIngiICogMTAwKQotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3Auam9pbigoJ3gnICogMTAwLCkgKiAxMDAsICc6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmpvaW4oKCd4JyAqIDEwMCwpICogMTAwLCAnOicpCiAgICAgICAgICAgICAgICAgICAgICA9PSAoKCd4JyAqIDEwMCkgKyAiOiIpICogOTkgKyAieCIgKiAxMDApCiAKICAgICBkZWYgdGVzdF9tYWtldHJhbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5tYWtldHJhbnMoImFiYyIsICJ4eXoiKSA9PSB0cmFuc3RhYmxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AubWFrZXRyYW5zKCJhYmMiLCAieHl6IikgPT0gdHJhbnN0YWJsZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Ryb3AubWFrZXRyYW5zLCAiYWJjIiwgInh5enEiKQogCiAgICAgZGVmIHRlc3RfdHJhbnNsYXRlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AudHJhbnNsYXRlKCJ4eXphYmNkZWYiLCB0cmFuc3RhYmxlLCAiZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLnRyYW5zbGF0ZSgieHl6YWJjZGVmIiwgdHJhbnN0YWJsZSwgImRlZiIpCiAgICAgICAgICAgICAgICAgICAgICA9PSAieHl6eHl6IikKIAogICAgIGRlZiB0ZXN0X2RhdGFfYXR0cmlidXRlcyhzZWxmKToKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihyKSwgbGVuKGEpICogMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLCBsZW4oYSkgKiAzKQogCiAgICAgQHRlc3Rfc3VwcG9ydC5wcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9dGVzdF9zdXBwb3J0Ll8yRyAtIDEsIG1lbXVzZT0xKQogICAgIGRlZiB0ZXN0X3N0cm9wam9pbl9odWdlX3R1cChzZWxmLCBzaXplKToKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICAgICAgIHBhc3MgIyBhY2NlcHRhYmxlIG9uIDMyLWJpdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHIpLCBsZW4oYSkgKiAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksIGxlbihhKSAqIDMpCiAKIHRyYW5zdGFibGUgPSAnXDAwMFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzcgISIjJCUmXCcoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9geHl6ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XDE3N1wyMDBcMjAxXDIwMlwyMDNcMjA0XDIwNVwyMDZcMjA3XDIxMFwyMTFcMjEyXDIxM1wyMTRcMjE1XDIxNlwyMTdcMjIwXDIyMVwyMjJcMjIzXDIyNFwyMjVcMjI2XDIyN1wyMzBcMjMxXDIzMlwyMzNcMjM0XDIzNVwyMzZcMjM3XDI0MFwyNDFcMjQyXDI0M1wyNDRcMjQ1XDI0NlwyNDdcMjUwXDI1MVwyNTJcMjUzXDI1NFwyNTVcMjU2XDI1N1wyNjBcMjYxXDI2MlwyNjNcMjY0XDI2NVwyNjZcMjY3XDI3MFwyNzFcMjcyXDI3M1wyNzRcMjc1XDI3NlwyNzdcMzAwXDMwMVwzMDJcMzAzXDMwNFwzMDVcMzA2XDMwN1wzMTBcMzExXDMxMlwzMTNcMzE0XDMxNVwzMTZcMzE3XDMyMFwzMjFcMzIyXDMyM1wzMjRcMzI1XDMyNlwzMjdcMzMwXDMzMVwzMzJcMzMzXDMzNFwzMzVcMzM2XDMzN1wzNDBcMzQxXDM0MlwzNDNcMzQ0XDM0NVwzNDZcMzQ3XDM1MFwzNTFcMzUyXDM1M1wzNTRcMzU1XDM1NlwzNTdcMzYwXDM2MVwzNjJcMzYzXDM2NFwzNjVcMzY2XDM2N1wzNzBcMzcxXDM3MlwzNzNcMzc0XDM3NVwzNzZcMzc3JwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnB0aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJwdGltZS5weQppbmRleCBkZjBkYzg2Li5hMjMzYjFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnB0aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkKQEAgLTEzLDcgKzEzLDcgQEAKIGNsYXNzIGdldGxhbmdfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3QgX2dldGxhbmciIiIKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoX3N0cnB0aW1lLl9nZXRsYW5nKCksIGxvY2FsZS5nZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9zdHJwdGltZS5fZ2V0bGFuZygpLCBsb2NhbGUuZ2V0bG9jYWxlKGxvY2FsZS5MQ19USU1FKSkKIAogY2xhc3MgTG9jYWxlVGltZV9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgZm9yIF9zdHJwdGltZS5Mb2NhbGVUaW1lLgpAQCAtMzYsOSArMzYsOSBAQAogICAgICAgICAiIiIKICAgICAgICAgc3RyZnRpbWVfb3V0cHV0ID0gdGltZS5zdHJmdGltZShkaXJlY3RpdmUsIHNlbGYudGltZV90dXBsZSkubG93ZXIoKQogICAgICAgICBjb21wYXJpc29uID0gdGVzdGluZ1tzZWxmLnRpbWVfdHVwbGVbdHVwbGVfcG9zaXRpb25dXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyZnRpbWVfb3V0cHV0IGluIHRlc3RpbmcsICIlczogbm90IGZvdW5kIGluIHR1cGxlIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY29tcGFyaXNvbiA9PSBzdHJmdGltZV9vdXRwdXQsCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyZnRpbWVfb3V0cHV0LCB0ZXN0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICIlczogbm90IGZvdW5kIGluIHR1cGxlIiAlIGVycm9yX21zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBhcmlzb24gPT0gc3RyZnRpbWVfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBwb3NpdGlvbiB3aXRoaW4gdHVwbGUgaW5jb3JyZWN0OyAlcyAhPSAlcyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yX21zZywgY29tcGFyaXNvbiwgc3RyZnRpbWVfb3V0cHV0KSkKIApAQCAtNjEsMTggKzYxLDE4IEBACiAgICAgZGVmIHRlc3RfYW1fcG0oc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIEFNL1BNIHJlcHJlc2VudGF0aW9uIGRvbmUgcHJvcGVybHkKICAgICAgICAgc3RyZnRpbWVfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJXAiLCBzZWxmLnRpbWVfdHVwbGUpLmxvd2VyKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cmZ0aW1lX291dHB1dCBpbiBzZWxmLkxUX2lucy5hbV9wbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJBTS9QTSByZXByZXNlbnRhdGlvbiBub3QgaW4gdHVwbGUiKQorICAgICAgICBzZWxmLmFzc2VydEluKHN0cmZ0aW1lX291dHB1dCwgc2VsZi5MVF9pbnMuYW1fcG0sCisgICAgICAgICAgICAgICAgICAgICAgIkFNL1BNIHJlcHJlc2VudGF0aW9uIG5vdCBpbiB0dXBsZSIpCiAgICAgICAgIGlmIHNlbGYudGltZV90dXBsZVszXSA8IDEyOiBwb3NpdGlvbiA9IDAKICAgICAgICAgZWxzZTogcG9zaXRpb24gPSAxCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJmdGltZV9vdXRwdXQgPT0gc2VsZi5MVF9pbnMuYW1fcG1bcG9zaXRpb25dLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyZnRpbWVfb3V0cHV0ID09IHNlbGYuTFRfaW5zLmFtX3BtW3Bvc2l0aW9uXSwKICAgICAgICAgICAgICAgICAgICAgICAgICJBTS9QTSByZXByZXNlbnRhdGlvbiBpbiB0aGUgd3JvbmcgcG9zaXRpb24gd2l0aGluIHRoZSB0dXBsZSIpCiAKICAgICBkZWYgdGVzdF90aW1lem9uZShzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgdGltZXpvbmUgaXMgY29ycmVjdAogICAgICAgICB0aW1lem9uZSA9IHRpbWUuc3RyZnRpbWUoIiVaIiwgc2VsZi50aW1lX3R1cGxlKS5sb3dlcigpCiAgICAgICAgIGlmIHRpbWV6b25lOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHRpbWV6b25lIGluIHNlbGYuTFRfaW5zLnRpbWV6b25lWzBdIG9yIFwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lem9uZSBpbiBzZWxmLkxUX2lucy50aW1lem9uZVswXSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIGluIHNlbGYuTFRfaW5zLnRpbWV6b25lWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lem9uZSAlcyBub3QgZm91bmQgaW4gJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGltZXpvbmUsIHNlbGYuTFRfaW5zLnRpbWV6b25lKSkKQEAgLTg2LDI2ICs4NiwyNiBAQAogICAgICAgICAjICBvdXRwdXQuCiAgICAgICAgIG1hZ2ljX2RhdGUgPSAoMTk5OSwgMywgMTcsIDIyLCA0NCwgNTUsIDIsIDc2LCAwKQogICAgICAgICBzdHJmdGltZV9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlYyIsIG1hZ2ljX2RhdGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJmdGltZV9vdXRwdXQgPT0gdGltZS5zdHJmdGltZShzZWxmLkxUX2lucy5MQ19kYXRlX3RpbWUsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJmdGltZV9vdXRwdXQgPT0gdGltZS5zdHJmdGltZShzZWxmLkxUX2lucy5MQ19kYXRlX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdpY19kYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJMQ19kYXRlX3RpbWUgaW5jb3JyZWN0IikKICAgICAgICAgc3RyZnRpbWVfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJXgiLCBtYWdpY19kYXRlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyZnRpbWVfb3V0cHV0ID09IHRpbWUuc3RyZnRpbWUoc2VsZi5MVF9pbnMuTENfZGF0ZSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmZ0aW1lX291dHB1dCA9PSB0aW1lLnN0cmZ0aW1lKHNlbGYuTFRfaW5zLkxDX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdpY19kYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJMQ19kYXRlIGluY29ycmVjdCIpCiAgICAgICAgIHN0cmZ0aW1lX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiVYIiwgbWFnaWNfZGF0ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cmZ0aW1lX291dHB1dCA9PSB0aW1lLnN0cmZ0aW1lKHNlbGYuTFRfaW5zLkxDX3RpbWUsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJmdGltZV9vdXRwdXQgPT0gdGltZS5zdHJmdGltZShzZWxmLkxUX2lucy5MQ190aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWNfZGF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTENfdGltZSBpbmNvcnJlY3QiKQogICAgICAgICBMVCA9IF9zdHJwdGltZS5Mb2NhbGVUaW1lKCkKICAgICAgICAgTFQuYW1fcG0gPSAoJycsICcnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoTFQuTENfdGltZSwgIkxvY2FsZVRpbWUncyBMQyBkaXJlY3RpdmVzIGNhbm5vdCBoYW5kbGUgIgorICAgICAgICBzZWxmLmFzc2VydFRydWUoTFQuTENfdGltZSwgIkxvY2FsZVRpbWUncyBMQyBkaXJlY3RpdmVzIGNhbm5vdCBoYW5kbGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVtcHR5IHN0cmluZ3MiKQogCiAgICAgZGVmIHRlc3RfbGFuZyhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgbGFuZyBpcyBzZXQgdG8gd2hhdCBfZ2V0bGFuZygpIHJldHVybnMKICAgICAgICAgIyBBc3N1bWluZyBsb2NhbGUgaGFzIG5vdCBjaGFuZ2VkIGJldHdlZW4gbm93IGFuZCB3aGVuIHNlbGYuTFRfaW5zIHdhcyBjcmVhdGVkCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuTFRfaW5zLmxhbmcsIF9zdHJwdGltZS5fZ2V0bGFuZygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuTFRfaW5zLmxhbmcsIF9zdHJwdGltZS5fZ2V0bGFuZygpKQogCiAKIGNsYXNzIFRpbWVSRVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTExOSwxMyArMTE5LDEzIEBACiAgICAgZGVmIHRlc3RfcGF0dGVybihzZWxmKToKICAgICAgICAgIyBUZXN0IFRpbWVSRS5wYXR0ZXJuCiAgICAgICAgIHBhdHRlcm5fc3RyaW5nID0gc2VsZi50aW1lX3JlLnBhdHRlcm4ociIlYSAlQSAlZCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhwYXR0ZXJuX3N0cmluZy5maW5kKHNlbGYubG9jYWxlX3RpbWUuYV93ZWVrZGF5WzJdKSAhPSAtMSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdHRlcm5fc3RyaW5nLmZpbmQoc2VsZi5sb2NhbGVfdGltZS5hX3dlZWtkYXlbMl0pICE9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgZmluZCBhYmJyZXZpYXRlZCB3ZWVrZGF5IGluIHBhdHRlcm4gc3RyaW5nICclcyciICUKICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuX3N0cmluZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHBhdHRlcm5fc3RyaW5nLmZpbmQoc2VsZi5sb2NhbGVfdGltZS5mX3dlZWtkYXlbNF0pICE9IC0xLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0dGVybl9zdHJpbmcuZmluZChzZWxmLmxvY2FsZV90aW1lLmZfd2Vla2RheVs0XSkgIT0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZGlkIG5vdCBmaW5kIGZ1bGwgd2Vla2RheSBpbiBwYXR0ZXJuIHN0cmluZyAnJXMnIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybl9zdHJpbmcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhwYXR0ZXJuX3N0cmluZy5maW5kKHNlbGYudGltZV9yZVsnZCddKSAhPSAtMSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdHRlcm5fc3RyaW5nLmZpbmQoc2VsZi50aW1lX3JlWydkJ10pICE9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgZmluZCAnZCcgZGlyZWN0aXZlIHBhdHRlcm4gc3RyaW5nICclcyciICUKICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuX3N0cmluZykKIApAQCAtMTMzLDIzICsxMzMsMjMgQEAKICAgICAgICAgIyBNYWtlIHN1cmUgYW55IGNoYXJhY3RlcnMgaW4gdGhlIGZvcm1hdCBzdHJpbmcgdGhhdCBtaWdodCBiZSB0YWtlbiBhcwogICAgICAgICAjIHJlZ2V4IHN5bnRheCBpcyBlc2NhcGVkLgogICAgICAgICBwYXR0ZXJuX3N0cmluZyA9IHNlbGYudGltZV9yZS5wYXR0ZXJuKCJcZCsiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MociJcXGRcKyIgaW4gcGF0dGVybl9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXMgZG9lcyBub3QgaGF2ZSByZSBjaGFyYWN0ZXJzIGVzY2FwZWQgcHJvcGVybHkiICUKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5fc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEluKHIiXFxkXCsiLCBwYXR0ZXJuX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAiJXMgZG9lcyBub3QgaGF2ZSByZSBjaGFyYWN0ZXJzIGVzY2FwZWQgcHJvcGVybHkiICUKKyAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuX3N0cmluZykKIAogICAgIGRlZiB0ZXN0X2NvbXBpbGUoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBjb21waWxlZCByZWdleCBpcyBjb3JyZWN0CiAgICAgICAgIGZvdW5kID0gc2VsZi50aW1lX3JlLmNvbXBpbGUociIlQSIpLm1hdGNoKHNlbGYubG9jYWxlX3RpbWUuZl93ZWVrZGF5WzZdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZm91bmQgYW5kIGZvdW5kLmdyb3VwKCdBJykgPT0gc2VsZi5sb2NhbGVfdGltZS5mX3dlZWtkYXlbNl0sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCBhbmQgZm91bmQuZ3JvdXAoJ0EnKSA9PSBzZWxmLmxvY2FsZV90aW1lLmZfd2Vla2RheVs2XSwKICAgICAgICAgICAgICAgICAgICAgICAgICJyZSBvYmplY3QgZm9yICclQScgZmFpbGVkIikKICAgICAgICAgY29tcGlsZWQgPSBzZWxmLnRpbWVfcmUuY29tcGlsZShyIiVhICViIikKICAgICAgICAgZm91bmQgPSBjb21waWxlZC5tYXRjaCgiJXMgJXMiICUgKHNlbGYubG9jYWxlX3RpbWUuYV93ZWVrZGF5WzRdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9jYWxlX3RpbWUuYV9tb250aFs0XSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmb3VuZCwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLAogICAgICAgICAgICAgIk1hdGNoIGZhaWxlZCB3aXRoICclcycgcmVnZXggYW5kICclcycgc3RyaW5nIiAlCiAgICAgICAgICAgICAgKGNvbXBpbGVkLnBhdHRlcm4sICIlcyAlcyIgJSAoc2VsZi5sb2NhbGVfdGltZS5hX3dlZWtkYXlbNF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NhbGVfdGltZS5hX21vbnRoWzRdKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmb3VuZC5ncm91cCgnYScpID09IHNlbGYubG9jYWxlX3RpbWUuYV93ZWVrZGF5WzRdIGFuZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQuZ3JvdXAoJ2EnKSA9PSBzZWxmLmxvY2FsZV90aW1lLmFfd2Vla2RheVs0XSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZC5ncm91cCgnYicpID09IHNlbGYubG9jYWxlX3RpbWUuYV9tb250aFs0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICJyZSBvYmplY3QgY291bGRuJ3QgZmluZCB0aGUgYWJicmV2aWF0ZWQgd2Vla2RheSBtb250aCBpbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgdXNpbmcgJyVzJzsgZ3JvdXAgJ2EnID0gJyVzJywgZ3JvdXAgJ2InID0gJXMnIiAlCkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1UnLCd3JywnVycsJ3gnLCdYJywneScsJ1knLCdaJywnJScpOgogICAgICAgICAgICAgY29tcGlsZWQgPSBzZWxmLnRpbWVfcmUuY29tcGlsZSgiJSIgKyBkaXJlY3RpdmUpCiAgICAgICAgICAgICBmb3VuZCA9IGNvbXBpbGVkLm1hdGNoKHRpbWUuc3RyZnRpbWUoIiUiICsgZGlyZWN0aXZlKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhmb3VuZCwgIk1hdGNoaW5nIGZhaWxlZCBvbiAnJXMnIHVzaW5nICclcycgcmVnZXgiICUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwgIk1hdGNoaW5nIGZhaWxlZCBvbiAnJXMnIHVzaW5nICclcycgcmVnZXgiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lLnN0cmZ0aW1lKCIlIiArIGRpcmVjdGl2ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQucGF0dGVybikpCiAKQEAgLTE2OCwxNCArMTY4LDE0IEBACiAgICAgICAgICMgRml4ZXMgYnVnICM2NjEzNTQKICAgICAgICAgdGVzdF9sb2NhbGUgPSBfc3RycHRpbWUuTG9jYWxlVGltZSgpCiAgICAgICAgIHRlc3RfbG9jYWxlLnRpbWV6b25lID0gKGZyb3plbnNldCgpLCBmcm96ZW5zZXQoKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKF9zdHJwdGltZS5UaW1lUkUodGVzdF9sb2NhbGUpLnBhdHRlcm4oIiVaIikgPT0gJycsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfc3RycHRpbWUuVGltZVJFKHRlc3RfbG9jYWxlKS5wYXR0ZXJuKCIlWiIpID09ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggdGltZXpvbmUgPT0gKCcnLCcnKSwgVGltZVJFKCkucGF0dGVybignJVonKSAhPSAnJyIpCiAKICAgICBkZWYgdGVzdF9tYXRjaGluZ193aXRoX2VzY2FwZXMoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIGEgZm9ybWF0IHRoYXQgcmVxdWlyZXMgZXNjYXBpbmcgb2YgY2hhcmFjdGVycyB3b3JrcwogICAgICAgICBjb21waWxlZF9yZSA9IHNlbGYudGltZV9yZS5jb21waWxlKCJcdysgJW0iKQogICAgICAgICBmb3VuZCA9IGNvbXBpbGVkX3JlLm1hdGNoKCJcdysgMTAiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZm91bmQsICJFc2NhcGluZyBmYWlsZWQgb2YgZm9ybWF0ICdcdysgMTAnIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAiRXNjYXBpbmcgZmFpbGVkIG9mIGZvcm1hdCAnXHcrIDEwJyIpCiAKICAgICBkZWYgdGVzdF9sb2NhbGVfZGF0YV93X3JlZ2V4X21ldGFjaGFyYWN0ZXJzKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgaWYgbG9jYWxlIGRhdGEgY29udGFpbnMgcmVnZXggbWV0YWNoYXJhY3RlcnMgdGhleSBhcmUKQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG9reW8gKHN0YW5kYXJkIHRpbWUpIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoIlRva3lvIChkYXlsaWdodCB0aW1lKSIpKQogICAgICAgICB0aW1lX3JlID0gX3N0cnB0aW1lLlRpbWVSRShsb2NhbGVfdGltZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHRpbWVfcmUuY29tcGlsZSgiJVoiKS5tYXRjaCgiVG9reW8gKHN0YW5kYXJkIHRpbWUpIiksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lX3JlLmNvbXBpbGUoIiVaIikubWF0Y2goIlRva3lvIChzdGFuZGFyZCB0aW1lKSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsZSBkYXRhIHRoYXQgY29udGFpbnMgcmVnZXggbWV0YWNoYXJhY3RlcnMgaXMgbm90IgogICAgICAgICAgICAgICAgICAgICAgICAgIiBwcm9wZXJseSBlc2NhcGVkIikKIApAQCAtMTk1LDggKzE5NSw4IEBACiAgICAgICAgICMgc28gYXMgdG8gbm90IGFsbG93IHRvIHN1YnBhdHRlcm5zIHRvIGVuZCB1cCBuZXh0IHRvIGVhY2ggb3RoZXIgYW5kCiAgICAgICAgICMgInN0ZWFsIiBjaGFyYWN0ZXJzIGZyb20gZWFjaCBvdGhlci4KICAgICAgICAgcGF0dGVybiA9IHNlbGYudGltZV9yZS5wYXR0ZXJuKCclaiAlSCcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgcmUubWF0Y2gocGF0dGVybiwgIjE4MCIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmUubWF0Y2gocGF0dGVybiwgIjE4IDAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZS5tYXRjaChwYXR0ZXJuLCAiMTgwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChwYXR0ZXJuLCAiMTggMCIpKQogCiAKIGNsYXNzIFN0cnB0aW1lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjI5LDcgKzIyOSw3IEBACiAgICAgICAgICIiIkhlbHBlciBmeG4gaW4gdGVzdGluZy4iIiIKICAgICAgICAgc3RyZl9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlIiArIGRpcmVjdGl2ZSwgc2VsZi50aW1lX3R1cGxlKQogICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dCwgIiUiICsgZGlyZWN0aXZlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RycF9vdXRwdXRbcG9zaXRpb25dID09IHNlbGYudGltZV90dXBsZVtwb3NpdGlvbl0sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJwX291dHB1dFtwb3NpdGlvbl0gPT0gc2VsZi50aW1lX3R1cGxlW3Bvc2l0aW9uXSwKICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0aW5nIG9mICclcycgZGlyZWN0aXZlIGZhaWxlZDsgJyVzJyAtPiAlcyAhPSAlcyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgIChkaXJlY3RpdmUsIHN0cmZfb3V0cHV0LCBzdHJwX291dHB1dFtwb3NpdGlvbl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZV90dXBsZVtwb3NpdGlvbl0pKQpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgICAgICBmb3IgYm91bmQgaW4gYm91bmRzOgogICAgICAgICAgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKGJvdW5kLCAnJXknKQogICAgICAgICAgICAgICAgIGV4cGVjdGVkX3Jlc3VsdCA9IGNlbnR1cnkgKyBpbnQoYm91bmQpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cnBfb3V0cHV0WzBdID09IGV4cGVjdGVkX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbMF0gPT0gZXhwZWN0ZWRfcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3knIHRlc3QgZmFpbGVkOyBwYXNzZWQgaW4gJyVzJyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgcmV0dXJuZWQgJyVzJyIgJSAoYm91bmQsIHN0cnBfb3V0cHV0WzBdKSkKIApAQCAtMjYxLDcgKzI2MSw3IEBACiAgICAgICAgIHNlbGYuaGVscGVyKCdIJywgMykKICAgICAgICAgc3RyZl9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlSSAlcCIsIHNlbGYudGltZV90dXBsZSkKICAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoc3RyZl9vdXRwdXQsICIlSSAlcCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJwX291dHB1dFszXSA9PSBzZWxmLnRpbWVfdHVwbGVbM10sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJwX291dHB1dFszXSA9PSBzZWxmLnRpbWVfdHVwbGVbM10sCiAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGluZyBvZiAnJSVJICUlcCcgZGlyZWN0aXZlIGZhaWxlZDsgJyVzJyAtPiAlcyAhPSAlcyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJmX291dHB1dCwgc3RycF9vdXRwdXRbM10sIHNlbGYudGltZV90dXBsZVszXSkpCiAKQEAgLTI5NSwzMCArMjk1LDI1IEBACiAgICAgICAgICMgQ2hlY2sgZm9yIGVxdWFsIHRpbWV6b25lIG5hbWVzIGRlYWxzIHdpdGggYmFkIGxvY2FsZSBpbmZvIHdoZW4gdGhpcwogICAgICAgICAjIG9jY3VyczsgZmlyc3QgZm91bmQgaW4gRnJlZUJTRCA0LjQuCiAgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCJVVEMiLCAiJVoiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJwX291dHB1dC50bV9pc2RzdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJwX291dHB1dC50bV9pc2RzdCwgMCkKICAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoIkdNVCIsICIlWiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cnBfb3V0cHV0LnRtX2lzZHN0LCAwKQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIm1hYyI6Ci0gICAgICAgICAgICAjIFRpbWV6b25lcyBkb24ndCByZWFsbHkgd29yayBvbiBNYWNPUzkKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnBfb3V0cHV0LnRtX2lzZHN0LCAwKQogICAgICAgICB0aW1lX3R1cGxlID0gdGltZS5sb2NhbHRpbWUoKQogICAgICAgICBzdHJmX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiVaIikgICNVVEMgZG9lcyBub3QgaGF2ZSBhIHRpbWV6b25lCiAgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0LCAiJVoiKQogICAgICAgICBsb2NhbGVfdGltZSA9IF9zdHJwdGltZS5Mb2NhbGVUaW1lKCkKICAgICAgICAgaWYgdGltZS50em5hbWVbMF0gIT0gdGltZS50em5hbWVbMV0gb3Igbm90IHRpbWUuZGF5bGlnaHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RycF9vdXRwdXRbOF0gPT0gdGltZV90dXBsZVs4XSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJwX291dHB1dFs4XSA9PSB0aW1lX3R1cGxlWzhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lem9uZSBjaGVjayBmYWlsZWQ7ICclcycgLT4gJXMgIT0gJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmZfb3V0cHV0LCBzdHJwX291dHB1dFs4XSwgdGltZV90dXBsZVs4XSkpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RycF9vdXRwdXRbOF0gPT0gLTEsCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbOF0gPT0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2FsZVRpbWUoKS50aW1lem9uZSBoYXMgZHVwbGljYXRlIHZhbHVlcyBhbmQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZS5kYXlsaWdodCBidXQgdGltZXpvbmUgdmFsdWUgbm90IHNldCB0byAtMSIpCiAKICAgICBkZWYgdGVzdF9iYWRfdGltZXpvbmUoc2VsZik6CiAgICAgICAgICMgRXhwbGljaXRseSB0ZXN0IHBvc3NpYmlsaXR5IG9mIGJhZCB0aW1lem9uZTsKICAgICAgICAgIyB3aGVuIHRpbWUudHpuYW1lWzBdID09IHRpbWUudHpuYW1lWzFdIGFuZCB0aW1lLmRheWxpZ2h0Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAibWFjIjoKLSAgICAgICAgICAgIHJldHVybiAjTWFjT1M5IGhhcyBzZXZlcmVseSBicm9rZW4gdGltZXpvbmUgc3VwcG9ydC4KICAgICAgICAgdHpfbmFtZSA9IHRpbWUudHpuYW1lWzBdCiAgICAgICAgIGlmIHR6X25hbWUudXBwZXIoKSBpbiAoIlVUQyIsICJHTVQiKToKICAgICAgICAgICAgIHJldHVybgpAQCAtMzI4LDcgKzMyMyw3IEBACiAgICAgICAgICAgICB0aW1lLnR6bmFtZSA9ICh0el9uYW1lLCB0el9uYW1lKQogICAgICAgICAgICAgdGltZS5kYXlsaWdodCA9IDEKICAgICAgICAgICAgIHR6X3ZhbHVlID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHR6X25hbWUsICIlWiIpWzhdCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0el92YWx1ZSwgLTEsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR6X3ZhbHVlLCAtMSwKICAgICAgICAgICAgICAgICAgICAgIiVzIGxlYWQgdG8gYSB0aW1lem9uZSB2YWx1ZSBvZiAlcyBpbnN0ZWFkIG9mIC0xIHdoZW4gIgogICAgICAgICAgICAgICAgICAgICAidGltZS5kYXlsaWdodCBzZXQgdG8gJXMgYW5kIHBhc3NpbmcgaW4gJXMiICUKICAgICAgICAgICAgICAgICAgICAgKHRpbWUudHpuYW1lLCB0el92YWx1ZSwgdGltZS5kYXlsaWdodCwgdHpfbmFtZSkpCkBAIC0zNTUsMjUgKzM1MCwyNSBAQAogICAgICAgICAjIE1ha2Ugc3VyZSAlIHNpZ25zIGFyZSBoYW5kbGVkIHByb3Blcmx5CiAgICAgICAgIHN0cmZfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJW0gJSUgJVkiLCBzZWxmLnRpbWVfdHVwbGUpCiAgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0LCAiJW0gJSUgJVkiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RycF9vdXRwdXRbMF0gPT0gc2VsZi50aW1lX3R1cGxlWzBdIGFuZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbMF0gPT0gc2VsZi50aW1lX3R1cGxlWzBdIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnBfb3V0cHV0WzFdID09IHNlbGYudGltZV90dXBsZVsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kbGluZyBvZiBwZXJjZW50IHNpZ24gZmFpbGVkIikKIAogICAgIGRlZiB0ZXN0X2Nhc2VpbnNlbnNpdGl2ZShzZWxmKToKICAgICAgICAgIyBTaG91bGQgaGFuZGxlIG5hbWVzIGNhc2UtaW5zZW5zaXRpdmVseS4KICAgICAgICAgc3RyZl9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlQiIsIHNlbGYudGltZV90dXBsZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dC51cHBlcigpLCAiJUIiKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dC51cHBlcigpLCAiJUIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJwdGltZSBkb2VzIG5vdCBoYW5kbGUgQUxMLUNBUFMgbmFtZXMgcHJvcGVybHkiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0Lmxvd2VyKCksICIlQiIpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0Lmxvd2VyKCksICIlQiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgInN0cnB0aW1lIGRvZXMgbm90IGhhbmRsZSBsb3dlcmNhc2UgbmFtZXMgcHJvcGVybHkiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0LmNhcGl0YWxpemUoKSwgIiVCIiksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoc3RyZl9vdXRwdXQuY2FwaXRhbGl6ZSgpLCAiJUIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJwdGltZSBkb2VzIG5vdCBoYW5kbGUgY2Fwd29yZCBuYW1lcyBwcm9wZXJseSIpCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0cyhzZWxmKToKICAgICAgICAgIyBEZWZhdWx0IHJldHVybiB2YWx1ZSBzaG91bGQgYmUgKDE5MDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDApCiAgICAgICAgIGRlZmF1bHRzID0gKDE5MDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIC0xKQogICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgnMScsICclbScpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJwX291dHB1dCA9PSBkZWZhdWx0cywKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnBfb3V0cHV0ID09IGRlZmF1bHRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIkRlZmF1bHQgdmFsdWVzIGZvciBzdHJwdGltZSgpIGFyZSBpbmNvcnJlY3Q7IgogICAgICAgICAgICAgICAgICAgICAgICAgIiAlcyAhPSAlcyIgJSAoc3RycF9vdXRwdXQsIGRlZmF1bHRzKSkKIApAQCAtMzg0LDcgKzM3OSw3IEBACiAgICAgICAgICMgZXNjYXBlZC4KICAgICAgICAgIyBUZXN0IGluc3RpZ2F0ZWQgYnkgYnVnICM3OTYxNDkgLgogICAgICAgICBuZWVkX2VzY2FwaW5nID0gIi5eJCorP3t9XFtdfCkoIgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKG5lZWRfZXNjYXBpbmcsIG5lZWRfZXNjYXBpbmcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKG5lZWRfZXNjYXBpbmcsIG5lZWRfZXNjYXBpbmcpKQogCiBjbGFzcyBTdHJwdGltZTEyQU1QTVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0IGEgX3N0cnB0aW1lIHJlZ3Jlc3Npb24gaW4gJyVJICVwJyBhdCAxMiBub29uICgxMiBQTSkiIiIKQEAgLTQxNyw3ICs0MTIsNyBAQAogICAgICAgICBmb3JtYXRfc3RyaW5nID0gIiVZICVtICVkICVIICVNICVTICV3ICVaIgogICAgICAgICByZXN1bHQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUodGltZS5zdHJmdGltZShmb3JtYXRfc3RyaW5nLCBzZWxmLnRpbWVfdHVwbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3N0cmluZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlc3VsdC50bV95ZGF5ID09IHNlbGYudGltZV90dXBsZS50bV95ZGF5LAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnRtX3lkYXkgPT0gc2VsZi50aW1lX3R1cGxlLnRtX3lkYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FsY3VsYXRpb24gb2YgdG1feWRheSBmYWlsZWQ7ICVzICE9ICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC50bV95ZGF5LCBzZWxmLnRpbWVfdHVwbGUudG1feWRheSkpCiAKQEAgLTQyNiw3ICs0MjEsNyBAQAogICAgICAgICBmb3JtYXRfc3RyaW5nID0gIiVZICVIICVNICVTICV3ICVqICVaIgogICAgICAgICByZXN1bHQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUodGltZS5zdHJmdGltZShmb3JtYXRfc3RyaW5nLCBzZWxmLnRpbWVfdHVwbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3N0cmluZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlc3VsdC50bV95ZWFyID09IHNlbGYudGltZV90dXBsZS50bV95ZWFyIGFuZAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnRtX3llYXIgPT0gc2VsZi50aW1lX3R1cGxlLnRtX3llYXIgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnRtX21vbiA9PSBzZWxmLnRpbWVfdHVwbGUudG1fbW9uIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC50bV9tZGF5ID09IHNlbGYudGltZV90dXBsZS50bV9tZGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGN1bGF0aW9uIG9mIEdyZWdvcmlhbiBkYXRlIGZhaWxlZDsiCkBAIC00NDAsNyArNDM1LDcgQEAKICAgICAgICAgZm9ybWF0X3N0cmluZyA9ICIlWSAlbSAlZCAlSCAlUyAlaiAlWiIKICAgICAgICAgcmVzdWx0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHRpbWUuc3RyZnRpbWUoZm9ybWF0X3N0cmluZywgc2VsZi50aW1lX3R1cGxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zdHJpbmcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHQudG1fd2RheSA9PSBzZWxmLnRpbWVfdHVwbGUudG1fd2RheSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC50bV93ZGF5ID09IHNlbGYudGltZV90dXBsZS50bV93ZGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGN1bGF0aW9uIG9mIGRheSBvZiB0aGUgd2VlayBmYWlsZWQ7IgogICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAhPSAlcyIgJSAocmVzdWx0LnRtX3dkYXksIHNlbGYudGltZV90dXBsZS50bV93ZGF5KSkKIApAQCAtNDUzLDcgKzQ0OCw3IEBACiAgICAgICAgICAgICAgICAgZHRfZGF0ZSA9IGRhdGV0aW1lX2RhdGUoKnltZF90dXBsZSkKICAgICAgICAgICAgICAgICBzdHJwX2lucHV0ID0gZHRfZGF0ZS5zdHJmdGltZShmb3JtYXRfc3RyaW5nKQogICAgICAgICAgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cnBfaW5wdXQsIGZvcm1hdF9zdHJpbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cnBfb3V0cHV0WzozXSA9PSB5bWRfdHVwbGUsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnBfb3V0cHV0WzozXSA9PSB5bWRfdHVwbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoJXMpIHRlc3QgZmFpbGVkIHcvICclcyc6ICVzICE9ICVzICglcyAhPSAlcykiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9yZWFzb24sIGRpcmVjdGl2ZSwgc3RycF9pbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RycF9vdXRwdXRbOjNdLCB5bWRfdHVwbGUsCkBAIC00OTQsMTAgKzQ4OSwxMCBAQAogICAgICAgICBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoIjEwIiwgIiVkIikKICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCIyMDA1IiwgIiVZIikKICAgICAgICAgX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUubG9jYWxlX3RpbWUubGFuZyA9ICJOaSIKLSAgICAgICAgb3JpZ2luYWxfdGltZV9yZSA9IGlkKF9zdHJwdGltZS5fVGltZVJFX2NhY2hlKQorICAgICAgICBvcmlnaW5hbF90aW1lX3JlID0gX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUKICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCIxMCIsICIlZCIpCi0gICAgICAgIHNlbGYuZmFpbElmRXF1YWwob3JpZ2luYWxfdGltZV9yZSwgaWQoX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oX3N0cnB0aW1lLl9yZWdleF9jYWNoZSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob3JpZ2luYWxfdGltZV9yZSwgX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKF9zdHJwdGltZS5fcmVnZXhfY2FjaGUpLCAxKQogCiAgICAgZGVmIHRlc3RfcmVnZXhfY2xlYW51cChzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgY2FjaGVkIHJlZ2V4ZXMgYXJlIGRpc2NhcmRlZCB3aGVuIGNhY2hlIGJlY29tZXMgImZ1bGwiLgpAQCAtNTEwLDE2ICs1MDUsMTUgQEAKICAgICAgICAgICAgIF9zdHJwdGltZS5fcmVnZXhfY2FjaGVbYm9ndXNfa2V5XSA9IE5vbmUKICAgICAgICAgICAgIGJvZ3VzX2tleSArPSAxCiAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiMTAiLCAiJWQiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oX3N0cnB0aW1lLl9yZWdleF9jYWNoZSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKF9zdHJwdGltZS5fcmVnZXhfY2FjaGUpLCAxKQogCiAgICAgZGVmIHRlc3RfbmV3X2xvY2FsZXRpbWUoc2VsZik6CiAgICAgICAgICMgQSBuZXcgTG9jYWxlVGltZSBpbnN0YW5jZSBzaG91bGQgYmUgY3JlYXRlZCB3aGVuIGEgbmV3IFRpbWVSRSBvYmplY3QKICAgICAgICAgIyBpcyBjcmVhdGVkLgotICAgICAgICBsb2NhbGVfdGltZV9pZCA9IGlkKF9zdHJwdGltZS5fVGltZVJFX2NhY2hlLmxvY2FsZV90aW1lKQorICAgICAgICBsb2NhbGVfdGltZV9pZCA9IF9zdHJwdGltZS5fVGltZVJFX2NhY2hlLmxvY2FsZV90aW1lCiAgICAgICAgIF9zdHJwdGltZS5fVGltZVJFX2NhY2hlLmxvY2FsZV90aW1lLmxhbmcgPSAiTmkiCiAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiMTAiLCAiJWQiKQotICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKGxvY2FsZV90aW1lX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgIGlkKF9zdHJwdGltZS5fVGltZVJFX2NhY2hlLmxvY2FsZV90aW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChsb2NhbGVfdGltZV9pZCwgX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUubG9jYWxlX3RpbWUpCiAKICAgICBkZWYgdGVzdF9UaW1lUkVfcmVjcmVhdGlvbihzZWxmKToKICAgICAgICAgIyBUaGUgVGltZVJFIGluc3RhbmNlIHNob3VsZCBiZSByZWNyZWF0ZWQgdXBvbiBjaGFuZ2luZyB0aGUgbG9jYWxlLgpAQCAtNTMxLDE1ICs1MjUsMTUgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCcxMCcsICclZCcpCiAgICAgICAgICAgICAjIEdldCBpZCBvZiBjdXJyZW50IGNhY2hlIG9iamVjdC4KLSAgICAgICAgICAgIGZpcnN0X3RpbWVfcmVfaWQgPSBpZChfc3RycHRpbWUuX1RpbWVSRV9jYWNoZSkKKyAgICAgICAgICAgIGZpcnN0X3RpbWVfcmUgPSBfc3RycHRpbWUuX1RpbWVSRV9jYWNoZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgQ2hhbmdlIHRoZSBsb2NhbGUgYW5kIGZvcmNlIGEgcmVjcmVhdGlvbiBvZiB0aGUgY2FjaGUuCiAgICAgICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfVElNRSwgKCdkZV9ERScsICdVVEY4JykpCiAgICAgICAgICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCcxMCcsICclZCcpCiAgICAgICAgICAgICAgICAgIyBHZXQgdGhlIG5ldyBjYWNoZSBvYmplY3QncyBpZC4KLSAgICAgICAgICAgICAgICBzZWNvbmRfdGltZV9yZV9pZCA9IGlkKF9zdHJwdGltZS5fVGltZVJFX2NhY2hlKQorICAgICAgICAgICAgICAgIHNlY29uZF90aW1lX3JlID0gX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUKICAgICAgICAgICAgICAgICAjIFRoZXkgc2hvdWxkIG5vdCBiZSBlcXVhbC4KLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKGZpcnN0X3RpbWVfcmVfaWQsIHNlY29uZF90aW1lX3JlX2lkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZmlyc3RfdGltZV9yZSwgc2Vjb25kX3RpbWVfcmUpCiAgICAgICAgICAgICAjIFBvc3NpYmxlIHRlc3QgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgd2hpbGUgaW5pdGlhbCBsb2NhbGUgaXMuCiAgICAgICAgICAgICAjIElmIHRoaXMgaXMgdGhlIGNhc2UganVzdCBzdXBwcmVzcyB0aGUgZXhjZXB0aW9uIGFuZCBmYWxsLXRocm91Z2gKICAgICAgICAgICAgICMgdG8gdGhlIHJlc2V0aW5nIHRvIHRoZSBvcmlnaW5hbCBsb2NhbGUuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYzU5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQpAQCAtMCwwICsxLDM5OSBAQAorIyBUZXN0cyBmb3IgdGhlIGNvcnJlY3RseS1yb3VuZGVkIHN0cmluZyAtPiBmbG9hdCBjb252ZXJzaW9ucworIyBpbnRyb2R1Y2VkIGluIFB5dGhvbiAyLjcgYW5kIDMuMS4KKworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2lmIGdldGF0dHIoc3lzLCAnZmxvYXRfcmVwcl9zdHlsZScsICcnKSAhPSAnc2hvcnQnOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdjb3JyZWN0bHktcm91bmRlZCBzdHJpbmctPmZsb2F0IGNvbnZlcnNpb25zICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90IGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbScpCisKKyMgQ29ycmVjdGx5IHJvdW5kZWQgc3RyIC0+IGZsb2F0IGluIHB1cmUgUHl0aG9uLCBmb3IgY29tcGFyaXNvbi4KKworc3RydG9kX3BhcnNlciA9IHJlLmNvbXBpbGUociIiIiAgICAjIEEgbnVtZXJpYyBzdHJpbmcgY29uc2lzdHMgb2Y6CisgICAgKD9QPHNpZ24+Wy0rXSk/ICAgICAgICAgICMgYW4gb3B0aW9uYWwgc2lnbiwgZm9sbG93ZWQgYnkKKyAgICAoPz1cZHxcLlxkKSAgICAgICAgICAgICAgIyBhIG51bWJlciB3aXRoIGF0IGxlYXN0IG9uZSBkaWdpdAorICAgICg/UDxpbnQ+XGQqKSAgICAgICAgICAgICAjIGhhdmluZyBhIChwb3NzaWJseSBlbXB0eSkgaW50ZWdlciBwYXJ0CisgICAgKD86XC4oP1A8ZnJhYz5cZCopKT8gICAgICMgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgZnJhY3Rpb25hbCBwYXJ0CisgICAgKD86RSg/UDxleHA+Wy0rXT9cZCspKT8gICMgYW5kIGFuIG9wdGlvbmFsIGV4cG9uZW50CisgICAgXFoKKyIiIiwgcmUuVkVSQk9TRSB8IHJlLklHTk9SRUNBU0UpLm1hdGNoCisKKyMgUHVyZSBQeXRob24gdmVyc2lvbiBvZiBjb3JyZWN0bHkgcm91bmRlZCBzdHJpbmctPmZsb2F0IGNvbnZlcnNpb24uCisjIEF2b2lkcyBhbnkgdXNlIG9mIGZsb2F0aW5nLXBvaW50IGJ5IHJldHVybmluZyB0aGUgcmVzdWx0IGFzIGEgaGV4IHN0cmluZy4KK2RlZiBzdHJ0b2QocywgbWFudF9kaWc9NTMsIG1pbl9leHAgPSAtMTAyMSwgbWF4X2V4cCA9IDEwMjQpOgorICAgICIiIkNvbnZlcnQgYSBmaW5pdGUgZGVjaW1hbCBzdHJpbmcgdG8gYSBoZXggc3RyaW5nIHJlcHJlc2VudGluZyBhbgorICAgIElFRUUgNzU0IGJpbmFyeTY0IGZsb2F0LiAgUmV0dXJuICdpbmYnIG9yICctaW5mJyBvbiBvdmVyZmxvdy4KKyAgICBUaGlzIGZ1bmN0aW9uIG1ha2VzIG5vIHVzZSBvZiBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIGF0IGFueQorICAgIHN0YWdlLiIiIgorCisgICAgIyBwYXJzZSBzdHJpbmcgaW50byBhIHBhaXIgb2YgaW50ZWdlcnMgJ2EnIGFuZCAnYicgc3VjaCB0aGF0CisgICAgIyBhYnMoZGVjaW1hbCB2YWx1ZSkgPSBhL2IsIGFsb25nIHdpdGggYSBib29sZWFuICduZWdhdGl2ZScuCisgICAgbSA9IHN0cnRvZF9wYXJzZXIocykKKyAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgbnVtZXJpYyBzdHJpbmcnKQorICAgIGZyYWN0aW9uID0gbS5ncm91cCgnZnJhYycpIG9yICcnCisgICAgaW50cGFydCA9IGludChtLmdyb3VwKCdpbnQnKSArIGZyYWN0aW9uKQorICAgIGV4cCA9IGludChtLmdyb3VwKCdleHAnKSBvciAnMCcpIC0gbGVuKGZyYWN0aW9uKQorICAgIG5lZ2F0aXZlID0gbS5ncm91cCgnc2lnbicpID09ICctJworICAgIGEsIGIgPSBpbnRwYXJ0KjEwKiptYXgoZXhwLCAwKSwgMTAqKm1heCgwLCAtZXhwKQorCisgICAgIyBxdWljayByZXR1cm4gZm9yIHplcm9zCisgICAgaWYgbm90IGE6CisgICAgICAgIHJldHVybiAnLTB4MC4wcCswJyBpZiBuZWdhdGl2ZSBlbHNlICcweDAuMHArMCcKKworICAgICMgY29tcHV0ZSBleHBvbmVudCBlIGZvciByZXN1bHQ7IG1heSBiZSBvbmUgdG9vIHNtYWxsIGluIHRoZSBjYXNlCisgICAgIyB0aGF0IHRoZSByb3VuZGVkIHZhbHVlIG9mIGEvYiBsaWVzIGluIGEgZGlmZmVyZW50IGJpbmFkZSBmcm9tIGEvYgorICAgIGQgPSBhLmJpdF9sZW5ndGgoKSAtIGIuYml0X2xlbmd0aCgpCisgICAgZCArPSAoYSA+PiBkIGlmIGQgPj0gMCBlbHNlIGEgPDwgLWQpID49IGIKKyAgICBlID0gbWF4KGQsIG1pbl9leHApIC0gbWFudF9kaWcKKworICAgICMgYXBwcm94aW1hdGUgYS9iIGJ5IG51bWJlciBvZiB0aGUgZm9ybSBxICogMioqZTsgYWRqdXN0IGUgaWYgbmVjZXNzYXJ5CisgICAgYSwgYiA9IGEgPDwgbWF4KC1lLCAwKSwgYiA8PCBtYXgoZSwgMCkKKyAgICBxLCByID0gZGl2bW9kKGEsIGIpCisgICAgaWYgMipyID4gYiBvciAyKnIgPT0gYiBhbmQgcSAmIDE6CisgICAgICAgIHEgKz0gMQorICAgICAgICBpZiBxLmJpdF9sZW5ndGgoKSA9PSBtYW50X2RpZysxOgorICAgICAgICAgICAgcSAvLz0gMgorICAgICAgICAgICAgZSArPSAxCisKKyAgICAjIGRvdWJsZSBjaGVjayB0aGF0IChxLCBlKSBoYXMgdGhlIHJpZ2h0IGZvcm0KKyAgICBhc3NlcnQgcS5iaXRfbGVuZ3RoKCkgPD0gbWFudF9kaWcgYW5kIGUgPj0gbWluX2V4cCAtIG1hbnRfZGlnCisgICAgYXNzZXJ0IHEuYml0X2xlbmd0aCgpID09IG1hbnRfZGlnIG9yIGUgPT0gbWluX2V4cCAtIG1hbnRfZGlnCisKKyAgICAjIGNoZWNrIGZvciBvdmVyZmxvdyBhbmQgdW5kZXJmbG93CisgICAgaWYgZSArIHEuYml0X2xlbmd0aCgpID4gbWF4X2V4cDoKKyAgICAgICAgcmV0dXJuICctaW5mJyBpZiBuZWdhdGl2ZSBlbHNlICdpbmYnCisgICAgaWYgbm90IHE6CisgICAgICAgIHJldHVybiAnLTB4MC4wcCswJyBpZiBuZWdhdGl2ZSBlbHNlICcweDAuMHArMCcKKworICAgICMgZm9yIGhleCByZXByZXNlbnRhdGlvbiwgc2hpZnQgc28gIyBiaXRzIGFmdGVyIHBvaW50IGlzIGEgbXVsdGlwbGUgb2YgNAorICAgIGhleGRpZ3MgPSAxICsgKG1hbnRfZGlnLTIpLy80CisgICAgc2hpZnQgPSAzIC0gKG1hbnRfZGlnLTIpJTQKKyAgICBxLCBlID0gcSA8PCBzaGlmdCwgZSAtIHNoaWZ0CisgICAgcmV0dXJuICd7fTB4ezp4fS57OjB7fXh9cHs6K2R9Jy5mb3JtYXQoCisgICAgICAgICctJyBpZiBuZWdhdGl2ZSBlbHNlICcnLAorICAgICAgICBxIC8vIDE2KipoZXhkaWdzLAorICAgICAgICBxICUgMTYqKmhleGRpZ3MsCisgICAgICAgIGhleGRpZ3MsCisgICAgICAgIGUgKyA0KmhleGRpZ3MpCisKK1RFU1RfU0laRSA9IDEwCisKK2NsYXNzIFN0cnRvZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY2hlY2tfc3RydG9kKHNlbGYsIHMpOgorICAgICAgICAiIiJDb21wYXJlIHRoZSByZXN1bHQgb2YgUHl0aG9uJ3MgYnVpbHRpbiBjb3JyZWN0bHkgcm91bmRlZAorICAgICAgICBzdHJpbmctPmZsb2F0IGNvbnZlcnNpb24gKHVzaW5nIGZsb2F0KSB0byBhIHB1cmUgUHl0aG9uCisgICAgICAgIGNvcnJlY3RseSByb3VuZGVkIHN0cmluZy0+ZmxvYXQgaW1wbGVtZW50YXRpb24uICBGYWlsIGlmIHRoZQorICAgICAgICB0d28gbWV0aG9kcyBnaXZlIGRpZmZlcmVudCByZXN1bHRzLiIiIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZzID0gZmxvYXQocykKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBnb3QgPSAnLWluZicgaWYgc1swXSA9PSAnLScgZWxzZSAnaW5mJworICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICBnb3QgPSAnbWVtb3J5IGVycm9yJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ290ID0gZnMuaGV4KCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzdHJ0b2QocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICJJbmNvcnJlY3RseSByb3VuZGVkIHN0ci0+ZmxvYXQgY29udmVyc2lvbiBmb3Ige306ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQge30sIGdvdCB7fSIuZm9ybWF0KHMsIGV4cGVjdGVkLCBnb3QpKQorCisgICAgZGVmIHRlc3Rfc2hvcnRfaGFsZndheV9jYXNlcyhzZWxmKToKKyAgICAgICAgIyBleGFjdCBoYWxmd2F5IGNhc2VzIHdpdGggYSBzbWFsbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzCisgICAgICAgIGZvciBrIGluIDAsIDUsIDEwLCAxNSwgMjA6CisgICAgICAgICAgICAjIHVwcGVyID0gc21hbGxlc3QgaW50ZWdlciA+PSAyKio1NC81KiprCisgICAgICAgICAgICB1cHBlciA9IC0oLTIqKjU0Ly81KiprKQorICAgICAgICAgICAgIyBsb3dlciA9IHNtYWxsZXN0IG9kZCBudW1iZXIgPj0gMioqNTMvNSoqaworICAgICAgICAgICAgbG93ZXIgPSAtKC0yKio1My8vNSoqaykKKyAgICAgICAgICAgIGlmIGxvd2VyICUgMiA9PSAwOgorICAgICAgICAgICAgICAgIGxvd2VyICs9IDEKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShURVNUX1NJWkUpOgorICAgICAgICAgICAgICAgICMgU2VsZWN0IGEgcmFuZG9tIG9kZCBuIGluIFsyKio1My81KiprLAorICAgICAgICAgICAgICAgICMgMioqNTQvNSoqaykuIFRoZW4gbiAqIDEwKiprIGdpdmVzIGEgaGFsZndheSBjYXNlCisgICAgICAgICAgICAgICAgIyB3aXRoIHNtYWxsIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMuCisgICAgICAgICAgICAgICAgbiwgZSA9IHJhbmRvbS5yYW5kcmFuZ2UobG93ZXIsIHVwcGVyLCAyKSwgaworCisgICAgICAgICAgICAgICAgIyBSZW1vdmUgYW55IGFkZGl0aW9uYWwgcG93ZXJzIG9mIDUuCisgICAgICAgICAgICAgICAgd2hpbGUgbiAlIDUgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbiwgZSA9IG4gLy8gNSwgZSArIDEKKyAgICAgICAgICAgICAgICBhc3NlcnQgbiAlIDEwIGluICgxLCAzLCA3LCA5KQorCisgICAgICAgICAgICAgICAgIyBUcnkgbnVtYmVycyBvZiB0aGUgZm9ybSBuICogMioqcDIgKiAxMCoqZSwgcDIgPj0gMCwKKyAgICAgICAgICAgICAgICAjIHVudGlsIG4gKiAyKipwMiBoYXMgbW9yZSB0aGFuIDIwIHNpZ25pZmljYW50IGRpZ2l0cy4KKyAgICAgICAgICAgICAgICBkaWdpdHMsIGV4cG9uZW50ID0gbiwgZQorICAgICAgICAgICAgICAgIHdoaWxlIGRpZ2l0cyA8IDEwKioyMDoKKyAgICAgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cywgZXhwb25lbnQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisgICAgICAgICAgICAgICAgICAgICMgU2FtZSBhZ2FpbiwgYnV0IHdpdGggZXh0cmEgdHJhaWxpbmcgemVyb3MuCisgICAgICAgICAgICAgICAgICAgIHMgPSAne31le30nLmZvcm1hdChkaWdpdHMgKiAxMCoqNDAsIGV4cG9uZW50IC0gNDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyAqPSAyCisKKyAgICAgICAgICAgICAgICAjIFRyeSBudW1iZXJzIG9mIHRoZSBmb3JtIG4gKiA1KipwMiAqIDEwKiooZSAtIHA1KSwgcDUKKyAgICAgICAgICAgICAgICAjID49IDAsIHdpdGggbiAqIDUqKnA1IDwgMTAqKjIwLgorICAgICAgICAgICAgICAgIGRpZ2l0cywgZXhwb25lbnQgPSBuLCBlCisgICAgICAgICAgICAgICAgd2hpbGUgZGlnaXRzIDwgMTAqKjIwOgorICAgICAgICAgICAgICAgICAgICBzID0gJ3t9ZXt9Jy5mb3JtYXQoZGlnaXRzLCBleHBvbmVudCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKyAgICAgICAgICAgICAgICAgICAgIyBTYW1lIGFnYWluLCBidXQgd2l0aCBleHRyYSB0cmFpbGluZyB6ZXJvcy4KKyAgICAgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cyAqIDEwKio0MCwgZXhwb25lbnQgLSA0MCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKyAgICAgICAgICAgICAgICAgICAgZGlnaXRzICo9IDUKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgLT0gMQorCisgICAgZGVmIHRlc3RfaGFsZndheV9jYXNlcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGhhbGZ3YXkgY2FzZXMgZm9yIHRoZSByb3VuZC1oYWxmLXRvLWV2ZW4gcnVsZQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwICogVEVTVF9TSVpFKToKKyAgICAgICAgICAgICMgYml0IHBhdHRlcm4gZm9yIGEgcmFuZG9tIGZpbml0ZSBwb3NpdGl2ZSAob3IgKzAuMCkgZmxvYXQKKyAgICAgICAgICAgIGJpdHMgPSByYW5kb20ucmFuZHJhbmdlKDIwNDcqMioqNTIpCisKKyAgICAgICAgICAgICMgY29udmVydCBiaXQgcGF0dGVybiB0byBhIG51bWJlciBvZiB0aGUgZm9ybSBtICogMioqZQorICAgICAgICAgICAgZSwgbSA9IGRpdm1vZChiaXRzLCAyKio1MikKKyAgICAgICAgICAgIGlmIGU6CisgICAgICAgICAgICAgICAgbSwgZSA9IG0gKyAyKio1MiwgZSAtIDEKKyAgICAgICAgICAgIGUgLT0gMTA3NAorCisgICAgICAgICAgICAjIGFkZCAwLjUgdWxwcworICAgICAgICAgICAgbSwgZSA9IDIqbSArIDEsIGUgLSAxCisKKyAgICAgICAgICAgICMgY29udmVydCB0byBhIGRlY2ltYWwgc3RyaW5nCisgICAgICAgICAgICBpZiBlID49IDA6CisgICAgICAgICAgICAgICAgZGlnaXRzID0gbSA8PCBlCisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgbSAqIDIqKmUgPSAobSAqIDUqKi1lKSAqIDEwKiplCisgICAgICAgICAgICAgICAgZGlnaXRzID0gbSAqIDUqKi1lCisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSBlCisgICAgICAgICAgICBzID0gJ3t9ZXt9Jy5mb3JtYXQoZGlnaXRzLCBleHBvbmVudCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisKKyAgICBkZWYgdGVzdF9ib3VuZGFyaWVzKHNlbGYpOgorICAgICAgICAjIGJvdW5kYXJpZXMgZXhwcmVzc2VkIGFzIHRyaXBsZXMgKG4sIGUsIHUpLCB3aGVyZQorICAgICAgICAjIG4qMTAqKmUgaXMgYW4gYXBwcm94aW1hdGlvbiB0byB0aGUgYm91bmRhcnkgdmFsdWUgYW5kCisgICAgICAgICMgdSoxMCoqZSBpcyAxdWxwCisgICAgICAgIGJvdW5kYXJpZXMgPSBbCisgICAgICAgICAgICAoMTAwMDAwMDAwMDAwMDAwMDAwMDAsIC0xOSwgMTExMCksICAgIyBhIHBvd2VyIG9mIDIgYm91bmRhcnkgKDEuMCkKKyAgICAgICAgICAgICgxNzk3NjkzMTM0ODYyMzE1OTA3NywgMjg5LCAxOTk1KSwgICAjIG92ZXJmbG93IGJvdW5kYXJ5ICgyLioqMTAyNCkKKyAgICAgICAgICAgICgyMjI1MDczODU4NTA3MjAxMzgzMSwgLTMyNywgNDk0MSksICAjIG5vcm1hbC9zdWJub3JtYWwgKDIuKiotMTAyMikKKyAgICAgICAgICAgICgwLCAtMzI3LCA0OTQxKSwgICAgICAgICAgICAgICAgICAgICAjIHplcm8KKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIG4sIGUsIHUgaW4gYm91bmRhcmllczoKKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZSgxMDAwKToKKyAgICAgICAgICAgICAgICBkaWdpdHMgPSBuICsgcmFuZG9tLnJhbmRyYW5nZSgtMyp1LCAzKnUpCisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSBlCisgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cywgZXhwb25lbnQpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKyAgICAgICAgICAgICAgICBuICo9IDEwCisgICAgICAgICAgICAgICAgdSAqPSAxMAorICAgICAgICAgICAgICAgIGUgLT0gMQorCisgICAgZGVmIHRlc3RfdW5kZXJmbG93X2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICAjIHRlc3QgdmFsdWVzIGNsb3NlIHRvIDIqKi0xMDc1LCB0aGUgdW5kZXJmbG93IGJvdW5kYXJ5OyBzaW1pbGFyCisgICAgICAgICMgdG8gYm91bmRhcnlfdGVzdHMsIGV4Y2VwdCB0aGF0IHRoZSByYW5kb20gZXJyb3IgZG9lc24ndCBzY2FsZQorICAgICAgICAjIHdpdGggbgorICAgICAgICBmb3IgZXhwb25lbnQgaW4geHJhbmdlKC00MDAsIC0zMjApOgorICAgICAgICAgICAgYmFzZSA9IDEwKiotZXhwb25lbnQgLy8gMioqMTA3NQorICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKFRFU1RfU0laRSk6CisgICAgICAgICAgICAgICAgZGlnaXRzID0gYmFzZSArIHJhbmRvbS5yYW5kcmFuZ2UoLTEwMDAsIDEwMDApCisgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cywgZXhwb25lbnQpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKworICAgIGRlZiB0ZXN0X2JpZ2NvbXAoc2VsZik6CisgICAgICAgIGZvciBuZGlncyBpbiA1LCAxMCwgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDQwLCA0MSwgNTA6CisgICAgICAgICAgICBkaWcxMCA9IDEwKipuZGlncworICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwICogVEVTVF9TSVpFKToKKyAgICAgICAgICAgICAgICBkaWdpdHMgPSByYW5kb20ucmFuZHJhbmdlKGRpZzEwKQorICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gcmFuZG9tLnJhbmRyYW5nZSgtNDAwLCA0MDApCisgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cywgZXhwb25lbnQpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKworICAgIGRlZiB0ZXN0X3BhcnNpbmcoc2VsZik6CisgICAgICAgICMgbWFrZSAnMCcgbW9yZSBsaWtlbHkgdG8gYmUgY2hvc2VuIHRoYW4gb3RoZXIgZGlnaXRzCisgICAgICAgIGRpZ2l0cyA9ICcwMDAwMDAxMjM0NTY3ODknCisgICAgICAgIHNpZ25zID0gKCcrJywgJy0nLCAnJykKKworICAgICAgICAjIHB1dCB0b2dldGhlciByYW5kb20gc2hvcnQgdmFsaWQgc3RyaW5ncworICAgICAgICAjIFxkKlsuXGQqXT9lCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDAwKToKKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZShURVNUX1NJWkUpOgorICAgICAgICAgICAgICAgIHMgPSByYW5kb20uY2hvaWNlKHNpZ25zKQorICAgICAgICAgICAgICAgIGludHBhcnRfbGVuID0gcmFuZG9tLnJhbmRyYW5nZSg1KQorICAgICAgICAgICAgICAgIHMgKz0gJycuam9pbihyYW5kb20uY2hvaWNlKGRpZ2l0cykgZm9yIF8gaW4geHJhbmdlKGludHBhcnRfbGVuKSkKKyAgICAgICAgICAgICAgICBpZiByYW5kb20uY2hvaWNlKFtUcnVlLCBGYWxzZV0pOgorICAgICAgICAgICAgICAgICAgICBzICs9ICcuJworICAgICAgICAgICAgICAgICAgICBmcmFjcGFydF9sZW4gPSByYW5kb20ucmFuZHJhbmdlKDUpCisgICAgICAgICAgICAgICAgICAgIHMgKz0gJycuam9pbihyYW5kb20uY2hvaWNlKGRpZ2l0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfIGluIHhyYW5nZShmcmFjcGFydF9sZW4pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZyYWNwYXJ0X2xlbiA9IDAKKyAgICAgICAgICAgICAgICBpZiByYW5kb20uY2hvaWNlKFtUcnVlLCBGYWxzZV0pOgorICAgICAgICAgICAgICAgICAgICBzICs9IHJhbmRvbS5jaG9pY2UoWydlJywgJ0UnXSkKKyAgICAgICAgICAgICAgICAgICAgcyArPSByYW5kb20uY2hvaWNlKHNpZ25zKQorICAgICAgICAgICAgICAgICAgICBleHBvbmVudF9sZW4gPSByYW5kb20ucmFuZHJhbmdlKDEsIDQpCisgICAgICAgICAgICAgICAgICAgIHMgKz0gJycuam9pbihyYW5kb20uY2hvaWNlKGRpZ2l0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfIGluIHhyYW5nZShleHBvbmVudF9sZW4pKQorCisgICAgICAgICAgICAgICAgaWYgaW50cGFydF9sZW4gKyBmcmFjcGFydF9sZW46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQocykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJleHBlY3RlZCBWYWx1ZUVycm9yIgorCisgICAgZGVmIHRlc3RfcGFydGljdWxhcihzZWxmKToKKyAgICAgICAgIyBpbnB1dHMgdGhhdCBwcm9kdWNlZCBjcmFzaGVzIG9yIGluY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0cyB3aXRoCisgICAgICAgICMgcHJldmlvdXMgdmVyc2lvbnMgb2YgZHRvYS5jLCBmb3IgdmFyaW91cyByZWFzb25zCisgICAgICAgIHRlc3Rfc3RyaW5ncyA9IFsKKyAgICAgICAgICAgICMgaXNzdWUgNzYzMiBidWcgMSwgb3JpZ2luYWxseSByZXBvcnRlZCBmYWlsaW5nIGNhc2UKKyAgICAgICAgICAgICcyMTgzMTY3MDEyMzEyMTEyMzEyMzEyLjIzNTM4MDIwMzc0NDIwNDQ2MTkyZS0zNzAnLAorICAgICAgICAgICAgIyA1IGluc3RhbmNlcyBvZiBpc3N1ZSA3NjMyIGJ1ZyAyCisgICAgICAgICAgICAnMTI1Nzk4MTYwNDkwMDgzMDU1NDY5NzQzOTE3Njg5OTYzNjk0NjQ5NjMwMjQ2NjMxMDRlLTM1NycsCisgICAgICAgICAgICAnMTc0ODk2Mjg1NjUyMDIxMTcyNjMxNDUzNjc1OTYwMjgzODkzNDg5MjI5ODE4NTcwMTNlLTM1NycsCisgICAgICAgICAgICAnMTg0ODczOTg3ODU5OTE5OTQ2MzQxODI5MTY2Mzg1NDI2ODA3NTk2MTM1OTA0ODIyNzNlLTM1NycsCisgICAgICAgICAgICAnMzIwMDI4NjQyMDA1ODEwMzMxMzQzNTg3MjQ2NzUxOTgwNDQ1Mjc0NjkzNjY3NzM5MjhlLTM1OCcsCisgICAgICAgICAgICAnOTQzOTM0MzExOTMxODA2OTY5NDI4NDE4MzcwODUwMzM2NDc5MTMyMjQxNDg1Mzk4NTRlLTM1OCcsCisgICAgICAgICAgICAnNzM2MDgyNzg5OTg5NjY5NjkzNDU4MjQ2NTM1MDAxMzY3ODc4NzY0MzYwMDU5NTc5NTNlLTM1OCcsCisgICAgICAgICAgICAnNjQ3NzQ0Nzg4MzY0MTcyOTk0OTE3MTg0MzUyMzQ2MTEyOTkzMzYyODgwODIxMzYwNTRlLTM1OCcsCisgICAgICAgICAgICAnMTM3MDQ5NDAxMzQxMjY1NzQ1MzQ4Nzg2NDE4NzY5NDc5ODA4Nzg4MjQ2ODg0NTExNjllLTM1NycsCisgICAgICAgICAgICAnNDY2OTc0NDU3NzQwNDcwNjA5NjA2MjQ0OTc5NjQ0MjU0MTY2MTA0ODA1MjQ3NjA0NzFlLTM1OCcsCisgICAgICAgICAgICAjIGZhaWxpbmcgY2FzZSBmb3IgYnVnIGludHJvZHVjZWQgYnkgTUVURCBpbiByNzc0NTEgKGF0dGVtcHRlZAorICAgICAgICAgICAgIyBmaXggZm9yIGlzc3VlIDc2MzIsIGJ1ZyAyKSwgYW5kIGZpeGVkIGluIHI3NzQ4Mi4KKyAgICAgICAgICAgICcyODYzOTA5NzE3ODI2MTc2MzE3ODQ4OTc1OTEwNzMyMTM5Mjc0NTEwODQ5MTgyNTMwM2UtMzExJywKKyAgICAgICAgICAgICMgdHdvIG51bWJlcnMgZGVtb25zdHJhdGluZyBhIGZsYXcgaW4gdGhlIGJpZ2NvbXAgJ2RpZyA9PSAwJworICAgICAgICAgICAgIyBjb3JyZWN0aW9uIGJsb2NrIChpc3N1ZSA3NjMyLCBidWcgMykKKyAgICAgICAgICAgICcxLjAwMDAwMDAwMDAwMDAwMDAxZTQ0JywKKyAgICAgICAgICAgICcxLjAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFlNDQnLAorICAgICAgICAgICAgIyBkdG9hLmMgYnVnIGZvciBudW1iZXJzIGp1c3Qgc21hbGxlciB0aGFuIGEgcG93ZXIgb2YgMiAoaXNzdWUKKyAgICAgICAgICAgICMgNzYzMiwgYnVnIDQpCisgICAgICAgICAgICAnOTk5OTk5OTk5OTk5OTk5OTQ0ODc2NjU0NjU1NTQ3NjA3MTcwMzk1MzI1Nzg1NDZlLTQ3JywKKyAgICAgICAgICAgICMgZmFpbGluZyBjYXNlIGZvciBvZmYtYnktb25lIGVycm9yIGludHJvZHVjZWQgYnkgTUVURCBpbgorICAgICAgICAgICAgIyByNzc0ODMgKGR0b2EuYyBjbGVhbnVwKSwgZml4ZWQgaW4gcjc3NDkwCisgICAgICAgICAgICAnOTY1NDM3MTc2MzMzNjU0OTMxNzk5MDM1NTEzNjcxOTk3MTE4MzQ1NTcwMDQ1OTE0NDY5JyAjLi4uCisgICAgICAgICAgICAnNjIxMzQxMzM1MDgyMTQxNjMxMjE5NDQyMDAwNzk5MTMwNjkwODQ3MDE0NzMyMjAyMDEyMTAxODM2OGUwJywKKyAgICAgICAgICAgICMgaW5jb3JyZWN0IGxzYiBkZXRlY3Rpb24gZm9yIHJvdW5kLWhhbGYtdG8tZXZlbiB3aGVuCisgICAgICAgICAgICAjIGJjLT5zY2FsZSAhPSAwIChpc3N1ZSA3NjMyLCBidWcgNikuCisgICAgICAgICAgICAnMTA0MzA4NDg1MjQxOTgzOTkwNjY2NzEzNDAxNzA4MDcyMTc1NzczMTY1MDM0Mjc4Njg1JyAjLi4uCisgICAgICAgICAgICAnNjgyNjQ2MTExNzYyMjkyNDA5MzMwOTI4NzM5NzUxNzAyNDA0NjU4MTk3ODcyMzE5MTI5JyAjLi4uCisgICAgICAgICAgICAnMDM2NTE5OTQ3NDM1MzE5NDE4Mzg3ODM5NzU4OTkwNDc4NTQ5NDc3Nzc3NTg2NjczMDc1JyAjLi4uCisgICAgICAgICAgICAnOTQ1ODQ0ODk1OTgxMDEyMDI0Mzg3OTkyMTM1NjE3MDY0NTMyMTQxNDg5Mjc4ODE1MjM5JyAjLi4uCisgICAgICAgICAgICAnODQ5MTA4MTA1OTUxNjE5OTk3ODI5MTUzNjMzNTM1MzE0ODQ5OTk5Njc0MjY2MTY5MjU4JyAjLi4uCisgICAgICAgICAgICAnOTI4OTQwNjkyMjM5Njg0NzcxNTkwMDY1MDI3MDI1ODM1ODA0ODYzNTg1NDU0ODcyNDk5JyAjLi4uCisgICAgICAgICAgICAnMzIwNTAwMDIzMTI2MTQyNTUzOTMyNjU0MzcwMzYyMDI0MTA0NDYyMjU1MjQ0MDM0MDUzJyAjLi4uCisgICAgICAgICAgICAnMjAzOTk4OTY0MzYwODgyNDg3Mzc4MzM0ODYwMTk3NzI1MTM5MTUxMjY1NTkwODMyODg3JyAjLi4uCisgICAgICAgICAgICAnNDMzNzM2MTg5NDY4ODU4NjE0NTIxNzA4NTY3NjQ2NzQzNDU1NjAxOTA1OTM1NTk1MzgxJyAjLi4uCisgICAgICAgICAgICAnODUyNzIzNzIzNjQ1Nzk5ODY2NjcyNTU4NTc2OTkzOTc4MDI1MDMzNTkwNzI4Njg3MjA2JyAjLi4uCisgICAgICAgICAgICAnMjk2Mzc5ODAxMzYzMDI0MDk0MDQ4MzI3MjczOTEzMDc5NjEyNDY5OTgyNTg1Njc0ODI0JyAjLi4uCisgICAgICAgICAgICAnMTU2MDAwNzgzMTY3OTYzMDgxNjE2MjE0NzEwNjkxNzU5ODY0MzMyMzM5MjM5Njg4NzM0JyAjLi4uCisgICAgICAgICAgICAnNjU2NTQ4NzkwNjU2NDg2NjQ2MTA2OTgzNDUwODA5MDczNzUwNTM1NjI0ODk0Mjk2MjQyJyAjLi4uCisgICAgICAgICAgICAnMDcyMDEwMTk1NzEwMjc2MDczMDQyMDM2NDI1NTc5ODUyNDU5NTU2MTgzNTQxMTk5MDEyJyAjLi4uCisgICAgICAgICAgICAnNjUyNTcxMTIzODk4OTk2NTc0NTYzODI0NDI0MzMwOTYwMDI3ODczNTE2MDgyNzYzNjcxODc1ZS0xMDc1JywKKyAgICAgICAgICAgICMgZGVtb25zdHJhdGlvbiB0aGF0IG9yaWdpbmFsIGZpeCBmb3IgaXNzdWUgNzYzMiBidWcgMSB3YXMKKyAgICAgICAgICAgICMgYnVnZ3k7IHRoZSBleGl0IGNvbmRpdGlvbiB3YXMgdG9vIHN0cm9uZworICAgICAgICAgICAgJzI0NzAzMjgyMjkyMDYyMzI5NWUtMzQxJywKKyAgICAgICAgICAgICMgZGVtb25zdHJhdGUgc2ltaWxhciBwcm9ibGVtIHRvIGlzc3VlIDc2MzIgYnVnMTogY3Jhc2gKKyAgICAgICAgICAgICMgd2l0aCAnb3ZlcnNpemVkIHF1b3RpZW50IGluIHF1b3JlbScgbWVzc2FnZS4KKyAgICAgICAgICAgICc5OTAzNzQ4NTcwMDI0NTY4MzEwMjgwNTA0MzQzNzM0Njk2NTI0ODAyOTYwMTI4NjQzMWUtMzczJywKKyAgICAgICAgICAgICc5OTYxNzYzOTgzMzc0Mzg2MzE2MTEwOTk2MTE2Mjg4MTAyNzQwNjc2OTUxMDU1ODQ1N2UtMzczJywKKyAgICAgICAgICAgICc5ODg1MjkxNTAyNTc2OTM0NTI5NTc0OTI3ODM1MTU2MzE3OTg0MDEzMDU2NTU5MTQ2MmUtMzcyJywKKyAgICAgICAgICAgICc5OTA1OTk0NDgyNzY5MzU2OTY1OTE1MzA0Mjc2OTY5MDkzMDkwNTE0ODAxNTg3Njc4OGUtMzczJywKKyAgICAgICAgICAgICc5ODkxNDk3OTIwNTA2OTM2ODI3MDQyMTgyOTg4OTA3ODM1NjI1NDA1OTc2MDMyNzEwMWUtMzcyJywKKyAgICAgICAgICAgICMgaXNzdWUgNzYzMiBidWcgNTogdGhlIGZvbGxvd2luZyAyIHN0cmluZ3MgY29udmVydCBkaWZmZXJlbnRseQorICAgICAgICAgICAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlLTE2JywKKyAgICAgICAgICAgICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGUtMTcnLAorICAgICAgICAgICAgIyBpc3N1ZSA3NjMyIGJ1ZyA3CisgICAgICAgICAgICAnOTkxNjMzNzkzMTg5MTUwNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZS0zMycsCisgICAgICAgICAgICAjIEFuZCBhbm90aGVyLCBzaW1pbGFyLCBmYWlsaW5nIGhhbGZ3YXkgY2FzZQorICAgICAgICAgICAgJzQxMDYyNTAxOTgwMzk0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlLTM4JywKKyAgICAgICAgICAgICMgaXNzdWUgNzYzMiBidWcgODogIHRoZSBmb2xsb3dpbmcgcHJvZHVjZWQgMTAuMAorICAgICAgICAgICAgJzEwLjkwMDAwMDAwMDAwMDAwMDAxMjM0NTY3ODkxMjM0NTY3ODkxMjM0NScsCisKKyAgICAgICAgICAgICMgdHdvIGh1bW9uZ291cyB2YWx1ZXMgZnJvbSBpc3N1ZSA3NzQzCisgICAgICAgICAgICAnMTE2NTEyODc0OTQwNTk0MTk1NjM4NjE3OTA3MDkyNTY5ODgxNTE5MDM0NzkzMjI5Mzg1JyAjLi4uCisgICAgICAgICAgICAnMjI4NTY5MTY1MTkxNTQxODkwODQ2NTY0NjY5NzcxNzE0ODk2OTE2MDg0ODgzOTg3OTIwJyAjLi4uCisgICAgICAgICAgICAnNDczMzIxMjY4MTAwMjk2ODU3NjM2MjAwOTI2MDY1MzQwNzY5NjgyODYzMzQ5MjA1MzYzJyAjLi4uCisgICAgICAgICAgICAnMzQ5MjQ3NjM3NjYwNjcxNzgzMjA5OTA3OTQ5MjczNjgzMDQwMzk3OTc5OTg0MTA3ODA2JyAjLi4uCisgICAgICAgICAgICAnNDYxODIyNjkzMzMyNzEyODI4Mzk3NjE3OTQ2MDM2MjM5NTgxNjMyOTc2NTg1MTAwNjMzJyAjLi4uCisgICAgICAgICAgICAnNTIwMjYwNzcwNzYxMDYwNzI1NDAzOTA0MTIzMTQ0Mzg0NTcxNjEyMDczNzMyNzU0Nzc0JyAjLi4uCisgICAgICAgICAgICAnNTg4MjExOTQ0NDA2NDY1NTcyNTkxMDIyMDgxOTczODI4NDQ4OTI3MzM4NjAyNTU2Mjg3JyAjLi4uCisgICAgICAgICAgICAnODUxODMxNzQ1NDE5Mzk3NDMzMDEyNDkxODg0ODY5NDU0NDYyNDQwNTM2ODk1MDQ3NDk5JyAjLi4uCisgICAgICAgICAgICAnNDM2NTUxOTc0NjQ5NzMxOTE3MTcwMDk5Mzg3NzYyODcxMDIwNDAzNTgyOTk0MTkzNDM5JyAjLi4uCisgICAgICAgICAgICAnNzYxOTMzNDEyMTY2ODIxNDg0MDE1ODgzNjMxNjIyNTM5MzE0MjAzNzk5MDM0NDk3OTgyJyAjLi4uCisgICAgICAgICAgICAnMTMwMDM4NzQxNzQxNzI3OTA3NDI5NTc1NjczMzAyNDYxMzgwMzg2NTk2NTAxMTg3NDgyJyAjLi4uCisgICAgICAgICAgICAnMDA2MjU3NTI3NzA5ODQyMTc5MzM2NDg4MzgxNjcyODE4Nzk4NDUwMjI5MzM5MTIzNTI3JyAjLi4uCisgICAgICAgICAgICAnODU4ODQ0NDQ4MzM2ODE1OTEyMDIwNDUyMjk0NjI0OTE2OTkzNTQ2Mzg4OTU2NTYxNTIyJyAjLi4uCisgICAgICAgICAgICAnMTYxODc1MzUyNTcyNTkwNDIwODIzNjA3NDc4Nzg4Mzk5NDYwMTYyMjI4MzA4NjkzNzQyJyAjLi4uCisgICAgICAgICAgICAnMDUyODc2NjM0NDE0MDM1MzM5NDgyMDQwODUzOTA4OTgzOTkwNTUwMDQxMTk4NzMwNDY4NzVlLTEwNzUnLAorCisgICAgICAgICAgICAnNTI1NDQwNjUzMzUyOTU1MjY2MTA5NjYxMDYwMzU4MjAyODE5NTYxMjU4OTg0OTY0OTEzJyAjLi4uCisgICAgICAgICAgICAnODkyMjU2NTI3ODQ5NzU4OTU2MDQ1MjE4MjU3MDU5NzEzNzY1ODc0MjUxNDM2MTkzNjE5JyAjLi4uCisgICAgICAgICAgICAnNDQzMjQ4MjA1OTk4ODcwMDAxNjMzODY1NjU3NTE3NDQ3MzU1OTkyMjI1ODUyOTQ1OTEyJyAjLi4uCisgICAgICAgICAgICAnMDE2NjY4NjYwMDAwMjEwMjgzODA3MjA5ODUwNjYyMjI0NDE3NTA0NzUyMjY0OTk1MzYwJyAjLi4uCisgICAgICAgICAgICAnNjMxNTEyMDA3NzUzODU1ODAxMDc1MzczMDU3NjMyMTU3NzM4NzUyODAwODQwMzAyNTk2JyAjLi4uCisgICAgICAgICAgICAnMjM3MDUwMjQ3OTEwNTMwNTM4MjUwMDA4NjgyMjcyNzgzNjYwNzc4MTgxNjI4MDQwNzMzJyAjLi4uCisgICAgICAgICAgICAnNjUzMTIxNDkyNDM2NDA4ODEyNjY4MDIzNDc4MDAxMjA4NTI5MTkwMzU5MjU0MzIyMzQwJyAjLi4uCisgICAgICAgICAgICAnMzk3NTc1MTg1MjQ4ODQ0Nzg4NTE1NDEwNzIyOTU4Nzg0NjQwOTI2NTI4NTQ0MDQzMDkwJyAjLi4uCisgICAgICAgICAgICAnMTE1MzUyNTEzNjQwODg0OTg4MDE3MzQyNDY5Mjc1MDA2OTk5MTA0NTE5NjIwOTQ2NDMwJyAjLi4uCisgICAgICAgICAgICAnODE4NzY3MTQ3OTY2NDk1NDg1NDA2NTc3NzAzOTcyNjg3ODM4MTc2Nzc4OTkzNDcyOTg5JyAjLi4uCisgICAgICAgICAgICAnNTYxOTU5MDAwMDQ3MDM2NjM4OTM4Mzk2MzMzMTQ2Njg1MTM3OTAzMDE4Mzc2NDk2NDA4JyAjLi4uCisgICAgICAgICAgICAnMzE5NzA1MzMzODY4NDc2OTI1Mjk3MzE3MTM2NTEzOTcwMTg5MDczNjkzMzE0NzEwMzE4JyAjLi4uCisgICAgICAgICAgICAnOTkxMjUyODExMDUwNTAxNDQ4MzI2ODc1MjMyODUwNjAwNDUxNzc2MDkxMzAzMDQzNzE1JyAjLi4uCisgICAgICAgICAgICAnMTU3MTkxMjkyODI3NjE0MDQ2ODc2OTUwMjI1NzE0NzQzMTE4MjkxMDM0NzgwNDY2MzI1JyAjLi4uCisgICAgICAgICAgICAnMDg1MTQxMzQzNzM0NTY0OTE1MTkzNDI2OTk0NTg3MjA2NDMyNjk3MzM3MTE4MjExNTI3JyAjLi4uCisgICAgICAgICAgICAnMjc4OTY4NzMxMjk0NjM5MzUzMzU0Nzc0Nzg4NjAyNDY3Nzk1MTY3ODc1MTE3NDgxNjYwJyAjLi4uCisgICAgICAgICAgICAnNDczODc5MTI1Njg1MzY3NTY5MDU0MzY2MzI4Mzc4MjIxNTg2NjgyNWUtMTE4MCcsCisKKyAgICAgICAgICAgICMgZXhlcmNpc2UgZXhpdCBjb25kaXRpb25zIGluIGJpZ2NvbXAgY29tcGFyaXNvbiBsb29wCisgICAgICAgICAgICAnMjYwMjEyOTI5ODQwNDk2MzA4MzgzMzg1MzQ3OTExMzU3NzI1MzEwNTkzOTk5NTY4OGUyJywKKyAgICAgICAgICAgICcyNjAyMTI5Mjk4NDA0OTYzMDgzODMzODUzNDc5MTEzNTc3MjUzMTA1OTM5OTk1Njg4OTZlMCcsCisgICAgICAgICAgICAnMjYwMjEyOTI5ODQwNDk2MzA4MzgzMzg1MzQ3OTExMzU3NzI1MzEwNTkzOTk5NTY4ODk2MDFlLTInLAorICAgICAgICAgICAgJzI2MDIxMjkyOTg0MDQ5NjMwODM4MzM4NTM0NzkxMTM1NzcyNTMxMDU5Mzk5OTU2ODg5NWUwJywKKyAgICAgICAgICAgICcyNjAyMTI5Mjk4NDA0OTYzMDgzODMzODUzNDc5MTEzNTc3MjUzMTA1OTM5OTk1Njg4OTdlMCcsCisgICAgICAgICAgICAnMjYwMjEyOTI5ODQwNDk2MzA4MzgzMzg1MzQ3OTExMzU3NzI1MzEwNTkzOTk5NTY4OTk2ZTAnLAorICAgICAgICAgICAgJzI2MDIxMjkyOTg0MDQ5NjMwODM4MzM4NTM0NzkxMTM1NzcyNTMxMDU5Mzk5OTU2ODg2NmUwJywKKyAgICAgICAgICAgICMgMioqNTMKKyAgICAgICAgICAgICc5MDA3MTk5MjU0NzQwOTkyLjAwJywKKyAgICAgICAgICAgICMgMioqMTAyNCAtIDIqKjk3MDogIGV4YWN0IG92ZXJmbG93IGJvdW5kYXJ5LiAgQWxsIHZhbHVlcworICAgICAgICAgICAgIyBzbWFsbGVyIHRoYW4gdGhpcyBzaG91bGQgcm91bmQgdG8gc29tZXRoaW5nIGZpbml0ZTsgIGFueSB2YWx1ZQorICAgICAgICAgICAgIyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyBvbmUgb3ZlcmZsb3dzLgorICAgICAgICAgICAgJzE3OTc2OTMxMzQ4NjIzMTU4MDc5MzcyODk3MTQwNTMwMzQxNTA3OTkzNDEzMjcxMDAzNycgIy4uLgorICAgICAgICAgICAgJzgyNjkzNjE3Mzc3ODk4MDQ0NDk2ODI5Mjc2NDc1MDk0NjY0OTAxNzk3NzU4NzIwNzA5NicgIy4uLgorICAgICAgICAgICAgJzMzMDI4NjQxNjY5Mjg4NzkxMDk0NjU1NTU0Nzg1MTk0MDQwMjYzMDY1NzQ4ODY3MTUwNScgIy4uLgorICAgICAgICAgICAgJzgyMDY4MTkwODkwMjAwMDcwODM4MzY3NjI3Mzg1NDg0NTgxNzcxMTUzMTc2NDQ3NTczMCcgIy4uLgorICAgICAgICAgICAgJzI3MDA2OTg1NTU3MTM2Njk1OTYyMjg0MjkxNDgxOTg2MDgzNDkzNjQ3NTI5MjcxOTA3NCcgIy4uLgorICAgICAgICAgICAgJzE2ODQ0NDM2NTUxMDcwNDM0MjcxMTU1OTY5OTUwODA5MzA0Mjg4MDE3NzkwNDE3NDQ5Nzc5MicsCisgICAgICAgICAgICAjIDIqKjEwMjQgLSAyKio5NzAgLSB0aW55CisgICAgICAgICAgICAnMTc5NzY5MzEzNDg2MjMxNTgwNzkzNzI4OTcxNDA1MzAzNDE1MDc5OTM0MTMyNzEwMDM3JyAjLi4uCisgICAgICAgICAgICAnODI2OTM2MTczNzc4OTgwNDQ0OTY4MjkyNzY0NzUwOTQ2NjQ5MDE3OTc3NTg3MjA3MDk2JyAjLi4uCisgICAgICAgICAgICAnMzMwMjg2NDE2NjkyODg3OTEwOTQ2NTU1NTQ3ODUxOTQwNDAyNjMwNjU3NDg4NjcxNTA1JyAjLi4uCisgICAgICAgICAgICAnODIwNjgxOTA4OTAyMDAwNzA4MzgzNjc2MjczODU0ODQ1ODE3NzExNTMxNzY0NDc1NzMwJyAjLi4uCisgICAgICAgICAgICAnMjcwMDY5ODU1NTcxMzY2OTU5NjIyODQyOTE0ODE5ODYwODM0OTM2NDc1MjkyNzE5MDc0JyAjLi4uCisgICAgICAgICAgICAnMTY4NDQ0MzY1NTEwNzA0MzQyNzExNTU5Njk5NTA4MDkzMDQyODgwMTc3OTA0MTc0NDk3NzkxLjk5OScsCisgICAgICAgICAgICAjIDIqKjEwMjQgLSAyKio5NzAgKyB0aW55CisgICAgICAgICAgICAnMTc5NzY5MzEzNDg2MjMxNTgwNzkzNzI4OTcxNDA1MzAzNDE1MDc5OTM0MTMyNzEwMDM3JyAjLi4uCisgICAgICAgICAgICAnODI2OTM2MTczNzc4OTgwNDQ0OTY4MjkyNzY0NzUwOTQ2NjQ5MDE3OTc3NTg3MjA3MDk2JyAjLi4uCisgICAgICAgICAgICAnMzMwMjg2NDE2NjkyODg3OTEwOTQ2NTU1NTQ3ODUxOTQwNDAyNjMwNjU3NDg4NjcxNTA1JyAjLi4uCisgICAgICAgICAgICAnODIwNjgxOTA4OTAyMDAwNzA4MzgzNjc2MjczODU0ODQ1ODE3NzExNTMxNzY0NDc1NzMwJyAjLi4uCisgICAgICAgICAgICAnMjcwMDY5ODU1NTcxMzY2OTU5NjIyODQyOTE0ODE5ODYwODM0OTM2NDc1MjkyNzE5MDc0JyAjLi4uCisgICAgICAgICAgICAnMTY4NDQ0MzY1NTEwNzA0MzQyNzExNTU5Njk5NTA4MDkzMDQyODgwMTc3OTA0MTc0NDk3NzkyLjAwMScsCisgICAgICAgICAgICAjIDEgLSAyKiotNTQsICstdGlueQorICAgICAgICAgICAgJzk5OTk5OTk5OTk5OTk5OTk0NDQ4ODg0ODc2ODc0MjE3Mjk3ODgxODQxNjU5NTQ1ODk4NDM3NWUtNTQnLAorICAgICAgICAgICAgJzk5OTk5OTk5OTk5OTk5OTk0NDQ4ODg0ODc2ODc0MjE3Mjk3ODgxODQxNjU5NTQ1ODk4NDM3NDk5OTk5OTllLTU0JywKKyAgICAgICAgICAgICc5OTk5OTk5OTk5OTk5OTk5NDQ0ODg4NDg3Njg3NDIxNzI5Nzg4MTg0MTY1OTU0NTg5ODQzNzUwMDAwMDAxZS01NCcsCisgICAgICAgICAgICBdCisgICAgICAgIGZvciBzIGluIHRlc3Rfc3RyaW5nczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cnRvZFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CmluZGV4IGI3YzIxMjcuLjVhNjMxMzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CkBAIC0zLDI4ICszLDIzIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBpbnNwZWN0Ci1pbXBvcnQgd2FybmluZ3MKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfd2FybmluZ3MsIF9jaGVja19weTNrX3dhcm5pbmdzCi0KLQotZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0RmFpbGVkLCB2ZXJib3NlLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfd2FybmluZ3MsIGNoZWNrX3B5M2tfd2FybmluZ3MKIAogaW1wb3J0IHN5cwogSVNCSUdFTkRJQU4gPSBzeXMuYnl0ZW9yZGVyID09ICJiaWciCiBJUzMyQklUID0gc3lzLm1heHNpemUgPT0gMHg3ZmZmZmZmZgogCitpbnRlZ2VyX2NvZGVzID0gJ2InLCAnQicsICdoJywgJ0gnLCAnaScsICdJJywgJ2wnLCAnTCcsICdxJywgJ1EnCisKIHRlc3Rtb2RfZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KF9fZmlsZV9fKVswXSArICcucHknCisjIE5hdGl2ZSAncScgcGFja2luZyBpc24ndCBhdmFpbGFibGUgb24gc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgdGhlIEMKKyMgbG9uZyBsb25nIHR5cGUuCiB0cnk6Ci0gICAgaW1wb3J0IF9zdHJ1Y3QKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBQWV9TVFJVQ1RfUkFOR0VfQ0hFQ0tJTkcgPSAwCi0gICAgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcgPSAxCi0gICAgUFlfU1RSVUNUX0ZMT0FUX0NPRVJDRSA9IDIKKyAgICBzdHJ1Y3QucGFjaygncScsIDUpCitleGNlcHQgc3RydWN0LmVycm9yOgorICAgIEhBVkVfTE9OR19MT05HID0gRmFsc2UKIGVsc2U6Ci0gICAgUFlfU1RSVUNUX1JBTkdFX0NIRUNLSU5HID0gZ2V0YXR0cihfc3RydWN0LCAnX1BZX1NUUlVDVF9SQU5HRV9DSEVDS0lORycsIDApCi0gICAgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcgPSBnZXRhdHRyKF9zdHJ1Y3QsICdfUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcnLCAwKQotICAgIFBZX1NUUlVDVF9GTE9BVF9DT0VSQ0UgPSBnZXRhdHRyKF9zdHJ1Y3QsICdfUFlfU1RSVUNUX0ZMT0FUX0NPRVJDRScsIDApCisgICAgSEFWRV9MT05HX0xPTkcgPSBUcnVlCiAKIGRlZiBzdHJpbmdfcmV2ZXJzZShzKToKICAgICByZXR1cm4gIiIuam9pbihyZXZlcnNlZChzKSkKQEAgLTM1LDU2ICszMCwyMCBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBzdHJpbmdfcmV2ZXJzZSh2YWx1ZSkKIAotZGVmIHdpdGhfd2FybmluZ19yZXN0b3JlKGZ1bmMpOgotICAgIEB3cmFwcyhmdW5jKQotICAgIGRlZiBkZWNvcmF0b3IoKmFyZ3MsICoqa3cpOgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICAjIFdlIG5lZWQgdGhpcyBmdW5jdGlvbiB0byB3YXJuIGV2ZXJ5IHRpbWUsIHNvIHN0aWNrIGFuCi0gICAgICAgICAgICAjIHVucXVhbGlmZWQgJ2Fsd2F5cycgYXQgdGhlIGhlYWQgb2YgdGhlIGZpbHRlciBsaXN0Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCi0gICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprdykKLSAgICByZXR1cm4gZGVjb3JhdG9yCi0KLUB3aXRoX3dhcm5pbmdfcmVzdG9yZQotZGVmIGRlcHJlY2F0ZWRfZXJyKGZ1bmMsICphcmdzKToKLSAgICB0cnk6Ci0gICAgICAgIGZ1bmMoKmFyZ3MpCi0gICAgZXhjZXB0IChzdHJ1Y3QuZXJyb3IsIFR5cGVFcnJvcik6Ci0gICAgICAgIHBhc3MKLSAgICBleGNlcHQgRGVwcmVjYXRpb25XYXJuaW5nOgotICAgICAgICBpZiBub3QgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkc6Ci0gICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCAiJXMlcyBleHBlY3RlZCB0byByYWlzZSBEZXByZWNhdGlvbldhcm5pbmciICUgKAotICAgICAgICAgICAgICAgIGZ1bmMuX19uYW1lX18sIGFyZ3MpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgIiVzJXMgZGlkIG5vdCByYWlzZSBlcnJvciIgJSAoCi0gICAgICAgICAgICBmdW5jLl9fbmFtZV9fLCBhcmdzKQotCi0KIGNsYXNzIFN0cnVjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgQHdpdGhfd2FybmluZ19yZXN0b3JlCiAgICAgZGVmIGNoZWNrX2Zsb2F0X2NvZXJjZShzZWxmLCBmb3JtYXQsIG51bWJlcik6Ci0gICAgICAgICMgU0YgYnVnIDE1MzA1NTkuIHN0cnVjdC5wYWNrIHJhaXNlcyBUeXBlRXJyb3Igd2hlcmUgaXQgdXNlZCB0byBjb252ZXJ0LgotICAgICAgICBpZiBQWV9TVFJVQ1RfRkxPQVRfQ09FUkNFID09IDI6Ci0gICAgICAgICAgICAjIFRlc3QgZm9yIHByZS0yLjUgc3RydWN0IG1vZHVsZQotICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoIi4qaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSkgYXMgdzoKLSAgICAgICAgICAgICAgICBwYWNrZWQgPSBzdHJ1Y3QucGFjayhmb3JtYXQsIG51bWJlcikKLSAgICAgICAgICAgICAgICBmbG9vcmVkID0gc3RydWN0LnVucGFjayhmb3JtYXQsIHBhY2tlZClbMF0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvb3JlZCwgaW50KG51bWJlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGNvcnJlY2x5IGNvZXJjZSBmbG9hdCB0byBpbnQiKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0cnVjdC5wYWNrKGZvcm1hdCwgbnVtYmVyKQotICAgICAgICBleGNlcHQgKHN0cnVjdC5lcnJvciwgVHlwZUVycm9yKToKLSAgICAgICAgICAgIGlmIFBZX1NUUlVDVF9GTE9BVF9DT0VSQ0U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBEZXByZWNhdGlvbldhcm5pbmcgZm9yIGZsb2F0IGNvZXJjZSIpCi0gICAgICAgIGV4Y2VwdCBEZXByZWNhdGlvbldhcm5pbmc6Ci0gICAgICAgICAgICBpZiBub3QgUFlfU1RSVUNUX0ZMT0FUX0NPRVJDRToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIHRvIHJhaXNlIHN0cnVjdC5lcnJvciBmb3IgZmxvYXQgY29lcmNlIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkIG5vdCByYWlzZSBlcnJvciBmb3IgZmxvYXQgY29lcmNlIikKKyAgICAgICAgIyBTRiBidWcgMTUzMDU1OS4gc3RydWN0LnBhY2sgcmFpc2VzIFR5cGVFcnJvciB3aGVyZSBpdCB1c2VkCisgICAgICAgICMgdG8gY29udmVydC4KKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoIi4qaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSkgYXMgdzoKKyAgICAgICAgICAgIGdvdCA9IHN0cnVjdC5wYWNrKGZvcm1hdCwgbnVtYmVyKQorICAgICAgICBsaW5lbm8gPSBpbnNwZWN0LmN1cnJlbnRmcmFtZSgpLmZfbGluZW5vIC0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuZmlsZW5hbWUsIHRlc3Rtb2RfZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5saW5lbm8sIGxpbmVubykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDEpCisgICAgICAgIGV4cGVjdGVkID0gc3RydWN0LnBhY2soZm9ybWF0LCBpbnQobnVtYmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfaXNiaWdlbmRpYW4oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHN0cnVjdC5wYWNrKCc9aScsIDEpWzBdID09IGNocigwKSksIElTQklHRU5ESUFOKQpAQCAtMTAzLDM2ICs2MiwxMyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnBhY2ssICdpaWknLCAzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAnaScsIDMsIDMsIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnBhY2ssICdpJywgJ2ZvbycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnBhY2ssICdQJywgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksIHN0cnVjdC5wYWNrLCAnaScsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLCBzdHJ1Y3QucGFjaywgJ1AnLCAnZm9vJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QudW5wYWNrLCAnZCcsICdmbGFwJykKICAgICAgICAgcyA9IHN0cnVjdC5wYWNrKCdpaScsIDEsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnVucGFjaywgJ2lpaScsIHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnVucGFjaywgJ2knLCBzKQogCi0gICAgZGVmIHRlc3Rfd2FybmluZ3Nfc3RhY2tsZXZlbChzZWxmKToKLSAgICAgICAgIyBQeXRob24gdmVyc2lvbnMgYmV0d2VlbiAyLjYgYW5kIDIuNi41IHdlcmUgcHJvZHVjaW5nCi0gICAgICAgICMgd2FybmluZyBtZXNzYWdlcyBhdCB0aGUgd3Jvbmcgc3RhY2tsZXZlbC4KLSAgICAgICAgZGVmIGlubmVyKGZuLCAqYXJncyk6Ci0gICAgICAgICAgICByZXR1cm4gaW5zcGVjdC5jdXJyZW50ZnJhbWUoKS5mX2xpbmVubywgZm4oKmFyZ3MpCi0KLSAgICAgICAgZGVmIGNoZWNrX3dhcm5pbmdfc3RhY2tsZXZlbChmbiwgKmFyZ3MpOgotICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKLSAgICAgICAgICAgICAgICAjICJhbHdheXMiIHRvIG1ha2Ugc3VyZSBfX3dhcm5pbmdyZWdpc3RyeV9fIGlzbid0IGFmZmVjdGVkCi0gICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgICAgIGxpbmVubywgcmVzdWx0ID0gaW5uZXIoZm4sICphcmdzKQotICAgICAgICAgICAgZm9yIHdhcm4gaW4gdzoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhcm4ubGluZW5vLCBsaW5lbm8pCi0KLSAgICAgICAgIyBvdXQgb2YgcmFuZ2Ugd2FybmluZ3MKLSAgICAgICAgY2hlY2tfd2FybmluZ19zdGFja2xldmVsKHN0cnVjdC5wYWNrLCAnPEwnLCAtMSkKLSAgICAgICAgY2hlY2tfd2FybmluZ19zdGFja2xldmVsKHN0cnVjdC5wYWNrLCAnTCcsIC0xKQotICAgICAgICBjaGVja193YXJuaW5nX3N0YWNrbGV2ZWwoc3RydWN0LnBhY2ssICc8aCcsIDY1NTM2KQotICAgICAgICBjaGVja193YXJuaW5nX3N0YWNrbGV2ZWwoc3RydWN0LnBhY2ssICc8bCcsIDIqKjEwMCkKLQotICAgICAgICAjIGZsb2F0IHdhcm5pbmdzCi0gICAgICAgIGNoZWNrX3dhcm5pbmdfc3RhY2tsZXZlbChzdHJ1Y3QucGFjaywgJ0wnLCAzLjEpCi0KICAgICBkZWYgdGVzdF90cmFuc2l0aXZlbmVzcyhzZWxmKToKICAgICAgICAgYyA9ICdhJwogICAgICAgICBiID0gMQpAQCAtMjA4LDk4ICsxNDQsOTEgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC5jYWxjc2l6ZSh4Zm10KSwgbGVuKHJlcykpCiAgICAgICAgICAgICAgICAgcmV2ID0gc3RydWN0LnVucGFjayh4Zm10LCByZXMpWzBdCiAgICAgICAgICAgICAgICAgaWYgcmV2ICE9IGFyZzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGFzeSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeSkKIAotICAgIGRlZiB0ZXN0X25hdGl2ZV9xUShzZWxmKToKLSAgICAgICAgIyBjYW4ndCBwYWNrIC0xIGFzIHVuc2lnbmVkIHJlZ2FyZGxlc3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKHN0cnVjdC5lcnJvciwgVHlwZUVycm9yKSwgc3RydWN0LnBhY2ssICJRIiwgLTEpCi0gICAgICAgICMgY2FuJ3QgcGFjayBzdHJpbmcgYXMgJ3EnIHJlZ2FyZGxlc3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFjaywgInEiLCAiYSIpCi0gICAgICAgICMgZGl0dG8sIGJ1dCAnUScKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFjaywgIlEiLCAiYSIpCisgICAgZGVmIHRlc3RfY2FsY3NpemUoc2VsZik6CisgICAgICAgIGV4cGVjdGVkX3NpemUgPSB7CisgICAgICAgICAgICAnYic6IDEsICdCJzogMSwKKyAgICAgICAgICAgICdoJzogMiwgJ0gnOiAyLAorICAgICAgICAgICAgJ2knOiA0LCAnSSc6IDQsCisgICAgICAgICAgICAnbCc6IDQsICdMJzogNCwKKyAgICAgICAgICAgICdxJzogOCwgJ1EnOiA4LAorICAgICAgICAgICAgfQogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0cnVjdC5wYWNrKCJxIiwgNSkKLSAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvcjoKLSAgICAgICAgICAgICMgZG9lcyBub3QgaGF2ZSBuYXRpdmUgcS9RCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBieXRlcyA9IHN0cnVjdC5jYWxjc2l6ZSgncScpCi0gICAgICAgICAgICAjIFRoZSBleHBlY3RlZCB2YWx1ZXMgaGVyZSBhcmUgaW4gYmlnLWVuZGlhbiBmb3JtYXQsIHByaW1hcmlseQotICAgICAgICAgICAgIyBiZWNhdXNlIEknbSBvbiBhIGxpdHRsZS1lbmRpYW4gbWFjaGluZSBhbmQgc28gdGhpcyBpcyB0aGUKLSAgICAgICAgICAgICMgY2xlYXJlc3Qgd2F5IChmb3IgbWUpIHRvIGZvcmNlIHRoZSBjb2RlIHRvIGdldCBleGVyY2lzZWQuCi0gICAgICAgICAgICBmb3IgZm9ybWF0LCBpbnB1dCwgZXhwZWN0ZWQgaW4gKAotICAgICAgICAgICAgICAgICAgICAoJ3EnLCAtMSwgJ1x4ZmYnICogYnl0ZXMpLAotICAgICAgICAgICAgICAgICAgICAoJ3EnLCAwLCAnXHgwMCcgKiBieXRlcyksCi0gICAgICAgICAgICAgICAgICAgICgnUScsIDAsICdceDAwJyAqIGJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgKCdxJywgMUwsICdceDAwJyAqIChieXRlcy0xKSArICdceDAxJyksCi0gICAgICAgICAgICAgICAgICAgICgnUScsICgxTCA8PCAoOCpieXRlcykpLTEsICdceGZmJyAqIGJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgKCdxJywgKDFMIDw8ICg4KmJ5dGVzLTEpKS0xLCAnXHg3ZicgKyAnXHhmZicgKiAoYnl0ZXMgLSAxKSkpOgotICAgICAgICAgICAgICAgIGdvdCA9IHN0cnVjdC5wYWNrKGZvcm1hdCwgaW5wdXQpCi0gICAgICAgICAgICAgICAgbmF0aXZlX2V4cGVjdGVkID0gYmlnZW5kaWFuX3RvX25hdGl2ZShleHBlY3RlZCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgbmF0aXZlX2V4cGVjdGVkKQotICAgICAgICAgICAgICAgIHJldHJpZXZlZCA9IHN0cnVjdC51bnBhY2soZm9ybWF0LCBnb3QpWzBdCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXRyaWV2ZWQsIGlucHV0KQorICAgICAgICAjIHN0YW5kYXJkIGludGVnZXIgc2l6ZXMKKyAgICAgICAgZm9yIGNvZGUgaW4gaW50ZWdlcl9jb2RlczoKKyAgICAgICAgICAgIGZvciBieXRlb3JkZXIgaW4gKCc9JywgJzwnLCAnPicsICchJyk6CisgICAgICAgICAgICAgICAgZm9ybWF0ID0gYnl0ZW9yZGVyK2NvZGUKKyAgICAgICAgICAgICAgICBzaXplID0gc3RydWN0LmNhbGNzaXplKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGV4cGVjdGVkX3NpemVbY29kZV0pCiAKLSAgICBkZWYgdGVzdF9zdGFuZGFyZF9pbnRlZ2VycyhzZWxmKToKLSAgICAgICAgIyBTdGFuZGFyZCBpbnRlZ2VyIHRlc3RzIChiQmhIaUlsTHFRKS4KKyAgICAgICAgIyBuYXRpdmUgaW50ZWdlciBzaXplcywgZXhjZXB0ICdxJyBhbmQgJ1EnCisgICAgICAgIGZvciBmb3JtYXRfcGFpciBpbiAoJ2JCJywgJ2hIJywgJ2lJJywgJ2xMJyk6CisgICAgICAgICAgICBmb3IgYnl0ZW9yZGVyIGluIFsnJywgJ0AnXToKKyAgICAgICAgICAgICAgICBzaWduZWRfc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShieXRlb3JkZXIgKyBmb3JtYXRfcGFpclswXSkKKyAgICAgICAgICAgICAgICB1bnNpZ25lZF9zaXplID0gc3RydWN0LmNhbGNzaXplKGJ5dGVvcmRlciArIGZvcm1hdF9wYWlyWzFdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmVkX3NpemUsIHVuc2lnbmVkX3NpemUpCisKKyAgICAgICAgIyBib3VuZHMgZm9yIG5hdGl2ZSBpbnRlZ2VyIHNpemVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RydWN0LmNhbGNzaXplKCdiJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDIsIHN0cnVjdC5jYWxjc2l6ZSgnaCcpKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCg0LCBzdHJ1Y3QuY2FsY3NpemUoJ2wnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc3RydWN0LmNhbGNzaXplKCdoJyksIHN0cnVjdC5jYWxjc2l6ZSgnaScpKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzdHJ1Y3QuY2FsY3NpemUoJ2knKSwgc3RydWN0LmNhbGNzaXplKCdsJykpCisKKyAgICAgICAgIyB0ZXN0cyBmb3IgbmF0aXZlICdxJyBhbmQgJ1EnIHdoZW4gYXBwbGljYWJsZQorICAgICAgICBpZiBIQVZFX0xPTkdfTE9ORzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RydWN0LmNhbGNzaXplKCdxJyksIHN0cnVjdC5jYWxjc2l6ZSgnUScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoOCwgc3RydWN0LmNhbGNzaXplKCdxJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzdHJ1Y3QuY2FsY3NpemUoJ2wnKSwgc3RydWN0LmNhbGNzaXplKCdxJykpCisKKyAgICBkZWYgdGVzdF9pbnRlZ2VycyhzZWxmKToKKyAgICAgICAgIyBJbnRlZ2VyIHRlc3RzIChiQmhIaUlsTHFRKS4KICAgICAgICAgaW1wb3J0IGJpbmFzY2lpCiAKICAgICAgICAgY2xhc3MgSW50VGVzdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICAgICAgICAgIyBYWFggTW9zdCBzdGQgaW50ZWdlciBtb2RlcyBmYWlsIHRvIHRlc3QgZm9yIG91dC1vZi1yYW5nZS4KLSAgICAgICAgICAgICMgVGhlICJpIiBhbmQgImwiIGNvZGVzIGFwcGVhciB0byByYW5nZS1jaGVjayBPSyBvbiAzMi1iaXQgYm94ZXMsIGJ1dAotICAgICAgICAgICAgIyBmYWlsIHRvIGNoZWNrIGNvcnJlY3RseSBvbiBzb21lIDY0LWJpdCBvbmVzIChUcnU2NCBVbml4ICsgQ29tcGFxIEMKLSAgICAgICAgICAgICMgcmVwb3J0ZWQgYnkgTWFyayBGYXZhcykuCi0gICAgICAgICAgICBCVUdHWV9SQU5HRV9DSEVDSyA9ICJiQmhIaUlsTCIKLQotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvcm1hdHBhaXIsIGJ5dGVzaXplKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmb3JtYXRwYWlyKSwgMikKLSAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdHBhaXIgPSBmb3JtYXRwYWlyCi0gICAgICAgICAgICAgICAgZm9yIGRpcmVjdGlvbiBpbiAiPD4hPSI6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBjb2RlIGluIGZvcm1hdHBhaXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBkaXJlY3Rpb24gKyBjb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC5jYWxjc2l6ZShmb3JtYXQpLCBieXRlc2l6ZSkKLSAgICAgICAgICAgICAgICBzZWxmLmJ5dGVzaXplID0gYnl0ZXNpemUKLSAgICAgICAgICAgICAgICBzZWxmLmJpdHNpemUgPSBieXRlc2l6ZSAqIDgKLSAgICAgICAgICAgICAgICBzZWxmLnNpZ25lZF9jb2RlLCBzZWxmLnVuc2lnbmVkX2NvZGUgPSBmb3JtYXRwYWlyCi0gICAgICAgICAgICAgICAgc2VsZi51bnNpZ25lZF9taW4gPSAwCi0gICAgICAgICAgICAgICAgc2VsZi51bnNpZ25lZF9tYXggPSAyTCoqc2VsZi5iaXRzaXplIC0gMQotICAgICAgICAgICAgICAgIHNlbGYuc2lnbmVkX21pbiA9IC0oMkwqKihzZWxmLmJpdHNpemUtMSkpCi0gICAgICAgICAgICAgICAgc2VsZi5zaWduZWRfbWF4ID0gMkwqKihzZWxmLmJpdHNpemUtMSkgLSAxCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9ybWF0KToKKyAgICAgICAgICAgICAgICBzdXBlcihJbnRUZXN0ZXIsIHNlbGYpLl9faW5pdF9fKG1ldGhvZE5hbWU9J3Rlc3Rfb25lJykKKyAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdCA9IGZvcm1hdAorICAgICAgICAgICAgICAgIHNlbGYuY29kZSA9IGZvcm1hdFstMV0KKyAgICAgICAgICAgICAgICBzZWxmLmRpcmVjdGlvbiA9IGZvcm1hdFs6LTFdCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZGlyZWN0aW9uIGluICgnJywgJ0AnLCAnPScsICc8JywgJz4nLCAnIScpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnJlY29nbml6ZWQgcGFja2luZyBkaXJlY3Rpb246ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3Rpb24pCisgICAgICAgICAgICAgICAgc2VsZi5ieXRlc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShmb3JtYXQpCisgICAgICAgICAgICAgICAgc2VsZi5iaXRzaXplID0gc2VsZi5ieXRlc2l6ZSAqIDgKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvZGUgaW4gdHVwbGUoJ2JoaWxxJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2lnbmVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbl92YWx1ZSA9IC0oMkwqKihzZWxmLmJpdHNpemUtMSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWF4X3ZhbHVlID0gMkwqKihzZWxmLmJpdHNpemUtMSkgLSAxCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLmNvZGUgaW4gdHVwbGUoJ0JISUxRJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2lnbmVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5taW5fdmFsdWUgPSAwCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWF4X3ZhbHVlID0gMkwqKnNlbGYuYml0c2l6ZSAtIDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnJlY29nbml6ZWQgZm9ybWF0IGNvZGU6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2RlKQogCiAgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZiwgeCwgcGFjaz1zdHJ1Y3QucGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnBhY2s9c3RydWN0LnVucGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmhleGxpZnk9YmluYXNjaWkudW5oZXhsaWZ5KToKLSAgICAgICAgICAgICAgICAjIFRyeSBzaWduZWQuCi0gICAgICAgICAgICAgICAgY29kZSA9IHNlbGYuc2lnbmVkX2NvZGUKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnNpZ25lZF9taW4gPD0geCA8PSBzZWxmLnNpZ25lZF9tYXg6Ci0gICAgICAgICAgICAgICAgICAgICMgVHJ5IGJpZy1lbmRpYW4uCisKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBzZWxmLmZvcm1hdAorICAgICAgICAgICAgICAgIGlmIHNlbGYubWluX3ZhbHVlIDw9IHggPD0gc2VsZi5tYXhfdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbG9uZyh4KQotICAgICAgICAgICAgICAgICAgICBpZiB4IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zaWduZWQgYW5kIHggPCAwOgogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKz0gMUwgPDwgc2VsZi5iaXRzaXplCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oZXhwZWN0ZWQgPiAwKQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGhleChleHBlY3RlZClbMjotMV0gIyBjaG9wICIweCIgYW5kIHRyYWlsaW5nICdMJworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChleHBlY3RlZCwgMCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAnJXgnICUgZXhwZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGV4cGVjdGVkKSAmIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICIwIiArIGV4cGVjdGVkCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdW5oZXhsaWZ5KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICJceDAwIiAqIChzZWxmLmJ5dGVzaXplIC0gbGVuKGV4cGVjdGVkKSkgKyBleHBlY3RlZAotCi0gICAgICAgICAgICAgICAgICAgICMgUGFjayB3b3JrPwotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSAiPiIgKyBjb2RlCi0gICAgICAgICAgICAgICAgICAgIGdvdCA9IHBhY2soZm9ybWF0LCB4KQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBVbnBhY2sgd29yaz8KLSAgICAgICAgICAgICAgICAgICAgcmV0cmlldmVkID0gdW5wYWNrKGZvcm1hdCwgZ290KVswXQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHJldHJpZXZlZCkKLQotICAgICAgICAgICAgICAgICAgICAjIEFkZGluZyBhbnkgYnl0ZSBzaG91bGQgY2F1c2UgYSAidG9vIGJpZyIgZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChzdHJ1Y3QuZXJyb3IsIFR5cGVFcnJvciksIHVucGFjaywgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHgwMScgKyBnb3QpCi0gICAgICAgICAgICAgICAgICAgICMgVHJ5IGxpdHRsZS1lbmRpYW4uCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9ICI8IiArIGNvZGUKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBzdHJpbmdfcmV2ZXJzZShleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoIlx4MDAiICogKHNlbGYuYnl0ZXNpemUgLSBsZW4oZXhwZWN0ZWQpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5kaXJlY3Rpb24gPT0gJzwnIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpcmVjdGlvbiBpbiAoJycsICdAJywgJz0nKSBhbmQgbm90IElTQklHRU5ESUFOKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gc3RyaW5nX3JldmVyc2UoZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGV4cGVjdGVkKSwgc2VsZi5ieXRlc2l6ZSkKIAogICAgICAgICAgICAgICAgICAgICAjIFBhY2sgd29yaz8KICAgICAgICAgICAgICAgICAgICAgZ290ID0gcGFjayhmb3JtYXQsIHgpCkBAIC0zMTIsNjQgKzI0MSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAjIEFkZGluZyBhbnkgYnl0ZSBzaG91bGQgY2F1c2UgYSAidG9vIGJpZyIgZXJyb3IuCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChzdHJ1Y3QuZXJyb3IsIFR5cGVFcnJvciksIHVucGFjaywgZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHgwMScgKyBnb3QpCi0KICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAjIHggaXMgb3V0IG9mIHJhbmdlIC0tIHZlcmlmeSBwYWNrIHJlYWxpemVzIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBQWV9TVFJVQ1RfUkFOR0VfQ0hFQ0tJTkcgYW5kIGNvZGUgaW4gc2VsZi5CVUdHWV9SQU5HRV9DSEVDSzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlNraXBwaW5nIGJ1Z2d5IHJhbmdlIGNoZWNrIGZvciBjb2RlIiwgY29kZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZF9lcnIocGFjaywgIj4iICsgY29kZSwgeCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWRfZXJyKHBhY2ssICI8IiArIGNvZGUsIHgpCi0KLSAgICAgICAgICAgICAgICAjIE11Y2ggdGhlIHNhbWUgZm9yIHVuc2lnbmVkLgotICAgICAgICAgICAgICAgIGNvZGUgPSBzZWxmLnVuc2lnbmVkX2NvZGUKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnVuc2lnbmVkX21pbiA8PSB4IDw9IHNlbGYudW5zaWduZWRfbWF4OgotICAgICAgICAgICAgICAgICAgICAjIFRyeSBiaWctZW5kaWFuLgotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSAiPiIgKyBjb2RlCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbG9uZyh4KQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGhleChleHBlY3RlZClbMjotMV0gIyBjaG9wICIweCIgYW5kIHRyYWlsaW5nICdMJwotICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZXhwZWN0ZWQpICYgMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gIjAiICsgZXhwZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB1bmhleGxpZnkoZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gIlx4MDAiICogKHNlbGYuYnl0ZXNpemUgLSBsZW4oZXhwZWN0ZWQpKSArIGV4cGVjdGVkCi0KLSAgICAgICAgICAgICAgICAgICAgIyBQYWNrIHdvcms/Ci0gICAgICAgICAgICAgICAgICAgIGdvdCA9IHBhY2soZm9ybWF0LCB4KQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBVbnBhY2sgd29yaz8KLSAgICAgICAgICAgICAgICAgICAgcmV0cmlldmVkID0gdW5wYWNrKGZvcm1hdCwgZ290KVswXQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHJldHJpZXZlZCkKLQotICAgICAgICAgICAgICAgICAgICAjIEFkZGluZyBhbnkgYnl0ZSBzaG91bGQgY2F1c2UgYSAidG9vIGJpZyIgZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChzdHJ1Y3QuZXJyb3IsIFR5cGVFcnJvciksIHVucGFjaywgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHgwMScgKyBnb3QpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBUcnkgbGl0dGxlLWVuZGlhbi4KLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gIjwiICsgY29kZQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHN0cmluZ19yZXZlcnNlKGV4cGVjdGVkKQotCi0gICAgICAgICAgICAgICAgICAgICMgUGFjayB3b3JrPwotICAgICAgICAgICAgICAgICAgICBnb3QgPSBwYWNrKGZvcm1hdCwgeCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQotCi0gICAgICAgICAgICAgICAgICAgICMgVW5wYWNrIHdvcms/Ci0gICAgICAgICAgICAgICAgICAgIHJldHJpZXZlZCA9IHVucGFjayhmb3JtYXQsIGdvdClbMF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCByZXRyaWV2ZWQpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBBZGRpbmcgYW55IGJ5dGUgc2hvdWxkIGNhdXNlIGEgInRvbyBiaWciIGVycm9yLgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBUeXBlRXJyb3IpLCB1bnBhY2ssIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4MDEnICsgZ290KQotCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyB4IGlzIG91dCBvZiByYW5nZSAtLSB2ZXJpZnkgcGFjayByZWFsaXplcyB0aGF0LgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgUFlfU1RSVUNUX1JBTkdFX0NIRUNLSU5HIGFuZCBjb2RlIGluIHNlbGYuQlVHR1lfUkFOR0VfQ0hFQ0s6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJTa2lwcGluZyBidWdneSByYW5nZSBjaGVjayBmb3IgY29kZSIsIGNvZGUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWRfZXJyKHBhY2ssICI+IiArIGNvZGUsIHgpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkX2VycihwYWNrLCAiPCIgKyBjb2RlLCB4KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT3ZlcmZsb3dFcnJvciwgVmFsdWVFcnJvciwgc3RydWN0LmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFjaywgZm9ybWF0LCB4KQogCiAgICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAgICAgICAgIGZyb20gcmFuZG9tIGltcG9ydCByYW5kcmFuZ2UKQEAgLTM4NiwzNCArMjYxLDEwNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gKHZhbCA8PCA4KSB8IHJhbmRyYW5nZSgyNTYpCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsKQogCi0gICAgICAgICAgICAgICAgIyBUcnkgYWxsIHRob3NlLCBhbmQgdGhlaXIgbmVnYXRpb25zLCBhbmQgKy0xIGZyb20gdGhlbS4gIE5vdGUKLSAgICAgICAgICAgICAgICAjIHRoYXQgdGhpcyB0ZXN0cyBhbGwgcG93ZXItb2YtMiBib3VuZGFyaWVzIGluIHJhbmdlLCBhbmQgYSBmZXcgb3V0Ci0gICAgICAgICAgICAgICAgIyBvZiByYW5nZSwgcGx1cyArLSgyKipuICstIDEpLgorICAgICAgICAgICAgICAgICMgVmFsdWVzIGFic29yYmVkIGZyb20gb3RoZXIgdGVzdHMKKyAgICAgICAgICAgICAgICB2YWx1ZXMuZXh0ZW5kKFszMDAsIDcwMDAwMCwgc3lzLm1heGludCo0XSkKKworICAgICAgICAgICAgICAgICMgVHJ5IGFsbCB0aG9zZSwgYW5kIHRoZWlyIG5lZ2F0aW9ucywgYW5kICstMSBmcm9tCisgICAgICAgICAgICAgICAgIyB0aGVtLiAgTm90ZSB0aGF0IHRoaXMgdGVzdHMgYWxsIHBvd2VyLW9mLTIKKyAgICAgICAgICAgICAgICAjIGJvdW5kYXJpZXMgaW4gcmFuZ2UsIGFuZCBhIGZldyBvdXQgb2YgcmFuZ2UsIHBsdXMKKyAgICAgICAgICAgICAgICAjICstKDIqKm4gKy0gMSkuCiAgICAgICAgICAgICAgICAgZm9yIGJhc2UgaW4gdmFsdWVzOgogICAgICAgICAgICAgICAgICAgICBmb3IgdmFsIGluIC1iYXNlLCBiYXNlOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGluY3IgaW4gLTEsIDAsIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHZhbCArIGluY3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBpbnQoeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdF9vbmUoeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3Rfb25lKGludCh4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3Rfb25lKGxvbmcoeCkpCiAKICAgICAgICAgICAgICAgICAjIFNvbWUgZXJyb3IgY2FzZXMuCi0gICAgICAgICAgICAgICAgZm9yIGRpcmVjdGlvbiBpbiAiPD4iOgotICAgICAgICAgICAgICAgICAgICBmb3IgY29kZSBpbiBzZWxmLmZvcm1hdHBhaXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgYmFkb2JqZWN0IGluICJhIHN0cmluZyIsIDMrNDJqLCByYW5kcmFuZ2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKHN0cnVjdC5lcnJvciwgVHlwZUVycm9yKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2ssIGRpcmVjdGlvbiArIGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZG9iamVjdCkKKyAgICAgICAgICAgICAgICBjbGFzcyBOb3RBbkludE5TKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCiAKLSAgICAgICAgZm9yIGFyZ3MgaW4gWygiYkIiLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICgiaEgiLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICgiaUkiLCA0KSwKLSAgICAgICAgICAgICAgICAgICAgICgibEwiLCA0KSwKLSAgICAgICAgICAgICAgICAgICAgICgicVEiLCA4KV06Ci0gICAgICAgICAgICB0ID0gSW50VGVzdGVyKCphcmdzKQotICAgICAgICAgICAgdC5ydW4oKQorICAgICAgICAgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTcyOUwKKworICAgICAgICAgICAgICAgIGNsYXNzIE5vdEFuSW50T1M6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg1CisKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xNjNMCisKKyAgICAgICAgICAgICAgICAjIE9iamVjdHMgd2l0aCBhbiAnX19pbmRleF9fJyBtZXRob2Qgc2hvdWxkIGJlIGFsbG93ZWQKKyAgICAgICAgICAgICAgICAjIHRvIHBhY2sgYXMgaW50ZWdlcnMuICBUaGF0IGlzIGFzc3VtaW5nIHRoZSBpbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgICMgJ19faW5kZXhfXycgbWV0aG9kIHJldHVybnMgYW5kICdpbnQnIG9yICdsb25nJy4KKyAgICAgICAgICAgICAgICBjbGFzcyBJbmRleGFibGUob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKKworICAgICAgICAgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlCisKKyAgICAgICAgICAgICAgICAjIElmIHRoZSAnX19pbmRleF9fJyBtZXRob2QgcmFpc2VzIGEgdHlwZSBlcnJvciwgdGhlbgorICAgICAgICAgICAgICAgICMgJ19faW50X18nIHNob3VsZCBiZSB1c2VkIHdpdGggYSBkZXByZWNhdGlvbiB3YXJuaW5nLgorICAgICAgICAgICAgICAgIGNsYXNzIEJhZEluZGV4KG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKworICAgICAgICAgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaywgc2VsZi5mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgc3RyaW5nIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrLCBzZWxmLmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kcmFuZ2UpCisgICAgICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IG5vbi1pbnRlZ2VyIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjayhzZWxmLmZvcm1hdCwgMys0MmopCisKKyAgICAgICAgICAgICAgICAjIGFuIGF0dGVtcHQgdG8gY29udmVydCBhIG5vbi1pbnRlZ2VyICh3aXRoIGFuCisgICAgICAgICAgICAgICAgIyBpbXBsaWNpdCBjb252ZXJzaW9uIHZpYSBfX2ludF9fKSBzaG91bGQgc3VjY2VlZCwKKyAgICAgICAgICAgICAgICAjIHdpdGggYSBEZXByZWNhdGlvbldhcm5pbmcKKyAgICAgICAgICAgICAgICBmb3Igbm9uaW50IGluIE5vdEFuSW50TlMoKSwgTm90QW5JbnRPUygpLCBCYWRJbmRleCgpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiLippbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3Qgbm9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWludGVnZXIiLCBEZXByZWNhdGlvbldhcm5pbmcpKSBhcyB3OgorICAgICAgICAgICAgICAgICAgICAgICAgZ290ID0gc3RydWN0LnBhY2soc2VsZi5mb3JtYXQsIG5vbmludCkKKyAgICAgICAgICAgICAgICAgICAgbGluZW5vID0gaW5zcGVjdC5jdXJyZW50ZnJhbWUoKS5mX2xpbmVubyAtIDEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmZpbGVuYW1lLCB0ZXN0bW9kX2ZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcubGluZW5vLCBsaW5lbm8pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHN0cnVjdC5wYWNrKHNlbGYuZm9ybWF0LCBpbnQobm9uaW50KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisgICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgbGVnaXRpbWF0ZSB2YWx1ZXMgZnJvbSAnX19pbmRleF9fJy4KKyAgICAgICAgICAgICAgICBmb3Igb2JqIGluIChJbmRleGFibGUoMCksIEluZGV4YWJsZSgxMCksIEluZGV4YWJsZSgxNyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXhhYmxlKDQyKSwgSW5kZXhhYmxlKDEwMCksIEluZGV4YWJsZSgxMjcpKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soZm9ybWF0LCBvYmopCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW50ZWdlciBjb2RlIHBhY2sgZmFpbGVkIG9uIG9iamVjdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggJ19faW5kZXhfXycgbWV0aG9kIikKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGJvZ3VzIHZhbHVlcyBmcm9tICdfX2luZGV4X18nLgorICAgICAgICAgICAgICAgIGZvciBvYmogaW4gKEluZGV4YWJsZSgnYScpLCBJbmRleGFibGUodSdiJyksIEluZGV4YWJsZShOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleGFibGUoeydhJzogMX0pLCBJbmRleGFibGUoWzEsIDIsIDNdKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrLCBzZWxmLmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqKQorCisgICAgICAgIGJ5dGVvcmRlcnMgPSAnJywgJ0AnLCAnPScsICc8JywgJz4nLCAnIScKKyAgICAgICAgZm9yIGNvZGUgaW4gaW50ZWdlcl9jb2RlczoKKyAgICAgICAgICAgIGZvciBieXRlb3JkZXIgaW4gYnl0ZW9yZGVyczoKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZW9yZGVyIGluICgnJywgJ0AnKSBhbmQgY29kZSBpbiAoJ3EnLCAnUScpIGFuZAorICAgICAgICAgICAgICAgICAgICBub3QgSEFWRV9MT05HX0xPTkcpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZvcm1hdCA9IGJ5dGVvcmRlcitjb2RlCisgICAgICAgICAgICAgICAgdCA9IEludFRlc3Rlcihmb3JtYXQpCisgICAgICAgICAgICAgICAgdC5ydW4oKQogCiAgICAgZGVmIHRlc3RfcF9jb2RlKHNlbGYpOgogICAgICAgICAjIFRlc3QgcCAoIlBhc2NhbCBzdHJpbmciKSBjb2RlLgpAQCAtNDY2LDM2ICs0MTEsMTMgQEAKICAgICAgICAgYmlnID0gbWF0aC5sZGV4cChiaWcsIDEyNyAtIDI0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzdHJ1Y3QucGFjaywgIj5mIiwgYmlnKQogCi0gICAgaWYgUFlfU1RSVUNUX1JBTkdFX0NIRUNLSU5HOgotICAgICAgICBkZWYgdGVzdF8xMjI5MzgwKHNlbGYpOgotICAgICAgICAgICAgIyBTRiBidWcgMTIyOTM4MC4gTm8gc3RydWN0LnBhY2sgZXhjZXB0aW9uIGZvciBzb21lIG91dCBvZgotICAgICAgICAgICAgIyByYW5nZSBpbnRlZ2VycwotICAgICAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICAgICAgZm9yIGVuZGlhbiBpbiAoJycsICc+JywgJzwnKToKLSAgICAgICAgICAgICAgICBmb3IgY2xzIGluIChpbnQsIGxvbmcpOgotICAgICAgICAgICAgICAgICAgICBmb3IgZm10IGluICgnQicsICdIJywgJ0knLCAnTCcpOgotICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZF9lcnIoc3RydWN0LnBhY2ssIGVuZGlhbiArIGZtdCwgY2xzKC0xKSkKLQotICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkX2VycihzdHJ1Y3QucGFjaywgZW5kaWFuICsgJ0InLCBjbHMoMzAwKSkKLSAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZF9lcnIoc3RydWN0LnBhY2ssIGVuZGlhbiArICdIJywgY2xzKDcwMDAwKSkKLQotICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWRfZXJyKHN0cnVjdC5wYWNrLCBlbmRpYW4gKyAnSScsIHN5cy5tYXhpbnQgKiA0TCkKLSAgICAgICAgICAgICAgICBkZXByZWNhdGVkX2VycihzdHJ1Y3QucGFjaywgZW5kaWFuICsgJ0wnLCBzeXMubWF4aW50ICogNEwpCi0KLSAgICBkZWYgWFhYdGVzdF8xNTMwNTU5KHNlbGYpOgotICAgICAgICAjIFhYWCBUaGlzIGlzIGJyb2tlbjogc2VlIHRoZSBidWcgcmVwb3J0CisgICAgZGVmIHRlc3RfMTUzMDU1OShzZWxmKToKICAgICAgICAgIyBTRiBidWcgMTUzMDU1OS4gc3RydWN0LnBhY2sgcmFpc2VzIFR5cGVFcnJvciB3aGVyZSBpdCB1c2VkIHRvIGNvbnZlcnQuCiAgICAgICAgIGZvciBlbmRpYW4gaW4gKCcnLCAnPicsICc8Jyk6Ci0gICAgICAgICAgICBmb3IgZm10IGluICgnQicsICdIJywgJ0knLCAnTCcsICdiJywgJ2gnLCAnaScsICdsJyk6CisgICAgICAgICAgICBmb3IgZm10IGluIGludGVnZXJfY29kZXM6CiAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19mbG9hdF9jb2VyY2UoZW5kaWFuICsgZm10LCAxLjApCiAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19mbG9hdF9jb2VyY2UoZW5kaWFuICsgZm10LCAxLjUpCiAKLSAgICBkZWYgdGVzdF9pc3N1ZTQyMjgoc2VsZik6Ci0gICAgICAgICMgUGFja2luZyBhIGxvbmcgbWF5IHlpZWxkIGVpdGhlciAzMiBvciA2NCBiaXRzCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6Ci0gICAgICAgICAgICB4ID0gc3RydWN0LnBhY2soJ0wnLCAtMSlbOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgJ1x4ZmYnKjQpCi0KICAgICBkZWYgdGVzdF91bnBhY2tfZnJvbShzZWxmLCBjbHM9c3RyKToKICAgICAgICAgZGF0YSA9IGNscygnYWJjZDAxMjM0JykKICAgICAgICAgZm10ID0gJzRzJwpAQCAtNTI4LDEyICs0NTAsMTUgQEAKIAogICAgICAgICAjIEdvIGJleW9uZCBib3VuZGFyaWVzLgogICAgICAgICBzbWFsbF9idWYgPSBhcnJheS5hcnJheSgnYycsICcgJyoxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzLnBhY2tfaW50bywgc21hbGxfYnVmLCAwLCB0ZXN0X3N0cmluZykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzLnBhY2tfaW50bywgc21hbGxfYnVmLCAyLCB0ZXN0X3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIHN0cnVjdC5lcnJvciksIHMucGFja19pbnRvLCBzbWFsbF9idWYsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgc3RydWN0LmVycm9yKSwgcy5wYWNrX2ludG8sIHNtYWxsX2J1ZiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdHJpbmcpCiAKICAgICAgICAgIyBUZXN0IGJvZ3VzIG9mZnNldCAoaXNzdWUgMzY5NCkKICAgICAgICAgc2IgPSBzbWFsbF9idWYKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdHJ1Y3QucGFja19pbnRvLCBiJzEnLCBzYiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSwgc3RydWN0LnBhY2tfaW50bywgYicnLCBzYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3BhY2tfaW50b19mbihzZWxmKToKICAgICAgICAgdGVzdF9zdHJpbmcgPSAnUmV5a2phdmlrIHJvY2tzLCBlb3chJwpAQCAtNTUzLDExICs0NzgsMTMgQEAKIAogICAgICAgICAjIEdvIGJleW9uZCBib3VuZGFyaWVzLgogICAgICAgICBzbWFsbF9idWYgPSBhcnJheS5hcnJheSgnYycsICcgJyoxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBwYWNrX2ludG8sIHNtYWxsX2J1ZiwgMCwgdGVzdF9zdHJpbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgcGFja19pbnRvLCBzbWFsbF9idWYsIDIsIHRlc3Rfc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgc3RydWN0LmVycm9yKSwgcGFja19pbnRvLCBzbWFsbF9idWYsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgc3RydWN0LmVycm9yKSwgcGFja19pbnRvLCBzbWFsbF9idWYsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RyaW5nKQogCiAgICAgZGVmIHRlc3RfdW5wYWNrX3dpdGhfYnVmZmVyKHNlbGYpOgotICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCgiYnVmZmVyLi4gbm90IHN1cHBvcnRlZCBpbiAzLngiLAorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIGluIDMueCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICAjIFNGIGJ1ZyAxNTYzNzU5OiBzdHJ1Y3QudW5wYWNrIGRvZXNuJ3Qgc3VwcG9ydCBidWZmZXIgcHJvdG9jb2wgb2JqZWN0cwogICAgICAgICAgICAgZGF0YTEgPSBhcnJheS5hcnJheSgnQicsICdceDEyXHgzNFx4NTZceDc4JykKQEAgLTU2OSw2ICs0OTYsOSBAQAogICAgICAgICAgICAgc2VsZi50ZXN0X3VucGFja19mcm9tKGNscz1idWZmZXIpCiAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgorICAgICAgICBjbGFzcyBFeHBsb2RpbmdCb29sKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgogICAgICAgICBmb3IgcHJlZml4IGluIHR1cGxlKCI8PiE9IikrKCcnLCk6CiAgICAgICAgICAgICBmYWxzZSA9ICgpLCBbXSwgW10sICcnLCAwCiAgICAgICAgICAgICB0cnVlID0gWzFdLCAndGVzdCcsIDUsIC0xLCAweGZmZmZmZmZmTCsxLCAweGZmZmZmZmZmLy8yCkBAIC01OTcsMTggKzUyNywyMSBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHJlZml4LCBtc2c9J2VuY29kZWQgYm9vbCBpcyBub3Qgb25lIGJ5dGU6ICVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXBhY2tlZCkKIAotICAgICAgICAgICAgZm9yIGMgaW4gJ1x4MDFceDdmXHhmZlx4MGZceGYwJzoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RydWN0LnVucGFjaygnPj8nLCBjKVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHN0cnVjdC5wYWNrLCBwcmVmaXggKyAnPycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBsb2RpbmdCb29sKCkpCiAKLSAgICBpZiBJUzMyQklUOgotICAgICAgICBkZWYgdGVzdF9jcmFzaGVyKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTWVtb3J5RXJyb3IsIHN0cnVjdC5wYWNrLCAiMzU3OTEzOTQxYyIsICJhIikKKyAgICAgICAgZm9yIGMgaW4gW2InXHgwMScsIGInXHg3ZicsIGInXHhmZicsIGInXHgwZicsIGInXHhmMCddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnVjdC51bnBhY2soJz4/JywgYylbMF0pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhJUzMyQklULCAiU3BlY2lmaWMgdG8gMzJiaXQgbWFjaGluZXMiKQorICAgIGRlZiB0ZXN0X2NyYXNoZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCBzdHJ1Y3QucGFjaywgIjM1NzkxMzk0MWMiLCAiYSIpCiAKICAgICBkZWYgdGVzdF9jb3VudF9vdmVyZmxvdyhzZWxmKToKLSAgICAgICAgaHVnZWNvdW50ID0gJ3swfWInLmZvcm1hdChzeXMubWF4c2l6ZSsxKQorICAgICAgICBodWdlY291bnQgPSAne31iJy5mb3JtYXQoc3lzLm1heHNpemUrMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QuY2FsY3NpemUsIGh1Z2Vjb3VudCkKIAotICAgICAgICBodWdlY291bnQyID0gJ3swfWJ7MX1IJy5mb3JtYXQoc3lzLm1heHNpemUvLzIsIHN5cy5tYXhzaXplLy8yKQorICAgICAgICBodWdlY291bnQyID0gJ3t9Ynt9SCcuZm9ybWF0KHN5cy5tYXhzaXplLy8yLCBzeXMubWF4c2l6ZS8vMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QuY2FsY3NpemUsIGh1Z2Vjb3VudDIpCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0bWVtYmVycy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0bWVtYmVycy5weQppbmRleCAxZjIwOTIzLi4wY2M1OGMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdG1lbWJlcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RtZW1iZXJzLnB5CkBAIC01LDcgKzUsNyBAQAogICAgIExPTkdfTUFYLCBMT05HX01JTiwgVUxPTkdfTUFYLCBcCiAgICAgTExPTkdfTUFYLCBMTE9OR19NSU4sIFVMTE9OR19NQVgKIAotaW1wb3J0IHdhcm5pbmdzLCBleGNlcHRpb25zLCB1bml0dGVzdCwgc3lzCitpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKIHRzPV90ZXN0X3N0cnVjdG1lbWJlcnNUeXBlKEZhbHNlLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LApAQCAtMTUsOTkgKzE1LDkwIEBACiAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICB0cy5UX0JPT0wgPSBUcnVlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfQk9PTCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0JPT0wsIFRydWUpCiAgICAgICAgIHRzLlRfQk9PTCA9IEZhbHNlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfQk9PTCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9CT09MLCBGYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCB0cywgJ1RfQk9PTCcsIDEpCiAKICAgICBkZWYgdGVzdF9ieXRlKHNlbGYpOgogICAgICAgICB0cy5UX0JZVEUgPSBDSEFSX01BWAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0JZVEUsIENIQVJfTUFYKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfQllURSwgQ0hBUl9NQVgpCiAgICAgICAgIHRzLlRfQllURSA9IENIQVJfTUlOCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfQllURSwgQ0hBUl9NSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9CWVRFLCBDSEFSX01JTikKICAgICAgICAgdHMuVF9VQllURSA9IFVDSEFSX01BWAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX1VCWVRFLCBVQ0hBUl9NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9VQllURSwgVUNIQVJfTUFYKQogCiAgICAgZGVmIHRlc3Rfc2hvcnQoc2VsZik6CiAgICAgICAgIHRzLlRfU0hPUlQgPSBTSFJUX01BWAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX1NIT1JULCBTSFJUX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX1NIT1JULCBTSFJUX01BWCkKICAgICAgICAgdHMuVF9TSE9SVCA9IFNIUlRfTUlOCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfU0hPUlQsIFNIUlRfTUlOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfU0hPUlQsIFNIUlRfTUlOKQogICAgICAgICB0cy5UX1VTSE9SVCA9IFVTSFJUX01BWAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX1VTSE9SVCwgVVNIUlRfTUFYKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVVNIT1JULCBVU0hSVF9NQVgpCiAKICAgICBkZWYgdGVzdF9pbnQoc2VsZik6CiAgICAgICAgIHRzLlRfSU5UID0gSU5UX01BWAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0lOVCwgSU5UX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0lOVCwgSU5UX01BWCkKICAgICAgICAgdHMuVF9JTlQgPSBJTlRfTUlOCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfSU5ULCBJTlRfTUlOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfSU5ULCBJTlRfTUlOKQogICAgICAgICB0cy5UX1VJTlQgPSBVSU5UX01BWAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX1VJTlQsIFVJTlRfTUFYKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVUlOVCwgVUlOVF9NQVgpCiAKICAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgogICAgICAgICB0cy5UX0xPTkcgPSBMT05HX01BWAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0xPTkcsIExPTkdfTUFYKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfTE9ORywgTE9OR19NQVgpCiAgICAgICAgIHRzLlRfTE9ORyA9IExPTkdfTUlOCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfTE9ORywgTE9OR19NSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9MT05HLCBMT05HX01JTikKICAgICAgICAgdHMuVF9VTE9ORyA9IFVMT05HX01BWAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX1VMT05HLCBVTE9OR19NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9VTE9ORywgVUxPTkdfTUFYKQogCi0gICAgaWYgaGFzYXR0cih0cywgIlRfTE9OR0xPTkciKToKLSAgICAgICAgZGVmIHRlc3RfbG9uZ2xvbmcoc2VsZik6Ci0gICAgICAgICAgICB0cy5UX0xPTkdMT05HID0gTExPTkdfTUFYCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0xPTkdMT05HLCBMTE9OR19NQVgpCi0gICAgICAgICAgICB0cy5UX0xPTkdMT05HID0gTExPTkdfTUlOCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0xPTkdMT05HLCBMTE9OR19NSU4pCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cih0cywgIlRfTE9OR0xPTkciKSwgImxvbmcgbG9uZyBub3QgcHJlc2VudCIpCisgICAgZGVmIHRlc3RfbG9uZ2xvbmcoc2VsZik6CisgICAgICAgIHRzLlRfTE9OR0xPTkcgPSBMTE9OR19NQVgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0xPTkdMT05HLCBMTE9OR19NQVgpCisgICAgICAgIHRzLlRfTE9OR0xPTkcgPSBMTE9OR19NSU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0xPTkdMT05HLCBMTE9OR19NSU4pCiAKLSAgICAgICAgICAgIHRzLlRfVUxPTkdMT05HID0gVUxMT05HX01BWAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9VTE9OR0xPTkcsIFVMTE9OR19NQVgpCisgICAgICAgIHRzLlRfVUxPTkdMT05HID0gVUxMT05HX01BWAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVUxPTkdMT05HLCBVTExPTkdfTUFYKQogCi0gICAgICAgICAgICAjIyBtYWtlIHN1cmUgdGhlc2Ugd2lsbCBhY2NlcHQgYSBwbGFpbiBpbnQgYXMgd2VsbCBhcyBhIGxvbmcKLSAgICAgICAgICAgIHRzLlRfTE9OR0xPTkcgPSAzCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0xPTkdMT05HLCAzKQotICAgICAgICAgICAgdHMuVF9VTE9OR0xPTkcgPSA0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX1VMT05HTE9ORywgNCkKKyAgICAgICAgIyMgbWFrZSBzdXJlIHRoZXNlIHdpbGwgYWNjZXB0IGEgcGxhaW4gaW50IGFzIHdlbGwgYXMgYSBsb25nCisgICAgICAgIHRzLlRfTE9OR0xPTkcgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9MT05HTE9ORywgMykKKyAgICAgICAgdHMuVF9VTE9OR0xPTkcgPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9VTE9OR0xPTkcsIDQpCiAKICAgICBkZWYgdGVzdF9pbnBsYWNlX3N0cmluZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9TVFJJTkdfSU5QTEFDRSwgImhpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX1NUUklOR19JTlBMQUNFLCAiaGkiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHRzLCAiVF9TVFJJTkdfSU5QTEFDRSIsICJzIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZWxhdHRyLCB0cywgIlRfU1RSSU5HX0lOUExBQ0UiKQogCiAKIGNsYXNzIFRlc3RXYXJuaW5ncyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGhhc193YXJuZWQoc2VsZiwgdyk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5jYXRlZ29yeSwgUnVudGltZVdhcm5pbmcpCiAKICAgICBkZWYgdGVzdF9ieXRlX21heChzZWxmKToKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CiAgICAgICAgICAgICB0cy5UX0JZVEUgPSBDSEFSX01BWCsxCi0gICAgICAgICAgICBzZWxmLmhhc193YXJuZWQodykKIAogICAgIGRlZiB0ZXN0X2J5dGVfbWluKHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgIHRzLlRfQllURSA9IENIQVJfTUlOLTEKLSAgICAgICAgICAgIHNlbGYuaGFzX3dhcm5lZCh3KQogCiAgICAgZGVmIHRlc3RfdWJ5dGVfbWF4KHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgIHRzLlRfVUJZVEUgPSBVQ0hBUl9NQVgrMQotICAgICAgICAgICAgc2VsZi5oYXNfd2FybmVkKHcpCiAKICAgICBkZWYgdGVzdF9zaG9ydF9tYXgoc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSdW50aW1lV2FybmluZykpOgogICAgICAgICAgICAgdHMuVF9TSE9SVCA9IFNIUlRfTUFYKzEKLSAgICAgICAgICAgIHNlbGYuaGFzX3dhcm5lZCh3KQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfbWluKHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgIHRzLlRfU0hPUlQgPSBTSFJUX01JTi0xCi0gICAgICAgICAgICBzZWxmLmhhc193YXJuZWQodykKIAogICAgIGRlZiB0ZXN0X3VzaG9ydF9tYXgoc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSdW50aW1lV2FybmluZykpOgogICAgICAgICAgICAgdHMuVF9VU0hPUlQgPSBVU0hSVF9NQVgrMQotICAgICAgICAgICAgc2VsZi5oYXNfd2FybmVkKHcpCi0KIAogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5CmluZGV4IDgzYzdjY2YuLmRhYTEyYWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5CkBAIC0yOCw3ICsyOCw3IEBACiAKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgogICAgICAgICB0ID0gdGltZS5nbXRpbWUoKQotICAgICAgICBzZWxmLmFzc2VydF8ocmVwcih0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIodCkpCiAgICAgICAgIHQgPSB0aW1lLmdtdGltZSgwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksCiAgICAgICAgICAgICAidGltZS5zdHJ1Y3RfdGltZSh0bV95ZWFyPTE5NzAsIHRtX21vbj0xLCB0bV9tZGF5PTEsIHRtX2hvdXI9MCwgIgpAQCAtNTAsOCArNTAsOCBAQAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgogICAgICAgICB0MSA9IHRpbWUuZ210aW1lKCkKICAgICAgICAgZm9yIGl0ZW0gaW4gdDE6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXRlbSBpbiB0MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKC00MiBub3QgaW4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGl0ZW0sIHQxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC00MiwgdDEpCiAKICAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgogICAgICAgICB0MSA9IHRpbWUuZ210aW1lKCkKQEAgLTYxLDExICs2MSwxMSBAQAogICAgICAgICB0MSA9IHRpbWUuZ210aW1lKCkKICAgICAgICAgdDIgPSB0eXBlKHQxKSh0MSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKHQxIDwgdDIpKQotICAgICAgICBzZWxmLmFzc2VydF8odDEgPD0gdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKHQxID4gdDIpKQotICAgICAgICBzZWxmLmFzc2VydF8odDEgPj0gdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKHQxICE9IHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAodDEgPCB0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAodDEgPiB0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAodDEgIT0gdDIpKQogCiAgICAgZGVmIHRlc3RfZmllbGRzKHNlbGYpOgogICAgICAgICB0ID0gdGltZS5nbXRpbWUoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CmluZGV4IDdkZGUwMTMuLjM3ZGMyNDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKQEAgLTgsNiArOCw3IEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXNjb25maWcKIAogbXN3aW5kb3dzID0gKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiKQogCkBAIC0yMSwzNiArMjIsMzkgQEAKIGVsc2U6CiAgICAgU0VUQklOQVJZID0gJycKIAotIyBJbiBhIGRlYnVnIGJ1aWxkLCBzdHVmZiBsaWtlICJbNjU4MCByZWZzXSIgaXMgcHJpbnRlZCB0byBzdGRlcnIgYXQKLSMgc2h1dGRvd24gdGltZS4gIFRoYXQgZnJ1c3RyYXRlcyB0ZXN0cyB0cnlpbmcgdG8gY2hlY2sgc3RkZXJyIHByb2R1Y2VkCi0jIGZyb20gYSBzcGF3bmVkIFB5dGhvbiBwcm9jZXNzLgotZGVmIHJlbW92ZV9zdGRlcnJfZGVidWdfZGVjb3JhdGlvbnMoc3RkZXJyKToKLSAgICByZXR1cm4gcmUuc3ViKHIiXFtcZCsgcmVmc1xdXHI/XG4/JCIsICIiLCBzdGRlcnIpCiAKLWNsYXNzIFByb2Nlc3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Cit0cnk6CisgICAgbWtzdGVtcCA9IHRlbXBmaWxlLm1rc3RlbXAKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAjIHRlbXBmaWxlLm1rc3RlbXAgaXMgbm90IGF2YWlsYWJsZQorICAgIGRlZiBta3N0ZW1wKCk6CisgICAgICAgICIiIlJlcGxhY2VtZW50IGZvciBta3N0ZW1wLCBjYWxsaW5nIG1rdGVtcC4iIiIKKyAgICAgICAgZm5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgICAgICByZXR1cm4gb3Mub3BlbihmbmFtZSwgb3MuT19SRFdSfG9zLk9fQ1JFQVQpLCBmbmFtZQorCisKK2NsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAjIFRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHdlIGhhdmUgc28gdGhpcyB0ZXN0CiAgICAgICAgICMgZG9lc24ndCBjcmFzaCBvbiBzb21lIGJ1aWxkYm90cyAoQWxwaGFzIGluIHBhcnRpY3VsYXIpLgotICAgICAgICBpZiBoYXNhdHRyKHRlc3Rfc3VwcG9ydCwgInJlYXBfY2hpbGRyZW4iKToKLSAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAjIFRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHdlIGhhdmUgc28gdGhpcyB0ZXN0Ci0gICAgICAgICMgZG9lc24ndCBjcmFzaCBvbiBzb21lIGJ1aWxkYm90cyAoQWxwaGFzIGluIHBhcnRpY3VsYXIpLgotICAgICAgICBpZiBoYXNhdHRyKHRlc3Rfc3VwcG9ydCwgInJlYXBfY2hpbGRyZW4iKToKLSAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKyAgICAgICAgZm9yIGluc3QgaW4gc3VicHJvY2Vzcy5fYWN0aXZlOgorICAgICAgICAgICAgaW5zdC53YWl0KCkKKyAgICAgICAgc3VicHJvY2Vzcy5fY2xlYW51cCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3VicHJvY2Vzcy5fYWN0aXZlLCAic3VicHJvY2Vzcy5fYWN0aXZlIG5vdCBlbXB0eSIpCiAKLSAgICBkZWYgbWtzdGVtcChzZWxmKToKLSAgICAgICAgIiIid3JhcHBlciBmb3IgbWtzdGVtcCwgY2FsbGluZyBta3RlbXAgaWYgbWtzdGVtcCBpcyBub3QgYXZhaWxhYmxlIiIiCi0gICAgICAgIGlmIGhhc2F0dHIodGVtcGZpbGUsICJta3N0ZW1wIik6Ci0gICAgICAgICAgICByZXR1cm4gdGVtcGZpbGUubWtzdGVtcCgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmbmFtZSA9IHRlbXBmaWxlLm1rdGVtcCgpCi0gICAgICAgICAgICByZXR1cm4gb3Mub3BlbihmbmFtZSwgb3MuT19SRFdSfG9zLk9fQ1JFQVQpLCBmbmFtZQorICAgIGRlZiBhc3NlcnRTdGRlcnJFcXVhbChzZWxmLCBzdGRlcnIsIGV4cGVjdGVkLCBtc2c9Tm9uZSk6CisgICAgICAgICMgSW4gYSBkZWJ1ZyBidWlsZCwgc3R1ZmYgbGlrZSAiWzY1ODAgcmVmc10iIGlzIHByaW50ZWQgdG8gc3RkZXJyIGF0CisgICAgICAgICMgc2h1dGRvd24gdGltZS4gIFRoYXQgZnJ1c3RyYXRlcyB0ZXN0cyB0cnlpbmcgdG8gY2hlY2sgc3RkZXJyIHByb2R1Y2VkCisgICAgICAgICMgZnJvbSBhIHNwYXduZWQgUHl0aG9uIHByb2Nlc3MuCisgICAgICAgIGFjdHVhbCA9IHJlLnN1YihyIlxbXGQrIHJlZnNcXVxyP1xuPyQiLCAiIiwgc3RkZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykKIAotICAgICMKLSAgICAjIEdlbmVyaWMgdGVzdHMKLSAgICAjCisKK2NsYXNzIFByb2Nlc3NUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorCiAgICAgZGVmIHRlc3RfY2FsbF9zZXEoc2VsZik6CiAgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc2VxdWVuY2UgYXJndW1lbnQKICAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLApAQCAtNjUsMjggKzY5LDU2IEBACiAKICAgICBkZWYgdGVzdF9jaGVja19jYWxsX25vbnplcm8oc2VsZik6CiAgICAgICAgICMgY2hlY2tfY2FsbCgpIGZ1bmN0aW9uIHdpdGggbm9uLXplcm8gcmV0dXJuIGNvZGUKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKSBhcyBjOgogICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdKQotICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUucmV0dXJuY29kZSwgNDcpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIENhbGxlZFByb2Nlc3NFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24ucmV0dXJuY29kZSwgNDcpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXQoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgZnVuY3Rpb24gd2l0aCB6ZXJvIHJldHVybiBjb2RlCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInByaW50ICdCREZMJyJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCREZMJywgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X25vbnplcm8oc2VsZik6CisgICAgICAgICMgY2hlY2tfY2FsbCgpIGZ1bmN0aW9uIHdpdGggbm9uLXplcm8gcmV0dXJuIGNvZGUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg1KSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhjZXB0aW9uLnJldHVybmNvZGUsIDUpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkZXJyKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHN0ZGVyciByZWRpcmVjdGVkIHRvIHN0ZG91dAorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuc3RkZXJyLndyaXRlKCdCREZMJykiXSwKKyAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JERkwnLCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3Rkb3V0X2FyZyhzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiBzdGRlcnIgcmVkaXJlY3RlZCB0byBzdGRvdXQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjOgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInByaW50ICd3aWxsIG5vdCBiZSBydW4nIl0sCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIHdoZW4gc3Rkb3V0IGFyZyBzdXBwbGllZC4iKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzdGRvdXQnLCBjLmV4Y2VwdGlvbi5hcmdzWzBdKQogCiAgICAgZGVmIHRlc3RfY2FsbF9rd2FyZ3Moc2VsZik6CiAgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGgga2V5d29yZCBhcmdzCiAgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCiAgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJiYW5hbmEiCiAgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsIG9zOycgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLmV4aXQob3MuZ2V0ZW52KCJGUlVJVCIpPT0iYmFuYW5hIiknXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cywgb3M7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5leGl0KG9zLmdldGVudigiRlJVSVQiKT09ImJhbmFuYSIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCiAKICAgICBkZWYgdGVzdF9zdGRpbl9ub25lKHNlbGYpOgogICAgICAgICAjIC5zdGRpbiBpcyBOb25lIHdoZW4gbm90IHJlZGlyZWN0ZWQKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncHJpbnQgImJhbmFuYSInXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKICAgICAgICAgcC53YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZGluLCBOb25lKQogCkBAIC05Nyw2ICsxMjksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBvZiBzdGRvdXQgaW4gYSBkaWZmZXJlbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvY2VzcyAuLi4iJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkaW4uY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKICAgICAgICAgcC53YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dCwgTm9uZSkKIApAQCAtMTA0LDEyICsxMzgsMjYgQEAKICAgICAgICAgIyAuc3RkZXJyIGlzIE5vbmUgd2hlbiBub3QgcmVkaXJlY3RlZAogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludCAiYmFuYW5hIiddLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRpbi5jbG9zZSkKICAgICAgICAgcC53YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZGVyciwgTm9uZSkKIAotICAgIGRlZiB0ZXN0X2V4ZWN1dGFibGUoc2VsZik6Ci0gICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsic29tZXRoaW5neW91ZG9udGhhdmUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgIGRlZiB0ZXN0X2V4ZWN1dGFibGVfd2l0aF9jd2Qoc2VsZik6CisgICAgICAgIHB5dGhvbl9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsic29tZXRoaW5neW91ZG9udGhhdmUiLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlPXN5cy5leGVjdXRhYmxlLCBjd2Q9cHl0aG9uX2RpcikKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDQ3KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCksCisgICAgICAgICAgICAgICAgICAgICAibmVlZCBhbiBpbnN0YWxsZWQgUHl0aG9uLiBTZWUgIzc3NzQiKQorICAgIGRlZiB0ZXN0X2V4ZWN1dGFibGVfd2l0aG91dF9jd2Qoc2VsZik6CisgICAgICAgICMgRm9yIGEgbm9ybWFsIGluc3RhbGxhdGlvbiwgaXQgc2hvdWxkIHdvcmsgd2l0aG91dCAnY3dkJworICAgICAgICAjIGFyZ3VtZW50LiAgRm9yIHRlc3QgcnVucyBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LCBzZWUgIzc3NzQuCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsic29tZXRoaW5neW91ZG9udGhhdmUiLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlPXN5cy5leGVjdXRhYmxlKQogICAgICAgICBwLndhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgNDcpCkBAIC0xNTIsNiArMjAwLDcgQEAKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgib3JhbmdlIiknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLCAib3JhbmdlIikKIAogICAgIGRlZiB0ZXN0X3N0ZG91dF9maWxlZGVzKHNlbGYpOgpAQCAtMTgwLDggKzIyOSw4IEBACiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5zdGRlcnIud3JpdGUoInN0cmF3YmVycnkiKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhwLnN0ZGVyci5yZWFkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJhd2JlcnJ5IikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHAuc3RkZXJyLnJlYWQoKSwgInN0cmF3YmVycnkiKQogCiAgICAgZGVmIHRlc3Rfc3RkZXJyX2ZpbGVkZXMoc2VsZik6CiAgICAgICAgICMgc3RkZXJyIGlzIHNldCB0byBvcGVuIGZpbGUgZGVzY3JpcHRvcgpAQCAtMTkyLDggKzI0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPWQpCiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIG9zLmxzZWVrKGQsIDAsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhvcy5yZWFkKGQsIDEwMjQpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic3RyYXdiZXJyeSIpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwob3MucmVhZChkLCAxMDI0KSwgInN0cmF3YmVycnkiKQogCiAgICAgZGVmIHRlc3Rfc3RkZXJyX2ZpbGVvYmooc2VsZik6CiAgICAgICAgICMgc3RkZXJyIGlzIHNldCB0byBvcGVuIGZpbGUgb2JqZWN0CkBAIC0yMDMsNDMgKzI1MSwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj10ZikKICAgICAgICAgcC53YWl0KCkKICAgICAgICAgdGYuc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV9zdGRlcnJfZGVidWdfZGVjb3JhdGlvbnModGYucmVhZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic3RyYXdiZXJyeSIpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwodGYucmVhZCgpLCAic3RyYXdiZXJyeSIpCiAKICAgICBkZWYgdGVzdF9zdGRvdXRfc3RkZXJyX3BpcGUoc2VsZik6CiAgICAgICAgICMgY2FwdHVyZSBzdGRvdXQgYW5kIHN0ZGVyciB0byB0aGUgc2FtZSBwaXBlCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7JyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKCJhcHBsZSIpOycgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKCJhcHBsZSIpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQuZmx1c2goKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJvcmFuZ2UiKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotICAgICAgICBvdXRwdXQgPSBwLnN0ZG91dC5yZWFkKCkKLSAgICAgICAgc3RyaXBwZWQgPSByZW1vdmVfc3RkZXJyX2RlYnVnX2RlY29yYXRpb25zKG91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpcHBlZCwgImFwcGxlb3JhbmdlIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHAuc3Rkb3V0LnJlYWQoKSwgImFwcGxlb3JhbmdlIikKIAogICAgIGRlZiB0ZXN0X3N0ZG91dF9zdGRlcnJfZmlsZShzZWxmKToKICAgICAgICAgIyBjYXB0dXJlIHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSBzYW1lIG9wZW4gZmlsZQogICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOycgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiYXBwbGUiKTsnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQuZmx1c2goKTsnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiYXBwbGUiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZGVyci53cml0ZSgib3JhbmdlIiknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9dGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXRmKQogICAgICAgICBwLndhaXQoKQogICAgICAgICB0Zi5zZWVrKDApCi0gICAgICAgIG91dHB1dCA9IHRmLnJlYWQoKQotICAgICAgICBzdHJpcHBlZCA9IHJlbW92ZV9zdGRlcnJfZGVidWdfZGVjb3JhdGlvbnMob3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmlwcGVkLCAiYXBwbGVvcmFuZ2UiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHRmLnJlYWQoKSwgImFwcGxlb3JhbmdlIikKIAogICAgIGRlZiB0ZXN0X3N0ZG91dF9maWxlZGVzX29mX3N0ZG91dChzZWxmKToKICAgICAgICAgIyBzdGRvdXQgaXMgc2V0IHRvIDEgKCMxNTMxODYyKS4KICAgICAgICAgY21kID0gciJpbXBvcnQgc3lzLCBvczsgc3lzLmV4aXQob3Mud3JpdGUoc3lzLnN0ZG91dC5maWxlbm8oKSwgJy5cbicpKSIKICAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBjbWRdLCBzdGRvdXQ9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDIpCiAKICAgICBkZWYgdGVzdF9jd2Qoc2VsZik6CiAgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQpAQCAtMjUwLDEwICsyOTQsMTEgQEAKICAgICAgICAgdG1wZGlyID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgb3MuY2hkaXIoY3dkKQogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLG9zOycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKG9zLmdldGN3ZCgpKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXRtcGRpcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQogICAgICAgICBub3JtY2FzZSA9IG9zLnBhdGgubm9ybWNhc2UKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3JtY2FzZShwLnN0ZG91dC5yZWFkKCkpLCBub3JtY2FzZSh0bXBkaXIpKQogCkBAIC0yNjEsMTUgKzMwNiwxNyBAQAogICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAib3JhbmdlIgogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLG9zOycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKG9zLmdldGVudigiRlJVSVQiKSknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCksICJvcmFuZ2UiKQogCiAgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfc3RkaW4oc2VsZik6CiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuZXhpdChzeXMuc3RkaW4ucmVhZCgpID09ICJwZWFyIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuZXhpdChzeXMuc3RkaW4ucmVhZCgpID09ICJwZWFyIiknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFKQogICAgICAgICBwLmNvbW11bmljYXRlKCJwZWFyIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDEpCkBAIC0yODgsNyArMzM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKICAgICAgICAgKHN0ZG91dCwgc3RkZXJyKSA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfc3RkZXJyX2RlYnVnX2RlY29yYXRpb25zKHN0ZGVyciksICJwaW5lYXBwbGUiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgInBpbmVhcHBsZSIpCiAKICAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZShzZWxmKToKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLApAQCAtMjk4LDI2ICszNDUsMjkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkaW4uY2xvc2UpCiAgICAgICAgIChzdGRvdXQsIHN0ZGVycikgPSBwLmNvbW11bmljYXRlKCJiYW5hbmEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgImJhbmFuYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhzdGRlcnIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJwaW5lYXBwbGUiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgInBpbmVhcHBsZSIpCiAKICAgICAjIFRoaXMgdGVzdCBpcyBMaW51eCBzcGVjaWZpYyBmb3Igc2ltcGxpY2l0eSB0byBhdCBsZWFzdCBoYXZlCiAgICAgIyBzb21lIGNvdmVyYWdlLiAgSXQgaXMgbm90IGEgcGxhdGZvcm0gc3BlY2lmaWMgYnVnLgotICAgIGlmIG9zLnBhdGguaXNkaXIoJy9wcm9jLyVkL2ZkJyAlIG9zLmdldHBpZCgpKToKLSAgICAgICAgIyBUZXN0IGZvciB0aGUgZmQgbGVhayByZXBvcnRlZCBpbiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjc5MS4KLSAgICAgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfcGlwZV9mZF9sZWFrKHNlbGYpOgotICAgICAgICAgICAgZmRfZGlyZWN0b3J5ID0gJy9wcm9jLyVkL2ZkJyAlIG9zLmdldHBpZCgpCi0gICAgICAgICAgICBudW1fZmRzX2JlZm9yZV9wb3BlbiA9IGxlbihvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkpCi0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsICdwcmludCgpJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICAgICAgcC5jb21tdW5pY2F0ZSgpCi0gICAgICAgICAgICBudW1fZmRzX2FmdGVyX2NvbW11bmljYXRlID0gbGVuKG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KSkKLSAgICAgICAgICAgIGRlbCBwCi0gICAgICAgICAgICBudW1fZmRzX2FmdGVyX2Rlc3RydWN0aW9uID0gbGVuKG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2Zkc19iZWZvcmVfcG9wZW4sIG51bV9mZHNfYWZ0ZXJfZGVzdHJ1Y3Rpb24pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9mZHNfYmVmb3JlX3BvcGVuLCBudW1fZmRzX2FmdGVyX2NvbW11bmljYXRlKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLnBhdGguaXNkaXIoJy9wcm9jLyVkL2ZkJyAlIG9zLmdldHBpZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTGludXggc3BlY2lmaWMiKQorICAgICMgVGVzdCBmb3IgdGhlIGZkIGxlYWsgcmVwb3J0ZWQgaW4gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI3OTEuCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfcGlwZV9mZF9sZWFrKHNlbGYpOgorICAgICAgICBmZF9kaXJlY3RvcnkgPSAnL3Byb2MvJWQvZmQnICUgb3MuZ2V0cGlkKCkKKyAgICAgICAgbnVtX2Zkc19iZWZvcmVfcG9wZW4gPSBsZW4ob3MubGlzdGRpcihmZF9kaXJlY3RvcnkpKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCgpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHAuY29tbXVuaWNhdGUoKQorICAgICAgICBudW1fZmRzX2FmdGVyX2NvbW11bmljYXRlID0gbGVuKG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KSkKKyAgICAgICAgZGVsIHAKKyAgICAgICAgbnVtX2Zkc19hZnRlcl9kZXN0cnVjdGlvbiA9IGxlbihvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2Zkc19iZWZvcmVfcG9wZW4sIG51bV9mZHNfYWZ0ZXJfZGVzdHJ1Y3Rpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2Zkc19iZWZvcmVfcG9wZW4sIG51bV9mZHNfYWZ0ZXJfY29tbXVuaWNhdGUpCiAKICAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZV9yZXR1cm5zKHNlbGYpOgogICAgICAgICAjIGNvbW11bmljYXRlKCkgc2hvdWxkIHJldHVybiBOb25lIGlmIG5vIHJlZGlyZWN0aW9uIGlzIGFjdGl2ZQpAQCAtMzQwLDEyICszOTAsMTUgQEAKICAgICAgICAgb3MuY2xvc2UoeSkKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKDQ3KSk7JyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJ4eXoiKiVkKTsnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoc3lzLnN0ZGluLnJlYWQoNDcpKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJ4eXoiKiVkKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkpJyAlIHBpcGVfYnVmXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkaW4uY2xvc2UpCiAgICAgICAgIHN0cmluZ190b193cml0ZSA9ICJhYmMiKnBpcGVfYnVmCiAgICAgICAgIChzdGRvdXQsIHN0ZGVycikgPSBwLmNvbW11bmljYXRlKHN0cmluZ190b193cml0ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHN0cmluZ190b193cml0ZSkKQEAgLTM1MywxNSArNDA2LDE4IEBACiAgICAgZGVmIHRlc3Rfd3JpdGVzX2JlZm9yZV9jb21tdW5pY2F0ZShzZWxmKToKICAgICAgICAgIyBzdGRpbi53cml0ZSBiZWZvcmUgY29tbXVuaWNhdGUoKQogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLG9zOycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkpJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQogICAgICAgICBwLnN0ZGluLndyaXRlKCJiYW5hbmEiKQogICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZSgic3BsaXQiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgImJhbmFuYXNwbGl0IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfc3RkZXJyX2RlYnVnX2RlY29yYXRpb25zKHN0ZGVyciksICIiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgIiIpCiAKICAgICBkZWYgdGVzdF91bml2ZXJzYWxfbmV3bGluZXMoc2VsZik6CiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKQEAgLTM3OSw2ICs0MzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiXFxubGluZTYiKTsnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz0xKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCiAgICAgICAgIHN0ZG91dCA9IHAuc3Rkb3V0LnJlYWQoKQogICAgICAgICBpZiBoYXNhdHRyKGZpbGUsICduZXdsaW5lcycpOgogICAgICAgICAgICAgIyBJbnRlcnByZXRlciB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKQEAgLTQwNiw2ICs0NjMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiXFxubGluZTYiKTsnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz0xKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKICAgICAgICAgKHN0ZG91dCwgc3RkZXJyKSA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICBpZiBoYXNhdHRyKGZpbGUsICduZXdsaW5lcycpOgogICAgICAgICAgICAgIyBJbnRlcnByZXRlciB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKQEAgLTQxMywyNCArNDcyLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lMVxubGluZTJcbmxpbmUzXG5saW5lNFxubGluZTVcbmxpbmU2IikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgSW50ZXJwcmV0ZXIgd2l0aG91dCB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgImxpbmUxXG5saW5lMlxybGluZTNcclxubGluZTRcclxubGluZTVcbmxpbmU2IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZTFcbmxpbmUyXHJsaW5lM1xyXG5saW5lNFxyXG5saW5lNVxubGluZTYiKQogCiAgICAgZGVmIHRlc3Rfbm9fbGVha2luZyhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgd2UgbGVhayBubyByZXNvdXJjZXMKLSAgICAgICAgaWYgbm90IGhhc2F0dHIodGVzdF9zdXBwb3J0LCAiaXNfcmVzb3VyY2VfZW5hYmxlZCIpIFwKLSAgICAgICAgICAgICAgIG9yIHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCJzdWJwcm9jZXNzIikgYW5kIG5vdCBtc3dpbmRvd3M6CisgICAgICAgIGlmIG5vdCBtc3dpbmRvd3M6CiAgICAgICAgICAgICBtYXhfaGFuZGxlcyA9IDEwMjYgIyB0b28gbXVjaCBmb3IgbW9zdCBVTklYIHN5c3RlbXMKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1heF9oYW5kbGVzID0gNjUKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWF4X2hhbmRsZXMpOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAotICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5cztzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkpIl0sCi0gICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgICAgIGRhdGEgPSBwLmNvbW11bmljYXRlKCJsaW1lIilbMF0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgImxpbWUiKQotCisgICAgICAgICAgICBtYXhfaGFuZGxlcyA9IDIwNTAgIyB0b28gbXVjaCBmb3IgKGF0IGxlYXN0IHNvbWUpIFdpbmRvd3Mgc2V0dXBzCisgICAgICAgIGhhbmRsZXMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShtYXhfaGFuZGxlcyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuT19XUk9OTFkgfCBvcy5PX0NSRUFUKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNRklMRToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImZhaWxlZCB0byByZWFjaCB0aGUgZmlsZSBkZXNjcmlwdG9yIGxpbWl0ICIKKyAgICAgICAgICAgICAgICAgICAgIih0cmllZCAlZCkiICUgbWF4X2hhbmRsZXMpCisgICAgICAgICAgICAjIENsb3NlIGEgY291cGxlIG9mIHRoZW0gKHNob3VsZCBiZSBlbm91Z2ggZm9yIGEgc3VicHJvY2VzcykKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShoYW5kbGVzLnBvcCgpKQorICAgICAgICAgICAgIyBMb29wIGNyZWF0aW5nIHNvbWUgc3VicHJvY2Vzc2VzLiBJZiBvbmUgb2YgdGhlbSBsZWFrcyBzb21lIGZkcywKKyAgICAgICAgICAgICMgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24gd2lsbCBmYWlsIGJ5IHJlYWNoaW5nIHRoZSBtYXggZmQgbGltaXQuCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxNSk6CisgICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgICAgICBkYXRhID0gcC5jb21tdW5pY2F0ZShiImxpbWUiKVswXQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYiJsaW1lIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvciBoIGluIGhhbmRsZXM6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoaCkKIAogICAgIGRlZiB0ZXN0X2xpc3QyY21kbGluZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJwcm9jZXNzLmxpc3QyY21kbGluZShbJ2EgYiBjJywgJ2QnLCAnZSddKSwKQEAgLTQ2Miw3ICs1NDIsNyBAQAogICAgICAgICAjIGJ1dCwgYmFzZWQgb24gc3lzdGVtIHNjaGVkdWxpbmcgd2UgY2FuJ3QgY29udHJvbCwgaXQncyBwb3NzaWJsZQogICAgICAgICAjIHBvbGwoKSBuZXZlciByZXR1cm5lZCBOb25lLiAgSXQgInNob3VsZCBiZSIgdmVyeSByYXJlIHRoYXQgaXQKICAgICAgICAgIyBkaWRuJ3QgZ28gYXJvdW5kIGF0IGxlYXN0IHR3aWNlLgotICAgICAgICBzZWxmLmFzc2VydF8oY291bnQgPj0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoY291bnQsIDIpCiAgICAgICAgICMgU3Vic2VxdWVudCBpbnZvY2F0aW9ucyBzaG91bGQganVzdCByZXR1cm4gdGhlIHJldHVybmNvZGUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvbGwoKSwgMCkKIApAQCAtNDc4LDEyICs1NTgsOCBAQAogICAgIGRlZiB0ZXN0X2ludmFsaWRfYnVmc2l6ZShzZWxmKToKICAgICAgICAgIyBhbiBpbnZhbGlkIHR5cGUgb2YgdGhlIGJ1ZnNpemUgYXJndW1lbnQgc2hvdWxkIHJhaXNlCiAgICAgICAgICMgVHlwZUVycm9yLgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicGFzcyJdLCAib3JhbmdlIikKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVHlwZUVycm9yIikKIAogICAgIGRlZiB0ZXN0X2xlYWtpbmdfZmRzX29uX2Vycm9yKHNlbGYpOgogICAgICAgICAjIHNlZSBidWcgIzUxNzk6IFBvcGVuIGxlYWtzIGZpbGUgZGVzY3JpcHRvcnMgdG8gUElQRXMgaWYKQEAgLTQ5MiwyODAgKzU2OCwzOTggQEAKICAgICAgICAgIyB2YWx1ZSBmb3IgdGhhdCBsaW1pdCwgYnV0IFdpbmRvd3MgaGFzIDIwNDgsIHNvIHdlIGxvb3AKICAgICAgICAgIyAxMDI0IHRpbWVzIChlYWNoIGNhbGwgbGVha2VkIHR3byBmZHMpLgogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDI0KToKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgV2luZG93cyByYWlzZXMgSU9FcnJvci4gIE90aGVycyByYWlzZSBPU0Vycm9yLgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFbnZpcm9ubWVudEVycm9yKSBhcyBjOgogICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICAgICAgIyBXaW5kb3dzIHJhaXNlcyBJT0Vycm9yCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpLCBlcnI6Ci0gICAgICAgICAgICAgICAgaWYgZXJyLmVycm5vICE9IDI6ICAjIGlnbm9yZSAibm8gc3VjaCBmaWxlIgotICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgaWYgYy5leGNlcHRpb24uZXJybm8gIT0gZXJybm8uRU5PRU5UOiAgIyBpZ25vcmUgIm5vIHN1Y2ggZmlsZSIKKyAgICAgICAgICAgICAgICByYWlzZSBjLmV4Y2VwdGlvbgogCi0gICAgIwotICAgICMgUE9TSVggdGVzdHMKLSAgICAjCi0gICAgaWYgbm90IG1zd2luZG93czoKLSAgICAgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKLSAgICAgICAgICAgICMgY2F0Y2hlZCAmIHJlLXJhaXNlZCBleGNlcHRpb25zCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9Ii90aGlzL3BhdGgvZG9lcy9ub3QvZXhpc3QiKQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgIyBUaGUgYXR0cmlidXRlIGNoaWxkX3RyYWNlYmFjayBzaG91bGQgY29udGFpbiAib3MuY2hkaXIiCi0gICAgICAgICAgICAgICAgIyBzb21ld2hlcmUuCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLmNoaWxkX3RyYWNlYmFjay5maW5kKCJvcy5jaGRpciIpLCAtMSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBPU0Vycm9yIikKKyAgICBkZWYgdGVzdF9oYW5kbGVzX2Nsb3NlZF9vbl9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgSWYgQ3JlYXRlUHJvY2VzcyBleGl0cyB3aXRoIGFuIGVycm9yLCBlbnN1cmUgdGhlCisgICAgICAgICMgZHVwbGljYXRlIG91dHB1dCBoYW5kbGVzIGFyZSByZWxlYXNlZAorICAgICAgICBpZmhhbmRsZSwgaWZuYW1lID0gbWtzdGVtcCgpCisgICAgICAgIG9maGFuZGxlLCBvZm5hbWUgPSBta3N0ZW1wKCkKKyAgICAgICAgZWZoYW5kbGUsIGVmbmFtZSA9IG1rc3RlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuIChbIioiXSwgc3RkaW49aWZoYW5kbGUsIHN0ZG91dD1vZmhhbmRsZSwKKyAgICAgICAgICAgICAgc3RkZXJyPWVmaGFuZGxlKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIG9zLmNsb3NlKGlmaGFuZGxlKQorICAgICAgICAgICAgb3MucmVtb3ZlKGlmbmFtZSkKKyAgICAgICAgICAgIG9zLmNsb3NlKG9maGFuZGxlKQorICAgICAgICAgICAgb3MucmVtb3ZlKG9mbmFtZSkKKyAgICAgICAgICAgIG9zLmNsb3NlKGVmaGFuZGxlKQorICAgICAgICAgICAgb3MucmVtb3ZlKGVmbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpZm5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9mbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZWZuYW1lKSkKIAotICAgICAgICBkZWYgX3N1cHByZXNzX2NvcmVfZmlsZXMoc2VsZik6Ci0gICAgICAgICAgICAiIiJUcnkgdG8gcHJldmVudCBjb3JlIGZpbGVzIGZyb20gYmVpbmcgY3JlYXRlZC4KLSAgICAgICAgICAgIFJldHVybnMgcHJldmlvdXMgdWxpbWl0IGlmIHN1Y2Nlc3NmdWwsIGVsc2UgTm9uZS4KLSAgICAgICAgICAgICIiIgotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlICdDcmFzaCBSZXBvcnRlcicgb24gT1NYIHdhcyBjb25maWd1cmVkCi0gICAgICAgICAgICAgICAgIyBpbiAnRGV2ZWxvcGVyJyBtb2RlIGFuZCB3YXJuIHRoYXQgaXQgd2lsbCBnZXQgdHJpZ2dlcmVkCi0gICAgICAgICAgICAgICAgIyB3aGVuIGl0IGlzLgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIHVzZWQgaW4gdGVzdHMKLSAgICAgICAgICAgICAgICAjIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGUgbmV4dCBtYW5hZ2VyLgotICAgICAgICAgICAgICAgIHZhbHVlID0gc3VicHJvY2Vzcy5Qb3BlbihbJy91c3IvYmluL2RlZmF1bHRzJywgJ3JlYWQnLAorCisjIGNvbnRleHQgbWFuYWdlcgorY2xhc3MgX1N1cHByZXNzQ29yZUZpbGVzKG9iamVjdCk6CisgICAgIiIiVHJ5IHRvIHByZXZlbnQgY29yZSBmaWxlcyBmcm9tIGJlaW5nIGNyZWF0ZWQuIiIiCisgICAgb2xkX2xpbWl0ID0gTm9uZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIiIiVHJ5IHRvIHNhdmUgcHJldmlvdXMgdWxpbWl0LCB0aGVuIHNldCBpdCB0byAoMCwgMCkuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCByZXNvdXJjZQorICAgICAgICAgICAgc2VsZi5vbGRfbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUpCisgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsICgwLCAwKSkKKyAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlICdDcmFzaCBSZXBvcnRlcicgb24gT1NYIHdhcyBjb25maWd1cmVkCisgICAgICAgICAgICAjIGluICdEZXZlbG9wZXInIG1vZGUgYW5kIHdhcm4gdGhhdCBpdCB3aWxsIGdldCB0cmlnZ2VyZWQKKyAgICAgICAgICAgICMgd2hlbiBpdCBpcy4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgdXNlZCBpbiB0ZXN0cworICAgICAgICAgICAgIyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG5leHQgbWFuYWdlci4KKyAgICAgICAgICAgIHZhbHVlID0gc3VicHJvY2Vzcy5Qb3BlbihbJy91c3IvYmluL2RlZmF1bHRzJywgJ3JlYWQnLAogICAgICAgICAgICAgICAgICAgICAnY29tLmFwcGxlLkNyYXNoUmVwb3J0ZXInLCAnRGlhbG9nVHlwZSddLAogICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgICAgICAgICAgaWYgdmFsdWUuc3RyaXAoKSA9PSBiJ2RldmVsb3Blcic6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICJ0aGlzIHRlc3RzIHRyaWdnZXJzIHRoZSBDcmFzaCBSZXBvcnRlciwgdGhhdCBpcyBpbnRlbnRpb25hbCIKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICBpZiB2YWx1ZS5zdHJpcCgpID09IGInZGV2ZWxvcGVyJzoKKyAgICAgICAgICAgICAgICBwcmludCAidGhpcyB0ZXN0cyB0cmlnZ2VycyB0aGUgQ3Jhc2ggUmVwb3J0ZXIsIHRoYXQgaXMgaW50ZW50aW9uYWwiCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgcmVzb3VyY2UKLSAgICAgICAgICAgICAgICBvbGRfbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUpCi0gICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCAoMCwwKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb2xkX2xpbWl0Ci0gICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBWYWx1ZUVycm9yLCByZXNvdXJjZS5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJSZXR1cm4gY29yZSBmaWxlIGJlaGF2aW9yIHRvIGRlZmF1bHQuIiIiCisgICAgICAgIGlmIHNlbGYub2xkX2xpbWl0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHJlc291cmNlCisgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsIHNlbGYub2xkX2xpbWl0KQorICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBWYWx1ZUVycm9yLCByZXNvdXJjZS5lcnJvcik6CisgICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgZGVmIF91bnN1cHByZXNzX2NvcmVfZmlsZXMoc2VsZiwgb2xkX2xpbWl0KToKLSAgICAgICAgICAgICIiIlJldHVybiBjb3JlIGZpbGUgYmVoYXZpb3IgdG8gZGVmYXVsdC4iIiIKLSAgICAgICAgICAgIGlmIG9sZF9saW1pdCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCByZXNvdXJjZQotICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgb2xkX2xpbWl0KQotICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgotICAgICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGRlZiB0ZXN0X3J1bl9hYm9ydChzZWxmKToKLSAgICAgICAgICAgICMgcmV0dXJuY29kZSBoYW5kbGVzIHNpZ25hbCB0ZXJtaW5hdGlvbgotICAgICAgICAgICAgb2xkX2xpbWl0ID0gc2VsZi5fc3VwcHJlc3NfY29yZV9maWxlcygpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IG9zOyBvcy5hYm9ydCgpIl0pCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHNlbGYuX3Vuc3VwcHJlc3NfY29yZV9maWxlcyhvbGRfbGltaXQpCi0gICAgICAgICAgICBwLndhaXQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtcC5yZXR1cm5jb2RlLCBzaWduYWwuU0lHQUJSVCkKK0B1bml0dGVzdC5za2lwSWYobXN3aW5kb3dzLCAiUE9TSVggc3BlY2lmaWMgdGVzdHMiKQorY2xhc3MgUE9TSVhQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKIAotICAgICAgICBkZWYgdGVzdF9wcmVleGVjKHNlbGYpOgotICAgICAgICAgICAgIyBwcmVleGVjIGZ1bmN0aW9uCisgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyBjYXVnaHQgJiByZS1yYWlzZWQgZXhjZXB0aW9ucworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGM6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD0iL3RoaXMvcGF0aC9kb2VzL25vdC9leGlzdCIpCisgICAgICAgICMgVGhlIGF0dHJpYnV0ZSBjaGlsZF90cmFjZWJhY2sgc2hvdWxkIGNvbnRhaW4gIm9zLmNoZGlyIiBzb21ld2hlcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm9zLmNoZGlyIiwgYy5leGNlcHRpb24uY2hpbGRfdHJhY2ViYWNrKQorCisgICAgZGVmIHRlc3RfcnVuX2Fib3J0KHNlbGYpOgorICAgICAgICAjIHJldHVybmNvZGUgaGFuZGxlcyBzaWduYWwgdGVybWluYXRpb24KKyAgICAgICAgd2l0aCBfU3VwcHJlc3NDb3JlRmlsZXMoKToKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLG9zOycgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUob3MuZ2V0ZW52KCJGUlVJVCIpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgb3M7IG9zLmFib3J0KCkiXSkKKyAgICAgICAgICAgIHAud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXAucmV0dXJuY29kZSwgc2lnbmFsLlNJR0FCUlQpCisKKyAgICBkZWYgdGVzdF9wcmVleGVjKHNlbGYpOgorICAgICAgICAjIHByZWV4ZWMgZnVuY3Rpb24KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXMsIG9zOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMuc3Rkb3V0LndyaXRlKG9zLmdldGVudignRlJVSVQnKSkiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1sYW1iZGE6IG9zLnB1dGVudigiRlJVSVQiLCAiYXBwbGUiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLCAiYXBwbGUiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLCAiYXBwbGUiKQogCi0gICAgICAgIGRlZiB0ZXN0X2FyZ3Nfc3RyaW5nKHNlbGYpOgotICAgICAgICAgICAgIyBhcmdzIGlzIGEgc3RyaW5nCi0gICAgICAgICAgICBmLCBmbmFtZSA9IHNlbGYubWtzdGVtcCgpCi0gICAgICAgICAgICBvcy53cml0ZShmLCAiIyEvYmluL3NoXG4iKQotICAgICAgICAgICAgb3Mud3JpdGUoZiwgImV4ZWMgJyVzJyAtYyAnaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpJ1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIG9zLmNsb3NlKGYpCi0gICAgICAgICAgICBvcy5jaG1vZChmbmFtZSwgMDcwMCkKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGZuYW1lKQotICAgICAgICAgICAgcC53YWl0KCkKLSAgICAgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCA0NykKKyAgICBkZWYgdGVzdF9hcmdzX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBhcmdzIGlzIGEgc3RyaW5nCisgICAgICAgIGYsIGZuYW1lID0gbWtzdGVtcCgpCisgICAgICAgIG9zLndyaXRlKGYsICIjIS9iaW4vc2hcbiIpCisgICAgICAgIG9zLndyaXRlKGYsICJleGVjICclcycgLWMgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSdcbiIgJQorICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgb3MuY2xvc2UoZikKKyAgICAgICAgb3MuY2htb2QoZm5hbWUsIDBvNzAwKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihmbmFtZSkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgNDcpCiAKLSAgICAgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgotICAgICAgICAgICAgIyBpbnZhbGlkIGFyZ3VtZW50cyBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvPTQ3KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uZmxhZ3M9NDcpCisgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICAjIGludmFsaWQgYXJndW1lbnRzIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbz00NykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uZmxhZ3M9NDcpCiAKLSAgICAgICAgZGVmIHRlc3Rfc2hlbGxfc2VxdWVuY2Uoc2VsZik6Ci0gICAgICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzZXF1ZW5jZSkKLSAgICAgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCi0gICAgICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAiYXBwbGUiCi0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbImVjaG8gJEZSVUlUIl0sIHNoZWxsPTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLnN0cmlwKCksICJhcHBsZSIpCisgICAgZGVmIHRlc3Rfc2hlbGxfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHNlcXVlbmNlKQorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAiYXBwbGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZWNobyAkRlJVSVQiXSwgc2hlbGw9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKS5zdHJpcCgpLCAiYXBwbGUiKQogCi0gICAgICAgIGRlZiB0ZXN0X3NoZWxsX3N0cmluZyhzZWxmKToKLSAgICAgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHN0cmluZykKLSAgICAgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCi0gICAgICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAiYXBwbGUiCi0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigiZWNobyAkRlJVSVQiLCBzaGVsbD0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKS5zdHJpcCgpLCAiYXBwbGUiKQorICAgIGRlZiB0ZXN0X3NoZWxsX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBSdW4gY29tbWFuZCB0aHJvdWdoIHRoZSBzaGVsbCAoc3RyaW5nKQorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAiYXBwbGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCJlY2hvICRGUlVJVCIsIHNoZWxsPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKSwgImFwcGxlIikKIAotICAgICAgICBkZWYgdGVzdF9jYWxsX3N0cmluZyhzZWxmKToKLSAgICAgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IG9uIFVOSVgKLSAgICAgICAgICAgIGYsIGZuYW1lID0gc2VsZi5ta3N0ZW1wKCkKLSAgICAgICAgICAgIG9zLndyaXRlKGYsICIjIS9iaW4vc2hcbiIpCi0gICAgICAgICAgICBvcy53cml0ZShmLCAiZXhlYyAnJXMnIC1jICdpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NyknXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlKQotICAgICAgICAgICAgb3MuY2xvc2UoZikKLSAgICAgICAgICAgIG9zLmNobW9kKGZuYW1lLCAwNzAwKQotICAgICAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoZm5hbWUpCi0gICAgICAgICAgICBvcy5yZW1vdmUoZm5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCA0NykKKyAgICBkZWYgdGVzdF9jYWxsX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzdHJpbmcgYXJndW1lbnQgb24gVU5JWAorICAgICAgICBmLCBmbmFtZSA9IG1rc3RlbXAoKQorICAgICAgICBvcy53cml0ZShmLCAiIyEvYmluL3NoXG4iKQorICAgICAgICBvcy53cml0ZShmLCAiZXhlYyAnJXMnIC1jICdpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NyknXG4iICUKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIG9zLmNsb3NlKGYpCisgICAgICAgIG9zLmNobW9kKGZuYW1lLCAwNzAwKQorICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChmbmFtZSkKKyAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCA0NykKIAotICAgICAgICBkZWYgdGVzdF9zcGVjaWZpY19zaGVsbChzZWxmKToKLSAgICAgICAgICAgICMgSXNzdWUgIzkyNjU6IEluY29ycmVjdCBuYW1lIHBhc3NlZCBhcyBhcmdbMF0uCi0gICAgICAgICAgICBzaGVsbHMgPSBbXQotICAgICAgICAgICAgZm9yIHByZWZpeCBpbiBbJy9iaW4nLCAnL3Vzci9iaW4vJywgJy91c3IvbG9jYWwvYmluJ106Ci0gICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gWydiYXNoJywgJ2tzaCddOgotICAgICAgICAgICAgICAgICAgICBzaCA9IG9zLnBhdGguam9pbihwcmVmaXgsIG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxscy5hcHBlbmQoc2gpCi0gICAgICAgICAgICBpZiBub3Qgc2hlbGxzOiAgIyBXaWxsIHByb2JhYmx5IHdvcmsgZm9yIGFueSBzaGVsbCBidXQgY3NoLgotICAgICAgICAgICAgICAgIHJldHVybiAgIyBza2lwIHRlc3QKLSAgICAgICAgICAgIHNoID0gJy9iaW4vc2gnCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzaCkgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhzaCk6Ci0gICAgICAgICAgICAgICAgIyBUZXN0IHdpbGwgZmFpbCBpZiAvYmluL3NoIGlzIGEgc3ltbGluayB0byBjc2guCi0gICAgICAgICAgICAgICAgc2hlbGxzLmFwcGVuZChzaCkKLSAgICAgICAgICAgIGZvciBzaCBpbiBzaGVsbHM6Ci0gICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oImVjaG8gJDAiLCBleGVjdXRhYmxlPXNoLCBzaGVsbD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKSwgc2gpCisgICAgZGVmIHRlc3Rfc3BlY2lmaWNfc2hlbGwoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzkyNjU6IEluY29ycmVjdCBuYW1lIHBhc3NlZCBhcyBhcmdbMF0uCisgICAgICAgIHNoZWxscyA9IFtdCisgICAgICAgIGZvciBwcmVmaXggaW4gWycvYmluJywgJy91c3IvYmluLycsICcvdXNyL2xvY2FsL2JpbiddOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gWydiYXNoJywgJ2tzaCddOgorICAgICAgICAgICAgICAgIHNoID0gb3MucGF0aC5qb2luKHByZWZpeCwgbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzaCk6CisgICAgICAgICAgICAgICAgICAgIHNoZWxscy5hcHBlbmQoc2gpCisgICAgICAgIGlmIG5vdCBzaGVsbHM6ICMgV2lsbCBwcm9iYWJseSB3b3JrIGZvciBhbnkgc2hlbGwgYnV0IGNzaC4KKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImJhc2ggb3Iga3NoIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QiKQorICAgICAgICBzaCA9ICcvYmluL3NoJworICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzaCkgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhzaCk6CisgICAgICAgICAgICAjIFRlc3Qgd2lsbCBmYWlsIGlmIC9iaW4vc2ggaXMgYSBzeW1saW5rIHRvIGNzaC4KKyAgICAgICAgICAgIHNoZWxscy5hcHBlbmQoc2gpCisgICAgICAgIGZvciBzaCBpbiBzaGVsbHM6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigiZWNobyAkMCIsIGV4ZWN1dGFibGU9c2gsIHNoZWxsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKSwgc2gpCiAKLSAgICAgICAgZGVmIERJU0FCTEVEX3Rlc3Rfc2VuZF9zaWduYWwoc2VsZik6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW5wdXQoKSJdKQorICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYsIG1ldGhvZCwgKmFyZ3MpOgorICAgICAgICAjIERvIG5vdCBpbmhlcml0IGZpbGUgaGFuZGxlcyBmcm9tIHRoZSBwYXJlbnQuCisgICAgICAgICMgSXQgc2hvdWxkIGZpeCBmYWlsdXJlcyBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIiJpZiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzLCB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ3hcXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgzMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgaW50ZXJwcmV0ZXIgdG8gYmUgY29tcGxldGVseSBpbml0aWFsaXplZCBiZWZvcmUKKyAgICAgICAgIyBzZW5kaW5nIGFueSBzaWduYWwuCisgICAgICAgIHAuc3Rkb3V0LnJlYWQoMSkKKyAgICAgICAgZ2V0YXR0cihwLCBtZXRob2QpKCphcmdzKQorICAgICAgICByZXR1cm4gcAogCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocC5wb2xsKCkgaXMgTm9uZSwgcC5wb2xsKCkpCi0gICAgICAgICAgICBwLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdJTlQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAud2FpdCgpLCAwKQorICAgIGRlZiB0ZXN0X3NlbmRfc2lnbmFsKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5fa2lsbF9wcm9jZXNzKCdzZW5kX3NpZ25hbCcsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgIF8sIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdLZXlib2FyZEludGVycnVwdCcsIHN0ZGVycikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwLndhaXQoKSwgMCkKIAotICAgICAgICBkZWYgRElTQUJMRURfdGVzdF9raWxsKHNlbGYpOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbnB1dCgpIl0pCisgICAgZGVmIHRlc3Rfa2lsbChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuX2tpbGxfcHJvY2Vzcygna2lsbCcpCisgICAgICAgIF8sIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIC1zaWduYWwuU0lHS0lMTCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHAucG9sbCgpIGlzIE5vbmUsIHAucG9sbCgpKQotICAgICAgICAgICAgcC5raWxsKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIC1zaWduYWwuU0lHS0lMTCkKKyAgICBkZWYgdGVzdF90ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLl9raWxsX3Byb2Nlc3MoJ3Rlcm1pbmF0ZScpCisgICAgICAgIF8sIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIC1zaWduYWwuU0lHVEVSTSkKIAotICAgICAgICBkZWYgRElTQUJMRURfdGVzdF90ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIiwgImlucHV0KCkiXSkKKyAgICBkZWYgY2hlY2tfY2xvc2Vfc3RkX2ZkcyhzZWxmLCBmZHMpOgorICAgICAgICAjIElzc3VlICM5OTA1OiB0ZXN0IHRoYXQgc3VicHJvY2VzcyBwaXBlcyBzdGlsbCB3b3JrIHByb3Blcmx5IHdpdGgKKyAgICAgICAgIyBzb21lIHN0YW5kYXJkIGZkcyBjbG9zZWQKKyAgICAgICAgc3RkaW4gPSAwCisgICAgICAgIG5ld2ZkcyA9IFtdCisgICAgICAgIGZvciBhIGluIGZkczoKKyAgICAgICAgICAgIGIgPSBvcy5kdXAoYSkKKyAgICAgICAgICAgIG5ld2Zkcy5hcHBlbmQoYikKKyAgICAgICAgICAgIGlmIGEgPT0gMDoKKyAgICAgICAgICAgICAgICBzdGRpbiA9IGIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgIG91dCwgZXJyID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiYXBwbGUiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJvcmFuZ2UiKSddLAorICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgZXJyID0gdGVzdF9zdXBwb3J0LnN0cmlwX3B5dGhvbl9zdGRlcnIoZXJyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgob3V0LCBlcnIpLCAoYidhcHBsZScsIGInb3JhbmdlJykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb3IgYiwgYSBpbiB6aXAobmV3ZmRzLCBmZHMpOgorICAgICAgICAgICAgICAgIG9zLmR1cDIoYiwgYSkKKyAgICAgICAgICAgIGZvciBiIGluIG5ld2ZkczoKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShiKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocC5wb2xsKCkgaXMgTm9uZSwgcC5wb2xsKCkpCi0gICAgICAgICAgICBwLnRlcm1pbmF0ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAtc2lnbmFsLlNJR1RFUk0pCisgICAgZGVmIHRlc3RfY2xvc2VfZmRfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFswXSkKIAotICAgICMKLSAgICAjIFdpbmRvd3MgdGVzdHMKLSAgICAjCi0gICAgaWYgbXN3aW5kb3dzOgotICAgICAgICBkZWYgdGVzdF9zdGFydHVwaW5mbyhzZWxmKToKLSAgICAgICAgICAgICMgc3RhcnR1cGluZm8gYXJndW1lbnQKLSAgICAgICAgICAgICMgV2UgdXNlcyBoYXJkY29kZWQgY29uc3RhbnRzLCBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRvCi0gICAgICAgICAgICAjIGRlcGVuZCBvbiB3aW4zMmFsbC4KLSAgICAgICAgICAgIFNUQVJURl9VU0VTSE9XV0lORE9XID0gMQotICAgICAgICAgICAgU1dfTUFYSU1JWkUgPSAzCi0gICAgICAgICAgICBzdGFydHVwaW5mbyA9IHN1YnByb2Nlc3MuU1RBUlRVUElORk8oKQotICAgICAgICAgICAgc3RhcnR1cGluZm8uZHdGbGFncyA9IFNUQVJURl9VU0VTSE9XV0lORE9XCi0gICAgICAgICAgICBzdGFydHVwaW5mby53U2hvd1dpbmRvdyA9IFNXX01BWElNSVpFCi0gICAgICAgICAgICAjIFNpbmNlIFB5dGhvbiBpcyBhIGNvbnNvbGUgcHJvY2VzcywgaXQgd29uJ3QgYmUgYWZmZWN0ZWQKLSAgICAgICAgICAgICMgYnkgd1Nob3dXaW5kb3csIGJ1dCB0aGUgYXJndW1lbnQgc2hvdWxkIGJlIHNpbGVudGx5Ci0gICAgICAgICAgICAjIGlnbm9yZWQKLSAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCgwKSJdLAorICAgIGRlZiB0ZXN0X2Nsb3NlX2ZkXzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMV0pCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzJdKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzBfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFswLCAxXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Zkc18wXzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMCwgMl0pCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHNfMV8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzEsIDJdKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzBfMV8yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMDgwNjogdGVzdCB0aGF0IHN1YnByb2Nlc3MgcGlwZXMgc3RpbGwgd29yayBwcm9wZXJseSB3aXRoCisgICAgICAgICMgYWxsIHN0YW5kYXJkIGZkcyBjbG9zZWQuCisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMCwgMSwgMl0pCisKKyAgICBkZWYgdGVzdF93YWl0X3doZW5fc2lnY2hpbGRfaWdub3JlZChzZWxmKToKKyAgICAgICAgIyBOT1RFOiBzaWdjaGlsZF9pZ25vcmUucHkgbWF5IG5vdCBiZSBhbiBlZmZlY3RpdmUgdGVzdCBvbiBhbGwgT1Nlcy4KKyAgICAgICAgc2lnY2hpbGRfaWdub3JlID0gdGVzdF9zdXBwb3J0LmZpbmRmaWxlKCJzaWdjaGlsZF9pZ25vcmUucHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyPSJzdWJwcm9jZXNzZGF0YSIpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgc2lnY2hpbGRfaWdub3JlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwLnJldHVybmNvZGUsICJzaWdjaGlsZF9pZ25vcmUucHkgZXhpdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgbm9uLXplcm8gd2l0aCB0aGlzIGVycm9yOlxuJXMiICUgc3RkZXJyKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKG1zd2luZG93cywgIldpbmRvd3Mgc3BlY2lmaWMgdGVzdHMiKQorY2xhc3MgV2luMzJQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0YXJ0dXBpbmZvKHNlbGYpOgorICAgICAgICAjIHN0YXJ0dXBpbmZvIGFyZ3VtZW50CisgICAgICAgICMgV2UgdXNlcyBoYXJkY29kZWQgY29uc3RhbnRzLCBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRvCisgICAgICAgICMgZGVwZW5kIG9uIHdpbjMyYWxsLgorICAgICAgICBTVEFSVEZfVVNFU0hPV1dJTkRPVyA9IDEKKyAgICAgICAgU1dfTUFYSU1JWkUgPSAzCisgICAgICAgIHN0YXJ0dXBpbmZvID0gc3VicHJvY2Vzcy5TVEFSVFVQSU5GTygpCisgICAgICAgIHN0YXJ0dXBpbmZvLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU0hPV1dJTkRPVworICAgICAgICBzdGFydHVwaW5mby53U2hvd1dpbmRvdyA9IFNXX01BWElNSVpFCisgICAgICAgICMgU2luY2UgUHl0aG9uIGlzIGEgY29uc29sZSBwcm9jZXNzLCBpdCB3b24ndCBiZSBhZmZlY3RlZAorICAgICAgICAjIGJ5IHdTaG93V2luZG93LCBidXQgdGhlIGFyZ3VtZW50IHNob3VsZCBiZSBzaWxlbnRseQorICAgICAgICAjIGlnbm9yZWQKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5leGl0KDApIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbz1zdGFydHVwaW5mbykKIAotICAgICAgICBkZWYgdGVzdF9jcmVhdGlvbmZsYWdzKHNlbGYpOgotICAgICAgICAgICAgIyBjcmVhdGlvbmZsYWdzIGFyZ3VtZW50Ci0gICAgICAgICAgICBDUkVBVEVfTkVXX0NPTlNPTEUgPSAxNgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiICAgIGEgRE9TIGJveCBzaG91bGQgZmxhc2ggYnJpZWZseSAuLi5cbiIpCi0gICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc3lzLmV4ZWN1dGFibGUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1jICJpbXBvcnQgdGltZTsgdGltZS5zbGVlcCgwLjI1KSInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uZmxhZ3M9Q1JFQVRFX05FV19DT05TT0xFKQorICAgIGRlZiB0ZXN0X2NyZWF0aW9uZmxhZ3Moc2VsZik6CisgICAgICAgICMgY3JlYXRpb25mbGFncyBhcmd1bWVudAorICAgICAgICBDUkVBVEVfTkVXX0NPTlNPTEUgPSAxNgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIgICAgYSBET1MgYm94IHNob3VsZCBmbGFzaCBicmllZmx5IC4uLlxuIikKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHN5cy5leGVjdXRhYmxlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICcgLWMgImltcG9ydCB0aW1lOyB0aW1lLnNsZWVwKDAuMjUpIicsCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzPUNSRUFURV9ORVdfQ09OU09MRSkKIAotICAgICAgICBkZWYgdGVzdF9pbnZhbGlkX2FyZ3Moc2VsZik6Ci0gICAgICAgICAgICAjIGludmFsaWQgYXJndW1lbnRzIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdWJwcm9jZXNzLmNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1sYW1iZGE6IDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdWJwcm9jZXNzLmNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgICMgaW52YWxpZCBhcmd1bWVudHMgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49bGFtYmRhOiAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdWJwcm9jZXNzLmNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHMoc2VsZik6CisgICAgICAgICMgY2xvc2UgZmlsZSBkZXNjcmlwdG9ycworICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCiAKLSAgICAgICAgZGVmIHRlc3RfY2xvc2VfZmRzKHNlbGYpOgotICAgICAgICAgICAgIyBjbG9zZSBmaWxlIGRlc2NyaXB0b3JzCi0gICAgICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCisgICAgZGVmIHRlc3Rfc2hlbGxfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHNlcXVlbmNlKQorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAicGh5c2FsaXMiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsic2V0Il0sIHNoZWxsPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigicGh5c2FsaXMiLCBwLnN0ZG91dC5yZWFkKCkpCiAKLSAgICAgICAgZGVmIHRlc3Rfc2hlbGxfc2VxdWVuY2Uoc2VsZik6Ci0gICAgICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzZXF1ZW5jZSkKLSAgICAgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCi0gICAgICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAicGh5c2FsaXMiCi0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbInNldCJdLCBzaGVsbD0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAuc3Rkb3V0LnJlYWQoKS5maW5kKCJwaHlzYWxpcyIpLCAtMSkKKyAgICBkZWYgdGVzdF9zaGVsbF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHN0cmluZykKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gInBoeXNhbGlzIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbigic2V0Iiwgc2hlbGw9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEluKCJwaHlzYWxpcyIsIHAuc3Rkb3V0LnJlYWQoKSkKIAotICAgICAgICBkZWYgdGVzdF9zaGVsbF9zdHJpbmcoc2VsZik6Ci0gICAgICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzdHJpbmcpCi0gICAgICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgICAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gInBoeXNhbGlzIgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oInNldCIsIHNoZWxsPTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocC5zdGRvdXQucmVhZCgpLmZpbmQoInBoeXNhbGlzIiksIC0xKQorICAgIGRlZiB0ZXN0X2NhbGxfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudCBvbiBXaW5kb3dzCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKHN5cy5leGVjdXRhYmxlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtYyAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQ3KQogCi0gICAgICAgIGRlZiB0ZXN0X2NhbGxfc3RyaW5nKHNlbGYpOgotICAgICAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzdHJpbmcgYXJndW1lbnQgb24gV2luZG93cwotICAgICAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoc3lzLmV4ZWN1dGFibGUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtYyAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCA0NykKKyAgICBkZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBtZXRob2QsICphcmdzKToKKyAgICAgICAgIyBTb21lIHdpbjMyIGJ1aWxkYm90IHJhaXNlcyBFT0ZFcnJvciBpZiBzdGRpbiBpcyBpbmhlcml0ZWQKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIiJpZiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzLCB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ3hcXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgzMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkaW4uY2xvc2UpCisgICAgICAgICMgV2FpdCBmb3IgdGhlIGludGVycHJldGVyIHRvIGJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYmVmb3JlCisgICAgICAgICMgc2VuZGluZyBhbnkgc2lnbmFsLgorICAgICAgICBwLnN0ZG91dC5yZWFkKDEpCisgICAgICAgIGdldGF0dHIocCwgbWV0aG9kKSgqYXJncykKKyAgICAgICAgXywgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwoc3RkZXJyLCAnJykKKyAgICAgICAgcmV0dXJuY29kZSA9IHAud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmV0dXJuY29kZSwgMCkKIAotICAgICAgICBkZWYgRElTQUJMRURfdGVzdF9zZW5kX3NpZ25hbChzZWxmKToKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbnB1dCgpIl0pCisgICAgZGVmIHRlc3Rfc2VuZF9zaWduYWwoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfcHJvY2Vzcygnc2VuZF9zaWduYWwnLCBzaWduYWwuU0lHVEVSTSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHAucG9sbCgpIGlzIE5vbmUsIHAucG9sbCgpKQotICAgICAgICAgICAgcC5zZW5kX3NpZ25hbChzaWduYWwuU0lHVEVSTSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocC53YWl0KCksIDApCisgICAgZGVmIHRlc3Rfa2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKCdraWxsJykKIAotICAgICAgICBkZWYgRElTQUJMRURfdGVzdF9raWxsKHNlbGYpOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbnB1dCgpIl0pCisgICAgZGVmIHRlc3RfdGVybWluYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9raWxsX3Byb2Nlc3MoJ3Rlcm1pbmF0ZScpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhwLnBvbGwoKSBpcyBOb25lLCBwLnBvbGwoKSkKLSAgICAgICAgICAgIHAua2lsbCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAud2FpdCgpLCAwKQogCi0gICAgICAgIGRlZiBESVNBQkxFRF90ZXN0X3Rlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW5wdXQoKSJdKQorQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0YXR0cihzdWJwcm9jZXNzLCAnX2hhc19wb2xsJywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgInBvbGwgc3lzdGVtIGNhbGwgbm90IHN1cHBvcnRlZCIpCitjbGFzcyBQcm9jZXNzVGVzdENhc2VOb1BvbGwoUHJvY2Vzc1Rlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1YnByb2Nlc3MuX2hhc19wb2xsID0gRmFsc2UKKyAgICAgICAgUHJvY2Vzc1Rlc3RDYXNlLnNldFVwKHNlbGYpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhwLnBvbGwoKSBpcyBOb25lLCBwLnBvbGwoKSkKLSAgICAgICAgICAgIHAudGVybWluYXRlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocC53YWl0KCksIDApCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IFRydWUKKyAgICAgICAgUHJvY2Vzc1Rlc3RDYXNlLnRlYXJEb3duKHNlbGYpCisKIAogY2xhc3MgSGVscGVyRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIF90ZXN0X2VpbnRyX3JldHJ5X2NhbGwoc2VsZik6CisgICAgQHVuaXR0ZXN0LnNraXBJZihtc3dpbmRvd3MsICJlcnJubyBhbmQgRUlOVFIgbWFrZSBubyBzZW5zZSBvbiB3aW5kb3dzIikKKyAgICBkZWYgdGVzdF9laW50cl9yZXRyeV9jYWxsKHNlbGYpOgogICAgICAgICByZWNvcmRfY2FsbHMgPSBbXQogICAgICAgICBkZWYgZmFrZV9vc19mdW5jKCphcmdzKToKICAgICAgICAgICAgIHJlY29yZF9jYWxscy5hcHBlbmQoYXJncykKQEAgLTc4MSwxNSArOTc1LDYwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5fZWludHJfcmV0cnlfY2FsbChmYWtlX29zX2Z1bmMsIDY2NikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygyNTYsIDk5OSksICg2NjYsKSwgKDY2NiwpXSwgcmVjb3JkX2NhbGxzKQogCi0gICAgaWYgbm90IG1zd2luZG93czoKLSAgICAgICAgdGVzdF9laW50cl9yZXRyeV9jYWxsID0gX3Rlc3RfZWludHJfcmV0cnlfY2FsbAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyhtc3dpbmRvd3MsICJtc3dpbmRvd3Mgb25seSIpCitjbGFzcyBDb21tYW5kc1dpdGhTcGFjZXMgKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKENvbW1hbmRzV2l0aFNwYWNlcywgc2VsZikuc2V0VXAoKQorICAgICAgICBmLCBmbmFtZSA9IG1rc3RlbXAoIi5weSIsICJ0ZSBzdCIpCisgICAgICAgIHNlbGYuZm5hbWUgPSBmbmFtZS5sb3dlciAoKQorICAgICAgICBvcy53cml0ZShmLCBiImltcG9ydCBzeXM7IgorICAgICAgICAgICAgICAgICAgICBiInN5cy5zdGRvdXQud3JpdGUoJyVkICVzJyAlIChsZW4oc3lzLmFyZ3YpLCBbYS5sb3dlciAoKSBmb3IgYSBpbiBzeXMuYXJndl0pKSIKKyAgICAgICAgKQorICAgICAgICBvcy5jbG9zZShmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy5yZW1vdmUoc2VsZi5mbmFtZSkKKyAgICAgICAgc3VwZXIoQ29tbWFuZHNXaXRoU3BhY2VzLCBzZWxmKS50ZWFyRG93bigpCisKKyAgICBkZWYgd2l0aF9zcGFjZXMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAga3dhcmdzWydzdGRvdXQnXSA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICBwLnN0ZG91dC5yZWFkICgpLmRlY29kZSgibWJjcyIpLAorICAgICAgICAgICIyIFslciwgJ2FiIGNkJ10iICUgc2VsZi5mbmFtZQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zaGVsbF9zdHJpbmdfd2l0aF9zcGFjZXMoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IHdpdGggc3BhY2VzIG9uIFdpbmRvd3MKKyAgICAgICAgc2VsZi53aXRoX3NwYWNlcygnIiVzIiAiJXMiICIlcyInICUgKHN5cy5leGVjdXRhYmxlLCBzZWxmLmZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiIGNkIiksIHNoZWxsPTEpCisKKyAgICBkZWYgdGVzdF9zaGVsbF9zZXF1ZW5jZV93aXRoX3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzZXF1ZW5jZSBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCisgICAgICAgIHNlbGYud2l0aF9zcGFjZXMoW3N5cy5leGVjdXRhYmxlLCBzZWxmLmZuYW1lLCAiYWIgY2QiXSwgc2hlbGw9MSkKKworICAgIGRlZiB0ZXN0X25vc2hlbGxfc3RyaW5nX3dpdGhfc3BhY2VzKHNlbGYpOgorICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCisgICAgICAgIHNlbGYud2l0aF9zcGFjZXMoJyIlcyIgIiVzIiAiJXMiJyAlIChzeXMuZXhlY3V0YWJsZSwgc2VsZi5mbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiIGNkIikpCisKKyAgICBkZWYgdGVzdF9ub3NoZWxsX3NlcXVlbmNlX3dpdGhfc3BhY2VzKHNlbGYpOgorICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHNlcXVlbmNlIGFyZ3VtZW50IHdpdGggc3BhY2VzIG9uIFdpbmRvd3MKKyAgICAgICAgc2VsZi53aXRoX3NwYWNlcyhbc3lzLmV4ZWN1dGFibGUsIHNlbGYuZm5hbWUsICJhYiBjZCJdKQogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQcm9jZXNzVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWxwZXJGdW5jdGlvblRlc3RzKQotICAgIGlmIGhhc2F0dHIodGVzdF9zdXBwb3J0LCAicmVhcF9jaGlsZHJlbiIpOgotICAgICAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisgICAgdW5pdF90ZXN0cyA9IChQcm9jZXNzVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICBQT1NJWFByb2Nlc3NUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgIFdpbjMyUHJvY2Vzc1Rlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgUHJvY2Vzc1Rlc3RDYXNlTm9Qb2xsLAorICAgICAgICAgICAgICAgICAgSGVscGVyRnVuY3Rpb25UZXN0cywKKyAgICAgICAgICAgICAgICAgIENvbW1hbmRzV2l0aFNwYWNlcykKKworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnVuaXRfdGVzdHMpCisgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1bmF1ZGlvZGV2LnB5IGIvTGliL3Rlc3QvdGVzdF9zdW5hdWRpb2Rldi5weQppbmRleCAyYzVlN2Q0Li5jOTZmNzExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1bmF1ZGlvZGV2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VuYXVkaW9kZXYucHkKQEAgLTEsNCArMSw1IEBACi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgVGVzdEZhaWxlZCwgVGVzdFNraXBwZWQsIGltcG9ydF9tb2R1bGUKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBUZXN0RmFpbGVkLCBpbXBvcnRfbW9kdWxlCitpbXBvcnQgdW5pdHRlc3QKIHN1bmF1ZGlvZGV2ID0gaW1wb3J0X21vZHVsZSgnc3VuYXVkaW9kZXYnLCBkZXByZWNhdGVkPVRydWUpCiBpbXBvcnQgb3MKIApAQCAtOCw3ICs5LDcgQEAKICAgICBhdWRpb2RldiA9ICIvZGV2L2F1ZGlvIgogCiBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXVkaW9kZXYpOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJubyBhdWRpbyBkZXZpY2UgZm91bmQhIikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibm8gYXVkaW8gZGV2aWNlIGZvdW5kISIpCiAKIGRlZiBwbGF5X3NvdW5kX2ZpbGUocGF0aCk6CiAgICAgZnAgPSBvcGVuKHBhdGgsICdyJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKaW5kZXggOWZmZDM5Yi4uNmUyYjc5NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKQEAgLTIyLDcgKzIyLDYgQEAKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuZmlsZWxpc3QKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKICAgICAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLm1zdmNjb21waWxlcgotICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5td2Vya3Njb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy50ZXh0X2ZpbGUKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMudW5peGNjb21waWxlcgogCkBAIC02Niw3ICs2NSw2IEBACiAgICAgICAgICAgICBpbXBvcnQgcHN0YXRzCiAgICAgICAgICAgICBpbXBvcnQgcHlfY29tcGlsZQogICAgICAgICAgICAgaW1wb3J0IHJleGVjCi0gICAgICAgICAgICBpbXBvcnQgcmxjb21wbGV0ZXIKICAgICAgICAgICAgIGltcG9ydCBzY2hlZAogICAgICAgICAgICAgaW1wb3J0IHNuZGhkcgogICAgICAgICAgICAgaW1wb3J0IHN0YXR2ZnMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQppbmRleCAyMjEyZmNlLi5jYjJlMDNiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CkBAIC01LDI2ICs1LDM4IEBACiAKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZXJybm8KK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBnYwogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCitpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCBzaHV0aWwKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgVXNlckRpY3QKIGltcG9ydCByZQoraW1wb3J0IHRpbWUKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkID0gTm9uZQogCi1fX2FsbF9fID0gWyJFcnJvciIsICJUZXN0RmFpbGVkIiwgIlRlc3RTa2lwcGVkIiwgIlJlc291cmNlRGVuaWVkIiwgImltcG9ydF9tb2R1bGUiLAorX19hbGxfXyA9IFsiRXJyb3IiLCAiVGVzdEZhaWxlZCIsICJSZXNvdXJjZURlbmllZCIsICJpbXBvcnRfbW9kdWxlIiwKICAgICAgICAgICAgInZlcmJvc2UiLCAidXNlX3Jlc291cmNlcyIsICJtYXhfbWVtdXNlIiwgInJlY29yZF9vcmlnaW5hbF9zdGRvdXQiLAogICAgICAgICAgICAiZ2V0X29yaWdpbmFsX3N0ZG91dCIsICJ1bmxvYWQiLCAidW5saW5rIiwgInJtdHJlZSIsICJmb3JnZXQiLAogICAgICAgICAgICAiaXNfcmVzb3VyY2VfZW5hYmxlZCIsICJyZXF1aXJlcyIsICJmaW5kX3VudXNlZF9wb3J0IiwgImJpbmRfcG9ydCIsCiAgICAgICAgICAgICJmY21wIiwgImhhdmVfdW5pY29kZSIsICJpc19qeXRob24iLCAiVEVTVEZOIiwgIkhPU1QiLCAiRlVaWiIsCi0gICAgICAgICAgICJmaW5kZmlsZSIsICJ2ZXJpZnkiLCAidmVyZXEiLCAic29ydGRpY3QiLCAiY2hlY2tfc3ludGF4X2Vycm9yIiwKLSAgICAgICAgICAgIm9wZW5fdXJscmVzb3VyY2UiLCAiY2hlY2tfd2FybmluZ3MiLCAiX2NoZWNrX3B5M2tfd2FybmluZ3MiLAorICAgICAgICAgICAiU0FWRURDV0QiLCAidGVtcF9jd2QiLCAiZmluZGZpbGUiLCAic29ydGRpY3QiLCAiY2hlY2tfc3ludGF4X2Vycm9yIiwKKyAgICAgICAgICAgIm9wZW5fdXJscmVzb3VyY2UiLCAiY2hlY2tfd2FybmluZ3MiLCAiY2hlY2tfcHkza193YXJuaW5ncyIsCiAgICAgICAgICAgICJDbGVhbkltcG9ydCIsICJFbnZpcm9ubWVudFZhckd1YXJkIiwgImNhcHR1cmVkX291dHB1dCIsCiAgICAgICAgICAgICJjYXB0dXJlZF9zdGRvdXQiLCAiVHJhbnNpZW50UmVzb3VyY2UiLCAidHJhbnNpZW50X2ludGVybmV0IiwKICAgICAgICAgICAgInJ1bl93aXRoX2xvY2FsZSIsICJzZXRfbWVtbGltaXQiLCAiYmlnbWVtdGVzdCIsICJiaWdhZGRyc3BhY2V0ZXN0IiwKICAgICAgICAgICAgIkJhc2ljVGVzdFJ1bm5lciIsICJydW5fdW5pdHRlc3QiLCAicnVuX2RvY3Rlc3QiLCAidGhyZWFkaW5nX3NldHVwIiwKLSAgICAgICAgICAgInRocmVhZGluZ19jbGVhbnVwIiwgInJlYXBfY2hpbGRyZW4iXQorICAgICAgICAgICAidGhyZWFkaW5nX2NsZWFudXAiLCAicmVhcF9jaGlsZHJlbiIsICJjcHl0aG9uX29ubHkiLAorICAgICAgICAgICAiY2hlY2tfaW1wbF9kZXRhaWwiLCAiZ2V0X2F0dHJpYnV0ZSIsICJweTNrX2J5dGVzIl0KKwogCiBjbGFzcyBFcnJvcihFeGNlcHRpb24pOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIHJlZ3Jlc3Npb24gdGVzdCBleGNlcHRpb25zLiIiIgpAQCAtMzIsMzcgKzQ0LDExNiBAQAogY2xhc3MgVGVzdEZhaWxlZChFcnJvcik6CiAgICAgIiIiVGVzdCBmYWlsZWQuIiIiCiAKLWNsYXNzIFRlc3RTa2lwcGVkKEVycm9yKToKLSAgICAiIiJUZXN0IHNraXBwZWQuCi0KLSAgICBUaGlzIGNhbiBiZSByYWlzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHRlc3Qgd2FzIGRlbGliZXJhdGx5Ci0gICAgc2tpcHBlZCwgYnV0IG5vdCBiZWNhdXNlIGEgZmVhdHVyZSB3YXNuJ3QgYXZhaWxhYmxlLiAgRm9yCi0gICAgZXhhbXBsZSwgaWYgc29tZSByZXNvdXJjZSBjYW4ndCBiZSB1c2VkLCBzdWNoIGFzIHRoZSBuZXR3b3JrCi0gICAgYXBwZWFycyB0byBiZSB1bmF2YWlsYWJsZSwgdGhpcyBzaG91bGQgYmUgcmFpc2VkIGluc3RlYWQgb2YKLSAgICBUZXN0RmFpbGVkLgotICAgICIiIgotCi1jbGFzcyBSZXNvdXJjZURlbmllZChUZXN0U2tpcHBlZCk6CitjbGFzcyBSZXNvdXJjZURlbmllZCh1bml0dGVzdC5Ta2lwVGVzdCk6CiAgICAgIiIiVGVzdCBza2lwcGVkIGJlY2F1c2UgaXQgcmVxdWVzdGVkIGEgZGlzYWxsb3dlZCByZXNvdXJjZS4KIAogICAgIFRoaXMgaXMgcmFpc2VkIHdoZW4gYSB0ZXN0IGNhbGxzIHJlcXVpcmVzKCkgZm9yIGEgcmVzb3VyY2UgdGhhdAotICAgIGhhcyBub3QgYmUgZW5hYmxlZC4gIEl0IGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBleHBlY3RlZAorICAgIGhhcyBub3QgYmVlbiBlbmFibGVkLiAgSXQgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGV4cGVjdGVkCiAgICAgYW5kIHVuZXhwZWN0ZWQgc2tpcHMuCiAgICAgIiIiCiAKLWRlZiBpbXBvcnRfbW9kdWxlKG5hbWUsIGRlcHJlY2F0ZWQ9RmFsc2UpOgotICAgICIiIkltcG9ydCB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZCwgcmFpc2luZyBUZXN0U2tpcHBlZCBpZiBpdCBpcyBub3QKLSAgICBhdmFpbGFibGUuIiIiCi0gICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICBpZiBkZXByZWNhdGVkOgorQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBfaWdub3JlX2RlcHJlY2F0ZWRfaW1wb3J0cyhpZ25vcmU9VHJ1ZSk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHN1cHByZXNzIHBhY2thZ2UgYW5kIG1vZHVsZSBkZXByZWNhdGlvbgorICAgIHdhcm5pbmdzIHdoZW4gaW1wb3J0aW5nIHRoZW0uCisKKyAgICBJZiBpZ25vcmUgaXMgRmFsc2UsIHRoaXMgY29udGV4dCBtYW5hZ2VyIGhhcyBubyBlZmZlY3QuIiIiCisgICAgaWYgaWdub3JlOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4rIChtb2R1bGV8cGFja2FnZSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgeWllbGQKKyAgICBlbHNlOgorICAgICAgICB5aWVsZAorCisKK2RlZiBpbXBvcnRfbW9kdWxlKG5hbWUsIGRlcHJlY2F0ZWQ9RmFsc2UpOgorICAgICIiIkltcG9ydCBhbmQgcmV0dXJuIHRoZSBtb2R1bGUgdG8gYmUgdGVzdGVkLCByYWlzaW5nIFNraXBUZXN0IGlmCisgICAgaXQgaXMgbm90IGF2YWlsYWJsZS4KKworICAgIElmIGRlcHJlY2F0ZWQgaXMgVHJ1ZSwgYW55IG1vZHVsZSBvciBwYWNrYWdlIGRlcHJlY2F0aW9uIG1lc3NhZ2VzCisgICAgd2lsbCBiZSBzdXBwcmVzc2VkLiIiIgorICAgIHdpdGggX2lnbm9yZV9kZXByZWNhdGVkX2ltcG9ydHMoZGVwcmVjYXRlZCk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obmFtZSwgbGV2ZWw9MCkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQoIk5vIG1vZHVsZSBuYW1lZCAiICsgbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgICAgIHJldHVybiBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KHN0cihtc2cpKQorCisKK2RlZiBfc2F2ZV9hbmRfcmVtb3ZlX21vZHVsZShuYW1lLCBvcmlnX21vZHVsZXMpOgorICAgICIiIkhlbHBlciBmdW5jdGlvbiB0byBzYXZlIGFuZCByZW1vdmUgYSBtb2R1bGUgZnJvbSBzeXMubW9kdWxlcworCisgICAgICAgUmV0dXJuIHZhbHVlIGlzIFRydWUgaWYgdGhlIG1vZHVsZSB3YXMgaW4gc3lzLm1vZHVsZXMgYW5kCisgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgIHNhdmVkID0gVHJ1ZQorICAgIHRyeToKKyAgICAgICAgb3JpZ19tb2R1bGVzW25hbWVdID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHNhdmVkID0gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KKyAgICByZXR1cm4gc2F2ZWQKKworCitkZWYgX3NhdmVfYW5kX2Jsb2NrX21vZHVsZShuYW1lLCBvcmlnX21vZHVsZXMpOgorICAgICIiIkhlbHBlciBmdW5jdGlvbiB0byBzYXZlIGFuZCBibG9jayBhIG1vZHVsZSBpbiBzeXMubW9kdWxlcworCisgICAgICAgUmV0dXJuIHZhbHVlIGlzIFRydWUgaWYgdGhlIG1vZHVsZSB3YXMgaW4gc3lzLm1vZHVsZXMgYW5kCisgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgIHNhdmVkID0gVHJ1ZQorICAgIHRyeToKKyAgICAgICAgb3JpZ19tb2R1bGVzW25hbWVdID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHNhdmVkID0gRmFsc2UKKyAgICBzeXMubW9kdWxlc1tuYW1lXSA9IE5vbmUKKyAgICByZXR1cm4gc2F2ZWQKKworCitkZWYgaW1wb3J0X2ZyZXNoX21vZHVsZShuYW1lLCBmcmVzaD0oKSwgYmxvY2tlZD0oKSwgZGVwcmVjYXRlZD1GYWxzZSk6CisgICAgIiIiSW1wb3J0cyBhbmQgcmV0dXJucyBhIG1vZHVsZSwgZGVsaWJlcmF0ZWx5IGJ5cGFzc2luZyB0aGUgc3lzLm1vZHVsZXMgY2FjaGUKKyAgICBhbmQgaW1wb3J0aW5nIGEgZnJlc2ggY29weSBvZiB0aGUgbW9kdWxlLiBPbmNlIHRoZSBpbXBvcnQgaXMgY29tcGxldGUsCisgICAgdGhlIHN5cy5tb2R1bGVzIGNhY2hlIGlzIHJlc3RvcmVkIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS4KKworICAgIE1vZHVsZXMgbmFtZWQgaW4gZnJlc2ggYXJlIGFsc28gaW1wb3J0ZWQgYW5ldyBpZiBuZWVkZWQgYnkgdGhlIGltcG9ydC4KKworICAgIEltcG9ydGluZyBvZiBtb2R1bGVzIG5hbWVkIGluIGJsb2NrZWQgaXMgcHJldmVudGVkIHdoaWxlIHRoZSBmcmVzaCBpbXBvcnQKKyAgICB0YWtlcyBwbGFjZS4KKworICAgIElmIGRlcHJlY2F0ZWQgaXMgVHJ1ZSwgYW55IG1vZHVsZSBvciBwYWNrYWdlIGRlcHJlY2F0aW9uIG1lc3NhZ2VzCisgICAgd2lsbCBiZSBzdXBwcmVzc2VkLiIiIgorICAgICMgTk9URTogdGVzdF9oZWFwcSBhbmQgdGVzdF93YXJuaW5ncyBpbmNsdWRlIGV4dHJhIHNhbml0eSBjaGVja3MgdG8gbWFrZQorICAgICMgc3VyZSB0aGF0IHRoaXMgdXRpbGl0eSBmdW5jdGlvbiBpcyB3b3JraW5nIGFzIGV4cGVjdGVkCisgICAgd2l0aCBfaWdub3JlX2RlcHJlY2F0ZWRfaW1wb3J0cyhkZXByZWNhdGVkKToKKyAgICAgICAgIyBLZWVwIHRyYWNrIG9mIG1vZHVsZXMgc2F2ZWQgZm9yIGxhdGVyIHJlc3RvcmF0aW9uIGFzIHdlbGwKKyAgICAgICAgIyBhcyB0aG9zZSB3aGljaCBqdXN0IG5lZWQgYSBibG9ja2luZyBlbnRyeSByZW1vdmVkCisgICAgICAgIG9yaWdfbW9kdWxlcyA9IHt9CisgICAgICAgIG5hbWVzX3RvX3JlbW92ZSA9IFtdCisgICAgICAgIF9zYXZlX2FuZF9yZW1vdmVfbW9kdWxlKG5hbWUsIG9yaWdfbW9kdWxlcykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGZyZXNoX25hbWUgaW4gZnJlc2g6CisgICAgICAgICAgICAgICAgX3NhdmVfYW5kX3JlbW92ZV9tb2R1bGUoZnJlc2hfbmFtZSwgb3JpZ19tb2R1bGVzKQorICAgICAgICAgICAgZm9yIGJsb2NrZWRfbmFtZSBpbiBibG9ja2VkOgorICAgICAgICAgICAgICAgIGlmIG5vdCBfc2F2ZV9hbmRfYmxvY2tfbW9kdWxlKGJsb2NrZWRfbmFtZSwgb3JpZ19tb2R1bGVzKToKKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfdG9fcmVtb3ZlLmFwcGVuZChibG9ja2VkX25hbWUpCisgICAgICAgICAgICBmcmVzaF9tb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIG9yaWdfbmFtZSwgbW9kdWxlIGluIG9yaWdfbW9kdWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW29yaWdfbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIGZvciBuYW1lX3RvX3JlbW92ZSBpbiBuYW1lc190b19yZW1vdmU6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVfdG9fcmVtb3ZlXQorICAgICAgICByZXR1cm4gZnJlc2hfbW9kdWxlCisKKworZGVmIGdldF9hdHRyaWJ1dGUob2JqLCBuYW1lKToKKyAgICAiIiJHZXQgYW4gYXR0cmlidXRlLCByYWlzaW5nIFNraXBUZXN0IGlmIEF0dHJpYnV0ZUVycm9yIGlzIHJhaXNlZC4iIiIKKyAgICB0cnk6CisgICAgICAgIGF0dHJpYnV0ZSA9IGdldGF0dHIob2JqLCBuYW1lKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm1vZHVsZSAlcyBoYXMgbm8gYXR0cmlidXRlICVzIiAlICgKKyAgICAgICAgICAgIG9iai5fX25hbWVfXywgbmFtZSkpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZQorCiAKIHZlcmJvc2UgPSAxICAgICAgICAgICAgICAjIEZsYWcgc2V0IHRvIDAgYnkgcmVncnRlc3QucHkKIHVzZV9yZXNvdXJjZXMgPSBOb25lICAgICAjIEZsYWcgc2V0IHRvIFtdIGJ5IHJlZ3J0ZXN0LnB5CkBAIC0xMjQsNyArMjE1LDcgQEAKICAgICBwb3NzaWJpbGl0eSBvZiBGYWxzZSBiZWluZyByZXR1cm5lZCBvY2N1cnMgd2hlbiByZWdydGVzdC5weSBpcyBleGVjdXRpbmcuIiIiCiAgICAgIyBzZWUgaWYgdGhlIGNhbGxlcidzIG1vZHVsZSBpcyBfX21haW5fXyAtIGlmIHNvLCB0cmVhdCBhcyBpZgogICAgICMgdGhlIHJlc291cmNlIHdhcyBzZXQKLSAgICBpZiBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfZ2xvYmFscy5nZXQoIl9fbmFtZV9fIikgPT0gIl9fbWFpbl9fIjoKKyAgICBpZiBzeXMuX2dldGZyYW1lKDEpLmZfZ2xvYmFscy5nZXQoIl9fbmFtZV9fIikgPT0gIl9fbWFpbl9fIjoKICAgICAgICAgcmV0dXJuCiAgICAgaWYgbm90IGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpOgogICAgICAgICBpZiBtc2cgaXMgTm9uZToKQEAgLTI3MCw1NSArMzYxLDgzIEBACiAgICAgICAgICAgICAjIDIgbGF0aW4gY2hhcmFjdGVycy4KICAgICAgICAgICAgIFRFU1RGTl9VTklDT0RFID0gdW5pY29kZSgiQHRlc3QtXHhlMFx4ZjIiLCAibGF0aW4tMSIpCiAgICAgICAgIFRFU1RGTl9FTkNPRElORyA9IHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQotICAgICAgICAjIFRFU1RGTl9VTklDT0RFX1VORU5DT0RFQUJMRSBpcyBhIGZpbGVuYW1lIHRoYXQgc2hvdWxkICpub3QqIGJlCisgICAgICAgICMgVEVTVEZOX1VORU5DT0RBQkxFIGlzIGEgZmlsZW5hbWUgdGhhdCBzaG91bGQgKm5vdCogYmUKICAgICAgICAgIyBhYmxlIHRvIGJlIGVuY29kZWQgYnkgKmVpdGhlciogdGhlIGRlZmF1bHQgb3IgZmlsZXN5c3RlbSBlbmNvZGluZy4KICAgICAgICAgIyBUaGlzIHRlc3QgcmVhbGx5IG9ubHkgbWFrZXMgc2Vuc2Ugb24gV2luZG93cyBOVCBwbGF0Zm9ybXMKICAgICAgICAgIyB3aGljaCBoYXZlIHNwZWNpYWwgVW5pY29kZSBzdXBwb3J0IGluIHBvc2l4bW9kdWxlLgogICAgICAgICBpZiAobm90IGhhc2F0dHIoc3lzLCAiZ2V0d2luZG93c3ZlcnNpb24iKSBvcgogICAgICAgICAgICAgICAgIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzNdIDwgMik6ICMgIDA9d2luMzJzIG9yIDE9OXgvTUUKLSAgICAgICAgICAgIFRFU1RGTl9VTklDT0RFX1VORU5DT0RFQUJMRSA9IE5vbmUKKyAgICAgICAgICAgIFRFU1RGTl9VTkVOQ09EQUJMRSA9IE5vbmUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgSmFwYW5lc2UgY2hhcmFjdGVycyAoSSB0aGluayAtIGZyb20gYnVnIDg0NjEzMykKLSAgICAgICAgICAgIFRFU1RGTl9VTklDT0RFX1VORU5DT0RFQUJMRSA9IGV2YWwoJ3UiQHRlc3QtXHU1MTcxXHU2NzA5XHUzMDU1XHUzMDhjXHUzMDhiIicpCisgICAgICAgICAgICBURVNURk5fVU5FTkNPREFCTEUgPSBldmFsKCd1IkB0ZXN0LVx1NTE3MVx1NjcwOVx1MzA1NVx1MzA4Y1x1MzA4YiInKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgWFhYIC0gTm90ZSAtIHNob3VsZCBiZSB1c2luZyBURVNURk5fRU5DT0RJTkcgaGVyZSAtIGJ1dCBmb3IKICAgICAgICAgICAgICAgICAjIFdpbmRvd3MsICJtYmNzIiBjdXJyZW50bHkgYWx3YXlzIG9wZXJhdGVzIGFzIGlmIGluCiAgICAgICAgICAgICAgICAgIyBlcnJvcnM9aWdub3JlJyBtb2RlIC0gaGVuY2Ugd2UgZ2V0ICc/JyBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuCiAgICAgICAgICAgICAgICAgIyB0aGUgZXhjZXB0aW9uLiAgJ0xhdGluMScgb3BlcmF0ZXMgYXMgd2UgZXhwZWN0IC0gaWUsIGZhaWxzLgogICAgICAgICAgICAgICAgICMgU2VlIFsgODUwOTk3IF0gbWJjcyBlbmNvZGluZyBpZ25vcmVzIGVycm9ycwotICAgICAgICAgICAgICAgIFRFU1RGTl9VTklDT0RFX1VORU5DT0RFQUJMRS5lbmNvZGUoIkxhdGluMSIpCisgICAgICAgICAgICAgICAgVEVTVEZOX1VORU5DT0RBQkxFLmVuY29kZSgiTGF0aW4xIikKICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwcmludCBcCiAgICAgICAgICAgICAgICAgJ1dBUk5JTkc6IFRoZSBmaWxlbmFtZSAlciBDQU4gYmUgZW5jb2RlZCBieSB0aGUgZmlsZXN5c3RlbS4gICcgXAogICAgICAgICAgICAgICAgICdVbmljb2RlIGZpbGVuYW1lIHRlc3RzIG1heSBub3QgYmUgZWZmZWN0aXZlJyBcCi0gICAgICAgICAgICAgICAgJSBURVNURk5fVU5JQ09ERV9VTkVOQ09ERUFCTEUKKyAgICAgICAgICAgICAgICAlIFRFU1RGTl9VTkVOQ09EQUJMRQogCi0jIE1ha2Ugc3VyZSB3ZSBjYW4gd3JpdGUgdG8gVEVTVEZOLCB0cnkgaW4gL3RtcCBpZiB3ZSBjYW4ndAotZnAgPSBOb25lCi10cnk6Ci0gICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3crJykKLWV4Y2VwdCBJT0Vycm9yOgotICAgIFRNUF9URVNURk4gPSBvcy5wYXRoLmpvaW4oJy90bXAnLCBURVNURk4pCisKKyMgRGlzYW1iaWd1YXRlIFRFU1RGTiBmb3IgcGFyYWxsZWwgdGVzdGluZywgd2hpbGUgbGV0dGluZyBpdCByZW1haW4gYSB2YWxpZAorIyBtb2R1bGUgbmFtZS4KK1RFU1RGTiA9ICJ7fV97fV90bXAiLmZvcm1hdChURVNURk4sIG9zLmdldHBpZCgpKQorCisjIFNhdmUgdGhlIGluaXRpYWwgY3dkCitTQVZFRENXRCA9IG9zLmdldGN3ZCgpCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgdGVtcF9jd2QobmFtZT0ndGVtcGN3ZCcsIHF1aWV0PUZhbHNlKToKKyAgICAiIiIKKyAgICBDb250ZXh0IG1hbmFnZXIgdGhhdCBjcmVhdGVzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgc2V0IGl0IGFzIENXRC4KKworICAgIFRoZSBuZXcgQ1dEIGlzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBpdCdzIG5hbWVkICpuYW1lKi4KKyAgICBJZiAqcXVpZXQqIGlzIEZhbHNlIChkZWZhdWx0KSBhbmQgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yIGNoYW5nZQorICAgIHRoZSBDV0QsIGFuIGVycm9yIGlzIHJhaXNlZC4gIElmIGl0J3MgVHJ1ZSwgb25seSBhIHdhcm5pbmcgaXMgcmFpc2VkCisgICAgYW5kIHRoZSBvcmlnaW5hbCBDV0QgaXMgdXNlZC4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKG5hbWUsIHVuaWNvZGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lID0gbmFtZS5lbmNvZGUoc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpIG9yICdhc2NpaScpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3VuYWJsZSB0byBlbmNvZGUgdGhlIGN3ZCBuYW1lIHdpdGggJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgZmlsZXN5c3RlbSBlbmNvZGluZy4nKQorICAgIHNhdmVkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgaXNfdGVtcG9yYXJ5ID0gRmFsc2UKICAgICB0cnk6Ci0gICAgICAgIGZwID0gb3BlbihUTVBfVEVTVEZOLCAndysnKQotICAgICAgICBURVNURk4gPSBUTVBfVEVTVEZOCi0gICAgICAgIGRlbCBUTVBfVEVTVEZOCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgIHByaW50ICgnV0FSTklORzogdGVzdHMgd2lsbCBmYWlsLCB1bmFibGUgdG8gd3JpdGUgdG86ICVzIG9yICVzJyAlCi0gICAgICAgICAgICAgICAgKFRFU1RGTiwgVE1QX1RFU1RGTikpCi1pZiBmcCBpcyBub3QgTm9uZToKLSAgICBmcC5jbG9zZSgpCi0gICAgdW5saW5rKFRFU1RGTikKLWRlbCBmcAorICAgICAgICBvcy5ta2RpcihuYW1lKQorICAgICAgICBvcy5jaGRpcihuYW1lKQorICAgICAgICBpc190ZW1wb3JhcnkgPSBUcnVlCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ3Rlc3RzIG1heSBmYWlsLCB1bmFibGUgdG8gY2hhbmdlIHRoZSBDV0QgdG8gJyArIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcsIHN0YWNrbGV2ZWw9MykKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIG9zLmdldGN3ZCgpCisgICAgZmluYWxseToKKyAgICAgICAgb3MuY2hkaXIoc2F2ZWRfZGlyKQorICAgICAgICBpZiBpc190ZW1wb3Jhcnk6CisgICAgICAgICAgICBybXRyZWUobmFtZSkKIAotZGVmIGZpbmRmaWxlKGZpbGUsIGhlcmU9X19maWxlX18pOgorCitkZWYgZmluZGZpbGUoZmlsZSwgaGVyZT1fX2ZpbGVfXywgc3ViZGlyPU5vbmUpOgogICAgICIiIlRyeSB0byBmaW5kIGEgZmlsZSBvbiBzeXMucGF0aCBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiAgSWYgaXQgaXMgbm90CiAgICAgZm91bmQgdGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gaXMgcmV0dXJuZWQgKHRoaXMgZG9lcyBub3QKICAgICBuZWNlc3NhcmlseSBzaWduYWwgZmFpbHVyZTsgY291bGQgc3RpbGwgYmUgdGhlIGxlZ2l0aW1hdGUgcGF0aCkuIiIiCiAgICAgaWYgb3MucGF0aC5pc2FicyhmaWxlKToKICAgICAgICAgcmV0dXJuIGZpbGUKKyAgICBpZiBzdWJkaXIgaXMgbm90IE5vbmU6CisgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4oc3ViZGlyLCBmaWxlKQogICAgIHBhdGggPSBzeXMucGF0aAogICAgIHBhdGggPSBbb3MucGF0aC5kaXJuYW1lKGhlcmUpXSArIHBhdGgKICAgICBmb3IgZG4gaW4gcGF0aDoKQEAgLTMyNiwzMCArNDQ1LDYgQEAKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZm4pOiByZXR1cm4gZm4KICAgICByZXR1cm4gZmlsZQogCi1kZWYgdmVyaWZ5KGNvbmRpdGlvbiwgcmVhc29uPSd0ZXN0IGZhaWxlZCcpOgotICAgICIiIlZlcmlmeSB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLiBJZiBub3QsIHJhaXNlIFRlc3RGYWlsZWQuCi0KLSAgICAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgcmVhc29uIGNhbiBiZSBnaXZlbiB0byBwcm92aWRlCi0gICAgICAgYSBiZXR0ZXIgZXJyb3IgdGV4dC4KLSAgICAiIiIKLQotICAgIGlmIG5vdCBjb25kaXRpb246Ci0gICAgICAgIHJhaXNlIFRlc3RGYWlsZWQocmVhc29uKQotCi1kZWYgdmVyZXEoYSwgYik6Ci0gICAgIiIiUmFpc2UgVGVzdEZhaWxlZCBpZiBhID09IGIgaXMgZmFsc2UuCi0KLSAgICBUaGlzIGlzIGJldHRlciB0aGFuIHZlcmlmeShhID09IGIpIGJlY2F1c2UsIGluIGNhc2Ugb2YgZmFpbHVyZSwgdGhlCi0gICAgZXJyb3IgbWVzc2FnZSBpbmNvcnBvcmF0ZXMgcmVwcihhKSBhbmQgcmVwcihiKSBzbyB5b3UgY2FuIHNlZSB0aGUKLSAgICBpbnB1dHMuCi0KLSAgICBOb3RlIHRoYXQgIm5vdCAoYSA9PSBiKSIgaXNuJ3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgImEgIT0gYiI7IHRoZQotICAgIGZvcm1lciBpcyB0ZXN0ZWQuCi0gICAgIiIiCi0KLSAgICBpZiBub3QgKGEgPT0gYik6Ci0gICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoIiVyID09ICVyIiAlIChhLCBiKSkKLQogZGVmIHNvcnRkaWN0KGRpY3QpOgogICAgICJMaWtlIHJlcHIoZGljdCksIGJ1dCBpbiBzb3J0ZWQgb3JkZXIuIgogICAgIGl0ZW1zID0gZGljdC5pdGVtcygpCkBAIC0zNzEsMzUgKzQ2Niw0OSBAQAogICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiBkZWYgY2hlY2tfc3ludGF4X2Vycm9yKHRlc3RjYXNlLCBzdGF0ZW1lbnQpOgotICAgIHRyeToKLSAgICAgICAgY29tcGlsZShzdGF0ZW1lbnQsICc8dGVzdCBzdHJpbmc+JywgJ2V4ZWMnKQotICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHRlc3RjYXNlLmZhaWwoJ01pc3NpbmcgU3ludGF4RXJyb3I6ICIlcyInICUgc3RhdGVtZW50KQorICAgIHRlc3RjYXNlLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgc3RhdGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRlc3Qgc3RyaW5nPicsICdleGVjJykKIAotZGVmIG9wZW5fdXJscmVzb3VyY2UodXJsKToKK2RlZiBvcGVuX3VybHJlc291cmNlKHVybCwgY2hlY2s9Tm9uZSk6CiAgICAgaW1wb3J0IHVybHBhcnNlLCB1cmxsaWIyCiAKLSAgICByZXF1aXJlcygndXJsZmV0Y2gnKQogICAgIGZpbGVuYW1lID0gdXJscGFyc2UudXJscGFyc2UodXJsKVsyXS5zcGxpdCgnLycpWy0xXSAjICcvJzogaXQncyBVUkwhCiAKLSAgICBmb3IgcGF0aCBpbiBbb3MucGF0aC5jdXJkaXIsIG9zLnBhdGgucGFyZGlyXToKLSAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKToKLSAgICAgICAgICAgIHJldHVybiBvcGVuKGZuKQorICAgIGZuID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJkYXRhIiwgZmlsZW5hbWUpCisKKyAgICBkZWYgY2hlY2tfdmFsaWRfZmlsZShmbik6CisgICAgICAgIGYgPSBvcGVuKGZuKQorICAgICAgICBpZiBjaGVjayBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZWxpZiBjaGVjayhmKToKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbik6CisgICAgICAgIGYgPSBjaGVja192YWxpZF9maWxlKGZuKQorICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgdW5saW5rKGZuKQorCisgICAgIyBWZXJpZnkgdGhlIHJlcXVpcmVtZW50IGJlZm9yZSBkb3dubG9hZGluZyB0aGUgZmlsZQorICAgIHJlcXVpcmVzKCd1cmxmZXRjaCcpCiAKICAgICBwcmludCA+PiBnZXRfb3JpZ2luYWxfc3Rkb3V0KCksICdcdGZldGNoaW5nICVzIC4uLicgJSB1cmwKICAgICBmID0gdXJsbGliMi51cmxvcGVuKHVybCwgdGltZW91dD0xNSkKICAgICB0cnk6Ci0gICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgb3V0OgorICAgICAgICB3aXRoIG9wZW4oZm4sICJ3YiIpIGFzIG91dDoKICAgICAgICAgICAgIHMgPSBmLnJlYWQoKQogICAgICAgICAgICAgd2hpbGUgczoKICAgICAgICAgICAgICAgICBvdXQud3JpdGUocykKICAgICAgICAgICAgICAgICBzID0gZi5yZWFkKCkKICAgICBmaW5hbGx5OgogICAgICAgICBmLmNsb3NlKCkKLSAgICByZXR1cm4gb3BlbihmaWxlbmFtZSkKKworICAgIGYgPSBjaGVja192YWxpZF9maWxlKGZuKQorICAgIGlmIGYgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBmCisgICAgcmFpc2UgVGVzdEZhaWxlZCgnaW52YWxpZCByZXNvdXJjZSAiJXMiJyAlIGZuKQogCiAKIGNsYXNzIFdhcm5pbmdzUmVjb3JkZXIob2JqZWN0KToKQEAgLTQ4OSw3ICs1OTgsNyBAQAogCiAKIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi1kZWYgX2NoZWNrX3B5M2tfd2FybmluZ3MoKmZpbHRlcnMsICoqa3dhcmdzKToKK2RlZiBjaGVja19weTNrX3dhcm5pbmdzKCpmaWx0ZXJzLCAqKmt3YXJncyk6CiAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHNpbGVuY2UgcHkzayB3YXJuaW5ncy4KIAogICAgIEFjY2VwdCAyLXR1cGxlcyBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50czoKQEAgLTUwMCw3ICs2MDksNyBAQAogICAgICAgICAoZGVmYXVsdCBGYWxzZSkKIAogICAgIFdpdGhvdXQgYXJndW1lbnQsIGl0IGRlZmF1bHRzIHRvOgotICAgICAgICBfY2hlY2tfcHkza193YXJuaW5ncygoIiIsIERlcHJlY2F0aW9uV2FybmluZyksIHF1aWV0PUZhbHNlKQorICAgICAgICBjaGVja19weTNrX3dhcm5pbmdzKCgiIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwgcXVpZXQ9RmFsc2UpCiAgICAgIiIiCiAgICAgaWYgc3lzLnB5M2t3YXJuaW5nOgogICAgICAgICBpZiBub3QgZmlsdGVyczoKQEAgLTUyMCw3ICs2MjksNyBAQAogICAgIFVzZSBsaWtlIHRoaXM6CiAKICAgICAgICAgd2l0aCBDbGVhbkltcG9ydCgiZm9vIik6Ci0gICAgICAgICAgICBfX2ltcG9ydF9fKCJmb28iKSAjIG5ldyByZWZlcmVuY2UKKyAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCJmb28iKSAjIG5ldyByZWZlcmVuY2UKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbW9kdWxlX25hbWVzKToKQEAgLTU0MywyNiArNjUyLDM5IEBACiAgICAgICAgIHN5cy5tb2R1bGVzLnVwZGF0ZShzZWxmLm9yaWdpbmFsX21vZHVsZXMpCiAKIAotY2xhc3MgRW52aXJvbm1lbnRWYXJHdWFyZChvYmplY3QpOgorY2xhc3MgRW52aXJvbm1lbnRWYXJHdWFyZChVc2VyRGljdC5EaWN0TWl4aW4pOgogCiAgICAgIiIiQ2xhc3MgdG8gaGVscCBwcm90ZWN0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBwcm9wZXJseS4gIENhbiBiZSB1c2VkIGFzCiAgICAgYSBjb250ZXh0IG1hbmFnZXIuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2Vudmlyb24gPSBvcy5lbnZpcm9uCiAgICAgICAgIHNlbGYuX2NoYW5nZWQgPSB7fQogCi0gICAgZGVmIHNldChzZWxmLCBlbnZ2YXIsIHZhbHVlKToKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgZW52dmFyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Vudmlyb25bZW52dmFyXQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGVudnZhciwgdmFsdWUpOgogICAgICAgICAjIFJlbWVtYmVyIHRoZSBpbml0aWFsIHZhbHVlIG9uIHRoZSBmaXJzdCBhY2Nlc3MKICAgICAgICAgaWYgZW52dmFyIG5vdCBpbiBzZWxmLl9jaGFuZ2VkOgotICAgICAgICAgICAgc2VsZi5fY2hhbmdlZFtlbnZ2YXJdID0gb3MuZW52aXJvbi5nZXQoZW52dmFyKQotICAgICAgICBvcy5lbnZpcm9uW2VudnZhcl0gPSB2YWx1ZQorICAgICAgICAgICAgc2VsZi5fY2hhbmdlZFtlbnZ2YXJdID0gc2VsZi5fZW52aXJvbi5nZXQoZW52dmFyKQorICAgICAgICBzZWxmLl9lbnZpcm9uW2VudnZhcl0gPSB2YWx1ZQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGVudnZhcik6CisgICAgICAgICMgUmVtZW1iZXIgdGhlIGluaXRpYWwgdmFsdWUgb24gdGhlIGZpcnN0IGFjY2VzcworICAgICAgICBpZiBlbnZ2YXIgbm90IGluIHNlbGYuX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLl9jaGFuZ2VkW2VudnZhcl0gPSBzZWxmLl9lbnZpcm9uLmdldChlbnZ2YXIpCisgICAgICAgIGlmIGVudnZhciBpbiBzZWxmLl9lbnZpcm9uOgorICAgICAgICAgICAgZGVsIHNlbGYuX2Vudmlyb25bZW52dmFyXQorCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9lbnZpcm9uLmtleXMoKQorCisgICAgZGVmIHNldChzZWxmLCBlbnZ2YXIsIHZhbHVlKToKKyAgICAgICAgc2VsZltlbnZ2YXJdID0gdmFsdWUKIAogICAgIGRlZiB1bnNldChzZWxmLCBlbnZ2YXIpOgotICAgICAgICAjIFJlbWVtYmVyIHRoZSBpbml0aWFsIHZhbHVlIG9uIHRoZSBmaXJzdCBhY2Nlc3MKLSAgICAgICAgaWYgZW52dmFyIG5vdCBpbiBzZWxmLl9jaGFuZ2VkOgotICAgICAgICAgICAgc2VsZi5fY2hhbmdlZFtlbnZ2YXJdID0gb3MuZW52aXJvbi5nZXQoZW52dmFyKQotICAgICAgICBpZiBlbnZ2YXIgaW4gb3MuZW52aXJvbjoKLSAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uW2VudnZhcl0KKyAgICAgICAgZGVsIHNlbGZbZW52dmFyXQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKQEAgLTU3MCwxMCArNjkyLDM2IEBACiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICppZ25vcmVfZXhjKToKICAgICAgICAgZm9yIChrLCB2KSBpbiBzZWxmLl9jaGFuZ2VkLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiB2IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgaWYgayBpbiBvcy5lbnZpcm9uOgotICAgICAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJvbltrXQorICAgICAgICAgICAgICAgIGlmIGsgaW4gc2VsZi5fZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2Vudmlyb25ba10KICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3MuZW52aXJvbltrXSA9IHYKKyAgICAgICAgICAgICAgICBzZWxmLl9lbnZpcm9uW2tdID0gdgorICAgICAgICBvcy5lbnZpcm9uID0gc2VsZi5fZW52aXJvbgorCisKK2NsYXNzIERpcnNPblN5c1BhdGgob2JqZWN0KToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gdGVtcG9yYXJpbHkgYWRkIGRpcmVjdG9yaWVzIHRvIHN5cy5wYXRoLgorCisgICAgVGhpcyBtYWtlcyBhIGNvcHkgb2Ygc3lzLnBhdGgsIGFwcGVuZHMgYW55IGRpcmVjdG9yaWVzIGdpdmVuCisgICAgYXMgcG9zaXRpb25hbCBhcmd1bWVudHMsIHRoZW4gcmV2ZXJ0cyBzeXMucGF0aCB0byB0aGUgY29waWVkCisgICAgc2V0dGluZ3Mgd2hlbiB0aGUgY29udGV4dCBlbmRzLgorCisgICAgTm90ZSB0aGF0ICphbGwqIHN5cy5wYXRoIG1vZGlmaWNhdGlvbnMgaW4gdGhlIGJvZHkgb2YgdGhlCisgICAgY29udGV4dCBtYW5hZ2VyLCBpbmNsdWRpbmcgcmVwbGFjZW1lbnQgb2YgdGhlIG9iamVjdCwKKyAgICB3aWxsIGJlIHJldmVydGVkIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICpwYXRocyk6CisgICAgICAgIHNlbGYub3JpZ2luYWxfdmFsdWUgPSBzeXMucGF0aFs6XQorICAgICAgICBzZWxmLm9yaWdpbmFsX29iamVjdCA9IHN5cy5wYXRoCisgICAgICAgIHN5cy5wYXRoLmV4dGVuZChwYXRocykKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmlnbm9yZV9leGMpOgorICAgICAgICBzeXMucGF0aCA9IHNlbGYub3JpZ2luYWxfb2JqZWN0CisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5vcmlnaW5hbF92YWx1ZQogCiAKIGNsYXNzIFRyYW5zaWVudFJlc291cmNlKG9iamVjdCk6CkBAIC02MDIsMTMgKzc1MCw2NSBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFJlc291cmNlRGVuaWVkKCJhbiBvcHRpb25hbCByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlIikKIAogCi1kZWYgdHJhbnNpZW50X2ludGVybmV0KCk6CitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHRyYW5zaWVudF9pbnRlcm5ldChyZXNvdXJjZV9uYW1lLCB0aW1lb3V0PTMwLjAsIGVycm5vcz0oKSk6CiAgICAgIiIiUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgcmFpc2VzIFJlc291cmNlRGVuaWVkIHdoZW4gdmFyaW91cyBpc3N1ZXMKICAgICB3aXRoIHRoZSBJbnRlcm5ldCBjb25uZWN0aW9uIG1hbmlmZXN0IHRoZW1zZWx2ZXMgYXMgZXhjZXB0aW9ucy4iIiIKLSAgICB0aW1lX291dCA9IFRyYW5zaWVudFJlc291cmNlKElPRXJyb3IsIGVycm5vPWVycm5vLkVUSU1FRE9VVCkKLSAgICBzb2NrZXRfcGVlcl9yZXNldCA9IFRyYW5zaWVudFJlc291cmNlKHNvY2tldC5lcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKLSAgICBpb2Vycm9yX3BlZXJfcmVzZXQgPSBUcmFuc2llbnRSZXNvdXJjZShJT0Vycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQotICAgIHJldHVybiBjb250ZXh0bGliLm5lc3RlZCh0aW1lX291dCwgc29ja2V0X3BlZXJfcmVzZXQsIGlvZXJyb3JfcGVlcl9yZXNldCkKKyAgICBkZWZhdWx0X2Vycm5vcyA9IFsKKyAgICAgICAgKCdFQ09OTlJFRlVTRUQnLCAxMTEpLAorICAgICAgICAoJ0VDT05OUkVTRVQnLCAxMDQpLAorICAgICAgICAoJ0VIT1NUVU5SRUFDSCcsIDExMyksCisgICAgICAgICgnRU5FVFVOUkVBQ0gnLCAxMDEpLAorICAgICAgICAoJ0VUSU1FRE9VVCcsIDExMCksCisgICAgXQorICAgIGRlZmF1bHRfZ2FpX2Vycm5vcyA9IFsKKyAgICAgICAgKCdFQUlfTk9OQU1FJywgLTIpLAorICAgICAgICAoJ0VBSV9OT0RBVEEnLCAtNSksCisgICAgXQorCisgICAgZGVuaWVkID0gUmVzb3VyY2VEZW5pZWQoIlJlc291cmNlICclcycgaXMgbm90IGF2YWlsYWJsZSIgJSByZXNvdXJjZV9uYW1lKQorICAgIGNhcHR1cmVkX2Vycm5vcyA9IGVycm5vcworICAgIGdhaV9lcnJub3MgPSBbXQorICAgIGlmIG5vdCBjYXB0dXJlZF9lcnJub3M6CisgICAgICAgIGNhcHR1cmVkX2Vycm5vcyA9IFtnZXRhdHRyKGVycm5vLCBuYW1lLCBudW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG5hbWUsIG51bSkgaW4gZGVmYXVsdF9lcnJub3NdCisgICAgICAgIGdhaV9lcnJub3MgPSBbZ2V0YXR0cihzb2NrZXQsIG5hbWUsIG51bSkKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKG5hbWUsIG51bSkgaW4gZGVmYXVsdF9nYWlfZXJybm9zXQorCisgICAgZGVmIGZpbHRlcl9lcnJvcihlcnIpOgorICAgICAgICBuID0gZ2V0YXR0cihlcnIsICdlcnJubycsIE5vbmUpCisgICAgICAgIGlmIChpc2luc3RhbmNlKGVyciwgc29ja2V0LnRpbWVvdXQpIG9yCisgICAgICAgICAgICAoaXNpbnN0YW5jZShlcnIsIHNvY2tldC5nYWllcnJvcikgYW5kIG4gaW4gZ2FpX2Vycm5vcykgb3IKKyAgICAgICAgICAgIG4gaW4gY2FwdHVyZWRfZXJybm9zKToKKyAgICAgICAgICAgIGlmIG5vdCB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZGVuaWVkLmFyZ3NbMF0gKyAiXG4iKQorICAgICAgICAgICAgcmFpc2UgZGVuaWVkCisKKyAgICBvbGRfdGltZW91dCA9IHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpCisgICAgdHJ5OgorICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KHRpbWVvdXQpCisgICAgICAgIHlpZWxkCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAjIHVybGxpYiBjYW4gd3JhcCBvcmlnaW5hbCBzb2NrZXQgZXJyb3JzIG11bHRpcGxlIHRpbWVzICghKSwgd2UgbXVzdAorICAgICAgICAjIHVud3JhcCB0byBnZXQgYXQgdGhlIG9yaWdpbmFsIGVycm9yLgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYSA9IGVyci5hcmdzCisgICAgICAgICAgICBpZiBsZW4oYSkgPj0gMSBhbmQgaXNpbnN0YW5jZShhWzBdLCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBlcnIgPSBhWzBdCisgICAgICAgICAgICAjIFRoZSBlcnJvciBjYW4gYWxzbyBiZSB3cmFwcGVkIGFzIGFyZ3NbMV06CisgICAgICAgICAgICAjICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgIyAgICAgICAgcmFpc2UgSU9FcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKKyAgICAgICAgICAgIGVsaWYgbGVuKGEpID49IDIgYW5kIGlzaW5zdGFuY2UoYVsxXSwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgZXJyID0gYVsxXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmaWx0ZXJfZXJyb3IoZXJyKQorICAgICAgICByYWlzZQorICAgICMgWFhYIHNob3VsZCB3ZSBjYXRjaCBnZW5lcmljIGV4Y2VwdGlvbnMgYW5kIGxvb2sgZm9yIHRoZWlyCisgICAgIyBfX2NhdXNlX18gb3IgX19jb250ZXh0X18/CisgICAgZmluYWxseToKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KG9sZF90aW1lb3V0KQogCiAKIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCkBAIC02MzIsNiArODMyLDI1IEBACiBkZWYgY2FwdHVyZWRfc3Rkb3V0KCk6CiAgICAgcmV0dXJuIGNhcHR1cmVkX291dHB1dCgic3Rkb3V0IikKIAorZGVmIGNhcHR1cmVkX3N0ZGluKCk6CisgICAgcmV0dXJuIGNhcHR1cmVkX291dHB1dCgic3RkaW4iKQorCitkZWYgZ2NfY29sbGVjdCgpOgorICAgICIiIkZvcmNlIGFzIG1hbnkgb2JqZWN0cyBhcyBwb3NzaWJsZSB0byBiZSBjb2xsZWN0ZWQuCisKKyAgICBJbiBub24tQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbnMgb2YgUHl0aG9uLCB0aGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRpbWVseQorICAgIGRlYWxsb2NhdGlvbiBpcyBub3QgZ3VhcmFudGVlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuICAoRXZlbiBpbiBDUHl0aG9uCisgICAgdGhpcyBjYW4gYmUgdGhlIGNhc2UgaW4gY2FzZSBvZiByZWZlcmVuY2UgY3ljbGVzLikgIFRoaXMgbWVhbnMgdGhhdCBfX2RlbF9fCisgICAgbWV0aG9kcyBtYXkgYmUgY2FsbGVkIGxhdGVyIHRoYW4gZXhwZWN0ZWQgYW5kIHdlYWtyZWZzIG1heSByZW1haW4gYWxpdmUgZm9yCisgICAgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuICBUaGlzIGZ1bmN0aW9uIHRyaWVzIGl0cyBiZXN0IHRvIGZvcmNlIGFsbCBnYXJiYWdlCisgICAgb2JqZWN0cyB0byBkaXNhcHBlYXIuCisgICAgIiIiCisgICAgZ2MuY29sbGVjdCgpCisgICAgaWYgaXNfanl0aG9uOgorICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICBnYy5jb2xsZWN0KCkKKyAgICBnYy5jb2xsZWN0KCkKKwogCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgRGVjb3JhdG9yIGZvciBydW5uaW5nIGEgZnVuY3Rpb24gaW4gYSBkaWZmZXJlbnQgbG9jYWxlLCBjb3JyZWN0bHkgcmVzZXR0aW5nCkBAIC03MjMsNyArOTQyLDcgQEAKICAgICAgICAgICAgICAgICAjIHRvIG1ha2Ugc3VyZSB0aGV5IHdvcmsuIFdlIHN0aWxsIHdhbnQgdG8gYXZvaWQgdXNpbmcKICAgICAgICAgICAgICAgICAjIHRvbyBtdWNoIG1lbW9yeSwgdGhvdWdoLCBidXQgd2UgZG8gdGhhdCBub2lzaWx5LgogICAgICAgICAgICAgICAgIG1heHNpemUgPSA1MTQ3Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYobWF4c2l6ZSAqIG1lbXVzZSArIG92ZXJoZWFkID4gMjAgKiBfMU0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXhzaXplICogbWVtdXNlICsgb3ZlcmhlYWQgPiAyMCAqIF8xTSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbWF4c2l6ZSA9IGludCgobWF4X21lbXVzZSAtIG92ZXJoZWFkKSAvIG1lbXVzZSkKICAgICAgICAgICAgICAgICBpZiBtYXhzaXplIDwgbWluc2l6ZToKQEAgLTc4Miw2ICsxMDAxLDU1IEBACiAgICAgICAgIHRlc3QocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKK2RlZiBfaWQob2JqKToKKyAgICByZXR1cm4gb2JqCisKK2RlZiByZXF1aXJlc19yZXNvdXJjZShyZXNvdXJjZSk6CisgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZChyZXNvdXJjZSk6CisgICAgICAgIHJldHVybiBfaWQKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gdW5pdHRlc3Quc2tpcCgicmVzb3VyY2UgezAhcn0gaXMgbm90IGVuYWJsZWQiLmZvcm1hdChyZXNvdXJjZSkpCisKK2RlZiBjcHl0aG9uX29ubHkodGVzdCk6CisgICAgIiIiCisgICAgRGVjb3JhdG9yIGZvciB0ZXN0cyBvbmx5IGFwcGxpY2FibGUgb24gQ1B5dGhvbi4KKyAgICAiIiIKKyAgICByZXR1cm4gaW1wbF9kZXRhaWwoY3B5dGhvbj1UcnVlKSh0ZXN0KQorCitkZWYgaW1wbF9kZXRhaWwobXNnPU5vbmUsICoqZ3VhcmRzKToKKyAgICBpZiBjaGVja19pbXBsX2RldGFpbCgqKmd1YXJkcyk6CisgICAgICAgIHJldHVybiBfaWQKKyAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgZ3VhcmRuYW1lcywgZGVmYXVsdCA9IF9wYXJzZV9ndWFyZHMoZ3VhcmRzKQorICAgICAgICBpZiBkZWZhdWx0OgorICAgICAgICAgICAgbXNnID0gImltcGxlbWVudGF0aW9uIGRldGFpbCBub3QgYXZhaWxhYmxlIG9uIHswfSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9ICJpbXBsZW1lbnRhdGlvbiBkZXRhaWwgc3BlY2lmaWMgdG8gezB9IgorICAgICAgICBndWFyZG5hbWVzID0gc29ydGVkKGd1YXJkbmFtZXMua2V5cygpKQorICAgICAgICBtc2cgPSBtc2cuZm9ybWF0KCcgb3IgJy5qb2luKGd1YXJkbmFtZXMpKQorICAgIHJldHVybiB1bml0dGVzdC5za2lwKG1zZykKKworZGVmIF9wYXJzZV9ndWFyZHMoZ3VhcmRzKToKKyAgICAjIFJldHVybnMgYSB0dXBsZSAoe3BsYXRmb3JtX25hbWU6IHJ1bl9tZX0sIGRlZmF1bHRfdmFsdWUpCisgICAgaWYgbm90IGd1YXJkczoKKyAgICAgICAgcmV0dXJuICh7J2NweXRob24nOiBUcnVlfSwgRmFsc2UpCisgICAgaXNfdHJ1ZSA9IGd1YXJkcy52YWx1ZXMoKVswXQorICAgIGFzc2VydCBndWFyZHMudmFsdWVzKCkgPT0gW2lzX3RydWVdICogbGVuKGd1YXJkcykgICAjIGFsbCBUcnVlIG9yIGFsbCBGYWxzZQorICAgIHJldHVybiAoZ3VhcmRzLCBub3QgaXNfdHJ1ZSkKKworIyBVc2UgdGhlIGZvbGxvd2luZyBjaGVjayB0byBndWFyZCBDUHl0aG9uJ3MgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgdGVzdHMgLS0KKyMgb3IgdG8gcnVuIHRoZW0gb25seSBvbiB0aGUgaW1wbGVtZW50YXRpb24ocykgZ3VhcmRlZCBieSB0aGUgYXJndW1lbnRzLgorZGVmIGNoZWNrX2ltcGxfZGV0YWlsKCoqZ3VhcmRzKToKKyAgICAiIiJUaGlzIGZ1bmN0aW9uIHJldHVybnMgVHJ1ZSBvciBGYWxzZSBkZXBlbmRpbmcgb24gdGhlIGhvc3QgcGxhdGZvcm0uCisgICAgICAgRXhhbXBsZXM6CisgICAgICAgICAgaWYgY2hlY2tfaW1wbF9kZXRhaWwoKTogICAgICAgICAgICAgICAjIG9ubHkgb24gQ1B5dGhvbiAoZGVmYXVsdCkKKyAgICAgICAgICBpZiBjaGVja19pbXBsX2RldGFpbChqeXRob249VHJ1ZSk6ICAgICMgb25seSBvbiBKeXRob24KKyAgICAgICAgICBpZiBjaGVja19pbXBsX2RldGFpbChjcHl0aG9uPUZhbHNlKTogICMgZXZlcnl3aGVyZSBleGNlcHQgb24gQ1B5dGhvbgorICAgICIiIgorICAgIGd1YXJkcywgZGVmYXVsdCA9IF9wYXJzZV9ndWFyZHMoZ3VhcmRzKQorICAgIHJldHVybiBndWFyZHMuZ2V0KHBsYXRmb3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLmxvd2VyKCksIGRlZmF1bHQpCisKKwogCiBkZWYgX3J1bl9zdWl0ZShzdWl0ZSk6CiAgICAgIiIiUnVuIHRlc3RzIGZyb20gYSB1bml0dGVzdC5UZXN0U3VpdGUtZGVyaXZlZCBjbGFzcy4iIiIKQEAgLTg1NSwyNCArMTEyMyw0OCBAQAogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIFRocmVhZGluZyBzdXBwb3J0IHRvIHByZXZlbnQgcmVwb3J0aW5nIHJlZmxlYWtzIHdoZW4gcnVubmluZyByZWdydGVzdC5weSAtUgogCi1kZWYgdGhyZWFkaW5nX3NldHVwKCk6Ci0gICAgaW1wb3J0IHRocmVhZGluZwotICAgIHJldHVybiBsZW4odGhyZWFkaW5nLl9hY3RpdmUpLCBsZW4odGhyZWFkaW5nLl9saW1ibykKKyMgTk9URTogd2UgdXNlIHRocmVhZC5fY291bnQoKSByYXRoZXIgdGhhbiB0aHJlYWRpbmcuZW51bWVyYXRlKCkgKG9yIHRoZQorIyBtb3JhbCBlcXVpdmFsZW50IHRoZXJlb2YpIGJlY2F1c2UgYSB0aHJlYWRpbmcuVGhyZWFkIG9iamVjdCBpcyBzdGlsbCBhbGl2ZQorIyB1bnRpbCBpdHMgX19ib290c3RyYXAoKSBtZXRob2QgaGFzIHJldHVybmVkLCBldmVuIGFmdGVyIGl0IGhhcyBiZWVuCisjIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSB0aHJlYWRpbmcgbW9kdWxlLgorIyB0aHJlYWQuX2NvdW50KCksIG9uIHRoZSBvdGhlciBoYW5kLCBvbmx5IGdldHMgZGVjcmVtZW50ZWQgKmFmdGVyKiB0aGUKKyMgX19ib290c3RyYXAoKSBtZXRob2QgaGFzIHJldHVybmVkLCB3aGljaCBnaXZlcyB1cyByZWxpYWJsZSByZWZlcmVuY2UgY291bnRzCisjIGF0IHRoZSBlbmQgb2YgYSB0ZXN0IHJ1bi4KIAotZGVmIHRocmVhZGluZ19jbGVhbnVwKG51bV9hY3RpdmUsIG51bV9saW1ibyk6Ci0gICAgaW1wb3J0IHRocmVhZGluZwotICAgIGltcG9ydCB0aW1lCitkZWYgdGhyZWFkaW5nX3NldHVwKCk6CisgICAgaWYgdGhyZWFkOgorICAgICAgICByZXR1cm4gdGhyZWFkLl9jb3VudCgpLAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAxLAorCitkZWYgdGhyZWFkaW5nX2NsZWFudXAobmJfdGhyZWFkcyk6CisgICAgaWYgbm90IHRocmVhZDoKKyAgICAgICAgcmV0dXJuCiAKICAgICBfTUFYX0NPVU5UID0gMTAKLSAgICBjb3VudCA9IDAKLSAgICB3aGlsZSBsZW4odGhyZWFkaW5nLl9hY3RpdmUpICE9IG51bV9hY3RpdmUgYW5kIGNvdW50IDwgX01BWF9DT1VOVDoKLSAgICAgICAgY291bnQgKz0gMQorICAgIGZvciBjb3VudCBpbiByYW5nZShfTUFYX0NPVU5UKToKKyAgICAgICAgbiA9IHRocmVhZC5fY291bnQoKQorICAgICAgICBpZiBuID09IG5iX3RocmVhZHM6CisgICAgICAgICAgICBicmVhawogICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAjIFhYWCBwcmludCBhIHdhcm5pbmcgaW4gY2FzZSBvZiBmYWlsdXJlPwogCi0gICAgY291bnQgPSAwCi0gICAgd2hpbGUgbGVuKHRocmVhZGluZy5fbGltYm8pICE9IG51bV9saW1ibyBhbmQgY291bnQgPCBfTUFYX0NPVU5UOgotICAgICAgICBjb3VudCArPSAxCi0gICAgICAgIHRpbWUuc2xlZXAoMC4xKQorZGVmIHJlYXBfdGhyZWFkcyhmdW5jKToKKyAgICAiIiJVc2UgdGhpcyBmdW5jdGlvbiB3aGVuIHRocmVhZHMgYXJlIGJlaW5nIHVzZWQuICBUaGlzIHdpbGwKKyAgICBlbnN1cmUgdGhhdCB0aGUgdGhyZWFkcyBhcmUgY2xlYW5lZCB1cCBldmVuIHdoZW4gdGhlIHRlc3QgZmFpbHMuCisgICAgSWYgdGhyZWFkaW5nIGlzIHVuYXZhaWxhYmxlIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorICAgICIiIgorICAgIGlmIG5vdCB0aHJlYWQ6CisgICAgICAgIHJldHVybiBmdW5jCisKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgZGVmIGRlY29yYXRvcigqYXJncyk6CisgICAgICAgIGtleSA9IHRocmVhZGluZ19zZXR1cCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGhyZWFkaW5nX2NsZWFudXAoKmtleSkKKyAgICByZXR1cm4gZGVjb3JhdG9yCiAKIGRlZiByZWFwX2NoaWxkcmVuKCk6CiAgICAgIiIiVXNlIHRoaXMgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiB0ZXN0X21haW4oKSB3aGVuZXZlciBzdWItcHJvY2Vzc2VzCkBAIC04OTMsMyArMTE4NSw0OCBAQAogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIGJyZWFrCisKK2RlZiBweTNrX2J5dGVzKGIpOgorICAgICIiIkVtdWxhdGUgdGhlIHB5M2sgYnl0ZXMoKSBjb25zdHJ1Y3Rvci4KKworICAgIE5PVEU6IFRoaXMgaXMgb25seSBhIGJlc3QgZWZmb3J0IGZ1bmN0aW9uLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgIyBtZW1vcnl2aWV3PworICAgICAgICByZXR1cm4gYi50b2J5dGVzKCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgaXRlcmFibGUgb2YgaW50cz8KKyAgICAgICAgICAgIHJldHVybiBiIiIuam9pbihjaHIoeCkgZm9yIHggaW4gYikKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBieXRlcyhiKQorCitkZWYgYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCk6CisgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHJlcHJvZHVjaW5nIHRoZSBjdXJyZW50CisgICAgc2V0dGluZ3MgaW4gc3lzLmZsYWdzLiIiIgorICAgIGZsYWdfb3B0X21hcCA9IHsKKyAgICAgICAgJ2J5dGVzX3dhcm5pbmcnOiAnYicsCisgICAgICAgICdkb250X3dyaXRlX2J5dGVjb2RlJzogJ0InLAorICAgICAgICAnaWdub3JlX2Vudmlyb25tZW50JzogJ0UnLAorICAgICAgICAnbm9fdXNlcl9zaXRlJzogJ3MnLAorICAgICAgICAnbm9fc2l0ZSc6ICdTJywKKyAgICAgICAgJ29wdGltaXplJzogJ08nLAorICAgICAgICAncHkza193YXJuaW5nJzogJzMnLAorICAgICAgICAndmVyYm9zZSc6ICd2JywKKyAgICB9CisgICAgYXJncyA9IFtdCisgICAgZm9yIGZsYWcsIG9wdCBpbiBmbGFnX29wdF9tYXAuaXRlbXMoKToKKyAgICAgICAgdiA9IGdldGF0dHIoc3lzLmZsYWdzLCBmbGFnKQorICAgICAgICBpZiB2ID4gMDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCctJyArIG9wdCAqIHYpCisgICAgcmV0dXJuIGFyZ3MKKworZGVmIHN0cmlwX3B5dGhvbl9zdGRlcnIoc3RkZXJyKToKKyAgICAiIiJTdHJpcCB0aGUgc3RkZXJyIG9mIGEgUHl0aG9uIHByb2Nlc3MgZnJvbSBwb3RlbnRpYWwgZGVidWcgb3V0cHV0CisgICAgZW1pdHRlZCBieSB0aGUgaW50ZXJwcmV0ZXIuCisKKyAgICBUaGlzIHdpbGwgdHlwaWNhbGx5IGJlIHJ1biBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjb21tdW5pY2F0ZSgpIG1ldGhvZAorICAgIG9mIGEgc3VicHJvY2Vzcy5Qb3BlbiBvYmplY3QuCisgICAgIiIiCisgICAgc3RkZXJyID0gcmUuc3ViKGJyIlxbXGQrIHJlZnNcXVxyP1xuPyQiLCBiIiIsIHN0ZGVycikuc3RyaXAoKQorICAgIHJldHVybiBzdGRlcnIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3ltdGFibGUucHkgYi9MaWIvdGVzdC90ZXN0X3N5bXRhYmxlLnB5CmluZGV4IDBiNDE5MGQuLjcxOTk0YWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3ltdGFibGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeW10YWJsZS5weQpAQCAtMyw3ICszLDYgQEAKICIiIgogaW1wb3J0IHN5bXRhYmxlCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3YXJuaW5ncwogCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCkBAIC01NCwyMiArNTMsNiBAQAogICAgIGludGVybmFsID0gZmluZF9ibG9jayhzcGFtLCAiaW50ZXJuYWwiKQogICAgIGZvbyA9IGZpbmRfYmxvY2sodG9wLCAiZm9vIikKIAotICAgIGRlZiB0ZXN0X25vb3BzKHNlbGYpOgotICAgICAgICAjIENoZWNrIG1ldGhvZHMgdGhhdCBkb24ndCB3b3JrLiBUaGV5IHNob3VsZCB3YXJuIGFuZCByZXR1cm4gRmFsc2UuCi0gICAgICAgIGRlZiBjaGVjayh3LCBtc2cpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIody5tZXNzYWdlKSwgbXNnKQotICAgICAgICBzeW0gPSBzZWxmLnRvcC5sb29rdXAoImdsb2IiKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpIGFzIHc6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIsIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3ltLmlzX3ZhcmFyZygpKQotICAgICAgICAgICAgY2hlY2sodywgImlzX3ZhcmFyZygpIGlzIG9ic29sZXRlIGFuZCB3aWxsIGJlIHJlbW92ZWQiKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN5bS5pc19rZXl3b3JkYXJnKCkpCi0gICAgICAgICAgICBjaGVjayh3LCAiaXNfa2V5d29yZGFyZygpIGlzIG9ic29sZXRlIGFuZCB3aWxsIGJlIHJlbW92ZWQiKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN5bS5pc19pbl90dXBsZSgpKQotICAgICAgICAgICAgY2hlY2sodywgImlzX2luX3R1cGxlKCkgaXMgb2Jzb2xldGUgYW5kIHdpbGwgYmUgcmVtb3ZlZCIpCi0KICAgICBkZWYgdGVzdF90eXBlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudG9wLmdldF90eXBlKCksICJtb2R1bGUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuTWluZS5nZXRfdHlwZSgpLCAiY2xhc3MiKQpAQCAtMTA3LDcgKzkwLDcgQEAKICAgICAgICAgZnVuYyA9IHNlbGYuc3BhbQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMuZ2V0X3BhcmFtZXRlcnMoKSwgKCJhIiwgImIiLCAia3ciLCAidmFyIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYy5nZXRfbG9jYWxzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCJhIiwgImIiLCAiYmFyIiwgImludGVybmFsIiwgImt3IiwgInZhciIsICJ4IikpCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJhIiwgImIiLCAiaW50ZXJuYWwiLCAia3ciLCAidmFyIiwgIngiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jLmdldF9nbG9iYWxzKCksICgiYmFyIiwgImdsb2IiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmludGVybmFsLmdldF9mcmVlcygpLCAoIngiLCkpCiAKQEAgLTE0Nyw3ICsxMzAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50b3AubG9va3VwKCJuYW1lc3BhY2VfdGVzdCIpLmlzX25hbWVzcGFjZSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc3BhbS5sb29rdXAoIngiKS5pc19uYW1lc3BhY2UoKSkKIAotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi50b3AubG9va3VwKCJzcGFtIikuZ2V0X25hbWVzcGFjZSgpIGlzIHNlbGYuc3BhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudG9wLmxvb2t1cCgic3BhbSIpLmdldF9uYW1lc3BhY2UoKSBpcyBzZWxmLnNwYW0pCiAgICAgICAgIG5zX3Rlc3QgPSBzZWxmLnRvcC5sb29rdXAoIm5hbWVzcGFjZV90ZXN0IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obnNfdGVzdC5nZXRfbmFtZXNwYWNlcygpKSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbnNfdGVzdC5nZXRfbmFtZXNwYWNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQppbmRleCAyYzI3YmYxLi5lZDQ4Mzc5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQpAQCAtMjcsMTUgKzI3LDE1IEBACiAKIEVycm9ycyBmcm9tIHNldF9jb250ZXh0KCk6CiAKLVRPRE8oamh5bHRvbik6ICJhc3NpZ25tZW50IHRvIE5vbmUiIGlzIGluY29uc2lzdGVudCB3aXRoIG90aGVyIG1lc3NhZ2VzCi0KID4+PiBvYmouTm9uZSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIE5vbmUgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMV0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMV0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBOb25lCiAKID4+PiBOb25lID0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8gTm9uZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyXT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKIAogSXQncyBhIHN5bnRheCBlcnJvciB0byBhc3NpZ24gdG8gdGhlIGVtcHR5IHR1cGxlLiAgV2h5IGlzbid0IGl0IGFuCiBlcnJvciB0byBhc3NpZ24gdG8gdGhlIGVtcHR5IGxpc3Q/ICBJdCB3aWxsIGFsd2F5cyByYWlzZSBzb21lIGVycm9yIGF0CkBAIC00MywzNSArNDMsNDMgQEAKIAogPj4+ICgpID0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byAoKSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszXT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gKCkKIAogPj4+IGYoKSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAogCiA+Pj4gZGVsIGYoKQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGNhbid0IGRlbGV0ZSBmdW5jdGlvbiBjYWxsICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzVdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzVdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGRlbGV0ZSBmdW5jdGlvbiBjYWxsCiAKID4+PiBhICsgMSA9IDIKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gb3BlcmF0b3IgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNl0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNl0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIG9wZXJhdG9yCiAKID4+PiAoeCBmb3IgeCBpbiB4KSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZ2VuZXJhdG9yIGV4cHJlc3Npb24gKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbN10+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbN10+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGdlbmVyYXRvciBleHByZXNzaW9uCiAKID4+PiAxID0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBsaXRlcmFsICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzhdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzhdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBsaXRlcmFsCiAKID4+PiAiYWJjIiA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gbGl0ZXJhbCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs5XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs4XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gbGl0ZXJhbAogCiA+Pj4gYDFgID0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byByZXByICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzEwXT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxMF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIHJlcHIKIAogSWYgdGhlIGxlZnQtaGFuZCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQgaXMgYSBsaXN0IG9yIHR1cGxlLCBhbiBpbGxlZ2FsCiBleHByZXNzaW9uIGluc2lkZSB0aGF0IGNvbnRhaW4gc2hvdWxkIHN0aWxsIGNhdXNlIGEgc3ludGF4IGVycm9yLgpAQCAtODAsMjIgKzg4LDI2IEBACiAKID4+PiAoYSwgImIiLCBjKSA9ICgxLCAyLCAzKQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBsaXRlcmFsICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzExXT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxMV0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGxpdGVyYWwKIAogPj4+IFthLCBiLCBjICsgMV0gPSBbMSwgMiwgM10KIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gb3BlcmF0b3IgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTJdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzEyXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gb3BlcmF0b3IKIAogPj4+IGEgaWYgMSBlbHNlIGIgPSAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTNdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzEzXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogCiBGcm9tIGNvbXBpbGVyX2NvbXBsZXhfYXJncygpOgogCiA+Pj4gZGVmIGYoTm9uZT0xKToKIC4uLiAgICAgcGFzcwogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8gTm9uZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxNF0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTRdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQogCiAKIEZyb20gYXN0X2Zvcl9hcmd1bWVudHMoKToKQEAgLTEwMywyMiArMTE1LDI2IEBACiA+Pj4gZGVmIGYoeCwgeT0xLCB6KToKIC4uLiAgICAgcGFzcwogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IG5vbi1kZWZhdWx0IGFyZ3VtZW50IGZvbGxvd3MgZGVmYXVsdCBhcmd1bWVudCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxNV0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTVdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IG5vbi1kZWZhdWx0IGFyZ3VtZW50IGZvbGxvd3MgZGVmYXVsdCBhcmd1bWVudAogCiA+Pj4gZGVmIGYoeCwgTm9uZSk6CiAuLi4gICAgIHBhc3MKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIE5vbmUgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTZdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE2XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKIAogPj4+IGRlZiBmKCpOb25lKToKIC4uLiAgICAgcGFzcwogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8gTm9uZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxN10+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTddPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQogCiA+Pj4gZGVmIGYoKipOb25lKToKIC4uLiAgICAgcGFzcwogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8gTm9uZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxOF0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMThdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQogCiAKIEZyb20gYXN0X2Zvcl9mdW5jZGVmKCk6CkBAIC0xMjYsNyArMTQyLDggQEAKID4+PiBkZWYgTm9uZSh4KToKIC4uLiAgICAgcGFzcwogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8gTm9uZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxOV0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTldPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQogCiAKIEZyb20gYXN0X2Zvcl9jYWxsKCk6CkBAIC0xMzgsNyArMTU1LDggQEAKIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQogPj4+IGYoeCBmb3IgeCBpbiBMLCAxKQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IEdlbmVyYXRvciBleHByZXNzaW9uIG11c3QgYmUgcGFyZW50aGVzaXplZCBpZiBub3Qgc29sZSBhcmd1bWVudCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyM10+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjNdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IEdlbmVyYXRvciBleHByZXNzaW9uIG11c3QgYmUgcGFyZW50aGVzaXplZCBpZiBub3Qgc29sZSBhcmd1bWVudAogPj4+IGYoKHggZm9yIHggaW4gTCksIDEpCiBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KIApAQCAtMTcwLDcgKzE4OCw4IEBACiAuLi4gICBpMjQ0LCAgaTI0NSwgIGkyNDYsICBpMjQ3LCAgaTI0OCwgIGkyNDksICBpMjUwLCAgaTI1MSwgIGkyNTIsCiAuLi4gICBpMjUzLCAgaTI1NCwgIGkyNTUpCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogbW9yZSB0aGFuIDI1NSBhcmd1bWVudHMgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjVdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI1XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBtb3JlIHRoYW4gMjU1IGFyZ3VtZW50cwogCiBUaGUgYWN0dWFsIGVycm9yIGNhc2VzIGNvdW50cyBwb3NpdGlvbmFsIGFyZ3VtZW50cywga2V5d29yZCBhcmd1bWVudHMsCiBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb24gYXJndW1lbnRzIHNlcGFyYXRlbHkuICBUaGlzIHRlc3QgY29tYmluZXMgdGhlCkBAIC0yMDQsMzcgKzIyMyw0NSBAQAogLi4uICAgKHggZm9yIHggaW4gaTI0NCksICBpMjQ1LCAgaTI0NiwgIGkyNDcsICBpMjQ4LCAgaTI0OSwgIGkyNTAsICBpMjUxLAogLi4uICAgIGkyNTI9MSwgaTI1Mz0xLCAgaTI1ND0xLCAgaTI1NT0xKQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IG1vcmUgdGhhbiAyNTUgYXJndW1lbnRzICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI2XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyNl0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogbW9yZSB0aGFuIDI1NSBhcmd1bWVudHMKIAogPj4+IGYobGFtYmRhIHg6IHhbMF0gPSAzKQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGxhbWJkYSBjYW5ub3QgY29udGFpbiBhc3NpZ25tZW50ICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI3XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyN10+IiwgbGluZSAxCitTeW50YXhFcnJvcjogbGFtYmRhIGNhbm5vdCBjb250YWluIGFzc2lnbm1lbnQKIAogVGhlIGdyYW1tYXIgYWNjZXB0cyBhbnkgdGVzdCAoYmFzaWNhbGx5LCBhbnkgZXhwcmVzc2lvbikgaW4gdGhlCiBrZXl3b3JkIHNsb3Qgb2YgYSBjYWxsIHNpdGUuICBUZXN0IGEgZmV3IGRpZmZlcmVudCBvcHRpb25zLgogCiA+Pj4gZih4KCk9MikKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBrZXl3b3JkIGNhbid0IGJlIGFuIGV4cHJlc3Npb24gKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjhdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI4XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBrZXl3b3JkIGNhbid0IGJlIGFuIGV4cHJlc3Npb24KID4+PiBmKGEgb3IgYj0xKQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGtleXdvcmQgY2FuJ3QgYmUgYW4gZXhwcmVzc2lvbiAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyOV0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjldPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGtleXdvcmQgY2FuJ3QgYmUgYW4gZXhwcmVzc2lvbgogPj4+IGYoeC55PTEpCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjoga2V5d29yZCBjYW4ndCBiZSBhbiBleHByZXNzaW9uICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzMwXT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszMF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjoga2V5d29yZCBjYW4ndCBiZSBhbiBleHByZXNzaW9uCiAKIAotRnJvbSBhc3RfZm9yX2V4cHJfc3RtdCgpOgorTW9yZSBzZXRfY29udGV4dCgpOgogCiA+Pj4gKHggZm9yIHggaW4geCkgKz0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGF1Z21lbnRlZCBhc3NpZ25tZW50IHRvIGdlbmVyYXRvciBleHByZXNzaW9uIG5vdCBwb3NzaWJsZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszMV0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzFdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgogPj4+IE5vbmUgKz0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8gTm9uZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszMl0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzJdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQogPj4+IGYoKSArPSAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogaWxsZWdhbCBleHByZXNzaW9uIGZvciBhdWdtZW50ZWQgYXNzaWdubWVudCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszM10+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzNdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsCiAKIAogVGVzdCBjb250aW51ZSBpbiBmaW5hbGx5IGluIHdlaXJkIGNvbWJpbmF0aW9ucy4KQEAgLTI2MSw3ICsyODgsOCBAQAogICAgIC4uLiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszNl0+LCBsaW5lIDYpCisgICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzM2XT4iLCBsaW5lIDYKKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlCiAKIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBjb250aW51ZSBpbiBhIGZpbmFsbHkgd2hpY2ggc2hvdWxkIG5vdCBiZSBhbGxvd2VkLgogCkBAIC0yNzYsNyArMzA0LDggQEAKICAgICAuLi4gICAgICAgICAgICAgICAgcGFzcwogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgotICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzddPiwgbGluZSA3KQorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszN10+IiwgbGluZSA2CisgICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZQogCiAgICAgPj4+IGRlZiBmb28oKToKICAgICAuLi4gICAgIHRyeToKQEAgLTI4NSw3ICszMTQsOCBAQAogICAgIC4uLiAgICAgICAgIGNvbnRpbnVlCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszOF0+LCBsaW5lIDUpCisgICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzM4XT4iLCBsaW5lIDUKKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlCiAKICAgICA+Pj4gZGVmIGZvbygpOgogICAgIC4uLiAgICAgZm9yIGEgaW4gKCk6CkBAIC0yOTUsNyArMzI1LDggQEAKICAgICAuLi4gICAgICAgICAgIGNvbnRpbnVlCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszOV0+LCBsaW5lIDYpCisgICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzM5XT4iLCBsaW5lIDYKKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlCiAKICAgICA+Pj4gZGVmIGZvbygpOgogICAgIC4uLiAgICAgZm9yIGEgaW4gKCk6CkBAIC0zMDgsNyArMzM5LDggQEAKICAgICAuLi4gICAgICAgICAgICAgICAgIHBhc3MKICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAuLi4KLSAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQwXT4sIGxpbmUgNykKKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDBdPiIsIGxpbmUgNworICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UKIAogICAgID4+PiBkZWYgZm9vKCk6CiAgICAgLi4uICBmb3IgYSBpbiAoKToKQEAgLTMyMCw3ICszNTIsOCBAQAogICAgIC4uLiAgICAgY29udGludWUKICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAuLi4KLSAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQxXT4sIGxpbmUgOCkKKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDFdPiIsIGxpbmUgOAorICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UKIAogVGhlcmUgaXMgb25lIHRlc3QgZm9yIGEgYnJlYWsgdGhhdCBpcyBub3QgaW4gYSBsb29wLiAgVGhlIGNvbXBpbGVyCiB1c2VzIGEgc2luZ2xlIGRhdGEgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgdHJ5LWZpbmFsbHkgYW5kIGxvb3BzLApAQCAtMzM1LDcgKzM2OCw4IEBACiAgICAuLi4gICAgIHByaW50IDMKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgLi4uCi0gICBTeW50YXhFcnJvcjogJ2JyZWFrJyBvdXRzaWRlIGxvb3AgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDJdPiwgbGluZSAzKQorICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQyXT4iLCBsaW5lIDMKKyAgIFN5bnRheEVycm9yOiAnYnJlYWsnIG91dHNpZGUgbG9vcAogCiBUaGlzIHNob3VsZCBwcm9iYWJseSByYWlzZSBhIGJldHRlciBlcnJvciB0aGFuIGEgU3lzdGVtRXJyb3IgKG9yIG5vbmUgYXQgYWxsKS4KIEluIDIuNSB0aGVyZSB3YXMgYSBtaXNzaW5nIGV4Y2VwdGlvbiBhbmQgYW4gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQgaW4gYSBkZWJ1ZwpAQCAtMzc3LDcgKzQxMSw4IEBACiAgICAuLi4gICBwYXNzCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIC4uLgotICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ0XT4sIGxpbmUgMikKKyAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0NF0+IiwgbGluZSAyCisgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwKIAogICAgPj4+IGlmIDE6CiAgICAuLi4gICBwYXNzCkBAIC0zODUsNyArNDIwLDggQEAKICAgIC4uLiAgIHgoKSA9IDEKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgLi4uCi0gICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDVdPiwgbGluZSA0KQorICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ1XT4iLCBsaW5lIDQKKyAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAogCiAgICA+Pj4gaWYgMToKICAgIC4uLiAgIHgoKSA9IDEKQEAgLTM5NSw3ICs0MzEsOCBAQAogICAgLi4uICAgcGFzcwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAuLi4KLSAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0Nl0+LCBsaW5lIDIpCisgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDZdPiIsIGxpbmUgMgorICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsCiAKICAgID4+PiBpZiAxOgogICAgLi4uICAgcGFzcwpAQCAtNDA1LDcgKzQ0Miw4IEBACiAgICAuLi4gICBwYXNzCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIC4uLgotICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ3XT4sIGxpbmUgNCkKKyAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0N10+IiwgbGluZSA0CisgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwKIAogICAgPj4+IGlmIDE6CiAgICAuLi4gICBwYXNzCkBAIC00MTUsMTIgKzQ1MywzMiBAQAogICAgLi4uICAgeCgpID0gMQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAuLi4KLSAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0OF0+LCBsaW5lIDYpCisgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDhdPiIsIGxpbmUgNgorICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsCiAKID4+PiBmKGE9MjMsIGE9MjM0KQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgLi4uCi1TeW50YXhFcnJvcjoga2V5d29yZCBhcmd1bWVudCByZXBlYXRlZCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0OV0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDldPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGtleXdvcmQgYXJndW1lbnQgcmVwZWF0ZWQKKworPj4+IGRlbCAoKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgLi4uCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNTBdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGRlbGV0ZSAoKQorCis+Pj4gezEsIDIsIDN9ID0gNDIKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgIC4uLgorICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs1MF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGxpdGVyYWwKKworQ29ybmVyLWNhc2UgdGhhdCB1c2VkIHRvIGNyYXNoOgorCisgICAgPj4+IGRlZiBmKCp4eCwgKipfX2RlYnVnX18pOiBwYXNzCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFN5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIF9fZGVidWdfXwogCiAiIiIKIApAQCAtNTA2LDcgKzU2NCw3IEBACiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTeW50YXhUZXN0Q2FzZSkKICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3ludGF4Ci0gICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKCJiYWNrcXVvdGUgbm90IHN1cHBvcnRlZCIsCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygoImJhY2txdW90ZSBub3Qgc3VwcG9ydGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bnRheFdhcm5pbmcpKToKICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3Rfc3ludGF4LCB2ZXJib3NpdHk9VHJ1ZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXMucHkgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQppbmRleCBmZDZmYjJiLi40OWY1Mzg4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQpAQCAtMSwxMCArMSwxNCBAQAogIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQogaW1wb3J0IHVuaXR0ZXN0LCB0ZXN0LnRlc3Rfc3VwcG9ydAotaW1wb3J0IHN5cywgY1N0cmluZ0lPLCBvcworaW1wb3J0IHN5cywgb3MsIGNTdHJpbmdJTwogaW1wb3J0IHN0cnVjdAoraW1wb3J0IG9wZXJhdG9yCiAKIGNsYXNzIFN5c01vZHVsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKwogICAgIGRlZiB0ZXN0X29yaWdpbmFsX2Rpc3BsYXlob29rKHNlbGYpOgogICAgICAgICBpbXBvcnQgX19idWlsdGluX18KICAgICAgICAgc2F2ZXN0ZG91dCA9IHN5cy5zdGRvdXQKQEAgLTE5LDcgKzIzLDcgQEAKIAogICAgICAgICBkaChOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBoYXNhdHRyKF9fYnVpbHRpbl9fLCAiXyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIoX19idWlsdGluX18sICJfIikpCiAgICAgICAgIGRoKDQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCAiNDJcbiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19idWlsdGluX18uXywgNDIpCkBAIC01OSw3ICs2Myw3IEBACiAgICAgICAgICAgICBlaCgqc3lzLmV4Y19pbmZvKCkpCiAKICAgICAgICAgc3lzLnN0ZGVyciA9IHNhdmVzdGRlcnIKLSAgICAgICAgc2VsZi5hc3NlcnRfKGVyci5nZXR2YWx1ZSgpLmVuZHN3aXRoKCJWYWx1ZUVycm9yOiA0MlxuIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZ2V0dmFsdWUoKS5lbmRzd2l0aCgiVmFsdWVFcnJvcjogNDJcbiIpKQogCiAgICAgIyBGSVhNRTogdGVzdGluZyB0aGUgY29kZSBmb3IgYSBsb3N0IG9yIHJlcGxhY2VkIGV4Y2VwdGhvb2sgaW4KICAgICAjIFB5dGhvbi9weXRob25ydW4uYzo6UHlFcnJfUHJpbnRFeCgpIGlzIHRyaWNreS4KQEAgLTcxLDE3ICs3NSwxNyBAQAogICAgICAgICAjIGNoZWNrIHRoYXQgaXQgd29ya2VkLgogICAgICAgICBkZWYgY2xlYXJfY2hlY2soZXhjKToKICAgICAgICAgICAgIHR5cCwgdmFsdWUsIHRyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwIGlzIG5vdCBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHZhbHVlIGlzIGV4YykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0cmFjZWJhY2sgaXMgbm90IE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlIGlzIGV4YykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZWJhY2sgaXMgbm90IE5vbmUpCiAKLSAgICAgICAgICAgIHdpdGggdGVzdC50ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdpdGggdGVzdC50ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgICAgIHN5cy5leGNfY2xlYXIoKQogCiAgICAgICAgICAgICB0eXAsIHZhbHVlLCB0cmFjZWJhY2sgPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cCBpcyBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHZhbHVlIGlzIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHJhY2ViYWNrIGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwIGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsdWUgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZWJhY2sgaXMgTm9uZSkKIAogICAgICAgICBkZWYgY2xlYXIoKToKICAgICAgICAgICAgIHRyeToKQEAgLTEwMSwxMCArMTA1LDEwIEBACiAgICAgICAgICAgICBjbGVhcigpCiAgICAgICAgICAgICB0eXAyLCB2YWx1ZTIsIHRyYWNlYmFjazIgPSBzeXMuZXhjX2luZm8oKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwMSBpcyB0eXAyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHZhbHVlMSBpcyBleGMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odmFsdWUxIGlzIHZhbHVlMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0cmFjZWJhY2sxIGlzIHRyYWNlYmFjazIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwMSBpcyB0eXAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlMSBpcyBleGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsdWUxIGlzIHZhbHVlMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZWJhY2sxIGlzIHRyYWNlYmFjazIpCiAKICAgICAgICAgIyBDaGVjayB0aGF0IGFuIGV4Y2VwdGlvbiBjYW4gYmUgY2xlYXJlZCBvdXRzaWRlIG9mIGFuIGV4Y2VwdCBibG9jawogICAgICAgICBjbGVhcl9jaGVjayhleGMpCkBAIC0xMTYsNyArMTIwLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQsIGV4YzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4Yy5jb2RlLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuY29kZSwgMCkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyBleGNlcHRpb24iKQogICAgICAgICBlbHNlOgpAQCAtMTI3LDcgKzEzMSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN5cy5leGl0KDQyKQogICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgZXhjOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhjLmNvZGUsIDQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuY29kZSwgNDIpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKICAgICAgICAgZWxzZToKQEAgLTEzNyw3ICsxNDEsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzeXMuZXhpdCgoNDIsKSkKICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQsIGV4YzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4Yy5jb2RlLCA0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmNvZGUsIDQyKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiIpCiAgICAgICAgIGVsc2U6CkBAIC0xNDcsNyArMTUxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3lzLmV4aXQoImV4aXQiKQogICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgZXhjOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhjLmNvZGUsICJleGl0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmNvZGUsICJleGl0IikKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyBleGNlcHRpb24iKQogICAgICAgICBlbHNlOgpAQCAtMTU3LDcgKzE2MSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN5cy5leGl0KCgxNywgMjMpKQogICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgZXhjOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhjLmNvZGUsICgxNywgMjMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuY29kZSwgKDE3LCAyMykpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKICAgICAgICAgZWxzZToKQEAgLTE5OSwxNyArMjAzLDE3IEBACiAgICAgICAgIGlmIHRlc3QudGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmdldGRlZmF1bHRlbmNvZGluZywgNDIpCiAgICAgICAgICAgICAjIGNhbid0IGNoZWNrIG1vcmUgdGhhbiB0aGUgdHlwZSwgYXMgdGhlIHVzZXIgbWlnaHQgaGF2ZSBjaGFuZ2VkIGl0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nKCksIHN0cikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmdldGRlZmF1bHRlbmNvZGluZygpLCBzdHIpCiAKLSAgICAjIHRlc3Rpbmcgc3lzLnNldHRyYWNlKCkgaXMgZG9uZSBpbiB0ZXN0X3RyYWNlLnB5Ci0gICAgIyB0ZXN0aW5nIHN5cy5zZXRwcm9maWxlKCkgaXMgZG9uZSBpbiB0ZXN0X3Byb2ZpbGUucHkKKyAgICAjIHRlc3Rpbmcgc3lzLnNldHRyYWNlKCkgaXMgZG9uZSBpbiB0ZXN0X3N5c19zZXR0cmFjZS5weQorICAgICMgdGVzdGluZyBzeXMuc2V0cHJvZmlsZSgpIGlzIGRvbmUgaW4gdGVzdF9zeXNfc2V0cHJvZmlsZS5weQogCiAgICAgZGVmIHRlc3Rfc2V0Y2hlY2tpbnRlcnZhbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuc2V0Y2hlY2tpbnRlcnZhbCkKICAgICAgICAgb3JpZyA9IHN5cy5nZXRjaGVja2ludGVydmFsKCkKICAgICAgICAgZm9yIG4gaW4gMCwgMTAwLCAxMjAsIG9yaWc6ICMgb3JpZyBsYXN0IHRvIHJlc3RvcmUgc3RhcnRpbmcgc3RhdGUKICAgICAgICAgICAgIHN5cy5zZXRjaGVja2ludGVydmFsKG4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzeXMuZ2V0Y2hlY2tpbnRlcnZhbCgpLCBuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0Y2hlY2tpbnRlcnZhbCgpLCBuKQogCiAgICAgZGVmIHRlc3RfcmVjdXJzaW9ubGltaXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmdldHJlY3Vyc2lvbmxpbWl0LCA0MikKQEAgLTIyMSwxOSArMjI1LDM4IEBACiAgICAgICAgIHN5cy5zZXRyZWN1cnNpb25saW1pdChvbGRsaW1pdCkKIAogICAgIGRlZiB0ZXN0X2dldHdpbmRvd3N2ZXJzaW9uKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgImdldHdpbmRvd3N2ZXJzaW9uIik6Ci0gICAgICAgICAgICB2ID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHYsIHR1cGxlKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCA1KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodlswXSwgaW50KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHZbMV0sIGludCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh2WzJdLCBpbnQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodlszXSwgaW50KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHZbNF0sIHN0cikpCisgICAgICAgICMgUmFpc2UgU2tpcFRlc3QgaWYgc3lzIGRvZXNuJ3QgaGF2ZSBnZXR3aW5kb3dzdmVyc2lvbiBhdHRyaWJ1dGUKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQuZ2V0X2F0dHJpYnV0ZShzeXMsICJnZXR3aW5kb3dzdmVyc2lvbiIpCisgICAgICAgIHYgPSBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZbMF0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZbMV0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZbMl0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZbM10sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZbNF0sIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgdiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYubWFqb3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYubWlub3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYuYnVpbGQsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYucGxhdGZvcm0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYuc2VydmljZV9wYWNrLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnNlcnZpY2VfcGFja19taW5vciwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uodi5zZXJ2aWNlX3BhY2tfbWFqb3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYuc3VpdGVfbWFzaywgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uodi5wcm9kdWN0X3R5cGUsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzBdLCB2Lm1ham9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbMV0sIHYubWlub3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlsyXSwgdi5idWlsZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzNdLCB2LnBsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbNF0sIHYuc2VydmljZV9wYWNrKQorCisgICAgICAgICMgVGhpcyBpcyBob3cgcGxhdGZvcm0ucHkgY2FsbHMgaXQuIE1ha2Ugc3VyZSB0dXBsZQorICAgICAgICAjICBzdGlsbCBoYXMgNSBlbGVtZW50cworICAgICAgICBtYWosIG1pbiwgYnVpbGRubywgcGxhdCwgY3NkID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkKIAogICAgIGRlZiB0ZXN0X2Rsb3BlbmZsYWdzKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHN5cywgInNldGRsb3BlbmZsYWdzIik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihzeXMsICJnZXRkbG9wZW5mbGFncyIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLCAiZ2V0ZGxvcGVuZmxhZ3MiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmdldGRsb3BlbmZsYWdzLCA0MikKICAgICAgICAgICAgIG9sZGZsYWdzID0gc3lzLmdldGRsb3BlbmZsYWdzKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLnNldGRsb3BlbmZsYWdzKQpAQCAtMjU0LDEyICsyNzcsMTIgQEAKICAgICAgICAgZGVsIG4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoTm9uZSksIGMpCiAgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc3lzLmdldHRvdGFscmVmY291bnQoKSwgaW50KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuZ2V0dG90YWxyZWZjb3VudCgpLCBpbnQpCiAKICAgICBkZWYgdGVzdF9nZXRmcmFtZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuX2dldGZyYW1lLCA0MiwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN5cy5fZ2V0ZnJhbWUsIDIwMDAwMDAwMDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XygKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgU3lzTW9kdWxlVGVzdC50ZXN0X2dldGZyYW1lLmltX2Z1bmMuZnVuY19jb2RlIFwKICAgICAgICAgICAgIGlzIHN5cy5fZ2V0ZnJhbWUoKS5mX2NvZGUKICAgICAgICAgKQpAQCAtMjc4LDYgKzMwMSw3IEBACiAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWVzX3dpdGhvdXRfdGhyZWFkcygpCiAKICAgICAjIFRlc3Qgc3lzLl9jdXJyZW50X2ZyYW1lcygpIGluIGEgV0lUSF9USFJFQURTIGJ1aWxkLgorICAgIEB0ZXN0LnRlc3Rfc3VwcG9ydC5yZWFwX3RocmVhZHMKICAgICBkZWYgY3VycmVudF9mcmFtZXNfd2l0aF90aHJlYWRzKHNlbGYpOgogICAgICAgICBpbXBvcnQgdGhyZWFkaW5nLCB0aHJlYWQKICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawpAQCAtMzEwLDEyICszMzQsMTIgQEAKICAgICAgICAgZCA9IHN5cy5fY3VycmVudF9mcmFtZXMoKQogCiAgICAgICAgIG1haW5faWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1haW5faWQgaW4gZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRocmVhZF9pZCBpbiBkKQorICAgICAgICBzZWxmLmFzc2VydEluKG1haW5faWQsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGhyZWFkX2lkLCBkKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIGNhcHR1cmVkIG1haW4tdGhyZWFkIGZyYW1lIGlzIF90aGlzXyBmcmFtZS4KICAgICAgICAgZnJhbWUgPSBkLnBvcChtYWluX2lkKQotICAgICAgICBzZWxmLmFzc2VydF8oZnJhbWUgaXMgc3lzLl9nZXRmcmFtZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnJhbWUgaXMgc3lzLl9nZXRmcmFtZSgpKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIGNhcHR1cmVkIHRocmVhZCBmcmFtZSBpcyBibG9ja2VkIGluIGc0NTYsIGNhbGxlZAogICAgICAgICAjIGZyb20gZjEyMy4gIFRoaXMgaXMgYSBsaXR0ZSB0cmlja3ksIHNpbmNlIHZhcmlvdXMgYml0cyBvZgpAQCAtMzMzLDcgKzM1Nyw3IEBACiAgICAgICAgICMgQW5kIHRoZSBuZXh0IHJlY29yZCBtdXN0IGJlIGZvciBnNDU2KCkuCiAgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNuYW1lLCBzb3VyY2VsaW5lID0gc3RhY2tbaSsxXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmNuYW1lLCAiZzQ1NiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhzb3VyY2VsaW5lIGluIFsibGVhdmVfZy53YWl0KCkiLCAiZW50ZXJlZF9nLnNldCgpIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc291cmNlbGluZSwgWyJsZWF2ZV9nLndhaXQoKSIsICJlbnRlcmVkX2cuc2V0KCkiXSkKIAogICAgICAgICAjIFJlYXAgdGhlIHNwYXduZWQgdGhyZWFkLgogICAgICAgICBsZWF2ZV9nLnNldCgpCkBAIC0zNDUsNTYgKzM2OSw3NCBAQAogICAgICAgICAjICJ0aHJlYWQgaWQiIDAuCiAgICAgICAgIGQgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygwIGluIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkWzBdIGlzIHN5cy5fZ2V0ZnJhbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigwLCBkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZFswXSBpcyBzeXMuX2dldGZyYW1lKCkpCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzeXMuYXBpX3ZlcnNpb24sIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHN5cy5hcmd2LCBsaXN0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN5cy5ieXRlb3JkZXIgaW4gKCJsaXR0bGUiLCAiYmlnIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHN5cy5idWlsdGluX21vZHVsZV9uYW1lcywgdHVwbGUpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzeXMuY29weXJpZ2h0LCBiYXNlc3RyaW5nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc3lzLmV4ZWNfcHJlZml4LCBiYXNlc3RyaW5nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc3lzLmV4ZWN1dGFibGUsIGJhc2VzdHJpbmcpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmFwaV92ZXJzaW9uLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuYXJndiwgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuYnl0ZW9yZGVyLCAoImxpdHRsZSIsICJiaWciKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5idWlsdGluX21vZHVsZV9uYW1lcywgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuY29weXJpZ2h0LCBiYXNlc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmV4ZWNfcHJlZml4LCBiYXNlc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmV4ZWN1dGFibGUsIGJhc2VzdHJpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5mbG9hdF9pbmZvKSwgMTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmZsb2F0X2luZm8ucmFkaXgsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHN5cy5oZXh2ZXJzaW9uLCBpbnQpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzeXMubWF4aW50LCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzeXMubG9uZ19pbmZvKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5cy5sb25nX2luZm8uYml0c19wZXJfZGlnaXQgJSA1ID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMubG9uZ19pbmZvLnNpemVvZl9kaWdpdCA+PSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc3lzLmxvbmdfaW5mby5iaXRzX3Blcl9kaWdpdCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHN5cy5sb25nX2luZm8uc2l6ZW9mX2RpZ2l0KSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhleHZlcnNpb24sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5tYXhpbnQsIGludCkKICAgICAgICAgaWYgdGVzdC50ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc3lzLm1heHVuaWNvZGUsIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHN5cy5wbGF0Zm9ybSwgYmFzZXN0cmluZykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHN5cy5wcmVmaXgsIGJhc2VzdHJpbmcpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzeXMudmVyc2lvbiwgYmFzZXN0cmluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLm1heHVuaWNvZGUsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5wbGF0Zm9ybSwgYmFzZXN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5wcmVmaXgsIGJhc2VzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMudmVyc2lvbiwgYmFzZXN0cmluZykKICAgICAgICAgdmkgPSBzeXMudmVyc2lvbl9pbmZvCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHZpLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aVs6XSwgdHVwbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZpKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodmlbMF0sIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHZpWzFdLCBpbnQpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh2aVsyXSwgaW50KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHZpWzNdIGluICgiYWxwaGEiLCAiYmV0YSIsICJjYW5kaWRhdGUiLCAiZmluYWwiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodmlbNF0sIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aVswXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmlbMV0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpWzJdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odmlbM10sICgiYWxwaGEiLCAiYmV0YSIsICJjYW5kaWRhdGUiLCAiZmluYWwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpWzRdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aS5tYWpvciwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmkubWlub3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpLm1pY3JvLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odmkucmVsZWFzZWxldmVsLCAoImFscGhhIiwgImJldGEiLCAiY2FuZGlkYXRlIiwgImZpbmFsIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aS5zZXJpYWwsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aVswXSwgdmkubWFqb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlbMV0sIHZpLm1pbm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpWzJdLCB2aS5taWNybykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aVszXSwgdmkucmVsZWFzZWxldmVsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpWzRdLCB2aS5zZXJpYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2aSA+ICgxLDAsMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuZmxvYXRfcmVwcl9zdHlsZSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEluKHN5cy5mbG9hdF9yZXByX3N0eWxlLCAoJ3Nob3J0JywgJ2xlZ2FjeScpKQogCiAgICAgZGVmIHRlc3RfNDM1ODEoc2VsZik6CiAgICAgICAgICMgQ2FuJ3QgdXNlIHN5cy5zdGRvdXQsIGFzIHRoaXMgaXMgYSBjU3RyaW5nSU8gb2JqZWN0IHdoZW4KICAgICAgICAgIyB0aGUgdGVzdCBydW5zIHVuZGVyIHJlZ3J0ZXN0LgotICAgICAgICBzZWxmLmFzc2VydF8oc3lzLl9fc3Rkb3V0X18uZW5jb2RpbmcgPT0gc3lzLl9fc3RkZXJyX18uZW5jb2RpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMuX19zdGRvdXRfXy5lbmNvZGluZyA9PSBzeXMuX19zdGRlcnJfXy5lbmNvZGluZykKIAogICAgIGRlZiB0ZXN0X3N5c19mbGFncyhzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN5cy5mbGFncykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5cy5mbGFncykKICAgICAgICAgYXR0cnMgPSAoImRlYnVnIiwgInB5M2tfd2FybmluZyIsICJkaXZpc2lvbl93YXJuaW5nIiwgImRpdmlzaW9uX25ldyIsCiAgICAgICAgICAgICAgICAgICJpbnNwZWN0IiwgImludGVyYWN0aXZlIiwgIm9wdGltaXplIiwgImRvbnRfd3JpdGVfYnl0ZWNvZGUiLAogICAgICAgICAgICAgICAgICAibm9fc2l0ZSIsICJpZ25vcmVfZW52aXJvbm1lbnQiLCAidGFiY2hlY2siLCAidmVyYm9zZSIsCiAgICAgICAgICAgICAgICAgICJ1bmljb2RlIiwgImJ5dGVzX3dhcm5pbmciKQogICAgICAgICBmb3IgYXR0ciBpbiBhdHRyczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKHN5cy5mbGFncywgYXR0ciksIGF0dHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzeXMuZmxhZ3MsIGF0dHIpLCBhdHRyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGdldGF0dHIoc3lzLmZsYWdzLCBhdHRyKSksIGludCwgYXR0cikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlcHIoc3lzLmZsYWdzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoc3lzLmZsYWdzKSkKIAogICAgIGRlZiB0ZXN0X2NsZWFyX3R5cGVfY2FjaGUoc2VsZik6CiAgICAgICAgIHN5cy5fY2xlYXJfdHlwZV9jYWNoZSgpCiAKICAgICBkZWYgdGVzdF9pb2VuY29kaW5nKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3VicHJvY2VzcyxvcworICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pCiAKICAgICAgICAgIyBUZXN0IGNoYXJhY3RlcjogY2VudCBzaWduLCBlbmNvZGVkIGFzIDB4NEEgKEFTQ0lJIEopIGluIENQNDI0LApAQCAtNDAzLDEzICs0NDUsMTMgQEAKICAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiY3A0MjQiCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50IHVuaWNocigweGEyKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLlBJUEUsIGVudj1lbnYpCi0gICAgICAgIG91dCA9IHAuc3Rkb3V0LnJlYWQoKS5zdHJpcCgpCisgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCB1bmljaHIoMHhhMikuZW5jb2RlKCJjcDQyNCIpKQogCiAgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImFzY2lpOnJlcGxhY2UiCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50IHVuaWNocigweGEyKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLlBJUEUsIGVudj1lbnYpCi0gICAgICAgIG91dCA9IHAuc3Rkb3V0LnJlYWQoKS5zdHJpcCgpCisgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCAnPycpCiAKICAgICBkZWYgdGVzdF9jYWxsX3RyYWNpbmcoc2VsZik6CkBAIC00MjksNyArNDcxLDcgQEAKICAgICAgICAgICAgIGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGN3ZD1weXRob25fZGlyKQogICAgICAgICBleGVjdXRhYmxlID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKICAgICAgICAgcC53YWl0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGV4ZWN1dGFibGUgaW4gWyInJyIsIHJlcHIoc3lzLmV4ZWN1dGFibGUpXSwgZXhlY3V0YWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleGVjdXRhYmxlLCBbIicnIiwgcmVwcihzeXMuZXhlY3V0YWJsZSldKQogCiBjbGFzcyBTaXplb2ZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNDQ5LDYgKzQ5MSw3IEBACiAgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgogICAgICAgICAgICAgc2VsZi5oZWFkZXIgKz0gJzJQJwogICAgICAgICAgICAgc2VsZi52aGVhZGVyICs9ICcyUCcKKyAgICAgICAgc2VsZi5sb25nZGlnaXQgPSBzeXMubG9uZ19pbmZvLnNpemVvZl9kaWdpdAogICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCiAgICAgICAgIHNlbGYuZ2NfaGVhZHNpemUgPSBfdGVzdGNhcGkuU0laRU9GX1BZR0NfSEVBRAogICAgICAgICBzZWxmLmZpbGUgPSBvcGVuKHRlc3QudGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykKQEAgLTQ5OSw3ICs1NDIsNyBAQAogICAgICAgICAjIGJvb2wKICAgICAgICAgY2hlY2soVHJ1ZSwgc2l6ZShoICsgJ2wnKSkKICAgICAgICAgIyBidWZmZXIKLSAgICAgICAgd2l0aCB0ZXN0LnRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3QudGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIGNoZWNrKGJ1ZmZlcignJyksIHNpemUoaCArICcyUDJQaWwnKSkKICAgICAgICAgIyBidWlsdGluX2Z1bmN0aW9uX29yX21ldGhvZAogICAgICAgICBjaGVjayhsZW4sIHNpemUoaCArICczUCcpKQpAQCAtNTIxLDcgKzU2NCw3IEBACiAgICAgICAgIGNsYXNzIGNsYXNzX29sZHN0eWxlKCk6CiAgICAgICAgICAgICBkZWYgbWV0aG9kKCk6CiAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBjaGVjayhjbGFzc19vbGRzdHlsZSwgc2l6ZShoICsgJzZQJykpCisgICAgICAgIGNoZWNrKGNsYXNzX29sZHN0eWxlLCBzaXplKGggKyAnN1AnKSkKICAgICAgICAgIyBpbnN0YW5jZSAob2xkLXN0eWxlIGNsYXNzKQogICAgICAgICBjaGVjayhjbGFzc19vbGRzdHlsZSgpLCBzaXplKGggKyAnM1AnKSkKICAgICAgICAgIyBpbnN0YW5jZW1ldGhvZCAob2xkLXN0eWxlIGNsYXNzKQpAQCAtNTI5LDcgKzU3Miw3IEBACiAgICAgICAgICMgY29tcGxleAogICAgICAgICBjaGVjayhjb21wbGV4KDAsMSksIHNpemUoaCArICcyZCcpKQogICAgICAgICAjIGNvZGUKLSAgICAgICAgY2hlY2soZ2V0X2NlbGwoKS5mdW5jX2NvZGUsIHNpemUoaCArICc0aThQaTJQJykpCisgICAgICAgIGNoZWNrKGdldF9jZWxsKCkuZnVuY19jb2RlLCBzaXplKGggKyAnNGk4UGkzUCcpKQogICAgICAgICAjIEJhc2VFeGNlcHRpb24KICAgICAgICAgY2hlY2soQmFzZUV4Y2VwdGlvbigpLCBzaXplKGggKyAnM1AnKSkKICAgICAgICAgIyBVbmljb2RlRW5jb2RlRXJyb3IKQEAgLTYyNiwxMiArNjY5LDEzIEBACiAgICAgICAgICMgbGlzdHJldmVyc2VpdGVyYXRvciAobGlzdCkKICAgICAgICAgY2hlY2socmV2ZXJzZWQoW10pLCBzaXplKGggKyAnbFAnKSkKICAgICAgICAgIyBsb25nCi0gICAgICAgIGNoZWNrKDBMLCBzaXplKHZoICsgJ0gnKSAtIHNlbGYuSCkKLSAgICAgICAgY2hlY2soMUwsIHNpemUodmggKyAnSCcpKQotICAgICAgICBjaGVjaygtMUwsIHNpemUodmggKyAnSCcpKQotICAgICAgICBjaGVjaygzMjc2OEwsIHNpemUodmggKyAnSCcpICsgc2VsZi5IKQotICAgICAgICBjaGVjaygzMjc2OEwqMzI3NjhMLTEsIHNpemUodmggKyAnSCcpICsgc2VsZi5IKQotICAgICAgICBjaGVjaygzMjc2OEwqMzI3NjhMLCBzaXplKHZoICsgJ0gnKSArIDIqc2VsZi5IKQorICAgICAgICBjaGVjaygwTCwgc2l6ZSh2aCkpCisgICAgICAgIGNoZWNrKDFMLCBzaXplKHZoKSArIHNlbGYubG9uZ2RpZ2l0KQorICAgICAgICBjaGVjaygtMUwsIHNpemUodmgpICsgc2VsZi5sb25nZGlnaXQpCisgICAgICAgIFB5TG9uZ19CQVNFID0gMioqc3lzLmxvbmdfaW5mby5iaXRzX3Blcl9kaWdpdAorICAgICAgICBjaGVjayhsb25nKFB5TG9uZ19CQVNFKSwgc2l6ZSh2aCkgKyAyKnNlbGYubG9uZ2RpZ2l0KQorICAgICAgICBjaGVjayhsb25nKFB5TG9uZ19CQVNFKioyLTEpLCBzaXplKHZoKSArIDIqc2VsZi5sb25nZGlnaXQpCisgICAgICAgIGNoZWNrKGxvbmcoUHlMb25nX0JBU0UqKjIpLCBzaXplKHZoKSArIDMqc2VsZi5sb25nZGlnaXQpCiAgICAgICAgICMgbW9kdWxlCiAgICAgICAgIGNoZWNrKHVuaXR0ZXN0LCBzaXplKGggKyAnUCcpKQogICAgICAgICAjIE5vbmUKQEAgLTY0Niw2ICs2OTAsNyBAQAogICAgICAgICAgICAgeCA9IHByb3BlcnR5KGdldHgsIHNldHgsIGRlbHgsICIiKQogICAgICAgICAgICAgY2hlY2soeCwgc2l6ZShoICsgJzRQaScpKQogICAgICAgICAjIFB5Q09iamVjdAorICAgICAgICAjIFB5Q2Fwc3VsZQogICAgICAgICAjIFhYWAogICAgICAgICAjIHJhbmdlaXRlcmF0b3IKICAgICAgICAgY2hlY2soaXRlcih4cmFuZ2UoMSkpLCBzaXplKGggKyAnNGwnKSkKQEAgLTY3Niw4ICs3MjEsOCBAQAogICAgICAgICAjIHNsaWNlCiAgICAgICAgIGNoZWNrKHNsaWNlKDEpLCBzaXplKGggKyAnM1AnKSkKICAgICAgICAgIyBzdHIKLSAgICAgICAgY2hlY2soJycsIHNpemUodmggKyAnbGljJykpCi0gICAgICAgIGNoZWNrKCdhYmMnLCBzaXplKHZoICsgJ2xpYycpICsgMypzZWxmLmMpCisgICAgICAgIGNoZWNrKCcnLCBzdHJ1Y3QuY2FsY3NpemUodmggKyAnbGknKSArIDEpCisgICAgICAgIGNoZWNrKCdhYmMnLCBzdHJ1Y3QuY2FsY3NpemUodmggKyAnbGknKSArIDEgKyAzKnNlbGYuYykKICAgICAgICAgIyBzdXBlcgogICAgICAgICBjaGVjayhzdXBlcihpbnQpLCBzaXplKGggKyAnM1AnKSkKICAgICAgICAgIyB0dXBsZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcm9maWxlaG9va3MucHkgYi9MaWIvdGVzdC90ZXN0X3N5c19zZXRwcm9maWxlLnB5CnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIExpYi90ZXN0L3Rlc3RfcHJvZmlsZWhvb2tzLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X3N5c19zZXRwcm9maWxlLnB5CmluZGV4IDNlMDI4MzAuLmU4MjU1OWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZWhvb2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHByb2ZpbGUucHkKQEAgLTEsMyArMSw0IEBACitpbXBvcnQgZ2MKIGltcG9ydCBwcHJpbnQKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdApAQCAtMTIsMTQgKzEzLDE0IEBACiAgICAgICAgIHN5cy5zZXRwcm9maWxlKE5vbmUpCiAKICAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKLSAgICAgICAgYXNzZXJ0IHN5cy5nZXRwcm9maWxlKCkgPT0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzeXMuZ2V0cHJvZmlsZSgpKQogCiAgICAgZGVmIHRlc3Rfc2V0Z2V0KHNlbGYpOgogICAgICAgICBkZWYgZm4oKmFyZ3MpOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIHN5cy5zZXRwcm9maWxlKGZuKQotICAgICAgICBhc3NlcnQgc3lzLmdldHByb2ZpbGUoKSA9PSBmbgorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5nZXRwcm9maWxlKCksIGZuKQogCiBjbGFzcyBIb29rV2F0Y2hlcjoKICAgICBkZWYgX19pbml0X18oc2VsZik6CkBAIC0zNTIsMTkgKzM1MywxOSBAQAogCiAKIGRlZiBjYXB0dXJlX2V2ZW50cyhjYWxsYWJsZSwgcD1Ob25lKToKLSAgICB0cnk6Ci0gICAgICAgIHN5cy5zZXRwcm9maWxlKCkKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQoCi0gICAgICAgICAgICAnc3lzLnNldHByb2ZpbGUoKSBkaWQgbm90IHJhaXNlIFR5cGVFcnJvcicpCi0KICAgICBpZiBwIGlzIE5vbmU6CiAgICAgICAgIHAgPSBIb29rV2F0Y2hlcigpCi0gICAgc3lzLnNldHByb2ZpbGUocC5jYWxsYmFjaykKLSAgICBwcm90ZWN0KGNhbGxhYmxlLCBwKQotICAgIHN5cy5zZXRwcm9maWxlKE5vbmUpCisgICAgIyBEaXNhYmxlIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gVGhpcyBwcmV2ZW50cyBfX2RlbF9fcyBmcm9tIHNob3dpbmcgdXAgaW4KKyAgICAjIHRyYWNlcy4KKyAgICBvbGRfZ2MgPSBnYy5pc2VuYWJsZWQoKQorICAgIGdjLmRpc2FibGUoKQorICAgIHRyeToKKyAgICAgICAgc3lzLnNldHByb2ZpbGUocC5jYWxsYmFjaykKKyAgICAgICAgcHJvdGVjdChjYWxsYWJsZSwgcCkKKyAgICAgICAgc3lzLnNldHByb2ZpbGUoTm9uZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvbGRfZ2M6CisgICAgICAgICAgICBnYy5lbmFibGUoKQogICAgIHJldHVybiBwLmdldF9ldmVudHMoKVsxOi0xXQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXNfc2V0dHJhY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4YzU2ZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5CkBAIC0wLDAgKzEsNzg5IEBACisjIFRlc3RpbmcgdGhlIGxpbmUgdHJhY2UgZmFjaWxpdHkuCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgZ2MKKworIyBBIHZlcnkgYmFzaWMgZXhhbXBsZS4gIElmIHRoaXMgZmFpbHMsIHdlJ3JlIGluIGRlZXAgdHJvdWJsZS4KK2RlZiBiYXNpYygpOgorICAgIHJldHVybiAxCisKK2Jhc2ljLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicpXQorCisjIE1hbnkgb2YgdGhlIHRlc3RzIGJlbG93IGFyZSB0cmlja3kgYmVjYXVzZSB0aGV5IGludm9sdmUgcGFzcyBzdGF0ZW1lbnRzLgorIyBJZiB0aGVyZSBpcyBpbXBsaWNpdCBjb250cm9sIGZsb3cgYXJvdW5kIGEgcGFzcyBzdGF0ZW1lbnQgKGluIGFuIGV4Y2VwdAorIyBjbGF1c2Ugb3IgZWxzZSBjYWx1c2UpIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBkbyB5b3Ugc2V0IGEgbGluZSBudW1iZXIKKyMgZm9sbG93aW5nIHRoYXQgY2xhdXNlPworCisKKyMgVGhlIGVudGlyZSAid2hpbGUgMDoiIHN0YXRlbWVudCBpcyBvcHRpbWl6ZWQgYXdheS4gIE5vIGNvZGUKKyMgZXhpc3RzIGZvciBpdCwgc28gdGhlIGxpbmUgbnVtYmVycyBza2lwIGRpcmVjdGx5IGZyb20gImRlbCB4IgorIyB0byAieCA9IDEiLgorZGVmIGFyaWdvX2V4YW1wbGUoKToKKyAgICB4ID0gMQorICAgIGRlbCB4CisgICAgd2hpbGUgMDoKKyAgICAgICAgcGFzcworICAgIHggPSAxCisKK2FyaWdvX2V4YW1wbGUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdyZXR1cm4nKV0KKworIyBjaGVjayB0aGF0IGxpbmVzIGNvbnNpc3Rpbmcgb2YganVzdCBvbmUgaW5zdHJ1Y3Rpb24gZ2V0IHRyYWNlZDoKK2RlZiBvbmVfaW5zdHJfbGluZSgpOgorICAgIHggPSAxCisgICAgZGVsIHgKKyAgICB4ID0gMQorCitvbmVfaW5zdHJfbGluZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdyZXR1cm4nKV0KKworZGVmIG5vX3BvcF90b3BzKCk6ICAgICAgIyAwCisgICAgeCA9IDEgICAgICAgICAgICAgICAjIDEKKyAgICBmb3IgYSBpbiByYW5nZSgyKTogICMgMgorICAgICAgICBpZiBhOiAgICAgICAgICAgIyAzCisgICAgICAgICAgICB4ID0gMSAgICAgICAjIDQKKyAgICAgICAgZWxzZTogICAgICAgICAgICMgNQorICAgICAgICAgICAgeCA9IDEgICAgICAgIyA2CisKK25vX3BvcF90b3BzLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoNiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoMiwgJ3JldHVybicpXQorCitkZWYgbm9fcG9wX2Jsb2NrcygpOgorICAgIHkgPSAxCisgICAgd2hpbGUgbm90IHk6CisgICAgICAgIGJsYQorICAgIHggPSAxCisKK25vX3BvcF9ibG9ja3MuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdyZXR1cm4nKV0KKworZGVmIGNhbGxlZCgpOiAjIGxpbmUgLTMKKyAgICB4ID0gMQorCitkZWYgY2FsbCgpOiAgICMgbGluZSAwCisgICAgY2FsbGVkKCkKKworY2FsbC5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICgtMywgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICgtMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICgtMiwgJ3JldHVybicpLAorICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nKV0KKworZGVmIHJhaXNlcygpOgorICAgIHJhaXNlIEV4Y2VwdGlvbgorCitkZWYgdGVzdF9yYWlzZSgpOgorICAgIHRyeToKKyAgICAgICAgcmFpc2VzKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBleGM6CisgICAgICAgIHggPSAxCisKK3Rlc3RfcmFpc2UuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICgtMywgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICgtMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICgtMiwgJ2V4Y2VwdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAgKC0yLCAncmV0dXJuJyksCisgICAgICAgICAgICAgICAgICAgICAoMiwgJ2V4Y2VwdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICg0LCAncmV0dXJuJyldCisKK2RlZiBfc2V0dHJhY2VfYW5kX3JldHVybih0cmFjZWZ1bmMpOgorICAgIHN5cy5zZXR0cmFjZSh0cmFjZWZ1bmMpCisgICAgc3lzLl9nZXRmcmFtZSgpLmZfYmFjay5mX3RyYWNlID0gdHJhY2VmdW5jCitkZWYgc2V0dHJhY2VfYW5kX3JldHVybih0cmFjZWZ1bmMpOgorICAgIF9zZXR0cmFjZV9hbmRfcmV0dXJuKHRyYWNlZnVuYykKKworc2V0dHJhY2VfYW5kX3JldHVybi5ldmVudHMgPSBbKDEsICdyZXR1cm4nKV0KKworZGVmIF9zZXR0cmFjZV9hbmRfcmFpc2UodHJhY2VmdW5jKToKKyAgICBzeXMuc2V0dHJhY2UodHJhY2VmdW5jKQorICAgIHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl90cmFjZSA9IHRyYWNlZnVuYworICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorZGVmIHNldHRyYWNlX2FuZF9yYWlzZSh0cmFjZWZ1bmMpOgorICAgIHRyeToKKyAgICAgICAgX3NldHRyYWNlX2FuZF9yYWlzZSh0cmFjZWZ1bmMpCisgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciwgZXhjOgorICAgICAgICBwYXNzCisKK3NldHRyYWNlX2FuZF9yYWlzZS5ldmVudHMgPSBbKDIsICdleGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ3JldHVybicpXQorCisjIGltcGxpY2l0IHJldHVybiBleGFtcGxlCisjIFRoaXMgdGVzdCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIG9mIHRoZSBlbHNlOiBwYXNzCisjIHBhcnQgb2YgdGhlIGNvZGUuICBUaGUgY29kZSBnZW5lcmF0ZSBmb3IgdGhlIHRydWUKKyMgcGFydCBvZiB0aGUgaWYgY29udGFpbnMgYSBqdW1wIHBhc3QgdGhlIGVsc2UgYnJhbmNoLgorIyBUaGUgY29tcGlsZXIgdGhlbiBnZW5lcmF0ZXMgYW4gaW1wbGljaXQgInJldHVybiBOb25lIgorIyBJbnRlcm5hbGx5LCB0aGUgY29tcGlsZXIgdmlzaXRzIHRoZSBwYXNzIHN0YXRlbWVudAorIyBhbmQgc3RvcmVzIGl0cyBsaW5lIG51bWJlciBmb3IgdXNlIG9uIHRoZSBuZXh0IGluc3RydWN0aW9uLgorIyBUaGUgbmV4dCBpbnN0cnVjdGlvbiBpcyB0aGUgaW1wbGljaXQgcmV0dXJuIE5vbmUuCitkZWYgaXJldHVybl9leGFtcGxlKCk6CisgICAgYSA9IDUKKyAgICBiID0gNQorICAgIGlmIGEgPT0gYjoKKyAgICAgICAgYiA9IGErMQorICAgIGVsc2U6CisgICAgICAgIHBhc3MKKworaXJldHVybl9leGFtcGxlLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICg2LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoNiwgJ3JldHVybicpXQorCisjIFRpZ2h0IGxvb3Agd2l0aCB3aGlsZSgxKSBleGFtcGxlIChTRiAjNzY1NjI0KQorZGVmIHRpZ2h0bG9vcF9leGFtcGxlKCk6CisgICAgaXRlbXMgPSByYW5nZSgwLCAzKQorICAgIHRyeToKKyAgICAgICAgaSA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGIgPSBpdGVtc1tpXTsgaSs9MQorICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICBwYXNzCisKK3RpZ2h0bG9vcF9leGFtcGxlLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ2V4Y2VwdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg3LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg3LCAncmV0dXJuJyldCisKK2RlZiB0aWdodGVybG9vcF9leGFtcGxlKCk6CisgICAgaXRlbXMgPSByYW5nZSgxLCA0KQorICAgIHRyeToKKyAgICAgICAgaSA9IDAKKyAgICAgICAgd2hpbGUgMTogaSA9IGl0ZW1zW2ldCisgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgIHBhc3MKKwordGlnaHRlcmxvb3BfZXhhbXBsZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdleGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNiwgJ3JldHVybicpXQorCitkZWYgZ2VuZXJhdG9yX2Z1bmN0aW9uKCk6CisgICAgdHJ5OgorICAgICAgICB5aWVsZCBUcnVlCisgICAgICAgICJjb250aW51ZWQiCisgICAgZmluYWxseToKKyAgICAgICAgImZpbmFsbHkiCitkZWYgZ2VuZXJhdG9yX2V4YW1wbGUoKToKKyAgICAjIGFueSgpIHdpbGwgbGVhdmUgdGhlIGdlbmVyYXRvciBiZWZvcmUgaXRzIGVuZAorICAgIHggPSBhbnkoZ2VuZXJhdG9yX2Z1bmN0aW9uKCkpCisKKyAgICAjIHRoZSBmb2xsb3dpbmcgbGluZXMgd2VyZSBub3QgdHJhY2VkCisgICAgZm9yIHggaW4gcmFuZ2UoMTApOgorICAgICAgICB5ID0geAorCitnZW5lcmF0b3JfZXhhbXBsZS5ldmVudHMgPSAoWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC02LCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC00LCAncmV0dXJuJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC00LCAnZXhjZXB0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xLCAncmV0dXJuJyldICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKDUsICdsaW5lJyksICg2LCAnbGluZScpXSAqIDEwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKDUsICdsaW5lJyksICg1LCAncmV0dXJuJyldKQorCisKK2NsYXNzIFRyYWNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZXZlbnRzID0gW10KKyAgICBkZWYgdHJhY2Uoc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgorICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoKGZyYW1lLmZfbGluZW5vLCBldmVudCkpCisgICAgICAgIHJldHVybiBzZWxmLnRyYWNlCisgICAgZGVmIHRyYWNlV2l0aEdlbmV4cChzZWxmLCBmcmFtZSwgZXZlbnQsIGFyZyk6CisgICAgICAgIChvIGZvciBvIGluIFsxXSkKKyAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKChmcmFtZS5mX2xpbmVubywgZXZlbnQpKQorICAgICAgICByZXR1cm4gc2VsZi50cmFjZQorCitjbGFzcyBUcmFjZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgRGlzYWJsZSBnYyBjb2xsZWN0aW9uIHdoZW4gdHJhY2luZywgb3RoZXJ3aXNlIHRoZQorICAgICMgZGVhbGxvY2F0b3JzIG1heSBiZSB0cmFjZWQgYXMgd2VsbC4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudXNpbmdfZ2MgPSBnYy5pc2VuYWJsZWQoKQorICAgICAgICBnYy5kaXNhYmxlKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi51c2luZ19nYzoKKyAgICAgICAgICAgIGdjLmVuYWJsZSgpCisKKyAgICBkZWYgY29tcGFyZV9ldmVudHMoc2VsZiwgbGluZV9vZmZzZXQsIGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKToKKyAgICAgICAgZXZlbnRzID0gWyhsIC0gbGluZV9vZmZzZXQsIGUpIGZvciAobCwgZSkgaW4gZXZlbnRzXQorICAgICAgICBpZiBldmVudHMgIT0gZXhwZWN0ZWRfZXZlbnRzOgorICAgICAgICAgICAgc2VsZi5mYWlsKAorICAgICAgICAgICAgICAgICJldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RhdGlvbjpcbiIgKworICAgICAgICAgICAgICAgICJcbiIuam9pbihkaWZmbGliLm5kaWZmKFtzdHIoeCkgZm9yIHggaW4gZXhwZWN0ZWRfZXZlbnRzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyKHgpIGZvciB4IGluIGV2ZW50c10pKSkKKworICAgIGRlZiBydW5fYW5kX2NvbXBhcmUoc2VsZiwgZnVuYywgZXZlbnRzKToKKyAgICAgICAgdHJhY2VyID0gVHJhY2VyKCkKKyAgICAgICAgc3lzLnNldHRyYWNlKHRyYWNlci50cmFjZSkKKyAgICAgICAgZnVuYygpCisgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorICAgICAgICBzZWxmLmNvbXBhcmVfZXZlbnRzKGZ1bmMuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlci5ldmVudHMsIGV2ZW50cykKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCBmdW5jKToKKyAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoZnVuYywgZnVuYy5ldmVudHMpCisKKyAgICBkZWYgcnVuX3Rlc3QyKHNlbGYsIGZ1bmMpOgorICAgICAgICB0cmFjZXIgPSBUcmFjZXIoKQorICAgICAgICBmdW5jKHRyYWNlci50cmFjZSkKKyAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCisgICAgICAgIHNlbGYuY29tcGFyZV9ldmVudHMoZnVuYy5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VyLmV2ZW50cywgZnVuYy5ldmVudHMpCisKKyAgICBkZWYgc2V0X2FuZF9yZXRyaWV2ZV9ub25lKHNlbGYpOgorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgYXNzZXJ0IHN5cy5nZXR0cmFjZSgpIGlzIE5vbmUKKworICAgIGRlZiBzZXRfYW5kX3JldHJpZXZlX2Z1bmMoc2VsZik6CisgICAgICAgIGRlZiBmbigqYXJncyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc3lzLnNldHRyYWNlKGZuKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhc3NlcnQgc3lzLmdldHRyYWNlKCkgaXMgZm4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorCisgICAgZGVmIHRlc3RfMDFfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoYmFzaWMpCisgICAgZGVmIHRlc3RfMDJfYXJpZ28oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoYXJpZ29fZXhhbXBsZSkKKyAgICBkZWYgdGVzdF8wM19vbmVfaW5zdHIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qob25lX2luc3RyX2xpbmUpCisgICAgZGVmIHRlc3RfMDRfbm9fcG9wX2Jsb2NrcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19wb3BfYmxvY2tzKQorICAgIGRlZiB0ZXN0XzA1X25vX3BvcF90b3BzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX3BvcF90b3BzKQorICAgIGRlZiB0ZXN0XzA2X2NhbGwoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoY2FsbCkKKyAgICBkZWYgdGVzdF8wN19yYWlzZShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdCh0ZXN0X3JhaXNlKQorCisgICAgZGVmIHRlc3RfMDhfc2V0dHJhY2VfYW5kX3JldHVybihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdDIoc2V0dHJhY2VfYW5kX3JldHVybikKKyAgICBkZWYgdGVzdF8wOV9zZXR0cmFjZV9hbmRfcmFpc2Uoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QyKHNldHRyYWNlX2FuZF9yYWlzZSkKKyAgICBkZWYgdGVzdF8xMF9pcmV0dXJuKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGlyZXR1cm5fZXhhbXBsZSkKKyAgICBkZWYgdGVzdF8xMV90aWdodGxvb3Aoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QodGlnaHRsb29wX2V4YW1wbGUpCisgICAgZGVmIHRlc3RfMTJfdGlnaHRlcmxvb3Aoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QodGlnaHRlcmxvb3BfZXhhbXBsZSkKKworICAgIGRlZiB0ZXN0XzEzX2dlbmV4cChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChnZW5lcmF0b3JfZXhhbXBsZSkKKyAgICAgICAgIyBpc3N1ZTEyNjU6IGlmIHRoZSB0cmFjZSBmdW5jdGlvbiBjb250YWlucyBhIGdlbmVyYXRvciwKKyAgICAgICAgIyBhbmQgaWYgdGhlIHRyYWNlZCBmdW5jdGlvbiBjb250YWlucyBhbm90aGVyIGdlbmVyYXRvcgorICAgICAgICAjIHRoYXQgaXMgbm90IGNvbXBsZXRlbHkgZXhoYXVzdGVkLCB0aGUgdHJhY2Ugc3RvcHBlZC4KKyAgICAgICAgIyBXb3JzZTogdGhlICdmaW5hbGx5JyBjbGF1c2Ugd2FzIG5vdCBpbnZva2VkLgorICAgICAgICB0cmFjZXIgPSBUcmFjZXIoKQorICAgICAgICBzeXMuc2V0dHJhY2UodHJhY2VyLnRyYWNlV2l0aEdlbmV4cCkKKyAgICAgICAgZ2VuZXJhdG9yX2V4YW1wbGUoKQorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgc2VsZi5jb21wYXJlX2V2ZW50cyhnZW5lcmF0b3JfZXhhbXBsZS5fX2NvZGVfXy5jb19maXJzdGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZXIuZXZlbnRzLCBnZW5lcmF0b3JfZXhhbXBsZS5ldmVudHMpCisKKyAgICBkZWYgdGVzdF8xNF9vbmxpbmVyX2lmKHNlbGYpOgorICAgICAgICBkZWYgb25saW5lcnMoKToKKyAgICAgICAgICAgIGlmIFRydWU6IEZhbHNlCisgICAgICAgICAgICBlbHNlOiBUcnVlCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBzZWxmLnJ1bl9hbmRfY29tcGFyZSgKKyAgICAgICAgICAgIG9ubGluZXJzLAorICAgICAgICAgICAgWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICgzLCAncmV0dXJuJyldKQorCisgICAgZGVmIHRlc3RfMTVfbG9vcHMoc2VsZik6CisgICAgICAgICMgaXNzdWUxNzUwMDc2OiAid2hpbGUiIGV4cHJlc3Npb24gaXMgc2tpcHBlZCBieSBkZWJ1Z2dlcgorICAgICAgICBkZWYgZm9yX2V4YW1wbGUoKToKKyAgICAgICAgICAgIGZvciB4IGluIHJhbmdlKDIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoCisgICAgICAgICAgICBmb3JfZXhhbXBsZSwKKyAgICAgICAgICAgIFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMSwgJ3JldHVybicpXSkKKworICAgICAgICBkZWYgd2hpbGVfZXhhbXBsZSgpOgorICAgICAgICAgICAgIyBXaGlsZSBleHByZXNzaW9uIHNob3VsZCBiZSB0cmFjZWQgb24gZXZlcnkgbG9vcAorICAgICAgICAgICAgeCA9IDIKKyAgICAgICAgICAgIHdoaWxlIHggPiAwOgorICAgICAgICAgICAgICAgIHggLT0gMQorICAgICAgICBzZWxmLnJ1bl9hbmRfY29tcGFyZSgKKyAgICAgICAgICAgIHdoaWxlX2V4YW1wbGUsCisgICAgICAgICAgICBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgKDMsICdyZXR1cm4nKV0pCisKKyAgICBkZWYgdGVzdF8xNl9ibGFua19saW5lcyhzZWxmKToKKyAgICAgICAgZXhlYygiZGVmIGYoKTpcbiIgKyAiXG4iICogMjU2ICsgIiAgICBwYXNzIikKKyAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoCisgICAgICAgICAgICBmLAorICAgICAgICAgICAgWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICgyNTcsICdsaW5lJyksCisgICAgICAgICAgICAgKDI1NywgJ3JldHVybicpXSkKKworCitjbGFzcyBSYWlzaW5nVHJhY2VGdW5jVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0cmFjZShzZWxmLCBmcmFtZSwgZXZlbnQsIGFyZyk6CisgICAgICAgICIiIkEgdHJhY2UgZnVuY3Rpb24gdGhhdCByYWlzZXMgYW4gZXhjZXB0aW9uIGluIHJlc3BvbnNlIHRvIGEKKyAgICAgICAgc3BlY2lmaWMgdHJhY2UgZXZlbnQuIiIiCisgICAgICAgIGlmIGV2ZW50ID09IHNlbGYucmFpc2VPbkV2ZW50OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciAjIGp1c3Qgc29tZXRoaW5nIHRoYXQgaXNuJ3QgUnVudGltZUVycm9yCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZQorCisgICAgZGVmIGYoc2VsZik6CisgICAgICAgICIiIlRoZSBmdW5jdGlvbiB0byB0cmFjZTsgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGF0J3MgdGhlIGNhc2UKKyAgICAgICAgd2UncmUgdGVzdGluZywgc28gdGhhdCB0aGUgJ2V4Y2VwdGlvbicgdHJhY2UgZXZlbnQgZmlyZXMuIiIiCisgICAgICAgIGlmIHNlbGYucmFpc2VPbkV2ZW50ID09ICdleGNlcHRpb24nOgorICAgICAgICAgICAgeCA9IDAKKyAgICAgICAgICAgIHkgPSAxIC8vIHgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgcnVuX3Rlc3RfZm9yX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgIiIiVGVzdHMgdGhhdCBhbiBleGNlcHRpb24gcmFpc2VkIGluIHJlc3BvbnNlIHRvIHRoZSBnaXZlbiBldmVudCBpcworICAgICAgICBoYW5kbGVkIE9LLiIiIgorICAgICAgICBzZWxmLnJhaXNlT25FdmVudCA9IGV2ZW50CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKSArIDEpOgorICAgICAgICAgICAgICAgIHN5cy5zZXR0cmFjZShzZWxmLnRyYWNlKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCB0aHJvd24hIikKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVjdXJzaW9uIGNvdW50ZXIgbm90IHJlc2V0IikKKworICAgICMgVGVzdCB0aGUgaGFuZGxpbmcgb2YgZXhjZXB0aW9ucyByYWlzZWQgYnkgZWFjaCBraW5kIG9mIHRyYWNlIGV2ZW50LgorICAgIGRlZiB0ZXN0X2NhbGwoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfZm9yX2V2ZW50KCdjYWxsJykKKyAgICBkZWYgdGVzdF9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X2Zvcl9ldmVudCgnbGluZScpCisgICAgZGVmIHRlc3RfcmV0dXJuKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X2Zvcl9ldmVudCgncmV0dXJuJykKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfZm9yX2V2ZW50KCdleGNlcHRpb24nKQorCisgICAgZGVmIHRlc3RfdHJhc2hfc3RhY2soc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICBwcmludCBpICAjIGxpbmUgdHJhY2luZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhdCB0aGlzIGxpbmUKKworICAgICAgICBkZWYgZyhmcmFtZSwgd2h5LCBleHRyYSk6CisgICAgICAgICAgICBpZiAod2h5ID09ICdsaW5lJyBhbmQKKyAgICAgICAgICAgICAgICBmcmFtZS5mX2xpbmVubyA9PSBmLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubyArIDIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgImkgYW0gY3Jhc2hpbmciCisgICAgICAgICAgICByZXR1cm4gZworCisgICAgICAgIHN5cy5zZXR0cmFjZShnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmKCkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICMgdGhlIHRlc3QgaXMgcmVhbGx5IHRoYXQgdGhpcyBkb2Vzbid0IHNlZ2ZhdWx0OgorICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCBwcm9wYWdhdGVkIikKKworCisjICdKdW1wJyB0ZXN0czogYXNzaWduaW5nIHRvIGZyYW1lLmZfbGluZW5vIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uCisjIG1vdmVzIHRoZSBleGVjdXRpb24gcG9zaXRpb24gLSBpdCdzIGhvdyBkZWJ1Z2dlcnMgaW1wbGVtZW50IGEgSnVtcAorIyBjb21tYW5kIChha2EuICJTZXQgbmV4dCBzdGF0ZW1lbnQiKS4KKworY2xhc3MgSnVtcFRyYWNlcjoKKyAgICAiIiJEZWZpbmVzIGEgdHJhY2UgZnVuY3Rpb24gdGhhdCBqdW1wcyBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyLAorICAgIHdpdGggdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbGluZXMgb2YgdGhlIGp1bXAgYmVpbmcgZGVmaW5lZCBieQorICAgIHRoZSAnanVtcCcgcHJvcGVydHkgb2YgdGhlIGZ1bmN0aW9uIHVuZGVyIHRlc3QuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuY3Rpb24pOgorICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZnVuY3Rpb24KKyAgICAgICAgc2VsZi5qdW1wRnJvbSA9IGZ1bmN0aW9uLmp1bXBbMF0KKyAgICAgICAgc2VsZi5qdW1wVG8gPSBmdW5jdGlvbi5qdW1wWzFdCisgICAgICAgIHNlbGYuZG9uZSA9IEZhbHNlCisKKyAgICBkZWYgdHJhY2Uoc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgorICAgICAgICBpZiBub3Qgc2VsZi5kb25lIGFuZCBmcmFtZS5mX2NvZGUgPT0gc2VsZi5mdW5jdGlvbi5mdW5jX2NvZGU6CisgICAgICAgICAgICBmaXJzdExpbmUgPSBmcmFtZS5mX2NvZGUuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIGlmIGV2ZW50ID09ICdsaW5lJyBhbmQgZnJhbWUuZl9saW5lbm8gPT0gZmlyc3RMaW5lICsgc2VsZi5qdW1wRnJvbToKKyAgICAgICAgICAgICAgICAjIENvcGUgd2l0aCBub24taW50ZWdlciBzZWxmLmp1bXBUbyAoYmVjYXVzZSBvZgorICAgICAgICAgICAgICAgICMgbm9fanVtcF90b19ub25faW50ZWdlcnMgYmVsb3cpLgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUuZl9saW5lbm8gPSBmaXJzdExpbmUgKyBzZWxmLmp1bXBUbworICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLmZfbGluZW5vID0gc2VsZi5qdW1wVG8KKyAgICAgICAgICAgICAgICBzZWxmLmRvbmUgPSBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLnRyYWNlCisKKyMgVGhlIGZpcnN0IHNldCBvZiAnanVtcCcgdGVzdHMgYXJlIGZvciB0aGluZ3MgdGhhdCBhcmUgYWxsb3dlZDoKKworZGVmIGp1bXBfc2ltcGxlX2ZvcndhcmRzKG91dHB1dCk6CisgICAgb3V0cHV0LmFwcGVuZCgxKQorICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBvdXRwdXQuYXBwZW5kKDMpCisKK2p1bXBfc2ltcGxlX2ZvcndhcmRzLmp1bXAgPSAoMSwgMykKK2p1bXBfc2ltcGxlX2ZvcndhcmRzLm91dHB1dCA9IFszXQorCitkZWYganVtcF9zaW1wbGVfYmFja3dhcmRzKG91dHB1dCk6CisgICAgb3V0cHV0LmFwcGVuZCgxKQorICAgIG91dHB1dC5hcHBlbmQoMikKKworanVtcF9zaW1wbGVfYmFja3dhcmRzLmp1bXAgPSAoMiwgMSkKK2p1bXBfc2ltcGxlX2JhY2t3YXJkcy5vdXRwdXQgPSBbMSwgMSwgMl0KKworZGVmIGp1bXBfb3V0X29mX2Jsb2NrX2ZvcndhcmRzKG91dHB1dCk6CisgICAgZm9yIGkgaW4gMSwgMjoKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgICAgICBmb3IgaiBpbiBbM106ICAjIEFsc28gdGVzdHMganVtcGluZyBvdmVyIGEgYmxvY2sKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNCkKKyAgICBvdXRwdXQuYXBwZW5kKDUpCisKK2p1bXBfb3V0X29mX2Jsb2NrX2ZvcndhcmRzLmp1bXAgPSAoMywgNSkKK2p1bXBfb3V0X29mX2Jsb2NrX2ZvcndhcmRzLm91dHB1dCA9IFsyLCA1XQorCitkZWYganVtcF9vdXRfb2ZfYmxvY2tfYmFja3dhcmRzKG91dHB1dCk6CisgICAgb3V0cHV0LmFwcGVuZCgxKQorICAgIGZvciBpIGluIFsxXToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQorICAgICAgICBmb3IgaiBpbiBbMl06ICAjIEFsc28gdGVzdHMganVtcGluZyBvdmVyIGEgYmxvY2sKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNSkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCg2KQorICAgIG91dHB1dC5hcHBlbmQoNykKKworanVtcF9vdXRfb2ZfYmxvY2tfYmFja3dhcmRzLmp1bXAgPSAoNiwgMSkKK2p1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcy5vdXRwdXQgPSBbMSwgMywgNSwgMSwgMywgNSwgNiwgN10KKworZGVmIGp1bXBfdG9fY29kZWxlc3NfbGluZShvdXRwdXQpOgorICAgIG91dHB1dC5hcHBlbmQoMSkKKyAgICAjIEp1bXBpbmcgdG8gdGhpcyBsaW5lIHNob3VsZCBza2lwIHRvIHRoZSBuZXh0IG9uZS4KKyAgICBvdXRwdXQuYXBwZW5kKDMpCisKK2p1bXBfdG9fY29kZWxlc3NfbGluZS5qdW1wID0gKDEsIDIpCitqdW1wX3RvX2NvZGVsZXNzX2xpbmUub3V0cHV0ID0gWzNdCisKK2RlZiBqdW1wX3RvX3NhbWVfbGluZShvdXRwdXQpOgorICAgIG91dHB1dC5hcHBlbmQoMSkKKyAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgb3V0cHV0LmFwcGVuZCgzKQorCitqdW1wX3RvX3NhbWVfbGluZS5qdW1wID0gKDIsIDIpCitqdW1wX3RvX3NhbWVfbGluZS5vdXRwdXQgPSBbMSwgMiwgM10KKworIyBUZXN0cyBqdW1waW5nIHdpdGhpbiBhIGZpbmFsbHkgYmxvY2ssIGFuZCBvdmVyIG9uZS4KK2RlZiBqdW1wX2luX25lc3RlZF9maW5hbGx5KG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgZmluYWxseToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCg0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDgpCisgICAgICAgIG91dHB1dC5hcHBlbmQoOSkKKworanVtcF9pbl9uZXN0ZWRfZmluYWxseS5qdW1wID0gKDQsIDkpCitqdW1wX2luX25lc3RlZF9maW5hbGx5Lm91dHB1dCA9IFsyLCA5XQorCisjIFRoZSBzZWNvbmQgc2V0IG9mICdqdW1wJyB0ZXN0cyBhcmUgZm9yIHRoaW5ncyB0aGF0IGFyZSBub3QgYWxsb3dlZDoKKworZGVmIG5vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcyhvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2FmdGVyJyBpbiBzdHIoZSkpCisKK25vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcy5qdW1wID0gKDMsIDYpCitub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMub3V0cHV0ID0gWzIsIFRydWVdCisKK2RlZiBub19qdW1wX3Rvb19mYXJfYmFja3dhcmRzKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgICAgIG91dHB1dC5hcHBlbmQoMykKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnYmVmb3JlJyBpbiBzdHIoZSkpCisKK25vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMuanVtcCA9ICgzLCAtMSkKK25vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMub3V0cHV0ID0gWzIsIFRydWVdCisKKyMgVGVzdCBlYWNoIGtpbmQgb2YgJ2V4Y2VwdCcgbGluZS4KK2RlZiBub19qdW1wX3RvX2V4Y2VwdF8xKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgZXhjZXB0OgorICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnZXhjZXB0JyBpbiBzdHIoZSkpCisKK25vX2p1bXBfdG9fZXhjZXB0XzEuanVtcCA9ICgyLCAzKQorbm9fanVtcF90b19leGNlcHRfMS5vdXRwdXQgPSBbVHJ1ZV0KKworZGVmIG5vX2p1bXBfdG9fZXhjZXB0XzIob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2V4Y2VwdCcgaW4gc3RyKGUpKQorCitub19qdW1wX3RvX2V4Y2VwdF8yLmp1bXAgPSAoMiwgMykKK25vX2p1bXBfdG9fZXhjZXB0XzIub3V0cHV0ID0gW1RydWVdCisKK2RlZiBub19qdW1wX3RvX2V4Y2VwdF8zKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2V4Y2VwdCcgaW4gc3RyKGUpKQorCitub19qdW1wX3RvX2V4Y2VwdF8zLmp1bXAgPSAoMiwgMykKK25vX2p1bXBfdG9fZXhjZXB0XzMub3V0cHV0ID0gW1RydWVdCisKK2RlZiBub19qdW1wX3RvX2V4Y2VwdF80KG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBSdW50aW1lRXJyb3IpLCBlOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCdleGNlcHQnIGluIHN0cihlKSkKKworbm9fanVtcF90b19leGNlcHRfNC5qdW1wID0gKDIsIDMpCitub19qdW1wX3RvX2V4Y2VwdF80Lm91dHB1dCA9IFtUcnVlXQorCitkZWYgbm9fanVtcF9mb3J3YXJkc19pbnRvX2Jsb2NrKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgICAgIGZvciBpIGluIDEsIDI6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDQpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2ludG8nIGluIHN0cihlKSkKKworbm9fanVtcF9mb3J3YXJkc19pbnRvX2Jsb2NrLmp1bXAgPSAoMiwgNCkKK25vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jay5vdXRwdXQgPSBbVHJ1ZV0KKworZGVmIG5vX2p1bXBfYmFja3dhcmRzX2ludG9fYmxvY2sob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIGZvciBpIGluIDEsIDI6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCisgICAgICAgIG91dHB1dC5hcHBlbmQoNCkKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnaW50bycgaW4gc3RyKGUpKQorCitub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrLmp1bXAgPSAoNCwgMykKK25vX2p1bXBfYmFja3dhcmRzX2ludG9fYmxvY2sub3V0cHV0ID0gWzMsIDMsIFRydWVdCisKK2RlZiBub19qdW1wX2ludG9fZmluYWxseV9ibG9jayhvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQorICAgICAgICAgICAgeCA9IDEKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNikKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnZmluYWxseScgaW4gc3RyKGUpKQorCitub19qdW1wX2ludG9fZmluYWxseV9ibG9jay5qdW1wID0gKDQsIDYpCitub19qdW1wX2ludG9fZmluYWxseV9ibG9jay5vdXRwdXQgPSBbMywgNiwgVHJ1ZV0gICMgVGhlICdmaW5hbGx5JyBzdGlsbCBydW5zCisKK2RlZiBub19qdW1wX291dF9vZl9maW5hbGx5X2Jsb2NrKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDUpCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDYpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2ZpbmFsbHknIGluIHN0cihlKSkKKworbm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jay5qdW1wID0gKDUsIDEpCitub19qdW1wX291dF9vZl9maW5hbGx5X2Jsb2NrLm91dHB1dCA9IFszLCBUcnVlXQorCisjIFRoaXMgdmVyaWZpZXMgdGhlIGxpbmUtbnVtYmVycy1tdXN0LWJlLWludGVnZXJzIHJ1bGUuCitkZWYgbm9fanVtcF90b19ub25faW50ZWdlcnMob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnaW50ZWdlcicgaW4gc3RyKGUpKQorCitub19qdW1wX3RvX25vbl9pbnRlZ2Vycy5qdW1wID0gKDIsICJTcGFtIikKK25vX2p1bXBfdG9fbm9uX2ludGVnZXJzLm91dHB1dCA9IFtUcnVlXQorCisjIFRoaXMgdmVyaWZpZXMgdGhhdCB5b3UgY2FuJ3Qgc2V0IGZfbGluZW5vIHZpYSBfZ2V0ZnJhbWUgb3Igc2ltaWxhcgorIyB0cmlja2VyeS4KK2RlZiBub19qdW1wX3dpdGhvdXRfdHJhY2VfZnVuY3Rpb24oKToKKyAgICB0cnk6CisgICAgICAgIHByZXZpb3VzX2ZyYW1lID0gc3lzLl9nZXRmcmFtZSgpLmZfYmFjaworICAgICAgICBwcmV2aW91c19mcmFtZS5mX2xpbmVubyA9IHByZXZpb3VzX2ZyYW1lLmZfbGluZW5vCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICMgVGhpcyBpcyB0aGUgZXhjZXB0aW9uIHdlIHdhbnRlZDsgbWFrZSBzdXJlIHRoZSBlcnJvciBtZXNzYWdlCisgICAgICAgICMgdGFsa3MgYWJvdXQgdHJhY2UgZnVuY3Rpb25zLgorICAgICAgICBpZiAndHJhY2UnIG5vdCBpbiBzdHIoZSk6CisgICAgICAgICAgICByYWlzZQorICAgIGVsc2U6CisgICAgICAgICMgU29tZXRoaW5nJ3Mgd3JvbmcgLSB0aGUgZXhwZWN0ZWQgZXhjZXB0aW9uIHdhc24ndCByYWlzZWQuCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIlRyYWNlLWZ1bmN0aW9uLWxlc3MganVtcCBmYWlsZWQgdG8gZmFpbCIKKworCitjbGFzcyBKdW1wVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjb21wYXJlX2p1bXBfb3V0cHV0KHNlbGYsIGV4cGVjdGVkLCByZWNlaXZlZCk6CisgICAgICAgIGlmIHJlY2VpdmVkICE9IGV4cGVjdGVkOgorICAgICAgICAgICAgc2VsZi5mYWlsKCAiT3V0cHV0cyBkb24ndCBtYXRjaDpcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQ6ICIgKyByZXByKGV4cGVjdGVkKSArICJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAiUmVjZWl2ZWQ6ICIgKyByZXByKHJlY2VpdmVkKSkKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCBmdW5jKToKKyAgICAgICAgdHJhY2VyID0gSnVtcFRyYWNlcihmdW5jKQorICAgICAgICBzeXMuc2V0dHJhY2UodHJhY2VyLnRyYWNlKQorICAgICAgICBvdXRwdXQgPSBbXQorICAgICAgICBmdW5jKG91dHB1dCkKKyAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCisgICAgICAgIHNlbGYuY29tcGFyZV9qdW1wX291dHB1dChmdW5jLm91dHB1dCwgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfMDFfanVtcF9zaW1wbGVfZm9yd2FyZHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9zaW1wbGVfZm9yd2FyZHMpCisgICAgZGVmIHRlc3RfMDJfanVtcF9zaW1wbGVfYmFja3dhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfc2ltcGxlX2JhY2t3YXJkcykKKyAgICBkZWYgdGVzdF8wM19qdW1wX291dF9vZl9ibG9ja19mb3J3YXJkcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX291dF9vZl9ibG9ja19mb3J3YXJkcykKKyAgICBkZWYgdGVzdF8wNF9qdW1wX291dF9vZl9ibG9ja19iYWNrd2FyZHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9vdXRfb2ZfYmxvY2tfYmFja3dhcmRzKQorICAgIGRlZiB0ZXN0XzA1X2p1bXBfdG9fY29kZWxlc3NfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX3RvX2NvZGVsZXNzX2xpbmUpCisgICAgZGVmIHRlc3RfMDZfanVtcF90b19zYW1lX2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF90b19zYW1lX2xpbmUpCisgICAgZGVmIHRlc3RfMDdfanVtcF9pbl9uZXN0ZWRfZmluYWxseShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX2luX25lc3RlZF9maW5hbGx5KQorICAgIGRlZiB0ZXN0XzA4X25vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMpCisgICAgZGVmIHRlc3RfMDlfbm9fanVtcF90b29fZmFyX2JhY2t3YXJkcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3Rvb19mYXJfYmFja3dhcmRzKQorICAgIGRlZiB0ZXN0XzEwX25vX2p1bXBfdG9fZXhjZXB0XzEoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b19leGNlcHRfMSkKKyAgICBkZWYgdGVzdF8xMV9ub19qdW1wX3RvX2V4Y2VwdF8yKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fZXhjZXB0XzIpCisgICAgZGVmIHRlc3RfMTJfbm9fanVtcF90b19leGNlcHRfMyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3RvX2V4Y2VwdF8zKQorICAgIGRlZiB0ZXN0XzEzX25vX2p1bXBfdG9fZXhjZXB0XzQoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b19leGNlcHRfNCkKKyAgICBkZWYgdGVzdF8xNF9ub19qdW1wX2ZvcndhcmRzX2ludG9fYmxvY2soc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF9mb3J3YXJkc19pbnRvX2Jsb2NrKQorICAgIGRlZiB0ZXN0XzE1X25vX2p1bXBfYmFja3dhcmRzX2ludG9fYmxvY2soc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF9iYWNrd2FyZHNfaW50b19ibG9jaykKKyAgICBkZWYgdGVzdF8xNl9ub19qdW1wX2ludG9fZmluYWxseV9ibG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX2ludG9fZmluYWxseV9ibG9jaykKKyAgICBkZWYgdGVzdF8xN19ub19qdW1wX291dF9vZl9maW5hbGx5X2Jsb2NrKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfb3V0X29mX2ZpbmFsbHlfYmxvY2spCisgICAgZGVmIHRlc3RfMThfbm9fanVtcF90b19ub25faW50ZWdlcnMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b19ub25faW50ZWdlcnMpCisgICAgZGVmIHRlc3RfMTlfbm9fanVtcF93aXRob3V0X3RyYWNlX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBub19qdW1wX3dpdGhvdXRfdHJhY2VfZnVuY3Rpb24oKQorCisgICAgZGVmIHRlc3RfMjBfbGFyZ2VfZnVuY3Rpb24oc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKCIiImRlZiBmKG91dHB1dCk6ICAgICAgICAjIGxpbmUgMAorICAgICAgICAgICAgeCA9IDAgICAgICAgICAgICAgICAgICAgICAjIGxpbmUgMQorICAgICAgICAgICAgeSA9IDEgICAgICAgICAgICAgICAgICAgICAjIGxpbmUgMgorICAgICAgICAgICAgJycnICAgICAgICAgICAgICAgICAgICAgICAjIGxpbmUgMworICAgICAgICAgICAgJXMgICAgICAgICAgICAgICAgICAgICAgICAjIGxpbmVzIDQtMTAwNAorICAgICAgICAgICAgJycnICAgICAgICAgICAgICAgICAgICAgICAjIGxpbmUgMTAwNQorICAgICAgICAgICAgeCArPSAxICAgICAgICAgICAgICAgICAgICAjIGxpbmUgMTAwNgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh4KSAgICAgICAgICAjIGxpbmUgMTAwNworICAgICAgICAgICAgcmV0dXJuIiIiICUgKCdcbicgKiAxMDAwLCksIGQpCisgICAgICAgIGYgPSBkWydmJ10KKworICAgICAgICBmLmp1bXAgPSAoMiwgMTAwNykKKyAgICAgICAgZi5vdXRwdXQgPSBbMF0KKyAgICAgICAgc2VsZi5ydW5fdGVzdChmKQorCisgICAgZGVmIHRlc3RfanVtcF90b19maXJzdGxpbmVubyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3RzIHRoYXQgUERCIGNhbiBqdW1wIGJhY2sgdG8gdGhlIGZpcnN0IGxpbmUgaW4gYQorICAgICAgICAjIGZpbGUuICBTZWUgaXNzdWUgIzE2ODk0NTguICBJdCBjYW4gb25seSBiZSB0cmlnZ2VyZWQgaW4gYQorICAgICAgICAjIGZ1bmN0aW9uIGNhbGwgaWYgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgb24gYSBzaW5nbGUgbGluZS4KKyAgICAgICAgY29kZSA9IGNvbXBpbGUoIiIiCisjIENvbW1lbnRzIGRvbid0IGNvdW50Lgorb3V0cHV0LmFwcGVuZCgyKSAgIyBmaXJzdGxpbmVubyBpcyBoZXJlLgorb3V0cHV0LmFwcGVuZCgzKQorb3V0cHV0LmFwcGVuZCg0KQorIiIiLCAiPGZha2UgbW9kdWxlPiIsICJleGVjIikKKyAgICAgICAgY2xhc3MgZmFrZV9mdW5jdGlvbjoKKyAgICAgICAgICAgIGZ1bmNfY29kZSA9IGNvZGUKKyAgICAgICAgICAgIGp1bXAgPSAoMiwgMCkKKyAgICAgICAgdHJhY2VyID0gSnVtcFRyYWNlcihmYWtlX2Z1bmN0aW9uKQorICAgICAgICBzeXMuc2V0dHJhY2UodHJhY2VyLnRyYWNlKQorICAgICAgICBuYW1lc3BhY2UgPSB7Im91dHB1dCI6IFtdfQorICAgICAgICBleGVjIGNvZGUgaW4gbmFtZXNwYWNlCisgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorICAgICAgICBzZWxmLmNvbXBhcmVfanVtcF9vdXRwdXQoWzIsIDMsIDIsIDMsIDRdLCBuYW1lc3BhY2VbIm91dHB1dCJdKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBUcmFjZVRlc3RDYXNlLAorICAgICAgICBSYWlzaW5nVHJhY2VGdW5jVGVzdENhc2UsCisgICAgICAgIEp1bXBUZXN0Q2FzZQorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkgYi9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDJlYjJmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKQEAgLTAsMCArMSwyNzIgQEAKKyIiIlRlc3RzIGZvciAnc2l0ZScuCisKK1Rlc3RzIGFzc3VtZSB0aGUgaW5pdGlhbCBwYXRocyBpbiBzeXMucGF0aCBvbmNlIHRoZSBpbnRlcnByZXRlciBoYXMgYmVndW4KK2V4ZWN1dGluZyBoYXZlIG5vdCBiZWVuIHJlbW92ZWQuCisKKyIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitmcm9tIGNvcHkgaW1wb3J0IGNvcHksIGRlZXBjb3B5CisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssIGdldF9hdHRyaWJ1dGUKKworaW1wb3J0IHN5c2NvbmZpZworZnJvbSBzeXNjb25maWcgaW1wb3J0IChnZXRfcGF0aHMsIGdldF9wbGF0Zm9ybSwgZ2V0X2NvbmZpZ192YXJzLAorICAgICAgICAgICAgICAgICAgICAgICBnZXRfcGF0aCwgZ2V0X3BhdGhfbmFtZXMsIF9JTlNUQUxMX1NDSEVNRVMsCisgICAgICAgICAgICAgICAgICAgICAgIF9nZXRfZGVmYXVsdF9zY2hlbWUsIF9leHBhbmRfdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3NjaGVtZV9uYW1lcywgZ2V0X2NvbmZpZ192YXIpCisKK2NsYXNzIFRlc3RTeXNDb25maWcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJNYWtlIGEgY29weSBvZiBzeXMucGF0aCIiIgorICAgICAgICBzdXBlcihUZXN0U3lzQ29uZmlnLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuc3lzX3BhdGggPSBzeXMucGF0aFs6XQorICAgICAgICBzZWxmLm1ha2VmaWxlID0gTm9uZQorICAgICAgICAjIHBhdGNoaW5nIG9zLnVuYW1lCisgICAgICAgIGlmIGhhc2F0dHIob3MsICd1bmFtZScpOgorICAgICAgICAgICAgc2VsZi51bmFtZSA9IG9zLnVuYW1lCisgICAgICAgICAgICBzZWxmLl91bmFtZSA9IG9zLnVuYW1lKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudW5hbWUgPSBOb25lCisgICAgICAgICAgICBzZWxmLl91bmFtZSA9IE5vbmUKKyAgICAgICAgb3MudW5hbWUgPSBzZWxmLl9nZXRfdW5hbWUKKyAgICAgICAgIyBzYXZpbmcgdGhlIGVudmlyb25tZW50CisgICAgICAgIHNlbGYubmFtZSA9IG9zLm5hbWUKKyAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHN5cy5wbGF0Zm9ybQorICAgICAgICBzZWxmLnZlcnNpb24gPSBzeXMudmVyc2lvbgorICAgICAgICBzZWxmLnNlcCA9IG9zLnNlcAorICAgICAgICBzZWxmLmpvaW4gPSBvcy5wYXRoLmpvaW4KKyAgICAgICAgc2VsZi5pc2FicyA9IG9zLnBhdGguaXNhYnMKKyAgICAgICAgc2VsZi5zcGxpdGRyaXZlID0gb3MucGF0aC5zcGxpdGRyaXZlCisgICAgICAgIHNlbGYuX2NvbmZpZ192YXJzID0gY29weShzeXNjb25maWcuX0NPTkZJR19WQVJTKQorICAgICAgICBzZWxmLm9sZF9lbnZpcm9uID0gZGVlcGNvcHkob3MuZW52aXJvbikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIiIiUmVzdG9yZSBzeXMucGF0aCIiIgorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYuc3lzX3BhdGgKKyAgICAgICAgaWYgc2VsZi5tYWtlZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLm1ha2VmaWxlKQorICAgICAgICBzZWxmLl9jbGVhbnVwX3Rlc3RmbigpCisgICAgICAgIGlmIHNlbGYudW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcy51bmFtZSA9IHNlbGYudW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlbCBvcy51bmFtZQorICAgICAgICBvcy5uYW1lID0gc2VsZi5uYW1lCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9IHNlbGYucGxhdGZvcm0KKyAgICAgICAgc3lzLnZlcnNpb24gPSBzZWxmLnZlcnNpb24KKyAgICAgICAgb3Muc2VwID0gc2VsZi5zZXAKKyAgICAgICAgb3MucGF0aC5qb2luID0gc2VsZi5qb2luCisgICAgICAgIG9zLnBhdGguaXNhYnMgPSBzZWxmLmlzYWJzCisgICAgICAgIG9zLnBhdGguc3BsaXRkcml2ZSA9IHNlbGYuc3BsaXRkcml2ZQorICAgICAgICBzeXNjb25maWcuX0NPTkZJR19WQVJTID0gY29weShzZWxmLl9jb25maWdfdmFycykKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5vbGRfZW52aXJvbi5pdGVtcygpOgorICAgICAgICAgICAgaWYgb3MuZW52aXJvbi5nZXQoa2V5KSAhPSB2YWx1ZToKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0gPSB2YWx1ZQorCisgICAgICAgIGZvciBrZXkgaW4gb3MuZW52aXJvbi5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYub2xkX2Vudmlyb246CisgICAgICAgICAgICAgICAgZGVsIG9zLmVudmlyb25ba2V5XQorCisgICAgICAgIHN1cGVyKFRlc3RTeXNDb25maWcsIHNlbGYpLnRlYXJEb3duKCkKKworICAgIGRlZiBfc2V0X3VuYW1lKHNlbGYsIHVuYW1lKToKKyAgICAgICAgc2VsZi5fdW5hbWUgPSB1bmFtZQorCisgICAgZGVmIF9nZXRfdW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl91bmFtZQorCisgICAgZGVmIF9jbGVhbnVwX3Rlc3RmbihzZWxmKToKKyAgICAgICAgcGF0aCA9IFRFU1RGTgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCisKKyAgICBkZWYgdGVzdF9nZXRfcGF0aF9uYW1lcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGF0aF9uYW1lcygpLCBzeXNjb25maWcuX1NDSEVNRV9LRVlTKQorCisgICAgZGVmIHRlc3RfZ2V0X3BhdGhzKHNlbGYpOgorICAgICAgICBzY2hlbWUgPSBnZXRfcGF0aHMoKQorICAgICAgICBkZWZhdWx0X3NjaGVtZSA9IF9nZXRfZGVmYXVsdF9zY2hlbWUoKQorICAgICAgICB3YW50ZWQgPSBfZXhwYW5kX3ZhcnMoZGVmYXVsdF9zY2hlbWUsIE5vbmUpCisgICAgICAgIHdhbnRlZCA9IHdhbnRlZC5pdGVtcygpCisgICAgICAgIHdhbnRlZC5zb3J0KCkKKyAgICAgICAgc2NoZW1lID0gc2NoZW1lLml0ZW1zKCkKKyAgICAgICAgc2NoZW1lLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjaGVtZSwgd2FudGVkKQorCisgICAgZGVmIHRlc3RfZ2V0X3BhdGgoc2VsZik6CisgICAgICAgICMgeHh4IG1ha2UgcmVhbCB0ZXN0cyBoZXJlCisgICAgICAgIGZvciBzY2hlbWUgaW4gX0lOU1RBTExfU0NIRU1FUzoKKyAgICAgICAgICAgIGZvciBuYW1lIGluIF9JTlNUQUxMX1NDSEVNRVNbc2NoZW1lXToKKyAgICAgICAgICAgICAgICByZXMgPSBnZXRfcGF0aChuYW1lLCBzY2hlbWUpCisKKyAgICBkZWYgdGVzdF9nZXRfY29uZmlnX3ZhcnMoc2VsZik6CisgICAgICAgIGN2YXJzID0gZ2V0X2NvbmZpZ192YXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGN2YXJzLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3ZhcnMpCisKKyAgICBkZWYgdGVzdF9nZXRfcGxhdGZvcm0oc2VsZik6CisgICAgICAgICMgd2luZG93cyBYUCwgMzJiaXRzCisgICAgICAgIG9zLm5hbWUgPSAnbnQnCisgICAgICAgIHN5cy52ZXJzaW9uID0gKCcyLjQuNCAoIzcxLCBPY3QgMTggMjAwNiwgMDg6MzQ6NDMpICcKKyAgICAgICAgICAgICAgICAgICAgICAgJ1tNU0Mgdi4xMzEwIDMyIGJpdCAoSW50ZWwpXScpCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9ICd3aW4zMicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ3dpbjMyJykKKworICAgICAgICAjIHdpbmRvd3MgWFAsIGFtZDY0CisgICAgICAgIG9zLm5hbWUgPSAnbnQnCisgICAgICAgIHN5cy52ZXJzaW9uID0gKCcyLjQuNCAoIzcxLCBPY3QgMTggMjAwNiwgMDg6MzQ6NDMpICcKKyAgICAgICAgICAgICAgICAgICAgICAgJ1tNU0Mgdi4xMzEwIDMyIGJpdCAoQW1kNjQpXScpCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9ICd3aW4zMicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ3dpbi1hbWQ2NCcpCisKKyAgICAgICAgIyB3aW5kb3dzIFhQLCBpdGFuaXVtCisgICAgICAgIG9zLm5hbWUgPSAnbnQnCisgICAgICAgIHN5cy52ZXJzaW9uID0gKCcyLjQuNCAoIzcxLCBPY3QgMTggMjAwNiwgMDg6MzQ6NDMpICcKKyAgICAgICAgICAgICAgICAgICAgICAgJ1tNU0Mgdi4xMzEwIDMyIGJpdCAoSXRhbml1bSldJykKKyAgICAgICAgc3lzLnBsYXRmb3JtID0gJ3dpbjMyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnd2luLWlhNjQnKQorCisgICAgICAgICMgbWFjYm9vaworICAgICAgICBvcy5uYW1lID0gJ3Bvc2l4JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi41IChyMjU6NTE5MTgsIFNlcCAxOSAyMDA2LCAwODo0OToxMykgJworICAgICAgICAgICAgICAgICAgICAgICAnXG5bR0NDIDQuMC4xIChBcHBsZSBDb21wdXRlciwgSW5jLiBidWlsZCA1MzQxKV0nKQorICAgICAgICBzeXMucGxhdGZvcm0gPSAnZGFyd2luJworICAgICAgICBzZWxmLl9zZXRfdW5hbWUoKCdEYXJ3aW4nLCAnbWFjemlhZGUnLCAnOC4xMS4xJywKKyAgICAgICAgICAgICAgICAgICAoJ0RhcndpbiBLZXJuZWwgVmVyc2lvbiA4LjExLjE6ICcKKyAgICAgICAgICAgICAgICAgICAgJ1dlZCBPY3QgMTAgMTg6MjM6MjggUERUIDIwMDc7ICcKKyAgICAgICAgICAgICAgICAgICAgJ3Jvb3Q6eG51LTc5Mi4yNS4yMH4xL1JFTEVBU0VfSTM4NicpLCAnUG93ZXJQQycpKQorICAgICAgICBvcy5lbnZpcm9uWydNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnXSA9ICcxMC4zJworCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWZuby1zdHJpY3QtYWxpYXNpbmcgLUROREVCVUcgLWcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMnKQorCisgICAgICAgIG1heGludCA9IHN5cy5tYXhpbnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLm1heGludCA9IDIxNDc0ODM2NDcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuMy1wcGMnKQorICAgICAgICAgICAgc3lzLm1heGludCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuMy1wcGM2NCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMubWF4aW50ID0gbWF4aW50CisKKworICAgICAgICBzZWxmLl9zZXRfdW5hbWUoKCdEYXJ3aW4nLCAnbWFjemlhZGUnLCAnOC4xMS4xJywKKyAgICAgICAgICAgICAgICAgICAoJ0RhcndpbiBLZXJuZWwgVmVyc2lvbiA4LjExLjE6ICcKKyAgICAgICAgICAgICAgICAgICAgJ1dlZCBPY3QgMTAgMTg6MjM6MjggUERUIDIwMDc7ICcKKyAgICAgICAgICAgICAgICAgICAgJ3Jvb3Q6eG51LTc5Mi4yNS4yMH4xL1JFTEVBU0VfSTM4NicpLCAnaTM4NicpKQorICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10gPSAnMTAuMycKKyAgICAgICAgb3MuZW52aXJvblsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10gPSAnMTAuMycKKworICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1ETkRFQlVHIC1nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZndyYXB2IC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzJykKKworICAgICAgICBtYXhpbnQgPSBzeXMubWF4aW50CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5tYXhpbnQgPSAyMTQ3NDgzNjQ3CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjMtaTM4NicpCisgICAgICAgICAgICBzeXMubWF4aW50ID0gOTIyMzM3MjAzNjg1NDc3NTgwNworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC4zLXg4Nl82NCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMubWF4aW50ID0gbWF4aW50CisKKyAgICAgICAgIyBtYWNib29rIHdpdGggZmF0IGJpbmFyaWVzIChmYXQsIHVuaXZlcnNhbCBvciBmYXQ2NCkKKyAgICAgICAgb3MuZW52aXJvblsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10gPSAnMTAuNCcKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCBwcGMgLWFyY2ggaTM4NiAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWR5bmFtaWMgLUROREVCVUcgLWcgLU8zJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjQtZmF0JykKKworICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1hcmNoIHg4Nl82NCAtYXJjaCBpMzg2IC1pc3lzcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZHluYW1pYyAtRE5ERUJVRyAtZyAtTzMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuNC1pbnRlbCcpCisKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCB4ODZfNjQgLWFyY2ggcHBjIC1hcmNoIGkzODYgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuNC1mYXQzJykKKworICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCAtYXJjaCBwcGMgLWFyY2ggaTM4NiAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWR5bmFtaWMgLUROREVCVUcgLWcgLU8zJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LXVuaXZlcnNhbCcpCisKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCB4ODZfNjQgLWFyY2ggcHBjNjQgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LWZhdDY0JykKKworICAgICAgICBmb3IgYXJjaCBpbiAoJ3BwYycsICdpMzg2JywgJ3g4Nl82NCcsICdwcGM2NCcpOgorICAgICAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCAlcyAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWR5bmFtaWMgLUROREVCVUcgLWcgLU8zJyUoYXJjaCwpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjQtJXMnJShhcmNoLCkpCisKKyAgICAgICAgIyBsaW51eCBkZWJpYW4gc2FyZ2UKKyAgICAgICAgb3MubmFtZSA9ICdwb3NpeCcKKyAgICAgICAgc3lzLnZlcnNpb24gPSAoJzIuMy41ICgjMSwgSnVsICA0IDIwMDcsIDE3OjI4OjU5KSAnCisgICAgICAgICAgICAgICAgICAgICAgICdcbltHQ0MgNC4xLjIgMjAwNjExMTUgKHByZXJlbGVhc2UpIChEZWJpYW4gNC4xLjEtMjEpXScpCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9ICdsaW51eDInCisgICAgICAgIHNlbGYuX3NldF91bmFtZSgoJ0xpbnV4JywgJ2FnbGFlJywgJzIuNi4yMS4xZGVkaWJveC1yNycsCisgICAgICAgICAgICAgICAgICAgICcjMSBNb24gQXByIDMwIDE3OjI1OjM4IENFU1QgMjAwNycsICdpNjg2JykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ2xpbnV4LWk2ODYnKQorCisgICAgICAgICMgWFhYIG1vcmUgcGxhdGZvcm1zIHRvIHRlc3RzIGhlcmUKKworICAgIGRlZiB0ZXN0X2dldF9jb25maWdfaF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgY29uZmlnX2ggPSBzeXNjb25maWcuZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNvbmZpZ19oKSwgY29uZmlnX2gpCisKKyAgICBkZWYgdGVzdF9nZXRfc2NoZW1lX25hbWVzKHNlbGYpOgorICAgICAgICB3YW50ZWQgPSAoJ250JywgJ250X3VzZXInLCAnb3MyJywgJ29zMl9ob21lJywgJ29zeF9mcmFtZXdvcmtfdXNlcicsCisgICAgICAgICAgICAgICAgICAncG9zaXhfaG9tZScsICdwb3NpeF9wcmVmaXgnLCAncG9zaXhfdXNlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3NjaGVtZV9uYW1lcygpLCB3YW50ZWQpCisKKyAgICBkZWYgdGVzdF9zeW1saW5rKHNlbGYpOgorICAgICAgICAjIElzc3VlIDc4ODAKKyAgICAgICAgc3ltbGluayA9IGdldF9hdHRyaWJ1dGUob3MsICJzeW1saW5rIikKKyAgICAgICAgZGVmIGdldChweXRob24pOgorICAgICAgICAgICAgY21kID0gW3B5dGhvbiwgJy1jJywKKyAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQgc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpJ10KKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIHJldHVybiBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgcmVhbCA9IG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIGxpbmsgPSBvcy5wYXRoLmFic3BhdGgoVEVTVEZOKQorICAgICAgICBzeW1saW5rKHJlYWwsIGxpbmspCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0KHJlYWwpLCBnZXQobGluaykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB1bmxpbmsobGluaykKKworICAgIGRlZiB0ZXN0X3VzZXJfc2ltaWxhcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA4NzU5IDogbWFrZSBzdXJlIHRoZSBwb3NpeCBzY2hlbWUgZm9yIHRoZSB1c2VycworICAgICAgICAjIGlzIHNpbWlsYXIgdG8gdGhlIGdsb2JhbCBwb3NpeF9wcmVmaXggb25lCisgICAgICAgIGJhc2UgPSBnZXRfY29uZmlnX3ZhcignYmFzZScpCisgICAgICAgIHVzZXIgPSBnZXRfY29uZmlnX3ZhcigndXNlcmJhc2UnKQorICAgICAgICBmb3IgbmFtZSBpbiAoJ3N0ZGxpYicsICdwbGF0c3RkbGliJywgJ3B1cmVsaWInLCAncGxhdGxpYicpOgorICAgICAgICAgICAgZ2xvYmFsX3BhdGggPSBnZXRfcGF0aChuYW1lLCAncG9zaXhfcHJlZml4JykKKyAgICAgICAgICAgIHVzZXJfcGF0aCA9IGdldF9wYXRoKG5hbWUsICdwb3NpeF91c2VyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXNlcl9wYXRoLCBnbG9iYWxfcGF0aC5yZXBsYWNlKGJhc2UsIHVzZXIpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRlc3RTeXNDb25maWcpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQppbmRleCA5MDliMDhjLi5jZGE1MjYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CkBAIC0zLDcgKzMsNiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCi1pbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBTdHJpbmdJTwogZnJvbSBoYXNobGliIGltcG9ydCBtZDUKIGltcG9ydCBlcnJubwpAQCAtNTUsNyArNTQsNyBAQAogICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9yZWd0eXBlIikKICAgICAgICAgZm9iaiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8pCiAgICAgICAgIGRhdGEgPSBmb2JqLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydF8oKGxlbihkYXRhKSwgbWQ1c3VtKGRhdGEpKSA9PSAodGFyaW5mby5zaXplLCBtZDVfcmVndHlwZSksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgobGVuKGRhdGEpLCBtZDVzdW0oZGF0YSkpID09ICh0YXJpbmZvLnNpemUsIG1kNV9yZWd0eXBlKSwKICAgICAgICAgICAgICAgICAicmVndWxhciBmaWxlIGV4dHJhY3Rpb24gZmFpbGVkIikKIAogICAgIGRlZiB0ZXN0X2ZpbGVvYmpfcmVhZGxpbmVzKHNlbGYpOgpAQCAtNjYsMTEgKzY1LDExIEBACiAKICAgICAgICAgbGluZXMxID0gZm9iajEucmVhZGxpbmVzKCkKICAgICAgICAgbGluZXMyID0gZm9iajIucmVhZGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxpbmVzMSA9PSBsaW5lczIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lczEgPT0gbGluZXMyLAogICAgICAgICAgICAgICAgICJmaWxlb2JqLnJlYWRsaW5lcygpIGZhaWxlZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4obGluZXMyKSA9PSAxMTQsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obGluZXMyKSA9PSAxMTQsCiAgICAgICAgICAgICAgICAgImZpbGVvYmoucmVhZGxpbmVzKCkgZmFpbGVkIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxpbmVzMls4M10gPT0gXAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXMyWzgzXSA9PQogICAgICAgICAgICAgICAgICJJIHdpbGwgZ2xhZGx5IGFkbWl0IHRoYXQgUHl0aG9uIGlzIG5vdCB0aGUgZmFzdGVzdCBydW5uaW5nIHNjcmlwdGluZyBsYW5ndWFnZS5cbiIsCiAgICAgICAgICAgICAgICAgImZpbGVvYmoucmVhZGxpbmVzKCkgZmFpbGVkIikKIApAQCAtODEsNyArODAsNyBAQAogICAgICAgICBmb2JqMiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8pCiAgICAgICAgIGxpbmVzMSA9IGZvYmoxLnJlYWRsaW5lcygpCiAgICAgICAgIGxpbmVzMiA9IFtsaW5lIGZvciBsaW5lIGluIGZvYmoyXQotICAgICAgICBzZWxmLmFzc2VydF8obGluZXMxID09IGxpbmVzMiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzMSA9PSBsaW5lczIsCiAgICAgICAgICAgICAgICAgICAgICAiZmlsZW9iai5fX2l0ZXJfXygpIGZhaWxlZCIpCiAKICAgICBkZWYgdGVzdF9maWxlb2JqX3NlZWsoc2VsZik6CkBAIC05NSw0OCArOTQsMTE0IEBACiAKICAgICAgICAgdGV4dCA9IGZvYmoucmVhZCgpCiAgICAgICAgIGZvYmouc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydF8oMCA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPT0gZm9iai50ZWxsKCksCiAgICAgICAgICAgICAgICAgICAgICAic2VlaygpIHRvIGZpbGUncyBzdGFydCBmYWlsZWQiKQogICAgICAgICBmb2JqLnNlZWsoMjA0OCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDIwNDggPT0gZm9iai50ZWxsKCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyMDQ4ID09IGZvYmoudGVsbCgpLAogICAgICAgICAgICAgICAgICAgICAgInNlZWsoKSB0byBhYnNvbHV0ZSBwb3NpdGlvbiBmYWlsZWQiKQogICAgICAgICBmb2JqLnNlZWsoLTEwMjQsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygxMDI0ID09IGZvYmoudGVsbCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoMTAyNCA9PSBmb2JqLnRlbGwoKSwKICAgICAgICAgICAgICAgICAgICAgICJzZWVrKCkgdG8gbmVnYXRpdmUgcmVsYXRpdmUgcG9zaXRpb24gZmFpbGVkIikKICAgICAgICAgZm9iai5zZWVrKDEwMjQsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygyMDQ4ID09IGZvYmoudGVsbCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoMjA0OCA9PSBmb2JqLnRlbGwoKSwKICAgICAgICAgICAgICAgICAgICAgICJzZWVrKCkgdG8gcG9zaXRpdmUgcmVsYXRpdmUgcG9zaXRpb24gZmFpbGVkIikKICAgICAgICAgcyA9IGZvYmoucmVhZCgxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMgPT0gZGF0YVsyMDQ4OjIwNThdLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocyA9PSBkYXRhWzIwNDg6MjA1OF0sCiAgICAgICAgICAgICAgICAgICAgICAicmVhZCgpIGFmdGVyIHNlZWsgZmFpbGVkIikKICAgICAgICAgZm9iai5zZWVrKDAsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0YXJpbmZvLnNpemUgPT0gZm9iai50ZWxsKCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJpbmZvLnNpemUgPT0gZm9iai50ZWxsKCksCiAgICAgICAgICAgICAgICAgICAgICAic2VlaygpIHRvIGZpbGUncyBlbmQgZmFpbGVkIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZvYmoucmVhZCgpID09ICIiLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9iai5yZWFkKCkgPT0gIiIsCiAgICAgICAgICAgICAgICAgICAgICAicmVhZCgpIGF0IGZpbGUncyBlbmQgZGlkIG5vdCByZXR1cm4gZW1wdHkgc3RyaW5nIikKICAgICAgICAgZm9iai5zZWVrKC10YXJpbmZvLnNpemUsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygwID09IGZvYmoudGVsbCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA9PSBmb2JqLnRlbGwoKSwKICAgICAgICAgICAgICAgICAgICAgICJyZWxhdGl2ZSBzZWVrKCkgdG8gZmlsZSdzIHN0YXJ0IGZhaWxlZCIpCiAgICAgICAgIGZvYmouc2Vlayg1MTIpCiAgICAgICAgIHMxID0gZm9iai5yZWFkbGluZXMoKQogICAgICAgICBmb2JqLnNlZWsoNTEyKQogICAgICAgICBzMiA9IGZvYmoucmVhZGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMxID09IHMyLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoczEgPT0gczIsCiAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmVzKCkgYWZ0ZXIgc2VlayBmYWlsZWQiKQogICAgICAgICBmb2JqLnNlZWsoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihmb2JqLnJlYWRsaW5lKCkpID09IGZvYmoudGVsbCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZvYmoucmVhZGxpbmUoKSkgPT0gZm9iai50ZWxsKCksCiAgICAgICAgICAgICAgICAgICAgICAidGVsbCgpIGFmdGVyIHJlYWRsaW5lKCkgZmFpbGVkIikKICAgICAgICAgZm9iai5zZWVrKDUxMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihmb2JqLnJlYWRsaW5lKCkpICsgNTEyID09IGZvYmoudGVsbCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZvYmoucmVhZGxpbmUoKSkgKyA1MTIgPT0gZm9iai50ZWxsKCksCiAgICAgICAgICAgICAgICAgICAgICAidGVsbCgpIGFmdGVyIHNlZWsoKSBhbmQgcmVhZGxpbmUoKSBmYWlsZWQiKQogICAgICAgICBmb2JqLnNlZWsoMCkKICAgICAgICAgbGluZSA9IGZvYmoucmVhZGxpbmUoKQotICAgICAgICBzZWxmLmFzc2VydF8oZm9iai5yZWFkKCkgPT0gZGF0YVtsZW4obGluZSk6XSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvYmoucmVhZCgpID09IGRhdGFbbGVuKGxpbmUpOl0sCiAgICAgICAgICAgICAgICAgICAgICAicmVhZCgpIGFmdGVyIHJlYWRsaW5lKCkgZmFpbGVkIikKICAgICAgICAgZm9iai5jbG9zZSgpCiAKKyAgICAjIFRlc3QgaWYgc3ltYm9saWMgYW5kIGhhcmQgbGlua3MgYXJlIHJlc29sdmVkIGJ5IGV4dHJhY3RmaWxlKCkuICBUaGUKKyAgICAjIHRlc3QgbGluayBtZW1iZXJzIGVhY2ggcG9pbnQgdG8gYSByZWd1bGFyIG1lbWJlciB3aG9zZSBkYXRhIGlzCisgICAgIyBzdXBwb3NlZCB0byBiZSBleHBvcnRlZC4KKyAgICBkZWYgX3Rlc3RfZmlsZW9ial9saW5rKHNlbGYsIGxua3R5cGUsIHJlZ3R5cGUpOgorICAgICAgICBhID0gc2VsZi50YXIuZXh0cmFjdGZpbGUobG5rdHlwZSkKKyAgICAgICAgYiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHJlZ3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5uYW1lLCBiLm5hbWUpCiAKLWNsYXNzIE1pc2NSZWFkVGVzdChSZWFkVGVzdCk6CisgICAgZGVmIHRlc3RfZmlsZW9ial9saW5rMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlb2JqX2xpbmsoInVzdGFyL2xua3R5cGUiLCAidXN0YXIvcmVndHlwZSIpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX2xpbmsyKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVvYmpfbGluaygiLi91c3Rhci9saW5rdGVzdDIvbG5rdHlwZSIsICJ1c3Rhci9saW5rdGVzdDEvcmVndHlwZSIpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX3N5bWxpbmsxKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVvYmpfbGluaygidXN0YXIvc3ltdHlwZSIsICJ1c3Rhci9yZWd0eXBlIikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfc3ltbGluazIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZmlsZW9ial9saW5rKCIuL3VzdGFyL2xpbmt0ZXN0Mi9zeW10eXBlIiwgInVzdGFyL2xpbmt0ZXN0MS9yZWd0eXBlIikKKworCitjbGFzcyBDb21tb25SZWFkVGVzdChSZWFkVGVzdCk6CisKKyAgICBkZWYgdGVzdF9lbXB0eV90YXJmaWxlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGlzc3VlNjEyMzogQWxsb3cgb3BlbmluZyBlbXB0eSBhcmNoaXZlcy4KKyAgICAgICAgIyBUaGlzIHRlc3QgY2hlY2tzIGlmIHRhcmZpbGUub3BlbigpIGlzIGFibGUgdG8gb3BlbiBhbiBlbXB0eSB0YXIKKyAgICAgICAgIyBhcmNoaXZlIHN1Y2Nlc3NmdWxseS4gTm90ZSB0aGF0IGFuIGVtcHR5IHRhciBhcmNoaXZlIGlzIG5vdCB0aGUKKyAgICAgICAgIyBzYW1lIGFzIGFuIGVtcHR5IGZpbGUhCisgICAgICAgIHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUucmVwbGFjZSgiciIsICJ3IikpLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgICAgIHRhci5nZXRuYW1lcygpCisgICAgICAgIGV4Y2VwdCB0YXJmaWxlLlJlYWRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidGFyZmlsZS5vcGVuKCkgZmFpbGVkIG9uIGVtcHR5IGFyY2hpdmUiKQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCh0YXIuZ2V0bWVtYmVycygpLCBbXSkKKworICAgIGRlZiB0ZXN0X251bGxfdGFyZmlsZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBpc3N1ZTYxMjM6IEFsbG93IG9wZW5pbmcgZW1wdHkgYXJjaGl2ZXMuCisgICAgICAgICMgVGhpcyB0ZXN0IGd1YXJhbnRlZXMgdGhhdCB0YXJmaWxlLm9wZW4oKSBkb2VzIG5vdCB0cmVhdCBhbiBlbXB0eQorICAgICAgICAjIGZpbGUgYXMgYW4gZW1wdHkgdGFyIGFyY2hpdmUuCisgICAgICAgIG9wZW4odG1wbmFtZSwgIndiIikuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCB0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sIHRtcG5hbWUpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfemVyb3Moc2VsZik6CisgICAgICAgICMgVGVzdCBUYXJGaWxlJ3MgaWdub3JlX3plcm9zIG9wdGlvbi4KKyAgICAgICAgaWYgc2VsZi5tb2RlLmVuZHN3aXRoKCI6Z3oiKToKKyAgICAgICAgICAgIF9vcGVuID0gZ3ppcC5HemlwRmlsZQorICAgICAgICBlbGlmIHNlbGYubW9kZS5lbmRzd2l0aCgiOmJ6MiIpOgorICAgICAgICAgICAgX29wZW4gPSBiejIuQloyRmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX29wZW4gPSBvcGVuCisKKyAgICAgICAgZm9yIGNoYXIgaW4gKCdcMCcsICdhJyk6CisgICAgICAgICAgICAjIFRlc3QgaWYgRU9GSGVhZGVyRXJyb3IgKCdcMCcpIGFuZCBJbnZhbGlkSGVhZGVyRXJyb3IgKCdhJykKKyAgICAgICAgICAgICMgYXJlIGlnbm9yZWQgY29ycmVjdGx5LgorICAgICAgICAgICAgZm9iaiA9IF9vcGVuKHRtcG5hbWUsICJ3YiIpCisgICAgICAgICAgICBmb2JqLndyaXRlKGNoYXIgKiAxMDI0KQorICAgICAgICAgICAgZm9iai53cml0ZSh0YXJmaWxlLlRhckluZm8oImZvbyIpLnRvYnVmKCkpCisgICAgICAgICAgICBmb2JqLmNsb3NlKCkKKworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIG1vZGU9InIiLCBpZ25vcmVfemVyb3M9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKHRhci5nZXRuYW1lcygpLCBbImZvbyJdLAorICAgICAgICAgICAgICAgICAgICAiaWdub3JlX3plcm9zPVRydWUgc2hvdWxkIGhhdmUgc2tpcHBlZCB0aGUgJXItYmxvY2tzIiAlIGNoYXIpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisKK2NsYXNzIE1pc2NSZWFkVGVzdChDb21tb25SZWFkVGVzdCk6CiAKICAgICBkZWYgdGVzdF9ub19uYW1lX2FyZ3VtZW50KHNlbGYpOgogICAgICAgICBmb2JqID0gb3BlbihzZWxmLnRhcm5hbWUsICJyYiIpCkBAIC0yMDIsNyArMjY3LDcgQEAKICAgICAgICAgIyBPbGQgVjcgdGFycyBjcmVhdGUgZGlyZWN0b3J5IG1lbWJlcnMgdXNpbmcgYW4gQVJFR1RZUEUKICAgICAgICAgIyBoZWFkZXIgd2l0aCBhICIvIiBhcHBlbmRlZCB0byB0aGUgZmlsZW5hbWUgZmllbGQuCiAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoIm1pc2MvZGlydHlwZS1vbGQtdjciKQotICAgICAgICBzZWxmLmFzc2VydF8odGFyaW5mby50eXBlID09IHRhcmZpbGUuRElSVFlQRSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLkRJUlRZUEUsCiAgICAgICAgICAgICAgICAgInY3IGRpcnR5cGUgZmFpbGVkIikKIAogICAgIGRlZiB0ZXN0X3hzdGFyX3R5cGUoc2VsZik6CkBAIC0yMTYsMTUgKzI4MSwxNSBAQAogCiAgICAgZGVmIHRlc3RfY2hlY2tfbWVtYmVycyhzZWxmKToKICAgICAgICAgZm9yIHRhcmluZm8gaW4gc2VsZi50YXI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaW50KHRhcmluZm8ubXRpbWUpID09IDA3NjA2MTM2NjE3LAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludCh0YXJpbmZvLm10aW1lKSA9PSAwNzYwNjEzNjYxNywKICAgICAgICAgICAgICAgICAgICAgIndyb25nIG10aW1lIGZvciAlcyIgJSB0YXJpbmZvLm5hbWUpCiAgICAgICAgICAgICBpZiBub3QgdGFyaW5mby5uYW1lLnN0YXJ0c3dpdGgoInVzdGFyLyIpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odGFyaW5mby51bmFtZSA9PSAidGFyZmlsZSIsCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby51bmFtZSA9PSAidGFyZmlsZSIsCiAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB1bmFtZSBmb3IgJXMiICUgdGFyaW5mby5uYW1lKQogCiAgICAgZGVmIHRlc3RfZmluZF9tZW1iZXJzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi50YXIuZ2V0bWVtYmVycygpWy0xXS5uYW1lID09ICJtaXNjL2VvZiIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRhci5nZXRtZW1iZXJzKClbLTFdLm5hbWUgPT0gIm1pc2MvZW9mIiwKICAgICAgICAgICAgICAgICAiY291bGQgbm90IGZpbmQgYWxsIG1lbWJlcnMiKQogCiAgICAgZGVmIHRlc3RfZXh0cmFjdF9oYXJkbGluayhzZWxmKToKQEAgLTI2NywyMyArMzMyLDIzIEBACiAgICAgZGVmIHRlc3RfaW5pdF9jbG9zZV9mb2JqKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3MzQxOiBDbG9zZSB0aGUgaW50ZXJuYWwgZmlsZSBvYmplY3QgaW4gdGhlIFRhckZpbGUKICAgICAgICAgIyBjb25zdHJ1Y3RvciBpbiBjYXNlIG9mIGFuIGVycm9yLiBGb3IgdGhlIHRlc3Qgd2UgcmVseSBvbgotICAgICAgICAjIHRoZSBmYWN0IHRoYXQgb3BlbmluZyBhbiBpbnZhbGlkIGZpbGUgcmFpc2VzIGEgUmVhZEVycm9yLgotICAgICAgICBpbnZhbGlkID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJpbnZhbGlkIikKLSAgICAgICAgb3BlbihpbnZhbGlkLCAid2IiKS53cml0ZSgiZm9vIikKKyAgICAgICAgIyB0aGUgZmFjdCB0aGF0IG9wZW5pbmcgYW4gZW1wdHkgZmlsZSByYWlzZXMgYSBSZWFkRXJyb3IuCisgICAgICAgIGVtcHR5ID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJlbXB0eSIpCisgICAgICAgIG9wZW4oZW1wdHksICJ3YiIpLndyaXRlKCIiKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRhciA9IG9iamVjdC5fX25ld19fKHRhcmZpbGUuVGFyRmlsZSkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0YXIuX19pbml0X18oaW52YWxpZCkKKyAgICAgICAgICAgICAgICB0YXIuX19pbml0X18oZW1wdHkpCiAgICAgICAgICAgICBleGNlcHQgdGFyZmlsZS5SZWFkRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5maWxlb2JqLmNsb3NlZCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJSZWFkRXJyb3Igbm90IHJhaXNlZCIpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5yZW1vdmUoaW52YWxpZCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShlbXB0eSkKIAogCi1jbGFzcyBTdHJlYW1SZWFkVGVzdChSZWFkVGVzdCk6CitjbGFzcyBTdHJlYW1SZWFkVGVzdChDb21tb25SZWFkVGVzdCk6CiAKICAgICBtb2RlPSJyfCIKIApAQCAtMjkxLDcgKzM1Niw3IEBACiAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5uZXh0KCkgIyBnZXQgInJlZ3R5cGUiIChjYW4ndCB1c2UgZ2V0bWVtYmVyKQogICAgICAgICBmb2JqID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykKICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygobGVuKGRhdGEpLCBtZDVzdW0oZGF0YSkpID09ICh0YXJpbmZvLnNpemUsIG1kNV9yZWd0eXBlKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChsZW4oZGF0YSksIG1kNXN1bShkYXRhKSkgPT0gKHRhcmluZm8uc2l6ZSwgbWQ1X3JlZ3R5cGUpLAogICAgICAgICAgICAgICAgICJyZWd1bGFyIGZpbGUgZXh0cmFjdGlvbiBmYWlsZWQiKQogCiAgICAgZGVmIHRlc3RfcHJvdm9rZV9zdHJlYW1fZXJyb3Ioc2VsZik6CkBAIC0zMDgsNyArMzczLDcgQEAKICAgICAgICAgICAgIHQyID0gdGFyMi5uZXh0KCkKICAgICAgICAgICAgIGlmIHQxIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0MiBpcyBub3QgTm9uZSwgInN0cmVhbS5uZXh0KCkgZmFpbGVkLiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgaXMgbm90IE5vbmUsICJzdHJlYW0ubmV4dCgpIGZhaWxlZC4iKQogCiAgICAgICAgICAgICBpZiB0Mi5pc2xuaygpIG9yIHQyLmlzc3ltKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5TdHJlYW1FcnJvciwgdGFyMi5leHRyYWN0ZmlsZSwgdDIpCkBAIC0zMTgsOCArMzgzLDggQEAKICAgICAgICAgICAgIHYyID0gdGFyMi5leHRyYWN0ZmlsZSh0MikKICAgICAgICAgICAgIGlmIHYxIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh2MiBpcyBub3QgTm9uZSwgInN0cmVhbS5leHRyYWN0ZmlsZSgpIGZhaWxlZCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odjEucmVhZCgpID09IHYyLnJlYWQoKSwgInN0cmVhbSBleHRyYWN0aW9uIGZhaWxlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodjIgaXMgbm90IE5vbmUsICJzdHJlYW0uZXh0cmFjdGZpbGUoKSBmYWlsZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYxLnJlYWQoKSA9PSB2Mi5yZWFkKCksICJzdHJlYW0gZXh0cmFjdGlvbiBmYWlsZWQiKQogCiAgICAgICAgIHRhcjEuY2xvc2UoKQogCkBAIC0zODAsNyArNDQ1LDcgQEAKIAogICAgIGRlZiBfdGVzdF9tZW1iZXIoc2VsZiwgdGFyaW5mbywgY2hrc3VtPU5vbmUsICoqa3dhcmdzKToKICAgICAgICAgaWYgY2hrc3VtIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1kNXN1bShzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvKS5yZWFkKCkpID09IGNoa3N1bSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZDVzdW0oc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykucmVhZCgpKSA9PSBjaGtzdW0sCiAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBtZDVzdW0gZm9yICVzIiAlIHRhcmluZm8ubmFtZSkKIAogICAgICAgICBrd2FyZ3NbIm10aW1lIl0gPSAwNzYwNjEzNjYxNwpAQCAtMzkxLDcgKzQ1Niw3IEBACiAgICAgICAgICAgICBrd2FyZ3NbInVuYW1lIl0gPSAidGFyZmlsZSIKICAgICAgICAgICAgIGt3YXJnc1siZ25hbWUiXSA9ICJ0YXJmaWxlIgogICAgICAgICBmb3IgaywgdiBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZ2V0YXR0cih0YXJpbmZvLCBrKSA9PSB2LAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIodGFyaW5mbywgaykgPT0gdiwKICAgICAgICAgICAgICAgICAgICAgIndyb25nIHZhbHVlIGluICVzIGZpZWxkIG9mICVzIiAlIChrLCB0YXJpbmZvLm5hbWUpKQogCiAgICAgZGVmIHRlc3RfZmluZF9yZWd0eXBlKHNlbGYpOgpAQCAtNDQwLDcgKzUwNSw3IEBACiAKICAgICBkZWYgdGVzdF9maW5kX3VzdGFyX2xvbmduYW1lKHNlbGYpOgogICAgICAgICBuYW1lID0gInVzdGFyLyIgKyAiMTIzNDUvIiAqIDM5ICsgIjEyMzQ1NjcvbG9uZ25hbWUiCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhuYW1lIGluIHNlbGYudGFyLmdldG5hbWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc2VsZi50YXIuZ2V0bmFtZXMoKSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfcmVndHlwZV9vbGR2NyhzZWxmKToKICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigibWlzYy9yZWd0eXBlLW9sZC12NyIpCkBAIC00NjEsNyArNTI2LDcgQEAKICAgICAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIobG9uZ25hbWUpCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgibG9uZ25hbWUgbm90IGZvdW5kIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRhcmluZm8udHlwZSAhPSB0YXJmaWxlLkRJUlRZUEUsICJyZWFkIGxvbmduYW1lIGFzIGRpcnR5cGUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby50eXBlICE9IHRhcmZpbGUuRElSVFlQRSwgInJlYWQgbG9uZ25hbWUgYXMgZGlydHlwZSIpCiAKICAgICBkZWYgdGVzdF9yZWFkX2xvbmdsaW5rKHNlbGYpOgogICAgICAgICBsb25nbmFtZSA9IHNlbGYuc3ViZGlyICsgIi8iICsgIjEyMy8iICogMTI1ICsgImxvbmduYW1lIgpAQCAtNDcwLDcgKzUzNSw3IEBACiAgICAgICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKGxvbmdsaW5rKQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImxvbmdsaW5rIG5vdCBmb3VuZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0YXJpbmZvLmxpbmtuYW1lID09IGxvbmduYW1lLCAibGlua25hbWUgd3JvbmciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby5saW5rbmFtZSA9PSBsb25nbmFtZSwgImxpbmtuYW1lIHdyb25nIikKIAogICAgIGRlZiB0ZXN0X3RydW5jYXRlZF9sb25nbmFtZShzZWxmKToKICAgICAgICAgbG9uZ25hbWUgPSBzZWxmLnN1YmRpciArICIvIiArICIxMjMvIiAqIDEyNSArICJsb25nbmFtZSIKQEAgLTUwMSw3ICs1NjYsNyBAQAogICAgICAgICBmb2JqMSA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8xKQogICAgICAgICB0YXJpbmZvMiA9IHNlbGYudGFyLmdldG1lbWJlcigiZ251L3NwYXJzZSIpCiAgICAgICAgIGZvYmoyID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbzIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhmb2JqMS5yZWFkKCkgPT0gZm9iajIucmVhZCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9iajEucmVhZCgpID09IGZvYmoyLnJlYWQoKSwKICAgICAgICAgICAgICAgICAic3BhcnNlIGZpbGUgZXh0cmFjdGlvbiBmYWlsZWQiKQogCiAKQEAgLTU1MCw3ICs2MTUsNyBAQAogICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkKICAgICAgICAgdGFyLmFkZGZpbGUodGFyZmlsZS5UYXJJbmZvKCJmb28iKSkKICAgICAgICAgdGFyLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZvYmouY2xvc2VkIGlzIEZhbHNlLCAiZXh0ZXJuYWwgZmlsZW9ianMgbXVzdCBuZXZlciBjbG9zZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9iai5jbG9zZWQgaXMgRmFsc2UsICJleHRlcm5hbCBmaWxlb2JqcyBtdXN0IG5ldmVyIGNsb3NlZCIpCiAKIAogY2xhc3MgV3JpdGVUZXN0KFdyaXRlVGVzdEJhc2UpOgpAQCAtNTY5LDcgKzYzNCw3IEBACiAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0YXIuZ2V0bmFtZXMoKVswXSA9PSBuYW1lLAorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmdldG5hbWVzKClbMF0gPT0gbmFtZSwKICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHN0b3JlIDEwMCBjaGFyIGZpbGVuYW1lIikKICAgICAgICAgdGFyLmNsb3NlKCkKIApAQCAtNTgyLDcgKzY0Nyw3IEBACiAgICAgICAgIGZvYmouY2xvc2UoKQogICAgICAgICB0YXIuYWRkKHBhdGgpCiAgICAgICAgIHRhci5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmdldHNpemUodG1wbmFtZSkgPiAwLAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5nZXRzaXplKHRtcG5hbWUpID4gMCwKICAgICAgICAgICAgICAgICAidGFyZmlsZSBpcyBlbXB0eSIpCiAKICAgICAjIFRoZSB0ZXN0Xypfc2l6ZSB0ZXN0cyB0ZXN0IGZvciBidWcgIzExNjcxMjguCkBAIC02NDcsMTYgKzcxMiwxNiBAQAogICAgICAgICBkc3RuYW1lID0gb3MucGF0aC5hYnNwYXRoKHRtcG5hbWUpCiAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRhci5uYW1lID09IGRzdG5hbWUsICJhcmNoaXZlIG5hbWUgbXVzdCBiZSBhYnNvbHV0ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIubmFtZSA9PSBkc3RuYW1lLCAiYXJjaGl2ZSBuYW1lIG11c3QgYmUgYWJzb2x1dGUiKQogCiAgICAgICAgIHRhci5hZGQoZHN0bmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRhci5nZXRuYW1lcygpID09IFtdLCAiYWRkZWQgdGhlIGFyY2hpdmUgdG8gaXRzZWxmIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5nZXRuYW1lcygpID09IFtdLCAiYWRkZWQgdGhlIGFyY2hpdmUgdG8gaXRzZWxmIikKIAogICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQogICAgICAgICBvcy5jaGRpcihURU1QRElSKQogICAgICAgICB0YXIuYWRkKGRzdG5hbWUpCiAgICAgICAgIG9zLmNoZGlyKGN3ZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRhci5nZXRuYW1lcygpID09IFtdLCAiYWRkZWQgdGhlIGFyY2hpdmUgdG8gaXRzZWxmIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5nZXRuYW1lcygpID09IFtdLCAiYWRkZWQgdGhlIGFyY2hpdmUgdG8gaXRzZWxmIikKIAogICAgIGRlZiB0ZXN0X2V4Y2x1ZGUoc2VsZik6CiAgICAgICAgIHRlbXBkaXIgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImV4Y2x1ZGUiKQpAQCAtNjY2LDExICs3MzEsMTIgQEAKICAgICAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIG5hbWUpCiAgICAgICAgICAgICAgICAgb3BlbihuYW1lLCAid2IiKS5jbG9zZSgpCiAKLSAgICAgICAgICAgIGRlZiBleGNsdWRlKG5hbWUpOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmlzZmlsZShuYW1lKQorICAgICAgICAgICAgZXhjbHVkZSA9IG9zLnBhdGguaXNmaWxlCiAKICAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUsIGVuY29kaW5nPSJpc284ODU5LTEiKQotICAgICAgICAgICAgdGFyLmFkZCh0ZW1wZGlyLCBhcmNuYW1lPSJlbXB0eV9kaXIiLCBleGNsdWRlPWV4Y2x1ZGUpCisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoInVzZSB0aGUgZmlsdGVyIGFyZ3VtZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgICAgICB0YXIuYWRkKHRlbXBkaXIsIGFyY25hbWU9ImVtcHR5X2RpciIsIGV4Y2x1ZGU9ZXhjbHVkZSkKICAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAiciIpCkBAIC02NzksNiArNzQ1LDEwNCBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQogCisgICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgorICAgICAgICB0ZW1wZGlyID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJmaWx0ZXIiKQorICAgICAgICBvcy5ta2Rpcih0ZW1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiAoImZvbyIsICJiYXIiLCAiYmF6Iik6CisgICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCBuYW1lKQorICAgICAgICAgICAgICAgIG9wZW4obmFtZSwgIndiIikuY2xvc2UoKQorCisgICAgICAgICAgICBkZWYgZmlsdGVyKHRhcmluZm8pOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUodGFyaW5mby5uYW1lKSA9PSAiYmFyIjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgdGFyaW5mby51aWQgPSAxMjMKKyAgICAgICAgICAgICAgICB0YXJpbmZvLnVuYW1lID0gImZvbyIKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFyaW5mbworCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlLCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgICAgIHRhci5hZGQodGVtcGRpciwgYXJjbmFtZT0iZW1wdHlfZGlyIiwgZmlsdGVyPWZpbHRlcikKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAiciIpCisgICAgICAgICAgICBmb3IgdGFyaW5mbyBpbiB0YXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnVpZCwgMTIzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51bmFtZSwgImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0YXIuZ2V0bWVtYmVycygpKSwgMykKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICAjIEd1YXJhbnRlZSB0aGF0IHN0b3JlZCBwYXRobmFtZXMgYXJlIG5vdCBtb2RpZmllZC4gRG9uJ3QKKyAgICAjIHJlbW92ZSAuLyBvciAuLi8gb3IgZG91YmxlIHNsYXNoZXMuIFN0aWxsIG1ha2UgYWJzb2x1dGUKKyAgICAjIHBhdGhuYW1lcyByZWxhdGl2ZS4KKyAgICAjIEZvciBkZXRhaWxzIHNlZSBidWcgIzYwNTQuCisgICAgZGVmIF90ZXN0X3BhdGhuYW1lKHNlbGYsIHBhdGgsIGNtcF9wYXRoPU5vbmUsIGRpcj1GYWxzZSk6CisgICAgICAgICMgQ3JlYXRlIGEgdGFyZmlsZSB3aXRoIGFuIGVtcHR5IG1lbWJlciBuYW1lZCBwYXRoCisgICAgICAgICMgYW5kIGNvbXBhcmUgdGhlIHN0b3JlZCBuYW1lIHdpdGggdGhlIG9yaWdpbmFsLgorICAgICAgICBmb28gPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImZvbyIpCisgICAgICAgIGlmIG5vdCBkaXI6CisgICAgICAgICAgICBvcGVuKGZvbywgInciKS5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5ta2Rpcihmb28pCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgdGFyLmFkZChmb28sIGFyY25hbWU9cGF0aCkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInIiKQorICAgICAgICB0ID0gdGFyLm5leHQoKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgIGlmIG5vdCBkaXI6CisgICAgICAgICAgICBvcy5yZW1vdmUoZm9vKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3Mucm1kaXIoZm9vKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5uYW1lLCBjbXBfcGF0aCBvciBwYXRoLnJlcGxhY2Uob3Muc2VwLCAiLyIpKQorCisgICAgZGVmIHRlc3RfcGF0aG5hbWVzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCJmb28iKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiZm9vIiwgIi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCJmb28iLCAiLi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuIiwgImZvbyIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLiIsICJmb28iLCAiLiIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLiIsICJmb28iLCAiLiIsICJiYXIiKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4iLCAiZm9vIiwgIi4uIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLiIsICJmb28iLCAiLi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuLiIsICJmb28iKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4uIiwgImZvbyIsICIuLiIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLi4iLCAiZm9vIiwgIi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuLiIsICJmb28iLCAiLi4iLCAiYmFyIikpCisKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZSgiZm9vIiArIG9zLnNlcCArIG9zLnNlcCArICJiYXIiKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCJmb28iICsgb3Muc2VwICsgb3Muc2VwLCAiZm9vIiwgZGlyPVRydWUpCisKKyAgICBkZWYgdGVzdF9hYnNfcGF0aG5hbWVzKHNlbGYpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUoIkM6XFxmb28iLCAiZm9vIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUoIi9mb28iLCAiZm9vIikKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUoIi8vL2ZvbyIsICJmb28iKQorCisgICAgZGVmIHRlc3RfY3dkKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihURU1QRElSKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcGVuKCJmb28iLCAidyIpLmNsb3NlKCkKKworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgICAgIHRhci5hZGQoIi4iKQorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJyIikKKyAgICAgICAgICAgIGZvciB0IGluIHRhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8odC5uYW1lID09ICIuIiBvciB0Lm5hbWUuc3RhcnRzd2l0aCgiLi8iKSkKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihjd2QpCisKIAogY2xhc3MgU3RyZWFtV3JpdGVUZXN0KFdyaXRlVGVzdEJhc2UpOgogCkBAIC02OTcsMTQgKzg2MSwxNCBAQAogICAgICAgICAgICAgZGVjID0gYnoyLkJaMkRlY29tcHJlc3NvcigpCiAgICAgICAgICAgICBkYXRhID0gb3Blbih0bXBuYW1lLCAicmIiKS5yZWFkKCkKICAgICAgICAgICAgIGRhdGEgPSBkZWMuZGVjb21wcmVzcyhkYXRhKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihkZWMudW51c2VkX2RhdGEpID09IDAsCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRlYy51bnVzZWRfZGF0YSkgPT0gMCwKICAgICAgICAgICAgICAgICAgICAgImZvdW5kIHRyYWlsaW5nIGRhdGEiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZm9iaiA9IG9wZW4odG1wbmFtZSwgInJiIikKICAgICAgICAgICAgIGRhdGEgPSBmb2JqLnJlYWQoKQogICAgICAgICAgICAgZm9iai5jbG9zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRhdGEuY291bnQoIlwwIikgPT0gdGFyZmlsZS5SRUNPUkRTSVpFLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5jb3VudCgiXDAiKSA9PSB0YXJmaWxlLlJFQ09SRFNJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImluY29ycmVjdCB6ZXJvIHBhZGRpbmciKQogCiAgICAgZGVmIHRlc3RfZmlsZV9tb2RlKHNlbGYpOgpAQCAtNzYyLDE2ICs5MjYsMTggQEAKIAogICAgICAgICB2MSA9IHNlbGYuX2NhbGNfc2l6ZShuYW1lLCBsaW5rKQogICAgICAgICB2MiA9IHRhci5vZmZzZXQKLSAgICAgICAgc2VsZi5hc3NlcnRfKHYxID09IHYyLCAiR05VIGxvbmduYW1lL2xvbmdsaW5rIGNyZWF0aW9uIGZhaWxlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2MSA9PSB2MiwgIkdOVSBsb25nbmFtZS9sb25nbGluayBjcmVhdGlvbiBmYWlsZWQiKQogCiAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUpCiAgICAgICAgIG1lbWJlciA9IHRhci5uZXh0KCkKLSAgICAgICAgc2VsZi5mYWlsSWYobWVtYmVyIGlzIE5vbmUsICJ1bmFibGUgdG8gcmVhZCBsb25nbmFtZSBtZW1iZXIiKQotICAgICAgICBzZWxmLmFzc2VydF8odGFyaW5mby5uYW1lID09IG1lbWJlci5uYW1lIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICB0YXJpbmZvLmxpbmtuYW1lID09IG1lbWJlci5saW5rbmFtZSwgXAotICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byByZWFkIGxvbmduYW1lIG1lbWJlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1lbWJlciwKKyAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHJlYWQgbG9uZ25hbWUgbWVtYmVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLm5hbWUsIG1lbWJlci5uYW1lLAorICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gcmVhZCBsb25nbmFtZSBtZW1iZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubGlua25hbWUsIG1lbWJlci5saW5rbmFtZSwKKyAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHJlYWQgbG9uZ25hbWUgbWVtYmVyIikKIAogICAgIGRlZiB0ZXN0X2xvbmduYW1lXzEwMjMoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3QoKCJsb25nbmFtLyIgKiAxMjcpICsgImxvbmduYW0iKQpAQCAtODI5LDE4ICs5OTUsMTggQEAKICAgICAgICAgIyBUaGUgc2FtZSBuYW1lIHdpbGwgYmUgYWRkZWQgYXMgYSBSRUdUWVBFIGV2ZXJ5CiAgICAgICAgICMgdGltZSByZWdhcmRsZXNzIG9mIHN0X25saW5rLgogICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0dGFyaW5mbyhzZWxmLmZvbykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLlJFR1RZUEUsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJpbmZvLnR5cGUgPT0gdGFyZmlsZS5SRUdUWVBFLAogICAgICAgICAgICAgICAgICJhZGQgZmlsZSBhcyByZWd1bGFyIGZhaWxlZCIpCiAKICAgICBkZWYgdGVzdF9hZGRfaGFyZGxpbmsoc2VsZik6CiAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXR0YXJpbmZvKHNlbGYuYmFyKQotICAgICAgICBzZWxmLmFzc2VydF8odGFyaW5mby50eXBlID09IHRhcmZpbGUuTE5LVFlQRSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLkxOS1RZUEUsCiAgICAgICAgICAgICAgICAgImFkZCBmaWxlIGFzIGhhcmRsaW5rIGZhaWxlZCIpCiAKICAgICBkZWYgdGVzdF9kZXJlZmVyZW5jZV9oYXJkbGluayhzZWxmKToKICAgICAgICAgc2VsZi50YXIuZGVyZWZlcmVuY2UgPSBUcnVlCiAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXR0YXJpbmZvKHNlbGYuYmFyKQotICAgICAgICBzZWxmLmFzc2VydF8odGFyaW5mby50eXBlID09IHRhcmZpbGUuUkVHVFlQRSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLlJFR1RZUEUsCiAgICAgICAgICAgICAgICAgImRlcmVmZXJlbmNpbmcgaGFyZGxpbmsgZmFpbGVkIikKIAogCkBAIC04NjAsMTAgKzEwMjYsMTAgQEAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUpCiAgICAgICAgIGlmIGxpbms6CiAgICAgICAgICAgICBsID0gdGFyLmdldG1lbWJlcnMoKVswXS5saW5rbmFtZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGxpbmsgPT0gbCwgIlBBWCBsb25nbGluayBjcmVhdGlvbiBmYWlsZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmsgPT0gbCwgIlBBWCBsb25nbGluayBjcmVhdGlvbiBmYWlsZWQiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbiA9IHRhci5nZXRtZW1iZXJzKClbMF0ubmFtZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5hbWUgPT0gbiwgIlBBWCBsb25nbmFtZSBjcmVhdGlvbiBmYWlsZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgPT0gbiwgIlBBWCBsb25nbmFtZSBjcmVhdGlvbiBmYWlsZWQiKQogCiAgICAgZGVmIHRlc3RfcGF4X2dsb2JhbF9oZWFkZXIoc2VsZik6CiAgICAgICAgIHBheF9oZWFkZXJzID0gewpAQCAtODczLDcgKzEwMzksNyBAQAogICAgICAgICAgICAgICAgIHUidGVzdCI6IHUi5Pb8IiwKICAgICAgICAgICAgICAgICB1IuT2/CI6IHUidGVzdCJ9CiAKLSAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXRhcmZpbGUuUEFYX0ZPUk1BVCwgXAorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciLCBmb3JtYXQ9dGFyZmlsZS5QQVhfRk9STUFULAogICAgICAgICAgICAgICAgIHBheF9oZWFkZXJzPXBheF9oZWFkZXJzKQogICAgICAgICB0YXIuYWRkZmlsZSh0YXJmaWxlLlRhckluZm8oInRlc3QiKSkKICAgICAgICAgdGFyLmNsb3NlKCkKQEAgLTg4NSw4ICsxMDUxLDggQEAKIAogICAgICAgICAjIFRlc3QgaWYgYWxsIHRoZSBmaWVsZHMgYXJlIHVuaWNvZGUuCiAgICAgICAgIGZvciBrZXksIHZhbCBpbiB0YXIucGF4X2hlYWRlcnMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZShrZXkpIGlzIHVuaWNvZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZSh2YWwpIGlzIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShrZXkpIGlzIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh2YWwpIGlzIHVuaWNvZGUpCiAgICAgICAgICAgICBpZiBrZXkgaW4gdGFyZmlsZS5QQVhfTlVNQkVSX0ZJRUxEUzoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHRhcmZpbGUuUEFYX05VTUJFUl9GSUVMRFNba2V5XSh2YWwpCkBAIC05MzQsNyArMTEwMCw3IEBACiAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBzZWxmLmFzc2VydF8odHlwZSh0YXIuZ2V0bmFtZXMoKVswXSkgaXMgbm90IHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHRhci5nZXRuYW1lcygpWzBdKSBpcyBub3QgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bWVtYmVycygpWzBdLm5hbWUsIG5hbWUuZW5jb2RlKGVuY29kaW5nKSkKICAgICAgICAgdGFyLmNsb3NlKCkKIApAQCAtOTU4LDEwICsxMTI0LDEwIEBACiAgICAgZGVmIHRlc3RfdW5pY29kZV9hcmd1bWVudChzZWxmKToKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsICJyIiwgZW5jb2Rpbmc9Imlzbzg4NTktMSIsIGVycm9ycz0ic3RyaWN0IikKICAgICAgICAgZm9yIHQgaW4gdGFyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodC5uYW1lKSBpcyBzdHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZSh0LmxpbmtuYW1lKSBpcyBzdHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZSh0LnVuYW1lKSBpcyBzdHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZSh0LmduYW1lKSBpcyBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0Lm5hbWUpIGlzIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQubGlua25hbWUpIGlzIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQudW5hbWUpIGlzIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQuZ25hbWUpIGlzIHN0cikKICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3VuYW1lX3VuaWNvZGUoc2VsZik6CkBAIC0xMDUzLDEyICsxMjE5LDEyIEBACiAgICAgICAgIHNlbGYuX3Rlc3QoKQogCiAgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6Ci0gICAgICAgIG9wZW4oc2VsZi50YXJuYW1lLCAidyIpLmNsb3NlKCkKKyAgICAgICAgdGFyZmlsZS5vcGVuKHNlbGYudGFybmFtZSwgInc6IikuY2xvc2UoKQogICAgICAgICBzZWxmLl9hZGRfdGVzdGZpbGUoKQogICAgICAgICBzZWxmLl90ZXN0KCkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X2ZpbGVvYmooc2VsZik6Ci0gICAgICAgIGZvYmogPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGZvYmogPSBTdHJpbmdJTy5TdHJpbmdJTygiXDAiICogMTAyNCkKICAgICAgICAgc2VsZi5fYWRkX3Rlc3RmaWxlKGZvYmopCiAgICAgICAgIGZvYmouc2VlaygwKQogICAgICAgICBzZWxmLl90ZXN0KGZpbGVvYmo9Zm9iaikKQEAgLTEwODgsNiArMTI1NCwyOSBAQAogICAgICAgICBzZWxmLl9jcmVhdGVfdGVzdHRhcigidzpiejIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCB0bXBuYW1lLCAiYSIpCiAKKyAgICAjIEFwcGVuZCBtb2RlIGlzIHN1cHBvc2VkIHRvIGZhaWwgaWYgdGhlIHRhcmZpbGUgdG8gYXBwZW5kIHRvCisgICAgIyBkb2VzIG5vdCBlbmQgd2l0aCBhIHplcm8gYmxvY2suCisgICAgZGVmIF90ZXN0X2Vycm9yKHNlbGYsIGRhdGEpOgorICAgICAgICBvcGVuKHNlbGYudGFybmFtZSwgIndiIikud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHNlbGYuX2FkZF90ZXN0ZmlsZSkKKworICAgIGRlZiB0ZXN0X251bGwoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZXJyb3IoIiIpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Vycm9yKCJcMCIgKiAxMykKKworICAgIGRlZiB0ZXN0X3ByZW1hdHVyZV9lb2Yoc2VsZik6CisgICAgICAgIGRhdGEgPSB0YXJmaWxlLlRhckluZm8oImZvbyIpLnRvYnVmKCkKKyAgICAgICAgc2VsZi5fdGVzdF9lcnJvcihkYXRhKQorCisgICAgZGVmIHRlc3RfdHJhaWxpbmdfZ2FyYmFnZShzZWxmKToKKyAgICAgICAgZGF0YSA9IHRhcmZpbGUuVGFySW5mbygiZm9vIikudG9idWYoKQorICAgICAgICBzZWxmLl90ZXN0X2Vycm9yKGRhdGEgKyAiXDAiICogMTMpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Vycm9yKCJhIiAqIDUxMikKKwogCiBjbGFzcyBMaW1pdHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTE0OCw2ICsxMzM3LDg4IEBACiAgICAgICAgIHRhcmluZm8udG9idWYodGFyZmlsZS5QQVhfRk9STUFUKQogCiAKK2NsYXNzIENvbnRleHRNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXIuY2xvc2VkLCAiY2xvc2VkIGluc2lkZSBydW50aW1lIGNvbnRleHQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfY2xvc2VkKHNlbGYpOgorICAgICAgICAjIFRoZSBfX2VudGVyX18oKSBtZXRob2QgaXMgc3VwcG9zZWQgdG8gcmFpc2UgSU9FcnJvcgorICAgICAgICAjIGlmIHRoZSBUYXJGaWxlIG9iamVjdCBpcyBhbHJlYWR5IGNsb3NlZC4KKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUpCisgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgICAgICB3aXRoIHRhcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgVGVzdCBpZiB0aGUgSU9FcnJvciBleGNlcHRpb24gaXMgcGFzc2VkIHRocm91Z2ggcHJvcGVybHkuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBleGM6CisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBleGNlcHRpb24gcmFpc2VkIGluIGNvbnRleHQgbWFuYWdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCisKKyAgICBkZWYgdGVzdF9ub19lb2Yoc2VsZik6CisgICAgICAgICMgX19leGl0X18oKSBtdXN0IG5vdCB3cml0ZSBlbmQtb2YtYXJjaGl2ZSBibG9ja3MgaWYgYW4KKyAgICAgICAgIyBleGNlcHRpb24gd2FzIHJhaXNlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUodG1wbmFtZSksIDAsCisgICAgICAgICAgICAgICAgImNvbnRleHQgbWFuYWdlciB3cm90ZSBhbiBlbmQtb2YtYXJjaGl2ZSBibG9jayIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCisKKyAgICBkZWYgdGVzdF9lb2Yoc2VsZik6CisgICAgICAgICMgX19leGl0X18oKSBtdXN0IHdyaXRlIGVuZC1vZi1hcmNoaXZlIGJsb2NrcywgaS5lLiBjYWxsCisgICAgICAgICMgVGFyRmlsZS5jbG9zZSgpIGlmIHRoZXJlIHdhcyBubyBlcnJvci4KKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvcy5wYXRoLmdldHNpemUodG1wbmFtZSksIDAsCisgICAgICAgICAgICAgICAgImNvbnRleHQgbWFuYWdlciB3cm90ZSBubyBlbmQtb2YtYXJjaGl2ZSBibG9jayIpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBfX2V4aXRfXygpIGRpZCBub3QgY2xvc2UgdGhlIGV4dGVybmFsIGZpbGUKKyAgICAgICAgIyBvYmplY3QuCisgICAgICAgIGZvYmogPSBvcGVuKHRtcG5hbWUsICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT0idyIpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZvYmouY2xvc2VkLCAiZXh0ZXJuYWwgZmlsZSBvYmplY3Qgd2FzIGNsb3NlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCisgICAgICAgIGZvYmouY2xvc2UoKQorCisKK2NsYXNzIExpbmtFbXVsYXRpb25UZXN0KFJlYWRUZXN0KToKKworICAgICMgVGVzdCBmb3IgaXNzdWUgIzg3NDEgcmVncmVzc2lvbi4gT24gcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQKKyAgICAjIHN5bWJvbGljIG9yIGhhcmQgbGlua3MgdGFyZmlsZSB0cmllcyB0byBleHRyYWN0IHRoZXNlIHR5cGVzIG9mIG1lbWJlcnMgYXMKKyAgICAjIHRoZSByZWd1bGFyIGZpbGVzIHRoZXkgcG9pbnQgdG8uCisgICAgZGVmIF90ZXN0X2xpbmtfZXh0cmFjdGlvbihzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi50YXIuZXh0cmFjdChuYW1lLCBURU1QRElSKQorICAgICAgICBkYXRhID0gb3Blbihvcy5wYXRoLmpvaW4oVEVNUERJUiwgbmFtZSksICJyYiIpLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1kNXN1bShkYXRhKSwgbWQ1X3JlZ3R5cGUpCisKKyAgICBkZWYgdGVzdF9oYXJkbGlua19leHRyYWN0aW9uMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9saW5rX2V4dHJhY3Rpb24oInVzdGFyL2xua3R5cGUiKQorCisgICAgZGVmIHRlc3RfaGFyZGxpbmtfZXh0cmFjdGlvbjIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbGlua19leHRyYWN0aW9uKCIuL3VzdGFyL2xpbmt0ZXN0Mi9sbmt0eXBlIikKKworICAgIGRlZiB0ZXN0X3N5bWxpbmtfZXh0cmFjdGlvbjEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbGlua19leHRyYWN0aW9uKCJ1c3Rhci9zeW10eXBlIikKKworICAgIGRlZiB0ZXN0X3N5bWxpbmtfZXh0cmFjdGlvbjIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbGlua19leHRyYWN0aW9uKCIuL3VzdGFyL2xpbmt0ZXN0Mi9zeW10eXBlIikKKworCiBjbGFzcyBHemlwTWlzY1JlYWRUZXN0KE1pc2NSZWFkVGVzdCk6CiAgICAgdGFybmFtZSA9IGd6aXBuYW1lCiAgICAgbW9kZSA9ICJyOmd6IgpAQCAtMTE4OSwxMCArMTQ2MCwxNiBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiB0YXJmaWxlLm9wZW4oKSIpCiAgICAgICAgICAgICAgICAgc2VsZi5oaXRfZW9mID0gc2VsZi5wb3MgPT0gc2VsZi5sZW4KICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nSU8uU3RyaW5nSU8ucmVhZChzZWxmLCBuKQorICAgICAgICAgICAgZGVmIHNlZWsoc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuaGl0X2VvZiA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0lPLlN0cmluZ0lPLnNlZWsoc2VsZiwgKmFyZ3MpCiAKICAgICAgICAgZGF0YSA9IGJ6Mi5jb21wcmVzcyh0YXJmaWxlLlRhckluZm8oImZvbyIpLnRvYnVmKCkpCiAgICAgICAgIGZvciB4IGluIHJhbmdlKGxlbihkYXRhKSArIDEpOgotICAgICAgICAgICAgdGFyZmlsZS5vcGVuKGZpbGVvYmo9TXlTdHJpbmdJTyhkYXRhWzp4XSksIG1vZGU9bW9kZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXJmaWxlLm9wZW4oZmlsZW9iaj1NeVN0cmluZ0lPKGRhdGFbOnhdKSwgbW9kZT1tb2RlKQorICAgICAgICAgICAgZXhjZXB0IHRhcmZpbGUuUmVhZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MgIyB3ZSBoYXZlIG5vIGludGVyZXN0IGluIFJlYWRFcnJvcnMKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWxfaW5wdXQoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3RfcGFydGlhbF9pbnB1dCgiciIpCkBAIC0xMjIxLDEwICsxNDk4LDEzIEBACiAgICAgICAgIFBheFVuaWNvZGVUZXN0LAogICAgICAgICBBcHBlbmRUZXN0LAogICAgICAgICBMaW1pdHNUZXN0LAorICAgICAgICBDb250ZXh0TWFuYWdlclRlc3QsCiAgICAgXQogCiAgICAgaWYgaGFzYXR0cihvcywgImxpbmsiKToKICAgICAgICAgdGVzdHMuYXBwZW5kKEhhcmRsaW5rVGVzdCkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0cy5hcHBlbmQoTGlua0VtdWxhdGlvblRlc3QpCiAKICAgICBmb2JqID0gb3Blbih0YXJuYW1lLCAicmIiKQogICAgIGRhdGEgPSBmb2JqLnJlYWQoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90Y2wucHkgYi9MaWIvdGVzdC90ZXN0X3RjbC5weQppbmRleCA2YTg3Y2UyLi5lOGJhNThmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RjbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RjbC5weQpAQCAtMyw5ICszLDIxIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBvcwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBTa2lwIHRoaXMgdGVzdCBpZiB0aGUgX3RraW50ZXIgbW9kdWxlIHdhc24ndCBidWlsdC4KK190a2ludGVyID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKKwogZnJvbSBUa2ludGVyIGltcG9ydCBUY2wKIGZyb20gX3RraW50ZXIgaW1wb3J0IFRjbEVycm9yCiAKKworY2xhc3MgVGtpbnRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RGbGF0dGVuTGVuKHNlbGYpOgorICAgICAgICAjIGZsYXR0ZW4oPG9iamVjdCB3aXRoIG5vIGxlbmd0aD4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX3RraW50ZXIuX2ZsYXR0ZW4sIFRydWUpCisKKwogY2xhc3MgVGNsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xMTUsNDEgKzEyNyw2IEBACiAgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLHRjbC5ldmFsLCdwYWNrYWdlIHJlcXVpcmUgRE5FJykKIAotICAgIGRlZiB0ZXN0TG9hZFRrKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgaWYgJ0RJU1BMQVknIG5vdCBpbiBvcy5lbnZpcm9uOgotICAgICAgICAgICAgIyBza2lwcGluZyB0ZXN0IG9mIGNsZWFuIHVwZ3JhZGVhYmlsaXR5Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgdGNsID0gVGNsKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLndpbmZvX2dlb21ldHJ5KQotICAgICAgICB0Y2wubG9hZHRrKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMXgxKzArMCcsIHRjbC53aW5mb19nZW9tZXRyeSgpKQotICAgICAgICB0Y2wuZGVzdHJveSgpCi0KLSAgICBkZWYgdGVzdExvYWRUa0ZhaWx1cmUoc2VsZik6Ci0gICAgICAgIGltcG9ydCBvcwotICAgICAgICBvbGRfZGlzcGxheSA9IE5vbmUKLSAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgoJ3dpbicsICdkYXJ3aW4nLCAnY3lnd2luJykpOgotICAgICAgICAgICAgcmV0dXJuICAjIG5vIGZhaWx1cmUgcG9zc2libGUgb24gd2luZG93cz8KLSAgICAgICAgaWYgJ0RJU1BMQVknIGluIG9zLmVudmlyb246Ci0gICAgICAgICAgICBvbGRfZGlzcGxheSA9IG9zLmVudmlyb25bJ0RJU1BMQVknXQotICAgICAgICAgICAgZGVsIG9zLmVudmlyb25bJ0RJU1BMQVknXQotICAgICAgICAgICAgIyBvbiBzb21lIHBsYXRmb3JtcywgZGVsZXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0gICAgICAgICAgICAjIGRvZXNuJ3QgYWN0dWFsbHkgY2FycnkgdGhyb3VnaCB0byB0aGUgcHJvY2VzcyBsZXZlbAotICAgICAgICAgICAgIyBiZWNhdXNlIHRoZXkgZG9uJ3Qgc3VwcG9ydCB1bnNldGVudgotICAgICAgICAgICAgIyBJZiB0aGF0J3MgdGhlIGNhc2UsIGFib3J0LgotICAgICAgICAgICAgZGlzcGxheSA9IG9zLnBvcGVuKCdlY2hvICRESVNQTEFZJykucmVhZCgpLnN0cmlwKCkKLSAgICAgICAgICAgIGlmIGRpc3BsYXk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRjbCA9IFRjbCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLndpbmZvX2dlb21ldHJ5KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHRjbC5sb2FkdGspCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBvbGRfZGlzcGxheSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydESVNQTEFZJ10gPSBvbGRfZGlzcGxheQotCiAgICAgZGVmIHRlc3RMb2FkV2l0aFVOQyhzZWxmKToKICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKQEAgLTE3MCwxMyArMTQ3LDE0IEBACiAgICAgICAgICAgICBlbnYudW5zZXQoIlRDTF9MSUJSQVJZIikKICAgICAgICAgICAgIGYgPSBvcy5wb3BlbignJXMgLWMgImltcG9ydCBUa2ludGVyOyBwcmludCBUa2ludGVyIicgJSAodW5jX25hbWUsKSkKIAotICAgICAgICBzZWxmLmFzc2VydF8oJ1RraW50ZXIucHknIGluIGYucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1RraW50ZXIucHknIGluIGYucmVhZCgpKQogICAgICAgICAjIGV4aXQgY29kZSBtdXN0IGJlIHplcm8KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNsb3NlKCksIE5vbmUpCiAKIAorCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUY2xUZXN0KQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGNsVGVzdCwgVGtpbnRlclRlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKaW5kZXggODM4ZjZmYi4uZTQwYzFmZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKQEAgLTEsMjAgKzEsNDMgQEAKIGltcG9ydCBzb2NrZXQKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0ZWxuZXRsaWIKIGltcG9ydCB0aW1lCitpbXBvcnQgUXVldWUKIAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIAogSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCitFT0Zfc2lnaWwgPSBvYmplY3QoKQogCi1kZWYgc2VydmVyKGV2dCwgc2Vydik6CitkZWYgc2VydmVyKGV2dCwgc2VydiwgZGF0YXE9Tm9uZSk6CisgICAgIiIiIE9wZW4gYSB0Y3Agc2VydmVyIGluIHRocmVlIHN0ZXBzCisgICAgICAgIDEpIHNldCBldnQgdG8gdHJ1ZSB0byBsZXQgdGhlIHBhcmVudCBrbm93IHdlIGFyZSByZWFkeQorICAgICAgICAyKSBbb3B0aW9uYWxdIGlmIGlzIG5vdCBGYWxzZSwgd3JpdGUgdGhlIGxpc3Qgb2YgZGF0YSBmcm9tIGRhdGFxLmdldCgpCisgICAgICAgICAgIHRvIHRoZSBzb2NrZXQuCisgICAgICAgIDMpIHNldCBldnQgdG8gdHJ1ZSB0byBsZXQgdGhlIHBhcmVudCBrbm93IHdlJ3JlIGRvbmUKKyAgICAiIiIKICAgICBzZXJ2Lmxpc3Rlbig1KQogICAgIGV2dC5zZXQoKQogICAgIHRyeToKICAgICAgICAgY29ubiwgYWRkciA9IHNlcnYuYWNjZXB0KCkKKyAgICAgICAgaWYgZGF0YXE6CisgICAgICAgICAgICBkYXRhID0gJycKKyAgICAgICAgICAgIG5ld19kYXRhID0gZGF0YXEuZ2V0KFRydWUsIDAuNSkKKyAgICAgICAgICAgIGRhdGFxLnRhc2tfZG9uZSgpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBuZXdfZGF0YToKKyAgICAgICAgICAgICAgICBpZiBpdGVtID09IEVPRl9zaWdpbDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGl0ZW0pIGluIFtpbnQsIGZsb2F0XToKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcChpdGVtKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gaXRlbQorICAgICAgICAgICAgICAgIHdyaXR0ZW4gPSBjb25uLnNlbmQoZGF0YSkKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVt3cml0dGVuOl0KICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CiAgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBjb25uLmNsb3NlKCkKICAgICBmaW5hbGx5OgogICAgICAgICBzZXJ2LmNsb3NlKCkKICAgICAgICAgZXZ0LnNldCgpCkBAIC0yNiwxMyArNDksMTUgQEAKICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgzKQogICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPShzZWxmLmV2dCxzZWxmLnNvY2spKS5zdGFydCgpCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPShzZWxmLmV2dCxzZWxmLnNvY2spKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCiAgICAgICAgIHNlbGYuZXZ0LndhaXQoKQogICAgICAgICBzZWxmLmV2dC5jbGVhcigpCiAgICAgICAgIHRpbWUuc2xlZXAoLjEpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKIAogICAgIGRlZiB0ZXN0QmFzaWMoc2VsZik6CiAgICAgICAgICMgY29ubmVjdHMKQEAgLTcxLDkgKzk2LDI3NyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlbG5ldC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCiAgICAgICAgIHRlbG5ldC5zb2NrLmNsb3NlKCkKIAorZGVmIF9yZWFkX3NldFVwKHNlbGYpOgorICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICBzZWxmLmRhdGFxID0gUXVldWUuUXVldWUoKQorICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICBzZWxmLnNvY2suc2V0dGltZW91dCgzKQorICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQorICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPShzZWxmLmV2dCxzZWxmLnNvY2ssIHNlbGYuZGF0YXEpKQorICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKyAgICBzZWxmLmV2dC53YWl0KCkKKyAgICBzZWxmLmV2dC5jbGVhcigpCisgICAgdGltZS5zbGVlcCguMSkKKworZGVmIF9yZWFkX3RlYXJEb3duKHNlbGYpOgorICAgIHNlbGYuZXZ0LndhaXQoKQorICAgIHNlbGYudGhyZWFkLmpvaW4oKQorCitjbGFzcyBSZWFkVGVzdHMoVGVzdENhc2UpOgorICAgIHNldFVwID0gX3JlYWRfc2V0VXAKKyAgICB0ZWFyRG93biA9IF9yZWFkX3RlYXJEb3duCisKKyAgICAjIHVzZSBhIHNpbWlsYXIgYXBwcm9hY2ggdG8gdGVzdGluZyB0aW1lb3V0cyBhcyB0ZXN0X3RpbWVvdXQucHkKKyAgICAjIHRoZXNlIHdpbGwgbmV2ZXIgcGFzcyAxMDAlIGJ1dCBtYWtlIHRoZSBmdXp6IGJpZyBlbm91Z2ggdGhhdCBpdCBpcyByYXJlCisgICAgYmxvY2tfbG9uZyA9IDAuNgorICAgIGJsb2NrX3Nob3J0ID0gMC4zCisgICAgZGVmIHRlc3RfcmVhZF91bnRpbF9BKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZF91bnRpbChleHBlY3RlZCwgW3RpbWVvdXRdKQorICAgICAgICAgIFJlYWQgdW50aWwgdGhlIGV4cGVjdGVkIHN0cmluZyBoYXMgYmVlbiBzZWVuLCBvciBhIHRpbWVvdXQgaXMKKyAgICAgICAgICBoaXQgKGRlZmF1bHQgaXMgbm8gdGltZW91dCk7IG1heSBibG9jay4KKyAgICAgICAgIiIiCisgICAgICAgIHdhbnQgPSBbJ3gnICogMTAsICdtYXRjaCcsICd5JyAqIDEwLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoJ21hdGNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnJy5qb2luKHdhbnRbOi0yXSkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3VudGlsX0Ioc2VsZik6CisgICAgICAgICMgdGVzdCB0aGUgdGltZW91dCAtIGl0IGRvZXMgTk9UIHJhaXNlIHNvY2tldC50aW1lb3V0CisgICAgICAgIHdhbnQgPSBbJ2hlbGxvJywgc2VsZi5ibG9ja19sb25nLCAnbm90IHNlZW4nLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoJ25vdCBzZWVuJywgc2VsZi5ibG9ja19zaG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB3YW50WzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlbG5ldC5yZWFkX2FsbCgpLCAnbm90IHNlZW4nKQorCisgICAgZGVmIHRlc3RfcmVhZF9hbGxfQShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHJlYWRfYWxsKCkKKyAgICAgICAgICBSZWFkIGFsbCBkYXRhIHVudGlsIEVPRjsgbWF5IGJsb2NrLgorICAgICAgICAiIiIKKyAgICAgICAgd2FudCA9IFsneCcgKiA1MDAsICd5JyAqIDUwMCwgJ3onICogNTAwLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfYWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnJy5qb2luKHdhbnRbOi0xXSkpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIF90ZXN0X2Jsb2NraW5nKHNlbGYsIGZ1bmMpOgorICAgICAgICBzZWxmLmRhdGFxLnB1dChbc2VsZi5ibG9ja19sb25nLCBFT0Zfc2lnaWxdKQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIGRhdGEgPSBmdW5jKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuYmxvY2tfc2hvcnQgPD0gdGltZS50aW1lKCkgLSBzdGFydCkKKworICAgIGRlZiB0ZXN0X3JlYWRfYWxsX0Ioc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYmxvY2tpbmcodGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpLnJlYWRfYWxsKQorCisgICAgZGVmIHRlc3RfcmVhZF9hbGxfQyhzZWxmKToKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoW0VPRl9zaWdpbF0pCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICB0ZWxuZXQucmVhZF9hbGwoKQorICAgICAgICB0ZWxuZXQucmVhZF9hbGwoKSAjIHNob3VsZG4ndCByYWlzZQorCisgICAgZGVmIHRlc3RfcmVhZF9zb21lX0Eoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICByZWFkX3NvbWUoKQorICAgICAgICAgIFJlYWQgYXQgbGVhc3Qgb25lIGJ5dGUgb3IgRU9GOyBtYXkgYmxvY2suCisgICAgICAgICIiIgorICAgICAgICAjIHRlc3QgJ2F0IGxlYXN0IG9uZSBieXRlJworICAgICAgICB3YW50ID0gWyd4JyAqIDUwMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX2FsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGF0YSkgPj0gMSkKKworICAgIGRlZiB0ZXN0X3JlYWRfc29tZV9CKHNlbGYpOgorICAgICAgICAjIHRlc3QgRU9GCisgICAgICAgIHNlbGYuZGF0YXEucHV0KFtFT0Zfc2lnaWxdKQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LnJlYWRfc29tZSgpKQorCisgICAgZGVmIHRlc3RfcmVhZF9zb21lX0Moc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYmxvY2tpbmcodGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpLnJlYWRfc29tZSkKKworICAgIGRlZiBfdGVzdF9yZWFkX2FueV9lYWdlcl9BKHNlbGYsIGZ1bmNfbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICByZWFkX3ZlcnlfZWFnZXIoKQorICAgICAgICAgIFJlYWQgYWxsIGRhdGEgYXZhaWxhYmxlIGFscmVhZHkgcXVldWVkIG9yIG9uIHRoZSBzb2NrZXQsCisgICAgICAgICAgd2l0aG91dCBibG9ja2luZy4KKyAgICAgICAgIiIiCisgICAgICAgIHdhbnQgPSBbc2VsZi5ibG9ja19sb25nLCAneCcgKiAxMDAsICd5JyAqIDEwMCwgRU9GX3NpZ2lsXQorICAgICAgICBleHBlY3RzID0gd2FudFsxXSArIHdhbnRbMl0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHRlbG5ldCwgZnVuY19uYW1lKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhICs9IGZ1bmMoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RzLnN0YXJ0c3dpdGgoZGF0YSkpCisgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RzLCBkYXRhKQorCisgICAgZGVmIF90ZXN0X3JlYWRfYW55X2VhZ2VyX0Ioc2VsZiwgZnVuY19uYW1lKToKKyAgICAgICAgIyB0ZXN0IEVPRgorICAgICAgICBzZWxmLmRhdGFxLnB1dChbRU9GX3NpZ2lsXSkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5ibG9ja19zaG9ydCkKKyAgICAgICAgZnVuYyA9IGdldGF0dHIodGVsbmV0LCBmdW5jX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmdW5jKQorCisgICAgIyByZWFkX2VhZ2VyIGFuZCByZWFkX3ZlcnlfZWFnZXIgbWFrZSB0aGUgc2FtZSBnYXVyYW50ZWVzCisgICAgIyAodGhleSBiZWhhdmUgZGlmZmVyZW50bHkgYnV0IHdlIG9ubHkgdGVzdCB0aGUgZ2F1cmFudGVlcykKKyAgICBkZWYgdGVzdF9yZWFkX3ZlcnlfZWFnZXJfQShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9lYWdlcl9BKCdyZWFkX3ZlcnlfZWFnZXInKQorICAgIGRlZiB0ZXN0X3JlYWRfdmVyeV9lYWdlcl9CKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRfYW55X2VhZ2VyX0IoJ3JlYWRfdmVyeV9lYWdlcicpCisgICAgZGVmIHRlc3RfcmVhZF9lYWdlcl9BKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRfYW55X2VhZ2VyX0EoJ3JlYWRfZWFnZXInKQorICAgIGRlZiB0ZXN0X3JlYWRfZWFnZXJfQihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9lYWdlcl9CKCdyZWFkX2VhZ2VyJykKKyAgICAjIE5CIC0tIHdlIG5lZWQgdG8gdGVzdCB0aGUgSUFDIGJsb2NrIHdoaWNoIGlzIG1lbnRpb25lZCBpbiB0aGUgZG9jc3RyaW5nCisgICAgIyBidXQgbm90IGluIHRoZSBtb2R1bGUgZG9jcworCisgICAgZGVmIF90ZXN0X3JlYWRfYW55X2xhenlfQihzZWxmLCBmdW5jX25hbWUpOgorICAgICAgICBzZWxmLmRhdGFxLnB1dChbRU9GX3NpZ2lsXSkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHRlbG5ldCwgZnVuY19uYW1lKQorICAgICAgICB0ZWxuZXQuZmlsbF9yYXdxKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGZ1bmMpCisKKyAgICBkZWYgdGVzdF9yZWFkX2xhenlfQShzZWxmKToKKyAgICAgICAgd2FudCA9IFsneCcgKiAxMDAsIEVPRl9zaWdpbF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5ibG9ja19zaG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LnJlYWRfbGF6eSgpKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB0ZWxuZXQucmVhZF9sYXp5KCkKKyAgICAgICAgICAgICAgICBkYXRhICs9IHJlYWRfZGF0YQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgIHRlbG5ldC5maWxsX3Jhd3EoKQorICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudFswXS5zdGFydHN3aXRoKGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHdhbnRbMF0pCisKKyAgICBkZWYgdGVzdF9yZWFkX2xhenlfQihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9sYXp5X0IoJ3JlYWRfbGF6eScpCisKKyAgICBkZWYgdGVzdF9yZWFkX3ZlcnlfbGF6eV9BKHNlbGYpOgorICAgICAgICB3YW50ID0gWyd4JyAqIDEwMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgdGltZS5zbGVlcChzZWxmLmJsb2NrX3Nob3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCB0ZWxuZXQucmVhZF92ZXJ5X2xhenkoKSkKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gdGVsbmV0LnJlYWRfdmVyeV9sYXp5KCkKKyAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZGF0YSArPSByZWFkX2RhdGEKKyAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgdGVsbmV0LmZpbGxfcmF3cSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LmNvb2tlZHEpCisgICAgICAgICAgICAgICAgdGVsbmV0LnByb2Nlc3NfcmF3cSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudFswXS5zdGFydHN3aXRoKGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHdhbnRbMF0pCisKKyAgICBkZWYgdGVzdF9yZWFkX3ZlcnlfbGF6eV9CKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRfYW55X2xhenlfQigncmVhZF92ZXJ5X2xhenknKQorCitjbGFzcyBuZWdvX2NvbGxlY3RvcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYl9nZXR0ZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuc2VlbiA9ICcnCisgICAgICAgIHNlbGYuc2JfZ2V0dGVyID0gc2JfZ2V0dGVyCisgICAgICAgIHNlbGYuc2Jfc2VlbiA9ICcnCisKKyAgICBkZWYgZG9fbmVnbyhzZWxmLCBzb2NrLCBjbWQsIG9wdCk6CisgICAgICAgIHNlbGYuc2VlbiArPSBjbWQgKyBvcHQKKyAgICAgICAgaWYgY21kID09IHRsLlNFIGFuZCBzZWxmLnNiX2dldHRlcjoKKyAgICAgICAgICAgIHNiX2RhdGEgPSBzZWxmLnNiX2dldHRlcigpCisgICAgICAgICAgICBzZWxmLnNiX3NlZW4gKz0gc2JfZGF0YQorCit0bCA9IHRlbG5ldGxpYgorY2xhc3MgT3B0aW9uVGVzdHMoVGVzdENhc2UpOgorICAgIHNldFVwID0gX3JlYWRfc2V0VXAKKyAgICB0ZWFyRG93biA9IF9yZWFkX3RlYXJEb3duCisgICAgIyBSRkMgODU0IGNvbW1hbmRzCisgICAgY21kcyA9IFt0bC5BTywgdGwuQVlULCB0bC5CUkssIHRsLkVDLCB0bC5FTCwgdGwuR0EsIHRsLklQLCB0bC5OT1BdCisKKyAgICBkZWYgX3Rlc3RfY29tbWFuZChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiIGhlbHBlciBmb3IgdGVzdGluZyBJQUMgKyBjbWQgIiIiCisgICAgICAgIHNlbGYuc2V0VXAoKQorICAgICAgICBzZWxmLmRhdGFxLnB1dChkYXRhKQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgbmVnbyA9IG5lZ29fY29sbGVjdG9yKCkKKyAgICAgICAgdGVsbmV0LnNldF9vcHRpb25fbmVnb3RpYXRpb25fY2FsbGJhY2sobmVnby5kb19uZWdvKQorICAgICAgICB0eHQgPSB0ZWxuZXQucmVhZF9hbGwoKQorICAgICAgICBjbWQgPSBuZWdvLnNlZW4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihjbWQpID4gMCkgIyB3ZSBleHBlY3QgYXQgbGVhc3Qgb25lIGNvbW1hbmQKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjbWRbMF0sIHNlbGYuY21kcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWRbMV0sIHRsLk5PT1BUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbignJy5qb2luKGRhdGFbOi0xXSkpLCBsZW4odHh0ICsgY21kKSkKKyAgICAgICAgbmVnby5zYl9nZXR0ZXIgPSBOb25lICMgYnJlYWsgdGhlIG5lZ28gPT4gdGVsbmV0IGN5Y2xlCisgICAgICAgIHNlbGYudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfSUFDX2NvbW1hbmRzKHNlbGYpOgorICAgICAgICAjIHJlc2V0IG91ciBzZXR1cAorICAgICAgICBzZWxmLmRhdGFxLnB1dChbRU9GX3NpZ2lsXSkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIHNlbGYudGVhckRvd24oKQorCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5jbWRzOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9jb21tYW5kKFsneCcgKiAxMDAsIHRsLklBQyArIGNtZCwgJ3knKjEwMCwgRU9GX3NpZ2lsXSkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfY29tbWFuZChbJ3gnICogMTAsIHRsLklBQyArIGNtZCwgJ3knKjEwLCBFT0Zfc2lnaWxdKQorICAgICAgICAgICAgc2VsZi5fdGVzdF9jb21tYW5kKFt0bC5JQUMgKyBjbWQsIEVPRl9zaWdpbF0pCisgICAgICAgICMgYWxsIGF0IG9uY2UKKyAgICAgICAgc2VsZi5fdGVzdF9jb21tYW5kKFt0bC5JQUMgKyBjbWQgZm9yIChjbWQpIGluIHNlbGYuY21kc10gKyBbRU9GX3NpZ2lsXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LnJlYWRfc2JfZGF0YSgpKQorCisgICAgZGVmIHRlc3RfU0JfY29tbWFuZHMoc2VsZik6CisgICAgICAgICMgUkZDIDg1NSwgc3VibmVnb3RpYXRpb25zIHBvcnRpb24KKyAgICAgICAgc2VuZCA9IFt0bC5JQUMgKyB0bC5TQiArIHRsLklBQyArIHRsLlNFLAorICAgICAgICAgICAgICAgIHRsLklBQyArIHRsLlNCICsgdGwuSUFDICsgdGwuSUFDICsgdGwuSUFDICsgdGwuU0UsCisgICAgICAgICAgICAgICAgdGwuSUFDICsgdGwuU0IgKyB0bC5JQUMgKyB0bC5JQUMgKyAnYWEnICsgdGwuSUFDICsgdGwuU0UsCisgICAgICAgICAgICAgICAgdGwuSUFDICsgdGwuU0IgKyAnYmInICsgdGwuSUFDICsgdGwuSUFDICsgdGwuSUFDICsgdGwuU0UsCisgICAgICAgICAgICAgICAgdGwuSUFDICsgdGwuU0IgKyAnY2MnICsgdGwuSUFDICsgdGwuSUFDICsgJ2RkJyArIHRsLklBQyArIHRsLlNFLAorICAgICAgICAgICAgICAgIEVPRl9zaWdpbCwKKyAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoc2VuZCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIG5lZ28gPSBuZWdvX2NvbGxlY3Rvcih0ZWxuZXQucmVhZF9zYl9kYXRhKQorICAgICAgICB0ZWxuZXQuc2V0X29wdGlvbl9uZWdvdGlhdGlvbl9jYWxsYmFjayhuZWdvLmRvX25lZ28pCisgICAgICAgIHR4dCA9IHRlbG5ldC5yZWFkX2FsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LCAnJykKKyAgICAgICAgd2FudF9zYl9kYXRhID0gdGwuSUFDICsgdGwuSUFDICsgJ2FhYmInICsgdGwuSUFDICsgJ2NjJyArIHRsLklBQyArICdkZCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZWdvLnNiX3NlZW4sIHdhbnRfc2JfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LnJlYWRfc2JfZGF0YSgpKQorICAgICAgICBuZWdvLnNiX2dldHRlciA9IE5vbmUgIyBicmVhayB0aGUgbmVnbyA9PiB0ZWxuZXQgY3ljbGUKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJhbFRlc3RzKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJhbFRlc3RzLCBSZWFkVGVzdHMsIE9wdGlvblRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQppbmRleCA2MTAxNDMxLi4yNzA2OGUzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKQEAgLTMsNyArMyw2IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCByZQotaW1wb3J0IGVycm5vCiBpbXBvcnQgd2FybmluZ3MKIAogaW1wb3J0IHVuaXR0ZXN0CkBAIC0yNCw5ICsyMyw3IEBACiAKICMgVEVTVF9GSUxFUyBtYXkgbmVlZCB0byBiZSB0d2Vha2VkIGZvciBzeXN0ZW1zIGRlcGVuZGluZyBvbiB0aGUgbWF4aW11bQogIyBudW1iZXIgb2YgZmlsZXMgdGhhdCBjYW4gYmUgb3BlbmVkIGF0IG9uZSB0aW1lIChzZWUgdWxpbWl0IC1uKQotaWYgc3lzLnBsYXRmb3JtID09ICdtYWMnOgotICAgIFRFU1RfRklMRVMgPSAzMgotZWxpZiBzeXMucGxhdGZvcm0gaW4gKCdvcGVuYnNkMycsICdvcGVuYnNkNCcpOgoraWYgc3lzLnBsYXRmb3JtIGluICgnb3BlbmJzZDMnLCAnb3BlbmJzZDQnKToKICAgICBURVNUX0ZJTEVTID0gNDgKIGVsc2U6CiAgICAgVEVTVF9GSUxFUyA9IDEwMApAQCAtNTksNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlICclcycgZG9lcyBub3QgZW5kIHdpdGggJyVzJyIgJSAobmJhc2UsIHN1ZikpCiAKICAgICAgICAgbmJhc2UgPSBuYmFzZVtsZW4ocHJlKTpsZW4obmJhc2UpLWxlbihzdWYpXQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5zdHJfY2hlY2subWF0Y2gobmJhc2UpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zdHJfY2hlY2subWF0Y2gobmJhc2UpLAogICAgICAgICAgICAgICAgICAgICAgInJhbmRvbSBzdHJpbmcgJyVzJyBkb2VzIG5vdCBtYXRjaCAvXlthLXpBLVowLTlfLV17Nn0kLyIKICAgICAgICAgICAgICAgICAgICAgICUgbmJhc2UpCiAKQEAgLTg4LDcgKzg1LDcgQEAKICAgICAgICAgZm9yIGtleSBpbiBkaWN0OgogICAgICAgICAgICAgaWYga2V5WzBdICE9ICdfJyBhbmQga2V5IG5vdCBpbiBleHBlY3RlZDoKICAgICAgICAgICAgICAgICB1bmV4cC5hcHBlbmQoa2V5KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobGVuKHVuZXhwKSA9PSAwLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHVuZXhwKSA9PSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQga2V5czogJXMiICUgdW5leHApCiAKIHRlc3RfY2xhc3Nlcy5hcHBlbmQodGVzdF9leHBvcnRzKQpAQCAtMTEzLDcgKzExMCw3IEBACiAgICAgICAgIGZvciBpIGluIHhyYW5nZShURVNUX0ZJTEVTKToKICAgICAgICAgICAgIHMgPSByLm5leHQoKQogICAgICAgICAgICAgc2VsZi5uYW1lQ2hlY2socywgJycsICcnLCAnJykKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKHMgaW4gZGljdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocywgZGljdCkKICAgICAgICAgICAgIGRpY3Rbc10gPSAxCiAKICAgICBkZWYgdGVzdF9zdXBwb3J0c19pdGVyKHNlbGYpOgpAQCAtMTQwLDEwICsxMzcsOSBAQAogCiAgICAgICAgIGNhbmQgPSB0ZW1wZmlsZS5fY2FuZGlkYXRlX3RlbXBkaXJfbGlzdCgpCiAKLSAgICAgICAgc2VsZi5mYWlsSWYobGVuKGNhbmQpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKGNhbmQpID09IDApCiAgICAgICAgIGZvciBjIGluIGNhbmQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjLCBiYXNlc3RyaW5nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbm90IGEgc3RyaW5nIiAlIGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgYmFzZXN0cmluZykKIAogICAgIGRlZiB0ZXN0X3dhbnRlZF9kaXJzKHNlbGYpOgogICAgICAgICAjIF9jYW5kaWRhdGVfdGVtcGRpcl9saXN0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkaXJlY3RvcmllcwpAQCAtMTUzLDIxICsxNDksMjEgQEAKICAgICAgICAgICAgIGZvciBlbnZuYW1lIGluICdUTVBESVInLCAnVEVNUCcsICdUTVAnOgogICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5nZXRlbnYoZW52bmFtZSkKICAgICAgICAgICAgICAgICBpZiBub3QgZGlybmFtZToKLSAgICAgICAgICAgICAgICAgICAgZW52LnNldChlbnZuYW1lLCBvcy5wYXRoLmFic3BhdGgoZW52bmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGVudltlbnZuYW1lXSA9IG9zLnBhdGguYWJzcGF0aChlbnZuYW1lKQogCiAgICAgICAgICAgICBjYW5kID0gdGVtcGZpbGUuX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QoKQogCiAgICAgICAgICAgICBmb3IgZW52bmFtZSBpbiAnVE1QRElSJywgJ1RFTVAnLCAnVE1QJzoKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0ZW52KGVudm5hbWUpCiAgICAgICAgICAgICAgICAgaWYgbm90IGRpcm5hbWU6IHJhaXNlIFZhbHVlRXJyb3IKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oZGlybmFtZSBpbiBjYW5kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlybmFtZSwgY2FuZCkKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5nZXRjd2QoKQogICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgb3MuZXJyb3IpOgogICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGRpcm5hbWUgaW4gY2FuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlybmFtZSwgY2FuZCkKIAogICAgICAgICAgICAgIyBOb3QgcHJhY3RpY2FsIHRvIHRyeSB0byB2ZXJpZnkgdGhlIHByZXNlbmNlIG9mIE9TLXNwZWNpZmljCiAgICAgICAgICAgICAjIHBhdGhzIGluIHRoaXMgbGlzdC4KQEAgLTE4NCwxNCArMTgwLDE0IEBACiAgICAgZGVmIHRlc3RfcmV0dmFsKHNlbGYpOgogICAgICAgICAjIF9nZXRfY2FuZGlkYXRlX25hbWVzIHJldHVybnMgYSBfUmFuZG9tTmFtZVNlcXVlbmNlIG9iamVjdAogICAgICAgICBvYmogPSB0ZW1wZmlsZS5fZ2V0X2NhbmRpZGF0ZV9uYW1lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG9iaiwgdGVtcGZpbGUuX1JhbmRvbU5hbWVTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmosIHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UpCiAKICAgICBkZWYgdGVzdF9zYW1lX3RoaW5nKHNlbGYpOgogICAgICAgICAjIF9nZXRfY2FuZGlkYXRlX25hbWVzIGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIG9iamVjdAogICAgICAgICBhID0gdGVtcGZpbGUuX2dldF9jYW5kaWRhdGVfbmFtZXMoKQogICAgICAgICBiID0gdGVtcGZpbGUuX2dldF9jYW5kaWRhdGVfbmFtZXMoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCiAKIHRlc3RfY2xhc3Nlcy5hcHBlbmQodGVzdF9fZ2V0X2NhbmRpZGF0ZV9uYW1lcykKIApAQCAtMjU0LDEyICsyNTAsMTIgQEAKICAgICBkZWYgdGVzdF9maWxlX21vZGUoc2VsZik6CiAgICAgICAgICMgX21rc3RlbXBfaW5uZXIgY3JlYXRlcyBmaWxlcyB3aXRoIHRoZSBwcm9wZXIgbW9kZQogICAgICAgICBpZiBub3QgaGFzX3N0YXQ6Ci0gICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAjIHVnaCwgY2FuJ3QgdXNlIFRlc3RTa2lwcGVkLgorICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgIyB1Z2gsIGNhbid0IHVzZSBTa2lwVGVzdC4KIAogICAgICAgICBmaWxlID0gc2VsZi5kb19jcmVhdGUoKQogICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZmlsZS5uYW1lKS5zdF9tb2RlKQogICAgICAgICBleHBlY3RlZCA9IDA2MDAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14JywgJ21hYycpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsICdvczJlbXgnKToKICAgICAgICAgICAgICMgVGhlcmUncyBubyBkaXN0aW5jdGlvbiBhbW9uZyAndXNlcicsICdncm91cCcgYW5kICd3b3JsZCc7CiAgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCiAgICAgICAgICAgICB1c2VyID0gZXhwZWN0ZWQgPj4gNgpAQCAtMjY5LDcgKzI2NSw3IEBACiAgICAgZGVmIHRlc3Rfbm9pbmhlcml0KHNlbGYpOgogICAgICAgICAjIF9ta3N0ZW1wX2lubmVyIGZpbGUgaGFuZGxlcyBhcmUgbm90IGluaGVyaXRlZCBieSBjaGlsZCBwcm9jZXNzZXMKICAgICAgICAgaWYgbm90IGhhc19zcGF3bmw6Ci0gICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAjIHVnaCwgY2FuJ3QgdXNlIFRlc3RTa2lwcGVkLgorICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgIyB1Z2gsIGNhbid0IHVzZSBTa2lwVGVzdC4KIAogICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgIHY9InYiCkBAIC0zMDAsMTQgKzI5NiwxNCBAQAogICAgICAgICAgICAgZGVjb3JhdGVkID0gc3lzLmV4ZWN1dGFibGUKIAogICAgICAgICByZXR2YWwgPSBvcy5zcGF3bmwob3MuUF9XQUlULCBzeXMuZXhlY3V0YWJsZSwgZGVjb3JhdGVkLCB0ZXN0ZXIsIHYsIGZkKQotICAgICAgICBzZWxmLmZhaWxJZihyZXR2YWwgPCAwLAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJldHZhbCA8IDAsCiAgICAgICAgICAgICAgICAgICAgICJjaGlsZCBwcm9jZXNzIGNhdWdodCBmYXRhbCBzaWduYWwgJWQiICUgLXJldHZhbCkKLSAgICAgICAgc2VsZi5mYWlsSWYocmV0dmFsID4gMCwgImNoaWxkIHByb2Nlc3MgcmVwb3J0cyBmYWlsdXJlICVkIiVyZXR2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmV0dmFsID4gMCwgImNoaWxkIHByb2Nlc3MgcmVwb3J0cyBmYWlsdXJlICVkIiVyZXR2YWwpCiAKICAgICBkZWYgdGVzdF90ZXh0bW9kZShzZWxmKToKICAgICAgICAgIyBfbWtzdGVtcF9pbm5lciBjYW4gY3JlYXRlIGZpbGVzIGluIHRleHQgbW9kZQogICAgICAgICBpZiBub3QgaGFzX3RleHRtb2RlOgotICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgIyB1Z2gsIGNhbid0IHVzZSBUZXN0U2tpcHBlZC4KKyAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICMgdWdoLCBjYW4ndCB1c2UgU2tpcFRlc3QuCiAKICAgICAgICAgc2VsZi5kb19jcmVhdGUoYmluPTApLndyaXRlKCJibGF0XG4iKQogICAgICAgICAjIFhYWCBzaG91bGQgdGVzdCB0aGF0IHRoZSBmaWxlIHJlYWxseSBpcyBhIHRleHQgZmlsZQpAQCAtMzIyLDggKzMxOCw4IEBACiAgICAgICAgICMgZ2V0dGVtcHByZWZpeCByZXR1cm5zIGEgbm9uZW1wdHkgcHJlZml4IHN0cmluZwogICAgICAgICBwID0gdGVtcGZpbGUuZ2V0dGVtcHByZWZpeCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocCwgYmFzZXN0cmluZykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4ocCkgPiAwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocCwgYmFzZXN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihwKSA+IDApCiAKICAgICBkZWYgdGVzdF91c2FibGVfdGVtcGxhdGUoc2VsZik6CiAgICAgICAgICMgZ2V0dGVtcHByZWZpeCByZXR1cm5zIGEgdXNhYmxlIHByZWZpeCBzdHJpbmcKQEAgLTM1NCw5ICszNTAsOSBAQAogICAgICAgICAjIGdldHRlbXBkaXIgcmV0dXJucyBhIGRpcmVjdG9yeSB3aGljaCBleGlzdHMKIAogICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguaXNhYnMoZGlyKSBvciBkaXIgPT0gb3MuY3VyZGlyLAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2FicyhkaXIpIG9yIGRpciA9PSBvcy5jdXJkaXIsCiAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbm90IGFuIGFic29sdXRlIHBhdGgiICUgZGlyKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5pc2RpcihkaXIpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2RpcihkaXIpLAogICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIG5vdCBhIGRpcmVjdG9yeSIgJSBkaXIpCiAKICAgICBkZWYgdGVzdF9kaXJlY3Rvcnlfd3JpdGFibGUoc2VsZik6CkBAIC0zNzcsNyArMzczLDcgQEAKICAgICAgICAgYSA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQogICAgICAgICBiID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgaXMgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKIAogdGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X2dldHRlbXBkaXIpCiAKQEAgLTQ3MSwxNCArNDY3LDE0IEBACiAgICAgZGVmIHRlc3RfbW9kZShzZWxmKToKICAgICAgICAgIyBta2R0ZW1wIGNyZWF0ZXMgZGlyZWN0b3JpZXMgd2l0aCB0aGUgcHJvcGVyIG1vZGUKICAgICAgICAgaWYgbm90IGhhc19zdGF0OgotICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgIyB1Z2gsIGNhbid0IHVzZSBUZXN0U2tpcHBlZC4KKyAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICMgdWdoLCBjYW4ndCB1c2UgU2tpcFRlc3QuCiAKICAgICAgICAgZGlyID0gc2VsZi5kb19jcmVhdGUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZGlyKS5zdF9tb2RlKQogICAgICAgICAgICAgbW9kZSAmPSAwNzc3ICMgTWFzayBvZmYgc3RpY2t5IGJpdHMgaW5oZXJpdGVkIGZyb20gL3RtcAogICAgICAgICAgICAgZXhwZWN0ZWQgPSAwNzAwCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsICdvczJlbXgnLCAnbWFjJyk6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsICdvczJlbXgnKToKICAgICAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gZGlzdGluY3Rpb24gYW1vbmcgJ3VzZXInLCAnZ3JvdXAnIGFuZCAnd29ybGQnOwogICAgICAgICAgICAgICAgICMgcmVwbGljYXRlIHRoZSAndXNlcicgYml0cy4KICAgICAgICAgICAgICAgICB1c2VyID0gZXhwZWN0ZWQgPj4gNgpAQCAtNTgwLDcgKzU3Niw3IEBACiAgICAgZGVmIHRlc3RfY3JlYXRlc19uYW1lZChzZWxmKToKICAgICAgICAgIyBOYW1lZFRlbXBvcmFyeUZpbGUgY3JlYXRlcyBmaWxlcyB3aXRoIG5hbWVzCiAgICAgICAgIGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3MucGF0aC5leGlzdHMoZi5uYW1lKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGYubmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZWRUZW1wb3JhcnlGaWxlICVzIGRvZXMgbm90IGV4aXN0IiAlIGYubmFtZSkKIAogICAgIGRlZiB0ZXN0X2RlbF9vbl9jbG9zZShzZWxmKToKQEAgLTU5MCw3ICs1ODYsNyBAQAogICAgICAgICAgICAgZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkaXI9ZGlyKQogICAgICAgICAgICAgZi53cml0ZSgnYmxhdCcpCiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKG9zLnBhdGguZXhpc3RzKGYubmFtZSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGYubmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZWRUZW1wb3JhcnlGaWxlICVzIGV4aXN0cyBhZnRlciBjbG9zZSIgJSBmLm5hbWUpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCkBAIC02MDQsNyArNjAwLDcgQEAKICAgICAgICAgICAgIHRtcCA9IGYubmFtZQogICAgICAgICAgICAgZi53cml0ZSgnYmxhdCcpCiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcy5wYXRoLmV4aXN0cyhmLm5hbWUpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGYubmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZWRUZW1wb3JhcnlGaWxlICVzIG1pc3NpbmcgYWZ0ZXIgY2xvc2UiICUgZi5uYW1lKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgdG1wIGlzIG5vdCBOb25lOgpAQCAtNjI1LDEyICs2MjEsMTIgQEAKICAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CiAgICAgICAgICMgQSBOYW1lZFRlbXBvcmFyeUZpbGUgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIKICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9zLnBhdGguZXhpc3RzKGYubmFtZSkpCi0gICAgICAgIHNlbGYuZmFpbElmKG9zLnBhdGguZXhpc3RzKGYubmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZi5uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmLm5hbWUpKQogICAgICAgICBkZWYgdXNlX2Nsb3NlZCgpOgogICAgICAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFZhbHVlRXJyb3IsIHVzZV9jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVzZV9jbG9zZWQpCiAKICAgICAjIEhvdyB0byB0ZXN0IHRoZSBtb2RlIGFuZCBidWZzaXplIHBhcmFtZXRlcnM/CiAKQEAgLTY1MywyMSArNjQ5LDIxIEBACiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CiAgICAgICAgICMgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGNyZWF0ZSBmaWxlcwogICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUoKQotICAgICAgICBzZWxmLmZhaWxJZihmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQogICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MTAwLCBwcmU9ImEiLCBzdWY9Ii50eHQiKQotICAgICAgICBzZWxmLmZhaWxJZihmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQogCiAgICAgZGVmIHRlc3RfZGVsX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgaXMgZGVsZXRlZCB3aGVuIGNsb3NlZAogICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IHRlbXBmaWxlLlNwb29sZWRUZW1wb3JhcnlGaWxlKG1heF9zaXplPTEwLCBkaXI9ZGlyKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoZi5fcm9sbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCiAgICAgICAgICAgICBmLndyaXRlKCdibGF0ICcgKiA1KQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYuX3JvbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCiAgICAgICAgICAgICBmaWxlbmFtZSA9IGYubmFtZQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJTcG9vbGVkVGVtcG9yYXJ5RmlsZSAlcyBleGlzdHMgYWZ0ZXIgY2xvc2UiICUgZmlsZW5hbWUpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCkBAIC02NzUsNDYgKzY3MSw0NiBAQAogICAgIGRlZiB0ZXN0X3Jld3JpdGVfc21hbGwoc2VsZik6CiAgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjYW4gYmUgd3JpdHRlbiB0byBtdWx0aXBsZSB3aXRoaW4gdGhlIG1heF9zaXplCiAgICAgICAgIGYgPSBzZWxmLmRvX2NyZWF0ZShtYXhfc2l6ZT0zMCkKLSAgICAgICAgc2VsZi5mYWlsSWYoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICAgICAgICAgICBmLnNlZWsoMCwgMCkKICAgICAgICAgICAgIGYud3JpdGUoJ3gnICogMjApCi0gICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCiAKICAgICBkZWYgdGVzdF93cml0ZV9zZXF1ZW50aWFsKHNlbGYpOgogICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgc2hvdWxkIGhvbGQgZXhhY3RseSBtYXhfc2l6ZSBieXRlcywgYW5kIHJvbGwKICAgICAgICAgIyBvdmVyIGFmdGVyd2FyZAogICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MzApCi0gICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCiAgICAgICAgIGYud3JpdGUoJ3gnICogMjApCi0gICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCiAgICAgICAgIGYud3JpdGUoJ3gnICogMTApCi0gICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCiAgICAgICAgIGYud3JpdGUoJ3gnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQogCiAgICAgZGVmIHRlc3Rfc3BhcnNlKHNlbGYpOgogICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgdGhhdCBpcyB3cml0dGVuIGxhdGUgaW4gdGhlIGZpbGUgd2lsbCBleHRlbmQKICAgICAgICAgIyB3aGVuIHRoYXQgb2NjdXJzCiAgICAgICAgIGYgPSBzZWxmLmRvX2NyZWF0ZShtYXhfc2l6ZT0zMCkKLSAgICAgICAgc2VsZi5mYWlsSWYoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKICAgICAgICAgZi5zZWVrKDEwMCwgMCkKLSAgICAgICAgc2VsZi5mYWlsSWYoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKICAgICAgICAgZi53cml0ZSgneCcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCiAKICAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CiAgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBzaG91bGQgcm9sbCBvdmVyIHRvIGEgcmVhbCBmaWxlIG9uIGZpbGVubygpCiAgICAgICAgIGYgPSBzZWxmLmRvX2NyZWF0ZShtYXhfc2l6ZT0zMCkKLSAgICAgICAgc2VsZi5mYWlsSWYoZi5fcm9sbGVkKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZi5maWxlbm8oKSA+IDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5maWxlbm8oKSA+IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCiAKICAgICBkZWYgdGVzdF9tdWx0aXBsZV9jbG9zZV9iZWZvcmVfcm9sbG92ZXIoc2VsZik6CiAgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjYW4gYmUgY2xvc2VkIG1hbnkgdGltZXMgd2l0aG91dCBlcnJvcgogICAgICAgICBmID0gdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGUoKQogICAgICAgICBmLndyaXRlKCdhYmNcbicpCi0gICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKQEAgLTcyNiw3ICs3MjIsNyBAQAogICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGJlIGNsb3NlZCBtYW55IHRpbWVzIHdpdGhvdXQgZXJyb3IKICAgICAgICAgZiA9IHRlbXBmaWxlLlNwb29sZWRUZW1wb3JhcnlGaWxlKG1heF9zaXplPTEpCiAgICAgICAgIGYud3JpdGUoJ2FiY1xuJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYuY2xvc2UoKQpAQCAtNzQ2LDQ2ICs3NDIsNDYgQEAKICAgICAgICAgd3JpdGUoImEiICogMzUpCiAgICAgICAgIHdyaXRlKCJiIiAqIDM1KQogICAgICAgICBzZWVrKDAsIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZWFkKDcwKSA9PSAnYScqMzUgKyAnYicqMzUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWFkKDcwKSA9PSAnYScqMzUgKyAnYicqMzUpCiAKICAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfYmVmb3JlX3JvbGxvdmVyKHNlbGYpOgogICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIKICAgICAgICAgd2l0aCB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZShtYXhfc2l6ZT0xKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYoZi5fcm9sbGVkKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoZi5jbG9zZWQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmLmNsb3NlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQogICAgICAgICBkZWYgdXNlX2Nsb3NlZCgpOgogICAgICAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFZhbHVlRXJyb3IsIHVzZV9jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVzZV9jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfZHVyaW5nX3JvbGxvdmVyKHNlbGYpOgogICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIKICAgICAgICAgd2l0aCB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZShtYXhfc2l6ZT0xKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYoZi5fcm9sbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCiAgICAgICAgICAgICBmLndyaXRlKCdhYmNcbicpCiAgICAgICAgICAgICBmLmZsdXNoKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhmLl9yb2xsZWQpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihmLmNsb3NlZCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYuY2xvc2VkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKICAgICAgICAgZGVmIHVzZV9jbG9zZWQoKToKICAgICAgICAgICAgIHdpdGggZjoKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhWYWx1ZUVycm9yLCB1c2VfY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1c2VfY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2FmdGVyX3JvbGxvdmVyKHNlbGYpOgogICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIKICAgICAgICAgZiA9IHRlbXBmaWxlLlNwb29sZWRUZW1wb3JhcnlGaWxlKG1heF9zaXplPTEpCiAgICAgICAgIGYud3JpdGUoJ2FiY1xuJykKICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCiAgICAgICAgIHdpdGggZjoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGYuY2xvc2VkKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZi5jbG9zZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAgICAgICAgIGRlZiB1c2VfY2xvc2VkKCk6CiAgICAgICAgICAgICB3aXRoIGY6CiAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVmFsdWVFcnJvciwgdXNlX2Nsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXNlX2Nsb3NlZCkKIAogCiB0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfU3Bvb2xlZFRlbXBvcmFyeUZpbGUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5IGIvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQppbmRleCBjOTFlMjQyLi42M2E1NGQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKQEAgLTI5LDcgKzI5LDcgQEAKIAogCiAgICAgZGVmIGNoZWNrKHNlbGYsIHJlc3VsdCwgZXhwZWN0KToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LCBleHBlY3QsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3QsCiAgICAgICAgICAgICAnZXhwZWN0ZWQ6XG4lc1xuYnV0IGdvdDpcbiVzJyAlICgKICAgICAgICAgICAgICAgICBzZWxmLnNob3coZXhwZWN0KSwgc2VsZi5zaG93KHJlc3VsdCkpKQogCkBAIC0zOSw5ICszOSw5IEBACiAKICAgICBkZWYgY2hlY2tfc3BsaXQoc2VsZiwgdGV4dCwgZXhwZWN0KToKICAgICAgICAgcmVzdWx0ID0gc2VsZi53cmFwcGVyLl9zcGxpdCh0ZXh0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQsIGV4cGVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuZXhwZWN0ZWQgJXJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBnb3QgICVyIiAlIChleHBlY3QsIHJlc3VsdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlxuZXhwZWN0ZWQgJXJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IGdvdCAgJXIiICUgKGV4cGVjdCwgcmVzdWx0KSkKIAogCiBjbGFzcyBXcmFwVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKQEAgLTM0OSw5ICszNDksMTAgQEAKICAgICAgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA1MCwgW3UiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRvZGF5PyJdKQogICAgICAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDIwLCBbdSJIZWxsbyB0aGVyZSwgaG93IGFyZSIsICJ5b3UgdG9kYXk/Il0pCiAgICAgICAgICAgICBvbGluZXMgPSBzZWxmLndyYXBwZXIud3JhcCh0ZXh0KQotICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob2xpbmVzLCBsaXN0KSBhbmQgaXNpbnN0YW5jZShvbGluZXNbMF0sIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2xpbmVzLCBsaXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9saW5lc1swXSwgdW5pY29kZSkKICAgICAgICAgICAgIG90ZXh0ID0gc2VsZi53cmFwcGVyLmZpbGwodGV4dCkKLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG90ZXh0LCB1bmljb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG90ZXh0LCB1bmljb2RlKQogCiAgICAgICAgIGRlZiB0ZXN0X25vX3NwbGl0X2F0X3VtbGF1dChzZWxmKToKICAgICAgICAgICAgIHRleHQgPSB1IkRpZSBFbXBmXHhlNG5nZXItQXVzd2FobCIKQEAgLTUwMyw3ICs1MDQsNyBAQAogCiAgICAgZGVmIGFzc2VydFVuY2hhbmdlZChzZWxmLCB0ZXh0KToKICAgICAgICAgIiIiYXNzZXJ0IHRoYXQgZGVkZW50KCkgaGFzIG5vIGVmZmVjdCBvbiAndGV4dCciIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGV4dCwgZGVkZW50KHRleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsIGRlZGVudCh0ZXh0KSkKIAogICAgIGRlZiB0ZXN0X2RlZGVudF9ub21hcmdpbihzZWxmKToKICAgICAgICAgIyBObyBsaW5lcyBpbmRlbnRlZC4KQEAgLTUyNiwxNyArNTI3LDE3IEBACiAgICAgICAgICMgQWxsIGxpbmVzIGluZGVudGVkIGJ5IHR3byBzcGFjZXMuCiAgICAgICAgIHRleHQgPSAiICBIZWxsbyB0aGVyZS5cbiAgSG93IGFyZSB5YT9cbiAgT2ggZ29vZC4iCiAgICAgICAgIGV4cGVjdCA9ICJIZWxsbyB0aGVyZS5cbkhvdyBhcmUgeWE/XG5PaCBnb29kLiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCiAKICAgICAgICAgIyBTYW1lLCB3aXRoIGJsYW5rIGxpbmVzLgogICAgICAgICB0ZXh0ID0gIiAgSGVsbG8gdGhlcmUuXG5cbiAgSG93IGFyZSB5YT9cbiAgT2ggZ29vZC5cbiIKICAgICAgICAgZXhwZWN0ID0gIkhlbGxvIHRoZXJlLlxuXG5Ib3cgYXJlIHlhP1xuT2ggZ29vZC5cbiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCiAKICAgICAgICAgIyBOb3cgaW5kZW50IG9uZSBvZiB0aGUgYmxhbmsgbGluZXMuCiAgICAgICAgIHRleHQgPSAiICBIZWxsbyB0aGVyZS5cbiAgXG4gIEhvdyBhcmUgeWE/XG4gIE9oIGdvb2QuXG4iCiAgICAgICAgIGV4cGVjdCA9ICJIZWxsbyB0aGVyZS5cblxuSG93IGFyZSB5YT9cbk9oIGdvb2QuXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdCwgZGVkZW50KHRleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQogCiAgICAgZGVmIHRlc3RfZGVkZW50X3VuZXZlbihzZWxmKToKICAgICAgICAgIyBMaW5lcyBpbmRlbnRlZCB1bmV2ZW5seS4KQEAgLTU1MCwyNyArNTUxLDI3IEBACiAgICAgd2hpbGUgMToKICAgICAgICAgcmV0dXJuIGZvbwogJycnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdCwgZGVkZW50KHRleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQogCiAgICAgICAgICMgVW5ldmVuIGluZGVudGF0aW9uIHdpdGggYSBibGFuayBsaW5lLgogICAgICAgICB0ZXh0ID0gIiAgRm9vXG4gICAgQmFyXG5cbiAgIEJhelxuIgogICAgICAgICBleHBlY3QgPSAiRm9vXG4gIEJhclxuXG4gQmF6XG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdCwgZGVkZW50KHRleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQogCiAgICAgICAgICMgVW5ldmVuIGluZGVudGF0aW9uIHdpdGggYSB3aGl0ZXNwYWNlLW9ubHkgbGluZS4KICAgICAgICAgdGV4dCA9ICIgIEZvb1xuICAgIEJhclxuIFxuICAgQmF6XG4iCiAgICAgICAgIGV4cGVjdCA9ICJGb29cbiAgQmFyXG5cbiBCYXpcbiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCiAKICAgICAjIGRlZGVudCgpIHNob3VsZCBub3QgbWFuZ2xlIGludGVybmFsIHRhYnMKICAgICBkZWYgdGVzdF9kZWRlbnRfcHJlc2VydmVfaW50ZXJuYWxfdGFicyhzZWxmKToKICAgICAgICAgdGV4dCA9ICIgIGhlbGxvXHR0aGVyZVxuICBob3cgYXJlXHR5b3U/IgogICAgICAgICBleHBlY3QgPSAiaGVsbG9cdHRoZXJlXG5ob3cgYXJlXHR5b3U/IgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3QsIGRlZGVudCh0ZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKIAogICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IGl0IHByZXNlcnZlcyB0YWJzIHdoZW4gaXQncyBub3QgbWFraW5nIGFueQogICAgICAgICAjIGNoYW5nZXMgYXQgYWxsCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdCwgZGVkZW50KGV4cGVjdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQoZXhwZWN0KSkKIAogICAgICMgZGVkZW50KCkgc2hvdWxkIG5vdCBtYW5nbGUgdGFicyBpbiB0aGUgbWFyZ2luIChpLmUuCiAgICAgIyB0YWJzIGFuZCBzcGFjZXMgYm90aCBjb3VudCBhcyBtYXJnaW4sIGJ1dCBhcmUgKm5vdCoKQEAgLTU4NiwxNyArNTg3LDE3IEBACiAgICAgICAgICMgZGVkZW50KCkgb25seSByZW1vdmVzIHdoaXRlc3BhY2UgdGhhdCBjYW4gYmUgdW5pZm9ybWx5IHJlbW92ZWQhCiAgICAgICAgIHRleHQgPSAiXHRoZWxsbyB0aGVyZVxuXHRob3cgYXJlIHlvdT8iCiAgICAgICAgIGV4cGVjdCA9ICJoZWxsbyB0aGVyZVxuaG93IGFyZSB5b3U/IgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3QsIGRlZGVudCh0ZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKIAogICAgICAgICB0ZXh0ID0gIiAgXHRoZWxsbyB0aGVyZVxuICBcdGhvdyBhcmUgeW91PyIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCiAKICAgICAgICAgdGV4dCA9ICIgIFx0ICBoZWxsbyB0aGVyZVxuICBcdCAgaG93IGFyZSB5b3U/IgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3QsIGRlZGVudCh0ZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKIAogICAgICAgICB0ZXh0ID0gIiAgXHRoZWxsbyB0aGVyZVxuICBcdCAgaG93IGFyZSB5b3U/IgogICAgICAgICBleHBlY3QgPSAiaGVsbG8gdGhlcmVcbiAgaG93IGFyZSB5b3U/IgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3QsIGRlZGVudCh0ZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZC5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CmluZGV4IDRkMmMwNmUuLjU0NGU3MGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CkBAIC0yLDkgKzIsMTAgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHJhbmRvbQogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWltcG9ydCB0aHJlYWQKK3RocmVhZCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWQnKQogaW1wb3J0IHRpbWUKIGltcG9ydCBzeXMKK2ltcG9ydCB3ZWFrcmVmCiAKIGZyb20gdGVzdCBpbXBvcnQgbG9ja190ZXN0cwogCkBAIC02NCwxMCArNjUsMTAgQEAKIAogICAgIGRlZiB0ZXN0X3N0YWNrX3NpemUoc2VsZik6CiAgICAgICAgICMgVmFyaW91cyBzdGFjayBzaXplIHRlc3RzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0aHJlYWQuc3RhY2tfc2l6ZSgpLCAwLCAiaW50aWFsIHN0YWNrIHNpemUgaXMgbm90IDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5zdGFja19zaXplKCksIDAsICJpbml0aWFsIHN0YWNrIHNpemUgaXMgbm90IDAiKQogCiAgICAgICAgIHRocmVhZC5zdGFja19zaXplKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRocmVhZC5zdGFja19zaXplKCksIDAsICJzdGFja19zaXplIG5vdCByZXNldCB0byBkZWZhdWx0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuc3RhY2tfc2l6ZSgpLCAwLCAic3RhY2tfc2l6ZSBub3QgcmVzZXQgdG8gZGVmYXVsdCIpCiAKICAgICAgICAgaWYgb3MubmFtZSBub3QgaW4gKCJudCIsICJvczIiLCAicG9zaXgiKToKICAgICAgICAgICAgIHJldHVybgpAQCAtODcsNyArODgsNyBAQAogICAgICAgICAgICAgZmFpbF9tc2cgPSAic3RhY2tfc2l6ZSglZCkgZmFpbGVkIC0gc2hvdWxkIHN1Y2NlZWQiCiAgICAgICAgICAgICBmb3IgdHNzIGluICgyNjIxNDQsIDB4MTAwMDAwLCAwKToKICAgICAgICAgICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSh0c3MpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGhyZWFkLnN0YWNrX3NpemUoKSwgdHNzLCBmYWlsX21zZyAlIHRzcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5zdGFja19zaXplKCksIHRzcywgZmFpbF9tc2cgJSB0c3MpCiAgICAgICAgICAgICAgICAgdmVyYm9zZV9wcmludCgic3VjY2Vzc2Z1bGx5IHNldCBzdGFja19zaXplKCVkKSIgJSB0c3MpCiAKICAgICAgICAgICAgIGZvciB0c3MgaW4gKDI2MjE0NCwgMHgxMDAwMDApOgpAQCAtMTAzLDYgKzEwNCwzMiBAQAogCiAgICAgICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSgwKQogCisgICAgZGVmIHRlc3RfX2NvdW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIF9jb3VudCgpIGZ1bmN0aW9uLgorICAgICAgICBvcmlnID0gdGhyZWFkLl9jb3VudCgpCisgICAgICAgIG11dCA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgbXV0LmFjcXVpcmUoKQorICAgICAgICBzdGFydGVkID0gW10KKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHN0YXJ0ZWQuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICBtdXQuYWNxdWlyZSgpCisgICAgICAgICAgICBtdXQucmVsZWFzZSgpCisgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHRhc2ssICgpKQorICAgICAgICB3aGlsZSBub3Qgc3RhcnRlZDoKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuX2NvdW50KCksIG9yaWcgKyAxKQorICAgICAgICAjIEFsbG93IHRoZSB0YXNrIHRvIGZpbmlzaC4KKyAgICAgICAgbXV0LnJlbGVhc2UoKQorICAgICAgICAjIFRoZSBvbmx5IHJlbGlhYmxlIHdheSB0byBiZSBzdXJlIHRoYXQgdGhlIHRocmVhZCBlbmRlZCBmcm9tIHRoZQorICAgICAgICAjIGludGVycHJldGVyJ3MgcG9pbnQgb2YgdmlldyBpcyB0byB3YWl0IGZvciB0aGUgZnVuY3Rpb24gb2JqZWN0IHRvIGJlCisgICAgICAgICMgZGVzdHJveWVkLgorICAgICAgICBkb25lID0gW10KKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih0YXNrLCBsYW1iZGEgXzogZG9uZS5hcHBlbmQoTm9uZSkpCisgICAgICAgIGRlbCB0YXNrCisgICAgICAgIHdoaWxlIG5vdCBkb25lOgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5fY291bnQoKSwgb3JpZykKKwogCiBjbGFzcyBCYXJyaWVyOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1fdGhyZWFkcyk6CkBAIC0xNzQsNyArMjAxLDEwIEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnJlYWRfZmQsIHNlbGYud3JpdGVfZmQgPSBvcy5waXBlKCkKIAotICAgIGRlZiBfdGVzdF9mb3JraW50aHJlYWQoc2VsZik6CisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCisgICAgICAgICAgICAgICAgICAgICAiVGhpcyB0ZXN0IGlzIG9ubHkgYXBwcm9wcmlhdGUgZm9yIFBPU0lYLWxpa2Ugc3lzdGVtcy4iKQorICAgIEB0ZXN0X3N1cHBvcnQucmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3RfZm9ya2ludGhyZWFkKHNlbGYpOgogICAgICAgICBkZWYgdGhyZWFkMSgpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKSAjIGZvcmsgaW4gYSB0aHJlYWQKQEAgLTE5Miw5ICsyMjIsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQoc2VsZi5yZWFkX2ZkLCAyKSwgIk9LIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGZvcmsoKSBpbiB0aHJlYWQiKQogCi0gICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICAgICAgdGVzdF9mb3JraW50aHJlYWQgPSBfdGVzdF9mb3JraW50aHJlYWQKLQogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5yZWFkX2ZkKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQppbmRleCA2MDJhZDJhLi5iMzFmZGYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQpAQCAtNSw4ICs1LDkgQEAKICMgY29tcGxhaW5zIHNldmVyYWwgdGltZXMgYWJvdXQgbW9kdWxlIHJhbmRvbSBoYXZpbmcgbm8gYXR0cmlidXRlCiAjIHJhbmRyYW5nZSwgYW5kIHRoZW4gUHl0aG9uIGhhbmdzLgogCi1pbXBvcnQgdGhyZWFkCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0U2tpcHBlZCwgVGVzdEZhaWxlZAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0RmFpbGVkLCBpbXBvcnRfbW9kdWxlCit0aHJlYWQgPSBpbXBvcnRfbW9kdWxlKCd0aHJlYWQnKQogCiBjcml0aWNhbF9zZWN0aW9uID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQogZG9uZSA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKQEAgLTU2LDcgKzU3LDcgQEAKICAgICBpbXBvcnQgaW1wCiAgICAgaWYgaW1wLmxvY2tfaGVsZCgpOgogICAgICAgICAjIFRoaXMgdHJpZ2dlcnMgb24sIGUuZy4sIGZyb20gdGVzdCBpbXBvcnQgYXV0b3Rlc3QuCi0gICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJjYW4ndCBydW4gd2hlbiBpbXBvcnQgbG9jayBpcyBoZWxkIikKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImNhbid0IHJ1biB3aGVuIGltcG9ydCBsb2NrIGlzIGhlbGQiKQogCiAgICAgZG9uZS5hY3F1aXJlKCkKICAgICBmb3IgTiBpbiAoMjAsIDUwKSAqIDM6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkKaW5kZXggNzUzZjM4OC4uODFkOTY4NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZHRlbXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWR0ZW1wZmlsZS5weQpAQCAtMTYsMTEgKzE2LDEwIEBACiBOVU1fVEhSRUFEUyA9IDIwCiBGSUxFU19QRVJfVEhSRUFEID0gNTAKIAotaW1wb3J0IHRocmVhZCAjIElmIHRoaXMgZmFpbHMsIHdlIGNhbid0IHRlc3QgdGhpcyBtb2R1bGUKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0ZW1wZmlsZQogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB0aHJlYWRpbmdfc2V0dXAsIHRocmVhZGluZ19jbGVhbnVwLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHRocmVhZGluZ19zZXR1cCwgdGhyZWFkaW5nX2NsZWFudXAsIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQordGhyZWFkaW5nID0gaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IFN0cmluZ0lPCiBmcm9tIHRyYWNlYmFjayBpbXBvcnQgcHJpbnRfZXhjCkBAIC02OSw4ICs2OCw4IEBACiAKICAgICAgICAgbXNnID0gIkVycm9yczogZXJyb3JzICVkIG9rICVkXG4lcyIgJSAobGVuKGVycm9ycyksIG9rLAogICAgICAgICAgICAgJ1xuJy5qb2luKGVycm9ycykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVycm9ycywgW10sIG1zZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob2ssIE5VTV9USFJFQURTICogRklMRVNfUEVSX1RIUkVBRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcnMsIFtdLCBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2ssIE5VTV9USFJFQURTICogRklMRVNfUEVSX1RIUkVBRCkKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChUaHJlYWRlZFRlbXBGaWxlVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKaW5kZXggMDU0ZGY3Yi4uNmYxNzRhNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKQEAgLTUsMTEgKzUsMTMgQEAKIGltcG9ydCByYW5kb20KIGltcG9ydCByZQogaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHRocmVhZAordGhyZWFkID0gdGVzdC50ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkJykKK3RocmVhZGluZyA9IHRlc3QudGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2Vha3JlZgoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcwogCiBmcm9tIHRlc3QgaW1wb3J0IGxvY2tfdGVzdHMKIApAQCAtNDMsNyArNDUsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYubnJ1bm5pbmcuaW5jKCkKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBwcmludCBzZWxmLm5ydW5uaW5nLmdldCgpLCAndGFza3MgYXJlIHJ1bm5pbmcnCi0gICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZS5hc3NlcnRfKHNlbGYubnJ1bm5pbmcuZ2V0KCkgPD0gMykKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3RjYXNlLmFzc2VydFRydWUoc2VsZi5ucnVubmluZy5nZXQoKSA8PSAzKQogCiAgICAgICAgICAgICB0aW1lLnNsZWVwKGRlbGF5KQogICAgICAgICAgICAgaWYgdmVyYm9zZToKQEAgLTUxLDEyICs1MywyMSBAQAogCiAgICAgICAgICAgICB3aXRoIHNlbGYubXV0ZXg6CiAgICAgICAgICAgICAgICAgc2VsZi5ucnVubmluZy5kZWMoKQotICAgICAgICAgICAgICAgIHNlbGYudGVzdGNhc2UuYXNzZXJ0XyhzZWxmLm5ydW5uaW5nLmdldCgpID49IDApCisgICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZS5hc3NlcnRUcnVlKHNlbGYubnJ1bm5pbmcuZ2V0KCkgPj0gMCkKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBwcmludCAnJXMgaXMgZmluaXNoZWQuICVkIHRhc2tzIGFyZSBydW5uaW5nJyAlICgKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi5ucnVubmluZy5nZXQoKSkKIAotY2xhc3MgVGhyZWFkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0LnRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKworY2xhc3MgVGhyZWFkVGVzdHMoQmFzZVRlc3RDYXNlKToKIAogICAgICMgQ3JlYXRlIGEgYnVuY2ggb2YgdGhyZWFkcywgbGV0IGVhY2ggZG8gc29tZSB3b3JrLCB3YWl0IHVudGlsIGFsbCBhcmUKICAgICAjIGRvbmUuCkBAIC03NSwxOCArODYsMTggQEAKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNVEFTS1MpOgogICAgICAgICAgICAgdCA9IFRlc3RUaHJlYWQoIjx0aHJlYWQgJWQ+IiVpLCBzZWxmLCBzZW1hLCBtdXRleCwgbnVtcnVubmluZykKICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0LmlkZW50LCBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHJlLm1hdGNoKCc8VGVzdFRocmVhZFwoLiosIGluaXRpYWxcKT4nLCByZXByKHQpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pZGVudCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgnPFRlc3RUaHJlYWRcKC4qLCBpbml0aWFsXCk+JywgcmVwcih0KSkpCiAgICAgICAgICAgICB0LnN0YXJ0KCkKIAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgJ3dhaXRpbmcgZm9yIGFsbCB0YXNrcyB0byBjb21wbGV0ZScKICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKICAgICAgICAgICAgIHQuam9pbihOVU1UQVNLUykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdC5pc19hbGl2ZSgpKQotICAgICAgICAgICAgc2VsZi5mYWlsSWZFcXVhbCh0LmlkZW50LCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0LmlzX2FsaXZlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHQuaWRlbnQsIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuaWRlbnQgaXMgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhyZS5tYXRjaCgnPFRlc3RUaHJlYWRcKC4qLCBcdysgLT9cZCtcKT4nLCByZXByKHQpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgnPFRlc3RUaHJlYWRcKC4qLCBcdysgLT9cZCtcKT4nLCByZXByKHQpKSkKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICdhbGwgdGFza3MgZG9uZScKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1ydW5uaW5nLmdldCgpLCAwKQpAQCAtMTQ0LDkgKzE1NSw4IEBACiAgICAgICAgIHRpZCA9IHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKGYsIChtdXRleCwpKQogICAgICAgICAjIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gZmluaXNoLgogICAgICAgICBtdXRleC5hY3F1aXJlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRpZCBpbiB0aHJlYWRpbmcuX2FjdGl2ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodGhyZWFkaW5nLl9hY3RpdmVbdGlkXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkaW5nLl9EdW1teVRocmVhZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGlkLCB0aHJlYWRpbmcuX2FjdGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRocmVhZGluZy5fYWN0aXZlW3RpZF0sIHRocmVhZGluZy5fRHVtbXlUaHJlYWQpCiAgICAgICAgIGRlbCB0aHJlYWRpbmcuX2FjdGl2ZVt0aWRdCiAKICAgICAjIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMoKSBpcyBhIENQeXRob24tb25seSBnaW1taWNrLCBub3QgKGN1cnJlbnRseSkKQEAgLTE2Niw2ICsxNzYsMjcgQEAKIAogICAgICAgICBleGNlcHRpb24gPSBjdHlwZXMucHlfb2JqZWN0KEFzeW5jRXhjKQogCisgICAgICAgICMgRmlyc3QgY2hlY2sgaXQgd29ya3Mgd2hlbiBzZXR0aW5nIHRoZSBleGNlcHRpb24gZnJvbSB0aGUgc2FtZSB0aHJlYWQuCisgICAgICAgIHRpZCA9IHRocmVhZC5nZXRfaWRlbnQoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNldF9hc3luY19leGMoY3R5cGVzLmNfbG9uZyh0aWQpLCBleGNlcHRpb24pCisgICAgICAgICAgICAjIFRoZSBleGNlcHRpb24gaXMgYXN5bmMsIHNvIHdlIG1pZ2h0IGhhdmUgdG8ga2VlcCB0aGUgVk0gYnVzeSB1bnRpbAorICAgICAgICAgICAgIyBpdCBub3RpY2VzLgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBBc3luY0V4YzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGJ1dCBpdCByZWZsZWN0cyB0aGUgaW50ZW50LiBJZiB3ZSB3YW50ZWQKKyAgICAgICAgICAgICMgdG8gYmUgc21hcnRlciB0aGUgYWJvdmUgbG9vcCB3b3VsZG4ndCBiZSBpbmZpbml0ZS4KKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQXN5bmNFeGMgbm90IHJhaXNlZCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAxKSAjIG9uZSB0aHJlYWQgc3RhdGUgbW9kaWZpZWQKKyAgICAgICAgZXhjZXB0IFVuYm91bmRMb2NhbEVycm9yOgorICAgICAgICAgICAgIyBUaGUgZXhjZXB0aW9uIHdhcyByYWlzZWQgdG9vIHF1aWNrbHkgZm9yIHVzIHRvIGdldCB0aGUgcmVzdWx0LgorICAgICAgICAgICAgcGFzcworCiAgICAgICAgICMgYHdvcmtlcl9zdGFydGVkYCBpcyBzZXQgYnkgdGhlIHRocmVhZCB3aGVuIGl0J3MgaW5zaWRlIGEgdHJ5L2V4Y2VwdAogICAgICAgICAjIGJsb2NrIHdhaXRpbmcgdG8gY2F0Y2ggdGhlIGFzeW5jaHJvbm91c2x5IHNldCBBc3luY0V4YyBleGNlcHRpb24uCiAgICAgICAgICMgYHdvcmtlcl9zYXdfZXhjZXB0aW9uYCBpcyBzZXQgYnkgdGhlIHRocmVhZCB1cG9uIGNhdGNoaW5nIHRoYXQKQEAgLTIwMSwxMCArMjMyLDExIEBACiAgICAgICAgICMgTm93IHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiB0aGUgd29ya2VyIHRocmVhZC4KICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICIgICAgd2FpdGluZyBmb3Igd29ya2VyIHRocmVhZCB0byBnZXQgc3RhcnRlZCIKLSAgICAgICAgd29ya2VyX3N0YXJ0ZWQud2FpdCgpCisgICAgICAgIHJldCA9IHdvcmtlcl9zdGFydGVkLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmV0KQogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgIiAgICB2ZXJpZnlpbmcgd29ya2VyIGhhc24ndCBleGl0ZWQiCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdC5maW5pc2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0LmZpbmlzaGVkKQogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgIiAgICBhdHRlbXB0aW5nIHRvIHJhaXNlIGFzeW5jaCBleGNlcHRpb24gaW4gd29ya2VyIgogICAgICAgICByZXN1bHQgPSBzZXRfYXN5bmNfZXhjKGN0eXBlcy5jX2xvbmcodC5pZCksIGV4Y2VwdGlvbikKQEAgLTIxMiw3ICsyNDQsNyBAQAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgIiAgICB3YWl0aW5nIGZvciB3b3JrZXIgdG8gc2F5IGl0IGNhdWdodCB0aGUgZXhjZXB0aW9uIgogICAgICAgICB3b3JrZXJfc2F3X2V4Y2VwdGlvbi53YWl0KHRpbWVvdXQ9MTApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0LmZpbmlzaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5maW5pc2hlZCkKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICIgICAgYWxsIE9LIC0tIGpvaW5pbmcgd29ya2VyIgogICAgICAgICBpZiB0LmZpbmlzaGVkOgpAQCAtMjQ1LDcgKzI3Nyw2IEBACiAgICAgICAgICAgICAgICAgcHJpbnQoInRlc3RfZmluYWxpemVfd2l0aF9ydW5ubmluZ190aHJlYWQgY2FuJ3QgaW1wb3J0IGN0eXBlcyIpCiAgICAgICAgICAgICByZXR1cm4gICMgY2FuJ3QgZG8gYW55dGhpbmcKIAotICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CiAgICAgICAgICAgICBpbXBvcnQgY3R5cGVzLCBzeXMsIHRpbWUsIHRocmVhZAogCkBAIC0yNzYsOCArMzA3LDcgQEAKICAgICBkZWYgdGVzdF9maW5hbGl6ZV93aXRoX3RyYWNlKHNlbGYpOgogICAgICAgICAjIElzc3VlMTczMzc1NwogICAgICAgICAjIEF2b2lkIGEgZGVhZGxvY2sgd2hlbiBzeXMuc2V0dHJhY2Ugc3RlcHMgaW50byB0aHJlYWRpbmcuX3NodXRkb3duCi0gICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCi0gICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiIiaWYgMToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIiJpZiAxOgogICAgICAgICAgICAgaW1wb3J0IHN5cywgdGhyZWFkaW5nCiAKICAgICAgICAgICAgICMgQSBkZWFkbG9jay1raWxsZXIsIHRvIHByZXZlbnQgdGhlCkBAIC0yOTcsMTQgKzMyNywyMCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBmdW5jCiAKICAgICAgICAgICAgIHN5cy5zZXR0cmFjZShmdW5jKQotICAgICAgICAgICAgIiIiXSkKLSAgICAgICAgc2VsZi5mYWlsSWYocmMgPT0gMiwgImludGVycHJldGVkIHdhcyBibG9ja2VkIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJjID09IDAsICJVbmV4cGVjdGVkIGVycm9yIikKKyAgICAgICAgICAgICIiIl0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHJjID0gcC5yZXR1cm5jb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmMgPT0gMiwgImludGVycHJldGVkIHdhcyBibG9ja2VkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJjID09IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvcjogIiArIHJlcHIoc3RkZXJyKSkKIAogICAgIGRlZiB0ZXN0X2pvaW5fbm9uZGFlbW9uX29uX3NodXRkb3duKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE3MjIzNDQKICAgICAgICAgIyBSYWlzaW5nIFN5c3RlbUV4aXQgc2tpcHBlZCB0aHJlYWRpbmcuX3NodXRkb3duCi0gICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiIiaWYgMToKICAgICAgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCiAgICAgICAgICAgICAgICAgZnJvbSB0aW1lIGltcG9ydCBzbGVlcApAQCAtMzIwLDYgKzM1Niw4IEBACiAgICAgICAgICAgICAiIiJdLAogICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQogICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5zdHJpcCgpLAogICAgICAgICAgICAgIldva2UgdXAsIHNsZWVwIGZ1bmN0aW9uIGlzOiA8YnVpbHQtaW4gZnVuY3Rpb24gc2xlZXA+IikKQEAgLTM0MCw3ICszNzgsNyBAQAogICAgICAgICAgICAgICAgIHQuc3RhcnQoKQogICAgICAgICAgICAgICAgIHQuam9pbigpCiAgICAgICAgICAgICAgICAgbCA9IGVudW0oKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodCBpbiBsLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odCwgbCwKICAgICAgICAgICAgICAgICAgICAgIiMxNzAzNDQ4IHRyaWdnZXJlZCBhZnRlciAlZCB0cmlhbHM6ICVzIiAlIChpLCBsKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5zZXRjaGVja2ludGVydmFsKG9sZF9pbnRlcnZhbCkKQEAgLTM2NCwyMCArNDAyLDIwIEBACiAgICAgICAgIHdlYWtfY3ljbGljX29iamVjdCA9IHdlYWtyZWYucmVmKGN5Y2xpY19vYmplY3QpCiAgICAgICAgIGN5Y2xpY19vYmplY3QudGhyZWFkLmpvaW4oKQogICAgICAgICBkZWwgY3ljbGljX29iamVjdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCB3ZWFrX2N5Y2xpY19vYmplY3QoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSgnJWQgcmVmZXJlbmNlcyBzdGlsbCBhcm91bmQnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZ2V0cmVmY291bnQod2Vha19jeWNsaWNfb2JqZWN0KCkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB3ZWFrX2N5Y2xpY19vYmplY3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9KCclZCByZWZlcmVuY2VzIHN0aWxsIGFyb3VuZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmdldHJlZmNvdW50KHdlYWtfY3ljbGljX29iamVjdCgpKSkpCiAKICAgICAgICAgcmFpc2luZ19jeWNsaWNfb2JqZWN0ID0gUnVuU2VsZkZ1bmN0aW9uKHNob3VsZF9yYWlzZT1UcnVlKQogICAgICAgICB3ZWFrX3JhaXNpbmdfY3ljbGljX29iamVjdCA9IHdlYWtyZWYucmVmKHJhaXNpbmdfY3ljbGljX29iamVjdCkKICAgICAgICAgcmFpc2luZ19jeWNsaWNfb2JqZWN0LnRocmVhZC5qb2luKCkKICAgICAgICAgZGVsIHJhaXNpbmdfY3ljbGljX29iamVjdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCB3ZWFrX3JhaXNpbmdfY3ljbGljX29iamVjdCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9KCclZCByZWZlcmVuY2VzIHN0aWxsIGFyb3VuZCcgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXRyZWZjb3VudCh3ZWFrX3JhaXNpbmdfY3ljbGljX29iamVjdCgpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgd2Vha19yYWlzaW5nX2N5Y2xpY19vYmplY3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9KCclZCByZWZlcmVuY2VzIHN0aWxsIGFyb3VuZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmdldHJlZmNvdW50KHdlYWtfcmFpc2luZ19jeWNsaWNfb2JqZWN0KCkpKSkKIAogCi1jbGFzcyBUaHJlYWRKb2luT25TaHV0ZG93bih1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBUaHJlYWRKb2luT25TaHV0ZG93bihCYXNlVGVzdENhc2UpOgogCiAgICAgZGVmIF9ydW5fYW5kX2pvaW4oc2VsZiwgc2NyaXB0KToKICAgICAgICAgc2NyaXB0ID0gIiIiaWYgMToKQEAgLTM4OSwxMyArNDI3LDEzIEBACiAgICAgICAgICAgICAgICAgcHJpbnQgJ2VuZCBvZiB0aHJlYWQnCiAgICAgICAgIFxuIiIiICsgc2NyaXB0CiAKLSAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQogICAgICAgICByYyA9IHAud2FpdCgpCiAgICAgICAgIGRhdGEgPSBwLnN0ZG91dC5yZWFkKCkucmVwbGFjZSgnXHInLCAnJykKKyAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJlbmQgb2YgbWFpblxuZW5kIG9mIHRocmVhZFxuIikKLSAgICAgICAgc2VsZi5mYWlsSWYocmMgPT0gMiwgImludGVycHJldGVyIHdhcyBibG9ja2VkIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJjID09IDAsICJVbmV4cGVjdGVkIGVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyYyA9PSAyLCAiaW50ZXJwcmV0ZXIgd2FzIGJsb2NrZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmMgPT0gMCwgIlVuZXhwZWN0ZWQgZXJyb3IiKQogCiAgICAgZGVmIHRlc3RfMV9qb2luX29uX3NodXRkb3duKHNlbGYpOgogICAgICAgICAjIFRoZSB1c3VhbCBjYXNlOiBvbiBleGl0LCB3YWl0IGZvciBhIG5vbi1kYWVtb24gdGhyZWFkCkBAIC00MzYsNyArNDc0LDggQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIFNraXAgcGxhdGZvcm1zIHdpdGgga25vd24gcHJvYmxlbXMgZm9ya2luZyBmcm9tIGEgd29ya2VyIHRocmVhZC4KICAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM4NjMuCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywgJ29zMmVteCcpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdvczJlbXgnKToKICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgKCdTa2lwcGluZyB0ZXN0XzNfam9pbl9pbl9mb3JrZWRfZnJvbV90aHJlYWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGR1ZSB0byBrbm93biBPUyBidWdzIG9uJyksIHN5cy5wbGF0Zm9ybQogICAgICAgICAgICAgcmV0dXJuCkBAIC00NTksOCArNDk4LDE1NCBAQAogICAgICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3J1bl9hbmRfam9pbihzY3JpcHQpCiAKKyAgICBkZWYgYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNlbGYsIHNjcmlwdCwgZXhwZWN0ZWRfb3V0cHV0KToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICByYyA9IHAud2FpdCgpCisgICAgICAgIGRhdGEgPSBwLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCwgIlVuZXhwZWN0ZWQgZXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX291dHB1dCkKIAotY2xhc3MgVGhyZWFkaW5nRXhjZXB0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQorICAgIGRlZiB0ZXN0XzRfam9pbmluZ19hY3Jvc3NfZm9ya19pbl93b3JrZXJfdGhyZWFkKHNlbGYpOgorICAgICAgICAjIFRoZXJlIHVzZWQgdG8gYmUgYSBwb3NzaWJsZSBkZWFkbG9jayB3aGVuIGZvcmtpbmcgZnJvbSBhIGNoaWxkCisgICAgICAgICMgdGhyZWFkLiAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2NjQzLgorCisgICAgICAgICMgU2tpcCBwbGF0Zm9ybXMgd2l0aCBrbm93biBwcm9ibGVtcyBmb3JraW5nIGZyb20gYSB3b3JrZXIgdGhyZWFkLgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzg2My4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZnJlZWJzZDQnLCAnZnJlZWJzZDUnLCAnZnJlZWJzZDYnLCAnb3MyZW14Jyk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnZHVlIHRvIGtub3duIE9TIGJ1Z3Mgb24gJyArIHN5cy5wbGF0Zm9ybSkKKworICAgICAgICAjIFRoZSBzY3JpcHQgdGFrZXMgdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICAgICAgIyAtIFRoZSBtYWluIHRocmVhZCBpbiB0aGUgcGFyZW50IHByb2Nlc3Mgc3RhcnRzIGEgbmV3IHRocmVhZCBhbmQgdGhlbgorICAgICAgICAjICAgdHJpZXMgdG8gam9pbiBpdC4KKyAgICAgICAgIyAtIFRoZSBqb2luIG9wZXJhdGlvbiBhY3F1aXJlcyB0aGUgTG9jayBpbnNpZGUgdGhlIHRocmVhZCdzIF9ibG9jaworICAgICAgICAjICAgQ29uZGl0aW9uLiAgKFNlZSB0aHJlYWRpbmcucHk6VGhyZWFkLmpvaW4oKS4pCisgICAgICAgICMgLSBXZSBzdHViIG91dCB0aGUgYWNxdWlyZSBtZXRob2Qgb24gdGhlIGNvbmRpdGlvbiB0byBmb3JjZSBpdCB0byB3YWl0CisgICAgICAgICMgICB1bnRpbCB0aGUgY2hpbGQgdGhyZWFkIGZvcmtzLiAgKFNlZSBMT0NLIEFDUVVJUkVEIEhFUkUpCisgICAgICAgICMgLSBUaGUgY2hpbGQgdGhyZWFkIGZvcmtzLiAgKFNlZSBMT0NLIEhFTEQgYW5kIFdPUktFUiBUSFJFQUQgRk9SS1MKKyAgICAgICAgIyAgIEhFUkUpCisgICAgICAgICMgLSBUaGUgbWFpbiB0aHJlYWQgb2YgdGhlIHBhcmVudCBwcm9jZXNzIGVudGVycyBDb25kaXRpb24ud2FpdCgpLAorICAgICAgICAjICAgd2hpY2ggcmVsZWFzZXMgdGhlIGxvY2sgb24gdGhlIGNoaWxkIHRocmVhZC4KKyAgICAgICAgIyAtIFRoZSBjaGlsZCBwcm9jZXNzIHJldHVybnMuICBXaXRob3V0IHRoZSBuZWNlc3NhcnkgZml4LCB3aGVuIHRoZQorICAgICAgICAjICAgbWFpbiB0aHJlYWQgb2YgdGhlIGNoaWxkIHByb2Nlc3MgKHdoaWNoIHVzZWQgdG8gYmUgdGhlIGNoaWxkIHRocmVhZAorICAgICAgICAjICAgaW4gdGhlIHBhcmVudCBwcm9jZXNzKSBhdHRlbXB0cyB0byBleGl0LCBpdCB3aWxsIHRyeSB0byBhY3F1aXJlIHRoZQorICAgICAgICAjICAgbG9jayBpbiB0aGUgVGhyZWFkLl9ibG9jayBDb25kaXRpb24gb2JqZWN0IGFuZCBoYW5nLCBiZWNhdXNlIHRoZQorICAgICAgICAjICAgbG9jayB3YXMgaGVsZCBhY3Jvc3MgdGhlIGZvcmsuCisKKyAgICAgICAgc2NyaXB0ID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcywgdGltZSwgdGhyZWFkaW5nCisKKyAgICAgICAgICAgIGZpbmlzaF9qb2luID0gRmFsc2UKKyAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBGYWxzZQorCisgICAgICAgICAgICBkZWYgd29ya2VyKCk6CisgICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIHRoaXMgdGhyZWFkJ3MgbG9jayBpcyBhY3F1aXJlZCBiZWZvcmUgZm9ya2luZyB0bworICAgICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBkZWFkbG9jay4KKyAgICAgICAgICAgICAgICBnbG9iYWwgZmluaXNoX2pvaW4KKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRfZm9yazoKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgICAgICMgTE9DSyBIRUxEOiBNYWluIHRocmVhZCBob2xkcyBsb2NrIGFjcm9zcyB0aGlzIGNhbGwuCisgICAgICAgICAgICAgICAgY2hpbGRwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgICAgICBmaW5pc2hfam9pbiA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBjaGlsZHBpZCAhPSAwOgorICAgICAgICAgICAgICAgICAgICAjIFBhcmVudCBwcm9jZXNzIGp1c3Qgd2FpdHMgZm9yIGNoaWxkLgorICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQorICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBzaG91bGQganVzdCByZXR1cm4uCisKKyAgICAgICAgICAgIHcgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrZXIpCisKKyAgICAgICAgICAgICMgU3R1YiBvdXQgdGhlIHByaXZhdGUgY29uZGl0aW9uIHZhcmlhYmxlJ3MgbG9jayBhY3F1aXJlIG1ldGhvZC4KKyAgICAgICAgICAgICMgVGhpcyBhY3F1aXJlcyB0aGUgbG9jayBhbmQgdGhlbiB3YWl0cyB1bnRpbCB0aGUgY2hpbGQgaGFzIGZvcmtlZAorICAgICAgICAgICAgIyBiZWZvcmUgcmV0dXJuaW5nLCB3aGljaCB3aWxsIHJlbGVhc2UgdGhlIGxvY2sgc29vbiBhZnRlci4gIElmCisgICAgICAgICAgICAjIHNvbWVvbmUgZWxzZSB0cmllcyB0byBmaXggdGhpcyB0ZXN0IGNhc2UgYnkgYWNxdWlyaW5nIHRoaXMgbG9jaworICAgICAgICAgICAgIyBiZWZvcmUgZm9ya2luZyBpbnN0ZWFkIG9mIHJlc2V0aW5nIGl0LCB0aGUgdGVzdCBjYXNlIHdpbGwKKyAgICAgICAgICAgICMgZGVhZGxvY2sgd2hlbiBpdCBzaG91bGRuJ3QuCisgICAgICAgICAgICBjb25kaXRpb24gPSB3Ll9ibG9jaworICAgICAgICAgICAgb3JpZ19hY3F1aXJlID0gY29uZGl0aW9uLmFjcXVpcmUKKyAgICAgICAgICAgIGNhbGxfY291bnRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgICAgIGNhbGxfY291bnQgPSAwCisgICAgICAgICAgICBkZWYgbXlfYWNxdWlyZSgpOgorICAgICAgICAgICAgICAgIGdsb2JhbCBjYWxsX2NvdW50CisgICAgICAgICAgICAgICAgZ2xvYmFsIHN0YXJ0X2ZvcmsKKyAgICAgICAgICAgICAgICBvcmlnX2FjcXVpcmUoKSAgIyBMT0NLIEFDUVVJUkVEIEhFUkUKKyAgICAgICAgICAgICAgICBzdGFydF9mb3JrID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIGNhbGxfY291bnQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgbm90IGZpbmlzaF9qb2luOgorICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAgIyBXT1JLRVIgVEhSRUFEIEZPUktTIEhFUkUKKyAgICAgICAgICAgICAgICB3aXRoIGNhbGxfY291bnRfbG9jazoKKyAgICAgICAgICAgICAgICAgICAgY2FsbF9jb3VudCArPSAxCisgICAgICAgICAgICBjb25kaXRpb24uYWNxdWlyZSA9IG15X2FjcXVpcmUKKworICAgICAgICAgICAgdy5zdGFydCgpCisgICAgICAgICAgICB3LmpvaW4oKQorICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiBtYWluJykKKyAgICAgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydFNjcmlwdEhhc091dHB1dChzY3JpcHQsICJlbmQgb2YgbWFpblxuIikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQorICAgIGRlZiB0ZXN0XzVfY2xlYXJfd2FpdGVyX2xvY2tzX3RvX2F2b2lkX2NyYXNoKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgYSBzcGF3bmVkIHRocmVhZCB0aGF0IGZvcmtzIGRvZXNuJ3Qgc2VnZmF1bHQgb24gY2VydGFpbgorICAgICAgICAjIHBsYXRmb3JtcywgbmFtZWx5IE9TIFguICBUaGlzIHVzZWQgdG8gaGFwcGVuIGlmIHRoZXJlIHdhcyBhIHdhaXRlcgorICAgICAgICAjIGxvY2sgaW4gdGhlIHRocmVhZCdzIGNvbmRpdGlvbiB2YXJpYWJsZSdzIHdhaXRlcnMgbGlzdC4gIEV2ZW4gdGhvdWdoCisgICAgICAgICMgd2Uga25vdyB0aGUgbG9jayB3aWxsIGJlIGhlbGQgYWNyb3NzIHRoZSBmb3JrLCBpdCBpcyBub3Qgc2FmZSB0bworICAgICAgICAjIHJlbGVhc2UgbG9ja3MgaGVsZCBhY3Jvc3MgZm9ya3Mgb24gYWxsIHBsYXRmb3Jtcywgc28gcmVsZWFzaW5nIHRoZQorICAgICAgICAjIHdhaXRlciBsb2NrIGNhdXNlZCBhIHNlZ2ZhdWx0IG9uIE9TIFguICBGdXJ0aGVybW9yZSwgc2luY2UgbG9ja3Mgb24KKyAgICAgICAgIyBPUyBYIGFyZSAoYXMgb2YgdGhpcyB3cml0aW5nKSBpbXBsZW1lbnRlZCB3aXRoIGEgbXV0ZXggKyBjb25kaXRpb24KKyAgICAgICAgIyB2YXJpYWJsZSBpbnN0ZWFkIG9mIGEgc2VtYXBob3JlLCB3aGlsZSB3ZSBrbm93IHRoYXQgdGhlIFB5dGhvbi1sZXZlbAorICAgICAgICAjIGxvY2sgd2lsbCBiZSBhY3F1aXJlZCwgd2UgY2FuJ3Qga25vdyBpZiB0aGUgaW50ZXJuYWwgbXV0ZXggd2lsbCBiZQorICAgICAgICAjIGFjcXVpcmVkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLgorCisgICAgICAgICMgU2tpcCBwbGF0Zm9ybXMgd2l0aCBrbm93biBwcm9ibGVtcyBmb3JraW5nIGZyb20gYSB3b3JrZXIgdGhyZWFkLgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzg2My4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZnJlZWJzZDQnLCAnZnJlZWJzZDUnLCAnZnJlZWJzZDYnLCAnb3MyZW14Jyk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnZHVlIHRvIGtub3duIE9TIGJ1Z3Mgb24gJyArIHN5cy5wbGF0Zm9ybSkKKyAgICAgICAgc2NyaXB0ID0gIiIiaWYgVHJ1ZToKKyAgICAgICAgICAgIGltcG9ydCBvcywgdGltZSwgdGhyZWFkaW5nCisKKyAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBGYWxzZQorCisgICAgICAgICAgICBkZWYgd29ya2VyKCk6CisgICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIHRoZSBtYWluIHRocmVhZCBoYXMgYXR0ZW1wdGVkIHRvIGpvaW4gdGhpcyB0aHJlYWQKKyAgICAgICAgICAgICAgICAjIGJlZm9yZSBjb250aW51aW5nLgorICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzdGFydF9mb3JrOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICAgICAgY2hpbGRwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgICAgICBpZiBjaGlsZHBpZCAhPSAwOgorICAgICAgICAgICAgICAgICAgICAjIFBhcmVudCBwcm9jZXNzIGp1c3Qgd2FpdHMgZm9yIGNoaWxkLgorICAgICAgICAgICAgICAgICAgICAoY3BpZCwgcmMpID0gb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNwaWQgPT0gY2hpbGRwaWQKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJjID09IDAKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiB3b3JrZXIgdGhyZWFkJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgc2hvdWxkIGp1c3QgcmV0dXJuLgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHcgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrZXIpCisKKyAgICAgICAgICAgICMgU3R1YiBvdXQgdGhlIHByaXZhdGUgY29uZGl0aW9uIHZhcmlhYmxlJ3MgX3JlbGVhc2Vfc2F2ZSBtZXRob2QuCisgICAgICAgICAgICAjIFRoaXMgcmVsZWFzZXMgdGhlIGNvbmRpdGlvbidzIGxvY2sgYW5kIGZsaXBzIHRoZSBnbG9iYWwgdGhhdAorICAgICAgICAgICAgIyBjYXVzZXMgdGhlIHdvcmtlciB0byBmb3JrLiAgQXQgdGhpcyBwb2ludCwgdGhlIHByb2JsZW1hdGljIHdhaXRlcgorICAgICAgICAgICAgIyBsb2NrIGhhcyBiZWVuIGFjcXVpcmVkIG9uY2UgYnkgdGhlIHdhaXRlciBhbmQgaGFzIGJlZW4gcHV0IG9udG8KKyAgICAgICAgICAgICMgdGhlIHdhaXRlcnMgbGlzdC4KKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IHcuX2Jsb2NrCisgICAgICAgICAgICBvcmlnX3JlbGVhc2Vfc2F2ZSA9IGNvbmRpdGlvbi5fcmVsZWFzZV9zYXZlCisgICAgICAgICAgICBkZWYgbXlfcmVsZWFzZV9zYXZlKCk6CisgICAgICAgICAgICAgICAgZ2xvYmFsIHN0YXJ0X2ZvcmsKKyAgICAgICAgICAgICAgICBvcmlnX3JlbGVhc2Vfc2F2ZSgpCisgICAgICAgICAgICAgICAgIyBXYWl0ZXIgbG9jayBoZWxkIGhlcmUsIGNvbmRpdGlvbiBsb2NrIHJlbGVhc2VkLgorICAgICAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBUcnVlCisgICAgICAgICAgICBjb25kaXRpb24uX3JlbGVhc2Vfc2F2ZSA9IG15X3JlbGVhc2Vfc2F2ZQorCisgICAgICAgICAgICB3LnN0YXJ0KCkKKyAgICAgICAgICAgIHcuam9pbigpCisgICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4gdGhyZWFkJykKKyAgICAgICAgICAgICIiIgorICAgICAgICBvdXRwdXQgPSAiZW5kIG9mIHdvcmtlciB0aHJlYWRcbmVuZCBvZiBtYWluIHRocmVhZFxuIgorICAgICAgICBzZWxmLmFzc2VydFNjcmlwdEhhc091dHB1dChzY3JpcHQsIG91dHB1dCkKKworCitjbGFzcyBUaHJlYWRpbmdFeGNlcHRpb25UZXN0cyhCYXNlVGVzdENhc2UpOgogICAgICMgQSBSdW50aW1lRXJyb3Igc2hvdWxkIGJlIHJhaXNlZCBpZiBUaHJlYWQuc3RhcnQoKSBpcyBjYWxsZWQKICAgICAjIG11bHRpcGxlIHRpbWVzLgogICAgIGRlZiB0ZXN0X3N0YXJ0X3RocmVhZF9hZ2FpbihzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmdfbG9jYWwucHkKaW5kZXggOTZjMDI2Ny4uNGM5ZjI5NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmdfbG9jYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmdfbG9jYWwucHkKQEAgLTEsMTAgKzEsMTUgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBkb2N0ZXN0IGltcG9ydCBEb2NUZXN0U3VpdGUKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1pbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgd2Vha3JlZgogaW1wb3J0IGdjCiAKKyMgTW9kdWxlcyB1bmRlciB0ZXN0CitfdGhyZWFkID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZCcpCit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKK2ltcG9ydCBfdGhyZWFkaW5nX2xvY2FsCisKKwogY2xhc3MgV2VhayhvYmplY3QpOgogICAgIHBhc3MKIApAQCAtMTMsNyArMTgsNyBAQAogICAgIGxvY2FsLndlYWsgPSB3ZWFrCiAgICAgd2Vha2xpc3QuYXBwZW5kKHdlYWtyZWYucmVmKHdlYWspKQogCi1jbGFzcyBUaHJlYWRpbmdMb2NhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQmFzZUxvY2FsVGVzdDoKIAogICAgIGRlZiB0ZXN0X2xvY2FsX3JlZnMoc2VsZik6CiAgICAgICAgIHNlbGYuX2xvY2FsX3JlZnMoMjApCkBAIC0yMSw3ICsyNiw3IEBACiAgICAgICAgIHNlbGYuX2xvY2FsX3JlZnMoMTAwKQogCiAgICAgZGVmIF9sb2NhbF9yZWZzKHNlbGYsIG4pOgotICAgICAgICBsb2NhbCA9IHRocmVhZGluZy5sb2NhbCgpCisgICAgICAgIGxvY2FsID0gc2VsZi5fbG9jYWwoKQogICAgICAgICB3ZWFrbGlzdCA9IFtdCiAgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXRhcmdldCwgYXJncz0obG9jYWwsIHdlYWtsaXN0KSkKQEAgLTMyLDE1ICszNywxNSBAQAogICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4od2Vha2xpc3QpLCBuKQogCi0gICAgICAgICMgWFhYIHRocmVhZGluZy5sb2NhbCBrZWVwcyB0aGUgbG9jYWwgb2YgdGhlIGxhc3Qgc3RvcHBlZCB0aHJlYWQgYWxpdmUuCisgICAgICAgICMgWFhYIF90aHJlYWRpbmdfbG9jYWwga2VlcHMgdGhlIGxvY2FsIG9mIHRoZSBsYXN0IHN0b3BwZWQgdGhyZWFkIGFsaXZlLgogICAgICAgICBkZWFkbGlzdCA9IFt3ZWFrIGZvciB3ZWFrIGluIHdlYWtsaXN0IGlmIHdlYWsoKSBpcyBOb25lXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkZWFkbGlzdCksIG4tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihsZW4oZGVhZGxpc3QpLCAobi0xLCBuKSkKIAogICAgICAgICAjIEFzc2lnbm1lbnQgdG8gdGhlIHNhbWUgdGhyZWFkIGxvY2FsIGZyZWVzIGl0IHNvbWV0aW1lcyAoISkKICAgICAgICAgbG9jYWwuc29tZW90aGVydmFyID0gTm9uZQogICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgZGVhZGxpc3QgPSBbd2VhayBmb3Igd2VhayBpbiB3ZWFrbGlzdCBpZiB3ZWFrKCkgaXMgTm9uZV0KLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihkZWFkbGlzdCkgaW4gKG4tMSwgbiksIChuLCBsZW4oZGVhZGxpc3QpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihsZW4oZGVhZGxpc3QpLCAobi0xLCBuKSwgKG4sIGxlbihkZWFkbGlzdCkpKQogCiAgICAgZGVmIHRlc3RfZGVyaXZlZChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAzMDg4OiBpZiB0aGVyZSBpcyBhIHRocmVhZHMgc3dpdGNoIGluc2lkZSB0aGUgX19pbml0X18KQEAgLTQ4LDcgKzUzLDcgQEAKICAgICAgICAgIyBpcyBjcmVhdGVkIGJ1dCBub3QgY29ycmVjdGx5IHNldCBvbiB0aGUgb2JqZWN0LgogICAgICAgICAjIFRoZSBmaXJzdCBtZW1iZXIgc2V0IG1heSBiZSBib2d1cy4KICAgICAgICAgaW1wb3J0IHRpbWUKLSAgICAgICAgY2xhc3MgTG9jYWwodGhyZWFkaW5nLmxvY2FsKToKKyAgICAgICAgY2xhc3MgTG9jYWwoc2VsZi5fbG9jYWwpOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKICAgICAgICAgbG9jYWwgPSBMb2NhbCgpCkBAIC02OSw3ICs3NCw3IEBACiAKICAgICBkZWYgdGVzdF9kZXJpdmVkX2N5Y2xlX2RlYWxsb2Moc2VsZik6CiAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTY5OTAKLSAgICAgICAgY2xhc3MgTG9jYWwodGhyZWFkaW5nLmxvY2FsKToKKyAgICAgICAgY2xhc3MgTG9jYWwoc2VsZi5fbG9jYWwpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBsb2NhbHMgPSBOb25lCiAgICAgICAgIHBhc3NlZCA9IFtGYWxzZV0KQEAgLTEwNSwxMSArMTEwLDEwOCBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzZWRbMF0pCiAKKyAgICBkZWYgdGVzdF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTUyMjIzNworICAgICAgICBmcm9tIHRocmVhZCBpbXBvcnQgX2xvY2FsIGFzIGxvY2FsCisgICAgICAgIGZyb20gX3RocmVhZGluZ19sb2NhbCBpbXBvcnQgbG9jYWwgYXMgcHlfbG9jYWwKKworICAgICAgICBmb3IgY2xzIGluIChsb2NhbCwgcHlfbG9jYWwpOgorICAgICAgICAgICAgY2xhc3MgTXlMb2NhbChjbHMpOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIE15TG9jYWwoYT0xKQorICAgICAgICAgICAgTXlMb2NhbCgxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbHMsIGE9MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2xzLCAxKQorCisgICAgZGVmIF90ZXN0X29uZV9jbGFzcyhzZWxmLCBjKToKKyAgICAgICAgc2VsZi5fZmFpbGVkID0gIk5vIGVycm9yIG1lc3NhZ2Ugc2V0IG9yIGNsZWFyZWQuIgorICAgICAgICBvYmogPSBjKCkKKyAgICAgICAgZTEgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBlMiA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgZGVmIGYxKCk6CisgICAgICAgICAgICBvYmoueCA9ICdmb28nCisgICAgICAgICAgICBvYmoueSA9ICdiYXInCisgICAgICAgICAgICBkZWwgb2JqLnkKKyAgICAgICAgICAgIGUxLnNldCgpCisgICAgICAgICAgICBlMi53YWl0KCkKKworICAgICAgICBkZWYgZjIoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb28gPSBvYmoueAorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBleHBlY3RlZCAtLSB3ZSBoYXZlbid0IHNldCBvYmoueCBpbiB0aGlzIHRocmVhZCB5ZXQhCisgICAgICAgICAgICAgICAgc2VsZi5fZmFpbGVkID0gIiIgICMgcGFzc2VkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhaWxlZCA9ICgnSW5jb3JyZWN0bHkgZ290IHZhbHVlICVyIGZyb20gY2xhc3MgJXJcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9vLCBjKSkKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHNlbGYuX2ZhaWxlZCkKKworICAgICAgICB0MSA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYxKQorICAgICAgICB0MS5zdGFydCgpCisgICAgICAgIGUxLndhaXQoKQorICAgICAgICB0MiA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYyKQorICAgICAgICB0Mi5zdGFydCgpCisgICAgICAgIHQyLmpvaW4oKQorICAgICAgICAjIFRoZSB0ZXN0IGlzIGRvbmU7IGp1c3QgbGV0IHQxIGtub3cgaXQgY2FuIGV4aXQsIGFuZCB3YWl0IGZvciBpdC4KKyAgICAgICAgZTIuc2V0KCkKKyAgICAgICAgdDEuam9pbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLl9mYWlsZWQsIHNlbGYuX2ZhaWxlZCkKKworICAgIGRlZiB0ZXN0X3RocmVhZGluZ19sb2NhbChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9vbmVfY2xhc3Moc2VsZi5fbG9jYWwpCisKKyAgICBkZWYgdGVzdF90aHJlYWRpbmdfbG9jYWxfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIExvY2FsU3ViY2xhc3Moc2VsZi5fbG9jYWwpOgorICAgICAgICAgICAgIiIiVG8gdGVzdCB0aGF0IHN1YmNsYXNzZXMgYmVoYXZlIHByb3Blcmx5LiIiIgorICAgICAgICBzZWxmLl90ZXN0X29uZV9jbGFzcyhMb2NhbFN1YmNsYXNzKQorCisgICAgZGVmIF90ZXN0X2RpY3RfYXR0cmlidXRlKHNlbGYsIGNscyk6CisgICAgICAgIG9iaiA9IGNscygpCisgICAgICAgIG9iai54ID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RpY3RfXywgeyd4JzogNX0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgb2JqLl9fZGljdF9fID0ge30KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgb2JqLl9fZGljdF9fCisKKyAgICBkZWYgdGVzdF9kaWN0X2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9kaWN0X2F0dHJpYnV0ZShzZWxmLl9sb2NhbCkKKworICAgIGRlZiB0ZXN0X2RpY3RfYXR0cmlidXRlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2NhbFN1YmNsYXNzKHNlbGYuX2xvY2FsKToKKyAgICAgICAgICAgICIiIlRvIHRlc3QgdGhhdCBzdWJjbGFzc2VzIGJlaGF2ZSBwcm9wZXJseS4iIiIKKyAgICAgICAgc2VsZi5fdGVzdF9kaWN0X2F0dHJpYnV0ZShMb2NhbFN1YmNsYXNzKQorCisKK2NsYXNzIFRocmVhZExvY2FsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQmFzZUxvY2FsVGVzdCk6CisgICAgX2xvY2FsID0gX3RocmVhZC5fbG9jYWwKKworICAgICMgRmFpbHMgZm9yIHRoZSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2N5Y2xlX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgeCA9IFgoKQorICAgICAgICB4LmxvY2FsID0gc2VsZi5fbG9jYWwoKQorICAgICAgICB4LmxvY2FsLnggPSB4CisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoeCkKKyAgICAgICAgZGVsIHgKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworY2xhc3MgUHlUaHJlYWRpbmdMb2NhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UsIEJhc2VMb2NhbFRlc3QpOgorICAgIF9sb2NhbCA9IF90aHJlYWRpbmdfbG9jYWwubG9jYWwKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQogICAgIHN1aXRlLmFkZFRlc3QoRG9jVGVzdFN1aXRlKCdfdGhyZWFkaW5nX2xvY2FsJykpCi0gICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoVGhyZWFkaW5nTG9jYWxUZXN0KSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShUaHJlYWRMb2NhbFRlc3QpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKFB5VGhyZWFkaW5nTG9jYWxUZXN0KSkKIAogICAgIHRyeToKICAgICAgICAgZnJvbSB0aHJlYWQgaW1wb3J0IF9sb2NhbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CmluZGV4IDI4NmMyZTQuLjJmN2ViNjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKQEAgLTEsMTQgKzEsMTQgQEAKICIiIlB5VW5pdCB0ZXN0aW5nIHRoYXQgdGhyZWFkcyBob25vciBvdXIgc2lnbmFsIHNlbWFudGljcyIiIgogCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB0aHJlYWQKIGltcG9ydCBzaWduYWwKIGltcG9ydCBvcwogaW1wb3J0IHN5cwotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBUZXN0U2tpcHBlZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlLCByZWFwX3RocmVhZHMKK3RocmVhZCA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZCcpCiAKIGlmIHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJykgb3Igc3lzLnBsYXRmb3JtPT0ncmlzY29zJzoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCwgIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIHN5cy5wbGF0Zm9ybQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAiQ2FuJ3QgdGVzdCBzaWduYWwgb24gJXMiICUgc3lzLnBsYXRmb3JtCiAKIHByb2Nlc3NfcGlkID0gb3MuZ2V0cGlkKCkKIHNpZ25hbGxlZF9hbGw9dGhyZWFkLmFsbG9jYXRlX2xvY2soKQpAQCAtMzksNiArMzksNyBAQAogICAgICAgIHdhaXQgZm9yIGl0IHRvIGZpbmlzaC4gQ2hlY2sgdGhhdCB3ZSBnb3QgYm90aCBzaWduYWxzCiAgICAgICAgYW5kIHRoYXQgdGhleSB3ZXJlIHJ1biBieSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgIiIiCisgICAgQHJlYXBfdGhyZWFkcwogICAgIGRlZiB0ZXN0X3NpZ25hbHMoc2VsZik6CiAgICAgICAgIHNpZ25hbGxlZF9hbGwuYWNxdWlyZSgpCiAgICAgICAgIHNlbGYuc3Bhd25TaWduYWxsaW5nVGhyZWFkKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZS5weQppbmRleCBkMTczYWUxLi5iNGQxMmI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CkBAIC0xOCw5ICsxOCw5IEBACiAgICAgICAgIHRpbWUuY2xvY2soKQogCiAgICAgZGVmIHRlc3RfY29udmVyc2lvbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0aW1lLmN0aW1lKHNlbGYudCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUuY3RpbWUoc2VsZi50KQogICAgICAgICAgICAgICAgICAgICAgPT0gdGltZS5hc2N0aW1lKHRpbWUubG9jYWx0aW1lKHNlbGYudCkpKQotICAgICAgICBzZWxmLmFzc2VydF8obG9uZyh0aW1lLm1rdGltZSh0aW1lLmxvY2FsdGltZShzZWxmLnQpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvbmcodGltZS5ta3RpbWUodGltZS5sb2NhbHRpbWUoc2VsZi50KSkpCiAgICAgICAgICAgICAgICAgICAgICA9PSBsb25nKHNlbGYudCkpCiAKICAgICBkZWYgdGVzdF9zbGVlcChzZWxmKToKQEAgLTg3LDExICs4Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDAsIDAsIDAsIDAsIC0xLCAtMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAzNjcsIC0xKSkKLSAgICAgICAgIyBDaGVjayBkYXlsaWdodCBzYXZpbmdzIGZsYWcgWy0xLCAxXQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgLTIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMikpCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X3ZhbHVlc19mb3JfemVybyhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB1c2luZyBhbGwgemVyb3MgdXNlcyB0aGUgcHJvcGVyIGRlZmF1bHQgdmFsdWVzLgpAQCAtOTksNyArOTQsNyBAQAogICAgICAgICAjIGJhc2VkIG9uIGl0cyB2YWx1ZS4KICAgICAgICAgZXhwZWN0ZWQgPSAiMjAwMCAwMSAwMSAwMCAwMCAwMCAxIDAwMSIKICAgICAgICAgcmVzdWx0ID0gdGltZS5zdHJmdGltZSgiJVkgJW0gJWQgJUggJU0gJVMgJXcgJWoiLCAoMCwpKjkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X3N0cnB0aW1lKHNlbGYpOgogICAgICAgICAjIFNob3VsZCBiZSBhYmxlIHRvIGdvIHJvdW5kLXRyaXAgZnJvbSBzdHJmdGltZSB0byBzdHJwdGltZSB3aXRob3V0CkBAIC0xMjYsMTMgKzEyMSwxMyBAQAogICAgICAgICAjICAgICAgICAgICAgICAgICAgKDEyMzQ1LCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSkKICAgICAgICAgIyBYWFg6IEZvciBub3csIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgYSBjcmFzaDoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGltZS5hc2N0aW1lKCgxMjM0NSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICB0aW1lLmFzY3RpbWUoKDEyMzQ1LCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAwKSkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKHRpbWUsICJ0enNldCIpLAorICAgICAgICAidGltZSBtb2R1bGUgaGFzIG5vIGF0dHJpYnV0ZSB0enNldCIpCiAgICAgZGVmIHRlc3RfdHpzZXQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHRpbWUsICJ0enNldCIpOgotICAgICAgICAgICAgcmV0dXJuICMgQ2FuJ3QgdGVzdCB0aGlzOyBkb24ndCB3YW50IHRoZSB0ZXN0IHN1aXRlIHRvIGZhaWwKIAogICAgICAgICBmcm9tIG9zIGltcG9ydCBlbnZpcm9uCiAKQEAgLTE1OCwzNiArMTUzLDM2IEBACiAgICAgICAgICAgICB0aW1lLnR6c2V0KCkKICAgICAgICAgICAgIGVudmlyb25bJ1RaJ10gPSB1dGMKICAgICAgICAgICAgIHRpbWUudHpzZXQoKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgIHRpbWUuZ210aW1lKHhtYXMyMDAyKSwgdGltZS5sb2NhbHRpbWUoeG1hczIwMDIpCiAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodGltZS5kYXlsaWdodCwgMCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRpbWUudGltZXpvbmUsIDApCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikudG1faXNkc3QsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuZGF5bGlnaHQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUudGltZXpvbmUsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKS50bV9pc2RzdCwgMCkKIAogICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgY2FuIHN3aXRjaCB0byBVUy9FYXN0ZXJuCiAgICAgICAgICAgICBlbnZpcm9uWydUWiddID0gZWFzdGVybgogICAgICAgICAgICAgdGltZS50enNldCgpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKHRpbWUuZ210aW1lKHhtYXMyMDAyKSwgdGltZS5sb2NhbHRpbWUoeG1hczIwMDIpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodGltZS50em5hbWUsICgnRVNUJywgJ0VEVCcpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKHRpbWUudHpuYW1lKSwgMikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRpbWUuZGF5bGlnaHQsIDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0aW1lLnRpbWV6b25lLCAxODAwMCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRpbWUuYWx0em9uZSwgMTQ0MDApCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikudG1faXNkc3QsIDApCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4odGltZS50em5hbWUpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0aW1lLmdtdGltZSh4bWFzMjAwMiksIHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS50em5hbWUsICgnRVNUJywgJ0VEVCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGltZS50em5hbWUpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmRheWxpZ2h0LCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLnRpbWV6b25lLCAxODAwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5hbHR6b25lLCAxNDQwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5sb2NhbHRpbWUoeG1hczIwMDIpLnRtX2lzZHN0LCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGltZS50em5hbWUpLCAyKQogCiAgICAgICAgICAgICAjIE5vdyBnbyB0byB0aGUgc291dGhlcm4gaGVtaXNwaGVyZS4KICAgICAgICAgICAgIGVudmlyb25bJ1RaJ10gPSB2aWN0b3JpYQogICAgICAgICAgICAgdGltZS50enNldCgpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKHRpbWUuZ210aW1lKHhtYXMyMDAyKSwgdGltZS5sb2NhbHRpbWUoeG1hczIwMDIpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHRpbWUudHpuYW1lWzBdID09ICdBRVNUJywgc3RyKHRpbWUudHpuYW1lWzBdKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0aW1lLnR6bmFtZVsxXSA9PSAnQUVEVCcsIHN0cih0aW1lLnR6bmFtZVsxXSkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4odGltZS50em5hbWUpLCAyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodGltZS5kYXlsaWdodCwgMSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRpbWUudGltZXpvbmUsIC0zNjAwMCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRpbWUuYWx0em9uZSwgLTM5NjAwKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodGltZS5sb2NhbHRpbWUoeG1hczIwMDIpLnRtX2lzZHN0LCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0aW1lLmdtdGltZSh4bWFzMjAwMiksIHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnR6bmFtZVswXSA9PSAnQUVTVCcsIHN0cih0aW1lLnR6bmFtZVswXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS50em5hbWVbMV0gPT0gJ0FFRFQnLCBzdHIodGltZS50em5hbWVbMV0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGltZS50em5hbWUpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmRheWxpZ2h0LCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLnRpbWV6b25lLCAtMzYwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuYWx0em9uZSwgLTM5NjAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikudG1faXNkc3QsIDEpCiAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICMgUmVwYWlyIFRaIGVudmlyb25tZW50IHZhcmlhYmxlIGluIGNhc2UgYW55IG90aGVyIHRlc3RzCkBAIC0yMTksMTQgKzIxNCwyNSBAQAogICAgICAgICBndDEgPSB0aW1lLmdtdGltZShOb25lKQogICAgICAgICB0MCA9IHRpbWUubWt0aW1lKGd0MCkKICAgICAgICAgdDEgPSB0aW1lLm1rdGltZShndDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygwIDw9ICh0MS10MCkgPCAwLjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9ICh0MS10MCkgPCAwLjIpCiAKICAgICBkZWYgdGVzdF9sb2NhbHRpbWVfd2l0aG91dF9hcmcoc2VsZik6CiAgICAgICAgIGx0MCA9IHRpbWUubG9jYWx0aW1lKCkKICAgICAgICAgbHQxID0gdGltZS5sb2NhbHRpbWUoTm9uZSkKICAgICAgICAgdDAgPSB0aW1lLm1rdGltZShsdDApCiAgICAgICAgIHQxID0gdGltZS5ta3RpbWUobHQxKQotICAgICAgICBzZWxmLmFzc2VydF8oMCA8PSAodDEtdDApIDwgMC4yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSAodDEtdDApIDwgMC4yKQorCisgICAgZGVmIHRlc3RfbWt0aW1lKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzI2Njg3CisgICAgICAgIGZvciB0IGluICgtMiwgLTEsIDAsIDEpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHR0ID0gdGltZS5sb2NhbHRpbWUodCkKKyAgICAgICAgICAgIGV4Y2VwdCAoT3ZlcmZsb3dFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUubWt0aW1lKHR0KSwgdCkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUaW1lVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkgYi9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKaW5kZXggNDYwZTBkNi4uNGJjMTI1ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQpAQCAtMTE5LDI4ICsxMTksMzAgQEAKICAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoX3RpbWVvdXQpCiAKICAgICAgICAgX3QxID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zb2NrLmNvbm5lY3QsIGFkZHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zb2NrLmNvbm5lY3QsIGFkZHIpCiAgICAgICAgIF90MiA9IHRpbWUudGltZSgpCiAKICAgICAgICAgX2RlbHRhID0gYWJzKF90MSAtIF90MikKLSAgICAgICAgc2VsZi5hc3NlcnRfKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCiAgICAgICAgICAgICAgICAgICAgICAidGltZW91dCAoJWcpIGlzIG1vcmUgdGhhbiAlZyBzZWNvbmRzIG1vcmUgdGhhbiBleHBlY3RlZCAoJWcpIgogICAgICAgICAgICAgICAgICAgICAgJShfZGVsdGEsIHNlbGYuZnV6eiwgX3RpbWVvdXQpKQogCiAgICAgZGVmIHRlc3RSZWN2VGltZW91dChzZWxmKToKICAgICAgICAgIyBUZXN0IHJlY3YoKSB0aW1lb3V0CiAgICAgICAgIF90aW1lb3V0ID0gMC4wMgotICAgICAgICBzZWxmLnNvY2suY29ubmVjdChzZWxmLmFkZHJfcmVtb3RlKQotICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dChfdGltZW91dCkKIAotICAgICAgICBfdDEgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLnNvY2sucmVjdiwgMTAyNCkKLSAgICAgICAgX3QyID0gdGltZS50aW1lKCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYuYWRkcl9yZW1vdGVbMF0pOgorICAgICAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3Qoc2VsZi5hZGRyX3JlbW90ZSkKKyAgICAgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KF90aW1lb3V0KQogCi0gICAgICAgIF9kZWx0YSA9IGFicyhfdDEgLSBfdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhfZGVsdGEgPCBfdGltZW91dCArIHNlbGYuZnV6eiwKLSAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0ICglZykgaXMgJWcgc2Vjb25kcyBtb3JlIHRoYW4gZXhwZWN0ZWQgKCVnKSIKLSAgICAgICAgICAgICAgICAgICAgICUoX2RlbHRhLCBzZWxmLmZ1enosIF90aW1lb3V0KSkKKyAgICAgICAgICAgIF90MSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgc2VsZi5zb2NrLnJlY3YsIDEwMjQpCisgICAgICAgICAgICBfdDIgPSB0aW1lLnRpbWUoKQorCisgICAgICAgICAgICBfZGVsdGEgPSBhYnMoX3QxIC0gX3QyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0ICglZykgaXMgJWcgc2Vjb25kcyBtb3JlIHRoYW4gZXhwZWN0ZWQgKCVnKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAlKF9kZWx0YSwgc2VsZi5mdXp6LCBfdGltZW91dCkpCiAKICAgICBkZWYgdGVzdEFjY2VwdFRpbWVvdXQoc2VsZik6CiAgICAgICAgICMgVGVzdCBhY2NlcHQoKSB0aW1lb3V0CkBAIC0xNTEsMTEgKzE1MywxMSBAQAogICAgICAgICBzZWxmLnNvY2subGlzdGVuKDUpCiAKICAgICAgICAgX3QxID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zb2NrLmFjY2VwdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLnNvY2suYWNjZXB0KQogICAgICAgICBfdDIgPSB0aW1lLnRpbWUoKQogCiAgICAgICAgIF9kZWx0YSA9IGFicyhfdDEgLSBfdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhfZGVsdGEgPCBfdGltZW91dCArIHNlbGYuZnV6eiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAogICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgKCVnKSBpcyAlZyBzZWNvbmRzIG1vcmUgdGhhbiBleHBlY3RlZCAoJWcpIgogICAgICAgICAgICAgICAgICAgICAgJShfZGVsdGEsIHNlbGYuZnV6eiwgX3RpbWVvdXQpKQogCkBAIC0xNjgsMTEgKzE3MCwxMSBAQAogICAgICAgICB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaywgc2VsZi5sb2NhbGhvc3QpCiAKICAgICAgICAgX3QxID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zb2NrLnJlY3Zmcm9tLCA4MTkyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuc29jay5yZWN2ZnJvbSwgODE5MikKICAgICAgICAgX3QyID0gdGltZS50aW1lKCkKIAogICAgICAgICBfZGVsdGEgPSBhYnMoX3QxIC0gX3QyKQotICAgICAgICBzZWxmLmFzc2VydF8oX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfZGVsdGEgPCBfdGltZW91dCArIHNlbGYuZnV6eiwKICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0ICglZykgaXMgJWcgc2Vjb25kcyBtb3JlIHRoYW4gZXhwZWN0ZWQgKCVnKSIKICAgICAgICAgICAgICAgICAgICAgICUoX2RlbHRhLCBzZWxmLmZ1enosIF90aW1lb3V0KSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ay5weSBiL0xpYi90ZXN0L3Rlc3RfdGsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljYTUzZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdGsucHkKQEAgLTAsMCArMSwzNSBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgU2tpcCB0ZXN0IGlmIF90a2ludGVyIHdhc24ndCBidWlsdC4KK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGtpbnRlcicpCisKK2ltcG9ydCBUa2ludGVyCisKK3RyeToKKyAgICBUa2ludGVyLkJ1dHRvbigpCitleGNlcHQgVGtpbnRlci5UY2xFcnJvciwgbXNnOgorICAgICMgYXNzdW1pbmcgdGsgaXMgbm90IGF2YWlsYWJsZQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0ayBub3QgYXZhaWxhYmxlOiAlcyIgJSBtc2cpCisKK3RoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitsaWJfdGtfdGVzdCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4odGhpc19kaXIsIG9zLnBhdGgucGFyZGlyLAorICAgICdsaWItdGsnLCAndGVzdCcpKQorCit3aXRoIHRlc3Rfc3VwcG9ydC5EaXJzT25TeXNQYXRoKGxpYl90a190ZXN0KToKKyAgICBpbXBvcnQgcnVudGt0ZXN0cworCitkZWYgdGVzdF9tYWluKGVuYWJsZV9ndWk9RmFsc2UpOgorICAgIGlmIGVuYWJsZV9ndWk6CisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzIGlzIE5vbmU6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnZ3VpJ10KKyAgICAgICAgZWxpZiAnZ3VpJyBub3QgaW4gdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcy5hcHBlbmQoJ2d1aScpCisKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5EaXJzT25TeXNQYXRoKGxpYl90a190ZXN0KToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgICpydW50a3Rlc3RzLmdldF90ZXN0cyh0ZXh0PUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdGtpbnRlciddKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oZW5hYmxlX2d1aT1UcnVlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weSBiL0xpYi90ZXN0L3Rlc3RfdG9rZW5pemUucHkKaW5kZXggYWU1ZjQxMC4uMzhkYTEwNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5CkBAIC01Niw3ICs1Niw3IEBACiAgICAgLi4uICAgICByZXR1cm4gdG9rZW5zMSA9PSB0b2tlbnMyCiAgICAgLi4uCiAKLVRoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGZvcm1hdHRpZyBwcmFjdGlzZXMgdGhhdCBhcmUgZWFzeSB0byBnZXQgcmlnaHQuCitUaGVyZSBhcmUgc29tZSBzdGFuZGFyZCBmb3JtYXR0aW5nIHByYWN0aWNlcyB0aGF0IGFyZSBlYXN5IHRvIGdldCByaWdodC4KIAogICAgID4+PiByb3VuZHRyaXAoImlmIHggPT0gMTpcXG4iCiAgICAgLi4uICAgICAgICAgICAiICAgIHByaW50IHhcXG4iKQpAQCAtNDkzLDEzICs0OTMsMTMgQEAKICAgICBUcnVlCiAKIFRlc3Qgcm91bmR0cmlwIG9uIHJhbmRvbSBweXRob24gbW9kdWxlcy4KLXBhc3MgdGhlICctdWNvbXBpbGVyJyBvcHRpb24gdG8gcHJvY2VzcyB0aGUgZnVsbCBkaXJlY3RvcnkuCitwYXNzIHRoZSAnLXVjcHUnIG9wdGlvbiB0byBwcm9jZXNzIHRoZSBmdWxsIGRpcmVjdG9yeS4KIAogICAgID4+PgogICAgID4+PiB0ZW1wZGlyID0gb3MucGF0aC5kaXJuYW1lKGYpIG9yIG9zLmN1cmRpcgogICAgID4+PiB0ZXN0ZmlsZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHRlbXBkaXIsICJ0ZXN0Ki5weSIpKQogCi0gICAgPj4+IGlmIG5vdCB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgiY29tcGlsZXIiKToKKyAgICA+Pj4gaWYgbm90IHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCJjcHUiKToKICAgICAuLi4gICAgIHRlc3RmaWxlcyA9IHJhbmRvbS5zYW1wbGUodGVzdGZpbGVzLCAxMCkKICAgICAuLi4KICAgICA+Pj4gZm9yIHRlc3RmaWxlIGluIHRlc3RmaWxlczoKQEAgLTUwOCwxMSArNTA4LDI4IEBACiAgICAgLi4uICAgICAgICAgYnJlYWsKICAgICAuLi4gZWxzZTogVHJ1ZQogICAgIFRydWUKKworRXZpbCB0YWJzCisgICAgPj4+IGR1bXBfdG9rZW5zKCJkZWYgZigpOlxcblxcdGlmIHhcXG4gICAgICAgIFxcdHBhc3MiKQorICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCisgICAgTkFNRSAgICAgICAnZicgICAgICAgICAgICgxLCA0KSAoMSwgNSkKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDUpICgxLCA2KQorICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMSwgNikgKDEsIDcpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCA3KSAoMSwgOCkKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICgxLCA4KSAoMSwgOSkKKyAgICBJTkRFTlQgICAgICdcXHQnICAgICAgICAgICgyLCAwKSAoMiwgMSkKKyAgICBOQU1FICAgICAgICdpZicgICAgICAgICAgKDIsIDEpICgyLCAzKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMiwgNCkgKDIsIDUpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMiwgNSkgKDIsIDYpCisgICAgSU5ERU5UICAgICAnICAgICAgICBcXHQnICAoMywgMCkgKDMsIDkpCisgICAgTkFNRSAgICAgICAncGFzcycgICAgICAgICgzLCA5KSAoMywgMTMpCisgICAgREVERU5UICAgICAnJyAgICAgICAgICAgICg0LCAwKSAoNCwgMCkKKyAgICBERURFTlQgICAgICcnICAgICAgICAgICAgKDQsIDApICg0LCAwKQogIiIiCiAKIAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWZyb20gdG9rZW5pemUgaW1wb3J0ICh0b2tlbml6ZSwgdW50b2tlbml6ZSwgZ2VuZXJhdGVfdG9rZW5zLCBOVU1CRVIsIE5BTUUsIE9QLAorZnJvbSB0b2tlbml6ZSBpbXBvcnQgKHVudG9rZW5pemUsIGdlbmVyYXRlX3Rva2VucywgTlVNQkVSLCBOQU1FLCBPUCwKICAgICAgICAgICAgICAgICAgICAgIFNUUklORywgRU5ETUFSS0VSLCB0b2tfbmFtZSkKIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgb3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhY2UucHkgYi9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5CmluZGV4IDhlM2Q0ODMuLjdhOTgyZjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHJhY2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFjZS5weQpAQCAtMSw3NjggKzEsMzQxIEBACi0jIFRlc3RpbmcgdGhlIGxpbmUgdHJhY2UgZmFjaWxpdHkuCi0KLWZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1pbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IGRpZmZsaWIKLWltcG9ydCBnYworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCBybXRyZWUsIHVubGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQpCitpbXBvcnQgdW5pdHRlc3QKIAotIyBBIHZlcnkgYmFzaWMgZXhhbXBsZS4gIElmIHRoaXMgZmFpbHMsIHdlJ3JlIGluIGRlZXAgdHJvdWJsZS4KLWRlZiBiYXNpYygpOgotICAgIHJldHVybiAxCitpbXBvcnQgdHJhY2UKK2Zyb20gdHJhY2UgaW1wb3J0IENvdmVyYWdlUmVzdWx0cywgVHJhY2UKIAotYmFzaWMuZXZlbnRzID0gWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAotICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJyldCi0KLSMgTWFueSBvZiB0aGUgdGVzdHMgYmVsb3cgYXJlIHRyaWNreSBiZWNhdXNlIHRoZXkgaW52b2x2ZSBwYXNzIHN0YXRlbWVudHMuCi0jIElmIHRoZXJlIGlzIGltcGxpY2l0IGNvbnRyb2wgZmxvdyBhcm91bmQgYSBwYXNzIHN0YXRlbWVudCAoaW4gYW4gZXhjZXB0Ci0jIGNsYXVzZSBvciBlbHNlIGNhbHVzZSkgdW5kZXIgd2hhdCBjb25kaXRpb25zIGRvIHlvdSBzZXQgYSBsaW5lIG51bWJlcgotIyBmb2xsb3dpbmcgdGhhdCBjbGF1c2U/Citmcm9tIHRlc3QudHJhY2VkbW9kdWxlcyBpbXBvcnQgdGVzdG1vZAogCiAKLSMgVGhlIGVudGlyZSAid2hpbGUgMDoiIHN0YXRlbWVudCBpcyBvcHRpbWl6ZWQgYXdheS4gIE5vIGNvZGUKLSMgZXhpc3RzIGZvciBpdCwgc28gdGhlIGxpbmUgbnVtYmVycyBza2lwIGRpcmVjdGx5IGZyb20gImRlbCB4IgotIyB0byAieCA9IDEiLgotZGVmIGFyaWdvX2V4YW1wbGUoKToKLSAgICB4ID0gMQotICAgIGRlbCB4Ci0gICAgd2hpbGUgMDoKLSAgICAgICAgcGFzcwotICAgIHggPSAxCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVdGlsaXRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiAKLWFyaWdvX2V4YW1wbGUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdyZXR1cm4nKV0KK2RlZiBmaXhfZXh0X3B5KGZpbGVuYW1lKToKKyAgICAiIiJHaXZlbiBhIC5weWMvLnB5byBmaWxlbmFtZSBjb252ZXJ0cyBpdCB0byB0aGUgYXBwcm9wcmlhdGUgLnB5IiIiCisgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoKCcucHljJywgJy5weW8nKSk6CisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbOi0xXQorICAgIHJldHVybiBmaWxlbmFtZQogCi0jIGNoZWNrIHRoYXQgbGluZXMgY29uc2lzdGluZyBvZiBqdXN0IG9uZSBpbnN0cnVjdGlvbiBnZXQgdHJhY2VkOgotZGVmIG9uZV9pbnN0cl9saW5lKCk6Ci0gICAgeCA9IDEKLSAgICBkZWwgeAotICAgIHggPSAxCitkZWYgbXlfZmlsZV9hbmRfbW9kbmFtZSgpOgorICAgICIiIlRoZSAucHkgZmlsZSBhbmQgbW9kdWxlIG5hbWUgb2YgdGhpcyBmaWxlIChfX2ZpbGVfXykiIiIKKyAgICBtb2RuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKF9fZmlsZV9fKSlbMF0KKyAgICByZXR1cm4gZml4X2V4dF9weShfX2ZpbGVfXyksIG1vZG5hbWUKIAotb25lX2luc3RyX2xpbmUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAncmV0dXJuJyldCitkZWYgZ2V0X2ZpcnN0bGluZW5vKGZ1bmMpOgorICAgIHJldHVybiBmdW5jLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vCiAKLWRlZiBub19wb3BfdG9wcygpOiAgICAgICMgMAotICAgIHggPSAxICAgICAgICAgICAgICAgIyAxCi0gICAgZm9yIGEgaW4gcmFuZ2UoMik6ICAjIDIKLSAgICAgICAgaWYgYTogICAgICAgICAgICMgMwotICAgICAgICAgICAgeCA9IDEgICAgICAgIyA0Ci0gICAgICAgIGVsc2U6ICAgICAgICAgICAjIDUKLSAgICAgICAgICAgIHggPSAxICAgICAgICMgNgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tIFRhcmdldCBmdW5jdGlvbnMgZm9yIHRyYWNpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworIworIyBUaGUgcmVsYXRpdmUgbGluZSBudW1iZXJzIG9mIGxpbmVzIGluIHRoZXNlIGZ1bmN0aW9ucyBtYXR0ZXIgZm9yIHZlcmlmeWluZworIyB0cmFjaW5nLiBQbGVhc2UgbW9kaWZ5IHRoZSBhcHByb3ByaWF0ZSB0ZXN0cyBpZiB5b3UgY2hhbmdlIG9uZSBvZiB0aGUKKyMgZnVuY3Rpb25zLiBBYnNvbHV0ZSBsaW5lIG51bWJlcnMgZG9uJ3QgbWF0dGVyLgorIwogCi1ub19wb3BfdG9wcy5ldmVudHMgPSBbKDAsICdjYWxsJyksCi0gICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgKDYsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgKDIsICdyZXR1cm4nKV0KK2RlZiB0cmFjZWRfZnVuY19saW5lYXIoeCwgeSk6CisgICAgYSA9IHgKKyAgICBiID0geQorICAgIGMgPSBhICsgYgorICAgIHJldHVybiBjCiAKLWRlZiBub19wb3BfYmxvY2tzKCk6Ci0gICAgeSA9IDEKLSAgICB3aGlsZSBub3QgeToKLSAgICAgICAgYmxhCi0gICAgeCA9IDEKK2RlZiB0cmFjZWRfZnVuY19sb29wKHgsIHkpOgorICAgIGMgPSB4CisgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgIGMgKz0geQorICAgIHJldHVybiBjCiAKLW5vX3BvcF9ibG9ja3MuZXZlbnRzID0gWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdyZXR1cm4nKV0KK2RlZiB0cmFjZWRfZnVuY19pbXBvcnRpbmcoeCwgeSk6CisgICAgcmV0dXJuIHggKyB5ICsgdGVzdG1vZC5mdW5jKDEpCiAKLWRlZiBjYWxsZWQoKTogIyBsaW5lIC0zCi0gICAgeCA9IDEKK2RlZiB0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyKHgpOgorICAgIGMgPSB0cmFjZWRfZnVuY19saW5lYXIoeCwgeCkKKyAgICByZXR1cm4gYyArIHgKIAotZGVmIGNhbGwoKTogICAjIGxpbmUgMAotICAgIGNhbGxlZCgpCitkZWYgdHJhY2VkX2Z1bmNfaW1wb3J0aW5nX2NhbGxlcih4KToKKyAgICBrID0gdHJhY2VkX2Z1bmNfc2ltcGxlX2NhbGxlcih4KQorICAgIGsgKz0gdHJhY2VkX2Z1bmNfaW1wb3J0aW5nKGssIHgpCisgICAgcmV0dXJuIGsKIAotY2FsbC5ldmVudHMgPSBbKDAsICdjYWxsJyksCi0gICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICgtMywgJ2NhbGwnKSwKLSAgICAgICAgICAgICAgICgtMiwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICgtMiwgJ3JldHVybicpLAotICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nKV0KK2RlZiB0cmFjZWRfZnVuY19nZW5lcmF0b3IobnVtKToKKyAgICBjID0gNSAgICAgICAjIGV4ZWN1dGVkIG9uY2UKKyAgICBmb3IgaSBpbiByYW5nZShudW0pOgorICAgICAgICB5aWVsZCBpICsgYwogCi1kZWYgcmFpc2VzKCk6Ci0gICAgcmFpc2UgRXhjZXB0aW9uCitkZWYgdHJhY2VkX2Z1bmNfY2FsbGluZ19nZW5lcmF0b3IoKToKKyAgICBrID0gMAorICAgIGZvciBpIGluIHRyYWNlZF9mdW5jX2dlbmVyYXRvcigxMCk6CisgICAgICAgIGsgKz0gaQogCi1kZWYgdGVzdF9yYWlzZSgpOgotICAgIHRyeToKLSAgICAgICAgcmFpc2VzKCkKLSAgICBleGNlcHQgRXhjZXB0aW9uLCBleGM6Ci0gICAgICAgIHggPSAxCitkZWYgdHJhY2VkX2RvdWJsZXIobnVtKToKKyAgICByZXR1cm4gbnVtICogMgogCi10ZXN0X3JhaXNlLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAoLTMsICdjYWxsJyksCi0gICAgICAgICAgICAgICAgICAgICAoLTIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAoLTIsICdleGNlcHRpb24nKSwKLSAgICAgICAgICAgICAgICAgICAgICgtMiwgJ3JldHVybicpLAotICAgICAgICAgICAgICAgICAgICAgKDIsICdleGNlcHRpb24nKSwKLSAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAoNCwgJ3JldHVybicpXQotCi1kZWYgX3NldHRyYWNlX2FuZF9yZXR1cm4odHJhY2VmdW5jKToKLSAgICBzeXMuc2V0dHJhY2UodHJhY2VmdW5jKQotICAgIHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl90cmFjZSA9IHRyYWNlZnVuYwotZGVmIHNldHRyYWNlX2FuZF9yZXR1cm4odHJhY2VmdW5jKToKLSAgICBfc2V0dHJhY2VfYW5kX3JldHVybih0cmFjZWZ1bmMpCi0KLXNldHRyYWNlX2FuZF9yZXR1cm4uZXZlbnRzID0gWygxLCAncmV0dXJuJyldCi0KLWRlZiBfc2V0dHJhY2VfYW5kX3JhaXNlKHRyYWNlZnVuYyk6Ci0gICAgc3lzLnNldHRyYWNlKHRyYWNlZnVuYykKLSAgICBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfdHJhY2UgPSB0cmFjZWZ1bmMKLSAgICByYWlzZSBSdW50aW1lRXJyb3IKLWRlZiBzZXR0cmFjZV9hbmRfcmFpc2UodHJhY2VmdW5jKToKLSAgICB0cnk6Ci0gICAgICAgIF9zZXR0cmFjZV9hbmRfcmFpc2UodHJhY2VmdW5jKQotICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIGV4YzoKLSAgICAgICAgcGFzcwotCi1zZXR0cmFjZV9hbmRfcmFpc2UuZXZlbnRzID0gWygyLCAnZXhjZXB0aW9uJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdyZXR1cm4nKV0KLQotIyBpbXBsaWNpdCByZXR1cm4gZXhhbXBsZQotIyBUaGlzIHRlc3QgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBvZiB0aGUgZWxzZTogcGFzcwotIyBwYXJ0IG9mIHRoZSBjb2RlLiAgVGhlIGNvZGUgZ2VuZXJhdGUgZm9yIHRoZSB0cnVlCi0jIHBhcnQgb2YgdGhlIGlmIGNvbnRhaW5zIGEganVtcCBwYXN0IHRoZSBlbHNlIGJyYW5jaC4KLSMgVGhlIGNvbXBpbGVyIHRoZW4gZ2VuZXJhdGVzIGFuIGltcGxpY2l0ICJyZXR1cm4gTm9uZSIKLSMgSW50ZXJuYWxseSwgdGhlIGNvbXBpbGVyIHZpc2l0cyB0aGUgcGFzcyBzdGF0ZW1lbnQKLSMgYW5kIHN0b3JlcyBpdHMgbGluZSBudW1iZXIgZm9yIHVzZSBvbiB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KLSMgVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgdGhlIGltcGxpY2l0IHJldHVybiBOb25lLgotZGVmIGlyZXR1cm5fZXhhbXBsZSgpOgotICAgIGEgPSA1Ci0gICAgYiA9IDUKLSAgICBpZiBhID09IGI6Ci0gICAgICAgIGIgPSBhKzEKLSAgICBlbHNlOgotICAgICAgICBwYXNzCi0KLWlyZXR1cm5fZXhhbXBsZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoNiwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdyZXR1cm4nKV0KLQotIyBUaWdodCBsb29wIHdpdGggd2hpbGUoMSkgZXhhbXBsZSAoU0YgIzc2NTYyNCkKLWRlZiB0aWdodGxvb3BfZXhhbXBsZSgpOgotICAgIGl0ZW1zID0gcmFuZ2UoMCwgMykKLSAgICB0cnk6Ci0gICAgICAgIGkgPSAwCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBiID0gaXRlbXNbaV07IGkrPTEKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgcGFzcwotCi10aWdodGxvb3BfZXhhbXBsZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdleGNlcHRpb24nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNiwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNywgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNywgJ3JldHVybicpXQotCi1kZWYgdGlnaHRlcmxvb3BfZXhhbXBsZSgpOgotICAgIGl0ZW1zID0gcmFuZ2UoMSwgNCkKLSAgICB0cnk6Ci0gICAgICAgIGkgPSAwCi0gICAgICAgIHdoaWxlIDE6IGkgPSBpdGVtc1tpXQotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICBwYXNzCi0KLXRpZ2h0ZXJsb29wX2V4YW1wbGUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnZXhjZXB0aW9uJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdyZXR1cm4nKV0KLQotZGVmIGdlbmVyYXRvcl9mdW5jdGlvbigpOgotICAgIHRyeToKLSAgICAgICAgeWllbGQgVHJ1ZQotICAgICAgICAiY29udGludWVkIgotICAgIGZpbmFsbHk6Ci0gICAgICAgICJmaW5hbGx5IgotZGVmIGdlbmVyYXRvcl9leGFtcGxlKCk6Ci0gICAgIyBhbnkoKSB3aWxsIGxlYXZlIHRoZSBnZW5lcmF0b3IgYmVmb3JlIGl0cyBlbmQKLSAgICB4ID0gYW55KGdlbmVyYXRvcl9mdW5jdGlvbigpKQotCi0gICAgIyB0aGUgZm9sbG93aW5nIGxpbmVzIHdlcmUgbm90IHRyYWNlZAotICAgIGZvciB4IGluIHJhbmdlKDEwKToKLSAgICAgICAgeSA9IHgKLQotZ2VuZXJhdG9yX2V4YW1wbGUuZXZlbnRzID0gKFsoMCwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNiwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC01LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTQsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNCwgJ3JldHVybicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTQsICdjYWxsJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNCwgJ2V4Y2VwdGlvbicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTEsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMSwgJ3JldHVybicpXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyg1LCAnbGluZScpLCAoNiwgJ2xpbmUnKV0gKiAxMCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyg1LCAnbGluZScpLCAoNSwgJ3JldHVybicpXSkKK2RlZiB0cmFjZWRfY2FsbGVyX2xpc3RfY29tcHJlaGVuc2lvbigpOgorICAgIGsgPSAxMAorICAgIG15bGlzdCA9IFt0cmFjZWRfZG91YmxlcihpKSBmb3IgaSBpbiByYW5nZShrKV0KKyAgICByZXR1cm4gbXlsaXN0CiAKIAotY2xhc3MgVHJhY2VyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5ldmVudHMgPSBbXQotICAgIGRlZiB0cmFjZShzZWxmLCBmcmFtZSwgZXZlbnQsIGFyZyk6Ci0gICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgoZnJhbWUuZl9saW5lbm8sIGV2ZW50KSkKLSAgICAgICAgcmV0dXJuIHNlbGYudHJhY2UKLSAgICBkZWYgdHJhY2VXaXRoR2VuZXhwKHNlbGYsIGZyYW1lLCBldmVudCwgYXJnKToKLSAgICAgICAgKG8gZm9yIG8gaW4gWzFdKQotICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoKGZyYW1lLmZfbGluZW5vLCBldmVudCkpCi0gICAgICAgIHJldHVybiBzZWxmLnRyYWNlCitjbGFzcyBUcmFjZWRDbGFzcyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgc2VsZi5hID0geAogCi1jbGFzcyBUcmFjZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgaW5zdF9tZXRob2RfbGluZWFyKHNlbGYsIHkpOgorICAgICAgICByZXR1cm4gc2VsZi5hICsgeQogCi0gICAgIyBEaXNhYmxlIGdjIGNvbGxlY3Rpb24gd2hlbiB0cmFjaW5nLCBvdGhlcndpc2UgdGhlCi0gICAgIyBkZWFsbG9jYXRvcnMgbWF5IGJlIHRyYWNlZCBhcyB3ZWxsLgorICAgIGRlZiBpbnN0X21ldGhvZF9jYWxsaW5nKHNlbGYsIHgpOgorICAgICAgICBjID0gc2VsZi5pbnN0X21ldGhvZF9saW5lYXIoeCkKKyAgICAgICAgcmV0dXJuIGMgKyB0cmFjZWRfZnVuY19saW5lYXIoeCwgYykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjbGFzc19tZXRob2RfbGluZWFyKGNscywgeSk6CisgICAgICAgIHJldHVybiB5ICogMgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzdGF0aWNfbWV0aG9kX2xpbmVhcih5KToKKyAgICAgICAgcmV0dXJuIHkgKiAyCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IGNhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworCisKK2NsYXNzIFRlc3RMaW5lQ291bnRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJXaGl0ZS1ib3ggdGVzdGluZyBvZiBsaW5lLWNvdW50aW5nLCB2aWEgcnVuZnVuYyIiIgogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi51c2luZ19nYyA9IGdjLmlzZW5hYmxlZCgpCi0gICAgICAgIGdjLmRpc2FibGUoKQorICAgICAgICBzZWxmLnRyYWNlciA9IFRyYWNlKGNvdW50PTEsIHRyYWNlPTAsIGNvdW50ZnVuY3M9MCwgY291bnRjYWxsZXJzPTApCisgICAgICAgIHNlbGYubXlfcHlfZmlsZW5hbWUgPSBmaXhfZXh0X3B5KF9fZmlsZV9fKQogCisgICAgZGVmIHRlc3RfdHJhY2VkX2Z1bmNfbGluZWFyKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9mdW5jX2xpbmVhciwgMiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDcpCisKKyAgICAgICAgIyBhbGwgbGluZXMgYXJlIGV4ZWN1dGVkIG9uY2UKKyAgICAgICAgZXhwZWN0ZWQgPSB7fQorICAgICAgICBmaXJzdGxpbmVubyA9IGdldF9maXJzdGxpbmVubyh0cmFjZWRfZnVuY19saW5lYXIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDUpOgorICAgICAgICAgICAgZXhwZWN0ZWRbKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgIGkpXSA9IDEKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jb3VudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfdHJhY2VkX2Z1bmNfbG9vcChzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19sb29wLCAyLCAzKQorCisgICAgICAgIGZpcnN0bGluZW5vID0gZ2V0X2ZpcnN0bGluZW5vKHRyYWNlZF9mdW5jX2xvb3ApCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgMSk6IDEsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAyKTogNiwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDMpOiA1LAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgNCk6IDEsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3RyYWNlZF9mdW5jX2ltcG9ydGluZyhzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19pbXBvcnRpbmcsIDIsIDUpCisKKyAgICAgICAgZmlyc3RsaW5lbm8gPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2Z1bmNfaW1wb3J0aW5nKQorICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDEpOiAxLAorICAgICAgICAgICAgKGZpeF9leHRfcHkodGVzdG1vZC5fX2ZpbGVfXyksIDIpOiAxLAorICAgICAgICAgICAgKGZpeF9leHRfcHkodGVzdG1vZC5fX2ZpbGVfXyksIDMpOiAxLAorICAgICAgICB9CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3RyYWNlX2Z1bmNfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9mdW5jX2NhbGxpbmdfZ2VuZXJhdG9yKQorCisgICAgICAgIGZpcnN0bGluZW5vX2NhbGxpbmcgPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2Z1bmNfY2FsbGluZ19nZW5lcmF0b3IpCisgICAgICAgIGZpcnN0bGluZW5vX2dlbiA9IGdldF9maXJzdGxpbmVubyh0cmFjZWRfZnVuY19nZW5lcmF0b3IpCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAxKTogMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsaW5nICsgMik6IDExLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAzKTogMTAsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fZ2VuICsgMSk6IDEsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fZ2VuICsgMik6IDExLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2dlbiArIDMpOiAxMCwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jb3VudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfdHJhY2VfbGlzdF9jb21wcmVoZW5zaW9uKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9jYWxsZXJfbGlzdF9jb21wcmVoZW5zaW9uKQorCisgICAgICAgIGZpcnN0bGluZW5vX2NhbGxpbmcgPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2NhbGxlcl9saXN0X2NvbXByZWhlbnNpb24pCisgICAgICAgIGZpcnN0bGluZW5vX2NhbGxlZCA9IGdldF9maXJzdGxpbmVubyh0cmFjZWRfZG91YmxlcikKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fY2FsbGluZyArIDEpOiAxLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAyKTogMTEsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fY2FsbGluZyArIDMpOiAxLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxlZCArIDEpOiAxMCwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jb3VudHMsIGV4cGVjdGVkKQorCisKKyAgICBkZWYgdGVzdF9saW5lYXJfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyBYWFggdG9kbzogbGF0ZXIgYWRkICdzdGF0aWNfbWV0aG9kX2xpbmVhcicgYW5kICdjbGFzc19tZXRob2RfbGluZWFyJworICAgICAgICAjIGhlcmUsIG9uY2UgaXNzdWUxNzY0Mjg2IGlzIHJlc29sdmVkCisgICAgICAgICMKKyAgICAgICAgZm9yIG1ldGhuYW1lIGluIFsnaW5zdF9tZXRob2RfbGluZWFyJyxdOgorICAgICAgICAgICAgdHJhY2VyID0gVHJhY2UoY291bnQ9MSwgdHJhY2U9MCwgY291bnRmdW5jcz0wLCBjb3VudGNhbGxlcnM9MCkKKyAgICAgICAgICAgIHRyYWNlZF9vYmogPSBUcmFjZWRDbGFzcygyNSkKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIodHJhY2VkX29iaiwgbWV0aG5hbWUpCisgICAgICAgICAgICB0cmFjZXIucnVuZnVuYyhtZXRob2QsIDIwKQorCisgICAgICAgICAgICBmaXJzdGxpbmVubyA9IGdldF9maXJzdGxpbmVubyhtZXRob2QpCisgICAgICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAxKTogMSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2VyLnJlc3VsdHMoKS5jb3VudHMsIGV4cGVjdGVkKQorCitjbGFzcyBUZXN0UnVuRXhlY0NvdW50cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSBzaW1wbGUgc2FuaXR5IHRlc3Qgb2YgbGluZS1jb3VudGluZywgdmlhIHJ1bmN0eCAoZXhlYykiIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubXlfcHlfZmlsZW5hbWUgPSBmaXhfZXh0X3B5KF9fZmlsZV9fKQorCisgICAgZGVmIHRlc3RfZXhlY19jb3VudHMoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyID0gVHJhY2UoY291bnQ9MSwgdHJhY2U9MCwgY291bnRmdW5jcz0wLCBjb3VudGNhbGxlcnM9MCkKKyAgICAgICAgY29kZSA9IHInJyd0cmFjZWRfZnVuY19sb29wKDIsIDUpJycnCisgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGUsIF9fZmlsZV9fLCAnZXhlYycpCisgICAgICAgIHNlbGYudHJhY2VyLnJ1bmN0eChjb2RlLCBnbG9iYWxzKCksIHZhcnMoKSkKKworICAgICAgICBmaXJzdGxpbmVubyA9IGdldF9maXJzdGxpbmVubyh0cmFjZWRfZnVuY19sb29wKQorICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDEpOiAxLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgMik6IDYsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAzKTogNSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDQpOiAxLAorICAgICAgICB9CisKKyAgICAgICAgIyBXaGVuIHVzZWQgdGhyb3VnaCAncnVuJywgc29tZSBvdGhlciBzcHVyaW9zIGNvdW50cyBhcmUgcHJvZHVjZWQsIGxpa2UKKyAgICAgICAgIyB0aGUgc2V0dHJhY2Ugb2YgdGhyZWFkaW5nLCB3aGljaCB3ZSBpZ25vcmUsIGp1c3QgbWFraW5nIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgIyBjb3VudHMgZm8gdHJhY2VkX2Z1bmNfbG9vcCB3ZXJlIHJpZ2h0LgorICAgICAgICAjCisgICAgICAgIGZvciBrIGluIGV4cGVjdGVkLmtleXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNvdW50c1trXSwgZXhwZWN0ZWRba10pCisKKworY2xhc3MgVGVzdEZ1bmNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJXaGl0ZS1ib3ggdGVzdGluZyBvZiBmdW5jcyB0cmFjaW5nIiIiCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlciA9IFRyYWNlKGNvdW50PTAsIHRyYWNlPTAsIGNvdW50ZnVuY3M9MSkKKyAgICAgICAgc2VsZi5maWxlbW9kID0gbXlfZmlsZV9hbmRfbW9kbmFtZSgpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfY2FsbGVyKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9mdW5jX3NpbXBsZV9jYWxsZXIsIDEpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX3NpbXBsZV9jYWxsZXInLCk6IDEsCisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2xpbmVhcicsKTogMSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jYWxsZWRmdW5jcywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX2NhbGxlcl9pbXBvcnRpbmcoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyLnJ1bmZ1bmModHJhY2VkX2Z1bmNfaW1wb3J0aW5nX2NhbGxlciwgMSkKKworICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfc2ltcGxlX2NhbGxlcicsKTogMSwKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfbGluZWFyJywpOiAxLAorICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19pbXBvcnRpbmdfY2FsbGVyJywpOiAxLAorICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19pbXBvcnRpbmcnLCk6IDEsCisgICAgICAgICAgICAoZml4X2V4dF9weSh0ZXN0bW9kLl9fZmlsZV9fKSwgJ3Rlc3Rtb2QnLCAnZnVuYycpOiAxLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNhbGxlZGZ1bmNzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2luc3RfbWV0aG9kX2NhbGxpbmcoc2VsZik6CisgICAgICAgIG9iaiA9IFRyYWNlZENsYXNzKDIwKQorICAgICAgICBzZWxmLnRyYWNlci5ydW5mdW5jKG9iai5pbnN0X21ldGhvZF9jYWxsaW5nLCAxKQorCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCdUcmFjZWRDbGFzcy5pbnN0X21ldGhvZF9jYWxsaW5nJywpOiAxLAorICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCdUcmFjZWRDbGFzcy5pbnN0X21ldGhvZF9saW5lYXInLCk6IDEsCisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2xpbmVhcicsKTogMSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jYWxsZWRmdW5jcywgZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdENhbGxlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIldoaXRlLWJveCB0ZXN0aW5nIG9mIGNhbGxlcnMgdHJhY2luZyIiIgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIgPSBUcmFjZShjb3VudD0wLCB0cmFjZT0wLCBjb3VudGNhbGxlcnM9MSkKKyAgICAgICAgc2VsZi5maWxlbW9kID0gbXlfZmlsZV9hbmRfbW9kbmFtZSgpCisKKyAgICBkZWYgdGVzdF9sb29wX2NhbGxlcl9pbXBvcnRpbmcoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyLnJ1bmZ1bmModHJhY2VkX2Z1bmNfaW1wb3J0aW5nX2NhbGxlciwgMSkKKworICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgICgob3MucGF0aC5zcGxpdGV4dCh0cmFjZS5fX2ZpbGVfXylbMF0gKyAnLnB5JywgJ3RyYWNlJywgJ1RyYWNlLnJ1bmZ1bmMnKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19pbXBvcnRpbmdfY2FsbGVyJywpKSk6IDEsCisgICAgICAgICAgICAoKHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfc2ltcGxlX2NhbGxlcicsKSksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfbGluZWFyJywpKSk6IDEsCisgICAgICAgICAgICAoKHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfaW1wb3J0aW5nX2NhbGxlcicsKSksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfc2ltcGxlX2NhbGxlcicsKSkpOiAxLAorICAgICAgICAgICAgKChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXInLCkpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2ltcG9ydGluZycsKSkpOiAxLAorICAgICAgICAgICAgKChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2ltcG9ydGluZycsKSksCisgICAgICAgICAgICAgICAgKGZpeF9leHRfcHkodGVzdG1vZC5fX2ZpbGVfXyksICd0ZXN0bW9kJywgJ2Z1bmMnKSk6IDEsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY2FsbGVycywgZXhwZWN0ZWQpCisKKworIyBDcmVhdGVkIHNlcGFyYXRlbHkgZm9yIGlzc3VlICMzODIxCitjbGFzcyBUZXN0Q292ZXJhZ2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi51c2luZ19nYzoKLSAgICAgICAgICAgIGdjLmVuYWJsZSgpCisgICAgICAgIHJtdHJlZShURVNURk4pCisgICAgICAgIHVubGluayhURVNURk4pCiAKLSAgICBkZWYgY29tcGFyZV9ldmVudHMoc2VsZiwgbGluZV9vZmZzZXQsIGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKToKLSAgICAgICAgZXZlbnRzID0gWyhsIC0gbGluZV9vZmZzZXQsIGUpIGZvciAobCwgZSkgaW4gZXZlbnRzXQotICAgICAgICBpZiBldmVudHMgIT0gZXhwZWN0ZWRfZXZlbnRzOgotICAgICAgICAgICAgc2VsZi5mYWlsKAotICAgICAgICAgICAgICAgICJldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RhdGlvbjpcbiIgKwotICAgICAgICAgICAgICAgICJcbiIuam9pbihkaWZmbGliLm5kaWZmKFtzdHIoeCkgZm9yIHggaW4gZXhwZWN0ZWRfZXZlbnRzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyKHgpIGZvciB4IGluIGV2ZW50c10pKSkKKyAgICBkZWYgX2NvdmVyYWdlKHNlbGYsIHRyYWNlciwKKyAgICAgICAgICAgICAgICAgIGNtZD0nZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3BwcmludDsgdGVzdF9wcHJpbnQudGVzdF9tYWluKCknKToKKyAgICAgICAgdHJhY2VyLnJ1bihjbWQpCisgICAgICAgIHIgPSB0cmFjZXIucmVzdWx0cygpCisgICAgICAgIHIud3JpdGVfcmVzdWx0cyhzaG93X21pc3Npbmc9VHJ1ZSwgc3VtbWFyeT1UcnVlLCBjb3ZlcmRpcj1URVNURk4pCiAKLSAgICBkZWYgcnVuX2FuZF9jb21wYXJlKHNlbGYsIGZ1bmMsIGV2ZW50cyk6Ci0gICAgICAgIHRyYWNlciA9IFRyYWNlcigpCi0gICAgICAgIHN5cy5zZXR0cmFjZSh0cmFjZXIudHJhY2UpCi0gICAgICAgIGZ1bmMoKQotICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKLSAgICAgICAgc2VsZi5jb21wYXJlX2V2ZW50cyhmdW5jLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZXIuZXZlbnRzLCBldmVudHMpCisgICAgZGVmIHRlc3RfY292ZXJhZ2Uoc2VsZik6CisgICAgICAgIHRyYWNlciA9IHRyYWNlLlRyYWNlKHRyYWNlPTAsIGNvdW50PTEpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fY292ZXJhZ2UodHJhY2VyKQorICAgICAgICBzdGRvdXQgPSBzdGRvdXQuZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInBwcmludC5weSIgaW4gc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImNhc2UucHkiIGluIHN0ZG91dCkgICAjIGZyb20gdW5pdHRlc3QKKyAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJwcHJpbnQuY292ZXIiIGluIGZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInVuaXR0ZXN0LmNhc2UuY292ZXIiIGluIGZpbGVzKQogCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGZ1bmMpOgotICAgICAgICBzZWxmLnJ1bl9hbmRfY29tcGFyZShmdW5jLCBmdW5jLmV2ZW50cykKKyAgICBkZWYgdGVzdF9jb3ZlcmFnZV9pZ25vcmUoc2VsZik6CisgICAgICAgICMgSWdub3JlIGFsbCBmaWxlcywgbm90aGluZyBzaG91bGQgYmUgdHJhY2VkIG5vciBwcmludGVkCisgICAgICAgIGxpYnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguZGlybmFtZShvcy5fX2ZpbGVfXykpCisgICAgICAgICMgc3lzLnByZWZpeCBkb2VzIG5vdCB3b3JrIHdoZW4gcnVubmluZyBmcm9tIGEgY2hlY2tvdXQKKyAgICAgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLnByZWZpeCwgc3lzLmV4ZWNfcHJlZml4LCBsaWJwYXRoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2U9MCwgY291bnQ9MSkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzZWxmLl9jb3ZlcmFnZSh0cmFjZXIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFU1RGTik6CisgICAgICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIoVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlcywgW10pCiAKLSAgICBkZWYgcnVuX3Rlc3QyKHNlbGYsIGZ1bmMpOgotICAgICAgICB0cmFjZXIgPSBUcmFjZXIoKQotICAgICAgICBmdW5jKHRyYWNlci50cmFjZSkKLSAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCi0gICAgICAgIHNlbGYuY29tcGFyZV9ldmVudHMoZnVuYy5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VyLmV2ZW50cywgZnVuYy5ldmVudHMpCi0KLSAgICBkZWYgc2V0X2FuZF9yZXRyaWV2ZV9ub25lKHNlbGYpOgotICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKLSAgICAgICAgYXNzZXJ0IHN5cy5nZXR0cmFjZSgpIGlzIE5vbmUKLQotICAgIGRlZiBzZXRfYW5kX3JldHJpZXZlX2Z1bmMoc2VsZik6Ci0gICAgICAgIGRlZiBmbigqYXJncyk6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc3lzLnNldHRyYWNlKGZuKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBhc3NlcnQgc3lzLmdldHRyYWNlKCkgaXMgZm4KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQotCi0gICAgZGVmIHRlc3RfMDFfYmFzaWMoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QoYmFzaWMpCi0gICAgZGVmIHRlc3RfMDJfYXJpZ28oc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QoYXJpZ29fZXhhbXBsZSkKLSAgICBkZWYgdGVzdF8wM19vbmVfaW5zdHIoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Qob25lX2luc3RyX2xpbmUpCi0gICAgZGVmIHRlc3RfMDRfbm9fcG9wX2Jsb2NrcyhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChub19wb3BfYmxvY2tzKQotICAgIGRlZiB0ZXN0XzA1X25vX3BvcF90b3BzKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX3BvcF90b3BzKQotICAgIGRlZiB0ZXN0XzA2X2NhbGwoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QoY2FsbCkKLSAgICBkZWYgdGVzdF8wN19yYWlzZShzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdCh0ZXN0X3JhaXNlKQotCi0gICAgZGVmIHRlc3RfMDhfc2V0dHJhY2VfYW5kX3JldHVybihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdDIoc2V0dHJhY2VfYW5kX3JldHVybikKLSAgICBkZWYgdGVzdF8wOV9zZXR0cmFjZV9hbmRfcmFpc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QyKHNldHRyYWNlX2FuZF9yYWlzZSkKLSAgICBkZWYgdGVzdF8xMF9pcmV0dXJuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KGlyZXR1cm5fZXhhbXBsZSkKLSAgICBkZWYgdGVzdF8xMV90aWdodGxvb3Aoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QodGlnaHRsb29wX2V4YW1wbGUpCi0gICAgZGVmIHRlc3RfMTJfdGlnaHRlcmxvb3Aoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QodGlnaHRlcmxvb3BfZXhhbXBsZSkKLQotICAgIGRlZiB0ZXN0XzEzX2dlbmV4cChzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChnZW5lcmF0b3JfZXhhbXBsZSkKLSAgICAgICAgIyBpc3N1ZTEyNjU6IGlmIHRoZSB0cmFjZSBmdW5jdGlvbiBjb250YWlucyBhIGdlbmVyYXRvciwKLSAgICAgICAgIyBhbmQgaWYgdGhlIHRyYWNlZCBmdW5jdGlvbiBjb250YWlucyBhbm90aGVyIGdlbmVyYXRvcgotICAgICAgICAjIHRoYXQgaXMgbm90IGNvbXBsZXRlbHkgZXhoYXVzdGVkLCB0aGUgdHJhY2Ugc3RvcHBlZC4KLSAgICAgICAgIyBXb3JzZTogdGhlICdmaW5hbGx5JyBjbGF1c2Ugd2FzIG5vdCBpbnZva2VkLgotICAgICAgICB0cmFjZXIgPSBUcmFjZXIoKQotICAgICAgICBzeXMuc2V0dHJhY2UodHJhY2VyLnRyYWNlV2l0aEdlbmV4cCkKLSAgICAgICAgZ2VuZXJhdG9yX2V4YW1wbGUoKQotICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKLSAgICAgICAgc2VsZi5jb21wYXJlX2V2ZW50cyhnZW5lcmF0b3JfZXhhbXBsZS5fX2NvZGVfXy5jb19maXJzdGxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZXIuZXZlbnRzLCBnZW5lcmF0b3JfZXhhbXBsZS5ldmVudHMpCi0KLSAgICBkZWYgdGVzdF8xNF9vbmxpbmVyX2lmKHNlbGYpOgotICAgICAgICBkZWYgb25saW5lcnMoKToKLSAgICAgICAgICAgIGlmIFRydWU6IEZhbHNlCi0gICAgICAgICAgICBlbHNlOiBUcnVlCi0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBzZWxmLnJ1bl9hbmRfY29tcGFyZSgKLSAgICAgICAgICAgIG9ubGluZXJzLAotICAgICAgICAgICAgWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICgxLCAnbGluZScpLAotICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICgzLCAncmV0dXJuJyldKQotCi0gICAgZGVmIHRlc3RfMTVfbG9vcHMoc2VsZik6Ci0gICAgICAgICMgaXNzdWUxNzUwMDc2OiAid2hpbGUiIGV4cHJlc3Npb24gaXMgc2tpcHBlZCBieSBkZWJ1Z2dlcgotICAgICAgICBkZWYgZm9yX2V4YW1wbGUoKToKLSAgICAgICAgICAgIGZvciB4IGluIHJhbmdlKDIpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoCi0gICAgICAgICAgICBmb3JfZXhhbXBsZSwKLSAgICAgICAgICAgIFsoMCwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAoMSwgJ3JldHVybicpXSkKLQotICAgICAgICBkZWYgd2hpbGVfZXhhbXBsZSgpOgotICAgICAgICAgICAgIyBXaGlsZSBleHByZXNzaW9uIHNob3VsZCBiZSB0cmFjZWQgb24gZXZlcnkgbG9vcAotICAgICAgICAgICAgeCA9IDIKLSAgICAgICAgICAgIHdoaWxlIHggPiAwOgotICAgICAgICAgICAgICAgIHggLT0gMQotICAgICAgICBzZWxmLnJ1bl9hbmRfY29tcGFyZSgKLSAgICAgICAgICAgIHdoaWxlX2V4YW1wbGUsCi0gICAgICAgICAgICBbKDAsICdjYWxsJyksCi0gICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgKDMsICdsaW5lJyksCi0gICAgICAgICAgICAgKDQsICdsaW5lJyksCi0gICAgICAgICAgICAgKDMsICdsaW5lJyksCi0gICAgICAgICAgICAgKDQsICdsaW5lJyksCi0gICAgICAgICAgICAgKDMsICdsaW5lJyksCi0gICAgICAgICAgICAgKDMsICdyZXR1cm4nKV0pCi0KLSAgICBkZWYgdGVzdF8xNl9ibGFua19saW5lcyhzZWxmKToKLSAgICAgICAgZXhlYygiZGVmIGYoKTpcbiIgKyAiXG4iICogMjU2ICsgIiAgICBwYXNzIikKLSAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoCi0gICAgICAgICAgICBmLAotICAgICAgICAgICAgWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICgyNTcsICdsaW5lJyksCi0gICAgICAgICAgICAgKDI1NywgJ3JldHVybicpXSkKLQotCi1jbGFzcyBSYWlzaW5nVHJhY2VGdW5jVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0cmFjZShzZWxmLCBmcmFtZSwgZXZlbnQsIGFyZyk6Ci0gICAgICAgICIiIkEgdHJhY2UgZnVuY3Rpb24gdGhhdCByYWlzZXMgYW4gZXhjZXB0aW9uIGluIHJlc3BvbnNlIHRvIGEKLSAgICAgICAgc3BlY2lmaWMgdHJhY2UgZXZlbnQuIiIiCi0gICAgICAgIGlmIGV2ZW50ID09IHNlbGYucmFpc2VPbkV2ZW50OgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciAjIGp1c3Qgc29tZXRoaW5nIHRoYXQgaXNuJ3QgUnVudGltZUVycm9yCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZQotCi0gICAgZGVmIGYoc2VsZik6Ci0gICAgICAgICIiIlRoZSBmdW5jdGlvbiB0byB0cmFjZTsgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGF0J3MgdGhlIGNhc2UKLSAgICAgICAgd2UncmUgdGVzdGluZywgc28gdGhhdCB0aGUgJ2V4Y2VwdGlvbicgdHJhY2UgZXZlbnQgZmlyZXMuIiIiCi0gICAgICAgIGlmIHNlbGYucmFpc2VPbkV2ZW50ID09ICdleGNlcHRpb24nOgotICAgICAgICAgICAgeCA9IDAKLSAgICAgICAgICAgIHkgPSAxIC8vIHgKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAxCi0KLSAgICBkZWYgcnVuX3Rlc3RfZm9yX2V2ZW50KHNlbGYsIGV2ZW50KToKLSAgICAgICAgIiIiVGVzdHMgdGhhdCBhbiBleGNlcHRpb24gcmFpc2VkIGluIHJlc3BvbnNlIHRvIHRoZSBnaXZlbiBldmVudCBpcwotICAgICAgICBoYW5kbGVkIE9LLiIiIgotICAgICAgICBzZWxmLnJhaXNlT25FdmVudCA9IGV2ZW50Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKSArIDEpOgotICAgICAgICAgICAgICAgIHN5cy5zZXR0cmFjZShzZWxmLnRyYWNlKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCB0aHJvd24hIikKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgicmVjdXJzaW9uIGNvdW50ZXIgbm90IHJlc2V0IikKLQotICAgICMgVGVzdCB0aGUgaGFuZGxpbmcgb2YgZXhjZXB0aW9ucyByYWlzZWQgYnkgZWFjaCBraW5kIG9mIHRyYWNlIGV2ZW50LgotICAgIGRlZiB0ZXN0X2NhbGwoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3RfZm9yX2V2ZW50KCdjYWxsJykKLSAgICBkZWYgdGVzdF9saW5lKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0X2Zvcl9ldmVudCgnbGluZScpCi0gICAgZGVmIHRlc3RfcmV0dXJuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0X2Zvcl9ldmVudCgncmV0dXJuJykKLSAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3RfZm9yX2V2ZW50KCdleGNlcHRpb24nKQotCi0gICAgZGVmIHRlc3RfdHJhc2hfc3RhY2soc2VsZik6Ci0gICAgICAgIGRlZiBmKCk6Ci0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKLSAgICAgICAgICAgICAgICBwcmludCBpICAjIGxpbmUgdHJhY2luZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhdCB0aGlzIGxpbmUKLQotICAgICAgICBkZWYgZyhmcmFtZSwgd2h5LCBleHRyYSk6Ci0gICAgICAgICAgICBpZiAod2h5ID09ICdsaW5lJyBhbmQKLSAgICAgICAgICAgICAgICBmcmFtZS5mX2xpbmVubyA9PSBmLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubyArIDIpOgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgImkgYW0gY3Jhc2hpbmciCi0gICAgICAgICAgICByZXR1cm4gZwotCi0gICAgICAgIHN5cy5zZXR0cmFjZShnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmKCkKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKLSAgICAgICAgICAgICMgdGhlIHRlc3QgaXMgcmVhbGx5IHRoYXQgdGhpcyBkb2Vzbid0IHNlZ2ZhdWx0OgotICAgICAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCBwcm9wYWdhdGVkIikKLQotCi0jICdKdW1wJyB0ZXN0czogYXNzaWduaW5nIHRvIGZyYW1lLmZfbGluZW5vIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uCi0jIG1vdmVzIHRoZSBleGVjdXRpb24gcG9zaXRpb24gLSBpdCdzIGhvdyBkZWJ1Z2dlcnMgaW1wbGVtZW50IGEgSnVtcAotIyBjb21tYW5kIChha2EuICJTZXQgbmV4dCBzdGF0ZW1lbnQiKS4KLQotY2xhc3MgSnVtcFRyYWNlcjoKLSAgICAiIiJEZWZpbmVzIGEgdHJhY2UgZnVuY3Rpb24gdGhhdCBqdW1wcyBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyLAotICAgIHdpdGggdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbGluZXMgb2YgdGhlIGp1bXAgYmVpbmcgZGVmaW5lZCBieQotICAgIHRoZSAnanVtcCcgcHJvcGVydHkgb2YgdGhlIGZ1bmN0aW9uIHVuZGVyIHRlc3QuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuY3Rpb24pOgotICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZnVuY3Rpb24KLSAgICAgICAgc2VsZi5qdW1wRnJvbSA9IGZ1bmN0aW9uLmp1bXBbMF0KLSAgICAgICAgc2VsZi5qdW1wVG8gPSBmdW5jdGlvbi5qdW1wWzFdCi0gICAgICAgIHNlbGYuZG9uZSA9IEZhbHNlCi0KLSAgICBkZWYgdHJhY2Uoc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgotICAgICAgICBpZiBub3Qgc2VsZi5kb25lIGFuZCBmcmFtZS5mX2NvZGUgPT0gc2VsZi5mdW5jdGlvbi5mdW5jX2NvZGU6Ci0gICAgICAgICAgICBmaXJzdExpbmUgPSBmcmFtZS5mX2NvZGUuY29fZmlyc3RsaW5lbm8KLSAgICAgICAgICAgIGlmIGZyYW1lLmZfbGluZW5vID09IGZpcnN0TGluZSArIHNlbGYuanVtcEZyb206Ci0gICAgICAgICAgICAgICAgIyBDb3BlIHdpdGggbm9uLWludGVnZXIgc2VsZi5qdW1wVG8gKGJlY2F1c2Ugb2YKLSAgICAgICAgICAgICAgICAjIG5vX2p1bXBfdG9fbm9uX2ludGVnZXJzIGJlbG93KS4KLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGZyYW1lLmZfbGluZW5vID0gZmlyc3RMaW5lICsgc2VsZi5qdW1wVG8KLSAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgICAgICBmcmFtZS5mX2xpbmVubyA9IHNlbGYuanVtcFRvCi0gICAgICAgICAgICAgICAgc2VsZi5kb25lID0gVHJ1ZQotICAgICAgICByZXR1cm4gc2VsZi50cmFjZQotCi0jIFRoZSBmaXJzdCBzZXQgb2YgJ2p1bXAnIHRlc3RzIGFyZSBmb3IgdGhpbmdzIHRoYXQgYXJlIGFsbG93ZWQ6Ci0KLWRlZiBqdW1wX3NpbXBsZV9mb3J3YXJkcyhvdXRwdXQpOgotICAgIG91dHB1dC5hcHBlbmQoMSkKLSAgICBvdXRwdXQuYXBwZW5kKDIpCi0gICAgb3V0cHV0LmFwcGVuZCgzKQotCi1qdW1wX3NpbXBsZV9mb3J3YXJkcy5qdW1wID0gKDEsIDMpCi1qdW1wX3NpbXBsZV9mb3J3YXJkcy5vdXRwdXQgPSBbM10KLQotZGVmIGp1bXBfc2ltcGxlX2JhY2t3YXJkcyhvdXRwdXQpOgotICAgIG91dHB1dC5hcHBlbmQoMSkKLSAgICBvdXRwdXQuYXBwZW5kKDIpCi0KLWp1bXBfc2ltcGxlX2JhY2t3YXJkcy5qdW1wID0gKDIsIDEpCi1qdW1wX3NpbXBsZV9iYWNrd2FyZHMub3V0cHV0ID0gWzEsIDEsIDJdCi0KLWRlZiBqdW1wX291dF9vZl9ibG9ja19mb3J3YXJkcyhvdXRwdXQpOgotICAgIGZvciBpIGluIDEsIDI6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoMikKLSAgICAgICAgZm9yIGogaW4gWzNdOiAgIyBBbHNvIHRlc3RzIGp1bXBpbmcgb3ZlciBhIGJsb2NrCi0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDQpCi0gICAgb3V0cHV0LmFwcGVuZCg1KQotCi1qdW1wX291dF9vZl9ibG9ja19mb3J3YXJkcy5qdW1wID0gKDMsIDUpCi1qdW1wX291dF9vZl9ibG9ja19mb3J3YXJkcy5vdXRwdXQgPSBbMiwgNV0KLQotZGVmIGp1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcyhvdXRwdXQpOgotICAgIG91dHB1dC5hcHBlbmQoMSkKLSAgICBmb3IgaSBpbiBbMV06Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoMykKLSAgICAgICAgZm9yIGogaW4gWzJdOiAgIyBBbHNvIHRlc3RzIGp1bXBpbmcgb3ZlciBhIGJsb2NrCi0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDUpCi0gICAgICAgIG91dHB1dC5hcHBlbmQoNikKLSAgICBvdXRwdXQuYXBwZW5kKDcpCi0KLWp1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcy5qdW1wID0gKDYsIDEpCi1qdW1wX291dF9vZl9ibG9ja19iYWNrd2FyZHMub3V0cHV0ID0gWzEsIDMsIDUsIDEsIDMsIDUsIDYsIDddCi0KLWRlZiBqdW1wX3RvX2NvZGVsZXNzX2xpbmUob3V0cHV0KToKLSAgICBvdXRwdXQuYXBwZW5kKDEpCi0gICAgIyBKdW1waW5nIHRvIHRoaXMgbGluZSBzaG91bGQgc2tpcCB0byB0aGUgbmV4dCBvbmUuCi0gICAgb3V0cHV0LmFwcGVuZCgzKQotCi1qdW1wX3RvX2NvZGVsZXNzX2xpbmUuanVtcCA9ICgxLCAyKQotanVtcF90b19jb2RlbGVzc19saW5lLm91dHB1dCA9IFszXQotCi1kZWYganVtcF90b19zYW1lX2xpbmUob3V0cHV0KToKLSAgICBvdXRwdXQuYXBwZW5kKDEpCi0gICAgb3V0cHV0LmFwcGVuZCgyKQotICAgIG91dHB1dC5hcHBlbmQoMykKLQotanVtcF90b19zYW1lX2xpbmUuanVtcCA9ICgyLCAyKQotanVtcF90b19zYW1lX2xpbmUub3V0cHV0ID0gWzEsIDIsIDNdCi0KLSMgVGVzdHMganVtcGluZyB3aXRoaW4gYSBmaW5hbGx5IGJsb2NrLCBhbmQgb3ZlciBvbmUuCi1kZWYganVtcF9pbl9uZXN0ZWRfZmluYWxseShvdXRwdXQpOgotICAgIHRyeToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoNCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg2KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg4KQotICAgICAgICBvdXRwdXQuYXBwZW5kKDkpCi0KLWp1bXBfaW5fbmVzdGVkX2ZpbmFsbHkuanVtcCA9ICg0LCA5KQotanVtcF9pbl9uZXN0ZWRfZmluYWxseS5vdXRwdXQgPSBbMiwgOV0KLQotIyBUaGUgc2Vjb25kIHNldCBvZiAnanVtcCcgdGVzdHMgYXJlIGZvciB0aGluZ3MgdGhhdCBhcmUgbm90IGFsbG93ZWQ6Ci0KLWRlZiBub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMob3V0cHV0KToKLSAgICB0cnk6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoMikKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICBvdXRwdXQuYXBwZW5kKCdhZnRlcicgaW4gc3RyKGUpKQotCi1ub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMuanVtcCA9ICgzLCA2KQotbm9fanVtcF90b29fZmFyX2ZvcndhcmRzLm91dHB1dCA9IFsyLCBUcnVlXQotCi1kZWYgbm9fanVtcF90b29fZmFyX2JhY2t3YXJkcyhvdXRwdXQpOgotICAgIHRyeToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQotICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoJ2JlZm9yZScgaW4gc3RyKGUpKQotCi1ub19qdW1wX3Rvb19mYXJfYmFja3dhcmRzLmp1bXAgPSAoMywgLTEpCi1ub19qdW1wX3Rvb19mYXJfYmFja3dhcmRzLm91dHB1dCA9IFsyLCBUcnVlXQotCi0jIFRlc3QgZWFjaCBraW5kIG9mICdleGNlcHQnIGxpbmUuCi1kZWYgbm9fanVtcF90b19leGNlcHRfMShvdXRwdXQpOgotICAgIHRyeToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQotICAgIGV4Y2VwdDoKLSAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCi0gICAgICAgIG91dHB1dC5hcHBlbmQoJ2V4Y2VwdCcgaW4gc3RyKGUpKQotCi1ub19qdW1wX3RvX2V4Y2VwdF8xLmp1bXAgPSAoMiwgMykKLW5vX2p1bXBfdG9fZXhjZXB0XzEub3V0cHV0ID0gW1RydWVdCi0KLWRlZiBub19qdW1wX3RvX2V4Y2VwdF8yKG91dHB1dCk6Ci0gICAgdHJ5OgotICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQotICAgICAgICBvdXRwdXQuYXBwZW5kKCdleGNlcHQnIGluIHN0cihlKSkKLQotbm9fanVtcF90b19leGNlcHRfMi5qdW1wID0gKDIsIDMpCi1ub19qdW1wX3RvX2V4Y2VwdF8yLm91dHB1dCA9IFtUcnVlXQotCi1kZWYgbm9fanVtcF90b19leGNlcHRfMyhvdXRwdXQpOgotICAgIHRyeToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICBvdXRwdXQuYXBwZW5kKCdleGNlcHQnIGluIHN0cihlKSkKLQotbm9fanVtcF90b19leGNlcHRfMy5qdW1wID0gKDIsIDMpCi1ub19qdW1wX3RvX2V4Y2VwdF8zLm91dHB1dCA9IFtUcnVlXQotCi1kZWYgbm9fanVtcF90b19leGNlcHRfNChvdXRwdXQpOgotICAgIHRyeToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQotICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgUnVudGltZUVycm9yKSwgZToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgnZXhjZXB0JyBpbiBzdHIoZSkpCi0KLW5vX2p1bXBfdG9fZXhjZXB0XzQuanVtcCA9ICgyLCAzKQotbm9fanVtcF90b19leGNlcHRfNC5vdXRwdXQgPSBbVHJ1ZV0KLQotZGVmIG5vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jayhvdXRwdXQpOgotICAgIHRyeToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQotICAgICAgICBmb3IgaSBpbiAxLCAyOgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg0KQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICBvdXRwdXQuYXBwZW5kKCdpbnRvJyBpbiBzdHIoZSkpCi0KLW5vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jay5qdW1wID0gKDIsIDQpCi1ub19qdW1wX2ZvcndhcmRzX2ludG9fYmxvY2sub3V0cHV0ID0gW1RydWVdCi0KLWRlZiBub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrKG91dHB1dCk6Ci0gICAgdHJ5OgotICAgICAgICBmb3IgaSBpbiAxLCAyOgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQotICAgICAgICBvdXRwdXQuYXBwZW5kKDQpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoJ2ludG8nIGluIHN0cihlKSkKLQotbm9fanVtcF9iYWNrd2FyZHNfaW50b19ibG9jay5qdW1wID0gKDQsIDMpCi1ub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrLm91dHB1dCA9IFszLCAzLCBUcnVlXQotCi1kZWYgbm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2sob3V0cHV0KToKLSAgICB0cnk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoMykKLSAgICAgICAgICAgIHggPSAxCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDYpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoJ2ZpbmFsbHknIGluIHN0cihlKSkKLQotbm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2suanVtcCA9ICg0LCA2KQotbm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2sub3V0cHV0ID0gWzMsIDYsIFRydWVdICAjIFRoZSAnZmluYWxseScgc3RpbGwgcnVucwotCi1kZWYgbm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jayhvdXRwdXQpOgotICAgIHRyeToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg1KQotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg2KQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICBvdXRwdXQuYXBwZW5kKCdmaW5hbGx5JyBpbiBzdHIoZSkpCi0KLW5vX2p1bXBfb3V0X29mX2ZpbmFsbHlfYmxvY2suanVtcCA9ICg1LCAxKQotbm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jay5vdXRwdXQgPSBbMywgVHJ1ZV0KLQotIyBUaGlzIHZlcmlmaWVzIHRoZSBsaW5lLW51bWJlcnMtbXVzdC1iZS1pbnRlZ2VycyBydWxlLgotZGVmIG5vX2p1bXBfdG9fbm9uX2ludGVnZXJzKG91dHB1dCk6Ci0gICAgdHJ5OgotICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoJ2ludGVnZXInIGluIHN0cihlKSkKLQotbm9fanVtcF90b19ub25faW50ZWdlcnMuanVtcCA9ICgyLCAiU3BhbSIpCi1ub19qdW1wX3RvX25vbl9pbnRlZ2Vycy5vdXRwdXQgPSBbVHJ1ZV0KLQotIyBUaGlzIHZlcmlmaWVzIHRoYXQgeW91IGNhbid0IHNldCBmX2xpbmVubyB2aWEgX2dldGZyYW1lIG9yIHNpbWlsYXIKLSMgdHJpY2tlcnkuCi1kZWYgbm9fanVtcF93aXRob3V0X3RyYWNlX2Z1bmN0aW9uKCk6Ci0gICAgdHJ5OgotICAgICAgICBwcmV2aW91c19mcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2sKLSAgICAgICAgcHJldmlvdXNfZnJhbWUuZl9saW5lbm8gPSBwcmV2aW91c19mcmFtZS5mX2xpbmVubwotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICAjIFRoaXMgaXMgdGhlIGV4Y2VwdGlvbiB3ZSB3YW50ZWQ7IG1ha2Ugc3VyZSB0aGUgZXJyb3IgbWVzc2FnZQotICAgICAgICAjIHRhbGtzIGFib3V0IHRyYWNlIGZ1bmN0aW9ucy4KLSAgICAgICAgaWYgJ3RyYWNlJyBub3QgaW4gc3RyKGUpOgotICAgICAgICAgICAgcmFpc2UKLSAgICBlbHNlOgotICAgICAgICAjIFNvbWV0aGluZydzIHdyb25nIC0gdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbiB3YXNuJ3QgcmFpc2VkLgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJUcmFjZS1mdW5jdGlvbi1sZXNzIGp1bXAgZmFpbGVkIHRvIGZhaWwiCi0KLQotY2xhc3MgSnVtcFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgY29tcGFyZV9qdW1wX291dHB1dChzZWxmLCBleHBlY3RlZCwgcmVjZWl2ZWQpOgotICAgICAgICBpZiByZWNlaXZlZCAhPSBleHBlY3RlZDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCggIk91dHB1dHMgZG9uJ3QgbWF0Y2g6XG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkOiAiICsgcmVwcihleHBlY3RlZCkgKyAiXG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgIlJlY2VpdmVkOiAiICsgcmVwcihyZWNlaXZlZCkpCi0KLSAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZnVuYyk6Ci0gICAgICAgIHRyYWNlciA9IEp1bXBUcmFjZXIoZnVuYykKLSAgICAgICAgc3lzLnNldHRyYWNlKHRyYWNlci50cmFjZSkKLSAgICAgICAgb3V0cHV0ID0gW10KLSAgICAgICAgZnVuYyhvdXRwdXQpCi0gICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQotICAgICAgICBzZWxmLmNvbXBhcmVfanVtcF9vdXRwdXQoZnVuYy5vdXRwdXQsIG91dHB1dCkKLQotICAgIGRlZiB0ZXN0XzAxX2p1bXBfc2ltcGxlX2ZvcndhcmRzKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfc2ltcGxlX2ZvcndhcmRzKQotICAgIGRlZiB0ZXN0XzAyX2p1bXBfc2ltcGxlX2JhY2t3YXJkcyhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX3NpbXBsZV9iYWNrd2FyZHMpCi0gICAgZGVmIHRlc3RfMDNfanVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMpCi0gICAgZGVmIHRlc3RfMDRfanVtcF9vdXRfb2ZfYmxvY2tfYmFja3dhcmRzKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcykKLSAgICBkZWYgdGVzdF8wNV9qdW1wX3RvX2NvZGVsZXNzX2xpbmUoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF90b19jb2RlbGVzc19saW5lKQotICAgIGRlZiB0ZXN0XzA2X2p1bXBfdG9fc2FtZV9saW5lKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfdG9fc2FtZV9saW5lKQotICAgIGRlZiB0ZXN0XzA3X2p1bXBfaW5fbmVzdGVkX2ZpbmFsbHkoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9pbl9uZXN0ZWRfZmluYWxseSkKLSAgICBkZWYgdGVzdF8wOF9ub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b29fZmFyX2ZvcndhcmRzKQotICAgIGRlZiB0ZXN0XzA5X25vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b29fZmFyX2JhY2t3YXJkcykKLSAgICBkZWYgdGVzdF8xMF9ub19qdW1wX3RvX2V4Y2VwdF8xKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fZXhjZXB0XzEpCi0gICAgZGVmIHRlc3RfMTFfbm9fanVtcF90b19leGNlcHRfMihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3RvX2V4Y2VwdF8yKQotICAgIGRlZiB0ZXN0XzEyX25vX2p1bXBfdG9fZXhjZXB0XzMoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b19leGNlcHRfMykKLSAgICBkZWYgdGVzdF8xM19ub19qdW1wX3RvX2V4Y2VwdF80KHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fZXhjZXB0XzQpCi0gICAgZGVmIHRlc3RfMTRfbm9fanVtcF9mb3J3YXJkc19pbnRvX2Jsb2NrKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jaykKLSAgICBkZWYgdGVzdF8xNV9ub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfYmFja3dhcmRzX2ludG9fYmxvY2spCi0gICAgZGVmIHRlc3RfMTZfbm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2soc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2spCi0gICAgZGVmIHRlc3RfMTdfbm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jayhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX291dF9vZl9maW5hbGx5X2Jsb2NrKQotICAgIGRlZiB0ZXN0XzE4X25vX2p1bXBfdG9fbm9uX2ludGVnZXJzKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fbm9uX2ludGVnZXJzKQotICAgIGRlZiB0ZXN0XzE5X25vX2p1bXBfd2l0aG91dF90cmFjZV9mdW5jdGlvbihzZWxmKToKLSAgICAgICAgbm9fanVtcF93aXRob3V0X3RyYWNlX2Z1bmN0aW9uKCkKLQotICAgIGRlZiB0ZXN0XzIwX2xhcmdlX2Z1bmN0aW9uKHNlbGYpOgotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYygiIiJkZWYgZihvdXRwdXQpOiAgICAgICAgIyBsaW5lIDAKLSAgICAgICAgICAgIHggPSAwICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDEKLSAgICAgICAgICAgIHkgPSAxICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDIKLSAgICAgICAgICAgICcnJyAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDMKLSAgICAgICAgICAgICVzICAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lcyA0LTEwMDQKLSAgICAgICAgICAgICcnJyAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDEwMDUKLSAgICAgICAgICAgIHggKz0gMSAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDEwMDYKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoeCkgICAgICAgICAgIyBsaW5lIDEwMDcKLSAgICAgICAgICAgIHJldHVybiIiIiAlICgnXG4nICogMTAwMCwpLCBkKQotICAgICAgICBmID0gZFsnZiddCisgICAgZGVmIHRlc3RfaXNzdWU5OTM2KHNlbGYpOgorICAgICAgICB0cmFjZXIgPSB0cmFjZS5UcmFjZSh0cmFjZT0wLCBjb3VudD0xKQorICAgICAgICBtb2RuYW1lID0gJ3Rlc3QudHJhY2VkbW9kdWxlcy50ZXN0bW9kJworICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBtb2R1bGUgaXMgZXhlY3V0ZWQgaW4gaW1wb3J0CisgICAgICAgIGlmIG1vZG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kbmFtZV0KKyAgICAgICAgY21kID0gKCJpbXBvcnQgdGVzdC50cmFjZWRtb2R1bGVzLnRlc3Rtb2QgYXMgdDsiCisgICAgICAgICAgICAgICAidC5mdW5jKDApOyB0LmZ1bmMyKCk7IikKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzZWxmLl9jb3ZlcmFnZSh0cmFjZXIsIGNtZCkKKyAgICAgICAgc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgY292ZXJhZ2UgPSB7fQorICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXQ6CisgICAgICAgICAgICBsaW5lcywgY292LCBtb2R1bGUgPSBsaW5lLnNwbGl0KClbOjNdCisgICAgICAgICAgICBjb3ZlcmFnZVttb2R1bGVdID0gKGludChsaW5lcyksIGludChjb3ZbOi0xXSkpCisgICAgICAgICMgWFhYIFRoaXMgaXMgbmVlZGVkIHRvIHJ1biByZWdydGVzdC5weSBhcyBhIHNjcmlwdAorICAgICAgICBtb2RuYW1lID0gdHJhY2UuZnVsbG1vZG5hbWUoc3lzLm1vZHVsZXNbbW9kbmFtZV0uX19maWxlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kbmFtZSwgY292ZXJhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY292ZXJhZ2VbbW9kbmFtZV0sICg1LCAxMDApKQogCi0gICAgICAgIGYuanVtcCA9ICgyLCAxMDA3KQotICAgICAgICBmLm91dHB1dCA9IFswXQotICAgICAgICBzZWxmLnJ1bl90ZXN0KGYpCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICBUcmFjZVRlc3RDYXNlLAotICAgICAgICBSYWlzaW5nVHJhY2VGdW5jVGVzdENhc2UsCi0gICAgICAgIEp1bXBUZXN0Q2FzZQotICAgICkKKyAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKaW5kZXggOGI5Mzg0NC4uODA3NmJlOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKQEAgLTksMTYgKzksNiBAQAogCiBpbXBvcnQgdHJhY2ViYWNrCiAKLXRyeToKLSAgICByYWlzZSBLZXlFcnJvcgotZXhjZXB0IEtleUVycm9yOgotICAgIHR5cGVfLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQotICAgIGZpbGVfID0gU3RyaW5nSU8oKQotICAgIHRyYWNlYmFja19wcmludCh0YiwgZmlsZV8pCi0gICAgZXhhbXBsZV90cmFjZWJhY2sgPSBmaWxlXy5nZXR2YWx1ZSgpCi1lbHNlOgotICAgIHJhaXNlIEVycm9yKCJ1bmFibGUgdG8gY3JlYXRlIHRlc3QgdHJhY2ViYWNrIHN0cmluZyIpCi0KIAogY2xhc3MgVHJhY2ViYWNrQ2FzZXModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgRm9yIG5vdywgYSB2ZXJ5IG1pbmltYWwgc2V0IG9mIHRlc3RzLiAgSSB3YW50IHRvIGJlIHN1cmUgdGhhdApAQCAtNDgsMTYgKzM4LDE2IEBACiAgICAgZGVmIHRlc3RfY2FyZXQoc2VsZik6CiAgICAgICAgIGVyciA9IHNlbGYuZ2V0X2V4Y2VwdGlvbl9mb3JtYXQoc2VsZi5zeW50YXhfZXJyb3Jfd2l0aF9jYXJldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW50YXhFcnJvcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihlcnIpID09IDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhlcnJbMV0uc3RyaXAoKSA9PSAicmV0dXJuIHghIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJeIiBpbiBlcnJbMl0pICMgdGhpcmQgbGluZSBoYXMgY2FyZXQKLSAgICAgICAgc2VsZi5hc3NlcnRfKGVyclsxXS5maW5kKCIhIikgPT0gZXJyWzJdLmZpbmQoIl4iKSkgIyBpbiB0aGUgcmlnaHQgcGxhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihlcnIpID09IDQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uc3RyaXAoKSA9PSAicmV0dXJuIHghIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiXiIsIGVyclsyXSkgIyB0aGlyZCBsaW5lIGhhcyBjYXJldAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzFdLmZpbmQoIiEiKSA9PSBlcnJbMl0uZmluZCgiXiIpKSAjIGluIHRoZSByaWdodCBwbGFjZQogCiAgICAgICAgIGVyciA9IHNlbGYuZ2V0X2V4Y2VwdGlvbl9mb3JtYXQoc2VsZi5zeW50YXhfZXJyb3Jfd2l0aF9jYXJldF8yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bnRheEVycm9yKQotICAgICAgICBzZWxmLmFzc2VydF8oIl4iIGluIGVyclsyXSkgIyB0aGlyZCBsaW5lIGhhcyBjYXJldAotICAgICAgICBzZWxmLmFzc2VydF8oZXJyWzJdLmNvdW50KCdcbicpID09IDEpICMgYW5kIG5vIGFkZGl0aW9uYWwgbmV3bGluZQotICAgICAgICBzZWxmLmFzc2VydF8oZXJyWzFdLmZpbmQoIisiKSA9PSBlcnJbMl0uZmluZCgiXiIpKSAjIGluIHRoZSByaWdodCBwbGFjZQorICAgICAgICBzZWxmLmFzc2VydEluKCJeIiwgZXJyWzJdKSAjIHRoaXJkIGxpbmUgaGFzIGNhcmV0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMl0uY291bnQoJ1xuJykgPT0gMSkgIyBhbmQgbm8gYWRkaXRpb25hbCBuZXdsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uZmluZCgiKyIpID09IGVyclsyXS5maW5kKCJeIikpICMgaW4gdGhlIHJpZ2h0IHBsYWNlCiAKICAgICBkZWYgdGVzdF9ub2NhcmV0KHNlbGYpOgogICAgICAgICBpZiBpc19qeXRob246CkBAIC02NSwxOSArNTUsMTkgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlcnIgPSBzZWxmLmdldF9leGNlcHRpb25fZm9ybWF0KHNlbGYuc3ludGF4X2Vycm9yX3dpdGhvdXRfY2FyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4RXJyb3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZXJyKSA9PSAzKQotICAgICAgICBzZWxmLmFzc2VydF8oZXJyWzFdLnN0cmlwKCkgPT0gIlt4IGZvciB4IGluIHhdID0geCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZXJyKSA9PSAzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzFdLnN0cmlwKCkgPT0gIlt4IGZvciB4IGluIHhdID0geCIpCiAKICAgICBkZWYgdGVzdF9iYWRfaW5kZW50YXRpb24oc2VsZik6CiAgICAgICAgIGVyciA9IHNlbGYuZ2V0X2V4Y2VwdGlvbl9mb3JtYXQoc2VsZi5zeW50YXhfZXJyb3JfYmFkX2luZGVudGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGVudGF0aW9uRXJyb3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZXJyKSA9PSA0KQotICAgICAgICBzZWxmLmFzc2VydF8oZXJyWzFdLnN0cmlwKCkgPT0gInByaW50IDIiKQotICAgICAgICBzZWxmLmFzc2VydF8oIl4iIGluIGVyclsyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGVyclsxXS5maW5kKCIyIikgPT0gZXJyWzJdLmZpbmQoIl4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihlcnIpID09IDQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uc3RyaXAoKSA9PSAicHJpbnQgMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl4iLCBlcnJbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uZmluZCgiMiIpID09IGVyclsyXS5maW5kKCJeIikpCiAKICAgICBkZWYgdGVzdF9idWc3Mzc0NzMoc2VsZik6Ci0gICAgICAgIGltcG9ydCBzeXMsIG9zLCB0ZW1wZmlsZSwgdGltZQorICAgICAgICBpbXBvcnQgb3MsIHRlbXBmaWxlLCB0aW1lCiAKICAgICAgICAgc2F2ZWRwYXRoID0gc3lzLnBhdGhbOl0KICAgICAgICAgdGVzdGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQpAQCAtMTE0LDcgKzEwNCw3IEBACiAgICAgICAgICAgICAgICAgdGVzdF9idWc3Mzc0NzMudGVzdCgpCiAgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKICAgICAgICAgICAgICAgICBzcmMgPSB0cmFjZWJhY2suZXh0cmFjdF90YihzeXMuZXhjX3RyYWNlYmFjaylbLTFdWy0xXQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNyYywgJ3JhaXNlIE5vdEltcGxlbWVudGVkRXJyb3InKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjLCAncmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcicpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzeXMucGF0aFs6XSA9IHNhdmVkcGF0aAogICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcih0ZXN0ZGlyKToKQEAgLTE4MSwxNCArMTcxLDI5IEBACiAKIGNsYXNzIFRyYWNlYmFja0Zvcm1hdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiB0ZXN0X3RyYWNlYmFja19pbmRlbnRhdGlvbihzZWxmKToKKyAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignYmxhaCcpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHR5cGVfLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgdHJhY2ViYWNrX2ZtdCA9ICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF90Yih0YikpCisgICAgICAgICAgICBmaWxlXyA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFja19wcmludCh0YiwgZmlsZV8pCisgICAgICAgICAgICBweXRob25fZm10ICA9IGZpbGVfLmdldHZhbHVlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEVycm9yKCJ1bmFibGUgdG8gY3JlYXRlIHRlc3QgdHJhY2ViYWNrIHN0cmluZyIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBQeXRob24gYW5kIHRoZSB0cmFjZWJhY2sgbW9kdWxlIGZvcm1hdCB0aGUgc2FtZSB0aGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFja19mbXQsIHB5dGhvbl9mbXQpCisKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgdHJhY2ViYWNrIGlzIHByb3Blcmx5IGluZGVudGVkLgotICAgICAgICB0Yl9saW5lcyA9IGV4YW1wbGVfdHJhY2ViYWNrLnNwbGl0bGluZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4odGJfbGluZXMpLCAzKQorICAgICAgICB0Yl9saW5lcyA9IHB5dGhvbl9mbXQuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRiX2xpbmVzKSwgMykKICAgICAgICAgYmFubmVyLCBsb2NhdGlvbiwgc291cmNlX2xpbmUgPSB0Yl9saW5lcwotICAgICAgICBzZWxmLmFzc2VydF8oYmFubmVyLnN0YXJ0c3dpdGgoJ1RyYWNlYmFjaycpKQotICAgICAgICBzZWxmLmFzc2VydF8obG9jYXRpb24uc3RhcnRzd2l0aCgnICBGaWxlJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhzb3VyY2VfbGluZS5zdGFydHN3aXRoKCcgICAgcmFpc2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhbm5lci5zdGFydHN3aXRoKCdUcmFjZWJhY2snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2F0aW9uLnN0YXJ0c3dpdGgoJyAgRmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc291cmNlX2xpbmUuc3RhcnRzd2l0aCgnICAgIHJhaXNlJykpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90cmFuc2Zvcm1lci5weSBiL0xpYi90ZXN0L3Rlc3RfdHJhbnNmb3JtZXIucHkKaW5kZXggNjU5MDkzNy4uMTg5MWFjNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90cmFuc2Zvcm1lci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RyYW5zZm9ybWVyLnB5CkBAIC0xNywxMSArMTcsMTEgQEAKIAogICAgICAgICBmb3IgcyBpbiBzbmlwcGV0czoKICAgICAgICAgICAgIGEgPSB0cmFuc2Zvcm1lci5wYXJzZShzKQotICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYSwgYXN0Lk1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhLCBhc3QuTW9kdWxlKQogICAgICAgICAgICAgY2hpbGQxID0gYS5nZXRDaGlsZE5vZGVzKClbMF0KLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNoaWxkMSwgYXN0LlN0bXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2hpbGQxLCBhc3QuU3RtdCkKICAgICAgICAgICAgIGNoaWxkMiA9IGNoaWxkMS5nZXRDaGlsZE5vZGVzKClbMF0KLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNoaWxkMiwgYXN0LkFzc2lnbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjaGlsZDIsIGFzdC5Bc3NpZ24pCiAKICAgICAgICAgICAgICMgVGhpcyBhY3R1YWxseSB0ZXN0cyB0aGUgY29tcGlsZXIsIGJ1dCBpdCdzIGEgd2F5IHRvIGFzc3VyZSB0aGUgYXN0CiAgICAgICAgICAgICAjIGlzIGNvcnJlY3QKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHRrX2d1aW9ubHkucHkgYi9MaWIvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYTU3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5CkBAIC0wLDAgKzEsNDAgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIFNraXAgdGhpcyB0ZXN0IGlmIF90a2ludGVyIHdhc24ndCBidWlsdC4KK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGtpbnRlcicpCisKK2ltcG9ydCB0dGsKK2Zyb20gX3RraW50ZXIgaW1wb3J0IFRjbEVycm9yCisKK3RyeToKKyAgICB0dGsuQnV0dG9uKCkKK2V4Y2VwdCBUY2xFcnJvciwgbXNnOgorICAgICMgYXNzdW1pbmcgdHRrIGlzIG5vdCBhdmFpbGFibGUKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgidHRrIG5vdCBhdmFpbGFibGU6ICVzIiAlIG1zZykKKwordGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKK2xpYl90a190ZXN0ID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbih0aGlzX2Rpciwgb3MucGF0aC5wYXJkaXIsCisgICAgJ2xpYi10aycsICd0ZXN0JykpCisKK3dpdGggdGVzdF9zdXBwb3J0LkRpcnNPblN5c1BhdGgobGliX3RrX3Rlc3QpOgorICAgIGltcG9ydCBydW50a3Rlc3RzCisKK2RlZiB0ZXN0X21haW4oZW5hYmxlX2d1aT1GYWxzZSk6CisgICAgaWYgZW5hYmxlX2d1aToKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWydndWknXQorICAgICAgICBlbGlmICdndWknIG5vdCBpbiB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlczoKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzLmFwcGVuZCgnZ3VpJykKKworICAgIHdpdGggdGVzdF9zdXBwb3J0LkRpcnNPblN5c1BhdGgobGliX3RrX3Rlc3QpOgorICAgICAgICBmcm9tIHRlc3RfdHRrLnN1cHBvcnQgaW1wb3J0IGdldF90a19yb290CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICAgICAgKnJ1bnRrdGVzdHMuZ2V0X3Rlc3RzKHRleHQ9RmFsc2UsIHBhY2thZ2VzPVsndGVzdF90dGsnXSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBnZXRfdGtfcm9vdCgpLmRlc3Ryb3koKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbihlbmFibGVfZ3VpPVRydWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R0a190ZXh0b25seS5weSBiL0xpYi90ZXN0L3Rlc3RfdHRrX3RleHRvbmx5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTIwNDNkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90dGtfdGV4dG9ubHkucHkKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0IG9zCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIFNraXAgdGhpcyB0ZXN0IGlmIF90a2ludGVyIGRvZXMgbm90IGV4aXN0LgordGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKKwordGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKK2xpYl90a190ZXN0ID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbih0aGlzX2RpciwgJy4uJywgJ2xpYi10aycsICd0ZXN0JykpCisKK3dpdGggdGVzdF9zdXBwb3J0LkRpcnNPblN5c1BhdGgobGliX3RrX3Rlc3QpOgorICAgIGltcG9ydCBydW50a3Rlc3RzCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5EaXJzT25TeXNQYXRoKGxpYl90a190ZXN0KToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgICpydW50a3Rlc3RzLmdldF90ZXN0cyhndWk9RmFsc2UsIHBhY2thZ2VzPVsndGVzdF90dGsnXSkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHVwbGUucHkgYi9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5CmluZGV4IDE1YmMyOTUuLjBjMzA4ZjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHVwbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90dXBsZS5weQpAQCAtMSwxNSArMSwxNyBAQAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHNlcV90ZXN0cwogCitpbXBvcnQgZ2MKKwogY2xhc3MgVHVwbGVUZXN0KHNlcV90ZXN0cy5Db21tb25UZXN0KToKICAgICB0eXBlMnRlc3QgPSB0dXBsZQogCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3JzKHNlbGYpOgotICAgICAgICBzdXBlcihUdXBsZVRlc3QsIHNlbGYpLnRlc3RfbGVuKCkKKyAgICAgICAgc3VwZXIoVHVwbGVUZXN0LCBzZWxmKS50ZXN0X2NvbnN0cnVjdG9ycygpCiAgICAgICAgICMgY2FsbGluZyBidWlsdC1pbiB0eXBlcyB3aXRob3V0IGFyZ3VtZW50IG11c3QgcmV0dXJuIGVtcHR5CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoKSwgKCkpCiAgICAgICAgIHQwXzMgPSAoMCwgMSwgMiwgMykKICAgICAgICAgdDBfM19iaXMgPSB0dXBsZSh0MF8zKQotICAgICAgICBzZWxmLmFzc2VydF8odDBfMyBpcyB0MF8zX2JpcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQwXzMgaXMgdDBfM19iaXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoW10pLCAoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShbMCwgMSwgMiwgM10pLCAoMCwgMSwgMiwgMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoJycpLCAoKSkKQEAgLTE3LDggKzE5LDggQEAKIAogICAgIGRlZiB0ZXN0X3RydXRoKHNlbGYpOgogICAgICAgICBzdXBlcihUdXBsZVRlc3QsIHNlbGYpLnRlc3RfdHJ1dGgoKQotICAgICAgICBzZWxmLmFzc2VydF8obm90ICgpKQotICAgICAgICBzZWxmLmFzc2VydF8oKDQyLCApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90ICgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKDQyLCApKQogCiAgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgogICAgICAgICBzdXBlcihUdXBsZVRlc3QsIHNlbGYpLnRlc3RfbGVuKCkKQEAgLTMxLDE0ICszMywxNCBAQAogICAgICAgICB1ID0gKDAsIDEpCiAgICAgICAgIHUyID0gdQogICAgICAgICB1ICs9ICgyLCAzKQotICAgICAgICBzZWxmLmFzc2VydF8odSBpcyBub3QgdTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1IGlzIG5vdCB1MikKIAogICAgIGRlZiB0ZXN0X2ltdWwoc2VsZik6CiAgICAgICAgIHN1cGVyKFR1cGxlVGVzdCwgc2VsZikudGVzdF9pbXVsKCkKICAgICAgICAgdSA9ICgwLCAxKQogICAgICAgICB1MiA9IHUKICAgICAgICAgdSAqPSAzCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1IGlzIG5vdCB1MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUgaXMgbm90IHUyKQogCiAgICAgZGVmIHRlc3RfdHVwbGVyZXNpemVidWcoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBhIHNwZWNpZmljIGJ1ZyBpbiBfUHlUdXBsZV9SZXNpemUoKSBpcyBzcXVhc2hlZC4KQEAgLTY5LDcgKzcxLDcgQEAKICAgICAgICAgaW5wcyA9IGJhc2UgKyBbKGksIGopIGZvciBpIGluIGJhc2UgZm9yIGogaW4geHBdICsgXAogICAgICAgICAgICAgICAgICAgICAgWyhpLCBqKSBmb3IgaSBpbiB4cCBmb3IgaiBpbiBiYXNlXSArIHhwICsgemlwKGJhc2UpCiAgICAgICAgIGNvbGxpc2lvbnMgPSBsZW4oaW5wcykgLSBsZW4oc2V0KG1hcChoYXNoLCBpbnBzKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb2xsaXNpb25zIDw9IDE1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sbGlzaW9ucyA8PSAxNSkKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIGwwID0gdHVwbGUoKQpAQCAtODIsNiArODQsNzYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEwKSwgIigpIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEyKSwgIigwLCAxLCAyKSIpCiAKKyAgICBkZWYgX25vdF90cmFja2VkKHNlbGYsIHQpOgorICAgICAgICAjIE5lc3RlZCB0dXBsZXMgY2FuIHRha2Ugc2V2ZXJhbCBjb2xsZWN0aW9ucyB0byB1bnRyYWNrCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHQpLCB0KQorCisgICAgZGVmIF90cmFja2VkKHNlbGYsIHQpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZCh0KSwgdCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZCh0KSwgdCkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfbGl0ZXJhbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBHQy1vcHRpbWl6YXRpb24gb2YgdHVwbGUgbGl0ZXJhbHMKKyAgICAgICAgeCwgeSwgeiA9IDEuNSwgImEiLCBbXQorCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKCgpKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgoMSwpKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgoMSwgMikpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKCgxLCAyLCAiYSIpKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgoMSwgMiwgKE5vbmUsIFRydWUsIEZhbHNlLCAoKSksIGludCkpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKChvYmplY3QoKSwpKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgoKDEsIHgpLCB5LCAoMiwgMykpKQorCisgICAgICAgICMgVHVwbGVzIHdpdGggbXV0YWJsZSBlbGVtZW50cyBhcmUgYWx3YXlzIHRyYWNrZWQsIGV2ZW4gaWYgdGhvc2UKKyAgICAgICAgIyBlbGVtZW50cyBhcmUgbm90IHRyYWNrZWQgcmlnaHQgbm93LgorICAgICAgICBzZWxmLl90cmFja2VkKChbXSwpKQorICAgICAgICBzZWxmLl90cmFja2VkKChbMV0sKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCgoe30sKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCgoc2V0KCksKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCgoeCwgeSwgeikpCisKKyAgICBkZWYgY2hlY2tfdHJhY2tfZHluYW1pYyhzZWxmLCB0cCwgYWx3YXlzX3RyYWNrKToKKyAgICAgICAgeCwgeSwgeiA9IDEuNSwgImEiLCBbXQorCisgICAgICAgIGNoZWNrID0gc2VsZi5fdHJhY2tlZCBpZiBhbHdheXNfdHJhY2sgZWxzZSBzZWxmLl9ub3RfdHJhY2tlZAorICAgICAgICBjaGVjayh0cCgpKQorICAgICAgICBjaGVjayh0cChbXSkpCisgICAgICAgIGNoZWNrKHRwKHNldCgpKSkKKyAgICAgICAgY2hlY2sodHAoWzEsIHgsIHldKSkKKyAgICAgICAgY2hlY2sodHAob2JqIGZvciBvYmogaW4gWzEsIHgsIHldKSkKKyAgICAgICAgY2hlY2sodHAoc2V0KFsxLCB4LCB5XSkpKQorICAgICAgICBjaGVjayh0cCh0dXBsZShbb2JqXSkgZm9yIG9iaiBpbiBbMSwgeCwgeV0pKQorICAgICAgICBjaGVjayh0dXBsZSh0cChbb2JqXSkgZm9yIG9iaiBpbiBbMSwgeCwgeV0pKQorCisgICAgICAgIHNlbGYuX3RyYWNrZWQodHAoW3pdKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh0cChbW3gsIHldXSkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQodHAoW3t4OiB5fV0pKQorICAgICAgICBzZWxmLl90cmFja2VkKHRwKG9iaiBmb3Igb2JqIGluIFt4LCB5LCB6XSkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQodHAodHVwbGUoW29ial0pIGZvciBvYmogaW4gW3gsIHksIHpdKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh0dXBsZSh0cChbb2JqXSkgZm9yIG9iaiBpbiBbeCwgeSwgel0pKQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF90cmFja19keW5hbWljKHNlbGYpOgorICAgICAgICAjIFRlc3QgR0Mtb3B0aW1pemF0aW9uIG9mIGR5bmFtaWNhbGx5IGNvbnN0cnVjdGVkIHR1cGxlcy4KKyAgICAgICAgc2VsZi5jaGVja190cmFja19keW5hbWljKHR1cGxlLCBGYWxzZSkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfc3VidHlwZXMoc2VsZik6CisgICAgICAgICMgVHVwbGUgc3VidHlwZXMgbXVzdCBhbHdheXMgYmUgdHJhY2tlZAorICAgICAgICBjbGFzcyBNeVR1cGxlKHR1cGxlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5jaGVja190cmFja19keW5hbWljKE15VHVwbGUsIFRydWUpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2J1Zzc0NjYoc2VsZik6CisgICAgICAgICMgVHJ5aW5nIHRvIHVudHJhY2sgYW4gdW5maW5pc2hlZCB0dXBsZSBjb3VsZCBjcmFzaCBQeXRob24KKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQodHVwbGUoZ2MuY29sbGVjdCgpIGZvciBpIGluIHJhbmdlKDEwMSkpKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUdXBsZVRlc3QpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHlwZWNoZWNrcy5weSBiL0xpYi90ZXN0L3Rlc3RfdHlwZWNoZWNrcy5weQppbmRleCAzMmFhNjYwLi44M2YwMTE0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3R5cGVjaGVja3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90eXBlY2hlY2tzLnB5CkBAIC0yOSwxMCArMjksNiBAQAogICAgIHBhc3MKIAogCi1jbGFzcyBFdmlsOgotICAgIGRlZiBfX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0KTogcmV0dXJuIEZhbHNlCi0KLQogY2xhc3MgVHlwZUNoZWNrc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RJc1N1YmNsYXNzSW50ZXJuYWwoc2VsZik6CkBAIC03NSwxMSArNzEsMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKDQyLCBTdWJJbnQpLCBGYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKDQyLCAoU3ViSW50LCkpLCBGYWxzZSkKIAotICAgIGRlZiB0ZXN0SW5maW5pdGVSZWN1cnNpb25DYXVnaHRQcm9wZXJseShzZWxmKToKLSAgICAgICAgZSA9IEV2aWwoKQotICAgICAgICAjIFRoaXMgaW52b2tlcyBpc2luc3RhbmNlKCkgcmVjdXJzaXZlbHksIHVudGlsIHRoZSBzdGFjayBpcyBleGhhdXN0ZWQuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgaXNpbnN0YW5jZSwgZSwgRXZpbCkKLSAgICAgICAgIyBYWFggSG93IHRvIGNoZWNrIHRoZSBzYW1lIHNpdHVhdGlvbiBmb3IgaXNzdWJjbGFzcygpPworICAgIGRlZiB0ZXN0X29sZHN0eWxlKHNlbGYpOgorICAgICAgICAjIFRoZXNlIHNob3VsZCBqdXN0IGJlIGlnbm9yZWQuCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBkZWYgX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGRlZiBfX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGNsYXNzIFN1YihYKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoMywgWCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKFgoKSwgWCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKGludCwgWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKFN1YiwgWCkpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90eXBlcy5weSBiL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKaW5kZXggZGVlMWNhNy4uNjBmNmQyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90eXBlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CkBAIC0xLDcgKzEsNyBAQAogIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCA2LCBidWlsdC1pbiB0eXBlcwogCiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGhhdmVfdW5pY29kZSwgcnVuX3dpdGhfbG9jYWxlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2hlY2tfcHkza193YXJuaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcHkza193YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgbG9jYWxlCkBAIC0yMSw3ICsyMSw2IEBACiAgICAgICAgIGlmIG5vdCB7J3gnOiAxfTogc2VsZi5mYWlsKCd7XCd4XCc6IDF9IGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCiAgICAgICAgIGRlZiBmKCk6IHBhc3MKICAgICAgICAgY2xhc3MgQzogcGFzcwotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIHggPSBDKCkKICAgICAgICAgaWYgbm90IGY6IHNlbGYuZmFpbCgnZiBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQogICAgICAgICBpZiBub3QgQzogc2VsZi5mYWlsKCdDIGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCkBAIC0xMTQsNiArMTEzLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLjVlLTEwMS5fX2Zvcm1hdF9fKCdlJyksICcxLjUwMDAwMGUtMTAxJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWUnICUgMS41ZS0xMDEsICcxLjUwMDAwMGUtMTAxJykKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclZycgJSAxLjAsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJSNnJyAlIDEuMCwgJzEuMDAwMDAnKQorCiAgICAgZGVmIHRlc3Rfbm9ybWFsX2ludGVnZXJzKHNlbGYpOgogICAgICAgICAjIEVuc3VyZSB0aGUgZmlyc3QgMjU2IGludGVnZXJzIGFyZSBzaGFyZWQKICAgICAgICAgYSA9IDI1NgpAQCAtNDAzLDYgKzQwNSw5IEBACiAgICAgICAgIHRlc3QoMTIzNDU2LCAiIzAxMlgiLCAnMFgwMDAwMDFFMjQwJykKICAgICAgICAgdGVzdCgtMTIzNDU2LCAiIzAxMlgiLCAnLTBYMDAwMDFFMjQwJykKIAorICAgICAgICAjIGlzc3VlIDU3ODIsIGNvbW1hcyB3aXRoIG5vIHNwZWNpZmllciB0eXBlCisgICAgICAgIHRlc3QoMTIzNCwgJzAxMCwnLCAnMDAsMDAxLDIzNCcpCisKICAgICAgICAgIyBtYWtlIHN1cmUgdGhlc2UgYXJlIGVycm9ycwogCiAgICAgICAgICMgcHJlY2lzaW9uIGRpc2FsbG93ZWQKQEAgLTQxMyw2ICs0MTgsOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIDMgLl9fZm9ybWF0X18sIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgMyAuX19mb3JtYXRfXywgMCkKIAorICAgICAgICAjIGNhbid0IGhhdmUgJywnIHdpdGggJ2MnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIDMgLl9fZm9ybWF0X18sICIsYyIpCisKICAgICAgICAgIyBlbnN1cmUgdGhhdCBvbmx5IGludCBhbmQgZmxvYXQgdHlwZSBzcGVjaWZpZXJzIHdvcmsKICAgICAgICAgZm9yIGZvcm1hdF9zcGVjIGluIChbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnYScpLCBvcmQoJ3onKSsxKV0gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdBJyksIG9yZCgnWicpKzEpXSk6CkBAIC00MjgsNiArNDM2LDE3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KHZhbHVlKS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSkKIAorICAgICAgICAjIElzc3VlIDY5MDIKKyAgICAgICAgdGVzdCgxMjM0NTYsICIwPDIwIiwgJzEyMzQ1NjAwMDAwMDAwMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIxPDIwIiwgJzEyMzQ1NjExMTExMTExMTExMTExJykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIqPDIwIiwgJzEyMzQ1NioqKioqKioqKioqKioqJykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIwPjIwIiwgJzAwMDAwMDAwMDAwMDAwMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIxPjIwIiwgJzExMTExMTExMTExMTExMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIqPjIwIiwgJyoqKioqKioqKioqKioqMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIwPTIwIiwgJzAwMDAwMDAwMDAwMDAwMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIxPTIwIiwgJzExMTExMTExMTExMTExMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIqPTIwIiwgJyoqKioqKioqKioqKioqMTIzNDU2JykKKwogICAgIGRlZiB0ZXN0X2xvbmdfX2Zvcm1hdF9fKHNlbGYpOgogICAgICAgICBkZWYgdGVzdChpLCBmb3JtYXRfc3BlYywgcmVzdWx0KToKICAgICAgICAgICAgICMgbWFrZSBzdXJlIHdlJ3JlIG5vdCBhY2NpZGVudGFsbHkgY2hlY2tpbmcgaW50cwpAQCAtNTI1LDYgKzU0NCwxNiBAQAogICAgICAgICAgICAgZm9yIHZhbHVlIGluIFswTCwgMUwsIC0xTCwgMTAwTCwgLTEwMEwsIDEyMzQ1Njc4OTBMLCAtMTIzNDU2Nzg5MExdOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUuX19mb3JtYXRfXyhmb3JtYXRfc3BlYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCh2YWx1ZSkuX19mb3JtYXRfXyhmb3JtYXRfc3BlYykpCisgICAgICAgICMgSXNzdWUgNjkwMgorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIwPDIwIiwgJzEyMzQ1NjAwMDAwMDAwMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiMTwyMCIsICcxMjM0NTYxMTExMTExMTExMTExMScpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIio8MjAiLCAnMTIzNDU2KioqKioqKioqKioqKionKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIwPjIwIiwgJzAwMDAwMDAwMDAwMDAwMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiMT4yMCIsICcxMTExMTExMTExMTExMTEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIio+MjAiLCAnKioqKioqKioqKioqKioxMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIwPTIwIiwgJzAwMDAwMDAwMDAwMDAwMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiMT0yMCIsICcxMTExMTExMTExMTExMTEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIio9MjAiLCAnKioqKioqKioqKioqKioxMjM0NTYnKQogCiAgICAgQHJ1bl93aXRoX2xvY2FsZSgnTENfTlVNRVJJQycsICdlbl9VUy5VVEY4JykKICAgICBkZWYgdGVzdF9mbG9hdF9fZm9ybWF0X19sb2NhbGUoc2VsZik6CkBAIC01OTMsMTAgKzYyMiwyNSBAQAogICAgICAgICB0ZXN0KC0xLjAsICcgZicsICctMS4wMDAwMDAnKQogICAgICAgICB0ZXN0KCAxLjAsICcrZicsICcrMS4wMDAwMDAnKQogICAgICAgICB0ZXN0KC0xLjAsICcrZicsICctMS4wMDAwMDAnKQotICAgICAgICB0ZXN0KDEuMTIzNGU5MCwgJ2YnLCAnMS4xMjM0ZSs5MCcpCi0gICAgICAgIHRlc3QoMS4xMjM0ZTkwLCAnRicsICcxLjEyMzRlKzkwJykKLSAgICAgICAgdGVzdCgxLjEyMzRlMjAwLCAnZicsICcxLjEyMzRlKzIwMCcpCi0gICAgICAgIHRlc3QoMS4xMjM0ZTIwMCwgJ0YnLCAnMS4xMjM0ZSsyMDAnKQorCisgICAgICAgICMgUHl0aG9uIHZlcnNpb25zIDw9IDIuNiBzd2l0Y2hlZCBmcm9tICdmJyB0byAnZycgZm9ybWF0dGluZyBmb3IKKyAgICAgICAgIyB2YWx1ZXMgbGFyZ2VyIHRoYW4gMWU1MC4gIE5vIGxvbmdlci4KKyAgICAgICAgZiA9IDEuMTIzNGU5MAorICAgICAgICBmb3IgZm10IGluICdmJywgJ0YnOgorICAgICAgICAgICAgIyBkb24ndCBkbyBhIGRpcmVjdCBlcXVhbGl0eSBjaGVjaywgc2luY2Ugb24gc29tZQorICAgICAgICAgICAgIyBwbGF0Zm9ybXMgb25seSB0aGUgZmlyc3QgZmV3IGRpZ2l0cyBvZiBkdG9hCisgICAgICAgICAgICAjIHdpbGwgYmUgcmVsaWFibGUKKyAgICAgICAgICAgIHJlc3VsdCA9IGYuX19mb3JtYXRfXyhmbXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCA5OCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy03XSwgJy4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihyZXN1bHRbOjEyXSwgKCcxMTIzNDAwMDAwMDAnLCAnMTEyMzM5OTk5OTk5JykpCisgICAgICAgIGYgPSAxLjEyMzRlMjAwCisgICAgICAgIGZvciBmbXQgaW4gJ2YnLCAnRic6CisgICAgICAgICAgICByZXN1bHQgPSBmLl9fZm9ybWF0X18oZm10KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgMjA4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTddLCAnLicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHJlc3VsdFs6MTJdLCAoJzExMjM0MDAwMDAwMCcsICcxMTIzMzk5OTk5OTknKSkKKwogCiAgICAgICAgIHRlc3QoIDEuMCwgJ2UnLCAnMS4wMDAwMDBlKzAwJykKICAgICAgICAgdGVzdCgtMS4wLCAnZScsICctMS4wMDAwMDBlKzAwJykKQEAgLTYxMCwxMSArNjU0LDQwIEBACiAgICAgICAgICMgYSB0b3RhbHkgZW1wdHkgZm9ybWF0IHNwZWNpZmllciBtZWFucyBzb21ldGhpbmcgZWxzZS4KICAgICAgICAgIyBTbywganVzdCB1c2UgYSBzaWduIGZsYWcKICAgICAgICAgdGVzdCgxZTIwMCwgJytnJywgJysxZSsyMDAnKQotICAgICAgICB0ZXN0KDFlMjAwLCAnKycsICcrMS4wZSsyMDAnKQorICAgICAgICB0ZXN0KDFlMjAwLCAnKycsICcrMWUrMjAwJykKICAgICAgICAgdGVzdCgxLjFlMjAwLCAnK2cnLCAnKzEuMWUrMjAwJykKICAgICAgICAgdGVzdCgxLjFlMjAwLCAnKycsICcrMS4xZSsyMDAnKQogCi0gICAgICAgICMgJSBmb3JtYXR0aW5nCisgICAgICAgIHRlc3QoMS4xZTIwMCwgJytnJywgJysxLjFlKzIwMCcpCisgICAgICAgIHRlc3QoMS4xZTIwMCwgJysnLCAnKzEuMWUrMjAwJykKKworICAgICAgICAjIDAgcGFkZGluZworICAgICAgICB0ZXN0KDEyMzQuLCAnMDEwZicsICcxMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoMTIzNC4sICcwMTFmJywgJzEyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0LiwgJzAxMmYnLCAnMDEyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNC4sICcwMTFmJywgJy0xMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQuLCAnMDEyZicsICctMTIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LiwgJzAxM2YnLCAnLTAxMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQuMTIzNDEyMzQsICcwMTNmJywgJy0wMTIzNC4xMjM0MTInKQorICAgICAgICB0ZXN0KC0xMjM0NTYuMTIzNDEyMzQsICcwMTEuMmYnLCAnLTAxMjM0NTYuMTInKQorCisgICAgICAgICMgaXNzdWUgNTc4MiwgY29tbWFzIHdpdGggbm8gc3BlY2lmaWVyIHR5cGUKKyAgICAgICAgdGVzdCgxLjIsICcwMTAsLjInLCAnMCwwMDAsMDAxLjInKQorCisgICAgICAgICMgMCBwYWRkaW5nIHdpdGggY29tbWFzCisgICAgICAgIHRlc3QoMTIzNC4sICcwMTEsZicsICcxLDIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KDEyMzQuLCAnMDEyLGYnLCAnMSwyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0LiwgJzAxMyxmJywgJzAxLDIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LiwgJzAxMixmJywgJy0xLDIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LiwgJzAxMyxmJywgJy0xLDIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LiwgJzAxNCxmJywgJy0wMSwyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNDUuLCAnMDE1LGYnLCAnLTAxMiwzNDUuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNDU2LiwgJzAxNixmJywgJy0wLDEyMyw0NTYuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNDU2LiwgJzAxNyxmJywgJy0wLDEyMyw0NTYuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNDU2LjEyMzQxMjM0LCAnMDE3LGYnLCAnLTAsMTIzLDQ1Ni4xMjM0MTInKQorICAgICAgICB0ZXN0KC0xMjM0NTYuMTIzNDEyMzQsICcwMTMsLjJmJywgJy0wLDEyMyw0NTYuMTInKQorCisgICAgICAgICAjICUgZm9ybWF0dGluZwogICAgICAgICB0ZXN0KC0xLjAsICclJywgJy0xMDAuMDAwMDAwJScpCiAKICAgICAgICAgIyBmb3JtYXQgc3BlYyBtdXN0IGJlIHN0cmluZwpAQCAtNjM4LDkgKzcxMSw0MyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAuMCwgJyMnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAuMCwgJyMyMGYnKQogCisgICAgICAgICMgSXNzdWUgNjkwMgorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIwPDIwIiwgJzEyMzQ1LjYwMDAwMDAwMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMTwyMCIsICcxMjM0NS42MTExMTExMTExMTExMScpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIio8MjAiLCAnMTIzNDUuNioqKioqKioqKioqKionKQorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIwPjIwIiwgJzAwMDAwMDAwMDAwMDAxMjM0NS42JykKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMT4yMCIsICcxMTExMTExMTExMTExMTIzNDUuNicpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIio+MjAiLCAnKioqKioqKioqKioqKjEyMzQ1LjYnKQorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIwPTIwIiwgJzAwMDAwMDAwMDAwMDAxMjM0NS42JykKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMT0yMCIsICcxMTExMTExMTExMTExMTIzNDUuNicpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIio9MjAiLCAnKioqKioqKioqKioqKjEyMzQ1LjYnKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X3NwZWNfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIGludCwgZmxvYXQsIGFuZCBzdHJpbmcgYWxsIHNoYXJlIHRoZSBzYW1lIGZvcm1hdCBzcGVjCisgICAgICAgICMgbWluaS1sYW5ndWFnZSBwYXJzZXIuCisKKyAgICAgICAgIyBDaGVjayB0aGF0IHdlIGNhbid0IGFzayBmb3IgdG9vIG1hbnkgZGlnaXRzLiBUaGlzIGlzCisgICAgICAgICMgcHJvYmFibHkgYSBDUHl0aG9uIHNwZWNpZmljIHRlc3QuIEl0IHRyaWVzIHRvIHB1dCB0aGUgd2lkdGgKKyAgICAgICAgIyBpbnRvIGEgQyBsb25nLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAsICcxJyoxMDAwMCArICdkJykKKworICAgICAgICAjIFNpbWlsYXIgd2l0aCB0aGUgcHJlY2lzaW9uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAsICcuJyArICcxJyoxMDAwMCArICdkJykKKworICAgICAgICAjIEFuZCBtYXkgYXMgd2VsbCB0ZXN0IGJvdGguCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMCwgJzEnKjEwMDAgKyAnLicgKyAnMScqMTAwMDAgKyAnZCcpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgY29tbWFzIGFyZW4ndCBhbGxvd2VkIHdpdGggdmFyaW91cyB0eXBlIGNvZGVzCisgICAgICAgIGZvciBjb2RlIGluICd4WG9ibnMnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLCAnLCcgKyBjb2RlKQorCisgICAgZGVmIHRlc3RfaW50ZXJuYWxfc2l6ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihvYmplY3QuX19iYXNpY3NpemVfXywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHR1cGxlLl9faXRlbXNpemVfXywgMCkKKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygKKyAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoCiAgICAgICAgICAgICAoImJ1ZmZlci4uIG5vdCBzdXBwb3J0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpLAogICAgICAgICAgICAgKCJjbGFzc2ljIGxvbmcgZGl2aXNpb24iLCBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgcnVuX3VuaXR0ZXN0KFR5cGVzVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuYXJ5LnB5IGIvTGliL3Rlc3QvdGVzdF91bmFyeS5weQppbmRleCA5ODU0ZjY0Li41OThmY2E4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuYXJ5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5hcnkucHkKQEAgLTYsMzIgKzYsMzIgQEAKIGNsYXNzIFVuYXJ5T3BUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9uZWdhdGl2ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKC0yID09IDAgLSAyKQotICAgICAgICBzZWxmLmFzc2VydF8oLTAgPT0gMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKC0tMiA9PSAyKQotICAgICAgICBzZWxmLmFzc2VydF8oLTJMID09IDAgLSAyTCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKC0yLjAgPT0gMCAtIDIuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKC0yaiA9PSAwIC0gMmopCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMiA9PSAwIC0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC0wID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtLTIgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC0yTCA9PSAwIC0gMkwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMi4wID09IDAgLSAyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMmogPT0gMCAtIDJqKQogCiAgICAgZGVmIHRlc3RfcG9zaXRpdmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XygrMiA9PSAyKQotICAgICAgICBzZWxmLmFzc2VydF8oKzAgPT0gMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCsrMiA9PSAyKQotICAgICAgICBzZWxmLmFzc2VydF8oKzJMID09IDJMKQotICAgICAgICBzZWxmLmFzc2VydF8oKzIuMCA9PSAyLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0XygrMmogPT0gMmopCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgrMiA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKzAgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCsrMiA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKzJMID09IDJMKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKzIuMCA9PSAyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgrMmogPT0gMmopCiAKICAgICBkZWYgdGVzdF9pbnZlcnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XygtMiA9PSAwIC0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKC0wID09IDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtLTIgPT0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKC0yTCA9PSAwIC0gMkwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMiA9PSAwIC0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC0wID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtLTIgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC0yTCA9PSAwIC0gMkwpCiAKICAgICBkZWYgdGVzdF9ub19vdmVyZmxvdyhzZWxmKToKICAgICAgICAgbmluZXMgPSAiOSIgKiAzMgotICAgICAgICBzZWxmLmFzc2VydF8oZXZhbCgiKyIgKyBuaW5lcykgPT0gZXZhbCgiKyIgKyBuaW5lcyArICJMIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhldmFsKCItIiArIG5pbmVzKSA9PSBldmFsKCItIiArIG5pbmVzICsgIkwiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGV2YWwoIn4iICsgbmluZXMpID09IGV2YWwoIn4iICsgbmluZXMgKyAiTCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgiKyIgKyBuaW5lcykgPT0gZXZhbCgiKyIgKyBuaW5lcyArICJMIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCItIiArIG5pbmVzKSA9PSBldmFsKCItIiArIG5pbmVzICsgIkwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2YWwoIn4iICsgbmluZXMpID09IGV2YWwoIn4iICsgbmluZXMgKyAiTCIpKQogCiAgICAgZGVmIHRlc3RfbmVnYXRpb25fb2ZfZXhwb25lbnRpYXRpb24oc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlICcqKicgZG9lcyB0aGUgcmlnaHQgdGhpbmc7IHRoZXNlIGZvcm0gYQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmRvY3VtZW50ZWRfZGV0YWlscy5weSBiL0xpYi90ZXN0L3Rlc3RfdW5kb2N1bWVudGVkX2RldGFpbHMucHkKaW5kZXggYmM5MDA3Yi4uYThmYzI4MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmRvY3VtZW50ZWRfZGV0YWlscy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuZG9jdW1lbnRlZF9kZXRhaWxzLnB5CkBAIC0xLDYgKzEsNSBAQAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBfY2hlY2tfcHkza193YXJuaW5ncworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja19weTNrX3dhcm5pbmdzCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBzeXMKIAogY2xhc3MgVGVzdEltcGxlbWVudGF0aW9uQ29tcGFyaXNvbnModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zMyw3ICszMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnX2NlbGwgIT0gaF9jZWxsKQogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICBydW5fdW5pdHRlc3QoVGVzdEltcGxlbWVudGF0aW9uQ29tcGFyaXNvbnMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKaW5kZXggMzUxMzRlYy4uYWU0YzM1NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQpAQCAtMSw0ICsxLDMgQEAKLSMgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KICIiIiBUZXN0IHNjcmlwdCBmb3IgdGhlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24uCiAKIFdyaXR0ZW4gYnkgTWFyYy1BbmRyZSBMZW1idXJnIChtYWxAbGVtYnVyZy5jb20pLgpAQCAtMzQsMTEgKzMzLDIxIEBACiAgICAgKToKICAgICB0eXBlMnRlc3QgPSB1bmljb2RlCiAKKyAgICBkZWYgYXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgorICAgICAgICAjIHN0cmljdCBhc3NlcnRFcXVhbCBtZXRob2Q6IHJlamVjdCBpbXBsaWNpdCBieXRlcy91bmljb2RlIGVxdWFsaXR5CisgICAgICAgIHN1cGVyKFVuaWNvZGVUZXN0LCBzZWxmKS5hc3NlcnRFcXVhbChmaXJzdCwgc2Vjb25kLCBtc2cpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlyc3QsIHVuaWNvZGUpIG9yIGlzaW5zdGFuY2Uoc2Vjb25kLCB1bmljb2RlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaXJzdCwgdW5pY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWNvbmQsIHVuaWNvZGUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmaXJzdCwgc3RyKSBvciBpc2luc3RhbmNlKHNlY29uZCwgc3RyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaXJzdCwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlY29uZCwgc3RyKQorCiAgICAgZGVmIGNoZWNrZXF1YWxub2ZpeChzZWxmLCByZXN1bHQsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgogICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSkKICAgICAgICAgcmVhbHJlc3VsdCA9IG1ldGhvZCgqYXJncykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscmVzdWx0LCByZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHJlYWxyZXN1bHQpIGlzIHR5cGUocmVzdWx0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocmVhbHJlc3VsdCkgaXMgdHlwZShyZXN1bHQpKQogCiAgICAgICAgICMgaWYgdGhlIG9yaWdpbmFsIGlzIHJldHVybmVkIG1ha2Ugc3VyZSB0aGF0CiAgICAgICAgICMgdGhpcyBkb2Vzbid0IGhhcHBlbiB3aXRoIHN1YmNsYXNzZXMKQEAgLTUwLDcgKzU5LDcgQEAKICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKQogICAgICAgICAgICAgcmVhbHJlc3VsdCA9IG1ldGhvZCgqYXJncykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHJlc3VsdCwgcmVzdWx0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG9iamVjdCBpcyBub3QgcmVhbHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmplY3QgaXMgbm90IHJlYWxyZXN1bHQpCiAKICAgICBkZWYgdGVzdF9saXRlcmFscyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x4ZmYnLCB1J1x1MDBmZicpCkBAIC0xOTcsMjggKzIwNiwyOCBAQAogCiAgICAgZGVmIHRlc3RfY29tcGFyaXNvbihzZWxmKToKICAgICAgICAgIyBDb21wYXJpc29uczoKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2FiYycsICdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmMnLCB1J2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhYmMnLCB1J2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2FiY2QnID4gJ2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYWJjZCcgPiB1J2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2FiY2QnID4gdSdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhYmMnIDwgJ2FiY2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2FiYycgPCB1J2FiY2QnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhYmMnIDwgdSdhYmNkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnYWJjJyA9PSAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhYmMnID09IHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnYWJjJyA9PSB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J2FiY2QnID4gJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYWJjZCcgPiB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J2FiY2QnID4gdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdhYmMnIDwgJ2FiY2QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2FiYycgPCB1J2FiY2QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdhYmMnIDwgdSdhYmNkJykKIAogICAgICAgICBpZiAwOgogICAgICAgICAgICAgIyBNb3ZlIHRoZXNlIHRlc3RzIHRvIGEgVW5pY29kZSBjb2xsYXRpb24gbW9kdWxlIHRlc3QuLi4KICAgICAgICAgICAgICMgVGVzdGluZyBVVEYtMTYgY29kZSBwb2ludCBvcmRlciBjb21wYXJpc29ucy4uLgogCiAgICAgICAgICAgICAjIE5vIHN1cnJvZ2F0ZXMsIG5vIGZpeHVwIHJlcXVpcmVkLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHUnXHUwMDYxJyA8IHUnXHUyMGFjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1x1MDA2MScgPCB1J1x1MjBhYycpCiAgICAgICAgICAgICAjIE5vbiBzdXJyb2dhdGUgYmVsb3cgc3Vycm9nYXRlIHZhbHVlLCBubyBmaXh1cCByZXF1aXJlZAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHUnXHUwMDYxJyA8IHUnXHVkODAwXHVkYzAyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1x1MDA2MScgPCB1J1x1ZDgwMFx1ZGMwMicpCiAKICAgICAgICAgICAgICMgTm9uIHN1cnJvZ2F0ZSBhYm92ZSBzdXJyb2dhdGUgdmFsdWUsIGZpeHVwIHJlcXVpcmVkCiAgICAgICAgICAgICBkZWYgdGVzdF9sZWNtcChzLCBzMik6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHMgPCBzMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocyA8IHMyKQogCiAgICAgICAgICAgICBkZWYgdGVzdF9maXh1cChzKToKICAgICAgICAgICAgICAgICBzMiA9IHUnXHVkODAwXHVkYzAxJwpAQCAtMjU4LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAgICAgdGVzdF9maXh1cCh1J1x1ZmY2MScpCiAKICAgICAgICAgIyBTdXJyb2dhdGVzIG9uIGJvdGggc2lkZXMsIG5vIGZpeHVwIHJlcXVpcmVkCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J1x1ZDgwMFx1ZGMwMicgPCB1J1x1ZDg0ZFx1ZGM1NicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1x1ZDgwMFx1ZGMwMicgPCB1J1x1ZDg0ZFx1ZGM1NicpCiAKICAgICBkZWYgdGVzdF9pc2xvd2VyKHNlbGYpOgogICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9pc2xvd2VyKHNlbGYpCkBAIC0zMTYsNjUgKzMyNSw2NyBAQAogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBVbmljb2RlIGNvbnRhaW5zIG1ldGhvZAotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIGluIHUnYWJkYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgaW4gdSdiZGFiJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBpbiB1J2JkYWJhJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBpbiB1J2JkYmEnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIGluIHUnYmRiYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2EnIGluIHUnYmRiYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2EnIG5vdCBpbiB1J2JkYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2EnIG5vdCBpbiAnYmRiJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYScgaW4gJ2JkYmEnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhJyBpbiAoJ2EnLDEsTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2EnIGluICgxLE5vbmUsJ2EnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYScgaW4gKDEsTm9uZSx1J2EnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBpbiAoJ2EnLDEsTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgaW4gKDEsTm9uZSwnYScpKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIGluICgxLE5vbmUsdSdhJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgbm90IGluICgneCcsMSx1J3knKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBub3QgaW4gKCd4JywxLE5vbmUpKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhYmNkJyBub3QgaW4gdSdhYmN4eHh4JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYWInIGluIHUnYWJjZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYWInIGluIHUnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYWInIGluICdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhYicgaW4gKDEsTm9uZSx1J2FiJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1JycgaW4gdSdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8oJycgaW4gdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgdSdhYmRiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIHUnYmRhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCB1J2JkYWJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIHUnYmRiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCB1J2JkYmEnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYScsIHUnYmRiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSdhJywgdSdiZGInKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYScsICdiZGInKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYScsICdiZGJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCAoJ2EnLDEsTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhJywgKDEsTm9uZSwnYScpKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYScsICgxLE5vbmUsdSdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAoJ2EnLDEsTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAoMSxOb25lLCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAoMSxOb25lLHUnYScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgKCd4JywxLHUneScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgKCd4JywxLE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYWJjZCcsIHUnYWJjeHh4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhYicsIHUnYWJjZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FiJywgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYWInLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2FiJywgKDEsTm9uZSx1J2FiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odScnLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsIHUnYWJjJykKIAogICAgICAgICAjIElmIHRoZSBmb2xsb3dpbmcgZmFpbHMgZWl0aGVyCiAgICAgICAgICMgdGhlIGNvbnRhaW5zIG9wZXJhdG9yIGRvZXMgbm90IHByb3BhZ2F0ZSBVbmljb2RlRXJyb3JzIG9yCiAgICAgICAgICMgc29tZW9uZSBoYXMgY2hhbmdlZCB0aGUgZGVmYXVsdCBlbmNvZGluZwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsICdnXHhlMnRlYXUnLl9fY29udGFpbnNfXywgdSdceGUyJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCAnZ1x4ZTJ0ZWF1Jy5fX2NvbnRhaW5zX18sIHUnXHhlMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgdSdnXHhlMnRlYXUnLl9fY29udGFpbnNfXywgJ1x4ZTInKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1JycgaW4gJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnJyBpbiB1JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1JycgaW4gdScnKQotICAgICAgICBzZWxmLmFzc2VydF8odScnIGluICdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8oJycgaW4gdSdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8odScnIGluIHUnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnXDAnIG5vdCBpbiAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdcMCcgbm90IGluIHUnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnXDAnIG5vdCBpbiB1J2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J1wwJyBpbiAnXDBhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ1wwJyBpbiB1J1wwYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnXDAnIGluIHUnXDBhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdcMCcgaW4gJ2FiY1wwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdcMCcgaW4gdSdhYmNcMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J1wwJyBpbiB1J2FiY1wwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYScgaW4gJ1wwYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBpbiB1J1wwYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYScgaW4gdSdcMGFiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2FzZGYnIGluICdhc2RmJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhc2RmJyBpbiB1J2FzZGYnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhc2RmJyBpbiB1J2FzZGYnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhc2RmJyBub3QgaW4gJ2FzZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYXNkZicgbm90IGluIHUnYXNkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYXNkZicgbm90IGluIHUnYXNkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYXNkZicgbm90IGluICcnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2FzZGYnIG5vdCBpbiB1JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2FzZGYnIG5vdCBpbiB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odScnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJywgdScnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnJywgdScnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1JycsIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J1wwJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1wwJywgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnXDAnLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdcMCcsICdcMGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1wwJywgdSdcMGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdcMCcsIHUnXDBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnXDAnLCAnYWJjXDAnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdcMCcsIHUnYWJjXDAnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnXDAnLCB1J2FiY1wwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCAnXDBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgdSdcMGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhJywgdSdcMGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhc2RmJywgJ2FzZGYnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhc2RmJywgdSdhc2RmJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2FzZGYnLCB1J2FzZGYnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYXNkZicsICdhc2QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhc2RmJywgdSdhc2QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYXNkZicsIHUnYXNkJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J2FzZGYnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYXNkZicsIHUnJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J2FzZGYnLCB1JycpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImFiYyIuX19jb250YWluc19fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5fX2NvbnRhaW5zX18sIG9iamVjdCgpKQogCiAgICAgZGVmIHRlc3RfZm9ybWF0dGluZyhzZWxmKToKICAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfZm9ybWF0dGluZyhzZWxmKQpAQCAtMzk2LDggKzQwNywxMCBAQAogCiAgICAgICAgIGZvciBudW0gaW4gcmFuZ2UoMHgwMCwweDgwKToKICAgICAgICAgICAgIGNoYXIgPSBjaHIobnVtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVjIiAlIGNoYXIsIGNoYXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJWMiICUgbnVtLCBjaGFyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVjIiAlIGNoYXIsIHVuaWNvZGUoY2hhcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJWMiICUgbnVtLCB1bmljb2RlKGNoYXIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoYXIgPT0gdSIlYyIgJSBjaGFyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoYXIgPT0gdSIlYyIgJSBudW0pCiAgICAgICAgICMgSXNzdWUgNzY0OQogICAgICAgICBmb3IgbnVtIGluIHJhbmdlKDB4ODAsMHgxMDApOgogICAgICAgICAgICAgdWNoYXIgPSB1bmljaHIobnVtKQpAQCAtNTExLDcgKzUyNCw3IEBACiAgICAgICAgICkKIAogICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKLSAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAgICAgYnVmID0gYnVmZmVyKCdjaGFyYWN0ZXIgYnVmZmVycyBhcmUgZGVjb2RlZCB0byB1bmljb2RlJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICAgdW5pY29kZSgKQEAgLTUzNywxOSArNTUwLDMwIEBACiAgICAgICAgICAgICAodScrPycsICcrLT8nKSwKICAgICAgICAgICAgICh1cidcXD8nLCAnK0FGd0FYQT8nKSwKICAgICAgICAgICAgICh1cidcXFw/JywgJytBRndBWEFCYz8nKSwKLSAgICAgICAgICAgICh1cicrKy0tJywgJystKy0tLScpCisgICAgICAgICAgICAodXInKystLScsICcrLSstLS0nKSwKKyAgICAgICAgICAgICh1J1xVMDAwYWJjZGUnLCAnKzJtL2MzZy0nKSwgICAgICAgICAgICAgICAgICAjIHN1cnJvZ2F0ZSBwYWlycworICAgICAgICAgICAgKHUnLycsICcvJyksCiAgICAgICAgIF0KIAogICAgICAgICBmb3IgKHgsIHkpIGluIHV0ZlRlc3RzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmVuY29kZSgndXRmLTcnKSwgeSkKIAotICAgICAgICAjIHN1cnJvZ2F0ZXMgbm90IHN1cHBvcnRlZAorICAgICAgICAjIFVucGFpcmVkIHN1cnJvZ2F0ZXMgbm90IHN1cHBvcnRlZAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHVuaWNvZGUsICcrM0FEWUFBLScsICd1dGYtNycpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCcrM0FEWUFBLScsICd1dGYtNycsICdyZXBsYWNlJyksIHUnXHVmZmZkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCcrM0FEWUFBLScsICd1dGYtNycsICdyZXBsYWNlJyksIHUnXHVmZmZkXHVmZmZkJykKIAotICAgICAgICAjIElzc3VlICMyMjQyOiBjcmFzaCBvbiBzb21lIFdpbmRvd3MvTVNWQyB2ZXJzaW9ucwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsICcrXHhjMScuZGVjb2RlLCAndXRmLTcnKQorICAgICAgICAjIERpcmVjdCBlbmNvZGVkIGNoYXJhY3RlcnMKKyAgICAgICAgc2V0X2QgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8iCisgICAgICAgICMgT3B0aW9uYWwgZGlyZWN0IGNoYXJhY3RlcnMKKyAgICAgICAgc2V0X28gPSAnISIjJCUmKjs8PT5AW11eX2B7fH0nCisgICAgICAgIGZvciBjIGluIHNldF9kOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmVuY29kZSgndXRmNycpLCBjLmVuY29kZSgnYXNjaWknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1dGY3JyksIHVuaWNvZGUoYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYyA9PSBjLmVuY29kZSgnYXNjaWknKS5kZWNvZGUoJ3V0ZjcnKSkKKyAgICAgICAgZm9yIGMgaW4gc2V0X286CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZW5jb2RlKCdhc2NpaScpLmRlY29kZSgndXRmNycpLCB1bmljb2RlKGMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgPT0gYy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1dGY3JykpCiAKICAgICBkZWYgdGVzdF9jb2RlY3NfdXRmOChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1JycuZW5jb2RlKCd1dGYtOCcpLCAnJykKQEAgLTU4Miw5ICs2MDYsOSBAQAogICAgICAgICApCiAKICAgICAgICAgIyBVVEYtOCBzcGVjaWZpYyBkZWNvZGluZyB0ZXN0cwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ1x4ZjBceGEzXHg5MVx4OTYnLCAndXRmLTgnKSwgdSdcVTAwMDIzNDU2JyApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnXHhmMFx4OTBceDgwXHg4MicsICd1dGYtOCcpLCB1J1xVMDAwMTAwMDInICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdceGUyXHg4Mlx4YWMnLCAndXRmLTgnKSwgdSdcdTIwYWMnICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdceGYwXHhhM1x4OTFceDk2JywgJ3V0Zi04JyksIHUnXFUwMDAyMzQ1NicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnXHhmMFx4OTBceDgwXHg4MicsICd1dGYtOCcpLCB1J1xVMDAwMTAwMDInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ1x4ZTJceDgyXHhhYycsICd1dGYtOCcpLCB1J1x1MjBhYycpCiAKICAgICAgICAgIyBPdGhlciBwb3NzaWJsZSB1dGYtOCB0ZXN0IGNhc2VzOgogICAgICAgICAjICogc3RyaWN0IGRlY29kaW5nIHRlc3RpbmcgZm9yIGFsbCBvZiB0aGUKQEAgLTY0MywxMSArNjY3LDE3IEBACiAgICAgICAgICMgc2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdmVyc2lvbnMvVW5pY29kZTUuMi4wL2NoMDMucGRmCiAgICAgICAgICMgKHRhYmxlIDMtNykgYW5kIGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzM2MjkudHh0CiAgICAgICAgICNmb3IgY2IgaW4gbWFwKGNociwgcmFuZ2UoMHhBMCwgMHhDMCkpOgotICAgICAgICAgICAgI3N5cy5fX3N0ZG91dF9fLndyaXRlKCdcXHhFRFxceCUwMnhcXHg4MFxuJyAlIG9yZChjYikpCiAgICAgICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIygnXHhFRCcrY2IrJ1x4ODAnKS5kZWNvZGUsICd1dGYtOCcpCiAgICAgICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIygnXHhFRCcrY2IrJ1x4QkYnKS5kZWNvZGUsICd1dGYtOCcpCisgICAgICAgICMgYnV0IHNpbmNlIHRoZXkgYXJlIHZhbGlkIG9uIFB5dGhvbiAyIGFkZCBhIHRlc3QgZm9yIHRoYXQ6CisgICAgICAgIGZvciBjYiwgc3Vycm9nYXRlIGluIHppcChtYXAoY2hyLCByYW5nZSgweEEwLCAweEMwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAodW5pY2hyLCByYW5nZSgweGQ4MDAsIDB4ZTAwMCwgNjQpKSk6CisgICAgICAgICAgICBlbmNvZGVkID0gJ1x4RUQnK2NiKydceDgwJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVkLmRlY29kZSgndXRmLTgnKSwgc3Vycm9nYXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdXJyb2dhdGUuZW5jb2RlKCd1dGYtOCcpLCBlbmNvZGVkKQorCiAgICAgICAgIGZvciBjYiBpbiBtYXAoY2hyLCByYW5nZSgweDgwLCAweDkwKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4RjAnK2NiKydceDgwXHg4MCcpLmRlY29kZSwgJ3V0Zi04JykKQEAgLTc1OCwxMiArNzg4LDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdSdBbmRyXDIwMiB4Jy5lbmNvZGUsICdhc2NpaScsJ3N0cmljdCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdBbmRyXDIwMiB4Jy5lbmNvZGUoJ2FzY2lpJywnaWdub3JlJyksICJBbmRyIHgiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsJ3JlcGxhY2UnKSwgIkFuZHI/IHgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsICdyZXBsYWNlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdBbmRyXDIwMiB4Jy5lbmNvZGUoJ2FzY2lpJywgZXJyb3JzPSdyZXBsYWNlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdBbmRyXDIwMiB4Jy5lbmNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnQW5kclwyMDIgeCcuZW5jb2RlKGVuY29kaW5nPSdhc2NpaScsIGVycm9ycz0naWdub3JlJykpCiAKICAgICAgICAgIyBFcnJvciBoYW5kbGluZyAoZGVjb2RpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdW5pY29kZSwgJ0FuZHJcMjAyIHgnLCAnYXNjaWknKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHVuaWNvZGUsICdBbmRyXDIwMiB4JywgJ2FzY2lpJywnc3RyaWN0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdBbmRyXDIwMiB4JywnYXNjaWknLCdpZ25vcmUnKSwgdSJBbmRyIHgiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ0FuZHJcMjAyIHgnLCdhc2NpaScsJ3JlcGxhY2UnKSwgdSdBbmRyXHVGRkZEIHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYWJjZGUnLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdhYmNkZScuZGVjb2RlKCdhc2NpaScsIGVycm9ycz0naWdub3JlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhYmNkZScuZGVjb2RlKCdhc2NpaScsICdyZXBsYWNlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdhYmNkZScuZGVjb2RlKGVuY29kaW5nPSdhc2NpaScsIGVycm9ycz0ncmVwbGFjZScpKQogCiAgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKHVua25vd24gY2hhcmFjdGVyIG5hbWVzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJcXE57Zm9vfXh4Ii5kZWNvZGUoInVuaWNvZGUtZXNjYXBlIiwgImlnbm9yZSIpLCB1Inh4IikKQEAgLTg0MCw4ICs4NzgsOCBAQAogICAgICAgICBzID0gJycuam9pbihtYXAoY2hyLCB4cmFuZ2UoMTI4KSkpCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiAoCiAgICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywKLSAgICAgICAgICAgICdjcDQzNycsICdjcDUwMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsCi0gICAgICAgICAgICAnY3A4NTInLCAnY3A4NTUnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAorICAgICAgICAgICAgJ2NwNDM3JywgJ2NwNTAwJywgJ2NwNzIwJywgJ2NwNzM3JywgJ2NwNzc1JywgJ2NwODUwJywKKyAgICAgICAgICAgICdjcDg1MicsICdjcDg1NScsICdjcDg1OCcsICdjcDg2MCcsICdjcDg2MScsICdjcDg2MicsCiAgICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMTAnLCAnaXNvODg1OV8xMycsICdpc284ODU5XzE0JywgJ2lzbzg4NTlfMTUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMicsICdpc284ODU5XzMnLCAnaXNvODg1OV80JywgJ2lzbzg4NTlfNScsICdpc284ODU5XzYnLApAQCAtODY4LDggKzkwNiw4IEBACiAgICAgICAgIHMgPSAnJy5qb2luKG1hcChjaHIsIHhyYW5nZSgxMjgsIDI1NikpKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKAogICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsCi0gICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAotICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKKyAgICAgICAgICAgICdjcDQzNycsICdjcDUwMCcsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsCisgICAgICAgICAgICAnY3A4NTInLCAnY3A4NTUnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAogICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywKICAgICAgICAgICAgICdpc284ODU5XzEwJywgJ2lzbzg4NTlfMTMnLCAnaXNvODg1OV8xNCcsICdpc284ODU5XzE1JywKICAgICAgICAgICAgICdpc284ODU5XzInLCAnaXNvODg1OV80JywgJ2lzbzg4NTlfNScsCkBAIC0xMTkwLDcgKzEyMjgsNyBAQAogICAgICAgICAjIGZvcm1hdCBzcGVjaWZpZXJzIGZvciB1c2VyIGRlZmluZWQgdHlwZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6YWJjfScuZm9ybWF0KEMoKSksIHUnYWJjJykKIAotICAgICAgICAjICFyIGFuZCAhcyBjb2Vyc2lvbnMKKyAgICAgICAgIyAhciBhbmQgIXMgY29lcmNpb25zCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MCFzfScuZm9ybWF0KHUnSGVsbG8nKSwgdSdIZWxsbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MCFzOn0nLmZvcm1hdCh1J0hlbGxvJyksIHUnSGVsbG8nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezAhczoxNX0nLmZvcm1hdCh1J0hlbGxvJyksIHUnSGVsbG8gICAgICAgICAgJykKQEAgLTEyMDQsMTIgKzEyNDIsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swfScuZm9ybWF0KFtdKSwgdSdbXScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MH0nLmZvcm1hdChbMV0pLCB1J1sxXScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MH0nLmZvcm1hdChFKHUnZGF0YScpKSwgdSdFKGRhdGEpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOl4xMH0nLmZvcm1hdChFKHUnZGF0YScpKSwgdScgRShkYXRhKSAgJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOl4xMHN9Jy5mb3JtYXQoRSh1J2RhdGEnKSksIHUnIEUoZGF0YSkgICcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDpkfScuZm9ybWF0KEcodSdkYXRhJykpLCB1J0coZGF0YSknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6PjE1c30nLmZvcm1hdChHKHUnZGF0YScpKSwgdScgc3RyaW5nIGlzIGRhdGEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezAhc30nLmZvcm1hdChHKHUnZGF0YScpKSwgdSdzdHJpbmcgaXMgZGF0YScpCiAKKyAgICAgICAgbXNnID0gJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0IHN0cmluZyBpcyBkZXByZWNhdGVkJworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygobXNnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6XjEwfScuZm9ybWF0KEUodSdkYXRhJykpLCB1JyBFKGRhdGEpICAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOl4xMHN9Jy5mb3JtYXQoRSh1J2RhdGEnKSksIHUnIEUoZGF0YSkgICcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6PjE1c30nLmZvcm1hdChHKHUnZGF0YScpKSwgdScgc3RyaW5nIGlzIGRhdGEnKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJ7MDpkYXRlOiAlWS0lbS0lZH0iLmZvcm1hdChJKHllYXI9MjAwNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg9OCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5PTI3KSksCkBAIC0xMjYxLDkgKzEzMDIsOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswIX0iLmZvcm1hdCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MCFyc30iLmZvcm1hdCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7IX0iLmZvcm1hdCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7On0iLmZvcm1hdCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7OnN9Ii5mb3JtYXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUie30iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdSJ7On0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdSJ7OnN9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUie30iLmZvcm1hdCkKICAgICAgICAgYmlnID0gdSIyMzA5ODQ3NTAyOTM4NDcwMjk4MzQ3NjA5ODIzMDc1NDk3MzIwOTQ4MjU3MyIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKHUieyIgKyBiaWcgKyB1In0iKS5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICh1IntbIiArIGJpZyArIHUiXX0iKS5mb3JtYXQsIFswXSkKQEAgLTEyOTQsNiArMTMzNSwzNiBAQAogICAgICAgICAjICB3aWxsIGZhaWwKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCAiZm9vezB9Ii5mb3JtYXQsIHUnXHUxMDAwYmFyJykKIAorICAgIGRlZiB0ZXN0X2Zvcm1hdF9hdXRvX251bWJlcmluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4PTEwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5feCA9IHgKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3t9Jy5mb3JtYXQoMTApLCB1JzEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3s6NX0nLmZvcm1hdCgncycpLCB1J3MgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3shcn0nLmZvcm1hdCgncycpLCB1IidzJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7Ll94fScuZm9ybWF0KEMoMTApKSwgdScxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7WzFdfScuZm9ybWF0KFsxLCAyXSksIHUnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7W2FdfScuZm9ybWF0KHsnYSc6NCwgJ2InOjJ9KSwgdSc0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2F7fWJ7fWMnLmZvcm1hdCgwLCAxKSwgdSdhMGIxYycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2F7Ont9fWInLmZvcm1hdCgneCcsICdeMTAnKSwgdSdhICAgIHggICAgIGInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYXs6e314fWInLmZvcm1hdCgyMCwgJyMnKSwgdSdhMHgxNGInKQorCisgICAgICAgICMgY2FuJ3QgbWl4IGFuZCBtYXRjaCBudW1iZXJpbmcgYW5kIGF1dG8tbnVtYmVyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUne317MX0nLmZvcm1hdCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSd7MX17fScuZm9ybWF0LCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J3s6ezF9fScuZm9ybWF0LCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J3swOnt9fScuZm9ybWF0LCAxLCAyKQorCisgICAgICAgICMgY2FuIG1peCBhbmQgbWF0Y2ggYXV0by1udW1iZXJpbmcgYW5kIG5hbWVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7Zn17fScuZm9ybWF0KDQsIGY9J3Rlc3QnKSwgdSd0ZXN0NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7fXtmfScuZm9ybWF0KDQsIGY9J3Rlc3QnKSwgdSc0dGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7OntmfX17Z317fScuZm9ybWF0KDEsIDMsIGc9J2cnLCBmPTIpLCB1JyAxZzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne2Y6e319e317Z30nLmZvcm1hdCgyLCA0LCBmPTEsIGc9J2cnKSwgdScgMTRnJykKKwogICAgIGRlZiB0ZXN0X3JhaXNlTWVtRXJyb3Ioc2VsZik6CiAgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIGZyZWVsaXN0IGNvbnRhaW5zIGEgY29uc2lzdGVudCBvYmplY3QsIGV2ZW4KICAgICAgICAgIyB3aGVuIGEgc3RyaW5nIGFsbG9jYXRpb24gZmFpbHMgd2l0aCBhIE1lbW9yeUVycm9yLgpAQCAtMTMxMSw4ICsxMzgyLDggQEAKICAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gdSdfX3VuaWNvZGVfXyBvdmVycmlkZGVuJwogICAgICAgICB1ID0gVSh1J3h4eCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCIlcyIgJSB1LCB1J19fdW5pY29kZV9fIG92ZXJyaWRkZW4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiezB9Ii5mb3JtYXQodSksIHUnX191bmljb2RlX18gb3ZlcnJpZGRlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVzIiAlIHUsIHUnX191bmljb2RlX18gb3ZlcnJpZGRlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInt9Ii5mb3JtYXQodSksICdfX3VuaWNvZGVfXyBvdmVycmlkZGVuJykKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVfZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZV9maWxlLnB5CmluZGV4IDMwNWY5OGIuLmYwNGJhZDMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZV9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZV9maWxlLnB5CkBAIC01LDE0ICs1LDE0IEBACiBpbXBvcnQgdW5pY29kZWRhdGEKIAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRlc3RTa2lwcGVkLCBURVNURk5fVU5JQ09ERQotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOX0VOQ09ESU5HLCBURVNURk5fVU5JQ09ERV9VTkVOQ09ERUFCTEUKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOX1VOSUNPREUKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTl9FTkNPRElORywgVEVTVEZOX1VORU5DT0RBQkxFCiB0cnk6CiAgICAgVEVTVEZOX0VOQ09ERUQgPSBURVNURk5fVU5JQ09ERS5lbmNvZGUoVEVTVEZOX0VOQ09ESU5HKQogZXhjZXB0IChVbmljb2RlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgIyBFaXRoZXIgdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nIGlzIE5vbmUsIG9yIHRoZSBmaWxlIG5hbWUKICAgICAjIGNhbm5vdCBiZSBlbmNvZGVkIGluIHRoZSBmaWxlIHN5c3RlbSBlbmNvZGluZy4KLSAgICByYWlzZSBUZXN0U2tpcHBlZCgiTm8gVW5pY29kZSBmaWxlc3lzdGVtIHNlbWFudGljcyBvbiB0aGlzIHBsYXRmb3JtLiIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk5vIFVuaWNvZGUgZmlsZXN5c3RlbSBzZW1hbnRpY3Mgb24gdGhpcyBwbGF0Zm9ybS4iKQogCiBpZiBURVNURk5fRU5DT0RFRC5kZWNvZGUoVEVTVEZOX0VOQ09ESU5HKSAhPSBURVNURk5fVU5JQ09ERToKICAgICAjIFRoZSBmaWxlIHN5c3RlbSBlbmNvZGluZyBkb2VzIG5vdCBzdXBwb3J0IExhdGluLTEKQEAgLTI2LDEwICsyNiwxMCBAQAogICAgICAgICAgICAgIyBNQkNTIHdpbGwgbm90IHJlcG9ydCB0aGUgZXJyb3IgcHJvcGVybHkKICAgICAgICAgICAgIHJhaXNlIFVuaWNvZGVFcnJvciwgIm1iY3MgZW5jb2RpbmcgcHJvYmxlbSIKICAgICBleGNlcHQgKFVuaWNvZGVFcnJvciwgVHlwZUVycm9yKToKLSAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQoIkNhbm5vdCBmaW5kIGEgc3VpdGVhYmxlIGZpbGVuYW1lLiIpCisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW5ub3QgZmluZCBhIHN1aXRlYWJsZSBmaWxlbmFtZS4iKQogCiBpZiBURVNURk5fRU5DT0RFRC5kZWNvZGUoVEVTVEZOX0VOQ09ESU5HKSAhPSBURVNURk5fVU5JQ09ERToKLSAgICByYWlzZSBUZXN0U2tpcHBlZCgiQ2Fubm90IGZpbmQgYSBzdWl0YWJsZSBmaWxlbmFtZS4iKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW5ub3QgZmluZCBhIHN1aXRhYmxlIGZpbGVuYW1lLiIpCiAKIGRlZiByZW1vdmVfaWZfZXhpc3RzKGZpbGVuYW1lKToKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICAjIERvIGFsbCB0aGUgdGVzdHMgd2UgY2FuIGdpdmVuIG9ubHkgYSBzaW5nbGUgZmlsZW5hbWUuICBUaGUgZmlsZSBzaG91bGQKICAgICAjIGV4aXN0LgogICAgIGRlZiBfZG9fc2luZ2xlKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9zLmFjY2VzcyhmaWxlbmFtZSwgb3MuUl9PSykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3MuYWNjZXNzKG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSksIG9zLlJfT0spKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZmlsZW5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuYWNjZXNzKGZpbGVuYW1lLCBvcy5SX09LKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5hY2Nlc3Mob3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKSwgb3MuUl9PSykpCiAgICAgICAgIG9zLmNobW9kKGZpbGVuYW1lLCAwNzc3KQogICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgTm9uZSkKICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsICh0aW1lLnRpbWUoKSwgdGltZS50aW1lKCkpKQogICAgICAgICAjIENvcHkvcmVuYW1lIGV0YyB0ZXN0cyB1c2luZyB0aGUgc2FtZSBmaWxlbmFtZQogICAgICAgICBzZWxmLl9kb19jb3B5aXNoKGZpbGVuYW1lLCBmaWxlbmFtZSkKICAgICAgICAgIyBGaWxlbmFtZSBzaG91bGQgYXBwZWFyIGluIGdsb2Igb3V0cHV0Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcygKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgb3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKT09b3MucGF0aC5hYnNwYXRoKGdsb2IuZ2xvYihmaWxlbmFtZSlbMF0pKQogICAgICAgICAjIGJhc2VuYW1lIHNob3VsZCBhcHBlYXIgaW4gbGlzdGRpci4KICAgICAgICAgcGF0aCwgYmFzZSA9IG9zLnBhdGguc3BsaXQob3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKSkKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgYmFzZSA9IHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgiTkZEIiwgYmFzZSkKICAgICAgICAgZmlsZV9saXN0ID0gW3VuaWNvZGVkYXRhLm5vcm1hbGl6ZSgiTkZEIiwgZikgZm9yIGYgaW4gZmlsZV9saXN0XQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiYXNlIGluIGZpbGVfbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiYXNlLCBmaWxlX2xpc3QpCiAKICAgICAjIERvIGFzIG1hbnkgImVxdWl2YWxhbmN5JyB0ZXN0cyBhcyB3ZSBjYW4gLSBpZSwgY2hlY2sgdGhhdCBhbHRob3VnaCB3ZQogICAgICMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMgZm9yIHRoZSBmaWxlbmFtZSwgdGhleSByZWZlciB0byB0aGUgc2FtZSBmaWxlLgpAQCAtNzksMTIgKzc5LDEyIEBACiAgICAgICAgICMgTm90ZSB3ZSBvbmx5IGNoZWNrICJmaWxlbmFtZTEgYWdhaW5zdCBmaWxlbmFtZTIiIC0gd2UgZG9uJ3QgYm90aGVyCiAgICAgICAgICMgY2hlY2tpbmcgImZpbGVuYW1lMiBhZ2FpbnN0IDEiLCBhcyB3ZSBhc3N1bWUgd2UgYXJlIGNhbGxlZCBhZ2FpbiB3aXRoCiAgICAgICAgICMgdGhlIGFyZ3MgcmV2ZXJzZWQuCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGZpbGVuYW1lMSkhPXR5cGUoZmlsZW5hbWUyKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZmlsZW5hbWUxKSE9dHlwZShmaWxlbmFtZTIpLAogICAgICAgICAgICAgICAgICAgICAiTm8gcG9pbnQgY2hlY2tpbmcgZXF1aXZhbGVudCBmaWxlbmFtZXMgb2YgdGhlIHNhbWUgdHlwZSIpCiAgICAgICAgICMgc3RhdCBhbmQgbHN0YXQgc2hvdWxkIHJldHVybiB0aGUgc2FtZSByZXN1bHRzLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChvcy5zdGF0KGZpbGVuYW1lMSksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChmaWxlbmFtZTEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KGZpbGVuYW1lMikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG9zLmxzdGF0KGZpbGVuYW1lMSksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHN0YXQoZmlsZW5hbWUxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubHN0YXQoZmlsZW5hbWUyKSkKICAgICAgICAgIyBDb3B5L3JlbmFtZSBldGMgdGVzdHMgdXNpbmcgZXF1aXZhbGVudCBmaWxlbmFtZQogICAgICAgICBzZWxmLl9kb19jb3B5aXNoKGZpbGVuYW1lMSwgZmlsZW5hbWUyKQpAQCAtOTIsMTkgKzkyLDE5IEBACiAgICAgIyBUZXN0cyB0aGF0IGNvcHksIG1vdmUsIGV0YyBvbmUgZmlsZSB0byBhbm90aGVyLgogICAgIGRlZiBfZG9fY29weWlzaChzZWxmLCBmaWxlbmFtZTEsIGZpbGVuYW1lMik6CiAgICAgICAgICMgU2hvdWxkIGJlIGFibGUgdG8gcmVuYW1lIHRoZSBmaWxlIHVzaW5nIGVpdGhlciBuYW1lLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUxKSkgIyBtdXN0IGV4aXN0LgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUxKSkgIyBtdXN0IGV4aXN0LgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUxLCBmaWxlbmFtZTIgKyAiLm5ldyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcy5wYXRoLmlzZmlsZShmaWxlbmFtZTErIi5uZXciKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lMSsiLm5ldyIpKQogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUxICsgIi5uZXciLCBmaWxlbmFtZTIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcy5wYXRoLmlzZmlsZShmaWxlbmFtZTIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUyKSkKIAogICAgICAgICBzaHV0aWwuY29weShmaWxlbmFtZTEsIGZpbGVuYW1lMiArICIubmV3IikKICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lMSArICIubmV3IikgIyByZW1vdmUgdXNpbmcgZXF1aXYgbmFtZS4KICAgICAgICAgIyBBbmQgYSBjb3VwbGUgb2YgbW92ZXMsIG9uZSB1c2luZyBlYWNoIG5hbWUuCiAgICAgICAgIHNodXRpbC5tb3ZlKGZpbGVuYW1lMSwgZmlsZW5hbWUyICsgIi5uZXciKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUyKSkKICAgICAgICAgc2h1dGlsLm1vdmUoZmlsZW5hbWUxICsgIi5uZXciLCBmaWxlbmFtZTIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZTEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZmlsZW5hbWUxKSkKICAgICAgICAgIyBOb3RlIC0gZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzaHV0aWwubW92ZSwKICAgICAgICAgIyBpdCB0cmllcyBhIHJlbmFtZSBmaXJzdC4gIFRoaXMgb25seSBmYWlscyBvbiBXaW5kb3dzIHdoZW4gb24KICAgICAgICAgIyBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIC0gYW5kIHRoaXMgdGVzdCBjYW4ndCBlbnN1cmUgdGhhdC4KQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgICAgICAgICAgIGN3ZF9yZXN1bHQgPSB1bmljb2RlZGF0YS5ub3JtYWxpemUoIk5GRCIsIGN3ZF9yZXN1bHQpCiAgICAgICAgICAgICAgICAgbmFtZV9yZXN1bHQgPSB1bmljb2RlZGF0YS5ub3JtYWxpemUoIk5GRCIsIG5hbWVfcmVzdWx0KQogCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwob3MucGF0aC5iYXNlbmFtZShjd2RfcmVzdWx0KSxuYW1lX3Jlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoY3dkX3Jlc3VsdCksbmFtZV9yZXN1bHQpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIG9zLmNoZGlyKGN3ZCkKICAgICAgICAgZmluYWxseToKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICAgICAgc2VsZi5fZG9fc2luZ2xlKGZpbGVuYW1lKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSkpCiAgICAgICAgICMgYW5kIGFnYWluIHdpdGggb3Mub3Blbi4KICAgICAgICAgZiA9IG9zLm9wZW4oZmlsZW5hbWUsIG9zLk9fQ1JFQVQpCiAgICAgICAgIG9zLmNsb3NlKGYpCkBAIC0xNTgsNyArMTU4LDcgQEAKIAogICAgIGRlZiBfdGVzdF9lcXVpdmFsZW50KHNlbGYsIGZpbGVuYW1lMSwgZmlsZW5hbWUyKToKICAgICAgICAgcmVtb3ZlX2lmX2V4aXN0cyhmaWxlbmFtZTEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3Qgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZTIpKQogICAgICAgICBmID0gZmlsZShmaWxlbmFtZTEsICJ3IikKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHRyeToKQEAgLTE3MSw4ICsxNzEsOCBAQAogICAgIGRlZiB0ZXN0X3NpbmdsZV9maWxlcyhzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9zaW5nbGUoVEVTVEZOX0VOQ09ERUQpCiAgICAgICAgIHNlbGYuX3Rlc3Rfc2luZ2xlKFRFU1RGTl9VTklDT0RFKQotICAgICAgICBpZiBURVNURk5fVU5JQ09ERV9VTkVOQ09ERUFCTEUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0X3NpbmdsZShURVNURk5fVU5JQ09ERV9VTkVOQ09ERUFCTEUpCisgICAgICAgIGlmIFRFU1RGTl9VTkVOQ09EQUJMRSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2luZ2xlKFRFU1RGTl9VTkVOQ09EQUJMRSkKIAogICAgIGRlZiB0ZXN0X2VxdWl2YWxlbnRfZmlsZXMoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3RfZXF1aXZhbGVudChURVNURk5fRU5DT0RFRCwgVEVTVEZOX1VOSUNPREUpCkBAIC0xODgsOSArMTg4LDkgQEAKICAgICAgICAgc2VsZi5fZG9fZGlyZWN0b3J5KFRFU1RGTl9VTklDT0RFK2V4dCwgVEVTVEZOX0VOQ09ERUQrZXh0LCBGYWxzZSkKICAgICAgICAgc2VsZi5fZG9fZGlyZWN0b3J5KFRFU1RGTl9VTklDT0RFK2V4dCwgVEVTVEZOX1VOSUNPREUrZXh0LCBGYWxzZSkKICAgICAgICAgIyBPdXIgZGlyZWN0b3J5IG5hbWUgdGhhdCBjYW4ndCB1c2UgYSBub24tdW5pY29kZSBuYW1lLgotICAgICAgICBpZiBURVNURk5fVU5JQ09ERV9VTkVOQ09ERUFCTEUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9kb19kaXJlY3RvcnkoVEVTVEZOX1VOSUNPREVfVU5FTkNPREVBQkxFK2V4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNURk5fVU5JQ09ERV9VTkVOQ09ERUFCTEUrZXh0LAorICAgICAgICBpZiBURVNURk5fVU5FTkNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kb19kaXJlY3RvcnkoVEVTVEZOX1VORU5DT0RBQkxFK2V4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNURk5fVU5FTkNPREFCTEUrZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKQogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQppbmRleCA1MDk2MjhiLi5jMzBlY2Y0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKQEAgLTIwLDExICsyMCwxMSBAQAogY2xhc3MgVW5pY29kZU1ldGhvZHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCi0gICAgZXhwZWN0ZWRjaGVja3N1bSA9ICc2ZWM2NWI2NTgzNTYxNGVjMDA2MzRjNjc0YmJhMGU1MGNkMzJjMTg5JworICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnNDUwNGRmZmQwMzViYWVhMDJjNWI5ZGU4MmJlYmMzZDY1ZTBlMGJhZicKIAogICAgIGRlZiB0ZXN0X21ldGhvZF9jaGVja3N1bShzZWxmKToKICAgICAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDY1NTM2KToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMHgxMDAwMCk6CiAgICAgICAgICAgICBjaGFyID0gdW5pY2hyKGkpCiAgICAgICAgICAgICBkYXRhID0gWwogICAgICAgICAgICAgICAgICMgUHJlZGljYXRlcyAoc2luZ2xlIGNoYXIpCkBAIC03OSw3ICs3OSw3IEBACiBjbGFzcyBVbmljb2RlRnVuY3Rpb25zVGVzdChVbmljb2RlRGF0YWJhc2VUZXN0KToKIAogICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCi0gICAgZXhwZWN0ZWRjaGVja3N1bSA9ICczMTM2ZDVhZmQ3ODdkYzJiY2IxYmRjYWM5NWUzODUzNDlmYmViYmNhJworICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnNmNjZjFiMWEzNjQ2MGQyNjk0ZjliMGIwZjAzMjQ5NDJmZTcwZWRlNicKIAogICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2NoZWNrc3VtKHNlbGYpOgogICAgICAgICBkYXRhID0gW10KQEAgLTExOCw2ICsxMTgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubnVtZXJpYyh1JzknKSwgOSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm51bWVyaWModSdcdTIxNWInKSwgMC4xMjUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKHUnXHUyNDY4JyksIDkuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm51bWVyaWModSdcdWE2MjcnKSwgNy4wKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubnVtZXJpYyh1J1xVMDAwMjAwMDAnLCBOb25lKSwgTm9uZSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIubnVtZXJpYykKQEAgLTIzNSw3ICsyMzYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcGVuLnJldHVybmNvZGUsIDEpCiAgICAgICAgIGVycm9yID0gIlN5bnRheEVycm9yOiAodW5pY29kZSBlcnJvcikgXE4gZXNjYXBlcyBub3Qgc3VwcG9ydGVkICIgXAogICAgICAgICAgICAgIihjYW4ndCBsb2FkIHVuaWNvZGVkYXRhIG1vZHVsZSkiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJvciBpbiBwb3Blbi5zdGRlcnIucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEluKGVycm9yLCBwb3Blbi5zdGRlcnIucmVhZCgpKQogCiAgICAgZGVmIHRlc3RfZGVjaW1hbF9udW1lcmljX2NvbnNpc3RlbnQoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGRlY2ltYWwgYW5kIG51bWVyaWMgYXJlIGNvbnNpc3RlbnQsCkBAIC0yNDgsNyArMjQ5LDcgQEAKICAgICAgICAgICAgIGlmIGRlYyAhPSAtMToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYywgc2VsZi5kYi5udW1lcmljKGMpKQogICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvdW50ID49IDEwKSAjIHNob3VsZCBoYXZlIHRlc3RlZCBhdCBsZWFzdCB0aGUgQVNDSUkgZGlnaXRzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3VudCA+PSAxMCkgIyBzaG91bGQgaGF2ZSB0ZXN0ZWQgYXQgbGVhc3QgdGhlIEFTQ0lJIGRpZ2l0cwogCiAgICAgZGVmIHRlc3RfZGlnaXRfbnVtZXJpY19jb25zaXN0ZW50KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBkaWdpdCBhbmQgbnVtZXJpYyBhcmUgY29uc2lzdGVudCwKQEAgLTI2MSwyMSArMjYyLDIxIEBACiAgICAgICAgICAgICBpZiBkZWMgIT0gLTE6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWMsIHNlbGYuZGIubnVtZXJpYyhjKSkKICAgICAgICAgICAgICAgICBjb3VudCArPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb3VudCA+PSAxMCkgIyBzaG91bGQgaGF2ZSB0ZXN0ZWQgYXQgbGVhc3QgdGhlIEFTQ0lJIGRpZ2l0cworICAgICAgICBzZWxmLmFzc2VydFRydWUoY291bnQgPj0gMTApICMgc2hvdWxkIGhhdmUgdGVzdGVkIGF0IGxlYXN0IHRoZSBBU0NJSSBkaWdpdHMKIAogICAgIGRlZiB0ZXN0X2J1Z18xNzA0NzkzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiLmxvb2t1cCgiR09USElDIExFVFRFUiBGQUlIVSIpLCB1J1xVMDAwMTAzNDYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubG9va3VwKCJHT1RISUMgTEVUVEVSIEZBSUhVIiksIHUnXFUwMDAxMDM0NicpCiAKICAgICBkZWYgdGVzdF91Y2RfNTEwKHNlbGYpOgogICAgICAgICBpbXBvcnQgdW5pY29kZWRhdGEKICAgICAgICAgIyBJbiBVQ0QgNS4xLjAsIGEgbWlycm9yZWQgcHJvcGVydHkgY2hhbmdlZCB3cnQuIFVDRCAzLjIuMAotICAgICAgICBzZWxmLmFzc2VydF8odW5pY29kZWRhdGEubWlycm9yZWQodSJcdTBmM2EiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB1bmljb2RlZGF0YS51Y2RfM18yXzAubWlycm9yZWQodSJcdTBmM2EiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVuaWNvZGVkYXRhLm1pcnJvcmVkKHUiXHUwZjNhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdW5pY29kZWRhdGEudWNkXzNfMl8wLm1pcnJvcmVkKHUiXHUwZjNhIikpCiAgICAgICAgICMgQWxzbywgd2Ugbm93IGhhdmUgdHdvIHdheXMgb2YgcmVwcmVzZW50aW5nCiAgICAgICAgICMgdGhlIHVwcGVyLWNhc2UgbWFwcGluZzogYXMgZGVsdGEsIG9yIGFzIGFic29sdXRlIHZhbHVlCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1ImEiLnVwcGVyKCk9PXUnQScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1Ilx1MWQ3OSIudXBwZXIoKT09dSdcdWE3N2QnKQotICAgICAgICBzZWxmLmFzc2VydF8odSIuIi51cHBlcigpPT11Ii4iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSJhIi51cHBlcigpPT11J0EnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSJcdTFkNzkiLnVwcGVyKCk9PXUnXHVhNzdkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUiLiIudXBwZXIoKT09dSIuIikKIAogICAgIGRlZiB0ZXN0X2J1Z181ODI4KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXHUxZDc5Ii5sb3dlcigpLCB1Ilx1MWQ3OSIpCkBAIC0yOTQsNiArMjk1LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJcdTAxYzUiLnRpdGxlKCksIHUiXHUwMWM1IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx1MDFjNiIudGl0bGUoKSwgdSJcdTAxYzUiKQogCisgICAgZGVmIHRlc3RfbGluZWJyZWFrXzc2NDMoc2VsZik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDB4MTAwMDApOgorICAgICAgICAgICAgbGluZXMgPSAodW5pY2hyKGkpICsgdSdBJykuc3BsaXRsaW5lcygpCisgICAgICAgICAgICBpZiBpIGluICgweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDg1LAorICAgICAgICAgICAgICAgICAgICAgMHgxYywgMHgxZCwgMHgxZSwgMHgyMDI4LCAweDIwMjkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpbmVzKSwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXHUlLjR4IHNob3VsZCBiZSBhIGxpbmVicmVhayIgJSBpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lcyksIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlx1JS40eCBzaG91bGQgbm90IGJlIGEgbGluZWJyZWFrIiAlIGkpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCiAgICAgICAgIFVuaWNvZGVNaXNjVGVzdCwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pdHRlc3QucHkgYi9MaWIvdGVzdC90ZXN0X3VuaXR0ZXN0LnB5CmluZGV4IDU2MjY1NDIuLjg2YTk5OGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pdHRlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bml0dGVzdC5weQpAQCAtMSwyMzAwICsxLDEyIEBACi0iIiJUZXN0IHNjcmlwdCBmb3IgdW5pdHRlc3QuCitpbXBvcnQgdW5pdHRlc3QudGVzdAogCi1CeSBDb2xsaW4gV2ludGVyIDxjb2xsaW53IGF0IGdtYWlsLmNvbT4KLQotU3RpbGwgbmVlZCB0ZXN0aW5nOgotICAgIFRlc3RDYXNlLnthc3NlcnQsZmFpbH0qIG1ldGhvZHMgKHNvbWUgYXJlIHRlc3RlZCBpbXBsaWNpdGx5KQotIiIiCi0KLWltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCi1pbXBvcnQgdHlwZXMKLQotIyMjIFN1cHBvcnQgY29kZQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1jbGFzcyBMb2dnaW5nUmVzdWx0KHVuaXR0ZXN0LlRlc3RSZXN1bHQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2cpOgotICAgICAgICBzZWxmLl9ldmVudHMgPSBsb2cKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuX19pbml0X18oKQotCi0gICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RhcnRUZXN0JykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RhcnRUZXN0KHRlc3QpCi0KLSAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0b3BUZXN0JykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RvcFRlc3QodGVzdCkKLQotICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRmFpbHVyZScpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZEZhaWx1cmUoKmFyZ3MpCi0KLSAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFcnJvcicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZEVycm9yKCphcmdzKQotCi1jbGFzcyBUZXN0RXF1YWxpdHkob2JqZWN0KToKLSAgICAjIENoZWNrIGZvciBhIHZhbGlkIF9fZXFfXyBpbXBsZW1lbnRhdGlvbgotICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgotICAgICAgICBmb3Igb2JqXzEsIG9ial8yIGluIHNlbGYuZXFfcGFpcnM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9ial8xLCBvYmpfMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqXzIsIG9ial8xKQotCi0gICAgIyBDaGVjayBmb3IgYSB2YWxpZCBfX25lX18gaW1wbGVtZW50YXRpb24KLSAgICBkZWYgdGVzdF9uZShzZWxmKToKLSAgICAgICAgZm9yIG9ial8xLCBvYmpfMiBpbiBzZWxmLm5lX3BhaXJzOgotICAgICAgICAgICAgc2VsZi5mYWlsSWZFcXVhbChvYmpfMSwgb2JqXzIpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKG9ial8yLCBvYmpfMSkKLQotY2xhc3MgVGVzdEhhc2hpbmcob2JqZWN0KToKLSAgICAjIENoZWNrIGZvciBhIHZhbGlkIF9faGFzaF9fIGltcGxlbWVudGF0aW9uCi0gICAgZGVmIHRlc3RfaGFzaChzZWxmKToKLSAgICAgICAgZm9yIG9ial8xLCBvYmpfMiBpbiBzZWxmLmVxX3BhaXJzOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGFzc2VydCBoYXNoKG9ial8xKSA9PSBoYXNoKG9ial8yKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyBhbmQgJXMgZG8gbm90IGhhc2ggZXF1YWwiICUgKG9ial8xLCBvYmpfMikpCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUHJvYmxlbSBoYXNoaW5nICVzIGFuZCAlczogJXMiICUgKG9ial8xLCBvYmpfMiwgZSkpCi0KLSAgICAgICAgZm9yIG9ial8xLCBvYmpfMiBpbiBzZWxmLm5lX3BhaXJzOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGFzc2VydCBoYXNoKG9ial8xKSAhPSBoYXNoKG9ial8yKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyBhbmQgJXMgaGFzaCBlcXVhbCwgYnV0IHNob3VsZG4ndCIgJSAob2JqXzEsIG9ial8yKSkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQcm9ibGVtIGhhc2hpbmcgJXMgYW5kICVzOiAlcyIgJSAob2JqXzEsIG9ial8yLCBlKSkKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyMgL1N1cHBvcnQgY29kZQotCi1jbGFzcyBUZXN0X1Rlc3RMb2FkZXIoVGVzdENhc2UpOgotCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIFRlc3RDYXNlLWRlcml2ZWQKLSAgICAjIGNsYXNzIHRlc3RDYXNlQ2xhc3MiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKLQotICAgICAgICB0ZXN0cyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0cykKLQotICAgICMgIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIFRlc3RDYXNlLWRlcml2ZWQKLSAgICAjIGNsYXNzIHRlc3RDYXNlQ2xhc3MiCi0gICAgIwotICAgICMgTWFrZSBzdXJlIGl0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGV2ZW4gaWYgbm8gdGVzdHMgd2VyZSBmb3VuZAotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21UZXN0Q2FzZV9fbm9fbWF0Y2hlcyhzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgZW1wdHlfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgZW1wdHlfc3VpdGUpCi0KLSAgICAjICJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBUZXN0Q2FzZS1kZXJpdmVkCi0gICAgIyBjbGFzcyB0ZXN0Q2FzZUNsYXNzIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyBpZiBsb2FkVGVzdHNGcm9tVGVzdENhc2UoKSBpcyBnaXZlbiBhbiBvYmplY3QKLSAgICAjIHRoYXQgaXNuJ3QgYSBzdWJjbGFzcyBvZiBUZXN0Q2FzZT8gU3BlY2lmaWNhbGx5LCB3aGF0IGhhcHBlbnMKLSAgICAjIGlmIHRlc3RDYXNlQ2xhc3MgaXMgYSBzdWJjbGFzcyBvZiBUZXN0U3VpdGU/Ci0gICAgIwotICAgICMgVGhpcyBpcyBjaGVja2VkIGZvciBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvZGUsIHNvIHdlIGJldHRlciBhZGQgYQotICAgICMgdGVzdCBmb3IgaXQuCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlX19UZXN0U3VpdGVfc3ViY2xhc3Moc2VsZik6Ci0gICAgICAgIGNsYXNzIE5vdEFUZXN0Q2FzZSh1bml0dGVzdC5UZXN0U3VpdGUpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKE5vdEFUZXN0Q2FzZSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnU2hvdWxkIHJhaXNlIFR5cGVFcnJvcicpCi0KLSAgICAjICJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBUZXN0Q2FzZS1kZXJpdmVkCi0gICAgIyBjbGFzcyB0ZXN0Q2FzZUNsYXNzIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSBsb2FkVGVzdHNGcm9tVGVzdENhc2UoKSBwaWNrcyB1cCB0aGUgZGVmYXVsdCB0ZXN0IG1ldGhvZAotICAgICMgbmFtZSAoYXMgc3BlY2lmaWVkIGJ5IFRlc3RDYXNlKSwgZXZlbiB0aG91Z2ggdGhlIG1ldGhvZCBuYW1lIGRvZXMKLSAgICAjIG5vdCBtYXRjaCB0aGUgZGVmYXVsdCBUZXN0TG9hZGVyLnRlc3RNZXRob2RQcmVmaXggc3RyaW5nCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlX19kZWZhdWx0X21ldGhvZF9uYW1lKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICAjIFRoaXMgaGFzIHRvIGJlIGZhbHNlIGZvciB0aGUgdGVzdCB0byBzdWNjZWVkCi0gICAgICAgIHNlbGYuZmFpbElmKCdydW5UZXN0Jy5zdGFydHN3aXRoKGxvYWRlci50ZXN0TWV0aG9kUHJlZml4KSkKLQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbRm9vKCdydW5UZXN0JyldKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlCi0KLSAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgIlRoaXMgbWV0aG9kIHNlYXJjaGVzIGBtb2R1bGVgIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbSBUZXN0Q2FzZSIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19UZXN0Q2FzZV9zdWJjbGFzcyhzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbbG9hZGVyLnN1aXRlQ2xhc3MoW015VGVzdENhc2UoJ3Rlc3QnKV0pXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBleHBlY3RlZCkKLQotICAgICMgIlRoaXMgbWV0aG9kIHNlYXJjaGVzIGBtb2R1bGVgIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbSBUZXN0Q2FzZSIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgaWYgbm8gdGVzdHMgYXJlIGZvdW5kIChubyBUZXN0Q2FzZSBpbnN0YW5jZXMpPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX25vX1Rlc3RDYXNlX2luc3RhbmNlcyhzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtdKQotCi0gICAgIyAiVGhpcyBtZXRob2Qgc2VhcmNoZXMgYG1vZHVsZWAgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIFRlc3RDYXNlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyBpZiBubyB0ZXN0cyBhcmUgZm91bmQgKFRlc3RDYXNlcyBpbnN0YW5jZXMsIGJ1dCBubyB0ZXN0cyk/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fbm9fVGVzdENhc2VfdGVzdHMoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtsb2FkZXIuc3VpdGVDbGFzcygpXSkKLQotICAgICMgIlRoaXMgbWV0aG9kIHNlYXJjaGVzIGBtb2R1bGVgIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbSBUZXN0Q2FzZSJzCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIGlmIGxvYWRUZXN0c0Zyb21Nb2R1bGUoKSBpcyBnaXZlbiBzb21ldGhpbmcgb3RoZXIKLSAgICAjIHRoYW4gYSBtb2R1bGU/Ci0gICAgIwotICAgICMgWFhYIEN1cnJlbnRseSwgaXQgc3VjY2VlZHMgYW55d2F5LiBUaGlzIGZsZXhpYmlsaXR5Ci0gICAgIyBzaG91bGQgZWl0aGVyIGJlIGRvY3VtZW50ZWQgb3IgbG9hZFRlc3RzRnJvbU1vZHVsZSgpIHNob3VsZAotICAgICMgcmFpc2UgYSBUeXBlRXJyb3IKLSAgICAjCi0gICAgIyBYWFggQ2VydGFpbiBwZW9wbGUgYXJlIHVzaW5nIHRoaXMgYmVoYXZpb3VyLiBXZSdsbCBhZGQgYSB0ZXN0IGZvciBpdAotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX25vdF9hX21vZHVsZShzZWxmKToKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgY2xhc3MgTm90QU1vZHVsZShvYmplY3QpOgotICAgICAgICAgICAgdGVzdF8yID0gTXlUZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKE5vdEFNb2R1bGUpCi0KLSAgICAgICAgcmVmZXJlbmNlID0gW3VuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIHJlZmVyZW5jZSkKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoKQotCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCkKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMKLSAgICAjIElzIFZhbHVlRXJyb3IgcmFpc2VkIGluIHJlc3BvbnNlIHRvIGFuIGVtcHR5IG5hbWU/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX2VtcHR5X25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnJykKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIkVtcHR5IG1vZHVsZSBuYW1lIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycz8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fbWFsZm9ybWVkX25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIFZhbHVlRXJyb3Igb3IgSW1wb3J0RXJyb3I/Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnYWJjICgpIC8vJykKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8gYQotICAgICMgbW9kdWxlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIGEgbW9kdWxlIGJ5IHRoYXQgbmFtZSBjYW4ndCBiZSBmb3VuZD8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fdW5rbm93bl9tb2R1bGVfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdzZGFzZmFzZmFzZGYnKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIk5vIG1vZHVsZSBuYW1lZCBzZGFzZmFzZmFzZGYiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBJbXBvcnRFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBtb2R1bGUgaXMgZm91bmQsIGJ1dCB0aGUgYXR0cmlidXRlIGNhbid0PwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX191bmtub3duX2F0dHJfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd1bml0dGVzdC5zZGFzZmFzZmFzZGYnKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB3ZSBwcm92aWRlIHRoZSBtb2R1bGUsIGJ1dCB0aGUgYXR0cmlidXRlIGNhbid0IGJlCi0gICAgIyBmb3VuZD8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfdW5rbm93bl9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3NkYXNmYXNmYXNkZicsIHVuaXR0ZXN0KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjIC4uLgotICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCi0gICAgIwotICAgICMgRG9lcyBsb2FkVGVzdHNGcm9tTmFtZSByYWlzZSBWYWx1ZUVycm9yIHdoZW4gcGFzc2VkIGFuIGVtcHR5Ci0gICAgIyBuYW1lIHJlbGF0aXZlIHRvIGEgcHJvdmlkZWQgbW9kdWxlPwotICAgICMKLSAgICAjIFhYWCBTaG91bGQgcHJvYmFibHkgcmFpc2UgYSBWYWx1ZUVycm9yIGluc3RlYWQgb2YgYW4gQXR0cmlidXRlRXJyb3IKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfZW1wdHlfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCcnLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjIC4uLgotICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gYW4gaW1wb3NzaWJsZSBuYW1lIGlzIGdpdmVuLCByZWxhdGl2ZSB0byB0aGUgcHJvdmlkZWQKLSAgICAjIGBtb2R1bGVgPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9tYWxmb3JtZWRfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgQXR0cmlidXRlRXJyb3Igb3IgVmFsdWVFcnJvcj8KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdhYmMgKCkgLy8nLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCi0KLSAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgotICAgICMKLSAgICAjIERvZXMgbG9hZFRlc3RzRnJvbU5hbWUgcmFpc2UgVHlwZUVycm9yIHdoZW4gdGhlIGBtb2R1bGVgIGFyZ3VtZW50Ci0gICAgIyBpc24ndCBhIG1vZHVsZSBvYmplY3Q/Ci0gICAgIwotICAgICMgWFhYIEFjY2VwdHMgdGhlIG5vdC1hLW1vZHVsZSBvYmplY3QsIGlnbm9ybmluZyB0aGUgb2JqZWN0J3MgdHlwZQotICAgICMgVGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIG9yIHRoZSBtZXRob2QgbmFtZSBzaG91bGQgYmUgY2hhbmdlZAotICAgICMKLSAgICAjIFhYWCBTb21lIHBlb3BsZSBhcmUgcmVseWluZyBvbiB0aGlzLCBzbyBrZWVwIGl0IGZvciBub3cKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfbm90X2FfbW9kdWxlKHNlbGYpOgotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6Ci0gICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0XzInLCBOb3RBTW9kdWxlKQotCi0gICAgICAgIHJlZmVyZW5jZSA9IFtNeVRlc3RDYXNlKCd0ZXN0JyldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIHJlZmVyZW5jZSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgRG9lcyBpdCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIG5hbWUgcmVzb2x2ZXMgdG8gYW4gaW52YWxpZAotICAgICMgb2JqZWN0PwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9iYWRfb2JqZWN0KHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIG0udGVzdGNhc2VfMSA9IG9iamVjdCgpCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMScsIG0pCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBUeXBlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5Ci0gICAgIyByZXNvbHZlIGVpdGhlciB0byAuLi4gYSB0ZXN0IGNhc2UgY2xhc3MiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xJywgbSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW015VGVzdENhc2UoJ3Rlc3QnKV0pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9UZXN0U3VpdGUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIG0udGVzdHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdHN1aXRlJywgbSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbTXlUZXN0Q2FzZSgndGVzdCcpXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bwotICAgICMgLi4uIGEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV90ZXN0bWV0aG9kKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xLnRlc3QnLCBtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtNeVRlc3RDYXNlKCd0ZXN0JyldKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lKCkgcmFpc2UgdGhlIHByb3BlciBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8KLSAgICAjIHJlc29sdmUgImEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiB0aGF0IGRvZXNuJ3QgZXhpc3QKLSAgICAjIGZvciB0aGUgZ2l2ZW4gbmFtZSAocmVsYXRpdmUgdG8gYSBwcm92aWRlZCBtb2R1bGUpPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9pbnZhbGlkX3Rlc3RtZXRob2Qoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xLnRlc3Rmb28nLCBtKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgInR5cGUgb2JqZWN0ICdNeVRlc3RDYXNlJyBoYXMgbm8gYXR0cmlidXRlICd0ZXN0Zm9vJyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KLSAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgLi4uIFRlc3RTdWl0ZSBpbnN0YW5jZSIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fY2FsbGFibGVfX1Rlc3RTdWl0ZShzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIHRlc3RjYXNlXzIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgZGVmIHJldHVybl9UZXN0U3VpdGUoKToKLSAgICAgICAgICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQotICAgICAgICBtLnJldHVybl9UZXN0U3VpdGUgPSByZXR1cm5fVGVzdFN1aXRlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdyZXR1cm5fVGVzdFN1aXRlJywgbSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCi0gICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIC4uLiBpbnN0YW5jZSIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fY2FsbGFibGVfX1Rlc3RDYXNlX2luc3RhbmNlKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIHRlc3RjYXNlXzEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgZGVmIHJldHVybl9UZXN0Q2FzZSgpOgotICAgICAgICAgICAgcmV0dXJuIHRlc3RjYXNlXzEKLSAgICAgICAgbS5yZXR1cm5fVGVzdENhc2UgPSByZXR1cm5fVGVzdENhc2UKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3JldHVybl9UZXN0Q2FzZScsIG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt0ZXN0Y2FzZV8xXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bwotICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UiCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIGlmIHRoZSBjYWxsYWJsZSByZXR1cm5zIHNvbWV0aGluZyBlbHNlPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fd3JvbmdfdHlwZShzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBkZWYgcmV0dXJuX3dyb25nKCk6Ci0gICAgICAgICAgICByZXR1cm4gNgotICAgICAgICBtLnJldHVybl93cm9uZyA9IHJldHVybl93cm9uZwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgncmV0dXJuX3dyb25nJywgbSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgY2FuIHJlZmVyIHRvIG1vZHVsZXMgYW5kIHBhY2thZ2VzIHdoaWNoIGhhdmUgbm90IGJlZW4KLSAgICAjIGltcG9ydGVkOyB0aGV5IHdpbGwgYmUgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdCIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fbW9kdWxlX25vdF9sb2FkZWQoc2VsZik6Ci0gICAgICAgICMgV2UncmUgZ29pbmcgdG8gdHJ5IHRvIGxvYWQgdGhpcyBtb2R1bGUgYXMgYSBzaWRlLWVmZmVjdCwgc28gaXQKLSAgICAgICAgIyBiZXR0ZXIgbm90IGJlIGxvYWRlZCBiZWZvcmUgd2UgdHJ5LgotICAgICAgICAjCi0gICAgICAgICMgV2h5IHBpY2sgYXVkaW9vcD8gR29vZ2xlIHNob3dzIGl0IGlzbid0IHVzZWQgdmVyeSBvZnRlbiwgc28gdGhlcmUncwotICAgICAgICAjIGEgZ29vZCBjaGFuY2UgdGhhdCBpdCB3b24ndCBiZSBpbXBvcnRlZCB3aGVuIHRoaXMgdGVzdCBpcyBydW4KLSAgICAgICAgbW9kdWxlX25hbWUgPSAnYXVkaW9vcCcKLQotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZShtb2R1bGVfbmFtZSkKLQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtdKQotCi0gICAgICAgICAgICAjIGF1ZGlvb3Agc2hvdWxkIG5vdyBiZSBsb2FkZWQsIHRoYW5rcyB0byBsb2FkVGVzdHNGcm9tTmFtZSgpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MobW9kdWxlX25hbWUgaW4gc3lzLm1vZHVsZXMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCkKLQotICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoKQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgIlNpbWlsYXIgdG8gbG9hZFRlc3RzRnJvbU5hbWUoKSwgYnV0IHRha2VzIGEgc2VxdWVuY2Ugb2YgbmFtZXMgcmF0aGVyCi0gICAgIyB0aGFuIGEgc2luZ2xlIG5hbWUuIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyBpZiB0aGF0IHNlcXVlbmNlIG9mIG5hbWVzIGlzIGVtcHR5PwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fZW1wdHlfbmFtZV9saXN0KHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoW10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtdKQotCi0gICAgIyAiU2ltaWxhciB0byBsb2FkVGVzdHNGcm9tTmFtZSgpLCBidXQgdGFrZXMgYSBzZXF1ZW5jZSBvZiBuYW1lcyByYXRoZXIKLSAgICAjIHRoYW4gYSBzaW5nbGUgbmFtZS4iCi0gICAgIyAuLi4KLSAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyBpZiB0aGF0IHNlcXVlbmNlIG9mIG5hbWVzIGlzIGVtcHR5PwotICAgICMKLSAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBhIFZhbHVlRXJyb3Igb3IganVzdCByZXR1cm4gYW4gZW1wdHkgVGVzdFN1aXRlPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfZW1wdHlfbmFtZV9saXN0KHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoW10sIHVuaXR0ZXN0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgSXMgVmFsdWVFcnJvciByYWlzZWQgaW4gcmVzcG9uc2UgdG8gYW4gZW1wdHkgbmFtZT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2VtcHR5X25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWycnXSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIkVtcHR5IG1vZHVsZSBuYW1lIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBwcmVzZW50ZWQgd2l0aCBhbiBpbXBvc3NpYmxlIG1vZHVsZSBuYW1lPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fbWFsZm9ybWVkX25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIFZhbHVlRXJyb3Igb3IgSW1wb3J0RXJyb3I/Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydhYmMgKCkgLy8nXSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBubyBtb2R1bGUgY2FuIGJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbmFtZT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fbW9kdWxlX25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydzZGFzZmFzZmFzZGYnXSkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyBtb2R1bGUgbmFtZWQgc2Rhc2Zhc2Zhc2RmIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIEltcG9ydEVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIG1vZHVsZSBjYW4gYmUgZm91bmQsIGJ1dCBub3QgdGhlIGF0dHJpYnV0ZT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fYXR0cl9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndW5pdHRlc3Quc2Rhc2Zhc2Zhc2RmJywgJ3VuaXR0ZXN0J10pCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjIC4uLgotICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gZ2l2ZW4gYW4gdW5rbm93biBhdHRyaWJ1dGUgb24gYSBzcGVjaWZpZWQgYG1vZHVsZWAKLSAgICAjIGFyZ3VtZW50PwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fdW5rbm93bl9uYW1lX3JlbGF0aXZlXzEoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydzZGFzZmFzZmFzZGYnXSwgdW5pdHRlc3QpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMgLi4uCi0gICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKLSAgICAjCi0gICAgIyBEbyB1bmtub3duIGF0dHJpYnV0ZXMgKHJlbGF0aXZlIHRvIGEgcHJvdmlkZWQgbW9kdWxlKSBzdGlsbCByYWlzZSBhbgotICAgICMgZXhjZXB0aW9uIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHZhbGlkIGF0dHJpYnV0ZSBuYW1lcz8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fbmFtZV9yZWxhdGl2ZV8yKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnVGVzdENhc2UnLCAnc2Rhc2Zhc2Zhc2RmJ10sIHVuaXR0ZXN0KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjIC4uLgotICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gZmFjZWQgd2l0aCB0aGUgZW1wdHkgc3RyaW5nPwotICAgICMKLSAgICAjIFhYWCBUaGlzIGN1cnJlbnRseSByYWlzZXMgQXR0cmlidXRlRXJyb3IsIHRob3VnaCBWYWx1ZUVycm9yIGlzIHByb2JhYmx5Ci0gICAgIyBtb3JlIGFwcHJvcHJpYXRlCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9lbXB0eV9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnJ10sIHVuaXR0ZXN0KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIyAuLi4KLSAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIGltcG9zc2libGUgYXR0cmlidXRlIG5hbWU/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9tYWxmb3JtZWRfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgQXR0cmlidXRlRXJyb3Igb3IgVmFsdWVFcnJvcj8KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ2FiYyAoKSAvLyddLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQotCi0gICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKLSAgICAjCi0gICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lcygpIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgYG1vZHVsZWAgaXMgaW4gZmFjdAotICAgICMgYSBtb2R1bGU/Ci0gICAgIwotICAgICMgWFhYIFRoaXMgdmFsaWRhdGlvbiBpcyBjdXJyZW50bHkgbm90IGRvbmUuIFRoaXMgZmxleGliaWxpdHkgc2hvdWxkCi0gICAgIyBlaXRoZXIgYmUgZG9jdW1lbnRlZCBvciBhIFR5cGVFcnJvciBzaG91bGQgYmUgcmFpc2VkLgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfbm90X2FfbW9kdWxlKHNlbGYpOgotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6Ci0gICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RfMiddLCBOb3RBTW9kdWxlKQotCi0gICAgICAgIHJlZmVyZW5jZSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCByZWZlcmVuY2UpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMKLSAgICAjIERvZXMgaXQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBuYW1lIHJlc29sdmVzIHRvIGFuIGludmFsaWQKLSAgICAjIG9iamVjdD8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX2JhZF9vYmplY3Qoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgbS50ZXN0Y2FzZV8xID0gb2JqZWN0KCkKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEnXSwgbSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIFR5cGVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KLSAgICAjIC4uLiBhIHRlc3QgY2FzZSBjbGFzcyIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEnXSwgbSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICBleHBlY3RlZCA9IGxvYWRlci5zdWl0ZUNsYXNzKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbZXhwZWN0ZWRdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCi0gICAgIyAuLi4gYSBUZXN0U3VpdGUgaW5zdGFuY2UiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9UZXN0U3VpdGUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIG0udGVzdHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0c3VpdGUnXSwgbSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbbS50ZXN0c3VpdGVdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvIC4uLiBhCi0gICAgIyB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV90ZXN0bWV0aG9kKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdCddLCBtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotCi0gICAgICAgIHJlZl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8gLi4uIGEKLSAgICAjIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIKLSAgICAjCi0gICAgIyBEb2VzIHRoZSBtZXRob2QgZ3JhY2VmdWxseSBoYW5kbGUgbmFtZXMgdGhhdCBpbml0aWFsbHkgbG9vayBsaWtlIHRoZXkKLSAgICAjIHJlc29sdmUgdG8gImEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiBidXQgZG9uJ3Q/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9pbnZhbGlkX3Rlc3RtZXRob2Qoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdGZvbyddLCBtKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgInR5cGUgb2JqZWN0ICdNeVRlc3RDYXNlJyBoYXMgbm8gYXR0cmlidXRlICd0ZXN0Zm9vJyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KLSAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgLi4uIFRlc3RTdWl0ZSBpbnN0YW5jZSIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2NhbGxhYmxlX19UZXN0U3VpdGUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgdGVzdGNhc2VfMSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICB0ZXN0Y2FzZV8yID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIGRlZiByZXR1cm5fVGVzdFN1aXRlKCk6Ci0gICAgICAgICAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xLCB0ZXN0Y2FzZV8yXSkKLSAgICAgICAgbS5yZXR1cm5fVGVzdFN1aXRlID0gcmV0dXJuX1Rlc3RTdWl0ZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydyZXR1cm5fVGVzdFN1aXRlJ10sIG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbZXhwZWN0ZWRdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCi0gICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIC4uLiBpbnN0YW5jZSIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2NhbGxhYmxlX19UZXN0Q2FzZV9pbnN0YW5jZShzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIGRlZiByZXR1cm5fVGVzdENhc2UoKToKLSAgICAgICAgICAgIHJldHVybiB0ZXN0Y2FzZV8xCi0gICAgICAgIG0ucmV0dXJuX1Rlc3RDYXNlID0gcmV0dXJuX1Rlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3JldHVybl9UZXN0Q2FzZSddLCBtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotCi0gICAgICAgIHJlZl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdGNhc2VfMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtyZWZfc3VpdGVdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCi0gICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZSIKLSAgICAjCi0gICAgIyBBcmUgc3RhdGljbWV0aG9kcyBoYW5kbGVkIGNvcnJlY3RseT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2NhbGxhYmxlX19jYWxsX3N0YXRpY21ldGhvZChzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgdGVzdGNhc2VfMSA9IFRlc3QxKCd0ZXN0JykKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBmb28oKToKLSAgICAgICAgICAgICAgICByZXR1cm4gdGVzdGNhc2VfMQotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28uZm9vJ10sIG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0KLSAgICAgICAgcmVmX3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KLSAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBjYWxsYWJsZSByZXR1cm5zIHNvbWV0aGluZyBlbHNlPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX3dyb25nX3R5cGUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgZGVmIHJldHVybl93cm9uZygpOgotICAgICAgICAgICAgcmV0dXJuIDYKLSAgICAgICAgbS5yZXR1cm5fd3JvbmcgPSByZXR1cm5fd3JvbmcKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsncmV0dXJuX3dyb25nJ10sIG0pCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBjYW4gcmVmZXIgdG8gbW9kdWxlcyBhbmQgcGFja2FnZXMgd2hpY2ggaGF2ZSBub3QgYmVlbgotICAgICMgaW1wb3J0ZWQ7IHRoZXkgd2lsbCBiZSBpbXBvcnRlZCBhcyBhIHNpZGUtZWZmZWN0IgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fbW9kdWxlX25vdF9sb2FkZWQoc2VsZik6Ci0gICAgICAgICMgV2UncmUgZ29pbmcgdG8gdHJ5IHRvIGxvYWQgdGhpcyBtb2R1bGUgYXMgYSBzaWRlLWVmZmVjdCwgc28gaXQKLSAgICAgICAgIyBiZXR0ZXIgbm90IGJlIGxvYWRlZCBiZWZvcmUgd2UgdHJ5LgotICAgICAgICAjCi0gICAgICAgICMgV2h5IHBpY2sgYXVkaW9vcD8gR29vZ2xlIHNob3dzIGl0IGlzbid0IHVzZWQgdmVyeSBvZnRlbiwgc28gdGhlcmUncwotICAgICAgICAjIGEgZ29vZCBjaGFuY2UgdGhhdCBpdCB3b24ndCBiZSBpbXBvcnRlZCB3aGVuIHRoaXMgdGVzdCBpcyBydW4KLSAgICAgICAgbW9kdWxlX25hbWUgPSAnYXVkaW9vcCcKLQotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoW21vZHVsZV9uYW1lXSkKLQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt1bml0dGVzdC5UZXN0U3VpdGUoKV0pCi0KLSAgICAgICAgICAgICMgYXVkaW9vcCBzaG91bGQgbm93IGJlIGxvYWRlZCwgdGhhbmtzIHRvIGxvYWRUZXN0c0Zyb21OYW1lKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcygpCi0KLSAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1lcygpCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgIyAiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcyIKLSAgICAjCi0gICAgIyBUZXN0LmZvb2JhciBpcyBkZWZpbmVkIHRvIG1ha2Ugc3VyZSBnZXRUZXN0Q2FzZU5hbWVzKCkgcmVzcGVjdHMKLSAgICAjIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4Ci0gICAgZGVmIHRlc3RfZ2V0VGVzdENhc2VOYW1lcyhzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgZm9vYmFyKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhUZXN0KSwgWyd0ZXN0XzEnLCAndGVzdF8yJ10pCi0KLSAgICAjICJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzIgotICAgICMKLSAgICAjIERvZXMgZ2V0VGVzdENhc2VOYW1lcygpIGJlaGF2ZSBhcHByb3ByaWF0ZWx5IGlmIG5vIHRlc3RzIGFyZSBmb3VuZD8KLSAgICBkZWYgdGVzdF9nZXRUZXN0Q2FzZU5hbWVzX19ub190ZXN0cyhzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgZm9vYmFyKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhUZXN0KSwgW10pCi0KLSAgICAjICJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzIgotICAgICMKLSAgICAjIEFyZSBub3QtVGVzdENhc2VzIGhhbmRsZWQgZ3JhY2VmdWxseT8KLSAgICAjCi0gICAgIyBYWFggVGhpcyBzaG91bGQgcmFpc2UgYSBUeXBlRXJyb3IsIG5vdCByZXR1cm4gYSBsaXN0Ci0gICAgIwotICAgICMgWFhYIEl0J3MgdG9vIGxhdGUgaW4gdGhlIDIuNSByZWxlYXNlIGN5Y2xlIHRvIGZpeCB0aGlzLCBidXQgaXQgc2hvdWxkCi0gICAgIyBwcm9iYWJseSBiZSByZXZpc2l0ZWQgZm9yIDIuNgotICAgIGRlZiB0ZXN0X2dldFRlc3RDYXNlTmFtZXNfX25vdF9hX1Rlc3RDYXNlKHNlbGYpOgotICAgICAgICBjbGFzcyBCYWRDYXNlKGludCk6Ci0gICAgICAgICAgICBkZWYgdGVzdF9mb28oc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBuYW1lcyA9IGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKEJhZENhc2UpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lcywgWyd0ZXN0X2ZvbyddKQotCi0gICAgIyAiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcyIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgaW5oZXJpdGVkIG5hbWVzIGFyZSBoYW5kbGVkLgotICAgICMKLSAgICAjIFRlc3RQLmZvb2JhciBpcyBkZWZpbmVkIHRvIG1ha2Ugc3VyZSBnZXRUZXN0Q2FzZU5hbWVzKCkgcmVzcGVjdHMKLSAgICAjIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4Ci0gICAgZGVmIHRlc3RfZ2V0VGVzdENhc2VOYW1lc19faW5oZXJpdGFuY2Uoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3RQKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29iYXIoc2VsZik6IHBhc3MKLQotICAgICAgICBjbGFzcyBUZXN0QyhUZXN0UCk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8zKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgbmFtZXMgPSBbJ3Rlc3RfMScsICd0ZXN0XzInLCAndGVzdF8zJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhUZXN0QyksIG5hbWVzKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1lcygpCi0KLSAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeAotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgIlN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcwotICAgICMgdGVzdCBtZXRob2RzIgotICAgICMKLSAgICAjIEltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGlzIHRoYXQgdGVzdE1ldGhvZFByZWZpeCBpcyByZXNwZWN0ZWQgYnkKLSAgICAjIGFsbCBsb2FkVGVzdHNGcm9tKiBtZXRob2RzLgotICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2xvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgdGVzdHNfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKQotICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSkKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHNfMSkKLQotICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHNfMikKLQotICAgICMgIlN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcwotICAgICMgdGVzdCBtZXRob2RzIgotICAgICMKLSAgICAjIEltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGlzIHRoYXQgdGVzdE1ldGhvZFByZWZpeCBpcyByZXNwZWN0ZWQgYnkKLSAgICAjIGFsbCBsb2FkVGVzdHNGcm9tKiBtZXRob2RzLgotICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2xvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0gICAgICAgIG0uRm9vID0gRm9vCi0KLSAgICAgICAgdGVzdHNfMSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygnZm9vX2JhcicpXSldCi0gICAgICAgIHRlc3RzXzIgPSBbdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSldCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ2ZvbycKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pKSwgdGVzdHNfMSkKLQotICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkpLCB0ZXN0c18yKQotCi0gICAgIyAiU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzCi0gICAgIyB0ZXN0IG1ldGhvZHMiCi0gICAgIwotICAgICMgSW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgdGhhdCB0ZXN0TWV0aG9kUHJlZml4IGlzIHJlc3BlY3RlZCBieQotICAgICMgYWxsIGxvYWRUZXN0c0Zyb20qIG1ldGhvZHMuCi0gICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fbG9hZFRlc3RzRnJvbU5hbWUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0gICAgICAgIG0uRm9vID0gRm9vCi0KLSAgICAgICAgdGVzdHNfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKQotICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSkKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzXzEpCi0KLSAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ0ZvbycsIG0pLCB0ZXN0c18yKQotCi0gICAgIyAiU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzCi0gICAgIyB0ZXN0IG1ldGhvZHMiCi0gICAgIwotICAgICMgSW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgdGhhdCB0ZXN0TWV0aG9kUHJlZml4IGlzIHJlc3BlY3RlZCBieQotICAgICMgYWxsIGxvYWRUZXN0c0Zyb20qIG1ldGhvZHMuCi0gICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIHRlc3RzXzEgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3VuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKV0pCi0gICAgICAgIHRlc3RzXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKQotICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0c18yXSkKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28nXSwgbSksIHRlc3RzXzEpCi0KLSAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pLCB0ZXN0c18yKQotCi0gICAgIyAiVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ3Rlc3QnIgotICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2RlZmF1bHRfdmFsdWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPT0gJ3Rlc3QnKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeAotCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgotICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKLSAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgotICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgotICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKLQotICAgICAgICB0ZXN0cyA9IGxvYWRlci5zdWl0ZUNsYXNzKFtGb28oJ3Rlc3RfMicpLCBGb28oJ3Rlc3RfMScpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzKQotCi0gICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgotICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKLSAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmKToKLSAgICAgICAgZGVmIHJldmVyc2VkX2NtcCh4LCB5KToKLSAgICAgICAgICAgIHJldHVybiAtY21wKHgsIHkpCi0KLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKLQotICAgICAgICB0ZXN0cyA9IFtsb2FkZXIuc3VpdGVDbGFzcyhbRm9vKCd0ZXN0XzInKSwgRm9vKCd0ZXN0XzEnKV0pXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkpLCB0ZXN0cykKLQotICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KLSAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSBhbmQgYWxsIHRoZSBsb2FkVGVzdHNGcm9tWCgpIG1ldGhvZHMiCi0gICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2xvYWRUZXN0c0Zyb21OYW1lKHNlbGYpOgotICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgotICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKLQotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgIG0uRm9vID0gRm9vCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAotCi0gICAgICAgIHRlc3RzID0gbG9hZGVyLnN1aXRlQ2xhc3MoW0ZvbygndGVzdF8yJyksIEZvbygndGVzdF8xJyldKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzKQotCi0gICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgotICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKLSAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYpOgotICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgotICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKLQotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgIG0uRm9vID0gRm9vCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAotCi0gICAgICAgIHRlc3RzID0gW2xvYWRlci5zdWl0ZUNsYXNzKFtGb28oJ3Rlc3RfMicpLCBGb28oJ3Rlc3RfMScpXSldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pKSwgdGVzdHMpCi0KLSAgICAjICJGdW5jdGlvbiB0byBiZSB1c2VkIHRvIGNvbXBhcmUgbWV0aG9kIG5hbWVzIHdoZW4gc29ydGluZyB0aGVtIGluCi0gICAgIyBnZXRUZXN0Q2FzZU5hbWVzKCkiCi0gICAgIwotICAgICMgRG9lcyBpdCBhY3R1YWxseSBhZmZlY3QgZ2V0VGVzdENhc2VOYW1lcygpPwotICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19nZXRUZXN0Q2FzZU5hbWVzKHNlbGYpOgotICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgotICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKLQotICAgICAgICB0ZXN0X25hbWVzID0gWyd0ZXN0XzInLCAndGVzdF8xJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhGb28pLCB0ZXN0X25hbWVzKQotCi0gICAgIyAiVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGJ1aWx0LWluIGNtcCgpIGZ1bmN0aW9uIgotICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19kZWZhdWx0X3ZhbHVlKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyBpcyBjbXApCi0KLSAgICAjICJpdCBjYW4gYmUgc2V0IHRvIE5vbmUgdG8gZGlzYWJsZSB0aGUgc29ydC4iCi0gICAgIwotICAgICMgWFhYIEhvdyBpcyB0aGlzIGRpZmZlcmVudCBmcm9tIHJlYXNzaWduaW5nIGNtcD8gQXJlIHRoZSB0ZXN0cyByZXR1cm5lZAotICAgICMgaW4gYSByYW5kb20gb3JkZXIgb3Igc29tZXRoaW5nPyBUaGlzIGJlaGF2aW91ciBzaG91bGQgZGllCi0gICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX05vbmUoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKLQotICAgICAgICB0ZXN0X25hbWVzID0gWyd0ZXN0XzInLCAndGVzdF8xJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoRm9vKSksIHNldCh0ZXN0X25hbWVzKSkKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nCi0KLSAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIuc3VpdGVDbGFzcwotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgIkNhbGxhYmxlIG9iamVjdCB0aGF0IGNvbnN0cnVjdHMgYSB0ZXN0IHN1aXRlIGZyb20gYSBsaXN0IG9mIHRlc3RzLiIKLSAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcwotCi0gICAgICAgIHRlc3RzID0gW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHMpCi0KLSAgICAjIEl0IGlzIGltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MgdGhhdAotICAgICMgYWxsIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbSogbWV0aG9kcyByZXNwZWN0IGl0LiBMZXQncyBtYWtlIHN1cmUKLSAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIHRlc3RzID0gW1tGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXV0KLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSksIHRlc3RzKQotCi0gICAgIyBJdCBpcyBpbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgVGVzdExvYWRlci5zdWl0ZUNsYXNzIHRoYXQKLSAgICAjIGFsbCBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb20qIG1ldGhvZHMgcmVzcGVjdCBpdC4gTGV0J3MgbWFrZSBzdXJlCi0gICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fbG9hZFRlc3RzRnJvbU5hbWUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0gICAgICAgIG0uRm9vID0gRm9vCi0KLSAgICAgICAgdGVzdHMgPSBbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0KLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdGb28nLCBtKSwgdGVzdHMpCi0KLSAgICAjIEl0IGlzIGltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MgdGhhdAotICAgICMgYWxsIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbSogbWV0aG9kcyByZXNwZWN0IGl0LiBMZXQncyBtYWtlIHN1cmUKLSAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tTmFtZXMoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0gICAgICAgIG0uRm9vID0gRm9vCi0KLSAgICAgICAgdGVzdHMgPSBbW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldXQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pLCB0ZXN0cykKLQotICAgICMgIlRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBUZXN0U3VpdGUgY2xhc3MiCi0gICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fZGVmYXVsdF92YWx1ZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsb2FkZXIuc3VpdGVDbGFzcyBpcyB1bml0dGVzdC5UZXN0U3VpdGUpCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci5zdWl0ZUNsYXNzCi0KLSMjIyBTdXBwb3J0IGNvZGUgZm9yIFRlc3RfVGVzdFN1aXRlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICBkZWYgdGVzdF8zKHNlbGYpOiBwYXNzCi0gICAgZGVmIHJ1blRlc3Qoc2VsZik6IHBhc3MKLQotZGVmIF9ta19UZXN0U3VpdGUoKm5hbWVzKToKLSAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKEZvbyhuKSBmb3IgbiBpbiBuYW1lcykKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMjIC9TdXBwb3J0IGNvZGUgZm9yIFRlc3RfVGVzdFN1aXRlCi0KLWNsYXNzIFRlc3RfVGVzdFN1aXRlKFRlc3RDYXNlLCBUZXN0RXF1YWxpdHkpOgotCi0gICAgIyMjIFNldCB1cCBhdHRyaWJ1dGVzIG5lZWRlZCBieSBpbmhlcml0ZWQgdGVzdHMKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAjIFVzZWQgYnkgVGVzdEVxdWFsaXR5LnRlc3RfZXEKLSAgICBlcV9wYWlycyA9IFsodW5pdHRlc3QuVGVzdFN1aXRlKCksIHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQotICAgICAgICAgICAgICAgLCh1bml0dGVzdC5UZXN0U3VpdGUoKSwgdW5pdHRlc3QuVGVzdFN1aXRlKFtdKSkKLSAgICAgICAgICAgICAgICwoX21rX1Rlc3RTdWl0ZSgndGVzdF8xJyksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScpKV0KLQotICAgICMgVXNlZCBieSBUZXN0RXF1YWxpdHkudGVzdF9uZQotICAgIG5lX3BhaXJzID0gWyh1bml0dGVzdC5UZXN0U3VpdGUoKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8xJykpCi0gICAgICAgICAgICAgICAsKHVuaXR0ZXN0LlRlc3RTdWl0ZShbXSksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScpKQotICAgICAgICAgICAgICAgLChfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnLCAndGVzdF8yJyksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScsICd0ZXN0XzMnKSkKLSAgICAgICAgICAgICAgICwoX21rX1Rlc3RTdWl0ZSgndGVzdF8xJyksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMicpKV0KLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1NldCB1cCBhdHRyaWJ1dGVzIG5lZWRlZCBieSBpbmhlcml0ZWQgdGVzdHMKLQotICAgICMjIyBUZXN0cyBmb3IgVGVzdFN1aXRlLl9faW5pdF9fCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgotICAgICMKLSAgICAjIFRoZSB0ZXN0cyBpdGVyYWJsZSBzaG91bGQgYmUgb3B0aW9uYWwKLSAgICBkZWYgdGVzdF9pbml0X190ZXN0c19vcHRpb25hbChzZWxmKToKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKLQotICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKLSAgICAjIC4uLgotICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcwotICAgICMgb3Igb3RoZXIgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseSIKLSAgICAjCi0gICAgIyBUZXN0U3VpdGUgc2hvdWxkIGRlYWwgd2l0aCBlbXB0eSB0ZXN0cyBpdGVyYWJsZXMgYnkgYWxsb3dpbmcgdGhlCi0gICAgIyBjcmVhdGlvbiBvZiBhbiBlbXB0eSBzdWl0ZQotICAgIGRlZiB0ZXN0X2luaXRfX2VtcHR5X3Rlc3RzKHNlbGYpOgotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbXSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCi0KLSAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCi0gICAgIyAuLi4KLSAgICAjICJJZiB0ZXN0cyBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBpbmRpdmlkdWFsIHRlc3QgY2FzZXMKLSAgICAjIG9yIG90aGVyIHRlc3Qgc3VpdGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBzdWl0ZSBpbml0aWFsbHkiCi0gICAgIwotICAgICMgVGVzdFN1aXRlIHNob3VsZCBhbGxvdyBhbnkgaXRlcmFibGUgdG8gcHJvdmlkZSB0ZXN0cwotICAgIGRlZiB0ZXN0X2luaXRfX3Rlc3RzX2Zyb21fYW55X2l0ZXJhYmxlKHNlbGYpOgotICAgICAgICBkZWYgdGVzdHMoKToKLSAgICAgICAgICAgIHlpZWxkIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0KLSAgICAgICAgc3VpdGVfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSh0ZXN0cygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzEuY291bnRUZXN0Q2FzZXMoKSwgMikKLQotICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlXzEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMi5jb3VudFRlc3RDYXNlcygpLCAyKQotCi0gICAgICAgIHN1aXRlXzMgPSB1bml0dGVzdC5UZXN0U3VpdGUoc2V0KHN1aXRlXzEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzMuY291bnRUZXN0Q2FzZXMoKSwgMikKLQotICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKLSAgICAjIC4uLgotICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcwotICAgICMgb3Igb3RoZXIgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseSIKLSAgICAjCi0gICAgIyBEb2VzIFRlc3RTdWl0ZSgpIGFsc28gYWxsb3cgb3RoZXIgVGVzdFN1aXRlKCkgaW5zdGFuY2VzIHRvIGJlIHByZXNlbnQKLSAgICAjIGluIHRoZSB0ZXN0cyBpdGVyYWJsZT8KLSAgICBkZWYgdGVzdF9pbml0X19UZXN0U3VpdGVfaW5zdGFuY2VzX2luX3Rlc3RzKHNlbGYpOgotICAgICAgICBkZWYgdGVzdHMoKToKLSAgICAgICAgICAgIGZ0YyA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuVGVzdFN1aXRlKFtmdGNdKQotICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0KLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUodGVzdHMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyAvVGVzdHMgZm9yIFRlc3RTdWl0ZS5fX2luaXRfXwotCi0gICAgIyBDb250YWluZXIgdHlwZXMgc2hvdWxkIHN1cHBvcnQgdGhlIGl0ZXIgcHJvdG9jb2wKLSAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgotICAgICAgICB0ZXN0MSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICB0ZXN0MiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgodGVzdDEsIHRlc3QyKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdDEsIHRlc3QyXSkKLQotICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LgotICAgICMgLi4udGhpcyBtZXRob2QgaXMgYWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgVGVzdFN1aXRlIGNsYXNzLCB3aGljaCBjYW4KLSAgICAjIHJldHVybiBsYXJnZXIgW2dyZWF0ZXIgdGhhbiAxXSB2YWx1ZXMiCi0gICAgIwotICAgICMgUHJlc3VtYWJseSBhbiBlbXB0eSBUZXN0U3VpdGUgcmV0dXJucyAwPwotICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3plcm9fc2ltcGxlKHNlbGYpOgotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQotCi0gICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCi0gICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgotICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKLSAgICAjCi0gICAgIyBQcmVzdW1hYmx5IGFuIGVtcHR5IFRlc3RTdWl0ZSAoZXZlbiBpZiBpdCBjb250YWlucyBvdGhlciBlbXB0eQotICAgICMgVGVzdFN1aXRlIGluc3RhbmNlcykgcmV0dXJucyAwPwotICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3plcm9fbmVzdGVkKHNlbGYpOgotICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3VuaXR0ZXN0LlRlc3RTdWl0ZSgpXSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCi0KLSAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KLSAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCi0gICAgIyByZXR1cm4gbGFyZ2VyIFtncmVhdGVyIHRoYW4gMV0gdmFsdWVzIgotICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3NpbXBsZShzZWxmKToKLSAgICAgICAgdGVzdDEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgdGVzdDIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKHRlc3QxLCB0ZXN0MikpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQotCi0gICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCi0gICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgotICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgdGhpcyBob2xkcyBmb3IgbmVzdGVkIFRlc3RTdWl0ZSBpbnN0YW5jZXMsIHRvbwotICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX25lc3RlZChzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdDEodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdDIoc2VsZik6IHBhc3MKLQotICAgICAgICB0ZXN0MiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICB0ZXN0MyA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICBjaGlsZCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDEoJ3Rlc3QyJyksIHRlc3QyKSkKLSAgICAgICAgcGFyZW50ID0gdW5pdHRlc3QuVGVzdFN1aXRlKCh0ZXN0MywgY2hpbGQsIFRlc3QxKCd0ZXN0MScpKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmVudC5jb3VudFRlc3RDYXNlcygpLCA0KQotCi0gICAgIyAiUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8KLSAgICAjIHRoZSB0ZXN0IHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzIHJlc3VsdC4iCi0gICAgIwotICAgICMgQW5kIGlmIHRoZXJlIGFyZSBubyB0ZXN0cz8gV2hhdCB0aGVuPwotICAgIGRlZiB0ZXN0X3J1bl9fZW1wdHlfc3VpdGUoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLQotICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbXSkKLQotICAgICMgIk5vdGUgdGhhdCB1bmxpa2UgVGVzdENhc2UucnVuKCksIFRlc3RTdWl0ZS5ydW4oKSByZXF1aXJlcyB0aGUKLSAgICAjICJyZXN1bHQgb2JqZWN0IHRvIGJlIHBhc3NlZCBpbi4iCi0gICAgZGVmIHRlc3RfcnVuX19yZXF1aXJlc19yZXN1bHQoc2VsZik6Ci0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdWl0ZS5ydW4oKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKLQotICAgICMgIlJ1biB0aGUgdGVzdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VpdGUsIGNvbGxlY3RpbmcgdGhlIHJlc3VsdCBpbnRvCi0gICAgIyB0aGUgdGVzdCByZXN1bHQgb2JqZWN0IHBhc3NlZCBhcyByZXN1bHQuIgotICAgIGRlZiB0ZXN0X3J1bihzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgY2xhc3MgTG9nZ2luZ0Nhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgotICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3J1biAlcycgJSBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKLQotICAgICAgICAgICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdDIoc2VsZik6IHBhc3MKLQotICAgICAgICB0ZXN0cyA9IFtMb2dnaW5nQ2FzZSgndGVzdDEnKSwgTG9nZ2luZ0Nhc2UoJ3Rlc3QyJyldCi0KLSAgICAgICAgdW5pdHRlc3QuVGVzdFN1aXRlKHRlc3RzKS5ydW4ocmVzdWx0KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbJ3J1biB0ZXN0MScsICdydW4gdGVzdDInXSkKLQotICAgICMgIkFkZCBhIFRlc3RDYXNlIC4uLiB0byB0aGUgc3VpdGUiCi0gICAgZGVmIHRlc3RfYWRkVGVzdF9fVGVzdENhc2Uoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcwotCi0gICAgICAgIHRlc3QgPSBGb28oJ3Rlc3QnKQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0KLSAgICAgICAgc3VpdGUuYWRkVGVzdCh0ZXN0KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RdKQotCi0gICAgIyAiQWRkIGEgLi4uIFRlc3RTdWl0ZSB0byB0aGUgc3VpdGUiCi0gICAgZGVmIHRlc3RfYWRkVGVzdF9fVGVzdFN1aXRlKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKLQotICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3QnKV0pCi0KLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgICAgICBzdWl0ZS5hZGRUZXN0KHN1aXRlXzIpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbc3VpdGVfMl0pCi0KLSAgICAjICJBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKLSAgICAjIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuIgotICAgICMKLSAgICAjICJUaGlzIGlzIGVxdWl2YWxlbnQgdG8gaXRlcmF0aW5nIG92ZXIgdGVzdHMsIGNhbGxpbmcgYWRkVGVzdCgpIGZvcgotICAgICMgZWFjaCBlbGVtZW50IgotICAgIGRlZiB0ZXN0X2FkZFRlc3RzKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotCi0gICAgICAgIHRlc3RfMSA9IEZvbygndGVzdF8xJykKLSAgICAgICAgdGVzdF8yID0gRm9vKCd0ZXN0XzInKQotICAgICAgICBpbm5lcl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdF8yXSkKLQotICAgICAgICBkZWYgZ2VuKCk6Ci0gICAgICAgICAgICB5aWVsZCB0ZXN0XzEKLSAgICAgICAgICAgIHlpZWxkIHRlc3RfMgotICAgICAgICAgICAgeWllbGQgaW5uZXJfc3VpdGUKLQotICAgICAgICBzdWl0ZV8xID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICAgICAgc3VpdGVfMS5hZGRUZXN0cyhnZW4oKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGVfMSksIGxpc3QoZ2VuKCkpKQotCi0gICAgICAgICMgIlRoaXMgaXMgZXF1aXZhbGVudCB0byBpdGVyYXRpbmcgb3ZlciB0ZXN0cywgY2FsbGluZyBhZGRUZXN0KCkgZm9yCi0gICAgICAgICMgZWFjaCBlbGVtZW50IgotICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICAgICAgZm9yIHQgaW4gZ2VuKCk6Ci0gICAgICAgICAgICBzdWl0ZV8yLmFkZFRlc3QodCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzEsIHN1aXRlXzIpCi0KLSAgICAjICJBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKLSAgICAjIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyBpZiBpdCBkb2Vzbid0IGdldCBhbiBpdGVyYWJsZT8KLSAgICBkZWYgdGVzdF9hZGRUZXN0X19ub25pdGVyYWJsZShzZWxmKToKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKDUpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3IiKQotCi0gICAgZGVmIHRlc3RfYWRkVGVzdF9fbm9uY2FsbGFibGUoc2VsZik6Ci0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCA1KQotCi0gICAgZGVmIHRlc3RfYWRkVGVzdF9fY2FzZXN1aXRlY2xhc3Moc2VsZik6Ci0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCBUZXN0X1Rlc3RTdWl0ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCB1bml0dGVzdC5UZXN0U3VpdGUpCi0KLSAgICBkZWYgdGVzdF9hZGRUZXN0c19fc3RyaW5nKHNlbGYpOgotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VpdGUuYWRkVGVzdHMsICJmb28iKQotCi0KLWNsYXNzIFRlc3RfRnVuY3Rpb25UZXN0Q2FzZShUZXN0Q2FzZSk6Ci0KLSAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4gRm9yCi0gICAgIyBUZXN0Q2FzZSBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUgMSIKLSAgICBkZWYgdGVzdF9jb3VudFRlc3RDYXNlcyhzZWxmKToKLSAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5jb3VudFRlc3RDYXNlcygpLCAxKQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiBzZXRVcCgpIHJhaXNlcwotICAgICMgYW4gZXhjZXB0aW9uLgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl9zZXRVcChzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgZGVmIHNldFVwKCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCi0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBzZXRVcCcpCi0KLSAgICAgICAgZGVmIHRlc3QoKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQotCi0gICAgICAgIGRlZiB0ZWFyRG93bigpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQotCi0gICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAnYWRkRXJyb3InLCAnc3RvcFRlc3QnXQotICAgICAgICB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKHRlc3QsIHNldFVwLCB0ZWFyRG93bikucnVuKHJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCByYWlzZXMKLSAgICAjIGFuIGVycm9yIChhcyBvcHBvc2VkIHRvIGEgZmFpbHVyZSkuCi0gICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3Rlc3Qoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGRlZiBzZXRVcCgpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQotCi0gICAgICAgIGRlZiB0ZXN0KCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IHRlc3QnKQotCi0gICAgICAgIGRlZiB0ZWFyRG93bigpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQotCi0gICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRFcnJvcicsICd0ZWFyRG93bicsCi0gICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCi0gICAgICAgIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdCwgc2V0VXAsIHRlYXJEb3duKS5ydW4ocmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCi0gICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQotICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKLSAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCi0gICAgIwotICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRoZSB0ZXN0IHNpZ25hbHMKLSAgICAjIGEgZmFpbHVyZSAoYXMgb3Bwb3NlZCB0byBhbiBlcnJvcikuCi0gICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2ZhaWx1cmVfaW5fdGVzdChzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgZGVmIHNldFVwKCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCi0KLSAgICAgICAgZGVmIHRlc3QoKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQotICAgICAgICAgICAgc2VsZi5mYWlsKCdyYWlzZWQgYnkgdGVzdCcpCi0KLSAgICAgICAgZGVmIHRlYXJEb3duKCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEZhaWx1cmUnLCAndGVhckRvd24nLAotICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQotICAgICAgICB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKHRlc3QsIHNldFVwLCB0ZWFyRG93bikucnVuKHJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0ZWFyRG93bigpIHJhaXNlcwotICAgICMgYW4gZXhjZXB0aW9uLgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZWFyRG93bihzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgZGVmIHNldFVwKCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCi0KLSAgICAgICAgZGVmIHRlc3QoKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQotCi0gICAgICAgIGRlZiB0ZWFyRG93bigpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgdGVhckRvd24nKQotCi0gICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsICdhZGRFcnJvcicsCi0gICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCi0gICAgICAgIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdCwgc2V0VXAsIHRlYXJEb3duKS5ydW4ocmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICAjICJSZXR1cm4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIHRlc3QgY2FzZS4iCi0gICAgIwotICAgICMgQmVjYXVzZSBvZiB0aGUgdmFndWUgbmF0dXJlIG9mIHRoZSBkb2NzLCBJJ20gbm90IGdvaW5nIHRvIGxvY2sgdGhpcwotICAgICMgdGVzdCBkb3duIHRvbyBtdWNoLiBSZWFsbHkgYWxsIHRoYXQgY2FuIGJlIGFzc2VydGVkIGlzIHRoYXQgdGhlIGlkKCkKLSAgICAjIHdpbGwgYmUgYSBzdHJpbmcgKGVpdGhlciA4LWJ5dGUgb3IgdW5pY29kZSAtLSBhZ2FpbiwgYmVjYXVzZSB0aGUgZG9jcwotICAgICMganVzdCBzYXkgInN0cmluZyIpCi0gICAgZGVmIHRlc3RfaWQoc2VsZik6Ci0gICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZSh0ZXN0LmlkKCksIGJhc2VzdHJpbmcpKQotCi0gICAgIyAiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciBOb25lIGlmIG5vIGRlc2NyaXB0aW9uCi0gICAgIyBoYXMgYmVlbiBwcm92aWRlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucwotICAgICMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLCBpZiBhdmFpbGFibGUsIG9yIE5vbmUuIgotICAgIGRlZiB0ZXN0X3Nob3J0RGVzY3JpcHRpb25fX25vX2RvY3N0cmluZyhzZWxmKToKLSAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5zaG9ydERlc2NyaXB0aW9uKCksIE5vbmUpCi0KLSAgICAjICJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIE5vbmUgaWYgbm8gZGVzY3JpcHRpb24KLSAgICAjIGhhcyBiZWVuIHByb3ZpZGVkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCByZXR1cm5zCi0gICAgIyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdGVzdCBtZXRob2QncyBkb2NzdHJpbmcsIGlmIGF2YWlsYWJsZSwgb3IgTm9uZS4iCi0gICAgZGVmIHRlc3Rfc2hvcnREZXNjcmlwdGlvbl9fc2luZ2xlbGluZV9kb2NzdHJpbmcoc2VsZik6Ci0gICAgICAgIGRlc2MgPSAidGhpcyB0ZXN0cyBmb28iCi0gICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSwgZGVzY3JpcHRpb249ZGVzYykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Quc2hvcnREZXNjcmlwdGlvbigpLCAidGhpcyB0ZXN0cyBmb28iKQotCi1jbGFzcyBUZXN0X1Rlc3RSZXN1bHQoVGVzdENhc2UpOgotICAgICMgTm90ZTogdGhlcmUgYXJlIG5vdCBzZXBhcmF0ZSB0ZXN0cyBmb3IgVGVzdFJlc3VsdC53YXNTdWNjZXNzZnVsKCksCi0gICAgIyBUZXN0UmVzdWx0LmVycm9ycywgVGVzdFJlc3VsdC5mYWlsdXJlcywgVGVzdFJlc3VsdC50ZXN0c1J1biBvcgotICAgICMgVGVzdFJlc3VsdC5zaG91bGRTdG9wIGJlY2F1c2UgdGhlc2Ugb25seSBoYXZlIG1lYW5pbmcgaW4gdGVybXMgb2YKLSAgICAjIG90aGVyIFRlc3RSZXN1bHQgbWV0aG9kcy4KLSAgICAjCi0gICAgIyBBY2NvcmRpbmdseSwgdGVzdHMgZm9yIHRoZSBhZm9yZW5hbWVkIGF0dHJpYnV0ZXMgYXJlIGluY29ycG9yYXRlZAotICAgICMgaW4gd2l0aCB0aGUgdGVzdHMgZm9yIHRoZSBkZWZpbmluZyBtZXRob2RzLgotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQotCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQotCi0gICAgIyAiVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB0byBzaWduYWwgdGhhdCB0aGUgc2V0IG9mIHRlc3RzIGJlaW5nCi0gICAgIyBydW4gc2hvdWxkIGJlIGFib3J0ZWQgYnkgc2V0dGluZyB0aGUgVGVzdFJlc3VsdCdzIHNob3VsZFN0b3AKLSAgICAjIGF0dHJpYnV0ZSB0byBUcnVlLiIKLSAgICBkZWYgdGVzdF9zdG9wKHNlbGYpOgotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLQotICAgICAgICByZXN1bHQuc3RvcCgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgVHJ1ZSkKLQotICAgICMgIkNhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgdGVzdCBpcyBhYm91dCB0byBiZSBydW4uIFRoZSBkZWZhdWx0Ci0gICAgIyBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgaW5jcmVtZW50cyB0aGUgaW5zdGFuY2UncyB0ZXN0c1J1biBjb3VudGVyLiIKLSAgICBkZWYgdGVzdF9zdGFydFRlc3Qoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQotCi0gICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQotCi0gICAgICAgIHJlc3VsdC5zdGFydFRlc3QodGVzdCkKLQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKLQotICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKLQotICAgICMgIkNhbGxlZCBhZnRlciB0aGUgdGVzdCBjYXNlIHRlc3QgaGFzIGJlZW4gZXhlY3V0ZWQsIHJlZ2FyZGxlc3Mgb2YKLSAgICAjIHRoZSBvdXRjb21lLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIgotICAgIGRlZiB0ZXN0X3N0b3BUZXN0KHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKLQotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLQotICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCi0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCi0KLSAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCi0KLSAgICAgICAgIyBTYW1lIHRlc3RzIGFzIGFib3ZlOyBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKLQotICAgICMgImFkZFN1Y2Nlc3ModGVzdCkiCi0gICAgIyAuLi4KLSAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3Qgc3VjY2VlZHMiCi0gICAgIyAuLi4KLSAgICAjICJ3YXNTdWNjZXNzZnVsKCkgLSBSZXR1cm5zIFRydWUgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCi0gICAgIyBvdGhlcndpc2UgcmV0dXJucyBGYWxzZSIKLSAgICAjIC4uLgotICAgICMgInRlc3RzUnVuIC0gVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLiIKLSAgICAjIC4uLgotICAgICMgImVycm9ycyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKLSAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgotICAgICMgdW5leHBlY3RlZCBleGNlcHRpb24uIENvbnRhaW5zIGZvcm1hdHRlZAotICAgICMgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgotICAgICMgLi4uCi0gICAgIyAiZmFpbHVyZXMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCi0gICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGVyZSBhIGZhaWx1cmUgd2FzCi0gICAgIyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgVGVzdENhc2UuZmFpbCooKSBvciBUZXN0Q2FzZS5hc3NlcnQqKCkKLSAgICAjIG1ldGhvZHMuIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQKLSAgICAjIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgotICAgIGRlZiB0ZXN0X2FkZFN1Y2Nlc3Moc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQotCi0gICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQotCi0gICAgICAgIHJlc3VsdC5zdGFydFRlc3QodGVzdCkKLSAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3ModGVzdCkKLSAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCi0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCi0KLSAgICAjICJhZGRGYWlsdXJlKHRlc3QsIGVycikiCi0gICAgIyAuLi4KLSAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3Qgc2lnbmFscyBhIGZhaWx1cmUuIGVyciBpcyBhIHR1cGxlIG9mCi0gICAgIyB0aGUgZm9ybSByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKTogKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIgotICAgICMgLi4uCi0gICAgIyAid2FzU3VjY2Vzc2Z1bCgpIC0gUmV0dXJucyBUcnVlIGlmIGFsbCB0ZXN0cyBydW4gc28gZmFyIGhhdmUgcGFzc2VkLAotICAgICMgb3RoZXJ3aXNlIHJldHVybnMgRmFsc2UiCi0gICAgIyAuLi4KLSAgICAjICJ0ZXN0c1J1biAtIFRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuIHNvIGZhci4iCi0gICAgIyAuLi4KLSAgICAjICJlcnJvcnMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCi0gICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGljaCByYWlzZWQgYW4KLSAgICAjIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLiBDb250YWlucyBmb3JtYXR0ZWQKLSAgICAjIHRyYWNlYmFja3MgaW5zdGVhZCBvZiBzeXMuZXhjX2luZm8oKSByZXN1bHRzLiIKLSAgICAjIC4uLgotICAgICMgImZhaWx1cmVzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAotICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hlcmUgYSBmYWlsdXJlIHdhcwotICAgICMgZXhwbGljaXRseSBzaWduYWxsZWQgdXNpbmcgdGhlIFRlc3RDYXNlLmZhaWwqKCkgb3IgVGVzdENhc2UuYXNzZXJ0KigpCi0gICAgIyBtZXRob2RzLiBDb250YWlucyBmb3JtYXR0ZWQgdHJhY2ViYWNrcyBpbnN0ZWFkCi0gICAgIyBvZiBzeXMuZXhjX2luZm8oKSByZXN1bHRzLiIKLSAgICBkZWYgdGVzdF9hZGRGYWlsdXJlKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3lzCi0KLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlc3QuZmFpbCgiZm9vIikKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgZXhjX2luZm9fdHVwbGUgPSBzeXMuZXhjX2luZm8oKQotCi0gICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQotCi0gICAgICAgIHJlc3VsdC5zdGFydFRlc3QodGVzdCkKLSAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUodGVzdCwgZXhjX2luZm9fdHVwbGUpCi0gICAgICAgIHJlc3VsdC5zdG9wVGVzdCh0ZXN0KQotCi0gICAgICAgIHNlbGYuZmFpbElmKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCi0KLSAgICAgICAgdGVzdF9jYXNlLCBmb3JtYXR0ZWRfZXhjID0gcmVzdWx0LmZhaWx1cmVzWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0ZXN0X2Nhc2UgaXMgdGVzdCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoZm9ybWF0dGVkX2V4Yywgc3RyKSkKLQotICAgICMgImFkZEVycm9yKHRlc3QsIGVycikiCi0gICAgIyAuLi4KLSAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3QgcmFpc2VzIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIGVycgotICAgICMgaXMgYSB0dXBsZSBvZiB0aGUgZm9ybSByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKToKLSAgICAjICh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSIKLSAgICAjIC4uLgotICAgICMgIndhc1N1Y2Nlc3NmdWwoKSAtIFJldHVybnMgVHJ1ZSBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwKLSAgICAjIG90aGVyd2lzZSByZXR1cm5zIEZhbHNlIgotICAgICMgLi4uCi0gICAgIyAidGVzdHNSdW4gLSBUaGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biBzbyBmYXIuIgotICAgICMgLi4uCi0gICAgIyAiZXJyb3JzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAotICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2ggcmFpc2VkIGFuCi0gICAgIyB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gQ29udGFpbnMgZm9ybWF0dGVkCi0gICAgIyB0cmFjZWJhY2tzIGluc3RlYWQgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCi0gICAgIyAuLi4KLSAgICAjICJmYWlsdXJlcyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKLSAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZSB3YXMKLSAgICAjIGV4cGxpY2l0bHkgc2lnbmFsbGVkIHVzaW5nIHRoZSBUZXN0Q2FzZS5mYWlsKigpIG9yIFRlc3RDYXNlLmFzc2VydCooKQotICAgICMgbWV0aG9kcy4gQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZAotICAgICMgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCi0gICAgZGVmIHRlc3RfYWRkRXJyb3Ioc2VsZik6Ci0gICAgICAgIGltcG9ydCBzeXMKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgZXhjX2luZm9fdHVwbGUgPSBzeXMuZXhjX2luZm8oKQotCi0gICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQotCi0gICAgICAgIHJlc3VsdC5zdGFydFRlc3QodGVzdCkKLSAgICAgICAgcmVzdWx0LmFkZEVycm9yKHRlc3QsIGV4Y19pbmZvX3R1cGxlKQotICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKLQotICAgICAgICBzZWxmLmZhaWxJZihyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQotCi0gICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5lcnJvcnNbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHRlc3RfY2FzZSBpcyB0ZXN0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShmb3JtYXR0ZWRfZXhjLCBzdHIpKQotCi0jIyMgU3VwcG9ydCBjb2RlIGZvciBUZXN0X1Rlc3RDYXNlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHJ1blRlc3Qoc2VsZik6IHBhc3MKLSAgICBkZWYgdGVzdDEoc2VsZik6IHBhc3MKLQotY2xhc3MgQmFyKEZvbyk6Ci0gICAgZGVmIHRlc3QyKHNlbGYpOiBwYXNzCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMjIyAvU3VwcG9ydCBjb2RlIGZvciBUZXN0X1Rlc3RDYXNlCi0KLWNsYXNzIFRlc3RfVGVzdENhc2UoVGVzdENhc2UsIFRlc3RFcXVhbGl0eSwgVGVzdEhhc2hpbmcpOgotCi0gICAgIyMjIFNldCB1cCBhdHRyaWJ1dGVzIHVzZWQgYnkgaW5oZXJpdGVkIHRlc3RzCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgIyBVc2VkIGJ5IFRlc3RIYXNoaW5nLnRlc3RfaGFzaCBhbmQgVGVzdEVxdWFsaXR5LnRlc3RfZXEKLSAgICBlcV9wYWlycyA9IFsoRm9vKCd0ZXN0MScpLCBGb28oJ3Rlc3QxJykpXQotCi0gICAgIyBVc2VkIGJ5IFRlc3RFcXVhbGl0eS50ZXN0X25lCi0gICAgbmVfcGFpcnMgPSBbKEZvbygndGVzdDEnKSwgRm9vKCdydW5UZXN0JykpCi0gICAgICAgICAgICAgICAsKEZvbygndGVzdDEnKSwgQmFyKCd0ZXN0MScpKQotICAgICAgICAgICAgICAgLChGb28oJ3Rlc3QxJyksIEJhcigndGVzdDInKSldCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIC9TZXQgdXAgYXR0cmlidXRlcyB1c2VkIGJ5IGluaGVyaXRlZCB0ZXN0cwotCi0KLSAgICAjICJjbGFzcyBUZXN0Q2FzZShbbWV0aG9kTmFtZV0pIgotICAgICMgLi4uCi0gICAgIyAiRWFjaCBpbnN0YW5jZSBvZiBUZXN0Q2FzZSB3aWxsIHJ1biBhIHNpbmdsZSB0ZXN0IG1ldGhvZDogdGhlCi0gICAgIyBtZXRob2QgbmFtZWQgbWV0aG9kTmFtZS4iCi0gICAgIyAuLi4KLSAgICAjICJtZXRob2ROYW1lIGRlZmF1bHRzIHRvICJydW5UZXN0Ii4iCi0gICAgIwotICAgICMgTWFrZSBzdXJlIGl0IHJlYWxseSBpcyBvcHRpb25hbCwgYW5kIHRoYXQgaXQgZGVmYXVsdHMgdG8gdGhlIHByb3BlcgotICAgICMgdGhpbmcuCi0gICAgZGVmIHRlc3RfaW5pdF9fbm9fdGVzdF9uYW1lKHNlbGYpOgotICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOiByYWlzZSBNeUV4Y2VwdGlvbigpCi0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcwotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdCgpLmlkKClbLTEzOl0sICcuVGVzdC5ydW5UZXN0JykKLQotICAgICMgImNsYXNzIFRlc3RDYXNlKFttZXRob2ROYW1lXSkiCi0gICAgIyAuLi4KLSAgICAjICJFYWNoIGluc3RhbmNlIG9mIFRlc3RDYXNlIHdpbGwgcnVuIGEgc2luZ2xlIHRlc3QgbWV0aG9kOiB0aGUKLSAgICAjIG1ldGhvZCBuYW1lZCBtZXRob2ROYW1lLiIKLSAgICBkZWYgdGVzdF9pbml0X190ZXN0X25hbWVfX3ZhbGlkKHNlbGYpOgotICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOiByYWlzZSBNeUV4Y2VwdGlvbigpCi0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcwotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdCgndGVzdCcpLmlkKClbLTEwOl0sICcuVGVzdC50ZXN0JykKLQotICAgICMgImNsYXNzIFRlc3RDYXNlKFttZXRob2ROYW1lXSkiCi0gICAgIyAuLi4KLSAgICAjICJFYWNoIGluc3RhbmNlIG9mIFRlc3RDYXNlIHdpbGwgcnVuIGEgc2luZ2xlIHRlc3QgbWV0aG9kOiB0aGUKLSAgICAjIG1ldGhvZCBuYW1lZCBtZXRob2ROYW1lLiIKLSAgICBkZWYgdGVzdF9pbml0X190ZXN0X25hbWVfX2ludmFsaWQoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6IHJhaXNlIE15RXhjZXB0aW9uKCkKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgVGVzdCgndGVzdGZvbycpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCi0KLSAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4gRm9yCi0gICAgIyBUZXN0Q2FzZSBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUgMSIKLSAgICBkZWYgdGVzdF9jb3VudFRlc3RDYXNlcyhzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28oJ3Rlc3QnKS5jb3VudFRlc3RDYXNlcygpLCAxKQotCi0gICAgIyAiUmV0dXJuIHRoZSBkZWZhdWx0IHR5cGUgb2YgdGVzdCByZXN1bHQgb2JqZWN0IHRvIGJlIHVzZWQgdG8gcnVuIHRoaXMKLSAgICAjIHRlc3QuIEZvciBUZXN0Q2FzZSBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUKLSAgICAjIHVuaXR0ZXN0LlRlc3RSZXN1bHQ7ICBzdWJjbGFzc2VzIG9mIFRlc3RDYXNlIHNob3VsZAotICAgICMgb3ZlcnJpZGUgdGhpcyBhcyBuZWNlc3NhcnkuIgotICAgIGRlZiB0ZXN0X2RlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHJlc3VsdCA9IEZvbygpLmRlZmF1bHRUZXN0UmVzdWx0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIHVuaXR0ZXN0LlRlc3RSZXN1bHQpCi0KLSAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCi0gICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQotICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKLSAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCi0gICAgIwotICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHNldFVwKCkgcmFpc2VzCi0gICAgIyBhbiBleGNlcHRpb24uCi0gICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3NldFVwKHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28uc2V0VXAnKQotCi0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKLQotICAgICAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKLQotICAgICAgICBGb28oJ3Rlc3QnKS5ydW4ocmVzdWx0KQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ2FkZEVycm9yJywgJ3N0b3BUZXN0J10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCByYWlzZXMKLSAgICAjIGFuIGVycm9yIChhcyBvcHBvc2VkIHRvIGEgZmFpbHVyZSkuCi0gICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3Rlc3Qoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQotCi0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28udGVzdCcpCi0KLSAgICAgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEVycm9yJywgJ3RlYXJEb3duJywKLSAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KLSAgICAgICAgRm9vKCd0ZXN0JykucnVuKHJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCBzaWduYWxzCi0gICAgIyBhIGZhaWx1cmUgKGFzIG9wcG9zZWQgdG8gYW4gZXJyb3IpLgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19mYWlsdXJlX2luX3Rlc3Qoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQotCi0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3JhaXNlZCBieSBGb28udGVzdCcpCi0KLSAgICAgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEZhaWx1cmUnLCAndGVhckRvd24nLAotICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQotICAgICAgICBGb28oJ3Rlc3QnKS5ydW4ocmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCi0gICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQotICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKLSAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCi0gICAgIwotICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRlYXJEb3duKCkgcmFpc2VzCi0gICAgIyBhbiBleGNlcHRpb24uCi0gICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3RlYXJEb3duKHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKLQotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCi0KLSAgICAgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCi0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlYXJEb3duJykKLQotICAgICAgICBGb28oJ3Rlc3QnKS5ydW4ocmVzdWx0KQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLCAnYWRkRXJyb3InLAotICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICAjICJUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCgpIG1ldGhvZC4KLSAgICAjIElmIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0bwotICAgICMgY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbgotICAgICMgb3JkZXIgdG8gYGBwbGF5IGZhaXInJyB3aXRoIHRoZSBmcmFtZXdvcmsuICBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGlzCi0gICAgIyBhdHRyaWJ1dGUgaXMgQXNzZXJ0aW9uRXJyb3IiCi0gICAgZGVmIHRlc3RfZmFpbHVyZUV4Y2VwdGlvbl9fZGVmYXVsdChzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoRm9vKCd0ZXN0JykuZmFpbHVyZUV4Y2VwdGlvbiBpcyBBc3NlcnRpb25FcnJvcikKLQotICAgICMgIlRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSB0ZXN0KCkgbWV0aG9kLgotICAgICMgSWYgYSB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvCi0gICAgIyBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluCi0gICAgIyBvcmRlciB0byBgYHBsYXkgZmFpcicnIHdpdGggdGhlIGZyYW1ld29yay4iCi0gICAgIwotICAgICMgTWFrZSBzdXJlIFRlc3RDYXNlLnJ1bigpIHJlc3BlY3RzIHRoZSBkZXNpZ25hdGVkIGZhaWx1cmVFeGNlcHRpb24KLSAgICBkZWYgdGVzdF9mYWlsdXJlRXhjZXB0aW9uX19zdWJjbGFzc2luZ19fZXhwbGljaXRfcmFpc2Uoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoKQotCi0gICAgICAgICAgICBmYWlsdXJlRXhjZXB0aW9uID0gUnVudGltZUVycm9yCi0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKEZvbygndGVzdCcpLmZhaWx1cmVFeGNlcHRpb24gaXMgUnVudGltZUVycm9yKQotCi0KLSAgICAgICAgRm9vKCd0ZXN0JykucnVuKHJlc3VsdCkKLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdhZGRGYWlsdXJlJywgJ3N0b3BUZXN0J10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiVGhpcyBjbGFzcyBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhlIHRlc3QoKSBtZXRob2QuCi0gICAgIyBJZiBhIHRlc3QgZnJhbWV3b3JrIG5lZWRzIHRvIHVzZSBhIHNwZWNpYWxpemVkIGV4Y2VwdGlvbiwgcG9zc2libHkgdG8KLSAgICAjIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGl0IG11c3Qgc3ViY2xhc3MgdGhpcyBleGNlcHRpb24gaW4KLSAgICAjIG9yZGVyIHRvIGBgcGxheSBmYWlyJycgd2l0aCB0aGUgZnJhbWV3b3JrLiIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgVGVzdENhc2UucnVuKCkgcmVzcGVjdHMgdGhlIGRlc2lnbmF0ZWQgZmFpbHVyZUV4Y2VwdGlvbgotICAgIGRlZiB0ZXN0X2ZhaWx1cmVFeGNlcHRpb25fX3N1YmNsYXNzaW5nX19pbXBsaWNpdF9yYWlzZShzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZm9vIikKLQotICAgICAgICAgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IFJ1bnRpbWVFcnJvcgotCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhGb28oJ3Rlc3QnKS5mYWlsdXJlRXhjZXB0aW9uIGlzIFJ1bnRpbWVFcnJvcikKLQotCi0gICAgICAgIEZvbygndGVzdCcpLnJ1bihyZXN1bHQpCi0gICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnYWRkRmFpbHVyZScsICdzdG9wVGVzdCddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLQotICAgICMgIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4iCi0gICAgZGVmIHRlc3Rfc2V0VXAoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgIyAuLi4gYW5kIG5vdGhpbmcgc2hvdWxkIGhhcHBlbgotICAgICAgICBGb28oKS5zZXRVcCgpCi0KLSAgICAjICJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIgotICAgIGRlZiB0ZXN0X3RlYXJEb3duKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICMgLi4uIGFuZCBub3RoaW5nIHNob3VsZCBoYXBwZW4KLSAgICAgICAgRm9vKCkudGVhckRvd24oKQotCi0gICAgIyAiUmV0dXJuIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyB0ZXN0IGNhc2UuIgotICAgICMKLSAgICAjIEJlY2F1c2Ugb2YgdGhlIHZhZ3VlIG5hdHVyZSBvZiB0aGUgZG9jcywgSSdtIG5vdCBnb2luZyB0byBsb2NrIHRoaXMKLSAgICAjIHRlc3QgZG93biB0b28gbXVjaC4gUmVhbGx5IGFsbCB0aGF0IGNhbiBiZSBhc3NlcnRlZCBpcyB0aGF0IHRoZSBpZCgpCi0gICAgIyB3aWxsIGJlIGEgc3RyaW5nIChlaXRoZXIgOC1ieXRlIG9yIHVuaWNvZGUgLS0gYWdhaW4sIGJlY2F1c2UgdGhlIGRvY3MKLSAgICAjIGp1c3Qgc2F5ICJzdHJpbmciKQotICAgIGRlZiB0ZXN0X2lkKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKEZvbygpLmlkKCksIGJhc2VzdHJpbmcpKQotCi0gICAgIyAiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciBOb25lIGlmIG5vIGRlc2NyaXB0aW9uCi0gICAgIyBoYXMgYmVlbiBwcm92aWRlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucwotICAgICMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLCBpZiBhdmFpbGFibGUsIG9yIE5vbmUuIgotICAgIGRlZiB0ZXN0X3Nob3J0RGVzY3JpcHRpb25fX25vX2RvY3N0cmluZyhzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZvbygpLnNob3J0RGVzY3JpcHRpb24oKSwgTm9uZSkKLQotICAgICMgIlJldHVybnMgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCwgb3IgTm9uZSBpZiBubyBkZXNjcmlwdGlvbgotICAgICMgaGFzIGJlZW4gcHJvdmlkZWQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHJldHVybnMKLSAgICAjIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB0ZXN0IG1ldGhvZCdzIGRvY3N0cmluZywgaWYgYXZhaWxhYmxlLCBvciBOb25lLiIKLSAgICBkZWYgdGVzdF9zaG9ydERlc2NyaXB0aW9uX19zaW5nbGVsaW5lX2RvY3N0cmluZyhzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgICJ0aGlzIHRlc3RzIGZvbyIKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28oKS5zaG9ydERlc2NyaXB0aW9uKCksICJ0aGlzIHRlc3RzIGZvbyIpCi0KLSAgICAjICJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIE5vbmUgaWYgbm8gZGVzY3JpcHRpb24KLSAgICAjIGhhcyBiZWVuIHByb3ZpZGVkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCByZXR1cm5zCi0gICAgIyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdGVzdCBtZXRob2QncyBkb2NzdHJpbmcsIGlmIGF2YWlsYWJsZSwgb3IgTm9uZS4iCi0gICAgZGVmIHRlc3Rfc2hvcnREZXNjcmlwdGlvbl9fbXVsdGlsaW5lX2RvY3N0cmluZyhzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgICIiInRoaXMgdGVzdHMgZm9vCi0gICAgICAgICAgICAgICAgYmxhaCwgYmFyIGFuZCBiYXogYXJlIGFsc28gdGVzdGVkIiIiCi0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vKCkuc2hvcnREZXNjcmlwdGlvbigpLCAidGhpcyB0ZXN0cyBmb28iKQotCi0gICAgIyAiSWYgcmVzdWx0IGlzIG9taXR0ZWQgb3IgTm9uZSwgYSB0ZW1wb3JhcnkgcmVzdWx0IG9iamVjdCBpcyBjcmVhdGVkCi0gICAgIyBhbmQgdXNlZCwgYnV0IGlzIG5vdCBtYWRlIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyIgotICAgIGRlZiB0ZXN0X3J1bl9fdXNlc19kZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCi0KLSAgICAgICAgICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgIyBNYWtlIHJ1bigpIGZpbmQgYSByZXN1bHQgb2JqZWN0IG9uIGl0cyBvd24KLSAgICAgICAgRm9vKCd0ZXN0JykucnVuKCkKLQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3Rlc3QnLCAnc3RvcFRlc3QnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLWNsYXNzIFRlc3RfQXNzZXJ0aW9ucyhUZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfQWxtb3N0RXF1YWwoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKDEuMDAwMDAwMDEsIDEuMCkKLSAgICAgICAgc2VsZi5mYWlsSWZBbG1vc3RFcXVhbCgxLjAwMDAwMDEsIDEuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsLCAxLjAwMDAwMDEsIDEuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmQWxtb3N0RXF1YWwsIDEuMDAwMDAwMDEsIDEuMCkKLQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCgxLjEsIDEuMCwgcGxhY2VzPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCwgMS4xLCAxLjAsIHBsYWNlcz0xKQotCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKDAsIC4xKy4xaiwgcGxhY2VzPTApCi0gICAgICAgIHNlbGYuZmFpbElmQWxtb3N0RXF1YWwoMCwgLjErLjFqLCBwbGFjZXM9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsLCAwLCAuMSsuMWosIHBsYWNlcz0xKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsSWZBbG1vc3RFcXVhbCwgMCwgLjErLjFqLCBwbGFjZXM9MCkKLQotCiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMjIE1haW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdF9UZXN0Q2FzZSwgVGVzdF9UZXN0TG9hZGVyLAotICAgICAgICBUZXN0X1Rlc3RTdWl0ZSwgVGVzdF9UZXN0UmVzdWx0LCBUZXN0X0Z1bmN0aW9uVGVzdENhc2UsCi0gICAgICAgIFRlc3RfQXNzZXJ0aW9ucykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KHVuaXR0ZXN0LnRlc3Quc3VpdGUoKSkKKyAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bml2bmV3bGluZXMucHkgYi9MaWIvdGVzdC90ZXN0X3VuaXZuZXdsaW5lcy5weQppbmRleCA1MDIxODg0Li5hMGE5MDkwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaXZuZXdsaW5lcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuaXZuZXdsaW5lcy5weQpAQCAtMSwyMCArMSwyOCBAQAogIyBUZXN0cyB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IGZvciBib3RoIHJlYWRpbmcgYW5kIHBhcnNpbmcgZmlsZXMuCisKKyMgTk9URTogdGhpcyBmaWxlIHRlc3RzIHRoZSBuZXcgYGlvYCBsaWJyYXJ5IGJhY2twb3J0ZWQgZnJvbSBQeXRob24gMy54LgorIyBTaW1pbGFyIHRlc3RzIGZvciB0aGUgYnVpbHRpbiBmaWxlIG9iamVjdCBjYW4gYmUgZm91bmQgaW4gdGVzdF91bml2bmV3bGluZXMyay5weS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCisKK2ltcG9ydCBpbworaW1wb3J0IF9weWlvIGFzIHB5aW8KIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1mcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAogCiBpZiBub3QgaGFzYXR0cihzeXMuc3RkaW4sICduZXdsaW5lcycpOgotICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZCwgXAotICAgICAgICAiVGhpcyBQeXRob24gZG9lcyBub3QgaGF2ZSB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KAorICAgICAgICAiVGhpcyBQeXRob24gZG9lcyBub3QgaGF2ZSB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IikKIAogRkFUWCA9ICd4JyAqICgyKioxNCkKIAogREFUQV9URU1QTEFURSA9IFsKICAgICAibGluZTE9MSIsCi0gICAgImxpbmUyPSd0aGlzIGlzIGEgdmVyeSBsb25nIGxpbmUgZGVzaWduZWQgdG8gZ28gcGFzdCB0aGUgbWFnaWMgIiArCi0gICAgICAgICJodW5kcmVkIGNoYXJhY3RlciBsaW1pdCB0aGF0IGlzIGluc2lkZSBmaWxlb2JqZWN0LmMgYW5kIHdoaWNoICIgKwotICAgICAgICAiaXMgbWVhbnQgdG8gc3BlZWQgdXAgdGhlIGNvbW1vbiBjYXNlLCBidXQgd2UgYWxzbyB3YW50IHRvIHRlc3QgIiArCisgICAgImxpbmUyPSd0aGlzIGlzIGEgdmVyeSBsb25nIGxpbmUgZGVzaWduZWQgdG8gZ28gcGFzdCBhbnkgZGVmYXVsdCAiICsKKyAgICAgICAgImJ1ZmZlciBsaW1pdHMgdGhhdCBleGlzdCBpbiBpby5weSBidXQgd2UgYWxzbyB3YW50IHRvIHRlc3QgIiArCiAgICAgICAgICJ0aGUgdW5jb21tb24gY2FzZSwgbmF0dXJhbGx5LiciLAogICAgICJkZWYgbGluZTMoKTpwYXNzIiwKICAgICAibGluZTQgPSAnJXMnIiAlIEZBVFgsCkBAIC0yOCw3MSArMzYsNTggQEAKICMgYmVmb3JlIGVuZC1vZi1maWxlLgogREFUQV9NSVhFRCA9ICJcbiIuam9pbihEQVRBX1RFTVBMQVRFKSArICJcciIKIERBVEFfU1BMSVQgPSBbeCArICJcbiIgZm9yIHggaW4gREFUQV9URU1QTEFURV0KLWRlbCB4CiAKIGNsYXNzIFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIHVzZSBhIGNsYXNzIHZhcmlhYmxlIERBVEEgdG8gZGVmaW5lIHRoZSBkYXRhIHRvIHdyaXRlIHRvIHRoZSBmaWxlCiAgICAgIyBhbmQgYSBjbGFzcyB2YXJpYWJsZSBORVdMSU5FIHRvIHNldCB0aGUgZXhwZWN0ZWQgbmV3bGluZXMgdmFsdWUKLSAgICBSRUFETU9ERSA9ICdVJworICAgIFJFQURNT0RFID0gJ3InCiAgICAgV1JJVEVNT0RFID0gJ3diJwogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5XUklURU1PREUpCi0gICAgICAgIGZwLndyaXRlKHNlbGYuREFUQSkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBkYXRhID0gc2VsZi5EQVRBCisgICAgICAgIGlmICJiIiBpbiBzZWxmLldSSVRFTU9ERToKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhLmVuY29kZSgiYXNjaWkiKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5XUklURU1PREUpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoZGF0YSkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBvcy51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6Ci0gICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKQotICAgICAgICBkYXRhID0gZnAucmVhZCgpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX0xGKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGZwLm5ld2xpbmVzKSwgc2V0KHNlbGYuTkVXTElORSkpCiAKICAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6Ci0gICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKQotICAgICAgICBkYXRhID0gZnAucmVhZGxpbmVzKCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZwLm5ld2xpbmVzKSwgcmVwcihzZWxmLk5FV0xJTkUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChmcC5uZXdsaW5lcyksIHNldChzZWxmLk5FV0xJTkUpKQogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6Ci0gICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKQotICAgICAgICBkYXRhID0gW10KLSAgICAgICAgZCA9IGZwLnJlYWRsaW5lKCkKLSAgICAgICAgd2hpbGUgZDoKLSAgICAgICAgICAgIGRhdGEuYXBwZW5kKGQpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBbXQogICAgICAgICAgICAgZCA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHdoaWxlIGQ6CisgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZCkKKyAgICAgICAgICAgICAgICBkID0gZnAucmVhZGxpbmUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfU1BMSVQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoc2VsZi5ORVdMSU5FKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZnAubmV3bGluZXMpLCBzZXQoc2VsZi5ORVdMSU5FKSkKIAogICAgIGRlZiB0ZXN0X3NlZWsoc2VsZik6Ci0gICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKQotICAgICAgICBmcC5yZWFkbGluZSgpCi0gICAgICAgIHBvcyA9IGZwLnRlbGwoKQotICAgICAgICBkYXRhID0gZnAucmVhZGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUWzE6XSkKLSAgICAgICAgZnAuc2Vlayhwb3MpCi0gICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICBwb3MgPSBmcC50ZWxsKCkKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUWzE6XSkKKyAgICAgICAgICAgIGZwLnNlZWsocG9zKQorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVFsxOl0pCiAKLSAgICBkZWYgdGVzdF9leGVjZmlsZShzZWxmKToKLSAgICAgICAgbmFtZXNwYWNlID0ge30KLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKLSAgICAgICAgICAgIGV4ZWNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sIG5hbWVzcGFjZSkKLSAgICAgICAgZnVuYyA9IG5hbWVzcGFjZVsnbGluZTMnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vLCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzcGFjZVsnbGluZTQnXSwgRkFUWCkKLQotCi1jbGFzcyBUZXN0TmF0aXZlTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgotICAgIE5FV0xJTkUgPSBOb25lCi0gICAgREFUQSA9IERBVEFfTEYKLSAgICBSRUFETU9ERSA9ICdyJwotICAgIFdSSVRFTU9ERSA9ICd3JwogCiBjbGFzcyBUZXN0Q1JOZXdsaW5lcyhUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyk6CiAgICAgTkVXTElORSA9ICdccicKQEAgLTEwNywxMCArMTAyLDEwIEBACiAgICAgREFUQSA9IERBVEFfQ1JMRgogCiAgICAgZGVmIHRlc3RfdGVsbChzZWxmKToKLSAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoTm9uZSkpCi0gICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgIHBvcyA9IGZwLnRlbGwoKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKE5vbmUpKQorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHBvcyA9IGZwLnRlbGwoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCiAKIGNsYXNzIFRlc3RNaXhlZE5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKQEAgLTExOSwxMyArMTE0LDIyIEBACiAKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIFRlc3ROYXRpdmVOZXdsaW5lcywKLSAgICAgICAgVGVzdENSTmV3bGluZXMsCi0gICAgICAgIFRlc3RMRk5ld2xpbmVzLAotICAgICAgICBUZXN0Q1JMRk5ld2xpbmVzLAotICAgICAgICBUZXN0TWl4ZWROZXdsaW5lcwotICAgICApCisgICAgYmFzZV90ZXN0cyA9IChUZXN0Q1JOZXdsaW5lcywKKyAgICAgICAgICAgICAgICAgIFRlc3RMRk5ld2xpbmVzLAorICAgICAgICAgICAgICAgICAgVGVzdENSTEZOZXdsaW5lcywKKyAgICAgICAgICAgICAgICAgIFRlc3RNaXhlZE5ld2xpbmVzKQorICAgIHRlc3RzID0gW10KKyAgICAjIFRlc3QgdGhlIEMgYW5kIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMuCisgICAgZm9yIHRlc3QgaW4gYmFzZV90ZXN0czoKKyAgICAgICAgY2xhc3MgQ1Rlc3QodGVzdCk6CisgICAgICAgICAgICBvcGVuID0gaW8ub3BlbgorICAgICAgICBDVGVzdC5fX25hbWVfXyA9IHN0cigiQyIgKyB0ZXN0Ll9fbmFtZV9fKQorICAgICAgICBjbGFzcyBQeVRlc3QodGVzdCk6CisgICAgICAgICAgICBvcGVuID0gc3RhdGljbWV0aG9kKHB5aW8ub3BlbikKKyAgICAgICAgUHlUZXN0Ll9fbmFtZV9fID0gc3RyKCJQeSIgKyB0ZXN0Ll9fbmFtZV9fKQorICAgICAgICB0ZXN0cy5hcHBlbmQoQ1Rlc3QpCisgICAgICAgIHRlc3RzLmFwcGVuZChQeVRlc3QpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaXZuZXdsaW5lczJrLnB5IGIvTGliL3Rlc3QvdGVzdF91bml2bmV3bGluZXMyay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWNhMzFkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF91bml2bmV3bGluZXMyay5weQpAQCAtMCwwICsxLDEzMCBAQAorIyBUZXN0cyB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IGZvciBib3RoIHJlYWRpbmcgYW5kIHBhcnNpbmcgZmlsZXMuCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworaWYgbm90IGhhc2F0dHIoc3lzLnN0ZGluLCAnbmV3bGluZXMnKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgXAorICAgICAgICAiVGhpcyBQeXRob24gZG9lcyBub3QgaGF2ZSB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IgorCitGQVRYID0gJ3gnICogKDIqKjE0KQorCitEQVRBX1RFTVBMQVRFID0gWworICAgICJsaW5lMT0xIiwKKyAgICAibGluZTI9J3RoaXMgaXMgYSB2ZXJ5IGxvbmcgbGluZSBkZXNpZ25lZCB0byBnbyBwYXN0IHRoZSBtYWdpYyAiICsKKyAgICAgICAgImh1bmRyZWQgY2hhcmFjdGVyIGxpbWl0IHRoYXQgaXMgaW5zaWRlIGZpbGVvYmplY3QuYyBhbmQgd2hpY2ggIiArCisgICAgICAgICJpcyBtZWFudCB0byBzcGVlZCB1cCB0aGUgY29tbW9uIGNhc2UsIGJ1dCB3ZSBhbHNvIHdhbnQgdG8gdGVzdCAiICsKKyAgICAgICAgInRoZSB1bmNvbW1vbiBjYXNlLCBuYXR1cmFsbHkuJyIsCisgICAgImRlZiBsaW5lMygpOnBhc3MiLAorICAgICJsaW5lNCA9ICclcyciICUgRkFUWCwKKyAgICBdCisKK0RBVEFfTEYgPSAiXG4iLmpvaW4oREFUQV9URU1QTEFURSkgKyAiXG4iCitEQVRBX0NSID0gIlxyIi5qb2luKERBVEFfVEVNUExBVEUpICsgIlxyIgorREFUQV9DUkxGID0gIlxyXG4iLmpvaW4oREFUQV9URU1QTEFURSkgKyAiXHJcbiIKKworIyBOb3RlIHRoYXQgREFUQV9NSVhFRCBhbHNvIHRlc3RzIHRoZSBhYmlsaXR5IHRvIHJlY29nbml6ZSBhIGxvbmUgXHIKKyMgYmVmb3JlIGVuZC1vZi1maWxlLgorREFUQV9NSVhFRCA9ICJcbiIuam9pbihEQVRBX1RFTVBMQVRFKSArICJcciIKK0RBVEFfU1BMSVQgPSBbeCArICJcbiIgZm9yIHggaW4gREFUQV9URU1QTEFURV0KK2RlbCB4CisKK2NsYXNzIFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIHVzZSBhIGNsYXNzIHZhcmlhYmxlIERBVEEgdG8gZGVmaW5lIHRoZSBkYXRhIHRvIHdyaXRlIHRvIHRoZSBmaWxlCisgICAgIyBhbmQgYSBjbGFzcyB2YXJpYWJsZSBORVdMSU5FIHRvIHNldCB0aGUgZXhwZWN0ZWQgbmV3bGluZXMgdmFsdWUKKyAgICBSRUFETU9ERSA9ICdVJworICAgIFdSSVRFTU9ERSA9ICd3YicKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIHNlbGYuV1JJVEVNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuREFUQSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX0xGKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfU1BMSVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoc2VsZi5ORVdMSU5FKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBkYXRhID0gW10KKyAgICAgICAgICAgIGQgPSBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICB3aGlsZSBkOgorICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGQpCisgICAgICAgICAgICAgICAgZCA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCisKKyAgICBkZWYgdGVzdF9zZWVrKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICBwb3MgPSBmcC50ZWxsKCkKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUWzE6XSkKKyAgICAgICAgICAgIGZwLnNlZWsocG9zKQorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVFsxOl0pCisKKyAgICBkZWYgdGVzdF9leGVjZmlsZShzZWxmKToKKyAgICAgICAgbmFtZXNwYWNlID0ge30KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgZXhlY2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgbmFtZXNwYWNlKQorICAgICAgICBmdW5jID0gbmFtZXNwYWNlWydsaW5lMyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYy5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXNwYWNlWydsaW5lNCddLCBGQVRYKQorCisKK2NsYXNzIFRlc3ROYXRpdmVOZXdsaW5lcyhUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyk6CisgICAgTkVXTElORSA9IE5vbmUKKyAgICBEQVRBID0gREFUQV9MRgorICAgIFJFQURNT0RFID0gJ3InCisgICAgV1JJVEVNT0RFID0gJ3cnCisKK2NsYXNzIFRlc3RDUk5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gJ1xyJworICAgIERBVEEgPSBEQVRBX0NSCisKK2NsYXNzIFRlc3RMRk5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gJ1xuJworICAgIERBVEEgPSBEQVRBX0xGCisKK2NsYXNzIFRlc3RDUkxGTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgorICAgIE5FV0xJTkUgPSAnXHJcbicKKyAgICBEQVRBID0gREFUQV9DUkxGCisKKyAgICBkZWYgdGVzdF90ZWxsKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKE5vbmUpKQorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHBvcyA9IGZwLnRlbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCisKK2NsYXNzIFRlc3RNaXhlZE5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gKCdccicsICdcbicpCisgICAgREFUQSA9IERBVEFfTUlYRUQKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdE5hdGl2ZU5ld2xpbmVzLAorICAgICAgICBUZXN0Q1JOZXdsaW5lcywKKyAgICAgICAgVGVzdExGTmV3bGluZXMsCisgICAgICAgIFRlc3RDUkxGTmV3bGluZXMsCisgICAgICAgIFRlc3RNaXhlZE5ld2xpbmVzCisgICAgICkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQppbmRleCA0MDIzMDljLi5jNmUyNGQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAjIE1ha2Ugc3VyZSBvYmplY3QgcmV0dXJuZWQgYnkgdXJsb3BlbigpIGhhcyB0aGUgc3BlY2lmaWVkIG1ldGhvZHMKICAgICAgICAgZm9yIGF0dHIgaW4gKCJyZWFkIiwgInJlYWRsaW5lIiwgInJlYWRsaW5lcyIsICJmaWxlbm8iLAogICAgICAgICAgICAgICAgICAgICAgImNsb3NlIiwgImluZm8iLCAiZ2V0dXJsIiwgImdldGNvZGUiLCAiX19pdGVyX18iKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKHNlbGYucmV0dXJuZWRfb2JqLCBhdHRyKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYucmV0dXJuZWRfb2JqLCBhdHRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHJldHVybmVkIGJ5IHVybG9wZW4oKSBsYWNrcyAlcyBhdHRyaWJ1dGUiICUKICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyKQogCkBAIC02Niw4ICs2Niw3IEBACiAKICAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CiAgICAgICAgIGZpbGVfbnVtID0gc2VsZi5yZXR1cm5lZF9vYmouZmlsZW5vKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoZmlsZV9udW0sIGludCksCi0gICAgICAgICAgICAgICAgICAgICAiZmlsZW5vKCkgZGlkIG5vdCByZXR1cm4gYW4gaW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpbGVfbnVtLCBpbnQsICJmaWxlbm8oKSBkaWQgbm90IHJldHVybiBhbiBpbnQiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQoZmlsZV9udW0sIGxlbihzZWxmLnRleHQpKSwgc2VsZi50ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICJSZWFkaW5nIG9uIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgZmlsZW5vKCkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IHJldHVybiB0aGUgZXhwZWN0ZWQgdGV4dCIpCkBAIC03OCw3ICs3Nyw3IEBACiAgICAgICAgIHNlbGYucmV0dXJuZWRfb2JqLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHNlbGYucmV0dXJuZWRfb2JqLmluZm8oKSwgbWltZXRvb2xzLk1lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5yZXR1cm5lZF9vYmouaW5mbygpLCBtaW1ldG9vbHMuTWVzc2FnZSkKIAogICAgIGRlZiB0ZXN0X2dldHVybChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJldHVybmVkX29iai5nZXR1cmwoKSwgc2VsZi5wYXRobmFtZSkKQEAgLTExMyw3ICsxMTIsNyBAQAogICAgICAgICBzZWxmLmVudi5zZXQoJ05PX1BST1hZJywgJ2xvY2FsaG9zdCcpCiAgICAgICAgIHByb3hpZXMgPSB1cmxsaWIuZ2V0cHJveGllc19lbnZpcm9ubWVudCgpCiAgICAgICAgICMgZ2V0cHJveGllc19lbnZpcm9ubWVudCB1c2UgbG93ZXJlZCBjYXNlIHRydW5jYXRlZCAobm8gJ19wcm94eScpIGtleXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2xvY2FsaG9zdCcsIHByb3hpZXNbJ25vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2xvY2FsaG9zdCcsIHByb3hpZXNbJ25vJ10pCiAKIAogY2xhc3MgdXJsb3Blbl9IdHRwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjI4LDkgKzIyNyw5IEBACiAgICAgICAgICMgYSBoZWFkZXJzIHZhbHVlIGlzIHJldHVybmVkLgogICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJscmV0cmlldmUoImZpbGU6JXMiICUgdGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbMF0sIHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHJlc3VsdFsxXSwgbWltZXRvb2xzLk1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgZ2V0IGEgbWltZXRvb2xzLk1lc3NhZ2UgaW5zdGFuY2UgYXMgc2Vjb25kICIKLSAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCB2YWx1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHRbMV0sIG1pbWV0b29scy5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgZ2V0IGEgbWltZXRvb2xzLk1lc3NhZ2UgaW5zdGFuY2UgYXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCByZXR1cm5lZCB2YWx1ZSIpCiAKICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBzZXR0aW5nIHRoZSBmaWxlbmFtZSBhcmd1bWVudCB3b3Jrcy4KQEAgLTIzOSw3ICsyMzgsNyBAQAogICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJscmV0cmlldmUoc2VsZi5jb25zdHJ1Y3RMb2NhbEZpbGVVcmwoCiAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgc2Vjb25kX3RlbXApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kX3RlbXAsIHJlc3VsdFswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKHNlY29uZF90ZW1wKSwgImNvcHkgb2YgdGhlIGZpbGUgd2FzIG5vdCAiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWNvbmRfdGVtcCksICJjb3B5IG9mIHRoZSBmaWxlIHdhcyBub3QgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFkZSIpCiAgICAgICAgIEZJTEUgPSBmaWxlKHNlY29uZF90ZW1wLCAncmInKQogICAgICAgICB0cnk6CkBAIC0yNTMsOSArMjUyLDkgQEAKICAgICBkZWYgdGVzdF9yZXBvcnRob29rKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXBvcnRob29rIHdvcmtzLgogICAgICAgICBkZWYgaG9va3Rlc3Rlcihjb3VudCwgYmxvY2tfc2l6ZSwgdG90YWxfc2l6ZSwgY291bnRfaG9sZGVyPVswXSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjb3VudCwgaW50KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGJsb2NrX3NpemUsIGludCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh0b3RhbF9zaXplLCBpbnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNvdW50LCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYmxvY2tfc2l6ZSwgaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRvdGFsX3NpemUsIGludCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIGNvdW50X2hvbGRlclswXSkKICAgICAgICAgICAgIGNvdW50X2hvbGRlclswXSA9IGNvdW50X2hvbGRlclswXSArIDEKICAgICAgICAgc2Vjb25kX3RlbXAgPSAiJXMuMiIgJSB0ZXN0X3N1cHBvcnQuVEVTVEZOCkBAIC0zODIsNiArMzgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGUoKTogJXMgIT0gJXMiICUgKGV4cGVjdGVkLCByZXN1bHQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHF1b3RlX3BsdXMoKTogJXMgIT0gJXMiICUgKGV4cGVjdGVkLCByZXN1bHQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHVybGxpYi5xdW90ZSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3F1b3Rpbmdfc3BhY2Uoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHF1b3RlKCkgYW5kIHF1b3RlX3BsdXMoKSBoYW5kbGUgc3BhY2VzIGFzIHNwZWNpZmllZCBpbgpAQCAtNTEyLDcgKzUxMiw3IEBACiAgICAgICAgIGV4cGVjdF9zb21ld2hlcmUgPSBbIjFzdD0xIiwgIjJuZD0yIiwgIjNyZD0zIl0KICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybGVuY29kZShnaXZlbikKICAgICAgICAgZm9yIGV4cGVjdGVkIGluIGV4cGVjdF9zb21ld2hlcmU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZXhwZWN0ZWQgaW4gcmVzdWx0LAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0aW5nICVzOiAlcyBub3QgZm91bmQgaW4gJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF90eXBlLCBleHBlY3RlZCwgcmVzdWx0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuY291bnQoJyYnKSwgMiwKQEAgLTUyMSw3ICs1MjEsNyBAQAogICAgICAgICBhbXBfbG9jYXRpb24gPSByZXN1bHQuaW5kZXgoJyYnKQogICAgICAgICBvbl9hbXBfbGVmdCA9IHJlc3VsdFthbXBfbG9jYXRpb24gLSAxXQogICAgICAgICBvbl9hbXBfcmlnaHQgPSByZXN1bHRbYW1wX2xvY2F0aW9uICsgMV0KLSAgICAgICAgc2VsZi5hc3NlcnRfKG9uX2FtcF9sZWZ0LmlzZGlnaXQoKSBhbmQgb25fYW1wX3JpZ2h0LmlzZGlnaXQoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9uX2FtcF9sZWZ0LmlzZGlnaXQoKSBhbmQgb25fYW1wX3JpZ2h0LmlzZGlnaXQoKSwKICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0aW5nICVzOiAnJicgbm90IGxvY2F0ZWQgaW4gcHJvcGVyIHBsYWNlIGluICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAodGVzdF90eXBlLCByZXN1bHQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCAoNSAqIDMpICsgMiwgIzUgY2hhcnMgcGVyIHRoaW5nIGFuZCBhbXBzCkBAIC01NTksOCArNTU5LDcgQEAKICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybGVuY29kZShnaXZlbiwgVHJ1ZSkKICAgICAgICAgZm9yIHZhbHVlIGluIGdpdmVuWyJzZXF1ZW5jZSJdOgogICAgICAgICAgICAgZXhwZWN0ID0gInNlcXVlbmNlPSVzIiAlIHZhbHVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZXhwZWN0IGluIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgbm90IGZvdW5kIGluICVzIiAlIChleHBlY3QsIHJlc3VsdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdCwgcmVzdWx0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb3VudCgnJicpLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCAyICcmJ3MsIGdvdCAlcyIgJSByZXN1bHQuY291bnQoJyYnKSkKIApAQCAtNjA3LDggKzYwNiwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJ1cmwycGF0aG5hbWUoKSBmYWlsZWQ7ICVzICE9ICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdCwgcmVzdWx0KSkKIAorY2xhc3MgVXRpbGl0eV9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdGNhc2UgdG8gdGVzdCB0aGUgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBpbiB0aGUgdXJsbGliLiIiIgorCisgICAgZGVmIHRlc3Rfc3BsaXRwYXNzd2Qoc2VsZik6CisgICAgICAgICIiIlNvbWUgb2YgdGhlIHBhc3N3b3JkIGV4YW1wbGVzIGFyZSBub3Qgc2Vuc2libGUsIGJ1dCBpdCBpcyBhZGRlZCB0bworICAgICAgICBjb25maXJtaW5nIHRvIFJGQzI2MTcgYW5kIGFkZHJlc3NpbmcgaXNzdWU0Njc1LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYWInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YWInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYVxuYicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlcjphXG5iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FcdGInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YVx0YicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhXHJiJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyOmFccmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYVxmYicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlcjphXGZiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FcdmInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YVx2YicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhOmInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YTpiJykpCisKKwogY2xhc3MgVVJMb3BlbmVyX1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0Y2FzZSB0byB0ZXN0IHRoZSBvcGVuIG1ldGhvZCBvZiBVUkxvcGVuZXIgY2xhc3MuIiIiCisKICAgICBkZWYgdGVzdF9xdW90ZWRfb3BlbihzZWxmKToKICAgICAgICAgY2xhc3MgRHVtbXlVUkxvcGVuZXIodXJsbGliLlVSTG9wZW5lcik6CiAgICAgICAgICAgICBkZWYgb3Blbl9zcGFtKHNlbGYsIHVybCk6CkBAIC02NzQsNyArNjkwLDcgQEAKICMgICAgIGRlZiB0ZXN0VGltZW91dE5vbmUoc2VsZik6CiAjICAgICAgICAgIyBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0IGlzIGlnbm9yZWQKICMgICAgICAgICBpbXBvcnQgc29ja2V0Ci0jICAgICAgICAgc2VsZi5hc3NlcnRfKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisjICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCiAjICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQogIyAgICAgICAgIHRyeToKICMgICAgICAgICAgICAgZnRwID0gdXJsbGliLmZ0cHdyYXBwZXIoIm15dXNlciIsICJteXBhc3MiLCAibG9jYWxob3N0IiwgOTA5MywgW10pCkBAIC02ODYsNyArNzAyLDcgQEAKICMgICAgIGRlZiB0ZXN0VGltZW91dERlZmF1bHQoc2VsZik6CiAjICAgICAgICAgIyBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0IGlzIHVzZWQKICMgICAgICAgICBpbXBvcnQgc29ja2V0Ci0jICAgICAgICAgc2VsZi5hc3NlcnRfKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisjICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCiAjICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQogIyAgICAgICAgIHRyeToKICMgICAgICAgICAgICAgZnRwID0gdXJsbGliLmZ0cHdyYXBwZXIoIm15dXNlciIsICJteXBhc3MiLCAibG9jYWxob3N0IiwgOTA5MywgW10pCkBAIC03MTcsNiArNzMzLDcgQEAKICAgICAgICAgICAgIFVucXVvdGluZ1Rlc3RzLAogICAgICAgICAgICAgdXJsZW5jb2RlX1Rlc3RzLAogICAgICAgICAgICAgUGF0aG5hbWVfVGVzdHMsCisgICAgICAgICAgICBVdGlsaXR5X1Rlc3RzLAogICAgICAgICAgICAgVVJMb3BlbmVyX1Rlc3RzLAogICAgICAgICAgICAgI0ZUUFdyYXBwZXJUZXN0cywKICAgICAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CmluZGV4IDY1YWQ4ZTMuLjc4OWRjZDMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKQEAgLTI0LDkgKzI0LDcgQEAKIAogICAgICAgICAjIEFuZCBtb3JlIGhhY2tpbmcgdG8gZ2V0IGl0IHRvIHdvcmsgb24gTWFjT1MuIFRoaXMgYXNzdW1lcwogICAgICAgICAjIHVybGxpYi5wYXRobmFtZTJ1cmwgd29ya3MsIHVuZm9ydHVuYXRlbHkuLi4KLSAgICAgICAgaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICAgICAgICAgIGZuYW1lID0gJy8nICsgZm5hbWUucmVwbGFjZSgnOicsICcvJykKLSAgICAgICAgZWxpZiBvcy5uYW1lID09ICdyaXNjb3MnOgorICAgICAgICBpZiBvcy5uYW1lID09ICdyaXNjb3MnOgogICAgICAgICAgICAgaW1wb3J0IHN0cmluZwogICAgICAgICAgICAgZm5hbWUgPSBvcy5leHBhbmQoZm5hbWUpCiAgICAgICAgICAgICBmbmFtZSA9IGZuYW1lLnRyYW5zbGF0ZShzdHJpbmcubWFrZXRyYW5zKCIvLiIsICIuLyIpKQpAQCAtNDcsNyArNDUsNyBAQAogICAgICAgICAgICAgICAgICAoJ2EsIGIsICJjIiwgImQiLCAiZSxmIiwgZywgaCcsIFsnYScsICdiJywgJyJjIicsICciZCInLCAnImUsZiInLCAnZycsICdoJ10pLAogICAgICAgICAgICAgICAgICAoJ2E9ImJcXCJjIiwgZD0iZVxcLGYiLCBnPSJoXFxcXGkiJywgWydhPSJiImMiJywgJ2Q9ImUsZiInLCAnZz0iaFxcaSInXSldCiAgICAgICAgIGZvciBzdHJpbmcsIGxpc3QgaW4gdGVzdHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1cmxsaWIyLnBhcnNlX2h0dHBfbGlzdChzdHJpbmcpLCBsaXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIyLnBhcnNlX2h0dHBfbGlzdChzdHJpbmcpLCBsaXN0KQogCiAKIGRlZiB0ZXN0X3JlcXVlc3RfaGVhZGVyc19kaWN0KCk6CkBAIC0yODgsNyArMjg2LDcgQEAKICAgICBkZWYgc2V0X2RlYnVnbGV2ZWwoc2VsZiwgbGV2ZWwpOgogICAgICAgICBzZWxmLmxldmVsID0gbGV2ZWwKIAotICAgIGRlZiBfc2V0X3R1bm5lbChzZWxmLCBob3N0LCBwb3J0PU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgZGVmIHNldF90dW5uZWwoc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBoZWFkZXJzPU5vbmUpOgogICAgICAgICBzZWxmLl90dW5uZWxfaG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi5fdHVubmVsX3BvcnQgPSBwb3J0CiAgICAgICAgIGlmIGhlYWRlcnM6CkBAIC01ODAsMTUgKzU3OCwxNSBAQAogICAgICAgICAgICAgICAgICMgKl9yZXF1ZXN0CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoaGFuZGxlciwgbmFtZSksIGNhbGxzW2ldKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFyZ3MpLCAxKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGFyZ3NbMF0sIFJlcXVlc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhcmdzWzBdLCBSZXF1ZXN0KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjICpfcmVzcG9uc2UKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChoYW5kbGVyLCBuYW1lKSwgY2FsbHNbaV0pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXJncyksIDIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYXJnc1swXSwgUmVxdWVzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFyZ3NbMF0sIFJlcXVlc3QpCiAgICAgICAgICAgICAgICAgIyByZXNwb25zZSBmcm9tIG9wZW5lci5vcGVuIGlzIE5vbmUsIGJlY2F1c2UgdGhlcmUncyBubwogICAgICAgICAgICAgICAgICMgaGFuZGxlciB0aGF0IGRlZmluZXMgaHR0cF9vcGVuIHRvIGhhbmRsZSBpdAotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhhcmdzWzFdIGlzIE5vbmUgb3IKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJnc1sxXSBpcyBOb25lIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoYXJnc1sxXSwgTW9ja1Jlc3BvbnNlKSkKIAogCkBAIC02MjQsMjIgKzYyMiwzMiBAQAogICAgICAgICBoID0gTnVsbEZUUEhhbmRsZXIoZGF0YSkKICAgICAgICAgbyA9IGgucGFyZW50ID0gTW9ja09wZW5lcigpCiAKLSAgICAgICAgZm9yIHVybCwgaG9zdCwgcG9ydCwgdHlwZV8sIGRpcnMsIGZpbGVuYW1lLCBtaW1ldHlwZSBpbiBbCisgICAgICAgIGZvciB1cmwsIGhvc3QsIHBvcnQsIHVzZXIsIHBhc3N3ZCwgdHlwZV8sIGRpcnMsIGZpbGVuYW1lLCBtaW1ldHlwZSBpbiBbCiAgICAgICAgICAgICAoImZ0cDovL2xvY2FsaG9zdC9mb28vYmFyL2Jhei5odG1sIiwKLSAgICAgICAgICAgICAibG9jYWxob3N0IiwgZnRwbGliLkZUUF9QT1JULCAiSSIsCisgICAgICAgICAgICAgImxvY2FsaG9zdCIsIGZ0cGxpYi5GVFBfUE9SVCwgIiIsICIiLCAiSSIsCisgICAgICAgICAgICAgWyJmb28iLCAiYmFyIl0sICJiYXouaHRtbCIsICJ0ZXh0L2h0bWwiKSwKKyAgICAgICAgICAgICgiZnRwOi8vcGFycm90QGxvY2FsaG9zdC9mb28vYmFyL2Jhei5odG1sIiwKKyAgICAgICAgICAgICAibG9jYWxob3N0IiwgZnRwbGliLkZUUF9QT1JULCAicGFycm90IiwgIiIsICJJIiwKKyAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSwgImJhei5odG1sIiwgInRleHQvaHRtbCIpLAorICAgICAgICAgICAgKCJmdHA6Ly8lMjVwYXJyb3RAbG9jYWxob3N0L2Zvby9iYXIvYmF6Lmh0bWwiLAorICAgICAgICAgICAgICJsb2NhbGhvc3QiLCBmdHBsaWIuRlRQX1BPUlQsICIlcGFycm90IiwgIiIsICJJIiwKKyAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSwgImJhei5odG1sIiwgInRleHQvaHRtbCIpLAorICAgICAgICAgICAgKCJmdHA6Ly8lMjU0MnBhcnJvdEBsb2NhbGhvc3QvZm9vL2Jhci9iYXouaHRtbCIsCisgICAgICAgICAgICAgImxvY2FsaG9zdCIsIGZ0cGxpYi5GVFBfUE9SVCwgIiU0MnBhcnJvdCIsICIiLCAiSSIsCiAgICAgICAgICAgICAgWyJmb28iLCAiYmFyIl0sICJiYXouaHRtbCIsICJ0ZXh0L2h0bWwiKSwKICAgICAgICAgICAgICgiZnRwOi8vbG9jYWxob3N0OjgwL2Zvby9iYXIvIiwKLSAgICAgICAgICAgICAibG9jYWxob3N0IiwgODAsICJEIiwKKyAgICAgICAgICAgICAibG9jYWxob3N0IiwgODAsICIiLCAiIiwgIkQiLAogICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdLCAiIiwgTm9uZSksCiAgICAgICAgICAgICAoImZ0cDovL2xvY2FsaG9zdC9iYXouZ2lmO3R5cGU9YSIsCi0gICAgICAgICAgICAgImxvY2FsaG9zdCIsIGZ0cGxpYi5GVFBfUE9SVCwgIkEiLAorICAgICAgICAgICAgICJsb2NhbGhvc3QiLCBmdHBsaWIuRlRQX1BPUlQsICIiLCAiIiwgIkEiLAogICAgICAgICAgICAgIFtdLCAiYmF6LmdpZiIsIE5vbmUpLCAgIyBYWFggcmVhbGx5IHRoaXMgc2hvdWxkIGd1ZXNzIGltYWdlL2dpZgogICAgICAgICAgICAgXToKICAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQogICAgICAgICAgICAgcmVxLnRpbWVvdXQgPSBOb25lCiAgICAgICAgICAgICByID0gaC5mdHBfb3BlbihyZXEpCiAgICAgICAgICAgICAjIGZ0cCBhdXRoZW50aWNhdGlvbiBub3QgeWV0IGltcGxlbWVudGVkIGJ5IEZUUEhhbmRsZXIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoLnVzZXIgPT0gaC5wYXNzd2QgPT0gIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgudXNlciwgdXNlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5wYXNzd2QsIHBhc3N3ZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ob3N0LCBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5wb3J0LCBwb3J0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpcnMsIGRpcnMpCkBAIC03MzYsMTEgKzc0NCwxMSBAQAogICAgICAgICAgICAgICAgIGguZmlsZV9vcGVuKHJlcSkKICAgICAgICAgICAgICMgWFhYWCByZW1vdmUgT1NFcnJvciB3aGVuIGJ1ZyBmaXhlZAogICAgICAgICAgICAgZXhjZXB0ICh1cmxsaWIyLlVSTEVycm9yLCBPU0Vycm9yKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8obm90IGZ0cCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZ0cCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG8ucmVxIGlzIHJlcSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoby5yZXEgaXMgcmVxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnR5cGUsICJmdHAiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEudHlwZSBpcyAiZnRwIiwgZnRwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEudHlwZSA9PSAiZnRwIiwgZnRwKQogCiAgICAgZGVmIHRlc3RfaHR0cChzZWxmKToKIApAQCAtNzgzLDggKzc5MSw4IEBACiAgICAgICAgICAgICByID0gTW9ja1Jlc3BvbnNlKDIwMCwgIk9LIiwge30sICIiKQogICAgICAgICAgICAgbmV3cmVxID0gaC5kb19yZXF1ZXN0XyhyZXEpCiAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6ICAjIEdFVAotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygiQ29udGVudC1sZW5ndGgiIG5vdCBpbiByZXEudW5yZWRpcmVjdGVkX2hkcnMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCJDb250ZW50LXR5cGUiIG5vdCBpbiByZXEudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCByZXEudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC10eXBlIiwgcmVxLnVucmVkaXJlY3RlZF9oZHJzKQogICAgICAgICAgICAgZWxzZTogICMgUE9TVAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnVucmVkaXJlY3RlZF9oZHJzWyJDb250ZW50LWxlbmd0aCJdLCAiMCIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEudW5yZWRpcmVjdGVkX2hkcnNbIkNvbnRlbnQtdHlwZSJdLApAQCAtODMwLDYgKzgzOCwyNSBAQAogICAgICAgICAgICAgcF9kc19yZXEgPSBoLmRvX3JlcXVlc3RfKGRzX3JlcSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocF9kc19yZXEudW5yZWRpcmVjdGVkX2hkcnNbIkhvc3QiXSwiZXhhbXBsZS5jb20iKQogCisgICAgZGVmIHRlc3RfZml4cGF0aF9pbl93ZWlyZHVybHMoc2VsZik6CisgICAgICAgICMgSXNzdWU0NDkzOiB1cmxsaWIyIHRvIHN1cHBseSAnLycgd2hlbiB0byB1cmxzIHdoZXJlIHBhdGggZG9lcyBub3QKKyAgICAgICAgIyBzdGFydCB3aXRoJy8nCisKKyAgICAgICAgaCA9IHVybGxpYjIuQWJzdHJhY3RIVFRQSGFuZGxlcigpCisgICAgICAgIG8gPSBoLnBhcmVudCA9IE1vY2tPcGVuZXIoKQorCisgICAgICAgIHdlaXJkX3VybCA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmc/Z2V0c3BhbScKKyAgICAgICAgcmVxID0gUmVxdWVzdCh3ZWlyZF91cmwpCisgICAgICAgIG5ld3JlcSA9IGguZG9fcmVxdWVzdF8ocmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5nZXRfaG9zdCgpLCd3d3cucHl0aG9uLm9yZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3cmVxLmdldF9zZWxlY3RvcigpLCcvP2dldHNwYW0nKQorCisgICAgICAgIHVybF93aXRob3V0X3BhdGggPSAnaHR0cDovL3d3dy5weXRob24ub3JnJworICAgICAgICByZXEgPSBSZXF1ZXN0KHVybF93aXRob3V0X3BhdGgpCisgICAgICAgIG5ld3JlcSA9IGguZG9fcmVxdWVzdF8ocmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5nZXRfaG9zdCgpLCd3d3cucHl0aG9uLm9yZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3cmVxLmdldF9zZWxlY3RvcigpLCcnKQorCiAgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgogICAgICAgICBoID0gdXJsbGliMi5IVFRQRXJyb3JQcm9jZXNzb3IoKQogICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKQEAgLTgzOSwxOSArODY2LDE5IEBACiAgICAgICAgICMgYWxsIDJ4eCBhcmUgcGFzc2VkIHRocm91Z2gKICAgICAgICAgciA9IE1vY2tSZXNwb25zZSgyMDAsICJPSyIsIHt9LCAiIiwgdXJsKQogICAgICAgICBuZXdyID0gaC5odHRwX3Jlc3BvbnNlKHJlcSwgcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHIgaXMgbmV3cikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBoYXNhdHRyKG8sICJwcm90byIpKSAgIyBvLmVycm9yIG5vdCBjYWxsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgaXMgbmV3cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG8sICJwcm90byIpKSAgIyBvLmVycm9yIG5vdCBjYWxsZWQKICAgICAgICAgciA9IE1vY2tSZXNwb25zZSgyMDIsICJBY2NlcHRlZCIsIHt9LCAiIiwgdXJsKQogICAgICAgICBuZXdyID0gaC5odHRwX3Jlc3BvbnNlKHJlcSwgcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHIgaXMgbmV3cikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBoYXNhdHRyKG8sICJwcm90byIpKSAgIyBvLmVycm9yIG5vdCBjYWxsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgaXMgbmV3cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG8sICJwcm90byIpKSAgIyBvLmVycm9yIG5vdCBjYWxsZWQKICAgICAgICAgciA9IE1vY2tSZXNwb25zZSgyMDYsICJQYXJ0aWFsIGNvbnRlbnQiLCB7fSwgIiIsIHVybCkKICAgICAgICAgbmV3ciA9IGguaHR0cF9yZXNwb25zZShyZXEsIHIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyIGlzIG5ld3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaGFzYXR0cihvLCAicHJvdG8iKSkgICMgby5lcnJvciBub3QgY2FsbGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyIGlzIG5ld3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihvLCAicHJvdG8iKSkgICMgby5lcnJvciBub3QgY2FsbGVkCiAgICAgICAgICMgYW55dGhpbmcgZWxzZSBjYWxscyBvLmVycm9yIChhbmQgTW9ja09wZW5lciByZXR1cm5zIE5vbmUsIGhlcmUpCiAgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoNTAyLCAiQmFkIGdhdGV3YXkiLCB7fSwgIiIsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGguaHR0cF9yZXNwb25zZShyZXEsIHIpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLmh0dHBfcmVzcG9uc2UocmVxLCByKSBpcyBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8ucHJvdG8sICJodHRwIikgICMgby5lcnJvciBjYWxsZWQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLmFyZ3MsIChyZXEsIHIsIDUwMiwgIkJhZCBnYXRld2F5Iiwge30pKQogCkBAIC04NjMsMTIgKzg5MCwxMiBAQAogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vIikKICAgICAgICAgciA9IE1vY2tSZXNwb25zZSgyMDAsICJPSyIsIHt9LCAiIikKICAgICAgICAgbmV3cmVxID0gaC5odHRwX3JlcXVlc3QocmVxKQotICAgICAgICBzZWxmLmFzc2VydF8oY2ouYWNoX3JlcSBpcyByZXEgaXMgbmV3cmVxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXEuZ2V0X29yaWdpbl9yZXFfaG9zdCgpLCAiZXhhbXBsZS5jb20iKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHJlcS5pc191bnZlcmlmaWFibGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNqLmFjaF9yZXEgaXMgcmVxIGlzIG5ld3JlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X29yaWdpbl9yZXFfaG9zdCgpLCAiZXhhbXBsZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHJlcS5pc191bnZlcmlmaWFibGUoKSkKICAgICAgICAgbmV3ciA9IGguaHR0cF9yZXNwb25zZShyZXEsIHIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjai5lY19yZXEgaXMgcmVxKQotICAgICAgICBzZWxmLmFzc2VydF8oY2ouZWNfciBpcyByIGlzIG5ld3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjai5lY19yZXEgaXMgcmVxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2ouZWNfciBpcyByIGlzIG5ld3IpCiAKICAgICBkZWYgdGVzdF9yZWRpcmVjdChzZWxmKToKICAgICAgICAgZnJvbV91cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tL2EuaHRtbCIKQEAgLTg5MSwyMyArOTE4LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2NrSGVhZGVycyh7ImxvY2F0aW9uIjogdG9fdXJsfSkpCiAgICAgICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yOgogICAgICAgICAgICAgICAgICAgICAjIDMwNyBpbiByZXNwb25zZSB0byBQT1NUIHJlcXVpcmVzIHVzZXIgT0sKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNvZGUgPT0gMzA3IGFuZCBkYXRhIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29kZSA9PSAzMDcgYW5kIGRhdGEgaXMgbm90IE5vbmUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLnJlcS5nZXRfZnVsbF91cmwoKSwgdG9fdXJsKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLnJlcS5nZXRfbWV0aG9kKCksICJHRVQiKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBvLnJlcS5oYXNfZGF0YSgpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG8ucmVxLmhhc19kYXRhKCkpCiAKICAgICAgICAgICAgICAgICAjIG5vdyBpdCdzIGEgR0VULCB0aGVyZSBzaG91bGQgbm90IGJlIGhlYWRlcnMgcmVnYXJkaW5nIGNvbnRlbnQKICAgICAgICAgICAgICAgICAjIChwb3NzaWJseSBkcmFnZ2VkIGZyb20gYmVmb3JlIGJlaW5nIGEgUE9TVCkKICAgICAgICAgICAgICAgICBoZWFkZXJzID0gW3gubG93ZXIoKSBmb3IgeCBpbiBvLnJlcS5oZWFkZXJzXQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiY29udGVudC1sZW5ndGgiIG5vdCBpbiBoZWFkZXJzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiY29udGVudC10eXBlIiBub3QgaW4gaGVhZGVycykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJjb250ZW50LWxlbmd0aCIsIGhlYWRlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiY29udGVudC10eXBlIiwgaGVhZGVycykKIAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5yZXEuaGVhZGVyc1siTm9uc2Vuc2UiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2aWtpbmc9d2l0aGhvbGQiKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygiU3BhbSIgbm90IGluIG8ucmVxLmhlYWRlcnMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCJTcGFtIiBub3QgaW4gby5yZXEudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiU3BhbSIsIG8ucmVxLmhlYWRlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiU3BhbSIsIG8ucmVxLnVucmVkaXJlY3RlZF9oZHJzKQogCiAgICAgICAgICMgbG9vcCBkZXRlY3Rpb24KICAgICAgICAgcmVxID0gUmVxdWVzdChmcm9tX3VybCkKQEAgLTk1Niw3ICs5ODMsNyBAQAogICAgICAgICBjcCA9IHVybGxpYjIuSFRUUENvb2tpZVByb2Nlc3NvcihjaikKICAgICAgICAgbyA9IGJ1aWxkX3Rlc3Rfb3BlbmVyKGhoLCBoZGVoLCBocmgsIGNwKQogICAgICAgICBvLm9wZW4oImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBoaC5yZXEuaGFzX2hlYWRlcigiQ29va2llIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGgucmVxLmhhc19oZWFkZXIoIkNvb2tpZSIpKQogCiAgICAgZGVmIHRlc3RfcHJveHkoc2VsZik6CiAgICAgICAgIG8gPSBPcGVuZXJEaXJlY3RvcigpCkBAIC0xMDE2LDE2ICsxMDQzLDE2IEBACiAgICAgICAgIHJlcS5hZGRfaGVhZGVyKCJQcm94eS1BdXRob3JpemF0aW9uIiwiRm9vQmFyIikKICAgICAgICAgcmVxLmFkZF9oZWFkZXIoIlVzZXItQWdlbnQiLCJHcmFpbCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9ob3N0KCksICJ3d3cuZXhhbXBsZS5jb20iKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVxLl90dW5uZWxfaG9zdCBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXEuX3R1bm5lbF9ob3N0KQogICAgICAgICByID0gby5vcGVuKHJlcSkKICAgICAgICAgIyBWZXJpZnkgUHJveHktQXV0aG9yaXphdGlvbiBnZXRzIHR1bm5lbGVkIHRvIHJlcXVlc3QuCiAgICAgICAgICMgaHR0cHNjb25uIHJlcV9oZWFkZXJzIGRvIG5vdCBoYXZlIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGhlYWRlciBidXQKICAgICAgICAgIyB0aGUgcmVxIHdpbGwgaGF2ZS4KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoIlByb3h5LUF1dGhvcml6YXRpb24iLCJGb29CYXIiKSBpbgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgiUHJveHktQXV0aG9yaXphdGlvbiIsIkZvb0JhciIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzX2hhbmRsZXIuaHR0cGNvbm4ucmVxX2hlYWRlcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoIlVzZXItQWdlbnQiLCJHcmFpbCIpIGluCi0gICAgICAgICAgICAgICAgICAgICAgICBodHRwc19oYW5kbGVyLmh0dHBjb25uLnJlcV9oZWFkZXJzKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcS5fdHVubmVsX2hvc3QgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoIlVzZXItQWdlbnQiLCJHcmFpbCIpLAorICAgICAgICAgICAgICAgICAgICAgIGh0dHBzX2hhbmRsZXIuaHR0cGNvbm4ucmVxX2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlcS5fdHVubmVsX2hvc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9ob3N0KCksICJwcm94eS5leGFtcGxlLmNvbTozMTI4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hlYWRlcigiUHJveHktYXV0aG9yaXphdGlvbiIpLCJGb29CYXIiKQogCkBAIC0xMTkyLDcgKzEyMTksNyBAQAogICAgICAgICAgICAgaWYgaC5fX2NsYXNzX18gPT0gaGFuZGxlcl9jbGFzczoKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZhbHNlKQogCiBjbGFzcyBSZXF1ZXN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xMjA3LDEwICsxMjM0LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkdFVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKIAogICAgIGRlZiB0ZXN0X2FkZF9kYXRhKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8obm90IHNlbGYuZ2V0Lmhhc19kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5nZXQuaGFzX2RhdGEoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiR0VUIiwgc2VsZi5nZXQuZ2V0X21ldGhvZCgpKQogICAgICAgICBzZWxmLmdldC5hZGRfZGF0YSgic3BhbSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmdldC5oYXNfZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5nZXQuaGFzX2RhdGEoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKIAogICAgIGRlZiB0ZXN0X2dldF9mdWxsX3VybChzZWxmKToKQEAgLTEyMzMsMTIgKzEyNjAsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgid3d3LnB5dGhvbi5vcmciLCByZXEuZ2V0X2hvc3QoKSkKIAogICAgIGRlZiB0ZXN0X3Byb3h5KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8obm90IHNlbGYuZ2V0Lmhhc19wcm94eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuZ2V0Lmhhc19wcm94eSgpKQogICAgICAgICBzZWxmLmdldC5zZXRfcHJveHkoInd3dy5wZXJsLm9yZyIsICJodHRwIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuZ2V0Lmhhc19wcm94eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5nZXQuaGFzX3Byb3h5KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInd3dy5weXRob24ub3JnIiwgc2VsZi5nZXQuZ2V0X29yaWdpbl9yZXFfaG9zdCgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ3d3cucGVybC5vcmciLCBzZWxmLmdldC5nZXRfaG9zdCgpKQogCisgICAgZGVmIHRlc3Rfd3JhcHBlZF91cmwoc2VsZik6CisgICAgICAgIHJlcSA9IFJlcXVlc3QoIjxVUkw6aHR0cDovL3d3dy5weXRob24ub3JnPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInd3dy5weXRob24ub3JnIiwgcmVxLmdldF9ob3N0KCkpCisKKyAgICBkZWYgdGVzdF91cmx3aXRoX2ZyYWdtZW50KHNlbGYpOgorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvP3FzPXF1ZXJ5I2ZyYWdtZW50PXRydWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIvP3FzPXF1ZXJ5IiwgcmVxLmdldF9zZWxlY3RvcigpKQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvI2Z1bj10cnVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiLyIsIHJlcS5nZXRfc2VsZWN0b3IoKSkKKwogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3VybGxpYjIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQppbmRleCA1NjQzNDNhLi4wZmRhNzcwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CkBAIC0xLDYgKzEsNSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB1cmxwYXJzZQogaW1wb3J0IHVybGxpYjIKIGltcG9ydCBCYXNlSFRUUFNlcnZlcgpAQCAtOCw2ICs3LDcgQEAKIGltcG9ydCBoYXNobGliCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogbWltZXRvb2xzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ21pbWV0b29scycsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK3RocmVhZGluZyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCiAjIExvb3BiYWNrIGh0dHAgc2VydmVyIGluZnJhc3RydWN0dXJlCiAKQEAgLTE5NSw3ICsxOTUsMTEgQEAKICAgICB0ZXN0aW5nLgogICAgICIiIgogCi0gICAgZGlnZXN0X2F1dGhfaGFuZGxlciA9IERpZ2VzdEF1dGhIYW5kbGVyKCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlnZXN0X2F1dGhfaGFuZGxlciwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIyBUaGlzIGhhcyB0byBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgb3VyIHBhcmVudCdzIF9faW5pdF9fKCksIHdoaWNoIHdpbGwKKyAgICAgICAgIyB0cnkgdG8gY2FsbCBkb19HRVQoKS4KKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyID0gZGlnZXN0X2F1dGhfaGFuZGxlcgorICAgICAgICBCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKICAgICAgICAgIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSBmb3IgZGVidWdnaW5nLgpAQCAtMjE2LDcgKzIyMCwxNSBAQAogCiAjIFRlc3QgY2FzZXMKIAotY2xhc3MgUHJveHlBdXRoVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQorCisKK2NsYXNzIFByb3h5QXV0aFRlc3RzKEJhc2VUZXN0Q2FzZSk6CiAgICAgVVJMID0gImh0dHA6Ly9sb2NhbGhvc3QiCiAKICAgICBVU0VSID0gInRlc3RlciIKQEAgLTIyNCw0OSArMjM2LDUyIEBACiAgICAgUkVBTE0gPSAiVGVzdFJlYWxtIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBGYWtlUHJveHlIYW5kbGVyLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3VzZXJzKHsKLSAgICAgICAgICAgIHNlbGYuVVNFUiA6IHNlbGYuUEFTU1dECi0gICAgICAgICAgICB9KQotICAgICAgICBGYWtlUHJveHlIYW5kbGVyLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3JlYWxtKHNlbGYuUkVBTE0pCisgICAgICAgIHN1cGVyKFByb3h5QXV0aFRlc3RzLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlciA9IERpZ2VzdEF1dGhIYW5kbGVyKCkKKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF91c2Vycyh7c2VsZi5VU0VSOiBzZWxmLlBBU1NXRH0pCisgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfcmVhbG0oc2VsZi5SRUFMTSkKKyAgICAgICAgZGVmIGNyZWF0ZV9mYWtlX3Byb3h5X2hhbmRsZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJldHVybiBGYWtlUHJveHlIYW5kbGVyKHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlciwgKmFyZ3MsICoqa3dhcmdzKQogCi0gICAgICAgIHNlbGYuc2VydmVyID0gTG9vcGJhY2tIdHRwU2VydmVyVGhyZWFkKEZha2VQcm94eUhhbmRsZXIpCisgICAgICAgIHNlbGYuc2VydmVyID0gTG9vcGJhY2tIdHRwU2VydmVyVGhyZWFkKGNyZWF0ZV9mYWtlX3Byb3h5X2hhbmRsZXIpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VsZi5zZXJ2ZXIucmVhZHkud2FpdCgpCiAgICAgICAgIHByb3h5X3VybCA9ICJodHRwOi8vMTI3LjAuMC4xOiVkIiAlIHNlbGYuc2VydmVyLnBvcnQKICAgICAgICAgaGFuZGxlciA9IHVybGxpYjIuUHJveHlIYW5kbGVyKHsiaHR0cCIgOiBwcm94eV91cmx9KQotICAgICAgICBzZWxmLl9kaWdlc3RfYXV0aF9oYW5kbGVyID0gdXJsbGliMi5Qcm94eURpZ2VzdEF1dGhIYW5kbGVyKCkKLSAgICAgICAgc2VsZi5vcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcihoYW5kbGVyLCBzZWxmLl9kaWdlc3RfYXV0aF9oYW5kbGVyKQorICAgICAgICBzZWxmLnByb3h5X2RpZ2VzdF9oYW5kbGVyID0gdXJsbGliMi5Qcm94eURpZ2VzdEF1dGhIYW5kbGVyKCkKKyAgICAgICAgc2VsZi5vcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcihoYW5kbGVyLCBzZWxmLnByb3h5X2RpZ2VzdF9oYW5kbGVyKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKyAgICAgICAgc3VwZXIoUHJveHlBdXRoVGVzdHMsIHNlbGYpLnRlYXJEb3duKCkKIAogICAgIGRlZiB0ZXN0X3Byb3h5X3dpdGhfYmFkX3Bhc3N3b3JkX3JhaXNlc19odHRwZXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuX2RpZ2VzdF9hdXRoX2hhbmRsZXIuYWRkX3Bhc3N3b3JkKHNlbGYuUkVBTE0sIHNlbGYuVVJMLAorICAgICAgICBzZWxmLnByb3h5X2RpZ2VzdF9oYW5kbGVyLmFkZF9wYXNzd29yZChzZWxmLlJFQUxNLCBzZWxmLlVSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5VU0VSLCBzZWxmLlBBU1NXRCsiYmFkIikKLSAgICAgICAgRmFrZVByb3h5SGFuZGxlci5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9xb3AoImF1dGgiKQorICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3FvcCgiYXV0aCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYjIuSFRUUEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW5lci5vcGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlVSTCkKIAogICAgIGRlZiB0ZXN0X3Byb3h5X3dpdGhfbm9fcGFzc3dvcmRfcmFpc2VzX2h0dHBlcnJvcihzZWxmKToKLSAgICAgICAgRmFrZVByb3h5SGFuZGxlci5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9xb3AoImF1dGgiKQorICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3FvcCgiYXV0aCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYjIuSFRUUEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW5lci5vcGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlVSTCkKIAogICAgIGRlZiB0ZXN0X3Byb3h5X3FvcF9hdXRoX3dvcmtzKHNlbGYpOgotICAgICAgICBzZWxmLl9kaWdlc3RfYXV0aF9oYW5kbGVyLmFkZF9wYXNzd29yZChzZWxmLlJFQUxNLCBzZWxmLlVSTCwKKyAgICAgICAgc2VsZi5wcm94eV9kaWdlc3RfaGFuZGxlci5hZGRfcGFzc3dvcmQoc2VsZi5SRUFMTSwgc2VsZi5VUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVVNFUiwgc2VsZi5QQVNTV0QpCi0gICAgICAgIEZha2VQcm94eUhhbmRsZXIuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfcW9wKCJhdXRoIikKKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9xb3AoImF1dGgiKQogICAgICAgICByZXN1bHQgPSBzZWxmLm9wZW5lci5vcGVuKHNlbGYuVVJMKQogICAgICAgICB3aGlsZSByZXN1bHQucmVhZCgpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICByZXN1bHQuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfcHJveHlfcW9wX2F1dGhfaW50X3dvcmtzX29yX3Rocm93c191cmxlcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5fZGlnZXN0X2F1dGhfaGFuZGxlci5hZGRfcGFzc3dvcmQoc2VsZi5SRUFMTSwgc2VsZi5VUkwsCisgICAgICAgIHNlbGYucHJveHlfZGlnZXN0X2hhbmRsZXIuYWRkX3Bhc3N3b3JkKHNlbGYuUkVBTE0sIHNlbGYuVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlVTRVIsIHNlbGYuUEFTU1dEKQotICAgICAgICBGYWtlUHJveHlIYW5kbGVyLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3FvcCgiYXV0aC1pbnQiKQorICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3FvcCgiYXV0aC1pbnQiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLm9wZW5lci5vcGVuKHNlbGYuVVJMKQogICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvcjoKQEAgLTMyMiw3ICszMzcsNyBAQAogICAgIHJldHVybiBGYWtlSFRUUFJlcXVlc3RIYW5kbGVyCiAKIAotY2xhc3MgVGVzdFVybG9wZW4odW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVGVzdFVybG9wZW4oQmFzZVRlc3RDYXNlKToKICAgICAiIiJUZXN0cyB1cmxsaWIyLnVybG9wZW4gdXNpbmcgdGhlIG5ldHdvcmsuCiAKICAgICBUaGVzZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICBBc3N1bWluZyB0aGF0IHRlc3RpbmcgdXNpbmcgZmlsZXMgZG9lcyBhCkBAIC0zNTYsOCArMzcxLDggQEAKICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGEsIGV4cGVjdGVkX3Jlc3BvbnNlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGFuZGxlci5yZXF1ZXN0cywgWycvJywgJy9zb21ld2hlcmVfZWxzZSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9yZXNwb25zZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5yZXF1ZXN0cywgWycvJywgJy9zb21ld2hlcmVfZWxzZSddKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCiAKQEAgLTM3Nyw4ICszOTIsOCBAQAogICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCiAgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0YSwgZXhwZWN0ZWRfcmVzcG9uc2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhoYW5kbGVyLnJlcXVlc3RzLCBbJy93ZWVibGUnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfcmVzcG9uc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIucmVxdWVzdHMsIFsnL3dlZWJsZSddKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCiAKQEAgLTM5Miw4ICs0MDcsOCBAQAogICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCiAgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0YSwgZXhwZWN0ZWRfcmVzcG9uc2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhoYW5kbGVyLnJlcXVlc3RzLCBbJy9iaXphcnJlJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX3Jlc3BvbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLnJlcXVlc3RzLCBbJy9iaXphcnJlJ10pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKIApAQCAtNDA2LDggKzQyMSw4IEBACiAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkYXRhLCBleHBlY3RlZF9yZXNwb25zZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhhbmRsZXIucmVxdWVzdHMsIFsnL2JpemFycmUnLCAnZ2V0PXdpdGhfZmVlbGluZyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9yZXNwb25zZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5yZXF1ZXN0cywgWycvYml6YXJyZScsICdnZXQ9d2l0aF9mZWVsaW5nJ10pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKIApAQCAtNDI5LDEwICs0NDQsMTAgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Blbl91cmwgPSB1cmxsaWIyLnVybG9wZW4oImh0dHA6Ly9sb2NhbGhvc3Q6JXMiICUgaGFuZGxlci5wb3J0KQogICAgICAgICAgICAgZm9yIGF0dHIgaW4gKCJyZWFkIiwgImNsb3NlIiwgImluZm8iLCAiZ2V0dXJsIik6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIob3Blbl91cmwsIGF0dHIpLCAib2JqZWN0IHJldHVybmVkIGZyb20gIgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG9wZW5fdXJsLCBhdHRyKSwgIm9iamVjdCByZXR1cm5lZCBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVybG9wZW4gbGFja3MgdGhlICVzIGF0dHJpYnV0ZSIgJSBhdHRyKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvcGVuX3VybC5yZWFkKCksICJjYWxsaW5nICdyZWFkJyBmYWlsZWQiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVuX3VybC5yZWFkKCksICJjYWxsaW5nICdyZWFkJyBmYWlsZWQiKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBvcGVuX3VybC5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6CkBAIC00NDQsOSArNDU5LDkgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Blbl91cmwgPSB1cmxsaWIyLnVybG9wZW4oImh0dHA6Ly9sb2NhbGhvc3Q6JXMiICUgaGFuZGxlci5wb3J0KQogICAgICAgICAgICAgaW5mb19vYmogPSBvcGVuX3VybC5pbmZvKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGluZm9fb2JqLCBtaW1ldG9vbHMuTWVzc2FnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSAnaW5mbycgaXMgbm90IGFuIGluc3RhbmNlIG9mICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAibWltZXRvb2xzLk1lc3NhZ2UiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm9fb2JqLCBtaW1ldG9vbHMuTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHJldHVybmVkIGJ5ICdpbmZvJyBpcyBub3QgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YW5jZSBvZiBtaW1ldG9vbHMuTWVzc2FnZSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9fb2JqLmdldHN1YnR5cGUoKSwgInBsYWluIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQpAQCAtNDg2LDYgKzUwMSwzMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBhcmFtZXRlcml6ZSB0aGUgZnJhbWV3b3JrIHdpdGggYSBtb2NrIHJlc29sdmVyLgogICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxsaWIyLnVybG9wZW4sICJodHRwOi8vc2FkZmxranNhc2YuaS5udmFsaS5kLi8iKQogCisgICAgZGVmIHRlc3RfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBleHBlY3RlZF9yZXNwb25zZSA9ICJweWNvbiAyMDA4Li4uIgorICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWygyMDAsIFtdLCBleHBlY3RlZF9yZXNwb25zZSldKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gdXJsbGliMi51cmxvcGVuKCJodHRwOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBleHBlY3RlZF9yZXNwb25zZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHp0ZXN0X2xpbmVfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFsiV2VcbiIsICJnb3RcbiIsICJoZXJlXG4iLCAidmVyeWxvbmcgIiAqIDgxOTIgKyAiXG4iXQorICAgICAgICBleHBlY3RlZF9yZXNwb25zZSA9ICIiLmpvaW4obGluZXMpCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X3NlcnZlcihbKDIwMCwgW10sIGV4cGVjdGVkX3Jlc3BvbnNlKV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSB1cmxsaWIyLnVybG9wZW4oImh0dHA6Ly9sb2NhbGhvc3Q6JXMiICUgaGFuZGxlci5wb3J0KQorICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShkYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGxpbmVzW2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGZXRjaGVkIGxpbmUgbnVtYmVyICVzIGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQ6XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIEV4cGVjdGVkIGxlbmd0aCB3YXMgJXMsIGdvdCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluZGV4LCBsZW4obGluZXNbaW5kZXhdKSwgbGVuKGxpbmUpKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4ICsgMSwgbGVuKGxpbmVzKSkKIAogZGVmIHRlc3RfbWFpbigpOgogICAgICMgV2Ugd2lsbCBOT1QgZGVwZW5kIG9uIHRoZSBuZXR3b3JrIHJlc291cmNlIGZsYWcKQEAgLTQ5NCw4ICs1MzMsNyBAQAogICAgICMgdGhlIG5leHQgbGluZS4KICAgICAjdGVzdF9zdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKIAotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUHJveHlBdXRoVGVzdHMpCi0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0VXJsb3BlbikKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFByb3h5QXV0aFRlc3RzLCBUZXN0VXJsb3BlbikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CmluZGV4IDE2MmI4MTYuLjFhNzQ3N2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKQEAgLTYsNyArNiw2IEBACiAKIGltcG9ydCBzb2NrZXQKIGltcG9ydCB1cmxsaWIyCi1pbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIApAQCAtNzUsNyArNzQsNyBAQAogY2xhc3MgQ2xvc2VTb2NrZXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgotICAgICAgICBpbXBvcnQgc29ja2V0LCBodHRwbGliLCBnYworICAgICAgICBpbXBvcnQgaHR0cGxpYgogCiAgICAgICAgICMgY2FsbGluZyAuY2xvc2UoKSBvbiB1cmxsaWIyJ3MgcmVzcG9uc2Ugb2JqZWN0cyBzaG91bGQgY2xvc2UgdGhlCiAgICAgICAgICMgdW5kZXJseWluZyBzb2NrZXQKQEAgLTgzLDE1ICs4MiwxNSBAQAogICAgICAgICAjIGRlbHZlIGRlZXAgaW50byByZXNwb25zZSB0byBmZXRjaCBzb2NrZXQuX3NvY2tldG9iamVjdAogICAgICAgICByZXNwb25zZSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQogICAgICAgICBhYnVzZWRfZmlsZW9iamVjdCA9IHJlc3BvbnNlLmZwCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhYnVzZWRfZmlsZW9iamVjdC5fX2NsYXNzX18gaXMgc29ja2V0Ll9maWxlb2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJ1c2VkX2ZpbGVvYmplY3QuX19jbGFzc19fIGlzIHNvY2tldC5fZmlsZW9iamVjdCkKICAgICAgICAgaHR0cHJlc3BvbnNlID0gYWJ1c2VkX2ZpbGVvYmplY3QuX3NvY2sKLSAgICAgICAgc2VsZi5hc3NlcnRfKGh0dHByZXNwb25zZS5fX2NsYXNzX18gaXMgaHR0cGxpYi5IVFRQUmVzcG9uc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShodHRwcmVzcG9uc2UuX19jbGFzc19fIGlzIGh0dHBsaWIuSFRUUFJlc3BvbnNlKQogICAgICAgICBmaWxlb2JqZWN0ID0gaHR0cHJlc3BvbnNlLmZwCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhmaWxlb2JqZWN0Ll9fY2xhc3NfXyBpcyBzb2NrZXQuX2ZpbGVvYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlb2JqZWN0Ll9fY2xhc3NfXyBpcyBzb2NrZXQuX2ZpbGVvYmplY3QpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBmaWxlb2JqZWN0LmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmaWxlb2JqZWN0LmNsb3NlZCkKICAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8oZmlsZW9iamVjdC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlb2JqZWN0LmNsb3NlZCkKIAogY2xhc3MgT3RoZXJOZXR3b3JrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE1NSw4ICsxNTQsMzkgQEAKIAogIyMgICAgICAgICAgICAgc2VsZi5fdGVzdF91cmxzKHVybHMsIHNlbGYuX2V4dHJhX2hhbmRsZXJzKCkrW2JhdXRoLCBkYXV0aF0pCiAKKyAgICBkZWYgdGVzdF91cmx3aXRoZnJhZyhzZWxmKToKKyAgICAgICAgdXJsd2l0aF9mcmFnID0gImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZ2xvc3NhcnkuaHRtbCNnbG9zc2FyeSIKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybHdpdGhfZnJhZyk6CisgICAgICAgICAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QodXJsd2l0aF9mcmFnKQorICAgICAgICAgICAgcmVzID0gdXJsbGliMi51cmxvcGVuKHJlcSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmdldHVybCgpLAorICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy9nbG9zc2FyeS5odG1sIikKKworICAgIGRlZiB0ZXN0X2ZpbGVubyhzZWxmKToKKyAgICAgICAgcmVxID0gdXJsbGliMi5SZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmciKQorICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcigpCisgICAgICAgIHJlcyA9IG9wZW5lci5vcGVuKHJlcSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzLmZpbGVubygpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiSFRUUFJlc3BvbnNlIG9iamVjdCBzaG91bGQgcmV0dXJuIGEgdmFsaWQgZmlsZW5vIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlcy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jdXN0b21faGVhZGVycyhzZWxmKToKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgorICAgICAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIoKQorICAgICAgICAgICAgcmVxdWVzdCA9IHVybGxpYjIuUmVxdWVzdCh1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcXVlc3QuaGVhZGVyX2l0ZW1zKCkpCisgICAgICAgICAgICBvcGVuZXIub3BlbihyZXF1ZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcXVlc3QuaGVhZGVyX2l0ZW1zKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVxdWVzdC5oYXNfaGVhZGVyKCdVc2VyLWFnZW50JykpCisgICAgICAgICAgICByZXF1ZXN0LmFkZF9oZWFkZXIoJ1VzZXItQWdlbnQnLCdUZXN0LUFnZW50JykKKyAgICAgICAgICAgIG9wZW5lci5vcGVuKHJlcXVlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3QuZ2V0X2hlYWRlcignVXNlci1hZ2VudCcpLCdUZXN0LUFnZW50JykKKwogICAgIGRlZiBfdGVzdF91cmxzKHNlbGYsIHVybHMsIGhhbmRsZXJzLCByZXRyeT1UcnVlKToKLSAgICAgICAgaW1wb3J0IHNvY2tldAogICAgICAgICBpbXBvcnQgdGltZQogICAgICAgICBpbXBvcnQgbG9nZ2luZwogICAgICAgICBkZWJ1ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0ZXN0X3VybGxpYjIiKS5kZWJ1ZwpAQCAtMTcwLDI5ICsyMDAsMzAgQEAKICAgICAgICAgICAgICAgICB1cmwsIHJlcSwgZXhwZWN0ZWRfZXJyID0gdXJsCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlcSA9IGV4cGVjdGVkX2VyciA9IE5vbmUKLSAgICAgICAgICAgIGRlYnVnKHVybCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmID0gdXJsb3Blbih1cmwsIHJlcSwgVElNRU9VVCkKLSAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCBlcnI6Ci0gICAgICAgICAgICAgICAgZGVidWcoZXJyKQotICAgICAgICAgICAgICAgIGlmIGV4cGVjdGVkX2VycjoKLSAgICAgICAgICAgICAgICAgICAgbXNnID0gKCJEaWRuJ3QgZ2V0IGV4cGVjdGVkIGVycm9yKHMpICVzIGZvciAlcyAlcywgZ290ICVzOiAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX2VyciwgdXJsLCByZXEsIHR5cGUoZXJyKSwgZXJyKSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoZXJyLCBleHBlY3RlZF9lcnIpLCBtc2cpCi0gICAgICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlcnJbMF0sIHNvY2tldC50aW1lb3V0KToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiPHRpbWVvdXQ6ICVzPiIgJSB1cmwKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgorICAgICAgICAgICAgICAgIGRlYnVnKHVybCkKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gZi5yZWFkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJyZWFkICVkIGJ5dGVzIiAlIGxlbihidWYpKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiPHRpbWVvdXQ6ICVzPiIgJSB1cmwKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZiA9IHVybG9wZW4odXJsLCByZXEsIFRJTUVPVVQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhlcnIpCisgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdGVkX2VycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiRGlkbid0IGdldCBleHBlY3RlZCBlcnJvcihzKSAlcyBmb3IgJXMgJXMsIGdvdCAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfZXJyLCB1cmwsIHJlcSwgdHlwZShlcnIpLCBlcnIpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyciwgZXhwZWN0ZWRfZXJyLCBtc2cpCisgICAgICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVyclswXSwgc29ja2V0LnRpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiPHRpbWVvdXQ6ICVzPiIgJSB1cmwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoInJlYWQgJWQgYnl0ZXMiICUgbGVuKGJ1ZikpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIjx0aW1lb3V0OiAlcz4iICUgdXJsCisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgZGVidWcoIioqKioqKioqIG5leHQgdXJsIGNvbWluZyB1cC4uLiIpCiAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKIApAQCAtMjA5LDU5ICsyNDAsNzEgQEAKIGNsYXNzIFRpbWVvdXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9odHRwX2Jhc2ljKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKLSAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoImh0dHA6Ly93d3cucHl0aG9uLm9yZyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmZwLl9zb2NrLmZwLl9zb2NrLmdldHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuZnAuX3NvY2suZnAuX3NvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCiAKICAgICBkZWYgdGVzdF9odHRwX2RlZmF1bHRfdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCi0gICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoImh0dHA6Ly93d3cucHl0aG9uLm9yZyIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLl9zb2NrLmZwLl9zb2NrLmdldHRpbWVvdXQoKSwgNjApCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDYwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuX3NvY2suZnAuX3NvY2suZ2V0dGltZW91dCgpLCA2MCkKIAogICAgIGRlZiB0ZXN0X2h0dHBfbm9fdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCi0gICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoImh0dHA6Ly93d3cucHl0aG9uLm9yZyIsIHRpbWVvdXQ9Tm9uZSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodS5mcC5fc29jay5mcC5fc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkodXJsLCB0aW1lb3V0PU5vbmUpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuZnAuX3NvY2suZnAuX3NvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCiAKICAgICBkZWYgdGVzdF9odHRwX3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KCJodHRwOi8vd3d3LnB5dGhvbi5vcmciLCB0aW1lb3V0PTEyMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLl9zb2NrLmZwLl9zb2NrLmdldHRpbWVvdXQoKSwgMTIwKQorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKKyAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCwgdGltZW91dD0xMjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuX3NvY2suZnAuX3NvY2suZ2V0dGltZW91dCgpLCAxMjApCiAKLSAgICBGVFBfSE9TVCA9ICJmdHA6Ly9mdHAubWlycm9yLm5sL3B1Yi9taXJyb3IvZ251LyIKKyAgICBGVFBfSE9TVCA9ICJmdHA6Ly9mdHAubWlycm9yLm5sL3B1Yi9nbnUvIgogCiAgICAgZGVmIHRlc3RfZnRwX2Jhc2ljKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKLSAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoc2VsZi5GVFBfSE9TVCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuZnAuZnAuX3NvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLkZUUF9IT1NULCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoc2VsZi5GVFBfSE9TVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmZwLmZwLl9zb2NrLmdldHRpbWVvdXQoKSBpcyBOb25lKQogCiAgICAgZGVmIHRlc3RfZnRwX2RlZmF1bHRfdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCi0gICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoc2VsZi5GVFBfSE9TVCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuZnAuX3NvY2suZ2V0dGltZW91dCgpLCA2MCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYuRlRQX0hPU1QpOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDYwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHNlbGYuRlRQX0hPU1QpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLmZwLl9zb2NrLmdldHRpbWVvdXQoKSwgNjApCiAKICAgICBkZWYgdGVzdF9mdHBfbm9fdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCi0gICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoc2VsZi5GVFBfSE9TVCwgdGltZW91dD1Ob25lKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmZwLmZwLl9zb2NrLmdldHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5GVFBfSE9TVCk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoc2VsZi5GVFBfSE9TVCwgdGltZW91dD1Ob25lKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmZwLmZwLl9zb2NrLmdldHRpbWVvdXQoKSBpcyBOb25lKQogCiAgICAgZGVmIHRlc3RfZnRwX3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHNlbGYuRlRQX0hPU1QsIHRpbWVvdXQ9NjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5mcC5fc29jay5nZXR0aW1lb3V0KCksIDYwKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5GVFBfSE9TVCk6CisgICAgICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeShzZWxmLkZUUF9IT1NULCB0aW1lb3V0PTYwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLmZwLl9zb2NrLmdldHRpbWVvdXQoKSwgNjApCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQppbmRleCAxZTljZjBkLi44Y2JhMmRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQpAQCAtNyw5ICs3LDEwIEBACiBpbXBvcnQgdXJsbGliCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKLW1pbWV0b29scyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCJtaW1ldG9vbHMiLCBkZXByZWNhdGVkPVRydWUpCiBpbXBvcnQgdGltZQogCittaW1ldG9vbHMgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgibWltZXRvb2xzIiwgZGVwcmVjYXRlZD1UcnVlKQorCiAKIGRlZiBfb3Blbl93aXRoX3JldHJ5KGZ1bmMsIGhvc3QsICphcmdzLCAqKmt3YXJncyk6CiAgICAgIyBDb25uZWN0aW5nIHRvIHJlbW90ZSBob3N0cyBpcyBmbGFreS4gIE1ha2UgaXQgbW9yZSByb2J1c3QKQEAgLTYxLDEwICs2MiwxMCBAQAogICAgICAgICBvcGVuX3VybCA9IHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCiAgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJyZWFkbGluZSIsICJyZWFkbGluZXMiLCAiZmlsZW5vIiwgImNsb3NlIiwKICAgICAgICAgICAgICAgICAgICAgICJpbmZvIiwgImdldHVybCIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIob3Blbl91cmwsIGF0dHIpLCAib2JqZWN0IHJldHVybmVkIGZyb20gIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIob3Blbl91cmwsIGF0dHIpLCAib2JqZWN0IHJldHVybmVkIGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cmxvcGVuIGxhY2tzIHRoZSAlcyBhdHRyaWJ1dGUiICUgYXR0cikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG9wZW5fdXJsLnJlYWQoKSwgImNhbGxpbmcgJ3JlYWQnIGZhaWxlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3Blbl91cmwucmVhZCgpLCAiY2FsbGluZyAncmVhZCcgZmFpbGVkIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9wZW5fdXJsLmNsb3NlKCkKIApAQCAtNzIsMTAgKzczLDEwIEBACiAgICAgICAgICMgVGVzdCBib3RoIHJlYWRsaW5lIGFuZCByZWFkbGluZXMuCiAgICAgICAgIG9wZW5fdXJsID0gc2VsZi51cmxvcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uob3Blbl91cmwucmVhZGxpbmUoKSwgYmFzZXN0cmluZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lIGRpZCBub3QgcmV0dXJuIGEgc3RyaW5nIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG9wZW5fdXJsLnJlYWRsaW5lcygpLCBsaXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmVzIGRpZCBub3QgcmV0dXJuIGEgbGlzdCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3Blbl91cmwucmVhZGxpbmUoKSwgYmFzZXN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmUgZGlkIG5vdCByZXR1cm4gYSBzdHJpbmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wZW5fdXJsLnJlYWRsaW5lcygpLCBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkbGluZXMgZGlkIG5vdCByZXR1cm4gYSBsaXN0IikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9wZW5fdXJsLmNsb3NlKCkKIApAQCAtODYsOSArODcsOSBAQAogICAgICAgICAgICAgaW5mb19vYmogPSBvcGVuX3VybC5pbmZvKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9wZW5fdXJsLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGluZm9fb2JqLCBtaW1ldG9vbHMuTWVzc2FnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSAnaW5mbycgaXMgbm90IGFuIGluc3RhbmNlIG9mICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAibWltZXRvb2xzLk1lc3NhZ2UiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm9fb2JqLCBtaW1ldG9vbHMuTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHJldHVybmVkIGJ5ICdpbmZvJyBpcyBub3QgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YW5jZSBvZiBtaW1ldG9vbHMuTWVzc2FnZSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9fb2JqLmdldHN1YnR5cGUoKSwgImh0bWwiKQogCiAgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgpAQCAtMTIyLDcgKzEyMyw3IEBACiAgICAgICAgIGZkID0gb3Blbl91cmwuZmlsZW5vKCkKICAgICAgICAgRklMRSA9IG9zLmZkb3BlbihmZCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKEZJTEUucmVhZCgpLCAicmVhZGluZyBmcm9tIGZpbGUgY3JlYXRlZCB1c2luZyBmZCAiCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoRklMRS5yZWFkKCksICJyZWFkaW5nIGZyb20gZmlsZSBjcmVhdGVkIHVzaW5nIGZkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IGZpbGVubyBmYWlsZWQiKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgRklMRS5jbG9zZSgpCkBAIC0xNDksMTEgKzE1MCwxMSBAQAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICAjIFRlc3QgYmFzaWMgZnVuY3Rpb25hbGl0eS4KICAgICAgICAgZmlsZV9sb2NhdGlvbixpbmZvID0gc2VsZi51cmxyZXRyaWV2ZSgiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhmaWxlX2xvY2F0aW9uKSwgImZpbGUgbG9jYXRpb24gcmV0dXJuZWQgYnkiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmaWxlX2xvY2F0aW9uKSwgImZpbGUgbG9jYXRpb24gcmV0dXJuZWQgYnkiCiAgICAgICAgICAgICAgICAgICAgICAgICAiIHVybHJldHJpZXZlIGlzIG5vdCBhIHZhbGlkIHBhdGgiKQogICAgICAgICBGSUxFID0gZmlsZShmaWxlX2xvY2F0aW9uKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oRklMRS5yZWFkKCksICJyZWFkaW5nIGZyb20gdGhlIGZpbGUgbG9jYXRpb24gcmV0dXJuZWQiCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoRklMRS5yZWFkKCksICJyZWFkaW5nIGZyb20gdGhlIGZpbGUgbG9jYXRpb24gcmV0dXJuZWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiBieSB1cmxyZXRyaWV2ZSBmYWlsZWQiKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgRklMRS5jbG9zZSgpCkBAIC0xNjQsMTAgKzE2NSwxMCBAQAogICAgICAgICBmaWxlX2xvY2F0aW9uLGluZm8gPSBzZWxmLnVybHJldHJpZXZlKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbG9jYXRpb24sIHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhmaWxlX2xvY2F0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVfbG9jYXRpb24pKQogICAgICAgICBGSUxFID0gZmlsZShmaWxlX2xvY2F0aW9uKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oRklMRS5yZWFkKCksICJyZWFkaW5nIGZyb20gdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGSUxFLnJlYWQoKSwgInJlYWRpbmcgZnJvbSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgRklMRS5jbG9zZSgpCiAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZV9sb2NhdGlvbikKQEAgLTE3Niw4ICsxNzcsOCBAQAogICAgICAgICAjIE1ha2Ugc3VyZSBoZWFkZXIgcmV0dXJuZWQgYXMgMm5kIHZhbHVlIGZyb20gdXJscmV0cmlldmUgaXMgZ29vZC4KICAgICAgICAgZmlsZV9sb2NhdGlvbiwgaGVhZGVyID0gc2VsZi51cmxyZXRyaWV2ZSgiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCiAgICAgICAgIG9zLnVubGluayhmaWxlX2xvY2F0aW9uKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShoZWFkZXIsIG1pbWV0b29scy5NZXNzYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgICJoZWFkZXIgaXMgbm90IGFuIGluc3RhbmNlIG9mIG1pbWV0b29scy5NZXNzYWdlIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGhlYWRlciwgbWltZXRvb2xzLk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBtaW1ldG9vbHMuTWVzc2FnZSIpCiAKICAgICBkZWYgdGVzdF9kYXRhX2hlYWRlcihzZWxmKToKICAgICAgICAgbG9nbyA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvY29tbXVuaXR5L2xvZ29zL3B5dGhvbi1sb2dvLW1hc3Rlci12My1UTS5wbmciCkBAIC0xOTEsOSArMTkyLDEwIEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoJ0RhdGUgdmFsdWUgbm90IGluICVyIGZvcm1hdCcsIGRhdGVmb3JtYXQpCiAKIAorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKLSAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAgICAgKCJ1cmxsaWIudXJsb3Blbi4uIGhhcyBiZWVuIHJlbW92ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChVUkxUaW1lb3V0VGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxvcGVuTmV0d29ya1Rlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weSBiL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKaW5kZXggYzQzN2VlMC4uYzU3NjRjNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CkBAIC05Nyw2ICs5Nyw5IEBACiAgICAgICAgICAgICAgICcnLCAnJywgJycpLAogICAgICAgICAgICAgICgnbW1zJywgJ3dtcy5zeXMuaGluZXQubmV0JywgJy9jdHMvRHJhbWEvMDkwMDYyNTExMDAuYXNmJywKICAgICAgICAgICAgICAgJycsICcnKSksCisgICAgICAgICAgICAoJ25mczovL3NlcnZlci9wYXRoL3RvL2ZpbGUudHh0JywKKyAgICAgICAgICAgICAoJ25mcycsICdzZXJ2ZXInLCAnL3BhdGgvdG8vZmlsZS50eHQnLCAgJycsICcnLCAnJyksCisgICAgICAgICAgICAgKCduZnMnLCAnc2VydmVyJywgJy9wYXRoL3RvL2ZpbGUudHh0JywgJycsICcnKSksCiAgICAgICAgICAgICAoJ3N2bitzc2g6Ly9zdm4uem9wZS5vcmcvcmVwb3MvbWFpbi9aQ29uZmlnL3RydW5rLycsCiAgICAgICAgICAgICAgKCdzdm4rc3NoJywgJ3N2bi56b3BlLm9yZycsICcvcmVwb3MvbWFpbi9aQ29uZmlnL3RydW5rLycsCiAgICAgICAgICAgICAgICcnLCAnJywgJycpLApAQCAtMjkwLDcgKzI5MywxMCBAQAogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnI3MvLi94JywnaHR0cDovL2EvYi9jL2cjcy8uL3gnKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnI3MvLi4veCcsJ2h0dHA6Ly9hL2IvYy9nI3MvLi4veCcpCiAgICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdodHRwOmcnLCdodHRwOmcnKSAjIHN0cmljdCBwYXJzZXIKLSAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnaHR0cDpnJywnaHR0cDovL2EvYi9jL2cnKSAjcmVsYXhlZCBwYXJzZXIKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnaHR0cDpnJywnaHR0cDovL2EvYi9jL2cnKSAjIHJlbGF4ZWQgcGFyc2VyCisKKyAgICAgICAgIyBUZXN0IGZvciBpc3N1ZTk3MjEKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oJ2h0dHA6Ly9hL2IvYy9kZScsICc7eCcsJ2h0dHA6Ly9hL2IvYy87eCcpCiAKICAgICBkZWYgdGVzdF91cmxqb2lucyhzZWxmKToKICAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdnOmgnLCdnOmgnKQpAQCAtMzIzLDYgKzMyOSw0MCBAQAogICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2h0dHA6Zz95JywnaHR0cDovL2EvYi9jL2c/eScpCiAgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnaHR0cDpnP3kvLi94JywnaHR0cDovL2EvYi9jL2c/eS8uL3gnKQogCisgICAgZGVmIHRlc3RfUkZDMjczMihzZWxmKToKKyAgICAgICAgZm9yIHVybCwgaG9zdG5hbWUsIHBvcnQgaW4gWworICAgICAgICAgICAgKCdodHRwOi8vVGVzdC5weXRob24ub3JnOjU0MzIvZm9vLycsICd0ZXN0LnB5dGhvbi5vcmcnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovLzEyLjM0LjU2Ljc4OjU0MzIvZm9vLycsICcxMi4zNC41Ni43OCcsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vWzo6MV06NTQzMi9mb28vJywgJzo6MScsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vW2RlYWQ6YmVlZjo6MV06NTQzMi9mb28vJywgJ2RlYWQ6YmVlZjo6MScsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vW2RlYWQ6YmVlZjo6XTo1NDMyL2Zvby8nLCAnZGVhZDpiZWVmOjonLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OEZBMzpkZWFmOmZlZWRdOjU0MzIvZm9vLycsCisgICAgICAgICAgICAgJ2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4ZmEzOmRlYWY6ZmVlZCcsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vWzo6MTIuMzQuNTYuNzhdOjU0MzIvZm9vLycsICc6OjEyLjM0LjU2Ljc4JywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bOjpmZmZmOjEyLjM0LjU2Ljc4XTo1NDMyL2Zvby8nLAorICAgICAgICAgICAgICc6OmZmZmY6MTIuMzQuNTYuNzgnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1Rlc3QucHl0aG9uLm9yZy9mb28vJywgJ3Rlc3QucHl0aG9uLm9yZycsIE5vbmUpLAorICAgICAgICAgICAgKCdodHRwOi8vMTIuMzQuNTYuNzgvZm9vLycsICcxMi4zNC41Ni43OCcsIE5vbmUpLAorICAgICAgICAgICAgKCdodHRwOi8vWzo6MV0vZm9vLycsICc6OjEnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6OjFdL2Zvby8nLCAnZGVhZDpiZWVmOjoxJywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOjpdL2Zvby8nLCAnZGVhZDpiZWVmOjonLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OEZBMzpkZWFmOmZlZWRdL2Zvby8nLAorICAgICAgICAgICAgICdkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OGZhMzpkZWFmOmZlZWQnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjEyLjM0LjU2Ljc4XS9mb28vJywgJzo6MTIuMzQuNTYuNzgnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OmZmZmY6MTIuMzQuNTYuNzhdL2Zvby8nLAorICAgICAgICAgICAgICc6OmZmZmY6MTIuMzQuNTYuNzgnLCBOb25lKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICB1cmxwYXJzZWQgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh1cmxwYXJzZWQuaG9zdG5hbWUsIHVybHBhcnNlZC5wb3J0KSAsIChob3N0bmFtZSwgcG9ydCkpCisKKyAgICAgICAgZm9yIGludmFsaWRfdXJsIGluIFsKKyAgICAgICAgICAgICAgICAnaHR0cDovLzo6MTIuMzQuNTYuNzhdLycsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9bOjoxL2Zvby8nLAorICAgICAgICAgICAgICAgICdmdHA6Ly9bOjoxL2Zvby9iYWRdL2JhZCcsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9bOjoxL2Zvby9iYWRdL2JhZCcsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9bOjpmZmZmOjEyLjM0LjU2Ljc4J106CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1cmxwYXJzZS51cmxwYXJzZSwgaW52YWxpZF91cmwpCisKICAgICBkZWYgdGVzdF91cmxkZWZyYWcoc2VsZik6CiAgICAgICAgIGZvciB1cmwsIGRlZnJhZywgZnJhZyBpbiBbCiAgICAgICAgICAgICAoJ2h0dHA6Ly9weXRob24ub3JnI2ZyYWcnLCAnaHR0cDovL3B5dGhvbi5vcmcnLCAnZnJhZycpLApAQCAtNDQxLDYgKzQ4MSwyNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCJ4LW5ld3NjaGVtZTovL2Zvby5jb20vc3R1ZmYiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3gtbmV3c2NoZW1lJywnZm9vLmNvbScsJy9zdHVmZicsJycsJycsJycpKQogCisgICAgZGVmIHRlc3Rfd2l0aG91dHNjaGVtZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHVybHBhcnNlIHdpdGhvdXQgc2NoZW1lCisgICAgICAgICMgSXNzdWUgNzU0MDE2OiB1cmxwYXJzZSBnb2VzIHdyb25nIHdpdGggSVA6cG9ydCB3aXRob3V0IHNjaGVtZQorICAgICAgICAjIFJGQyAxODA4IHNwZWNpZmllcyB0aGF0IG5ldGxvYyBzaG91bGQgc3RhcnQgd2l0aCAvLywgdXJscGFyc2UgZXhwZWN0cworICAgICAgICAjIHRoZSBzYW1lLCBvdGhlcndpc2UgaXQgY2xhc3NpZmllcyB0aGUgcG9ydGlvbiBvZiB1cmwgYXMgcGF0aC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgicGF0aCIpLAorICAgICAgICAgICAgICAgICgnJywnJywncGF0aCcsJycsJycsJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCIvL3d3dy5weXRob24ub3JnOjgwIiksCisgICAgICAgICAgICAgICAgKCcnLCd3d3cucHl0aG9uLm9yZzo4MCcsJycsJycsJycsJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCJodHRwOi8vd3d3LnB5dGhvbi5vcmc6ODAiKSwKKyAgICAgICAgICAgICAgICAoJ2h0dHAnLCd3d3cucHl0aG9uLm9yZzo4MCcsJycsJycsJycsJycpKQorCisgICAgZGVmIHRlc3RfcG9ydHNlcGFyYXRvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA3NTQwMTYgbWFrZXMgY2hhbmdlcyBmb3IgcG9ydCBzZXBhcmF0b3IgJzonIGZyb20gc2NoZW1lIHNlcGFyYXRvcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCJwYXRoOjgwIiksCisgICAgICAgICAgICAgICAgKCcnLCcnLCdwYXRoOjgwJywnJywnJywnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoImh0dHA6IiksKCdodHRwJywnJywnJywnJywnJywnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoImh0dHBzOiIpLCgnaHR0cHMnLCcnLCcnLCcnLCcnLCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgiaHR0cDovL3d3dy5weXRob24ub3JnOjgwIiksCisgICAgICAgICAgICAgICAgKCdodHRwJywnd3d3LnB5dGhvbi5vcmc6ODAnLCcnLCcnLCcnLCcnKSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5IGIvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQppbmRleCBkZjk1ODhjLi5kNWNlY2Q4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKQEAgLTM4LDkgKzM4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVc2VyRGljdC5Vc2VyRGljdCgpLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSwgZDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlckRpY3QuVXNlckRpY3QuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCksIDEpLCBkNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVc2VyRGljdC5Vc2VyRGljdCgpLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpLCAxKSwgZDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1MS5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSkgaXMgbm90IHUxKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh1MS5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSksIFVzZXJEaWN0LlVzZXJEaWN0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodTIuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCkpLCBVc2VyRGljdC5JdGVyYWJsZVVzZXJEaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUxLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSBpcyBub3QgdTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1MS5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSksIFVzZXJEaWN0LlVzZXJEaWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodTIuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCkpLCBVc2VyRGljdC5JdGVyYWJsZVVzZXJEaWN0KQogCiAgICAgICAgICMgVGVzdCBfX3JlcHJfXwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1MCksIHN0cihkMCkpCkBAIC05NSwxMCArOTUsMTAgQEAKIAogICAgICAgICAjIFRlc3QgaGFzX2tleSBhbmQgImluIi4KICAgICAgICAgZm9yIGkgaW4gdTIua2V5cygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGkgaW4gdTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIHUyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpIGluIHUxLCBpIGluIGQxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpIGluIHUwLCBpIGluIGQwKQotICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodTIuaGFzX2tleShpKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUxLmhhc19rZXkoaSksIGQxLmhhc19rZXkoaSkpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MC5oYXNfa2V5KGkpLCBkMC5oYXNfa2V5KGkpKQpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgICAgICMgVGVzdCBzZXRkZWZhdWx0CiAgICAgICAgIHQgPSBVc2VyRGljdC5Vc2VyRGljdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zZXRkZWZhdWx0KCJ4IiwgNDIpLCA0MikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHQuaGFzX2tleSgieCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5oYXNfa2V5KCJ4IikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zZXRkZWZhdWx0KCJ4IiwgMjMpLCA0MikKIAogICAgICAgICAjIFRlc3QgcG9wCkBAIC0xNjIsOCArMTYyLDggQEAKICAgICAgICAgZCA9IEQoezE6IDIsIDM6IDR9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMV0sIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFszXSwgNCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDIgbm90IGluIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygyIG5vdCBpbiBkLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigyLCBkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIsIGQua2V5cygpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMl0sIDQyKQogICAgICAgICBjbGFzcyBFKFVzZXJEaWN0LlVzZXJEaWN0KToKICAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgpAQCAtMjcwLDEyICsyNzAsMTIgQEAKIAogICAgICAgICAjIyBOb3csIHRlc3QgdGhlIERpY3RNaXhpbiBtZXRob2RzIG9uZSBieSBvbmUKICAgICAgICAgIyBoYXNfa2V5Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzLmhhc19rZXkoMTApKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHMuaGFzX2tleSgyMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmhhc19rZXkoMTApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHMuaGFzX2tleSgyMCkpCiAKICAgICAgICAgIyBfX2NvbnRhaW5zX18KLSAgICAgICAgc2VsZi5hc3NlcnRfKDEwIGluIHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygyMCBub3QgaW4gcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigxMCwgcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigyMCwgcykKIAogICAgICAgICAjIF9faXRlcl9fCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2sgZm9yIGsgaW4gc10sIFsxMCwgMzBdKQpAQCAtMzEwLDcgKzMxMCw3IEBACiAKICAgICAgICAgIyBwb3AKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnBvcCgxMCksICd0ZW4nKQotICAgICAgICBzZWxmLmFzc2VydF8oMTAgbm90IGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIHMpCiAgICAgICAgIHNbMTBdID0gJ3RlbicKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnBvcCgieCIsIDEpLCAxKQogICAgICAgICBzWyJ4Il0gPSA0MgpAQCAtMzE4LDcgKzMxOCw3IEBACiAKICAgICAgICAgIyBwb3BpdGVtCiAgICAgICAgIGssIHYgPSBzLnBvcGl0ZW0oKQotICAgICAgICBzZWxmLmFzc2VydF8oayBub3QgaW4gcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrLCBzKQogICAgICAgICBzW2tdID0gdgogCiAgICAgICAgICMgY2xlYXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXNlcmxpc3QucHkgYi9MaWIvdGVzdC90ZXN0X3VzZXJsaXN0LnB5CmluZGV4IGZmZTRhYTE3Li4zYjYwMWJjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VzZXJsaXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXNlcmxpc3QucHkKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVyKFQoKDEsMikpKS5uZXh0KCksICIwISEhIikKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKAorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCiAgICAgICAgICAgICAoIi4rX18oZ2V0fHNldHxkZWwpc2xpY2VfXyBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVXNlckxpc3RUZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkKaW5kZXggZWU3YTFmNC4uMjYyNTk4NSAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weQpAQCAtMTA0LDE3ICsxMDQsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXZlcnNlKCkKICAgICAgICAgICAgICAgICAgICAgTFtzdGFydDpzdG9wOnN0ZXBdID0gZGF0YQogICAgICAgICAgICAgICAgICAgICBzW3N0YXJ0OnN0b3A6c3RlcF0gPSAiIi5qb2luKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMsICIiLmpvaW4oTCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIiIuam9pbihMKSkKIAogICAgICAgICAgICAgICAgICAgICBkZWwgTFtzdGFydDpzdG9wOnN0ZXBdCiAgICAgICAgICAgICAgICAgICAgIGRlbCBzW3N0YXJ0OnN0b3A6c3RlcF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocywgIiIuam9pbihMKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiIi5qb2luKEwpKQogCiAgICAgZGVmIHRlc3RfaW1tdXRhYmxlKHNlbGYpOgogICAgICAgICBzID0gc2VsZi50eXBlMnRlc3QoImZvb2JhciIpCiAgICAgICAgIHMyID0gcy5pbW11dGFibGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHMyKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzMiwgVXNlclN0cmluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzMiwgVXNlclN0cmluZykKIAogICAgIGRlZiB0ZXN0X2lhZGQoc2VsZik6CiAgICAgICAgIHMgPSBzZWxmLnR5cGUydGVzdCgiZm9vIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXUucHkgYi9MaWIvdGVzdC90ZXN0X3V1LnB5CmluZGV4IDI1ZDliNjAuLjk1Yzk1NTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91dS5weQpAQCAtMTYxLDYgKzE2MSwyMyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5fa2lsbChmKQogCisgICAgZGVmIHRlc3RfZGVjb2RlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBmID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYudG1waW4pCisgICAgICAgICAgICBmID0gb3BlbihzZWxmLnRtcGluLCAndycpCisgICAgICAgICAgICBmLndyaXRlKGVuY29kZWR0ZXh0d3JhcHBlZCAlICgwNjQ0LCBzZWxmLnRtcG91dCkpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgdXUuZGVjb2RlKHNlbGYudG1waW4pCisKKyAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYudG1wb3V0LCAncicpCisgICAgICAgICAgICBzID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBwbGFpbnRleHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9raWxsKGYpCisKICAgICBkZWYgdGVzdF9kZWNvZGV0d2ljZShzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCBkZWNvZGUoKSB3aWxsIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgZmlsZQogICAgICAgICBmID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YWl0My5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKaW5kZXggOWRlNjRiMi4uMTUwNzgzYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YWl0My5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CkBAIC0zLDE4ICszLDE5IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LmZvcmtfd2FpdCBpbXBvcnQgRm9ya1dhaXQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RTa2lwcGVkLCBydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4KK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgogCiB0cnk6CiAgICAgb3MuZm9yawogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkLCAib3MuZm9yayBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3dhaXQzIgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAib3MuZm9yayBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3dhaXQzIgogCiB0cnk6CiAgICAgb3Mud2FpdDMKIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCwgIm9zLndhaXQzIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3Rfd2FpdDMiCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICJvcy53YWl0MyBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3dhaXQzIgogCiBjbGFzcyBXYWl0M1Rlc3QoRm9ya1dhaXQpOgogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhaXQ0LnB5IGIvTGliL3Rlc3QvdGVzdF93YWl0NC5weQppbmRleCA5ZjdmYzE0Li5kMDRhMTFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhaXQ0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDQucHkKQEAgLTQsMTcgKzQsMTIgQEAKIGltcG9ydCBvcwogaW1wb3J0IHRpbWUKIGZyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZCwgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4sIGdldF9hdHRyaWJ1dGUKIAotdHJ5OgotICAgIG9zLmZvcmsKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCwgIm9zLmZvcmsgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0NCIKKyMgSWYgZWl0aGVyIG9mIHRoZXNlIGRvIG5vdCBleGlzdCwgc2tpcCB0aGlzIHRlc3QuCitnZXRfYXR0cmlidXRlKG9zLCAnZm9yaycpCitnZXRfYXR0cmlidXRlKG9zLCAnd2FpdDQnKQogCi10cnk6Ci0gICAgb3Mud2FpdDQKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCwgIm9zLndhaXQ0IG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3Rfd2FpdDQiCiAKIGNsYXNzIFdhaXQ0VGVzdChGb3JrV2FpdCk6CiAgICAgZGVmIHdhaXRfaW1wbChzZWxmLCBjcGlkKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkgYi9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CmluZGV4IGY1NTUwMmEuLjFjMmMwYzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQpAQCAtNCwyNCArNCwxNiBAQAogaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzdWJwcm9jZXNzCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIAogaW1wb3J0IHdhcm5pbmdfdGVzdHMKIAogaW1wb3J0IHdhcm5pbmdzIGFzIG9yaWdpbmFsX3dhcm5pbmdzCiAKLXN5cy5tb2R1bGVzWydfd2FybmluZ3MnXSA9IDAKLWRlbCBzeXMubW9kdWxlc1snd2FybmluZ3MnXQotCi1pbXBvcnQgd2FybmluZ3MgYXMgcHlfd2FybmluZ3MKLQotZGVsIHN5cy5tb2R1bGVzWydfd2FybmluZ3MnXQotZGVsIHN5cy5tb2R1bGVzWyd3YXJuaW5ncyddCi0KLWltcG9ydCB3YXJuaW5ncyBhcyBjX3dhcm5pbmdzCi0KLXN5cy5tb2R1bGVzWyd3YXJuaW5ncyddID0gb3JpZ2luYWxfd2FybmluZ3MKLQorcHlfd2FybmluZ3MgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnd2FybmluZ3MnLCBibG9ja2VkPVsnX3dhcm5pbmdzJ10pCitjX3dhcm5pbmdzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3dhcm5pbmdzJywgZnJlc2g9Wydfd2FybmluZ3MnXSkKIAogQGNvbnRleHRtYW5hZ2VyCiBkZWYgd2FybmluZ3Nfc3RhdGUobW9kdWxlKToKQEAgLTg4LDcgKzgwLDcgQEAKICAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQogICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybigiRmlsdGVyVGVzdHMudGVzdF9pZ25vcmUiLCBVc2VyV2FybmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQogCiAgICAgZGVmIHRlc3RfYWx3YXlzKHNlbGYpOgogICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLApAQCAtOTcsOSArODksOSBAQAogICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQogICAgICAgICAgICAgbWVzc2FnZSA9ICJGaWx0ZXJUZXN0cy50ZXN0X2Fsd2F5cyIKICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4obWVzc2FnZSwgVXNlcldhcm5pbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWVzc2FnZSwgd1stMV0ubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLCB3Wy0xXS5tZXNzYWdlKQogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihtZXNzYWdlLCBVc2VyV2FybmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgogICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLApAQCAtMTEwLDEwICsxMDIsMTAgQEAKICAgICAgICAgICAgIGZvciB4IGluIHhyYW5nZSgyKToKICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQogICAgICAgICAgICAgICAgIGlmIHggPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQogICAgICAgICAgICAgICAgICAgICBkZWwgd1s6XQogICAgICAgICAgICAgICAgIGVsaWYgeCA9PSAxOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4odyksIDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxvb3AgdmFyaWFudCB1bmhhbmRsZWQiKQogCkBAIC0xMjQsMTAgKzExNiwxMCBAQAogICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoIm1vZHVsZSIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQogICAgICAgICAgICAgbWVzc2FnZSA9IFVzZXJXYXJuaW5nKCJGaWx0ZXJUZXN0cy50ZXN0X21vZHVsZSIpCiAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKICAgICAgICAgICAgIGRlbCB3WzpdCiAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCiAKICAgICBkZWYgdGVzdF9vbmNlKHNlbGYpOgogICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLApAQCAtMTM3LDE0ICsxMjksMTQgQEAKICAgICAgICAgICAgIG1lc3NhZ2UgPSBVc2VyV2FybmluZygiRmlsdGVyVGVzdHMudGVzdF9vbmNlIikKICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJ0ZXN0X3dhcm5pbmdzLnB5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKICAgICAgICAgICAgIGRlbCB3WzpdCiAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAidGVzdF93YXJuaW5ncy5weSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgInRlc3Rfd2FybmluZ3MyLnB5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCiAKICAgICBkZWYgdGVzdF9pbmhlcml0YW5jZShzZWxmKToKICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CkBAIC0xNjUsNyArMTU3LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKCJGaWx0ZXJUZXN0cy50ZXN0X29yZGVyaW5nIiwgVXNlcldhcm5pbmcpCiAgICAgICAgICAgICBleGNlcHQgVXNlcldhcm5pbmc6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJvcmRlciBoYW5kbGluZyBmb3IgYWN0aW9ucyBmYWlsZWQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCiAKICAgICBkZWYgdGVzdF9maWx0ZXJ3YXJuaW5ncyhzZWxmKToKICAgICAgICAgIyBUZXN0IGZpbHRlcndhcm5pbmdzKCkuCkBAIC0xNzksNyArMTcxLDcgQEAKICAgICAgICAgICAgIHRleHQgPSAnaGFuZGxlIG5vcm1hbGx5JwogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybih0ZXh0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIod1stMV0ubWVzc2FnZSksIHRleHQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8od1stMV0uY2F0ZWdvcnkgaXMgVXNlcldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod1stMV0uY2F0ZWdvcnkgaXMgVXNlcldhcm5pbmcpCiAKICAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiIiwgV2FybmluZywgIiIsIDApCiAgICAgICAgICAgICB0ZXh0ID0gJ2ZpbHRlcmVkIG91dCcKQEAgLTE5Miw3ICsxODQsNyBAQAogICAgICAgICAgICAgdGV4dCA9ICdub25tYXRjaGluZyB0ZXh0JwogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybih0ZXh0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIod1stMV0ubWVzc2FnZSksIHRleHQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8od1stMV0uY2F0ZWdvcnkgaXMgVXNlcldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod1stMV0uY2F0ZWdvcnkgaXMgVXNlcldhcm5pbmcpCiAKIGNsYXNzIENGaWx0ZXJUZXN0cyhCYXNlVGVzdCwgRmlsdGVyVGVzdHMpOgogICAgIG1vZHVsZSA9IGNfd2FybmluZ3MKQEAgLTIxMyw3ICsyMDUsNyBAQAogICAgICAgICAgICAgICAgIHRleHQgPSAnbXVsdGkgJWQnICVpICAjIERpZmZlcmVudCB0ZXh0IG9uIGVhY2ggY2FsbC4KICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKHRleHQpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIod1stMV0ubWVzc2FnZSksIHRleHQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHdbLTFdLmNhdGVnb3J5IGlzIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Wy0xXS5jYXRlZ29yeSBpcyBVc2VyV2FybmluZykKIAogICAgIGRlZiB0ZXN0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICB3aXRoIHdhcm5pbmdzX3N0YXRlKHNlbGYubW9kdWxlKToKQEAgLTM1MiwxNSArMzQ0LDI4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICgiQSBiYWQgZm9ybWF0dGVkIHN0cmluZyAlKGVycikiICUKICAgICAgICAgICAgICAgICAgICAgICAgIHsiZXJyIiA6ICJ0aGVyZSBpcyBubyAlKGVycilzIn0pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5tb2R1bGUud2FybiwgQmFkU3RyV2FybmluZygpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihCYWRTdHJXYXJuaW5nKCkpCiAKIAogY2xhc3MgQ1dhcm5UZXN0cyhCYXNlVGVzdCwgV2FyblRlc3RzKToKICAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCiAKKyAgICAjIEFzIGFuIGVhcmx5IGFkb3B0ZXIsIHdlIHNhbml0eSBjaGVjayB0aGUKKyAgICAjIHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlIHV0aWxpdHkgZnVuY3Rpb24KKyAgICBkZWYgdGVzdF9hY2NlbGVyYXRlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcmlnaW5hbF93YXJuaW5ncyBpcyBzZWxmLm1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHNlbGYubW9kdWxlLndhcm4sICdmdW5jX2NvZGUnKSkKKwogY2xhc3MgUHlXYXJuVGVzdHMoQmFzZVRlc3QsIFdhcm5UZXN0cyk6CiAgICAgbW9kdWxlID0gcHlfd2FybmluZ3MKIAorICAgICMgQXMgYW4gZWFybHkgYWRvcHRlciwgd2Ugc2FuaXR5IGNoZWNrIHRoZQorICAgICMgdGVzdF9zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUgdXRpbGl0eSBmdW5jdGlvbgorICAgIGRlZiB0ZXN0X3B1cmVfcHl0aG9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9yaWdpbmFsX3dhcm5pbmdzIGlzIHNlbGYubW9kdWxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLm1vZHVsZS53YXJuLCAnZnVuY19jb2RlJykpCisKIAogY2xhc3MgV0NtZExpbmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTM3Nyw2ICszODIsMjIgQEAKICAgICAgICAgICAgIHNlbGYubW9kdWxlLl9zZXRvcHRpb24oJ2Vycm9yOjpXYXJuaW5nOjowJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBzZWxmLm1vZHVsZS53YXJuLCAnY29udmVydCB0byBlcnJvcicpCiAKKyAgICBkZWYgdGVzdF9pbXByb3Blcl9vcHRpb24oc2VsZik6CisgICAgICAgICMgU2FtZSBhcyBhYm92ZSwgYnV0IGNoZWNrIHRoYXQgdGhlIG1lc3NhZ2UgaXMgcHJpbnRlZCBvdXQgd2hlbgorICAgICAgICAjIHRoZSBpbnRlcnByZXRlciBpcyBleGVjdXRlZC4gVGhpcyBhbHNvIGNoZWNrcyB0aGF0IG9wdGlvbnMgYXJlCisgICAgICAgICMgYWN0dWFsbHkgcGFyc2VkIGF0IGFsbC4KKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLVd4eHgiLCAiLWMiLCAicGFzcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJJbnZhbGlkIC1XIG9wdGlvbiBpZ25vcmVkOiBpbnZhbGlkIGFjdGlvbjogJ3h4eCciLCBlcnIpCisKKyAgICBkZWYgdGVzdF93YXJuaW5nc19ib290c3RyYXAoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgd2FybmluZ3MgbW9kdWxlIGRvZXMgZ2V0IGxvYWRlZCB3aGVuIC1XPHNvbWUgb3B0aW9uPgorICAgICAgICAjIGlzIHVzZWQgKHNlZSBpc3N1ZSAjMTAzNzIgZm9yIGFuIGV4YW1wbGUgb2Ygc2lsZW50IGJvb3RzdHJhcCBmYWlsdXJlKS4KKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLVdpIiwgIi1jIiwKKyAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMubW9kdWxlc1snd2FybmluZ3MnXS53YXJuKCdmb28nLCBSdW50aW1lV2FybmluZykiKQorICAgICAgICAjICctV2knIHdhcyBvYnNlcnZlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5zdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInUnVudGltZVdhcm5pbmcnLCBlcnIpCisKIGNsYXNzIENXQ21kTGluZVRlc3RzKEJhc2VUZXN0LCBXQ21kTGluZVRlc3RzKToKICAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCiAKQEAgLTQxMiwyNCArNDMzLDU5IEBACiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoIm9uY2UiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAiZmlsZSIsIDQyKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQogICAgICAgICAgICAgICAgIGRlbCB3WzpdCiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgImZpbGUiLCA0MikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4odyksIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCiAgICAgICAgICAgICAgICAgIyBUZXN0IHRoZSByZXNldHRpbmcgb2Ygb25jZXJlZ2lzdHJ5LgogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLm9uY2VyZWdpc3RyeSA9IHt9CiAgICAgICAgICAgICAgICAgX193YXJuaW5ncmVnaXN0cnlfXyA9IHt9CiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybignb25jZXJlZ2lzdHJ5IHRlc3QnKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdbLTFdLm1lc3NhZ2UuYXJncywgbWVzc2FnZS5hcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZS5hcmdzLCBtZXNzYWdlLmFyZ3MpCiAgICAgICAgICAgICAgICAgIyBSZW1vdmFsIG9mIG9uY2VyZWdpc3RyeSBpcyBva2F5LgogICAgICAgICAgICAgICAgIGRlbCB3WzpdCiAgICAgICAgICAgICAgICAgZGVsIHNlbGYubW9kdWxlLm9uY2VyZWdpc3RyeQogICAgICAgICAgICAgICAgIF9fd2FybmluZ3JlZ2lzdHJ5X18gPSB7fQogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJmaWxlIiwgNDIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHcpLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5tb2R1bGUub25jZXJlZ2lzdHJ5ID0gb3JpZ2luYWxfcmVnaXN0cnkKIAorICAgIGRlZiB0ZXN0X2RlZmF1bHRfYWN0aW9uKHNlbGYpOgorICAgICAgICAjIFJlcGxhY2luZyBvciByZW1vdmluZyBkZWZhdWx0YWN0aW9uIHNob3VsZCBiZSBva2F5LgorICAgICAgICBtZXNzYWdlID0gVXNlcldhcm5pbmcoImRlZmF1bHRhY3Rpb24gdGVzdCIpCisgICAgICAgIG9yaWdpbmFsID0gc2VsZi5tb2R1bGUuZGVmYXVsdGFjdGlvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICAgICAgcmVnaXN0cnkgPSB7fQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICI8dGVzdD4iLCA0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnk9cmVnaXN0cnkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlZ2lzdHJ5KSwgMSkKKyAgICAgICAgICAgICAgICBkZWwgd1s6XQorICAgICAgICAgICAgICAgICMgVGVzdCByZW1vdmFsLgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLm1vZHVsZS5kZWZhdWx0YWN0aW9uCisgICAgICAgICAgICAgICAgX193YXJuaW5ncmVnaXN0cnlfXyA9IHt9CisgICAgICAgICAgICAgICAgcmVnaXN0cnkgPSB7fQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICI8dGVzdD4iLCA0MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnk9cmVnaXN0cnkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlZ2lzdHJ5KSwgMSkKKyAgICAgICAgICAgICAgICBkZWwgd1s6XQorICAgICAgICAgICAgICAgICMgVGVzdCBzZXR0aW5nLgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLmRlZmF1bHRhY3Rpb24gPSAiaWdub3JlIgorICAgICAgICAgICAgICAgIF9fd2FybmluZ3JlZ2lzdHJ5X18gPSB7fQorICAgICAgICAgICAgICAgIHJlZ2lzdHJ5ID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAiPHRlc3Q+IiwgNDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5PXJlZ2lzdHJ5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZGVmYXVsdGFjdGlvbiA9IG9yaWdpbmFsCisKICAgICBkZWYgdGVzdF9zaG93d2FybmluZ19taXNzaW5nKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBzaG93d2FybmluZygpIG1pc3NpbmcgaXMgb2theS4KICAgICAgICAgdGV4dCA9ICdkZWwgc2hvd3dhcm5pbmcgdGVzdCcKQEAgLTQzOSwxNyArNDk1LDE3IEBACiAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoJ3N0ZGVycicpIGFzIHN0cmVhbToKICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKHRleHQpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyZWFtLmdldHZhbHVlKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHRleHQgaW4gcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRleHQsIHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X3Nob3d3YXJuaW5nX25vdF9jYWxsYWJsZShzZWxmKToKLSAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQotICAgICAgICBvbGRfc2hvd3dhcm5pbmcgPSBzZWxmLm1vZHVsZS5zaG93d2FybmluZwotICAgICAgICBzZWxmLm1vZHVsZS5zaG93d2FybmluZyA9IDIzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tb2R1bGUud2FybiwgIldhcm5pbmchIikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYubW9kdWxlLnNob3d3YXJuaW5nID0gb2xkX3Nob3d3YXJuaW5nCi0gICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgb2xkX3Nob3d3YXJuaW5nID0gc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnNob3d3YXJuaW5nID0gMjMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubW9kdWxlLndhcm4sICJXYXJuaW5nISIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLnNob3d3YXJuaW5nID0gb2xkX3Nob3d3YXJuaW5nCiAKICAgICBkZWYgdGVzdF9zaG93X3dhcm5pbmdfb3V0cHV0KHNlbGYpOgogICAgICAgICAjIFdpdGggc2hvd2FybmluZygpIG1pc3NpbmcsIG1ha2Ugc3VyZSB0aGF0IG91dHB1dCBpcyBva2F5LgpAQCAtNDYwLDE5ICs1MTYsMTkgQEAKICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNhcHR1cmVkX291dHB1dCgnc3RkZXJyJykgYXMgc3RyZWFtOgogICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuaW5uZXIodGV4dCkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJlYW0uZ2V0dmFsdWUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQuY291bnQoJ1xuJyksIDIsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvdW50KCdcbicpLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG9vIG1hbnkgbmV3bGluZXMgaW4gJXIiICUgcmVzdWx0KQogICAgICAgICBmaXJzdF9saW5lLCBzZWNvbmRfbGluZSA9IHJlc3VsdC5zcGxpdCgnXG4nLCAxKQogICAgICAgICBleHBlY3RlZF9maWxlID0gb3MucGF0aC5zcGxpdGV4dCh3YXJuaW5nX3Rlc3RzLl9fZmlsZV9fKVswXSArICcucHknCiAgICAgICAgIGZpcnN0X2xpbmVfcGFydHMgPSBmaXJzdF9saW5lLnJzcGxpdCgnOicsIDMpCiAgICAgICAgIHBhdGgsIGxpbmUsIHdhcm5pbmdfY2xhc3MsIG1lc3NhZ2UgPSBmaXJzdF9saW5lX3BhcnRzCiAgICAgICAgIGxpbmUgPSBpbnQobGluZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZXhwZWN0ZWRfZmlsZSwgcGF0aCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2FybmluZ19jbGFzcywgJyAnICsgVXNlcldhcm5pbmcuX19uYW1lX18pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG1lc3NhZ2UsICcgJyArIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZmlsZSwgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YXJuaW5nX2NsYXNzLCAnICcgKyBVc2VyV2FybmluZy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCAnICcgKyB0ZXh0KQogICAgICAgICBleHBlY3RlZF9saW5lID0gJyAgJyArIGxpbmVjYWNoZS5nZXRsaW5lKHBhdGgsIGxpbmUpLnN0cmlwKCkgKyAnXG4nCiAgICAgICAgIGFzc2VydCBleHBlY3RlZF9saW5lCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlY29uZF9saW5lLCBleHBlY3RlZF9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY29uZF9saW5lLCBleHBlY3RlZF9saW5lKQogCiAKIGNsYXNzIFdhcm5pbmdzRGlzcGxheVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQ4OSwxMyArNTQ1LDEzIEBACiAgICAgICAgIGZvcm1hdCA9ICIlczolczogJXM6ICVzXG4gICVzXG4iCiAgICAgICAgIGV4cGVjdCA9IGZvcm1hdCAlIChmaWxlX25hbWUsIGxpbmVfbnVtLCBjYXRlZ29yeS5fX25hbWVfXywgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX2xpbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGV4cGVjdCwgc2VsZi5tb2R1bGUuZm9ybWF0d2FybmluZyhtZXNzYWdlLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgc2VsZi5tb2R1bGUuZm9ybWF0d2FybmluZyhtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnksIGZpbGVfbmFtZSwgbGluZV9udW0pKQogICAgICAgICAjIFRlc3QgdGhlICdsaW5lJyBhcmd1bWVudC4KICAgICAgICAgZmlsZV9saW5lICs9ICIgZm9yIHRoZSB3aW4hIgogICAgICAgICBleHBlY3QgPSBmb3JtYXQgJSAoZmlsZV9uYW1lLCBsaW5lX251bSwgY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9saW5lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChleHBlY3QsIHNlbGYubW9kdWxlLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHNlbGYubW9kdWxlLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5LCBmaWxlX25hbWUsIGxpbmVfbnVtLCBmaWxlX2xpbmUpKQogCiAgICAgZGVmIHRlc3Rfc2hvd3dhcm5pbmcoc2VsZik6CkBAIC01MDksNyArNTY1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW0pCiAgICAgICAgIHNlbGYubW9kdWxlLnNob3d3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlX25hbWUsIGxpbmVfbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX29iamVjdCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZmlsZV9vYmplY3QuZ2V0dmFsdWUoKSwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfb2JqZWN0LmdldHZhbHVlKCksIGV4cGVjdCkKICAgICAgICAgIyBUZXN0ICdsaW5lJyBhcmd1bWVudC4KICAgICAgICAgZXhwZWN0ZWRfZmlsZV9saW5lICs9ICJmb3IgdGhlIHdpbiEiCiAgICAgICAgIGV4cGVjdCA9IHNlbGYubW9kdWxlLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVfbmFtZSwKQEAgLTUxNyw3ICs1NzMsNyBAQAogICAgICAgICBmaWxlX29iamVjdCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVfbmFtZSwgbGluZV9udW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfb2JqZWN0LCBleHBlY3RlZF9maWxlX2xpbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGV4cGVjdCwgZmlsZV9vYmplY3QuZ2V0dmFsdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGZpbGVfb2JqZWN0LmdldHZhbHVlKCkpCiAKIGNsYXNzIENXYXJuaW5nc0Rpc3BsYXlUZXN0cyhCYXNlVGVzdCwgV2FybmluZ3NEaXNwbGF5VGVzdHMpOgogICAgIG1vZHVsZSA9IGNfd2FybmluZ3MKQEAgLTUzNywyMCArNTkzLDIwIEBACiAgICAgICAgICMgRW5zdXJlIGJvdGggc2hvd3dhcm5pbmcgYW5kIGZpbHRlcnMgYXJlIHJlc3RvcmVkIHdoZW4gcmVjb3JkaW5nCiAgICAgICAgIHdpdGggd21vZC5jYXRjaF93YXJuaW5ncyhtb2R1bGU9d21vZCwgcmVjb3JkPVRydWUpOgogICAgICAgICAgICAgd21vZC5maWx0ZXJzID0gd21vZC5zaG93d2FybmluZyA9IG9iamVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3bW9kLmZpbHRlcnMgaXMgb3JpZ19maWx0ZXJzKQotICAgICAgICBzZWxmLmFzc2VydF8od21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5maWx0ZXJzIGlzIG9yaWdfZmlsdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2Quc2hvd3dhcm5pbmcgaXMgb3JpZ19zaG93d2FybmluZykKICAgICAgICAgIyBTYW1lIHRlc3QsIGJ1dCB3aXRoIHJlY29yZGluZyBkaXNhYmxlZAogICAgICAgICB3aXRoIHdtb2QuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXdtb2QsIHJlY29yZD1GYWxzZSk6CiAgICAgICAgICAgICB3bW9kLmZpbHRlcnMgPSB3bW9kLnNob3d3YXJuaW5nID0gb2JqZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHdtb2QuZmlsdGVycyBpcyBvcmlnX2ZpbHRlcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLmZpbHRlcnMgaXMgb3JpZ19maWx0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQogCiAgICAgZGVmIHRlc3RfY2F0Y2hfd2FybmluZ3NfcmVjb3JkaW5nKHNlbGYpOgogICAgICAgICB3bW9kID0gc2VsZi5tb2R1bGUKICAgICAgICAgIyBFbnN1cmUgd2FybmluZ3MgYXJlIHJlY29yZGVkIHdoZW4gcmVxdWVzdGVkCiAgICAgICAgIHdpdGggd21vZC5jYXRjaF93YXJuaW5ncyhtb2R1bGU9d21vZCwgcmVjb3JkPVRydWUpIGFzIHc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcsIFtdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodykgaXMgbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHcpIGlzIGxpc3QpCiAgICAgICAgICAgICB3bW9kLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKICAgICAgICAgICAgIHdtb2Qud2FybigiZm9vIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdbLTFdLm1lc3NhZ2UpLCAiZm9vIikKQEAgLTU2Myw4ICs2MTksOCBAQAogICAgICAgICAjIEVuc3VyZSB3YXJuaW5ncyBhcmUgbm90IHJlY29yZGVkIHdoZW4gbm90IHJlcXVlc3RlZAogICAgICAgICBvcmlnX3Nob3d3YXJuaW5nID0gd21vZC5zaG93d2FybmluZwogICAgICAgICB3aXRoIHdtb2QuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXdtb2QsIHJlY29yZD1GYWxzZSkgYXMgdzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh3IGlzIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8od21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHcgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCiAKICAgICBkZWYgdGVzdF9jYXRjaF93YXJuaW5nc19yZWVudHJ5X2d1YXJkKHNlbGYpOgogICAgICAgICB3bW9kID0gc2VsZi5tb2R1bGUKQEAgLTU4NSwxNyArNjQxLDE3IEBACiAgICAgICAgIG9yaWdfc2hvd3dhcm5pbmcgPSB3bW9kLnNob3d3YXJuaW5nCiAgICAgICAgICMgRW5zdXJlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIG5vdCB0byByZWNvcmQgd2FybmluZ3MKICAgICAgICAgd2l0aCB3bW9kLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT13bW9kKSBhcyB3OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHcgaXMgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8od21vZC5maWx0ZXJzIGlzIG5vdCBvcmlnX2ZpbHRlcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3bW9kLmZpbHRlcnMgaXMgb3JpZ19maWx0ZXJzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHcgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5maWx0ZXJzIGlzIG5vdCBvcmlnX2ZpbHRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLmZpbHRlcnMgaXMgb3JpZ19maWx0ZXJzKQogICAgICAgICBpZiB3bW9kIGlzIHN5cy5tb2R1bGVzWyd3YXJuaW5ncyddOgogICAgICAgICAgICAgIyBFbnN1cmUgdGhlIGRlZmF1bHQgbW9kdWxlIGlzIHRoaXMgb25lCiAgICAgICAgICAgICB3aXRoIHdtb2QuY2F0Y2hfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh3IGlzIE5vbmUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHdtb2Quc2hvd3dhcm5pbmcgaXMgb3JpZ19zaG93d2FybmluZykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8od21vZC5maWx0ZXJzIGlzIG5vdCBvcmlnX2ZpbHRlcnMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8od21vZC5maWx0ZXJzIGlzIG9yaWdfZmlsdGVycykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodyBpcyBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2QuZmlsdGVycyBpcyBub3Qgb3JpZ19maWx0ZXJzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2QuZmlsdGVycyBpcyBvcmlnX2ZpbHRlcnMpCiAKICAgICBkZWYgdGVzdF9jaGVja193YXJuaW5ncyhzZWxmKToKICAgICAgICAgIyBFeHBsaWNpdCB0ZXN0cyBmb3IgdGhlIHRlc3Rfc3VwcG9ydCBjb252ZW5pZW5jZSB3cmFwcGVyCkBAIC02MjAsMjEgKzY3NiwxNCBAQAogICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJ2ZvbycsIFVzZXJXYXJuaW5nKSk6CiAgICAgICAgICAgICB3bW9kLndhcm4oImZvbyIpCiAKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgICAgICAjIGRlZmF1bHRzIHRvIHF1aWV0PUZhbHNlIHdpdGggYXJndW1lbnQKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRGluZCd0IHJhaXNlIEFzc2VydGlvbkVycm9yIikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnZm9vJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgICAgICB3bW9kLndhcm4oImZvbyIpCi0gICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRGluZCd0IHJhaXNlIEFzc2VydGlvbkVycm9yIikKKwogCiBjbGFzcyBDQ2F0Y2hXYXJuaW5nVGVzdHMoQ2F0Y2hXYXJuaW5nVGVzdHMpOgogICAgIG1vZHVsZSA9IGNfd2FybmluZ3MKQEAgLTY0MywzOCArNjkyLDQyIEBACiAgICAgbW9kdWxlID0gcHlfd2FybmluZ3MKIAogCi1jbGFzcyBTaG93d2FybmluZ0RlcHJlY2F0aW9uVGVzdHMoQmFzZVRlc3QpOgorY2xhc3MgRW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzKEJhc2VUZXN0KToKIAotICAgICIiIlRlc3QgdGhlIGRlcHJlY2F0aW9uIG9mIHRoZSBvbGQgd2FybmluZ3Muc2hvd3dhcm5pbmcoKSBBUEkgd29ya3MuIiIiCisgICAgZGVmIHRlc3Rfc2luZ2xlX3dhcm5pbmcoc2VsZik6CisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiUFlUSE9OV0FSTklOR1MiXSA9ICJpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZyIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN0cihzeXMud2Fybm9wdGlvbnMpKSJdLAorICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5jb21tdW5pY2F0ZSgpWzBdLCAiWydpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZyddIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgMCkKIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgYmFkX3Nob3d3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBmaWxlPU5vbmUpOgotICAgICAgICBwYXNzCisgICAgZGVmIHRlc3RfY29tbWFfc2VwYXJhdGVkX3dhcm5pbmdzKHNlbGYpOgorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIlBZVEhPTldBUk5JTkdTIl0gPSAoImlnbm9yZTo6RGVwcmVjYXRpb25XYXJuaW5nLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZ25vcmU6OlVuaWNvZGVXYXJuaW5nIikKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN0cihzeXMud2Fybm9wdGlvbnMpKSJdLAorICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5jb21tdW5pY2F0ZSgpWzBdLAorICAgICAgICAgICAgICAgICJbJ2lnbm9yZTo6RGVwcmVjYXRpb25XYXJuaW5nJywgJ2lnbm9yZTo6VW5pY29kZVdhcm5pbmcnXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIDApCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9rX3Nob3d3YXJuaW5nKCphcmdzKToKLSAgICAgICAgcGFzcworICAgIGRlZiB0ZXN0X2VudnZhcl9hbmRfY29tbWFuZF9saW5lKHNlbGYpOgorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIlBZVEhPTldBUk5JTkdTIl0gPSAiaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmciCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1XIiAiaWdub3JlOjpVbmljb2RlV2FybmluZyIsCisgICAgICAgICAgICAgICAgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN5cy53YXJub3B0aW9ucykpIl0sCisgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmNvbW11bmljYXRlKClbMF0sCisgICAgICAgICAgICAgICAgIlsnaWdub3JlOjpVbmljb2RlV2FybmluZycsICdpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZyddIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgMCkKIAotICAgIGRlZiB0ZXN0X2RlcHJlY2F0aW9uKHNlbGYpOgotICAgICAgICAjIG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vWywgZmlsZVssIGxpbmVdXQotICAgICAgICBhcmdzID0gKCJtZXNzYWdlIiwgVXNlcldhcm5pbmcsICJmaWxlIG5hbWUiLCA0MikKLSAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpOgotICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcgPSBzZWxmLmJhZF9zaG93d2FybmluZwotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGVwcmVjYXRpb25XYXJuaW5nLCBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncykKLSAgICAgICAgICAgIHNlbGYubW9kdWxlLnNob3d3YXJuaW5nID0gc2VsZi5va19zaG93d2FybmluZwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQoKmFyZ3MpCi0gICAgICAgICAgICBleGNlcHQgRGVwcmVjYXRpb25XYXJuaW5nIGFzIGV4YzoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3Nob3d3YXJuaW5nKCphcmdzKSBzaG91bGQgbm90IHRyaWdnZXIgYSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RlcHJlY2F0aW9uV2FybmluZycpCi0KLWNsYXNzIENTaG93d2FybmluZ0RlcHJlY2F0aW9uVGVzdHMoU2hvd3dhcm5pbmdEZXByZWNhdGlvblRlc3RzKToKK2NsYXNzIENFbnZpcm9ubWVudFZhcmlhYmxlVGVzdHMoRW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzKToKICAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCiAKLQotY2xhc3MgUHlTaG93d2FybmluZ0RlcHJlY2F0aW9uVGVzdHMoU2hvd3dhcm5pbmdEZXByZWNhdGlvblRlc3RzKToKK2NsYXNzIFB5RW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzKEVudmlyb25tZW50VmFyaWFibGVUZXN0cyk6CiAgICAgbW9kdWxlID0gcHlfd2FybmluZ3MKIAogCkBAIC02ODcsOCArNzQwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1dhcm5pbmdzVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXYXJuaW5nc0Rpc3BsYXlUZXN0cywgUHlXYXJuaW5nc0Rpc3BsYXlUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhdGNoV2FybmluZ1Rlc3RzLCBQeUNhdGNoV2FybmluZ1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU2hvd3dhcm5pbmdEZXByZWNhdGlvblRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTaG93d2FybmluZ0RlcHJlY2F0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFbnZpcm9ubWVudFZhcmlhYmxlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkgYi9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKaW5kZXggOWJjYjA5MC4uYmMyOTgyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQpAQCAtNzAsMTEgKzcwLDExIEBACiAgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZihvLCBzZWxmLmNhbGxiYWNrKQogICAgICAgICByZWYyID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKICAgICAgICAgZGVsIG8KLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlZjEoKSBpcyBOb25lLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmMSgpIGlzIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgcmVmZXJlbmNlIHRvIGJlIGludmFsaWRhdGVkIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlZjIoKSBpcyBOb25lLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmMigpIGlzIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgcmVmZXJlbmNlIHRvIGJlIGludmFsaWRhdGVkIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuY2JjYWxsZWQgPT0gMiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2JjYWxsZWQgPT0gMiwKICAgICAgICAgICAgICAgICAgICAgICJjYWxsYmFjayBub3QgY2FsbGVkIHRoZSByaWdodCBudW1iZXIgb2YgdGltZXMiKQogCiAgICAgZGVmIHRlc3RfbXVsdGlwbGVfc2VsZnJlZl9jYWxsYmFja3Moc2VsZik6CkBAIC0xMDgsMTUgKzEwOCwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh3ZWFrcmVmLlJlZmVyZW5jZUVycm9yLCBjaGVjaywgcmVmMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMod2Vha3JlZi5SZWZlcmVuY2VFcnJvciwgY2hlY2ssIHJlZjIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHdlYWtyZWYuUmVmZXJlbmNlRXJyb3IsIGJvb2wsIHdlYWtyZWYucHJveHkoQygpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuY2JjYWxsZWQgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2JjYWxsZWQgPT0gMikKIAogICAgIGRlZiBjaGVja19iYXNpY19yZWYoc2VsZiwgZmFjdG9yeSk6CiAgICAgICAgIG8gPSBmYWN0b3J5KCkKICAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYobykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlZigpIGlzIG5vdCBOb25lLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmKCkgaXMgbm90IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAid2VhayByZWZlcmVuY2UgdG8gbGl2ZSBvYmplY3Qgc2hvdWxkIGJlIGxpdmUiKQogICAgICAgICBvMiA9IHJlZigpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhvIGlzIG8yLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobyBpcyBvMiwKICAgICAgICAgICAgICAgICAgICAgICI8cmVmPigpIHNob3VsZCByZXR1cm4gb3JpZ2luYWwgb2JqZWN0IGlmIGxpdmUiKQogCiAgICAgZGVmIGNoZWNrX2Jhc2ljX2NhbGxiYWNrKHNlbGYsIGZhY3RvcnkpOgpAQCAtMTI0LDkgKzEyNCw5IEBACiAgICAgICAgIG8gPSBmYWN0b3J5KCkKICAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKICAgICAgICAgZGVsIG8KLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuY2JjYWxsZWQgPT0gMSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2JjYWxsZWQgPT0gMSwKICAgICAgICAgICAgICAgICAgICAgICJjYWxsYmFjayBkaWQgbm90IHByb3Blcmx5IHNldCAnY2JjYWxsZWQnIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlZigpIGlzIE5vbmUsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWYoKSBpcyBOb25lLAogICAgICAgICAgICAgICAgICAgICAgInJlZjIgc2hvdWxkIGJlIGRlYWQgYWZ0ZXIgZGVsZXRpbmcgb2JqZWN0IHJlZmVyZW5jZSIpCiAKICAgICBkZWYgdGVzdF9yZWZfcmV1c2Uoc2VsZik6CkBAIC0xMzYsMTkgKzEzNiwxOSBAQAogICAgICAgICAjIGJldHdlZW4gdGhlc2UgdHdvOyBpdCBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlCiAgICAgICAgIHByb3h5ID0gd2Vha3JlZi5wcm94eShvKQogICAgICAgICByZWYyID0gd2Vha3JlZi5yZWYobykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlZjEgaXMgcmVmMiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZjEgaXMgcmVmMiwKICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2Ugb2JqZWN0IHcvb3V0IGNhbGxiYWNrIHNob3VsZCBiZSByZS11c2VkIikKIAogICAgICAgICBvID0gQygpCiAgICAgICAgIHByb3h5ID0gd2Vha3JlZi5wcm94eShvKQogICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobykKICAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKG8pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZWYxIGlzIHJlZjIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWYxIGlzIHJlZjIsCiAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIG9iamVjdCB3L291dCBjYWxsYmFjayBzaG91bGQgYmUgcmUtdXNlZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSAyLAorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMiwKICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB3ZWFrIHJlZiBjb3VudCBmb3Igb2JqZWN0IikKICAgICAgICAgZGVsIHByb3h5Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSAxLAorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMSwKICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB3ZWFrIHJlZiBjb3VudCBmb3Igb2JqZWN0IGFmdGVyIGRlbGV0aW5nIHByb3h5IikKIAogICAgIGRlZiB0ZXN0X3Byb3h5X3JldXNlKHNlbGYpOgpAQCAtMTU2LDcgKzE1Niw3IEBACiAgICAgICAgIHByb3h5MSA9IHdlYWtyZWYucHJveHkobykKICAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYobykKICAgICAgICAgcHJveHkyID0gd2Vha3JlZi5wcm94eShvKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkxIGlzIHByb3h5MiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb3h5MSBpcyBwcm94eTIsCiAgICAgICAgICAgICAgICAgICAgICAicHJveHkgb2JqZWN0IHcvb3V0IGNhbGxiYWNrIHNob3VsZCBoYXZlIGJlZW4gcmUtdXNlZCIpCiAKICAgICBkZWYgdGVzdF9iYXNpY19wcm94eShzZWxmKToKQEAgLTE2NSwxNiArMTY1LDE1IEBACiAKICAgICAgICAgTCA9IFVzZXJMaXN0LlVzZXJMaXN0KCkKICAgICAgICAgcCA9IHdlYWtyZWYucHJveHkoTCkKLSAgICAgICAgc2VsZi5mYWlsSWYocCwgInByb3h5IGZvciBlbXB0eSBVc2VyTGlzdCBzaG91bGQgYmUgZmFsc2UiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAsICJwcm94eSBmb3IgZW1wdHkgVXNlckxpc3Qgc2hvdWxkIGJlIGZhbHNlIikKICAgICAgICAgcC5hcHBlbmQoMTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEwpLCAxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocCwgInByb3h5IGZvciBub24tZW1wdHkgVXNlckxpc3Qgc2hvdWxkIGJlIHRydWUiKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocCwgInByb3h5IGZvciBub24tZW1wdHkgVXNlckxpc3Qgc2hvdWxkIGJlIHRydWUiKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBwWzpdID0gWzIsIDNdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEwpLCAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwKSwgMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKDMgaW4gcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJwcm94eSBkaWRuJ3Qgc3VwcG9ydCBfX2NvbnRhaW5zX18oKSBwcm9wZXJseSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMywgcCwgInByb3h5IGRpZG4ndCBzdXBwb3J0IF9fY29udGFpbnNfXygpIHByb3Blcmx5IikKICAgICAgICAgcFsxXSA9IDUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMWzFdLCA1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbMV0sIDUpCkBAIC0xODQsNyArMTgzLDcgQEAKICAgICAgICAgIyMgc2VsZi5hc3NlcnRFcXVhbChyZXByKEwyKSwgcmVwcihwMikpCiAgICAgICAgIEwzID0gVXNlckxpc3QuVXNlckxpc3QocmFuZ2UoMTApKQogICAgICAgICBwMyA9IHdlYWtyZWYucHJveHkoTDMpCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTDNbOl0sIHAzWzpdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMM1s1Ol0sIHAzWzU6XSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTDNbOjVdLCBwM1s6NV0pCkBAIC0xOTgsNyArMTk3LDcgQEAKICAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gdSJ1bmljb2RlIgogICAgICAgICBpbnN0YW5jZSA9IEMoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIl9fdW5pY29kZV9fIiBpbiBkaXIod2Vha3JlZi5wcm94eShpbnN0YW5jZSkpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJfX3VuaWNvZGVfXyIsIGRpcih3ZWFrcmVmLnByb3h5KGluc3RhbmNlKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSh3ZWFrcmVmLnByb3h5KGluc3RhbmNlKSksIHUidW5pY29kZSIpCiAKICAgICBkZWYgdGVzdF9wcm94eV9pbmRleChzZWxmKToKQEAgLTIzOSwxOSArMjM4LDE5IEBACiAgICAgICAgIG8gPSBPYmplY3QoMSkKICAgICAgICAgcDEgPSBtYWtlcmVmKG8sIE5vbmUpCiAgICAgICAgIHAyID0gbWFrZXJlZihvLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8ocDEgaXMgcDIsICJib3RoIGNhbGxiYWNrcyB3ZXJlIE5vbmUgaW4gdGhlIEMgQVBJIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAxIGlzIHAyLCAiYm90aCBjYWxsYmFja3Mgd2VyZSBOb25lIGluIHRoZSBDIEFQSSIpCiAgICAgICAgIGRlbCBwMSwgcDIKICAgICAgICAgcDEgPSBtYWtlcmVmKG8pCiAgICAgICAgIHAyID0gbWFrZXJlZihvLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8ocDEgaXMgcDIsICJjYWxsYmFja3Mgd2VyZSBOVUxMLCBOb25lIGluIHRoZSBDIEFQSSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwMSBpcyBwMiwgImNhbGxiYWNrcyB3ZXJlIE5VTEwsIE5vbmUgaW4gdGhlIEMgQVBJIikKICAgICAgICAgZGVsIHAxLCBwMgogICAgICAgICBwMSA9IG1ha2VyZWYobykKICAgICAgICAgcDIgPSBtYWtlcmVmKG8pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhwMSBpcyBwMiwgImJvdGggY2FsbGJhY2tzIHdlcmUgTlVMTCBpbiB0aGUgQyBBUEkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocDEgaXMgcDIsICJib3RoIGNhbGxiYWNrcyB3ZXJlIE5VTEwgaW4gdGhlIEMgQVBJIikKICAgICAgICAgZGVsIHAxLCBwMgogICAgICAgICBwMSA9IG1ha2VyZWYobywgTm9uZSkKICAgICAgICAgcDIgPSBtYWtlcmVmKG8pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhwMSBpcyBwMiwgImNhbGxiYWNrcyB3ZXJlIE5vbmUsIE5VTEwgaW4gdGhlIEMgQVBJIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAxIGlzIHAyLCAiY2FsbGJhY2tzIHdlcmUgTm9uZSwgTlVMTCBpbiB0aGUgQyBBUEkiKQogCiAgICAgZGVmIHRlc3RfY2FsbGFibGVfcHJveHkoc2VsZik6CiAgICAgICAgIG8gPSBDYWxsYWJsZSgpCkBAIC0yNTksMTMgKzI1OCwxMyBAQAogCiAgICAgICAgIHNlbGYuY2hlY2tfcHJveHkobywgcmVmMSkKIAotICAgICAgICBzZWxmLmFzc2VydF8odHlwZShyZWYxKSBpcyB3ZWFrcmVmLkNhbGxhYmxlUHJveHlUeXBlLAorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShyZWYxKSBpcyB3ZWFrcmVmLkNhbGxhYmxlUHJveHlUeXBlLAogICAgICAgICAgICAgICAgICAgICAgInByb3h5IGlzIG5vdCBvZiBjYWxsYWJsZSB0eXBlIikKICAgICAgICAgcmVmMSgndHdpbmtpZXMhJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG8uYmFyID09ICd0d2lua2llcyEnLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoby5iYXIgPT0gJ3R3aW5raWVzIScsCiAgICAgICAgICAgICAgICAgICAgICAiY2FsbCB0aHJvdWdoIHByb3h5IG5vdCBwYXNzZWQgdGhyb3VnaCB0byBvcmlnaW5hbCIpCiAgICAgICAgIHJlZjEoeD0nU3BsYXQuJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG8uYmFyID09ICdTcGxhdC4nLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoby5iYXIgPT0gJ1NwbGF0LicsCiAgICAgICAgICAgICAgICAgICAgICAiY2FsbCB0aHJvdWdoIHByb3h5IG5vdCBwYXNzZWQgdGhyb3VnaCB0byBvcmlnaW5hbCIpCiAKICAgICAgICAgIyBleHBlY3QgZHVlIHRvIHRvbyBmZXcgYXJncwpAQCAtMjc2LDI0ICsyNzUsMjQgQEAKIAogICAgIGRlZiBjaGVja19wcm94eShzZWxmLCBvLCBwcm94eSk6CiAgICAgICAgIG8uZm9vID0gMQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkuZm9vID09IDEsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm94eS5mb28gPT0gMSwKICAgICAgICAgICAgICAgICAgICAgICJwcm94eSBkb2VzIG5vdCByZWZsZWN0IGF0dHJpYnV0ZSBhZGRpdGlvbiIpCiAgICAgICAgIG8uZm9vID0gMgotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkuZm9vID09IDIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm94eS5mb28gPT0gMiwKICAgICAgICAgICAgICAgICAgICAgICJwcm94eSBkb2VzIG5vdCByZWZsZWN0IGF0dHJpYnV0ZSBtb2RpZmljYXRpb24iKQogICAgICAgICBkZWwgby5mb28KLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBoYXNhdHRyKHByb3h5LCAnZm9vJyksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihwcm94eSwgJ2ZvbycpLAogICAgICAgICAgICAgICAgICAgICAgInByb3h5IGRvZXMgbm90IHJlZmxlY3QgYXR0cmlidXRlIHJlbW92YWwiKQogCiAgICAgICAgIHByb3h5LmZvbyA9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRfKG8uZm9vID09IDEsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvLmZvbyA9PSAxLAogICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBkb2VzIG5vdCByZWZsZWN0IGF0dHJpYnV0ZSBhZGRpdGlvbiB2aWEgcHJveHkiKQogICAgICAgICBwcm94eS5mb28gPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0XygKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgby5mb28gPT0gMiwKICAgICAgICAgICAgICJvYmplY3QgZG9lcyBub3QgcmVmbGVjdCBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIHZpYSBwcm94eSIpCiAgICAgICAgIGRlbCBwcm94eS5mb28KLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBoYXNhdHRyKG8sICdmb28nKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG8sICdmb28nKSwKICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgZG9lcyBub3QgcmVmbGVjdCBhdHRyaWJ1dGUgcmVtb3ZhbCB2aWEgcHJveHkiKQogCiAgICAgZGVmIHRlc3RfcHJveHlfZGVsZXRpb24oc2VsZik6CkBAIC0zMTcsMjEgKzMxNiwyMSBAQAogICAgICAgICBvID0gQygpCiAgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZihvKQogICAgICAgICByZWYyID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSAyLAogICAgICAgICAgICAgICAgICAgICAgImdvdCB3cm9uZyBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2Ugb2JqZWN0cyIpCiAKICAgICAgICAgcHJveHkxID0gd2Vha3JlZi5wcm94eShvKQogICAgICAgICBwcm94eTIgPSB3ZWFrcmVmLnByb3h5KG8sIHNlbGYuY2FsbGJhY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSA0LAorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gNCwKICAgICAgICAgICAgICAgICAgICAgICJnb3Qgd3JvbmcgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlIG9iamVjdHMiKQogCiAgICAgICAgIGRlbCByZWYxLCByZWYyLCBwcm94eTEsIHByb3h5MgotICAgICAgICBzZWxmLmFzc2VydF8od2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMCwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDAsCiAgICAgICAgICAgICAgICAgICAgICAid2VhayByZWZlcmVuY2Ugb2JqZWN0cyBub3QgdW5saW5rZWQgZnJvbSIKICAgICAgICAgICAgICAgICAgICAgICIgcmVmZXJlbnQgd2hlbiBkaXNjYXJkZWQuIikKIAogICAgICAgICAjIGFzc3VtZXMgaW50cyBkbyBub3Qgc3VwcG9ydCB3ZWFrcmVmcwotICAgICAgICBzZWxmLmFzc2VydF8od2Vha3JlZi5nZXR3ZWFrcmVmY291bnQoMSkgPT0gMCwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KDEpID09IDAsCiAgICAgICAgICAgICAgICAgICAgICAiZ290IHdyb25nIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZSBvYmplY3RzIGZvciBpbnQiKQogCiAgICAgZGVmIHRlc3RfZ2V0d2Vha3JlZnMoc2VsZik6CkBAIC0zMzksMjIgKzMzOCwyMiBAQAogICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKICAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCiAgICAgICAgIGRlbCByZWYxCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3ZWFrcmVmLmdldHdlYWtyZWZzKG8pID09IFtyZWYyXSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZnMobykgPT0gW3JlZjJdLAogICAgICAgICAgICAgICAgICAgICAgImxpc3Qgb2YgcmVmcyBkb2VzIG5vdCBtYXRjaCIpCiAKICAgICAgICAgbyA9IEMoKQogICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKICAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCiAgICAgICAgIGRlbCByZWYyCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3ZWFrcmVmLmdldHdlYWtyZWZzKG8pID09IFtyZWYxXSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZnMobykgPT0gW3JlZjFdLAogICAgICAgICAgICAgICAgICAgICAgImxpc3Qgb2YgcmVmcyBkb2VzIG5vdCBtYXRjaCIpCiAKICAgICAgICAgZGVsIHJlZjEKLSAgICAgICAgc2VsZi5hc3NlcnRfKHdlYWtyZWYuZ2V0d2Vha3JlZnMobykgPT0gW10sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZzKG8pID09IFtdLAogICAgICAgICAgICAgICAgICAgICAgImxpc3Qgb2YgcmVmcyBub3QgY2xlYXJlZCIpCiAKICAgICAgICAgIyBhc3N1bWVzIGludHMgZG8gbm90IHN1cHBvcnQgd2Vha3JlZnMKLSAgICAgICAgc2VsZi5hc3NlcnRfKHdlYWtyZWYuZ2V0d2Vha3JlZnMoMSkgPT0gW10sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZzKDEpID09IFtdLAogICAgICAgICAgICAgICAgICAgICAgImxpc3Qgb2YgcmVmcyBkb2VzIG5vdCBtYXRjaCBmb3IgaW50IikKIAogICAgIGRlZiB0ZXN0X25ld3N0eWxlX251bWJlcl9vcHMoc2VsZik6CkBAIC0zNjIsOCArMzYxLDggQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZiA9IEYoMi4wKQogICAgICAgICBwID0gd2Vha3JlZi5wcm94eShmKQotICAgICAgICBzZWxmLmFzc2VydF8ocCArIDEuMCA9PSAzLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0XygxLjAgKyBwID09IDMuMCkgICMgdGhpcyB1c2VkIHRvIFNFR1YKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgKyAxLjAgPT0gMy4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMS4wICsgcCA9PSAzLjApICAjIHRoaXMgdXNlZCB0byBTRUdWCiAKICAgICBkZWYgdGVzdF9jYWxsYmFja3NfcHJvdGVjdGVkKHNlbGYpOgogICAgICAgICAjIENhbGxiYWNrcyBwcm90ZWN0ZWQgZnJvbSBhbHJlYWR5LXNldCBleGNlcHRpb25zPwpAQCAtNjE2LDcgKzYxNSw3IEBACiAgICAgICAgIGMud3IgPSB3ZWFrcmVmLnJlZihkLCBjYWxsYmFjaykgICAgICMgdGhpcyB3b24ndCB0cmlnZ2VyCiAgICAgICAgIGQud3IgPSB3ZWFrcmVmLnJlZihjYWxsYmFjaywgZC5jYikgICMgZGl0dG8KICAgICAgICAgZXh0ZXJuYWxfd3IgPSB3ZWFrcmVmLnJlZihjYWxsYmFjaywgc2FmZV9jYWxsYmFjaykgICMgYnV0IHRoaXMgd2lsbAotICAgICAgICBzZWxmLmFzc2VydF8oZXh0ZXJuYWxfd3IoKSBpcyBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4dGVybmFsX3dyKCkgaXMgY2FsbGJhY2spCiAKICAgICAgICAgIyBUaGUgd2Vha3JlZnMgYXR0YWNoZWQgdG8gYyBhbmQgZCBzaG91bGQgZ2V0IGNsZWFyZWQsIHNvIHRoYXQKICAgICAgICAgIyBDLmNiIGlzIG5ldmVyIGNhbGxlZC4gIEJ1dCBleHRlcm5hbF93ciBpc24ndCBwYXJ0IG9mIHRoZSBjeWNsaWMKQEAgLTY4Niw2ICs2ODUsMjYgQEAKICAgICAgICAgIyBObyBleGNlcHRpb24gc2hvdWxkIGJlIHJhaXNlZCBoZXJlCiAgICAgICAgIGdjLmNvbGxlY3QoKQogCisgICAgZGVmIHRlc3RfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGJvdGggb2xkLXN0eWxlIGNsYXNzZXMgYW5kIG5ldy1zdHlsZSBjbGFzc2VzCisgICAgICAgICMgYXJlIHdlYWtyZWZhYmxlLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGwgPSBbXQorICAgICAgICB3ZWFrcmVmLnJlZihpbnQpCisgICAgICAgIGEgPSB3ZWFrcmVmLnJlZihBLCBsLmFwcGVuZCkKKyAgICAgICAgQSA9IE5vbmUKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFthXSkKKyAgICAgICAgYiA9IHdlYWtyZWYucmVmKEIsIGwuYXBwZW5kKQorICAgICAgICBCID0gTm9uZQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgW2EsIGJdKQorCiAKIGNsYXNzIFN1YmNsYXNzYWJsZVdlYWtyZWZUZXN0Q2FzZShUZXN0QmFzZSk6CiAKQEAgLTY5OSwxMiArNzE4LDEyIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKE15UmVmLCBzZWxmKS5fX2NhbGxfXygpCiAgICAgICAgIG8gPSBPYmplY3QoImZvbyIpCiAgICAgICAgIG1yID0gTXlSZWYobywgdmFsdWU9MjQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtcigpIGlzIG8pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtcigpIGlzIG8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtci5jYWxsZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXIudmFsdWUsIDI0KQogICAgICAgICBkZWwgbwotICAgICAgICBzZWxmLmFzc2VydF8obXIoKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8obXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXIoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXIuY2FsbGVkKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NfcmVmc19kb250X3JlcGxhY2Vfc3RhbmRhcmRfcmVmcyhzZWxmKToKICAgICAgICAgY2xhc3MgTXlSZWYod2Vha3JlZi5yZWYpOgpAQCAtNzEyLDE2ICs3MzEsMTYgQEAKICAgICAgICAgbyA9IE9iamVjdCg0MikKICAgICAgICAgcjEgPSBNeVJlZihvKQogICAgICAgICByMiA9IHdlYWtyZWYucmVmKG8pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyMSBpcyBub3QgcjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSBpcyBub3QgcjIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2Vha3JlZi5nZXR3ZWFrcmVmcyhvKSwgW3IyLCByMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobyksIDIpCiAgICAgICAgIHIzID0gTXlSZWYobykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSwgMykKICAgICAgICAgcmVmcyA9IHdlYWtyZWYuZ2V0d2Vha3JlZnMobykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVmcyksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyMiBpcyByZWZzWzBdKQotICAgICAgICBzZWxmLmFzc2VydF8ocjEgaW4gcmVmc1sxOl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyMyBpbiByZWZzWzE6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIyIGlzIHJlZnNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocjEsIHJlZnNbMTpdKQorICAgICAgICBzZWxmLmFzc2VydEluKHIzLCByZWZzWzE6XSkKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3JlZnNfZG9udF9jb25mbGF0ZV9jYWxsYmFja3Moc2VsZik6CiAgICAgICAgIGNsYXNzIE15UmVmKHdlYWtyZWYucmVmKToKQEAgLTcyOSwxMCArNzQ4LDEwIEBACiAgICAgICAgIG8gPSBPYmplY3QoNDIpCiAgICAgICAgIHIxID0gTXlSZWYobywgaWQpCiAgICAgICAgIHIyID0gTXlSZWYobywgc3RyKQotICAgICAgICBzZWxmLmFzc2VydF8ocjEgaXMgbm90IHIyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgaXMgbm90IHIyKQogICAgICAgICByZWZzID0gd2Vha3JlZi5nZXR3ZWFrcmVmcyhvKQotICAgICAgICBzZWxmLmFzc2VydF8ocjEgaW4gcmVmcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHIyIGluIHJlZnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocjEsIHJlZnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocjIsIHJlZnMpCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc19yZWZzX3dpdGhfc2xvdHMoc2VsZik6CiAgICAgICAgIGNsYXNzIE15UmVmKHdlYWtyZWYucmVmKToKQEAgLTc0OSw3ICs3NjgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuc2xvdDEsICJhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuc2xvdDIsICJkZWYiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIubWV0aCgpLCAiYWJjZGVmIikKLSAgICAgICAgc2VsZi5mYWlsSWYoaGFzYXR0cihyLCAiX19kaWN0X18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHIsICJfX2RpY3RfXyIpKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NfcmVmc193aXRoX2N5Y2xlKHNlbGYpOgogICAgICAgICAjIEJ1ZyAjMzExMApAQCAtODA3LDIzICs4MjYsMjMgQEAKICAgICAgICAgIwogICAgICAgICBkaWN0LCBvYmplY3RzID0gc2VsZi5tYWtlX3dlYWtfdmFsdWVkX2RpY3QoKQogICAgICAgICBmb3IgbyBpbiBvYmplY3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDEsCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byAlciEiICUgbykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvIGlzIGRpY3Rbby5hcmddLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8gaXMgZGljdFtvLmFyZ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIG9iamVjdCByZXR1cm5lZCBieSB3ZWFrIGRpY3QhIikKICAgICAgICAgaXRlbXMxID0gZGljdC5pdGVtcygpCiAgICAgICAgIGl0ZW1zMiA9IGRpY3QuY29weSgpLml0ZW1zKCkKICAgICAgICAgaXRlbXMxLnNvcnQoKQogICAgICAgICBpdGVtczIuc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhpdGVtczEgPT0gaXRlbXMyLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXRlbXMxID09IGl0ZW1zMiwKICAgICAgICAgICAgICAgICAgICAgICJjbG9uaW5nIG9mIHdlYWstdmFsdWVkIGRpY3Rpb25hcnkgZGlkIG5vdCB3b3JrISIpCiAgICAgICAgIGRlbCBpdGVtczEsIGl0ZW1zMgotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGRpY3QpID09IHNlbGYuQ09VTlQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGljdCkgPT0gc2VsZi5DT1VOVCkKICAgICAgICAgZGVsIG9iamVjdHNbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihkaWN0KSA9PSAoc2VsZi5DT1VOVCAtIDEpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRpY3QpID09IChzZWxmLkNPVU5UIC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRpbmcgb2JqZWN0IGRpZCBub3QgY2F1c2UgZGljdGlvbmFyeSB1cGRhdGUiKQogICAgICAgICBkZWwgb2JqZWN0cywgbwotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGRpY3QpID09IDAsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGljdCkgPT0gMCwKICAgICAgICAgICAgICAgICAgICAgICJkZWxldGluZyB0aGUgdmFsdWVzIGRpZCBub3QgY2xlYXIgdGhlIGRpY3Rpb25hcnkiKQogICAgICAgICAjIHJlZ3Jlc3Npb24gb24gU0YgYnVnICM0NDcxNTI6CiAgICAgICAgIGRpY3QgPSB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkoKQpAQCAtODM4LDI2ICs4NTcsMjYgQEAKICAgICAgICAgIwogICAgICAgICBkaWN0LCBvYmplY3RzID0gc2VsZi5tYWtlX3dlYWtfa2V5ZWRfZGljdCgpCiAgICAgICAgIGZvciBvIGluIG9iamVjdHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8od2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2VzIHRvICVyISIgJSBvKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG8uYXJnIGlzIGRpY3Rbb10sCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoby5hcmcgaXMgZGljdFtvXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAid3Jvbmcgb2JqZWN0IHJldHVybmVkIGJ5IHdlYWsgZGljdCEiKQogICAgICAgICBpdGVtczEgPSBkaWN0Lml0ZW1zKCkKICAgICAgICAgaXRlbXMyID0gZGljdC5jb3B5KCkuaXRlbXMoKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0KGl0ZW1zMSkgPT0gc2V0KGl0ZW1zMiksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQoaXRlbXMxKSA9PSBzZXQoaXRlbXMyKSwKICAgICAgICAgICAgICAgICAgICAgICJjbG9uaW5nIG9mIHdlYWsta2V5ZWQgZGljdGlvbmFyeSBkaWQgbm90IHdvcmshIikKICAgICAgICAgZGVsIGl0ZW1zMSwgaXRlbXMyCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZGljdCkgPT0gc2VsZi5DT1VOVCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkaWN0KSA9PSBzZWxmLkNPVU5UKQogICAgICAgICBkZWwgb2JqZWN0c1swXQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGRpY3QpID09IChzZWxmLkNPVU5UIC0gMSksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGljdCkgPT0gKHNlbGYuQ09VTlQgLSAxKSwKICAgICAgICAgICAgICAgICAgICAgICJkZWxldGluZyBvYmplY3QgZGlkIG5vdCBjYXVzZSBkaWN0aW9uYXJ5IHVwZGF0ZSIpCiAgICAgICAgIGRlbCBvYmplY3RzLCBvCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZGljdCkgPT0gMCwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkaWN0KSA9PSAwLAogICAgICAgICAgICAgICAgICAgICAgImRlbGV0aW5nIHRoZSBrZXlzIGRpZCBub3QgY2xlYXIgdGhlIGRpY3Rpb25hcnkiKQogICAgICAgICBvID0gT2JqZWN0KDQyKQogICAgICAgICBkaWN0W29dID0gIldoYXQgaXMgdGhlIG1lYW5pbmcgb2YgdGhlIHVuaXZlcnNlPyIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8gaW4gZGljdCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDM0IG5vdCBpbiBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEluKG8sIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMzQsIGRpY3QpCiAKICAgICBkZWYgdGVzdF93ZWFrX2tleWVkX2l0ZXJzKHNlbGYpOgogICAgICAgICBkaWN0LCBvYmplY3RzID0gc2VsZi5tYWtlX3dlYWtfa2V5ZWRfZGljdCgpCkBAIC04NjksNyArODg4LDcgQEAKICAgICAgICAgb2JqZWN0czIgPSBsaXN0KG9iamVjdHMpCiAgICAgICAgIGZvciB3ciBpbiByZWZzOgogICAgICAgICAgICAgb2IgPSB3cigpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2IgaW4gZGljdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob2IsIGRpY3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iLmFyZywgZGljdFtvYl0pCiAgICAgICAgICAgICBvYmplY3RzMi5yZW1vdmUob2IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9iamVjdHMyKSwgMCkKQEAgLTg3OSw3ICs4OTgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KGRpY3QuaXRlcmtleXJlZnMoKSkpLCBsZW4ob2JqZWN0cykpCiAgICAgICAgIGZvciB3ciBpbiBkaWN0Lml0ZXJrZXlyZWZzKCk6CiAgICAgICAgICAgICBvYiA9IHdyKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYiBpbiBkaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvYiwgZGljdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2IuYXJnLCBkaWN0W29iXSkKICAgICAgICAgICAgIG9iamVjdHMyLnJlbW92ZShvYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2JqZWN0czIpLCAwKQpAQCAtOTE0LDM3ICs5MzMsMzcgQEAKICAgICAgICAgaXRlbXMgPSBkaWN0Lml0ZW1zKCkKICAgICAgICAgZm9yIGl0ZW0gaW4gZGljdC5pdGVyaXRlbXMoKToKICAgICAgICAgICAgIGl0ZW1zLnJlbW92ZShpdGVtKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGl0ZW1zKSA9PSAwLCAiaXRlcml0ZW1zKCkgZGlkIG5vdCB0b3VjaCBhbGwgaXRlbXMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGl0ZW1zKSA9PSAwLCAiaXRlcml0ZW1zKCkgZGlkIG5vdCB0b3VjaCBhbGwgaXRlbXMiKQogCiAgICAgICAgICMga2V5IGl0ZXJhdG9yLCB2aWEgX19pdGVyX18oKToKICAgICAgICAga2V5cyA9IGRpY3Qua2V5cygpCiAgICAgICAgIGZvciBrIGluIGRpY3Q6CiAgICAgICAgICAgICBrZXlzLnJlbW92ZShrKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGtleXMpID09IDAsICJfX2l0ZXJfXygpIGRpZCBub3QgdG91Y2ggYWxsIGtleXMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGtleXMpID09IDAsICJfX2l0ZXJfXygpIGRpZCBub3QgdG91Y2ggYWxsIGtleXMiKQogCiAgICAgICAgICMga2V5IGl0ZXJhdG9yLCB2aWEgaXRlcmtleXMoKToKICAgICAgICAga2V5cyA9IGRpY3Qua2V5cygpCiAgICAgICAgIGZvciBrIGluIGRpY3QuaXRlcmtleXMoKToKICAgICAgICAgICAgIGtleXMucmVtb3ZlKGspCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oa2V5cykgPT0gMCwgIml0ZXJrZXlzKCkgZGlkIG5vdCB0b3VjaCBhbGwga2V5cyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oa2V5cykgPT0gMCwgIml0ZXJrZXlzKCkgZGlkIG5vdCB0b3VjaCBhbGwga2V5cyIpCiAKICAgICAgICAgIyB2YWx1ZSBpdGVyYXRvcjoKICAgICAgICAgdmFsdWVzID0gZGljdC52YWx1ZXMoKQogICAgICAgICBmb3IgdiBpbiBkaWN0Lml0ZXJ2YWx1ZXMoKToKICAgICAgICAgICAgIHZhbHVlcy5yZW1vdmUodikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbih2YWx1ZXMpID09IDAsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4odmFsdWVzKSA9PSAwLAogICAgICAgICAgICAgICAgICAgICAgIml0ZXJ2YWx1ZXMoKSBkaWQgbm90IHRvdWNoIGFsbCB2YWx1ZXMiKQogCiAgICAgZGVmIHRlc3RfbWFrZV93ZWFrX2tleWVkX2RpY3RfZnJvbV9kaWN0KHNlbGYpOgogICAgICAgICBvID0gT2JqZWN0KDMpCiAgICAgICAgIGRpY3QgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KHtvOjM2NH0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkaWN0W29dID09IDM2NCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpY3Rbb10gPT0gMzY0KQogCiAgICAgZGVmIHRlc3RfbWFrZV93ZWFrX2tleWVkX2RpY3RfZnJvbV93ZWFrX2tleWVkX2RpY3Qoc2VsZik6CiAgICAgICAgIG8gPSBPYmplY3QoMykKICAgICAgICAgZGljdCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoe286MzY0fSkKICAgICAgICAgZGljdDIgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KGRpY3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkaWN0W29dID09IDM2NCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpY3Rbb10gPT0gMzY0KQogCiAgICAgZGVmIG1ha2Vfd2Vha19rZXllZF9kaWN0KHNlbGYpOgogICAgICAgICBkaWN0ID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSgpCkBAIC05NjQsMTkgKzk4MywxOSBAQAogICAgICAgICB3ZWFrZGljdCA9IGtsYXNzKCkKICAgICAgICAgd2Vha2RpY3Rba2V5MV0gPSB2YWx1ZTEKICAgICAgICAgd2Vha2RpY3Rba2V5Ml0gPSB2YWx1ZTIKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbih3ZWFrZGljdCkgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih3ZWFrZGljdCkgPT0gMikKICAgICAgICAgaywgdiA9IHdlYWtkaWN0LnBvcGl0ZW0oKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHdlYWtkaWN0KSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHdlYWtkaWN0KSA9PSAxKQogICAgICAgICBpZiBrIGlzIGtleTE6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8odiBpcyB2YWx1ZTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpcyB2YWx1ZTEpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8odiBpcyB2YWx1ZTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpcyB2YWx1ZTIpCiAgICAgICAgIGssIHYgPSB3ZWFrZGljdC5wb3BpdGVtKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbih3ZWFrZGljdCkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih3ZWFrZGljdCkgPT0gMCkKICAgICAgICAgaWYgayBpcyBrZXkxOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHYgaXMgdmFsdWUxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaXMgdmFsdWUxKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHYgaXMgdmFsdWUyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaXMgdmFsdWUyKQogCiAgICAgZGVmIHRlc3Rfd2Vha192YWx1ZWRfZGljdF9wb3BpdGVtKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3BvcGl0ZW0od2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5LApAQCAtOTg3LDIxICsxMDA2LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDKCksICJ2YWx1ZSAxIiwgQygpLCAidmFsdWUgMiIpCiAKICAgICBkZWYgY2hlY2tfc2V0ZGVmYXVsdChzZWxmLCBrbGFzcywga2V5LCB2YWx1ZTEsIHZhbHVlMik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2YWx1ZTEgaXMgbm90IHZhbHVlMiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlMSBpcyBub3QgdmFsdWUyLAogICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdGVzdCIKICAgICAgICAgICAgICAgICAgICAgICIgLS0gdmFsdWUgcGFyYW1ldGVycyBtdXN0IGJlIGRpc3RpbmN0IG9iamVjdHMiKQogICAgICAgICB3ZWFrZGljdCA9IGtsYXNzKCkKICAgICAgICAgbyA9IHdlYWtkaWN0LnNldGRlZmF1bHQoa2V5LCB2YWx1ZTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvIGlzIHZhbHVlMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtleSBpbiB3ZWFrZGljdCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtkaWN0LmdldChrZXkpIGlzIHZhbHVlMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtkaWN0W2tleV0gaXMgdmFsdWUxKQorICAgICAgICBzZWxmLmFzc2VydElzKG8sIHZhbHVlMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIHdlYWtkaWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKHdlYWtkaWN0LmdldChrZXkpLCB2YWx1ZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2Vha2RpY3Rba2V5XSwgdmFsdWUxKQogCiAgICAgICAgIG8gPSB3ZWFrZGljdC5zZXRkZWZhdWx0KGtleSwgdmFsdWUyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobyBpcyB2YWx1ZTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrZXkgaW4gd2Vha2RpY3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrZGljdC5nZXQoa2V5KSBpcyB2YWx1ZTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrZGljdFtrZXldIGlzIHZhbHVlMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvLCB2YWx1ZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCB3ZWFrZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3ZWFrZGljdC5nZXQoa2V5KSwgdmFsdWUxKQorICAgICAgICBzZWxmLmFzc2VydElzKHdlYWtkaWN0W2tleV0sIHZhbHVlMSkKIAogICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVkX2RpY3Rfc2V0ZGVmYXVsdChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19zZXRkZWZhdWx0KHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSwKQEAgLTEwMjAsMTcgKzEwMzksMTcgQEAKICAgICAgICAgd2Vha2RpY3QudXBkYXRlKGRpY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHdlYWtkaWN0KSwgbGVuKGRpY3QpKQogICAgICAgICBmb3IgayBpbiB3ZWFrZGljdC5rZXlzKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoayBpbiBkaWN0LAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBkaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICJteXN0ZXJpb3VzIG5ldyBrZXkgYXBwZWFyZWQgaW4gd2VhayBkaWN0IikKICAgICAgICAgICAgIHYgPSBkaWN0LmdldChrKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaXMgd2Vha2RpY3Rba10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpcyB3ZWFrZGljdC5nZXQoaykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHYsIHdlYWtkaWN0W2tdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh2LCB3ZWFrZGljdC5nZXQoaykpCiAgICAgICAgIGZvciBrIGluIGRpY3Qua2V5cygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGsgaW4gd2Vha2RpY3QsCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIHdlYWtkaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICJvcmlnaW5hbCBrZXkgZGlzYXBwZWFyZWQgaW4gd2VhayBkaWN0IikKICAgICAgICAgICAgIHYgPSBkaWN0W2tdCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpcyB3ZWFrZGljdFtrXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGlzIHdlYWtkaWN0LmdldChrKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModiwgd2Vha2RpY3Rba10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHYsIHdlYWtkaWN0LmdldChrKSkKIAogICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVkX2RpY3RfdXBkYXRlKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3VwZGF0ZSh3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnksCkBAIC0xMDQ2LDEwICsxMDY1LDEwIEBACiAgICAgICAgIG8yID0gT2JqZWN0KCcyJykKICAgICAgICAgZFtvMV0gPSAnc29tZXRoaW5nJwogICAgICAgICBkW28yXSA9ICdzb21ldGhpbmcnCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZCkgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkKSA9PSAyKQogICAgICAgICBkZWwgZFtvMV0KLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihkKSA9PSAxKQotICAgICAgICBzZWxmLmFzc2VydF8oZC5rZXlzKCkgPT0gW28yXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5rZXlzKCkgPT0gW28yXSkKIAogICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVkX2RlbGl0ZW0oc2VsZik6CiAgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkoKQpAQCAtMTA1NywxMCArMTA3NiwxMCBAQAogICAgICAgICBvMiA9IE9iamVjdCgnMicpCiAgICAgICAgIGRbJ3NvbWV0aGluZyddID0gbzEKICAgICAgICAgZFsnc29tZXRoaW5nIGVsc2UnXSA9IG8yCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZCkgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkKSA9PSAyKQogICAgICAgICBkZWwgZFsnc29tZXRoaW5nJ10KLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihkKSA9PSAxKQotICAgICAgICBzZWxmLmFzc2VydF8oZC5pdGVtcygpID09IFsoJ3NvbWV0aGluZyBlbHNlJywgbzIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5pdGVtcygpID09IFsoJ3NvbWV0aGluZyBlbHNlJywgbzIpXSkKIAogICAgIGRlZiB0ZXN0X3dlYWtfa2V5ZWRfYmFkX2RlbGl0ZW0oc2VsZik6CiAgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3NldC5weSBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3NldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWMyODIyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF93ZWFrc2V0LnB5CkBAIC0wLDAgKzEsMzc3IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5LCByZWYsIFdlYWtTZXQKK2ltcG9ydCBvcGVyYXRvcgoraW1wb3J0IGNvcHkKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBvcworZnJvbSByYW5kb20gaW1wb3J0IHJhbmRyYW5nZSwgc2h1ZmZsZQoraW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBnYworaW1wb3J0IGNvbnRleHRsaWIKKworCitjbGFzcyBGb286CisgICAgcGFzcworCitjbGFzcyBTb21lQ2xhc3Mob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgdHlwZShvdGhlcikgIT0gdHlwZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gb3RoZXIudmFsdWUgPT0gc2VsZi52YWx1ZQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKChTb21lQ2xhc3MsIHNlbGYudmFsdWUpKQorCitjbGFzcyBUZXN0V2Vha1NldCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgbmVlZCB0byBrZWVwIHJlZmVyZW5jZXMgdG8gdGhlbQorICAgICAgICBzZWxmLml0ZW1zID0gW1NvbWVDbGFzcyhjKSBmb3IgYyBpbiAoJ2EnLCAnYicsICdjJyldCisgICAgICAgIHNlbGYuaXRlbXMyID0gW1NvbWVDbGFzcyhjKSBmb3IgYyBpbiAoJ3gnLCAneScsICd6JyldCisgICAgICAgIHNlbGYubGV0dGVycyA9IFtTb21lQ2xhc3MoYykgZm9yIGMgaW4gc3RyaW5nLmFzY2lpX2xldHRlcnNdCisgICAgICAgIHNlbGYucyA9IFdlYWtTZXQoc2VsZi5pdGVtcykKKyAgICAgICAgc2VsZi5kID0gZGljdC5mcm9ta2V5cyhzZWxmLml0ZW1zKQorICAgICAgICBzZWxmLm9iaiA9IFNvbWVDbGFzcygnRicpCisgICAgICAgIHNlbGYuZnMgPSBXZWFrU2V0KFtzZWxmLm9ial0pCisKKyAgICBkZWYgdGVzdF9tZXRob2RzKHNlbGYpOgorICAgICAgICB3ZWFrc2V0bWV0aG9kcyA9IGRpcihXZWFrU2V0KQorICAgICAgICBmb3IgbWV0aG9kIGluIGRpcihzZXQpOgorICAgICAgICAgICAgaWYgbWV0aG9kID09ICd0ZXN0X2NfYXBpJyBvciBtZXRob2Quc3RhcnRzd2l0aCgnXycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1ldGhvZCwgd2Vha3NldG1ldGhvZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIldlYWtTZXQgbWlzc2luZyBtZXRob2QgIiArIG1ldGhvZCkKKworICAgIGRlZiB0ZXN0X25ld19vcl9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFdlYWtTZXQsIFtdLCAyKQorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnMpLCBsZW4oc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5mcyksIDEpCisgICAgICAgIGRlbCBzZWxmLm9iagorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmZzKSwgMCkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gc2VsZi5zLCBjIGluIHNlbGYuZCkKKyAgICAgICAgIyAxIGlzIG5vdCB3ZWFrcmVmJ2FibGUsIGJ1dCB0aGF0IFR5cGVFcnJvciBpcyBjYXVnaHQgYnkgX19jb250YWluc19fCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMSwgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYub2JqLCBzZWxmLmZzKQorICAgICAgICBkZWwgc2VsZi5vYmoKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihTb21lQ2xhc3MoJ0YnKSwgc2VsZi5mcykKKworICAgIGRlZiB0ZXN0X3VuaW9uKHNlbGYpOgorICAgICAgICB1ID0gc2VsZi5zLnVuaW9uKHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gdSwgYyBpbiBzZWxmLmQgb3IgYyBpbiBzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIFdlYWtTZXQoc2VsZi5pdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh1KSwgV2Vha1NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMudW5pb24sIFtbXV0pCisgICAgICAgIGZvciBDIGluIHNldCwgZnJvemVuc2V0LCBkaWN0LmZyb21rZXlzLCBsaXN0LCB0dXBsZToKKyAgICAgICAgICAgIHggPSBXZWFrU2V0KHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMikKKyAgICAgICAgICAgIGMgPSBDKHNlbGYuaXRlbXMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMudW5pb24oYyksIHgpCisKKyAgICBkZWYgdGVzdF9vcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy51bmlvbihzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgfCBzZXQoc2VsZi5pdGVtczIpLCBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyB8IGZyb3plbnNldChzZWxmLml0ZW1zMiksIGkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb24oc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuaW50ZXJzZWN0aW9uKHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gaSwgYyBpbiBzZWxmLmQgYW5kIGMgaW4gc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBXZWFrU2V0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaSksIFdlYWtTZXQpCisgICAgICAgIGZvciBDIGluIHNldCwgZnJvemVuc2V0LCBkaWN0LmZyb21rZXlzLCBsaXN0LCB0dXBsZToKKyAgICAgICAgICAgIHggPSBXZWFrU2V0KFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMuaW50ZXJzZWN0aW9uKEMoc2VsZi5pdGVtczIpKSwgeCkKKworICAgIGRlZiB0ZXN0X2lzZGlzam9pbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnMuaXNkaXNqb2ludChXZWFrU2V0KHNlbGYuaXRlbXMyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5zLmlzZGlzam9pbnQoV2Vha1NldChzZWxmLmxldHRlcnMpKSkKKworICAgIGRlZiB0ZXN0X2FuZChzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5pbnRlcnNlY3Rpb24oc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zICYgc2V0KHNlbGYuaXRlbXMyKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgJiBmcm96ZW5zZXQoc2VsZi5pdGVtczIpLCBpKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5kaWZmZXJlbmNlKHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gaSwgYyBpbiBzZWxmLmQgYW5kIGMgbm90IGluIHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgV2Vha1NldChzZWxmLml0ZW1zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGkpLCBXZWFrU2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5kaWZmZXJlbmNlLCBbW11dKQorCisgICAgZGVmIHRlc3Rfc3ViKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLmRpZmZlcmVuY2Uoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIC0gc2V0KHNlbGYuaXRlbXMyKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgLSBmcm96ZW5zZXQoc2VsZi5pdGVtczIpLCBpKQorCisgICAgZGVmIHRlc3Rfc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VsZi5pdGVtczIpCisgICAgICAgIGZvciBjIGluIHNlbGYubGV0dGVyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYyBpbiBpLCAoYyBpbiBzZWxmLmQpIF4gKGMgaW4gc2VsZi5pdGVtczIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgV2Vha1NldChzZWxmLml0ZW1zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGkpLCBXZWFrU2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZSwgW1tdXSkKKworICAgIGRlZiB0ZXN0X3hvcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgXiBzZXQoc2VsZi5pdGVtczIpLCBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyBeIGZyb3plbnNldChzZWxmLml0ZW1zMiksIGkpCisKKyAgICBkZWYgdGVzdF9zdWJfYW5kX3N1cGVyKHNlbGYpOgorICAgICAgICBwbCwgcWwsIHJsID0gbWFwKGxhbWJkYSBzOiBbU29tZUNsYXNzKGMpIGZvciBjIGluIHNdLCBbJ2FiJywgJ2FiY2RlJywgJ2RlZiddKQorICAgICAgICBwLCBxLCByID0gbWFwKFdlYWtTZXQsIChwbCwgcWwsIHJsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgPCBxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCA8PSBxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSA8PSBxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSA+IHApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxID49IHApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocSA8IHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocSA8PSByKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEgPiByKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEgPj0gcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldCgnYScpLmlzc3Vic2V0KCdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldCgnYWJjJykuaXNzdXBlcnNldCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNldCgnYScpLmlzc3Vic2V0KCdjYnMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXQoJ2NicycpLmlzc3VwZXJzZXQoJ2EnKSkKKworICAgIGRlZiB0ZXN0X2djKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBhIG5lc3Qgb2YgY3ljbGVzIHRvIGV4ZXJjaXNlIG92ZXJhbGwgcmVmIGNvdW50IGNoZWNrCisgICAgICAgIHMgPSBXZWFrU2V0KEZvbygpIGZvciBpIGluIHJhbmdlKDEwMDApKQorICAgICAgICBmb3IgZWxlbSBpbiBzOgorICAgICAgICAgICAgZWxlbS5jeWNsZSA9IHMKKyAgICAgICAgICAgIGVsZW0uc3ViID0gZWxlbQorICAgICAgICAgICAgZWxlbS5zZXQgPSBXZWFrU2V0KFtlbGVtXSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3dpdGhfY3VzdG9tX2hhc2goc2VsZik6CisgICAgICAgICMgQnVnICMxMjU3NzMxCisgICAgICAgIGNsYXNzIEgoV2Vha1NldCk6CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChpZChzZWxmKSAmIDB4N2ZmZmZmZmYpCisgICAgICAgIHM9SCgpCisgICAgICAgIGY9c2V0KCkKKyAgICAgICAgZi5hZGQocykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzLCBmKQorICAgICAgICBmLnJlbW92ZShzKQorICAgICAgICBmLmFkZChzKQorICAgICAgICBmLmRpc2NhcmQocykKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHMgPSBXZWFrU2V0KCkKKyAgICAgICAgcy5fX2luaXRfXyhzZWxmLml0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNlbGYucykKKyAgICAgICAgcy5fX2luaXRfXyhzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBXZWFrU2V0KHNlbGYuaXRlbXMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzLl9faW5pdF9fLCBzLCAyKTsKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzLl9faW5pdF9fLCAxKTsKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2lkZW50aXR5KHNlbGYpOgorICAgICAgICBzID0gV2Vha1NldChzZWxmLml0ZW1zKQorICAgICAgICB0ID0gV2Vha1NldChzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMpLCBpZCh0KSkKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgc2VsZi5zKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYucy5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBXZWFrU2V0KFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zKSwgMCkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGR1cCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIGR1cCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzZWxmLnMpLCBpZChkdXApKQorCisgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICB4ID0gU29tZUNsYXNzKCdRJykKKyAgICAgICAgc2VsZi5zLmFkZCh4KQorICAgICAgICBzZWxmLmFzc2VydEluKHgsIHNlbGYucykKKyAgICAgICAgZHVwID0gc2VsZi5zLmNvcHkoKQorICAgICAgICBzZWxmLnMuYWRkKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBkdXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmFkZCwgW10pCisgICAgICAgIHNlbGYuZnMuYWRkKEZvbygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYuZnMpID09IDEpCisgICAgICAgIHNlbGYuZnMuYWRkKHNlbGYub2JqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYuZnMpID09IDEpCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgIHggPSBTb21lQ2xhc3MoJ2EnKQorICAgICAgICBzZWxmLnMucmVtb3ZlKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oeCwgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5zLnJlbW92ZSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMucmVtb3ZlLCBbXSkKKworICAgIGRlZiB0ZXN0X2Rpc2NhcmQoc2VsZik6CisgICAgICAgIGEsIHEgPSBTb21lQ2xhc3MoJ2EnKSwgU29tZUNsYXNzKCdRJykKKyAgICAgICAgc2VsZi5zLmRpc2NhcmQoYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihhLCBzZWxmLnMpCisgICAgICAgIHNlbGYucy5kaXNjYXJkKHEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmRpc2NhcmQsIFtdKQorCisgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5zKSk6CisgICAgICAgICAgICBlbGVtID0gc2VsZi5zLnBvcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYucy5wb3ApCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIHJldHZhbCA9IHNlbGYucy51cGRhdGUoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy51cGRhdGUsIFtbXV0pCisKKyAgICBkZWYgdGVzdF91cGRhdGVfc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnMudXBkYXRlKHNldChzZWxmLml0ZW1zMikpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9pb3Ioc2VsZik6CisgICAgICAgIHNlbGYucyB8PSBzZXQoc2VsZi5pdGVtczIpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fdXBkYXRlKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBzZWxmLnMuaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgaWYgYyBpbiBzZWxmLml0ZW1zMiBhbmQgYyBpbiBzZWxmLml0ZW1zOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuaW50ZXJzZWN0aW9uX3VwZGF0ZSwgW1tdXSkKKworICAgIGRlZiB0ZXN0X2lhbmQoc2VsZik6CisgICAgICAgIHNlbGYucyAmPSBzZXQoc2VsZi5pdGVtczIpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgaWYgYyBpbiBzZWxmLml0ZW1zMiBhbmQgYyBpbiBzZWxmLml0ZW1zOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBzZWxmLnMuZGlmZmVyZW5jZV91cGRhdGUoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5pdGVtcyBhbmQgYyBub3QgaW4gc2VsZi5pdGVtczI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5kaWZmZXJlbmNlX3VwZGF0ZSwgW1tdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLCBbW11dKQorCisgICAgZGVmIHRlc3RfaXN1YihzZWxmKToKKyAgICAgICAgc2VsZi5zIC09IHNldChzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6CisgICAgICAgICAgICBpZiBjIGluIHNlbGYuaXRlbXMgYW5kIGMgbm90IGluIHNlbGYuaXRlbXMyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X3N5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgcmV0dmFsID0gc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgaWYgKGMgaW4gc2VsZi5pdGVtcykgXiAoYyBpbiBzZWxmLml0ZW1zMik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCisKKyAgICBkZWYgdGVzdF9peG9yKHNlbGYpOgorICAgICAgICBzZWxmLnMgXj0gc2V0KHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIGlmIChjIGluIHNlbGYuaXRlbXMpIF4gKGMgaW4gc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X2lucGxhY2Vfb25fc2VsZihzZWxmKToKKyAgICAgICAgdCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgdCB8PSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgc2VsZi5zKQorICAgICAgICB0ICY9IHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBzZWxmLnMpCisgICAgICAgIHQgLT0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIFdlYWtTZXQoKSkKKyAgICAgICAgdCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgdCBePSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgV2Vha1NldCgpKQorCisgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgICMgaXNzdWUgNTk2NAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zID09IHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucyA9PSBXZWFrU2V0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucyA9PSBzZXQoc2VsZi5pdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zID09IGxpc3Qoc2VsZi5pdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zID09IHR1cGxlKHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucyA9PSAxKQorCisgICAgZGVmIHRlc3Rfd2Vha19kZXN0cm95X3doaWxlX2l0ZXJhdGluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzEwNTogaXRlcmF0b3JzIHNob3VsZG4ndCBjcmFzaCB3aGVuIGEga2V5IGlzIGltcGxpY2l0bHkgcmVtb3ZlZAorICAgICAgICAjIENyZWF0ZSBuZXcgaXRlbXMgdG8gYmUgc3VyZSBuby1vbmUgZWxzZSBob2xkcyBhIHJlZmVyZW5jZQorICAgICAgICBpdGVtcyA9IFtTb21lQ2xhc3MoYykgZm9yIGMgaW4gKCdhJywgJ2InLCAnYycpXQorICAgICAgICBzID0gV2Vha1NldChpdGVtcykKKyAgICAgICAgaXQgPSBpdGVyKHMpCisgICAgICAgIG5leHQoaXQpICAgICAgICAgICAgICMgVHJpZ2dlciBpbnRlcm5hbCBpdGVyYXRpb24KKyAgICAgICAgIyBEZXN0cm95IGFuIGl0ZW0KKyAgICAgICAgZGVsIGl0ZW1zWy0xXQorICAgICAgICBnYy5jb2xsZWN0KCkgICAgIyBqdXN0IGluIGNhc2UKKyAgICAgICAgIyBXZSBoYXZlIHJlbW92ZWQgZWl0aGVyIHRoZSBmaXJzdCBjb25zdW1lZCBpdGVtcywgb3IgYW5vdGhlciBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihsZW4obGlzdChpdCkpLCBbbGVuKGl0ZW1zKSwgbGVuKGl0ZW1zKSAtIDFdKQorICAgICAgICBkZWwgaXQKKyAgICAgICAgIyBUaGUgcmVtb3ZhbCBoYXMgYmVlbiBjb21taXR0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIGxlbihpdGVtcykpCisKKyAgICBkZWYgdGVzdF93ZWFrX2Rlc3Ryb3lfYW5kX211dGF0ZV93aGlsZV9pdGVyYXRpbmcoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzcxMDU6IGl0ZXJhdG9ycyBzaG91bGRuJ3QgY3Jhc2ggd2hlbiBhIGtleSBpcyBpbXBsaWNpdGx5IHJlbW92ZWQKKyAgICAgICAgaXRlbXMgPSBbU29tZUNsYXNzKGMpIGZvciBjIGluIHN0cmluZy5hc2NpaV9sZXR0ZXJzXQorICAgICAgICBzID0gV2Vha1NldChpdGVtcykKKyAgICAgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIHRlc3Rjb250ZXh0KCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXQgPSBpdGVyKHMpCisgICAgICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgICAgICAgICAjIFNjaGVkdWxlIGFuIGl0ZW0gZm9yIHJlbW92YWwgYW5kIHJlY3JlYXRlIGl0CisgICAgICAgICAgICAgICAgdSA9IFNvbWVDbGFzcyhzdHIoaXRlbXMucG9wKCkpKQorICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKSAgICAgICMganVzdCBpbiBjYXNlCisgICAgICAgICAgICAgICAgeWllbGQgdQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpdCA9IE5vbmUgICAgICAgICAgICMgc2hvdWxkIGNvbW1pdCBhbGwgcmVtb3ZhbHMKKworICAgICAgICB3aXRoIHRlc3Rjb250ZXh0KCkgYXMgdToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSwgcykKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5yZW1vdmUsIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSwgcykKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6CisgICAgICAgICAgICBzLmFkZCh1KQorICAgICAgICBzZWxmLmFzc2VydEluKHUsIHMpCisgICAgICAgIHQgPSBzLmNvcHkoKQorICAgICAgICB3aXRoIHRlc3Rjb250ZXh0KCkgYXMgdToKKyAgICAgICAgICAgIHMudXBkYXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBsZW4odCkpCisgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKSBhcyB1OgorICAgICAgICAgICAgcy5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCAwKQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RXZWFrU2V0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3doaWNoZGIucHkgYi9MaWIvdGVzdC90ZXN0X3doaWNoZGIucHkKaW5kZXggNWE4ZDYzMC4uNDI3ZTMyMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93aGljaGRiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2hpY2hkYi5weQpAQCAtNDEsNyArNDEsNyBAQAogICAgIHRyeToKICAgICAgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZwogICAgICAgICBtb2QgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKG5hbWUsIGRlcHJlY2F0ZWQ9VHJ1ZSkKLSAgICBleGNlcHQgdGVzdC50ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQ6CisgICAgZXhjZXB0IHVuaXR0ZXN0LlNraXBUZXN0OgogICAgICAgICBjb250aW51ZQogCiAgICAgZGVmIHRlc3Rfd2hpY2hkYl9uYW1lKHNlbGYsIG5hbWU9bmFtZSwgbW9kPW1vZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CmluZGV4IDkwMjMwOWEuLjEyYWIzYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CkBAIC0xLDE1ICsxLDM2IEBACiAjIFRlc3QgdGhlIHdpbmRvd3Mgc3BlY2lmaWMgd2luMzJyZWcgbW9kdWxlLgogIyBPbmx5IHdpbjMycmVnIGZ1bmN0aW9ucyBub3QgaGl0IGhlcmU6IEZsdXNoS2V5LCBMb2FkS2V5IGFuZCBTYXZlS2V5CiAKLWZyb20gX3dpbnJlZyBpbXBvcnQgKgogaW1wb3J0IG9zLCBzeXMKIGltcG9ydCB1bml0dGVzdAotCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogdGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoInRocmVhZGluZyIpCiBmcm9tIHBsYXRmb3JtIGltcG9ydCBtYWNoaW5lCiAKKyMgRG8gdGhpcyBmaXJzdCBzbyB0ZXN0IHdpbGwgYmUgc2tpcHBlZCBpZiBtb2R1bGUgZG9lc24ndCBleGlzdAordGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ193aW5yZWcnKQorIyBOb3cgaW1wb3J0IGV2ZXJ5dGhpbmcKK2Zyb20gX3dpbnJlZyBpbXBvcnQgKgorCit0cnk6CisgICAgUkVNT1RFX05BTUUgPSBzeXMuYXJndltzeXMuYXJndi5pbmRleCgiLS1yZW1vdGUiKSsxXQorZXhjZXB0IChJbmRleEVycm9yLCBWYWx1ZUVycm9yKToKKyAgICBSRU1PVEVfTkFNRSA9IE5vbmUKKworIyB0dXBsZSBvZiAobWFqb3IsIG1pbm9yKQorV0lOX1ZFUiA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzoyXQorIyBTb21lIHRlc3RzIHNob3VsZCBvbmx5IHJ1biBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyB3aGVyZSBXT1c2NCB3aWxsIGJlLgorV0lONjRfTUFDSElORSA9IFRydWUgaWYgbWFjaGluZSgpID09ICJBTUQ2NCIgZWxzZSBGYWxzZQorCisjIFN0YXJ0aW5nIHdpdGggV2luZG93cyA3IGFuZCBXaW5kb3dzIFNlcnZlciAyMDA4IFIyLCBXT1c2NCBubyBsb25nZXIgdXNlcworIyByZWdpc3RyeSByZWZsZWN0aW9uIGFuZCBmb3JtZXJseSByZWZsZWN0ZWQga2V5cyBhcmUgc2hhcmVkIGluc3RlYWQuCisjIFdpbmRvd3MgNyBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwOCBSMiBhcmUgdmVyc2lvbiA2LjEuIER1ZSB0byB0aGlzLCBzb21lCisjIHRlc3RzIGFyZSBvbmx5IHZhbGlkIHVwIHVudGlsIDYuMQorSEFTX1JFRkxFQ1RJT04gPSBUcnVlIGlmIFdJTl9WRVIgPCAoNiwgMSkgZWxzZSBGYWxzZQorCiB0ZXN0X2tleV9uYW1lID0gIlNPRlRXQVJFXFxQeXRob24gUmVnaXN0cnkgVGVzdCBLZXkgLSBEZWxldGUgTWUiCisjIE9uIE9TJ2VzIHRoYXQgc3VwcG9ydCByZWZsZWN0aW9uIHdlIHNob3VsZCB0ZXN0IHdpdGggYSByZWZsZWN0ZWQga2V5Cit0ZXN0X3JlZmxlY3Rfa2V5X25hbWUgPSAiU09GVFdBUkVcXENsYXNzZXNcXFB5dGhvbiBUZXN0IEtleSAtIERlbGV0ZSBNZSIKIAogdGVzdF9kYXRhID0gWwogICAgICgiSW50IFZhbHVlIiwgICAgIDQ1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX0RXT1JEKSwKQEAgLTMxLDEwICs1MiwzMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlcyJdLCBSRUdfTVVMVElfU1opLAogICAgIF0KIAotY2xhc3MgV2lucmVnVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIHJlbW90ZV9uYW1lID0gTm9uZQorY2xhc3MgQmFzZVdpbnJlZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiBXcml0ZVRlc3REYXRhKHNlbGYsIHJvb3Rfa2V5KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHRlc3Qga2V5IGlzIGFic2VudCB3aGVuIHRoZSB0ZXN0CisgICAgICAgICMgc3RhcnRzLgorICAgICAgICBzZWxmLmRlbGV0ZV90cmVlKEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorCisgICAgZGVmIGRlbGV0ZV90cmVlKHNlbGYsIHJvb3QsIHN1YmtleSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhrZXkgPSBPcGVuS2V5KHJvb3QsIHN1YmtleSwgS0VZX0FMTF9BQ0NFU1MpCisgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAjIHN1YmtleSBkb2VzIG5vdCBleGlzdAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Vic3Via2V5ID0gRW51bUtleShoa2V5LCAwKQorICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIG5vIG1vcmUgc3Via2V5cworICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZWxmLmRlbGV0ZV90cmVlKGhrZXksIHN1YnN1YmtleSkKKyAgICAgICAgQ2xvc2VLZXkoaGtleSkKKyAgICAgICAgRGVsZXRlS2V5KHJvb3QsIHN1YmtleSkKKworICAgIGRlZiBfd3JpdGVfdGVzdF9kYXRhKHNlbGYsIHJvb3Rfa2V5LCBDcmVhdGVLZXk9Q3JlYXRlS2V5KToKICAgICAgICAgIyBTZXQgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMga2V5LgogICAgICAgICBTZXRWYWx1ZShyb290X2tleSwgdGVzdF9rZXlfbmFtZSwgUkVHX1NaLCAiRGVmYXVsdCB2YWx1ZSIpCiAgICAgICAgIGtleSA9IENyZWF0ZUtleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKQEAgLTQ3LDExICs4OCwxMSBAQAogCiAgICAgICAgICMgQ2hlY2sgd2Ugd3JvdGUgYXMgbWFueSBpdGVtcyBhcyB3ZSB0aG91Z2h0LgogICAgICAgICBua2V5cywgbnZhbHVlcywgc2luY2VfbW9kID0gUXVlcnlJbmZvS2V5KGtleSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmtleXMsIDEsICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHN1YiBrZXlzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobnZhbHVlcywgMSwgIk5vdCB0aGUgY29ycmVjdCBudW1iZXIgb2YgdmFsdWVzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChua2V5cywgMSwgIk5vdCB0aGUgY29ycmVjdCBudW1iZXIgb2Ygc3ViIGtleXMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG52YWx1ZXMsIDEsICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHZhbHVlcyIpCiAgICAgICAgIG5rZXlzLCBudmFsdWVzLCBzaW5jZV9tb2QgPSBRdWVyeUluZm9LZXkoc3ViX2tleSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmtleXMsIDAsICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHN1YiBrZXlzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobnZhbHVlcywgbGVuKHRlc3RfZGF0YSksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmtleXMsIDAsICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHN1YiBrZXlzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudmFsdWVzLCBsZW4odGVzdF9kYXRhKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdCB0aGUgY29ycmVjdCBudW1iZXIgb2YgdmFsdWVzIikKICAgICAgICAgIyBDbG9zZSB0aGlzIGtleSB0aGlzIHdheS4uLgogICAgICAgICAjIChidXQgYmVmb3JlIHdlIGRvLCBjb3B5IHRoZSBrZXkgYXMgYW4gaW50ZWdlciAtIHRoaXMgYWxsb3dzCkBAIC03NCwxMSArMTE1LDExIEBACiAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIFJlYWRUZXN0RGF0YShzZWxmLCByb290X2tleSk6CisgICAgZGVmIF9yZWFkX3Rlc3RfZGF0YShzZWxmLCByb290X2tleSwgT3BlbktleT1PcGVuS2V5KToKICAgICAgICAgIyBDaGVjayB3ZSBjYW4gZ2V0IGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMga2V5LgogICAgICAgICB2YWwgPSBRdWVyeVZhbHVlKHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh2YWwsICJEZWZhdWx0IHZhbHVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZ2lzdHJ5IGRpZG4ndCBnaXZlIGJhY2sgdGhlIGNvcnJlY3QgdmFsdWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgIkRlZmF1bHQgdmFsdWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJSZWdpc3RyeSBkaWRuJ3QgZ2l2ZSBiYWNrIHRoZSBjb3JyZWN0IHZhbHVlIikKIAogICAgICAgICBrZXkgPSBPcGVuS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQogICAgICAgICAjIFJlYWQgdGhlIHN1Yi1rZXlzCkBAIC05MCwyMiArMTMxLDIyIEBACiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBFbnVtVmFsdWUoc3ViX2tleSwgaW5kZXgpCiAgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0YSBpbiB0ZXN0X2RhdGEsIFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRpZG4ndCByZWFkIGJhY2sgdGhlIGNvcnJlY3QgdGVzdCBkYXRhIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGRhdGEsIHRlc3RfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWRuJ3QgcmVhZCBiYWNrIHRoZSBjb3JyZWN0IHRlc3QgZGF0YSIpCiAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGluZGV4LCBsZW4odGVzdF9kYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWRuJ3QgcmVhZCB0aGUgY29ycmVjdCBudW1iZXIgb2YgaXRlbXMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleCwgbGVuKHRlc3RfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWRuJ3QgcmVhZCB0aGUgY29ycmVjdCBudW1iZXIgb2YgaXRlbXMiKQogICAgICAgICAgICAgIyBDaGVjayBJIGNhbiBkaXJlY3RseSBhY2Nlc3MgZWFjaCBpdGVtCiAgICAgICAgICAgICBmb3IgdmFsdWVfbmFtZSwgdmFsdWVfZGF0YSwgdmFsdWVfdHlwZSBpbiB0ZXN0X2RhdGE6CiAgICAgICAgICAgICAgICAgcmVhZF92YWwsIHJlYWRfdHlwID0gUXVlcnlWYWx1ZUV4KHN1Yl9rZXksIHZhbHVlX25hbWUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhZF92YWwsIHZhbHVlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBkaXJlY3RseSByZWFkIHRoZSB2YWx1ZSIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhZF90eXAsIHZhbHVlX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBkaXJlY3RseSByZWFkIHRoZSB2YWx1ZSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX3ZhbCwgdmFsdWVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZGlyZWN0bHkgcmVhZCB0aGUgdmFsdWUiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF90eXAsIHZhbHVlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGRpcmVjdGx5IHJlYWQgdGhlIHZhbHVlIikKICAgICAgICAgc3ViX2tleS5DbG9zZSgpCiAgICAgICAgICMgRW51bWVyYXRlIG91ciBtYWluIGtleS4KICAgICAgICAgcmVhZF92YWwgPSBFbnVtS2V5KGtleSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhZF92YWwsICJzdWJfa2V5IiwgIlJlYWQgc3Via2V5IHZhbHVlIHdyb25nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX3ZhbCwgInN1Yl9rZXkiLCAiUmVhZCBzdWJrZXkgdmFsdWUgd3JvbmciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBFbnVtS2V5KGtleSwgMSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgiV2FzIGFibGUgdG8gZ2V0IGEgc2Vjb25kIGtleSB3aGVuIEkgb25seSBoYXZlIG9uZSEiKQpAQCAtMTE0LDcgKzE1NSw3IEBACiAKICAgICAgICAga2V5LkNsb3NlKCkKIAotICAgIGRlZiBEZWxldGVUZXN0RGF0YShzZWxmLCByb290X2tleSk6CisgICAgZGVmIF9kZWxldGVfdGVzdF9kYXRhKHNlbGYsIHJvb3Rfa2V5KToKICAgICAgICAga2V5ID0gT3BlbktleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSwgMCwgS0VZX0FMTF9BQ0NFU1MpCiAgICAgICAgIHN1Yl9rZXkgPSBPcGVuS2V5KGtleSwgInN1Yl9rZXkiLCAwLCBLRVlfQUxMX0FDQ0VTUykKICAgICAgICAgIyBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRlbGV0ZSB0aGUgdmFsdWVzIGJlZm9yZSBkZWxldGluZwpAQCAtMTI0LDggKzE2NSw4IEBACiAgICAgICAgICAgICBEZWxldGVWYWx1ZShzdWJfa2V5LCB2YWx1ZV9uYW1lKQogCiAgICAgICAgIG5rZXlzLCBudmFsdWVzLCBzaW5jZV9tb2QgPSBRdWVyeUluZm9LZXkoc3ViX2tleSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmtleXMsIDAsICJzdWJrZXkgbm90IGVtcHR5IGJlZm9yZSBkZWxldGUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhudmFsdWVzLCAwLCAic3Via2V5IG5vdCBlbXB0eSBiZWZvcmUgZGVsZXRlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChua2V5cywgMCwgInN1YmtleSBub3QgZW1wdHkgYmVmb3JlIGRlbGV0ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnZhbHVlcywgMCwgInN1YmtleSBub3QgZW1wdHkgYmVmb3JlIGRlbGV0ZSIpCiAgICAgICAgIHN1Yl9rZXkuQ2xvc2UoKQogICAgICAgICBEZWxldGVLZXkoa2V5LCAic3ViX2tleSIpCiAKQEAgLTE0NCwzMCArMTg1LDUzIEBACiAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6ICMgVXNlIHRoaXMgZXJyb3IgbmFtZSB0aGlzIHRpbWUKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiBUZXN0QWxsKHNlbGYsIHJvb3Rfa2V5KToKLSAgICAgICAgc2VsZi5Xcml0ZVRlc3REYXRhKHJvb3Rfa2V5KQotICAgICAgICBzZWxmLlJlYWRUZXN0RGF0YShyb290X2tleSkKLSAgICAgICAgc2VsZi5EZWxldGVUZXN0RGF0YShyb290X2tleSkKKyAgICBkZWYgX3Rlc3RfYWxsKHNlbGYsIHJvb3Rfa2V5KToKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdF9kYXRhKHJvb3Rfa2V5KQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3RfZGF0YShyb290X2tleSkKKyAgICAgICAgc2VsZi5fZGVsZXRlX3Rlc3RfZGF0YShyb290X2tleSkKIAotICAgIGRlZiB0ZXN0TG9jYWxNYWNoaW5lUmVnaXN0cnlXb3JrcyhzZWxmKToKLSAgICAgICAgc2VsZi5UZXN0QWxsKEhLRVlfQ1VSUkVOVF9VU0VSKQorY2xhc3MgTG9jYWxXaW5yZWdUZXN0cyhCYXNlV2lucmVnVGVzdHMpOgogCi0gICAgZGVmIHRlc3RDb25uZWN0UmVnaXN0cnlUb0xvY2FsTWFjaGluZVdvcmtzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5X3dvcmtzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FsbChIS0VZX0NVUlJFTlRfVVNFUikKKworICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5X3dvcmtzX2V4dGVuZGVkX2Z1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBTdWJzdGl0dXRlIHRoZSByZWd1bGFyIENyZWF0ZUtleSBhbmQgT3BlbktleSBjYWxscyB3aXRoIHRoZWlyCisgICAgICAgICMgZXh0ZW5kZWQgY291bnRlcnBhcnRzLgorICAgICAgICAjIE5vdGU6IERlbGV0ZUtleUV4IGlzIG5vdCB1c2VkIGhlcmUgYmVjYXVzZSBpdCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQKKyAgICAgICAgY2tlID0gbGFtYmRhIGtleSwgc3ViX2tleTogQ3JlYXRlS2V5RXgoa2V5LCBzdWJfa2V5LCAwLCBLRVlfQUxMX0FDQ0VTUykKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdF9kYXRhKEhLRVlfQ1VSUkVOVF9VU0VSLCBja2UpCisKKyAgICAgICAgb2tlID0gbGFtYmRhIGtleSwgc3ViX2tleTogT3BlbktleUV4KGtleSwgc3ViX2tleSwgMCwgS0VZX1JFQUQpCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdF9kYXRhKEhLRVlfQ1VSUkVOVF9VU0VSLCBva2UpCisKKyAgICAgICAgc2VsZi5fZGVsZXRlX3Rlc3RfZGF0YShIS0VZX0NVUlJFTlRfVVNFUikKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3RfcmVnaXN0cnlfdG9fbG9jYWxfbWFjaGluZV93b3JrcyhzZWxmKToKICAgICAgICAgIyBwZXJmb3JtIG1pbmltYWwgQ29ubmVjdFJlZ2lzdHJ5IHRlc3Qgd2hpY2gganVzdCBpbnZva2VzIGl0CiAgICAgICAgIGggPSBDb25uZWN0UmVnaXN0cnkoTm9uZSwgSEtFWV9MT0NBTF9NQUNISU5FKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGguaGFuZGxlLCAwKQogICAgICAgICBoLkNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhhbmRsZSwgMCkKIAotICAgIGRlZiB0ZXN0UmVtb3RlTWFjaGluZVJlZ2lzdHJ5V29ya3Moc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnJlbW90ZV9uYW1lOgotICAgICAgICAgICAgcmV0dXJuICMgcmVtb3RlIG1hY2hpbmUgbmFtZSBub3Qgc3BlY2lmaWVkCi0gICAgICAgIHJlbW90ZV9rZXkgPSBDb25uZWN0UmVnaXN0cnkoc2VsZi5yZW1vdGVfbmFtZSwgSEtFWV9DVVJSRU5UX1VTRVIpCi0gICAgICAgIHNlbGYuVGVzdEFsbChyZW1vdGVfa2V5KQorICAgIGRlZiB0ZXN0X2luZXhpc3RhbnRfcmVtb3RlX3JlZ2lzdHJ5KHNlbGYpOgorICAgICAgICBjb25uZWN0ID0gbGFtYmRhOiBDb25uZWN0UmVnaXN0cnkoImFiY2RlZmdoaWprbCIsIEhLRVlfQ1VSUkVOVF9VU0VSKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIGNvbm5lY3QpCiAKLSAgICBkZWYgdGVzdEV4cGFuZEVudmlyb25tZW50U3RyaW5ncyhzZWxmKToKKyAgICBkZWYgdGVzdF9leHBhbmRfZW52aXJvbm1lbnRfc3RyaW5ncyhzZWxmKToKICAgICAgICAgciA9IEV4cGFuZEVudmlyb25tZW50U3RyaW5ncyh1IiV3aW5kaXIlXFx0ZXN0IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHIpLCB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIG9zLmVudmlyb25bIndpbmRpciJdICsgIlxcdGVzdCIpCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGhhbmRsZSBpcyBjbG9zZWQgaWYgYW4gZXhjZXB0aW9uIG9jY3VycworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENvbm5lY3RSZWdpc3RyeShOb25lLCBIS0VZX0xPQ0FMX01BQ0hJTkUpIGFzIGg6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoLmhhbmRsZSwgMCkKKyAgICAgICAgICAgICAgICByYWlzZSBXaW5kb3dzRXJyb3IKKyAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oYW5kbGUsIDApCisKICAgICBkZWYgdGVzdF9jaGFuZ2luZ192YWx1ZShzZWxmKToKICAgICAgICAgIyBJc3N1ZTI4MTA6IEEgcmFjZSBjb25kaXRpb24gaW4gMi42IGFuZCAzLjEgbWF5IGNhdXNlCiAgICAgICAgICMgRW51bVZhbHVlIG9yIFF1ZXJ5VmFsdWUgdG8gdGhyb3cgIldpbmRvd3NFcnJvcjogTW9yZSBkYXRhIGlzCkBAIC0xOTcsNyArMjYxLDggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRvbmUgPSBUcnVlCiAgICAgICAgICAgICB0aHJlYWQuam9pbigpCi0gICAgICAgICAgICBEZWxldGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUrJ1xcY2hhbmdpbmdfdmFsdWUnKQorICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lLCAwLCBLRVlfQUxMX0FDQ0VTUykgYXMga2V5OgorICAgICAgICAgICAgICAgIERlbGV0ZUtleShrZXksICdjaGFuZ2luZ192YWx1ZScpCiAgICAgICAgICAgICBEZWxldGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpCiAKICAgICBkZWYgdGVzdF9sb25nX2tleShzZWxmKToKQEAgLTIxMSw3ICsyNzYsOCBAQAogICAgICAgICAgICAgICAgIG51bV9zdWJrZXlzLCBudW1fdmFsdWVzLCB0ID0gUXVlcnlJbmZvS2V5KGtleSkKICAgICAgICAgICAgICAgICBFbnVtS2V5KGtleSwgMCkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIERlbGV0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgJ1xcJy5qb2luKCh0ZXN0X2tleV9uYW1lLCBuYW1lKSkpCisgICAgICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUsIDAsIEtFWV9BTExfQUNDRVNTKSBhcyBrZXk6CisgICAgICAgICAgICAgICAgRGVsZXRlS2V5KGtleSwgbmFtZSkKICAgICAgICAgICAgIERlbGV0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKIAogICAgIGRlZiB0ZXN0X2R5bmFtaWNfa2V5KHNlbGYpOgpAQCAtMjIwLDE0ICsyODYsMTMxIEBACiAgICAgICAgIEVudW1WYWx1ZShIS0VZX1BFUkZPUk1BTkNFX0RBVEEsIDApCiAgICAgICAgIFF1ZXJ5VmFsdWVFeChIS0VZX1BFUkZPUk1BTkNFX0RBVEEsIE5vbmUpCiAKKyAgICAjIFJlZmxlY3Rpb24gcmVxdWlyZXMgWFAgeDY0L1Zpc3RhIGF0IGEgbWluaW11bS4gWFAgZG9lc24ndCBoYXZlIHRoaXMgc3R1ZmYKKyAgICAjIG9yIERlbGV0ZUtleUV4IHNvIG1ha2Ugc3VyZSB0aGVpciB1c2UgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhXSU5fVkVSIDwgKDUsIDIpLCAiUmVxdWlyZXMgV2luZG93cyBYUCIpCisgICAgZGVmIHRlc3RfcmVmbGVjdGlvbl91bnN1cHBvcnRlZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpIGFzIGNrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY2suaGFuZGxlLCAwKQorCisgICAgICAgICAgICBrZXkgPSBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuaGFuZGxlLCAwKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIERpc2FibGVSZWZsZWN0aW9uS2V5KGtleSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgRW5hYmxlUmVmbGVjdGlvbktleShrZXkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIFF1ZXJ5UmVmbGVjdGlvbktleShrZXkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIERlbGV0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKFJFTU9URV9OQU1FLCAiU2tpcHBpbmcgcmVtb3RlIHJlZ2lzdHJ5IHRlc3RzIikKK2NsYXNzIFJlbW90ZVdpbnJlZ1Rlc3RzKEJhc2VXaW5yZWdUZXN0cyk6CisKKyAgICBkZWYgdGVzdF9yZW1vdGVfcmVnaXN0cnlfd29ya3Moc2VsZik6CisgICAgICAgIHJlbW90ZV9rZXkgPSBDb25uZWN0UmVnaXN0cnkoUkVNT1RFX05BTUUsIEhLRVlfQ1VSUkVOVF9VU0VSKQorICAgICAgICBzZWxmLl90ZXN0X2FsbChyZW1vdGVfa2V5KQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKFdJTjY0X01BQ0hJTkUsICJ4NjQgc3BlY2lmaWMgcmVnaXN0cnkgdGVzdHMiKQorY2xhc3MgV2luNjRXaW5yZWdUZXN0cyhCYXNlV2lucmVnVGVzdHMpOgorCisgICAgZGVmIHRlc3RfcmVmbGVjdGlvbl9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbiBjYWxsIHRoZSBxdWVyeSwgZW5hYmxlLCBhbmQgZGlzYWJsZSBmdW5jdGlvbnMKKyAgICAgICAgIyBvbiBhIGtleSB3aGljaCBpc24ndCBvbiB0aGUgcmVmbGVjdGlvbiBsaXN0IHdpdGggbm8gY29uc2VxdWVuY2VzLgorICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9MT0NBTF9NQUNISU5FLCAiU29mdHdhcmUiKSBhcyBrZXk6CisgICAgICAgICAgICAjIEhLTE1cU29mdHdhcmUgaXMgcmVkaXJlY3RlZCBidXQgbm90IHJlZmxlY3RlZCBpbiBhbGwgT1NlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFF1ZXJ5UmVmbGVjdGlvbktleShrZXkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBFbmFibGVSZWZsZWN0aW9uS2V5KGtleSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIERpc2FibGVSZWZsZWN0aW9uS2V5KGtleSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoUXVlcnlSZWZsZWN0aW9uS2V5KGtleSkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUkVGTEVDVElPTiwgIk9TIGRvZXNuJ3Qgc3VwcG9ydCByZWZsZWN0aW9uIikKKyAgICBkZWYgdGVzdF9yZWZsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3ZSBjYW4gY3JlYXRlLCBvcGVuLCBhbmQgZGVsZXRlIGtleXMgaW4gdGhlIDMyLWJpdAorICAgICAgICAjIGFyZWEuIEJlY2F1c2Ugd2UgYXJlIGRvaW5nIHRoaXMgaW4gYSBrZXkgd2hpY2ggZ2V0cyByZWZsZWN0ZWQsCisgICAgICAgICMgdGVzdCB0aGUgZGlmZmVyZW5jZXMgb2YgMzIgYW5kIDY0LWJpdCBrZXlzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisgICAgICAgICMgcmVmbGVjdGlvbiBvY2N1cnMgKGllLiB3aGVuIHRoZSBjcmVhdGVkIGtleSBpcyBjbG9zZWQpLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENyZWF0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9BTExfQUNDRVNTIHwgS0VZX1dPVzY0XzMyS0VZKSBhcyBjcmVhdGVkX2tleToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNyZWF0ZWRfa2V5LmhhbmRsZSwgMCkKKworICAgICAgICAgICAgICAgICMgVGhlIGtleSBzaG91bGQgbm93IGJlIGF2YWlsYWJsZSBpbiB0aGUgMzItYml0IGFyZWEKKyAgICAgICAgICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MgfCBLRVlfV09XNjRfMzJLRVkpIGFzIGtleToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuaGFuZGxlLCAwKQorCisgICAgICAgICAgICAgICAgIyBXcml0ZSBhIHZhbHVlIHRvIHdoYXQgY3VycmVudGx5IGlzIG9ubHkgaW4gdGhlIDMyLWJpdCBhcmVhCisgICAgICAgICAgICAgICAgU2V0VmFsdWVFeChjcmVhdGVkX2tleSwgIiIsIDAsIFJFR19TWiwgIjMyS0VZIikKKworICAgICAgICAgICAgICAgICMgVGhlIGtleSBpcyBub3QgcmVmbGVjdGVkIHVudGlsIGNyZWF0ZWRfa2V5IGlzIGNsb3NlZC4KKyAgICAgICAgICAgICAgICAjIFRoZSA2NC1iaXQgdmVyc2lvbiBvZiB0aGUga2V5IHNob3VsZCBub3QgYmUgYXZhaWxhYmxlIHlldC4KKyAgICAgICAgICAgICAgICBvcGVuX2ZhaWwgPSBsYW1iZGE6IE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcGVuX2ZhaWwpCisKKyAgICAgICAgICAgICMgTm93IGV4cGxpY2l0bHkgb3BlbiB0aGUgNjQtYml0IHZlcnNpb24gb2YgdGhlIGtleQorICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MgfCBLRVlfV09XNjRfNjRLRVkpIGFzIGtleToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5oYW5kbGUsIDApCisgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIG9yaWdpbmFsIHZhbHVlIHdlIHNldCBpcyB0aGVyZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjMyS0VZIiwgUXVlcnlWYWx1ZShrZXksICIiKSkKKyAgICAgICAgICAgICAgICAjIFNldCBhIG5ldyB2YWx1ZSwgd2hpY2ggd2lsbCBnZXQgcmVmbGVjdGVkIHRvIDMyLWJpdAorICAgICAgICAgICAgICAgIFNldFZhbHVlRXgoa2V5LCAiIiwgMCwgUkVHX1NaLCAiNjRLRVkiKQorCisgICAgICAgICAgICAjIFJlZmxlY3Rpb24gdXNlcyBhICJsYXN0LXdyaXRlciB3aW5zIHBvbGljeSwgc28gdGhlIHZhbHVlIHdlIHNldAorICAgICAgICAgICAgIyBvbiB0aGUgNjQtYml0IGtleSBzaG91bGQgYmUgdGhlIHNhbWUgb24gMzItYml0CisgICAgICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF8zMktFWSkgYXMga2V5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjY0S0VZIiwgUXVlcnlWYWx1ZShrZXksICIiKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIERlbGV0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBLRVlfV09XNjRfMzJLRVksIDApCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUkVGTEVDVElPTiwgIk9TIGRvZXNuJ3Qgc3VwcG9ydCByZWZsZWN0aW9uIikKKyAgICBkZWYgdGVzdF9kaXNhYmxlX3JlZmxlY3Rpb24oc2VsZik6CisgICAgICAgICMgTWFrZSB1c2Ugb2YgYSBrZXkgd2hpY2ggZ2V0cyByZWRpcmVjdGVkIGFuZCByZWZsZWN0ZWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUyB8IEtFWV9XT1c2NF8zMktFWSkgYXMgY3JlYXRlZF9rZXk6CisgICAgICAgICAgICAgICAgIyBRdWVyeVJlZmxlY3Rpb25LZXkgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUga2V5IGlzIGRpc2FibGVkCisgICAgICAgICAgICAgICAgZGlzYWJsZWQgPSBRdWVyeVJlZmxlY3Rpb25LZXkoY3JlYXRlZF9rZXkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGRpc2FibGVkKSwgYm9vbCkKKyAgICAgICAgICAgICAgICAjIEhLQ1VcU29mdHdhcmVcQ2xhc3NlcyBpcyByZWZsZWN0ZWQgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGlzYWJsZWQpCisKKyAgICAgICAgICAgICAgICBEaXNhYmxlUmVmbGVjdGlvbktleShjcmVhdGVkX2tleSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoUXVlcnlSZWZsZWN0aW9uS2V5KGNyZWF0ZWRfa2V5KSkKKworICAgICAgICAgICAgIyBUaGUga2V5IGlzIG5vdyBjbG9zZWQgYW5kIHdvdWxkIG5vcm1hbGx5IGJlIHJlZmxlY3RlZCB0byB0aGUKKyAgICAgICAgICAgICMgNjQtYml0IGFyZWEsIGJ1dCBsZXQncyBtYWtlIHN1cmUgdGhhdCBkaWRuJ3QgaGFwcGVuLgorICAgICAgICAgICAgb3Blbl9mYWlsID0gbGFtYmRhOiBPcGVuS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3Blbl9mYWlsKQorCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgMzItYml0IGtleSBpcyBhY3R1YWxseSB0aGVyZQorICAgICAgICAgICAgd2l0aCBPcGVuS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzMyS0VZKSBhcyBrZXk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuaGFuZGxlLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRGVsZXRlS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9XT1c2NF8zMktFWSwgMCkKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChXaW5yZWdUZXN0cykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KExvY2FsV2lucmVnVGVzdHMsIFJlbW90ZVdpbnJlZ1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luNjRXaW5yZWdUZXN0cykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0cnk6Ci0gICAgICAgIFdpbnJlZ1Rlc3RzLnJlbW90ZV9uYW1lID0gc3lzLmFyZ3Zbc3lzLmFyZ3YuaW5kZXgoIi0tcmVtb3RlIikrMV0KLSAgICBleGNlcHQgKEluZGV4RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgIGlmIG5vdCBSRU1PVEVfTkFNRToKICAgICAgICAgcHJpbnQgIlJlbW90ZSByZWdpc3RyeSBjYWxscyBjYW4gYmUgdGVzdGVkIHVzaW5nIiwKICAgICAgICAgcHJpbnQgIid0ZXN0X3dpbnJlZy5weSAtLXJlbW90ZSBcXFxcbWFjaGluZV9uYW1lJyIKLSAgICAgICAgV2lucmVnVGVzdHMucmVtb3RlX25hbWUgPSBOb25lCiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkgYi9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CmluZGV4IGRlNDQ0MjIuLjgyMWQ2ODQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQpAQCAtNSwxMiArNSwxMSBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCBvcwogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBjdHlwZXMKIAogd2luc291bmQgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2luc291bmQnKQorY3R5cGVzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2N0eXBlcycpCiBpbXBvcnQgX3dpbnJlZwogCi0KIGRlZiBoYXNfc291bmQoc291bmQpOgogICAgICIiIkZpbmQgb3V0IGlmIGEgcGFydGljdWxhciBldmVudCBpcyBjb25maWd1cmVkIHdpdGggYSBkZWZhdWx0IHNvdW5kIiIiCiAgICAgdHJ5OgpAQCAtMTAzLDkgKzEwMiw4IEBACiAgICAgICAgICAgICAibm9uZSIsIHdpbnNvdW5kLlNORF9BU1lOQyB8IHdpbnNvdW5kLlNORF9NRU1PUlkKICAgICAgICAgKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzX3NvdW5kKCJTeXN0ZW1Bc3RlcmlzayIpLCAiTm8gZGVmYXVsdCBTeXN0ZW1Bc3RlcmlzayIpCiAgICAgZGVmIHRlc3RfYWxpYXNfYXN0ZXJpc2soc2VsZik6Ci0gICAgICAgIGlmIG5vdCBoYXNfc291bmQoIlN5c3RlbUFzdGVyaXNrIik6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CiAgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoJ1N5c3RlbUFzdGVyaXNrJywgd2luc291bmQuU05EX0FMSUFTKQogICAgICAgICBlbHNlOgpAQCAtMTE1LDkgKzExMyw4IEBACiAgICAgICAgICAgICAgICAgJ1N5c3RlbUFzdGVyaXNrJywgd2luc291bmQuU05EX0FMSUFTCiAgICAgICAgICAgICApCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNfc291bmQoIlN5c3RlbUV4Y2xhbWF0aW9uIiksICJObyBkZWZhdWx0IFN5c3RlbUV4Y2xhbWF0aW9uIikKICAgICBkZWYgdGVzdF9hbGlhc19leGNsYW1hdGlvbihzZWxmKToKLSAgICAgICAgaWYgbm90IGhhc19zb3VuZCgiU3lzdGVtRXhjbGFtYXRpb24iKToKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBfaGF2ZV9zb3VuZGNhcmQoKToKICAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCgnU3lzdGVtRXhjbGFtYXRpb24nLCB3aW5zb3VuZC5TTkRfQUxJQVMpCiAgICAgICAgIGVsc2U6CkBAIC0xMjcsOSArMTI0LDggQEAKICAgICAgICAgICAgICAgICAnU3lzdGVtRXhjbGFtYXRpb24nLCB3aW5zb3VuZC5TTkRfQUxJQVMKICAgICAgICAgICAgICkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc19zb3VuZCgiU3lzdGVtRXhpdCIpLCAiTm8gZGVmYXVsdCBTeXN0ZW1FeGl0IikKICAgICBkZWYgdGVzdF9hbGlhc19leGl0KHNlbGYpOgotICAgICAgICBpZiBub3QgaGFzX3NvdW5kKCJTeXN0ZW1FeGl0Iik6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CiAgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoJ1N5c3RlbUV4aXQnLCB3aW5zb3VuZC5TTkRfQUxJQVMpCiAgICAgICAgIGVsc2U6CkBAIC0xMzksOSArMTM1LDggQEAKICAgICAgICAgICAgICAgICAnU3lzdGVtRXhpdCcsIHdpbnNvdW5kLlNORF9BTElBUwogICAgICAgICAgICAgKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzX3NvdW5kKCJTeXN0ZW1IYW5kIiksICJObyBkZWZhdWx0IFN5c3RlbUhhbmQiKQogICAgIGRlZiB0ZXN0X2FsaWFzX2hhbmQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBoYXNfc291bmQoIlN5c3RlbUhhbmQiKToKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBfaGF2ZV9zb3VuZGNhcmQoKToKICAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCgnU3lzdGVtSGFuZCcsIHdpbnNvdW5kLlNORF9BTElBUykKICAgICAgICAgZWxzZToKQEAgLTE1MSw5ICsxNDYsOCBAQAogICAgICAgICAgICAgICAgICdTeXN0ZW1IYW5kJywgd2luc291bmQuU05EX0FMSUFTCiAgICAgICAgICAgICApCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNfc291bmQoIlN5c3RlbVF1ZXN0aW9uIiksICJObyBkZWZhdWx0IFN5c3RlbVF1ZXN0aW9uIikKICAgICBkZWYgdGVzdF9hbGlhc19xdWVzdGlvbihzZWxmKToKLSAgICAgICAgaWYgbm90IGhhc19zb3VuZCgiU3lzdGVtUXVlc3Rpb24iKToKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBfaGF2ZV9zb3VuZGNhcmQoKToKICAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCgnU3lzdGVtUXVlc3Rpb24nLCB3aW5zb3VuZC5TTkRfQUxJQVMpCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpdGgucHkgYi9MaWIvdGVzdC90ZXN0X3dpdGgucHkKaW5kZXggMTM2NGJlZi4uNDk2NDUxODMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2l0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dpdGgucHkKQEAgLTIxMywxMSArMjEzLDE3IEBACiAgICAgZGVmIHJhaXNlVGVzdEV4Y2VwdGlvbihzZWxmKToKICAgICAgICAgcmFpc2Ugc2VsZi5URVNUX0VYQ0VQVElPTgogCi0gICAgZGVmIGFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKHNlbGYsIG1vY2tfbWFuYWdlcik6CisgICAgZGVmIGFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKHNlbGYsIG1vY2tfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX3R5cGU9Tm9uZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX21hbmFnZXIuZW50ZXJfY2FsbGVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobW9ja19tYW5hZ2VyLmV4aXRfY2FsbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfbWFuYWdlci5leGl0X2FyZ3NbMF0sIFJ1bnRpbWVFcnJvcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrX21hbmFnZXIuZXhpdF9hcmdzWzFdLCBzZWxmLlRFU1RfRVhDRVBUSU9OKQorICAgICAgICBpZiBleGNfdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrX21hbmFnZXIuZXhpdF9hcmdzWzFdLCBzZWxmLlRFU1RfRVhDRVBUSU9OKQorICAgICAgICAgICAgZXhjX3R5cGUgPSB0eXBlKHNlbGYuVEVTVF9FWENFUFRJT04pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja19tYW5hZ2VyLmV4aXRfYXJnc1swXSwgZXhjX3R5cGUpCisgICAgICAgICMgVGVzdCB0aGUgX19leGl0X18gYXJndW1lbnRzLiBJc3N1ZSAjNzg1MworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9ja19tYW5hZ2VyLmV4aXRfYXJnc1sxXSwgZXhjX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9ja19tYW5hZ2VyLmV4aXRfYXJnc1syXSwgTm9uZSkKIAogICAgIGRlZiBhc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzV2l0aEVycm9yKHNlbGYsIG1vY2tfZ2VuZXJhdG9yKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfZ2VuZXJhdG9yLnlpZWxkZWQpCkBAIC0yODMsMTUgKzI4OSw2IEBACiAgICAgICAgIHdpdGggTmVzdGVkKG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkpOgogICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIHRlc3RTaW5nbGVBcmdVbmJvdW5kKHNlbGYpOgotICAgICAgICBtb2NrX2NvbnRleHRtYW5hZ2VyID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQotICAgICAgICBtb2NrX25lc3RlZCA9IE1vY2tOZXN0ZWQobW9ja19jb250ZXh0bWFuYWdlcikKLSAgICAgICAgd2l0aCBtb2NrX25lc3RlZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19jb250ZXh0bWFuYWdlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19uZXN0ZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG1vY2tfY29udGV4dG1hbmFnZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG1vY2tfbmVzdGVkKQotCiAgICAgZGVmIHRlc3RTaW5nbGVBcmdCb3VuZFRvTm9uVHVwbGUoc2VsZik6CiAgICAgICAgIG0gPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCiAgICAgICAgICMgVGhpcyB3aWxsIGJpbmQgYWxsIHRoZSBhcmd1bWVudHMgdG8gbmVzdGVkKCkgaW50byBhIHNpbmdsZSBsaXN0CkBAIC0zNjQsNiArMzYxLDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNXaXRoRXJyb3IoY20pCiAgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLnJlc291cmNlKQogCisgICAgZGVmIHRlc3RFeGNlcHRpb25Ob3JtYWxpemVkKHNlbGYpOgorICAgICAgICBjbSA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgZGVmIHNob3VsZFRocm93KCk6CisgICAgICAgICAgICB3aXRoIGNtIGFzIHNlbGYucmVzb3VyY2U6CisgICAgICAgICAgICAgICAgIyBOb3RlIHRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgMSAvLyAwIHByb2R1Y2VzIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICMgdGhhdCBpcyBub3Qgbm9ybWFsaXplZCBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNob3VsZFRocm93KQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKGNtLCBaZXJvRGl2aXNpb25FcnJvcikKKwogICAgIGRlZiB0ZXN0TmVzdGVkU2luZ2xlU3RhdGVtZW50cyhzZWxmKToKICAgICAgICAgbW9ja19hID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQogICAgICAgICBtb2NrX2IgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCkBAIC02NTQsMTIgKzY2MSw4OSBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJaZXJvRGl2aXNpb25FcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCiAKIAorY2xhc3MgTmVzdGVkV2l0aCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBEdW1teShvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9Tm9uZSwgZ29iYmxlPUZhbHNlKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmCisgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIHNlbGYuZ29iYmxlID0gZ29iYmxlCisgICAgICAgICAgICBzZWxmLmVudGVyX2NhbGxlZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmV4aXRfY2FsbGVkID0gRmFsc2UKKworICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5lbnRlcl9jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgorICAgICAgICAgICAgc2VsZi5leGl0X2NhbGxlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuZXhjX2luZm8gPSBleGNfaW5mbworICAgICAgICAgICAgaWYgc2VsZi5nb2JibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGNsYXNzIEluaXRSYWlzZXMob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiByYWlzZSBSdW50aW1lRXJyb3IoKQorCisgICAgY2xhc3MgRW50ZXJSYWlzZXMob2JqZWN0KToKKyAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKTogcmFpc2UgUnVudGltZUVycm9yKCkKKyAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6IHBhc3MKKworICAgIGNsYXNzIEV4aXRSYWlzZXMob2JqZWN0KToKKyAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKTogcGFzcworICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKTogcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgIGRlZiB0ZXN0Tm9FeGNlcHRpb25zKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuRHVtbXkoKSBhcyBhLCBzZWxmLkR1bW15KCkgYXMgYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmVudGVyX2NhbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmVudGVyX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZXhpdF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmV4aXRfY2FsbGVkKQorCisgICAgZGVmIHRlc3RFeGNlcHRpb25JbkV4cHJMaXN0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuRHVtbXkoKSBhcyBhLCBzZWxmLkluaXRSYWlzZXMoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZW50ZXJfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5leGl0X2NhbGxlZCkKKworICAgIGRlZiB0ZXN0RXhjZXB0aW9uSW5FbnRlcihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLkR1bW15KCkgYXMgYSwgc2VsZi5FbnRlclJhaXNlcygpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnYm9keSBvZiBiYWQgd2l0aCBleGVjdXRlZCcpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1J1bnRpbWVFcnJvciBub3QgcmVyYWlzZWQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5lbnRlcl9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmV4aXRfY2FsbGVkKQorCisgICAgZGVmIHRlc3RFeGNlcHRpb25JbkV4aXQoc2VsZik6CisgICAgICAgIGJvZHlfZXhlY3V0ZWQgPSBGYWxzZQorICAgICAgICB3aXRoIHNlbGYuRHVtbXkoZ29iYmxlPVRydWUpIGFzIGEsIHNlbGYuRXhpdFJhaXNlcygpOgorICAgICAgICAgICAgYm9keV9leGVjdXRlZCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZW50ZXJfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5leGl0X2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJvZHlfZXhlY3V0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYS5leGNfaW5mb1swXSwgTm9uZSkKKworICAgIGRlZiB0ZXN0RW50ZXJSZXR1cm5zVHVwbGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5EdW1teSh2YWx1ZT0oMSwyKSkgYXMgKGExLCBhMiksIFwKKyAgICAgICAgICAgICBzZWxmLkR1bW15KHZhbHVlPSgxMCwgMjApKSBhcyAoYjEsIGIyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgYTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGEyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMCwgYjEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIwLCBiMikKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChGYWlsdXJlVGVzdENhc2UsIE5vbmV4Y2VwdGlvbmFsVGVzdENhc2UsCiAgICAgICAgICAgICAgICAgIE5lc3RlZE5vbmV4Y2VwdGlvbmFsVGVzdENhc2UsIEV4Y2VwdGlvbmFsVGVzdENhc2UsCiAgICAgICAgICAgICAgICAgIE5vbkxvY2FsRmxvd0NvbnRyb2xUZXN0Q2FzZSwKICAgICAgICAgICAgICAgICAgQXNzaWdubWVudFRhcmdldFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICBFeGl0U3dhbGxvd3NFeGNlcHRpb25UZXN0Q2FzZSkKKyAgICAgICAgICAgICAgICAgRXhpdFN3YWxsb3dzRXhjZXB0aW9uVGVzdENhc2UsCisgICAgICAgICAgICAgICAgIE5lc3RlZFdpdGgpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd3NnaXJlZi5weSBiL0xpYi90ZXN0L3Rlc3Rfd3NnaXJlZi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDBkNzY1OTUuLjQ1Y2E2MjAKLS0tIGEvTGliL3Rlc3QvdGVzdF93c2dpcmVmLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd3NnaXJlZi5weQpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAgICAgICBzdGFydF9yZXNwb25zZSgiMjAwIE9LIiwgKCdDb250ZW50LVR5cGUnLCd0ZXh0L3BsYWluJykpCiAgICAgICAgICAgICByZXR1cm4gWyJIZWxsbywgd29ybGQhIl0KICAgICAgICAgb3V0LCBlcnIgPSBydW5fYW1vY2sodmFsaWRhdG9yKGJhZF9hcHApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3V0LmVuZHN3aXRoKAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVuZHN3aXRoKAogICAgICAgICAgICAgIkEgc2VydmVyIGVycm9yIG9jY3VycmVkLiAgUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuIgogICAgICAgICApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKApAQCAtMTc5LDE1ICsxNzksMTUgQEAKICAgICAgICAgIyBDaGVjayBkZWZhdWx0aW5nIHdoZW4gZW1wdHkKICAgICAgICAgZW52ID0ge30KICAgICAgICAgdXRpbC5zZXR1cF90ZXN0aW5nX2RlZmF1bHRzKGVudikKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSxTdHJpbmdJTyk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShlbnZba2V5XSxTdHJpbmdJTykpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIFN0cmluZ0lPKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnZba2V5XSwgU3RyaW5nSU8pCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudltrZXldLHZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZba2V5XSwgdmFsdWUpCiAKICAgICAgICAgIyBDaGVjayBleGlzdGluZyB2YWx1ZQogICAgICAgICBlbnYgPSB7a2V5OmFsdH0KICAgICAgICAgdXRpbC5zZXR1cF90ZXN0aW5nX2RlZmF1bHRzKGVudikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGVudltrZXldIGlzIGFsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudltrZXldIGlzIGFsdCkKIAogICAgIGRlZiBjaGVja0Nyb3NzRGVmYXVsdChzZWxmLGtleSx2YWx1ZSwqKmt3KToKICAgICAgICAgdXRpbC5zZXR1cF90ZXN0aW5nX2RlZmF1bHRzKGt3KQpAQCAtMjE0LDE1ICsyMTQsMTUgQEAKICAgICAgICAgY29tcGFyZV9nZW5lcmljX2l0ZXIobWFrZV9pdCxtYXRjaCkKIAogICAgICAgICBpdCA9IG1ha2VfaXQoKQotICAgICAgICBzZWxmLmZhaWxJZihpdC5maWxlbGlrZS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXQuZmlsZWxpa2UuY2xvc2VkKQogCiAgICAgICAgIGZvciBpdGVtIGluIGl0OgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIHNlbGYuZmFpbElmKGl0LmZpbGVsaWtlLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpdC5maWxlbGlrZS5jbG9zZWQpCiAKICAgICAgICAgaXQuY2xvc2UoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXQuZmlsZWxpa2UuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXQuZmlsZWxpa2UuY2xvc2VkKQogCiAKICAgICBkZWYgdGVzdFNpbXBsZVNoaWZ0cyhzZWxmKToKQEAgLTMwNiw2ICszMDYsMTAgQEAKICAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtIiwgU0NSSVBUX05BTUU9Ii9zcGFtIikKICAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtbWl0eS9zcGFtIiwKICAgICAgICAgICAgIFNDUklQVF9OQU1FPSIvc3BhbW1pdHkiLCBQQVRIX0lORk89Ii9zcGFtIikKKyAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtbWl0eS9zcGFtO2hhbSIsCisgICAgICAgICAgICBTQ1JJUFRfTkFNRT0iL3NwYW1taXR5IiwgUEFUSF9JTkZPPSIvc3BhbTtoYW0iKQorICAgICAgICBzZWxmLmNoZWNrUmVxVVJJKCJodHRwOi8vMTI3LjAuMC4xL3NwYW1taXR5L3NwYW07Y29va2llPTEyMzQsNTY3OCIsCisgICAgICAgICAgICBTQ1JJUFRfTkFNRT0iL3NwYW1taXR5IiwgUEFUSF9JTkZPPSIvc3BhbTtjb29raWU9MTIzNCw1Njc4IikKICAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtbWl0eS9zcGFtP3NheT1uaSIsCiAgICAgICAgICAgICBTQ1JJUFRfTkFNRT0iL3NwYW1taXR5IiwgUEFUSF9JTkZPPSIvc3BhbSIsUVVFUllfU1RSSU5HPSJzYXk9bmkiKQogICAgICAgICBzZWxmLmNoZWNrUmVxVVJJKCJodHRwOi8vMTI3LjAuMC4xL3NwYW1taXR5L3NwYW0iLCAwLApAQCAtMzIwLDE0ICszMjQsMTQgQEAKICAgICAgICAgICAgICJURSBUcmFpbGVycyBUcmFuc2Zlci1FbmNvZGluZyBVcGdyYWRlIgogICAgICAgICApLnNwbGl0KCk6CiAgICAgICAgICAgICBmb3IgYWx0IGluIGhvcCwgaG9wLnRpdGxlKCksIGhvcC51cHBlcigpLCBob3AubG93ZXIoKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModXRpbC5pc19ob3BfYnlfaG9wKGFsdCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHV0aWwuaXNfaG9wX2J5X2hvcChhbHQpKQogCiAgICAgICAgICMgTm90IGNvbXByZWhlbnNpdmUsIGp1c3QgYSBmZXcgcmFuZG9tIGhlYWRlciBuYW1lcwogICAgICAgICBmb3IgaG9wIGluICgKICAgICAgICAgICAgICJBY2NlcHQgQ2FjaGUtQ29udHJvbCBEYXRlIFByYWdtYSBUcmFpbGVyIFZpYSBXYXJuaW5nIgogICAgICAgICApLnNwbGl0KCk6CiAgICAgICAgICAgICBmb3IgYWx0IGluIGhvcCwgaG9wLnRpdGxlKCksIGhvcC51cHBlcigpLCBob3AubG93ZXIoKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZih1dGlsLmlzX2hvcF9ieV9ob3AoYWx0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHV0aWwuaXNfaG9wX2J5X2hvcChhbHQpKQogCiBjbGFzcyBIZWFkZXJUZXN0cyhUZXN0Q2FzZSk6CiAKQEAgLTMzOCwxNyArMzQyLDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSGVhZGVycyh0ZXN0WzpdKS5rZXlzKCksIFsneCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEhlYWRlcnModGVzdFs6XSkudmFsdWVzKCksIFsneSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEhlYWRlcnModGVzdFs6XSkuaXRlbXMoKSwgdGVzdCkKLSAgICAgICAgc2VsZi5mYWlsSWYoSGVhZGVycyh0ZXN0KS5pdGVtcygpIGlzIHRlc3QpICAjIG11c3QgYmUgY29weSEKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShIZWFkZXJzKHRlc3QpLml0ZW1zKCkgaXMgdGVzdCkgICMgbXVzdCBiZSBjb3B5IQogCiAgICAgICAgIGg9SGVhZGVycyhbXSkKICAgICAgICAgZGVsIGhbJ2ZvbyddICAgIyBzaG91bGQgbm90IHJhaXNlIGFuIGVycm9yCiAKICAgICAgICAgaFsnRm9vJ10gPSAnYmFyJwogICAgICAgICBmb3IgbSBpbiBoLmhhc19rZXksIGguX19jb250YWluc19fLCBoLmdldCwgaC5nZXRfYWxsLCBoLl9fZ2V0aXRlbV9fOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG0oJ2ZvbycpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG0oJ0ZvbycpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG0oJ0ZPTycpKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYobSgnYmFyJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSgnZm9vJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSgnRm9vJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSgnRk9PJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0oJ2JhcicpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaFsnZm9vJ10sJ2JhcicpCiAgICAgICAgIGhbJ2ZvbyddID0gJ2JheicKQEAgLTQzNSw3ICs0MzksNyBAQAogICAgICAgICAgICAgaWYgayBub3QgaW4gZW1wdHk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZba10sdikKICAgICAgICAgZm9yIGssdiBpbiBlbXB0eS5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGsgaW4gZW52KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBlbnYpCiAKICAgICBkZWYgdGVzdEVudmlyb24oc2VsZik6CiAgICAgICAgIGggPSBUZXN0SGFuZGxlcihYPSJZIikKQEAgLTQ0OCw3ICs0NTIsNyBAQAogICAgICAgICBoID0gQmFzZUNHSUhhbmRsZXIoTm9uZSxOb25lLE5vbmUse30pCiAgICAgICAgIGguc2V0dXBfZW52aXJvbigpCiAgICAgICAgIGZvciBrZXkgaW4gJ3dzZ2kudXJsX3NjaGVtZScsICd3c2dpLmlucHV0JywgJ3dzZ2kuZXJyb3JzJzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrZXkgaW4gaC5lbnZpcm9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIGguZW52aXJvbikKIAogICAgIGRlZiB0ZXN0U2NoZW1lKHNlbGYpOgogICAgICAgICBoPVRlc3RIYW5kbGVyKEhUVFBTPSJvbiIpOyBoLnNldHVwX2Vudmlyb24oKQpAQCAtNDc3LDYgKzQ4MSwxMSBAQAogICAgICAgICAgICAgcygnMjAwIE9LJyxbXSkoZVsnd3NnaS51cmxfc2NoZW1lJ10pCiAgICAgICAgICAgICByZXR1cm4gW10KIAorICAgICAgICBkZWYgdHJpdmlhbF9hcHA0KGUscyk6CisgICAgICAgICAgICAjIFNpbXVsYXRlIGEgcmVzcG9uc2UgdG8gYSBIRUFEIHJlcXVlc3QKKyAgICAgICAgICAgIHMoJzIwMCBPSycsWygnQ29udGVudC1MZW5ndGgnLCAnMTIzNDUnKV0pCisgICAgICAgICAgICByZXR1cm4gW10KKwogICAgICAgICBoID0gVGVzdEhhbmRsZXIoKQogICAgICAgICBoLnJ1bih0cml2aWFsX2FwcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zdGRvdXQuZ2V0dmFsdWUoKSwKQEAgLTQ5MywxMCArNTAyLDEyIEBACiAgICAgICAgICAgICAiaHR0cCIpCiAKIAotCi0KLQotCisgICAgICAgIGggPSBUZXN0SGFuZGxlcigpCisgICAgICAgIGgucnVuKHRyaXZpYWxfYXBwNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgYidTdGF0dXM6IDIwMCBPS1xyXG4nCisgICAgICAgICAgICBiJ0NvbnRlbnQtTGVuZ3RoOiAxMjM0NVxyXG4nCisgICAgICAgICAgICBiJ1xyXG4nKQogCiAgICAgZGVmIHRlc3RCYXNpY0Vycm9yT3V0cHV0KHNlbGYpOgogCkBAIC01MjMsOCArNTM0LDcgQEAKICAgICAgICAgICAgICJDb250ZW50LUxlbmd0aDogJWRcclxuIgogICAgICAgICAgICAgIlxyXG4lcyIgJSAoaC5lcnJvcl9zdGF0dXMsbGVuKGguZXJyb3JfYm9keSksaC5lcnJvcl9ib2R5KSkKIAotICAgICAgICBzZWxmLmFzc2VydFRydWUoIkFzc2VydGlvbkVycm9yIiBpbiBoLnN0ZGVyci5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIkFzc2VydGlvbkVycm9yIG5vdCBpbiBzdGRlcnIiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGguc3RkZXJyLmdldHZhbHVlKCkuZmluZCgiQXNzZXJ0aW9uRXJyb3IiKSwgLTEpCiAKICAgICBkZWYgdGVzdEVycm9yQWZ0ZXJPdXRwdXQoc2VsZik6CiAgICAgICAgIE1TRyA9ICJTb21lIG91dHB1dCBoYXMgYmVlbiBzZW50IgpAQCAtNTM3LDggKzU0Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zdGRvdXQuZ2V0dmFsdWUoKSwKICAgICAgICAgICAgICJTdGF0dXM6IDIwMCBPS1xyXG4iCiAgICAgICAgICAgICAiXHJcbiIrTVNHKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIkFzc2VydGlvbkVycm9yIiBpbiBoLnN0ZGVyci5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIkFzc2VydGlvbkVycm9yIG5vdCBpbiBzdGRlcnIiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGguc3RkZXJyLmdldHZhbHVlKCkuZmluZCgiQXNzZXJ0aW9uRXJyb3IiKSwgLTEpCiAKIAogICAgIGRlZiB0ZXN0SGVhZGVyRm9ybWF0cyhzZWxmKToKQEAgLTU3Nyw3ICs1ODYsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBwcm90bz09IkhUVFAvMC45IjoKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zdGRvdXQuZ2V0dmFsdWUoKSwiIikKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5tYXRjaChzdGRwYXQlKHZlcnNpb24sc3cpLCBoLnN0ZG91dC5nZXR2YWx1ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RkcGF0JSh2ZXJzaW9uLHN3KSwgaC5zdGRvdXQuZ2V0dmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5IGIvTGliL3Rlc3QvdGVzdF94ZHJsaWIucHkKaW5kZXggOGZjODhhNS4uYWI2ZTQ2MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94ZHJsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94ZHJsaWIucHkKQEAgLTMwLDE1ICszMCwxNSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAudW5wYWNrX2ludCgpLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cC51bnBhY2tfdWludCgpLCA5KQotICAgICAgICBzZWxmLmFzc2VydF8odXAudW5wYWNrX2Jvb2woKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXAudW5wYWNrX2Jvb2woKSBpcyBUcnVlKQogCiAgICAgICAgICMgcmVtZW1iZXIgcG9zaXRpb24KICAgICAgICAgcG9zID0gdXAuZ2V0X3Bvc2l0aW9uKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVwLnVucGFja19ib29sKCkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cC51bnBhY2tfYm9vbCgpIGlzIEZhbHNlKQogCiAgICAgICAgICMgcmV3aW5kIGFuZCB1bnBhY2sgYWdhaW4KICAgICAgICAgdXAuc2V0X3Bvc2l0aW9uKHBvcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVwLnVucGFja19ib29sKCkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cC51bnBhY2tfYm9vbCgpIGlzIEZhbHNlKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAudW5wYWNrX3VoeXBlcigpLCA0NUwpCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwodXAudW5wYWNrX2Zsb2F0KCksIDEuOSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKaW5kZXggMmUyNGVkMS4uMjZlOGVhYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKQEAgLTEsMjIgKzEsNDcgQEAKICMgeG1sLmV0cmVlIHRlc3QuICBUaGlzIGZpbGUgY29udGFpbnMgZW5vdWdoIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGF0Ci0jIGFsbCBpbmNsdWRlZCBjb21wb25lbnRzIHdvcmsgYXMgdGhleSBzaG91bGQuICBGb3IgYSBtb3JlIGV4dGVuc2l2ZQotIyB0ZXN0IHN1aXRlLCBzZWUgdGhlIHNlbGZ0ZXN0IHNjcmlwdCBpbiB0aGUgRWxlbWVudFRyZWUgZGlzdHJpYnV0aW9uLgorIyBhbGwgaW5jbHVkZWQgY29tcG9uZW50cyB3b3JrIGFzIHRoZXkgc2hvdWxkLgorIyBMYXJnZSBwYXJ0cyBhcmUgZXh0cmFjdGVkIGZyb20gdGhlIHVwc3RyZWFtIHRlc3Qgc3VpdGUuCiAKLWltcG9ydCBkb2N0ZXN0CisjIElNUE9SVEFOVDogdGhlIHNhbWUgZG9jdGVzdHMgYXJlIHJ1biBmcm9tICJ0ZXN0X3htbF9ldHJlZV9jIiBpbgorIyBvcmRlciB0byBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgQyBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlCisjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbi4KKyMKKyMgRm9yIHRoaXMgcHVycG9zZSwgdGhlIG1vZHVsZS1sZXZlbCAiRVQiIHN5bWJvbCBpcyB0ZW1wb3JhcmlseQorIyBtb25rZXktcGF0Y2hlZCB3aGVuIHJ1bm5pbmcgdGhlICJ0ZXN0X3htbF9ldHJlZV9jIiB0ZXN0IHN1aXRlLgorIyBEb24ndCByZS1pbXBvcnQgInhtbC5ldHJlZS5FbGVtZW50VHJlZSIgbW9kdWxlIGluIHRoZSBkb2NzdHJpbmcsCisjIGV4Y2VwdCBpZiB0aGUgdGVzdCBpcyBzcGVjaWZpYyB0byB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uLgorCiBpbXBvcnQgc3lzCitpbXBvcnQgY2dpCiAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZQogCi1TQU1QTEVfWE1MID0gIiIiCitmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUgYXMgRVQKKworU0lNUExFX1hNTEZJTEUgPSBmaW5kZmlsZSgic2ltcGxlLnhtbCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQorU0lNUExFX05TX1hNTEZJTEUgPSBmaW5kZmlsZSgic2ltcGxlLW5zLnhtbCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQorCitTQU1QTEVfWE1MID0gIiIiXAogPGJvZHk+Ci0gIDx0YWc+dGV4dDwvdGFnPgotICA8dGFnIC8+CisgIDx0YWcgY2xhc3M9J2EnPnRleHQ8L3RhZz4KKyAgPHRhZyBjbGFzcz0nYicgLz4KICAgPHNlY3Rpb24+Ci0gICAgPHRhZz5zdWJ0ZXh0PC90YWc+CisgICAgPHRhZyBjbGFzcz0nYicgaWQ9J2lubmVyJz5zdWJ0ZXh0PC90YWc+CiAgIDwvc2VjdGlvbj4KIDwvYm9keT4KICIiIgogCitTQU1QTEVfU0VDVElPTiA9ICIiIlwKKzxzZWN0aW9uPgorICA8dGFnIGNsYXNzPSdiJyBpZD0naW5uZXInPnN1YnRleHQ8L3RhZz4KKyAgPG5leHR0YWcgLz4KKyAgPG5leHRzZWN0aW9uPgorICAgIDx0YWcgLz4KKyAgPC9uZXh0c2VjdGlvbj4KKzwvc2VjdGlvbj4KKyIiIgorCiBTQU1QTEVfWE1MX05TID0gIiIiCiA8Ym9keSB4bWxucz0iaHR0cDovL2VmZmJvdC5vcmcvbnMiPgogICA8dGFnPnRleHQ8L3RhZz4KQEAgLTI3LDYgKzUyLDcgQEAKIDwvYm9keT4KICIiIgogCisKIGRlZiBzYW5pdHkoKToKICAgICAiIiIKICAgICBJbXBvcnQgc2FuaXR5LgpAQCAtNDAsMzggKzY2LDk5IEBACiAgICAgaWYgbm90IGhhc2F0dHIobWV0aG9kLCAnX19jYWxsX18nKToKICAgICAgICAgcHJpbnQgbWV0aG9kLCAibm90IGNhbGxhYmxlIgogCi1kZWYgc2VyaWFsaXplKEVULCBlbGVtLCBlbmNvZGluZz1Ob25lKToKK2RlZiBzZXJpYWxpemUoZWxlbSwgdG9fc3RyaW5nPVRydWUsICoqb3B0aW9ucyk6CiAgICAgaW1wb3J0IFN0cmluZ0lPCiAgICAgZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAgICB0cmVlID0gRVQuRWxlbWVudFRyZWUoZWxlbSkKLSAgICBpZiBlbmNvZGluZzoKLSAgICAgICAgdHJlZS53cml0ZShmaWxlLCBlbmNvZGluZykKKyAgICB0cmVlLndyaXRlKGZpbGUsICoqb3B0aW9ucykKKyAgICBpZiB0b19zdHJpbmc6CisgICAgICAgIHJldHVybiBmaWxlLmdldHZhbHVlKCkKICAgICBlbHNlOgotICAgICAgICB0cmVlLndyaXRlKGZpbGUpCi0gICAgcmV0dXJuIGZpbGUuZ2V0dmFsdWUoKQorICAgICAgICBmaWxlLnNlZWsoMCkKKyAgICAgICAgcmV0dXJuIGZpbGUKIAogZGVmIHN1bW1hcml6ZShlbGVtKToKKyAgICBpZiBlbGVtLnRhZyA9PSBFVC5Db21tZW50OgorICAgICAgICByZXR1cm4gIjxDb21tZW50PiIKICAgICByZXR1cm4gZWxlbS50YWcKIAogZGVmIHN1bW1hcml6ZV9saXN0KHNlcSk6Ci0gICAgcmV0dXJuIG1hcChzdW1tYXJpemUsIHNlcSkKKyAgICByZXR1cm4gW3N1bW1hcml6ZShlbGVtKSBmb3IgZWxlbSBpbiBzZXFdCisKK2RlZiBub3JtYWxpemVfY3JsZih0cmVlKToKKyAgICBmb3IgZWxlbSBpbiB0cmVlLml0ZXIoKToKKyAgICAgICAgaWYgZWxlbS50ZXh0OgorICAgICAgICAgICAgZWxlbS50ZXh0ID0gZWxlbS50ZXh0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKQorICAgICAgICBpZiBlbGVtLnRhaWw6CisgICAgICAgICAgICBlbGVtLnRhaWwgPSBlbGVtLnRhaWwucmVwbGFjZSgiXHJcbiIsICJcbiIpCisKK2RlZiBjaGVja19zdHJpbmcoc3RyaW5nKToKKyAgICBsZW4oc3RyaW5nKQorICAgIGZvciBjaGFyIGluIHN0cmluZzoKKyAgICAgICAgaWYgbGVuKGNoYXIpICE9IDE6CisgICAgICAgICAgICBwcmludCAiZXhwZWN0ZWQgb25lLWNoYXJhY3RlciBzdHJpbmcsIGdvdCAlciIgJSBjaGFyCisgICAgbmV3X3N0cmluZyA9IHN0cmluZyArICIiCisgICAgbmV3X3N0cmluZyA9IHN0cmluZyArICIgIgorICAgIHN0cmluZ1s6MF0KKworZGVmIGNoZWNrX21hcHBpbmcobWFwcGluZyk6CisgICAgbGVuKG1hcHBpbmcpCisgICAga2V5cyA9IG1hcHBpbmcua2V5cygpCisgICAgaXRlbXMgPSBtYXBwaW5nLml0ZW1zKCkKKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIGl0ZW0gPSBtYXBwaW5nW2tleV0KKyAgICBtYXBwaW5nWyJrZXkiXSA9ICJ2YWx1ZSIKKyAgICBpZiBtYXBwaW5nWyJrZXkiXSAhPSAidmFsdWUiOgorICAgICAgICBwcmludCAiZXhwZWN0ZWQgdmFsdWUgc3RyaW5nLCBnb3QgJXIiICUgbWFwcGluZ1sia2V5Il0KKworZGVmIGNoZWNrX2VsZW1lbnQoZWxlbWVudCk6CisgICAgaWYgbm90IEVULmlzZWxlbWVudChlbGVtZW50KToKKyAgICAgICAgcHJpbnQgIm5vdCBhbiBlbGVtZW50IgorICAgIGlmIG5vdCBoYXNhdHRyKGVsZW1lbnQsICJ0YWciKToKKyAgICAgICAgcHJpbnQgIm5vIHRhZyBtZW1iZXIiCisgICAgaWYgbm90IGhhc2F0dHIoZWxlbWVudCwgImF0dHJpYiIpOgorICAgICAgICBwcmludCAibm8gYXR0cmliIG1lbWJlciIKKyAgICBpZiBub3QgaGFzYXR0cihlbGVtZW50LCAidGV4dCIpOgorICAgICAgICBwcmludCAibm8gdGV4dCBtZW1iZXIiCisgICAgaWYgbm90IGhhc2F0dHIoZWxlbWVudCwgInRhaWwiKToKKyAgICAgICAgcHJpbnQgIm5vIHRhaWwgbWVtYmVyIgorCisgICAgY2hlY2tfc3RyaW5nKGVsZW1lbnQudGFnKQorICAgIGNoZWNrX21hcHBpbmcoZWxlbWVudC5hdHRyaWIpCisgICAgaWYgZWxlbWVudC50ZXh0IGlzIG5vdCBOb25lOgorICAgICAgICBjaGVja19zdHJpbmcoZWxlbWVudC50ZXh0KQorICAgIGlmIGVsZW1lbnQudGFpbCBpcyBub3QgTm9uZToKKyAgICAgICAgY2hlY2tfc3RyaW5nKGVsZW1lbnQudGFpbCkKKyAgICBmb3IgZWxlbSBpbiBlbGVtZW50OgorICAgICAgICBjaGVja19lbGVtZW50KGVsZW0pCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZWxlbWVudCB0cmVlIHRlc3RzCiAKIGRlZiBpbnRlcmZhY2UoKToKLSAgICAiIiIKKyAgICByIiIiCiAgICAgVGVzdCBlbGVtZW50IHRyZWUgaW50ZXJmYWNlLgogCi0gICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAotCi0gICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciLCBrZXk9InZhbHVlIikKKyAgICA+Pj4gZWxlbWVudCA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IGNoZWNrX2VsZW1lbnQoZWxlbWVudCkKICAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpCisgICAgPj4+IGNoZWNrX2VsZW1lbnQodHJlZS5nZXRyb290KCkpCisKKyAgICA+Pj4gZWxlbWVudCA9IEVULkVsZW1lbnQoInRceGU0ZyIsIGtleT0idmFsdWUiKQorICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZWxlbWVudCkKKyAgICA+Pj4gcmVwcihlbGVtZW50KSAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgIjxFbGVtZW50ICd0XFx4ZTRnJyBhdCAweC4uLj4iCisgICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciLCBrZXk9InZhbHVlIikKIAogICAgIE1ha2Ugc3VyZSBhbGwgc3RhbmRhcmQgZWxlbWVudCBtZXRob2RzIGV4aXN0LgogCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmFwcGVuZCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZXh0ZW5kKQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pbnNlcnQpCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LnJlbW92ZSkKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0Y2hpbGRyZW4pCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmZpbmQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXJmaW5kKQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5maW5kYWxsKQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5maW5kdGV4dCkKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuY2xlYXIpCkBAIC03OSwzOCArMTY2LDEzNCBAQAogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5zZXQpCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmtleXMpCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZW1zKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVydGV4dCkKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0aXRlcmF0b3IpCiAKKyAgICBUaGVzZSBtZXRob2RzIHJldHVybiBhbiBpdGVyYWJsZS4gU2VlIGJ1ZyA2NDcyLgorCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXIoInRhZyIpLm5leHQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXJmaW5kKCJ0YWciKS5uZXh0KQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCgiKiIpLm5leHQpCisgICAgPj4+IGNoZWNrX21ldGhvZCh0cmVlLml0ZXIoInRhZyIpLm5leHQpCisgICAgPj4+IGNoZWNrX21ldGhvZCh0cmVlLml0ZXJmaW5kKCJ0YWciKS5uZXh0KQorICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyZmluZCgiKiIpLm5leHQpCisKKyAgICBUaGVzZSBhbGlhc2VzIGFyZSBwcm92aWRlZDoKKworICAgID4+PiBhc3NlcnQgRVQuWE1MID09IEVULmZyb21zdHJpbmcKKyAgICA+Pj4gYXNzZXJ0IEVULlBJID09IEVULlByb2Nlc3NpbmdJbnN0cnVjdGlvbgorICAgID4+PiBhc3NlcnQgRVQuWE1MUGFyc2VyID09IEVULlhNTFRyZWVCdWlsZGVyCisgICAgIiIiCisKK2RlZiBzaW1wbGVvcHMoKToKKyAgICAiIiIKICAgICBCYXNpYyBtZXRob2Qgc2FuaXR5IGNoZWNrcy4KIAotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgMQorICAgID4+PiBlbGVtID0gRVQuWE1MKCI8Ym9keT48dGFnLz48L2JvZHk+IikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzxib2R5Pjx0YWcgLz48L2JvZHk+JworICAgID4+PiBlID0gRVQuRWxlbWVudCgidGFnMiIpCisgICAgPj4+IGVsZW0uYXBwZW5kKGUpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8Ym9keT48dGFnIC8+PHRhZzIgLz48L2JvZHk+JworICAgID4+PiBlbGVtLnJlbW92ZShlKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZyAvPjwvYm9keT4nCisgICAgPj4+IGVsZW0uaW5zZXJ0KDAsIGUpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8Ym9keT48dGFnMiAvPjx0YWcgLz48L2JvZHk+JworICAgID4+PiBlbGVtLnJlbW92ZShlKQorICAgID4+PiBlbGVtLmV4dGVuZChbZV0pCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8Ym9keT48dGFnIC8+PHRhZzIgLz48L2JvZHk+JworICAgID4+PiBlbGVtLnJlbW92ZShlKQorCisgICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciLCBrZXk9InZhbHVlIikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgMQogICAgICc8dGFnIGtleT0idmFsdWUiIC8+JwogICAgID4+PiBzdWJlbGVtZW50ID0gRVQuRWxlbWVudCgic3VidGFnIikKICAgICA+Pj4gZWxlbWVudC5hcHBlbmQoc3ViZWxlbWVudCkKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtZW50KSAjICAyCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDIKICAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PC90YWc+JwogICAgID4+PiBlbGVtZW50Lmluc2VydCgwLCBzdWJlbGVtZW50KQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgMworICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyAzCiAgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjxzdWJ0YWcgLz48L3RhZz4nCiAgICAgPj4+IGVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyA0CisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDQKICAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PC90YWc+JwogICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgNQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA1CiAgICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCiAgICAgPj4+IGVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgIFZhbHVlRXJyb3I6IGxpc3QucmVtb3ZlKHgpOiB4IG5vdCBpbiBsaXN0Ci0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyA2CisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDYKICAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKKyAgICA+Pj4gZWxlbWVudFswOjBdID0gW3N1YmVsZW1lbnQsIHN1YmVsZW1lbnQsIHN1YmVsZW1lbnRdCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50WzFdKQorICAgICc8c3VidGFnIC8+JworICAgID4+PiBlbGVtZW50WzE6OV0gPT0gW2VsZW1lbnRbMV0sIGVsZW1lbnRbMl1dCisgICAgVHJ1ZQorICAgID4+PiBlbGVtZW50Wzo5OjJdID09IFtlbGVtZW50WzBdLCBlbGVtZW50WzJdXQorICAgIFRydWUKKyAgICA+Pj4gZGVsIGVsZW1lbnRbMToyXQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkKKyAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PHN1YnRhZyAvPjwvdGFnPicKKyAgICAiIiIKKworZGVmIGNkYXRhKCk6CisgICAgIiIiCisgICAgVGVzdCBDREFUQSBoYW5kbGluZyAoZXRjKS4KKworICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCI8dGFnPmhlbGxvPC90YWc+IikpCisgICAgJzx0YWc+aGVsbG88L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShFVC5YTUwoIjx0YWc+JiMxMDQ7JiMxMDE7JiMxMDg7JiMxMDg7JiMxMTE7PC90YWc+IikpCisgICAgJzx0YWc+aGVsbG88L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShFVC5YTUwoIjx0YWc+PCFbQ0RBVEFbaGVsbG9dXT48L3RhZz4iKSkKKyAgICAnPHRhZz5oZWxsbzwvdGFnPicKKyAgICAiIiIKKworIyBPbmx5IHdpdGggUHl0aG9uIGltcGxlbWVudGF0aW9uCitkZWYgc2ltcGxlZmluZCgpOgorICAgICIiIgorICAgIFRlc3QgZmluZCBtZXRob2RzIHVzaW5nIHRoZSBlbGVtZW50cGF0aCBmYWxsYmFjay4KKworICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKKworICAgID4+PiBDdXJyZW50RWxlbWVudFBhdGggPSBFbGVtZW50VHJlZS5FbGVtZW50UGF0aAorICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50UGF0aCA9IEVsZW1lbnRUcmVlLl9TaW1wbGVFbGVtZW50UGF0aCgpCisgICAgPj4+IGVsZW0gPSBFbGVtZW50VHJlZS5YTUwoU0FNUExFX1hNTCkKKyAgICA+Pj4gZWxlbS5maW5kKCJ0YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJ0YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0YWciKQorICAgICd0ZXh0JworICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciKQorICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciLCAiZGVmYXVsdCIpCisgICAgJ2RlZmF1bHQnCisgICAgPj4+IEVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0YWciKQorICAgICd0ZXh0JworICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRhZyIpKQorICAgIFsndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnIikpCisgICAgWyd0YWcnLCAndGFnJywgJ3RhZyddCisKKyAgICBQYXRoIHN5bnRheCBkb2Vzbid0IHdvcmsgaW4gdGhpcyBjYXNlLgorCisgICAgPj4+IGVsZW0uZmluZCgic2VjdGlvbi90YWciKQorICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJzZWN0aW9uL3RhZyIpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi90YWciKSkKKyAgICBbXQorCisgICAgPj4+IEVsZW1lbnRUcmVlLkVsZW1lbnRQYXRoID0gQ3VycmVudEVsZW1lbnRQYXRoCiAgICAgIiIiCiAKIGRlZiBmaW5kKCk6CiAgICAgIiIiCiAgICAgVGVzdCBmaW5kIG1ldGhvZHMgKGluY2x1ZGluZyB4cGF0aCBzeW50YXgpLgogCi0gICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAotCiAgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKICAgICA+Pj4gZWxlbS5maW5kKCJ0YWciKS50YWcKICAgICAndGFnJwpAQCAtMTE4LDM5ICszMDEsNjcgQEAKICAgICAndGFnJwogICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCiAgICAgJ3RhZycKKyAgICA+Pj4gZWxlbS5maW5kKCIuL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoIi4vdGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgiL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IGVsZW1bMl0gPSBFVC5YTUwoU0FNUExFX1NFQ1RJT04pCisgICAgPj4+IGVsZW0uZmluZCgic2VjdGlvbi9uZXh0dGFnIikudGFnCisgICAgJ25leHR0YWcnCiAgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCiAgICAgJ3RhZycKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidG9nIikKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidG9nL2ZvbyIpCiAgICAgPj4+IGVsZW0uZmluZHRleHQoInRhZyIpCiAgICAgJ3RleHQnCisgICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vbmV4dHRhZyIpCisgICAgJycKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi9uZXh0dGFnIiwgImRlZmF1bHQiKQorICAgICcnCiAgICAgPj4+IGVsZW0uZmluZHRleHQoInRvZyIpCiAgICAgPj4+IGVsZW0uZmluZHRleHQoInRvZyIsICJkZWZhdWx0IikKICAgICAnZGVmYXVsdCcKICAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInRhZyIpCiAgICAgJ3RleHQnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0b2cvZm9vIikKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInRvZy9mb28iLCAiZGVmYXVsdCIpCisgICAgJ2RlZmF1bHQnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCIuL3RhZyIpCisgICAgJ3RleHQnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCIvdGFnIikKKyAgICAndGV4dCcKICAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi90YWciKQogICAgICdzdWJ0ZXh0JwogICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgic2VjdGlvbi90YWciKQogICAgICdzdWJ0ZXh0JworICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4iKSkKKyAgICBbJ2JvZHknXQogICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRhZyIpKQogICAgIFsndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidG9nIikpCisgICAgW10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0b2cvZm9vIikpCisgICAgW10KICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqIikpCiAgICAgWyd0YWcnLCAndGFnJywgJ3NlY3Rpb24nXQogICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQorICAgIFsndGFnJywgJ3RhZycsICd0YWcnLCAndGFnJ10KICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uL3RhZyIpKQogICAgIFsndGFnJ10KICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy90YWciKSkKLSAgICBbJ3RhZyddCisgICAgWyd0YWcnLCAndGFnJ10KICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLyoiKSkKLSAgICBbJ3RhZyddCisgICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbiddCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8vKiIpKQotICAgIFsndGFnJ10KKyAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJywgJ3RhZyddCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8uLy8qIikpCi0gICAgWyd0YWcnXQorICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nLCAndGFnJ10KICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqLyoiKSkKLSAgICBbJ3RhZyddCisgICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbiddCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8vKiIpKQotICAgIFsndGFnJ10KKyAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJywgJ3RhZyddCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi90YWciKSkKICAgICBbJ3RhZyddCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8uL3RhZyIpKQpAQCAtMTU4LDEzICszNjksNDAgQEAKICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuL3RhZyIpKQogICAgIFsndGFnJywgJ3RhZyddCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnIikpCi0gICAgWyd0YWcnLCAndGFnJywgJ3RhZyddCisgICAgWyd0YWcnLCAndGFnJywgJ3RhZycsICd0YWcnXQogICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vLi90YWciKSkKICAgICBbJ3RhZycsICd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kYWxsKCIvdGFnIikpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnW0BjbGFzc10iKSkKKyAgICBbJ3RhZycsICd0YWcnLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWdbQGNsYXNzPSdhJ10iKSkKKyAgICBbJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnW0BjbGFzcz0nYiddIikpCisgICAgWyd0YWcnLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWdbQGlkXSIpKQorICAgIFsndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy9zZWN0aW9uW3RhZ10iKSkKKyAgICBbJ3NlY3Rpb24nXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3NlY3Rpb25bZWxlbWVudF0iKSkKKyAgICBbXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4uL3RhZyIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8uLi90YWciKSkKICAgICBbJ3RhZycsICd0YWcnXQogICAgID4+PiBzdW1tYXJpemVfbGlzdChFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kYWxsKCIuL3RhZyIpKQogICAgIFsndGFnJywgJ3RhZyddCisKKyAgICBGb2xsb3dpbmcgZXhhbXBsZSBpcyBpbnZhbGlkIGluIDEuMi4KKyAgICBBIGxlYWRpbmcgJyonIGlzIGFzc3VtZWQgaW4gMS4zLgorCisgICAgPj4+IGVsZW0uZmluZGFsbCgic2VjdGlvbi8vIikgPT0gZWxlbS5maW5kYWxsKCJzZWN0aW9uLy8qIikKKyAgICBUcnVlCisKKyAgICBFVCdzIFBhdGggbW9kdWxlIGhhbmRsZXMgdGhpcyBjYXNlIGluY29ycmVjdGx5OyB0aGlzIGdpdmVzCisgICAgYSB3YXJuaW5nIGluIDEuMywgYW5kIHRoZSBiZWhhdmlvdXIgd2lsbCBiZSBtb2RpZmllZCBpbiAxLjQuCisKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZGFsbCgiL3RhZyIpKQorICAgIFsndGFnJywgJ3RhZyddCisKICAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MX05TKQogICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRhZyIpKQogICAgIFtdCkBAIC0xNzQsMjIgKzQxMiwyMzAgQEAKICAgICBbJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZycsICd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJ10KICAgICAiIiIKIAorZGVmIGZpbGVfaW5pdCgpOgorICAgICIiIgorICAgID4+PiBpbXBvcnQgU3RyaW5nSU8KKworICAgID4+PiBzdHJpbmdmaWxlID0gU3RyaW5nSU8uU3RyaW5nSU8oU0FNUExFX1hNTCkKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGZpbGU9c3RyaW5nZmlsZSkKKyAgICA+Pj4gdHJlZS5maW5kKCJ0YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiB0cmVlLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCisgICAgJ3RhZycKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZmlsZT1TSU1QTEVfWE1MRklMRSkKKyAgICA+Pj4gdHJlZS5maW5kKCJlbGVtZW50IikudGFnCisgICAgJ2VsZW1lbnQnCisgICAgPj4+IHRyZWUuZmluZCgiZWxlbWVudC8uLi9lbXB0eS1lbGVtZW50IikudGFnCisgICAgJ2VtcHR5LWVsZW1lbnQnCisgICAgIiIiCisKK2RlZiBiYWRfZmluZCgpOgorICAgICIiIgorICAgIENoZWNrIGJhZCBvciB1bnN1cHBvcnRlZCBwYXRoIGV4cHJlc3Npb25zLgorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKKyAgICA+Pj4gZWxlbS5maW5kYWxsKCIvdGFnIikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgU3ludGF4RXJyb3I6IGNhbm5vdCB1c2UgYWJzb2x1dGUgcGF0aCBvbiBlbGVtZW50CisgICAgIiIiCisKK2RlZiBwYXRoX2NhY2hlKCk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCB0aGUgcGF0aCBjYWNoZSBiZWhhdmVzIHNhbmVseS4KKworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDEwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKKyAgICA+Pj4gY2FjaGVfbGVuXzEwID0gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMTApOiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCcuLycrc3RyKGkpKQorICAgID4+PiBsZW4oRVQuRWxlbWVudFBhdGguX2NhY2hlKSA9PSBjYWNoZV9sZW5fMTAKKyAgICBUcnVlCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDIwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKKyAgICA+Pj4gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkgPiBjYWNoZV9sZW5fMTAKKyAgICBUcnVlCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDYwMCk6IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoJy4vJytzdHIoaSkpCisgICAgPj4+IGxlbihFVC5FbGVtZW50UGF0aC5fY2FjaGUpIDwgNTAwCisgICAgVHJ1ZQorICAgICIiIgorCitkZWYgY29weSgpOgorICAgICIiIgorICAgIFRlc3QgY29weSBoYW5kbGluZyAoZXRjKS4KKworICAgID4+PiBpbXBvcnQgY29weQorICAgID4+PiBlMSA9IEVULlhNTCgiPHRhZz5oZWxsbzxmb28vPjwvdGFnPiIpCisgICAgPj4+IGUyID0gY29weS5jb3B5KGUxKQorICAgID4+PiBlMyA9IGNvcHkuZGVlcGNvcHkoZTEpCisgICAgPj4+IGUxLmZpbmQoImZvbyIpLnRhZyA9ICJiYXIiCisgICAgPj4+IHNlcmlhbGl6ZShlMSkKKyAgICAnPHRhZz5oZWxsbzxiYXIgLz48L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlMikKKyAgICAnPHRhZz5oZWxsbzxiYXIgLz48L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlMykKKyAgICAnPHRhZz5oZWxsbzxmb28gLz48L3RhZz4nCisKKyAgICAiIiIKKworZGVmIGF0dHJpYigpOgorICAgICIiIgorICAgIFRlc3QgYXR0cmlidXRlIGhhbmRsaW5nLgorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQorICAgID4+PiBlbGVtLmdldCgia2V5IikgIyAxLjEKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIsICJkZWZhdWx0IikgIyAxLjIKKyAgICAnZGVmYXVsdCcKKyAgICA+Pj4gZWxlbS5zZXQoImtleSIsICJ2YWx1ZSIpCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDEuMworICAgICd2YWx1ZScKKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDIuMQorICAgICd2YWx1ZScKKyAgICA+Pj4gZWxlbS5hdHRyaWIgIyAyLjIKKyAgICB7J2tleSc6ICd2YWx1ZSd9CisKKyAgICA+Pj4gYXR0cmliID0geyJrZXkiOiAidmFsdWUifQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwgYXR0cmliKQorICAgID4+PiBhdHRyaWIuY2xlYXIoKSAjIGNoZWNrIGZvciBhbGlhc2luZyBpc3N1ZXMKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIpICMgMy4xCisgICAgJ3ZhbHVlJworICAgID4+PiBlbGVtLmF0dHJpYiAjIDMuMgorICAgIHsna2V5JzogJ3ZhbHVlJ30KKworICAgID4+PiBhdHRyaWIgPSB7ImtleSI6ICJ2YWx1ZSJ9CisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciLCAqKmF0dHJpYikKKyAgICA+Pj4gYXR0cmliLmNsZWFyKCkgIyBjaGVjayBmb3IgYWxpYXNpbmcgaXNzdWVzCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDQuMQorICAgICd2YWx1ZScKKyAgICA+Pj4gZWxlbS5hdHRyaWIgIyA0LjIKKyAgICB7J2tleSc6ICd2YWx1ZSd9CisKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIsIHsia2V5IjogIm90aGVyIn0sIGtleT0idmFsdWUiKQorICAgID4+PiBlbGVtLmdldCgia2V5IikgIyA1LjEKKyAgICAndmFsdWUnCisgICAgPj4+IGVsZW0uYXR0cmliICMgNS4yCisgICAgeydrZXknOiAndmFsdWUnfQorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCd0ZXN0JykKKyAgICA+Pj4gZWxlbS50ZXh0ID0gImFhIgorICAgID4+PiBlbGVtLnNldCgndGVzdGEnLCAndGVzdHZhbCcpCisgICAgPj4+IGVsZW0uc2V0KCd0ZXN0YicsICd0ZXN0MicpCisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCisgICAgJzx0ZXN0IHRlc3RhPSJ0ZXN0dmFsIiB0ZXN0Yj0idGVzdDIiPmFhPC90ZXN0PicKKyAgICA+Pj4gc29ydGVkKGVsZW0ua2V5cygpKQorICAgIFsndGVzdGEnLCAndGVzdGInXQorICAgID4+PiBzb3J0ZWQoZWxlbS5pdGVtcygpKQorICAgIFsoJ3Rlc3RhJywgJ3Rlc3R2YWwnKSwgKCd0ZXN0YicsICd0ZXN0MicpXQorICAgID4+PiBlbGVtLmF0dHJpYlsndGVzdGInXQorICAgICd0ZXN0MicKKyAgICA+Pj4gZWxlbS5hdHRyaWJbJ3Rlc3RiJ10gPSAndGVzdDEnCisgICAgPj4+IGVsZW0uYXR0cmliWyd0ZXN0YyddID0gJ3Rlc3QyJworICAgID4+PiBFVC50b3N0cmluZyhlbGVtKQorICAgICc8dGVzdCB0ZXN0YT0idGVzdHZhbCIgdGVzdGI9InRlc3QxIiB0ZXN0Yz0idGVzdDIiPmFhPC90ZXN0PicKKyAgICAiIiIKKworZGVmIG1ha2VlbGVtZW50KCk6CisgICAgIiIiCisgICAgVGVzdCBtYWtlZWxlbWVudCBoYW5kbGluZy4KKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gYXR0cmliID0geyJrZXkiOiAidmFsdWUifQorICAgID4+PiBzdWJlbGVtID0gZWxlbS5tYWtlZWxlbWVudCgic3VidGFnIiwgYXR0cmliKQorICAgID4+PiBpZiBzdWJlbGVtLmF0dHJpYiBpcyBhdHRyaWI6CisgICAgLi4uICAgICBwcmludCAiYXR0cmliIGFsaWFzaW5nIgorICAgID4+PiBlbGVtLmFwcGVuZChzdWJlbGVtKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz48c3VidGFnIGtleT0idmFsdWUiIC8+PC90YWc+JworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZyAvPicKKyAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKyAgICA+Pj4gZWxlbS5leHRlbmQoW3N1YmVsZW0sIHN1YmVsZW1dKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz48c3VidGFnIGtleT0idmFsdWUiIC8+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCisgICAgPj4+IGVsZW1bOl0gPSBbc3ViZWxlbV0KKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKyAgICA+Pj4gZWxlbVs6XSA9IHR1cGxlKFtzdWJlbGVtXSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKworICAgICIiIgorCitkZWYgcGFyc2VmaWxlKCk6CisgICAgIiIiCisgICAgVGVzdCBwYXJzaW5nIGZyb20gZmlsZS4KKworICAgID4+PiB0cmVlID0gRVQucGFyc2UoU0lNUExFX1hNTEZJTEUpCisgICAgPj4+IG5vcm1hbGl6ZV9jcmxmKHRyZWUpCisgICAgPj4+IHRyZWUud3JpdGUoc3lzLnN0ZG91dCkKKyAgICA8cm9vdD4KKyAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgorICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CisgICAgPC9yb290PgorICAgID4+PiB0cmVlID0gRVQucGFyc2UoU0lNUExFX05TX1hNTEZJTEUpCisgICAgPj4+IG5vcm1hbGl6ZV9jcmxmKHRyZWUpCisgICAgPj4+IHRyZWUud3JpdGUoc3lzLnN0ZG91dCkKKyAgICA8bnMwOnJvb3QgeG1sbnM6bnMwPSJuYW1lc3BhY2UiPgorICAgICAgIDxuczA6ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9uczA6ZWxlbWVudD4KKyAgICAgICA8bnMwOmVsZW1lbnQ+dGV4dDwvbnMwOmVsZW1lbnQ+dGFpbAorICAgICAgIDxuczA6ZW1wdHktZWxlbWVudCAvPgorICAgIDwvbnMwOnJvb3Q+CisKKyAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFKSBhcyBmOgorICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCisKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKKyAgICA+Pj4gcGFyc2VyLnZlcnNpb24gICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgJ0V4cGF0IC4uLicKKyAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKHBhcnNlci5jbG9zZSgpKQorICAgIDxyb290PgorICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CisgICAgICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KKyAgICA8L3Jvb3Q+CisKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MVHJlZUJ1aWxkZXIoKSAjIDEuMiBjb21wYXRpYmlsaXR5CisgICAgPj4+IHBhcnNlci5mZWVkKGRhdGEpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShwYXJzZXIuY2xvc2UoKSkKKyAgICA8cm9vdD4KKyAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgorICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CisgICAgPC9yb290PgorCisgICAgPj4+IHRhcmdldCA9IEVULlRyZWVCdWlsZGVyKCkKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD10YXJnZXQpCisgICAgPj4+IHBhcnNlci5mZWVkKGRhdGEpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShwYXJzZXIuY2xvc2UoKSkKKyAgICA8cm9vdD4KKyAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgorICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CisgICAgPC9yb290PgorICAgICIiIgorCiBkZWYgcGFyc2VsaXRlcmFsKCk6Ci0gICAgciIiIgotCi0gICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAotCisgICAgIiIiCiAgICAgPj4+IGVsZW1lbnQgPSBFVC5YTUwoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCiAgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN5cy5zdGRvdXQpCiAgICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+CiAgICAgPj4+IGVsZW1lbnQgPSBFVC5mcm9tc3RyaW5nKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQogICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzeXMuc3Rkb3V0KQogICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgorICAgID4+PiBzZXF1ZW5jZSA9IFsiPGh0bWw+PGJvZHk+IiwgInRleHQ8L2JvIiwgImR5PjwvaHRtbD4iXQorICAgID4+PiBlbGVtZW50ID0gRVQuZnJvbXN0cmluZ2xpc3Qoc2VxdWVuY2UpCiAgICAgPj4+IHByaW50IEVULnRvc3RyaW5nKGVsZW1lbnQpCiAgICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+Ci0gICAgPj4+IHByaW50IEVULnRvc3RyaW5nKGVsZW1lbnQsICJhc2NpaSIpCi0gICAgPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nYXNjaWknPz4KKyAgICA+Pj4gcHJpbnQgIiIuam9pbihFVC50b3N0cmluZ2xpc3QoZWxlbWVudCkpCiAgICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+CisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW1lbnQsICJhc2NpaSIpCisgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2FzY2lpJz8+XFxuPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IgogICAgID4+PiBfLCBpZHMgPSBFVC5YTUxJRCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKICAgICA+Pj4gbGVuKGlkcykKICAgICAwCkBAIC0yMDAsMjAgKzY0Niw2MDAgQEAKICAgICAnYm9keScKICAgICAiIiIKIAotCi1kZWYgY2hlY2tfZW5jb2RpbmcoRVQsIGVuY29kaW5nKToKK2RlZiBpdGVycGFyc2UoKToKICAgICAiIiIKLSAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlIGFzIEVUCisgICAgVGVzdCBpdGVycGFyc2UgaW50ZXJmYWNlLgogCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKEVULCAiYXNjaWkiKQotICAgID4+PiBjaGVja19lbmNvZGluZyhFVCwgInVzLWFzY2lpIikKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoRVQsICJpc28tODg1OS0xIikKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoRVQsICJpc28tODg1OS0xNSIpCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKEVULCAiY3A0MzciKQotICAgID4+PiBjaGVja19lbmNvZGluZyhFVCwgIm1hYy1yb21hbiIpCisgICAgPj4+IGl0ZXJwYXJzZSA9IEVULml0ZXJwYXJzZQorCisgICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX1hNTEZJTEUpCisgICAgPj4+IGFjdGlvbiwgZWxlbSA9IG5leHQoY29udGV4dCkKKyAgICA+Pj4gcHJpbnQgYWN0aW9uLCBlbGVtLnRhZworICAgIGVuZCBlbGVtZW50CisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisgICAgZW5kIGVsZW1lbnQKKyAgICBlbmQgZW1wdHktZWxlbWVudAorICAgIGVuZCByb290CisgICAgPj4+IGNvbnRleHQucm9vdC50YWcKKyAgICAncm9vdCcKKworICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9OU19YTUxGSUxFKQorICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CisgICAgLi4uICAgcHJpbnQgYWN0aW9uLCBlbGVtLnRhZworICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZW1wdHktZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfXJvb3QKKworICAgID4+PiBldmVudHMgPSAoKQorICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFLCBldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisKKyAgICA+Pj4gZXZlbnRzID0gKCkKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfWE1MRklMRSwgZXZlbnRzPWV2ZW50cykKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKKworICAgID4+PiBldmVudHMgPSAoInN0YXJ0IiwgImVuZCIpCisgICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX1hNTEZJTEUsIGV2ZW50cykKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKKyAgICBzdGFydCByb290CisgICAgc3RhcnQgZWxlbWVudAorICAgIGVuZCBlbGVtZW50CisgICAgc3RhcnQgZWxlbWVudAorICAgIGVuZCBlbGVtZW50CisgICAgc3RhcnQgZW1wdHktZWxlbWVudAorICAgIGVuZCBlbXB0eS1lbGVtZW50CisgICAgZW5kIHJvb3QKKworICAgID4+PiBldmVudHMgPSAoInN0YXJ0IiwgImVuZCIsICJzdGFydC1ucyIsICJlbmQtbnMiKQorICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9OU19YTUxGSUxFLCBldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBpZiBhY3Rpb24gaW4gKCJzdGFydCIsICJlbmQiKToKKyAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKKyAgICAuLi4gICBlbHNlOgorICAgIC4uLiAgICAgcHJpbnQgYWN0aW9uLCBlbGVtCisgICAgc3RhcnQtbnMgKCcnLCAnbmFtZXNwYWNlJykKKyAgICBzdGFydCB7bmFtZXNwYWNlfXJvb3QKKyAgICBzdGFydCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CisgICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZW1wdHktZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1yb290CisgICAgZW5kLW5zIE5vbmUKKworICAgID4+PiBldmVudHMgPSAoInN0YXJ0IiwgImVuZCIsICJib2d1cyIpCisgICAgPj4+IHdpdGggb3BlbihTSU1QTEVfWE1MRklMRSwgInJiIikgYXMgZjoKKyAgICAuLi4gICAgIGl0ZXJwYXJzZShmLCBldmVudHMpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFZhbHVlRXJyb3I6IHVua25vd24gZXZlbnQgJ2JvZ3VzJworCisgICAgPj4+IGltcG9ydCBTdHJpbmdJTworCisgICAgPj4+IHNvdXJjZSA9IFN0cmluZ0lPLlN0cmluZ0lPKAorICAgIC4uLiAgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz5cXG4iCisgICAgLi4uICAgICAiPGJvZHkgeG1sbnM9J2h0dHA6Ly8mIzIzMztmZmJvdC5vcmcvbnMnXFxuIgorICAgIC4uLiAgICAgIiAgICAgIHhtbG5zOmNsXFx4ZTk9J2h0dHA6Ly9lZmZib3Qub3JnL25zJz50ZXh0PC9ib2R5PlxcbiIpCisgICAgPj4+IGV2ZW50cyA9ICgic3RhcnQtbnMiLCkKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShzb3VyY2UsIGV2ZW50cykKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgICAgcHJpbnQgYWN0aW9uLCBlbGVtCisgICAgc3RhcnQtbnMgKCcnLCB1J2h0dHA6Ly9cXHhlOWZmYm90Lm9yZy9ucycpCisgICAgc3RhcnQtbnMgKHUnY2xcXHhlOScsICdodHRwOi8vZWZmYm90Lm9yZy9ucycpCisKKyAgICA+Pj4gc291cmNlID0gU3RyaW5nSU8uU3RyaW5nSU8oIjxkb2N1bWVudCAvPmp1bmsiKQorICAgID4+PiB0cnk6CisgICAgLi4uICAgZm9yIGFjdGlvbiwgZWxlbSBpbiBpdGVycGFyc2Uoc291cmNlKToKKyAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKKyAgICAuLi4gZXhjZXB0IEVULlBhcnNlRXJyb3IsIHY6CisgICAgLi4uICAgcHJpbnQgdgorICAgIGp1bmsgYWZ0ZXIgZG9jdW1lbnQgZWxlbWVudDogbGluZSAxLCBjb2x1bW4gMTIKKyAgICAiIiIKKworZGVmIHdyaXRlZmlsZSgpOgorICAgICIiIgorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gZWxlbS50ZXh0ID0gInRleHQiCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPnRleHQ8L3RhZz4nCisgICAgPj4+IEVULlN1YkVsZW1lbnQoZWxlbSwgInN1YnRhZyIpLnRleHQgPSAic3VidGV4dCIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+dGV4dDxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPjwvdGFnPicKKworICAgIFRlc3QgdGFnIHN1cHByZXNzaW9uCisgICAgPj4+IGVsZW0udGFnID0gTm9uZQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAndGV4dDxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPicKKyAgICA+Pj4gZWxlbS5pbnNlcnQoMCwgRVQuQ29tbWVudCgiY29tbWVudCIpKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgICAgICMgYXNzdW1lcyAxLjMKKyAgICAndGV4dDwhLS1jb21tZW50LS0+PHN1YnRhZz5zdWJ0ZXh0PC9zdWJ0YWc+JworICAgID4+PiBlbGVtWzBdID0gRVQuUEkoImtleSIsICJ2YWx1ZSIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICd0ZXh0PD9rZXkgdmFsdWU/PjxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPicKKyAgICAiIiIKKworZGVmIGN1c3RvbV9idWlsZGVyKCk6CisgICAgIiIiCisgICAgVGVzdCBwYXJzZXIgdy4gY3VzdG9tIGJ1aWxkZXIuCisKKyAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFKSBhcyBmOgorICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgPj4+IGNsYXNzIEJ1aWxkZXI6CisgICAgLi4uICAgICBkZWYgc3RhcnQoc2VsZiwgdGFnLCBhdHRyaWIpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJzdGFydCIsIHRhZworICAgIC4uLiAgICAgZGVmIGVuZChzZWxmLCB0YWcpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJlbmQiLCB0YWcKKyAgICAuLi4gICAgIGRlZiBkYXRhKHNlbGYsIHRleHQpOgorICAgIC4uLiAgICAgICAgIHBhc3MKKyAgICA+Pj4gYnVpbGRlciA9IEJ1aWxkZXIoKQorICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIodGFyZ2V0PWJ1aWxkZXIpCisgICAgPj4+IHBhcnNlci5mZWVkKGRhdGEpCisgICAgc3RhcnQgcm9vdAorICAgIHN0YXJ0IGVsZW1lbnQKKyAgICBlbmQgZWxlbWVudAorICAgIHN0YXJ0IGVsZW1lbnQKKyAgICBlbmQgZWxlbWVudAorICAgIHN0YXJ0IGVtcHR5LWVsZW1lbnQKKyAgICBlbmQgZW1wdHktZWxlbWVudAorICAgIGVuZCByb290CisKKyAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9OU19YTUxGSUxFKSBhcyBmOgorICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgPj4+IGNsYXNzIEJ1aWxkZXI6CisgICAgLi4uICAgICBkZWYgc3RhcnQoc2VsZiwgdGFnLCBhdHRyaWIpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJzdGFydCIsIHRhZworICAgIC4uLiAgICAgZGVmIGVuZChzZWxmLCB0YWcpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJlbmQiLCB0YWcKKyAgICAuLi4gICAgIGRlZiBkYXRhKHNlbGYsIHRleHQpOgorICAgIC4uLiAgICAgICAgIHBhc3MKKyAgICAuLi4gICAgIGRlZiBwaShzZWxmLCB0YXJnZXQsIGRhdGEpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJwaSIsIHRhcmdldCwgcmVwcihkYXRhKQorICAgIC4uLiAgICAgZGVmIGNvbW1lbnQoc2VsZiwgZGF0YSk6CisgICAgLi4uICAgICAgICAgcHJpbnQgImNvbW1lbnQiLCByZXByKGRhdGEpCisgICAgPj4+IGJ1aWxkZXIgPSBCdWlsZGVyKCkKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD1idWlsZGVyKQorICAgID4+PiBwYXJzZXIuZmVlZChkYXRhKQorICAgIHBpIHBpICdkYXRhJworICAgIGNvbW1lbnQgJyBjb21tZW50ICcKKyAgICBzdGFydCB7bmFtZXNwYWNlfXJvb3QKKyAgICBzdGFydCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CisgICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZW1wdHktZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1yb290CisKKyAgICAiIiIKKworZGVmIGdldGNoaWxkcmVuKCk6CisgICAgIiIiCisgICAgVGVzdCBFbGVtZW50LmdldGNoaWxkcmVuKCkKKworICAgID4+PiB3aXRoIG9wZW4oU0lNUExFX1hNTEZJTEUsICJyIikgYXMgZjoKKyAgICAuLi4gICAgIHRyZWUgPSBFVC5wYXJzZShmKQorICAgID4+PiBmb3IgZWxlbSBpbiB0cmVlLmdldHJvb3QoKS5pdGVyKCk6CisgICAgLi4uICAgICBzdW1tYXJpemVfbGlzdChlbGVtLmdldGNoaWxkcmVuKCkpCisgICAgWydlbGVtZW50JywgJ2VsZW1lbnQnLCAnZW1wdHktZWxlbWVudCddCisgICAgW10KKyAgICBbXQorICAgIFtdCisgICAgPj4+IGZvciBlbGVtIGluIHRyZWUuZ2V0aXRlcmF0b3IoKToKKyAgICAuLi4gICAgIHN1bW1hcml6ZV9saXN0KGVsZW0uZ2V0Y2hpbGRyZW4oKSkKKyAgICBbJ2VsZW1lbnQnLCAnZWxlbWVudCcsICdlbXB0eS1lbGVtZW50J10KKyAgICBbXQorICAgIFtdCisgICAgW10KKworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGxlbihlbGVtLmdldGNoaWxkcmVuKCkpCisgICAgMworICAgID4+PiBsZW4oZWxlbVsyXS5nZXRjaGlsZHJlbigpKQorICAgIDEKKyAgICA+Pj4gZWxlbVs6XSA9PSBlbGVtLmdldGNoaWxkcmVuKCkKKyAgICBUcnVlCisgICAgPj4+IGNoaWxkMSA9IGVsZW1bMF0KKyAgICA+Pj4gY2hpbGQyID0gZWxlbVsyXQorICAgID4+PiBkZWwgZWxlbVsxOjJdCisgICAgPj4+IGxlbihlbGVtLmdldGNoaWxkcmVuKCkpCisgICAgMgorICAgID4+PiBjaGlsZDEgPT0gZWxlbVswXQorICAgIFRydWUKKyAgICA+Pj4gY2hpbGQyID09IGVsZW1bMV0KKyAgICBUcnVlCisgICAgPj4+IGVsZW1bMDoyXSA9IFtjaGlsZDIsIGNoaWxkMV0KKyAgICA+Pj4gY2hpbGQyID09IGVsZW1bMF0KKyAgICBUcnVlCisgICAgPj4+IGNoaWxkMSA9PSBlbGVtWzFdCisgICAgVHJ1ZQorICAgID4+PiBjaGlsZDEgPT0gZWxlbVswXQorICAgIEZhbHNlCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBlbGVtLmdldGNoaWxkcmVuKCkKKyAgICBbXQorICAgICIiIgorCitkZWYgd3JpdGVzdHJpbmcoKToKKyAgICAiIiIKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKKyAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKKyAgICAnPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+JworICAgID4+PiBlbGVtID0gRVQuZnJvbXN0cmluZygiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKKyAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKKyAgICAnPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+JworICAgICIiIgorCitkZWYgY2hlY2tfZW5jb2RpbmcoZW5jb2RpbmcpOgorICAgICIiIgorICAgID4+PiBjaGVja19lbmNvZGluZygiYXNjaWkiKQorICAgID4+PiBjaGVja19lbmNvZGluZygidXMtYXNjaWkiKQorICAgID4+PiBjaGVja19lbmNvZGluZygiaXNvLTg4NTktMSIpCisgICAgPj4+IGNoZWNrX2VuY29kaW5nKCJpc28tODg1OS0xNSIpCisgICAgPj4+IGNoZWNrX2VuY29kaW5nKCJjcDQzNyIpCisgICAgPj4+IGNoZWNrX2VuY29kaW5nKCJtYWMtcm9tYW4iKQogICAgICIiIgogICAgIEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz48eG1sIC8+IiAlIGVuY29kaW5nKQogCitkZWYgZW5jb2RpbmcoKToKKyAgICByIiIiCisgICAgVGVzdCBlbmNvZGluZyBpc3N1ZXMuCisKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IGVsZW0udGV4dCA9IHUiYWJjIgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz5hYmM8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXRmLTgiKQorICAgICc8dGFnPmFiYzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpCisgICAgJzx0YWc+YWJjPC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQorICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+XG48dGFnPmFiYzwvdGFnPiIKKworICAgID4+PiBlbGVtLnRleHQgPSAiPCZcIlwnPiIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+Jmx0OyZhbXA7IlwnJmd0OzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgJzx0YWc+Jmx0OyZhbXA7IlwnJmd0OzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpICMgY2RhdGEgY2hhcmFjdGVycworICAgICc8dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCisgICAgJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ2lzby04ODU5LTFcJz8+XG48dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCisKKyAgICA+Pj4gZWxlbS5hdHRyaWJbImtleSJdID0gIjwmXCJcJz4iCisgICAgPj4+IGVsZW0udGV4dCA9IE5vbmUKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWcga2V5PSImbHQ7JmFtcDsmcXVvdDtcJyZndDsiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAnPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQorICAgICc8dGFnIGtleT0iJmx0OyZhbXA7JnF1b3Q7XCcmZ3Q7IiAvPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKKyAgICAnPD94bWwgdmVyc2lvbj1cJzEuMFwnIGVuY29kaW5nPVwnaXNvLTg4NTktMVwnPz5cbjx0YWcga2V5PSImbHQ7JmFtcDsmcXVvdDtcJyZndDsiIC8+JworCisgICAgPj4+IGVsZW0udGV4dCA9IHUnXHhlNVx4ZjZceGY2PD4nCisgICAgPj4+IGVsZW0uYXR0cmliLmNsZWFyKCkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+JiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXRmLTgiKQorICAgICc8dGFnPlx4YzNceGE1XHhjM1x4YjZceGMzXHhiNiZsdDsmZ3Q7PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InVzLWFzY2lpIikKKyAgICAnPHRhZz4mIzIyOTsmIzI0NjsmIzI0NjsmbHQ7Jmd0OzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKKyAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/PlxuPHRhZz5ceGU1XHhmNlx4ZjYmbHQ7Jmd0OzwvdGFnPiIKKworICAgID4+PiBlbGVtLmF0dHJpYlsia2V5Il0gPSB1J1x4ZTVceGY2XHhmNjw+JworICAgID4+PiBlbGVtLnRleHQgPSBOb25lCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnIGtleT0iJiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDsiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAnPHRhZyBrZXk9Ilx4YzNceGE1XHhjM1x4YjZceGMzXHhiNiZsdDsmZ3Q7IiAvPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpCisgICAgJzx0YWcga2V5PSImIzIyOTsmIzI0NjsmIzI0NjsmbHQ7Jmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCisgICAgJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ2lzby04ODU5LTFcJz8+XG48dGFnIGtleT0iXHhlNVx4ZjZceGY2Jmx0OyZndDsiIC8+JworICAgICIiIgorCitkZWYgbWV0aG9kcygpOgorICAgIHIiIiIKKyAgICBUZXN0IHNlcmlhbGl6YXRpb24gbWV0aG9kcy4KKworICAgID4+PiBlID0gRVQuWE1MKCI8aHRtbD48bGluay8+PHNjcmlwdD4xICZsdDsgMjwvc2NyaXB0PjwvaHRtbD4iKQorICAgID4+PiBlLnRhaWwgPSAiXG4iCisgICAgPj4+IHNlcmlhbGl6ZShlKQorICAgICc8aHRtbD48bGluayAvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+XG4nCisgICAgPj4+IHNlcmlhbGl6ZShlLCBtZXRob2Q9Tm9uZSkKKyAgICAnPGh0bWw+PGxpbmsgLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPlxuJworICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPSJ4bWwiKQorICAgICc8aHRtbD48bGluayAvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+XG4nCisgICAgPj4+IHNlcmlhbGl6ZShlLCBtZXRob2Q9Imh0bWwiKQorICAgICc8aHRtbD48bGluaz48c2NyaXB0PjEgPCAyPC9zY3JpcHQ+PC9odG1sPlxuJworICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPSJ0ZXh0IikKKyAgICAnMSA8IDJcbicKKyAgICAiIiIKKworZGVmIGl0ZXJhdG9ycygpOgorICAgICIiIgorICAgIFRlc3QgaXRlcmF0b3JzLgorCisgICAgPj4+IGUgPSBFVC5YTUwoIjxodG1sPjxib2R5PnRoaXMgaXMgYSA8aT5wYXJhZ3JhcGg8L2k+LjwvYm9keT4uLjwvaHRtbD4iKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlLml0ZXIoKSkKKyAgICBbJ2h0bWwnLCAnYm9keScsICdpJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZS5maW5kKCJib2R5IikuaXRlcigpKQorICAgIFsnYm9keScsICdpJ10KKyAgICA+Pj4gc3VtbWFyaXplKG5leHQoZS5pdGVyKCkpKQorICAgICdodG1sJworICAgID4+PiAiIi5qb2luKGUuaXRlcnRleHQoKSkKKyAgICAndGhpcyBpcyBhIHBhcmFncmFwaC4uLicKKyAgICA+Pj4gIiIuam9pbihlLmZpbmQoImJvZHkiKS5pdGVydGV4dCgpKQorICAgICd0aGlzIGlzIGEgcGFyYWdyYXBoLicKKyAgICA+Pj4gbmV4dChlLml0ZXJ0ZXh0KCkpCisgICAgJ3RoaXMgaXMgYSAnCisKKyAgICBNZXRob2QgaXRlcnBhcnNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuIFNlZSBidWcgNjQ3Mi4KKworICAgID4+PiBzb3VyY2VmaWxlID0gc2VyaWFsaXplKGUsIHRvX3N0cmluZz1GYWxzZSkKKyAgICA+Pj4gbmV4dChFVC5pdGVycGFyc2Uoc291cmNlZmlsZSkpICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICgnZW5kJywgPEVsZW1lbnQgJ2knIGF0IDB4Li4uPikKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoTm9uZSkKKyAgICA+Pj4gdHJlZS5pdGVyKCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgQXR0cmlidXRlRXJyb3I6ICdOb25lVHlwZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2l0ZXInCisgICAgIiIiCisKK0VOVElUWV9YTUwgPSAiIiJcCis8IURPQ1RZUEUgcG9pbnRzIFsKKzwhRU5USVRZICUgdXNlci1lbnRpdGllcyBTWVNURU0gJ3VzZXItZW50aXRpZXMueG1sJz4KKyV1c2VyLWVudGl0aWVzOworXT4KKzxkb2N1bWVudD4mZW50aXR5OzwvZG9jdW1lbnQ+CisiIiIKKworZGVmIGVudGl0eSgpOgorICAgICIiIgorICAgIFRlc3QgZW50aXR5IGhhbmRsaW5nLgorCisgICAgMSkgZ29vZCBlbnRpdGllcworCisgICAgPj4+IGUgPSBFVC5YTUwoIjxkb2N1bWVudCB0aXRsZT0nJiN4ODIzMDsnPnRlc3Q8L2RvY3VtZW50PiIpCisgICAgPj4+IHNlcmlhbGl6ZShlKQorICAgICc8ZG9jdW1lbnQgdGl0bGU9IiYjMzMzMjg7Ij50ZXN0PC9kb2N1bWVudD4nCisKKyAgICAyKSBiYWQgZW50aXRpZXMKKworICAgID4+PiBFVC5YTUwoIjxkb2N1bWVudD4mZW50aXR5OzwvZG9jdW1lbnQ+IikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgUGFyc2VFcnJvcjogdW5kZWZpbmVkIGVudGl0eTogbGluZSAxLCBjb2x1bW4gMTAKKworICAgID4+PiBFVC5YTUwoRU5USVRZX1hNTCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgUGFyc2VFcnJvcjogdW5kZWZpbmVkIGVudGl0eSAmZW50aXR5OzogbGluZSA1LCBjb2x1bW4gMTAKKworICAgIDMpIGN1c3RvbSBlbnRpdHkKKworICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuZW50aXR5WyJlbnRpdHkiXSA9ICJ0ZXh0IgorICAgID4+PiBwYXJzZXIuZmVlZChFTlRJVFlfWE1MKQorICAgID4+PiByb290ID0gcGFyc2VyLmNsb3NlKCkKKyAgICA+Pj4gc2VyaWFsaXplKHJvb3QpCisgICAgJzxkb2N1bWVudD50ZXh0PC9kb2N1bWVudD4nCisgICAgIiIiCisKK2RlZiBlcnJvcih4bWwpOgorICAgICIiIgorCisgICAgVGVzdCBlcnJvciBoYW5kbGluZy4KKworICAgID4+PiBpc3N1YmNsYXNzKEVULlBhcnNlRXJyb3IsIFN5bnRheEVycm9yKQorICAgIFRydWUKKyAgICA+Pj4gZXJyb3IoImZvbyIpLnBvc2l0aW9uCisgICAgKDEsIDApCisgICAgPj4+IGVycm9yKCI8dGFnPiZmb287PC90YWc+IikucG9zaXRpb24KKyAgICAoMSwgNSkKKyAgICA+Pj4gZXJyb3IoImZvb2JhcjwiKS5wb3NpdGlvbgorICAgICgxLCA2KQorCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBFVC5YTUwoeG1sKQorICAgIGV4Y2VwdCBFVC5QYXJzZUVycm9yOgorICAgICAgICByZXR1cm4gc3lzLmV4Y192YWx1ZQorCitkZWYgbmFtZXNwYWNlKCk6CisgICAgIiIiCisgICAgVGVzdCBuYW1lc3BhY2UgaXNzdWVzLgorCisgICAgMSkgeG1sIG5hbWVzcGFjZQorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjx0YWcgeG1sOmxhbmc9J2VuJyAvPiIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuMQorICAgICc8dGFnIHhtbDpsYW5nPSJlbiIgLz4nCisKKyAgICAyKSBvdGhlciAid2VsbC1rbm93biIgbmFtZXNwYWNlcworCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIycgLz4iKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjEKKyAgICAnPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIiAvPicKKworICAgID4+PiBlbGVtID0gRVQuWE1MKCI8aHRtbDpodG1sIHhtbG5zOmh0bWw9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnIC8+IikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4yCisgICAgJzxodG1sOmh0bWwgeG1sbnM6aHRtbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgLz4nCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0naHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZScgLz4iKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjMKKyAgICAnPG5zMDpFbnZlbG9wZSB4bWxuczpuczA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUiIC8+JworCisgICAgMykgdW5rbm93biBuYW1lc3BhY2VzCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTF9OUykKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGVsZW0pCisgICAgPG5zMDpib2R5IHhtbG5zOm5zMD0iaHR0cDovL2VmZmJvdC5vcmcvbnMiPgorICAgICAgPG5zMDp0YWc+dGV4dDwvbnMwOnRhZz4KKyAgICAgIDxuczA6dGFnIC8+CisgICAgICA8bnMwOnNlY3Rpb24+CisgICAgICAgIDxuczA6dGFnPnN1YnRleHQ8L25zMDp0YWc+CisgICAgICA8L25zMDpzZWN0aW9uPgorICAgIDwvbnMwOmJvZHk+CisgICAgIiIiCisKK2RlZiBxbmFtZSgpOgorICAgICIiIgorICAgIFRlc3QgUU5hbWUgaGFuZGxpbmcuCisKKyAgICAxKSBkZWNvcmF0ZWQgdGFncworCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ7dXJpfXRhZyIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuMQorICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgLz4nCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KEVULlFOYW1lKCJ7dXJpfXRhZyIpKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjIKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIC8+JworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudChFVC5RTmFtZSgidXJpIiwgInRhZyIpKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjMKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIC8+JworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudChFVC5RTmFtZSgidXJpIiwgInRhZyIpKQorICAgID4+PiBzdWJlbGVtID0gRVQuU3ViRWxlbWVudChlbGVtLCBFVC5RTmFtZSgidXJpIiwgInRhZzEiKSkKKyAgICA+Pj4gc3ViZWxlbSA9IEVULlN1YkVsZW1lbnQoZWxlbSwgRVQuUU5hbWUoInVyaSIsICJ0YWcyIikpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuNAorICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSI+PG5zMDp0YWcxIC8+PG5zMDp0YWcyIC8+PC9uczA6dGFnPicKKworICAgIDIpIGRlY29yYXRlZCBhdHRyaWJ1dGVzCisKKyAgICA+Pj4gZWxlbS5jbGVhcigpCisgICAgPj4+IGVsZW0uYXR0cmliWyJ7dXJpfWtleSJdID0gInZhbHVlIgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjEKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9InZhbHVlIiAvPicKKworICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gZWxlbS5hdHRyaWJbRVQuUU5hbWUoInt1cml9a2V5IildID0gInZhbHVlIgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjIKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9InZhbHVlIiAvPicKKworICAgIDMpIGRlY29yYXRlZCB2YWx1ZXMgYXJlIG5vdCBjb252ZXJ0ZWQgYnkgZGVmYXVsdCwgYnV0IHRoZQorICAgICAgIFFOYW1lIHdyYXBwZXIgY2FuIGJlIHVzZWQgZm9yIHZhbHVlcworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBlbGVtLmF0dHJpYlsie3VyaX1rZXkiXSA9ICJ7dXJpfXZhbHVlIgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAzLjEKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9Int1cml9dmFsdWUiIC8+JworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBlbGVtLmF0dHJpYlsie3VyaX1rZXkiXSA9IEVULlFOYW1lKCJ7dXJpfXZhbHVlIikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMy4yCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJuczA6dmFsdWUiIC8+JworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBzdWJlbGVtID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gc3ViZWxlbS5hdHRyaWJbInt1cmkxfWtleSJdID0gRVQuUU5hbWUoInt1cmkyfXZhbHVlIikKKyAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKKyAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMy4zCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiB4bWxuczpuczE9InVyaTEiIHhtbG5zOm5zMj0idXJpMiI+PHRhZyBuczE6a2V5PSJuczI6dmFsdWUiIC8+PHRhZyBuczE6a2V5PSJuczI6dmFsdWUiIC8+PC9uczA6dGFnPicKKworICAgIDQpIERpcmVjdCBRTmFtZSB0ZXN0cworCisgICAgPj4+IHN0cihFVC5RTmFtZSgnbnMnLCAndGFnJykpCisgICAgJ3tuc310YWcnCisgICAgPj4+IHN0cihFVC5RTmFtZSgne25zfXRhZycpKQorICAgICd7bnN9dGFnJworICAgID4+PiBxMSA9IEVULlFOYW1lKCducycsICd0YWcnKQorICAgID4+PiBxMiA9IEVULlFOYW1lKCducycsICd0YWcnKQorICAgID4+PiBxMSA9PSBxMgorICAgIFRydWUKKyAgICA+Pj4gcTIgPSBFVC5RTmFtZSgnbnMnLCAnb3RoZXItdGFnJykKKyAgICA+Pj4gcTEgPT0gcTIKKyAgICBGYWxzZQorICAgID4+PiBxMSA9PSAnbnM6dGFnJworICAgIEZhbHNlCisgICAgPj4+IHExID09ICd7bnN9dGFnJworICAgIFRydWUKKyAgICAiIiIKKworZGVmIGRvY3R5cGVfcHVibGljKCk6CisgICAgIiIiCisgICAgVGVzdCBQVUJMSUMgZG9jdHlwZS4KKworICAgID4+PiBlbGVtID0gRVQuWE1MKCc8IURPQ1RZUEUgaHRtbCBQVUJMSUMnCisgICAgLi4uICAgJyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iJworICAgIC4uLiAgICcgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPicKKyAgICAuLi4gICAnPGh0bWw+dGV4dDwvaHRtbD4nKQorCisgICAgIiIiCisKK2RlZiB4cGF0aF90b2tlbml6ZXIocCk6CisgICAgIiIiCisgICAgVGVzdCB0aGUgWFBhdGggdG9rZW5pemVyLgorCisgICAgPj4+ICMgdGVzdHMgZnJvbSB0aGUgeG1sIHNwZWNpZmljYXRpb24KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIqIikKKyAgICBbJyonXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoInRleHQoKSIpCisgICAgWyd0ZXh0JywgJygpJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJAbmFtZSIpCisgICAgWydAJywgJ25hbWUnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIkAqIikKKyAgICBbJ0AnLCAnKiddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigicGFyYVsxXSIpCisgICAgWydwYXJhJywgJ1snLCAnMScsICddJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJwYXJhW2xhc3QoKV0iKQorICAgIFsncGFyYScsICdbJywgJ2xhc3QnLCAnKCknLCAnXSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiKi9wYXJhIikKKyAgICBbJyonLCAnLycsICdwYXJhJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIvZG9jL2NoYXB0ZXJbNV0vc2VjdGlvblsyXSIpCisgICAgWycvJywgJ2RvYycsICcvJywgJ2NoYXB0ZXInLCAnWycsICc1JywgJ10nLCAnLycsICdzZWN0aW9uJywgJ1snLCAnMicsICddJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJjaGFwdGVyLy9wYXJhIikKKyAgICBbJ2NoYXB0ZXInLCAnLy8nLCAncGFyYSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLy9wYXJhIikKKyAgICBbJy8vJywgJ3BhcmEnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi8vb2xpc3QvaXRlbSIpCisgICAgWycvLycsICdvbGlzdCcsICcvJywgJ2l0ZW0nXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4iKQorICAgIFsnLiddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi8vcGFyYSIpCisgICAgWycuJywgJy8vJywgJ3BhcmEnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4uIikKKyAgICBbJy4uJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuLi9AbGFuZyIpCisgICAgWycuLicsICcvJywgJ0AnLCAnbGFuZyddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiY2hhcHRlclt0aXRsZV0iKQorICAgIFsnY2hhcHRlcicsICdbJywgJ3RpdGxlJywgJ10nXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoImVtcGxveWVlW0BzZWNyZXRhcnkgYW5kIEBhc3Npc3RhbnRdIikKKyAgICBbJ2VtcGxveWVlJywgJ1snLCAnQCcsICdzZWNyZXRhcnknLCAnJywgJ2FuZCcsICcnLCAnQCcsICdhc3Npc3RhbnQnLCAnXSddCisKKyAgICA+Pj4gIyBhZGRpdGlvbmFsIHRlc3RzCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigie2h0dHA6Ly9zcGFtfWVnZyIpCisgICAgWyd7aHR0cDovL3NwYW19ZWdnJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuL3NwYW0uZWdnIikKKyAgICBbJy4nLCAnLycsICdzcGFtLmVnZyddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi8ve2h0dHA6Ly9zcGFtfWVnZyIpCisgICAgWycuJywgJy8vJywgJ3todHRwOi8vc3BhbX1lZ2cnXQorICAgICIiIgorICAgIGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50UGF0aAorICAgIG91dCA9IFtdCisgICAgZm9yIG9wLCB0YWcgaW4gRWxlbWVudFBhdGgueHBhdGhfdG9rZW5pemVyKHApOgorICAgICAgICBvdXQuYXBwZW5kKG9wIG9yIHRhZykKKyAgICByZXR1cm4gb3V0CisKK2RlZiBwcm9jZXNzaW5naW5zdHJ1Y3Rpb24oKToKKyAgICAiIiIKKyAgICBUZXN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBkaXJlY3RseQorCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlByb2Nlc3NpbmdJbnN0cnVjdGlvbigndGVzdCcsICdpbnN0cnVjdGlvbicpKQorICAgICc8P3Rlc3QgaW5zdHJ1Y3Rpb24/PicKKyAgICA+Pj4gRVQudG9zdHJpbmcoRVQuUEkoJ3Rlc3QnLCAnaW5zdHJ1Y3Rpb24nKSkKKyAgICAnPD90ZXN0IGluc3RydWN0aW9uPz4nCisKKyAgICBJc3N1ZSAjMjc0NgorCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlBJKCd0ZXN0JywgJzx0ZXN0aW5nJj4nKSkKKyAgICAnPD90ZXN0IDx0ZXN0aW5nJj4/PicKKyAgICA+Pj4gRVQudG9zdHJpbmcoRVQuUEkoJ3Rlc3QnLCB1Jzx0ZXN0aW5nJj5ceGUzJyksICdsYXRpbjEnKQorICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdsYXRpbjEnPz5cXG48P3Rlc3QgPHRlc3RpbmcmPlxceGUzPz4iCisgICAgIiIiCiAKICMKICMgeGluY2x1ZGUgdGVzdHMgKHNhbXBsZXMgZnJvbSBhcHBlbmRpeCBDIG9mIHRoZSB4aW5jbHVkZSBzcGVjaWZpY2F0aW9uKQpAQCAtMjQ3LDYgKzEyNzMsMTQgQEAKIAogWElOQ0xVREVbImNvdW50LnR4dCJdID0gIjMyNDM4NyIKIAorWElOQ0xVREVbIkMyYi54bWwiXSA9ICIiIlwKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgPHA+VGhpcyBkb2N1bWVudCBoYXMgYmVlbiA8ZW0+YWNjZXNzZWQ8L2VtPgorICA8eGk6aW5jbHVkZSBocmVmPSJjb3VudC50eHQiIHBhcnNlPSJ0ZXh0Ii8+IHRpbWVzLjwvcD4KKzwvZG9jdW1lbnQ+CisiIiIKKwogWElOQ0xVREVbIkMzLnhtbCJdID0gIiIiXAogPD94bWwgdmVyc2lvbj0nMS4wJz8+CiA8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgpAQCAtMjc5LDkgKzEzMTMsOSBAQAogPD94bWwgdmVyc2lvbj0nMS4wJz8+CiA8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgogICA8cD5FeGFtcGxlLjwvcD4KLSAgPHhpOmluY2x1ZGUgaHJlZj0ic2FtcGxlcy9zaW1wbGUueG1sIi8+CisgIDx4aTppbmNsdWRlIGhyZWY9Int9Ii8+CiA8L2RvY3VtZW50PgotIiIiCisiIiIuZm9ybWF0KGNnaS5lc2NhcGUoU0lNUExFX1hNTEZJTEUsIFRydWUpKQogCiBkZWYgeGluY2x1ZGVfbG9hZGVyKGhyZWYsIHBhcnNlPSJ4bWwiLCBlbmNvZGluZz1Ob25lKToKICAgICB0cnk6CkBAIC0zMDIsNyArMTMzNiw3IEBACiAKICAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkMxLnhtbCIpCiAgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIHhpbmNsdWRlX2xvYWRlcikKLSAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKEVULCBkb2N1bWVudCkgIyBDMQorICAgID4+PiBwcmludCBzZXJpYWxpemUoZG9jdW1lbnQpICMgQzEKICAgICA8ZG9jdW1lbnQ+CiAgICAgICA8cD4xMjAgTXogaXMgYWRlcXVhdGUgZm9yIGFuIGF2ZXJhZ2UgaG9tZSB1c2VyLjwvcD4KICAgICAgIDxkaXNjbGFpbWVyPgpAQCAtMzE2LDE3ICsxMzUwLDI3IEBACiAKICAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkMyLnhtbCIpCiAgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIHhpbmNsdWRlX2xvYWRlcikKLSAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKEVULCBkb2N1bWVudCkgIyBDMgorICAgID4+PiBwcmludCBzZXJpYWxpemUoZG9jdW1lbnQpICMgQzIKICAgICA8ZG9jdW1lbnQ+CiAgICAgICA8cD5UaGlzIGRvY3VtZW50IGhhcyBiZWVuIGFjY2Vzc2VkCiAgICAgICAzMjQzODcgdGltZXMuPC9wPgogICAgIDwvZG9jdW1lbnQ+CiAKKyAgICBUZXh0dWFsIGluY2x1c2lvbiBhZnRlciBzaWJsaW5nIGVsZW1lbnQgKGJhc2VkIG9uIG1vZGlmaWVkIFhJbmNsdWRlIEMuMikKKworICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzJiLnhtbCIpCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIHhpbmNsdWRlX2xvYWRlcikKKyAgICA+Pj4gcHJpbnQoc2VyaWFsaXplKGRvY3VtZW50KSkgIyBDMmIKKyAgICA8ZG9jdW1lbnQ+CisgICAgICA8cD5UaGlzIGRvY3VtZW50IGhhcyBiZWVuIDxlbT5hY2Nlc3NlZDwvZW0+CisgICAgICAzMjQzODcgdGltZXMuPC9wPgorICAgIDwvZG9jdW1lbnQ+CisKICAgICBUZXh0dWFsIGluY2x1c2lvbiBvZiBYTUwgZXhhbXBsZSAoWEluY2x1ZGUgQy4zKQogCiAgICAgPj4+IGRvY3VtZW50ID0geGluY2x1ZGVfbG9hZGVyKCJDMy54bWwiKQogICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCi0gICAgPj4+IHByaW50IHNlcmlhbGl6ZShFVCwgZG9jdW1lbnQpICMgQzMKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMzCiAgICAgPGRvY3VtZW50PgogICAgICAgPHA+VGhlIGZvbGxvd2luZyBpcyB0aGUgc291cmNlIG9mIHRoZSAiZGF0YS54bWwiIHJlc291cmNlOjwvcD4KICAgICAgIDxleGFtcGxlPiZsdDs/eG1sIHZlcnNpb249JzEuMCc/Jmd0OwpAQCAtMzQzLDEzICsxMzg3LDUwMCBAQAogICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgIElPRXJyb3I6IHJlc291cmNlIG5vdCBmb3VuZAotICAgID4+PiAjIHByaW50IHNlcmlhbGl6ZShFVCwgZG9jdW1lbnQpICMgQzUKKyAgICA+Pj4gIyBwcmludCBzZXJpYWxpemUoZG9jdW1lbnQpICMgQzUKKyAgICAiIiIKKworZGVmIHhpbmNsdWRlX2RlZmF1bHQoKToKKyAgICAiIiIKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRJbmNsdWRlCisKKyAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoImRlZmF1bHQueG1sIikKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCkKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIGRlZmF1bHQKKyAgICA8ZG9jdW1lbnQ+CisgICAgICA8cD5FeGFtcGxlLjwvcD4KKyAgICAgIDxyb290PgorICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CisgICAgICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KKyAgICA8L3Jvb3Q+CisgICAgPC9kb2N1bWVudD4KKyAgICAiIiIKKworIworIyBiYWRseSBmb3JtYXR0ZWQgeGk6aW5jbHVkZSB0YWdzCisKK1hJTkNMVURFX0JBRCA9IHt9CisKK1hJTkNMVURFX0JBRFsiQjEueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDxwPjEyMCBNeiBpcyBhZGVxdWF0ZSBmb3IgYW4gYXZlcmFnZSBob21lIHVzZXIuPC9wPgorICA8eGk6aW5jbHVkZSBocmVmPSJkaXNjbGFpbWVyLnhtbCIgcGFyc2U9IkJBRF9UWVBFIi8+Cis8L2RvY3VtZW50PgorIiIiCisKK1hJTkNMVURFX0JBRFsiQjIueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkaXYgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICAgIDx4aTpmYWxsYmFjaz48L3hpOmZhbGxiYWNrPgorPC9kaXY+CisiIiIKKworZGVmIHhpbmNsdWRlX2ZhaWx1cmVzKCk6CisgICAgciIiIgorICAgIFRlc3QgZmFpbHVyZSB0byBsb2NhdGUgaW5jbHVkZWQgWE1MIGZpbGUuCisKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRJbmNsdWRlCisKKyAgICA+Pj4gZGVmIG5vbmVfbG9hZGVyKGhyZWYsIHBhcnNlciwgZW5jb2Rpbmc9Tm9uZSk6CisgICAgLi4uICAgICByZXR1cm4gTm9uZQorCisgICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFWyJDMS54bWwiXSkKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBGYXRhbEluY2x1ZGVFcnJvcjogY2Fubm90IGxvYWQgJ2Rpc2NsYWltZXIueG1sJyBhcyAneG1sJworCisgICAgVGVzdCBmYWlsdXJlIHRvIGxvY2F0ZSBpbmNsdWRlZCB0ZXh0IGZpbGUuCisKKyAgICA+Pj4gZG9jdW1lbnQgPSBFVC5YTUwoWElOQ0xVREVbIkMyLnhtbCJdKQorICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCBsb2FkZXI9bm9uZV9sb2FkZXIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIEZhdGFsSW5jbHVkZUVycm9yOiBjYW5ub3QgbG9hZCAnY291bnQudHh0JyBhcyAndGV4dCcKKworICAgIFRlc3QgYmFkIHBhcnNlIHR5cGUuCisKKyAgICA+Pj4gZG9jdW1lbnQgPSBFVC5YTUwoWElOQ0xVREVfQkFEWyJCMS54bWwiXSkKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBGYXRhbEluY2x1ZGVFcnJvcjogdW5rbm93biBwYXJzZSB0eXBlIGluIHhpOmluY2x1ZGUgdGFnICgnQkFEX1RZUEUnKQorCisgICAgVGVzdCB4aTpmYWxsYmFjayBvdXRzaWRlIHhpOmluY2x1ZGUuCisKKyAgICA+Pj4gZG9jdW1lbnQgPSBFVC5YTUwoWElOQ0xVREVfQkFEWyJCMi54bWwiXSkKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBGYXRhbEluY2x1ZGVFcnJvcjogeGk6ZmFsbGJhY2sgdGFnIG11c3QgYmUgY2hpbGQgb2YgeGk6aW5jbHVkZSAoJ3todHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlfWZhbGxiYWNrJykKKyAgICAiIiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyByZXBvcnRlZCBidWdzCisKK2RlZiBidWdfeG1sdG9vbGtpdDIxKCk6CisgICAgIiIiCisKKyAgICBtYXJzaGFsbGVyIGdpdmVzIG9ic2N1cmUgZXJyb3JzIGZvciBub24tc3RyaW5nIHZhbHVlcworCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KDEyMykKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGFnCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0udGV4dCA9IDEyMworICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyB0ZXh0CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0udGFpbCA9IDEyMworICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyB0YWlsCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0uc2V0KDEyMywgIjEyMyIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIGF0dHJpYnV0ZSBrZXkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVHlwZUVycm9yOiBjYW5ub3Qgc2VyaWFsaXplIDEyMyAodHlwZSBpbnQpCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJlbGVtIikKKyAgICA+Pj4gZWxlbS5zZXQoIjEyMyIsIDEyMykKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgYXR0cmlidXRlIHZhbHVlCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQogCiAgICAgIiIiCiAKLWRlZiB0ZXN0X21haW4oKToKK2RlZiBidWdfeG1sdG9vbGtpdDI1KCk6CisgICAgIiIiCisKKyAgICB0eXBvIGluIEVsZW1lbnRUcmVlLmZpbmR0ZXh0CisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZWxlbSkKKyAgICA+Pj4gdHJlZS5maW5kdGV4dCgidGFnIikKKyAgICAndGV4dCcKKyAgICA+Pj4gdHJlZS5maW5kdGV4dCgic2VjdGlvbi90YWciKQorICAgICdzdWJ0ZXh0JworCisgICAgIiIiCisKK2RlZiBidWdfeG1sdG9vbGtpdDI4KCk6CisgICAgIiIiCisKKyAgICAuLy90YWcgY2F1c2VzIGV4Y2VwdGlvbnMKKworICAgID4+PiB0cmVlID0gRVQuWE1MKCI8ZG9jPjx0YWJsZT48dGJvZHkvPjwvdGFibGU+PC9kb2M+IikKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QodHJlZS5maW5kYWxsKCIuLy90aGVhZCIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KHRyZWUuZmluZGFsbCgiLi8vdGJvZHkiKSkKKyAgICBbJ3Rib2R5J10KKworICAgICIiIgorCitkZWYgYnVnX3htbHRvb2xraXRYMSgpOgorICAgICIiIgorCisgICAgZHVtcCgpIGRvZXNuJ3QgZmx1c2ggdGhlIG91dHB1dCBidWZmZXIKKworICAgID4+PiB0cmVlID0gRVQuWE1MKCI8ZG9jPjx0YWJsZT48dGJvZHkvPjwvdGFibGU+PC9kb2M+IikKKyAgICA+Pj4gRVQuZHVtcCh0cmVlKTsgc3lzLnN0ZG91dC53cml0ZSgidGFpbCIpCisgICAgPGRvYz48dGFibGU+PHRib2R5IC8+PC90YWJsZT48L2RvYz4KKyAgICB0YWlsCisKKyAgICAiIiIKKworZGVmIGJ1Z194bWx0b29sa2l0MzkoKToKKyAgICAiIiIKKworICAgIG5vbi1hc2NpaSBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbmFtZXMgZG9lc24ndCB3b3JrCisKKyAgICA+Pj4gdHJlZSA9IEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pjx0XHhlNGcgLz4iKQorICAgID4+PiBFVC50b3N0cmluZyh0cmVlLCAidXRmLTgiKQorICAgICc8dFxceGMzXFx4YTRnIC8+JworCisgICAgPj4+IHRyZWUgPSBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz48dGFnIFx4ZTR0dHI9J3YmIzIyODtsdWUnIC8+IikKKyAgICA+Pj4gdHJlZS5hdHRyaWIKKyAgICB7dSdcXHhlNHR0cic6IHUndlxceGU0bHVlJ30KKyAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKKyAgICAnPHRhZyBcXHhjM1xceGE0dHRyPSJ2XFx4YzNcXHhhNGx1ZSIgLz4nCisKKyAgICA+Pj4gdHJlZSA9IEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pjx0XHhlNGc+dGV4dDwvdFx4ZTRnPiIpCisgICAgPj4+IEVULnRvc3RyaW5nKHRyZWUsICJ1dGYtOCIpCisgICAgJzx0XFx4YzNcXHhhNGc+dGV4dDwvdFxceGMzXFx4YTRnPicKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudCh1InRcdTAwZTRnIikKKyAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKKyAgICAnPHRcXHhjM1xceGE0ZyAvPicKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gdHJlZS5zZXQodSJcdTAwZTR0dHIiLCB1InZcdTAwZTRsdWUiKQorICAgID4+PiBFVC50b3N0cmluZyh0cmVlLCAidXRmLTgiKQorICAgICc8dGFnIFxceGMzXFx4YTR0dHI9InZcXHhjM1xceGE0bHVlIiAvPicKKworICAgICIiIgorCitkZWYgYnVnX3htbHRvb2xraXQ1NCgpOgorICAgICIiIgorCisgICAgcHJvYmxlbXMgaGFuZGxpbmcgaW50ZXJuYWxseSBkZWZpbmVkIGVudGl0aWVzCisKKyAgICA+Pj4gZSA9IEVULlhNTCgiPCFET0NUWVBFIGRvYyBbPCFFTlRJVFkgbGRvdHMgJyYjeDgyMzA7Jz5dPjxkb2M+Jmxkb3RzOzwvZG9jPiIpCisgICAgPj4+IHNlcmlhbGl6ZShlKQorICAgICc8ZG9jPiYjMzMzMjg7PC9kb2M+JworCisgICAgIiIiCisKK2RlZiBidWdfeG1sdG9vbGtpdDU1KCk6CisgICAgIiIiCisKKyAgICBtYWtlIHN1cmUgd2UncmUgcmVwb3J0aW5nIHRoZSBmaXJzdCBlcnJvciwgbm90IHRoZSBsYXN0CisKKyAgICA+Pj4gZSA9IEVULlhNTCgiPCFET0NUWVBFIGRvYyBTWVNURU0gJ2RvYy5kdGQnPjxkb2M+Jmxkb3RzOyZuZG90czsmcmRvdHM7PC9kb2M+IikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgUGFyc2VFcnJvcjogdW5kZWZpbmVkIGVudGl0eSAmbGRvdHM7OiBsaW5lIDEsIGNvbHVtbiAzNgorCisgICAgIiIiCisKK2NsYXNzIEV4Y2VwdGlvbkZpbGU6CisgICAgZGVmIHJlYWQoc2VsZiwgeCk6CisgICAgICAgIHJhaXNlIElPRXJyb3IKKworZGVmIHhtbHRvb2xraXQ2MCgpOgorICAgICIiIgorCisgICAgSGFuZGxlIGNyYXNoIGluIHN0cmVhbSBzb3VyY2UuCisgICAgPj4+IHRyZWUgPSBFVC5wYXJzZShFeGNlcHRpb25GaWxlKCkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIElPRXJyb3IKKworICAgICIiIgorCitYTUxUT09MS0lUNjJfRE9DID0gIiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwYXRlbnQtYXBwbGljYXRpb24tcHVibGljYXRpb24gU1lTVEVNICJwYXAtdjE1LTIwMDEtMDEtMzEuZHRkIiBbXT4KKzxwYXRlbnQtYXBwbGljYXRpb24tcHVibGljYXRpb24+Cis8c3ViZG9jLWFic3RyYWN0PgorPHBhcmFncmFwaCBpZD0iQS0wMDAxIiBsdmw9IjAiPkEgbmV3IGN1bHRpdmFyIG9mIEJlZ29uaWEgcGxhbnQgbmFtZWQgJmxzcXVvO0JDVDk4MDFCRUcmcnNxdW87LjwvcGFyYWdyYXBoPgorPC9zdWJkb2MtYWJzdHJhY3Q+Cis8L3BhdGVudC1hcHBsaWNhdGlvbi1wdWJsaWNhdGlvbj4iIiIKKworCitkZWYgeG1sdG9vbGtpdDYyKCk6CisgICAgIiIiCisKKyAgICBEb24ndCBjcmFzaCB3aGVuIHVzaW5nIGN1c3RvbSBlbnRpdGllcy4KKworICAgID4+PiB4bWx0b29sa2l0NjIoKQorICAgIHUnQSBuZXcgY3VsdGl2YXIgb2YgQmVnb25pYSBwbGFudCBuYW1lZCBcdTIwMThCQ1Q5ODAxQkVHXHUyMDE5LicKKworICAgICIiIgorICAgIEVOVElUSUVTID0ge3UncnNxdW8nOiB1J1x1MjAxOScsIHUnbHNxdW8nOiB1J1x1MjAxOCd9CisgICAgcGFyc2VyID0gRVQuWE1MVHJlZUJ1aWxkZXIoKQorICAgIHBhcnNlci5lbnRpdHkudXBkYXRlKEVOVElUSUVTKQorICAgIHBhcnNlci5mZWVkKFhNTFRPT0xLSVQ2Ml9ET0MpCisgICAgdCA9IHBhcnNlci5jbG9zZSgpCisgICAgcmV0dXJuIHQuZmluZCgnLi8vcGFyYWdyYXBoJykudGV4dAorCitkZWYgeG1sdG9vbGtpdDYzKCk6CisgICAgIiIiCisKKyAgICBDaGVjayByZWZlcmVuY2UgbGVhay4KKyAgICA+Pj4geG1sdG9vbGtpdDYzKCkKKyAgICA+Pj4gY291bnQgPSBzeXMuZ2V0cmVmY291bnQoTm9uZSkKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgLi4uICAgICB4bWx0b29sa2l0NjMoKQorICAgID4+PiBzeXMuZ2V0cmVmY291bnQoTm9uZSkgLSBjb3VudAorICAgIDAKKworICAgICIiIgorICAgIHRyZWUgPSBFVC5UcmVlQnVpbGRlcigpCisgICAgdHJlZS5zdGFydCgidGFnIiwge30pCisgICAgdHJlZS5kYXRhKCJ0ZXh0IikKKyAgICB0cmVlLmVuZCgidGFnIikKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK2RlZiBidWdfMjAwNzA4X25ld2xpbmUoKToKKyAgICByIiIiCisKKyAgICBQcmVzZXJ2ZSBuZXdsaW5lcyBpbiBhdHRyaWJ1dGVzLgorCisgICAgPj4+IGUgPSBFVC5FbGVtZW50KCdTb21lVGFnJywgdGV4dD0iZGVmIF9mKCk6XG4gIHJldHVybiAzXG4iKQorICAgID4+PiBFVC50b3N0cmluZyhlKQorICAgICc8U29tZVRhZyB0ZXh0PSJkZWYgX2YoKTomIzEwOyAgcmV0dXJuIDMmIzEwOyIgLz4nCisgICAgPj4+IEVULlhNTChFVC50b3N0cmluZyhlKSkuZ2V0KCJ0ZXh0IikKKyAgICAnZGVmIF9mKCk6XG4gIHJldHVybiAzXG4nCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlhNTChFVC50b3N0cmluZyhlKSkpCisgICAgJzxTb21lVGFnIHRleHQ9ImRlZiBfZigpOiYjMTA7ICByZXR1cm4gMyYjMTA7IiAvPicKKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOF9jbG9zZSgpOgorICAgICIiIgorCisgICAgVGVzdCBkZWZhdWx0IGJ1aWxkZXIuCisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcigpICMgZGVmYXVsdAorICAgID4+PiBwYXJzZXIuZmVlZCgiPGVsZW1lbnQ+c29tZSB0ZXh0PC9lbGVtZW50PiIpCisgICAgPj4+IHN1bW1hcml6ZShwYXJzZXIuY2xvc2UoKSkKKyAgICAnZWxlbWVudCcKKworICAgIFRlc3QgY3VzdG9tIGJ1aWxkZXIuCisgICAgPj4+IGNsYXNzIEVjaG9UYXJnZXQ6CisgICAgLi4uICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgLi4uICAgICAgICAgcmV0dXJuIEVULkVsZW1lbnQoImVsZW1lbnQiKSAjIHNpbXVsYXRlIHJvb3QKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKEVjaG9UYXJnZXQoKSkKKyAgICA+Pj4gcGFyc2VyLmZlZWQoIjxlbGVtZW50PnNvbWUgdGV4dDwvZWxlbWVudD4iKQorICAgID4+PiBzdW1tYXJpemUocGFyc2VyLmNsb3NlKCkpCisgICAgJ2VsZW1lbnQnCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDlfZGVmYXVsdF9uYW1lc3BhY2UoKToKKyAgICAiIiIKKworICAgID4+PiBlID0gRVQuRWxlbWVudCgie2RlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7ZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gc2VyaWFsaXplKGUsIGRlZmF1bHRfbmFtZXNwYWNlPSJkZWZhdWx0IikgIyAxCisgICAgJzxlbGVtIHhtbG5zPSJkZWZhdWx0Ij48ZWxlbSAvPjwvZWxlbT4nCisKKyAgICA+Pj4gZSA9IEVULkVsZW1lbnQoIntkZWZhdWx0fWVsZW0iKQorICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAie2RlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7bm90LWRlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHNlcmlhbGl6ZShlLCBkZWZhdWx0X25hbWVzcGFjZT0iZGVmYXVsdCIpICMgMgorICAgICc8ZWxlbSB4bWxucz0iZGVmYXVsdCIgeG1sbnM6bnMxPSJub3QtZGVmYXVsdCI+PGVsZW0gLz48bnMxOmVsZW0gLz48L2VsZW0+JworCisgICAgPj4+IGUgPSBFVC5FbGVtZW50KCJ7ZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gcyA9IEVULlN1YkVsZW1lbnQoZSwgIntkZWZhdWx0fWVsZW0iKQorICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAiZWxlbSIpICMgdW5wcmVmaXhlZCBuYW1lCisgICAgPj4+IHNlcmlhbGl6ZShlLCBkZWZhdWx0X25hbWVzcGFjZT0iZGVmYXVsdCIpICMgMworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBWYWx1ZUVycm9yOiBjYW5ub3QgdXNlIG5vbi1xdWFsaWZpZWQgbmFtZXMgd2l0aCBkZWZhdWx0X25hbWVzcGFjZSBvcHRpb24KKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOV9yZWdpc3Rlcl9uYW1lc3BhY2UoKToKKyAgICAiIiIKKworICAgID4+PiBFVC50b3N0cmluZyhFVC5FbGVtZW50KCJ7aHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0L310aXRsZSIpKQorICAgICc8bnMwOnRpdGxlIHhtbG5zOm5zMD0iaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIgLz4nCisgICAgPj4+IEVULnJlZ2lzdGVyX25hbWVzcGFjZSgiZm9vIiwgImh0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC8iKQorICAgID4+PiBFVC50b3N0cmluZyhFVC5FbGVtZW50KCJ7aHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0L310aXRsZSIpKQorICAgICc8Zm9vOnRpdGxlIHhtbG5zOmZvbz0iaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIgLz4nCisKKyAgICBBbmQgdGhlIER1YmxpbiBDb3JlIG5hbWVzcGFjZSBpcyBpbiB0aGUgZGVmYXVsdCBsaXN0OgorCisgICAgPj4+IEVULnRvc3RyaW5nKEVULkVsZW1lbnQoIntodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL310aXRsZSIpKQorICAgICc8ZGM6dGl0bGUgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiAvPicKKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOV9lbGVtZW50X2NvbW1lbnQoKToKKyAgICAiIiIKKworICAgIE5vdCBzdXJlIGlmIHRoaXMgY2FuIGJlIGZpeGVkLCByZWFsbHkgKHNpbmNlIHRoZSBzZXJpYWxpemVyIG5lZWRzCisgICAgRVQuQ29tbWVudCwgbm90IGNFVC5jb21tZW50KS4KKworICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCisgICAgPj4+IGEuYXBwZW5kKEVULkNvbW1lbnQoJ2ZvbycpKQorICAgID4+PiBhWzBdLnRhZyA9PSBFVC5Db21tZW50CisgICAgVHJ1ZQorCisgICAgPj4+IGEgPSBFVC5FbGVtZW50KCdhJykKKyAgICA+Pj4gYS5hcHBlbmQoRVQuUEkoJ2ZvbycpKQorICAgID4+PiBhWzBdLnRhZyA9PSBFVC5QSQorICAgIFRydWUKKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOV9lbGVtZW50X2luc2VydCgpOgorICAgICIiIgorCisgICAgPj4+IGEgPSBFVC5FbGVtZW50KCdhJykKKyAgICA+Pj4gYiA9IEVULlN1YkVsZW1lbnQoYSwgJ2InKQorICAgID4+PiBjID0gRVQuU3ViRWxlbWVudChhLCAnYycpCisgICAgPj4+IGQgPSBFVC5FbGVtZW50KCdkJykKKyAgICA+Pj4gYS5pbnNlcnQoMCwgZCkKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoYSkKKyAgICBbJ2QnLCAnYicsICdjJ10KKyAgICA+Pj4gYS5pbnNlcnQoLTEsIGQpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGEpCisgICAgWydkJywgJ2InLCAnZCcsICdjJ10KKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOV9pdGVyX2NvbW1lbnQoKToKKyAgICAiIiIKKworICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCisgICAgPj4+IGIgPSBFVC5TdWJFbGVtZW50KGEsICdiJykKKyAgICA+Pj4gY29tbWVudF9iID0gRVQuQ29tbWVudCgiVEVTVC1iIikKKyAgICA+Pj4gYi5hcHBlbmQoY29tbWVudF9iKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChhLml0ZXIoRVQuQ29tbWVudCkpCisgICAgWyc8Q29tbWVudD4nXQorCisgICAgIiIiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcmVwb3J0ZWQgb24gYnVncy5weXRob24ub3JnCisKK2RlZiBidWdfMTUzNDYzMCgpOgorICAgICIiIgorCisgICAgPj4+IGJvYiA9IEVULlRyZWVCdWlsZGVyKCkKKyAgICA+Pj4gZSA9IGJvYi5kYXRhKCJkYXRhIikKKyAgICA+Pj4gZSA9IGJvYi5zdGFydCgidGFnIiwge30pCisgICAgPj4+IGUgPSBib2IuZW5kKCJ0YWciKQorICAgID4+PiBlID0gYm9iLmNsb3NlKCkKKyAgICA+Pj4gc2VyaWFsaXplKGUpCisgICAgJzx0YWcgLz4nCisKKyAgICAiIiIKKworZGVmIGNoZWNrX2lzc3VlNjIzMygpOgorICAgICIiIgorCisgICAgPj4+IGUgPSBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04Jz8+PGJvZHk+dFxceGMzXFx4YTNnPC9ib2R5PiIpCisgICAgPj4+IEVULnRvc3RyaW5nKGUsICdhc2NpaScpCisgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2FzY2lpJz8+XFxuPGJvZHk+dCYjMjI3O2c8L2JvZHk+IgorICAgID4+PiBlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+PGJvZHk+dFxceGUzZzwvYm9keT4iKQorICAgID4+PiBFVC50b3N0cmluZyhlLCAnYXNjaWknKQorICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/Plxcbjxib2R5PnQmIzIyNztnPC9ib2R5PiIKKworICAgICIiIgorCitkZWYgY2hlY2tfaXNzdWUzMTUxKCk6CisgICAgIiIiCisKKyAgICA+Pj4gZSA9IEVULlhNTCgnPHByZWZpeDpsb2NhbG5hbWUgeG1sbnM6cHJlZml4PSIke3N0dWZmfSIvPicpCisgICAgPj4+IGUudGFnCisgICAgJ3ske3N0dWZmfX1sb2NhbG5hbWUnCisgICAgPj4+IHQgPSBFVC5FbGVtZW50VHJlZShlKQorICAgID4+PiBFVC50b3N0cmluZyhlKQorICAgICc8bnMwOmxvY2FsbmFtZSB4bWxuczpuczA9IiR7c3R1ZmZ9IiAvPicKKworICAgICIiIgorCitkZWYgY2hlY2tfaXNzdWU2NTY1KCk6CisgICAgIiIiCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGJvZHk+PHRhZy8+PC9ib2R5PiIpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0pCisgICAgWyd0YWcnXQorICAgID4+PiBuZXdlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGVsZW1bOl0gPSBuZXdlbGVtWzpdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0pCisgICAgWyd0YWcnLCAndGFnJywgJ3NlY3Rpb24nXQorCisgICAgIiIiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitjbGFzcyBDbGVhbkNvbnRleHQob2JqZWN0KToKKyAgICAiIiJQcm92aWRlIGRlZmF1bHQgbmFtZXNwYWNlIG1hcHBpbmcgYW5kIHBhdGggY2FjaGUuIiIiCisgICAgY2hlY2t3YXJuaW5ncyA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWlldD1GYWxzZSk6CisgICAgICAgIGlmIHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyOgorICAgICAgICAgICAgIyB1bmRlciAtT08sIGRvY3Rlc3RzIGNhbm5vdCBiZSBydW4gYW5kIHRoZXJlZm9yZSBub3QgYWxsIHdhcm5pbmdzCisgICAgICAgICAgICAjIHdpbGwgYmUgZW1pdHRlZAorICAgICAgICAgICAgcXVpZXQgPSBUcnVlCisgICAgICAgIGRlcHJlY2F0aW9ucyA9ICgKKyAgICAgICAgICAgICMgU2VhcmNoIGJlaGF2aW91ciBpcyBicm9rZW4gaWYgc2VhcmNoIHBhdGggc3RhcnRzIHdpdGggIi8iLgorICAgICAgICAgICAgKCJUaGlzIHNlYXJjaCBpcyBicm9rZW4gaW4gMS4zIGFuZCBlYXJsaWVyLCBhbmQgd2lsbCBiZSBmaXhlZCAiCisgICAgICAgICAgICAgImluIGEgZnV0dXJlIHZlcnNpb24uICBJZiB5b3UgcmVseSBvbiB0aGUgY3VycmVudCBiZWhhdmlvdXIsICIKKyAgICAgICAgICAgICAiY2hhbmdlIGl0IHRvICcuKyciLCBGdXR1cmVXYXJuaW5nKSwKKyAgICAgICAgICAgICMgRWxlbWVudC5nZXRjaGlsZHJlbigpIGFuZCBFbGVtZW50LmdldGl0ZXJhdG9yKCkgYXJlIGRlcHJlY2F0ZWQuCisgICAgICAgICAgICAoIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCisgICAgICAgICAgICAgIlVzZSAuKyBpbnN0ZWFkLiIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAoIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCisgICAgICAgICAgICAgIlVzZSAuKyBpbnN0ZWFkLiIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgIyBYTUxQYXJzZXIuZG9jdHlwZSgpIGlzIGRlcHJlY2F0ZWQuCisgICAgICAgICAgICAoIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiAgRGVmaW5lIGRvY3R5cGUuLiAiCisgICAgICAgICAgICAgIm1ldGhvZCBvbiB0aGUgVHJlZUJ1aWxkZXIgdGFyZ2V0LiIsIERlcHJlY2F0aW9uV2FybmluZykpCisgICAgICAgIHNlbGYuY2hlY2t3YXJuaW5ncyA9IHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygqZGVwcmVjYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQ9cXVpZXQpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKKyAgICAgICAgc2VsZi5fbnNtYXAgPSBFbGVtZW50VHJlZS5fbmFtZXNwYWNlX21hcAorICAgICAgICBzZWxmLl9wYXRoX2NhY2hlID0gRWxlbWVudFRyZWUuRWxlbWVudFBhdGguX2NhY2hlCisgICAgICAgICMgQ29weSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbWFwcGluZworICAgICAgICBFbGVtZW50VHJlZS5fbmFtZXNwYWNlX21hcCA9IHNlbGYuX25zbWFwLmNvcHkoKQorICAgICAgICAjIENvcHkgdGhlIHBhdGggY2FjaGUgKHNob3VsZCBiZSBlbXB0eSkKKyAgICAgICAgRWxlbWVudFRyZWUuRWxlbWVudFBhdGguX2NhY2hlID0gc2VsZi5fcGF0aF9jYWNoZS5jb3B5KCkKKyAgICAgICAgc2VsZi5jaGVja3dhcm5pbmdzLl9fZW50ZXJfXygpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKKyAgICAgICAgIyBSZXN0b3JlIG1hcHBpbmcgYW5kIHBhdGggY2FjaGUKKyAgICAgICAgRWxlbWVudFRyZWUuX25hbWVzcGFjZV9tYXAgPSBzZWxmLl9uc21hcAorICAgICAgICBFbGVtZW50VHJlZS5FbGVtZW50UGF0aC5fY2FjaGUgPSBzZWxmLl9wYXRoX2NhY2hlCisgICAgICAgIHNlbGYuY2hlY2t3YXJuaW5ncy5fX2V4aXRfXygqYXJncykKKworCitkZWYgdGVzdF9tYWluKG1vZHVsZV9uYW1lPSd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfeG1sX2V0cmVlCi0gICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfeG1sX2V0cmVlLCB2ZXJib3NpdHk9VHJ1ZSkKKworICAgIHVzZV9weV9tb2R1bGUgPSAobW9kdWxlX25hbWUgPT0gJ3htbC5ldHJlZS5FbGVtZW50VHJlZScpCisKKyAgICAjIFRoZSBzYW1lIGRvY3Rlc3RzIGFyZSB1c2VkIGZvciBib3RoIHRoZSBQeXRob24gYW5kIHRoZSBDIGltcGxlbWVudGF0aW9ucworICAgIGFzc2VydCB0ZXN0X3htbF9ldHJlZS5FVC5fX25hbWVfXyA9PSBtb2R1bGVfbmFtZQorCisgICAgIyBYWFggdGhlIEMgbW9kdWxlIHNob3VsZCBnaXZlIHRoZSBzYW1lIHdhcm5pbmdzIGFzIHRoZSBQeXRob24gbW9kdWxlCisgICAgd2l0aCBDbGVhbkNvbnRleHQocXVpZXQ9bm90IHVzZV9weV9tb2R1bGUpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF94bWxfZXRyZWUsIHZlcmJvc2l0eT1UcnVlKQorCisgICAgIyBUaGUgbW9kdWxlIHNob3VsZCBub3QgYmUgY2hhbmdlZCBieSB0aGUgdGVzdHMKKyAgICBhc3NlcnQgdGVzdF94bWxfZXRyZWUuRVQuX19uYW1lX18gPT0gbW9kdWxlX25hbWUKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKaW5kZXggN2M1NzAwMC4uNzhhNmE5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CkBAIC0xLDMxICsxLDExIEBACiAjIHhtbC5ldHJlZSB0ZXN0IGZvciBjRWxlbWVudFRyZWUKIAotaW1wb3J0IGRvY3Rlc3QKLWltcG9ydCBzeXMKLQogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAotZnJvbSB4bWwuZXRyZWUgaW1wb3J0IGNFbGVtZW50VHJlZSBhcyBFVAorY0VUID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3htbC5ldHJlZS5jRWxlbWVudFRyZWUnKQogCi1TQU1QTEVfWE1MID0gIiIiCi08Ym9keT4KLSAgPHRhZz50ZXh0PC90YWc+Ci0gIDx0YWcgLz4KLSAgPHNlY3Rpb24+Ci0gICAgPHRhZz5zdWJ0ZXh0PC90YWc+Ci0gIDwvc2VjdGlvbj4KLTwvYm9keT4KLSIiIgogCi1TQU1QTEVfWE1MX05TID0gIiIiCi08Ym9keSB4bWxucz0iaHR0cDovL2VmZmJvdC5vcmcvbnMiPgotICA8dGFnPnRleHQ8L3RhZz4KLSAgPHRhZyAvPgotICA8c2VjdGlvbj4KLSAgICA8dGFnPnN1YnRleHQ8L3RhZz4KLSAgPC9zZWN0aW9uPgotPC9ib2R5PgotIiIiCisjIGNFbGVtZW50VHJlZSBzcGVjaWZpYyB0ZXN0cwogCiBkZWYgc2FuaXR5KCk6CiAgICAgIiIiCkBAIC0zNCwxOTEgKzE0LDI2IEBACiAgICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBjRWxlbWVudFRyZWUKICAgICAiIiIKIAotZGVmIGNoZWNrX21ldGhvZChtZXRob2QpOgotICAgIGlmIG5vdCBoYXNhdHRyKG1ldGhvZCwgJ19fY2FsbF9fJyk6Ci0gICAgICAgIHByaW50IG1ldGhvZCwgIm5vdCBjYWxsYWJsZSIKLQotZGVmIHNlcmlhbGl6ZShFVCwgZWxlbSwgZW5jb2Rpbmc9Tm9uZSk6Ci0gICAgaW1wb3J0IFN0cmluZ0lPCi0gICAgZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLSAgICB0cmVlID0gRVQuRWxlbWVudFRyZWUoZWxlbSkKLSAgICBpZiBlbmNvZGluZzoKLSAgICAgICAgdHJlZS53cml0ZShmaWxlLCBlbmNvZGluZykKLSAgICBlbHNlOgotICAgICAgICB0cmVlLndyaXRlKGZpbGUpCi0gICAgcmV0dXJuIGZpbGUuZ2V0dmFsdWUoKQotCi1kZWYgc3VtbWFyaXplKGVsZW0pOgotICAgIHJldHVybiBlbGVtLnRhZwotCi1kZWYgc3VtbWFyaXplX2xpc3Qoc2VxKToKLSAgICByZXR1cm4gbWFwKHN1bW1hcml6ZSwgc2VxKQotCi1kZWYgaW50ZXJmYWNlKCk6Ci0gICAgIiIiCi0gICAgVGVzdCBlbGVtZW50IHRyZWUgaW50ZXJmYWNlLgotCi0gICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciLCBrZXk9InZhbHVlIikKLSAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpCi0KLSAgICBNYWtlIHN1cmUgYWxsIHN0YW5kYXJkIGVsZW1lbnQgbWV0aG9kcyBleGlzdC4KLQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5hcHBlbmQpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lmluc2VydCkKLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQucmVtb3ZlKQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5nZXRjaGlsZHJlbikKLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZCkKLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZGFsbCkKLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZHRleHQpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmNsZWFyKQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5nZXQpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LnNldCkKLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQua2V5cykKLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlbXMpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmdldGl0ZXJhdG9yKQotCi0gICAgQmFzaWMgbWV0aG9kIHNhbml0eSBjaGVja3MuCi0KLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtZW50KSAjIDEKLSAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKLSAgICA+Pj4gc3ViZWxlbWVudCA9IEVULkVsZW1lbnQoInN1YnRhZyIpCi0gICAgPj4+IGVsZW1lbnQuYXBwZW5kKHN1YmVsZW1lbnQpCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyAgMgotICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48L3RhZz4nCi0gICAgPj4+IGVsZW1lbnQuaW5zZXJ0KDAsIHN1YmVsZW1lbnQpCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyAzCi0gICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjxzdWJ0YWcgLz48L3RhZz4nCi0gICAgPj4+IGVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyA0Ci0gICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjwvdGFnPicKLSAgICA+Pj4gZWxlbWVudC5yZW1vdmUoc3ViZWxlbWVudCkKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtZW50KSAjIDUKLSAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKLSAgICA+Pj4gZWxlbWVudC5yZW1vdmUoc3ViZWxlbWVudCkKLSAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgVmFsdWVFcnJvcjogbGlzdC5yZW1vdmUoeCk6IHggbm90IGluIGxpc3QKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtZW50KSAjIDYKLSAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKLSAgICAiIiIKLQotZGVmIGZpbmQoKToKLSAgICAiIiIKLSAgICBUZXN0IGZpbmQgbWV0aG9kcyAoaW5jbHVkaW5nIHhwYXRoIHN5bnRheCkuCi0KLSAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQotICAgID4+PiBlbGVtLmZpbmQoInRhZyIpLnRhZwotICAgICd0YWcnCi0gICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInRhZyIpLnRhZwotICAgICd0YWcnCi0gICAgPj4+IGVsZW0uZmluZCgic2VjdGlvbi90YWciKS50YWcKLSAgICAndGFnJwotICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZwotICAgICd0YWcnCi0gICAgPj4+IGVsZW0uZmluZHRleHQoInRhZyIpCi0gICAgJ3RleHQnCi0gICAgPj4+IGVsZW0uZmluZHRleHQoInRvZyIpCi0gICAgPj4+IGVsZW0uZmluZHRleHQoInRvZyIsICJkZWZhdWx0IikKLSAgICAnZGVmYXVsdCcKLSAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInRhZyIpCi0gICAgJ3RleHQnCi0gICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vdGFnIikKLSAgICAnc3VidGV4dCcKLSAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInNlY3Rpb24vdGFnIikKLSAgICAnc3VidGV4dCcKLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKLSAgICBbJ3RhZycsICd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIioiKSkKLSAgICBbJ3RhZycsICd0YWcnLCAnc2VjdGlvbiddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnIikpCi0gICAgWyd0YWcnLCAndGFnJywgJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi90YWciKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8vdGFnIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vKiIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy8qIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLi8vKiIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqLyoiKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8vKiIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqL3RhZyIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqLy4vdGFnIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vdGFnIikpCi0gICAgWyd0YWcnLCAndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWciKSkKLSAgICBbJ3RhZycsICd0YWcnLCAndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy4vdGFnIikpCi0gICAgWyd0YWcnLCAndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZGFsbCgiL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmRhbGwoIi4vdGFnIikpCi0gICAgWyd0YWcnLCAndGFnJ10KLSAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MX05TKQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRhZyIpKQotICAgIFtdCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgie2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyIpKQotICAgIFsne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZycsICd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy97aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnIikpCi0gICAgWyd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJywgJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyddCi0gICAgIiIiCi0KLWRlZiBwYXJzZWxpdGVyYWwoKToKLSAgICByIiIiCi0KLSAgICA+Pj4gZWxlbWVudCA9IEVULlhNTCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKLSAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3lzLnN0ZG91dCkKLSAgICA8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4KLSAgICA+Pj4gZWxlbWVudCA9IEVULmZyb21zdHJpbmcoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCi0gICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN5cy5zdGRvdXQpCi0gICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+Ci0gICAgPj4+IHByaW50IEVULnRvc3RyaW5nKGVsZW1lbnQpCi0gICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+Ci0gICAgPj4+IHByaW50IEVULnRvc3RyaW5nKGVsZW1lbnQsICJhc2NpaSIpCi0gICAgPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nYXNjaWknPz4KLSAgICA8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4KLSAgICA+Pj4gXywgaWRzID0gRVQuWE1MSUQoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCi0gICAgPj4+IGxlbihpZHMpCi0gICAgMAotICAgID4+PiBfLCBpZHMgPSBFVC5YTUxJRCgiPGh0bWw+PGJvZHkgaWQ9J2JvZHknPnRleHQ8L2JvZHk+PC9odG1sPiIpCi0gICAgPj4+IGxlbihpZHMpCi0gICAgMQotICAgID4+PiBpZHNbImJvZHkiXS50YWcKLSAgICAnYm9keScKLSAgICAiIiIKLQotZGVmIGNoZWNrX2VuY29kaW5nKGVuY29kaW5nKToKLSAgICAiIiIKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImFzY2lpIikKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoInVzLWFzY2lpIikKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImlzby04ODU5LTEiKQotICAgID4+PiBjaGVja19lbmNvZGluZygiaXNvLTg4NTktMTUiKQotICAgID4+PiBjaGVja19lbmNvZGluZygiY3A0MzciKQotICAgID4+PiBjaGVja19lbmNvZGluZygibWFjLXJvbWFuIikKLSAgICAiIiIKLSAgICBFVC5YTUwoCi0gICAgICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSclcyc/Pjx4bWwgLz4iICUgZW5jb2RpbmcKLSAgICAgICAgKQotCi1kZWYgYnVnXzE1MzQ2MzAoKToKLSAgICAiIiIKLSAgICA+Pj4gYm9iID0gRVQuVHJlZUJ1aWxkZXIoKQotICAgID4+PiBlID0gYm9iLmRhdGEoImRhdGEiKQotICAgID4+PiBlID0gYm9iLnN0YXJ0KCJ0YWciLCB7fSkKLSAgICA+Pj4gZSA9IGJvYi5lbmQoInRhZyIpCi0gICAgPj4+IGUgPSBib2IuY2xvc2UoKQotICAgID4+PiBzZXJpYWxpemUoRVQsIGUpCi0gICAgJzx0YWcgLz4nCi0gICAgIiIiCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfeG1sX2V0cmVlX2MKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfeG1sX2V0cmVlLCB0ZXN0X3htbF9ldHJlZV9jCisKKyAgICAjIFJ1biB0aGUgdGVzdHMgc3BlY2lmaWMgdG8gdGhlIEMgaW1wbGVtZW50YXRpb24KICAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF94bWxfZXRyZWVfYywgdmVyYm9zaXR5PVRydWUpCiAKKyAgICAjIEFzc2lnbiB0aGUgQyBpbXBsZW1lbnRhdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgZG9jdGVzdHMKKyAgICAjIFBhdGNoIHRoZSBfX25hbWVfXywgdG8gcHJldmVudCBjb25mdXNpb24gd2l0aCB0aGUgcHVyZSBQeXRob24gdGVzdAorICAgIHB5RVQgPSB0ZXN0X3htbF9ldHJlZS5FVAorICAgIHB5X19uYW1lX18gPSB0ZXN0X3htbF9ldHJlZS5fX25hbWVfXworICAgIHRlc3RfeG1sX2V0cmVlLkVUID0gY0VUCisgICAgaWYgX19uYW1lX18gIT0gJ19fbWFpbl9fJzoKKyAgICAgICAgdGVzdF94bWxfZXRyZWUuX19uYW1lX18gPSBfX25hbWVfXworICAgIHRyeToKKyAgICAgICAgIyBSdW4gdGhlIHNhbWUgdGVzdCBzdWl0ZSBhcyB4bWwuZXRyZWUuRWxlbWVudFRyZWUKKyAgICAgICAgdGVzdF94bWxfZXRyZWUudGVzdF9tYWluKG1vZHVsZV9uYW1lPSd4bWwuZXRyZWUuY0VsZW1lbnRUcmVlJykKKyAgICBmaW5hbGx5OgorICAgICAgICB0ZXN0X3htbF9ldHJlZS5FVCA9IHB5RVQKKyAgICAgICAgdGVzdF94bWxfZXRyZWUuX19uYW1lX18gPSBweV9fbmFtZV9fCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sbGliLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxsaWIucHkKaW5kZXggNjhiODgzYS4uOTY2OTc4YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxsaWIucHkKQEAgLTM2LDkgKzM2LDkgQEAKICAgICAgICAgaC5mZWVkKG5zZG9jKQogICAgICAgICBoLmNsb3NlKCkKICAgICAgICAgIyBUaGUgZGVmYXVsdCBuYW1lc3BhY2UgYXBwbGllcyB0byBlbGVtZW50cy4uLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhoLm5hbWUsICJVUkkgZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsICJVUkkgZm9vIikKICAgICAgICAgIyBidXQgbm90IHRvIGF0dHJpYnV0ZXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaC5hdHRyLCB7J2F0dHInOid2YWwnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmF0dHIsIHsnYXR0cic6J3ZhbCd9KQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKaW5kZXggYjlhYzJlNy4uNjMxMGM5NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKQEAgLTUsMTYgKzUsMjAgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHhtbHJwY2xpYgogaW1wb3J0IFNpbXBsZVhNTFJQQ1NlcnZlcgotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IG1pbWV0b29scwogaW1wb3J0IGh0dHBsaWIKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IG9zCi1mcm9tIGltcCBpbXBvcnQgcmVsb2FkCitpbXBvcnQgcmUKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKIHRyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCit0cnk6CiAgICAgdW5pY29kZQogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBoYXZlX3VuaWNvZGUgPSBGYWxzZQpAQCAtNDAsOCArNDQsOCBAQAogY2xhc3MgWE1MUlBDVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfZHVtcF9sb2FkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeG1scnBjbGliLmxvYWRzKHhtbHJwY2xpYi5kdW1wcygoYWxpc3QsKSkpWzBdWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHhtbHJwY2xpYi5sb2Fkcyh4bWxycGNsaWIuZHVtcHMoKGFsaXN0LCkpKVswXVswXSkKIAogICAgIGRlZiB0ZXN0X2R1bXBfYmFyZV9kYXRldGltZShzZWxmKToKICAgICAgICAgIyBUaGlzIGNoZWNrcyB0aGF0IGFuIHVud3JhcHBlZCBkYXRldGltZS5kYXRlIG9iamVjdCBjYW4gYmUgaGFuZGxlZApAQCAtNTEsNDEgKzU1LDQxIEBACiAgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwNSwgMDIsIDEwLCAxMSwgNDEsIDIzKQogICAgICAgICBzID0geG1scnBjbGliLmR1bXBzKChkdCwpKQogICAgICAgICAobmV3ZHQsKSwgbSA9IHhtbHJwY2xpYi5sb2FkcyhzLCB1c2VfZGF0ZXRpbWU9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3ZHQsIGR0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2R0LCBkdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBOb25lKQogCiAgICAgICAgIChuZXdkdCwpLCBtID0geG1scnBjbGliLmxvYWRzKHMsIHVzZV9kYXRldGltZT0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXdkdCwgeG1scnBjbGliLkRhdGVUaW1lKCcyMDA1MDIxMFQxMTo0MToyMycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2R0LCB4bWxycGNsaWIuRGF0ZVRpbWUoJzIwMDUwMjEwVDExOjQxOjIzJykpCiAKICAgICBkZWYgdGVzdF9kYXRldGltZV9iZWZvcmVfMTkwMChzZWxmKToKICAgICAgICAgIyBzYW1lIGFzIGJlZm9yZSBidXQgd2l0aCBhIGRhdGUgYmVmb3JlIDE5MDAKICAgICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZSgxLCAwMiwgMTAsIDExLCA0MSwgMjMpCiAgICAgICAgIHMgPSB4bWxycGNsaWIuZHVtcHMoKGR0LCkpCiAgICAgICAgIChuZXdkdCwpLCBtID0geG1scnBjbGliLmxvYWRzKHMsIHVzZV9kYXRldGltZT0xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXdkdCwgZHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3ZHQsIGR0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIE5vbmUpCiAKICAgICAgICAgKG5ld2R0LCksIG0gPSB4bWxycGNsaWIubG9hZHMocywgdXNlX2RhdGV0aW1lPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld2R0LCB4bWxycGNsaWIuRGF0ZVRpbWUoJzAwMDEwMjEwVDExOjQxOjIzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3ZHQsIHhtbHJwY2xpYi5EYXRlVGltZSgnMDAwMTAyMTBUMTE6NDE6MjMnKSkKIAogICAgIGRlZiB0ZXN0X2NtcF9kYXRldGltZV9EYXRlVGltZShzZWxmKToKICAgICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKICAgICAgICAgZHQgPSB4bWxycGNsaWIuRGF0ZVRpbWUobm93LnRpbWV0dXBsZSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oZHQgPT0gbm93KQotICAgICAgICBzZWxmLmFzc2VydF8obm93ID09IGR0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZHQgPT0gbm93KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm93ID09IGR0KQogICAgICAgICB0aGVuID0gbm93ICsgZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9NCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRoZW4gPj0gZHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkdCA8IHRoZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aGVuID49IGR0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZHQgPCB0aGVuKQogCiAgICAgZGVmIHRlc3RfYnVnXzExNjQ5MTIgKHNlbGYpOgogICAgICAgICBkID0geG1scnBjbGliLkRhdGVUaW1lKCkKICAgICAgICAgKChuZXdfZCwpLCBkdW1teSkgPSB4bWxycGNsaWIubG9hZHMoeG1scnBjbGliLmR1bXBzKChkLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHJlc3BvbnNlPVRydWUpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShuZXdfZC52YWx1ZSwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG5ld19kLnZhbHVlLCBzdHIpCiAKICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBvdXRwdXQgb2YgZHVtcHMoKSBpcyBzdGlsbCBhbiA4LWJpdCBzdHJpbmcKICAgICAgICAgcyA9IHhtbHJwY2xpYi5kdW1wcygobmV3X2QsKSwgbWV0aG9kcmVzcG9uc2U9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uocywgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHMsIHN0cikKIAogICAgIGRlZiB0ZXN0X25ld3N0eWxlX2NsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBUKG9iamVjdCk6CkBAIC05NCw3ICs5OCw3IEBACiAgICAgICAgIHQueCA9IDEwMAogICAgICAgICB0LnkgPSAiSGVsbG8iCiAgICAgICAgICgodDIsKSwgZHVtbXkpID0geG1scnBjbGliLmxvYWRzKHhtbHJwY2xpYi5kdW1wcygodCwpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModDIsIHQuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQuX19kaWN0X18pCiAKICAgICBkZWYgdGVzdF9kdW1wX2JpZ19sb25nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB4bWxycGNsaWIuZHVtcHMsICgyTCoqOTksKSkKQEAgLTEzNyw4ICsxNDEsOCBAQAogICAgICAgICB2YWx1ZSA9IGFsaXN0ICsgW05vbmVdCiAgICAgICAgIGFyZzEgPSAoYWxpc3QgKyBbTm9uZV0sKQogICAgICAgICBzdHJnID0geG1scnBjbGliLmR1bXBzKGFyZzEsIGFsbG93X25vbmU9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHhtbHJwY2xpYi5sb2FkcyhzdHJnKVswXVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB4bWxycGNsaWIubG9hZHMoc3RyZylbMF1bMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeG1scnBjbGliLmR1bXBzLCAoYXJnMSwpKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZ19pc3N1ZXMoc2VsZik6CkBAIC0xNjAsMjggKzE2NCwyOCBAQAogICAgICAgICAgICAgICAgICAgIiIiCiAKICAgICAgICAgIyBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nKCkgbm9ybWFsbHkgZG9lc24ndCBleGlzdCBhZnRlciBzaXRlLnB5IGlzCi0gICAgICAgICMgbG9hZGVkLiAgcmVsb2FkKHN5cykgaXMgdGhlIHdheSB0byBnZXQgaXQgYmFjay4KKyAgICAgICAgIyBsb2FkZWQuICBJbXBvcnQgYSB0ZW1wb3JhcnkgZnJlc2ggY29weSB0byBnZXQgYWNjZXNzIHRvIGl0CisgICAgICAgICMgYnV0IHRoZW4gcmVzdG9yZSB0aGUgb3JpZ2luYWwgY29weSB0byBhdm9pZCBtZXNzaW5nIHdpdGgKKyAgICAgICAgIyBvdGhlciBwb3RlbnRpYWxseSBtb2RpZmllZCBzeXMgbW9kdWxlIGF0dHJpYnV0ZXMKICAgICAgICAgb2xkX2VuY29kaW5nID0gc3lzLmdldGRlZmF1bHRlbmNvZGluZygpCi0gICAgICAgIHNldGRlZmF1bHRlbmNvZGluZ19leGlzdGVkID0gaGFzYXR0cihzeXMsICJzZXRkZWZhdWx0ZW5jb2RpbmciKQotICAgICAgICByZWxvYWQoc3lzKSAjIHVnaCEKLSAgICAgICAgc3lzLnNldGRlZmF1bHRlbmNvZGluZygiaXNvLTg4NTktMSIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIChzLCBkKSwgbSA9IHhtbHJwY2xpYi5sb2Fkcyh1dGY4KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnNldGRlZmF1bHRlbmNvZGluZyhvbGRfZW5jb2RpbmcpCi0gICAgICAgICAgICBpZiBub3Qgc2V0ZGVmYXVsdGVuY29kaW5nX2V4aXN0ZWQ6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5zZXRkZWZhdWx0ZW5jb2RpbmcKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuQ2xlYW5JbXBvcnQoJ3N5cycpOgorICAgICAgICAgICAgaW1wb3J0IHN5cyBhcyB0ZW1wX3N5cworICAgICAgICAgICAgdGVtcF9zeXMuc2V0ZGVmYXVsdGVuY29kaW5nKCJpc28tODg1OS0xIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAocywgZCksIG0gPSB4bWxycGNsaWIubG9hZHModXRmOCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGVtcF9zeXMuc2V0ZGVmYXVsdGVuY29kaW5nKG9sZF9lbmNvZGluZykKIAogICAgICAgICBpdGVtcyA9IGQuaXRlbXMoKQogICAgICAgICBpZiBoYXZlX3VuaWNvZGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLCB1ImFiYyBceDk1IikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHMsIHVuaWNvZGUpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaXRlbXMsIFsodSJkZWYgXHg5NiIsIHUiZ2hpIFx4OTciKV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShpdGVtc1swXVswXSwgdW5pY29kZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShpdGVtc1swXVsxXSwgdW5pY29kZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHUiYWJjIFx4OTUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHMsIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBbKHUiZGVmIFx4OTYiLCB1ImdoaSBceDk3IildKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW1zWzBdWzBdLCB1bmljb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW1zWzBdWzFdLCB1bmljb2RlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocywgImFiYyBceGMyXHg5NSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpdGVtcywgWygiZGVmIFx4YzJceDk2IiwgImdoaSBceGMyXHg5NyIpXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImFiYyBceGMyXHg5NSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBbKCJkZWYgXHhjMlx4OTYiLCAiZ2hpIFx4YzJceDk3IildKQogCiAKIGNsYXNzIEhlbHBlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTIwMCw4ICsyMDQsOCBAQAogICAgICAgICBmID0geG1scnBjbGliLkZhdWx0KDQyLCAnVGVzdCBGYXVsdCcpCiAgICAgICAgIHMgPSB4bWxycGNsaWIuZHVtcHMoKGYsKSkKICAgICAgICAgKG5ld2YsKSwgbSA9IHhtbHJwY2xpYi5sb2FkcyhzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXdmLCB7J2ZhdWx0Q29kZSc6IDQyLCAnZmF1bHRTdHJpbmcnOiAnVGVzdCBGYXVsdCd9KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2YsIHsnZmF1bHRDb2RlJzogNDIsICdmYXVsdFN0cmluZyc6ICdUZXN0IEZhdWx0J30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgTm9uZSkKIAogICAgICAgICBzID0geG1scnBjbGliLk1hcnNoYWxsZXIoKS5kdW1wcyhmKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWxycGNsaWIuRmF1bHQsIHhtbHJwY2xpYi5sb2FkcywgcykKQEAgLTI2OCwxMiArMjcyLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQyKSwgZCkKIAogCi1QT1JUID0gTm9uZQorQUREUiA9IFBPUlQgPSBVUkwgPSBOb25lCiAKICMgVGhlIGV2dCBpcyBzZXQgdHdpY2UuICBGaXJzdCB3aGVuIHRoZSBzZXJ2ZXIgaXMgcmVhZHkgdG8gc2VydmUuCiAjIFNlY29uZCB3aGVuIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gc2h1dGRvd24uICBUaGUgdXNlciBtdXN0IGNsZWFyCiAjIHRoZSBldmVudCBhZnRlciBpdCBoYXMgYmVlbiBzZXQgdGhlIGZpcnN0IHRpbWUgdG8gY2F0Y2ggdGhlIHNlY29uZCBzZXQuCi1kZWYgaHR0cF9zZXJ2ZXIoZXZ0LCBudW1yZXF1ZXN0cyk6CitkZWYgaHR0cF9zZXJ2ZXIoZXZ0LCBudW1yZXF1ZXN0cywgcmVxdWVzdEhhbmRsZXI9Tm9uZSk6CiAgICAgY2xhc3MgVGVzdEluc3RhbmNlQ2xhc3M6CiAgICAgICAgIGRlZiBkaXYoc2VsZiwgeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4geCAvLyB5CkBAIC0yOTQsMTMgKzI5OCwyMCBAQAogICAgICAgICAgICAgcy5zZXRibG9ja2luZyhUcnVlKQogICAgICAgICAgICAgcmV0dXJuIHMsIHBvcnQKIAorICAgIGlmIG5vdCByZXF1ZXN0SGFuZGxlcjoKKyAgICAgICAgcmVxdWVzdEhhbmRsZXIgPSBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKKyAgICBzZXJ2ID0gTXlYTUxSUENTZXJ2ZXIoKCJsb2NhbGhvc3QiLCAwKSwgcmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBiaW5kX2FuZF9hY3RpdmF0ZT1GYWxzZSkKICAgICB0cnk6Ci0gICAgICAgIHNlcnYgPSBNeVhNTFJQQ1NlcnZlcigoImxvY2FsaG9zdCIsIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nUmVxdWVzdHM9RmFsc2UsIGJpbmRfYW5kX2FjdGl2YXRlPUZhbHNlKQogICAgICAgICBzZXJ2LnNvY2tldC5zZXR0aW1lb3V0KDMpCiAgICAgICAgIHNlcnYuc2VydmVyX2JpbmQoKQotICAgICAgICBnbG9iYWwgUE9SVAotICAgICAgICBQT1JUID0gc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQorICAgICAgICBnbG9iYWwgQUREUiwgUE9SVCwgVVJMCisgICAgICAgIEFERFIsIFBPUlQgPSBzZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpCisgICAgICAgICNjb25uZWN0IHRvIElQIGFkZHJlc3MgZGlyZWN0bHkuICBUaGlzIGF2b2lkcyBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKQorICAgICAgICAjdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdG8gImxvY2FsaG9zdCIgdXNpbmcgYWxsIGFkZHJlc3MgZmFtaWxpZXMsIHdoaWNoCisgICAgICAgICNjYXVzZXMgc2xvd2Rvd24gZS5nLiBvbiB2aXN0YSB3aGljaCBzdXBwb3J0cyBBRl9JTkVUNi4gIFRoZSBzZXJ2ZXIgbGlzdGVucworICAgICAgICAjb24gQUZfSU5FVCBvbmx5LgorICAgICAgICBVUkwgPSAiaHR0cDovLyVzOiVkIiUoQUREUiwgUE9SVCkKICAgICAgICAgc2Vydi5zZXJ2ZXJfYWN0aXZhdGUoKQogICAgICAgICBzZXJ2LnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zKCkKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9tdWx0aWNhbGxfZnVuY3Rpb25zKCkKQEAgLTMyMiw2ICszMzMsNjYgQEAKICAgICAgICAgUE9SVCA9IE5vbmUKICAgICAgICAgZXZ0LnNldCgpCiAKK2RlZiBodHRwX211bHRpX3NlcnZlcihldnQsIG51bXJlcXVlc3RzLCByZXF1ZXN0SGFuZGxlcj1Ob25lKToKKyAgICBjbGFzcyBUZXN0SW5zdGFuY2VDbGFzczoKKyAgICAgICAgZGVmIGRpdihzZWxmLCB4LCB5KToKKyAgICAgICAgICAgIHJldHVybiB4IC8vIHkKKworICAgICAgICBkZWYgX21ldGhvZEhlbHAoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBpZiBuYW1lID09ICdkaXYnOgorICAgICAgICAgICAgICAgIHJldHVybiAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJworCisgICAgZGVmIG15X2Z1bmN0aW9uKCk6CisgICAgICAgICcnJ1RoaXMgaXMgbXkgZnVuY3Rpb24nJycKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGNsYXNzIE15WE1MUlBDU2VydmVyKFNpbXBsZVhNTFJQQ1NlcnZlci5NdWx0aVBhdGhYTUxSUENTZXJ2ZXIpOgorICAgICAgICBkZWYgZ2V0X3JlcXVlc3Qoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0aGUgc29ja2V0IGlzIGFsd2F5cyBub24tYmxvY2tpbmcuICBPbiBMaW51eCwgc29ja2V0CisgICAgICAgICAgICAjIGF0dHJpYnV0ZXMgYXJlIG5vdCBpbmhlcml0ZWQgbGlrZSB0aGV5IGFyZSBvbiAqQlNEIGFuZCBXaW5kb3dzLgorICAgICAgICAgICAgcywgcG9ydCA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCisgICAgICAgICAgICBzLnNldGJsb2NraW5nKFRydWUpCisgICAgICAgICAgICByZXR1cm4gcywgcG9ydAorCisgICAgaWYgbm90IHJlcXVlc3RIYW5kbGVyOgorICAgICAgICByZXF1ZXN0SGFuZGxlciA9IFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgorICAgIGNsYXNzIE15UmVxdWVzdEhhbmRsZXIocmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBycGNfcGF0aHMgPSBbXQorCisgICAgc2VydiA9IE15WE1MUlBDU2VydmVyKCgibG9jYWxob3N0IiwgMCksIE15UmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBiaW5kX2FuZF9hY3RpdmF0ZT1GYWxzZSkKKyAgICBzZXJ2LnNvY2tldC5zZXR0aW1lb3V0KDMpCisgICAgc2Vydi5zZXJ2ZXJfYmluZCgpCisgICAgdHJ5OgorICAgICAgICBnbG9iYWwgQUREUiwgUE9SVCwgVVJMCisgICAgICAgIEFERFIsIFBPUlQgPSBzZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpCisgICAgICAgICNjb25uZWN0IHRvIElQIGFkZHJlc3MgZGlyZWN0bHkuICBUaGlzIGF2b2lkcyBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKQorICAgICAgICAjdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdG8gImxvY2FsaG9zdCIgdXNpbmcgYWxsIGFkZHJlc3MgZmFtaWxpZXMsIHdoaWNoCisgICAgICAgICNjYXVzZXMgc2xvd2Rvd24gZS5nLiBvbiB2aXN0YSB3aGljaCBzdXBwb3J0cyBBRl9JTkVUNi4gIFRoZSBzZXJ2ZXIgbGlzdGVucworICAgICAgICAjb24gQUZfSU5FVCBvbmx5LgorICAgICAgICBVUkwgPSAiaHR0cDovLyVzOiVkIiUoQUREUiwgUE9SVCkKKyAgICAgICAgc2Vydi5zZXJ2ZXJfYWN0aXZhdGUoKQorICAgICAgICBwYXRocyA9IFsiL2ZvbyIsICIvZm9vL2JhciJdCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgZCA9IHNlcnYuYWRkX2Rpc3BhdGNoZXIocGF0aCwgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgICAgIGQucmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9mdW5jdGlvbnMoKQorICAgICAgICAgICAgZC5yZWdpc3Rlcl9tdWx0aWNhbGxfZnVuY3Rpb25zKCkKKyAgICAgICAgc2Vydi5nZXRfZGlzcGF0Y2hlcihwYXRoc1swXSkucmVnaXN0ZXJfZnVuY3Rpb24ocG93KQorICAgICAgICBzZXJ2LmdldF9kaXNwYXRjaGVyKHBhdGhzWzFdKS5yZWdpc3Rlcl9mdW5jdGlvbihsYW1iZGEgeCx5OiB4K3ksICdhZGQnKQorICAgICAgICBldnQuc2V0KCkKKworICAgICAgICAjIGhhbmRsZSB1cCB0byAnbnVtcmVxdWVzdHMnIHJlcXVlc3RzCisgICAgICAgIHdoaWxlIG51bXJlcXVlc3RzID4gMDoKKyAgICAgICAgICAgIHNlcnYuaGFuZGxlX3JlcXVlc3QoKQorICAgICAgICAgICAgbnVtcmVxdWVzdHMgLT0gMQorCisgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgc2Vydi5zb2NrZXQuY2xvc2UoKQorICAgICAgICBQT1JUID0gTm9uZQorICAgICAgICBldnQuc2V0KCkKKwogIyBUaGlzIGZ1bmN0aW9uIHByZXZlbnRzIGVycm9ycyBsaWtlOgogIyAgICA8UHJvdG9jb2xFcnJvciBmb3IgbG9jYWxob3N0OjU3NTI3L1JQQzI6IDUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3I+CiBkZWYgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgpAQCAtMzQzLDM3ICs0MTQsNDMgQEAKIAogICAgIHJldHVybiBGYWxzZQogCi0jIE5PVEU6IFRoZSB0ZXN0cyBpbiBTaW1wbGVTZXJ2ZXJUZXN0Q2FzZSB3aWxsIGlnbm9yZSBmYWlsdXJlcyBjYXVzZWQgYnkKLSMgInRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIiBleGNlcHRpb25zIHJhaXNlZCBpbiBTaW1wbGVYTUxSUENTZXJ2ZXIuICBUaGlzCi0jIGNvbmRpdGlvbiBvY2N1cnMgaW5mcmVxdWVudGx5IG9uIHNvbWUgcGxhdGZvcm1zLCBmcmVxdWVudGx5IG9uIG90aGVycywgYW5kCi0jIGlzIGFwcGFyZW50bHkgY2F1c2VkIGJ5IHVzaW5nIFNpbXBsZVhNTFJQQ1NlcnZlciB3aXRoIGEgbm9uLWJsb2NraW5nIHNvY2tldC4KLSMgSWYgdGhlIHNlcnZlciBjbGFzcyBpcyB1cGRhdGVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSB0byBoYW5kbGUgdGhpcwotIyBzaXR1YXRpb24gbW9yZSBncmFjZWZ1bGx5LCB0aGVzZSB0ZXN0cyBzaG91bGQgYmUgbW9kaWZpZWQgYXBwcm9wcmlhdGVseS4KK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBCYXNlU2VydmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHJlcXVlc3RIYW5kbGVyID0gTm9uZQorICAgIHJlcXVlc3RfY291bnQgPSAxCisgICAgdGhyZWFkRnVuYyA9IHN0YXRpY21ldGhvZChodHRwX3NlcnZlcikKIAotY2xhc3MgU2ltcGxlU2VydmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIyBlbmFibGUgdHJhY2ViYWNrIHJlcG9ydGluZwogICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVyLl9zZW5kX3RyYWNlYmFja19oZWFkZXIgPSBUcnVlCiAKICAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICAjIHN0YXJ0IHNlcnZlciB0aHJlYWQgdG8gaGFuZGxlIHJlcXVlc3RzCi0gICAgICAgIHNlcnZfYXJncyA9IChzZWxmLmV2dCwgMSkKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9aHR0cF9zZXJ2ZXIsIGFyZ3M9c2Vydl9hcmdzKS5zdGFydCgpCisgICAgICAgIHNlcnZfYXJncyA9IChzZWxmLmV2dCwgc2VsZi5yZXF1ZXN0X2NvdW50LCBzZWxmLnJlcXVlc3RIYW5kbGVyKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnRocmVhZEZ1bmMsIGFyZ3M9c2Vydl9hcmdzKS5zdGFydCgpCiAKICAgICAgICAgIyB3YWl0IGZvciB0aGUgc2VydmVyIHRvIGJlIHJlYWR5Ci0gICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBzZWxmLmV2dC53YWl0KDEwKQogICAgICAgICBzZWxmLmV2dC5jbGVhcigpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgICMgd2FpdCBvbiB0aGUgc2VydmVyIHRocmVhZCB0byB0ZXJtaW5hdGUKLSAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIHNlbGYuZXZ0LndhaXQoMTApCiAKICAgICAgICAgIyBkaXNhYmxlIHRyYWNlYmFjayByZXBvcnRpbmcKICAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyID0gRmFsc2UKIAorIyBOT1RFOiBUaGUgdGVzdHMgaW4gU2ltcGxlU2VydmVyVGVzdENhc2Ugd2lsbCBpZ25vcmUgZmFpbHVyZXMgY2F1c2VkIGJ5CisjICJ0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSIgZXhjZXB0aW9ucyByYWlzZWQgaW4gU2ltcGxlWE1MUlBDU2VydmVyLiAgVGhpcworIyBjb25kaXRpb24gb2NjdXJzIGluZnJlcXVlbnRseSBvbiBzb21lIHBsYXRmb3JtcywgZnJlcXVlbnRseSBvbiBvdGhlcnMsIGFuZAorIyBpcyBhcHBhcmVudGx5IGNhdXNlZCBieSB1c2luZyBTaW1wbGVYTUxSUENTZXJ2ZXIgd2l0aCBhIG5vbi1ibG9ja2luZyBzb2NrZXQKKyMgSWYgdGhlIHNlcnZlciBjbGFzcyBpcyB1cGRhdGVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSB0byBoYW5kbGUgdGhpcworIyBzaXR1YXRpb24gbW9yZSBncmFjZWZ1bGx5LCB0aGVzZSB0ZXN0cyBzaG91bGQgYmUgbW9kaWZpZWQgYXBwcm9wcmlhdGVseS4KKworY2xhc3MgU2ltcGxlU2VydmVyVGVzdENhc2UoQmFzZVNlcnZlclRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zaW1wbGUxKHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KCdodHRwOi8vbG9jYWxob3N0OiVkJyAlIFBPUlQpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCkBAIC0zODEsMTEgKzQ1OCwyNiBAQAogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBnZXRhdHRyKGUsICJoZWFkZXJzIiwgIiIpKSkKIAorICAgIGRlZiB0ZXN0X25vbmFzY2lpKHNlbGYpOgorICAgICAgICBzdGFydF9zdHJpbmcgPSAnUFxOe0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQ0lSQ1VNRkxFWH10JworICAgICAgICBlbmRfc3RyaW5nID0gJ2hcTntMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEhPUk59bicKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZGQoc3RhcnRfc3RyaW5nLCBlbmRfc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc3RyaW5nICsgZW5kX3N0cmluZykKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgdW5hdmFpbGFibGUgZXJyb3JzLgorICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZ2V0YXR0cihlLCAiaGVhZGVycyIsICIiKSkpCisKKwogICAgICMgW2NoXSBUaGUgdGVzdCA0MDQgaXMgY2F1c2luZyBsb3RzIG9mIGZhbHNlIGFsYXJtcy4KICAgICBkZWYgWFhYdGVzdF80MDQoc2VsZik6CiAgICAgICAgICMgc2VuZCBQT1NUIHdpdGggaHR0cGxpYiwgaXQgc2hvdWxkIHJldHVybiA0MDQgaGVhZGVyIGFuZAogICAgICAgICAjICdOb3QgRm91bmQnIG1lc3NhZ2UuCi0gICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdsb2NhbGhvc3QnLCBQT1JUKQorICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihBRERSLCBQT1JUKQogICAgICAgICBjb25uLnJlcXVlc3QoJ1BPU1QnLCAnL3RoaXMtaXMtbm90LXZhbGlkJykKICAgICAgICAgcmVzcG9uc2UgPSBjb25uLmdldHJlc3BvbnNlKCkKICAgICAgICAgY29ubi5jbG9zZSgpCkBAIC0zOTUsNyArNDg3LDcgQEAKIAogICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24xKHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KCdodHRwOi8vbG9jYWxob3N0OiVkJyAlIFBPUlQpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIG1ldGggPSBwLnN5c3RlbS5saXN0TWV0aG9kcygpCiAgICAgICAgICAgICBleHBlY3RlZF9tZXRob2RzID0gc2V0KFsncG93JywgJ2RpdicsICdteV9mdW5jdGlvbicsICdhZGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5saXN0TWV0aG9kcycsICdzeXN0ZW0ubWV0aG9kSGVscCcsCkBAIC00MTAsNyArNTAyLDcgQEAKICAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uMihzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB0ZXN0IF9tZXRob2RIZWxwKCkKLSAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoJ2h0dHA6Ly9sb2NhbGhvc3Q6JWQnICUgUE9SVCkKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgZGl2aGVscCA9IHAuc3lzdGVtLm1ldGhvZEhlbHAoJ2RpdicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdmhlbHAsICdUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nKQogICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpLCBlOgpAQCAtNDE5LDEwICs1MTEsMTIgQEAKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZ2V0YXR0cihlLCAiaGVhZGVycyIsICIiKSkpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uMyhzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB0ZXN0IG5hdGl2ZSBkb2MKLSAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoJ2h0dHA6Ly9sb2NhbGhvc3Q6JWQnICUgUE9SVCkKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgbXlmdW5jdGlvbiA9IHAuc3lzdGVtLm1ldGhvZEhlbHAoJ215X2Z1bmN0aW9uJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlmdW5jdGlvbiwgJ1RoaXMgaXMgbXkgZnVuY3Rpb24nKQogICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpLCBlOgpAQCAtNDM1LDcgKzUyOSw3IEBACiAgICAgICAgICMgdGhlIFNpbXBsZVhNTFJQQ1NlcnZlciBkb2Vzbid0IHN1cHBvcnQgc2lnbmF0dXJlcywgYnV0CiAgICAgICAgICMgYXQgbGVhc3QgY2hlY2sgdGhhdCB3ZSBjYW4gdHJ5IG1ha2luZyB0aGUgY2FsbAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KCdodHRwOi8vbG9jYWxob3N0OiVkJyAlIFBPUlQpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIGRpdnNpZyA9IHAuc3lzdGVtLm1ldGhvZFNpZ25hdHVyZSgnZGl2JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2c2lnLCAnc2lnbmF0dXJlcyBub3Qgc3VwcG9ydGVkJykKICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKQEAgLTQ0Niw3ICs1NDAsNyBAQAogCiAgICAgZGVmIHRlc3RfbXVsdGljYWxsKHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KCdodHRwOi8vbG9jYWxob3N0OiVkJyAlIFBPUlQpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIG11bHRpY2FsbCA9IHhtbHJwY2xpYi5NdWx0aUNhbGwocCkKICAgICAgICAgICAgIG11bHRpY2FsbC5hZGQoMiwzKQogICAgICAgICAgICAgbXVsdGljYWxsLnBvdyg2LDgpCkBAIC00NjMsNyArNTU3LDcgQEAKIAogICAgIGRlZiB0ZXN0X25vbl9leGlzdGluZ19tdWx0aWNhbGwoc2VsZik6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoJ2h0dHA6Ly9sb2NhbGhvc3Q6JWQnICUgUE9SVCkKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgbXVsdGljYWxsID0geG1scnBjbGliLk11bHRpQ2FsbChwKQogICAgICAgICAgICAgbXVsdGljYWxsLnRoaXNfaXNfbm90X2V4aXN0cygpCiAgICAgICAgICAgICByZXN1bHQgPSBtdWx0aWNhbGwoKQpAQCAtNDg3LDExICs1ODEsMTgxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIucmVzb2x2ZV9kb3R0ZWRfYXR0cmlidXRlLCBzdHIsICdfX2FkZCcpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKFNpbXBsZVhNTFJQQ1NlcnZlci5yZXNvbHZlX2RvdHRlZF9hdHRyaWJ1dGUoc3RyLCAndGl0bGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFNpbXBsZVhNTFJQQ1NlcnZlci5yZXNvbHZlX2RvdHRlZF9hdHRyaWJ1dGUoc3RyLCAndGl0bGUnKSkKICAgICAgICAgIyBHZXQgdGhlIHRlc3QgdG8gcnVuIGZhc3RlciBieSBzZW5kaW5nIGEgcmVxdWVzdCB3aXRoIHRlc3Rfc2ltcGxlMS4KICAgICAgICAgIyBUaGlzIGF2b2lkcyB3YWl0aW5nIGZvciB0aGUgc29ja2V0IHRpbWVvdXQuCiAgICAgICAgIHNlbGYudGVzdF9zaW1wbGUxKCkKIAorY2xhc3MgTXVsdGlQYXRoU2VydmVyVGVzdENhc2UoQmFzZVNlcnZlclRlc3RDYXNlKToKKyAgICB0aHJlYWRGdW5jID0gc3RhdGljbWV0aG9kKGh0dHBfbXVsdGlfc2VydmVyKQorICAgIHJlcXVlc3RfY291bnQgPSAyCisgICAgZGVmIHRlc3RfcGF0aDEoc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKyIvZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWxycGNsaWIuRmF1bHQsIHAuYWRkLCA2LCA4KQorICAgIGRlZiB0ZXN0X3BhdGgyKHNlbGYpOgorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCsiL2Zvby9iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYWRkKDYsOCksIDYrOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1scnBjbGliLkZhdWx0LCBwLnBvdywgNiwgOCkKKworI0EgdGVzdCBjYXNlIHRoYXQgdmVyaWZpZXMgdGhhdCBhIHNlcnZlciB1c2luZyB0aGUgSFRUUC8xLjEga2VlcC1hbGl2ZSBtZWNoYW5pc20KKyNkb2VzIGluZGVlZCBzZXJ2ZSBzdWJzZXF1ZW50IHJlcXVlc3RzIG9uIHRoZSBzYW1lIGNvbm5lY3Rpb24KK2NsYXNzIEJhc2VLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgorICAgICNhIHJlcXVlc3QgaGFuZGxlciB0aGF0IHN1cHBvcnRzIGtlZXAtYWxpdmUgYW5kIGxvZ3MgcmVxdWVzdHMgaW50byBhCisgICAgI2NsYXNzIHZhcmlhYmxlCisgICAgY2xhc3MgUmVxdWVzdEhhbmRsZXIoU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgcGFyZW50Q2xhc3MgPSBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKKyAgICAgICAgcHJvdG9jb2xfdmVyc2lvbiA9ICdIVFRQLzEuMScKKyAgICAgICAgbXlSZXF1ZXN0cyA9IFtdCisgICAgICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgICAgICBzZWxmLm15UmVxdWVzdHMuYXBwZW5kKFtdKQorICAgICAgICAgICAgc2VsZi5yZXFpZHggPSBsZW4oc2VsZi5teVJlcXVlc3RzKS0xCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnRDbGFzcy5oYW5kbGUoc2VsZikKKyAgICAgICAgZGVmIGhhbmRsZV9vbmVfcmVxdWVzdChzZWxmKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYucGFyZW50Q2xhc3MuaGFuZGxlX29uZV9yZXF1ZXN0KHNlbGYpCisgICAgICAgICAgICBzZWxmLm15UmVxdWVzdHNbc2VsZi5yZXFpZHhdLmFwcGVuZChzZWxmLnJhd19yZXF1ZXN0bGluZSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIHJlcXVlc3RIYW5kbGVyID0gUmVxdWVzdEhhbmRsZXIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICNjbGVhciByZXF1ZXN0IGxvZworICAgICAgICBzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHMgPSBbXQorICAgICAgICByZXR1cm4gQmFzZVNlcnZlclRlc3RDYXNlLnNldFVwKHNlbGYpCisKKyNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgYSBzZXJ2ZXIgdXNpbmcgdGhlIEhUVFAvMS4xIGtlZXAtYWxpdmUgbWVjaGFuaXNtCisjZG9lcyBpbmRlZWQgc2VydmUgc3Vic2VxdWVudCByZXF1ZXN0cyBvbiB0aGUgc2FtZSBjb25uZWN0aW9uCitjbGFzcyBLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEoQmFzZUtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAjZG8gdGhyZWUgcmVxdWVzdHMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisKKyAgICAgICAgI3RoZXkgc2hvdWxkIGhhdmUgYWxsIGJlZW4gaGFuZGxlZCBieSBhIHNpbmdsZSByZXF1ZXN0IGhhbmRsZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzKSwgMSkKKworICAgICAgICAjY2hlY2sgdGhhdCB3ZSBkaWQgYXQgbGVhc3QgdHdvICh0aGUgdGhpcmQgbWF5IGJlIHBlbmRpbmcgYXBwZW5kCisgICAgICAgICNkdWUgdG8gdGhyZWFkIHNjaGVkdWxpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHNbLTFdKSwgMikKKworI3Rlc3Qgc3BlY2lhbCBhdHRyaWJ1dGUgYWNjZXNzIG9uIHRoZSBzZXJ2ZXJwcm94eSwgdGhyb3VnaCB0aGUgX19jYWxsX18KKyNmdW5jdGlvbi4KK2NsYXNzIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMihCYXNlS2VlcGFsaXZlU2VydmVyVGVzdENhc2UpOgorICAgICNhc2sgZm9yIHR3byBrZWVwYWxpdmUgcmVxdWVzdHMgdG8gYmUgaGFuZGxlZC4KKyAgICByZXF1ZXN0X2NvdW50PTIKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgI2RvIHNvbWUgcmVxdWVzdHMgd2l0aCBjbG9zZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgcCgiY2xvc2UiKSgpICN0aGlzIHNob3VsZCB0cmlnZ2VyIGEgbmV3IGtlZXAtYWxpdmUgcmVxdWVzdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorCisgICAgICAgICN0aGV5IHNob3VsZCBoYXZlIGFsbCBiZWVuIHR3byByZXF1ZXN0IGhhbmRsZXJzLCBlYWNoIGhhdmluZyBsb2dnZWQgYXQgbGVhc3QKKyAgICAgICAgI3R3byBjb21wbGV0ZSByZXF1ZXN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChsZW4oc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzWy0xXSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHNbLTJdKSwgMikKKworICAgIGRlZiB0ZXN0X3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICNkbyBzb21lIHJlcXVlc3RzIHdpdGggY2xvc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgcCgidHJhbnNwb3J0IikuY2xvc2UoKSAjc2FtZSBhcyBhYm92ZSwgcmVhbGx5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0cyksIDIpCisKKyNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgZ3ppcCBlbmNvZGluZyB3b3JrcyBpbiBib3RoIGRpcmVjdGlvbnMKKyMoZm9yIGEgcmVxdWVzdCBhbmQgdGhlIHJlc3BvbnNlKQorY2xhc3MgR3ppcFNlcnZlclRlc3RDYXNlKEJhc2VTZXJ2ZXJUZXN0Q2FzZSk6CisgICAgI2EgcmVxdWVzdCBoYW5kbGVyIHRoYXQgc3VwcG9ydHMga2VlcC1hbGl2ZSBhbmQgbG9ncyByZXF1ZXN0cyBpbnRvIGEKKyAgICAjY2xhc3MgdmFyaWFibGUKKyAgICBjbGFzcyBSZXF1ZXN0SGFuZGxlcihTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBwYXJlbnRDbGFzcyA9IFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgorICAgICAgICBwcm90b2NvbF92ZXJzaW9uID0gJ0hUVFAvMS4xJworCisgICAgICAgIGRlZiBkb19QT1NUKHNlbGYpOgorICAgICAgICAgICAgI3N0b3JlIGNvbnRlbnQgb2YgbGFzdCByZXF1ZXN0IGluIGNsYXNzCisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5jb250ZW50X2xlbmd0aCA9IGludChzZWxmLmhlYWRlcnNbImNvbnRlbnQtbGVuZ3RoIl0pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnRDbGFzcy5kb19QT1NUKHNlbGYpCisgICAgcmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlcgorCisgICAgY2xhc3MgVHJhbnNwb3J0KHhtbHJwY2xpYi5UcmFuc3BvcnQpOgorICAgICAgICAjY3VzdG9tIHRyYW5zcG9ydCwgc3RvcmVzIHRoZSByZXNwb25zZSBsZW5ndGggZm9yIG91ciBwZXJ1c2FsCisgICAgICAgIGZha2VfZ3ppcCA9IEZhbHNlCisgICAgICAgIGRlZiBwYXJzZV9yZXNwb25zZShzZWxmLCByZXNwb25zZSk6CisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlX2xlbmd0aD1pbnQocmVzcG9uc2UuZ2V0aGVhZGVyKCJjb250ZW50LWxlbmd0aCIsIDApKQorICAgICAgICAgICAgcmV0dXJuIHhtbHJwY2xpYi5UcmFuc3BvcnQucGFyc2VfcmVzcG9uc2Uoc2VsZiwgcmVzcG9uc2UpCisKKyAgICAgICAgZGVmIHNlbmRfY29udGVudChzZWxmLCBjb25uZWN0aW9uLCBib2R5KToKKyAgICAgICAgICAgIGlmIHNlbGYuZmFrZV9nemlwOgorICAgICAgICAgICAgICAgICNhZGQgYSBsb25lIGd6aXAgaGVhZGVyIHRvIGluZHVjZSBkZWNvZGUgZXJyb3IgcmVtb3RlbHkKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnB1dGhlYWRlcigiQ29udGVudC1FbmNvZGluZyIsICJnemlwIikKKyAgICAgICAgICAgIHJldHVybiB4bWxycGNsaWIuVHJhbnNwb3J0LnNlbmRfY29udGVudChzZWxmLCBjb25uZWN0aW9uLCBib2R5KQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBCYXNlU2VydmVyVGVzdENhc2Uuc2V0VXAoc2VsZikKKworICAgIGRlZiB0ZXN0X2d6aXBfcmVxdWVzdChzZWxmKToKKyAgICAgICAgdCA9IHNlbGYuVHJhbnNwb3J0KCkKKyAgICAgICAgdC5lbmNvZGVfdGhyZXNob2xkID0gTm9uZQorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCwgdHJhbnNwb3J0PXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgYSA9IHNlbGYuUmVxdWVzdEhhbmRsZXIuY29udGVudF9sZW5ndGgKKyAgICAgICAgdC5lbmNvZGVfdGhyZXNob2xkID0gMCAjdHVybiBvbiByZXF1ZXN0IGVuY29kaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgYiA9IHNlbGYuUmVxdWVzdEhhbmRsZXIuY29udGVudF9sZW5ndGgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGE+YikKKworICAgIGRlZiB0ZXN0X2JhZF9nemlwX3JlcXVlc3Qoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLlRyYW5zcG9ydCgpCisgICAgICAgIHQuZW5jb2RlX3RocmVzaG9sZCA9IE5vbmUKKyAgICAgICAgdC5mYWtlX2d6aXAgPSBUcnVlCisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMLCB0cmFuc3BvcnQ9dCkKKyAgICAgICAgY20gPSBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5jb21waWxlKHIiXGI0MDBcYiIpKQorICAgICAgICB3aXRoIGNtOgorICAgICAgICAgICAgcC5wb3coNiwgOCkKKworICAgIGRlZiB0ZXN0X2dzaXBfcmVzcG9uc2Uoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLlRyYW5zcG9ydCgpCisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMLCB0cmFuc3BvcnQ9dCkKKyAgICAgICAgb2xkID0gc2VsZi5yZXF1ZXN0SGFuZGxlci5lbmNvZGVfdGhyZXNob2xkCisgICAgICAgIHNlbGYucmVxdWVzdEhhbmRsZXIuZW5jb2RlX3RocmVzaG9sZCA9IE5vbmUgI25vIGVuY29kaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgYSA9IHQucmVzcG9uc2VfbGVuZ3RoCisgICAgICAgIHNlbGYucmVxdWVzdEhhbmRsZXIuZW5jb2RlX3RocmVzaG9sZCA9IDAgI2Fsd2F5cyBlbmNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBiID0gdC5yZXNwb25zZV9sZW5ndGgKKyAgICAgICAgc2VsZi5yZXF1ZXN0SGFuZGxlci5lbmNvZGVfdGhyZXNob2xkID0gb2xkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhPmIpCisKKyNUZXN0IHNwZWNpYWwgYXR0cmlidXRlcyBvZiB0aGUgU2VydmVyUHJveHkgb2JqZWN0CitjbGFzcyBTZXJ2ZXJQcm94eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnNldFVwKHNlbGYpCisgICAgICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgICAgIHNlbGYudXJsID0gVVJMCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdpdGhvdXQgdGhyZWFkaW5nLCBodHRwX3NlcnZlcigpIGFuZCBodHRwX211bHRpX3NlcnZlcigpIHdpbGwgbm90CisgICAgICAgICAgICAjIGJlIGV4ZWN1dGVkIGFuZCBVUkwgaXMgc3RpbGwgZXF1YWwgdG8gTm9uZS4gJ2h0dHA6Ly8nIGlzIGEganVzdAorICAgICAgICAgICAgIyBlbm91Z2ggdG8gY2hvb3NlIHRoZSBzY2hlbWUgKEhUVFApCisgICAgICAgICAgICBzZWxmLnVybCA9ICdodHRwOi8vJworCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoc2VsZi51cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnY2xvc2UnKSgpLCBOb25lKQorCisgICAgZGVmIHRlc3RfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICB0ID0geG1scnBjbGliLlRyYW5zcG9ydCgpCisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoc2VsZi51cmwsIHRyYW5zcG9ydD10KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ3RyYW5zcG9ydCcpLCB0KQorCiAjIFRoaXMgaXMgYSBjb250cml2ZWQgd2F5IHRvIG1ha2UgYSBmYWlsdXJlIG9jY3VyIG9uIHRoZSBzZXJ2ZXIgc2lkZQogIyBpbiBvcmRlciB0byB0ZXN0IHRoZSBfc2VuZF90cmFjZWJhY2tfaGVhZGVyIGZsYWcgb24gdGhlIHNlcnZlcgogY2xhc3MgRmFpbGluZ01lc3NhZ2VDbGFzcyhtaW1ldG9vbHMuTWVzc2FnZSk6CkBAIC01MDIsNiArNzY2LDcgQEAKICAgICAgICAgcmV0dXJuIG1pbWV0b29scy5NZXNzYWdlLl9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKIAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgRmFpbGluZ1NlcnZlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKQEAgLTUzMSw3ICs3OTYsNyBAQAogCiAgICAgICAgICMgdGVzdCBhIGNhbGwgdGhhdCBzaG91bGRuJ3QgZmFpbCBqdXN0IGFzIGEgc21va2UgdGVzdAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KCdodHRwOi8vbG9jYWxob3N0OiVkJyAlIFBPUlQpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCkBAIC01NDQsNyArODA5LDcgQEAKICAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLk1lc3NhZ2VDbGFzcyA9IEZhaWxpbmdNZXNzYWdlQ2xhc3MKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KCdodHRwOi8vbG9jYWxob3N0OiVkJyAlIFBPUlQpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHAucG93KDYsOCkKICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCkBAIC01NjQsNyArODI5LDcgQEAKICAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyID0gVHJ1ZQogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoJ2h0dHA6Ly9sb2NhbGhvc3Q6JWQnICUgUE9SVCkKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgcC5wb3coNiw4KQogICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpLCBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKQEAgLTU4NSw2MyArODUwLDYzIEBACiAKICAgICBkZWYgdGVzdF9jZ2lfZ2V0KHNlbGYpOgogICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgotICAgICAgICAgICAgZW52LnNldCgnUkVRVUVTVF9NRVRIT0QnLCAnR0VUJykKKyAgICAgICAgICAgIGVudlsnUkVRVUVTVF9NRVRIT0QnXSA9ICdHRVQnCiAgICAgICAgICAgICAjIGlmIHRoZSBtZXRob2QgaXMgR0VUIGFuZCBubyByZXF1ZXN0X3RleHQgaXMgZ2l2ZW4sIGl0IHJ1bnMgaGFuZGxlX2dldAogICAgICAgICAgICAgIyBnZXQgc3lzb3V0IG91dHB1dAotICAgICAgICAgICAgdG1wID0gc3lzLnN0ZG91dAotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInciKQotICAgICAgICAgICAgc2VsZi5jZ2kuaGFuZGxlX3JlcXVlc3QoKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5jbG9zZSgpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gdG1wCisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBkYXRhX291dDoKKyAgICAgICAgICAgICAgICBzZWxmLmNnaS5oYW5kbGVfcmVxdWVzdCgpCiAKICAgICAgICAgICAgICMgcGFyc2UgU3RhdHVzIGhlYWRlcgotICAgICAgICAgICAgaGFuZGxlID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiciIpLnJlYWQoKQorICAgICAgICAgICAgZGF0YV9vdXQuc2VlaygwKQorICAgICAgICAgICAgaGFuZGxlID0gZGF0YV9vdXQucmVhZCgpCiAgICAgICAgICAgICBzdGF0dXMgPSBoYW5kbGUuc3BsaXQoKVsxXQogICAgICAgICAgICAgbWVzc2FnZSA9ICcgJy5qb2luKGhhbmRsZS5zcGxpdCgpWzI6NF0pCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAnNDAwJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgJ0JhZCBSZXF1ZXN0JykKIAotICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9jZ2lfeG1scnBjX3Jlc3BvbnNlKHNlbGYpOgogICAgICAgICBkYXRhID0gIiIiPD94bWwgdmVyc2lvbj0nMS4wJz8+Ci08bWV0aG9kQ2FsbD4KLSAgICA8bWV0aG9kTmFtZT50ZXN0X21ldGhvZDwvbWV0aG9kTmFtZT4KLSAgICA8cGFyYW1zPgotICAgICAgICA8cGFyYW0+Ci0gICAgICAgICAgICA8dmFsdWU+PHN0cmluZz5mb288L3N0cmluZz48L3ZhbHVlPgotICAgICAgICA8L3BhcmFtPgotICAgICAgICA8cGFyYW0+Ci0gICAgICAgICAgICA8dmFsdWU+PHN0cmluZz5iYXI8L3N0cmluZz48L3ZhbHVlPgotICAgICAgICA8L3BhcmFtPgotICAgICA8L3BhcmFtcz4KLTwvbWV0aG9kQ2FsbD4KLSIiIgotICAgICAgICBvcGVuKCJ4bWxkYXRhLnR4dCIsICJ3Iikud3JpdGUoZGF0YSkKLSAgICAgICAgdG1wMSA9IHN5cy5zdGRpbgotICAgICAgICB0bXAyID0gc3lzLnN0ZG91dAorICAgICAgICA8bWV0aG9kQ2FsbD4KKyAgICAgICAgICAgIDxtZXRob2ROYW1lPnRlc3RfbWV0aG9kPC9tZXRob2ROYW1lPgorICAgICAgICAgICAgPHBhcmFtcz4KKyAgICAgICAgICAgICAgICA8cGFyYW0+CisgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT48c3RyaW5nPmZvbzwvc3RyaW5nPjwvdmFsdWU+CisgICAgICAgICAgICAgICAgPC9wYXJhbT4KKyAgICAgICAgICAgICAgICA8cGFyYW0+CisgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT48c3RyaW5nPmJhcjwvc3RyaW5nPjwvdmFsdWU+CisgICAgICAgICAgICAgICAgPC9wYXJhbT4KKyAgICAgICAgICAgIDwvcGFyYW1zPgorICAgICAgICA8L21ldGhvZENhbGw+CisgICAgICAgICIiIgogCi0gICAgICAgIHN5cy5zdGRpbiA9IG9wZW4oInhtbGRhdGEudHh0IiwgInIiKQotICAgICAgICBzeXMuc3Rkb3V0ID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidyIpCi0KLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKLSAgICAgICAgICAgIGVudi5zZXQoJ0NPTlRFTlRfTEVOR1RIJywgc3RyKGxlbihkYXRhKSkpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnYsIFwKKyAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgZGF0YV9vdXQsIFwKKyAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfc3RkaW4oKSBhcyBkYXRhX2luOgorICAgICAgICAgICAgZGF0YV9pbi53cml0ZShkYXRhKQorICAgICAgICAgICAgZGF0YV9pbi5zZWVrKDApCisgICAgICAgICAgICBlbnZbJ0NPTlRFTlRfTEVOR1RIJ10gPSBzdHIobGVuKGRhdGEpKQogICAgICAgICAgICAgc2VsZi5jZ2kuaGFuZGxlX3JlcXVlc3QoKQotCi0gICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCi0gICAgICAgIHN5cy5zdGRvdXQuY2xvc2UoKQotICAgICAgICBzeXMuc3RkaW4gPSB0bXAxCi0gICAgICAgIHN5cy5zdGRvdXQgPSB0bXAyCisgICAgICAgIGRhdGFfb3V0LnNlZWsoMCkKIAogICAgICAgICAjIHdpbGwgcmVzcG9uZCBleGNlcHRpb24sIGlmIHNvLCBvdXIgZ29hbCBpcyBhY2hpZXZlZCA7KQotICAgICAgICBoYW5kbGUgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyIikucmVhZCgpCisgICAgICAgIGhhbmRsZSA9IGRhdGFfb3V0LnJlYWQoKQogCiAgICAgICAgICMgc3RhcnQgd2l0aCA0NHRoIGNoYXIgc28gYXMgbm90IHRvIGdldCBodHRwIGhlYWRlciwgd2UganVzdCBuZWVkIG9ubHkgeG1sCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbHJwY2xpYi5GYXVsdCwgeG1scnBjbGliLmxvYWRzLCBoYW5kbGVbNDQ6XSkKIAotICAgICAgICBvcy5yZW1vdmUoInhtbGRhdGEudHh0IikKLSAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICMgQWxzbyB0ZXN0IHRoZSBjb250ZW50LWxlbmd0aCByZXR1cm5lZCAgYnkgaGFuZGxlX3JlcXVlc3QKKyAgICAgICAgIyBVc2luZyB0aGUgc2FtZSB0ZXN0IG1ldGhvZCBpbm9yZGVyIHRvIGF2b2lkIGFsbCB0aGUgZGF0YXBhc3NpbmcKKyAgICAgICAgIyBib2lsZXJwbGF0ZSBjb2RlLgorICAgICAgICAjIFRlc3QgZm9yIGJ1ZzogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTUwNDAKKworICAgICAgICBjb250ZW50ID0gaGFuZGxlW2hhbmRsZS5maW5kKCI8P3htbCIpOl0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgaW50KHJlLnNlYXJjaCgnQ29udGVudC1MZW5ndGg6IChcZCspJywgaGFuZGxlKS5ncm91cCgxKSksCisgICAgICAgICAgICBsZW4oY29udGVudCkpCisKIAogY2xhc3MgRmFrZVNvY2tldDoKIApAQCAtNjU4LDkgKzkyMywxMiBAQAogICAgIGRlZiBnZXR2YWx1ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YS5nZXR2YWx1ZSgpCiAKLSAgICBkZWYgbWFrZWZpbGUoc2VsZiwgeCwgeSk6CisgICAgZGVmIG1ha2VmaWxlKHNlbGYsIHg9J3InLCB5PS0xKToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCiAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKwogY2xhc3MgRmFrZVRyYW5zcG9ydCh4bWxycGNsaWIuVHJhbnNwb3J0KToKICAgICAiIiJBIFRyYW5zcG9ydCBpbnN0YW5jZSB0aGF0IHJlY29yZHMgaW5zdGVhZCBvZiBzZW5kaW5nIGEgcmVxdWVzdC4KIApAQCAtNjcxLDcgKzkzOSw3IEBACiAKICAgICBkZWYgbWFrZV9jb25uZWN0aW9uKHNlbGYsIGhvc3QpOgogICAgICAgICBjb25uID0geG1scnBjbGliLlRyYW5zcG9ydC5tYWtlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCkKLSAgICAgICAgY29ubi5fY29ubi5zb2NrID0gc2VsZi5mYWtlX3NvY2tldCA9IEZha2VTb2NrZXQoKQorICAgICAgICBjb25uLnNvY2sgPSBzZWxmLmZha2Vfc29ja2V0ID0gRmFrZVNvY2tldCgpCiAgICAgICAgIHJldHVybiBjb25uCiAKIGNsYXNzIFRyYW5zcG9ydFN1YmNsYXNzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNjk1LDcgKzk2Myw3IEBACiAgICAgICAgICAgICAgICAgY29ubi5wdXRoZWFkZXIoIlgtVGVzdCIsICJ0ZXN0X2N1c3RvbV91c2VyX2FnZW50IikKIAogICAgICAgICByZXEgPSBzZWxmLmlzc3VlX3JlcXVlc3QoVGVzdFRyYW5zcG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJYLVRlc3Q6IHRlc3RfY3VzdG9tX3VzZXJfYWdlbnRcclxuIiBpbiByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlgtVGVzdDogdGVzdF9jdXN0b21fdXNlcl9hZ2VudFxyXG4iLCByZXEpCiAKICAgICBkZWYgdGVzdF9zZW5kX2hvc3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIFRlc3RUcmFuc3BvcnQoRmFrZVRyYW5zcG9ydCk6CkBAIC03MDUsNyArOTczLDcgQEAKICAgICAgICAgICAgICAgICBjb25uLnB1dGhlYWRlcigiWC1UZXN0IiwgInRlc3Rfc2VuZF9ob3N0IikKIAogICAgICAgICByZXEgPSBzZWxmLmlzc3VlX3JlcXVlc3QoVGVzdFRyYW5zcG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJYLVRlc3Q6IHRlc3Rfc2VuZF9ob3N0XHJcbiIgaW4gcmVxKQorICAgICAgICBzZWxmLmFzc2VydEluKCJYLVRlc3Q6IHRlc3Rfc2VuZF9ob3N0XHJcbiIsIHJlcSkKIAogICAgIGRlZiB0ZXN0X3NlbmRfcmVxdWVzdChzZWxmKToKICAgICAgICAgY2xhc3MgVGVzdFRyYW5zcG9ydChGYWtlVHJhbnNwb3J0KToKQEAgLTcxNSw3ICs5ODMsNyBAQAogICAgICAgICAgICAgICAgIGNvbm4ucHV0aGVhZGVyKCJYLVRlc3QiLCAidGVzdF9zZW5kX3JlcXVlc3QiKQogCiAgICAgICAgIHJlcSA9IHNlbGYuaXNzdWVfcmVxdWVzdChUZXN0VHJhbnNwb3J0KQotICAgICAgICBzZWxmLmFzc2VydF8oIlgtVGVzdDogdGVzdF9zZW5kX3JlcXVlc3RcclxuIiBpbiByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlgtVGVzdDogdGVzdF9zZW5kX3JlcXVlc3RcclxuIiwgcmVxKQogCiAgICAgZGVmIHRlc3Rfc2VuZF9jb250ZW50KHNlbGYpOgogICAgICAgICBjbGFzcyBUZXN0VHJhbnNwb3J0KEZha2VUcmFuc3BvcnQpOgpAQCAtNzI1LDIwICs5OTMsMjQgQEAKICAgICAgICAgICAgICAgICB4bWxycGNsaWIuVHJhbnNwb3J0LnNlbmRfY29udGVudChzZWxmLCBjb25uLCBib2R5KQogCiAgICAgICAgIHJlcSA9IHNlbGYuaXNzdWVfcmVxdWVzdChUZXN0VHJhbnNwb3J0KQotICAgICAgICBzZWxmLmFzc2VydF8oIlgtVGVzdDogdGVzdF9zZW5kX2NvbnRlbnRcclxuIiBpbiByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlgtVGVzdDogdGVzdF9zZW5kX2NvbnRlbnRcclxuIiwgcmVxKQogCitAdGVzdF9zdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgogICAgIHhtbHJwY190ZXN0cyA9IFtYTUxSUENUZXN0Q2FzZSwgSGVscGVyVGVzdENhc2UsIERhdGVUaW1lVGVzdENhc2UsCiAgICAgICAgICBCaW5hcnlUZXN0Q2FzZSwgRmF1bHRUZXN0Q2FzZSwgVHJhbnNwb3J0U3ViY2xhc3NUZXN0Q2FzZV0KLQotICAgICMgVGhlIHRlc3QgY2FzZXMgYWdhaW5zdCBhIFNpbXBsZVhNTFJQQ1NlcnZlciByYWlzZSBhIHNvY2tldCBlcnJvcgotICAgICMgMTAwMzUgKFdTQUVXT1VMREJMT0NLKSBpbiB0aGUgc2VydmVyIHRocmVhZCBoYW5kbGVfcmVxdWVzdCBjYWxsIHdoZW4KLSAgICAjIHJ1biBvbiBXaW5kb3dzLiBUaGlzIG9ubHkgaGFwcGVucyBvbiB0aGUgZmlyc3QgdGVzdCB0byBydW4sIGJ1dCBpdAotICAgICMgZmFpbHMgZXZlcnkgdGltZSBhbmQgc28gdGhlc2UgdGVzdHMgYXJlIHNraXBwZWQgb24gd2luMzIgcGxhdGZvcm1zLgotICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgotICAgICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNpbXBsZVNlcnZlclRlc3RDYXNlKQotICAgICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEZhaWxpbmdTZXJ2ZXJUZXN0Q2FzZSkKLSAgICAgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChDR0lIYW5kbGVyVGVzdENhc2UpCisgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChTaW1wbGVTZXJ2ZXJUZXN0Q2FzZSkKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMSkKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMikKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBnemlwCisgICAgICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoR3ppcFNlcnZlclRlc3RDYXNlKQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFzcyAjZ3ppcCBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKE11bHRpUGF0aFNlcnZlclRlc3RDYXNlKQorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoU2VydmVyUHJveHlUZXN0Q2FzZSkKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEZhaWxpbmdTZXJ2ZXJUZXN0Q2FzZSkKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKENHSUhhbmRsZXJUZXN0Q2FzZSkKIAogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnhtbHJwY190ZXN0cykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94cGlja2xlLnB5IGIvTGliL3Rlc3QvdGVzdF94cGlja2xlLnB5CmluZGV4IDNmZmI3NDQuLjJjZTFkY2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeHBpY2tsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3hwaWNrbGUucHkKQEAgLTEsMTkgKzEsNDIgQEAKICMgdGVzdF9waWNrbGUgZHVtcHMgYW5kIGxvYWRzIHBpY2tsZXMgdmlhIHBpY2tsZS5weS4KICMgdGVzdF9jcGlja2xlIGRvZXMgdGhlIHNhbWUsIGJ1dCB2aWEgdGhlIGNQaWNrbGUgbW9kdWxlLgogIyBUaGlzIHRlc3QgY292ZXJzIHRoZSBvdGhlciB0d28gY2FzZXMsIG1ha2luZyBwaWNrbGVzIHdpdGggb25lIG1vZHVsZSBhbmQKLSMgbG9hZGluZyB0aGVtIHZpYSB0aGUgb3RoZXIuCisjIGxvYWRpbmcgdGhlbSB2aWEgdGhlIG90aGVyLiBJdCBhbHNvIHRlc3RzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKKyMgcHJldmlvdXMgdmVyc2lvbiBvZiBQeXRob24gYnkgYm91bmNpbmcgcGlja2xlZCBvYmplY3RzIHRocm91Z2ggUHl0aG9uIDIuNAorIyBhbmQgUHl0aG9uIDIuNSBydW5uaW5nIHRoaXMgZmlsZS4KIAotaW1wb3J0IHBpY2tsZQogaW1wb3J0IGNQaWNrbGUKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RQaWNrbGVUZXN0cworCisjIE1vc3QgZGlzdHJvLXN1cHBsaWVkIFB5dGhvbnMgZG9uJ3QgaW5jbHVkZSB0aGUgdGVzdHMKKyMgb3IgdGVzdCBzdXBwb3J0IGZpbGVzLCBhbmQgc29tZSBkb24ndCBpbmNsdWRlIGEgd2F5IHRvIGdldCB0aGVzZSBiYWNrIGV2ZW4gaWYKKyMgeW91J3JlIHdpbGwgdG8gaW5zdGFsbCBleHRyYSBwYWNrYWdlcyAobGlrZSBVYnVudHUpLiBEb2luZyB0aGluZ3MgbGlrZSB0aGlzCisjICJwcm92aWRlcyIgYSBwaWNrbGV0ZXN0ZXIgbW9kdWxlIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24gdGhhdCBtYXkgYmUKKyMgaW5zdGFsbGVkIHdpdGhvdXQgaXQuIE5vdGUgdGhhdCBvbmUgb3RoZXIgZGVzaWduIGZvciB0aGlzIGludm9sdmVzIG1lc3NpbmcKKyMgd2l0aCBzeXMucGF0aCwgd2hpY2ggaXMgbGVzcyBwcmVjaXNlLgorbW9kX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpY2tsZXRlc3Rlci5weSIpKQorcGlja2xldGVzdGVyID0gdHlwZXMuTW9kdWxlVHlwZSgidGVzdC5waWNrbGV0ZXN0ZXIiKQorZXhlYyBjb21waWxlKG9wZW4obW9kX3BhdGgpLnJlYWQoKSwgbW9kX3BhdGgsICdleGVjJykgaW4gcGlja2xldGVzdGVyLl9fZGljdF9fCitBYnN0cmFjdFBpY2tsZVRlc3RzID0gcGlja2xldGVzdGVyLkFic3RyYWN0UGlja2xlVGVzdHMKK2lmIHBpY2tsZXRlc3Rlci5fX25hbWVfXyBpbiBzeXMubW9kdWxlczoKKyAgICByYWlzZSBSdW50aW1lRXJyb3IoIkRpZCBub3QgZXhwZWN0IHRvIGZpbmQgdGVzdC5waWNrbGV0ZXN0ZXIgbG9hZGVkIikKK3N5cy5tb2R1bGVzW3BpY2tsZXRlc3Rlci5fX25hbWVfX10gPSBwaWNrbGV0ZXN0ZXIKKwogCiBjbGFzcyBEdW1wQ1BpY2tsZV9Mb2FkUGlja2xlKEFic3RyYWN0UGlja2xlVGVzdHMpOgogCiAgICAgZXJyb3IgPSBLZXlFcnJvcgogCi0gICAgZGVmIGR1bXBzKHNlbGYsIGFyZywgcHJvdG89MCwgZmFzdD0wKToKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wLCBmYXN0PUZhbHNlKToKICAgICAgICAgIyBJZ25vcmUgZmFzdAogICAgICAgICByZXR1cm4gY1BpY2tsZS5kdW1wcyhhcmcsIHByb3RvKQogCkBAIC0yNSw3ICs0OCw3IEBACiAKICAgICBlcnJvciA9IGNQaWNrbGUuQmFkUGlja2xlR2V0CiAKLSAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wLCBmYXN0PTApOgorICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTAsIGZhc3Q9RmFsc2UpOgogICAgICAgICAjIElnbm9yZSBmYXN0CiAgICAgICAgIHJldHVybiBwaWNrbGUuZHVtcHMoYXJnLCBwcm90bykKIApAQCAtMzMsMTEgKzU2LDIwNSBAQAogICAgICAgICAjIElnbm9yZSBmYXN0CiAgICAgICAgIHJldHVybiBjUGlja2xlLmxvYWRzKGJ1ZikKIAorZGVmIGhhdmVfcHl0aG9uX3ZlcnNpb24obmFtZSk6CisgICAgIiIiQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbmFtZSBpcyBhIHZhbGlkIFB5dGhvbiBiaW5hcnkgYW5kIGhhcworICAgIHRlc3QudGVzdF9zdXBwb3J0LgorCisgICAgVGhpcyByZXNwZWN0cyB5b3VyIFBBVEguCisKKyAgICBBcmdzOgorICAgICAgICBuYW1lOiBzaG9ydCBzdHJpbmcgbmFtZSBvZiBhIFB5dGhvbiBiaW5hcnkgc3VjaCBhcyAicHl0aG9uMi40Ii4KKworICAgIFJldHVybnM6CisgICAgICAgIFRydWUgaWYgdGhlIG5hbWUgaXMgdmFsaWQsIEZhbHNlIG90aGVyd2lzZS4KKyAgICAiIiIKKyAgICByZXR1cm4gb3Muc3lzdGVtKG5hbWUgKyAiIC1jICdpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQnIikgPT0gMAorCisKK2NsYXNzIEFic3RyYWN0Q29tcGF0VGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cyk6CisKKyAgICBtb2R1bGUgPSBOb25lCisgICAgcHl0aG9uID0gTm9uZQorICAgIGVycm9yID0gTm9uZQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5weXRob24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZXJyb3IpCisKKyAgICBkZWYgc2VuZF90b193b3JrZXIoc2VsZiwgcHl0aG9uLCBvYmosIHByb3RvKToKKyAgICAgICAgIiIiQm91bmNlIGEgcGlja2xlZCBvYmplY3QgdGhyb3VnaCBhbm90aGVyIHZlcnNpb24gb2YgUHl0aG9uLgorCisgICAgICAgIFRoaXMgd2lsbCBwaWNrbGUgdGhlIG9iamVjdCwgc2VuZCBpdCB0byBhIGNoaWxkIHByb2Nlc3Mgd2hlcmUgaXQgd2lsbCBiZQorICAgICAgICB1bnBpY2tsZWQsIHRoZW4gcmVwaWNrbGVkIGFuZCBzZW50IGJhY2sgdG8gdGhlIHBhcmVudCBwcm9jZXNzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBweXRob246IHRoZSBuYW1lIG9mIHRoZSBQeXRob24gYmluYXJ5IHRvIHN0YXJ0LgorICAgICAgICAgICAgb2JqOiBvYmplY3QgdG8gcGlja2xlLgorICAgICAgICAgICAgcHJvdG86IHBpY2tsZSBwcm90b2NvbCBudW1iZXIgdG8gdXNlLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUaGUgcGlja2xlZCBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGNoaWxkIHByb2Nlc3MuCisgICAgICAgICIiIgorICAgICAgICAjIFByZXZlbnQgdGhlIHN1YnByb2Nlc3MgZnJvbSBwaWNraW5nIHVwIGludmFsaWQgLnB5YyBmaWxlcy4KKyAgICAgICAgdGFyZ2V0ID0gX19maWxlX18KKyAgICAgICAgaWYgdGFyZ2V0Wy0xXSBpbiAoImMiLCAibyIpOgorICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0WzotMV0KKworICAgICAgICBkYXRhID0gc2VsZi5tb2R1bGUuZHVtcHMoKHByb3RvLCBvYmopLCBwcm90bykKKyAgICAgICAgd29ya2VyID0gc3VicHJvY2Vzcy5Qb3BlbihbcHl0aG9uLCB0YXJnZXQsICJ3b3JrZXIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHdvcmtlci5jb21tdW5pY2F0ZShkYXRhKQorICAgICAgICBpZiB3b3JrZXIucmV0dXJuY29kZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHN0ZGVycikKKyAgICAgICAgcmV0dXJuIHN0ZG91dAorCisgICAgZGVmIGR1bXBzKHNlbGYsIGFyZywgcHJvdG89MCwgZmFzdD1GYWxzZSk6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfdG9fd29ya2VyKHNlbGYucHl0aG9uLCBhcmcsIHByb3RvKQorCisgICAgZGVmIGxvYWRzKHNlbGYsIGlucHV0KToKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlLmxvYWRzKGlucHV0KQorCisgICAgIyBUaGVzZSB0ZXN0cyBhcmUgZGlzYWJsZWQgYmVjYXVzZSB0aGV5IHJlcXVpcmUgc29tZSBzcGVjaWFsIHNldHVwCisgICAgIyBvbiB0aGUgd29ya2VyIHRoYXQncyBoYXJkIHRvIGtlZXAgaW4gc3luYy4KKyAgICBkZWYgdGVzdF9nbG9iYWxfZXh0MShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZ2xvYmFsX2V4dDIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2dsb2JhbF9leHQ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAjIFRoaXMgaXMgYSBjdXQtZG93biB2ZXJzaW9uIG9mIHBpY2tsZXRlc3RlcidzIHRlc3RfZmxvYXQuIEJhY2t3YXJkcworICAgICMgY29tcGF0aWJpbGl0eSBmb3IgdGhlIHZhbHVlcyBpbiBmb3JfYmluX3Byb3RvcyB3YXMgZXhwbGljaXRseSBicm9rZW4gaW4KKyAgICAjIHI2ODkwMyB0byBmaXggYSBidWcuCisgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CisgICAgICAgIGZvcl9iaW5fcHJvdG9zID0gWzQuOTRlLTMyNCwgMWUtMzEwXQorICAgICAgICBuZWdfZm9yX2Jpbl9wcm90b3MgPSBbLXggZm9yIHggaW4gZm9yX2Jpbl9wcm90b3NdCisgICAgICAgIHRlc3RfdmFsdWVzID0gWzAuMCwgN2UtMzA4LCA2LjYyNmUtMzQsIDAuMSwgMC41LAorICAgICAgICAgICAgICAgICAgICAgICAzLjE0LCAyNjMuNDQ1ODIwNjIzNzQwNTMsIDYuMDIyZTIzLCAxZTMwXQorICAgICAgICB0ZXN0X3Byb3RvMF92YWx1ZXMgPSB0ZXN0X3ZhbHVlcyArIFsteCBmb3IgeCBpbiB0ZXN0X3ZhbHVlc10KKyAgICAgICAgdGVzdF92YWx1ZXMgPSB0ZXN0X3Byb3RvMF92YWx1ZXMgKyBmb3JfYmluX3Byb3RvcyArIG5lZ19mb3JfYmluX3Byb3RvcworCisgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0X3Byb3RvMF92YWx1ZXM6CisgICAgICAgICAgICBwaWNrbGUgPSBzZWxmLmR1bXBzKHZhbHVlLCAwKQorICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwaWNrbGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBnb3QpCisKKyAgICAgICAgZm9yIHByb3RvIGluIHBpY2tsZXRlc3Rlci5wcm90b2NvbHNbMTpdOgorICAgICAgICAgICAgZm9yIHZhbHVlIGluIHRlc3RfdmFsdWVzOgorICAgICAgICAgICAgICAgIHBpY2tsZSA9IHNlbGYuZHVtcHModmFsdWUsIHByb3RvKQorICAgICAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocGlja2xlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIGdvdCkKKworICAgICMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2FzIGV4cGxpY2l0bHkgYnJva2VuIGluIHI2NzkzNCB0byBmaXggYSBidWcuCisgICAgZGVmIHRlc3RfdW5pY29kZV9oaWdoX3BsYW5lKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAjIFRoaXMgaXMgYSBjdXQtZG93biB2ZXJzaW9uIG9mIHBpY2tsZXRlc3RlcidzIHRlc3RfdW5pY29kZS4gQmFja3dhcmRzCisgICAgICAgICMgY29tcGF0aWJpbGl0eSB3YXMgZXhwbGljaXRseSBicm9rZW4gaW4gcjY3OTM0IHRvIGZpeCBhIGJ1Zy4KKyAgICAgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgICAgIGVuZGNhc2VzID0gW3UnJywgdSc8XFx1PicsIHUnPFxcXHUxMjM0PicsIHUnPFxuPicsIHUnPFxcPiddCisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcGlja2xldGVzdGVyLnByb3RvY29sczoKKyAgICAgICAgICAgICAgICBmb3IgdSBpbiBlbmRjYXNlczoKKyAgICAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHModSwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIHUyID0gc2VsZi5sb2FkcyhwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLCB1KQorCisKK2RlZiBydW5fY29tcGF0X3Rlc3QocHl0aG9uX25hbWUpOgorICAgIHJldHVybiAodGVzdF9zdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoInhwaWNrbGUiKSBhbmQKKyAgICAgICAgICAgIGhhdmVfcHl0aG9uX3ZlcnNpb24ocHl0aG9uX25hbWUpKQorCisKKyMgVGVzdCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjQuCitpZiBub3QgcnVuX2NvbXBhdF90ZXN0KCJweXRob24yLjQiKToKKyAgICBjbGFzcyBDUGlja2xlUHl0aG9uMjRDb21wYXQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBwYXNzCitlbHNlOgorICAgIGNsYXNzIENQaWNrbGVQeXRob24yNENvbXBhdChBYnN0cmFjdENvbXBhdFRlc3RzKToKKworICAgICAgICBtb2R1bGUgPSBjUGlja2xlCisgICAgICAgIHB5dGhvbiA9ICJweXRob24yLjQiCisgICAgICAgIGVycm9yID0gY1BpY2tsZS5CYWRQaWNrbGVHZXQKKworICAgICAgICAjIERpc2FibGUgdGhlc2UgdGVzdHMgZm9yIFB5dGhvbiAyLjQuIE1ha2luZyB0aGVtIHBhc3Mgd291bGQgcmVxdWlyZQorICAgICAgICAjIG5vbnRyaXZpYWxseSBtb25rZXlwYXRjaGluZyB0aGUgcGlja2xldGVzdGVyIG1vZHVsZSBpbiB0aGUgd29ya2VyLgorICAgICAgICBkZWYgdGVzdF9yZWR1Y2VfY2FsbHNfYmFzZShzZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgdGVzdF9yZWR1Y2VfZXhfY2FsbHNfYmFzZShzZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworY2xhc3MgUGlja2xlUHl0aG9uMjRDb21wYXQoQ1BpY2tsZVB5dGhvbjI0Q29tcGF0KToKKworICAgIG1vZHVsZSA9IHBpY2tsZQorICAgIGVycm9yID0gS2V5RXJyb3IKKworCisjIFRlc3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi41LgoraWYgbm90IHJ1bl9jb21wYXRfdGVzdCgicHl0aG9uMi41Iik6CisgICAgY2xhc3MgQ1BpY2tsZVB5dGhvbjI1Q29tcGF0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcGFzcworZWxzZToKKyAgICBjbGFzcyBDUGlja2xlUHl0aG9uMjVDb21wYXQoQWJzdHJhY3RDb21wYXRUZXN0cyk6CisKKyAgICAgICAgbW9kdWxlID0gY1BpY2tsZQorICAgICAgICBweXRob24gPSAicHl0aG9uMi41IgorICAgICAgICBlcnJvciA9IGNQaWNrbGUuQmFkUGlja2xlR2V0CisKK2NsYXNzIFBpY2tsZVB5dGhvbjI1Q29tcGF0KENQaWNrbGVQeXRob24yNUNvbXBhdCk6CisKKyAgICBtb2R1bGUgPSBwaWNrbGUKKyAgICBlcnJvciA9IEtleUVycm9yCisKKworIyBUZXN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNi4KK2lmIG5vdCBydW5fY29tcGF0X3Rlc3QoInB5dGhvbjIuNiIpOgorICAgIGNsYXNzIENQaWNrbGVQeXRob24yNkNvbXBhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHBhc3MKK2Vsc2U6CisgICAgY2xhc3MgQ1BpY2tsZVB5dGhvbjI2Q29tcGF0KEFic3RyYWN0Q29tcGF0VGVzdHMpOgorCisgICAgICAgIG1vZHVsZSA9IGNQaWNrbGUKKyAgICAgICAgcHl0aG9uID0gInB5dGhvbjIuNiIKKyAgICAgICAgZXJyb3IgPSBjUGlja2xlLkJhZFBpY2tsZUdldAorCitjbGFzcyBQaWNrbGVQeXRob24yNkNvbXBhdChDUGlja2xlUHl0aG9uMjZDb21wYXQpOgorCisgICAgbW9kdWxlID0gcGlja2xlCisgICAgZXJyb3IgPSBLZXlFcnJvcgorCisKK2RlZiB3b3JrZXJfbWFpbihpbl9zdHJlYW0sIG91dF9zdHJlYW0pOgorICAgIG1lc3NhZ2UgPSBjUGlja2xlLmxvYWQoaW5fc3RyZWFtKQorICAgIHByb3RvY29sLCBvYmogPSBtZXNzYWdlCisgICAgY1BpY2tsZS5kdW1wKG9iaiwgb3V0X3N0cmVhbSwgcHJvdG9jb2wpCisKKwogZGVmIHRlc3RfbWFpbigpOgorICAgIGlmIG5vdCB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgieHBpY2tsZSIpOgorICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJ0ZXN0X3hwaWNrbGUgLS0gc2tpcHBpbmcgYmFja3dhcmRzIGNvbXBhdCB0ZXN0cy4iCisgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIlVzZSAncmVncnRlc3QucHkgLXUgeHBpY2tsZScgdG8gcnVuIHRoZW0uIgorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKwogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCiAgICAgICAgIER1bXBDUGlja2xlX0xvYWRQaWNrbGUsCi0gICAgICAgIER1bXBQaWNrbGVfTG9hZENQaWNrbGUKKyAgICAgICAgRHVtcFBpY2tsZV9Mb2FkQ1BpY2tsZSwKKyAgICAgICAgQ1BpY2tsZVB5dGhvbjI0Q29tcGF0LAorICAgICAgICBDUGlja2xlUHl0aG9uMjVDb21wYXQsCisgICAgICAgIENQaWNrbGVQeXRob24yNkNvbXBhdCwKKyAgICAgICAgUGlja2xlUHl0aG9uMjRDb21wYXQsCisgICAgICAgIFBpY2tsZVB5dGhvbjI1Q29tcGF0LAorICAgICAgICBQaWNrbGVQeXRob24yNkNvbXBhdCwKICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICBpZiAid29ya2VyIiBpbiBzeXMuYXJndjoKKyAgICAgICAgd29ya2VyX21haW4oc3lzLnN0ZGluLCBzeXMuc3Rkb3V0KQorICAgIGVsc2U6CisgICAgICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3hyYW5nZS5weSBiL0xpYi90ZXN0L3Rlc3RfeHJhbmdlLnB5CmluZGV4IGRiZmViNDMuLmUzYzc5OWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeHJhbmdlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeHJhbmdlLnB5CkBAIC0zNywxNCArMzcsMTQgQEAKICAgICAgICAgICAgIGlmIHggPT0geToKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxpZiB4ID09IHNlbnRpbmVsOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnezB9OiBpdGVyYXRvciBlbmRlZCB1bmV4cGVjdGVkbHkgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAnYXQgcG9zaXRpb24gezF9OyBleHBlY3RlZCB7Mn0nLmZvcm1hdCh0ZXN0X2lkLCBpLCB5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3t9OiBpdGVyYXRvciBlbmRlZCB1bmV4cGVjdGVkbHkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAnYXQgcG9zaXRpb24ge307IGV4cGVjdGVkIHt9Jy5mb3JtYXQodGVzdF9pZCwgaSwgeSkpCiAgICAgICAgICAgICBlbGlmIHkgPT0gc2VudGluZWw6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCd7MH06IHVuZXhwZWN0ZWQgZXhjZXNzIGVsZW1lbnQgezF9IGF0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uIHsyfScuZm9ybWF0KHRlc3RfaWQsIHgsIGkpKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne306IHVuZXhwZWN0ZWQgZXhjZXNzIGVsZW1lbnQge30gYXQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb24ge30nLmZvcm1hdCh0ZXN0X2lkLCB4LCBpKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCd7MH06IHdyb25nIGVsZW1lbnQgYXQgcG9zaXRpb24gezF9OycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGVjdGVkIHsyfSwgZ290IHszfScuZm9ybWF0KHRlc3RfaWQsIGksIHksIHgpKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne306IHdyb25nIGVsZW1lbnQgYXQgcG9zaXRpb24ge307JworICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWQge30sIGdvdCB7fScuZm9ybWF0KHRlc3RfaWQsIGksIHksIHgpKQogCiAgICAgZGVmIHRlc3RfeHJhbmdlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeHJhbmdlKDMpKSwgWzAsIDEsIDJdKQpAQCAtNjMsMjUgKzYzLDI1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4cmFuZ2UoYSs0LCBhLCAtMikpLCBbYSs0LCBhKzJdKQogCiAgICAgICAgIHNlcSA9IGxpc3QoeHJhbmdlKGEsIGIsIGMpKQotICAgICAgICBzZWxmLmFzc2VydF8oYSBpbiBzZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhiIG5vdCBpbiBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIsIHNlcSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VxKSwgMikKIAogICAgICAgICBzZXEgPSBsaXN0KHhyYW5nZShiLCBhLCAtYykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhiIGluIHNlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgbm90IGluIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYSwgc2VxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQogCiAgICAgICAgIHNlcSA9IGxpc3QoeHJhbmdlKC1hLCAtYiwgLWMpKQotICAgICAgICBzZWxmLmFzc2VydF8oLWEgaW4gc2VxKQotICAgICAgICBzZWxmLmFzc2VydF8oLWIgbm90IGluIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigtYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC1iLCBzZXEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB4cmFuZ2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeHJhbmdlLCAxLCAyLCAzLCA0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB4cmFuZ2UsIDEsIDIsIDApCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgeHJhbmdlLCAxZTEwMCwgMWUxMDEsIDFlMTAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB4cmFuZ2UsIDEwKioxMDAsIDEwKioxMDEsIDEwKioxMDEpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB4cmFuZ2UsIDAsICJzcGFtIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB4cmFuZ2UsIDAsIDQyLCAic3BhbSIpCkBAIC0xMDEsOCArMTAxLDggQEAKICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CiAgICAgICAgICAgICBmb3IgdCBpbiB0ZXN0Y2FzZXM6CiAgICAgICAgICAgICAgICAgciA9IHhyYW5nZSgqdCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMociwgcHJvdG8pKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhyLCBwcm90bykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocikpCiAKICAgICBkZWYgdGVzdF9yYW5nZV9pdGVyYXRvcnMoc2VsZik6CiAgICAgICAgICMgc2VlIGlzc3VlIDcyOTgKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaXRlcjIgPSBweXJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApCi0gICAgICAgICAgICAgICAgdGVzdF9pZCA9ICJ4cmFuZ2UoezB9LCB7MX0sIHsyfSkiLmZvcm1hdChzdGFydCwgZW5kLCBzdGVwKQorICAgICAgICAgICAgICAgIHRlc3RfaWQgPSAieHJhbmdlKHt9LCB7fSwge30pIi5mb3JtYXQoc3RhcnQsIGVuZCwgc3RlcCkKICAgICAgICAgICAgICAgICAjIGNoZWNrIGZpcnN0IDEwMCBlbnRyaWVzCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXRlcmF0b3JzX2VxdWFsKGl0ZXIxLCBpdGVyMiwgdGVzdF9pZCwgbGltaXQ9MTAwKQogCkBAIC0xMzIsOCArMTMyLDcgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGl0ZXIyID0gcHlyYW5nZV9yZXZlcnNlZChzdGFydCwgZW5kLCBzdGVwKQotICAgICAgICAgICAgICAgIHRlc3RfaWQgPSAicmV2ZXJzZWQoeHJhbmdlKHswfSwgezF9LCB7Mn0pKSIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLCBzdGVwKQorICAgICAgICAgICAgICAgIHRlc3RfaWQgPSAicmV2ZXJzZWQoeHJhbmdlKHt9LCB7fSwge30pKSIuZm9ybWF0KHN0YXJ0LCBlbmQsIHN0ZXApCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXRlcmF0b3JzX2VxdWFsKGl0ZXIxLCBpdGVyMiwgdGVzdF9pZCwgbGltaXQ9MTAwKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQppbmRleCBhMmMzYTJjLi43YzhjMGM1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CkBAIC00LDE0ICs0LDIxIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgemxpYiA9IE5vbmUKIAotaW1wb3J0IHppcGZpbGUsIG9zLCB1bml0dGVzdCwgc3lzLCBzaHV0aWwsIHN0cnVjdAoraW1wb3J0IG9zCitpbXBvcnQgaW8KK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RydWN0CitpbXBvcnQgemlwZmlsZQoraW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiBmcm9tIHRlbXBmaWxlIGltcG9ydCBUZW1wb3JhcnlGaWxlCiBmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludCwgcmFuZG9tCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBza2lwVW5sZXNzCiAKLWltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgZmluZGZpbGUKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBmaW5kZmlsZSwgdW5saW5rCiAKIFRFU1RGTjIgPSBURVNURk4gKyAiMiIKIFRFU1RGTkRJUiA9IFRFU1RGTiArICJkIgpAQCAtMjIsMzczICsyOSw0NDIgQEAKICAgICAgICAgICAgICAgICAgICAoJy96aXB0ZXN0MmRpci96aXB0ZXN0M2Rpci9femlwdGVzdDMnLCAnYXpzeGRjZnZnYicpLAogICAgICAgICAgICAgICAgICAgICgnemlwdGVzdDJkaXIvemlwdGVzdDNkaXIvemlwdGVzdDRkaXIvX3ppcHRlc3QzJywgJzZ5N3U4aTlvMHAnKV0KIAorCiBjbGFzcyBUZXN0c1dpdGhTb3VyY2VGaWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYubGluZV9nZW4gPSBbIlppcGZpbGUgdGVzdCBsaW5lICVkLiByYW5kb20gZmxvYXQ6ICVmIiAlIChpLCByYW5kb20oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKEZJWEVEVEVTVF9TSVpFKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoRklYRURURVNUX1NJWkUpXQogICAgICAgICBzZWxmLmRhdGEgPSAnXG4nLmpvaW4oc2VsZi5saW5lX2dlbikgKyAnXG4nCiAKICAgICAgICAgIyBNYWtlIGEgc291cmNlIGZpbGUgd2l0aCBzb21lIGxpbmVzCi0gICAgICAgIGZwID0gb3BlbihURVNURk4sICJ3YiIpCi0gICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKIAotICAgIGRlZiBtYWtlVGVzdEFyY2hpdmUoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgIGRlZiBtYWtlX3Rlc3RfYXJjaGl2ZShzZWxmLCBmLCBjb21wcmVzc2lvbik6CiAgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICJhbm90aGVyIitvcy5leHRzZXArIm5hbWUiKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKLSAgICAgICAgemlwZnAud3JpdGVzdHIoInN0cmZpbGUiLCBzZWxmLmRhdGEpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICJhbm90aGVyLm5hbWUiKQorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsIHNlbGYuZGF0YSkKIAotICAgIGRlZiB6aXBUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHppcF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZChURVNURk4pLCBzZWxmLmRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIiksIHNlbGYuZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJzdHJmaWxlIiksIHNlbGYuZGF0YSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJhbm90aGVyLm5hbWUiKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJzdHJmaWxlIiksIHNlbGYuZGF0YSkKIAotICAgICAgICAjIFByaW50IHRoZSBaSVAgZGlyZWN0b3J5Ci0gICAgICAgIGZwID0gU3RyaW5nSU8oKQotICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBmcAorICAgICAgICAgICAgIyBQcmludCB0aGUgWklQIGRpcmVjdG9yeQorICAgICAgICAgICAgZnAgPSBTdHJpbmdJTygpCisgICAgICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGZwCisgICAgICAgICAgICAgICAgemlwZnAucHJpbnRkaXIoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CiAKLSAgICAgICAgICAgIHppcGZwLnByaW50ZGlyKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IGZwLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGxpbmVzID0gZGlyZWN0b3J5LnNwbGl0bGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCA0KSAjIE51bWJlciBvZiBmaWxlcyArIGhlYWRlcgogCi0gICAgICAgIGRpcmVjdG9yeSA9IGZwLmdldHZhbHVlKCkKLSAgICAgICAgbGluZXMgPSBkaXJlY3Rvcnkuc3BsaXRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsaW5lcyksIDQpICMgTnVtYmVyIG9mIGZpbGVzICsgaGVhZGVyCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdGaWxlIE5hbWUnLCBsaW5lc1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ01vZGlmaWVkJywgbGluZXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdTaXplJywgbGluZXNbMF0pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdGaWxlIE5hbWUnIGluIGxpbmVzWzBdKQotICAgICAgICBzZWxmLmFzc2VydF8oJ01vZGlmaWVkJyBpbiBsaW5lc1swXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdTaXplJyBpbiBsaW5lc1swXSkKKyAgICAgICAgICAgIGZuLCBkYXRlLCB0aW1lXywgc2l6ZSA9IGxpbmVzWzFdLnNwbGl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm4sICdhbm90aGVyLm5hbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUuc3RycHRpbWUoZGF0ZSwgJyVZLSVtLSVkJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS5zdHJwdGltZSh0aW1lXywgJyVIOiVNOiVTJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIHN0cihsZW4oc2VsZi5kYXRhKSkpCiAKLSAgICAgICAgZm4sIGRhdGUsIHRpbWUsIHNpemUgPSBsaW5lc1sxXS5zcGxpdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZuLCAnYW5vdGhlci5uYW1lJykKLSAgICAgICAgIyBYWFg6IHRpbWVzdGFtcCBpcyBub3QgdGVzdGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNpemUsIHN0cihsZW4oc2VsZi5kYXRhKSkpCisgICAgICAgICAgICAjIENoZWNrIHRoZSBuYW1lbGlzdAorICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKFRFU1RGTiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJhbm90aGVyLm5hbWUiLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmZpbGUiLCBuYW1lcykKIAotICAgICAgICAjIENoZWNrIHRoZSBuYW1lbGlzdAotICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKG5hbWVzKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKFRFU1RGTiBpbiBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJhbm90aGVyIitvcy5leHRzZXArIm5hbWUiIGluIG5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydF8oInN0cmZpbGUiIGluIG5hbWVzKQorICAgICAgICAgICAgIyBDaGVjayBpbmZvbGlzdAorICAgICAgICAgICAgaW5mb3MgPSB6aXBmcC5pbmZvbGlzdCgpCisgICAgICAgICAgICBuYW1lcyA9IFtpLmZpbGVuYW1lIGZvciBpIGluIGluZm9zXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmFtZXMpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihURVNURk4sIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiYW5vdGhlci5uYW1lIiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzdHJmaWxlIiwgbmFtZXMpCisgICAgICAgICAgICBmb3IgaSBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKIAotICAgICAgICAjIENoZWNrIGluZm9saXN0Ci0gICAgICAgIGluZm9zID0gemlwZnAuaW5mb2xpc3QoKQotICAgICAgICBuYW1lcyA9IFsgaS5maWxlbmFtZSBmb3IgaSBpbiBpbmZvcyBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihuYW1lcyksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhURVNURk4gaW4gbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIiBpbiBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJzdHJmaWxlIiBpbiBuYW1lcykKLSAgICAgICAgZm9yIGkgaW4gaW5mb3M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpLmZpbGVfc2l6ZSwgbGVuKHNlbGYuZGF0YSkpCisgICAgICAgICAgICAjIGNoZWNrIGdldGluZm8KKyAgICAgICAgICAgIGZvciBubSBpbiAoVEVTVEZOLCAiYW5vdGhlci5uYW1lIiwgInN0cmZpbGUiKToKKyAgICAgICAgICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbyhubSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uZmlsZW5hbWUsIG5tKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQogCi0gICAgICAgICMgY2hlY2sgZ2V0aW5mbwotICAgICAgICBmb3Igbm0gaW4gKFRFU1RGTiwgImFub3RoZXIiK29zLmV4dHNlcCsibmFtZSIsICJzdHJmaWxlIik6Ci0gICAgICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbyhubSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGluZm8uZmlsZW5hbWUsIG5tKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW5mby5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRlc3R6aXAgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgICAgIHppcGZwLnRlc3R6aXAoKQogCi0gICAgICAgICMgQ2hlY2sgdGhhdCB0ZXN0emlwIGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uCi0gICAgICAgIHppcGZwLnRlc3R6aXAoKQotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICBkZWYgdGVzdFN0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9zdG9yZWQoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgc2VsZi56aXBUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHppcE9wZW5UZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHppcF9vcGVuX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikKLSAgICAgICAgemlwZGF0YTEgPSBbXQotICAgICAgICB6aXBvcGVuMSA9IHppcGZwLm9wZW4oVEVTVEZOKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjEucmVhZCgyNTYpCi0gICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB6aXBkYXRhMS5hcHBlbmQocmVhZF9kYXRhKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGRhdGExID0gW10KKyAgICAgICAgICAgIHppcG9wZW4xID0gemlwZnAub3BlbihURVNURk4pCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQoMjU2KQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKIAotICAgICAgICB6aXBkYXRhMiA9IFtdCi0gICAgICAgIHppcG9wZW4yID0gemlwZnAub3BlbigiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4yLnJlYWQoMjU2KQotICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgemlwZGF0YTIuYXBwZW5kKHJlYWRfZGF0YSkKKyAgICAgICAgICAgIHppcGRhdGEyID0gW10KKyAgICAgICAgICAgIHppcG9wZW4yID0gemlwZnAub3BlbigiYW5vdGhlci5uYW1lIikKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjIucmVhZCgyNTYpCisgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB6aXBkYXRhMi5hcHBlbmQocmVhZF9kYXRhKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbih6aXBkYXRhMSksIHNlbGYuZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKHppcGRhdGEyKSwgc2VsZi5kYXRhKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oemlwZGF0YTEpLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oemlwZGF0YTIpLCBzZWxmLmRhdGEpCiAKLSAgICBkZWYgdGVzdE9wZW5TdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3Rfb3Blbl9zdG9yZWQoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgc2VsZi56aXBPcGVuVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHRlc3RPcGVuVmlhWmlwSW5mbyhzZWxmKToKKyAgICBkZWYgdGVzdF9vcGVuX3ZpYV96aXBfaW5mbyhzZWxmKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICB6aXBmcC53cml0ZXN0cigibmFtZSIsICJmb28iKQotICAgICAgICB6aXBmcC53cml0ZXN0cigibmFtZSIsICJiYXIiKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJuYW1lIiwgImZvbyIpCisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigibmFtZSIsICJiYXIiKQogCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikKLSAgICAgICAgaW5mb3MgPSB6aXBmcC5pbmZvbGlzdCgpCi0gICAgICAgIGRhdGEgPSAiIgotICAgICAgICBmb3IgaW5mbyBpbiBpbmZvczoKLSAgICAgICAgICAgIGRhdGEgKz0gemlwZnAub3BlbihpbmZvKS5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRhdGEgPT0gImZvb2JhciIgb3IgZGF0YSA9PSAiYmFyZm9vIikKLSAgICAgICAgZGF0YSA9ICIiCi0gICAgICAgIGZvciBpbmZvIGluIGluZm9zOgotICAgICAgICAgICAgZGF0YSArPSB6aXBmcC5yZWFkKGluZm8pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkYXRhID09ICJmb29iYXIiIG9yIGRhdGEgPT0gImJhcmZvbyIpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGluZm9zID0gemlwZnAuaW5mb2xpc3QoKQorICAgICAgICAgICAgZGF0YSA9ICIiCisgICAgICAgICAgICBmb3IgaW5mbyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICBkYXRhICs9IHppcGZwLm9wZW4oaW5mbykucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YSA9PSAiZm9vYmFyIiBvciBkYXRhID09ICJiYXJmb28iKQorICAgICAgICAgICAgZGF0YSA9ICIiCisgICAgICAgICAgICBmb3IgaW5mbyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICBkYXRhICs9IHppcGZwLnJlYWQoaW5mbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhID09ICJmb29iYXIiIG9yIGRhdGEgPT0gImJhcmZvbyIpCiAKLSAgICBkZWYgemlwUmFuZG9tT3BlblRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICBkZWYgemlwX3JhbmRvbV9vcGVuX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikKLSAgICAgICAgemlwZGF0YTEgPSBbXQotICAgICAgICB6aXBvcGVuMSA9IHppcGZwLm9wZW4oVEVTVEZOKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjEucmVhZChyYW5kaW50KDEsIDEwMjQpKQotICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBkYXRhMSA9IFtdCisgICAgICAgICAgICB6aXBvcGVuMSA9IHppcGZwLm9wZW4oVEVTVEZOKQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMS5yZWFkKHJhbmRpbnQoMSwgMTAyNCkpCisgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB6aXBkYXRhMS5hcHBlbmQocmVhZF9kYXRhKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbih6aXBkYXRhMSksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbih6aXBkYXRhMSksIHNlbGYuZGF0YSkKKworICAgIGRlZiB0ZXN0X3JhbmRvbV9vcGVuX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yYW5kb21fb3Blbl90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIGRlZiB0ZXN0X3VuaXZlcmFsX3JlYWRhaGVhZHMoc2VsZik6CisgICAgICAgIGYgPSBTdHJpbmdJTygpCisKKyAgICAgICAgZGF0YSA9ICdhXHJcbicgKiAxNiAqIDEwMjQKKyAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgJ3cnLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgIHppcGZwLndyaXRlc3RyKFRFU1RGTiwgZGF0YSkKICAgICAgICAgemlwZnAuY2xvc2UoKQogCi0gICAgZGVmIHRlc3RSYW5kb21PcGVuU3RvcmVkKHNlbGYpOgotICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwUmFuZG9tT3BlblRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICBkYXRhMiA9ICcnCisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICdyJykKKyAgICAgICAgemlwb3BlbiA9IHppcGZwLm9wZW4oVEVTVEZOLCAnclUnKQorICAgICAgICBmb3IgbGluZSBpbiB6aXBvcGVuOgorICAgICAgICAgICAgZGF0YTIgKz0gbGluZQorICAgICAgICB6aXBmcC5jbG9zZSgpCiAKLSAgICBkZWYgemlwUmVhZGxpbmVUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGF0YTIucmVwbGFjZSgnXG4nLCAnXHJcbicpKQorCisgICAgZGVmIHppcF9yZWFkbGluZV9yZWFkX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQogICAgICAgICB6aXBvcGVuID0gemlwZnAub3BlbihURVNURk4pCi0gICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZV9nZW46Ci0gICAgICAgICAgICBsaW5lZGF0YSA9IHppcG9wZW4ucmVhZGxpbmUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lZGF0YSwgbGluZSArICdcbicpCiAKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICByZWFkID0gemlwb3Blbi5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgcmVhZDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZGF0YSArPSByZWFkCisKKyAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWQoMTAwKQorICAgICAgICAgICAgaWYgbm90IHJlYWQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRhdGEgKz0gcmVhZAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc2VsZi5kYXRhKQogICAgICAgICB6aXBmcC5jbG9zZSgpCiAKLSAgICBkZWYgemlwUmVhZGxpbmVzVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIGRlZiB6aXBfcmVhZGxpbmVfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIpCi0gICAgICAgIHppcGxpbmVzID0gemlwZnAub3BlbihURVNURk4pLnJlYWRsaW5lcygpCi0gICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBsaW5lcyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyAnXG4nKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwb3BlbiA9IHppcGZwLm9wZW4oVEVTVEZOKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lX2dlbjoKKyAgICAgICAgICAgICAgICBsaW5lZGF0YSA9IHppcG9wZW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWRhdGEsIGxpbmUgKyAnXG4nKQogCi0gICAgICAgIHppcGZwLmNsb3NlKCkKLQotICAgIGRlZiB6aXBJdGVybGluZXNUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHppcF9yZWFkbGluZXNfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIpCi0gICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBmcC5vcGVuKFRFU1RGTikpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgJ1xuJykKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGxpbmVzID0gemlwZnAub3BlbihURVNURk4pLnJlYWRsaW5lcygpCisgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwbGluZXMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArICdcbicpCiAKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiB6aXBfaXRlcmxpbmVzX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCi0gICAgZGVmIHRlc3RSZWFkbGluZVN0b3JlZChzZWxmKToKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGZwLm9wZW4oVEVTVEZOKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgJ1xuJykKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfc3RvcmVkKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3NjEwOiBjYWxscyB0byByZWFkbGluZSgpIGludGVybGVhdmVkIHdpdGggY2FsbHMgdG8gcmVhZCgpLgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwUmVhZGxpbmVUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lX3JlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBkZWYgdGVzdFJlYWRsaW5lc1N0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9zdG9yZWQoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgc2VsZi56aXBSZWFkbGluZXNUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHRlc3RJdGVybGluZXNTdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX3N0b3JlZChzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLnppcEl0ZXJsaW5lc1Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi56aXBfcmVhZGxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgaWYgemxpYjoKLSAgICAgICAgZGVmIHRlc3REZWZsYXRlZChzZWxmKToKLSAgICAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBkZWYgdGVzdF9pdGVybGluZXNfc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX2l0ZXJsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgICAgICBkZWYgdGVzdE9wZW5EZWZsYXRlZChzZWxmKToKLSAgICAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYuemlwT3BlblRlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICAgICAgZGVmIHRlc3RSYW5kb21PcGVuRGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnppcFJhbmRvbU9wZW5UZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9vcGVuX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAotICAgICAgICBkZWYgdGVzdFJlYWRsaW5lRGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnppcFJlYWRsaW5lVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmFuZG9tX29wZW5fZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmFuZG9tX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAotICAgICAgICBkZWYgdGVzdFJlYWRsaW5lc0RlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi56aXBSZWFkbGluZXNUZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9yZWFkX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3NjEwOiBjYWxscyB0byByZWFkbGluZSgpIGludGVybGVhdmVkIHdpdGggY2FsbHMgdG8gcmVhZCgpLgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lX3JlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAotICAgICAgICBkZWYgdGVzdEl0ZXJsaW5lc0RlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi56aXBJdGVybGluZXNUZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yZWFkbGluZV90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQogCi0gICAgICAgIGRlZiB0ZXN0TG93Q29tcHJlc3Npb24oc2VsZik6Ci0gICAgICAgICAgICAjIENoZWNrcyBmb3IgY2FzZXMgd2hlcmUgY29tcHJlc3NlZCBkYXRhIGlzIGxhcmdlciB0aGFuIG9yaWdpbmFsCi0gICAgICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lc19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yZWFkbGluZXNfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9pdGVybGluZXNfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfaXRlcmxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfbG93X2NvbXByZXNzaW9uKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBmb3IgY2FzZXMgd2hlcmUgY29tcHJlc3NlZCBkYXRhIGlzIGxhcmdlciB0aGFuIG9yaWdpbmFsLiIiIgorICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemlwZnA6CiAgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsICcxMicpCi0gICAgICAgICAgICB6aXBmcC5jbG9zZSgpCiAKLSAgICAgICAgICAgICMgR2V0IGFuIG9wZW4gb2JqZWN0IGZvciBzdHJmaWxlCi0gICAgICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgICAgICAjIEdldCBhbiBvcGVuIG9iamVjdCBmb3Igc3RyZmlsZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIsIHppcGZpbGUuWklQX0RFRkxBVEVEKSBhcyB6aXBmcDoKICAgICAgICAgICAgIG9wZW5vYmogPSB6aXBmcC5vcGVuKCJzdHJmaWxlIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Blbm9iai5yZWFkKDEpLCAnMScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW5vYmoucmVhZCgxKSwgJzInKQogCi0gICAgZGVmIHRlc3RBYnNvbHV0ZUFyY25hbWVzKHNlbGYpOgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAiL2Fic29sdXRlIikKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiB0ZXN0X2Fic29sdXRlX2FyY25hbWVzKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICIvYWJzb2x1dGUiKQogCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLm5hbWVsaXN0KCksIFsiYWJzb2x1dGUiXSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLm5hbWVsaXN0KCksIFsiYWJzb2x1dGUiXSkKIAotICAgIGRlZiB0ZXN0QXBwZW5kVG9aaXBGaWxlKHNlbGYpOgotICAgICAgICAjIFRlc3QgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nIHppcGZpbGUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQotICAgICAgICB6aXBmcC5jbG9zZSgpCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJhIiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsIHNlbGYuZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbVEVTVEZOLCAic3RyZmlsZSJdKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgZGVmIHRlc3RfYXBwZW5kX3RvX3ppcF9maWxlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGFwcGVuZGluZyB0byBhbiBleGlzdGluZyB6aXBmaWxlLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKIAotICAgIGRlZiB0ZXN0QXBwZW5kVG9Ob25aaXBGaWxlKHNlbGYpOgotICAgICAgICAjIFRlc3QgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nIGZpbGUgdGhhdCBpcyBub3QgYSB6aXBmaWxlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJhIiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJzdHJmaWxlIiwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbVEVTVEZOLCAic3RyZmlsZSJdKQorCisgICAgZGVmIHRlc3RfYXBwZW5kX3RvX25vbl96aXBfZmlsZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBhcHBlbmRpbmcgdG8gYW4gZXhpc3RpbmcgZmlsZSB0aGF0IGlzIG5vdCBhIHppcGZpbGUuIiIiCiAgICAgICAgICMgTk9URTogdGhpcyB0ZXN0IGZhaWxzIGlmIGxlbihkKSA8IDIyIGJlY2F1c2Ugb2YgdGhlIGZpcnN0CiAgICAgICAgICMgbGluZSAiZnBpbi5zZWVrKC0yMiwgMikiIGluIF9FbmRSZWNEYXRhCi0gICAgICAgIGQgPSAnSSBhbSBub3QgYSBaaXBGaWxlIScqMTAKLSAgICAgICAgZiA9IGZpbGUoVEVTVEZOMiwgJ3diJykKLSAgICAgICAgZi53cml0ZShkKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgImEiLCB6aXBmaWxlLlpJUF9TVE9SRUQpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIGRhdGEgPSAnSSBhbSBub3QgYSBaaXBGaWxlIScqMTAKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCiAKLSAgICAgICAgZiA9IGZpbGUoVEVTVEZOMiwgJ3JiJykKLSAgICAgICAgZi5zZWVrKGxlbihkKSkKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLm5hbWVsaXN0KCksIFtURVNURk5dKQotICAgICAgICB6aXBmcC5jbG9zZSgpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiYSIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKIAotICAgIGRlZiB0ZXN0X1dyaXRlRGVmYXVsdE5hbWUoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBjYWxsaW5nIFppcEZpbGUud3JpdGUgd2l0aG91dCBhcmNuYW1lIHNwZWNpZmllZCBwcm9kdWNlcyB0aGUgZXhwZWN0ZWQgcmVzdWx0Ci0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikKLSAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgZmlsZShURVNURk4pLnJlYWQoKSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOMiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGYuc2VlayhsZW4oZGF0YSkpCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgW1RFU1RGTl0pCiAKLSAgICBkZWYgdGVzdF9QZXJGaWxlQ29tcHJlc3Npb24oc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBmaWxlcyB3aXRoaW4gYSBaaXAgYXJjaGl2ZSBjYW4gaGF2ZSBkaWZmZXJlbnQgY29tcHJlc3Npb24gb3B0aW9ucwotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgJ3N0b3JlbWUnLCB6aXBmaWxlLlpJUF9TVE9SRUQpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgJ2RlZmxhdGVtZScsIHppcGZpbGUuWklQX0RFRkxBVEVEKQotICAgICAgICBzaW5mbyA9IHppcGZwLmdldGluZm8oJ3N0b3JlbWUnKQotICAgICAgICBkaW5mbyA9IHppcGZwLmdldGluZm8oJ2RlZmxhdGVtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luZm8uY29tcHJlc3NfdHlwZSwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpbmZvLmNvbXByZXNzX3R5cGUsIHppcGZpbGUuWklQX0RFRkxBVEVEKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgZGVmIHRlc3Rfd3JpdGVfZGVmYXVsdF9uYW1lKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGNhbGxpbmcgWmlwRmlsZS53cml0ZSB3aXRob3V0IGFyY25hbWUgc3BlY2lmaWVkCisgICAgICAgIHByb2R1Y2VzIHRoZSBleHBlY3RlZCByZXN1bHQuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgb3BlbihURVNURk4pLnJlYWQoKSkKIAotICAgIGRlZiB0ZXN0X1dyaXRlVG9SZWFkb25seShzZWxmKToKLSAgICAgICAgIyBDaGVjayB0aGF0IHRyeWluZyB0byBjYWxsIHdyaXRlKCkgb24gYSByZWFkb25seSBaaXBGaWxlIG9iamVjdAotICAgICAgICAjIHJhaXNlcyBhIFJ1bnRpbWVFcnJvcgotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InciKQotICAgICAgICB6aXBmLndyaXRlc3RyKCJzb21lZmlsZS50eHQiLCAiYm9ndXMiKQotICAgICAgICB6aXBmLmNsb3NlKCkKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmLndyaXRlLCBURVNURk4pCi0gICAgICAgIHppcGYuY2xvc2UoKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9wZXJfZmlsZV9jb21wcmVzc2lvbihzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBmaWxlcyB3aXRoaW4gYSBaaXAgYXJjaGl2ZSBjYW4gaGF2ZSBkaWZmZXJlbnQKKyAgICAgICAgY29tcHJlc3Npb24gb3B0aW9ucy4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgJ3N0b3JlbWUnLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICdkZWZsYXRlbWUnLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICAgICAgICAgIHNpbmZvID0gemlwZnAuZ2V0aW5mbygnc3RvcmVtZScpCisgICAgICAgICAgICBkaW5mbyA9IHppcGZwLmdldGluZm8oJ2RlZmxhdGVtZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbmZvLmNvbXByZXNzX3R5cGUsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGluZm8uY29tcHJlc3NfdHlwZSwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICBkZWYgdGVzdEV4dHJhY3Qoc2VsZik6Ci0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKLSAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZwYXRoLCBmZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3JlYWRvbmx5KHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRyeWluZyB0byBjYWxsIHdyaXRlKCkgb24gYSByZWFkb25seSBaaXBGaWxlIG9iamVjdAorICAgICAgICByYWlzZXMgYSBSdW50aW1lRXJyb3IuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJzb21lZmlsZS50eHQiLCAiYm9ndXMiKQogCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikKLSAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6Ci0gICAgICAgICAgICB3cml0dGVuZmlsZSA9IHppcGZwLmV4dHJhY3QoZnBhdGgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZnAud3JpdGUsIFRFU1RGTikKIAotICAgICAgICAgICAgIyBtYWtlIHN1cmUgaXQgd2FzIHdyaXR0ZW4gdG8gdGhlIHJpZ2h0IHBsYWNlCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGZwYXRoKToKLSAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZnBhdGhbMTpdKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZnBhdGgpCi0gICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoY29ycmVjdGZpbGUpCisgICAgZGVmIHRlc3RfZXh0cmFjdChzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoZnBhdGgsIGZkYXRhKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXR0ZW5maWxlLCBjb3JyZWN0ZmlsZSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgorICAgICAgICAgICAgICAgIHdyaXR0ZW5maWxlID0gemlwZnAuZXh0cmFjdChmcGF0aCkKIAotICAgICAgICAgICAgIyBtYWtlIHN1cmUgY29ycmVjdCBkYXRhIGlzIGluIGNvcnJlY3QgZmlsZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZGF0YSwgZmlsZSh3cml0dGVuZmlsZSwgInJiIikucmVhZCgpKQorICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIGl0IHdhcyB3cml0dGVuIHRvIHRoZSByaWdodCBwbGFjZQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNhYnMoZnBhdGgpOgorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZnBhdGhbMTpdKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RmaWxlID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBmcGF0aCkKKyAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoY29ycmVjdGZpbGUpCiAKLSAgICAgICAgICAgIG9zLnJlbW92ZSh3cml0dGVuZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXR0ZW5maWxlLCBjb3JyZWN0ZmlsZSkKIAotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgICAgICAgICAgIyBtYWtlIHN1cmUgY29ycmVjdCBkYXRhIGlzIGluIGNvcnJlY3QgZmlsZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRhdGEsIG9wZW4od3JpdHRlbmZpbGUsICJyYiIpLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUod3JpdHRlbmZpbGUpCiAKICAgICAgICAgIyByZW1vdmUgdGhlIHRlc3QgZmlsZSBzdWJkaXJlY3RvcmllcwogICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJ3ppcHRlc3QyZGlyJykpCiAKLSAgICBkZWYgdGVzdEV4dHJhY3RBbGwoc2VsZik6Ci0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKLSAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZwYXRoLCBmZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiB0ZXN0X2V4dHJhY3RfYWxsKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0cihmcGF0aCwgZmRhdGEpCiAKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKQotICAgICAgICB6aXBmcC5leHRyYWN0YWxsKCkKLSAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGZwYXRoKToKLSAgICAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBmcGF0aFsxOl0pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZwYXRoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAuZXh0cmFjdGFsbCgpCisgICAgICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGZwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZnBhdGhbMTpdKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG91dGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZwYXRoKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkYXRhLCBmaWxlKG91dGZpbGUsICJyYiIpLnJlYWQoKSkKLQotICAgICAgICAgICAgb3MucmVtb3ZlKG91dGZpbGUpCi0KLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRhdGEsIG9wZW4ob3V0ZmlsZSwgInJiIikucmVhZCgpKQorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvdXRmaWxlKQogCiAgICAgICAgICMgcmVtb3ZlIHRoZSB0ZXN0IGZpbGUgc3ViZGlyZWN0b3JpZXMKICAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICd6aXB0ZXN0MmRpcicpKQogCisgICAgZGVmIHRlc3Rfd3JpdGVzdHJfY29tcHJlc3Npb24oc2VsZik6CisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikKKyAgICAgICAgemlwZnAud3JpdGVzdHIoImEudHh0IiwgImhlbGxvIHdvcmxkIiwgY29tcHJlc3NfdHlwZT16aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgIGlmIHpsaWI6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigiYi50eHQiLCAiaGVsbG8gd29ybGQiLCBjb21wcmVzc190eXBlPXppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgICAgIGluZm8gPSB6aXBmcC5nZXRpbmZvKCdhLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5jb21wcmVzc190eXBlLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICAgICAgaWYgemxpYjoKKyAgICAgICAgICAgIGluZm8gPSB6aXBmcC5nZXRpbmZvKCdiLnR4dCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uY29tcHJlc3NfdHlwZSwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKwogICAgIGRlZiB6aXBfdGVzdF93cml0ZXN0cl9wZXJtaXNzaW9ucyhzZWxmLCBmLCBjb21wcmVzc2lvbik6CiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgd3JpdGVzdHIgY3JlYXRlcyBmaWxlcyB3aXRoIG1vZGUgMDYwMCwKICAgICAgICAgIyB3aGVuIGl0IGlzIHBhc3NlZCBhIG5hbWUgcmF0aGVyIHRoYW4gYSBaaXBJbmZvIGluc3RhbmNlLgogCi0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIpCi0gICAgICAgIHppbmZvID0gemlwZnAuZ2V0aW5mbygnc3RyZmlsZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemluZm8uZXh0ZXJuYWxfYXR0ciwgMDYwMCA8PCAxNikKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppbmZvID0gemlwZnAuZ2V0aW5mbygnc3RyZmlsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppbmZvLmV4dGVybmFsX2F0dHIsIDA2MDAgPDwgMTYpCiAKICAgICBkZWYgdGVzdF93cml0ZXN0cl9wZXJtaXNzaW9ucyhzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CiAgICAgICAgICAgICBzZWxmLnppcF90ZXN0X3dyaXRlc3RyX3Blcm1pc3Npb25zKGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSB6aXBmaWxlIGlzIGNsb3NlZCBhZnRlciB0aGUgJ3dpdGgnIGJsb2NrLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoZnBhdGgsIGZkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmcC5mcCBpcyBub3QgTm9uZSwgJ3ppcGZwIGlzIG5vdCBvcGVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZwLmZwIGlzIE5vbmUsICd6aXBmcCBpcyBub3QgY2xvc2VkJykKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZwLmZwIGlzIG5vdCBOb25lLCAnemlwZnAgaXMgbm90IG9wZW4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZnAuZnAgaXMgTm9uZSwgJ3ppcGZwIGlzIG5vdCBjbG9zZWQnKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb25fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSB6aXBmaWxlIGlzIGNsb3NlZCBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIHRoZQorICAgICAgICAnd2l0aCcgYmxvY2suIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0cihmcGF0aCwgZmRhdGEpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDI6CisgICAgICAgICAgICAgICAgcmFpc2UgemlwZmlsZS5CYWRaaXBmaWxlKCkKKyAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwZmlsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmcDIuZnAgaXMgTm9uZSwgJ3ppcGZwIGlzIG5vdCBjbG9zZWQnKQorCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQotICAgICAgICBvcy5yZW1vdmUoVEVTVEZOMikKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKIAogY2xhc3MgVGVzdFppcDY0SW5TbWFsbEZpbGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFRoZXNlIHRlc3RzIHRlc3QgdGhlIFpJUDY0IGZ1bmN0aW9uYWxpdHkgd2l0aG91dCB1c2luZyBsYXJnZSBmaWxlcywKQEAgLTM5OCwyMDYgKzQ3NCwyMTggQEAKICAgICAgICAgc2VsZi5fbGltaXQgPSB6aXBmaWxlLlpJUDY0X0xJTUlUCiAgICAgICAgIHppcGZpbGUuWklQNjRfTElNSVQgPSA1CiAKLSAgICAgICAgbGluZV9nZW4gPSAoIlRlc3Qgb2YgemlwZmlsZSBsaW5lICVkLiIgJSBpIGZvciBpIGluIHJhbmdlKDAsIEZJWEVEVEVTVF9TSVpFKSkKKyAgICAgICAgbGluZV9nZW4gPSAoIlRlc3Qgb2YgemlwZmlsZSBsaW5lICVkLiIgJSBpCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIEZJWEVEVEVTVF9TSVpFKSkKICAgICAgICAgc2VsZi5kYXRhID0gJ1xuJy5qb2luKGxpbmVfZ2VuKQogCiAgICAgICAgICMgTWFrZSBhIHNvdXJjZSBmaWxlIHdpdGggc29tZSBsaW5lcwotICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAid2IiKQotICAgICAgICBmcC53cml0ZShzZWxmLmRhdGEpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgIndiIikgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShzZWxmLmRhdGEpCiAKLSAgICBkZWYgbGFyZ2VGaWxlRXhjZXB0aW9uVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAotICAgICAgICAgICAgICAgIHppcGZwLndyaXRlLCBURVNURk4sICJhbm90aGVyIitvcy5leHRzZXArIm5hbWUiKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgZGVmIGxhcmdlX2ZpbGVfZXhjZXB0aW9uX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGUsIFRFU1RGTiwgImFub3RoZXIubmFtZSIpCiAKLSAgICBkZWYgbGFyZ2VGaWxlRXhjZXB0aW9uVGVzdDIoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKLSAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0ciwgImFub3RoZXIiK29zLmV4dHNlcCsibmFtZSIsIHNlbGYuZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiBsYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0MihzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5MYXJnZVppcEZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0ciwgImFub3RoZXIubmFtZSIsIHNlbGYuZGF0YSkKIAotICAgIGRlZiB0ZXN0TGFyZ2VGaWxlRXhjZXB0aW9uKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xhcmdlX2ZpbGVfZXhjZXB0aW9uKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYubGFyZ2VGaWxlRXhjZXB0aW9uVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCi0gICAgICAgICAgICBzZWxmLmxhcmdlRmlsZUV4Y2VwdGlvblRlc3QyKGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYubGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLmxhcmdlX2ZpbGVfZXhjZXB0aW9uX3Rlc3QyKGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGRlZiB6aXBUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICBkZWYgemlwX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgogICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbiwgYWxsb3daaXA2ND1UcnVlKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICJhbm90aGVyIitvcy5leHRzZXArIm5hbWUiKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKLSAgICAgICAgemlwZnAud3JpdGVzdHIoInN0cmZpbGUiLCBzZWxmLmRhdGEpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbiwgYWxsb3daaXA2ND1UcnVlKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgImFub3RoZXIubmFtZSIpCisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJzdHJmaWxlIiwgc2VsZi5kYXRhKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKFRFU1RGTiksIHNlbGYuZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJhbm90aGVyIitvcy5leHRzZXArIm5hbWUiKSwgc2VsZi5kYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoInN0cmZpbGUiKSwgc2VsZi5kYXRhKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZChURVNURk4pLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoImFub3RoZXIubmFtZSIpLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoInN0cmZpbGUiKSwgc2VsZi5kYXRhKQogCi0gICAgICAgICMgUHJpbnQgdGhlIFpJUCBkaXJlY3RvcnkKLSAgICAgICAgZnAgPSBTdHJpbmdJTygpCi0gICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGZwCisgICAgICAgICAgICAjIFByaW50IHRoZSBaSVAgZGlyZWN0b3J5CisgICAgICAgICAgICBmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gZnAKKyAgICAgICAgICAgICAgICB6aXBmcC5wcmludGRpcigpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKIAotICAgICAgICAgICAgemlwZnAucHJpbnRkaXIoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAorICAgICAgICAgICAgZGlyZWN0b3J5ID0gZnAuZ2V0dmFsdWUoKQorICAgICAgICAgICAgbGluZXMgPSBkaXJlY3Rvcnkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lcyksIDQpICMgTnVtYmVyIG9mIGZpbGVzICsgaGVhZGVyCiAKLSAgICAgICAgZGlyZWN0b3J5ID0gZnAuZ2V0dmFsdWUoKQotICAgICAgICBsaW5lcyA9IGRpcmVjdG9yeS5zcGxpdGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGxpbmVzKSwgNCkgIyBOdW1iZXIgb2YgZmlsZXMgKyBoZWFkZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0ZpbGUgTmFtZScsIGxpbmVzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignTW9kaWZpZWQnLCBsaW5lc1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1NpemUnLCBsaW5lc1swXSkKIAotICAgICAgICBzZWxmLmFzc2VydF8oJ0ZpbGUgTmFtZScgaW4gbGluZXNbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnTW9kaWZpZWQnIGluIGxpbmVzWzBdKQotICAgICAgICBzZWxmLmFzc2VydF8oJ1NpemUnIGluIGxpbmVzWzBdKQorICAgICAgICAgICAgZm4sIGRhdGUsIHRpbWVfLCBzaXplID0gbGluZXNbMV0uc3BsaXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbiwgJ2Fub3RoZXIubmFtZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS5zdHJwdGltZShkYXRlLCAnJVktJW0tJWQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnN0cnB0aW1lKHRpbWVfLCAnJUg6JU06JVMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgc3RyKGxlbihzZWxmLmRhdGEpKSkKIAotICAgICAgICBmbiwgZGF0ZSwgdGltZSwgc2l6ZSA9IGxpbmVzWzFdLnNwbGl0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZm4sICdhbm90aGVyLm5hbWUnKQotICAgICAgICAjIFhYWDogdGltZXN0YW1wIGlzIG5vdCB0ZXN0ZWQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2l6ZSwgc3RyKGxlbihzZWxmLmRhdGEpKSkKKyAgICAgICAgICAgICMgQ2hlY2sgdGhlIG5hbWVsaXN0CisgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5hbWVzKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oVEVTVEZOLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImFub3RoZXIubmFtZSIsIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RyZmlsZSIsIG5hbWVzKQogCi0gICAgICAgICMgQ2hlY2sgdGhlIG5hbWVsaXN0Ci0gICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obmFtZXMpLCAzKQotICAgICAgICBzZWxmLmFzc2VydF8oVEVTVEZOIGluIG5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydF8oImFub3RoZXIiK29zLmV4dHNlcCsibmFtZSIgaW4gbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xygic3RyZmlsZSIgaW4gbmFtZXMpCisgICAgICAgICAgICAjIENoZWNrIGluZm9saXN0CisgICAgICAgICAgICBpbmZvcyA9IHppcGZwLmluZm9saXN0KCkKKyAgICAgICAgICAgIG5hbWVzID0gW2kuZmlsZW5hbWUgZm9yIGkgaW4gaW5mb3NdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKFRFU1RGTiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJhbm90aGVyLm5hbWUiLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmZpbGUiLCBuYW1lcykKKyAgICAgICAgICAgIGZvciBpIGluIGluZm9zOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQogCi0gICAgICAgICMgQ2hlY2sgaW5mb2xpc3QKLSAgICAgICAgaW5mb3MgPSB6aXBmcC5pbmZvbGlzdCgpCi0gICAgICAgIG5hbWVzID0gWyBpLmZpbGVuYW1lIGZvciBpIGluIGluZm9zIF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKG5hbWVzKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKFRFU1RGTiBpbiBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJhbm90aGVyIitvcy5leHRzZXArIm5hbWUiIGluIG5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydF8oInN0cmZpbGUiIGluIG5hbWVzKQotICAgICAgICBmb3IgaSBpbiBpbmZvczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGkuZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKKyAgICAgICAgICAgICMgY2hlY2sgZ2V0aW5mbworICAgICAgICAgICAgZm9yIG5tIGluIChURVNURk4sICJhbm90aGVyLm5hbWUiLCAic3RyZmlsZSIpOgorICAgICAgICAgICAgICAgIGluZm8gPSB6aXBmcC5nZXRpbmZvKG5tKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5maWxlbmFtZSwgbm0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmZpbGVfc2l6ZSwgbGVuKHNlbGYuZGF0YSkpCiAKLSAgICAgICAgIyBjaGVjayBnZXRpbmZvCi0gICAgICAgIGZvciBubSBpbiAoVEVTVEZOLCAiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIiwgInN0cmZpbGUiKToKLSAgICAgICAgICAgIGluZm8gPSB6aXBmcC5nZXRpbmZvKG5tKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW5mby5maWxlbmFtZSwgbm0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbmZvLmZpbGVfc2l6ZSwgbGVuKHNlbGYuZGF0YSkpCisgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGVzdHppcCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgemlwZnAudGVzdHppcCgpCiAKLSAgICAgICAgIyBDaGVjayB0aGF0IHRlc3R6aXAgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24KLSAgICAgICAgemlwZnAudGVzdHppcCgpCi0KLQotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICBkZWYgdGVzdFN0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9zdG9yZWQoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgc2VsZi56aXBUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICBpZiB6bGliOgotICAgICAgICBkZWYgdGVzdERlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi56aXBUZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIGRlZiB0ZXN0X2Fic29sdXRlX2FyY25hbWVzKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1UcnVlKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgIi9hYnNvbHV0ZSIpCiAKLSAgICBkZWYgdGVzdEFic29sdXRlQXJjbmFtZXMoc2VsZik6Ci0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgIi9hYnNvbHV0ZSIpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKLQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbImFic29sdXRlIl0pCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbImFic29sdXRlIl0pCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHppcGZpbGUuWklQNjRfTElNSVQgPSBzZWxmLl9saW1pdAotICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQotICAgICAgICBvcy5yZW1vdmUoVEVTVEZOMikKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKIAogY2xhc3MgUHlaaXBGaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0V3JpdGVQeWZpbGUoc2VsZik6Ci0gICAgICAgIHppcGZwICA9IHppcGZpbGUuUHlaaXBGaWxlKFRlbXBvcmFyeUZpbGUoKSwgInciKQotICAgICAgICBmbiA9IF9fZmlsZV9fCi0gICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucHljJykgb3IgZm4uZW5kc3dpdGgoJy5weW8nKToKLSAgICAgICAgICAgIGZuID0gZm5bOi0xXQorICAgIGRlZiB0ZXN0X3dyaXRlX3B5ZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICBmbiA9IF9fZmlsZV9fCisgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aCgnLnB5YycpIG9yIGZuLmVuZHN3aXRoKCcucHlvJyk6CisgICAgICAgICAgICAgICAgZm4gPSBmbls6LTFdCiAKLSAgICAgICAgemlwZnAud3JpdGVweShmbikKKyAgICAgICAgICAgIHppcGZwLndyaXRlcHkoZm4pCiAKLSAgICAgICAgYm4gPSBvcy5wYXRoLmJhc2VuYW1lKGZuKQotICAgICAgICBzZWxmLmFzc2VydF8oYm4gbm90IGluIHppcGZwLm5hbWVsaXN0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhibiArICdvJyBpbiB6aXBmcC5uYW1lbGlzdCgpIG9yIGJuICsgJ2MnIGluIHppcGZwLm5hbWVsaXN0KCkpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgICAgIGJuID0gb3MucGF0aC5iYXNlbmFtZShmbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYm4sIHppcGZwLm5hbWVsaXN0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYm4gKyAnbycgaW4gemlwZnAubmFtZWxpc3QoKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJuICsgJ2MnIGluIHppcGZwLm5hbWVsaXN0KCkpCiAKKyAgICAgICAgd2l0aCB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICBmbiA9IF9fZmlsZV9fCisgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aCgoJy5weWMnLCAnLnB5bycpKToKKyAgICAgICAgICAgICAgICBmbiA9IGZuWzotMV0KIAotICAgICAgICB6aXBmcCAgPSB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikKLSAgICAgICAgZm4gPSBfX2ZpbGVfXwotICAgICAgICBpZiBmbi5lbmRzd2l0aCgnLnB5YycpIG9yIGZuLmVuZHN3aXRoKCcucHlvJyk6Ci0gICAgICAgICAgICBmbiA9IGZuWzotMV0KKyAgICAgICAgICAgIHppcGZwLndyaXRlcHkoZm4sICJ0ZXN0cGFja2FnZSIpCiAKLSAgICAgICAgemlwZnAud3JpdGVweShmbiwgInRlc3RwYWNrYWdlIikKKyAgICAgICAgICAgIGJuID0gIiVzLyVzIiAlICgidGVzdHBhY2thZ2UiLCBvcy5wYXRoLmJhc2VuYW1lKGZuKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYm4sIHppcGZwLm5hbWVsaXN0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYm4gKyAnbycgaW4gemlwZnAubmFtZWxpc3QoKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJuICsgJ2MnIGluIHppcGZwLm5hbWVsaXN0KCkpCiAKLSAgICAgICAgYm4gPSAiJXMvJXMiJSgidGVzdHBhY2thZ2UiLCBvcy5wYXRoLmJhc2VuYW1lKGZuKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGJuIG5vdCBpbiB6aXBmcC5uYW1lbGlzdCgpKQotICAgICAgICBzZWxmLmFzc2VydF8oYm4gKyAnbycgaW4gemlwZnAubmFtZWxpc3QoKSBvciBibiArICdjJyBpbiB6aXBmcC5uYW1lbGlzdCgpKQotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICBkZWYgdGVzdFdyaXRlUHl0aG9uUGFja2FnZShzZWxmKToKKyAgICBkZWYgdGVzdF93cml0ZV9weXRob25fcGFja2FnZShzZWxmKToKICAgICAgICAgaW1wb3J0IGVtYWlsCiAgICAgICAgIHBhY2thZ2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZW1haWwuX19maWxlX18pCiAKLSAgICAgICAgemlwZnAgID0gemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpCi0gICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpcikKKyAgICAgICAgd2l0aCB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIpCiAKLSAgICAgICAgIyBDaGVjayBmb3IgYSBjb3VwbGUgb2YgbW9kdWxlcyBhdCBkaWZmZXJlbnQgbGV2ZWxzIG9mIHRoZSBoaWVhcmFyY2h5Ci0gICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2VtYWlsL19faW5pdF9fLnB5bycgaW4gbmFtZXMgb3IgJ2VtYWlsL19faW5pdF9fLnB5YycgaW4gbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnZW1haWwvbWltZS90ZXh0LnB5bycgaW4gbmFtZXMgb3IgJ2VtYWlsL21pbWUvdGV4dC5weWMnIGluIG5hbWVzKQorICAgICAgICAgICAgIyBDaGVjayBmb3IgYSBjb3VwbGUgb2YgbW9kdWxlcyBhdCBkaWZmZXJlbnQgbGV2ZWxzIG9mIHRoZQorICAgICAgICAgICAgIyBoaWVyYXJjaHkKKyAgICAgICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdlbWFpbC9fX2luaXRfXy5weW8nIGluIG5hbWVzIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYWlsL19faW5pdF9fLnB5YycgaW4gbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2VtYWlsL21pbWUvdGV4dC5weW8nIGluIG5hbWVzIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYWlsL21pbWUvdGV4dC5weWMnIGluIG5hbWVzKQogCi0gICAgZGVmIHRlc3RXcml0ZVB5dGhvbkRpcmVjdG9yeShzZWxmKToKKyAgICBkZWYgdGVzdF93cml0ZV9weXRob25fZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICBvcy5ta2RpcihURVNURk4yKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QxLnB5IiksICJ3IikKLSAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCA0MlxuIikKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDEucHkiKSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgicHJpbnQoNDIpXG4iKQogCi0gICAgICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QyLnB5IiksICJ3IikKLSAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCA0MiAqIDQyXG4iKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi5weSIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MiAqIDQyKVxuIikKIAotICAgICAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi50eHQiKSwgInciKQotICAgICAgICAgICAgZnAud3JpdGUoImJsYSBibGEgYmxhXG4iKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi50eHQiKSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgiYmxhIGJsYSBibGFcbiIpCiAKICAgICAgICAgICAgIHppcGZwICA9IHppcGZpbGUuUHlaaXBGaWxlKFRlbXBvcmFyeUZpbGUoKSwgInciKQogICAgICAgICAgICAgemlwZnAud3JpdGVweShURVNURk4yKQogCiAgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygnbW9kMS5weWMnIGluIG5hbWVzIG9yICdtb2QxLnB5bycgaW4gbmFtZXMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJ21vZDIucHljJyBpbiBuYW1lcyBvciAnbW9kMi5weW8nIGluIG5hbWVzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCdtb2QyLnR4dCcgbm90IGluIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdtb2QxLnB5YycgaW4gbmFtZXMgb3IgJ21vZDEucHlvJyBpbiBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbW9kMi5weWMnIGluIG5hbWVzIG9yICdtb2QyLnB5bycgaW4gbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtb2QyLnR4dCcsIG5hbWVzKQogCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTjIpCiAKLSAgICBkZWYgdGVzdFdyaXRlTm9uUHlmaWxlKHNlbGYpOgotICAgICAgICB6aXBmcCAgPSB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikKLSAgICAgICAgZmlsZShURVNURk4sICd3Jykud3JpdGUoJ21vc3QgZGVmaW5pdGVseSBub3QgYSBweXRob24gZmlsZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZnAud3JpdGVweSwgVEVTVEZOKQotICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorICAgIGRlZiB0ZXN0X3dyaXRlX25vbl9weWZpbGUoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgb3BlbihURVNURk4sICd3Jykud3JpdGUoJ21vc3QgZGVmaW5pdGVseSBub3QgYSBweXRob24gZmlsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZwLndyaXRlcHksIFRFU1RGTikKKyAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCiAKIAogY2xhc3MgT3RoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RVbmljb2RlRmlsZW5hbWVzKHNlbGYpOgotICAgICAgICB6ZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJ3IikKLSAgICAgICAgemYud3JpdGVzdHIodSJmb28udHh0IiwgIlRlc3QgZm9yIHVuaWNvZGUgZmlsZW5hbWUiKQotICAgICAgICB6Zi53cml0ZXN0cih1Ilx4ZjYudHh0IiwgIlRlc3QgZm9yIHVuaWNvZGUgZmlsZW5hbWUiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh6Zi5pbmZvbGlzdCgpWzBdLmZpbGVuYW1lLCB1bmljb2RlKSkKLSAgICAgICAgemYuY2xvc2UoKQotICAgICAgICB6ZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6Zi5maWxlbGlzdFswXS5maWxlbmFtZSwgImZvby50eHQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpmLmZpbGVsaXN0WzFdLmZpbGVuYW1lLCB1Ilx4ZjYudHh0IikKLSAgICAgICAgemYuY2xvc2UoKQorICAgIHppcHNfd2l0aF9iYWRfY3JjID0geworICAgICAgICB6aXBmaWxlLlpJUF9TVE9SRUQ6ICgKKyAgICAgICAgICAgIGInUEtcMDAzXDAwNFwwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzpyJworICAgICAgICAgICAgYidcMjUzXDM3N1xmXDBcMFwwXGZcMFwwXDBcMDA1XDBcMFwwMDBhZicKKyAgICAgICAgICAgIGInaWxlaGVsbG8sQXdvcmxkUCcKKyAgICAgICAgICAgIGInS1wwMDFcMDAyXDAyNFwwMDNcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6JworICAgICAgICAgICAgYidyXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMFwwJworICAgICAgICAgICAgYidcMFwwXDBcMFwwXDBcMFwyMDBcMDAxXDBcMFwwXDAwMGFmaScKKyAgICAgICAgICAgIGInbGVQS1wwMDVcMDA2XDBcMFwwXDBcMDAxXDBcMDAxXDAwMDNcMDAwJworICAgICAgICAgICAgYidcMFwwL1wwXDBcMFwwXDAnKSwKKyAgICAgICAgemlwZmlsZS5aSVBfREVGTEFURUQ6ICgKKyAgICAgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMFx4MDBceDA4XHgwMG59XHgwYz1GQScKKyAgICAgICAgICAgIGInS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKKyAgICAgICAgICAgIGInaWxlXHhjYkhceGNkXHhjOVx4YzlXKFx4Y2YvXHhjYUlceGM5XHhhMCcKKyAgICAgICAgICAgIGInPVx4MTNceDAwUEtceDAxXHgwMlx4MTRceDAzXHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbicKKyAgICAgICAgICAgIGInfVx4MGM9RkFLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNScKKyAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDgwXHgwMVx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgIGInXHgwMGFmaWxlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCcKKyAgICAgICAgICAgIGInXHgwMVx4MDAzXHgwMFx4MDBceDAwM1x4MDBceDAwXHgwMFx4MDBceDAwJyksCisgICAgfQogCi0gICAgZGVmIHRlc3RDcmVhdGVOb25FeGlzdGVudEZpbGVGb3JBcHBlbmQoc2VsZik6CisgICAgZGVmIHRlc3RfdW5pY29kZV9maWxlbmFtZXMoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInciKSBhcyB6ZjoKKyAgICAgICAgICAgIHpmLndyaXRlc3RyKHUiZm9vLnR4dCIsICJUZXN0IGZvciB1bmljb2RlIGZpbGVuYW1lIikKKyAgICAgICAgICAgIHpmLndyaXRlc3RyKHUiXHhmNi50eHQiLCAiVGVzdCBmb3IgdW5pY29kZSBmaWxlbmFtZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoemYuaW5mb2xpc3QoKVswXS5maWxlbmFtZSwgdW5pY29kZSkKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICJyIikgYXMgemY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpmLmZpbGVsaXN0WzBdLmZpbGVuYW1lLCAiZm9vLnR4dCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpmLmZpbGVsaXN0WzFdLmZpbGVuYW1lLCB1Ilx4ZjYudHh0IikKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9ub25fZXhpc3RlbnRfZmlsZV9mb3JfYXBwZW5kKHNlbGYpOgogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgogICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKIApAQCAtNjA1LDUyICs2OTMsNzQgQEAKICAgICAgICAgY29udGVudCA9ICdoZWxsbywgd29ybGQuIHRoaXMgaXMgc29tZSBjb250ZW50LicKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB6ZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICdhJykKLSAgICAgICAgICAgIHpmLndyaXRlc3RyKGZpbGVuYW1lLCBjb250ZW50KQotICAgICAgICAgICAgemYuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgKGVycm5vLCBlcnJtc2cpOgorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAnYScpIGFzIHpmOgorICAgICAgICAgICAgICAgIHpmLndyaXRlc3RyKGZpbGVuYW1lLCBjb250ZW50KQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgnQ291bGQgbm90IGFwcGVuZCBkYXRhIHRvIGEgbm9uLWV4aXN0ZW50IHppcCBmaWxlLicpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKFRFU1RGTikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhURVNURk4pKQogCi0gICAgICAgIHpmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgJ3InKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpmLnJlYWQoZmlsZW5hbWUpLCBjb250ZW50KQotICAgICAgICB6Zi5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgJ3InKSBhcyB6ZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemYucmVhZChmaWxlbmFtZSksIGNvbnRlbnQpCiAKLSAgICBkZWYgdGVzdENsb3NlRXJyb25lb3VzRmlsZShzZWxmKToKKyAgICBkZWYgdGVzdF9jbG9zZV9lcnJvbmVvdXNfZmlsZShzZWxmKToKICAgICAgICAgIyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhlIFppcEZpbGUgY29uc3RydWN0b3IgY2xvc2VzIHRoZSBmaWxlIG9iamVjdAotICAgICAgICAjIGl0IG9wZW5zIGlmIHRoZXJlJ3MgYW4gZXJyb3IgaW4gdGhlIGZpbGUuICBJZiBpdCBkb2Vzbid0LCB0aGUgdHJhY2ViYWNrCi0gICAgICAgICMgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIFppcEZpbGUgb2JqZWN0IGFuZCwgaW5kaXJlY3RseSwgdGhlIGZpbGUgb2JqZWN0LgorICAgICAgICAjIGl0IG9wZW5zIGlmIHRoZXJlJ3MgYW4gZXJyb3IgaW4gdGhlIGZpbGUuICBJZiBpdCBkb2Vzbid0LCB0aGUKKyAgICAgICAgIyB0cmFjZWJhY2sgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIFppcEZpbGUgb2JqZWN0IGFuZCwgaW5kaXJlY3RseSwKKyAgICAgICAgIyB0aGUgZmlsZSBvYmplY3QuCiAgICAgICAgICMgT24gV2luZG93cywgdGhpcyBjYXVzZXMgdGhlIG9zLnVubGluaygpIGNhbGwgdG8gZmFpbCBiZWNhdXNlIHRoZQogICAgICAgICAjIHVuZGVybHlpbmcgZmlsZSBpcyBzdGlsbCBvcGVuLiAgVGhpcyBpcyBTRiBidWcgIzQxMjIxNC4KICAgICAgICAgIwotICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAidyIpCi0gICAgICAgIGZwLndyaXRlKCJ0aGlzIGlzIG5vdCBhIGxlZ2FsIHppcCBmaWxlXG4iKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3IikgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZSgidGhpcyBpcyBub3QgYSBsZWdhbCB6aXAgZmlsZVxuIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgemYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOKQogICAgICAgICBleGNlcHQgemlwZmlsZS5CYWRaaXBmaWxlOgogICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIHRlc3RJc1ppcEVycm9uZW91c0ZpbGUoc2VsZik6Ci0gICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBpc196aXBmaWxlIGZ1bmN0aW9uIGNvcnJlY3RseSBpZGVudGlmaWVzCi0gICAgICAgICMgYSBmaWxlIHRoYXQgaXMgbm90IGEgemlwIGZpbGUKLSAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgInciKQorICAgIGRlZiB0ZXN0X2lzX3ppcF9lcnJvbmVvdXNfZmlsZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBpc196aXBmaWxlKCkgY29ycmVjdGx5IGlkZW50aWZpZXMgbm9uLXppcCBmaWxlcy4iIiIKKyAgICAgICAgIyAtIHBhc3NpbmcgYSBmaWxlbmFtZQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoInRoaXMgaXMgbm90IGEgbGVnYWwgemlwIGZpbGVcbiIpCisgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShURVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hrKQorICAgICAgICAjIC0gcGFzc2luZyBhIGZpbGUgb2JqZWN0CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjaGspCisgICAgICAgICMgLSBwYXNzaW5nIGEgZmlsZS1saWtlIG9iamVjdAorICAgICAgICBmcCA9IFN0cmluZ0lPKCkKICAgICAgICAgZnAud3JpdGUoInRoaXMgaXMgbm90IGEgbGVnYWwgemlwIGZpbGVcbiIpCi0gICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKFRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNoayBpcyBGYWxzZSkKKyAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNoaykKKyAgICAgICAgZnAuc2VlaygwLCAwKQorICAgICAgICBjaGsgPSB6aXBmaWxlLmlzX3ppcGZpbGUoZnApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY2hrKQogCi0gICAgZGVmIHRlc3RJc1ppcFZhbGlkRmlsZShzZWxmKToKLSAgICAgICAgIyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhlIGlzX3ppcGZpbGUgZnVuY3Rpb24gY29ycmVjdGx5IGlkZW50aWZpZXMKLSAgICAgICAgIyBhIGZpbGUgdGhhdCBpcyBhIHppcCBmaWxlCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKLSAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgemlwZi5jbG9zZSgpCisgICAgZGVmIHRlc3RfaXNfemlwX3ZhbGlkX2ZpbGUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgaXNfemlwZmlsZSgpIGNvcnJlY3RseSBpZGVudGlmaWVzIHppcCBmaWxlcy4iIiIKKyAgICAgICAgIyAtIHBhc3NpbmcgYSBmaWxlbmFtZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKICAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKFRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNoayBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hrKQorICAgICAgICAjIC0gcGFzc2luZyBhIGZpbGUgb2JqZWN0CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaykKKyAgICAgICAgICAgIGZwLnNlZWsoMCwgMCkKKyAgICAgICAgICAgIHppcF9jb250ZW50cyA9IGZwLnJlYWQoKQorICAgICAgICAjIC0gcGFzc2luZyBhIGZpbGUtbGlrZSBvYmplY3QKKyAgICAgICAgZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGZwLndyaXRlKHppcF9jb250ZW50cykKKyAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hrKQorICAgICAgICBmcC5zZWVrKDAsIDApCisgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaykKIAotICAgIGRlZiB0ZXN0Tm9uRXhpc3RlbnRGaWxlUmFpc2VzSU9FcnJvcihzZWxmKToKKyAgICBkZWYgdGVzdF9ub25fZXhpc3RlbnRfZmlsZV9yYWlzZXNfSU9FcnJvcihzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUgd2UgZG9uJ3QgcmFpc2UgYW4gQXR0cmlidXRlRXJyb3Igd2hlbiBhIHBhcnRpYWxseS1jb25zdHJ1Y3RlZAogICAgICAgICAjIFppcEZpbGUgaW5zdGFuY2UgaXMgZmluYWxpemVkOyB0aGlzIHRlc3RzIGZvciByZWdyZXNzaW9uIG9uIFNGIHRyYWNrZXIKICAgICAgICAgIyBidWcgIzQwMzg3MS4KQEAgLTY2OSwxNyArNzc5LDE1IEBACiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOKQogCi0gICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3cnKQotICAgICAgICBmLndyaXRlKCJzaG9ydCBmaWxlIikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZSgic2hvcnQgZmlsZSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwZmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCiAKLSAgICBkZWYgdGVzdENsb3NlZFppcFJhaXNlc1J1bnRpbWVFcnJvcihzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhhdCB0ZXN0emlwKCkgZG9lc24ndCBzd2FsbG93IGluYXBwcm9wcmlhdGUgZXhjZXB0aW9ucy4KKyAgICBkZWYgdGVzdF9jbG9zZWRfemlwX3JhaXNlc19SdW50aW1lRXJyb3Ioc2VsZik6CisgICAgICAgICIiIlZlcmlmeSB0aGF0IHRlc3R6aXAoKSBkb2Vzbid0IHN3YWxsb3cgaW5hcHByb3ByaWF0ZSBleGNlcHRpb25zLiIiIgogICAgICAgICBkYXRhID0gU3RyaW5nSU8oKQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKGRhdGEsIG1vZGU9InciKQotICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZGF0YSwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQogCiAgICAgICAgICMgVGhpcyBpcyBjb3JyZWN0OyBjYWxsaW5nIC5yZWFkIG9uIGEgY2xvc2VkIFppcEZpbGUgc2hvdWxkIHRocm93CiAgICAgICAgICMgYSBSdW50aW1lRXJyb3IsIGFuZCBzbyBzaG91bGQgY2FsbGluZyAudGVzdHppcC4gIEFuIGVhcmxpZXIKQEAgLTY4OSwxMDkgKzc5NywxOTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmLm9wZW4sICJmb28udHh0IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmLnRlc3R6aXApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi53cml0ZXN0ciwgImJvZ3VzLnR4dCIsICJib2d1cyIpCi0gICAgICAgIGZpbGUoVEVTVEZOLCAndycpLndyaXRlKCd6aXBmaWxlIHRlc3QgZGF0YScpCisgICAgICAgIG9wZW4oVEVTVEZOLCAndycpLndyaXRlKCd6aXBmaWxlIHRlc3QgZGF0YScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi53cml0ZSwgVEVTVEZOKQogCi0gICAgZGVmIHRlc3RfQmFkQ29uc3RydWN0b3JNb2RlKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgYmFkIG1vZGVzIHBhc3NlZCB0byBaaXBGaWxlIGNvbnN0cnVjdG9yIGFyZSBjYXVnaHQKKyAgICBkZWYgdGVzdF9iYWRfY29uc3RydWN0b3JfbW9kZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBiYWQgbW9kZXMgcGFzc2VkIHRvIFppcEZpbGUgY29uc3RydWN0b3IgYXJlIGNhdWdodC4iIiIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTiwgInEiKQogCi0gICAgZGVmIHRlc3RfQmFkT3Blbk1vZGUoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBiYWQgbW9kZXMgcGFzc2VkIHRvIFppcEZpbGUub3BlbiBhcmUgY2F1Z2h0Ci0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKLSAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgemlwZi5jbG9zZSgpCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKKyAgICBkZWYgdGVzdF9iYWRfb3Blbl9tb2RlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGJhZCBtb2RlcyBwYXNzZWQgdG8gWmlwRmlsZS5vcGVuIGFyZSBjYXVnaHQuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpIGFzIHppcGY6CiAgICAgICAgICMgcmVhZCB0aGUgZGF0YSB0byBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgdGhlcmUKLSAgICAgICAgemlwZi5yZWFkKCJmb28udHh0IikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmLm9wZW4sICJmb28udHh0IiwgInEiKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgICAgIHppcGYucmVhZCgiZm9vLnR4dCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYub3BlbiwgImZvby50eHQiLCAicSIpCiAKLSAgICBkZWYgdGVzdF9SZWFkMChzZWxmKToKLSAgICAgICAgIyBDaGVjayB0aGF0IGNhbGxpbmcgcmVhZCgwKSBvbiBhIFppcEV4dEZpbGUgb2JqZWN0IHJldHVybnMgYW4gZW1wdHkKLSAgICAgICAgIyBzdHJpbmcgYW5kIGRvZXNuJ3QgYWR2YW5jZSBmaWxlIHBvaW50ZXIKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQotICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQotICAgICAgICAjIHJlYWQgdGhlIGRhdGEgdG8gbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHRoZXJlCi0gICAgICAgIGYgPSB6aXBmLm9wZW4oImZvby50eHQiKQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoRklYRURURVNUX1NJWkUpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMCksICcnKQorICAgIGRlZiB0ZXN0X3JlYWQwKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGNhbGxpbmcgcmVhZCgwKSBvbiBhIFppcEV4dEZpbGUgb2JqZWN0IHJldHVybnMgYW4gZW1wdHkKKyAgICAgICAgc3RyaW5nIGFuZCBkb2Vzbid0IGFkdmFuY2UgZmlsZSBwb2ludGVyLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKyAgICAgICAgICAgICMgcmVhZCB0aGUgZGF0YSB0byBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgdGhlcmUKKyAgICAgICAgICAgIGYgPSB6aXBmLm9wZW4oImZvby50eHQiKQorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKEZJWEVEVEVTVF9TSVpFKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgwKSwgJycpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKIAotICAgIGRlZiB0ZXN0X09wZW5Ob25leGlzdGVudEl0ZW0oc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBhdHRlbXB0aW5nIHRvIGNhbGwgb3BlbigpIGZvciBhbiBpdGVtIHRoYXQgZG9lc24ndAotICAgICAgICAjIGV4aXN0IGluIHRoZSBhcmNoaXZlIHJhaXNlcyBhIFJ1bnRpbWVFcnJvcgotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCB6aXBmLm9wZW4sICJmb28udHh0IiwgInIiKQorICAgIGRlZiB0ZXN0X29wZW5fbm9uX2V4aXN0ZW50X2l0ZW0oc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYXR0ZW1wdGluZyB0byBjYWxsIG9wZW4oKSBmb3IgYW4gaXRlbSB0aGF0IGRvZXNuJ3QKKyAgICAgICAgZXhpc3QgaW4gdGhlIGFyY2hpdmUgcmFpc2VzIGEgUnVudGltZUVycm9yLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHppcGYub3BlbiwgImZvby50eHQiLCAiciIpCiAKLSAgICBkZWYgdGVzdF9CYWRDb21wcmVzc2lvbk1vZGUoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBiYWQgY29tcHJlc3Npb24gbWV0aG9kcyBwYXNzZWQgdG8gWmlwRmlsZS5vcGVuIGFyZSBjYXVnaHQKKyAgICBkZWYgdGVzdF9iYWRfY29tcHJlc3Npb25fbW9kZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBiYWQgY29tcHJlc3Npb24gbWV0aG9kcyBwYXNzZWQgdG8gWmlwRmlsZS5vcGVuIGFyZQorICAgICAgICBjYXVnaHQuIiIiCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICJ3IiwgLTEpCiAKLSAgICBkZWYgdGVzdF9OdWxsQnl0ZUluRmlsZW5hbWUoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBhIGZpbGVuYW1lIGNvbnRhaW5pbmcgYSBudWxsIGJ5dGUgaXMgcHJvcGVybHkgdGVybWluYXRlZAotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCi0gICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHRceDAwcXFxIiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGYubmFtZWxpc3QoKSwgWydmb28udHh0J10pCisgICAgZGVmIHRlc3RfbnVsbF9ieXRlX2luX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGEgZmlsZW5hbWUgY29udGFpbmluZyBhIG51bGwgYnl0ZSBpcyBwcm9wZXJseQorICAgICAgICB0ZXJtaW5hdGVkLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dFx4MDBxcXEiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGYubmFtZWxpc3QoKSwgWydmb28udHh0J10pCiAKLSAgICBkZWYgdGVzdF9TdHJ1Y3RTaXplcyhzZWxmKToKLSAgICAgICAgIyBjaGVjayB0aGF0IFpJUCBpbnRlcm5hbCBzdHJ1Y3R1cmUgc2l6ZXMgYXJlIGNhbGN1bGF0ZWQgY29ycmVjdGx5CisgICAgZGVmIHRlc3Rfc3RydWN0X3NpemVzKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IFpJUCBpbnRlcm5hbCBzdHJ1Y3R1cmUgc2l6ZXMgYXJlIGNhbGN1bGF0ZWQgY29ycmVjdGx5LiIiIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZpbGUuc2l6ZUVuZENlbnREaXIsIDIyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZpbGUuc2l6ZUNlbnRyYWxEaXIsIDQ2KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZpbGUuc2l6ZUVuZENlbnREaXI2NCwgNTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZmlsZS5zaXplRW5kQ2VudERpcjY0TG9jYXRvciwgMjApCiAKLSAgICBkZWYgdGVzdENvbW1lbnRzKHNlbGYpOgotICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBjb21tZW50cyBvbiB0aGUgYXJjaGl2ZSBhcmUgaGFuZGxlZCBwcm9wZXJseQorICAgIGRlZiB0ZXN0X2NvbW1lbnRzKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGNvbW1lbnRzIG9uIHRoZSBhcmNoaXZlIGFyZSBoYW5kbGVkIHByb3Blcmx5LiIiIgogCiAgICAgICAgICMgY2hlY2sgZGVmYXVsdCBjb21tZW50IGlzIGVtcHR5Ci0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsICcnKQotICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQotICAgICAgICB6aXBmLmNsb3NlKCkKLSAgICAgICAgemlwZnIgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmci5jb21tZW50LCAnJykKLSAgICAgICAgemlwZnIuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsICcnKQorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsICcnKQogCiAgICAgICAgICMgY2hlY2sgYSBzaW1wbGUgc2hvcnQgY29tbWVudAogICAgICAgICBjb21tZW50ID0gJ0JyYXZlbHkgdGFraW5nIHRvIGhpcyBmZWV0LCBoZSBiZWF0IGEgdmVyeSBicmF2ZSByZXRyZWF0LicKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQotICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50Ci0gICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCi0gICAgICAgIHppcGYuY2xvc2UoKQotICAgICAgICB6aXBmciA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZyLmNvbW1lbnQsIGNvbW1lbnQpCi0gICAgICAgIHppcGZyLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYuY29tbWVudCA9IGNvbW1lbnQKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGYuY29tbWVudCwgY29tbWVudCkKIAogICAgICAgICAjIGNoZWNrIGEgY29tbWVudCBvZiBtYXggbGVuZ3RoCiAgICAgICAgIGNvbW1lbnQyID0gJycuam9pbihbJyVkJyAlIChpKiozICUgMTApIGZvciBpIGluIHhyYW5nZSgoMSA8PCAxNiktMSldKQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCi0gICAgICAgIHppcGYuY29tbWVudCA9IGNvbW1lbnQyCi0gICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCi0gICAgICAgIHppcGYuY2xvc2UoKQotICAgICAgICB6aXBmciA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZyLmNvbW1lbnQsIGNvbW1lbnQyKQotICAgICAgICB6aXBmci5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50MgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsIGNvbW1lbnQyKQogCiAgICAgICAgICMgY2hlY2sgYSBjb21tZW50IHRoYXQgaXMgdG9vIGxvbmcgaXMgdHJ1bmNhdGVkCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50MiArICdvb3BzJworICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCBjb21tZW50MikKKworICAgIGRlZiBjaGVja190ZXN0emlwX3dpdGhfYmFkX2NyYyhzZWxmLCBjb21wcmVzc2lvbik6CisgICAgICAgICIiIlRlc3RzIHRoYXQgZmlsZXMgd2l0aCBiYWQgQ1JDcyByZXR1cm4gdGhlaXIgbmFtZSBmcm9tIHRlc3R6aXAuIiIiCisgICAgICAgIHppcGRhdGEgPSBzZWxmLnppcHNfd2l0aF9iYWRfY3JjW2NvbXByZXNzaW9uXQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgIyB0ZXN0emlwIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IGNvcnJ1cHQgZmlsZSwgb3IgTm9uZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWZpbGUnLCB6aXBmLnRlc3R6aXAoKSkKKworICAgIGRlZiB0ZXN0X3Rlc3R6aXBfd2l0aF9iYWRfY3JjX3N0b3JlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190ZXN0emlwX3dpdGhfYmFkX2NyYyh6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfdGVzdHppcF93aXRoX2JhZF9jcmNfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdGVzdHppcF93aXRoX2JhZF9jcmMoemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgY2hlY2tfcmVhZF93aXRoX2JhZF9jcmMoc2VsZiwgY29tcHJlc3Npb24pOgorICAgICAgICAiIiJUZXN0cyB0aGF0IGZpbGVzIHdpdGggYmFkIENSQ3MgcmFpc2UgYSBCYWRaaXBmaWxlIGV4Y2VwdGlvbiB3aGVuIHJlYWQuIiIiCisgICAgICAgIHppcGRhdGEgPSBzZWxmLnppcHNfd2l0aF9iYWRfY3JjW2NvbXByZXNzaW9uXQorCisgICAgICAgICMgVXNpbmcgWmlwRmlsZS5yZWFkKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyh6aXBkYXRhKSwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGYucmVhZCwgJ2FmaWxlJykKKworICAgICAgICAjIFVzaW5nIFppcEV4dEZpbGUucmVhZCgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ2FmaWxlJywgJ3InKSBhcyBjb3JydXB0X2ZpbGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBmaWxlLCBjb3JydXB0X2ZpbGUucmVhZCkKKworICAgICAgICAjIFNhbWUgd2l0aCBzbWFsbCByZWFkcyAoaW4gb3JkZXIgdG8gZXhlcmNpc2UgdGhlIGJ1ZmZlcmluZyBsb2dpYykKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyh6aXBkYXRhKSwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICB3aXRoIHppcGYub3BlbignYWZpbGUnLCAncicpIGFzIGNvcnJ1cHRfZmlsZToKKyAgICAgICAgICAgICAgICBjb3JydXB0X2ZpbGUuTUlOX1JFQURfU0laRSA9IDIKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGNvcnJ1cHRfZmlsZS5yZWFkKDIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfcmVhZF93aXRoX2JhZF9jcmNfc3RvcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlYWRfd2l0aF9iYWRfY3JjKHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkX3dpdGhfYmFkX2NyY19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWFkX3dpdGhfYmFkX2NyYyh6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIGRlZiBjaGVja19yZWFkX3JldHVybl9zaXplKHNlbGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgIyBJc3N1ZSAjOTgzNzogWmlwRXh0RmlsZS5yZWFkKCkgc2hvdWxkbid0IHJldHVybiBtb3JlIGJ5dGVzCisgICAgICAgICMgdGhhbiByZXF1ZXN0ZWQuCisgICAgICAgIGZvciB0ZXN0X3NpemUgaW4gKDEsIDQwOTUsIDQwOTYsIDQwOTcsIDE2Mzg0KToKKyAgICAgICAgICAgIGZpbGVfc2l6ZSA9IHRlc3Rfc2l6ZSArIDEKKyAgICAgICAgICAgIGp1bmsgPSBiJycuam9pbihzdHJ1Y3QucGFjaygnQicsIHJhbmRpbnQoMCwgMjU1KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZShmaWxlX3NpemUpKQorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTygpLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmOgorICAgICAgICAgICAgICAgIHppcGYud3JpdGVzdHIoJ2ZvbycsIGp1bmspCisgICAgICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ2ZvbycsICdyJykgYXMgZnA6CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQodGVzdF9zaXplKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCB0ZXN0X3NpemUpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JldHVybl9zaXplX3N0b3JlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWFkX3JldHVybl9zaXplKHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkX3JldHVybl9zaXplX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlYWRfcmV0dXJuX3NpemUoemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgdGVzdF9lbXB0eV96aXBmaWxlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgY3JlYXRpbmcgYSBmaWxlIGluICd3JyBvciAnYScgbW9kZSBhbmQgY2xvc2luZyB3aXRob3V0CisgICAgICAgICMgYWRkaW5nIGFueSBmaWxlcyB0byB0aGUgYXJjaGl2ZXMgY3JlYXRlcyBhIHZhbGlkIGVtcHR5IFpJUCBmaWxlCiAgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKLSAgICAgICAgemlwZi5jb21tZW50ID0gY29tbWVudDIgKyAnb29wcycKLSAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKICAgICAgICAgemlwZi5jbG9zZSgpCi0gICAgICAgIHppcGZyID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnIuY29tbWVudCwgY29tbWVudDIpCi0gICAgICAgIHppcGZyLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQorICAgICAgICBleGNlcHQgemlwZmlsZS5CYWRaaXBmaWxlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJVbmFibGUgdG8gY3JlYXRlIGVtcHR5IFpJUCBmaWxlIGluICd3JyBtb2RlIikKKworICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iYSIpCisgICAgICAgIHppcGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVW5hYmxlIHRvIGNyZWF0ZSBlbXB0eSBaSVAgZmlsZSBpbiAnYScgbW9kZSIpCisKKyAgICBkZWYgdGVzdF9vcGVuX2VtcHR5X2ZpbGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTcxMDcwMzogQ2hlY2sgdGhhdCBvcGVuaW5nIGEgZmlsZSB3aXRoIGxlc3MgdGhhbiAyMiBieXRlcworICAgICAgICAjIHJhaXNlcyBhIEJhZFppcGZpbGUgZXhjZXB0aW9uIChyYXRoZXIgdGhhbiB0aGUgcHJldmlvdXNseSB1bmhlbHBmdWwKKyAgICAgICAgIyBJT0Vycm9yKQorICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwZmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICdyJykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOKQotICAgICAgICBzdXBwb3J0LnVubGluayhURVNURk4yKQorICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICB1bmxpbmsoVEVTVEZOMikKKwogCiBjbGFzcyBEZWNyeXB0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IFpJUCBkZWNyeXB0aW9uIHdvcmtzLiBTaW5jZSB0aGUgbGlicmFyeSBkb2VzIG5vdAotICAgICMgc3VwcG9ydCBlbmNyeXB0aW9uIGF0IHRoZSBtb21lbnQsIHdlIHVzZSBhIHByZS1nZW5lcmF0ZWQgZW5jcnlwdGVkCi0gICAgIyBaSVAgZmlsZQorICAgICIiIkNoZWNrIHRoYXQgWklQIGRlY3J5cHRpb24gd29ya3MuIFNpbmNlIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisgICAgc3VwcG9ydCBlbmNyeXB0aW9uIGF0IHRoZSBtb21lbnQsIHdlIHVzZSBhIHByZS1nZW5lcmF0ZWQgZW5jcnlwdGVkCisgICAgWklQIGZpbGUuIiIiCiAKICAgICBkYXRhID0gKAogICAgICdQS1x4MDNceDA0XHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwXHgxYVx4MDAnCkBAIC04MTUsMTMgKzEwMDYsMTEgQEAKICAgICBwbGFpbjIgPSAnXHgwMCcqNTEyCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIGZwID0gb3BlbihURVNURk4sICJ3YiIpCi0gICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKICAgICAgICAgc2VsZi56aXAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAiciIpCi0gICAgICAgIGZwID0gb3BlbihURVNURk4yLCAid2IiKQotICAgICAgICBmcC53cml0ZShzZWxmLmRhdGEyKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4yLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YTIpCiAgICAgICAgIHNlbGYuemlwMiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC04MzAsMTc2ICsxMDE5LDE4NyBAQAogICAgICAgICBzZWxmLnppcDIuY2xvc2UoKQogICAgICAgICBvcy51bmxpbmsoVEVTVEZOMikKIAotICAgIGRlZiB0ZXN0Tm9QYXNzd29yZChzZWxmKToKKyAgICBkZWYgdGVzdF9ub19wYXNzd29yZChzZWxmKToKICAgICAgICAgIyBSZWFkaW5nIHRoZSBlbmNyeXB0ZWQgZmlsZSB3aXRob3V0IHBhc3N3b3JkCiAgICAgICAgICMgbXVzdCBnZW5lcmF0ZSBhIFJ1blRpbWUgZXhjZXB0aW9uCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi56aXAucmVhZCwgInRlc3QudHh0IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLnppcDIucmVhZCwgInplcm8iKQogCi0gICAgZGVmIHRlc3RCYWRQYXNzd29yZChzZWxmKToKKyAgICBkZWYgdGVzdF9iYWRfcGFzc3dvcmQoc2VsZik6CiAgICAgICAgIHNlbGYuemlwLnNldHBhc3N3b3JkKCJwZXJsIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLnppcC5yZWFkLCAidGVzdC50eHQiKQogICAgICAgICBzZWxmLnppcDIuc2V0cGFzc3dvcmQoInBlcmwiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYuemlwMi5yZWFkLCAiemVybyIpCiAKLSAgICBkZWYgdGVzdEdvb2RQYXNzd29yZChzZWxmKToKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfZ29vZF9wYXNzd29yZChzZWxmKToKICAgICAgICAgc2VsZi56aXAuc2V0cGFzc3dvcmQoInB5dGhvbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuemlwLnJlYWQoInRlc3QudHh0IiksIHNlbGYucGxhaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi56aXAucmVhZCgidGVzdC50eHQiKSwgc2VsZi5wbGFpbikKICAgICAgICAgc2VsZi56aXAyLnNldHBhc3N3b3JkKCIxMjM0NSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuemlwMi5yZWFkKCJ6ZXJvIiksIHNlbGYucGxhaW4yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuemlwMi5yZWFkKCJ6ZXJvIiksIHNlbGYucGxhaW4yKQogCiAKIGNsYXNzIFRlc3RzV2l0aFJhbmRvbUJpbmFyeUZpbGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGRhdGFjb3VudCA9IHJhbmRpbnQoMTYsIDY0KSoxMDI0ICsgcmFuZGludCgxLCAxMDI0KQotICAgICAgICBzZWxmLmRhdGEgPSAnJy5qb2luKChzdHJ1Y3QucGFjaygnPGYnLCByYW5kb20oKSpyYW5kaW50KC0xMDAwLCAxMDAwKSkgZm9yIGkgaW4geHJhbmdlKGRhdGFjb3VudCkpKQorICAgICAgICBzZWxmLmRhdGEgPSAnJy5qb2luKHN0cnVjdC5wYWNrKCc8ZicsIHJhbmRvbSgpKnJhbmRpbnQoLTEwMDAsIDEwMDApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShkYXRhY291bnQpKQogCiAgICAgICAgICMgTWFrZSBhIHNvdXJjZSBmaWxlIHdpdGggc29tZSBsaW5lcwotICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAid2IiKQotICAgICAgICBmcC53cml0ZShzZWxmLmRhdGEpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgIndiIikgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShzZWxmLmRhdGEpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTikKLSAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOMikKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCiAKLSAgICBkZWYgbWFrZVRlc3RBcmNoaXZlKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICBkZWYgbWFrZV90ZXN0X2FyY2hpdmUoc2VsZiwgZiwgY29tcHJlc3Npb24pOgogICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikKLSAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIikKLSAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICJhbm90aGVyLm5hbWUiKQorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCiAKLSAgICBkZWYgemlwVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIGRlZiB6aXBfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKQotICAgICAgICB0ZXN0ZGF0YSA9IHppcGZwLnJlYWQoVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0ZGF0YSksIGxlbihzZWxmLmRhdGEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhLCBzZWxmLmRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIiksIHNlbGYuZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHRlc3RkYXRhID0gemlwZnAucmVhZChURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0ZGF0YSksIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJhbm90aGVyLm5hbWUiKSwgc2VsZi5kYXRhKQogCi0gICAgZGVmIHRlc3RTdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3Rfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGRlZiB6aXBPcGVuVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgemlwX29wZW5fdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKQotICAgICAgICB6aXBkYXRhMSA9IFtdCi0gICAgICAgIHppcG9wZW4xID0gemlwZnAub3BlbihURVNURk4pCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMS5yZWFkKDI1NikKLSAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZGF0YTEgPSBbXQorICAgICAgICAgICAgemlwb3BlbjEgPSB6aXBmcC5vcGVuKFRFU1RGTikKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjEucmVhZCgyNTYpCisgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB6aXBkYXRhMS5hcHBlbmQocmVhZF9kYXRhKQogCi0gICAgICAgIHppcGRhdGEyID0gW10KLSAgICAgICAgemlwb3BlbjIgPSB6aXBmcC5vcGVuKCJhbm90aGVyIitvcy5leHRzZXArIm5hbWUiKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjIucmVhZCgyNTYpCi0gICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB6aXBkYXRhMi5hcHBlbmQocmVhZF9kYXRhKQorICAgICAgICAgICAgemlwZGF0YTIgPSBbXQorICAgICAgICAgICAgemlwb3BlbjIgPSB6aXBmcC5vcGVuKCJhbm90aGVyLm5hbWUiKQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMi5yZWFkKDI1NikKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHppcGRhdGEyLmFwcGVuZChyZWFkX2RhdGEpCiAKLSAgICAgICAgdGVzdGRhdGExID0gJycuam9pbih6aXBkYXRhMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdGRhdGExKSwgbGVuKHNlbGYuZGF0YSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGExLCBzZWxmLmRhdGEpCisgICAgICAgICAgICB0ZXN0ZGF0YTEgPSAnJy5qb2luKHppcGRhdGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdGRhdGExKSwgbGVuKHNlbGYuZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhMSwgc2VsZi5kYXRhKQogCi0gICAgICAgIHRlc3RkYXRhMiA9ICcnLmpvaW4oemlwZGF0YTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhMSksIGxlbihzZWxmLmRhdGEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhMSwgc2VsZi5kYXRhKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0ZGF0YTIgPSAnJy5qb2luKHppcGRhdGEyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdGRhdGEyKSwgbGVuKHNlbGYuZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhMiwgc2VsZi5kYXRhKQogCi0gICAgZGVmIHRlc3RPcGVuU3RvcmVkKHNlbGYpOgorICAgIGRlZiB0ZXN0X29wZW5fc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwT3BlblRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi56aXBfb3Blbl90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGRlZiB6aXBSYW5kb21PcGVuVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9vcGVuX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfb3Blbl90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgZGVmIHppcF9yYW5kb21fb3Blbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pCi0gICAgICAgIHppcGRhdGExID0gW10KLSAgICAgICAgemlwb3BlbjEgPSB6aXBmcC5vcGVuKFRFU1RGTikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQocmFuZGludCgxLCAxMDI0KSkKLSAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZGF0YTEgPSBbXQorICAgICAgICAgICAgemlwb3BlbjEgPSB6aXBmcC5vcGVuKFRFU1RGTikKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjEucmVhZChyYW5kaW50KDEsIDEwMjQpKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKIAotICAgICAgICB0ZXN0ZGF0YSA9ICcnLmpvaW4oemlwZGF0YTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhKSwgbGVuKHNlbGYuZGF0YSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGEsIHNlbGYuZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICAgICAgdGVzdGRhdGEgPSAnJy5qb2luKHppcGRhdGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdGRhdGEpLCBsZW4oc2VsZi5kYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGEsIHNlbGYuZGF0YSkKIAotICAgIGRlZiB0ZXN0UmFuZG9tT3BlblN0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9yYW5kb21fb3Blbl9zdG9yZWQoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgc2VsZi56aXBSYW5kb21PcGVuVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF9yYW5kb21fb3Blbl90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yYW5kb21fb3Blbl9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3JhbmRvbV9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKworQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQogY2xhc3MgVGVzdHNXaXRoTXVsdGlwbGVPcGVucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKLSAgICAgICAgemlwZnAud3JpdGVzdHIoJ29uZXMnLCAnMScqRklYRURURVNUX1NJWkUpCi0gICAgICAgIHppcGZwLndyaXRlc3RyKCd0d29zJywgJzInKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ29uZXMnLCAnMScqRklYRURURVNUX1NJWkUpCisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigndHdvcycsICcyJypGSVhFRFRFU1RfU0laRSkKIAotICAgIGRlZiB0ZXN0U2FtZUZpbGUoc2VsZik6CisgICAgZGVmIHRlc3Rfc2FtZV9maWxlKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0ICh3aGVuIHRoZSBaaXBGaWxlIGlzIGluIGNvbnRyb2wgb2YgY3JlYXRpbmcgZmlsZSBvYmplY3RzKQogICAgICAgICAjIG11bHRpcGxlIG9wZW4oKSBjYWxscyBjYW4gYmUgbWFkZSB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlci4KLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikKLSAgICAgICAgem9wZW4xID0gemlwZi5vcGVuKCdvbmVzJykKLSAgICAgICAgem9wZW4yID0gemlwZi5vcGVuKCdvbmVzJykKLSAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCi0gICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCg1MDApCi0gICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKDUwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgZGF0YTIpCi0gICAgICAgIHppcGYuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHpvcGVuMSA9IHppcGYub3Blbignb25lcycpCisgICAgICAgICAgICB6b3BlbjIgPSB6aXBmLm9wZW4oJ29uZXMnKQorICAgICAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIGRhdGEyKQogCi0gICAgZGVmIHRlc3REaWZmZXJlbnRGaWxlKHNlbGYpOgorICAgIGRlZiB0ZXN0X2RpZmZlcmVudF9maWxlKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0ICh3aGVuIHRoZSBaaXBGaWxlIGlzIGluIGNvbnRyb2wgb2YgY3JlYXRpbmcgZmlsZSBvYmplY3RzKQogICAgICAgICAjIG11bHRpcGxlIG9wZW4oKSBjYWxscyBjYW4gYmUgbWFkZSB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlci4KLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikKLSAgICAgICAgem9wZW4xID0gemlwZi5vcGVuKCdvbmVzJykKLSAgICAgICAgem9wZW4yID0gemlwZi5vcGVuKCd0d29zJykKLSAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCi0gICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCg1MDApCi0gICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKDUwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgJzEnKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCAnMicqRklYRURURVNUX1NJWkUpCi0gICAgICAgIHppcGYuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHpvcGVuMSA9IHppcGYub3Blbignb25lcycpCisgICAgICAgICAgICB6b3BlbjIgPSB6aXBmLm9wZW4oJ3R3b3MnKQorICAgICAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsICcxJypGSVhFRFRFU1RfU0laRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsICcyJypGSVhFRFRFU1RfU0laRSkKIAotICAgIGRlZiB0ZXN0SW50ZXJsZWF2ZWQoc2VsZik6CisgICAgZGVmIHRlc3RfaW50ZXJsZWF2ZWQoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCiAgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKQotICAgICAgICB6b3BlbjEgPSB6aXBmLm9wZW4oJ29uZXMnKQotICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgem9wZW4yID0gemlwZi5vcGVuKCd0d29zJykKLSAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCi0gICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCAnMScqRklYRURURVNUX1NJWkUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsICcyJypGSVhFRFRFU1RfU0laRSkKLSAgICAgICAgemlwZi5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgem9wZW4xID0gemlwZi5vcGVuKCdvbmVzJykKKyAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgem9wZW4yID0gemlwZi5vcGVuKCd0d29zJykKKyAgICAgICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgZGF0YTEgKz0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgJzEnKkZJWEVEVEVTVF9TSVpFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgJzInKkZJWEVEVEVTVF9TSVpFKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBvcy5yZW1vdmUoVEVTVEZOMikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKIAogY2xhc3MgVGVzdFdpdGhEaXJlY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgb3MubWtkaXIoVEVTVEZOMikKIAotICAgIGRlZiB0ZXN0RXh0cmFjdERpcihzZWxmKToKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShmaW5kZmlsZSgiemlwZGlyLnppcCIpKQotICAgICAgICB6aXBmLmV4dHJhY3RhbGwoVEVTVEZOMikKKyAgICBkZWYgdGVzdF9leHRyYWN0X2RpcihzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZmluZGZpbGUoInppcGRpci56aXAiKSkgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYuZXh0cmFjdGFsbChURVNURk4yKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgImEiKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihURVNURk4yLCAiYSIsICJiIikpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKFRFU1RGTjIsICJhIiwgImIiLCAiYyIpKSkKQEAgLTEwMDcsOSArMTIwNyw5IEBACiAgICAgZGVmIHRlc3RfYnVnXzYwNTAoc2VsZik6CiAgICAgICAgICMgRXh0cmFjdGlvbiBzaG91bGQgc3VjY2VlZCBpZiBkaXJlY3RvcmllcyBhbHJlYWR5IGV4aXN0CiAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihURVNURk4yLCAiYSIpKQotICAgICAgICBzZWxmLnRlc3RFeHRyYWN0RGlyKCkKKyAgICAgICAgc2VsZi50ZXN0X2V4dHJhY3RfZGlyKCkKIAotICAgIGRlZiB0ZXN0U3RvcmVEaXIoc2VsZik6CisgICAgZGVmIHRlc3Rfc3RvcmVfZGlyKHNlbGYpOgogICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIngiKSkKICAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJ3IikKICAgICAgICAgemlwZi53cml0ZShvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIngiKSwgIngiKQpAQCAtMTAxOCwxMiArMTIxOCwxMyBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgotICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKyAgICAgICAgICAgIHVubGluayhURVNURk4pCiAKIAogY2xhc3MgVW5pdmVyc2FsTmV3bGluZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYubGluZV9nZW4gPSBbIlRlc3Qgb2YgemlwZmlsZSBsaW5lICVkLiIgJSBpIGZvciBpIGluIHhyYW5nZShGSVhFRFRFU1RfU0laRSldCisgICAgICAgIHNlbGYubGluZV9nZW4gPSBbIlRlc3Qgb2YgemlwZmlsZSBsaW5lICVkLiIgJSBpCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKEZJWEVEVEVTVF9TSVpFKV0KICAgICAgICAgc2VsZi5zZXBzID0gKCdccicsICdcclxuJywgJ1xuJykKICAgICAgICAgc2VsZi5hcmNkYXRhLCBzZWxmLmFyY2ZpbGVzID0ge30sIHt9CiAgICAgICAgIGZvciBuLCBzIGluIGVudW1lcmF0ZShzZWxmLnNlcHMpOgpAQCAtMTAzMSwxMDUgKzEyMzIsMTMzIEBACiAgICAgICAgICAgICBzZWxmLmFyY2ZpbGVzW3NdID0gJyVzLSVkJyAlIChURVNURk4sIG4pCiAgICAgICAgICAgICBvcGVuKHNlbGYuYXJjZmlsZXNbc10sICJ3YiIpLndyaXRlKHNlbGYuYXJjZGF0YVtzXSkKIAotICAgIGRlZiBtYWtlVGVzdEFyY2hpdmUoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgIGRlZiBtYWtlX3Rlc3RfYXJjaGl2ZShzZWxmLCBmLCBjb21wcmVzc2lvbik6CiAgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKQotICAgICAgICBmb3IgZm4gaW4gc2VsZi5hcmNmaWxlcy52YWx1ZXMoKToKLSAgICAgICAgICAgIHppcGZwLndyaXRlKGZuLCBmbikKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBmbiBpbiBzZWxmLmFyY2ZpbGVzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlKGZuLCBmbikKIAotICAgIGRlZiByZWFkVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIGRlZiByZWFkX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQotICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICB6aXBkYXRhID0gemlwZnAub3BlbihmbiwgInJVIikucmVhZCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJjZGF0YVtzZXBdLCB6aXBkYXRhKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHppcGRhdGEgPSB6aXBmcC5vcGVuKGZuLCAiclUiKS5yZWFkKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJjZGF0YVtzZXBdLCB6aXBkYXRhKQogCi0gICAgICAgIHppcGZwLmNsb3NlKCkKLQotICAgIGRlZiByZWFkbGluZVRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICBkZWYgcmVhZGxpbmVfcmVhZF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIikKICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgemlwb3BlbiA9IHppcGZwLm9wZW4oZm4sICJyVSIpCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVfZ2VuOgotICAgICAgICAgICAgICAgIGxpbmVkYXRhID0gemlwb3Blbi5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lZGF0YSwgbGluZSArICdcbicpCisgICAgICAgICAgICBkYXRhID0gJycKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcmVhZCA9IHppcG9wZW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGRhdGEgKz0gcmVhZAorCisgICAgICAgICAgICAgICAgcmVhZCA9IHppcG9wZW4ucmVhZCg1KQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGRhdGEgKz0gcmVhZAorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHNlbGYuYXJjZGF0YVsnXG4nXSkKIAogICAgICAgICB6aXBmcC5jbG9zZSgpCiAKLSAgICBkZWYgcmVhZGxpbmVzVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIGRlZiByZWFkbGluZV90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIikKLSAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgemlwbGluZXMgPSB6aXBmcC5vcGVuKGZuLCAiclUiKS5yZWFkbGluZXMoKQotICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGxpbmVzKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyAnXG4nKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHppcG9wZW4gPSB6aXBmcC5vcGVuKGZuLCAiclUiKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZV9nZW46CisgICAgICAgICAgICAgICAgICAgIGxpbmVkYXRhID0gemlwb3Blbi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWRhdGEsIGxpbmUgKyAnXG4nKQogCi0gICAgICAgIHppcGZwLmNsb3NlKCkKLQotICAgIGRlZiBpdGVybGluZXNUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHJlYWRsaW5lc190ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIikKLSAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGZwLm9wZW4oZm4sICJyVSIpKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyAnXG4nKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHppcGxpbmVzID0gemlwZnAub3BlbihmbiwgInJVIikucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwbGluZXMpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyAnXG4nKQogCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICBkZWYgaXRlcmxpbmVzX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCi0gICAgZGVmIHRlc3RSZWFkU3RvcmVkKHNlbGYpOgorICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGZwLm9wZW4oZm4sICJyVSIpKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgJ1xuJykKKworICAgIGRlZiB0ZXN0X3JlYWRfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYucmVhZFRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi5yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHRlc3RSZWFkbGluZVN0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9yZWFkX3N0b3JlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzYxMDogY2FsbHMgdG8gcmVhZGxpbmUoKSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIHRvIHJlYWQoKS4KICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLnJlYWRsaW5lVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnJlYWRsaW5lX3JlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBkZWYgdGVzdFJlYWRsaW5lc1N0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9zdG9yZWQoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgc2VsZi5yZWFkbGluZXNUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmVfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBkZWYgdGVzdEl0ZXJsaW5lc1N0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9yZWFkbGluZXNfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYuaXRlcmxpbmVzVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnJlYWRsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGlmIHpsaWI6Ci0gICAgICAgIGRlZiB0ZXN0UmVhZERlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5yZWFkVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBkZWYgdGVzdF9pdGVybGluZXNfc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuaXRlcmxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgICAgIGRlZiB0ZXN0UmVhZGxpbmVEZWZsYXRlZChzZWxmKToKLSAgICAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYucmVhZGxpbmVUZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYucmVhZF90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQogCi0gICAgICAgIGRlZiB0ZXN0UmVhZGxpbmVzRGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnJlYWRsaW5lc1Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzc2MTA6IGNhbGxzIHRvIHJlYWRsaW5lKCkgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyB0byByZWFkKCkuCisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkbGluZV9yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICAgICAgZGVmIHRlc3RJdGVybGluZXNEZWZsYXRlZChzZWxmKToKLSAgICAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYuaXRlcmxpbmVzVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkbGluZV90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lc19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnJlYWRsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2l0ZXJsaW5lc19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLml0ZXJsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6CiAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCi0gICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTikKLSAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOMikKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCiAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChUZXN0c1dpdGhTb3VyY2VGaWxlLCBUZXN0WmlwNjRJblNtYWxsRmlsZXMsIE90aGVyVGVzdHMsCiAgICAgICAgICAgICAgICAgIFB5WmlwRmlsZVRlc3RzLCBEZWNyeXB0aW9uVGVzdHMsIFRlc3RzV2l0aE11bHRpcGxlT3BlbnMsCi0gICAgICAgICAgICAgICAgIFRlc3RXaXRoRGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICBVbml2ZXJzYWxOZXdsaW5lVGVzdHMsIFRlc3RzV2l0aFJhbmRvbUJpbmFyeUZpbGVzKQorICAgICAgICAgICAgICAgICBUZXN0V2l0aERpcmVjdG9yeSwgVW5pdmVyc2FsTmV3bGluZVRlc3RzLAorICAgICAgICAgICAgICAgICBUZXN0c1dpdGhSYW5kb21CaW5hcnlGaWxlcykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQppbmRleCA4Nzg2OWFlLi41OTc0YzhiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQpAQCAtNiwxMSArNiwxNyBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogCi1pbXBvcnQgemxpYiAjIGltcGxpZWQgcHJlcmVxdWlzaXRlCi1mcm9tIHppcGZpbGUgaW1wb3J0IFppcEZpbGUsIFppcEluZm8sIFpJUF9TVE9SRUQsIFpJUF9ERUZMQVRFRAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGZyb20gdGVzdC50ZXN0X2ltcG9ydGhvb2tzIGltcG9ydCBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSwgdGVzdF9zcmMsIHRlc3RfY28KIAorIyBzb21lIHRlc3RzIGNhbiBiZSByYW4gZXZlbiB3aXRob3V0IHpsaWIKK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHpsaWIgPSBOb25lCisKK2Zyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZSwgWmlwSW5mbywgWklQX1NUT1JFRCwgWklQX0RFRkxBVEVECisKIGltcG9ydCB6aXBpbXBvcnQKIGltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCBkb2N0ZXN0CkBAIC01Myw2ICs1OSw3IEBACiBURVNUUEFDSzIgPSAiemlwdGVzdHBhY2thZ2UyIgogVEVNUF9aSVAgPSBvcy5wYXRoLmFic3BhdGgoImp1bms5NTE0MiIgKyBvcy5leHRzZXAgKyAiemlwIikKIAorCiBjbGFzcyBVbmNvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZShJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSk6CiAKICAgICBjb21wcmVzc2lvbiA9IFpJUF9TVE9SRUQKQEAgLTk2LDggKzEwMyw4IEBACiAKICAgICAgICAgICAgIGlmIGV4cGVjdGVkX2V4dDoKICAgICAgICAgICAgICAgICBmaWxlID0gbW9kLmdldF9maWxlKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmaWxlLCBvcy5wYXRoLmpvaW4oVEVNUF9aSVAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vZHVsZXMpICsgZXhwZWN0ZWRfZXh0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZSwgb3MucGF0aC5qb2luKFRFTVBfWklQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vZHVsZXMpICsgZXhwZWN0ZWRfZXh0KQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgei5jbG9zZSgpCiAgICAgICAgICAgICBvcy5yZW1vdmUoVEVNUF9aSVApCkBAIC0yMTIsMzEgKzIxOSwzMSBAQAogICAgICAgICAgICAgei5jbG9zZSgpCiAKICAgICAgICAgICAgIHppID0gemlwaW1wb3J0LnppcGltcG9ydGVyKFRFTVBfWklQKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkuYXJjaGl2ZSwgVEVNUF9aSVApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5pc19wYWNrYWdlKFRFU1RQQUNLKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuYXJjaGl2ZSwgVEVNUF9aSVApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmlzX3BhY2thZ2UoVEVTVFBBQ0spLCBUcnVlKQogICAgICAgICAgICAgbW9kID0gemkubG9hZF9tb2R1bGUoVEVTVFBBQ0spCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5fZ2V0X2ZpbGVuYW1lKFRFU1RQQUNLKSwgbW9kLl9fZmlsZV9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfZmlsZW5hbWUoVEVTVFBBQ0spLCBtb2QuX19maWxlX18pCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLmlzX3BhY2thZ2UocGFja2RpciArICdfX2luaXRfXycpLCBGYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLmlzX3BhY2thZ2UocGFja2RpciArIFRFU1RQQUNLMiksIFRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5pc19wYWNrYWdlKHBhY2tkaXIyICsgVEVTVE1PRCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKHBhY2tkaXIgKyAnX19pbml0X18nKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmlzX3BhY2thZ2UocGFja2RpciArIFRFU1RQQUNLMiksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmlzX3BhY2thZ2UocGFja2RpcjIgKyBURVNUTU9EKSwgRmFsc2UpCiAKICAgICAgICAgICAgIG1vZF9wYXRoID0gcGFja2RpcjIgKyBURVNUTU9ECiAgICAgICAgICAgICBtb2RfbmFtZSA9IG1vZHVsZV9wYXRoX3RvX2RvdHRlZF9uYW1lKG1vZF9wYXRoKQotICAgICAgICAgICAgcGtnID0gX19pbXBvcnRfXyhtb2RfbmFtZSkKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCiAgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2RfbmFtZV0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLmdldF9zb3VyY2UoVEVTVFBBQ0spLCBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkuZ2V0X3NvdXJjZShtb2RfcGF0aCksIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5fZ2V0X2ZpbGVuYW1lKG1vZF9wYXRoKSwgbW9kLl9fZmlsZV9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfc291cmNlKFRFU1RQQUNLKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X3NvdXJjZShtb2RfcGF0aCksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9maWxlbmFtZShtb2RfcGF0aCksIG1vZC5fX2ZpbGVfXykKICAgICAgICAgICAgICMgVG8gcGFzcyBpbiB0aGUgbW9kdWxlIG5hbWUgaW5zdGVhZCBvZiB0aGUgcGF0aCwgd2UgbXVzdCB1c2UgdGhlIHJpZ2h0IGltcG9ydGVyCiAgICAgICAgICAgICBsb2FkZXIgPSBtb2QuX19sb2FkZXJfXwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9hZGVyLmdldF9zb3VyY2UobW9kX25hbWUpLCBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9hZGVyLl9nZXRfZmlsZW5hbWUobW9kX25hbWUpLCBtb2QuX19maWxlX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRfc291cmNlKG1vZF9uYW1lKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldF9maWxlbmFtZShtb2RfbmFtZSksIG1vZC5fX2ZpbGVfXykKIAogICAgICAgICAgICAgIyB0ZXN0IHByZWZpeCBhbmQgYXJjaGl2ZXBhdGggbWVtYmVycwogICAgICAgICAgICAgemkyID0gemlwaW1wb3J0LnppcGltcG9ydGVyKFRFTVBfWklQICsgb3Muc2VwICsgVEVTVFBBQ0spCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aTIuYXJjaGl2ZSwgVEVNUF9aSVApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aTIucHJlZml4LCBURVNUUEFDSyArIG9zLnNlcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkyLmFyY2hpdmUsIFRFTVBfWklQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aTIucHJlZml4LCBURVNUUEFDSyArIG9zLnNlcCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHouY2xvc2UoKQogICAgICAgICAgICAgb3MucmVtb3ZlKFRFTVBfWklQKQpAQCAtMjU2LDI2ICsyNjMsMjYgQEAKICAgICAgICAgICAgIHouY2xvc2UoKQogCiAgICAgICAgICAgICB6aSA9IHppcGltcG9ydC56aXBpbXBvcnRlcihURU1QX1pJUCArIG9zLnNlcCArIHBhY2tkaXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5hcmNoaXZlLCBURU1QX1pJUCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLnByZWZpeCwgcGFja2RpcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLmlzX3BhY2thZ2UoVEVTVFBBQ0syKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuYXJjaGl2ZSwgVEVNUF9aSVApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLnByZWZpeCwgcGFja2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuaXNfcGFja2FnZShURVNUUEFDSzIpLCBUcnVlKQogICAgICAgICAgICAgbW9kID0gemkubG9hZF9tb2R1bGUoVEVTVFBBQ0syKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkuX2dldF9maWxlbmFtZShURVNUUEFDSzIpLCBtb2QuX19maWxlX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9maWxlbmFtZShURVNUUEFDSzIpLCBtb2QuX19maWxlX18pCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLmlzX3BhY2thZ2UoVEVTVFBBQ0syICsgb3Muc2VwICsgJ19faW5pdF9fJyksIEZhbHNlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkuaXNfcGFja2FnZShURVNUUEFDSzIgKyBvcy5zZXAgKyBURVNUTU9EKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmlzX3BhY2thZ2UoVEVTVFBBQ0syICsgb3Muc2VwICsgJ19faW5pdF9fJyksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKFRFU1RQQUNLMiArIG9zLnNlcCArIFRFU1RNT0QpLCBGYWxzZSkKIAogICAgICAgICAgICAgbW9kX3BhdGggPSBURVNUUEFDSzIgKyBvcy5zZXAgKyBURVNUTU9ECiAgICAgICAgICAgICBtb2RfbmFtZSA9IG1vZHVsZV9wYXRoX3RvX2RvdHRlZF9uYW1lKG1vZF9wYXRoKQotICAgICAgICAgICAgcGtnID0gX19pbXBvcnRfXyhtb2RfbmFtZSkKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCiAgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2RfbmFtZV0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLmdldF9zb3VyY2UoVEVTVFBBQ0syKSwgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLmdldF9zb3VyY2UobW9kX3BhdGgpLCBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkuX2dldF9maWxlbmFtZShtb2RfcGF0aCksIG1vZC5fX2ZpbGVfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X3NvdXJjZShURVNUUEFDSzIpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfc291cmNlKG1vZF9wYXRoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X2ZpbGVuYW1lKG1vZF9wYXRoKSwgbW9kLl9fZmlsZV9fKQogICAgICAgICAgICAgIyBUbyBwYXNzIGluIHRoZSBtb2R1bGUgbmFtZSBpbnN0ZWFkIG9mIHRoZSBwYXRoLCB3ZSBtdXN0IHVzZSB0aGUgcmlnaHQgaW1wb3J0ZXIKICAgICAgICAgICAgIGxvYWRlciA9IG1vZC5fX2xvYWRlcl9fCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsb2FkZXIuZ2V0X3NvdXJjZShtb2RfbmFtZSksIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsb2FkZXIuX2dldF9maWxlbmFtZShtb2RfbmFtZSksIG1vZC5fX2ZpbGVfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldF9zb3VyY2UobW9kX25hbWUpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0X2ZpbGVuYW1lKG1vZF9uYW1lKSwgbW9kLl9fZmlsZV9fKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgei5jbG9zZSgpCiAgICAgICAgICAgICBvcy5yZW1vdmUoVEVNUF9aSVApCkBAIC0yODksOCArMjk2LDggQEAKICAgICAgICAgICAgIHoud3JpdGVzdHIobmFtZSwgZGF0YSkKICAgICAgICAgICAgIHouY2xvc2UoKQogICAgICAgICAgICAgemkgPSB6aXBpbXBvcnQuemlwaW1wb3J0ZXIoVEVNUF9aSVApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkYXRhLCB6aS5nZXRfZGF0YShuYW1lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygnemlwaW1wb3J0ZXIgb2JqZWN0JyBpbiByZXByKHppKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgemkuZ2V0X2RhdGEobmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCd6aXBpbXBvcnRlciBvYmplY3QnLCByZXByKHppKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHouY2xvc2UoKQogICAgICAgICAgICAgb3MucmVtb3ZlKFRFTVBfWklQKQpAQCAtMzU3LDcgKzM2NCw2IEBACiAgICAgZGVmIHRlc3REb2N0ZXN0U3VpdGUoc2VsZik6CiAgICAgICAgIHNlbGYucnVuRG9jdGVzdChzZWxmLmRvRG9jdGVzdFN1aXRlKQogCi0KICAgICBkZWYgZG9UcmFjZWJhY2soc2VsZiwgbW9kdWxlKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbW9kdWxlLmRvX3JhaXNlKCkKQEAgLTM3Miw3ICszNzgsNyBAQAogCiAgICAgICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICAgICAgICAgcHJpbnRfdGIodGIsIDEsIHMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5nZXR2YWx1ZSgpLmVuZHN3aXRoKHJhaXNlX3NyYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5nZXR2YWx1ZSgpLmVuZHN3aXRoKHJhaXNlX3NyYykpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVGhpcyBvdWdodCB0byBiZSBpbXBvc3NpYmxlIikKIApAQCAtMzgxLDYgKzM4Nyw3IEBACiAgICAgICAgIHNlbGYuZG9UZXN0KE5vbmUsIGZpbGVzLCBURVNUTU9ELCBjYWxsPXNlbGYuZG9UcmFjZWJhY2spCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQogY2xhc3MgQ29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlKFVuY29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IFpJUF9ERUZMQVRFRAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQppbmRleCBiMmNmNmI3Li40ZjQxNTE4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKQEAgLTIsNyArMiw2IEBACiAjIGZvciB3b3JraW5nIHdpdGggbW9kdWxlcyBsb2NhdGVkIGluc2lkZSB6aXBmaWxlcwogIyBUaGUgdGVzdHMgYXJlIGNlbnRyYWxpc2VkIGluIHRoaXMgZmFzaGlvbiB0byBtYWtlIGl0IGVhc3kgdG8gZHJvcCB0aGVtCiAjIGlmIGEgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IHppcGltcG9ydAotaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKQEAgLTE1LDYgKzE0LDggQEAKIGltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCBwZGIKIGltcG9ydCB3YXJuaW5ncworZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IChzcGF3bl9weXRob24sIGtpbGxfcHl0aG9uLCBydW5fcHl0aG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2RpciwgbWFrZV9zY3JpcHQsIG1ha2VfemlwX3NjcmlwdCkKIAogdmVyYm9zZSA9IHRlc3QudGVzdF9zdXBwb3J0LnZlcmJvc2UKIApAQCAtMzAsMTEgKzMxLDYgQEAKICMgUmV0cmlldmUgc29tZSBoZWxwZXJzIGZyb20gb3RoZXIgdGVzdCBjYXNlcwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2RvY3Rlc3QsIHNhbXBsZV9kb2N0ZXN0CiBmcm9tIHRlc3QudGVzdF9pbXBvcnRob29rcyBpbXBvcnQgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UKLWZyb20gdGVzdC50ZXN0X2NtZF9saW5lX3NjcmlwdCBpbXBvcnQgdGVtcF9kaXIsIF9ydW5fcHl0aG9uLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3Bhd25fcHl0aG9uLCBfa2lsbF9weXRob24sICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tYWtlX3Rlc3Rfc2NyaXB0LCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBpbGVfdGVzdF9zY3JpcHQsICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWFrZV90ZXN0X3ppcCwgX21ha2VfdGVzdF9wa2cKIAogCiBkZWYgX3J1bl9vYmplY3RfZG9jdGVzdChvYmosIG1vZHVsZSk6CkBAIC03OSwxMCArNzUsMTAgQEAKICAgICBkZWYgdGVzdF9pbnNwZWN0X2dldHNvdXJjZV9pc3N1ZTQyMjMoc2VsZik6CiAgICAgICAgIHRlc3Rfc3JjID0gImRlZiBmb28oKTogcGFzc1xuIgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgZDoKLSAgICAgICAgICAgIGluaXRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KGQsICdfX2luaXRfXycsIHRlc3Rfc3JjKQorICAgICAgICAgICAgaW5pdF9uYW1lID0gbWFrZV9zY3JpcHQoZCwgJ19faW5pdF9fJywgdGVzdF9zcmMpCiAgICAgICAgICAgICBuYW1lX2luX3ppcCA9IG9zLnBhdGguam9pbignemlwX3BrZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKGluaXRfbmFtZSkpCi0gICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcChkLCAndGVzdF96aXAnLAorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KGQsICd0ZXN0X3ppcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X25hbWUsIG5hbWVfaW5femlwKQogICAgICAgICAgICAgb3MucmVtb3ZlKGluaXRfbmFtZSkKICAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCB6aXBfbmFtZSkKQEAgLTEwNyw5ICsxMDMsOSBAQAogICAgICAgICBzYW1wbGVfc3JjID0gc2FtcGxlX3NyYy5yZXBsYWNlKCJ0ZXN0LnRlc3RfZG9jdGVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RfemlwcGVkX2RvY3Rlc3QiKQogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgZDoKLSAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoZCwgJ3Rlc3RfemlwcGVkX2RvY3Rlc3QnLAorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBtYWtlX3NjcmlwdChkLCAndGVzdF96aXBwZWRfZG9jdGVzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3JjKQotICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gX21ha2VfdGVzdF96aXAoZCwgJ3Rlc3RfemlwJywKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChkLCAndGVzdF96aXAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUpCiAgICAgICAgICAgICB6ID0gemlwZmlsZS5aaXBGaWxlKHppcF9uYW1lLCAnYScpCiAgICAgICAgICAgICB6LndyaXRlc3RyKCJzYW1wbGVfemlwcGVkX2RvY3Rlc3QucHkiLCBzYW1wbGVfc3JjKQpAQCAtMTk0LDIzICsxOTAsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgIiIiKQogICAgICAgICBwYXR0ZXJuID0gJ0ZpbGUgIiVzIiwgbGluZSAyLCBpbiAlcycKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIGQ6Ci0gICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KGQsICdzY3JpcHQnLCB0ZXN0X3NyYykKLSAgICAgICAgICAgIGV4aXRfY29kZSwgZGF0YSA9IF9ydW5fcHl0aG9uKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBtYWtlX3NjcmlwdChkLCAnc2NyaXB0JywgdGVzdF9zcmMpCisgICAgICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBydW5fcHl0aG9uKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSBwYXR0ZXJuICUgKHNjcmlwdF9uYW1lLCAiX19tYWluX18uVGVzdCIpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50ICJFeHBlY3RlZCBsaW5lIiwgZXhwZWN0ZWQKICAgICAgICAgICAgICAgICBwcmludCAiR290IHN0ZG91dDoiCiAgICAgICAgICAgICAgICAgcHJpbnQgZGF0YQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGV4cGVjdGVkIGluIGRhdGEpCi0gICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcChkLCAidGVzdF96aXAiLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgZGF0YSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChkLCAidGVzdF96aXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsICdfX21haW5fXy5weScpCi0gICAgICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBfcnVuX3B5dGhvbih6aXBfbmFtZSkKKyAgICAgICAgICAgIGV4aXRfY29kZSwgZGF0YSA9IHJ1bl9weXRob24oemlwX25hbWUpCiAgICAgICAgICAgICBleHBlY3RlZCA9IHBhdHRlcm4gJSAocnVuX25hbWUsICJfX21haW5fXy5UZXN0IikKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQgIkV4cGVjdGVkIGxpbmUiLCBleHBlY3RlZAogICAgICAgICAgICAgICAgIHByaW50ICJHb3Qgc3Rkb3V0OiIKICAgICAgICAgICAgICAgICBwcmludCBkYXRhCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZXhwZWN0ZWQgaW4gZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIGRhdGEpCiAKICAgICBkZWYgdGVzdF9wZGJfaXNzdWU0MjAxKHNlbGYpOgogICAgICAgICB0ZXN0X3NyYyA9IHRleHR3cmFwLmRlZGVudCgiIiJcCkBAIC0yMjEsMTcgKzIxNywxNyBAQAogICAgICAgICAgICAgICAgICAgICBwZGIucnVuY2FsbChmKQogICAgICAgICAgICAgICAgICAgICAiIiIpCiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBkOgotICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChkLCAnc2NyaXB0JywgdGVzdF9zcmMpCi0gICAgICAgICAgICBwID0gX3NwYXduX3B5dGhvbihzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gbWFrZV9zY3JpcHQoZCwgJ3NjcmlwdCcsIHRlc3Rfc3JjKQorICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbihzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoJ2xcbicpCi0gICAgICAgICAgICBkYXRhID0gX2tpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oc2NyaXB0X25hbWUgaW4gZGF0YSkKLSAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwKGQsICJ0ZXN0X3ppcCIsCisgICAgICAgICAgICBkYXRhID0ga2lsbF9weXRob24ocCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2NyaXB0X25hbWUsIGRhdGEpCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgInRlc3RfemlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCAnX19tYWluX18ucHknKQotICAgICAgICAgICAgcCA9IF9zcGF3bl9weXRob24oemlwX25hbWUpCisgICAgICAgICAgICBwID0gc3Bhd25fcHl0aG9uKHppcF9uYW1lKQogICAgICAgICAgICAgcC5zdGRpbi53cml0ZSgnbFxuJykKLSAgICAgICAgICAgIGRhdGEgPSBfa2lsbF9weXRob24ocCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhydW5fbmFtZSBpbiBkYXRhKQorICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHJ1bl9uYW1lLCBkYXRhKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfemxpYi5weQppbmRleCAxYjgwMmI4Li5jYmMzZWQ0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3psaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96bGliLnB5CkBAIC0xLDE2ICsxLDE3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1pbXBvcnQgemxpYgogaW1wb3J0IGJpbmFzY2lpCiBpbXBvcnQgcmFuZG9tCiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBwcmVjaXNpb25iaWdtZW10ZXN0LCBfMUcKIAoremxpYiA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd6bGliJykKKwogCiBjbGFzcyBDaGVja3N1bVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIGNoZWNrc3VtIHRlc3QgY2FzZXMKICAgICBkZWYgdGVzdF9jcmMzMnN0YXJ0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuY3JjMzIoIiIpLCB6bGliLmNyYzMyKCIiLCAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHpsaWIuY3JjMzIoImFiYyIsIDB4ZmZmZmZmZmYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoemxpYi5jcmMzMigiYWJjIiwgMHhmZmZmZmZmZikpCiAKICAgICBkZWYgdGVzdF9jcmMzMmVtcHR5KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuY3JjMzIoIiIsIDApLCAwKQpAQCAtMTksNyArMjAsNyBAQAogCiAgICAgZGVmIHRlc3RfYWRsZXIzMnN0YXJ0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuYWRsZXIzMigiIiksIHpsaWIuYWRsZXIzMigiIiwgMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh6bGliLmFkbGVyMzIoImFiYyIsIDB4ZmZmZmZmZmYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoemxpYi5hZGxlcjMyKCJhYmMiLCAweGZmZmZmZmZmKSkKIAogICAgIGRlZiB0ZXN0X2FkbGVyMzJlbXB0eShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmFkbGVyMzIoIiIsIDApLCAwKQpAQCAtMTM3LDE0ICsxMzgsOSBAQAogICAgIGRlZiB0ZXN0X2luY29tcGxldGVfc3RyZWFtKHNlbGYpOgogICAgICAgICAjIEFuIHVzZWZ1bCBlcnJvciBtZXNzYWdlIGlzIGdpdmVuCiAgICAgICAgIHggPSB6bGliLmNvbXByZXNzKEhBTUxFVF9TQ0VORSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgemxpYi5kZWNvbXByZXNzKHhbOi0xXSkKLSAgICAgICAgZXhjZXB0IHpsaWIuZXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICAgICAiRXJyb3IgLTUgd2hpbGUgZGVjb21wcmVzc2luZyBkYXRhOiBpbmNvbXBsZXRlIG9yIHRydW5jYXRlZCBzdHJlYW0iCi0gICAgICAgICAgICAgICAgaW4gc3RyKGUpLCBzdHIoZSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInpsaWIuZXJyb3Igbm90IHJhaXNlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKHpsaWIuZXJyb3IsCisgICAgICAgICAgICAiRXJyb3IgLTUgd2hpbGUgZGVjb21wcmVzc2luZyBkYXRhOiBpbmNvbXBsZXRlIG9yIHRydW5jYXRlZCBzdHJlYW0iLAorICAgICAgICAgICAgemxpYi5kZWNvbXByZXNzLCB4WzotMV0pCiAKICAgICAjIE1lbW9yeSB1c2Ugb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdGFrZXMgaW50byBhY2NvdW50IG92ZXJhbGxvY2F0aW9uCiAKQEAgLTI2MCw3ICsyNTYsNyBAQAogICAgICAgICB3aGlsZSBjYjoKICAgICAgICAgICAgICNtYXhfbGVuZ3RoID0gMSArIGxlbihjYikvLzEwCiAgICAgICAgICAgICBjaHVuayA9IGRjby5kZWNvbXByZXNzKGNiLCBkY3gpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihsZW4oY2h1bmspID4gZGN4LAorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oY2h1bmspID4gZGN4LAogICAgICAgICAgICAgICAgICAgICAnY2h1bmsgdG9vIGJpZyAoJWQ+JWQpJyAlIChsZW4oY2h1bmspLCBkY3gpKQogICAgICAgICAgICAgYnVmcy5hcHBlbmQoY2h1bmspCiAgICAgICAgICAgICBjYiA9IGRjby51bmNvbnN1bWVkX3RhaWwKQEAgLTI4NSw3ICsyODEsNyBAQAogICAgICAgICB3aGlsZSBjYjoKICAgICAgICAgICAgIG1heF9sZW5ndGggPSAxICsgbGVuKGNiKS8vMTAKICAgICAgICAgICAgIGNodW5rID0gZGNvLmRlY29tcHJlc3MoY2IsIG1heF9sZW5ndGgpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihsZW4oY2h1bmspID4gbWF4X2xlbmd0aCwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKGNodW5rKSA+IG1heF9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAnY2h1bmsgdG9vIGJpZyAoJWQ+JWQpJyAlIChsZW4oY2h1bmspLG1heF9sZW5ndGgpKQogICAgICAgICAgICAgYnVmcy5hcHBlbmQoY2h1bmspCiAgICAgICAgICAgICBjYiA9IGRjby51bmNvbnN1bWVkX3RhaWwKQEAgLTI5NCw3ICsyOTAsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgd2hpbGUgY2h1bms6CiAgICAgICAgICAgICAgICAgY2h1bmsgPSBkY28uZGVjb21wcmVzcygnJywgbWF4X2xlbmd0aCkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZihsZW4oY2h1bmspID4gbWF4X2xlbmd0aCwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxlbihjaHVuaykgPiBtYXhfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaHVuayB0b28gYmlnICglZD4lZCknICUgKGxlbihjaHVuayksbWF4X2xlbmd0aCkpCiAgICAgICAgICAgICAgICAgYnVmcy5hcHBlbmQoY2h1bmspCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbihidWZzKSwgJ1dyb25nIGRhdGEgcmV0cmlldmVkJykKQEAgLTM2OCw3ICszNjQsNyBAQAogICAgICAgICAjIGNhdXNlZCBhIGNvcmUgZHVtcC4pCiAKICAgICAgICAgY28gPSB6bGliLmNvbXByZXNzb2JqKHpsaWIuWl9CRVNUX0NPTVBSRVNTSU9OKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY28uZmx1c2goKSkgICMgUmV0dXJucyBhIHpsaWIgaGVhZGVyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjby5mbHVzaCgpKSAgIyBSZXR1cm5zIGEgemxpYiBoZWFkZXIKICAgICAgICAgZGNvID0gemxpYi5kZWNvbXByZXNzb2JqKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY28uZmx1c2goKSwgIiIpICMgUmV0dXJucyBub3RoaW5nCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3R0YXIudGFyIGIvTGliL3Rlc3QvdGVzdHRhci50YXIKaW5kZXggYjViYjQ2Yi4uYmFjMGUyNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdHRhci50YXIKKysrIGIvTGliL3Rlc3QvdGVzdHRhci50YXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdHJhY2VkbW9kdWxlcy9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3RyYWNlZG1vZHVsZXMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmYTRmMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3RyYWNlZG1vZHVsZXMvX19pbml0X18ucHkKQEAgLTAsMCArMSw0IEBACisiIiJUaGlzIHBhY2thZ2UgY29udGFpbnMgbW9kdWxlcyB0aGF0IGhlbHAgdGVzdGluZyB0aGUgdHJhY2UucHkgbW9kdWxlLiBOb3RlCit0aGF0IHRoZSBleGFjdCBsb2NhdGlvbiBvZiBmdW5jdGlvbnMgaW4gdGhlc2UgbW9kdWxlcyBpcyBpbXBvcnRhbnQsIGFzIHRyYWNlLnB5Cit0YWtlcyB0aGUgcmVhbCBsaW5lIG51bWJlcnMgaW50byBhY2NvdW50LgorIiIiCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90cmFjZWRtb2R1bGVzL3Rlc3Rtb2QucHkgYi9MaWIvdGVzdC90cmFjZWRtb2R1bGVzL3Rlc3Rtb2QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyNzc2ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3RyYWNlZG1vZHVsZXMvdGVzdG1vZC5weQpAQCAtMCwwICsxLDkgQEAKK2RlZiBmdW5jKHgpOgorICAgIGIgPSB4ICsgMQorICAgIHJldHVybiBiICsgMgorCitkZWYgZnVuYzIoKToKKyAgICAiIiJUZXN0IGZ1bmN0aW9uIGZvciBpc3N1ZSA5OTM2ICIiIgorICAgIHJldHVybiAoMSwKKyAgICAgICAgICAgIDIsCisgICAgICAgICAgICAzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvd2luX2NvbnNvbGVfaGFuZGxlci5weSBiL0xpYi90ZXN0L3dpbl9jb25zb2xlX2hhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmY2VlMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3dpbl9jb25zb2xlX2hhbmRsZXIucHkKQEAgLTAsMCArMSw0OSBAQAorIiIiU2NyaXB0IHVzZWQgdG8gdGVzdCBvcy5raWxsIG9uIFdpbmRvd3MsIGZvciBpc3N1ZSAjMTIyMDIxMgorCitUaGlzIHNjcmlwdCBpcyBzdGFydGVkIGFzIGEgc3VicHJvY2VzcyBpbiB0ZXN0X29zIGFuZCBpcyB1c2VkIHRvIHRlc3QgdGhlCitDVFJMX0NfRVZFTlQgYW5kIENUUkxfQlJFQUtfRVZFTlQgc2lnbmFscywgd2hpY2ggcmVxdWlyZXMgYSBjdXN0b20gaGFuZGxlcgordG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBraWxsIHRhcmdldC4KKworU2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczY4NTA0OSUyOHY9VlMuODUlMjkuYXNweCBmb3IgYQorc2ltaWxhciBleGFtcGxlIGluIEMuCisiIiIKKworZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzLCBXSU5GVU5DVFlQRQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IGN0eXBlcworaW1wb3J0IG1tYXAKK2ltcG9ydCBzeXMKKworIyBGdW5jdGlvbiBwcm90b3R5cGUgZm9yIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLiBSZXR1cm5zIEJPT0wsIHRha2VzIGEgRFdPUkQuCitIYW5kbGVyUm91dGluZSA9IFdJTkZVTkNUWVBFKHdpbnR5cGVzLkJPT0wsIHdpbnR5cGVzLkRXT1JEKQorCitkZWYgX2N0cmxfaGFuZGxlcihzaWcpOgorICAgICIiIkhhbmRsZSBhIHNpZyBldmVudCBhbmQgcmV0dXJuIDAgdG8gdGVybWluYXRlIHRoZSBwcm9jZXNzIiIiCisgICAgaWYgc2lnID09IHNpZ25hbC5DVFJMX0NfRVZFTlQ6CisgICAgICAgIHBhc3MKKyAgICBlbGlmIHNpZyA9PSBzaWduYWwuQ1RSTF9CUkVBS19FVkVOVDoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIHByaW50KCJVTktOT1dOIEVWRU5UIikKKyAgICByZXR1cm4gMAorCitjdHJsX2hhbmRsZXIgPSBIYW5kbGVyUm91dGluZShfY3RybF9oYW5kbGVyKQorCisKK1NldENvbnNvbGVDdHJsSGFuZGxlciA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIuU2V0Q29uc29sZUN0cmxIYW5kbGVyCitTZXRDb25zb2xlQ3RybEhhbmRsZXIuYXJndHlwZXMgPSAoSGFuZGxlclJvdXRpbmUsIHdpbnR5cGVzLkJPT0wpCitTZXRDb25zb2xlQ3RybEhhbmRsZXIucmVzdHlwZSA9IHdpbnR5cGVzLkJPT0wKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICAjIEFkZCBvdXIgY29uc29sZSBjb250cm9sIGhhbmRsaW5nIGZ1bmN0aW9uIHdpdGggdmFsdWUgMQorICAgIGlmIG5vdCBTZXRDb25zb2xlQ3RybEhhbmRsZXIoY3RybF9oYW5kbGVyLCAxKToKKyAgICAgICAgcHJpbnQoIlVuYWJsZSB0byBhZGQgU2V0Q29uc29sZUN0cmxIYW5kbGVyIikKKyAgICAgICAgZXhpdCgtMSkKKworICAgICMgQXdha2VuIG1haWwgcHJvY2VzcworICAgIG0gPSBtbWFwLm1tYXAoLTEsIDEsIHN5cy5hcmd2WzFdKQorICAgIG1bMF0gPSAnMScKKworICAgICMgRG8gbm90aGluZyBidXQgd2FpdCBmb3IgdGhlIHNpZ25hbAorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3htbHRlc3RkYXRhL3NpbXBsZS1ucy54bWwgYi9MaWIvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUtbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZjM0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUtbnMueG1sCkBAIC0wLDAgKzEsNyBAQAorPD9waSBkYXRhPz4KKzwhLS0gY29tbWVudCAtLT4KKzxyb290IHhtbG5zPSduYW1lc3BhY2UnPgorICAgPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudD4KKyAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgPGVtcHR5LWVsZW1lbnQvPgorPC9yb290PgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QveG1sdGVzdGRhdGEvc2ltcGxlLnhtbCBiL0xpYi90ZXN0L3htbHRlc3RkYXRhL3NpbXBsZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4YzJjNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3htbHRlc3RkYXRhL3NpbXBsZS54bWwKQEAgLTAsMCArMSw2IEBACis8IS0tIGNvbW1lbnQgLS0+Cis8cm9vdD4KKyAgIDxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQ+CisgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgIDxlbXB0eS1lbGVtZW50Lz4KKzwvcm9vdD4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3QueG1sIGIvTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L3Rlc3QueG1sCnJlbmFtZSB0byBMaWIvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdC54bWwub3V0IGIvTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwub3V0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC90ZXN0LnhtbC5vdXQKcmVuYW1lIHRvIExpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sLm91dApkaWZmIC0tZ2l0IGEvTGliL3RleHR3cmFwLnB5IGIvTGliL3RleHR3cmFwLnB5CmluZGV4IDY0YTViOTcuLjk1ODJhMWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXh0d3JhcC5weQorKysgYi9MaWIvdGV4dHdyYXAucHkKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAiIiJfc3BsaXQodGV4dCA6IHN0cmluZykgLT4gW3N0cmluZ10KIAogICAgICAgICBTcGxpdCB0aGUgdGV4dCB0byB3cmFwIGludG8gaW5kaXZpc2libGUgY2h1bmtzLiAgQ2h1bmtzIGFyZQotICAgICAgICBub3QgcXVpdGUgdGhlIHNhbWUgYXMgd29yZHM7IHNlZSB3cmFwX2NodW5rcygpIGZvciBmdWxsCisgICAgICAgIG5vdCBxdWl0ZSB0aGUgc2FtZSBhcyB3b3Jkczsgc2VlIF93cmFwX2NodW5rcygpIGZvciBmdWxsCiAgICAgICAgIGRldGFpbHMuICBBcyBhbiBleGFtcGxlLCB0aGUgdGV4dAogICAgICAgICAgIExvb2ssIGdvb2YtYmFsbCAtLSB1c2UgdGhlIC1iIG9wdGlvbiEKICAgICAgICAgYnJlYWtzIGludG8gdGhlIGZvbGxvd2luZyBjaHVua3M6CkBAIC0xOTEsOSArMTkxLDkgQEAKICAgICAgICAgc3BhY2UgdG8gdHdvLgogICAgICAgICAiIiIKICAgICAgICAgaSA9IDAKLSAgICAgICAgcGF0ID0gc2VsZi5zZW50ZW5jZV9lbmRfcmUKKyAgICAgICAgcGF0c2VhcmNoID0gc2VsZi5zZW50ZW5jZV9lbmRfcmUuc2VhcmNoCiAgICAgICAgIHdoaWxlIGkgPCBsZW4oY2h1bmtzKS0xOgotICAgICAgICAgICAgaWYgY2h1bmtzW2krMV0gPT0gIiAiIGFuZCBwYXQuc2VhcmNoKGNodW5rc1tpXSk6CisgICAgICAgICAgICBpZiBjaHVua3NbaSsxXSA9PSAiICIgYW5kIHBhdHNlYXJjaChjaHVua3NbaV0pOgogICAgICAgICAgICAgICAgIGNodW5rc1tpKzFdID0gIiAgIgogICAgICAgICAgICAgICAgIGkgKz0gMgogICAgICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90aHJlYWRpbmcucHkgYi9MaWIvdGhyZWFkaW5nLnB5CmluZGV4IGVlNzBjZDguLjZhMDZmZWIgMTAwNjQ0Ci0tLSBhL0xpYi90aHJlYWRpbmcucHkKKysrIGIvTGliL3RocmVhZGluZy5weQpAQCAtMTAsNyArMTAsNiBAQAogCiBpbXBvcnQgd2FybmluZ3MKIAotZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCiBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUsIHNsZWVwIGFzIF9zbGVlcAogZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGMgYXMgX2Zvcm1hdF9leGMKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCkBAIC02NCw4ICs2MywxNCBAQAogICAgICAgICBkZWYgX25vdGUoc2VsZiwgZm9ybWF0LCAqYXJncyk6CiAgICAgICAgICAgICBpZiBzZWxmLl9fdmVyYm9zZToKICAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgJSBhcmdzCi0gICAgICAgICAgICAgICAgZm9ybWF0ID0gIiVzOiAlc1xuIiAlICgKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudF90aHJlYWQoKS5uYW1lLCBmb3JtYXQpCisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjNDE4ODogY2FsbGluZyBjdXJyZW50X3RocmVhZCgpIGNhbiBpbmN1ciBhbiBpbmZpbml0ZQorICAgICAgICAgICAgICAgICMgcmVjdXJzaW9uIGlmIGl0IGhhcyB0byBjcmVhdGUgYSBEdW1teVRocmVhZCBvbiB0aGUgZmx5LgorICAgICAgICAgICAgICAgIGlkZW50ID0gX2dldF9pZGVudCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gX2FjdGl2ZVtpZGVudF0ubmFtZQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICI8T1MgdGhyZWFkICVkPiIgJSBpZGVudAorICAgICAgICAgICAgICAgIGZvcm1hdCA9ICIlczogJXNcbiIgJSAobmFtZSwgZm9ybWF0KQogICAgICAgICAgICAgICAgIF9zeXMuc3RkZXJyLndyaXRlKGZvcm1hdCkKIAogZWxzZToKQEAgLTM2OCw2ICszNzMsMTAgQEAKICAgICAgICAgc2VsZi5fX2NvbmQgPSBDb25kaXRpb24oTG9jaygpKQogICAgICAgICBzZWxmLl9fZmxhZyA9IEZhbHNlCiAKKyAgICBkZWYgX3Jlc2V0X2ludGVybmFsX2xvY2tzKHNlbGYpOgorICAgICAgICAjIHByaXZhdGUhICBjYWxsZWQgYnkgVGhyZWFkLl9yZXNldF9pbnRlcm5hbF9sb2NrcyBieSBfYWZ0ZXJfZm9yaygpCisgICAgICAgIHNlbGYuX19jb25kLl9faW5pdF9fKCkKKwogICAgIGRlZiBpc1NldChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX19mbGFnCiAKQEAgLTM5Myw2ICs0MDIsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fX2ZsYWc6CiAgICAgICAgICAgICAgICAgc2VsZi5fX2NvbmQud2FpdCh0aW1lb3V0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19mbGFnCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9fY29uZC5yZWxlYXNlKCkKIApAQCAtNDQzLDYgKzQ1MywxOCBAQAogICAgICAgICAjIHN5cy5leGNfaW5mbyBzaW5jZSBpdCBjYW4gYmUgY2hhbmdlZCBiZXR3ZWVuIGluc3RhbmNlcwogICAgICAgICBzZWxmLl9fc3RkZXJyID0gX3N5cy5zdGRlcnIKIAorICAgIGRlZiBfcmVzZXRfaW50ZXJuYWxfbG9ja3Moc2VsZik6CisgICAgICAgICMgcHJpdmF0ZSEgIENhbGxlZCBieSBfYWZ0ZXJfZm9yaygpIHRvIHJlc2V0IG91ciBpbnRlcm5hbCBsb2NrcyBhcworICAgICAgICAjIHRoZXkgbWF5IGJlIGluIGFuIGludmFsaWQgc3RhdGUgbGVhZGluZyB0byBhIGRlYWRsb2NrIG9yIGNyYXNoLgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfVGhyZWFkX19ibG9jaycpOiAgIyBEdW1teVRocmVhZCBkZWxldGVzIHNlbGYuX19ibG9jaworICAgICAgICAgICAgc2VsZi5fX2Jsb2NrLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fX3N0YXJ0ZWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfYmxvY2soc2VsZik6CisgICAgICAgICMgdXNlZCBieSBhIHVuaXR0ZXN0CisgICAgICAgIHJldHVybiBzZWxmLl9fYmxvY2sKKwogICAgIGRlZiBfc2V0X2RhZW1vbihzZWxmKToKICAgICAgICAgIyBPdmVycmlkZGVuIGluIF9NYWluVGhyZWFkIGFuZCBfRHVtbXlUaHJlYWQKICAgICAgICAgcmV0dXJuIGN1cnJlbnRfdGhyZWFkKCkuZGFlbW9uCkBAIC00NjQsMTIgKzQ4NiwxMSBAQAogICAgICAgICBpZiBub3Qgc2VsZi5fX2luaXRpYWxpemVkOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ0aHJlYWQuX19pbml0X18oKSBub3QgY2FsbGVkIikKICAgICAgICAgaWYgc2VsZi5fX3N0YXJ0ZWQuaXNfc2V0KCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInRocmVhZCBhbHJlYWR5IHN0YXJ0ZWQiKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ0aHJlYWRzIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgb25jZSIpCiAgICAgICAgIGlmIF9fZGVidWdfXzoKICAgICAgICAgICAgIHNlbGYuX25vdGUoIiVzLnN0YXJ0KCk6IHN0YXJ0aW5nIHRocmVhZCIsIHNlbGYpCi0gICAgICAgIF9hY3RpdmVfbGltYm9fbG9jay5hY3F1aXJlKCkKLSAgICAgICAgX2xpbWJvW3NlbGZdID0gc2VsZgotICAgICAgICBfYWN0aXZlX2xpbWJvX2xvY2sucmVsZWFzZSgpCisgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgorICAgICAgICAgICAgX2xpbWJvW3NlbGZdID0gc2VsZgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBfc3RhcnRfbmV3X3RocmVhZChzZWxmLl9fYm9vdHN0cmFwLCAoKSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKQEAgLTUxNCwxMCArNTM1LDkgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fc2V0X2lkZW50KCkKICAgICAgICAgICAgIHNlbGYuX19zdGFydGVkLnNldCgpCi0gICAgICAgICAgICBfYWN0aXZlX2xpbWJvX2xvY2suYWNxdWlyZSgpCi0gICAgICAgICAgICBfYWN0aXZlW3NlbGYuX19pZGVudF0gPSBzZWxmCi0gICAgICAgICAgICBkZWwgX2xpbWJvW3NlbGZdCi0gICAgICAgICAgICBfYWN0aXZlX2xpbWJvX2xvY2sucmVsZWFzZSgpCisgICAgICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKKyAgICAgICAgICAgICAgICBfYWN0aXZlW3NlbGYuX19pZGVudF0gPSBzZWxmCisgICAgICAgICAgICAgICAgZGVsIF9saW1ib1tzZWxmXQogICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgogICAgICAgICAgICAgICAgIHNlbGYuX25vdGUoIiVzLl9fYm9vdHN0cmFwKCk6IHRocmVhZCBzdGFydGVkIiwgc2VsZikKIApAQCAtNzQ1LDkgKzc2NSw4IEBACiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmLCBuYW1lPSJNYWluVGhyZWFkIikKICAgICAgICAgc2VsZi5fVGhyZWFkX19zdGFydGVkLnNldCgpCiAgICAgICAgIHNlbGYuX3NldF9pZGVudCgpCi0gICAgICAgIF9hY3RpdmVfbGltYm9fbG9jay5hY3F1aXJlKCkKLSAgICAgICAgX2FjdGl2ZVtfZ2V0X2lkZW50KCldID0gc2VsZgotICAgICAgICBfYWN0aXZlX2xpbWJvX2xvY2sucmVsZWFzZSgpCisgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgorICAgICAgICAgICAgX2FjdGl2ZVtfZ2V0X2lkZW50KCldID0gc2VsZgogCiAgICAgZGVmIF9zZXRfZGFlbW9uKHNlbGYpOgogICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTc5Miw5ICs4MTEsOCBAQAogCiAgICAgICAgIHNlbGYuX1RocmVhZF9fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQotICAgICAgICBfYWN0aXZlX2xpbWJvX2xvY2suYWNxdWlyZSgpCi0gICAgICAgIF9hY3RpdmVbX2dldF9pZGVudCgpXSA9IHNlbGYKLSAgICAgICAgX2FjdGl2ZV9saW1ib19sb2NrLnJlbGVhc2UoKQorICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKKyAgICAgICAgICAgIF9hY3RpdmVbX2dldF9pZGVudCgpXSA9IHNlbGYKIAogICAgIGRlZiBfc2V0X2RhZW1vbihzZWxmKToKICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTgxNSwxMCArODMzLDggQEAKIGN1cnJlbnRfdGhyZWFkID0gY3VycmVudFRocmVhZAogCiBkZWYgYWN0aXZlQ291bnQoKToKLSAgICBfYWN0aXZlX2xpbWJvX2xvY2suYWNxdWlyZSgpCi0gICAgY291bnQgPSBsZW4oX2FjdGl2ZSkgKyBsZW4oX2xpbWJvKQotICAgIF9hY3RpdmVfbGltYm9fbG9jay5yZWxlYXNlKCkKLSAgICByZXR1cm4gY291bnQKKyAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKKyAgICAgICAgcmV0dXJuIGxlbihfYWN0aXZlKSArIGxlbihfbGltYm8pCiAKIGFjdGl2ZV9jb3VudCA9IGFjdGl2ZUNvdW50CiAKQEAgLTgyNywxMCArODQzLDggQEAKICAgICByZXR1cm4gX2FjdGl2ZS52YWx1ZXMoKSArIF9saW1iby52YWx1ZXMoKQogCiBkZWYgZW51bWVyYXRlKCk6Ci0gICAgX2FjdGl2ZV9saW1ib19sb2NrLmFjcXVpcmUoKQotICAgIGFjdGl2ZSA9IF9hY3RpdmUudmFsdWVzKCkgKyBfbGltYm8udmFsdWVzKCkKLSAgICBfYWN0aXZlX2xpbWJvX2xvY2sucmVsZWFzZSgpCi0gICAgcmV0dXJuIGFjdGl2ZQorICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgorICAgICAgICByZXR1cm4gX2FjdGl2ZS52YWx1ZXMoKSArIF9saW1iby52YWx1ZXMoKQogCiBmcm9tIHRocmVhZCBpbXBvcnQgc3RhY2tfc2l6ZQogCkBAIC04NjksNiArODgzLDEwIEBACiAgICAgICAgICAgICAgICAgIyBpdHMgbmV3IHZhbHVlIHNpbmNlIGl0IGNhbiBoYXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICAgaWRlbnQgPSBfZ2V0X2lkZW50KCkKICAgICAgICAgICAgICAgICB0aHJlYWQuX1RocmVhZF9faWRlbnQgPSBpZGVudAorICAgICAgICAgICAgICAgICMgQW55IGNvbmRpdGlvbiB2YXJpYWJsZXMgaGFuZ2luZyBvZmYgb2YgdGhlIGFjdGl2ZSB0aHJlYWQgbWF5CisgICAgICAgICAgICAgICAgIyBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlLCBzbyB3ZSByZWluaXRpYWxpemUgdGhlbS4KKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHRocmVhZCwgJ19yZXNldF9pbnRlcm5hbF9sb2NrcycpOgorICAgICAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKCkKICAgICAgICAgICAgICAgICBuZXdfYWN0aXZlW2lkZW50XSA9IHRocmVhZAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIEFsbCB0aGUgb3RoZXJzIGFyZSBhbHJlYWR5IHN0b3BwZWQuCmRpZmYgLS1naXQgYS9MaWIvdGltZWl0LnB5IGIvTGliL3RpbWVpdC5weQppbmRleCAwOWYzN2M0Li5hMDk1MzEzIDEwMDY0NAotLS0gYS9MaWIvdGltZWl0LnB5CisrKyBiL0xpYi90aW1laXQucHkKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZXR1cCwgYmFzZXN0cmluZyk6CiAgICAgICAgICAgICAgICAgc2V0dXAgPSByZWluZGVudChzZXR1cCwgNCkKICAgICAgICAgICAgICAgICBzcmMgPSB0ZW1wbGF0ZSAlIHsnc3RtdCc6IHN0bXQsICdzZXR1cCc6IHNldHVwfQotICAgICAgICAgICAgZWxpZiBjYWxsYWJsZShzZXR1cCk6CisgICAgICAgICAgICBlbGlmIGhhc2F0dHIoc2V0dXAsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgICAgIHNyYyA9IHRlbXBsYXRlICUgeydzdG10Jzogc3RtdCwgJ3NldHVwJzogJ19zZXR1cCgpJ30KICAgICAgICAgICAgICAgICBuc1snX3NldHVwJ10gPSBzZXR1cAogICAgICAgICAgICAgZWxzZToKQEAgLTEzNiwxMyArMTM2LDEzIEBACiAgICAgICAgICAgICBjb2RlID0gY29tcGlsZShzcmMsIGR1bW15X3NyY19uYW1lLCAiZXhlYyIpCiAgICAgICAgICAgICBleGVjIGNvZGUgaW4gZ2xvYmFscygpLCBucwogICAgICAgICAgICAgc2VsZi5pbm5lciA9IG5zWyJpbm5lciJdCi0gICAgICAgIGVsaWYgY2FsbGFibGUoc3RtdCk6CisgICAgICAgIGVsaWYgaGFzYXR0cihzdG10LCAnX19jYWxsX18nKToKICAgICAgICAgICAgIHNlbGYuc3JjID0gTm9uZQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZXR1cCwgYmFzZXN0cmluZyk6CiAgICAgICAgICAgICAgICAgX3NldHVwID0gc2V0dXAKICAgICAgICAgICAgICAgICBkZWYgc2V0dXAoKToKICAgICAgICAgICAgICAgICAgICAgZXhlYyBfc2V0dXAgaW4gZ2xvYmFscygpLCBucwotICAgICAgICAgICAgZWxpZiBub3QgY2FsbGFibGUoc2V0dXApOgorICAgICAgICAgICAgZWxpZiBub3QgaGFzYXR0cihzZXR1cCwgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2V0dXAgaXMgbmVpdGhlciBhIHN0cmluZyBub3IgY2FsbGFibGUiKQogICAgICAgICAgICAgc2VsZi5pbm5lciA9IF90ZW1wbGF0ZV9mdW5jKHNldHVwLCBzdG10KQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rva2VuaXplLnB5IGIvTGliL3Rva2VuaXplLnB5CmluZGV4IGZmNTdiMTIuLmFlM2RlNTQgMTAwNjQ0Ci0tLSBhL0xpYi90b2tlbml6ZS5weQorKysgYi9MaWIvdG9rZW5pemUucHkKQEAgLTIzLDE1ICsyMywxNSBAQAogZWFjaCB0aW1lIGEgbmV3IHRva2VuIGlzIGZvdW5kLiIiIgogCiBfX2F1dGhvcl9fID0gJ0thLVBpbmcgWWVlIDxwaW5nQGxmdy5vcmc+JwotX19jcmVkaXRzX18gPSBcCi0gICAgJ0d2UiwgRVNSLCBUaW0gUGV0ZXJzLCBUaG9tYXMgV291dGVycywgRnJlZCBEcmFrZSwgU2tpcCBNb250YW5hcm8sIFJheW1vbmQgSGV0dGluZ2VyJworX19jcmVkaXRzX18gPSAoJ0d2UiwgRVNSLCBUaW0gUGV0ZXJzLCBUaG9tYXMgV291dGVycywgRnJlZCBEcmFrZSwgJworICAgICAgICAgICAgICAgJ1NraXAgTW9udGFuYXJvLCBSYXltb25kIEhldHRpbmdlcicpCiAKIGltcG9ydCBzdHJpbmcsIHJlCiBmcm9tIHRva2VuIGltcG9ydCAqCiAKIGltcG9ydCB0b2tlbgotX19hbGxfXyA9IFt4IGZvciB4IGluIGRpcih0b2tlbikgaWYgeFswXSAhPSAnXyddICsgWyJDT01NRU5UIiwgInRva2VuaXplIiwKLSAgICAgICAgICAgImdlbmVyYXRlX3Rva2VucyIsICJOTCIsICJ1bnRva2VuaXplIl0KK19fYWxsX18gPSBbeCBmb3IgeCBpbiBkaXIodG9rZW4pIGlmIG5vdCB4LnN0YXJ0c3dpdGgoIl8iKV0KK19fYWxsX18gKz0gWyJDT01NRU5UIiwgInRva2VuaXplIiwgImdlbmVyYXRlX3Rva2VucyIsICJOTCIsICJ1bnRva2VuaXplIl0KIGRlbCB4CiBkZWwgdG9rZW4KIApAQCAtMjg4LDcgKzI4OCw3IEBACiAgICAgICAgICAgICBsaW5lID0gcmVhZGxpbmUoKQogICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgIGxpbmUgPSAnJwotICAgICAgICBsbnVtID0gbG51bSArIDEKKyAgICAgICAgbG51bSArPSAxCiAgICAgICAgIHBvcywgbWF4ID0gMCwgbGVuKGxpbmUpCiAKICAgICAgICAgaWYgY29udHN0cjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb250aW51ZWQgc3RyaW5nCkBAIC0zMTYsMTIgKzMxNiwxNyBAQAogICAgICAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrCiAgICAgICAgICAgICBjb2x1bW4gPSAwCiAgICAgICAgICAgICB3aGlsZSBwb3MgPCBtYXg6ICAgICAgICAgICAgICAgICAgICMgbWVhc3VyZSBsZWFkaW5nIHdoaXRlc3BhY2UKLSAgICAgICAgICAgICAgICBpZiBsaW5lW3Bvc10gPT0gJyAnOiBjb2x1bW4gPSBjb2x1bW4gKyAxCi0gICAgICAgICAgICAgICAgZWxpZiBsaW5lW3Bvc10gPT0gJ1x0JzogY29sdW1uID0gKGNvbHVtbi90YWJzaXplICsgMSkqdGFic2l6ZQotICAgICAgICAgICAgICAgIGVsaWYgbGluZVtwb3NdID09ICdcZic6IGNvbHVtbiA9IDAKLSAgICAgICAgICAgICAgICBlbHNlOiBicmVhawotICAgICAgICAgICAgICAgIHBvcyA9IHBvcyArIDEKLSAgICAgICAgICAgIGlmIHBvcyA9PSBtYXg6IGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbGluZVtwb3NdID09ICcgJzoKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uICs9IDEKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmVbcG9zXSA9PSAnXHQnOgorICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAoY29sdW1uLy90YWJzaXplICsgMSkqdGFic2l6ZQorICAgICAgICAgICAgICAgIGVsaWYgbGluZVtwb3NdID09ICdcZic6CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IDAKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHBvcyArPSAxCisgICAgICAgICAgICBpZiBwb3MgPT0gbWF4OgorICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgICAgIGlmIGxpbmVbcG9zXSBpbiAnI1xyXG4nOiAgICAgICAgICAgIyBza2lwIGNvbW1lbnRzIG9yIGJsYW5rIGxpbmVzCiAgICAgICAgICAgICAgICAgaWYgbGluZVtwb3NdID09ICcjJzoKQEAgLTM5NywxMyArNDAyLDE1IEBACiAgICAgICAgICAgICAgICAgZWxpZiBpbml0aWFsID09ICdcXCc6ICAgICAgICAgICAgICAgICAgICAgICMgY29udGludWVkIHN0bXQKICAgICAgICAgICAgICAgICAgICAgY29udGludWVkID0gMQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGluaXRpYWwgaW4gJyhbeyc6IHBhcmVubGV2ID0gcGFyZW5sZXYgKyAxCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgaW5pdGlhbCBpbiAnKV19JzogcGFyZW5sZXYgPSBwYXJlbmxldiAtIDEKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5pdGlhbCBpbiAnKFt7JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVubGV2ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBpbml0aWFsIGluICcpXX0nOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW5sZXYgLT0gMQogICAgICAgICAgICAgICAgICAgICB5aWVsZCAoT1AsIHRva2VuLCBzcG9zLCBlcG9zLCBsaW5lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCAoRVJST1JUT0tFTiwgbGluZVtwb3NdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxudW0sIHBvcyksIChsbnVtLCBwb3MrMSksIGxpbmUpCi0gICAgICAgICAgICAgICAgcG9zID0gcG9zICsgMQorICAgICAgICAgICAgICAgIHBvcyArPSAxCiAKICAgICBmb3IgaW5kZW50IGluIGluZGVudHNbMTpdOiAgICAgICAgICAgICAgICAgIyBwb3AgcmVtYWluaW5nIGluZGVudCBsZXZlbHMKICAgICAgICAgeWllbGQgKERFREVOVCwgJycsIChsbnVtLCAwKSwgKGxudW0sIDApLCAnJykKQEAgLTQxMSw1ICs0MTgsNyBAQAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOiAgICAgICAgICAgICAgICAgICAgICMgdGVzdGluZwogICAgIGltcG9ydCBzeXMKLSAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMTogdG9rZW5pemUob3BlbihzeXMuYXJndlsxXSkucmVhZGxpbmUpCi0gICAgZWxzZTogdG9rZW5pemUoc3lzLnN0ZGluLnJlYWRsaW5lKQorICAgIGlmIGxlbihzeXMuYXJndikgPiAxOgorICAgICAgICB0b2tlbml6ZShvcGVuKHN5cy5hcmd2WzFdKS5yZWFkbGluZSkKKyAgICBlbHNlOgorICAgICAgICB0b2tlbml6ZShzeXMuc3RkaW4ucmVhZGxpbmUpCmRpZmYgLS1naXQgYS9MaWIvdHJhY2UucHkgYi9MaWIvdHJhY2UucHkKaW5kZXggMzYxMWY4OC4uOTc0OTFkYiAxMDA2NDQKLS0tIGEvTGliL3RyYWNlLnB5CisrKyBiL0xpYi90cmFjZS5weQpAQCAtNTIsMTkgKzUyLDM0IEBACiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIGltcG9ydCB0b2tlbgogaW1wb3J0IHRva2VuaXplCi1pbXBvcnQgdHlwZXMKK2ltcG9ydCBpbnNwZWN0CiBpbXBvcnQgZ2MKLQoraW1wb3J0IGRpcwogdHJ5OgogICAgIGltcG9ydCBjUGlja2xlCiAgICAgcGlja2xlID0gY1BpY2tsZQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGltcG9ydCBwaWNrbGUKIAordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfc2V0dHJhY2UgPSBzeXMuc2V0dHJhY2UKKworICAgIGRlZiBfdW5zZXR0cmFjZSgpOgorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKK2Vsc2U6CisgICAgZGVmIF9zZXR0cmFjZShmdW5jKToKKyAgICAgICAgdGhyZWFkaW5nLnNldHRyYWNlKGZ1bmMpCisgICAgICAgIHN5cy5zZXR0cmFjZShmdW5jKQorCisgICAgZGVmIF91bnNldHRyYWNlKCk6CisgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorICAgICAgICB0aHJlYWRpbmcuc2V0dHJhY2UoTm9uZSkKKwogZGVmIHVzYWdlKG91dGZpbGUpOgogICAgIG91dGZpbGUud3JpdGUoIiIiVXNhZ2U6ICVzIFtPUFRJT05TXSA8ZmlsZT4gW0FSR1NdCiAKQEAgLTEyNCw3ICsxMzksNyBAQAogICAgICAgICBzZWxmLl9pZ25vcmUgPSB7ICc8c3RyaW5nPic6IDEgfQogCiAgICAgZGVmIG5hbWVzKHNlbGYsIGZpbGVuYW1lLCBtb2R1bGVuYW1lKToKLSAgICAgICAgaWYgc2VsZi5faWdub3JlLmhhc19rZXkobW9kdWxlbmFtZSk6CisgICAgICAgIGlmIG1vZHVsZW5hbWUgaW4gc2VsZi5faWdub3JlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lnbm9yZVttb2R1bGVuYW1lXQogCiAgICAgICAgICMgaGF2ZW4ndCBzZWVuIHRoaXMgb25lIGJlZm9yZSwgc28gc2VlIGlmIHRoZSBtb2R1bGUgbmFtZSBpcwpAQCAtMzc5LDEzICszOTQsNyBAQAogICAgICIiIlJldHVybiBkaWN0IHdoZXJlIGtleXMgYXJlIGxpbmVzIGluIHRoZSBsaW5lIG51bWJlciB0YWJsZS4iIiIKICAgICBsaW5lbm9zID0ge30KIAotICAgIGxpbmVfaW5jcmVtZW50cyA9IFtvcmQoYykgZm9yIGMgaW4gY29kZS5jb19sbm90YWJbMTo6Ml1dCi0gICAgdGFibGVfbGVuZ3RoID0gbGVuKGxpbmVfaW5jcmVtZW50cykKLSAgICBkb2NzdHJpbmcgPSBGYWxzZQotCi0gICAgbGluZW5vID0gY29kZS5jb19maXJzdGxpbmVubwotICAgIGZvciBsaSBpbiBsaW5lX2luY3JlbWVudHM6Ci0gICAgICAgIGxpbmVubyArPSBsaQorICAgIGZvciBfLCBsaW5lbm8gaW4gZGlzLmZpbmRsaW5lc3RhcnRzKGNvZGUpOgogICAgICAgICBpZiBsaW5lbm8gbm90IGluIHN0cnM6CiAgICAgICAgICAgICBsaW5lbm9zW2xpbmVub10gPSAxCiAKQEAgLTM5OCw3ICs0MDcsNyBAQAogCiAgICAgIyBhbmQgY2hlY2sgdGhlIGNvbnN0YW50cyBmb3IgcmVmZXJlbmNlcyB0byBvdGhlciBjb2RlIG9iamVjdHMKICAgICBmb3IgYyBpbiBjb2RlLmNvX2NvbnN0czoKLSAgICAgICAgaWYgaXNpbnN0YW5jZShjLCB0eXBlcy5Db2RlVHlwZSk6CisgICAgICAgIGlmIGluc3BlY3QuaXNjb2RlKGMpOgogICAgICAgICAgICAgIyBmaW5kIGFub3RoZXIgY29kZSBvYmplY3QsIHNvIHJlY3Vyc2UgaW50byBpdAogICAgICAgICAgICAgbGluZW5vcy51cGRhdGUoZmluZF9saW5lcyhjLCBzdHJzKSkKICAgICByZXR1cm4gbGluZW5vcwpAQCAtNDk0LDggKzUwMyw4IEBACiAgICAgICAgIGltcG9ydCBfX21haW5fXwogICAgICAgICBkaWN0ID0gX19tYWluX18uX19kaWN0X18KICAgICAgICAgaWYgbm90IHNlbGYuZG9ub3RoaW5nOgotICAgICAgICAgICAgc3lzLnNldHRyYWNlKHNlbGYuZ2xvYmFsdHJhY2UpCiAgICAgICAgICAgICB0aHJlYWRpbmcuc2V0dHJhY2Uoc2VsZi5nbG9iYWx0cmFjZSkKKyAgICAgICAgICAgIHN5cy5zZXR0cmFjZShzZWxmLmdsb2JhbHRyYWNlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleGVjIGNtZCBpbiBkaWN0LCBkaWN0CiAgICAgICAgIGZpbmFsbHk6CkBAIC01MDcsMTQgKzUxNiwxMiBAQAogICAgICAgICBpZiBnbG9iYWxzIGlzIE5vbmU6IGdsb2JhbHMgPSB7fQogICAgICAgICBpZiBsb2NhbHMgaXMgTm9uZTogbG9jYWxzID0ge30KICAgICAgICAgaWYgbm90IHNlbGYuZG9ub3RoaW5nOgotICAgICAgICAgICAgc3lzLnNldHRyYWNlKHNlbGYuZ2xvYmFsdHJhY2UpCi0gICAgICAgICAgICB0aHJlYWRpbmcuc2V0dHJhY2Uoc2VsZi5nbG9iYWx0cmFjZSkKKyAgICAgICAgICAgIF9zZXR0cmFjZShzZWxmLmdsb2JhbHRyYWNlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleGVjIGNtZCBpbiBnbG9iYWxzLCBsb2NhbHMKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRvbm90aGluZzoKLSAgICAgICAgICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKLSAgICAgICAgICAgICAgICB0aHJlYWRpbmcuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgICAgICAgICBfdW5zZXR0cmFjZSgpCiAKICAgICBkZWYgcnVuZnVuYyhzZWxmLCBmdW5jLCAqYXJncywgKiprdyk6CiAgICAgICAgIHJlc3VsdCA9IE5vbmUKQEAgLTU0NSw3ICs1NTIsNyBAQAogICAgICAgICAgICAgIyMgdXNlIG9mIGdjLmdldF9yZWZlcnJlcnMoKSB3YXMgc3VnZ2VzdGVkIGJ5IE1pY2hhZWwgSHVkc29uCiAgICAgICAgICAgICAjIGFsbCBmdW5jdGlvbnMgd2hpY2ggcmVmZXIgdG8gdGhpcyBjb2RlIG9iamVjdAogICAgICAgICAgICAgZnVuY3MgPSBbZiBmb3IgZiBpbiBnYy5nZXRfcmVmZXJyZXJzKGNvZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmLCAiZnVuY19kb2MiKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnNwZWN0LmlzZnVuY3Rpb24oZildCiAgICAgICAgICAgICAjIHJlcXVpcmUgbGVuKGZ1bmMpID09IDEgdG8gYXZvaWQgYW1iaWd1aXR5IGNhdXNlZCBieSBjYWxscyB0bwogICAgICAgICAgICAgIyBuZXcuZnVuY3Rpb24oKTogIkluIHRoZSBmYWNlIG9mIGFtYmlndWl0eSwgcmVmdXNlIHRoZQogICAgICAgICAgICAgIyB0ZW1wdGF0aW9uIHRvIGd1ZXNzLiIKQEAgLTU1NywxNyArNTY0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoYywgIl9fYmFzZXNfXyIpXQogICAgICAgICAgICAgICAgICAgICBpZiBsZW4oY2xhc3NlcykgPT0gMToKICAgICAgICAgICAgICAgICAgICAgICAgICMgZGl0dG8gZm9yIG5ldy5jbGFzc29iaigpCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHNuYW1lID0gc3RyKGNsYXNzZXNbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBjbHNuYW1lID0gY2xhc3Nlc1swXS5fX25hbWVfXwogICAgICAgICAgICAgICAgICAgICAgICAgIyBjYWNoZSB0aGUgcmVzdWx0IC0gYXNzdW1wdGlvbiBpcyB0aGF0IG5ldy4qIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdCBjYWxsZWQgbGF0ZXIgdG8gZGlzdHVyYiB0aGlzIHJlbGF0aW9uc2hpcAogICAgICAgICAgICAgICAgICAgICAgICAgIyBfY2FsbGVyX2NhY2hlIGNvdWxkIGJlIGZsdXNoZWQgaWYgZnVuY3Rpb25zIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBuZXcgbW9kdWxlIGdldCBjYWxsZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsZXJfY2FjaGVbY29kZV0gPSBjbHNuYW1lCiAgICAgICAgIGlmIGNsc25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAjIGZpbmFsIGhhY2sgLSBtb2R1bGUgbmFtZSBzaG93cyB1cCBpbiBzdHIoY2xzKSwgYnV0IHdlJ3ZlIGFscmVhZHkKLSAgICAgICAgICAgICMgY29tcHV0ZWQgbW9kdWxlIG5hbWUsIHNvIHJlbW92ZSBpdAotICAgICAgICAgICAgY2xzbmFtZSA9IGNsc25hbWUuc3BsaXQoIi4iKVsxOl0KLSAgICAgICAgICAgIGNsc25hbWUgPSAiLiIuam9pbihjbHNuYW1lKQogICAgICAgICAgICAgZnVuY25hbWUgPSAiJXMuJXMiICUgKGNsc25hbWUsIGZ1bmNuYW1lKQogCiAgICAgICAgIHJldHVybiBmaWxlbmFtZSwgbW9kdWxlbmFtZSwgZnVuY25hbWUKZGlmZiAtLWdpdCBhL0xpYi90cmFjZWJhY2sucHkgYi9MaWIvdHJhY2ViYWNrLnB5CmluZGV4IDJhNzdkMmMuLjhjYjllMjggMTAwNjQ0Ci0tLSBhL0xpYi90cmFjZWJhY2sucHkKKysrIGIvTGliL3RyYWNlYmFjay5weQpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCiAgICAgICAgIG5hbWUgPSBjby5jb19uYW1lCiAgICAgICAgIF9wcmludChmaWxlLAotICAgICAgICAgICAgICAgJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsbGluZW5vLG5hbWUpKQorICAgICAgICAgICAgICAgJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCiAgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQogICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgZi5mX2dsb2JhbHMpCiAgICAgICAgIGlmIGxpbmU6IF9wcmludChmaWxlLCAnICAgICcgKyBsaW5lLnN0cmlwKCkpCkBAIC0xMjQsOSArMTI0LDggQEAKICAgICAgICAgX3ByaW50KGZpbGUsICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6JykKICAgICAgICAgcHJpbnRfdGIodGIsIGxpbWl0LCBmaWxlKQogICAgIGxpbmVzID0gZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV0eXBlLCB2YWx1ZSkKLSAgICBmb3IgbGluZSBpbiBsaW5lc1s6LTFdOgotICAgICAgICBfcHJpbnQoZmlsZSwgbGluZSwgJyAnKQotICAgIF9wcmludChmaWxlLCBsaW5lc1stMV0sICcnKQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBfcHJpbnQoZmlsZSwgbGluZSwgJycpCiAKIGRlZiBmb3JtYXRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0ID0gTm9uZSk6CiAgICAgIiIiRm9ybWF0IGEgc3RhY2sgdHJhY2UgYW5kIHRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24uCkBAIC0xOTUsNyArMTk0LDcgQEAKICAgICAgICAgICAgICAgICBjYXJldHNwYWNlID0gKChjLmlzc3BhY2UoKSBhbmQgYyBvciAnICcpIGZvciBjIGluIGNhcmV0c3BhY2UpCiAgICAgICAgICAgICAgICAgIyBvbmx5IHRocmVlIHNwYWNlcyB0byBhY2NvdW50IGZvciBvZmZzZXQxID09IHBvcyAwCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAlc15cbicgJSAnJy5qb2luKGNhcmV0c3BhY2UpKQotICAgICAgICAgICAgdmFsdWUgPSBtc2cKKyAgICAgICAgdmFsdWUgPSBtc2cKIAogICAgIGxpbmVzLmFwcGVuZChfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKHN0eXBlLCB2YWx1ZSkpCiAgICAgcmV0dXJuIGxpbmVzCkBAIC0yNDcsNiArMjQ2LDggQEAKIGRlZiBwcmludF9sYXN0KGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgIiIiVGhpcyBpcyBhIHNob3J0aGFuZCBmb3IgJ3ByaW50X2V4Y2VwdGlvbihzeXMubGFzdF90eXBlLAogICAgIHN5cy5sYXN0X3ZhbHVlLCBzeXMubGFzdF90cmFjZWJhY2ssIGxpbWl0LCBmaWxlKScuIiIiCisgICAgaWYgbm90IGhhc2F0dHIoc3lzLCAibGFzdF90eXBlIik6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vIGxhc3QgZXhjZXB0aW9uIikKICAgICBpZiBmaWxlIGlzIE5vbmU6CiAgICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCiAgICAgcHJpbnRfZXhjZXB0aW9uKHN5cy5sYXN0X3R5cGUsIHN5cy5sYXN0X3ZhbHVlLCBzeXMubGFzdF90cmFjZWJhY2ssCmRpZmYgLS1naXQgYS9MaWIvdHlwZXMucHkgYi9MaWIvdHlwZXMucHkKaW5kZXggZWEzMTZmYS4uZmY5MGUwNCAxMDA2NDQKLS0tIGEvTGliL3R5cGVzLnB5CisrKyBiL0xpYi90eXBlcy5weQpAQCAtNDIsMTEgKzQyLDcgQEAKIGRlZiBfZigpOiBwYXNzCiBGdW5jdGlvblR5cGUgPSB0eXBlKF9mKQogTGFtYmRhVHlwZSA9IHR5cGUobGFtYmRhOiBOb25lKSAgICAgICAgICMgU2FtZSBhcyBGdW5jdGlvblR5cGUKLXRyeToKLSAgICBDb2RlVHlwZSA9IHR5cGUoX2YuZnVuY19jb2RlKQotZXhjZXB0IFJ1bnRpbWVFcnJvcjoKLSAgICAjIEV4ZWN1dGlvbiBpbiByZXN0cmljdGVkIGVudmlyb25tZW50Ci0gICAgcGFzcworQ29kZVR5cGUgPSB0eXBlKF9mLmZ1bmNfY29kZSkKIAogZGVmIF9nKCk6CiAgICAgeWllbGQgMQpAQCAtNzAsMTUgKzY2LDEwIEBACiB0cnk6CiAgICAgcmFpc2UgVHlwZUVycm9yCiBleGNlcHQgVHlwZUVycm9yOgotICAgIHRyeToKLSAgICAgICAgdGIgPSBzeXMuZXhjX2luZm8oKVsyXQotICAgICAgICBUcmFjZWJhY2tUeXBlID0gdHlwZSh0YikKLSAgICAgICAgRnJhbWVUeXBlID0gdHlwZSh0Yi50Yl9mcmFtZSkKLSAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICMgSW4gdGhlIHJlc3RyaWN0ZWQgZW52aXJvbm1lbnQsIGV4Y19pbmZvIHJldHVybnMgKE5vbmUsIE5vbmUsCi0gICAgICAgICMgTm9uZSkgVGhlbiwgdGIudGJfZnJhbWUgZ2l2ZXMgYW4gYXR0cmlidXRlIGVycm9yCi0gICAgICAgIHBhc3MKLSAgICB0YiA9IE5vbmU7IGRlbCB0YgorICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KKyAgICBUcmFjZWJhY2tUeXBlID0gdHlwZSh0YikKKyAgICBGcmFtZVR5cGUgPSB0eXBlKHRiLnRiX2ZyYW1lKQorICAgIGRlbCB0YgogCiBTbGljZVR5cGUgPSBzbGljZQogRWxsaXBzaXNUeXBlID0gdHlwZShFbGxpcHNpcykKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC5weSBiL0xpYi91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRmMTVkNi4uMDAwMDAwMAotLS0gYS9MaWIvdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NzUgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0nJycKLVB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLCBiYXNlZCBvbiBFcmljaCBHYW1tYSdzIEpVbml0IGFuZCBLZW50IEJlY2sncwotU21hbGx0YWxrIHRlc3RpbmcgZnJhbWV3b3JrLgotCi1UaGlzIG1vZHVsZSBjb250YWlucyB0aGUgY29yZSBmcmFtZXdvcmsgY2xhc3NlcyB0aGF0IGZvcm0gdGhlIGJhc2lzIG9mCi1zcGVjaWZpYyB0ZXN0IGNhc2VzIGFuZCBzdWl0ZXMgKFRlc3RDYXNlLCBUZXN0U3VpdGUgZXRjLiksIGFuZCBhbHNvIGEKLXRleHQtYmFzZWQgdXRpbGl0eSBjbGFzcyBmb3IgcnVubmluZyB0aGUgdGVzdHMgYW5kIHJlcG9ydGluZyB0aGUgcmVzdWx0cwotIChUZXh0VGVzdFJ1bm5lcikuCi0KLVNpbXBsZSB1c2FnZToKLQotICAgIGltcG9ydCB1bml0dGVzdAotCi0gICAgY2xhc3MgSW50ZWdlckFyaXRobWVudGljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICBkZWYgdGVzdEFkZChzZWxmKTogICMjIHRlc3QgbWV0aG9kIG5hbWVzIGJlZ2luICd0ZXN0KicKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgxICsgMiksIDMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygwICsgMSwgMSkKLSAgICAgICAgZGVmIHRlc3RNdWx0aXBseShzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgwICogMTApLCAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDUgKiA4KSwgNDApCi0KLSAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgICB1bml0dGVzdC5tYWluKCkKLQotRnVydGhlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGJ1bmRsZWQgZG9jdW1lbnRhdGlvbiwgYW5kIGZyb20KLQotICBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYi9tb2R1bGUtdW5pdHRlc3QuaHRtbAotCi1Db3B5cmlnaHQgKGMpIDE5OTktMjAwMyBTdGV2ZSBQdXJjZWxsCi1UaGlzIG1vZHVsZSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotaXQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUHl0aG9uIGl0c2VsZiwgc28gbG9uZyBhcyB0aGlzIGNvcHlyaWdodCBtZXNzYWdlCi1hbmQgZGlzY2xhaW1lciBhcmUgcmV0YWluZWQgaW4gdGhlaXIgb3JpZ2luYWwgZm9ybS4KLQotSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULAotU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YKLVRISVMgQ09ERSwgRVZFTiBJRiBUSEUgQVVUSE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLURBTUFHRS4KLQotVEhFIEFVVEhPUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLUxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCi1QQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgQ09ERSBQUk9WSURFRCBIRVJFVU5ERVIgSVMgT04gQU4gIkFTIElTIiBCQVNJUywKLUFORCBUSEVSRSBJUyBOTyBPQkxJR0FUSU9OIFdIQVRTT0VWRVIgVE8gUFJPVklERSBNQUlOVEVOQU5DRSwKLVNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KLScnJwotCi1fX2F1dGhvcl9fID0gIlN0ZXZlIFB1cmNlbGwiCi1fX2VtYWlsX18gPSAic3RlcGhlbl9wdXJjZWxsIGF0IHlhaG9vIGRvdCBjb20iCi1fX3ZlcnNpb25fXyA9ICIjUmV2aXNpb246IDEuNjMgJCJbMTE6LTJdCi0KLWltcG9ydCB0aW1lCi1pbXBvcnQgc3lzCi1pbXBvcnQgdHJhY2ViYWNrCi1pbXBvcnQgb3MKLWltcG9ydCB0eXBlcwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRXhwb3J0ZWQgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLV9fYWxsX18gPSBbJ1Rlc3RSZXN1bHQnLCAnVGVzdENhc2UnLCAnVGVzdFN1aXRlJywgJ1RleHRUZXN0UnVubmVyJywKLSAgICAgICAgICAgJ1Rlc3RMb2FkZXInLCAnRnVuY3Rpb25UZXN0Q2FzZScsICdtYWluJywgJ2RlZmF1bHRUZXN0TG9hZGVyJ10KLQotIyBFeHBvc2Ugb2Jzb2xldGUgZnVuY3Rpb25zIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotX19hbGxfXy5leHRlbmQoWydnZXRUZXN0Q2FzZU5hbWVzJywgJ21ha2VTdWl0ZScsICdmaW5kVGVzdENhc2VzJ10pCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotaWYgc3lzLnZlcnNpb25faW5mb1s6Ml0gPCAoMiwgMik6Ci0gICAgZGVmIGlzaW5zdGFuY2Uob2JqLCBjbHNpbmZvKToKLSAgICAgICAgaW1wb3J0IF9fYnVpbHRpbl9fCi0gICAgICAgIGlmIHR5cGUoY2xzaW5mbykgaW4gKHR1cGxlLCBsaXN0KToKLSAgICAgICAgICAgIGZvciBjbHMgaW4gY2xzaW5mbzoKLSAgICAgICAgICAgICAgICBpZiBjbHMgaXMgdHlwZTogY2xzID0gdHlwZXMuQ2xhc3NUeXBlCi0gICAgICAgICAgICAgICAgaWYgX19idWlsdGluX18uaXNpbnN0YW5jZShvYmosIGNscyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbHNlOiByZXR1cm4gX19idWlsdGluX18uaXNpbnN0YW5jZShvYmosIGNsc2luZm8pCi0KLWRlZiBfQ21wVG9LZXkobXljbXApOgotICAgICdDb252ZXJ0IGEgY21wPSBmdW5jdGlvbiBpbnRvIGEga2V5PSBmdW5jdGlvbicKLSAgICBjbGFzcyBLKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmopOgotICAgICAgICAgICAgc2VsZi5vYmogPSBvYmoKLSAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgPT0gLTEKLSAgICByZXR1cm4gSwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGVzdCBmcmFtZXdvcmsgY29yZQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgQWxsIGNsYXNzZXMgZGVmaW5lZCBoZXJlaW4gYXJlICduZXctc3R5bGUnIGNsYXNzZXMsIGFsbG93aW5nIHVzZSBvZiAnc3VwZXIoKScKLV9fbWV0YWNsYXNzX18gPSB0eXBlCi0KLWRlZiBfc3RyY2xhc3MoY2xzKToKLSAgICByZXR1cm4gIiVzLiVzIiAlIChjbHMuX19tb2R1bGVfXywgY2xzLl9fbmFtZV9fKQotCi1fX3VuaXR0ZXN0ID0gMQotCi1jbGFzcyBUZXN0UmVzdWx0OgotICAgICIiIkhvbGRlciBmb3IgdGVzdCByZXN1bHQgaW5mb3JtYXRpb24uCi0KLSAgICBUZXN0IHJlc3VsdHMgYXJlIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCBieSB0aGUgVGVzdENhc2UgYW5kIFRlc3RTdWl0ZQotICAgIGNsYXNzZXMsIGFuZCBkbyBub3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IG1hbmlwdWxhdGVkIGJ5IHdyaXRlcnMgb2YgdGVzdHMuCi0KLSAgICBFYWNoIGluc3RhbmNlIGhvbGRzIHRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuLCBhbmQgY29sbGVjdGlvbnMgb2YKLSAgICBmYWlsdXJlcyBhbmQgZXJyb3JzIHRoYXQgb2NjdXJyZWQgYW1vbmcgdGhvc2UgdGVzdCBydW5zLiBUaGUgY29sbGVjdGlvbnMKLSAgICBjb250YWluIHR1cGxlcyBvZiAodGVzdGNhc2UsIGV4Y2VwdGlvbmluZm8pLCB3aGVyZSBleGNlcHRpb25pbmZvIGlzIHRoZQotICAgIGZvcm1hdHRlZCB0cmFjZWJhY2sgb2YgdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQuCi0gICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10KLSAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQotICAgICAgICBzZWxmLnRlc3RzUnVuID0gMAotICAgICAgICBzZWxmLnNob3VsZFN0b3AgPSBGYWxzZQotCi0gICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgIkNhbGxlZCB3aGVuIHRoZSBnaXZlbiB0ZXN0IGlzIGFib3V0IHRvIGJlIHJ1biIKLSAgICAgICAgc2VsZi50ZXN0c1J1biA9IHNlbGYudGVzdHNSdW4gKyAxCi0KLSAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgICJDYWxsZWQgd2hlbiB0aGUgZ2l2ZW4gdGVzdCBoYXMgYmVlbiBydW4iCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBhZGRFcnJvcihzZWxmLCB0ZXN0LCBlcnIpOgotICAgICAgICAiIiJDYWxsZWQgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuICdlcnInIGlzIGEgdHVwbGUgb2YgdmFsdWVzIGFzCi0gICAgICAgIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKCh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCi0KLSAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIpOgotICAgICAgICAiIiJDYWxsZWQgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuICdlcnInIGlzIGEgdHVwbGUgb2YgdmFsdWVzIGFzCi0gICAgICAgIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpLiIiIgotICAgICAgICBzZWxmLmZhaWx1cmVzLmFwcGVuZCgodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQotCi0gICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6Ci0gICAgICAgICJDYWxsZWQgd2hlbiBhIHRlc3QgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiB3YXNTdWNjZXNzZnVsKHNlbGYpOgotICAgICAgICAiVGVsbHMgd2hldGhlciBvciBub3QgdGhpcyByZXN1bHQgd2FzIGEgc3VjY2VzcyIKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmLmZhaWx1cmVzKSA9PSBsZW4oc2VsZi5lcnJvcnMpID09IDAKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICAiSW5kaWNhdGVzIHRoYXQgdGhlIHRlc3RzIHNob3VsZCBiZSBhYm9ydGVkIgotICAgICAgICBzZWxmLnNob3VsZFN0b3AgPSBUcnVlCi0KLSAgICBkZWYgX2V4Y19pbmZvX3RvX3N0cmluZyhzZWxmLCBlcnIsIHRlc3QpOgotICAgICAgICAiIiJDb252ZXJ0cyBhIHN5cy5leGNfaW5mbygpLXN0eWxlIHR1cGxlIG9mIHZhbHVlcyBpbnRvIGEgc3RyaW5nLiIiIgotICAgICAgICBleGN0eXBlLCB2YWx1ZSwgdGIgPSBlcnIKLSAgICAgICAgIyBTa2lwIHRlc3QgcnVubmVyIHRyYWNlYmFjayBsZXZlbHMKLSAgICAgICAgd2hpbGUgdGIgYW5kIHNlbGYuX2lzX3JlbGV2YW50X3RiX2xldmVsKHRiKToKLSAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAotICAgICAgICBpZiBleGN0eXBlIGlzIHRlc3QuZmFpbHVyZUV4Y2VwdGlvbjoKLSAgICAgICAgICAgICMgU2tpcCBhc3NlcnQqKCkgdHJhY2ViYWNrIGxldmVscwotICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5fY291bnRfcmVsZXZhbnRfdGJfbGV2ZWxzKHRiKQotICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oZXhjdHlwZSwgdmFsdWUsIHRiLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gJycuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGN0eXBlLCB2YWx1ZSwgdGIpKQotCi0gICAgZGVmIF9pc19yZWxldmFudF90Yl9sZXZlbChzZWxmLCB0Yik6Ci0gICAgICAgIHJldHVybiAnX191bml0dGVzdCcgaW4gdGIudGJfZnJhbWUuZl9nbG9iYWxzCi0KLSAgICBkZWYgX2NvdW50X3JlbGV2YW50X3RiX2xldmVscyhzZWxmLCB0Yik6Ci0gICAgICAgIGxlbmd0aCA9IDAKLSAgICAgICAgd2hpbGUgdGIgYW5kIG5vdCBzZWxmLl9pc19yZWxldmFudF90Yl9sZXZlbCh0Yik6Ci0gICAgICAgICAgICBsZW5ndGggKz0gMQotICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0Ci0gICAgICAgIHJldHVybiBsZW5ndGgKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8JXMgcnVuPSVpIGVycm9ycz0laSBmYWlsdXJlcz0laT4iICUgXAotICAgICAgICAgICAgICAgKF9zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYudGVzdHNSdW4sIGxlbihzZWxmLmVycm9ycyksCi0gICAgICAgICAgICAgICAgbGVuKHNlbGYuZmFpbHVyZXMpKQotCi1jbGFzcyBUZXN0Q2FzZToKLSAgICAiIiJBIGNsYXNzIHdob3NlIGluc3RhbmNlcyBhcmUgc2luZ2xlIHRlc3QgY2FzZXMuCi0KLSAgICBCeSBkZWZhdWx0LCB0aGUgdGVzdCBjb2RlIGl0c2VsZiBzaG91bGQgYmUgcGxhY2VkIGluIGEgbWV0aG9kIG5hbWVkCi0gICAgJ3J1blRlc3QnLgotCi0gICAgSWYgdGhlIGZpeHR1cmUgbWF5IGJlIHVzZWQgZm9yIG1hbnkgdGVzdCBjYXNlcywgY3JlYXRlIGFzCi0gICAgbWFueSB0ZXN0IG1ldGhvZHMgYXMgYXJlIG5lZWRlZC4gV2hlbiBpbnN0YW50aWF0aW5nIHN1Y2ggYSBUZXN0Q2FzZQotICAgIHN1YmNsYXNzLCBzcGVjaWZ5IGluIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMgdGhlIG5hbWUgb2YgdGhlIHRlc3QgbWV0aG9kCi0gICAgdGhhdCB0aGUgaW5zdGFuY2UgaXMgdG8gZXhlY3V0ZS4KLQotICAgIFRlc3QgYXV0aG9ycyBzaG91bGQgc3ViY2xhc3MgVGVzdENhc2UgZm9yIHRoZWlyIG93biB0ZXN0cy4gQ29uc3RydWN0aW9uCi0gICAgYW5kIGRlY29uc3RydWN0aW9uIG9mIHRoZSB0ZXN0J3MgZW52aXJvbm1lbnQgKCdmaXh0dXJlJykgY2FuIGJlCi0gICAgaW1wbGVtZW50ZWQgYnkgb3ZlcnJpZGluZyB0aGUgJ3NldFVwJyBhbmQgJ3RlYXJEb3duJyBtZXRob2RzIHJlc3BlY3RpdmVseS4KLQotICAgIElmIGl0IGlzIG5lY2Vzc2FyeSB0byBvdmVycmlkZSB0aGUgX19pbml0X18gbWV0aG9kLCB0aGUgYmFzZSBjbGFzcwotICAgIF9faW5pdF9fIG1ldGhvZCBtdXN0IGFsd2F5cyBiZSBjYWxsZWQuIEl0IGlzIGltcG9ydGFudCB0aGF0IHN1YmNsYXNzZXMKLSAgICBzaG91bGQgbm90IGNoYW5nZSB0aGUgc2lnbmF0dXJlIG9mIHRoZWlyIF9faW5pdF9fIG1ldGhvZCwgc2luY2UgaW5zdGFuY2VzCi0gICAgb2YgdGhlIGNsYXNzZXMgYXJlIGluc3RhbnRpYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHBhcnRzIG9mIHRoZSBmcmFtZXdvcmsKLSAgICBpbiBvcmRlciB0byBiZSBydW4uCi0gICAgIiIiCi0KLSAgICAjIFRoaXMgYXR0cmlidXRlIGRldGVybWluZXMgd2hpY2ggZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIHdoZW4KLSAgICAjIHRoZSBpbnN0YW5jZSdzIGFzc2VydGlvbiBtZXRob2RzIGZhaWw7IHRlc3QgbWV0aG9kcyByYWlzaW5nIHRoaXMKLSAgICAjIGV4Y2VwdGlvbiB3aWxsIGJlIGRlZW1lZCB0byBoYXZlICdmYWlsZWQnIHJhdGhlciB0aGFuICdlcnJvcmVkJwotCi0gICAgZmFpbHVyZUV4Y2VwdGlvbiA9IEFzc2VydGlvbkVycm9yCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgotICAgICAgICAiIiJDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHRoYXQgd2lsbCB1c2UgdGhlIG5hbWVkIHRlc3QKLSAgICAgICAgICAgbWV0aG9kIHdoZW4gZXhlY3V0ZWQuIFJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdGhlIGluc3RhbmNlIGRvZXMKLSAgICAgICAgICAgbm90IGhhdmUgYSBtZXRob2Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCi0gICAgICAgICIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0TWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUKLSAgICAgICAgICAgIHRlc3RNZXRob2QgPSBnZXRhdHRyKHNlbGYsIG1ldGhvZE5hbWUpCi0gICAgICAgICAgICBzZWxmLl90ZXN0TWV0aG9kRG9jID0gdGVzdE1ldGhvZC5fX2RvY19fCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJubyBzdWNoIHRlc3QgbWV0aG9kIGluICVzOiAlcyIgJSBcCi0gICAgICAgICAgICAgICAgICAoc2VsZi5fX2NsYXNzX18sIG1ldGhvZE5hbWUpCi0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICJIb29rIG1ldGhvZCBmb3Igc2V0dGluZyB1cCB0aGUgdGVzdCBmaXh0dXJlIGJlZm9yZSBleGVyY2lzaW5nIGl0LiIKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAiSG9vayBtZXRob2QgZm9yIGRlY29uc3RydWN0aW5nIHRoZSB0ZXN0IGZpeHR1cmUgYWZ0ZXIgdGVzdGluZyBpdC4iCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBjb3VudFRlc3RDYXNlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDEKLQotICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRlc3RSZXN1bHQoKQotCi0gICAgZGVmIHNob3J0RGVzY3JpcHRpb24oc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCwgb3IgTm9uZSBpZiBubwotICAgICAgICBkZXNjcmlwdGlvbiBoYXMgYmVlbiBwcm92aWRlZC4KLQotICAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBsaW5lIG9mCi0gICAgICAgIHRoZSBzcGVjaWZpZWQgdGVzdCBtZXRob2QncyBkb2NzdHJpbmcuCi0gICAgICAgICIiIgotICAgICAgICBkb2MgPSBzZWxmLl90ZXN0TWV0aG9kRG9jCi0gICAgICAgIHJldHVybiBkb2MgYW5kIGRvYy5zcGxpdCgiXG4iKVswXS5zdHJpcCgpIG9yIE5vbmUKLQotICAgIGRlZiBpZChzZWxmKToKLSAgICAgICAgcmV0dXJuICIlcy4lcyIgJSAoX3N0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgdHlwZShzZWxmKSBpcyBub3QgdHlwZShvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICByZXR1cm4gc2VsZi5fdGVzdE1ldGhvZE5hbWUgPT0gb3RoZXIuX3Rlc3RNZXRob2ROYW1lCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCi0KLSAgICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkpCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzZWxmLl90ZXN0TWV0aG9kTmFtZSwgX3N0cmNsYXNzKHNlbGYuX19jbGFzc19fKSkKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8JXMgdGVzdE1ldGhvZD0lcz4iICUgXAotICAgICAgICAgICAgICAgKF9zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQotCi0gICAgZGVmIHJ1bihzZWxmLCByZXN1bHQ9Tm9uZSk6Ci0gICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOiByZXN1bHQgPSBzZWxmLmRlZmF1bHRUZXN0UmVzdWx0KCkKLSAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdChzZWxmKQotICAgICAgICB0ZXN0TWV0aG9kID0gZ2V0YXR0cihzZWxmLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc2V0VXAoKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIHNlbGYuX2V4Y19pbmZvKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgIG9rID0gRmFsc2UKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCkKLSAgICAgICAgICAgICAgICBvayA9IFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgc2VsZi5fZXhjX2luZm8oKSkKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRFcnJvcihzZWxmLCBzZWxmLl9leGNfaW5mbygpKQotCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi50ZWFyRG93bigpCi0gICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3Ioc2VsZiwgc2VsZi5fZXhjX2luZm8oKSkKLSAgICAgICAgICAgICAgICBvayA9IEZhbHNlCi0gICAgICAgICAgICBpZiBvazogcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQotCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgotICAgICAgICByZXR1cm4gc2VsZi5ydW4oKmFyZ3MsICoqa3dkcykKLQotICAgIGRlZiBkZWJ1ZyhzZWxmKToKLSAgICAgICAgIiIiUnVuIHRoZSB0ZXN0IHdpdGhvdXQgY29sbGVjdGluZyBlcnJvcnMgaW4gYSBUZXN0UmVzdWx0IiIiCi0gICAgICAgIHNlbGYuc2V0VXAoKQotICAgICAgICBnZXRhdHRyKHNlbGYsIHNlbGYuX3Rlc3RNZXRob2ROYW1lKSgpCi0gICAgICAgIHNlbGYudGVhckRvd24oKQotCi0gICAgZGVmIF9leGNfaW5mbyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgdmVyc2lvbiBvZiBzeXMuZXhjX2luZm8oKSB3aXRoIHRoZSB0cmFjZWJhY2sgZnJhbWUKLSAgICAgICAgICAgbWluaW1pc2VkOyB1c3VhbGx5IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHRyYWNlYmFjayBmcmFtZSBpcyBub3QKLSAgICAgICAgICAgbmVlZGVkLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHN5cy5leGNfaW5mbygpCi0KLSAgICBkZWYgZmFpbChzZWxmLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkZhaWwgaW1tZWRpYXRlbHksIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuIiIiCi0gICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgbXNnCi0KLSAgICBkZWYgZmFpbElmKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKLSAgICAgICAgIkZhaWwgdGhlIHRlc3QgaWYgdGhlIGV4cHJlc3Npb24gaXMgdHJ1ZS4iCi0gICAgICAgIGlmIGV4cHI6IHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgbXNnCi0KLSAgICBkZWYgZmFpbFVubGVzcyhzZWxmLCBleHByLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkZhaWwgdGhlIHRlc3QgdW5sZXNzIHRoZSBleHByZXNzaW9uIGlzIHRydWUuIiIiCi0gICAgICAgIGlmIG5vdCBleHByOiByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24sIG1zZwotCi0gICAgZGVmIGZhaWxVbmxlc3NSYWlzZXMoc2VsZiwgZXhjQ2xhc3MsIGNhbGxhYmxlT2JqLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAiIiJGYWlsIHVubGVzcyBhbiBleGNlcHRpb24gb2YgY2xhc3MgZXhjQ2xhc3MgaXMgdGhyb3duCi0gICAgICAgICAgIGJ5IGNhbGxhYmxlT2JqIHdoZW4gaW52b2tlZCB3aXRoIGFyZ3VtZW50cyBhcmdzIGFuZCBrZXl3b3JkCi0gICAgICAgICAgIGFyZ3VtZW50cyBrd2FyZ3MuIElmIGEgZGlmZmVyZW50IHR5cGUgb2YgZXhjZXB0aW9uIGlzCi0gICAgICAgICAgIHRocm93biwgaXQgd2lsbCBub3QgYmUgY2F1Z2h0LCBhbmQgdGhlIHRlc3QgY2FzZSB3aWxsIGJlCi0gICAgICAgICAgIGRlZW1lZCB0byBoYXZlIHN1ZmZlcmVkIGFuIGVycm9yLCBleGFjdGx5IGFzIGZvciBhbgotICAgICAgICAgICB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4KLSAgICAgICAgIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNhbGxhYmxlT2JqKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0IGV4Y0NsYXNzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKGV4Y0NsYXNzLCdfX25hbWVfXycpOiBleGNOYW1lID0gZXhjQ2xhc3MuX19uYW1lX18KLSAgICAgICAgICAgIGVsc2U6IGV4Y05hbWUgPSBzdHIoZXhjQ2xhc3MpCi0gICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24sICIlcyBub3QgcmFpc2VkIiAlIGV4Y05hbWUKLQotICAgIGRlZiBmYWlsVW5sZXNzRXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgotICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgdW5lcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSAnPT0nCi0gICAgICAgICAgIG9wZXJhdG9yLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IGZpcnN0ID09IHNlY29uZDoKLSAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgXAotICAgICAgICAgICAgICAgICAgKG1zZyBvciAnJXIgIT0gJXInICUgKGZpcnN0LCBzZWNvbmQpKQotCi0gICAgZGVmIGZhaWxJZkVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKToKLSAgICAgICAgIiIiRmFpbCBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIGVxdWFsIGFzIGRldGVybWluZWQgYnkgdGhlICc9PScKLSAgICAgICAgICAgb3BlcmF0b3IuCi0gICAgICAgICIiIgotICAgICAgICBpZiBmaXJzdCA9PSBzZWNvbmQ6Ci0gICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24sIFwKLSAgICAgICAgICAgICAgICAgIChtc2cgb3IgJyVyID09ICVyJyAlIChmaXJzdCwgc2Vjb25kKSkKLQotICAgIGRlZiBmYWlsVW5sZXNzQWxtb3N0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgcGxhY2VzPTcsIG1zZz1Ob25lKToKLSAgICAgICAgIiIiRmFpbCBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIHVuZXF1YWwgYXMgZGV0ZXJtaW5lZCBieSB0aGVpcgotICAgICAgICAgICBkaWZmZXJlbmNlIHJvdW5kZWQgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcwotICAgICAgICAgICAoZGVmYXVsdCA3KSBhbmQgY29tcGFyaW5nIHRvIHplcm8uCi0KLSAgICAgICAgICAgTm90ZSB0aGF0IGRlY2ltYWwgcGxhY2VzIChmcm9tIHplcm8pIGFyZSB1c3VhbGx5IG5vdCB0aGUgc2FtZQotICAgICAgICAgICBhcyBzaWduaWZpY2FudCBkaWdpdHMgKG1lYXN1cmVkIGZyb20gdGhlIG1vc3Qgc2lnbmZpY2FudCBkaWdpdCkuCi0gICAgICAgICIiIgotICAgICAgICBpZiByb3VuZChhYnMoc2Vjb25kLWZpcnN0KSwgcGxhY2VzKSAhPSAwOgotICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBcCi0gICAgICAgICAgICAgICAgICAobXNnIG9yICclciAhPSAlciB3aXRoaW4gJXIgcGxhY2VzJyAlIChmaXJzdCwgc2Vjb25kLCBwbGFjZXMpKQotCi0gICAgZGVmIGZhaWxJZkFsbW9zdEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHBsYWNlcz03LCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBlcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZWlyCi0gICAgICAgICAgIGRpZmZlcmVuY2Ugcm91bmRlZCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzCi0gICAgICAgICAgIChkZWZhdWx0IDcpIGFuZCBjb21wYXJpbmcgdG8gemVyby4KLQotICAgICAgICAgICBOb3RlIHRoYXQgZGVjaW1hbCBwbGFjZXMgKGZyb20gemVybykgYXJlIHVzdWFsbHkgbm90IHRoZSBzYW1lCi0gICAgICAgICAgIGFzIHNpZ25pZmljYW50IGRpZ2l0cyAobWVhc3VyZWQgZnJvbSB0aGUgbW9zdCBzaWduZmljYW50IGRpZ2l0KS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHJvdW5kKGFicyhzZWNvbmQtZmlyc3QpLCBwbGFjZXMpID09IDA6Ci0gICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24sIFwKLSAgICAgICAgICAgICAgICAgIChtc2cgb3IgJyVyID09ICVyIHdpdGhpbiAlciBwbGFjZXMnICUgKGZpcnN0LCBzZWNvbmQsIHBsYWNlcykpCi0KLSAgICAjIFN5bm9ueW1zIGZvciBhc3NlcnRpb24gbWV0aG9kcwotCi0gICAgYXNzZXJ0RXF1YWwgPSBhc3NlcnRFcXVhbHMgPSBmYWlsVW5sZXNzRXF1YWwKLQotICAgIGFzc2VydE5vdEVxdWFsID0gYXNzZXJ0Tm90RXF1YWxzID0gZmFpbElmRXF1YWwKLQotICAgIGFzc2VydEFsbW9zdEVxdWFsID0gYXNzZXJ0QWxtb3N0RXF1YWxzID0gZmFpbFVubGVzc0FsbW9zdEVxdWFsCi0KLSAgICBhc3NlcnROb3RBbG1vc3RFcXVhbCA9IGFzc2VydE5vdEFsbW9zdEVxdWFscyA9IGZhaWxJZkFsbW9zdEVxdWFsCi0KLSAgICBhc3NlcnRSYWlzZXMgPSBmYWlsVW5sZXNzUmFpc2VzCi0KLSAgICBhc3NlcnRfID0gYXNzZXJ0VHJ1ZSA9IGZhaWxVbmxlc3MKLQotICAgIGFzc2VydEZhbHNlID0gZmFpbElmCi0KLQotCi1jbGFzcyBUZXN0U3VpdGU6Ci0gICAgIiIiQSB0ZXN0IHN1aXRlIGlzIGEgY29tcG9zaXRlIHRlc3QgY29uc2lzdGluZyBvZiBhIG51bWJlciBvZiBUZXN0Q2FzZXMuCi0KLSAgICBGb3IgdXNlLCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgVGVzdFN1aXRlLCB0aGVuIGFkZCB0ZXN0IGNhc2UgaW5zdGFuY2VzLgotICAgIFdoZW4gYWxsIHRlc3RzIGhhdmUgYmVlbiBhZGRlZCwgdGhlIHN1aXRlIGNhbiBiZSBwYXNzZWQgdG8gYSB0ZXN0Ci0gICAgcnVubmVyLCBzdWNoIGFzIFRleHRUZXN0UnVubmVyLiBJdCB3aWxsIHJ1biB0aGUgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzCi0gICAgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBhZGRlZCwgYWdncmVnYXRpbmcgdGhlIHJlc3VsdHMuIFdoZW4KLSAgICBzdWJjbGFzc2luZywgZG8gbm90IGZvcmdldCB0byBjYWxsIHRoZSBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0cz0oKSk6Ci0gICAgICAgIHNlbGYuX3Rlc3RzID0gW10KLSAgICAgICAgc2VsZi5hZGRUZXN0cyh0ZXN0cykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8JXMgdGVzdHM9JXM+IiAlIChfc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLl90ZXN0cykKLQotICAgIF9fc3RyX18gPSBfX3JlcHJfXwotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIHR5cGUoc2VsZikgaXMgbm90IHR5cGUob3RoZXIpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0cyA9PSBvdGhlci5fdGVzdHMKLQotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQotICAgICMgQ2FuJ3QgZ3VhcmFudGVlIGhhc2ggaW52YXJpYW50LCBzbyBmbGFnIGFzIHVuaGFzaGFibGUKLSAgICBfX2hhc2hfXyA9IE5vbmUKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fdGVzdHMpCi0KLSAgICBkZWYgY291bnRUZXN0Q2FzZXMoc2VsZik6Ci0gICAgICAgIGNhc2VzID0gMAotICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl90ZXN0czoKLSAgICAgICAgICAgIGNhc2VzICs9IHRlc3QuY291bnRUZXN0Q2FzZXMoKQotICAgICAgICByZXR1cm4gY2FzZXMKLQotICAgIGRlZiBhZGRUZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICAjIHNhbml0eSBjaGVja3MKLSAgICAgICAgaWYgbm90IGhhc2F0dHIodGVzdCwgJ19fY2FsbF9fJyk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInRoZSB0ZXN0IHRvIGFkZCBtdXN0IGJlIGNhbGxhYmxlIikKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UodGVzdCwgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpIGFuZAotICAgICAgICAgICAgaXNzdWJjbGFzcyh0ZXN0LCAoVGVzdENhc2UsIFRlc3RTdWl0ZSkpKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdENhc2VzIGFuZCBUZXN0U3VpdGVzIG11c3QgYmUgaW5zdGFudGlhdGVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVmb3JlIHBhc3NpbmcgdGhlbSB0byBhZGRUZXN0KCkiKQotICAgICAgICBzZWxmLl90ZXN0cy5hcHBlbmQodGVzdCkKLQotICAgIGRlZiBhZGRUZXN0cyhzZWxmLCB0ZXN0cyk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdHMsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0ZXN0cyBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIHRlc3RzLCBub3QgYSBzdHJpbmciKQotICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKLSAgICAgICAgICAgIHNlbGYuYWRkVGVzdCh0ZXN0KQotCi0gICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgotICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl90ZXN0czoKLSAgICAgICAgICAgIGlmIHJlc3VsdC5zaG91bGRTdG9wOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB0ZXN0KHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgotICAgICAgICByZXR1cm4gc2VsZi5ydW4oKmFyZ3MsICoqa3dkcykKLQotICAgIGRlZiBkZWJ1ZyhzZWxmKToKLSAgICAgICAgIiIiUnVuIHRoZSB0ZXN0cyB3aXRob3V0IGNvbGxlY3RpbmcgZXJyb3JzIGluIGEgVGVzdFJlc3VsdCIiIgotICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl90ZXN0czogdGVzdC5kZWJ1ZygpCi0KLQotY2xhc3MgRnVuY3Rpb25UZXN0Q2FzZShUZXN0Q2FzZSk6Ci0gICAgIiIiQSB0ZXN0IGNhc2UgdGhhdCB3cmFwcyBhIHRlc3QgZnVuY3Rpb24uCi0KLSAgICBUaGlzIGlzIHVzZWZ1bCBmb3Igc2xpcHBpbmcgcHJlLWV4aXN0aW5nIHRlc3QgZnVuY3Rpb25zIGludG8gdGhlCi0gICAgdW5pdHRlc3QgZnJhbWV3b3JrLiBPcHRpb25hbGx5LCBzZXQtdXAgYW5kIHRpZHktdXAgZnVuY3Rpb25zIGNhbiBiZQotICAgIHN1cHBsaWVkLiBBcyB3aXRoIFRlc3RDYXNlLCB0aGUgdGlkeS11cCAoJ3RlYXJEb3duJykgZnVuY3Rpb24gd2lsbAotICAgIGFsd2F5cyBiZSBjYWxsZWQgaWYgdGhlIHNldC11cCAoJ3NldFVwJykgZnVuY3Rpb24gcmFuIHN1Y2Nlc3NmdWxseS4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0RnVuYywgc2V0VXA9Tm9uZSwgdGVhckRvd249Tm9uZSwKLSAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249Tm9uZSk6Ci0gICAgICAgIFRlc3RDYXNlLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX19zZXRVcEZ1bmMgPSBzZXRVcAotICAgICAgICBzZWxmLl9fdGVhckRvd25GdW5jID0gdGVhckRvd24KLSAgICAgICAgc2VsZi5fX3Rlc3RGdW5jID0gdGVzdEZ1bmMKLSAgICAgICAgc2VsZi5fX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fX3NldFVwRnVuYyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX19zZXRVcEZ1bmMoKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9fdGVhckRvd25GdW5jIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fX3RlYXJEb3duRnVuYygpCi0KLSAgICBkZWYgcnVuVGVzdChzZWxmKToKLSAgICAgICAgc2VsZi5fX3Rlc3RGdW5jKCkKLQotICAgIGRlZiBpZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX190ZXN0RnVuYy5fX25hbWVfXwotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIHR5cGUoc2VsZikgaXMgbm90IHR5cGUob3RoZXIpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuX19zZXRVcEZ1bmMgPT0gb3RoZXIuX19zZXRVcEZ1bmMgYW5kIFwKLSAgICAgICAgICAgICAgIHNlbGYuX190ZWFyRG93bkZ1bmMgPT0gb3RoZXIuX190ZWFyRG93bkZ1bmMgYW5kIFwKLSAgICAgICAgICAgICAgIHNlbGYuX190ZXN0RnVuYyA9PSBvdGhlci5fX3Rlc3RGdW5jIGFuZCBcCi0gICAgICAgICAgICAgICBzZWxmLl9fZGVzY3JpcHRpb24gPT0gb3RoZXIuX19kZXNjcmlwdGlvbgotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgotCi0gICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5fX3NldFVwRnVuYywgc2VsZi5fX3RlYXJEb3duRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fdGVzdEZ1bmMsIHNlbGYuX19kZXNjcmlwdGlvbikpCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChfc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLl9fdGVzdEZ1bmMuX19uYW1lX18pCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPCVzIHRlc3RGdW5jPSVzPiIgJSAoX3N0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fX3Rlc3RGdW5jKQotCi0gICAgZGVmIHNob3J0RGVzY3JpcHRpb24oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX19kZXNjcmlwdGlvbiBpcyBub3QgTm9uZTogcmV0dXJuIHNlbGYuX19kZXNjcmlwdGlvbgotICAgICAgICBkb2MgPSBzZWxmLl9fdGVzdEZ1bmMuX19kb2NfXwotICAgICAgICByZXR1cm4gZG9jIGFuZCBkb2Muc3BsaXQoIlxuIilbMF0uc3RyaXAoKSBvciBOb25lCi0KLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTG9jYXRpbmcgYW5kIGxvYWRpbmcgdGVzdHMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1jbGFzcyBUZXN0TG9hZGVyOgotICAgICIiIlRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdGVzdHMgYWNjb3JkaW5nIHRvIHZhcmlvdXMKLSAgICBjcml0ZXJpYSBhbmQgcmV0dXJuaW5nIHRoZW0gd3JhcHBlZCBpbiBhIFRlc3RTdWl0ZQotICAgICIiIgotICAgIHRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKLSAgICBzb3J0VGVzdE1ldGhvZHNVc2luZyA9IGNtcAotICAgIHN1aXRlQ2xhc3MgPSBUZXN0U3VpdGUKLQotICAgIGRlZiBsb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZiwgdGVzdENhc2VDbGFzcyk6Ci0gICAgICAgICIiIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGVzdENhc2VDbGFzcyIiIgotICAgICAgICBpZiBpc3N1YmNsYXNzKHRlc3RDYXNlQ2xhc3MsIFRlc3RTdWl0ZSk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlRlc3QgY2FzZXMgc2hvdWxkIG5vdCBiZSBkZXJpdmVkIGZyb20gVGVzdFN1aXRlLiBNYXliZSB5b3UgbWVhbnQgdG8gZGVyaXZlIGZyb20gVGVzdENhc2U/IikKLSAgICAgICAgdGVzdENhc2VOYW1lcyA9IHNlbGYuZ2V0VGVzdENhc2VOYW1lcyh0ZXN0Q2FzZUNsYXNzKQotICAgICAgICBpZiBub3QgdGVzdENhc2VOYW1lcyBhbmQgaGFzYXR0cih0ZXN0Q2FzZUNsYXNzLCAncnVuVGVzdCcpOgotICAgICAgICAgICAgdGVzdENhc2VOYW1lcyA9IFsncnVuVGVzdCddCi0gICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3MobWFwKHRlc3RDYXNlQ2xhc3MsIHRlc3RDYXNlTmFtZXMpKQotCi0gICAgZGVmIGxvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gbW9kdWxlIiIiCi0gICAgICAgIHRlc3RzID0gW10KLSAgICAgICAgZm9yIG5hbWUgaW4gZGlyKG1vZHVsZSk6Ci0gICAgICAgICAgICBvYmogPSBnZXRhdHRyKG1vZHVsZSwgbmFtZSkKLSAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKG9iaiwgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpIGFuZAotICAgICAgICAgICAgICAgIGlzc3ViY2xhc3Mob2JqLCBUZXN0Q2FzZSkpOgotICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZChzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShvYmopKQotICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKHRlc3RzKQotCi0gICAgZGVmIGxvYWRUZXN0c0Zyb21OYW1lKHNlbGYsIG5hbWUsIG1vZHVsZT1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGdpdmVuIGEgc3RyaW5nIHNwZWNpZmllci4KLQotICAgICAgICBUaGUgbmFtZSBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8gYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhCi0gICAgICAgIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2gKLSAgICAgICAgcmV0dXJucyBhIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4KLQotICAgICAgICBUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgdGhlIG5hbWVzIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gbW9kdWxlLgotICAgICAgICAiIiIKLSAgICAgICAgcGFydHMgPSBuYW1lLnNwbGl0KCcuJykKLSAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6Ci0gICAgICAgICAgICBwYXJ0c19jb3B5ID0gcGFydHNbOl0KLSAgICAgICAgICAgIHdoaWxlIHBhcnRzX2NvcHk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKCcuJy5qb2luKHBhcnRzX2NvcHkpKQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZGVsIHBhcnRzX2NvcHlbLTFdCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJ0c19jb3B5OiByYWlzZQotICAgICAgICAgICAgcGFydHMgPSBwYXJ0c1sxOl0KLSAgICAgICAgb2JqID0gbW9kdWxlCi0gICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgotICAgICAgICAgICAgcGFyZW50LCBvYmogPSBvYmosIGdldGF0dHIob2JqLCBwYXJ0KQotCi0gICAgICAgIGlmIHR5cGUob2JqKSA9PSB0eXBlcy5Nb2R1bGVUeXBlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZFRlc3RzRnJvbU1vZHVsZShvYmopCi0gICAgICAgIGVsaWYgKGlzaW5zdGFuY2Uob2JqLCAodHlwZSwgdHlwZXMuQ2xhc3NUeXBlKSkgYW5kCi0gICAgICAgICAgICAgIGlzc3ViY2xhc3Mob2JqLCBUZXN0Q2FzZSkpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZFRlc3RzRnJvbVRlc3RDYXNlKG9iaikKLSAgICAgICAgZWxpZiAodHlwZShvYmopID09IHR5cGVzLlVuYm91bmRNZXRob2RUeXBlIGFuZAotICAgICAgICAgICAgICBpc2luc3RhbmNlKHBhcmVudCwgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpIGFuZAotICAgICAgICAgICAgICBpc3N1YmNsYXNzKHBhcmVudCwgVGVzdENhc2UpKToKLSAgICAgICAgICAgIHJldHVybiBUZXN0U3VpdGUoW3BhcmVudChvYmouX19uYW1lX18pXSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgVGVzdFN1aXRlKToKLSAgICAgICAgICAgIHJldHVybiBvYmoKLSAgICAgICAgZWxpZiBoYXNhdHRyKG9iaiwgJ19fY2FsbF9fJyk6Ci0gICAgICAgICAgICB0ZXN0ID0gb2JqKCkKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdCwgVGVzdFN1aXRlKToKLSAgICAgICAgICAgICAgICByZXR1cm4gdGVzdAotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHRlc3QsIFRlc3RDYXNlKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVGVzdFN1aXRlKFt0ZXN0XSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYWxsaW5nICVzIHJldHVybmVkICVzLCBub3QgYSB0ZXN0IiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmosIHRlc3QpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBtYWtlIHRlc3QgZnJvbTogJXMiICUgb2JqKQotCi0gICAgZGVmIGxvYWRUZXN0c0Zyb21OYW1lcyhzZWxmLCBuYW1lcywgbW9kdWxlPU5vbmUpOgotICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgZm91bmQgdXNpbmcgdGhlIGdpdmVuIHNlcXVlbmNlCi0gICAgICAgIG9mIHN0cmluZyBzcGVjaWZpZXJzLiBTZWUgJ2xvYWRUZXN0c0Zyb21OYW1lKCknLgotICAgICAgICAiIiIKLSAgICAgICAgc3VpdGVzID0gW3NlbGYubG9hZFRlc3RzRnJvbU5hbWUobmFtZSwgbW9kdWxlKSBmb3IgbmFtZSBpbiBuYW1lc10KLSAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcyhzdWl0ZXMpCi0KLSAgICBkZWYgZ2V0VGVzdENhc2VOYW1lcyhzZWxmLCB0ZXN0Q2FzZUNsYXNzKToKLSAgICAgICAgIiIiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcwotICAgICAgICAiIiIKLSAgICAgICAgZGVmIGlzVGVzdE1ldGhvZChhdHRybmFtZSwgdGVzdENhc2VDbGFzcz10ZXN0Q2FzZUNsYXNzLCBwcmVmaXg9c2VsZi50ZXN0TWV0aG9kUHJlZml4KToKLSAgICAgICAgICAgIHJldHVybiBhdHRybmFtZS5zdGFydHN3aXRoKHByZWZpeCkgYW5kIGhhc2F0dHIoZ2V0YXR0cih0ZXN0Q2FzZUNsYXNzLCBhdHRybmFtZSksICdfX2NhbGxfXycpCi0gICAgICAgIHRlc3RGbk5hbWVzID0gZmlsdGVyKGlzVGVzdE1ldGhvZCwgZGlyKHRlc3RDYXNlQ2xhc3MpKQotICAgICAgICBpZiBzZWxmLnNvcnRUZXN0TWV0aG9kc1VzaW5nOgotICAgICAgICAgICAgdGVzdEZuTmFtZXMuc29ydChrZXk9X0NtcFRvS2V5KHNlbGYuc29ydFRlc3RNZXRob2RzVXNpbmcpKQotICAgICAgICByZXR1cm4gdGVzdEZuTmFtZXMKLQotCi0KLWRlZmF1bHRUZXN0TG9hZGVyID0gVGVzdExvYWRlcigpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBhdGNoZXMgZm9yIG9sZCBmdW5jdGlvbnM6IHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgY29uc2lkZXJlZCBvYnNvbGV0ZQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWRlZiBfbWFrZUxvYWRlcihwcmVmaXgsIHNvcnRVc2luZywgc3VpdGVDbGFzcz1Ob25lKToKLSAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKCkKLSAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSBzb3J0VXNpbmcKLSAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9IHByZWZpeAotICAgIGlmIHN1aXRlQ2xhc3M6IGxvYWRlci5zdWl0ZUNsYXNzID0gc3VpdGVDbGFzcwotICAgIHJldHVybiBsb2FkZXIKLQotZGVmIGdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcywgcHJlZml4LCBzb3J0VXNpbmc9Y21wKToKLSAgICByZXR1cm4gX21ha2VMb2FkZXIocHJlZml4LCBzb3J0VXNpbmcpLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKLQotZGVmIG1ha2VTdWl0ZSh0ZXN0Q2FzZUNsYXNzLCBwcmVmaXg9J3Rlc3QnLCBzb3J0VXNpbmc9Y21wLCBzdWl0ZUNsYXNzPVRlc3RTdWl0ZSk6Ci0gICAgcmV0dXJuIF9tYWtlTG9hZGVyKHByZWZpeCwgc29ydFVzaW5nLCBzdWl0ZUNsYXNzKS5sb2FkVGVzdHNGcm9tVGVzdENhc2UodGVzdENhc2VDbGFzcykKLQotZGVmIGZpbmRUZXN0Q2FzZXMobW9kdWxlLCBwcmVmaXg9J3Rlc3QnLCBzb3J0VXNpbmc9Y21wLCBzdWl0ZUNsYXNzPVRlc3RTdWl0ZSk6Ci0gICAgcmV0dXJuIF9tYWtlTG9hZGVyKHByZWZpeCwgc29ydFVzaW5nLCBzdWl0ZUNsYXNzKS5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGV4dCBVSQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWNsYXNzIF9Xcml0ZWxuRGVjb3JhdG9yOgotICAgICIiIlVzZWQgdG8gZGVjb3JhdGUgZmlsZS1saWtlIG9iamVjdHMgd2l0aCBhIGhhbmR5ICd3cml0ZWxuJyBtZXRob2QiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZixzdHJlYW0pOgotICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQotCi0gICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgotICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnN0cmVhbSxhdHRyKQotCi0gICAgZGVmIHdyaXRlbG4oc2VsZiwgYXJnPU5vbmUpOgotICAgICAgICBpZiBhcmc6IHNlbGYud3JpdGUoYXJnKQotICAgICAgICBzZWxmLndyaXRlKCdcbicpICMgdGV4dC1tb2RlIHN0cmVhbXMgdHJhbnNsYXRlIHRvIFxyXG4gaWYgbmVlZGVkCi0KLQotY2xhc3MgX1RleHRUZXN0UmVzdWx0KFRlc3RSZXN1bHQpOgotICAgICIiIkEgdGVzdCByZXN1bHQgY2xhc3MgdGhhdCBjYW4gcHJpbnQgZm9ybWF0dGVkIHRleHQgcmVzdWx0cyB0byBhIHN0cmVhbS4KLQotICAgIFVzZWQgYnkgVGV4dFRlc3RSdW5uZXIuCi0gICAgIiIiCi0gICAgc2VwYXJhdG9yMSA9ICc9JyAqIDcwCi0gICAgc2VwYXJhdG9yMiA9ICctJyAqIDcwCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtLCBkZXNjcmlwdGlvbnMsIHZlcmJvc2l0eSk6Ci0gICAgICAgIFRlc3RSZXN1bHQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KLSAgICAgICAgc2VsZi5zaG93QWxsID0gdmVyYm9zaXR5ID4gMQotICAgICAgICBzZWxmLmRvdHMgPSB2ZXJib3NpdHkgPT0gMQotICAgICAgICBzZWxmLmRlc2NyaXB0aW9ucyA9IGRlc2NyaXB0aW9ucwotCi0gICAgZGVmIGdldERlc2NyaXB0aW9uKHNlbGYsIHRlc3QpOgotICAgICAgICBpZiBzZWxmLmRlc2NyaXB0aW9uczoKLSAgICAgICAgICAgIHJldHVybiB0ZXN0LnNob3J0RGVzY3JpcHRpb24oKSBvciBzdHIodGVzdCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzdHIodGVzdCkKLQotICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgIFRlc3RSZXN1bHQuc3RhcnRUZXN0KHNlbGYsIHRlc3QpCi0gICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHNlbGYuZ2V0RGVzY3JpcHRpb24odGVzdCkpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiIC4uLiAiKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQotCi0gICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6Ci0gICAgICAgIFRlc3RSZXN1bHQuYWRkU3VjY2VzcyhzZWxmLCB0ZXN0KQotICAgICAgICBpZiBzZWxmLnNob3dBbGw6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJvayIpCi0gICAgICAgIGVsaWYgc2VsZi5kb3RzOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJy4nKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQotCi0gICAgZGVmIGFkZEVycm9yKHNlbGYsIHRlc3QsIGVycik6Ci0gICAgICAgIFRlc3RSZXN1bHQuYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXJyKQotICAgICAgICBpZiBzZWxmLnNob3dBbGw6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJFUlJPUiIpCi0gICAgICAgIGVsaWYgc2VsZi5kb3RzOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJ0UnKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQotCi0gICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgdGVzdCwgZXJyKToKLSAgICAgICAgVGVzdFJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycikKLSAgICAgICAgaWYgc2VsZi5zaG93QWxsOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiRkFJTCIpCi0gICAgICAgIGVsaWYgc2VsZi5kb3RzOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJ0YnKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQotCi0gICAgZGVmIHByaW50RXJyb3JzKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmRvdHMgb3Igc2VsZi5zaG93QWxsOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigpCi0gICAgICAgIHNlbGYucHJpbnRFcnJvckxpc3QoJ0VSUk9SJywgc2VsZi5lcnJvcnMpCi0gICAgICAgIHNlbGYucHJpbnRFcnJvckxpc3QoJ0ZBSUwnLCBzZWxmLmZhaWx1cmVzKQotCi0gICAgZGVmIHByaW50RXJyb3JMaXN0KHNlbGYsIGZsYXZvdXIsIGVycm9ycyk6Ci0gICAgICAgIGZvciB0ZXN0LCBlcnIgaW4gZXJyb3JzOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihzZWxmLnNlcGFyYXRvcjEpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCIlczogJXMiICUgKGZsYXZvdXIsc2VsZi5nZXREZXNjcmlwdGlvbih0ZXN0KSkpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKHNlbGYuc2VwYXJhdG9yMikKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIiVzIiAlIGVycikKLQotCi1jbGFzcyBUZXh0VGVzdFJ1bm5lcjoKLSAgICAiIiJBIHRlc3QgcnVubmVyIGNsYXNzIHRoYXQgZGlzcGxheXMgcmVzdWx0cyBpbiB0ZXh0dWFsIGZvcm0uCi0KLSAgICBJdCBwcmludHMgb3V0IHRoZSBuYW1lcyBvZiB0ZXN0cyBhcyB0aGV5IGFyZSBydW4sIGVycm9ycyBhcyB0aGV5Ci0gICAgb2NjdXIsIGFuZCBhIHN1bW1hcnkgb2YgdGhlIHJlc3VsdHMgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBydW4uCi0gICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbT1zeXMuc3RkZXJyLCBkZXNjcmlwdGlvbnM9MSwgdmVyYm9zaXR5PTEpOgotICAgICAgICBzZWxmLnN0cmVhbSA9IF9Xcml0ZWxuRGVjb3JhdG9yKHN0cmVhbSkKLSAgICAgICAgc2VsZi5kZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnMKLSAgICAgICAgc2VsZi52ZXJib3NpdHkgPSB2ZXJib3NpdHkKLQotICAgIGRlZiBfbWFrZVJlc3VsdChzZWxmKToKLSAgICAgICAgcmV0dXJuIF9UZXh0VGVzdFJlc3VsdChzZWxmLnN0cmVhbSwgc2VsZi5kZXNjcmlwdGlvbnMsIHNlbGYudmVyYm9zaXR5KQotCi0gICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKLSAgICAgICAgIlJ1biB0aGUgZ2l2ZW4gdGVzdCBjYXNlIG9yIHRlc3Qgc3VpdGUuIgotICAgICAgICByZXN1bHQgPSBzZWxmLl9tYWtlUmVzdWx0KCkKLSAgICAgICAgc3RhcnRUaW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgdGVzdChyZXN1bHQpCi0gICAgICAgIHN0b3BUaW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgdGltZVRha2VuID0gc3RvcFRpbWUgLSBzdGFydFRpbWUKLSAgICAgICAgcmVzdWx0LnByaW50RXJyb3JzKCkKLSAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihyZXN1bHQuc2VwYXJhdG9yMikKLSAgICAgICAgcnVuID0gcmVzdWx0LnRlc3RzUnVuCi0gICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIlJhbiAlZCB0ZXN0JXMgaW4gJS4zZnMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnVuLCBydW4gIT0gMSBhbmQgInMiIG9yICIiLCB0aW1lVGFrZW4pKQotICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCkKLSAgICAgICAgaWYgbm90IHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiRkFJTEVEICgiKQotICAgICAgICAgICAgZmFpbGVkLCBlcnJvcmVkID0gbWFwKGxlbiwgKHJlc3VsdC5mYWlsdXJlcywgcmVzdWx0LmVycm9ycykpCi0gICAgICAgICAgICBpZiBmYWlsZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoImZhaWx1cmVzPSVkIiAlIGZhaWxlZCkKLSAgICAgICAgICAgIGlmIGVycm9yZWQ6Ci0gICAgICAgICAgICAgICAgaWYgZmFpbGVkOiBzZWxmLnN0cmVhbS53cml0ZSgiLCAiKQotICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJlcnJvcnM9JWQiICUgZXJyb3JlZCkKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIikiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiT0siKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRmFjaWxpdGllcyBmb3IgcnVubmluZyB0ZXN0cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1jbGFzcyBUZXN0UHJvZ3JhbToKLSAgICAiIiJBIGNvbW1hbmQtbGluZSBwcm9ncmFtIHRoYXQgcnVucyBhIHNldCBvZiB0ZXN0czsgdGhpcyBpcyBwcmltYXJpbHkKLSAgICAgICBmb3IgbWFraW5nIHRlc3QgbW9kdWxlcyBjb252ZW5pZW50bHkgZXhlY3V0YWJsZS4KLSAgICAiIiIKLSAgICBVU0FHRSA9ICIiIlwKLVVzYWdlOiAlKHByb2dOYW1lKXMgW29wdGlvbnNdIFt0ZXN0XSBbLi4uXQotCi1PcHRpb25zOgotICAtaCwgLS1oZWxwICAgICAgIFNob3cgdGhpcyBtZXNzYWdlCi0gIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKLSAgLXEsIC0tcXVpZXQgICAgICBNaW5pbWFsIG91dHB1dAotCi1FeGFtcGxlczoKLSAgJShwcm9nTmFtZSlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcnVuIGRlZmF1bHQgc2V0IG9mIHRlc3RzCi0gICUocHJvZ05hbWUpcyBNeVRlc3RTdWl0ZSAgICAgICAgICAgICAgICAgICAtIHJ1biBzdWl0ZSAnTXlUZXN0U3VpdGUnCi0gICUocHJvZ05hbWUpcyBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcgICAgICAtIHJ1biBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcKLSAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UgICAgICAgICAgICAgICAgICAgIC0gcnVuIGFsbCAndGVzdConIHRlc3QgbWV0aG9kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNeVRlc3RDYXNlCi0iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kdWxlPSdfX21haW5fXycsIGRlZmF1bHRUZXN0PU5vbmUsCi0gICAgICAgICAgICAgICAgIGFyZ3Y9Tm9uZSwgdGVzdFJ1bm5lcj1Ob25lLAotICAgICAgICAgICAgICAgICB0ZXN0TG9hZGVyPWRlZmF1bHRUZXN0TG9hZGVyKToKLSAgICAgICAgaWYgdHlwZShtb2R1bGUpID09IHR5cGUoJycpOgotICAgICAgICAgICAgc2VsZi5tb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZSkKLSAgICAgICAgICAgIGZvciBwYXJ0IGluIG1vZHVsZS5zcGxpdCgnLicpWzE6XToKLSAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IGdldGF0dHIoc2VsZi5tb2R1bGUsIHBhcnQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm1vZHVsZSA9IG1vZHVsZQotICAgICAgICBpZiBhcmd2IGlzIE5vbmU6Ci0gICAgICAgICAgICBhcmd2ID0gc3lzLmFyZ3YKLSAgICAgICAgc2VsZi52ZXJib3NpdHkgPSAxCi0gICAgICAgIHNlbGYuZGVmYXVsdFRlc3QgPSBkZWZhdWx0VGVzdAotICAgICAgICBzZWxmLnRlc3RSdW5uZXIgPSB0ZXN0UnVubmVyCi0gICAgICAgIHNlbGYudGVzdExvYWRlciA9IHRlc3RMb2FkZXIKLSAgICAgICAgc2VsZi5wcm9nTmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoYXJndlswXSkKLSAgICAgICAgc2VsZi5wYXJzZUFyZ3MoYXJndikKLSAgICAgICAgc2VsZi5ydW5UZXN0cygpCi0KLSAgICBkZWYgdXNhZ2VFeGl0KHNlbGYsIG1zZz1Ob25lKToKLSAgICAgICAgaWYgbXNnOiBwcmludCBtc2cKLSAgICAgICAgcHJpbnQgc2VsZi5VU0FHRSAlIHNlbGYuX19kaWN0X18KLSAgICAgICAgc3lzLmV4aXQoMikKLQotICAgIGRlZiBwYXJzZUFyZ3Moc2VsZiwgYXJndik6Ci0gICAgICAgIGltcG9ydCBnZXRvcHQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJndlsxOl0sICdoSHZxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnaGVscCcsJ3ZlcmJvc2UnLCdxdWlldCddKQotICAgICAgICAgICAgZm9yIG9wdCwgdmFsdWUgaW4gb3B0aW9uczoKLSAgICAgICAgICAgICAgICBpZiBvcHQgaW4gKCctaCcsJy1IJywnLS1oZWxwJyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KCkKLSAgICAgICAgICAgICAgICBpZiBvcHQgaW4gKCctcScsJy0tcXVpZXQnKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSAwCi0gICAgICAgICAgICAgICAgaWYgb3B0IGluICgnLXYnLCctLXZlcmJvc2UnKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSAyCi0gICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5kZWZhdWx0VGVzdCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHNlbGYudGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYubW9kdWxlKQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID4gMDoKLSAgICAgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IGFyZ3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSAoc2VsZi5kZWZhdWx0VGVzdCwpCi0gICAgICAgICAgICBzZWxmLmNyZWF0ZVRlc3RzKCkKLSAgICAgICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgotICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQobXNnKQotCi0gICAgZGVmIGNyZWF0ZVRlc3RzKHNlbGYpOgotICAgICAgICBzZWxmLnRlc3QgPSBzZWxmLnRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYudGVzdE5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlKQotCi0gICAgZGVmIHJ1blRlc3RzKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnRlc3RSdW5uZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYudGVzdFJ1bm5lciA9IFRleHRUZXN0UnVubmVyCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnRlc3RSdW5uZXIsICh0eXBlLCB0eXBlcy5DbGFzc1R5cGUpKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyID0gc2VsZi50ZXN0UnVubmVyKHZlcmJvc2l0eT1zZWxmLnZlcmJvc2l0eSkKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgIyBkaWRuJ3QgYWNjZXB0IHRoZSB2ZXJib3NpdHkgYXJndW1lbnQKLSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyID0gc2VsZi50ZXN0UnVubmVyKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgaXQgaXMgYXNzdW1lZCB0byBiZSBhIFRlc3RSdW5uZXIgaW5zdGFuY2UKLSAgICAgICAgICAgIHRlc3RSdW5uZXIgPSBzZWxmLnRlc3RSdW5uZXIKLSAgICAgICAgcmVzdWx0ID0gdGVzdFJ1bm5lci5ydW4oc2VsZi50ZXN0KQotICAgICAgICBzeXMuZXhpdChub3QgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLQotbWFpbiA9IFRlc3RQcm9ncmFtCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEV4ZWN1dGluZyB0aGlzIG1vZHVsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4obW9kdWxlPU5vbmUpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvX19pbml0X18ucHkgYi9MaWIvdW5pdHRlc3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxYTNmMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDY5IEBACisiIiIKK1B5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLCBiYXNlZCBvbiBFcmljaCBHYW1tYSdzIEpVbml0IGFuZCBLZW50IEJlY2sncworU21hbGx0YWxrIHRlc3RpbmcgZnJhbWV3b3JrLgorCitUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgY29yZSBmcmFtZXdvcmsgY2xhc3NlcyB0aGF0IGZvcm0gdGhlIGJhc2lzIG9mCitzcGVjaWZpYyB0ZXN0IGNhc2VzIGFuZCBzdWl0ZXMgKFRlc3RDYXNlLCBUZXN0U3VpdGUgZXRjLiksIGFuZCBhbHNvIGEKK3RleHQtYmFzZWQgdXRpbGl0eSBjbGFzcyBmb3IgcnVubmluZyB0aGUgdGVzdHMgYW5kIHJlcG9ydGluZyB0aGUgcmVzdWx0cworIChUZXh0VGVzdFJ1bm5lcikuCisKK1NpbXBsZSB1c2FnZToKKworICAgIGltcG9ydCB1bml0dGVzdAorCisgICAgY2xhc3MgSW50ZWdlckFyaXRobWVudGljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBkZWYgdGVzdEFkZChzZWxmKTogICMjIHRlc3QgbWV0aG9kIG5hbWVzIGJlZ2luICd0ZXN0KicKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEgKyAyKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCArIDEsIDEpCisgICAgICAgIGRlZiB0ZXN0TXVsdGlwbHkoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwICogMTApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSAqIDgpLCA0MCkKKworICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgIHVuaXR0ZXN0Lm1haW4oKQorCitGdXJ0aGVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgYnVuZGxlZCBkb2N1bWVudGF0aW9uLCBhbmQgZnJvbQorCisgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91bml0dGVzdC5odG1sCisKK0NvcHlyaWdodCAoYykgMTk5OS0yMDAzIFN0ZXZlIFB1cmNlbGwKK0NvcHlyaWdodCAoYykgMjAwMy0yMDEwIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCitUaGlzIG1vZHVsZSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUHl0aG9uIGl0c2VsZiwgc28gbG9uZyBhcyB0aGlzIGNvcHlyaWdodCBtZXNzYWdlCithbmQgZGlzY2xhaW1lciBhcmUgcmV0YWluZWQgaW4gdGhlaXIgb3JpZ2luYWwgZm9ybS4KKworSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULAorU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgQ09ERSwgRVZFTiBJRiBUSEUgQVVUSE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KKworVEhFIEFVVEhPUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgQ09ERSBQUk9WSURFRCBIRVJFVU5ERVIgSVMgT04gQU4gIkFTIElTIiBCQVNJUywKK0FORCBUSEVSRSBJUyBOTyBPQkxJR0FUSU9OIFdIQVRTT0VWRVIgVE8gUFJPVklERSBNQUlOVEVOQU5DRSwKK1NVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKyIiIgorCitfX2FsbF9fID0gWydUZXN0UmVzdWx0JywgJ1Rlc3RDYXNlJywgJ1Rlc3RTdWl0ZScsCisgICAgICAgICAgICdUZXh0VGVzdFJ1bm5lcicsICdUZXN0TG9hZGVyJywgJ0Z1bmN0aW9uVGVzdENhc2UnLCAnbWFpbicsCisgICAgICAgICAgICdkZWZhdWx0VGVzdExvYWRlcicsICdTa2lwVGVzdCcsICdza2lwJywgJ3NraXBJZicsICdza2lwVW5sZXNzJywKKyAgICAgICAgICAgJ2V4cGVjdGVkRmFpbHVyZScsICdUZXh0VGVzdFJlc3VsdCcsICdpbnN0YWxsSGFuZGxlcicsCisgICAgICAgICAgICdyZWdpc3RlclJlc3VsdCcsICdyZW1vdmVSZXN1bHQnLCAncmVtb3ZlSGFuZGxlciddCisKKyMgRXhwb3NlIG9ic29sZXRlIGZ1bmN0aW9ucyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK19fYWxsX18uZXh0ZW5kKFsnZ2V0VGVzdENhc2VOYW1lcycsICdtYWtlU3VpdGUnLCAnZmluZFRlc3RDYXNlcyddKQorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitmcm9tIC5yZXN1bHQgaW1wb3J0IFRlc3RSZXN1bHQKK2Zyb20gLmNhc2UgaW1wb3J0IChUZXN0Q2FzZSwgRnVuY3Rpb25UZXN0Q2FzZSwgU2tpcFRlc3QsIHNraXAsIHNraXBJZiwKKyAgICAgICAgICAgICAgICAgICBza2lwVW5sZXNzLCBleHBlY3RlZEZhaWx1cmUpCitmcm9tIC5zdWl0ZSBpbXBvcnQgQmFzZVRlc3RTdWl0ZSwgVGVzdFN1aXRlCitmcm9tIC5sb2FkZXIgaW1wb3J0IChUZXN0TG9hZGVyLCBkZWZhdWx0VGVzdExvYWRlciwgbWFrZVN1aXRlLCBnZXRUZXN0Q2FzZU5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgZmluZFRlc3RDYXNlcykKK2Zyb20gLm1haW4gaW1wb3J0IFRlc3RQcm9ncmFtLCBtYWluCitmcm9tIC5ydW5uZXIgaW1wb3J0IFRleHRUZXN0UnVubmVyLCBUZXh0VGVzdFJlc3VsdAorZnJvbSAuc2lnbmFscyBpbXBvcnQgaW5zdGFsbEhhbmRsZXIsIHJlZ2lzdGVyUmVzdWx0LCByZW1vdmVSZXN1bHQsIHJlbW92ZUhhbmRsZXIKKworIyBkZXByZWNhdGVkCitfVGV4dFRlc3RSZXN1bHQgPSBUZXh0VGVzdFJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5IGIvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMjAwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkKQEAgLTAsMCArMSwxMiBAQAorIiIiTWFpbiBlbnRyeSBwb2ludCIiIgorCitpbXBvcnQgc3lzCitpZiBzeXMuYXJndlswXS5lbmRzd2l0aCgiX19tYWluX18ucHkiKToKKyAgICBzeXMuYXJndlswXSA9ICJweXRob24gLW0gdW5pdHRlc3QiCisKK19fdW5pdHRlc3QgPSBUcnVlCisKK2Zyb20gLm1haW4gaW1wb3J0IG1haW4sIFRlc3RQcm9ncmFtLCBVU0FHRV9BU19NQUlOCitUZXN0UHJvZ3JhbS5VU0FHRSA9IFVTQUdFX0FTX01BSU4KKworbWFpbihtb2R1bGU9Tm9uZSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9jYXNlLnB5IGIvTGliL3VuaXR0ZXN0L2Nhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4ZjRmYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC9jYXNlLnB5CkBAIC0wLDAgKzEsMTA2NSBAQAorIiIiVGVzdCBjYXNlIGltcGxlbWVudGF0aW9uIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHN5cworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCByZQoraW1wb3J0IHdhcm5pbmdzCisKK2Zyb20gLiBpbXBvcnQgcmVzdWx0Citmcm9tIC51dGlsIGltcG9ydCAoCisgICAgc3RyY2xhc3MsIHNhZmVfcmVwciwgc29ydGVkX2xpc3RfZGlmZmVyZW5jZSwgdW5vcmRlcmFibGVfbGlzdF9kaWZmZXJlbmNlCispCisKK19fdW5pdHRlc3QgPSBUcnVlCisKKworRElGRl9PTUlUVEVEID0gKCdcbkRpZmYgaXMgJXMgY2hhcmFjdGVycyBsb25nLiAnCisgICAgICAgICAgICAgICAgICdTZXQgc2VsZi5tYXhEaWZmIHRvIE5vbmUgdG8gc2VlIGl0LicpCisKK2NsYXNzIFNraXBUZXN0KEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgUmFpc2UgdGhpcyBleGNlcHRpb24gaW4gYSB0ZXN0IHRvIHNraXAgaXQuCisKKyAgICBVc3VhbGx5IHlvdSBjYW4gdXNlIFRlc3RSZXN1bHQuc2tpcCgpIG9yIG9uZSBvZiB0aGUgc2tpcHBpbmcgZGVjb3JhdG9ycworICAgIGluc3RlYWQgb2YgcmFpc2luZyB0aGlzIGRpcmVjdGx5LgorICAgICIiIgorICAgIHBhc3MKKworY2xhc3MgX0V4cGVjdGVkRmFpbHVyZShFeGNlcHRpb24pOgorICAgICIiIgorICAgIFJhaXNlIHRoaXMgd2hlbiBhIHRlc3QgaXMgZXhwZWN0ZWQgdG8gZmFpbC4KKworICAgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Y19pbmZvKToKKyAgICAgICAgc3VwZXIoX0V4cGVjdGVkRmFpbHVyZSwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLmV4Y19pbmZvID0gZXhjX2luZm8KKworY2xhc3MgX1VuZXhwZWN0ZWRTdWNjZXNzKEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgVGhlIHRlc3Qgd2FzIHN1cHBvc2VkIHRvIGZhaWwsIGJ1dCBpdCBkaWRuJ3QhCisgICAgIiIiCisgICAgcGFzcworCitkZWYgX2lkKG9iaik6CisgICAgcmV0dXJuIG9iagorCitkZWYgc2tpcChyZWFzb24pOgorICAgICIiIgorICAgIFVuY29uZGl0aW9uYWxseSBza2lwIGEgdGVzdC4KKyAgICAiIiIKKyAgICBkZWYgZGVjb3JhdG9yKHRlc3RfaXRlbSk6CisgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZSh0ZXN0X2l0ZW0sIHR5cGUpIGFuZCBpc3N1YmNsYXNzKHRlc3RfaXRlbSwgVGVzdENhc2UpKToKKyAgICAgICAgICAgIEBmdW5jdG9vbHMud3JhcHModGVzdF9pdGVtKQorICAgICAgICAgICAgZGVmIHNraXBfd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHJhaXNlIFNraXBUZXN0KHJlYXNvbikKKyAgICAgICAgICAgIHRlc3RfaXRlbSA9IHNraXBfd3JhcHBlcgorCisgICAgICAgIHRlc3RfaXRlbS5fX3VuaXR0ZXN0X3NraXBfXyA9IFRydWUKKyAgICAgICAgdGVzdF9pdGVtLl9fdW5pdHRlc3Rfc2tpcF93aHlfXyA9IHJlYXNvbgorICAgICAgICByZXR1cm4gdGVzdF9pdGVtCisgICAgcmV0dXJuIGRlY29yYXRvcgorCitkZWYgc2tpcElmKGNvbmRpdGlvbiwgcmVhc29uKToKKyAgICAiIiIKKyAgICBTa2lwIGEgdGVzdCBpZiB0aGUgY29uZGl0aW9uIGlzIHRydWUuCisgICAgIiIiCisgICAgaWYgY29uZGl0aW9uOgorICAgICAgICByZXR1cm4gc2tpcChyZWFzb24pCisgICAgcmV0dXJuIF9pZAorCitkZWYgc2tpcFVubGVzcyhjb25kaXRpb24sIHJlYXNvbik6CisgICAgIiIiCisgICAgU2tpcCBhIHRlc3QgdW5sZXNzIHRoZSBjb25kaXRpb24gaXMgdHJ1ZS4KKyAgICAiIiIKKyAgICBpZiBub3QgY29uZGl0aW9uOgorICAgICAgICByZXR1cm4gc2tpcChyZWFzb24pCisgICAgcmV0dXJuIF9pZAorCisKK2RlZiBleHBlY3RlZEZhaWx1cmUoZnVuYyk6CisgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFpc2UgX0V4cGVjdGVkRmFpbHVyZShzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgcmFpc2UgX1VuZXhwZWN0ZWRTdWNjZXNzCisgICAgcmV0dXJuIHdyYXBwZXIKKworCitjbGFzcyBfQXNzZXJ0UmFpc2VzQ29udGV4dChvYmplY3QpOgorICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydFJhaXNlcyogbWV0aG9kcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZCwgdGVzdF9jYXNlLCBleHBlY3RlZF9yZWdleHA9Tm9uZSk6CisgICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBleHBlY3RlZAorICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24gPSB0ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbgorICAgICAgICBzZWxmLmV4cGVjdGVkX3JlZ2V4cCA9IGV4cGVjdGVkX3JlZ2V4cAorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0Yik6CisgICAgICAgIGlmIGV4Y190eXBlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhjX25hbWUgPSBzZWxmLmV4cGVjdGVkLl9fbmFtZV9fCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjX25hbWUgPSBzdHIoc2VsZi5leHBlY3RlZCkKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiezB9IG5vdCByYWlzZWQiLmZvcm1hdChleGNfbmFtZSkpCisgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKGV4Y190eXBlLCBzZWxmLmV4cGVjdGVkKToKKyAgICAgICAgICAgICMgbGV0IHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBwYXNzIHRocm91Z2gKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IGV4Y192YWx1ZSAjIHN0b3JlIGZvciBsYXRlciByZXRyaWV2YWwKKyAgICAgICAgaWYgc2VsZi5leHBlY3RlZF9yZWdleHAgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZXhwZWN0ZWRfcmVnZXhwID0gc2VsZi5leHBlY3RlZF9yZWdleHAKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZF9yZWdleHAsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXhwID0gcmUuY29tcGlsZShleHBlY3RlZF9yZWdleHApCisgICAgICAgIGlmIG5vdCBleHBlY3RlZF9yZWdleHAuc2VhcmNoKHN0cihleGNfdmFsdWUpKToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbignIiVzIiBkb2VzIG5vdCBtYXRjaCAiJXMiJyAlCisgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfcmVnZXhwLnBhdHRlcm4sIHN0cihleGNfdmFsdWUpKSkKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBUZXN0Q2FzZShvYmplY3QpOgorICAgICIiIkEgY2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSBzaW5nbGUgdGVzdCBjYXNlcy4KKworICAgIEJ5IGRlZmF1bHQsIHRoZSB0ZXN0IGNvZGUgaXRzZWxmIHNob3VsZCBiZSBwbGFjZWQgaW4gYSBtZXRob2QgbmFtZWQKKyAgICAncnVuVGVzdCcuCisKKyAgICBJZiB0aGUgZml4dHVyZSBtYXkgYmUgdXNlZCBmb3IgbWFueSB0ZXN0IGNhc2VzLCBjcmVhdGUgYXMKKyAgICBtYW55IHRlc3QgbWV0aG9kcyBhcyBhcmUgbmVlZGVkLiBXaGVuIGluc3RhbnRpYXRpbmcgc3VjaCBhIFRlc3RDYXNlCisgICAgc3ViY2xhc3MsIHNwZWNpZnkgaW4gdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyB0aGUgbmFtZSBvZiB0aGUgdGVzdCBtZXRob2QKKyAgICB0aGF0IHRoZSBpbnN0YW5jZSBpcyB0byBleGVjdXRlLgorCisgICAgVGVzdCBhdXRob3JzIHNob3VsZCBzdWJjbGFzcyBUZXN0Q2FzZSBmb3IgdGhlaXIgb3duIHRlc3RzLiBDb25zdHJ1Y3Rpb24KKyAgICBhbmQgZGVjb25zdHJ1Y3Rpb24gb2YgdGhlIHRlc3QncyBlbnZpcm9ubWVudCAoJ2ZpeHR1cmUnKSBjYW4gYmUKKyAgICBpbXBsZW1lbnRlZCBieSBvdmVycmlkaW5nIHRoZSAnc2V0VXAnIGFuZCAndGVhckRvd24nIG1ldGhvZHMgcmVzcGVjdGl2ZWx5LgorCisgICAgSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIG92ZXJyaWRlIHRoZSBfX2luaXRfXyBtZXRob2QsIHRoZSBiYXNlIGNsYXNzCisgICAgX19pbml0X18gbWV0aG9kIG11c3QgYWx3YXlzIGJlIGNhbGxlZC4gSXQgaXMgaW1wb3J0YW50IHRoYXQgc3ViY2xhc3NlcworICAgIHNob3VsZCBub3QgY2hhbmdlIHRoZSBzaWduYXR1cmUgb2YgdGhlaXIgX19pbml0X18gbWV0aG9kLCBzaW5jZSBpbnN0YW5jZXMKKyAgICBvZiB0aGUgY2xhc3NlcyBhcmUgaW5zdGFudGlhdGVkIGF1dG9tYXRpY2FsbHkgYnkgcGFydHMgb2YgdGhlIGZyYW1ld29yaworICAgIGluIG9yZGVyIHRvIGJlIHJ1bi4KKyAgICAiIiIKKworICAgICMgVGhpcyBhdHRyaWJ1dGUgZGV0ZXJtaW5lcyB3aGljaCBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgd2hlbgorICAgICMgdGhlIGluc3RhbmNlJ3MgYXNzZXJ0aW9uIG1ldGhvZHMgZmFpbDsgdGVzdCBtZXRob2RzIHJhaXNpbmcgdGhpcworICAgICMgZXhjZXB0aW9uIHdpbGwgYmUgZGVlbWVkIHRvIGhhdmUgJ2ZhaWxlZCcgcmF0aGVyIHRoYW4gJ2Vycm9yZWQnCisKKyAgICBmYWlsdXJlRXhjZXB0aW9uID0gQXNzZXJ0aW9uRXJyb3IKKworICAgICMgVGhpcyBhdHRyaWJ1dGUgZGV0ZXJtaW5lcyB3aGV0aGVyIGxvbmcgbWVzc2FnZXMgKGluY2x1ZGluZyByZXByIG9mCisgICAgIyBvYmplY3RzIHVzZWQgaW4gYXNzZXJ0IG1ldGhvZHMpIHdpbGwgYmUgcHJpbnRlZCBvbiBmYWlsdXJlIGluICphZGRpdGlvbioKKyAgICAjIHRvIGFueSBleHBsaWNpdCBtZXNzYWdlIHBhc3NlZC4KKworICAgIGxvbmdNZXNzYWdlID0gRmFsc2UKKworICAgICMgVGhpcyBhdHRyaWJ1dGUgc2V0cyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBkaWZmIGluIGZhaWx1cmUgbWVzc2FnZXMKKyAgICAjIGJ5IGFzc2VydCBtZXRob2RzIHVzaW5nIGRpZmZsaWIuIEl0IGlzIGxvb2tlZCB1cCBhcyBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUKKyAgICAjIHNvIGNhbiBiZSBjb25maWd1cmVkIGJ5IGluZGl2aWR1YWwgdGVzdHMgaWYgcmVxdWlyZWQuCisKKyAgICBtYXhEaWZmID0gODAqOAorCisgICAgIyBBdHRyaWJ1dGUgdXNlZCBieSBUZXN0U3VpdGUgZm9yIGNsYXNzU2V0VXAKKworICAgIF9jbGFzc1NldHVwRmFpbGVkID0gRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgICIiIkNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgdGhhdCB3aWxsIHVzZSB0aGUgbmFtZWQgdGVzdAorICAgICAgICAgICBtZXRob2Qgd2hlbiBleGVjdXRlZC4gUmFpc2VzIGEgVmFsdWVFcnJvciBpZiB0aGUgaW5zdGFuY2UgZG9lcworICAgICAgICAgICBub3QgaGF2ZSBhIG1ldGhvZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Rlc3RNZXRob2ROYW1lID0gbWV0aG9kTmFtZQorICAgICAgICBzZWxmLl9yZXN1bHRGb3JEb0NsZWFudXBzID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0TWV0aG9kID0gZ2V0YXR0cihzZWxmLCBtZXRob2ROYW1lKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBzdWNoIHRlc3QgbWV0aG9kIGluICVzOiAlcyIgJQorICAgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLCBtZXRob2ROYW1lKSkKKyAgICAgICAgc2VsZi5fdGVzdE1ldGhvZERvYyA9IHRlc3RNZXRob2QuX19kb2NfXworICAgICAgICBzZWxmLl9jbGVhbnVwcyA9IFtdCisKKyAgICAgICAgIyBNYXAgdHlwZXMgdG8gY3VzdG9tIGFzc2VydEVxdWFsIGZ1bmN0aW9ucyB0aGF0IHdpbGwgY29tcGFyZQorICAgICAgICAjIGluc3RhbmNlcyBvZiBzYWlkIHR5cGUgaW4gbW9yZSBkZXRhaWwgdG8gZ2VuZXJhdGUgYSBtb3JlIHVzZWZ1bAorICAgICAgICAjIGVycm9yIG1lc3NhZ2UuCisgICAgICAgIHNlbGYuX3R5cGVfZXF1YWxpdHlfZnVuY3MgPSB7fQorICAgICAgICBzZWxmLmFkZFR5cGVFcXVhbGl0eUZ1bmMoZGljdCwgc2VsZi5hc3NlcnREaWN0RXF1YWwpCisgICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyhsaXN0LCBzZWxmLmFzc2VydExpc3RFcXVhbCkKKyAgICAgICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKHR1cGxlLCBzZWxmLmFzc2VydFR1cGxlRXF1YWwpCisgICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyhzZXQsIHNlbGYuYXNzZXJ0U2V0RXF1YWwpCisgICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyhmcm96ZW5zZXQsIHNlbGYuYXNzZXJ0U2V0RXF1YWwpCisgICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyh1bmljb2RlLCBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKQorCisgICAgZGVmIGFkZFR5cGVFcXVhbGl0eUZ1bmMoc2VsZiwgdHlwZW9iaiwgZnVuY3Rpb24pOgorICAgICAgICAiIiJBZGQgYSB0eXBlIHNwZWNpZmljIGFzc2VydEVxdWFsIHN0eWxlIGZ1bmN0aW9uIHRvIGNvbXBhcmUgYSB0eXBlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGZvciB1c2UgYnkgVGVzdENhc2Ugc3ViY2xhc3NlcyB0aGF0IG5lZWQgdG8gcmVnaXN0ZXIKKyAgICAgICAgdGhlaXIgb3duIHR5cGUgZXF1YWxpdHkgZnVuY3Rpb25zIHRvIHByb3ZpZGUgbmljZXIgZXJyb3IgbWVzc2FnZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHR5cGVvYmo6IFRoZSBkYXRhIHR5cGUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIG9uIHdoZW4gYm90aCB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgYXJlIG9mIHRoZSBzYW1lIHR5cGUgaW4gYXNzZXJ0RXF1YWwoKS4KKyAgICAgICAgICAgIGZ1bmN0aW9uOiBUaGUgY2FsbGFibGUgdGFraW5nIHR3byBhcmd1bWVudHMgYW5kIGFuIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIG1zZz0gYXJndW1lbnQgdGhhdCByYWlzZXMgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIHdpdGggYQorICAgICAgICAgICAgICAgICAgICB1c2VmdWwgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSB0d28gYXJndW1lbnRzIGFyZSBub3QgZXF1YWwuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl90eXBlX2VxdWFsaXR5X2Z1bmNzW3R5cGVvYmpdID0gZnVuY3Rpb24KKworICAgIGRlZiBhZGRDbGVhbnVwKHNlbGYsIGZ1bmN0aW9uLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJBZGQgYSBmdW5jdGlvbiwgd2l0aCBhcmd1bWVudHMsIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB0ZXN0IGlzCisgICAgICAgIGNvbXBsZXRlZC4gRnVuY3Rpb25zIGFkZGVkIGFyZSBjYWxsZWQgb24gYSBMSUZPIGJhc2lzIGFuZCBhcmUKKyAgICAgICAgY2FsbGVkIGFmdGVyIHRlYXJEb3duIG9uIHRlc3QgZmFpbHVyZSBvciBzdWNjZXNzLgorCisgICAgICAgIENsZWFudXAgaXRlbXMgYXJlIGNhbGxlZCBldmVuIGlmIHNldFVwIGZhaWxzICh1bmxpa2UgdGVhckRvd24pLiIiIgorICAgICAgICBzZWxmLl9jbGVhbnVwcy5hcHBlbmQoKGZ1bmN0aW9uLCBhcmdzLCBrd2FyZ3MpKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiSG9vayBtZXRob2QgZm9yIHNldHRpbmcgdXAgdGhlIHRlc3QgZml4dHVyZSBiZWZvcmUgZXhlcmNpc2luZyBpdC4iCisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIkhvb2sgbWV0aG9kIGZvciBkZWNvbnN0cnVjdGluZyB0aGUgdGVzdCBmaXh0dXJlIGFmdGVyIHRlc3RpbmcgaXQuIgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAiSG9vayBtZXRob2QgZm9yIHNldHRpbmcgdXAgY2xhc3MgZml4dHVyZSBiZWZvcmUgcnVubmluZyB0ZXN0cyBpbiB0aGUgY2xhc3MuIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgIkhvb2sgbWV0aG9kIGZvciBkZWNvbnN0cnVjdGluZyB0aGUgY2xhc3MgZml4dHVyZSBhZnRlciBydW5uaW5nIGFsbCB0ZXN0cyBpbiB0aGUgY2xhc3MuIgorCisgICAgZGVmIGNvdW50VGVzdENhc2VzKHNlbGYpOgorICAgICAgICByZXR1cm4gMQorCisgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICByZXR1cm4gcmVzdWx0LlRlc3RSZXN1bHQoKQorCisgICAgZGVmIHNob3J0RGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgICIiIlJldHVybnMgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCwgb3IgTm9uZSBpZiBubworICAgICAgICBkZXNjcmlwdGlvbiBoYXMgYmVlbiBwcm92aWRlZC4KKworICAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBsaW5lIG9mCisgICAgICAgIHRoZSBzcGVjaWZpZWQgdGVzdCBtZXRob2QncyBkb2NzdHJpbmcuCisgICAgICAgICIiIgorICAgICAgICBkb2MgPSBzZWxmLl90ZXN0TWV0aG9kRG9jCisgICAgICAgIHJldHVybiBkb2MgYW5kIGRvYy5zcGxpdCgiXG4iKVswXS5zdHJpcCgpIG9yIE5vbmUKKworCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzLiVzIiAlIChzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHR5cGUoc2VsZikgaXMgbm90IHR5cGUob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RNZXRob2ROYW1lID09IG90aGVyLl90ZXN0TWV0aG9kTmFtZQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMgKCVzKSIgJSAoc2VsZi5fdGVzdE1ldGhvZE5hbWUsIHN0cmNsYXNzKHNlbGYuX19jbGFzc19fKSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMgdGVzdE1ldGhvZD0lcz4iICUgXAorICAgICAgICAgICAgICAgKHN0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCisKKyAgICBkZWYgX2FkZFNraXAoc2VsZiwgcmVzdWx0LCByZWFzb24pOgorICAgICAgICBhZGRTa2lwID0gZ2V0YXR0cihyZXN1bHQsICdhZGRTa2lwJywgTm9uZSkKKyAgICAgICAgaWYgYWRkU2tpcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFkZFNraXAoc2VsZiwgcmVhc29uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkU2tpcCBtZXRob2QsIHNraXBzIG5vdCByZXBvcnRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCAyKQorICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKworICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0PU5vbmUpOgorICAgICAgICBvcmlnX3Jlc3VsdCA9IHJlc3VsdAorICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZGVmYXVsdFRlc3RSZXN1bHQoKQorICAgICAgICAgICAgc3RhcnRUZXN0UnVuID0gZ2V0YXR0cihyZXN1bHQsICdzdGFydFRlc3RSdW4nLCBOb25lKQorICAgICAgICAgICAgaWYgc3RhcnRUZXN0UnVuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN0YXJ0VGVzdFJ1bigpCisKKyAgICAgICAgc2VsZi5fcmVzdWx0Rm9yRG9DbGVhbnVwcyA9IHJlc3VsdAorICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHNlbGYpCisKKyAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCisgICAgICAgIGlmIChnZXRhdHRyKHNlbGYuX19jbGFzc19fLCAiX191bml0dGVzdF9za2lwX18iLCBGYWxzZSkgb3IKKyAgICAgICAgICAgIGdldGF0dHIodGVzdE1ldGhvZCwgIl9fdW5pdHRlc3Rfc2tpcF9fIiwgRmFsc2UpKToKKyAgICAgICAgICAgICMgSWYgdGhlIGNsYXNzIG9yIG1ldGhvZCB3YXMgc2tpcHBlZC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBza2lwX3doeSA9IChnZXRhdHRyKHNlbGYuX19jbGFzc19fLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZ2V0YXR0cih0ZXN0TWV0aG9kLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpKQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBza2lwX3doeSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHNlbGYpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRVcCgpCisgICAgICAgICAgICBleGNlcHQgU2tpcFRlc3QgYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc3RyKGUpKQorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RNZXRob2QoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgX0V4cGVjdGVkRmFpbHVyZSBhcyBlOgorICAgICAgICAgICAgICAgICAgICBhZGRFeHBlY3RlZEZhaWx1cmUgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZEV4cGVjdGVkRmFpbHVyZScsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGFkZEV4cGVjdGVkRmFpbHVyZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCBlLmV4Y19pbmZvKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkRXhwZWN0ZWRGYWlsdXJlIG1ldGhvZCwgcmVwb3J0aW5nIGFzIHBhc3NlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgICAgICAgICBleGNlcHQgX1VuZXhwZWN0ZWRTdWNjZXNzOgorICAgICAgICAgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IGdldGF0dHIocmVzdWx0LCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IFNraXBUZXN0IGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBzdHIoZSkpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3Ioc2VsZiwgc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZWFyRG93bigpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRmFsc2UKKworICAgICAgICAgICAgY2xlYW5VcFN1Y2Nlc3MgPSBzZWxmLmRvQ2xlYW51cHMoKQorICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgYW5kIGNsZWFuVXBTdWNjZXNzCisgICAgICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKKyAgICAgICAgICAgIGlmIG9yaWdfcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc3RvcFRlc3RSdW4gPSBnZXRhdHRyKHJlc3VsdCwgJ3N0b3BUZXN0UnVuJywgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBzdG9wVGVzdFJ1biBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc3RvcFRlc3RSdW4oKQorCisgICAgZGVmIGRvQ2xlYW51cHMoc2VsZik6CisgICAgICAgICIiIkV4ZWN1dGUgYWxsIGNsZWFudXAgZnVuY3Rpb25zLiBOb3JtYWxseSBjYWxsZWQgZm9yIHlvdSBhZnRlcgorICAgICAgICB0ZWFyRG93bi4iIiIKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5fcmVzdWx0Rm9yRG9DbGVhbnVwcworICAgICAgICBvayA9IFRydWUKKyAgICAgICAgd2hpbGUgc2VsZi5fY2xlYW51cHM6CisgICAgICAgICAgICBmdW5jdGlvbiwgYXJncywga3dhcmdzID0gc2VsZi5fY2xlYW51cHMucG9wKC0xKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9rID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3Ioc2VsZiwgc3lzLmV4Y19pbmZvKCkpCisgICAgICAgIHJldHVybiBvaworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW4oKmFyZ3MsICoqa3dkcykKKworICAgIGRlZiBkZWJ1ZyhzZWxmKToKKyAgICAgICAgIiIiUnVuIHRoZSB0ZXN0IHdpdGhvdXQgY29sbGVjdGluZyBlcnJvcnMgaW4gYSBUZXN0UmVzdWx0IiIiCisgICAgICAgIHNlbGYuc2V0VXAoKQorICAgICAgICBnZXRhdHRyKHNlbGYsIHNlbGYuX3Rlc3RNZXRob2ROYW1lKSgpCisgICAgICAgIHNlbGYudGVhckRvd24oKQorICAgICAgICB3aGlsZSBzZWxmLl9jbGVhbnVwczoKKyAgICAgICAgICAgIGZ1bmN0aW9uLCBhcmdzLCBrd2FyZ3MgPSBzZWxmLl9jbGVhbnVwcy5wb3AoLTEpCisgICAgICAgICAgICBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgc2tpcFRlc3Qoc2VsZiwgcmVhc29uKToKKyAgICAgICAgIiIiU2tpcCB0aGlzIHRlc3QuIiIiCisgICAgICAgIHJhaXNlIFNraXBUZXN0KHJlYXNvbikKKworICAgIGRlZiBmYWlsKHNlbGYsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiRmFpbCBpbW1lZGlhdGVseSwgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS4iIiIKKyAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAgIGRlZiBhc3NlcnRGYWxzZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkNoZWNrIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UuIiIiCisgICAgICAgIGlmIGV4cHI6CisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgIiVzIGlzIG5vdCBmYWxzZSIgJSBzYWZlX3JlcHIoZXhwcikpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSBleHByZXNzaW9uIGlzIHRydWUuIiIiCisgICAgICAgIGlmIG5vdCBleHByOgorICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csICIlcyBpcyBub3QgdHJ1ZSIgJSBzYWZlX3JlcHIoZXhwcikpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgZGVmIF9mb3JtYXRNZXNzYWdlKHNlbGYsIG1zZywgc3RhbmRhcmRNc2cpOgorICAgICAgICAiIiJIb25vdXIgdGhlIGxvbmdNZXNzYWdlIGF0dHJpYnV0ZSB3aGVuIGdlbmVyYXRpbmcgZmFpbHVyZSBtZXNzYWdlcy4KKyAgICAgICAgSWYgbG9uZ01lc3NhZ2UgaXMgRmFsc2UgdGhpcyBtZWFuczoKKyAgICAgICAgKiBVc2Ugb25seSBhbiBleHBsaWNpdCBtZXNzYWdlIGlmIGl0IGlzIHByb3ZpZGVkCisgICAgICAgICogT3RoZXJ3aXNlIHVzZSB0aGUgc3RhbmRhcmQgbWVzc2FnZSBmb3IgdGhlIGFzc2VydAorCisgICAgICAgIElmIGxvbmdNZXNzYWdlIGlzIFRydWU6CisgICAgICAgICogVXNlIHRoZSBzdGFuZGFyZCBtZXNzYWdlCisgICAgICAgICogSWYgYW4gZXhwbGljaXQgbWVzc2FnZSBpcyBwcm92aWRlZCwgcGx1cyAnIDogJyBhbmQgdGhlIGV4cGxpY2l0IG1lc3NhZ2UKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmxvbmdNZXNzYWdlOgorICAgICAgICAgICAgcmV0dXJuIG1zZyBvciBzdGFuZGFyZE1zZworICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1zZworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGRvbid0IHN3aXRjaCB0byAne30nIGZvcm1hdHRpbmcgaW4gUHl0aG9uIDIuWAorICAgICAgICAgICAgIyBpdCBjaGFuZ2VzIHRoZSB3YXkgdW5pY29kZSBpbnB1dCBpcyBoYW5kbGVkCisgICAgICAgICAgICByZXR1cm4gJyVzIDogJXMnICUgKHN0YW5kYXJkTXNnLCBtc2cpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gICclcyA6ICVzJyAlIChzYWZlX3JlcHIoc3RhbmRhcmRNc2cpLCBzYWZlX3JlcHIobXNnKSkKKworCisgICAgZGVmIGFzc2VydFJhaXNlcyhzZWxmLCBleGNDbGFzcywgY2FsbGFibGVPYmo9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiRmFpbCB1bmxlc3MgYW4gZXhjZXB0aW9uIG9mIGNsYXNzIGV4Y0NsYXNzIGlzIHRocm93bgorICAgICAgICAgICBieSBjYWxsYWJsZU9iaiB3aGVuIGludm9rZWQgd2l0aCBhcmd1bWVudHMgYXJncyBhbmQga2V5d29yZAorICAgICAgICAgICBhcmd1bWVudHMga3dhcmdzLiBJZiBhIGRpZmZlcmVudCB0eXBlIG9mIGV4Y2VwdGlvbiBpcworICAgICAgICAgICB0aHJvd24sIGl0IHdpbGwgbm90IGJlIGNhdWdodCwgYW5kIHRoZSB0ZXN0IGNhc2Ugd2lsbCBiZQorICAgICAgICAgICBkZWVtZWQgdG8gaGF2ZSBzdWZmZXJlZCBhbiBlcnJvciwgZXhhY3RseSBhcyBmb3IgYW4KKyAgICAgICAgICAgdW5leHBlY3RlZCBleGNlcHRpb24uCisKKyAgICAgICAgICAgSWYgY2FsbGVkIHdpdGggY2FsbGFibGVPYmogb21pdHRlZCBvciBOb25lLCB3aWxsIHJldHVybiBhCisgICAgICAgICAgIGNvbnRleHQgb2JqZWN0IHVzZWQgbGlrZSB0aGlzOjoKKworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU29tZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgICAgIGRvX3NvbWV0aGluZygpCisKKyAgICAgICAgICAgVGhlIGNvbnRleHQgbWFuYWdlciBrZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgZXhjZXB0aW9uIGFzCisgICAgICAgICAgIHRoZSAnZXhjZXB0aW9uJyBhdHRyaWJ1dGUuIFRoaXMgYWxsb3dzIHlvdSB0byBpbnNwZWN0IHRoZQorICAgICAgICAgICBleGNlcHRpb24gYWZ0ZXIgdGhlIGFzc2VydGlvbjo6CisKKyAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU29tZUV4Y2VwdGlvbikgYXMgY206CisgICAgICAgICAgICAgICAgICAgZG9fc29tZXRoaW5nKCkKKyAgICAgICAgICAgICAgIHRoZV9leGNlcHRpb24gPSBjbS5leGNlcHRpb24KKyAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlX2V4Y2VwdGlvbi5lcnJvcl9jb2RlLCAzKQorICAgICAgICAiIiIKKyAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRSYWlzZXNDb250ZXh0KGV4Y0NsYXNzLCBzZWxmKQorICAgICAgICBpZiBjYWxsYWJsZU9iaiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQKKyAgICAgICAgd2l0aCBjb250ZXh0OgorICAgICAgICAgICAgY2FsbGFibGVPYmooKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9nZXRBc3NlcnRFcXVhbGl0eUZ1bmMoc2VsZiwgZmlyc3QsIHNlY29uZCk6CisgICAgICAgICIiIkdldCBhIGRldGFpbGVkIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIHRoZSB0eXBlcyBvZiB0aGUgdHdvIGFyZ3MuCisKKyAgICAgICAgUmV0dXJuczogQSBjYWxsYWJsZSBhY2NlcHRpbmcgKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKSB0aGF0IHdpbGwKKyAgICAgICAgcmFpc2UgYSBmYWlsdXJlIGV4Y2VwdGlvbiBpZiBmaXJzdCAhPSBzZWNvbmQgd2l0aCBhIHVzZWZ1bCBodW1hbgorICAgICAgICByZWFkYWJsZSBlcnJvciBtZXNzYWdlIGZvciB0aG9zZSB0eXBlcy4KKyAgICAgICAgIiIiCisgICAgICAgICMKKyAgICAgICAgIyBOT1RFKGdyZWdvcnkucC5zbWl0aCk6IEkgY29uc2lkZXJlZCBpc2luc3RhbmNlKGZpcnN0LCB0eXBlKHNlY29uZCkpCisgICAgICAgICMgYW5kIHZpY2UgdmVyc2EuICBJIG9wdGVkIGZvciB0aGUgY29uc2VydmF0aXZlIGFwcHJvYWNoIGluIGNhc2UKKyAgICAgICAgIyBzdWJjbGFzc2VzIGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgY29tcGFyZWQgaW4gZGV0YWlsIHRvIHRoZWlyIHN1cGVyCisgICAgICAgICMgY2xhc3MgaW5zdGFuY2VzIHVzaW5nIGEgdHlwZSBlcXVhbGl0eSBmdW5jLiAgVGhpcyBtZWFucyB0ZXN0aW5nCisgICAgICAgICMgc3VidHlwZXMgd29uJ3QgYXV0b21hZ2ljYWxseSB1c2UgdGhlIGRldGFpbGVkIGNvbXBhcmlzb24uICBDYWxsZXJzCisgICAgICAgICMgc2hvdWxkIHVzZSB0aGVpciB0eXBlIHNwZWNpZmljIGFzc2VydFNwYW1FcXVhbCBtZXRob2QgdG8gY29tcGFyZQorICAgICAgICAjIHN1YmNsYXNzZXMgaWYgdGhlIGRldGFpbGVkIGNvbXBhcmlzb24gaXMgZGVzaXJlZCBhbmQgYXBwcm9wcmlhdGUuCisgICAgICAgICMgU2VlIHRoZSBkaXNjdXNzaW9uIGluIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTc4LgorICAgICAgICAjCisgICAgICAgIGlmIHR5cGUoZmlyc3QpIGlzIHR5cGUoc2Vjb25kKToKKyAgICAgICAgICAgIGFzc2VydGVyID0gc2VsZi5fdHlwZV9lcXVhbGl0eV9mdW5jcy5nZXQodHlwZShmaXJzdCkpCisgICAgICAgICAgICBpZiBhc3NlcnRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNzZXJ0ZXIKKworICAgICAgICByZXR1cm4gc2VsZi5fYmFzZUFzc2VydEVxdWFsCisKKyAgICBkZWYgX2Jhc2VBc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlRoZSBkZWZhdWx0IGFzc2VydEVxdWFsIGltcGxlbWVudGF0aW9uLCBub3QgdHlwZSBzcGVjaWZpYy4iIiIKKyAgICAgICAgaWYgbm90IGZpcnN0ID09IHNlY29uZDoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIChzYWZlX3JlcHIoZmlyc3QpLCBzYWZlX3JlcHIoc2Vjb25kKSkKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKyAgICBkZWYgYXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgorICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgdW5lcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSAnPT0nCisgICAgICAgICAgIG9wZXJhdG9yLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0aW9uX2Z1bmMgPSBzZWxmLl9nZXRBc3NlcnRFcXVhbGl0eUZ1bmMoZmlyc3QsIHNlY29uZCkKKyAgICAgICAgYXNzZXJ0aW9uX2Z1bmMoZmlyc3QsIHNlY29uZCwgbXNnPW1zZykKKworICAgIGRlZiBhc3NlcnROb3RFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBlcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSAnPT0nCisgICAgICAgICAgIG9wZXJhdG9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGZpcnN0ICE9IHNlY29uZDoKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCAnJXMgPT0gJXMnICUgKHNhZmVfcmVwcihmaXJzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCkpKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworCisgICAgZGVmIGFzc2VydEFsbW9zdEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHBsYWNlcz1Ob25lLCBtc2c9Tm9uZSwgZGVsdGE9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBvYmplY3RzIGFyZSB1bmVxdWFsIGFzIGRldGVybWluZWQgYnkgdGhlaXIKKyAgICAgICAgICAgZGlmZmVyZW5jZSByb3VuZGVkIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMKKyAgICAgICAgICAgKGRlZmF1bHQgNykgYW5kIGNvbXBhcmluZyB0byB6ZXJvLCBvciBieSBjb21wYXJpbmcgdGhhdCB0aGUKKyAgICAgICAgICAgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMgaXMgbW9yZSB0aGFuIHRoZSBnaXZlbiBkZWx0YS4KKworICAgICAgICAgICBOb3RlIHRoYXQgZGVjaW1hbCBwbGFjZXMgKGZyb20gemVybykgYXJlIHVzdWFsbHkgbm90IHRoZSBzYW1lCisgICAgICAgICAgIGFzIHNpZ25pZmljYW50IGRpZ2l0cyAobWVhc3VyZWQgZnJvbSB0aGUgbW9zdCBzaWduZmljYW50IGRpZ2l0KS4KKworICAgICAgICAgICBJZiB0aGUgdHdvIG9iamVjdHMgY29tcGFyZSBlcXVhbCB0aGVuIHRoZXkgd2lsbCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgIGNvbXBhcmUgYWxtb3N0IGVxdWFsLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZmlyc3QgPT0gc2Vjb25kOgorICAgICAgICAgICAgIyBzaG9ydGN1dAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGRlbHRhIGlzIG5vdCBOb25lIGFuZCBwbGFjZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNwZWNpZnkgZGVsdGEgb3IgcGxhY2VzIG5vdCBib3RoIikKKworICAgICAgICBpZiBkZWx0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGFicyhmaXJzdCAtIHNlY29uZCkgPD0gZGVsdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzIHdpdGhpbiAlcyBkZWx0YScgJSAoc2FmZV9yZXByKGZpcnN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihkZWx0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwbGFjZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwbGFjZXMgPSA3CisKKyAgICAgICAgICAgIGlmIHJvdW5kKGFicyhzZWNvbmQtZmlyc3QpLCBwbGFjZXMpID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzIHdpdGhpbiAlciBwbGFjZXMnICUgKHNhZmVfcmVwcihmaXJzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VzKQorICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKyAgICBkZWYgYXNzZXJ0Tm90QWxtb3N0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgcGxhY2VzPU5vbmUsIG1zZz1Ob25lLCBkZWx0YT1Ob25lKToKKyAgICAgICAgIiIiRmFpbCBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIGVxdWFsIGFzIGRldGVybWluZWQgYnkgdGhlaXIKKyAgICAgICAgICAgZGlmZmVyZW5jZSByb3VuZGVkIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMKKyAgICAgICAgICAgKGRlZmF1bHQgNykgYW5kIGNvbXBhcmluZyB0byB6ZXJvLCBvciBieSBjb21wYXJpbmcgdGhhdCB0aGUKKyAgICAgICAgICAgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMgaXMgbGVzcyB0aGFuIHRoZSBnaXZlbiBkZWx0YS4KKworICAgICAgICAgICBOb3RlIHRoYXQgZGVjaW1hbCBwbGFjZXMgKGZyb20gemVybykgYXJlIHVzdWFsbHkgbm90IHRoZSBzYW1lCisgICAgICAgICAgIGFzIHNpZ25pZmljYW50IGRpZ2l0cyAobWVhc3VyZWQgZnJvbSB0aGUgbW9zdCBzaWduZmljYW50IGRpZ2l0KS4KKworICAgICAgICAgICBPYmplY3RzIHRoYXQgYXJlIGVxdWFsIGF1dG9tYXRpY2FsbHkgZmFpbC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGRlbHRhIGlzIG5vdCBOb25lIGFuZCBwbGFjZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNwZWNpZnkgZGVsdGEgb3IgcGxhY2VzIG5vdCBib3RoIikKKyAgICAgICAgaWYgZGVsdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3QgKGZpcnN0ID09IHNlY29uZCkgYW5kIGFicyhmaXJzdCAtIHNlY29uZCkgPiBkZWx0YToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzID09ICVzIHdpdGhpbiAlcyBkZWx0YScgJSAoc2FmZV9yZXByKGZpcnN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihkZWx0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwbGFjZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwbGFjZXMgPSA3CisgICAgICAgICAgICBpZiBub3QgKGZpcnN0ID09IHNlY29uZCkgYW5kIHJvdW5kKGFicyhzZWNvbmQtZmlyc3QpLCBwbGFjZXMpICE9IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyA9PSAlcyB3aXRoaW4gJXIgcGxhY2VzJyAlIChzYWZlX3JlcHIoZmlyc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZXMpCisKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgIyBTeW5vbnltcyBmb3IgYXNzZXJ0aW9uIG1ldGhvZHMKKworICAgICMgVGhlIHBsdXJhbHMgYXJlIHVuZG9jdW1lbnRlZC4gIEtlZXAgdGhlbSB0aGF0IHdheSB0byBkaXNjb3VyYWdlIHVzZS4KKyAgICAjIERvIG5vdCBhZGQgbW9yZS4gIERvIG5vdCByZW1vdmUuCisgICAgIyBHb2luZyB0aHJvdWdoIGEgZGVwcmVjYXRpb24gY3ljbGUgb24gdGhlc2Ugd291bGQgYW5ub3kgbWFueSBwZW9wbGUuCisgICAgYXNzZXJ0RXF1YWxzID0gYXNzZXJ0RXF1YWwKKyAgICBhc3NlcnROb3RFcXVhbHMgPSBhc3NlcnROb3RFcXVhbAorICAgIGFzc2VydEFsbW9zdEVxdWFscyA9IGFzc2VydEFsbW9zdEVxdWFsCisgICAgYXNzZXJ0Tm90QWxtb3N0RXF1YWxzID0gYXNzZXJ0Tm90QWxtb3N0RXF1YWwKKyAgICBhc3NlcnRfID0gYXNzZXJ0VHJ1ZQorCisgICAgIyBUaGVzZSBmYWlsKiBhc3NlcnRpb24gbWV0aG9kIG5hbWVzIGFyZSBwZW5kaW5nIGRlcHJlY2F0aW9uIGFuZCB3aWxsCisgICAgIyBiZSBhIERlcHJlY2F0aW9uV2FybmluZyBpbiAzLjI7IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTc4CisgICAgZGVmIF9kZXByZWNhdGUob3JpZ2luYWxfZnVuYyk6CisgICAgICAgIGRlZiBkZXByZWNhdGVkX2Z1bmMoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgJ1BsZWFzZSB1c2UgezB9IGluc3RlYWQuJy5mb3JtYXQob3JpZ2luYWxfZnVuYy5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbF9mdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIGRlcHJlY2F0ZWRfZnVuYworCisgICAgZmFpbFVubGVzc0VxdWFsID0gX2RlcHJlY2F0ZShhc3NlcnRFcXVhbCkKKyAgICBmYWlsSWZFcXVhbCA9IF9kZXByZWNhdGUoYXNzZXJ0Tm90RXF1YWwpCisgICAgZmFpbFVubGVzc0FsbW9zdEVxdWFsID0gX2RlcHJlY2F0ZShhc3NlcnRBbG1vc3RFcXVhbCkKKyAgICBmYWlsSWZBbG1vc3RFcXVhbCA9IF9kZXByZWNhdGUoYXNzZXJ0Tm90QWxtb3N0RXF1YWwpCisgICAgZmFpbFVubGVzcyA9IF9kZXByZWNhdGUoYXNzZXJ0VHJ1ZSkKKyAgICBmYWlsVW5sZXNzUmFpc2VzID0gX2RlcHJlY2F0ZShhc3NlcnRSYWlzZXMpCisgICAgZmFpbElmID0gX2RlcHJlY2F0ZShhc3NlcnRGYWxzZSkKKworICAgIGRlZiBhc3NlcnRTZXF1ZW5jZUVxdWFsKHNlbGYsIHNlcTEsIHNlcTIsIG1zZz1Ob25lLCBzZXFfdHlwZT1Ob25lKToKKyAgICAgICAgIiIiQW4gZXF1YWxpdHkgYXNzZXJ0aW9uIGZvciBvcmRlcmVkIHNlcXVlbmNlcyAobGlrZSBsaXN0cyBhbmQgdHVwbGVzKS4KKworICAgICAgICBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZnVuY3Rpb24sIGEgdmFsaWQgb3JkZXJlZCBzZXF1ZW5jZSB0eXBlIGlzIG9uZQorICAgICAgICB3aGljaCBjYW4gYmUgaW5kZXhlZCwgaGFzIGEgbGVuZ3RoLCBhbmQgaGFzIGFuIGVxdWFsaXR5IG9wZXJhdG9yLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXExOiBUaGUgZmlyc3Qgc2VxdWVuY2UgdG8gY29tcGFyZS4KKyAgICAgICAgICAgIHNlcTI6IFRoZSBzZWNvbmQgc2VxdWVuY2UgdG8gY29tcGFyZS4KKyAgICAgICAgICAgIHNlcV90eXBlOiBUaGUgZXhwZWN0ZWQgZGF0YXR5cGUgb2YgdGhlIHNlcXVlbmNlcywgb3IgTm9uZSBpZiBubworICAgICAgICAgICAgICAgICAgICBkYXRhdHlwZSBzaG91bGQgYmUgZW5mb3JjZWQuCisgICAgICAgICAgICBtc2c6IE9wdGlvbmFsIG1lc3NhZ2UgdG8gdXNlIG9uIGZhaWx1cmUgaW5zdGVhZCBvZiBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZXFfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlcV90eXBlX25hbWUgPSBzZXFfdHlwZS5fX25hbWVfXworICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VxMSwgc2VxX3R5cGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbignRmlyc3Qgc2VxdWVuY2UgaXMgbm90IGEgJXM6ICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlcV90eXBlX25hbWUsIHNhZmVfcmVwcihzZXExKSkpCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZXEyLCBzZXFfdHlwZSk6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCdTZWNvbmQgc2VxdWVuY2UgaXMgbm90IGEgJXM6ICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlcV90eXBlX25hbWUsIHNhZmVfcmVwcihzZXEyKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZXFfdHlwZV9uYW1lID0gInNlcXVlbmNlIgorCisgICAgICAgIGRpZmZlcmluZyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGVuMSA9IGxlbihzZXExKQorICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICBkaWZmZXJpbmcgPSAnRmlyc3QgJXMgaGFzIG5vIGxlbmd0aC4gICAgTm9uLXNlcXVlbmNlPycgJSAoCisgICAgICAgICAgICAgICAgICAgIHNlcV90eXBlX25hbWUpCisKKyAgICAgICAgaWYgZGlmZmVyaW5nIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGVuMiA9IGxlbihzZXEyKQorICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIGRpZmZlcmluZyA9ICdTZWNvbmQgJXMgaGFzIG5vIGxlbmd0aC4gICAgTm9uLXNlcXVlbmNlPycgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXFfdHlwZV9uYW1lKQorCisgICAgICAgIGlmIGRpZmZlcmluZyBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VxMSA9PSBzZXEyOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBzZXExX3JlcHIgPSBzYWZlX3JlcHIoc2VxMSkKKyAgICAgICAgICAgIHNlcTJfcmVwciA9IHNhZmVfcmVwcihzZXEyKQorICAgICAgICAgICAgaWYgbGVuKHNlcTFfcmVwcikgPiAzMDoKKyAgICAgICAgICAgICAgICBzZXExX3JlcHIgPSBzZXExX3JlcHJbOjMwXSArICcuLi4nCisgICAgICAgICAgICBpZiBsZW4oc2VxMl9yZXByKSA+IDMwOgorICAgICAgICAgICAgICAgIHNlcTJfcmVwciA9IHNlcTJfcmVwcls6MzBdICsgJy4uLicKKyAgICAgICAgICAgIGVsZW1lbnRzID0gKHNlcV90eXBlX25hbWUuY2FwaXRhbGl6ZSgpLCBzZXExX3JlcHIsIHNlcTJfcmVwcikKKyAgICAgICAgICAgIGRpZmZlcmluZyA9ICclc3MgZGlmZmVyOiAlcyAhPSAlc1xuJyAlIGVsZW1lbnRzCisKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShtaW4obGVuMSwgbGVuMikpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaXRlbTEgPSBzZXExW2ldCisgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEluZGV4RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdcblVuYWJsZSB0byBpbmRleCBlbGVtZW50ICVkIG9mIGZpcnN0ICVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpLCBzZXFfdHlwZV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaXRlbTIgPSBzZXEyW2ldCisgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEluZGV4RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdcblVuYWJsZSB0byBpbmRleCBlbGVtZW50ICVkIG9mIHNlY29uZCAlc1xuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSwgc2VxX3R5cGVfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICBpZiBpdGVtMSAhPSBpdGVtMjoKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnXG5GaXJzdCBkaWZmZXJpbmcgZWxlbWVudCAlZDpcbiVzXG4lc1xuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSwgaXRlbTEsIGl0ZW0yKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgKGxlbjEgPT0gbGVuMiBhbmQgc2VxX3R5cGUgaXMgTm9uZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgdHlwZShzZXExKSAhPSB0eXBlKHNlcTIpKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgc2VxdWVuY2VzIGFyZSB0aGUgc2FtZSwgYnV0IGhhdmUgZGlmZmVyaW5nIHR5cGVzLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgaWYgbGVuMSA+IGxlbjI6CisgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnXG5GaXJzdCAlcyBjb250YWlucyAlZCBhZGRpdGlvbmFsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnRzLlxuJyAlIChzZXFfdHlwZV9uYW1lLCBsZW4xIC0gbGVuMikpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdGaXJzdCBleHRyYSBlbGVtZW50ICVkOlxuJXNcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZW4yLCBzZXExW2xlbjJdKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgSW5kZXhFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1VuYWJsZSB0byBpbmRleCBlbGVtZW50ICVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2YgZmlyc3QgJXNcbicgJSAobGVuMiwgc2VxX3R5cGVfbmFtZSkpCisgICAgICAgICAgICBlbGlmIGxlbjEgPCBsZW4yOgorICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1xuU2Vjb25kICVzIGNvbnRhaW5zICVkIGFkZGl0aW9uYWwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWxlbWVudHMuXG4nICUgKHNlcV90eXBlX25hbWUsIGxlbjIgLSBsZW4xKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ0ZpcnN0IGV4dHJhIGVsZW1lbnQgJWQ6XG4lc1xuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbjEsIHNlcTJbbGVuMV0pKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBJbmRleEVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnVW5hYmxlIHRvIGluZGV4IGVsZW1lbnQgJWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvZiBzZWNvbmQgJXNcbicgJSAobGVuMSwgc2VxX3R5cGVfbmFtZSkpCisgICAgICAgIHN0YW5kYXJkTXNnID0gZGlmZmVyaW5nCisgICAgICAgIGRpZmZNc2cgPSAnXG4nICsgJ1xuJy5qb2luKAorICAgICAgICAgICAgZGlmZmxpYi5uZGlmZihwcHJpbnQucGZvcm1hdChzZXExKS5zcGxpdGxpbmVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KHNlcTIpLnNwbGl0bGluZXMoKSkpCisgICAgICAgIHN0YW5kYXJkTXNnID0gc2VsZi5fdHJ1bmNhdGVNZXNzYWdlKHN0YW5kYXJkTXNnLCBkaWZmTXNnKQorICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisgICAgICAgIHNlbGYuZmFpbChtc2cpCisKKyAgICBkZWYgX3RydW5jYXRlTWVzc2FnZShzZWxmLCBtZXNzYWdlLCBkaWZmKToKKyAgICAgICAgbWF4X2RpZmYgPSBzZWxmLm1heERpZmYKKyAgICAgICAgaWYgbWF4X2RpZmYgaXMgTm9uZSBvciBsZW4oZGlmZikgPD0gbWF4X2RpZmY6CisgICAgICAgICAgICByZXR1cm4gbWVzc2FnZSArIGRpZmYKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2UgKyAoRElGRl9PTUlUVEVEICUgbGVuKGRpZmYpKQorCisgICAgZGVmIGFzc2VydExpc3RFcXVhbChzZWxmLCBsaXN0MSwgbGlzdDIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQSBsaXN0LXNwZWNpZmljIGVxdWFsaXR5IGFzc2VydGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbGlzdDE6IFRoZSBmaXJzdCBsaXN0IHRvIGNvbXBhcmUuCisgICAgICAgICAgICBsaXN0MjogVGhlIHNlY29uZCBsaXN0IHRvIGNvbXBhcmUuCisgICAgICAgICAgICBtc2c6IE9wdGlvbmFsIG1lc3NhZ2UgdG8gdXNlIG9uIGZhaWx1cmUgaW5zdGVhZCBvZiBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChsaXN0MSwgbGlzdDIsIG1zZywgc2VxX3R5cGU9bGlzdCkKKworICAgIGRlZiBhc3NlcnRUdXBsZUVxdWFsKHNlbGYsIHR1cGxlMSwgdHVwbGUyLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkEgdHVwbGUtc3BlY2lmaWMgZXF1YWxpdHkgYXNzZXJ0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0dXBsZTE6IFRoZSBmaXJzdCB0dXBsZSB0byBjb21wYXJlLgorICAgICAgICAgICAgdHVwbGUyOiBUaGUgc2Vjb25kIHR1cGxlIHRvIGNvbXBhcmUuCisgICAgICAgICAgICBtc2c6IE9wdGlvbmFsIG1lc3NhZ2UgdG8gdXNlIG9uIGZhaWx1cmUgaW5zdGVhZCBvZiBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwodHVwbGUxLCB0dXBsZTIsIG1zZywgc2VxX3R5cGU9dHVwbGUpCisKKyAgICBkZWYgYXNzZXJ0U2V0RXF1YWwoc2VsZiwgc2V0MSwgc2V0MiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJBIHNldC1zcGVjaWZpYyBlcXVhbGl0eSBhc3NlcnRpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHNldDE6IFRoZSBmaXJzdCBzZXQgdG8gY29tcGFyZS4KKyAgICAgICAgICAgIHNldDI6IFRoZSBzZWNvbmQgc2V0IHRvIGNvbXBhcmUuCisgICAgICAgICAgICBtc2c6IE9wdGlvbmFsIG1lc3NhZ2UgdG8gdXNlIG9uIGZhaWx1cmUgaW5zdGVhZCBvZiBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMuCisKKyAgICAgICAgYXNzZXJ0U2V0RXF1YWwgdXNlcyBkdWNrdHlwaW5nIHRvIHN1cHBvcnQgZGlmZmVyZW50IHR5cGVzIG9mIHNldHMsIGFuZAorICAgICAgICBpcyBvcHRpbWl6ZWQgZm9yIHNldHMgc3BlY2lmaWNhbGx5IChwYXJhbWV0ZXJzIG11c3Qgc3VwcG9ydCBhCisgICAgICAgIGRpZmZlcmVuY2UgbWV0aG9kKS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRpZmZlcmVuY2UxID0gc2V0MS5kaWZmZXJlbmNlKHNldDIpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2ludmFsaWQgdHlwZSB3aGVuIGF0dGVtcHRpbmcgc2V0IGRpZmZlcmVuY2U6ICVzJyAlIGUpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnZmlyc3QgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCBzZXQgZGlmZmVyZW5jZTogJXMnICUgZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkaWZmZXJlbmNlMiA9IHNldDIuZGlmZmVyZW5jZShzZXQxKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdpbnZhbGlkIHR5cGUgd2hlbiBhdHRlbXB0aW5nIHNldCBkaWZmZXJlbmNlOiAlcycgJSBlKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3NlY29uZCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHNldCBkaWZmZXJlbmNlOiAlcycgJSBlKQorCisgICAgICAgIGlmIG5vdCAoZGlmZmVyZW5jZTEgb3IgZGlmZmVyZW5jZTIpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBpZiBkaWZmZXJlbmNlMToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSXRlbXMgaW4gdGhlIGZpcnN0IHNldCBidXQgbm90IHRoZSBzZWNvbmQ6JykKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGRpZmZlcmVuY2UxOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChyZXByKGl0ZW0pKQorICAgICAgICBpZiBkaWZmZXJlbmNlMjoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSXRlbXMgaW4gdGhlIHNlY29uZCBzZXQgYnV0IG5vdCB0aGUgZmlyc3Q6JykKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGRpZmZlcmVuY2UyOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChyZXByKGl0ZW0pKQorCisgICAgICAgIHN0YW5kYXJkTXNnID0gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRJbihzZWxmLCBtZW1iZXIsIGNvbnRhaW5lciwgbXNnPU5vbmUpOgorICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgaW4gYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBtZW1iZXIgbm90IGluIGNvbnRhaW5lcjoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzIG5vdCBmb3VuZCBpbiAlcycgJSAoc2FmZV9yZXByKG1lbWJlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihjb250YWluZXIpKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0Tm90SW4oc2VsZiwgbWVtYmVyLCBjb250YWluZXIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSnVzdCBsaWtlIHNlbGYuYXNzZXJ0VHJ1ZShhIG5vdCBpbiBiKSwgYnV0IHdpdGggYSBuaWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG1lbWJlciBpbiBjb250YWluZXI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyB1bmV4cGVjdGVkbHkgZm91bmQgaW4gJXMnICUgKHNhZmVfcmVwcihtZW1iZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoY29udGFpbmVyKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydElzKHNlbGYsIGV4cHIxLCBleHByMiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgaXMgYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBleHByMSBpcyBub3QgZXhwcjI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBpcyBub3QgJXMnICUgKHNhZmVfcmVwcihleHByMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoZXhwcjIpKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0SXNOb3Qoc2VsZiwgZXhwcjEsIGV4cHIyLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSBpcyBub3QgYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBleHByMSBpcyBleHByMjoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJ3VuZXhwZWN0ZWRseSBpZGVudGljYWw6ICVzJyAlIChzYWZlX3JlcHIoZXhwcjEpLCkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydERpY3RFcXVhbChzZWxmLCBkMSwgZDIsIG1zZz1Ob25lKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQxLCBkaWN0LCAnRmlyc3QgYXJndW1lbnQgaXMgbm90IGEgZGljdGlvbmFyeScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkMiwgZGljdCwgJ1NlY29uZCBhcmd1bWVudCBpcyBub3QgYSBkaWN0aW9uYXJ5JykKKworICAgICAgICBpZiBkMSAhPSBkMjoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIChzYWZlX3JlcHIoZDEsIFRydWUpLCBzYWZlX3JlcHIoZDIsIFRydWUpKQorICAgICAgICAgICAgZGlmZiA9ICgnXG4nICsgJ1xuJy5qb2luKGRpZmZsaWIubmRpZmYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChkMSkuc3BsaXRsaW5lcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDIpLnNwbGl0bGluZXMoKSkpKQorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2Uoc3RhbmRhcmRNc2csIGRpZmYpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoc2VsZiwgZXhwZWN0ZWQsIGFjdHVhbCwgbXNnPU5vbmUpOgorICAgICAgICAiIiJDaGVja3Mgd2hldGhlciBhY3R1YWwgaXMgYSBzdXBlcnNldCBvZiBleHBlY3RlZC4iIiIKKyAgICAgICAgbWlzc2luZyA9IFtdCisgICAgICAgIG1pc21hdGNoZWQgPSBbXQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBleHBlY3RlZC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGtleSBub3QgaW4gYWN0dWFsOgorICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKGtleSkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgIT0gYWN0dWFsW2tleV06CisgICAgICAgICAgICAgICAgbWlzbWF0Y2hlZC5hcHBlbmQoJyVzLCBleHBlY3RlZDogJXMsIGFjdHVhbDogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2FmZV9yZXByKGtleSksIHNhZmVfcmVwcih2YWx1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihhY3R1YWxba2V5XSkpKQorCisgICAgICAgIGlmIG5vdCAobWlzc2luZyBvciBtaXNtYXRjaGVkKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHN0YW5kYXJkTXNnID0gJycKKyAgICAgICAgaWYgbWlzc2luZzoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJ01pc3Npbmc6ICVzJyAlICcsJy5qb2luKHNhZmVfcmVwcihtKSBmb3IgbSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcpCisgICAgICAgIGlmIG1pc21hdGNoZWQ6CisgICAgICAgICAgICBpZiBzdGFuZGFyZE1zZzoKKyAgICAgICAgICAgICAgICBzdGFuZGFyZE1zZyArPSAnOyAnCisgICAgICAgICAgICBzdGFuZGFyZE1zZyArPSAnTWlzbWF0Y2hlZCB2YWx1ZXM6ICVzJyAlICcsJy5qb2luKG1pc21hdGNoZWQpCisKKyAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0SXRlbXNFcXVhbChzZWxmLCBleHBlY3RlZF9zZXEsIGFjdHVhbF9zZXEsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQW4gdW5vcmRlcmVkIHNlcXVlbmNlIHNwZWNpZmljIGNvbXBhcmlzb24uIEl0IGFzc2VydHMgdGhhdAorICAgICAgICBhY3R1YWxfc2VxIGFuZCBleHBlY3RlZF9zZXEgaGF2ZSB0aGUgc2FtZSBlbGVtZW50IGNvdW50cy4KKyAgICAgICAgRXF1aXZhbGVudCB0bzo6CisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlcihpdGVyKGFjdHVhbF9zZXEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlcihpdGVyKGV4cGVjdGVkX3NlcSkpKQorCisgICAgICAgIEFzc2VydHMgdGhhdCBlYWNoIGVsZW1lbnQgaGFzIHRoZSBzYW1lIGNvdW50IGluIGJvdGggc2VxdWVuY2VzLgorICAgICAgICBFeGFtcGxlOgorICAgICAgICAgICAgLSBbMCwgMSwgMV0gYW5kIFsxLCAwLCAxXSBjb21wYXJlIGVxdWFsLgorICAgICAgICAgICAgLSBbMCwgMCwgMV0gYW5kIFswLCAxXSBjb21wYXJlIHVuZXF1YWwuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBpZiBzeXMucHkza3dhcm5pbmc6CisgICAgICAgICAgICAgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZyByYWlzZWQgZHVyaW5nIHRoZSBzb3J0aW5nCisgICAgICAgICAgICAgICAgZm9yIF9tc2cgaW4gWyIoY29kZXxkaWN0fHR5cGUpIGluZXF1YWxpdHkgY29tcGFyaXNvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHRpbl9mdW5jdGlvbl9vcl9tZXRob2Qgb3JkZXIgY29tcGFyaXNvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGFyaW5nIHVuZXF1YWwgdHlwZXMiXToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsIF9tc2csIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBjb2xsZWN0aW9ucy5Db3VudGVyKGl0ZXIoYWN0dWFsX3NlcSkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBjb2xsZWN0aW9ucy5Db3VudGVyKGl0ZXIoZXhwZWN0ZWRfc2VxKSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBVbnNvcnRhYmxlIGl0ZW1zIChleGFtcGxlOiBzZXQoKSwgY29tcGxleCgpLCAuLi4pCisgICAgICAgICAgICAgICAgYWN0dWFsID0gbGlzdChhY3R1YWxfc2VxKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbGlzdChleHBlY3RlZF9zZXEpCisgICAgICAgICAgICAgICAgbWlzc2luZywgdW5leHBlY3RlZCA9IHVub3JkZXJhYmxlX2xpc3RfZGlmZmVyZW5jZShleHBlY3RlZCwgYWN0dWFsKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBhY3R1YWwgPT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIG1pc3NpbmcgPSBsaXN0KGV4cGVjdGVkIC0gYWN0dWFsKQorICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWQgPSBsaXN0KGFjdHVhbCAtIGV4cGVjdGVkKQorCisgICAgICAgIGVycm9ycyA9IFtdCisgICAgICAgIGlmIG1pc3Npbmc6CisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCdFeHBlY3RlZCwgYnV0IG1pc3Npbmc6XG4gICAgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihtaXNzaW5nKSkKKyAgICAgICAgaWYgdW5leHBlY3RlZDoKKyAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoJ1VuZXhwZWN0ZWQsIGJ1dCBwcmVzZW50OlxuICAgICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIodW5leHBlY3RlZCkpCisgICAgICAgIGlmIGVycm9yczoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJ1xuJy5qb2luKGVycm9ycykKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydE11bHRpTGluZUVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQXNzZXJ0IHRoYXQgdHdvIG11bHRpLWxpbmUgc3RyaW5ncyBhcmUgZXF1YWwuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaXJzdCwgYmFzZXN0cmluZywKKyAgICAgICAgICAgICAgICAnRmlyc3QgYXJndW1lbnQgaXMgbm90IGEgc3RyaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlY29uZCwgYmFzZXN0cmluZywKKyAgICAgICAgICAgICAgICAnU2Vjb25kIGFyZ3VtZW50IGlzIG5vdCBhIHN0cmluZycpCisKKyAgICAgICAgaWYgZmlyc3QgIT0gc2Vjb25kOgorICAgICAgICAgICAgZmlyc3RsaW5lcyA9IGZpcnN0LnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgIHNlY29uZGxpbmVzID0gc2Vjb25kLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgIGlmIGxlbihmaXJzdGxpbmVzKSA9PSAxIGFuZCBmaXJzdC5zdHJpcCgnXHJcbicpID09IGZpcnN0OgorICAgICAgICAgICAgICAgIGZpcnN0bGluZXMgPSBbZmlyc3QgKyAnXG4nXQorICAgICAgICAgICAgICAgIHNlY29uZGxpbmVzID0gW3NlY29uZCArICdcbiddCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0LCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoc2Vjb25kLCBUcnVlKSkKKyAgICAgICAgICAgIGRpZmYgPSAnXG4nICsgJycuam9pbihkaWZmbGliLm5kaWZmKGZpcnN0bGluZXMsIHNlY29uZGxpbmVzKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gc2VsZi5fdHJ1bmNhdGVNZXNzYWdlKHN0YW5kYXJkTXNnLCBkaWZmKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0TGVzcyhzZWxmLCBhLCBiLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSA8IGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgbm90IGEgPCBiOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgbm90IGxlc3MgdGhhbiAlcycgJSAoc2FmZV9yZXByKGEpLCBzYWZlX3JlcHIoYikpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRMZXNzRXF1YWwoc2VsZiwgYSwgYiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgPD0gYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBub3QgYSA8PSBiOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycgJSAoc2FmZV9yZXByKGEpLCBzYWZlX3JlcHIoYikpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRHcmVhdGVyKHNlbGYsIGEsIGIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSnVzdCBsaWtlIHNlbGYuYXNzZXJ0VHJ1ZShhID4gYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBub3QgYSA+IGI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBub3QgZ3JlYXRlciB0aGFuICVzJyAlIChzYWZlX3JlcHIoYSksIHNhZmVfcmVwcihiKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydEdyZWF0ZXJFcXVhbChzZWxmLCBhLCBiLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSA+PSBiKSwgYnV0IHdpdGggYSBuaWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG5vdCBhID49IGI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJyAlIChzYWZlX3JlcHIoYSksIHNhZmVfcmVwcihiKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydElzTm9uZShzZWxmLCBvYmosIG1zZz1Ob25lKToKKyAgICAgICAgIiIiU2FtZSBhcyBzZWxmLmFzc2VydFRydWUob2JqIGlzIE5vbmUpLCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBvYmogaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBpcyBub3QgTm9uZScgJSAoc2FmZV9yZXByKG9iaiksKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0SXNOb3ROb25lKHNlbGYsIG9iaiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJJbmNsdWRlZCBmb3Igc3ltbWV0cnkgd2l0aCBhc3NlcnRJc05vbmUuIiIiCisgICAgICAgIGlmIG9iaiBpcyBOb25lOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAndW5leHBlY3RlZGx5IE5vbmUnCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRJc0luc3RhbmNlKHNlbGYsIG9iaiwgY2xzLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlNhbWUgYXMgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob2JqLCBjbHMpKSwgd2l0aCBhIG5pY2VyCisgICAgICAgIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob2JqLCBjbHMpOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgaXMgbm90IGFuIGluc3RhbmNlIG9mICVyJyAlIChzYWZlX3JlcHIob2JqKSwgY2xzKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmLCBvYmosIGNscywgbXNnPU5vbmUpOgorICAgICAgICAiIiJJbmNsdWRlZCBmb3Igc3ltbWV0cnkgd2l0aCBhc3NlcnRJc0luc3RhbmNlLiIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgY2xzKToKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzIGlzIGFuIGluc3RhbmNlIG9mICVyJyAlIChzYWZlX3JlcHIob2JqKSwgY2xzKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0UmFpc2VzUmVnZXhwKHNlbGYsIGV4cGVjdGVkX2V4Y2VwdGlvbiwgZXhwZWN0ZWRfcmVnZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGFibGVfb2JqPU5vbmUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkFzc2VydHMgdGhhdCB0aGUgbWVzc2FnZSBpbiBhIHJhaXNlZCBleGNlcHRpb24gbWF0Y2hlcyBhIHJlZ2V4cC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZXhwZWN0ZWRfZXhjZXB0aW9uOiBFeGNlcHRpb24gY2xhc3MgZXhwZWN0ZWQgdG8gYmUgcmFpc2VkLgorICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXhwOiBSZWdleHAgKHJlIHBhdHRlcm4gb2JqZWN0IG9yIHN0cmluZykgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgZm91bmQgaW4gZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgICAgIGNhbGxhYmxlX29iajogRnVuY3Rpb24gdG8gYmUgY2FsbGVkLgorICAgICAgICAgICAgYXJnczogRXh0cmEgYXJncy4KKyAgICAgICAgICAgIGt3YXJnczogRXh0cmEga3dhcmdzLgorICAgICAgICAiIiIKKyAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRSYWlzZXNDb250ZXh0KGV4cGVjdGVkX2V4Y2VwdGlvbiwgc2VsZiwgZXhwZWN0ZWRfcmVnZXhwKQorICAgICAgICBpZiBjYWxsYWJsZV9vYmogaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0CisgICAgICAgIHdpdGggY29udGV4dDoKKyAgICAgICAgICAgIGNhbGxhYmxlX29iaigqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgYXNzZXJ0UmVnZXhwTWF0Y2hlcyhzZWxmLCB0ZXh0LCBleHBlY3RlZF9yZWdleHAsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiRmFpbCB0aGUgdGVzdCB1bmxlc3MgdGhlIHRleHQgbWF0Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uLiIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkX3JlZ2V4cCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBleHBlY3RlZF9yZWdleHAgPSByZS5jb21waWxlKGV4cGVjdGVkX3JlZ2V4cCkKKyAgICAgICAgaWYgbm90IGV4cGVjdGVkX3JlZ2V4cC5zZWFyY2godGV4dCk6CisgICAgICAgICAgICBtc2cgPSBtc2cgb3IgIlJlZ2V4cCBkaWRuJ3QgbWF0Y2giCisgICAgICAgICAgICBtc2cgPSAnJXM6ICVyIG5vdCBmb3VuZCBpbiAlcicgJSAobXNnLCBleHBlY3RlZF9yZWdleHAucGF0dGVybiwgdGV4dCkKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKyAgICBkZWYgYXNzZXJ0Tm90UmVnZXhwTWF0Y2hlcyhzZWxmLCB0ZXh0LCB1bmV4cGVjdGVkX3JlZ2V4cCwgbXNnPU5vbmUpOgorICAgICAgICAiIiJGYWlsIHRoZSB0ZXN0IGlmIHRoZSB0ZXh0IG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4iIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh1bmV4cGVjdGVkX3JlZ2V4cCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICB1bmV4cGVjdGVkX3JlZ2V4cCA9IHJlLmNvbXBpbGUodW5leHBlY3RlZF9yZWdleHApCisgICAgICAgIG1hdGNoID0gdW5leHBlY3RlZF9yZWdleHAuc2VhcmNoKHRleHQpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgbXNnID0gbXNnIG9yICJSZWdleHAgbWF0Y2hlZCIKKyAgICAgICAgICAgIG1zZyA9ICclczogJXIgbWF0Y2hlcyAlciBpbiAlcicgJSAobXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0W21hdGNoLnN0YXJ0KCk6bWF0Y2guZW5kKCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX3JlZ2V4cC5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0KQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworCitjbGFzcyBGdW5jdGlvblRlc3RDYXNlKFRlc3RDYXNlKToKKyAgICAiIiJBIHRlc3QgY2FzZSB0aGF0IHdyYXBzIGEgdGVzdCBmdW5jdGlvbi4KKworICAgIFRoaXMgaXMgdXNlZnVsIGZvciBzbGlwcGluZyBwcmUtZXhpc3RpbmcgdGVzdCBmdW5jdGlvbnMgaW50byB0aGUKKyAgICB1bml0dGVzdCBmcmFtZXdvcmsuIE9wdGlvbmFsbHksIHNldC11cCBhbmQgdGlkeS11cCBmdW5jdGlvbnMgY2FuIGJlCisgICAgc3VwcGxpZWQuIEFzIHdpdGggVGVzdENhc2UsIHRoZSB0aWR5LXVwICgndGVhckRvd24nKSBmdW5jdGlvbiB3aWxsCisgICAgYWx3YXlzIGJlIGNhbGxlZCBpZiB0aGUgc2V0LXVwICgnc2V0VXAnKSBmdW5jdGlvbiByYW4gc3VjY2Vzc2Z1bGx5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RGdW5jLCBzZXRVcD1Ob25lLCB0ZWFyRG93bj1Ob25lLCBkZXNjcmlwdGlvbj1Ob25lKToKKyAgICAgICAgc3VwZXIoRnVuY3Rpb25UZXN0Q2FzZSwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLl9zZXRVcEZ1bmMgPSBzZXRVcAorICAgICAgICBzZWxmLl90ZWFyRG93bkZ1bmMgPSB0ZWFyRG93bgorICAgICAgICBzZWxmLl90ZXN0RnVuYyA9IHRlc3RGdW5jCisgICAgICAgIHNlbGYuX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fc2V0VXBGdW5jIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2V0VXBGdW5jKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fdGVhckRvd25GdW5jIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fdGVhckRvd25GdW5jKCkKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0RnVuYygpCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0RnVuYy5fX25hbWVfXworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICByZXR1cm4gc2VsZi5fc2V0VXBGdW5jID09IG90aGVyLl9zZXRVcEZ1bmMgYW5kIFwKKyAgICAgICAgICAgICAgIHNlbGYuX3RlYXJEb3duRnVuYyA9PSBvdGhlci5fdGVhckRvd25GdW5jIGFuZCBcCisgICAgICAgICAgICAgICBzZWxmLl90ZXN0RnVuYyA9PSBvdGhlci5fdGVzdEZ1bmMgYW5kIFwKKyAgICAgICAgICAgICAgIHNlbGYuX2Rlc2NyaXB0aW9uID09IG90aGVyLl9kZXNjcmlwdGlvbgorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5fc2V0VXBGdW5jLCBzZWxmLl90ZWFyRG93bkZ1bmMsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0RnVuYywgc2VsZi5fZGVzY3JpcHRpb24pKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMgKCVzKSIgJSAoc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RGdW5jLl9fbmFtZV9fKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcyB0ZWM9JXM+IiAlIChzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdEZ1bmMpCisKKyAgICBkZWYgc2hvcnREZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZGVzY3JpcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVzY3JpcHRpb24KKyAgICAgICAgZG9jID0gc2VsZi5fdGVzdEZ1bmMuX19kb2NfXworICAgICAgICByZXR1cm4gZG9jIGFuZCBkb2Muc3BsaXQoIlxuIilbMF0uc3RyaXAoKSBvciBOb25lCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5IGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODhmNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQpAQCAtMCwwICsxLDMxNCBAQAorIiIiTG9hZGluZyB1bml0dGVzdHMuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdHlwZXMKKworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGNtcF90b19rZXkgYXMgX0NtcFRvS2V5Citmcm9tIGZubWF0Y2ggaW1wb3J0IGZubWF0Y2gKKworZnJvbSAuIGltcG9ydCBjYXNlLCBzdWl0ZQorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCisjIHdoYXQgYWJvdXQgLnB5YyBvciAucHlvIChldGMpCisjIHdlIHdvdWxkIG5lZWQgdG8gYXZvaWQgbG9hZGluZyB0aGUgc2FtZSB0ZXN0cyBtdWx0aXBsZSB0aW1lcworIyBmcm9tICcucHknLCAnLnB5YycgKmFuZCogJy5weW8nCitWQUxJRF9NT0RVTEVfTkFNRSA9IHJlLmNvbXBpbGUocidbX2Etel1cdypcLnB5JCcsIHJlLklHTk9SRUNBU0UpCisKKworZGVmIF9tYWtlX2ZhaWxlZF9pbXBvcnRfdGVzdChuYW1lLCBzdWl0ZUNsYXNzKToKKyAgICBtZXNzYWdlID0gJ0ZhaWxlZCB0byBpbXBvcnQgdGVzdCBtb2R1bGU6ICVzXG4lcycgJSAobmFtZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICByZXR1cm4gX21ha2VfZmFpbGVkX3Rlc3QoJ01vZHVsZUltcG9ydEZhaWx1cmUnLCBuYW1lLCBJbXBvcnRFcnJvcihtZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVDbGFzcykKKworZGVmIF9tYWtlX2ZhaWxlZF9sb2FkX3Rlc3RzKG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcyk6CisgICAgcmV0dXJuIF9tYWtlX2ZhaWxlZF90ZXN0KCdMb2FkVGVzdHNGYWlsdXJlJywgbmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzKQorCitkZWYgX21ha2VfZmFpbGVkX3Rlc3QoY2xhc3NuYW1lLCBtZXRob2RuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpOgorICAgIGRlZiB0ZXN0RmFpbHVyZShzZWxmKToKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9uCisgICAgYXR0cnMgPSB7bWV0aG9kbmFtZTogdGVzdEZhaWx1cmV9CisgICAgVGVzdENsYXNzID0gdHlwZShjbGFzc25hbWUsIChjYXNlLlRlc3RDYXNlLCksIGF0dHJzKQorICAgIHJldHVybiBzdWl0ZUNsYXNzKChUZXN0Q2xhc3MobWV0aG9kbmFtZSksKSkKKworCitjbGFzcyBUZXN0TG9hZGVyKG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0ZXN0cyBhY2NvcmRpbmcgdG8gdmFyaW91cyBjcml0ZXJpYQorICAgIGFuZCByZXR1cm5pbmcgdGhlbSB3cmFwcGVkIGluIGEgVGVzdFN1aXRlCisgICAgIiIiCisgICAgdGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JworICAgIHNvcnRUZXN0TWV0aG9kc1VzaW5nID0gY21wCisgICAgc3VpdGVDbGFzcyA9IHN1aXRlLlRlc3RTdWl0ZQorICAgIF90b3BfbGV2ZWxfZGlyID0gTm9uZQorCisgICAgZGVmIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmLCB0ZXN0Q2FzZUNsYXNzKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0ZXN0Q2FzZUNsYXNzIiIiCisgICAgICAgIGlmIGlzc3ViY2xhc3ModGVzdENhc2VDbGFzcywgc3VpdGUuVGVzdFN1aXRlKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdCBjYXNlcyBzaG91bGQgbm90IGJlIGRlcml2ZWQgZnJvbSBUZXN0U3VpdGUuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgTWF5YmUgeW91IG1lYW50IHRvIGRlcml2ZSBmcm9tIFRlc3RDYXNlPyIpCisgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBzZWxmLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKKyAgICAgICAgaWYgbm90IHRlc3RDYXNlTmFtZXMgYW5kIGhhc2F0dHIodGVzdENhc2VDbGFzcywgJ3J1blRlc3QnKToKKyAgICAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBbJ3J1blRlc3QnXQorICAgICAgICBsb2FkZWRfc3VpdGUgPSBzZWxmLnN1aXRlQ2xhc3MobWFwKHRlc3RDYXNlQ2xhc3MsIHRlc3RDYXNlTmFtZXMpKQorICAgICAgICByZXR1cm4gbG9hZGVkX3N1aXRlCisKKyAgICBkZWYgbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmLCBtb2R1bGUsIHVzZV9sb2FkX3Rlc3RzPVRydWUpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBnaXZlbiBtb2R1bGUiIiIKKyAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIobW9kdWxlKToKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIobW9kdWxlLCBuYW1lKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGUpIGFuZCBpc3N1YmNsYXNzKG9iaiwgY2FzZS5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgdGVzdHMuYXBwZW5kKHNlbGYubG9hZFRlc3RzRnJvbVRlc3RDYXNlKG9iaikpCisKKyAgICAgICAgbG9hZF90ZXN0cyA9IGdldGF0dHIobW9kdWxlLCAnbG9hZF90ZXN0cycsIE5vbmUpCisgICAgICAgIHRlc3RzID0gc2VsZi5zdWl0ZUNsYXNzKHRlc3RzKQorICAgICAgICBpZiB1c2VfbG9hZF90ZXN0cyBhbmQgbG9hZF90ZXN0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF90ZXN0cyhzZWxmLCB0ZXN0cywgTm9uZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9tYWtlX2ZhaWxlZF9sb2FkX3Rlc3RzKG1vZHVsZS5fX25hbWVfXywgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdWl0ZUNsYXNzKQorICAgICAgICByZXR1cm4gdGVzdHMKKworICAgIGRlZiBsb2FkVGVzdHNGcm9tTmFtZShzZWxmLCBuYW1lLCBtb2R1bGU9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBnaXZlbiBhIHN0cmluZyBzcGVjaWZpZXIuCisKKyAgICAgICAgVGhlIG5hbWUgbWF5IHJlc29sdmUgZWl0aGVyIHRvIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYQorICAgICAgICB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoCisgICAgICAgIHJldHVybnMgYSBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuCisKKyAgICAgICAgVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIHRoZSBuYW1lcyByZWxhdGl2ZSB0byBhIGdpdmVuIG1vZHVsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcGFydHNfY29weSA9IHBhcnRzWzpdCisgICAgICAgICAgICB3aGlsZSBwYXJ0c19jb3B5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXygnLicuam9pbihwYXJ0c19jb3B5KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGRlbCBwYXJ0c19jb3B5Wy0xXQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGFydHNfY29weToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBwYXJ0cyA9IHBhcnRzWzE6XQorICAgICAgICBvYmogPSBtb2R1bGUKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICBwYXJlbnQsIG9iaiA9IG9iaiwgZ2V0YXR0cihvYmosIHBhcnQpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZFRlc3RzRnJvbU1vZHVsZShvYmopCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHR5cGUpIGFuZCBpc3N1YmNsYXNzKG9iaiwgY2FzZS5UZXN0Q2FzZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2Uob2JqKQorICAgICAgICBlbGlmIChpc2luc3RhbmNlKG9iaiwgdHlwZXMuVW5ib3VuZE1ldGhvZFR5cGUpIGFuZAorICAgICAgICAgICAgICBpc2luc3RhbmNlKHBhcmVudCwgdHlwZSkgYW5kCisgICAgICAgICAgICAgIGlzc3ViY2xhc3MocGFyZW50LCBjYXNlLlRlc3RDYXNlKSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKFtwYXJlbnQob2JqLl9fbmFtZV9fKV0pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHN1aXRlLlRlc3RTdWl0ZSk6CisgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgIGVsaWYgaGFzYXR0cihvYmosICdfX2NhbGxfXycpOgorICAgICAgICAgICAgdGVzdCA9IG9iaigpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3QsIHN1aXRlLlRlc3RTdWl0ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3QKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0ZXN0LCBjYXNlLlRlc3RDYXNlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKFt0ZXN0XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYWxsaW5nICVzIHJldHVybmVkICVzLCBub3QgYSB0ZXN0IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmosIHRlc3QpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBtYWtlIHRlc3QgZnJvbTogJXMiICUgb2JqKQorCisgICAgZGVmIGxvYWRUZXN0c0Zyb21OYW1lcyhzZWxmLCBuYW1lcywgbW9kdWxlPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgZm91bmQgdXNpbmcgdGhlIGdpdmVuIHNlcXVlbmNlCisgICAgICAgIG9mIHN0cmluZyBzcGVjaWZpZXJzLiBTZWUgJ2xvYWRUZXN0c0Zyb21OYW1lKCknLgorICAgICAgICAiIiIKKyAgICAgICAgc3VpdGVzID0gW3NlbGYubG9hZFRlc3RzRnJvbU5hbWUobmFtZSwgbW9kdWxlKSBmb3IgbmFtZSBpbiBuYW1lc10KKyAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcyhzdWl0ZXMpCisKKyAgICBkZWYgZ2V0VGVzdENhc2VOYW1lcyhzZWxmLCB0ZXN0Q2FzZUNsYXNzKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcworICAgICAgICAiIiIKKyAgICAgICAgZGVmIGlzVGVzdE1ldGhvZChhdHRybmFtZSwgdGVzdENhc2VDbGFzcz10ZXN0Q2FzZUNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1zZWxmLnRlc3RNZXRob2RQcmVmaXgpOgorICAgICAgICAgICAgcmV0dXJuIGF0dHJuYW1lLnN0YXJ0c3dpdGgocHJlZml4KSBhbmQgXAorICAgICAgICAgICAgICAgIGhhc2F0dHIoZ2V0YXR0cih0ZXN0Q2FzZUNsYXNzLCBhdHRybmFtZSksICdfX2NhbGxfXycpCisgICAgICAgIHRlc3RGbk5hbWVzID0gZmlsdGVyKGlzVGVzdE1ldGhvZCwgZGlyKHRlc3RDYXNlQ2xhc3MpKQorICAgICAgICBpZiBzZWxmLnNvcnRUZXN0TWV0aG9kc1VzaW5nOgorICAgICAgICAgICAgdGVzdEZuTmFtZXMuc29ydChrZXk9X0NtcFRvS2V5KHNlbGYuc29ydFRlc3RNZXRob2RzVXNpbmcpKQorICAgICAgICByZXR1cm4gdGVzdEZuTmFtZXMKKworICAgIGRlZiBkaXNjb3ZlcihzZWxmLCBzdGFydF9kaXIsIHBhdHRlcm49J3Rlc3QqLnB5JywgdG9wX2xldmVsX2Rpcj1Ob25lKToKKyAgICAgICAgIiIiRmluZCBhbmQgcmV0dXJuIGFsbCB0ZXN0IG1vZHVsZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHN0YXJ0CisgICAgICAgIGRpcmVjdG9yeSwgcmVjdXJzaW5nIGludG8gc3ViZGlyZWN0b3JpZXMgdG8gZmluZCB0aGVtLiBPbmx5IHRlc3QgZmlsZXMKKyAgICAgICAgdGhhdCBtYXRjaCB0aGUgcGF0dGVybiB3aWxsIGJlIGxvYWRlZC4gKFVzaW5nIHNoZWxsIHN0eWxlIHBhdHRlcm4KKyAgICAgICAgbWF0Y2hpbmcuKQorCisgICAgICAgIEFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcCBsZXZlbCBvZiB0aGUgcHJvamVjdC4KKyAgICAgICAgSWYgdGhlIHN0YXJ0IGRpcmVjdG9yeSBpcyBub3QgdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkgdGhlbiB0aGUgdG9wCisgICAgICAgIGxldmVsIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCBzZXBhcmF0ZWx5LgorCisgICAgICAgIElmIGEgdGVzdCBwYWNrYWdlIG5hbWUgKGRpcmVjdG9yeSB3aXRoICdfX2luaXRfXy5weScpIG1hdGNoZXMgdGhlCisgICAgICAgIHBhdHRlcm4gdGhlbiB0aGUgcGFja2FnZSB3aWxsIGJlIGNoZWNrZWQgZm9yIGEgJ2xvYWRfdGVzdHMnIGZ1bmN0aW9uLiBJZgorICAgICAgICB0aGlzIGV4aXN0cyB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggbG9hZGVyLCB0ZXN0cywgcGF0dGVybi4KKworICAgICAgICBJZiBsb2FkX3Rlc3RzIGV4aXN0cyB0aGVuIGRpc2NvdmVyeSBkb2VzICAqbm90KiByZWN1cnNlIGludG8gdGhlIHBhY2thZ2UsCisgICAgICAgIGxvYWRfdGVzdHMgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgYWxsIHRlc3RzIGluIHRoZSBwYWNrYWdlLgorCisgICAgICAgIFRoZSBwYXR0ZXJuIGlzIGRlbGliZXJhdGVseSBub3Qgc3RvcmVkIGFzIGEgbG9hZGVyIGF0dHJpYnV0ZSBzbyB0aGF0CisgICAgICAgIHBhY2thZ2VzIGNhbiBjb250aW51ZSBkaXNjb3ZlcnkgdGhlbXNlbHZlcy4gdG9wX2xldmVsX2RpciBpcyBzdG9yZWQgc28KKyAgICAgICAgbG9hZF90ZXN0cyBkb2VzIG5vdCBuZWVkIHRvIHBhc3MgdGhpcyBhcmd1bWVudCBpbiB0byBsb2FkZXIuZGlzY292ZXIoKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNldF9pbXBsaWNpdF90b3AgPSBGYWxzZQorICAgICAgICBpZiB0b3BfbGV2ZWxfZGlyIGlzIE5vbmUgYW5kIHNlbGYuX3RvcF9sZXZlbF9kaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG1ha2UgdG9wX2xldmVsX2RpciBvcHRpb25hbCBpZiBjYWxsZWQgZnJvbSBsb2FkX3Rlc3RzIGluIGEgcGFja2FnZQorICAgICAgICAgICAgdG9wX2xldmVsX2RpciA9IHNlbGYuX3RvcF9sZXZlbF9kaXIKKyAgICAgICAgZWxpZiB0b3BfbGV2ZWxfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBzZXRfaW1wbGljaXRfdG9wID0gVHJ1ZQorICAgICAgICAgICAgdG9wX2xldmVsX2RpciA9IHN0YXJ0X2RpcgorCisgICAgICAgIHRvcF9sZXZlbF9kaXIgPSBvcy5wYXRoLmFic3BhdGgodG9wX2xldmVsX2RpcikKKworICAgICAgICBpZiBub3QgdG9wX2xldmVsX2RpciBpbiBzeXMucGF0aDoKKyAgICAgICAgICAgICMgYWxsIHRlc3QgbW9kdWxlcyBtdXN0IGJlIGltcG9ydGFibGUgZnJvbSB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeQorICAgICAgICAgICAgIyBzaG91bGQgd2UgKnVuY29uZGl0aW9uYWxseSogcHV0IHRoZSBzdGFydCBkaXJlY3RvcnkgaW4gZmlyc3QKKyAgICAgICAgICAgICMgaW4gc3lzLnBhdGggdG8gbWluaW1pc2UgbGlrZWxpaG9vZCBvZiBjb25mbGljdHMgYmV0d2VlbiBpbnN0YWxsZWQKKyAgICAgICAgICAgICMgbW9kdWxlcyBhbmQgZGV2ZWxvcG1lbnQgdmVyc2lvbnM/CisgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgdG9wX2xldmVsX2RpcikKKyAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbF9kaXIKKworICAgICAgICBpc19ub3RfaW1wb3J0YWJsZSA9IEZhbHNlCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIob3MucGF0aC5hYnNwYXRoKHN0YXJ0X2RpcikpOgorICAgICAgICAgICAgc3RhcnRfZGlyID0gb3MucGF0aC5hYnNwYXRoKHN0YXJ0X2RpcikKKyAgICAgICAgICAgIGlmIHN0YXJ0X2RpciAhPSB0b3BfbGV2ZWxfZGlyOgorICAgICAgICAgICAgICAgIGlzX25vdF9pbXBvcnRhYmxlID0gbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzdGFydF9kaXIsICdfX2luaXRfXy5weScpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBzdXBwb3J0IGZvciBkaXNjb3ZlcnkgZnJvbSBkb3R0ZWQgbW9kdWxlIG5hbWVzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhzdGFydF9kaXIpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgaXNfbm90X2ltcG9ydGFibGUgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBzeXMubW9kdWxlc1tzdGFydF9kaXJdCisgICAgICAgICAgICAgICAgdG9wX3BhcnQgPSBzdGFydF9kaXIuc3BsaXQoJy4nKVswXQorICAgICAgICAgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoKHRoZV9tb2R1bGUuX19maWxlX18pKSkKKyAgICAgICAgICAgICAgICBpZiBzZXRfaW1wbGljaXRfdG9wOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gc2VsZi5fZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZSh0b3BfcGFydCkKKyAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCisKKyAgICAgICAgaWYgaXNfbm90X2ltcG9ydGFibGU6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignU3RhcnQgZGlyZWN0b3J5IGlzIG5vdCBpbXBvcnRhYmxlOiAlcicgJSBzdGFydF9kaXIpCisKKyAgICAgICAgdGVzdHMgPSBsaXN0KHNlbGYuX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcyh0ZXN0cykKKworICAgIGRlZiBfZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZShzZWxmLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQorICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmFic3BhdGgobW9kdWxlLl9fZmlsZV9fKQorCisgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUoZnVsbF9wYXRoKS5sb3dlcigpLnN0YXJ0c3dpdGgoJ19faW5pdF9fLnB5Jyk6CisgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShmdWxsX3BhdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBoZXJlIHdlIGhhdmUgYmVlbiBnaXZlbiBhIG1vZHVsZSByYXRoZXIgdGhhbiBhIHBhY2thZ2UgLSBzbworICAgICAgICAgICAgIyBhbGwgd2UgY2FuIGRvIGlzIHNlYXJjaCB0aGUgKnNhbWUqIGRpcmVjdG9yeSB0aGUgbW9kdWxlIGlzIGluCisgICAgICAgICAgICAjIHNob3VsZCBhbiBleGNlcHRpb24gYmUgcmFpc2VkIGluc3RlYWQKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoZnVsbF9wYXRoKQorCisgICAgZGVmIF9nZXRfbmFtZV9mcm9tX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGgubm9ybXBhdGgocGF0aCkpWzBdCisKKyAgICAgICAgX3JlbHBhdGggPSBvcy5wYXRoLnJlbHBhdGgocGF0aCwgc2VsZi5fdG9wX2xldmVsX2RpcikKKyAgICAgICAgYXNzZXJ0IG5vdCBvcy5wYXRoLmlzYWJzKF9yZWxwYXRoKSwgIlBhdGggbXVzdCBiZSB3aXRoaW4gdGhlIHByb2plY3QiCisgICAgICAgIGFzc2VydCBub3QgX3JlbHBhdGguc3RhcnRzd2l0aCgnLi4nKSwgIlBhdGggbXVzdCBiZSB3aXRoaW4gdGhlIHByb2plY3QiCisKKyAgICAgICAgbmFtZSA9IF9yZWxwYXRoLnJlcGxhY2Uob3MucGF0aC5zZXAsICcuJykKKyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIGRlZiBfZ2V0X21vZHVsZV9mcm9tX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIF9faW1wb3J0X18obmFtZSkKKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCisKKyAgICBkZWYgX21hdGNoX3BhdGgoc2VsZiwgcGF0aCwgZnVsbF9wYXRoLCBwYXR0ZXJuKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byB1c2UgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgc3RyYXRlZ3kKKyAgICAgICAgcmV0dXJuIGZubWF0Y2gocGF0aCwgcGF0dGVybikKKworICAgIGRlZiBfZmluZF90ZXN0cyhzZWxmLCBzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgICAgICAiIiJVc2VkIGJ5IGRpc2NvdmVyeS4gWWllbGRzIHRlc3Qgc3VpdGVzIGl0IGxvYWRzLiIiIgorICAgICAgICBwYXRocyA9IG9zLmxpc3RkaXIoc3RhcnRfZGlyKQorCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHN0YXJ0X2RpciwgcGF0aCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgaWYgbm90IFZBTElEX01PRFVMRV9OQU1FLm1hdGNoKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAjIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVycyBvbmx5CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX21hdGNoX3BhdGgocGF0aCwgZnVsbF9wYXRoLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIGlmIHRoZSB0ZXN0IGZpbGUgbWF0Y2hlcywgbG9hZCBpdAorICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLl9nZXRfbmFtZV9mcm9tX3BhdGgoZnVsbF9wYXRoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fZ2V0X21vZHVsZV9mcm9tX25hbWUobmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX2ZhaWxlZF9pbXBvcnRfdGVzdChuYW1lLCBzZWxmLnN1aXRlQ2xhc3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbW9kX2ZpbGUgPSBvcy5wYXRoLmFic3BhdGgoZ2V0YXR0cihtb2R1bGUsICdfX2ZpbGVfXycsIGZ1bGxfcGF0aCkpCisgICAgICAgICAgICAgICAgICAgIHJlYWxwYXRoID0gb3MucGF0aC5zcGxpdGV4dChtb2RfZmlsZSlbMF0KKyAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGhfbm9leHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZ1bGxfcGF0aClbMF0KKyAgICAgICAgICAgICAgICAgICAgaWYgcmVhbHBhdGgubG93ZXIoKSAhPSBmdWxscGF0aF9ub2V4dC5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2RpciA9IG9zLnBhdGguZGlybmFtZShyZWFscGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGZ1bGxfcGF0aCkpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoZnVsbF9wYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gKCIlciBtb2R1bGUgaW5jb3JyZWN0bHkgaW1wb3J0ZWQgZnJvbSAlci4gRXhwZWN0ZWQgJXIuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSXMgdGhpcyBtb2R1bGUgZ2xvYmFsbHkgaW5zdGFsbGVkPyIpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cgJSAobW9kX25hbWUsIG1vZHVsZV9kaXIsIGV4cGVjdGVkX2RpcikpCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYubG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGZ1bGxfcGF0aCwgJ19faW5pdF9fLnB5JykpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgbG9hZF90ZXN0cyA9IE5vbmUKKyAgICAgICAgICAgICAgICB0ZXN0cyA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBmbm1hdGNoKHBhdGgsIHBhdHRlcm4pOgorICAgICAgICAgICAgICAgICAgICAjIG9ubHkgY2hlY2sgbG9hZF90ZXN0cyBpZiB0aGUgcGFja2FnZSBkaXJlY3RvcnkgaXRzZWxmIG1hdGNoZXMgdGhlIGZpbHRlcgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5fZ2V0X25hbWVfZnJvbV9wYXRoKGZ1bGxfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSA9IHNlbGYuX2dldF9tb2R1bGVfZnJvbV9uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGxvYWRfdGVzdHMgPSBnZXRhdHRyKHBhY2thZ2UsICdsb2FkX3Rlc3RzJywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMgPSBzZWxmLmxvYWRUZXN0c0Zyb21Nb2R1bGUocGFja2FnZSwgdXNlX2xvYWRfdGVzdHM9RmFsc2UpCisKKyAgICAgICAgICAgICAgICBpZiBsb2FkX3Rlc3RzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3RzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0cyBsb2FkZWQgZnJvbSBwYWNrYWdlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3RzCisgICAgICAgICAgICAgICAgICAgICMgcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX2ZpbmRfdGVzdHMoZnVsbF9wYXRoLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBsb2FkX3Rlc3RzKHNlbGYsIHRlc3RzLCBwYXR0ZXJuKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgX21ha2VfZmFpbGVkX2xvYWRfdGVzdHMocGFja2FnZS5fX25hbWVfXywgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3VpdGVDbGFzcykKKworZGVmYXVsdFRlc3RMb2FkZXIgPSBUZXN0TG9hZGVyKCkKKworCitkZWYgX21ha2VMb2FkZXIocHJlZml4LCBzb3J0VXNpbmcsIHN1aXRlQ2xhc3M9Tm9uZSk6CisgICAgbG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gc29ydFVzaW5nCisgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSBwcmVmaXgKKyAgICBpZiBzdWl0ZUNsYXNzOgorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IHN1aXRlQ2xhc3MKKyAgICByZXR1cm4gbG9hZGVyCisKK2RlZiBnZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MsIHByZWZpeCwgc29ydFVzaW5nPWNtcCk6CisgICAgcmV0dXJuIF9tYWtlTG9hZGVyKHByZWZpeCwgc29ydFVzaW5nKS5nZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MpCisKK2RlZiBtYWtlU3VpdGUodGVzdENhc2VDbGFzcywgcHJlZml4PSd0ZXN0Jywgc29ydFVzaW5nPWNtcCwKKyAgICAgICAgICAgICAgc3VpdGVDbGFzcz1zdWl0ZS5UZXN0U3VpdGUpOgorICAgIHJldHVybiBfbWFrZUxvYWRlcihwcmVmaXgsIHNvcnRVc2luZywgc3VpdGVDbGFzcykubG9hZFRlc3RzRnJvbVRlc3RDYXNlKHRlc3RDYXNlQ2xhc3MpCisKK2RlZiBmaW5kVGVzdENhc2VzKG1vZHVsZSwgcHJlZml4PSd0ZXN0Jywgc29ydFVzaW5nPWNtcCwKKyAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3M9c3VpdGUuVGVzdFN1aXRlKToKKyAgICByZXR1cm4gX21ha2VMb2FkZXIocHJlZml4LCBzb3J0VXNpbmcsIHN1aXRlQ2xhc3MpLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L21haW4ucHkgYi9MaWIvdW5pdHRlc3QvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzk2YmIwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L21haW4ucHkKQEAgLTAsMCArMSwyMzMgQEAKKyIiIlVuaXR0ZXN0IG1haW4gcHJvZ3JhbSIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB0eXBlcworCitmcm9tIC4gaW1wb3J0IGxvYWRlciwgcnVubmVyCitmcm9tIC5zaWduYWxzIGltcG9ydCBpbnN0YWxsSGFuZGxlcgorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitGQUlMRkFTVCAgICAgPSAiICAtZiwgLS1mYWlsZmFzdCAgIFN0b3Agb24gZmlyc3QgZmFpbHVyZVxuIgorQ0FUQ0hCUkVBSyAgID0gIiAgLWMsIC0tY2F0Y2ggICAgICBDYXRjaCBjb250cm9sLUMgYW5kIGRpc3BsYXkgcmVzdWx0c1xuIgorQlVGRkVST1VUUFVUID0gIiAgLWIsIC0tYnVmZmVyICAgICBCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3QgcnVuc1xuIgorCitVU0FHRV9BU19NQUlOID0gIiIiXAorVXNhZ2U6ICUocHJvZ05hbWUpcyBbb3B0aW9uc10gW3Rlc3RzXQorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgIFNob3cgdGhpcyBtZXNzYWdlCisgIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKKyAgLXEsIC0tcXVpZXQgICAgICBNaW5pbWFsIG91dHB1dAorJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzCitFeGFtcGxlczoKKyAgJShwcm9nTmFtZSlzIHRlc3RfbW9kdWxlICAgICAgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSB0ZXN0X21vZHVsZQorICAlKHByb2dOYW1lKXMgbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIG1vZHVsZS5UZXN0Q2xhc3MKKyAgJShwcm9nTmFtZSlzIG1vZHVsZS5DbGFzcy50ZXN0X21ldGhvZCAgLSBydW4gc3BlY2lmaWVkIHRlc3QgbWV0aG9kCisKK1t0ZXN0c10gY2FuIGJlIGEgbGlzdCBvZiBhbnkgbnVtYmVyIG9mIHRlc3QgbW9kdWxlcywgY2xhc3NlcyBhbmQgdGVzdAorbWV0aG9kcy4KKworQWx0ZXJuYXRpdmUgVXNhZ2U6ICUocHJvZ05hbWUpcyBkaXNjb3ZlciBbb3B0aW9uc10KKworT3B0aW9uczoKKyAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAorJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzICAtcyBkaXJlY3RvcnkgICAgIERpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KQorICAtcCBwYXR0ZXJuICAgICAgIFBhdHRlcm4gdG8gbWF0Y2ggdGVzdCBmaWxlcyAoJ3Rlc3QqLnB5JyBkZWZhdWx0KQorICAtdCBkaXJlY3RvcnkgICAgIFRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdCB0bworICAgICAgICAgICAgICAgICAgIHN0YXJ0IGRpcmVjdG9yeSkKKworRm9yIHRlc3QgZGlzY292ZXJ5IGFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcAorbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LgorIiIiCisKK1VTQUdFX0ZST01fTU9EVUxFID0gIiIiXAorVXNhZ2U6ICUocHJvZ05hbWUpcyBbb3B0aW9uc10gW3Rlc3RdIFsuLi5dCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKKyAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAorICAtcSwgLS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0CislKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMKK0V4YW1wbGVzOgorICAlKHByb2dOYW1lKXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBydW4gZGVmYXVsdCBzZXQgb2YgdGVzdHMKKyAgJShwcm9nTmFtZSlzIE15VGVzdFN1aXRlICAgICAgICAgICAgICAgICAgIC0gcnVuIHN1aXRlICdNeVRlc3RTdWl0ZScKKyAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UudGVzdFNvbWV0aGluZyAgICAgIC0gcnVuIE15VGVzdENhc2UudGVzdFNvbWV0aGluZworICAlKHByb2dOYW1lKXMgTXlUZXN0Q2FzZSAgICAgICAgICAgICAgICAgICAgLSBydW4gYWxsICd0ZXN0KicgdGVzdCBtZXRob2RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE15VGVzdENhc2UKKyIiIgorCisKKworY2xhc3MgVGVzdFByb2dyYW0ob2JqZWN0KToKKyAgICAiIiJBIGNvbW1hbmQtbGluZSBwcm9ncmFtIHRoYXQgcnVucyBhIHNldCBvZiB0ZXN0czsgdGhpcyBpcyBwcmltYXJpbHkKKyAgICAgICBmb3IgbWFraW5nIHRlc3QgbW9kdWxlcyBjb252ZW5pZW50bHkgZXhlY3V0YWJsZS4KKyAgICAiIiIKKyAgICBVU0FHRSA9IFVTQUdFX0ZST01fTU9EVUxFCisKKyAgICAjIGRlZmF1bHRzIGZvciB0ZXN0aW5nCisgICAgZmFpbGZhc3QgPSBjYXRjaGJyZWFrID0gYnVmZmVyID0gcHJvZ05hbWUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kdWxlPSdfX21haW5fXycsIGRlZmF1bHRUZXN0PU5vbmUsIGFyZ3Y9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lcj1Ob25lLCB0ZXN0TG9hZGVyPWxvYWRlci5kZWZhdWx0VGVzdExvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgZXhpdD1UcnVlLCB2ZXJib3NpdHk9MSwgZmFpbGZhc3Q9Tm9uZSwgY2F0Y2hicmVhaz1Ob25lLAorICAgICAgICAgICAgICAgICAgICBidWZmZXI9Tm9uZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGUpCisgICAgICAgICAgICBmb3IgcGFydCBpbiBtb2R1bGUuc3BsaXQoJy4nKVsxOl06CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUgPSBnZXRhdHRyKHNlbGYubW9kdWxlLCBwYXJ0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgaWYgYXJndiBpcyBOb25lOgorICAgICAgICAgICAgYXJndiA9IHN5cy5hcmd2CisKKyAgICAgICAgc2VsZi5leGl0ID0gZXhpdAorICAgICAgICBzZWxmLmZhaWxmYXN0ID0gZmFpbGZhc3QKKyAgICAgICAgc2VsZi5jYXRjaGJyZWFrID0gY2F0Y2hicmVhaworICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IHZlcmJvc2l0eQorICAgICAgICBzZWxmLmJ1ZmZlciA9IGJ1ZmZlcgorICAgICAgICBzZWxmLmRlZmF1bHRUZXN0ID0gZGVmYXVsdFRlc3QKKyAgICAgICAgc2VsZi50ZXN0UnVubmVyID0gdGVzdFJ1bm5lcgorICAgICAgICBzZWxmLnRlc3RMb2FkZXIgPSB0ZXN0TG9hZGVyCisgICAgICAgIHNlbGYucHJvZ05hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGFyZ3ZbMF0pCisgICAgICAgIHNlbGYucGFyc2VBcmdzKGFyZ3YpCisgICAgICAgIHNlbGYucnVuVGVzdHMoKQorCisgICAgZGVmIHVzYWdlRXhpdChzZWxmLCBtc2c9Tm9uZSk6CisgICAgICAgIGlmIG1zZzoKKyAgICAgICAgICAgIHByaW50IG1zZworICAgICAgICB1c2FnZSA9IHsncHJvZ05hbWUnOiBzZWxmLnByb2dOYW1lLCAnY2F0Y2hicmVhayc6ICcnLCAnZmFpbGZhc3QnOiAnJywKKyAgICAgICAgICAgICAgICAgJ2J1ZmZlcic6ICcnfQorICAgICAgICBpZiBzZWxmLmZhaWxmYXN0ICE9IEZhbHNlOgorICAgICAgICAgICAgdXNhZ2VbJ2ZhaWxmYXN0J10gPSBGQUlMRkFTVAorICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgIT0gRmFsc2U6CisgICAgICAgICAgICB1c2FnZVsnY2F0Y2hicmVhayddID0gQ0FUQ0hCUkVBSworICAgICAgICBpZiBzZWxmLmJ1ZmZlciAhPSBGYWxzZToKKyAgICAgICAgICAgIHVzYWdlWydidWZmZXInXSA9IEJVRkZFUk9VVFBVVAorICAgICAgICBwcmludCBzZWxmLlVTQUdFICUgdXNhZ2UKKyAgICAgICAgc3lzLmV4aXQoMikKKworICAgIGRlZiBwYXJzZUFyZ3Moc2VsZiwgYXJndik6CisgICAgICAgIGlmIGxlbihhcmd2KSA+IDEgYW5kIGFyZ3ZbMV0ubG93ZXIoKSA9PSAnZGlzY292ZXInOgorICAgICAgICAgICAgc2VsZi5fZG9fZGlzY292ZXJ5KGFyZ3ZbMjpdKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaW1wb3J0IGdldG9wdAorICAgICAgICBsb25nX29wdHMgPSBbJ2hlbHAnLCAndmVyYm9zZScsICdxdWlldCcsICdmYWlsZmFzdCcsICdjYXRjaCcsICdidWZmZXInXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmd2WzE6XSwgJ2hIdnFmY2InLCBsb25nX29wdHMpCisgICAgICAgICAgICBmb3Igb3B0LCB2YWx1ZSBpbiBvcHRpb25zOgorICAgICAgICAgICAgICAgIGlmIG9wdCBpbiAoJy1oJywnLUgnLCctLWhlbHAnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQoKQorICAgICAgICAgICAgICAgIGlmIG9wdCBpbiAoJy1xJywnLS1xdWlldCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDAKKyAgICAgICAgICAgICAgICBpZiBvcHQgaW4gKCctdicsJy0tdmVyYm9zZScpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDIKKyAgICAgICAgICAgICAgICBpZiBvcHQgaW4gKCctZicsJy0tZmFpbGZhc3QnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsZmFzdCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgIyBTaG91bGQgdGhpcyByYWlzZSBhbiBleGNlcHRpb24gaWYgLWYgaXMgbm90IHZhbGlkPworICAgICAgICAgICAgICAgIGlmIG9wdCBpbiAoJy1jJywnLS1jYXRjaCcpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgIyBTaG91bGQgdGhpcyByYWlzZSBhbiBleGNlcHRpb24gaWYgLWMgaXMgbm90IHZhbGlkPworICAgICAgICAgICAgICAgIGlmIG9wdCBpbiAoJy1iJywnLS1idWZmZXInKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAjIFNob3VsZCB0aGlzIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiAtYiBpcyBub3QgdmFsaWQ/CisgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5kZWZhdWx0VGVzdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgY3JlYXRlVGVzdHMgd2lsbCBsb2FkIHRlc3RzIGZyb20gc2VsZi5tb2R1bGUKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IE5vbmUKKyAgICAgICAgICAgIGVsaWYgbGVuKGFyZ3MpID4gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgICAgICAgICAgICAjIHRvIHN1cHBvcnQgcHl0aG9uIC1tIHVuaXR0ZXN0IC4uLgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSAoc2VsZi5kZWZhdWx0VGVzdCwpCisgICAgICAgICAgICBzZWxmLmNyZWF0ZVRlc3RzKCkKKyAgICAgICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQobXNnKQorCisgICAgZGVmIGNyZWF0ZVRlc3RzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRlc3ROYW1lcyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi50ZXN0ID0gc2VsZi50ZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZi5tb2R1bGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRlc3QgPSBzZWxmLnRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYudGVzdE5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSkKKworICAgIGRlZiBfZG9fZGlzY292ZXJ5KHNlbGYsIGFyZ3YsIExvYWRlcj1sb2FkZXIuVGVzdExvYWRlcik6CisgICAgICAgICMgaGFuZGxlIGNvbW1hbmQgbGluZSBhcmdzIGZvciB0ZXN0IGRpc2NvdmVyeQorICAgICAgICBzZWxmLnByb2dOYW1lID0gJyVzIGRpc2NvdmVyJyAlIHNlbGYucHJvZ05hbWUKKyAgICAgICAgaW1wb3J0IG9wdHBhcnNlCisgICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisgICAgICAgIHBhcnNlci5wcm9nID0gc2VsZi5wcm9nTmFtZQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJib3NlJywgZGVzdD0ndmVyYm9zZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ZlcmJvc2Ugb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCAhPSBGYWxzZToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZicsICctLWZhaWxmYXN0JywgZGVzdD0nZmFpbGZhc3QnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3RvcCBvbiBmaXJzdCBmYWlsIG9yIGVycm9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhayAhPSBGYWxzZToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYycsICctLWNhdGNoJywgZGVzdD0nY2F0Y2hicmVhaycsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDYXRjaCBjdHJsLUMgYW5kIGRpc3BsYXkgcmVzdWx0cyBzbyBmYXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgaWYgc2VsZi5idWZmZXIgIT0gRmFsc2U6CisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWInLCAnLS1idWZmZXInLCBkZXN0PSdidWZmZXInLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQnVmZmVyIHN0ZG91dCBhbmQgc3RkZXJyIGR1cmluZyB0ZXN0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zdGFydC1kaXJlY3RvcnknLCBkZXN0PSdzdGFydCcsIGRlZmF1bHQ9Jy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXJlY3RvcnkgdG8gc3RhcnQgZGlzY292ZXJ5ICgnLicgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wYXR0ZXJuJywgZGVzdD0ncGF0dGVybicsIGRlZmF1bHQ9J3Rlc3QqLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0dGVybiB0byBtYXRjaCB0ZXN0cyAoJ3Rlc3QqLnB5JyBkZWZhdWx0KSIpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRvcC1sZXZlbC1kaXJlY3RvcnknLCBkZXN0PSd0b3AnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdHMgdG8gc3RhcnQgZGlyZWN0b3J5KScpCisKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCisgICAgICAgIGlmIGxlbihhcmdzKSA+IDM6CisgICAgICAgICAgICBzZWxmLnVzYWdlRXhpdCgpCisKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHppcCgoJ3N0YXJ0JywgJ3BhdHRlcm4nLCAndG9wJyksIGFyZ3MpOgorICAgICAgICAgICAgc2V0YXR0cihvcHRpb25zLCBuYW1lLCB2YWx1ZSkKKworICAgICAgICAjIG9ubHkgc2V0IG9wdGlvbnMgZnJvbSB0aGUgcGFyc2luZyBoZXJlCisgICAgICAgICMgaWYgdGhleSB3ZXJlbid0IHNldCBleHBsaWNpdGx5IGluIHRoZSBjb25zdHJ1Y3RvcgorICAgICAgICBpZiBzZWxmLmZhaWxmYXN0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gb3B0aW9ucy5mYWlsZmFzdAorICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IG9wdGlvbnMuY2F0Y2hicmVhaworICAgICAgICBpZiBzZWxmLmJ1ZmZlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBvcHRpb25zLmJ1ZmZlcgorCisgICAgICAgIGlmIG9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMgorCisgICAgICAgIHN0YXJ0X2RpciA9IG9wdGlvbnMuc3RhcnQKKyAgICAgICAgcGF0dGVybiA9IG9wdGlvbnMucGF0dGVybgorICAgICAgICB0b3BfbGV2ZWxfZGlyID0gb3B0aW9ucy50b3AKKworICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQorICAgICAgICBzZWxmLnRlc3QgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyLCBwYXR0ZXJuLCB0b3BfbGV2ZWxfZGlyKQorCisgICAgZGVmIHJ1blRlc3RzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWs6CisgICAgICAgICAgICBpbnN0YWxsSGFuZGxlcigpCisgICAgICAgIGlmIHNlbGYudGVzdFJ1bm5lciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi50ZXN0UnVubmVyID0gcnVubmVyLlRleHRUZXN0UnVubmVyCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi50ZXN0UnVubmVyLCAodHlwZSwgdHlwZXMuQ2xhc3NUeXBlKSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lciA9IHNlbGYudGVzdFJ1bm5lcih2ZXJib3NpdHk9c2VsZi52ZXJib3NpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZmFzdD1zZWxmLmZhaWxmYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyPXNlbGYuYnVmZmVyKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAjIGRpZG4ndCBhY2NlcHQgdGhlIHZlcmJvc2l0eSwgYnVmZmVyIG9yIGZhaWxmYXN0IGFyZ3VtZW50cworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIgPSBzZWxmLnRlc3RSdW5uZXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgVGVzdFJ1bm5lciBpbnN0YW5jZQorICAgICAgICAgICAgdGVzdFJ1bm5lciA9IHNlbGYudGVzdFJ1bm5lcgorICAgICAgICBzZWxmLnJlc3VsdCA9IHRlc3RSdW5uZXIucnVuKHNlbGYudGVzdCkKKyAgICAgICAgaWYgc2VsZi5leGl0OgorICAgICAgICAgICAgc3lzLmV4aXQobm90IHNlbGYucmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKworbWFpbiA9IFRlc3RQcm9ncmFtCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5IGIvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjY2ZjFiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQpAQCAtMCwwICsxLDE4NyBAQAorIiIiVGVzdCByZXN1bHQgb2JqZWN0IiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjaworCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitkZWYgZmFpbGZhc3QobWV0aG9kKToKKyAgICBAd3JhcHMobWV0aG9kKQorICAgIGRlZiBpbm5lcihzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ2ZhaWxmYXN0JywgRmFsc2UpOgorICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgcmV0dXJuIG1ldGhvZChzZWxmLCAqYXJncywgKiprdykKKyAgICByZXR1cm4gaW5uZXIKKworU1RET1VUX0xJTkUgPSAnXG5TdGRvdXQ6XG4lcycKK1NUREVSUl9MSU5FID0gJ1xuU3RkZXJyOlxuJXMnCisKKworY2xhc3MgVGVzdFJlc3VsdChvYmplY3QpOgorICAgICIiIkhvbGRlciBmb3IgdGVzdCByZXN1bHQgaW5mb3JtYXRpb24uCisKKyAgICBUZXN0IHJlc3VsdHMgYXJlIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCBieSB0aGUgVGVzdENhc2UgYW5kIFRlc3RTdWl0ZQorICAgIGNsYXNzZXMsIGFuZCBkbyBub3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IG1hbmlwdWxhdGVkIGJ5IHdyaXRlcnMgb2YgdGVzdHMuCisKKyAgICBFYWNoIGluc3RhbmNlIGhvbGRzIHRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuLCBhbmQgY29sbGVjdGlvbnMgb2YKKyAgICBmYWlsdXJlcyBhbmQgZXJyb3JzIHRoYXQgb2NjdXJyZWQgYW1vbmcgdGhvc2UgdGVzdCBydW5zLiBUaGUgY29sbGVjdGlvbnMKKyAgICBjb250YWluIHR1cGxlcyBvZiAodGVzdGNhc2UsIGV4Y2VwdGlvbmluZm8pLCB3aGVyZSBleGNlcHRpb25pbmZvIGlzIHRoZQorICAgIGZvcm1hdHRlZCB0cmFjZWJhY2sgb2YgdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQuCisgICAgIiIiCisgICAgX3ByZXZpb3VzVGVzdENsYXNzID0gTm9uZQorICAgIF90ZXN0UnVuRW50ZXJlZCA9IEZhbHNlCisgICAgX21vZHVsZVNldFVwRmFpbGVkID0gRmFsc2UKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtPU5vbmUsIGRlc2NyaXB0aW9ucz1Ob25lLCB2ZXJib3NpdHk9Tm9uZSk6CisgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBGYWxzZQorICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10KKyAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQorICAgICAgICBzZWxmLnRlc3RzUnVuID0gMAorICAgICAgICBzZWxmLnNraXBwZWQgPSBbXQorICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZXMgPSBbXQorICAgICAgICBzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzZXMgPSBbXQorICAgICAgICBzZWxmLnNob3VsZFN0b3AgPSBGYWxzZQorICAgICAgICBzZWxmLmJ1ZmZlciA9IEZhbHNlCisgICAgICAgIHNlbGYuX3N0ZG91dF9idWZmZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZGVycl9idWZmZXIgPSBOb25lCisgICAgICAgIHNlbGYuX29yaWdpbmFsX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfc3RkZXJyID0gc3lzLnN0ZGVycgorICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBGYWxzZQorCisgICAgZGVmIHByaW50RXJyb3JzKHNlbGYpOgorICAgICAgICAiQ2FsbGVkIGJ5IFRlc3RSdW5uZXIgYWZ0ZXIgdGVzdCBydW4iCisKKyAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICAiQ2FsbGVkIHdoZW4gdGhlIGdpdmVuIHRlc3QgaXMgYWJvdXQgdG8gYmUgcnVuIgorICAgICAgICBzZWxmLnRlc3RzUnVuICs9IDEKKyAgICAgICAgc2VsZi5fbWlycm9yT3V0cHV0ID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5idWZmZXI6CisgICAgICAgICAgICBpZiBzZWxmLl9zdGRlcnJfYnVmZmVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyX2J1ZmZlciA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXRfYnVmZmVyID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX3N0ZG91dF9idWZmZXIKKyAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzZWxmLl9zdGRlcnJfYnVmZmVyCisKKyAgICBkZWYgc3RhcnRUZXN0UnVuKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgb25jZSBiZWZvcmUgYW55IHRlc3RzIGFyZSBleGVjdXRlZC4KKworICAgICAgICBTZWUgc3RhcnRUZXN0IGZvciBhIG1ldGhvZCBjYWxsZWQgYmVmb3JlIGVhY2ggdGVzdC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBnaXZlbiB0ZXN0IGhhcyBiZWVuIHJ1biIiIgorICAgICAgICBpZiBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgIGlmIHNlbGYuX21pcnJvck91dHB1dDoKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBzeXMuc3Rkb3V0LmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBlcnJvciA9IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG91dHB1dC5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXG4nCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX3N0ZG91dC53cml0ZShTVERPVVRfTElORSAlIG91dHB1dCkKKyAgICAgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGVycm9yLmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgKz0gJ1xuJworICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9zdGRlcnIud3JpdGUoU1RERVJSX0xJTkUgJSBlcnJvcikKKworICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX29yaWdpbmFsX3N0ZG91dAorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHNlbGYuX29yaWdpbmFsX3N0ZGVycgorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0X2J1ZmZlci5zZWVrKDApCisgICAgICAgICAgICBzZWxmLl9zdGRvdXRfYnVmZmVyLnRydW5jYXRlKCkKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVycl9idWZmZXIuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5fc3RkZXJyX2J1ZmZlci50cnVuY2F0ZSgpCisgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IEZhbHNlCisKKyAgICBkZWYgc3RvcFRlc3RSdW4oc2VsZik6CisgICAgICAgICIiIkNhbGxlZCBvbmNlIGFmdGVyIGFsbCB0ZXN0cyBhcmUgZXhlY3V0ZWQuCisKKyAgICAgICAgU2VlIHN0b3BUZXN0IGZvciBhIG1ldGhvZCBjYWxsZWQgYWZ0ZXIgZWFjaCB0ZXN0LgorICAgICAgICAiIiIKKworICAgIEBmYWlsZmFzdAorICAgIGRlZiBhZGRFcnJvcihzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuICdlcnInIGlzIGEgdHVwbGUgb2YgdmFsdWVzIGFzCisgICAgICAgIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKCh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCisgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IFRydWUKKworICAgIEBmYWlsZmFzdAorICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGFuIGVycm9yIGhhcyBvY2N1cnJlZC4gJ2VycicgaXMgYSB0dXBsZSBvZiB2YWx1ZXMgYXMKKyAgICAgICAgcmV0dXJuZWQgYnkgc3lzLmV4Y19pbmZvKCkuIiIiCisgICAgICAgIHNlbGYuZmFpbHVyZXMuYXBwZW5kKCh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCisgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IFRydWUKKworICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgorICAgICAgICAiQ2FsbGVkIHdoZW4gYSB0ZXN0IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IgorICAgICAgICBwYXNzCisKKyAgICBkZWYgYWRkU2tpcChzZWxmLCB0ZXN0LCByZWFzb24pOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIHRlc3QgaXMgc2tpcHBlZC4iIiIKKyAgICAgICAgc2VsZi5za2lwcGVkLmFwcGVuZCgodGVzdCwgcmVhc29uKSkKKworICAgIGRlZiBhZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgdGVzdCwgZXJyKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYW4gZXhwZWN0ZWQgZmFpbHVyZS9lcnJvciBvY2N1cmVkLiIiIgorICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZXMuYXBwZW5kKAorICAgICAgICAgICAgKHRlc3QsIHNlbGYuX2V4Y19pbmZvX3RvX3N0cmluZyhlcnIsIHRlc3QpKSkKKworICAgIEBmYWlsZmFzdAorICAgIGRlZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCB0ZXN0KToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSB0ZXN0IHdhcyBleHBlY3RlZCB0byBmYWlsLCBidXQgc3VjY2VlZC4iIiIKKyAgICAgICAgc2VsZi51bmV4cGVjdGVkU3VjY2Vzc2VzLmFwcGVuZCh0ZXN0KQorCisgICAgZGVmIHdhc1N1Y2Nlc3NmdWwoc2VsZik6CisgICAgICAgICJUZWxscyB3aGV0aGVyIG9yIG5vdCB0aGlzIHJlc3VsdCB3YXMgYSBzdWNjZXNzIgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuZmFpbHVyZXMpID09IGxlbihzZWxmLmVycm9ycykgPT0gMAorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICJJbmRpY2F0ZXMgdGhhdCB0aGUgdGVzdHMgc2hvdWxkIGJlIGFib3J0ZWQiCisgICAgICAgIHNlbGYuc2hvdWxkU3RvcCA9IFRydWUKKworICAgIGRlZiBfZXhjX2luZm9fdG9fc3RyaW5nKHNlbGYsIGVyciwgdGVzdCk6CisgICAgICAgICIiIkNvbnZlcnRzIGEgc3lzLmV4Y19pbmZvKCktc3R5bGUgdHVwbGUgb2YgdmFsdWVzIGludG8gYSBzdHJpbmcuIiIiCisgICAgICAgIGV4Y3R5cGUsIHZhbHVlLCB0YiA9IGVycgorICAgICAgICAjIFNraXAgdGVzdCBydW5uZXIgdHJhY2ViYWNrIGxldmVscworICAgICAgICB3aGlsZSB0YiBhbmQgc2VsZi5faXNfcmVsZXZhbnRfdGJfbGV2ZWwodGIpOgorICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisKKyAgICAgICAgaWYgZXhjdHlwZSBpcyB0ZXN0LmZhaWx1cmVFeGNlcHRpb246CisgICAgICAgICAgICAjIFNraXAgYXNzZXJ0KigpIHRyYWNlYmFjayBsZXZlbHMKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYuX2NvdW50X3JlbGV2YW50X3RiX2xldmVscyh0YikKKyAgICAgICAgICAgIG1zZ0xpbmVzID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oZXhjdHlwZSwgdmFsdWUsIHRiLCBsZW5ndGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2dMaW5lcyA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKGV4Y3R5cGUsIHZhbHVlLCB0YikKKworICAgICAgICBpZiBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgIG91dHB1dCA9IHN5cy5zdGRvdXQuZ2V0dmFsdWUoKQorICAgICAgICAgICAgZXJyb3IgPSBzeXMuc3RkZXJyLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3V0cHV0LmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1xuJworICAgICAgICAgICAgICAgIG1zZ0xpbmVzLmFwcGVuZChTVERPVVRfTElORSAlIG91dHB1dCkKKyAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgIGlmIG5vdCBlcnJvci5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgKz0gJ1xuJworICAgICAgICAgICAgICAgIG1zZ0xpbmVzLmFwcGVuZChTVERFUlJfTElORSAlIGVycm9yKQorICAgICAgICByZXR1cm4gJycuam9pbihtc2dMaW5lcykKKworCisgICAgZGVmIF9pc19yZWxldmFudF90Yl9sZXZlbChzZWxmLCB0Yik6CisgICAgICAgIHJldHVybiAnX191bml0dGVzdCcgaW4gdGIudGJfZnJhbWUuZl9nbG9iYWxzCisKKyAgICBkZWYgX2NvdW50X3JlbGV2YW50X3RiX2xldmVscyhzZWxmLCB0Yik6CisgICAgICAgIGxlbmd0aCA9IDAKKyAgICAgICAgd2hpbGUgdGIgYW5kIG5vdCBzZWxmLl9pc19yZWxldmFudF90Yl9sZXZlbCh0Yik6CisgICAgICAgICAgICBsZW5ndGggKz0gMQorICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHJldHVybiBsZW5ndGgKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgiPCVzIHJ1bj0laSBlcnJvcnM9JWkgZmFpbHVyZXM9JWk+IiAlCisgICAgICAgICAgICAgICAodXRpbC5zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYudGVzdHNSdW4sIGxlbihzZWxmLmVycm9ycyksCisgICAgICAgICAgICAgICAgbGVuKHNlbGYuZmFpbHVyZXMpKSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9ydW5uZXIucHkgYi9MaWIvdW5pdHRlc3QvcnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTY4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvcnVubmVyLnB5CkBAIC0wLDAgKzEsMTk2IEBACisiIiJSdW5uaW5nIHRlc3RzIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2Zyb20gLiBpbXBvcnQgcmVzdWx0Citmcm9tIC5zaWduYWxzIGltcG9ydCByZWdpc3RlclJlc3VsdAorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCisKK2NsYXNzIF9Xcml0ZWxuRGVjb3JhdG9yKG9iamVjdCk6CisgICAgIiIiVXNlZCB0byBkZWNvcmF0ZSBmaWxlLWxpa2Ugb2JqZWN0cyB3aXRoIGEgaGFuZHkgJ3dyaXRlbG4nIG1ldGhvZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHN0cmVhbSk6CisgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgIGlmIGF0dHIgaW4gKCdzdHJlYW0nLCAnX19nZXRzdGF0ZV9fJyk6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihhdHRyKQorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnN0cmVhbSxhdHRyKQorCisgICAgZGVmIHdyaXRlbG4oc2VsZiwgYXJnPU5vbmUpOgorICAgICAgICBpZiBhcmc6CisgICAgICAgICAgICBzZWxmLndyaXRlKGFyZykKKyAgICAgICAgc2VsZi53cml0ZSgnXG4nKSAjIHRleHQtbW9kZSBzdHJlYW1zIHRyYW5zbGF0ZSB0byBcclxuIGlmIG5lZWRlZAorCisKK2NsYXNzIFRleHRUZXN0UmVzdWx0KHJlc3VsdC5UZXN0UmVzdWx0KToKKyAgICAiIiJBIHRlc3QgcmVzdWx0IGNsYXNzIHRoYXQgY2FuIHByaW50IGZvcm1hdHRlZCB0ZXh0IHJlc3VsdHMgdG8gYSBzdHJlYW0uCisKKyAgICBVc2VkIGJ5IFRleHRUZXN0UnVubmVyLgorICAgICIiIgorICAgIHNlcGFyYXRvcjEgPSAnPScgKiA3MAorICAgIHNlcGFyYXRvcjIgPSAnLScgKiA3MAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkpOgorICAgICAgICBzdXBlcihUZXh0VGVzdFJlc3VsdCwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQorICAgICAgICBzZWxmLnNob3dBbGwgPSB2ZXJib3NpdHkgPiAxCisgICAgICAgIHNlbGYuZG90cyA9IHZlcmJvc2l0eSA9PSAxCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zCisKKyAgICBkZWYgZ2V0RGVzY3JpcHRpb24oc2VsZiwgdGVzdCk6CisgICAgICAgIGRvY19maXJzdF9saW5lID0gdGVzdC5zaG9ydERlc2NyaXB0aW9uKCkKKyAgICAgICAgaWYgc2VsZi5kZXNjcmlwdGlvbnMgYW5kIGRvY19maXJzdF9saW5lOgorICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbigoc3RyKHRlc3QpLCBkb2NfZmlyc3RfbGluZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3RyKHRlc3QpCisKKyAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBzdXBlcihUZXh0VGVzdFJlc3VsdCwgc2VsZikuc3RhcnRUZXN0KHRlc3QpCisgICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHNlbGYuZ2V0RGVzY3JpcHRpb24odGVzdCkpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiIC4uLiAiKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CisgICAgICAgIHN1cGVyKFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRTdWNjZXNzKHRlc3QpCisgICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIm9rIikKKyAgICAgICAgZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnLicpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXJyKToKKyAgICAgICAgc3VwZXIoVGV4dFRlc3RSZXN1bHQsIHNlbGYpLmFkZEVycm9yKHRlc3QsIGVycikKKyAgICAgICAgaWYgc2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiRVJST1IiKQorICAgICAgICBlbGlmIHNlbGYuZG90czoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdFJykKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgIHN1cGVyKFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRGYWlsdXJlKHRlc3QsIGVycikKKyAgICAgICAgaWYgc2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiRkFJTCIpCisgICAgICAgIGVsaWYgc2VsZi5kb3RzOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJ0YnKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIGFkZFNraXAoc2VsZiwgdGVzdCwgcmVhc29uKToKKyAgICAgICAgc3VwZXIoVGV4dFRlc3RSZXN1bHQsIHNlbGYpLmFkZFNraXAodGVzdCwgcmVhc29uKQorICAgICAgICBpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJza2lwcGVkIHswIXJ9Ii5mb3JtYXQocmVhc29uKSkKKyAgICAgICAgZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgicyIpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgIHN1cGVyKFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRFeHBlY3RlZEZhaWx1cmUodGVzdCwgZXJyKQorICAgICAgICBpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJleHBlY3RlZCBmYWlsdXJlIikKKyAgICAgICAgZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgieCIpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CisgICAgICAgIHN1cGVyKFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRVbmV4cGVjdGVkU3VjY2Vzcyh0ZXN0KQorICAgICAgICBpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJ1bmV4cGVjdGVkIHN1Y2Nlc3MiKQorICAgICAgICBlbGlmIHNlbGYuZG90czoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJ1IikKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiBwcmludEVycm9ycyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kb3RzIG9yIHNlbGYuc2hvd0FsbDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oKQorICAgICAgICBzZWxmLnByaW50RXJyb3JMaXN0KCdFUlJPUicsIHNlbGYuZXJyb3JzKQorICAgICAgICBzZWxmLnByaW50RXJyb3JMaXN0KCdGQUlMJywgc2VsZi5mYWlsdXJlcykKKworICAgIGRlZiBwcmludEVycm9yTGlzdChzZWxmLCBmbGF2b3VyLCBlcnJvcnMpOgorICAgICAgICBmb3IgdGVzdCwgZXJyIGluIGVycm9yczoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oc2VsZi5zZXBhcmF0b3IxKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiJXM6ICVzIiAlIChmbGF2b3VyLHNlbGYuZ2V0RGVzY3JpcHRpb24odGVzdCkpKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihzZWxmLnNlcGFyYXRvcjIpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCIlcyIgJSBlcnIpCisKKworY2xhc3MgVGV4dFRlc3RSdW5uZXIob2JqZWN0KToKKyAgICAiIiJBIHRlc3QgcnVubmVyIGNsYXNzIHRoYXQgZGlzcGxheXMgcmVzdWx0cyBpbiB0ZXh0dWFsIGZvcm0uCisKKyAgICBJdCBwcmludHMgb3V0IHRoZSBuYW1lcyBvZiB0ZXN0cyBhcyB0aGV5IGFyZSBydW4sIGVycm9ycyBhcyB0aGV5CisgICAgb2NjdXIsIGFuZCBhIHN1bW1hcnkgb2YgdGhlIHJlc3VsdHMgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBydW4uCisgICAgIiIiCisgICAgcmVzdWx0Y2xhc3MgPSBUZXh0VGVzdFJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbT1zeXMuc3RkZXJyLCBkZXNjcmlwdGlvbnM9VHJ1ZSwgdmVyYm9zaXR5PTEsCisgICAgICAgICAgICAgICAgIGZhaWxmYXN0PUZhbHNlLCBidWZmZXI9RmFsc2UsIHJlc3VsdGNsYXNzPU5vbmUpOgorICAgICAgICBzZWxmLnN0cmVhbSA9IF9Xcml0ZWxuRGVjb3JhdG9yKHN0cmVhbSkKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnMKKyAgICAgICAgc2VsZi52ZXJib3NpdHkgPSB2ZXJib3NpdHkKKyAgICAgICAgc2VsZi5mYWlsZmFzdCA9IGZhaWxmYXN0CisgICAgICAgIHNlbGYuYnVmZmVyID0gYnVmZmVyCisgICAgICAgIGlmIHJlc3VsdGNsYXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5yZXN1bHRjbGFzcyA9IHJlc3VsdGNsYXNzCisKKyAgICBkZWYgX21ha2VSZXN1bHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdGNsYXNzKHNlbGYuc3RyZWFtLCBzZWxmLmRlc2NyaXB0aW9ucywgc2VsZi52ZXJib3NpdHkpCisKKyAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICAiUnVuIHRoZSBnaXZlbiB0ZXN0IGNhc2Ugb3IgdGVzdCBzdWl0ZS4iCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX21ha2VSZXN1bHQoKQorICAgICAgICByZWdpc3RlclJlc3VsdChyZXN1bHQpCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IHNlbGYuZmFpbGZhc3QKKyAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IHNlbGYuYnVmZmVyCisgICAgICAgIHN0YXJ0VGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHN0YXJ0VGVzdFJ1biA9IGdldGF0dHIocmVzdWx0LCAnc3RhcnRUZXN0UnVuJywgTm9uZSkKKyAgICAgICAgaWYgc3RhcnRUZXN0UnVuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3RhcnRUZXN0UnVuKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzdG9wVGVzdFJ1biA9IGdldGF0dHIocmVzdWx0LCAnc3RvcFRlc3RSdW4nLCBOb25lKQorICAgICAgICAgICAgaWYgc3RvcFRlc3RSdW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RvcFRlc3RSdW4oKQorICAgICAgICBzdG9wVGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHRpbWVUYWtlbiA9IHN0b3BUaW1lIC0gc3RhcnRUaW1lCisgICAgICAgIHJlc3VsdC5wcmludEVycm9ycygpCisgICAgICAgIGlmIGhhc2F0dHIocmVzdWx0LCAnc2VwYXJhdG9yMicpOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihyZXN1bHQuc2VwYXJhdG9yMikKKyAgICAgICAgcnVuID0gcmVzdWx0LnRlc3RzUnVuCisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIlJhbiAlZCB0ZXN0JXMgaW4gJS4zZnMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnVuLCBydW4gIT0gMSBhbmQgInMiIG9yICIiLCB0aW1lVGFrZW4pKQorICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCkKKworICAgICAgICBleHBlY3RlZEZhaWxzID0gdW5leHBlY3RlZFN1Y2Nlc3NlcyA9IHNraXBwZWQgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdHMgPSBtYXAobGVuLCAocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2tpcHBlZCkpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4cGVjdGVkRmFpbHMsIHVuZXhwZWN0ZWRTdWNjZXNzZXMsIHNraXBwZWQgPSByZXN1bHRzCisKKyAgICAgICAgaW5mb3MgPSBbXQorICAgICAgICBpZiBub3QgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJGQUlMRUQiKQorICAgICAgICAgICAgZmFpbGVkLCBlcnJvcmVkID0gbWFwKGxlbiwgKHJlc3VsdC5mYWlsdXJlcywgcmVzdWx0LmVycm9ycykpCisgICAgICAgICAgICBpZiBmYWlsZWQ6CisgICAgICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCJmYWlsdXJlcz0lZCIgJSBmYWlsZWQpCisgICAgICAgICAgICBpZiBlcnJvcmVkOgorICAgICAgICAgICAgICAgIGluZm9zLmFwcGVuZCgiZXJyb3JzPSVkIiAlIGVycm9yZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiT0siKQorICAgICAgICBpZiBza2lwcGVkOgorICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCJza2lwcGVkPSVkIiAlIHNraXBwZWQpCisgICAgICAgIGlmIGV4cGVjdGVkRmFpbHM6CisgICAgICAgICAgICBpbmZvcy5hcHBlbmQoImV4cGVjdGVkIGZhaWx1cmVzPSVkIiAlIGV4cGVjdGVkRmFpbHMpCisgICAgICAgIGlmIHVuZXhwZWN0ZWRTdWNjZXNzZXM6CisgICAgICAgICAgICBpbmZvcy5hcHBlbmQoInVuZXhwZWN0ZWQgc3VjY2Vzc2VzPSVkIiAlIHVuZXhwZWN0ZWRTdWNjZXNzZXMpCisgICAgICAgIGlmIGluZm9zOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiICglcykiICUgKCIsICIuam9pbihpbmZvcyksKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJcbiIpCisgICAgICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9zaWduYWxzLnB5IGIvTGliL3VuaXR0ZXN0L3NpZ25hbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzMTA0MwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC9zaWduYWxzLnB5CkBAIC0wLDAgKzEsNTcgQEAKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCisKK2NsYXNzIF9JbnRlcnJ1cHRIYW5kbGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZmF1bHRfaGFuZGxlcik6CisgICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5kZWZhdWx0X2hhbmRsZXIgPSBkZWZhdWx0X2hhbmRsZXIKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgaW5zdGFsbGVkX2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgIGlmIGluc3RhbGxlZF9oYW5kbGVyIGlzIG5vdCBzZWxmOgorICAgICAgICAgICAgIyBpZiB3ZSBhcmVuJ3QgdGhlIGluc3RhbGxlZCBoYW5kbGVyLCB0aGVuIGRlbGVnYXRlIGltbWVkaWF0ZWx5CisgICAgICAgICAgICAjIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIKKyAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9oYW5kbGVyKHNpZ251bSwgZnJhbWUpCisKKyAgICAgICAgaWYgc2VsZi5jYWxsZWQ6CisgICAgICAgICAgICBzZWxmLmRlZmF1bHRfaGFuZGxlcihzaWdudW0sIGZyYW1lKQorICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKKyAgICAgICAgZm9yIHJlc3VsdCBpbiBfcmVzdWx0cy5rZXlzKCk6CisgICAgICAgICAgICByZXN1bHQuc3RvcCgpCisKK19yZXN1bHRzID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSgpCitkZWYgcmVnaXN0ZXJSZXN1bHQocmVzdWx0KToKKyAgICBfcmVzdWx0c1tyZXN1bHRdID0gMQorCitkZWYgcmVtb3ZlUmVzdWx0KHJlc3VsdCk6CisgICAgcmV0dXJuIGJvb2woX3Jlc3VsdHMucG9wKHJlc3VsdCwgTm9uZSkpCisKK19pbnRlcnJ1cHRfaGFuZGxlciA9IE5vbmUKK2RlZiBpbnN0YWxsSGFuZGxlcigpOgorICAgIGdsb2JhbCBfaW50ZXJydXB0X2hhbmRsZXIKKyAgICBpZiBfaW50ZXJydXB0X2hhbmRsZXIgaXMgTm9uZToKKyAgICAgICAgZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorICAgICAgICBfaW50ZXJydXB0X2hhbmRsZXIgPSBfSW50ZXJydXB0SGFuZGxlcihkZWZhdWx0X2hhbmRsZXIpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgX2ludGVycnVwdF9oYW5kbGVyKQorCisKK2RlZiByZW1vdmVIYW5kbGVyKG1ldGhvZD1Ob25lKToKKyAgICBpZiBtZXRob2QgaXMgbm90IE5vbmU6CisgICAgICAgIEB3cmFwcyhtZXRob2QpCisgICAgICAgIGRlZiBpbm5lcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgaW5pdGlhbCA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgICAgIHJlbW92ZUhhbmRsZXIoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2QoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIGluaXRpYWwpCisgICAgICAgIHJldHVybiBpbm5lcgorCisgICAgZ2xvYmFsIF9pbnRlcnJ1cHRfaGFuZGxlcgorICAgIGlmIF9pbnRlcnJ1cHRfaGFuZGxlciBpcyBub3QgTm9uZToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBfaW50ZXJydXB0X2hhbmRsZXIuZGVmYXVsdF9oYW5kbGVyKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3N1aXRlLnB5IGIvTGliL3VuaXR0ZXN0L3N1aXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYWUyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKQEAgLTAsMCArMSwyODcgQEAKKyIiIlRlc3RTdWl0ZSIiIgorCitpbXBvcnQgc3lzCisKK2Zyb20gLiBpbXBvcnQgY2FzZQorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fdW5pdHRlc3QgPSBUcnVlCisKKworY2xhc3MgQmFzZVRlc3RTdWl0ZShvYmplY3QpOgorICAgICIiIkEgc2ltcGxlIHRlc3Qgc3VpdGUgdGhhdCBkb2Vzbid0IHByb3ZpZGUgY2xhc3Mgb3IgbW9kdWxlIHNoYXJlZCBmaXh0dXJlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdHM9KCkpOgorICAgICAgICBzZWxmLl90ZXN0cyA9IFtdCisgICAgICAgIHNlbGYuYWRkVGVzdHModGVzdHMpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPCVzIHRlc3RzPSVzPiIgJSAodXRpbC5zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIGxpc3Qoc2VsZikpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gbGlzdChzZWxmKSA9PSBsaXN0KG90aGVyKQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgorCisgICAgIyBDYW4ndCBndWFyYW50ZWUgaGFzaCBpbnZhcmlhbnQsIHNvIGZsYWcgYXMgdW5oYXNoYWJsZQorICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLl90ZXN0cykKKworICAgIGRlZiBjb3VudFRlc3RDYXNlcyhzZWxmKToKKyAgICAgICAgY2FzZXMgPSAwCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGY6CisgICAgICAgICAgICBjYXNlcyArPSB0ZXN0LmNvdW50VGVzdENhc2VzKCkKKyAgICAgICAgcmV0dXJuIGNhc2VzCisKKyAgICBkZWYgYWRkVGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgIyBzYW5pdHkgY2hlY2tzCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHRlc3QsICdfX2NhbGxfXycpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ7fSBpcyBub3QgY2FsbGFibGUiLmZvcm1hdChyZXByKHRlc3QpKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXN0LCB0eXBlKSBhbmQgaXNzdWJjbGFzcyh0ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXNlLlRlc3RDYXNlLCBUZXN0U3VpdGUpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdENhc2VzIGFuZCBUZXN0U3VpdGVzIG11c3QgYmUgaW5zdGFudGlhdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVmb3JlIHBhc3NpbmcgdGhlbSB0byBhZGRUZXN0KCkiKQorICAgICAgICBzZWxmLl90ZXN0cy5hcHBlbmQodGVzdCkKKworICAgIGRlZiBhZGRUZXN0cyhzZWxmLCB0ZXN0cyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdHMsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0ZXN0cyBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIHRlc3RzLCBub3QgYSBzdHJpbmciKQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHNlbGYuYWRkVGVzdCh0ZXN0KQorCisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICAgICAgaWYgcmVzdWx0LnNob3VsZFN0b3A6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bigqYXJncywgKiprd2RzKQorCisgICAgZGVmIGRlYnVnKHNlbGYpOgorICAgICAgICAiIiJSdW4gdGhlIHRlc3RzIHdpdGhvdXQgY29sbGVjdGluZyBlcnJvcnMgaW4gYSBUZXN0UmVzdWx0IiIiCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGY6CisgICAgICAgICAgICB0ZXN0LmRlYnVnKCkKKworCitjbGFzcyBUZXN0U3VpdGUoQmFzZVRlc3RTdWl0ZSk6CisgICAgIiIiQSB0ZXN0IHN1aXRlIGlzIGEgY29tcG9zaXRlIHRlc3QgY29uc2lzdGluZyBvZiBhIG51bWJlciBvZiBUZXN0Q2FzZXMuCisKKyAgICBGb3IgdXNlLCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgVGVzdFN1aXRlLCB0aGVuIGFkZCB0ZXN0IGNhc2UgaW5zdGFuY2VzLgorICAgIFdoZW4gYWxsIHRlc3RzIGhhdmUgYmVlbiBhZGRlZCwgdGhlIHN1aXRlIGNhbiBiZSBwYXNzZWQgdG8gYSB0ZXN0CisgICAgcnVubmVyLCBzdWNoIGFzIFRleHRUZXN0UnVubmVyLiBJdCB3aWxsIHJ1biB0aGUgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzCisgICAgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBhZGRlZCwgYWdncmVnYXRpbmcgdGhlIHJlc3VsdHMuIFdoZW4KKyAgICBzdWJjbGFzc2luZywgZG8gbm90IGZvcmdldCB0byBjYWxsIHRoZSBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yLgorICAgICIiIgorCisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQsIGRlYnVnPUZhbHNlKToKKyAgICAgICAgdG9wTGV2ZWwgPSBGYWxzZQorICAgICAgICBpZiBnZXRhdHRyKHJlc3VsdCwgJ190ZXN0UnVuRW50ZXJlZCcsIEZhbHNlKSBpcyBGYWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5fdGVzdFJ1bkVudGVyZWQgPSB0b3BMZXZlbCA9IFRydWUKKworICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICAgICAgaWYgcmVzdWx0LnNob3VsZFN0b3A6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgX2lzbm90c3VpdGUodGVzdCk6CisgICAgICAgICAgICAgICAgc2VsZi5fdGVhckRvd25QcmV2aW91c0NsYXNzKHRlc3QsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVNb2R1bGVGaXh0dXJlKHRlc3QsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVDbGFzc1NldFVwKHRlc3QsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXN1bHQuX3ByZXZpb3VzVGVzdENsYXNzID0gdGVzdC5fX2NsYXNzX18KKworICAgICAgICAgICAgICAgIGlmIChnZXRhdHRyKHRlc3QuX19jbGFzc19fLCAnX2NsYXNzU2V0dXBGYWlsZWQnLCBGYWxzZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihyZXN1bHQsICdfbW9kdWxlU2V0VXBGYWlsZWQnLCBGYWxzZSkpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBub3QgZGVidWc6CisgICAgICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRlc3QuZGVidWcoKQorCisgICAgICAgIGlmIHRvcExldmVsOgorICAgICAgICAgICAgc2VsZi5fdGVhckRvd25QcmV2aW91c0NsYXNzKE5vbmUsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZU1vZHVsZVRlYXJEb3duKHJlc3VsdCkKKyAgICAgICAgICAgIHJlc3VsdC5fdGVzdFJ1bkVudGVyZWQgPSBGYWxzZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZGVidWcoc2VsZik6CisgICAgICAgICIiIlJ1biB0aGUgdGVzdHMgd2l0aG91dCBjb2xsZWN0aW5nIGVycm9ycyBpbiBhIFRlc3RSZXN1bHQiIiIKKyAgICAgICAgZGVidWcgPSBfRGVidWdSZXN1bHQoKQorICAgICAgICBzZWxmLnJ1bihkZWJ1ZywgVHJ1ZSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBkZWYgX2hhbmRsZUNsYXNzU2V0VXAoc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICAgICAgcHJldmlvdXNDbGFzcyA9IGdldGF0dHIocmVzdWx0LCAnX3ByZXZpb3VzVGVzdENsYXNzJywgTm9uZSkKKyAgICAgICAgY3VycmVudENsYXNzID0gdGVzdC5fX2NsYXNzX18KKyAgICAgICAgaWYgY3VycmVudENsYXNzID09IHByZXZpb3VzQ2xhc3M6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgcmVzdWx0Ll9tb2R1bGVTZXRVcEZhaWxlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBnZXRhdHRyKGN1cnJlbnRDbGFzcywgIl9fdW5pdHRlc3Rfc2tpcF9fIiwgRmFsc2UpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VycmVudENsYXNzLl9jbGFzc1NldHVwRmFpbGVkID0gRmFsc2UKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgdGVzdCBtYXkgYWN0dWFsbHkgYmUgYSBmdW5jdGlvbgorICAgICAgICAgICAgIyBzbyBpdHMgY2xhc3Mgd2lsbCBiZSBhIGJ1aWx0aW4tdHlwZQorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNldFVwQ2xhc3MgPSBnZXRhdHRyKGN1cnJlbnRDbGFzcywgJ3NldFVwQ2xhc3MnLCBOb25lKQorICAgICAgICBpZiBzZXRVcENsYXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNldFVwQ2xhc3MoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCBfRGVidWdSZXN1bHQpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGN1cnJlbnRDbGFzcy5fY2xhc3NTZXR1cEZhaWxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSB1dGlsLnN0cmNsYXNzKGN1cnJlbnRDbGFzcykKKyAgICAgICAgICAgICAgICBlcnJvck5hbWUgPSAnc2V0VXBDbGFzcyAoJXMpJyAlIGNsYXNzTmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZENsYXNzT3JNb2R1bGVMZXZlbEV4Y2VwdGlvbihyZXN1bHQsIGUsIGVycm9yTmFtZSkKKworCisgICAgZGVmIF9nZXRfcHJldmlvdXNfbW9kdWxlKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIHByZXZpb3VzTW9kdWxlID0gTm9uZQorICAgICAgICBwcmV2aW91c0NsYXNzID0gZ2V0YXR0cihyZXN1bHQsICdfcHJldmlvdXNUZXN0Q2xhc3MnLCBOb25lKQorICAgICAgICBpZiBwcmV2aW91c0NsYXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJldmlvdXNNb2R1bGUgPSBwcmV2aW91c0NsYXNzLl9fbW9kdWxlX18KKyAgICAgICAgcmV0dXJuIHByZXZpb3VzTW9kdWxlCisKKworICAgIGRlZiBfaGFuZGxlTW9kdWxlRml4dHVyZShzZWxmLCB0ZXN0LCByZXN1bHQpOgorICAgICAgICBwcmV2aW91c01vZHVsZSA9IHNlbGYuX2dldF9wcmV2aW91c19tb2R1bGUocmVzdWx0KQorICAgICAgICBjdXJyZW50TW9kdWxlID0gdGVzdC5fX2NsYXNzX18uX19tb2R1bGVfXworICAgICAgICBpZiBjdXJyZW50TW9kdWxlID09IHByZXZpb3VzTW9kdWxlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5faGFuZGxlTW9kdWxlVGVhckRvd24ocmVzdWx0KQorCisgICAgICAgIHJlc3VsdC5fbW9kdWxlU2V0VXBGYWlsZWQgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tjdXJyZW50TW9kdWxlXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2V0VXBNb2R1bGUgPSBnZXRhdHRyKG1vZHVsZSwgJ3NldFVwTW9kdWxlJywgTm9uZSkKKyAgICAgICAgaWYgc2V0VXBNb2R1bGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2V0VXBNb2R1bGUoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgX0RlYnVnUmVzdWx0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuX21vZHVsZVNldFVwRmFpbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVycm9yTmFtZSA9ICdzZXRVcE1vZHVsZSAoJXMpJyAlIGN1cnJlbnRNb2R1bGUKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRDbGFzc09yTW9kdWxlTGV2ZWxFeGNlcHRpb24ocmVzdWx0LCBlLCBlcnJvck5hbWUpCisKKyAgICBkZWYgX2FkZENsYXNzT3JNb2R1bGVMZXZlbEV4Y2VwdGlvbihzZWxmLCByZXN1bHQsIGV4Y2VwdGlvbiwgZXJyb3JOYW1lKToKKyAgICAgICAgZXJyb3IgPSBfRXJyb3JIb2xkZXIoZXJyb3JOYW1lKQorICAgICAgICBhZGRTa2lwID0gZ2V0YXR0cihyZXN1bHQsICdhZGRTa2lwJywgTm9uZSkKKyAgICAgICAgaWYgYWRkU2tpcCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShleGNlcHRpb24sIGNhc2UuU2tpcFRlc3QpOgorICAgICAgICAgICAgYWRkU2tpcChlcnJvciwgc3RyKGV4Y2VwdGlvbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3IoZXJyb3IsIHN5cy5leGNfaW5mbygpKQorCisgICAgZGVmIF9oYW5kbGVNb2R1bGVUZWFyRG93bihzZWxmLCByZXN1bHQpOgorICAgICAgICBwcmV2aW91c01vZHVsZSA9IHNlbGYuX2dldF9wcmV2aW91c19tb2R1bGUocmVzdWx0KQorICAgICAgICBpZiBwcmV2aW91c01vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHJlc3VsdC5fbW9kdWxlU2V0VXBGYWlsZWQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1twcmV2aW91c01vZHVsZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdGVhckRvd25Nb2R1bGUgPSBnZXRhdHRyKG1vZHVsZSwgJ3RlYXJEb3duTW9kdWxlJywgTm9uZSkKKyAgICAgICAgaWYgdGVhckRvd25Nb2R1bGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVhckRvd25Nb2R1bGUoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCBfRGVidWdSZXN1bHQpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVycm9yTmFtZSA9ICd0ZWFyRG93bk1vZHVsZSAoJXMpJyAlIHByZXZpb3VzTW9kdWxlCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkQ2xhc3NPck1vZHVsZUxldmVsRXhjZXB0aW9uKHJlc3VsdCwgZSwgZXJyb3JOYW1lKQorCisgICAgZGVmIF90ZWFyRG93blByZXZpb3VzQ2xhc3Moc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICAgICAgcHJldmlvdXNDbGFzcyA9IGdldGF0dHIocmVzdWx0LCAnX3ByZXZpb3VzVGVzdENsYXNzJywgTm9uZSkKKyAgICAgICAgY3VycmVudENsYXNzID0gdGVzdC5fX2NsYXNzX18KKyAgICAgICAgaWYgY3VycmVudENsYXNzID09IHByZXZpb3VzQ2xhc3M6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZ2V0YXR0cihwcmV2aW91c0NsYXNzLCAnX2NsYXNzU2V0dXBGYWlsZWQnLCBGYWxzZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZ2V0YXR0cihyZXN1bHQsICdfbW9kdWxlU2V0VXBGYWlsZWQnLCBGYWxzZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZ2V0YXR0cihwcmV2aW91c0NsYXNzLCAiX191bml0dGVzdF9za2lwX18iLCBGYWxzZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0ZWFyRG93bkNsYXNzID0gZ2V0YXR0cihwcmV2aW91c0NsYXNzLCAndGVhckRvd25DbGFzcycsIE5vbmUpCisgICAgICAgIGlmIHRlYXJEb3duQ2xhc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVhckRvd25DbGFzcygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCBfRGVidWdSZXN1bHQpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IHV0aWwuc3RyY2xhc3MocHJldmlvdXNDbGFzcykKKyAgICAgICAgICAgICAgICBlcnJvck5hbWUgPSAndGVhckRvd25DbGFzcyAoJXMpJyAlIGNsYXNzTmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZENsYXNzT3JNb2R1bGVMZXZlbEV4Y2VwdGlvbihyZXN1bHQsIGUsIGVycm9yTmFtZSkKKworCitjbGFzcyBfRXJyb3JIb2xkZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBQbGFjZWhvbGRlciBmb3IgYSBUZXN0Q2FzZSBpbnNpZGUgYSByZXN1bHQuIEFzIGZhciBhcyBhIFRlc3RSZXN1bHQKKyAgICBpcyBjb25jZXJuZWQsIHRoaXMgbG9va3MgZXhhY3RseSBsaWtlIGEgdW5pdCB0ZXN0LiBVc2VkIHRvIGluc2VydAorICAgIGFyYml0cmFyeSBlcnJvcnMgaW50byBhIHRlc3Qgc3VpdGUgcnVuLgorICAgICIiIgorICAgICMgSW5zcGlyZWQgYnkgdGhlIEVycm9ySG9sZGVyIGZyb20gVHdpc3RlZDoKKyAgICAjIGh0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS90cmFjL2Jyb3dzZXIvdHJ1bmsvdHdpc3RlZC90cmlhbC9ydW5uZXIucHkKKworICAgICMgYXR0cmlidXRlIHVzZWQgYnkgVGVzdFJlc3VsdC5fZXhjX2luZm9fdG9fc3RyaW5nCisgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kZXNjcmlwdGlvbgorCisgICAgZGVmIHNob3J0RGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPEVycm9ySG9sZGVyIGRlc2NyaXB0aW9uPSVyPiIgJSAoc2VsZi5kZXNjcmlwdGlvbiwpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaWQoKQorCisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgorICAgICAgICAjIGNvdWxkIGNhbGwgcmVzdWx0LmFkZEVycm9yKC4uLikgLSBidXQgdGhpcyB0ZXN0LWxpa2Ugb2JqZWN0CisgICAgICAgICMgc2hvdWxkbid0IGJlIHJ1biBhbnl3YXkKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bihyZXN1bHQpCisKKyAgICBkZWYgY291bnRUZXN0Q2FzZXMoc2VsZik6CisgICAgICAgIHJldHVybiAwCisKK2RlZiBfaXNub3RzdWl0ZSh0ZXN0KToKKyAgICAiQSBjcnVkZSB3YXkgdG8gdGVsbCBhcGFydCB0ZXN0Y2FzZXMgYW5kIHN1aXRlcyB3aXRoIGR1Y2stdHlwaW5nIgorICAgIHRyeToKKyAgICAgICAgaXRlcih0ZXN0KQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgX0RlYnVnUmVzdWx0KG9iamVjdCk6CisgICAgIlVzZWQgYnkgdGhlIFRlc3RTdWl0ZSB0byBob2xkIHByZXZpb3VzIGNsYXNzIHdoZW4gcnVubmluZyBpbiBkZWJ1Zy4iCisgICAgX3ByZXZpb3VzVGVzdENsYXNzID0gTm9uZQorICAgIF9tb2R1bGVTZXRVcEZhaWxlZCA9IEZhbHNlCisgICAgc2hvdWxkU3RvcCA9IEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC9fX2luaXRfXy5weSBiL0xpYi91bml0dGVzdC90ZXN0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjczMGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCisKK2hlcmUgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCitsb2FkZXIgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlcgorCitkZWYgc3VpdGUoKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIoaGVyZSk6CisgICAgICAgIGlmIGZuLnN0YXJ0c3dpdGgoInRlc3QiKSBhbmQgZm4uZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgbW9kbmFtZSA9ICJ1bml0dGVzdC50ZXN0LiIgKyBmbls6LTNdCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZG5hbWUpCisgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1ttb2RuYW1lXQorICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUpKQorICAgIHJldHVybiBzdWl0ZQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0ic3VpdGUiKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvZHVtbXkucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9kdW1teS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGYxNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvZHVtbXkucHkKQEAgLTAsMCArMSBAQAorIyBFbXB0eSBtb2R1bGUgZm9yIHRlc3RpbmcgdGhlIGxvYWRpbmcgb2YgbW9kdWxlcwpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjZjAzYgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKQEAgLTAsMCArMSwxMTkgQEAKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3RIYXNoaW5nKG9iamVjdCk6CisgICAgIiIiVXNlZCBhcyBhIG1peGluIGZvciBUZXN0Q2FzZSIiIgorCisgICAgIyBDaGVjayBmb3IgYSB2YWxpZCBfX2hhc2hfXyBpbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIGZvciBvYmpfMSwgb2JqXzIgaW4gc2VsZi5lcV9wYWlyczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzaChvYmpfMSkgPT0gaGFzaChvYmpfMik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXIgYW5kICVyIGRvIG5vdCBoYXNoIGVxdWFsIiAlIChvYmpfMSwgb2JqXzIpKQorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUHJvYmxlbSBoYXNoaW5nICVyIGFuZCAlcjogJXMiICUgKG9ial8xLCBvYmpfMiwgZSkpCisKKyAgICAgICAgZm9yIG9ial8xLCBvYmpfMiBpbiBzZWxmLm5lX3BhaXJzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGhhc2gob2JqXzEpID09IGhhc2gob2JqXzIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzIGFuZCAlcyBoYXNoIGVxdWFsLCBidXQgc2hvdWxkbid0IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqXzEsIG9ial8yKSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlByb2JsZW0gaGFzaGluZyAlcyBhbmQgJXM6ICVzIiAlIChvYmpfMSwgb2JqXzIsIGUpKQorCisKK2NsYXNzIFRlc3RFcXVhbGl0eShvYmplY3QpOgorICAgICIiIlVzZWQgYXMgYSBtaXhpbiBmb3IgVGVzdENhc2UiIiIKKworICAgICMgQ2hlY2sgZm9yIGEgdmFsaWQgX19lcV9fIGltcGxlbWVudGF0aW9uCisgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIGZvciBvYmpfMSwgb2JqXzIgaW4gc2VsZi5lcV9wYWlyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqXzEsIG9ial8yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmpfMiwgb2JqXzEpCisKKyAgICAjIENoZWNrIGZvciBhIHZhbGlkIF9fbmVfXyBpbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X25lKHNlbGYpOgorICAgICAgICBmb3Igb2JqXzEsIG9ial8yIGluIHNlbGYubmVfcGFpcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9ial8xLCBvYmpfMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob2JqXzIsIG9ial8xKQorCisKK2NsYXNzIExvZ2dpbmdSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZyk6CisgICAgICAgIHNlbGYuX2V2ZW50cyA9IGxvZworICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdGFydFRlc3QnKQorICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5zdGFydFRlc3QodGVzdCkKKworICAgIGRlZiBzdGFydFRlc3RSdW4oc2VsZik6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0YXJ0VGVzdFJ1bicpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdFJ1bigpCisKKyAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0b3BUZXN0JykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RvcFRlc3QodGVzdCkKKworICAgIGRlZiBzdG9wVGVzdFJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RvcFRlc3RSdW4nKQorICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5zdG9wVGVzdFJ1bigpCisKKyAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEZhaWx1cmUnKQorICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRGYWlsdXJlKCphcmdzKQorCisgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTdWNjZXNzJykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkU3VjY2VzcygqYXJncykKKworICAgIGRlZiBhZGRFcnJvcihzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEVycm9yJykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkRXJyb3IoKmFyZ3MpCisKKyAgICBkZWYgYWRkU2tpcChzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFNraXAnKQorICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRTa2lwKCphcmdzKQorCisgICAgZGVmIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEV4cGVjdGVkRmFpbHVyZScpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZEV4cGVjdGVkRmFpbHVyZSgqYXJncykKKworICAgIGRlZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCisKKworY2xhc3MgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4ob2JqZWN0KToKKyAgICAiIiJBbiBvYmplY3QgaG9ub3VyaW5nIFRlc3RSZXN1bHQgYmVmb3JlIHN0YXJ0VGVzdFJ1bi9zdG9wVGVzdFJ1bi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5mYWlsdXJlcyA9IFtdCisgICAgICAgIHNlbGYuZXJyb3JzID0gW10KKyAgICAgICAgc2VsZi50ZXN0c1J1biA9IDAKKyAgICAgICAgc2VsZi5za2lwcGVkID0gW10KKyAgICAgICAgc2VsZi5leHBlY3RlZEZhaWx1cmVzID0gW10KKyAgICAgICAgc2VsZi51bmV4cGVjdGVkU3VjY2Vzc2VzID0gW10KKyAgICAgICAgc2VsZi5zaG91bGRTdG9wID0gRmFsc2UKKworICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wVGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGFkZEVycm9yKHNlbGYsIHRlc3QpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCB0ZXN0KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB3YXNTdWNjZXNzZnVsKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NWNhOTEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKQEAgLTAsMCArMSwyOTIgQEAKK2ltcG9ydCBkYXRldGltZQorCitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0X0Fzc2VydGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X0FsbW9zdEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEuMDAwMDAwMDEsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgxLjAwMDAwMDEsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsLCAxLjAwMDAwMDEsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsLCAxLjAwMDAwMDAxLCAxLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxLjEsIDEuMCwgcGxhY2VzPTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCwgMS4xLCAxLjAsIHBsYWNlcz0xKQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMCwgLjErLjFqLCBwbGFjZXM9MCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgwLCAuMSsuMWosIHBsYWNlcz0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwsIDAsIC4xKy4xaiwgcGxhY2VzPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCwgMCwgLjErLjFqLCBwbGFjZXM9MCkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KCdpbmYnKSwgZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KCdpbmYnKSwgZmxvYXQoJ2luZicpKQorCisgICAgZGVmIHRlc3RfQW1vc3RFcXVhbFdpdGhEZWx0YShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxLjEsIDEuMCwgZGVsdGE9MC41KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEuMCwgMS4xLCBkZWx0YT0wLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMS4xLCAxLjAsIGRlbHRhPTAuMDUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMS4wLCAxLjEsIGRlbHRhPTAuMDUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEFsbW9zdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLjEsIDEuMCwgZGVsdGE9MC4wNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLjEsIDEuMCwgZGVsdGE9MC41KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMS4xLCAxLjAsIHBsYWNlcz0yLCBkZWx0YT0yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMSwgMS4wLCBwbGFjZXM9MiwgZGVsdGE9MikKKworICAgICAgICBmaXJzdCA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpCisgICAgICAgIHNlY29uZCA9IGZpcnN0ICsgZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YT1kYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz0yMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YT1kYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz01KSkKKworICAgIGRlZiB0ZXN0X2Fzc2VydFJhaXNlcyhzZWxmKToKKyAgICAgICAgZGVmIF9yYWlzZShlKToKKyAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIF9yYWlzZSwgS2V5RXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBfcmFpc2UsIEtleUVycm9yKCJrZXkiKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogTm9uZSkKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiS2V5RXJyb3Igbm90IHJhaXNlZCIsIGUuYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGZhaWwiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgX3JhaXNlLCBWYWx1ZUVycm9yKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGxldCBleGNlcHRpb24gcGFzcyB0aHJvdWdoIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcikgYXMgY206CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjbS5leGNlcHRpb24sIGUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigia2V5IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJLZXlFcnJvciBub3QgcmFpc2VkIiwgZS5hcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJhc3NlcnRSYWlzZXMoKSBkaWRuJ3QgZmFpbCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImFzc2VydFJhaXNlcygpIGRpZG4ndCBsZXQgZXhjZXB0aW9uIHBhc3MgdGhyb3VnaCIpCisKKyAgICBkZWYgdGVzdEFzc2VydE5vdFJlZ2V4cE1hdGNoZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90UmVnZXhwTWF0Y2hlcygnQWxhIG1hIGtvdGEnLCByJ3IrJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RSZWdleHBNYXRjaGVzKCdBbGEgbWEga290YScsIHInay50JywgJ01lc3NhZ2UnKQorICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiJ2tvdCciLCBlLmFyZ3NbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdNZXNzYWdlJywgZS5hcmdzWzBdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnROb3RSZWdleHBNYXRjaGVzIHNob3VsZCBoYXZlIGZhaWxlZC4nKQorCisKK2NsYXNzIFRlc3RMb25nTWVzc2FnZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHRoZSBpbmRpdmlkdWFsIGFzc2VydHMgaG9ub3VyIGxvbmdNZXNzYWdlLgorICAgIFRoaXMgYWN0dWFsbHkgdGVzdHMgYWxsIHRoZSBtZXNzYWdlIGJlaGF2aW91ciBmb3IKKyAgICBhc3NlcnRzIHRoYXQgdXNlIGxvbmdNZXNzYWdlLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0YWJsZVRlc3RGYWxzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBsb25nTWVzc2FnZSA9IEZhbHNlCisgICAgICAgICAgICBmYWlsdXJlRXhjZXB0aW9uID0gc2VsZi5mYWlsdXJlRXhjZXB0aW9uCisKKyAgICAgICAgICAgIGRlZiB0ZXN0VGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdGFibGVUZXN0VHJ1ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBsb25nTWVzc2FnZSA9IFRydWUKKyAgICAgICAgICAgIGZhaWx1cmVFeGNlcHRpb24gPSBzZWxmLmZhaWx1cmVFeGNlcHRpb24KKworICAgICAgICAgICAgZGVmIHRlc3RUZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLnRlc3RhYmxlVHJ1ZSA9IFRlc3RhYmxlVGVzdFRydWUoJ3Rlc3RUZXN0JykKKyAgICAgICAgc2VsZi50ZXN0YWJsZUZhbHNlID0gVGVzdGFibGVUZXN0RmFsc2UoJ3Rlc3RUZXN0JykKKworICAgIGRlZiB0ZXN0RGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1bml0dGVzdC5UZXN0Q2FzZS5sb25nTWVzc2FnZSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdE1zZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRlc3RhYmxlRmFsc2UuX2Zvcm1hdE1lc3NhZ2UoTm9uZSwgImZvbyIpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRlc3RhYmxlRmFsc2UuX2Zvcm1hdE1lc3NhZ2UoImZvbyIsICJiYXIiKSwgImZvbyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRlc3RhYmxlVHJ1ZS5fZm9ybWF0TWVzc2FnZShOb25lLCAiZm9vIiksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGVzdGFibGVUcnVlLl9mb3JtYXRNZXNzYWdlKCJmb28iLCAiYmFyIiksICJiYXIgOiBmb28iKQorCisgICAgICAgICMgVGhpcyBibG93cyB1cCBpZiBfZm9ybWF0TWVzc2FnZSB1c2VzIHN0cmluZyBjb25jYXRlbmF0aW9uCisgICAgICAgIHNlbGYudGVzdGFibGVUcnVlLl9mb3JtYXRNZXNzYWdlKG9iamVjdCgpLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdE1lc3NhZ2VfdW5pY29kZV9lcnJvcihzZWxmKToKKyAgICAgICAgb25lID0gJycuam9pbihjaHIoaSkgZm9yIGkgaW4gcmFuZ2UoMjU1KSkKKyAgICAgICAgIyB0aGlzIHVzZWQgdG8gY2F1c2UgYSBVbmljb2RlRGVjb2RlRXJyb3IgY29uc3RydWN0aW5nIG1zZworICAgICAgICBzZWxmLnRlc3RhYmxlVHJ1ZS5fZm9ybWF0TWVzc2FnZShvbmUsIHUnXHVGRkZEJykKKworICAgIGRlZiBhc3NlcnRNZXNzYWdlcyhzZWxmLCBtZXRob2ROYW1lLCBhcmdzLCBlcnJvcnMpOgorICAgICAgICBkZWYgZ2V0TWV0aG9kKGkpOgorICAgICAgICAgICAgdXNlVGVzdGFibGVGYWxzZSAgPSBpIDwgMgorICAgICAgICAgICAgaWYgdXNlVGVzdGFibGVGYWxzZToKKyAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi50ZXN0YWJsZUZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRlc3QgPSBzZWxmLnRlc3RhYmxlVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIodGVzdCwgbWV0aG9kTmFtZSkKKworICAgICAgICBmb3IgaSwgZXhwZWN0ZWRfcmVnZXhwIGluIGVudW1lcmF0ZShlcnJvcnMpOgorICAgICAgICAgICAgdGVzdE1ldGhvZCA9IGdldE1ldGhvZChpKQorICAgICAgICAgICAga3dhcmdzID0ge30KKyAgICAgICAgICAgIHdpdGhNc2cgPSBpICUgMgorICAgICAgICAgICAgaWYgd2l0aE1zZzoKKyAgICAgICAgICAgICAgICBrd2FyZ3MgPSB7Im1zZyI6ICJvb3BzIn0KKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4cD1leHBlY3RlZF9yZWdleHApOgorICAgICAgICAgICAgICAgIHRlc3RNZXRob2QoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIHRlc3RBc3NlcnRUcnVlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRUcnVlJywgKEZhbHNlLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeRmFsc2UgaXMgbm90IHRydWUkIiwgIl5vb3BzJCIsICJeRmFsc2UgaXMgbm90IHRydWUkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5GYWxzZSBpcyBub3QgdHJ1ZSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydEZhbHNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRGYWxzZScsIChUcnVlLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeVHJ1ZSBpcyBub3QgZmFsc2UkIiwgIl5vb3BzJCIsICJeVHJ1ZSBpcyBub3QgZmFsc2UkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5UcnVlIGlzIG5vdCBmYWxzZSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdE5vdEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnROb3RFcXVhbCcsICgxLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4xID09IDEkIiwgIl5vb3BzJCIsICJeMSA9PSAxJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSA9PSAxIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QWxtb3N0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydEFsbW9zdEVxdWFsJywgKDEsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjEgIT0gMiB3aXRoaW4gNyBwbGFjZXMkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSAhPSAyIHdpdGhpbiA3IHBsYWNlcyQiLCAiXjEgIT0gMiB3aXRoaW4gNyBwbGFjZXMgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3ROb3RBbG1vc3RFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0Tm90QWxtb3N0RXF1YWwnLCAoMSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSA9PSAxIHdpdGhpbiA3IHBsYWNlcyQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4xID09IDEgd2l0aGluIDcgcGxhY2VzJCIsICJeMSA9PSAxIHdpdGhpbiA3IHBsYWNlcyA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdF9iYXNlQXNzZXJ0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ19iYXNlQXNzZXJ0RXF1YWwnLCAoMSwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSAhPSAyJCIsICJeb29wcyQiLCAiXjEgIT0gMiQiLCAiXjEgIT0gMiA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydFNlcXVlbmNlRXF1YWwoc2VsZik6CisgICAgICAgICMgRXJyb3IgbWVzc2FnZXMgYXJlIG11bHRpbGluZSBzbyBub3QgdGVzdGluZyBvbiBmdWxsIG1lc3NhZ2UKKyAgICAgICAgIyBhc3NlcnRUdXBsZUVxdWFsIGFuZCBhc3NlcnRMaXN0RXF1YWwgZGVsZWdhdGUgdG8gdGhpcyBtZXRob2QKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0U2VxdWVuY2VFcXVhbCcsIChbXSwgW05vbmVdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIlwrIFxbTm9uZVxdJCIsICJeb29wcyQiLCByIlwrIFxbTm9uZVxdJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXCsgXFtOb25lXF0gOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRTZXRFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0U2V0RXF1YWwnLCAoc2V0KCksIHNldChbTm9uZV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIk5vbmUkIiwgIl5vb3BzJCIsICJOb25lJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0SW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydEluJywgKE5vbmUsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ15Ob25lIG5vdCBmb3VuZCBpbiBcW1xdJCcsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXk5vbmUgbm90IGZvdW5kIGluIFxbXF0kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ15Ob25lIG5vdCBmb3VuZCBpbiBcW1xdIDogb29wcyQnXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0Tm90SW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydE5vdEluJywgKE5vbmUsIFtOb25lXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydeTm9uZSB1bmV4cGVjdGVkbHkgZm91bmQgaW4gXFtOb25lXF0kJywgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeTm9uZSB1bmV4cGVjdGVkbHkgZm91bmQgaW4gXFtOb25lXF0kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ15Ob25lIHVuZXhwZWN0ZWRseSBmb3VuZCBpbiBcW05vbmVcXSA6IG9vcHMkJ10pCisKKyAgICBkZWYgdGVzdEFzc2VydERpY3RFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0RGljdEVxdWFsJywgKHt9LCB7J2tleSc6ICd2YWx1ZSd9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbciJcKyBceydrZXknOiAndmFsdWUnXH0kIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcKyBceydrZXknOiAndmFsdWUnXH0kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwrIFx7J2tleSc6ICd2YWx1ZSdcfSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydERpY3RDb250YWluc1N1YnNldChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0JywgKHsna2V5JzogJ3ZhbHVlJ30sIHt9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl5NaXNzaW5nOiAna2V5JyQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5NaXNzaW5nOiAna2V5JyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXk1pc3Npbmc6ICdrZXknIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0SXRlbXNFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXRlbXNFcXVhbCcsIChbXSwgW05vbmVdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbciJcW05vbmVcXSQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcW05vbmVcXSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlxbTm9uZVxdIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TXVsdGlMaW5lRXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydE11bHRpTGluZUVxdWFsJywgKCIiLCAiZm9vIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3IiXCsgZm9vJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlwrIGZvbyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlwrIGZvbyA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydExlc3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydExlc3MnLCAoMiwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMiBub3QgbGVzcyB0aGFuIDEkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMiBub3QgbGVzcyB0aGFuIDEkIiwgIl4yIG5vdCBsZXNzIHRoYW4gMSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydExlc3NFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0TGVzc0VxdWFsJywgKDIsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjIgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAxJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjIgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAxJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMiBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRHcmVhdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRHcmVhdGVyJywgKDEsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjEgbm90IGdyZWF0ZXIgdGhhbiAyJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgbm90IGdyZWF0ZXIgdGhhbiAyJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSBub3QgZ3JlYXRlciB0aGFuIDIgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRHcmVhdGVyRXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydEdyZWF0ZXJFcXVhbCcsICgxLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4xIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMiQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4xIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMiQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0SXNOb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRJc05vbmUnLCAoJ25vdCBOb25lJywpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXidub3QgTm9uZScgaXMgbm90IE5vbmUkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeJ25vdCBOb25lJyBpcyBub3QgTm9uZSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXidub3QgTm9uZScgaXMgbm90IE5vbmUgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRJc05vdE5vbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydElzTm90Tm9uZScsIChOb25lLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJedW5leHBlY3RlZGx5IE5vbmUkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJedW5leHBlY3RlZGx5IE5vbmUkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl51bmV4cGVjdGVkbHkgTm9uZSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydElzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRJcycsIChOb25lLCAnZm9vJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeTm9uZSBpcyBub3QgJ2ZvbyckIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeTm9uZSBpcyBub3QgJ2ZvbyckIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5Ob25lIGlzIG5vdCAnZm9vJyA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydElzTm90KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRJc05vdCcsIChOb25lLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl51bmV4cGVjdGVkbHkgaWRlbnRpY2FsOiBOb25lJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXnVuZXhwZWN0ZWRseSBpZGVudGljYWw6IE5vbmUkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl51bmV4cGVjdGVkbHkgaWRlbnRpY2FsOiBOb25lIDogb29wcyQiXSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwMDAxMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKQEAgLTAsMCArMSwyNTIgQEAKK2ltcG9ydCBnYworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgd2Vha3JlZgorCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworCitpbXBvcnQgdW5pdHRlc3QKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAna2lsbCcpLCAiVGVzdCByZXF1aXJlcyBvcy5raWxsIikKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09IndpbjMyIiwgIlRlc3QgY2Fubm90IHJ1biBvbiBXaW5kb3dzIikKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICdmcmVlYnNkNicsICJUZXN0IGtpbGxzIHJlZ3J0ZXN0IG9uIGZyZWVic2Q2ICIKKyAgICAiaWYgdGhyZWFkcyBoYXZlIGJlZW4gdXNlZCIpCitjbGFzcyBUZXN0QnJlYWsodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9kZWZhdWx0X2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2VsZi5fZGVmYXVsdF9oYW5kbGVyKQorICAgICAgICB1bml0dGVzdC5zaWduYWxzLl9yZXN1bHRzID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSgpCisgICAgICAgIHVuaXR0ZXN0LnNpZ25hbHMuX2ludGVycnVwdF9oYW5kbGVyID0gTm9uZQorCisKKyAgICBkZWYgdGVzdEluc3RhbGxIYW5kbGVyKHNlbGYpOgorICAgICAgICBkZWZhdWx0X2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBkZWZhdWx0X2hhbmRsZXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIktleWJvYXJkSW50ZXJydXB0IG5vdCBoYW5kbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pdHRlc3Quc2lnbmFscy5faW50ZXJydXB0X2hhbmRsZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RSZWdpc3RlclJlc3VsdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHVuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKKworICAgICAgICBmb3IgcmVmIGluIHVuaXR0ZXN0LnNpZ25hbHMuX3Jlc3VsdHM6CisgICAgICAgICAgICBpZiByZWYgaXMgcmVzdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIHJlZiBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgib2RkIG9iamVjdCBpbiByZXN1bHQgc2V0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVzdWx0IG5vdCBmb3VuZCIpCisKKworICAgIGRlZiB0ZXN0SW50ZXJydXB0Q2F1Z2h0KHNlbGYpOgorICAgICAgICBkZWZhdWx0X2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKyAgICAgICAgdW5pdHRlc3QucmVnaXN0ZXJSZXN1bHQocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgICAgIGRlZiB0ZXN0KHJlc3VsdCk6CisgICAgICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICByZXN1bHQuYnJlYWtDYXVnaHQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnNob3VsZFN0b3ApCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiS2V5Ym9hcmRJbnRlcnJ1cHQgbm90IGhhbmRsZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LmJyZWFrQ2F1Z2h0KQorCisKKyAgICBkZWYgdGVzdFNlY29uZEludGVycnVwdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKyAgICAgICAgdW5pdHRlc3QucmVnaXN0ZXJSZXN1bHQocmVzdWx0KQorCisgICAgICAgIGRlZiB0ZXN0KHJlc3VsdCk6CisgICAgICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICByZXN1bHQuYnJlYWtDYXVnaHQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnNob3VsZFN0b3ApCisgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2Vjb25kIEtleWJvYXJkSW50ZXJydXB0IG5vdCByYWlzZWQiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlNlY29uZCBLZXlib2FyZEludGVycnVwdCBub3QgcmFpc2VkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5icmVha0NhdWdodCkKKworCisgICAgZGVmIHRlc3RUd29SZXN1bHRzKHNlbGYpOgorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHVuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKKyAgICAgICAgbmV3X2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisKKyAgICAgICAgcmVzdWx0MiA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIG5ld19oYW5kbGVyKQorCisgICAgICAgIHJlc3VsdDMgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAgICBkZWYgdGVzdChyZXN1bHQpOgorICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHSU5UKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIktleWJvYXJkSW50ZXJydXB0IG5vdCBoYW5kbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnNob3VsZFN0b3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQyLnNob3VsZFN0b3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0My5zaG91bGRTdG9wKQorCisKKyAgICBkZWYgdGVzdEhhbmRsZXJSZXBsYWNlZEJ1dENhbGxlZChzZWxmKToKKyAgICAgICAgIyBJZiBvdXIgaGFuZGxlciBoYXMgYmVlbiByZXBsYWNlZCAoaXMgbm8gbG9uZ2VyIGluc3RhbGxlZCkgYnV0IGlzCisgICAgICAgICMgY2FsbGVkIGJ5IHRoZSAqbmV3KiBoYW5kbGVyLCB0aGVuIGl0IGlzbid0IHNhZmUgdG8gZGVsYXkgdGhlCisgICAgICAgICMgU0lHSU5UIGFuZCB3ZSBzaG91bGQgaW1tZWRpYXRlbHkgZGVsZWdhdGUgdG8gdGhlIGRlZmF1bHQgaGFuZGxlcgorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisKKyAgICAgICAgaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgZGVmIG5ld19oYW5kbGVyKGZyYW1lLCBzaWdudW0pOgorICAgICAgICAgICAgaGFuZGxlcihmcmFtZSwgc2lnbnVtKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIG5ld19oYW5kbGVyKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZXBsYWNlZCBidXQgZGVsZWdhdGVkIGhhbmRsZXIgZG9lc24ndCByYWlzZSBpbnRlcnJ1cHQiKQorCisgICAgZGVmIHRlc3RSdW5uZXIoc2VsZik6CisgICAgICAgICMgQ3JlYXRpbmcgYSBUZXh0VGVzdFJ1bm5lciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudCBzaG91bGQKKyAgICAgICAgIyByZWdpc3RlciB0aGUgVGV4dFRlc3RSZXN1bHQgaXQgY3JlYXRlcworICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSkKKworICAgICAgICByZXN1bHQgPSBydW5uZXIucnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlc3VsdCwgdW5pdHRlc3Quc2lnbmFscy5fcmVzdWx0cykKKworICAgIGRlZiB0ZXN0V2Vha1JlZmVyZW5jZXMoc2VsZik6CisgICAgICAgICMgQ2FsbGluZyByZWdpc3RlclJlc3VsdCBvbiBhIHJlc3VsdCBzaG91bGQgbm90IGtlZXAgaXQgYWxpdmUKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHVuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKKworICAgICAgICByZWYgPSB3ZWFrcmVmLnJlZihyZXN1bHQpCisgICAgICAgIGRlbCByZXN1bHQKKworICAgICAgICAjIEZvciBub24tcmVmZXJlbmNlIGNvdW50aW5nIGltcGxlbWVudGF0aW9ucworICAgICAgICBnYy5jb2xsZWN0KCk7Z2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZigpKQorCisKKyAgICBkZWYgdGVzdFJlbW92ZVJlc3VsdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHVuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKKworICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bml0dGVzdC5yZW1vdmVSZXN1bHQocmVzdWx0KSkKKworICAgICAgICAjIFNob3VsZCB0aGlzIHJhaXNlIGFuIGVycm9yIGluc3RlYWQ/CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodW5pdHRlc3QucmVtb3ZlUmVzdWx0KHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuc2hvdWxkU3RvcCkKKworICAgIGRlZiB0ZXN0TWFpbkluc3RhbGxzSGFuZGxlcihzZWxmKToKKyAgICAgICAgZmFpbGZhc3QgPSBvYmplY3QoKQorICAgICAgICB0ZXN0ID0gb2JqZWN0KCkKKyAgICAgICAgdmVyYm9zaXR5ID0gb2JqZWN0KCkKKyAgICAgICAgcmVzdWx0ID0gb2JqZWN0KCkKKyAgICAgICAgZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorCisgICAgICAgIGNsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKKyAgICAgICAgICAgIGluaXRBcmdzID0gW10KKyAgICAgICAgICAgIHJ1bkFyZ3MgPSBbXQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5pbml0QXJncy5hcHBlbmQoKGFyZ3MsIGt3YXJncykpCisgICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICAgICAgICAgIHNlbGYucnVuQXJncy5hcHBlbmQodGVzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgY2xhc3MgUHJvZ3JhbSh1bml0dGVzdC5UZXN0UHJvZ3JhbSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY2F0Y2hicmVhayk6CisgICAgICAgICAgICAgICAgc2VsZi5leGl0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IHZlcmJvc2l0eQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBmYWlsZmFzdAorICAgICAgICAgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IGNhdGNoYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3RSdW5uZXIgPSBGYWtlUnVubmVyCisgICAgICAgICAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAorICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gTm9uZQorCisgICAgICAgIHAgPSBQcm9ncmFtKEZhbHNlKQorICAgICAgICBwLnJ1blRlc3RzKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIuaW5pdEFyZ3MsIFsoKCksIHsnYnVmZmVyJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcmJvc2l0eSc6IHZlcmJvc2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWxmYXN0JzogZmFpbGZhc3R9KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci5ydW5BcmdzLCBbdGVzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXN1bHQsIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIGRlZmF1bHRfaGFuZGxlcikKKworICAgICAgICBGYWtlUnVubmVyLmluaXRBcmdzID0gW10KKyAgICAgICAgRmFrZVJ1bm5lci5ydW5BcmdzID0gW10KKyAgICAgICAgcCA9IFByb2dyYW0oVHJ1ZSkKKyAgICAgICAgcC5ydW5UZXN0cygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLmluaXRBcmdzLCBbKCgpLCB7J2J1ZmZlcic6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJib3NpdHknOiB2ZXJib3NpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWlsZmFzdCc6IGZhaWxmYXN0fSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIucnVuQXJncywgW3Rlc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVzdWx0LCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBkZWZhdWx0X2hhbmRsZXIpCisKKyAgICBkZWYgdGVzdFJlbW92ZUhhbmRsZXIoc2VsZik6CisgICAgICAgIGRlZmF1bHRfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorICAgICAgICB1bml0dGVzdC5yZW1vdmVIYW5kbGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBkZWZhdWx0X2hhbmRsZXIpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IGNhbGxpbmcgcmVtb3ZlSGFuZGxlciBtdWx0aXBsZSB0aW1lcyBoYXMgbm8gaWxsLWVmZmVjdAorICAgICAgICB1bml0dGVzdC5yZW1vdmVIYW5kbGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBkZWZhdWx0X2hhbmRsZXIpCisKKyAgICBkZWYgdGVzdFJlbW92ZUhhbmRsZXJBc0RlY29yYXRvcihzZWxmKToKKyAgICAgICAgZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisKKyAgICAgICAgQHVuaXR0ZXN0LnJlbW92ZUhhbmRsZXIKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgICAgIHRlc3QoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIGRlZmF1bHRfaGFuZGxlcikKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTBlOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5CkBAIC0wLDAgKzEsMTA2MSBAQAoraW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSAuc3VwcG9ydCBpbXBvcnQgKAorICAgIFRlc3RFcXVhbGl0eSwgVGVzdEhhc2hpbmcsIExvZ2dpbmdSZXN1bHQsIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuCispCisKKworY2xhc3MgVGVzdChvYmplY3QpOgorICAgICJLZWVwIHRoZXNlIFRlc3RDYXNlIGNsYXNzZXMgb3V0IG9mIHRoZSBtYWluIG5hbWVzcGFjZSIKKworICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOiBwYXNzCisgICAgICAgIGRlZiB0ZXN0MShzZWxmKTogcGFzcworCisgICAgY2xhc3MgQmFyKEZvbyk6CisgICAgICAgIGRlZiB0ZXN0MihzZWxmKTogcGFzcworCisgICAgY2xhc3MgTG9nZ2luZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgIiIiQSB0ZXN0IGNhc2Ugd2hpY2ggbG9ncyBpdHMgY2FsbHMuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50cyk6CisgICAgICAgICAgICBzdXBlcihUZXN0LkxvZ2dpbmdUZXN0Q2FzZSwgc2VsZikuX19pbml0X18oJ3Rlc3QnKQorICAgICAgICAgICAgc2VsZi5ldmVudHMgPSBldmVudHMKKworICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoJ3NldFVwJykKKworICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgndGVzdCcpCisKKyAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCisKKworY2xhc3MgVGVzdF9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgVGVzdEVxdWFsaXR5LCBUZXN0SGFzaGluZyk6CisKKyAgICAjIyMgU2V0IHVwIGF0dHJpYnV0ZXMgdXNlZCBieSBpbmhlcml0ZWQgdGVzdHMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjIFVzZWQgYnkgVGVzdEhhc2hpbmcudGVzdF9oYXNoIGFuZCBUZXN0RXF1YWxpdHkudGVzdF9lcQorICAgIGVxX3BhaXJzID0gWyhUZXN0LkZvbygndGVzdDEnKSwgVGVzdC5Gb28oJ3Rlc3QxJykpXQorCisgICAgIyBVc2VkIGJ5IFRlc3RFcXVhbGl0eS50ZXN0X25lCisgICAgbmVfcGFpcnMgPSBbKFRlc3QuRm9vKCd0ZXN0MScpLCBUZXN0LkZvbygncnVuVGVzdCcpKQorICAgICAgICAgICAgICAgLChUZXN0LkZvbygndGVzdDEnKSwgVGVzdC5CYXIoJ3Rlc3QxJykpCisgICAgICAgICAgICAgICAsKFRlc3QuRm9vKCd0ZXN0MScpLCBUZXN0LkJhcigndGVzdDInKSldCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIC9TZXQgdXAgYXR0cmlidXRlcyB1c2VkIGJ5IGluaGVyaXRlZCB0ZXN0cworCisKKyAgICAjICJjbGFzcyBUZXN0Q2FzZShbbWV0aG9kTmFtZV0pIgorICAgICMgLi4uCisgICAgIyAiRWFjaCBpbnN0YW5jZSBvZiBUZXN0Q2FzZSB3aWxsIHJ1biBhIHNpbmdsZSB0ZXN0IG1ldGhvZDogdGhlCisgICAgIyBtZXRob2QgbmFtZWQgbWV0aG9kTmFtZS4iCisgICAgIyAuLi4KKyAgICAjICJtZXRob2ROYW1lIGRlZmF1bHRzIHRvICJydW5UZXN0Ii4iCisgICAgIworICAgICMgTWFrZSBzdXJlIGl0IHJlYWxseSBpcyBvcHRpb25hbCwgYW5kIHRoYXQgaXQgZGVmYXVsdHMgdG8gdGhlIHByb3BlcgorICAgICMgdGhpbmcuCisgICAgZGVmIHRlc3RfaW5pdF9fbm9fdGVzdF9uYW1lKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOiByYWlzZSBUeXBlRXJyb3IoKQorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QoKS5pZCgpWy0xMzpdLCAnLlRlc3QucnVuVGVzdCcpCisKKyAgICAjICJjbGFzcyBUZXN0Q2FzZShbbWV0aG9kTmFtZV0pIgorICAgICMgLi4uCisgICAgIyAiRWFjaCBpbnN0YW5jZSBvZiBUZXN0Q2FzZSB3aWxsIHJ1biBhIHNpbmdsZSB0ZXN0IG1ldGhvZDogdGhlCisgICAgIyBtZXRob2QgbmFtZWQgbWV0aG9kTmFtZS4iCisgICAgZGVmIHRlc3RfaW5pdF9fdGVzdF9uYW1lX192YWxpZChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKTogcmFpc2UgVHlwZUVycm9yKCkKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0KCd0ZXN0JykuaWQoKVstMTA6XSwgJy5UZXN0LnRlc3QnKQorCisgICAgIyAiY2xhc3MgVGVzdENhc2UoW21ldGhvZE5hbWVdKSIKKyAgICAjIC4uLgorICAgICMgIkVhY2ggaW5zdGFuY2Ugb2YgVGVzdENhc2Ugd2lsbCBydW4gYSBzaW5nbGUgdGVzdCBtZXRob2Q6IHRoZQorICAgICMgbWV0aG9kIG5hbWVkIG1ldGhvZE5hbWUuIgorICAgIGRlZiB0ZXN0X2luaXRfX3Rlc3RfbmFtZV9faW52YWxpZChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKTogcmFpc2UgVHlwZUVycm9yKCkKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgVGVzdCgndGVzdGZvbycpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4gRm9yCisgICAgIyBUZXN0Q2FzZSBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUgMSIKKyAgICBkZWYgdGVzdF9jb3VudFRlc3RDYXNlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28oJ3Rlc3QnKS5jb3VudFRlc3RDYXNlcygpLCAxKQorCisgICAgIyAiUmV0dXJuIHRoZSBkZWZhdWx0IHR5cGUgb2YgdGVzdCByZXN1bHQgb2JqZWN0IHRvIGJlIHVzZWQgdG8gcnVuIHRoaXMKKyAgICAjIHRlc3QuIEZvciBUZXN0Q2FzZSBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUKKyAgICAjIHVuaXR0ZXN0LlRlc3RSZXN1bHQ7ICBzdWJjbGFzc2VzIG9mIFRlc3RDYXNlIHNob3VsZAorICAgICMgb3ZlcnJpZGUgdGhpcyBhcyBuZWNlc3NhcnkuIgorICAgIGRlZiB0ZXN0X2RlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IEZvbygpLmRlZmF1bHRUZXN0UmVzdWx0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIHVuaXR0ZXN0LlRlc3RSZXN1bHQpCisKKyAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCisgICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQorICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKKyAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCisgICAgIworICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHNldFVwKCkgcmFpc2VzCisgICAgIyBhbiBleGNlcHRpb24uCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3NldFVwKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikuc2V0VXAoKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby5zZXRVcCcpCisKKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICdhZGRFcnJvcicsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldpdGggYSB0ZW1wb3JhcnkgcmVzdWx0IHN0b3BUZXN0UnVuIGlzIGNhbGxlZCB3aGVuIHNldFVwIGVycm9ycy4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fc2V0VXBfZGVmYXVsdF9yZXN1bHQoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTG9nZ2luZ1Jlc3VsdChzZWxmLmV2ZW50cykKKworICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikuc2V0VXAoKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby5zZXRVcCcpCisKKyAgICAgICAgRm9vKGV2ZW50cykucnVuKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdGFydFRlc3QnLCAnc2V0VXAnLCAnYWRkRXJyb3InLAorICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnLCAnc3RvcFRlc3RSdW4nXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCisgICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQorICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKKyAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCisgICAgIworICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRoZSB0ZXN0IHJhaXNlcworICAgICMgYW4gZXJyb3IgKGFzIG9wcG9zZWQgdG8gYSBmYWlsdXJlKS4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fdGVzdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlc3QnKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRFcnJvcicsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldpdGggYSBkZWZhdWx0IHJlc3VsdCwgYW4gZXJyb3IgaW4gdGhlIHRlc3Qgc3RpbGwgcmVzdWx0cyBpbiBzdG9wVGVzdFJ1bgorICAgICMgYmVpbmcgY2FsbGVkLiIKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fdGVzdF9kZWZhdWx0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBMb2dnaW5nUmVzdWx0KHNlbGYuZXZlbnRzKQorCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZXN0JykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0UnVuJywgJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEVycm9yJywKKyAgICAgICAgICAgICAgICAgICAgJ3RlYXJEb3duJywgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KKyAgICAgICAgRm9vKGV2ZW50cykucnVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCBzaWduYWxzCisgICAgIyBhIGZhaWx1cmUgKGFzIG9wcG9zZWQgdG8gYW4gZXJyb3IpLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19mYWlsdXJlX2luX3Rlc3Qoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgncmFpc2VkIGJ5IEZvby50ZXN0JykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAnYWRkRmFpbHVyZScsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldoZW4gYSB0ZXN0IGZhaWxzIHdpdGggYSBkZWZhdWx0IHJlc3VsdCBzdG9wVGVzdFJ1biBpcyBzdGlsbCBjYWxsZWQuIgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19mYWlsdXJlX2luX3Rlc3RfZGVmYXVsdF9yZXN1bHQoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTG9nZ2luZ1Jlc3VsdChzZWxmLmV2ZW50cykKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdyYWlzZWQgYnkgRm9vLnRlc3QnKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3RSdW4nLCAnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAnYWRkRmFpbHVyZScsCisgICAgICAgICAgICAgICAgICAgICd0ZWFyRG93bicsICdzdG9wVGVzdCcsICdzdG9wVGVzdFJ1biddCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIEZvbyhldmVudHMpLnJ1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKKyAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCisgICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAorICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGVhckRvd24oKSByYWlzZXMKKyAgICAjIGFuIGV4Y2VwdGlvbi4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fdGVhckRvd24oc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZWFyRG93bigpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlYXJEb3duJykKKworICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLCAnYWRkRXJyb3InLAorICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIHRlYXJEb3duIGVycm9ycyB3aXRoIGEgZGVmYXVsdCByZXN1bHQgc3RvcFRlc3RSdW4gaXMgc3RpbGwgY2FsbGVkLiIKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fdGVhckRvd25fZGVmYXVsdF9yZXN1bHQoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTG9nZ2luZ1Jlc3VsdChzZWxmLmV2ZW50cykKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlYXJEb3duKCkKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28udGVhckRvd24nKQorCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIEZvbyhldmVudHMpLnJ1bigpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3RSdW4nLCAnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkRXJyb3InLCAnc3RvcFRlc3QnLCAnc3RvcFRlc3RSdW4nXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJUZXN0Q2FzZS5ydW4oKSBzdGlsbCB3b3JrcyB3aGVuIHRoZSBkZWZhdWx0VGVzdFJlc3VsdCBpcyBhIFRlc3RSZXN1bHQKKyAgICAjIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBzdGFydFRlc3RSdW4gYW5kIHN0b3BUZXN0UnVuLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX2RlZmF1bHRfcmVzdWx0KHNlbGYpOgorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuKCkKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBGb28oJ3Rlc3QnKS5ydW4oKQorCisgICAgIyAiVGhpcyBjbGFzcyBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhlIHRlc3QoKSBtZXRob2QuCisgICAgIyBJZiBhIHRlc3QgZnJhbWV3b3JrIG5lZWRzIHRvIHVzZSBhIHNwZWNpYWxpemVkIGV4Y2VwdGlvbiwgcG9zc2libHkgdG8KKyAgICAjIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGl0IG11c3Qgc3ViY2xhc3MgdGhpcyBleGNlcHRpb24gaW4KKyAgICAjIG9yZGVyIHRvIGBgcGxheSBmYWlyJycgd2l0aCB0aGUgZnJhbWV3b3JrLiAgVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcworICAgICMgYXR0cmlidXRlIGlzIEFzc2VydGlvbkVycm9yIgorICAgIGRlZiB0ZXN0X2ZhaWx1cmVFeGNlcHRpb25fX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZvbygndGVzdCcpLmZhaWx1cmVFeGNlcHRpb24gaXMgQXNzZXJ0aW9uRXJyb3IpCisKKyAgICAjICJUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCgpIG1ldGhvZC4KKyAgICAjIElmIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0bworICAgICMgY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbgorICAgICMgb3JkZXIgdG8gYGBwbGF5IGZhaXInJyB3aXRoIHRoZSBmcmFtZXdvcmsuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSBUZXN0Q2FzZS5ydW4oKSByZXNwZWN0cyB0aGUgZGVzaWduYXRlZCBmYWlsdXJlRXhjZXB0aW9uCisgICAgZGVmIHRlc3RfZmFpbHVyZUV4Y2VwdGlvbl9fc3ViY2xhc3NpbmdfX2V4cGxpY2l0X3JhaXNlKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgICAgICAgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IFJ1bnRpbWVFcnJvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGb28oJ3Rlc3QnKS5mYWlsdXJlRXhjZXB0aW9uIGlzIFJ1bnRpbWVFcnJvcikKKworCisgICAgICAgIEZvbygndGVzdCcpLnJ1bihyZXN1bHQpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnYWRkRmFpbHVyZScsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIlRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSB0ZXN0KCkgbWV0aG9kLgorICAgICMgSWYgYSB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvCisgICAgIyBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluCisgICAgIyBvcmRlciB0byBgYHBsYXkgZmFpcicnIHdpdGggdGhlIGZyYW1ld29yay4iCisgICAgIworICAgICMgTWFrZSBzdXJlIFRlc3RDYXNlLnJ1bigpIHJlc3BlY3RzIHRoZSBkZXNpZ25hdGVkIGZhaWx1cmVFeGNlcHRpb24KKyAgICBkZWYgdGVzdF9mYWlsdXJlRXhjZXB0aW9uX19zdWJjbGFzc2luZ19faW1wbGljaXRfcmFpc2Uoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImZvbyIpCisKKyAgICAgICAgICAgIGZhaWx1cmVFeGNlcHRpb24gPSBSdW50aW1lRXJyb3IKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoRm9vKCd0ZXN0JykuZmFpbHVyZUV4Y2VwdGlvbiBpcyBSdW50aW1lRXJyb3IpCisKKworICAgICAgICBGb28oJ3Rlc3QnKS5ydW4ocmVzdWx0KQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ2FkZEZhaWx1cmUnLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIgorICAgIGRlZiB0ZXN0X3NldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgLi4uIGFuZCBub3RoaW5nIHNob3VsZCBoYXBwZW4KKyAgICAgICAgRm9vKCkuc2V0VXAoKQorCisgICAgIyAiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKKyAgICBkZWYgdGVzdF90ZWFyRG93bihzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIC4uLiBhbmQgbm90aGluZyBzaG91bGQgaGFwcGVuCisgICAgICAgIEZvbygpLnRlYXJEb3duKCkKKworICAgICMgIlJldHVybiBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgdGVzdCBjYXNlLiIKKyAgICAjCisgICAgIyBCZWNhdXNlIG9mIHRoZSB2YWd1ZSBuYXR1cmUgb2YgdGhlIGRvY3MsIEknbSBub3QgZ29pbmcgdG8gbG9jayB0aGlzCisgICAgIyB0ZXN0IGRvd24gdG9vIG11Y2guIFJlYWxseSBhbGwgdGhhdCBjYW4gYmUgYXNzZXJ0ZWQgaXMgdGhhdCB0aGUgaWQoKQorICAgICMgd2lsbCBiZSBhIHN0cmluZyAoZWl0aGVyIDgtYnl0ZSBvciB1bmljb2RlIC0tIGFnYWluLCBiZWNhdXNlIHRoZSBkb2NzCisgICAgIyBqdXN0IHNheSAic3RyaW5nIikKKyAgICBkZWYgdGVzdF9pZChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoRm9vKCkuaWQoKSwgYmFzZXN0cmluZykKKworICAgICMgIklmIHJlc3VsdCBpcyBvbWl0dGVkIG9yIE5vbmUsIGEgdGVtcG9yYXJ5IHJlc3VsdCBvYmplY3QgaXMgY3JlYXRlZAorICAgICMgYW5kIHVzZWQsIGJ1dCBpcyBub3QgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGNhbGxlci4gQXMgVGVzdENhc2Ugb3ducyB0aGUKKyAgICAjIHRlbXBvcmFyeSByZXN1bHQgc3RhcnRUZXN0UnVuIGFuZCBzdG9wVGVzdFJ1biBhcmUgY2FsbGVkLgorCisgICAgZGVmIHRlc3RfcnVuX191c2VzX2RlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKKworICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICAjIE1ha2UgcnVuKCkgZmluZCBhIHJlc3VsdCBvYmplY3Qgb24gaXRzIG93bgorICAgICAgICBGb28oJ3Rlc3QnKS5ydW4oKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3RSdW4nLCAnc3RhcnRUZXN0JywgJ3Rlc3QnLCAnYWRkU3VjY2VzcycsCisgICAgICAgICAgICAnc3RvcFRlc3QnLCAnc3RvcFRlc3RSdW4nXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdFNob3J0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLnNob3J0RGVzY3JpcHRpb24oKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0U2hvcnREZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBzaG9ydERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBkb2NzdHJpbmcuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc2VsZi5zaG9ydERlc2NyaXB0aW9uKCksCisgICAgICAgICAgICAgICAgJ1Rlc3RzIHNob3J0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4nKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RTaG9ydERlc2NyaXB0aW9uV2l0aE11bHRpTGluZURvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgc2hvcnREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyIGRvY3N0cmluZy4KKworICAgICAgICBUaGlzIG1ldGhvZCBlbnN1cmVzIHRoYXQgb25seSB0aGUgZmlyc3QgbGluZSBvZiBhIGRvY3N0cmluZyBpcworICAgICAgICByZXR1cm5lZCB1c2VkIGluIHRoZSBzaG9ydCBkZXNjcmlwdGlvbiwgbm8gbWF0dGVyIGhvdyBsb25nIHRoZQorICAgICAgICB3aG9sZSB0aGluZyBpcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc2VsZi5zaG9ydERlc2NyaXB0aW9uKCksCisgICAgICAgICAgICAgICAgICdUZXN0cyBzaG9ydERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJworICAgICAgICAgICAgICAgICAnZG9jc3RyaW5nLicpCisKKyAgICBkZWYgdGVzdEFkZFR5cGVFcXVhbGl0eUZ1bmMoc2VsZik6CisgICAgICAgIGNsYXNzIFNhZFNuYWtlKG9iamVjdCk6CisgICAgICAgICAgICAiIiJEdW1teSBjbGFzcyBmb3IgdGVzdF9hZGRUeXBlRXF1YWxpdHlGdW5jLiIiIgorICAgICAgICBzMSwgczIgPSBTYWRTbmFrZSgpLCBTYWRTbmFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoczEsIHMyKQorICAgICAgICBkZWYgQWxsU25ha2VzQ3JlYXRlZEVxdWFsKGEsIGIsIG1zZz1Ob25lKToKKyAgICAgICAgICAgIHJldHVybiB0eXBlKGEpIGlzIHR5cGUoYikgaXMgU2FkU25ha2UKKyAgICAgICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKFNhZFNuYWtlLCBBbGxTbmFrZXNDcmVhdGVkRXF1YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICAjIE5vIHRoaXMgZG9lc24ndCBjbGVhbiB1cCBhbmQgcmVtb3ZlIHRoZSBTYWRTbmFrZSBlcXVhbGl0eSBmdW5jCisgICAgICAgICMgZnJvbSB0aGlzIFRlc3RDYXNlIGluc3RhbmNlIGJ1dCBzaW5jZSBpdHMgYSBsb2NhbCBub3RoaW5nIGVsc2UKKyAgICAgICAgIyB3aWxsIGV2ZXIgbm90aWNlIHRoYXQuCisKKyAgICBkZWYgdGVzdEFzc2VydElzKHNlbGYpOgorICAgICAgICB0aGluZyA9IG9iamVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGhpbmcsIHRoaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXMsIHRoaW5nLCBvYmplY3QoKSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0SXNOb3Qoc2VsZik6CisgICAgICAgIHRoaW5nID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh0aGluZywgb2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJc05vdCwgdGhpbmcsIHRoaW5nKQorCisgICAgZGVmIHRlc3RBc3NlcnRJc0luc3RhbmNlKHNlbGYpOgorICAgICAgICB0aGluZyA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aGluZywgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydElzSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaW5nLCBkaWN0KQorCisgICAgZGVmIHRlc3RBc3NlcnROb3RJc0luc3RhbmNlKHNlbGYpOgorICAgICAgICB0aGluZyA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh0aGluZywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaW5nLCBsaXN0KQorCisgICAgZGVmIHRlc3RBc3NlcnRJbihzZWxmKToKKyAgICAgICAgYW5pbWFscyA9IHsnbW9ua2V5JzogJ2JhbmFuYScsICdjb3cnOiAnZ3Jhc3MnLCAnc2VhbCc6ICdmaXNoJ30KKworICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMiwgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEluKCdtb25rZXknLCBhbmltYWxzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2QnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigwLCBbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ290dGVyJywgYW5pbWFscykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SW4sICd4JywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJbiwgNCwgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SW4sICdlbGVwaGFudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hbHMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydE5vdEluLCAnYycsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Tm90SW4sIDEsIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydE5vdEluLCAnY293JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWFscykKKworICAgIGRlZiB0ZXN0QXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7fSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHt9LCB7J2EnOiAxfSkKKyAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydhJzogMX0sIHsnYSc6IDF9KQorICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2EnOiAxfSwgeydhJzogMSwgJ2InOiAyfSkKKyAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydhJzogMSwgJ2InOiAyfSwgeydhJzogMSwgJ2InOiAyfSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7MTogIm9uZSJ9LCB7fSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2EnOiAyfSwgeydhJzogMX0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydjJzogMX0sIHsnYSc6IDF9KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYSc6IDEsICdjJzogMX0sIHsnYSc6IDF9KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYSc6IDEsICdjJzogMX0sIHsnYSc6IDF9KQorCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiIiwgVW5pY29kZVdhcm5pbmcpKToKKyAgICAgICAgICAgIG9uZSA9ICcnLmpvaW4oY2hyKGkpIGZvciBpIGluIHJhbmdlKDI1NSkpCisgICAgICAgICAgICAjIHRoaXMgdXNlZCB0byBjYXVzZSBhIFVuaWNvZGVEZWNvZGVFcnJvciBjb25zdHJ1Y3RpbmcgdGhlIGZhaWx1cmUgbXNnCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydmb28nOiBvbmV9LCB7J2Zvbyc6IHUnXHVGRkZEJ30pCisKKyAgICBkZWYgdGVzdEFzc2VydEVxdWFsKHNlbGYpOgorICAgICAgICBlcXVhbF9wYWlycyA9IFsKKyAgICAgICAgICAgICAgICAoKCksICgpKSwKKyAgICAgICAgICAgICAgICAoe30sIHt9KSwKKyAgICAgICAgICAgICAgICAoW10sIFtdKSwKKyAgICAgICAgICAgICAgICAoc2V0KCksIHNldCgpKSwKKyAgICAgICAgICAgICAgICAoZnJvemVuc2V0KCksIGZyb3plbnNldCgpKV0KKyAgICAgICAgZm9yIGEsIGIgaW4gZXF1YWxfcGFpcnM6CisgICAgICAgICAgICAjIFRoaXMgbWVzcyBvZiB0cnkgZXhjZXB0cyBpcyB0byB0ZXN0IHRoZSBhc3NlcnRFcXVhbCBiZWhhdmlvcgorICAgICAgICAgICAgIyBpdHNlbGYuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydEVxdWFsKCVyLCAlcikgZmFpbGVkJyAlIChhLCBiKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIsIG1zZz0nZm9vJykKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRFcXVhbCglciwgJXIpIHdpdGggbXNnPSBmYWlsZWQnICUgKGEsIGIpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYiwgJ2ZvbycpCisgICAgICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0RXF1YWwoJXIsICVyKSB3aXRoIHRoaXJkIHBhcmFtZXRlciBmYWlsZWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGEsIGIpKQorCisgICAgICAgIHVuZXF1YWxfcGFpcnMgPSBbCisgICAgICAgICAgICAgICAoKCksIFtdKSwKKyAgICAgICAgICAgICAgICh7fSwgc2V0KCkpLAorICAgICAgICAgICAgICAgKHNldChbNCwxXSksIGZyb3plbnNldChbNCwyXSkpLAorICAgICAgICAgICAgICAgKGZyb3plbnNldChbNCw1XSksIHNldChbMiwzXSkpLAorICAgICAgICAgICAgICAgKHNldChbMyw0XSksIHNldChbNSw0XSkpXQorICAgICAgICBmb3IgYSwgYiBpbiB1bmVxdWFsX3BhaXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEVxdWFsLCBhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEVxdWFsLCBhLCBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0RXF1YWwsIGEsIGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J2ZvbycpCisKKyAgICBkZWYgdGVzdEVxdWFsaXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChbXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCgoKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChbXSwgKCkpCisKKyAgICAgICAgYSA9IFswLCAnYScsIFtdXQorICAgICAgICBiID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsLCB0dXBsZShhKSwgdHVwbGUoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbCwgYSwgdHVwbGUoYikpCisKKyAgICAgICAgYi5leHRlbmQoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHR1cGxlKGEpLCB0dXBsZShiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKGEsIHR1cGxlKGIpKQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwodHVwbGUoYSksIGIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExpc3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYSwgdHVwbGUoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRUdXBsZUVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0dXBsZShhKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExpc3RFcXVhbCwgTm9uZSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFR1cGxlRXF1YWwsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlKGIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgdHVwbGUoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMaXN0RXF1YWwsIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRUdXBsZUVxdWFsLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSkKKworICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbCh7fSwge30pCisKKyAgICAgICAgYyA9IHsgJ3gnOiAxIH0KKyAgICAgICAgZCA9IHt9CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsLCBjLCBkKQorCisgICAgICAgIGQudXBkYXRlKGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGMsIGQpCisKKyAgICAgICAgZFsneCddID0gMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbCwgYywgZCwgJ1RoZXNlIGFyZSB1bmVxdWFsJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0RGljdEVxdWFsLCBOb25lLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0RGljdEVxdWFsLCBbXSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydERpY3RFcXVhbCwgMSwgMSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0U2VxdWVuY2VFcXVhbE1heERpZmYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYXhEaWZmLCA4MCo4KQorICAgICAgICBzZXExID0gJ2EnICsgJ3gnICogODAqKjIKKyAgICAgICAgc2VxMiA9ICdiJyArICd4JyAqIDgwKioyCisgICAgICAgIGRpZmYgPSAnXG4nLmpvaW4oZGlmZmxpYi5uZGlmZihwcHJpbnQucGZvcm1hdChzZXExKS5zcGxpdGxpbmVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChzZXEyKS5zcGxpdGxpbmVzKCkpKQorICAgICAgICAjIHRoZSArMSBpcyB0aGUgbGVhZGluZyBcbiBhZGRlZCBieSBhc3NlcnRTZXF1ZW5jZUVxdWFsCisgICAgICAgIG9taXR0ZWQgPSB1bml0dGVzdC5jYXNlLkRJRkZfT01JVFRFRCAlIChsZW4oZGlmZikgKyAxLCkKKworICAgICAgICBzZWxmLm1heERpZmYgPSBsZW4oZGlmZikvLzIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHNlcTEsIHNlcTIpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIG1zZyA9IGUuYXJnc1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRTZXF1ZW5jZUVxdWFsIGRpZCBub3QgZmFpbC4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG1zZykgPCBsZW4oZGlmZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob21pdHRlZCwgbXNnKQorCisgICAgICAgIHNlbGYubWF4RGlmZiA9IGxlbihkaWZmKSAqIDIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHNlcTEsIHNlcTIpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIG1zZyA9IGUuYXJnc1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRTZXF1ZW5jZUVxdWFsIGRpZCBub3QgZmFpbC4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG1zZykgPiBsZW4oZGlmZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ob21pdHRlZCwgbXNnKQorCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHNlcTEsIHNlcTIpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIG1zZyA9IGUuYXJnc1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRTZXF1ZW5jZUVxdWFsIGRpZCBub3QgZmFpbC4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG1zZykgPiBsZW4oZGlmZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ob21pdHRlZCwgbXNnKQorCisgICAgZGVmIHRlc3RUcnVuY2F0ZU1lc3NhZ2Uoc2VsZik6CisgICAgICAgIHNlbGYubWF4RGlmZiA9IDEKKyAgICAgICAgbWVzc2FnZSA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZSgnZm9vJywgJ2JhcicpCisgICAgICAgIG9taXR0ZWQgPSB1bml0dGVzdC5jYXNlLkRJRkZfT01JVFRFRCAlIGxlbignYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCAnZm9vJyArIG9taXR0ZWQpCisKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBtZXNzYWdlID0gc2VsZi5fdHJ1bmNhdGVNZXNzYWdlKCdmb28nLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCAnZm9vYmFyJykKKworICAgICAgICBzZWxmLm1heERpZmYgPSA0CisgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2UoJ2ZvbycsICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UsICdmb29iYXInKQorCisgICAgZGVmIHRlc3RBc3NlcnREaWN0RXF1YWxUcnVuY2F0ZXMoc2VsZik6CisgICAgICAgIHRlc3QgPSB1bml0dGVzdC5UZXN0Q2FzZSgnYXNzZXJ0RXF1YWwnKQorICAgICAgICBkZWYgdHJ1bmNhdGUobXNnLCBkaWZmKToKKyAgICAgICAgICAgIHJldHVybiAnZm9vJworICAgICAgICB0ZXN0Ll90cnVuY2F0ZU1lc3NhZ2UgPSB0cnVuY2F0ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0LmFzc2VydERpY3RFcXVhbCh7fSwgezE6IDB9KQorICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ2ZvbycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydERpY3RFcXVhbCBkaWQgbm90IGZhaWwnKQorCisgICAgZGVmIHRlc3RBc3NlcnRNdWx0aUxpbmVFcXVhbFRydW5jYXRlcyhzZWxmKToKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LlRlc3RDYXNlKCdhc3NlcnRFcXVhbCcpCisgICAgICAgIGRlZiB0cnVuY2F0ZShtc2csIGRpZmYpOgorICAgICAgICAgICAgcmV0dXJuICdmb28nCisgICAgICAgIHRlc3QuX3RydW5jYXRlTWVzc2FnZSA9IHRydW5jYXRlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3QuYXNzZXJ0TXVsdGlMaW5lRXF1YWwoJ2ZvbycsICdiYXInKQorICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ2ZvbycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydE11bHRpTGluZUVxdWFsIGRpZCBub3QgZmFpbCcpCisKKyAgICBkZWYgdGVzdEFzc2VydEl0ZW1zRXF1YWwoc2VsZik6CisgICAgICAgIGEgPSBvYmplY3QoKQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoWzEsIDIsIDNdLCBbMywgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChbJ2ZvbycsICdiYXInLCAnYmF6J10sIFsnYmFyJywgJ2JheicsICdmb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKFthLCBhLCAyLCAyLCAzXSwgKGEsIDIsIDMsIGEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoWzEsICIyIiwgImEiLCAiYSJdLCBbImEiLCAiMiIsIFRydWUsICJhIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMSwgMl0gKyBbM10gKiAxMDAsIFsxXSAqIDEwMCArIFsyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLCAiMiIsICJhIiwgImEiXSwgWyJhIiwgIjIiLCBUcnVlLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMF0sIFsxMCwgMTFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwLCAxMV0sIFsxMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMTAsIDExLCAxMF0sIFsxMCwgMTFdKQorCisgICAgICAgICMgVGVzdCB0aGF0IHNlcXVlbmNlcyBvZiB1bmhhc2hhYmxlIG9iamVjdHMgY2FuIGJlIHRlc3RlZCBmb3Igc2FtZW5lc3M6CisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChbWzEsIDJdLCBbMywgNF0sIDBdLCBbRmFsc2UsIFszLCA0XSwgWzEsIDJdXSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgICMgaGFzaGFibGUgdHlwZXMsIGJ1dCBub3Qgb3JkZXJhYmxlCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLCBbZGl2bW9kLCAneCcsIDEsIDVqLCAyaiwgZnJvemVuc2V0KCldKQorICAgICAgICAgICAgIyBjb21wYXJpbmcgZGljdHMgcmFpc2VzIGEgcHkzayB3YXJuaW5nCisgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoW3snYSc6IDF9LCB7J2InOiAyfV0sIFt7J2InOiAyfSwgeydhJzogMX1dKQorICAgICAgICAgICAgIyBjb21wYXJpbmcgaGV0ZXJvZ2Vub3VzIG5vbi1oYXNoYWJsZSBzZXF1ZW5jZXMgcmFpc2VzIGEgcHkzayB3YXJuaW5nCisgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoWzEsICd4JywgZGl2bW9kLCBbXV0sIFtkaXZtb2QsIFtdLCAneCcsIDFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSwgW2Rpdm1vZCwgW10sICd4JywgMSwgNWosIDJqLCBzZXQoKV0pCisgICAgICAgICAgICAjIGZhaWwgdGhlIHRlc3QgaWYgd2FybmluZ3MgYXJlIG5vdCBzaWxlbmNlZAorICAgICAgICAgICAgaWYgdy53YXJuaW5nczoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydEl0ZW1zRXF1YWwgcmFpc2VkIGEgd2FybmluZzogJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cih3Lndhcm5pbmdzWzBdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtbMV1dLCBbWzJdXSkKKworICAgICAgICAjIFNhbWUgZWxlbWVudHMsIGJ1dCBub3Qgc2FtZSBzZXF1ZW5jZSBsZW5ndGgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLCAxLCAyXSwgWzIsIDFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEsIDEsICIyIiwgImEiLCAiYSJdLCBbIjIiLCAiMiIsIFRydWUsICJhIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMSwgeydiJzogMn0sIE5vbmUsIFRydWVdLCBbeydiJzogMn0sIFRydWUsIE5vbmVdKQorCisgICAgICAgICMgU2FtZSBlbGVtZW50cyB3aGljaCBkb24ndCByZWxpYWJseSBjb21wYXJlLCBpbgorICAgICAgICAjIGRpZmZlcmVudCBvcmRlciwgc2VlIGlzc3VlIDEwMjQyCisgICAgICAgIGEgPSBbezIsNH0sIHsxLDJ9XQorICAgICAgICBiID0gYVs6Oi0xXQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoYSwgYikKKworICAgIGRlZiB0ZXN0QXNzZXJ0U2V0RXF1YWwoc2VsZik6CisgICAgICAgIHNldDEgPSBzZXQoKQorICAgICAgICBzZXQyID0gc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzZXQxLCBzZXQyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgTm9uZSwgc2V0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBbXSwgc2V0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIFtdKQorCisgICAgICAgIHNldDEgPSBzZXQoWydhJ10pCisgICAgICAgIHNldDIgPSBzZXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIHNldDIpCisKKyAgICAgICAgc2V0MSA9IHNldChbJ2EnXSkKKyAgICAgICAgc2V0MiA9IHNldChbJ2EnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzZXQxLCBzZXQyKQorCisgICAgICAgIHNldDEgPSBzZXQoWydhJ10pCisgICAgICAgIHNldDIgPSBzZXQoWydhJywgJ2InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBzZXQyKQorCisgICAgICAgIHNldDEgPSBzZXQoWydhJ10pCisgICAgICAgIHNldDIgPSBmcm96ZW5zZXQoWydhJywgJ2InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBzZXQyKQorCisgICAgICAgIHNldDEgPSBzZXQoWydhJywgJ2InXSkKKyAgICAgICAgc2V0MiA9IGZyb3plbnNldChbJ2EnLCAnYiddKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKHNldDEsIHNldDIpCisKKyAgICAgICAgc2V0MSA9IHNldCgpCisgICAgICAgIHNldDIgPSAiZm9vIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIHNldDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0Miwgc2V0MSkKKworICAgICAgICAjIG1ha2Ugc3VyZSBhbnkgc3RyaW5nIGZvcm1hdHRpbmcgaXMgdHVwbGUtc2FmZQorICAgICAgICBzZXQxID0gc2V0KFsoMCwgMSksICgyLCAzKV0pCisgICAgICAgIHNldDIgPSBzZXQoWyg0LCA1KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgc2V0MikKKworICAgIGRlZiB0ZXN0SW5lcXVhbGl0eShzZWxmKToKKyAgICAgICAgIyBUcnkgaW50cworICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoMiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoMiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzc0VxdWFsLCAyLCAxKQorCisgICAgICAgICMgVHJ5IEZsb2F0cworICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoMS4xLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDEuMSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgxLjAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKDEuMCwgMS4xKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgxLjAsIDEuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMS4wLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAxLjAsIDEuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIDEuMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsLCAxLjAsIDEuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIDEuMSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgMS4wLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzRXF1YWwsIDEuMSwgMS4wKQorCisgICAgICAgICMgVHJ5IFN0cmluZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKCdidWcnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoJ2J1ZycsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgnYW50JywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKCdhbnQnLCAnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoJ2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgJ2FudCcsICdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgJ2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsLCAnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAnYnVnJywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAnYW50JywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzRXF1YWwsICdidWcnLCAnYW50JykKKworICAgICAgICAjIFRyeSBVbmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih1J2J1ZycsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwodSdidWcnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHUnYW50JywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydExlc3ModSdhbnQnLCB1J2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHUnYW50JywgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCh1J2FudCcsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIHUnYW50JywgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgdSdhbnQnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwsIHUnYW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgdSdidWcnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCB1J2FudCcsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgdSdidWcnLCB1J2FudCcpCisKKyAgICAgICAgIyBUcnkgTWl4ZWQgU3RyaW5nL1VuaWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKCdidWcnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih1J2J1ZycsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgnYnVnJywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh1J2J1ZycsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgnYW50JywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh1J2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoJ2FudCcsIHUnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHUnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKCdhbnQnLCB1J2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHUnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKCdhbnQnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHUnYW50JywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAnYW50JywgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgdSdhbnQnLCAnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsICdhbnQnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCB1J2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsLCAnYW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsLCB1J2FudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgJ2J1ZycsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIHUnYnVnJywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAnYW50JywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgdSdhbnQnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgJ2J1ZycsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgdSdidWcnLCAnYW50JykKKworICAgIGRlZiB0ZXN0QXNzZXJ0TXVsdGlMaW5lRXF1YWwoc2VsZik6CisgICAgICAgIHNhbXBsZV90ZXh0ID0gYiIiIlwKK2h0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi4zL2xpYi9tb2R1bGUtdW5pdHRlc3QuaHRtbAordGVzdCBjYXNlCisgICAgQSB0ZXN0IGNhc2UgaXMgdGhlIHNtYWxsZXN0IHVuaXQgb2YgdGVzdGluZy4gWy4uLl0KKyIiIgorICAgICAgICByZXZpc2VkX3NhbXBsZV90ZXh0ID0gYiIiIlwKK2h0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi40LjEvbGliL21vZHVsZS11bml0dGVzdC5odG1sCit0ZXN0IGNhc2UKKyAgICBBIHRlc3QgY2FzZSBpcyB0aGUgc21hbGxlc3QgdW5pdCBvZiB0ZXN0aW5nLiBbLi4uXSBZb3UgbWF5IHByb3ZpZGUgeW91cgorICAgIG93biBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IHN1YmNsYXNzIGZyb20gVGVzdENhc2UsIG9mIGNvdXJzZS4KKyIiIgorICAgICAgICBzYW1wbGVfdGV4dF9lcnJvciA9IGIiIiJcCistIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi4zL2xpYi9tb2R1bGUtdW5pdHRlc3QuaHRtbAorPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorKyBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jLzIuNC4xL2xpYi9tb2R1bGUtdW5pdHRlc3QuaHRtbAorPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCisgIHRlc3QgY2FzZQorLSAgICAgQSB0ZXN0IGNhc2UgaXMgdGhlIHNtYWxsZXN0IHVuaXQgb2YgdGVzdGluZy4gWy4uLl0KKysgICAgIEEgdGVzdCBjYXNlIGlzIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRlc3RpbmcuIFsuLi5dIFlvdSBtYXkgcHJvdmlkZSB5b3VyCis/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrKysrKysrKysrKysrKysrKysrKworKyAgICAgb3duIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBub3Qgc3ViY2xhc3MgZnJvbSBUZXN0Q2FzZSwgb2YgY291cnNlLgorIiIiCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgZm9yIHR5cGVfY2hhbmdlciBpbiAobGFtYmRhIHg6IHgsIGxhbWJkYSB4OiB4LmRlY29kZSgndXRmOCcpKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKHR5cGVfY2hhbmdlcihzYW1wbGVfdGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2NoYW5nZXIocmV2aXNlZF9zYW1wbGVfdGV4dCkpCisgICAgICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgICMgbmVlZCB0byByZW1vdmUgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICBlcnJvciA9IHN0cihlKS5lbmNvZGUoJ3V0ZjgnKS5zcGxpdCgnXG4nLCAxKVsxXQorCisgICAgICAgICAgICAgICAgIyBhc3NlcnRNdWx0aUxpbmVFcXVhbCBpcyBob29rZWQgdXAgYXMgdGhlIGRlZmF1bHQgZm9yCisgICAgICAgICAgICAgICAgIyB1bmljb2RlIHN0cmluZ3MgLSBzbyB3ZSBjYW4ndCB1c2UgaXQgZm9yIHRoaXMgY2hlY2sKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2FtcGxlX3RleHRfZXJyb3IgPT0gZXJyb3IpCisKKyAgICBkZWYgdGVzdEFzZXJ0RXF1YWxTaW5nbGVMaW5lKHNlbGYpOgorICAgICAgICBzYW1wbGVfdGV4dCA9IHUibGFkZW4gc3dhbGxvd3MgZmx5IHNsb3dseSIKKyAgICAgICAgcmV2aXNlZF9zYW1wbGVfdGV4dCA9IHUidW5sYWRlbiBzd2FsbG93cyBmbHkgcXVpY2tseSIKKyAgICAgICAgc2FtcGxlX3RleHRfZXJyb3IgPSAiIiJcCistIGxhZGVuIHN3YWxsb3dzIGZseSBzbG93bHkKKz8gICAgICAgICAgICAgICAgICAgIF5eXl4KKysgdW5sYWRlbiBzd2FsbG93cyBmbHkgcXVpY2tseQorPyArKyAgICAgICAgICAgICAgICAgICBeXl5eXgorIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcGxlX3RleHQsIHJldmlzZWRfc2FtcGxlX3RleHQpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGVycm9yID0gc3RyKGUpLnNwbGl0KCdcbicsIDEpWzFdCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2FtcGxlX3RleHRfZXJyb3IgPT0gZXJyb3IpCisKKyAgICBkZWYgdGVzdEFzc2VydElzTm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydElzTm9uZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKCdEalpvUGxvR2VhcnMgb24gUmFpbHMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXNOb3ROb25lLCBOb25lKQorCisgICAgZGVmIHRlc3RBc3NlcnRSZWdleHBNYXRjaGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoJ2FzZGZhYmFzZGYnLCByJ2FiKycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FhYXMnLCByJ2FhYWEnKQorCisgICAgZGVmIHRlc3RBc3NlcnRSYWlzZXNSZWdleHAoc2VsZik6CisgICAgICAgIGNsYXNzIEV4Y2VwdGlvbk1vY2soRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgU3R1YigpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uTW9jaygnV2UgZXhwZWN0JykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChFeGNlcHRpb25Nb2NrLCByZS5jb21waWxlKCdleHBlY3QkJyksIFN0dWIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKEV4Y2VwdGlvbk1vY2ssICdleHBlY3QkJywgU3R1YikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoRXhjZXB0aW9uTW9jaywgdSdleHBlY3QkJywgU3R1YikKKworICAgIGRlZiB0ZXN0QXNzZXJ0Tm90UmFpc2VzUmVnZXhwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sICdeRXhjZXB0aW9uIG5vdCByYWlzZWQkJywKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCwgRXhjZXB0aW9uLCByZS5jb21waWxlKCd4JyksCisgICAgICAgICAgICAgICAgbGFtYmRhOiBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sICdeRXhjZXB0aW9uIG5vdCByYWlzZWQkJywKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCwgRXhjZXB0aW9uLCAneCcsCisgICAgICAgICAgICAgICAgbGFtYmRhOiBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sICdeRXhjZXB0aW9uIG5vdCByYWlzZWQkJywKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCwgRXhjZXB0aW9uLCB1J3gnLAorICAgICAgICAgICAgICAgIGxhbWJkYTogTm9uZSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzUmVnZXhwTWlzbWF0Y2goc2VsZik6CisgICAgICAgIGRlZiBTdHViKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICByJyJcXkV4cGVjdGVkXCQiIGRvZXMgbm90IG1hdGNoICJVbmV4cGVjdGVkIicsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwgJ15FeHBlY3RlZCQnLAorICAgICAgICAgICAgICAgIFN0dWIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICByJyJcXkV4cGVjdGVkXCQiIGRvZXMgbm90IG1hdGNoICJVbmV4cGVjdGVkIicsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwgdSdeRXhwZWN0ZWQkJywKKyAgICAgICAgICAgICAgICBTdHViKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgciciXF5FeHBlY3RlZFwkIiBkb2VzIG5vdCBtYXRjaCAiVW5leHBlY3RlZCInLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwLCBFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgcmUuY29tcGlsZSgnXkV4cGVjdGVkJCcpLCBTdHViKQorCisgICAgZGVmIHRlc3RBc3NlcnRSYWlzZXNFeGNWYWx1ZShzZWxmKToKKyAgICAgICAgY2xhc3MgRXhjZXB0aW9uTW9jayhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBTdHViKGZvbyk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb25Nb2NrKGZvbykKKyAgICAgICAgdiA9ICJwYXJ0aWN1bGFyIHZhbHVlIgorCisgICAgICAgIGN0eCA9IHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbk1vY2spCisgICAgICAgIHdpdGggY3R4OgorICAgICAgICAgICAgU3R1Yih2KQorICAgICAgICBlID0gY3R4LmV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgRXhjZXB0aW9uTW9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIHYpCisKKyAgICBkZWYgdGVzdFN5bm9ueW1Bc3NlcnRNZXRob2ROYW1lcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB1bmRvY3VtZW50ZWQgbWV0aG9kIG5hbWUgc3lub255bXMuCisKKyAgICAgICAgUGxlYXNlIGRvIG5vdCB1c2UgdGhlc2UgbWV0aG9kcyBuYW1lcyBpbiB5b3VyIG93biBjb2RlLgorCisgICAgICAgIFRoaXMgdGVzdCBjb25maXJtcyB0aGVpciBjb250aW51ZWQgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5CisgICAgICAgIGluIG9yZGVyIHRvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGNvZGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscygzLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzLCAzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFscygyLjAsIDIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbHMoMy4wLCA1LjApCisgICAgICAgIHNlbGYuYXNzZXJ0XyhUcnVlKQorCisgICAgZGVmIHRlc3RQZW5kaW5nRGVwcmVjYXRpb25NZXRob2ROYW1lcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBmYWlsKiBtZXRob2RzIHBlbmRpbmcgZGVwcmVjYXRpb24sIHRoZXkgd2lsbCB3YXJuIGluIDMuMi4KKworICAgICAgICBEbyBub3QgdXNlIHRoZXNlIG1ldGhvZHMuICBUaGV5IHdpbGwgZ28gYXdheSBpbiAzLjMuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5mYWlsSWZFcXVhbCgzLCA1KQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMywgMykKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKDIuMCwgMi4wKQorICAgICAgICAgICAgc2VsZi5mYWlsSWZBbG1vc3RFcXVhbCgzLjAsIDUuMCkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhUcnVlKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhIF86IDMuMTQgKyB1J3NwYW0nKQorICAgICAgICAgICAgc2VsZi5mYWlsSWYoRmFsc2UpCisKKyAgICBkZWYgdGVzdERlZXBjb3B5KHNlbGYpOgorICAgICAgICAjIElzc3VlOiA1NjYwCisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdE5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKworICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGJsb3cgdXAKKyAgICAgICAgZGVlcGNvcHkodGVzdCkKKworICAgIGRlZiB0ZXN0S2V5Ym9hcmRJbnRlcnJ1cHQoc2VsZik6CisgICAgICAgIGRlZiBfcmFpc2Uoc2VsZj1Ob25lKToKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgIGRlZiBub3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gX3JhaXNlCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgc2V0VXAgPSBfcmFpc2UKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gbm90aGluZworCisgICAgICAgIGNsYXNzIFRlc3QzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gbm90aGluZworICAgICAgICAgICAgdGVhckRvd24gPSBfcmFpc2UKKworICAgICAgICBjbGFzcyBUZXN0NCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9zb21ldGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKF9yYWlzZSkKKworICAgICAgICBmb3Iga2xhc3MgaW4gKFRlc3QxLCBUZXN0MiwgVGVzdDMsIFRlc3Q0KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQpOgorICAgICAgICAgICAgICAgIGtsYXNzKCd0ZXN0X3NvbWV0aGluZycpLnJ1bigpCisKKyAgICBkZWYgdGVzdFN5c3RlbUV4aXQoc2VsZik6CisgICAgICAgIGRlZiBfcmFpc2Uoc2VsZj1Ob25lKToKKyAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKKyAgICAgICAgZGVmIG5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdDEodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcgPSBfcmFpc2UKKworICAgICAgICBjbGFzcyBUZXN0Mih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBzZXRVcCA9IF9yYWlzZQorICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcgPSBub3RoaW5nCisKKyAgICAgICAgY2xhc3MgVGVzdDModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcgPSBub3RoaW5nCisgICAgICAgICAgICB0ZWFyRG93biA9IF9yYWlzZQorCisgICAgICAgIGNsYXNzIFRlc3Q0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NvbWV0aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoX3JhaXNlKQorCisgICAgICAgIGZvciBrbGFzcyBpbiAoVGVzdDEsIFRlc3QyLCBUZXN0MywgVGVzdDQpOgorICAgICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgICAgICBrbGFzcygndGVzdF9zb21ldGhpbmcnKS5ydW4ocmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTU1ZGUxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKQEAgLTAsMCArMSwzNjIgQEAKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCisKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3REaXNjb3ZlcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBIZWF2aWx5IG1vY2tlZCB0ZXN0cyBzbyBJIGNhbiBhdm9pZCBoaXR0aW5nIHRoZSBmaWxlc3lzdGVtCisgICAgZGVmIHRlc3RfZ2V0X25hbWVfZnJvbV9wYXRoKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBsb2FkZXIuX3RvcF9sZXZlbF9kaXIgPSAnL2ZvbycKKyAgICAgICAgbmFtZSA9IGxvYWRlci5fZ2V0X25hbWVfZnJvbV9wYXRoKCcvZm9vL2Jhci9iYXoucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsICdiYXIuYmF6JykKKworICAgICAgICBpZiBub3QgX19kZWJ1Z19fOgorICAgICAgICAgICAgIyBhc3NlcnRzIGFyZSBvZmYKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLl9nZXRfbmFtZV9mcm9tX3BhdGgoJy9iYXIvYmF6LnB5JykKKworICAgIGRlZiB0ZXN0X2ZpbmRfdGVzdHMoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIG9yaWdpbmFsX2xpc3RkaXIgPSBvcy5saXN0ZGlyCisgICAgICAgIGRlZiByZXN0b3JlX2xpc3RkaXIoKToKKyAgICAgICAgICAgIG9zLmxpc3RkaXIgPSBvcmlnaW5hbF9saXN0ZGlyCisgICAgICAgIG9yaWdpbmFsX2lzZmlsZSA9IG9zLnBhdGguaXNmaWxlCisgICAgICAgIGRlZiByZXN0b3JlX2lzZmlsZSgpOgorICAgICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBvcmlnaW5hbF9pc2ZpbGUKKyAgICAgICAgb3JpZ2luYWxfaXNkaXIgPSBvcy5wYXRoLmlzZGlyCisgICAgICAgIGRlZiByZXN0b3JlX2lzZGlyKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZGlyID0gb3JpZ2luYWxfaXNkaXIKKworICAgICAgICBwYXRoX2xpc3RzID0gW1sndGVzdDEucHknLCAndGVzdDIucHknLCAnbm90X2FfdGVzdC5weScsICd0ZXN0X2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmZvbycsICd0ZXN0LW5vdC1hLW1vZHVsZS5weScsICdhbm90aGVyX2RpciddLAorICAgICAgICAgICAgICAgICAgICAgIFsndGVzdDMucHknLCAndGVzdDQucHknLCBdXQorICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIHBhdGg6IHBhdGhfbGlzdHMucG9wKDApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2xpc3RkaXIpCisKKyAgICAgICAgZGVmIGlzZGlyKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIHBhdGguZW5kc3dpdGgoJ2RpcicpCisgICAgICAgIG9zLnBhdGguaXNkaXIgPSBpc2RpcgorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9pc2RpcikKKworICAgICAgICBkZWYgaXNmaWxlKHBhdGgpOgorICAgICAgICAgICAgIyBhbm90aGVyX2RpciBpcyBub3QgYSBwYWNrYWdlIGFuZCBzbyBzaG91bGRuJ3QgYmUgcmVjdXJzZWQgaW50bworICAgICAgICAgICAgcmV0dXJuIG5vdCBwYXRoLmVuZHN3aXRoKCdkaXInKSBhbmQgbm90ICdhbm90aGVyX2RpcicgaW4gcGF0aAorICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGlzZmlsZQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9pc2ZpbGUpCisKKyAgICAgICAgbG9hZGVyLl9nZXRfbW9kdWxlX2Zyb21fbmFtZSA9IGxhbWJkYSBwYXRoOiBwYXRoICsgJyBtb2R1bGUnCisgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlID0gbGFtYmRhIG1vZHVsZTogbW9kdWxlICsgJyB0ZXN0cycKKworICAgICAgICB0b3BfbGV2ZWwgPSBvcy5wYXRoLmFic3BhdGgoJy9mb28nKQorICAgICAgICBsb2FkZXIuX3RvcF9sZXZlbF9kaXIgPSB0b3BfbGV2ZWwKKyAgICAgICAgc3VpdGUgPSBsaXN0KGxvYWRlci5fZmluZF90ZXN0cyh0b3BfbGV2ZWwsICd0ZXN0Ki5weScpKQorCisgICAgICAgIGV4cGVjdGVkID0gW25hbWUgKyAnIG1vZHVsZSB0ZXN0cycgZm9yIG5hbWUgaW4KKyAgICAgICAgICAgICAgICAgICAgKCd0ZXN0MScsICd0ZXN0MicpXQorICAgICAgICBleHBlY3RlZC5leHRlbmQoWygndGVzdF9kaXIuJXMnICUgbmFtZSkgKyAnIG1vZHVsZSB0ZXN0cycgZm9yIG5hbWUgaW4KKyAgICAgICAgICAgICAgICAgICAgKCd0ZXN0MycsICd0ZXN0NCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9maW5kX3Rlc3RzX3dpdGhfcGFja2FnZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgb3JpZ2luYWxfbGlzdGRpciA9IG9zLmxpc3RkaXIKKyAgICAgICAgZGVmIHJlc3RvcmVfbGlzdGRpcigpOgorICAgICAgICAgICAgb3MubGlzdGRpciA9IG9yaWdpbmFsX2xpc3RkaXIKKyAgICAgICAgb3JpZ2luYWxfaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKKyAgICAgICAgZGVmIHJlc3RvcmVfaXNmaWxlKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IG9yaWdpbmFsX2lzZmlsZQorICAgICAgICBvcmlnaW5hbF9pc2RpciA9IG9zLnBhdGguaXNkaXIKKyAgICAgICAgZGVmIHJlc3RvcmVfaXNkaXIoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBvcmlnaW5hbF9pc2RpcgorCisgICAgICAgIGRpcmVjdG9yaWVzID0gWydhX2RpcmVjdG9yeScsICd0ZXN0X2RpcmVjdG9yeScsICd0ZXN0X2RpcmVjdG9yeTInXQorICAgICAgICBwYXRoX2xpc3RzID0gW2RpcmVjdG9yaWVzLCBbXSwgW10sIFtdXQorICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIHBhdGg6IHBhdGhfbGlzdHMucG9wKDApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2xpc3RkaXIpCisKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGxhbWJkYSBwYXRoOiBUcnVlCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZGlyKQorCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gbGFtYmRhIHBhdGg6IG9zLnBhdGguYmFzZW5hbWUocGF0aCkgbm90IGluIGRpcmVjdG9yaWVzCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZmlsZSkKKworICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIHBhdGhzID0gW10KKyAgICAgICAgICAgIGxvYWRfdGVzdHNfYXJncyA9IFtdCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgICAgICAgICAgc2VsZi5wYXRocy5hcHBlbmQocGF0aCkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpID09ICd0ZXN0X2RpcmVjdG9yeSc6CisgICAgICAgICAgICAgICAgICAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkX3Rlc3RzX2FyZ3MuYXBwZW5kKChsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnbG9hZF90ZXN0cycKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkX3Rlc3RzID0gbG9hZF90ZXN0cworCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXRoID09IG90aGVyLnBhdGgKKworICAgICAgICAgICAgIyBTaWxlbmNlIHB5M2sgd2FybmluZworICAgICAgICAgICAgX19oYXNoX18gPSBOb25lCisKKyAgICAgICAgbG9hZGVyLl9nZXRfbW9kdWxlX2Zyb21fbmFtZSA9IGxhbWJkYSBuYW1lOiBNb2R1bGUobmFtZSkKKyAgICAgICAgZGVmIGxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlLCB1c2VfbG9hZF90ZXN0cyk6CisgICAgICAgICAgICBpZiB1c2VfbG9hZF90ZXN0czoKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24oJ3VzZV9sb2FkX3Rlc3RzIHNob3VsZCBiZSBGYWxzZSBmb3IgcGFja2FnZXMnKQorICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5wYXRoICsgJyBtb2R1bGUgdGVzdHMnCisgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlID0gbG9hZFRlc3RzRnJvbU1vZHVsZQorCisgICAgICAgIGxvYWRlci5fdG9wX2xldmVsX2RpciA9ICcvZm9vJworICAgICAgICAjIHRoaXMgdGltZSBubyAnLnB5JyBvbiB0aGUgcGF0dGVybiBzbyB0aGF0IGl0IGNhbiBtYXRjaAorICAgICAgICAjIGEgdGVzdCBwYWNrYWdlCisgICAgICAgIHN1aXRlID0gbGlzdChsb2FkZXIuX2ZpbmRfdGVzdHMoJy9mb28nLCAndGVzdConKSkKKworICAgICAgICAjIFdlIHNob3VsZCBoYXZlIGxvYWRlZCB0ZXN0cyBmcm9tIHRoZSB0ZXN0X2RpcmVjdG9yeSBwYWNrYWdlIGJ5IGNhbGxpbmcgbG9hZF90ZXN0cworICAgICAgICAjIGFuZCBkaXJlY3RseSBmcm9tIHRoZSB0ZXN0X2RpcmVjdG9yeTIgcGFja2FnZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnbG9hZF90ZXN0cycsICd0ZXN0X2RpcmVjdG9yeTInICsgJyBtb2R1bGUgdGVzdHMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUucGF0aHMsIFsndGVzdF9kaXJlY3RvcnknLCAndGVzdF9kaXJlY3RvcnkyJ10pCisKKyAgICAgICAgIyBsb2FkX3Rlc3RzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2Ugd2l0aCBsb2FkZXIsIHRlc3RzIGFuZCBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLmxvYWRfdGVzdHNfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKGxvYWRlciwgJ3Rlc3RfZGlyZWN0b3J5JyArICcgbW9kdWxlIHRlc3RzJywgJ3Rlc3QqJyldKQorCisgICAgZGVmIHRlc3RfZGlzY292ZXIoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIG9yaWdpbmFsX2lzZmlsZSA9IG9zLnBhdGguaXNmaWxlCisgICAgICAgIG9yaWdpbmFsX2lzZGlyID0gb3MucGF0aC5pc2RpcgorICAgICAgICBkZWYgcmVzdG9yZV9pc2ZpbGUoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gb3JpZ2luYWxfaXNmaWxlCisKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBsYW1iZGEgcGF0aDogRmFsc2UKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNmaWxlKQorCisgICAgICAgIG9yaWdfc3lzX3BhdGggPSBzeXMucGF0aFs6XQorICAgICAgICBkZWYgcmVzdG9yZV9wYXRoKCk6CisgICAgICAgICAgICBzeXMucGF0aFs6XSA9IG9yaWdfc3lzX3BhdGgKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfcGF0aCkKKworICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5ub3JtcGF0aCgnL2ZvbycpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5kaXNjb3ZlcignL2Zvby9iYXInLCB0b3BfbGV2ZWxfZGlyPScvZm9vJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5fdG9wX2xldmVsX2RpciwgZnVsbF9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEluKGZ1bGxfcGF0aCwgc3lzLnBhdGgpCisKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBsYW1iZGEgcGF0aDogVHJ1ZQorICAgICAgICBvcy5wYXRoLmlzZGlyID0gbGFtYmRhIHBhdGg6IFRydWUKKworICAgICAgICBkZWYgcmVzdG9yZV9pc2RpcigpOgorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZGlyKQorCisgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MgPSBbXQorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MuYXBwZW5kKChzdGFydF9kaXIsIHBhdHRlcm4pKQorICAgICAgICAgICAgcmV0dXJuIFsndGVzdHMnXQorICAgICAgICBsb2FkZXIuX2ZpbmRfdGVzdHMgPSBfZmluZF90ZXN0cworICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IHN0cgorCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCcvZm9vL2Jhci9iYXonLCAncGF0dGVybicsICcvZm9vL2JhcicpCisKKyAgICAgICAgdG9wX2xldmVsX2RpciA9IG9zLnBhdGguYWJzcGF0aCgnL2Zvby9iYXInKQorICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoJy9mb28vYmFyL2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsICJbJ3Rlc3RzJ10iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5fdG9wX2xldmVsX2RpciwgdG9wX2xldmVsX2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZmluZF90ZXN0c19hcmdzLCBbKHN0YXJ0X2RpciwgJ3BhdHRlcm4nKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odG9wX2xldmVsX2Rpciwgc3lzLnBhdGgpCisKKyAgICBkZWYgdGVzdF9kaXNjb3Zlcl93aXRoX21vZHVsZXNfdGhhdF9mYWlsX3RvX2ltcG9ydChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgbGlzdGRpciA9IG9zLmxpc3RkaXIKKyAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBfOiBbJ3Rlc3RfdGhpc19kb2VzX25vdF9leGlzdC5weSddCisgICAgICAgIGlzZmlsZSA9IG9zLnBhdGguaXNmaWxlCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gbGFtYmRhIF86IFRydWUKKyAgICAgICAgb3JpZ19zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIGRlZiByZXN0b3JlKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGlzZmlsZQorICAgICAgICAgICAgb3MubGlzdGRpciA9IGxpc3RkaXIKKyAgICAgICAgICAgIHN5cy5wYXRoWzpdID0gb3JpZ19zeXNfcGF0aAorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZSkKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignLicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MuZ2V0Y3dkKCksIHN5cy5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCisgICAgICAgIHRlc3QgPSBsaXN0KGxpc3Qoc3VpdGUpWzBdKVswXSAjIGV4dHJhY3QgdGVzdCBmcm9tIHN1aXRlCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICB0ZXN0LnRlc3RfdGhpc19kb2VzX25vdF9leGlzdCgpCisKKyAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfcGFyc2VBcmdzKHNlbGYpOgorICAgICAgICAjIEhhaGEgLSB0YWtlIHRoYXQgdW5pbnN0YW50aWFibGUgY2xhc3MKKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorCisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgorICAgICAgICAgICAgYXJncy5leHRlbmQoYXJndikKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5CisgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJ2Rpc2NvdmVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnZGlzY292ZXInLCAnZm9vJywgJ2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnZm9vJywgJ2JhciddKQorCisgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2RvX2Rpc2NvdmVyeV90b29fbWFueV9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIGNsYXNzIFN0b3AoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIHVzYWdlRXhpdCgpOgorICAgICAgICAgICAgcmFpc2UgU3RvcAorCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS51c2FnZUV4aXQgPSB1c2FnZUV4aXQKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3ApOgorICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCisgICAgICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXSkKKworCisgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2RvX2Rpc2NvdmVyeV9jYWxsc19sb2FkZXIoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKworICAgICAgICBjbGFzcyBMb2FkZXIob2JqZWN0KToKKyAgICAgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICAgICAgZGVmIGRpc2NvdmVyKHNlbGYsIHN0YXJ0X2RpciwgcGF0dGVybiwgdG9wX2xldmVsX2Rpcik6CisgICAgICAgICAgICAgICAgc2VsZi5hcmdzLmFwcGVuZCgoc3RhcnRfZGlyLCBwYXR0ZXJuLCB0b3BfbGV2ZWxfZGlyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3Rlc3RzJworCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJy12J10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCcuJywgJ3Rlc3QqLnB5JywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWyctLXZlcmJvc2UnXSwgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJy4nLCAndGVzdCoucHknLCBOb25lKV0pCisKKyAgICAgICAgTG9hZGVyLmFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbXSwgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJy4nLCAndGVzdCoucHknLCBOb25lKV0pCisKKyAgICAgICAgTG9hZGVyLmFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJ2Zpc2gnXSwgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJ2Zpc2gnLCAndGVzdCoucHknLCBOb25lKV0pCisKKyAgICAgICAgTG9hZGVyLmFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJ2Zpc2gnLCAnZWdncyddLCBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnZmlzaCcsICdlZ2dzJywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydmaXNoJywgJ2VnZ3MnLCAnaGFtJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCdmaXNoJywgJ2VnZ3MnLCAnaGFtJyldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWyctcycsICdmaXNoJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCdmaXNoJywgJ3Rlc3QqLnB5JywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWyctdCcsICdmaXNoJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCcuJywgJ3Rlc3QqLnB5JywgJ2Zpc2gnKV0pCisKKyAgICAgICAgTG9hZGVyLmFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJy1wJywgJ2Zpc2gnXSwgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJy4nLCAnZmlzaCcsIE5vbmUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcm9ncmFtLmZhaWxmYXN0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHByb2dyYW0uY2F0Y2hicmVhaykKKworICAgICAgICBMb2FkZXIuYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnLXAnLCAnZWdncycsICctcycsICdmaXNoJywgJy12JywgJy1mJywgJy1jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnZmlzaCcsICdlZ2dzJywgTm9uZSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvZ3JhbS5mYWlsZmFzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2dyYW0uY2F0Y2hicmVhaykKKworICAgIGRlZiB0ZXN0X2RldGVjdF9tb2R1bGVfY2xhc2goc2VsZik6CisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgX19maWxlX18gPSAnYmFyL2Zvby5weScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ2ZvbyddID0gTW9kdWxlCisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguYWJzcGF0aCgnZm9vJykKKyAgICAgICAgb3JpZ2luYWxfbGlzdGRpciA9IG9zLmxpc3RkaXIKKyAgICAgICAgb3JpZ2luYWxfaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKKyAgICAgICAgb3JpZ2luYWxfaXNkaXIgPSBvcy5wYXRoLmlzZGlyCisKKyAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgIG9zLmxpc3RkaXIgPSBvcmlnaW5hbF9saXN0ZGlyCisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IG9yaWdpbmFsX2lzZmlsZQorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ2ZvbyddCisgICAgICAgICAgICBpZiBmdWxsX3BhdGggaW4gc3lzLnBhdGg6CisgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKGZ1bGxfcGF0aCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisKKyAgICAgICAgZGVmIGxpc3RkaXIoXyk6CisgICAgICAgICAgICByZXR1cm4gWydmb28ucHknXQorICAgICAgICBkZWYgaXNmaWxlKF8pOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZGVmIGlzZGlyKF8pOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgb3MubGlzdGRpciA9IGxpc3RkaXIKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBpc2ZpbGUKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGlzZGlyCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgbW9kX2RpciA9IG9zLnBhdGguYWJzcGF0aCgnYmFyJykKKyAgICAgICAgZXhwZWN0ZWRfZGlyID0gb3MucGF0aC5hYnNwYXRoKCdmb28nKQorICAgICAgICBtc2cgPSByZS5lc2NhcGUociInZm9vJyBtb2R1bGUgaW5jb3JyZWN0bHkgaW1wb3J0ZWQgZnJvbSAlci4gRXhwZWN0ZWQgJXIuICIKKyAgICAgICAgICAgICAgICAiSXMgdGhpcyBtb2R1bGUgZ2xvYmFsbHkgaW5zdGFsbGVkPyIgJSAobW9kX2RpciwgZXhwZWN0ZWRfZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoCisgICAgICAgICAgICBJbXBvcnRFcnJvciwgJ14lcyQnICUgbXNnLCBsb2FkZXIuZGlzY292ZXIsCisgICAgICAgICAgICBzdGFydF9kaXI9J2ZvbycsIHBhdHRlcm49J2Zvby5weScKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5wYXRoWzBdLCBmdWxsX3BhdGgpCisKKworICAgIGRlZiB0ZXN0X2Rpc2NvdmVyeV9mcm9tX2RvdHRlZF9wYXRoKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0ZXN0cyA9IFtzZWxmXQorICAgICAgICBleHBlY3RlZFBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKHVuaXR0ZXN0LnRlc3QuX19maWxlX18pKQorCisgICAgICAgIHNlbGYud2FzUnVuID0gRmFsc2UKKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAgICAgICAgICBzZWxmLndhc1J1biA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnRfZGlyLCBleHBlY3RlZFBhdGgpCisgICAgICAgICAgICByZXR1cm4gdGVzdHMKKyAgICAgICAgbG9hZGVyLl9maW5kX3Rlc3RzID0gX2ZpbmRfdGVzdHMKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJ3VuaXR0ZXN0LnRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi53YXNSdW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuX3Rlc3RzLCB0ZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGQ4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkKQEAgLTAsMCArMSwxNDggQEAKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0CisKKworY2xhc3MgVGVzdF9GdW5jdGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LiBGb3IKKyAgICAjIFRlc3RDYXNlIGluc3RhbmNlcywgdGhpcyB3aWxsIGFsd2F5cyBiZSAxIgorICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzKHNlbGYpOgorICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LmNvdW50VGVzdENhc2VzKCksIDEpCisKKyAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCisgICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQorICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKKyAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCisgICAgIworICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHNldFVwKCkgcmFpc2VzCisgICAgIyBhbiBleGNlcHRpb24uCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3NldFVwKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBkZWYgc2V0VXAoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IHNldFVwJykKKworICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCisKKyAgICAgICAgZGVmIHRlYXJEb3duKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICdhZGRFcnJvcicsICdzdG9wVGVzdCddCisgICAgICAgIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdCwgc2V0VXAsIHRlYXJEb3duKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCisgICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQorICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKKyAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCisgICAgIworICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRoZSB0ZXN0IHJhaXNlcworICAgICMgYW4gZXJyb3IgKGFzIG9wcG9zZWQgdG8gYSBmYWlsdXJlKS4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fdGVzdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgZGVmIHNldFVwKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgdGVzdCcpCisKKyAgICAgICAgZGVmIHRlYXJEb3duKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEVycm9yJywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KKyAgICAgICAgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZSh0ZXN0LCBzZXRVcCwgdGVhckRvd24pLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKKyAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCisgICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAorICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGhlIHRlc3Qgc2lnbmFscworICAgICMgYSBmYWlsdXJlIChhcyBvcHBvc2VkIHRvIGFuIGVycm9yKS4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZmFpbHVyZV9pbl90ZXN0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBkZWYgc2V0VXAoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKKworICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCisgICAgICAgICAgICBzZWxmLmZhaWwoJ3JhaXNlZCBieSB0ZXN0JykKKworICAgICAgICBkZWYgdGVhckRvd24oKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAnYWRkRmFpbHVyZScsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCisgICAgICAgIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdCwgc2V0VXAsIHRlYXJEb3duKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCisgICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQorICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKKyAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCisgICAgIworICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRlYXJEb3duKCkgcmFpc2VzCisgICAgIyBhbiBleGNlcHRpb24uCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3RlYXJEb3duKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBkZWYgc2V0VXAoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKKworICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCisKKyAgICAgICAgZGVmIHRlYXJEb3duKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSB0ZWFyRG93bicpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywgJ2FkZEVycm9yJywKKyAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KKyAgICAgICAgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZSh0ZXN0LCBzZXRVcCwgdGVhckRvd24pLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIlJldHVybiBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgdGVzdCBjYXNlLiIKKyAgICAjCisgICAgIyBCZWNhdXNlIG9mIHRoZSB2YWd1ZSBuYXR1cmUgb2YgdGhlIGRvY3MsIEknbSBub3QgZ29pbmcgdG8gbG9jayB0aGlzCisgICAgIyB0ZXN0IGRvd24gdG9vIG11Y2guIFJlYWxseSBhbGwgdGhhdCBjYW4gYmUgYXNzZXJ0ZWQgaXMgdGhhdCB0aGUgaWQoKQorICAgICMgd2lsbCBiZSBhIHN0cmluZyAoZWl0aGVyIDgtYnl0ZSBvciB1bmljb2RlIC0tIGFnYWluLCBiZWNhdXNlIHRoZSBkb2NzCisgICAgIyBqdXN0IHNheSAic3RyaW5nIikKKyAgICBkZWYgdGVzdF9pZChzZWxmKToKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ZXN0LmlkKCksIGJhc2VzdHJpbmcpCisKKyAgICAjICJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIE5vbmUgaWYgbm8gZGVzY3JpcHRpb24KKyAgICAjIGhhcyBiZWVuIHByb3ZpZGVkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCByZXR1cm5zCisgICAgIyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdGVzdCBtZXRob2QncyBkb2NzdHJpbmcsIGlmIGF2YWlsYWJsZSwgb3IgTm9uZS4iCisgICAgZGVmIHRlc3Rfc2hvcnREZXNjcmlwdGlvbl9fbm9fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnNob3J0RGVzY3JpcHRpb24oKSwgTm9uZSkKKworICAgICMgIlJldHVybnMgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCwgb3IgTm9uZSBpZiBubyBkZXNjcmlwdGlvbgorICAgICMgaGFzIGJlZW4gcHJvdmlkZWQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHJldHVybnMKKyAgICAjIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB0ZXN0IG1ldGhvZCdzIGRvY3N0cmluZywgaWYgYXZhaWxhYmxlLCBvciBOb25lLiIKKyAgICBkZWYgdGVzdF9zaG9ydERlc2NyaXB0aW9uX19zaW5nbGVsaW5lX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZGVzYyA9ICJ0aGlzIHRlc3RzIGZvbyIKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lLCBkZXNjcmlwdGlvbj1kZXNjKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5zaG9ydERlc2NyaXB0aW9uKCksICJ0aGlzIHRlc3RzIGZvbyIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0NGEyMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5CkBAIC0wLDAgKzEsMTI4NiBAQAoraW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCisKKworaW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgVGVzdF9UZXN0TG9hZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBUZXN0Q2FzZS1kZXJpdmVkCisgICAgIyBjbGFzcyB0ZXN0Q2FzZUNsYXNzIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisKKyAgICAgICAgdGVzdHMgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHMpCisKKyAgICAjICJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBUZXN0Q2FzZS1kZXJpdmVkCisgICAgIyBjbGFzcyB0ZXN0Q2FzZUNsYXNzIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSBpdCBkb2VzIHRoZSByaWdodCB0aGluZyBldmVuIGlmIG5vIHRlc3RzIHdlcmUgZm91bmQKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tVGVzdENhc2VfX25vX21hdGNoZXMoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworCisgICAgICAgIGVtcHR5X3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIGVtcHR5X3N1aXRlKQorCisgICAgIyAiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgVGVzdENhc2UtZGVyaXZlZAorICAgICMgY2xhc3MgdGVzdENhc2VDbGFzcyIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgaWYgbG9hZFRlc3RzRnJvbVRlc3RDYXNlKCkgaXMgZ2l2ZW4gYW4gb2JqZWN0CisgICAgIyB0aGF0IGlzbid0IGEgc3ViY2xhc3Mgb2YgVGVzdENhc2U/IFNwZWNpZmljYWxseSwgd2hhdCBoYXBwZW5zCisgICAgIyBpZiB0ZXN0Q2FzZUNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgVGVzdFN1aXRlPworICAgICMKKyAgICAjIFRoaXMgaXMgY2hlY2tlZCBmb3Igc3BlY2lmaWNhbGx5IGluIHRoZSBjb2RlLCBzbyB3ZSBiZXR0ZXIgYWRkIGEKKyAgICAjIHRlc3QgZm9yIGl0LgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21UZXN0Q2FzZV9fVGVzdFN1aXRlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBOb3RBVGVzdENhc2UodW5pdHRlc3QuVGVzdFN1aXRlKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShOb3RBVGVzdENhc2UpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1Nob3VsZCByYWlzZSBUeXBlRXJyb3InKQorCisgICAgIyAiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgVGVzdENhc2UtZGVyaXZlZAorICAgICMgY2xhc3MgdGVzdENhc2VDbGFzcyIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgbG9hZFRlc3RzRnJvbVRlc3RDYXNlKCkgcGlja3MgdXAgdGhlIGRlZmF1bHQgdGVzdCBtZXRob2QKKyAgICAjIG5hbWUgKGFzIHNwZWNpZmllZCBieSBUZXN0Q2FzZSksIGV2ZW4gdGhvdWdoIHRoZSBtZXRob2QgbmFtZSBkb2VzCisgICAgIyBub3QgbWF0Y2ggdGhlIGRlZmF1bHQgVGVzdExvYWRlci50ZXN0TWV0aG9kUHJlZml4IHN0cmluZworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21UZXN0Q2FzZV9fZGVmYXVsdF9tZXRob2RfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgIyBUaGlzIGhhcyB0byBiZSBmYWxzZSBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdydW5UZXN0Jy5zdGFydHN3aXRoKGxvYWRlci50ZXN0TWV0aG9kUHJlZml4KSkKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbRm9vKCdydW5UZXN0JyldKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlCisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgIlRoaXMgbWV0aG9kIHNlYXJjaGVzIGBtb2R1bGVgIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbSBUZXN0Q2FzZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19UZXN0Q2FzZV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbbG9hZGVyLnN1aXRlQ2xhc3MoW015VGVzdENhc2UoJ3Rlc3QnKV0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBleHBlY3RlZCkKKworICAgICMgIlRoaXMgbWV0aG9kIHNlYXJjaGVzIGBtb2R1bGVgIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbSBUZXN0Q2FzZSIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgaWYgbm8gdGVzdHMgYXJlIGZvdW5kIChubyBUZXN0Q2FzZSBpbnN0YW5jZXMpPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX25vX1Rlc3RDYXNlX2luc3RhbmNlcyhzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtdKQorCisgICAgIyAiVGhpcyBtZXRob2Qgc2VhcmNoZXMgYG1vZHVsZWAgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIFRlc3RDYXNlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiBubyB0ZXN0cyBhcmUgZm91bmQgKFRlc3RDYXNlcyBpbnN0YW5jZXMsIGJ1dCBubyB0ZXN0cyk/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fbm9fVGVzdENhc2VfdGVzdHMoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtsb2FkZXIuc3VpdGVDbGFzcygpXSkKKworICAgICMgIlRoaXMgbWV0aG9kIHNlYXJjaGVzIGBtb2R1bGVgIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbSBUZXN0Q2FzZSJzCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIGxvYWRUZXN0c0Zyb21Nb2R1bGUoKSBpcyBnaXZlbiBzb21ldGhpbmcgb3RoZXIKKyAgICAjIHRoYW4gYSBtb2R1bGU/CisgICAgIworICAgICMgWFhYIEN1cnJlbnRseSwgaXQgc3VjY2VlZHMgYW55d2F5LiBUaGlzIGZsZXhpYmlsaXR5CisgICAgIyBzaG91bGQgZWl0aGVyIGJlIGRvY3VtZW50ZWQgb3IgbG9hZFRlc3RzRnJvbU1vZHVsZSgpIHNob3VsZAorICAgICMgcmFpc2UgYSBUeXBlRXJyb3IKKyAgICAjCisgICAgIyBYWFggQ2VydGFpbiBwZW9wbGUgYXJlIHVzaW5nIHRoaXMgYmVoYXZpb3VyLiBXZSdsbCBhZGQgYSB0ZXN0IGZvciBpdAorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX25vdF9hX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgTm90QU1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgdGVzdF8yID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKE5vdEFNb2R1bGUpCisKKyAgICAgICAgcmVmZXJlbmNlID0gW3VuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIHJlZmVyZW5jZSkKKworCisgICAgIyBDaGVjayB0aGF0IGxvYWRUZXN0c0Zyb21Nb2R1bGUgaG9ub3JzIChvciBub3QpIGEgbW9kdWxlCisgICAgIyB3aXRoIGEgbG9hZF90ZXN0cyBmdW5jdGlvbi4KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19sb2FkX3Rlc3RzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZF90ZXN0c19hcmdzID0gW10KKyAgICAgICAgZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGVzdHMsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKyAgICAgICAgICAgIGxvYWRfdGVzdHNfYXJncy5leHRlbmQoKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RzCisgICAgICAgIG0ubG9hZF90ZXN0cyA9IGxvYWRfdGVzdHMKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkX3Rlc3RzX2FyZ3MsIFtsb2FkZXIsIHN1aXRlLCBOb25lXSkKKworICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MgPSBbXQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0sIHVzZV9sb2FkX3Rlc3RzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRfdGVzdHNfYXJncywgW10pCisKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19mYXVsdHlfbG9hZF90ZXN0cyhzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorCisgICAgICAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzb21lIGZhaWx1cmUnKQorICAgICAgICBtLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCB1bml0dGVzdC5UZXN0U3VpdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKKyAgICAgICAgdGVzdCA9IGxpc3Qoc3VpdGUpWzBdCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCAic29tZSBmYWlsdXJlIiwgdGVzdC5tKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZSgpCisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoKQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgSXMgVmFsdWVFcnJvciByYWlzZWQgaW4gcmVzcG9uc2UgdG8gYW4gZW1wdHkgbmFtZT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fZW1wdHlfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCcnKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiRW1wdHkgbW9kdWxlIG5hbWUiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIG5hbWUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19tYWxmb3JtZWRfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgVmFsdWVFcnJvciBvciBJbXBvcnRFcnJvcj8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdhYmMgKCkgLy8nKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0byBhCisgICAgIyBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gYSBtb2R1bGUgYnkgdGhhdCBuYW1lIGNhbid0IGJlIGZvdW5kPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX191bmtub3duX21vZHVsZV9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3NkYXNmYXNmYXNkZicpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiTm8gbW9kdWxlIG5hbWVkIHNkYXNmYXNmYXNkZiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIEltcG9ydEVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIG1vZHVsZSBpcyBmb3VuZCwgYnV0IHRoZSBhdHRyaWJ1dGUgY2FuJ3Q/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3Vua25vd25fYXR0cl9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3VuaXR0ZXN0LnNkYXNmYXNmYXNkZicpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHdlIHByb3ZpZGUgdGhlIG1vZHVsZSwgYnV0IHRoZSBhdHRyaWJ1dGUgY2FuJ3QgYmUKKyAgICAjIGZvdW5kPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV91bmtub3duX25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnc2Rhc2Zhc2Zhc2RmJywgdW5pdHRlc3QpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMgLi4uCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lIHJhaXNlIFZhbHVlRXJyb3Igd2hlbiBwYXNzZWQgYW4gZW1wdHkKKyAgICAjIG5hbWUgcmVsYXRpdmUgdG8gYSBwcm92aWRlZCBtb2R1bGU/CisgICAgIworICAgICMgWFhYIFNob3VsZCBwcm9iYWJseSByYWlzZSBhIFZhbHVlRXJyb3IgaW5zdGVhZCBvZiBhbiBBdHRyaWJ1dGVFcnJvcgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9lbXB0eV9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJycsIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMgLi4uCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBhbiBpbXBvc3NpYmxlIG5hbWUgaXMgZ2l2ZW4sIHJlbGF0aXZlIHRvIHRoZSBwcm92aWRlZAorICAgICMgYG1vZHVsZWA/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX21hbGZvcm1lZF9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBBdHRyaWJ1dGVFcnJvciBvciBWYWx1ZUVycm9yPworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ2FiYyAoKSAvLycsIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgRG9lcyBsb2FkVGVzdHNGcm9tTmFtZSByYWlzZSBUeXBlRXJyb3Igd2hlbiB0aGUgYG1vZHVsZWAgYXJndW1lbnQKKyAgICAjIGlzbid0IGEgbW9kdWxlIG9iamVjdD8KKyAgICAjCisgICAgIyBYWFggQWNjZXB0cyB0aGUgbm90LWEtbW9kdWxlIG9iamVjdCwgaWdub3JuaW5nIHRoZSBvYmplY3QncyB0eXBlCisgICAgIyBUaGlzIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gb3IgdGhlIG1ldGhvZCBuYW1lIHNob3VsZCBiZSBjaGFuZ2VkCisgICAgIworICAgICMgWFhYIFNvbWUgcGVvcGxlIGFyZSByZWx5aW5nIG9uIHRoaXMsIHNvIGtlZXAgaXQgZm9yIG5vdworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9ub3RfYV9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIE5vdEFNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIHRlc3RfMiA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3Rlc3RfMicsIE5vdEFNb2R1bGUpCisKKyAgICAgICAgcmVmZXJlbmNlID0gW015VGVzdENhc2UoJ3Rlc3QnKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgcmVmZXJlbmNlKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBEb2VzIGl0IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgbmFtZSByZXNvbHZlcyB0byBhbiBpbnZhbGlkCisgICAgIyBvYmplY3Q/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX2JhZF9vYmplY3Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gb2JqZWN0KCkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xJywgbSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIFR5cGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkKKyAgICAjIHJlc29sdmUgZWl0aGVyIHRvIC4uLiBhIHRlc3QgY2FzZSBjbGFzcyIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfVGVzdENhc2Vfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3Rlc3RjYXNlXzEnLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0c3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0c3VpdGUnLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX3Rlc3RtZXRob2Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3Rlc3RjYXNlXzEudGVzdCcsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW015VGVzdENhc2UoJ3Rlc3QnKV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIERvZXMgbG9hZFRlc3RzRnJvbU5hbWUoKSByYWlzZSB0aGUgcHJvcGVyIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0bworICAgICMgcmVzb2x2ZSAiYSB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiIHRoYXQgZG9lc24ndCBleGlzdAorICAgICMgZm9yIHRoZSBnaXZlbiBuYW1lIChyZWxhdGl2ZSB0byBhIHByb3ZpZGVkIG1vZHVsZSk/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX2ludmFsaWRfdGVzdG1ldGhvZChzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3Rlc3RjYXNlXzEudGVzdGZvbycsIG0pCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAidHlwZSBvYmplY3QgJ015VGVzdENhc2UnIGhhcyBubyBhdHRyaWJ1dGUgJ3Rlc3Rmb28nIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSAuLi4gVGVzdFN1aXRlIGluc3RhbmNlIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fVGVzdFN1aXRlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIHRlc3RjYXNlXzEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgdGVzdGNhc2VfMiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBkZWYgcmV0dXJuX1Rlc3RTdWl0ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdGNhc2VfMSwgdGVzdGNhc2VfMl0pCisgICAgICAgIG0ucmV0dXJuX1Rlc3RTdWl0ZSA9IHJldHVybl9UZXN0U3VpdGUKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3JldHVybl9UZXN0U3VpdGUnLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdGNhc2VfMSwgdGVzdGNhc2VfMl0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2UgLi4uIGluc3RhbmNlIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fVGVzdENhc2VfaW5zdGFuY2Uoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgdGVzdGNhc2VfMSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBkZWYgcmV0dXJuX1Rlc3RDYXNlKCk6CisgICAgICAgICAgICByZXR1cm4gdGVzdGNhc2VfMQorICAgICAgICBtLnJldHVybl9UZXN0Q2FzZSA9IHJldHVybl9UZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgncmV0dXJuX1Rlc3RDYXNlJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RjYXNlXzFdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIC4uLiBpbnN0YW5jZSIKKyAgICAjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAjT3ZlcnJpZGUgdGhlIHN1aXRlQ2xhc3MgYXR0cmlidXRlIHRvIGVuc3VyZSB0aGF0IHRoZSBzdWl0ZUNsYXNzCisgICAgI2F0dHJpYnV0ZSBpcyB1c2VkCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX2NhbGxhYmxlX19UZXN0Q2FzZV9pbnN0YW5jZV9Qcm9wZXJTdWl0ZUNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBTdWJUZXN0U3VpdGUodW5pdHRlc3QuVGVzdFN1aXRlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIGRlZiByZXR1cm5fVGVzdENhc2UoKToKKyAgICAgICAgICAgIHJldHVybiB0ZXN0Y2FzZV8xCisgICAgICAgIG0ucmV0dXJuX1Rlc3RDYXNlID0gcmV0dXJuX1Rlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gU3ViVGVzdFN1aXRlCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdyZXR1cm5fVGVzdENhc2UnLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdGNhc2VfMV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIKKyAgICAjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAjT3ZlcnJpZGUgdGhlIHN1aXRlQ2xhc3MgYXR0cmlidXRlIHRvIGVuc3VyZSB0aGF0IHRoZSBzdWl0ZUNsYXNzCisgICAgI2F0dHJpYnV0ZSBpcyB1c2VkCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX3Rlc3RtZXRob2RfUHJvcGVyU3VpdGVDbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU3ViVGVzdFN1aXRlKHVuaXR0ZXN0LlRlc3RTdWl0ZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3M9U3ViVGVzdFN1aXRlCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xLnRlc3QnLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZSIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgaWYgdGhlIGNhbGxhYmxlIHJldHVybnMgc29tZXRoaW5nIGVsc2U/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX2NhbGxhYmxlX193cm9uZ190eXBlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGRlZiByZXR1cm5fd3JvbmcoKToKKyAgICAgICAgICAgIHJldHVybiA2CisgICAgICAgIG0ucmV0dXJuX3dyb25nID0gcmV0dXJuX3dyb25nCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgncmV0dXJuX3dyb25nJywgbSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgY2FuIHJlZmVyIHRvIG1vZHVsZXMgYW5kIHBhY2thZ2VzIHdoaWNoIGhhdmUgbm90IGJlZW4KKyAgICAjIGltcG9ydGVkOyB0aGV5IHdpbGwgYmUgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdCIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fbW9kdWxlX25vdF9sb2FkZWQoc2VsZik6CisgICAgICAgICMgV2UncmUgZ29pbmcgdG8gdHJ5IHRvIGxvYWQgdGhpcyBtb2R1bGUgYXMgYSBzaWRlLWVmZmVjdCwgc28gaXQKKyAgICAgICAgIyBiZXR0ZXIgbm90IGJlIGxvYWRlZCBiZWZvcmUgd2UgdHJ5LgorICAgICAgICAjCisgICAgICAgIG1vZHVsZV9uYW1lID0gJ3VuaXR0ZXN0LnRlc3QuZHVtbXknCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChtb2R1bGVfbmFtZSwgTm9uZSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobW9kdWxlX25hbWUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbXSkKKworICAgICAgICAgICAgIyBtb2R1bGUgc2hvdWxkIG5vdyBiZSBsb2FkZWQsIHRoYW5rcyB0byBsb2FkVGVzdHNGcm9tTmFtZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZV9uYW1lLCBzeXMubW9kdWxlcykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoKQorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcygpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiU2ltaWxhciB0byBsb2FkVGVzdHNGcm9tTmFtZSgpLCBidXQgdGFrZXMgYSBzZXF1ZW5jZSBvZiBuYW1lcyByYXRoZXIKKyAgICAjIHRoYW4gYSBzaW5nbGUgbmFtZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIHRoYXQgc2VxdWVuY2Ugb2YgbmFtZXMgaXMgZW1wdHk/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19lbXB0eV9uYW1lX2xpc3Qoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW10pCisKKyAgICAjICJTaW1pbGFyIHRvIGxvYWRUZXN0c0Zyb21OYW1lKCksIGJ1dCB0YWtlcyBhIHNlcXVlbmNlIG9mIG5hbWVzIHJhdGhlcgorICAgICMgdGhhbiBhIHNpbmdsZSBuYW1lLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIHRoYXQgc2VxdWVuY2Ugb2YgbmFtZXMgaXMgZW1wdHk/CisgICAgIworICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIGEgVmFsdWVFcnJvciBvciBqdXN0IHJldHVybiBhbiBlbXB0eSBUZXN0U3VpdGU/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9lbXB0eV9uYW1lX2xpc3Qoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbXSwgdW5pdHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBJcyBWYWx1ZUVycm9yIHJhaXNlZCBpbiByZXNwb25zZSB0byBhbiBlbXB0eSBuYW1lPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fZW1wdHlfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJyddKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiRW1wdHkgbW9kdWxlIG5hbWUiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIGltcG9zc2libGUgbW9kdWxlIG5hbWU/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19tYWxmb3JtZWRfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgVmFsdWVFcnJvciBvciBJbXBvcnRFcnJvcj8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ2FiYyAoKSAvLyddKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIG5vIG1vZHVsZSBjYW4gYmUgZm91bmQgZm9yIHRoZSBnaXZlbiBuYW1lPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fdW5rbm93bl9tb2R1bGVfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3NkYXNmYXNmYXNkZiddKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIk5vIG1vZHVsZSBuYW1lZCBzZGFzZmFzZmFzZGYiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgSW1wb3J0RXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgbW9kdWxlIGNhbiBiZSBmb3VuZCwgYnV0IG5vdCB0aGUgYXR0cmlidXRlPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fdW5rbm93bl9hdHRyX25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd1bml0dGVzdC5zZGFzZmFzZmFzZGYnLCAndW5pdHRlc3QnXSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICInbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2Rhc2Zhc2Zhc2RmJyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMgLi4uCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBnaXZlbiBhbiB1bmtub3duIGF0dHJpYnV0ZSBvbiBhIHNwZWNpZmllZCBgbW9kdWxlYAorICAgICMgYXJndW1lbnQ/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX25hbWVfcmVsYXRpdmVfMShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3NkYXNmYXNmYXNkZiddLCB1bml0dGVzdCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICInbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2Rhc2Zhc2Zhc2RmJyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIyAuLi4KKyAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgorICAgICMKKyAgICAjIERvIHVua25vd24gYXR0cmlidXRlcyAocmVsYXRpdmUgdG8gYSBwcm92aWRlZCBtb2R1bGUpIHN0aWxsIHJhaXNlIGFuCisgICAgIyBleGNlcHRpb24gZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgdmFsaWQgYXR0cmlidXRlIG5hbWVzPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fdW5rbm93bl9uYW1lX3JlbGF0aXZlXzIoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydUZXN0Q2FzZScsICdzZGFzZmFzZmFzZGYnXSwgdW5pdHRlc3QpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMgLi4uCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBmYWNlZCB3aXRoIHRoZSBlbXB0eSBzdHJpbmc/CisgICAgIworICAgICMgWFhYIFRoaXMgY3VycmVudGx5IHJhaXNlcyBBdHRyaWJ1dGVFcnJvciwgdGhvdWdoIFZhbHVlRXJyb3IgaXMgcHJvYmFibHkKKyAgICAjIG1vcmUgYXBwcm9wcmlhdGUKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX2VtcHR5X25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWycnXSwgdW5pdHRlc3QpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gcHJlc2VudGVkIHdpdGggYW4gaW1wb3NzaWJsZSBhdHRyaWJ1dGUgbmFtZT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX21hbGZvcm1lZF9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBBdHRyaWJ1dGVFcnJvciBvciBWYWx1ZUVycm9yPworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnYWJjICgpIC8vJ10sIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgorICAgICMKKyAgICAjIERvZXMgbG9hZFRlc3RzRnJvbU5hbWVzKCkgbWFrZSBzdXJlIHRoZSBwcm92aWRlZCBgbW9kdWxlYCBpcyBpbiBmYWN0CisgICAgIyBhIG1vZHVsZT8KKyAgICAjCisgICAgIyBYWFggVGhpcyB2YWxpZGF0aW9uIGlzIGN1cnJlbnRseSBub3QgZG9uZS4gVGhpcyBmbGV4aWJpbGl0eSBzaG91bGQKKyAgICAjIGVpdGhlciBiZSBkb2N1bWVudGVkIG9yIGEgVHlwZUVycm9yIHNob3VsZCBiZSByYWlzZWQuCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9ub3RfYV9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIE5vdEFNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIHRlc3RfMiA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndGVzdF8yJ10sIE5vdEFNb2R1bGUpCisKKyAgICAgICAgcmVmZXJlbmNlID0gW3VuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIHJlZmVyZW5jZSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgRG9lcyBpdCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIG5hbWUgcmVzb2x2ZXMgdG8gYW4gaW52YWxpZAorICAgICMgb2JqZWN0PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfYmFkX29iamVjdChzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBtLnRlc3RjYXNlXzEgPSBvYmplY3QoKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndGVzdGNhc2VfMSddLCBtKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgVHlwZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgdGVzdCBjYXNlIGNsYXNzIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfVGVzdENhc2Vfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndGVzdGNhc2VfMSddLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIGV4cGVjdGVkID0gbG9hZGVyLnN1aXRlQ2xhc3MoW015VGVzdENhc2UoJ3Rlc3QnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtleHBlY3RlZF0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIFRlc3RTdWl0ZSBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0c3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RzdWl0ZSddLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFttLnRlc3RzdWl0ZV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8gLi4uIGEKKyAgICAjIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX3Rlc3RtZXRob2Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndGVzdGNhc2VfMS50ZXN0J10sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgcmVmX3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbcmVmX3N1aXRlXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0byAuLi4gYQorICAgICMgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIgorICAgICMKKyAgICAjIERvZXMgdGhlIG1ldGhvZCBncmFjZWZ1bGx5IGhhbmRsZSBuYW1lcyB0aGF0IGluaXRpYWxseSBsb29rIGxpa2UgdGhleQorICAgICMgcmVzb2x2ZSB0byAiYSB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiIGJ1dCBkb24ndD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX2ludmFsaWRfdGVzdG1ldGhvZChzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndGVzdGNhc2VfMS50ZXN0Zm9vJ10sIG0pCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAidHlwZSBvYmplY3QgJ015VGVzdENhc2UnIGhhcyBubyBhdHRyaWJ1dGUgJ3Rlc3Rmb28nIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSAuLi4gVGVzdFN1aXRlIGluc3RhbmNlIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIHRlc3RjYXNlXzIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgZGVmIHJldHVybl9UZXN0U3VpdGUoKToKKyAgICAgICAgICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQorICAgICAgICBtLnJldHVybl9UZXN0U3VpdGUgPSByZXR1cm5fVGVzdFN1aXRlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3JldHVybl9UZXN0U3VpdGUnXSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBleHBlY3RlZCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdGNhc2VfMSwgdGVzdGNhc2VfMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtleHBlY3RlZF0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2UgLi4uIGluc3RhbmNlIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX1Rlc3RDYXNlX2luc3RhbmNlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIHRlc3RjYXNlXzEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgZGVmIHJldHVybl9UZXN0Q2FzZSgpOgorICAgICAgICAgICAgcmV0dXJuIHRlc3RjYXNlXzEKKyAgICAgICAgbS5yZXR1cm5fVGVzdENhc2UgPSByZXR1cm5fVGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsncmV0dXJuX1Rlc3RDYXNlJ10sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgcmVmX3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlIgorICAgICMKKyAgICAjIEFyZSBzdGF0aWNtZXRob2RzIGhhbmRsZWQgY29ycmVjdGx5PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX2NhbGxfc3RhdGljbWV0aG9kKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0Y2FzZV8xID0gVGVzdDEoJ3Rlc3QnKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0Y2FzZV8xCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0Zvby5mb28nXSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICByZWZfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbcmVmX3N1aXRlXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGNhbGxhYmxlIHJldHVybnMgc29tZXRoaW5nIGVsc2U/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19jYWxsYWJsZV9fd3JvbmdfdHlwZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBkZWYgcmV0dXJuX3dyb25nKCk6CisgICAgICAgICAgICByZXR1cm4gNgorICAgICAgICBtLnJldHVybl93cm9uZyA9IHJldHVybl93cm9uZworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsncmV0dXJuX3dyb25nJ10sIG0pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBjYW4gcmVmZXIgdG8gbW9kdWxlcyBhbmQgcGFja2FnZXMgd2hpY2ggaGF2ZSBub3QgYmVlbgorICAgICMgaW1wb3J0ZWQ7IHRoZXkgd2lsbCBiZSBpbXBvcnRlZCBhcyBhIHNpZGUtZWZmZWN0IgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fbW9kdWxlX25vdF9sb2FkZWQoc2VsZik6CisgICAgICAgICMgV2UncmUgZ29pbmcgdG8gdHJ5IHRvIGxvYWQgdGhpcyBtb2R1bGUgYXMgYSBzaWRlLWVmZmVjdCwgc28gaXQKKyAgICAgICAgIyBiZXR0ZXIgbm90IGJlIGxvYWRlZCBiZWZvcmUgd2UgdHJ5LgorICAgICAgICAjCisgICAgICAgIG1vZHVsZV9uYW1lID0gJ3VuaXR0ZXN0LnRlc3QuZHVtbXknCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChtb2R1bGVfbmFtZSwgTm9uZSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFttb2R1bGVfbmFtZV0pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdW5pdHRlc3QuVGVzdFN1aXRlKCldKQorCisgICAgICAgICAgICAjIG1vZHVsZSBzaG91bGQgbm93IGJlIGxvYWRlZCwgdGhhbmtzIHRvIGxvYWRUZXN0c0Zyb21OYW1lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlX25hbWUsIHN5cy5tb2R1bGVzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbW9kdWxlX25hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKCkKKworICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKCkKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzIgorICAgICMKKyAgICAjIFRlc3QuZm9vYmFyIGlzIGRlZmluZWQgdG8gbWFrZSBzdXJlIGdldFRlc3RDYXNlTmFtZXMoKSByZXNwZWN0cworICAgICMgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXgKKyAgICBkZWYgdGVzdF9nZXRUZXN0Q2FzZU5hbWVzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29iYXIoc2VsZik6IHBhc3MKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKFRlc3QpLCBbJ3Rlc3RfMScsICd0ZXN0XzInXSkKKworICAgICMgIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MiCisgICAgIworICAgICMgRG9lcyBnZXRUZXN0Q2FzZU5hbWVzKCkgYmVoYXZlIGFwcHJvcHJpYXRlbHkgaWYgbm8gdGVzdHMgYXJlIGZvdW5kPworICAgIGRlZiB0ZXN0X2dldFRlc3RDYXNlTmFtZXNfX25vX3Rlc3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBmb29iYXIoc2VsZik6IHBhc3MKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKFRlc3QpLCBbXSkKKworICAgICMgIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MiCisgICAgIworICAgICMgQXJlIG5vdC1UZXN0Q2FzZXMgaGFuZGxlZCBncmFjZWZ1bGx5PworICAgICMKKyAgICAjIFhYWCBUaGlzIHNob3VsZCByYWlzZSBhIFR5cGVFcnJvciwgbm90IHJldHVybiBhIGxpc3QKKyAgICAjCisgICAgIyBYWFggSXQncyB0b28gbGF0ZSBpbiB0aGUgMi41IHJlbGVhc2UgY3ljbGUgdG8gZml4IHRoaXMsIGJ1dCBpdCBzaG91bGQKKyAgICAjIHByb2JhYmx5IGJlIHJldmlzaXRlZCBmb3IgMi42CisgICAgZGVmIHRlc3RfZ2V0VGVzdENhc2VOYW1lc19fbm90X2FfVGVzdENhc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEJhZENhc2UoaW50KToKKyAgICAgICAgICAgIGRlZiB0ZXN0X2ZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIG5hbWVzID0gbG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoQmFkQ2FzZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzLCBbJ3Rlc3RfZm9vJ10pCisKKyAgICAjICJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSBpbmhlcml0ZWQgbmFtZXMgYXJlIGhhbmRsZWQuCisgICAgIworICAgICMgVGVzdFAuZm9vYmFyIGlzIGRlZmluZWQgdG8gbWFrZSBzdXJlIGdldFRlc3RDYXNlTmFtZXMoKSByZXNwZWN0cworICAgICMgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXgKKyAgICBkZWYgdGVzdF9nZXRUZXN0Q2FzZU5hbWVzX19pbmhlcml0YW5jZShzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdFAodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb2JhcihzZWxmKTogcGFzcworCisgICAgICAgIGNsYXNzIFRlc3RDKFRlc3RQKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzMoc2VsZik6IHBhc3MKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBuYW1lcyA9IFsndGVzdF8xJywgJ3Rlc3RfMicsICd0ZXN0XzMnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKFRlc3RDKSwgbmFtZXMpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKCkKKworICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci50ZXN0TWV0aG9kUHJlZml4CisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzCisgICAgIyB0ZXN0IG1ldGhvZHMiCisgICAgIworICAgICMgSW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgdGhhdCB0ZXN0TWV0aG9kUHJlZml4IGlzIHJlc3BlY3RlZCBieQorICAgICMgYWxsIGxvYWRUZXN0c0Zyb20qIG1ldGhvZHMuCisgICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKworICAgICAgICB0ZXN0c18xID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ2Zvb19iYXInKV0pCisgICAgICAgIHRlc3RzXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0c18xKQorCisgICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ3Rlc3QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0c18yKQorCisgICAgIyAiU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzCisgICAgIyB0ZXN0IG1ldGhvZHMiCisgICAgIworICAgICMgSW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgdGhhdCB0ZXN0TWV0aG9kUHJlZml4IGlzIHJlc3BlY3RlZCBieQorICAgICMgYWxsIGxvYWRUZXN0c0Zyb20qIG1ldGhvZHMuCisgICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKyAgICAgICAgbS5Gb28gPSBGb28KKworICAgICAgICB0ZXN0c18xID0gW3VuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKV0KKyAgICAgICAgdGVzdHNfMiA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKV0KKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkpLCB0ZXN0c18xKQorCisgICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ3Rlc3QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSksIHRlc3RzXzIpCisKKyAgICAjICJTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMKKyAgICAjIHRlc3QgbWV0aG9kcyIKKyAgICAjCisgICAgIyBJbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBpcyB0aGF0IHRlc3RNZXRob2RQcmVmaXggaXMgcmVzcGVjdGVkIGJ5CisgICAgIyBhbGwgbG9hZFRlc3RzRnJvbSogbWV0aG9kcy4KKyAgICBkZWYgdGVzdF90ZXN0TWV0aG9kUHJlZml4X19sb2FkVGVzdHNGcm9tTmFtZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKyAgICAgICAgbS5Gb28gPSBGb28KKworICAgICAgICB0ZXN0c18xID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ2Zvb19iYXInKV0pCisgICAgICAgIHRlc3RzXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdGb28nLCBtKSwgdGVzdHNfMSkKKworICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzXzIpCisKKyAgICAjICJTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMKKyAgICAjIHRlc3QgbWV0aG9kcyIKKyAgICAjCisgICAgIyBJbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBpcyB0aGF0IHRlc3RNZXRob2RQcmVmaXggaXMgcmVzcGVjdGVkIGJ5CisgICAgIyBhbGwgbG9hZFRlc3RzRnJvbSogbWV0aG9kcy4KKyAgICBkZWYgdGVzdF90ZXN0TWV0aG9kUHJlZml4X19sb2FkVGVzdHNGcm9tTmFtZXMoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgdGVzdHNfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ2Zvb19iYXInKV0pXSkKKyAgICAgICAgdGVzdHNfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pCisgICAgICAgIHRlc3RzXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RzXzJdKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0ZvbyddLCBtKSwgdGVzdHNfMSkKKworICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28nXSwgbSksIHRlc3RzXzIpCisKKyAgICAjICJUaGUgZGVmYXVsdCB2YWx1ZSBpcyAndGVzdCciCisgICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fZGVmYXVsdF92YWx1ZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9PSAndGVzdCcpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci50ZXN0TWV0aG9kUHJlZml4CisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJGdW5jdGlvbiB0byBiZSB1c2VkIHRvIGNvbXBhcmUgbWV0aG9kIG5hbWVzIHdoZW4gc29ydGluZyB0aGVtIGluCisgICAgIyBnZXRUZXN0Q2FzZU5hbWVzKCkgYW5kIGFsbCB0aGUgbG9hZFRlc3RzRnJvbVgoKSBtZXRob2RzIgorICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19sb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZik6CisgICAgICAgIGRlZiByZXZlcnNlZF9jbXAoeCwgeSk6CisgICAgICAgICAgICByZXR1cm4gLWNtcCh4LCB5KQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAorCisgICAgICAgIHRlc3RzID0gbG9hZGVyLnN1aXRlQ2xhc3MoW0ZvbygndGVzdF8yJyksIEZvbygndGVzdF8xJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHMpCisKKyAgICAjICJGdW5jdGlvbiB0byBiZSB1c2VkIHRvIGNvbXBhcmUgbWV0aG9kIG5hbWVzIHdoZW4gc29ydGluZyB0aGVtIGluCisgICAgIyBnZXRUZXN0Q2FzZU5hbWVzKCkgYW5kIGFsbCB0aGUgbG9hZFRlc3RzRnJvbVgoKSBtZXRob2RzIgorICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19sb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKKworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAorCisgICAgICAgIHRlc3RzID0gW2xvYWRlci5zdWl0ZUNsYXNzKFtGb28oJ3Rlc3RfMicpLCBGb28oJ3Rlc3RfMScpXSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSksIHRlc3RzKQorCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbU5hbWUoc2VsZik6CisgICAgICAgIGRlZiByZXZlcnNlZF9jbXAoeCwgeSk6CisgICAgICAgICAgICByZXR1cm4gLWNtcCh4LCB5KQorCisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgbS5Gb28gPSBGb28KKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gcmV2ZXJzZWRfY21wCisKKyAgICAgICAgdGVzdHMgPSBsb2FkZXIuc3VpdGVDbGFzcyhbRm9vKCd0ZXN0XzInKSwgRm9vKCd0ZXN0XzEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdGb28nLCBtKSwgdGVzdHMpCisKKyAgICAjICJGdW5jdGlvbiB0byBiZSB1c2VkIHRvIGNvbXBhcmUgbWV0aG9kIG5hbWVzIHdoZW4gc29ydGluZyB0aGVtIGluCisgICAgIyBnZXRUZXN0Q2FzZU5hbWVzKCkgYW5kIGFsbCB0aGUgbG9hZFRlc3RzRnJvbVgoKSBtZXRob2RzIgorICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19sb2FkVGVzdHNGcm9tTmFtZXMoc2VsZik6CisgICAgICAgIGRlZiByZXZlcnNlZF9jbXAoeCwgeSk6CisgICAgICAgICAgICByZXR1cm4gLWNtcCh4LCB5KQorCisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgbS5Gb28gPSBGb28KKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gcmV2ZXJzZWRfY21wCisKKyAgICAgICAgdGVzdHMgPSBbbG9hZGVyLnN1aXRlQ2xhc3MoW0ZvbygndGVzdF8yJyksIEZvbygndGVzdF8xJyldKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28nXSwgbSkpLCB0ZXN0cykKKworICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KKyAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSIKKyAgICAjCisgICAgIyBEb2VzIGl0IGFjdHVhbGx5IGFmZmVjdCBnZXRUZXN0Q2FzZU5hbWVzKCk/CisgICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2dldFRlc3RDYXNlTmFtZXMoc2VsZik6CisgICAgICAgIGRlZiByZXZlcnNlZF9jbXAoeCwgeSk6CisgICAgICAgICAgICByZXR1cm4gLWNtcCh4LCB5KQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAorCisgICAgICAgIHRlc3RfbmFtZXMgPSBbJ3Rlc3RfMicsICd0ZXN0XzEnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKEZvbyksIHRlc3RfbmFtZXMpCisKKyAgICAjICJUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgYnVpbHQtaW4gY21wKCkgZnVuY3Rpb24iCisgICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2RlZmF1bHRfdmFsdWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nIGlzIGNtcCkKKworICAgICMgIml0IGNhbiBiZSBzZXQgdG8gTm9uZSB0byBkaXNhYmxlIHRoZSBzb3J0LiIKKyAgICAjCisgICAgIyBYWFggSG93IGlzIHRoaXMgZGlmZmVyZW50IGZyb20gcmVhc3NpZ25pbmcgY21wPyBBcmUgdGhlIHRlc3RzIHJldHVybmVkCisgICAgIyBpbiBhIHJhbmRvbSBvcmRlciBvciBzb21ldGhpbmc/IFRoaXMgYmVoYXZpb3VyIHNob3VsZCBkaWUKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fTm9uZShzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gTm9uZQorCisgICAgICAgIHRlc3RfbmFtZXMgPSBbJ3Rlc3RfMicsICd0ZXN0XzEnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhGb28pKSwgc2V0KHRlc3RfbmFtZXMpKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcKKworICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5zdWl0ZUNsYXNzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiQ2FsbGFibGUgb2JqZWN0IHRoYXQgY29uc3RydWN0cyBhIHRlc3Qgc3VpdGUgZnJvbSBhIGxpc3Qgb2YgdGVzdHMuIgorICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2xvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisKKyAgICAgICAgdGVzdHMgPSBbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0KKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0cykKKworICAgICMgSXQgaXMgaW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIFRlc3RMb2FkZXIuc3VpdGVDbGFzcyB0aGF0CisgICAgIyBhbGwgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tKiBtZXRob2RzIHJlc3BlY3QgaXQuIExldCdzIG1ha2Ugc3VyZQorICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2xvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgdGVzdHMgPSBbW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldXQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSwgdGVzdHMpCisKKyAgICAjIEl0IGlzIGltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MgdGhhdAorICAgICMgYWxsIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbSogbWV0aG9kcyByZXNwZWN0IGl0LiBMZXQncyBtYWtlIHN1cmUKKyAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tTmFtZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKyAgICAgICAgbS5Gb28gPSBGb28KKworICAgICAgICB0ZXN0cyA9IFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ0ZvbycsIG0pLCB0ZXN0cykKKworICAgICMgSXQgaXMgaW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIFRlc3RMb2FkZXIuc3VpdGVDbGFzcyB0aGF0CisgICAgIyBhbGwgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tKiBtZXRob2RzIHJlc3BlY3QgaXQuIExldCdzIG1ha2Ugc3VyZQorICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2xvYWRUZXN0c0Zyb21OYW1lcyhzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKyAgICAgICAgbS5Gb28gPSBGb28KKworICAgICAgICB0ZXN0cyA9IFtbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV1dCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28nXSwgbSksIHRlc3RzKQorCisgICAgIyAiVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIFRlc3RTdWl0ZSBjbGFzcyIKKyAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19kZWZhdWx0X3ZhbHVlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvYWRlci5zdWl0ZUNsYXNzIGlzIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2M2EzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKQEAgLTAsMCArMSwyNTUgQEAKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3RfVGVzdFByb2dyYW0odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGlzY292ZXJ5X2Zyb21fZG90dGVkX3BhdGgoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRlc3RzID0gW3NlbGZdCisgICAgICAgIGV4cGVjdGVkUGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUodW5pdHRlc3QudGVzdC5fX2ZpbGVfXykpCisKKyAgICAgICAgc2VsZi53YXNSdW4gPSBGYWxzZQorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIHNlbGYud2FzUnVuID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydF9kaXIsIGV4cGVjdGVkUGF0aCkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0cworICAgICAgICBsb2FkZXIuX2ZpbmRfdGVzdHMgPSBfZmluZF90ZXN0cworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcigndW5pdHRlc3QudGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLndhc1J1bikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5fdGVzdHMsIHRlc3RzKQorCisgICAgIyBIb3JyaWJsZSB3aGl0ZSBib3ggdGVzdAorICAgIGRlZiB0ZXN0Tm9FeGl0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBvYmplY3QoKQorICAgICAgICB0ZXN0ID0gb2JqZWN0KCkKKworICAgICAgICBjbGFzcyBGYWtlUnVubmVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgcnVubmVyID0gRmFrZVJ1bm5lcigpCisKKyAgICAgICAgb2xkUGFyc2VBcmdzID0gdW5pdHRlc3QuVGVzdFByb2dyYW0ucGFyc2VBcmdzCisgICAgICAgIGRlZiByZXN0b3JlUGFyc2VBcmdzKCk6CisgICAgICAgICAgICB1bml0dGVzdC5UZXN0UHJvZ3JhbS5wYXJzZUFyZ3MgPSBvbGRQYXJzZUFyZ3MKKyAgICAgICAgdW5pdHRlc3QuVGVzdFByb2dyYW0ucGFyc2VBcmdzID0gbGFtYmRhICphcmdzOiBOb25lCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlUGFyc2VBcmdzKQorCisgICAgICAgIGRlZiByZW1vdmVUZXN0KCk6CisgICAgICAgICAgICBkZWwgdW5pdHRlc3QuVGVzdFByb2dyYW0udGVzdAorICAgICAgICB1bml0dGVzdC5UZXN0UHJvZ3JhbS50ZXN0ID0gdGVzdAorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVtb3ZlVGVzdCkKKworICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QuVGVzdFByb2dyYW0odGVzdFJ1bm5lcj1ydW5uZXIsIGV4aXQ9RmFsc2UsIHZlcmJvc2l0eT0yKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS5yZXN1bHQsIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5uZXIudGVzdCwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMikKKworICAgIGNsYXNzIEZvb0Jhcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIGRlZiB0ZXN0UGFzcyhzZWxmKToKKyAgICAgICAgICAgIGFzc2VydCBUcnVlCisgICAgICAgIGRlZiB0ZXN0RmFpbChzZWxmKToKKyAgICAgICAgICAgIGFzc2VydCBGYWxzZQorCisgICAgY2xhc3MgRm9vQmFyTG9hZGVyKHVuaXR0ZXN0LlRlc3RMb2FkZXIpOgorICAgICAgICAiIiJUZXN0IGxvYWRlciB0aGF0IHJldHVybnMgYSBzdWl0ZSBjb250YWluaW5nIEZvb0Jhci4iIiIKKyAgICAgICAgZGVmIGxvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3MoCisgICAgICAgICAgICAgICAgW3NlbGYubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RfVGVzdFByb2dyYW0uRm9vQmFyKV0pCisKKworICAgIGRlZiB0ZXN0X05vbkV4aXQoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5tYWluKGV4aXQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Y9WyJmb29iYXIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lcj11bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocHJvZ3JhbSwgJ3Jlc3VsdCcpKQorCisKKyAgICBkZWYgdGVzdF9FeGl0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFN5c3RlbUV4aXQsCisgICAgICAgICAgICB1bml0dGVzdC5tYWluLAorICAgICAgICAgICAgYXJndj1bImZvb2JhciJdLAorICAgICAgICAgICAgdGVzdFJ1bm5lcj11bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSksCisgICAgICAgICAgICBleGl0PVRydWUsCisgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisKKworICAgIGRlZiB0ZXN0X0V4aXRBc0RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgU3lzdGVtRXhpdCwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1haW4sCisgICAgICAgICAgICBhcmd2PVsiZm9vYmFyIl0sCisgICAgICAgICAgICB0ZXN0UnVubmVyPXVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1TdHJpbmdJTygpKSwKKyAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKKworCitjbGFzcyBJbml0aWFsaXNhYmxlUHJvZ3JhbSh1bml0dGVzdC5UZXN0UHJvZ3JhbSk6CisgICAgZXhpdCA9IEZhbHNlCisgICAgcmVzdWx0ID0gTm9uZQorICAgIHZlcmJvc2l0eSA9IDEKKyAgICBkZWZhdWx0VGVzdCA9IE5vbmUKKyAgICB0ZXN0UnVubmVyID0gTm9uZQorICAgIHRlc3RMb2FkZXIgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlcgorICAgIHByb2dOYW1lID0gJ3Rlc3QnCisgICAgdGVzdCA9ICd0ZXN0JworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHBhc3MKKworUkVTVUxUID0gb2JqZWN0KCkKKworY2xhc3MgRmFrZVJ1bm5lcihvYmplY3QpOgorICAgIGluaXRBcmdzID0gTm9uZQorICAgIHRlc3QgPSBOb25lCisgICAgcmFpc2VFcnJvciA9IEZhbHNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBGYWtlUnVubmVyLmluaXRBcmdzID0ga3dhcmdzCisgICAgICAgIGlmIEZha2VSdW5uZXIucmFpc2VFcnJvcjoKKyAgICAgICAgICAgIEZha2VSdW5uZXIucmFpc2VFcnJvciA9IEZhbHNlCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKworICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CisgICAgICAgIEZha2VSdW5uZXIudGVzdCA9IHRlc3QKKyAgICAgICAgcmV0dXJuIFJFU1VMVAorCitjbGFzcyBUZXN0Q29tbWFuZExpbmVBcmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wcm9ncmFtID0gSW5pdGlhbGlzYWJsZVByb2dyYW0oKQorICAgICAgICBzZWxmLnByb2dyYW0uY3JlYXRlVGVzdHMgPSBsYW1iZGE6IE5vbmUKKyAgICAgICAgRmFrZVJ1bm5lci5pbml0QXJncyA9IE5vbmUKKyAgICAgICAgRmFrZVJ1bm5lci50ZXN0ID0gTm9uZQorICAgICAgICBGYWtlUnVubmVyLnJhaXNlRXJyb3IgPSBGYWxzZQorCisgICAgZGVmIHRlc3RIZWxwQW5kVW5rbm93bihzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQorICAgICAgICBkZWYgdXNhZ2VFeGl0KG1zZz1Ob25lKToKKyAgICAgICAgICAgIHByb2dyYW0ubXNnID0gbXNnCisgICAgICAgICAgICBwcm9ncmFtLmV4aXQgPSBUcnVlCisgICAgICAgIHByb2dyYW0udXNhZ2VFeGl0ID0gdXNhZ2VFeGl0CisKKyAgICAgICAgZm9yIG9wdCBpbiAnLWgnLCAnLUgnLCAnLS1oZWxwJzoKKyAgICAgICAgICAgIHByb2dyYW0uZXhpdCA9IEZhbHNlCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9ncmFtLmV4aXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwcm9ncmFtLm1zZykKKworICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgJy0kJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9ncmFtLmV4aXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb2dyYW0ubXNnKQorCisgICAgZGVmIHRlc3RWZXJib3NpdHkoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKworICAgICAgICBmb3Igb3B0IGluICctcScsICctLXF1aWV0JzoKKyAgICAgICAgICAgIHByb2dyYW0udmVyYm9zaXR5ID0gMQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAwKQorCisgICAgICAgIGZvciBvcHQgaW4gJy12JywgJy0tdmVyYm9zZSc6CisgICAgICAgICAgICBwcm9ncmFtLnZlcmJvc2l0eSA9IDEKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMikKKworICAgIGRlZiB0ZXN0QnVmZmVyQ2F0Y2hGYWlsZmFzdChzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQorICAgICAgICBmb3IgYXJnLCBhdHRyIGluICgoJ2J1ZmZlcicsICdidWZmZXInKSwgKCdmYWlsZmFzdCcsICdmYWlsZmFzdCcpLAorICAgICAgICAgICAgICAgICAgICAgICgnY2F0Y2gnLCAnY2F0Y2hicmVhaycpKToKKyAgICAgICAgICAgIGlmIGF0dHIgPT0gJ2NhdGNoJyBhbmQgbm90IGhhc0luc3RhbGxIYW5kbGVyOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHNob3J0X29wdCA9ICctJXMnICUgYXJnWzBdCisgICAgICAgICAgICBsb25nX29wdCA9ICctLSVzJyAlIGFyZworICAgICAgICAgICAgZm9yIG9wdCBpbiBzaG9ydF9vcHQsIGxvbmdfb3B0OgorICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgTm9uZSkKKworICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHByb2dyYW0sIGF0dHIpKQorCisgICAgICAgICAgICBmb3Igb3B0IGluIHNob3J0X29wdCwgbG9uZ19vcHQ6CisgICAgICAgICAgICAgICAgbm90X25vbmUgPSBvYmplY3QoKQorICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgbm90X25vbmUpCisKKyAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIG5vdF9ub25lKQorCisgICAgZGVmIHRlc3RSdW5UZXN0c1J1bm5lckNsYXNzKHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisKKyAgICAgICAgcHJvZ3JhbS50ZXN0UnVubmVyID0gRmFrZVJ1bm5lcgorICAgICAgICBwcm9ncmFtLnZlcmJvc2l0eSA9ICd2ZXJib3NpdHknCisgICAgICAgIHByb2dyYW0uZmFpbGZhc3QgPSAnZmFpbGZhc3QnCisgICAgICAgIHByb2dyYW0uYnVmZmVyID0gJ2J1ZmZlcicKKworICAgICAgICBwcm9ncmFtLnJ1blRlc3RzKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIuaW5pdEFyZ3MsIHsndmVyYm9zaXR5JzogJ3ZlcmJvc2l0eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbGZhc3QnOiAnZmFpbGZhc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1ZmZlcic6ICdidWZmZXInfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLnRlc3QsICd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLnJlc3VsdCwgUkVTVUxUKQorCisgICAgZGVmIHRlc3RSdW5UZXN0c1J1bm5lckluc3RhbmNlKHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisKKyAgICAgICAgcHJvZ3JhbS50ZXN0UnVubmVyID0gRmFrZVJ1bm5lcigpCisgICAgICAgIEZha2VSdW5uZXIuaW5pdEFyZ3MgPSBOb25lCisKKyAgICAgICAgcHJvZ3JhbS5ydW5UZXN0cygpCisKKyAgICAgICAgIyBBIG5ldyBGYWtlUnVubmVyIHNob3VsZCBub3QgaGF2ZSBiZWVuIGluc3RhbnRpYXRlZAorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShGYWtlUnVubmVyLmluaXRBcmdzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci50ZXN0LCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5yZXN1bHQsIFJFU1VMVCkKKworICAgIGRlZiB0ZXN0UnVuVGVzdHNPbGRSdW5uZXJDbGFzcyhzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQorCisgICAgICAgIEZha2VSdW5uZXIucmFpc2VFcnJvciA9IFRydWUKKyAgICAgICAgcHJvZ3JhbS50ZXN0UnVubmVyID0gRmFrZVJ1bm5lcgorICAgICAgICBwcm9ncmFtLnZlcmJvc2l0eSA9ICd2ZXJib3NpdHknCisgICAgICAgIHByb2dyYW0uZmFpbGZhc3QgPSAnZmFpbGZhc3QnCisgICAgICAgIHByb2dyYW0uYnVmZmVyID0gJ2J1ZmZlcicKKyAgICAgICAgcHJvZ3JhbS50ZXN0ID0gJ3Rlc3QnCisKKyAgICAgICAgcHJvZ3JhbS5ydW5UZXN0cygpCisKKyAgICAgICAgIyBJZiBpbml0aWFsaXNpbmcgcmFpc2VzIGEgdHlwZSBlcnJvciBpdCBzaG91bGQgYmUgcmV0cmllZAorICAgICAgICAjIHdpdGhvdXQgdGhlIG5ldyBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIuaW5pdEFyZ3MsIHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIudGVzdCwgJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0ucmVzdWx0LCBSRVNVTFQpCisKKyAgICBkZWYgdGVzdENhdGNoQnJlYWtJbnN0YWxsc0hhbmRsZXIoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzWyd1bml0dGVzdC5tYWluJ10KKyAgICAgICAgb3JpZ2luYWwgPSBtb2R1bGUuaW5zdGFsbEhhbmRsZXIKKyAgICAgICAgZGVmIHJlc3RvcmUoKToKKyAgICAgICAgICAgIG1vZHVsZS5pbnN0YWxsSGFuZGxlciA9IG9yaWdpbmFsCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlKQorCisgICAgICAgIHNlbGYuaW5zdGFsbGVkID0gRmFsc2UKKyAgICAgICAgZGVmIGZha2VJbnN0YWxsSGFuZGxlcigpOgorICAgICAgICAgICAgc2VsZi5pbnN0YWxsZWQgPSBUcnVlCisgICAgICAgIG1vZHVsZS5pbnN0YWxsSGFuZGxlciA9IGZha2VJbnN0YWxsSGFuZGxlcgorCisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKyAgICAgICAgcHJvZ3JhbS5jYXRjaGJyZWFrID0gVHJ1ZQorCisgICAgICAgIHByb2dyYW0udGVzdFJ1bm5lciA9IEZha2VSdW5uZXIKKworICAgICAgICBwcm9ncmFtLnJ1blRlc3RzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaW5zdGFsbGVkKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjM2ZhZGQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQpAQCAtMCwwICsxLDUwMCBAQAoraW1wb3J0IHN5cworaW1wb3J0IHRleHR3cmFwCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgVGVzdF9UZXN0UmVzdWx0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIE5vdGU6IHRoZXJlIGFyZSBub3Qgc2VwYXJhdGUgdGVzdHMgZm9yIFRlc3RSZXN1bHQud2FzU3VjY2Vzc2Z1bCgpLAorICAgICMgVGVzdFJlc3VsdC5lcnJvcnMsIFRlc3RSZXN1bHQuZmFpbHVyZXMsIFRlc3RSZXN1bHQudGVzdHNSdW4gb3IKKyAgICAjIFRlc3RSZXN1bHQuc2hvdWxkU3RvcCBiZWNhdXNlIHRoZXNlIG9ubHkgaGF2ZSBtZWFuaW5nIGluIHRlcm1zIG9mCisgICAgIyBvdGhlciBUZXN0UmVzdWx0IG1ldGhvZHMuCisgICAgIworICAgICMgQWNjb3JkaW5nbHksIHRlc3RzIGZvciB0aGUgYWZvcmVuYW1lZCBhdHRyaWJ1dGVzIGFyZSBpbmNvcnBvcmF0ZWQKKyAgICAjIGluIHdpdGggdGhlIHRlc3RzIGZvciB0aGUgZGVmaW5pbmcgbWV0aG9kcy4KKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0Ll9zdGRvdXRfYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXN1bHQuX3N0ZGVycl9idWZmZXIpCisKKworICAgICMgIlRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gc2lnbmFsIHRoYXQgdGhlIHNldCBvZiB0ZXN0cyBiZWluZworICAgICMgcnVuIHNob3VsZCBiZSBhYm9ydGVkIGJ5IHNldHRpbmcgdGhlIFRlc3RSZXN1bHQncyBzaG91bGRTdG9wCisgICAgIyBhdHRyaWJ1dGUgdG8gVHJ1ZS4iCisgICAgZGVmIHRlc3Rfc3RvcChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0b3AoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIFRydWUpCisKKyAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3QgaXMgYWJvdXQgdG8gYmUgcnVuLiBUaGUgZGVmYXVsdAorICAgICMgaW1wbGVtZW50YXRpb24gc2ltcGx5IGluY3JlbWVudHMgdGhlIGluc3RhbmNlJ3MgdGVzdHNSdW4gY291bnRlci4iCisgICAgZGVmIHRlc3Rfc3RhcnRUZXN0KHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCisKKyAgICAjICJDYWxsZWQgYWZ0ZXIgdGhlIHRlc3QgY2FzZSB0ZXN0IGhhcyBiZWVuIGV4ZWN1dGVkLCByZWdhcmRsZXNzIG9mCisgICAgIyB0aGUgb3V0Y29tZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKKyAgICBkZWYgdGVzdF9zdG9wVGVzdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgICAgIHJlc3VsdC5zdG9wVGVzdCh0ZXN0KQorCisgICAgICAgICMgU2FtZSB0ZXN0cyBhcyBhYm92ZTsgbWFrZSBzdXJlIG5vdGhpbmcgaGFzIGNoYW5nZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAjICJDYWxsZWQgYmVmb3JlIGFuZCBhZnRlciB0ZXN0cyBhcmUgcnVuLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIgorICAgIGRlZiB0ZXN0X3N0YXJ0VGVzdFJ1bl9zdG9wVGVzdFJ1bihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3RSdW4oKQorICAgICAgICByZXN1bHQuc3RvcFRlc3RSdW4oKQorCisgICAgIyAiYWRkU3VjY2Vzcyh0ZXN0KSIKKyAgICAjIC4uLgorICAgICMgIkNhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgdGVzdCBzdWNjZWVkcyIKKyAgICAjIC4uLgorICAgICMgIndhc1N1Y2Nlc3NmdWwoKSAtIFJldHVybnMgVHJ1ZSBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwKKyAgICAjIG90aGVyd2lzZSByZXR1cm5zIEZhbHNlIgorICAgICMgLi4uCisgICAgIyAidGVzdHNSdW4gLSBUaGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biBzbyBmYXIuIgorICAgICMgLi4uCisgICAgIyAiZXJyb3JzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAorICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2ggcmFpc2VkIGFuCisgICAgIyB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gQ29udGFpbnMgZm9ybWF0dGVkCisgICAgIyB0cmFjZWJhY2tzIGluc3RlYWQgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCisgICAgIyAuLi4KKyAgICAjICJmYWlsdXJlcyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKKyAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZSB3YXMKKyAgICAjIGV4cGxpY2l0bHkgc2lnbmFsbGVkIHVzaW5nIHRoZSBUZXN0Q2FzZS5mYWlsKigpIG9yIFRlc3RDYXNlLmFzc2VydCooKQorICAgICMgbWV0aG9kcy4gQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZAorICAgICMgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCisgICAgZGVmIHRlc3RfYWRkU3VjY2VzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQorICAgICAgICByZXN1bHQuYWRkU3VjY2Vzcyh0ZXN0KQorICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKKworICAgICMgImFkZEZhaWx1cmUodGVzdCwgZXJyKSIKKyAgICAjIC4uLgorICAgICMgIkNhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgdGVzdCBzaWduYWxzIGEgZmFpbHVyZS4gZXJyIGlzIGEgdHVwbGUgb2YKKyAgICAjIHRoZSBmb3JtIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpOiAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykiCisgICAgIyAuLi4KKyAgICAjICJ3YXNTdWNjZXNzZnVsKCkgLSBSZXR1cm5zIFRydWUgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCisgICAgIyBvdGhlcndpc2UgcmV0dXJucyBGYWxzZSIKKyAgICAjIC4uLgorICAgICMgInRlc3RzUnVuIC0gVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLiIKKyAgICAjIC4uLgorICAgICMgImVycm9ycyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKKyAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgorICAgICMgdW5leHBlY3RlZCBleGNlcHRpb24uIENvbnRhaW5zIGZvcm1hdHRlZAorICAgICMgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgICMgLi4uCisgICAgIyAiZmFpbHVyZXMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCisgICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGVyZSBhIGZhaWx1cmUgd2FzCisgICAgIyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgVGVzdENhc2UuZmFpbCooKSBvciBUZXN0Q2FzZS5hc3NlcnQqKCkKKyAgICAjIG1ldGhvZHMuIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQKKyAgICAjIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgIGRlZiB0ZXN0X2FkZEZhaWx1cmUoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0LmZhaWwoImZvbyIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y19pbmZvX3R1cGxlID0gc3lzLmV4Y19pbmZvKCkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCisgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHRlc3QsIGV4Y19pbmZvX3R1cGxlKQorICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAgICAgdGVzdF9jYXNlLCBmb3JtYXR0ZWRfZXhjID0gcmVzdWx0LmZhaWx1cmVzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X2Nhc2UgaXMgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvcm1hdHRlZF9leGMsIHN0cikKKworICAgICMgImFkZEVycm9yKHRlc3QsIGVycikiCisgICAgIyAuLi4KKyAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3QgcmFpc2VzIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIGVycgorICAgICMgaXMgYSB0dXBsZSBvZiB0aGUgZm9ybSByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKToKKyAgICAjICh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSIKKyAgICAjIC4uLgorICAgICMgIndhc1N1Y2Nlc3NmdWwoKSAtIFJldHVybnMgVHJ1ZSBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwKKyAgICAjIG90aGVyd2lzZSByZXR1cm5zIEZhbHNlIgorICAgICMgLi4uCisgICAgIyAidGVzdHNSdW4gLSBUaGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biBzbyBmYXIuIgorICAgICMgLi4uCisgICAgIyAiZXJyb3JzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAorICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2ggcmFpc2VkIGFuCisgICAgIyB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gQ29udGFpbnMgZm9ybWF0dGVkCisgICAgIyB0cmFjZWJhY2tzIGluc3RlYWQgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCisgICAgIyAuLi4KKyAgICAjICJmYWlsdXJlcyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKKyAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZSB3YXMKKyAgICAjIGV4cGxpY2l0bHkgc2lnbmFsbGVkIHVzaW5nIHRoZSBUZXN0Q2FzZS5mYWlsKigpIG9yIFRlc3RDYXNlLmFzc2VydCooKQorICAgICMgbWV0aG9kcy4gQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZAorICAgICMgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCisgICAgZGVmIHRlc3RfYWRkRXJyb3Ioc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNfaW5mb190dXBsZSA9IHN5cy5leGNfaW5mbygpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQorICAgICAgICByZXN1bHQuYWRkRXJyb3IodGVzdCwgZXhjX2luZm9fdHVwbGUpCisgICAgICAgIHJlc3VsdC5zdG9wVGVzdCh0ZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKKworICAgICAgICB0ZXN0X2Nhc2UsIGZvcm1hdHRlZF9leGMgPSByZXN1bHQuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X2Nhc2UgaXMgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvcm1hdHRlZF9leGMsIHN0cikKKworICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmKSwKKyAgICAgICAgICAgICAgICAndGVzdEdldERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAoJyArIF9fbmFtZV9fICsKKyAgICAgICAgICAgICAgICAnLlRlc3RfVGVzdFJlc3VsdCknKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RHZXREZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLiIiIgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmKSwKKyAgICAgICAgICAgICAgICgndGVzdEdldERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBkb2NzdHJpbmcuJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aE11bHRpTGluZURvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciBkb2NzdHJpbmcuCisgICAgICAgIFRoZSBzZWNvbmQgbGluZSBvZiB0aGUgZG9jc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZiksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXREZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJworICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCisKKyAgICBkZWYgdGVzdFN0YWNrRnJhbWVUcmltbWluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgRnJhbWUob2JqZWN0KToKKyAgICAgICAgICAgIGNsYXNzIHRiX2ZyYW1lKG9iamVjdCk6CisgICAgICAgICAgICAgICAgZl9nbG9iYWxzID0ge30KKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Ll9pc19yZWxldmFudF90Yl9sZXZlbChGcmFtZSkpCisKKyAgICAgICAgRnJhbWUudGJfZnJhbWUuZl9nbG9iYWxzWydfX3VuaXR0ZXN0J10gPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuX2lzX3JlbGV2YW50X3RiX2xldmVsKEZyYW1lKSkKKworICAgIGRlZiB0ZXN0RmFpbEZhc3Qoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuX2V4Y19pbmZvX3RvX3N0cmluZyA9IGxhbWJkYSAqXzogJycKKyAgICAgICAgcmVzdWx0LmZhaWxmYXN0ID0gVHJ1ZQorICAgICAgICByZXN1bHQuYWRkRXJyb3IoTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuX2V4Y19pbmZvX3RvX3N0cmluZyA9IGxhbWJkYSAqXzogJycKKyAgICAgICAgcmVzdWx0LmZhaWxmYXN0ID0gVHJ1ZQorICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnNob3VsZFN0b3ApCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5fZXhjX2luZm9fdG9fc3RyaW5nID0gbGFtYmRhICpfOiAnJworICAgICAgICByZXN1bHQuZmFpbGZhc3QgPSBUcnVlCisgICAgICAgIHJlc3VsdC5hZGRVbmV4cGVjdGVkU3VjY2VzcyhOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnNob3VsZFN0b3ApCisKKyAgICBkZWYgdGVzdEZhaWxGYXN0U2V0QnlSdW5uZXIoc2VsZik6CisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1TdHJpbmdJTygpLCBmYWlsZmFzdD1UcnVlKQorICAgICAgICBkZWYgdGVzdChyZXN1bHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5mYWlsZmFzdCkKKyAgICAgICAgcnVubmVyLnJ1bih0ZXN0KQorCisKK2NsYXNzRGljdCA9IGRpY3QodW5pdHRlc3QuVGVzdFJlc3VsdC5fX2RpY3RfXykKK2ZvciBtIGluICgnYWRkU2tpcCcsICdhZGRFeHBlY3RlZEZhaWx1cmUnLCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLAorICAgICAgICAgICAnX19pbml0X18nKToKKyAgICBkZWwgY2xhc3NEaWN0W21dCisKK2RlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW09Tm9uZSwgZGVzY3JpcHRpb25zPU5vbmUsIHZlcmJvc2l0eT1Ob25lKToKKyAgICBzZWxmLmZhaWx1cmVzID0gW10KKyAgICBzZWxmLmVycm9ycyA9IFtdCisgICAgc2VsZi50ZXN0c1J1biA9IDAKKyAgICBzZWxmLnNob3VsZFN0b3AgPSBGYWxzZQorICAgIHNlbGYuYnVmZmVyID0gRmFsc2UKKworY2xhc3NEaWN0WydfX2luaXRfXyddID0gX19pbml0X18KK09sZFJlc3VsdCA9IHR5cGUoJ09sZFJlc3VsdCcsIChvYmplY3QsKSwgY2xhc3NEaWN0KQorCitjbGFzcyBUZXN0X09sZFRlc3RSZXN1bHQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydE9sZFJlc3VsdFdhcm5pbmcoc2VsZiwgdGVzdCwgZmFpbHVyZXMpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoIlRlc3RSZXN1bHQgaGFzIG5vIGFkZC4rIG1ldGhvZCwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHJlc3VsdCA9IE9sZFJlc3VsdCgpCisgICAgICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCBmYWlsdXJlcykKKworICAgIGRlZiB0ZXN0T2xkVGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdFNraXAoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnZm9vYmFyJykKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0RXhwZWN0ZWRGYWlsKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RVbmV4cGVjdGVkU3VjY2VzcyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZm9yIHRlc3RfbmFtZSwgc2hvdWxkX3Bhc3MgaW4gKCgndGVzdFNraXAnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgndGVzdEV4cGVjdGVkRmFpbCcsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCd0ZXN0VW5leHBlY3RlZFN1Y2Nlc3MnLCBGYWxzZSkpOgorICAgICAgICAgICAgdGVzdCA9IFRlc3QodGVzdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRPbGRSZXN1bHRXYXJuaW5nKHRlc3QsIGludChub3Qgc2hvdWxkX3Bhc3MpKQorCisgICAgZGVmIHRlc3RPbGRUZXN0VGVzdWx0U2V0dXAoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25vIHJlYXNvbicpCisgICAgICAgICAgICBkZWYgdGVzdEZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0T2xkUmVzdWx0V2FybmluZyhUZXN0KCd0ZXN0Rm9vJyksIDApCisKKyAgICBkZWYgdGVzdE9sZFRlc3RSZXN1bHRDbGFzcyhzZWxmKToKKyAgICAgICAgQHVuaXR0ZXN0LnNraXAoJ25vIHJlYXNvbicpCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RGb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydE9sZFJlc3VsdFdhcm5pbmcoVGVzdCgndGVzdEZvbycpLCAwKQorCisgICAgZGVmIHRlc3RPbGRSZXN1bHRXaXRoUnVubmVyKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIocmVzdWx0Y2xhc3M9T2xkUmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtPVN0cmluZ0lPKCkpCisgICAgICAgICMgVGhpcyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBUZXh0VGVzdFJ1bm5lciBjYW4ndCBoYW5kbGUgb2xkCisgICAgICAgICMgdGVzdCByZXN1bHQgb2JqZWN0cworICAgICAgICBydW5uZXIucnVuKFRlc3QoJ3Rlc3RGb28nKSkKKworCitjbGFzcyBNb2NrVHJhY2ViYWNrKG9iamVjdCk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmb3JtYXRfZXhjZXB0aW9uKCpfKToKKyAgICAgICAgcmV0dXJuIFsnQSB0cmFjZWJhY2snXQorCitkZWYgcmVzdG9yZV90cmFjZWJhY2soKToKKyAgICB1bml0dGVzdC5yZXN1bHQudHJhY2ViYWNrID0gdHJhY2ViYWNrCisKKworY2xhc3MgVGVzdE91dHB1dEJ1ZmZlcmluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3JlYWxfb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBzZWxmLl9yZWFsX2VyciA9IHN5cy5zdGRlcnIKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX3JlYWxfb3V0CisgICAgICAgIHN5cy5zdGRlcnIgPSBzZWxmLl9yZWFsX2VycgorCisgICAgZGVmIHRlc3RCdWZmZXJPdXRwdXRPZmYoc2VsZik6CisgICAgICAgIHJlYWxfb3V0ID0gc2VsZi5fcmVhbF9vdXQKKyAgICAgICAgcmVhbF9lcnIgPSBzZWxmLl9yZWFsX2VycgorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5idWZmZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWFsX291dCwgc3lzLnN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWFsX2Vyciwgc3lzLnN0ZGVycikKKworICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHNlbGYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWFsX291dCwgc3lzLnN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWFsX2Vyciwgc3lzLnN0ZGVycikKKworICAgIGRlZiB0ZXN0QnVmZmVyT3V0cHV0U3RhcnRUZXN0QWRkU3VjY2VzcyhzZWxmKToKKyAgICAgICAgcmVhbF9vdXQgPSBzZWxmLl9yZWFsX291dAorICAgICAgICByZWFsX2VyciA9IHNlbGYuX3JlYWxfZXJyCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmJ1ZmZlcikKKworICAgICAgICByZXN1bHQuYnVmZmVyID0gVHJ1ZQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVhbF9vdXQsIHN5cy5zdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVhbF9lcnIsIHN5cy5zdGRlcnIpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdChzZWxmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocmVhbF9vdXQsIHN5cy5zdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocmVhbF9lcnIsIHN5cy5zdGRlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuc3Rkb3V0LCBTdHJpbmdJTykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5zdGRlcnIsIFN0cmluZ0lPKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpCisKKyAgICAgICAgb3V0X3N0cmVhbSA9IHN5cy5zdGRvdXQKKyAgICAgICAgZXJyX3N0cmVhbSA9IHN5cy5zdGRlcnIKKworICAgICAgICByZXN1bHQuX29yaWdpbmFsX3N0ZG91dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgcmVzdWx0Ll9vcmlnaW5hbF9zdGRlcnIgPSBTdHJpbmdJTygpCisKKyAgICAgICAgcHJpbnQgJ2ZvbycKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgJ2JhcicKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dF9zdHJlYW0uZ2V0dmFsdWUoKSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJfc3RyZWFtLmdldHZhbHVlKCksICdiYXJcbicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuX29yaWdpbmFsX3N0ZG91dC5nZXR2YWx1ZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuX29yaWdpbmFsX3N0ZGVyci5nZXR2YWx1ZSgpLCAnJykKKworICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKKworICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIHJlc3VsdC5fb3JpZ2luYWxfc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRlcnIsIHJlc3VsdC5fb3JpZ2luYWxfc3RkZXJyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRvdXQuZ2V0dmFsdWUoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRlcnIuZ2V0dmFsdWUoKSwgJycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRfc3RyZWFtLmdldHZhbHVlKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycl9zdHJlYW0uZ2V0dmFsdWUoKSwgJycpCisKKworICAgIGRlZiBnZXRTdGFydGVkUmVzdWx0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IFRydWUKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdChzZWxmKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgdGVzdEJ1ZmZlck91dHB1dEFkZEVycm9yT3JGYWlsdXJlKHNlbGYpOgorICAgICAgICB1bml0dGVzdC5yZXN1bHQudHJhY2ViYWNrID0gTW9ja1RyYWNlYmFjaworICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV90cmFjZWJhY2spCisKKyAgICAgICAgZm9yIG1lc3NhZ2VfYXR0ciwgYWRkX2F0dHIsIGluY2x1ZGVfZXJyb3IgaW4gWworICAgICAgICAgICAgKCdlcnJvcnMnLCAnYWRkRXJyb3InLCBUcnVlKSwKKyAgICAgICAgICAgICgnZmFpbHVyZXMnLCAnYWRkRmFpbHVyZScsIEZhbHNlKSwKKyAgICAgICAgICAgICgnZXJyb3JzJywgJ2FkZEVycm9yJywgVHJ1ZSksCisgICAgICAgICAgICAoJ2ZhaWx1cmVzJywgJ2FkZEZhaWx1cmUnLCBGYWxzZSkKKyAgICAgICAgXToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZ2V0U3RhcnRlZFJlc3VsdCgpCisgICAgICAgICAgICBidWZmZXJlZF9vdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBidWZmZXJlZF9lcnIgPSBzeXMuc3RkZXJyCisgICAgICAgICAgICByZXN1bHQuX29yaWdpbmFsX3N0ZG91dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHJlc3VsdC5fb3JpZ2luYWxfc3RkZXJyID0gU3RyaW5nSU8oKQorCisgICAgICAgICAgICBwcmludCA+PiBzeXMuc3Rkb3V0LCAnZm9vJworICAgICAgICAgICAgaWYgaW5jbHVkZV9lcnJvcjoKKyAgICAgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAnYmFyJworCisKKyAgICAgICAgICAgIGFkZEZ1bmN0aW9uID0gZ2V0YXR0cihyZXN1bHQsIGFkZF9hdHRyKQorICAgICAgICAgICAgYWRkRnVuY3Rpb24oc2VsZiwgKE5vbmUsIE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHNlbGYpCisKKyAgICAgICAgICAgIHJlc3VsdF9saXN0ID0gZ2V0YXR0cihyZXN1bHQsIG1lc3NhZ2VfYXR0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdF9saXN0KSwgMSkKKworICAgICAgICAgICAgdGVzdCwgbWVzc2FnZSA9IHJlc3VsdF9saXN0WzBdCisgICAgICAgICAgICBleHBlY3RlZE91dE1lc3NhZ2UgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgICAgICAgICAgU3Rkb3V0OgorICAgICAgICAgICAgICAgIGZvbworICAgICAgICAgICAgIiIiKQorICAgICAgICAgICAgZXhwZWN0ZWRFcnJNZXNzYWdlID0gJycKKyAgICAgICAgICAgIGlmIGluY2x1ZGVfZXJyb3I6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRFcnJNZXNzYWdlID0gdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICAgICAgICAgIFN0ZGVycjoKKyAgICAgICAgICAgICAgICBiYXIKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgICAgIGV4cGVjdGVkRnVsbE1lc3NhZ2UgPSAnQSB0cmFjZWJhY2slcyVzJyAlIChleHBlY3RlZE91dE1lc3NhZ2UsIGV4cGVjdGVkRXJyTWVzc2FnZSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXN0LCBzZWxmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuX29yaWdpbmFsX3N0ZG91dC5nZXR2YWx1ZSgpLCBleHBlY3RlZE91dE1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5fb3JpZ2luYWxfc3RkZXJyLmdldHZhbHVlKCksIGV4cGVjdGVkRXJyTWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwobWVzc2FnZSwgZXhwZWN0ZWRGdWxsTWVzc2FnZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9ydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmNmE5YwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CkBAIC0wLDAgKzEsMjUzIEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgcGlja2xlCisKK2Zyb20gLnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQsIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuCisKKworY2xhc3MgVGVzdENsZWFuVXAodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RDbGVhblVwKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0YWJsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5fY2xlYW51cHMsIFtdKQorCisgICAgICAgIGNsZWFudXBzID0gW10KKworICAgICAgICBkZWYgY2xlYW51cDEoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGNsZWFudXBzLmFwcGVuZCgoMSwgYXJncywga3dhcmdzKSkKKworICAgICAgICBkZWYgY2xlYW51cDIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGNsZWFudXBzLmFwcGVuZCgoMiwgYXJncywga3dhcmdzKSkKKworICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDEsIDEsIDIsIDMsIGZvdXI9J2hlbGxvJywgZml2ZT0nZ29vZGJ5ZScpCisgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuX2NsZWFudXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoY2xlYW51cDEsICgxLCAyLCAzKSwgZGljdChmb3VyPSdoZWxsbycsIGZpdmU9J2dvb2RieWUnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGVhbnVwMiwgKCksIHt9KV0pCisKKyAgICAgICAgcmVzdWx0ID0gdGVzdC5kb0NsZWFudXBzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsZWFudXBzLCBbKDIsICgpLCB7fSksICgxLCAoMSwgMiwgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KGZvdXI9J2hlbGxvJywgZml2ZT0nZ29vZGJ5ZScpKV0pCisKKyAgICBkZWYgdGVzdENsZWFuVXBXaXRoRXJyb3JzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0YWJsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBNb2NrUmVzdWx0KG9iamVjdCk6CisgICAgICAgICAgICBlcnJvcnMgPSBbXQorICAgICAgICAgICAgZGVmIGFkZEVycm9yKHNlbGYsIHRlc3QsIGV4Y19pbmZvKToKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoKHRlc3QsIGV4Y19pbmZvKSkKKworICAgICAgICByZXN1bHQgPSBNb2NrUmVzdWx0KCkKKyAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQorICAgICAgICB0ZXN0Ll9yZXN1bHRGb3JEb0NsZWFudXBzID0gcmVzdWx0CisKKyAgICAgICAgZXhjMSA9IEV4Y2VwdGlvbignZm9vJykKKyAgICAgICAgZXhjMiA9IEV4Y2VwdGlvbignYmFyJykKKyAgICAgICAgZGVmIGNsZWFudXAxKCk6CisgICAgICAgICAgICByYWlzZSBleGMxCisKKyAgICAgICAgZGVmIGNsZWFudXAyKCk6CisgICAgICAgICAgICByYWlzZSBleGMyCisKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAxKQorICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0LmRvQ2xlYW51cHMoKSkKKworICAgICAgICAodGVzdDEsIChUeXBlMSwgaW5zdGFuY2UxLCBfKSksICh0ZXN0MiwgKFR5cGUyLCBpbnN0YW5jZTIsIF8pKSA9IHJldmVyc2VkKE1vY2tSZXN1bHQuZXJyb3JzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh0ZXN0MSwgVHlwZTEsIGluc3RhbmNlMSksICh0ZXN0LCBFeGNlcHRpb24sIGV4YzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh0ZXN0MiwgVHlwZTIsIGluc3RhbmNlMiksICh0ZXN0LCBFeGNlcHRpb24sIGV4YzIpKQorCisgICAgZGVmIHRlc3RDbGVhbnVwSW5SdW4oc2VsZik6CisgICAgICAgIGJsb3dVcCA9IEZhbHNlCisgICAgICAgIG9yZGVyaW5nID0gW10KKworICAgICAgICBjbGFzcyBUZXN0YWJsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnc2V0VXAnKQorICAgICAgICAgICAgICAgIGlmIGJsb3dVcDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdmb28nKQorCisgICAgICAgICAgICBkZWYgdGVzdE5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCd0ZXN0JykKKworICAgICAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgndGVhckRvd24nKQorCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKworICAgICAgICBkZWYgY2xlYW51cDEoKToKKyAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnY2xlYW51cDEnKQorICAgICAgICBkZWYgY2xlYW51cDIoKToKKyAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnY2xlYW51cDInKQorICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDEpCisgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMikKKworICAgICAgICBkZWYgc3VjY2Vzcyhzb21lX3Rlc3QpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb21lX3Rlc3QsIHRlc3QpCisgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3N1Y2Nlc3MnKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyA9IHN1Y2Nlc3MKKworICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkZXJpbmcsIFsnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xlYW51cDInLCAnY2xlYW51cDEnLCAnc3VjY2VzcyddKQorCisgICAgICAgIGJsb3dVcCA9IFRydWUKKyAgICAgICAgb3JkZXJpbmcgPSBbXQorICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCisgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMSkKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZGVyaW5nLCBbJ3NldFVwJywgJ2NsZWFudXAxJ10pCisKKyAgICBkZWYgdGVzdFRlc3RDYXNlRGVidWdFeGVjdXRlc0NsZWFudXBzKHNlbGYpOgorICAgICAgICBvcmRlcmluZyA9IFtdCisKKyAgICAgICAgY2xhc3MgVGVzdGFibGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3NldFVwJykKKyAgICAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cDEpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0Tm90aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3Rlc3QnKQorCisgICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCd0ZWFyRG93bicpCisKKyAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQorCisgICAgICAgIGRlZiBjbGVhbnVwMSgpOgorICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdjbGVhbnVwMScpCisgICAgICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDIpCisgICAgICAgIGRlZiBjbGVhbnVwMigpOgorICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdjbGVhbnVwMicpCisKKyAgICAgICAgdGVzdC5kZWJ1ZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkZXJpbmcsIFsnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsICdjbGVhbnVwMScsICdjbGVhbnVwMiddKQorCisKK2NsYXNzIFRlc3RfVGV4dFRlc3RSdW5uZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciBUZXh0VGVzdFJ1bm5lci4iIiIKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShydW5uZXIuZmFpbGZhc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocnVubmVyLmJ1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5uZXIudmVyYm9zaXR5LCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLmRlc2NyaXB0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5uZXIucmVzdWx0Y2xhc3MsIHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KQorCisKKyAgICBkZWYgdGVzdEJ1ZmZlckFuZEZhaWxmYXN0KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1TdHJpbmdJTygpLCBmYWlsZmFzdD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcj1UcnVlKQorICAgICAgICAjIFVzZSBvdXIgcmVzdWx0IG9iamVjdAorICAgICAgICBydW5uZXIuX21ha2VSZXN1bHQgPSBsYW1iZGE6IHJlc3VsdAorICAgICAgICBydW5uZXIucnVuKFRlc3QoJ3Rlc3RGb28nKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LmZhaWxmYXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LmJ1ZmZlcikKKworICAgIGRlZiB0ZXN0UnVubmVyUmVnaXN0ZXJzUmVzdWx0KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3JpZ2luYWxSZWdpc3RlclJlc3VsdCA9IHVuaXR0ZXN0LnJ1bm5lci5yZWdpc3RlclJlc3VsdAorICAgICAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICAgICAgdW5pdHRlc3QucnVubmVyLnJlZ2lzdGVyUmVzdWx0ID0gb3JpZ2luYWxSZWdpc3RlclJlc3VsdAorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtPVN0cmluZ0lPKCkpCisgICAgICAgICMgVXNlIG91ciByZXN1bHQgb2JqZWN0CisgICAgICAgIHJ1bm5lci5fbWFrZVJlc3VsdCA9IGxhbWJkYTogcmVzdWx0CisKKyAgICAgICAgc2VsZi53YXNSZWdpc3RlcmVkID0gMAorICAgICAgICBkZWYgZmFrZVJlZ2lzdGVyUmVzdWx0KHRoaXNSZXN1bHQpOgorICAgICAgICAgICAgc2VsZi53YXNSZWdpc3RlcmVkICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhpc1Jlc3VsdCwgcmVzdWx0KQorICAgICAgICB1bml0dGVzdC5ydW5uZXIucmVnaXN0ZXJSZXN1bHQgPSBmYWtlUmVnaXN0ZXJSZXN1bHQKKworICAgICAgICBydW5uZXIucnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2FzUmVnaXN0ZXJlZCwgMSkKKworICAgIGRlZiB0ZXN0X3dvcmtzX3dpdGhfcmVzdWx0X3dpdGhvdXRfc3RhcnRUZXN0UnVuX3N0b3BUZXN0UnVuKHNlbGYpOgorICAgICAgICBjbGFzcyBPbGRUZXh0UmVzdWx0KFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuKToKKyAgICAgICAgICAgIHNlcGFyYXRvcjIgPSAnJworICAgICAgICAgICAgZGVmIHByaW50RXJyb3JzKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBSdW5uZXIodW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKFJ1bm5lciwgc2VsZikuX19pbml0X18oU3RyaW5nSU8oKSkKKworICAgICAgICAgICAgZGVmIF9tYWtlUmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBPbGRUZXh0UmVzdWx0KCkKKworICAgICAgICBydW5uZXIgPSBSdW5uZXIoKQorICAgICAgICBydW5uZXIucnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQorCisgICAgZGVmIHRlc3Rfc3RhcnRUZXN0UnVuX3N0b3BUZXN0UnVuX2NhbGxlZChzZWxmKToKKyAgICAgICAgY2xhc3MgTG9nZ2luZ1RleHRSZXN1bHQoTG9nZ2luZ1Jlc3VsdCk6CisgICAgICAgICAgICBzZXBhcmF0b3IyID0gJycKKyAgICAgICAgICAgIGRlZiBwcmludEVycm9ycyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgTG9nZ2luZ1J1bm5lcih1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzKToKKyAgICAgICAgICAgICAgICBzdXBlcihMb2dnaW5nUnVubmVyLCBzZWxmKS5fX2luaXRfXyhTdHJpbmdJTygpKQorICAgICAgICAgICAgICAgIHNlbGYuX2V2ZW50cyA9IGV2ZW50cworCisgICAgICAgICAgICBkZWYgX21ha2VSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdUZXh0UmVzdWx0KHNlbGYuX2V2ZW50cykKKworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICBydW5uZXIgPSBMb2dnaW5nUnVubmVyKGV2ZW50cykKKyAgICAgICAgcnVubmVyLnJ1bih1bml0dGVzdC5UZXN0U3VpdGUoKSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdG9wVGVzdFJ1biddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV91bnBpY2tsZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzE5NzogYSBUZXh0VGVzdFJ1bm5lciBzaG91bGQgYmUgKHVuKXBpY2tsZWFibGUuIFRoaXMgaXMKKyAgICAgICAgIyByZXF1aXJlZCBieSB0ZXN0X211bHRpcHJvY2Vzc2luZyB1bmRlciBXaW5kb3dzIChpbiB2ZXJib3NlIG1vZGUpLgorICAgICAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTyBhcyBQaWNrbGVhYmxlSU8KKyAgICAgICAgIyBjU3RyaW5nSU8gb2JqZWN0cyBhcmUgbm90IHBpY2tsZWFibGUsIGJ1dCBTdHJpbmdJTyBvYmplY3RzIGFyZS4KKyAgICAgICAgc3RyZWFtID0gUGlja2xlYWJsZUlPKCJmb28iKQorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW0pCisgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhydW5uZXIsIHByb3RvY29sPXByb3RvY29sKQorICAgICAgICAgICAgb2JqID0gcGlja2xlLmxvYWRzKHMpCisgICAgICAgICAgICAjIFN0cmluZ0lPIG9iamVjdHMgbmV2ZXIgY29tcGFyZSBlcXVhbCwgYSBjaGVhcCB0ZXN0IGluc3RlYWQuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdHJlYW0uZ2V0dmFsdWUoKSwgc3RyZWFtLmdldHZhbHVlKCkpCisKKyAgICBkZWYgdGVzdF9yZXN1bHRjbGFzcyhzZWxmKToKKyAgICAgICAgZGVmIE1vY2tSZXN1bHRDbGFzcygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworICAgICAgICBTVFJFQU0gPSBvYmplY3QoKQorICAgICAgICBERVNDUklQVElPTlMgPSBvYmplY3QoKQorICAgICAgICBWRVJCT1NJVFkgPSBvYmplY3QoKQorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihTVFJFQU0sIERFU0NSSVBUSU9OUywgVkVSQk9TSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRjbGFzcz1Nb2NrUmVzdWx0Q2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVyLnJlc3VsdGNsYXNzLCBNb2NrUmVzdWx0Q2xhc3MpCisKKyAgICAgICAgZXhwZWN0ZWRyZXN1bHQgPSAocnVubmVyLnN0cmVhbSwgREVTQ1JJUFRJT05TLCBWRVJCT1NJVFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVyLl9tYWtlUmVzdWx0KCksIGV4cGVjdGVkcmVzdWx0KQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NTY4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weQpAQCAtMCwwICsxLDUwOCBAQAoraW1wb3J0IHN5cworCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworaW1wb3J0IHVuaXR0ZXN0CisKKworZGVmIHJlc3VsdEZhY3RvcnkoKl8pOgorICAgIHJldHVybiB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworCitjbGFzcyBUZXN0U2V0dXBzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBnZXRSdW5uZXIoc2VsZik6CisgICAgICAgIHJldHVybiB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihyZXN1bHRjbGFzcz1yZXN1bHRGYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtPVN0cmluZ0lPKCkpCisgICAgZGVmIHJ1blRlc3RzKHNlbGYsICpjYXNlcyk6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgZm9yIGNhc2UgaW4gY2FzZXM6CisgICAgICAgICAgICB0ZXN0cyA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShjYXNlKQorICAgICAgICAgICAgc3VpdGUuYWRkVGVzdHModGVzdHMpCisKKyAgICAgICAgcnVubmVyID0gc2VsZi5nZXRSdW5uZXIoKQorCisgICAgICAgICMgY3JlYXRpbmcgYSBuZXN0ZWQgc3VpdGUgZXhwb3NlcyBzb21lIHBvdGVudGlhbCBidWdzCisgICAgICAgIHJlYWxTdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHJlYWxTdWl0ZS5hZGRUZXN0KHN1aXRlKQorICAgICAgICAjIGFkZGluZyBlbXB0eSBzdWl0ZXMgdG8gdGhlIGVuZCBleHBvc2VzIHBvdGVudGlhbCBidWdzCisgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QuVGVzdFN1aXRlKCkpCisgICAgICAgIHJlYWxTdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQorICAgICAgICByZXR1cm4gcnVubmVyLnJ1bihyZWFsU3VpdGUpCisKKyAgICBkZWYgdGVzdF9zZXR1cF9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBzZXRVcENhbGxlZCA9IDAKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LnNldFVwQ2FsbGVkICs9IDEKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcENsYXNzKCkKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3Quc2V0VXBDYWxsZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgIGRlZiB0ZXN0X3RlYXJkb3duX2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlYXJEb3duQ2FsbGVkID0gMAorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QudGVhckRvd25DYWxsZWQgKz0gMQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3duQ2xhc3MoKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdC50ZWFyRG93bkNhbGxlZCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorCisgICAgZGVmIHRlc3RfdGVhcmRvd25fY2xhc3NfdHdvX2NsYXNzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdGVhckRvd25DYWxsZWQgPSAwCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC50ZWFyRG93bkNhbGxlZCArPSAxCisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UudGVhckRvd25DbGFzcygpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0Mih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0ZWFyRG93bkNhbGxlZCA9IDAKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0Mi50ZWFyRG93bkNhbGxlZCArPSAxCisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UudGVhckRvd25DbGFzcygpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QsIFRlc3QyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdC50ZWFyRG93bkNhbGxlZCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0Mi50ZWFyRG93bkNhbGxlZCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorCisgICAgZGVmIHRlc3RfZXJyb3JfaW5fc2V0dXBjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQnJva2VuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdmb28nKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhCcm9rZW5UZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKyAgICAgICAgZXJyb3IsIF8gPSByZXN1bHQuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgJ3NldFVwQ2xhc3MgKCVzLkJyb2tlblRlc3QpJyAlIF9fbmFtZV9fKQorCisgICAgZGVmIHRlc3RfZXJyb3JfaW5fdGVhcmRvd25fY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdG9ybkRvd24gPSAwCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC50b3JuRG93biArPSAxCisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdmb28nKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdG9ybkRvd24gPSAwCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdDIudG9ybkRvd24gKz0gMQorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZm9vJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCwgVGVzdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0LnRvcm5Eb3duLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QyLnRvcm5Eb3duLCAxKQorCisgICAgICAgIGVycm9yLCBfID0gcmVzdWx0LmVycm9yc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvciksCisgICAgICAgICAgICAgICAgICAgICd0ZWFyRG93bkNsYXNzICglcy5UZXN0KScgJSBfX25hbWVfXykKKworICAgIGRlZiB0ZXN0X2NsYXNzX25vdF90b3JuZG93bl93aGVuX3NldHVwX2ZhaWxzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRvcm5Eb3duID0gRmFsc2UKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LnRvcm5Eb3duID0gVHJ1ZQorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZm9vJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5ydW5UZXN0cyhUZXN0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRlc3QudG9ybkRvd24pCisKKyAgICBkZWYgdGVzdF9jbGFzc19ub3Rfc2V0dXBfb3JfdG9ybmRvd25fd2hlbl9za2lwcGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGNsYXNzU2V0VXAgPSBGYWxzZQorICAgICAgICAgICAgdG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QuY2xhc3NTZXRVcCA9IFRydWUKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LnRvcm5Eb3duID0gVHJ1ZQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBUZXN0ID0gdW5pdHRlc3Quc2tpcCgiaG9wIikoVGVzdCkKKyAgICAgICAgc2VsZi5ydW5UZXN0cyhUZXN0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRlc3QuY2xhc3NTZXRVcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUZXN0LnRvcm5Eb3duKQorCisgICAgZGVmIHRlc3Rfc2V0dXBfdGVhcmRvd25fb3JkZXJfd2l0aF9wYXRob2xvZ2ljYWxfc3VpdGUoc2VsZik6CisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGNsYXNzIE1vZHVsZTEob2JqZWN0KToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdNb2R1bGUxLnNldFVwTW9kdWxlJykKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdNb2R1bGUxLnRlYXJEb3duTW9kdWxlJykKKworICAgICAgICBjbGFzcyBNb2R1bGUyKG9iamVjdCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnTW9kdWxlMi5zZXRVcE1vZHVsZScpCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnTW9kdWxlMi50ZWFyRG93bk1vZHVsZScpCisKKyAgICAgICAgY2xhc3MgVGVzdDEodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdzZXR1cCAxJykKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgndGVhcmRvd24gMScpCisgICAgICAgICAgICBkZWYgdGVzdE9uZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnVGVzdDEudGVzdE9uZScpCisgICAgICAgICAgICBkZWYgdGVzdFR3byhzZWxmKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnVGVzdDEudGVzdFR3bycpCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdzZXR1cCAyJykKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgndGVhcmRvd24gMicpCisgICAgICAgICAgICBkZWYgdGVzdE9uZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnVGVzdDIudGVzdE9uZScpCisgICAgICAgICAgICBkZWYgdGVzdFR3byhzZWxmKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnVGVzdDIudGVzdFR3bycpCisKKyAgICAgICAgY2xhc3MgVGVzdDModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdzZXR1cCAzJykKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgndGVhcmRvd24gMycpCisgICAgICAgICAgICBkZWYgdGVzdE9uZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnVGVzdDMudGVzdE9uZScpCisgICAgICAgICAgICBkZWYgdGVzdFR3byhzZWxmKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnVGVzdDMudGVzdFR3bycpCisKKyAgICAgICAgVGVzdDEuX19tb2R1bGVfXyA9IFRlc3QyLl9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBUZXN0My5fX21vZHVsZV9fID0gJ01vZHVsZTInCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZTEKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZTInXSA9IE1vZHVsZTIKKworICAgICAgICBmaXJzdCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDEoJ3Rlc3RPbmUnKSwpKQorICAgICAgICBzZWNvbmQgPSB1bml0dGVzdC5UZXN0U3VpdGUoKFRlc3QxKCd0ZXN0VHdvJyksKSkKKyAgICAgICAgdGhpcmQgPSB1bml0dGVzdC5UZXN0U3VpdGUoKFRlc3QyKCd0ZXN0T25lJyksKSkKKyAgICAgICAgZm91cnRoID0gdW5pdHRlc3QuVGVzdFN1aXRlKChUZXN0MigndGVzdFR3bycpLCkpCisgICAgICAgIGZpZnRoID0gdW5pdHRlc3QuVGVzdFN1aXRlKChUZXN0MygndGVzdE9uZScpLCkpCisgICAgICAgIHNpeHRoID0gdW5pdHRlc3QuVGVzdFN1aXRlKChUZXN0MygndGVzdFR3bycpLCkpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCwgc2l4dGgpKQorCisgICAgICAgIHJ1bm5lciA9IHNlbGYuZ2V0UnVubmVyKCkKKyAgICAgICAgcmVzdWx0ID0gcnVubmVyLnJ1bihzdWl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ01vZHVsZTEuc2V0VXBNb2R1bGUnLCAnc2V0dXAgMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdUZXN0MS50ZXN0T25lJywgJ1Rlc3QxLnRlc3RUd28nLCAndGVhcmRvd24gMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXR1cCAyJywgJ1Rlc3QyLnRlc3RPbmUnLCAnVGVzdDIudGVzdFR3bycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFyZG93biAyJywgJ01vZHVsZTEudGVhckRvd25Nb2R1bGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnTW9kdWxlMi5zZXRVcE1vZHVsZScsICdzZXR1cCAzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QzLnRlc3RPbmUnLCAnVGVzdDMudGVzdFR3bycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFyZG93biAzJywgJ01vZHVsZTIudGVhckRvd25Nb2R1bGUnXSkKKworICAgIGRlZiB0ZXN0X3NldHVwX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBtb2R1bGVTZXR1cCA9IDAKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICAgICAgICAgIE1vZHVsZS5tb2R1bGVTZXR1cCArPSAxCisKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5tb2R1bGVTZXR1cCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorCisgICAgZGVmIHRlc3RfZXJyb3JfaW5fc2V0dXBfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIG1vZHVsZVNldHVwID0gMAorICAgICAgICAgICAgbW9kdWxlVG9ybkRvd24gPSAwCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICBNb2R1bGUubW9kdWxlU2V0dXAgKz0gMQorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZm9vJykKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICAgICAgICAgIE1vZHVsZS5tb2R1bGVUb3JuRG93biArPSAxCisKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBjbGFzc1NldFVwID0gRmFsc2UKKyAgICAgICAgICAgIGNsYXNzVG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QuY2xhc3NTZXRVcCA9IFRydWUKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LmNsYXNzVG9ybkRvd24gPSBUcnVlCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0Mih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgVGVzdDIuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCwgVGVzdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLm1vZHVsZVNldHVwLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5tb2R1bGVUb3JuRG93biwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdC5jbGFzc1NldFVwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRlc3QuY2xhc3NUb3JuRG93bikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIGVycm9yLCBfID0gcmVzdWx0LmVycm9yc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvciksICdzZXRVcE1vZHVsZSAoTW9kdWxlKScpCisKKyAgICBkZWYgdGVzdF90ZXN0Y2FzZV93aXRoX21pc3NpbmdfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlcy5wb3AoJ01vZHVsZScsIE5vbmUpCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMikKKworICAgIGRlZiB0ZXN0X3RlYXJkb3duX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBtb2R1bGVUb3JuRG93biA9IDAKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICAgICAgICAgIE1vZHVsZS5tb2R1bGVUb3JuRG93biArPSAxCisKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5tb2R1bGVUb3JuRG93biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorCisgICAgZGVmIHRlc3RfZXJyb3JfaW5fdGVhcmRvd25fbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIG1vZHVsZVRvcm5Eb3duID0gMAorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLm1vZHVsZVRvcm5Eb3duICs9IDEKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ZvbycpCisKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBjbGFzc1NldFVwID0gRmFsc2UKKyAgICAgICAgICAgIGNsYXNzVG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QuY2xhc3NTZXRVcCA9IFRydWUKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LmNsYXNzVG9ybkRvd24gPSBUcnVlCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0Mih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgVGVzdDIuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCwgVGVzdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLm1vZHVsZVRvcm5Eb3duLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFRlc3QuY2xhc3NTZXRVcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFRlc3QuY2xhc3NUb3JuRG93bikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIGVycm9yLCBfID0gcmVzdWx0LmVycm9yc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvciksICd0ZWFyRG93bk1vZHVsZSAoTW9kdWxlKScpCisKKyAgICBkZWYgdGVzdF9za2lwdGVzdF9pbl9zZXR1cGNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnZm9vJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDEpCisgICAgICAgIHNraXBwZWQgPSByZXN1bHQuc2tpcHBlZFswXVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihza2lwcGVkKSwgJ3NldFVwQ2xhc3MgKCVzLlRlc3QpJyAlIF9fbmFtZV9fKQorCisgICAgZGVmIHRlc3Rfc2tpcHRlc3RfaW5fc2V0dXBtb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnZm9vJykKKworICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAxKQorICAgICAgICBza2lwcGVkID0gcmVzdWx0LnNraXBwZWRbMF1bMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2tpcHBlZCksICdzZXRVcE1vZHVsZSAoTW9kdWxlKScpCisKKyAgICBkZWYgdGVzdF9zdWl0ZV9kZWJ1Z19leGVjdXRlc19zZXR1cHNfYW5kX3RlYXJkb3ducyhzZWxmKToKKyAgICAgICAgb3JkZXJpbmcgPSBbXQorCisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdzZXRVcE1vZHVsZScpCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3RlYXJEb3duTW9kdWxlJykKKworICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3NldFVwQ2xhc3MnKQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgndGVhckRvd25DbGFzcycpCisgICAgICAgICAgICBkZWYgdGVzdF9zb21ldGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCd0ZXN0X3NvbWV0aGluZycpCisKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdCkKKyAgICAgICAgc3VpdGUuZGVidWcoKQorICAgICAgICBleHBlY3RlZE9yZGVyID0gWydzZXRVcE1vZHVsZScsICdzZXRVcENsYXNzJywgJ3Rlc3Rfc29tZXRoaW5nJywgJ3RlYXJEb3duQ2xhc3MnLCAndGVhckRvd25Nb2R1bGUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZGVyaW5nLCBleHBlY3RlZE9yZGVyKQorCisgICAgZGVmIHRlc3Rfc3VpdGVfZGVidWdfcHJvcGFnYXRlc19leGNlcHRpb25zKHNlbGYpOgorICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICAgICAgICAgIGlmIHBoYXNlID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignc2V0VXBNb2R1bGUnKQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgaWYgcGhhc2UgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCd0ZWFyRG93bk1vZHVsZScpCisKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgaWYgcGhhc2UgPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdzZXRVcENsYXNzJykKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBpZiBwaGFzZSA9PSAzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3RlYXJEb3duQ2xhc3MnKQorICAgICAgICAgICAgZGVmIHRlc3Rfc29tZXRoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHBoYXNlID09IDQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigndGVzdF9zb21ldGhpbmcnKQorCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorCisgICAgICAgIF9zdWl0ZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0KQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoX3N1aXRlKQorCisgICAgICAgIG1lc3NhZ2VzID0gKCdzZXRVcE1vZHVsZScsICd0ZWFyRG93bk1vZHVsZScsICdzZXRVcENsYXNzJywgJ3RlYXJEb3duQ2xhc3MnLCAndGVzdF9zb21ldGhpbmcnKQorICAgICAgICBmb3IgcGhhc2UsIG1zZyBpbiBlbnVtZXJhdGUobWVzc2FnZXMpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChFeGNlcHRpb24sIG1zZyk6CisgICAgICAgICAgICAgICAgc3VpdGUuZGVidWcoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5NThkNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKQEAgLTAsMCArMSwxMzggQEAKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0CisKKworY2xhc3MgVGVzdF9UZXN0U2tpcHBpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2tpcHBpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9za2lwX21lKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAiKQorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9za2lwX21lIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgWydzdGFydFRlc3QnLCAnYWRkU2tpcCcsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJza2lwIildKQorCisgICAgICAgICMgVHJ5IGxldHRpbmcgc2V0VXAgc2tpcCB0aGUgdGVzdCBub3cuCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdGluZyIpCisgICAgICAgICAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOiBwYXNzCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X25vdGhpbmciKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbJ3N0YXJ0VGVzdCcsICdhZGRTa2lwJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNraXBwZWQsIFsodGVzdCwgInRlc3RpbmciKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorCisgICAgZGVmIHRlc3Rfc2tpcHBpbmdfZGVjb3JhdG9ycyhzZWxmKToKKyAgICAgICAgb3BfdGFibGUgPSAoKHVuaXR0ZXN0LnNraXBVbmxlc3MsIEZhbHNlLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgKHVuaXR0ZXN0LnNraXBJZiwgVHJ1ZSwgRmFsc2UpKQorICAgICAgICBmb3IgZGVjbywgZG9fc2tpcCwgZG9udF9za2lwIGluIG9wX3RhYmxlOgorICAgICAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgICAgICBAZGVjbyhkb19za2lwLCAidGVzdGluZyIpCisgICAgICAgICAgICAgICAgZGVmIHRlc3Rfc2tpcChzZWxmKTogcGFzcworCisgICAgICAgICAgICAgICAgQGRlY28oZG9udF9za2lwLCAidGVzdGluZyIpCisgICAgICAgICAgICAgICAgZGVmIHRlc3RfZG9udF9za2lwKHNlbGYpOiBwYXNzCisgICAgICAgICAgICB0ZXN0X2RvX3NraXAgPSBGb28oInRlc3Rfc2tpcCIpCisgICAgICAgICAgICB0ZXN0X2RvbnRfc2tpcCA9IEZvbygidGVzdF9kb250X3NraXAiKQorICAgICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RfZG9fc2tpcCwgdGVzdF9kb250X3NraXBdKQorICAgICAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5za2lwcGVkKSwgMSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnYWRkU2tpcCcsICdzdG9wVGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnRUZXN0JywgJ2FkZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3RfZG9fc2tpcCwgInRlc3RpbmciKV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKworICAgIGRlZiB0ZXN0X3NraXBfY2xhc3Moc2VsZik6CisgICAgICAgIEB1bml0dGVzdC5za2lwKCJ0ZXN0aW5nIikKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgxKQorICAgICAgICByZWNvcmQgPSBbXQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF8xIikKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgW10pCisKKyAgICBkZWYgdGVzdF9leHBlY3RlZF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RfZGllKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaGVscCBtZSEiKQorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9kaWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZEV4cGVjdGVkRmFpbHVyZScsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKworICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0X2RpZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X2RpZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzdGFydFRlc3QnLCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuZmFpbHVyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXMsIFt0ZXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKKyAgICBkZWYgdGVzdF9za2lwX2RvZXNudF9ydW5fc2V0dXAoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB3YXNTZXRVcCA9IEZhbHNlCisgICAgICAgICAgICB3YXNUb3JuRG93biA9IEZhbHNlCisgICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICAgICAgRm9vLndhc1NldFVwID0gVHJ1ZQorICAgICAgICAgICAgZGVmIHRvcm5Eb3duKHNlbGYpOgorICAgICAgICAgICAgICAgIEZvby53YXNUb3JuRG93biA9IFRydWUKKyAgICAgICAgICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0aW5nJykKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0XzEiKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdF0pCisgICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNraXBwZWQsIFsodGVzdCwgInRlc3RpbmciKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRm9vLndhc1NldFVwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEZvby53YXNUb3JuRG93bikKKworICAgIGRlZiB0ZXN0X2RlY29yYXRlZF9za2lwKHNlbGYpOgorICAgICAgICBkZWYgZGVjb3JhdG9yKGZ1bmMpOgorICAgICAgICAgICAgZGVmIGlubmVyKCphKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuYygqYSkKKyAgICAgICAgICAgIHJldHVybiBpbm5lcgorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAZGVjb3JhdG9yCisgICAgICAgICAgICBAdW5pdHRlc3Quc2tpcCgndGVzdGluZycpCisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF8xIikKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmZiNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQpAQCAtMCwwICsxLDM2NyBAQAoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBzeXMKK2Zyb20gLnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQsIFRlc3RFcXVhbGl0eQorCisKKyMjIyBTdXBwb3J0IGNvZGUgZm9yIFRlc3RfVGVzdFN1aXRlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIFRlc3Qob2JqZWN0KToKKyAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgZGVmIHRlc3RfMyhzZWxmKTogcGFzcworICAgICAgICBkZWYgcnVuVGVzdChzZWxmKTogcGFzcworCitkZWYgX21rX1Rlc3RTdWl0ZSgqbmFtZXMpOgorICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoVGVzdC5Gb28obikgZm9yIG4gaW4gbmFtZXMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCitjbGFzcyBUZXN0X1Rlc3RTdWl0ZSh1bml0dGVzdC5UZXN0Q2FzZSwgVGVzdEVxdWFsaXR5KToKKworICAgICMjIyBTZXQgdXAgYXR0cmlidXRlcyBuZWVkZWQgYnkgaW5oZXJpdGVkIHRlc3RzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBVc2VkIGJ5IFRlc3RFcXVhbGl0eS50ZXN0X2VxCisgICAgZXFfcGFpcnMgPSBbKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpLCB1bml0dGVzdC5UZXN0U3VpdGUoKSksCisgICAgICAgICAgICAgICAgKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpLCB1bml0dGVzdC5UZXN0U3VpdGUoW10pKSwKKyAgICAgICAgICAgICAgIChfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8xJykpXQorCisgICAgIyBVc2VkIGJ5IFRlc3RFcXVhbGl0eS50ZXN0X25lCisgICAgbmVfcGFpcnMgPSBbKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpLCBfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnKSksCisgICAgICAgICAgICAgICAgKHVuaXR0ZXN0LlRlc3RTdWl0ZShbXSksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScpKSwKKyAgICAgICAgICAgICAgICAoX21rX1Rlc3RTdWl0ZSgndGVzdF8xJywgJ3Rlc3RfMicpLCBfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnLCAndGVzdF8zJykpLAorICAgICAgICAgICAgICAgIChfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8yJykpXQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvU2V0IHVwIGF0dHJpYnV0ZXMgbmVlZGVkIGJ5IGluaGVyaXRlZCB0ZXN0cworCisgICAgIyMjIFRlc3RzIGZvciBUZXN0U3VpdGUuX19pbml0X18KKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCisgICAgIworICAgICMgVGhlIHRlc3RzIGl0ZXJhYmxlIHNob3VsZCBiZSBvcHRpb25hbAorICAgIGRlZiB0ZXN0X2luaXRfX3Rlc3RzX29wdGlvbmFsKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQorCisgICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgorICAgICMgLi4uCisgICAgIyAiSWYgdGVzdHMgaXMgZ2l2ZW4sIGl0IG11c3QgYmUgYW4gaXRlcmFibGUgb2YgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzCisgICAgIyBvciBvdGhlciB0ZXN0IHN1aXRlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBidWlsZCB0aGUgc3VpdGUgaW5pdGlhbGx5IgorICAgICMKKyAgICAjIFRlc3RTdWl0ZSBzaG91bGQgZGVhbCB3aXRoIGVtcHR5IHRlc3RzIGl0ZXJhYmxlcyBieSBhbGxvd2luZyB0aGUKKyAgICAjIGNyZWF0aW9uIG9mIGFuIGVtcHR5IHN1aXRlCisgICAgZGVmIHRlc3RfaW5pdF9fZW1wdHlfdGVzdHMoc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKKworICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKKyAgICAjIC4uLgorICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcworICAgICMgb3Igb3RoZXIgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseSIKKyAgICAjCisgICAgIyBUZXN0U3VpdGUgc2hvdWxkIGFsbG93IGFueSBpdGVyYWJsZSB0byBwcm92aWRlIHRlc3RzCisgICAgZGVmIHRlc3RfaW5pdF9fdGVzdHNfZnJvbV9hbnlfaXRlcmFibGUoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0cygpOgorICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgICAgICB5aWVsZCB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKworICAgICAgICBzdWl0ZV8xID0gdW5pdHRlc3QuVGVzdFN1aXRlKHRlc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMS5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgICAgIHN1aXRlXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoc3VpdGVfMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8yLmNvdW50VGVzdENhc2VzKCksIDIpCisKKyAgICAgICAgc3VpdGVfMyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShzZXQoc3VpdGVfMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMy5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgorICAgICMgLi4uCisgICAgIyAiSWYgdGVzdHMgaXMgZ2l2ZW4sIGl0IG11c3QgYmUgYW4gaXRlcmFibGUgb2YgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzCisgICAgIyBvciBvdGhlciB0ZXN0IHN1aXRlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBidWlsZCB0aGUgc3VpdGUgaW5pdGlhbGx5IgorICAgICMKKyAgICAjIERvZXMgVGVzdFN1aXRlKCkgYWxzbyBhbGxvdyBvdGhlciBUZXN0U3VpdGUoKSBpbnN0YW5jZXMgdG8gYmUgcHJlc2VudAorICAgICMgaW4gdGhlIHRlc3RzIGl0ZXJhYmxlPworICAgIGRlZiB0ZXN0X2luaXRfX1Rlc3RTdWl0ZV9pbnN0YW5jZXNfaW5fdGVzdHMoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0cygpOgorICAgICAgICAgICAgZnRjID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgICAgICB5aWVsZCB1bml0dGVzdC5UZXN0U3VpdGUoW2Z0Y10pCisgICAgICAgICAgICB5aWVsZCB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSh0ZXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIC9UZXN0cyBmb3IgVGVzdFN1aXRlLl9faW5pdF9fCisKKyAgICAjIENvbnRhaW5lciB0eXBlcyBzaG91bGQgc3VwcG9ydCB0aGUgaXRlciBwcm90b2NvbAorICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgIHRlc3QxID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIHRlc3QyID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCh0ZXN0MSwgdGVzdDIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt0ZXN0MSwgdGVzdDJdKQorCisgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCisgICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgorICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKKyAgICAjCisgICAgIyBQcmVzdW1hYmx5IGFuIGVtcHR5IFRlc3RTdWl0ZSByZXR1cm5zIDA/CisgICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXNfemVyb19zaW1wbGUoc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisKKyAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KKyAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCisgICAgIyByZXR1cm4gbGFyZ2VyIFtncmVhdGVyIHRoYW4gMV0gdmFsdWVzIgorICAgICMKKyAgICAjIFByZXN1bWFibHkgYW4gZW1wdHkgVGVzdFN1aXRlIChldmVuIGlmIGl0IGNvbnRhaW5zIG90aGVyIGVtcHR5CisgICAgIyBUZXN0U3VpdGUgaW5zdGFuY2VzKSByZXR1cm5zIDA/CisgICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXNfemVyb19uZXN0ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdW5pdHRlc3QuVGVzdFN1aXRlKCldKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKKworICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LgorICAgICMgLi4udGhpcyBtZXRob2QgaXMgYWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgVGVzdFN1aXRlIGNsYXNzLCB3aGljaCBjYW4KKyAgICAjIHJldHVybiBsYXJnZXIgW2dyZWF0ZXIgdGhhbiAxXSB2YWx1ZXMiCisgICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXNfc2ltcGxlKHNlbGYpOgorICAgICAgICB0ZXN0MSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICB0ZXN0MiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgodGVzdDEsIHRlc3QyKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCisKKyAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KKyAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCisgICAgIyByZXR1cm4gbGFyZ2VyIFtncmVhdGVyIHRoYW4gMV0gdmFsdWVzIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGlzIGhvbGRzIGZvciBuZXN0ZWQgVGVzdFN1aXRlIGluc3RhbmNlcywgdG9vCisgICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXNfbmVzdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdDEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0MihzZWxmKTogcGFzcworCisgICAgICAgIHRlc3QyID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIHRlc3QzID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIGNoaWxkID0gdW5pdHRlc3QuVGVzdFN1aXRlKChUZXN0MSgndGVzdDInKSwgdGVzdDIpKQorICAgICAgICBwYXJlbnQgPSB1bml0dGVzdC5UZXN0U3VpdGUoKHRlc3QzLCBjaGlsZCwgVGVzdDEoJ3Rlc3QxJykpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyZW50LmNvdW50VGVzdENhc2VzKCksIDQpCisKKyAgICAjICJSdW4gdGhlIHRlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN1aXRlLCBjb2xsZWN0aW5nIHRoZSByZXN1bHQgaW50bworICAgICMgdGhlIHRlc3QgcmVzdWx0IG9iamVjdCBwYXNzZWQgYXMgcmVzdWx0LiIKKyAgICAjCisgICAgIyBBbmQgaWYgdGhlcmUgYXJlIG5vIHRlc3RzPyBXaGF0IHRoZW4/CisgICAgZGVmIHRlc3RfcnVuX19lbXB0eV9zdWl0ZShzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFtdKQorCisgICAgIyAiTm90ZSB0aGF0IHVubGlrZSBUZXN0Q2FzZS5ydW4oKSwgVGVzdFN1aXRlLnJ1bigpIHJlcXVpcmVzIHRoZQorICAgICMgInJlc3VsdCBvYmplY3QgdG8gYmUgcGFzc2VkIGluLiIKKyAgICBkZWYgdGVzdF9ydW5fX3JlcXVpcmVzX3Jlc3VsdChzZWxmKToKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1aXRlLnJ1bigpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgIyAiUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8KKyAgICAjIHRoZSB0ZXN0IHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzIHJlc3VsdC4iCisgICAgZGVmIHRlc3RfcnVuKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBjbGFzcyBMb2dnaW5nQ2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdCk6CisgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgncnVuICVzJyAlIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQorCisgICAgICAgICAgICBkZWYgdGVzdDEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0MihzZWxmKTogcGFzcworCisgICAgICAgIHRlc3RzID0gW0xvZ2dpbmdDYXNlKCd0ZXN0MScpLCBMb2dnaW5nQ2FzZSgndGVzdDInKV0KKworICAgICAgICB1bml0dGVzdC5UZXN0U3VpdGUodGVzdHMpLnJ1bihyZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsncnVuIHRlc3QxJywgJ3J1biB0ZXN0MiddKQorCisgICAgIyAiQWRkIGEgVGVzdENhc2UgLi4uIHRvIHRoZSBzdWl0ZSIKKyAgICBkZWYgdGVzdF9hZGRUZXN0X19UZXN0Q2FzZShzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCisKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdCcpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgICAgICBzdWl0ZS5hZGRUZXN0KHRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdF0pCisKKyAgICAjICJBZGQgYSAuLi4gVGVzdFN1aXRlIHRvIHRoZSBzdWl0ZSIKKyAgICBkZWYgdGVzdF9hZGRUZXN0X19UZXN0U3VpdGUoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcworCisgICAgICAgIHN1aXRlXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdCcpXSkKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLmFkZFRlc3Qoc3VpdGVfMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtzdWl0ZV8yXSkKKworICAgICMgIkFkZCBhbGwgdGhlIHRlc3RzIGZyb20gYW4gaXRlcmFibGUgb2YgVGVzdENhc2UgYW5kIFRlc3RTdWl0ZQorICAgICMgaW5zdGFuY2VzIHRvIHRoaXMgdGVzdCBzdWl0ZS4iCisgICAgIworICAgICMgIlRoaXMgaXMgZXF1aXZhbGVudCB0byBpdGVyYXRpbmcgb3ZlciB0ZXN0cywgY2FsbGluZyBhZGRUZXN0KCkgZm9yCisgICAgIyBlYWNoIGVsZW1lbnQiCisgICAgZGVmIHRlc3RfYWRkVGVzdHMoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisKKyAgICAgICAgdGVzdF8xID0gRm9vKCd0ZXN0XzEnKQorICAgICAgICB0ZXN0XzIgPSBGb28oJ3Rlc3RfMicpCisgICAgICAgIGlubmVyX3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XzJdKQorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkIHRlc3RfMQorICAgICAgICAgICAgeWllbGQgdGVzdF8yCisgICAgICAgICAgICB5aWVsZCBpbm5lcl9zdWl0ZQorCisgICAgICAgIHN1aXRlXzEgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZV8xLmFkZFRlc3RzKGdlbigpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZV8xKSwgbGlzdChnZW4oKSkpCisKKyAgICAgICAgIyAiVGhpcyBpcyBlcXVpdmFsZW50IHRvIGl0ZXJhdGluZyBvdmVyIHRlc3RzLCBjYWxsaW5nIGFkZFRlc3QoKSBmb3IKKyAgICAgICAgIyBlYWNoIGVsZW1lbnQiCisgICAgICAgIHN1aXRlXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBmb3IgdCBpbiBnZW4oKToKKyAgICAgICAgICAgIHN1aXRlXzIuYWRkVGVzdCh0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMSwgc3VpdGVfMikKKworICAgICMgIkFkZCBhbGwgdGhlIHRlc3RzIGZyb20gYW4gaXRlcmFibGUgb2YgVGVzdENhc2UgYW5kIFRlc3RTdWl0ZQorICAgICMgaW5zdGFuY2VzIHRvIHRoaXMgdGVzdCBzdWl0ZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIGl0IGRvZXNuJ3QgZ2V0IGFuIGl0ZXJhYmxlPworICAgIGRlZiB0ZXN0X2FkZFRlc3RfX25vbml0ZXJhYmxlKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VpdGUuYWRkVGVzdHMoNSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICBkZWYgdGVzdF9hZGRUZXN0X19ub25jYWxsYWJsZShzZWxmKToKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1aXRlLmFkZFRlc3QsIDUpCisKKyAgICBkZWYgdGVzdF9hZGRUZXN0X19jYXNlc3VpdGVjbGFzcyhzZWxmKToKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1aXRlLmFkZFRlc3QsIFRlc3RfVGVzdFN1aXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1aXRlLmFkZFRlc3QsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKworICAgIGRlZiB0ZXN0X2FkZFRlc3RzX19zdHJpbmcoc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0cywgImZvbyIpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9pbl9zdWl0ZShzZWxmKToKKyAgICAgICAgZGVmIGYoXyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGUuYWRkVGVzdChmKQorCisgICAgICAgICMgd2hlbiB0aGUgYnVnIGlzIGZpeGVkIHRoaXMgbGluZSB3aWxsIG5vdCBjcmFzaAorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorCisKKworICAgIGRlZiB0ZXN0X2Jhc2V0ZXN0c3VpdGUoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgd2FzU2V0VXAgPSBGYWxzZQorICAgICAgICAgICAgd2FzVG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIGNscy53YXNTZXRVcCA9IFRydWUKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBjbHMud2FzVG9ybkRvd24gPSBUcnVlCisgICAgICAgICAgICBkZWYgdGVzdFBhc3Moc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RGYWlsKHNlbGYpOgorICAgICAgICAgICAgICAgIGZhaWwKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICB3YXNTZXRVcCA9IEZhbHNlCisgICAgICAgICAgICB3YXNUb3JuRG93biA9IEZhbHNlCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICBNb2R1bGUud2FzU2V0VXAgPSBUcnVlCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICBNb2R1bGUud2FzVG9ybkRvd24gPSBUcnVlCisKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzeXMubW9kdWxlcy5wb3AsICdNb2R1bGUnKQorCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLmFkZFRlc3RzKFtUZXN0KCd0ZXN0UGFzcycpLCBUZXN0KCd0ZXN0RmFpbCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKE1vZHVsZS53YXNTZXRVcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShNb2R1bGUud2FzVG9ybkRvd24pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdC53YXNTZXRVcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUZXN0Lndhc1Rvcm5Eb3duKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDIpCisKKworICAgIGRlZiB0ZXN0X292ZXJyaWRpbmdfY2FsbChzZWxmKToKKyAgICAgICAgY2xhc3MgTXlTdWl0ZSh1bml0dGVzdC5UZXN0U3VpdGUpOgorICAgICAgICAgICAgY2FsbGVkID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdFN1aXRlLl9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3KQorCisgICAgICAgIHN1aXRlID0gTXlTdWl0ZSgpCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB3cmFwcGVyID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgd3JhcHBlci5hZGRUZXN0KHN1aXRlKQorICAgICAgICB3cmFwcGVyKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1aXRlLmNhbGxlZCkKKworICAgICAgICAjIHJldXNpbmcgcmVzdWx0cyBzaG91bGQgYmUgcGVybWl0dGVkIGV2ZW4gaWYgYWJvbWluYWJsZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5fdGVzdFJ1bkVudGVyZWQpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC91dGlsLnB5IGIvTGliL3VuaXR0ZXN0L3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIwMTY1NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC91dGlsLnB5CkBAIC0wLDAgKzEsOTQgQEAKKyIiIlZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMuIiIiCisKK19fdW5pdHRlc3QgPSBUcnVlCisKK19NQVhfTEVOR1RIID0gODAKK2RlZiBzYWZlX3JlcHIob2JqLCBzaG9ydD1GYWxzZSk6CisgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSByZXByKG9iaikKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXN1bHQgPSBvYmplY3QuX19yZXByX18ob2JqKQorICAgIGlmIG5vdCBzaG9ydCBvciBsZW4ocmVzdWx0KSA8IF9NQVhfTEVOR1RIOgorICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgcmV0dXJuIHJlc3VsdFs6X01BWF9MRU5HVEhdICsgJyBbdHJ1bmNhdGVkXS4uLicKKworCitkZWYgc3RyY2xhc3MoY2xzKToKKyAgICByZXR1cm4gIiVzLiVzIiAlIChjbHMuX19tb2R1bGVfXywgY2xzLl9fbmFtZV9fKQorCitkZWYgc29ydGVkX2xpc3RfZGlmZmVyZW5jZShleHBlY3RlZCwgYWN0dWFsKToKKyAgICAiIiJGaW5kcyBlbGVtZW50cyBpbiBvbmx5IG9uZSBvciB0aGUgb3RoZXIgb2YgdHdvLCBzb3J0ZWQgaW5wdXQgbGlzdHMuCisKKyAgICBSZXR1cm5zIGEgdHdvLWVsZW1lbnQgdHVwbGUgb2YgbGlzdHMuICAgIFRoZSBmaXJzdCBsaXN0IGNvbnRhaW5zIHRob3NlCisgICAgZWxlbWVudHMgaW4gdGhlICJleHBlY3RlZCIgbGlzdCBidXQgbm90IGluIHRoZSAiYWN0dWFsIiBsaXN0LCBhbmQgdGhlCisgICAgc2Vjb25kIGNvbnRhaW5zIHRob3NlIGVsZW1lbnRzIGluIHRoZSAiYWN0dWFsIiBsaXN0IGJ1dCBub3QgaW4gdGhlCisgICAgImV4cGVjdGVkIiBsaXN0LiAgICBEdXBsaWNhdGUgZWxlbWVudHMgaW4gZWl0aGVyIGlucHV0IGxpc3QgYXJlIGlnbm9yZWQuCisgICAgIiIiCisgICAgaSA9IGogPSAwCisgICAgbWlzc2luZyA9IFtdCisgICAgdW5leHBlY3RlZCA9IFtdCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZSA9IGV4cGVjdGVkW2ldCisgICAgICAgICAgICBhID0gYWN0dWFsW2pdCisgICAgICAgICAgICBpZiBlIDwgYToKKyAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChlKQorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgICAgIHdoaWxlIGV4cGVjdGVkW2ldID09IGU6CisgICAgICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgZWxpZiBlID4gYToKKyAgICAgICAgICAgICAgICB1bmV4cGVjdGVkLmFwcGVuZChhKQorICAgICAgICAgICAgICAgIGogKz0gMQorICAgICAgICAgICAgICAgIHdoaWxlIGFjdHVhbFtqXSA9PSBhOgorICAgICAgICAgICAgICAgICAgICBqICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBleHBlY3RlZFtpXSA9PSBlOgorICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgaiArPSAxCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGFjdHVhbFtqXSA9PSBhOgorICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAxCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgbWlzc2luZy5leHRlbmQoZXhwZWN0ZWRbaTpdKQorICAgICAgICAgICAgdW5leHBlY3RlZC5leHRlbmQoYWN0dWFsW2o6XSkKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIG1pc3NpbmcsIHVuZXhwZWN0ZWQKKworCitkZWYgdW5vcmRlcmFibGVfbGlzdF9kaWZmZXJlbmNlKGV4cGVjdGVkLCBhY3R1YWwsIGlnbm9yZV9kdXBsaWNhdGU9RmFsc2UpOgorICAgICIiIlNhbWUgYmVoYXZpb3IgYXMgc29ydGVkX2xpc3RfZGlmZmVyZW5jZSBidXQKKyAgICBmb3IgbGlzdHMgb2YgdW5vcmRlcmFibGUgaXRlbXMgKGxpa2UgZGljdHMpLgorCisgICAgQXMgaXQgZG9lcyBhIGxpbmVhciBzZWFyY2ggcGVyIGl0ZW0gKHJlbW92ZSkgaXQKKyAgICBoYXMgTyhuKm4pIHBlcmZvcm1hbmNlLgorICAgICIiIgorICAgIG1pc3NpbmcgPSBbXQorICAgIHVuZXhwZWN0ZWQgPSBbXQorICAgIHdoaWxlIGV4cGVjdGVkOgorICAgICAgICBpdGVtID0gZXhwZWN0ZWQucG9wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWN0dWFsLnJlbW92ZShpdGVtKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKGl0ZW0pCisgICAgICAgIGlmIGlnbm9yZV9kdXBsaWNhdGU6CisgICAgICAgICAgICBmb3IgbHN0IGluIGV4cGVjdGVkLCBhY3R1YWw6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgbHN0LnJlbW92ZShpdGVtKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgaWYgaWdub3JlX2R1cGxpY2F0ZToKKyAgICAgICAgd2hpbGUgYWN0dWFsOgorICAgICAgICAgICAgaXRlbSA9IGFjdHVhbC5wb3AoKQorICAgICAgICAgICAgdW5leHBlY3RlZC5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBhY3R1YWwucmVtb3ZlKGl0ZW0pCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBtaXNzaW5nLCB1bmV4cGVjdGVkCisKKyAgICAjIGFueXRoaW5nIGxlZnQgaW4gYWN0dWFsIGlzIHVuZXhwZWN0ZWQKKyAgICByZXR1cm4gbWlzc2luZywgYWN0dWFsCmRpZmYgLS1naXQgYS9MaWIvdXJsbGliLnB5IGIvTGliL3VybGxpYi5weQppbmRleCBiOTRmNTUwLi4xNTUzZjlkIDEwMDY0NAotLS0gYS9MaWIvdXJsbGliLnB5CisrKyBiL0xpYi91cmxsaWIucHkKQEAgLTQyLDkgKzQyLDcgQEAKIE1BWEZUUENBQ0hFID0gMTAgICAgICAgICMgVHJpbSB0aGUgZnRwIGNhY2hlIGJleW9uZCB0aGlzIHNpemUKIAogIyBIZWxwZXIgZm9yIG5vbi11bml4IHN5c3RlbXMKLWlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgZnJvbSBtYWN1cmwycGF0aCBpbXBvcnQgdXJsMnBhdGhuYW1lLCBwYXRobmFtZTJ1cmwKLWVsaWYgb3MubmFtZSA9PSAnbnQnOgoraWYgb3MubmFtZSA9PSAnbnQnOgogICAgIGZyb20gbnR1cmwycGF0aCBpbXBvcnQgdXJsMnBhdGhuYW1lLCBwYXRobmFtZTJ1cmwKIGVsaWYgb3MubmFtZSA9PSAncmlzY29zJzoKICAgICBmcm9tIHJvdXJsMnBhdGggaW1wb3J0IHVybDJwYXRobmFtZSwgcGF0aG5hbWUydXJsCkBAIC05NCw3ICs5Miw3IEBACiBkZWYgdXJsY2xlYW51cCgpOgogICAgIGlmIF91cmxvcGVuZXI6CiAgICAgICAgIF91cmxvcGVuZXIuY2xlYW51cCgpCi0gICAgX3NhZmVtYXBzLmNsZWFyKCkKKyAgICBfc2FmZV9xdW90ZXJzLmNsZWFyKCkKICAgICBmdHBjYWNoZS5jbGVhcigpCiAKICMgY2hlY2sgZm9yIFNTTApAQCAtMTc3LDggKzE3NSw4IEBACiAgICAgZGVmIG9wZW4oc2VsZiwgZnVsbHVybCwgZGF0YT1Ob25lKToKICAgICAgICAgIiIiVXNlIFVSTG9wZW5lcigpLm9wZW4oZmlsZSkgaW5zdGVhZCBvZiBvcGVuKGZpbGUsICdyJykuIiIiCiAgICAgICAgIGZ1bGx1cmwgPSB1bndyYXAodG9CeXRlcyhmdWxsdXJsKSkKLSAgICAgICAgIyBwZXJjZW50IGVuY29kZSB1cmwuIGZpeGluZyBsYW1lIHNlcnZlciBlcnJvcnMgbGlrZSBzcGFjZSB3aXRoaW4gdXJsCi0gICAgICAgICMgcGFydHMKKyAgICAgICAgIyBwZXJjZW50IGVuY29kZSB1cmwsIGZpeGluZyBsYW1lIHNlcnZlciBlcnJvcnMgZm9yIGUuZywgbGlrZSBzcGFjZQorICAgICAgICAjIHdpdGhpbiB1cmwgcGF0aHMuCiAgICAgICAgIGZ1bGx1cmwgPSBxdW90ZShmdWxsdXJsLCBzYWZlPSIlLzo9Jj9+IyshJCw7J0AoKSpbXXwiKQogICAgICAgICBpZiBzZWxmLnRlbXBjYWNoZSBhbmQgZnVsbHVybCBpbiBzZWxmLnRlbXBjYWNoZToKICAgICAgICAgICAgIGZpbGVuYW1lLCBoZWFkZXJzID0gc2VsZi50ZW1wY2FjaGVbZnVsbHVybF0KQEAgLTIzMiw5ICsyMzAsOSBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZwID0gc2VsZi5vcGVuX2xvY2FsX2ZpbGUodXJsMSkKICAgICAgICAgICAgICAgICBoZHJzID0gZnAuaW5mbygpCi0gICAgICAgICAgICAgICAgZGVsIGZwCisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiB1cmwycGF0aG5hbWUoc3BsaXRob3N0KHVybDEpWzFdKSwgaGRycwotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZnAgPSBzZWxmLm9wZW4odXJsLCBkYXRhKQogICAgICAgICB0cnk6CkBAIC0yNzYsOCArMjc0LDYgQEAKICAgICAgICAgICAgICAgICB0ZnAuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICBkZWwgZnAKLSAgICAgICAgZGVsIHRmcAogCiAgICAgICAgICMgcmFpc2UgZXhjZXB0aW9uIGlmIGFjdHVhbCBzaXplIGRvZXMgbm90IG1hdGNoIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcgogICAgICAgICBpZiBzaXplID49IDAgYW5kIHJlYWQgPCBzaXplOgpAQCAtMzQzLDkgKzMzOSw3IEBACiAgICAgICAgIGlmIGF1dGg6IGgucHV0aGVhZGVyKCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICVzJyAlIGF1dGgpCiAgICAgICAgIGlmIHJlYWxob3N0OiBoLnB1dGhlYWRlcignSG9zdCcsIHJlYWxob3N0KQogICAgICAgICBmb3IgYXJncyBpbiBzZWxmLmFkZGhlYWRlcnM6IGgucHV0aGVhZGVyKCphcmdzKQotICAgICAgICBoLmVuZGhlYWRlcnMoKQotICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaC5zZW5kKGRhdGEpCisgICAgICAgIGguZW5kaGVhZGVycyhkYXRhKQogICAgICAgICBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMgPSBoLmdldHJlcGx5KCkKICAgICAgICAgZnAgPSBoLmdldGZpbGUoKQogICAgICAgICBpZiBlcnJjb2RlID09IC0xOgpAQCAtNDM4LDkgKzQzMiw3IEBACiAgICAgICAgICAgICBpZiBhdXRoOiBoLnB1dGhlYWRlcignQXV0aG9yaXphdGlvbicsICdCYXNpYyAlcycgJSBhdXRoKQogICAgICAgICAgICAgaWYgcmVhbGhvc3Q6IGgucHV0aGVhZGVyKCdIb3N0JywgcmVhbGhvc3QpCiAgICAgICAgICAgICBmb3IgYXJncyBpbiBzZWxmLmFkZGhlYWRlcnM6IGgucHV0aGVhZGVyKCphcmdzKQotICAgICAgICAgICAgaC5lbmRoZWFkZXJzKCkKLSAgICAgICAgICAgIGlmIGRhdGEgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgaC5zZW5kKGRhdGEpCisgICAgICAgICAgICBoLmVuZGhlYWRlcnMoZGF0YSkKICAgICAgICAgICAgIGVycmNvZGUsIGVycm1zZywgaGVhZGVycyA9IGguZ2V0cmVwbHkoKQogICAgICAgICAgICAgZnAgPSBoLmdldGZpbGUoKQogICAgICAgICAgICAgaWYgZXJyY29kZSA9PSAtMToKQEAgLTUxOSw4ICs1MTEsOCBAQAogICAgICAgICBpZiB1c2VyOiB1c2VyLCBwYXNzd2QgPSBzcGxpdHBhc3N3ZCh1c2VyKQogICAgICAgICBlbHNlOiBwYXNzd2QgPSBOb25lCiAgICAgICAgIGhvc3QgPSB1bnF1b3RlKGhvc3QpCi0gICAgICAgIHVzZXIgPSB1bnF1b3RlKHVzZXIgb3IgJycpCi0gICAgICAgIHBhc3N3ZCA9IHVucXVvdGUocGFzc3dkIG9yICcnKQorICAgICAgICB1c2VyID0gdXNlciBvciAnJworICAgICAgICBwYXNzd2QgPSBwYXNzd2Qgb3IgJycKICAgICAgICAgaG9zdCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3QpCiAgICAgICAgIGlmIG5vdCBwb3J0OgogICAgICAgICAgICAgaW1wb3J0IGZ0cGxpYgpAQCAtNzczLDcgKzc2NSw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vcGVuKG5ld3VybCwgZGF0YSkKIAotICAgIGRlZiBnZXRfdXNlcl9wYXNzd2Qoc2VsZiwgaG9zdCwgcmVhbG0sIGNsZWFyX2NhY2hlID0gMCk6CisgICAgZGVmIGdldF91c2VyX3Bhc3N3ZChzZWxmLCBob3N0LCByZWFsbSwgY2xlYXJfY2FjaGU9MCk6CiAgICAgICAgIGtleSA9IHJlYWxtICsgJ0AnICsgaG9zdC5sb3dlcigpCiAgICAgICAgIGlmIGtleSBpbiBzZWxmLmF1dGhfY2FjaGU6CiAgICAgICAgICAgICBpZiBjbGVhcl9jYWNoZToKQEAgLTEwNjAsNyArMTA1MiwxMiBAQAogICAgICAgICBfaG9zdHByb2cgPSByZS5jb21waWxlKCdeLy8oW14vP10qKSguKikkJykKIAogICAgIG1hdGNoID0gX2hvc3Rwcm9nLm1hdGNoKHVybCkKLSAgICBpZiBtYXRjaDogcmV0dXJuIG1hdGNoLmdyb3VwKDEsIDIpCisgICAgaWYgbWF0Y2g6CisgICAgICAgIGhvc3RfcG9ydCA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgIHBhdGggPSBtYXRjaC5ncm91cCgyKQorICAgICAgICBpZiBwYXRoIGFuZCBub3QgcGF0aC5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICBwYXRoID0gJy8nICsgcGF0aAorICAgICAgICByZXR1cm4gaG9zdF9wb3J0LCBwYXRoCiAgICAgcmV0dXJuIE5vbmUsIHVybAogCiBfdXNlcnByb2cgPSBOb25lCkBAIC0xMDcyLDcgKzEwNjksNyBAQAogICAgICAgICBfdXNlcnByb2cgPSByZS5jb21waWxlKCdeKC4qKUAoLiopJCcpCiAKICAgICBtYXRjaCA9IF91c2VycHJvZy5tYXRjaChob3N0KQotICAgIGlmIG1hdGNoOiByZXR1cm4gbWFwKHVucXVvdGUsIG1hdGNoLmdyb3VwKDEsIDIpKQorICAgIGlmIG1hdGNoOiByZXR1cm4gbWF0Y2guZ3JvdXAoMSwgMikKICAgICByZXR1cm4gTm9uZSwgaG9zdAogCiBfcGFzc3dkcHJvZyA9IE5vbmUKQEAgLTEwODEsNyArMTA3OCw3IEBACiAgICAgZ2xvYmFsIF9wYXNzd2Rwcm9nCiAgICAgaWYgX3Bhc3N3ZHByb2cgaXMgTm9uZToKICAgICAgICAgaW1wb3J0IHJlCi0gICAgICAgIF9wYXNzd2Rwcm9nID0gcmUuY29tcGlsZSgnXihbXjpdKik6KC4qKSQnKQorICAgICAgICBfcGFzc3dkcHJvZyA9IHJlLmNvbXBpbGUoJ14oW146XSopOiguKikkJyxyZS5TKQogCiAgICAgbWF0Y2ggPSBfcGFzc3dkcHJvZy5tYXRjaCh1c2VyKQogICAgIGlmIG1hdGNoOiByZXR1cm4gbWF0Y2guZ3JvdXAoMSwgMikKQEAgLTExNjQsMjEgKzExNjEsMjkgQEAKICAgICBpZiBtYXRjaDogcmV0dXJuIG1hdGNoLmdyb3VwKDEsIDIpCiAgICAgcmV0dXJuIGF0dHIsIE5vbmUKIAorIyB1cmxwYXJzZSBjb250YWlucyBhIGR1cGxpY2F0ZSBvZiB0aGlzIG1ldGhvZCB0byBhdm9pZCBhIGNpcmN1bGFyIGltcG9ydC4gIElmCisjIHlvdSB1cGRhdGUgdGhpcyBtZXRob2QsIGFsc28gdXBkYXRlIHRoZSBjb3B5IGluIHVybHBhcnNlLiAgVGhpcyBjb2RlCisjIGR1cGxpY2F0aW9uIGRvZXMgbm90IGV4aXN0IGluIFB5dGhvbjMuCisKIF9oZXhkaWcgPSAnMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZicKLV9oZXh0b2NociA9IGRpY3QoKGErYiwgY2hyKGludChhK2IsMTYpKSkgZm9yIGEgaW4gX2hleGRpZyBmb3IgYiBpbiBfaGV4ZGlnKQorX2hleHRvY2hyID0gZGljdCgoYSArIGIsIGNocihpbnQoYSArIGIsIDE2KSkpCisgICAgICAgICAgICAgICAgIGZvciBhIGluIF9oZXhkaWcgZm9yIGIgaW4gX2hleGRpZykKIAogZGVmIHVucXVvdGUocyk6CiAgICAgIiIidW5xdW90ZSgnYWJjJTIwZGVmJykgLT4gJ2FiYyBkZWYnLiIiIgogICAgIHJlcyA9IHMuc3BsaXQoJyUnKQotICAgIGZvciBpIGluIHhyYW5nZSgxLCBsZW4ocmVzKSk6Ci0gICAgICAgIGl0ZW0gPSByZXNbaV0KKyAgICAjIGZhc3RwYXRoCisgICAgaWYgbGVuKHJlcykgPT0gMToKKyAgICAgICAgcmV0dXJuIHMKKyAgICBzID0gcmVzWzBdCisgICAgZm9yIGl0ZW0gaW4gcmVzWzE6XToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVzW2ldID0gX2hleHRvY2hyW2l0ZW1bOjJdXSArIGl0ZW1bMjpdCisgICAgICAgICAgICBzICs9IF9oZXh0b2NocltpdGVtWzoyXV0gKyBpdGVtWzI6XQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXNbaV0gPSAnJScgKyBpdGVtCisgICAgICAgICAgICBzICs9ICclJyArIGl0ZW0KICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKLSAgICAgICAgICAgIHJlc1tpXSA9IHVuaWNocihpbnQoaXRlbVs6Ml0sIDE2KSkgKyBpdGVtWzI6XQotICAgIHJldHVybiAiIi5qb2luKHJlcykKKyAgICAgICAgICAgIHMgKz0gdW5pY2hyKGludChpdGVtWzoyXSwgMTYpKSArIGl0ZW1bMjpdCisgICAgcmV0dXJuIHMKIAogZGVmIHVucXVvdGVfcGx1cyhzKToKICAgICAiIiJ1bnF1b3RlKCclN2UvYWJjK2RlZicpIC0+ICd+L2FiYyBkZWYnIiIiCkBAIC0xMTg4LDkgKzExOTMsMTIgQEAKIGFsd2F5c19zYWZlID0gKCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKICAgICAgICAgICAgICAgICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKICAgICAgICAgICAgICAgICcwMTIzNDU2Nzg5JyAnXy4tJykKLV9zYWZlbWFwcyA9IHt9Citfc2FmZV9tYXAgPSB7fQorZm9yIGksIGMgaW4gemlwKHhyYW5nZSgyNTYpLCBzdHIoYnl0ZWFycmF5KHhyYW5nZSgyNTYpKSkpOgorICAgIF9zYWZlX21hcFtjXSA9IGMgaWYgKGkgPCAxMjggYW5kIGMgaW4gYWx3YXlzX3NhZmUpIGVsc2UgJyV7OjAyWH0nLmZvcm1hdChpKQorX3NhZmVfcXVvdGVycyA9IHt9CiAKLWRlZiBxdW90ZShzLCBzYWZlID0gJy8nKToKK2RlZiBxdW90ZShzLCBzYWZlPScvJyk6CiAgICAgIiIicXVvdGUoJ2FiYyBkZWYnKSAtPiAnYWJjJTIwZGVmJwogCiAgICAgRWFjaCBwYXJ0IG9mIGEgVVJMLCBlLmcuIHRoZSBwYXRoIGluZm8sIHRoZSBxdWVyeSwgZXRjLiwgaGFzIGEKQEAgLTEyMTEsMjcgKzEyMTksMzIgQEAKICAgICBjYWxsZWQgb24gYSBwYXRoIHdoZXJlIHRoZSBleGlzdGluZyBzbGFzaCBjaGFyYWN0ZXJzIGFyZSB1c2VkIGFzCiAgICAgcmVzZXJ2ZWQgY2hhcmFjdGVycy4KICAgICAiIiIKKyAgICAjIGZhc3RwYXRoCisgICAgaWYgbm90IHM6CisgICAgICAgIGlmIHMgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignTm9uZSBvYmplY3QgY2Fubm90IGJlIHF1b3RlZCcpCisgICAgICAgIHJldHVybiBzCiAgICAgY2FjaGVrZXkgPSAoc2FmZSwgYWx3YXlzX3NhZmUpCiAgICAgdHJ5OgotICAgICAgICBzYWZlX21hcCA9IF9zYWZlbWFwc1tjYWNoZWtleV0KKyAgICAgICAgKHF1b3Rlciwgc2FmZSkgPSBfc2FmZV9xdW90ZXJzW2NhY2hla2V5XQogICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgc2FmZSArPSBhbHdheXNfc2FmZQotICAgICAgICBzYWZlX21hcCA9IHt9Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKDI1Nik6Ci0gICAgICAgICAgICBjID0gY2hyKGkpCi0gICAgICAgICAgICBzYWZlX21hcFtjXSA9IChjIGluIHNhZmUpIGFuZCBjIG9yICgnJSUlMDJYJyAlIGkpCi0gICAgICAgIF9zYWZlbWFwc1tjYWNoZWtleV0gPSBzYWZlX21hcAotICAgIHJlcyA9IG1hcChzYWZlX21hcC5fX2dldGl0ZW1fXywgcykKLSAgICByZXR1cm4gJycuam9pbihyZXMpCisgICAgICAgIHNhZmVfbWFwID0gX3NhZmVfbWFwLmNvcHkoKQorICAgICAgICBzYWZlX21hcC51cGRhdGUoWyhjLCBjKSBmb3IgYyBpbiBzYWZlXSkKKyAgICAgICAgcXVvdGVyID0gc2FmZV9tYXAuX19nZXRpdGVtX18KKyAgICAgICAgc2FmZSA9IGFsd2F5c19zYWZlICsgc2FmZQorICAgICAgICBfc2FmZV9xdW90ZXJzW2NhY2hla2V5XSA9IChxdW90ZXIsIHNhZmUpCisgICAgaWYgbm90IHMucnN0cmlwKHNhZmUpOgorICAgICAgICByZXR1cm4gcworICAgIHJldHVybiAnJy5qb2luKG1hcChxdW90ZXIsIHMpKQogCi1kZWYgcXVvdGVfcGx1cyhzLCBzYWZlID0gJycpOgorZGVmIHF1b3RlX3BsdXMocywgc2FmZT0nJyk6CiAgICAgIiIiUXVvdGUgdGhlIHF1ZXJ5IGZyYWdtZW50IG9mIGEgVVJMOyByZXBsYWNpbmcgJyAnIHdpdGggJysnIiIiCiAgICAgaWYgJyAnIGluIHM6CiAgICAgICAgIHMgPSBxdW90ZShzLCBzYWZlICsgJyAnKQogICAgICAgICByZXR1cm4gcy5yZXBsYWNlKCcgJywgJysnKQogICAgIHJldHVybiBxdW90ZShzLCBzYWZlKQogCi1kZWYgdXJsZW5jb2RlKHF1ZXJ5LGRvc2VxPTApOgorZGVmIHVybGVuY29kZShxdWVyeSwgZG9zZXE9MCk6CiAgICAgIiIiRW5jb2RlIGEgc2VxdWVuY2Ugb2YgdHdvLWVsZW1lbnQgdHVwbGVzIG9yIGRpY3Rpb25hcnkgaW50byBhIFVSTCBxdWVyeSBzdHJpbmcuCiAKICAgICBJZiBhbnkgdmFsdWVzIGluIHRoZSBxdWVyeSBhcmcgYXJlIHNlcXVlbmNlcyBhbmQgZG9zZXEgaXMgdHJ1ZSwgZWFjaApAQCAtMTI4Myw3ICsxMjk2LDcgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAjIGlzIHRoaXMgYSBzdWZmaWNpZW50IHRlc3QgZm9yIHNlcXVlbmNlLW5lc3M/Ci0gICAgICAgICAgICAgICAgICAgIHggPSBsZW4odikKKyAgICAgICAgICAgICAgICAgICAgbGVuKHYpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyBub3QgYSBzZXF1ZW5jZQogICAgICAgICAgICAgICAgICAgICB2ID0gcXVvdGVfcGx1cyhzdHIodikpCkBAIC0xMzkzLDcgKzE0MDYsNiBAQAogCiAgICAgICAgIHJldHVybiBGYWxzZQogCi0KICAgICBkZWYgZ2V0cHJveGllc19tYWNvc3hfc3lzY29uZigpOgogICAgICAgICAiIiJSZXR1cm4gYSBkaWN0aW9uYXJ5IG9mIHNjaGVtZSAtPiBwcm94eSBzZXJ2ZXIgVVJMIG1hcHBpbmdzLgogCkBAIC0xNDAyLDggKzE0MTQsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIF9nZXRfcHJveGllcygpCiAKLQotCiAgICAgZGVmIHByb3h5X2J5cGFzcyhob3N0KToKICAgICAgICAgaWYgZ2V0cHJveGllc19lbnZpcm9ubWVudCgpOgogICAgICAgICAgICAgcmV0dXJuIHByb3h5X2J5cGFzc19lbnZpcm9ubWVudChob3N0KQpAQCAtMTUwNywxOCArMTUxNywxMSBAQAogICAgICAgICAjICc8bG9jYWw+JyBzdHJpbmcgYnkgdGhlIGxvY2FsaG9zdCBlbnRyeSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgICAgIyBjYW5vbmljYWwgZW50cnkuCiAgICAgICAgIHByb3h5T3ZlcnJpZGUgPSBwcm94eU92ZXJyaWRlLnNwbGl0KCc7JykKLSAgICAgICAgaSA9IDAKLSAgICAgICAgd2hpbGUgaSA8IGxlbihwcm94eU92ZXJyaWRlKToKLSAgICAgICAgICAgIGlmIHByb3h5T3ZlcnJpZGVbaV0gPT0gJzxsb2NhbD4nOgotICAgICAgICAgICAgICAgIHByb3h5T3ZlcnJpZGVbaTppKzFdID0gWydsb2NhbGhvc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMjcuMC4wLjEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5nZXRob3N0bmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5nZXRob3N0YnluYW1lKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZ2V0aG9zdG5hbWUoKSldCi0gICAgICAgICAgICBpICs9IDEKLSAgICAgICAgIyBwcmludCBwcm94eU92ZXJyaWRlCiAgICAgICAgICMgbm93IGNoZWNrIGlmIHdlIG1hdGNoIG9uZSBvZiB0aGUgcmVnaXN0cnkgdmFsdWVzLgogICAgICAgICBmb3IgdGVzdCBpbiBwcm94eU92ZXJyaWRlOgorICAgICAgICAgICAgaWYgdGVzdCA9PSAnPGxvY2FsPic6CisgICAgICAgICAgICAgICAgaWYgJy4nIG5vdCBpbiByYXdIb3N0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQogICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFjZSgiLiIsIHIiXC4iKSAgICAgIyBtYXNrIGRvdHMKICAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoIioiLCByIi4qIikgICAgICMgY2hhbmdlIGdsb2Igc2VxdWVuY2UKICAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoIj8iLCByIi4iKSAgICAgICMgY2hhbmdlIGdsb2IgY2hhcgpAQCAtMTU4OCw5ICsxNTkxLDggQEAKICAgICAgICAgICAgICAgICBwcmludCAnPT09PT09JwogICAgICAgICAgICAgICAgIGZvciBrIGluIGgua2V5cygpOiBwcmludCBrICsgJzonLCBoW2tdCiAgICAgICAgICAgICAgICAgcHJpbnQgJz09PT09PScKLSAgICAgICAgICAgIGZwID0gb3BlbihmbiwgJ3JiJykKLSAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKLSAgICAgICAgICAgIGRlbCBmcAorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCiAgICAgICAgICAgICBpZiAnXHInIGluIGRhdGE6CiAgICAgICAgICAgICAgICAgdGFibGUgPSBzdHJpbmcubWFrZXRyYW5zKCIiLCAiIikKICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS50cmFuc2xhdGUodGFibGUsICJcciIpCmRpZmYgLS1naXQgYS9MaWIvdXJsbGliMi5weSBiL0xpYi91cmxsaWIyLnB5CmluZGV4IGNhNzRjOWYuLmRhMDMwZjcgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIyLnB5CisrKyBiL0xpYi91cmxsaWIyLnB5CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCiBmcm9tIHVybGxpYiBpbXBvcnQgKHVud3JhcCwgdW5xdW90ZSwgc3BsaXR0eXBlLCBzcGxpdGhvc3QsIHF1b3RlLAotICAgICBhZGRpbmZvdXJsLCBzcGxpdHBvcnQsCisgICAgIGFkZGluZm91cmwsIHNwbGl0cG9ydCwgc3BsaXR0YWcsCiAgICAgIHNwbGl0YXR0ciwgZnRwd3JhcHBlciwgc3BsaXR1c2VyLCBzcGxpdHBhc3N3ZCwgc3BsaXR2YWx1ZSkKIAogIyBzdXBwb3J0IGZvciBGaWxlSGFuZGxlciwgcHJveGllcyB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzCkBAIC0xOTAsNiArMTkwLDcgQEAKICAgICAgICAgICAgICAgICAgb3JpZ2luX3JlcV9ob3N0PU5vbmUsIHVudmVyaWZpYWJsZT1GYWxzZSk6CiAgICAgICAgICMgdW53cmFwKCc8VVJMOnR5cGU6Ly9ob3N0L3BhdGg+JykgLS0+ICd0eXBlOi8vaG9zdC9wYXRoJwogICAgICAgICBzZWxmLl9fb3JpZ2luYWwgPSB1bndyYXAodXJsKQorICAgICAgICBzZWxmLl9fb3JpZ2luYWwsIGZyYWdtZW50ID0gc3BsaXR0YWcoc2VsZi5fX29yaWdpbmFsKQogICAgICAgICBzZWxmLnR5cGUgPSBOb25lCiAgICAgICAgICMgc2VsZi5fX3JfdHlwZSBpcyB3aGF0J3MgbGVmdCBhZnRlciBkb2luZyB0aGUgc3BsaXR0eXBlCiAgICAgICAgIHNlbGYuaG9zdCA9IE5vbmUKQEAgLTI5OCw4ICsyOTksOSBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgY2xpZW50X3ZlcnNpb24gPSAiUHl0aG9uLXVybGxpYi8lcyIgJSBfX3ZlcnNpb25fXwogICAgICAgICBzZWxmLmFkZGhlYWRlcnMgPSBbKCdVc2VyLWFnZW50JywgY2xpZW50X3ZlcnNpb24pXQotICAgICAgICAjIG1hbmFnZSB0aGUgaW5kaXZpZHVhbCBoYW5kbGVycworICAgICAgICAjIHNlbGYuaGFuZGxlcnMgaXMgcmV0YWluZWQgb25seSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQogICAgICAgICBzZWxmLmhhbmRsZXJzID0gW10KKyAgICAgICAgIyBtYW5hZ2UgdGhlIGluZGl2aWR1YWwgaGFuZGxlcnMKICAgICAgICAgc2VsZi5oYW5kbGVfb3BlbiA9IHt9CiAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yID0ge30KICAgICAgICAgc2VsZi5wcm9jZXNzX3Jlc3BvbnNlID0ge30KQEAgLTM0OSw4ICszNTEsNiBAQAogICAgICAgICAgICAgYWRkZWQgPSBUcnVlCiAKICAgICAgICAgaWYgYWRkZWQ6Ci0gICAgICAgICAgICAjIHRoZSBoYW5kbGVycyBtdXN0IHdvcmsgaW4gYW4gc3BlY2lmaWMgb3JkZXIsIHRoZSBvcmRlcgotICAgICAgICAgICAgIyBpcyBzcGVjaWZpZWQgaW4gYSBIYW5kbGVyIGF0dHJpYnV0ZQogICAgICAgICAgICAgYmlzZWN0Lmluc29ydChzZWxmLmhhbmRsZXJzLCBoYW5kbGVyKQogICAgICAgICAgICAgaGFuZGxlci5hZGRfcGFyZW50KHNlbGYpCiAKQEAgLTQ0OSw3ICs0NDksNyBAQAogICAgICIiIgogICAgIGltcG9ydCB0eXBlcwogICAgIGRlZiBpc2NsYXNzKG9iaik6Ci0gICAgICAgIHJldHVybiBpc2luc3RhbmNlKG9iaiwgdHlwZXMuQ2xhc3NUeXBlKSBvciBoYXNhdHRyKG9iaiwgIl9fYmFzZXNfXyIpCisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKG9iaiwgKHR5cGVzLkNsYXNzVHlwZSwgdHlwZSkpCiAKICAgICBvcGVuZXIgPSBPcGVuZXJEaXJlY3RvcigpCiAgICAgZGVmYXVsdF9jbGFzc2VzID0gW1Byb3h5SGFuZGxlciwgVW5rbm93bkhhbmRsZXIsIEhUVFBIYW5kbGVyLApAQCAtODIxLDYgKzgyMSw5IEBACiAgICAgICAgIHNlbGYuYWRkX3Bhc3N3b3JkID0gc2VsZi5wYXNzd2QuYWRkX3Bhc3N3b3JkCiAgICAgICAgIHNlbGYucmV0cmllZCA9IDAKIAorICAgIGRlZiByZXNldF9yZXRyeV9jb3VudChzZWxmKToKKyAgICAgICAgc2VsZi5yZXRyaWVkID0gMAorCiAgICAgZGVmIGh0dHBfZXJyb3JfYXV0aF9yZXFlZChzZWxmLCBhdXRocmVxLCBob3N0LCByZXEsIGhlYWRlcnMpOgogICAgICAgICAjIGhvc3QgbWF5IGJlIGFuIGF1dGhvcml0eSAod2l0aG91dCB1c2VyaW5mbykgb3IgYSBVUkwgd2l0aCBhbgogICAgICAgICAjIGF1dGhvcml0eQpAQCAtODM5LDcgKzg0MiwxMCBAQAogICAgICAgICAgICAgaWYgbW86CiAgICAgICAgICAgICAgICAgc2NoZW1lLCBxdW90ZSwgcmVhbG0gPSBtby5ncm91cHMoKQogICAgICAgICAgICAgICAgIGlmIHNjaGVtZS5sb3dlcigpID09ICdiYXNpYyc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHJ5X2h0dHBfYmFzaWNfYXV0aChob3N0LCByZXEsIHJlYWxtKQorICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmV0cnlfaHR0cF9iYXNpY19hdXRoKGhvc3QsIHJlcSwgcmVhbG0pCisgICAgICAgICAgICAgICAgICAgIGlmIHJlc3BvbnNlIGFuZCByZXNwb25zZS5jb2RlICE9IDQwMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0cmllZCA9IDAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAKICAgICBkZWYgcmV0cnlfaHR0cF9iYXNpY19hdXRoKHNlbGYsIGhvc3QsIHJlcSwgcmVhbG0pOgogICAgICAgICB1c2VyLCBwdyA9IHNlbGYucGFzc3dkLmZpbmRfdXNlcl9wYXNzd29yZChyZWFsbSwgaG9zdCkKQEAgLTg2MCw4ICs4NjYsMTAgQEAKIAogICAgIGRlZiBodHRwX2Vycm9yXzQwMShzZWxmLCByZXEsIGZwLCBjb2RlLCBtc2csIGhlYWRlcnMpOgogICAgICAgICB1cmwgPSByZXEuZ2V0X2Z1bGxfdXJsKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuaHR0cF9lcnJvcl9hdXRoX3JlcWVkKCd3d3ctYXV0aGVudGljYXRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCwgcmVxLCBoZWFkZXJzKQorICAgICAgICByZXNwb25zZSA9IHNlbGYuaHR0cF9lcnJvcl9hdXRoX3JlcWVkKCd3d3ctYXV0aGVudGljYXRlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsIHJlcSwgaGVhZGVycykKKyAgICAgICAgc2VsZi5yZXNldF9yZXRyeV9jb3VudCgpCisgICAgICAgIHJldHVybiByZXNwb25zZQogCiAKIGNsYXNzIFByb3h5QmFzaWNBdXRoSGFuZGxlcihBYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXIsIEJhc2VIYW5kbGVyKToKQEAgLTg3NCw4ICs4ODIsMTAgQEAKICAgICAgICAgIyBzaG91bGQgbm90LCBSRkMgMzk4NiBzLiAzLjIuMSkgc3VwcG9ydCByZXF1ZXN0cyBmb3IgVVJMcyBjb250YWluaW5nCiAgICAgICAgICMgdXNlcmluZm8uCiAgICAgICAgIGF1dGhvcml0eSA9IHJlcS5nZXRfaG9zdCgpCi0gICAgICAgIHJldHVybiBzZWxmLmh0dHBfZXJyb3JfYXV0aF9yZXFlZCgncHJveHktYXV0aGVudGljYXRlJywKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmh0dHBfZXJyb3JfYXV0aF9yZXFlZCgncHJveHktYXV0aGVudGljYXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eSwgcmVxLCBoZWFkZXJzKQorICAgICAgICBzZWxmLnJlc2V0X3JldHJ5X2NvdW50KCkKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAKIAogZGVmIHJhbmRvbWJ5dGVzKG4pOgpAQCAtMTExNiw4ICsxMTI2LDEwIEBACiAgICAgICAgIGggPSBodHRwX2NsYXNzKGhvc3QsIHRpbWVvdXQ9cmVxLnRpbWVvdXQpICMgd2lsbCBwYXJzZSBob3N0OnBvcnQKICAgICAgICAgaC5zZXRfZGVidWdsZXZlbChzZWxmLl9kZWJ1Z2xldmVsKQogCi0gICAgICAgIGhlYWRlcnMgPSBkaWN0KHJlcS5oZWFkZXJzKQotICAgICAgICBoZWFkZXJzLnVwZGF0ZShyZXEudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgIGhlYWRlcnMgPSBkaWN0KHJlcS51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgaGVhZGVycy51cGRhdGUoZGljdCgoaywgdikgZm9yIGssIHYgaW4gcmVxLmhlYWRlcnMuaXRlbXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGsgbm90IGluIGhlYWRlcnMpKQorCiAgICAgICAgICMgV2Ugd2FudCB0byBtYWtlIGFuIEhUVFAvMS4xIHJlcXVlc3QsIGJ1dCB0aGUgYWRkaW5mb3VybAogICAgICAgICAjIGNsYXNzIGlzbid0IHByZXBhcmVkIHRvIGRlYWwgd2l0aCBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi4KICAgICAgICAgIyBJdCB3aWxsIHRyeSB0byByZWFkIGFsbCByZW1haW5pbmcgZGF0YSBmcm9tIHRoZSBzb2NrZXQsCkBAIC0xMTM2LDExICsxMTQ4LDE0IEBACiAgICAgICAgICAgICAgICAgIyBQcm94eS1BdXRob3JpemF0aW9uIHNob3VsZCBub3QgYmUgc2VudCB0byBvcmlnaW4KICAgICAgICAgICAgICAgICAjIHNlcnZlci4KICAgICAgICAgICAgICAgICBkZWwgaGVhZGVyc1twcm94eV9hdXRoX2hkcl0KLSAgICAgICAgICAgIGguX3NldF90dW5uZWwocmVxLl90dW5uZWxfaG9zdCwgaGVhZGVycz10dW5uZWxfaGVhZGVycykKKyAgICAgICAgICAgIGguc2V0X3R1bm5lbChyZXEuX3R1bm5lbF9ob3N0LCBoZWFkZXJzPXR1bm5lbF9oZWFkZXJzKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGgucmVxdWVzdChyZXEuZ2V0X21ldGhvZCgpLCByZXEuZ2V0X3NlbGVjdG9yKCksIHJlcS5kYXRhLCBoZWFkZXJzKQotICAgICAgICAgICAgciA9IGguZ2V0cmVzcG9uc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHIgPSBoLmdldHJlc3BvbnNlKGJ1ZmZlcmluZz1UcnVlKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogI2J1ZmZlcmluZyBrdyBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgciA9IGguZ2V0cmVzcG9uc2UoKQogICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6ICMgWFhYIHdoYXQgZXJyb3I/CiAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcihlcnIpCiAKQEAgLTEyNTUsNiArMTI3MCwxMiBAQAogCiAgICAgcmV0dXJuIFtwYXJ0LnN0cmlwKCkgZm9yIHBhcnQgaW4gcmVzXQogCitkZWYgX3NhZmVfZ2V0aG9zdGJ5bmFtZShob3N0KToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0KQorICAgIGV4Y2VwdCBzb2NrZXQuZ2FpZXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKIGNsYXNzIEZpbGVIYW5kbGVyKEJhc2VIYW5kbGVyKToKICAgICAjIFVzZSBsb2NhbCBmaWxlIG9yIEZUUCBkZXBlbmRpbmcgb24gZm9ybSBvZiBVUkwKICAgICBkZWYgZmlsZV9vcGVuKHNlbGYsIHJlcSk6CkBAIC0xMjk2LDcgKzEzMTcsNyBAQAogICAgICAgICAgICAgaWYgaG9zdDoKICAgICAgICAgICAgICAgICBob3N0LCBwb3J0ID0gc3BsaXRwb3J0KGhvc3QpCiAgICAgICAgICAgICBpZiBub3QgaG9zdCBvciBcCi0gICAgICAgICAgICAgICAgKG5vdCBwb3J0IGFuZCBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0KSBpbiBzZWxmLmdldF9uYW1lcygpKToKKyAgICAgICAgICAgICAgICAobm90IHBvcnQgYW5kIF9zYWZlX2dldGhvc3RieW5hbWUoaG9zdCkgaW4gc2VsZi5nZXRfbmFtZXMoKSk6CiAgICAgICAgICAgICAgICAgaWYgaG9zdDoKICAgICAgICAgICAgICAgICAgICAgb3JpZ3VybCA9ICdmaWxlOi8vJyArIGhvc3QgKyBmaWxlbmFtZQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xMzI3LDggKzEzNDgsOCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGFzc3dkID0gTm9uZQogICAgICAgICBob3N0ID0gdW5xdW90ZShob3N0KQotICAgICAgICB1c2VyID0gdW5xdW90ZSh1c2VyIG9yICcnKQotICAgICAgICBwYXNzd2QgPSB1bnF1b3RlKHBhc3N3ZCBvciAnJykKKyAgICAgICAgdXNlciA9IHVzZXIgb3IgJycKKyAgICAgICAgcGFzc3dkID0gcGFzc3dkIG9yICcnCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaG9zdCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3QpCmRpZmYgLS1naXQgYS9MaWIvdXJscGFyc2UucHkgYi9MaWIvdXJscGFyc2UucHkKaW5kZXggMjk0NTQ1Yy4uYTAxOWE3YiAxMDA2NDQKLS0tIGEvTGliL3VybHBhcnNlLnB5CisrKyBiL0xpYi91cmxwYXJzZS5weQpAQCAtNSw2ICs1LDkgQEAKIFJGQyAzOTg2IChTVEQ2Nik6ICJVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzIiBieSBULiBCZXJuZXJzLUxlZSwgUi4gRmllbGRpbmcKIGFuZCBMLiAgTWFzaW50ZXIsIEphbnVhcnkgMjAwNS4KIAorUkZDIDI3MzIgOiAiRm9ybWF0IGZvciBMaXRlcmFsIElQdjYgQWRkcmVzc2VzIGluIFVSTCdzIGJ5IFIuSGluZGVuLCBCLkNhcnBlbnRlcgorYW5kIEwuTWFzaW50ZXIsIERlY2VtYmVyIDE5OTkuCisKIFJGQyAyMzk2OiAgIlVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMgKFVSSSkiOiBHZW5lcmljIFN5bnRheCBieSBULgogQmVybmVycy1MZWUsIFIuIEZpZWxkaW5nLCBhbmQgTC4gTWFzaW50ZXIsIEF1Z3VzdCAxOTk4LgogCkBAIC04NSwyMiArODgsMjQgQEAKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBob3N0bmFtZShzZWxmKToKLSAgICAgICAgbmV0bG9jID0gc2VsZi5uZXRsb2MKLSAgICAgICAgaWYgIkAiIGluIG5ldGxvYzoKLSAgICAgICAgICAgIG5ldGxvYyA9IG5ldGxvYy5yc3BsaXQoIkAiLCAxKVsxXQotICAgICAgICBpZiAiOiIgaW4gbmV0bG9jOgotICAgICAgICAgICAgbmV0bG9jID0gbmV0bG9jLnNwbGl0KCI6IiwgMSlbMF0KLSAgICAgICAgcmV0dXJuIG5ldGxvYy5sb3dlcigpIG9yIE5vbmUKKyAgICAgICAgbmV0bG9jID0gc2VsZi5uZXRsb2Muc3BsaXQoJ0AnKVstMV0KKyAgICAgICAgaWYgJ1snIGluIG5ldGxvYyBhbmQgJ10nIGluIG5ldGxvYzoKKyAgICAgICAgICAgIHJldHVybiBuZXRsb2Muc3BsaXQoJ10nKVswXVsxOl0ubG93ZXIoKQorICAgICAgICBlbGlmICc6JyBpbiBuZXRsb2M6CisgICAgICAgICAgICByZXR1cm4gbmV0bG9jLnNwbGl0KCc6JylbMF0ubG93ZXIoKQorICAgICAgICBlbGlmIG5ldGxvYyA9PSAnJzoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbmV0bG9jLmxvd2VyKCkKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwb3J0KHNlbGYpOgotICAgICAgICBuZXRsb2MgPSBzZWxmLm5ldGxvYwotICAgICAgICBpZiAiQCIgaW4gbmV0bG9jOgotICAgICAgICAgICAgbmV0bG9jID0gbmV0bG9jLnJzcGxpdCgiQCIsIDEpWzFdCi0gICAgICAgIGlmICI6IiBpbiBuZXRsb2M6Ci0gICAgICAgICAgICBwb3J0ID0gbmV0bG9jLnNwbGl0KCI6IiwgMSlbMV0KKyAgICAgICAgbmV0bG9jID0gc2VsZi5uZXRsb2Muc3BsaXQoJ0AnKVstMV0uc3BsaXQoJ10nKVstMV0KKyAgICAgICAgaWYgJzonIGluIG5ldGxvYzoKKyAgICAgICAgICAgIHBvcnQgPSBuZXRsb2Muc3BsaXQoJzonKVsxXQogICAgICAgICAgICAgcmV0dXJuIGludChwb3J0LCAxMCkKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKIApAQCAtMTcyLDYgKzE3Nyw5IEBACiAgICAgICAgICAgICB1cmwgPSB1cmxbaSsxOl0KICAgICAgICAgICAgIGlmIHVybFs6Ml0gPT0gJy8vJzoKICAgICAgICAgICAgICAgICBuZXRsb2MsIHVybCA9IF9zcGxpdG5ldGxvYyh1cmwsIDIpCisgICAgICAgICAgICAgICAgaWYgKCgnWycgaW4gbmV0bG9jIGFuZCAnXScgbm90IGluIG5ldGxvYykgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICgnXScgaW4gbmV0bG9jIGFuZCAnWycgbm90IGluIG5ldGxvYykpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIElQdjYgVVJMIikKICAgICAgICAgICAgIGlmIGFsbG93X2ZyYWdtZW50cyBhbmQgJyMnIGluIHVybDoKICAgICAgICAgICAgICAgICB1cmwsIGZyYWdtZW50ID0gdXJsLnNwbGl0KCcjJywgMSkKICAgICAgICAgICAgIGlmICc/JyBpbiB1cmw6CkBAIC0xNzksMTQgKzE4NywxOCBAQAogICAgICAgICAgICAgdiA9IFNwbGl0UmVzdWx0KHNjaGVtZSwgbmV0bG9jLCB1cmwsIHF1ZXJ5LCBmcmFnbWVudCkKICAgICAgICAgICAgIF9wYXJzZV9jYWNoZVtrZXldID0gdgogICAgICAgICAgICAgcmV0dXJuIHYKLSAgICAgICAgZm9yIGMgaW4gdXJsWzppXToKLSAgICAgICAgICAgIGlmIGMgbm90IGluIHNjaGVtZV9jaGFyczoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2NoZW1lLCB1cmwgPSB1cmxbOmldLmxvd2VyKCksIHVybFtpKzE6XQorICAgICAgICBpZiB1cmwuZW5kc3dpdGgoJzonKSBvciBub3QgdXJsW2krMV0uaXNkaWdpdCgpOgorICAgICAgICAgICAgZm9yIGMgaW4gdXJsWzppXToKKyAgICAgICAgICAgICAgICBpZiBjIG5vdCBpbiBzY2hlbWVfY2hhcnM6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNjaGVtZSwgdXJsID0gdXJsWzppXS5sb3dlcigpLCB1cmxbaSsxOl0KIAogICAgIGlmIHVybFs6Ml0gPT0gJy8vJzoKICAgICAgICAgbmV0bG9jLCB1cmwgPSBfc3BsaXRuZXRsb2ModXJsLCAyKQorICAgICAgICBpZiAoKCdbJyBpbiBuZXRsb2MgYW5kICddJyBub3QgaW4gbmV0bG9jKSBvcgorICAgICAgICAgICAgICAgICgnXScgaW4gbmV0bG9jIGFuZCAnWycgbm90IGluIG5ldGxvYykpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBJUHY2IFVSTCIpCiAgICAgaWYgYWxsb3dfZnJhZ21lbnRzIGFuZCBzY2hlbWUgaW4gdXNlc19mcmFnbWVudCBhbmQgJyMnIGluIHVybDoKICAgICAgICAgdXJsLCBmcmFnbWVudCA9IHVybC5zcGxpdCgnIycsIDEpCiAgICAgaWYgc2NoZW1lIGluIHVzZXNfcXVlcnkgYW5kICc/JyBpbiB1cmw6CkBAIC0yNDQsMTQgKzI1Niw5IEBACiAgICAgaWYgcGF0aFs6MV0gPT0gJy8nOgogICAgICAgICByZXR1cm4gdXJsdW5wYXJzZSgoc2NoZW1lLCBuZXRsb2MsIHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsIHF1ZXJ5LCBmcmFnbWVudCkpCi0gICAgaWYgbm90IHBhdGg6CisgICAgaWYgbm90IHBhdGggYW5kIG5vdCBwYXJhbXM6CiAgICAgICAgIHBhdGggPSBicGF0aAotICAgICAgICBpZiBub3QgcGFyYW1zOgotICAgICAgICAgICAgcGFyYW1zID0gYnBhcmFtcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGF0aCA9IHBhdGhbOi0xXQotICAgICAgICAgICAgcmV0dXJuIHVybHVucGFyc2UoKHNjaGVtZSwgbmV0bG9jLCBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsIHF1ZXJ5LCBmcmFnbWVudCkpCisgICAgICAgIHBhcmFtcyA9IGJwYXJhbXMKICAgICAgICAgaWYgbm90IHF1ZXJ5OgogICAgICAgICAgICAgcXVlcnkgPSBicXVlcnkKICAgICAgICAgcmV0dXJuIHVybHVucGFyc2UoKHNjaGVtZSwgbmV0bG9jLCBwYXRoLApAQCAtMjk1LDM1ICszMDIsMzkgQEAKICAgICAgICAgcmV0dXJuIHVybCwgJycKIAogIyB1bnF1b3RlIG1ldGhvZCBmb3IgcGFyc2VfcXMgYW5kIHBhcnNlX3FzbAotIyBDYW5ub3QgdXNlIGRpcmVjdGx5IGZyb20gdXJsbGliIGFzIGl0IHdvdWxkIGNyZWF0ZSBjaXJjdWxhciByZWZlcmVuY2UuCi0jIHVybGxpYiB1c2VzIHVybHBhcnNlIG1ldGhvZHMgKCB1cmxqb2luKQotCisjIENhbm5vdCB1c2UgZGlyZWN0bHkgZnJvbSB1cmxsaWIgYXMgaXQgd291bGQgY3JlYXRlIGEgY2lyY3VsYXIgcmVmZXJlbmNlCisjIGJlY2F1c2UgdXJsbGliIHVzZXMgdXJscGFyc2UgbWV0aG9kcyAodXJsam9pbikuICBJZiB5b3UgdXBkYXRlIHRoaXMgZnVuY3Rpb24sCisjIHVwZGF0ZSBpdCBhbHNvIGluIHVybGxpYi4gIFRoaXMgY29kZSBkdXBsaWNhdGlvbiBkb2VzIG5vdCBleGlzdGluIGluIFB5dGhvbjMuCiAKIF9oZXhkaWcgPSAnMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZicKLV9oZXh0b2NociA9IGRpY3QoKGErYiwgY2hyKGludChhK2IsMTYpKSkgZm9yIGEgaW4gX2hleGRpZyBmb3IgYiBpbiBfaGV4ZGlnKQorX2hleHRvY2hyID0gZGljdCgoYStiLCBjaHIoaW50KGErYiwxNikpKQorICAgICAgICAgICAgICAgICBmb3IgYSBpbiBfaGV4ZGlnIGZvciBiIGluIF9oZXhkaWcpCiAKIGRlZiB1bnF1b3RlKHMpOgogICAgICIiInVucXVvdGUoJ2FiYyUyMGRlZicpIC0+ICdhYmMgZGVmJy4iIiIKICAgICByZXMgPSBzLnNwbGl0KCclJykKLSAgICBmb3IgaSBpbiB4cmFuZ2UoMSwgbGVuKHJlcykpOgotICAgICAgICBpdGVtID0gcmVzW2ldCisgICAgIyBmYXN0cGF0aAorICAgIGlmIGxlbihyZXMpID09IDE6CisgICAgICAgIHJldHVybiBzCisgICAgcyA9IHJlc1swXQorICAgIGZvciBpdGVtIGluIHJlc1sxOl06CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlc1tpXSA9IF9oZXh0b2NocltpdGVtWzoyXV0gKyBpdGVtWzI6XQorICAgICAgICAgICAgcyArPSBfaGV4dG9jaHJbaXRlbVs6Ml1dICsgaXRlbVsyOl0KICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmVzW2ldID0gJyUnICsgaXRlbQorICAgICAgICAgICAgcyArPSAnJScgKyBpdGVtCiAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6Ci0gICAgICAgICAgICByZXNbaV0gPSB1bmljaHIoaW50KGl0ZW1bOjJdLCAxNikpICsgaXRlbVsyOl0KLSAgICByZXR1cm4gIiIuam9pbihyZXMpCisgICAgICAgICAgICBzICs9IHVuaWNocihpbnQoaXRlbVs6Ml0sIDE2KSkgKyBpdGVtWzI6XQorICAgIHJldHVybiBzCiAKIGRlZiBwYXJzZV9xcyhxcywga2VlcF9ibGFua192YWx1ZXM9MCwgc3RyaWN0X3BhcnNpbmc9MCk6CiAgICAgIiIiUGFyc2UgYSBxdWVyeSBnaXZlbiBhcyBhIHN0cmluZyBhcmd1bWVudC4KIAogICAgICAgICBBcmd1bWVudHM6CiAKLSAgICAgICAgcXM6IFVSTC1lbmNvZGVkIHF1ZXJ5IHN0cmluZyB0byBiZSBwYXJzZWQKKyAgICAgICAgcXM6IHBlcmNlbnQtZW5jb2RlZCBxdWVyeSBzdHJpbmcgdG8gYmUgcGFyc2VkCiAKICAgICAgICAga2VlcF9ibGFua192YWx1ZXM6IGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGJsYW5rIHZhbHVlcyBpbgotICAgICAgICAgICAgVVJMIGVuY29kZWQgcXVlcmllcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFuayBzdHJpbmdzLgorICAgICAgICAgICAgcGVyY2VudC1lbmNvZGVkIHF1ZXJpZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmxhbmsgc3RyaW5ncy4KICAgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBibGFua3Mgc2hvdWxkIGJlIHJldGFpbmVkIGFzCiAgICAgICAgICAgICBibGFuayBzdHJpbmdzLiAgVGhlIGRlZmF1bHQgZmFsc2UgdmFsdWUgaW5kaWNhdGVzIHRoYXQKICAgICAgICAgICAgIGJsYW5rIHZhbHVlcyBhcmUgdG8gYmUgaWdub3JlZCBhbmQgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUKQEAgLTM0NiwxMCArMzU3LDEwIEBACiAKICAgICBBcmd1bWVudHM6CiAKLSAgICBxczogVVJMLWVuY29kZWQgcXVlcnkgc3RyaW5nIHRvIGJlIHBhcnNlZAorICAgIHFzOiBwZXJjZW50LWVuY29kZWQgcXVlcnkgc3RyaW5nIHRvIGJlIHBhcnNlZAogCiAgICAga2VlcF9ibGFua192YWx1ZXM6IGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGJsYW5rIHZhbHVlcyBpbgotICAgICAgICBVUkwgZW5jb2RlZCBxdWVyaWVzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuICBBCisgICAgICAgIHBlcmNlbnQtZW5jb2RlZCBxdWVyaWVzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuICBBCiAgICAgICAgIHRydWUgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYmxhbmtzIHNob3VsZCBiZSByZXRhaW5lZCBhcyBibGFuawogICAgICAgICBzdHJpbmdzLiAgVGhlIGRlZmF1bHQgZmFsc2UgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYmxhbmsgdmFsdWVzCiAgICAgICAgIGFyZSB0byBiZSBpZ25vcmVkIGFuZCB0cmVhdGVkIGFzIGlmIHRoZXkgd2VyZSAgbm90IGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvTGliL3V1LnB5IGIvTGliL3V1LnB5CmluZGV4IGRhODlmNzIuLmY4ZmE0YzQgMTAwNzU1Ci0tLSBhL0xpYi91dS5weQorKysgYi9MaWIvdXUucHkKQEAgLTQ0LDQwICs0NCw0NyBAQAogICAgICMKICAgICAjIElmIGluX2ZpbGUgaXMgYSBwYXRobmFtZSBvcGVuIGl0IGFuZCBjaGFuZ2UgZGVmYXVsdHMKICAgICAjCi0gICAgaWYgaW5fZmlsZSA9PSAnLSc6Ci0gICAgICAgIGluX2ZpbGUgPSBzeXMuc3RkaW4KLSAgICBlbGlmIGlzaW5zdGFuY2UoaW5fZmlsZSwgYmFzZXN0cmluZyk6CisgICAgb3BlbmVkX2ZpbGVzID0gW10KKyAgICB0cnk6CisgICAgICAgIGlmIGluX2ZpbGUgPT0gJy0nOgorICAgICAgICAgICAgaW5fZmlsZSA9IHN5cy5zdGRpbgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoaW5fZmlsZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoaW5fZmlsZSkKKyAgICAgICAgICAgIGlmIG1vZGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBvcy5zdGF0KGluX2ZpbGUpLnN0X21vZGUKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGluX2ZpbGUgPSBvcGVuKGluX2ZpbGUsICdyYicpCisgICAgICAgICAgICBvcGVuZWRfZmlsZXMuYXBwZW5kKGluX2ZpbGUpCisgICAgICAgICMKKyAgICAgICAgIyBPcGVuIG91dF9maWxlIGlmIGl0IGlzIGEgcGF0aG5hbWUKKyAgICAgICAgIworICAgICAgICBpZiBvdXRfZmlsZSA9PSAnLSc6CisgICAgICAgICAgICBvdXRfZmlsZSA9IHN5cy5zdGRvdXQKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG91dF9maWxlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIG91dF9maWxlID0gb3BlbihvdXRfZmlsZSwgJ3diJykKKyAgICAgICAgICAgIG9wZW5lZF9maWxlcy5hcHBlbmQob3V0X2ZpbGUpCisgICAgICAgICMKKyAgICAgICAgIyBTZXQgZGVmYXVsdHMgZm9yIG5hbWUgYW5kIG1vZGUKKyAgICAgICAgIwogICAgICAgICBpZiBuYW1lIGlzIE5vbmU6Ci0gICAgICAgICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShpbl9maWxlKQorICAgICAgICAgICAgbmFtZSA9ICctJwogICAgICAgICBpZiBtb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbW9kZSA9IG9zLnN0YXQoaW5fZmlsZSkuc3RfbW9kZQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgaW5fZmlsZSA9IG9wZW4oaW5fZmlsZSwgJ3JiJykKLSAgICAjCi0gICAgIyBPcGVuIG91dF9maWxlIGlmIGl0IGlzIGEgcGF0aG5hbWUKLSAgICAjCi0gICAgaWYgb3V0X2ZpbGUgPT0gJy0nOgotICAgICAgICBvdXRfZmlsZSA9IHN5cy5zdGRvdXQKLSAgICBlbGlmIGlzaW5zdGFuY2Uob3V0X2ZpbGUsIGJhc2VzdHJpbmcpOgotICAgICAgICBvdXRfZmlsZSA9IG9wZW4ob3V0X2ZpbGUsICd3JykKLSAgICAjCi0gICAgIyBTZXQgZGVmYXVsdHMgZm9yIG5hbWUgYW5kIG1vZGUKLSAgICAjCi0gICAgaWYgbmFtZSBpcyBOb25lOgotICAgICAgICBuYW1lID0gJy0nCi0gICAgaWYgbW9kZSBpcyBOb25lOgotICAgICAgICBtb2RlID0gMDY2NgotICAgICMKLSAgICAjIFdyaXRlIHRoZSBkYXRhCi0gICAgIwotICAgIG91dF9maWxlLndyaXRlKCdiZWdpbiAlbyAlc1xuJyAlICgobW9kZSYwNzc3KSxuYW1lKSkKLSAgICBkYXRhID0gaW5fZmlsZS5yZWFkKDQ1KQotICAgIHdoaWxlIGxlbihkYXRhKSA+IDA6Ci0gICAgICAgIG91dF9maWxlLndyaXRlKGJpbmFzY2lpLmIyYV91dShkYXRhKSkKKyAgICAgICAgICAgIG1vZGUgPSAwNjY2CisgICAgICAgICMKKyAgICAgICAgIyBXcml0ZSB0aGUgZGF0YQorICAgICAgICAjCisgICAgICAgIG91dF9maWxlLndyaXRlKCdiZWdpbiAlbyAlc1xuJyAlICgobW9kZSYwNzc3KSxuYW1lKSkKICAgICAgICAgZGF0YSA9IGluX2ZpbGUucmVhZCg0NSkKLSAgICBvdXRfZmlsZS53cml0ZSgnIFxuZW5kXG4nKQorICAgICAgICB3aGlsZSBsZW4oZGF0YSkgPiAwOgorICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoYmluYXNjaWkuYjJhX3V1KGRhdGEpKQorICAgICAgICAgICAgZGF0YSA9IGluX2ZpbGUucmVhZCg0NSkKKyAgICAgICAgb3V0X2ZpbGUud3JpdGUoJyBcbmVuZFxuJykKKyAgICBmaW5hbGx5OgorICAgICAgICBmb3IgZiBpbiBvcGVuZWRfZmlsZXM6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAogCiBkZWYgZGVjb2RlKGluX2ZpbGUsIG91dF9maWxlPU5vbmUsIG1vZGU9Tm9uZSwgcXVpZXQ9MCk6CkBAIC04NSw2NSArOTIsNjggQEAKICAgICAjCiAgICAgIyBPcGVuIHRoZSBpbnB1dCBmaWxlLCBpZiBuZWVkZWQuCiAgICAgIworICAgIG9wZW5lZF9maWxlcyA9IFtdCiAgICAgaWYgaW5fZmlsZSA9PSAnLSc6CiAgICAgICAgIGluX2ZpbGUgPSBzeXMuc3RkaW4KICAgICBlbGlmIGlzaW5zdGFuY2UoaW5fZmlsZSwgYmFzZXN0cmluZyk6CiAgICAgICAgIGluX2ZpbGUgPSBvcGVuKGluX2ZpbGUpCi0gICAgIwotICAgICMgUmVhZCB1bnRpbCBhIGJlZ2luIGlzIGVuY291bnRlcmVkIG9yIHdlJ3ZlIGV4aGF1c3RlZCB0aGUgZmlsZQotICAgICMKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBoZHIgPSBpbl9maWxlLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IGhkcjoKLSAgICAgICAgICAgIHJhaXNlIEVycm9yKCdObyB2YWxpZCBiZWdpbiBsaW5lIGZvdW5kIGluIGlucHV0IGZpbGUnKQotICAgICAgICBpZiBub3QgaGRyLnN0YXJ0c3dpdGgoJ2JlZ2luJyk6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBoZHJmaWVsZHMgPSBoZHIuc3BsaXQoJyAnLCAyKQotICAgICAgICBpZiBsZW4oaGRyZmllbGRzKSA9PSAzIGFuZCBoZHJmaWVsZHNbMF0gPT0gJ2JlZ2luJzoKKyAgICAgICAgb3BlbmVkX2ZpbGVzLmFwcGVuZChpbl9maWxlKQorICAgIHRyeToKKyAgICAgICAgIworICAgICAgICAjIFJlYWQgdW50aWwgYSBiZWdpbiBpcyBlbmNvdW50ZXJlZCBvciB3ZSd2ZSBleGhhdXN0ZWQgdGhlIGZpbGUKKyAgICAgICAgIworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaGRyID0gaW5fZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgaGRyOgorICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCdObyB2YWxpZCBiZWdpbiBsaW5lIGZvdW5kIGluIGlucHV0IGZpbGUnKQorICAgICAgICAgICAgaWYgbm90IGhkci5zdGFydHN3aXRoKCdiZWdpbicpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBoZHJmaWVsZHMgPSBoZHIuc3BsaXQoJyAnLCAyKQorICAgICAgICAgICAgaWYgbGVuKGhkcmZpZWxkcykgPT0gMyBhbmQgaGRyZmllbGRzWzBdID09ICdiZWdpbic6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpbnQoaGRyZmllbGRzWzFdLCA4KQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG91dF9maWxlIGlzIE5vbmU6CisgICAgICAgICAgICBvdXRfZmlsZSA9IGhkcmZpZWxkc1syXS5yc3RyaXAoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3V0X2ZpbGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCdDYW5ub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGU6ICVzJyAlIG91dF9maWxlKQorICAgICAgICBpZiBtb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBtb2RlID0gaW50KGhkcmZpZWxkc1sxXSwgOCkKKyAgICAgICAgIworICAgICAgICAjIE9wZW4gdGhlIG91dHB1dCBmaWxlCisgICAgICAgICMKKyAgICAgICAgaWYgb3V0X2ZpbGUgPT0gJy0nOgorICAgICAgICAgICAgb3V0X2ZpbGUgPSBzeXMuc3Rkb3V0CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvdXRfZmlsZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBmcCA9IG9wZW4ob3V0X2ZpbGUsICd3YicpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW50KGhkcmZpZWxkc1sxXSwgOCkKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgb3MucGF0aC5jaG1vZChvdXRfZmlsZSwgbW9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgaWYgb3V0X2ZpbGUgaXMgTm9uZToKLSAgICAgICAgb3V0X2ZpbGUgPSBoZHJmaWVsZHNbMl0ucnN0cmlwKCkKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3V0X2ZpbGUpOgotICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ0Nhbm5vdCBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZTogJXMnICUgb3V0X2ZpbGUpCi0gICAgaWYgbW9kZSBpcyBOb25lOgotICAgICAgICBtb2RlID0gaW50KGhkcmZpZWxkc1sxXSwgOCkKLSAgICAjCi0gICAgIyBPcGVuIHRoZSBvdXRwdXQgZmlsZQotICAgICMKLSAgICBvcGVuZWQgPSBGYWxzZQotICAgIGlmIG91dF9maWxlID09ICctJzoKLSAgICAgICAgb3V0X2ZpbGUgPSBzeXMuc3Rkb3V0Ci0gICAgZWxpZiBpc2luc3RhbmNlKG91dF9maWxlLCBiYXNlc3RyaW5nKToKLSAgICAgICAgZnAgPSBvcGVuKG91dF9maWxlLCAnd2InKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5wYXRoLmNobW9kKG91dF9maWxlLCBtb2RlKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIG91dF9maWxlID0gZnAKLSAgICAgICAgb3BlbmVkID0gVHJ1ZQotICAgICMKLSAgICAjIE1haW4gZGVjb2RpbmcgbG9vcAotICAgICMKLSAgICBzID0gaW5fZmlsZS5yZWFkbGluZSgpCi0gICAgd2hpbGUgcyBhbmQgcy5zdHJpcCgpICE9ICdlbmQnOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkYXRhID0gYmluYXNjaWkuYTJiX3V1KHMpCi0gICAgICAgIGV4Y2VwdCBiaW5hc2NpaS5FcnJvciwgdjoKLSAgICAgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgYnJva2VuIHV1ZW5jb2RlcnMgYnkgL0ZyZWRyaWsgTHVuZGgKLSAgICAgICAgICAgIG5ieXRlcyA9ICgoKG9yZChzWzBdKS0zMikgJiA2MykgKiA0ICsgNSkgLy8gMwotICAgICAgICAgICAgZGF0YSA9IGJpbmFzY2lpLmEyYl91dShzWzpuYnl0ZXNdKQotICAgICAgICAgICAgaWYgbm90IHF1aWV0OgotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIldhcm5pbmc6ICVzXG4iICUgdikKLSAgICAgICAgb3V0X2ZpbGUud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIG91dF9maWxlID0gZnAKKyAgICAgICAgICAgIG9wZW5lZF9maWxlcy5hcHBlbmQob3V0X2ZpbGUpCisgICAgICAgICMKKyAgICAgICAgIyBNYWluIGRlY29kaW5nIGxvb3AKKyAgICAgICAgIwogICAgICAgICBzID0gaW5fZmlsZS5yZWFkbGluZSgpCi0gICAgaWYgbm90IHM6Ci0gICAgICAgIHJhaXNlIEVycm9yKCdUcnVuY2F0ZWQgaW5wdXQgZmlsZScpCi0gICAgaWYgb3BlbmVkOgotICAgICAgICBvdXRfZmlsZS5jbG9zZSgpCisgICAgICAgIHdoaWxlIHMgYW5kIHMuc3RyaXAoKSAhPSAnZW5kJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhID0gYmluYXNjaWkuYTJiX3V1KHMpCisgICAgICAgICAgICBleGNlcHQgYmluYXNjaWkuRXJyb3IsIHY6CisgICAgICAgICAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBicm9rZW4gdXVlbmNvZGVycyBieSAvRnJlZHJpayBMdW5kaAorICAgICAgICAgICAgICAgIG5ieXRlcyA9ICgoKG9yZChzWzBdKS0zMikgJiA2MykgKiA0ICsgNSkgLy8gMworICAgICAgICAgICAgICAgIGRhdGEgPSBiaW5hc2NpaS5hMmJfdXUoc1s6bmJ5dGVzXSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIldhcm5pbmc6ICVzXG4iICUgdikKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKGRhdGEpCisgICAgICAgICAgICBzID0gaW5fZmlsZS5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ1RydW5jYXRlZCBpbnB1dCBmaWxlJykKKyAgICBmaW5hbGx5OgorICAgICAgICBmb3IgZiBpbiBvcGVuZWRfZmlsZXM6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAogZGVmIHRlc3QoKToKICAgICAiIiJ1dWVuY29kZS91dWRlY29kZSBtYWluIHByb2dyYW0iIiIKZGlmZiAtLWdpdCBhL0xpYi91dWlkLnB5IGIvTGliL3V1aWQucHkKaW5kZXggMjU5ZjFiYi4uZmRkMGM1YyAxMDA2NDQKLS0tIGEvTGliL3V1aWQucHkKKysrIGIvTGliL3V1aWQucHkKQEAgLTMwMiwxNSArMzAyLDE1IEBACiAgICAgICAgICAgICAjIExDX0FMTCB0byBnZXQgRW5nbGlzaCBvdXRwdXQsIDI+L2Rldi9udWxsIHRvCiAgICAgICAgICAgICAjIHByZXZlbnQgb3V0cHV0IG9uIHN0ZGVycgogICAgICAgICAgICAgY21kID0gJ0xDX0FMTD1DICVzICVzIDI+L2Rldi9udWxsJyAlIChleGVjdXRhYmxlLCBhcmdzKQotICAgICAgICAgICAgcGlwZSA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgICAgIHdpdGggb3MucG9wZW4oY21kKSBhcyBwaXBlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHBpcGU6CisgICAgICAgICAgICAgICAgICAgIHdvcmRzID0gbGluZS5sb3dlcigpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHdvcmRzKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB3b3Jkc1tpXSBpbiBod19pZGVudGlmaWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1tnZXRfaW5kZXgoaSldLnJlcGxhY2UoJzonLCAnJyksIDE2KQogICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKLSAgICAgICAgICAgIHdvcmRzID0gbGluZS5sb3dlcigpLnNwbGl0KCkKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih3b3JkcykpOgotICAgICAgICAgICAgICAgIGlmIHdvcmRzW2ldIGluIGh3X2lkZW50aWZpZXJzOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50KHdvcmRzW2dldF9pbmRleChpKV0ucmVwbGFjZSgnOicsICcnKSwgMTYpCiAgICAgcmV0dXJuIE5vbmUKIAogZGVmIF9pZmNvbmZpZ19nZXRub2RlKCk6CkBAIC0zNTMsMTAgKzM1MywxMyBAQAogICAgICAgICAgICAgcGlwZSA9IG9zLnBvcGVuKG9zLnBhdGguam9pbihkaXIsICdpcGNvbmZpZycpICsgJyAvYWxsJykKICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgotICAgICAgICAgICAgdmFsdWUgPSBsaW5lLnNwbGl0KCc6JylbLTFdLnN0cmlwKCkubG93ZXIoKQotICAgICAgICAgICAgaWYgcmUubWF0Y2goJyhbMC05YS1mXVswLTlhLWZdLSl7NX1bMC05YS1mXVswLTlhLWZdJywgdmFsdWUpOgotICAgICAgICAgICAgICAgIHJldHVybiBpbnQodmFsdWUucmVwbGFjZSgnLScsICcnKSwgMTYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZS5zcGxpdCgnOicpWy0xXS5zdHJpcCgpLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBpZiByZS5tYXRjaCgnKFswLTlhLWZdWzAtOWEtZl0tKXs1fVswLTlhLWZdWzAtOWEtZl0nLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnQodmFsdWUucmVwbGFjZSgnLScsICcnKSwgMTYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBwaXBlLmNsb3NlKCkKIAogZGVmIF9uZXRiaW9zX2dldG5vZGUoKToKICAgICAiIiJHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb24gV2luZG93cyB1c2luZyBOZXRCSU9TIGNhbGxzLgpkaWZmIC0tZ2l0IGEvTGliL3dhcm5pbmdzLnB5IGIvTGliL3dhcm5pbmdzLnB5CmluZGV4IGEwNzFhYTEuLjA4YjcwYWYgMTAwNjQ0Ci0tLSBhL0xpYi93YXJuaW5ncy5weQorKysgYi9MaWIvd2FybmluZ3MucHkKQEAgLTQ2LDcgKzQ2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgYXBwZW5kPTApOgogICAgICIiIkluc2VydCBhbiBlbnRyeSBpbnRvIHRoZSBsaXN0IG9mIHdhcm5pbmdzIGZpbHRlcnMgKGF0IHRoZSBmcm9udCkuCiAKLSAgICBVc2UgYXNzZXJ0aW9ucyB0byBjaGVjayB0aGF0IGFsbCBhcmd1bWVudHMgaGF2ZSB0aGUgcmlnaHQgdHlwZS4iIiIKKyAgICAnYWN0aW9uJyAtLSBvbmUgb2YgImVycm9yIiwgImlnbm9yZSIsICJhbHdheXMiLCAiZGVmYXVsdCIsICJtb2R1bGUiLAorICAgICAgICAgICAgICAgIG9yICJvbmNlIgorICAgICdtZXNzYWdlJyAtLSBhIHJlZ2V4IHRoYXQgdGhlIHdhcm5pbmcgbWVzc2FnZSBtdXN0IG1hdGNoCisgICAgJ2NhdGVnb3J5JyAtLSBhIGNsYXNzIHRoYXQgdGhlIHdhcm5pbmcgbXVzdCBiZSBhIHN1YmNsYXNzIG9mCisgICAgJ21vZHVsZScgLS0gYSByZWdleCB0aGF0IHRoZSBtb2R1bGUgbmFtZSBtdXN0IG1hdGNoCisgICAgJ2xpbmVubycgLS0gYW4gaW50ZWdlciBsaW5lIG51bWJlciwgMCBtYXRjaGVzIGFsbCB3YXJuaW5ncworICAgICdhcHBlbmQnIC0tIGlmIHRydWUsIGFwcGVuZCB0byB0aGUgbGlzdCBvZiBmaWx0ZXJzCisgICAgIiIiCiAgICAgaW1wb3J0IHJlCiAgICAgYXNzZXJ0IGFjdGlvbiBpbiAoImVycm9yIiwgImlnbm9yZSIsICJhbHdheXMiLCAiZGVmYXVsdCIsICJtb2R1bGUiLAogICAgICAgICAgICAgICAgICAgICAgICJvbmNlIiksICJpbnZhbGlkIGFjdGlvbjogJXIiICUgKGFjdGlvbiwpCkBAIC02OCw2ICs3NSwxMSBAQAogICAgICIiIkluc2VydCBhIHNpbXBsZSBlbnRyeSBpbnRvIHRoZSBsaXN0IG9mIHdhcm5pbmdzIGZpbHRlcnMgKGF0IHRoZSBmcm9udCkuCiAKICAgICBBIHNpbXBsZSBmaWx0ZXIgbWF0Y2hlcyBhbGwgbW9kdWxlcyBhbmQgbWVzc2FnZXMuCisgICAgJ2FjdGlvbicgLS0gb25lIG9mICJlcnJvciIsICJpZ25vcmUiLCAiYWx3YXlzIiwgImRlZmF1bHQiLCAibW9kdWxlIiwKKyAgICAgICAgICAgICAgICBvciAib25jZSIKKyAgICAnY2F0ZWdvcnknIC0tIGEgY2xhc3MgdGhhdCB0aGUgd2FybmluZyBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YKKyAgICAnbGluZW5vJyAtLSBhbiBpbnRlZ2VyIGxpbmUgbnVtYmVyLCAwIG1hdGNoZXMgYWxsIHdhcm5pbmdzCisgICAgJ2FwcGVuZCcgLS0gaWYgdHJ1ZSwgYXBwZW5kIHRvIHRoZSBsaXN0IG9mIGZpbHRlcnMKICAgICAiIiIKICAgICBhc3NlcnQgYWN0aW9uIGluICgiZXJyb3IiLCAiaWdub3JlIiwgImFsd2F5cyIsICJkZWZhdWx0IiwgIm1vZHVsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIm9uY2UiKSwgImludmFsaWQgYWN0aW9uOiAlciIgJSAoYWN0aW9uLCkKQEAgLTI2MiwyNCArMjc0LDYgQEAKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAgICAiVW5yZWNvZ25pemVkIGFjdGlvbiAoJXIpIGluIHdhcm5pbmdzLmZpbHRlcnM6XG4gJXMiICUKICAgICAgICAgICAgICAgKGFjdGlvbiwgaXRlbSkpCi0gICAgIyBXYXJuIGlmIHNob3d3YXJuaW5nKCkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgJ2xpbmUnIGFyZ3VtZW50LgotICAgICMgRG9uJ3QgdXNlICdpbnNwZWN0JyBhcyBpdCByZWxpZXMgb24gYW4gZXh0ZW5zaW9uIG1vZHVsZSwgd2hpY2ggYnJlYWsgdGhlCi0gICAgIyBidWlsZCB0aGFua3MgdG8gJ3dhcm5pbmdzJyBiZWluZyBpbXBvcnRlZCBieSBzZXR1cC5weS4KLSAgICBmeG5fY29kZSA9IE5vbmUKLSAgICBpZiBoYXNhdHRyKHNob3d3YXJuaW5nLCAnZnVuY19jb2RlJyk6Ci0gICAgICAgIGZ4bl9jb2RlID0gc2hvd3dhcm5pbmcuZnVuY19jb2RlCi0gICAgZWxpZiBoYXNhdHRyKHNob3d3YXJuaW5nLCAnX19mdW5jX18nKToKLSAgICAgICAgZnhuX2NvZGUgPSBzaG93d2FybmluZy5fX2Z1bmNfXy5mdW5jX2NvZGUKLSAgICBpZiBmeG5fY29kZToKLSAgICAgICAgYXJncyA9IGZ4bl9jb2RlLmNvX3Zhcm5hbWVzWzpmeG5fY29kZS5jb19hcmdjb3VudF0KLSAgICAgICAgQ09fVkFSQVJHUyA9IDB4NAotICAgICAgICBpZiAnbGluZScgbm90IGluIGFyZ3MgYW5kIG5vdCBmeG5fY29kZS5jb19mbGFncyAmIENPX1ZBUkFSR1M6Ci0gICAgICAgICAgICBzaG93d2FybmluZ19tc2cgPSAoImZ1bmN0aW9ucyBvdmVycmlkaW5nIHdhcm5pbmdzLnNob3d3YXJuaW5nKCkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBzdXBwb3J0IHRoZSAnbGluZScgYXJndW1lbnQiKQotICAgICAgICAgICAgaWYgbWVzc2FnZSA9PSBzaG93d2FybmluZ19tc2c6Ci0gICAgICAgICAgICAgICAgX3Nob3dfd2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd2FybihzaG93d2FybmluZ19tc2csIERlcHJlY2F0aW9uV2FybmluZykKICAgICAjIFByaW50IG1lc3NhZ2UgYW5kIGNvbnRleHQKICAgICBzaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubykKIApAQCAtMzg5LDggKzM4MywxMiBAQAogIyBNb2R1bGUgaW5pdGlhbGl6YXRpb24KIF9wcm9jZXNzb3B0aW9ucyhzeXMud2Fybm9wdGlvbnMpCiBpZiBub3QgX3dhcm5pbmdzX2RlZmF1bHRzOgotICAgIHNpbXBsZWZpbHRlcigiaWdub3JlIiwgY2F0ZWdvcnk9UGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgYXBwZW5kPTEpCi0gICAgc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBjYXRlZ29yeT1JbXBvcnRXYXJuaW5nLCBhcHBlbmQ9MSkKKyAgICBzaWxlbmNlID0gW0ltcG9ydFdhcm5pbmcsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmddCisgICAgIyBEb24ndCBzaWxlbmNlIERlcHJlY2F0aW9uV2FybmluZyBpZiAtMyBvciAtUSB3YXMgdXNlZC4KKyAgICBpZiBub3Qgc3lzLnB5M2t3YXJuaW5nIGFuZCBub3Qgc3lzLmZsYWdzLmRpdmlzaW9uX3dhcm5pbmc6CisgICAgICAgIHNpbGVuY2UuYXBwZW5kKERlcHJlY2F0aW9uV2FybmluZykKKyAgICBmb3IgY2xzIGluIHNpbGVuY2U6CisgICAgICAgIHNpbXBsZWZpbHRlcigiaWdub3JlIiwgY2F0ZWdvcnk9Y2xzKQogICAgIGJ5dGVzX3dhcm5pbmcgPSBzeXMuZmxhZ3MuYnl0ZXNfd2FybmluZwogICAgIGlmIGJ5dGVzX3dhcm5pbmcgPiAxOgogICAgICAgICBieXRlc19hY3Rpb24gPSAiZXJyb3IiCmRpZmYgLS1naXQgYS9MaWIvd2F2ZS5weSBiL0xpYi93YXZlLnB5CmluZGV4IDcxOGUxZWIuLjIwMTZhMmEgMTAwNjQ0Ci0tLSBhL0xpYi93YXZlLnB5CisrKyBiL0xpYi93YXZlLnB5CkBAIC0zMTksNiArMzE5LDcgQEAKICAgICAgICAgc2VsZi5fbmZyYW1lc3dyaXR0ZW4gPSAwCiAgICAgICAgIHNlbGYuX2RhdGF3cml0dGVuID0gMAogICAgICAgICBzZWxmLl9kYXRhbGVuZ3RoID0gMAorICAgICAgICBzZWxmLl9oZWFkZXJ3cml0dGVuID0gRmFsc2UKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTQ0OSw3ICs0NTAsNyBAQAogICAgICMKIAogICAgIGRlZiBfZW5zdXJlX2hlYWRlcl93cml0dGVuKHNlbGYsIGRhdGFzaXplKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2RhdGF3cml0dGVuOgorICAgICAgICBpZiBub3Qgc2VsZi5faGVhZGVyd3JpdHRlbjoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9uY2hhbm5lbHM6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsICcjIGNoYW5uZWxzIG5vdCBzcGVjaWZpZWQnCiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fc2FtcHdpZHRoOgpAQCAtNDU5LDYgKzQ2MCw3IEBACiAgICAgICAgICAgICBzZWxmLl93cml0ZV9oZWFkZXIoZGF0YXNpemUpCiAKICAgICBkZWYgX3dyaXRlX2hlYWRlcihzZWxmLCBpbml0bGVuZ3RoKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9oZWFkZXJ3cml0dGVuCiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJ1JJRkYnKQogICAgICAgICBpZiBub3Qgc2VsZi5fbmZyYW1lczoKICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMgPSBpbml0bGVuZ3RoIC8gKHNlbGYuX25jaGFubmVscyAqIHNlbGYuX3NhbXB3aWR0aCkKQEAgLTQ3Miw4ICs0NzQsMTAgQEAKICAgICAgICAgICAgIHNlbGYuX3NhbXB3aWR0aCAqIDgsICdkYXRhJykpCiAgICAgICAgIHNlbGYuX2RhdGFfbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3RydWN0LnBhY2soJzxsJywgc2VsZi5fZGF0YWxlbmd0aCkpCisgICAgICAgIHNlbGYuX2hlYWRlcndyaXR0ZW4gPSBUcnVlCiAKICAgICBkZWYgX3BhdGNoaGVhZGVyKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5faGVhZGVyd3JpdHRlbgogICAgICAgICBpZiBzZWxmLl9kYXRhd3JpdHRlbiA9PSBzZWxmLl9kYXRhbGVuZ3RoOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGN1cnBvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCmRpZmYgLS1naXQgYS9MaWIvd2Vha3JlZi5weSBiL0xpYi93ZWFrcmVmLnB5CmluZGV4IDc4Yjc0YWQuLjg4YzYwZTcgMTAwNjQ0Ci0tLSBhL0xpYi93ZWFrcmVmLnB5CisrKyBiL0xpYi93ZWFrcmVmLnB5CkBAIC0yMCw2ICsyMCw4IEBACiAgICAgIFByb3h5VHlwZSwKICAgICAgUmVmZXJlbmNlVHlwZSkKIAorZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldAorCiBmcm9tIGV4Y2VwdGlvbnMgaW1wb3J0IFJlZmVyZW5jZUVycm9yCiAKIApAQCAtMjcsNyArMjksNyBAQAogCiBfX2FsbF9fID0gWyJyZWYiLCAicHJveHkiLCAiZ2V0d2Vha3JlZmNvdW50IiwgImdldHdlYWtyZWZzIiwKICAgICAgICAgICAgIldlYWtLZXlEaWN0aW9uYXJ5IiwgIlJlZmVyZW5jZUVycm9yIiwgIlJlZmVyZW5jZVR5cGUiLCAiUHJveHlUeXBlIiwKLSAgICAgICAgICAgIkNhbGxhYmxlUHJveHlUeXBlIiwgIlByb3h5VHlwZXMiLCAiV2Vha1ZhbHVlRGljdGlvbmFyeSJdCisgICAgICAgICAgICJDYWxsYWJsZVByb3h5VHlwZSIsICJQcm94eVR5cGVzIiwgIldlYWtWYWx1ZURpY3Rpb25hcnkiLCAnV2Vha1NldCddCiAKIAogY2xhc3MgV2Vha1ZhbHVlRGljdGlvbmFyeShVc2VyRGljdC5Vc2VyRGljdCk6CkBAIC04NSw2ICs4NywxNyBAQAogICAgICAgICAgICAgICAgIG5ld1trZXldID0gbwogICAgICAgICByZXR1cm4gbmV3CiAKKyAgICBfX2NvcHlfXyA9IGNvcHkKKworICAgIGRlZiBfX2RlZXBjb3B5X18oc2VsZiwgbWVtbyk6CisgICAgICAgIGZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKKyAgICAgICAgbmV3ID0gc2VsZi5fX2NsYXNzX18oKQorICAgICAgICBmb3Iga2V5LCB3ciBpbiBzZWxmLmRhdGEuaXRlbXMoKToKKyAgICAgICAgICAgIG8gPSB3cigpCisgICAgICAgICAgICBpZiBvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG5ld1tkZWVwY29weShrZXksIG1lbW8pXSA9IG8KKyAgICAgICAgcmV0dXJuIG5ldworCiAgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdyID0gc2VsZi5kYXRhW2tleV0KQEAgLTI1Niw2ICsyNjksMTcgQEAKICAgICAgICAgICAgICAgICBuZXdbb10gPSB2YWx1ZQogICAgICAgICByZXR1cm4gbmV3CiAKKyAgICBfX2NvcHlfXyA9IGNvcHkKKworICAgIGRlZiBfX2RlZXBjb3B5X18oc2VsZiwgbWVtbyk6CisgICAgICAgIGZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKKyAgICAgICAgbmV3ID0gc2VsZi5fX2NsYXNzX18oKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLmRhdGEuaXRlbXMoKToKKyAgICAgICAgICAgIG8gPSBrZXkoKQorICAgICAgICAgICAgaWYgbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBuZXdbb10gPSBkZWVwY29weSh2YWx1ZSwgbWVtbykKKyAgICAgICAgcmV0dXJuIG5ldworCiAgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgIHJldHVybiBzZWxmLmRhdGEuZ2V0KHJlZihrZXkpLGRlZmF1bHQpCiAKZGlmZiAtLWdpdCBhL0xpYi93ZWJicm93c2VyLnB5IGIvTGliL3dlYmJyb3dzZXIucHkKaW5kZXggNWEwN2ZmYy4uNDFmZDE3NSAxMDA2NDQKLS0tIGEvTGliL3dlYmJyb3dzZXIucHkKKysrIGIvTGliL3dlYmJyb3dzZXIucHkKQEAgLTU1LDcgKzU1LDcgQEAKICMgSXQgaXMgcmVjb21tZW5kZWQgb25lIGRvZXMgImltcG9ydCB3ZWJicm93c2VyIiBhbmQgdXNlcyB3ZWJicm93c2VyLm9wZW4odXJsKQogIyBpbnN0ZWFkIG9mICJmcm9tIHdlYmJyb3dzZXIgaW1wb3J0ICoiLgogCi1kZWYgb3Blbih1cmwsIG5ldz0wLCBhdXRvcmFpc2U9MSk6CitkZWYgb3Blbih1cmwsIG5ldz0wLCBhdXRvcmFpc2U9VHJ1ZSk6CiAgICAgZm9yIG5hbWUgaW4gX3RyeW9yZGVyOgogICAgICAgICBicm93c2VyID0gZ2V0KG5hbWUpCiAgICAgICAgIGlmIGJyb3dzZXIub3Blbih1cmwsIG5ldywgYXV0b3JhaXNlKToKQEAgLTE0NCw3ICsxNDQsNyBAQAogICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgIHNlbGYuYmFzZW5hbWUgPSBuYW1lCiAKLSAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9MSk6CisgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKICAgICBkZWYgb3Blbl9uZXcoc2VsZiwgdXJsKToKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgICAgICAgICAgc2VsZi5hcmdzID0gbmFtZVsxOl0KICAgICAgICAgc2VsZi5iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5uYW1lKQogCi0gICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPTEpOgorICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT1UcnVlKToKICAgICAgICAgY21kbGluZSA9IFtzZWxmLm5hbWVdICsgW2FyZy5yZXBsYWNlKCIlcyIsIHVybCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gc2VsZi5hcmdzXQogICAgICAgICB0cnk6CkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAiIiJDbGFzcyBmb3IgYWxsIGJyb3dzZXJzIHdoaWNoIGFyZSB0byBiZSBzdGFydGVkIGluIHRoZQogICAgICAgIGJhY2tncm91bmQuIiIiCiAKLSAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9MSk6CisgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgogICAgICAgICBjbWRsaW5lID0gW3NlbGYubmFtZV0gKyBbYXJnLnJlcGxhY2UoIiVzIiwgdXJsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLmFyZ3NdCiAgICAgICAgIHRyeToKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICAgICByYWlzZV9vcHQgPSBbXQogICAgICAgICBpZiByZW1vdGUgYW5kIHNlbGYucmFpc2Vfb3B0czoKICAgICAgICAgICAgICMgdXNlIGF1dG9yYWlzZSBhcmd1bWVudCBvbmx5IGZvciByZW1vdGUgaW52b2NhdGlvbgotICAgICAgICAgICAgYXV0b3JhaXNlID0gaW50KGJvb2woYXV0b3JhaXNlKSkKKyAgICAgICAgICAgIGF1dG9yYWlzZSA9IGludChhdXRvcmFpc2UpCiAgICAgICAgICAgICBvcHQgPSBzZWxmLnJhaXNlX29wdHNbYXV0b3JhaXNlXQogICAgICAgICAgICAgaWYgb3B0OiByYWlzZV9vcHQgPSBbb3B0XQogCkBAIC0yNTYsNyArMjU2LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBub3QgcC53YWl0KCkKIAotICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT0xKToKKyAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9VHJ1ZSk6CiAgICAgICAgIGlmIG5ldyA9PSAwOgogICAgICAgICAgICAgYWN0aW9uID0gc2VsZi5yZW1vdGVfYWN0aW9uCiAgICAgICAgIGVsaWYgbmV3ID09IDE6CkBAIC0yODUsMTIgKzI4NSwxMCBAQAogICAgICIiIkxhdW5jaGVyIGNsYXNzIGZvciBNb3ppbGxhL05ldHNjYXBlIGJyb3dzZXJzLiIiIgogCiAgICAgcmFpc2Vfb3B0cyA9IFsiLW5vcmFpc2UiLCAiLXJhaXNlIl0KLQogICAgIHJlbW90ZV9hcmdzID0gWyctcmVtb3RlJywgJ29wZW5VUkwoJXMlYWN0aW9uKSddCiAgICAgcmVtb3RlX2FjdGlvbiA9ICIiCiAgICAgcmVtb3RlX2FjdGlvbl9uZXd3aW4gPSAiLG5ldy13aW5kb3ciCiAgICAgcmVtb3RlX2FjdGlvbl9uZXd0YWIgPSAiLG5ldy10YWIiCi0KICAgICBiYWNrZ3JvdW5kID0gVHJ1ZQogCiBOZXRzY2FwZSA9IE1vemlsbGEKQEAgLTMwMywxNSArMzAxLDEzIEBACiAgICAgcmVtb3RlX2FyZ3MgPSBbJyVhY3Rpb24nLCAnJXMnXQogICAgIHJlbW90ZV9hY3Rpb24gPSAiLW4iCiAgICAgcmVtb3RlX2FjdGlvbl9uZXd3aW4gPSAiLXciCi0KICAgICBiYWNrZ3JvdW5kID0gVHJ1ZQogCiAKIGNsYXNzIE9wZXJhKFVuaXhCcm93c2VyKToKICAgICAiTGF1bmNoZXIgY2xhc3MgZm9yIE9wZXJhIGJyb3dzZXIuIgogCi0gICAgcmFpc2Vfb3B0cyA9IFsiIiwgIi1yYWlzZSJdCi0KKyAgICByYWlzZV9vcHRzID0gWyItbm9yYWlzZSIsICIiXQogICAgIHJlbW90ZV9hcmdzID0gWyctcmVtb3RlJywgJ29wZW5VUkwoJXMlYWN0aW9uKSddCiAgICAgcmVtb3RlX2FjdGlvbiA9ICIiCiAgICAgcmVtb3RlX2FjdGlvbl9uZXd3aW4gPSAiLG5ldy13aW5kb3ciCkBAIC0zNDAsNyArMzM2LDcgQEAKICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgS29ucXVlcm9yIHJlbW90ZS1jb250cm9sIGludGVyZmFjZS4KICAgICAiIiIKIAotICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT0xKToKKyAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9VHJ1ZSk6CiAgICAgICAgICMgWFhYIEN1cnJlbnRseSBJIGtub3cgbm8gd2F5IHRvIHByZXZlbnQgS0ZNIGZyb20gb3BlbmluZyBhIG5ldyB3aW4uCiAgICAgICAgIGlmIG5ldyA9PSAyOgogICAgICAgICAgICAgYWN0aW9uID0gIm5ld1RhYiIKQEAgLTQyOCw3ICs0MjQsNyBAQAogICAgICAgICBzLmNsb3NlKCkKICAgICAgICAgcmV0dXJuIDEKIAotICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT0xKToKKyAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9VHJ1ZSk6CiAgICAgICAgIGlmIG5ldzoKICAgICAgICAgICAgIG9rID0gc2VsZi5fcmVtb3RlKCJMT0FETkVXICIgKyB1cmwpCiAgICAgICAgIGVsc2U6CkBAIC01MTEsNyArNTA3LDcgQEAKIAogaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAid2luIjoKICAgICBjbGFzcyBXaW5kb3dzRGVmYXVsdChCYXNlQnJvd3Nlcik6Ci0gICAgICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT0xKToKKyAgICAgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZSh1cmwpCiAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgpAQCAtNTM5LDE4ICs1MzUsNiBAQAogIyBQbGF0Zm9ybSBzdXBwb3J0IGZvciBNYWNPUwogIwogCi10cnk6Ci0gICAgaW1wb3J0IGljCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotZWxzZToKLSAgICBjbGFzcyBJbnRlcm5ldENvbmZpZyhCYXNlQnJvd3Nlcik6Ci0gICAgICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT0xKToKLSAgICAgICAgICAgIGljLmxhdW5jaHVybCh1cmwpCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZSAjIEFueSB3YXkgdG8gZ2V0IHN0YXR1cz8KLQotICAgIHJlZ2lzdGVyKCJpbnRlcm5ldC1jb25maWciLCBJbnRlcm5ldENvbmZpZywgdXBkYXRlX3RyeW9yZGVyPS0xKQotCiBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgIyBBZGFwdGVkIGZyb20gcGF0Y2ggc3VibWl0dGVkIHRvIFNvdXJjZUZvcmdlIGJ5IFN0ZXZlbiBKLiBCdXJyCiAgICAgY2xhc3MgTWFjT1NYKEJhc2VCcm93c2VyKToKQEAgLTU2Niw3ICs1NTAsNyBAQAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAKLSAgICAgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPTEpOgorICAgICAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9VHJ1ZSk6CiAgICAgICAgICAgICBhc3NlcnQgIiciIG5vdCBpbiB1cmwKICAgICAgICAgICAgICMgaGFjayBmb3IgbG9jYWwgdXJscwogICAgICAgICAgICAgaWYgbm90ICc6JyBpbiB1cmw6CkBAIC01OTksOSArNTgzLDM1IEBACiAgICAgICAgICAgICByYyA9IG9zYXBpcGUuY2xvc2UoKQogICAgICAgICAgICAgcmV0dXJuIG5vdCByYwogCisgICAgY2xhc3MgTWFjT1NYT1NBU2NyaXB0KEJhc2VCcm93c2VyKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAgICAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9VHJ1ZSk6CisgICAgICAgICAgICBpZiBzZWxmLl9uYW1lID09ICdkZWZhdWx0JzoKKyAgICAgICAgICAgICAgICBzY3JpcHQgPSAnb3BlbiBsb2NhdGlvbiAiJXMiJyAlIHVybC5yZXBsYWNlKCciJywgJyUyMicpICMgb3BlbnMgaW4gZGVmYXVsdCBicm93c2VyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNjcmlwdCA9ICcnJworICAgICAgICAgICAgICAgICAgIHRlbGwgYXBwbGljYXRpb24gIiVzIgorICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZQorICAgICAgICAgICAgICAgICAgICAgICBvcGVuIGxvY2F0aW9uICIlcyIKKyAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAnJyclKHNlbGYuX25hbWUsIHVybC5yZXBsYWNlKCciJywgJyUyMicpKQorCisgICAgICAgICAgICBvc2FwaXBlID0gb3MucG9wZW4oIm9zYXNjcmlwdCIsICJ3IikKKyAgICAgICAgICAgIGlmIG9zYXBpcGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgb3NhcGlwZS53cml0ZShzY3JpcHQpCisgICAgICAgICAgICByYyA9IG9zYXBpcGUuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIG5vdCByYworCisKICAgICAjIERvbid0IGNsZWFyIF90cnlvcmRlciBvciBfYnJvd3NlcnMgc2luY2UgT1MgWCBjYW4gdXNlIGFib3ZlIFVuaXggc3VwcG9ydAogICAgICMgKGJ1dCB3ZSBwcmVmZXIgdXNpbmcgdGhlIE9TIFggc3BlY2lmaWMgc3R1ZmYpCi0gICAgcmVnaXN0ZXIoIk1hY09TWCIsIE5vbmUsIE1hY09TWCgnZGVmYXVsdCcpLCAtMSkKKyAgICByZWdpc3Rlcigic2FmYXJpIiwgTm9uZSwgTWFjT1NYT1NBU2NyaXB0KCdzYWZhcmknKSwgLTEpCisgICAgcmVnaXN0ZXIoImZpcmVmb3giLCBOb25lLCBNYWNPU1hPU0FTY3JpcHQoJ2ZpcmVmb3gnKSwgLTEpCisgICAgcmVnaXN0ZXIoIk1hY09TWCIsIE5vbmUsIE1hY09TWE9TQVNjcmlwdCgnZGVmYXVsdCcpLCAtMSkKIAogCiAjCmRpZmYgLS1naXQgYS9MaWIvd3NnaXJlZi9oYW5kbGVycy5weSBiL0xpYi93c2dpcmVmL2hhbmRsZXJzLnB5CmluZGV4IDVjZmMyOGEuLmFlMWU4Y2MgMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL2hhbmRsZXJzLnB5CisrKyBiL0xpYi93c2dpcmVmL2hhbmRsZXJzLnB5CkBAIC0zOSw3ICszOSw2IEBACiAgICAgKQogCiAKLQogY2xhc3MgQmFzZUhhbmRsZXI6CiAgICAgIiIiTWFuYWdlIHRoZSBpbnZvY2F0aW9uIG9mIGEgV1NHSSBhcHBsaWNhdGlvbiIiIgogCkBAIC02NCw3ICs2Myw3IEBACiAKICAgICAjIEVycm9yIGhhbmRsaW5nIChhbHNvIHBlci1zdWJjbGFzcyBvciBwZXItaW5zdGFuY2UpCiAgICAgdHJhY2ViYWNrX2xpbWl0ID0gTm9uZSAgIyBQcmludCBlbnRpcmUgdHJhY2ViYWNrIHRvIHNlbGYuZ2V0X3N0ZGVycigpCi0gICAgZXJyb3Jfc3RhdHVzID0gIjUwMCBEdWRlLCB0aGlzIGlzIHdoYWNrISIKKyAgICBlcnJvcl9zdGF0dXMgPSAiNTAwIEludGVybmFsIFNlcnZlciBFcnJvciIKICAgICBlcnJvcl9oZWFkZXJzID0gWygnQ29udGVudC1UeXBlJywndGV4dC9wbGFpbicpXQogICAgIGVycm9yX2JvZHkgPSAiQSBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuICBQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4iCiAKQEAgLTc0LDEzICs3Myw2IEBACiAgICAgaGVhZGVycyA9IE5vbmUKICAgICBieXRlc19zZW50ID0gMAogCi0KLQotCi0KLQotCi0KICAgICBkZWYgcnVuKHNlbGYsIGFwcGxpY2F0aW9uKToKICAgICAgICAgIiIiSW52b2tlIHRoZSBhcHBsaWNhdGlvbiIiIgogICAgICAgICAjIE5vdGUgdG8gc2VsZjogZG9uJ3QgbW92ZSB0aGUgY2xvc2UoKSEgIEFzeW5jaHJvbm91cyBzZXJ2ZXJzIHNob3VsZG4ndApAQCAtMTYwLDcgKzE1Miw3IEBACiAKICAgICAgICAgU3ViY2xhc3NlcyBjYW4gZXh0ZW5kIHRoaXMgdG8gYWRkIG90aGVyIGRlZmF1bHRzLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuaGVhZGVycy5oYXNfa2V5KCdDb250ZW50LUxlbmd0aCcpOgorICAgICAgICBpZiAnQ29udGVudC1MZW5ndGgnIG5vdCBpbiBzZWxmLmhlYWRlcnM6CiAgICAgICAgICAgICBzZWxmLnNldF9jb250ZW50X2xlbmd0aCgpCiAKICAgICBkZWYgc3RhcnRfcmVzcG9uc2Uoc2VsZiwgc3RhdHVzLCBoZWFkZXJzLGV4Y19pbmZvPU5vbmUpOgpAQCAtMTk1LDExICsxODcsMTEgQEAKICAgICAgICAgaWYgc2VsZi5vcmlnaW5fc2VydmVyOgogICAgICAgICAgICAgaWYgc2VsZi5jbGllbnRfaXNfbW9kZXJuKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGUoJ0hUVFAvJXMgJXNcclxuJyAlIChzZWxmLmh0dHBfdmVyc2lvbixzZWxmLnN0YXR1cykpCi0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuaGVhZGVycy5oYXNfa2V5KCdEYXRlJyk6CisgICAgICAgICAgICAgICAgaWYgJ0RhdGUnIG5vdCBpbiBzZWxmLmhlYWRlcnM6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgJ0RhdGU6ICVzXHJcbicgJSBmb3JtYXRfZGF0ZV90aW1lKHRpbWUudGltZSgpKQogICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXJfc29mdHdhcmUgYW5kIG5vdCBzZWxmLmhlYWRlcnMuaGFzX2tleSgnU2VydmVyJyk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXJfc29mdHdhcmUgYW5kICdTZXJ2ZXInIG5vdCBpbiBzZWxmLmhlYWRlcnM6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlKCdTZXJ2ZXI6ICVzXHJcbicgJSBzZWxmLnNlcnZlcl9zb2Z0d2FyZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3dyaXRlKCdTdGF0dXM6ICVzXHJcbicgJSBzZWxmLnN0YXR1cykKQEAgLTI0OCw3ICsyNDAsOSBAQAogICAgIGRlZiBmaW5pc2hfY29udGVudChzZWxmKToKICAgICAgICAgIiIiRW5zdXJlIGhlYWRlcnMgYW5kIGNvbnRlbnQgaGF2ZSBib3RoIGJlZW4gc2VudCIiIgogICAgICAgICBpZiBub3Qgc2VsZi5oZWFkZXJzX3NlbnQ6Ci0gICAgICAgICAgICBzZWxmLmhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSAiMCIKKyAgICAgICAgICAgICMgT25seSB6ZXJvIENvbnRlbnQtTGVuZ3RoIGlmIG5vdCBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uIChzbworICAgICAgICAgICAgIyB0aGF0IEhFQUQgcmVxdWVzdHMgY2FuIGJlIHNhdGlzZmllZCBwcm9wZXJseSwgc2VlICMzODM5KQorICAgICAgICAgICAgc2VsZi5oZWFkZXJzLnNldGRlZmF1bHQoJ0NvbnRlbnQtTGVuZ3RoJywgIjAiKQogICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcnMoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGFzcyAjIFhYWCBjaGVjayBpZiBjb250ZW50LWxlbmd0aCB3YXMgdG9vIHNob3J0PwpAQCAtMzU5LDE1ICszNTMsNiBAQAogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAotCi0KLQotCi0KLQotCi0KLQogY2xhc3MgU2ltcGxlSGFuZGxlcihCYXNlSGFuZGxlcik6CiAgICAgIiIiSGFuZGxlciB0aGF0J3MganVzdCBpbml0aWFsaXplZCB3aXRoIHN0cmVhbXMsIGVudmlyb25tZW50LCBldGMuCiAKQEAgLTQzMywyMyArNDE4LDYgQEAKICAgICBvcmlnaW5fc2VydmVyID0gRmFsc2UKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQogY2xhc3MgQ0dJSGFuZGxlcihCYXNlQ0dJSGFuZGxlcik6CiAKICAgICAiIiJDR0ktYmFzZWQgaW52b2NhdGlvbiB2aWEgc3lzLnN0ZGluL3N0ZG91dC9zdGRlcnIgYW5kIG9zLmVudmlyb24KQEAgLTQ3OCwyMCArNDQ2LDMgQEAKICAgICAgICAgICAgIHNlbGYsIHN5cy5zdGRpbiwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVyciwgZGljdChvcy5lbnZpcm9uLml0ZW1zKCkpLAogICAgICAgICAgICAgbXVsdGl0aHJlYWQ9RmFsc2UsIG11bHRpcHJvY2Vzcz1UcnVlCiAgICAgICAgICkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotIwpkaWZmIC0tZ2l0IGEvTGliL3dzZ2lyZWYvaGVhZGVycy5weSBiL0xpYi93c2dpcmVmL2hlYWRlcnMucHkKaW5kZXggNmJkMzA0ZS4uNmM4YzYwYyAxMDA2NDQKLS0tIGEvTGliL3dzZ2lyZWYvaGVhZGVycy5weQorKysgYi9MaWIvd3NnaXJlZi9oZWFkZXJzLnB5CkBAIC0yNywxOCArMjcsNiBAQAogICAgICAgICByZXR1cm4gcGFyYW0KIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCiBjbGFzcyBIZWFkZXJzOgogCiAgICAgIiIiTWFuYWdlIGEgY29sbGVjdGlvbiBvZiBIVFRQIHJlc3BvbnNlIGhlYWRlcnMiIiIKQEAgLTc2LDEwICs2NCw2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5nZXQobmFtZSkKIAotCi0KLQotCiAgICAgZGVmIGhhc19rZXkoc2VsZiwgbmFtZSk6CiAgICAgICAgICIiIlJldHVybiB0cnVlIGlmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBoZWFkZXIuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmdldChuYW1lKSBpcyBub3QgTm9uZQpAQCAtMTE4LDkgKzEwMiw2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gW2sgZm9yIGssIHYgaW4gc2VsZi5faGVhZGVyc10KIAotCi0KLQogICAgIGRlZiB2YWx1ZXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYWxsIGhlYWRlciB2YWx1ZXMuCiAKQEAgLTE2MSw3ICsxNDIsNiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0KICAgICBkZWYgYWRkX2hlYWRlcihzZWxmLCBfbmFtZSwgX3ZhbHVlLCAqKl9wYXJhbXMpOgogICAgICAgICAiIiJFeHRlbmRlZCBoZWFkZXIgc2V0dGluZy4KIApAQCAtMTg3LDE5ICsxNjcsMyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoX2Zvcm1hdHBhcmFtKGsucmVwbGFjZSgnXycsICctJyksIHYpKQogICAgICAgICBzZWxmLl9oZWFkZXJzLmFwcGVuZCgoX25hbWUsICI7ICIuam9pbihwYXJ0cykpKQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotIwpkaWZmIC0tZ2l0IGEvTGliL3dzZ2lyZWYvc2ltcGxlX3NlcnZlci5weSBiL0xpYi93c2dpcmVmL3NpbXBsZV9zZXJ2ZXIucHkKaW5kZXggMWIwYTRiMi4uZTZhMzg1YiAxMDA2NDQKLS0tIGEvTGliL3dzZ2lyZWYvc2ltcGxlX3NlcnZlci5weQorKysgYi9MaWIvd3NnaXJlZi9zaW1wbGVfc2VydmVyLnB5CkBAIC0zNyw4ICszNyw2IEBACiAKIAogCi0KLQogY2xhc3MgV1NHSVNlcnZlcihIVFRQU2VydmVyKToKIAogICAgICIiIkJhc2VIVFRQU2VydmVyIHRoYXQgaW1wbGVtZW50cyB0aGUgUHl0aG9uIFdTR0kgcHJvdG9jb2wiIiIKQEAgLTY4LDE4ICs2Niw2IEBACiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCiBjbGFzcyBXU0dJUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CiAKICAgICBzZXJ2ZXJfdmVyc2lvbiA9ICJXU0dJU2VydmVyLyIgKyBfX3ZlcnNpb25fXwpAQCAtMTM5LDI5ICsxMjUsNiBAQAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KIGRlZiBkZW1vX2FwcChlbnZpcm9uLHN0YXJ0X3Jlc3BvbnNlKToKICAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogICAgIHN0ZG91dCA9IFN0cmluZ0lPKCkKQEAgLTE5MCwxNiArMTUzLDMgQEAKICAgICBpbXBvcnQgd2ViYnJvd3NlcgogICAgIHdlYmJyb3dzZXIub3BlbignaHR0cDovL2xvY2FsaG9zdDo4MDAwL3h5ej9hYmMnKQogICAgIGh0dHBkLmhhbmRsZV9yZXF1ZXN0KCkgICMgc2VydmUgb25lIHJlcXVlc3QsIHRoZW4gZXhpdAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotIwpkaWZmIC0tZ2l0IGEvTGliL3dzZ2lyZWYvdXRpbC5weSBiL0xpYi93c2dpcmVmL3V0aWwucHkKaW5kZXggNDUwYTMyZi4uMTk0YjE4NyAxMDA2NDQKLS0tIGEvTGliL3dzZ2lyZWYvdXRpbC5weQorKysgYi9MaWIvd3NnaXJlZi91dGlsLnB5CkBAIC0zMiwxMyArMzIsNiBAQAogICAgICAgICAgICAgcmV0dXJuIGRhdGEKICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogCi0KLQotCi0KLQotCi0KIGRlZiBndWVzc19zY2hlbWUoZW52aXJvbik6CiAgICAgIiIiUmV0dXJuIGEgZ3Vlc3MgZm9yIHdoZXRoZXIgJ3dzZ2kudXJsX3NjaGVtZScgc2hvdWxkIGJlICdodHRwJyBvciAnaHR0cHMnCiAgICAgIiIiCkBAIC03MSw3ICs2NCw3IEBACiAgICAgIiIiUmV0dXJuIHRoZSBmdWxsIHJlcXVlc3QgVVJJLCBvcHRpb25hbGx5IGluY2x1ZGluZyB0aGUgcXVlcnkgc3RyaW5nIiIiCiAgICAgdXJsID0gYXBwbGljYXRpb25fdXJpKGVudmlyb24pCiAgICAgZnJvbSB1cmxsaWIgaW1wb3J0IHF1b3RlCi0gICAgcGF0aF9pbmZvID0gcXVvdGUoZW52aXJvbi5nZXQoJ1BBVEhfSU5GTycsJycpKQorICAgIHBhdGhfaW5mbyA9IHF1b3RlKGVudmlyb24uZ2V0KCdQQVRIX0lORk8nLCcnKSxzYWZlPScvOz0sJykKICAgICBpZiBub3QgZW52aXJvbi5nZXQoJ1NDUklQVF9OQU1FJyk6CiAgICAgICAgIHVybCArPSBwYXRoX2luZm9bMTpdCiAgICAgZWxzZToKQEAgLTE2MSw3ICsxNTQsNiBAQAogCiAKIAotCiBfaG9wcGlzaCA9IHsKICAgICAnY29ubmVjdGlvbic6MSwgJ2tlZXAtYWxpdmUnOjEsICdwcm94eS1hdXRoZW50aWNhdGUnOjEsCiAgICAgJ3Byb3h5LWF1dGhvcml6YXRpb24nOjEsICd0ZSc6MSwgJ3RyYWlsZXJzJzoxLCAndHJhbnNmZXItZW5jb2RpbmcnOjEsCkBAIC0xNzEsMzUgKzE2MywzIEBACiBkZWYgaXNfaG9wX2J5X2hvcChoZWFkZXJfbmFtZSk6CiAgICAgIiIiUmV0dXJuIHRydWUgaWYgJ2hlYWRlcl9uYW1lJyBpcyBhbiBIVFRQLzEuMSAiSG9wLWJ5LUhvcCIgaGVhZGVyIiIiCiAgICAgcmV0dXJuIF9ob3BwaXNoKGhlYWRlcl9uYW1lLmxvd2VyKCkpCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMKZGlmZiAtLWdpdCBhL0xpYi93c2dpcmVmL3ZhbGlkYXRlLnB5IGIvTGliL3dzZ2lyZWYvdmFsaWRhdGUucHkKaW5kZXggMjNhYjlmOC4uNDM3ODRmOSAxMDA2NDQKLS0tIGEvTGliL3dzZ2lyZWYvdmFsaWRhdGUucHkKKysrIGIvTGliL3dzZ2lyZWYvdmFsaWRhdGUucHkKQEAgLTM0NSw3ICszNDUsNyBAQAogICAgICAgICAgICAgIkludmFsaWQgQ09OVEVOVF9MRU5HVEg6ICVyIiAlIGVudmlyb25bJ0NPTlRFTlRfTEVOR1RIJ10pCiAKICAgICBpZiBub3QgZW52aXJvbi5nZXQoJ1NDUklQVF9OQU1FJyk6Ci0gICAgICAgIGFzc2VydF8oZW52aXJvbi5oYXNfa2V5KCdQQVRIX0lORk8nKSwKKyAgICAgICAgYXNzZXJ0XygnUEFUSF9JTkZPJyBpbiBlbnZpcm9uLAogICAgICAgICAgICAgIk9uZSBvZiBTQ1JJUFRfTkFNRSBvciBQQVRIX0lORk8gYXJlIHJlcXVpcmVkIChQQVRIX0lORk8gIgogICAgICAgICAgICAgInNob3VsZCBhdCBsZWFzdCBiZSAnLycgaWYgU0NSSVBUX05BTUUgaXMgZW1wdHkpIikKICAgICBhc3NlcnRfKGVudmlyb24uZ2V0KCdTQ1JJUFRfTkFNRScpICE9ICcvJywKZGlmZiAtLWdpdCBhL0xpYi94bWwvX19pbml0X18ucHkgYi9MaWIveG1sL19faW5pdF9fLnB5CmluZGV4IGZhNWU4Y2QuLmRlZWQ5ODMgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvX19pbml0X18ucHkKKysrIGIvTGliL3htbC9fX2luaXRfXy5weQpAQCAtMTksMTIgKzE5LDYgQEAKIAogX19hbGxfXyA9IFsiZG9tIiwgInBhcnNlcnMiLCAic2F4IiwgImV0cmVlIl0KIAotIyBXaGVuIGJlaW5nIGNoZWNrZWQtb3V0IHdpdGhvdXQgb3B0aW9ucywgdGhpcyBoYXMgdGhlIGZvcm0KLSMgIjxkb2xsYXI+UmV2aXNpb246IHgueSA8L2RvbGxhcj4iCi0jIFdoZW4gZXhwb3J0ZWQgdXNpbmcgLWt2LCBpdCBpcyAieC55Ii4KLV9fdmVyc2lvbl9fID0gIiRSZXZpc2lvbiQiLnNwbGl0KClbLTI6XVswXQotCi0KIF9NSU5JTVVNX1hNTFBMVVNfVkVSU0lPTiA9ICgwLCA4LCA0KQogCiAKZGlmZiAtLWdpdCBhL0xpYi94bWwvZG9tL2RvbXJlZy5weSBiL0xpYi94bWwvZG9tL2RvbXJlZy5weQppbmRleCA2ODRjNDM2Li5lYzNhY2RmIDEwMDY0NAotLS0gYS9MaWIveG1sL2RvbS9kb21yZWcucHkKKysrIGIvTGliL3htbC9kb20vZG9tcmVnLnB5CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIHJldHVybiBtb2QuZ2V0RE9NSW1wbGVtZW50YXRpb24oKQogICAgIGVsaWYgbmFtZToKICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRbbmFtZV0oKQotICAgIGVsaWYgb3MuZW52aXJvbi5oYXNfa2V5KCJQWVRIT05fRE9NIik6CisgICAgZWxpZiAiUFlUSE9OX0RPTSIgaW4gb3MuZW52aXJvbjoKICAgICAgICAgcmV0dXJuIGdldERPTUltcGxlbWVudGF0aW9uKG5hbWUgPSBvcy5lbnZpcm9uWyJQWVRIT05fRE9NIl0pCiAKICAgICAjIFVzZXIgZGlkIG5vdCBzcGVjaWZ5IGEgbmFtZSwgdHJ5IGltcGxlbWVudGF0aW9ucyBpbiBhcmJpdHJhcnkKZGlmZiAtLWdpdCBhL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weSBiL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQppbmRleCBhMmY4YTMzLi40ZmJhODc1IDEwMDY0NAotLS0gYS9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKKysrIGIvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CkBAIC0yNDIsNyArMjQyLDcgQEAKICAgICAgICAgZG9jdHlwZSA9IHNlbGYuZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnRUeXBlKAogICAgICAgICAgICAgZG9jdHlwZU5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkKICAgICAgICAgZG9jdHlwZS5vd25lckRvY3VtZW50ID0gc2VsZi5kb2N1bWVudAotICAgICAgICBzZWxmLmRvY3VtZW50LmNoaWxkTm9kZXMuYXBwZW5kKGRvY3R5cGUpCisgICAgICAgIF9hcHBlbmRfY2hpbGQoc2VsZi5kb2N1bWVudCwgZG9jdHlwZSkKICAgICAgICAgc2VsZi5kb2N1bWVudC5kb2N0eXBlID0gZG9jdHlwZQogICAgICAgICBpZiBzZWxmLl9maWx0ZXIgYW5kIHNlbGYuX2ZpbHRlci5hY2NlcHROb2RlKGRvY3R5cGUpID09IEZJTFRFUl9SRUpFQ1Q6CiAgICAgICAgICAgICBzZWxmLmRvY3VtZW50LmRvY3R5cGUgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIveG1sL2RvbS9taW5pZG9tLnB5IGIvTGliL3htbC9kb20vbWluaWRvbS5weQppbmRleCBhZDQyOTQ3Li42OTNkMTcxIDEwMDY0NAotLS0gYS9MaWIveG1sL2RvbS9taW5pZG9tLnB5CisrKyBiL0xpYi94bWwvZG9tL21pbmlkb20ucHkKQEAgLTE3NywzNCArMTc3LDI3IEBACiAgICAgICAgIEwgPSBbXQogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZE5vZGVzOgogICAgICAgICAgICAgaWYgY2hpbGQubm9kZVR5cGUgPT0gTm9kZS5URVhUX05PREU6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IGNoaWxkLmRhdGEKLSAgICAgICAgICAgICAgICBpZiBkYXRhIGFuZCBMIGFuZCBMWy0xXS5ub2RlVHlwZSA9PSBjaGlsZC5ub2RlVHlwZToKKyAgICAgICAgICAgICAgICBpZiBub3QgY2hpbGQuZGF0YToKKyAgICAgICAgICAgICAgICAgICAgIyBlbXB0eSB0ZXh0IG5vZGU7IGRpc2NhcmQKKyAgICAgICAgICAgICAgICAgICAgaWYgTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIExbLTFdLm5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGQubmV4dFNpYmxpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5uZXh0U2libGluZy5wcmV2aW91c1NpYmxpbmcgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQudW5saW5rKCkKKyAgICAgICAgICAgICAgICBlbGlmIEwgYW5kIExbLTFdLm5vZGVUeXBlID09IGNoaWxkLm5vZGVUeXBlOgogICAgICAgICAgICAgICAgICAgICAjIGNvbGxhcHNlIHRleHQgbm9kZQogICAgICAgICAgICAgICAgICAgICBub2RlID0gTFstMV0KICAgICAgICAgICAgICAgICAgICAgbm9kZS5kYXRhID0gbm9kZS5kYXRhICsgY2hpbGQuZGF0YQogICAgICAgICAgICAgICAgICAgICBub2RlLm5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGQubmV4dFNpYmxpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5uZXh0U2libGluZy5wcmV2aW91c1NpYmxpbmcgPSBub2RlCiAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnVubGluaygpCi0gICAgICAgICAgICAgICAgZWxpZiBkYXRhOgotICAgICAgICAgICAgICAgICAgICBpZiBMOgotICAgICAgICAgICAgICAgICAgICAgICAgTFstMV0ubmV4dFNpYmxpbmcgPSBjaGlsZAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQucHJldmlvdXNTaWJsaW5nID0gTFstMV0KLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnByZXZpb3VzU2libGluZyA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBMLmFwcGVuZChjaGlsZCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIGVtcHR5IHRleHQgbm9kZTsgZGlzY2FyZAotICAgICAgICAgICAgICAgICAgICBjaGlsZC51bmxpbmsoKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBMOgotICAgICAgICAgICAgICAgICAgICBMWy0xXS5uZXh0U2libGluZyA9IGNoaWxkCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkLnByZXZpb3VzU2libGluZyA9IExbLTFdCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQucHJldmlvdXNTaWJsaW5nID0gTm9uZQogICAgICAgICAgICAgICAgIEwuYXBwZW5kKGNoaWxkKQogICAgICAgICAgICAgICAgIGlmIGNoaWxkLm5vZGVUeXBlID09IE5vZGUuRUxFTUVOVF9OT0RFOgogICAgICAgICAgICAgICAgICAgICBjaGlsZC5ub3JtYWxpemUoKQotICAgICAgICBpZiBMOgotICAgICAgICAgICAgTFstMV0ubmV4dFNpYmxpbmcgPSBOb25lCiAgICAgICAgIHNlbGYuY2hpbGROb2Rlc1s6XSA9IEwKIAogICAgIGRlZiBjbG9uZU5vZGUoc2VsZiwgZGVlcCk6CkBAIC0yOTgsOSArMjkxLDEwIEBACiAKIGRlZiBfd3JpdGVfZGF0YSh3cml0ZXIsIGRhdGEpOgogICAgICJXcml0ZXMgZGF0YWNoYXJzIHRvIHdyaXRlci4iCi0gICAgZGF0YSA9IGRhdGEucmVwbGFjZSgiJiIsICImYW1wOyIpLnJlcGxhY2UoIjwiLCAiJmx0OyIpCi0gICAgZGF0YSA9IGRhdGEucmVwbGFjZSgiXCIiLCAiJnF1b3Q7IikucmVwbGFjZSgiPiIsICImZ3Q7IikKLSAgICB3cml0ZXIud3JpdGUoZGF0YSkKKyAgICBpZiBkYXRhOgorICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCImIiwgIiZhbXA7IikucmVwbGFjZSgiPCIsICImbHQ7IikuIFwKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZSgiXCIiLCAiJnF1b3Q7IikucmVwbGFjZSgiPiIsICImZ3Q7IikKKyAgICAgICAgd3JpdGVyLndyaXRlKGRhdGEpCiAKIGRlZiBfZ2V0X2VsZW1lbnRzX2J5X3RhZ05hbWVfaGVscGVyKHBhcmVudCwgbmFtZSwgcmMpOgogICAgIGZvciBub2RlIGluIHBhcmVudC5jaGlsZE5vZGVzOgpAQCAtNDk4LDkgKzQ5Miw5IEBACiAKICAgICBkZWYgaGFzX2tleShzZWxmLCBrZXkpOgogICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgU3RyaW5nVHlwZXMpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2F0dHJzLmhhc19rZXkoa2V5KQorICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9hdHRycwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2F0dHJzTlMuaGFzX2tleShrZXkpCisgICAgICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX2F0dHJzTlMKIAogICAgIGRlZiBrZXlzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYXR0cnMua2V5cygpCkBAIC03ODIsMTAgKzc3NiwxMCBAQAogICAgIHJlbW92ZUF0dHJpYnV0ZU5vZGVOUyA9IHJlbW92ZUF0dHJpYnV0ZU5vZGUKIAogICAgIGRlZiBoYXNBdHRyaWJ1dGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9hdHRycy5oYXNfa2V5KG5hbWUpCisgICAgICAgIHJldHVybiBuYW1lIGluIHNlbGYuX2F0dHJzCiAKICAgICBkZWYgaGFzQXR0cmlidXRlTlMoc2VsZiwgbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fYXR0cnNOUy5oYXNfa2V5KChuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkpCisgICAgICAgIHJldHVybiAobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIGluIHNlbGYuX2F0dHJzTlMKIAogICAgIGRlZiBnZXRFbGVtZW50c0J5VGFnTmFtZShzZWxmLCBuYW1lKToKICAgICAgICAgcmV0dXJuIF9nZXRfZWxlbWVudHNfYnlfdGFnTmFtZV9oZWxwZXIoc2VsZiwgbmFtZSwgTm9kZUxpc3QoKSkKQEAgLTg5Nyw2ICs4OTEsMTAgQEAKICAgICAgICAgcmFpc2UgeG1sLmRvbS5Ob3RGb3VuZEVycigKICAgICAgICAgICAgIHNlbGYubm9kZU5hbWUgKyAiIG5vZGVzIGRvIG5vdCBoYXZlIGNoaWxkcmVuIikKIAorICAgIGRlZiBub3JtYWxpemUoc2VsZik6CisgICAgICAgICMgRm9yIGNoaWxkbGVzcyBub2Rlcywgbm9ybWFsaXplKCkgaGFzIG5vdGhpbmcgdG8gZG8uCisgICAgICAgIHBhc3MKKwogICAgIGRlZiByZXBsYWNlQ2hpbGQoc2VsZiwgbmV3Q2hpbGQsIG9sZENoaWxkKToKICAgICAgICAgcmFpc2UgeG1sLmRvbS5IaWVyYXJjaHlSZXF1ZXN0RXJyKAogICAgICAgICAgICAgc2VsZi5ub2RlTmFtZSArICIgbm9kZXMgZG8gbm90IGhhdmUgY2hpbGRyZW4iKQpAQCAtMTM0MywxMSArMTM0MSw5IEBACiBjbGFzcyBET01JbXBsZW1lbnRhdGlvbihET01JbXBsZW1lbnRhdGlvbkxTKToKICAgICBfZmVhdHVyZXMgPSBbKCJjb3JlIiwgIjEuMCIpLAogICAgICAgICAgICAgICAgICAoImNvcmUiLCAiMi4wIiksCi0gICAgICAgICAgICAgICAgICgiY29yZSIsICIzLjAiKSwKICAgICAgICAgICAgICAgICAgKCJjb3JlIiwgTm9uZSksCiAgICAgICAgICAgICAgICAgICgieG1sIiwgIjEuMCIpLAogICAgICAgICAgICAgICAgICAoInhtbCIsICIyLjAiKSwKLSAgICAgICAgICAgICAgICAgKCJ4bWwiLCAiMy4wIiksCiAgICAgICAgICAgICAgICAgICgieG1sIiwgTm9uZSksCiAgICAgICAgICAgICAgICAgICgibHMtbG9hZCIsICIzLjAiKSwKICAgICAgICAgICAgICAgICAgKCJscy1sb2FkIiwgTm9uZSksCmRpZmYgLS1naXQgYS9MaWIveG1sL2RvbS94bWxidWlsZGVyLnB5IGIvTGliL3htbC9kb20veG1sYnVpbGRlci5weQppbmRleCBhYzFkNDQ4Li5kYzdjNWQ0IDEwMDY0NAotLS0gYS9MaWIveG1sL2RvbS94bWxidWlsZGVyLnB5CisrKyBiL0xpYi94bWwvZG9tL3htbGJ1aWxkZXIucHkKQEAgLTkxLDcgKzkxLDcgQEAKIAogICAgIGRlZiBjYW5TZXRGZWF0dXJlKHNlbGYsIG5hbWUsIHN0YXRlKToKICAgICAgICAga2V5ID0gKF9uYW1lX3hmb3JtKG5hbWUpLCBzdGF0ZSBhbmQgMSBvciAwKQotICAgICAgICByZXR1cm4gc2VsZi5fc2V0dGluZ3MuaGFzX2tleShrZXkpCisgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5fc2V0dGluZ3MKIAogICAgICMgVGhpcyBkaWN0aW9uYXJ5IG1hcHMgZnJvbSAoZmVhdHVyZSx2YWx1ZSkgdG8gYSBsaXN0IG9mCiAgICAgIyAob3B0aW9uLHZhbHVlKSBwYWlycyB0aGF0IHNob3VsZCBiZSBzZXQgb24gdGhlIE9wdGlvbnMgb2JqZWN0LgpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAKICAgICBkZWYgX2d1ZXNzX21lZGlhX2VuY29kaW5nKHNlbGYsIHNvdXJjZSk6CiAgICAgICAgIGluZm8gPSBzb3VyY2UuYnl0ZVN0cmVhbS5pbmZvKCkKLSAgICAgICAgaWYgaW5mby5oYXNfa2V5KCJDb250ZW50LVR5cGUiKToKKyAgICAgICAgaWYgIkNvbnRlbnQtVHlwZSIgaW4gaW5mbzoKICAgICAgICAgICAgIGZvciBwYXJhbSBpbiBpbmZvLmdldHBsaXN0KCk6CiAgICAgICAgICAgICAgICAgaWYgcGFyYW0uc3RhcnRzd2l0aCgiY2hhcnNldD0iKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtLnNwbGl0KCI9IiwgMSlbMV0ubG93ZXIoKQpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKaW5kZXggOTc0Y2MyMS4uODRmZDc1NCAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CkBAIC0xLDYgKzEsNiBAQAogIwogIyBFbGVtZW50VHJlZQotIyAkSWQ6IEVsZW1lbnRJbmNsdWRlLnB5IDE4NjIgMjAwNC0wNi0xOCAwNzozMTowMlogRnJlZHJpayAkCisjICRJZDogRWxlbWVudEluY2x1ZGUucHkgMzM3NSAyMDA4LTAyLTEzIDA4OjA1OjA4WiBmcmVkcmlrICQKICMKICMgbGltaXRlZCB4aW5jbHVkZSBzdXBwb3J0IGZvciBlbGVtZW50IHRyZWVzCiAjCkBAIC0xNiw3ICsxNiw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBFbGVtZW50VHJlZSB0b29sa2l0IGlzCiAjCi0jIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IGJ5IEZyZWRyaWsgTHVuZGgKKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggYnkgRnJlZHJpayBMdW5kaAogIwogIyBCeSBvYnRhaW5pbmcsIHVzaW5nLCBhbmQvb3IgY29weWluZyB0aGlzIHNvZnR3YXJlIGFuZC9vciBpdHMKICMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCB5b3UgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLApAQCAtNDIsMTQgKzQyLDE0IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnLzIuNC9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KKyMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCiAKICMjCiAjIExpbWl0ZWQgWEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEVsZW1lbnRUcmVlIHBhY2thZ2UuCiAjIwogCiBpbXBvcnQgY29weQotaW1wb3J0IEVsZW1lbnRUcmVlCitmcm9tIC4gaW1wb3J0IEVsZW1lbnRUcmVlCiAKIFhJTkNMVURFID0gIntodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlfSIKIApAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgaWYgaToKICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW1baS0xXQotICAgICAgICAgICAgICAgICAgICBub2RlLnRhaWwgPSAobm9kZS50YWlsIG9yICIiKSArIHRleHQKKyAgICAgICAgICAgICAgICAgICAgbm9kZS50YWlsID0gKG5vZGUudGFpbCBvciAiIikgKyB0ZXh0ICsgKGUudGFpbCBvciAiIikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBlbGVtLnRleHQgPSAoZWxlbS50ZXh0IG9yICIiKSArIHRleHQgKyAoZS50YWlsIG9yICIiKQogICAgICAgICAgICAgICAgIGRlbCBlbGVtW2ldCmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5IGIvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQppbmRleCAwMGRiZTlkLi40YTYyNmQ3IDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKQEAgLTEsNiArMSw2IEBACiAjCiAjIEVsZW1lbnRUcmVlCi0jICRJZDogRWxlbWVudFBhdGgucHkgMTg1OCAyMDA0LTA2LTE3IDIxOjMxOjQxWiBGcmVkcmlrICQKKyMgJElkOiBFbGVtZW50UGF0aC5weSAzMzc1IDIwMDgtMDItMTMgMDg6MDU6MDhaIGZyZWRyaWsgJAogIwogIyBsaW1pdGVkIHhwYXRoIHN1cHBvcnQgZm9yIGVsZW1lbnQgdHJlZXMKICMKQEAgLTgsOCArOCwxMyBAQAogIyAyMDAzLTA1LTIzIGZsICAgY3JlYXRlZAogIyAyMDAzLTA1LTI4IGZsICAgYWRkZWQgc3VwcG9ydCBmb3IgLy8gZXRjCiAjIDIwMDMtMDgtMjcgZmwgICBmaXhlZCBwYXJzaW5nIG9mIHBlcmlvZHMgaW4gZWxlbWVudCBuYW1lcworIyAyMDA3LTA5LTEwIGZsICAgbmV3IHNlbGVjdGlvbiBlbmdpbmUKKyMgMjAwNy0wOS0xMiBmbCAgIGZpeGVkIHBhcmVudCBzZWxlY3RvcgorIyAyMDA3LTA5LTEzIGZsICAgYWRkZWQgaXRlcmZpbmQ7IGNoYW5nZWQgZmluZGFsbCB0byByZXR1cm4gYSBsaXN0CisjIDIwMDctMTEtMzAgZmwgICBhZGRlZCBuYW1lc3BhY2VzIHN1cHBvcnQKKyMgMjAwOS0xMC0zMCBmbCAgIGFkZGVkIGNoaWxkIGVsZW1lbnQgdmFsdWUgZmlsdGVyCiAjCi0jIENvcHlyaWdodCAoYykgMjAwMy0yMDA0IGJ5IEZyZWRyaWsgTHVuZGguICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOSBieSBGcmVkcmlrIEx1bmRoLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgZnJlZHJpa0BweXRob253YXJlLmNvbQogIyBodHRwOi8vd3d3LnB5dGhvbndhcmUuY29tCkBAIC0xNyw3ICsyMiw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBFbGVtZW50VHJlZSB0b29sa2l0IGlzCiAjCi0jIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IGJ5IEZyZWRyaWsgTHVuZGgKKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgYnkgRnJlZHJpayBMdW5kaAogIwogIyBCeSBvYnRhaW5pbmcsIHVzaW5nLCBhbmQvb3IgY29weWluZyB0aGlzIHNvZnR3YXJlIGFuZC9vciBpdHMKICMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCB5b3UgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLApAQCAtNDMsNyArNDgsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjQvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCisjIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogCiAjIwogIyBJbXBsZW1lbnRhdGlvbiBtb2R1bGUgZm9yIFhQYXRoIHN1cHBvcnQuICBUaGVyZSdzIHVzdWFsbHkgbm8gcmVhc29uCkBAIC01MywxNDYgKzU4LDI0NiBAQAogCiBpbXBvcnQgcmUKIAoteHBhdGhfdG9rZW5pemVyID0gcmUuY29tcGlsZSgKLSAgICAiKDo6fFwuXC58XChcKXxbLy4qOlxbXF1cKFwpQD1dKXwoKD86XHtbXn1dK1x9KT9bXi86XFtcXVwoXClAPVxzXSspfFxzKyIKLSAgICApLmZpbmRhbGwKK3hwYXRoX3Rva2VuaXplcl9yZSA9IHJlLmNvbXBpbGUoCisgICAgIigiCisgICAgIidbXiddKid8XCJbXlwiXSpcInwiCisgICAgIjo6fCIKKyAgICAiLy8/fCIKKyAgICAiXC5cLnwiCisgICAgIlwoXCl8IgorICAgICJbLy4qOlxbXF1cKFwpQD1dKXwiCisgICAgIigoPzpce1tefV0rXH0pP1teL1xbXF1cKFwpQD1cc10rKXwiCisgICAgIlxzKyIKKyAgICApCiAKLWNsYXNzIHhwYXRoX2Rlc2NlbmRhbnRfb3Jfc2VsZjoKLSAgICBwYXNzCi0KLSMjCi0jIFdyYXBwZXIgZm9yIGEgY29tcGlsZWQgWFBhdGguCi0KLWNsYXNzIFBhdGg6Ci0KLSAgICAjIwotICAgICMgQ3JlYXRlIGFuIFBhdGggaW5zdGFuY2UgZnJvbSBhbiBYUGF0aCBleHByZXNzaW9uLgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgotICAgICAgICB0b2tlbnMgPSB4cGF0aF90b2tlbml6ZXIocGF0aCkKLSAgICAgICAgIyB0aGUgY3VycmVudCB2ZXJzaW9uIHN1cHBvcnRzICdwYXRoL3BhdGgnLXN0eWxlIGV4cHJlc3Npb25zIG9ubHkKLSAgICAgICAgc2VsZi5wYXRoID0gW10KLSAgICAgICAgc2VsZi50YWcgPSBOb25lCi0gICAgICAgIGlmIHRva2VucyBhbmQgdG9rZW5zWzBdWzBdID09ICIvIjoKLSAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJjYW5ub3QgdXNlIGFic29sdXRlIHBhdGggb24gZWxlbWVudCIpCi0gICAgICAgIHdoaWxlIHRva2VuczoKLSAgICAgICAgICAgIG9wLCB0YWcgPSB0b2tlbnMucG9wKDApCi0gICAgICAgICAgICBpZiB0YWcgb3Igb3AgPT0gIioiOgotICAgICAgICAgICAgICAgIHNlbGYucGF0aC5hcHBlbmQodGFnIG9yIG9wKQotICAgICAgICAgICAgZWxpZiBvcCA9PSAiLiI6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxpZiBvcCA9PSAiLyI6Ci0gICAgICAgICAgICAgICAgc2VsZi5wYXRoLmFwcGVuZCh4cGF0aF9kZXNjZW5kYW50X29yX3NlbGYoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigidW5zdXBwb3J0ZWQgcGF0aCBzeW50YXggKCVzKSIgJSBvcCkKLSAgICAgICAgICAgIGlmIHRva2VuczoKLSAgICAgICAgICAgICAgICBvcCwgdGFnID0gdG9rZW5zLnBvcCgwKQotICAgICAgICAgICAgICAgIGlmIG9wICE9ICIvIjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgcGF0aCBzZXBhcmF0b3IgKCVzKSIgJSAob3Agb3IgdGFnKQotICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICBpZiBzZWxmLnBhdGggYW5kIGlzaW5zdGFuY2Uoc2VsZi5wYXRoWy0xXSwgeHBhdGhfZGVzY2VuZGFudF9vcl9zZWxmKToKLSAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJwYXRoIGNhbm5vdCBlbmQgd2l0aCAvLyIpCi0gICAgICAgIGlmIGxlbihzZWxmLnBhdGgpID09IDEgYW5kIGlzaW5zdGFuY2Uoc2VsZi5wYXRoWzBdLCB0eXBlKCIiKSk6Ci0gICAgICAgICAgICBzZWxmLnRhZyA9IHNlbGYucGF0aFswXQotCi0gICAgIyMKLSAgICAjIEZpbmQgZmlyc3QgbWF0Y2hpbmcgb2JqZWN0LgotCi0gICAgZGVmIGZpbmQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIHRhZyA9IHNlbGYudGFnCi0gICAgICAgIGlmIHRhZyBpcyBOb25lOgotICAgICAgICAgICAgbm9kZXNldCA9IHNlbGYuZmluZGFsbChlbGVtZW50KQotICAgICAgICAgICAgaWYgbm90IG5vZGVzZXQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHJldHVybiBub2Rlc2V0WzBdCi0gICAgICAgIGZvciBlbGVtIGluIGVsZW1lbnQ6Ci0gICAgICAgICAgICBpZiBlbGVtLnRhZyA9PSB0YWc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0KLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICMjCi0gICAgIyBGaW5kIHRleHQgZm9yIGZpcnN0IG1hdGNoaW5nIG9iamVjdC4KLQotICAgIGRlZiBmaW5kdGV4dChzZWxmLCBlbGVtZW50LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICB0YWcgPSBzZWxmLnRhZwotICAgICAgICBpZiB0YWcgaXMgTm9uZToKLSAgICAgICAgICAgIG5vZGVzZXQgPSBzZWxmLmZpbmRhbGwoZWxlbWVudCkKLSAgICAgICAgICAgIGlmIG5vdCBub2Rlc2V0OgotICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0gICAgICAgICAgICByZXR1cm4gbm9kZXNldFswXS50ZXh0IG9yICIiCi0gICAgICAgIGZvciBlbGVtIGluIGVsZW1lbnQ6Ci0gICAgICAgICAgICBpZiBlbGVtLnRhZyA9PSB0YWc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0udGV4dCBvciAiIgotICAgICAgICByZXR1cm4gZGVmYXVsdAotCi0gICAgIyMKLSAgICAjIEZpbmQgYWxsIG1hdGNoaW5nIG9iamVjdHMuCi0KLSAgICBkZWYgZmluZGFsbChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgbm9kZXNldCA9IFtlbGVtZW50XQotICAgICAgICBpbmRleCA9IDAKLSAgICAgICAgd2hpbGUgMToKK2RlZiB4cGF0aF90b2tlbml6ZXIocGF0dGVybiwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICBmb3IgdG9rZW4gaW4geHBhdGhfdG9rZW5pemVyX3JlLmZpbmRhbGwocGF0dGVybik6CisgICAgICAgIHRhZyA9IHRva2VuWzFdCisgICAgICAgIGlmIHRhZyBhbmQgdGFnWzBdICE9ICJ7IiBhbmQgIjoiIGluIHRhZzoKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXRoID0gc2VsZi5wYXRoW2luZGV4XQotICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXNldAotICAgICAgICAgICAgc2V0ID0gW10KLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgeHBhdGhfZGVzY2VuZGFudF9vcl9zZWxmKToKKyAgICAgICAgICAgICAgICBwcmVmaXgsIHVyaSA9IHRhZy5zcGxpdCgiOiIsIDEpCisgICAgICAgICAgICAgICAgaWYgbm90IG5hbWVzcGFjZXM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisgICAgICAgICAgICAgICAgeWllbGQgdG9rZW5bMF0sICJ7JXN9JXMiICUgKG5hbWVzcGFjZXNbcHJlZml4XSwgdXJpKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJwcmVmaXggJXIgbm90IGZvdW5kIGluIHByZWZpeCBtYXAiICUgcHJlZml4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQgdG9rZW4KKworZGVmIGdldF9wYXJlbnRfbWFwKGNvbnRleHQpOgorICAgIHBhcmVudF9tYXAgPSBjb250ZXh0LnBhcmVudF9tYXAKKyAgICBpZiBwYXJlbnRfbWFwIGlzIE5vbmU6CisgICAgICAgIGNvbnRleHQucGFyZW50X21hcCA9IHBhcmVudF9tYXAgPSB7fQorICAgICAgICBmb3IgcCBpbiBjb250ZXh0LnJvb3QuaXRlcigpOgorICAgICAgICAgICAgZm9yIGUgaW4gcDoKKyAgICAgICAgICAgICAgICBwYXJlbnRfbWFwW2VdID0gcAorICAgIHJldHVybiBwYXJlbnRfbWFwCisKK2RlZiBwcmVwYXJlX2NoaWxkKG5leHQsIHRva2VuKToKKyAgICB0YWcgPSB0b2tlblsxXQorICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKKyAgICAgICAgICAgICAgICBpZiBlLnRhZyA9PSB0YWc6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICByZXR1cm4gc2VsZWN0CisKK2RlZiBwcmVwYXJlX3N0YXIobmV4dCwgdG9rZW4pOgorICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKKyAgICAgICAgICAgICAgICB5aWVsZCBlCisgICAgcmV0dXJuIHNlbGVjdAorCitkZWYgcHJlcGFyZV9zZWxmKG5leHQsIHRva2VuKToKKyAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CisgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICByZXR1cm4gc2VsZWN0CisKK2RlZiBwcmVwYXJlX2Rlc2NlbmRhbnQobmV4dCwgdG9rZW4pOgorICAgIHRva2VuID0gbmV4dCgpCisgICAgaWYgdG9rZW5bMF0gPT0gIioiOgorICAgICAgICB0YWcgPSAiKiIKKyAgICBlbGlmIG5vdCB0b2tlblswXToKKyAgICAgICAgdGFnID0gdG9rZW5bMV0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiaW52YWxpZCBkZXNjZW5kYW50IikKKyAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CisgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgIGZvciBlIGluIGVsZW0uaXRlcih0YWcpOgorICAgICAgICAgICAgICAgIGlmIGUgaXMgbm90IGVsZW06CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICByZXR1cm4gc2VsZWN0CisKK2RlZiBwcmVwYXJlX3BhcmVudChuZXh0LCB0b2tlbik6CisgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgorICAgICAgICAjIEZJWE1FOiByYWlzZSBlcnJvciBpZiAuLiBpcyBhcHBsaWVkIGF0IHRvcGxldmVsPworICAgICAgICBwYXJlbnRfbWFwID0gZ2V0X3BhcmVudF9tYXAoY29udGV4dCkKKyAgICAgICAgcmVzdWx0X21hcCA9IHt9CisgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgIGlmIGVsZW0gaW4gcGFyZW50X21hcDoKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRfbWFwW2VsZW1dCisgICAgICAgICAgICAgICAgaWYgcGFyZW50IG5vdCBpbiByZXN1bHRfbWFwOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRfbWFwW3BhcmVudF0gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHBhcmVudAorICAgIHJldHVybiBzZWxlY3QKKworZGVmIHByZXBhcmVfcHJlZGljYXRlKG5leHQsIHRva2VuKToKKyAgICAjIEZJWE1FOiByZXBsYWNlIHdpdGggcmVhbCBwYXJzZXIhISEgcmVmczoKKyAgICAjIGh0dHA6Ly9lZmZib3Qub3JnL3pvbmUvc2ltcGxlLWl0ZXJhdG9yLXBhcnNlci5odG0KKyAgICAjIGh0dHA6Ly9qYXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vdGRvcC90ZG9wLmh0bWwKKyAgICBzaWduYXR1cmUgPSBbXQorICAgIHByZWRpY2F0ZSA9IFtdCisgICAgd2hpbGUgMToKKyAgICAgICAgdG9rZW4gPSBuZXh0KCkKKyAgICAgICAgaWYgdG9rZW5bMF0gPT0gIl0iOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgdG9rZW5bMF0gYW5kIHRva2VuWzBdWzoxXSBpbiAiJ1wiIjoKKyAgICAgICAgICAgIHRva2VuID0gIiciLCB0b2tlblswXVsxOi0xXQorICAgICAgICBzaWduYXR1cmUuYXBwZW5kKHRva2VuWzBdIG9yICItIikKKyAgICAgICAgcHJlZGljYXRlLmFwcGVuZCh0b2tlblsxXSkKKyAgICBzaWduYXR1cmUgPSAiIi5qb2luKHNpZ25hdHVyZSkKKyAgICAjIHVzZSBzaWduYXR1cmUgdG8gZGV0ZXJtaW5lIHByZWRpY2F0ZSB0eXBlCisgICAgaWYgc2lnbmF0dXJlID09ICJALSI6CisgICAgICAgICMgW0BhdHRyaWJ1dGVdIHByZWRpY2F0ZQorICAgICAgICBrZXkgPSBwcmVkaWNhdGVbMV0KKyAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgorICAgICAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIGlmIGVsZW0uZ2V0KGtleSkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICAgICAgcmV0dXJuIHNlbGVjdAorICAgIGlmIHNpZ25hdHVyZSA9PSAiQC09JyI6CisgICAgICAgICMgW0BhdHRyaWJ1dGU9J3ZhbHVlJ10KKyAgICAgICAga2V5ID0gcHJlZGljYXRlWzFdCisgICAgICAgIHZhbHVlID0gcHJlZGljYXRlWy0xXQorICAgICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CisgICAgICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgaWYgZWxlbS5nZXQoa2V5KSA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQorICAgICAgICByZXR1cm4gc2VsZWN0CisgICAgaWYgc2lnbmF0dXJlID09ICItIiBhbmQgbm90IHJlLm1hdGNoKCJcZCskIiwgcHJlZGljYXRlWzBdKToKKyAgICAgICAgIyBbdGFnXQorICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KKyAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgorICAgICAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIGlmIGVsZW0uZmluZCh0YWcpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgICAgIHJldHVybiBzZWxlY3QKKyAgICBpZiBzaWduYXR1cmUgPT0gIi09JyIgYW5kIG5vdCByZS5tYXRjaCgiXGQrJCIsIHByZWRpY2F0ZVswXSk6CisgICAgICAgICMgW3RhZz0ndmFsdWUnXQorICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KKyAgICAgICAgdmFsdWUgPSBwcmVkaWNhdGVbLTFdCisgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBmb3IgZSBpbiBlbGVtLmZpbmRhbGwodGFnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgIiIuam9pbihlLml0ZXJ0ZXh0KCkpID09IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIHNlbGVjdAorICAgIGlmIHNpZ25hdHVyZSA9PSAiLSIgb3Igc2lnbmF0dXJlID09ICItKCkiIG9yIHNpZ25hdHVyZSA9PSAiLSgpLSI6CisgICAgICAgICMgW2luZGV4XSBvciBbbGFzdCgpXSBvciBbbGFzdCgpLWluZGV4XQorICAgICAgICBpZiBzaWduYXR1cmUgPT0gIi0iOgorICAgICAgICAgICAgaW5kZXggPSBpbnQocHJlZGljYXRlWzBdKSAtIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHByZWRpY2F0ZVswXSAhPSAibGFzdCI6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoInVuc3VwcG9ydGVkIGZ1bmN0aW9uIikKKyAgICAgICAgICAgIGlmIHNpZ25hdHVyZSA9PSAiLSgpLSI6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0YWcgPSBzZWxmLnBhdGhbaW5kZXhdCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRhZywgdHlwZSgiIikpOgotICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKLSAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgdGFnID0gTm9uZSAjIGludmFsaWQgcGF0aAotICAgICAgICAgICAgICAgIGZvciBub2RlIGluIG5vZGVzZXQ6Ci0gICAgICAgICAgICAgICAgICAgIG5ldyA9IGxpc3Qobm9kZS5nZXRpdGVyYXRvcih0YWcpKQotICAgICAgICAgICAgICAgICAgICBpZiBuZXcgYW5kIG5ld1swXSBpcyBub2RlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmV4dGVuZChuZXdbMTpdKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmV4dGVuZChuZXcpCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVsyXSkgLSAxCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bnN1cHBvcnRlZCBleHByZXNzaW9uIikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXNldDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gbm9kZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhdGggPT0gIioiIG9yIG5vZGUudGFnID09IHBhdGg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmFwcGVuZChub2RlKQotICAgICAgICAgICAgaWYgbm90IHNldDoKLSAgICAgICAgICAgICAgICByZXR1cm4gW10KLSAgICAgICAgICAgIG5vZGVzZXQgPSBzZXQKKyAgICAgICAgICAgICAgICBpbmRleCA9IC0xCisgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgICAgIHBhcmVudF9tYXAgPSBnZXRfcGFyZW50X21hcChjb250ZXh0KQorICAgICAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50X21hcFtlbGVtXQorICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiB3aGF0IGlmIHRoZSBzZWxlY3RvciBpcyAiKiIgPworICAgICAgICAgICAgICAgICAgICBlbGVtcyA9IGxpc3QocGFyZW50LmZpbmRhbGwoZWxlbS50YWcpKQorICAgICAgICAgICAgICAgICAgICBpZiBlbGVtc1tpbmRleF0gaXMgZWxlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICAgICAgICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IsIEtleUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gc2VsZWN0CisgICAgcmFpc2UgU3ludGF4RXJyb3IoImludmFsaWQgcHJlZGljYXRlIikKKworb3BzID0geworICAgICIiOiBwcmVwYXJlX2NoaWxkLAorICAgICIqIjogcHJlcGFyZV9zdGFyLAorICAgICIuIjogcHJlcGFyZV9zZWxmLAorICAgICIuLiI6IHByZXBhcmVfcGFyZW50LAorICAgICIvLyI6IHByZXBhcmVfZGVzY2VuZGFudCwKKyAgICAiWyI6IHByZXBhcmVfcHJlZGljYXRlLAorICAgIH0KIAogX2NhY2hlID0ge30KIAotIyMKLSMgKEludGVybmFsKSBDb21waWxlIHBhdGguCitjbGFzcyBfU2VsZWN0b3JDb250ZXh0OgorICAgIHBhcmVudF9tYXAgPSBOb25lCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3QpOgorICAgICAgICBzZWxmLnJvb3QgPSByb290CiAKLWRlZiBfY29tcGlsZShwYXRoKToKLSAgICBwID0gX2NhY2hlLmdldChwYXRoKQotICAgIGlmIHAgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJldHVybiBwCi0gICAgcCA9IFBhdGgocGF0aCkKLSAgICBpZiBsZW4oX2NhY2hlKSA+PSAxMDA6Ci0gICAgICAgIF9jYWNoZS5jbGVhcigpCi0gICAgX2NhY2hlW3BhdGhdID0gcAotICAgIHJldHVybiBwCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMjCisjIEdlbmVyYXRlIGFsbCBtYXRjaGluZyBvYmplY3RzLgorCitkZWYgaXRlcmZpbmQoZWxlbSwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAjIGNvbXBpbGUgc2VsZWN0b3IgcGF0dGVybgorICAgIGlmIHBhdGhbLTE6XSA9PSAiLyI6CisgICAgICAgIHBhdGggPSBwYXRoICsgIioiICMgaW1wbGljaXQgYWxsIChGSVhNRToga2VlcCB0aGlzPykKKyAgICB0cnk6CisgICAgICAgIHNlbGVjdG9yID0gX2NhY2hlW3BhdGhdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBpZiBsZW4oX2NhY2hlKSA+IDEwMDoKKyAgICAgICAgICAgIF9jYWNoZS5jbGVhcigpCisgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKKyAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJjYW5ub3QgdXNlIGFic29sdXRlIHBhdGggb24gZWxlbWVudCIpCisgICAgICAgIG5leHQgPSBpdGVyKHhwYXRoX3Rva2VuaXplcihwYXRoLCBuYW1lc3BhY2VzKSkubmV4dAorICAgICAgICB0b2tlbiA9IG5leHQoKQorICAgICAgICBzZWxlY3RvciA9IFtdCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZWN0b3IuYXBwZW5kKG9wc1t0b2tlblswXV0obmV4dCwgdG9rZW4pKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoImludmFsaWQgcGF0aCIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdG9rZW4gPSBuZXh0KCkKKyAgICAgICAgICAgICAgICBpZiB0b2tlblswXSA9PSAiLyI6CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gbmV4dCgpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBfY2FjaGVbcGF0aF0gPSBzZWxlY3RvcgorICAgICMgZXhlY3V0ZSBzZWxlY3RvciBwYXR0ZXJuCisgICAgcmVzdWx0ID0gW2VsZW1dCisgICAgY29udGV4dCA9IF9TZWxlY3RvckNvbnRleHQoZWxlbSkKKyAgICBmb3Igc2VsZWN0IGluIHNlbGVjdG9yOgorICAgICAgICByZXN1bHQgPSBzZWxlY3QoY29udGV4dCwgcmVzdWx0KQorICAgIHJldHVybiByZXN1bHQKIAogIyMKICMgRmluZCBmaXJzdCBtYXRjaGluZyBvYmplY3QuCiAKLWRlZiBmaW5kKGVsZW1lbnQsIHBhdGgpOgotICAgIHJldHVybiBfY29tcGlsZShwYXRoKS5maW5kKGVsZW1lbnQpCi0KLSMjCi0jIEZpbmQgdGV4dCBmb3IgZmlyc3QgbWF0Y2hpbmcgb2JqZWN0LgotCi1kZWYgZmluZHRleHQoZWxlbWVudCwgcGF0aCwgZGVmYXVsdD1Ob25lKToKLSAgICByZXR1cm4gX2NvbXBpbGUocGF0aCkuZmluZHRleHQoZWxlbWVudCwgZGVmYXVsdCkKK2RlZiBmaW5kKGVsZW0sIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gaXRlcmZpbmQoZWxlbSwgcGF0aCwgbmFtZXNwYWNlcykubmV4dCgpCisgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgIHJldHVybiBOb25lCiAKICMjCiAjIEZpbmQgYWxsIG1hdGNoaW5nIG9iamVjdHMuCiAKLWRlZiBmaW5kYWxsKGVsZW1lbnQsIHBhdGgpOgotICAgIHJldHVybiBfY29tcGlsZShwYXRoKS5maW5kYWxsKGVsZW1lbnQpCitkZWYgZmluZGFsbChlbGVtLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgIHJldHVybiBsaXN0KGl0ZXJmaW5kKGVsZW0sIHBhdGgsIG5hbWVzcGFjZXMpKQorCisjIworIyBGaW5kIHRleHQgZm9yIGZpcnN0IG1hdGNoaW5nIG9iamVjdC4KKworZGVmIGZpbmR0ZXh0KGVsZW0sIHBhdGgsIGRlZmF1bHQ9Tm9uZSwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICB0cnk6CisgICAgICAgIGVsZW0gPSBpdGVyZmluZChlbGVtLCBwYXRoLCBuYW1lc3BhY2VzKS5uZXh0KCkKKyAgICAgICAgcmV0dXJuIGVsZW0udGV4dCBvciAiIgorICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICByZXR1cm4gZGVmYXVsdApkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKaW5kZXggN2RiYzcyZS4uZDg5ZmQzYiAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CkBAIC0xLDQwICsxLDI0IEBACiAjCiAjIEVsZW1lbnRUcmVlCi0jICRJZDogRWxlbWVudFRyZWUucHkgMjMyNiAyMDA1LTAzLTE3IDA3OjQ1OjIxWiBmcmVkcmlrICQKKyMgJElkOiBFbGVtZW50VHJlZS5weSAzNDQwIDIwMDgtMDctMTggMTQ6NDU6MDFaIGZyZWRyaWsgJAogIwotIyBsaWdodC13ZWlnaHQgWE1MIHN1cHBvcnQgZm9yIFB5dGhvbiAxLjUuMiBhbmQgbGF0ZXIuCisjIGxpZ2h0LXdlaWdodCBYTUwgc3VwcG9ydCBmb3IgUHl0aG9uIDIuMyBhbmQgbGF0ZXIuCiAjCi0jIGhpc3Rvcnk6Ci0jIDIwMDEtMTAtMjAgZmwgICBjcmVhdGVkIChmcm9tIHZhcmlvdXMgc291cmNlcykKLSMgMjAwMS0xMS0wMSBmbCAgIHJldHVybiByb290IGZyb20gcGFyc2UgbWV0aG9kCi0jIDIwMDItMDItMTYgZmwgICBzb3J0IGF0dHJpYnV0ZXMgaW4gbGV4aWNhbCBvcmRlcgotIyAyMDAyLTA0LTA2IGZsICAgVHJlZUJ1aWxkZXIgcmVmYWN0b3JpbmcsIGFkZGVkIFB5dGhvbkRvYyBtYXJrdXAKLSMgMjAwMi0wNS0wMSBmbCAgIGZpbmlzaGVkIFRyZWVCdWlsZGVyIHJlZmFjdG9yaW5nCi0jIDIwMDItMDctMTQgZmwgICBhZGRlZCBiYXNpYyBuYW1lc3BhY2Ugc3VwcG9ydCB0byBFbGVtZW50VHJlZS53cml0ZQotIyAyMDAyLTA3LTI1IGZsICAgYWRkZWQgUU5hbWUgYXR0cmlidXRlIHN1cHBvcnQKLSMgMjAwMi0xMC0yMCBmbCAgIGZpeGVkIGVuY29kaW5nIGluIHdyaXRlCi0jIDIwMDItMTEtMjQgZmwgICBjaGFuZ2VkIGRlZmF1bHQgZW5jb2RpbmcgdG8gYXNjaWk7IGZpeGVkIGF0dHJpYnV0ZSBlbmNvZGluZwotIyAyMDAyLTExLTI3IGZsICAgYWNjZXB0IGZpbGUgb2JqZWN0cyBvciBmaWxlIG5hbWVzIGZvciBwYXJzZS93cml0ZQotIyAyMDAyLTEyLTA0IGZsICAgbW92ZWQgWE1MVHJlZUJ1aWxkZXIgYmFjayB0byB0aGlzIG1vZHVsZQotIyAyMDAzLTAxLTExIGZsICAgZml4ZWQgZW50aXR5IGVuY29kaW5nIGdsaXRjaCBmb3IgdXMtYXNjaWkKLSMgMjAwMy0wMi0xMyBmbCAgIGFkZGVkIFhNTCBsaXRlcmFsIGZhY3RvcnkKLSMgMjAwMy0wMi0yMSBmbCAgIGFkZGVkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi9QSSBmYWN0b3J5Ci0jIDIwMDMtMDUtMTEgZmwgICBhZGRlZCB0b3N0cmluZy9mcm9tc3RyaW5nIGhlbHBlcnMKLSMgMjAwMy0wNS0yNiBmbCAgIGFkZGVkIEVsZW1lbnRQYXRoIHN1cHBvcnQKLSMgMjAwMy0wNy0wNSBmbCAgIGFkZGVkIG1ha2VlbGVtZW50IGZhY3RvcnkgbWV0aG9kCi0jIDIwMDMtMDctMjggZmwgICBhZGRlZCBtb3JlIHdlbGwta25vd24gbmFtZXNwYWNlIHByZWZpeGVzCi0jIDIwMDMtMDgtMTUgZmwgICBmaXhlZCB0eXBvIGluIEVsZW1lbnRUcmVlLmZpbmR0ZXh0IChUaG9tYXMgRGFydHNjaCkKLSMgMjAwMy0wOS0wNCBmbCAgIGZhbGwgYmFjayBvbiBlbXVsYXRvciBpZiBFbGVtZW50UGF0aCBpcyBub3QgaW5zdGFsbGVkCi0jIDIwMDMtMTAtMzEgZmwgICBtYXJrdXAgdXBkYXRlcwotIyAyMDAzLTExLTE1IGZsICAgZml4ZWQgbmVzdGVkIG5hbWVzcGFjZSBidWcKLSMgMjAwNC0wMy0yOCBmbCAgIGFkZGVkIFhNTElEIGhlbHBlcgotIyAyMDA0LTA2LTAyIGZsICAgYWRkZWQgZGVmYXVsdCBzdXBwb3J0IHRvIGZpbmR0ZXh0Ci0jIDIwMDQtMDYtMDggZmwgICBmaXhlZCBlbmNvZGluZyBvZiBub24tYXNjaWkgZWxlbWVudC9hdHRyaWJ1dGUgbmFtZXMKLSMgMjAwNC0wOC0yMyBmbCAgIHRha2UgYWR2YW50YWdlIG9mIHBvc3QtMi4xIGV4cGF0IGZlYXR1cmVzCi0jIDIwMDUtMDItMDEgZmwgICBhZGRlZCBpdGVycGFyc2UgaW1wbGVtZW50YXRpb24KLSMgMjAwNS0wMy0wMiBmbCAgIGZpeGVkIGl0ZXJwYXJzZSBzdXBwb3J0IGZvciBwcmUtMi4yIHZlcnNpb25zCisjIGhpc3RvcnkgKHNpbmNlIDEuMi42KToKKyMgMjAwNS0xMS0xMiBmbCAgIGFkZGVkIHRvc3RyaW5nbGlzdC9mcm9tc3RyaW5nbGlzdCBoZWxwZXJzCisjIDIwMDYtMDctMDUgZmwgICBtZXJnZWQgaW4gc2VsZWN0ZWQgY2hhbmdlcyBmcm9tIHRoZSAxLjMgc2FuZGJveAorIyAyMDA2LTA3LTA1IGZsICAgcmVtb3ZlZCBzdXBwb3J0IGZvciAyLjEgYW5kIGVhcmxpZXIKKyMgMjAwNy0wNi0yMSBmbCAgIGFkZGVkIGRlcHJlY2F0aW9uL2Z1dHVyZSB3YXJuaW5ncworIyAyMDA3LTA4LTI1IGZsICAgYWRkZWQgZG9jdHlwZSBob29rLCBhZGRlZCBwYXJzZXIgdmVyc2lvbiBhdHRyaWJ1dGUgZXRjCisjIDIwMDctMDgtMjYgZmwgICBhZGRlZCBuZXcgc2VyaWFsaXplciBjb2RlIChiZXR0ZXIgbmFtZXNwYWNlIGhhbmRsaW5nLCBldGMpCisjIDIwMDctMDgtMjcgZmwgICB3YXJuIGZvciBicm9rZW4gL3RhZyBzZWFyY2hlcyBvbiB0cmVlIGxldmVsCisjIDIwMDctMDktMDIgZmwgICBhZGRlZCBodG1sL3RleHQgbWV0aG9kcyB0byBzZXJpYWxpemVyIChleHBlcmltZW50YWwpCisjIDIwMDctMDktMDUgZmwgICBhZGRlZCBtZXRob2QgYXJndW1lbnQgdG8gdG9zdHJpbmcvdG9zdHJpbmdsaXN0CisjIDIwMDctMDktMDYgZmwgICBpbXByb3ZlZCBlcnJvciBoYW5kbGluZworIyAyMDA3LTA5LTEzIGZsICAgYWRkZWQgaXRlcnRleHQsIGl0ZXJmaW5kOyBhc3NvcnRlZCBjbGVhbnVwcworIyAyMDA3LTEyLTE1IGZsICAgYWRkZWQgQzE0TiBob29rcywgY29weSBtZXRob2QgKGV4cGVyaW1lbnRhbCkKICMKLSMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgYnkgRnJlZHJpayBMdW5kaC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDA4IGJ5IEZyZWRyaWsgTHVuZGguICBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBmcmVkcmlrQHB5dGhvbndhcmUuY29tCiAjIGh0dHA6Ly93d3cucHl0aG9ud2FyZS5jb20KQEAgLTQyLDcgKzI2LDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVGhlIEVsZW1lbnRUcmVlIHRvb2xraXQgaXMKICMKLSMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgYnkgRnJlZHJpayBMdW5kaAorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCBieSBGcmVkcmlrIEx1bmRoCiAjCiAjIEJ5IG9idGFpbmluZywgdXNpbmcsIGFuZC9vciBjb3B5aW5nIHRoaXMgc29mdHdhcmUgYW5kL29yIGl0cwogIyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIHlvdSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsCkBAIC02OCwyNSArNTIsMjggQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCi0jIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi40L2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgorIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KIAogX19hbGxfXyA9IFsKICAgICAjIHB1YmxpYyBzeW1ib2xzCiAgICAgIkNvbW1lbnQiLAogICAgICJkdW1wIiwKICAgICAiRWxlbWVudCIsICJFbGVtZW50VHJlZSIsCi0gICAgImZyb21zdHJpbmciLAorICAgICJmcm9tc3RyaW5nIiwgImZyb21zdHJpbmdsaXN0IiwKICAgICAiaXNlbGVtZW50IiwgIml0ZXJwYXJzZSIsCi0gICAgInBhcnNlIiwKKyAgICAicGFyc2UiLCAiUGFyc2VFcnJvciIsCiAgICAgIlBJIiwgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbiIsCiAgICAgIlFOYW1lIiwKICAgICAiU3ViRWxlbWVudCIsCi0gICAgInRvc3RyaW5nIiwKKyAgICAidG9zdHJpbmciLCAidG9zdHJpbmdsaXN0IiwKICAgICAiVHJlZUJ1aWxkZXIiLAotICAgICJWRVJTSU9OIiwgIlhNTCIsCisgICAgIlZFUlNJT04iLAorICAgICJYTUwiLAogICAgICJYTUxQYXJzZXIiLCAiWE1MVHJlZUJ1aWxkZXIiLAogICAgIF0KIAorVkVSU0lPTiA9ICIxLjMuMCIKKwogIyMKICMgVGhlIDxiPkVsZW1lbnQ8L2I+IHR5cGUgaXMgYSBmbGV4aWJsZSBjb250YWluZXIgb2JqZWN0LCBkZXNpZ25lZCB0bwogIyBzdG9yZSBoaWVyYXJjaGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gVGhlIHR5cGUgY2FuIGJlCkBAIC0xMDIsNjEgKzg5LDg2IEBACiAjIDxsaT5hIG51bWJlciBvZiA8aT5jaGlsZCBlbGVtZW50czwvaT4sIHN0b3JlZCBpbiBhIFB5dGhvbiBzZXF1ZW5jZTwvbGk+CiAjIDwvdWw+CiAjCi0jIFRvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIHtAbGluayAjRWxlbWVudH0gb3Ige0BsaW5rCi0jICNTdWJFbGVtZW50fSBmYWN0b3J5IGZ1bmN0aW9ucy4KKyMgVG8gY3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHVzZSB0aGUge0BsaW5rICNFbGVtZW50fSBjb25zdHJ1Y3RvcgorIyBvciB0aGUge0BsaW5rICNTdWJFbGVtZW50fSBmYWN0b3J5IGZ1bmN0aW9uLgogIyA8cD4KICMgVGhlIHtAbGluayAjRWxlbWVudFRyZWV9IGNsYXNzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYW4gZWxlbWVudAogIyBzdHJ1Y3R1cmUsIGFuZCBjb252ZXJ0IGl0IGZyb20gYW5kIHRvIFhNTC4KICMjCiAKLWltcG9ydCBzdHJpbmcsIHN5cywgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHdhcm5pbmdzCiAKLWNsYXNzIF9TaW1wbGVFbGVtZW50UGF0aDoKKworY2xhc3MgX1NpbXBsZUVsZW1lbnRQYXRoKG9iamVjdCk6CiAgICAgIyBlbXVsYXRlIHByZS0xLjIgZmluZC9maW5kdGV4dC9maW5kYWxsIGJlaGF2aW91cgotICAgIGRlZiBmaW5kKHNlbGYsIGVsZW1lbnQsIHRhZyk6CisgICAgZGVmIGZpbmQoc2VsZiwgZWxlbWVudCwgdGFnLCBuYW1lc3BhY2VzPU5vbmUpOgogICAgICAgICBmb3IgZWxlbSBpbiBlbGVtZW50OgogICAgICAgICAgICAgaWYgZWxlbS50YWcgPT0gdGFnOgogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtCiAgICAgICAgIHJldHVybiBOb25lCi0gICAgZGVmIGZpbmR0ZXh0KHNlbGYsIGVsZW1lbnQsIHRhZywgZGVmYXVsdD1Ob25lKToKLSAgICAgICAgZm9yIGVsZW0gaW4gZWxlbWVudDoKLSAgICAgICAgICAgIGlmIGVsZW0udGFnID09IHRhZzoKLSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS50ZXh0IG9yICIiCi0gICAgICAgIHJldHVybiBkZWZhdWx0Ci0gICAgZGVmIGZpbmRhbGwoc2VsZiwgZWxlbWVudCwgdGFnKToKKyAgICBkZWYgZmluZHRleHQoc2VsZiwgZWxlbWVudCwgdGFnLCBkZWZhdWx0PU5vbmUsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgIGVsZW0gPSBzZWxmLmZpbmQoZWxlbWVudCwgdGFnKQorICAgICAgICBpZiBlbGVtIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICByZXR1cm4gZWxlbS50ZXh0IG9yICIiCisgICAgZGVmIGl0ZXJmaW5kKHNlbGYsIGVsZW1lbnQsIHRhZywgbmFtZXNwYWNlcz1Ob25lKToKICAgICAgICAgaWYgdGFnWzozXSA9PSAiLi8vIjoKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmdldGl0ZXJhdG9yKHRhZ1szOl0pCi0gICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgICAgICBmb3IgZWxlbSBpbiBlbGVtZW50Lml0ZXIodGFnWzM6XSk6CisgICAgICAgICAgICAgICAgeWllbGQgZWxlbQogICAgICAgICBmb3IgZWxlbSBpbiBlbGVtZW50OgogICAgICAgICAgICAgaWYgZWxlbS50YWcgPT0gdGFnOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZWxlbSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICBkZWYgZmluZGFsbChzZWxmLCBlbGVtZW50LCB0YWcsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuaXRlcmZpbmQoZWxlbWVudCwgdGFnLCBuYW1lc3BhY2VzKSkKIAogdHJ5OgotICAgIGltcG9ydCBFbGVtZW50UGF0aAorICAgIGZyb20gLiBpbXBvcnQgRWxlbWVudFBhdGgKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIEZJWE1FOiBpc3N1ZSB3YXJuaW5nIGluIHRoaXMgY2FzZT8KICAgICBFbGVtZW50UGF0aCA9IF9TaW1wbGVFbGVtZW50UGF0aCgpCiAKLSMgVE9ETzogYWRkIHN1cHBvcnQgZm9yIGN1c3RvbSBuYW1lc3BhY2UgcmVzb2x2ZXJzL2RlZmF1bHQgbmFtZXNwYWNlcwotIyBUT0RPOiBhZGQgaW1wcm92ZWQgc3VwcG9ydCBmb3IgaW5jcmVtZW50YWwgcGFyc2luZworIyMKKyMgUGFyc2VyIGVycm9yLiAgVGhpcyBpcyBhIHN1YmNsYXNzIG9mIDxiPlN5bnRheEVycm9yPC9iPi4KKyMgPHA+CisjIEluIGFkZGl0aW9uIHRvIHRoZSBleGNlcHRpb24gdmFsdWUsIGFuIGV4Y2VwdGlvbiBpbnN0YW5jZSBjb250YWlucyBhCisjIHNwZWNpZmljIGV4Y2VwdGlvbiBjb2RlIGluIHRoZSA8Yj5jb2RlPC9iPiBhdHRyaWJ1dGUsIGFuZCB0aGUgbGluZSBhbmQKKyMgY29sdW1uIG9mIHRoZSBlcnJvciBpbiB0aGUgPGI+cG9zaXRpb248L2I+IGF0dHJpYnV0ZS4KIAotVkVSU0lPTiA9ICIxLjIuNiIKK2NsYXNzIFBhcnNlRXJyb3IoU3ludGF4RXJyb3IpOgorICAgIHBhc3MKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIwotIyBJbnRlcm5hbCBlbGVtZW50IGNsYXNzLiAgVGhpcyBjbGFzcyBkZWZpbmVzIHRoZSBFbGVtZW50IGludGVyZmFjZSwKLSMgYW5kIHByb3ZpZGVzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaW50ZXJmYWNlLgotIyA8cD4KLSMgWW91IHNob3VsZCBub3QgY3JlYXRlIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGRpcmVjdGx5LiAgVXNlIHRoZQotIyBhcHByb3ByaWF0ZSBmYWN0b3J5IGZ1bmN0aW9ucyBpbnN0ZWFkLCBzdWNoIGFzIHtAbGluayAjRWxlbWVudH0KLSMgYW5kIHtAbGluayAjU3ViRWxlbWVudH0uCisjIENoZWNrcyBpZiBhbiBvYmplY3QgYXBwZWFycyB0byBiZSBhIHZhbGlkIGVsZW1lbnQgb2JqZWN0LgogIworIyBAcGFyYW0gQW4gZWxlbWVudCBpbnN0YW5jZS4KKyMgQHJldHVybiBBIHRydWUgdmFsdWUgaWYgdGhpcyBpcyBhbiBlbGVtZW50IG9iamVjdC4KKyMgQGRlZnJldHVybiBmbGFnCisKK2RlZiBpc2VsZW1lbnQoZWxlbWVudCk6CisgICAgIyBGSVhNRTogbm90IHN1cmUgYWJvdXQgdGhpczsgbWlnaHQgYmUgYSBiZXR0ZXIgaWRlYSB0byBsb29rCisgICAgIyBmb3IgdGFnL2F0dHJpYi90ZXh0IGF0dHJpYnV0ZXMKKyAgICByZXR1cm4gaXNpbnN0YW5jZShlbGVtZW50LCBFbGVtZW50KSBvciBoYXNhdHRyKGVsZW1lbnQsICJ0YWciKQorCisjIworIyBFbGVtZW50IGNsYXNzLiAgVGhpcyBjbGFzcyBkZWZpbmVzIHRoZSBFbGVtZW50IGludGVyZmFjZSwgYW5kCisjIHByb3ZpZGVzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaW50ZXJmYWNlLgorIyA8cD4KKyMgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUKKyMgZWl0aGVyIEFTQ0lJIHN0cmluZ3MgKG9yZGluYXJ5IFB5dGhvbiBzdHJpbmdzIGNvbnRhaW5pbmcgb25seSA3LWJpdAorIyBBU0NJSSBjaGFyYWN0ZXJzKSBvciBVbmljb2RlIHN0cmluZ3MuCisjCisjIEBwYXJhbSB0YWcgVGhlIGVsZW1lbnQgbmFtZS4KKyMgQHBhcmFtIGF0dHJpYiBBbiBvcHRpb25hbCBkaWN0aW9uYXJ5LCBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4KKyMgQHBhcmFtICoqZXh0cmEgQWRkaXRpb25hbCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KICMgQHNlZSBFbGVtZW50CiAjIEBzZWUgU3ViRWxlbWVudAogIyBAc2VlIENvbW1lbnQKICMgQHNlZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KIAotY2xhc3MgX0VsZW1lbnRJbnRlcmZhY2U6CitjbGFzcyBFbGVtZW50KG9iamVjdCk6CiAgICAgIyA8dGFnIGF0dHJpYj50ZXh0PGNoaWxkLz4uLi48L3RhZz50YWlsCiAKICAgICAjIwpAQCAtMTY2LDM0ICsxNzgsNDEgQEAKIAogICAgICMjCiAgICAgIyAoQXR0cmlidXRlKSBFbGVtZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LiAgV2hlcmUgcG9zc2libGUsIHVzZQotICAgICMge0BsaW5rICNfRWxlbWVudEludGVyZmFjZS5nZXR9LAotICAgICMge0BsaW5rICNfRWxlbWVudEludGVyZmFjZS5zZXR9LAotICAgICMge0BsaW5rICNfRWxlbWVudEludGVyZmFjZS5rZXlzfSwgYW5kCi0gICAgIyB7QGxpbmsgI19FbGVtZW50SW50ZXJmYWNlLml0ZW1zfSB0byBhY2Nlc3MKKyAgICAjIHtAbGluayAjRWxlbWVudC5nZXR9LAorICAgICMge0BsaW5rICNFbGVtZW50LnNldH0sCisgICAgIyB7QGxpbmsgI0VsZW1lbnQua2V5c30sIGFuZAorICAgICMge0BsaW5rICNFbGVtZW50Lml0ZW1zfSB0byBhY2Nlc3MKICAgICAjIGVsZW1lbnQgYXR0cmlidXRlcy4KIAogICAgIGF0dHJpYiA9IE5vbmUKIAogICAgICMjCiAgICAgIyAoQXR0cmlidXRlKSBUZXh0IGJlZm9yZSBmaXJzdCBzdWJlbGVtZW50LiAgVGhpcyBpcyBlaXRoZXIgYQotICAgICMgc3RyaW5nIG9yIHRoZSB2YWx1ZSBOb25lLCBpZiB0aGVyZSB3YXMgbm8gdGV4dC4KKyAgICAjIHN0cmluZyBvciB0aGUgdmFsdWUgTm9uZS4gIE5vdGUgdGhhdCBpZiB0aGVyZSB3YXMgbm8gdGV4dCwgdGhpcworICAgICMgYXR0cmlidXRlIG1heSBiZSBlaXRoZXIgTm9uZSBvciBhbiBlbXB0eSBzdHJpbmcsIGRlcGVuZGluZyBvbgorICAgICMgdGhlIHBhcnNlci4KIAogICAgIHRleHQgPSBOb25lCiAKICAgICAjIwogICAgICMgKEF0dHJpYnV0ZSkgVGV4dCBhZnRlciB0aGlzIGVsZW1lbnQncyBlbmQgdGFnLCBidXQgYmVmb3JlIHRoZQogICAgICMgbmV4dCBzaWJsaW5nIGVsZW1lbnQncyBzdGFydCB0YWcuICBUaGlzIGlzIGVpdGhlciBhIHN0cmluZyBvcgotICAgICMgdGhlIHZhbHVlIE5vbmUsIGlmIHRoZXJlIHdhcyBubyB0ZXh0LgorICAgICMgdGhlIHZhbHVlIE5vbmUuICBOb3RlIHRoYXQgaWYgdGhlcmUgd2FzIG5vIHRleHQsIHRoaXMgYXR0cmlidXRlCisgICAgIyBtYXkgYmUgZWl0aGVyIE5vbmUgb3IgYW4gZW1wdHkgc3RyaW5nLCBkZXBlbmRpbmcgb24gdGhlIHBhcnNlci4KIAogICAgIHRhaWwgPSBOb25lICMgdGV4dCBhZnRlciBlbmQgdGFnLCBpZiBhbnkKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YWcsIGF0dHJpYik6CisgICAgIyBjb25zdHJ1Y3RvcgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhZywgYXR0cmliPXt9LCAqKmV4dHJhKToKKyAgICAgICAgYXR0cmliID0gYXR0cmliLmNvcHkoKQorICAgICAgICBhdHRyaWIudXBkYXRlKGV4dHJhKQogICAgICAgICBzZWxmLnRhZyA9IHRhZwogICAgICAgICBzZWxmLmF0dHJpYiA9IGF0dHJpYgogICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IFtdCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPEVsZW1lbnQgJXMgYXQgJXg+IiAlIChzZWxmLnRhZywgaWQoc2VsZikpCisgICAgICAgIHJldHVybiAiPEVsZW1lbnQgJXMgYXQgMHgleD4iICUgKHJlcHIoc2VsZi50YWcpLCBpZChzZWxmKSkKIAogICAgICMjCiAgICAgIyBDcmVhdGVzIGEgbmV3IGVsZW1lbnQgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhpcyBlbGVtZW50LgpAQCAtMjAzLDE4ICsyMjIsNDEgQEAKICAgICAjIEByZXR1cm4gQSBuZXcgZWxlbWVudCBpbnN0YW5jZS4KIAogICAgIGRlZiBtYWtlZWxlbWVudChzZWxmLCB0YWcsIGF0dHJpYik6Ci0gICAgICAgIHJldHVybiBFbGVtZW50KHRhZywgYXR0cmliKQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18odGFnLCBhdHRyaWIpCiAKICAgICAjIwotICAgICMgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1YmVsZW1lbnRzLgorICAgICMgKEV4cGVyaW1lbnRhbCkgQ29waWVzIHRoZSBjdXJyZW50IGVsZW1lbnQuICBUaGlzIGNyZWF0ZXMgYQorICAgICMgc2hhbGxvdyBjb3B5OyBzdWJlbGVtZW50cyB3aWxsIGJlIHNoYXJlZCB3aXRoIHRoZSBvcmlnaW5hbCB0cmVlLgorICAgICMKKyAgICAjIEByZXR1cm4gQSBuZXcgZWxlbWVudCBpbnN0YW5jZS4KKworICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICBlbGVtID0gc2VsZi5tYWtlZWxlbWVudChzZWxmLnRhZywgc2VsZi5hdHRyaWIpCisgICAgICAgIGVsZW0udGV4dCA9IHNlbGYudGV4dAorICAgICAgICBlbGVtLnRhaWwgPSBzZWxmLnRhaWwKKyAgICAgICAgZWxlbVs6XSA9IHNlbGYKKyAgICAgICAgcmV0dXJuIGVsZW0KKworICAgICMjCisgICAgIyBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3ViZWxlbWVudHMuICBOb3RlIHRoYXQgdGhpcyBvbmx5IGNvdW50cworICAgICMgZnVsbCBlbGVtZW50czsgdG8gY2hlY2sgaWYgdGhlcmUncyBhbnkgY29udGVudCBpbiBhbiBlbGVtZW50LCB5b3UKKyAgICAjIGhhdmUgdG8gY2hlY2sgYm90aCB0aGUgbGVuZ3RoIGFuZCB0aGUgPGI+dGV4dDwvYj4gYXR0cmlidXRlLgogICAgICMKICAgICAjIEByZXR1cm4gVGhlIG51bWJlciBvZiBzdWJlbGVtZW50cy4KIAogICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2NoaWxkcmVuKQogCisgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgIlRoZSBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCB3aWxsIGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCisgICAgICAgICAgICAiVXNlIHNwZWNpZmljICdsZW4oZWxlbSknIG9yICdlbGVtIGlzIG5vdCBOb25lJyB0ZXN0IGluc3RlYWQuIiwKKyAgICAgICAgICAgIEZ1dHVyZVdhcm5pbmcsIHN0YWNrbGV2ZWw9MgorICAgICAgICAgICAgKQorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2NoaWxkcmVuKSAhPSAwICMgZW11bGF0ZSBvbGQgYmVoYXZpb3VyLCBmb3Igbm93CisKICAgICAjIwotICAgICMgUmV0dXJucyB0aGUgZ2l2ZW4gc3ViZWxlbWVudC4KKyAgICAjIFJldHVybnMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgogICAgICMKICAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gcmV0dXJuLgogICAgICMgQHJldHVybiBUaGUgZ2l2ZW4gc3ViZWxlbWVudC4KQEAgLTIyNCwxOSArMjY2LDIyIEBACiAgICAgICAgIHJldHVybiBzZWxmLl9jaGlsZHJlbltpbmRleF0KIAogICAgICMjCi0gICAgIyBSZXBsYWNlcyB0aGUgZ2l2ZW4gc3ViZWxlbWVudC4KKyAgICAjIFJlcGxhY2VzIHRoZSBnaXZlbiBzdWJlbGVtZW50LCBieSBpbmRleC4KICAgICAjCiAgICAgIyBAcGFyYW0gaW5kZXggV2hhdCBzdWJlbGVtZW50IHRvIHJlcGxhY2UuCiAgICAgIyBAcGFyYW0gZWxlbWVudCBUaGUgbmV3IGVsZW1lbnQgdmFsdWUuCiAgICAgIyBAZXhjZXB0aW9uIEluZGV4RXJyb3IgSWYgdGhlIGdpdmVuIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuCi0gICAgIyBAZXhjZXB0aW9uIEFzc2VydGlvbkVycm9yIElmIGVsZW1lbnQgaXMgbm90IGEgdmFsaWQgb2JqZWN0LgogCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCBlbGVtZW50KToKLSAgICAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQorICAgICAgICAjIGlmIGlzaW5zdGFuY2UoaW5kZXgsIHNsaWNlKToKKyAgICAgICAgIyAgICAgZm9yIGVsdCBpbiBlbGVtZW50OgorICAgICAgICAjICAgICAgICAgYXNzZXJ0IGlzZWxlbWVudChlbHQpCisgICAgICAgICMgZWxzZToKKyAgICAgICAgIyAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9jaGlsZHJlbltpbmRleF0gPSBlbGVtZW50CiAKICAgICAjIwotICAgICMgRGVsZXRlcyB0aGUgZ2l2ZW4gc3ViZWxlbWVudC4KKyAgICAjIERlbGV0ZXMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgogICAgICMKICAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gZGVsZXRlLgogICAgICMgQGV4Y2VwdGlvbiBJbmRleEVycm9yIElmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGV4aXN0LgpAQCAtMjQ1LDExOCArMjkwLDEyMSBAQAogICAgICAgICBkZWwgc2VsZi5fY2hpbGRyZW5baW5kZXhdCiAKICAgICAjIwotICAgICMgUmV0dXJucyBhIGxpc3QgY29udGFpbmluZyBzdWJlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gcmFuZ2UuCi0gICAgIwotICAgICMgQHBhcmFtIHN0YXJ0IFRoZSBmaXJzdCBzdWJlbGVtZW50IHRvIHJldHVybi4KLSAgICAjIEBwYXJhbSBzdG9wIFRoZSBmaXJzdCBzdWJlbGVtZW50IHRoYXQgc2hvdWxkbid0IGJlIHJldHVybmVkLgotICAgICMgQHJldHVybiBBIHNlcXVlbmNlIG9iamVjdCBjb250YWluaW5nIHN1YmVsZW1lbnRzLgotCi0gICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBzdGFydCwgc3RvcCk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9jaGlsZHJlbltzdGFydDpzdG9wXQotCi0gICAgIyMKLSAgICAjIFJlcGxhY2VzIGEgbnVtYmVyIG9mIHN1YmVsZW1lbnRzIHdpdGggZWxlbWVudHMgZnJvbSBhIHNlcXVlbmNlLgotICAgICMKLSAgICAjIEBwYXJhbSBzdGFydCBUaGUgZmlyc3Qgc3ViZWxlbWVudCB0byByZXBsYWNlLgotICAgICMgQHBhcmFtIHN0b3AgVGhlIGZpcnN0IHN1YmVsZW1lbnQgdGhhdCBzaG91bGRuJ3QgYmUgcmVwbGFjZWQuCi0gICAgIyBAcGFyYW0gZWxlbWVudHMgQSBzZXF1ZW5jZSBvYmplY3Qgd2l0aCB6ZXJvIG9yIG1vcmUgZWxlbWVudHMuCi0gICAgIyBAZXhjZXB0aW9uIEFzc2VydGlvbkVycm9yIElmIGEgc2VxdWVuY2UgbWVtYmVyIGlzIG5vdCBhIHZhbGlkIG9iamVjdC4KLQotICAgIGRlZiBfX3NldHNsaWNlX18oc2VsZiwgc3RhcnQsIHN0b3AsIGVsZW1lbnRzKToKLSAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6Ci0gICAgICAgICAgICBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCi0gICAgICAgIHNlbGYuX2NoaWxkcmVuW3N0YXJ0OnN0b3BdID0gbGlzdChlbGVtZW50cykKLQotICAgICMjCi0gICAgIyBEZWxldGVzIGEgbnVtYmVyIG9mIHN1YmVsZW1lbnRzLgotICAgICMKLSAgICAjIEBwYXJhbSBzdGFydCBUaGUgZmlyc3Qgc3ViZWxlbWVudCB0byBkZWxldGUuCi0gICAgIyBAcGFyYW0gc3RvcCBUaGUgZmlyc3Qgc3ViZWxlbWVudCB0byBsZWF2ZSBpbiB0aGVyZS4KLQotICAgIGRlZiBfX2RlbHNsaWNlX18oc2VsZiwgc3RhcnQsIHN0b3ApOgotICAgICAgICBkZWwgc2VsZi5fY2hpbGRyZW5bc3RhcnQ6c3RvcF0KLQotICAgICMjCi0gICAgIyBBZGRzIGEgc3ViZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoaXMgZWxlbWVudC4KKyAgICAjIEFkZHMgYSBzdWJlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhpcyBlbGVtZW50LiAgSW4gZG9jdW1lbnQgb3JkZXIsCisgICAgIyB0aGUgbmV3IGVsZW1lbnQgd2lsbCBhcHBlYXIgYWZ0ZXIgdGhlIGxhc3QgZXhpc3Rpbmcgc3ViZWxlbWVudCAob3IKKyAgICAjIGRpcmVjdGx5IGFmdGVyIHRoZSB0ZXh0LCBpZiBpdCdzIHRoZSBmaXJzdCBzdWJlbGVtZW50KSwgYnV0IGJlZm9yZQorICAgICMgdGhlIGVuZCB0YWcgZm9yIHRoaXMgZWxlbWVudC4KICAgICAjCiAgICAgIyBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBhZGQuCi0gICAgIyBAZXhjZXB0aW9uIEFzc2VydGlvbkVycm9yIElmIGEgc2VxdWVuY2UgbWVtYmVyIGlzIG5vdCBhIHZhbGlkIG9iamVjdC4KIAogICAgIGRlZiBhcHBlbmQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgIyBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuLmFwcGVuZChlbGVtZW50KQogCiAgICAgIyMKKyAgICAjIEFwcGVuZHMgc3ViZWxlbWVudHMgZnJvbSBhIHNlcXVlbmNlLgorICAgICMKKyAgICAjIEBwYXJhbSBlbGVtZW50cyBBIHNlcXVlbmNlIG9iamVjdCB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cy4KKyAgICAjIEBzaW5jZSAxLjMKKworICAgIGRlZiBleHRlbmQoc2VsZiwgZWxlbWVudHMpOgorICAgICAgICAjIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAjICAgICBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCisgICAgICAgIHNlbGYuX2NoaWxkcmVuLmV4dGVuZChlbGVtZW50cykKKworICAgICMjCiAgICAgIyBJbnNlcnRzIGEgc3ViZWxlbWVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhpcyBlbGVtZW50LgogICAgICMKICAgICAjIEBwYXJhbSBpbmRleCBXaGVyZSB0byBpbnNlcnQgdGhlIG5ldyBzdWJlbGVtZW50LgotICAgICMgQGV4Y2VwdGlvbiBBc3NlcnRpb25FcnJvciBJZiB0aGUgZWxlbWVudCBpcyBub3QgYSB2YWxpZCBvYmplY3QuCiAKICAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCBlbGVtZW50KToKLSAgICAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQorICAgICAgICAjIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCBlbGVtZW50KQogCiAgICAgIyMKICAgICAjIFJlbW92ZXMgYSBtYXRjaGluZyBzdWJlbGVtZW50LiAgVW5saWtlIHRoZSA8Yj5maW5kPC9iPiBtZXRob2RzLAogICAgICMgdGhpcyBtZXRob2QgY29tcGFyZXMgZWxlbWVudHMgYmFzZWQgb24gaWRlbnRpdHksIG5vdCBvbiB0YWcKLSAgICAjIHZhbHVlIG9yIGNvbnRlbnRzLgorICAgICMgdmFsdWUgb3IgY29udGVudHMuICBUbyByZW1vdmUgc3ViZWxlbWVudHMgYnkgb3RoZXIgbWVhbnMsIHRoZQorICAgICMgZWFzaWVzdCB3YXkgaXMgb2Z0ZW4gdG8gdXNlIGEgbGlzdCBjb21wcmVoZW5zaW9uIHRvIHNlbGVjdCB3aGF0CisgICAgIyBlbGVtZW50cyB0byBrZWVwLCBhbmQgdXNlIHNsaWNlIGFzc2lnbm1lbnQgdG8gdXBkYXRlIHRoZSBwYXJlbnQKKyAgICAjIGVsZW1lbnQuCiAgICAgIwogICAgICMgQHBhcmFtIGVsZW1lbnQgV2hhdCBlbGVtZW50IHRvIHJlbW92ZS4KICAgICAjIEBleGNlcHRpb24gVmFsdWVFcnJvciBJZiBhIG1hdGNoaW5nIGVsZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLgotICAgICMgQGV4Y2VwdGlvbiBBc3NlcnRpb25FcnJvciBJZiB0aGUgZWxlbWVudCBpcyBub3QgYSB2YWxpZCBvYmplY3QuCiAKICAgICBkZWYgcmVtb3ZlKHNlbGYsIGVsZW1lbnQpOgotICAgICAgICBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCisgICAgICAgICMgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9jaGlsZHJlbi5yZW1vdmUoZWxlbWVudCkKIAogICAgICMjCi0gICAgIyBSZXR1cm5zIGFsbCBzdWJlbGVtZW50cy4gIFRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gZG9jdW1lbnQKLSAgICAjIG9yZGVyLgorICAgICMgKERlcHJlY2F0ZWQpIFJldHVybnMgYWxsIHN1YmVsZW1lbnRzLiAgVGhlIGVsZW1lbnRzIGFyZSByZXR1cm5lZAorICAgICMgaW4gZG9jdW1lbnQgb3JkZXIuCiAgICAgIwogICAgICMgQHJldHVybiBBIGxpc3Qgb2Ygc3ViZWxlbWVudHMuCiAgICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgRWxlbWVudCBpbnN0YW5jZXMKIAogICAgIGRlZiBnZXRjaGlsZHJlbihzZWxmKToKKyAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICJUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiAgIgorICAgICAgICAgICAgIlVzZSAnbGlzdChlbGVtKScgb3IgaXRlcmF0aW9uIG92ZXIgZWxlbSBpbnN0ZWFkLiIsCisgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MgorICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fY2hpbGRyZW4KIAogICAgICMjCiAgICAgIyBGaW5kcyB0aGUgZmlyc3QgbWF0Y2hpbmcgc3ViZWxlbWVudCwgYnkgdGFnIG5hbWUgb3IgcGF0aC4KICAgICAjCiAgICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCisgICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KICAgICAjIEByZXR1cm4gVGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCiAgICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQgb3IgTm9uZQogCi0gICAgZGVmIGZpbmQoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kKHNlbGYsIHBhdGgpCisgICAgZGVmIGZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKIAogICAgICMjCiAgICAgIyBGaW5kcyB0ZXh0IGZvciB0aGUgZmlyc3QgbWF0Y2hpbmcgc3ViZWxlbWVudCwgYnkgdGFnIG5hbWUgb3IgcGF0aC4KICAgICAjCiAgICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCiAgICAgIyBAcGFyYW0gZGVmYXVsdCBXaGF0IHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90IGZvdW5kLgorICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCiAgICAgIyBAcmV0dXJuIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIHRoZQogICAgICMgICAgIGRlZmF1bHQgdmFsdWUgbm8gZWxlbWVudCB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgdGhlIGVsZW1lbnQKLSAgICAjICAgICBoYXMgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCisgICAgIyAgICAgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCiAgICAgIyAgICAgZW1wdHkgc3RyaW5nLgogICAgICMgQGRlZnJldHVybiBzdHJpbmcKIAotICAgIGRlZiBmaW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0PU5vbmUpOgotICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdCkKKyAgICBkZWYgZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdD1Ob25lLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdCwgbmFtZXNwYWNlcykKIAogICAgICMjCiAgICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCiAgICAgIwogICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQHJldHVybiBBIGxpc3Qgb3IgaXRlcmF0b3IgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCisgICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KKyAgICAjIEByZXR1cm4gQSBsaXN0IG9yIG90aGVyIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAogICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCiAgICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgRWxlbWVudCBpbnN0YW5jZXMKIAotICAgIGRlZiBmaW5kYWxsKHNlbGYsIHBhdGgpOgotICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZGFsbChzZWxmLCBwYXRoKQorICAgIGRlZiBmaW5kYWxsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kYWxsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpCisKKyAgICAjIworICAgICMgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLgorICAgICMKKyAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KKyAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgorICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBvciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKKyAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgorICAgICMgQGRlZnJldHVybiBhIGdlbmVyYXRlZCBzZXF1ZW5jZSBvZiBFbGVtZW50IGluc3RhbmNlcworCisgICAgZGVmIGl0ZXJmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5pdGVyZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzKQogCiAgICAgIyMKICAgICAjIFJlc2V0cyBhbiBlbGVtZW50LiAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIGFsbCBzdWJlbGVtZW50cywgY2xlYXJzCi0gICAgIyBhbGwgYXR0cmlidXRlcywgYW5kIHNldHMgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcyB0byBOb25lLgorICAgICMgYWxsIGF0dHJpYnV0ZXMsIGFuZCBzZXRzIHRoZSA8Yj50ZXh0PC9iPiBhbmQgPGI+dGFpbDwvYj4gYXR0cmlidXRlcworICAgICMgdG8gTm9uZS4KIAogICAgIGRlZiBjbGVhcihzZWxmKToKICAgICAgICAgc2VsZi5hdHRyaWIuY2xlYXIoKQpAQCAtMzY0LDcgKzQxMiw4IEBACiAgICAgICAgIHNlbGYudGV4dCA9IHNlbGYudGFpbCA9IE5vbmUKIAogICAgICMjCi0gICAgIyBHZXRzIGFuIGVsZW1lbnQgYXR0cmlidXRlLgorICAgICMgR2V0cyBhbiBlbGVtZW50IGF0dHJpYnV0ZS4gIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliLmdldDwvYj4sIGJ1dAorICAgICMgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZSB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50bHkuCiAgICAgIwogICAgICMgQHBhcmFtIGtleSBXaGF0IGF0dHJpYnV0ZSB0byBsb29rIGZvci4KICAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KQEAgLTM3Niw3ICs0MjUsOCBAQAogICAgICAgICByZXR1cm4gc2VsZi5hdHRyaWIuZ2V0KGtleSwgZGVmYXVsdCkKIAogICAgICMjCi0gICAgIyBTZXRzIGFuIGVsZW1lbnQgYXR0cmlidXRlLgorICAgICMgU2V0cyBhbiBlbGVtZW50IGF0dHJpYnV0ZS4gIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliW2tleV0gPSB2YWx1ZTwvYj4sCisgICAgIyBidXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZSB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50bHkuCiAgICAgIwogICAgICMgQHBhcmFtIGtleSBXaGF0IGF0dHJpYnV0ZSB0byBzZXQuCiAgICAgIyBAcGFyYW0gdmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZS4KQEAgLTM4Nyw2ICs0MzcsNyBAQAogICAgICMjCiAgICAgIyBHZXRzIGEgbGlzdCBvZiBhdHRyaWJ1dGUgbmFtZXMuICBUaGUgbmFtZXMgYXJlIHJldHVybmVkIGluIGFuCiAgICAgIyBhcmJpdHJhcnkgb3JkZXIgKGp1c3QgbGlrZSBmb3IgYW4gb3JkaW5hcnkgUHl0aG9uIGRpY3Rpb25hcnkpLgorICAgICMgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIua2V5cygpPC9iPi4KICAgICAjCiAgICAgIyBAcmV0dXJuIEEgbGlzdCBvZiBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lcy4KICAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBzdHJpbmdzCkBAIC0zOTYsNyArNDQ3LDcgQEAKIAogICAgICMjCiAgICAgIyBHZXRzIGVsZW1lbnQgYXR0cmlidXRlcywgYXMgYSBzZXF1ZW5jZS4gIFRoZSBhdHRyaWJ1dGVzIGFyZQotICAgICMgcmV0dXJuZWQgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLgorICAgICMgcmV0dXJuZWQgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIuaXRlbXMoKTwvYj4uCiAgICAgIwogICAgICMgQHJldHVybiBBIGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMgZm9yIGFsbCBhdHRyaWJ1dGVzLgogICAgICMgQGRlZnJldHVybiBsaXN0IG9mIChzdHJpbmcsIHN0cmluZykgdHVwbGVzCkBAIC00MDksNDUgKzQ2MCw1NSBAQAogICAgICMgYW5kIGFsbCBzdWJlbGVtZW50cywgaW4gZG9jdW1lbnQgb3JkZXIsIGFuZCByZXR1cm5zIGFsbCBlbGVtZW50cwogICAgICMgd2l0aCBhIG1hdGNoaW5nIHRhZy4KICAgICAjIDxwPgotICAgICMgSWYgdGhlIHRyZWUgc3RydWN0dXJlIGlzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24sIHRoZSByZXN1bHQKLSAgICAjIGlzIHVuZGVmaW5lZC4KKyAgICAjIElmIHRoZSB0cmVlIHN0cnVjdHVyZSBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLCBuZXcgb3IgcmVtb3ZlZAorICAgICMgZWxlbWVudHMgbWF5IG9yIG1heSBub3QgYmUgaW5jbHVkZWQuICBUbyBnZXQgYSBzdGFibGUgc2V0LCB1c2UgdGhlCisgICAgIyBsaXN0KCkgZnVuY3Rpb24gb24gdGhlIGl0ZXJhdG9yLCBhbmQgbG9vcCBvdmVyIHRoZSByZXN1bHRpbmcgbGlzdC4KICAgICAjCiAgICAgIyBAcGFyYW0gdGFnIFdoYXQgdGFncyB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKS4KLSAgICAjIEByZXR1cm4gQSBsaXN0IG9yIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGluZyBlbGVtZW50cy4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvciBpdGVyYXRvcgorICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBjb250YWluaW5nIGFsbCB0aGUgbWF0Y2hpbmcgZWxlbWVudHMuCisgICAgIyBAZGVmcmV0dXJuIGl0ZXJhdG9yCiAKLSAgICBkZWYgZ2V0aXRlcmF0b3Ioc2VsZiwgdGFnPU5vbmUpOgotICAgICAgICBub2RlcyA9IFtdCisgICAgZGVmIGl0ZXIoc2VsZiwgdGFnPU5vbmUpOgogICAgICAgICBpZiB0YWcgPT0gIioiOgogICAgICAgICAgICAgdGFnID0gTm9uZQogICAgICAgICBpZiB0YWcgaXMgTm9uZSBvciBzZWxmLnRhZyA9PSB0YWc6Ci0gICAgICAgICAgICBub2Rlcy5hcHBlbmQoc2VsZikKLSAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5fY2hpbGRyZW46Ci0gICAgICAgICAgICBub2Rlcy5leHRlbmQobm9kZS5nZXRpdGVyYXRvcih0YWcpKQotICAgICAgICByZXR1cm4gbm9kZXMKKyAgICAgICAgICAgIHlpZWxkIHNlbGYKKyAgICAgICAgZm9yIGUgaW4gc2VsZi5fY2hpbGRyZW46CisgICAgICAgICAgICBmb3IgZSBpbiBlLml0ZXIodGFnKToKKyAgICAgICAgICAgICAgICB5aWVsZCBlCisKKyAgICAjIGNvbXBhdGliaWxpdHkKKyAgICBkZWYgZ2V0aXRlcmF0b3Ioc2VsZiwgdGFnPU5vbmUpOgorICAgICAgICAjIENoYW5nZSBmb3IgYSBEZXByZWNhdGlvbldhcm5pbmcgaW4gMS40CisgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAiVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gICIKKyAgICAgICAgICAgICJVc2UgJ2VsZW0uaXRlcigpJyBvciAnbGlzdChlbGVtLml0ZXIoKSknIGluc3RlYWQuIiwKKyAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MgorICAgICAgICApCisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuaXRlcih0YWcpKQorCisgICAgIyMKKyAgICAjIENyZWF0ZXMgYSB0ZXh0IGl0ZXJhdG9yLiAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhpcyBlbGVtZW50CisgICAgIyBhbmQgYWxsIHN1YmVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlciwgYW5kIHJldHVybnMgYWxsIGlubmVyCisgICAgIyB0ZXh0LgorICAgICMKKyAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3IgY29udGFpbmluZyBhbGwgaW5uZXIgdGV4dC4KKyAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKKworICAgIGRlZiBpdGVydGV4dChzZWxmKToKKyAgICAgICAgdGFnID0gc2VsZi50YWcKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGFnLCBiYXNlc3RyaW5nKSBhbmQgdGFnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYudGV4dDoKKyAgICAgICAgICAgIHlpZWxkIHNlbGYudGV4dAorICAgICAgICBmb3IgZSBpbiBzZWxmOgorICAgICAgICAgICAgZm9yIHMgaW4gZS5pdGVydGV4dCgpOgorICAgICAgICAgICAgICAgIHlpZWxkIHMKKyAgICAgICAgICAgIGlmIGUudGFpbDoKKyAgICAgICAgICAgICAgICB5aWVsZCBlLnRhaWwKIAogIyBjb21wYXRpYmlsaXR5Ci1fRWxlbWVudCA9IF9FbGVtZW50SW50ZXJmYWNlCi0KLSMjCi0jIEVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHRoZQotIyBzdGFuZGFyZCBFbGVtZW50IGludGVyZmFjZS4gIFRoZSBleGFjdCBjbGFzcyBvciB0eXBlIG9mIHRoYXQgb2JqZWN0Ci0jIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudCwgYnV0IGl0IHdpbGwgYWx3YXlzIGJlIGNvbXBhdGlibGUgd2l0aAotIyB0aGUge0BsaW5rICNfRWxlbWVudEludGVyZmFjZX0gY2xhc3MgaW4gdGhpcyBtb2R1bGUuCi0jIDxwPgotIyBUaGUgZWxlbWVudCBuYW1lLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZQotIyBlaXRoZXIgOC1iaXQgQVNDSUkgc3RyaW5ncyBvciBVbmljb2RlIHN0cmluZ3MuCi0jCi0jIEBwYXJhbSB0YWcgVGhlIGVsZW1lbnQgbmFtZS4KLSMgQHBhcmFtIGF0dHJpYiBBbiBvcHRpb25hbCBkaWN0aW9uYXJ5LCBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4KLSMgQHBhcmFtICoqZXh0cmEgQWRkaXRpb25hbCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KLSMgQHJldHVybiBBbiBlbGVtZW50IGluc3RhbmNlLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQotZGVmIEVsZW1lbnQodGFnLCBhdHRyaWI9e30sICoqZXh0cmEpOgotICAgIGF0dHJpYiA9IGF0dHJpYi5jb3B5KCkKLSAgICBhdHRyaWIudXBkYXRlKGV4dHJhKQotICAgIHJldHVybiBfRWxlbWVudEludGVyZmFjZSh0YWcsIGF0dHJpYikKK19FbGVtZW50ID0gX0VsZW1lbnRJbnRlcmZhY2UgPSBFbGVtZW50CiAKICMjCiAjIFN1YmVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQKQEAgLTQ3Miw3ICs1MzMsOCBAQAogCiAjIwogIyBDb21tZW50IGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbAotIyBlbGVtZW50IHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBjb21tZW50LgorIyBlbGVtZW50IHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBjb21tZW50IGJ5IHRoZSBzdGFuZGFyZAorIyBzZXJpYWxpemVyLgogIyA8cD4KICMgVGhlIGNvbW1lbnQgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYW4gOC1iaXQgQVNDSUkgc3RyaW5nIG9yIGEgVW5pY29kZQogIyBzdHJpbmcuCkBAIC00ODgsNyArNTUwLDggQEAKIAogIyMKICMgUEkgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQKLSMgdGhhdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgYW4gWE1MIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uCisjIHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGJ5IHRoZSBzdGFuZGFyZAorIyBzZXJpYWxpemVyLgogIwogIyBAcGFyYW0gdGFyZ2V0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIHRhcmdldC4KICMgQHBhcmFtIHRleHQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgUEkgY29udGVudHMsIGlmIGFueS4KQEAgLTUxNCw3ICs1NzcsNyBAQAogIyAgICAgYW4gVVJJLCBhbmQgdGhpcyBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBhIGxvY2FsIG5hbWUuCiAjIEByZXR1cm4gQW4gb3BhcXVlIG9iamVjdCwgcmVwcmVzZW50aW5nIHRoZSBRTmFtZS4KIAotY2xhc3MgUU5hbWU6CitjbGFzcyBRTmFtZShvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0X29yX3VyaSwgdGFnPU5vbmUpOgogICAgICAgICBpZiB0YWc6CiAgICAgICAgICAgICB0ZXh0X29yX3VyaSA9ICJ7JXN9JXMiICUgKHRleHRfb3JfdXJpLCB0YWcpCkBAIC01MjgsMTkgKzU5MSwyMSBAQAogICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLnRleHQsIG90aGVyLnRleHQpCiAgICAgICAgIHJldHVybiBjbXAoc2VsZi50ZXh0LCBvdGhlcikKIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiAjIwogIyBFbGVtZW50VHJlZSB3cmFwcGVyIGNsYXNzLiAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGVudGlyZSBlbGVtZW50CiAjIGhpZXJhcmNoeSwgYW5kIGFkZHMgc29tZSBleHRyYSBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tCiAjIHN0YW5kYXJkIFhNTC4KICMKICMgQHBhcmFtIGVsZW1lbnQgT3B0aW9uYWwgcm9vdCBlbGVtZW50LgotIyBAa2V5cGFyYW0gZmlsZSBPcHRpb25hbCBmaWxlIGhhbmRsZSBvciBuYW1lLiAgSWYgZ2l2ZW4sIHRoZQorIyBAa2V5cGFyYW0gZmlsZSBPcHRpb25hbCBmaWxlIGhhbmRsZSBvciBmaWxlIG5hbWUuICBJZiBnaXZlbiwgdGhlCiAjICAgICB0cmVlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoaXMgWE1MIGZpbGUuCiAKLWNsYXNzIEVsZW1lbnRUcmVlOgorY2xhc3MgRWxlbWVudFRyZWUob2JqZWN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50PU5vbmUsIGZpbGU9Tm9uZSk6Ci0gICAgICAgIGFzc2VydCBlbGVtZW50IGlzIE5vbmUgb3IgaXNlbGVtZW50KGVsZW1lbnQpCisgICAgICAgICMgYXNzZXJ0IGVsZW1lbnQgaXMgTm9uZSBvciBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fcm9vdCA9IGVsZW1lbnQgIyBmaXJzdCBub2RlCiAgICAgICAgIGlmIGZpbGU6CiAgICAgICAgICAgICBzZWxmLnBhcnNlKGZpbGUpCkBAIC01NjIsMjUgKzYyNywyNyBAQAogICAgICMgQHBhcmFtIGVsZW1lbnQgQW4gZWxlbWVudCBpbnN0YW5jZS4KIAogICAgIGRlZiBfc2V0cm9vdChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQorICAgICAgICAjIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fcm9vdCA9IGVsZW1lbnQKIAogICAgICMjCiAgICAgIyBMb2FkcyBhbiBleHRlcm5hbCBYTUwgZG9jdW1lbnQgaW50byB0aGlzIGVsZW1lbnQgdHJlZS4KICAgICAjCi0gICAgIyBAcGFyYW0gc291cmNlIEEgZmlsZSBuYW1lIG9yIGZpbGUgb2JqZWN0LgotICAgICMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotICAgICMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxUcmVlQnVpbGRlcn0gcGFyc2VyIGlzIHVzZWQuCisgICAgIyBAcGFyYW0gc291cmNlIEEgZmlsZSBuYW1lIG9yIGZpbGUgb2JqZWN0LiAgSWYgYSBmaWxlIG9iamVjdCBpcworICAgICMgICAgIGdpdmVuLCBpdCBvbmx5IGhhcyB0byBpbXBsZW1lbnQgYSA8Yj5yZWFkKG4pPC9iPiBtZXRob2QuCisgICAgIyBAa2V5cGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCisgICAgIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCiAgICAgIyBAcmV0dXJuIFRoZSBkb2N1bWVudCByb290IGVsZW1lbnQuCiAgICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKKyAgICAjIEBleGNlcHRpb24gUGFyc2VFcnJvciBJZiB0aGUgcGFyc2VyIGZhaWxzIHRvIHBhcnNlIHRoZSBkb2N1bWVudC4KIAogICAgIGRlZiBwYXJzZShzZWxmLCBzb3VyY2UsIHBhcnNlcj1Ob25lKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAicmVhZCIpOgogICAgICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICJyYiIpCiAgICAgICAgIGlmIG5vdCBwYXJzZXI6Ci0gICAgICAgICAgICBwYXJzZXIgPSBYTUxUcmVlQnVpbGRlcigpCisgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBkYXRhID0gc291cmNlLnJlYWQoMzI3NjgpCisgICAgICAgICAgICBkYXRhID0gc291cmNlLnJlYWQoNjU1MzYpCiAgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKQEAgLTU5NSwyMyArNjYyLDQwIEBACiAgICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yLgogICAgICMgQGRlZnJldHVybiBpdGVyYXRvcgogCisgICAgZGVmIGl0ZXIoc2VsZiwgdGFnPU5vbmUpOgorICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9yb290Lml0ZXIodGFnKQorCisgICAgIyBjb21wYXRpYmlsaXR5CiAgICAgZGVmIGdldGl0ZXJhdG9yKHNlbGYsIHRhZz1Ob25lKToKLSAgICAgICAgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZ2V0aXRlcmF0b3IodGFnKQorICAgICAgICAjIENoYW5nZSBmb3IgYSBEZXByZWNhdGlvbldhcm5pbmcgaW4gMS40CisgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAiVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gICIKKyAgICAgICAgICAgICJVc2UgJ3RyZWUuaXRlcigpJyBvciAnbGlzdCh0cmVlLml0ZXIoKSknIGluc3RlYWQuIiwKKyAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MgorICAgICAgICApCisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuaXRlcih0YWcpKQogCiAgICAgIyMKICAgICAjIEZpbmRzIHRoZSBmaXJzdCB0b3BsZXZlbCBlbGVtZW50IHdpdGggZ2l2ZW4gdGFnLgogICAgICMgU2FtZSBhcyBnZXRyb290KCkuZmluZChwYXRoKS4KICAgICAjCiAgICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCisgICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KICAgICAjIEByZXR1cm4gVGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCiAgICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQgb3IgTm9uZQogCi0gICAgZGVmIGZpbmQoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCisgICAgZGVmIGZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aAotICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5maW5kKHBhdGgpCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICJUaGlzIHNlYXJjaCBpcyBicm9rZW4gaW4gMS4zIGFuZCBlYXJsaWVyLCBhbmQgd2lsbCBiZSAiCisgICAgICAgICAgICAgICAgImZpeGVkIGluIGEgZnV0dXJlIHZlcnNpb24uICBJZiB5b3UgcmVseSBvbiB0aGUgY3VycmVudCAiCisgICAgICAgICAgICAgICAgImJlaGF2aW91ciwgY2hhbmdlIGl0IHRvICVyIiAlIHBhdGgsCisgICAgICAgICAgICAgICAgRnV0dXJlV2FybmluZywgc3RhY2tsZXZlbD0yCisgICAgICAgICAgICAgICAgKQorICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5maW5kKHBhdGgsIG5hbWVzcGFjZXMpCiAKICAgICAjIwogICAgICMgRmluZHMgdGhlIGVsZW1lbnQgdGV4dCBmb3IgdGhlIGZpcnN0IHRvcGxldmVsIGVsZW1lbnQgd2l0aCBnaXZlbgpAQCAtNjE5LDExNCArNzAzLDQ0NSBAQAogICAgICMKICAgICAjIEBwYXJhbSBwYXRoIFdoYXQgdG9wbGV2ZWwgZWxlbWVudCB0byBsb29rIGZvci4KICAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQuCisgICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KICAgICAjIEByZXR1cm4gVGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgdGhlCiAgICAgIyAgICAgZGVmYXVsdCB2YWx1ZSBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudAotICAgICMgICAgIGhhcyBpcyBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0IGNvbnRlbnQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4KKyAgICAjICAgICBpcyBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0IGNvbnRlbnQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4KICAgICAjICAgICBlbXB0eSBzdHJpbmcuCiAgICAgIyBAZGVmcmV0dXJuIHN0cmluZwogCi0gICAgZGVmIGZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQ9Tm9uZSk6Ci0gICAgICAgIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCisgICAgZGVmIGZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQ9Tm9uZSwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aAotICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5maW5kdGV4dChwYXRoLCBkZWZhdWx0KQorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiVGhpcyBzZWFyY2ggaXMgYnJva2VuIGluIDEuMyBhbmQgZWFybGllciwgYW5kIHdpbGwgYmUgIgorICAgICAgICAgICAgICAgICJmaXhlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAgSWYgeW91IHJlbHkgb24gdGhlIGN1cnJlbnQgIgorICAgICAgICAgICAgICAgICJiZWhhdmlvdXIsIGNoYW5nZSBpdCB0byAlciIgJSBwYXRoLAorICAgICAgICAgICAgICAgIEZ1dHVyZVdhcm5pbmcsIHN0YWNrbGV2ZWw9MgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZHRleHQocGF0aCwgZGVmYXVsdCwgbmFtZXNwYWNlcykKIAogICAgICMjCiAgICAgIyBGaW5kcyBhbGwgdG9wbGV2ZWwgZWxlbWVudHMgd2l0aCB0aGUgZ2l2ZW4gdGFnLgogICAgICMgU2FtZSBhcyBnZXRyb290KCkuZmluZGFsbChwYXRoKS4KICAgICAjCiAgICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCisgICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KICAgICAjIEByZXR1cm4gQSBsaXN0IG9yIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAogICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCiAgICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgRWxlbWVudCBpbnN0YW5jZXMKIAotICAgIGRlZiBmaW5kYWxsKHNlbGYsIHBhdGgpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQorICAgIGRlZiBmaW5kYWxsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZGFsbChwYXRoKQorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiVGhpcyBzZWFyY2ggaXMgYnJva2VuIGluIDEuMyBhbmQgZWFybGllciwgYW5kIHdpbGwgYmUgIgorICAgICAgICAgICAgICAgICJmaXhlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAgSWYgeW91IHJlbHkgb24gdGhlIGN1cnJlbnQgIgorICAgICAgICAgICAgICAgICJiZWhhdmlvdXIsIGNoYW5nZSBpdCB0byAlciIgJSBwYXRoLAorICAgICAgICAgICAgICAgIEZ1dHVyZVdhcm5pbmcsIHN0YWNrbGV2ZWw9MgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZGFsbChwYXRoLCBuYW1lc3BhY2VzKQorCisgICAgIyMKKyAgICAjIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKyAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLml0ZXJmaW5kKHBhdGgpLgorICAgICMKKyAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KKyAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgorICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBvciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKKyAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgorICAgICMgQGRlZnJldHVybiBhIGdlbmVyYXRlZCBzZXF1ZW5jZSBvZiBFbGVtZW50IGluc3RhbmNlcworCisgICAgZGVmIGl0ZXJmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKKyAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgorICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIlRoaXMgc2VhcmNoIGlzIGJyb2tlbiBpbiAxLjMgYW5kIGVhcmxpZXIsIGFuZCB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAiZml4ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gIElmIHlvdSByZWx5IG9uIHRoZSBjdXJyZW50ICIKKyAgICAgICAgICAgICAgICAiYmVoYXZpb3VyLCBjaGFuZ2UgaXQgdG8gJXIiICUgcGF0aCwKKyAgICAgICAgICAgICAgICBGdXR1cmVXYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHJldHVybiBzZWxmLl9yb290Lml0ZXJmaW5kKHBhdGgsIG5hbWVzcGFjZXMpCiAKICAgICAjIwogICAgICMgV3JpdGVzIHRoZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlLCBhcyBYTUwuCiAgICAgIworICAgICMgQGRlZiB3cml0ZShmaWxlLCAqKm9wdGlvbnMpCiAgICAgIyBAcGFyYW0gZmlsZSBBIGZpbGUgbmFtZSwgb3IgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHdyaXRpbmcuCi0gICAgIyBAcGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KKyAgICAjIEBwYXJhbSAqKm9wdGlvbnMgT3B0aW9ucywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCisgICAgIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KKyAgICAjIEBrZXlwYXJhbSBtZXRob2QgT3B0aW9uYWwgb3V0cHV0IG1ldGhvZCAoInhtbCIsICJodG1sIiwgInRleHQiIG9yCisgICAgIyAgICAgImMxNG4iOyBkZWZhdWx0IGlzICJ4bWwiKS4KKyAgICAjIEBrZXlwYXJhbSB4bWxfZGVjbGFyYXRpb24gQ29udHJvbHMgaWYgYW4gWE1MIGRlY2xhcmF0aW9uIHNob3VsZAorICAgICMgICAgIGJlIGFkZGVkIHRvIHRoZSBmaWxlLiAgVXNlIEZhbHNlIGZvciBuZXZlciwgVHJ1ZSBmb3IgYWx3YXlzLAorICAgICMgICAgIE5vbmUgZm9yIG9ubHkgaWYgbm90IFVTLUFTQ0lJIG9yIFVURi04LiAgTm9uZSBpcyBkZWZhdWx0LgogCi0gICAgZGVmIHdyaXRlKHNlbGYsIGZpbGUsIGVuY29kaW5nPSJ1cy1hc2NpaSIpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQotICAgICAgICBpZiBub3QgaGFzYXR0cihmaWxlLCAid3JpdGUiKToKLSAgICAgICAgICAgIGZpbGUgPSBvcGVuKGZpbGUsICJ3YiIpCi0gICAgICAgIGlmIG5vdCBlbmNvZGluZzoKLSAgICAgICAgICAgIGVuY29kaW5nID0gInVzLWFzY2lpIgotICAgICAgICBlbGlmIGVuY29kaW5nICE9ICJ1dGYtOCIgYW5kIGVuY29kaW5nICE9ICJ1cy1hc2NpaSI6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSclcyc/PlxuIiAlIGVuY29kaW5nKQotICAgICAgICBzZWxmLl93cml0ZShmaWxlLCBzZWxmLl9yb290LCBlbmNvZGluZywge30pCi0KLSAgICBkZWYgX3dyaXRlKHNlbGYsIGZpbGUsIG5vZGUsIGVuY29kaW5nLCBuYW1lc3BhY2VzKToKLSAgICAgICAgIyB3cml0ZSBYTUwgdG8gZmlsZQotICAgICAgICB0YWcgPSBub2RlLnRhZwotICAgICAgICBpZiB0YWcgaXMgQ29tbWVudDoKLSAgICAgICAgICAgIGZpbGUud3JpdGUoIjwhLS0gJXMgLS0+IiAlIF9lc2NhcGVfY2RhdGEobm9kZS50ZXh0LCBlbmNvZGluZykpCi0gICAgICAgIGVsaWYgdGFnIGlzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjoKLSAgICAgICAgICAgIGZpbGUud3JpdGUoIjw/JXM/PiIgJSBfZXNjYXBlX2NkYXRhKG5vZGUudGV4dCwgZW5jb2RpbmcpKQorICAgIGRlZiB3cml0ZShzZWxmLCBmaWxlX29yX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAjIGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgICAgICAgIGVuY29kaW5nPU5vbmUsCisgICAgICAgICAgICAgIHhtbF9kZWNsYXJhdGlvbj1Ob25lLAorICAgICAgICAgICAgICBkZWZhdWx0X25hbWVzcGFjZT1Ob25lLAorICAgICAgICAgICAgICBtZXRob2Q9Tm9uZSk6CisgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKKyAgICAgICAgaWYgbm90IG1ldGhvZDoKKyAgICAgICAgICAgIG1ldGhvZCA9ICJ4bWwiCisgICAgICAgIGVsaWYgbWV0aG9kIG5vdCBpbiBfc2VyaWFsaXplOgorICAgICAgICAgICAgIyBGSVhNRTogcmFpc2UgYW4gSW1wb3J0RXJyb3IgZm9yIGMxNG4gaWYgRWxlbWVudEMxNE4gaXMgbWlzc2luZz8KKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gbWV0aG9kICVyIiAlIG1ldGhvZCkKKyAgICAgICAgaWYgaGFzYXR0cihmaWxlX29yX2ZpbGVuYW1lLCAid3JpdGUiKToKKyAgICAgICAgICAgIGZpbGUgPSBmaWxlX29yX2ZpbGVuYW1lCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpdGVtcyA9IG5vZGUuaXRlbXMoKQotICAgICAgICAgICAgeG1sbnNfaXRlbXMgPSBbXSAjIG5ldyBuYW1lc3BhY2VzIGluIHRoaXMgc2NvcGUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRhZywgUU5hbWUpIG9yIHRhZ1s6MV0gPT0gInsiOgotICAgICAgICAgICAgICAgICAgICB0YWcsIHhtbG5zID0gZml4dGFnKHRhZywgbmFtZXNwYWNlcykKLSAgICAgICAgICAgICAgICAgICAgaWYgeG1sbnM6IHhtbG5zX2l0ZW1zLmFwcGVuZCh4bWxucykKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGFnKQotICAgICAgICAgICAgZmlsZS53cml0ZSgiPCIgKyBfZW5jb2RlKHRhZywgZW5jb2RpbmcpKQotICAgICAgICAgICAgaWYgaXRlbXMgb3IgeG1sbnNfaXRlbXM6Ci0gICAgICAgICAgICAgICAgaXRlbXMuc29ydCgpICMgbGV4aWNhbCBvcmRlcgotICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIGl0ZW1zOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGssIFFOYW1lKSBvciBrWzoxXSA9PSAieyI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaywgeG1sbnMgPSBmaXh0YWcoaywgbmFtZXNwYWNlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4bWxuczogeG1sbnNfaXRlbXMuYXBwZW5kKHhtbG5zKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IoaykKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBRTmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwgeG1sbnMgPSBmaXh0YWcodiwgbmFtZXNwYWNlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4bWxuczogeG1sbnNfaXRlbXMuYXBwZW5kKHhtbG5zKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodikKLSAgICAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgiICVzPVwiJXNcIiIgJSAoX2VuY29kZShrLCBlbmNvZGluZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lc2NhcGVfYXR0cmliKHYsIGVuY29kaW5nKSkpCi0gICAgICAgICAgICAgICAgZm9yIGssIHYgaW4geG1sbnNfaXRlbXM6Ci0gICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoIiAlcz1cIiVzXCIiICUgKF9lbmNvZGUoaywgZW5jb2RpbmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZXNjYXBlX2F0dHJpYih2LCBlbmNvZGluZykpKQotICAgICAgICAgICAgaWYgbm9kZS50ZXh0IG9yIGxlbihub2RlKToKLSAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCI+IikKLSAgICAgICAgICAgICAgICBpZiBub2RlLnRleHQ6Ci0gICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoX2VzY2FwZV9jZGF0YShub2RlLnRleHQsIGVuY29kaW5nKSkKLSAgICAgICAgICAgICAgICBmb3IgbiBpbiBub2RlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZShmaWxlLCBuLCBlbmNvZGluZywgbmFtZXNwYWNlcykKLSAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCI8LyIgKyBfZW5jb2RlKHRhZywgZW5jb2RpbmcpICsgIj4iKQorICAgICAgICAgICAgZmlsZSA9IG9wZW4oZmlsZV9vcl9maWxlbmFtZSwgIndiIikKKyAgICAgICAgd3JpdGUgPSBmaWxlLndyaXRlCisgICAgICAgIGlmIG5vdCBlbmNvZGluZzoKKyAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAiYzE0biI6CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSAidXRmLTgiCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoIiAvPiIpCi0gICAgICAgICAgICBmb3IgaywgdiBpbiB4bWxuc19pdGVtczoKLSAgICAgICAgICAgICAgICBkZWwgbmFtZXNwYWNlc1t2XQotICAgICAgICBpZiBub2RlLnRhaWw6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKF9lc2NhcGVfY2RhdGEobm9kZS50YWlsLCBlbmNvZGluZykpCisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSAidXMtYXNjaWkiCisgICAgICAgIGVsaWYgeG1sX2RlY2xhcmF0aW9uIG9yICh4bWxfZGVjbGFyYXRpb24gaXMgTm9uZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nIG5vdCBpbiAoInV0Zi04IiwgInVzLWFzY2lpIikpOgorICAgICAgICAgICAgaWYgbWV0aG9kID09ICJ4bWwiOgorICAgICAgICAgICAgICAgIHdyaXRlKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSclcyc/PlxuIiAlIGVuY29kaW5nKQorICAgICAgICBpZiBtZXRob2QgPT0gInRleHQiOgorICAgICAgICAgICAgX3NlcmlhbGl6ZV90ZXh0KHdyaXRlLCBzZWxmLl9yb290LCBlbmNvZGluZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHFuYW1lcywgbmFtZXNwYWNlcyA9IF9uYW1lc3BhY2VzKAorICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QsIGVuY29kaW5nLCBkZWZhdWx0X25hbWVzcGFjZQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlcmlhbGl6ZSA9IF9zZXJpYWxpemVbbWV0aG9kXQorICAgICAgICAgICAgc2VyaWFsaXplKHdyaXRlLCBzZWxmLl9yb290LCBlbmNvZGluZywgcW5hbWVzLCBuYW1lc3BhY2VzKQorICAgICAgICBpZiBmaWxlX29yX2ZpbGVuYW1lIGlzIG5vdCBmaWxlOgorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisKKyAgICBkZWYgd3JpdGVfYzE0bihzZWxmLCBmaWxlKToKKyAgICAgICAgIyBseG1sLmV0cmVlIGNvbXBhdGliaWxpdHkuICB1c2Ugb3V0cHV0IG1ldGhvZCBpbnN0ZWFkCisgICAgICAgIHJldHVybiBzZWxmLndyaXRlKGZpbGUsIG1ldGhvZD0iYzE0biIpCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaGVscGVycworIyBzZXJpYWxpemF0aW9uIHN1cHBvcnQKKworZGVmIF9uYW1lc3BhY2VzKGVsZW0sIGVuY29kaW5nLCBkZWZhdWx0X25hbWVzcGFjZT1Ob25lKToKKyAgICAjIGlkZW50aWZ5IG5hbWVzcGFjZXMgdXNlZCBpbiB0aGlzIHRyZWUKKworICAgICMgbWFwcyBxbmFtZXMgdG8gKmVuY29kZWQqIHByZWZpeDpsb2NhbCBuYW1lcworICAgIHFuYW1lcyA9IHtOb25lOiBOb25lfQorCisgICAgIyBtYXBzIHVyaTpzIHRvIHByZWZpeGVzCisgICAgbmFtZXNwYWNlcyA9IHt9CisgICAgaWYgZGVmYXVsdF9uYW1lc3BhY2U6CisgICAgICAgIG5hbWVzcGFjZXNbZGVmYXVsdF9uYW1lc3BhY2VdID0gIiIKKworICAgIGRlZiBlbmNvZGUodGV4dCk6CisgICAgICAgIHJldHVybiB0ZXh0LmVuY29kZShlbmNvZGluZykKKworICAgIGRlZiBhZGRfcW5hbWUocW5hbWUpOgorICAgICAgICAjIGNhbGN1bGF0ZSBzZXJpYWxpemVkIHFuYW1lIHJlcHJlc2VudGF0aW9uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHFuYW1lWzoxXSA9PSAieyI6CisgICAgICAgICAgICAgICAgdXJpLCB0YWcgPSBxbmFtZVsxOl0ucnNwbGl0KCJ9IiwgMSkKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lc3BhY2VzLmdldCh1cmkpCisgICAgICAgICAgICAgICAgaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IF9uYW1lc3BhY2VfbWFwLmdldCh1cmkpCisgICAgICAgICAgICAgICAgICAgIGlmIHByZWZpeCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gIm5zJWQiICUgbGVuKG5hbWVzcGFjZXMpCisgICAgICAgICAgICAgICAgICAgIGlmIHByZWZpeCAhPSAieG1sIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXNbdXJpXSA9IHByZWZpeAorICAgICAgICAgICAgICAgIGlmIHByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgcW5hbWVzW3FuYW1lXSA9IGVuY29kZSgiJXM6JXMiICUgKHByZWZpeCwgdGFnKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBxbmFtZXNbcW5hbWVdID0gZW5jb2RlKHRhZykgIyBkZWZhdWx0IGVsZW1lbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgZGVmYXVsdF9uYW1lc3BhY2U6CisgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IGNhbiB0aGlzIGJlIGhhbmRsZWQgaW4gWE1MIDEuMD8KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgdXNlIG5vbi1xdWFsaWZpZWQgbmFtZXMgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdF9uYW1lc3BhY2Ugb3B0aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHFuYW1lc1txbmFtZV0gPSBlbmNvZGUocW5hbWUpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcihxbmFtZSkKKworICAgICMgcG9wdWxhdGUgcW5hbWUgYW5kIG5hbWVzcGFjZXMgdGFibGUKKyAgICB0cnk6CisgICAgICAgIGl0ZXJhdGUgPSBlbGVtLml0ZXIKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGl0ZXJhdGUgPSBlbGVtLmdldGl0ZXJhdG9yICMgY0VUIGNvbXBhdGliaWxpdHkKKyAgICBmb3IgZWxlbSBpbiBpdGVyYXRlKCk6CisgICAgICAgIHRhZyA9IGVsZW0udGFnCisgICAgICAgIGlmIGlzaW5zdGFuY2UodGFnLCBRTmFtZSk6CisgICAgICAgICAgICBpZiB0YWcudGV4dCBub3QgaW4gcW5hbWVzOgorICAgICAgICAgICAgICAgIGFkZF9xbmFtZSh0YWcudGV4dCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHRhZywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBpZiB0YWcgbm90IGluIHFuYW1lczoKKyAgICAgICAgICAgICAgICBhZGRfcW5hbWUodGFnKQorICAgICAgICBlbGlmIHRhZyBpcyBub3QgTm9uZSBhbmQgdGFnIGlzIG5vdCBDb21tZW50IGFuZCB0YWcgaXMgbm90IFBJOgorICAgICAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGFnKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBlbGVtLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgUU5hbWUpOgorICAgICAgICAgICAgICAgIGtleSA9IGtleS50ZXh0CisgICAgICAgICAgICBpZiBrZXkgbm90IGluIHFuYW1lczoKKyAgICAgICAgICAgICAgICBhZGRfcW5hbWUoa2V5KQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgUU5hbWUpIGFuZCB2YWx1ZS50ZXh0IG5vdCBpbiBxbmFtZXM6CisgICAgICAgICAgICAgICAgYWRkX3FuYW1lKHZhbHVlLnRleHQpCisgICAgICAgIHRleHQgPSBlbGVtLnRleHQKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXh0LCBRTmFtZSkgYW5kIHRleHQudGV4dCBub3QgaW4gcW5hbWVzOgorICAgICAgICAgICAgYWRkX3FuYW1lKHRleHQudGV4dCkKKyAgICByZXR1cm4gcW5hbWVzLCBuYW1lc3BhY2VzCisKK2RlZiBfc2VyaWFsaXplX3htbCh3cml0ZSwgZWxlbSwgZW5jb2RpbmcsIHFuYW1lcywgbmFtZXNwYWNlcyk6CisgICAgdGFnID0gZWxlbS50YWcKKyAgICB0ZXh0ID0gZWxlbS50ZXh0CisgICAgaWYgdGFnIGlzIENvbW1lbnQ6CisgICAgICAgIHdyaXRlKCI8IS0tJXMtLT4iICUgX2VuY29kZSh0ZXh0LCBlbmNvZGluZykpCisgICAgZWxpZiB0YWcgaXMgUHJvY2Vzc2luZ0luc3RydWN0aW9uOgorICAgICAgICB3cml0ZSgiPD8lcz8+IiAlIF9lbmNvZGUodGV4dCwgZW5jb2RpbmcpKQorICAgIGVsc2U6CisgICAgICAgIHRhZyA9IHFuYW1lc1t0YWddCisgICAgICAgIGlmIHRhZyBpcyBOb25lOgorICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQsIGVuY29kaW5nKSkKKyAgICAgICAgICAgIGZvciBlIGluIGVsZW06CisgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIGVuY29kaW5nLCBxbmFtZXMsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3cml0ZSgiPCIgKyB0YWcpCisgICAgICAgICAgICBpdGVtcyA9IGVsZW0uaXRlbXMoKQorICAgICAgICAgICAgaWYgaXRlbXMgb3IgbmFtZXNwYWNlczoKKyAgICAgICAgICAgICAgICBpZiBuYW1lc3BhY2VzOgorICAgICAgICAgICAgICAgICAgICBmb3IgdiwgayBpbiBzb3J0ZWQobmFtZXNwYWNlcy5pdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSB4OiB4WzFdKTogICMgc29ydCBvbiBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGs6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9ICI6IiArIGsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCIgeG1sbnMlcz1cIiVzXCIiICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsuZW5jb2RlKGVuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZXNjYXBlX2F0dHJpYih2LCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHNvcnRlZChpdGVtcyk6ICAjIGxleGljYWwgb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrLCBRTmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBrID0gay50ZXh0CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgUU5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHFuYW1lc1t2LnRleHRdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gX2VzY2FwZV9hdHRyaWIodiwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKCIgJXM9XCIlc1wiIiAlIChxbmFtZXNba10sIHYpKQorICAgICAgICAgICAgaWYgdGV4dCBvciBsZW4oZWxlbSk6CisgICAgICAgICAgICAgICAgd3JpdGUoIj4iKQorICAgICAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEodGV4dCwgZW5jb2RpbmcpKQorICAgICAgICAgICAgICAgIGZvciBlIGluIGVsZW06CisgICAgICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBlbmNvZGluZywgcW5hbWVzLCBOb25lKQorICAgICAgICAgICAgICAgIHdyaXRlKCI8LyIgKyB0YWcgKyAiPiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdyaXRlKCIgLz4iKQorICAgIGlmIGVsZW0udGFpbDoKKyAgICAgICAgd3JpdGUoX2VzY2FwZV9jZGF0YShlbGVtLnRhaWwsIGVuY29kaW5nKSkKKworSFRNTF9FTVBUWSA9ICgiYXJlYSIsICJiYXNlIiwgImJhc2Vmb250IiwgImJyIiwgImNvbCIsICJmcmFtZSIsICJociIsCisgICAgICAgICAgICAgICJpbWciLCAiaW5wdXQiLCAiaXNpbmRleCIsICJsaW5rIiwgIm1ldGEiICJwYXJhbSIpCisKK3RyeToKKyAgICBIVE1MX0VNUFRZID0gc2V0KEhUTUxfRU1QVFkpCitleGNlcHQgTmFtZUVycm9yOgorICAgIHBhc3MKKworZGVmIF9zZXJpYWxpemVfaHRtbCh3cml0ZSwgZWxlbSwgZW5jb2RpbmcsIHFuYW1lcywgbmFtZXNwYWNlcyk6CisgICAgdGFnID0gZWxlbS50YWcKKyAgICB0ZXh0ID0gZWxlbS50ZXh0CisgICAgaWYgdGFnIGlzIENvbW1lbnQ6CisgICAgICAgIHdyaXRlKCI8IS0tJXMtLT4iICUgX2VzY2FwZV9jZGF0YSh0ZXh0LCBlbmNvZGluZykpCisgICAgZWxpZiB0YWcgaXMgUHJvY2Vzc2luZ0luc3RydWN0aW9uOgorICAgICAgICB3cml0ZSgiPD8lcz8+IiAlIF9lc2NhcGVfY2RhdGEodGV4dCwgZW5jb2RpbmcpKQorICAgIGVsc2U6CisgICAgICAgIHRhZyA9IHFuYW1lc1t0YWddCisgICAgICAgIGlmIHRhZyBpcyBOb25lOgorICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQsIGVuY29kaW5nKSkKKyAgICAgICAgICAgIGZvciBlIGluIGVsZW06CisgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV9odG1sKHdyaXRlLCBlLCBlbmNvZGluZywgcW5hbWVzLCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd3JpdGUoIjwiICsgdGFnKQorICAgICAgICAgICAgaXRlbXMgPSBlbGVtLml0ZW1zKCkKKyAgICAgICAgICAgIGlmIGl0ZW1zIG9yIG5hbWVzcGFjZXM6CisgICAgICAgICAgICAgICAgaWYgbmFtZXNwYWNlczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHYsIGsgaW4gc29ydGVkKG5hbWVzcGFjZXMuaXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgeDogeFsxXSk6ICAjIHNvcnQgb24gcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAiOiIgKyBrCisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgiIHhtbG5zJXM9XCIlc1wiIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrLmVuY29kZShlbmNvZGluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VzY2FwZV9hdHRyaWIodiwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzb3J0ZWQoaXRlbXMpOiAgIyBsZXhpY2FsIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaywgUU5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgayA9IGsudGV4dAorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIFFOYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBxbmFtZXNbdi50ZXh0XQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdiA9IF9lc2NhcGVfYXR0cmliX2h0bWwodiwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IGhhbmRsZSBib29sZWFuIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoIiAlcz1cIiVzXCIiICUgKHFuYW1lc1trXSwgdikpCisgICAgICAgICAgICB3cml0ZSgiPiIpCisgICAgICAgICAgICB0YWcgPSB0YWcubG93ZXIoKQorICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICBpZiB0YWcgPT0gInNjcmlwdCIgb3IgdGFnID09ICJzdHlsZSI6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKF9lbmNvZGUodGV4dCwgZW5jb2RpbmcpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEodGV4dCwgZW5jb2RpbmcpKQorICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKKyAgICAgICAgICAgICAgICBfc2VyaWFsaXplX2h0bWwod3JpdGUsIGUsIGVuY29kaW5nLCBxbmFtZXMsIE5vbmUpCisgICAgICAgICAgICBpZiB0YWcgbm90IGluIEhUTUxfRU1QVFk6CisgICAgICAgICAgICAgICAgd3JpdGUoIjwvIiArIHRhZyArICI+IikKKyAgICBpZiBlbGVtLnRhaWw6CisgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEoZWxlbS50YWlsLCBlbmNvZGluZykpCisKK2RlZiBfc2VyaWFsaXplX3RleHQod3JpdGUsIGVsZW0sIGVuY29kaW5nKToKKyAgICBmb3IgcGFydCBpbiBlbGVtLml0ZXJ0ZXh0KCk6CisgICAgICAgIHdyaXRlKHBhcnQuZW5jb2RlKGVuY29kaW5nKSkKKyAgICBpZiBlbGVtLnRhaWw6CisgICAgICAgIHdyaXRlKGVsZW0udGFpbC5lbmNvZGUoZW5jb2RpbmcpKQorCitfc2VyaWFsaXplID0geworICAgICJ4bWwiOiBfc2VyaWFsaXplX3htbCwKKyAgICAiaHRtbCI6IF9zZXJpYWxpemVfaHRtbCwKKyAgICAidGV4dCI6IF9zZXJpYWxpemVfdGV4dCwKKyMgdGhpcyBvcHRpb25hbCBtZXRob2QgaXMgaW1wb3J0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgbW9kdWxlCisjICAgImMxNG4iOiBfc2VyaWFsaXplX2MxNG4sCit9CiAKICMjCi0jIENoZWNrcyBpZiBhbiBvYmplY3QgYXBwZWFycyB0byBiZSBhIHZhbGlkIGVsZW1lbnQgb2JqZWN0LgorIyBSZWdpc3RlcnMgYSBuYW1lc3BhY2UgcHJlZml4LiAgVGhlIHJlZ2lzdHJ5IGlzIGdsb2JhbCwgYW5kIGFueQorIyBleGlzdGluZyBtYXBwaW5nIGZvciBlaXRoZXIgdGhlIGdpdmVuIHByZWZpeCBvciB0aGUgbmFtZXNwYWNlIFVSSQorIyB3aWxsIGJlIHJlbW92ZWQuCiAjCi0jIEBwYXJhbSBBbiBlbGVtZW50IGluc3RhbmNlLgotIyBAcmV0dXJuIEEgdHJ1ZSB2YWx1ZSBpZiB0aGlzIGlzIGFuIGVsZW1lbnQgb2JqZWN0LgotIyBAZGVmcmV0dXJuIGZsYWcKKyMgQHBhcmFtIHByZWZpeCBOYW1lc3BhY2UgcHJlZml4LgorIyBAcGFyYW0gdXJpIE5hbWVzcGFjZSB1cmkuICBUYWdzIGFuZCBhdHRyaWJ1dGVzIGluIHRoaXMgbmFtZXNwYWNlCisjICAgICB3aWxsIGJlIHNlcmlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gcHJlZml4LCBpZiBhdCBhbGwgcG9zc2libGUuCisjIEBleGNlcHRpb24gVmFsdWVFcnJvciBJZiB0aGUgcHJlZml4IGlzIHJlc2VydmVkLCBvciBpcyBvdGhlcndpc2UKKyMgICAgIGludmFsaWQuCiAKLWRlZiBpc2VsZW1lbnQoZWxlbWVudCk6Ci0gICAgIyBGSVhNRTogbm90IHN1cmUgYWJvdXQgdGhpczsgbWlnaHQgYmUgYSBiZXR0ZXIgaWRlYSB0byBsb29rCi0gICAgIyBmb3IgdGFnL2F0dHJpYi90ZXh0IGF0dHJpYnV0ZXMKLSAgICByZXR1cm4gaXNpbnN0YW5jZShlbGVtZW50LCBfRWxlbWVudEludGVyZmFjZSkgb3IgaGFzYXR0cihlbGVtZW50LCAidGFnIikKK2RlZiByZWdpc3Rlcl9uYW1lc3BhY2UocHJlZml4LCB1cmkpOgorICAgIGlmIHJlLm1hdGNoKCJuc1xkKyQiLCBwcmVmaXgpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQcmVmaXggZm9ybWF0IHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UiKQorICAgIGZvciBrLCB2IGluIF9uYW1lc3BhY2VfbWFwLml0ZW1zKCk6CisgICAgICAgIGlmIGsgPT0gdXJpIG9yIHYgPT0gcHJlZml4OgorICAgICAgICAgICAgZGVsIF9uYW1lc3BhY2VfbWFwW2tdCisgICAgX25hbWVzcGFjZV9tYXBbdXJpXSA9IHByZWZpeAorCitfbmFtZXNwYWNlX21hcCA9IHsKKyAgICAjICJ3ZWxsLWtub3duIiBuYW1lc3BhY2UgcHJlZml4ZXMKKyAgICAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIjogInhtbCIsCisgICAgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOiAiaHRtbCIsCisgICAgImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiOiAicmRmIiwKKyAgICAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOiAid3NkbCIsCisgICAgIyB4bWwgc2NoZW1hCisgICAgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjogInhzIiwKKyAgICAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiOiAieHNpIiwKKyAgICAjIGR1YmxpbiBjb3JlCisgICAgImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIjogImRjIiwKK30KKworZGVmIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRleHQpOgorICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgImNhbm5vdCBzZXJpYWxpemUgJXIgKHR5cGUgJXMpIiAlICh0ZXh0LCB0eXBlKHRleHQpLl9fbmFtZV9fKQorICAgICAgICApCisKK2RlZiBfZW5jb2RlKHRleHQsIGVuY29kaW5nKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiB0ZXh0LmVuY29kZShlbmNvZGluZywgInhtbGNoYXJyZWZyZXBsYWNlIikKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0ZXh0KQorCitkZWYgX2VzY2FwZV9jZGF0YSh0ZXh0LCBlbmNvZGluZyk6CisgICAgIyBlc2NhcGUgY2hhcmFjdGVyIGRhdGEKKyAgICB0cnk6CisgICAgICAgICMgaXQncyB3b3J0aCBhdm9pZGluZyBkby1ub3RoaW5nIGNhbGxzIGZvciBzdHJpbmdzIHRoYXQgYXJlCisgICAgICAgICMgc2hvcnRlciB0aGFuIDUwMCBjaGFyYWN0ZXIsIG9yIHNvLiAgYXNzdW1lIHRoYXQncywgYnkgZmFyLAorICAgICAgICAjIHRoZSBtb3N0IGNvbW1vbiBjYXNlIGluIG1vc3QgYXBwbGljYXRpb25zLgorICAgICAgICBpZiAiJiIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIiYiLCAiJmFtcDsiKQorICAgICAgICBpZiAiPCIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIjwiLCAiJmx0OyIpCisgICAgICAgIGlmICI+IiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikKKyAgICAgICAgcmV0dXJuIHRleHQuZW5jb2RlKGVuY29kaW5nLCAieG1sY2hhcnJlZnJlcGxhY2UiKQorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRleHQpCisKK2RlZiBfZXNjYXBlX2F0dHJpYih0ZXh0LCBlbmNvZGluZyk6CisgICAgIyBlc2NhcGUgYXR0cmlidXRlIHZhbHVlCisgICAgdHJ5OgorICAgICAgICBpZiAiJiIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIiYiLCAiJmFtcDsiKQorICAgICAgICBpZiAiPCIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIjwiLCAiJmx0OyIpCisgICAgICAgIGlmICI+IiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikKKyAgICAgICAgaWYgIlwiIiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXCIiLCAiJnF1b3Q7IikKKyAgICAgICAgaWYgIlxuIiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXG4iLCAiJiMxMDsiKQorICAgICAgICByZXR1cm4gdGV4dC5lbmNvZGUoZW5jb2RpbmcsICJ4bWxjaGFycmVmcmVwbGFjZSIpCisgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGV4dCkKKworZGVmIF9lc2NhcGVfYXR0cmliX2h0bWwodGV4dCwgZW5jb2RpbmcpOgorICAgICMgZXNjYXBlIGF0dHJpYnV0ZSB2YWx1ZQorICAgIHRyeToKKyAgICAgICAgaWYgIiYiIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikKKyAgICAgICAgaWYgIj4iIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI+IiwgIiZndDsiKQorICAgICAgICBpZiAiXCIiIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcIiIsICImcXVvdDsiKQorICAgICAgICByZXR1cm4gdGV4dC5lbmNvZGUoZW5jb2RpbmcsICJ4bWxjaGFycmVmcmVwbGFjZSIpCisgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGV4dCkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIworIyBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKKyMgc3ViZWxlbWVudHMuCisjCisjIEBwYXJhbSBlbGVtZW50IEFuIEVsZW1lbnQgaW5zdGFuY2UuCisjIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgorIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgorIyAgICAgImMxNG4iOyBkZWZhdWx0IGlzICJ4bWwiKS4KKyMgQHJldHVybiBBbiBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KKyMgQGRlZnJldHVybiBzdHJpbmcKKworZGVmIHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lKToKKyAgICBjbGFzcyBkdW1teToKKyAgICAgICAgcGFzcworICAgIGRhdGEgPSBbXQorICAgIGZpbGUgPSBkdW1teSgpCisgICAgZmlsZS53cml0ZSA9IGRhdGEuYXBwZW5kCisgICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoZmlsZSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QpCisgICAgcmV0dXJuICIiLmpvaW4oZGF0YSkKKworIyMKKyMgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCisjIHN1YmVsZW1lbnRzLiAgVGhlIHN0cmluZyBpcyByZXR1cm5lZCBhcyBhIHNlcXVlbmNlIG9mIHN0cmluZyBmcmFnbWVudHMuCisjCisjIEBwYXJhbSBlbGVtZW50IEFuIEVsZW1lbnQgaW5zdGFuY2UuCisjIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgorIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgorIyAgICAgImMxNG4iOyBkZWZhdWx0IGlzICJ4bWwiKS4KKyMgQHJldHVybiBBIHNlcXVlbmNlIG9iamVjdCBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KKyMgQGRlZnJldHVybiBzZXF1ZW5jZQorIyBAc2luY2UgMS4zCisKK2RlZiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9Tm9uZSwgbWV0aG9kPU5vbmUpOgorICAgIGNsYXNzIGR1bW15OgorICAgICAgICBwYXNzCisgICAgZGF0YSA9IFtdCisgICAgZmlsZSA9IGR1bW15KCkKKyAgICBmaWxlLndyaXRlID0gZGF0YS5hcHBlbmQKKyAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShmaWxlLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCkKKyAgICAjIEZJWE1FOiBtZXJnZSBzbWFsbCBmcmFnbWVudHMgaW50byBsYXJnZXIgcGFydHMKKyAgICByZXR1cm4gZGF0YQogCiAjIwogIyBXcml0ZXMgYW4gZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuICBUaGlzCkBAIC03NDYsMTE1ICsxMTYxLDE1IEBACiAgICAgaWYgbm90IHRhaWwgb3IgdGFpbFstMV0gIT0gIlxuIjoKICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQogCi1kZWYgX2VuY29kZShzLCBlbmNvZGluZyk6Ci0gICAgdHJ5OgotICAgICAgICByZXR1cm4gcy5lbmNvZGUoZW5jb2RpbmcpCi0gICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICByZXR1cm4gcyAjIDEuNS4yOiBhc3N1bWUgdGhlIHN0cmluZyB1c2VzIHRoZSByaWdodCBlbmNvZGluZwotCi1pZiBzeXMudmVyc2lvbls6M10gPT0gIjEuNSI6Ci0gICAgX2VzY2FwZSA9IHJlLmNvbXBpbGUociJbJjw+XCJceDgwLVx4ZmZdKyIpICMgMS41LjIKLWVsc2U6Ci0gICAgX2VzY2FwZSA9IHJlLmNvbXBpbGUoZXZhbChyJ3UiWyY8PlwiXHUwMDgwLVx1ZmZmZl0rIicpKQotCi1fZXNjYXBlX21hcCA9IHsKLSAgICAiJiI6ICImYW1wOyIsCi0gICAgIjwiOiAiJmx0OyIsCi0gICAgIj4iOiAiJmd0OyIsCi0gICAgJyInOiAiJnF1b3Q7IiwKLX0KLQotX25hbWVzcGFjZV9tYXAgPSB7Ci0gICAgIyAid2VsbC1rbm93biIgbmFtZXNwYWNlIHByZWZpeGVzCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI6ICJ4bWwiLAotICAgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjogImh0bWwiLAotICAgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIjogInJkZiIsCi0gICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjogIndzZGwiLAotfQotCi1kZWYgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGV4dCk6Ci0gICAgcmFpc2UgVHlwZUVycm9yKAotICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSAlciAodHlwZSAlcykiICUgKHRleHQsIHR5cGUodGV4dCkuX19uYW1lX18pCi0gICAgICAgICkKLQotZGVmIF9lbmNvZGVfZW50aXR5KHRleHQsIHBhdHRlcm49X2VzY2FwZSk6Ci0gICAgIyBtYXAgcmVzZXJ2ZWQgYW5kIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIHRvIG51bWVyaWNhbCBlbnRpdGllcwotICAgIGRlZiBlc2NhcGVfZW50aXRpZXMobSwgbWFwPV9lc2NhcGVfbWFwKToKLSAgICAgICAgb3V0ID0gW10KLSAgICAgICAgYXBwZW5kID0gb3V0LmFwcGVuZAotICAgICAgICBmb3IgY2hhciBpbiBtLmdyb3VwKCk6Ci0gICAgICAgICAgICB0ZXh0ID0gbWFwLmdldChjaGFyKQotICAgICAgICAgICAgaWYgdGV4dCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRleHQgPSAiJiMlZDsiICUgb3JkKGNoYXIpCi0gICAgICAgICAgICBhcHBlbmQodGV4dCkKLSAgICAgICAgcmV0dXJuIHN0cmluZy5qb2luKG91dCwgIiIpCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gX2VuY29kZShwYXR0ZXJuLnN1Yihlc2NhcGVfZW50aXRpZXMsIHRleHQpLCAiYXNjaWkiKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRleHQpCi0KLSMKLSMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXNzdW1lIGFuIGFzY2lpLWNvbXBhdGlibGUgZW5jb2RpbmcKLSMgKG9yICJ1dGYtMTYiKQotCi1kZWYgX2VzY2FwZV9jZGF0YSh0ZXh0LCBlbmNvZGluZz1Ob25lLCByZXBsYWNlPXN0cmluZy5yZXBsYWNlKToKLSAgICAjIGVzY2FwZSBjaGFyYWN0ZXIgZGF0YQotICAgIHRyeToKLSAgICAgICAgaWYgZW5jb2Rpbmc6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGV4dCA9IF9lbmNvZGUodGV4dCwgZW5jb2RpbmcpCi0gICAgICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgotICAgICAgICAgICAgICAgIHJldHVybiBfZW5jb2RlX2VudGl0eSh0ZXh0KQotICAgICAgICB0ZXh0ID0gcmVwbGFjZSh0ZXh0LCAiJiIsICImYW1wOyIpCi0gICAgICAgIHRleHQgPSByZXBsYWNlKHRleHQsICI8IiwgIiZsdDsiKQotICAgICAgICB0ZXh0ID0gcmVwbGFjZSh0ZXh0LCAiPiIsICImZ3Q7IikKLSAgICAgICAgcmV0dXJuIHRleHQKLSAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0ZXh0KQotCi1kZWYgX2VzY2FwZV9hdHRyaWIodGV4dCwgZW5jb2Rpbmc9Tm9uZSwgcmVwbGFjZT1zdHJpbmcucmVwbGFjZSk6Ci0gICAgIyBlc2NhcGUgYXR0cmlidXRlIHZhbHVlCi0gICAgdHJ5OgotICAgICAgICBpZiBlbmNvZGluZzoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0ZXh0ID0gX2VuY29kZSh0ZXh0LCBlbmNvZGluZykKLSAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9lbmNvZGVfZW50aXR5KHRleHQpCi0gICAgICAgIHRleHQgPSByZXBsYWNlKHRleHQsICImIiwgIiZhbXA7IikKLSAgICAgICAgdGV4dCA9IHJlcGxhY2UodGV4dCwgIiciLCAiJmFwb3M7IikgIyBGSVhNRTogb3ZlcmtpbGwKLSAgICAgICAgdGV4dCA9IHJlcGxhY2UodGV4dCwgIlwiIiwgIiZxdW90OyIpCi0gICAgICAgIHRleHQgPSByZXBsYWNlKHRleHQsICI8IiwgIiZsdDsiKQotICAgICAgICB0ZXh0ID0gcmVwbGFjZSh0ZXh0LCAiPiIsICImZ3Q7IikKLSAgICAgICAgcmV0dXJuIHRleHQKLSAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0ZXh0KQotCi1kZWYgZml4dGFnKHRhZywgbmFtZXNwYWNlcyk6Ci0gICAgIyBnaXZlbiBhIGRlY29yYXRlZCB0YWcgKG9mIHRoZSBmb3JtIHt1cml9dGFnKSwgcmV0dXJuIHByZWZpeGVkCi0gICAgIyB0YWcgYW5kIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiwgaWYgYW55Ci0gICAgaWYgaXNpbnN0YW5jZSh0YWcsIFFOYW1lKToKLSAgICAgICAgdGFnID0gdGFnLnRleHQKLSAgICBuYW1lc3BhY2VfdXJpLCB0YWcgPSBzdHJpbmcuc3BsaXQodGFnWzE6XSwgIn0iLCAxKQotICAgIHByZWZpeCA9IG5hbWVzcGFjZXMuZ2V0KG5hbWVzcGFjZV91cmkpCi0gICAgaWYgcHJlZml4IGlzIE5vbmU6Ci0gICAgICAgIHByZWZpeCA9IF9uYW1lc3BhY2VfbWFwLmdldChuYW1lc3BhY2VfdXJpKQotICAgICAgICBpZiBwcmVmaXggaXMgTm9uZToKLSAgICAgICAgICAgIHByZWZpeCA9ICJucyVkIiAlIGxlbihuYW1lc3BhY2VzKQotICAgICAgICBuYW1lc3BhY2VzW25hbWVzcGFjZV91cmldID0gcHJlZml4Ci0gICAgICAgIGlmIHByZWZpeCA9PSAieG1sIjoKLSAgICAgICAgICAgIHhtbG5zID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgeG1sbnMgPSAoInhtbG5zOiVzIiAlIHByZWZpeCwgbmFtZXNwYWNlX3VyaSkKLSAgICBlbHNlOgotICAgICAgICB4bWxucyA9IE5vbmUKLSAgICByZXR1cm4gIiVzOiVzIiAlIChwcmVmaXgsIHRhZyksIHhtbG5zCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHBhcnNpbmcKIAogIyMKICMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBpbnRvIGFuIGVsZW1lbnQgdHJlZS4KICMKICMgQHBhcmFtIHNvdXJjZSBBIGZpbGVuYW1lIG9yIGZpbGUgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEuCiAjIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxUcmVlQnVpbGRlcn0gcGFyc2VyIGlzIHVzZWQuCisjICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KICMgQHJldHVybiBBbiBFbGVtZW50VHJlZSBpbnN0YW5jZQogCiBkZWYgcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSk6CkBAIC04NjksMTggKzExODQsMjUgQEAKICMgQHBhcmFtIHNvdXJjZSBBIGZpbGVuYW1lIG9yIGZpbGUgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEuCiAjIEBwYXJhbSBldmVudHMgQSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIElmIG9taXR0ZWQsIG9ubHkgImVuZCIKICMgICAgIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCisjIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKKyMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgogIyBAcmV0dXJuIEEgKGV2ZW50LCBlbGVtKSBpdGVyYXRvci4KIAotY2xhc3MgaXRlcnBhcnNlOgorZGVmIGl0ZXJwYXJzZShzb3VyY2UsIGV2ZW50cz1Ob25lLCBwYXJzZXI9Tm9uZSk6CisgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAicmVhZCIpOgorICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZSwgInJiIikKKyAgICBpZiBub3QgcGFyc2VyOgorICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCisgICAgcmV0dXJuIF9JdGVyUGFyc2VJdGVyYXRvcihzb3VyY2UsIGV2ZW50cywgcGFyc2VyKQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgZXZlbnRzPU5vbmUpOgotICAgICAgICBpZiBub3QgaGFzYXR0cihzb3VyY2UsICJyZWFkIik6Ci0gICAgICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZSwgInJiIikKK2NsYXNzIF9JdGVyUGFyc2VJdGVyYXRvcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgZXZlbnRzLCBwYXJzZXIpOgogICAgICAgICBzZWxmLl9maWxlID0gc291cmNlCiAgICAgICAgIHNlbGYuX2V2ZW50cyA9IFtdCiAgICAgICAgIHNlbGYuX2luZGV4ID0gMAogICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290ID0gTm9uZQotICAgICAgICBzZWxmLl9wYXJzZXIgPSBYTUxUcmVlQnVpbGRlcigpCisgICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlcgogICAgICAgICAjIHdpcmUgdXAgdGhlIHBhcnNlciBmb3IgZXZlbnQgcmVwb3J0aW5nCiAgICAgICAgIHBhcnNlciA9IHNlbGYuX3BhcnNlci5fcGFyc2VyCiAgICAgICAgIGFwcGVuZCA9IHNlbGYuX2V2ZW50cy5hcHBlbmQKQEAgLTkwOCwxNSArMTIzMCwxNyBAQAogICAgICAgICAgICAgZWxpZiBldmVudCA9PSAic3RhcnQtbnMiOgogICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgdXJpLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCk6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHVyaSA9IF9lbmNvZGUodXJpLCAiYXNjaWkiKQorICAgICAgICAgICAgICAgICAgICAgICAgdXJpID0gKHVyaSBvciAiIikuZW5jb2RlKCJhc2NpaSIpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIChwcmVmaXggb3IgIiIsIHVyaSkpKQorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCAocHJlZml4IG9yICIiLCB1cmkgb3IgIiIpKSkKICAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKICAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gImVuZC1ucyI6CiAgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCk6CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIE5vbmUpKQogICAgICAgICAgICAgICAgIHBhcnNlci5FbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBldmVudCAlciIgJSBldmVudCkKIAogICAgIGRlZiBuZXh0KHNlbGYpOgogICAgICAgICB3aGlsZSAxOgpAQCAtOTI1LDEwICsxMjQ5LDcgQEAKICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX3BhcnNlciBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgICAgICAgICAgICMgbG9hZCBldmVudCBidWZmZXIKICAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZXZlbnRzWzpdCiAgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCkBAIC05NDIsMjQgKzEyNjMsMjIgQEAKICAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCA9IHNlbGYuX2luZGV4ICsgMQogICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCiAKLSAgICB0cnk6Ci0gICAgICAgIGl0ZXIKLSAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dCgpCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgogCiAjIwogIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgY29uc3RhbnQuICBUaGlzIGZ1bmN0aW9uIGNhbgogIyBiZSB1c2VkIHRvIGVtYmVkICJYTUwgbGl0ZXJhbHMiIGluIFB5dGhvbiBjb2RlLgogIwogIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCisjIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKKyMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgogIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCiAjIEBkZWZyZXR1cm4gRWxlbWVudAogCi1kZWYgWE1MKHRleHQpOgotICAgIHBhcnNlciA9IFhNTFRyZWVCdWlsZGVyKCkKK2RlZiBYTUwodGV4dCwgcGFyc2VyPU5vbmUpOgorICAgIGlmIG5vdCBwYXJzZXI6CisgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBwYXJzZXIuZmVlZCh0ZXh0KQogICAgIHJldHVybiBwYXJzZXIuY2xvc2UoKQogCkBAIC05NjgsMTUgKzEyODcsMTggQEAKICMgYSBkaWN0aW9uYXJ5IHdoaWNoIG1hcHMgZnJvbSBlbGVtZW50IGlkOnMgdG8gZWxlbWVudHMuCiAjCiAjIEBwYXJhbSBzb3VyY2UgQSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KKyMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQorIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCiAjIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIGFuIEVsZW1lbnQgaW5zdGFuY2UgYW5kIGEgZGljdGlvbmFyeS4KICMgQGRlZnJldHVybiAoRWxlbWVudCwgZGljdGlvbmFyeSkKIAotZGVmIFhNTElEKHRleHQpOgotICAgIHBhcnNlciA9IFhNTFRyZWVCdWlsZGVyKCkKK2RlZiBYTUxJRCh0ZXh0LCBwYXJzZXI9Tm9uZSk6CisgICAgaWYgbm90IHBhcnNlcjoKKyAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIHBhcnNlci5mZWVkKHRleHQpCiAgICAgdHJlZSA9IHBhcnNlci5jbG9zZSgpCiAgICAgaWRzID0ge30KLSAgICBmb3IgZWxlbSBpbiB0cmVlLmdldGl0ZXJhdG9yKCk6CisgICAgZm9yIGVsZW0gaW4gdHJlZS5pdGVyKCk6CiAgICAgICAgIGlkID0gZWxlbS5nZXQoImlkIikKICAgICAgICAgaWYgaWQ6CiAgICAgICAgICAgICBpZHNbaWRdID0gZWxlbQpAQCAtOTkzLDIxICsxMzE1LDIzIEBACiBmcm9tc3RyaW5nID0gWE1MCiAKICMjCi0jIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAotIyBzdWJlbGVtZW50cy4KKyMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc2VxdWVuY2Ugb2Ygc3RyaW5nIGZyYWdtZW50cy4KICMKLSMgQHBhcmFtIGVsZW1lbnQgQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQHJldHVybiBBbiBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KLSMgQGRlZnJldHVybiBzdHJpbmcKKyMgQHBhcmFtIHNlcXVlbmNlIEEgbGlzdCBvciBvdGhlciBzZXF1ZW5jZSBjb250YWluaW5nIFhNTCBkYXRhIGZyYWdtZW50cy4KKyMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQorIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCisjIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KKyMgQGRlZnJldHVybiBFbGVtZW50CisjIEBzaW5jZSAxLjMKIAotZGVmIHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUpOgotICAgIGNsYXNzIGR1bW15OgotICAgICAgICBwYXNzCi0gICAgZGF0YSA9IFtdCi0gICAgZmlsZSA9IGR1bW15KCkKLSAgICBmaWxlLndyaXRlID0gZGF0YS5hcHBlbmQKLSAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShmaWxlLCBlbmNvZGluZykKLSAgICByZXR1cm4gc3RyaW5nLmpvaW4oZGF0YSwgIiIpCitkZWYgZnJvbXN0cmluZ2xpc3Qoc2VxdWVuY2UsIHBhcnNlcj1Ob25lKToKKyAgICBpZiBub3QgcGFyc2VyOgorICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCisgICAgZm9yIHRleHQgaW4gc2VxdWVuY2U6CisgICAgICAgIHBhcnNlci5mZWVkKHRleHQpCisgICAgcmV0dXJuIHBhcnNlci5jbG9zZSgpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogIyMKICMgR2VuZXJpYyBlbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyLiAgVGhpcyBidWlsZGVyIGNvbnZlcnRzIGEgc2VxdWVuY2UKQEAgLTEwMjAsNyArMTM0NCw3IEBACiAjIEBwYXJhbSBlbGVtZW50X2ZhY3RvcnkgT3B0aW9uYWwgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5CiAjICAgIGlzIGNhbGxlZCB0byBjcmVhdGUgbmV3IEVsZW1lbnQgaW5zdGFuY2VzLCBhcyBuZWNlc3NhcnkuCiAKLWNsYXNzIFRyZWVCdWlsZGVyOgorY2xhc3MgVHJlZUJ1aWxkZXIob2JqZWN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50X2ZhY3Rvcnk9Tm9uZSk6CiAgICAgICAgIHNlbGYuX2RhdGEgPSBbXSAjIGRhdGEgY29sbGVjdG9yCkBAIC0xMDI4LDExICsxMzUyLDExIEBACiAgICAgICAgIHNlbGYuX2xhc3QgPSBOb25lICMgbGFzdCBlbGVtZW50CiAgICAgICAgIHNlbGYuX3RhaWwgPSBOb25lICMgdHJ1ZSBpZiB3ZSdyZSBhZnRlciBhbiBlbmQgdGFnCiAgICAgICAgIGlmIGVsZW1lbnRfZmFjdG9yeSBpcyBOb25lOgotICAgICAgICAgICAgZWxlbWVudF9mYWN0b3J5ID0gX0VsZW1lbnRJbnRlcmZhY2UKKyAgICAgICAgICAgIGVsZW1lbnRfZmFjdG9yeSA9IEVsZW1lbnQKICAgICAgICAgc2VsZi5fZmFjdG9yeSA9IGVsZW1lbnRfZmFjdG9yeQogCiAgICAgIyMKLSAgICAjIEZsdXNoZXMgdGhlIHBhcnNlciBidWZmZXJzLCBhbmQgcmV0dXJucyB0aGUgdG9wbGV2ZWwgZG9jdW1lbgorICAgICMgRmx1c2hlcyB0aGUgYnVpbGRlciBidWZmZXJzLCBhbmQgcmV0dXJucyB0aGUgdG9wbGV2ZWwgZG9jdW1lbnQKICAgICAjIGVsZW1lbnQuCiAgICAgIwogICAgICMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgpAQCAtMTA0MCwxMyArMTM2NCwxMyBAQAogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBhc3NlcnQgbGVuKHNlbGYuX2VsZW0pID09IDAsICJtaXNzaW5nIGVuZCB0YWdzIgotICAgICAgICBhc3NlcnQgc2VsZi5fbGFzdCAhPSBOb25lLCAibWlzc2luZyB0b3BsZXZlbCBlbGVtZW50IgorICAgICAgICBhc3NlcnQgc2VsZi5fbGFzdCBpcyBub3QgTm9uZSwgIm1pc3NpbmcgdG9wbGV2ZWwgZWxlbWVudCIKICAgICAgICAgcmV0dXJuIHNlbGYuX2xhc3QKIAogICAgIGRlZiBfZmx1c2goc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2RhdGE6CiAgICAgICAgICAgICBpZiBzZWxmLl9sYXN0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHRleHQgPSBzdHJpbmcuam9pbihzZWxmLl9kYXRhLCAiIikKKyAgICAgICAgICAgICAgICB0ZXh0ID0gIiIuam9pbihzZWxmLl9kYXRhKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuX3RhaWw6CiAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl9sYXN0LnRhaWwgaXMgTm9uZSwgImludGVybmFsIGVycm9yICh0YWlsKSIKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGFzdC50YWlsID0gdGV4dApAQCAtMTEwNSwyOCArMTQyOSwzOSBAQAogIyAgICAgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIHtAbGluayAjVHJlZUJ1aWxkZXJ9IGNsYXNzLgogIyBAa2V5cGFyYW0gaHRtbCBQcmVkZWZpbmUgSFRNTCBlbnRpdGllcy4gIFRoaXMgZmxhZyBpcyBub3Qgc3VwcG9ydGVkCiAjICAgICBieSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKyMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIGVuY29kaW5nLiAgSWYgZ2l2ZW4sIHRoZSB2YWx1ZSBvdmVycmlkZXMKKyMgICAgIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlIFhNTCBmaWxlLgogIyBAc2VlICNFbGVtZW50VHJlZQogIyBAc2VlICNUcmVlQnVpbGRlcgogCi1jbGFzcyBYTUxUcmVlQnVpbGRlcjoKK2NsYXNzIFhNTFBhcnNlcihvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGh0bWw9MCwgdGFyZ2V0PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBodG1sPTAsIHRhcmdldD1Ob25lLCBlbmNvZGluZz1Ob25lKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnJvbSB4bWwucGFyc2VycyBpbXBvcnQgZXhwYXQKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0gICAgICAgICAgICAgICAgIk5vIG1vZHVsZSBuYW1lZCBleHBhdDsgdXNlIFNpbXBsZVhNTFRyZWVCdWlsZGVyIGluc3RlYWQiCi0gICAgICAgICAgICAgICAgKQotICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoTm9uZSwgIn0iKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBweWV4cGF0IGFzIGV4cGF0CisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJObyBtb2R1bGUgbmFtZWQgZXhwYXQ7IHVzZSBTaW1wbGVYTUxUcmVlQnVpbGRlciBpbnN0ZWFkIgorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZShlbmNvZGluZywgIn0iKQogICAgICAgICBpZiB0YXJnZXQgaXMgTm9uZToKICAgICAgICAgICAgIHRhcmdldCA9IFRyZWVCdWlsZGVyKCkKLSAgICAgICAgc2VsZi5fdGFyZ2V0ID0gdGFyZ2V0CisgICAgICAgICMgdW5kZXJzY29yZWQgbmFtZXMgYXJlIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5IG9ubHkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKKyAgICAgICAgc2VsZi50YXJnZXQgPSBzZWxmLl90YXJnZXQgPSB0YXJnZXQKKyAgICAgICAgc2VsZi5fZXJyb3IgPSBleHBhdC5lcnJvcgogICAgICAgICBzZWxmLl9uYW1lcyA9IHt9ICMgbmFtZSBtZW1vIGNhY2hlCiAgICAgICAgICMgY2FsbGJhY2tzCiAgICAgICAgIHBhcnNlci5EZWZhdWx0SGFuZGxlckV4cGFuZCA9IHNlbGYuX2RlZmF1bHQKICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzZWxmLl9zdGFydAogICAgICAgICBwYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBzZWxmLl9lbmQKICAgICAgICAgcGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5fZGF0YQorICAgICAgICAjIG9wdGlvbmFsIGNhbGxiYWNrcworICAgICAgICBwYXJzZXIuQ29tbWVudEhhbmRsZXIgPSBzZWxmLl9jb21tZW50CisgICAgICAgIHBhcnNlci5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyID0gc2VsZi5fcGkKICAgICAgICAgIyBsZXQgZXhwYXQgZG8gdGhlIGJ1ZmZlcmluZywgaWYgc3VwcG9ydGVkCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5idWZmZXJfdGV4dCA9IDEKQEAgLTExMzksMTcgKzE0NzQsMjMgQEAKICAgICAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5fc3RhcnRfbGlzdAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGVuY29kaW5nID0gTm9uZQotICAgICAgICBpZiBub3QgcGFyc2VyLnJldHVybnNfdW5pY29kZToKLSAgICAgICAgICAgIGVuY29kaW5nID0gInV0Zi04IgotICAgICAgICAjIHRhcmdldC54bWwoZW5jb2RpbmcsIE5vbmUpCiAgICAgICAgIHNlbGYuX2RvY3R5cGUgPSBOb25lCiAgICAgICAgIHNlbGYuZW50aXR5ID0ge30KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi52ZXJzaW9uID0gIkV4cGF0ICVkLiVkLiVkIiAlIGV4cGF0LnZlcnNpb25faW5mbworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzICMgdW5rbm93bgorCisgICAgZGVmIF9yYWlzZWVycm9yKHNlbGYsIHZhbHVlKToKKyAgICAgICAgZXJyID0gUGFyc2VFcnJvcih2YWx1ZSkKKyAgICAgICAgZXJyLmNvZGUgPSB2YWx1ZS5jb2RlCisgICAgICAgIGVyci5wb3NpdGlvbiA9IHZhbHVlLmxpbmVubywgdmFsdWUub2Zmc2V0CisgICAgICAgIHJhaXNlIGVycgogCiAgICAgZGVmIF9maXh0ZXh0KHNlbGYsIHRleHQpOgogICAgICAgICAjIGNvbnZlcnQgdGV4dCBzdHJpbmcgdG8gYXNjaWksIGlmIHBvc3NpYmxlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBfZW5jb2RlKHRleHQsICJhc2NpaSIpCisgICAgICAgICAgICByZXR1cm4gdGV4dC5lbmNvZGUoImFzY2lpIikKICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKICAgICAgICAgICAgIHJldHVybiB0ZXh0CiAKQEAgLTExNjYsNDAgKzE1MDcsNjIgQEAKIAogICAgIGRlZiBfc3RhcnQoc2VsZiwgdGFnLCBhdHRyaWJfaW4pOgogICAgICAgICBmaXhuYW1lID0gc2VsZi5fZml4bmFtZQorICAgICAgICBmaXh0ZXh0ID0gc2VsZi5fZml4dGV4dAogICAgICAgICB0YWcgPSBmaXhuYW1lKHRhZykKICAgICAgICAgYXR0cmliID0ge30KICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYXR0cmliX2luLml0ZW1zKCk6Ci0gICAgICAgICAgICBhdHRyaWJbZml4bmFtZShrZXkpXSA9IHNlbGYuX2ZpeHRleHQodmFsdWUpCi0gICAgICAgIHJldHVybiBzZWxmLl90YXJnZXQuc3RhcnQodGFnLCBhdHRyaWIpCisgICAgICAgICAgICBhdHRyaWJbZml4bmFtZShrZXkpXSA9IGZpeHRleHQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5zdGFydCh0YWcsIGF0dHJpYikKIAogICAgIGRlZiBfc3RhcnRfbGlzdChzZWxmLCB0YWcsIGF0dHJpYl9pbik6CiAgICAgICAgIGZpeG5hbWUgPSBzZWxmLl9maXhuYW1lCisgICAgICAgIGZpeHRleHQgPSBzZWxmLl9maXh0ZXh0CiAgICAgICAgIHRhZyA9IGZpeG5hbWUodGFnKQogICAgICAgICBhdHRyaWIgPSB7fQogICAgICAgICBpZiBhdHRyaWJfaW46CiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oYXR0cmliX2luKSwgMik6Ci0gICAgICAgICAgICAgICAgYXR0cmliW2ZpeG5hbWUoYXR0cmliX2luW2ldKV0gPSBzZWxmLl9maXh0ZXh0KGF0dHJpYl9pbltpKzFdKQotICAgICAgICByZXR1cm4gc2VsZi5fdGFyZ2V0LnN0YXJ0KHRhZywgYXR0cmliKQorICAgICAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGF0dHJpYl9pbltpXSldID0gZml4dGV4dChhdHRyaWJfaW5baSsxXSkKKyAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LnN0YXJ0KHRhZywgYXR0cmliKQogCiAgICAgZGVmIF9kYXRhKHNlbGYsIHRleHQpOgotICAgICAgICByZXR1cm4gc2VsZi5fdGFyZ2V0LmRhdGEoc2VsZi5fZml4dGV4dCh0ZXh0KSkKKyAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LmRhdGEoc2VsZi5fZml4dGV4dCh0ZXh0KSkKIAogICAgIGRlZiBfZW5kKHNlbGYsIHRhZyk6Ci0gICAgICAgIHJldHVybiBzZWxmLl90YXJnZXQuZW5kKHNlbGYuX2ZpeG5hbWUodGFnKSkKKyAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LmVuZChzZWxmLl9maXhuYW1lKHRhZykpCisKKyAgICBkZWYgX2NvbW1lbnQoc2VsZiwgZGF0YSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbW1lbnQgPSBzZWxmLnRhcmdldC5jb21tZW50CisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjb21tZW50KHNlbGYuX2ZpeHRleHQoZGF0YSkpCisKKyAgICBkZWYgX3BpKHNlbGYsIHRhcmdldCwgZGF0YSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpID0gc2VsZi50YXJnZXQucGkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHBpKHNlbGYuX2ZpeHRleHQodGFyZ2V0KSwgc2VsZi5fZml4dGV4dChkYXRhKSkKIAogICAgIGRlZiBfZGVmYXVsdChzZWxmLCB0ZXh0KToKICAgICAgICAgcHJlZml4ID0gdGV4dFs6MV0KICAgICAgICAgaWYgcHJlZml4ID09ICImIjoKICAgICAgICAgICAgICMgZGVhbCB3aXRoIHVuZGVmaW5lZCBlbnRpdGllcwogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX3RhcmdldC5kYXRhKHNlbGYuZW50aXR5W3RleHRbMTotMV1dKQorICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0LmRhdGEoc2VsZi5lbnRpdHlbdGV4dFsxOi0xXV0pCiAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgZnJvbSB4bWwucGFyc2VycyBpbXBvcnQgZXhwYXQKLSAgICAgICAgICAgICAgICByYWlzZSBleHBhdC5lcnJvcigKKyAgICAgICAgICAgICAgICBlcnIgPSBleHBhdC5lcnJvcigKICAgICAgICAgICAgICAgICAgICAgInVuZGVmaW5lZCBlbnRpdHkgJXM6IGxpbmUgJWQsIGNvbHVtbiAlZCIgJQogICAgICAgICAgICAgICAgICAgICAodGV4dCwgc2VsZi5fcGFyc2VyLkVycm9yTGluZU51bWJlciwKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLkVycm9yQ29sdW1uTnVtYmVyKQogICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgZXJyLmNvZGUgPSAxMSAjIFhNTF9FUlJPUl9VTkRFRklORURfRU5USVRZCisgICAgICAgICAgICAgICAgZXJyLmxpbmVubyA9IHNlbGYuX3BhcnNlci5FcnJvckxpbmVOdW1iZXIKKyAgICAgICAgICAgICAgICBlcnIub2Zmc2V0ID0gc2VsZi5fcGFyc2VyLkVycm9yQ29sdW1uTnVtYmVyCisgICAgICAgICAgICAgICAgcmFpc2UgZXJyCiAgICAgICAgIGVsaWYgcHJlZml4ID09ICI8IiBhbmQgdGV4dFs6OV0gPT0gIjwhRE9DVFlQRSI6CiAgICAgICAgICAgICBzZWxmLl9kb2N0eXBlID0gW10gIyBpbnNpZGUgYSBkb2N0eXBlIGRlY2xhcmF0aW9uCiAgICAgICAgIGVsaWYgc2VsZi5fZG9jdHlwZSBpcyBub3QgTm9uZToKQEAgLTEyMDcsNyArMTU3MCw3IEBACiAgICAgICAgICAgICBpZiBwcmVmaXggPT0gIj4iOgogICAgICAgICAgICAgICAgIHNlbGYuX2RvY3R5cGUgPSBOb25lCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICB0ZXh0ID0gc3RyaW5nLnN0cmlwKHRleHQpCisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdHJpcCgpCiAgICAgICAgICAgICBpZiBub3QgdGV4dDoKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIHNlbGYuX2RvY3R5cGUuYXBwZW5kKHRleHQpCkBAIC0xMjIzLDE4ICsxNTg2LDMxIEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGlmIHB1YmlkOgogICAgICAgICAgICAgICAgICAgICBwdWJpZCA9IHB1YmlkWzE6LTFdCi0gICAgICAgICAgICAgICAgc2VsZi5kb2N0eXBlKG5hbWUsIHB1YmlkLCBzeXN0ZW1bMTotMV0pCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLnRhcmdldCwgImRvY3R5cGUiKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXQuZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtWzE6LTFdKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5kb2N0eXBlIGlzIG5vdCBzZWxmLl9YTUxQYXJzZXJfX2RvY3R5cGU6CisgICAgICAgICAgICAgICAgICAgICMgd2FybiBhYm91dCBkZXByZWNhdGVkIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fWE1MUGFyc2VyX19kb2N0eXBlKG5hbWUsIHB1YmlkLCBzeXN0ZW1bMTotMV0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtWzE6LTFdKQogICAgICAgICAgICAgICAgIHNlbGYuX2RvY3R5cGUgPSBOb25lCiAKICAgICAjIwotICAgICMgSGFuZGxlcyBhIGRvY3R5cGUgZGVjbGFyYXRpb24uCisgICAgIyAoRGVwcmVjYXRlZCkgSGFuZGxlcyBhIGRvY3R5cGUgZGVjbGFyYXRpb24uCiAgICAgIwogICAgICMgQHBhcmFtIG5hbWUgRG9jdHlwZSBuYW1lLgogICAgICMgQHBhcmFtIHB1YmlkIFB1YmxpYyBpZGVudGlmaWVyLgogICAgICMgQHBhcmFtIHN5c3RlbSBTeXN0ZW0gaWRlbnRpZmllci4KIAogICAgIGRlZiBkb2N0eXBlKHNlbGYsIG5hbWUsIHB1YmlkLCBzeXN0ZW0pOgotICAgICAgICBwYXNzCisgICAgICAgICIiIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiIiIgorICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiAgRGVmaW5lIGRvY3R5cGUoKSAiCisgICAgICAgICAgICAibWV0aG9kIG9uIHRoZSBUcmVlQnVpbGRlciB0YXJnZXQuIiwKKyAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICkKKworICAgICMgc2VudGluZWwsIGlmIGRvY3R5cGUgaXMgcmVkZWZpbmVkIGluIGEgc3ViY2xhc3MKKyAgICBfX2RvY3R5cGUgPSBkb2N0eXBlCiAKICAgICAjIwogICAgICMgRmVlZHMgZGF0YSB0byB0aGUgcGFyc2VyLgpAQCAtMTI0Miw3ICsxNjE4LDEwIEBACiAgICAgIyBAcGFyYW0gZGF0YSBFbmNvZGVkIGRhdGEuCiAKICAgICBkZWYgZmVlZChzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5fcGFyc2VyLlBhcnNlKGRhdGEsIDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3BhcnNlci5QYXJzZShkYXRhLCAwKQorICAgICAgICBleGNlcHQgc2VsZi5fZXJyb3IsIHY6CisgICAgICAgICAgICBzZWxmLl9yYWlzZWVycm9yKHYpCiAKICAgICAjIwogICAgICMgRmluaXNoZXMgZmVlZGluZyBkYXRhIHRvIHRoZSBwYXJzZXIuCkBAIC0xMjUxLDEwICsxNjMwLDIwIEBACiAgICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5fcGFyc2VyLlBhcnNlKCIiLCAxKSAjIGVuZCBvZiBkYXRhCi0gICAgICAgIHRyZWUgPSBzZWxmLl90YXJnZXQuY2xvc2UoKQotICAgICAgICBkZWwgc2VsZi5fdGFyZ2V0LCBzZWxmLl9wYXJzZXIgIyBnZXQgcmlkIG9mIGNpcmN1bGFyIHJlZmVyZW5jZXMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcGFyc2VyLlBhcnNlKCIiLCAxKSAjIGVuZCBvZiBkYXRhCisgICAgICAgIGV4Y2VwdCBzZWxmLl9lcnJvciwgdjoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlZXJyb3IodikKKyAgICAgICAgdHJlZSA9IHNlbGYudGFyZ2V0LmNsb3NlKCkKKyAgICAgICAgZGVsIHNlbGYudGFyZ2V0LCBzZWxmLl9wYXJzZXIgIyBnZXQgcmlkIG9mIGNpcmN1bGFyIHJlZmVyZW5jZXMKICAgICAgICAgcmV0dXJuIHRyZWUKIAogIyBjb21wYXRpYmlsaXR5Ci1YTUxQYXJzZXIgPSBYTUxUcmVlQnVpbGRlcgorWE1MVHJlZUJ1aWxkZXIgPSBYTUxQYXJzZXIKKworIyB3b3JrYXJvdW5kIGNpcmN1bGFyIGltcG9ydC4KK3RyeToKKyAgICBmcm9tIEVsZW1lbnRDMTROIGltcG9ydCBfc2VyaWFsaXplX2MxNG4KKyAgICBfc2VyaWFsaXplWyJjMTRuIl0gPSBfc2VyaWFsaXplX2MxNG4KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL19faW5pdF9fLnB5IGIvTGliL3htbC9ldHJlZS9fX2luaXRfXy5weQppbmRleCAzZGQyYzkyLi4yN2ZkOGY2IDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL19faW5pdF9fLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvX19pbml0X18ucHkKQEAgLTEsMTAgKzEsMTAgQEAKLSMgJElkOiBfX2luaXRfXy5weSAxODIxIDIwMDQtMDYtMDMgMTY6NTc6NDlaIGZyZWRyaWsgJAorIyAkSWQ6IF9faW5pdF9fLnB5IDMzNzUgMjAwOC0wMi0xMyAwODowNTowOFogZnJlZHJpayAkCiAjIGVsZW1lbnR0cmVlIHBhY2thZ2UKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgRWxlbWVudFRyZWUgdG9vbGtpdCBpcwogIwotIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBieSBGcmVkcmlrIEx1bmRoCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDA4IGJ5IEZyZWRyaWsgTHVuZGgKICMKICMgQnkgb2J0YWluaW5nLCB1c2luZywgYW5kL29yIGNvcHlpbmcgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgaXRzCiAjIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgeW91IGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwKQEAgLTMwLDQgKzMwLDQgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCi0jIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi40L2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgorIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0xpYi94bWwvc2F4L19faW5pdF9fLnB5IGIvTGliL3htbC9zYXgvX19pbml0X18ucHkKaW5kZXggNzNlYzkyOS4uMDA1YjY2ZSAxMDA2NDQKLS0tIGEvTGliL3htbC9zYXgvX19pbml0X18ucHkKKysrIGIvTGliL3htbC9zYXgvX19pbml0X18ucHkKQEAgLTU5LDcgKzU5LDcgQEAKICAgICBpbXBvcnQgeG1sLnNheC5leHBhdHJlYWRlcgogCiBpbXBvcnQgb3MsIHN5cwotaWYgb3MuZW52aXJvbi5oYXNfa2V5KCJQWV9TQVhfUEFSU0VSIik6CitpZiAiUFlfU0FYX1BBUlNFUiIgaW4gb3MuZW52aXJvbjoKICAgICBkZWZhdWx0X3BhcnNlcl9saXN0ID0gb3MuZW52aXJvblsiUFlfU0FYX1BBUlNFUiJdLnNwbGl0KCIsIikKIGRlbCBvcwogCmRpZmYgLS1naXQgYS9MaWIveG1sL3NheC9leHBhdHJlYWRlci5weSBiL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5CmluZGV4IGU2ZDE5MDIuLjkyYTc5YzEgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5CisrKyBiL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5CkBAIC00MDcsOCArNDA3LDggQEAKICMgLS0tCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgaW1wb3J0IHhtbC5zYXgKKyAgICBpbXBvcnQgeG1sLnNheC5zYXh1dGlscwogICAgIHAgPSBjcmVhdGVfcGFyc2VyKCkKLSAgICBwLnNldENvbnRlbnRIYW5kbGVyKHhtbC5zYXguWE1MR2VuZXJhdG9yKCkpCisgICAgcC5zZXRDb250ZW50SGFuZGxlcih4bWwuc2F4LnNheHV0aWxzLlhNTEdlbmVyYXRvcigpKQogICAgIHAuc2V0RXJyb3JIYW5kbGVyKHhtbC5zYXguRXJyb3JIYW5kbGVyKCkpCi0gICAgcC5wYXJzZSgiLi4vLi4vLi4vaGFtbGV0LnhtbCIpCisgICAgcC5wYXJzZSgiaHR0cDovL3d3dy5pYmlibGlvLm9yZy94bWwvZXhhbXBsZXMvc2hha2VzcGVhcmUvaGFtbGV0LnhtbCIpCmRpZmYgLS1naXQgYS9MaWIveG1sL3NheC9zYXh1dGlscy5weSBiL0xpYi94bWwvc2F4L3NheHV0aWxzLnB5CmluZGV4IDQ2ODE4ZjMuLjk3ZDY1ZDggMTAwNjQ0Ci0tLSBhL0xpYi94bWwvc2F4L3NheHV0aWxzLnB5CisrKyBiL0xpYi94bWwvc2F4L3NheHV0aWxzLnB5CkBAIC0xMDMsNiArMTAzLDEyIEBACiAgICAgZGVmIF9xbmFtZShzZWxmLCBuYW1lKToKICAgICAgICAgIiIiQnVpbGRzIGEgcXVhbGlmaWVkIG5hbWUgZnJvbSBhIChuc191cmwsIGxvY2FsbmFtZSkgcGFpciIiIgogICAgICAgICBpZiBuYW1lWzBdOgorICAgICAgICAgICAgIyBQZXIgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLCBUaGUgJ3htbCcgcHJlZml4IGlzCisgICAgICAgICAgICAjIGJvdW5kIGJ5IGRlZmluaXRpb24gdG8gaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLiAgSXQKKyAgICAgICAgICAgICMgZG9lcyBub3QgbmVlZCB0byBiZSBkZWNsYXJlZCBhbmQgd2lsbCBub3QgdXN1YWxseSBiZSBmb3VuZCBpbgorICAgICAgICAgICAgIyBzZWxmLl9jdXJyZW50X2NvbnRleHQuCisgICAgICAgICAgICBpZiAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJyA9PSBuYW1lWzBdOgorICAgICAgICAgICAgICAgIHJldHVybiAneG1sOicgKyBuYW1lWzFdCiAgICAgICAgICAgICAjIFRoZSBuYW1lIGlzIGluIGEgbm9uLWVtcHR5IG5hbWVzcGFjZQogICAgICAgICAgICAgcHJlZml4ID0gc2VsZi5fY3VycmVudF9jb250ZXh0W25hbWVbMF1dCiAgICAgICAgICAgICBpZiBwcmVmaXg6CmRpZmYgLS1naXQgYS9MaWIveG1sL3NheC94bWxyZWFkZXIucHkgYi9MaWIveG1sL3NheC94bWxyZWFkZXIucHkKaW5kZXggOGUyMzA4NC4uNDZlZTAyYiAxMDA2NDQKLS0tIGEvTGliL3htbC9zYXgveG1scmVhZGVyLnB5CisrKyBiL0xpYi94bWwvc2F4L3htbHJlYWRlci5weQpAQCAtMzIyLDcgKzMyMiw3IEBACiAgICAgICAgIHJldHVybiBuYW1lIGluIHNlbGYuX2F0dHJzCiAKICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fYXR0cnMuaGFzX2tleShuYW1lKQorICAgICAgICByZXR1cm4gbmFtZSBpbiBzZWxmLl9hdHRycwogCiAgICAgZGVmIGdldChzZWxmLCBuYW1lLCBhbHRlcm5hdGl2ZT1Ob25lKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2F0dHJzLmdldChuYW1lLCBhbHRlcm5hdGl2ZSkKZGlmZiAtLWdpdCBhL0xpYi94bWxycGNsaWIucHkgYi9MaWIveG1scnBjbGliLnB5CmluZGV4IGE5MTZmYTEuLjNjYmEzOWYgMTAwNjQ0Ci0tLSBhL0xpYi94bWxycGNsaWIucHkKKysrIGIvTGliL3htbHJwY2xpYi5weQpAQCAtMTM5LDYgKzEzOSwxMyBAQAogaW1wb3J0IHJlLCBzdHJpbmcsIHRpbWUsIG9wZXJhdG9yCiAKIGZyb20gdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBlcnJubworaW1wb3J0IGh0dHBsaWIKK3RyeToKKyAgICBpbXBvcnQgZ3ppcAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGd6aXAgPSBOb25lICNweXRob24gY2FuIGJlIGJ1aWx0IHdpdGhvdXQgemxpYi9nemlwIHN1cHBvcnQKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBJbnRlcm5hbCBzdHVmZgpAQCAtNTI2LDU2ICs1MzMsNiBAQAogZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgSW1wb3J0RXJyb3IpOgogICAgIEZhc3RNYXJzaGFsbGVyID0gTm9uZQogCi0jCi0jIHRoZSBTR01MT1AgcGFyc2VyIGlzIGFib3V0IDE1eCBmYXN0ZXIgdGhhbiBQeXRob24ncyBidWlsdGluCi0jIFhNTCBwYXJzZXIuICBTR01MT1Agc291cmNlcyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOgotIwotIyAgICAgaHR0cDovL3d3dy5weXRob253YXJlLmNvbS9wcm9kdWN0cy94bWwvc2dtbG9wLmh0bQotIwotCi10cnk6Ci0gICAgaW1wb3J0IHNnbWxvcAotICAgIGlmIG5vdCBoYXNhdHRyKHNnbWxvcCwgIlhNTFBhcnNlciIpOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIFNnbWxvcFBhcnNlciA9IE5vbmUgIyBzZ21sb3AgYWNjZWxlcmF0b3Igbm90IGF2YWlsYWJsZQotZWxzZToKLSAgICBjbGFzcyBTZ21sb3BQYXJzZXI6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXQpOgotCi0gICAgICAgICAgICAjIHNldHVwIGNhbGxiYWNrcwotICAgICAgICAgICAgc2VsZi5maW5pc2hfc3RhcnR0YWcgPSB0YXJnZXQuc3RhcnQKLSAgICAgICAgICAgIHNlbGYuZmluaXNoX2VuZHRhZyA9IHRhcmdldC5lbmQKLSAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEgPSB0YXJnZXQuZGF0YQotICAgICAgICAgICAgc2VsZi5oYW5kbGVfeG1sID0gdGFyZ2V0LnhtbAotCi0gICAgICAgICAgICAjIGFjdGl2YXRlIHBhcnNlcgotICAgICAgICAgICAgc2VsZi5wYXJzZXIgPSBzZ21sb3AuWE1MUGFyc2VyKCkKLSAgICAgICAgICAgIHNlbGYucGFyc2VyLnJlZ2lzdGVyKHNlbGYpCi0gICAgICAgICAgICBzZWxmLmZlZWQgPSBzZWxmLnBhcnNlci5mZWVkCi0gICAgICAgICAgICBzZWxmLmVudGl0eSA9IHsKLSAgICAgICAgICAgICAgICAiYW1wIjogIiYiLCAiZ3QiOiAiPiIsICJsdCI6ICI8IiwKLSAgICAgICAgICAgICAgICAiYXBvcyI6ICInIiwgInF1b3QiOiAnIicKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLmNsb3NlKCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIgPSBzZWxmLmZlZWQgPSBOb25lICMgbnVrZSBjaXJjdWxhciByZWZlcmVuY2UKLQotICAgICAgICBkZWYgaGFuZGxlX3Byb2Moc2VsZiwgdGFnLCBhdHRyKToKLSAgICAgICAgICAgIG0gPSByZS5zZWFyY2goImVuY29kaW5nXHMqPVxzKlsnXCJdKFteXCInXSspW1wiJ10iLCBhdHRyKQotICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV94bWwobS5ncm91cCgxKSwgMSkKLQotICAgICAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCBlbnRpdHkpOgotICAgICAgICAgICAgIyA8c3RyaW5nPiBlbnRpdHkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHNlbGYuZW50aXR5W2VudGl0eV0pCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSgiJiVzOyIgJSBlbnRpdHkpCi0KIHRyeToKICAgICBmcm9tIHhtbC5wYXJzZXJzIGltcG9ydCBleHBhdAogICAgIGlmIG5vdCBoYXNhdHRyKGV4cGF0LCAiUGFyc2VyQ3JlYXRlIik6CkBAIC01ODQsOCArNTQxLDcgQEAKICAgICBFeHBhdFBhcnNlciA9IE5vbmUgIyBleHBhdCBub3QgYXZhaWxhYmxlCiBlbHNlOgogICAgIGNsYXNzIEV4cGF0UGFyc2VyOgotICAgICAgICAjIGZhc3QgZXhwYXQgcGFyc2VyIGZvciBQeXRob24gMi4wIGFuZCBsYXRlci4gIHRoaXMgaXMgYWJvdXQKLSAgICAgICAgIyA1MCUgc2xvd2VyIHRoYW4gc2dtbG9wLCBvbiByb3VuZHRyaXAgdGVzdGluZworICAgICAgICAjIGZhc3QgZXhwYXQgcGFyc2VyIGZvciBQeXRob24gMi4wIGFuZCBsYXRlci4KICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhcmdldCk6CiAgICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoTm9uZSwgTm9uZSkKICAgICAgICAgICAgIHNlbGYuX3RhcmdldCA9IHRhcmdldApAQCAtNjA2LDggKzU2Miw3IEBACiAKIGNsYXNzIFNsb3dQYXJzZXI6CiAgICAgIiIiRGVmYXVsdCBYTUwgcGFyc2VyIChiYXNlZCBvbiB4bWxsaWIuWE1MUGFyc2VyKS4iIiIKLSAgICAjIHRoaXMgaXMgYWJvdXQgMTAgdGltZXMgc2xvd2VyIHRoYW4gc2dtbG9wLCBvbiByb3VuZHRyaXAKLSAgICAjIHRlc3RpbmcuCisgICAgIyB0aGlzIGlzIHRoZSBzbG93ZXN0IHBhcnNlci4KICAgICBkZWYgX19pbml0X18oc2VsZiwgdGFyZ2V0KToKICAgICAgICAgaW1wb3J0IHhtbGxpYiAjIGxhenkgc3ViY2xhc3NpbmcgKCEpCiAgICAgICAgIGlmIHhtbGxpYi5YTUxQYXJzZXIgbm90IGluIFNsb3dQYXJzZXIuX19iYXNlc19fOgpAQCAtMTA2OSw4ICsxMDI0LDYgQEAKICAgICAgICAgdGFyZ2V0ID0gVW5tYXJzaGFsbGVyKHVzZV9kYXRldGltZT11c2VfZGF0ZXRpbWUpCiAgICAgICAgIGlmIEZhc3RQYXJzZXI6CiAgICAgICAgICAgICBwYXJzZXIgPSBGYXN0UGFyc2VyKHRhcmdldCkKLSAgICAgICAgZWxpZiBTZ21sb3BQYXJzZXI6Ci0gICAgICAgICAgICBwYXJzZXIgPSBTZ21sb3BQYXJzZXIodGFyZ2V0KQogICAgICAgICBlbGlmIEV4cGF0UGFyc2VyOgogICAgICAgICAgICAgcGFyc2VyID0gRXhwYXRQYXJzZXIodGFyZ2V0KQogICAgICAgICBlbHNlOgpAQCAtMTE4Myw2ICsxMTM2LDc4IEBACiAgICAgcC5jbG9zZSgpCiAgICAgcmV0dXJuIHUuY2xvc2UoKSwgdS5nZXRtZXRob2RuYW1lKCkKIAorIyMKKyMgRW5jb2RlIGEgc3RyaW5nIHVzaW5nIHRoZSBnemlwIGNvbnRlbnQgZW5jb2Rpbmcgc3VjaCBhcyBzcGVjaWZpZWQgYnkgdGhlCisjIENvbnRlbnQtRW5jb2Rpbmc6IGd6aXAKKyMgaW4gdGhlIEhUVFAgaGVhZGVyLCBhcyBkZXNjcmliZWQgaW4gUkZDIDE5NTIKKyMKKyMgQHBhcmFtIGRhdGEgdGhlIHVuZW5jb2RlZCBkYXRhCisjIEByZXR1cm4gdGhlIGVuY29kZWQgZGF0YQorCitkZWYgZ3ppcF9lbmNvZGUoZGF0YSk6CisgICAgIiIiZGF0YSAtPiBnemlwIGVuY29kZWQgZGF0YQorCisgICAgRW5jb2RlIGRhdGEgdXNpbmcgdGhlIGd6aXAgY29udGVudCBlbmNvZGluZyBhcyBkZXNjcmliZWQgaW4gUkZDIDE5NTIKKyAgICAiIiIKKyAgICBpZiBub3QgZ3ppcDoKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgZ3pmID0gZ3ppcC5HemlwRmlsZShtb2RlPSJ3YiIsIGZpbGVvYmo9ZiwgY29tcHJlc3NsZXZlbD0xKQorICAgIGd6Zi53cml0ZShkYXRhKQorICAgIGd6Zi5jbG9zZSgpCisgICAgZW5jb2RlZCA9IGYuZ2V0dmFsdWUoKQorICAgIGYuY2xvc2UoKQorICAgIHJldHVybiBlbmNvZGVkCisKKyMjCisjIERlY29kZSBhIHN0cmluZyB1c2luZyB0aGUgZ3ppcCBjb250ZW50IGVuY29kaW5nIHN1Y2ggYXMgc3BlY2lmaWVkIGJ5IHRoZQorIyBDb250ZW50LUVuY29kaW5nOiBnemlwCisjIGluIHRoZSBIVFRQIGhlYWRlciwgYXMgZGVzY3JpYmVkIGluIFJGQyAxOTUyCisjCisjIEBwYXJhbSBkYXRhIFRoZSBlbmNvZGVkIGRhdGEKKyMgQHJldHVybiB0aGUgdW5lbmNvZGVkIGRhdGEKKyMgQHJhaXNlcyBWYWx1ZUVycm9yIGlmIGRhdGEgaXMgbm90IGNvcnJlY3RseSBjb2RlZC4KKworZGVmIGd6aXBfZGVjb2RlKGRhdGEpOgorICAgICIiImd6aXAgZW5jb2RlZCBkYXRhIC0+IHVuZW5jb2RlZCBkYXRhCisKKyAgICBEZWNvZGUgZGF0YSB1c2luZyB0aGUgZ3ppcCBjb250ZW50IGVuY29kaW5nIGFzIGRlc2NyaWJlZCBpbiBSRkMgMTk1MgorICAgICIiIgorICAgIGlmIG5vdCBnemlwOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKGRhdGEpCisgICAgZ3pmID0gZ3ppcC5HemlwRmlsZShtb2RlPSJyYiIsIGZpbGVvYmo9ZikKKyAgICB0cnk6CisgICAgICAgIGRlY29kZWQgPSBnemYucmVhZCgpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgZGF0YSIpCisgICAgZi5jbG9zZSgpCisgICAgZ3pmLmNsb3NlKCkKKyAgICByZXR1cm4gZGVjb2RlZAorCisjIworIyBSZXR1cm4gYSBkZWNvZGVkIGZpbGUtbGlrZSBvYmplY3QgZm9yIHRoZSBnemlwIGVuY29kaW5nCisjIGFzIGRlc2NyaWJlZCBpbiBSRkMgMTk1Mi4KKyMKKyMgQHBhcmFtIHJlc3BvbnNlIEEgc3RyZWFtIHN1cHBvcnRpbmcgYSByZWFkKCkgbWV0aG9kCisjIEByZXR1cm4gYSBmaWxlLWxpa2Ugb2JqZWN0IHRoYXQgdGhlIGRlY29kZWQgZGF0YSBjYW4gYmUgcmVhZCgpIGZyb20KKworY2xhc3MgR3ppcERlY29kZWRSZXNwb25zZShnemlwLkd6aXBGaWxlIGlmIGd6aXAgZWxzZSBvYmplY3QpOgorICAgICIiImEgZmlsZS1saWtlIG9iamVjdCB0byBkZWNvZGUgYSByZXNwb25zZSBlbmNvZGVkIHdpdGggdGhlIGd6aXAKKyAgICBtZXRob2QsIGFzIGRlc2NyaWJlZCBpbiBSRkMgMTk1Mi4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVzcG9uc2UpOgorICAgICAgICAjcmVzcG9uc2UgZG9lc24ndCBzdXBwb3J0IHRlbGwoKSBhbmQgcmVhZCgpLCByZXF1aXJlZCBieQorICAgICAgICAjR3ppcEZpbGUKKyAgICAgICAgaWYgbm90IGd6aXA6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHNlbGYuc3RyaW5naW8gPSBTdHJpbmdJTy5TdHJpbmdJTyhyZXNwb25zZS5yZWFkKCkpCisgICAgICAgIGd6aXAuR3ppcEZpbGUuX19pbml0X18oc2VsZiwgbW9kZT0icmIiLCBmaWxlb2JqPXNlbGYuc3RyaW5naW8pCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGd6aXAuR3ppcEZpbGUuY2xvc2Uoc2VsZikKKyAgICAgICAgc2VsZi5zdHJpbmdpby5jbG9zZSgpCisKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyByZXF1ZXN0IGRpc3BhdGNoZXIKQEAgLTEyMTAsOCArMTIzNSwzOSBAQAogICAgICMgY2xpZW50IGlkZW50aWZpZXIgKG1heSBiZSBvdmVycmlkZGVuKQogICAgIHVzZXJfYWdlbnQgPSAieG1scnBjbGliLnB5LyVzIChieSB3d3cucHl0aG9ud2FyZS5jb20pIiAlIF9fdmVyc2lvbl9fCiAKKyAgICAjaWYgdHJ1ZSwgd2UnbGwgcmVxdWVzdCBnemlwIGVuY29kaW5nCisgICAgYWNjZXB0X2d6aXBfZW5jb2RpbmcgPSBUcnVlCisKKyAgICAjIGlmIHBvc2l0aXZlLCBlbmNvZGUgcmVxdWVzdCB1c2luZyBnemlwIGlmIGl0IGV4Y2VlZHMgdGhpcyB0aHJlc2hvbGQKKyAgICAjIG5vdGUgdGhhdCBtYW55IHNlcnZlciB3aWxsIGdldCBjb25mdXNlZCwgc28gb25seSB1c2UgaXQgaWYgeW91IGtub3cKKyAgICAjIHRoYXQgdGhleSBjYW4gZGVjb2RlIHN1Y2ggYSByZXF1ZXN0CisgICAgZW5jb2RlX3RocmVzaG9sZCA9IE5vbmUgI05vbmUgPSBkb24ndCBlbmNvZGUKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VfZGF0ZXRpbWU9MCk6CiAgICAgICAgIHNlbGYuX3VzZV9kYXRldGltZSA9IHVzZV9kYXRldGltZQorICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gKE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuX2V4dHJhX2hlYWRlcnMgPSBbXQorICAgICMjCisgICAgIyBTZW5kIGEgY29tcGxldGUgcmVxdWVzdCwgYW5kIHBhcnNlIHRoZSByZXNwb25zZS4KKyAgICAjIFJldHJ5IHJlcXVlc3QgaWYgYSBjYWNoZWQgY29ubmVjdGlvbiBoYXMgZGlzY29ubmVjdGVkLgorICAgICMKKyAgICAjIEBwYXJhbSBob3N0IFRhcmdldCBob3N0LgorICAgICMgQHBhcmFtIGhhbmRsZXIgVGFyZ2V0IFBSQyBoYW5kbGVyLgorICAgICMgQHBhcmFtIHJlcXVlc3RfYm9keSBYTUwtUlBDIHJlcXVlc3QgYm9keS4KKyAgICAjIEBwYXJhbSB2ZXJib3NlIERlYnVnZ2luZyBmbGFnLgorICAgICMgQHJldHVybiBQYXJzZWQgcmVzcG9uc2UuCisKKyAgICBkZWYgcmVxdWVzdChzZWxmLCBob3N0LCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIHZlcmJvc2U9MCk6CisgICAgICAgICNyZXRyeSByZXF1ZXN0IG9uY2UgaWYgY2FjaGVkIGNvbm5lY3Rpb24gaGFzIGdvbmUgY29sZAorICAgICAgICBmb3IgaSBpbiAoMCwgMSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2luZ2xlX3JlcXVlc3QoaG9zdCwgaGFuZGxlciwgcmVxdWVzdF9ib2R5LCB2ZXJib3NlKQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKKyAgICAgICAgICAgICAgICBpZiBpIG9yIGUuZXJybm8gbm90IGluIChlcnJuby5FQ09OTlJFU0VULCBlcnJuby5FQ09OTkFCT1JURUQsIGVycm5vLkVQSVBFKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBodHRwbGliLkJhZFN0YXR1c0xpbmU6ICNjbG9zZSBhZnRlciB3ZSBzZW50IHJlcXVlc3QKKyAgICAgICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgIyMKICAgICAjIFNlbmQgYSBjb21wbGV0ZSByZXF1ZXN0LCBhbmQgcGFyc2UgdGhlIHJlc3BvbnNlLgpAQCAtMTIyMiwzNSArMTI3OCwzOSBAQAogICAgICMgQHBhcmFtIHZlcmJvc2UgRGVidWdnaW5nIGZsYWcuCiAgICAgIyBAcmV0dXJuIFBhcnNlZCByZXNwb25zZS4KIAotICAgIGRlZiByZXF1ZXN0KHNlbGYsIGhvc3QsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSwgdmVyYm9zZT0wKToKKyAgICBkZWYgc2luZ2xlX3JlcXVlc3Qoc2VsZiwgaG9zdCwgaGFuZGxlciwgcmVxdWVzdF9ib2R5LCB2ZXJib3NlPTApOgogICAgICAgICAjIGlzc3VlIFhNTC1SUEMgcmVxdWVzdAogCiAgICAgICAgIGggPSBzZWxmLm1ha2VfY29ubmVjdGlvbihob3N0KQogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgaC5zZXRfZGVidWdsZXZlbCgxKQogCi0gICAgICAgIHNlbGYuc2VuZF9yZXF1ZXN0KGgsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSkKLSAgICAgICAgc2VsZi5zZW5kX2hvc3QoaCwgaG9zdCkKLSAgICAgICAgc2VsZi5zZW5kX3VzZXJfYWdlbnQoaCkKLSAgICAgICAgc2VsZi5zZW5kX2NvbnRlbnQoaCwgcmVxdWVzdF9ib2R5KQotCi0gICAgICAgIGVycmNvZGUsIGVycm1zZywgaGVhZGVycyA9IGguZ2V0cmVwbHkoKQotCi0gICAgICAgIGlmIGVycmNvZGUgIT0gMjAwOgotICAgICAgICAgICAgcmFpc2UgUHJvdG9jb2xFcnJvcigKLSAgICAgICAgICAgICAgICBob3N0ICsgaGFuZGxlciwKLSAgICAgICAgICAgICAgICBlcnJjb2RlLCBlcnJtc2csCi0gICAgICAgICAgICAgICAgaGVhZGVycwotICAgICAgICAgICAgICAgICkKLQotICAgICAgICBzZWxmLnZlcmJvc2UgPSB2ZXJib3NlCi0KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc29jayA9IGguX2Nvbm4uc29jawotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgc2VsZi5zZW5kX3JlcXVlc3QoaCwgaGFuZGxlciwgcmVxdWVzdF9ib2R5KQorICAgICAgICAgICAgc2VsZi5zZW5kX2hvc3QoaCwgaG9zdCkKKyAgICAgICAgICAgIHNlbGYuc2VuZF91c2VyX2FnZW50KGgpCisgICAgICAgICAgICBzZWxmLnNlbmRfY29udGVudChoLCByZXF1ZXN0X2JvZHkpCiAKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlX3Jlc3BvbnNlKGguZ2V0ZmlsZSgpLCBzb2NrKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBoLmdldHJlc3BvbnNlKGJ1ZmZlcmluZz1UcnVlKQorICAgICAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzID09IDIwMDoKKyAgICAgICAgICAgICAgICBzZWxmLnZlcmJvc2UgPSB2ZXJib3NlCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfcmVzcG9uc2UocmVzcG9uc2UpCisgICAgICAgIGV4Y2VwdCBGYXVsdDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAjIEFsbCB1bmV4cGVjdGVkIGVycm9ycyBsZWF2ZSBjb25uZWN0aW9uIGluCisgICAgICAgICAgICAjIGEgc3RyYW5nZSBzdGF0ZSwgc28gd2UgY2xlYXIgaXQuCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgI2Rpc2NhcmQgYW55IHJlc3BvbnNlIGRhdGEgYW5kIHJhaXNlIGV4Y2VwdGlvbgorICAgICAgICBpZiAocmVzcG9uc2UuZ2V0aGVhZGVyKCJjb250ZW50LWxlbmd0aCIsIDApKToKKyAgICAgICAgICAgIHJlc3BvbnNlLnJlYWQoKQorICAgICAgICByYWlzZSBQcm90b2NvbEVycm9yKAorICAgICAgICAgICAgaG9zdCArIGhhbmRsZXIsCisgICAgICAgICAgICByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnJlYXNvbiwKKyAgICAgICAgICAgIHJlc3BvbnNlLm1zZywKKyAgICAgICAgICAgICkKIAogICAgICMjCiAgICAgIyBDcmVhdGUgcGFyc2VyLgpAQCAtMTI5OSwxMCArMTM1OSwyNSBAQAogICAgICMgQHJldHVybiBBIGNvbm5lY3Rpb24gaGFuZGxlLgogCiAgICAgZGVmIG1ha2VfY29ubmVjdGlvbihzZWxmLCBob3N0KToKKyAgICAgICAgI3JldHVybiBhbiBleGlzdGluZyBjb25uZWN0aW9uIGlmIHBvc3NpYmxlLiAgVGhpcyBhbGxvd3MKKyAgICAgICAgI0hUVFAvMS4xIGtlZXAtYWxpdmUuCisgICAgICAgIGlmIHNlbGYuX2Nvbm5lY3Rpb24gYW5kIGhvc3QgPT0gc2VsZi5fY29ubmVjdGlvblswXToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uWzFdCisKICAgICAgICAgIyBjcmVhdGUgYSBIVFRQIGNvbm5lY3Rpb24gb2JqZWN0IGZyb20gYSBob3N0IGRlc2NyaXB0b3IKLSAgICAgICAgaW1wb3J0IGh0dHBsaWIKLSAgICAgICAgaG9zdCwgZXh0cmFfaGVhZGVycywgeDUwOSA9IHNlbGYuZ2V0X2hvc3RfaW5mbyhob3N0KQotICAgICAgICByZXR1cm4gaHR0cGxpYi5IVFRQKGhvc3QpCisgICAgICAgIGNob3N0LCBzZWxmLl9leHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCisgICAgICAgICNzdG9yZSB0aGUgaG9zdCBhcmd1bWVudCBhbG9uZyB3aXRoIHRoZSBjb25uZWN0aW9uIG9iamVjdAorICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gaG9zdCwgaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihjaG9zdCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb25bMV0KKworICAgICMjCisgICAgIyBDbGVhciBhbnkgY2FjaGVkIGNvbm5lY3Rpb24gb2JqZWN0LgorICAgICMgVXNlZCBpbiB0aGUgZXZlbnQgb2Ygc29ja2V0IGVycm9ycy4KKyAgICAjCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uWzFdOgorICAgICAgICAgICAgc2VsZi5fY29ubmVjdGlvblsxXS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gKE5vbmUsIE5vbmUpCiAKICAgICAjIwogICAgICMgU2VuZCByZXF1ZXN0IGhlYWRlci4KQEAgLTEzMTIsMTcgKzEzODcsMjQgQEAKICAgICAjIEBwYXJhbSByZXF1ZXN0X2JvZHkgWE1MLVJQQyBib2R5LgogCiAgICAgZGVmIHNlbmRfcmVxdWVzdChzZWxmLCBjb25uZWN0aW9uLCBoYW5kbGVyLCByZXF1ZXN0X2JvZHkpOgotICAgICAgICBjb25uZWN0aW9uLnB1dHJlcXVlc3QoIlBPU1QiLCBoYW5kbGVyKQorICAgICAgICBpZiAoc2VsZi5hY2NlcHRfZ3ppcF9lbmNvZGluZyBhbmQgZ3ppcCk6CisgICAgICAgICAgICBjb25uZWN0aW9uLnB1dHJlcXVlc3QoIlBPU1QiLCBoYW5kbGVyLCBza2lwX2FjY2VwdF9lbmNvZGluZz1UcnVlKQorICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoIkFjY2VwdC1FbmNvZGluZyIsICJnemlwIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0cmVxdWVzdCgiUE9TVCIsIGhhbmRsZXIpCiAKICAgICAjIwogICAgICMgU2VuZCBob3N0IG5hbWUuCiAgICAgIwogICAgICMgQHBhcmFtIGNvbm5lY3Rpb24gQ29ubmVjdGlvbiBoYW5kbGUuCiAgICAgIyBAcGFyYW0gaG9zdCBIb3N0IG5hbWUuCisgICAgIworICAgICMgTm90ZTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFjdHVhbGx5IGFkZCB0aGUgIkhvc3QiCisgICAgIyBoZWFkZXIgYW55bW9yZSwgaXQgaXMgZG9uZSBhcyBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uLnB1dHJlcXVlc3QoKSBpbgorICAgICMgc2VuZF9yZXF1ZXN0KCkgYWJvdmUuCiAKICAgICBkZWYgc2VuZF9ob3N0KHNlbGYsIGNvbm5lY3Rpb24sIGhvc3QpOgotICAgICAgICBob3N0LCBleHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCi0gICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKCJIb3N0IiwgaG9zdCkKKyAgICAgICAgZXh0cmFfaGVhZGVycyA9IHNlbGYuX2V4dHJhX2hlYWRlcnMKICAgICAgICAgaWYgZXh0cmFfaGVhZGVyczoKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXh0cmFfaGVhZGVycywgRGljdFR5cGUpOgogICAgICAgICAgICAgICAgIGV4dHJhX2hlYWRlcnMgPSBleHRyYV9oZWFkZXJzLml0ZW1zKCkKQEAgLTEzNDUsMTAgKzE0MjcsMTYgQEAKIAogICAgIGRlZiBzZW5kX2NvbnRlbnQoc2VsZiwgY29ubmVjdGlvbiwgcmVxdWVzdF9ib2R5KToKICAgICAgICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3htbCIpCisKKyAgICAgICAgI29wdGlvbmFsbHkgZW5jb2RlIHRoZSByZXF1ZXN0CisgICAgICAgIGlmIChzZWxmLmVuY29kZV90aHJlc2hvbGQgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICBzZWxmLmVuY29kZV90aHJlc2hvbGQgPCBsZW4ocmVxdWVzdF9ib2R5KSBhbmQKKyAgICAgICAgICAgIGd6aXApOgorICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciLCAiZ3ppcCIpCisgICAgICAgICAgICByZXF1ZXN0X2JvZHkgPSBnemlwX2VuY29kZShyZXF1ZXN0X2JvZHkpCisKICAgICAgICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgc3RyKGxlbihyZXF1ZXN0X2JvZHkpKSkKLSAgICAgICAgY29ubmVjdGlvbi5lbmRoZWFkZXJzKCkKLSAgICAgICAgaWYgcmVxdWVzdF9ib2R5OgotICAgICAgICAgICAgY29ubmVjdGlvbi5zZW5kKHJlcXVlc3RfYm9keSkKKyAgICAgICAgY29ubmVjdGlvbi5lbmRoZWFkZXJzKHJlcXVlc3RfYm9keSkKIAogICAgICMjCiAgICAgIyBQYXJzZSByZXNwb25zZS4KQEAgLTEzNTYsMzcgKzE0NDQsMzAgQEAKICAgICAjIEBwYXJhbSBmaWxlIFN0cmVhbS4KICAgICAjIEByZXR1cm4gUmVzcG9uc2UgdHVwbGUgYW5kIHRhcmdldCBtZXRob2QuCiAKLSAgICBkZWYgcGFyc2VfcmVzcG9uc2Uoc2VsZiwgZmlsZSk6Ci0gICAgICAgICMgY29tcGF0aWJpbGl0eSBpbnRlcmZhY2UKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlX3Jlc3BvbnNlKGZpbGUsIE5vbmUpCisgICAgZGVmIHBhcnNlX3Jlc3BvbnNlKHNlbGYsIHJlc3BvbnNlKToKKyAgICAgICAgIyByZWFkIHJlc3BvbnNlIGRhdGEgZnJvbSBodHRwcmVzcG9uc2UsIGFuZCBwYXJzZSBpdAogCi0gICAgIyMKLSAgICAjIFBhcnNlIHJlc3BvbnNlIChhbHRlcm5hdGUgaW50ZXJmYWNlKS4gIFRoaXMgaXMgc2ltaWxhciB0byB0aGUKLSAgICAjIHBhcnNlX3Jlc3BvbnNlIG1ldGhvZCwgYnV0IGFsc28gcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUKLSAgICAjIHVuZGVybHlpbmcgc29ja2V0IG9iamVjdCAod2hlcmUgYXZhaWxhYmxlKS4KLSAgICAjCi0gICAgIyBAcGFyYW0gZmlsZSBTdHJlYW0uCi0gICAgIyBAcGFyYW0gc29jayBTb2NrZXQgaGFuZGxlIChvciBOb25lLCBpZiB0aGUgc29ja2V0IG9iamVjdAotICAgICMgICAgY291bGQgbm90IGJlIGFjY2Vzc2VkKS4KLSAgICAjIEByZXR1cm4gUmVzcG9uc2UgdHVwbGUgYW5kIHRhcmdldCBtZXRob2QuCi0KLSAgICBkZWYgX3BhcnNlX3Jlc3BvbnNlKHNlbGYsIGZpbGUsIHNvY2spOgotICAgICAgICAjIHJlYWQgcmVzcG9uc2UgZnJvbSBpbnB1dCBmaWxlL3NvY2tldCwgYW5kIHBhcnNlIGl0CisgICAgICAgICMgQ2hlY2sgZm9yIG5ldyBodHRwIHJlc3BvbnNlIG9iamVjdCwgZWxzZSBpdCBpcyBhIGZpbGUgb2JqZWN0CisgICAgICAgIGlmIGhhc2F0dHIocmVzcG9uc2UsJ2dldGhlYWRlcicpOgorICAgICAgICAgICAgaWYgcmVzcG9uc2UuZ2V0aGVhZGVyKCJDb250ZW50LUVuY29kaW5nIiwgIiIpID09ICJnemlwIjoKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBHemlwRGVjb2RlZFJlc3BvbnNlKHJlc3BvbnNlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSByZXNwb25zZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyZWFtID0gcmVzcG9uc2UKIAogICAgICAgICBwLCB1ID0gc2VsZi5nZXRwYXJzZXIoKQogCiAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBpZiBzb2NrOgotICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gc29jay5yZWN2KDEwMjQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gZmlsZS5yZWFkKDEwMjQpCi0gICAgICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICBkYXRhID0gc3RyZWFtLnJlYWQoMTAyNCkKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgImJvZHk6IiwgcmVwcihyZXNwb25zZSkKLSAgICAgICAgICAgIHAuZmVlZChyZXNwb25zZSkKKyAgICAgICAgICAgICAgICBwcmludCAiYm9keToiLCByZXByKGRhdGEpCisgICAgICAgICAgICBwLmZlZWQoZGF0YSkKIAotICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgaWYgc3RyZWFtIGlzIG5vdCByZXNwb25zZToKKyAgICAgICAgICAgIHN0cmVhbS5jbG9zZSgpCiAgICAgICAgIHAuY2xvc2UoKQogCiAgICAgICAgIHJldHVybiB1LmNsb3NlKCkKQEAgLTE0MDAsMTggKzE0ODEsMjAgQEAKICAgICAjIEZJWE1FOiBtb3N0bHkgdW50ZXN0ZWQKIAogICAgIGRlZiBtYWtlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCk6CisgICAgICAgIGlmIHNlbGYuX2Nvbm5lY3Rpb24gYW5kIGhvc3QgPT0gc2VsZi5fY29ubmVjdGlvblswXToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uWzFdCiAgICAgICAgICMgY3JlYXRlIGEgSFRUUFMgY29ubmVjdGlvbiBvYmplY3QgZnJvbSBhIGhvc3QgZGVzY3JpcHRvcgogICAgICAgICAjIGhvc3QgbWF5IGJlIGEgc3RyaW5nLCBvciBhIChob3N0LCB4NTA5LWRpY3QpIHR1cGxlCi0gICAgICAgIGltcG9ydCBodHRwbGliCi0gICAgICAgIGhvc3QsIGV4dHJhX2hlYWRlcnMsIHg1MDkgPSBzZWxmLmdldF9ob3N0X2luZm8oaG9zdCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgSFRUUFMgPSBodHRwbGliLkhUVFBTCisgICAgICAgICAgICBIVFRQUyA9IGh0dHBsaWIuSFRUUFNDb25uZWN0aW9uCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAgICAgICAgInlvdXIgdmVyc2lvbiBvZiBodHRwbGliIGRvZXNuJ3Qgc3VwcG9ydCBIVFRQUyIKICAgICAgICAgICAgICAgICApCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gSFRUUFMoaG9zdCwgTm9uZSwgKiooeDUwOSBvciB7fSkpCisgICAgICAgICAgICBjaG9zdCwgc2VsZi5fZXh0cmFfaGVhZGVycywgeDUwOSA9IHNlbGYuZ2V0X2hvc3RfaW5mbyhob3N0KQorICAgICAgICAgICAgc2VsZi5fY29ubmVjdGlvbiA9IGhvc3QsIEhUVFBTKGNob3N0LCBOb25lLCAqKih4NTA5IG9yIHt9KSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uWzFdCiAKICMjCiAjIFN0YW5kYXJkIHNlcnZlciBwcm94eS4gIFRoaXMgY2xhc3MgZXN0YWJsaXNoZXMgYSB2aXJ0dWFsIGNvbm5lY3Rpb24KQEAgLTE0NzYsNiArMTU1OSw5IEBACiAgICAgICAgIHNlbGYuX192ZXJib3NlID0gdmVyYm9zZQogICAgICAgICBzZWxmLl9fYWxsb3dfbm9uZSA9IGFsbG93X25vbmUKIAorICAgIGRlZiBfX2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9fdHJhbnNwb3J0LmNsb3NlKCkKKwogICAgIGRlZiBfX3JlcXVlc3Qoc2VsZiwgbWV0aG9kbmFtZSwgcGFyYW1zKToKICAgICAgICAgIyBjYWxsIGEgbWV0aG9kIG9uIHRoZSByZW1vdGUgc2VydmVyCiAKQEAgLTE1MDksNiArMTU5NSwxNiBAQAogICAgICMgbm90ZTogdG8gY2FsbCBhIHJlbW90ZSBvYmplY3Qgd2l0aCBhbiBub24tc3RhbmRhcmQgbmFtZSwgdXNlCiAgICAgIyByZXN1bHQgZ2V0YXR0cihzZXJ2ZXIsICJzdHJhbmdlLXB5dGhvbi1uYW1lIikoYXJncykKIAorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgIiIiQSB3b3JrYXJvdW5kIHRvIGdldCBzcGVjaWFsIGF0dHJpYnV0ZXMgb24gdGhlIFNlcnZlclByb3h5CisgICAgICAgICAgIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgbWFnaWMgX19nZXRhdHRyX18KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGF0dHIgPT0gImNsb3NlIjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xvc2UKKyAgICAgICAgZWxpZiBhdHRyID09ICJ0cmFuc3BvcnQiOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX190cmFuc3BvcnQKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkF0dHJpYnV0ZSAlciBub3QgZm91bmQiICUgKGF0dHIsKSkKKwogIyBjb21wYXRpYmlsaXR5CiAKIFNlcnZlciA9IFNlcnZlclByb3h5CmRpZmYgLS1naXQgYS9MaWIvemlwZmlsZS5weSBiL0xpYi96aXBmaWxlLnB5CmluZGV4IDM0YjNmMWEuLjdlM2NhZjAgMTAwNjQ0Ci0tLSBhL0xpYi96aXBmaWxlLnB5CisrKyBiL0xpYi96aXBmaWxlLnB5CkBAIC0zLDYgKzMsOCBAQAogIiIiCiBpbXBvcnQgc3RydWN0LCBvcywgdGltZSwgc3lzLCBzaHV0aWwKIGltcG9ydCBiaW5hc2NpaSwgY1N0cmluZ0lPLCBzdGF0CitpbXBvcnQgaW8KK2ltcG9ydCByZQogCiB0cnk6CiAgICAgaW1wb3J0IHpsaWIgIyBXZSBtYXkgbmVlZCBpdHMgY29tcHJlc3Npb24gbWV0aG9kCkBAIC0xMjgsMjMgKzEzMCw0MSBAQAogX0NENjRfRElSRUNUT1JZX1NJWkUgPSA4CiBfQ0Q2NF9PRkZTRVRfU1RBUlRfQ0VOVERJUiA9IDkKIAotZGVmIGlzX3ppcGZpbGUoZmlsZW5hbWUpOgotICAgICIiIlF1aWNrbHkgc2VlIGlmIGZpbGUgaXMgYSBaSVAgZmlsZSBieSBjaGVja2luZyB0aGUgbWFnaWMgbnVtYmVyLiIiIgorZGVmIF9jaGVja196aXBmaWxlKGZwKToKICAgICB0cnk6Ci0gICAgICAgIGZwaW4gPSBvcGVuKGZpbGVuYW1lLCAicmIiKQotICAgICAgICBlbmRyZWMgPSBfRW5kUmVjRGF0YShmcGluKQotICAgICAgICBmcGluLmNsb3NlKCkKLSAgICAgICAgaWYgZW5kcmVjOgotICAgICAgICAgICAgcmV0dXJuIFRydWUgICAgICAgICAgICAgICAgICMgZmlsZSBoYXMgY29ycmVjdCBtYWdpYyBudW1iZXIKKyAgICAgICAgaWYgX0VuZFJlY0RhdGEoZnApOgorICAgICAgICAgICAgcmV0dXJuIFRydWUgICAgICAgICAjIGZpbGUgaGFzIGNvcnJlY3QgbWFnaWMgbnVtYmVyCiAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gRmFsc2UKIAorZGVmIGlzX3ppcGZpbGUoZmlsZW5hbWUpOgorICAgICIiIlF1aWNrbHkgc2VlIGlmIGEgZmlsZSBpcyBhIFpJUCBmaWxlIGJ5IGNoZWNraW5nIHRoZSBtYWdpYyBudW1iZXIuCisKKyAgICBUaGUgZmlsZW5hbWUgYXJndW1lbnQgbWF5IGJlIGEgZmlsZSBvciBmaWxlLWxpa2Ugb2JqZWN0IHRvby4KKyAgICAiIiIKKyAgICByZXN1bHQgPSBGYWxzZQorICAgIHRyeToKKyAgICAgICAgaWYgaGFzYXR0cihmaWxlbmFtZSwgInJlYWQiKToKKyAgICAgICAgICAgIHJlc3VsdCA9IF9jaGVja196aXBmaWxlKGZwPWZpbGVuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBfY2hlY2tfemlwZmlsZShmcCkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworICAgIHJldHVybiByZXN1bHQKKwogZGVmIF9FbmRSZWNEYXRhNjQoZnBpbiwgb2Zmc2V0LCBlbmRyZWMpOgogICAgICIiIgogICAgIFJlYWQgdGhlIFpJUDY0IGVuZC1vZi1hcmNoaXZlIHJlY29yZHMgYW5kIHVzZSB0aGF0IHRvIHVwZGF0ZSBlbmRyZWMKICAgICAiIiIKLSAgICBmcGluLnNlZWsob2Zmc2V0IC0gc2l6ZUVuZENlbnREaXI2NExvY2F0b3IsIDIpCisgICAgdHJ5OgorICAgICAgICBmcGluLnNlZWsob2Zmc2V0IC0gc2l6ZUVuZENlbnREaXI2NExvY2F0b3IsIDIpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICMgSWYgdGhlIHNlZWsgZmFpbHMsIHRoZSBmaWxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBhIFpJUDY0CisgICAgICAgICMgZW5kLW9mLWFyY2hpdmUgcmVjb3JkLCBzbyBqdXN0IHJldHVybiB0aGUgZW5kIHJlY29yZCB3ZSB3ZXJlIGdpdmVuLgorICAgICAgICByZXR1cm4gZW5kcmVjCisKICAgICBkYXRhID0gZnBpbi5yZWFkKHNpemVFbmRDZW50RGlyNjRMb2NhdG9yKQogICAgIHNpZywgZGlza25vLCByZWxvZmYsIGRpc2tzID0gc3RydWN0LnVucGFjayhzdHJ1Y3RFbmRBcmNoaXZlNjRMb2NhdG9yLCBkYXRhKQogICAgIGlmIHNpZyAhPSBzdHJpbmdFbmRBcmNoaXZlNjRMb2NhdG9yOgpAQCAtNDM5LDE5OCArNDU5LDE5NCBAQAogICAgICAgICBzZWxmLl9VcGRhdGVLZXlzKGMpCiAgICAgICAgIHJldHVybiBjCiAKLWNsYXNzIFppcEV4dEZpbGU6CitjbGFzcyBaaXBFeHRGaWxlKGlvLkJ1ZmZlcmVkSU9CYXNlKToKICAgICAiIiJGaWxlLWxpa2Ugb2JqZWN0IGZvciByZWFkaW5nIGFuIGFyY2hpdmUgbWVtYmVyLgogICAgICAgIElzIHJldHVybmVkIGJ5IFppcEZpbGUub3BlbigpLgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVvYmosIHppcGluZm8sIGRlY3J5cHQ9Tm9uZSk6Ci0gICAgICAgIHNlbGYuZmlsZW9iaiA9IGZpbGVvYmoKLSAgICAgICAgc2VsZi5kZWNyeXB0ZXIgPSBkZWNyeXB0Ci0gICAgICAgIHNlbGYuYnl0ZXNfcmVhZCA9IDBMCi0gICAgICAgIHNlbGYucmF3YnVmZmVyID0gJycKLSAgICAgICAgc2VsZi5yZWFkYnVmZmVyID0gJycKLSAgICAgICAgc2VsZi5saW5lYnVmZmVyID0gJycKLSAgICAgICAgc2VsZi5lb2YgPSBGYWxzZQotICAgICAgICBzZWxmLnVuaXZfbmV3bGluZXMgPSBGYWxzZQotICAgICAgICBzZWxmLm5sU2VwcyA9ICgiXG4iLCApCi0gICAgICAgIHNlbGYubGFzdGRpc2NhcmQgPSAnJworICAgICMgTWF4IHNpemUgc3VwcG9ydGVkIGJ5IGRlY29tcHJlc3Nvci4KKyAgICBNQVhfTiA9IDEgPDwgMzEgLSAxCiAKLSAgICAgICAgc2VsZi5jb21wcmVzc190eXBlID0gemlwaW5mby5jb21wcmVzc190eXBlCi0gICAgICAgIHNlbGYuY29tcHJlc3Nfc2l6ZSA9IHppcGluZm8uY29tcHJlc3Nfc2l6ZQorICAgICMgUmVhZCBmcm9tIGNvbXByZXNzZWQgZmlsZXMgaW4gNGsgYmxvY2tzLgorICAgIE1JTl9SRUFEX1NJWkUgPSA0MDk2CiAKLSAgICAgICAgc2VsZi5jbG9zZWQgID0gRmFsc2UKLSAgICAgICAgc2VsZi5tb2RlICAgID0gInIiCisgICAgIyBTZWFyY2ggZm9yIHVuaXZlcnNhbCBuZXdsaW5lcyBvciBsaW5lIGNodW5rcy4KKyAgICBQQVRURVJOID0gcmUuY29tcGlsZShyJ14oP1A8Y2h1bms+W15cclxuXSspfCg/UDxuZXdsaW5lPlxufFxyXG4/KScpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW9iaiwgbW9kZSwgemlwaW5mbywgZGVjcnlwdGVyPU5vbmUpOgorICAgICAgICBzZWxmLl9maWxlb2JqID0gZmlsZW9iagorICAgICAgICBzZWxmLl9kZWNyeXB0ZXIgPSBkZWNyeXB0ZXIKKworICAgICAgICBzZWxmLl9jb21wcmVzc190eXBlID0gemlwaW5mby5jb21wcmVzc190eXBlCisgICAgICAgIHNlbGYuX2NvbXByZXNzX3NpemUgPSB6aXBpbmZvLmNvbXByZXNzX3NpemUKKyAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCA9IHppcGluZm8uY29tcHJlc3Nfc2l6ZQorCisgICAgICAgIGlmIHNlbGYuX2NvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgorICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gemxpYi5kZWNvbXByZXNzb2JqKC0xNSkKKyAgICAgICAgc2VsZi5fdW5jb25zdW1lZCA9ICcnCisKKyAgICAgICAgc2VsZi5fcmVhZGJ1ZmZlciA9ICcnCisgICAgICAgIHNlbGYuX29mZnNldCA9IDAKKworICAgICAgICBzZWxmLl91bml2ZXJzYWwgPSAnVScgaW4gbW9kZQorICAgICAgICBzZWxmLm5ld2xpbmVzID0gTm9uZQorCisgICAgICAgICMgQWRqdXN0IHJlYWQgc2l6ZSBmb3IgZW5jcnlwdGVkIGZpbGVzIHNpbmNlIHRoZSBmaXJzdCAxMiBieXRlcworICAgICAgICAjIGFyZSBmb3IgdGhlIGVuY3J5cHRpb24vcGFzc3dvcmQgaW5mb3JtYXRpb24uCisgICAgICAgIGlmIHNlbGYuX2RlY3J5cHRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzX2xlZnQgLT0gMTIKKworICAgICAgICBzZWxmLm1vZGUgPSBtb2RlCiAgICAgICAgIHNlbGYubmFtZSA9IHppcGluZm8uZmlsZW5hbWUKIAotICAgICAgICAjIHJlYWQgZnJvbSBjb21wcmVzc2VkIGZpbGVzIGluIDY0ayBibG9ja3MKLSAgICAgICAgc2VsZi5jb21wcmVhZHNpemUgPSA2NCoxMDI0Ci0gICAgICAgIGlmIHNlbGYuY29tcHJlc3NfdHlwZSA9PSBaSVBfREVGTEFURUQ6Ci0gICAgICAgICAgICBzZWxmLmRjID0gemxpYi5kZWNvbXByZXNzb2JqKC0xNSkKLQotICAgIGRlZiBzZXRfdW5pdl9uZXdsaW5lcyhzZWxmLCB1bml2X25ld2xpbmVzKToKLSAgICAgICAgc2VsZi51bml2X25ld2xpbmVzID0gdW5pdl9uZXdsaW5lcwotCi0gICAgICAgICMgcGljayBsaW5lIHNlcGFyYXRvciBjaGFyKHMpIGJhc2VkIG9uIHVuaXZlcnNhbCBuZXdsaW5lcyBmbGFnCi0gICAgICAgIHNlbGYubmxTZXBzID0gKCJcbiIsICkKLSAgICAgICAgaWYgc2VsZi51bml2X25ld2xpbmVzOgotICAgICAgICAgICAgc2VsZi5ubFNlcHMgPSAoIlxyXG4iLCAiXHIiLCAiXG4iKQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIG5leHQoc2VsZik6Ci0gICAgICAgIG5leHRsaW5lID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBuZXh0bGluZToKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oKQotCi0gICAgICAgIHJldHVybiBuZXh0bGluZQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKLQotICAgIGRlZiBfY2hlY2tmb3JuZXdsaW5lKHNlbGYpOgotICAgICAgICBubCwgbmxsZW4gPSAtMSwgLTEKLSAgICAgICAgaWYgc2VsZi5saW5lYnVmZmVyOgotICAgICAgICAgICAgIyB1Z2x5IGNoZWNrIGZvciBjYXNlcyB3aGVyZSBoYWxmIG9mIGFuIFxyXG4gcGFpciB3YXMKLSAgICAgICAgICAgICMgcmVhZCBvbiB0aGUgbGFzdCBwYXNzLCBhbmQgdGhlIFxyIHdhcyBkaXNjYXJkZWQuICBJbiB0aGlzCi0gICAgICAgICAgICAjIGNhc2Ugd2UganVzdCB0aHJvdyBhd2F5IHRoZSBcbiBhdCB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICAgIGlmIChzZWxmLmxhc3RkaXNjYXJkLCBzZWxmLmxpbmVidWZmZXJbMF0pID09ICgnXHInLCdcbicpOgotICAgICAgICAgICAgICAgIHNlbGYubGluZWJ1ZmZlciA9IHNlbGYubGluZWJ1ZmZlclsxOl0KLQotICAgICAgICAgICAgZm9yIHNlcCBpbiBzZWxmLm5sU2VwczoKLSAgICAgICAgICAgICAgICBubCA9IHNlbGYubGluZWJ1ZmZlci5maW5kKHNlcCkKLSAgICAgICAgICAgICAgICBpZiBubCA+PSAwOgotICAgICAgICAgICAgICAgICAgICBubGxlbiA9IGxlbihzZXApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBubCwgbmxsZW4KLQotICAgICAgICByZXR1cm4gbmwsIG5sbGVuCi0KLSAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZSA9IC0xKToKLSAgICAgICAgIiIiUmVhZCBhIGxpbmUgd2l0aCBhcHByb3guIHNpemUuIElmIHNpemUgaXMgbmVnYXRpdmUsCi0gICAgICAgICAgIHJlYWQgYSB3aG9sZSBsaW5lLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2l6ZSA8IDA6Ci0gICAgICAgICAgICBzaXplID0gc3lzLm1heGludAotICAgICAgICBlbGlmIHNpemUgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJwotCi0gICAgICAgICMgY2hlY2sgZm9yIGEgbmV3bGluZSBhbHJlYWR5IGluIGJ1ZmZlcgotICAgICAgICBubCwgbmxsZW4gPSBzZWxmLl9jaGVja2Zvcm5ld2xpbmUoKQotCi0gICAgICAgIGlmIG5sID49IDA6Ci0gICAgICAgICAgICAjIHRoZSBuZXh0IGxpbmUgd2FzIGFscmVhZHkgaW4gdGhlIGJ1ZmZlcgotICAgICAgICAgICAgbmwgPSBtaW4obmwsIHNpemUpCisgICAgICAgIGlmIGhhc2F0dHIoemlwaW5mbywgJ0NSQycpOgorICAgICAgICAgICAgc2VsZi5fZXhwZWN0ZWRfY3JjID0gemlwaW5mby5DUkMKKyAgICAgICAgICAgIHNlbGYuX3J1bm5pbmdfY3JjID0gY3JjMzIoYicnKSAmIDB4ZmZmZmZmZmYKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgbm8gbGluZSBicmVhayBpbiBidWZmZXIgLSB0cnkgdG8gcmVhZCBtb3JlCi0gICAgICAgICAgICBzaXplIC09IGxlbihzZWxmLmxpbmVidWZmZXIpCi0gICAgICAgICAgICB3aGlsZSBubCA8IDAgYW5kIHNpemUgPiAwOgotICAgICAgICAgICAgICAgIGJ1ZiA9IHNlbGYucmVhZChtaW4oc2l6ZSwgMTAwKSkKLSAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNlbGYubGluZWJ1ZmZlciArPSBidWYKLSAgICAgICAgICAgICAgICBzaXplIC09IGxlbihidWYpCisgICAgICAgICAgICBzZWxmLl9leHBlY3RlZF9jcmMgPSBOb25lCiAKLSAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBhIG5ld2xpbmUgaW4gYnVmZmVyCi0gICAgICAgICAgICAgICAgbmwsIG5sbGVuID0gc2VsZi5fY2hlY2tmb3JuZXdsaW5lKCkKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGltaXQ9LTEpOgorICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gYSBsaW5lIGZyb20gdGhlIHN0cmVhbS4KIAotICAgICAgICAgICAgIyB3ZSBlaXRoZXIgcmFuIG91dCBvZiBieXRlcyBpbiB0aGUgZmlsZSwgb3IKLSAgICAgICAgICAgICMgbWV0IHRoZSBzcGVjaWZpZWQgc2l6ZSBsaW1pdCB3aXRob3V0IGZpbmRpbmcgYSBuZXdsaW5lLAotICAgICAgICAgICAgIyBzbyByZXR1cm4gY3VycmVudCBidWZmZXIKLSAgICAgICAgICAgIGlmIG5sIDwgMDoKLSAgICAgICAgICAgICAgICBzID0gc2VsZi5saW5lYnVmZmVyCi0gICAgICAgICAgICAgICAgc2VsZi5saW5lYnVmZmVyID0gJycKLSAgICAgICAgICAgICAgICByZXR1cm4gcwotCi0gICAgICAgIGJ1ZiA9IHNlbGYubGluZWJ1ZmZlcls6bmxdCi0gICAgICAgIHNlbGYubGFzdGRpc2NhcmQgPSBzZWxmLmxpbmVidWZmZXJbbmw6bmwgKyBubGxlbl0KLSAgICAgICAgc2VsZi5saW5lYnVmZmVyID0gc2VsZi5saW5lYnVmZmVyW25sICsgbmxsZW46XQotCi0gICAgICAgICMgbGluZSBpcyBhbHdheXMgcmV0dXJuZWQgd2l0aCBcbiBhcyBuZXdsaW5lIGNoYXIgKGV4Y2VwdCBwb3NzaWJseQotICAgICAgICAjIGZvciBhIGZpbmFsIGluY29tcGxldGUgbGluZSBpbiB0aGUgZmlsZSwgd2hpY2ggaXMgaGFuZGxlZCBhYm92ZSkuCi0gICAgICAgIHJldHVybiBidWYgKyAiXG4iCi0KLSAgICBkZWYgcmVhZGxpbmVzKHNlbGYsIHNpemVoaW50ID0gLTEpOgotICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IHdpdGggYWxsIChmb2xsb3dpbmcpIGxpbmVzLiBUaGUgc2l6ZWhpbnQgcGFyYW1ldGVyCi0gICAgICAgIGlzIGlnbm9yZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgSWYgbGltaXQgaXMgc3BlY2lmaWVkLCBhdCBtb3N0IGxpbWl0IGJ5dGVzIHdpbGwgYmUgcmVhZC4KICAgICAgICAgIiIiCi0gICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgaWYgbm90IHNlbGYuX3VuaXZlcnNhbCBhbmQgbGltaXQgPCAwOgorICAgICAgICAgICAgIyBTaG9ydGN1dCBjb21tb24gY2FzZSAtIG5ld2xpbmUgZm91bmQgaW4gYnVmZmVyLgorICAgICAgICAgICAgaSA9IHNlbGYuX3JlYWRidWZmZXIuZmluZCgnXG4nLCBzZWxmLl9vZmZzZXQpICsgMQorICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRidWZmZXJbc2VsZi5fb2Zmc2V0OiBpXQorICAgICAgICAgICAgICAgIHNlbGYuX29mZnNldCA9IGkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorCisgICAgICAgIGlmIG5vdCBzZWxmLl91bml2ZXJzYWw6CisgICAgICAgICAgICByZXR1cm4gaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGxpbmUoc2VsZiwgbGltaXQpCisKKyAgICAgICAgbGluZSA9ICcnCisgICAgICAgIHdoaWxlIGxpbWl0IDwgMCBvciBsZW4obGluZSkgPCBsaW1pdDoKKyAgICAgICAgICAgIHJlYWRhaGVhZCA9IHNlbGYucGVlaygyKQorICAgICAgICAgICAgaWYgcmVhZGFoZWFkID09ICcnOgorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgU2VhcmNoIGZvciB1bml2ZXJzYWwgbmV3bGluZXMgb3IgbGluZSBjaHVua3MuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZSBwYXR0ZXJuIHJldHVybnMgZWl0aGVyIGEgbGluZSBjaHVuayBvciBhIG5ld2xpbmUsIGJ1dCBub3QKKyAgICAgICAgICAgICMgYm90aC4gQ29tYmluZWQgd2l0aCBwZWVrKDIpLCB3ZSBhcmUgYXNzdXJlZCB0aGF0IHRoZSBzZXF1ZW5jZQorICAgICAgICAgICAgIyAnXHJcbicgaXMgYWx3YXlzIHJldHJpZXZlZCBjb21wbGV0ZWx5IGFuZCBuZXZlciBzcGxpdCBpbnRvCisgICAgICAgICAgICAjIHNlcGFyYXRlIG5ld2xpbmVzIC0gJ1xyJywgJ1xuJyBkdWUgdG8gY29pbmNpZGVudGFsIHJlYWRhaGVhZHMuCisgICAgICAgICAgICAjCisgICAgICAgICAgICBtYXRjaCA9IHNlbGYuUEFUVEVSTi5zZWFyY2gocmVhZGFoZWFkKQorICAgICAgICAgICAgbmV3bGluZSA9IG1hdGNoLmdyb3VwKCduZXdsaW5lJykKKyAgICAgICAgICAgIGlmIG5ld2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5uZXdsaW5lcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmVzID0gW10KKyAgICAgICAgICAgICAgICBpZiBuZXdsaW5lIG5vdCBpbiBzZWxmLm5ld2xpbmVzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmVzLmFwcGVuZChuZXdsaW5lKQorICAgICAgICAgICAgICAgIHNlbGYuX29mZnNldCArPSBsZW4obmV3bGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZSArICdcbicKKworICAgICAgICAgICAgY2h1bmsgPSBtYXRjaC5ncm91cCgnY2h1bmsnKQorICAgICAgICAgICAgaWYgbGltaXQgPj0gMDoKKyAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rWzogbGltaXQgLSBsZW4obGluZSldCisKKyAgICAgICAgICAgIHNlbGYuX29mZnNldCArPSBsZW4oY2h1bmspCisgICAgICAgICAgICBsaW5lICs9IGNodW5rCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIGRlZiBwZWVrKHNlbGYsIG49MSk6CisgICAgICAgICIiIlJldHVybnMgYnVmZmVyZWQgYnl0ZXMgd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLiIiIgorICAgICAgICBpZiBuID4gbGVuKHNlbGYuX3JlYWRidWZmZXIpIC0gc2VsZi5fb2Zmc2V0OgorICAgICAgICAgICAgY2h1bmsgPSBzZWxmLnJlYWQobikKKyAgICAgICAgICAgIHNlbGYuX29mZnNldCAtPSBsZW4oY2h1bmspCisKKyAgICAgICAgIyBSZXR1cm4gdXAgdG8gNTEyIGJ5dGVzIHRvIHJlZHVjZSBhbGxvY2F0aW9uIG92ZXJoZWFkIGZvciB0aWdodCBsb29wcy4KKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRidWZmZXJbc2VsZi5fb2Zmc2V0OiBzZWxmLl9vZmZzZXQgKyA1MTJdCisKKyAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMuCisgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBOb25lLCBvciBuZWdhdGl2ZSwgZGF0YSBpcyByZWFkIGFuZCByZXR1cm5lZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4uCisgICAgICAgICIiIgorICAgICAgICBidWYgPSAnJworICAgICAgICBpZiBuIGlzIE5vbmU6CisgICAgICAgICAgICBuID0gLTEKICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGxpbmUgPSBzZWxmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBicmVhawotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsaW5lKQotICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICBpZiBuIDwgMDoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWFkMShuKQorICAgICAgICAgICAgZWxpZiBuID4gbGVuKGJ1Zik6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVhZDEobiAtIGxlbihidWYpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmCisgICAgICAgICAgICBpZiBsZW4oZGF0YSkgPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmCisgICAgICAgICAgICBidWYgKz0gZGF0YQogCi0gICAgZGVmIHJlYWQoc2VsZiwgc2l6ZSA9IE5vbmUpOgotICAgICAgICAjIGFjdCBsaWtlIGZpbGUoKSBvYmogYW5kIHJldHVybiBlbXB0eSBzdHJpbmcgaWYgc2l6ZSBpcyAwCi0gICAgICAgIGlmIHNpemUgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJworICAgIGRlZiBfdXBkYXRlX2NyYyhzZWxmLCBuZXdkYXRhLCBlb2YpOgorICAgICAgICAjIFVwZGF0ZSB0aGUgQ1JDIHVzaW5nIHRoZSBnaXZlbiBkYXRhLgorICAgICAgICBpZiBzZWxmLl9leHBlY3RlZF9jcmMgaXMgTm9uZToKKyAgICAgICAgICAgICMgTm8gbmVlZCB0byBjb21wdXRlIHRoZSBDUkMgaWYgd2UgZG9uJ3QgaGF2ZSBhIHJlZmVyZW5jZSB2YWx1ZQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3J1bm5pbmdfY3JjID0gY3JjMzIobmV3ZGF0YSwgc2VsZi5fcnVubmluZ19jcmMpICYgMHhmZmZmZmZmZgorICAgICAgICAjIENoZWNrIHRoZSBDUkMgaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorICAgICAgICBpZiBlb2YgYW5kIHNlbGYuX3J1bm5pbmdfY3JjICE9IHNlbGYuX2V4cGVjdGVkX2NyYzoKKyAgICAgICAgICAgIHJhaXNlIEJhZFppcGZpbGUoIkJhZCBDUkMtMzIgZm9yIGZpbGUgJXIiICUgc2VsZi5uYW1lKQogCi0gICAgICAgICMgZGV0ZXJtaW5lIHJlYWQgc2l6ZQotICAgICAgICBieXRlc1RvUmVhZCA9IHNlbGYuY29tcHJlc3Nfc2l6ZSAtIHNlbGYuYnl0ZXNfcmVhZAorICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICAgICAgIiIiUmVhZCB1cCB0byBuIGJ5dGVzIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgogCi0gICAgICAgICMgYWRqdXN0IHJlYWQgc2l6ZSBmb3IgZW5jcnlwdGVkIGZpbGVzIHNpbmNlIHRoZSBmaXJzdCAxMiBieXRlcwotICAgICAgICAjIGFyZSBmb3IgdGhlIGVuY3J5cHRpb24vcGFzc3dvcmQgaW5mb3JtYXRpb24KLSAgICAgICAgaWYgc2VsZi5kZWNyeXB0ZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBieXRlc1RvUmVhZCAtPSAxMgorICAgICAgICAjIFNpbXBsaWZ5IGFsZ29yaXRobSAoYnJhbmNoaW5nKSBieSB0cmFuc2Zvcm1pbmcgbmVnYXRpdmUgbiB0byBsYXJnZSBuLgorICAgICAgICBpZiBuIDwgMCBvciBuIGlzIE5vbmU6CisgICAgICAgICAgICBuID0gc2VsZi5NQVhfTgogCi0gICAgICAgIGlmIHNpemUgaXMgbm90IE5vbmUgYW5kIHNpemUgPj0gMDoKLSAgICAgICAgICAgIGlmIHNlbGYuY29tcHJlc3NfdHlwZSA9PSBaSVBfU1RPUkVEOgotICAgICAgICAgICAgICAgIGxyID0gbGVuKHNlbGYucmVhZGJ1ZmZlcikKLSAgICAgICAgICAgICAgICBieXRlc1RvUmVhZCA9IG1pbihieXRlc1RvUmVhZCwgc2l6ZSAtIGxyKQotICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgotICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnJlYWRidWZmZXIpID4gc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgIyB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGZld2VyIGJ5dGVzIHRoYW4gd2UndmUgYWxyZWFkeQotICAgICAgICAgICAgICAgICAgICAjIHB1bGxlZCB0aHJvdWdoIHRoZSBkZWNvbXByZXNzb3I7IGRvbid0IHJlYWQgYW55IG1vcmUKLSAgICAgICAgICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSAwCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyB1c2VyIHdpbGwgdXNlIHVwIHRoZSBidWZmZXIsIHNvIHJlYWQgc29tZSBtb3JlCi0gICAgICAgICAgICAgICAgICAgIGxyID0gbGVuKHNlbGYucmF3YnVmZmVyKQotICAgICAgICAgICAgICAgICAgICBieXRlc1RvUmVhZCA9IG1pbihieXRlc1RvUmVhZCwgc2VsZi5jb21wcmVhZHNpemUgLSBscikKKyAgICAgICAgIyBCeXRlcyBhdmFpbGFibGUgaW4gcmVhZCBidWZmZXIuCisgICAgICAgIGxlbl9yZWFkYnVmZmVyID0gbGVuKHNlbGYuX3JlYWRidWZmZXIpIC0gc2VsZi5fb2Zmc2V0CiAKLSAgICAgICAgIyBhdm9pZCByZWFkaW5nIHBhc3QgZW5kIG9mIGZpbGUgY29udGVudHMKLSAgICAgICAgaWYgYnl0ZXNUb1JlYWQgKyBzZWxmLmJ5dGVzX3JlYWQgPiBzZWxmLmNvbXByZXNzX3NpemU6Ci0gICAgICAgICAgICBieXRlc1RvUmVhZCA9IHNlbGYuY29tcHJlc3Nfc2l6ZSAtIHNlbGYuYnl0ZXNfcmVhZAorICAgICAgICAjIFJlYWQgZnJvbSBmaWxlLgorICAgICAgICBpZiBzZWxmLl9jb21wcmVzc19sZWZ0ID4gMCBhbmQgbiA+IGxlbl9yZWFkYnVmZmVyICsgbGVuKHNlbGYuX3VuY29uc3VtZWQpOgorICAgICAgICAgICAgbmJ5dGVzID0gbiAtIGxlbl9yZWFkYnVmZmVyIC0gbGVuKHNlbGYuX3VuY29uc3VtZWQpCisgICAgICAgICAgICBuYnl0ZXMgPSBtYXgobmJ5dGVzLCBzZWxmLk1JTl9SRUFEX1NJWkUpCisgICAgICAgICAgICBuYnl0ZXMgPSBtaW4obmJ5dGVzLCBzZWxmLl9jb21wcmVzc19sZWZ0KQogCi0gICAgICAgICMgdHJ5IHRvIHJlYWQgZnJvbSBmaWxlIChpZiBuZWNlc3NhcnkpCi0gICAgICAgIGlmIGJ5dGVzVG9SZWFkID4gMDoKLSAgICAgICAgICAgIGJ5dGVzID0gc2VsZi5maWxlb2JqLnJlYWQoYnl0ZXNUb1JlYWQpCi0gICAgICAgICAgICBzZWxmLmJ5dGVzX3JlYWQgKz0gbGVuKGJ5dGVzKQotICAgICAgICAgICAgc2VsZi5yYXdidWZmZXIgKz0gYnl0ZXMKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9maWxlb2JqLnJlYWQobmJ5dGVzKQorICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCAtPSBsZW4oZGF0YSkKIAotICAgICAgICAgICAgIyBoYW5kbGUgY29udGVudHMgb2YgcmF3IGJ1ZmZlcgotICAgICAgICAgICAgaWYgc2VsZi5yYXdidWZmZXI6Ci0gICAgICAgICAgICAgICAgbmV3ZGF0YSA9IHNlbGYucmF3YnVmZmVyCi0gICAgICAgICAgICAgICAgc2VsZi5yYXdidWZmZXIgPSAnJworICAgICAgICAgICAgaWYgZGF0YSBhbmQgc2VsZi5fZGVjcnlwdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGRhdGEgPSAnJy5qb2luKG1hcChzZWxmLl9kZWNyeXB0ZXIsIGRhdGEpKQogCi0gICAgICAgICAgICAgICAgIyBkZWNyeXB0IG5ldyBkYXRhIGlmIHdlIHdlcmUgZ2l2ZW4gYW4gb2JqZWN0IHRvIGhhbmRsZSB0aGF0Ci0gICAgICAgICAgICAgICAgaWYgbmV3ZGF0YSBhbmQgc2VsZi5kZWNyeXB0ZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIG5ld2RhdGEgPSAnJy5qb2luKG1hcChzZWxmLmRlY3J5cHRlciwgbmV3ZGF0YSkpCisgICAgICAgICAgICBpZiBzZWxmLl9jb21wcmVzc190eXBlID09IFpJUF9TVE9SRUQ6CisgICAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlX2NyYyhkYXRhLCBlb2Y9KHNlbGYuX2NvbXByZXNzX2xlZnQ9PTApKQorICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRidWZmZXIgPSBzZWxmLl9yZWFkYnVmZmVyW3NlbGYuX29mZnNldDpdICsgZGF0YQorICAgICAgICAgICAgICAgIHNlbGYuX29mZnNldCA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBQcmVwYXJlIGRlZmxhdGVkIGJ5dGVzIGZvciBkZWNvbXByZXNzaW9uLgorICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWQgKz0gZGF0YQogCi0gICAgICAgICAgICAgICAgIyBkZWNvbXByZXNzIG5ld2x5IHJlYWQgZGF0YSBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgICAgICBpZiBuZXdkYXRhIGFuZCBzZWxmLmNvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgotICAgICAgICAgICAgICAgICAgICBuZXdkYXRhID0gc2VsZi5kYy5kZWNvbXByZXNzKG5ld2RhdGEpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucmF3YnVmZmVyID0gc2VsZi5kYy51bmNvbnN1bWVkX3RhaWwKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lb2YgYW5kIGxlbihzZWxmLnJhd2J1ZmZlcikgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICMgd2UncmUgb3V0IG9mIHJhdyBieXRlcyAoYm90aCBmcm9tIHRoZSBmaWxlIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgbG9jYWwgYnVmZmVyKTsgZmx1c2gganVzdCB0byBtYWtlIHN1cmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAjIGRlY29tcHJlc3NvciBpcyBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdkYXRhICs9IHNlbGYuZGMuZmx1c2goKQotICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmV2ZW50IGRlY29tcHJlc3NvciBmcm9tIGJlaW5nIHVzZWQgYWdhaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGMgPSBOb25lCisgICAgICAgICMgSGFuZGxlIHVuY29uc3VtZWQgZGF0YS4KKyAgICAgICAgaWYgKGxlbihzZWxmLl91bmNvbnN1bWVkKSA+IDAgYW5kIG4gPiBsZW5fcmVhZGJ1ZmZlciBhbmQKKyAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEKToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcygKKyAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkLAorICAgICAgICAgICAgICAgIG1heChuIC0gbGVuX3JlYWRidWZmZXIsIHNlbGYuTUlOX1JFQURfU0laRSkKKyAgICAgICAgICAgICkKIAotICAgICAgICAgICAgICAgIHNlbGYucmVhZGJ1ZmZlciArPSBuZXdkYXRhCisgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkID0gc2VsZi5fZGVjb21wcmVzc29yLnVuY29uc3VtZWRfdGFpbAorICAgICAgICAgICAgZW9mID0gbGVuKHNlbGYuX3VuY29uc3VtZWQpID09IDAgYW5kIHNlbGYuX2NvbXByZXNzX2xlZnQgPT0gMAorICAgICAgICAgICAgaWYgZW9mOgorICAgICAgICAgICAgICAgIGRhdGEgKz0gc2VsZi5fZGVjb21wcmVzc29yLmZsdXNoKCkKIAorICAgICAgICAgICAgc2VsZi5fdXBkYXRlX2NyYyhkYXRhLCBlb2Y9ZW9mKQorICAgICAgICAgICAgc2VsZi5fcmVhZGJ1ZmZlciA9IHNlbGYuX3JlYWRidWZmZXJbc2VsZi5fb2Zmc2V0Ol0gKyBkYXRhCisgICAgICAgICAgICBzZWxmLl9vZmZzZXQgPSAwCiAKLSAgICAgICAgIyByZXR1cm4gd2hhdCB0aGUgdXNlciBhc2tlZCBmb3IKLSAgICAgICAgaWYgc2l6ZSBpcyBOb25lIG9yIGxlbihzZWxmLnJlYWRidWZmZXIpIDw9IHNpemU6Ci0gICAgICAgICAgICBieXRlcyA9IHNlbGYucmVhZGJ1ZmZlcgotICAgICAgICAgICAgc2VsZi5yZWFkYnVmZmVyID0gJycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGJ5dGVzID0gc2VsZi5yZWFkYnVmZmVyWzpzaXplXQotICAgICAgICAgICAgc2VsZi5yZWFkYnVmZmVyID0gc2VsZi5yZWFkYnVmZmVyW3NpemU6XQorICAgICAgICAjIFJlYWQgZnJvbSBidWZmZXIuCisgICAgICAgIGRhdGEgPSBzZWxmLl9yZWFkYnVmZmVyW3NlbGYuX29mZnNldDogc2VsZi5fb2Zmc2V0ICsgbl0KKyAgICAgICAgc2VsZi5fb2Zmc2V0ICs9IGxlbihkYXRhKQorICAgICAgICByZXR1cm4gZGF0YQogCi0gICAgICAgIHJldHVybiBieXRlcwogCiAKIGNsYXNzIFppcEZpbGU6CkBAIC02OTUsMjAgKzcxMSwzNCBAQAogICAgICAgICBpZiBrZXkgPT0gJ3InOgogICAgICAgICAgICAgc2VsZi5fR2V0Q29udGVudHMoKQogICAgICAgICBlbGlmIGtleSA9PSAndyc6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjIHNldCB0aGUgbW9kaWZpZWQgZmxhZyBzbyBjZW50cmFsIGRpcmVjdG9yeSBnZXRzIHdyaXR0ZW4KKyAgICAgICAgICAgICMgZXZlbiBpZiBubyBmaWxlcyBhcmUgYWRkZWQgdG8gdGhlIGFyY2hpdmUKKyAgICAgICAgICAgIHNlbGYuX2RpZE1vZGlmeSA9IFRydWUKICAgICAgICAgZWxpZiBrZXkgPT0gJ2EnOgotICAgICAgICAgICAgdHJ5OiAgICAgICAgICAgICAgICAgICAgICAgICMgU2VlIGlmIGZpbGUgaXMgYSB6aXAgZmlsZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgU2VlIGlmIGZpbGUgaXMgYSB6aXAgZmlsZQogICAgICAgICAgICAgICAgIHNlbGYuX1JlYWxHZXRDb250ZW50cygpCiAgICAgICAgICAgICAgICAgIyBzZWVrIHRvIHN0YXJ0IG9mIGRpcmVjdG9yeSBhbmQgb3ZlcndyaXRlCiAgICAgICAgICAgICAgICAgc2VsZi5mcC5zZWVrKHNlbGYuc3RhcnRfZGlyLCAwKQotICAgICAgICAgICAgZXhjZXB0IEJhZFppcGZpbGU6ICAgICAgICAgICMgZmlsZSBpcyBub3QgYSB6aXAgZmlsZSwganVzdCBhcHBlbmQKKyAgICAgICAgICAgIGV4Y2VwdCBCYWRaaXBmaWxlOgorICAgICAgICAgICAgICAgICMgZmlsZSBpcyBub3QgYSB6aXAgZmlsZSwganVzdCBhcHBlbmQKICAgICAgICAgICAgICAgICBzZWxmLmZwLnNlZWsoMCwgMikKKworICAgICAgICAgICAgICAgICMgc2V0IHRoZSBtb2RpZmllZCBmbGFnIHNvIGNlbnRyYWwgZGlyZWN0b3J5IGdldHMgd3JpdHRlbgorICAgICAgICAgICAgICAgICMgZXZlbiBpZiBubyBmaWxlcyBhcmUgYWRkZWQgdG8gdGhlIGFyY2hpdmUKKyAgICAgICAgICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZVBhc3NlZDoKICAgICAgICAgICAgICAgICBzZWxmLmZwLmNsb3NlKCkKICAgICAgICAgICAgICAgICBzZWxmLmZwID0gTm9uZQogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAnTW9kZSBtdXN0IGJlICJyIiwgInciIG9yICJhIicKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIF9HZXRDb250ZW50cyhzZWxmKToKICAgICAgICAgIiIiUmVhZCB0aGUgZGlyZWN0b3J5LCBtYWtpbmcgc3VyZSB3ZSBjbG9zZSB0aGUgZmlsZSBpZiB0aGUgZm9ybWF0CiAgICAgICAgIGlzIGJhZC4iIiIKQEAgLTcyMyw3ICs3NTMsMTAgQEAKICAgICBkZWYgX1JlYWxHZXRDb250ZW50cyhzZWxmKToKICAgICAgICAgIiIiUmVhZCBpbiB0aGUgdGFibGUgb2YgY29udGVudHMgZm9yIHRoZSBaSVAgZmlsZS4iIiIKICAgICAgICAgZnAgPSBzZWxmLmZwCi0gICAgICAgIGVuZHJlYyA9IF9FbmRSZWNEYXRhKGZwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbmRyZWMgPSBfRW5kUmVjRGF0YShmcCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICByYWlzZSBCYWRaaXBmaWxlKCJGaWxlIGlzIG5vdCBhIHppcCBmaWxlIikKICAgICAgICAgaWYgbm90IGVuZHJlYzoKICAgICAgICAgICAgIHJhaXNlIEJhZFppcGZpbGUsICJGaWxlIGlzIG5vdCBhIHppcCBmaWxlIgogICAgICAgICBpZiBzZWxmLmRlYnVnID4gMToKQEAgLTkwMCwxNiArOTMzLDcgQEAKICAgICAgICAgICAgIGlmIG9yZChoWzExXSkgIT0gY2hlY2tfYnl0ZToKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkJhZCBwYXNzd29yZCBmb3IgZmlsZSIsIG5hbWUpCiAKLSAgICAgICAgIyBidWlsZCBhbmQgcmV0dXJuIGEgWmlwRXh0RmlsZQotICAgICAgICBpZiB6ZCBpcyBOb25lOgotICAgICAgICAgICAgemVmID0gWmlwRXh0RmlsZSh6ZWZfZmlsZSwgemluZm8pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB6ZWYgPSBaaXBFeHRGaWxlKHplZl9maWxlLCB6aW5mbywgemQpCi0KLSAgICAgICAgIyBzZXQgdW5pdmVyc2FsIG5ld2xpbmVzIG9uIFppcEV4dEZpbGUgaWYgbmVjZXNzYXJ5Ci0gICAgICAgIGlmICJVIiBpbiBtb2RlOgotICAgICAgICAgICAgemVmLnNldF91bml2X25ld2xpbmVzKFRydWUpCi0gICAgICAgIHJldHVybiB6ZWYKKyAgICAgICAgcmV0dXJuICBaaXBFeHRGaWxlKHplZl9maWxlLCBtb2RlLCB6aW5mbywgemQpCiAKICAgICBkZWYgZXh0cmFjdChzZWxmLCBtZW1iZXIsIHBhdGg9Tm9uZSwgcHdkPU5vbmUpOgogICAgICAgICAiIiJFeHRyYWN0IGEgbWVtYmVyIGZyb20gdGhlIGFyY2hpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksCkBAIC0xMDM5LDI4ICsxMDYzLDI3IEBACiAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoKSkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgIyBNdXN0IG92ZXJ3cml0ZSBDUkMgYW5kIHNpemVzIHdpdGggY29ycmVjdCBkYXRhIGxhdGVyCi0gICAgICAgIHppbmZvLkNSQyA9IENSQyA9IDAKLSAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgPSAwCi0gICAgICAgIHppbmZvLmZpbGVfc2l6ZSA9IGZpbGVfc2l6ZSA9IDAKLSAgICAgICAgc2VsZi5mcC53cml0ZSh6aW5mby5GaWxlSGVhZGVyKCkpCi0gICAgICAgIGlmIHppbmZvLmNvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgotICAgICAgICAgICAgY21wciA9IHpsaWIuY29tcHJlc3NvYmooemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sCi0gICAgICAgICAgICAgICAgIHpsaWIuREVGTEFURUQsIC0xNSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNtcHIgPSBOb25lCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBidWYgPSBmcC5yZWFkKDEwMjQgKiA4KQotICAgICAgICAgICAgaWYgbm90IGJ1ZjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZmlsZV9zaXplID0gZmlsZV9zaXplICsgbGVuKGJ1ZikKLSAgICAgICAgICAgIENSQyA9IGNyYzMyKGJ1ZiwgQ1JDKSAmIDB4ZmZmZmZmZmYKLSAgICAgICAgICAgIGlmIGNtcHI6Ci0gICAgICAgICAgICAgICAgYnVmID0gY21wci5jb21wcmVzcyhidWYpCi0gICAgICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgKyBsZW4oYnVmKQotICAgICAgICAgICAgc2VsZi5mcC53cml0ZShidWYpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgICMgTXVzdCBvdmVyd3JpdGUgQ1JDIGFuZCBzaXplcyB3aXRoIGNvcnJlY3QgZGF0YSBsYXRlcgorICAgICAgICAgICAgemluZm8uQ1JDID0gQ1JDID0gMAorICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgPSAwCisgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgPSBmaWxlX3NpemUgPSAwCisgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoKSkKKyAgICAgICAgICAgIGlmIHppbmZvLmNvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgorICAgICAgICAgICAgICAgIGNtcHIgPSB6bGliLmNvbXByZXNzb2JqKHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAorICAgICAgICAgICAgICAgICAgICAgemxpYi5ERUZMQVRFRCwgLTE1KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjbXByID0gTm9uZQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkKDEwMjQgKiA4KQorICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gZmlsZV9zaXplICsgbGVuKGJ1ZikKKyAgICAgICAgICAgICAgICBDUkMgPSBjcmMzMihidWYsIENSQykgJiAweGZmZmZmZmZmCisgICAgICAgICAgICAgICAgaWYgY21wcjoKKyAgICAgICAgICAgICAgICAgICAgYnVmID0gY21wci5jb21wcmVzcyhidWYpCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplICsgbGVuKGJ1ZikKKyAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGJ1ZikKICAgICAgICAgaWYgY21wcjoKICAgICAgICAgICAgIGJ1ZiA9IGNtcHIuZmx1c2goKQogICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgKyBsZW4oYnVmKQpAQCAtMTA3OSwxMyArMTEwMiwxNCBAQAogICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZCh6aW5mbykKICAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCiAKLSAgICBkZWYgd3JpdGVzdHIoc2VsZiwgemluZm9fb3JfYXJjbmFtZSwgYnl0ZXMpOgorICAgIGRlZiB3cml0ZXN0cihzZWxmLCB6aW5mb19vcl9hcmNuYW1lLCBieXRlcywgY29tcHJlc3NfdHlwZT1Ob25lKToKICAgICAgICAgIiIiV3JpdGUgYSBmaWxlIGludG8gdGhlIGFyY2hpdmUuICBUaGUgY29udGVudHMgaXMgdGhlIHN0cmluZwogICAgICAgICAnYnl0ZXMnLiAgJ3ppbmZvX29yX2FyY25hbWUnIGlzIGVpdGhlciBhIFppcEluZm8gaW5zdGFuY2Ugb3IKICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIGFyY2hpdmUuIiIiCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHppbmZvX29yX2FyY25hbWUsIFppcEluZm8pOgogICAgICAgICAgICAgemluZm8gPSBaaXBJbmZvKGZpbGVuYW1lPXppbmZvX29yX2FyY25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZV90aW1lPXRpbWUubG9jYWx0aW1lKHRpbWUudGltZSgpKVs6Nl0pCisKICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBzZWxmLmNvbXByZXNzaW9uCiAgICAgICAgICAgICB6aW5mby5leHRlcm5hbF9hdHRyID0gMDYwMCA8PCAxNgogICAgICAgICBlbHNlOgpAQCAtMTA5NSw2ICsxMTE5LDkgQEAKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAorICAgICAgICBpZiBjb21wcmVzc190eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IGNvbXByZXNzX3R5cGUKKwogICAgICAgICB6aW5mby5maWxlX3NpemUgPSBsZW4oYnl0ZXMpICAgICAgICAgICAgIyBVbmNvbXByZXNzZWQgc2l6ZQogICAgICAgICB6aW5mby5oZWFkZXJfb2Zmc2V0ID0gc2VsZi5mcC50ZWxsKCkgICAgIyBTdGFydCBvZiBoZWFkZXIgYnl0ZXMKICAgICAgICAgc2VsZi5fd3JpdGVjaGVjayh6aW5mbykKQEAgLTEzNjEsNyArMTM4OCw5IEBACiAgICAgICAgICAgICBwcmludCBVU0FHRQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgemYgPSBaaXBGaWxlKGFyZ3NbMV0sICdyJykKLSAgICAgICAgemYudGVzdHppcCgpCisgICAgICAgIGJhZGZpbGUgPSB6Zi50ZXN0emlwKCkKKyAgICAgICAgaWYgYmFkZmlsZToKKyAgICAgICAgICAgIHByaW50KCJUaGUgZm9sbG93aW5nIGVuY2xvc2VkIGZpbGUgaXMgY29ycnVwdGVkOiB7IXJ9Ii5mb3JtYXQoYmFkZmlsZSkpCiAgICAgICAgIHByaW50ICJEb25lIHRlc3RpbmciCiAKICAgICBlbGlmIGFyZ3NbMF0gPT0gJy1lJzoKQEAgLTEzODAsOSArMTQwOSw4IEBACiAgICAgICAgICAgICB0Z3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUodGd0KQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRndGRpcik6CiAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnModGd0ZGlyKQotICAgICAgICAgICAgZnAgPSBvcGVuKHRndCwgJ3diJykKLSAgICAgICAgICAgIGZwLndyaXRlKHpmLnJlYWQocGF0aCkpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4odGd0LCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSh6Zi5yZWFkKHBhdGgpKQogICAgICAgICB6Zi5jbG9zZSgpCiAKICAgICBlbGlmIGFyZ3NbMF0gPT0gJy1jJzoKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0IGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKaW5kZXggMGYxYWViNS4uZGUyZjVjYiAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKKysrIGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKQEAgLTEsNzggKzEsMTQ3IEBACi1CdWlsZGluZyBhIE1hY1B5dGhvbiBkaXN0cmlidXRpb24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQnVpbGRpbmcgYSBQeXRob24gTWFjIE9TIFggZGlzdHJpYnV0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIGBgYnVpbGQtaW5zdGFsbC5weWBgIHNjcmlwdCBjcmVhdGVzIE1hY1B5dGhvbiBkaXN0cmlidXRpb25zLCBpbmNsdWRpbmcKLXNsZWVweWNhdCBkYjQsIHNxbGl0ZTMgYW5kIHJlYWRsaW5lIHN1cHBvcnQuICBJdCBidWlsZHMgYSBjb21wbGV0ZSAKK1RoZSBgYGJ1aWxkLWluc3RhbGwucHlgYCBzY3JpcHQgY3JlYXRlcyBQeXRob24gZGlzdHJpYnV0aW9ucywgaW5jbHVkaW5nCitjZXJ0YWluIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBhcyBuZWNlc3NhcnkuICBJdCBidWlsZHMgYSBjb21wbGV0ZSAKIGZyYW1ld29yay1iYXNlZCBQeXRob24gb3V0LW9mLXRyZWUsIGluc3RhbGxzIGl0IGluIGEgZnVubnkgcGxhY2Ugd2l0aCAKICRERVNUUk9PVCwgbWFzc2FnZXMgdGhhdCBpbnN0YWxsYXRpb24gdG8gcmVtb3ZlIC5weWMgZmlsZXMgYW5kIHN1Y2gsIGNyZWF0ZXMgCiBhbiBJbnN0YWxsZXIgcGFja2FnZSBmcm9tIHRoZSBpbnN0YWxsYXRpb24gcGx1cyBvdGhlciBmaWxlcyBpbiBgYHJlc291cmNlc2BgIAogYW5kIGBgc2NyaXB0c2BgIGFuZCBwbGFjZWQgdGhhdCBvbiBhIGBgLmRtZ2BgIGRpc2sgaW1hZ2UuCiAKLVByZXJlcXVpc2l0ZXMKLS0tLS0tLS0tLS0tLS0KK0FzIG9mIFB5dGhvbiAyLjcueCBhbmQgMy4yLCBQU0YgcHJhY3RpY2UgaXMgdG8gYnVpbGQgdHdvIGluc3RhbGxlciB2YXJpYW50cworZm9yIGVhY2ggcmVsZWFzZToKIAotKiBBIE1hY09TIFggMTAuNCAob3IgbGF0ZXIpCisxLiAgMzItYml0LW9ubHksIGkzODYgYW5kIFBQQyB1bml2ZXJzYWwsIGNhcGFibGUgb24gcnVubmluZyBvbiBhbGwgbWFjaGluZXMKKyAgICBzdXBwb3J0ZWQgYnkgTWFjIE9TIFggMTAuMy45IHRocm91Z2ggKGF0IGxlYXN0KSAxMC42OjoKIAotKiBYQ29kZSAyLjIgKG9yIGxhdGVyKSwgd2l0aCB0aGUgdW5pdmVyc2FsIFNESworICAgICAgICBweXRob24gYnVpbGQtaW5zdGFsbGVyLnB5IFwKKyAgICAgICAgICAgIC0tc2RrLXBhdGg9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayBcCisgICAgICAgICAgICAtLXVuaXZlcnNhbC1hcmNocz0zMi1iaXQgXAorICAgICAgICAgICAgLS1kZXAtdGFyZ2V0PTEwLjMgCisgICAgICAgICAgICAjIFRoZXNlIGFyZSB0aGUgY3VycmVudCBkZWZhdWx0IG9wdGlvbnMKIAotKiBObyBGaW5rIChpbiBgYC9zd2BgKSBvciBEYXJ3aW5Qb3J0cyAoaW4gYGAvb3B0L2xvY2FsYGApLCB0aG9zZSBjb3VsZAorICAgIC0gYnVpbGRzIHRoZSBmb2xsb3dpbmcgdGhpcmQtcGFydHkgbGlicmFyaWVzCisKKyAgICAgICAgKiBCemlwMgorICAgICAgICAqIFpsaWIgMS4yLjMKKyAgICAgICAgKiBHTlUgUmVhZGxpbmUgKEdQTCkKKyAgICAgICAgKiBTUUxpdGUgMworICAgICAgICAqIE5DdXJzZXMKKyAgICAgICAgKiBPcmFjbGUgU2xlZXB5Y2F0IERCIDQuOCAoUHl0aG9uIDIueCBvbmx5KQorCisgICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBgYFRjbC9UayA4LjRgYCAoY3VycmVudGx5IDguNC4xOSkgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZworCisgICAgLSBjdXJyZW50IHRhcmdldCBidWlsZCBlbnZpcm9ubWVudDoKKyAgICAgICAgCisgICAgICAgICogTWFjIE9TIFggMTAuNS44IFBQQyBvciBJbnRlbAorICAgICAgICAqIFhjb2RlIDMuMS40IChvciBsYXRlcikKKyAgICAgICAgKiBgYE1hY09TWDEwLjR1YGAgU0RLIChsYXRlciBTREtzIGRvIG5vdCBzdXBwb3J0IFBQQyBHMyBwcm9jZXNzb3JzKQorICAgICAgICAqIGBgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPTEwLjNgYAorICAgICAgICAqIEFwcGxlIGBgZ2NjLTQuMGBgCisgICAgICAgICogUHl0aG9uIDIubiAobiA+PSA0KSBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoIFNwaGlueAorCisgICAgLSBhbHRlcm5hdGUgYnVpbGQgZW52aXJvbm1lbnRzOgorCisgICAgICAgICogTWFjIE9TIFggMTAuNC4xMSB3aXRoIFhjb2RlIDIuNQorICAgICAgICAqIE1hYyBPUyBYIDEwLjYuNiB3aXRoIFhjb2RlIDMuMi41CisgICAgICAgICAgICAtIG5lZWQgdG8gY2hhbmdlIGBgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mve1RjbCxUa30uZnJhbWV3b3JrL1ZlcnNpb24vQ3VycmVudGBgIHRvIGBgOC40YGAKKworMi4gIDY0LWJpdCAvIDMyLWJpdCwgeDg2XzY0IGFuZCBpMzg2IHVuaXZlcnNhbCwgZm9yIE9TIFggMTAuNiAoYW5kIGxhdGVyKTo6CisKKyAgICAgICAgcHl0aG9uIGJ1aWxkLWluc3RhbGxlci5weSBcCisgICAgICAgICAgICAtLXNkay1wYXRoPS9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC42LnNkayBcCisgICAgICAgICAgICAtLXVuaXZlcnNhbC1hcmNocz1pbnRlbCBcCisgICAgICAgICAgICAtLWRlcC10YXJnZXQ9MTAuNgorCisgICAgLSB1c2VzIHN5c3RlbS1zdXBwbGllZCB2ZXJzaW9ucyBvZiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKKyAgICAKKyAgICAgICAgKiByZWFkbGluZSBtb2R1bGUgbGlua3Mgd2l0aCBBcHBsZSBCU0QgZWRpdGxpbmUgKGxpYmVkaXQpCisgICAgICAgICogYnVpbGRzIE9yYWNsZSBTbGVlcHljYXQgREIgNC44IChQeXRob24gMi54IG9ubHkpCisKKyAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIFRjbC9UayA4LjUuOSAob3IgbGF0ZXIpIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKKworICAgIC0gY3VycmVudCB0YXJnZXQgYnVpbGQgZW52aXJvbm1lbnQ6CisgICAgICAgIAorICAgICAgICAqIE1hYyBPUyBYIDEwLjYuNiAob3IgbGF0ZXIpCisgICAgICAgICogWGNvZGUgMy4yLjUgKG9yIGxhdGVyKQorICAgICAgICAqIGBgTWFjT1NYMTAuNmBgIFNESworICAgICAgICAqIGBgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPTEwLjZgYAorICAgICAgICAqIEFwcGxlIGBgZ2NjLTQuMmBgCisgICAgICAgICogUHl0aG9uIDIubiAobiA+PSA0KSBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoIFNwaGlueAorCisgICAgLSBhbHRlcm5hdGUgYnVpbGQgZW52aXJvbm1lbnRzOgorCisgICAgICAgICogbm9uZQorCisKK0dlbmVyYWwgUHJlcmVxdWlzaXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogTm8gRmluayAoaW4gYGAvc3dgYCkgb3IgTWFjUG9ydHMgKGluIGBgL29wdC9sb2NhbGBgKSBvciBvdGhlciBsb2NhbAorICBsaWJyYXJpZXMgb3IgdXRpbGl0aWVzIChpbiBgYC91c3IvbG9jYWxgYCkgYXMgdGhleSBjb3VsZAogICBpbnRlcmZlcmUgd2l0aCB0aGUgYnVpbGQuCiAKLSogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSByZWxlYXNlIG11c3QgYmUgYXZhaWxhYmxlIG9uIHB5dGhvbi5vcmcKKyogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSByZWxlYXNlIGlzIGJ1aWx0IHVzaW5nIFNwaGlueAogICBiZWNhdXNlIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBpbnN0YWxsZXIuCiAKKyogSXQgaXMgc2FmZXN0IHRvIHN0YXJ0IGVhY2ggdmFyaWFudCBidWlsZCB3aXRoIGFuIGVtcHR5IHNvdXJjZSBkaXJlY3RvcnkKKyAgcG9wdWxhdGVkIHdpdGggYSBmcmVzaCBjb3B5IG9mIHRoZSB1bnRhcnJlZCBzb3VyY2UuCisKIAogVGhlIFJlY2lwZQogLS0tLS0tLS0tLQogCi1IZXJlIGFyZSB0aGUgc3RlcHMgeW91IG5lZWQgdG8gZm9sbG93IHRvIGJ1aWxkIGEgTWFjUHl0aG9uIGluc3RhbGxlcjoKK0hlcmUgYXJlIHRoZSBzdGVwcyB5b3UgbmVlZCB0byBmb2xsb3cgdG8gYnVpbGQgYSBQeXRob24gaW5zdGFsbGVyOgogCi0qICBSdW4gYGAuL2J1aWxkLWluc3RhbGxlci5weWBgLiBPcHRpb25hbGx5IHlvdSBjYW4gcGFzcyBhIG51bWJlciBvZiBhcmd1bWVudHMKLSAgIHRvIHNwZWNpZnkgbG9jYXRpb25zIG9mIHZhcmlvdXMgZmlsZXMuIFBsZWFzZSBzZWUgdGhlIHRvcCBvZgorKiBSdW4gYGBidWlsZC1pbnN0YWxsZXIucHlgYC4gT3B0aW9uYWxseSB5b3UgY2FuIHBhc3MgYSBudW1iZXIgb2YgYXJndW1lbnRzCisgIHRvIHNwZWNpZnkgbG9jYXRpb25zIG9mIHZhcmlvdXMgZmlsZXMuIFBsZWFzZSBzZWUgdGhlIHRvcCBvZgogICBgYGJ1aWxkLWluc3RhbGxlci5weWBgIGZvciBpdHMgdXNhZ2UuCiAKLSAgUnVubmluZyB0aGlzIHNjcmlwdCB0YWtlcyBzb21lIHRpbWUsIEkgd2lsbCBub3Qgb25seSBidWlsZCBQeXRob24gaXRzZWxmCisgIFJ1bm5pbmcgdGhpcyBzY3JpcHQgdGFrZXMgc29tZSB0aW1lLCBpdCB3aWxsIG5vdCBvbmx5IGJ1aWxkIFB5dGhvbiBpdHNlbGYKICAgYnV0IGFsc28gc29tZSAzdGgtcGFydHkgbGlicmFyaWVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgZXh0ZW5zaW9ucy4KIAogKiBXaGVuIGRvbmUgdGhlIHNjcmlwdCB3aWxsIHRlbGwgeW91IHdoZXJlIHRoZSBETUcgaW1hZ2UgaXMgKGJ5IGRlZmF1bHQKICAgc29tZXdoZXJlIGluIGBgL3RtcC9fcHlgYCkuCiAKLUJ1aWxkaW5nIGEgNC13YXkgdW5pdmVyc2FsIGluc3RhbGxlcgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCitCdWlsZGluZyBvdGhlciB1bml2ZXJzYWwgaW5zdGFsbGVycworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBidWlsZCBhIDQtd2F5IHVuaXZlcnNhbCBpbnN0YWxsZXIgdGhhdCBydW5zIG9uIAotT1NYIExlb3BhcmQgb3IgbGF0ZXI6OgorT1MgWCBMZW9wYXJkIG9yIGxhdGVyOjoKIAotICAkIC4vYnVpbGQtaW5zdGFsbGVyLnB5IC0tZGVwLXRhcmdldD0xMC41IC0tdW5pdmVyc2FsLWFyY2hzPWFsbCAtLXNkaz0vCisgIHB5dGhvbiAyLjYgL2J1aWxkLWluc3RhbGxlci5weSBcCisgICAgICAgIC0tZGVwLXRhcmdldD0xMC41CisgICAgICAgIC0tdW5pdmVyc2FsLWFyY2hzPWFsbAorICAgICAgICAtLXNkay1wYXRoPS9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC41LnNkawogCi1UaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGlzIDEwLjUgKG9yIGxhdGVyKSwgYW5kIGhlbmNlCi1hbHNvIHRoYXQgeW91ciBidWlsZGluZyBvbiBhdCBsZWFzdCBPU1ggMTAuNS4KK1RoaXMgcmVxdWlyZXMgdGhhdCB0aGUgZGVwbG95bWVudCB0YXJnZXQgaXMgMTAuNSwgYW5kIGhlbmNlCithbHNvIHRoYXQgeW91IGFyZSBidWlsZGluZyBvbiBhdCBsZWFzdCBPUyBYIDEwLjUuICA0LXdheSBpbmNsdWRlcworYGBpMzg2YGAsIGBgeDg2XzY0YGAsIGBgcHBjYGAsIGFuZCBgYHBwYzY0YGAgKEc1KS4gIGBgcHBjNjRgYCBleGVjdXRhYmxlCit2YXJpYW50cyBjYW4gb25seSBiZSBydW4gb24gRzUgbWFjaGluZXMgcnVubmluZyAxMC41LiAgTm90ZSB0aGF0LAord2hpbGUgT1MgWCAxMC42IGlzIG9ubHkgc3VwcG9ydGVkIG9uIEludGVsLWJhc2VkIG1hY2hpbmVzLCBpdCBpcyBwb3NzaWJsZQordG8gcnVuIGBgcHBjYGAgKDMyLWJpdCkgZXhlY3V0YWJsZXMgdW5tb2RpZmllZCB0aGFua3MgdG8gdGhlIFJvc2V0dGEgcHBjCitlbXVsYXRpb24gaW4gT1MgWCAxMC41IGFuZCAxMC42LgorCitPdGhlciBgYC0tdW5pdmVyc2FsLWFyY2hzYGAgb3B0aW9ucyBhcmUgYGA2NC1iaXRgYCAoYGB4ODZfNjRgYCwgYGBwcGM2NGBgKSwKK2FuZCBgYDMtd2F5YGAgKGBgcHBjYGAsIGBgaTM4NmBgLCBgYHg4Nl82NGBgKS4gIE5vbmUgb2YgdGhlc2Ugb3B0aW9ucworYXJlIHJlZ3VsYXJseSBleGVyY2lzZWQ7IHVzZSBhdCB5b3VyIG93biByaXNrLgorCiAKIFRlc3RpbmcKIC0tLS0tLS0KIAotVGhlIHJlc3VsdGluZyBiaW5hcmllcyBzaG91bGQgd29yayBvbiBNYWNPU1ggMTAuMy45IG9yIGxhdGVyLiBJIHVzdWFsbHkgcnVuCi10aGUgaW5zdGFsbGVyIG9uIGEgMTAuMy45LCBhIDEwLjQueCBQUEMgYW5kIGEgMTAuNC54IEludGVsIHN5c3RlbSBhbmQgdGhlbgotcnVuIHRoZSB0ZXN0c3VpdGUgdG8gbWFrZSBzdXJlLgorSWRlYWxseSwgdGhlIHJlc3VsdGluZyBiaW5hcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkIGFuZCB0aGUgdGVzdCBzdWl0ZSBydW4KK29uIGFsbCBzdXBwb3J0ZWQgT1MgWCByZWxlYXNlcyBhbmQgYXJjaGl0ZWN0dXJlcy4gIEFzIGEgcHJhY3RpY2FsIG1hdHRlciwKK3RoYXQgaXMgZ2VuZXJhbGx5IG5vdCBwb3NzaWJsZS4gIEF0IGEgbWluaW11bSwgdmFyaWFudCAxIHNob3VsZCBiZSBydW4gb24KK2F0IGxlYXN0IG9uZSBJbnRlbCwgb25lIFBQQyBHNCwgYW5kIG9uZSBQUEMgRzMgc3lzdGVtIGFuZCBvbmUgZWFjaCBvZiAKK09TIFggMTAuNiwgMTAuNSwgMTAuNCwgYW5kIDEwLjMuOS4gIE5vdCBhbGwgdGVzdHMgcnVuIG9uIDEwLjMuOS4KK1ZhcmlhbnQgMiBzaG91bGQgYmUgcnVuIG9uIDEwLjYgaW4gYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBtb2Rlcy46OgogCisgICAgYXJjaCAtaTM4NiAvdXNyL2xvY2FsL2Jpbi9weXRob25uLm4gLW0gdGVzdC5yZWdydGVzdCAtdyAtdSBhbGwgCisgICAgYXJjaCAtWDg2XzY0IC91c3IvbG9jYWwvYmluL3B5dGhvbm4ubiAtbSB0ZXN0LnJlZ3J0ZXN0IC13IC11IGFsbAorICAgIAorQ2VydGFpbiB0ZXN0cyB3aWxsIGJlIHNraXBwZWQgYW5kIHNvbWUgY2F1c2UgdGhlIGludGVycHJldGVyIHRvIGZhaWwKK3doaWNoIHdpbGwgbGlrZWx5IGdlbmVyYXRlIGBgUHl0aG9uIHF1aXQgdW5leHBlY3RlZGx5YGAgYWxlcnQgbWVzc2FnZXMKK3RvIGJlIGdlbmVyYXRlZCBhdCBzZXZlcmFsIHBvaW50cyBkdXJpbmcgYSB0ZXN0IHJ1bi4gIFRoZXNlIGNhbgorYmUgaWdub3JlZC4KIAotQW5ub3VuY2VtZW50cwotLS0tLS0tLS0tLS0tLQotCi0oVGhpcyBpcyBtb3N0bHkgb2YgaGlzdG9yaWMgaW50ZXJlc3QpCi0KLVdoZW4gYWxsIGlzIGRvbmUsIGFubm91bmNlbWVudHMgY2FuIGJlIHBvc3RlZCB0byBhdCBsZWFzdCB0aGUgZm9sbG93aW5nCi1wbGFjZXM6Ci0tICAgcHl0aG9ubWFjLXNpZ0BweXRob24ub3JnCi0tICAgcHl0aG9uLWRldkBweXRob24ub3JnCi0tICAgcHl0aG9uLWFubm91bmNlQHB5dGhvbi5vcmcKLS0gICBhcmNoaXZpc3RAaW5mby1tYWMub3JnCi0tICAgYWRjbmV3c0BhcHBsZS5jb20KLS0gICBuZXdzQG1hY25uLmNvbQotLSAgIGh0dHA6Ly93d3cubWFjdXBkYXRlLmNvbQotLSAgIGh0dHA6Ly9ndWlkZS5hcHBsZS5jb20vdXNpbmRleC5sYXNzbwotLSAgIGh0dHA6Ly93d3cuYXBwbGUuY29tL2Rvd25sb2Fkcy9tYWNvc3gvc3VibWl0Ci0tICAgaHR0cDovL3d3dy52ZXJzaW9udHJhY2tlci5jb20vICh1c2VyaWQgSmFjay5KYW5zZW5Ab3JhdHJpeC5jb20pCi0tICAgaHR0cDovL3d3dy5tYWNzaGFyZXdhcmUubmV0ICh1c2VyaWQgamFja2phbnNlbikKLQotQWxzbywgY2hlY2sgb3V0IFN0ZXBoYW4gRGVpYmVscyBodHRwOi8vcHl0aG9ub2xvZ3kub3JnL21hcmtldCBjb250YWN0IGxpc3QKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkgYi9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CmluZGV4IDI3N2JkNmYuLmYwYjNmM2YgMTAwNzU1Ci0tLSBhL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKKysrIGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQpAQCAtMSwxMiArMSwxNCBAQAogIyEvdXNyL2Jpbi9weXRob24KICIiIgotVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBidWlsZCB0aGUgIm9mZmljaWFsIHVub2ZmaWNpYWwiIHVuaXZlcnNhbCBidWlsZCBvbgotTWFjIE9TIFguIEl0IHJlcXVpcmVzIE1hYyBPUyBYIDEwLjQsIFhjb2RlIDIuMiBhbmQgdGhlIDEwLjR1IFNESyB0byBkbyBpdHMKLXdvcmsuICA2NC1iaXQgb3IgZm91ci13YXkgdW5pdmVyc2FsIGJ1aWxkcyByZXF1aXJlIGF0IGxlYXN0IE9TIFggMTAuNSBhbmQKLXRoZSAxMC41IFNESy4KK1RoaXMgc2NyaXB0IGlzIHVzZWQgdG8gYnVpbGQgIm9mZmljaWFsIiB1bml2ZXJzYWwgaW5zdGFsbGVycyBvbiBNYWMgT1MgWC4KK0l0IHJlcXVpcmVzIGF0IGxlYXN0IE1hYyBPUyBYIDEwLjQsIFhjb2RlIDIuMiBhbmQgdGhlIDEwLjR1IFNESyBmb3IKKzMyLWJpdCBidWlsZHMuICA2NC1iaXQgb3IgZm91ci13YXkgdW5pdmVyc2FsIGJ1aWxkcyByZXF1aXJlIGF0IGxlYXN0CitPUyBYIDEwLjUgYW5kIHRoZSAxMC41IFNESy4KIAotUGxlYXNlIGVuc3VyZSB0aGF0IHRoaXMgc2NyaXB0IGtlZXBzIHdvcmtpbmcgd2l0aCBQeXRob24gMi4zLCB0byBhdm9pZAotYm9vdHN0cmFwIGlzc3VlcyAoL3Vzci9iaW4vcHl0aG9uIGlzIFB5dGhvbiAyLjMgb24gT1NYIDEwLjQpCitQbGVhc2UgZW5zdXJlIHRoYXQgdGhpcyBzY3JpcHQga2VlcHMgd29ya2luZyB3aXRoIFB5dGhvbiAyLjUsIHRvIGF2b2lkCitib290c3RyYXAgaXNzdWVzICgvdXNyL2Jpbi9weXRob24gaXMgUHl0aG9uIDIuNSBvbiBPU1ggMTAuNSkuICBTcGhpbngsCit3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBkb2N1bWVudGF0aW9uLCBjdXJyZW50bHkgcmVxdWlyZXMgYXQgbGVhc3QKK1B5dGhvbiAyLjQuCiAKIFVzYWdlOiBzZWUgVVNBR0UgdmFyaWFibGUgaW4gdGhlIHNjcmlwdC4KICIiIgpAQCAtNDAsMTYgKzQyLDE5IEBACiAgICAgICAgIGlmIGxuLnN0YXJ0c3dpdGgodmFyaWFibGUpOgogICAgICAgICAgICAgdmFsdWUgPSBsbltsZW4odmFyaWFibGUpOl0uc3RyaXAoKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzE6LTFdCisgICAgcmFpc2UgUnVudGltZUVycm9yLCAiQ2Fubm90IGZpbmQgdmFyaWFibGUgJXMiICUgdmFyaWFibGVbOi0xXQogCiBkZWYgZ2V0VmVyc2lvbigpOgogICAgIHJldHVybiBncmVwVmFsdWUob3MucGF0aC5qb2luKFNSQ0RJUiwgJ2NvbmZpZ3VyZScpLCAnUEFDS0FHRV9WRVJTSU9OJykKIAorZGVmIGdldFZlcnNpb25UdXBsZSgpOgorICAgIHJldHVybiB0dXBsZShbaW50KG4pIGZvciBuIGluIGdldFZlcnNpb24oKS5zcGxpdCgnLicpXSkKKwogZGVmIGdldEZ1bGxWZXJzaW9uKCk6CiAgICAgZm4gPSBvcy5wYXRoLmpvaW4oU1JDRElSLCAnSW5jbHVkZScsICdwYXRjaGxldmVsLmgnKQogICAgIGZvciBsbiBpbiBvcGVuKGZuKToKICAgICAgICAgaWYgJ1BZX1ZFUlNJT04nIGluIGxuOgogICAgICAgICAgICAgcmV0dXJuIGxuLnNwbGl0KClbLTFdWzE6LTFdCi0KICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJDYW5ub3QgZmluZCBmdWxsIHZlcnNpb24/PyIKIAogIyBUaGUgZGlyZWN0b3J5IHdlJ2xsIHVzZSB0byBjcmVhdGUgdGhlIGJ1aWxkICh3aWxsIGJlIGVyYXNlZCBhbmQgcmVjcmVhdGVkKQpAQCAtMTE0LDYgKzExOSw4IEBACiAKIENDID0gdGFyZ2V0X2NjX21hcFtERVBUQVJHRVRdCiAKK1BZVEhPTl8zID0gZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDApCisKIFVTQUdFID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKICAgICBVc2FnZTogYnVpbGRfcHl0aG9uIFtvcHRpb25zXQogCkBAIC0xMzksOSArMTQ2LDkgQEAKICAgICBpZiBERVBUQVJHRVQgPCAnMTAuNSc6CiAgICAgICAgIHJlc3VsdC5leHRlbmQoWwogICAgICAgICAgIGRpY3QoCi0gICAgICAgICAgICAgIG5hbWU9IkJ6aXAyIDEuMC41IiwKLSAgICAgICAgICAgICAgdXJsPSJodHRwOi8vd3d3LmJ6aXAub3JnLzEuMC41L2J6aXAyLTEuMC41LnRhci5neiIsCi0gICAgICAgICAgICAgIGNoZWNrc3VtPSczYzE1YTBjOGQxZDNlZTFjNDZhMTYzNGQwMDYxN2IxYScsCisgICAgICAgICAgICAgIG5hbWU9IkJ6aXAyIDEuMC42IiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwOi8vYnppcC5vcmcvMS4wLjYvYnppcDItMS4wLjYudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09JzAwYjUxNmY0NzA0ZDRhN2NiNTBhMWQ5N2U2ZThlMTViJywKICAgICAgICAgICAgICAgY29uZmlndXJlPU5vbmUsCiAgICAgICAgICAgICAgIGluc3RhbGw9J21ha2UgaW5zdGFsbCBDQz0lcyBQUkVGSVg9JXMvdXNyL2xvY2FsLyBDRkxBR1M9Ii1hcmNoICVzIC1pc3lzcm9vdCAlcyInJSgKICAgICAgICAgICAgICAgICAgIENDLApAQCAtMTY0LDI5ICsxNzEsMzMgQEAKICAgICAgICAgICApLAogICAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IEdOVSByZWFkbGluZSBpcyBHUEwnZCBzb2Z0d2FyZQotICAgICAgICAgICAgICBuYW1lPSJHTlUgUmVhZGxpbmUgNS4xLjQiLAotICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L3JlYWRsaW5lL3JlYWRsaW5lLTUuMS50YXIuZ3oiICwKLSAgICAgICAgICAgICAgY2hlY2tzdW09JzdlZTVhNjkyZGI4OGIzMGNhNDg5MjdhMTNmZDYwZTQ2JywKKyAgICAgICAgICAgICAgbmFtZT0iR05VIFJlYWRsaW5lIDYuMS4yIiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9yZWFkbGluZS9yZWFkbGluZS02LjEudGFyLmd6IiAsCisgICAgICAgICAgICAgIGNoZWNrc3VtPSdmYzJmN2U3MTRmZTc5MmRiMWNlNmRkYzRjOWZiNGVmMycsCiAgICAgICAgICAgICAgIHBhdGNobGV2ZWw9JzAnLAogICAgICAgICAgICAgICBwYXRjaGVzPVsKICAgICAgICAgICAgICAgICAgICMgVGhlIHJlYWRsaW5lIG1haW50YWluZXJzIGRvbid0IGRvIGFjdHVhbCBtaWNybyByZWxlYXNlcywgYnV0CiAgICAgICAgICAgICAgICAgICAjIGp1c3Qgc2hpcCBhIHNldCBvZiBwYXRjaGVzLgotICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L3JlYWRsaW5lL3JlYWRsaW5lLTUuMS1wYXRjaGVzL3JlYWRsaW5lNTEtMDAxJywKLSAgICAgICAgICAgICAgICAgICdodHRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9yZWFkbGluZS9yZWFkbGluZS01LjEtcGF0Y2hlcy9yZWFkbGluZTUxLTAwMicsCi0gICAgICAgICAgICAgICAgICAnaHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvcmVhZGxpbmUvcmVhZGxpbmUtNS4xLXBhdGNoZXMvcmVhZGxpbmU1MS0wMDMnLAotICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L3JlYWRsaW5lL3JlYWRsaW5lLTUuMS1wYXRjaGVzL3JlYWRsaW5lNTEtMDA0JywKKyAgICAgICAgICAgICAgICAgICdodHRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9yZWFkbGluZS9yZWFkbGluZS02LjEtcGF0Y2hlcy9yZWFkbGluZTYxLTAwMScsCisgICAgICAgICAgICAgICAgICAnaHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvcmVhZGxpbmUvcmVhZGxpbmUtNi4xLXBhdGNoZXMvcmVhZGxpbmU2MS0wMDInLAogICAgICAgICAgICAgICBdCiAgICAgICAgICAgKSwKICAgICAgICAgICBkaWN0KAotICAgICAgICAgICAgICBuYW1lPSJTUUxpdGUgMy42LjExIiwKLSAgICAgICAgICAgICAgdXJsPSJodHRwOi8vd3d3LnNxbGl0ZS5vcmcvc3FsaXRlLTMuNi4xMS50YXIuZ3oiLAotICAgICAgICAgICAgICBjaGVja3N1bT0nN2ViYjA5OTY5NmFiNzZjYzZmZjY1ZGQ0OTZkMTc4NTgnLAorICAgICAgICAgICAgICBuYW1lPSJTUUxpdGUgMy43LjQiLAorICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cuc3FsaXRlLm9yZy9zcWxpdGUtYXV0b2NvbmYtMzA3MDQwMC50YXIuZ3oiLAorICAgICAgICAgICAgICBjaGVja3N1bT0nOGYwYzY5MGJmYjMzYzNjYmJjMjQ3MWMzZDliYTAxNTgnLAorICAgICAgICAgICAgICBjb25maWd1cmVfZW52PSgnQ0ZMQUdTPSItT3MnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtRFNRTElURV9FTkFCTEVfRlRTMycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1EU1FMSVRFX0VOQUJMRV9GVFMzX1BBUkVOVEhFU0lTJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgLURTUUxJVEVfRU5BQkxFX1JUUkVFJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgLURTUUxJVEVfVENMPTAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyInKSwKICAgICAgICAgICAgICAgY29uZmlndXJlX3ByZT1bCiAgICAgICAgICAgICAgICAgICAnLS1lbmFibGUtdGhyZWFkc2FmZScsCi0gICAgICAgICAgICAgICAgICAnLS1lbmFibGUtdGVtcHN0b3JlJywKICAgICAgICAgICAgICAgICAgICctLWVuYWJsZS1zaGFyZWQ9bm8nLAogICAgICAgICAgICAgICAgICAgJy0tZW5hYmxlLXN0YXRpYz15ZXMnLAotICAgICAgICAgICAgICAgICAgJy0tZGlzYWJsZS10Y2wnLAorICAgICAgICAgICAgICAgICAgJy0tZGlzYWJsZS1yZWFkbGluZScsCisgICAgICAgICAgICAgICAgICAnLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcnLAogICAgICAgICAgICAgICBdCiAgICAgICAgICAgKSwKICAgICAgICAgICBkaWN0KApAQCAtMTk0LDYgKzIwNSw3IEBACiAgICAgICAgICAgICAgIHVybD0iaHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvbmN1cnNlcy9uY3Vyc2VzLTUuNS50YXIuZ3oiLAogICAgICAgICAgICAgICBjaGVja3N1bT0nZTczYzFhYzEwYjRiZmM0NmRiNDNiMmRkZmQ2MjQ0ZWYnLAogICAgICAgICAgICAgICBjb25maWd1cmVfcHJlPVsKKyAgICAgICAgICAgICAgICAgICItLWVuYWJsZS13aWRlYyIsCiAgICAgICAgICAgICAgICAgICAiLS13aXRob3V0LWN4eCIsCiAgICAgICAgICAgICAgICAgICAiLS13aXRob3V0LWFkYSIsCiAgICAgICAgICAgICAgICAgICAiLS13aXRob3V0LXByb2dzIiwKQEAgLTIyMCwyNCArMjMyLDI2IEBACiAgICAgICAgICAgKSwKICAgICAgICAgXSkKIAotICAgIHJlc3VsdC5leHRlbmQoWwotICAgICAgZGljdCgKLSAgICAgICAgICBuYW1lPSJTbGVlcHljYXQgREIgNC43LjI1IiwKLSAgICAgICAgICB1cmw9Imh0dHA6Ly9kb3dubG9hZC5vcmFjbGUuY29tL2JlcmtlbGV5LWRiL2RiLTQuNy4yNS50YXIuZ3oiLAotICAgICAgICAgIGNoZWNrc3VtPSdlYzJiODdlODMzNzc5NjgxYTBjM2E4MTRhYTcxMzU5ZScsCi0gICAgICAgICAgYnVpbGREaXI9ImJ1aWxkX3VuaXgiLAotICAgICAgICAgIGNvbmZpZ3VyZT0iLi4vZGlzdC9jb25maWd1cmUiLAotICAgICAgICAgIGNvbmZpZ3VyZV9wcmU9WwotICAgICAgICAgICAgICAnLS1pbmNsdWRlZGlyPS91c3IvbG9jYWwvaW5jbHVkZS9kYjQnLAotICAgICAgICAgIF0KLSAgICAgICksCi0gICAgXSkKKyAgICBpZiBub3QgUFlUSE9OXzM6CisgICAgICAgIHJlc3VsdC5leHRlbmQoWworICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgIG5hbWU9IlNsZWVweWNhdCBEQiA0LjcuMjUiLAorICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly9kb3dubG9hZC5vcmFjbGUuY29tL2JlcmtlbGV5LWRiL2RiLTQuNy4yNS50YXIuZ3oiLAorICAgICAgICAgICAgICBjaGVja3N1bT0nZWMyYjg3ZTgzMzc3OTY4MWEwYzNhODE0YWE3MTM1OWUnLAorICAgICAgICAgICAgICBidWlsZERpcj0iYnVpbGRfdW5peCIsCisgICAgICAgICAgICAgIGNvbmZpZ3VyZT0iLi4vZGlzdC9jb25maWd1cmUiLAorICAgICAgICAgICAgICBjb25maWd1cmVfcHJlPVsKKyAgICAgICAgICAgICAgICAgICctLWluY2x1ZGVkaXI9L3Vzci9sb2NhbC9pbmNsdWRlL2RiNCcsCisgICAgICAgICAgICAgIF0KKyAgICAgICAgICApLAorICAgICAgICBdKQogCiAgICAgcmV0dXJuIHJlc3VsdAogCiAKICMgSW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBwYWNrYWdlcyBpbnNpZGUgdGhlIC5tcGtnLgogZGVmIHBrZ19yZWNpcGVzKCk6CisgICAgdW5zZWxlY3RlZF9mb3JfcHl0aG9uMyA9ICgnc2VsZWN0ZWQnLCAndW5zZWxlY3RlZCcpW1BZVEhPTl8zXQogICAgIHJlc3VsdCA9IFsKICAgICAgICAgZGljdCgKICAgICAgICAgICAgIG5hbWU9IlB5dGhvbkZyYW1ld29yayIsCkBAIC0yNDksNiArMjYzLDcgQEAKICAgICAgICAgICAgICAgICB3cmFwcGVycyBmb3IgbG90cyBvZiBNYWMgT1MgWCBBUEkncy4KICAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIHBvc3RmbGlnaHQ9InNjcmlwdHMvcG9zdGZsaWdodC5mcmFtZXdvcmsiLAorICAgICAgICAgICAgc2VsZWN0ZWQ9J3NlbGVjdGVkJywKICAgICAgICAgKSwKICAgICAgICAgZGljdCgKICAgICAgICAgICAgIG5hbWU9IlB5dGhvbkFwcGxpY2F0aW9ucyIsCkBAIC0yNjIsNiArMjc3LDcgQEAKICAgICAgICAgICAgICAgICBJdCBhbHNvIGluc3RhbGxzIGEgbnVtYmVyIG9mIGV4YW1wbGVzIGFuZCBkZW1vcy4KICAgICAgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgIHNlbGVjdGVkPSdzZWxlY3RlZCcsCiAgICAgICAgICksCiAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICBuYW1lPSJQeXRob25Vbml4VG9vbHMiLApAQCAtMjczLDYgKzI4OSw3IEBACiAgICAgICAgICAgICAgICAgaXMgbm90IG5lY2Vzc2FyeSB0byB1c2UgUHl0aG9uLgogICAgICAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgc2VsZWN0ZWQ9J3NlbGVjdGVkJywKICAgICAgICAgKSwKICAgICAgICAgZGljdCgKICAgICAgICAgICAgIG5hbWU9IlB5dGhvbkRvY3VtZW50YXRpb24iLApAQCAtMjg3LDYgKzMwNCw3IEBACiAgICAgICAgICAgICAgICAgIiIiLAogICAgICAgICAgICAgcG9zdGZsaWdodD0ic2NyaXB0cy9wb3N0ZmxpZ2h0LmRvY3VtZW50YXRpb24iLAogICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICBzZWxlY3RlZD0nc2VsZWN0ZWQnLAogICAgICAgICApLAogICAgICAgICBkaWN0KAogICAgICAgICAgICAgbmFtZT0iUHl0aG9uUHJvZmlsZUNoYW5nZXMiLApAQCAtMzA0LDYgKzMyMiw3IEBACiAgICAgICAgICAgICB0b3BkaXI9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yayIsCiAgICAgICAgICAgICBzb3VyY2U9Ii9lbXB0eS1kaXIiLAogICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICBzZWxlY3RlZD11bnNlbGVjdGVkX2Zvcl9weXRob24zLAogICAgICAgICApLAogICAgIF0KIApAQCAtMzIxLDYgKzM0MCw3IEBACiAgICAgICAgICAgICAgICAgdG9wZGlyPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsiLAogICAgICAgICAgICAgICAgIHNvdXJjZT0iL2VtcHR5LWRpciIsCiAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfcHl0aG9uMywKICAgICAgICAgICAgICkKICAgICAgICAgKQogICAgIHJldHVybiByZXN1bHQKQEAgLTM4Nyw2ICs0MDcsOSBAQAogICAgIENoZWNrIHRoYXQgd2UncmUgcnVubmluZyBvbiBhIHN1cHBvcnRlZCBzeXN0ZW0uCiAgICAgIiIiCiAKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzA6Ml0gPCAoMiwgNCk6CisgICAgICAgIGZhdGFsKCJUaGlzIHNjcmlwdCBtdXN0IGJlIHJ1biB3aXRoIFB5dGhvbiAyLjQgb3IgbGF0ZXIiKQorCiAgICAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgIT0gJ0Rhcndpbic6CiAgICAgICAgIGZhdGFsKCJUaGlzIHNjcmlwdCBzaG91bGQgYmUgcnVuIG9uIGEgTWFjIE9TIFggMTAuNCAob3IgbGF0ZXIpIHN5c3RlbSIpCiAKQEAgLTQwNiwxNSArNDI5LDE2IEBACiAgICAgIyAgICAgICB0byBpbnN0YWxsIGEgbmV3ZXIgcGF0Y2ggbGV2ZWwuCiAKICAgICBmb3IgZnJhbWV3b3JrIGluIFsnVGNsJywgJ1RrJ106Ci0gICAgICAgIGZ3ID0gZGljdChsb3dlcj1mcmFtZXdvcmsubG93ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgdXBwZXI9ZnJhbWV3b3JrLnVwcGVyKCksCi0gICAgICAgICAgICAgICAgICAgIGNhcD1mcmFtZXdvcmsuY2FwaXRhbGl6ZSgpKQotICAgICAgICBmd3B0aCA9ICJMaWJyYXJ5L0ZyYW1ld29ya3MvJShjYXApcy5mcmFtZXdvcmsvJShsb3dlcilzQ29uZmlnLnNoIiAlIGZ3Ci0gICAgICAgIHN5c2Z3ID0gb3MucGF0aC5qb2luKCcvU3lzdGVtJywgZndwdGgpCisgICAgICAgICNmdyA9IGRpY3QobG93ZXI9ZnJhbWV3b3JrLmxvd2VyKCksCisgICAgICAgICMgICAgICAgICAgICB1cHBlcj1mcmFtZXdvcmsudXBwZXIoKSwKKyAgICAgICAgIyAgICAgICAgICAgIGNhcD1mcmFtZXdvcmsuY2FwaXRhbGl6ZSgpKQorICAgICAgICAjZndwdGggPSAiTGlicmFyeS9GcmFtZXdvcmtzLyUoY2FwKXMuZnJhbWV3b3JrLyUobG93ZXIpc0NvbmZpZy5zaCIgJSBmdworICAgICAgICBmd3B0aCA9ICdMaWJyYXJ5L0ZyYW1ld29ya3MvVGNsLmZyYW1ld29yay9WZXJzaW9ucy9DdXJyZW50JworICAgICAgICBzeXNmdyA9IG9zLnBhdGguam9pbihTREtQQVRILCAnU3lzdGVtJywgZndwdGgpCiAgICAgICAgIGxpYmZ3ID0gb3MucGF0aC5qb2luKCcvJywgZndwdGgpCiAgICAgICAgIHVzcmZ3ID0gb3MucGF0aC5qb2luKG9zLmdldGVudignSE9NRScpLCBmd3B0aCkKLSAgICAgICAgdmVyc2lvbiA9ICIlKHVwcGVyKXNfVkVSU0lPTiIgJSBmdwotICAgICAgICBpZiBnZXRUY2xUa1ZlcnNpb24obGliZncsIHZlcnNpb24pICE9IGdldFRjbFRrVmVyc2lvbihzeXNmdywgdmVyc2lvbik6CisgICAgICAgICN2ZXJzaW9uID0gIiUodXBwZXIpc19WRVJTSU9OIiAlIGZ3CisgICAgICAgIGlmIG9zLnJlYWRsaW5rKGxpYmZ3KSAhPSBvcy5yZWFkbGluayhzeXNmdyk6CiAgICAgICAgICAgICBmYXRhbCgiVmVyc2lvbiBvZiAlcyBtdXN0IG1hdGNoICVzIiAlIChsaWJmdywgc3lzZncpICkKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModXNyZncpOgogICAgICAgICAgICAgZmF0YWwoIlBsZWFzZSByZW5hbWUgJXMgdG8gYXZvaWQgcG9zc2libGUgZHluYW1pYyBsb2FkIGlzc3Vlcy4iCkBAIC02ODQsNiArNzA4LDkgQEAKICAgICAgICAgY29uZmlndXJlX2FyZ3MuaW5zZXJ0KDAsIGNvbmZpZ3VyZSkKICAgICAgICAgY29uZmlndXJlX2FyZ3MgPSBbIHNoZWxsUXVvdGUoYSkgZm9yIGEgaW4gY29uZmlndXJlX2FyZ3MgXQogCisgICAgICAgIGlmICdjb25maWd1cmVfZW52JyBpbiByZWNpcGU6CisgICAgICAgICAgICBjb25maWd1cmVfYXJncy5pbnNlcnQoMCwgcmVjaXBlWydjb25maWd1cmVfZW52J10pCisKICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgY29uZmlndXJlIGZvciAlcyIlKG5hbWUsKQogICAgICAgICBydW5Db21tYW5kKCcgJy5qb2luKGNvbmZpZ3VyZV9hcmdzKSArICcgMj4mMScpCiAKQEAgLTczOSw5ICs3NjYsOSBAQAogICAgICAgICBzaHV0aWwucm10cmVlKGJ1aWxkRGlyKQogICAgIGlmIG9zLnBhdGguZXhpc3RzKHJvb3REaXIpOgogICAgICAgICBzaHV0aWwucm10cmVlKHJvb3REaXIpCi0gICAgb3MubWtkaXIoYnVpbGREaXIpCi0gICAgb3MubWtkaXIocm9vdERpcikKLSAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4ocm9vdERpciwgJ2VtcHR5LWRpcicpKQorICAgIG9zLm1ha2VkaXJzKGJ1aWxkRGlyKQorICAgIG9zLm1ha2VkaXJzKHJvb3REaXIpCisgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHJvb3REaXIsICdlbXB0eS1kaXInKSkKICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQogICAgIG9zLmNoZGlyKGJ1aWxkRGlyKQogCkBAIC03NjEsMTggKzc4OCwyMCBAQAogICAgIHByaW50ICJSdW5uaW5nIGNvbmZpZ3VyZS4uLiIKICAgICBydW5Db21tYW5kKCIlcyAtQyAtLWVuYWJsZS1mcmFtZXdvcmsgLS1lbmFibGUtdW5pdmVyc2Fsc2RrPSVzICIKICAgICAgICAgICAgICAgICItLXdpdGgtdW5pdmVyc2FsLWFyY2hzPSVzICIKKyAgICAgICAgICAgICAgICIlcyAiCiAgICAgICAgICAgICAgICAiTERGTEFHUz0nLWcgLUwlcy9saWJyYXJpZXMvdXNyL2xvY2FsL2xpYicgIgogICAgICAgICAgICAgICAgIk9QVD0nLWcgLU8zIC1JJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9pbmNsdWRlJyAyPiYxIiUoCiAgICAgICAgIHNoZWxsUXVvdGUob3MucGF0aC5qb2luKFNSQ0RJUiwgJ2NvbmZpZ3VyZScpKSwgc2hlbGxRdW90ZShTREtQQVRIKSwKICAgICAgICAgVU5JVkVSU0FMQVJDSFMsCisgICAgICAgICgnICcsICctLXdpdGgtY29tcHV0ZWQtZ290b3MgJylbUFlUSE9OXzNdLAogICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdLAogICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdKSkKIAogICAgIHByaW50ICJSdW5uaW5nIG1ha2UiCiAgICAgcnVuQ29tbWFuZCgibWFrZSIpCiAKLSAgICBwcmludCAiUnVubmluZyBtYWtlIGZyYW1ld29ya2luc3RhbGwiCi0gICAgcnVuQ29tbWFuZCgibWFrZSBmcmFtZXdvcmtpbnN0YWxsIERFU1RESVI9JXMiJSgKKyAgICBwcmludCAiUnVubmluZyBtYWtlIGluc3RhbGwiCisgICAgcnVuQ29tbWFuZCgibWFrZSBpbnN0YWxsIERFU1RESVI9JXMiJSgKICAgICAgICAgc2hlbGxRdW90ZShyb290RGlyKSkpCiAKICAgICBwcmludCAiUnVubmluZyBtYWtlIGZyYW1ld29ya2luc3RhbGxleHRyYXMiCkBAIC04MTEsMTIgKzg0MCwzMyBAQAogICAgICAgICAgICAgb3MuY2htb2QocCwgc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpIHwgc3RhdC5TX0lXR1JQKQogICAgICAgICAgICAgb3MuY2hvd24ocCwgLTEsIGdpZCkKIAorICAgIGlmIFBZVEhPTl8zOgorICAgICAgICBMRFZFUlNJT049Tm9uZQorICAgICAgICBWRVJTSU9OPU5vbmUKKyAgICAgICAgQUJJRkxBR1M9Tm9uZQorCisgICAgICAgIGZwID0gb3Blbihvcy5wYXRoLmpvaW4oYnVpbGREaXIsICdNYWtlZmlsZScpLCAncicpCisgICAgICAgIGZvciBsbiBpbiBmcDoKKyAgICAgICAgICAgIGlmIGxuLnN0YXJ0c3dpdGgoJ1ZFUlNJT049Jyk6CisgICAgICAgICAgICAgICAgVkVSU0lPTj1sbi5zcGxpdCgpWzFdCisgICAgICAgICAgICBpZiBsbi5zdGFydHN3aXRoKCdBQklGTEFHUz0nKToKKyAgICAgICAgICAgICAgICBBQklGTEFHUz1sbi5zcGxpdCgpWzFdCisgICAgICAgICAgICBpZiBsbi5zdGFydHN3aXRoKCdMRFZFUlNJT049Jyk6CisgICAgICAgICAgICAgICAgTERWRVJTSU9OPWxuLnNwbGl0KClbMV0KKyAgICAgICAgZnAuY2xvc2UoKQorCisgICAgICAgIExEVkVSU0lPTiA9IExEVkVSU0lPTi5yZXBsYWNlKCckKFZFUlNJT04pJywgVkVSU0lPTikKKyAgICAgICAgTERWRVJTSU9OID0gTERWRVJTSU9OLnJlcGxhY2UoJyQoQUJJRkxBR1MpJywgQUJJRkxBR1MpCisgICAgICAgIGNvbmZpZ19zdWZmaXggPSAnLScgKyBMRFZFUlNJT04KKyAgICBlbHNlOgorICAgICAgICBjb25maWdfc3VmZml4ID0gJycgICAgICAjIFB5dGhvbiAyLngKKwogICAgICMgV2UgYWRkZWQgc29tZSBkaXJlY3RvcmllcyB0byB0aGUgc2VhcmNoIHBhdGggZHVyaW5nIHRoZSBjb25maWd1cmUKICAgICAjIHBoYXNlLiBSZW1vdmUgdGhvc2UgYmVjYXVzZSB0aG9zZSBkaXJlY3RvcmllcyB3b24ndCBiZSB0aGVyZSBvbgogICAgICMgdGhlIGVuZC11c2VycyBzeXN0ZW0uCiAgICAgcGF0aCA9b3MucGF0aC5qb2luKHJvb3REaXIsICdMaWJyYXJ5JywgJ0ZyYW1ld29ya3MnLCAnUHl0aG9uLmZyYW1ld29yaycsCiAgICAgICAgICAgICAgICAgJ1ZlcnNpb25zJywgdmVyc2lvbiwgJ2xpYicsICdweXRob24lcyclKHZlcnNpb24sKSwKLSAgICAgICAgICAgICAgICAnY29uZmlnJywgJ01ha2VmaWxlJykKKyAgICAgICAgICAgICAgICAnY29uZmlnJyArIGNvbmZpZ19zdWZmaXgsICdNYWtlZmlsZScpCiAgICAgZnAgPSBvcGVuKHBhdGgsICdyJykKICAgICBkYXRhID0gZnAucmVhZCgpCiAgICAgZnAuY2xvc2UoKQpAQCAtODQxLDE0ICs4OTEsMTggQEAKIAogICAgIG9zLmNoZGlyKGN1cmRpcikKIAotCisgICAgaWYgUFlUSE9OXzM6CisgICAgICAgICMgUmVtb3ZlIHRoZSAnQ3VycmVudCcgbGluaywgdGhhdCB3YXkgd2UgZG9uJ3QgYWNjaWRlbnRseSBtZXNzCisgICAgICAgICMgd2l0aCBhbiBhbHJlYWR5IGluc3RhbGxlZCB2ZXJzaW9uIG9mIHB5dGhvbiAyCisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4ocm9vdERpciwgJ0xpYnJhcnknLCAnRnJhbWV3b3JrcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B5dGhvbi5mcmFtZXdvcmsnLCAnVmVyc2lvbnMnLCAnQ3VycmVudCcpKQogCiBkZWYgcGF0Y2hGaWxlKGluUGF0aCwgb3V0UGF0aCk6CiAgICAgZGF0YSA9IGZpbGVDb250ZW50cyhpblBhdGgpCiAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnJEZVTExfVkVSU0lPTicsIGdldEZ1bGxWZXJzaW9uKCkpCiAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnJFZFUlNJT04nLCBnZXRWZXJzaW9uKCkpCiAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcsICcnLmpvaW4oKERFUFRBUkdFVCwgJyBvciBsYXRlcicpKSkKLSAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCckQVJDSElURUNUVVJFUycsICJpMzg2LCBwcGMiKQorICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJyRBUkNISVRFQ1RVUkVTJywgIiwgIi5qb2luKHVuaXZlcnNhbF9vcHRzX21hcFtVTklWRVJTQUxBUkNIU10pKQogICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJyRJTlNUQUxMX1NJWkUnLCBpbnN0YWxsU2l6ZSgpKQogCiAgICAgIyBUaGlzIG9uZSBpcyBub3QgaGFuZHkgYXMgYSB0ZW1wbGF0ZSB2YXJpYWJsZQpAQCAtOTc1LDcgKzEwMjksNyBAQAogICAgICAgICAgICAgSUZQa2dGbGFnUGFja2FnZUxpc3Q9WwogICAgICAgICAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICAgICAgICAgIElGUGtnRmxhZ1BhY2thZ2VMb2NhdGlvbj0nJXMtJXMucGtnJyUoaXRlbVsnbmFtZSddLCBnZXRWZXJzaW9uKCkpLAotICAgICAgICAgICAgICAgICAgICBJRlBrZ0ZsYWdQYWNrYWdlU2VsZWN0aW9uPSdzZWxlY3RlZCcKKyAgICAgICAgICAgICAgICAgICAgSUZQa2dGbGFnUGFja2FnZVNlbGVjdGlvbj1pdGVtLmdldCgnc2VsZWN0ZWQnLCAnc2VsZWN0ZWQnKSwKICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gcGtnX3JlY2lwZXMoKQogICAgICAgICAgICAgXSwKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dCBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dAppbmRleCBkOTlmOWY2Li43NjFjZmZiIDEwMDY0NAotLS0gYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUudHh0CkBAIC0xLDMwICsxLDM2IEBACi1UaGlzIHBhY2thZ2Ugd2lsbCBpbnN0YWxsIE1hY1B5dGhvbiAkRlVMTF9WRVJTSU9OIGZvciBNYWMgT1MgWAotJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBmb3IgdGhlIGZvbGxvd2luZyAKLWFyY2hpdGVjdHVyZShzKTogJEFSQ0hJVEVDVFVSRVMuCitUaGlzIHBhY2thZ2Ugd2lsbCBpbnN0YWxsIFB5dGhvbiAkRlVMTF9WRVJTSU9OIGZvciBNYWMgT1MgWAorJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBmb3IgdGhlIGZvbGxvd2luZyBhcmNoaXRlY3R1cmUocyk6CiskQVJDSElURUNUVVJFUy4KIAotU2VwYXJhdGUgaW5zdGFsbGVycyBhcmUgYXZhaWxhYmxlIGZvciBvbGRlciB2ZXJzaW9ucwotb2YgTWFjIE9TIFgsIHNlZSB0aGUgaG9tZXBhZ2UsIGJlbG93LgorSW5zdGFsbGF0aW9uIHJlcXVpcmVzIGFwcHJveGltYXRlbHkgJElOU1RBTExfU0laRSBNQiBvZiBkaXNrIHNwYWNlLAoraWdub3JlIHRoZSBtZXNzYWdlIHRoYXQgaXQgd2lsbCB0YWtlIHplcm8gYnl0ZXMuCiAKLUluc3RhbGxhdGlvbiByZXF1aXJlcyBhcHByb3hpbWF0ZWx5ICRJTlNUQUxMX1NJWkUgTUIgb2YgZGlzawotc3BhY2UsIGlnbm9yZSB0aGUgbWVzc2FnZSB0aGF0IGl0IHdpbGwgdGFrZSB6ZXJvIGJ5dGVzLgorWW91IG11c3QgaW5zdGFsbCBvbnRvIHlvdXIgY3VycmVudCBib290IGRpc2ssIGV2ZW4gdGhvdWdoIHRoZQoraW5zdGFsbGVyIGRvZXMgbm90IGVuZm9yY2UgdGhpcywgb3RoZXJ3aXNlIHRoaW5ncyB3aWxsIG5vdCB3b3JrLgogCi1Zb3UgbXVzdCBpbnN0YWxsIG9udG8geW91ciBjdXJyZW50IGJvb3QgZGlzaywgZXZlbgotdGhvdWdoIHRoZSBpbnN0YWxsZXIgZG9lcyBub3QgZW5mb3JjZSB0aGlzLCBvdGhlcndpc2UKLXRoaW5ncyB3aWxsIG5vdCB3b3JrLgorUHl0aG9uIGNvbnNpc3RzIG9mIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaW50ZXJwcmV0ZXIsIHBsdXMKK2Egc2V0IG9mIHByb2dyYW1zIHRvIGFsbG93IGVhc3kgYWNjZXNzIHRvIGl0IGZvciBNYWMgdXNlcnMgaW5jbHVkaW5nCithbiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50LCBJRExFLCBwbHVzIGEgc2V0IG9mIHByZS1idWlsdAorZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBvcGVuIHVwIHNwZWNpZmljIE1hY2ludG9zaCB0ZWNobm9sb2dpZXMgdG8KK1B5dGhvbiBwcm9ncmFtcy4KIAotTWFjUHl0aG9uIGNvbnNpc3RzIG9mIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UKLWludGVycHJldGVyLCBwbHVzIGEgc2V0IG9mIHByb2dyYW1zIHRvIGFsbG93IGVhc3kKLWFjY2VzcyB0byBpdCBmb3IgTWFjIHVzZXJzIGluY2x1ZGluZyBhbiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50Ci1lbnZpcm9ubWVudCwgSURMRSwgcGx1cyBhIHNldCBvZiBwcmUtYnVpbHQgZXh0ZW5zaW9uIG1vZHVsZXMKLXRoYXQgb3BlbiB1cCBzcGVjaWZpYyBNYWNpbnRvc2ggdGVjaG5vbG9naWVzIHRvIFB5dGhvbiBwcm9ncmFtcy4KKyAgICAgICAgICAgICAgICAgICAgKioqKiBJTVBPUlRBTlQgKioqKgorICAgICAgICAgICAgICAgICAgICAKK0JlZm9yZSB1c2luZyBJRExFIG9yIG90aGVyIHByb2dyYW1zIHVzaW5nIHRoZSB0a2ludGVyIGdyYXBoaWNhbCB1c2VyCitpbnRlcmZhY2UgdG9vbGtpdCwgdmlzaXQgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay8KK2ZvciBjdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHN1cHBvcnRlZCBhbmQgcmVjb21tZW5kZWQgdmVyc2lvbnMKK29mIFRjbC9UayBmb3IgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBhbmQgTWFjIE9TIFguCiAKLVRoZSBpbnN0YWxsZXIgcHV0cyB0aGUgYXBwbGljYXRpb25zIGluICJQeXRob24gJFZFUlNJT04iIAotaW4geW91ciBBcHBsaWNhdGlvbnMgZm9sZGVyLCBjb21tYW5kLWxpbmUgdG9vbHMgaW4KLS91c3IvbG9jYWwvYmluIGFuZCB0aGUgdW5kZXJseWluZyBtYWNoaW5lcnkgaW4KLSRQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSLgorICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqCiAKLU1vcmUgaW5mb3JtYXRpb24gb24gTWFjUHl0aG9uIGNhbiBiZSBmb3VuZCBhdAotaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy8uCitUaGUgaW5zdGFsbGVyIHB1dHMgYXBwbGljYXRpb25zLCBhbiAiVXBkYXRlIFNoZWxsIFByb2ZpbGUiIGNvbW1hbmQsCithbmQgYW4gRXh0cmFzIGZvbGRlciBjb250YWluaW5nIGRlbW8gcHJvZ3JhbXMgYW5kIHRvb2xzIGludG8gdGhlCisiUHl0aG9uICRWRVJTSU9OIiBzdWJmb2xkZXIgb2YgdGhlIHN5c3RlbSBBcHBsaWNhdGlvbnMgZm9sZGVyLAorYW5kIHB1dHMgdGhlIHVuZGVybHlpbmcgbWFjaGluZXJ5IGludG8gdGhlIGZvbGRlcgorJFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIuIEl0IGNhbgorb3B0aW9uYWxseSBwbGFjZSBsaW5rcyB0byB0aGUgY29tbWFuZC1saW5lIHRvb2xzIGluIC91c3IvbG9jYWwvYmluIGFzCit3ZWxsLiBEb3VibGUtY2xpY2sgb24gdGhlICJVcGRhdGUgU2hlbGwgUHJvZmlsZSIgY29tbWFuZCB0byBhZGQgdGhlCisiYmluIiBkaXJlY3RvcnkgaW5zaWRlIHRoZSBmcmFtZXdvcmsgdG8geW91ciBzaGVsbCdzIHNlYXJjaCBwYXRoLgogCiBNb3JlIGluZm9ybWF0aW9uIG9uIFB5dGhvbiBpbiBnZW5lcmFsIGNhbiBiZSBmb3VuZCBhdAogaHR0cDovL3d3dy5weXRob24ub3JnLgpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZiBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKaW5kZXggMDc1M2VhNC4uMWZiN2NkNCAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgorKysgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCkBAIC0xLDE4ICsxLDI5IEBACi17XHJ0ZjFcbWFjXGFuc2ljcGcxMDAwMFxjb2NvYXJ0ZjgyNFxjb2NvYXN1YnJ0ZjQxMAote1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDc3IEhlbHZldGljYTtcZjFcZnN3aXNzXGZjaGFyc2V0NzcgSGVsdmV0aWNhLUJvbGQ7fQore1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMDM4XGNvY29hc3VicnRmMzUwCit7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7fQoge1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQotXHBhcGVydzExOTAwXHBhcGVyaDE2ODQwXG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3c5OTIwXHZpZXdoMTA2NjBcdmlld2tpbmQwCitccGFwZXJ3MTE5MDRccGFwZXJoMTY4MzZcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzk2NDBcdmlld2gxMDYyMFx2aWV3a2luZDAKIFxwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccWxccW5hdHVyYWwKIAogXGYwXGZzMjQgXGNmMCBUaGlzIHBhY2thZ2Ugd2lsbCBpbnN0YWxsIAotXGYxXGIgTWFjUHl0aG9uICRGVUxMX1ZFUlNJT04KLVxmMFxiMCAgZm9yIAotXGYxXGIgTWFjIE9TIFggJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAotXGYwXGIwIC5cCitcYiBQeXRob24gJEZVTExfVkVSU0lPTgorXGIwICBmb3IgCitcYiBNYWMgT1MgWCAkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCitcYjAgLlwKIFwKLU1hY1B5dGhvbiBjb25zaXN0cyBvZiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIGludGVycHJldGVyLCBwbHVzIGEgc2V0IG9mIHByb2dyYW1zIHRvIGFsbG93IGVhc3kgYWNjZXNzIHRvIGl0IGZvciBNYWMgdXNlcnMgaW5jbHVkaW5nIGFuIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgXGIgSURMRVxiMCAgcGx1cyBhIHNldCBvZiBwcmUtYnVpbHQgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBvcGVuIHVwIHNwZWNpZmljIE1hY2ludG9zaCB0ZWNobm9sb2dpZXMgdG8gUHl0aG9uIHByb2dyYW1zLlwKKworXGIgUHl0aG9uIGZvciBNYWMgT1MgWAorXGIwICBjb25zaXN0cyBvZiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIGludGVycHJldGVyLCBwbHVzIGEgc2V0IG9mIHByb2dyYW1zIHRvIGFsbG93IGVhc3kgYWNjZXNzIHRvIGl0IGZvciBNYWMgT1MgWCB1c2VycyBpbmNsdWRpbmcgYW4gaW50ZWdyYXRlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCAKK1xiIElETEUKK1xiMCAgYW5kIGEgc2V0IG9mIHByZS1idWlsdCBleHRlbnNpb24gbW9kdWxlcyB0aGF0IG9wZW4gdXAgc3BlY2lmaWMgTWFjaW50b3NoIHRlY2hub2xvZ2llcyB0byBQeXRob24gcHJvZ3JhbXMuXAogXAotU2VlIHRoZSBSZWFkTWUgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cCitTZWUgdGhlIFJlYWRNZSBmaWxlIGFuZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXAogXAotXAotVGhpcyBwYWNrYWdlIHdpbGwgYnkgZGVmYXVsdCB1cGRhdGUgeW91ciBzaGVsbCBwcm9maWxlIHRvIGVuc3VyZSB0aGF0IHRoaXMgdmVyc2lvbiBvZiBQeXRob24gaXMgb24gdGhlIHNlYXJjaCBwYXRoIG9mIHlvdXIgc2hlbGwuIFBsZWFzZSBkZXNlbGVjdCB0aGUgIlNoZWxsIHByb2ZpbGUgdXBkYXRlciIgcGFja2FnZSBvbiB0aGUgcGFja2FnZSBjdXN0b21pemF0aW9uIHNjcmVlbiBpZiB5b3Ugd2FudCB0byBhdm9pZCB0aGlzIG1vZGlmaWNhdGlvbi4gIERvdWJsZS1jbGljayBcYiBVcGRhdGUgU2hlbGwgUHJvZmlsZVxiMCAgYXQgYW55IHRpbWUgdG8gbWFrZSAkRlVMTF9WRVJTSU9OIHRoZSBkZWZhdWx0IFB5dGhvbi59ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitcYiBJTVBPUlRBTlQ6CitcYjAgIAorXGIgSURMRQorXGIwICBhbmQgb3RoZXIgcHJvZ3JhbXMgdXNpbmcgdGhlIAorXGIgdGtpbnRlcgorXGIwICBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgdG9vbGtpdCByZXF1aXJlIHNwZWNpZmljIHZlcnNpb25zIG9mIHRoZSAKK1xiIFRjbC9UaworXGIwICBwbGF0Zm9ybSBpbmRlcGVuZGVudCB3aW5kb3dpbmcgdG9vbGtpdC4gIFZpc2l0IHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9tYWMvdGNsdGsvIn19e1xmbGRyc2x0IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9tYWMvdGNsdGsvfX0gZm9yIGN1cnJlbnQgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIGFuZCByZWNvbW1lbmRlZCB2ZXJzaW9ucyBvZiBUY2wvVGsgZm9yIHRoaXMgdmVyc2lvbiBvZiBQeXRob24gYW5kIE1hYyBPUyBYLn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmRvY3VtZW50YXRpb24gYi9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmRvY3VtZW50YXRpb24KaW5kZXggOWY1OTE4ZS4uMzFmYmYyZiAxMDA3NTUKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5kb2N1bWVudGF0aW9uCisrKyBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZG9jdW1lbnRhdGlvbgpAQCAtMSwxMSArMSwzMiBAQAogIyEvYmluL3NoCiAKIFBZVkVSPSJAUFlWRVJAIgorRldLPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJHtQWVZFUn0iCitGV0tfRE9DRElSX1NVQlBBVEg9IlJlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24iCitGV0tfRE9DRElSPSIke0ZXS30vJHtGV0tfRE9DRElSX1NVQlBBVEh9IgorQVBQRElSPSIvQXBwbGljYXRpb25zL1B5dGhvbiAke1BZVkVSfSIKK0RFVl9ET0NESVI9Ii9EZXZlbG9wZXIvRG9jdW1lbnRhdGlvbiIKK1NIQVJFX0RJUj0iJHtGV0t9L3NoYXJlIgorU0hBUkVfRE9DRElSPSIke1NIQVJFX0RJUn0vZG9jL3B5dGhvbiR7UFlWRVJ9IgorU0hBUkVfRE9DRElSX1RPX0ZXSz0iLi4vLi4vLi4iCiAKLWlmIFsgLWQgL0RldmVsb3Blci9Eb2N1bWVudGF0aW9uIF07IHRoZW4KLQlpZiBbICEgLWQgL0RldmVsb3Blci9Eb2N1bWVudGF0aW9uL1B5dGhvbiBdOyB0aGVuCi0JCW1rZGlyIC1wIC9EZXZlbG9wZXIvRG9jdW1lbnRhdGlvbi9QeXRob24KLQlmaQotCi0JbG4gLWZocyAvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJHtQWVZFUn0vUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbiAiL0RldmVsb3Blci9Eb2N1bWVudGF0aW9uL1B5dGhvbi9SZWZlcmVuY2UgRG9jdW1lbnRhdGlvbiBAUFlWRVJAIgorIyBtYWtlIGxpbmsgaW4gL0RldmVsb3Blci9Eb2N1bWVudGF0aW9uLyBmb3IgWGNvZGUgdXNlcnMKK2lmIFsgLWQgIiR7REVWX0RPQ0RJUn0iIF07IHRoZW4KKyAgICBpZiBbICEgLWQgIiR7REVWX0RPQ0RJUn0vUHl0aG9uIiBdOyB0aGVuCisgICAgICAgIG1rZGlyIC1wICIke0RFVl9ET0NESVJ9L1B5dGhvbiIKKyAgICBmaQorICAgIGxuIC1maHMgIiR7RldLX0RPQ0RJUn0iICIke0RFVl9ET0NESVJ9L1B5dGhvbi9SZWZlcmVuY2UgRG9jdW1lbnRhdGlvbiAke1BZVkVSfSIKIGZpCisKKyMgbWFrZSBsaW5rIGluIC9BcHBsaWNhdGlvbnMvUHl0aG9uIG0ubi8gZm9yIEZpbmRlciB1c2VycworaWYgWyAtZCAiJHtBUFBESVJ9IiBdOyB0aGVuCisgICAgbG4gLWZocyAiJHtGV0tfRE9DRElSfS9pbmRleC5odG1sIiAiJHtBUFBESVJ9L1B5dGhvbiBEb2N1bWVudGF0aW9uLmh0bWwiCitmaQorCisjIG1ha2Ugc2hhcmUvZG9jIGxpbmsgaW4gZnJhbWV3b3JrIGZvciBjb21tYW5kIGxpbmUgdXNlcnMKK2lmIFsgLWQgIiR7U0hBUkVfRElSfSIgXTsgdGhlbgorICAgIG1rZGlyIC1wICIke1NIQVJFX0RPQ0RJUn0iCisgICAgIyBtYWtlIHJlbGF0aXZlIGxpbmsgdG8gaHRtbCBkb2MgZGlyZWN0b3J5CisgICAgbG4gLWZocyAiJHtTSEFSRV9ET0NESVJfVE9fRldLfS8ke0ZXS19ET0NESVJfU1VCUEFUSH0iICIke1NIQVJFX0RPQ0RJUn0vaHRtbCIKK2ZpCisKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQucGF0Y2gtcHJvZmlsZSBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQucGF0Y2gtcHJvZmlsZQppbmRleCA1MDU5YmJjLi5hNjZiOGM3IDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LnBhdGNoLXByb2ZpbGUKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5wYXRjaC1wcm9maWxlCkBAIC0yMCw3ICsyMCw3IEBACiAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5ICR7UFlUSE9OX1JPT1R9L2JpbiBpcyBvbiB0aGUgdXNlcnMgUEFUSC4KIEJTSD0iYGJhc2VuYW1lICIke3RoZVNoZWxsfSJgIgogY2FzZSAiJHtCU0h9IiBpbgotYmFzaHxrc2h8c2h8KmNzaCkKK2Jhc2h8a3NofHNofCpjc2h8enNoKQogCWlmIFsgYGlkIC11cmAgPSAwIF07IHRoZW4KIAkJUD1gc3UgLSAke1VTRVJ9IC1jICdlY2hvIEEtWC00LVhAQCRQQVRIQEBYLTQtWC1BJyB8IGdyZXAgJ0EtWC00LVhAQC4qQEBYLTQtWC1BJyB8IHNlZCAtZSAncy9eQS1YLTQtWEBALy9nJyAtZSAncy9AQFgtNC1YLUEkLy9nJ2AKIAllbHNlCkBAIC01Nyw3ICs1Nyw3IEBACiAJCWNwIC1mcCAiJHtSQ30iICIke1JDfS5weXNhdmUiCiAJZmkKIAllY2hvICIiID4+ICIke1JDfSIKLQllY2hvICIjIFNldHRpbmcgUEFUSCBmb3IgTWFjUHl0aG9uICR7UFlWRVJ9IiA+PiAiJHtSQ30iCisJZWNobyAiIyBTZXR0aW5nIFBBVEggZm9yIFB5dGhvbiAke1BZVkVSfSIgPj4gIiR7UkN9IgogCWVjaG8gIiMgVGhlIG9yZ2luYWwgdmVyc2lvbiBpcyBzYXZlZCBpbiAuY3NocmMucHlzYXZlIiA+PiAiJHtSQ30iCiAJZWNobyAic2V0IHBhdGg9KCR7UFlUSE9OX1JPT1R9L2JpbiAiJyRwYXRoJyIpIiA+PiAiJHtSQ30iCiAJaWYgWyBgaWQgLXVyYCA9IDAgXTsgdGhlbgpAQCAtNzYsNiArNzYsOSBAQAogCQlQUj0iJHtIT01FfS8uYmFzaF9wcm9maWxlIgogCWZpCiAJOzsKK3pzaCkKKyAgICAgICAgUFI9IiR7SE9NRX0vLnpwcm9maWxlIgorICAgICAgICA7OwogKnNoKQogCVBSPSIke0hPTUV9Ly5wcm9maWxlIgogCTs7CkBAIC04Niw3ICs4OSw3IEBACiAJY3AgLWZwICIke1BSfSIgIiR7UFJ9LnB5c2F2ZSIKIGZpCiBlY2hvICIiID4+ICIke1BSfSIKLWVjaG8gIiMgU2V0dGluZyBQQVRIIGZvciBNYWNQeXRob24gJHtQWVZFUn0iID4+ICIke1BSfSIKK2VjaG8gIiMgU2V0dGluZyBQQVRIIGZvciBQeXRob24gJHtQWVZFUn0iID4+ICIke1BSfSIKIGVjaG8gIiMgVGhlIG9yZ2luYWwgdmVyc2lvbiBpcyBzYXZlZCBpbiBgYmFzZW5hbWUgJHtQUn1gLnB5c2F2ZSIgPj4gIiR7UFJ9IgogZWNobyAnUEFUSD0iJyIke1BZVEhPTl9ST09UfS9iaW4iJzoke1BBVEh9IicgPj4gIiR7UFJ9IgogZWNobyAnZXhwb3J0IFBBVEgnID4+ICIke1BSfSIKZGlmZiAtLWdpdCBhL01hYy9EZW1vL2h0bWwuaWNvbnMvbW9kdWxhdG9yLmdpZiBiL01hYy9EZW1vL2h0bWwuaWNvbnMvbW9kdWxhdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1ZTFmOS4uMDAwMDAwMAotLS0gYS9NYWMvRGVtby9odG1sLmljb25zL21vZHVsYXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9NYWMvSURMRS9JbmZvLnBsaXN0LmluIGIvTWFjL0lETEUvSW5mby5wbGlzdC5pbgppbmRleCA1OGU5MTNjLi5hNzExNjkwIDEwMDY0NAotLS0gYS9NYWMvSURMRS9JbmZvLnBsaXN0LmluCisrKyBiL01hYy9JRExFL0luZm8ucGxpc3QuaW4KQEAgLTM2LDcgKzM2LDcgQEAKIAk8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PgogCTxzdHJpbmc+SURMRTwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVHZXRJbmZvU3RyaW5nPC9rZXk+Ci0JPHN0cmluZz4lVkVSU0lPTiUsIMKpIDAwMS0yMDA2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9zdHJpbmc+CisJPHN0cmluZz4lVkVSU0lPTiUsIMKpIDIwMDEtMjAxMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVJY29uRmlsZTwva2V5PgogCTxzdHJpbmc+SURMRS5pY25zPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KQEAgLTUxLDUgKzUxLDE0IEBACiAJPHN0cmluZz4lVkVSU0lPTiU8L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgogCTxzdHJpbmc+JVZFUlNJT04lPC9zdHJpbmc+Cis8IS0tCisJPGtleT5MU01pbmltdW1TeXN0ZW1WZXJzaW9uQnlBcmNoaXRlY3R1cmU8L2tleT4KKwk8ZGljdD4KKwkgICAgPGtleT54ODZfNjQ8L2tleT4KKwkgICAgPHN0cmluZz4xMC42LjA8L3N0cmluZz4KKwkgICAgPGtleT5wcGM2NDwva2V5PgorCSAgICA8c3RyaW5nPjEwLjYuMDwvc3RyaW5nPgorCTwvZGljdD4KKy0tPgogPC9kaWN0PgogPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01hYy9JRExFL01ha2VmaWxlLmluIGIvTWFjL0lETEUvTWFrZWZpbGUuaW4KaW5kZXggNDk2YzEzOS4uNmFlMzYwYyAxMDA2NDQKLS0tIGEvTWFjL0lETEUvTWFrZWZpbGUuaW4KKysrIGIvTWFjL0lETEUvTWFrZWZpbGUuaW4KQEAgLTEwLDYgKzEwLDggQEAKIFVOSVZFUlNBTFNESz1AVU5JVkVSU0FMU0RLQAogYnVpbGRkaXI9CS4uLy4uCiBQWVRIT05GUkFNRVdPUks9QFBZVEhPTkZSQU1FV09SS0AKK0xJUE9fMzJCSVRfRkxBR1M9QExJUE9fMzJCSVRfRkxBR1NACisKIAogUlVOU0hBUkVEPSAgICAgIEBSVU5TSEFSRURACiBCVUlMREVYRT0gICAgICAgQEJVSUxERVhFRVhUQApAQCAtMjIsNyArMjQsNyBAQAogCiBCVU5ETEVCVUxERVI9JChzcmNkaXIpLy4uLy4uL0xpYi9wbGF0LW1hYy9idW5kbGVidWlsZGVyLnB5CiAKLVBZVEhPTkFQUFNESVI9L0FwcGxpY2F0aW9ucy8kKFBZVEhPTkZSQU1FV09SSykgJChWRVJTSU9OKQorUFlUSE9OQVBQU0RJUj1ARlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVhALyQoUFlUSE9ORlJBTUVXT1JLKSAkKFZFUlNJT04pCiAKIGFsbDogSURMRS5hcHAKIApAQCAtNTEsOSArNTMsMTIgQEAKIAkJLS1pY29uZmlsZT0kKHNyY2RpcikvLi4vSWNvbnMvSURMRS5pY25zIFwKIAkJLS1yZXNvdXJjZT0kKHNyY2RpcikvLi4vSWNvbnMvUHl0aG9uU291cmNlLmljbnMgXAogCQktLXJlc291cmNlPSQoc3JjZGlyKS8uLi9JY29ucy9QeXRob25Db21waWxlZC5pY25zIFwKLQkJLS1weXRob249JChwcmVmaXgpL1Jlc291cmNlcy9QeXRob24uYXBwL0NvbnRlbnRzL01hY09TLyQoUFlUSE9ORlJBTUVXT1JLKWB0ZXN0IC1mICIkKERFU1RESVIpJChwcmVmaXgpL1Jlc291cmNlcy9QeXRob24uYXBwL0NvbnRlbnRzL01hY09TLyQoUFlUSE9ORlJBTUVXT1JLKS0zMiIgJiYgZWNobyAiLTMyImAgIFwKKwkJLS1weXRob249JChwcmVmaXgpL1Jlc291cmNlcy9QeXRob24uYXBwL0NvbnRlbnRzL01hY09TL1B5dGhvbiBcCiAJCWJ1aWxkCi0KK2lmbmVxICgkKExJUE9fMzJCSVRfRkxBR1MpLCkKKwlybSAiSURMRS5hcHAvQ29udGVudHMvTWFjT1MvUHl0aG9uIgorCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICJJRExFLmFwcC9Db250ZW50cy9NYWNPUy9QeXRob24iICIkKEJVSUxEUFlUSE9OKSIKK2VuZGlmCiAKIEluZm8ucGxpc3Q6ICQoc3JjZGlyKS9JbmZvLnBsaXN0LmluCiAJc2VkICdzLyVWRVJTSU9OJS8nImAkKFJVTlNIQVJFRCkgJChCVUlMRFBZVEhPTikgLWMgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQgcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSdgIicvZycgPCAkKHNyY2RpcikvSW5mby5wbGlzdC5pbiA+IEluZm8ucGxpc3QKZGlmZiAtLWdpdCBhL01hYy9JRExFL2NvbmZpZy1leHRlbnNpb25zLmRlZiBiL01hYy9JRExFL2NvbmZpZy1leHRlbnNpb25zLmRlZgppbmRleCBjMTdmMDY4Li4xNzkxYjljIDEwMDY0NAotLS0gYS9NYWMvSURMRS9jb25maWctZXh0ZW5zaW9ucy5kZWYKKysrIGIvTWFjL0lETEUvY29uZmlnLWV4dGVuc2lvbnMuZGVmCkBAIC04NiwzICs4Niw4IEBACiBmZ2NvbG9yPUJsYWNrCiBbQ29kZUNvbnRleHRfYmluZGluZ3NdCiB0b2dnbGUtY29kZS1jb250ZXh0PQorCitbUnN0cmlwRXh0ZW5zaW9uXQorZW5hYmxlPTEKK2VuYWJsZV9zaGVsbD0wCitlbmFibGVfZWRpdG9yPTEKZGlmZiAtLWdpdCBhL01hYy9JRExFL2lkbGVtYWluLnB5IGIvTWFjL0lETEUvaWRsZW1haW4ucHkKaW5kZXggZDY4MDNiYS4uOGI4YmViOSAxMDA2NDQKLS0tIGEvTWFjL0lETEUvaWRsZW1haW4ucHkKKysrIGIvTWFjL0lETEUvaWRsZW1haW4ucHkKQEAgLTQ4LDcgKzQ4LDcgQEAKICMgdGhlIGludGVycHJldGVyIGluIHRoZSBmcmFtZXdvcmssIGJ5IGZvbGxvd2luZyB0aGUgc3ltbGluawogIyBleHBvcnRlZCBpbiBQWVRIT05FWEVDVVRBQkxFLgogcHlleCA9IG9zLmVudmlyb25bJ1BZVEhPTkVYRUNVVEFCTEUnXQotc3lzLmV4ZWN1dGFibGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHB5ZXgpLCBvcy5yZWFkbGluayhweWV4KSkKK3N5cy5leGVjdXRhYmxlID0gb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICdiaW4nLCAncHl0aG9uJWQuJWQnJShzeXMudmVyc2lvbl9pbmZvWzoyXSkpCiAKICMgUmVtb3ZlIGFueSBzeXMucGF0aCBlbnRyaWVzIGZvciB0aGUgUmVzb3VyY2VzIGRpciBpbiB0aGUgSURMRS5hcHAgYnVuZGxlLgogcCA9IHB5ZXgucGFydGl0aW9uKCcuYXBwJykKQEAgLTY4LDYgKzY4LDggQEAKICAgICAgICAgYnJlYWsKIAogIyBOb3cgaXQgaXMgc2FmZSB0byBpbXBvcnQgaWRsZWxpYi4KK2Zyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4U3VwcG9ydAorbWFjb3N4U3VwcG9ydC5fYXBwYnVuZGxlID0gVHJ1ZQogZnJvbSBpZGxlbGliLlB5U2hlbGwgaW1wb3J0IG1haW4KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9NYWMvTWFrZWZpbGUuaW4gYi9NYWMvTWFrZWZpbGUuaW4KaW5kZXggOTQ5ZTIyOS4uNWFiMGFlNSAxMDA2NDQKLS0tIGEvTWFjL01ha2VmaWxlLmluCisrKyBiL01hYy9NYWtlZmlsZS5pbgpAQCAtMTUsMTMgKzE1LDE0IEBACiBGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9QEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWEAKIFBZVEhPTkZSQU1FV09SSz1AUFlUSE9ORlJBTUVXT1JLQAogUFlUSE9ORlJBTUVXT1JLSURFTlRJRklFUj1AUFlUSE9ORlJBTUVXT1JLSURFTlRJRklFUkAKK0xJUE9fMzJCSVRfRkxBR1M9QExJUE9fMzJCSVRfRkxBR1NACitDQz1AQ0NACiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9QENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRACiBleHBvcnQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiAKLQogIyBUaGVzZSBhcmUgbm9ybWFsbHkgZ2xpbXBzZWQgZnJvbSB0aGUgcHJldmlvdXMgc2V0CiBiaW5kaXI9JChwcmVmaXgpL2JpbgotUFlUSE9OQVBQU0RJUj0vQXBwbGljYXRpb25zLyQoUFlUSE9ORlJBTUVXT1JLKSAkKFZFUlNJT04pCitQWVRIT05BUFBTRElSPUBGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWEAvJChQWVRIT05GUkFNRVdPUkspICQoVkVSU0lPTikKIEFQUElOU1RBTExESVI9JChwcmVmaXgpL1Jlc291cmNlcy9QeXRob24uYXBwCiAKICMgVmFyaWFibGVzIGZvciBpbnN0YWxsaW5nIHRoZSAibm9ybWFsIiB1bml4IGJpbmFyaWVzCkBAIC00MCwxOSArNDEsMTIgQEAKIENQTUFDPS9EZXZlbG9wZXIvVG9vbHMvQ3BNYWMKIAogQVBQVEVNUExBVEU9JChzcmNkaXIpL1Jlc291cmNlcy9hcHAKLUFQUFNVQkRJUlM9TWFjT1MgUmVzb3VyY2VzIFJlc291cmNlcy9FbmdsaXNoLmxwcm9qIFwKLQlSZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uIFwKLQlSZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2RvYyBcCi0JUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9pZGUKLURPQ0RJUj0kKHNyY2RpcikvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uCi1ET0NJTkRFWD0kKERPQ0RJUikvIkRvY3VtZW50YXRpb24gaWR4IgorQVBQU1VCRElSUz1NYWNPUyBSZXNvdXJjZXMgCiBDQUNIRVJTUkM9JChzcmNkaXIpL3NjcmlwdHMvY2FjaGVyc3JjLnB5CiBjb21waWxlYWxsPSQoc3JjZGlyKS8uLi9MaWIvY29tcGlsZWFsbC5weQogCi1pbnN0YWxsYXBwczogaW5zdGFsbF9QeXRob24gaW5zdGFsbF9CdWlsZEFwcGxldCBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIFwKLQlpbnN0YWxsX0lETEUgY2hlY2thcHBsZXB5dGhvbiBpbnN0YWxsX3B5dGhvbncgaW5zdGFsbF92ZXJzaW9uZWR0b29scwotCi1pbnN0YWxsYXBwczR3YXk6IGluc3RhbGxfUHl0aG9uNHdheSBpbnN0YWxsX0J1aWxkQXBwbGV0IGluc3RhbGxfUHl0aG9uTGF1bmNoZXIgaW5zdGFsbF9JRExFIGluc3RhbGxfcHl0aG9udzR3YXkgaW5zdGFsbF92ZXJzaW9uZWR0b29scworaW5zdGFsbGFwcHM6IGluc3RhbGxfUHl0aG9uIGluc3RhbGxfcHl0aG9udyBpbnN0YWxsX0J1aWxkQXBwbGV0IGluc3RhbGxfUHl0aG9uTGF1bmNoZXIgXAorCWluc3RhbGxfSURMRSBjaGVja2FwcGxlcHl0aG9uIGluc3RhbGxfdmVyc2lvbmVkdG9vbHMKIAogCiBpbnN0YWxsX3B5dGhvbnc6IHB5dGhvbncKQEAgLTYwLDMzICs1NCwxMyBAQAogCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udyAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uJChWRVJTSU9OKSIKIAlsbiAtc2YgcHl0aG9uJChWRVJTSU9OKSAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uIgogCWxuIC1zZiBweXRob253JChWRVJTSU9OKSAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyIKLQotCi0jIEluc3RhbGwgMyB2YXJpYW50cyBvZiBweXRob24vcHl0aG9udzogCi0jIAktIDMyLWJpdCAoaTM4NiBhbmQgcHBjKQotIyAJLSA2NC1iaXQgKHg4Nl82NCBhbmQgcHBjNjQpCi0jIAktIGFsbCAgICAoYWxsIGZvdXIgYXJjaGl0ZWN0dXJlcykKLSMgCS0gTWFrZSAncHl0aG9uJyBhbmQgJ3B5dGhvbncnIGFsaWFzZXMgZm9yIHRoZSAzMi1iaXQgdmFyaWFudAotaW5zdGFsbF9weXRob253NHdheTogcHl0aG9udy0zMiBweXRob253LTY0IHB5dGhvbncKLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbnctNjQgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pLTY0IgotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udy02NCAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uJChWRVJTSU9OKS02NCIKLQlsbiAtc2YgcHl0aG9uJChWRVJTSU9OKS02NCAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uLTY0IgotCWxuIC1zZiBweXRob253JChWRVJTSU9OKS02NCAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udy02NCIKLQotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udy0zMiAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyQoVkVSU0lPTiktMzIiCi0JJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253LTMyICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pLTMyIgoraWZuZXEgKCQoTElQT18zMkJJVF9GTEFHUyksKQorCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTiktMzIgcHl0aG9udworCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pLTMyIHB5dGhvbncKIAlsbiAtc2YgcHl0aG9uJChWRVJTSU9OKS0zMiAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uLTMyIgogCWxuIC1zZiBweXRob253JChWRVJTSU9OKS0zMiAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udy0zMiIKK2VuZGlmCiAKLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbncgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pLWFsbCIKLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbncgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTiktYWxsIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pLWFsbCAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uLWFsbCIKLQlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTiktYWxsICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253LWFsbCIKLQotCWxuIC1zZiBweXRob253JChWRVJTSU9OKS0zMgkiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyQoVkVSU0lPTikiCi0JbG4gLXNmIHB5dGhvbiQoVkVSU0lPTiktMzIJIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTikiCi0JbG4gLXNmIHB5dGhvbnckKFZFUlNJT04pLTMyCSIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253IgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pLTMyCSIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24iCiAKICMKICMgSW5zdGFsbCB1bml4IHRvb2xzIGluIC91c3IvbG9jYWwvYmluLiBUaGVzZSBhcmUganVzdCBhbGlhc2VzIGZvciB0aGUgCkBAIC05NiwxOCArNzAsMTUgQEAKIAlpZiBbICEgLWQgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiBdOyB0aGVuICBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gJChESVJNT0RFKSAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIDtcCiAJZmkKLQlmb3IgZm4gaW4gcHl0aG9uIHB5dGhvbncgaWRsZSBweWRvYyBweXRob24tY29uZmlnIHNtdHBkLnB5ICAgXAorCWZvciBmbiBpbiBweXRob24gcHl0aG9udyBpZGxlIHB5ZG9jIHB5dGhvbi1jb25maWcgc210cGQucHkgMnRvMyBcCiAJCSAgcHl0aG9uJChWRVJTSU9OKSBweXRob253JChWRVJTSU9OKSBpZGxlJChWRVJTSU9OKSBcCi0JCSAgcHlkb2MkKFZFUlNJT04pIHB5dGhvbiQoVkVSU0lPTiktY29uZmlnIHNtdHBkJChWRVJTSU9OKS5weSA7XAorCQkgIHB5ZG9jJChWRVJTSU9OKSBweXRob24kKFZFUlNJT04pLWNvbmZpZyBzbXRwZCQoVkVSU0lPTikucHkgXAorCQkgIDJ0bzMtJChWRVJTSU9OKSA7XAogCWRvIFwKIAkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKIAlkb25lCiAKIAotIyBUT0RPOiBpbnN0YWxsIHN5bWxpbmtzIGZvciAtMzIsIC02NCBhbmQgLWFsbCBhcyB3ZWxsCi1pbnN0YWxsdW5peHRvb2xzNHdheTogaW5zdGFsbHVuaXh0b29scwotCi0KICMKICMgTGlrZSBpbnN0YWxsdW5peHRvb2xzLCBidXQgb25seSBpbnN0YWxsIGxpbmtzIHRvIHRoZSB2ZXJzaW9uZWQgYmluYXJpZXMuCiAjCkBAIC0xMjAsOSArOTEsNyBAQAogCWRvIFwKIAkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKIAlkb25lCi0KLSMgVE9ETzogLTMyLCAtNjQgYW5kIC1hbGwgdmFyaWFudHMKLWFsdGluc3RhbGx1bml4dG9vbHM0d2F5OiBhbHRpbnN0YWxsdW5peHRvb2xzCisJbG4gLWZzICIkKHByZWZpeCkvYmluLzJ0bzMtJChWRVJTSU9OKSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLzJ0bzMtJChWRVJTSU9OKSIgO1wKIAogIyBCeSBkZWZhdWx0IG1vc3QgdG9vbHMgYXJlIGluc3RhbGxlZCB3aXRob3V0IGEgdmVyc2lvbiBpbiB0aGVpciBiYXNlbmFtZSwgdG8KICMgbWFrZSBpdCBlYXNpZXIgdG8gaW5zdGFsbCAoYW5kIHVzZSkgc2V2ZXJhbCBweXRob24gdmVyc2lvbnMgc2lkZS1ieS1zaWRlIG1vdmUKQEAgLTE0NSwyOSArMTE0LDE5IEBACiAJCW12ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9zbXRwZC5weSIgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3NtdHBkJChWRVJTSU9OKS5weSIgIDtcCiAJCWxuIC1zZiAic210cGQkKFZFUlNJT04pLnB5IiAiJChERVNURElSKSQocHJlZml4KS9iaW4vc210cGQucHkiIDtcCiAJZmkKKwlpZiBbICEgLWggIiQoREVTVERJUikkKHByZWZpeCkvYmluLzJ0bzMiIF07IHRoZW4gXAorCQltdiAiJChERVNURElSKSQocHJlZml4KS9iaW4vMnRvMyIgIiQoREVTVERJUikkKHByZWZpeCkvYmluLzJ0bzMtJChWRVJTSU9OKSIgIDtcCisJCWxuIC1zZiAiMnRvMy0kKFZFUlNJT04pIiAiJChERVNURElSKSQocHJlZml4KS9iaW4vMnRvMyIgO1wKKwlmaQogCiAKIHB5dGhvbnc6ICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgTWFrZWZpbGUKLQkkKENDKSAkKExERkxBR1MpIC1vICRAICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgXAotCQktRFBZVEhPTldFWEVDVVRBQkxFPSciJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSykiJwotCi1weXRob253LTMyOiAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIE1ha2VmaWxlCi0JJChDQykgJChMREZMQUdTKSAtbyBweXRob253LXRtcC5vICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgXAotCQktRFBZVEhPTldFWEVDVVRBQkxFPSciJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSyktMzIiJyA7XAotCWxpcG8gIEBMSVBPXzMyQklUX0ZMQUdTQCAtb3V0cHV0ICRAICBweXRob253LXRtcC5vIDsgcm0gcHl0aG9udy10bXAubwotCi1weXRob253LTY0OiAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIE1ha2VmaWxlCi0JJChDQykgJChMREZMQUdTKSAtbyBweXRob253LXRtcC5vICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgXAotCQktRFBZVEhPTldFWEVDVVRBQkxFPSciJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSyktNjQiJyA7XAotCWxpcG8gIEBMSVBPXzY0QklUX0ZMQUdTQCAtb3V0cHV0ICRAICBweXRob253LXRtcC5vIDsgcm0gcHl0aG9udy10bXAubworCSQoQ0MpICQoTERGTEFHUykgLURQWVRIT05GUkFNRVdPUks9JyIkKFBZVEhPTkZSQU1FV09SSykiJyAtbyAkQCAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIC1JLi4gLUkkKHNyY2RpcikvLi4vSW5jbHVkZSAuLi8kKFBZVEhPTkZSQU1FV09SSykuZnJhbWV3b3JrL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspCiAKIGluc3RhbGxfUHl0aG9uTGF1bmNoZXI6CiAJY2QgUHl0aG9uTGF1bmNoZXIgJiYgbWFrZSBpbnN0YWxsIERFU1RESVI9JChERVNURElSKQogCiBpbnN0YWxsX1B5dGhvbjoKLQlAaWYgdGVzdCAhIC1mICQoRE9DSU5ERVgpOyB0aGVuIFwKLQkJZWNobyBXQVJOSU5HOiB5b3Ugc2hvdWxkIHJ1biBBcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wgb24gJChET0NESVIpOyBcCi0JZmkKIAlAZm9yIGkgaW4gIiQoUFlUSE9OQVBQU0RJUikiICIkKEFQUElOU1RBTExESVIpIiAiJChBUFBJTlNUQUxMRElSKS9Db250ZW50cyI7IGRvIFwKIAkJaWYgdGVzdCAhIC1kICIkKERFU1RESVIpJCRpIjsgdGhlbiBcCiAJCQllY2hvICJDcmVhdGluZyBkaXJlY3RvcnkgJChERVNURElSKSQkaSI7IFwKQEAgLTIxOCwxMSArMTc3LDYgQEAKIAkJPiAiJChERVNURElSKSQoQVBQSU5TVEFMTERJUikvQ29udGVudHMvSW5mby5wbGlzdCIKIAlybSAiJChERVNURElSKSQoQVBQSU5TVEFMTERJUikvQ29udGVudHMvSW5mby5wbGlzdC5pbiIKIAotaW5zdGFsbF9QeXRob240d2F5OiBpbnN0YWxsX1B5dGhvbgotCWxpcG8gIEBMSVBPXzMyQklUX0ZMQUdTQCAtb3V0cHV0ICIkKERFU1RESVIpJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSyktMzIiICIkKERFU1RESVIpJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSykiCi0JbGlwbyAgQExJUE9fNjRCSVRfRkxBR1NAIC1vdXRwdXQgIiQoREVTVERJUikkKEFQUElOU1RBTExESVIpL0NvbnRlbnRzL01hY09TLyQoUFlUSE9ORlJBTUVXT1JLKS02NCIgIiQoREVTVERJUikkKEFQUElOU1RBTExESVIpL0NvbnRlbnRzL01hY09TLyQoUFlUSE9ORlJBTUVXT1JLKSIKLQotCiAKIGluc3RhbGxfSURMRToKIAljZCBJRExFICYmIG1ha2UgaW5zdGFsbApAQCAtMjMwLDkgKzE4NCwxMyBAQAogaW5zdGFsbF9CdWlsZEFwcGxldDoKIAkkKFJVTlNIQVJFRCkgQEFSQ0hfUlVOXzMyQklUQCAkKEJVSUxEUFlUSE9OKSAkKHNyY2Rpcikvc2NyaXB0cy9CdWlsZEFwcGxldC5weSBcCiAJCS0tZGVzdHJvb3QgIiQoREVTVERJUikiIFwKLQkJLS1weXRob249JChwcmVmaXgpL1Jlc291cmNlcy9QeXRob24uYXBwL0NvbnRlbnRzL01hY09TLyQoUFlUSE9ORlJBTUVXT1JLKWB0ZXN0IC1mICIkKERFU1RESVIpJChwcmVmaXgpL1Jlc291cmNlcy9QeXRob24uYXBwL0NvbnRlbnRzL01hY09TLyQoUFlUSE9ORlJBTUVXT1JLKS0zMiIgJiYgZWNobyAiLTMyImAgIFwKKwkJLS1weXRob249JChwcmVmaXgpL1Jlc291cmNlcy9QeXRob24uYXBwL0NvbnRlbnRzL01hY09TL1B5dGhvbiBcCiAJCS0tb3V0cHV0ICIkKERFU1RESVIpJChQWVRIT05BUFBTRElSKS9CdWlsZCBBcHBsZXQuYXBwIiBcCiAJCSQoc3JjZGlyKS9zY3JpcHRzL0J1aWxkQXBwbGV0LnB5CitpZm5lcSAoJChMSVBPXzMyQklUX0ZMQUdTKSwpCisJcm0gIiQoREVTVERJUikkKFBZVEhPTkFQUFNESVIpL0J1aWxkIEFwcGxldC5hcHAvQ29udGVudHMvTWFjT1MvUHl0aG9uIgorCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICIkKERFU1RESVIpJChQWVRIT05BUFBTRElSKS9CdWlsZCBBcHBsZXQuYXBwL0NvbnRlbnRzL01hY09TL1B5dGhvbiIgJChCVUlMRFBZVEhPTikKK2VuZGlmICAgCiAKIE1BQ0xJQkRFU1Q9JChMSUJERVNUKS9wbGF0LW1hYwogTUFDVE9PTFNERVNUPSQocHJlZml4KS9NYWMvVG9vbHMKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL0NvbG9yUGlja2VybW9kdWxlLmMgYi9NYWMvTW9kdWxlcy9Db2xvclBpY2tlcm1vZHVsZS5jCmluZGV4IDgyNGQ0ZDMuLjY4OGM0NjggMTAwNjQ0Ci0tLSBhL01hYy9Nb2R1bGVzL0NvbG9yUGlja2VybW9kdWxlLmMKKysrIGIvTWFjL01vZHVsZXMvQ29sb3JQaWNrZXJtb2R1bGUuYwpAQCAtNzEsNyArNzEsNyBAQAogewogICAgIFB5T2JqZWN0ICptOwogCi0gICAgaWYgKFB5RXJyX1dhcm5QeTNrKCJJbiAzLngsIENvbG9yUGlja2VyIGlzIHJlbW92ZWQuIiwgMSkgPCAwKQorICAgIGlmIChQeUVycl9XYXJuUHkzaygiSW4gMy54LCB0aGUgQ29sb3JQaWNrZXIgbW9kdWxlIGlzIHJlbW92ZWQuIiwgMSkgPCAwKQogICAgICAgICByZXR1cm47CiAKICAgICAvKiBDcmVhdGUgdGhlIG1vZHVsZSBhbmQgYWRkIHRoZSBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL01hY09TLmMgYi9NYWMvTW9kdWxlcy9NYWNPUy5jCmluZGV4IDc5YjI3NjQuLjI4ZGU0ZjUgMTAwNjQ0Ci0tLSBhL01hYy9Nb2R1bGVzL01hY09TLmMKKysrIGIvTWFjL01vZHVsZXMvTWFjT1MuYwpAQCAtMzAsNiArMzAsOSBAQAogI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KIAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPiAgLyogZm9yIG50b2hsLCBodG9ubCAqLworCisKICNpZm5kZWYgSEFWRV9PU1gxMDVfU0RLCiB0eXBlZGVmIFNJbnQxNiAgRlNJT1JlZk51bTsKICNlbmRpZgpAQCAtMzEwLDYgKzMxMywxMCBAQAogICAgICAgICBpZiAoKGVyciA9IEZTcEdldEZJbmZvKCZmc3MsICZpbmZvKSkgIT0gbm9FcnIpIHsKICAgICAgICAgICAgIHJldHVybiBQeUVycl9NYWMoTWFjT1NfRXJyb3IsIGVycik7CiAgICAgICAgIH0KKworICAgICAgICBpbmZvLmZkQ3JlYXRvciA9IG50b2hsKGluZm8uZmRDcmVhdG9yKTsKKyAgICAgICAgaW5mby5mZFR5cGUgPSBudG9obChpbmZvLmZkVHlwZSk7CisKICAgICAgICAgY3JlYXRvciA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmaW5mby5mZENyZWF0b3IsIDQpOwogICAgICAgICB0eXBlID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKikmaW5mby5mZFR5cGUsIDQpOwpAQCAtMzQxLDYgKzM0OCw4IEBACiAKICAgICB9CiAgICAgZmluZm8gPSAoRmlsZUluZm8qKSYoY2F0YWxvZ2luZm8uZmluZGVySW5mbyk7CisgICAgZmluZm8tPmZpbGVDcmVhdG9yID0gbnRvaGwoZmluZm8tPmZpbGVDcmVhdG9yKTsKKyAgICBmaW5mby0+ZmlsZVR5cGUgPSBudG9obChmaW5mby0+ZmlsZVR5cGUpOwogICAgIGNyZWF0b3IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciopJihmaW5mby0+ZmlsZUNyZWF0b3IpLCA0KTsKICAgICB0eXBlID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIqKSYoZmluZm8tPmZpbGVUeXBlKSwgNCk7CiAKQEAgLTY4Niw3ICs2OTUsNyBAQAogewogICAgIFB5T2JqZWN0ICptLCAqZDsKIAotICAgIGlmIChQeUVycl9XYXJuUHkzaygiSW4gMy54LCBNYWNPUyBpcyByZW1vdmVkLiIsIDEpKQorICAgIGlmIChQeUVycl9XYXJuUHkzaygiSW4gMy54LCB0aGUgTWFjT1MgbW9kdWxlIGlzIHJlbW92ZWQuIiwgMSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG0gPSBQeV9Jbml0TW9kdWxlKCJNYWNPUyIsIE1hY09TX01ldGhvZHMpOwpkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvTmF2LmMgYi9NYWMvTW9kdWxlcy9OYXYuYwppbmRleCBiZDE1M2NmLi5kMmFhN2RiIDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9OYXYuYworKysgYi9NYWMvTW9kdWxlcy9OYXYuYwpAQCAtOTMwLDE2ICs5MzAsMTUgQEAKIHZvaWQKIGluaXROYXYodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQ7Ci0KLSAgICBpZiAoUHlFcnJfV2FyblB5M2soIkluIDMueCwgTmF2IGlzIHJlbW92ZWQuIiwgMSkpCi0gICAgICAgIHJldHVybjsKLQogI2lmZGVmIF9fTFA2NF9fCiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLCAiTmF2aWdhdGlvbiBTZXJ2aWNlcyBub3QgYXZhaWxhYmxlIGluIDY0LWJpdCBtb2RlIik7CiAgICAgcmV0dXJuOwogCiAjZWxzZSAgIC8qICFfX0xQNjRfXyAqLworICAgIFB5T2JqZWN0ICptLCAqZDsKKworICAgIGlmIChQeUVycl9XYXJuUHkzaygiSW4gMy54LCB0aGUgTmF2IG1vZHVsZSBpcyByZW1vdmVkLiIsIDEpKQorICAgICAgICByZXR1cm47CiAKICAgICAvKiBUZXN0IHRoYXQgd2UgaGF2ZSBOYXZTZXJ2aWNlcyAqLwogICAgIGlmICggIU5hdlNlcnZpY2VzQXZhaWxhYmxlKCkgKSB7CmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9PU0FUZXJtaW5vbG9neS5jIGIvTWFjL01vZHVsZXMvT1NBVGVybWlub2xvZ3kuYwppbmRleCAwYjc2YjNlLi4yMTE0ZDA3IDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9PU0FUZXJtaW5vbG9neS5jCisrKyBiL01hYy9Nb2R1bGVzL09TQVRlcm1pbm9sb2d5LmMKQEAgLTEsMTAgKzEsMTMgQEAKIC8qCi0qKiBUaGlzIG1vZHVsZSBpcyBhIG9uZS10cmljayBwb255OiBnaXZlbiBhbiBGU1NwZWMgaXQgZ2V0cyB0aGUgYWV1dAotKiogcmVzb3VyY2VzLiBJdCB3YXMgd3JpdHRlbiBieSBEb25vdmFuIFByZXN0b24gYW5kIHNsaWdodGx5IG1vZGlmaWVkCi0qKiBieSBKYWNrLgorKiogQW4gaW50ZXJmYWNlIHRvIHRoZSBhcHBsaWNhdGlvbiBzY3JpcHRpbmcgcmVsYXRlZCBmdW5jdGlvbnMgb2YgdGhlIE9TQSBBUEkuCiAqKgotKiogSXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBwbGFjZWhvbGRlciwgaXQgd2lsbCBwcm9iYWJseSBiZSByZXBsYWNlZAotKiogYnkgYSBmdWxsIGludGVyZmFjZSB0byBPcGVuU2NyaXB0aW5nLgorKiogR2V0QXBwVGVybWlub2xvZ3kgLSBnaXZlbiBhbiBGU1NwZWMvcG9zaXggcGF0aCB0byBhbiBhcHBsaWNhdGlvbiwKKyoqICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybnMgaXRzIGFldnQgKHNjcmlwdGluZyB0ZXJtaW5vbG9neSkgcmVzb3VyY2UocykKKyoqCisqKiBHZXRTeXNUZXJtaW5vbG9neSAtIHJldHVybnMgdGhlIEFwcGxlU2NyaXB0IGxhbmd1YWdlIGNvbXBvbmVudCdzCisqKiAgICAgICAgICAgICAgICAgICAgICAgICBhZXV0IChzY3JpcHRpbmcgdGVybWlub2xvZ3kpIHJlc291cmNlCisqKgorKiogV3JpdHRlbiBieSBEb25vdmFuIFByZXN0b24gYW5kIHNsaWdodGx5IG1vZGlmaWVkIGJ5IEphY2sgYW5kIEhBUy4KICovCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAicHltYWN0b29sYm94LmgiCkBAIC0yNiwxMiArMjksMTkgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mfGkiLCBQeU1hY19HZXRGU1NwZWMsICZmc3MsICZtb2RlRmxhZ3MpKQogICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgLyoKKyAgICAqKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byB1c2UgdGhlIEFwcGxlU2NyaXB0IGNvbXBvbmVudCBoZXJlLiBXaG8ga25vd3Mgd2h5CisgICAgKiogT1NBR2V0QXBwVGVybWlub2xvZ3kgc2hvdWxkIHJlcXVpcmUgYSBzY3JpcHRpbmcgY29tcG9uZW50IGluIHRoZQorICAgICoqIGZpcnN0IHBsYWNlLCBidXQgaXQgZG9lcy4gTm90ZTogZG9lc24ndCB3b3JrIHdpdGggdGhlIGdlbmVyaWMgc2NyaXB0aW5nCisgICAgKiogY29tcG9uZW50LCB3aGljaCBpcyB1bmZvcnR1bmF0ZSBhcyB0aGUgQVMgY29tcG9uZW50IGlzIGN1cnJlbnRseSB2ZXJ5CisgICAgKiogc2xvdyAofjEgc2VjPykgdG8gbG9hZCwgYnV0IHdlIGp1c3QgaGF2ZSB0byBsaXZlIHdpdGggdGhpcy4KKyAgICAqLwogICAgIGRlZmF1bHRDb21wb25lbnQgPSBPcGVuRGVmYXVsdENvbXBvbmVudCAoa09TQUNvbXBvbmVudFR5cGUsICdhc2NyJyk7CiAgICAgZXJyID0gR2V0Q29tcG9uZW50SW5zdGFuY2VFcnJvciAoZGVmYXVsdENvbXBvbmVudCk7CiAgICAgaWYgKGVycikgcmV0dXJuIFB5TWFjX0Vycm9yKGVycik7CiAgICAgZXJyID0gT1NBR2V0QXBwVGVybWlub2xvZ3kgKAogICAgIGRlZmF1bHRDb21wb25lbnQsCi0gICAgbW9kZUZsYWdzLAorICAgIGtPU0FNb2RlTnVsbCwKICAgICAmZnNzLAogICAgIGRlZmF1bHRUZXJtaW5vbG9neSwKICAgICAmZGlkTGF1bmNoLApAQCAtNDUsMjkgKzU1LDIzIEBACiBQeU9TQV9HZXRTeXNUZXJtaW5vbG9neShQeU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgQUVEZXNjIHRoZURlc2MgPSB7MCwwfTsKLSAgICBGU1NwZWMgZnNzOwogICAgIENvbXBvbmVudEluc3RhbmNlIGRlZmF1bHRDb21wb25lbnQgPSBOVUxMOwogICAgIFNJbnQxNiBkZWZhdWx0VGVybWlub2xvZ3kgPSAwOwotICAgIEJvb2xlYW4gZGlkTGF1bmNoID0gMDsKICAgICBPU0FFcnJvciBlcnI7Ci0gICAgbG9uZyBtb2RlRmxhZ3MgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJnxpIiwgUHlNYWNfR2V0RlNTcGVjLCAmZnNzLCAmbW9kZUZsYWdzKSkKLSAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBBY2NlcHQgYW55IGFyZ3MgZm9yIHNha2Ugb2YgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZW4gaWdub3JlIHRoZW0uICovCiAKICAgICBkZWZhdWx0Q29tcG9uZW50ID0gT3BlbkRlZmF1bHRDb21wb25lbnQgKGtPU0FDb21wb25lbnRUeXBlLCAnYXNjcicpOwogICAgIGVyciA9IEdldENvbXBvbmVudEluc3RhbmNlRXJyb3IgKGRlZmF1bHRDb21wb25lbnQpOwogICAgIGlmIChlcnIpIHJldHVybiBQeU1hY19FcnJvcihlcnIpOwotICAgIGVyciA9IE9TQUdldEFwcFRlcm1pbm9sb2d5ICgKKyAgICBlcnIgPSBPU0FHZXRTeXNUZXJtaW5vbG9neSAoCiAgICAgZGVmYXVsdENvbXBvbmVudCwKLSAgICBtb2RlRmxhZ3MsCi0gICAgJmZzcywKKyAgICBrT1NBTW9kZU51bGwsCiAgICAgZGVmYXVsdFRlcm1pbm9sb2d5LAotICAgICZkaWRMYXVuY2gsCiAgICAgJnRoZURlc2MKICAgICApOwogICAgIGlmIChlcnIpIHJldHVybiBQeU1hY19FcnJvcihlcnIpOwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPJmkiLCBBRURlc2NfTmV3LCAmdGhlRGVzYywgZGlkTGF1bmNoKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyYiLCBBRURlc2NfTmV3LCAmdGhlRGVzYyk7CiB9CiAjZW5kaWYgLyogIV9fTFA2NF9fICovCiAKQEAgLTgwLDExICs4NCwxMSBAQAogICAgIHsiR2V0QXBwVGVybWlub2xvZ3kiLAogICAgICAgICAoUHlDRnVuY3Rpb24pIFB5T1NBX0dldEFwcFRlcm1pbm9sb2d5LAogICAgICAgICBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICJHZXQgYW4gYXBwbGljYXRpb25zIHRlcm1pbm9sb2d5LCBhcyBhbiBBRURlc2Mgb2JqZWN0LiJ9LAorICAgICAgICAiR2V0IGFuIGFwcGxpY2F0aW9uJ3MgdGVybWlub2xvZ3kuIEdldEFwcFRlcm1pbm9sb2d5KHBhdGgpIC0tPiBBRURlc2MifSwKICAgICB7IkdldFN5c1Rlcm1pbm9sb2d5IiwKICAgICAgICAgKFB5Q0Z1bmN0aW9uKSBQeU9TQV9HZXRTeXNUZXJtaW5vbG9neSwKICAgICAgICAgTUVUSF9WQVJBUkdTLAotICAgICAgICAiR2V0IGFuIGFwcGxpY2F0aW9ucyBzeXN0ZW0gdGVybWlub2xvZ3ksIGFzIGFuIEFFRGVzYyBvYmplY3QuIn0sCisgICAgICAgICJHZXQgdGhlIEFwcGxlU2NyaXB0IGxhbmd1YWdlJ3MgdGVybWlub2xvZ3kuIEdldFN5c1Rlcm1pbm9sb2d5KCkgLS0+IEFFRGVzYyJ9LAogI2VuZGlmIC8qICFfX0xQNjRfXyAqLwogICAgIHtOVUxMLCAoUHlDRnVuY3Rpb24pIE5VTEwsIDAsIE5VTEx9CiB9OwpAQCAtOTIsNyArOTYsNyBAQAogdm9pZAogaW5pdE9TQVRlcm1pbm9sb2d5KHZvaWQpCiB7Ci0gICAgaWYgKFB5RXJyX1dhcm5QeTNrKCJJbiAzLngsIE9TQVRlcm1pbm9sb2d5IGlzIHJlbW92ZWQuIiwgMSkgPCAwKQorICAgIGlmIChQeUVycl9XYXJuUHkzaygiSW4gMy54LCB0aGUgT1NBVGVybWlub2xvZ3kgbW9kdWxlIGlzIHJlbW92ZWQuIiwgMSkgPCAwKQogICAgICAgICByZXR1cm47CiAgICAgUHlfSW5pdE1vZHVsZSgiT1NBVGVybWlub2xvZ3kiLCBPU0FUZXJtaW5vbG9neV9tZXRob2RzKTsKIH0KZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL2NhcmJvbmV2dC9fQ2FyYm9uRXZ0bW9kdWxlLmMgYi9NYWMvTW9kdWxlcy9jYXJib25ldnQvX0NhcmJvbkV2dG1vZHVsZS5jCmluZGV4IDQ5ZTk0OGEuLjYyM2EzZTUgMTAwNzU1Ci0tLSBhL01hYy9Nb2R1bGVzL2NhcmJvbmV2dC9fQ2FyYm9uRXZ0bW9kdWxlLmMKKysrIGIvTWFjL01vZHVsZXMvY2FyYm9uZXZ0L19DYXJib25FdnRtb2R1bGUuYwpAQCAtMjcsMTIgKzI3LDYgQEAKIFB5T2JqZWN0ICpFdmVudFJlZl9OZXcoRXZlbnRSZWYgaXRzZWxmKTsKIAogLyoqKioqKioqKiogRXZlbnRUeXBlU3BlYyAqKioqKioqLwotc3RhdGljIFB5T2JqZWN0KgotRXZlbnRUeXBlU3BlY19OZXcoRXZlbnRUeXBlU3BlYyAqaW4pCi17Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgaW4tPmV2ZW50Q2xhc3MsIGluLT5ldmVudEtpbmQpOwotfQotCiBzdGF0aWMgaW50CiBFdmVudFR5cGVTcGVjX0NvbnZlcnQoUHlPYmplY3QgKnYsIEV2ZW50VHlwZVNwZWMgKm91dCkKIHsKQEAgLTY3LDEyICs2MSw2IEBACiAKIC8qKioqKioqKioqIEV2ZW50SG90S2V5SUQgKioqKioqKi8KIAotc3RhdGljIFB5T2JqZWN0KgotRXZlbnRIb3RLZXlJRF9OZXcoRXZlbnRIb3RLZXlJRCAqaW4pCi17Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgaW4tPnNpZ25hdHVyZSwgaW4tPmlkKTsKLX0KLQogc3RhdGljIGludAogRXZlbnRIb3RLZXlJRF9Db252ZXJ0KFB5T2JqZWN0ICp2LCBFdmVudEhvdEtleUlEICpvdXQpCiB7CmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9jZy9jZ3NjYW4ucHkgYi9NYWMvTW9kdWxlcy9jZy9jZ3NjYW4ucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvY2cvY2dzdXBwb3J0LnB5IGIvTWFjL01vZHVsZXMvY2cvY2dzdXBwb3J0LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL2N0bC9fQ3RsbW9kdWxlLmMgYi9NYWMvTW9kdWxlcy9jdGwvX0N0bG1vZHVsZS5jCmluZGV4IDIyZTBiZDUuLmE5NTllYjQgMTAwNjQ0Ci0tLSBhL01hYy9Nb2R1bGVzL2N0bC9fQ3RsbW9kdWxlLmMKKysrIGIvTWFjL01vZHVsZXMvY3RsL19DdGxtb2R1bGUuYwpAQCAtMTU5OCw3ICsxNTk4LDcgQEAKIHsKICAgICBQeU9iamVjdCAqX3JlcyA9IE5VTEw7CiAgICAgT1NFcnIgX2VycjsKLSAgICBTSW50MTYgb3V0VmFsdWU7CisgICAgVUludDE2IG91dFZhbHVlOwogI2lmbmRlZiBHZXRCZXZlbEJ1dHRvbk1lbnVWYWx1ZQogICAgIFB5TWFjX1BSRUNIRUNLKEdldEJldmVsQnV0dG9uTWVudVZhbHVlKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvaWNnbHVlbW9kdWxlLmMgYi9NYWMvTW9kdWxlcy9pY2dsdWVtb2R1bGUuYwppbmRleCBjNGQ1MDQ1Li40ZDE3YmY3IDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9pY2dsdWVtb2R1bGUuYworKysgYi9NYWMvTW9kdWxlcy9pY2dsdWVtb2R1bGUuYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiB7CiAgICAgUHlPYmplY3QgKm0sICpkOwogCi0gICAgaWYgKFB5RXJyX1dhcm5QeTNrKCJJbiAzLngsIGljZ2x1ZSBpcyByZW1vdmVkLiIsIDEpKQorICAgIGlmIChQeUVycl9XYXJuUHkzaygiSW4gMy54LCB0aGUgaWNnbHVlIG1vZHVsZSBpcyByZW1vdmVkLiIsIDEpKQogICAgICAgICByZXR1cm47CiAKICAgICAvKiBDcmVhdGUgdGhlIG1vZHVsZSBhbmQgYWRkIHRoZSBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL3F0L3NldHVwLnB5IGIvTWFjL01vZHVsZXMvcXQvc2V0dXAucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvc25kL19TbmRtb2R1bGUuYyBiL01hYy9Nb2R1bGVzL3NuZC9fU25kbW9kdWxlLmMKaW5kZXggMzVjZDQwMC4uZDcxM2VmZSAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvc25kL19TbmRtb2R1bGUuYworKysgYi9NYWMvTW9kdWxlcy9zbmQvX1NuZG1vZHVsZS5jCkBAIC0xMTUwLDcgKzExNTAsOSBAQAogICAgIFNQQl9UeXBlLm9iX3R5cGUgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU1BCX1R5cGUpIDwgMCkgcmV0dXJuOwogICAgIFB5X0lOQ1JFRigmU1BCX1R5cGUpOworI2lmIDAKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNQQiIsIChQeU9iamVjdCAqKSZTUEJfVHlwZSk7CisjZW5kaWYKICAgICAvKiBCYWNrd2FyZC1jb21wYXRpYmxlIG5hbWUgKi8KICAgICBQeV9JTkNSRUYoJlNQQl9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNQQlR5cGUiLCAoUHlPYmplY3QgKikmU1BCX1R5cGUpOwpkaWZmIC0tZ2l0IGEvTWFjL1B5dGhvbkxhdW5jaGVyL0ZpbGVTZXR0aW5ncy5tIGIvTWFjL1B5dGhvbkxhdW5jaGVyL0ZpbGVTZXR0aW5ncy5tCmluZGV4IDFmMzY5NWUuLjY2YjRmZGMgMTAwNzU1Ci0tLSBhL01hYy9QeXRob25MYXVuY2hlci9GaWxlU2V0dGluZ3MubQorKysgYi9NYWMvUHl0aG9uTGF1bmNoZXIvRmlsZVNldHRpbmdzLm0KQEAgLTI2NywxNCArMjY3LDE0IEBACiAJICAgIFtzY3JpcHQgbGVuZ3RoXS1bW3NjcmlwdCBsYXN0UGF0aENvbXBvbmVudF0gbGVuZ3RoXV07CiAgICAgCiAgICAgaWYgKGhvbm91cmhhc2hiYW5nICYmCi0gICAgICAgKGZwPWZvcGVuKFtzY3JpcHQgY1N0cmluZ10sICJyIikpICYmCisgICAgICAgKGZwPWZvcGVuKFtzY3JpcHQgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXSwgInIiKSkgJiYKICAgICAgICBmZ2V0cyhoYXNoYmFuZ2J1Ziwgc2l6ZW9mKGhhc2hiYW5nYnVmKSwgZnApICYmCiAgICAgICAgc3RybmNtcChoYXNoYmFuZ2J1ZiwgIiMhIiwgMikgPT0gMCAmJgogICAgICAgIChwPXN0cmNocihoYXNoYmFuZ2J1ZiwgJ1xuJykpKSB7CiAgICAgICAgICAgICAqcCA9ICdcMCc7CiAgICAgICAgICAgICBwID0gaGFzaGJhbmdidWYgKyAyOwogICAgICAgICAgICAgd2hpbGUgKCpwID09ICcgJykgcCsrOwotICAgICAgICAgICAgY3VyX2ludGVycCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzogcF07CisgICAgICAgICAgICBjdXJfaW50ZXJwID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOiBwXTsKICAgICB9CiAgICAgaWYgKCFjdXJfaW50ZXJwKQogICAgICAgICBjdXJfaW50ZXJwID0gaW50ZXJwcmV0ZXI7CmRpZmYgLS1naXQgYS9NYWMvUHl0aG9uTGF1bmNoZXIvSW5mby5wbGlzdC5pbiBiL01hYy9QeXRob25MYXVuY2hlci9JbmZvLnBsaXN0LmluCmluZGV4IDNjNzI2ZDcuLjQzOWY4YjggMTAwNjQ0Ci0tLSBhL01hYy9QeXRob25MYXVuY2hlci9JbmZvLnBsaXN0LmluCisrKyBiL01hYy9QeXRob25MYXVuY2hlci9JbmZvLnBsaXN0LmluCkBAIC00MCw3ICs0MCw3IEBACiAJPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT4KIAk8c3RyaW5nPlB5dGhvbkxhdW5jaGVyPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUdldEluZm9TdHJpbmc8L2tleT4KLQk8c3RyaW5nPiVWRVJTSU9OJSwgwqkgMDAxLTIwMDYgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb248L3N0cmluZz4KKwk8c3RyaW5nPiVWRVJTSU9OJSwgwqkgMjAwMS0yMDExIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUljb25GaWxlPC9rZXk+CiAJPHN0cmluZz5QeXRob25MYXVuY2hlci5pY25zPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KZGlmZiAtLWdpdCBhL01hYy9QeXRob25MYXVuY2hlci9NYWtlZmlsZS5pbiBiL01hYy9QeXRob25MYXVuY2hlci9NYWtlZmlsZS5pbgppbmRleCAyNTUxZDIzLi5hNjk2MmY2IDEwMDY0NAotLS0gYS9NYWMvUHl0aG9uTGF1bmNoZXIvTWFrZWZpbGUuaW4KKysrIGIvTWFjL1B5dGhvbkxhdW5jaGVyL01ha2VmaWxlLmluCkBAIC0yMSw3ICsyMSw3IEBACiAKIEJVTkRMRUJVTERFUj0kKHNyY2RpcikvLi4vLi4vTGliL3BsYXQtbWFjL2J1bmRsZWJ1aWxkZXIucHkKIAotUFlUSE9OQVBQU0RJUj0vQXBwbGljYXRpb25zLyQoUFlUSE9ORlJBTUVXT1JLKSAkKFZFUlNJT04pCitQWVRIT05BUFBTRElSPUBGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWEAvJChQWVRIT05GUkFNRVdPUkspICQoVkVSU0lPTikKIE9CSkVDVFM9RmlsZVNldHRpbmdzLm8gTXlBcHBEZWxlZ2F0ZS5vIE15RG9jdW1lbnQubyBQcmVmZXJlbmNlc1dpbmRvd0NvbnRyb2xsZXIubyBkb3NjcmlwdC5vIG1haW4ubwogCiBhbGw6IFB5dGhvblwgTGF1bmNoZXIuYXBwCmRpZmYgLS1naXQgYS9NYWMvUkVBRE1FIGIvTWFjL1JFQURNRQppbmRleCBiMmVmOGIxLi41MjI5MDNhIDEwMDY0NAotLS0gYS9NYWMvUkVBRE1FCisrKyBiL01hYy9SRUFETUUKQEAgLTgsMTMgKzgsMjQgQEAKIE1hYy1zcGVjaWZpYyBhcmd1bWVudHMgdG8gY29uZmlndXJlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qIGBgLS1lbmFibGUtZnJhbWV3b3JrYGAKKyogYGAtLWVuYWJsZS1mcmFtZXdvcmtbPURJUl1gYAogCiAgIElmIHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIHRoZSBidWlsZCB3aWxsIGNyZWF0ZSBhIFB5dGhvbi5mcmFtZXdvcmsgcmF0aGVyCiAgIHRoYW4gYSB0cmFkaXRpb25hbCBVbml4IGluc3RhbGwuIFNlZSB0aGUgc2VjdGlvbgogICBfYEJ1aWxkaW5nIGFuZCB1c2luZyBhIGZyYW1ld29yay1iYXNlZCBQeXRob24gb24gTWFjIE9TIFhgIGZvciBtb3JlIAogICBpbmZvcm1hdGlvbiBvbiBmcmFtZXdvcmtzLgogCisgIElmIHRoZSBvcHRpb25hbCBkaXJlY3RvcnkgYXJndW1lbnQgaXMgc3BlY2lmaWVkIHRoZSBmcmFtZXdvcmsgaXQgaW5zdGFsbGVkCisgIGludG8gdGhhdCBkaXJlY3RvcnkuIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5zdGFsbCBhIHB5dGhvbiBmcmFtZXdvcmsgaW50bworICB5b3VyIGhvbWUgZGlyZWN0b3J5OjoKKworICAgICAkIGNvbmZpZ3VyZSAtLWVuYWJsZS1mcmFtZXdvcms9L1VzZXJzL3JvbmFsZC9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAgJCBtYWtlICYmIG1ha2UgaW5zdGFsbAorCisgIFRoaXMgd2lsbCBpbnN0YWxsIHRoZSBmcmFtZXdvcmsgaXRzZWxmIGluIGBgL1VzZXJzL3JvbmFsZC9MaWJyYXJ5L0ZyYW1ld29ya3NgYCwKKyAgdGhlIGFwcGxpY2F0aW9ucyBpbiBhIHN1YmRpcmVjdG9yeSBvZiBgYC9Vc2Vycy9yb25hbGQvQXBwbGljYXRpb25zYGAgYW5kIHRoZQorICBjb21tYW5kLWxpbmUgdG9vbHMgaW4gYGAvVXNlcnMvcm9uYWxkL2JpbmBgLgorCiAqIGBgLS13aXRoLWZyYW1ld29yay1uYW1lPU5BTUVgYAogCiAgIFNwZWNpZnkgdGhlIG5hbWUgZm9yIHRoZSBweXRob24gZnJhbWV3b3JrLCBkZWZhdWx0cyB0byBgYFB5dGhvbmBgLiBUaGlzIG9wdGlvbgpAQCAtMjUsMTQgKzM2LDE0IEBACiAgIENyZWF0ZSBhIHVuaXZlcnNhbCBiaW5hcnkgYnVpbGQgb2Ygb2YgUHl0aG9uLiBUaGlzIGNhbiBiZSB1c2VkIHdpdGggYm90aAogICByZWd1bGFyIGFuZCBmcmFtZXdvcmsgYnVpbGRzLgogCi0gIFRoZSBvcHRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXMgd2l0aCBPU1ggU0RLIHNob3VsZCBiZSB1c2VkIHRvIHBlcmZvcm0gdGhlCisgIFRoZSBvcHRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXMgd2hpY2ggT1NYIFNESyBzaG91bGQgYmUgdXNlZCB0byBwZXJmb3JtIHRoZQogICBidWlsZC4gVGhpcyBkZWZhdWx0cyB0byBgYC9EZXZlbG9wZXIvU0RLcy9NYWNPU1guMTAuNHUuc2RrYGAsIHNwZWNpZnkgCiAgIGBgL2BgIHdoZW4gYnVpbGRpbmcgb24gYSAxMC41IHN5c3RlbSwgZXNwZWNpYWxseSB3aGVuIGJ1aWxkaW5nIDY0LWJpdCBjb2RlLgogCiAgIFNlZSB0aGUgc2VjdGlvbiBfYEJ1aWxkaW5nIGFuZCB1c2luZyBhIHVuaXZlcnNhbCBiaW5hcnkgb2YgUHl0aG9uIG9uIE1hYyBPUyBYYAogICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAotKiBgYC0td2l0aC11bml2ZXJzYWwtYXJjaHM9VkFMVUVgYAorKiBgYC0td2l0aC11bml2ZXJhbC1hcmNocz1WQUxVRWBgCiAKICAgU3BlY2lmeSB0aGUga2luZCBvZiB1bml2ZXJzYWwgYmluYXJ5IHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQuIFRoaXMgb3B0aW9uIGlzIAogICBvbmx5IHZhbGlkIHdoZW4gYGAtLWVuYWJsZS11bml2ZXJzYWxzZGtgYCBpcyBzcGVjaWZpZWQuCkBAIC04OCwxMCArOTksMjkgQEAKIAogICAqIGBgaW50ZWxgYDoJICBgYGkzODZgYCwgYGB4ODZfNjRgYAogCi1UbyBidWlsZCBhIHVuaXZlcnNhbCBiaW5hcnkgdGhhdCBpbmNsdWRlcyBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgeW91IG11c3QgYnVpbGQKLW9uIGEgc3lzdGVtIHJ1bm5pbmcgT1NYIDEwLjUgb3IgbGF0ZXIuIFRoZSBgYGFsbGBgIGZsYXZvdXIgY2FuIG9ubHkgYmUgYnVpbGQgb24KK1RvIGJ1aWxkIGEgdW5pdmVyc2FsIGJpbmFyeSB0aGF0IGluY2x1ZGVzIGEgNjQtYml0IGFyY2hpdGVjdHVyZSwgeW91IG11c3QgYnVpbGQKK29uIGEgc3lzdGVtIHJ1bm5pbmcgT1NYIDEwLjUgb3IgbGF0ZXIuIFRoZSBgYGFsbGBgIGZsYXZvdXIgY2FuIG9ubHkgYmUgYnVpbHQgb24KIE9TWCAxMC41LgogCitUaGUgbWFrZWZpbGUgZm9yIGEgZnJhbWV3b3JrIGJ1aWxkIHdpbGwgaW5zdGFsbCBgYHB5dGhvbjMyYGAgYW5kIGBgcHl0aG9udzMyYGAgCitiaW5hcmllcyB3aGVuIHRoZSB1bml2ZXJzYWwgYXJjaGl0ZWN1cmVzIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSAzMi1iaXQgYXJjaGl0ZWN0dXJlCisodGhhdCBpcywgZm9yIGFsbCBmbGF2b3VycyBidXQgYGA2NC1iaXRgYCkuCisKK1J1bm5pbmcgYSBzcGVjaWZpYyBhcmNoaWN0dXJlCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitZb3UgY2FuIHJ1biBjb2RlIHVzaW5nIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIHVzaW5nIHRoZSBgYGFyY2hgYCBjb21tYW5kOjoKKworICAgJCBhcmNoIC1pMzg2IHB5dGhvbgorCitPciB0byBleHBsaWNpdGx5IHJ1biBpbiAzMi1iaXQgbW9kZSwgcmVnYXJkbGVzcyBvZiB0aGUgbWFjaGluZSBoYXJkd2FyZTo6CisKKyAgICQgYXJjaCAtaTM4NiAtcHBjIHB5dGhvbgorCitOT1RFOiBXaGVuIHlvdSdyZSB1c2luZyBhIGZyYW1ld29yayBpbnN0YWxsIG9mIFB5dGhvbiB0aGlzIHJlcXVpcmVzIGF0IGxlYXN0CitQeXRob24gMi43IG9yIDMuMiwgaW4gZWFybGllciB2ZXJzaW9ucyB0aGUgcHl0aG9uIChhbmQgcHl0aG9udykgY29tbWFuZHMgYXJlCit3cmFwcGVyIHRvb2xzIHRoYXQgZXhlY3V0ZSB0aGUgcmVhbCBpbnRlcnByZXRlciB3aXRob3V0IGVuc3VyaW5nIHRoYXQgdGhlCityZWFsIGludGVycHJldGVyIHJ1bnMgd2l0aCB0aGUgc2FtZSBhcmNoaXRlY3R1cmUuCiAKIEJ1aWxkaW5nIGFuZCB1c2luZyBhIGZyYW1ld29yay1iYXNlZCBQeXRob24gb24gTWFjIE9TIFguCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjA1LDYgKzIzNSwyNSBAQAogZnJvbSB3aXRoaW4gdGhlIEJ1aWxkU2NyaXB0IGRpcmVjdG9yeS4gVGhlIHNjcmlwdCBhY2NlcHRzIGEgbnVtYmVyIG9mIAogY29tbWFuZC1saW5lIGFyZ3VtZW50cywgcnVuIGl0IHdpdGggLS1oZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCitDb25maWd1cmUgd2FybmluZ3MKKz09PT09PT09PT09PT09PT09PQorCitUaGUgY29uZmlndXJlIHNjcmlwdCBzb21ldGltZXMgZW1pdHMgd2FybmluZ3MgbGlrZSB0aGUgb25lIGJlbG93OjoKKworICAgY29uZmlndXJlOiBXQVJOSU5HOiBsaWJpbnRsLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZAorICAgY29uZmlndXJlOiBXQVJOSU5HOiBsaWJpbnRsLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8KKyAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24KKyAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiAgICAgc2VjdGlvbiAiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkIgorICAgY29uZmlndXJlOiBXQVJOSU5HOiBsaWJpbnRsLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0CisgICBjb25maWd1cmU6IFdBUk5JTkc6IGxpYmludGwuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlCisgICBjb25maWd1cmU6IFdBUk5JTkc6ICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworICAgY29uZmlndXJlOiBXQVJOSU5HOiAgICAgIyMgUmVwb3J0IHRoaXMgdG8gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy8gIyMKKyAgIGNvbmZpZ3VyZTogV0FSTklORzogICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK1RoaXMgYWxtb3N0IGFsd2F5cyBtZWFucyB5b3UgYXJlIHRyeWluZyB0byBidWlsZCBhIHVuaXZlcnNhbCBiaW5hcnkgZm9yCitQeXRob24gYW5kIGhhdmUgbGliYXJpZXMgaW4gYGAvdXNyL2xvY2FsYGAgdGhhdCBkb24ndCBjb250YWluIHRoZSByZXF1aXJlZAorYXJjaGl0ZWN0dXJlcy4gVGVtcG9yYXJpbHkgbW92ZSBgYC91c3IvbG9jYWxgYCBhc2lkZSB0byBmaW5pc2ggdGhlIGJ1aWxkLgorCiAKIFVuaW5zdGFsbGluZyBhIGZyYW1ld29yayBpbnN0YWxsLCBpbmNsdWRpbmcgdGhlIGJpbmFyeSBpbnN0YWxsZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL0luZm8ucGxpc3QuaW4gYi9NYWMvUmVzb3VyY2VzL2FwcC9JbmZvLnBsaXN0LmluCmluZGV4IDgzZDFiMjYuLmI1ODZiYTAgMTAwNjQ0Ci0tLSBhL01hYy9SZXNvdXJjZXMvYXBwL0luZm8ucGxpc3QuaW4KKysrIGIvTWFjL1Jlc291cmNlcy9hcHAvSW5mby5wbGlzdC5pbgpAQCAtMjAsNyArMjAsNyBAQAogCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxlPC9rZXk+CiAJPHN0cmluZz5QeXRob248L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlR2V0SW5mb1N0cmluZzwva2V5PgotCTxzdHJpbmc+JXZlcnNpb24lLCAoYykgMjAwNC0yMDEwIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgorCTxzdHJpbmc+JXZlcnNpb24lLCAoYykgMjAwNC0yMDExIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVIZWxwQm9va0ZvbGRlcjwva2V5PgogCTxhcnJheT4KIAkJPHN0cmluZz5Eb2N1bWVudGF0aW9uPC9zdHJpbmc+CkBAIC0zNyw3ICszNyw3IEBACiAJPGtleT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgogCTxzdHJpbmc+Ni4wPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUxvbmdWZXJzaW9uU3RyaW5nPC9rZXk+Ci0JPHN0cmluZz4ldmVyc2lvbiUsIChjKSAyMDA0LTIwMTAgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uPC9zdHJpbmc+CisJPHN0cmluZz4ldmVyc2lvbiUsIChjKSAyMDA0LTIwMTEgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZU5hbWU8L2tleT4KIAk8c3RyaW5nPlB5dGhvbjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgpAQCAtNTUsNiArNTUsNiBAQAogCTxrZXk+TlNBcHBsZVNjcmlwdEVuYWJsZWQ8L2tleT4KIAk8dHJ1ZS8+CiAJPGtleT5OU0h1bWFuUmVhZGFibGVDb3B5cmlnaHQ8L2tleT4KLQk8c3RyaW5nPihjKSAyMDA0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgorCTxzdHJpbmc+KGMpIDIwMTEgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uPC9zdHJpbmc+CiA8L2RpY3Q+CiA8L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9QYWNrYWdlTWFuYWdlci5naWYgYi9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL1BhY2thZ2VNYW5hZ2VyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5M2RjOC4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL1BhY2thZ2VNYW5hZ2VyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vY29tbXVuaXR5Lmh0bWwgYi9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2NvbW11bml0eS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDBhMzhiLi4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vY29tbXVuaXR5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPGh0bWwgbGFuZz0iZW4iPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPldoYXQgaXMgTWFjUHl0aG9uPzwvdGl0bGU+Ci0JPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJCQkVkaXQgNi41LjMiPgotCTxsaW5rIHJlbD0iU0hPUlRDVVQgSUNPTiIgaHJlZj0icHl0aG9uc21hbGwuZ2lmIj4KLQk8TUVUQSBOQU1FPSJBcHBsZUljb24iIENPTlRFTlQ9InB5dGhvbnNtYWxsLmdpZiI+Ci08L2hlYWQ+Ci08Ym9keT4KLQkJPHRhYmxlPgotCQk8dHI+Ci0JCQk8dGQ+Ci0JCQkJPGltZyBzcmM9InB5dGhvbi5naWYiIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiBhbGlnbj0idG9wIiBhbHQ9IiI+Ci0JCQk8L3RkPgotCQkJPHRkPgotCQkJCTxoMT5NYWNQeXRob24gQ29tbXVuaXR5PC9oMT4JCi0JCQk8L3RkPgotCQk8L3RyPgotCQk8L3RhYmxlPgotCQk8aHI+Ci0KLTxoMj5XZWIgU2l0ZXM8L2gyPgotCi08cD5UaGUgTWFjUHl0aG9uIGhvbWVwYWdlLCA8YSBocmVmPSJodHRwOi8vd3d3LmN3aS5ubC9+amFjay9tYWNweXRob24uaHRtbCI+Ci13d3cuY3dpLm5sL35qYWNrL21hY3B5dGhvbi5odG1sPC9hPgotaXMgd2hlcmUgeW91IGNhbiBmaW5kIGluc3RhbGxlcnMsIGRvY3VtZW50cywgbGlua3MgdG8gdXNlZnVsIHBhY2thZ2VzIGFuZCBtb3JlLiAKLUFuZCwgb2YgY291cnNlLAotPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnIj53d3cucHl0aG9uLm9yZzwvYT4gaGFzIGEgbXVjaCBsYXJnZXIgY29sbGVjdGlvbgotb2YgbWF0ZXJpYWwgb24gUHl0aG9uIHRoYXQgaXMgbm90IE1hYy1zcGVjaWZpYy48L3A+Ci0KLTxoMj5OZXdzIGdyb3VwcyBhbmQgTWFpbGluZyBsaXN0czwvaDI+Ci0KLTxwPlRoZXJlIGFyZSBhIGxvdCBvZiBtYWlsaW5nIGxpc3RzIG9uIFB5dGhvbi4gU29tZSBvZiB0aGUgbW9yZSBpbnRlcmVzdGluZwotb25lcyBhcmU6PC9wPgotPHVsPgotPGxpPjxhIGhyZWY9Im1haWx0bzpweXRob24taGVscEBweXRob24ub3JnIj5weXRob24taGVscEBweXRob24ub3JnPC9hPiB3aGVyZQoteW91IGNhbiBzZW5kIHF1ZXN0aW9ucyBmb3IgaW5kaXZpZHVhbCBzdXBwb3J0LiBQbGVhc2UgY2hlY2sgdGhlIHdlYnNpdGVzIG1lbnRpb25lZAotYWJvdmUgZmlyc3QsIHRob3VnaCE8L2xpPgotPGxpPlRoZSA8YSBocmVmPSJuZXdzOmNvbXAubGFuZy5weXRob24iPmNvbXAubGFuZy5weXRob248L2E+IG5ld3Nncm91cCBmb3IgZ2VuZXJhbAotZGlzY3Vzc2lvbi4gQWxzbyBhdmFpbGFibGUgYXMgYSAKLTxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3B5dGhvbi1saXN0Ij5tYWlsaW5nIGxpc3Q8L2E+LjwvbGk+Ci08bGk+VGhlIDxhIGhyZWY9Im5ld3M6Y29tcC5sYW5nLnB5dGhvbi5hbm5vdW5jZSI+Y29tcC5sYW5nLnB5dGhvbi5hbm5vdW5jZTwvYT4gCi1uZXdzZ3JvdXAgZm9yIGFubm91bmNlbWVudHMuIExvdy12b2x1bWUgYW5kIG1vZGVyYXRlZC4gQWxzbyBhdmFpbGFibGUgYXMgYSAKLTxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3B5dGhvbi1hbm5vdW5jZS1saXN0Ij5tYWlsaW5nIGxpc3Q8L2E+LjwvbGk+Ci08bGk+TGFzdCBidXQgbm90IGxlYXN0LCB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL3NpZ3MvcHl0aG9ubWFjLXNpZy8iPnB5dGhvbm1hYy1zaWc8L2E+Ci1tYWlsaW5nIGxpc3QgaXMgc3BlY2lmaWNhbGx5IGZvciBNYWNQeXRob24uIERpc2N1c3Npb25zIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBuZXcKLWZlYXR1cmVzLCBidXQgYmVnaW5uZXJzIHF1ZXN0aW9ucyBhcmUgd2VsY29tZSB0b28uPC9saT4KLTwvdWw+Ci0KLTxwPkluIGFkZGl0aW9uIHRoZXJlIGFyZSBQeXRob24gPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL3NpZ3MvIj5TcGVjaWFsIEludGVyZXN0IEdyb3VwPC9hPgotbWFpbGluZyBsaXN0cyBvbiBhIHdpZGUgdmFyaWV0eSBvZiB0b3BpY3Mgc3VjaCBhcyBpbWFnZSBwcm9jZXNzaW5nLCBudW1lcmljYWwgYWxnb3JpdGhtcwotYW5kIG1vcmUuPC9wPgotCi08aDI+TW9yZTwvaDI+Ci0KLTxwPkFuIGluZGV4IG9mIGNvbmZlcmVuY2VzLCBXaWtpJ3MsIGJvb2tzaG9wcyBhbmQgbW9yZSBjYW4gYmUgZm91bmQgYXQgdGhlCi08YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNhLyI+Q29tbXVuaXR5PC9hPiBzZWN0aW9uIG9mIHRoZSBQeXRob24gd2Vic2l0ZS48L3A+Ci0KLTxwPklmIHlvdSBmaW5kIGEgYnVnIHlvdSBhcmUga2luZGx5IHJlcXVlc3RlZCB0byByZXBvcnQgaXQsIHByZWZlcnJhYmx5IHRocm91Z2ggdGhlCi1hdXRvbWF0aWMgYnVnIHRyYWNrZXIgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnIj53d3cucHl0aG9uLm9yZzwvYT48L3A+Ci0KLTxwPklmIHlvdSB3YW50IHRvIGJlY29tZSBhbiBhY3RpdmUgZGV2ZWxvcGVyIHlvdSBhcmUgdmVyeSB3ZWxjb21lISBKb2luIHRoZQotcHl0aG9ubWFjLXNpZyBtYWlsaW5nIGxpc3QgbWVudGlvbmVkIGFib3ZlLCBhbmQgcmVhZCB0aGUKLTxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvIj5EZXZlbG9wZXI8L2E+IHNlY3Rpb24gb24gdGhlIFB5dGhvbiB3ZWJzaXRlLjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9kb2MvaW5kZXguaHRtbCBiL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vZG9jL2luZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZTczNTcuLjAwMDAwMDAKLS0tIGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9kb2MvaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbiI+Ci08aGVhZD4KLQk8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLQk8dGl0bGU+UHl0aG9uIExhbmd1YWdlIERvY3VtZW50YXRpb248L3RpdGxlPgotCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQkJFZGl0IDYuNS4zIj4KLTwvaGVhZD4KLTxib2R5PgotPGgxPlB5dGhvbiBMYW5ndWFnZSBhbmQgcnVudGltZSBkb2N1bWVudGF0aW9uPC9oMT4KLQotPHA+VGhpcyB2b2x1bWUgb2YgZG9jdW1lbnRhdGlvbiBpcyByYXRoZXIgYmlnICgxNyBNZWdhYnl0ZXMpIGFuZCBjb250YWlucwotYSB0dXRvcmlhbCwgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUgUHl0aG9uIGxpYnJhcnkgKGFsbCB0aGUgbW9kdWxlcwotYW5kIHBhY2thZ2VzIGluY2x1ZGVkKSwgZm9ybWFsIGRlc2NyaXB0aW9uIG9mIHRoZSBsYW5ndWFnZSBhbmQgbW9yZS48L3A+Ci0KLTxwPllvdSBjYW4gPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2RvYyI+dmlldyBpdCBvbmxpbmU8L2E+LCB3aGVyZQoteW91IGNhbiBhbHNvIGRvd25sb2FkIFBERnMgZm9yIHByaW50aW5nLCBvciB5b3UgY2FuIGRvd25sb2FkIGFuZCBpbnN0YWxsIGl0Ci10aHJvdWdoIHRoZSA8YSBocmVmPSIuLi9wYWNrbWFuLmh0bWwiPlBhY2thZ2UgTWFuYWdlcjwvYT4gZm9yIHZpZXdpbmcgYW5kCi1zZWFyY2hpbmcgdmlhIEFwcGxlIEhlbHAgVmlld2VyLjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vZmluZGVyLmh0bWwgYi9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2ZpbmRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODg3N2JhLi4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vZmluZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPGh0bWwgbGFuZz0iZW4iPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPlB5dGhvbiBhbmQgdGhlIEZpbmRlcjwvdGl0bGU+Ci0JPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJCQkVkaXQgNi41LjMiPgotCTxsaW5rIHJlbD0iU0hPUlRDVVQgSUNPTiIgaHJlZj0icHl0aG9uc21hbGwuZ2lmIj4KLQk8TUVUQSBOQU1FPSJBcHBsZUljb24iIENPTlRFTlQ9InB5dGhvbnNtYWxsLmdpZiI+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5SdW5uaW5nIFB5dGhvbiBzY3JpcHRzIGZyb20gdGhlIEZpbmRlcjwvaDE+Ci0JCTx0YWJsZT4KLQkJPHRyPgotCQkJPHRkPgotCQkJCTxpbWcgc3JjPSJweXRob24uZ2lmIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgYWxpZ249InRvcCIgYWx0PSIiPgotCQkJPC90ZD4KLQkJCTx0ZD4KLQkJCQk8cD5UaGUgYXBwbGljYXRpb24gUHl0aG9uTGF1bmNoZXIgd2lsbCBzdGFydCBhIFB5dGhvbiBpbnRlcnByZXRlcgotCQkJCXdoZW4geW91IGRyb3AgYSBQeXRob24gc291cmNlIGZpbGUgb250byBpdCwgYW55IGZpbGUgd2l0aCBhIDx0dD4ucHk8L3R0PgotCQkJCW9yIDx0dD4ucHl3PC90dD4gZXh0ZW5zaW9uLiBJZiB5b3Ugc2V0IFB5dGhvbkxhdW5jaGVyIGFzIHRoZSBkZWZhdWx0Ci0JCQkJYXBwbGljYXRpb24gdG8gb3BlbiBhIGZpbGUKLSg8YSBocmVmPSJoZWxwOnNlYXJjaD1DaGFuZ2luZyUyMHRoZSUyMGFwcGxpY2F0aW9uJTIwdGhhdCUyMG9wZW5zJTIwYSUyMGZpbGUgYm9va0lEPU1hYyUyMEhlbHAiPgotdGVsbCBtZSBtb3JlPC9hPikgdGhpcyBhbHNvIHdvcmtzIHdoZW4geW91IGRvdWJsZSBjbGljayBhIFB5dGhvbiBzY3JpcHQuPC9wPgotCi0JCQkJPHA+UHl0aG9uTGF1bmNoZXIgaGFzIHByZWZlcmVuY2VzIHBlciBmaWxldHlwZSBmb3Igc2VsZWN0aW5nCi0JCQkJdGhlIGludGVycHJldGVyIHRvIHVzZSwgYW5kIGhvdyB0byBsYXVuY2ggaXQ6IGluIGEgVGVybWluYWwgd2luZG93Ci0JCQkJb3Igbm90LCBldGMuIEhvbGRpbmcgdGhlIE9wdGlvbiBrZXkgd2hpbGUgbGF1bmNoaW5nIHlvdXIgc2NyaXB0IHdpbGwKLQkJCQlicmluZyB1cCBhIHdpbmRvdyB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGVzZSBzZXR0aW5ncyBmb3IgYSBzaW5nbGUKLQkJCQlydW4uIDwvcD4KLQkJCTwvdGQ+Ci0JCTwvdHI+Ci0JCTwvdGFibGU+Ci0JCTxocj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vZ3VpLmh0bWwgYi9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2d1aS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTJjNzhjLi4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vZ3VpLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPGh0bWwgbGFuZz0iZW4iPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPkNyZWF0aW5nIGEgVXNlciBJbnRlcmZhY2Ugd2l0aCBNYWNQeXRob248L3RpdGxlPgotCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQkJFZGl0IDYuNS4zIj4KLQk8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9InB5dGhvbnNtYWxsLmdpZiI+Ci0JPE1FVEEgTkFNRT0iQXBwbGVJY29uIiBDT05URU5UPSJweXRob25zbWFsbC5naWYiPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+Q3JlYXRpbmcgYSBVc2VyIEludGVyZmFjZSB3aXRoIE1hY1B5dGhvbjwvaDE+Ci0KLTxwPlRoZXJlIGFyZSBhIG51bWJlciBvZiBwYWNrYWdlcyB0aGF0IGFsbG93IGNyZWF0aW9uIG9mIGEgdXNlciBpbnRlcmZhY2UKLWZvciB5b3VyIFB5dGhvbiBjb2RlLCBlYWNoIG9mIHdoaWNoIGhhcyBpdHMgb3duIG1lcml0czo8L3A+Ci0KLTx1bD4KLQk8bGk+IFRoZSBDYXJib24gcGFja2FnZSBnaXZlcyBsb3ctbGV2ZWwgYWNjZXNzIHRvIHRoZSBvbGQgTWFjaW50b3NoIHRvb2xib3gKLQljYWxscyBmb3Igd2luZG93cywgZXZlbnRzLCBkaWFsb2dzIGFuZCBtb3JlLiBUaGUgPHR0PkZyYW1lV29yazwvdHQ+IG1vZHVsZQotCXdyYXBzIHRoZXNlIGluIGEgbWluaW1hbCBmcmFtZXdvcmsuIEZvciBkb2N1bWVudGF0aW9uIHNlZSB0aGUgTWFjaW50b3NoCi0JTGlicmFyeSBzZWN0aW9uIG9mIHRoZSA8YSBocmVmPSJkb2MvaW5kZXguaHRtbCI+UHl0aG9uIExhbmd1YWdlIGFuZCBydW50aW1lIAotCWRvY3VtZW50YXRpb248L2E+IGFuZCB0aGUgSHVtYW4gSW50ZXJmYWNlIFRvb2xib3ggc2VjdGlvbiBvZiAKLQk8YSBocmVmPSJoZWxwOm9wZW5ib29rPUNhcmJvbiI+QXBwbGUncyBDYXJib24gRG9jdW1lbnRhdGlvbjwvYT4uIAotCVRoaXMgc29sdXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIE1hY1B5dGhvbi1PUzkuPC9saT4KLQk8bGk+IFRoZSA8dHQ+VzwvdHQ+IGZyYW1ld29yayBpcyBidWlsdCBvbiB0b3Agb2YgdGhpcywgYW5kIGVhc2llciB0byB1c2UuCi0JVGhlIE1hY1B5dGhvbiBJREUgdXNlcyBXLiBTb21lIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIG9uIAotCTxhIGhyZWY9Imh0dHA6Ly93d3cubmV2YWRhLmVkdS9+Y3dlYnN0ZXIvUHl0aG9uL2luZGV4Lmh0bWwiPkNvcnJhbiBXZWJzdGVyJ3Mgd2Vic2l0ZTwvYT4uCi0JQ29tcGF0aWJsZSB3aXRoIE1hY1B5dGhvbi1PUzkuPC9saT4KLTwvdWw+Ci0KLTxwPkZvciBuZXcgd29yaywgaG93ZXZlciwgb25lIG9mIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgbWF5IGJlIGJldHRlciBzdWl0ZWQuCi1UaGV5IG1heSBiZSBhdmFpbGFibGUgb3V0IG9mIHRoZSBib3ggaW4gdGhpcyBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UKLWNhbiBpbnN0YWxsIHRoZW0gdGhyb3VnaCB0aGUgPGEgaHJlZj0icGFja21hbi5odG1sIj5QYWNrYWdlIE1hbmFnZXI8L2E+OjwvcD4KLQotPHVsPgotCTxsaT4gPGEgaHJlZj0iaHR0cDovL3B5b2JqYy5zb3VyY2Vmb3JnZS5uZXQvIj5QeU9iakM8L2E+IGFsbG93cyBjb21wbGV0ZSBhY2Nlc3MgdG8gQ29jb2EuIAotCUluIHRlY2huaWNhbCB0ZXJtcyBpdCBpcyBhCi0JYmlkaXJlY3Rpb25hbCBicmlkZ2UgYmV0d2VlbiBQeXRob24gYW5kIE9iamVjdHZlLUMsIHNpbWlsYXIgdG8gQXBwbGUncyBKYXZhCi0JYnJpZGdlLiBQcm9iYWJseSB0aGUgYmVzdCBjaG9pY2UgZm9yIE1hYyBPUyBYLW9ubHkgYXBwbGljYXRpb25zLCBidXQgYXQgdGhlCi0JdGltZSBvZiB0aGlzIHdyaXRpbmcgUHlPYmpDIGlzIHN0aWxsIGluIGJldGEuPC9saT4KLQkKLQk8bGk+IDxhIGhyZWY9Imh0dHA6Ly93eHB5dGhvbi5zb3VyY2Vmb3JnZS5uZXQvIj53eFB5dGhvbjwvYT4gZ2l2ZXMgUHl0aG9uIHByb2dyYW1zCi0JYWNjZXNzIHRvIHRoZSB3eFdpbmRvd3MgIEdVSSB0b29sa2l0LiBNYW55IHBlb3BsZSBjb25zaWRlciB0aGlzCi0JdGhlIGJlc3Qgb3BlbiBzb3VyY2UgY3Jvc3MtcGxhdGZvcm0gR1VJIHNvbHV0aW9uIGF2YWlsYWJsZSB0b2RheS48L2xpPgotCQotCTxsaT4gVGtpbnRlciBpcyB0aGUgb2xkZXN0IGNyb3NzLXBsYXRmb3JtIEdVSSB0b29sa2l0IGZvciBQeXRob24sIGJyaWRnaW5nIFB5dGhvbgotCXRvIFRjbC9Uay4gSWYgeW91IGluc3RhbGwgQXF1YVRrIGl0IGNyZWF0ZXMgYSBuYXRpdmUgdXNlciBpbnRlcmZhY2Ugb24gTWFjIE9TIFguCi0JRG9jdW1lbnRlZCBpbiB0aGUgTGlicmFyeSBzZWN0aW9uLCBUa2ludGVyIHN1YnNlY3Rpb24gb2YgdGhlIAotCTxhIGhyZWY9ImRvYy9pbmRleC5odG1sIj5QeXRob24gTGFuZ3VhZ2UgYW5kIHJ1bnRpbWUgZG9jdW1lbnRhdGlvbjwvYT4uIFRraW50ZXIKLQlpcyBub3QgYXZhaWxhYmxlIGZvciBNYWNQeXRob24tT1M5LjwvbGk+Ci08L3VsPgotCQkJCQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9pbmRleC5odG1sIGIvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGMzMzU5Li4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbiI+Ci08aGVhZD4KLQk8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLQk8dGl0bGU+TWFjUHl0aG9uIEhlbHA8L3RpdGxlPgotCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQkJFZGl0IDYuNS4zIj4KLQk8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9InB5dGhvbnNtYWxsLmdpZiI+Ci0JPE1FVEEgTkFNRT0iQXBwbGVJY29uIiBDT05URU5UPSJweXRob25zbWFsbC5naWYiPgotCTxNRVRBIE5BTUU9IkFwcGxlVGl0bGUiIENPTlRFTlQ9Ik1hY1B5dGhvbiBIZWxwIj4KLTwvaGVhZD4KLTxib2R5PgotCi08aDE+TWFjUHl0aG9uIEhlbHA8L2gxPgotCQk8dGFibGU+Ci0JCTx0cj4KLQkJCTx0ZD4KLQkJCQk8aW1nIHNyYz0icHl0aG9uLmdpZiIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIGFsaWduPSJ0b3AiIGFsdD0iIj4KLQkJCTwvdGQ+Ci0JCQk8dGQ+Ci08cD5DaG9vc2UgYSB0b3BpYywgb3IgZW50ZXIga2V5d29yZHMgaW50byB0aGUgc2VhcmNoIGZpZWxkOjwvcD4KLTx1bD4KLQk8bGk+PGEgaHJlZj0iaW50cm8uaHRtbCI+V2hhdCBpcyBNYWNQeXRob24/PC9hPgotCTwvbGk+Ci0JPGxpPjxhIGhyZWY9ImRvYy9pbmRleC5odG1sIj5QeXRob24gTGFuZ3VhZ2UgYW5kIHJ1bnRpbWUgZG9jdW1lbnRhdGlvbjwvYT4KLQk8L2xpPgotCTxsaT48YSBocmVmPSJmaW5kZXIuaHRtbCI+UnVubmluZyBQeXRob24gc2NyaXB0cyBmcm9tIHRoZSBGaW5kZXI8L2E+Ci0JPC9saT4KLQk8bGk+PGEgaHJlZj0ic2hlbGwuaHRtbCI+UnVubmluZyBQeXRob24gc2NyaXB0cyBmcm9tIHRoZSBVbml4IFNoZWxsPC9hPgotCTwvbGk+Ci0JPGxpPjxhIGhyZWY9Imd1aS5odG1sIj5DcmVhdGluZyBhIFVzZXIgSW50ZXJmYWNlIHdpdGggTWFjUHl0aG9uPC9hPgotCTwvbGk+Ci0JPGxpPjxhIGhyZWY9InNjcmlwdGluZy5odG1sIj5Db250cm9sbGluZyBvdGhlciBBcHBsaWNhdGlvbnMgZnJvbSBNYWNQeXRob248L2E+Ci0JPC9saT4KLQk8bGk+PGEgaHJlZj0icGFja21hbi5odG1sIj5JbnN0YWxsaW5nIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSB3aXRoIHRoZQotCVBhY2thZ2UgTWFuYWdlcjwvYT4KLQk8L2xpPgotCTxsaT48YSBocmVmPSJjb21tdW5pdHkuaHRtbCI+TWFjUHl0aG9uIGNvbW11bml0eTwvYT4KLQk8L2xpPgotPC91bD4KLQkKLQkJCTwvdGQ+Ci0JCTwvdHI+Ci0JCTwvdGFibGU+Ci0JCTxocj4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9pbnRyby5odG1sIGIvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9pbnRyby5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGFiMzcxLi4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vaW50cm8uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbiI+Ci08aGVhZD4KLQk8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLQk8dGl0bGU+V2hhdCBpcyBNYWNQeXRob24/PC90aXRsZT4KLQk8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkJCRWRpdCA2LjUuMyI+Ci0JPGxpbmsgcmVsPSJTSE9SVENVVCBJQ09OIiBocmVmPSJweXRob25zbWFsbC5naWYiPgotCTxNRVRBIE5BTUU9IkFwcGxlSWNvbiIgQ09OVEVOVD0icHl0aG9uc21hbGwuZ2lmIj4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldoYXQgaXMgTWFjUHl0aG9uPzwvaDE+Ci0JCTx0YWJsZT4KLQkJPHRyPgotCQkJPHRkPgotCQkJCTxpbWcgc3JjPSJweXRob24uZ2lmIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgYWxpZ249InRvcCIgYWx0PSIiPgotCQkJPC90ZD4KLQkJCTx0ZD4KLTxwPlB5dGhvbiBpcyBhIHByb2dyYW1taW5nIGxhbmd1YWdlLiBNYWNQeXRob24gaXMgYSBwYWNrYWdlIGNvbnRhaW5pbmcKLXRoYXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgcGx1cyBNYWMtc3BlY2lmaWMgdG9vbHMgYW5kIGV4dGVuc2lvbnMuPC9wPgotCQotCQkJPC90ZD4KLQkJPC90cj4KLQkJPC90YWJsZT4KLQkJPGhyPgotCi08aDI+VGhlIFB5dGhvbiBMYW5ndWFnZTwvaDI+Ci08cD5UaGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIGlzIGF2YWlsYWJsZSBmb3IgbWFueSBoYXJkd2FyZQotcGxhdGZvcm1zLCBhbmQgbW9zdCBnZW5lcmFsIGRvY3VtZW50YXRpb24gaXMgVW5peC0gb3IgV2luZG93cy1jZW50ZXJlZC4gS2VlcAotdGhpcyBpbiBtaW5kIHdoZW4gcmVhZGluZyB0aGUgcmVzdCBvZiB0aGlzIGhlbHAsIG9yIGluZm9ybWF0aW9uIG9uIHRoZSB3ZWIuCi08L3A+Ci0KLTxwPlRoZSBQeXRob24gd2Vic2l0ZSwgPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnIj53d3cucHl0aG9uLm9yZzwvYT4sCi1oYXMgYSA8ZW0+QmVnaW5uZXJzIEd1aWRlPC9lbT4gc2VjdGlvbiBpbmNsdWRpbmcgYW4gCi08YSBocmVmPSJodHRwOi8vcHl0aG9uLm9yZy9kb2MvZXNzYXlzL2JsdXJiLmh0bWwiPmV4ZWN1dGl2ZSBzdW1tYXJ5PC9hPiBvbgotdGhlIGxhbmd1YWdlIGFuZCBhIAotPGEgaHJlZj0iaHR0cDovL3B5dGhvbi5vcmcvZG9jL2Vzc2F5cy9jb21wYXJpc29ucy5odG1sIj5jb21wYXJpc29uPC9hPiBvZiBQeXRob24KLXRvIG90aGVyIGxhbmd1YWdlcy4gT3IgcmVhZCB0aGUgKHJhdGhlciBsb25nd2luZGVkKSBQeXRob24KLVR1dG9yaWFsIGluIHRoZSA8YSBocmVmPSJkb2MvaW5kZXguaHRtbCI+UHl0aG9uIExhbmd1YWdlIGFuZCBydW50aW1lIGRvY3VtZW50YXRpb248L2E+LjwvcD4KLQotPHA+TWFjUHl0aG9uIGNvbnRhaW5zIGEgY29tcGxldGUgPGEgaHJlZj0ic2hlbGwuaHRtbCI+dW5peCBpbnRlcnByZXRlcjwvYT4gc28KLWlmIHlvdSBhcmUgZmFtaWxpYXIgd2l0aCBQeXRob24gb24gdW5peCB5b3Ugc2hvdWxkIGZlZWwgcmlnaHQgYXQgaG9tZS48L3A+Ci0KLTxoMj5NYWNQeXRob24gYWRkaXRpb25zPC9oMj4KLQotPHA+VGhlIE1hY1B5dGhvbiBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IChJREUpIGFsbG93cwotZWFzeSBlZGl0aW5nLCBydW5uaW5nIGFuZCBkZWJ1Z2dpbmcgb2Ygc2NyaXB0cy4gUmVhZCB0aGUgCi08YSBocmVmPSJpZGUvaW5kZXguaHRtbCI+SW50cm9kdWN0aW9uCi10byB0aGUgSURFPC9hPiB0byB3aGV0IHlvdXIgYXBwZXRpdGUuPC9wPgotCi08cD5NYWNQeXRob24gY29tZXMgd2l0aCBsb3RzIG9mIG1vZHVsZXMgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gCi1NYWNPUy1zcGVjaWZpYyB0ZWNobm9sb2d5LCBzdWNoIGFzIENhcmJvbiwgUXVpY2t0aW1lIGFuZCBBcHBsZVNjcmlwdC4gCi1TZWUgdGhlIDxlbT5NYWNpbnRvc2gKLU1vZHVsZXM8L2VtPiBzZWN0aW9uIG9mIHRoZQotPGEgaHJlZj0iZG9jL2luZGV4Lmh0bWwiPlB5dGhvbiBMYW5ndWFnZSBhbmQgcnVudGltZSBkb2N1bWVudGF0aW9uPC9hPiwKLWJ1dCBwbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgc29tZSBpbmZvcm1hdGlvbiB0aGVyZSBzdGlsbCBwZXJ0YWlucyB0bwotTWFjIE9TIDkuCi0KLUZ1bGwgYWNjZXNzIHRvIHRoZSBDb2NvYSBBUElzCi1hbmQgdG9vbHMgc3VjaCBhcyBJbnRlcmZhY2UgQnVpbGRlciBpcyBhdmFpbGFibGUgc2VwYXJhdGVseSB0aHJvdWdoIHRoZQotPGEgaHJlZj0icGFja21hbi5odG1sIj5QYWNrYWdlIE1hbmFnZXI8L2E+LjwvcD4KLQotPHA+VGhlIDxhIGhyZWY9InBhY2ttYW4uaHRtbCI+UGFja2FnZSBNYW5hZ2VyPC9hPiBhbHNvIGdpdmVzIHlvdSBhY2Nlc3MgdG8gZXh0ZW5zaW9uCi1wYWNrYWdlcyBmb3IgY3Jvc3MtcGxhdGZvcm0gR1VJIGRldmVsb3BtZW50IChUa2ludGVyLCB3eFB5dGhvbiwgUHlPcGVuR0wpLCAKLWltYWdlIHByb2Nlc3NpbmcgKFBJTCksIHNjaWVudGlmaWMKLWNvbXB1dGluZyAoTnVtZXJpYykgYW5kIG11Y2ggbW9yZS4gPGVtPlB5T2JqQzwvZW0+IGRlc2VydmVzIGEgc3BlY2lhbCBtZW50aW9uOiBpdCBhbGxvd3MKLXRyYW5zcGFyZW50IGFjY2VzcyB0byBDb2NvYSBhbmQgSW50ZXJmYWNlIEJ1aWxkZXIsIHNpbWlsYXIgdG8gd2hhdCBKYXZhIHByb3ZpZGVzLAotdGhlcmVieSBtYWtpbmcgUHl0aG9uIGEgZmlyc3QgY2xhc3MgY2l0aXplbiBpbiB0aGUgTWFjIE9TIFggZGV2ZWxvcGVyIHdvcmxkLiA8L3A+Ci0KLTxwPlB5dGhvbiBzY3JpcHRzIGNhbiBiZSBzYXZlZCBhcyA8ZW0+YXBwbGV0czwvZW0+LCBzZW1pLXN0YW5kYWxvbmUgYXBwbGljYXRpb25zCi10aGF0IHdvcmsganVzdCBsaWtlIGEgbm9ybWFsIGFwcGxpY2F0aW9uLiBBZGRpdGlvbmFsbHkgeW91IGNhbiBldmVuIGNyZWF0ZQotdHJ1ZSBzdGFuZGFsb25lIGFwcGxpY2F0aW9uIHRoYXQgaGF2ZSBldmVyeXRoaW5nIGVtYmVkZGVkIGFuZCBjYW4gYmUKLXNoaXBwZWQgdG8gYW55b25lLCB3aXRob3V0IHRoZSBuZWVkIHRvIGluc3RhbGwgUHl0aG9uLiBZb3UgZG8gPGVtPm5vdDwvZW0+Ci1uZWVkIHRvIGluc3RhbGwgdGhlIEFwcGxlIERldmVsb3BlciBUb29scyBmb3IgdGhpcy4gPC9wPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9wYWNrbWFuLmh0bWwgYi9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3BhY2ttYW4uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU1ZTBkYS4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3BhY2ttYW4uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbiI+Ci08aGVhZD4KLQk8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLQk8dGl0bGU+UHl0aG9uIFBhY2thZ2UgTWFuYWdlcjwvdGl0bGU+Ci0JPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJCQkVkaXQgNi41LjMiPgotCTxsaW5rIHJlbD0iU0hPUlRDVVQgSUNPTiIgaHJlZj0icHl0aG9uc21hbGwuZ2lmIj4KLQk8TUVUQSBOQU1FPSJBcHBsZUljb24iIENPTlRFTlQ9InB5dGhvbnNtYWxsLmdpZiI+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5JbnN0YWxsaW5nIGFkZGl0aW9uYWwgUHl0aG9uIFBhY2thZ2VzPC9oMT4KLQkJPHRhYmxlPgotCQk8dHI+Ci0JCQk8dGQ+Ci0JCQkJPGltZyBzcmM9IlBhY2thZ2VNYW5hZ2VyLmdpZiIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIGFsaWduPSJ0b3AiIGFsdD0iIj4KLQkJCTwvdGQ+Ci0JCQk8dGQ+Ci0JCQkJPHA+VGhlIFB5dGhvbiBQYWNrYWdlIE1hbmFnZXIgaGVscHMgeW91IGluc3RhbGxpbmcgYWRkaXRpb25hbAotCQkJCXBhY2thZ2VzIHRoYXQgZW5oYW5jZSBQeXRob24uIEl0IGRldGVybWluZXMgdGhlIGV4YWN0IE1hY09TIHZlcnNpb24KLQkJCQlhbmQgUHl0aG9uIHZlcnNpb24geW91IGhhdmUgYW5kIHVzZXMgdGhhdCBpbmZvcm1hdGlvbiB0byBkb3dubG9hZAotCQkJCWEgZGF0YWJhc2UgdGhhdCBoYXMgcGFja2FnZXMgdGhhdCBhcmUgdGVzdCBhbmQgdHJpZWQgb24gdGhhdAotCQkJCWNvbWJpbmF0aW9uLiBJbiBvdGhlciB3b3JkczogaWYgc29tZXRoaW5nIGlzIGluIHlvdXIgUGFja2FnZSBNYW5hZ2VyCi0JCQkJd2luZG93IGJ1dCBkb2VzIG5vdCB3b3JrIHlvdSBhcmUgZnJlZSB0byBibGFtZSB0aGUgZGF0YWJhc2UgbWFpbnRhaW5lci48L3A+Ci0JCQkJCi0JCQkJPHA+UGFja2FnZU1hbmFnZXIgdGhlbiBjaGVja3Mgd2hpY2ggb2YgdGhlIHBhY2thZ2VzIHlvdSBoYXZlIGluc3RhbGxlZAotCQkJCWFuZCB3aGljaCBvbmVzIG5vdC4gVGhpcyBzaG91bGQgYWxzbyB3b3JrIHdoZW4geW91IGhhdmUgaW5zdGFsbGVkIHBhY2thZ2VzCi0JCQkJb3V0c2lkZSBvZiBQYWNrYWdlTWFuYWdlci4KLQkJCQlZb3UgY2FuIHNlbGVjdCBwYWNrYWdlcyBhbmQgaW5zdGFsbCB0aGVtLCBhbmQgUGFja2FnZU1hbmFnZXIgd2lsbCB3b3JrIAotCQkJCW91dCB0aGUgcmVxdWlyZW1lbnRzIGFuZCBpbnN0YWxsIHRoZXNlIHRvby48L3A+Ci0JCQkJCi0JCQkJPHA+T2Z0ZW4gUGFja2FnZU1hbmFnZXIgd2lsbCBsaXN0IGEgcGFja2FnZSBpbiB0d28gZmxhdm9yczogYmluYXJ5Ci0JCQkJYW5kIHNvdXJjZS4gQmluYXJ5IHNob3VsZCBhbHdheXMgd29yaywgc291cmNlIHdpbGwgb25seSB3b3JrIGlmCi0JCQkJeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBBcHBsZSBEZXZlbG9wZXIgVG9vbHMuIFBhY2thZ2VNYW5hZ2VyIHdpbGwgd2FybgotCQkJCXlvdSBhYm91dCB0aGlzLCBhbmQgYWxzbyBhYm91dCBvdGhlciBleHRlcm5hbCBkZXBlbmRlbmNpZXMuPC9wPgotCQkJCQotCQkJCTxwPlBhY2thZ2VNYW5hZ2VyIGlzIGF2YWlsYWJsZSBhcyBhIHNlcGFyYXRlIGFwcGxpY2F0aW9uIGFuZCBhbHNvCi0JCQkJYXMgYSBmdW5jdGlvbiBvZiB0aGUgSURFLCB0aHJvdWdoIHRoZSA8dHQ+RmlsZS0mZ3Q7UGFja2FnZSBNYW5hZ2VyPC90dD4gbWVudQotCQkJCWVudHJ5LiA8L3A+Ci0JCQkJCi0JCQkJPGgyPlRyb3VibGVzaG9vdGluZzwvaDI+Ci0JCQkJCi0JCQkJPHA+SWYgcGFja2FnZSBtYW5hZ2VyIGZhaWxzIHRvIG9wZW4gdGhlIGRhdGFiYXNlIGZpcnN0IGNoZWNrIHRoYXQgeW91IGFyZQotCQkJCWNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQuIElmIHlvdSBhcmUgY29ubmVjdGVkIHRoZW4gdGhlIHByb2JsZW0KLQkJCQljb3VsZCBiZSB0aGF0IHRoZXJlIGlzIG5vIGRhdGFiYXNlICh5ZXQ/KSBmb3IgeW91ciB2ZXJzaW9uIG9mIE1hYyBPUyBYLgotCQkJCVlvdSBtYXkgYmUgYWJsZSB0byBmaW5kIGFuIGFsdGVybmF0aXZlCi0JCQkJZGF0YWJhc2UgdGhhdCB3b3JrcyBmb3IgeW91ciBzeXN0ZW0gYXQKLQkJCQk8YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvcGFja21hbiI+aHR0cDovL3d3dy5weXRob24ub3JnL3BhY2ttYW48L2E+LgotCQkJCUluIHRoZSBzdGFuZGFsb25lIFBhY2thZ2UgTWFuYWdlciB5b3UgY2FuIHRoZW4gb3BlbiBzdWNoIGFuIGFsdGVybmF0aXZlIGRhdGFiYXNlCi0JCQkJd2l0aCB0aGUgPHR0PkZpbGUtJmd0O09wZW4gVVJMLi4uPC90dD4gY29tbWFuZCwgYnV0IHlvdSBzaG91bGQgcmVhbGl6ZSB0aGF0Ci0JCQkJeW91IGFyZSBub3cgb24gdW50ZXN0ZWQgZ3JvdW5kLjwvcD4KLQkJCQkKLQkJCQk8cD5Bbm90aGVyIHBvdGVudGlhbCBwcm9ibGVtIHNvdXJjZSBpcyB0aGF0IHlvdSBhcmUgYmVoaW5kIGEgZmlyZXdhbGwuIFRoaXMgdmVyc2lvbgotCQkJCW9mIFBhY2thZ2VNYW5hZ2VyIHVzZXMgdGhlIFVuaXggbWV0aG9kIG9mIHNldHRpbmcgYSBmaXJld2FsbDogeW91IG5lZWQgdG8gc2V0IHRoZQotCQkJCWVudmlyb25tZW50IHZhcmlhYmxlIDx0dD5odHRwX3Byb3h5PC90dD4gdG8gPHR0PiJodHRwOi8vPGk+cHJveHlob3N0PC9pPjo8aT5wb3J0PC9pPiI8L3R0Pi4KLQkJCQlTZWUgPGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vcWEvcWEyMDAxL3FhMTA2Ny5odG1sIj5BcHBsZSBUZWNobmljYWwKLQkJCQlRJmFtcDtBIFFBMTA2NzwvYT4gZm9yIGluc3RydWN0aW9ucy48L3A+Ci0JCQkJCi0JCQk8L3RkPgotCQk8L3RyPgotCQk8L3RhYmxlPgotCQk8aHI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3B5dGhvbi5naWYgYi9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3B5dGhvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNGFhNWQuLjAwMDAwMDAKLS0tIGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9weXRob24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9weXRob25zbWFsbC5naWYgYi9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3B5dGhvbnNtYWxsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQwMjI1ZS4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3B5dGhvbnNtYWxsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vc2NyaXB0aW5nLmh0bWwgYi9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3NjcmlwdGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjMyMWNiLi4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vc2NyaXB0aW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPGh0bWwgbGFuZz0iZW4iPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPkNvbnRyb2xsaW5nIG90aGVyIEFwcGxpY2F0aW9ucyBmcm9tIE1hY1B5dGhvbjwvdGl0bGU+Ci0JPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJCQkVkaXQgNi41LjMiPgotCTxsaW5rIHJlbD0iU0hPUlRDVVQgSUNPTiIgaHJlZj0icHl0aG9uc21hbGwuZ2lmIj4KLQk8TUVUQSBOQU1FPSJBcHBsZUljb24iIENPTlRFTlQ9InB5dGhvbnNtYWxsLmdpZiI+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5Db250cm9sbGluZyBvdGhlciBBcHBsaWNhdGlvbnMgZnJvbSBNYWNQeXRob248L2gxPgotCi08cD5QeXRob24gaGFzIGEgZmFpcmx5IGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPcGVuIFNjcmlwdGluZwotQXJjaGl0ZWN1cmUgKE9TQSwgYWxzbyBjb21tb25seSByZWZlcnJlZCB0byBhcyBBcHBsZVNjcmlwdCksIGFsbG93aW5nCi15b3UgdG8gY29udHJvbCBzY3JpcHRhYmxlIGFwcGxpY2F0aW9ucyBmcm9tIHlvdXIgUHl0aG9uIHByb2dyYW0sCi1hbmQgd2l0aCBhIGZhaXJseSBweXRob25pYyBpbnRlcmZhY2UuIFRoaXMgcGllY2Ugb2YKLVB5dGhvbjo8L3A+Ci0JCi08YmxvY2txdW90ZT48cHJlPjx0dD4KLWltcG9ydCBGaW5kZXIKLQotZiA9IEZpbmRlci5GaW5kZXIoKQotcHJpbnQgZi5nZXQoZi53aW5kb3coMSkubmFtZSkKLTwvdHQ+PC9wcmU+PC9ibG9ja3F1b3RlPgotCi08cD5pcyBpZGVudGljYWwgdG8gdGhlIGZvbGxvd2luZyBwaWVjZSBvZiBBcHBsZVNjcmlwdDo8L3A+Ci0KLTxibG9ja3F1b3RlPjxwcmU+PHR0PgotdGVsbCBhcHBsaWNhdGlvbiAiRmluZGVyIgotCWdldCBuYW1lIG9mIHdpbmRvdyAxCi1lbmQgdGVsbAotPC90dD48L3ByZT48L2Jsb2NrcXVvdGU+Ci0KLTxwPlRvIHNlbmQgQXBwbGVFdmVudHMgdG8gYW4gYXBwbGljYXRpb24geW91IG11c3QgZmlyc3QgY3JlYXRlIHRoZSBQeXRob24KLW1vZHVsZXMgaW50ZXJmYWNpbmcgdG8gdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBhcHBsaWNhdGlvbiAod2hhdAotPHR0PlNjcmlwdCBFZGl0b3I8L3R0PiBjYWxscyB0aGUgIkRpY3Rpb25hcnkiKS4gVXNlIHRoZSBJREUgbWVudSBjb21tYW5kCi08dHQ+RmlsZS0mZ3Q7R2VuZXJhdGUgT1NBIFN1aXRlLi4uPC90dD4gZm9yIHRoaXMuIEZvciBtb3JlIGNvbnRyb2wgcnVuPC9wPgotCi08YmxvY2txdW90ZT48dHQ+Ci1weXRob253IC4uLi9MaWIvcGxhdC1tYWMvZ2Vuc3VpdGVtb2R1bGUucHkgLS1oZWxwCi08L3R0PjwvYmxvY2txdW90ZT4KLQotPHA+ZnJvbSBhIHRlcm1pbmFsIHdpbmRvdy48L3A+Ci0KLTxoMj5DcmVhdGluZyBhIHNjcmlwdGFibGUgYXBwbGljYXRpb24gaW4gUHl0aG9uPC9oMj4KLQotWW91IGNhbiBhbHNvIGNyZWF0ZSBhIHNjcmlwdGFibGUgYXBwbGljYXRpb24gaW4gUHl0aG9uLCBidXQgdGhpcyBpcyBub3QKLXZlcnkgd2VsbCBkb2N1bWVudGVkLiBGb3IgQ2FyYm9uCi1hcHBsaWNhdGlvbnMgeW91IHNob3VsZCBsb29rIGF0IHRoZSA8dHQ+TWluaUFFRnJhbWU8L3R0PiBtb2R1bGUuCi0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vc2hlbGwuaHRtbCBiL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vc2hlbGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZmNTY0Ni4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3NoZWxsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPGh0bWwgbGFuZz0iZW4iPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPlB5dGhvbiBhbmQgdGhlIFVuaXggU2hlbGw8L3RpdGxlPgotCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQkJFZGl0IDYuNS4zIj4KLQk8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9InB5dGhvbnNtYWxsLmdpZiI+Ci0JPE1FVEEgTkFNRT0iQXBwbGVJY29uIiBDT05URU5UPSJweXRob25zbWFsbC5naWYiPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+UnVubmluZyBQeXRob24gc2NyaXB0cyBmcm9tIHRoZSBVbml4IFNoZWxsPC9oMT4KLQkJPHRhYmxlPgotCQk8dHI+Ci0JCQk8dGQ+Ci0JCQkJPGltZyBzcmM9InB5dGhvbi5naWYiIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiBhbGlnbj0idG9wIiBhbHQ9IiI+Ci0JCQk8L3RkPgotCQkJPHRkPgotCQkJCTxwPk1hY1B5dGhvbiAyLjMgaW5zdGFsbHMgYSBwZXJmZWN0bHkgbm9ybWFsIFVuaXggY29tbWFuZGxpbmUKLQkJCQlweXRob24gaW50ZXJwcmV0ZXIgaW4gPHR0Pi91c3IvbG9jYWwvYmluL3B5dGhvbjwvdHQ+LiBBcyBvZiBNYWMgT1MgWCAxMC4yLCBob3dldmVyLAotCQkJCTx0dD4vdXNyL2xvY2FsL2JpbjwvdHQ+IGlzIG5vdCBvbiB0aGUgc2VhcmNoIHBhdGggb2YgeW91ciBzaGVsbC4gTW9yZW92ZXIsCi0JCQkJQXBwbGUncyBweXRob24gMi4yLCB3aGljaCBsaXZlcyBpbiA8dHQ+L3Vzci9iaW48L3R0PiA8ZW0+aXM8L2VtPiBvbiB5b3VyCi0JCQkJc2VhcmNoIHBhdGgsIHNvIHRoaXMgY2FuIGxlYWQgdG8gY29uZnVzaW9uLjwvcD4KLQkJCQkKLQkJCQk8cD5JZiB5b3UgdXNlIDx0dD50Y3NoPC90dD4geW91IHNob3VsZCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lCi0JCQkJdG8gdGhlIGZpbGUgPHR0Pi5sb2dpbjwvdHQ+IGluIHlvdXIgaG9tZSBkaXJlY3RvcnkgYW5kIHJlc3RhcnQgVGVybWluYWw6Ci0JCQkJPGJyPgotCQkJCTx0dD5zZXRlbnYgUEFUSCAvdXNyL2xvY2FsL2JpbjokUEFUSDwvdHQ+Ci0JCQkJPC9wPgotCQkJCQotCQkJCTxwPklmIHlvdSB1c2UgPHR0PmJhc2g8L3R0PiBvciA8dHQ+enNoPC90dD4KLQkJCQl5b3Ugc2hvdWxkIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUKLQkJCQl0byB0aGUgZmlsZSA8dHQ+LnByb2ZpbGU8L3R0PiBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IGFuZCByZXN0YXJ0IFRlcm1pbmFsOgotCQkJCTxicj4KLQkJCQk8dHQ+ZXhwb3J0IFBBVEg9L3Vzci9sb2NhbC9iaW46JFBBVEg8L3R0PgotCQkJCTwvcD4KLQkJCQkKLQkJCQk8aDI+R1VJIHNjcmlwdHM8L2gyPgotCQkJCQotCQkJCTxwPkR1ZSB0byB0aGUgd2F5IE1hY09TIGhhbmRsZXMgd2luZG93aW5nIGFwcGxpY2F0aW9ucyB5b3UgbmVlZCB0byBydW4gCi0JCQkJPGVtPmFsbDwvZW0+IHNjcmlwdHMgdGhhdCB1c2UgdGhlIHdpbmRvdyBtYW5hZ2VyIChiZSBpdCB0aHJvdWdoCi0JCQkJQ2FyYm9uLCBDb2NvYSwgVGtpbnRlciwgd3hQeXRob24sIFB5T3BlbkdMIG9yIGFueXRoaW5nIGVsc2UpIHdpdGggdGhlCi0JCQkJPHR0PnB5dGhvbnc8L3R0PiBpbnRlcnByZXRlciwgYWxzbyBpbnN0YWxsZWQgaW4gPHR0Pi91c3IvbG9jYWwvYmluPC90dD4uPC9wPgotCQkJCQotCQkJCTxwPlJ1bm5pbmcgd2l0aCA8dHQ+cHl0aG9uPC90dD4gcmVzdWx0cyBpbiBhbiBpbmFiaWxpdHkgdG8gYnJpbmcgdGhlCi0JCQkJc2NyaXB0IHRvIHRoZSBmcm9udCwgb3IgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gPC9wPgotCQkJPC90ZD4KLQkJPC90cj4KLQkJPC90YWJsZT4KLQkJPGhyPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9mcmFtZXdvcmsvSW5mby5wbGlzdC5pbiBiL01hYy9SZXNvdXJjZXMvZnJhbWV3b3JrL0luZm8ucGxpc3QuaW4KaW5kZXggYTc1M2U4OC4uYjViMTlkNCAxMDA2NDQKLS0tIGEvTWFjL1Jlc291cmNlcy9mcmFtZXdvcmsvSW5mby5wbGlzdC5pbgorKysgYi9NYWMvUmVzb3VyY2VzL2ZyYW1ld29yay9JbmZvLnBsaXN0LmluCkBAIC0xNyw5ICsxNyw5IEBACiAJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+CiAJPHN0cmluZz5GTVdLPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PgotCTxzdHJpbmc+JVZFUlNJT04lLCAoYykgMjAwNC0yMDA4IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgorCTxzdHJpbmc+JVZFUlNJT04lLCAoYykgMjAwNC0yMDExIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVMb25nVmVyc2lvblN0cmluZzwva2V5PgotCTxzdHJpbmc+JVZFUlNJT04lLCAoYykgMjAwNC0yMDA4IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgorCTxzdHJpbmc+JVZFUlNJT04lLCAoYykgMjAwNC0yMDExIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVTaWduYXR1cmU8L2tleT4KIAk8c3RyaW5nPj8/Pz88L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9pY29uc3JjL0lERS5wc2QgYi9NYWMvUmVzb3VyY2VzL2ljb25zcmMvSURFLnBzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk2MzdiOS4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2ljb25zcmMvSURFLnBzZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QYWNrYWdlTWFuYWdlci5wc2QgYi9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUGFja2FnZU1hbmFnZXIucHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmY0MWIxLi4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QYWNrYWdlTWFuYWdlci5wc2QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uQXBwbGV0LnBzZCBiL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25BcHBsZXQucHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDU4YjUyLi4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25BcHBsZXQucHNkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9pY29uc3JjL1B5dGhvbkNvbXBpbGVkLnBzZCBiL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25Db21waWxlZC5wc2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDYxZmM0ZDEuLjAwMDAwMDAKLS0tIGEvTWFjL1Jlc291cmNlcy9pY29uc3JjL1B5dGhvbkNvbXBpbGVkLnBzZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25JY29uLnBzZCBiL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25JY29uLnBzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZDgxOGRjNi4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uSWNvbi5wc2QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uU291cmNlLnBzZCBiL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25Tb3VyY2UucHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlYmE4ZjI4Li4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25Tb3VyY2UucHNkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9pY29uc3JjL1B5dGhvbldTb3VyY2UucHNkIGIvTWFjL1Jlc291cmNlcy9pY29uc3JjL1B5dGhvbldTb3VyY2UucHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjg0ZDk0Li4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25XU291cmNlLnBzZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGQ3MzA3Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotIiIiU3VpdGUgSGVscCBJbmRleGluZyBUb29sIFN1aXRlOiBTcGVjaWFsIGV2ZW50cyB0aGF0IGp1c3QgdGhlIEhlbHAgSW5kZXhpbmcgVG9vbCBzdXBwb3J0cy4KLUxldmVsIDAsIHZlcnNpb24gMAotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdISVQgJwotCi1jbGFzcyBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzOgotCi0gICAgZGVmIHR1cm5fYW5jaG9yX2luZGV4aW5nKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJ0dXJuIGFuY2hvciBpbmRleGluZzogVHVybnMgYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZi4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFx4ZDJvblx4ZDMgb3IgXHhkMm9mZlx4ZDMsIHRvIHR1cm4gYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdISVQgJwotICAgICAgICBfc3ViY29kZSA9ICd0QW5jJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF90dXJuX3JlbW90ZV9yb290ID0gewotICAgICAgICAnd2l0aF9yb290X3VybCcgOiAnclVSTCcsCi0gICAgfQotCi0gICAgZGVmIHR1cm5fcmVtb3RlX3Jvb3Qoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInR1cm4gcmVtb3RlIHJvb3Q6IFR1cm4gdXNhZ2Ugb2YgcmVtb3RlIHJvb3QgZm9yIGNvbnRlbnQgb24gdGhlIHdlYiBvbiBvciBvZmYuIElmIHR1cm5pbmcgXHhkMm9uXHhkMywgc3VwcGx5IGEgc3RyaW5nIGFzIHNlY29uZCBwYXJhbWV0ZXIuCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBceGQyb25ceGQzIG9yIFx4ZDJvZmZceGQzLCB0byB0dXJuIHJlbW90ZSByb290IG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcm9vdF91cmw6IFRoZSByZW1vdGUgcm9vdCB0byB1c2UsIGluIHRoZSBmb3JtIG9mIFx4ZDJodHRwOi8vd3d3LmFwcGxlLmNvbS9oZWxwL1x4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3RSZW0nCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfdHVybl9yZW1vdGVfcm9vdCkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgdXNlX3Rva2VuaXplcihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIidXNlIHRva2VuaXplcjogVGVsbHMgdGhlIGluZGV4aW5nIHRvb2wgd2hpY2ggdG9rZW5pemVyIHRvIHVzZS4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFNwZWNpZnkgXHhkMkVuZ2xpc2hceGQzLCBceGQyRXVyb3BlYW5ceGQzLCBceGQySmFwYW5lc2VceGQzLCBceGQyS29yZWFuXHhkMywgb3IgXHhkMlNpbXBsZVx4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3VUb2snCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotY2xhc3MgYXBwbGljYXRpb24oYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJhcHBsaWNhdGlvbiAtIEFwcGxpY2F0aW9uIGNsYXNzICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLWNsYXNzIF9Qcm9wX2lkbGVTdGF0dXMoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImlkbGVTdGF0dXMgLSAgIiIiCi0gICAgd2hpY2ggPSAnc0lkbCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1hcHBsaWNhdGlvbi5fc3VwZXJjbGFzc25hbWVzID0gW10KLWFwcGxpY2F0aW9uLl9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2lkbGVTdGF0dXMnIDogX1Byb3BfaWRsZVN0YXR1cywKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci19Ci0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc0lkbCcgOiBfUHJvcF9pZGxlU3RhdHVzLAotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZjc0NWYuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIiIiU3VpdGUgTWlzY2VsbGFuZW91cyBTdGFuZGFyZHM6IFVzZWZ1bCBldmVudHMgdGhhdCBhcmVuXHhkNXQgaW4gYW55IG90aGVyIHN1aXRlCi1MZXZlbCAwLCB2ZXJzaW9uIDAKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnbWlzYycKLQotY2xhc3MgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzOgotCi0gICAgZGVmIHJldmVydChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIicmV2ZXJ0OiBSZXZlcnQgYW4gb2JqZWN0IHRvIHRoZSBtb3N0IHJlY2VudGx5IHNhdmVkIHZlcnNpb24KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IG9iamVjdCB0byByZXZlcnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnbWlzYycKLSAgICAgICAgX3N1YmNvZGUgPSAncnZydCcKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5ZmVlMC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvUmVxdWlyZWRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0iIiJTdWl0ZSBSZXF1aXJlZCBTdWl0ZTogVGVybXMgdGhhdCBldmVyeSBhcHBsaWNhdGlvbiBzaG91bGQgc3VwcG9ydAotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ3JlcWQnCi0KLWZyb20gU3RkU3VpdGVzLlJlcXVpcmVkX1N1aXRlIGltcG9ydCAqCi1jbGFzcyBSZXF1aXJlZF9TdWl0ZV9FdmVudHMoUmVxdWlyZWRfU3VpdGVfRXZlbnRzKToKLQotICAgIHBhc3MKLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU2MmEwMi4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvU3RhbmRhcmRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotIiIiU3VpdGUgU3RhbmRhcmQgU3VpdGU6IENvbW1vbiB0ZXJtcyBmb3IgbW9zdCBhcHBsaWNhdGlvbnMKLUxldmVsIDEsIHZlcnNpb24gMQotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdDb1JlJwotCi1mcm9tIFN0ZFN1aXRlcy5TdGFuZGFyZF9TdWl0ZSBpbXBvcnQgKgotY2xhc3MgU3RhbmRhcmRfU3VpdGVfRXZlbnRzKFN0YW5kYXJkX1N1aXRlX0V2ZW50cyk6Ci0KLSAgICBfYXJnbWFwX2Nsb3NlID0gewotICAgICAgICAnc2F2aW5nJyA6ICdzYXZvJywKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgfQotCi0gICAgZGVmIGNsb3NlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJjbG9zZTogQ2xvc2UgYW4gb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0cyB0byBjbG9zZQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHNhdmluZzogc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGNoYW5nZXMgc2hvdWxkIGJlIHNhdmVkIGJlZm9yZSBjbG9zaW5nCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgaW5fOiB0aGUgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZSBvYmplY3QKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY2xvcycKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9jbG9zZSkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0gICAgICAgIGFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdzYXZvJywgX0VudW1fc2F2bykKLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBkYXRhX3NpemUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiImRhdGEgc2l6ZTogUmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIHNpemUgaXMgdG8gYmUgcmV0dXJuZWQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICBSZXR1cm5zOiB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGluIGJ5dGVzCi0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdkc2l6JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIGdldChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIiZ2V0OiBHZXQgdGhlIGRhdGEgZm9yIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIGlzIHRvIGJlIHJldHVybmVkCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgUmV0dXJuczogVGhlIGRhdGEgZnJvbSB0aGUgb2JqZWN0Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdnZXRkJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF9tYWtlID0gewotICAgICAgICAnbmV3JyA6ICdrb2NsJywKLSAgICAgICAgJ2F0JyA6ICdpbnNoJywKLSAgICAgICAgJ3dpdGhfZGF0YScgOiAnZGF0YScsCi0gICAgICAgICd3aXRoX3Byb3BlcnRpZXMnIDogJ3ByZHQnLAotICAgIH0KLQotICAgIGRlZiBtYWtlKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiIm1ha2U6IE1ha2UgYSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IG5ldzogdGhlIGNsYXNzIG9mIHRoZSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGF0OiB0aGUgbG9jYXRpb24gYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgd2l0aF9kYXRhOiB0aGUgaW5pdGlhbCBkYXRhIGZvciB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcHJvcGVydGllczogdGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgIFJldHVybnM6IE9iamVjdCBzcGVjaWZpZXIgZm9yIHRoZSBuZXcgZWxlbWVudAotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY3JlbCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9tYWtlKQotICAgICAgICBpZiBfbm9fb2JqZWN0IGlzIG5vdCBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgb3BlbihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIib3BlbjogT3BlbiB0aGUgc3BlY2lmaWVkIG9iamVjdChzKQotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBvcGVuLiBDYW4gYmUgYSBsaXN0IG9mIGZpbGVzIG9yIGFuIG9iamVjdCBzcGVjaWZpZXIuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2FldnQnCi0gICAgICAgIF9zdWJjb2RlID0gJ29kb2MnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgcHJpbnRfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJwcmludDogUHJpbnQgdGhlIHNwZWNpZmllZCBvYmplY3QocykKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IE9iamVjdHMgdG8gcHJpbnQuIENhbiBiZSBhIGxpc3Qgb2YgZmlsZXMgb3IgYW4gb2JqZWN0IHNwZWNpZmllci4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnYWV2dCcKLSAgICAgICAgX3N1YmNvZGUgPSAncGRvYycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2F2ZSA9IHsKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgICAgICdhcycgOiAnZmx0cCcsCi0gICAgfQotCi0gICAgZGVmIHNhdmUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNhdmU6IHNhdmUgYSBzZXQgb2Ygb2JqZWN0cwotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBzYXZlLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGluXzogdGhlIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgb2JqZWN0KHMpCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgYXM6IHRoZSBmaWxlIHR5cGUgb2YgdGhlIGRvY3VtZW50IGluIHdoaWNoIHRvIHNhdmUgdGhlIGRhdGEKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2F2ZScKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zYXZlKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2V0ID0gewotICAgICAgICAndG8nIDogJ2RhdGEnLAotICAgIH0KLQotICAgIGRlZiBzZXQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNldDogU2V0IGFuIG9iamVjdFx4ZDVzIGRhdGEKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3QgdG8gY2hhbmdlCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgdG86IHRoZSBuZXcgdmFsdWUKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2V0ZCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZXQpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLWNsYXNzIGFwcGxpY2F0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiYXBwbGljYXRpb24gLSBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLSMgICAgICAgIGVsZW1lbnQgJ2N3aW4nIGFzIFsnaW5keCcsICduYW1lJywgJ3JlbGUnXQotIyAgICAgICAgZWxlbWVudCAnZG9jdScgYXMgWyduYW1lJ10KLQotY2xhc3Mgd2luZG93KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIid2luZG93IC0gQSBXaW5kb3cgIiIiCi0gICAgd2FudCA9ICdjd2luJwotY2xhc3MgX1Byb3BfYm91bmRzKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJib3VuZHMgLSB0aGUgYm91bmRhcnkgcmVjdGFuZ2xlIGZvciB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BibmQnCi0gICAgd2FudCA9ICdxZHJ0JwotY2xhc3MgX1Byb3BfY2xvc2VhYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJjbG9zZWFibGUgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIGNsb3NlIGJveD8gIiIiCi0gICAgd2hpY2ggPSAnaGNsYicKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9mbG9hdGluZyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiZmxvYXRpbmcgLSBEb2VzIHRoZSB3aW5kb3cgZmxvYXQ/ICIiIgotICAgIHdoaWNoID0gJ2lzZmwnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfaW5kZXgoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImluZGV4IC0gdGhlIG51bWJlciBvZiB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BpZHgnCi0gICAgd2FudCA9ICdsb25nJwotY2xhc3MgX1Byb3BfbW9kYWwoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiIm1vZGFsIC0gSXMgdGhlIHdpbmRvdyBtb2RhbD8gIiIiCi0gICAgd2hpY2ggPSAncG1vZCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9uYW1lKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJuYW1lIC0gdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncG5hbScKLSAgICB3YW50ID0gJ2l0eHQnCi1jbGFzcyBfUHJvcF9wb3NpdGlvbihhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicG9zaXRpb24gLSB1cHBlciBsZWZ0IGNvb3JkaW5hdGVzIG9mIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwcG9zJwotICAgIHdhbnQgPSAnUURwdCcKLWNsYXNzIF9Qcm9wX3Jlc2l6YWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicmVzaXphYmxlIC0gSXMgdGhlIHdpbmRvdyByZXNpemFibGU/ICIiIgotICAgIHdoaWNoID0gJ3Byc3onCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfdGl0bGVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ0aXRsZWQgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIHRpdGxlIGJhcj8gIiIiCi0gICAgd2hpY2ggPSAncHRpdCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF92aXNpYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ2aXNpYmxlIC0gaXMgdGhlIHdpbmRvdyB2aXNpYmxlPyAiIiIKLSAgICB3aGljaCA9ICdwdmlzJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3pvb21hYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tYWJsZSAtIElzIHRoZSB3aW5kb3cgem9vbWFibGU/ICIiIgotICAgIHdoaWNoID0gJ2lzem0nCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3Bfem9vbWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tZWQgLSBJcyB0aGUgd2luZG93IHpvb21lZD8gIiIiCi0gICAgd2hpY2ggPSAncHp1bScKLSAgICB3YW50ID0gJ2Jvb2wnCi0KLWNsYXNzIGRvY3VtZW50KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiZG9jdW1lbnQgLSBBIERvY3VtZW50ICIiIgotICAgIHdhbnQgPSAnZG9jdScKLWNsYXNzIF9Qcm9wX21vZGlmaWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJtb2RpZmllZCAtIEhhcyB0aGUgZG9jdW1lbnQgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdCBzYXZlPyAiIiIKLSAgICB3aGljaCA9ICdpbW9kJwotICAgIHdhbnQgPSAnYm9vbCcKLWFwcGxpY2F0aW9uLl9zdXBlcmNsYXNzbmFtZXMgPSBbXQotYXBwbGljYXRpb24uX3ByaXZwcm9wZGljdCA9IHsKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci0gICAgJ2RvY3VtZW50JyA6IGRvY3VtZW50LAotICAgICd3aW5kb3cnIDogd2luZG93LAotfQotd2luZG93Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotd2luZG93Ll9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2JvdW5kcycgOiBfUHJvcF9ib3VuZHMsCi0gICAgJ2Nsb3NlYWJsZScgOiBfUHJvcF9jbG9zZWFibGUsCi0gICAgJ2Zsb2F0aW5nJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpbmRleCcgOiBfUHJvcF9pbmRleCwKLSAgICAnbW9kYWwnIDogX1Byb3BfbW9kYWwsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLSAgICAncG9zaXRpb24nIDogX1Byb3BfcG9zaXRpb24sCi0gICAgJ3Jlc2l6YWJsZScgOiBfUHJvcF9yZXNpemFibGUsCi0gICAgJ3RpdGxlZCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3Zpc2libGUnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAnem9vbWFibGUnIDogX1Byb3Bfem9vbWFibGUsCi0gICAgJ3pvb21lZCcgOiBfUHJvcF96b29tZWQsCi19Ci13aW5kb3cuX3ByaXZlbGVtZGljdCA9IHsKLX0KLWRvY3VtZW50Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotZG9jdW1lbnQuX3ByaXZwcm9wZGljdCA9IHsKLSAgICAnbW9kaWZpZWQnIDogX1Byb3BfbW9kaWZpZWQsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLX0KLWRvY3VtZW50Ll9wcml2ZWxlbWRpY3QgPSB7Ci19Ci1fRW51bV9zYXZvID0gewotICAgICd5ZXMnIDogJ3llcyAnLCAgICAgIyBTYXZlIG9iamVjdHMgbm93Ci0gICAgJ25vJyA6ICdubyAgJywgICAgICAjIERvIG5vdCBzYXZlIG9iamVjdHMKLSAgICAnYXNrJyA6ICdhc2sgJywgICAgICMgQXNrIHRoZSB1c2VyIHdoZXRoZXIgdG8gc2F2ZQotfQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdjd2luJyA6IHdpbmRvdywKLSAgICAnZG9jdScgOiBkb2N1bWVudCwKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2hjbGInIDogX1Byb3BfY2xvc2VhYmxlLAotICAgICdpbW9kJyA6IF9Qcm9wX21vZGlmaWVkLAotICAgICdpc2ZsJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpc3ptJyA6IF9Qcm9wX3pvb21hYmxlLAotICAgICdwYm5kJyA6IF9Qcm9wX2JvdW5kcywKLSAgICAncGlkeCcgOiBfUHJvcF9pbmRleCwKLSAgICAncG1vZCcgOiBfUHJvcF9tb2RhbCwKLSAgICAncG5hbScgOiBfUHJvcF9uYW1lLAotICAgICdwcG9zJyA6IF9Qcm9wX3Bvc2l0aW9uLAotICAgICdwcnN6JyA6IF9Qcm9wX3Jlc2l6YWJsZSwKLSAgICAncHRpdCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3B2aXMnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAncHp1bScgOiBfUHJvcF96b29tZWQsCi19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc2F2bycgOiBfRW51bV9zYXZvLAotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzU5ZGY1Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSIiIgotUGFja2FnZSBnZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi0iIiIKLWltcG9ydCBhZXRvb2xzCi1FcnJvciA9IGFldG9vbHMuRXJyb3IKLWltcG9ydCBTdGFuZGFyZF9TdWl0ZQotaW1wb3J0IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZQotaW1wb3J0IG9kZHNfYW5kX2VuZHMKLWltcG9ydCBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcwotaW1wb3J0IFJlcXVpcmVkX1N1aXRlCi0KLQotX2NvZGVfdG9fbW9kdWxlID0gewotICAgICdDb1JlJyA6IFN0YW5kYXJkX1N1aXRlLAotICAgICdISVQgJyA6IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZSwKLSAgICAnT2RkcycgOiBvZGRzX2FuZF9lbmRzLAotICAgICdtaXNjJyA6IE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLAotICAgICdyZXFkJyA6IFJlcXVpcmVkX1N1aXRlLAotfQotCi0KLQotX2NvZGVfdG9fZnVsbG5hbWUgPSB7Ci0gICAgJ0NvUmUnIDogKCdIZWxwSW5kZXhpbmdUb29sLlN0YW5kYXJkX1N1aXRlJywgJ1N0YW5kYXJkX1N1aXRlJyksCi0gICAgJ0hJVCAnIDogKCdIZWxwSW5kZXhpbmdUb29sLkhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZScsICdIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUnKSwKLSAgICAnT2RkcycgOiAoJ0hlbHBJbmRleGluZ1Rvb2wub2Rkc19hbmRfZW5kcycsICdvZGRzX2FuZF9lbmRzJyksCi0gICAgJ21pc2MnIDogKCdIZWxwSW5kZXhpbmdUb29sLk1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJywgJ01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJyksCi0gICAgJ3JlcWQnIDogKCdIZWxwSW5kZXhpbmdUb29sLlJlcXVpcmVkX1N1aXRlJywgJ1JlcXVpcmVkX1N1aXRlJyksCi19Ci0KLWZyb20gU3RhbmRhcmRfU3VpdGUgaW1wb3J0ICoKLWZyb20gSGVscF9JbmRleGluZ19Ub29sX1N1aXRlIGltcG9ydCAqCi1mcm9tIG9kZHNfYW5kX2VuZHMgaW1wb3J0ICoKLWZyb20gTWlzY2VsbGFuZW91c19TdGFuZGFyZHMgaW1wb3J0ICoKLWZyb20gUmVxdWlyZWRfU3VpdGUgaW1wb3J0ICoKLQotZGVmIGdldGJhc2VjbGFzc2VzKHYpOgotICAgIGlmIG5vdCBnZXRhdHRyKHYsICdfcHJvcGRpY3QnLCBOb25lKToKLSAgICAgICAgdi5fcHJvcGRpY3QgPSB7fQotICAgICAgICB2Ll9lbGVtZGljdCA9IHt9Ci0gICAgICAgIGZvciBzdXBlcmNsYXNzbmFtZSBpbiBnZXRhdHRyKHYsICdfc3VwZXJjbGFzc25hbWVzJywgW10pOgotICAgICAgICAgICAgc3VwZXJjbGFzcyA9IGV2YWwoc3VwZXJjbGFzc25hbWUpCi0gICAgICAgICAgICBnZXRiYXNlY2xhc3NlcyhzdXBlcmNsYXNzKQotICAgICAgICAgICAgdi5fcHJvcGRpY3QudXBkYXRlKGdldGF0dHIoc3VwZXJjbGFzcywgJ19wcm9wZGljdCcsIHt9KSkKLSAgICAgICAgICAgIHYuX2VsZW1kaWN0LnVwZGF0ZShnZXRhdHRyKHN1cGVyY2xhc3MsICdfZWxlbWRpY3QnLCB7fSkpCi0gICAgICAgIHYuX3Byb3BkaWN0LnVwZGF0ZShnZXRhdHRyKHYsICdfcHJpdnByb3BkaWN0Jywge30pKQotICAgICAgICB2Ll9lbGVtZGljdC51cGRhdGUoZ2V0YXR0cih2LCAnX3ByaXZlbGVtZGljdCcsIHt9KSkKLQotaW1wb3J0IFN0ZFN1aXRlcwotCi0jCi0jIFNldCBwcm9wZXJ0eSBhbmQgZWxlbWVudCBkaWN0aW9uYXJpZXMgbm93IHRoYXQgYWxsIGNsYXNzZXMgaGF2ZSBiZWVuIGRlZmluZWQKLSMKLWdldGJhc2VjbGFzc2VzKHdpbmRvdykKLWdldGJhc2VjbGFzc2VzKGFwcGxpY2F0aW9uKQotZ2V0YmFzZWNsYXNzZXMoZG9jdW1lbnQpCi1nZXRiYXNlY2xhc3NlcyhhcHBsaWNhdGlvbikKLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2N3aW4nIDogd2luZG93LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdkb2N1JyA6IGRvY3VtZW50LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi0KLWNsYXNzIEhlbHBJbmRleGluZ1Rvb2woU3RhbmRhcmRfU3VpdGVfRXZlbnRzLAotICAgICAgICBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzLAotICAgICAgICBvZGRzX2FuZF9lbmRzX0V2ZW50cywKLSAgICAgICAgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzLAotICAgICAgICBSZXF1aXJlZF9TdWl0ZV9FdmVudHMsCi0gICAgICAgIGFldG9vbHMuVGFsa1RvKToKLSAgICBfc2lnbmF0dXJlID0gJ2hpdGknCi0KLSAgICBfbW9kdWxlTmFtZSA9ICdIZWxwSW5kZXhpbmdUb29sJwpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL29kZHNfYW5kX2VuZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VlNDZmMy4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSIiIlN1aXRlIG9kZHMgYW5kIGVuZHM6IFRoaW5ncyB0aGF0IHNob3VsZCBiZSBpbiBzb21lIHN0YW5kYXJkIHN1aXRlLCBidXQgYXJlblx4ZDV0Ci1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnT2RkcycKLQotY2xhc3Mgb2Rkc19hbmRfZW5kc19FdmVudHM6Ci0KLSAgICBkZWYgc2VsZWN0KHNlbGYsIF9vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNlbGVjdDogU2VsZWN0IHRoZSBzcGVjaWZpZWQgb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHRvIHNlbGVjdAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdtaXNjJwotICAgICAgICBfc3ViY29kZSA9ICdzbGN0JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9SRUFETUUgYi9NYWMvVG9vbHMvRG9jL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0ZDUzZC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUluIHRoaXMgZGlyZWN0b3J5IHlvdSBjYW4gYnVpbGQgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluIGEgZm9ybSB0aGF0Ci1pcyBzdWl0YWJsZSBmb3IgYWNjZXNzIHdpdGggQXBwbGUgSGVscCBWaWV3ZXIuIFRoaXMgd2lsbCBlbmFibGUgdGhlCi0iUHl0aG9uIERvY3VtZW50YXRpb24iIG1lbnUgZW50cmllcyBpbiB0aGUgTWFjUHl0aG9uIElERSBIZWxwIG1lbnUuCi0KLVVuZm9ydHVuYXRlbHkgdGhlIHByb2NlZHVyZSB0byBidWlsZCB0aGUgZG9jcyBpcyBub3QgdmVyeSBzdHJlYW1saW5lZC4KLQotRmlyc3QsIGVkaXQgc2V0dXAucHkuIEF0IHRoZSB0b3AsIGVkaXQgTUFKT1JfVkVSU0lPTiBhbmQgTUlOT1JfVkVSU0lPTiwKLWFuZCBjaGVjayB0aGF0IERFU1RESVIgbWFrZXMgc2Vuc2UuIFRoZSBkb2N1bWVudGF0aW9uIHdpbGwgYmUgaW5zdGFsbGVkCi1pbnNpZGUgUHl0aG9uSURFLmFwcC4KLQotSW4gRG9jQnVpbGQuaW5pdGlhbGl6ZV9vcHRpb25zLCBzZXQgc2VsZi5kb3dubG9hZCB0byBUcnVlIGlmIHlvdSB3YW50IHRvCi1kb3dubG9hZCB0aGUgZG9jcy4gU2V0IGl0IHRvIEZhbHNlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBkb2NzIGZyb20KLXRoZSBzb3VyY2UgdHJlZSwgYnV0IHRoaXMgcmVxdWlyZXMgTGFUZXggYW5kIGxvdHMgb2Ygb3RoZXIgc3R1ZmYuCi1Eb2FibGUsIGJ1dCBub3QgZWFzeS4KLQotU2Vjb25kLCBpZiB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGUgZG9jcyB5b3UgbWF5IG5lZWQgdG8gZG8gYSBjb3VwbGUKLW1vcmUgZWRpdHMuIFRoZSB3YXkgdGhlIGRvY3MgYXJlIHBhY2thZ2VkIHdpbGwgb2Z0ZW4gY2hhbmdlIGJldHdlZW4KLW1ham9yIHJlbGVhc2VzLiBGaWRkbGUgRG9jQnVpbGQuZG93bmxvYWREb2NzIHRvIG1ha2UgaXQgZG8gdGhlIHJpZ2h0Ci10aGluZyAoZG93bmxvYWQgdGhlIGRvY3MgZnJvbSBweXRob24ub3JnLCB1bnBhY2sgdGhlbSwgcmVuYW1lIHRoZQotZGlyZWN0b3J5IHRvICJidWlsZC9odG1sIikuCi0KLUFmdGVyIHRoZXNlIGVkaXRzIHlvdSBzaG91bGQgYmUgcmVhZHkgdG8gcm9sbC4gInB5dGhvbncgc2V0dXAucHkgYnVpbGQiCi1zaG91bGQgZG93bmxvYWQgYW5kIHVucGFjayAob3IgYnVpbGQpIHRoZSBkb2NzLiBOZXh0LCBpdCB3aWxsIGRvIHNvbWUKLW1hZ2ljIHRvIG1ha2UgdGhlIGRvY3MgaW5kZXhhYmxlLiBGaW5hbGx5LCBpdCB3aWxsIHJ1biB0aGUgQXBwbGUgSGVscAotSW5kZXhpbmcgVG9vbC4gKFRoaXMgbGFzdCBzdGVwIGlzIHRoZSByZWFzb24geW91IG11c3QgdXNlICJweXRob253IiBhcwotb3Bwb3NlZCB0byAicHl0aG9uIikuIFVzdWFsbHkgaXQgd2lsbCB0aW1lIG91dCB3aGlsZSB3YWl0aW5nIGZvciBBSElUIHRvCi1kbyBpdHMgd29yay4gV2FpdCB1bnRpbCBBSElUIGlzIGRvbmUuCi0KLU5vdyB5b3UncmUgcmVhZHkgdG8gaW5zdGFsbCB3aXRoICJweXRob24gc2V0dXAucHkgaW5zdGFsbCIuCi0KLUFmdGVyIHRoaXMgaXMgZG9uZSB0ZXN0IHlvdXIgd29yay4gRmlyZSB1cCBQeXRob25JREUsIGFuZCBjaGVjayB0aGF0Ci1IZWxwLT5QeXRob24gRG9jdW1lbnRhdGlvbiBicmluZ3MgdXAgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIEhlbHAgVmlld2VyLgotQWxzbyBvcGVuIGFuIElERSBlZGl0IHdpbmRvdywgdHlwZSBzb21ldGhpbmcgbGlrZSAiaW1wb3J0IHN5cyIsIHNlbGVjdAotImltcG9ydCIsIGFuZCB1c2UgSGVscC0+TG9va3VwIGluIFB5dGhvbiBEb2N1bWVudGF0aW9uIHRvIGNoZWNrIHRoYXQgdGhlCi1pbmRleCBoYXMgYmVlbiBnZW5lcmF0ZWQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weSBiL01hYy9Ub29scy9Eb2Mvc2V0dXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YzY3OGYuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi0jIEJ1aWxkIGFuZCBpbnN0YWxsIGFuIEFwcGxlIEhlbHAgVmlld2VyIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgUHl0aG9uCi0jIGRvY3VtZW50YXRpb24gaW50byB0aGUgZnJhbWV3b3JrLgotIyBDb2RlIGJ5IEJpbGwgRmFuY2hlciwgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgYnkgSmFjayBKYW5zZW4uCi0jCi0jIFlvdSBtdXN0IHJ1biB0aGlzIGFzIGEgdHdvLXN0ZXAgcHJvY2VzcwotIyAxLiBweXRob24gc2V0dXBEb2NzLnB5IGJ1aWxkCi0jIDIuIFdhaXQgZm9yIEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCB0byBmaW5pc2gKLSMgMy4gcHl0aG9uIHNldHVwRG9jcy5weSBpbnN0YWxsCi0jCi0jIFRvIGRvOgotIyAtIHRlc3Qgd2hldGhlciB0aGUgZG9jcyBhcmUgYXZhaWxhYmxlIGxvY2FsbHkgYmVmb3JlIGRvd25sb2FkaW5nCi0jIC0gZml4IGJ1aWxkRG9jc0Zyb21Tb3VyY2UKLSMgLSBHZXQgZG9jdW1lbnRhdGlvbiB2ZXJzaW9uIGZyb20gc3lzLnZlcnNpb24sIGZhbGxiYWNrIHRvIDIuMi4xCi0jIC0gU2VlIGlmIHdlIGNhbiBzb21laG93IGRldGVjdCB0aGF0IEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCBpcyBmaW5pc2hlZAotIyAtIGRhdGFfZmlsZXMgdG8gc2V0dXAoKSBkb2Vzbid0IHNlZW0gdGhlIHJpZ2h0IHdheSB0byBwYXNzIHRoZSBhcmd1bWVudHMKLSMKLWltcG9ydCBzeXMsIG9zLCByZQotZnJvbSBkaXN0dXRpbHMuY21kIGltcG9ydCBDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkIGltcG9ydCBidWlsZAotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKLWZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgY29weV9maWxlCi1mcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgY29weV90cmVlCi1mcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IGxvZwotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnLCBkZXBfdXRpbAotZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY2hhbmdlX3Jvb3QKLWltcG9ydCBIZWxwSW5kZXhpbmdUb29sCi1pbXBvcnQgQ2FyYm9uLkZpbGUKLWltcG9ydCB0aW1lCi0KLU1BSk9SX1ZFUlNJT049JzIuNCcKLU1JTk9SX1ZFUlNJT049JzIuNC4xJwotREVTVERJUj0nL0FwcGxpY2F0aW9ucy9NYWNQeXRob24tJXMvUHl0aG9uSURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9QeXRob25Eb2N1bWVudGF0aW9uJyAlIE1BSk9SX1ZFUlNJT04KLQotY2xhc3MgRG9jQnVpbGQoYnVpbGQpOgotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIGJ1aWxkLmluaXRpYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBzZWxmLmJ1aWxkX2h0bWwgPSBOb25lCi0gICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IE5vbmUKLSAgICAgICAgc2VsZi5kb3dubG9hZCA9IDEKLSAgICAgICAgc2VsZi5kb2NfdmVyc2lvbiA9IE1JTk9SX1ZFUlNJT04gIyBPbmx5IG5lZWRlZCBpZiBkb3dubG9hZCBpcyB0cnVlCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgYnVpbGQuZmluYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2h0bWwgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfaHRtbCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Jhc2UsICdodG1sJykKLSAgICAgICAgaWYgc2VsZi5idWlsZF9kZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCAnUHl0aG9uRG9jdW1lbnRhdGlvbicpCi0KLSAgICBkZWYgc3Bhd24oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzcGF3bihhcmdzLCAxLCAgc2VsZi52ZXJib3NlLCBzZWxmLmRyeV9ydW4pCi0KLSAgICBkZWYgZG93bmxvYWREb2NzKHNlbGYpOgotICAgICAgICB3b3JrZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgIyBYWFggTm90ZTogdGhlIG5leHQgc3RyaW5ncyBtYXkgY2hhbmdlIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uCi0gICAgICAgIHVybCA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi9kb2MvJXMvaHRtbC0lcy50YXIuYnoyJyAlIFwKLSAgICAgICAgICAgICAgICAoc2VsZi5kb2NfdmVyc2lvbixzZWxmLmRvY192ZXJzaW9uKQotICAgICAgICB0YXJmaWxlID0gJ2h0bWwtJXMudGFyLmJ6MicgJSBzZWxmLmRvY192ZXJzaW9uCi0gICAgICAgIGRpcm5hbWUgPSAnUHl0aG9uLURvY3MtJXMnICUgc2VsZi5kb2NfdmVyc2lvbgotCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYnVpbGRfaHRtbCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICclczogYWxyZWFkeSBleGlzdHMsIHBsZWFzZSByZW1vdmUgYW5kIHRyeSBhZ2FpbicgJSBzZWxmLmJ1aWxkX2h0bWwKLSAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLnNwYXduKCdjdXJsJywnLU8nLCB1cmwpCi0gICAgICAgIHNlbGYuc3Bhd24oJ3RhcicsICcteGpmJywgdGFyZmlsZSkKLSAgICAgICAgb3MucmVuYW1lKGRpcm5hbWUsICdodG1sJykKLSAgICAgICAgb3MuY2hkaXIod29ya2RpcikKLSMjICAgICAgICBwcmludCAiKiogUGxlYXNlIHVucGFjayAlcyIgJSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCB0YXJmaWxlKQotIyMgICAgICAgIHByaW50ICIqKiBVbnBhY2sgdGhlIGZpbGVzIGludG8gJXMiICUgc2VsZi5idWlsZF9odG1sCi0jIyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiWW91IG5lZWQgdG8gdW5wYWNrIHRoZSBkb2NzIG1hbnVhbGx5IgotCi0gICAgZGVmIGJ1aWxkRG9jc0Zyb21Tb3VyY2Uoc2VsZik6Ci0gICAgICAgIHNyY2RpciA9ICcuLi8uLi8uLicKLSAgICAgICAgZG9jZGlyID0gb3MucGF0aC5qb2luKHNyY2RpciwgJ0RvYycpCi0gICAgICAgIGh0bWxkaXIgPSBvcy5wYXRoLmpvaW4oZG9jZGlyLCAnaHRtbCcpCi0gICAgICAgIHNwYXduKCgnbWFrZScsJy0tZGlyZWN0b3J5JywgZG9jZGlyLCAnaHRtbCcpLCAxLCBzZWxmLnZlcmJvc2UsIHNlbGYuZHJ5X3J1bikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9odG1sKQotICAgICAgICBjb3B5X3RyZWUoaHRtbGRpciwgc2VsZi5idWlsZF9odG1sKQotCi0gICAgZGVmIGVuc3VyZUh0bWwoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgaWYgc2VsZi5kb3dubG9hZDoKLSAgICAgICAgICAgICAgICBzZWxmLmRvd25sb2FkRG9jcygpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYnVpbGREb2NzRnJvbVNvdXJjZSgpCi0KLSAgICBkZWYgaGFja0luZGV4KHNlbGYpOgotICAgICAgICBpbmRfaHRtbCA9ICdpbmRleC5odG1sJwotICAgICAgICAjcHJpbnQgJ3NlbGYuYnVpbGRfZGVzdCA9Jywgc2VsZi5idWlsZF9kZXN0Ci0gICAgICAgIGhhY2tlZEluZGV4ID0gZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kZXN0LCBpbmRfaHRtbCksJ3cnKQotICAgICAgICBvcmlnSW5kZXggPSBmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2h0bWwsaW5kX2h0bWwpKQotICAgICAgICByID0gcmUuY29tcGlsZSgnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uKjwvc3R5bGU+JywgcmUuRE9UQUxMKQotICAgICAgICBoYWNrZWRJbmRleC53cml0ZShyLnN1YignPE1FVEEgTkFNRT0iQXBwbGVUaXRsZSIgQ09OVEVOVD0iUHl0aG9uIERvY3VtZW50YXRpb24iPicsb3JpZ0luZGV4LnJlYWQoKSkpCi0KLSAgICBkZWYgaGFja0ZpbGUoc2VsZixkLGYpOgotICAgICAgICBvcmlnUGF0aCA9IG9zLnBhdGguam9pbihkLGYpCi0gICAgICAgIGFzc2VydChvcmlnUGF0aFs6bGVuKHNlbGYuYnVpbGRfaHRtbCldID09IHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3V0UGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsIGRbbGVuKHNlbGYuYnVpbGRfaHRtbCkrMTpdLCBmKQotICAgICAgICAobmFtZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoZikKLSAgICAgICAgaWYgb3MucGF0aC5pc2RpcihvcmlnUGF0aCk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChvdXRQYXRoKQotICAgICAgICBlbGlmIGV4dCA9PSAnLmh0bWwnOgotICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOiBwcmludCAnaGFja2luZyAlcyB0byAlcycgJSAob3JpZ1BhdGgsb3V0UGF0aCkKLSAgICAgICAgICAgIGhhY2tlZEZpbGUgPSBmaWxlKG91dFBhdGgsICd3JykKLSAgICAgICAgICAgIG9yaWdGaWxlID0gZmlsZShvcmlnUGF0aCwncicpCi0gICAgICAgICAgICBoYWNrZWRGaWxlLndyaXRlKHNlbGYuci5zdWIoJzxkbD48ZHQ+PGRkPicsIG9yaWdGaWxlLnJlYWQoKSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb3B5X2ZpbGUob3JpZ1BhdGgsIG91dFBhdGgpCi0KLSAgICBkZWYgaGFja0h0bWwoc2VsZik6Ci0gICAgICAgIHNlbGYuciA9IHJlLmNvbXBpbGUoJzxkbD48ZGQ+JykKLSAgICAgICAgb3MucGF0aC53YWxrKHNlbGYuYnVpbGRfaHRtbCwgc2VsZi52aXNpdCwgTm9uZSkKLQotICAgIGRlZiB2aXNpdChzZWxmLCBkdW1teSwgZGlybmFtZSwgZmlsZW5hbWVzKToKLSAgICAgICAgZm9yIGYgaW4gZmlsZW5hbWVzOgotICAgICAgICAgICAgc2VsZi5oYWNrRmlsZShkaXJuYW1lLCBmKQotCi0gICAgZGVmIG1ha2VIZWxwSW5kZXgoc2VsZik6Ci0gICAgICAgIGFwcCA9ICcvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwJwotICAgICAgICBzZWxmLnNwYXduKCdvcGVuJywgJy1hJywgYXBwICwgc2VsZi5idWlsZF9kZXN0KQotICAgICAgICBwcmludCAiUGxlYXNlIHdhaXQgdW50aWwgQXBwbGUgSGVscCBJbmRleGluZyBUb29sIGZpbmlzaGVzIGJlZm9yZSBpbnN0YWxsaW5nIgotCi0gICAgZGVmIG1ha2VIZWxwSW5kZXgoc2VsZik6Ci0gICAgICAgIGFwcCA9IEhlbHBJbmRleGluZ1Rvb2wuSGVscEluZGV4aW5nVG9vbChzdGFydD0xKQotICAgICAgICBhcHAub3BlbihDYXJib24uRmlsZS5GU1NwZWMoc2VsZi5idWlsZF9kZXN0KSkKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIHN0YXJ0Li4uIikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICMgVGhpcyBpcyBiYWQgZGVzaWduIGluIHRoZSBzdWl0ZSBnZW5lcmF0aW9uIGNvZGUhCi0gICAgICAgICAgICBpZGxlID0gYXBwLl9nZXQoSGVscEluZGV4aW5nVG9vbC5IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUuX1Byb3BfaWRsZVN0YXR1cygpKQotICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKLSAgICAgICAgICAgIGlmIG5vdCBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIGZpbmlzaC4uLiIpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgYmFkIGRlc2lnbiBpbiB0aGUgc3VpdGUgZ2VuZXJhdGlvbiBjb2RlIQotICAgICAgICAgICAgaWRsZSA9IGFwcC5fZ2V0KEhlbHBJbmRleGluZ1Rvb2wuSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLl9Qcm9wX2lkbGVTdGF0dXMoKSkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCi0gICAgICAgICAgICBpZiBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLmVuc3VyZUh0bWwoKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCBcCi0gICAgICAgICAgICAiQ2FuJ3QgZmluZCBzb3VyY2UgZm9sZGVyIGZvciBkb2N1bWVudGF0aW9uLiIKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kZXN0KQotICAgICAgICBpZiBkZXBfdXRpbC5uZXdlcihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9odG1sLCdpbmRleC5odG1sJyksIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsJ2luZGV4Lmh0bWwnKSk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgICAgICBzZWxmLmhhY2tIdG1sKCkKLSAgICAgICAgICAgIHNlbGYuaGFja0luZGV4KCkKLSAgICAgICAgICAgIHNlbGYubWFrZUhlbHBJbmRleCgpCi0KLWNsYXNzIEFIVkRvY0luc3RhbGwoQ29tbWFuZCk6Ci0gICAgZGVzY3JpcHRpb24gPSAiaW5zdGFsbCBBcHBsZSBIZWxwIFZpZXdlciBodG1sIGZpbGVzIgotICAgIHVzZXJfb3B0aW9ucyA9IFsoJ2luc3RhbGwtZG9jPScsICdkJywKLSAgICAgICAgICAgICdkaXJlY3RvcnkgdG8gaW5zdGFsbCBIVE1MIHRyZWUnKSwKLSAgICAgICAgICAgICAoJ3Jvb3Q9JywgTm9uZSwKLSAgICAgICAgICAgICAiaW5zdGFsbCBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoaXMgYWx0ZXJuYXRlIHJvb3QgZGlyZWN0b3J5IiksCi0gICAgICAgICAgICBdCi0KLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBOb25lCi0gICAgICAgIHNlbGYuaW5zdGFsbF9kb2MgPSBOb25lCi0gICAgICAgIHNlbGYucHJlZml4ID0gTm9uZQotICAgICAgICBzZWxmLnJvb3QgPSBOb25lCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5zZXRfdW5kZWZpbmVkX29wdGlvbnMoJ2luc3RhbGwnLAotICAgICAgICAgICAgICAgICgncHJlZml4JywgJ3ByZWZpeCcpLAotICAgICAgICAgICAgICAgICgncm9vdCcsICdyb290JykpCi0jICAgICAgICAgICAgICAgaW1wb3J0IHBkYiA7IHBkYi5zZXRfdHJhY2UoKQotICAgICAgICBidWlsZF9jbWQgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGQnKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2Rlc3QgaXMgTm9uZToKLSAgICAgICAgICAgIGJ1aWxkX2NtZCA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZCcpCi0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBidWlsZF9jbWQuYnVpbGRfZGVzdAotICAgICAgICBpZiBzZWxmLmluc3RhbGxfZG9jIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmluc3RhbGxfZG9jID0gb3MucGF0aC5qb2luKHNlbGYucHJlZml4LCBERVNURElSKQotICAgICAgICBwcmludCAnSU5TVEFMTCcsIHNlbGYuYnVpbGRfZGVzdCwgJy0+Jywgc2VsZi5pbnN0YWxsX2RvYwotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgcHJpbnQgIlJ1bm5pbmcgSW5zdGFsbGVyIgotICAgICAgICBpbnN0bG9jID0gc2VsZi5pbnN0YWxsX2RvYwotICAgICAgICBpZiBzZWxmLnJvb3Q6Ci0gICAgICAgICAgICBpbnN0bG9jID0gY2hhbmdlX3Jvb3Qoc2VsZi5yb290LCBpbnN0bG9jKQotICAgICAgICBzZWxmLm1rcGF0aChpbnN0bG9jKQotICAgICAgICBjb3B5X3RyZWUoc2VsZi5idWlsZF9kZXN0LCBpbnN0bG9jKQotICAgICAgICBwcmludCAiSW5zdGFsbGF0aW9uIGNvbXBsZXRlIgotCi1kZWYgbXVuZ2VWZXJzaW9uKGluZmlsZSwgb3V0ZmlsZSk6Ci0gICAgaSA9IGZpbGUoaW5maWxlLCdyJykKLSAgICBvID0gZmlsZShvdXRmaWxlLCd3JykKLSAgICBvLndyaXRlKHJlLnN1YignXCRcKFZFUlNJT05cKScsc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdWRVJTSU9OJyksaS5yZWFkKCkpKQotICAgIGkuY2xvc2UoKQotICAgIG8uY2xvc2UoKQotCi1kZWYgbWFpbigpOgotICAgICMgdHVybiBvZmYgd2FybmluZ3Mgd2hlbiBkZXByZWNhdGVkIG1vZHVsZXMgYXJlIGltcG9ydGVkCi0jIyAgICAgIGltcG9ydCB3YXJuaW5ncwotIyMgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIixjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCi0gICAgc2V0dXAobmFtZSA9ICdEb2N1bWVudGF0aW9uJywKLSAgICAgICAgICAgIHZlcnNpb24gPSAnJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sCi0gICAgICAgICAgICBjbWRjbGFzcyA9IHsnaW5zdGFsbF9kYXRhJzpBSFZEb2NJbnN0YWxsLCAnYnVpbGQnOkRvY0J1aWxkfSwKLSAgICAgICAgICAgIGRhdGFfZmlsZXMgPSBbJ2R1bW15J10sCi0gICAgICAgICAgICApCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvZml4YXBwbGVweXRob24yMy5weSBiL01hYy9Ub29scy9maXhhcHBsZXB5dGhvbjIzLnB5CmluZGV4IDZiYTU0MDEuLjAzYzc5OWIgMTAwNjQ0Ci0tLSBhL01hYy9Ub29scy9maXhhcHBsZXB5dGhvbjIzLnB5CisrKyBiL01hYy9Ub29scy9maXhhcHBsZXB5dGhvbjIzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIiIiZml4YXBwbGVweXRob24yMyAtIEZpeCBBcHBsZS1pbnN0YWxsZWQgUHl0aG9uIDIuMyAob24gTWFjIE9TIFggMTAuMykKIAogUHl0aG9uIDIuMyAoYW5kIDIuMy5YIGZvciBYPDUpIGhhdmUgdGhlIHByb2JsZW0gdGhhdCBidWlsZGluZyBhbiBleHRlbnNpb24KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9weXRob253LmMgYi9NYWMvVG9vbHMvcHl0aG9udy5jCmluZGV4IGU3MGE3NmYuLjA4ZTA2OWIgMTAwNjQ0Ci0tLSBhL01hYy9Ub29scy9weXRob253LmMKKysrIGIvTWFjL1Rvb2xzL3B5dGhvbncuYwpAQCAtMywxNSArMywxNzYgQEAKICAqIGFwcGxpY2F0aW9uIGJ1bmRsZSBpbnNpZGUgdGhlIFB5dGhvbiBmcmFtZXdvcmsuIFRoaXMgaXMgbmVlZGVkIHRvIHJ1bgogICogR1VJIGNvZGU6IHNvbWUgR1VJIEFQSSdzIGRvbid0IHdvcmsgdW5sZXNzIHRoZSBwcm9ncmFtIGlzIGluc2lkZSBhbgogICogYXBwbGljYXRpb24gYnVuZGxlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSB1c2VzIHBvc2l4X3NwYXduIHJhdGhlciB0aGFuIHBsYWluIGV4ZWN2IGJlY2F1c2Ugd2UgbmVlZAorICogc2xpZ2h0bHkgbW9yZSBjb250cm9sIG92ZXIgaG93IHRoZSAicmVhbCIgaW50ZXJwcmV0ZXIgaXMgZXhlY3V0ZWQuCisgKgorICogT24gT1NYIDEwLjQgKGFuZCBlYXJsaWVyKSB0aGlzIGZhbGxzIGJhY2sgdG8gdXNpbmcgZXhlYyBiZWNhdXNlIHRoZQorICogcG9zaXhfc3Bhd252IGZ1bmN0aW9ucyBhcmVuJ3QgYXZhaWxhYmxlIHRoZXJlLgogICovCisjcHJhZ21hIHdlYWtfaW1wb3J0IHBvc2l4X3NwYXduYXR0cl9pbml0CisjcHJhZ21hIHdlYWtfaW1wb3J0IHBvc2l4X3NwYXduYXR0cl9zZXRiaW5wcmVmX25wCisjcHJhZ21hIHdlYWtfaW1wb3J0IHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncworI3ByYWdtYSB3ZWFrX2ltcG9ydCBwb3NpeF9zcGF3bgorCisjaW5jbHVkZSA8UHl0aG9uLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZkZWYgSEFWRV9TUEFXTl9ICisjaW5jbHVkZSA8c3Bhd24uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi1zdGF0aWMgY2hhciBQeXRob25bXSA9IFBZVEhPTldFWEVDVVRBQkxFOwogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKLQlhcmd2WzBdID0gUHl0aG9uOwotCWV4ZWN2KFB5dGhvbiwgYXJndik7Ci0JZXJyKDEsICJleGVjdjogJXMiLCBQeXRob24pOwotCS8qIE5PVFJFQUNIRUQgKi8KK2V4dGVybiBjaGFyKiogZW52aXJvbjsKKworLyoKKyAqIExvY2F0ZSB0aGUgcHl0aG9uIGZyYW1ld29yayBieSBsb29raW5nIGZvciB0aGUKKyAqIGxpYnJhcnkgdGhhdCBjb250YWlucyBQeV9Jbml0aWFsaXplLgorICoKKyAqIEluIGEgcmVndWxhciBmcmFtZXdvcmsgdGhlIHN0cnVjdHVyZSBpczoKKyAqCisgKiAgICBQeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLzIuNworICogICAgICAgICAgICAgIC9QeXRob24KKyAqICAgICAgICAgICAgICAvUmVzb3VyY2VzL1B5dGhvbi5hcHAvQ29udGVudHMvTWFjT1MvUHl0aG9uCisgKgorICogSW4gYSB2aXJ0dWFsZW52IHN0eWxlIHN0cnVjdHVyZSB0aGUgZXhwZWN0ZWQKKyAqIHN0cnVjdHVyZSBpczoKKyAqCisgKiAgICBST09UCisgKiAgICAgICAvYmluL3B5dGhvbncKKyAqICAgICAgIC8uUHl0aG9uICAgPC0gdGhlIGR5bGliCisgKiAgICAgICAvLlJlc291cmNlcy9QeXRob24uYXBwL0NvbnRlbnRzL01hY09TL1B5dGhvbgorICoKKyAqIE5PVEU6IHZpcnR1YWxlbnYncyBhcmUgbm90IGFuIG9mZmljaWFsbHkgc3VwcG9ydGVkCisgKiBmZWF0dXJlLCBzdXBwb3J0IGZvciB0aGF0IHN0cnVjdHVyZSBpcyBwcm92aWRlZCBhcworICogYSBjb252ZW5pZW5jZS4KKyAqLworc3RhdGljIGNoYXIqIGdldF9weXRob25fcGF0aCh2b2lkKQoreworICAgIHNpemVfdCBsZW47CisgICAgRGxfaW5mbyBpbmZvOworICAgIGNoYXIqIGVuZDsKKyAgICBjaGFyKiBnX3BhdGg7CisKKyAgICBpZiAoZGxhZGRyKFB5X0luaXRpYWxpemUsICZpbmZvKSA9PSAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGxlbiA9IHN0cmxlbihpbmZvLmRsaV9mbmFtZSk7CisKKyAgICBnX3BhdGggPSBtYWxsb2MobGVuKzYwKTsKKyAgICBpZiAoZ19wYXRoID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3RyY3B5KGdfcGF0aCwgaW5mby5kbGlfZm5hbWUpOworICAgIGVuZCA9IGdfcGF0aCArIGxlbiAtIDE7CisgICAgd2hpbGUgKGVuZCAhPSBnX3BhdGggJiYgKmVuZCAhPSAnLycpIHsKKyAgICAgICAgZW5kIC0tOworICAgIH0KKyAgICBlbmQrKzsKKyAgICBpZiAoKmVuZCA9PSAnLicpIHsKKyAgICAgICAgZW5kKys7CisgICAgfQorICAgIHN0cmNweShlbmQsICJSZXNvdXJjZXMvUHl0aG9uLmFwcC9Db250ZW50cy9NYWNPUy8iIFBZVEhPTkZSQU1FV09SSyk7CisKKyAgICByZXR1cm4gZ19wYXRoOworfQorCisjaWZkZWYgSEFWRV9TUEFXTl9ICitzdGF0aWMgdm9pZAorc2V0dXBfc3Bhd25hdHRyKHBvc2l4X3NwYXduYXR0cl90KiBzcGF3bmF0dHIpCit7CisgICAgc2l6ZV90IG9jb3VudDsKKyAgICBzaXplX3QgY291bnQ7CisgICAgY3B1X3R5cGVfdCBjcHVfdHlwZXNbMV07CisgICAgc2hvcnQgZmxhZ3MgPSAwOworI2lmZGVmIF9fTFA2NF9fCisgICAgaW50ICAgY2g7CisjZW5kaWYKKworICAgIGlmICgoZXJybm8gPSBwb3NpeF9zcGF3bmF0dHJfaW5pdChzcGF3bmF0dHIpKSAhPSAwKSB7CisgICAgICAgIGVycigyLCAicG9zaXhfc3Bhd25hdHRyX2ludCIpOworICAgICAgICAvKiBOT1RSRUFDSFRFRCAqLworICAgIH0KKworICAgIGNvdW50ID0gMTsKKworICAgIC8qIFJ1biB0aGUgcmVhbCBweXRob24gZXhlY3V0YWJsZSB1c2luZyB0aGUgc2FtZSBhcmNoaXR1cmUgYXMgdGhpcworICAgICAqIGV4ZWN1dGFibGUsIHRoaXMgYWxsb3dzIHVzZXJzIHRvIGNvbnRyb2xlIHRoZSBhcmNoaXRlY3R1cmUgdXNpbmcKKyAgICAgKiAiYXJjaCAtcHBjIHB5dGhvbiIKKyAgICAgKi8KKworI2lmIGRlZmluZWQoX19wcGM2NF9fKQorICAgIGNwdV90eXBlc1swXSA9IENQVV9UWVBFX1BPV0VSUEM2NDsKKworI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorICAgIGNwdV90eXBlc1swXSA9IENQVV9UWVBFX1g4Nl82NDsKKworI2VsaWYgZGVmaW5lZChfX3BwY19fKQorICAgIGNwdV90eXBlc1swXSA9IENQVV9UWVBFX1BPV0VSUEM7CisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQorICAgIGNwdV90eXBlc1swXSA9IENQVV9UWVBFX1g4NjsKKyNlbHNlCisjICAgICAgIGVycm9yICJVbmtub3duIENQVSIKKyNlbmRpZgorCisgICAgaWYgKHBvc2l4X3NwYXduYXR0cl9zZXRiaW5wcmVmX25wKHNwYXduYXR0ciwgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3R5cGVzLCAmb2NvdW50KSA9PSAtMSkgeworICAgICAgICBlcnIoMSwgInBvc2l4X3NwYXduYXR0cl9zZXRiaW5wcmVmIik7CisgICAgICAgIC8qIE5PVFJFQUNIVEVEICovCisgICAgfQorICAgIGlmIChjb3VudCAhPSBvY291bnQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwb3NpeF9zcGF3bmF0dHJfc2V0YmlucHJlZiBmYWlsZWQgdG8gY29weVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgICAgIC8qIE5PVFJFQUNIVEVEICovCisgICAgfQorCisKKyAgICAvKgorICAgICAqIFNldCBmbGFnIHRoYXQgY2F1c2VzIHBvc2l4X3NwYXduIHRvIGJlaGF2ZSBsaWtlIGV4ZWN2CisgICAgICovCisgICAgZmxhZ3MgfD0gUE9TSVhfU1BBV05fU0VURVhFQzsKKyAgICBpZiAoKGVycm5vID0gcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzKHNwYXduYXR0ciwgZmxhZ3MpKSAhPSAwKSB7CisgICAgICAgIGVycigxLCAicG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzIik7CisgICAgICAgIC8qIE5PVFJFQUNIVEVEICovCisgICAgfQorfQorI2VuZGlmCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKKyAgICBjaGFyKiBleGVjX3BhdGggPSBnZXRfcHl0aG9uX3BhdGgoKTsKKworICAgIC8qCisgICAgICogTGV0IGFyZ3ZbMF0gcmVmZXIgdG8gdGhlIG5ldyBpbnRlcnByZXRlci4gVGhpcyBpcyBuZWVkZWQgdG8KKyAgICAgKiBnZXQgdGhlIGVmZmVjdCB3ZSB3YW50IG9uIE9TWCAxMC41IG9yIGVhcmxpZXIuIFRoYXQgaXMsIHdpdGhvdXQKKyAgICAgKiBjaGFuZ2luZyBhcmd2WzBdIHRoZSByZWFsIGludGVycHJldGVyIHdvbid0IGhhdmUgYWNjZXNzIHRvCisgICAgICogdGhlIFdpbmRvdyBTZXJ2ZXIuCisgICAgICovCisgICAgYXJndlswXSA9IGV4ZWNfcGF0aDsKKworI2lmZGVmIEhBVkVfU1BBV05fSAorCisgICAgLyogV2UncmUgd2Vhay1saW5raW5nIHRvIHBvc2l4LXNwYXdudiB0byBlbnN1cmUgdGhhdAorICAgICAqIGFuIGV4ZWN1dGFibGUgYnVpbGQgb24gMTAuNSBjYW4gd29yayBvbiAxMC40LgorICAgICAqLworICAgIGlmIChwb3NpeF9zcGF3biAhPSBOVUxMKSB7CisgICAgICAgIHBvc2l4X3NwYXduYXR0cl90IHNwYXduYXR0ciA9IE5VTEw7CisKKworICAgICAgICBzZXR1cF9zcGF3bmF0dHIoJnNwYXduYXR0cik7CisgICAgICAgIHBvc2l4X3NwYXduKE5VTEwsIGV4ZWNfcGF0aCwgTlVMTCwKKyAgICAgICAgICAgICZzcGF3bmF0dHIsIGFyZ3YsIGVudmlyb24pOworICAgICAgICBlcnIoMSwgInBvc2l4X3NwYXduOiAlcyIsIGV4ZWNfcGF0aCk7CisgICAgfQorI2VuZGlmCisgICAgZXhlY3ZlKGV4ZWNfcGF0aCwgYXJndiwgZW52aXJvbik7CisgICAgZXJyKDEsICJleGVjdmU6ICVzIiwgYXJndlswXSk7CisgICAgLyogTk9UUkVBQ0hFRCAqLwogfQpkaWZmIC0tZ2l0IGEvTWFjL3NjcmlwdHMvQnVpbGRBcHBsZXQucHkgYi9NYWMvc2NyaXB0cy9CdWlsZEFwcGxldC5weQppbmRleCBlZWViODJiLi5hNzZlZDkwIDEwMDY0NAotLS0gYS9NYWMvc2NyaXB0cy9CdWlsZEFwcGxldC5weQorKysgYi9NYWMvc2NyaXB0cy9CdWlsZEFwcGxldC5weQpAQCAtMTEyLDkgKzExMiw2IEBACiAgICAgICAgICAgICAgICAgdXNhZ2UoKQogICAgICAgICAgICAgZWxpZiBvcHQgaW4gKCctZCcsICctLWRlc3Ryb290Jyk6CiAgICAgICAgICAgICAgICAgZGVzdHJvb3QgPSBhcmcKLSAgICAgICAgIyBPbiBPUzkgYWx3YXlzIGJlIHZlcmJvc2UKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdtYWMnIGFuZCBub3QgdmVyYm9zZToKLSAgICAgICAgICAgIHZlcmJvc2UgPSAnZGVmYXVsdCcKICAgICAgICAgIyBMb29wIG92ZXIgYWxsIGZpbGVzIHRvIGJlIHByb2Nlc3NlZAogICAgICAgICBmb3IgZmlsZW5hbWUgaW4gYXJnczoKICAgICAgICAgICAgIGNyLCB0cCA9IE1hY09TLkdldENyZWF0b3JBbmRUeXBlKGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTWFjL3NjcmlwdHMvemFwcHljZmlsZXMucHkgYi9NYWMvc2NyaXB0cy96YXBweWNmaWxlcy5weQppbmRleCBhODE5M2MxLi42ZDM1NzQ4IDEwMDY0NAotLS0gYS9NYWMvc2NyaXB0cy96YXBweWNmaWxlcy5weQorKysgYi9NYWMvc2NyaXB0cy96YXBweWNmaWxlcy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KICIiIlJlY3Vyc2l2ZWx5IHphcCBhbGwgLnB5YyBhbmQgLnB5byBmaWxlcyIiIgogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCkBAIC05LDE1ICs5LDggQEAKIAogZGVmIG1haW4oKToKICAgICBpZiBub3Qgc3lzLmFyZ3ZbMTpdOgotICAgICAgICBpZiBvcy5uYW1lID09ICdtYWMnOgotICAgICAgICAgICAgaW1wb3J0IEVhc3lEaWFsb2dzCi0gICAgICAgICAgICBkaXIgPSBFYXN5RGlhbG9ncy5Bc2tGb2xkZXIobWVzc2FnZT0nRGlyZWN0b3J5IHRvIHphcCBweWMgZmlsZXMgaW4nKQotICAgICAgICAgICAgaWYgbm90IGRpcjoKLSAgICAgICAgICAgICAgICBzeXMuZXhpdCgwKQotICAgICAgICAgICAgemFwcHljKGRpcikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICdVc2FnZTogemFwcHljIGRpciAuLi4nCi0gICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBwcmludCAnVXNhZ2U6IHphcHB5YyBkaXIgLi4uJworICAgICAgICBzeXMuZXhpdCgxKQogICAgIGZvciBkaXIgaW4gc3lzLmFyZ3ZbMTpdOgogICAgICAgICB6YXBweWMoZGlyKQogCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5wcmUuaW4gYi9NYWtlZmlsZS5wcmUuaW4KaW5kZXggMDMyOWQ2Ny4uNjk5OGVlZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKyBiL01ha2VmaWxlLnByZS5pbgpAQCAtMzYsNiArMzYsOCBAQAogUkFOTElCPQkJQFJBTkxJQkAKIFNWTlZFUlNJT049CUBTVk5WRVJTSU9OQAogCitHTlVMRD0gICAgICAgICAgQEdOVUxEQAorCiAjIFNoZWxsIHVzZWQgYnkgbWFrZSAoc29tZSB2ZXJzaW9ucyBkZWZhdWx0IHRvIHRoZSBsb2dpbiBzaGVsbCwgd2hpY2ggaXMgYmFkKQogU0hFTEw9CQkvYmluL3NoCiAKQEAgLTY3LDYgKzY5LDcgQEAKIFNHSV9BQkk9CUBTR0lfQUJJQAogQ0NTSEFSRUQ9CUBDQ1NIQVJFREAKIExJTktGT1JTSEFSRUQ9CUBMSU5LRk9SU0hBUkVEQAorQVJGTEFHUz0JQEFSRkxBR1NACiAjIEV4dHJhIEMgZmxhZ3MgYWRkZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbnRlcnByZXRlciBvYmplY3QgZmlsZXMuCiBDRkxBR1NGT1JTSEFSRUQ9QENGTEFHU0ZPUlNIQVJFREAKICMgQyBmbGFncyB1c2VkIGZvciBidWlsZGluZyB0aGUgaW50ZXJwcmV0ZXIgb2JqZWN0IGZpbGVzCkBAIC0xMDIsOCArMTA1LDkgQEAKIAogIyBTeW1ib2xzIHVzZWQgZm9yIHVzaW5nIHNoYXJlZCBsaWJyYXJpZXMKIFNPPQkJQFNPQAotTERTSEFSRUQ9CUBMRFNIQVJFREAKLUJMRFNIQVJFRD0JQEJMRFNIQVJFREAKK0xEU0hBUkVEPQlATERTSEFSRURAICQoTERGTEFHUykKK0JMRFNIQVJFRD0JQEJMRFNIQVJFREAgJChMREZMQUdTKQorTERDWFhTSEFSRUQ9CUBMRENYWFNIQVJFREAKIERFU1RTSEFSRUQ9CSQoQklOTElCREVTVCkvbGliLWR5bmxvYWQKIAogIyBFeGVjdXRhYmxlIHN1ZmZpeCAoLmV4ZSBvbiBXaW5kb3dzIGFuZCBNYWMgT1MgWCkKQEAgLTIwMiw2ICsyMDYsOCBAQAogR1JBTU1BUl9JTlBVVD0JJChzcmNkaXIpL0dyYW1tYXIvR3JhbW1hcgogCiAKK0xJQkZGSV9JTkNMVURFRElSPQlATElCRkZJX0lOQ0xVREVESVJACisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFBhcnNlcgogUEdFTj0JCVBhcnNlci9wZ2VuJChFWEUpCkBAIC0yMjQsNiArMjMwLDcgQEAKIFBHT0JKUz0JCVwKIAkJT2JqZWN0cy9vYm1hbGxvYy5vIFwKIAkJUHl0aG9uL215c25wcmludGYubyBcCisJCVB5dGhvbi9weWN0eXBlLm8gXAogCQlQYXJzZXIvdG9rZW5pemVyX3BnZW4ubyBcCiAJCVBhcnNlci9wcmludGdyYW1tYXIubyBcCiAJCVBhcnNlci9wZ2VubWFpbi5vCkBAIC0yNjQsNyArMjcxLDYgQEAKIAkJUHl0aG9uL2dldGFyZ3MubyBcCiAJCVB5dGhvbi9nZXRjb21waWxlci5vIFwKIAkJUHl0aG9uL2dldGNvcHlyaWdodC5vIFwKLQkJUHl0aG9uL2dldG10aW1lLm8gXAogCQlQeXRob24vZ2V0cGxhdGZvcm0ubyBcCiAJCVB5dGhvbi9nZXR2ZXJzaW9uLm8gXAogCQlQeXRob24vZ3JhbWluaXQubyBcCkBAIC0yNzYsNiArMjgyLDcgQEAKIAkJUHl0aG9uL215c25wcmludGYubyBcCiAJCVB5dGhvbi9wZWVwaG9sZS5vIFwKIAkJUHl0aG9uL3B5YXJlbmEubyBcCisJCVB5dGhvbi9weWN0eXBlLm8gXAogCQlQeXRob24vcHlmcGUubyBcCiAJCVB5dGhvbi9weW1hdGgubyBcCiAJCVB5dGhvbi9weXN0YXRlLm8gXApAQCAtMjg3LDYgKzI5NCw3IEBACiAJCVB5dGhvbi9nZXRvcHQubyBcCiAJCVB5dGhvbi9weXN0cmNtcC5vIFwKIAkJUHl0aG9uL3B5c3RydG9kLm8gXAorCQlQeXRob24vZHRvYS5vIFwKIAkJUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLm8gXAogCQlQeXRob24vZm9ybWF0dGVyX3N0cmluZy5vIFwKIAkJUHl0aG9uLyQoRFlOTE9BREZJTEUpIFwKQEAgLTMwMyw2ICszMTEsNyBAQAogCQlPYmplY3RzL2J1ZmZlcm9iamVjdC5vIFwKIAkJT2JqZWN0cy9ieXRlc19tZXRob2RzLm8gXAogCQlPYmplY3RzL2J5dGVhcnJheW9iamVjdC5vIFwKKwkJT2JqZWN0cy9jYXBzdWxlLm8gXAogCQlPYmplY3RzL2NlbGxvYmplY3QubyBcCiAJCU9iamVjdHMvY2xhc3NvYmplY3QubyBcCiAJCU9iamVjdHMvY29iamVjdC5vIFwKQEAgLTMyMSw2ICszMzAsNyBAQAogCQlPYmplY3RzL2xpc3RvYmplY3QubyBcCiAJCU9iamVjdHMvbG9uZ29iamVjdC5vIFwKIAkJT2JqZWN0cy9kaWN0b2JqZWN0Lm8gXAorCQlPYmplY3RzL21lbW9yeW9iamVjdC5vIFwKIAkJT2JqZWN0cy9tZXRob2RvYmplY3QubyBcCiAJCU9iamVjdHMvbW9kdWxlb2JqZWN0Lm8gXAogCQlPYmplY3RzL29iamVjdC5vIFwKQEAgLTM1Miw3ICszNjIsNyBAQAogCiAjIERlZmF1bHQgdGFyZ2V0CiBhbGw6CQlidWlsZF9hbGwKLWJ1aWxkX2FsbDoJJChCVUlMRFBZVEhPTikgb2xkc2hhcmVkbW9kcyBzaGFyZWRtb2RzCitidWlsZF9hbGw6CSQoQlVJTERQWVRIT04pIG9sZHNoYXJlZG1vZHMgc2hhcmVkbW9kcyBnZGJob29rcwogCiAjIENvbXBpbGUgYSBiaW5hcnkgd2l0aCBnY2MgcHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uLgogcHJvZmlsZS1vcHQ6CkBAIC0zODgsMzQgKzM5OCwzNCBAQAogCQkJJChCTERMSUJSQVJZKSAkKExJQlMpICQoTU9ETElCUykgJChTWVNMSUJTKSAkKExETEFTVCkKIAogcGxhdGZvcm06ICQoQlVJTERQWVRIT04pCi0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLUUgLWMgJ2ltcG9ydCBzeXMgOyBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0gOyBwcmludCBnZXRfcGxhdGZvcm0oKSsiLSIrc3lzLnZlcnNpb25bMDozXScgPnBsYXRmb3JtCisJJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLUUgLWMgJ2ltcG9ydCBzeXMgOyBmcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X3BsYXRmb3JtIDsgcHJpbnQgZ2V0X3BsYXRmb3JtKCkrIi0iK3N5cy52ZXJzaW9uWzA6M10nID5wbGF0Zm9ybQogCiAKICMgQnVpbGQgdGhlIHNoYXJlZCBtb2R1bGVzCiBzaGFyZWRtb2RzOiAkKEJVSUxEUFlUSE9OKQogCUBjYXNlICQkTUFLRUZMQUdTIGluIFwKLQkqcyopICQoUlVOU0hBUkVEKSBDQz0nJChDQyknIExEU0hBUkVEPSckKEJMRFNIQVJFRCknIExERkxBR1M9JyQoTERGTEFHUyknIE9QVD0nJChPUFQpJyAuLyQoQlVJTERQWVRIT04pIC1FICQoc3JjZGlyKS9zZXR1cC5weSAtcSBidWlsZDs7IFwKLQkqKSAkKFJVTlNIQVJFRCkgQ0M9JyQoQ0MpJyBMRFNIQVJFRD0nJChCTERTSEFSRUQpJyBMREZMQUdTPSckKExERkxBR1MpJyBPUFQ9JyQoT1BUKScgLi8kKEJVSUxEUFlUSE9OKSAtRSAkKHNyY2Rpcikvc2V0dXAucHkgYnVpbGQ7OyBcCisJKnMqKSAkKFJVTlNIQVJFRCkgQ0M9JyQoQ0MpJyBMRFNIQVJFRD0nJChCTERTSEFSRUQpJyBPUFQ9JyQoT1BUKScgLi8kKEJVSUxEUFlUSE9OKSAtRSAkKHNyY2Rpcikvc2V0dXAucHkgLXEgYnVpbGQ7OyBcCisJKikgJChSVU5TSEFSRUQpIENDPSckKENDKScgTERTSEFSRUQ9JyQoQkxEU0hBUkVEKScgT1BUPSckKE9QVCknIC4vJChCVUlMRFBZVEhPTikgLUUgJChzcmNkaXIpL3NldHVwLnB5IGJ1aWxkOzsgXAogCWVzYWMKIAogIyBCdWlsZCBzdGF0aWMgbGlicmFyeQogIyBhdm9pZCBsb25nIGNvbW1hbmQgbGluZXMsIHNhbWUgYXMgTElCUkFSWV9PQkpTCiAkKExJQlJBUlkpOiAkKExJQlJBUllfT0JKUykKIAktcm0gLWYgJEAKLQkkKEFSKSBjciAkQCBNb2R1bGVzL2dldGJ1aWxkaW5mby5vCi0JJChBUikgY3IgJEAgJChQQVJTRVJfT0JKUykKLQkkKEFSKSBjciAkQCAkKE9CSkVDVF9PQkpTKQotCSQoQVIpIGNyICRAICQoUFlUSE9OX09CSlMpCi0JJChBUikgY3IgJEAgJChNT0RVTEVfT0JKUykgJChTSUdOQUxfT0JKUykKLQkkKEFSKSBjciAkQCAkKE1PRE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCBNb2R1bGVzL2dldGJ1aWxkaW5mby5vCisJJChBUikgJChBUkZMQUdTKSAkQCAkKFBBUlNFUl9PQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpFQ1RfT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoUFlUSE9OX09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE1PRFVMRV9PQkpTKSAkKFNJR05BTF9PQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChNT0RPQkpTKQogCSQoUkFOTElCKSAkQAogCiBsaWJweXRob24kKFZFUlNJT04pLnNvOiAkKExJQlJBUllfT0JKUykKIAlpZiB0ZXN0ICQoSU5TVFNPTkFNRSkgIT0gJChMRExJQlJBUlkpOyB0aGVuIFwKLQkJJChMRFNIQVJFRCkgJChMREZMQUdTKSAtV2wsLWgkKElOU1RTT05BTUUpIC1vICQoSU5TVFNPTkFNRSkgJChMSUJSQVJZX09CSlMpICQoTU9ETElCUykgJChTSExJQlMpICQoTElCQykgJChMSUJNKSAkKExETEFTVCk7IFwKKwkJJChCTERTSEFSRUQpIC1XbCwtaCQoSU5TVFNPTkFNRSkgLW8gJChJTlNUU09OQU1FKSAkKExJQlJBUllfT0JKUykgJChNT0RMSUJTKSAkKFNITElCUykgJChMSUJDKSAkKExJQk0pICQoTERMQVNUKTsgXAogCQkkKExOKSAtZiAkKElOU1RTT05BTUUpICRAOyBcCiAJZWxzZSBcCi0JCSQoTERTSEFSRUQpICQoTERGTEFHUykgLW8gJEAgJChMSUJSQVJZX09CSlMpICQoTU9ETElCUykgJChTSExJQlMpICQoTElCQykgJChMSUJNKSAkKExETEFTVCk7IFwKKwkJJChCTERTSEFSRUQpIC1vICRAICQoTElCUkFSWV9PQkpTKSAkKE1PRExJQlMpICQoU0hMSUJTKSAkKExJQkMpICQoTElCTSkgJChMRExBU1QpOyBcCiAJZmkKIAogbGlicHl0aG9uJChWRVJTSU9OKS5keWxpYjogJChMSUJSQVJZX09CSlMpCkBAIC00MjMsNyArNDMzLDE4IEBACiAJCSAKIAogbGlicHl0aG9uJChWRVJTSU9OKS5zbDogJChMSUJSQVJZX09CSlMpCi0JJChMRFNIQVJFRCkgJChMREZMQUdTKSAtbyAkQCAkKExJQlJBUllfT0JKUykgJChNT0RMSUJTKSAkKFNITElCUykgJChMSUJDKSAkKExJQk0pICQoTERMQVNUKQorCSQoTERTSEFSRUQpIC1vICRAICQoTElCUkFSWV9PQkpTKSAkKE1PRExJQlMpICQoU0hMSUJTKSAkKExJQkMpICQoTElCTSkgJChMRExBU1QpCisKKyMgQ29weSB1cCB0aGUgZ2RiIHB5dGhvbiBob29rcyBpbnRvIGEgcG9zaXRpb24gd2hlcmUgdGhleSBjYW4gYmUgYXV0b21hdGljYWxseQorIyBsb2FkZWQgYnkgZ2RiIGR1cmluZyBMaWIvdGVzdC90ZXN0X2dkYi5weQorIworIyBEaXN0cmlidXRvcnMgYXJlIGxpa2VseSB0byB3YW50IHRvIGluc3RhbGwgdGhpcyBzb21ld2hlcmUgZWxzZSBlLmcuIHJlbGF0aXZlCisjIHRvIHRoZSBzdHJpcHBlZCBEV0FSRiBkYXRhIGZvciB0aGUgc2hhcmVkIGxpYnJhcnkuCitnZGJob29rczogJChCVUlMRFBZVEhPTiktZ2RiLnB5CisKK1NSQ19HREJfSE9PS1M9JChzcmNkaXIpL1Rvb2xzL2dkYi9saWJweXRob24ucHkKKyQoQlVJTERQWVRIT04pLWdkYi5weTogJChTUkNfR0RCX0hPT0tTKQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19HREJfSE9PS1MpICQoQlVJTERQWVRIT04pLWdkYi5weQogCiAjIFRoaXMgcnVsZSBpcyBoZXJlIGZvciBPUEVOU1RFUC9SaGFwc29keS9NYWNPU1guIEl0IGJ1aWxkcyBhIHRlbXBvcmFyeQogIyBtaW5pbWFsIGZyYW1ld29yayAobm90IGluY2x1ZGluZyB0aGUgTGliIGRpcmVjdG9yeSBhbmQgc3VjaCkgaW4gdGhlIGN1cnJlbnQKQEAgLTQ1Nyw3ICs0NzgsNyBAQAogIyBmb3IgYSBzaGFyZWQgY29yZSBsaWJyYXJ5OyBvdGhlcndpc2UsIHRoaXMgcnVsZSBpcyBhIG5vb3AuCiAkKERMTExJQlJBUlkpIGxpYnB5dGhvbiQoVkVSU0lPTikuZGxsLmE6ICQoTElCUkFSWV9PQkpTKQogCWlmIHRlc3QgLW4gIiQoRExMTElCUkFSWSkiOyB0aGVuIFwKLQkJJChMRFNIQVJFRCkgJChMREZMQUdTKSAtV2wsLS1vdXQtaW1wbGliPSRAIC1vICQoRExMTElCUkFSWSkgJF4gXAorCQkkKExEU0hBUkVEKSAtV2wsLS1vdXQtaW1wbGliPSRAIC1vICQoRExMTElCUkFSWSkgJF4gXAogCQkJJChMSUJTKSAkKE1PRExJQlMpICQoU1lTTElCUykgJChMRExBU1QpOyBcCiAJZWxzZSB0cnVlOyBcCiAJZmkKQEAgLTUxNSw5ICs1MzYsMTIgQEAKIAkkKE1BSU5DQykgLWMgJChQWV9DRkxBR1MpIC1vICRAICQoc3JjZGlyKS9Nb2R1bGVzL3B5dGhvbi5jCiAKIAotJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKTogJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpCisjIFVzZSBhIHN0YW1wIGZpbGUgdG8gcHJldmVudCBtYWtlIC1qIGludm9raW5nIHBnZW4gdHdpY2UKKyQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQyk6IFBhcnNlci9wZ2VuLnN0YW1wCitQYXJzZXIvcGdlbi5zdGFtcDogJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpCiAJCS1AJChJTlNUQUxMKSAtZCBJbmNsdWRlCi0JCS0kKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorCQktdG91Y2ggUGFyc2VyL3BnZW4uc3RhbXAKIAogJChQR0VOKToJJChQR0VOT0JKUykKIAkJJChDQykgJChPUFQpICQoTERGTEFHUykgJChQR0VOT0JKUykgJChMSUJTKSAtbyAkKFBHRU4pCkBAIC01MzcsNyArNTYxLDcgQEAKICQoQVNUX0MpOiAkKEFTVF9BU0RMKSAkKEFTRExHRU5fRklMRVMpCiAJJChBU0RMR0VOKSAtYyAkKEFTVF9DX0RJUikgJChBU1RfQVNETCkKIAotUHl0aG9uL2NvbXBpbGUubyBQeXRob24vc3ltdGFibGUubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCitQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCiAKIFB5dGhvbi9nZXRwbGF0Zm9ybS5vOiAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKIAkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCkBAIC01NTYsNiArNTgwLDcgQEAKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9mb3JtYXR0ZXIuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdfZm9ybWF0LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmggXApAQCAtNjAyLDYgKzYyNyw3IEBACiAJCUluY2x1ZGUvY29tcGxleG9iamVjdC5oIFwKIAkJSW5jbHVkZS9kZXNjcm9iamVjdC5oIFwKIAkJSW5jbHVkZS9kaWN0b2JqZWN0LmggXAorCQlJbmNsdWRlL2R0b2EuaCBcCiAJCUluY2x1ZGUvZW51bW9iamVjdC5oIFwKIAkJSW5jbHVkZS9lcnJjb2RlLmggXAogCQlJbmNsdWRlL2V2YWwuaCBcCkBAIC02MTgsNiArNjQ0LDcgQEAKIAkJSW5jbHVkZS9sb25naW50cmVwci5oIFwKIAkJSW5jbHVkZS9sb25nb2JqZWN0LmggXAogCQlJbmNsdWRlL21hcnNoYWwuaCBcCisJCUluY2x1ZGUvbWVtb3J5b2JqZWN0LmggXAogCQlJbmNsdWRlL21ldGFncmFtbWFyLmggXAogCQlJbmNsdWRlL21ldGhvZG9iamVjdC5oIFwKIAkJSW5jbHVkZS9tb2RzdXBwb3J0LmggXApAQCAtNjMyLDYgKzY1OSw4IEBACiAJCUluY2x1ZGUvcGdlbi5oIFwKIAkJSW5jbHVkZS9wZ2VuaGVhZGVycy5oIFwKIAkJSW5jbHVkZS9weWFyZW5hLmggXAorCQlJbmNsdWRlL3B5Y2Fwc3VsZS5oIFwKKwkJSW5jbHVkZS9weWN0eXBlLmggXAogCQlJbmNsdWRlL3B5ZGVidWcuaCBcCiAJCUluY2x1ZGUvcHllcnJvcnMuaCBcCiAJCUluY2x1ZGUvcHlmcGUuaCBcCkBAIC02NzAsMTMgKzY5OSwxMyBAQAogIyBJbiB0aGUgcGFzdCwgd2UndmUgaGFkIHByb2JsZW1zIHdoZXJlIGJ1Z3MgaW4gdGhlIG1hcnNoYWxsaW5nIG9yCiAjIGVsc2V3aGVyZSBjYXVzZWQgYnl0ZWNvZGUgcmVhZCBmcm9tIC5weWMgZmlsZXMgdG8gYmVoYXZlIGRpZmZlcmVudGx5CiAjIHRoYW4gYnl0ZWNvZGUgZ2VuZXJhdGVkIGRpcmVjdGx5IGZyb20gYSAucHkgc291cmNlIGZpbGUuICBTb21ldGltZXMKLSMgdGhlIGJ5dGVjb2RlIHJlYWQgZnJvbSBhIC5weWMgZmlsZSBoYWQgdGhlIGJ1Zywgc29tdGltZXMgdGhlIGRpcmVjdGx5CisjIHRoZSBieXRlY29kZSByZWFkIGZyb20gYSAucHljIGZpbGUgaGFkIHRoZSBidWcsIHNvbWV0aW1lcyB0aGUgZGlyZWN0bHkKICMgZ2VuZXJhdGVkIGJ5dGVjb2RlLiAgVGhpcyBpcyBzb21ldGltZXMgYSB2ZXJ5IHNoeSBidWcgbmVlZGluZyBhIGxvdCBvZgogIyBzYW1wbGUgZGF0YS4KIAogVEVTVE9QVFM9CS1sICQoRVhUUkFURVNUT1BUUykKIFRFU1RQUk9HPQkkKHNyY2RpcikvTGliL3Rlc3QvcmVncnRlc3QucHkKLVRFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pIC1FIC10dAorVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLVdkIC0zIC1FIC10dCAkKFRFU1RQWVRIT05PUFRTKQogdGVzdDoJCWFsbCBwbGF0Zm9ybQogCQktZmluZCAkKHNyY2RpcikvTGliIC1uYW1lICcqLnB5W2NvXScgLXByaW50IHwgeGFyZ3Mgcm0gLWYKIAkJLSQoVEVTVFBZVEhPTikgJChURVNUUFJPRykgJChURVNUT1BUUykKQEAgLTcwOCwxMSArNzM3LDEyIEBACiAJCS1AaWYgd2hpY2ggcHlidWlsZGJvdC5pZGVudGlmeSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAogCQkJcHlidWlsZGJvdC5pZGVudGlmeSAiQ0M9JyQoQ0MpJyIgIkNYWD0nJChDWFgpJyI7IFwKIAkJZmkKLQkJJChURVNUUFlUSE9OKSAkKFRFU1RQUk9HKSAtdWFsbCAtcncgJChURVNUT1BUUykKKwkJJChURVNUUFlUSE9OKSAkKFRFU1RQUk9HKSAtdWFsbCAtcndXICQoVEVTVE9QVFMpCiAKLVFVSUNLVEVTVE9QVFM9CSQoVEVTVE9QVFMpIC14IHRlc3RfdGhyZWFkIHRlc3Rfc2lnbmFsIHRlc3Rfc3RyZnRpbWUgXAotCQl0ZXN0X3VuaWNvZGVkYXRhIHRlc3RfcmUgdGVzdF9zcmUgdGVzdF9zZWxlY3QgdGVzdF9wb2xsIFwKLQkJdGVzdF9saW51eGF1ZGlvZGV2IHRlc3Rfc3RydWN0IHRlc3Rfc3VuYXVkaW9kZXYgdGVzdF96bGliCitRVUlDS1RFU1RPUFRTPQkkKFRFU1RPUFRTKSAteCB0ZXN0X3N1YnByb2Nlc3MgdGVzdF9pbyB0ZXN0X2xpYjJ0bzMgXAorCQl0ZXN0X211bHRpYnl0ZWNvZGVjIHRlc3RfdXJsbGliMl9sb2NhbG5ldCB0ZXN0X2l0ZXJ0b29scyBcCisJCXRlc3RfbXVsdGlwcm9jZXNzaW5nIHRlc3RfbWFpbGJveCB0ZXN0X3NvY2tldCB0ZXN0X3BvbGwgXAorCQl0ZXN0X3NlbGVjdCB0ZXN0X3ppcGZpbGUKIHF1aWNrdGVzdDoJYWxsIHBsYXRmb3JtCiAJCS1maW5kICQoc3JjZGlyKS9MaWIgLW5hbWUgJyoucHlbY29dJyAtcHJpbnQgfCB4YXJncyBybSAtZgogCQktJChURVNUUFlUSE9OKSAkKFRFU1RQUk9HKSAkKFFVSUNLVEVTVE9QVFMpCkBAIC03NjMsNiArNzkzLDkgQEAKIAkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgcHl0aG9uJChWRVJTSU9OKSQoRVhFKSAkKFBZVEhPTikpCiAJLXJtIC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uLWNvbmZpZwogCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSAtcyBweXRob24kKFZFUlNJT04pLWNvbmZpZyBweXRob24tY29uZmlnKQorCS10ZXN0IC1kICQoREVTVERJUikkKExJQlBDKSB8fCAkKElOU1RBTEwpIC1kIC1tICQoRElSTU9ERSkgJChERVNURElSKSQoTElCUEMpCisJLXJtIC1mICQoREVTVERJUikkKExJQlBDKS9weXRob24ucGMKKwkoY2QgJChERVNURElSKSQoTElCUEMpOyAkKExOKSAtcyBweXRob24tJChWRVJTSU9OKS5wYyBweXRob24ucGMpCiAKICMgSW5zdGFsbCB0aGUgaW50ZXJwcmV0ZXIgd2l0aCAkKFZFUlNJT04pIGFmZml4ZWQKICMgVGhpcyBnb2VzIGludG8gJChleGVjX3ByZWZpeCkKQEAgLTc5OSw3ICs4MzIsNyBAQAogCQlmaTsgXAogCWRvbmUKIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL01pc2MvcHl0aG9uLm1hbiBcCi0JCSQoREVTVERJUikkKE1BTkRJUikvbWFuMS9weXRob24uMQorCQkkKERFU1RESVIpJChNQU5ESVIpL21hbjEvcHl0aG9uJChWRVJTSU9OKS4xCiAKICMgSW5zdGFsbCB0aGUgbGlicmFyeQogUExBVERJUj0JcGxhdC0kKE1BQ0hERVApCkBAIC04MTcsMTcgKzg1MCwyMSBAQAogCXBsYXQtbWFjL2xpYi1zY3JpcHRwYWNrYWdlcy9TeXN0ZW1FdmVudHMgXAogCXBsYXQtbWFjL2xpYi1zY3JpcHRwYWNrYWdlcy9UZXJtaW5hbCAKIFBMQVRNQUNQQVRIPTpwbGF0LW1hYzpwbGF0LW1hYy9saWItc2NyaXB0cGFja2FnZXMKLUxJQlNVQkRJUlM9CWxpYi10ayBzaXRlLXBhY2thZ2VzIHRlc3QgdGVzdC9vdXRwdXQgdGVzdC9kYXRhIFwKLQkJdGVzdC9kZWNpbWFsdGVzdGRhdGEgXAorTElCU1VCRElSUz0JbGliLXRrIGxpYi10ay90ZXN0IGxpYi10ay90ZXN0L3Rlc3RfdGtpbnRlciBcCisgICAgICAgICAgICAgICAgbGliLXRrL3Rlc3QvdGVzdF90dGsgc2l0ZS1wYWNrYWdlcyB0ZXN0IHRlc3QvZGF0YSBcCisJCXRlc3QvZGVjaW1hbHRlc3RkYXRhIHRlc3QveG1sdGVzdGRhdGEgXAorCQl0ZXN0L3RyYWNlZG1vZHVsZXMgXAogCQllbmNvZGluZ3MgY29tcGlsZXIgaG90c2hvdCBcCiAJCWVtYWlsIGVtYWlsL21pbWUgZW1haWwvdGVzdCBlbWFpbC90ZXN0L2RhdGEgXAogCQlqc29uIGpzb24vdGVzdHMgXAogCQlzcWxpdGUzIHNxbGl0ZTMvdGVzdCBcCi0JCWxvZ2dpbmcgYnNkZGIgYnNkZGIvdGVzdCBjc3Ygd3NnaXJlZiBcCisJCWxvZ2dpbmcgYnNkZGIgYnNkZGIvdGVzdCBjc3YgaW1wb3J0bGliIHdzZ2lyZWYgXAogCQlsaWIydG8zIGxpYjJ0bzMvZml4ZXMgbGliMnRvMy9wZ2VuMiBsaWIydG8zL3Rlc3RzIFwKKwkJbGliMnRvMy90ZXN0cy9kYXRhIGxpYjJ0bzMvdGVzdHMvZGF0YS9maXhlcnMgbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzIFwKIAkJY3R5cGVzIGN0eXBlcy90ZXN0IGN0eXBlcy9tYWNob2xpYiBpZGxlbGliIGlkbGVsaWIvSWNvbnMgXAogCQlkaXN0dXRpbHMgZGlzdHV0aWxzL2NvbW1hbmQgZGlzdHV0aWxzL3Rlc3RzICQoWE1MTElCU1VCRElSUykgXAogCQltdWx0aXByb2Nlc3NpbmcgbXVsdGlwcm9jZXNzaW5nL2R1bW15IFwKKwkJdW5pdHRlc3QgdW5pdHRlc3QvdGVzdCBcCiAJCWxpYi1vbGQgXAogCQljdXJzZXMgcHlkb2NfZGF0YSAkKE1BQ0hERVBTKQogbGliaW5zdGFsbDoJYnVpbGRfYWxsICQoc3JjZGlyKS9MaWIvJChQTEFURElSKQpAQCAtODg5LDExICs5MjYsMTMgQEAKIAlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAogCQkuLyQoQlVJTERQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCiAJCS1kICQoTElCREVTVCkgLWYgXAotCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlcycgJChERVNURElSKSQoTElCREVTVCkKKwkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCisJCSQoREVTVERJUikkKExJQkRFU1QpCiAJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAogCQkuLyQoQlVJTERQWVRIT04pIC1XaSAtdHQgLU8gJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCiAJCS1kICQoTElCREVTVCkgLWYgXAotCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlcycgJChERVNURElSKSQoTElCREVTVCkKKwkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCisJCSQoREVTVERJUikkKExJQkRFU1QpCiAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCiAJCS4vJChCVUlMRFBZVEhPTikgLVdpIC10ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAogCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXApAQCAtOTE1LDYgKzk1NCwxMSBAQAogCWV4cG9ydCBFWEU7IEVYRT0iJChCVUlMREVYRSkiOyBcCiAJY2QgJChzcmNkaXIpL0xpYi8kKFBMQVRESVIpOyAkKFJVTlNIQVJFRCkgLi9yZWdlbgogCitweXRob24tY29uZmlnOiAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluCisJIyBTdWJzdGl0dXRpb24gaGFwcGVucyBoZXJlLCBhcyB0aGUgY29tcGxldGVseS1leHBhbmRlZCBCSU5ESVIKKwkjIGlzIG5vdCBhdmFpbGFibGUgaW4gY29uZmlndXJlCisJc2VkIC1lICJzLEBFWEVOQU1FQCwkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKSwiIDwgJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbiA+cHl0aG9uLWNvbmZpZworCiAjIEluc3RhbGwgdGhlIGluY2x1ZGUgZmlsZXMKIElOQ0xESVJTVE9NQUtFPSQoSU5DTFVERURJUikgJChDT05GSU5DTFVERURJUikgJChJTkNMVURFUFkpICQoQ09ORklOQ0xVREVQWSkKIGluY2xpbnN0YWxsOgpAQCAtOTM2LDggKzk4MCwxMiBAQAogIyBJbnN0YWxsIHRoZSBsaWJyYXJ5IGFuZCBtaXNjZWxsYW5lb3VzIHN0dWZmIG5lZWRlZCBmb3IgZXh0ZW5kaW5nL2VtYmVkZGluZwogIyBUaGlzIGdvZXMgaW50byAkKGV4ZWNfcHJlZml4KQogTElCUEw9CQkkKExJQlApL2NvbmZpZwotbGliYWluc3RhbGw6CWFsbAotCUBmb3IgaSBpbiAkKExJQkRJUikgJChMSUJQKSAkKExJQlBMKTsgXAorCisjIHBrZ2NvbmZpZyBkaXJlY3RvcnkKK0xJQlBDPQkJJChMSUJESVIpL3BrZ2NvbmZpZworCitsaWJhaW5zdGFsbDoJYWxsIHB5dGhvbi1jb25maWcKKwlAZm9yIGkgaW4gJChMSUJESVIpICQoTElCUCkgJChMSUJQTCkgJChMSUJQQyk7IFwKIAlkbyBcCiAJCWlmIHRlc3QgISAtZCAkKERFU1RESVIpJCRpOyB0aGVuIFwKIAkJCWVjaG8gIkNyZWF0aW5nIGRpcmVjdG9yeSAkJGkiOyBcCkBAIC05NjQsMTEgKzEwMTIsOSBAQAogCSQoSU5TVEFMTF9EQVRBKSBNb2R1bGVzL1NldHVwICQoREVTVERJUikkKExJQlBMKS9TZXR1cAogCSQoSU5TVEFMTF9EQVRBKSBNb2R1bGVzL1NldHVwLmxvY2FsICQoREVTVERJUikkKExJQlBMKS9TZXR1cC5sb2NhbAogCSQoSU5TVEFMTF9EQVRBKSBNb2R1bGVzL1NldHVwLmNvbmZpZyAkKERFU1RESVIpJChMSUJQTCkvU2V0dXAuY29uZmlnCisJJChJTlNUQUxMX0RBVEEpIE1pc2MvcHl0aG9uLnBjICQoREVTVERJUikkKExJQlBDKS9weXRob24tJChWRVJTSU9OKS5wYwogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9Nb2R1bGVzL21ha2VzZXR1cCAkKERFU1RESVIpJChMSUJQTCkvbWFrZXNldHVwCiAJJChJTlNUQUxMX1NDUklQVCkgJChzcmNkaXIpL2luc3RhbGwtc2ggJChERVNURElSKSQoTElCUEwpL2luc3RhbGwtc2gKLQkjIFN1YnN0aXR1dGlvbiBoYXBwZW5zIGhlcmUsIGFzIHRoZSBjb21wbGV0ZWx5LWV4cGFuZGVkIEJJTkRJUgotCSMgaXMgbm90IGF2YWlsYWJsZSBpbiBjb25maWd1cmUKLQlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpLCIgPCAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluID5weXRob24tY29uZmlnCiAJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZyAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTiktY29uZmlnCiAJcm0gcHl0aG9uLWNvbmZpZwogCUBpZiBbIC1zIE1vZHVsZXMvcHl0aG9uLmV4cCAtYSBcCkBAIC0xMDAwLDcgKzEwNDYsNyBAQAogCiAjIEluc3RhbGwgdGhlIGR5bmFtaWNhbGx5IGxvYWRhYmxlIG1vZHVsZXMKICMgVGhpcyBnb2VzIGludG8gJChleGVjX3ByZWZpeCkKLXNoYXJlZGluc3RhbGw6CitzaGFyZWRpbnN0YWxsOiBzaGFyZWRtb2RzCiAJJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLUUgJChzcmNkaXIpL3NldHVwLnB5IGluc3RhbGwgXAogCSAgIAktLXByZWZpeD0kKHByZWZpeCkgXAogCQktLWluc3RhbGwtc2NyaXB0cz0kKEJJTkRJUikgXApAQCAtMTA1MiwyOCArMTA5OCwyMCBAQAogZnJhbWV3b3JraW5zdGFsbG1hY2xpYjoKIAlsbiAtZnMgIi4uLy4uLy4uLyQoUFlUSE9ORlJBTUVXT1JLKSIgIiQoREVTVERJUikkKHByZWZpeCkvbGliL3B5dGhvbiQoVkVSU0lPTikvY29uZmlnL2xpYnB5dGhvbiQoVkVSU0lPTikuYSIKIAlsbiAtZnMgIi4uLy4uLy4uLyQoUFlUSE9ORlJBTUVXT1JLKSIgIiQoREVTVERJUikkKHByZWZpeCkvbGliL3B5dGhvbiQoVkVSU0lPTikvY29uZmlnL2xpYnB5dGhvbiQoVkVSU0lPTikuZHlsaWIiCisJbG4gLWZzICIuLi8kKFBZVEhPTkZSQU1FV09SSykiICIkKERFU1RESVIpJChwcmVmaXgpL2xpYi9saWJweXRob24kKFZFUlNJT04pLmR5bGliIgogCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGxtYWNzdWJ0cmVlIERFU1RESVI9IiQoREVTVERJUikiCiAKICMgVGhpcyBpbnN0YWxscyB0aGUgSURFLCB0aGUgTGF1bmNoZXIgYW5kIG90aGVyIGFwcHMgaW50byAvQXBwbGljYXRpb25zCiBmcmFtZXdvcmtpbnN0YWxsYXBwczoKIAljZCBNYWMgJiYgJChNQUtFKSBpbnN0YWxsYXBwcyBERVNURElSPSIkKERFU1RESVIpIgogCi1mcmFtZXdvcmtpbnN0YWxsYXBwczR3YXk6Ci0JY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbGFwcHM0d2F5IERFU1RESVI9IiQoREVTVERJUikiCi0KICMgVGhpcyBpbnN0YWxsIHRoZSB1bml4IHB5dGhvbiBhbmQgcHl0aG9udyB0b29scyBpbiAvdXNyL2xvY2FsL2JpbgogZnJhbWV3b3JraW5zdGFsbHVuaXh0b29sczoKIAljZCBNYWMgJiYgJChNQUtFKSBpbnN0YWxsdW5peHRvb2xzIERFU1RESVI9IiQoREVTVERJUikiCiAKLWZyYW1ld29ya2luc3RhbGx1bml4dG9vbHM0d2F5OgotCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGx1bml4dG9vbHM0d2F5IERFU1RESVI9IiQoREVTVERJUikiCi0KIGZyYW1ld29ya2FsdGluc3RhbGx1bml4dG9vbHM6CiAJY2QgTWFjICYmICQoTUFLRSkgYWx0aW5zdGFsbHVuaXh0b29scyBERVNURElSPSIkKERFU1RESVIpIgogCi1mcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzNHdheToKLQljZCBNYWMgJiYgJChNQUtFKSBhbHRpbnN0YWxsdW5peHRvb2xzNHdheSBERVNURElSPSIkKERFU1RESVIpIgotCiAjIFRoaXMgaW5zdGFsbHMgdGhlIERlbW9zIGFuZCBUb29scyBpbnRvIHRoZSBhcHBsaWNhdGlvbnMgZGlyZWN0b3J5LgogIyBJdCBpcyBub3QgcGFydCBvZiBhIG5vcm1hbCBmcmFtZXdvcmtpbnN0YWxsCiBmcmFtZXdvcmtpbnN0YWxsZXh0cmFzOgpAQCAtMTEzOSw5ICsxMTc3LDkgQEAKIGNsZWFuOiBweWNyZW1vdmFsCiAJZmluZCAuIC1uYW1lICcqLltvYV0nIC1leGVjIHJtIC1mIHt9ICc7JwogCWZpbmQgLiAtbmFtZSAnKi5zW29sXScgLWV4ZWMgcm0gLWYge30gJzsnCi0JZmluZCAkKHNyY2RpcikvYnVpbGQgLW5hbWUgJ2ZmaWNvbmZpZy5oJyAtZXhlYyBybSAtZiB7fSAnOycgfHwgdHJ1ZQotCWZpbmQgJChzcmNkaXIpL2J1aWxkIC1uYW1lICdmZmljb25maWcucHknIC1leGVjIHJtIC1mIHt9ICc7JyB8fCB0cnVlCiAJZmluZCAuIC1uYW1lICcqLnNvLlswLTldKi5bMC05XSonIC1leGVjIHJtIC1mIHt9ICc7JworCWZpbmQgYnVpbGQgLW5hbWUgJ2ZmaWNvbmZpZy5oJyAtZXhlYyBybSAtZiB7fSAnOycgfHwgdHJ1ZQorCWZpbmQgYnVpbGQgLW5hbWUgJ2ZmaWNvbmZpZy5weScgLWV4ZWMgcm0gLWYge30gJzsnIHx8IHRydWUKIAktcm0gLWYgTGliL2xpYjJ0bzMvKkdyYW1tYXIqLnBpY2tsZQogCiBwcm9maWxlLXJlbW92YWw6CkBAIC0xMTQ5LDcgKzExODcsNyBAQAogCiBjbG9iYmVyOiBjbGVhbiBwcm9maWxlLXJlbW92YWwKIAktcm0gLWYgJChCVUlMRFBZVEhPTikgJChQR0VOKSAkKExJQlJBUlkpICQoTERMSUJSQVJZKSAkKERMTExJQlJBUlkpIFwKLQkJdGFncyBUQUdTIFwKKwkJdGFncyBUQUdTIFBhcnNlci9wZ2VuLnN0YW1wIFwKIAkJY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgcHljb25maWcuaCBNb2R1bGVzL2NvbmZpZy5jCiAJLXJtIC1yZiBidWlsZCBwbGF0Zm9ybQogCS1ybSAtcmYgJChQWVRIT05GUkFNRVdPUktESVIpCkBAIC0xMTU4LDggKzExOTYsMTMgQEAKICMgcmVtb3ZlIGFsbCBnZW5lcmF0ZWQgZmlsZXMsIGV2ZW4gTWFrZWZpbGVbLnByZV0KICMgS2VlcCBjb25maWd1cmUgYW5kIFB5dGhvbi1hc3QuW2NoXSwgaXQncyBwb3NzaWJsZSB0aGV5IGNhbid0IGJlIGdlbmVyYXRlZAogZGlzdGNsZWFuOiBjbG9iYmVyCisJZm9yIGZpbGUgaW4gTGliL3Rlc3QvZGF0YS8qIDsgZG8gXAorCSAgICBpZiB0ZXN0ICIkJGZpbGUiICE9ICJMaWIvdGVzdC9kYXRhL1JFQURNRSI7IHRoZW4gcm0gIiQkZmlsZSI7IGZpOyBcCisJZG9uZQogCS1ybSAtZiBjb3JlIE1ha2VmaWxlIE1ha2VmaWxlLnByZSBjb25maWcuc3RhdHVzIFwKLQkJTW9kdWxlcy9TZXR1cCBNb2R1bGVzL1NldHVwLmxvY2FsIE1vZHVsZXMvU2V0dXAuY29uZmlnCisJCU1vZHVsZXMvU2V0dXAgTW9kdWxlcy9TZXR1cC5sb2NhbCBNb2R1bGVzL1NldHVwLmNvbmZpZyBcCisJCU1vZHVsZXMvbGRfc29fYWl4IE1vZHVsZXMvcHl0aG9uLmV4cCBNaXNjL3B5dGhvbi5wYworCS1ybSAtZiBweXRob24qLWdkYi5weQogCWZpbmQgJChzcmNkaXIpICcoJyAtbmFtZSAnKi5mZGMnIC1vIC1uYW1lICcqficgXAogCQkJICAgLW8gLW5hbWUgJ1tALCNdKicgLW8gLW5hbWUgJyoub2xkJyBcCiAJCQkgICAtbyAtbmFtZSAnKi5vcmlnJyAtbyAtbmFtZSAnKi5yZWonIFwKQEAgLTEyMTYsNSArMTI1OSw2IEBACiAuUEhPTlk6IGZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scwogLlBIT05ZOiBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIHJlY2hlY2sgYXV0b2NvbmYgY2xlYW4gY2xvYmJlciBkaXN0Y2xlYW4gCiAuUEhPTlk6IHNtZWxseSBmdW5ueSBwYXRjaGNoZWNrCisuUEhPTlk6IGdkYmhvb2tzCiAKICMgSUYgWU9VIFBVVCBBTllUSElORyBIRVJFIElUIFdJTEwgR08gQVdBWQpkaWZmIC0tZ2l0IGEvTWlzYy9BQ0tTIGIvTWlzYy9BQ0tTCmluZGV4IDc1N2JjMWQuLjNjYjc2NjcgMTAwNjQ0Ci0tLSBhL01pc2MvQUNLUworKysgYi9NaXNjL0FDS1MKQEAgLTgsMjYgKzgsMzAgQEAKIAogCS0tR3VpZG8KIAotUFM6IEluIHRoZSBzdGFuZGFyZCBQeXRob24gZGlzdHJpYnV0aW9uLCB0aGlzIGZpbGUgaXMgZW5jb2RlZCBpbiBMYXRpbi0xLgorUFM6IEluIHRoZSBzdGFuZGFyZCBQeXRob24gZGlzdHJpYnV0aW9uLCB0aGlzIGZpbGUgaXMgZW5jb2RlZCBpbiBVVEYtOAorYW5kIHRoZSBsaXN0IGlzIGluIHJvdWdoIGFscGhhYmV0aWNhbCBvcmRlciBieSBsYXN0IG5hbWVzLgogCiBEYXZpZCBBYnJhaGFtcwogSmltIEFobHN0cm9tCiBGYXJoYW4gQWhtYWQKK05pciBBaWRlcwogWWFuaXYgQWtuaW4KIEp5cmtpIEFsYWt1aWphbGEKIEJpbGx5IEcuIEFsbGllCiBLZXZpbiBBbHRpcworSm9lIEFtZW50YQogTWFyayBBbmFja2VyCiBBbmRlcnMgQW5kZXJzZW4KIEpvaG4gQW5kZXJzb24KLUVyaWsgQW5kZXJz6W4KK0VyaWsgQW5kZXJzw6luCiBPbGl2ZXIgQW5kcmljaAogUm9zcyBBbmRydXMKK8OJcmljIEFyYXVqbwogSmFzb24gQXNiYWhyCiBEYXZpZCBBc2NoZXIKIENocmlzIEF0TGVlCiBKb2huIEF5Y29jawotSmFuLUhlaW4gQiJ1aHJtYW4KK0phbi1IZWluIELDvGhybWFuCiBEb25vdmFuIEJhYXJkYQogQXR0aWxhIEJhYm8KIEFsZm9uc28gQmFjaWVybwpAQCAtMzcsOCArNDEsMTAgQEAKIEdyZWcgQmFsbAogTHVpZ2kgQmFsbGFiaW8KIEplZmYgQmFsb2doCitNYXR0IEJhbmR5CiBNaWNoYWVsIEouIEJhcmJlcgogQ2hyaXMgQmFya2VyCitOaWNrIEJhcm5lcwogUXVlbnRpbiBCYXJuZXMKIFJpY2hhcmQgQmFycmFuCiBDZXNhciBFZHVhcmRvIEJhcnJvcwpAQCAtNTgsNyArNjQsNyBAQAogUmVpbWVyIEJlaHJlbmRzCiBCZW4gQmVsbAogVGhvbWFzIEJlbGxtYW4KLUFsZXhhbmRlciBCZWxvcG9sc2t5CitBbGV4YW5kZXIg4oCc0KHQsNGI0LDigJ0gQmVsb3BvbHNreQogQW5kcmV3IEJlbm5ldHRzCiBBbmR5IEJlbnNreQogTWljaGVsIFZhbiBkZW4gQmVyZ2gKQEAgLTgwLDE4ICs4NiwyMiBAQAogUGF1bCBCb2RkaWUKIE1hdHRoZXcgQm9lZGlja2VyCiBEYXZpZCBCb2xlbgorR2F3YWluIEJvbHRvbgogR3JlZ29yeSBCb25kCiBKdXJqZW4gQm9zCiBQZXRlciBCb3NjaAogRXJpYyBCb3VjawogVGhpZXJyeSBCb3VzY2gKIFNlYmFzdGlhbiBCb3ZpbmcKK0plZmYgQnJhZGJlcnJ5CiBNb250eSBCcmFuZGVuYmVyZwogR2VvcmcgQnJhbmRsCitDaHJpc3RvcGhlciBCcmFubm9uCiBUZXJyZW5jZSBCcmFubm9uCiBEYXZlIEJyZW5uYW4KIFRvbSBCcmlkZ21hbgogUmljaGFyZCBCcm9kaWUKK01pY2hhZWwgQnJvZ2h0b24KIERhbmllbCBCcm90c2t5CiBKZWFuIEJyb3V3ZXJzCiBHYXJ5IFMuIEJyb3duCkBAIC0xMTQsOSArMTI0LDEzIEBACiBCcmV0dCBDYW5ub24KIE1pa2UgQ2FybHRvbgogVGVycnkgQ2Fycm9sbAorTG9yZW56byBNLiBDYXR1Y2NpCiBEb25uIENhdmUKK0NoYXJsZXMgQ2F6YWJvbgogUGVyIENlZGVycXZpc3QKIE9jdGF2aWFuIENlcm5hCitQYXNjYWwgQ2hhbWJvbgorSm9obiBDaGFuZGxlcgogSHllLVNoaWsgQ2hhbmcKIEplZmZyZXkgQ2hhbmcKIE1pdGNoIENoYXBtYW4KQEAgLTEyOCw2ICsxNDIsNyBAQAogQWxiZXJ0IENoaW4tQS1Zb3VuZwogQWRhbCBDaGlyaWxpdWMKIE1hdHQgQ2hpc2hvbG0KK0FuZGVycyBDaHJpZ3N0csO2bQogVG9tIENocmlzdGlhbnNlbgogVmFkaW0gQ2h1Z3Vub3YKIERhdmlkIENpbmVnZQpAQCAtMTQwLDcgKzE1NSwxMCBAQAogRGF2ZSBDb2xlCiBCZW5qYW1pbiBDb2xsYXIKIEplZmZlcnkgQ29sbGlucworUm9iZXJ0IENvbGxpbnMKIFBhdWwgQ29sb21pZXRzCitHZXJlbXkgQ29uZHJhCitKdWFuIEpvc8OpIENvbnRpCiBNYXR0IENvbndheQogRGF2aWQgTS4gQ29va2UKIEdyZWcgQ29wZWxhbmQKQEAgLTE0OCw2ICsxNjYsNyBAQAogRGF2aWQgQ29zdGFuem8KIFNjb3R0IENvdHRvbgogR3JlZyBDb3VjaAorRGF2aWQgQ291cm5hcGVhdQogU3RldmUgQ291c2lucwogQWxleCBDb3ZlbnRyeQogTWF0dGhldyBEaXhvbiBDb3dsZXMKQEAgLTE1Niw4ICsxNzUsMTEgQEAKIExhdXJhIENyZWlnaHRvbgogU2ltb24gQ3Jvc3MKIERyZXcgQ3NpbGxhZworSm9hcXVpbiBDdWVuY2EgQWJlbGEKIEpvaG4gQ3VnaW5pCiBUb20gQ3VsbGl0b24KK0JyaWFuIEN1cnRpbgorTGlzYW5kcm8gRGFsY2luCiBBbmRyZXcgRGFsa2UKIExhcnMgRGFtZXJvdwogRXJpYyBEYW5pZWwKQEAgLTE3NSwxMSArMTk3LDEzIEBACiBTY290dCBEaWFsCiBUb2J5IERpY2tlbnNvbgogTWFyayBEaWNraW5zb24KK0phY2sgRGllZGVyaWNoCiBEYW5pZWwgRGluaXoKIFl2ZXMgRGlvbm5lCiBEYW5pZWwgRGl0dG1hcgogSmFyb21pciBEb2xlY2VrCiBJc21haWwgRG9ubWV6CitNYXJjb3MgRG9ub2xvCiBEaW1hIERvcmZtYW4KIENlc2FyIERvdWFkeQogRGVhbiBEcmFheWVyCkBAIC0xOTAsMjIgKzIxNCwyNCBAQAogUXVpbm4gRHVua2FuCiBSb2JpbiBEdW5uCiBMdWtlIER1bnN0YW4KK1ZpcmdpbCBEdXByYXMKIEFuZHkgRHVzdG1hbgogR2FyeSBEdXphbgogRXVnZW5lIER2dXJlY2hlbnNraQogSm9zaXAgRHpvbG9uZ2EKIE1heGltIER6dW1hbmVua28KLVdhbHRlciBE9nJ3YWxkCitXYWx0ZXIgRMO2cndhbGQKIEhhbnMgRWNrYXJkdAogR3JhbnQgRWR3YXJkcwogSm9obiBFaHJlc21hbgorRXJpYyBFaXNuZXIKIEFuZHJldyBFbGFuZAogTGFuY2UgRWxsaW5naGF1cwogRGF2aWQgRWx5CiBKZWZmIEVwbGVyCiBUb20gRXBwZXJseQogU3RvZmZlbCBFcmFzbXVzCi1K/HJnZW4gQS4gRXJoYXJkCitKw7xyZ2VuIEEuIEVyaGFyZAogTWljaGFlbCBFcm5zdAogQmVuIEVzY290bwogQW5keSBFc2tpbHNzb24KQEAgLTIxNywxOCArMjQzLDIxIEBACiBEYXZpZCBFdmVybHkKIEdyZWcgRXdpbmcKIE1hcnRpam4gRmFhc3NlbgorQ2xvdmlzIEZhYnJpY2lvCiBBbmRyZWFzIEZhZXJiZXIKIEJpbGwgRmFuY2hlcgorVHJveSBKLiBGYXJyZWxsCiBNYXJrIEZhdmFzCiBOaWVscyBGZXJndXNvbgogU2ViYXN0aWFuIEZlcm5hbmRlegogVmluY2VudCBGaWFjawogVG9tZXIgRmlsaWJhCitKZWZmcmV5IEZpbmtlbHN0ZWluCiBSdXNzZWxsIEZpbm4KIE5pbHMgRmlzY2hiZWNrCiBGcmVkZXJpayBGaXgKIE1hdHQgRmxlbWluZwotSGVybuFuIE1hcnTtbmV6IEZvZmZhbmkKK0hlcm7DoW4gTWFydMOtbmV6IEZvZmZhbmkKIE1pY2hhZWwgRm9vcmQKIEFtYXVyeSBGb3JnZW90IGQnQXJjCiBEb3VnIEZvcnQKQEAgLTI0Miw3ICsyNzEsMTAgQEAKIFBldGVyIEZ1bmsKIEdlb2ZmIEZ1cm5pc2gKIFVsaXNzZXMgRnVycXVpbQorSGFnZW4gRsO8cnN0ZW5hdQorSGFsbHZhcmQgQiBGdXJ1c2V0aAogQWNoaW0gR2FlZGtlCitNYXJ0aW4gdm9uIEdhZ2VybgogTGVsZSBHYWlmYXgKIFNhbnRpYWdvIEdhbGEKIFlpdHpjaGFrIEdhbGUKQEAgLTI1NywyNyArMjg5LDMwIEBACiBIYXJyeSBIZW5yeSBHZWJlbAogTWFyaXVzIEdlZG1pbmFzCiBUaG9tYXMgR2VsbGVrdW0KK0dhYnJpZWwgR2VuZWxsaW5hCiBDaHJpc3RvcyBHZW9yZ2lvdQogQmVuIEdlcnR6ZmllbGQKIERpbnUgR2hlcm1hbgogSm9uYXRoYW4gR2lkZHkKIEpvaGFubmVzIEdpanNiZXJzCiBNaWNoYWVsIEdpbGZpeAorQ2hyaXN0b3BoIEdvaGxrZQogVGltIEdvbGRlbgogQ2hyaXMgR29ubmVybWFuCiBEYXZpZCBHb29kZ2VyCiBIYW5zIGRlIEdyYWFmZgogRWRkeSBEZSBHcmVlZgogRHVuY2FuIEdyaXNieQorRmFiaWFuIEdyb2ZmZW4KIERhZyBHcnVuZWF1CiBNaWNoYWVsIEd1cmF2YWdlCi1MYXJzIEd1c3TkYmVsCi1UaG9tYXMgR/x0dGxlcgorTGFycyBHdXN0w6RiZWwKK1Rob21hcyBHw7x0dGxlcgogQmFycnkgSGFkZG93CiBQYXVsIHRlbiBIYWdlbgogUmFzbXVzIEhhaG4KIFBldGVyIEhhaWdodAotVuFjbGF2IEhhaXNtYW4KK1bDoWNsYXYgSGFpc21hbgogQm9iIEhhbGxleQogSmVzc2UgSGFsbGlvCiBKdW4gSGFtYW5vCkBAIC0zMDEsNyArMzM2LDcgQEAKIEphbWVzIEhlbnN0cmlkZ2UKIENocmlzIEhlcmJvcnRoCiBJdmFuIEhlcm1hbgotSvxyZ2VuIEhlcm1hbm4KK0rDvHJnZW4gSGVybWFubgogR2FyeSBIZXJyb24KIFRob21hcyBIZXJ2ZQogQmVybmhhcmQgSGVyem9nCkBAIC0zMjYsNiArMzYxLDcgQEAKIE5hb2Z1bWkgSG9uZGEKIEplZmZyZXkgSG9uaWcKIFJvYiBIb29mdAorTWljaGllbCBkZSBIb29uCiBCcmlhbiBIb29wZXIKIFJhbmRhbGwgSG9wcGVyCiBOYWRhdiBIb3Jlc2gKQEAgLTMzOSw5ICszNzUsMTEgQEAKIEdyZWcgSHVtcGhyZXlzCiBFcmljIEh1c3MKIEplcmVteSBIeWx0b24KLUdlcmhhcmQgSORyaW5nCitHZXJoYXJkIEjDpHJpbmcKK0ZyZWRyaWsgSMOlw6VyZAogTWloYWkgSWJhbmVzY3UKIExhcnMgSW1taXNjaAorQm9iYnkgSW1wb2xsb25pYQogTWVhZG9yIEluZ2UKIFRvbnkgSW5ncmFsZGkKIEpvaG4gSW50ZXJyYW50ZQpAQCAtMzU2LDExICszOTQsMTMgQEAKIEphY2sgSmFuc2VuCiBCaWxsIEphbnNzZW4KIERyZXcgSmVua2lucwotRmxlbW1pbmcgS2rmciBKZW5zZW4KK0ZsZW1taW5nIEtqw6ZyIEplbnNlbgogSmliYQogT3JqYW4gSm9oYW5zZW4KK0ZyZWRyaWsgSm9oYW5zc29uCiBHcmVnb3J5IEsuIEpvaG5zb24KIFNpbW9uIEpvaG5zdG9uCitOaWNvbGFzIEpvbHkKIEV2YW4gSm9uZXMKIEplcmVteSBKb25lcwogUmljaGFyZCBKb25lcwpAQCAtMzc4LDE1ICs0MTgsMTkgQEAKIExvdSBLYXRlcwogSGlyb2FraSBLYXdhaQogU2ViYXN0aWVuIEtlaW0KK1J5YW4gS2VsbHkKIFJvYmVydCBLZXJuCiBSYW5kYWxsIEtlcm4KIE1hZ251cyBLZXNzbGVyCiBMYXdyZW5jZSBLZXN0ZWxvb3QKIFZpdmVrIEtoZXJhCitBa2lyYSBLaXRhZGEKIE1hZHMgS2lpbGVyaWNoCiBUYWVrIEpvbyBLaW0KK1cuIFRyZXZvciBLaW5nCiBQYXVsIEtpcHBlcwogU3RldmUgS2lyc2NoCitTZWJhc3RpYW4gS2lyc2NoZQogUm9uIEtsYXRjaGtvCiBCYXN0aWFuIEtsZWluZWlkYW0KIEJvYiBLbGluZQpAQCAtMzk3LDE1ICs0NDEsMTggQEAKIEdyZWcgS29jaGFuc2tpCiBEYW1vbiBLb2hsZXIKIEpvc2VwaCBLb3NoeQorTWFrc2ltIEtvenlhcmNodWsKIFN0ZWZhbiBLcmFoCiBCb2IgS3JhcwogSG9sZ2VyIEtyZWtlbAogTWljaGFlbCBLcmVtZXIKIEZhYmlhbiBLcmV1dHoKIEhhbm51IEtyb3NpbmcKK0FuZHJlaiBLcnBpYwogSXZhbiBLcnN0acSHCiBBbmRyZXcgS3VjaGxpbmcKIFZsYWRpbWlyIEt1c2huaXIKK1Jvc3MgTGFnZXJ3YWxsCiBDYW1lcm9uIExhaXJkCiDFgXVrYXN6IExhbmdhCiBUaW5vIExhbmdlCkBAIC00MzIsMTEgKzQ3OSwxMyBAQAogQ2hyaXN0b3BoZXIgVHVyIExlc25pZXdza2ktTGFhcwogTWFyayBMZXZpbnNvbgogV2lsbGlhbSBMZXdpcworWHVhbmppIExpCiBSb2JlcnQgdmFuIExpZXJlCitSb3NzIExpZ2h0CiBTaGF3biBMaWdvY2tpCiBNYXJ0aW4gTGlncgogQ2hyaXN0b3BoZXIgTGluZGJsYWQKLUJqb3JuIExpbmRxdmlzdAorQmrDtnJuIExpbmRxdmlzdAogUGVyIExpbmRxdmlzdAogRXJpYyBMaW5kdmFsbAogR3JlZ29yIExpbmdsCkBAIC00NDcsMjQgKzQ5NiwyNiBAQAogSmFzb24gTG93ZQogVG9ueSBMb3duZHMKIFJheSBMb3l6YWdhCitMdWthcyBMdWVnCiBMb3JlbiBMdWtlCiBGcmVkcmlrIEx1bmRoCiBNYXJrIEx1dHoKIEppbSBMeW5jaAogTWlrYWVsIEx5bmd2aWcKLU1hcnRpbiB2b24gTPZ3aXMKK01hcnRpbiB2b24gTMO2d2lzCiBBbmRyZXcgSSBNYWNJbnR5cmUKIFRpbSBNYWNLZW56aWUKIE5pY2sgTWFjbGFyZW4KIFN0ZXZlIE1hamV3c2tpCiBHcnplZ29yeiBNYWthcmV3aWN6CitEYXZpZCBNYWxjb2xtCiBLZW4gTWFuaGVpbWVyCiBWbGFkaW1pciBNYXJhbmdvem92CiBEYXZpZCBNYXJlawogRG91ZyBNYXJpZW4KIEFsZXggTWFydGVsbGkKIEFudGhvbnkgTWFydGluCi1T6WJhc3RpZW4gTWFydGluaQorU8OpYmFzdGllbiBNYXJ0aW5pCiBSb2dlciBNYXNzZQogTmljayBNYXRoZXdzb24KIEdyYWhhbSBNYXR0aGV3cwpAQCAtNDgyLDE2ICs1MzMsMjAgQEAKIExhbWJlcnQgTWVlcnRlbnMKIEJpbGwgdmFuIE1lbGxlCiBMdWNhcyBQcmFkbyBNZWxvCitFemlvIE1lbG90dGkKIEJyaWFuIE1lcnJlbGwKIEx1a2UgTWV3YnVybgogTWlrZSBNZXllcgogU3RldmVuIE1pYWxlCiBUcmVudCBNaWNrCitTdGFuIE1paGFpCiBBcmlzdG90ZWxpcyBNaWtyb3BvdWxvcwogRGFtaWVuIE1pbGxlcgogQ2hhZCBNaWxsZXIKK0phc29uIFYuIE1pbGxlcgogSmF5IFQuIE1pbGxlcgogUm9tYW4gTWlsbmVyCitBbmRyaWkgVi4gTWlzaGtvdnNreWkKIER1c3RpbiBKLiBNaXRjaGVsbAogRG9tIE1pdGNoZWxsCiBEb3VnIE1vZW4KQEAgLTUwMCwyNCArNTU1LDI5IEBACiBQYXVsIE1vb3JlCiBEZXJlayBNb3JyCiBKYW1lcyBBIE1vcnJpc29uCitQYWJsbyBNb3V6bwogU2pvZXJkIE11bGxlbmRlcgogU2FwZSBNdWxsZW5kZXIKIE1pY2hhZWwgTXVsbGVyCitOZWlsIE11bGxlcgorUi4gRGF2aWQgTXVycmF5CiBQaW90ciBNZXllcgogSm9obiBOYWdsZQogVGFrYWhpcm8gTmFrYXlhbWEKIFRyYXZlcnMgTmFyYW4KK0NoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaQogRnJlZHJpayBOZWhyCiBUcmVudCBOZWxzb24KIFRvbnkgTmVsc29uCiBDaGFkIE5ldHplcgotTWF4IE5ldW5o9mZmZXIKK01heCBOZXVuaMO2ZmZlcgogR2VvcmdlIE5ldmlsbGUtTmVpbAogSm9oYW5uZXMgTmljb2xhaQogU2FtdWVsIE5pY29sYXJ5CiBHdXN0YXZvIE5pZW1leWVyCiBPc2NhciBOaWVyc3RyYXN6CiBIcnZvamUgTmlrc2ljCitHcmVnb3J5IE5vZmkKIEplc3NlIE5vbGxlcgogQmlsbCBOb29uCiBTdGVmYW4gTm9yYmVyZwpAQCAtNTM0LDYgKzU5NCw3IEBACiBQaWV0IHZhbiBPb3N0cnVtCiBKYXNvbiBPcmVuZG9yZmYKIERvdWdsYXMgT3JyCitNaWNoZWxlIE9ycsO5CiBEZW5pcyBTLiBPdGtpZGFjaAogTWljaGFlbCBPdHRlbmVkZXIKIFIuIE0uIE91ZGtlcmsKQEAgLTU0MSw3ICs2MDIsNyBAQAogT25kcmVqIFBhbGtvdnNreQogTWlrZSBQYWxsCiBUb2RkIFIuIFBhbG1lcgotSnVhbiBEYXZpZCBJYuHxZXogUGFsb21hcgorSnVhbiBEYXZpZCBJYsOhw7FleiBQYWxvbWFyCiBKYW4gUGFsdXMKIE0uIFBhcGlsbG9uCiBQZXRlciBQYXJlbnRlCkBAIC01NTIsNyArNjEzLDcgQEAKIFNhbXVlbGUgUGVkcm9uaQogTWFyY2VsIHZhbiBkZXIgUGVpamwKIFN0ZXZlbiBQZW1iZXJ0b24KLVNhbnRpYWdvIFBlcmVz824KK1NhbnRpYWdvIFBlcmVzw7NuCiBNYXJrIFBlcnJlZ28KIFRyZXZvciBQZXJyaW4KIEdhYnJpZWwgZGUgUGVydGh1aXMKQEAgLTU2OCwxMSArNjI5LDExIEBACiBKaW0gU3QuIFBpZXJyZQogRGFuIFBpZXJzb24KIE1hcnRpam4gUGlldGVycwotRnJhbudvaXMgUGluYXJkCitGcmFuw6dvaXMgUGluYXJkCiBaYWNoIFBpbmN1cwogTWljaGFlbCBQaW90cm93c2tpCiBBbnRvaW5lIFBpdHJvdQotSmVhbi1GcmFu529pcyBQaelyb25uZQorSmVhbi1GcmFuw6dvaXMgUGnDqXJvbm5lCiBHdWlsaGVybWUgUG9sbwogTWljaGFlbCBQb21yYW5pbmcKIEl1c3RpbiBQb3AKQEAgLTU4MSwxMSArNjQyLDEyIEBACiBQYXVsIFByZXNjb2QKIERvbm92YW4gUHJlc3RvbgogU3RldmUgUHVyY2VsbAotRmVybmFuZG8gUOlyZXoKLUVkdWFyZG8gUOlyZXoKK0Zlcm5hbmRvIFDDqXJlegorRWR1YXJkbyBQw6lyZXoKIEJyaWFuIFF1aW5sYW4KIEFuZGVycyBRdmlzdAogQnVydG9uIFJhZG9ucworQnJvZGllIFJhbwogQW50dGkgUmFzaW5lbgogU3JpZGhhciBSYXRuYWt1bWFyCiBFcmljIFJheW1vbmQKQEAgLTU5NSw2ICs2NTcsNyBAQAogSm9obiBSZWRmb3JkCiBUZXJyeSBSZWVkeQogU3RldmUgUmVldmVzCitMZW5uYXJ0IFJlZ2Vicm8KIE9maXIgUmVpY2hlbmJlcmcKIFNlYW4gUmVpZnNjaG5laWRlcgogTWljaGFlbCBQLiBSZWlsbHkKQEAgLTYyNCwxNCArNjg3LDE4IEBACiBEb25hbGQgV2FsbGFjZSBSb3VzZSBJSQogTGlhbSBSb3V0dAogQ3JhaWcgUm93bGFuZAorQ2xpbnRvbiBSb3kKIFBhdWwgUnViaW4KIFNhbSBSdWJ5CiBBdWR1biBTLiBSdW5kZQorUmF1bGkgUnVvaG9uZW4KIEplZmYgUnVzaAogU2FtIFJ1c2hpbmcKIE1hcmsgUnVzc2VsbAogTmljayBSdXNzbworU8OpYmFzdGllbiBTYWJsw6kKIEhhamltZSBTYWl0b3UKK0dlb3JnZSBTYWtraXMKIFJpY2ggU2FsegogS2V2aW4gU2FtYm9ybgogSWx5YSBTYW5kbGVyCkBAIC02NjEsNyArNzI4LDkgQEAKIERlbmlzIFNldmVyc29uCiBJYW4gU2V5ZXIKIEhhIFNoYW8KK1JpY2hhcmQgU2hhcGlybwogQnJ1Y2UgU2hlcndvb2QKK0FsZXhhbmRlciBTaGlnaW4KIFBldGUgU2hpbm5lcnMKIE1pY2hhZWwgU2hpcGxldHQKIEpvaG4gVy4gU2hpcG1hbgpAQCAtNjk5LDYgKzc2OCw3IEBACiBDYXNwZXIgU3RvZWwKIE1pY2hhZWwgU3RvbmUKIEtlbiBTdG94CitQYXRyaWNrIFN0cmF3ZGVybWFuCiBEYW4gU3Ryb21iZXJnCiBEYW5pZWwgU3R1dHpiYWNoCiBOYXRoYW4gU3VsbGl2YW4KQEAgLTcwOCw3ICs3NzgsNyBAQAogS2FsbGUgU3ZlbnNzb24KIFBhdWwgU3dhcnR6CiBUaGVuYXVsdCBTeWx2YWluCi1Q6XRlciBTemFi8worUMOpdGVyIFN6YWLDswogQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMKIEdlb2ZmIFRhbHZvbGEKIFdpbGxpYW0gVGFua3NsZXkKQEAgLTcxNiw2ICs3ODYsNyBAQAogU3RldmVuIFRhc2NodWsKIE1vbnR5IFRheWxvcgogQW15IFRheWxvcgorQW5hdG9seSBUZWNodG9uaWsKIFRvYmlhcyBUaGVsZW4KIEphbWVzIFRob21hcwogUm9iaW4gVGhvbWFzCkBAIC03MjcsMTkgKzc5OCwyNCBAQAogRnJhbmsgSi4gVG9iaW4KIFIgTGluZHNheSBUb2RkCiBCZW5uZXR0IFRvZGQKK01hdGlhcyBUb3JjaGluc2t5CitTYW5kcm8gVG9zaQogUmljaGFyZCBUb3duc2VuZAogTGF1cmVuY2UgVHJhdHQKIEpvaG4gVHJvbXAKIEphc29uIFRyb3dicmlkZ2UKIEFudGhvbnkgVHVpbmluZ2EKIFN0ZXBoZW4gVHVybmVyCitUaGVvZG9yZSBUdXJvY3kKIEJpbGwgVHV0dAogRG9vYmVlIFIuIFR6ZWNrCi1FcmVuIFT8cmtheQorRXJlbiBUw7xya2F5CiBMaW9uZWwgVWxtZXIKIFJvZ2VyIFVwb2xlCiBNaWNoYWVsIFVybWFuCiBIZWN0b3IgVXJ0dWJpYQorQW5kaSBWYWpkYQorQ2FzZSBWYW4gSG9yc2VuCiBLeWxlIFZhbmRlckJlZWsKIEF0dWwgVmFybWEKIERtaXRyeSBWYXNpbGlldgpAQCAtNzU5LDYgKzgzNSw3IEBACiBDaGFybGVzIFdhbGRtYW4KIFJpY2hhcmQgV2Fsa2VyCiBMYXJyeSBXYWxsCitLZXZpbiBXYWx6ZXIKIEdyZWcgV2FyZAogQmFycnkgV2Fyc2F3CiBTdGV2ZSBXYXRlcmJ1cnkKQEAgLTc3MywxMSArODUwLDE0IEBACiBSaWNrYXJkIFdlc3RtYW4KIEplZmYgV2hlZWxlcgogQ2hyaXN0b3BoZXIgV2hpdGUKK0RhdmlkIFdoaXRlCiBNYXRzIFdpY2htYW5uCiBUcnVpZGEgV2llZGlqawogRmVsaXggV2llbWFubgogR2VycnkgV2llbmVyCitGcmFuayBXaWVyemJpY2tpCiBCcnljZSAiWm9va28iIFdpbGNveC1PJ0hlYXJuCitKYXNvbiBXaWxsaWFtcwogSm9obiBXaWxsaWFtcwogU3VlIFdpbGxpYW1zCiBHZXJhbGQgUy4gV2lsbGlhbXMKQEAgLTc5NiwxMSArODc2LDEzIEBACiBLbGF1cy1KdWVyZ2VuIFdvbGYKIERhbiBXb2xmZQogUmljaGFyZCBXb2xmZgotR29yZG9uIFdvcmxleQogRGFycmVuIFdvcnJhbGwKK0dvcmRvbiBXb3JsZXkKIFRob21hcyBXb3V0ZXJzCiBIZWlrbyBXdW5kcmFtCiBEb3VnIFd5YXR0CitGbG9yZW50IFhpY2x1bmEKK0hpcm9rYXp1IFlhbWFtb3RvCiBLYS1QaW5nIFllZQogQm9iIFlvZGxvd3NraQogRGFubnkgWW9vCkBAIC04MTMsNyArODk1LDUgQEAKIE1pa2UgWmFybnN0b3JmZgogU2llYnJlbiB2YW4gZGVyIFplZQogVXdlIFplc3NpbgotVGFyZWsgWmlhZI4KLVBldGVyIMVzdHJhbmQKLUplc3NlIE5vbGxlcgotRnJlZHJpayBI5eVyZAorVGFyZWsgWmlhZMOpCitQZXRlciDDhXN0cmFuZApkaWZmIC0tZ2l0IGEvTWlzYy9BSVgtTk9URVMgYi9NaXNjL0FJWC1OT1RFUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkyOGY1My4uMDAwMDAwMAotLS0gYS9NaXNjL0FJWC1OT1RFUworKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi1TdWJqZWN0OiBBSVggLSBNaXNjL0FJWC1OT1RFUwotRnJvbTogVmxhZGltaXIgTWFyYW5nb3pvdiA8VmxhZGltaXIuTWFyYW5nb3pvdkBpbWFnLmZyPgotVG86IGd1aWRvQENOUkkuUmVzdG9uLlZhLlVTIChHdWlkbyB2YW4gUm9zc3VtKQotRGF0ZTogV2VkLCA2IEF1ZyAxOTk3IDExOjQxOjAwICswMjAwIChFRVQpCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUElMRVIgSU5GT1JNQVRJT04KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0oMSkgQSBwcm9ibGVtIGhhcyBiZWVuIHJlcG9ydGVkIHdpdGggIm1ha2UgdGVzdCIgZmFpbGluZyBiZWNhdXNlIG9mICJ3ZWlyZAotICAgIGluZGVudGF0aW9uLiIgIFNlYXJjaGluZyB0aGUgY29tcC5sYW5nLnB5dGhvbiBuZXdzZ3JvdXAgcmV2ZWFscyBzZXZlcmFsCi0gICAgdGhyZWFkcyBvbiB0aGlzIHN1YmplY3QsIGFuZCBpdCBzZWVtcyB0byBiZSBhIGNvbXBpbGVyIGJ1ZyBpbiBhbiBvbGQKLSAgICB2ZXJzaW9uIG9mIHRoZSBBSVggQ0MgY29tcGlsZXIuICBIb3dldmVyLCB0aGUgY29tcGlsZXIvT1MgY29tYmluYXRpb24KLSAgICB3aGljaCBoYXMgdGhpcyBwcm9ibGVtIGlzIG5vdCBpZGVudGlmaWVkLiAgSW4gcHJlcGFyYXRpb24gZm9yIHRoZSAxLjQKLSAgICByZWxlYXNlLCBWbGFkaW1pciBNYXJhbmdvem92IChWbGFkaW1pci5NYXJhbmdvem92QGltYWcuZnIpIGFuZCBNYW51cyBIYW5kCi0gICAgKG1oYW5kQGNzbi5uZXQpIHJlcG9ydGVkIG5vIHN1Y2ggdHJvdWJsZXMgZm9yIHRoZSBmb2xsb3dpbmcgY29tcGlsZXJzIGFuZAotICAgIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbnM6Ci0gICAgICAgQUlYIEMgY29tcGlsZXIgdmVyc2lvbiAzLjEuMiBvbiBBSVggNC4xLjMgYW5kIEFJWCA0LjEuNAotICAgICAgIEFJWCBDIGNvbXBpbGVyIHZlcnNpb24gMS4zLjAgb24gQUlYIDMuMi41Ci0gICAgSWYgeW91IGhhdmUgdGhpcyBwcm9ibGVtLCBwbGVhc2UgcmVwb3J0IHRoZSBjb21waWxlci9PUyB2ZXJzaW9uLgotCi0oMikgU3RlZmFuIEVzc2VyIChzZUBNSS5VbmktS29lbG4uREUpLCBpbiB3b3JrIGRvbmUgdG8gY29tcGlsZSBQeXRob24KLSAgICAxLjAuMCBvbiBBSVggMy4yLjQsIHJlcG9ydHMgdGhhdCBBSVggY29tcGlsZXJzIGRvbid0IGxpa2UgdGhlIExBTkcKLSAgICBlbnZpcm9ubWVudCB2YXJhaWFibGUgc2V0IHRvIEV1cm9wZWFuIGxvY2FsZXMuICBUaGlzIG1ha2VzIHRoZSBjb21waWxlcgotICAgIGdlbmVyYXRlIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cyB1c2luZyAiLCIgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLAotICAgIHdoaWNoIHRoZSBhc3NlbWJsZXIgZG9lc24ndCB1bmRlcnN0YW5kIChvciBwZXJoYXBzIGl0IGlzIHRoZSBvdGhlciB3YXkKLSAgICBhcm91bmQsIHdpdGggdGhlIGFzc2VtYmxlciBleHBlY3RpbmcsIGJ1dCBub3QgZ2V0dGluZyAiLCIgaW4gZmxvYXQKLSAgICBudW1iZXJzKS4gICJMQU5HPUM7IGV4cG9ydCBMQU5HIiBzb2x2ZXMgdGhlIHByb2JsZW0sIGFzIGRvZXMKLSAgICAiTEFORz1DICQoTUFLRSkgLi4uIiBpbiB0aGUgbWFzdGVyIE1ha2VmaWxlLgotCi0oMykgVGhlIGNjIChvciB4bGMpIGNvbXBpbGVyIGNvbnNpZGVycyAiUHl0aG9uL2NldmFsLmMiIHRvbyBjb21wbGV4IHRvCi0gICAgb3B0aW1pemUsIGV4Y2VwdCB3aGVuIGludm9rZWQgd2l0aCAiLXFtYXhtZW09NDAwMCIKLQotKDQpIFNvbWUgcHJvYmxlbXMgKGR1ZSB0byBfQUlYIG5vdCBiZWluZyAjZGVmaW5lZCkgd2hlbiBweXRob24gMS4wLjAgd2FzCi0gICAgY29tcGlsZWQgdXNpbmcgJ2djYyAtYW5zaScgd2VyZSByZXBvcnRlZCBieSBTdGVmYW4gRXNzZXIsIGJ1dCB3ZXJlIG5vdAotICAgIGludmVzdGlnYXRlZC4KLQotKDUpIFRoZSBjYyBjb21waWxlciBoYXMgaW50ZXJuYWwgdmFyaWFibGVzIG5hbWVkICJfX2FicyIgYW5kICJfX2RpdiIuICBUaGVzZQotICAgIG5hbWVzIGFyZSByZXNlcnZlZCBhbmQgbWF5IG5vdCBiZSB1c2VkIGFzIHByb2dyYW0gdmFyaWFibGVzIGluIGNvbXBpbGVkCi0gICAgc291cmNlLiAgKEFzIGFuIGFuZWNkb3RlIGluIHN1cHBvcnQgb2YgdGhpcywgdGhlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgUHl0aG9uL29wZXJhdG9yLmMgaGFkIHRoaXMgcHJvYmxlbSBpbiB0aGUgMS40IGJldGEgcmVsZWFzZXMsIGFuZCB0aGUKLSAgICBzb2x1dGlvbiB3YXMgdG8gcmUjZGVmaW5lIHNvbWUgY29yZS1zb3VyY2UgdmFyaWFibGVzIGhhdmluZyB0aGVzZSBuYW1lcywKLSAgICB0byBnaXZlIHRoZXNlIHB5dGhvbiB2YXJpYWJsZXMgZGlmZmVyZW50IG5hbWVzIGlmIHRoZSBidWlsZCBpcyBiZWluZyBkb25lCi0gICAgb24gQUlYLikKLQotKDYpIEFzIG1lbnRpb25lZCBpbiB0aGUgUkVBRE1FLCBidWlsZHMgZG9uZSBpbW1lZGlhdGVseSBhZnRlciBwcmV2aW91cyBidWlsZHMKLSAgICAod2l0aG91dCAibWFrZSBjbGVhbiIgb3IgIm1ha2UgY2xvYmJlciIpIHNvbWV0aW1lcyBmYWlsIGZvciBteXN0ZXJpb3VzCi0gICAgcmVhc29ucy4gIFRoZXJlIGFyZSBzb21lIHVucHJlZGljdGFibGUgcmVzdWx0cyB3aGVuIHRoZSBjb25maWd1cmF0aW9uCi0gICAgaXMgY2hhbmdlZCAodGhhdCBpcywgaWYgeW91ICJjb25maWd1cmUiIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMpIG9yIGlmCi0gICAgaW50ZXJtZWRpYXRlIGNoYW5nZXMgYXJlIG1hZGUgdG8gc29tZSBmaWxlcy4gIFBlcmZvcm1pbmcgIm1ha2UgY2xlYW4iIG9yCi0gICAgIm1ha2UgY2xvYmJlciIgcmVzb2x2ZXMgdGhlIHByb2JsZW1zLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhSRUFEIFNVUFBPUlQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BcyBvZiBBSVggdmVyc2lvbiA0LCB0aGVyZSBhcmUgdHdvIChpbmNvbXBhdGlibGUpIHR5cGVzIG9mIHB0aHJlYWRzIG9uIEFJWDoKLSAgICAgICAgYSkgIEFJWCBEQ0UgcHRocmVhZHMgKG9uIEFJWCAzLjIuNSkKLSAgICAgICAgYikgIEFJWCA0IHB0aHJlYWRzIChvbiBBSVggNC4xIGFuZCB1cCkKLVN1cHBvcnQgaGFzIGJlZW4gYWRkZWQgdG8gUHl0aG9uIHRvIGhhbmRsZSB0aGUgZGlzdGluY3Rpb24uCi0KLVRoZSBjYyBhbmQgZ2NjIGNvbXBpbGVycyBkbyBub3QgaW5pdGlhbGl6ZSBwdGhyZWFkcyBwcm9wZXJseS4gVGhlIG9ubHkKLWNvbXBpbGVycyB0aGF0IGNhbiBpbml0aWFsaXplIHB0aHJlYWRzIHByb3Blcmx5IGFyZSBJQk0gKl9yKiBjb21waWxlcnMsCi13aGljaCB1c2UgdGhlIGNydDBfci5vIG1vZHVsZSwgYW5kIHdoaWNoIGludm9rZSBsZCB3aXRoIHRoZSByZWVudHJhbnQKLXZlcnNpb24gb2YgbGliYyAobGliY19yKS4KLQotSW4gb3JkZXIgdG8gZW5hYmxlIHRocmVhZCBzdXBwb3J0LCBmb2xsb3cgdGhlc2Ugc3RlcHM6Ci0gICAxLiAgVW5jb21tZW50IHRoZSB0aHJlYWQgbW9kdWxlIGluIE1vZHVsZXMvU2V0dXAKLSAgIDIuICBjb25maWd1cmUgLS13aXRob3V0LWdjYyAtLXdpdGgtdGhyZWFkIC4uLgotICAgMy4gIG1ha2UgQ0M9ImNjX3IiIE9QVD0iLU8gLXFtYXhtZW09NDAwMCIKLQotRm9yIGV4YW1wbGUsIHRvIG1ha2Ugd2l0aCBib3RoIHRocmVhZHMgYW5kIHJlYWRsaW5lLCB1c2U6Ci0gIC4vY29uZmlndXJlIC0td2l0aG91dC1nY2MgLS13aXRoLXRocmVhZCAtLXdpdGgtcmVhZGxpbmU9L3Vzci9sb2NhbC9saWIKLSAgbWFrZSBDQz1jY19yIE9QVD0iLU8yIC1xbWF4bWVtPTQwMDAiCi0KLUlmIHRoZSAibWFrZSIgd2hpY2ggaXMgdXNlZCBpZ25vcmVzIHRoZSAiQ0M9Y2NfciIgZGlyZWN0aXZlLCBvbmUgY291bGQgYWxpYXMKLXRoZSBjYyBjb21tYW5kIHRvIGNjX3IgKGZvciBleGFtcGxlLCBpbiBDLXNoZWxsLCBwZXJmb3JtIGFuICJhbGlhcyBjYyBjY19yIikuCi0KLVZsYWRpbWlyIE1hcmFuZ296b3YgKFZsYWRpbWlyLk1hcmFuZ296b3ZAaW1hZy5mcikgcHJvdmlkZWQgdGhpcyBpbmZvcm1hdGlvbiwKLWFuZCBoZSByZXBvcnRzIHRoYXQgYSBjY19yIGJ1aWxkIGluaXRpYWxpemVzIHRocmVhZHMgcHJvcGVybHkgYW5kIHRoYXQgYWxsCi1kZW1vcyBvbiB0aHJlYWRzIHJ1biBva2F5IHdpdGggY2Nfci4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0hBUkVEIExJQlJBUlkgU1VQUE9SVAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFJWCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0IHdhcyBhZGRlZCB0byBQeXRob24gaW4gdGhlIDEuNCByZWxlYXNlIGJ5IE1hbnVzCi1IYW5kIChtaGFuZEBjc24ubmV0KSBhbmQgVmxhZGltaXIgTWFyYW5nb3pvdiAoVmxhZGltaXIuTWFyYW5nb3pvdkBpbWFnLmZyKS4KLQotUHl0aG9uIG1vZHVsZXMgbWF5IG5vdyBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWCB1c2luZyB0aGUgbm9ybWFsCi1wcm9jZXNzIG9mIHVuY29tbWVudGluZyB0aGUgIipzaGFyZWQqIiBsaW5lIGluIE1vZHVsZXMvU2V0dXAgYmVmb3JlIHRoZQotYnVpbGQuCi0KLUFJWCBzaGFyZWQgbGlicmFyaWVzIHJlcXVpcmUgdGhhdCBhbiAiZXhwb3J0IiBhbmQgImltcG9ydCIgZmlsZSBiZSBwcm92aWRlZAotYXQgY29tcGlsZSB0aW1lIHRvIGxpc3QgYWxsIGV4dGVybiBzeW1ib2xzIHdoaWNoIG1heSBiZSBzaGFyZWQgYmV0d2VlbgotbW9kdWxlcy4gIFRoZSAiZXhwb3J0IiBmaWxlIChuYW1lZCBweXRob24uZXhwKSBmb3IgdGhlIG1vZHVsZXMgYW5kIHRoZQotbGlicmFyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBQeXRob24gY29yZSBpcyBjcmVhdGVkIGJ5IHRoZSAibWFrZXhwX2FpeCIKLXNjcmlwdCBiZWZvcmUgcGVyZm9ybWluZyB0aGUgbGluayBvZiB0aGUgcHl0aG9uIGJpbmFyeS4gSXQgbGlzdHMgYWxsIGdsb2JhbAotc3ltYm9scyAoZXhwb3J0ZWQgZHVyaW5nIHRoZSBsaW5rKSBvZiB0aGUgbW9kdWxlcyBhbmQgdGhlIGxpYnJhcmllcyB0aGF0Ci1tYWtlIHVwIHRoZSBweXRob24gZXhlY3V0YWJsZS4KLQotV2hlbiBzaGFyZWQgbGlicmFyeSBtb2R1bGVzICguc28gZmlsZXMpIGFyZSBtYWRlLCBhIHNlY29uZCBzaGVsbCBzY3JpcHQKLWlzIGludm9rZWQuICBUaGlzIHNjcmlwdCBpcyBuYW1lZCAibGRfc29fYWl4IiBhbmQgaXMgYWxzbyBwcm92aWRlZCB3aXRoCi10aGUgZGlzdHJpYnV0aW9uIGluIHRoZSBNb2R1bGVzIHN1YmRpcmVjdG9yeS4gIFRoaXMgc2NyaXB0IGFjdHMgYXMgYW4gImxkIgotd3JhcHBlciB3aGljaCBoaWRlcyB0aGUgZXhwbGljaXQgbWFuYWdlbWVudCBvZiAiZXhwb3J0IiBhbmQgImltcG9ydCIgZmlsZXM7Ci1pdCBhZGRzIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMgKGluIHRoZSBhcHByb3ByaWF0ZSBvcmRlcikgdG8gdGhlIGxpbmsKLWNvbW1hbmQgdGhhdCBjcmVhdGVzIHRoZSBzaGFyZWQgbW9kdWxlLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCBpdCBzcGVjaWZpZXMKLXRoYXQgdGhlICJweXRob24uZXhwIiBmaWxlIGlzIGFuICJpbXBvcnQiIGZpbGUgZm9yIHRoZSBzaGFyZWQgbW9kdWxlLgotCi1BdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIG5laXRoZXIgdGhlIHB5dGhvbi5leHAgZmlsZSBub3IgdGhlIG1ha2V4cF9haXgKLW9yIGxkX3NvX2FpeCBzY3JpcHRzIGFyZSBpbnN0YWxsZWQgYnkgdGhlIG1ha2UgcHJvY2VkdXJlLCBzbyB5b3Ugc2hvdWxkCi1yZW1lbWJlciB0byBrZWVwIHRoZXNlIGFuZC9vciBjb3B5IHRoZW0gdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24gZm9yCi1zYWZla2VlcGluZyBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlbSB0byBhZGQgc2hhcmVkIGV4dGVuc2lvbiBtb2R1bGVzIHRvCi1weXRob24uICBIb3dldmVyLCBpZiB0aGUgbWFrZSBwcm9jZXNzIGhhcyBiZWVuIHVwZGF0ZWQgc2luY2UgdGhpcyB3cml0aW5nLAotdGhlc2UgZmlsZXMgTUFZIGhhdmUgYmVlbiBpbnN0YWxsZWQgZm9yIHlvdSBkdXJpbmcgdGhlIG1ha2UgYnkgdGhlCi1MSUJBSU5TVEFMTCBydWxlLCBpbiB3aGljaCBjYXNlIHRoZSBuZWVkIHRvIG1ha2Ugc2FmZSBjb3BpZXMgaXMgb2J2aWF0ZWQuCi0KLUlmIHlvdSB3aXNoIHRvIGFkZCBhIHNoYXJlZCBleHRlbnNpb24gbW9kdWxlIHRvIHRoZSBsYW5ndWFnZSwgeW91IHdvdWxkIGZvbGxvdwotdGhlIHN0ZXBzIGdpdmVuIGluIHRoZSBleGFtcGxlIGJlbG93ICh0aGUgZXhhbXBsZSBhZGRzIHRoZSBzaGFyZWQgZXh0ZW5zaW9uCi1tb2R1bGUgInNwYW0iIHRvIHB5dGhvbik6Ci0gICAgMS4gIE1ha2Ugc3VyZSB0aGF0ICJsZF9zb19haXgiIGFuZCAibWFrZXhwX2FpeCIgYXJlIGluIHlvdXIgcGF0aC4KLSAgICAyLiAgVGhlICJweXRob24uZXhwIiBmaWxlIHNob3VsZCBiZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0gICAgMy4gIElzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgb3IgaW5jbHVkZSB0aGVtIGluIHlvdXIgTWFrZWZpbGU6Ci0gICAgICAgICAgICBjYyAtYyBzcGFtbW9kdWxlLmMKLSAgICAgICAgICAgIGxkX3NvX2FpeCBjYyBzcGFtbW9kdWxlLm8gLW8gc3BhbW1vZHVsZS5zbwotCi1Gb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCwgZXhhbWluZSB0aGUKLWNvbnRlbnRzIG9mIHRoZSAibGRfc29fYWl4IiBhbmQgIm1ha2V4cF9haXgiIHNjcmlwdHMgb3IgcmVmZXIgdG8gdGhlIEFJWAotZG9jdW1lbnRhdGlvbi4KLQotTk9URTogIElmIHRoZSBleHRlbnNpb24gbW9kdWxlIGlzIHdyaXR0ZW4gaW4gQysrIGFuZCBjb250YWlucyB0ZW1wbGF0ZXMsCi0gICAgICAgYW4gYWx0ZXJuYXRpdmUgdG8gImxkX3NvX2FpeCIgaXMgdGhlIC91c3IvbHBwL3hsQy9iaW4vbWFrZUMrK1NoYXJlZExpYgotICAgICAgIHNjcmlwdC4gIENocmlzIE15ZXJzIChteWVyc0BUQy5Db3JuZWxsLkVEVSkgcmVwb3J0cyB0aGF0IGxkX3NvX2FpeAotICAgICAgIHdvcmtzIHdlbGwgZm9yIHNvbWUgQysrIChpbmNsdWRpbmcgdGhlIEMrKyB0aGF0IGlzIGdlbmVyYXRlZAotICAgICAgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFB5dGhvbiBTV0lHIHBhY2thZ2UgW1NXSUcgY2FuIGJlIGZvdW5kIGF0Ci0gICAgICAgaHR0cDovL3d3dy5jcy51dGFoLmVkdS9+YmVhemxleS9TV0lHL3N3aWcuaHRtbF0pLiAgSG93ZXZlciwgaXQgaXMgbm90Ci0gICAgICAga25vd24gd2hldGhlciBtYWtlQysrU2hhcmVkTGliIGNhbiBiZSB1c2VkIGFzIGEgY29tcGxldGUgc3Vic3RpdHV0ZQotICAgICAgIGZvciBsZF9zb19haXguCi0KLUFjY29yZGluZyB0byBHYXJ5IEhvb2sgZnJvbSBJQk0sIHRoZSBmb3JtYXQgb2YgdGhlIGV4cG9ydCBmaWxlIGNoYW5nZWQKLWluIEFJWCA0LjIuICBGb3IgQUlYIDQuMiBhbmQgbGF0ZXIsIGEgcGVyaW9kICIuIiBpcyByZXF1aXJlZCBvbiB0aGUKLWZpcnN0IGxpbmUgYWZ0ZXIgIiMhIi4gIElmIHB5dGhvbiBjcmFzaGVzIHdoaWxlIGltcG9ydGluZyBhIHNoYXJlZAotbGlicmFyeSwgeW91IGNhbiB0cnkgbW9kaWZ5aW5nIHRoZSBMSU5LQ0MgdmFyaWFibGUgaW4gdGhlIE1ha2VmaWxlLgotSXQgcHJvYmFibHkgbG9va3MgbGlrZSB0aGlzOgotCi0JTElOS0NDPSAgICAgJChzcmNkaXIpL01vZHVsZXMvbWFrZXhwX2FpeCBNb2R1bGVzL3B5dGhvbi5leHAgXCJcIiAkKExJQlJBUlkpOyAkKFBVUklGWSkgJChDWFgpCi0KLVlvdSBzaG91bGQgbW9kaWZ5IHRoZSBcIlwiIHRvIGJlIGEgcGVyaW9kOgotCi0JTElOS0NDPSAgICAgJChzcmNkaXIpL01vZHVsZXMvbWFrZXhwX2FpeCBNb2R1bGVzL3B5dGhvbi5leHAgLiAkKExJQlJBUlkpOyAkKFBVUklGWSkgJChDWFgpCi0KLVVzaW5nIGEgcGVyaW9kIGZpeGVkIHRoZSBwcm9ibGVtIGluIHRoZSBzbmFrZSBmYXJtLiAgWU1NVi4KLVRoaXMgZml4IGhhcyBiZWVuIGluY29ycG9yYXRlZCBpbnRvIFB5dGhvbiAyLjMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvTWlzYy9CZU9TLXNldHVwLnB5IGIvTWlzYy9CZU9TLXNldHVwLnB5CmluZGV4IGM1ZTAyY2MuLjJiNGNiMWYgMTAwNjQ0Ci0tLSBhL01pc2MvQmVPUy1zZXR1cC5weQorKysgYi9NaXNjL0JlT1Mtc2V0dXAucHkKQEAgLTM1Niw3ICszNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBkYmxpYikgKQogCiAgICAgICAgICMgVW5peC1vbmx5IG1vZHVsZXMKLSAgICAgICAgaWYgcGxhdGZvcm0gbm90IGluIFsnbWFjJywgJ3dpbjMyJ106CisgICAgICAgIGlmIHBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICAjIFN0ZWVuIEx1bWhvbHQncyB0ZXJtaW9zIG1vZHVsZQogICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigndGVybWlvcycsIFsndGVybWlvcy5jJ10pICkKICAgICAgICAgICAgICMgSmVyZW15IEh5bHRvbidzIHJsaW1pdCBpbnRlcmZhY2UKZGlmZiAtLWdpdCBhL01pc2MvSElTVE9SWSBiL01pc2MvSElTVE9SWQppbmRleCBhYjFiMWVjLi5hMjliOTA3IDEwMDY0NAotLS0gYS9NaXNjL0hJU1RPUlkKKysrIGIvTWlzYy9ISVNUT1JZCkBAIC05MDUwLDcgKzkwNTAsNyBAQAogUHl0aG9uIGNvZGUuICBUaGUgbGltaXQgZXhpc3RzIHRvIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uIGZyb20KIG92ZXJmbG93aW5nIHRoZSBDIHN0YWNrIGFuZCBjYXVzaW5nIGEgY29yZSBkdW1wLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMKIDEwMDAuICBUaGUgbWF4aW11bSBzYWZlIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgcGxhdGZvcm0gY2FuIGJlIGZvdW5kCi1ieSBydW5uaW5nIE1pc2MvZmluZF9yZWN1cnNpb25saW1pdC5weS4KK2J5IHJ1bm5pbmcgVG9vbHMvc2NyaXB0cy9maW5kX3JlY3Vyc2lvbmxpbWl0LnB5LgogCiBOZXcgTW9kdWxlcyBhbmQgUGFja2FnZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCmluZGV4IDQ0OTM0OGUuLmYxZGE5MmMgMTAwNjQ0Ci0tLSBhL01pc2MvTkVXUworKysgYi9NaXNjL05FV1MKQEAgLTEsMTc1ICsxLDYzNiBAQAotKysrKysrKysrKysKIFB5dGhvbiBOZXdzCiArKysrKysrKysrKwogCi0oZWRpdG9yczogY2hlY2sgTkVXUy5oZWxwIGZvciBpbmZvcm1hdGlvbiBhYm91dCBlZGl0aW5nIE5FV1MgdXNpbmcgUmVTVC4pCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNi43PworV2hhdCdzIE5ldyBpbiBQeXRob24gMi43LjI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogKlJlbGVhc2UgZGF0ZTogWFhYWC1YWC1YWCoKIAotKk5PVEU6IFB5dGhvbiAyLjYgaXMgaW4gc2VjdXJpdHktZml4LW9ubHkgbW9kZS4gIE5vIG5vbi1zZWN1cml0eSBidWcgZml4ZXMgYXJlCi0gYWxsb3dlZC4gIFB5dGhvbiAyLjYuNyBhbmQgYmV5b25kIHdpbGwgYmUgc291cmNlIG9ubHkgcmVsZWFzZXMuKgotCi0KIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQogCi1MaWJyYXJ5Ci0tLS0tLS0tCistIElzc3VlICMxMDQ1MTogbWVtb3J5dmlldyBvYmplY3RzIGNvdWxkIGFsbG93IHRvIG11dGF0ZSBhIHJlYWRhYmxlIGJ1ZmZlci4KKyAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KIAotLSBJc3N1ZSAjOTEyOTogc210cGQucHkgaXMgdnVsbmVyYWJsZSB0byBEb1MgYXR0YWNrcyBkZXJpdmluZyBmcm9tIG1pc3NpbmcKLSAgZXJyb3IgaGFuZGxpbmcgd2hlbiBhY2NlcHRpbmcgYSBuZXcgY29ubmVjdGlvbi4KKy0gSXNzdWUgIzEwODkyOiBEb24ndCBzZWdmYXVsdCB3aGVuIHRyeWluZyB0byBkZWxldGUgX19hYnN0cmFjdG1ldGhvZHNfXyBmcm9tIGEKKyAgY2xhc3MuCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNi42PwotPT09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICM4MDIwOiBBdm9pZCBhIGNyYXNoIHdoZXJlIHRoZSBzbWFsbCBvYmplY3RzIGFsbG9jYXRvciB3b3VsZCByZWFkCisgIG5vbi1QeXRob24gbWFuYWdlZCBtZW1vcnkgd2hpbGUgaXQgaXMgYmVpbmcgbW9kaWZpZWQgYnkgYW5vdGhlciB0aHJlYWQuCisgIFBhdGNoIGJ5IE1hdHQgQmFuZHkuCiAKLSpSZWxlYXNlIGRhdGU6IDIwMTAtMDgtMjQqCistIElzc3VlICMxMTAwNDogUmVwYWlyZWQgZWRnZSBjYXNlIGluIGRlcXVlLmNvdW50KCkuCiAKLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQorLSBJc3N1ZSAjODI3ODogT24gV2luZG93cyBhbmQgd2l0aCBhIE5URlMgZmlsZXN5c3RlbSwgb3Muc3RhdCgpIGFuZCBvcy51dGltZSgpCisgIGNhbiBub3cgaGFuZGxlIGRhdGVzIGFmdGVyIDIwMzguCisKKy0gSXNzdWUgIzQyMzY6IFB5X0luaXRNb2R1bGU0IG5vdyBjaGVja3MgdGhlIGltcG9ydCBtYWNoaW5lcnkgZGlyZWN0bHkKKyAgcmF0aGVyIHRoYW4gdGhlIFB5X0lzSW5pdGlhbGl6ZWQgZmxhZywgYXZvaWRpbmcgYSBGYXRhbCBQeXRob24KKyAgZXJyb3IgaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHdoZW4gYW4gaW1wb3J0IGlzIGRvbmUgaW4gX19kZWxfXy4KKworLSBJc3N1ZSAjMTA2NzQ6IFJlbW92ZSB1bnVzZWQgJ2RpY3RtYWtlcicgcnVsZSBmcm9tIGdyYW1tYXIuCisKKy0gSXNzdWUgIzEwNTk2OiBGaXggZmxvYXQuX19tb2RfXyB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW91ciBhcworICBmbG9hdC5fX2Rpdm1vZF9fIHdpdGggcmVzcGVjdCB0byBzaWduZWQgemVyb3MuICAtNC4wICUgNC4wIHNob3VsZCBiZQorICAwLjAsIG5vdCAtMC4wLgorCistIElzc3VlICMxMTM4NjogYnl0ZWFycmF5LnBvcCgpIG5vdyB0aHJvd3MgSW5kZXhFcnJvciB3aGVuIHRoZSBieXRlYXJyYXkgaXMKKyAgZW1wdHksIGluc3RlYWQgb2YgT3ZlcmZsb3dFcnJvci4KIAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMxMTMwNjogbWFpbGJveCBpbiBjZXJ0YWluIGNhc2VzIGFkYXB0cyB0byBhbiBpbmFiaWxpdHkgdG8gb3BlbgorICBjZXJ0YWluIGZpbGVzIGluIHJlYWQtd3JpdGUgbW9kZS4gIFByZXZpb3VzbHkgaXQgZGV0ZWN0ZWQgdGhpcyBieQorICBjaGVja2luZyBmb3IgRUFDQ0VTLCBub3cgaXQgYWxzbyBjaGVja3MgZm9yIEVST0ZTLgogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuNiByYyAyPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0gSXNzdWUgIzExMjY1OiBhc3luY29yZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgRVBJUEUsIEVCQURGIGFuZCBFQUdBSU4gZXJyb3JzCisgIG9uIGFjY2VwdCgpLCBzZW5kKCkgYW5kIHJlY3YoKS4KIAotKlJlbGVhc2UgZGF0ZTogMjAxMC0wOC0xNioKKy0gSXNzdWUgIzExMzI2OiBBZGQgdGhlIG1pc3NpbmcgY29ubmVjdF9leCgpIGltcGxlbWVudGF0aW9uIGZvciBTU0wgc29ja2V0cywKKyAgYW5kIG1ha2UgaXQgd29yayBmb3Igbm9uLWJsb2NraW5nIGNvbm5lY3RzLgogCi1MaWJyYXJ5Ci0tLS0tLS0tCistIElzc3VlICMxMDk1NjogQnVmZmVyZWQgSS9PIGNsYXNzZXMgcmV0cnkgcmVhZGluZyBvciB3cml0aW5nIGFmdGVyIGEgc2lnbmFsCisgIGhhcyBhcnJpdmVkIGFuZCB0aGUgaGFuZGxlciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuCiAKLS0gSXNzdWUgIzk2MDA6IERvbid0IHVzZSByZWxhdGl2ZSBpbXBvcnQgZm9yIF9tdWx0aXByb2Nlc3Npbmcgb24gV2luZG93cy4KKy0gSXNzdWUgIzEwNjgwOiBGaXggbXV0dWFsbHkgZXhjbHVzaXZlIGFyZ3VtZW50cyBmb3IgYXJndW1lbnQgZ3JvdXBzIGluCisgIGFyZ3BhcnNlLgogCi0tIElzc3VlICM4Njg4OiBSZXZlcnQgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIDIuNi42cmMxIChtYWtpbmcgRGlzdHV0aWxzCi0gIHJlY2FsY3VsYXRlIE1BTklGRVNUIGV2ZXJ5IHRpbWUpLgorLSBJc3N1ZSAjNDY4MTogQWxsb3cgbW1hcCgpIHRvIHdvcmsgb24gZmlsZSBzaXplcyBhbmQgb2Zmc2V0cyBsYXJnZXIgdGhhbgorICA0R0IsIGV2ZW4gb24gMzItYml0IGJ1aWxkcy4gIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwsIGFkYXB0ZWQgZm9yCisgIDMyLWJpdCBXaW5kb3dzLgogCi0tIElzc3VlICM1Nzk4OiBIYW5kbGUgc2VsZWN0LnBvbGwgZmxhZyBvZGRpdGllcyBwcm9wZXJseSBvbiBPUyBYLgotICBUaGlzIGZpeGVzIHRlc3RfYXN5bmNoYXQgYW5kIHRlc3Rfc210cGxpYiBmYWlsdXJlcyBvbiBPUyBYLgorLSBJc3N1ZSAjMTAzNjA6IEluIFdlYWtTZXQsIGRvIG5vdCByYWlzZSBUeXBlRXJyb3JzIHdoZW4gdGVzdGluZyBmb3IKKyAgbWVtYmVyc2hpcCBvZiBub24td2Vha3JlZmFibGUgb2JqZWN0cy4KIAotLSBJc3N1ZSAjOTU0MzogRml4IHJlZ3Jlc3Npb24gaW4gc29ja2V0LnB5IGludHJvZHVjZWQgaW4gUHl0aG9uIDIuNi42IHJjIDEKLSAgaW4gcjgzNjI0LgorLSBJc3N1ZSAjMTA1NDk6IEZpeCBweWRvYyB0cmFjZWJhY2sgd2hlbiB0ZXh0LWRvY3VtZW50aW5nIGNlcnRhaW4gY2xhc3Nlcy4KKworLSBJc3N1ZSAjOTQwMjg2OiBweWRvYy5IZWxwZXIuaGVscCgpIGlnbm9yZXMgaW5wdXQvb3V0cHV0IGluaXQgcGFyYW1ldGVycy4KKworLSBJc3N1ZSAjMTExNzE6IEZpeCBkZXRlY3Rpb24gb2YgY29uZmlnL01ha2VmaWxlIHdoZW4gLS1wcmVmaXggIT0KKyAgLS1leGVjLXByZWZpeCwgd2hpY2ggY2F1c2VkIFB5dGhvbiB0byBub3Qgc3RhcnQuCisKKy0gSXNzdWUgIzExMTE2OiBhbnkgZXJyb3IgZHVyaW5nIGFkZGl0aW9uIG9mIGEgbWVzc2FnZSB0byBhIG1haWxib3ggbm93IGNhdXNlcworICBhIHJvbGxiYWNrLCBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG1haWxib3ggcGFydGlhbGx5IG1vZGlmaWVkLgorCistIElzc3VlICM4Mjc1OiBGaXggcGFzc2luZyBvZiBjYWxsYmFjayBhcmd1bWVudHMgd2l0aCBjdHlwZXMgdW5kZXIgV2luNjQuCisgIFBhdGNoIGJ5IFN0YW4gTWloYWkuCisKKy0gSXNzdWUgIzEwOTQwOiBXb3JrYXJvdW5kIGFuIElETEUgaGFuZyBvbiBNYWMgT1MgWCAxMC42IHdoZW4gdXNpbmcgdGhlCisgIG1lbnUgYWNjZWxlcmF0b3JzIGZvciBPcGVuIE1vZHVsZSwgR28gdG8gTGluZSwgYW5kIE5ldyBJbmRlbnQgV2lkdGguCisgIFRoZSBhY2NlbGVyYXRvcnMgc3RpbGwgd29yayBidXQgbm8gbG9uZ2VyIGFwcGVhciBpbiB0aGUgbWVudSBpdGVtcy4KKworLSBJc3N1ZSAjMTA5MDc6IFdhcm4gT1MgWCAxMC42IElETEUgdXNlcnMgdG8gdXNlIEFjdGl2ZVN0YXRlIFRjbC9UayA4LjUsIHJhdGhlcgorICB0aGFuIHRoZSBjdXJyZW50bHkgcHJvYmxlbWF0aWMgQXBwbGUtc3VwcGxpZWQgb25lLCB3aGVuIHJ1bm5pbmcgd2l0aCB0aGUKKyAgNjQtLzMyLWJpdCBpbnN0YWxsZXIgdmFyaWFudC4KKworLSBJc3N1ZSAjMTEwNTI6IENvcnJlY3QgSURMRSBtZW51IGFjY2VsZXJhdG9ycyBvbiBNYWMgT1MgWCBmb3IgU2F2ZQorICBjb21tYW5kcy4KKworLSBJc3N1ZSAjMTA5NDk6IEltcHJvdmVkIHJvYnVzdG5lc3Mgb2Ygcm90YXRpbmcgZmlsZSBoYW5kbGVycy4KKworLSBJc3N1ZSAjMTA5NTU6IEZpeCBhIHBvdGVudGlhbCBjcmFzaCB3aGVuIHRyeWluZyB0byBtbWFwKCkgYSBmaWxlIHBhc3QgaXRzCisgIGxlbmd0aC4gIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzEwODk4OiBBbGxvdyBjb21waWxpbmcgdGhlIHBvc2l4IG1vZHVsZSB3aGVuIHRoZSBDIGxpYnJhcnkgZGVmaW5lcworICBhIHN5bWJvbCBuYW1lZCBGU1RBVC4KKworLSBJc3N1ZSAjNjA3NTogSURMRSBvbiBNYWMgT1MgWCBub3cgd29ya3Mgd2l0aCBib3RoIENhcmJvbiBBcXVhVGsgYW5kCisgIENvY29hIEFxdWFUay4KKworLSBJc3N1ZSAjMTA5MTY6IG1tYXAgc2hvdWxkIG5vdCBzZWdmYXVsdCB3aGVuIGEgZmlsZSBpcyBtYXBwZWQgdXNpbmcgMCBhcworICBsZW5ndGggYW5kIGEgbm9uLXplcm8gb2Zmc2V0LCBhbmQgYW4gYXR0ZW1wdCB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiBmaWxlCisgIGlzIG1hZGUgKEluZGV4RXJyb3IgaXMgcmFpc2VkIGluc3RlYWQpLiAgUGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzEwODc1OiBVcGRhdGUgUmVndWxhciBFeHByZXNzaW9uIEhPV1RPOyBwYXRjaCBieSAnU2lsZW50R2hvc3QnLgorCistIElzc3VlICMxMDgyNzogQ2hhbmdlZCB0aGUgcnVsZXMgZm9yIDItZGlnaXQgeWVhcnMuICBUaGUgdGltZS5hc2N0aW1lCisgIGZ1bmN0aW9uIHdpbGwgbm93IGZvcm1hdCBhbnkgeWVhciB3aGVuIGBgdGltZS5hY2NlcHQyZHllYXJgYCBpcworICBmYWxzZSBhbmQgd2lsbCBhY2NlcHQgeWVhcnMgPj0gMTAwMCBvdGhlcndpc2UuICBUaGUgeWVhciByYW5nZQorICBhY2NlcHRlZCBieSBgYHRpbWUubWt0aW1lYGAgYW5kIGBgdGltZS5zdHJmdGltZWBgIGlzIHN0aWxsIHN5c3RlbQorICBkZXBlbmRlbnQsIGJ1dCBgYHRpbWUubWt0aW1lYGAgd2lsbCBub3cgYWNjZXB0IGZ1bGwgcmFuZ2Ugc3VwcG9ydGVkCisgIGJ5IHRoZSBPUy4gIENvbnZlcnNpb24gb2YgMi1kaWdpdCB5ZWFycyB0byA0LWRpZ2l0IGlzIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzEwODY5OiBGaXhlZCBidWcgd2hlcmUgYXN0LmluY3JlbWVudF9saW5lbm8gbW9kaWZpZWQgdGhlIHJvb3QKKyAgbm9kZSB0d2ljZS4KKworLSBJc3N1ZSAjNzg1ODogUmFpc2UgYW4gZXJyb3IgcHJvcGVybHkgd2hlbiBvcy51dGltZSgpIGZhaWxzIHVuZGVyIFdpbmRvd3MKKyAgb24gYW4gZXhpc3RpbmcgZmlsZS4KKworLSBJc3N1ZSAjMzgzOTogd3NnaXJlZiBzaG91bGQgbm90IG92ZXJyaWRlIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHNldCBieQorICB0aGUgYXBwbGljYXRpb24uICBJbml0aWFsIHBhdGNoIGJ5IENsb3ZpcyBGYWJyaWNpby4KKworLSBJc3N1ZSAjMTA4MDYsIGlzc3VlICM5OTA1OiBGaXggc3VicHJvY2VzcyBwaXBlcyB3aGVuIHNvbWUgb2YgdGhlIHN0YW5kYXJkCisgIGZpbGUgZGVzY3JpcHRvcnMgKDAsIDEsIDIpIGFyZSBjbG9zZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLiAgSW5pdGlhbAorICBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjNDY2Mjogb3MudGVtcG5hbSgpLCBvcy50bXBmaWxlKCkgYW5kIG9zLnRtcG5hbSgpIG5vdyByYWlzZSBhIHB5M2sKKyAgRGVwcmVjYXRpb25XYXJuaW5nLgorCistIFN1YmNsYXNzZXMgb2YgY29sbGVjdGlvbnMuT3JkZXJlZERpY3Qgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggX19taXNzaW5nX18uCisKKy0gSXNzdWUgMTA3NTMgLSBDaGFyYWN0ZXJzICc7JywnPScgYW5kICcsJyBpbiB0aGUgUEFUSF9JTkZPIGVudmlyb25tZW50CisgIHZhcmlhYmxlIHdvbid0IGJlIHF1b3RlZCB3aGVuIHRoZSBVUkkgaXMgY29uc3RydWN0ZWQgYnkgdGhlIHdzZ2lyZWYudXRpbCAncworICByZXF1ZXN0X3VyaSBtZXRob2QuIEFjY29yZGluZyB0byBSRkMgMzk4NiwgdGhlc2UgY2hhcmFjdGVycyBjYW4gYmUgYSBwYXJ0IG9mCisgIHBhcmFtcyBpbiBQQVRIIGNvbXBvbmVudCBvZiBVUkkgYW5kIG5lZWQgbm90IGJlIHF1b3RlZC4KKworLSBJc3N1ZSAxMDczODogRml4IHdlYmJyb3dzZXIuT3BlcmEucmFpc2Vfb3B0cworCistIElzc3VlIDk4MjQ6IFNpbXBsZUNvb2tpZSBub3cgZW5jb2RlcyAsIGFuZCA7IGluIHZhbHVlcyB0byBjYXRlciB0byBob3cKKyAgYnJvd3NlcnMgYWN0dWFsbHkgcGFyc2UgY29va2llcy4KKworLSBJc3N1ZSAjMTM3OTQxNjogZWxpbWluYXRlZCBhIHNvdXJjZSBvZiBhY2NpZGVudGFsIHVuaWNvZGUgcHJvbW90aW9uIGluCisgIGVtYWlsLmhlYWRlci5IZWFkZXIuZW5jb2RlLgorCistIElzc3VlICM1MjU4LyMxMDY0MjogaWYgc2l0ZS5weSBlbmNvdW50ZXJzIGEgLnB0aCBmaWxlIHRoYXQgZ2VuZXJhdGVzIGFuIGVycm9yLAorICBpdCBub3cgcHJpbnRzIHRoZSBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZCB0cmFjZWJhY2sgdG8gc3RkZXJyIGFuZCBza2lwcworICB0aGUgcmVzdCBvZiB0aGF0IGluZGl2aWR1YWwgZmlsZSwgaW5zdGVhZCBvZiBzdG9wcGluZyBwcm9jZXNzaW5nIGVudGlyZWx5LgorCistIElzc3VlICMxMDc1MDogVGhlIGBgcmF3YGAgYXR0cmlidXRlIG9mIGJ1ZmZlcmVkIElPIG9iamVjdHMgaXMgbm93IHJlYWQtb25seS4KKworLSBJc3N1ZSAjMTAyNDI6IHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEl0ZW1zRXF1YWwgbWFrZXMgdG9vIG1hbnkgYXNzdW1wdGlvbnMKKyAgYWJvdXQgaW5wdXQuCisKKy0gSXNzdWUgIzEwNjExOiBTeXN0ZW1FeGl0IHNob3VsZCBub3QgY2F1c2UgYSB1bml0dGVzdCB0ZXN0IHJ1biB0byBleGl0LgorCistIElzc3VlICM2NzkxOiBMaW1pdCBoZWFkZXIgbGluZSBsZW5ndGggKHRvIDY1NTM1IGJ5dGVzKSBpbiBodHRwLmNsaWVudCwKKyAgdG8gYXZvaWQgZGVuaWFsIG9mIHNlcnZpY2VzIGZyb20gdGhlIG90aGVyIHBhcnR5LgorCistIElzc3VlICMxMDQwNDogVXNlIGN0bC1idXR0b24tMSBvbiBPU1ggZm9yIHRoZSBjb250ZXh0IG1lbnUgaW4gSWRsZS4KKworLSBJc3N1ZSAjOTkwNzogRml4IHRhYiBoYW5kbGluZyBvbiBPU1ggd2hlbiB1c2luZyBlZGl0bGluZSBieSBjYWxsaW5nCisgIHJsX2luaXRpYWxpemUgZmlyc3QsIHRoZW4gc2V0dGluZyBvdXIgY3VzdG9tIGRlZmF1bHRzLCB0aGVuIHJlYWRpbmcgLmVkaXRyYy4KKworLSBJc3N1ZSAjNDE4ODogQXZvaWQgY3JlYXRpbmcgZHVtbXkgdGhyZWFkIG9iamVjdHMgd2hlbiBsb2dnaW5nIG9wZXJhdGlvbnMKKyAgZnJvbSB0aGUgdGhyZWFkaW5nIG1vZHVsZSAod2l0aCB0aGUgaW50ZXJuYWwgdmVyYm9zZSBmbGFnIGFjdGl2YXRlZCkuCisKKy0gSXNzdWUgIzk3MjE6IEZpeCB0aGUgYmVoYXZpb3Igb2YgdXJsam9pbiB3aGVuIHRoZSByZWxhdGl2ZSB1cmwgc3RhcnRzIHdpdGggYQorICAnOycgY2hhcmFjdGVyLiBQYXRjaCBieSBXZXMgQ2hvdy4KKworLSBJc3N1ZSAjMTA3MTQ6IExpbWl0IGxlbmd0aCBvZiBpbmNvbWluZyByZXF1ZXN0IGluIGh0dHAuc2VydmVyIHRvIDY1NTM2IGJ5dGVzCisgIGZvciBzZWN1cml0eSByZWFzb25zLiAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjOTU1ODogRml4IGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2V4dCB3aXRoIFZTIDguMC4KKworLSBJc3N1ZSAjMTA2OTU6IHBhc3NpbmcgdGhlIHBvcnQgYXMgYSBzdHJpbmcgdmFsdWUgdG8gdGVsbmV0bGliIG5vIGxvbmdlcgorICBjYXVzZXMgZGVidWcgbW9kZSB0byBmYWlsLgorCistIElzc3VlICMxMDEwNzogV2FybiBhYm91dCB1bnNhdmVkIGZpbGVzIGluIElETEUgb24gT1NYLgorCistIElzc3VlICMxMDQwNjogRW5hYmxlIFJzdHJpcCBJRExFIGV4dGVuc2lvbiBvbiBPU1ggKGp1c3QgbGlrZSBvbiBvdGhlcgorICBwbGF0Zm9ybXMpLgorCistIElzc3VlICMxMDQ3ODogUmVlbnRyYW50IGNhbGxzIGluc2lkZSBidWZmZXJlZCBJTyBvYmplY3RzIChmb3IgZXhhbXBsZSBieQorICB3YXkgb2YgYSBzaWduYWwgaGFuZGxlcikgbm93IHJhaXNlIGEgUnVudGltZUVycm9yIGluc3RlYWQgb2YgZnJlZXppbmcgdGhlCisgIGN1cnJlbnQgcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTA0OTc6IEZpeCBpbmNvcnJlY3QgdXNlIG9mIGdldHRleHQgaW4gYXJncGFyc2UuCisKKy0gSXNzdWUgIzEwNDY0OiBuZXRyYyBub3cgY29ycmVjdGx5IGhhbmRsZXMgbGluZXMgd2l0aCBlbWJlZGRlZCAnIycgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTczMTcxNzogRml4ZWQgdGhlIHByb2JsZW0gd2hlcmUgc3VicHJvY2Vzcy53YWl0KCkgY291bGQgY2F1c2UgYW4KKyAgT1NFcnJvciBleGNlcHRpb24gd2hlbiBUaGUgT1MgaGFkIGJlZW4gdG9sZCB0byBpZ25vcmUgU0lHQ0xEIGluIG91ciBwcm9jZXNzCisgIG9yIG90aGVyd2lzZSBub3Qgd2FpdCBmb3IgZXhpdGluZyBjaGlsZCBwcm9jZXNzZXMuCisKKy0gSXNzdWUgIzk1MDk6IGFyZ3BhcnNlIG5vdyBwcm9wZXJseSBoYW5kbGVzIElPRXJyb3JzIHJhaXNlZCBieQorICBhcmdwYXJzZS5GaWxlVHlwZS4KIAogRXh0ZW5zaW9uIE1vZHVsZXMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzc1Njc6IERvbid0IGNhbGwgYHNldHVwdGVybScgdHdpY2UuCistIElzc3VlICM2NzgyNTA6IE1ha2UgbW1hcCBmbHVzaCBhIG5vb3Agb24gQUNDRVNTX1JFQUQgYW5kIEFDQ0VTU19DT1BZLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTA3MDk6IEFkZCB1cGRhdGVkIEFJWCBub3RlcyBpbiBNaXNjL1JFQURNRS5BSVguCisKKy0gSXNzdWUgIzExMTg0OiBGaXggbGFyZ2UtZmlsZSBzdXBwb3J0IG9uIEFJWC4KKworLSBJc3N1ZSAjOTQxMzQ2OiBGaXggYnJva2VuIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIG9uIEFJWC4KKworLSBJc3N1ZSAjMTEyNjg6IFByZXZlbnQgTWFjIE9TIFggSW5zdGFsbGVyIGZhaWx1cmUgaWYgRG9jdW1lbnRhdGlvbgorICBwYWNrYWdlIGhhZCBwcmV2aW91c2x5IGJlZW4gaW5zdGFsbGVkLgorCistIElzc3VlICMxMTA3OTogVGhlIC9BcHBsaWNhdGlvbnMvUHl0aG9uIHgueCBmb2xkZXIgY3JlYXRlZCBieSB0aGUgTWFjCisgIE9TIFggaW5zdGFsbGVycyBub3cgaW5jbHVkZXMgYSBsaW5rIHRvIHRoZSBpbnN0YWxsZWQgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTEwNTQ6IEFsbG93IE1hYyBPUyBYIGluc3RhbGxlciBidWlsZHMgdG8gYWdhaW4gd29yayBvbiAxMC41IHdpdGgKKyAgdGhlIHN5c3RlbS1wcm92aWRlZCBQeXRob24uCisKKy0gSXNzdWUgIzEwODQzOiBVcGRhdGUgdGhpcmQtcGFydHkgbGlicmFyeSB2ZXJzaW9ucyB1c2VkIGluIE9TIFgKKyAgMzItYml0IGluc3RhbGxlciBidWlsZHM6IGJ6aXAyIDEuMC42LCByZWFkbGluZSA2LjEuMiwgU1FMaXRlIDMuNy40CisgICh3aXRoIEZUUzMvRlRTNCBhbmQgUlRSRUUgZW5hYmxlZCksIGFuZCBuY3Vyc2VzdyA1LjUgKHdpZGUtY2hhcgorICBzdXBwb3J0IGVuYWJsZWQpLgorCistIERvbid0IHJ1biBwZ2VuIHR3aWNlIHdoZW4gdXNpbmcgbWFrZSAtai4KKworLSBJc3N1ZSAjNzcxNjogVW5kZXIgU29sYXJpcywgZG9uJ3QgYXNzdW1lIGV4aXN0ZW5jZSBvZiAvdXNyL3hwZzQvYmluL2dyZXAgaW4KKyAgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYnV0IHVzZSAkR1JFUCBpbnN0ZWFkLiAgUGF0Y2ggYnkgRmFiaWFuIEdyb2ZmZW4uCisKKy0gSXNzdWUgIzEwNDc1OiBEb24ndCBoYXJkY29kZSBjb21waWxlcnMgZm9yIExEU0hBUkVEL0xEQ1hYU0hBUkVEIG9uIE5ldEJTRAorICBhbmQgRHJhZ29uRmx5IEJTRC4gIFBhdGNoIGJ5IE5pY29sYXMgSm9seS4KKworLSBJc3N1ZSAjMTA2NTU6IEZpeCB0aGUgYnVpbGQgb24gUG93ZXJQQyBvbiBMaW51eCB3aXRoIEdDQyB3aGVuIGJ1aWxkaW5nIHdpdGgKKyAgdGltZXN0YW1wIHByb2ZpbGluZyAoLS13aXRoLXRzYyk6IHRoZSBwcmVwcm9jZXNzb3IgdGVzdCBmb3IgdGhlIFBvd2VyUEMKKyAgc3VwcG9ydCBub3cgbG9va3MgZm9yICJfX3Bvd2VycGNfXyIgYXMgd2VsbCBhcyAiX19wcGNfXyI6IHRoZSBsYXR0ZXIgc2VlbXMgdG8KKyAgb25seSBiZSBwcmVzZW50IG9uIE9TIFg7IHRoZSBmb3JtZXIgaXMgdGhlIGNvcnJlY3Qgb25lIGZvciBMaW51eCB3aXRoIEdDQy4KIAogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzk1Njg6IEZpeCB0ZXN0X3VybGxpYjJfbG9jYWxuZXQgb24gT1MgWCAxMC4zLgorLSBJc3N1ZSAjMTA4MjI6IEZpeCB0ZXN0X3Bvc2l4OnRlc3RfZ2V0Z3JvdXBzIGZhaWx1cmUgdW5kZXIgU29sYXJpcy4gIFBhdGNoCisgIGJ5IFJvc3MgTGFnZXJ3YWxsLgogCi0tIElzc3VlICM5MTQ1OiBGaXggdGVzdF9jb2VyY2lvbiBmYWlsdXJlIGluIHJlZmxlYWsgcnVucy4KKy0gSXNzdWUgIzYyOTM6IEhhdmUgcmVncnRlc3QucHkgZWNobyBiYWNrIHN5cy5mbGFncy4gIFRoaXMgaXMgZG9uZSBieSBkZWZhdWx0CisgIGluIHdob2xlIHJ1bnMgYW5kIGVuYWJsZWQgc2VsZWN0aXZlbHkgdXNpbmcgYGAtLWhlYWRlcmBgIHdoZW4gcnVubmluZyBhbgorICBleHBsaWNpdCBsaXN0IG9mIHRlc3RzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ29sbGluIFdpbnRlci4KIAotLSBJc3N1ZSAjODQzMzogRml4IHRlc3RfY3Vyc2VzIGZhaWx1cmUgY2F1c2VkIGJ5IG5ld2VyIHZlcnNpb25zIG9mCi0gIG5jdXJzZXMgcmV0dXJuaW5nIEVSUiBmcm9tIGdldG1vdXNlKCkgd2hlbiB0aGVyZSBhcmUgbm8gbW91c2UKLSAgZXZlbnRzIGF2YWlsYWJsZS4KKy0gSXNzdWUgIzc3NTk2NDogdGVzdF9ncnAgbm93IHNraXBzIFlQL05JUyBlbnRyaWVzIGluc3RlYWQgb2YgZmFpbGluZyB3aGVuCisgIGVuY291bnRlcmluZyB0aGVtLgorCistIElzc3VlICM3MTEwOiByZWdydGVzdCBub3cgc2VuZHMgdGVzdCBmYWlsdXJlIHJlcG9ydHMgYW5kIHNpbmdsZS1mYWlsdXJlCisgIHRyYWNlYmFja3MgdG8gc3RkZXJyIHJhdGhlciB0aGFuIHN0ZG91dC4KIAogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuNiByYyAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNy4xPworPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSpSZWxlYXNlIGRhdGU6IDIwMTAtMDgtMDMqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICM2MjEzOiBJbXBsZW1lbnQgZ2V0c3RhdGUoKSBhbmQgc2V0c3RhdGUoKSBtZXRob2RzIG9mIHV0Zi04LXNpZyBhbmQKLSAgdXRmLTE2IGluY3JlbWVudGFsIGVuY29kZXJzLgotCi0tIElzc3VlICM4MjcxOiBkdXJpbmcgdGhlIGRlY29kaW5nIG9mIGFuIGludmFsaWQgVVRGLTggYnl0ZSBzZXF1ZW5jZSwgb25seSB0aGUKLSAgc3RhcnQgYnl0ZSBhbmQgdGhlIGNvbnRpbnVhdGlvbiBieXRlKHMpIGFyZSBub3cgY29uc2lkZXJlZCBpbnZhbGlkLCBpbnN0ZWFkCi0gIG9mIHRoZSBudW1iZXIgb2YgYnl0ZXMgc3BlY2lmaWVkIGJ5IHRoZSBzdGFydCBieXRlLgotICBFLmcuOiAnXHhmMVx4ODBBQicuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJykgbm93IHJldHVybnMgdSdcdWZmZmRBQicgYW5kCi0gIHJlcGxhY2VzIHdpdGggVStGRkZEIG9ubHkgdGhlIHN0YXJ0IGJ5dGUgKCdceGYxJykgYW5kIHRoZSBjb250aW51YXRpb24gYnl0ZQotICAoJ1x4ODAnKSBldmVuIGlmICdceGYxJyBpcyB0aGUgc3RhcnQgYnl0ZSBvZiBhIDQtYnl0ZXMgc2VxdWVuY2UuCi0gIFByZXZpb3VzIHZlcnNpb25zIHJldHVybmVkIGEgc2luZ2xlIHUnXHVmZmZkJy4KLQotLSBJc3N1ZSAjOTA1ODogUmVtb3ZlIGFzc2VydGlvbnMgYWJvdXQgSU5UX01BWCBpbiBVbmljb2RlRGVjb2RlRXJyb3IuCi0KLS0gSXNzdWUgIzg5NDE6IGRlY29kaW5nIGJpZyBlbmRpYW4gVVRGLTMyIGRhdGEgaW4gVUNTLTIgYnVpbGRzIGNvdWxkIGNyYXNoCi0gIHRoZSBpbnRlcnByZXRlciB3aXRoIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lCi0gIChoaWdoZXIgdGhhbiAweDEwMDAwKS4KLQotLSBJc3N1ZSAjODYyNzogUmVtb3ZlIGJvZ3VzICJPdmVycmlkaW5nIF9fY21wX18gYmxvY2tzIGluaGVyaXRhbmNlIG9mCi0gIF9faGFzaF9fIGluIDMueCIgd2FybmluZy4gIEFsc28gZml4ICJYWFggdW5kZXRlY3RlZCBlcnJvciIgdGhhdAotICBhcmlzZXMgZnJvbSB0aGUgIk92ZXJyaWRpbmcgX19lcV9fIGJsb2NrcyBpbmhlcml0YW5jZSAuLi4iIHdhcm5pbmcKLSAgd2hlbiB0dXJuZWQgaW50byBhbiBleGNlcHRpb246IGluIHRoaXMgY2FzZSB0aGUgZXhjZXB0aW9uIHNpbXBseQotICBnZXRzIGlnbm9yZWQuCi0KLS0gSXNzdWUgIzQxMDg6IEluIHVybGxpYi5yb2JvdHBhcnNlciwgaWYgdGhlcmUgYXJlIG11bHRpcGxlICdVc2VyLWFnZW50OiAqJwotICBlbnRyaWVzLCBjb25zaWRlciB0aGUgZmlyc3Qgb25lLgotCi0tIElzc3VlICM5MzU0OiBQcm92aWRlIGdldHNvY2tvcHQoKSBpbiBhc3luY29yZSdzIGZpbGVfd3JhcHBlci4KLQotLSBJbiB0aGUgdW5pY29kZS9zdHIuZm9ybWF0KCksIHJhaXNlIGEgVmFsdWVFcnJvciB3aGVuIGluZGV4ZXMgdG8gYXJndW1lbnRzIGFyZQotICB0b28gbGFyZ2UuCi0KLS0gSXNzdWUgIzM3OTg6IFdyaXRlIHN5cy5leGl0KCkgbWVzc2FnZSB0byBzeXMuc3RkZXJyIHRvIHVzZSBzdGRlcnIgZW5jb2RpbmcKLSAgYW5kIGVycm9yIGhhbmRsZXIsIGluc3RlYWQgb2Ygd3JpdGluZyB0byB0aGUgQyBzdGRlcnIgZmlsZSBpbiB1dGYtOAotCi0tIElzc3VlICM3OTAyOiBXaGVuIHVzaW5nIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydCBzeW50YXgsIGRvbid0IHRyeQotICBpbXBsaWNpdCByZWxhdGl2ZSBpbXBvcnQgc2VtYW50aWNzLgotCi0tIElzc3VlICM3MDc5OiBGaXggYSBwb3NzaWJsZSBjcmFzaCB3aGVuIGNsb3NpbmcgYSBmaWxlIG9iamVjdCB3aGlsZSB1c2luZwotICBpdCBmcm9tIGFub3RoZXIgdGhyZWFkLiAgUGF0Y2ggYnkgRGFuaWVsIFN0dXR6YmFjaC4KLQotLSBJc3N1ZSAjMTUzMzogZml4IGluY29uc2lzdGVuY3kgaW4gcmFuZ2UgZnVuY3Rpb24gYXJndW1lbnQKLSAgcHJvY2Vzc2luZzogYW55IG5vbi1mbG9hdCBub24taW50ZWdlciBhcmd1bWVudCBpcyBub3cgY29udmVydGVkIHRvCi0gIGFuIGludGVnZXIgKGlmIHBvc3NpYmxlKSB1c2luZyBpdHMgX19pbnRfXyBtZXRob2QuICBQcmV2aW91c2x5LCBvbmx5Ci0gIHNtYWxsIGFyZ3VtZW50cyB3ZXJlIHRyZWF0ZWQgdGhpcyB3YXk7IGxhcmdlciBhcmd1bWVudHMgKHRob3NlIHdob3NlCi0gIF9faW50X18gd2FzIG91dHNpZGUgdGhlIHJhbmdlIG9mIGEgQyBsb25nKSB3b3VsZCBwcm9kdWNlIGEgVHlwZUVycm9yLgotCi0tIElzc3VlICM4NDE3OiBSYWlzZSBhbiBPdmVyZmxvd0Vycm9yIHdoZW4gYW4gaW50ZWdlciBsYXJnZXIgdGhhbiBzeXMubWF4c2l6ZQotICBpcyBwYXNzZWQgdG8gYnl0ZWFycmF5LgotCi0tIElzc3VlICM4MzI5OiBEb24ndCByZXR1cm4gdGhlIHNhbWUgbGlzdHMgZnJvbSBzZWxlY3Quc2VsZWN0IHdoZW4gbm8gZmRzIGFyZQotICBjaGFuZ2VkLgotCi0tIFJhaXNlIGEgVHlwZUVycm9yIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBhIFRfU1RSSU5HX0lOUExBQ0Ugc3RydWN0IG1lbWJlci4KLQotLSBJc3N1ZSAjMTU4Mzg2MzogQW4gdW5pY29kZSBzdWJjbGFzcyBjYW4gbm93IG92ZXJyaWRlIHRoZSBfX3VuaWNvZGVfXyBtZXRob2QuCi0KLS0gSXNzdWUgIzc1MDc6IFF1b3RlICIhIiBpbiBwaXBlcy5xdW90ZSgpOyBpdCBpcyBzcGVjaWFsIHRvIHNvbWUgc2hlbGxzLgotCi0tIElzc3VlICM3NTQ0OiBQcmVhbGxvY2F0ZSB0aHJlYWQgbWVtb3J5IGJlZm9yZSBjcmVhdGluZyB0aGUgdGhyZWFkIHRvIGF2b2lkCi0gIGEgZmF0YWwgZXJyb3IgaW4gbG93IG1lbW9yeSBjb25kaXRpb24uCi0KLS0gSXNzdWUgIzc4MjA6IFRoZSBwYXJzZXIgdG9rZW5pemVyIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgaWYKLSAgdGhlIEJPTSBjaGVjayBmYWlscy4KLQotLSBJc3N1ZSAjNzA3MjogaXNzcGFjZSgweGEwKSBpcyB0cnVlIG9uIE1hYyBPUyBYCi0KLUMtQVBJCi0tLS0tLQotCi0tIElzc3VlICM1NzUzOiBBIG5ldyBDIEFQSSBmdW5jdGlvbiwgOmNmdW5jOmBQeVN5c19TZXRBcmd2RXhgLCBhbGxvd3MKLSAgZW1iZWRkZXJzIG9mIHRoZSBpbnRlcnByZXRlciB0byBzZXQgc3lzLmFyZ3Ygd2l0aG91dCBhbHNvIG1vZGlmeWluZwotICBzeXMucGF0aC4gIFRoaXMgaGVscHMgZml4IGBDVkUtMjAwOC01OTgzCi0gIDxodHRwOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDgtNTk4Mz5gXy4KKypSZWxlYXNlIGRhdGU6IDIwMTAtMTEtMjcqCiAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjODQ0NzogTWFrZSBkaXN0dXRpbHMuc3lzY29uZmlnIGZvbGxvdyBzeW1saW5rcyBpbiB0aGUgcGF0aCB0bwotICB0aGUgaW50ZXJwcmV0ZXIgZXhlY3V0YWJsZS4gIFRoaXMgZml4ZXMgYSBmYWlsdXJlIG9mIHRlc3RfaHR0cHNlcnZlcnMKLSAgb24gT1MgWC4KKy0gSXNzdWUgIzIyMzY6IGRpc3R1dGlscycgbWtwYXRoIGlnbm9yZWQgdGhlIG1vZGUgcGFyYW1ldGVyLgogCi0tIElzc3VlICM3MDkyOiBGaXggdGhlIERlcHJlY2F0aW9uV2FybmluZ3MgZW1pdHRlZCBieSB0aGUgc3RhbmRhcmQgbGlicmFyeQotICB3aGVuIHVzaW5nIHRoZSAtMyBmbGFnLiAgUGF0Y2ggYnkgRmxvcmVudCBYaWNsdW5hLgorLSBGaXggdHlwbyBpbiBvbmUgc2Rpc3Qgb3B0aW9uIChtZWRhdGEtY2hlY2spLgogCi0tIElzc3VlICM3Mzk1OiBGaXggdHJhY2ViYWNrcyBpbiBwc3RhdHMgaW50ZXJhY3RpdmUgYnJvd3Nlci4KKy0gSXNzdWUgIzEwMzIzOiBpdGVydG9vbHMuaXNsaWNlKCkgbm93IGNvbnN1bWVzIHRoZSBtaW5pbXVtIG51bWJlciBvZgorICBpbnB1dHMgYmVmb3JlIHN0b3BwaW5nLiAgRm9ybWVybHksIHRoZSBmaW5hbCBzdGF0ZSBvZiB0aGUgdW5kZXJseWluZworICBpdGVyYXRvciB3YXMgdW5kZWZpbmVkLgogCi0tIElzc3VlICMxNzEzOiBGaXggb3MucGF0aC5pc21vdW50KCksIHdoaWNoIHJldHVybmVkIHRydWUgZm9yIHN5bWJvbGljIGxpbmtzCi0gIGFjcm9zcyBkZXZpY2VzLgorLSBJc3N1ZSAjMTA1NjU6IFRoZSBjb2xsZWN0aW9ucy5JdGVyYXRvciBBQkMgbm93IGNoZWNrcyBmb3IgYm90aAorICBgYF9faXRlcl9fYGAgYW5kIGBgbmV4dGBgLgogCi0tIElzc3VlICM4ODI2OiBQcm9wZXJseSBsb2FkIG9sZC1zdHlsZSAiZXhwaXJlcyIgYXR0cmlidXRlIGluIGh0dHAuY29va2llcy4KKy0gSXNzdWUgIzEwMDkyOiBQcm9wZXJseSByZXNldCBsb2NhbGUgaW4gY2FsZW5kYXIuTG9jYWxlKkNhbGVuZGFyIGNsYXNzZXMuCiAKLS0gSXNzdWUgIzE2OTAxMDM6IEZpeCBpbml0aWFsIG5hbWVzcGFjZSBmb3IgY29kZSBydW4gd2l0aCB0cmFjZS5tYWluKCkuCistIElzc3VlICMxMDQ1OTogVXBkYXRlIENKSyBjaGFyYWN0ZXIgbmFtZXMgdG8gVW5pY29kZSA1LjIuCisKKy0gSXNzdWUgIzYwOTg6IERvbid0IGNsYWltIERPTSBsZXZlbCAzIGNvbmZvcm1hbmNlIGluIG1pbmlkb20uCisKKy0gSXNzdWUgIzEwNTYxOiBJbiBwZGIsIGNsZWFyIHRoZSBicmVha3BvaW50cyBieSB0aGUgYnJlYWtwb2ludCBudW1iZXIuCisKKy0gSXNzdWUgIzU3NjI6IEZpeCBBdHRyaWJ1dGVFcnJvciByYWlzZWQgYnkgYGB4bWwuZG9tLm1pbmlkb21gYCB3aGVuIGFuIGVtcHR5CisgIFhNTCBuYW1lc3BhY2UgYXR0cmlidXRlIGlzIGVuY291bnRlcmVkLgorCistIElzc3VlICMxNzEwNzAzOiBXcml0ZSBzdHJ1Y3R1cmVzIGZvciBhbiBlbXB0eSBaSVAgYXJjaGl2ZSB3aGVuIGEgWmlwRmlsZSBpcworICBjcmVhdGVkIGluIG1vZGVzICdhJyBvciAndycgYW5kIHRoZW4gY2xvc2VkIHdpdGhvdXQgYWRkaW5nIGFueSBmaWxlcy4gUmFpc2UKKyAgQmFkWmlwZmlsZSAocmF0aGVyIHRoYW4gSU9FcnJvcikgd2hlbiBvcGVuaW5nIHNtYWxsIG5vbi1aSVAgZmlsZXMuCisKKy0gSXNzdWUgIzQ0OTM6IHVybGxpYjIgYWRkcyAnLycgaW4gZnJvbnQgb2YgcGF0aCBjb21wb25lbnRzIHdoaWNoIGRvZXMgbm90CisgIHN0YXJ0IHdpdGggJy8uIENvbW1vbiBiZWhhdmlvciBleGhpYml0ZWQgYnkgYnJvd3NlcnMgYW5kIG90aGVyIGNsaWVudHMuCisKKy0gSXNzdWUgIzYzNzg6IGlkbGUuYmF0IG5vdyBydW5zIHdpdGggdGhlIGFwcHJvcHJpYXRlIFB5dGhvbiB2ZXJzaW9uIHJhdGhlciB0aGFuCisgIHRoZSBzeXN0ZW0gZGVmYXVsdC4gUGF0Y2ggYnkgU3JpZGhhciBSYXRuYWt1bWFyLgorCistIElzc3VlICMxMDQwNzogRml4IG9uZSBOYW1lRXJyb3IgaW4gZGlzdHV0aWxzLgorCistIElzc3VlICMxMDE5ODogZml4IGR1cGxpY2F0ZSBoZWFkZXIgd3JpdHRlbiB0byB3YXZlIGZpbGVzIHdoZW4gd3JpdGVmcmFtZXMoKQorICBpcyBjYWxsZWQgd2l0aG91dCBkYXRhLgorCistIElzc3VlICMxMDQ2NzogRml4IEJ5dGVzSU8ucmVhZGludG8oKSBhZnRlciBzZWVraW5nIGludG8gYSBwb3NpdGlvbiBhZnRlciB0aGUKKyAgZW5kIG9mIHRoZSBmaWxlLgorCistIElzc3VlICM1MTExOiBJUHY2IEhvc3QgaW4gdGhlIEhlYWRlciBpcyB3cmFwcGVkIGluc2lkZSBbIF0uIFBhdGNoIGJ5IENoYW5kcnUuCisKK0J1aWxkCistLS0tLQorCistIEJhY2twb3J0IHI4MzM5OSB0byBhbGxvdyB0ZXN0X2Rpc3R1dGlscyB0byBwYXNzIG9uIGluc3RhbGxlZCB2ZXJzaW9ucy4KKworLSBJc3N1ZSAjMTMwMzQzNDogR2VuZXJhdGUgWklQIGZpbGUgY29udGFpbmluZyBhbGwgUERCcy4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzk0MjQ6IFJlcGxhY2UgZGVwcmVjYXRlZCBhc3NlcnQqIG1ldGhvZHMgaW4gdGhlIFB5dGhvbiB0ZXN0IHN1aXRlLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEwMjk5OiBMaXN0IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgaW4gYSB0YWJsZSBpbiBmdW5jdGlvbnMucnN0LgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNy4xIHJlbGVhc2UgY2FuZGlkYXRlIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyMDEwLTExLTEzKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTAyMjE6IGRpY3QucG9wKGspIG5vdyBoYXMgYSBrZXkgZXJyb3IgbWVzc2FnZSB0aGF0IGluY2x1ZGVzIHRoZQorICBtaXNzaW5nIGtleSAoc2FtZSBtZXNzYWdlIGRba10gcmV0dXJucyBmb3IgbWlzc2luZyBrZXlzKS4KKworLSBJc3N1ZSAjMTAxMjU6IERvbid0IHNlZ2ZhdWx0IHdoZW4gdGhlIGl0ZXJhdG9yIHBhc3NlZCB0bworICBgYGZpbGUud3JpdGVsaW5lcygpYGAgY2xvc2VzIHRoZSBmaWxlLgorCistIElzc3VlICMxMDE4NjogRml4IHRoZSBTeW50YXhFcnJvciBjYXJldCB3aGVuIHRoZSBvZmZzZXQgaXMgZXF1YWwgdG8gdGhlCisgIGxlbmd0aCBvZiB0aGUgb2ZmZW5kaW5nIGxpbmUuCisKKy0gSXNzdWUgIzk5OTc6IERvbid0IGxldCB0aGUgbmFtZSAidG9wIiBoYXZlIHNwZWNpYWwgc2lnbmlmaWNhbmNlIGluIHNjb3BlCisgIHJlc29sdXRpb24uCisKKy0gSXNzdWUgIzk4NjI6IENvbXBlbnNhdGUgZm9yIGJyb2tlbiBQSVBFX0JVRiBpbiBBSVggYnkgaGFyZCBjb2RpbmcKKyAgaXRzIHZhbHVlIGFzIHRoZSBkZWZhdWx0IDUxMiB3aGVuIGNvbXBpbGluZyBvbiBBSVguCisKKy0gSXNzdWUgIzk2NzU6IENPYmplY3QgdXNlIGlzIG1hcmtlZCBhcyBhIFB5M2sgd2FybmluZywgbm90IGEgZGVwcmVjYXRpb24KKyAgd2FybmluZy4KKworLSBJc3N1ZSAjMTAwNjg6IEdsb2JhbCBvYmplY3RzIHdoaWNoIGhhdmUgcmVmZXJlbmNlIGN5Y2xlcyB3aXRoIHRoZWlyIG1vZHVsZSdzCisgIGRpY3QgYXJlIG5vdyBjbGVhcmVkIGFnYWluLiBUaGlzIGNhdXNlcyBpc3N1ZSAjNzE0MCB0byBhcHBlYXIgYWdhaW4uCisKKy0gSXNzdWUgIzk4Njk6IE1ha2UgbG9uZygpIGFuZCBQeU51bWJlcl9Mb25nIHJldHVybiBzb21ldGhpbmcgb2YgdHlwZQorICBsb25nIGZvciBhIGNsYXNzIHdob3NlIF9fbG9uZ19fIG1ldGhvZCByZXR1cm5zIGEgcGxhaW4gaW50LiAgVGhpcworICBmaXhlcyBhbiBpbnRlcnByZXRlciBjcmFzaCB3aGVuIGluaXRpYWxpemluZyBhbiBpbnN0YW5jZSBvZiBhIGxvbmcKKyAgc3ViY2xhc3MgZnJvbSBhbiBvYmplY3Qgd2hvc2UgX19sb25nX18gbWV0aG9kIHJldHVybnMgYSBwbGFpbiBpbnQuCisKKy0gSXNzdWUgIzEwMDA2OiB0eXBlLl9fYWJzdHJhY3RtZXRob2RzX18gbm93IHJhaXNlcyBhbiBBdHRyaWJ1dGVFcnJvci4KKworLSBJc3N1ZSAjOTc5NzogcHlzdGF0ZS5jIHdyb25nbHkgYXNzdW1lZCB0aGF0IHplcm8gY291bGRuJ3QgYmUgYSB2YWxpZAorICB0aHJlYWQtbG9jYWwgc3RvcmFnZSBrZXkuCisKKy0gSXNzdWUgIzQ5NDc6IFRoZSB3cml0ZSgpIG1ldGhvZCBvZiBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyIHVzZXMgdGhlaXIKKyAgZW5jb2RpbmcgYW5kIGVycm9ycyBhdHRyaWJ1dGVzIGluc3RlYWQgb2YgdXNpbmcgdXRmLTggaW4gc3RyaWN0IG1vZGUsIHRvIGdldAorICB0aGUgc2FtZSBiZWhhdmlvdXIgdGhhbiB0aGUgcHJpbnQgc3RhdGVtZW50LgorCistIElzc3VlICM5NzM3OiBGaXggYSBjcmFzaCB3aGVuIHRyeWluZyB0byBkZWxldGUgYSBzbGljZSBvciBhbiBpdGVtIGZyb20KKyAgYSBtZW1vcnl2aWV3IG9iamVjdC4KKworLSBSZXN0b3JlIEdJTCBpbiBuaXNfY2F0IGluIGNhc2Ugb2YgZXJyb3IuCisKKy0gSXNzdWUgIzk2ODg6IF9fYmFzaWNzaXplX18gYW5kIF9faXRlbXNpemVfXyBtdXN0IGJlIGFjY2Vzc2VkIGFzIFB5X3NzaXplX3QuCisKKy0gSXNzdWUgIzg1MzA6IFByZXZlbnQgc3RyaW5nbGliIGZhc3RzZWFyY2ggZnJvbSByZWFkaW5nIGJleW9uZCB0aGUgZnJvbnQKKyAgb2YgYW4gYXJyYXkuCisKKy0gSXNzdWUgIzgzNzU1OiAgSW1wbGljaXQgc2V0LXRvLWZyb3plbnNldCBjb252ZXJzaW9uIHdhcyBub3QgdGhyZWFkLXNhZmUuCisKKy0gSXNzdWUgIzk0MTY6IEZpeCBzb21lIGlzc3VlcyB3aXRoIGNvbXBsZXggZm9ybWF0dGluZyB3aGVyZSB0aGUKKyAgb3V0cHV0IHdpdGggbm8gdHlwZSBzcGVjaWZpZXIgZmFpbGVkIHRvIG1hdGNoIHRoZSBzdHIgb3V0cHV0OgorCisgICAgLSBmb3JtYXQoY29tcGxleCgtMC4wLCAyLjApLCAnLScpIG9taXR0ZWQgdGhlIHJlYWwgcGFydCBmcm9tIHRoZSBvdXRwdXQsCisgICAgLSBmb3JtYXQoY29tcGxleCgwLjAsIDIuMCksICctJykgaW5jbHVkZWQgYSBzaWduIGFuZCBwYXJlbnRoZXNlcy4KKworLSBJc3N1ZSAjNzYxNjogRml4IGNvcHlpbmcgb2Ygb3ZlcmxhcHBpbmcgbWVtb3J5dmlldyBzbGljZXMgd2l0aCB0aGUgSW50ZWwKKyAgY29tcGlsZXIuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSA5OTI2OiBXcmFwcGVkIFRlc3RTdWl0ZSBzdWJjbGFzcyBkb2VzIG5vdCBnZXQgX19jYWxsX18gZXhlY3V0ZWQKKworLSBJc3N1ZSAjNDQ3MTogUHJvcGVybHkgc2h1dGRvd24gc29ja2V0IGluIElNQVAuc2h1dGRvd24oKS4gIFBhdGNoIGJ5CisgIExvcmVuem8gTS4gQ2F0dWNjaS4KKworLSBJc3N1ZSAjMTAxMjY6IEZpeCBkaXN0dXRpbHMnIHRlc3RfYnVpbGQgd2hlbiBQeXRob24gd2FzIGJ1aWx0IHdpdGgKKyAgLS1lbmFibGUtc2hhcmVkLgorCistIEZpeCB0eXBvIGluIG9uZSBzZGlzdCBvcHRpb24gKG1lZGF0YS1jaGVjaykuCisKKy0gSXNzdWUgIzkxOTk6IEZpeCBpbmNvcnJlY3QgdXNlIG9mIGRpc3R1dGlscy5jbWQuQ29tbWFuZC5hbm5vdW5jZS4KKworLSBJc3N1ZSAjMTcxODU3NDogRml4IG9wdGlvbnMgdGhhdCB3ZXJlIHN1cHBvc2VkIHRvIGFjY2VwdCBhcmd1bWVudHMgYnV0IGRpZAorICBub3QgaW4gYnVpbGRfY2xpYi4KKworLSBJc3N1ZSAjOTI4MTogUHJldmVudCByYWNlIGNvbmRpdGlvbiB3aXRoIG1rZGlyIGluIGRpc3R1dGlscy4gIFBhdGNoIGJ5CisgIEFyZnJldmVyLgorCistIElzc3VlICMxMDIyOTogRml4IGNhY2hpbmcgZXJyb3IgaW4gZ2V0dGV4dC4KKworLSBJc3N1ZSAjMTAyNTI6IENsb3NlIGZpbGUgb2JqZWN0cyBpbiBhIHRpbWVseSBtYW5uZXIgaW4gZGlzdHV0aWxzIGNvZGUgYW5kCisgIHRlc3RzLiAgUGF0Y2ggYnkgQnJpYW4gQnJhemlsLCBjb21wbGV0ZWQgYnkgw4lyaWMgQXJhdWpvLgorCistIElzc3VlICMxMDMxMTogVGhlIHNpZ25hbCBtb2R1bGUgbm93IHJlc3RvcmVzIGVycm5vIGJlZm9yZSByZXR1cm5pbmcgZnJvbQorICBpdHMgbG93LWxldmVsIHNpZ25hbCBoYW5kbGVyLiAgUGF0Y2ggYnkgSGFsbHZhcmQgQiBGdXJ1c2V0aC4KKworLSBJc3N1ZSAjMTAwMzg6IGpzb24ubG9hZHMoKSBvbiBzdHIgc2hvdWxkIGFsd2F5cyByZXR1cm4gdW5pY29kZSAocmVncmVzc2lvbgorICBmcm9tIFB5dGhvbiAyLjYpLiAgUGF0Y2ggYnkgV2FsdGVyIETDtnJ3YWxkLgorCistIElzc3VlICMxMjAxNzY6IFdyYXBwZWQgVGVzdFN1aXRlIHN1YmNsYXNzIGRvZXMgbm90IGdldCBfX2NhbGxfXyBleGVjdXRlZC4KKworLSBJc3N1ZSAjNjcwNjogYXN5bmNvcmUgYWNjZXB0KCkgbWV0aG9kIG5vIGxvbmdlciByYWlzZXMKKyAgRVdPVUxEQkxPQ0svRUNPTk5BQk9SVEVEIG9uIGluY29tcGxldGUgY29ubmVjdGlvbiBhdHRlbXB0IGJ1dCByZXR1cm5zIE5vbmUKKyAgaW5zdGVhZC4KKworLSBJc3N1ZSAjMTAyNjY6IHV1LmRlY29kZSBkaWRuJ3QgY2xvc2UgaW5fZmlsZSBleHBsaWNpdGx5IHdoZW4gaXQgd2FzIGdpdmVuCisgIGFzIGEgZmlsZW5hbWUuICBQYXRjaCBieSBCcmlhbiBCcmF6aWwuCisKKy0gSXNzdWUgIzEwMjQ2OiB1dS5lbmNvZGUgZGlkbid0IGNsb3NlIGZpbGUgb2JqZWN0cyBleHBsaWNpdGx5IHdoZW4gZmlsZW5hbWVzCisgIHdlcmUgZ2l2ZW4gdG8gaXQuICBQYXRjaCBieSBCcmlhbiBCcmF6aWwuCisKKy0gSXNzdWUgIzEwMjUzOiBGaWxlSU8gbGVha3MgYSBmaWxlIGRlc2NyaXB0b3Igd2hlbiB0cnlpbmcgdG8gb3BlbiBhIGZpbGUKKyAgZm9yIGFwcGVuZCB0aGF0IGlzbid0IHNlZWthYmxlLiAgUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIElzc3VlICM2MTA1OiBqc29uLmR1bXBzIG5vdyByZXNwZWN0cyBPcmRlcmVkRGljdCdzIGl0ZXJhdGlvbiBvcmRlci4KKworLSBJc3N1ZSAjOTI5NTogRml4IGEgY3Jhc2ggdW5kZXIgV2luZG93cyB3aGVuIGNhbGxpbmcgY2xvc2UoKSBvbiBhIGZpbGUKKyAgb2JqZWN0IHdpdGggY3VzdG9tIGJ1ZmZlcmluZyBmcm9tIHR3byB0aHJlYWRzIGF0IG9uY2UuCisKKy0gSXNzdWUgIzUwMjc6IFRoZSBzdGFuZGFyZCBgYHhtbGBgIG5hbWVzcGFjZSBpcyBub3cgdW5kZXJzdG9vZCBieQorICB4bWwuc2F4LnNheHV0aWxzLlhNTEdlbmVyYXRvciBhcyBiZWluZyBib3VuZCB0bworICBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuICBQYXRjaCBieSBUcm95IEouIEZhcnJlbGwuCisKKy0gSXNzdWUgIzEwMTYzOiBTa2lwIHVucmVhZGFibGUgcmVnaXN0cnkga2V5cyBkdXJpbmcgbWltZXR5cGVzCisgIGluaXRpYWxpemF0aW9uLgorCistIElzc3VlICM1MTE3OiBGaXhlZCByb290IGRpcmVjdG9yeSByZWxhdGVkIGlzc3VlIG9uIHBvc2l4cGF0aC5yZWxwYXRoKCkgYW5kCisgIG50cGF0aC5yZWxwYXRoKCkuCisKKy0gSXNzdWUgOTQwOTogRml4IHRoZSByZWdleCB0byBtYXRjaCBhbGwga2luZCBvZiBmaWxlbmFtZXMsIGZvciBpbnRlcmFjdGl2ZQorICBkZWJ1Z2dpbmcgaW4gZG9jdGVzdHMuCisKKy0gSXNzdWUgIzY2MTI6IEZpeCBzaXRlIGFuZCBzeXNjb25maWcgdG8gY2F0Y2ggb3MuZ2V0Y3dkKCkgZXJyb3IsIGVnLiBpZiB0aGUKKyAgY3VycmVudCBkaXJlY3Rvcnkgd2FzIGRlbGV0ZWQuIFBhdGNoIHdyaXR0ZW4gYnkgVy4gVHJldm9yIEtpbmcuCisKKy0gSXNzdWUgIzEwMDQ1OiBJbXByb3ZlZCBwZXJmb3JtYW5jZSB3aGVuIHdyaXRpbmcgYWZ0ZXIgc2Vla2luZyBwYXN0IHRoZQorICBlbmQgb2YgdGhlICJmaWxlIiBpbiBjU3RyaW5nSU8uCisKKy0gSXNzdWUgIzk5NDg6IEZpeGVkIHByb2JsZW0gb2YgbG9zaW5nIGZpbGVuYW1lIGNhc2UgaW5mb3JtYXRpb24uCisKKy0gSXNzdWUgIzk0Mzc6IEZpeCBidWlsZGluZyBDIGV4dGVuc2lvbnMgd2l0aCBub24tZGVmYXVsdCBMREZMQUdTLgorCistIElzc3VlICM5NzU5OiBHemlwRmlsZSBub3cgcmFpc2VzIFZhbHVlRXJyb3Igd2hlbiBhbiBvcGVyYXRpb24gaXMgYXR0ZW1wdGVkCisgIGFmdGVyIHRoZSBmaWxlIGlzIGNsb3NlZC4gIFBhdGNoIGJ5IEplZmZyZXkgRmlua2Vsc3RlaW4uCisKKy0gSXNzdWUgIzkwNDI6IEZpeCBpbnRlcmFjdGlvbiBvZiBjdXN0b20gdHJhbnNsYXRpb24gY2xhc3NlcyBhbmQgY2FjaGluZyBpbgorICBnZXR0ZXh0LgorCistIElzc3VlICM5MDY1OiB0YXJmaWxlIG5vIGxvbmdlciB1c2VzICJyb290IiBhcyB0aGUgZGVmYXVsdCBmb3IgdGhlIHVuYW1lIGFuZAorICBnbmFtZSBmaWVsZC4KKworLSBJc3N1ZSAjMTA1MDI2ODogcGFyc2VhZGRyIG5vdyBjb3JyZWN0bHkgcXVvdGVzIGRvdWJsZSBxdW90ZSBhbmQgYmFja3NsYXNoCisgIGNoYXJhY3RlcnMgdGhhdCBhcHBlYXIgaW5zaWRlIHF1b3RlZCBzdHJpbmdzIGluIGVtYWlsIGFkZHJlc3Nlcy4KKworLSBJc3N1ZSAjMTAwMDQ6IHF1b3ByaW1pbWUgbm8gbG9uZ2VyIGdlbmVyYXRlcyBhIHRyYWNlYmFjayB3aGVuIGNvbmZyb250ZWQKKyAgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMgYWZ0ZXIgJz0nIGluIGEgUS1lbmNvZGVkIHdvcmQuCisKKy0gSXNzdWUgIzk5NTA6IEZpeCBzb2NrZXQuc2VuZGFsbCgpIGNyYXNoIG9yIG1pc2JlaGF2aW91ciB3aGVuIGEgc2lnbmFsIGlzCisgIHJlY2VpdmVkLiAgTm93IHNlbmRhbGwoKSBwcm9wZXJseSBjYWxscyBzaWduYWwgaGFuZGxlcnMgaWYgbmVjZXNzYXJ5LAorICBhbmQgcmV0cmllcyBzZW5kaW5nIGlmIHRoZXNlIHJldHVybmVkIHN1Y2Nlc3NmdWxseSwgaW5jbHVkaW5nIG9uIHNvY2tldHMKKyAgd2l0aCBhIHRpbWVvdXQuCisKKy0gSXNzdWUgIzk5NDc6IGxvZ2dpbmc6IEZpeGVkIGxvY2tpbmcgYnVnIGluIHN0b3BMaXN0ZW5pbmcuCisKKy0gSXNzdWUgIzk5NDU6IGxvZ2dpbmc6IEZpeGVkIGxvY2tpbmcgYnVncyBpbiBhZGRIYW5kbGVyL3JlbW92ZUhhbmRsZXIuCisKKy0gSXNzdWUgIzk5MzY6IEZpeGVkIGV4ZWN1dGFibGUgbGluZXMnIHNlYXJjaCBpbiB0aGUgdHJhY2UgbW9kdWxlLgorCistIElzc3VlICM5OTI4OiBQcm9wZXJseSBpbml0aWFsaXplIHRoZSB0eXBlcyBleHBvcnRlZCBieSB0aGUgYnoyIG1vZHVsZS4KKworLSBJc3N1ZSAjOTg1NDogVGhlIGRlZmF1bHQgcmVhZCgpIGltcGxlbWVudGF0aW9uIGluIGlvLlJhd0lPQmFzZSBub3cKKyAgaGFuZGxlcyBub24tYmxvY2tpbmcgcmVhZGludG8oKSByZXR1cm5pbmcgTm9uZSBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzk3Mjk6IEZpeCB0aGUgc2lnbmF0dXJlIG9mIFNTTFNvY2tldC5yZWN2ZnJvbSgpIGFuZAorICBTU0xTb2NrZXQuc2VuZHRvKCkgdG8gbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgc29ja2V0IG1ldGhvZHMuICBBbHNvLAorICBmaXggdmFyaW91cyBTU0xTb2NrZXQgbWV0aG9kcyB0byByYWlzZSBzb2NrZXQuZXJyb3IgcmF0aGVyIHRoYW4gYW4KKyAgdW5oZWxwZnVsIFR5cGVFcnJvciB3aGVuIGNhbGxlZCBvbiBhbiB1bmNvbm5lY3RlZCBzb2NrZXQuICBPcmlnaW5hbCBwYXRjaAorICBieSBBbmRyZXcgQmVubmV0dHMuCisKKy0gSXNzdWUgIzk4MjY6IE9yZGVyZWREaWN0Ll9fcmVwcl9fIGNhbiBub3cgaGFuZGxlIHNlbGYtcmVmZXJlbnRpYWwKKyAgdmFsdWVzOiAgIGRbJ3gnXSA9IGQuCisKKy0gSXNzdWUgIzc2NzY0NTogU2V0IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMgdG8gVHJ1ZSBvbiBNYWMgT1MgWC4KKworLSBJc3N1ZSAjOTgzNzogVGhlIHJlYWQoKSBtZXRob2Qgb2YgWmlwRXh0RmlsZSBvYmplY3RzIChhcyByZXR1cm5lZCBieQorICBaaXBGaWxlLm9wZW4oKSkgY291bGQgcmV0dXJuIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCisKKy0gSXNzdWUgIzk4MjU6IHJlbW92ZWQgX19kZWxfXyBmcm9tIHRoZSBkZWZpbml0aW9uIG9mIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0LgorICBUaGlzIHByZXZlbnRzIHVzZXItY3JlYXRlZCBzZWxmLXJlZmVyZW5jaW5nIG9yZGVyZWQgZGljdGlvbmFyaWVzIGZyb20KKyAgYmVjb21pbmcgcGVybWFuZW50bHkgdW5jb2xsZWN0YWJsZSBHQyBnYXJiYWdlLiAgVGhlIGRvd25zaWRlIGlzIHRoYXQKKyAgcmVtb3ZpbmcgX19kZWxfXyBtZWFucyB0aGF0IHRoZSBpbnRlcm5hbCBkb3VibHktbGlua2VkIGxpc3QgaGFzIHRvIHdhaXQgZm9yCisgIEdDIGNvbGxlY3Rpb24gcmF0aGVyIHRoYW4gZnJlZWluZyBtZW1vcnkgaW1tZWRpYXRlbHkgd2hlbiB0aGUgcmVmY250IGRyb3BzCisgIHRvIHplcm8uCisKKy0gSXNzdWUgIzk4MTY6IHJhbmRvbS5SYW5kb20uanVtcGFoZWFkKG4pIGRpZCBub3QgcHJvZHVjZSBhIHN1ZmZpY2llbnRseQorICBkaWZmZXJlbnQgaW50ZXJuYWwgc3RhdGUgZm9yIHNtYWxsIHZhbHVlcyBvZiBuLiAgRml4ZWQgYnkgc2FsdGluZyB0aGUKKyAgdmFsdWUuCisKKy0gSXNzdWUgIzk3OTI6IEluIGNhc2Ugb2YgY29ubmVjdGlvbiBmYWlsdXJlLCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKQorICB3b3VsZCBzd2FsbG93IHRoZSBleGNlcHRpb24gYW5kIHJhaXNlIGEgbmV3IG9uZSwgbWFraW5nIGl0IGltcG9zc2libGUKKyAgdG8gZmV0Y2ggdGhlIG9yaWdpbmFsIGVycm5vLCBvciB0byBmaWx0ZXIgdGltZW91dCBlcnJvcnMuICBOb3cgdGhlCisgIG9yaWdpbmFsIGVycm9yIGlzIHJlLXJhaXNlZC4KKworLSBJc3N1ZSAjOTc1ODogV2hlbiBmY250bC5pb2N0bCgpIHdhcyBjYWxsZWQgd2l0aCBtdXRhYmxlX2ZsYWcgc2V0IHRvIFRydWUsCisgIGFuZCB0aGUgcGFzc2VkIGJ1ZmZlciB3YXMgZXhhY3RseSAxMDI0IGJ5dGVzIGxvbmcsIHRoZSBidWZmZXIgd291bGRuJ3QKKyAgYmUgdXBkYXRlZCBiYWNrIGFmdGVyIHRoZSBzeXN0ZW0gY2FsbC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEJyaWFuIEJyYXppbC4KKworLSBJc3N1ZSAjMTEwMDU2MjogRml4IGRlZXAtY29weWluZyBvZiBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgbGlzdCBhbmQKKyAgZGljdCB0eXBlcy4gIFBhdGNoIGJ5IE1pY2hlbGUgT3Jyw7kgYW5kIEJqw7ZybiBMaW5kcXZpc3QuCisKKy0gSXNzdWUgIzcwMDU6IEZpeGVkIG91dHB1dCBvZiBOb25lIHZhbHVlcyBmb3IgUmF3Q29uZmlnUGFyc2VyLndyaXRlIGFuZAorICBDb25maWdQYXJzZXIud3JpdGUuCisKKy0gSXNzdWUgIzgwODE2NDogRml4ZWQgc29ja2V0LmNsb3NlIHRvIGF2b2lkIHJlZmVyZW5jZXMgdG8gZ2xvYmFscywgdG8KKyAgYXZvaWQgaXNzdWVzIHdoZW4gc29ja2V0LmNsb3NlIGlzIGNhbGxlZCBmcm9tIGEgX19kZWxfXyBtZXRob2QuCisKKy0gSXNzdWUgIzI5ODY6IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyIGdldHMgYSBuZXcgcGFyYW1ldGVyLCBhdXRvanVuaywgd2hpY2gKKyAgY2FuIGJlIHNldCB0byBGYWxzZSB0byB0dXJuIG9mZiB0aGUgcHJldmlvdXNseSB1bmRvY3VtZW50ZWQgJ3BvcHVsYXJpdHknCisgIGhldXJpc3RpYy4gUGF0Y2ggYnkgVGVycnkgUmVlZHkgYW5kIEVsaSBCZW5kZXJza3kKKworLSBJc3N1ZSAjODc5NzogdXJsbGliMiBkb2VzIGEgcmV0cnkgZm9yIEJhc2ljIEF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgaW5zdGVhZCBvZgorICBmYWxsaW5nIGludG8gcmVjdXJzaW9uLgorCistIElzc3VlICMxMTk0MjIyOiBlbWFpbC51dGlscy5wYXJzZWRhdGUgbm93IHJldHVybnMgUkZDMjgyMiBjb21wbGlhbnQgZm91cgorICBjaGFyYWN0ZXIgeWVhcnMgZXZlbiBpZiB0aGUgbWVzc2FnZSBjb250YWlucyBSRkM4MjIgdHdvIGNoYXJhY3RlciB5ZWFycy4KKworLSBJc3N1ZSAjODc1MDogRml4ZWQgTXV0YWJsZVNldCdzIG1ldGhvZHMgdG8gY29ycmVjdGx5IGhhbmRsZQorICByZWZsZXhpdmUgb3BlcmF0aW9ucywgbmFtZWx5IHggLT0geCBhbmQgeCBePSB4LgorCistIElzc3VlICM5MTI5OiBzbXRwZC5weSBpcyB2dWxuZXJhYmxlIHRvIERvUyBhdHRhY2tzIGRlcml2aW5nIGZyb20gbWlzc2luZworICBlcnJvciBoYW5kbGluZyB3aGVuIGFjY2VwdGluZyBhIG5ldyBjb25uZWN0aW9uLgorCistIElzc3VlICM2NTg3NDk6IGFzeW5jb3JlJ3MgY29ubmVjdCgpIG1ldGhvZCBub3cgY29ycmVjdGx5IGludGVycHJldHMgd2luc29jaworICBlcnJvcnMuCisKKy0gSXNzdWUgIzk1MDE6IEZpeGVkIGxvZ2dpbmcgcmVncmVzc2lvbnMgaW4gY2xlYW51cCBjb2RlLgorCistIElzc3VlICM5MjE0OiBTZXQgb3BlcmF0aW9ucyBvbiBLZXlzVmlldyBvciBJdGVtc1ZpZXcgaW4gdGhlIGNvbGxlY3Rpb25zCisgIG1vZHVsZSBub3cgY29ycmVjdGx5IHJldHVybiBhIHNldC4gIChQYXRjaCBieSBFbGkgQmVuZGVyc2t5LikKKworLSBJc3N1ZSAjOTYxNzogU2lnbmFscyByZWNlaXZlZCBkdXJpbmcgYSBsb3ctbGV2ZWwgd3JpdGUgb3BlcmF0aW9uIGFyZW4ndAorICBpZ25vcmVkIGJ5IHRoZSBidWZmZXJlZCBJTyBsYXllciBhbnltb3JlLgorCistIElzc3VlICMyNTIxOiBVc2Ugd2Vha3JlZnMgb24gZm9yIGNhY2hpbmcgaW4gdGhlIGFiYyBtb2R1bGUsIHNvIHRoYXQgY2xhc3NlcworICBhcmUgbm90IGhlbGQgb250byBhZnRlciB0aGV5IGFyZSBkZWxldGVkIGVsc2V3aGVyZS4KKworLSBJc3N1ZSAjOTYyNjogdGhlIHZpZXcgbWV0aG9kcyBmb3IgY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKSB3ZXJlIHJldHVybmluZworICB0aGUgdW5vcmRlcmVkIHZlcnNpb25zIGluaGVyaXRlZCBmcm9tIGRpY3QuICBUaG9zZSBtZXRob2RzIGFyZSBub3cKKyAgb3ZlcnJpZGRlbiB0byBwcm92aWRlIG9yZGVyZWQgdmlld3MuCisKKy0gSXNzdWUgIzg2ODg6IE1BTklGRVNUIGZpbGVzIGNyZWF0ZWQgYnkgZGlzdHV0aWxzIG5vdyBpbmNsdWRlIGEgbWFnaWMKKyAgY29tbWVudCBpbmRpY2F0aW5nIHRoZXkgYXJlIGdlbmVyYXRlZC4gIE1hbnVhbGx5IG1haW50YWluZWQgTUFOSUZFU1RzCisgIHdpdGhvdXQgdGhpcyBtYXJrZXIgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4gb3IgcmVtb3ZlZC4KKworLSBJc3N1ZSAjNzQ2Nzogd2hlbiByZWFkaW5nIGEgZmlsZSBmcm9tIGEgWklQIGFyY2hpdmUsIGl0cyBDUkMgaXMgY2hlY2tlZAorICBhbmQgYSBCYWRaaXBmaWxlIGVycm9yIGlzIHJhaXNlZCBpZiBpdCBkb2Vzbid0IG1hdGNoIChhcyB1c2VkIHRvIGJlIHRoZQorICBjYXNlIGluIFB5dGhvbiAyLjUgYW5kIGVhcmxpZXIpLgorCistIElzc3VlICM5NTUwOiBhIEJ1ZmZlcmVkUmVhZGVyIGNvdWxkIGlzc3VlIGFuIGFkZGl0aW9uYWwgcmVhZCB3aGVuIHRoZQorICBvcmlnaW5hbCByZWFkIHJlcXVlc3QgaGFkIGJlZW4gc2F0aXNmaWVkLCB3aGljaCBjb3VsZCBibG9jayBpbmRlZmluaXRlbHkKKyAgd2hlbiB0aGUgdW5kZXJseWluZyByYXcgSU8gY2hhbm5lbCB3YXMgZS5nLiBhIHNvY2tldC4gIFJlcG9ydCBhbmQgb3JpZ2luYWwKKyAgcGF0Y2ggYnkgSmFzb24gVi4gTWlsbGVyLgorCistIElzc3VlICM5NTUxOiBEb24ndCByYWlzZSBUeXBlRXJyb3Igd2hlbiBzZXR0aW5nIHRoZSB2YWx1ZSB0byBOb25lIGZvcgorICBTYWZlQ29uZmlnUGFyc2VyIGluc3RhbmNlcyBjb25zdHJ1Y3RlZCB3aXRoIGFsbG93X25vX3ZhbHVlID09IFRydWUuCisKKy0gSXNzdWUgIzY5MTU6IFVuZGVyIFdpbmRvd3MsIG9zLmxpc3RkaXIoKSBkaWRuJ3QgcmVsZWFzZSB0aGUgR2xvYmFsCisgIEludGVycHJldGVyIExvY2sgYXJvdW5kIGFsbCBzeXN0ZW0gY2FsbHMuICBPcmlnaW5hbCBwYXRjaCBieSBSeWFuIEtlbGx5LgorCistIElzc3VlICMzNzU3OiB0aHJlYWQtbG9jYWwgb2JqZWN0cyBub3cgc3VwcG9ydCBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0aW9uLgorICBUaHJlYWQtbG9jYWwgb2JqZWN0cyBpbnZvbHZlZCBpbiByZWZlcmVuY2UgY3ljbGVzIHdpbGwgYmUgZGVhbGxvY2F0ZWQKKyAgdGltZWx5IGJ5IHRoZSBjeWNsaWMgR0MsIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgdGhyZWFkIGlzIHN0aWxsIHJ1bm5pbmcuCisKKy0gSXNzdWUgIzYyMzE6IEZpeCB4bWwuZXRyZWUuRWxlbWVudEluY2x1ZGUgdG8gaW5jbHVkZSB0aGUgdGFpbCBvZiB0aGUKKyAgY3VycmVudCBub2RlLgorCistIElzc3VlICM2ODY5OiBGaXggYSByZWZjb3VudCBwcm9ibGVtIGluIHRoZSBfY3R5cGVzIGV4dGVuc2lvbi4KKworLSBJc3N1ZTU1MDQgLSBjdHlwZXMgc2hvdWxkIG5vdyB3b3JrIHdpdGggc3lzdGVtcyB3aGVyZSBtbWFwIGNhbid0IGJlCisgIFBST1RfV1JJVEUgYW5kIFBST1RfRVhFQy4KKworLSBGaXggSXNzdWU4MjgwIC0gdXJsbGliMidzIFJlcXVlc3QgbWV0aG9kIHdpbGwgcmVtb3ZlIGZyYWdlbWVudHMgaW4gdGhlIHVybC4KKyAgVGhpcyBpcyBob3cgaXQgaXMgc3VwcG9zZWQgdG8gd29yaywgd2dldCBhbmQgY3VybCBkbyB0aGUgc2FtZS4gIFByZXZpb3VzCisgIGJlaGF2aW9yIHdhcyB3cm9uZy4KKworLSBJc3N1ZSAjMjk0NDogYXN5bmNvcmUgZG9lc24ndCBoYW5kbGUgY29ubmVjdGlvbiByZWZ1c2VkIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMzE5NjogZW1haWwgaGVhZGVyIGRlY29kaW5nIGlzIG5vdyBmb3JnaXZpbmcgaWYgYW4gUkZDMjA0NworICBlbmNvZGVkIHdvcmQgZW5jb2RlZCBpbiBiYXNlNjQgaXMgbGFja2luZyBwYWRkaW5nLgorCistIElzc3VlICM5NDQ0OiBBcmdwYXJzZSBub3cgdXNlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBwcmVmaXhfY2hhcnMgYXMKKyAgdGhlIG9wdGlvbiBjaGFyYWN0ZXIgZm9yIHRoZSBhZGRlZCAnaC9oZWxwJyBvcHRpb24gaWYgcHJlZml4X2NoYXJzCisgIGRvZXMgbm90IGNvbnRhaW4gYSAnLScsIGluc3RlYWQgb2YgcmFpc2luZyBhbiBlcnJvci4KKworLSBJc3N1ZSAjOTM1NDogUHJvdmlkZSBnZXRzb2Nrb3B0KCkgaW4gYXN5bmNvcmUncyBmaWxlX3dyYXBwZXIuCisKKy0gSXNzdWUgIzk0Mjg6IEZpeCBydW5uaW5nIHNjcmlwdHMgd2l0aCB0aGUgcHJvZmlsZS9jUHJvZmlsZSBtb2R1bGVzIGZyb20KKyAgdGhlIGNvbW1hbmQgbGluZS4KKworLSBJc3N1ZSAjNzc4MTogRml4IHJlc3RyaWN0aW5nIHN0YXRzIGJ5IGVudHJ5IGNvdW50cyBpbiB0aGUgcHN0YXRzCisgIGludGVyYWN0aXZlIGJyb3dzZXIuCisKKy0gSXNzdWUgIzkyMDk6IERvIG5vdCBjcmFzaCBpbiB0aGUgcHN0YXRzIGludGVyYWN0aXZlIGJyb3dzZXIgb24gaW52YWxpZAorICByZWd1bGFyIGV4cHJlc3Npb25zLgorCistIElzc3VlICM3MzcyOiBGaXggcHN0YXRzIHJlZ3Jlc3Npb24gd2hlbiBzdHJpcHBpbmcgcGF0aHMgZnJvbSBwcm9maWxlCisgIGRhdGEgZ2VuZXJhdGVkIHdpdGggdGhlIHByb2ZpbGUgbW9kdWxlLgorCistIElzc3VlICM0MTA4OiBJbiB1cmxsaWIucm9ib3RwYXJzZXIsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSAnVXNlci1hZ2VudDogKicKKyAgZW50cmllcywgY29uc2lkZXIgdGhlIGZpcnN0IG9uZS4KKworLSBJc3N1ZSAjODM5NzogUmFpc2UgYW4gZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIG1peCBpdGVyYXRpb24gYW5kIHJlZ3VsYXIKKyAgcmVhZHMgb24gYSBCWjJGaWxlIG9iamVjdCwgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGluY29ycmVjdCByZXN1bHRzLgogCiAtIElzc3VlICM1Mjk0OiBGaXggdGhlIGJlaGF2aW9yIG9mIHBkYidzICJjb250aW51ZSIgY29tbWFuZCB3aGVuIGNhbGxlZAogICBpbiB0aGUgdG9wLWxldmVsIGRlYnVnZ2VkIGZyYW1lLgpAQCAtMTg2LDYgKzY0Nyw5IEBACiAtIElzc3VlICM4MDE1OiBJbiBwZGIsIGRvIG5vdCBjcmFzaCB3aGVuIGFuIGVtcHR5IGxpbmUgaXMgZW50ZXJlZCBhcwogICBhIGJyZWFrcG9pbnQgY29tbWFuZC4KIAorLSBJc3N1ZSAjOTQ0ODogRml4IGEgbGVhayBvZiBPUyByZXNvdXJjZXMgKG11dGV4ZXMgb3Igc2VtYXBob3Jlcykgd2hlbgorICByZS1pbml0aWFsaXppbmcgYSBidWZmZXJlZCBJTyBvYmplY3QgYnkgY2FsbGluZyBpdHMgYGBfX2luaXRfX2BgIG1ldGhvZC4KKwogLSBJc3N1ZSAjNzkwOTogRG8gbm90IHRvdWNoIHBhdGhzIHdpdGggdGhlIHNwZWNpYWwgcHJlZml4ZXMgYGBcXC5cYGAKICAgb3IgYGBcXD9cYGAgaW4gbnRwYXRoLm5vcm1wYXRoKCkuCiAKQEAgLTE5NywyNyArNjYxLDM3IEBACiAtIElzc3VlICM4MTk4OiBJbiBweWRvYywgb3V0cHV0IGFsbCBoZWxwIHRleHQgdG8gdGhlIGNvcnJlY3Qgc3RyZWFtCiAgIHdoZW4gc3lzLnN0ZG91dCBpcyByZWFzc2lnbmVkLgogCi0tIElzc3VlICMxMDE5ODgyOiBGaXggSW5kZXhFcnJvciB3aGVuIGxvYWRpbmcgY2VydGFpbiBob3RzaG90IHN0YXRzLgorLSBJc3N1ZSAjNzM5NTogRml4IHRyYWNlYmFja3MgaW4gcHN0YXRzIGludGVyYWN0aXZlIGJyb3dzZXIuCisKKy0gSXNzdWUgIzgyMzA6IEZpeCBMaWIvdGVzdC9zb3J0cGVyZi5weS4KKworLSBJc3N1ZSAjMTcxMzogRml4IG9zLnBhdGguaXNtb3VudCgpLCB3aGljaCByZXR1cm5lZCB0cnVlIGZvciBzeW1ib2xpYyBsaW5rcworICBhY3Jvc3MgZGV2aWNlcy4KKworLSBJc3N1ZSAjODgyNjogUHJvcGVybHkgbG9hZCBvbGQtc3R5bGUgImV4cGlyZXMiIGF0dHJpYnV0ZSBpbiBodHRwLmNvb2tpZXMuCisKKy0gSXNzdWUgIzE2OTAxMDM6IEZpeCBpbml0aWFsIG5hbWVzcGFjZSBmb3IgY29kZSBydW4gd2l0aCB0cmFjZS5tYWluKCkuCiAKIC0gSXNzdWUgIzg0NzE6IEluIGRvY3Rlc3QsIHByb3Blcmx5IHJlc2V0IHRoZSBvdXRwdXQgc3RyZWFtIHRvIGFuIGVtcHR5CiAgIHN0cmluZyB3aGVuIFVuaWNvZGUgd2FzIHByZXZpb3VzbHkgb3V0cHV0LgogCi0tIElzc3VlICM4Mzk3OiBSYWlzZSBhbiBlcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gbWl4IGl0ZXJhdGlvbiBhbmQgcmVndWxhcgotICByZWFkcyBvbiBhIEJaMkZpbGUgb2JqZWN0LCByYXRoZXIgdGhhbiByZXR1cm5pbmcgaW5jb3JyZWN0IHJlc3VsdHMuCi0KIC0gSXNzdWUgIzg2MjA6IHdoZW4gYSBDbWQgaXMgZmVkIGlucHV0IHRoYXQgcmVhY2hlcyBFT0Ygd2l0aG91dCBhIGZpbmFsCiAgIG5ld2xpbmUsIGl0IG5vIGxvbmdlciB0cnVuY2F0ZXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBsYXN0IGNvbW1hbmQgbGluZS4KIAotLSBJc3N1ZSAjNzA2NjogYXJjaGl2ZV91dGlsLm1ha2VfYXJjaGl2ZSBub3cgcmVzdG9yZXMgdGhlIGN3ZCBpZiBhbiBlcnJvciBpcwotICByYWlzZWQuIEluaXRpYWwgcGF0Y2ggYnkgRXppbyBNZWxvdHRpLgorLSBJc3N1ZSAjNjIxMzogSW1wbGVtZW50IGdldHN0YXRlKCkgYW5kIHNldHN0YXRlKCkgbWV0aG9kcyBvZiB1dGYtOC1zaWcgYW5kCisgIHV0Zi0xNiBpbmNyZW1lbnRhbCBlbmNvZGVycy4KIAotLSBJc3N1ZSAjNTAwNjogQmV0dGVyIGhhbmRsaW5nIG9mIHVuaWNvZGUgYnl0ZS1vcmRlciBtYXJrcyAoQk9NKSBpbiB0aGUgaW8KLSAgbGlicmFyeS4gVGhpcyBtZWFucywgZm9yIGV4YW1wbGUsIHRoYXQgb3BlbmluZyBhbiBVVEYtMTYgdGV4dCBmaWxlIGluIGFwcGVuZAotICBtb2RlIGRvZXNuJ3QgYWRkIGEgQk9NIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgaWYgdGhlIGZpbGUgaXNuJ3QgZW1wdHkuCistIElzc3VlICM3MTEzOiBTcGVlZCB1cCBsb2FkaW5nIGluIENvbmZpZ1BhcnNlci4gUGF0Y2ggYnkgxYF1a2FzeiBMYW5nYS4KIAogLSBJc3N1ZSAjMzcwNDogY29va2llbGliIHdhcyBub3QgcHJvcGVybHkgaGFuZGxpbmcgVVJMcyB3aXRoIGEgLyBpbiB0aGUKICAgcGFyYW1ldGVycy4KIAorLSBJc3N1ZSAjOTAzMjogWE1MLVJQQyBjbGllbnQgcmV0cmllcyB0aGUgcmVxdWVzdCBvbiBFUElQRSBlcnJvci4gVGhlIEVQSVBFCisgIGVycm9yIG9jY3VycyB3aGVuIHRoZSBzZXJ2ZXIgY2xvc2VzIHRoZSBzb2NrZXQgYW5kIHRoZSBjbGllbnQgc2VuZHMgYSBiaWcKKyAgWE1MLVJQQyByZXF1ZXN0LgorCistIElzc3VlICM1NTQyOiBSZW1vdmUgc3BlY2lhbCBsb2dpYyB0aGF0IGNsb3NlcyBIVFRQQ29ubmVjdGlvbiBzb2NrZXQgb24gRVBJUEUuCisKIC0gSXNzdWUgIzQ2Mjk6IGdldG9wdCByYWlzZXMgYW4gZXJyb3IgaWYgYW4gYXJndW1lbnQgZW5kcyB3aXRoID0gd2hlcmVhcyBnZXRvcHQKICAgZG9lc24ndCBleGNlcHQgYSB2YWx1ZSAoZWcuIC0taGVscD0gaXMgcmVqZWN0ZWQgaWYgZ2V0b3B0IHVzZXMgWydoZWxwPSddIGxvbmcKICAgb3B0aW9ucykuCkBAIC0yMjgsMTEgKzcwMiw2IEBACiAgIEkvTyBlcnJvciBvY2N1cnJlZC4gIE5vdyBhbiBJT0Vycm9yIGlzIHJhaXNlZCBpbnN0ZWFkLiAgUGF0Y2ggYnkgY2h1Y2sKICAgKEphbiBIb3NhbmcpLgogCi0tIElzc3VlICMxNTU1NTcwOiBlbWFpbCBubyBsb25nZXIgaW5zZXJ0cyBleHRyYSBibGFuayBsaW5lcyB3aGVuIGEgXHJcbgotICBjb21ibyBjcm9zc2VzIGFuIDgxOTIgYnl0ZSBib3VuZGFyeS4KLQotLSBJc3N1ZSAjOTE2NDogRW5zdXJlIHN5c2NvbmZpZyBoYW5kbGVzIGR1cGJsaWNlIGFyY2hzIHdoaWxlIGJ1aWxkaW5nIG9uIE9TWAotCiAtIElzc3VlICM3NjQ2OiBUaGUgZm5tYXRjaCBwYXR0ZXJuIGNhY2hlIG5vIGxvbmdlciBncm93cyB3aXRob3V0IGJvdW5kLgogCiAtIElzc3VlICM5MTM2OiBGaXggJ2RpY3Rpb25hcnkgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24nCkBAIC0yNDMsMjE0ICs3MTIsNTUgQEAKICAgcG93ZXIgb2YgMTAgYW5kIHRoZSBleHBvbmVudCBpcyB0aW55IChmb3IgZXhhbXBsZSwKICAgRGVjaW1hbCgxMCkgKiogRGVjaW1hbCgnMWUtOTk5OTk5OTk5JykpLgogCistIElzc3VlICM5MTYxOiBGaXggcmVncmVzc2lvbiBpbiBvcHRwYXJzZSdzIGFjY2VwdGFuY2Ugb2YgdW5pY29kZQorICBzdHJpbmdzIGluIGFkZF9vcHRpb24gY2FsbHMuCisKIC0gSXNzdWUgIzkxMzA6IEZpeCB2YWxpZGF0aW9uIG9mIHJlbGF0aXZlIGltcG9ydHMgaW4gcGFyc2VyIG1vZHVsZS4KIAogLSBJc3N1ZSAjOTEyODogRml4IHZhbGlkYXRpb24gb2YgY2xhc3MgZGVjb3JhdG9ycyBpbiBwYXJzZXIgbW9kdWxlLgogCi0tIElzc3VlICM3NjczOiBGaXggc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSAoQ1ZFLTIwMTAtMjA4OSkgaW4gdGhlIGF1ZGlvb3AKLSAgbW9kdWxlLCBlbnN1cmUgdGhhdCB0aGUgaW5wdXQgc3RyaW5nIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIHRoZSBmcmFtZSBzaXplCistIElzc3VlICM5MTY0OiBFbnN1cmUgc3lzY29uZmlnIGhhbmRsZXMgZHVwYmxpY2UgYXJjaHMgd2hpbGUgYnVpbGRpbmcgb24gT1NYCiAKLS0gSXNzdWUgIzY1ODk6IGNsZWFudXAgYXN5bmNvcmUuc29ja2V0X21hcCBpbiBjYXNlIHNtdHBkLlNNVFBTZXJ2ZXIgY29uc3RydWN0b3IKLSAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjOTEyNTogQWRkIHJlY29nbml0aW9uIG9mICdleGNlcHQgLi4uIGFzIC4uLicgc3ludGF4IHRvIHBhcnNlciBtb2R1bGUuCi0KLS0gSXNzdWUgIzkwODU6IGVtYWlsIHBhY2thZ2UgdmVyc2lvbiBudW1iZXIgYnVtcGVkIHRvIGl0cyBjb3JyZWN0Ci0gIHZhbHVlIG9mIDQuMC4yIChzYW1lIGFzIGl0IHdhcyBpbiAyLjUpLgotCi0tIElzc3VlICM5MDc1OiBJbiB0aGUgc3NsIG1vZHVsZSwgcmVtb3ZlIHRoZSBzZXR0aW5nIG9mIGEgYGBkZWJ1Z2BgIGZsYWcKLSAgb24gYW4gT3BlblNTTCBzdHJ1Y3R1cmUuCi0KLS0gSXNzdWUgIzU2MTA6IGZlZWRwYXJzZXIgbm8gbG9uZ2VyIGVhdHMgZXh0cmEgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mCi0gIGEgYm9keSBwYXJ0IGlmIHRoZSBib2R5IHBhcnQgZW5kcyB3aXRoIGEgXHJcbi4KLQotLSBJc3N1ZSAjODkyNDogbG9nZ2luZzogSW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgZm9yIFVuaWNvZGUgaW4gZXhjZXB0aW9uIHRleHQuCi0KLS0gRml4IGNvZGVjcy5lc2NhcGVfZW5jb2RlIHRvIHJldHVybiB0aGUgY29ycmVjdCBjb25zdW1lZCBzaXplLgotCi0tIElzc3VlICM2NDcwOiBEcm9wIFVOQyBwcmVmaXggaW4gRml4VGsuCi0KLS0gSXNzdWUgIzg4MzM6IHRhcmZpbGUgY3JlYXRlZCBoYXJkIGxpbmsgZW50cmllcyB3aXRoIGEgc2l6ZSBmaWVsZCAhPSAwIGJ5Ci0gIG1pc3Rha2UuCi0KLS0gSXNzdWUgIzEzNjgyNDc6IHNldF9jaGFyc2V0IChhbmQgdGhlcmVmb3JlIE1JTUVUZXh0KSBub3cgYXV0b21hdGljYWxseQotICBlbmNvZGVzIGEgdW5pY29kZSBfcGF5bG9hZCB0byB0aGUgb3V0cHV0X2NoYXJzZXQuCi0KLS0gSXNzdWUgIzcxNTA6IFJhaXNlIE92ZXJmbG93RXJyb3IgaWYgdGhlIHJlc3VsdCBvZiBhZGRpbmcgb3Igc3VidHJhY3RpbmcKLSAgdGltZWRlbHRhIGZyb20gZGF0ZSBvciBkYXRldGltZSBmYWxscyBvdXRzaWRlIG9mIHRoZSBNSU5ZRUFSOk1BWFlFQVIgcmFuZ2UuCi0KLS0gSXNzdWUgIzY2NjI6IEZpeCBwYXJzaW5nIG9mIG1hbGZvcm1hdHRlZCBjaGFycmVmICgmI2JhZDspLCBwYXRjaCB3cml0dGVuIGJ5Ci0gIEZyZWRyaWsgSMOlw6VyZAotCi0tIElzc3VlICMxNjI4MjA1OiBTb2NrZXQgZmlsZSBvYmplY3RzIHJldHVybmVkIGJ5IHNvY2tldC5zb2NrZXQubWFrZWZpbGUoKSBub3cKLSAgcHJvcGVybHkgaGFuZGxlcyBFSU5UUiB3aXRoaW4gdGhlIHJlYWQsIHJlYWRsaW5lLCB3cml0ZSAmIGZsdXNoIG1ldGhvZHMuCi0gIFRoZSBzb2NrZXQuc2VuZGFsbCgpIG1ldGhvZCBub3cgcHJvcGVybHkgaGFuZGxlcyBpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbHMuCi0KLS0gSXNzdWUgIzM5MjQ6IElnbm9yZSBjb29raWVzIHdpdGggaW52YWxpZCAidmVyc2lvbiIgZmllbGQgaW4gY29va2llbGliLgotCi0tIElzc3VlICM2MjY4OiBGaXggc2VlaygpIG1ldGhvZCBvZiBjb2RlY3Mub3BlbigpLCBkb24ndCByZWFkIG9yIHdyaXRlIHRoZSBCT00KLSAgdHdpY2UgYWZ0ZXIgc2VlaygwKS4gRml4IGFsc28gcmVzZXQoKSBtZXRob2Qgb2YgY29kZWNzLCBVVEYtMTYsIFVURi0zMiBhbmQKLSAgU3RyZWFtV3JpdGVyIGNsYXNzZXMuCi0KLS0gSXNzdWUgIzU2NDA6IEZpeCBTaGlmdC1KSVMgaW5jcmVtZW50YWwgZW5jb2RlciBmb3IgZXJyb3IgaGFuZGxlcnMgZGlmZmVyZW50Ci0gIHRoYW4gc3RyaWN0Ci0KLS0gSXNzdWUgIzg3ODI6IEFkZCBhIHRyYWlsaW5nIG5ld2xpbmUgaW4gbGluZWNhY2hlLnVwZGF0ZWNhY2hlIHRvIHRoZSBsYXN0IGxpbmUKLSAgb2YgZmlsZXMgd2l0aG91dCBvbmUuCi0KLS0gSXNzdWUgIzg3Mjk6IFJldHVybiBOb3RJbXBsZW1lbnRlZCBmcm9tIGNvbGxlY3Rpb25zLk1hcHBpbmcuX19lcV9fIHdoZW4KLSAgY29tcGFyaW5nIHRvIGEgbm9uLW1hcHBpbmcuCi0KLS0gSXNzdWUgIzU5MTg6IEZpeCBhIGNyYXNoIGluIHRoZSBwYXJzZXIgbW9kdWxlLgotCi0tIElzc3VlICM4Njg4OiBEaXN0dXRpbHMgbm93IHJlY2FsY3VsYXRlcyBNQU5JRkVTVCBldmVyeXRpbWUuCi0KLS0gSXNzdWUgIzc2NDA6IEluIHRoZSBuZXcgYGlvYCBtb2R1bGUsIGZpeCByZWxhdGl2ZSBzZWVrKCkgZm9yIGJ1ZmZlcmVkCi0gIHJlYWRhYmxlIHN0cmVhbXMgd2hlbiB0aGUgaW50ZXJuYWwgYnVmZmVyIGlzbid0IGVtcHR5LiAgUGF0Y2ggYnkgUGFzY2FsCi0gIENoYW1ib24uCi0KLS0gSXNzdWUgIzUwOTk6IHN1YnByb2Nlc3MuUG9wZW4uX19kZWxfXyBubyBsb25nZXIgcmVmZXJlbmNlcyBnbG9iYWwgb2JqZWN0cywKLSAgbGVhZGluZyB0byBpc3N1ZXMgZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duLgotCi0tIElzc3VlICM4NjgxOiBNYWtlIHRoZSB6bGliIG1vZHVsZSdzIGVycm9yIG1lc3NhZ2VzIG1vcmUgaW5mb3JtYXRpdmUgd2hlbgotICB0aGUgemxpYiBpdHNlbGYgZG9lc24ndCBnaXZlIGFueSBkZXRhaWxlZCBleHBsYW5hdGlvbi4KLQotLSBJc3N1ZSAjODY3NDogRml4ZWQgYSBudW1iZXIgb2YgaW5jb3JyZWN0IG9yIHVuZGVmaW5lZC1iZWhhdmlvdXItaW5kdWNpbmcKLSAgb3ZlcmZsb3cgY2hlY2tzIGluIHRoZSBhdWRpb29wIG1vZHVsZS4KLQotLSBJc3N1ZSAjODU3MTogRml4IGFuIGludGVybmFsIGVycm9yIHdoZW4gY29tcHJlc3Npbmcgb3IgZGVjb21wcmVzc2luZyBhCi0gIGNodW5rIGxhcmdlciB0aGFuIDFHQiB3aXRoIHRoZSB6bGliIG1vZHVsZSdzIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvcgotICBvYmplY3RzLgotCi0tIElzc3VlICM4NTczOiBhc3luY29yZSBfc3RyZXJyb3IoKSBmdW5jdGlvbiBtaWdodCB0aHJvdyBWYWx1ZUVycm9yLgotCi0tIElzc3VlICM4NDgzOiBhc3luY29yZS5kaXNwYXRjaGVyJ3MgX19nZXRhdHRyX18gbWV0aG9kIHByb2R1Y2VkIGNvbmZ1c2luZwotICBlcnJvciBtZXNzYWdlcyB3aGVuIGFjY2Vzc2luZyB1bmRlZmluZWQgY2xhc3MgYXR0cmlidXRlcyBiZWNhdXNlIG9mIHRoZSBjaGVhcAotICBpbmhlcml0YW5jZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCi0KLS0gSXNzdWUgIzQyNjU6IHNodXRpbC5jb3B5ZmlsZSgpIHdhcyBsZWFraW5nIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBkaXNrIGZpbGxzLgotICBQYXRjaCBieSBUcmVzIFNlYXZlci4KLQotLSBJc3N1ZSAjODYyMTogdXVpZC51dWlkNCgpIHJldHVybmVkIHRoZSBzYW1lIHNlcXVlbmNlIG9mIHZhbHVlcyBpbiB0aGUKLSAgcGFyZW50IGFuZCBhbnkgY2hpbGRyZW4gY3JlYXRlZCB1c2luZyBgYG9zLmZvcmtgYCBvbiBNYWNPUyBYIDEwLjYuCi0KLS0gSXNzdWUgIzgzMTM6IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoKSBlbmNvZGVzIHVuaWNvZGUgbWVzc2FnZSB0bwotICBBU0NJSSB3aXRoIGJhY2tzbGFzaHJlcGxhY2UgZXJyb3IgaGFuZGxlciBpZiBzdHIodmFsdWUpIGZhaWxlZAotCi0tIElzc3VlICM4NTY3OiBGaXggcHJlY2VkZW5jZSBvZiBzaWduYWxzIGluIERlY2ltYWwgbW9kdWxlOiB3aGVuIGEKLSAgRGVjaW1hbCBvcGVyYXRpb24gcmFpc2VzIG11bHRpcGxlIHNpZ25hbHMgYW5kIG1vcmUgdGhhbiBvbmUgb2YgdGhvc2UKLSAgc2lnbmFscyBpcyB0cmFwcGVkLCB0aGUgc3BlY2lmaWNhdGlvbiBkZXRlcm1pbmVzIHRoZSBvcmRlciBpbiB3aGljaAotICB0aGUgc2lnbmFscyBzaG91bGQgYmUgaGFuZGxlZC4gIEluIG1hbnkgY2FzZXMgdGhpcyBvcmRlciB3YXNuJ3QKLSAgYmVpbmcgZm9sbG93ZWQsIGxlYWRpbmcgdG8gdGhlIHdyb25nIFB5dGhvbiBleGNlcHRpb24gYmVpbmcgcmFpc2VkLgotCi0tIElzc3VlICM3ODY1OiBUaGUgY2xvc2UoKSBtZXRob2Qgb2YgOm1vZDpgaW9gIG9iamVjdHMgc2hvdWxkIG5vdCBzd2FsbG93Ci0gIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoZSBpbXBsaWNpdCBmbHVzaCgpLiAgQWxzbyBlbnN1cmUgdGhhdCBjYWxsaW5nCi0gIGNsb3NlKCkgc2V2ZXJhbCB0aW1lcyBpcyBzdXBwb3J0ZWQuICBJbml0aWFsIHBhdGNoIGJ5IFBhc2NhbCBDaGFtYm9uLgotCi0tIElzc3VlICM4NTgxOiBsb2dnaW5nOiByZW1vdmVkIGVycm9ycyByYWlzZWQgd2hlbiBjbG9zaW5nIGhhbmRsZXJzIHR3aWNlLgotCi0tIElzc3VlICM0Njg3OiBGaXggYWNjdXJhY3kgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uIHJ1bnRpbWVzIGRpc3BsYXllZCB3aXRoCi0gIGdjLkRFQlVHX1NUQVRTLgotCi0tIElzc3VlICM4MzU0OiBUaGUgc2lnaW50ZXJydXB0IHNldHRpbmcgaXMgbm93IHByZXNlcnZlZCBmb3IgYWxsIHNpZ25hbHMsCi0gIG5vdCBqdXN0IFNJR0NITEQuCi0KLS0gSXNzdWUgIzg1Nzc6IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMoKSBub3cgbWFrZXMgYSBkaWZmZXJlbmNlCi0gIGJldHdlZW4gdGhlIGJ1aWxkIGRpciBhbmQgdGhlIHNvdXJjZSBkaXIgd2hlbiBsb29raW5nIGZvciAicHl0aG9uLmgiIG9yCi0gICJJbmNsdWRlIi4KLQotLSBJc3N1ZSAjODQ2NDogdGFyZmlsZSBubyBsb25nZXIgY3JlYXRlcyBmaWxlcyB3aXRoIGV4ZWN1dGUgcGVybWlzc2lvbnMgc2V0Ci0gIHdoZW4gbW9kZT0id3wiIGlzIHVzZWQuCi0KLS0gSXNzdWUgIzc4MzQ6IEZpeCBjb25uZWN0KCkgb2YgQmx1ZXRvb3RoIEwyQ0FQIHNvY2tldHMgd2l0aCByZWNlbnQgdmVyc2lvbnMKLSAgb2YgdGhlIExpbnV4IGtlcm5lbC4gIFBhdGNoIGJ5IFlhbml2IEFrbmluLgotCi0tIElzc3VlICM2MzEyOiBGaXhlZCBodHRwIEhFQUQgcmVxdWVzdCB3aGVuIHRoZSB0cmFuc2ZlciBlbmNvZGluZyBpcyBjaHVua2VkLgotICBJdCBzaG91bGQgY29ycmVjdGx5IHJldHVybiBhbiBlbXB0eSByZXNwb25zZSBub3cuCi0KLS0gSXNzdWUgIzgwODY6IEluIDpmdW5jOmBzc2wuREVSX2NlcnRfdG9fUEVNX2NlcnQoKWAsIGZpeCBtaXNzaW5nIG5ld2xpbmUKLSAgYmVmb3JlIHRoZSBjZXJ0aWZpY2F0ZSBmb290ZXIuICBQYXRjaCBieSBLeWxlIFZhbmRlckJlZWsuCi0KLS0gSXNzdWUgIzg1NDk6IEZpeCBjb21waWxpbmcgdGhlIF9zc2wgZXh0ZW5zaW9uIHVuZGVyIEFJWC4gIFBhdGNoIGJ5Ci0gIFNyaWRoYXIgUmF0bmFrdW1hci4KLQotLSBJc3N1ZSAjMjMwMjogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2h1dGRvd24sCi0gIHdoZXJlIHRoZSBtZXRob2QgY291bGQgYmxvY2sgaW5kZWZpbml0ZWx5IGlmIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUKLSAgZXZlbnQgbG9vcCBzdGFydGVkIHJ1bm5pbmcuICBUaGlzIGFsc28gZml4ZXMgdGhlIG9jY2FzaW9uYWwgZnJlZXplcwotICB3aXRuZXNzZWQgaW4gdGVzdF9odHRwc2VydmVycy4KLQotLSBJc3N1ZSAjNTEwMzogU1NMIGhhbmRzaGFrZSB3b3VsZCBpZ25vcmUgdGhlIHNvY2tldCB0aW1lb3V0IGFuZCBibG9jawotICBpbmRlZmluaXRlbHkgaWYgdGhlIG90aGVyIGVuZCBkaWRuJ3QgcmVzcG9uZC4KLQotLSBUaGUgZG9faGFuZHNoYWtlKCkgbWV0aG9kIG9mIFNTTCBvYmplY3RzIG5vdyBhZGp1c3RzIHRoZSBibG9ja2luZyBtb2RlIG9mCi0gIHRoZSBTU0wgc3RydWN0dXJlIGlmIG5lY2Vzc2FyeSAoYXMgb3RoZXIgbWV0aG9kcyBhbHJlYWR5IGRvKS4KLQotLSBJc3N1ZSAjNTIzODogQ2FsbGluZyBtYWtlZmlsZSgpIG9uIGFuIFNTTCBvYmplY3Qgd291bGQgcHJldmVudCB0aGUKLSAgdW5kZXJseWluZyBzb2NrZXQgZnJvbSBiZWluZyBjbG9zZWQgdW50aWwgYWxsIG9iamVjdHMgZ2V0IHRydWVseSBkZXN0cm95ZWQuCi0KLS0gSXNzdWUgIzc5NDM6IEZpeCBjaXJjdWxhciByZWZlcmVuY2UgY3JlYXRlZCB3aGVuIGluc3RhbnRpYXRpbmcgYW4gU1NMCi0gIHNvY2tldC4gIEluaXRpYWwgcGF0Y2ggYnkgUMOpdGVyIFN6YWLDsy4KLQotLSBJc3N1ZSAjODEwODogRml4IHRoZSB1bndyYXAoKSBtZXRob2Qgb2YgU1NMIG9iamVjdHMgd2hlbiB0aGUgc29ja2V0IGhhcwotICBhIG5vbi1pbmZpbml0ZSB0aW1lb3V0LiAgQWxzbyBtYWtlIHRoYXQgbWV0aG9kIGZyaWVuZGxpZXIgd2l0aCBhcHBsaWNhdGlvbnMKLSAgd2FudGluZyB0byBjb250aW51ZSB1c2luZyB0aGUgc29ja2V0IGluIGNsZWFyLXRleHQgbW9kZSwgYnkgZGlzYWJsaW5nCi0gIE9wZW5TU0wncyBpbnRlcm5hbCByZWFkYWhlYWQuICBUaGFua3MgdG8gRGFycnlsIE1pbGVzIGZvciBndWlkYW5jZS4KLQotLSBJc3N1ZSAjODQ4NDogTG9hZCBhbGwgY2lwaGVycyBhbmQgZGlnZXN0IGFsZ29yaXRobXMgd2hlbiBpbml0aWFsaXppbmcKLSAgdGhlIF9zc2wgZXh0ZW5zaW9uLCBzdWNoIHRoYXQgdmVyaWZpY2F0aW9uIG9mIHNvbWUgU1NMIGNlcnRpZmljYXRlcwotICBkb2Vzbid0IGZhaWwgYmVjYXVzZSBvZiBhbiAidW5rbm93biBhbGdvcml0aG0iLgotCi0tIElzc3VlICM0ODE0OiB0aW1lb3V0IHBhcmFtZXRlciBpcyBub3cgYXBwbGllZCBhbHNvIGZvciBjb25uZWN0aW9ucyByZXN1bHRpbmcKLSAgZnJvbSBQT1JUL0VQUlQgY29tbWFuZHMuCi0KLS0gSXNzdWUgIzM4MTc6IGZ0cGxpYi5GVFAuYWJvcnQoKSBtZXRob2Qgbm93IGNvbnNpZGVycyAyMjUgYSB2YWxpZCByZXNwb25zZQotICBjb2RlIGFzIHN0YXRlZCBpbiBSRkMtOTU5IGF0IGNoYXB0ZXIgNS40LgotCi0tIElzc3VlICM1Mjc3OiBGaXggcXVvdGUgY291bnRpbmcgd2hlbiBwYXJzaW5nIFJGQyAyMjMxIGVuY29kZWQgcGFyYW1ldGVycy4KLQotLSBJc3N1ZSAjODE3OTogRml4IG1hY3BhdGgucmVhbHBhdGgoKSBvbiBhIG5vbi1leGlzdGluZyBwYXRoLgotCi0tIElzc3VlICM4MzEwOiBBbGxvdyBkaXMgdG8gZXhhbWluZSBuZXcgc3R5bGUgY2xhc3Nlcy4KLQotLSBJc3N1ZSAjNzY2NzogRml4IGRvY3Rlc3QgZmFpbHVyZXMgd2l0aCBub24tQVNDSUkgcGF0aHMuCi0KLS0gSXNzdWUgIzc2MjQ6IEZpeCBpc2luc3RhbmNlKGZvbygpLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSkgZm9yIG9sZC1zdHlsZQotICBjbGFzc2VzLgotCi0tIElzc3VlICM3NTEyOiBzaHV0aWwuY29weXN0YXQoKSBjb3VsZCByYWlzZSBhbiBPU0Vycm9yIHdoZW4gdGhlIGZpbGVzeXN0ZW0KLSAgZGlkbid0IHN1cHBvcnQgY2hmbGFncygpIChmb3IgZXhhbXBsZSBaRlMgdW5kZXIgRnJlZUJTRCkuICBUaGUgZXJyb3IgaXMKLSAgbm93IHNpbGVuY2VkLgotCi0tIElzc3VlICMzODkwLCAjODIyMjogRml4IHJlY3YoKSBhbmQgcmVjdl9pbnRvKCkgb24gbm9uLWJsb2NraW5nIFNTTCBzb2NrZXRzLgotICBBbHNvLCBlbmFibGUgdGhlIFNTTF9NT0RFX0FVVE9fUkVUUlkgZmxhZyBvbiBTU0wgc29ja2V0cywgc28gdGhhdCBibG9ja2luZwotICByZWFkcyBhbmQgd3JpdGVzIGFyZSBhbHdheXMgcmV0cmllZCBieSBPcGVuU1NMIGl0c2VsZi4KLQotLSBJc3N1ZSAjNjU0NDogZml4IGEgcmVmZXJlbmNlIGxlYWsgaW4gdGhlIGtxdWV1ZSBpbXBsZW1lbnRhdGlvbidzIGVycm9yCi0gIGhhbmRsaW5nLgotCi0tIElzc3VlICM3Nzc0OiBTZXQgc3lzLmV4ZWN1dGFibGUgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIGFyZ3ZbMF0gaGFzIGJlZW4KLSAgc2V0IHRvIGFuIG5vbiBleGlzdGVudCBwcm9ncmFtIG5hbWUgYW5kIFB5dGhvbiBpcyB1bmFibGUgdG8gcmV0cmlldmUgdGhlIHJlYWwKLSAgcHJvZ3JhbSBuYW1lCi0KLS0gSXNzdWUgIzY5MDY6IFRrIHNob3VsZCBub3Qgc2V0IFVuaWNvZGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzEwNTQ5NDM6IEZpeCB1bmljb2RlZGF0YS5ub3JtYWxpemUoJ05GQycsIHRleHQpIGZvciB0aGUgUHVibGljIFJldmlldwotICBJc3N1ZSAjMjkKLQotLSBJc3N1ZSAjNzQ5NDogZml4IGEgY3Jhc2ggaW4gX2xzcHJvZiAoY1Byb2ZpbGUpIGFmdGVyIGNsZWFyaW5nIHRoZSBwcm9maWxlciwKLSAgcmVzZXQgYWxzbyB0aGUgcG9pbnRlciB0byB0aGUgY3VycmVudCBwb2ludGVyIGNvbnRleHQuCi0KLS0gSXNzdWUgIzQ5NjE6IEluY29uc2lzdGVudC93cm9uZyByZXN1bHQgb2YgYXNreWVzbm8gZnVuY3Rpb24gaW4gdGtNZXNzYWdlQm94Ci0gIHdpdGggVGNsL1RrLTguNS4KLQotLSBJc3N1ZSAjNzM1NjogY3R5cGVzLnV0aWw6IE1ha2UgcGFyc2luZyBvZiBsZGNvbmZpZyBvdXRwdXQgaW5kZXBlbmRlbnQgb2YKLSAgdGhlIGxvY2FsZS4KKy0gSXNzdWUgIzkzMTU6IEZpeCBmb3IgdGhlIHRyYWNlIG1vZHVsZSB0byByZWNvcmQgY29ycmVjdCBjbGFzcyBuYW1lCisgIGZvciB0cmFjaW5nIG1ldGhvZHMuCiAKIEV4dGVuc2lvbiBNb2R1bGVzCiAtLS0tLS0tLS0tLS0tLS0tLQogCistIElzc3VlICM5MDU0OiBGaXggYSBjcmFzaCBvY2N1cnJpbmcgd2hlbiB1c2luZyB0aGUgcHlleHBhdCBtb2R1bGUKKyAgd2l0aCBleHBhdCB2ZXJzaW9uIDIuMC4xLgorCistIElzc3VlICMxMDAwMzogQWxsb3cgaGFuZGxpbmcgb2YgU0lHQlJFQUsgb24gV2luZG93cy4gRml4ZXMgYSByZWdyZXNzaW9uCisgIGludHJvZHVjZWQgYnkgaXNzdWUgIzkzMjQuCisKKy0gSXNzdWUgIzg3MzQ6IEF2b2lkIGNyYXNoIGluIG1zdmNydC5nZXRfb3NmaGFuZGxlKCkgd2hlbiBhbiBpbnZhbGlkIGZpbGUKKyAgZGVzY3JpcHRvciBpcyBwcm92aWRlZC4gIFBhdGNoIGJ5IFBhc2NhbCBDaGFtYm9uLgorCistIElzc3VlICM3NzM2OiBSZWxlYXNlIHRoZSBHSUwgYXJvdW5kIGNhbGxzIHRvIG9wZW5kaXIoKSBhbmQgY2xvc2VkaXIoKQorICBpbiB0aGUgcG9zaXggbW9kdWxlLiAgUGF0Y2ggYnkgTWFyY2luIEJhY2hyeS4KKworLSBBcyBhIHJlc3VsdCBvZiBpc3N1ZSAjMjUyMSwgdGhlIF93ZWFrcmVmIG1vZHVsZSBpcyBub3cgY29tcGlsZWQgaW50byB0aGUKKyAgaW50ZXJwcmV0ZXIgYnkgZGVmYXVsdC4KKworLSBJc3N1ZSAjOTMyNDogQWRkIHBhcmFtZXRlciB2YWxpZGF0aW9uIHRvIHNpZ25hbC5zaWduYWwgb24gV2luZG93cyBpbiBvcmRlcgorICB0byBwcmV2ZW50IGNyYXNoZXMuCisKKy0gSXNzdWUgIzk1MjY6IFJlbW92ZSBzb21lIG91dGRhdGVkIChpbnQpIGNhc3RzIHRoYXQgd2VyZSBwcmV2ZW50aW5nCisgIHRoZSBhcnJheSBtb2R1bGUgZnJvbSB3b3JraW5nIGNvcnJlY3RseSB3aXRoIGFycmF5cyBvZiBtb3JlIHRoYW4KKyAgMioqMzEgZWxlbWVudHMuCisKIC0gRml4IG1lbW9yeSBsZWFrIGluIHNzbC5fc3NsLl90ZXN0X2RlY29kZV9jZXJ0LgogCistIElzc3VlICM4MDY1OiBGaXggbWVtb3J5IGxlYWsgaW4gcmVhZGxpbmUgbW9kdWxlIChmcm9tIGZhaWx1cmUgdG8KKyAgZnJlZSB0aGUgcmVzdWx0IG9mIGhpc3RvcnlfZ2V0X2hpc3Rvcnlfc3RhdGUoKSkuCisKKy0gSXNzdWUgIzk0NTA6IEZpeCBtZW1vcnkgbGVhayBpbiByZWFkbGluZS5yZXBsYWNlX2hpc3RvcnlfaXRlbSBhbmQKKyAgcmVhZGxpbmUucmVtb3ZlX2hpc3RvcnlfaXRlbSBmb3IgcmVhZGxpbmUgdmVyc2lvbiA+PSA1LjAuCisKKy0gSXNzdWUgIzgxMDU6IFZhbGlkYXRlIGZpbGUgZGVzY3JpcHRvciBwYXNzZWQgdG8gbW1hcC5tbWFwIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEwMTk4ODI6IEZpeCBJbmRleEVycm9yIHdoZW4gbG9hZGluZyBjZXJ0YWluIGhvdHNob3Qgc3RhdHMuCisKIC0gSXNzdWUgIzk0MjI6IEZpeCBtZW1vcnkgbGVhayB3aGVuIHJlLWluaXRpYWxpemluZyBhIHN0cnVjdC5TdHJ1Y3Qgb2JqZWN0LgogCiAtIElzc3VlICM3OTAwOiBUaGUgZ2V0Z3JvdXBzKDIpIHN5c3RlbSBjYWxsIG9uIE1hY09TWCBiZWhhdmVzIHJhdGhlciBvZGRseQpAQCAtNDY1LDUwMCArNzc1LDE0ODQgQEAKICAgdGhlbiB0aGF0IGV4Y2VwdGlvbiB3YXNuJ3QgcHJvcGVybHkgcHJvcGFnYXRlZCBvbiBtYWNoaW5lcyB3aGVyZQogICBjaGFyIGlzIHVuc2lnbmVkLgogCi0tIElzc3VlICM3Mzg0OiBJZiB0aGUgc3lzdGVtIHJlYWRsaW5lIGxpYnJhcnkgaXMgbGlua2VkIGFnYWluc3QKLSAgbmN1cnNlcywgZG8gbm90IGxpbmsgdGhlIHJlYWRsaW5lIG1vZHVsZSBhZ2FpbnN0IG5jdXJzZXN3LiBUaGUKLSAgYWRkaXRpb25hbCByZXN0cmljdGlvbiBvZiBsaW5raW5nIHRoZSByZWFkbGluZSBhbmQgY3Vyc2VzIG1vZHVsZXMKLSAgYWdhaW5zdCB0aGUgc2FtZSBjdXJzZXMgbGlicmFyeSBpcyBjdXJyZW50bHkgbm90IGVuYWJsZWQuCistIElzc3VlICM3NTY3OiBEb24ndCBjYWxsIGBzZXR1cHRlcm0nIHR3aWNlLgogCi0tIElzc3VlICMyODEwOiBGaXggY2FzZXMgd2hlcmUgdGhlIFdpbmRvd3MgcmVnaXN0cnkgQVBJIHJldHVybnMKLSAgRVJST1JfTU9SRV9EQVRBLCByZXF1aXJpbmcgYSByZS10cnkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBjb21wbGV0ZSByZXN1bHQuCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjNzI4NzogRGVtby9pbXB1dGlsL2tuZWUucHkgd2FzIHJlbW92ZWQuCisKKy0gSXNzdWUgIzkxODg6IFRoZSBnZGIgZXh0ZW5zaW9uIG5vdyBoYW5kbGVzIGNvcnJlY3RseSBuYXJyb3cgKFVDUzIpIGFzIHdlbGwKKyAgYXMgd2lkZSAoVUNTNCkgdW5pY29kZSBidWlsZHMgZm9yIGJvdGggdGhlIGhvc3QgaW50ZXJwcmV0ZXIgKGVtYmVkZGVkCisgIGluc2lkZSBnZGIpIGFuZCB0aGUgaW50ZXJwcmV0ZXIgdW5kZXIgdGVzdC4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzg4NTI6IEFsbG93IHRoZSBzb2NrZXQgbW9kdWxlIHRvIGJ1aWxkIG9uIE9wZW5Tb2xhcmlzLgorCistIElzc3VlICMxMDA1NDogU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSB1aW50cHRyX3QgaW4gaW50dHlwZXMuaC4gIFBhdGNoIGJ5CisgIEFraXJhIEtpdGFkYS4KKworLSBJc3N1ZSAjMTAwNTU6IE1ha2UganNvbiBDODktY29tcGxpYW50IGluIFVDUzQgbW9kZS4KKworLSBJc3N1ZSAjMTYzMzg2MzogRG9uJ3QgaWdub3JlICRDQyB1bmRlciBBSVguCisKKy0gSXNzdWUgIzk4MTA6IENvbXBpbGUgYnppcDIgc291cmNlIGZpbGVzIGluIHB5dGhvbidzIHByb2plY3QgZmlsZQorICBkaXJlY3RseS4gSXQgdXNlZCB0byBiZSBidWlsdCB3aXRoIGJ6aXAyJ3MgbWFrZWZpbGUuCisKKy0gSXNzdWUgIzk0MTM0NjogSW1wcm92ZSB0aGUgYnVpbGQgcHJvY2VzcyB1bmRlciBBSVggYW5kIGFsbG93IFB5dGhvbiB0bworICBiZSBidWlsdCBhcyBhIHNoYXJlZCBsaWJyYXJ5LiAgUGF0Y2ggYnkgU8OpYmFzdGllbiBTYWJsw6kuCisKKy0gSXNzdWUgIzQwMjY6IE1ha2UgdGhlIGZjbnRsIGV4dGVuc2lvbiBidWlsZCB1bmRlciBBSVguICBQYXRjaCBieSBTw6liYXN0aWVuCisgIFNhYmzDqS4KKworLSBJc3N1ZSAjMzEwMTogSGVscGVyIGZ1bmN0aW9ucyBfYWRkX29uZV90b19pbmRleF9DKCkgYW5kCisgIF9hZGRfb25lX3RvX2luZGV4X0YoKSBiZWNvbWUgX1B5X2FkZF9vbmVfdG9faW5kZXhfQygpIGFuZAorICBfUHlfYWRkX29uZV90b19pbmRleF9GKCksIHJlc3BlY3RpdmVseS4KKworLSBJc3N1ZSAjOTcwMDogZGVmaW5lIEhBVkVfQlJPS0VOX1BPU0lYX1NFTUFQSE9SRVMgdW5kZXIgQUlYIDYueC4gIFBhdGNoIGJ5CisgIFPDqWJhc3RpZW4gU2FibMOpLgorCistIElzc3VlICM5MjgwOiBNYWtlIHNoYXJlZGluc3RhbGwgZGVwZW5kIG9uIHNoYXJlZG1vZHMuCisKKy0gSXNzdWUgIzkyNzU6IFRoZSBPU1ggaW5zdGFsbGVyIG9uY2UgYWdhaW4gaW5zdGFsbHMgbGlua3MgdG8gYmluYXJpZXMgaW4KKyAgYGAvdXNyL2xvY2FsL2JpbmBgLgorCistIElzc3VlICM5MzkyOiBBIGZyYW1ld29yayBidWlsZCBvbiBPU1ggIHdpbGwgb25jZSBhZ2FpbiB1c2UgYSB2ZXJzaW9uZWQgbmFtZQorICBvZiB0aGUgYGAydG8zYGAgdG9vbCwgdGhhdCBpcyB5b3UgY2FuIHVzZSBgYDJ0bzMtMi43YGAgdG8gc2VsZWN0IHRoZSBQeXRob24KKyAgMi43IGVkaXRpb24gb2YgMnRvMy4KKworLSBJc3N1ZSAjOTcwMTogVGhlIE1hY09TWCBpbnN0YWxsZXIgY2FuIHBhdGNoIHRoZSBzaGVsbCBwcm9maWxlIHRvIGVuc3VyZSB0aGF0CisgIHRoZSAiYmluIiBkaXJlY3RvcnkgaW5zaWRlIHRoZSBmcmFtZXdvcmsgaXMgb24gdGhlIHNoZWxsJ3Mgc2VhcmNoIHBhdGguIFRoaXMKKyAgZmVhdHVyZSBub3cgYWxzbyBzdXBwb3J0cyB0aGUgWlNIIHNoZWxsLgorCistIElzc3VlICM3NDczOiBhdm9pZCBsaW5rIGVycm9ycyB3aGVuIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggYSBkaWZmZXJlbnQKKyAgc2V0IG9mIGFyY2hpdGVjdHVyZXMgdGhhbiB0aGUgb25lIHRoYXQgaXMgY3VycmVudGx5IGluc3RhbGxlZC4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzk5Nzg6IFdhaXQgdW50aWwgc3VicHJvY2VzcyBjb21wbGV0ZXMgaW5pdGlhbGl6YXRpb24uIChXaW4zMktpbGxUZXN0cworICBpbiB0ZXN0X29zKQorCistIElzc3VlICM5ODk0OiBEbyBub3QgaGFyZGNvZGUgRU5PRU5UIGluIHRlc3Rfc3VicHJvY2Vzcy4KKworLSBJc3N1ZSAjOTMyMzogTWFrZSB0ZXN0LnJlZ3J0ZXN0Ll9fZmlsZV9fIGFic29sdXRlLCB0aGlzIHdhcyBub3QgYWx3YXlzIHRoZQorICBjYXNlIHdoZW4gcnVubmluZyBwcm9maWxlIG9yIHRyYWNlLCBmb3IgZXhhbXBsZS4KKworLSBJc3N1ZSAjOTMxNTogQWRkZWQgdGVzdHMgZm9yIHRoZSB0cmFjZSBtb2R1bGUuICBQYXRjaCBieSBFbGkgQmVuZGVyc2t5LgorCistIFN0cmVuZ3RoZW4gdGVzdF91bmljb2RlIHdpdGggZXhwbGljaXQgdHlwZSBjaGVja2luZyBmb3IgYXNzZXJ0RXF1YWwgdGVzdHMuCisKKy0gSXNzdWUgIzg4NTc6IFByb3ZpZGUgYSB0ZXN0IGNhc2UgZm9yIHNvY2tldC5nZXRhZGRyaW5mby4KKworLSBJc3N1ZSAjNzU2NDogU2tpcCB0ZXN0X2lvY3RsIGlmIGFub3RoZXIgcHJvY2VzcyBpcyBhdHRhY2hlZCB0byAvZGV2L3R0eS4KKworLSBJc3N1ZSAjODQzMzogRml4IHRlc3RfY3Vyc2VzIGZhaWx1cmUgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBuY3Vyc2VzLgorCistIElzc3VlICM5NDk2OiBQcm92aWRlIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIHJsY29tcGxldGVyIG1vZHVsZS4gIFBhdGNoIGJ5CisgIE1pY2hlbGUgT3Jyw7kuCisKKy0gSXNzdWUgIzg2MDU6IFNraXAgdGVzdF9nZGIgaWYgUHl0aG9uIGlzIGNvbXBpbGVkIHdpdGggb3B0aW1pemF0aW9ucy4KKworLSBJc3N1ZSAjOTU2ODogRml4IHRlc3RfdXJsbGliMl9sb2NhbG5ldCBvbiBPUyBYIDEwLjMuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjOTgxNzogQWRkIGV4cGF0IENPUFlJTkcgZmlsZTsgYWRkIGV4cGF0LCBsaWJmZmkgYW5kIGV4cGF0IGxpY2Vuc2VzCisgIHRvIERvYy9saWNlbnNlLnJzdC4KKworLSBJc3N1ZSAjOTUyNDogRG9jdW1lbnQgdGhhdCB0d28gQ1RSTCogc2lnbmFscyBhcmUgbWVhbnQgZm9yIHVzZSBvbmx5CisgIHdpdGggb3Mua2lsbC4KKworLSBJc3N1ZSAjOTI1NTogRG9jdW1lbnQgdGhhdCB0aGUgJ3Rlc3QnIHBhY2thZ2UgaXMgZm9yIGludGVybmFsIFB5dGhvbiB1c2UKKyAgb25seS4KKworLSBJc3N1ZSAjNzgyOTogRG9jdW1lbnQgaW4gZGlzIHRoYXQgYnl0ZWNvZGUgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNz8KKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjAxMC0wNy0wMyoKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gUHJldmVudCBhc3NpZ25tZW50IHRvIHNldCBsaXRlcmFscy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxODY4OiBFbGltaW5hdGUgc3VidGxlIHRpbWluZyBpc3N1ZXMgaW4gdGhyZWFkLWxvY2FsIG9iamVjdHMgYnkKKyAgZ2V0dGluZyByaWQgb2YgdGhlIGNhY2hlZCBjb3B5IG9mIHRocmVhZC1sb2NhbCBhdHRyaWJ1dGUgZGljdGlvbmFyeS4KKworLSBJc3N1ZSAjOTEyNTogQWRkIHJlY29nbml0aW9uIG9mICdleGNlcHQgLi4uIGFzIC4uLicgc3ludGF4IHRvIHBhcnNlciBtb2R1bGUuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICM3NjczOiBGaXggc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSAoQ1ZFLTIwMTAtMjA4OSkgaW4gdGhlIGF1ZGlvb3AgbW9kdWxlLAorICBlbnN1cmUgdGhhdCB0aGUgaW5wdXQgc3RyaW5nIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIHRoZSBmcmFtZSBzaXplLgorCistIElzc3VlICM5MDc1OiBJbiB0aGUgc3NsIG1vZHVsZSwgcmVtb3ZlIHRoZSBzZXR0aW5nIG9mIGEgYGBkZWJ1Z2BgIGZsYWcKKyAgb24gYW4gT3BlblNTTCBzdHJ1Y3R1cmUuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMi43IHJlbGVhc2UgY2FuZGlkYXRlIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjAxMC0wNi0yMCoKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzkwNTg6IFJlbW92ZSBhc3NlcnRpb25zIGFib3V0IElOVF9NQVggaW4gVW5pY29kZURlY29kZUVycm9yLgorCistIElzc3VlICM4MjAyOiBQcmV2aW91cyBjaGFuZ2UgdG8gYGBzeXMuYXJndlswXWBgIGhhbmRsaW5nIGZvciAtbSBjb21tYW5kIGxpbmUKKyAgb3B0aW9uIHJldmVydGVkIGR1ZSB0byB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvbiBoYW5kbGluZyBvZiBgYHN5cy5wYXRoYGAuCisgIFNlZSB0cmFja2VyIGlzc3VlIGZvciBkZXRhaWxzLgorCistIElzc3VlICM4OTQxOiBkZWNvZGluZyBiaWcgZW5kaWFuIFVURi0zMiBkYXRhIGluIFVDUy0yIGJ1aWxkcyBjb3VsZCBjcmFzaAorICB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZQorICAoaGlnaGVyIHRoYW4gMHgxMDAwMCkuCisKKy0gSW4gdGhlIHVuaWNvZGUvc3RyLmZvcm1hdCgpLCByYWlzZSBhIFZhbHVlRXJyb3Igd2hlbiBpbmRleGVzIHRvIGFyZ3VtZW50cyBhcmUKKyAgdG9vIGxhcmdlLgogCiBCdWlsZAogLS0tLS0KIAogLSBJc3N1ZSAjODg1NDogRml4IGZpbmRpbmcgVmlzdWFsIFN0dWRpbyAyMDA4IG9uIFdpbmRvd3MgeDY0LgogCi0tIElzc3VlICMzOTI4OiBvcy5ta25vZCgpIG5vdyBhdmFpbGFibGUgaW4gU29sYXJpcywgYWxzby4KK0xpYnJhcnkKKy0tLS0tLS0KIAotLSBJc3N1ZSAjODE3NTogLS13aXRoLXVuaXZlcnNhbC1hcmNocz1hbGwgd29ya3MgY29ycmVjdGx5IG9uIE9TWCAxMC41CistIElzc3VlICM2NTg5OiBjbGVhbnVwIGFzeW5jb3JlLnNvY2tldF9tYXAgaW4gY2FzZSBzbXRwZC5TTVRQU2VydmVyIGNvbnN0cnVjdG9yCisgIHJhaXNlcyBhbiBleGNlcHRpb24uCiAKLS0gSXNzdWUgIzY3MTY6IFF1b3RlIC14IGFyZ3VtZW50cyBvZiBjb21waWxlYWxsIGluIE1TSSBpbnN0YWxsZXIuCistIElzc3VlICM4OTU5OiBmaXggcmVncmVzc2lvbiBjYXVzZWQgYnkgdXNpbmcgdW5tb2RpZmllZCBsaWJmZmkKKyAgbGlicmFyeSBvbiBXaW5kb3dzLiAgY3R5cGVzIGRvZXMgbm93IGFnYWluIGNoZWNrIHRoZSBzdGFjayBiZWZvcmUKKyAgYW5kIGFmdGVyIGNhbGxpbmcgZm9yZWlnbiBmdW5jdGlvbnMuCiAKLS0gSXNzdWUgIzE2Mjg0ODQ6IFRoZSBNYWtlZmlsZSBkb2Vzbid0IGlnbm9yZSB0aGUgQ0ZMQUdTIGVudmlyb25tZW50Ci0gIHZhcmlhYmxlIGFueW1vcmUuICBJdCBhbHNvIGZvcndhcmRzIHRoZSBMREZMQUdTIHNldHRpbmdzIHRvIHRoZSBsaW5rZXIKLSAgd2hlbiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorLSBJc3N1ZSAjODcyMDogZml4IHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IGZpeCBmb3IgIzQwNTAgYnkgbWFraW5nIGdldHNvdXJjZWZpbGUKKyAgc21hcnQgZW5vdWdoIHRvIGZpbmQgc291cmNlIGZpbGVzIGluIHRoZSBsaW5lY2FjaGUuCiAKLVRlc3RzCi0tLS0tLQorLSBJc3N1ZSAjODk4NjogbWF0aC5lcmZjIHdhcyBpbmNvcnJlY3RseSByYWlzaW5nIE92ZXJmbG93RXJyb3IgZm9yCisgIHZhbHVlcyBiZXR3ZWVuIC0yNy4zIGFuZCAtMzAuMCBvbiBzb21lIHBsYXRmb3Jtcy4KIAotLSBJc3N1ZSAjNzg0OTogTm93IHRoZSB1dGlsaXR5IGBgY2hlY2tfd2FybmluZ3NgYCB2ZXJpZmllcyBpZiB0aGUgd2FybmluZ3MgYXJlCi0gIGVmZmVjdGl2ZWx5IHJhaXNlZC4gIEEgbmV3IHByaXZhdGUgdXRpbGl0eSBgYF9jaGVja19weTNrX3dhcm5pbmdzYGAgaGFzIGJlZW4KLSAgYmFja3BvcnRlZCB0byBoZWxwIHNpbGVuY2luZyBweTNrIHdhcm5pbmdzLgorLSBJc3N1ZSAjODkyNDogbG9nZ2luZzogSW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgZm9yIFVuaWNvZGUgaW4gZXhjZXB0aW9uIHRleHQuCiAKLS0gSXNzdWUgIzg2NzI6IEFkZCBhIHpsaWIgdGVzdCBlbnN1cmluZyB0aGF0IGFuIGluY29tcGxldGUgc3RyZWFtIGNhbiBiZQotICBoYW5kbGVkIGJ5IGEgZGVjb21wcmVzc29yIG9iamVjdCB3aXRob3V0IGVycm9ycyAoaXQgcmV0dXJucyBpbmNvbXBsZXRlCi0gIHVuY29tcHJlc3NlZCBkYXRhKS4KLQotLSBJc3N1ZSAjODYyOTogRGlzYWJsZSBzb21lIHRlc3Rfc3NsIHRlc3RzLCBzaW5jZSB0aGV5IGdpdmUgZGlmZmVyZW50Ci0gIHJlc3VsdHMgd2l0aCBPcGVuU1NMIDEuMC4wIGFuZCBoaWdoZXIuCi0KLS0gSXNzdWUgIzg1NzY6IFJlbW92ZSB1c2Ugb2YgZmluZF91bnVzZWRfcG9ydCgpIGluIHRlc3Rfc210cGxpYiBhbmQKLSAgdGVzdF9tdWx0aXByb2Nlc3NpbmcuICBQYXRjaCBieSBQYXVsIE1vb3JlLgotCi0tIElzc3VlICM3MDI3OiByZWdydGVzdC5weSBrZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgZW5jb2RpbmdzLmFzY2lpIG1vZHVsZSBhcyBhCi0gIHdvcmthcm91bmQgdG8gIzcxNDAgYnVnCi0KLS0gSXNzdWUgIzM4NjQ6IFNraXAgdGhyZWUgdGVzdF9zaWduYWwgdGVzdHMgb24gZnJlZWJzZDYgYmVjYXVzZSB0aGV5IGZhaWwKLSAgaWYgYW55IHRocmVhZCB3YXMgcHJldmlvdXNseSBzdGFydGVkLCBtb3N0IGxpa2VseSBkdWUgdG8gYSBwbGF0Zm9ybSBidWcuCi0KLS0gSXNzdWUgIzgxOTM6IEZpeCB0ZXN0X3psaWIgZmFpbHVyZSB3aXRoIHpsaWIgMS4yLjQuCistIElzc3VlICM4OTQ4OiBjbGVhbnVwIGZ1bmN0aW9ucyBhbmQgY2xhc3MgLyBtb2R1bGUgc2V0dXBzIGFuZCB0ZWFyZG93bnMgYXJlCisgIG5vdyBob25vcmVkIGluIHVuaXR0ZXN0IGRlYnVnIG1ldGhvZHMuCiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAotLSBJc3N1ZSAjOTI1NTogRG9jdW1lbnQgdGhhdCB0aGUgJ3Rlc3QnIHBhY2thZ2UgaXMgZm9yIGludGVybmFsIFB5dGhvbiB1c2UKLSAgb25seS4KLQotLSBJc3N1ZSAjODkwOTogQWRkZWQgdGhlIHNpemUgb2YgdGhlIGJpdG1hcCB1c2VkIGluIHRoZSBpbnN0YWxsZXIgY3JlYXRlZCBieQorLSBJc3N1ZXMgIzg5MDk6IEFkZGVkIHRoZSBzaXplIG9mIHRoZSBiaXRtYXAgdXNlZCBpbiB0aGUgaW5zdGFsbGVyIGNyZWF0ZWQgYnkKICAgZGlzdHV0aWxzJyBiZGlzdF93aW5pbnN0LiBQYXRjaCBieSBBbmF0b2x5IFRlY2h0b25pay4KIAorTWlzYworLS0tLQogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuNT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAyMDEwLTAzLTE4KgorLSBJc3N1ZSAjODM2MjogQWRkIG1haW50YWluZXJzLnJzdDogbGlzdCBvZiBtb2R1bGUgbWFpbnRhaW5lcnMKIAogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuNSByYyAyPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNyBSZWxlYXNlIENhbmRpZGF0ZSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSpSZWxlYXNlIGRhdGU6IDIwMTAtMDMtMDkqCisqUmVsZWFzZSBkYXRlOiAyMDEwLTA2LTA1KgogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAotLSBJc3N1ZSAjODA4OTogYSBPUyBYIGZyYW1ld29yayBidWlsZCB3aXRoIC0td2l0aC11bml2ZXJzYWwtYXJjaHM9My13YXl8aW50ZWwKLSAgaGFkIG5vIHdheSB0byBzZWxlY3QgYSAzMi1iaXQgZXhlY3V0YWJsZS4KKy0gSXNzdWUgIzgyNzE6IGR1cmluZyB0aGUgZGVjb2Rpbmcgb2YgYW4gaW52YWxpZCBVVEYtOCBieXRlIHNlcXVlbmNlLCBvbmx5IHRoZQorICBzdGFydCBieXRlIGFuZCB0aGUgY29udGludWF0aW9uIGJ5dGUocykgYXJlIG5vdyBjb25zaWRlcmVkIGludmFsaWQsIGluc3RlYWQKKyAgb2YgdGhlIG51bWJlciBvZiBieXRlcyBzcGVjaWZpZWQgYnkgdGhlIHN0YXJ0IGJ5dGUuCisgIEUuZy46ICdceGYxXHg4MEFCJy5kZWNvZGUoJ3V0Zi04JywgJ3JlcGxhY2UnKSBub3cgcmV0dXJucyB1J1x1ZmZmZEFCJyBhbmQKKyAgcmVwbGFjZXMgd2l0aCBVK0ZGRkQgb25seSB0aGUgc3RhcnQgYnl0ZSAoJ1x4ZjEnKSBhbmQgdGhlIGNvbnRpbnVhdGlvbiBieXRlCisgICgnXHg4MCcpIGV2ZW4gaWYgJ1x4ZjEnIGlzIHRoZSBzdGFydCBieXRlIG9mIGEgNC1ieXRlcyBzZXF1ZW5jZS4KKyAgUHJldmlvdXMgdmVyc2lvbnMgcmV0dXJuZWQgYSBzaW5nbGUgdSdcdWZmZmQnLgogCi0tIElzc3VlICM4MDg0OiBmaXhlcyBidWlsZCBpc3N1ZXMgb24gT1NYIDEwLjYgd2hlbiB0YXJnZXR0aW5nIE9TWCAxMC40LgorLSBJc3N1ZSAjODYyNzogUmVtb3ZlIGJvZ3VzICJPdmVycmlkaW5nIF9fY21wX18gYmxvY2tzIGluaGVyaXRhbmNlIG9mCisgIF9faGFzaF9fIGluIDMueCIgd2FybmluZy4gIEFsc28gZml4ICJYWFggdW5kZXRlY3RlZCBlcnJvciIgdGhhdAorICBhcmlzZXMgZnJvbSB0aGUgIk92ZXJyaWRpbmcgX19lcV9fIGJsb2NrcyBpbmhlcml0YW5jZSAuLi4iIHdhcm5pbmcKKyAgd2hlbiB0dXJuZWQgaW50byBhbiBleGNlcHRpb246IGluIHRoaXMgY2FzZSB0aGUgZXhjZXB0aW9uIHNpbXBseQorICBnZXRzIGlnbm9yZWQuCisKKy0gSXNzdWUgIzg3NDg6IEZpeCB0d28gaXNzdWVzIHdpdGggY29tcGFyaXNvbnMgYmV0d2VlbiBjb21wbGV4IGFuZCBpbnRlZ2VyCisgIG9iamVjdHMuICAoMSkgVGhlIGNvbXBhcmlzb24gY291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIFRydWUgaW4gc29tZSBjYXNlcworICAoMioqNTMrMSA9PSBjb21wbGV4KDIqKjUzKSA9PSAyKio1MyksIGJyZWFraW5nIHRyYW5zaXZpdHkgb2YgZXF1YWxpdHkuCisgICgyKSBUaGUgY29tcGFyaXNvbiByYWlzZWQgYW4gT3ZlcmZsb3dFcnJvciBmb3IgbGFyZ2UgaW50ZWdlcnMsIGxlYWRpbmcKKyAgdG8gdW5wcmVkaWN0YWJsZSBleGNlcHRpb25zIHdoZW4gY29tYmluaW5nIGludGVnZXJzIGFuZCBjb21wbGV4IG9iamVjdHMKKyAgaW4gc2V0cyBvciBkaWN0cy4KKworLSBJc3N1ZSAjNTIxMTogSW1wbGljaXQgY29lcmNpb24gZm9yIHRoZSBjb21wbGV4IHR5cGUgaXMgbm93IGNvbXBsZXRlbHkKKyAgcmVtb3ZlZC4gIChDb2VyY2lvbiBmb3IgYXJpdGhtZXRpYyBvcGVyYXRpb25zIHdhcyBhbHJlYWR5IHJlbW92ZWQgaW4gMi43CisgIGFscGhhIDQsIGJ1dCBjb2VyY2lvbiBmb3IgcmljaCBjb21wYXJpc29ucyB3YXMgYWNjaWRlbnRhbGx5IGxlZnQgaW4uKQorCistIElzc3VlICMzNzk4OiBXcml0ZSBzeXMuZXhpdCgpIG1lc3NhZ2UgdG8gc3lzLnN0ZGVyciB0byB1c2Ugc3RkZXJyIGVuY29kaW5nCisgIGFuZCBlcnJvciBoYW5kbGVyLCBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gdGhlIEMgc3RkZXJyIGZpbGUgaW4gdXRmLTgKKworLSBJc3N1ZSAjNzkwMjogV2hlbiB1c2luZyBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnQgc3ludGF4LCBkb24ndCB0cnkgaW1wbGljaXQKKyAgcmVsYXRpdmUgaW1wb3J0IHNlbWFudGljcy4KKworLSBJc3N1ZSAjNzA3OTogRml4IGEgcG9zc2libGUgY3Jhc2ggd2hlbiBjbG9zaW5nIGEgZmlsZSBvYmplY3Qgd2hpbGUgdXNpbmcgaXQKKyAgZnJvbSBhbm90aGVyIHRocmVhZC4gIFBhdGNoIGJ5IERhbmllbCBTdHV0emJhY2guCisKKy0gSXNzdWUgIzg4Njg6IEZpeCB0aGF0IGVuc3VyZXMgdGhhdCBweXRob24gc2NyaXB0cyBoYXZlIGFjY2VzcyB0byB0aGUKKyAgV2luZG93IFNlcnZlciBhZ2FpbiBpbiBhIGZyYW1ld29yayBidWlsZCBvbiBNYWNPU1ggMTAuNSBvciBlYXJsaWVyLgorCitDLUFQSQorLS0tLS0KKworLSBJc3N1ZSAjNTc1MzogQSBuZXcgQyBBUEkgZnVuY3Rpb24sIDpjZnVuYzpgUHlTeXNfU2V0QXJndkV4YCwgYWxsb3dzIGVtYmVkZGVycworICBvZiB0aGUgaW50ZXJwcmV0ZXIgdG8gc2V0IHN5cy5hcmd2IHdpdGhvdXQgYWxzbyBtb2RpZnlpbmcgc3lzLnBhdGguICBUaGlzCisgIGhlbHBzIGZpeCBgQ1ZFLTIwMDgtNTk4MworICA8aHR0cDovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVuYW1lLmNnaT9uYW1lPUNWRS0yMDA4LTU5ODM+YF8uCiAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBSZXZlcnRpbmcgdGhlIGNoYW5nZXMgbWFkZSBpbiByNzg0MzIuIERpc2N1c3NlZCBpbiB0aGUgdHJhY2tlciBpc3N1ZSAjNzU0MC4KKy0gSXNzdWUgIzgzMDI6IFNraXBUZXN0IGluIHVuaXR0ZXN0LlRlc3RDYXNlLnNldFVwQ2xhc3Mgb3Igc2V0VXBNb2R1bGUgaXMgbm93CisgIHJlcG9ydGVkIGFzIGEgc2tpcCByYXRoZXIgdGhhbiBhbiBlcnJvci4KIAotLSBJc3N1ZSAjODEwNzogRml4ZWQgdGVzdF9kaXN0dXRpbHMgc28gaXQgZG9lc24ndCBjcmFzaCB3aGVuIHRoZSBzb3VyY2UKLSAgZGlyZWN0b3J5IGNhbm5vdCBiZSBmb3VuZC4KKy0gSXNzdWUgIzgzNTE6IEV4Y2Vzc2l2ZWx5IGxhcmdlIGRpZmZzIGR1ZSB0bworICB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRTZXF1ZW5jZUVxdWFsIGFyZSBubyBsb25nZXIgaW5jbHVkZWQgaW4gZmFpbHVyZQorICByZXBvcnRzLgorCistIElzc3VlICM4ODk5OiB0aW1lLnN0cnVjdF90aW1lIG5vdyBoYXMgY2xhc3MgYW5kIGF0cmlidXRlIGRvY3N0cmluZ3MuCisKKy0gSXNzdWUgIzQ0ODc6IGVtYWlsIG5vdyBhY2NlcHRzIGFzIGNoYXJzZXQgYWxpYXNlcyBhbGwgY29kZWMgYWxpYXNlcworICBhY2NlcHRlZCBieSB0aGUgY29kZWNzIG1vZHVsZS4KKworLSBJc3N1ZSAjNjQ3MDogRHJvcCBVTkMgcHJlZml4IGluIEZpeFRrLgorCistIElzc3VlICM1NjEwOiBmZWVkcGFyc2VyIG5vIGxvbmdlciBlYXRzIGV4dHJhIGNoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZgorICBhIGJvZHkgcGFydCBpZiB0aGUgYm9keSBwYXJ0IGVuZHMgd2l0aCBhIFxyXG4uCisKKy0gSXNzdWUgIzg4MzM6IHRhcmZpbGUgY3JlYXRlZCBoYXJkIGxpbmsgZW50cmllcyB3aXRoIGEgc2l6ZSBmaWVsZCAhPSAwIGJ5CisgIG1pc3Rha2UuCisKKy0gSXNzdWUgIzEzNjgyNDc6IHNldF9jaGFyc2V0IChhbmQgdGhlcmVmb3JlIE1JTUVUZXh0KSBub3cgYXV0b21hdGljYWxseQorICBlbmNvZGVzIGEgdW5pY29kZSBfcGF5bG9hZCB0byB0aGUgb3V0cHV0X2NoYXJzZXQuCisKKy0gSXNzdWUgIzcxNTA6IFJhaXNlIE92ZXJmbG93RXJyb3IgaWYgdGhlIHJlc3VsdCBvZiBhZGRpbmcgb3Igc3VidHJhY3RpbmcKKyAgdGltZWRlbHRhIGZyb20gZGF0ZSBvciBkYXRldGltZSBmYWxscyBvdXRzaWRlIG9mIHRoZSBNSU5ZRUFSOk1BWFlFQVIgcmFuZ2UuCisKKy0gSXNzdWUgIzY2NjI6IEZpeCBwYXJzaW5nIG9mIG1hbGZvcm1hdHRlZCBjaGFycmVmICgmI2JhZDspLCBwYXRjaCB3cml0dGVuIGJ5CisgIEZyZWRyaWsgSMOlw6VyZAorCistIElzc3VlICM4MDE2OiBBZGQgdGhlIENQODU4IGNvZGVjLgorCistIElzc3VlICMzOTI0OiBJZ25vcmUgY29va2llcyB3aXRoIGludmFsaWQgInZlcnNpb24iIGZpZWxkIGluIGNvb2tpZWxpYi4KKworLSBJc3N1ZSAjNjI2ODogRml4IHNlZWsoKSBtZXRob2Qgb2YgY29kZWNzLm9wZW4oKSwgZG9uJ3QgcmVhZCBvciB3cml0ZSB0aGUgQk9NCisgIHR3aWNlIGFmdGVyIHNlZWsoMCkuIEZpeCBhbHNvIHJlc2V0KCkgbWV0aG9kIG9mIGNvZGVjcywgVVRGLTE2LCBVVEYtMzIgYW5kCisgIFN0cmVhbVdyaXRlciBjbGFzc2VzLgorCistIElzc3VlICM1NjQwOiBGaXggU2hpZnQtSklTIGluY3JlbWVudGFsIGVuY29kZXIgZm9yIGVycm9yIGhhbmRsZXJzIGRpZmZlcmVudAorICB0aGFuICdzdHJpY3QnLgorCistIElzc3VlICM4NzgyOiBBZGQgYSB0cmFpbGluZyBuZXdsaW5lIGluIGxpbmVjYWNoZS51cGRhdGVjYWNoZSB0byB0aGUgbGFzdCBsaW5lCisgIG9mIGZpbGVzIHdpdGhvdXQgb25lLgorCistIElzc3VlICM4NzI5OiBSZXR1cm4gTm90SW1wbGVtZW50ZWQgZnJvbSBgYGNvbGxlY3Rpb25zLk1hcHBpbmcuX19lcV9fKClgYCB3aGVuCisgIGNvbXBhcmluZyB0byBhIG5vbi1tYXBwaW5nLgorCistIElzc3VlICM4NzU5OiBGaXggdXNlciBwYXRocyBpbiBzeXNjb25maWcgZm9yIHBvc2l4IGFuZCBvczIgc2NoZW1lcy4KKworLSBJc3N1ZSAjMTI4NTA4NjogU3BlZWQgdXAgYGB1cmxsaWIucXVvdGUoKWBgIGFuZCB1cmxsaWIudW5xdW90ZSBmb3Igc2ltcGxlCisgIGNhc2VzLgorCistIElzc3VlICM4Njg4OiBEaXN0dXRpbHMgbm93IHJlY2FsY3VsYXRlcyBNQU5JRkVTVCBldmVyeXRpbWUuCisKKy0gSXNzdWUgIzUwOTk6IFRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBvZiBgYHN1YnByb2Nlc3MuUG9wZW5gYCAoYW5kIHRoZSBtZXRob2RzCisgIGl0IGNhbGxzKSByZWZlcmVuY2VkIGdsb2JhbCBvYmplY3RzLCBjYXVzaW5nIGVycm9ycyB0byBwb3AgdXAgZHVyaW5nCisgIGludGVycHJldGVyIHNodXRkb3duLgogCiBFeHRlbnNpb24gTW9kdWxlcwogLS0tLS0tLS0tLS0tLS0tLS0KIAotLSBJc3N1ZSAjNzY3MDogc3FsaXRlMzogRml4ZWQgY3Jhc2hlcyB3aGVuIG9wZXJhdGluZyBvbiBjbG9zZWQgY29ubmVjdGlvbnMuCistIElzc3VlICM3Mzg0OiBJZiB0aGUgc3lzdGVtIHJlYWRsaW5lIGxpYnJhcnkgaXMgbGlua2VkIGFnYWluc3QgbmN1cnNlcywKKyAgdGhlIGN1cnNlcyBtb2R1bGUgbXVzdCBiZSBsaW5rZWQgYWdhaW5zdCBuY3Vyc2VzIGFzIHdlbGwuIE90aGVyd2lzZSBpdAorICBpcyBub3Qgc2FmZSB0byBsb2FkIGJvdGggdGhlIHJlYWRsaW5lIGFuZCBjdXJzZXMgbW9kdWxlcyBpbiBhbiBhcHBsaWNhdGlvbi4KIAotLSBJc3N1ZSAjODA1MzogbG9naWMgd2FzIGludmVydGVkIG9uIHdoaWNoIHBsYXRmb3JtcyB0byBydW4gYSB0ZXN0IG9uLgotICBjYXVzZWQgdGVzdF90aHJlYWQgdG8gZmFpbCBvbiBXaW5kb3dzLgorLSBJc3N1ZSAjMjgxMDogRml4IGNhc2VzIHdoZXJlIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IEFQSSByZXR1cm5zCisgIEVSUk9SX01PUkVfREFUQSwgcmVxdWlyaW5nIGEgcmUtdHJ5IGluIG9yZGVyIHRvIGdldCB0aGUgY29tcGxldGUgcmVzdWx0LgorCistIElzc3VlICM4Njc0OiBGaXhlZCBhIG51bWJlciBvZiBpbmNvcnJlY3Qgb3IgdW5kZWZpbmVkLWJlaGF2aW91ci1pbmR1Y2luZworICBvdmVyZmxvdyBjaGVja3MgaW4gdGhlIGBgYXVkaW9vcGBgIG1vZHVsZS4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzg4ODk6IHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQgcmV3cml0dGVuIHNvIHRoYXQgdGhlIG5ldworICBjaGVja3MgYWxzbyB3b3JrIG9uIEZyZWVCU0QsIHdoaWNoIGxhY2tzIEVBSV9OT0RBVEEuCisKKy0gSXNzdWUgIzg4MzU6IHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoKSBjYXRjaGVzIGdhaWVycm9yKEVBSV9OT05BTUUpCisgIGFuZCBnYWllcnJvcihFQUlfTk9EQVRBKQorCistIElzc3VlICM3NDQ5OiBTa2lwIHRlc3Rfc29ja2V0c2VydmVyIGlmIHRocmVhZGluZyBzdXBwb3J0IGlzIGRpc2FibGVkCisKKy0gT24gZGFyd2luLCBgYHRlc3Rfc2l0ZWBgIGFzc3VtZWQgdGhhdCBhIGZyYW1ld29yayBidWlsZCB3YXMgYmVpbmcgdXNlZCwKKyAgbGVhZGluZyB0byBhIGZhaWx1cmUgd2hlcmUgZm91ciBkaXJlY3RvcmllcyB3ZXJlIGV4cGVjdGVkIGZvciBzaXRlLXBhY2thZ2VzCisgIGluc3RlYWQgb2YgdHdvIGluIGEgbm9uLWZyYW1ld29yayBidWlsZC4KKworQnVpbGQKKy0tLS0tCisKKy0gRGlzcGxheSBpbnN0YWxsZXIgd2FybmluZyB0aGF0IFdpbmRvd3MgMjAwMCB3b24ndCBiZSBzdXBwb3J0ZWQgaW4gZnV0dXJlCisgIHJlbGVhc2VzLgorCistIElzc3VlcyAjMTc1OTE2OSwgIzg4NjQ6IERyb3AgX1hPUEVOX1NPVVJDRSBvbiBTb2xhcmlzLCBkZWZpbmUgaXQgZm9yCisgIG11bHRpcHJvY2Vzc2luZyBvbmx5LgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjNTQ2NDogSW1wbGVtZW50IHBsdXJhbCBmb3JtcyBpbiBtc2dmbXQucHkuCiAKIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjUgcmMgMT8KK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNyBiZXRhIDI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiAyMDEwLTAzLTAxKgorKlJlbGVhc2UgZGF0ZTogMjAxMC0wNS0wOCoKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzczMDk6IEZpeCB1bmNoZWNrZWQgYXR0cmlidXRlIGFjY2VzcyB3aGVuIGNvbnZlcnRpbmcKLSAgVW5pY29kZUVuY29kZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IsIGFuZCBVbmljb2RlVHJhbnNsYXRlRXJyb3IgdG8KLSAgc3RyaW5ncy4KKy0gUnVuIENsYW5nIDIuNydzIHN0YXRpYyBhbmFseXplciBmb3IgYGBPYmplY3RzL2BgIGFuZCBgYFB5dGhvbi9gYC4KIAotLSBJc3N1ZSAjNzY0OTogInUnJWMnICUgY2hhciIgbm93IGJlaGF2ZXMgbGlrZSAidSclcycgJSBjaGFyIiBhbmQgcmFpc2VzIGEKLSAgVW5pY29kZURlY29kZUVycm9yIGlmICdjaGFyJyBpcyBhIGJ5dGUgc3RyaW5nIHRoYXQgY2FuJ3QgYmUgZGVjb2RlZCB1c2luZwotICB0aGUgZGVmYXVsdCBlbmNvZGluZy4KKy0gSXNzdWUgIzE1MzM6IEZpeCBpbmNvbnNpc3RlbmN5IGluIHJhbmdlIGZ1bmN0aW9uIGFyZ3VtZW50IHByb2Nlc3Npbmc6IGFueQorICBub24tZmxvYXQgbm9uLWludGVnZXIgYXJndW1lbnQgaXMgbm93IGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyIChpZiBwb3NzaWJsZSkKKyAgdXNpbmcgaXRzIF9faW50X18gbWV0aG9kLiAgUHJldmlvdXNseSwgb25seSBzbWFsbCBhcmd1bWVudHMgd2VyZSB0cmVhdGVkIHRoaXMKKyAgd2F5OyBsYXJnZXIgYXJndW1lbnRzICh0aG9zZSB3aG9zZSBfX2ludF9fIHdhcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBhIEMgbG9uZykKKyAgd291bGQgcHJvZHVjZSBhIFR5cGVFcnJvci4KIAotLSBJc3N1ZSAjNTY3NzogRXhwbGljaXRseSBmb3JiaWQgd3JpdGUgb3BlcmF0aW9ucyBvbiByZWFkLW9ubHkgZmlsZSBvYmplY3RzLAotICBhbmQgcmVhZCBvcGVyYXRpb25zIG9uIHdyaXRlLW9ubHkgZmlsZSBvYmplY3RzLiAgT24gV2luZG93cywgdGhlIHN5c3RlbSBDCi0gIGxpYnJhcnkgd291bGQgcmV0dXJuIGEgYm9ndXMgcmVzdWx0OyBvbiBTb2xhcmlzLCBpdCB3YXMgcG9zc2libGUgdG8gY3Jhc2gKLSAgdGhlIGludGVycHJldGVyLiAgUGF0Y2ggYnkgU3RlZmFuIEtyYWguCistIElzc3VlICM4MjAyOiBgYHN5cy5hcmd2WzBdYGAgaXMgbm93IHNldCB0byAnLW0nIGluc3RlYWQgb2YgJy1jJyB3aGVuIHNlYXJjaGluZworICBmb3IgdGhlIG1vZHVsZSBmaWxlIHRvIGJlIGV4ZWN1dGVkIHdpdGggdGhlIC1tIGNvbW1hbmQgbGluZSBvcHRpb24uCiAKLS0gSXNzdWUgIzQ5Nzg6IFBhc3Npbmcga2V5d29yZCBhcmd1bWVudHMgYXMgdW5pY29kZSBzdHJpbmdzIGlzIG5vdyBhbGxvd2VkLgorLSBJc3N1ZSAjNzMxOTogV2hlbiAtUSBpcyB1c2VkLCBkbyBub3Qgc2lsZW5jZSBEZXByZWNhdGlvbldhcm5pbmcuCiAKLS0gSXNzdWUgIzc4MTk6IENoZWNrIHN5cy5jYWxsX3RyYWNpbmcoKSBhcmd1bWVudHMgdHlwZXMuCistIElzc3VlICM3MzMyOiBSZW1vdmUgdGhlIDE2S0Igc3RhY2stYmFzZWQgYnVmZmVyIGluCisgIGBgUHlNYXJzaGFsX1JlYWRMYXN0T2JqZWN0RnJvbUZpbGVgYCwgd2hpY2ggZG9lc24ndCBicmluZyBhbnkgbm90aWNlYWJsZQorICBiZW5lZml0IGNvbXBhcmVkIHRvIHRoZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrLiAgUGF0Y2ggYnkKKyAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgogCi0tIElzc3VlICM3Nzg4OiBGaXggYW4gaW50ZXJwcmV0ZXIgY3Jhc2ggcHJvZHVjZWQgYnkgZGVsZXRpbmcgYSBsaXN0Ci0gIHNsaWNlIHdpdGggdmVyeSBsYXJnZSBzdGVwIHZhbHVlLgorLSBJc3N1ZSAjODQxNzogUmFpc2UgYW4gT3ZlcmZsb3dFcnJvciB3aGVuIGFuIGludGVnZXIgbGFyZ2VyIHRoYW4gc3lzLm1heHNpemUgaXMKKyAgcGFzc2VkIHRvIGJ5dGVhcnJheS4KIAotLSBJc3N1ZSAjNzU2MTogT3BlcmF0aW9ucyBvbiBlbXB0eSBieXRlYXJyYXlzIChzdWNoIGFzIGBpbnQoYnl0ZWFycmF5KCkpYCkKLSAgY291bGQgY3Jhc2ggaW4gbWFueSBwbGFjZXMgYmVjYXVzZSBvZiB0aGUgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKCkgbWFjcm8KLSAgcmV0dXJuaW5nIE5VTEwuICBUaGUgbWFjcm8gbm93IHJldHVybnMgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBlbXB0eQotICBzdHJpbmcgaW5zdGVhZC4KKy0gSXNzdWUgIzcwNzI6IGBgaXNzcGFjZSgweGEwKWBgIGlzIHRydWUgb24gTWFjIE9TIFguCiAKLS0gSXNzdWUgIzc2MDQ6IERlbGV0aW5nIGFuIHVuc2V0IHNsb3R0ZWQgYXR0cmlidXRlIGRpZCBub3QgcmFpc2UgYW4KLSAgQXR0cmlidXRlRXJyb3IuCistIElzc3VlICM4NDA0OiBGaXggc2V0IG9wZXJhdGlvbnMgb24gZGljdGlvbmFyeSB2aWV3cy4KIAotLSBJc3N1ZSAjNzQxMzogUGFzc2luZyAnXDAnIGFzIHRoZSBzZXBhcmF0b3IgdG8gZGF0ZXRpbWUuZGF0ZXRpbWUuaXNvZm9ybWF0KCkKLSAgdXNlZCB0byBkcm9wIHRoZSB0aW1lIHBhcnQgb2YgdGhlIHJlc3VsdC4KLQotLSBJc3N1ZSAjNjEwODogdW5pY29kZShleGNlcHRpb24pIGFuZCBzdHIoZXhjZXB0aW9uKSBzaG91bGQgcmV0dXJuIHRoZSBzYW1lCi0gIG1lc3NhZ2Ugd2hlbiBvbmx5IF9fc3RyX18gKGFuZCBub3QgX191bmljb2RlX18pIGlzIG92ZXJyaWRkZW4gaW4gdGhlCi0gIHN1YmNsYXNzLgotCi0tIElzc3VlICM3NDkxOiBNZXRhY2xhc3MncyBfX2NtcF9fIG1ldGhvZCB3YXMgaWdub3JlZC4KLQotLSBBZGQgUHkzayB3YXJuaW5ncyBmb3IgcGFyYW1ldGVyIG5hbWVzIGluIHBhcmVudGhlc2lzLgotCi0tIElzc3VlICM3MzYyOiBHaXZlIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2UgZm9yIGRlZiBmKCh4KT0zKTogcGFzcy4KLQotLSBJc3N1ZSAjNzA4NTogRml4IGNyYXNoIHdoZW4gaW1wb3J0aW5nIHNvbWUgZXh0ZW5zaW9ucyBpbiBhIHRocmVhZAotICBvbiBNYWNPU1ggMTAuNi4KLQotLSBJc3N1ZSAjNzA3MDogRml4IHJvdW5kIGJ1ZyBmb3IgbGFyZ2Ugb2RkIGludGVnZXIgYXJndW1lbnRzLgotCi0tIElzc3VlICM3MDc4OiBTZXQgc3RydWN0Ll9fZG9jX18gZnJvbSBfc3RydWN0Ll9fZG9jX18uCi0KLS0gSXNzdWUgIzE3MjIzNDQ6IHRocmVhZGluZy5fc2h1dGRvd24oKSBpcyBub3cgY2FsbGVkIGluIFB5X0ZpbmFsaXplKCksIHdoaWNoCi0gIGZpeGVzIHRoZSBwcm9ibGVtIG9mIHNvbWUgZXhjZXB0aW9ucyBiZWluZyB0aHJvd24gYXQgc2h1dGRvd24gd2hlbiB0aGUKLSAgaW50ZXJwcmV0ZXIgaXMga2lsbGVkLiBQYXRjaCBieSBBZGFtIE9sc2VuLgotCi0tIElzc3VlICM3MDg0OiBGaXggYSAodmVyeSB1bmxpa2VseSkgY3Jhc2ggd2hlbiBwcmludGluZyBhIGxpc3QgZnJvbSBvbmUKLSAgdGhyZWFkLCBhbmQgbXV0YXRpbmcgaXQgZnJvbSBhbm90aGVyIG9uZS4gIFBhdGNoIGJ5IFNjb3R0IERpYWwuCi0KLS0gSXNzdWUgIzE3NDc4NTg6IEZpeCBsY2hvd24gJiBmY2hvd24gdG8gd29yayB3aXRoIGxhcmdlIHVpZCdzIGFuZCBnaWQncyBvbgotICA2NC1iaXQgcGxhdGZvcm1zLgotCistIElzc3VlICM4MDg0OiBQRVAgMzcwIG5vdyBjb25mb3JtcyB0byBzeXN0ZW0gY29udmVudGlvbnMgZm9yIGZyYW1ld29yayBidWlsZHMKKyAgb24gTWFjT1MgWC4gVGhhdCBpcywgYGBweXRob24gc2V0dXAucHkgaW5zdGFsbCAtLXVzZXJgYCB3aWxsIGluc3RhbGwgaW50bworICBgYH4vTGlicmFyeS9QeXRob24vMi43YGAgaW5zdGVhZCBvZiBgYH4vLmxvY2FsYGAuCiAKIExpYnJhcnkKIC0tLS0tLS0KIAorLSBJc3N1ZSAjODY4MTogTWFrZSB0aGUgemxpYiBtb2R1bGUncyBlcnJvciBtZXNzYWdlcyBtb3JlIGluZm9ybWF0aXZlIHdoZW4gdGhlCisgIHpsaWIgaXRzZWxmIGRvZXNuJ3QgZ2l2ZSBhbnkgZGV0YWlsZWQgZXhwbGFuYXRpb24uCisKKy0gSXNzdWUgIzg1NzE6IEZpeCBhbiBpbnRlcm5hbCBlcnJvciB3aGVuIGNvbXByZXNzaW5nIG9yIGRlY29tcHJlc3NpbmcgYSBjaHVuaworICBsYXJnZXIgdGhhbiAxR0Igd2l0aCB0aGUgemxpYiBtb2R1bGUncyBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3Igb2JqZWN0cy4KKworLSBJc3N1ZSAjODU3MzogYXN5bmNvcmUgYGBfc3RyZXJyb3IoKWBgIGZ1bmN0aW9uIG1pZ2h0IHRocm93IFZhbHVlRXJyb3IuCisKKy0gSXNzdWUgIzg0ODM6IGFzeW5jb3JlLmRpc3BhdGNoZXIncyBfX2dldGF0dHJfXyBtZXRob2QgcHJvZHVjZWQgY29uZnVzaW5nIGVycm9yCisgIG1lc3NhZ2VzIHdoZW4gYWNjZXNzaW5nIHVuZGVmaW5lZCBjbGFzcyBhdHRyaWJ1dGVzIGJlY2F1c2Ugb2YgdGhlIGNoZWFwCisgIGluaGVyaXRhbmNlIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0IG9iamVjdC4gIFRoZSBjaGVhcCBpbmhlcml0YW5jZSBoYXMgYmVlbgorICBkZXByZWNhdGVkLgorCistIElzc3VlICM0MjY1OiBgYHNodXRpbC5jb3B5ZmlsZSgpYGAgd2FzIGxlYWtpbmcgZmlsZSBkZXNjcmlwdG9ycyB3aGVuIGRpc2sKKyAgZmlsbHMuICBQYXRjaCBieSBUcmVzIFNlYXZlci4KKworLSBJc3N1ZSAjNzc1NTogVXNlIGFuIHVuZW5jdW1iZXJlZCBhdWRpbyBmaWxlIGZvciB0ZXN0cy4KKworLSBJc3N1ZSAjODYyMTogYGB1dWlkLnV1aWQ0KClgYCByZXR1cm5lZCB0aGUgc2FtZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW4gdGhlCisgIHBhcmVudCBhbmQgYW55IGNoaWxkcmVuIGNyZWF0ZWQgdXNpbmcgYGBvcy5mb3JrYGAgb24gTWFjIE9TIFggMTAuNi4KKworLSBJc3N1ZSAjODMxMzogYGB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KClgYCBlbmNvZGVzIHVuaWNvZGUgbWVzc2FnZSB0bworICBBU0NJSSB3aXRoIGJhY2tzbGFzaHJlcGxhY2UgZXJyb3IgaGFuZGxlciBpZiBgYHN0cih2YWx1ZSlgYCBmYWlsZWQuCisKKy0gSXNzdWUgIzg1Njc6IEZpeCBwcmVjZWRlbmNlIG9mIHNpZ25hbHMgaW4gRGVjaW1hbCBtb2R1bGU6IHdoZW4gYSBEZWNpbWFsCisgIG9wZXJhdGlvbiByYWlzZXMgbXVsdGlwbGUgc2lnbmFscyBhbmQgbW9yZSB0aGFuIG9uZSBvZiB0aG9zZSBzaWduYWxzIGlzCisgIHRyYXBwZWQsIHRoZSBzcGVjaWZpY2F0aW9uIGRldGVybWluZXMgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBzaWduYWxzIHNob3VsZCBiZQorICBoYW5kbGVkLiAgSW4gbWFueSBjYXNlcyB0aGlzIG9yZGVyIHdhc24ndCBiZWluZyBmb2xsb3dlZCwgbGVhZGluZyB0byB0aGUgd3JvbmcKKyAgUHl0aG9uIGV4Y2VwdGlvbiBiZWluZyByYWlzZWQuCisKKy0gSXNzdWUgIzc4NjU6IFRoZSBjbG9zZSgpIG1ldGhvZCBvZiA6bW9kOmBpb2Agb2JqZWN0cyBzaG91bGQgbm90IHN3YWxsb3cKKyAgZXhjZXB0aW9ucyByYWlzZWQgYnkgdGhlIGltcGxpY2l0IGZsdXNoKCkuICBBbHNvIGVuc3VyZSB0aGF0IGNhbGxpbmcgY2xvc2UoKQorICBzZXZlcmFsIHRpbWVzIGlzIHN1cHBvcnRlZC4gIFBhdGNoIGJ5IFBhc2NhbCBDaGFtYm9uLgorCistIElzc3VlICM4NTc2OiBsb2dnaW5nIHVwZGF0ZWQgdG8gcmVtb3ZlIHVzYWdlIG9mIGZpbmRfdW51c2VkX3BvcnQoKS4KKworLSBJc3N1ZSAjNDY4NzogRml4IGFjY3VyYWN5IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiBydW50aW1lcyBkaXNwbGF5ZWQgd2l0aAorICBnYy5ERUJVR19TVEFUUy4KKworLSBJc3N1ZSAjODM1NDogVGhlIHNpZ2ludGVycnVwdCBzZXR0aW5nIGlzIG5vdyBwcmVzZXJ2ZWQgZm9yIGFsbCBzaWduYWxzLCBub3QKKyAganVzdCBTSUdDSExELgorCistIElzc3VlICM3MTkyOiBgYHdlYmJyb3dzZXIuZ2V0KCJmaXJlZm94IilgYCBub3cgd29ya3Mgb24gTWFjIE9TIFgsIGFzIGRvZXMKKyAgYGB3ZWJicm93c2VyLmdldCgic2FmYXJpIilgYC4KKworLSBJc3N1ZSAjODU3NzogYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25faW5jKClgYCBub3cgbWFrZXMgYSBkaWZmZXJlbmNlCisgIGJldHdlZW4gdGhlIGJ1aWxkIGRpciBhbmQgdGhlIHNvdXJjZSBkaXIgd2hlbiBsb29raW5nIGZvciAicHl0aG9uLmgiIG9yCisgICJJbmNsdWRlIi4KKworLSBJc3N1ZSAjODQ2NDogdGFyZmlsZSBubyBsb25nZXIgY3JlYXRlcyBmaWxlcyB3aXRoIGV4ZWN1dGUgcGVybWlzc2lvbnMgc2V0IHdoZW4KKyAgbW9kZT0id3wiIGlzIHVzZWQuCisKKy0gSXNzdWUgIzc4MzQ6IEZpeCBjb25uZWN0KCkgb2YgQmx1ZXRvb3RoIEwyQ0FQIHNvY2tldHMgd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YKKyAgdGhlIExpbnV4IGtlcm5lbC4gIFBhdGNoIGJ5IFlhbml2IEFrbmluLgorCistIElzc3VlICM2MzEyOiBGaXggaHR0cCBIRUFEIHJlcXVlc3Qgd2hlbiB0aGUgdHJhbnNmZXIgZW5jb2RpbmcgaXMgY2h1bmtlZC4gIEl0CisgIHNob3VsZCBjb3JyZWN0bHkgcmV0dXJuIGFuIGVtcHR5IHJlc3BvbnNlIG5vdy4KKworLSBJc3N1ZSAjNzQ5MDogVG8gZmFjaWxpdGF0ZSBzaGFyaW5nIG9mIGRvY3Rlc3RzIGJldHdlZW4gMi54IGFuZCAzLnggdGVzdAorICBzdWl0ZXMsIHRoZSBgYElHTk9SRV9FWENFUFRJT05fREVUQUlMYGAgZGlyZWN0aXZlIG5vdyBhbHNvIGlnbm9yZXMgdGhlIG1vZHVsZQorICBsb2NhdGlvbiBvZiB0aGUgcmFpc2VkIGV4Y2VwdGlvbi4gIEJhc2VkIG9uIGluaXRpYWwgcGF0Y2ggYnkgTGVubmFydCBSZWdlYnJvLgorCistIElzc3VlICM4MDg2OiBJbiA6ZnVuYzpgc3NsLkRFUl9jZXJ0X3RvX1BFTV9jZXJ0KClgLCBmaXggbWlzc2luZyBuZXdsaW5lIGJlZm9yZQorICB0aGUgY2VydGlmaWNhdGUgZm9vdGVyLiAgUGF0Y2ggYnkgS3lsZSBWYW5kZXJCZWVrLgorCistIElzc3VlICM4NTQ2OiBSZWplY3QgTm9uZSBnaXZlbiBhcyB0aGUgYnVmZmVyaW5nIGFyZ3VtZW50IHRvIGBgX3B5aW8ub3BlbigpYGAuCisKKy0gSXNzdWUgIzg1NDk6IEZpeCBjb21waWxpbmcgdGhlIF9zc2wgZXh0ZW5zaW9uIHVuZGVyIEFJWC4gIFBhdGNoIGJ5IFNyaWRoYXIKKyAgUmF0bmFrdW1hci4KKworLSBJc3N1ZSAjNjY1NjogRml4IGxvY2FsZS5mb3JtYXRfc3RyaW5nIHRvIGhhbmRsZSBlc2NhcGVkIHBlcmNlbnRzIGFuZCBtYXBwaW5ncy4KKworLSBJc3N1ZSAjMjMwMjogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2h1dGRvd24sIHdoZXJlCisgIHRoZSBtZXRob2QgY291bGQgYmxvY2sgaW5kZWZpbml0ZWx5IGlmIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgZXZlbnQgbG9vcAorICBzdGFydGVkIHJ1bm5pbmcuICBUaGlzIGFsc28gZml4ZXMgdGhlIG9jY2FzaW9uYWwgZnJlZXplcyB3aXRuZXNzZWQgaW4KKyAgdGVzdF9odHRwc2VydmVycy4KKworLSBJc3N1ZSAjNTEwMzogU1NMIGhhbmRzaGFrZSB3b3VsZCBpZ25vcmUgdGhlIHNvY2tldCB0aW1lb3V0IGFuZCBibG9jaworICBpbmRlZmluaXRlbHkgaWYgdGhlIG90aGVyIGVuZCBkaWRuJ3QgcmVzcG9uZC4KKworLSBUaGUgZG9faGFuZHNoYWtlKCkgbWV0aG9kIG9mIFNTTCBvYmplY3RzIG5vdyBhZGp1c3RzIHRoZSBibG9ja2luZyBtb2RlIG9mIHRoZQorICBTU0wgc3RydWN0dXJlIGlmIG5lY2Vzc2FyeSAoYXMgb3RoZXIgbWV0aG9kcyBhbHJlYWR5IGRvKS4KKworLSBJc3N1ZSAjNzUwNzogUXVvdGUgIiEiIGluIHBpcGVzLnF1b3RlKCk7IGl0IGlzIHNwZWNpYWwgdG8gc29tZSBzaGVsbHMuCisKKy0gSXNzdWUgIzUyMzg6IENhbGxpbmcgbWFrZWZpbGUoKSBvbiBhbiBTU0wgb2JqZWN0IHdvdWxkIHByZXZlbnQgdGhlIHVuZGVybHlpbmcKKyAgc29ja2V0IGZyb20gYmVpbmcgY2xvc2VkIHVudGlsIGFsbCBvYmplY3RzIGdldCB0cnVlbHkgZGVzdHJveWVkLgorCistIElzc3VlICM3OTQzOiBGaXggY2lyY3VsYXIgcmVmZXJlbmNlIGNyZWF0ZWQgd2hlbiBpbnN0YW50aWF0aW5nIGFuIFNTTCBzb2NrZXQuCisgIEluaXRpYWwgcGF0Y2ggYnkgUMOpdGVyIFN6YWLDsy4KKworLSBJc3N1ZSAjODQ1MTogU3lzbG9nIG1vZHVsZSBub3cgdXNlcyBiYXNlbmFtZShzeXMuYXJndlswXSkgaW5zdGVhZCBvZiB0aGUKKyAgc3RyaW5nICJweXRob24iIGFzIHRoZSAqaWRlbnQqLiAgb3BlbmxvZygpIGFyZ3VtZW50cyBhcmUgYWxsIG9wdGlvbmFsIGFuZAorICBrZXl3b3Jkcy4KKworLSBJc3N1ZSAjODEwODogRml4IHRoZSB1bndyYXAoKSBtZXRob2Qgb2YgU1NMIG9iamVjdHMgd2hlbiB0aGUgc29ja2V0IGhhcyBhCisgIG5vbi1pbmZpbml0ZSB0aW1lb3V0LiAgQWxzbyBtYWtlIHRoYXQgbWV0aG9kIGZyaWVuZGxpZXIgd2l0aCBhcHBsaWNhdGlvbnMKKyAgd2FudGluZyB0byBjb250aW51ZSB1c2luZyB0aGUgc29ja2V0IGluIGNsZWFyLXRleHQgbW9kZSwgYnkgZGlzYWJsaW5nCisgIE9wZW5TU0wncyBpbnRlcm5hbCByZWFkYWhlYWQuICBUaGFua3MgdG8gRGFycnlsIE1pbGVzIGZvciBndWlkYW5jZS4KKworLSBJc3N1ZSAjODQ4NDogTG9hZCBhbGwgY2lwaGVycyBhbmQgZGlnZXN0IGFsZ29yaXRobXMgd2hlbiBpbml0aWFsaXppbmcgdGhlIF9zc2wKKyAgZXh0ZW5zaW9uLCBzdWNoIHRoYXQgdmVyaWZpY2F0aW9uIG9mIHNvbWUgU1NMIGNlcnRpZmljYXRlcyBkb2Vzbid0IGZhaWwKKyAgYmVjYXVzZSBvZiBhbiAidW5rbm93biBhbGdvcml0aG0iLgorCistIElzc3VlICM4NDM3OiBGaXggdGVzdF9nZGIgZmFpbHVyZXMsIHBhdGNoIHdyaXR0ZW4gYnkgRGF2ZSBNYWxjb2xtCisKKy0gSXNzdWUgIzQ4MTQ6IFRoZSB0aW1lb3V0IHBhcmFtZXRlciBpcyBub3cgYXBwbGllZCBhbHNvIGZvciBjb25uZWN0aW9ucworICByZXN1bHRpbmcgZnJvbSBQT1JUL0VQUlQgY29tbWFuZHMuCisKKy0gSXNzdWUgIzg0NjM6IEFkZCBtaXNzaW5nIHJlZmVyZW5jZSB0byBienRhciBpbiBzaHV0aWwncyBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICM4NDM4OiBSZW1vdmUgcmVmZXJlbmNlIHRvIHRoZSBtaXNzaW5nICJzdXJyb2dhdGVlc2NhcGUiIGVuY29kaW5nIGVycm9yCisgIGhhbmRsZXIgZnJvbSB0aGUgbmV3IElPIGxpYnJhcnkuCisKKy0gSXNzdWUgIzM4MTc6IGZ0cGxpYi5GVFAuYWJvcnQoKSBtZXRob2Qgbm93IGNvbnNpZGVycyAyMjUgYSB2YWxpZCByZXNwb25zZSBjb2RlCisgIGFzIHN0YXRlZCBpbiBSRkMtOTU5IGF0IGNoYXB0ZXIgNS40LgorCistIElzc3VlICM4Mjc5OiBGaXggdGVzdF9nZGIgZmFpbHVyZXMuCisKKy0gSXNzdWUgIzgzMjI6IEFkZCBhICpjaXBoZXJzKiBhcmd1bWVudCB0byBTU0wgc29ja2V0cywgc28gYXMgdG8gY2hhbmdlIHRoZQorICBhdmFpbGFibGUgY2lwaGVyIGxpc3QuICBIZWxwcyBmaXggdGVzdF9zc2wgd2l0aCBPcGVuU1NMIDEuMC4wLgorCistIElzc3VlICMyOTg3OiBSRkMgMjczMiBzdXBwb3J0IGZvciB1cmxwYXJzZSAoSVB2NiBhZGRyZXNzZXMpLiAgUGF0Y2ggYnkgVG9ueQorICBMb2NrZSBhbmQgSGFucyBVbHJpY2ggTmllZGVybWFubi4KKworLSBJc3N1ZSAjNzU4NTogZGlmZmxpYiBjb250ZXh0IGFuZCB1bmlmaWVkIGRpZmZzIG5vdyBwbGFjZSBhIHRhYiBiZXR3ZWVuCisgIGZpbGVuYW1lIGFuZCBkYXRlLCBjb25mb3JtaW5nIHRvIHRoZSAnc3RhbmRhcmRzJyB0aGV5IHdlcmUgb3JpZ2luYWxseSBkZXNpZ25lZAorICB0byBmb2xsb3cuICBUaGlzIGltcHJvdmVzIGNvbXBhdGliaWxpdHkgd2l0aCBwYXRjaCB0b29scy4KKworLSBJc3N1ZSAjNzQ3MjogRml4ZWQgdHlwbyBpbiBlbWFpbC5lbmNvZGVycyBtb2R1bGU7IG1lc3NhZ2VzIHVzaW5nIElTTy0yMDIyCisgIGNoYXJhY3RlciBzZXRzIHdpbGwgbm93IGNvbnNpc3RlbnRseSB1c2UgYSBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIG9mIDdiaXQKKyAgcmF0aGVyIHRoYW4gc29tZXRpbWVzIGJlaW5nIG1hcmtlZCBhcyA4Yml0LgorCistIElzc3VlICM4MzMwOiBGaXggZXhwZWN0ZWQgb3V0cHV0IGluIHRlc3RfZ2RiLgorCistIElzc3VlICM4Mzc0OiBVcGRhdGUgdGhlIGludGVybmFsIGFsaWFzIHRhYmxlIGluIHRoZSA6bW9kOmBsb2NhbGVgIG1vZHVsZSB0bworICBjb3ZlciByZWNlbnQgbG9jYWxlIGNoYW5nZXMgYW5kIGFkZGl0aW9ucy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzg2NDQ6IEltcHJvdmVkIGFjY3VyYWN5IG9mIGBgdGltZWRlbHRhLnRvdGFsX3NlY29uZHMoKWBgLgorCistIFVzZSBDbGFuZyAyLjcncyBzdGF0aWMgYW5hbHl6ZXIgdG8gZmluZCBwbGFjZXMgdG8gY2xlYW4gdXAgc29tZSBjb2RlLgorCistIEJ1aWxkIHRoZSBvc3NhdWRpbyBleHRlbnNpb24gb24gR05VL2tGcmVlQlNELgorCistIE9uIFdpbmRvd3MsIGN0eXBlcyBkb2VzIG5vIGxvbmdlciBjaGVjayB0aGUgc3RhY2sgYmVmb3JlIGFuZCBhZnRlciBjYWxsaW5nIGEKKyAgZm9yZWlnbiBmdW5jdGlvbi4gIFRoaXMgYWxsb3dzIHRvIHVzZSB0aGUgdW5tb2RpZmllZCBsaWJmZmkgbGlicmFyeS4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzg2NzI6IEFkZCBhIHpsaWIgdGVzdCBlbnN1cmluZyB0aGF0IGFuIGluY29tcGxldGUgc3RyZWFtIGNhbiBiZSBoYW5kbGVkCisgIGJ5IGEgZGVjb21wcmVzc29yIG9iamVjdCB3aXRob3V0IGVycm9ycyAoaXQgcmV0dXJucyBpbmNvbXBsZXRlIHVuY29tcHJlc3NlZAorICBkYXRhKS4KKworLSBJc3N1ZSAjODQ5MDogYXN5bmNvcmUgbm93IGhhcyBhIG1vcmUgc29saWQgdGVzdCBzdWl0ZSB3aGljaCBhY3R1YWxseSB0ZXN0cyBpdHMKKyAgQVBJLgorCistIElzc3VlICM4NTc2OiBSZW1vdmUgdXNlIG9mIGZpbmRfdW51c2VkX3BvcnQoKSBpbiB0ZXN0X3NtdHBsaWIgYW5kCisgIHRlc3RfbXVsdGlwcm9jZXNzaW5nLiAgUGF0Y2ggYnkgUGF1bCBNb29yZS4KKworLSBJc3N1ZSAjNzQ0OTogRml4IG1hbnkgdGVzdHMgdG8gc3VwcG9ydCBQeXRob24gY29tcGlsZWQgd2l0aG91dCB0aHJlYWQgc3VwcG9ydC4KKyAgUGF0Y2hlcyB3cml0dGVuIGJ5IEplcnJ5IFNldXR0ZXIuCisKKy0gSXNzdWUgIzgxMDg6IHRlc3RfZnRwbGliJ3Mgbm9uLWJsb2NraW5nIFNTTCBzZXJ2ZXIgbm93IGhhcyBwcm9wZXIgaGFuZGxpbmcgb2YKKyAgU1NMIHNodXRkb3ducy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzg2MjU6IFR1cm4gb2ZmIG9wdGltaXphdGlvbiBpbiBgYC0td2l0aC1weWRlYnVnYGAgYnVpbGRzIHdpdGggZ2NjLgorICAoT3B0aW1pemF0aW9uIHdhcyB1bmludGVudGlvbmFsbHkgdHVybmVkIG9uIGluIGdjYyAtLXdpdGgtcHlkZWJ1ZyBidWlsZHMgaW4KKyAgMi43IGJldGExIGFzIGEgcmVzdWx0IG9mIHRoZSBpc3N1ZSAjMTYyODQ4NCBmaXgsIGNvbWJpbmVkIHdpdGggYXV0b2NvbmYncworICBzdHJhbmdlIGNob2ljZSBvZiBkZWZhdWx0IENGTEFHUyBwcm9kdWNlZCBieSBBQ19QUk9HX0NDIGZvciBnY2MuKQorCistIElzc3VlICM4NTA5OiBGaXggcXVvdGluZyBpbiBoZWxwIHN0cmluZ3MgYW5kIGNvZGUgc25pcHBldHMgaW4gY29uZmlndXJlLmluLgorCistIElzc3VlICMzNjQ2OiBJdCBpcyBub3cgZWFzaWx5IHBvc3NpYmxlIHRvIGluc3RhbGwgYSBQeXRob24gZnJhbWV3b3JrIGludG8geW91cgorICBob21lIGRpcmVjdG9yeSBvbiBNYWMgT1MgWCwgc2VlIE1hYy9SRUFETUUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKy0gSXNzdWUgIzg1MTA6IFVwZGF0ZSB0byBhdXRvY29uZiAyLjY1LgorCitNaXNjCistLS0tCisKKy0gVXBkYXRlIHRoZSBWaW0gc3ludGF4IGhpZ2hsaWdodCBmaWxlLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNyBiZXRhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyMDEwLTA0LTEwKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjNzMwMTogQWRkIGVudmlyb25tZW50IHZhcmlhYmxlICRQWVRIT05XQVJOSU5HUy4KKworLSBJc3N1ZSAjODMyOTogRG9uJ3QgcmV0dXJuIHRoZSBzYW1lIGxpc3RzIGZyb20gc2VsZWN0LnNlbGVjdCB3aGVuIG5vIGZkcyBhcmUKKyAgY2hhbmdlZC4KKworLSBJc3N1ZSAjODI1OTogYGAxTCA8PCAoMioqMzEpYGAgbm8gbG9uZ2VyIHByb2R1Y2VzIGFuICdvdXRyYWdlb3VzIHNoaWZ0IGVycm9yJworICBvbiA2NC1iaXQgbWFjaGluZXMuICBUaGUgc2hpZnQgY291bnQgZm9yIGVpdGhlciBsZWZ0IG9yIHJpZ2h0IHNoaWZ0IGlzCisgIHBlcm1pdHRlZCB0byBiZSB1cCB0byBzeXMubWF4c2l6ZS4KKworLSBFbnN1cmUgdGhhdCB0b2tlbml6YXRpb24gb2YgaWRlbnRpZmllcnMgaXMgbm90IGFmZmVjdGVkIGJ5IGxvY2FsZS4KKworLSBJc3N1ZSAjMTIyMjU4NTogQWRkZWQgTERDWFhTSEFSRUQgZm9yIEMrKyBzdXBwb3J0LiAgUGF0Y2ggYnkgQXJmcmV2ZXIuCisKKy0gUmFpc2UgYSBUeXBlRXJyb3Igd2hlbiB0cnlpbmcgdG8gZGVsZXRlIGEgVF9TVFJJTkdfSU5QTEFDRSBzdHJ1Y3QgbWVtYmVyLgorCistIElzc3VlICM3OTk0OiBJc3N1ZSBhIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgaWYgb2JqZWN0Ll9fZm9ybWF0X18gaXMgY2FsbGVkCisgIHdpdGggYSBub24tZW1wdHkgZm9ybWF0IHN0cmluZy4gVGhpcyBpcyBhbiBlZmZvcnQgdG8gZnV0dXJlLXByb29mIHVzZXIKKyAgY29kZS4gSWYgYSBkZXJpdmVkIGNsYXNzIGRvZXMgbm90IGN1cnJlbnRseSBpbXBsZW1lbnQgX19mb3JtYXRfXyBidXQgbGF0ZXIKKyAgYWRkcyBpdHMgb3duIF9fZm9ybWF0X18sIGl0IHdvdWxkIG1vc3QgbGlrZWx5IGJyZWFrIHVzZXIgY29kZSB0aGF0IGhhZAorICBzdXBwbGllZCBhIGZvcm1hdCBzdHJpbmcuIFRoaXMgd2lsbCBiZSBjaGFuZ2VkIHRvIGEgRGVwcmVjYXRpb25XYXJuaW5nIGluCisgIFB5dGhvbiAzLjMgYW5kIGl0IHdpbGwgYmUgYW4gZXJyb3IgaW4gUHl0aG9uIDMuNC4KKworLSBJc3N1ZSAjODI2ODogT2xkLXN0eWxlIGNsYXNzZXMgKG5vdCBqdXN0IGluc3RhbmNlcykgbm93IHN1cHBvcnQgd2VhaworICByZWZlcmVuY2VzLgorCistIElzc3VlICM4MjExOiBTYXZlL3Jlc3RvcmUgQ0ZMQUdTIGFyb3VuZCBBQ19QUk9HX0NDIGluIGNvbmZpZ3VyZS5pbiwgaW4gY2FzZSBpdAorICBpcyBzZXQuCisKKy0gSXNzdWUgIzE1ODM4NjM6IEFuIHVuaWNvZGUgc3ViY2xhc3MgY2FuIG5vdyBvdmVycmlkZSB0aGUgX191bmljb2RlX18gbWV0aG9kCisKKy0gSXNzdWUgIzY0NzQ6IE1ha2UgZXJyb3IgbWVzc2FnZSBmcm9tIHBhc3NpbmcgYW4gaW5hZGVxdWF0ZSBudW1iZXIgb2Yga2V5d29yZAorICBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiBjb3JyZWN0LgorCistIElzc3VlICM4MTY0OiBEb24ndCBhbGxvdyBsYW1iZGEgZnVuY3Rpb25zIHRvIGhhdmUgYSBkb2NzdHJpbmcuCisKKy0gSXNzdWUgIzMxMzc6IERvbid0IGlnbm9yZSBlcnJvcnMgYXQgc3RhcnR1cCwgZXNwZWNpYWxseSBhIGtleWJvYXJkIGludGVycnVwdAorICAoU0lHSU5UKS4gIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBpbXBvcnRpbmcgdGhlIHNpdGUgbW9kdWxlLCB0aGUgZXJyb3IgaXMKKyAgcHJpbnRlZCBhbmQgUHl0aG9uIGV4aXRzLiAgSW5pdGlhbGl6ZSB0aGUgR0lMIGJlZm9yZSBpbXBvcnRpbmcgdGhlIHNpdGUKKyAgbW9kdWxlLgorCistIENvZGUgb2JqZWN0cyBub3cgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjNTI3NzogRml4IHF1b3RlIGNvdW50aW5nIHdoZW4gcGFyc2luZyBSRkMgMjIzMSBlbmNvZGVkIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzgzMjE6IEdpdmUgYWNjZXNzIHRvIE9wZW5TU0wgdmVyc2lvbiBudW1iZXJzIGZyb20gdGhlIGBzc2xgIG1vZHVsZSwKKyAgdXNpbmcgdGhlIG5ldyBhdHRyaWJ1dGVzIGBzc2wuT1BFTlNTTF9WRVJTSU9OYCwgYHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GT2AgYW5kCisgIGBzc2wuT1BFTlNTTF9WRVJTSU9OX05VTUJFUmAuCisKKy0gSXNzdWUgIzgzMTA6IEFsbG93IGRpcyB0byBleGFtaW5lIG5ldyBzdHlsZSBjbGFzc2VzLgorCistIElzc3VlICM4MjU3OiBUaGUgRGVjaW1hbCBjb25zdHJ1Y3Qgbm93IGFjY2VwdHMgYSBmbG9hdCBpbnN0YW5jZSBkaXJlY3RseSwKKyAgY29udmVydGluZyB0aGF0IGZsb2F0IHRvIGEgRGVjaW1hbCBvZiBlcXVhbCB2YWx1ZToKKworICAgICA+Pj4gRGVjaW1hbCgxLjEpCisgICAgIERlY2ltYWwoJzEuMTAwMDAwMDAwMDAwMDAwMDg4ODE3ODQxOTcwMDEyNTIzMjMzODkwNTMzNDQ3MjY1NjI1JykKKworLSBjb2xsZWN0aW9ucy5Db3VudGVyKCkgbm93IHN1cHBvcnRzIGEgc3VidHJhY3QoKSBtZXRob2QuCisKKy0gVGhlIGZ1bmN0b29scyBtb2R1bGUgbm93IGhhcyBhIHRvdGFsX29yZGVyaW5nKCkgY2xhc3MgZGVjb3JhdG9yIHRvIHNpbXBsaWZ5CisgIHRoZSBzcGVjaWZpY2F0aW9uIG9mIHJpY2ggY29tcGFyaXNvbnMuCisKKy0gVGhlIGZ1bmN0b29scyBtb2R1bGUgYWxzbyBhZGRzIGNtcF90b19rZXkoKSBhcyBhIHRvb2wgdG8gdHJhbnNpdGlvbiBvbGQtc3R5bGUKKyAgY29tcGFyaXNvbiBmdW5jdGlvbnMgdG8gbmV3LXN0eWxlIGtleS1mdW5jdGlvbnMuCisKKy0gSXNzdWUgIzgyOTQ6IFRoZSBGcmFjdGlvbiBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBEZWNpbWFsIGFuZCBmbG9hdCBpbnN0YW5jZXMKKyAgZGlyZWN0bHkuCisKKy0gSXNzdWUgIzcyNzk6IENvbXBhcmlzb25zIGludm9sdmluZyBhIERlY2ltYWwgc2lnbmFsaW5nIE5hTiBub3cgc2lnbmFsCisgIEludmFsaWRPcGVyYXRpb24gaW5zdGVhZCBvZiByZXR1cm5pbmcgRmFsc2UuICAoQ29tcGFyaXNvbnMgaW52b2x2aW5nIGEgcXVpZXQKKyAgTmFOIGFyZSB1bmNoYW5nZWQuKSAgQWxzbywgRGVjaW1hbCBxdWlldCBOYU5zIGFyZSBub3cgaGFzaGFibGU7IERlY2ltYWwKKyAgc2lnbmFsaW5nIE5hTnMgcmVtYWluIHVuaGFzaGFibGUuCisKKy0gSXNzdWUgIzI1MzE6IENvbXBhcmlzb24gb3BlcmF0aW9ucyBiZXR3ZWVuIGZsb2F0cyBhbmQgRGVjaW1hbCBpbnN0YW5jZXMgbm93CisgIHJldHVybiBhIHJlc3VsdCBiYXNlZCBvbiB0aGUgbnVtZXJpYyB2YWx1ZXMgb2YgdGhlIG9wZXJhbmRzOyBwcmV2aW91c2x5IHRoZXkKKyAgcmV0dXJuZWQgYW4gYXJiaXRyYXJ5IHJlc3VsdCBiYXNlZCBvbiB0aGUgcmVsYXRpdmUgb3JkZXJpbmcgb2YgaWQoZmxvYXQpIGFuZAorICBpZChEZWNpbWFsKS4KKworLSBJc3N1ZSAjODIzMzogV2hlbiBydW4gYXMgYSBzY3JpcHQsIHB5X2NvbXBpbGUucHkgb3B0aW9uYWxseSB0YWtlcyBhIHNpbmdsZQorICBhcmd1bWVudCBgLWAgd2hpY2ggdGVsbHMgaXQgdG8gcmVhZCBmaWxlcyB0byBjb21waWxlIGZyb20gc3RkaW4uICBFYWNoIGxpbmUgaXMKKyAgcmVhZCBvbiBkZW1hbmQgYW5kIHRoZSBuYW1lZCBmaWxlIGlzIGNvbXBpbGVkIGltbWVkaWF0ZWx5LiAgKE9yaWdpbmFsIHBhdGNoIGJ5CisgIFBpb3RyIE/FvGFyb3dza2kpLgorCistIElzc3VlICMzMTM1OiBBZGQgYGBpbnNwZWN0LmdldGNhbGxhcmdzKClgYCwgd2hpY2ggYmluZHMgYXJndW1lbnRzIHRvIGEKKyAgZnVuY3Rpb24gbGlrZSBhIG5vcm1hbCBjYWxsLgorCistIEJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlOiBVbmljb2RlIGNvZGVwb2ludHMgbGluZSB0YWJ1bGF0aW9uICgweDBCKSBhbmQKKyAgZm9ybSBmZWVkICgweDBDKSBhcmUgbm93IGNvbnNpZGVyZWQgbGluZWJyZWFrcywgYXMgc3BlY2lmaWVkIGluIFVuaWNvZGUKKyAgU3RhbmRhcmQgQW5uZXggIzE0LiAgU2VlIGlzc3VlICM3NjQzLiAgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMTQvCisKKy0gQ29tcGFyaXNvbnMgdXNpbmcgb25lIG9mIDwsIDw9LCA+LCA+PSBiZXR3ZWVuIGEgY29tcGxleCBpbnN0YW5jZSBhbmQgYQorICBGcmFjdGlvbnMgaW5zdGFuY2Ugbm93IHJhaXNlIFR5cGVFcnJvciBpbnN0ZWFkIG9mIHJldHVybmluZyBUcnVlL0ZhbHNlLiAgVGhpcworICBtYWtlcyBGcmFjdGlvbiA8PT4gY29tcGxleCBjb21wYXJpc29ucyBjb25zaXN0ZW50IHdpdGggaW50IDw9PiBjb21wbGV4LCBmbG9hdAorICA8PT4gY29tcGxleCwgYW5kIGNvbXBsZXggPD0+IGNvbXBsZXggY29tcGFyaXNvbnMuCisKKy0gQWRkaXRpb24gb2YgYGBXZWFrU2V0YGAgdG8gdGhlIGBgd2Vha3JlZmBgIG1vZHVsZS4KKworLSBsb2dnaW5nOiBBZGRlZCBMT0dfRlRQIHRvIFN5c0xvZ0hhbmRsZXIgYW5kIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjODIwNTogUmVtb3ZlIHRoZSAiTW9kdWxlcyIgZGlyZWN0b3J5IGZyb20gc3lzLnBhdGggd2hlbiBQeXRob24gaXMKKyAgcnVubmluZyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkgKFBPU0lYIG9ubHkpLgorCistIElzc3VlICM3NjY3OiBGaXggZG9jdGVzdCBmYWlsdXJlcyB3aXRoIG5vbi1BU0NJSSBwYXRocy4KKworLSBJc3N1ZSAjNzUxMjogc2h1dGlsLmNvcHlzdGF0KCkgY291bGQgcmFpc2UgYW4gT1NFcnJvciB3aGVuIHRoZSBmaWxlc3lzdGVtCisgIGRpZG4ndCBzdXBwb3J0IGNoZmxhZ3MoKSAoZm9yIGV4YW1wbGUgWkZTIHVuZGVyIEZyZWVCU0QpLiAgVGhlIGVycm9yIGlzIG5vdworICBzaWxlbmNlZC4KKworLSBJc3N1ZSAjNzcwMzogY3R5cGVzIHN1cHBvcnRzIGJvdGggYnVmZmVyKCkgYW5kIG1lbW9yeXZpZXcoKS4gIFRoZSBmb3JtZXIgaXMKKyAgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjNzg2MDogcGxhdGZvcm0udW5hbWUgbm93IHJlcG9ydHMgdGhlIGNvcnJlY3QgJ21hY2hpbmUnIHR5cGUgd2hlbiBQeXRob24KKyAgaXMgcnVubmluZyBpbiBXT1c2NCBtb2RlIG9uIDY0IGJpdCBXaW5kb3dzLgorCistIGxvZ2dpbmc6IEFkZGVkIGdldENoaWxkIHV0aWxpdHkgbWV0aG9kIHRvIExvZ2dlciBhbmQgYWRkZWQgaXNFbmFibGVkRm9yIG1ldGhvZAorICB0byBMb2dnZXJBZGFwdGVyLgorCistIElzc3VlICM4MjAxOiBsb2dnaW5nOiBIYW5kbGUgc2l0dWF0aW9uIG9mIG5vbi1BU0NJSSBhbmQgVW5pY29kZSBsb2dnZXIgbmFtZXMKKyAgZXhpc3RpbmcgYXQgdGhlIHNhbWUgdGltZSwgY2F1c2luZyBhIFVuaWNvZGUgZXJyb3Igd2hlbiBjb25maWd1cmF0aW9uIGNvZGUKKyAgYXR0ZW1wdGVkIHRvIHNvcnQgdGhlIGV4aXN0aW5nIGxvZ2dlcnMuCisKKy0gSXNzdWUgIzgyMDA6IGxvZ2dpbmc6IEhhbmRsZSBlcnJvcnMgd2hlbiBtdWx0aXByb2Nlc3NpbmcgaXMgbm90IGZ1bGx5IGxvYWRlZAorICB3aGVuIGxvZ2dpbmcgb2NjdXJzLgorCistIElzc3VlICMzODkwLCAjODIyMjogRml4IHJlY3YoKSBhbmQgcmVjdl9pbnRvKCkgb24gbm9uLWJsb2NraW5nIFNTTCBzb2NrZXRzLgorICBBbHNvLCBlbmFibGUgdGhlIFNTTF9NT0RFX0FVVE9fUkVUUlkgZmxhZyBvbiBTU0wgc29ja2V0cywgc28gdGhhdCBibG9ja2luZworICByZWFkcyBhbmQgd3JpdGVzIGFyZSBhbHdheXMgcmV0cmllZCBieSBPcGVuU1NMIGl0c2VsZi4KKworLSBJc3N1ZSAjODE3OTogRml4IG1hY3BhdGgucmVhbHBhdGgoKSBvbiBhIG5vbi1leGlzdGluZyBwYXRoLgorCistIElzc3VlICM4MDI0OiBVcGRhdGUgdGhlIFVuaWNvZGUgZGF0YWJhc2UgdG8gNS4yLgorCistIElzc3VlICM4MTA0OiBzb2NrZXQucmVjdl9pbnRvKCkgYW5kIHNvY2tldC5yZWN2ZnJvbV9pbnRvKCkgbm93IHN1cHBvcnQgd3JpdGluZworICBpbnRvIG9iamVjdHMgc3VwcG9ydGluZyB0aGUgbmV3IGJ1ZmZlciBBUEksIGZvciBleGFtcGxlIGJ5dGVhcnJheXMgb3IKKyAgbWVtb3J5dmlld3MuCisKKy0gSXNzdWUgIzQ5NjE6IEluY29uc2lzdGVudC93cm9uZyByZXN1bHQgb2YgYXNreWVzbm8gZnVuY3Rpb24gaW4gdGtNZXNzYWdlQm94CisgIHdpdGggVGNsL1RrLTguNS4KKworLSBJc3N1ZSAjODE0MDogRXh0ZW5kIGNvbXBpbGVhbGwgdG8gY29tcGlsZSBzaW5nbGUgZmlsZXMuICBBZGQgLWkgb3B0aW9uLgorCistIElzc3VlICM3MzU2OiBjdHlwZXMudXRpbDogTWFrZSBwYXJzaW5nIG9mIGxkY29uZmlnIG91dHB1dCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgbG9jYWxlLgorCistIElzc3VlICM3Nzc0OiBTZXQgc3lzLmV4ZWN1dGFibGUgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIGBgYXJndlswXWBgIGhhcyBiZWVuIHNldAorICB0byBhbiBub24gZXhpc3RlbnQgcHJvZ3JhbSBuYW1lIGFuZCBQeXRob24gaXMgdW5hYmxlIHRvIHJldHJpZXZlIHRoZSByZWFsCisgIHByb2dyYW0gbmFtZS4KKworLSBJc3N1ZSAjODExNzogbG9nZ2luZzogSW1wcm92ZWQgYWxnb3JpdGhtIGZvciBjb21wdXRpbmcgaW5pdGlhbCByb2xsb3ZlciB0aW1lCisgIGZvciBgYFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmBgIGJ5IHVzaW5nIHRoZSBtb2RpZmljYXRpb24gdGltZSBvZiBhbiBleGlzdGluZworICBsb2cgZmlsZSB0byBjb21wdXRlIHRoZSBuZXh0IHJvbGxvdmVyIHRpbWUuICBJZiB0aGUgbG9nIGZpbGUgZG9lcyBub3QgZXhpc3QsCisgIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBjb21wdXRhdGlvbi4KKworLSBJc3N1ZSAjNjQ3MjogVGhlIGBgeG1sLmV0cmVlYGAgcGFja2FnZSBpcyB1cGRhdGVkIHRvIEVsZW1lbnRUcmVlIDEuMy4gIFRoZQorICBjRWxlbWVudFRyZWUgbW9kdWxlIGlzIHVwZGF0ZWQgdG9vLgorCistIElzc3VlICM3ODgwOiBGaXggc3lzY29uZmlnIHdoZW4gdGhlIHB5dGhvbiBleGVjdXRhYmxlIGlzIGEgc3ltYm9saWMgbGluay4KKworLSBJc3N1ZSAjNzYyNDogRml4IGBgaXNpbnN0YW5jZShmb28oKSwgY29sbGVjdGlvbnMuQ2FsbGFibGUpYGAgZm9yIG9sZC1zdHlsZQorICBjbGFzc2VzLgorCistIElzc3VlICM3MTQzOiBlbWFpbDogYGBnZXRfcGF5bG9hZCgpYGAgdXNlZCB0byBzdHJpcCBhbnkgdHJhaWxpbmcgbmV3bGluZSBmcm9tCisgIGEgYmFzZTY0IHRyYW5zZmVyLWVuY29kZWQgcGF5bG9hZCAqYWZ0ZXIqIGRlY29kaW5nIGl0OyBpdCBubyBsb25nZXIgZG9lcy4KKyAgVGhpcyBpcyBhIGJlaGF2aW9yIGNoYW5nZSwgc28gZW1haWwncyBtaW5vciB2ZXJzaW9uIG51bWJlciBpcyBub3cgYnVtcGVkLCB0bworICB2ZXJzaW9uIDQuMC4yLCBmb3IgdGhlIDIuNyByZWxlYXNlLgorCistIElzc3VlICM4MjM1OiBfc29ja2V0OiBBZGQgdGhlIGNvbnN0YW50IGBgU09fU0VURklCYGAuICBTT19TRVRGSUIgaXMKKyAgYSBzb2NrZXQgb3B0aW9uIGF2YWlsYWJsZSBvbiBGcmVlQlNEIDcuMSBhbmQgbmV3ZXIuCisKKy0gSXNzdWUgIzgwMzg6IHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdFJlZ2V4cE1hdGNoZXMKKworLSBBZGRpdGlvbiBvZiAtYiBjb21tYW5kIGxpbmUgb3B0aW9uIHRvIHVuaXR0ZXN0IGZvciBidWZmZXJpbmcgc3Rkb3V0IC8gc3RkZXJyCisgIGR1cmluZyB0ZXN0IHJ1bnMuCisKKy0gSXNzdWUgIzEyMjAyMTI6IEFkZGVkIG9zLmtpbGwgc3VwcG9ydCBmb3IgV2luZG93cywgaW5jbHVkaW5nIHN1cHBvcnQgZm9yCisgIHNlbmRpbmcgQ1RSTCtDIGFuZCBDVFJMK0JSRUFLIGV2ZW50cyB0byBjb25zb2xlIHN1YnByb2Nlc3Nlcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzgzMTQ6IEZpeCB1bnNpZ25lZCBsb25nIGxvbmcgYnVnIGluIGxpYmZmaSBvbiBTcGFyYyB2OC4KKworLSBJc3N1ZSAjMTAzOSwgIzgxNTQ6IEZpeCBvcy5leGVjbHAoKSBjcmFzaCB3aXRoIG1pc3NpbmcgMm5kIGFyZ3VtZW50LgorCistIElzc3VlICM4MTU2OiBic2RkYiBtb2R1bGUgdXBkYXRlZCB0byB2ZXJzaW9uIDQuOC40LgorICBodHRwOi8vd3d3LmpjZWEuZXMvcHJvZ3JhbWFjaW9uL3B5YnNkZGIuaHRtI2JzZGRiMy00LjguNC4gIFRoaXMgdXBkYXRlIGRyb3BzCisgIHN1cHBvcnQgZm9yIEJlcmtlbGV5IERCIDQuMCwgYW5kIGFkZHMgc3VwcG9ydCBmb3IgNC44LgorCistIElzc3VlICMzOTI4OiBvcy5ta25vZCgpIG5vdyBhdmFpbGFibGUgaW4gU29sYXJpcywgYWxzby4KKworLSBJc3N1ZSAjODE0MjogVXBkYXRlIGxpYmZmaSB0byB0aGUgMy4wLjkgcmVsZWFzZS4KKworLSBJc3N1ZSAjODMwMDogV2hlbiBwYXNzaW5nIGEgbm9uLWludGVnZXIgYXJndW1lbnQgdG8gc3RydWN0LnBhY2sgd2l0aCBhbnkKKyAgaW50ZWdlciBmb3JtYXQgY29kZSwgc3RydWN0LnBhY2sgZmlyc3QgYXR0ZW1wdHMgdG8gY29udmVydCB0aGUgbm9uLWludGVnZXIKKyAgdXNpbmcgaXRzIF9faW5kZXhfXyBtZXRob2QuICBJZiB0aGF0IG1ldGhvZCBpcyBub24tZXhpc3RlbnQgb3IgcmFpc2VzCisgIFR5cGVFcnJvciBpdCBnb2VzIG9uIHRvIHRyeSB0aGUgX19pbnRfXyBtZXRob2QsIGFzIGRlc2NyaWJlZCBiZWxvdy4KKworLSBJc3N1ZSAjMTUzMDU1OTogV2hlbiBwYXNzaW5nIGEgbm9uLWludGVnZXIgYXJndW1lbnQgdG8gc3RydWN0LnBhY2sgd2l0aCAqYW55KgorICBpbnRlZ2VyIGZvcm1hdCBjb2RlIChvbmUgb2YgJ2JCaEhpSWxMcVEnKSwgc3RydWN0LnBhY2sgYXR0ZW1wdHMgdG8gdXNlIHRoZQorICBhcmd1bWVudCdzIF9faW50X18gbWV0aG9kIHRvIGNvbnZlcnQgdG8gYW4gaW50ZWdlciBiZWZvcmUgcGFja2luZy4gIEl0IGFsc28KKyAgcHJvZHVjZXMgYSBEZXByZWNhdGlvbldhcm5pbmcgaW4gdGhpcyBjYXNlLiAgKEluIFB5dGhvbiAyLjYsIHRoZSBiZWhhdmlvdXIgd2FzCisgIGluY29uc2lzdGVudDogX19pbnRfXyB3YXMgdXNlZCBmb3Igc29tZSBpbnRlZ2VyIGNvZGVzIGJ1dCBub3QgZm9yIG90aGVycywgYW5kCisgIHRoZSBzZXQgb2YgaW50ZWdlciBjb2RlcyBmb3Igd2hpY2ggaXQgd2FzIHVzZWQgZGlmZmVyZWQgYmV0d2VlbiBuYXRpdmUgcGFja2luZworICBhbmQgc3RhbmRhcmQgcGFja2luZy4pCisKKy0gSXNzdWUgIzczNDc6IF93aW5yZWc6IEFkZCBDcmVhdGVLZXlFeCBhbmQgRGVsZXRlS2V5RXgsIGFzIHdlbGwgYXMgZml4IGEgYnVnIGluCisgIHRoZSByZXR1cm4gdmFsdWUgb2YgUXVlcnlSZWZsZWN0aW9uS2V5LgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjNzk5MzogQWRkIGEgdGVzdCBvZiBJTyBwYWNrZXQgcHJvY2Vzc2luZyBiYW5kd2lkdGggdG8gY2NiZW5jaC4gIEl0CisgIG1lYXN1cmVzIHRoZSBudW1iZXIgb2YgVURQIHBhY2tldHMgcHJvY2Vzc2VkIHBlciBzZWNvbmQgZGVwZW5kaW5nIG9uIHRoZQorICBudW1iZXIgb2YgYmFja2dyb3VuZCBDUFUtYm91bmQgUHl0aG9uIHRocmVhZHMuCisKKy0gcHl0aG9uLWNvbmZpZyBub3cgc3VwcG9ydHMgbXVsdGlwbGUgb3B0aW9ucyBvbiB0aGUgc2FtZSBjb21tYW5kIGxpbmUuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICM4MDMyOiBGb3IgZ2RiNywgYSBweXRob24tZ2RiLnB5IGZpbGUgaXMgYWRkZWQgdG8gdGhlIGJ1aWxkLCBhbGxvd2luZyB0bworICB1c2UgYWR2YW5jZWQgZ2RiIGZlYXR1cmVzIHdoZW4gZGVidWdnaW5nIFB5dGhvbi4KKworLSBJc3N1ZSAjMTYyODQ4NDogVGhlIE1ha2VmaWxlIGRvZXNuJ3QgaWdub3JlIHRoZSBDRkxBR1MgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgYW55bW9yZS4gIEl0IGFsc28gZm9yd2FyZHMgdGhlIExERkxBR1Mgc2V0dGluZ3MgdG8gdGhlIGxpbmtlciB3aGVuIGJ1aWxkaW5nIGEKKyAgc2hhcmVkIGxpYnJhcnkuCisKKy0gSXNzdWUgIzY3MTY6IFF1b3RlIC14IGFyZ3VtZW50cyBvZiBjb21waWxlYWxsIGluIE1TSSBpbnN0YWxsZXIuCisKKy0gSXNzdWUgIzc3MDU6IEZpeCBsaW5raW5nIG9uIEZyZWVCU0QuCisKKy0gTWFrZSBzdXJlIHRoYXQgdGhlIEZyZWVCU0QgYnVpbGQgb2YgdGhlIGluY2x1ZGVkIGxpYmZmaSB1c2VzIHRoZSBwcm9wZXIKKyAgYXNzZW1ibHkgZmlsZS4KKworQy1BUEkKKy0tLS0tCisKKy0gSXNzdWUgIzgyNzY6IFB5RXZhbF9DYWxsT2JqZWN0KCkgaXMgbm93IG9ubHkgYXZhaWxhYmxlIGluIG1hY3JvIGZvcm0uICBUaGUKKyAgZnVuY3Rpb24gZGVjbGFyYXRpb24sIHdoaWNoIHdhcyBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLCBpcworICBub3cgcmVtb3ZlZCAodGhlIG1hY3JvIHdhcyBpbnRyb2R1Y2VkIGluIDE5OTchKS4KKworLSBJc3N1ZSAjNzk5MjogQSByZXBsYWNlbWVudCBQeUNPYmplY3QgQVBJLCBQeUNhcHN1bGUsIGhhcyBiZWVuIGJhY2twb3J0ZWQgZnJvbQorICBQeXRob24gMy4xLiAgQWxsIGV4aXN0aW5nIFB5dGhvbiBDT2JqZWN0cyBpbiB0aGUgbWFpbiBkaXN0cmlidXRpb24gaGF2ZSBiZWVuCisgIGNvbnZlcnRlZCB0byBjYXBzdWxlcy4gIFRvIGFkZHJlc3MgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgY29uY2VybnMsCisgIFB5Q09iamVjdF9Bc1ZvaWRQdHIoKSB3YXMgY2hhbmdlZCB0byB1bmRlcnN0YW5kIGNhcHN1bGVzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMzg2NDogU2tpcCB0aHJlZSB0ZXN0X3NpZ25hbCB0ZXN0cyBvbiBmcmVlYnNkNiBiZWNhdXNlIHRoZXkgZmFpbCBpZiBhbnkKKyAgdGhyZWFkIHdhcyBwcmV2aW91c2x5IHN0YXJ0ZWQsIG1vc3QgbGlrZWx5IGR1ZSB0byBhIHBsYXRmb3JtIGJ1Zy4KKworLSBJc3N1ZSAjODM0ODogRml4IHRlc3QgZnRwIHVybCBpbiB0ZXN0X3VybGxpYjJuZXQuCisKKy0gSXNzdWUgIzgyMDQ6IEZpeCB0ZXN0X3R0ayBub3RlYm9vayB0ZXN0IGJ5IGZvcmNpbmcgZm9jdXMuCisKKy0gSXNzdWUgIzgzNDQ6IEZpeCB0ZXN0X3R0ayBidWcgb24gRnJlZUJTRC4KKworLSBJc3N1ZSAjODE5MzogRml4IHRlc3RfemxpYiBmYWlsdXJlIHdpdGggemxpYiAxLjIuNC4KKworLSBJc3N1ZSAjODI0ODogQWRkIHNvbWUgdGVzdHMgZm9yIHRoZSBib29sIHR5cGUuICBQYXRjaCBieSBHcmVnb3J5IE5vZmkuCisKKy0gSXNzdWUgIzgyNjM6IE5vdyByZWdydGVzdC5weSB3aWxsIHJlcG9ydCBhIGZhaWx1cmUgaWYgaXQgcmVjZWl2ZXMgYQorICBLZXlib2FyZEludGVycnVwdCAoU0lHSU5UKS4KKworLSBJc3N1ZSAjODE4MCBhbmQgIzgyMDc6IEZpeCB0ZXN0X3BlcDI3NyBvbiBPUyBYIGFuZCBhZGQgbW9yZSB0ZXN0cyBmb3Igc3BlY2lhbAorICBVbmljb2RlIG5vcm1hbGl6YXRpb24gY2FzZXMuCisKKy0gSXNzdWUgIzc3ODM6IHRlc3QudGVzdF9zdXBwb3J0Lm9wZW5fdXJscmVzb3VyY2UgaW52YWxpZGF0ZXMgdGhlIG91dGRhdGVkIGZpbGVzCisgIGZyb20gdGhlIGxvY2FsIGNhY2hlLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNyBhbHBoYSA0PworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDIwMTAtMDMtMDYqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICM3NTQ0OiBQcmVhbGxvY2F0ZSB0aHJlYWQgbWVtb3J5IGJlZm9yZSBjcmVhdGluZyB0aGUgdGhyZWFkIHRvIGF2b2lkIGEKKyAgZmF0YWwgZXJyb3IgaW4gbG93IG1lbW9yeSBjb25kaXRpb24uCisKKy0gSXNzdWUgIzc4MjA6IFRoZSBwYXJzZXIgdG9rZW5pemVyIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgaWYgdGhlIEJPTQorICBjaGVjayBmYWlscy4KKworLSBJc3N1ZSAjNzMwOTogRml4IHVuY2hlY2tlZCBhdHRyaWJ1dGUgYWNjZXNzIHdoZW4gY29udmVydGluZworICBVbmljb2RlRW5jb2RlRXJyb3IsIFVuaWNvZGVEZWNvZGVFcnJvciwgYW5kIFVuaWNvZGVUcmFuc2xhdGVFcnJvciB0byBzdHJpbmdzLgorCistIElzc3VlICM3NjQ5OiAidSclYycgJSBjaGFyIiBub3cgYmVoYXZlcyBsaWtlICJ1JyVzJyAlIGNoYXIiIGFuZCByYWlzZXMgYQorICBVbmljb2RlRGVjb2RlRXJyb3IgaWYgJ2NoYXInIGlzIGEgYnl0ZSBzdHJpbmcgdGhhdCBjYW4ndCBiZSBkZWNvZGVkIHVzaW5nIHRoZQorICBkZWZhdWx0IGVuY29kaW5nLgorCistIElzc3VlICM2OTAyOiBGaXggcHJvYmxlbSB3aXRoIGJ1aWx0LWluIHR5cGVzIGZvcm1hdCBpbmNvcnJlY3RseSB3aXRoIDAKKyAgcGFkZGluZy4KKworLSBJc3N1ZSAjMjU2MDogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5ICdmb3InIGxvb3AgZnJvbSBgYG15X2ZnZXRzKClgYCBpbgorICBQYXJzZXIvbXlyZWFkbGluZS5jLgorCistIElzc3VlICM3OTg4OiBGaXggZGVmYXVsdCBhbGlnbm1lbnQgdG8gYmUgcmlnaHQgYWxpZ25lZCBmb3IKKyAgYGBjb21wbGV4Ll9fZm9ybWF0X19gYC4gIE5vdyBpdCBtYXRjaGVzIG90aGVyIG51bWVyaWMgdHlwZXMuCisKKy0gSXNzdWUgIzUyMTE6IFRoZSBjb21wbGV4IHR5cGUgbm8gbG9uZ2VyIHVzZXMgaW1wbGljaXQgY29lcmNpb24gaW4gbWl4ZWQtdHlwZQorICBiaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzc5MDQ6IENoYW5nZXMgdG8gdXJsbGliLnBhcnNlLnVybHNwbGl0IHRvIGhhbmRsZSBzY2hlbWVzIGFzIGRlZmluZWQgYnkKKyAgUkZDMzk4Ni4gQW55dGhpbmcgYmVmb3JlIDovLyBpcyBjb25zaWRlcmVkIGEgc2NoZW1lIGFuZCBpcyBmb2xsb3dlZCBieSBhbgorICBhdXRob3JpdHkgKG9yIG5ldGxvYykgYW5kIGJ5ICcvJyBsZWQgcGF0aCwgd2hpY2ggaXMgb3B0aW9uYWwuCisKKy0gSXNzdWUgIzE1NTU1NzA6IGVtYWlsIG5vIGxvbmdlciBpbnNlcnRzIGV4dHJhIGJsYW5rIGxpbmVzIHdoZW4gYSBcclxuCisgIGNvbWJvIGNyb3NzZXMgYW4gODE5MiBieXRlIGJvdW5kYXJ5LgorCistIElzc3VlICM2OTA2OiBUayBzaG91bGQgbm90IHNldCBVbmljb2RlIGVudmlyb25tZW50IHZhcmlhYmxlcyBvbiBXaW5kb3dzLgorCistIElzc3VlICMxMDU0OTQzOiBGaXggYGB1bmljb2RlZGF0YS5ub3JtYWxpemUoJ05GQycsIHRleHQpYGAgZm9yIHRoZSBQdWJsaWMKKyAgUmV2aWV3IElzc3VlICMyOSAoaHR0cDovL3VuaWNvZGUub3JnL3Jldmlldy9wci0yOS5odG1sKS4KKworLSBJc3N1ZSAjNzQ5NDogRml4IGEgY3Jhc2ggaW4gYGBfbHNwcm9mYGAgKGNQcm9maWxlKSBhZnRlciBjbGVhcmluZyB0aGUgcHJvZmlsZXIsCisgIHJlc2V0IGFsc28gdGhlIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgcG9pbnRlciBjb250ZXh0LgorCistIElzc3VlICM3MjMyOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCB0byB0aGUKKyAgYGB0YXJmaWxlLlRhckZpbGVgYCBjbGFzcy4KKwogLSBJc3N1ZSAjNzI1MDogRml4IGluZm8gbGVhayBvZiBvcy5lbnZpcm9uIGFjcm9zcyBtdWx0aS1ydW4gdXNlcyBvZgotICB3c2dpcmVmLmhhbmRsZXJzLkNHSUhhbmRsZXIuCisgIGBgd3NnaXJlZi5oYW5kbGVycy5DR0lIYW5kbGVyYGAuCiAKIC0gSXNzdWUgIzE3MjkzMDU6IEZpeCBkb2N0ZXN0IHRvIGhhbmRsZSBlbmNvZGUgZXJyb3Igd2l0aCAiYmFja3NsYXNocmVwbGFjZSIuCiAKLS0gSXNzdWUgIzY5MTI5MTogY29kZWNzLm9wZW4oKSBzaG91bGQgbm90IGNvbnZlcnQgZW5kIG9mIGxpbmVzIG9uIHJlYWRpbmcgYW5kCi0gIHdyaXRpbmcuCistIElzc3VlICM2OTEyOTE6IGBgY29kZWNzLm9wZW4oKWBgIHNob3VsZCBub3QgY29udmVydCBlbmQgb2YgbGluZXMgb24gcmVhZGluZworICBhbmQgd3JpdGluZy4KIAotLSBJc3N1ZSAjNzk3NTogY29ycmVjdCByZWdyZXNzaW9uIGluIGRpY3QgbWV0aG9kcyBzdXBwb3J0ZWQgYnkgYnNkZGIuZGJzaGVsdmUuCistIElzc3VlICM3OTc1OiBDb3JyZWN0IHJlZ3Jlc3Npb24gaW4gZGljdCBtZXRob2RzIHN1cHBvcnRlZCBieSBic2RkYi5kYnNoZWx2ZS4KIAotLSBJc3N1ZSAjNzk1OTogY3R5cGVzIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgbm93IHJlZ2lzdGVyZWQgY29ycmVjdGx5Ci0gIHdpdGggdGhlIGN5Y2xlIGdhcmJhZ2UgY29sbGVjdG9yLgorLSBJc3N1ZSAjNzk1OTogY3R5cGVzIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgbm93IHJlZ2lzdGVyZWQgY29ycmVjdGx5IHdpdGggdGhlCisgIGN5Y2xlIGdhcmJhZ2UgY29sbGVjdG9yLgogCi0tIElzc3VlICM2MjQzOiBjdXJzZXMuZ2V0a2V5KCkgY2FuIHNlZ2ZhdWx0IHdoZW4gdXNlZCB3aXRoIHVuZ2V0Y2guCi0gIEZpeCBieSBUcnVuZGxlIGFuZCBKZXJyeSBDaGVuLgotCi0tIElzc3VlICM3NTk3OiBjdXJzZXMudXNlX2VudigpIGNhbiBub3cgYmUgY2FsbGVkIGJlZm9yZSBpbml0c2NyKCkuCi0gIE5vdGVkIGJ5IEthbi1SdSBDaGVuLgotCi0tIElzc3VlICM3OTcwOiBlbWFpbC5HZW5lcmF0b3IuZmxhdHRlbiBub3cgY29ycmVjdGx5IGZsYXR0ZW5zIG1lc3NhZ2UvcmZjODIyCi0gIG1lc3NhZ2VzIHBhcnNlZCBieSBlbWFpbC5QYXJzZXIuSGVhZGVyUGFyc2VyLgorLSBJc3N1ZSAjNzk3MDogYGBlbWFpbC5HZW5lcmF0b3IuZmxhdHRlbmBgIG5vdyBjb3JyZWN0bHkgZmxhdHRlbnMKKyAgbWVzc2FnZS9yZmM4MjIgbWVzc2FnZXMgcGFyc2VkIGJ5IGBgZW1haWwuUGFyc2VyLkhlYWRlclBhcnNlcmBgLgogCiAtIElzc3VlICMzNDI2OiBgYG9zLnBhdGguYWJzcGF0aGBgIG5vdyByZXR1cm5zIHVuaWNvZGUgd2hlbiBpdHMgYXJnIGlzIHVuaWNvZGUuCiAKLS0gSXNzdWUgIzc4MzU6IHNoZWx2ZSBzaG91bGQgbm8gbG9uZ2VyIHByb2R1Y2UgbXlzdGVyaW91cyB3YXJuaW5ncyBkdXJpbmcKLSAgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCistIElzc3VlICM3NjMzOiBJbiB0aGUgZGVjaW1hbCBtb2R1bGUsIGBgQ29udGV4dGBgIGNsYXNzIG1ldGhvZHMgKHdpdGggdGhlCisgIGV4Y2VwdGlvbiBvZiBjYW5vbmljYWwgYW5kIGlzX2Nhbm9uaWNhbCkgbm93IGFjY2VwdCBpbnN0YW5jZXMgb2YgaW50IGFuZCBsb25nCisgIHdoZXJldmVyIGEgRGVjaW1hbCBpbnN0YW5jZSBpcyBhY2NlcHRlZCwgYW5kIGltcGxpY2l0bHkgY29udmVydCB0aGF0IGFyZ3VtZW50CisgIHRvIERlY2ltYWwuICBQcmV2aW91c2x5IG9ubHkgc29tZSBhcmd1bWVudHMgd2VyZSBjb252ZXJ0ZWQuCiAKLS0gSXNzdWUgIzQ3NzI6IFJhaXNlIGEgVmFsdWVFcnJvciB3aGVuIGFuIHVua25vd24gQmx1ZXRvb3RoIHByb3RvY29sIGlzCi0gIHNwZWNpZmllZCwgcmF0aGVyIHRoYW4gZmFsbCB0aHJvdWdoIHRvIEFGX1BBQ0tFVCAoaW4gdGhlIGBzb2NrZXRgIG1vZHVsZSkuCi0gIEFsc28sIHJhaXNlIFZhbHVlRXJyb3IgcmF0aGVyIHRoYW4gVHlwZUVycm9yIHdoZW4gYW4gdW5rbm93biBUSVBDIGFkZHJlc3MKLSAgdHlwZSBpcyBzcGVjaWZpZWQuICBQYXRjaCBieSBCcmlhbiBDdXJ0aW4uCistIElzc3VlICM2MDAzOiBBZGQgYW4gYXJndW1lbnQgdG8gYGB6aXBmaWxlLlppcGZpbGUud3JpdGVzdHJgYCB0byBzcGVjaWZ5IHRoZQorICBjb21wcmVzc2lvbiB0eXBlLgogCi0tIElzc3VlICM2OTM5OiBGaXggZmlsZSBJL08gb2JqZWN0cyBpbiB0aGUgYGlvYCBtb2R1bGUgdG8ga2VlcCB0aGUgb3JpZ2luYWwKLSAgZmlsZSBwb3NpdGlvbiB3aGVuIGNhbGxpbmcgYHRydW5jYXRlKClgLiAgSXQgd291bGQgcHJldmlvdXNseSBjaGFuZ2UgdGhlCi0gIGZpbGUgcG9zaXRpb24gdG8gdGhlIGdpdmVuIGFyZ3VtZW50LCB3aGljaCBnb2VzIGFnYWluc3QgdGhlIHRyYWRpdGlvbiBvZgotICBmdHJ1bmNhdGUoKSBhbmQgb3RoZXIgdHJ1bmNhdGlvbiBBUElzLiAgUGF0Y2ggYnkgUGFzY2FsIENoYW1ib24uCistIElzc3VlICM3ODkzOiBgYHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0YGAgaXMgbWFkZSBwdWJsaWMgYW5kIGEgYGByZXN1bHRjbGFzc2BgCisgIGFyZ3VtZW50IGFkZGVkIHRvIHRoZSBUZXh0VGVzdFJ1bm5lciBjb25zdHJ1Y3RvciBhbGxvd2luZyBhIGRpZmZlcmVudCByZXN1bHQKKyAgY2xhc3MgdG8gYmUgdXNlZCB3aXRob3V0IGhhdmluZyB0byBzdWJjbGFzcy4KIAotLSBJc3N1ZSAjNzc3MzogRml4IGFuIFVuYm91bmRMb2NhbEVycm9yIGluIHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbigpIHdoZW4KLSAgdGhlIHJlbGVhc2UgZmlsZSBpcyBlbXB0eS4KKy0gSXNzdWUgIzc1ODg6IGBgdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQuZ2V0RGVzY3JpcHRpb25gYCBub3cgaW5jbHVkZXMgdGhlIHRlc3QKKyAgbmFtZSBpbiBmYWlsdXJlIHJlcG9ydHMgZXZlbiBpZiB0aGUgdGVzdCBoYXMgYSBkb2NzdHJpbmcuCiAKLS0gSXNzdWUgIzc3NDg6IFNpbmNlIHVuaWNvZGUgdmFsdWVzIGFyZSBzdXBwb3J0ZWQgZm9yIHNvbWUgbWV0YWRhdGEgb3B0aW9ucwotICBpbiBEaXN0dXRpbHMsIHRoZSBEaXN0cmlidXRpb25NZXRhZGF0YSBnZXRfKiBtZXRob2RzIHdpbGwgbm93IHJldHVybiBhbiB1dGYtOAotICBlbmNvZGVkIHN0cmluZyBmb3IgdGhlbS4gVGhpcyBlbnN1cmUgdGhhdCB0aGUgdXBsb2FkIGFuZCByZWdpc3RlciBjb21tYW5kcwotICBzZW5kIHRoZSByaWdodCB2YWx1ZXMgdG8gUHlQSSB3aXRob3V0IGFueSBlcnJvci4KKy0gSXNzdWUgIzU4MDE6IFJlbW92ZSBzcHVyaW91cyBlbXB0eSBsaW5lcyBpbiB3c2dpcmVmLgogCi0tIElzc3VlICMxNjcwNzY1OiBQcmV2ZW50IGVtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3IgZnJvbSByZS13cmFwcGluZwotICBoZWFkZXJzIGluIG11bHRpcGFydC9zaWduZWQgTUlNRSBwYXJ0cywgd2hpY2ggZml4ZXMgb25lIG9mIHRoZSBzb3VyY2VzIG9mCi0gIGludmFsaWQgbW9kaWZpY2F0aW9ucyB0byBzdWNoIHBhcnRzIGJ5IEdlbmVyYXRvci4KKy0gSXNzdWUgIzE1Mzc3MjE6IEFkZCBhIGBgd3JpdGVoZWFkZXIoKWBgIG1ldGhvZCB0byBgYGNzdi5EaWN0V3JpdGVyYGAuCiAKLS0gSXNzdWUgIzc3MDE6IEZpeCBjcmFzaCBpbiBiaW5hc2NpaS5iMmFfdXUoKSBpbiBkZWJ1ZyBtb2RlIHdoZW4gZ2l2ZW4gYQotICAxLWJ5dGUgYXJndW1lbnQuICBQYXRjaCBieSBWaWN0b3IgU3Rpbm5lci4KKy0gSXNzdWUgIzc0Mjc6IEltcHJvdmUgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGh0dHBsaWIuQmFkU3RhdHVzTGluZSBleGNlcHRpb25zLgogCi0tIElzc3VlICMzMjk5OiBGaXggcG9zc2libGUgY3Jhc2ggaW4gdGhlIF9zcmUgbW9kdWxlIHdoZW4gZ2l2ZW4gYmFkCi0gIGFyZ3VtZW50IHZhbHVlcyBpbiBkZWJ1ZyBtb2RlLiAgUGF0Y2ggYnkgVmljdG9yIFN0aW5uZXIuCi0KLS0gSXNzdWUgIzU4Mjc6IE1ha2Ugc3VyZSB0aGF0IG5vcm1wYXRoIHByZXNlcnZlcyB1bmljb2RlLiAgSW5pdGlhbCBwYXRjaAotICBieSBNYXR0IEdpdWNhLgotCi0tIElzc3VlICM1MzcyOiBEcm9wIHRoZSByZXVzZSBvZiAubyBmaWxlcyBpbiBEaXN0dXRpbHMnIGNjb21waWxlciAoc2luY2UKLSAgRXh0ZW5zaW9uIGV4dHJhIG9wdGlvbnMgbWF5IGNoYW5nZSB0aGUgb3V0cHV0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIC5jCi0gIGZpbGUpLiBJbml0aWFsIHBhdGNoIGJ5IENvbGxpbiBXaW50ZXIuCi0KLS0gSXNzdWUgIzc2MTc6IE1ha2Ugc3VyZSBkaXN0dXRpbHMudW5peGNjb21waWxlci5Vbml4Q0NvbXBpbGVyIHJlY29nbml6ZXMKLSAgZ2NjIHdoZW4gaXQgaGFzIGEgZnVsbHkgcXVhbGlmaWVkIGNvbmZpZ3VyYXRpb24gcHJlZml4LiBJbml0aWFsIHBhdGNoCi0gIGJ5IEFyZnJldmVyLgotCi0tIElzc3VlICM3MDcxOiBieXRlLWNvbXBpbGF0aW9uIGluIERpc3R1dGlscyBpcyBub3cgZG9uZSB3aXRoIHJlc3BlY3QgdG8KLSAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUuCi0KLS0gSXNzdWUgIzcwOTI6IFJlbW92ZSBweTNrIHdhcm5pbmcgd2hlbiBpbXBvcnRpbmcgY1BpY2tsZS4gIDJ0bzMgaGFuZGxlcwotICByZW5hbWluZyBvZiBgY1BpY2tsZWAgdG8gYHBpY2tsZWAuICBUaGUgd2FybmluZyB3YXMgYW5ub3lpbmcgc2luY2UgdGhlcmUncwotICBubyBhbHRlcm5hdGl2ZSB0byBjUGlja2xlIGlmIHlvdSBjYXJlIGFib3V0IHBlcmZvcm1hbmNlLiAgUGF0Y2ggYnkgRmxvcmVudAotICBYaWNsdW5hLgotCi0tIElzc3VlICM3NDU1OiBGaXggcG9zc2libGUgY3Jhc2ggaW4gY1BpY2tsZSBvbiBpbnZhbGlkIGlucHV0LiAgUGF0Y2ggYnkKLSAgVmljdG9yIFN0aW5uZXIuCi0KLS0gSXNzdWUgIzY1MTE6IFppcEZpbGUgbm93IHJhaXNlcyBCYWRaaXBmaWxlIChpbnN0ZWFkIG9mIGFuIElPRXJyb3IpIHdoZW4KLSAgb3BlbmluZyBhbiBlbXB0eSBvciB2ZXJ5IHNtYWxsIGZpbGUuCi0KLS0gSXNzdWUgIzc1NTI6IFJlbW92ZWQgbGluZSBmZWVkIGluIHRoZSBiYXNlNjQgQXV0aG9yaXphdGlvbiBoZWFkZXIgaW4KLSAgdGhlIERpc3R1dGlscyB1cGxvYWQgY29tbWFuZCB0byBhdm9pZCBhbiBlcnJvciB3aGVuIFB5UEkgcmVhZHMgaXQuCi0gIFRoaXMgb2NjdXJzIG9uIGxvbmcgcGFzc3dvcmRzLiBJbml0aWFsIHBhdGNoIGJ5IEpQIFN0LiBQaWVycmUuCi0KLS0gSXNzdWUgIzcyMzE6IHVybGxpYjIgY2Fubm90IGhhbmRsZSBodHRwcyB3aXRoIHByb3h5IHJlcXVpcmluZyBhdXRoLiBQYXRjaCBieQotICBUYXRzdWhpcm8gVHN1amlrYXdhLgotCi0tIElzc3VlICM3MzQ4OiBTdHJpbmdJTy5TdHJpbmdJTy5yZWFkbGluZSgtMSkgbm93IGFjdHMgYXMgaWYgaXQgZ290IG5vIGFyZ3VtZW50Ci0gIGxpa2Ugb3RoZXIgZmlsZSBvYmplY3RzLgotCi0tIElzc3VlICM1OTQ5OiBmaXhlZCBJTUFQNF9TU0wgaGFuZyB3aGVuIHRoZSBJTUFQIHNlcnZlciByZXNwb25zZSBpcwotICBtaXNzaW5nIHByb3BlciBlbmQtb2YtbGluZSB0ZXJtaW5hdGlvbi4KLQotLSBGaXggdmFyaWF0aW9ucyBvZiBleHRlbmRpbmcgZGVxdWVzOiAgZC5leHRlbmQoZCkgIGQuZXh0ZW5kbGVmdChkKSAgZCs9ZAotCi0tIElzc3VlICMxOTIzOiBGaXhlZCB0aGUgcmVtb3ZhbCBvZiBtZWFuaW5nZnVsIHNwYWNlcyB3aGVuIFBLRy1JTkZPIGlzCi0gIGdlbmVyYXRlZCBpbiBEaXN0dXRpbHMuIFBhdGNoIGJ5IFN0ZXBoZW4gRW1zbGllLgotCi0tIElzc3VlICM0MTIwOiBEcm9wIHJlZmVyZW5jZSB0byBDUlQgZnJvbSBtYW5pZmVzdCB3aGVuIGJ1aWxkaW5nIGV4dGVuc2lvbnMKLSAgd2l0aCBtc3ZjOWNvbXBpbGVyLgotCi0tIElzc3VlICM3NDEwOiBkZWVwY29weSBvZiBpdGVydG9vbHMuY291bnQoKSBlcnJvbmVvdXNseSByZXNldCB0aGUgY291bnQuCi0KLS0gSXNzdWUgIzc0MDM6IGxvZ2dpbmc6IEZpeGVkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIGluIGxvY2sgY3JlYXRpb24uCi0KLS0gSXNzdWUgIzczNDE6IENsb3NlIHRoZSBpbnRlcm5hbCBmaWxlIG9iamVjdCBpbiB0aGUgVGFyRmlsZSBjb25zdHJ1Y3RvciBpbgotICBjYXNlIG9mIGFuIGVycm9yLgotCi0tIElzc3VlICM3MzI4OiBweWRvYyBubyBsb25nZXIgY29ycnVwdHMgc3lzLnBhdGggd2hlbiBydW4gd2l0aCB0aGUgJy1tJyBzd2l0Y2gKLQotLSBJc3N1ZSAjNzMxODogbXVsdGlwcm9jZXNzaW5nIG5vdyB1c2VzIGEgdGltZW91dCB3aGVuIGl0IGZhaWxzIHRvIGVzdGFibGlzaAotICBhIGNvbm5lY3Rpb24gd2l0aCBhbm90aGVyIHByb2Nlc3MsIHJhdGhlciB0aGFuIGxvb3BpbmcgZW5kbGVzc2x5LiBUaGUKLSAgZGVmYXVsdCB0aW1lb3V0IGlzIDIwIHNlY29uZHMsIHdoaWNoIHNob3VsZCBiZSBhbXBseSBzdWZmaWNpZW50IGZvcgotICBsb2NhbCBjb25uZWN0aW9ucy4KLQotLSBJc3N1ZSAjNzI4MjogRml4IGEgbWVtb3J5IGxlYWsgd2hlbiBhbiBSTG9jayB3YXMgdXNlZCBpbiBhIHRocmVhZCBvdGhlcgotICB0aGFuIHRob3NlIHN0YXJ0ZWQgdGhyb3VnaCBgdGhyZWFkaW5nLlRocmVhZGAgKGZvciBleGFtcGxlLCB1c2luZwotICBgdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoKWAuCi0KLS0gSXNzdWUgIzcyNjQ6IEZpeCBhIHBvc3NpYmxlIGRlYWRsb2NrIHdoZW4gZGVhbGxvY2F0aW5nIHRocmVhZC1sb2NhbCBvYmplY3RzCi0gIHdoaWNoIGFyZSBwYXJ0IG9mIGEgcmVmZXJlbmNlIGN5Y2xlLgotCi0tIElzc3VlICM3MjQ5OiBNZXRob2RzIG9mIGlvLkJ5dGVzSU8gbm93IGFsbG93IGBsb25nYCBhcyB3ZWxsIGFzIGBpbnRgCi0gIGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjNjY2NTogRml4IGZubWF0Y2ggdG8gcHJvcGVybHkgbWF0Y2ggZmlsZW5hbWVzIHdpdGggbmV3bGluZXMgaW4gdGhlbS4KLQotLSBJc3N1ZSAjMTAwODA4NjogRml4ZWQgc29ja2V0LmluZXRfYXRvbigpIHRvIGFsd2F5cyByZXR1cm4gNCBieXRlcyBldmVuIG9uCi0gIExQNjQgcGxhdGZvcm1zIChtb3N0IDY0LWJpdCBMaW51eCwgYnNkLCB1bml4IHN5c3RlbXMpLgotCi0tIElzc3VlICM3MjQ2ICYgSXNzdWUgIzcyMDg6IGdldHBhc3Mgbm93IHByb3Blcmx5IGZsdXNoZXMgaW5wdXQgYmVmb3JlCi0gIHJlYWRpbmcgZnJvbSBzdGRpbiBzbyB0aGF0IGV4aXN0aW5nIGlucHV0IGRvZXMgbm90IGNvbmZ1c2UgaXQgYW5kCi0gIGxlYWQgdG8gaW5jb3JyZWN0IGVudHJ5IG9yIGFuIElPRXJyb3IuICBJdCBhbHNvIHByb3Blcmx5IGZsdXNoZXMgaXQKLSAgYWZ0ZXJ3YXJkcyB0byBhdm9pZCB0aGUgdGVybWluYWwgZWNob2luZyB0aGUgaW5wdXQgYWZ0ZXJ3YXJkcyBvbgotICBPU2VzIHN1Y2ggYXMgU29sYXJpcy4KLQotLSBJc3N1ZSAjNzI0NDogaXRlcnRvb2xzLml6aXBfbG9uZ2VzdCgpIG5vIGxvbmdlciBpZ25vcmVzIGV4Y2VwdGlvbnMKLSAgcmFpc2VkIGR1cmluZyB0aGUgZm9ybWF0aW9uIG9mIGFuIG91dHB1dCB0dXBsZS4KLQotLSBJc3N1ZSAjNzIzMzogRml4IGEgbnVtYmVyIG9mIHR3by1hcmd1bWVudCBEZWNpbWFsIG1ldGhvZHMgdG8gbWFrZQotICBzdXJlIHRoYXQgdGhleSBhY2NlcHQgYW4gaW50IG9yIGxvbmcgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4gIEFsc28KLSAgZml4IGJ1Z2d5IGhhbmRsaW5nIG9mIGxhcmdlIGFyZ3VtZW50cyAodGhvc2Ugd2l0aCBjb2VmZmljaWVudCBsb25nZXIKLSAgdGhhbiB0aGUgY3VycmVudCBwcmVjaXNpb24pIGluIHNoaWZ0IGFuZCByb3RhdGUuCi0KLS0gSXNzdWUgIzcwODI6IFdoZW4gZmFsbGluZyBiYWNrIHRvIHRoZSBNSU1FICduYW1lJyBwYXJhbWV0ZXIsIHRoZQotICBjb3JyZWN0IHBsYWNlIHRvIGxvb2sgZm9yIGl0IGlzIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLgotCi0tIElzc3VlICM3MDk5OiBEZWNpbWFsLmlzX25vcm1hbCBub3cgcmV0dXJucyBUcnVlIGZvciBudW1iZXJzIHdpdGggZXhwb25lbnQKLSAgbGFyZ2VyIHRoYW4gZW1heC4KLQotLSBJc3N1ZSAjNzIwNTogRml4IGEgcG9zc2libGUgZGVhZGxvY2sgd2hlbiB1c2luZyBhIEJaMkZpbGUgb2JqZWN0IGZyb20KLSAgc2V2ZXJhbCB0aHJlYWRzIGF0IG9uY2UuCi0KLS0gSXNzdWUgIzcwNDg6IEZvcmNlIERlY2ltYWwubG9nYiB0byByb3VuZCBpdHMgcmVzdWx0IHdoZW4gdGhhdCByZXN1bHQKLSAgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiB0aGUgY3VycmVudCBwcmVjaXNpb24uCi0KLS0gSXNzdWUgIzE0ODg5NDM6IGRpZmZsaWIuRGlmZmVyKCkgZG9lc24ndCBhbHdheXMgYWRkIGhpbnRzIGZvciB0YWIgY2hhcmFjdGVycwotCi0tIElzc3VlICM1MDM3OiBQcm94eSB0aGUgX191bmljb2RlX18gc3BlY2lhbCBtZXRob2QgdG8gX191bmljb2RlX18gaW5zdGVhZCBvZgotICBfX3N0cl9fLgotCi0tIElzc3VlICM3NDgxOiBXaGVuIGEgdGhyZWFkaW5nLlRocmVhZCBmYWlsZWQgdG8gc3RhcnQgaXQgd291bGQgbGVhdmUgdGhlCi0gIGluc3RhbmNlIHN0dWNrIGluIGluaXRpYWwgc3RhdGUgYW5kIHByZXNlbnQgaW4gdGhyZWFkaW5nLmVudW1lcmF0ZSgpLgorLSBJc3N1ZSAjNzQ4MTogV2hlbiBhIGBgdGhyZWFkaW5nLlRocmVhZGBgIGZhaWxlZCB0byBzdGFydCBpdCB3b3VsZCBsZWF2ZSB0aGUKKyAgaW5zdGFuY2Ugc3R1Y2sgaW4gaW5pdGlhbCBzdGF0ZSBhbmQgcHJlc2VudCBpbiBgYHRocmVhZGluZy5lbnVtZXJhdGUoKWBgLgogCiAtIElzc3VlICMxMDY4MjY4OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm93IGhhbmRsZXMgRUlOVFIgaW4gaW50ZXJuYWwKLSAgb3Mud2FpdHBpZCBhbmQgb3MucmVhZCBzeXN0ZW0gY2FsbHMgd2hlcmUgYXBwcm9wcmlhdGUuCisgIGBgb3Mud2FpdHBpZCgpYGAgYW5kIGBgb3MucmVhZCgpYGAgc3lzdGVtIGNhbGxzIHdoZXJlIGFwcHJvcHJpYXRlLgorCistIElzc3VlICM2NzI5OiBBZGQgYGBjdHlwZXMuY19zc2l6ZV90YGAgdG8gcmVwcmVzZW50IHNzaXplX3QuCisKKy0gSXNzdWUgIzYyNDc6IFRoZSBhcmdwYXJzZSBtb2R1bGUgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkuCiAKIEV4dGVuc2lvbiBNb2R1bGVzCiAtLS0tLS0tLS0tLS0tLS0tLQogCistIFRoZSBzcWxpdGUzIG1vZHVsZSB3YXMgdXBkYXRlZCB0byBweXNxbGl0ZSAyLjYuMC4gIFRoaXMgZml4ZXMgc2V2ZXJhbCBvYnNjdXJlCisgIGJ1Z3MgYW5kIGFsbG93cyBsb2FkaW5nIFNRTGl0ZSBleHRlbnNpb25zIGZyb20gc2hhcmVkIGxpYnJhcmllcy4KKwogLSBJc3N1ZSAjNzgwODogRml4IHJlZmVyZW5jZSBsZWFrcyBpbiBfYnNkZGIgYW5kIHJlbGF0ZWQgdGVzdHMuCiAKKy0gSXNzdWUgIzY1NDQ6IEZpeCBhIHJlZmVyZW5jZSBsZWFrIGluIHRoZSBrcXVldWUgaW1wbGVtZW50YXRpb24ncyBlcnJvcgorICBoYW5kbGluZy4KKwogLSBTdG9wIHByb3ZpZGluZyBjcnRhc3NlbS5oIHN5bWJvbHMgd2hlbiBjb21waWxpbmcgd2l0aCBWaXN1YWwgU3R1ZGlvIDIwMTAsIGFzCiAgIG1zdmNyMTAwLmRsbCBpcyBub3QgYSBwbGF0Zm9ybSBhc3NlbWJseSBhbnltb3JlLgogCi0tIElzc3VlICM2ODc3OiBNYWtlIGl0IHBvc3NpYmxlIHRvIGxpbmsgdGhlIHJlYWRsaW5lIGV4dGVuc2lvbiB0byBsaWJlZGl0Ci0gIG9uIE9TWC4KLQotLSBFeHBhdDogRml4IERvUyB2aWEgWE1MIGRvY3VtZW50IHdpdGggbWFsZm9ybWVkIFVURi04IHNlcXVlbmNlcwotICAoQ1ZFXzIwMDlfMzU2MCkuCi0KLS0gSXNzdWUgIzcyNDI6IE9uIFNvbGFyaXMgOSBhbmQgZWFybGllciBjYWxsaW5nIG9zLmZvcmsoKSBmcm9tIHdpdGhpbiBhCistIElzc3VlICM3MjQyOiBPbiBTb2xhcmlzIDkgYW5kIGVhcmxpZXIgY2FsbGluZyBgYG9zLmZvcmsoKWBgIGZyb20gd2l0aGluIGEKICAgdGhyZWFkIGNvdWxkIHJhaXNlIGFuIGluY29ycmVjdCBSdW50aW1lRXJyb3IgYWJvdXQgbm90IGhvbGRpbmcgdGhlIGltcG9ydAogICBsb2NrLiAgVGhlIGltcG9ydCBsb2NrIGlzIG5vdyByZWluaXRpYWxpemVkIGFmdGVyIGZvcmsuCiAKLS0gSXNzdWUgIzc5OTk6IG9zLnNldHJldWlkKCkgYW5kIG9zLnNldHJlZ2lkKCkgd291bGQgcmVmdXNlIHRvIGFjY2VwdCBhIC0xCi0gIHBhcmFtZXRlciBvbiBzb21lIHBsYXRmb3JtcyBzdWNoIGFzIE9TIFguCistIElzc3VlICM3OTk5OiBgYG9zLnNldHJldWlkKClgYCBhbmQgYGBvcy5zZXRyZWdpZCgpYGAgd291bGQgcmVmdXNlIHRvIGFjY2VwdCBhCisgIC0xIHBhcmFtZXRlciBvbiBzb21lIHBsYXRmb3JtcyBzdWNoIGFzIE9TIFguCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICM3ODQ5OiBUaGUgdXRpbGl0eSBgYHRlc3QudGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKClgYCB2ZXJpZmllcyBpZgorICB3YXJuaW5ncyBhcmUgZWZmZWN0aXZlbHkgcmFpc2VkLiAgQSBuZXcgdXRpbGl0eSBgYGNoZWNrX3B5M2tfd2FybmluZ3MoKWBgIGlzCisgIGF2YWlsYWJsZS4KKworLSBUaGUgZm91ciBwYXRoIG1vZHVsZXMgKGdlbmVyaWNwYXRoLCBtYWNwYXRoLCBudHBhdGgsIHBvc2l4cGF0aCkgc2hhcmUgYQorICBjb21tb24gVGVzdENhc2UgZm9yIHNvbWUgdGVzdHM6IHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdC4KKworLSBQcmludCBwbGF0Zm9ybSBpbmZvcm1hdGlvbiB3aGVuIHJ1bm5pbmcgdGhlIHdob2xlIHRlc3Qgc3VpdGUsIG9yIHVzaW5nIHRoZQorICBgYC0tdmVyYm9zZWBgIGZsYWcuCisKKy0gSXNzdWUgIzc2NzY3NTogRW5hYmxlIHRlc3RfcGVwMjc3IG9uIFBPU0lYIHBsYXRmb3JtcyB3aXRoIFVuaWNvZGUtZnJpZW5kbHkKKyAgZmlsZXN5c3RlbSBlbmNvZGluZy4KKworLSBJc3N1ZSAjNjI5MjogRm9yIHRoZSBtb21lbnQgYXQgbGVhc3QsIHRoZSB0ZXN0IHN1aXRlIHJ1bnMgY2xlYW5seSBpZiBweXRob24KKyAgaXMgcnVuIHdpdGggdGhlIC1PTyBmbGFnLiAgVGVzdHMgcmVxdWlyaW5nIGRvY3N0cmluZ3MgYXJlIHNraXBwZWQuCisKKy0gSXNzdWUgIzc3MTI6IHRlc3Rfc3VwcG9ydCBnYWluZWQgYSBuZXcgYGB0ZW1wX2N3ZGBgIGNvbnRleHQgbWFuYWdlciB3aGljaCBpcworICBub3cgYWxzbyB1c2VkIGJ5IHJlZ3J0ZXN0IHRvIHJ1biBhbGwgdGhlIHRlc3RzIGluIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4gIFRoZQorICBvcmlnaW5hbCBDV0QgaXMgc2F2ZWQgaW4gYGB0ZXN0LnRlc3Rfc3VwcG9ydC5TQVZFRENXRGBgLiAgVGhhbmtzIHRvIEZsb3JlbnQKKyAgWGljbHVuYSB3aG8gaGVscGVkIHdpdGggdGhlIHBhdGNoLgogCiBCdWlsZAogLS0tLS0KIAogLSBJc3N1ZSAjMzkyMCwgIzc5MDM6IERlZmluZSBfQlNEX1NPVVJDRSBvbiBPcGVuQlNEIDQuNCB0aHJvdWdoIDQuOS4KIAorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjcgYWxwaGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyMDEwLTAyLTA2KgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjNTY3NzogRXhwbGljaXRseSBmb3JiaWQgd3JpdGUgb3BlcmF0aW9ucyBvbiByZWFkLW9ubHkgZmlsZSBvYmplY3RzLAorICBhbmQgcmVhZCBvcGVyYXRpb25zIG9uIHdyaXRlLW9ubHkgZmlsZSBvYmplY3RzLiAgT24gV2luZG93cywgdGhlIHN5c3RlbSBDCisgIGxpYnJhcnkgd291bGQgcmV0dXJuIGEgYm9ndXMgcmVzdWx0OyBvbiBTb2xhcmlzLCBpdCB3YXMgcG9zc2libGUgdG8gY3Jhc2ggdGhlCisgIGludGVycHJldGVyLiAgUGF0Y2ggYnkgU3RlZmFuIEtyYWguCisKKy0gSXNzdWUgIzc4NTM6IE5vcm1hbGl6ZSBleGNlcHRpb25zIGJlZm9yZSB0aGV5IGFyZSBwYXNzZWQgdG8gYSBjb250ZXh0CisgIG1hbmFnZXIncyBgYF9fZXhpdF9fKClgYCBtZXRob2QuCisKKy0gSXNzdWUgIzczODU6IEZpeCBhIGNyYXNoIGluIGBgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QoKWBgIHdoZW4KKyAgYGBQeU9iamVjdF9HZXRCdWZmZXIoKWBgIGZhaWxzLiAgUGF0Y2ggYnkgRmxvcmVudCBYaWNsdW5hLgorCistIElzc3VlICM3ODE5OiBDaGVjayBgYHN5cy5jYWxsX3RyYWNpbmcoKWBgIGFyZ3VtZW50cyB0eXBlcy4KKworLSBJc3N1ZSAjNzc4ODogRml4IGFuIGludGVycHJldGVyIGNyYXNoIHByb2R1Y2VkIGJ5IGRlbGV0aW5nIGEgbGlzdCBzbGljZSB3aXRoCisgIHZlcnkgbGFyZ2Ugc3RlcCB2YWx1ZS4KKworLSBJc3N1ZSAjNzc2NjogQ2hhbmdlIGBgc3lzLmdldHdpbmRvd3N2ZXJzaW9uKClgYCByZXR1cm4gdmFsdWUgdG8gYSBuYW1lZCB0dXBsZQorICBhbmQgYWRkIHRoZSBhZGRpdGlvbmFsIG1lbWJlcnMgcmV0dXJuZWQgaW4gYW4gT1NWRVJTSU9OSU5GT0VYIHN0cnVjdHVyZS4gIFRoZQorICBuZXcgbWVtYmVycyBhcmUgc2VydmljZV9wYWNrX21ham9yLCBzZXJ2aWNlX3BhY2tfbWlub3IsIHN1aXRlX21hc2ssIGFuZAorICBwcm9kdWN0X3R5cGUuCisKKy0gSXNzdWUgIzc1NjE6IE9wZXJhdGlvbnMgb24gZW1wdHkgYnl0ZWFycmF5cyAoc3VjaCBhcyBgYGludChieXRlYXJyYXkoKSlgYCkKKyAgY291bGQgY3Jhc2ggaW4gbWFueSBwbGFjZXMgYmVjYXVzZSBvZiB0aGUgYGBQeUJ5dGVBcnJheV9BU19TVFJJTkcoKWBgIG1hY3JvCisgIHJldHVybmluZyBOVUxMLiAgVGhlIG1hY3JvIG5vdyByZXR1cm5zIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgZW1wdHkgc3RyaW5nCisgIGluc3RlYWQuCisKKy0gSXNzdWUgIzc2MjI6IEltcHJvdmUgdGhlIHNwbGl0KCksIHJzcGxpdCgpLCBzcGxpdGxpbmVzKCkgYW5kIHJlcGxhY2UoKQorICBtZXRob2RzIG9mIGJ5dGVzLCBieXRlYXJyYXkgYW5kIHVuaWNvZGUgb2JqZWN0cyBieSB1c2luZyBhIGNvbW1vbgorICBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBzdHJpbmdsaWIncyBmYXN0IHNlYXJjaC4gIFBhdGNoIGJ5IEZsb3JlbnQgWGljbHVuYS4KKworLSBJc3N1ZSAjNzYzMjogRml4IHZhcmlvdXMgc3RyIC0+IGZsb2F0IGNvbnZlcnNpb24gYnVncyBwcmVzZW50IGluIDIuNyBhbHBoYSAyLAorICBpbmNsdWRpbmc6CisKKyAgKDEpIGEgc2VyaW91cyAnd3Jvbmcgb3V0cHV0JyBidWcgdGhhdCBjb3VsZCBvY2N1ciBmb3IgbG9uZyAoPiA0MCBkaWdpdCkgaW5wdXQKKyAgICAgIHN0cmluZ3MsCisgICgyKSBhIGNyYXNoIGluIGR0b2EuYyB0aGF0IG9jY3VycmVkIGluIGRlYnVnIGJ1aWxkcyB3aGVuIHBhcnNpbmcgY2VydGFpbiBsb25nCisgICAgICBudW1lcmljIHN0cmluZ3MgY29ycmVzcG9uZGluZyB0byBzdWJub3JtYWwgdmFsdWVzLAorICAoMykgYSBtZW1vcnkgbGVhayBmb3Igc29tZSB2YWx1ZXMgbGFyZ2UgZW5vdWdoIHRvIGNhdXNlIG92ZXJmbG93LCBhbmQKKyAgKDQpIGEgbnVtYmVyIG9mIGZsYXdzIHRoYXQgY291bGQgbGVhZCB0byBpbmNvcnJlY3RseSByb3VuZGVkIHJlc3VsdHMuCisKKy0gSXNzdWUgIzczMTksICM3NzcwOiBTaWxlbmNlIGBgRGVwcmVjYXRpb25XYXJuaW5nYGAgYnkgZGVmYXVsdCB3aGVuIHRoZSAtMworICBvcHRpb24gaXMgbm90IHVzZWQuCisKKy0gSXNzdWUgIzIzMzU6IEJhY2twb3J0IHNldCBsaXRlcmFscyBzeW50YXggZnJvbSBQeXRob24gMy54LgorCistIElzc3VlICMyMzMzOiBCYWNrcG9ydCBzZXQgYW5kIGRpY3QgY29tcHJlaGVuc2lvbnMgc3ludGF4IGZyb20gUHl0aG9uIDMueC4KKworLSBJc3N1ZSAjMTk2NzogQmFja3BvcnQgZGljdGlvbmFyeSB2aWV3cyBmcm9tIFB5dGhvbiAzLnguCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjOTEzNzogRml4IGlzc3VlIGluIE11dGFibGVNYXBwaW5nLnVwZGF0ZSwgd2hpY2ggaW5jb3JyZWN0bHkKKyAgdHJlYXRlZCBrZXl3b3JkIGFyZ3VtZW50cyBjYWxsZWQgJ3NlbGYnIG9yICdvdGhlcicgc3BlY2lhbGx5LgorCistIElzc3VlICM3ODM1OiBzaGVsdmUgc2hvdWxkIG5vIGxvbmdlciBwcm9kdWNlIG15c3RlcmlvdXMgd2FybmluZ3MgZHVyaW5nCisgIGludGVycHJldGVyIHNodXRkb3duLgorCistIElzc3VlICMyNzQ2OiBEb24ndCBlc2NhcGUgYW1wZXJzYW5kcyBhbmQgYW5nbGUgYnJhY2tldHMgKCImIiwgIjwiLCAiPiIpIGluCisgIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyBhbmQgY29tbWVudHMuICBUaGVzZSByYXcgY2hhcmFjdGVycyBhcmUgYWxsb3dlZAorICBieSB0aGUgWE1MIHNwZWNpZmljYXRpb24sIGFuZCBhcmUgbmVjZXNzYXJ5IHdoZW4gb3V0cHV0dGluZyBlLmcuICBQSFAgY29kZSBpbgorICBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uICBQYXRjaCBieSBOZWlsIE11bGxlci4KKworLSBJc3N1ZSAjNzg2OTogbG9nZ2luZzogSW1wcm92ZWQgZGlhZ25vc3RpYyBmb3IgZm9ybWF0LXRpbWUgZXJyb3JzLgorCistIElzc3VlICM3ODY4OiBsb2dnaW5nOiBBZGRlZCBsb2dnZXJDbGFzcyBhdHRyaWJ1dGUgdG8gTWFuYWdlci4KKworLSBJc3N1ZSAjNzg1MTogbG9nZ2luZzogQ2xhcmlmaWNhdGlvbiBvbiBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKy0gSXNzdWUgIzQ3NzI6IFJhaXNlIGEgVmFsdWVFcnJvciB3aGVuIGFuIHVua25vd24gQmx1ZXRvb3RoIHByb3RvY29sIGlzCisgIHNwZWNpZmllZCwgcmF0aGVyIHRoYW4gZmFsbCB0aHJvdWdoIHRvIEFGX1BBQ0tFVCAoaW4gdGhlIGBgc29ja2V0YGAgbW9kdWxlKS4KKyAgQWxzbywgcmFpc2UgVmFsdWVFcnJvciByYXRoZXIgdGhhbiBUeXBlRXJyb3Igd2hlbiBhbiB1bmtub3duIFRJUEMgYWRkcmVzcworICB0eXBlIGlzIHNwZWNpZmllZC4gIFBhdGNoIGJ5IEJyaWFuIEN1cnRpbi4KKworLSBsb2dnaW5nOiBJbXBsZW1lbnRlZCBQRVAgMzkxLgorCistIElzc3VlICM2OTM5OiBGaXggZmlsZSBJL08gb2JqZWN0cyBpbiB0aGUgYGlvYCBtb2R1bGUgdG8ga2VlcCB0aGUgb3JpZ2luYWwKKyAgZmlsZSBwb3NpdGlvbiB3aGVuIGNhbGxpbmcgYHRydW5jYXRlKClgLiAgSXQgd291bGQgcHJldmlvdXNseSBjaGFuZ2UgdGhlIGZpbGUKKyAgcG9zaXRpb24gdG8gdGhlIGdpdmVuIGFyZ3VtZW50LCB3aGljaCBnb2VzIGFnYWluc3QgdGhlIHRyYWRpdGlvbiBvZgorICBmdHJ1bmNhdGUoKSBhbmQgb3RoZXIgdHJ1bmNhdGlvbiBBUElzLiAgUGF0Y2ggYnkgUGFzY2FsIENoYW1ib24uCisKKy0gSXNzdWUgIzc2MTA6IFJld29ya2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnRlcm5hbCBgYHppcGZpbGUuWmlwRXh0RmlsZWBgCisgIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGZpbGVzIHN0b3JlZCBpbnNpZGUgYW4gYXJjaGl2ZS4gIFRoZSBuZXcKKyAgaW1wbGVtZW50YXRpb24gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIgYW5kIGNhbiBiZSB3cmFwcGVkIGluIGEKKyAgYGBpby5CdWZmZXJlZFJlYWRlcmBgIG9iamVjdCBmb3IgbW9yZSBzcGVlZHVwcy4gIEl0IGFsc28gc29sdmVzIGFuIGlzc3VlCisgIHdoZXJlIGludGVybGVhdmVkIGNhbGxzIHRvIGBgcmVhZCgpYGAgYW5kIGBgcmVhZGxpbmUoKWBgIGdpdmUgd3JvbmcgcmVzdWx0cy4KKyAgUGF0Y2ggYnkgTmlyIEFpZGVzLgorCistIElzc3VlICM3NzkyOiBSZWdpc3RlcmluZyBub24tY2xhc3NlcyB0byBBQkNzIHJhaXNlZCBhbiBvYnNjdXJlIGVycm9yLgorCistIFJlbW92ZWQgdGhlIGRlcHJlY2F0ZWQgZnVuY3Rpb25zIGBgdmVyaWZ5KClgYCBhbmQgYGB2ZXJlcSgpYGAgZnJvbQorICBMaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkuCisKKy0gSXNzdWUgIzc3NzM6IEZpeCBhbiBVbmJvdW5kTG9jYWxFcnJvciBpbiBgYHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbigpYGAKKyAgd2hlbiB0aGUgcmVsZWFzZSBmaWxlIGlzIGVtcHR5LgorCistIElzc3VlICM3NzQ4OiBTaW5jZSB1bmljb2RlIHZhbHVlcyBhcmUgc3VwcG9ydGVkIGZvciBzb21lIG1ldGFkYXRhIG9wdGlvbnMgaW4KKyAgRGlzdHV0aWxzLCB0aGUgRGlzdHJpYnV0aW9uTWV0YWRhdGEgZ2V0XyogbWV0aG9kcyB3aWxsIG5vdyByZXR1cm4gYW4gdXRmLTgKKyAgZW5jb2RlZCBzdHJpbmcgZm9yIHRoZW0uICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdXBsb2FkIGFuZCByZWdpc3RlciBjb21tYW5kcworICBzZW5kIHRoZSBjb3JyZWN0IHZhbHVlcyB0byBQeVBJIHdpdGhvdXQgYW55IGVycm9yLgorCistIElzc3VlICMxNjcwNzY1OiBQcmV2ZW50IGBgZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvcmBgIGZyb20gcmUtd3JhcHBpbmcKKyAgaGVhZGVycyBpbiBtdWx0aXBhcnQvc2lnbmVkIE1JTUUgcGFydHMsIHdoaWNoIGZpeGVzIG9uZSBvZiB0aGUgc291cmNlcyBvZgorICBpbnZhbGlkIG1vZGlmaWNhdGlvbnMgdG8gc3VjaCBwYXJ0cyBieSBHZW5lcmF0b3IuCisKKy0gSXNzdWUgIzc3MDE6IEZpeCBjcmFzaCBpbiBgYGJpbmFzY2lpLmIyYV91dSgpYGAgaW4gZGVidWcgbW9kZSB3aGVuIGdpdmVuIGEKKyAgMS1ieXRlIGFyZ3VtZW50LiAgUGF0Y2ggYnkgVmljdG9yIFN0aW5uZXIuCisKKy0gSXNzdWUgIzMyOTk6IEZpeCBwb3NzaWJsZSBjcmFzaCBpbiB0aGUgX3NyZSBtb2R1bGUgd2hlbiBnaXZlbiBiYWQgYXJndW1lbnQKKyAgdmFsdWVzIGluIGRlYnVnIG1vZGUuICBQYXRjaCBieSBWaWN0b3IgU3Rpbm5lci4KKworLSBJc3N1ZSAjNzcwMzogQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgYnVmZmVyIEFQSSB0byBmdW5jdGlvbnMgb2YgdGhlIGJpbmFzY2lpCisgIG1vZHVsZS4gIEJhY2twb3J0ZWQgZnJvbSBweTNrIGJ5IEZsb3JlbnQgWGljbHVuYSwgd2l0aCBzb21lIGFkZGl0aW9uYWwgdGVzdHMuCisKKy0gSXNzdWUgIzI4NDY6IEFkZCBzdXBwb3J0IGZvciBnemlwLkd6aXBGaWxlIHJlYWRpbmcgemVyby1wYWRkZWQgZmlsZXMuICBQYXRjaAorICBieSBCcmlhbiBDdXJ0aW4uCisKKy0gSXNzdWUgIzU4Mjc6IE1ha2Ugc3VyZSB0aGF0IG5vcm1wYXRoIHByZXNlcnZlcyB1bmljb2RlLiAgSW5pdGlhbCBwYXRjaCBieQorICBNYXR0IEdpdWNhLgorCistIElzc3VlICM1MzcyOiBEcm9wIHRoZSByZXVzZSBvZiAubyBmaWxlcyBpbiBEaXN0dXRpbHMnIGNjb21waWxlciAoc2luY2UKKyAgRXh0ZW5zaW9uIGV4dHJhIG9wdGlvbnMgbWF5IGNoYW5nZSB0aGUgb3V0cHV0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIC5jIGZpbGUpLgorICBJbml0aWFsIHBhdGNoIGJ5IENvbGxpbiBXaW50ZXIuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIEV4cGF0OiBGaXggRG9TIHZpYSBYTUwgZG9jdW1lbnQgd2l0aCBtYWxmb3JtZWQgVVRGLTggc2VxdWVuY2VzCisgIChDVkVfMjAwOV8zNTYwKS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzc2MzI6IFdoZW4gUHlfVVNJTkdfTUVNT1JZX0RFQlVHR0VSIGlzIGRlZmluZWQsIGRpc2FibGUgdGhlIHByaXZhdGUKKyAgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lIGluIGR0b2EuYyBhbmQgdXNlIFB5TWVtX01hbGxvYyBhbmQgUHlNZW1fRnJlZQorICBpbnN0ZWFkLiAgQWxzbyBkaXNhYmxlIGNhY2hpbmcgb2YgcG93ZXJzIG9mIDUuCisKKy0gSXNzdWUgIzc2NTg6IEVuc3VyZSB0aGF0IHRoZSBuZXcgcHl0aG9udyBleGVjdXRhYmxlIHdvcmtzIG9uIE9TWCAxMC40CisKKy0gSXNzdWUgIzc3MTQ6IFVzZSBgYGdjYyAtZHVtcHZlcnNpb25gYCB0byBkZXRlY3QgdGhlIHZlcnNpb24gb2YgR0NDIG9uCisgIE1hY09TWC4KKwogLSBJc3N1ZSAjNzY2MTogQWxsb3cgY3R5cGVzIHRvIGJlIGJ1aWx0IGZyb20gYSBub24tQVNDSUkgZGlyZWN0b3J5IHBhdGguCiAgIFBhdGNoIGJ5IEZsb3JlbnQgWGljbHVuYS4KIAotLSBJc3N1ZSAjNzU4OTogT25seSBidWlsZCB0aGUgbmlzIG1vZHVsZSB3aGVuIHRoZSBjb3JyZWN0IGhlYWRlciBmaWxlcyBhcmUKLSAgZm91bmQuCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KIAotLSBTd2l0Y2ggdG8gT3BlblNTTCAwLjkuOGwgb24gV2luZG93cy4KKy0gaW9iZW5jaCAoYSBmaWxlIEkvTyBiZW5jaG1hcmspIGFuZCBjY2JlbmNoIChhIGNvbmN1cnJlbmN5IGJlbmNobWFyaykgd2VyZQorICBhZGRlZCB0byB0aGUgYGBUb29sc2BgIGRpcmVjdG9yeS4gIFRoZXkgd2VyZSBwcmV2aW91c2x5IGxpdmluZyBpbiB0aGUKKyAgc2FuZGJveC4KIAotLSBJc3N1ZSAjNjYwMzogQ2hhbmdlIFJFQURfVElNRVNUQU1QIG1hY3JvIGluIGNldmFsLmMgc28gdGhhdCBpdAotICBjb21waWxlcyBjb3JyZWN0bHkgdW5kZXIgZ2NjIG9uIHg4Ni02NC4gIFRoaXMgZml4ZXMgYSByZXBvcnRlZAotICBwcm9ibGVtIHdpdGggdGhlIC0td2l0aC10c2MgYnVpbGQgb24geDg2LTY0LgorVGVzdHMKKy0tLS0tCiAKLS0gRW5zdXJlIHRoYXQgaXQgcG9zc2libGUgdG8gYnVpbGQgZXh0ZW5zaW9ucyBmb3IgdGhlIGRlZmF1bHQKLSAgYmluYXJ5IGRpc3RyaWJ1dGlvbiBvbiBPU1ggMTAuNiBldmVuIHdoZW4gdGhlIHVzZXIgZG9lcyBub3QKLSAgaGF2ZSB0aGUgMTAuNHUgU0RLIGluc3RhbGxlZC4KLQotLSBJc3N1ZSAjNzU0MTogd2hlbiB1c2luZyBgYHB5dGhvbi1jb25maWdgYCB3aXRoIGEgZnJhbWV3b3JrIGluc3RhbGwgdGhlCi0gIGNvbXBpbGVyIG1pZ2h0IHVzZSB0aGUgd3JvbmcgbGlicmFyeS4KKy0gaXNzdWUgIzc3Mjg6IHRlc3RfdGltZW91dCB3YXMgY2hhbmdlZCB0byB1c2UgYGB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KClgYAorICBpbnN0ZWFkIG9mIGEgaGFyZCBjb2RlZCBwb3J0LgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKLS0gVXBkYXRpbmcgYFVzaW5nIFB5dGhvbmAgZG9jdW1lbnRhdGlvbiB0byBpbmNsdWRlIGRlc2NyaXB0aW9uIG9mIENQeXRob24ncwotICAtSiwgLVUgYW5kIC1YIG9wdGlvbnMuCistIFVwZGF0ZWQgIlVzaW5nIFB5dGhvbiIgZG9jdW1lbnRhdGlvbiB0byBpbmNsdWRlIGRlc2NyaXB0aW9uIG9mIENQeXRob24ncyAtSiwKKyAgLVUgYW5kIC1YIG9wdGlvbnMuCiAKLS0gVXBkYXRlIHB5dGhvbiBtYW51YWwgcGFnZSAob3B0aW9ucyAtQiwgLU8wLCAtcywgZW52aXJvbm1lbnQgdmFyaWFibGVzCistIFVwZGF0ZWQgUHl0aG9uIG1hbnVhbCBwYWdlIChvcHRpb25zIC1CLCAtTzAsIC1zLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgUFlUSE9ORE9OVFdSSVRFQllURUNPREUsIFBZVEhPTk5PVVNFUlNJVEUpLgogCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNyBhbHBoYSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDIwMTAtMDEtMDkqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIFRoZSBgYF9fY29tcGxleF9fKClgYCBtZXRob2QgaXMgbm93IGxvb2tlZCB1cCBvbiB0aGUgY2xhc3Mgb2YgaW5zdGFuY2VzIHRvCisgIG1ha2UgaXQgY29uc2lzdGVudCB3aXRoIG90aGVyIHNwZWNpYWwgbWV0aG9kcy4KKworLSBJc3N1ZSAjNzQ2MjogSW1wbGVtZW50IHRoZSBzdHJpbmdsaWIgZmFzdCBzZWFyY2ggYWxnb3JpdGhtIGZvciB0aGUgYHJmaW5kYCwKKyAgYHJpbmRleGAsIGByc3BsaXRgIGFuZCBgcnBhcnRpdGlvbmAgbWV0aG9kcy4gIFBhdGNoIGJ5IEZsb3JlbnQgWGljbHVuYS4KKworLSBJc3N1ZSAjNTA4MDogQSBudW1iZXIgb2YgZnVuY3Rpb25zIGFuZCBtZXRob2RzIHByZXZpb3VzbHkgcHJvZHVjZWQgYQorICBEZXByZWNhdGlvbldhcm5pbmcgd2hlbiBwYXNzZWQgYSBmbG9hdCBhcmd1bWVudCB3aGVyZSBhbiBpbnRlZ2VyIHdhcyBleHBlY3RlZC4KKyAgVGhlc2UgZnVuY3Rpb25zIGFuZCBtZXRob2RzIG5vdyByYWlzZSBUeXBlRXJyb3IgaW5zdGVhZC4gIFRoZSBtYWpvcml0eSBvZiB0aGUKKyAgZWZmZWN0cyBvZiB0aGlzIGNoYW5nZSBhcmUgaW4gdGhlIGV4dGVuc2lvbiBtb2R1bGVzLCBidXQgc29tZSBjb3JlIGZ1bmN0aW9ucworICBhbmQgbWV0aG9kcyBhcmUgYWZmZWN0ZWQ6IG5vdGFibHkgdGhlICdjaHInLCAncmFuZ2UnIGFuZCAneHJhbmdlJyBidWlsdGlucywKKyAgYW5kIG1hbnkgdW5pY29kZS9zdHIgbWV0aG9kcy4KKworLSBJc3N1ZSAjNzYwNDogRGVsZXRpbmcgYW4gdW5zZXQgc2xvdHRlZCBhdHRyaWJ1dGUgZGlkIG5vdCByYWlzZSBhbgorICBBdHRyaWJ1dGVFcnJvci4KKworLSBJc3N1ZSAjNzUzNDogRml4IGhhbmRsaW5nIG9mIElFRUUgc3BlY2lhbHMgKGluZmluaXRpZXMsIG5hbnMsIG5lZ2F0aXZlIHplcm8pCisgIGluICoqIG9wZXJhdG9yLiAgVGhlIGJlaGF2aW91ciBub3cgY29uZm9ybXMgdG8gdGhhdCBkZXNjcmliZWQgaW4gQzk5IEFubmV4IEYuCisKKy0gSXNzdWUgIzc1Nzk6IFRoZSBtc3ZjcnQgbW9kdWxlIG5vdyBoYXMgZG9jc3RyaW5ncyBmb3IgYWxsIGl0cyBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzc0MTM6IFBhc3NpbmcgJ1wwJyBhcyB0aGUgc2VwYXJhdG9yIHRvIGRhdGV0aW1lLmRhdGV0aW1lLmlzb2Zvcm1hdCgpCisgIHVzZWQgdG8gZHJvcCB0aGUgdGltZSBwYXJ0IG9mIHRoZSByZXN1bHQuCisKKy0gSXNzdWUgIzE4MTE6IEltcHJvdmUgYWNjdXJhY3kgYW5kIGNyb3NzLXBsYXRmb3JtIGNvbnNpc3RlbmN5IGZvciB0cnVlIGRpdmlzaW9uCisgIG9mIGludGVnZXJzOiB0aGUgcmVzdWx0IG9mIGEvYiBpcyBub3cgY29ycmVjdGx5IHJvdW5kZWQgZm9yIGludHMgYSBhbmQgYiAoYXQKKyAgbGVhc3Qgb24gSUVFRSA3NTQgcGxhdGZvcm1zKSwgYW5kIGluIHBhcnRpY3VsYXIgZG9lcyBub3QgZGVwZW5kIG9uIHRoZQorICBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGxvbmcuCisKKy0gSXNzdWUgIzYxMDg6IGBgdW5pY29kZShleGNlcHRpb24pYGAgYW5kIGBgc3RyKGV4Y2VwdGlvbilgYCBzaG91bGQgcmV0dXJuIHRoZQorICBzYW1lIG1lc3NhZ2Ugd2hlbiBvbmx5IGBgX19zdHJfXygpYGAgKGFuZCBub3QgYGBfX3VuaWNvZGVfXygpYGApIGlzIG92ZXJyaWRkZW4KKyAgaW4gdGhlIHN1YmNsYXNzLgorCistIElzc3VlICM2ODM0OiBSZXBsYWNlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlICdweXRob24nIGFuZCAncHl0aG9udycKKyAgZXhlY3V0YWJsZXMgb24gT1NYLgorCisgIFRoZXNlIGV4ZWN1dGFibGVzIG5vdyB3b3JrIHByb3Blcmx5IHdpdGggdGhlIGFyY2goMSkgY29tbWFuZDogYGBhcmNoIC1wcGMKKyAgcHl0aG9uYGAgd2lsbCBzdGFydCBhIHVuaXZlcnNhbCBiaW5hcnkgdmVyc2lvbiBvZiBweXRob24gaW4gUFBDIG1vZGUgKHVubGlrZQorICBwcmV2aW91cyByZWxlYXNlcykuCisKKy0gSXNzdWUgIzE2ODAxNTk6IFVuaWNvZGUgY29lcmNpb24gZHVyaW5nIGFuICdpbicgb3BlcmF0aW9uIG5vIGxvbmdlciBtYXNrcyB0aGUKKyAgdW5kZXJseWluZyBlcnJvciB3aGVuIHRoZSBjb2VyY2lvbiBmYWlscyBmb3IgdGhlIGxlZnQgaGFuZCBvcGVyYW5kLgorCistIElzc3VlICM3NDkxOiBNZXRhY2xhc3MncyBfX2NtcF9fIG1ldGhvZCB3YXMgaWdub3JlZC4KKworLSBJc3N1ZSAjNzQ2NjogU2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGlzIGNhbGxlZCBpbiB0aGUKKyAgbWlkZGxlIG9mIHBvcHVsYXRpbmcgYSB0dXBsZS4gIFBhdGNoIGJ5IEZsb3JlbnQgWGljbHVuYS4KKworCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzY5NjM6IEFkZGVkICJtYXh0YXNrc3BlcmNoaWxkIiBhcmd1bWVudCB0byBgYG11bHRpcHJvY2Vzc2luZy5Qb29sYGAsCisgIGFsbG93aW5nIGZvciBhIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIHdpdGhpbiB0aGUgcG9vbCB0byBiZSBjb21wbGV0ZWQgYnkgdGhlCisgIHdvcmtlciBiZWZvcmUgdGhhdCB3b3JrZXIgaXMgdGVybWluYXRlZCwgYW5kIGEgbmV3IG9uZSBjcmVhdGVkIHRvIHJlcGxhY2UgaXQuCisKKy0gSXNzdWUgIzc2MTc6IE1ha2Ugc3VyZSBkaXN0dXRpbHMudW5peGNjb21waWxlci5Vbml4Q0NvbXBpbGVyIHJlY29nbml6ZXMgZ2NjCisgIHdoZW4gaXQgaGFzIGEgZnVsbHkgcXVhbGlmaWVkIGNvbmZpZ3VyYXRpb24gcHJlZml4LiAgSW5pdGlhbCBwYXRjaCBieQorICBBcmZyZXZlci4KKworLSBJc3N1ZSAjNzA5MjogUmVtb3ZlIHB5M2sgd2FybmluZyB3aGVuIGltcG9ydGluZyBjUGlja2xlLiAgMnRvMyBoYW5kbGVzCisgIHJlbmFtaW5nIG9mIGBjUGlja2xlYCB0byBgcGlja2xlYC4gIFRoZSB3YXJuaW5nIHdhcyBhbm5veWluZyBzaW5jZSB0aGVyZSdzIG5vCisgIGFsdGVybmF0aXZlIHRvIGNQaWNrbGUgaWYgeW91IGNhcmUgYWJvdXQgcGVyZm9ybWFuY2UuICBQYXRjaCBieSBGbG9yZW50CisgIFhpY2x1bmEuCisKKy0gSXNzdWUgIzc0NTU6IEZpeCBwb3NzaWJsZSBjcmFzaCBpbiBjUGlja2xlIG9uIGludmFsaWQgaW5wdXQuICBQYXRjaCBieSBWaWN0b3IKKyAgU3Rpbm5lci4KKworLSBJc3N1ZSAjNzA5MjogRml4IHRoZSBEZXByZWNhdGlvbldhcm5pbmdzIGVtaXR0ZWQgYnkgdGhlIHN0YW5kYXJkIGxpYnJhcnkgd2hlbgorICB1c2luZyB0aGUgLTMgZmxhZy4gIFBhdGNoIGJ5IEZsb3JlbnQgWGljbHVuYS4KKworLSBJc3N1ZSAjNzQ3MTogSW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgR3ppcEZpbGUncyBidWZmZXJpbmcgbWVjaGFuaXNtLCBhbmQKKyAgbWFrZSBpdCBpbXBsZW1lbnQgdGhlIGBgaW8uQnVmZmVyZWRJT0Jhc2VgYCBBQkMgdG8gYWxsb3cgZm9yIGZ1cnRoZXIgc3BlZWR1cHMKKyAgYnkgd3JhcHBpbmcgaXQgaW4gYW4gYGBpby5CdWZmZXJlZFJlYWRlcmBgLiAgUGF0Y2ggYnkgTmlyIEFpZGVzLgorCistIElzc3VlICMzOTcyOiBgYGh0dHBsaWIuSFRUUENvbm5lY3Rpb25gYCBub3cgYWNjZXB0cyBhbiBvcHRpb25hbCBzb3VyY2VfYWRkcmVzcworICBwYXJhbWV0ZXIgdG8gYWxsb3cgc3BlY2lmeWluZyB3aGVyZSB5b3VyIGNvbm5lY3Rpb25zIGNvbWUgZnJvbS4KKworLSBgYHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigpYGAgbm93IGFjY2VwdHMgYW4gb3B0aW9uYWwgc291cmNlX2FkZHJlc3MKKyAgcGFyYW1ldGVyLgorCistIElzc3VlICM1NTExOiBgYHppcGZpbGUuWmlwRmlsZWBgIGNhbiBub3cgYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlci4KKyAgSW5pdGlhbCBwYXRjaCBieSBCcmlhbiBDdXJ0aW4uCisKKy0gRGlzdHV0aWxzIG5vdyBjb3JyZWN0bHkgaWRlbnRpZmllcyB0aGUgYnVpbGQgYXJjaGl0ZWN0dXJlIGFzICJ4ODZfNjQiIHdoZW4KKyAgYnVpbGRpbmcgb24gT1NYIDEwLjYgd2l0aG91dCAiLWFyY2giIGZsYWdzLgorCistIElzc3VlICM3NTU2OiBEaXN0dXRpbHMnIG1zdmM5Y29tcGlsZXIgbm93IG9wZW5zIHRoZSBNU1ZDIE1hbmlmZXN0IGZpbGUgaW4gdGV4dAorICBtb2RlLgorCistIElzc3VlICM3NTUyOiBSZW1vdmVkIGxpbmUgZmVlZCBpbiB0aGUgYmFzZTY0IEF1dGhvcml6YXRpb24gaGVhZGVyIGluIHRoZQorICBEaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQgdG8gYXZvaWQgYW4gZXJyb3Igd2hlbiBQeVBJIHJlYWRzIGl0LiAgVGhpcyBvY2N1cnMgb24KKyAgbG9uZyBwYXNzd29yZHMuICBJbml0aWFsIHBhdGNoIGJ5IEpQIFN0LiBQaWVycmUuCisKKy0gSXNzdWUgIzcyMzE6IHVybGxpYjIgY2Fubm90IGhhbmRsZSBodHRwcyB3aXRoIHByb3h5IHJlcXVpcmluZyBhdXRoLiAgUGF0Y2ggYnkKKyAgVGF0c3VoaXJvIFRzdWppa2F3YS4KKworLSBJc3N1ZSAjNzM0OTogTWFrZSBtZXRob2RzIG9mIGZpbGUgb2JqZWN0cyBpbiB0aGUgaW8gbW9kdWxlIGFjY2VwdCBOb25lIGFzIGFuCisgIGFyZ3VtZW50IHdoZXJlIGZpbGUtbGlrZSBvYmplY3RzIChpZSBTdHJpbmdJTyBhbmQgQnl0ZXNJTykgYWNjZXB0IHRoZW0gdG8gbWVhbgorICB0aGUgc2FtZSBhcyBwYXNzaW5nIG5vIGFyZ3VtZW50LgorCistIElzc3VlICM3MzQ4OiBgYFN0cmluZ0lPLlN0cmluZ0lPLnJlYWRsaW5lKC0xKWBgIG5vdyBhY3RzIGFzIGlmIGl0IGdvdCBubworICBhcmd1bWVudCBsaWtlIG90aGVyIGZpbGUgb2JqZWN0cy4KKworLSBJc3N1ZSAjNzM1NzogdGFyZmlsZSBubyBsb25nZXIgc3VwcHJlc3NlcyBmYXRhbCBleHRyYWN0aW9uIGVycm9ycyBieSBkZWZhdWx0LgorCistIElzc3VlICM3NDcwOiBsb2dnaW5nOiBGaXggYnVnIGluIFVuaWNvZGUgZW5jb2RpbmcgZmFsbGJhY2suCisKKy0gSXNzdWUgIzU5NDk6IEZpeGVkIElNQVA0X1NTTCBoYW5nIHdoZW4gdGhlIElNQVAgc2VydmVyIHJlc3BvbnNlIGlzIG1pc3NpbmcKKyAgcHJvcGVyIGVuZC1vZi1saW5lIHRlcm1pbmF0aW9uLgorCistIElzc3VlICM3NDU3OiBBZGRlZCBhIHJlYWRfcGtnX2ZpbGUgbWV0aG9kIHRvCisgIGBgZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uTWV0YWRhdGFgYC4KKworLSBJc3N1ZSAjMzc0NTogVW5kbyB0aGUgMi43YTEgY2hhbmdlIHRvIGhhdmUgaGFzaGxpYiB0byByZWplY3QgdW5pY29kZSBhbmQgbm9uCisgIGJ1ZmZlciBBUEkgc3VwcG9ydGluZyBvYmplY3RzIGFzIGlucHV0LiAgVGhhdCBiZWhhdmlvciBpcyBmb3IgMy54IG9ubHkuCisKK0MtQVBJCistLS0tLQorCistIElzc3VlICM3NzY3OiBOZXcgZnVuY3Rpb24gYGBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KClgYCBhZGRlZCwgYW5hbG9nb3VzCisgIHRvIGBgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KClgYC4KKworLSBJc3N1ZSAjNTA4MDogVGhlIGFyZ3VtZW50IHBhcnNpbmcgZnVuY3Rpb25zIGBgUHlBcmdfUGFyc2VUdXBsZSgpYGAsCisgIGBgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKClgYCwgYGBQeUFyZ19WYVBhcnNlKClgYCwKKyAgYGBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcygpYGAgYW5kIGBgUHlBcmdfUGFyc2UoKWBgIG5vIGxvbmdlciBhY2NlcHQKKyAgZmxvYXQgYXJndW1lbnRzIGZvciBpbnRlZ2VyIGZvcm1hdCBjb2RlcyAob3RoZXIgdGhhbiAnTCcpOiBwcmV2aW91c2x5IGFuCisgIGF0dGVtcHQgdG8gcGFzcyBhIGZsb2F0IHJlc3VsdGVkIGluIGEgRGVwcmVjYXRpb25XYXJuaW5nOyBub3cgaXQgZ2l2ZXMgYQorICBUeXBlRXJyb3IuICBGb3IgdGhlICdMJyBmb3JtYXQgY29kZSAod2hpY2ggcHJldmlvdXNseSBoYWQgbm8gd2FybmluZykgdGhlcmUgaXMKKyAgbm93IGEgRGVwcmVjYXRpb25XYXJuaW5nLgorCistIElzc3VlICM3MDMzOiBGdW5jdGlvbiBgYFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MoKWBgIGFkZGVkLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjNjQ5MTogQWxsb3cgLS13aXRoLWRibWxpYm9yZGVyIHRvIHNwZWNpZnkgdGhhdCBubyBkYm1zIHdpbGwgYmUgYnVpbHQuCisKKy0gSXNzdWUgIzY5NDM6IFVzZSBwa2ctY29uZmlnIHRvIGZpbmQgdGhlIGxpYmZmaSBoZWFkZXJzIHdoZW4gdGhlCisgIGBgLS13aXRoLXN5c3RlbS1mZmlgYCBmbGFnIGlzIHVzZWQuCisKKy0gSXNzdWUgIzc2MDk6IEFkZCBhIGBgLS13aXRoLXN5c3RlbS1leHBhdGBgIG9wdGlvbiB0aGF0IGNhdXNlcyB0aGUgc3lzdGVtJ3MKKyAgZXhwYXQgbGlicmFyeSB0byBiZSB1c2VkIGZvciB0aGUgcHlleHBhdCBtb2R1bGUgaW5zdGVhZCBvZiB0aGUgb25lIGluY2x1ZGVkCisgIHdpdGggUHl0aG9uLgorCistIElzc3VlICM3NTg5OiBPbmx5IGJ1aWxkIHRoZSBuaXMgbW9kdWxlIHdoZW4gdGhlIGNvcnJlY3QgaGVhZGVyIGZpbGVzIGFyZQorICBmb3VuZC4KKworLSBTd2l0Y2ggdG8gT3BlblNTTCAwLjkuOGwgYW5kIHNxbGl0ZSAzLjYuMjEgb24gV2luZG93cy4KKworLSBJc3N1ZSAjNzU0MTogd2hlbiB1c2luZyBgYHB5dGhvbi1jb25maWdgYCB3aXRoIGEgZnJhbWV3b3JrIGluc3RhbGwgdGhlCisgIGNvbXBpbGVyIG1pZ2h0IHVzZSB0aGUgd3JvbmcgbGlicmFyeS4KKwogVGVzdHMKIC0tLS0tCiAKLS0gaXNzdWUgIzc3Mjg6IHRlc3RfdGltZW91dCB3YXMgY2hhbmdlZCB0byB1c2UgdGVzdF9zdXBwb3J0LmJpbmRfcG9ydAotICBpbnN0ZWFkIG9mIGEgaGFyZCBjb2RlZCBwb3J0LgorLSBJc3N1ZSAjNzM3NjogSW5zdGVhZCBvZiBydW5uaW5nIGEgc2VsZi10ZXN0ICh3aGljaCB3YXMgZmFpbGluZykgd2hlbiBjYWxsZWQKKyAgd2l0aCBubyBhcmd1bWVudHMsIGRvY3Rlc3QucHkgbm93IGdpdmVzIGEgdXNhZ2UgbWVzc2FnZS4KKworLSBJc3N1ZSAjNzM5NjogRml4IHJlZ3J0ZXN0IC1zLCB3aGljaCB3YXMgYnJva2VuIGJ5IHRoZSAtaiBlbmhhbmNlbWVudC4KIAogLSBJc3N1ZSAjNzQ5ODogdGVzdF9tdWx0aXByb2Nlc3Npbmcgbm93IHVzZXMgdGVzdF9zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQKICAgaW5zdGVhZCBvZiBhIGhhcmRjb2RlZCBwb3J0IG51bWJlciBpbiB0ZXN0X3JhcGlkX3Jlc3RhcnQuCiAKLS0gSXNzdWUgIzc0MzE6IHVzZSBURVNURk4gaW4gdGVzdF9saW5lY2FjaGUgaW5zdGVhZCBvZiB0cnlpbmcgdG8gY3JlYXRlIGEKLSAgZmlsZSBpbiB0aGUgTGliL3Rlc3QgZGlyZWN0b3J5LCB3aGljaCBtaWdodCBiZSByZWFkLW9ubHkgZm9yIHRoZQotICB1c2VyIHJ1bm5pbmcgdGhlIHRlc3RzLgogCi0tIElzc3VlICM3MzI0OiBhZGQgYSBzYW5pdHkgY2hlY2sgdG8gcmVncnRlc3QgYXJndW1lbnQgcGFyc2luZyB0bwotICBjYXRjaCB0aGUgY2FzZSBvZiBhbiBvcHRpb24gd2l0aCBubyBoYW5kbGVyLgorV2hhdCdzIE5ldyBpbiBQeXRob24gMi43IGFscGhhIDEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLS0gSXNzdWUgIzcyOTU6IERvIG5vdCB1c2UgYSBoYXJkY29kZWQgZmlsZSBuYW1lIGluIHRlc3RfdGFyZmlsZS4KLQotLSBJc3N1ZSAjNzI3MDogQWRkIHNvbWUgZGVkaWNhdGVkIHVuaXQgdGVzdHMgZm9yIG11bHRpLXRocmVhZCBzeW5jaHJvbml6YXRpb24KLSAgcHJpbWl0aXZlcyBzdWNoIGFzIExvY2ssIFJMb2NrLCBDb25kaXRpb24sIEV2ZW50IGFuZCBTZW1hcGhvcmUuCi0KLS0gSXNzdWUgIzcwNTU6IHRlc3RfX19hbGxfXyBub3cgZ3JlZWRpbHkgZGV0ZWN0cyBhbGwgbW9kdWxlcyB3aGljaCBoYXZlIGFuCi0gIF9fYWxsX18gYXR0cmlidXRlLCByYXRoZXIgdGhhbiB1c2luZyBhIGhhcmRjb2RlZCBhbmQgaW5jb21wbGV0ZSBsaXN0LgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNi40IGZpbmFsPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI1LU9jdC0yMDA5KgorKlJlbGVhc2UgZGF0ZTogMjAwOS0xMi0wNSoKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLUxpYnJhcnkKLS0tLS0tLS0KKy0gSXNzdWUgIzc0MTk6IGBgbG9jYWxlLnNldGxvY2FsZSgpYGAgY291bGQgY3Jhc2ggdGhlIGludGVycHJldGVyIG9uIFdpbmRvd3MKKyAgd2hlbiBjYWxsZWQgd2l0aCBpbnZhbGlkIHZhbHVlcy4KIAorLSBJc3N1ZSAjMzM4MjogJ0YnIGZvcm1hdHRpbmcgZm9yIGZsb2F0IGFuZCBjb21wbGV4IG5vdyBjb252ZXJ0IHRoZSByZXN1bHQgdG8KKyAgdXBwZXIgY2FzZS4gIFRoaXMgb25seSBhZmZlY3RzICdpbmYnIGFuZCAnbmFuJywgc2luY2UgJ2YnIG5vIGxvbmdlciBjb252ZXJ0cworICB0byAnZycgZm9yIGxhcmdlIHZhbHVlcy4KIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjRyYzI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0gUmVtb3ZlIHN3aXRjaCBmcm9tICIlZiIgZm9ybWF0dGluZyB0byAiJWciIGZvcm1hdHRpbmcgZm9yIGZsb2F0cyBsYXJnZXIgdGhhbgorICAxZTUwIGluIGFic29sdXRlIHZhbHVlLgogCi0qUmVsZWFzZSBkYXRlOiAxOC1PY3QtMjAwOSoKKy0gUmVtb3ZlIHJlc3RyaWN0aW9ucyBvbiBwcmVjaXNpb24gd2hlbiBmb3JtYXR0aW5nIGZsb2F0cy4gIEUuZy4sICIlLjEyMGciICUKKyAgMWUtMTAwIHVzZWQgdG8gcmFpc2UgT3ZlcmZsb3dFcnJvciwgYnV0IG5vdyBnaXZlcyB0aGUgcmVxdWVzdGVkIDEyMAorICBzaWduaWZpY2FudCBkaWdpdHMgaW5zdGVhZC4KIAotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCistIEFkZCBQeTNrIHdhcm5pbmdzIGZvciBwYXJhbWV0ZXIgbmFtZXMgaW4gcGFyZW50aGVzZXMuCiAKLUxpYnJhcnkKLS0tLS0tLS0KKy0gSXNzdWUgIzczNjI6IEdpdmUgYSBwcm9wZXIgZXJyb3IgbWVzc2FnZSBmb3IgYGBkZWYgZigoeCk9Myk6IHBhc3NgYC4KIAotLSBJc3N1ZSAjNzExNTogRml4ZWQgdGhlIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIHRoYXQgaXMgZmFpbGluZyB3aGVuIHVzaW5nCi0gIHBhdGhzIGluIHRoZSBleHRlbnNpb24gbmFtZSBpbnN0ZWFkIG9mIGRvdHRlZCBuYW1lcy4KKy0gSXNzdWUgIzcwODU6IEZpeCBjcmFzaCB3aGVuIGltcG9ydGluZyBzb21lIGV4dGVuc2lvbnMgaW4gYSB0aHJlYWQgb24gTWFjT1NYCisgIDEwLjYuCiAKLS0gSXNzdWUgIzcxMjA6IGxvZ2dpbmc6IFJlbW92ZWQgaW1wb3J0IG9mIG11bHRpcHJvY2Vzc2luZyB3aGljaCBpcyBjYXVzaW5nCi0gIGNyYXNoIGluIEdBRS4KKy0gSXNzdWUgIzcxMTc6IGBgcmVwcih4KWBgIGZvciBhIGZsb2F0IHggcmV0dXJucyBhIHJlc3VsdCBiYXNlZCBvbiB0aGUgc2hvcnRlc3QKKyAgZGVjaW1hbCBzdHJpbmcgdGhhdCdzIGd1YXJhbnRlZWQgdG8gcm91bmQgYmFjayB0byB4IHVuZGVyIGNvcnJlY3Qgcm91bmRpbmcKKyAgKHdpdGggcm91bmQtaGFsZi10by1ldmVuIHJvdW5kaW5nIG1vZGUpLiAgUHJldmlvdXNseSBpdCBnYXZlIGEgc3RyaW5nIGJhc2VkIG9uCisgIHJvdW5kaW5nIHggdG8gMTcgZGVjaW1hbCBkaWdpdHMuICByZXByKHgpIGZvciBhIGNvbXBsZXggbnVtYmVyIGJlaGF2ZXMKKyAgc2ltaWxhcmx5LiAgT24gcGxhdGZvcm1zIHdoZXJlIHRoZSBjb3JyZWN0bHktcm91bmRlZCBzdHJ0b2QgYW5kIGR0b2EgY29kZSBpcworICBub3Qgc3VwcG9ydGVkIChzZWUgYmVsb3cpLCByZXByIGlzIHVuY2hhbmdlZC4KIAotLSBJc3N1ZSAjNzE0OTogZml4IGV4Y2VwdGlvbiBpbiB1cmxsaWIgd2hlbiBkZXRlY3RpbmcgcHJveHkgc2V0dGluZ3Mgb24gT1NYLgorLSBJc3N1ZSAjNzExNzogT24gYWxtb3N0IGFsbCBwbGF0Zm9ybXM6IGZsb2F0LXRvLXN0cmluZyBhbmQgc3RyaW5nLXRvLWZsb2F0CisgIGNvbnZlcnNpb25zIHdpdGhpbiBQeXRob24gYXJlIG5vdyBjb3JyZWN0bHkgcm91bmRlZC4gIFBsYWNlcyB0aGVzZSBjb252ZXJzaW9ucworICBvY2N1ciBpbmNsdWRlOiBzdHIgZm9yIGZsb2F0cyBhbmQgY29tcGxleCBudW1iZXJzOyB0aGUgZmxvYXQgYW5kIGNvbXBsZXgKKyAgY29uc3RydWN0b3JzOyBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBudW1lcmljIGZvcm1hdHRpbmc7IHNlcmlhbGl6YXRpb24gYW5kCisgIGRlc2VyaWFsaXphdGlvbiBvZiBmbG9hdHMgYW5kIGNvbXBsZXggbnVtYmVycyB1c2luZyBtYXJzaGFsLCBwaWNrbGUgYW5kIGpzb247CisgIHBhcnNpbmcgb2YgZmxvYXQgYW5kIGltYWdpbmFyeSBsaXRlcmFscyBpbiBQeXRob24gY29kZTsgRGVjaW1hbC10by1mbG9hdAorICBjb252ZXJzaW9uLgogCisgIFRoZSBjb252ZXJzaW9ucyB1c2UgYSBQeXRob24tYWRhcHRlZCB2ZXJzaW9uIG9mIERhdmlkIEdheSdzIHdlbGwta25vd24gZHRvYS5jLAorICBwcm92aWRpbmcgY29ycmVjdGx5LXJvdW5kZWQgc3RydG9kIGFuZCBkdG9hIEMgZnVuY3Rpb25zLiAgVGhpcyBjb2RlIGlzCisgIHN1cHBvcnRlZCBvbiBXaW5kb3dzLCBhbmQgb24gVW5peC1saWtlIHBsYXRmb3JtcyB1c2luZyBnY2MsIGljYyBvciBzdW5jYyBhcworICB0aGUgQyBjb21waWxlci4gIFRoZXJlIG1heSBiZSBhIHNtYWxsIG51bWJlciBvZiBwbGF0Zm9ybXMgb24gd2hpY2ggY29ycmVjdAorICBvcGVyYXRpb24gb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBndWFyYW50ZWVkLCBzbyB0aGUgY29kZSBpcyBub3QgdXNlZDogbm90YWJseSwKKyAgdGhpcyBhcHBsaWVzIHRvIHBsYXRmb3JtcyB3aGVyZSB0aGUgQyBkb3VibGUgZm9ybWF0IGlzIG5vdCBJRUVFIDc1NCBiaW5hcnk2NCwKKyAgYW5kIHRvIHBsYXRmb3JtcyBvbiB4ODYgaGFyZHdhcmUgd2hlcmUgdGhlIHg4NyBGUFUgaXMgc2V0IHRvIDY0LWJpdCBwcmVjaXNpb24KKyAgYW5kIFB5dGhvbidzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgdW5hYmxlIHRvIGRldGVybWluZSBob3cgdG8gY2hhbmdlIHRoZSBGUFUKKyAgcHJlY2lzaW9uLiAgT24gdGhlc2UgcGxhdGZvcm1zIGNvbnZlcnNpb25zIHVzZSB0aGUgcGxhdGZvcm0gc3RydG9kIGFuZCBkdG9hLAorICBhcyBiZWZvcmUuCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNi40cmMxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICM3MTE3OiBCYWNrcG9ydCByb3VuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIFB5dGhvbiAzLnguICBgYHJvdW5kKClgYCBub3cKKyAgdXNlcyB0aGUgY29ycmVjdGx5LXJvdW5kZWQgc3RyaW5nIDwtPiBmbG9hdCBjb252ZXJzaW9ucyBkZXNjcmliZWQgYWJvdmUgKHdoZW4KKyAgYXZhaWxhYmxlKSwgYW5kIHNvIHByb2R1Y2VzIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdHMgdGhhdCB3aWxsIGRpc3BsYXkgbmljZWx5CisgIHVuZGVyIHRoZSBmbG9hdCByZXByLiAgVGhlcmUgYXJlIHR3byByZWxhdGVkIHNtYWxsIGNoYW5nZXM6ICgxKSByb3VuZCBub3cKKyAgYWNjZXB0cyBhbnkgY2xhc3Mgd2l0aCBhbiBgYF9faW5kZXhfXygpYGAgbWV0aG9kIGZvciBpdHMgc2Vjb25kIGFyZ3VtZW50IChidXQKKyAgbm8gbG9uZ2VyIGFjY2VwdHMgZmxvYXRzIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50KSwgYW5kICgyKSBhbiBleGNlc3NpdmVseQorICBsYXJnZSBzZWNvbmQgaW50ZWdlciBhcmd1bWVudCAoZS5nLiwgYGByb3VuZCgxLjIzNCwgMTAqKjEwMClgYCkgbm8gbG9uZ2VyCisgIHJhaXNlcyBhbiBleGNlcHRpb24uCiAKLSpSZWxlYXNlIGRhdGU6IDA3LU9jdC0yMDA5KgorLSBJc3N1ZSAjMTc1NzEyNjogRml4IHRoZSBjeXJpbGxpYy1hc2lhbiBhbGlhcyBmb3IgdGhlIHB0Y3AxNTQgZW5jb2RpbmcuCiAKLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQorLSBGaXggc2V2ZXJhbCBpc3N1ZXMgd2l0aCBgYGNvbXBpbGUoKWBgLiAgVGhlIGlucHV0IGNhbiBub3cgY29udGFpbiBXaW5kb3dzIGFuZAorICBNYWMgbmV3bGluZXMgYW5kIGlzIG5vIGxvbmdlciByZXF1aXJlZCB0byBlbmQgaW4gYSBuZXdsaW5lLgogCi0tIElzc3VlICM3MDE5OiBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gdW5tYXJzaGFsbGluZyBiYWQgbG9uZyBkYXRhLCBpbnN0ZWFkCi0gIG9mIHByb2R1Y2luZyBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBQeXRob24gbG9uZ3MuCistIFJlbW92ZSBsZW5ndGggbGltaXRhdGlvbiB3aGVuIGNvbnN0cnVjdGluZyBhIGNvbXBsZXggbnVtYmVyIGZyb20gYSB1bmljb2RlCisgIHN0cmluZy4KIAotTGlicmFyeQotLS0tLS0tLQorLSBJc3N1ZSAjNzI0NDogYGBpdGVydG9vbHMuaXppcF9sb25nZXN0KClgYCBubyBsb25nZXIgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZAorICBkdXJpbmcgdGhlIGZvcm1hdGlvbiBvZiBhbiBvdXRwdXQgdHVwbGUuCiAKLS0gSXNzdWUgIzcwNjg6IEZpeGVkIHRoZSBwYXJ0aWFsIHJlbmFtaW5nIHRoYXQgb2NjdXJlZCBpbiByNzI1OTQuCistIElzc3VlICMxMDg3NDE4OiBCb29zdCBwZXJmb3JtYW5jZSBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yIGxvbmdzLgogCi0tIElzc3VlICM3MDY0OiBGaXhlZCB0aGUgaW5jb21wYXRpYmlsaXR5IHdpdGggU2V0dXB0b29scyBpbiBkaXN0dXRpbHMKLSAgd2hlbiBydW5uaW5nIHRoZSBidWlsZF9leHQgY29tbWFuZC4KKy0gSXNzdWUgIzE3MjIzNDQ6IGBgdGhyZWFkaW5nLl9zaHV0ZG93bigpYGAgaXMgbm93IGNhbGxlZCBpbiBgYFB5X0ZpbmFsaXplKClgYCwKKyAgd2hpY2ggZml4ZXMgdGhlIHByb2JsZW0gb2Ygc29tZSBleGNlcHRpb25zIGJlaW5nIHRocm93biBhdCBzaHV0ZG93biB3aGVuIHRoZQorICBpbnRlcnByZXRlciBpcyBraWxsZWQuICBQYXRjaCBieSBBZGFtIE9sc2VuLgogCi0tIElzc3VlICM3MDUyOiBSZW1vdmVkIG5vbmV4aXN0aW5nIE51bGxIYW5kbGVyIGZyb20gbG9nZ2luZy5fX2FsbF9fLgorLSBJc3N1ZSAjNzE2ODogRG9jdW1lbnQgYGBQeUZsb2F0X0FzU3RyaW5nKClgYCBhbmQgYGBQeUZsb2F0X0FzUmVwclN0cmluZygpYGAsCisgIGFuZCBub3RlIHRoYXQgdGhleSBhcmUgdW5zYWZlIGFuZCBkZXByZWNhdGVkLgogCi0tIElzc3VlICM3MDM5OiBGaXhlZCBkaXN0dXRpbHMudGVzdHMudGVzdF9zeXNjb25maWcgd2hlbiBydW5uaW5nIG9uCi0gIGluc3RhbGxhdGlvbiB3aXRoIG5vIGJ1aWxkLgorLSBJc3N1ZSAjNzEyMDogbG9nZ2luZzogUmVtb3ZlIGltcG9ydCBvZiBtdWx0aXByb2Nlc3Npbmcgd2hpY2ggaXMgY2F1c2luZyBjcmFzaAorICBpbiBHQUUuCiAKLVRlc3RzCi0tLS0tLQorLSBJc3N1ZSAjNzE0MDogVGhlIGBgX19kaWN0X19gYCBvZiBhIG1vZHVsZSBzaG91bGQgbm90IGJlIGNsZWFyZWQgdW5sZXNzIHRoZQorICBtb2R1bGUgaXMgdGhlIG9ubHkgb2JqZWN0IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gaXQuCiAKLS0gSXNzdWUgIzcwNDI6IEZpeCB0ZXN0X3NpZ25hbCAodGVzdF9pdGltZXJfdmlydHVhbCkgZmFpbHVyZSBvbiBPUyBYIDEwLjYuCistIElzc3VlICMxNzU0MDk0OiBJbXByb3ZlIHRoZSBzdGFjayBkZXB0aCBjYWxjdWxhdGlvbiBpbiB0aGUgY29tcGlsZXIuICBUaGVyZQorICBzaG91bGQgYmUgbm8gb3RoZXIgZWZmZWN0IHRoYW4gYSBzbWFsbCBkZWNyZWFzZSBpbiBtZW1vcnkgdXNlLiAgUGF0Y2ggYnkKKyAgQ2hyaXN0b3BoZXIgVHVyIExlc25pZXdza2ktTGFhcy4KIAorLSBJc3N1ZSAjNzA4NDogRml4IGEgKHZlcnkgdW5saWtlbHkpIGNyYXNoIHdoZW4gcHJpbnRpbmcgYSBsaXN0IGZyb20gb25lIHRocmVhZCwKKyAgYW5kIG11dGF0aW5nIGl0IGZyb20gYW5vdGhlciBvbmUuICBQYXRjaCBieSBTY290dCBEaWFsLgogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuMwotPT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0gSXNzdWUgIzE1NzExODQ6IFRoZSBVbmljb2RlIGRhdGFiYXNlIGNvbnRhaW5zIHByb3BlcnRpZXMgZm9yIG1vcmUgY2hhcmFjdGVycy4KKyAgVGhlIHRhYmxlcyBmb3IgY29kZSBwb2ludHMgcmVwcmVzZW50aW5nIG51bWVyaWMgdmFsdWVzLCB3aGl0ZSBzcGFjZXMgb3IgbGluZQorICBicmVha3MgYXJlIG5vdyBnZW5lcmF0ZWQgZnJvbSB0aGUgb2ZmaWNpYWwgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgZmlsZXMsCisgIGFuZCBpbmNsdWRlIGluZm9ybWF0aW9uIGZyb20gdGhlIFVuaWhhbi50eHQgZmlsZS4KIAotKlJlbGVhc2UgZGF0ZTogMDItT2N0LTIwMDkqCistIElzc3VlICM3MDUwOiBGaXggYSBTeXN0ZW1FcnJvciB3aGVuIHRyeWluZyB0byB1c2UgdW5wYWNraW5nIGFuZCBhdWdtZW50ZWQKKyAgYXNzaWdubWVudC4KIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjNyYzEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICM1MzI5OiBGaXggYGBvcy5wb3BlbipgYCByZWdyZXNzaW9uIGZyb20gMi41IHdpdGggY29tbWFuZHMgYXMgYSBzZXF1ZW5jZQorICBydW5uaW5nIHRocm91Z2ggdGhlIHNoZWxsLiAgUGF0Y2ggYnkgSmVhbi1QYXVsIENhbGRlcm9uZSBhbmQgSmFuaSBIYWthbGEuCiAKLSpSZWxlYXNlIGRhdGU6IDI5LVNlcC0yMDA5KgorLSBJc3N1ZSAjNzAxOTogUmFpc2UgVmFsdWVFcnJvciB3aGVuIHVubWFyc2hhbGxpbmcgYmFkIGxvbmcgZGF0YSwgaW5zdGVhZCBvZgorICBwcm9kdWNpbmcgaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgUHl0aG9uIGxvbmdzLgogCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KKy0gSXNzdWUgIzY5OTA6IEZpeCBgYHRocmVhZGluZy5sb2NhbGBgIHN1YmNsYXNzZXMgbGVhdmluZyBvbGQgc3RhdGUgYXJvdW5kIGFmdGVyCisgIGEgcmVmZXJlbmNlIGN5Y2xlIEdDIHdoaWNoIGNvdWxkIGJlIHJlY3ljbGVkIGJ5IG5ldyBsb2NhbHMuCiAKLS0gSXNzdWUgIzUzMjk6IEZpeCBvcy5wb3BlbiogcmVncmVzc2lvbiBmcm9tIDIuNSB3aXRoIGNvbW1hbmRzIGFzIGEKLSAgc2VxdWVuY2UgcnVubmluZyB0aHJvdWdoIHRoZSBzaGVsbC4gIFBhdGNoIGJ5IEplYW4tUGF1bCBDYWxkZXJvbmUKLSAgYW5kIEphbmkgSGFrYWxhLgorLSBJc3N1ZSAjNjMwMDogdW5pY29kZS5lbmNvZGUsIHVuaWNvZGUuZGVjb2RlLCBzdHIuZGVjb2RlLCBhbmQgc3RyLmVuY29kZSBub3cKKyAgdGFrZSBrZXl3b3JkIGFyZ3VtZW50cy4KIAotLSBJc3N1ZSAjNjk5MDogRml4IHRocmVhZGluZy5sb2NhbCBzdWJjbGFzc2VzIGxlYXZpbmcgb2xkIHN0YXRlIGFyb3VuZAotICBhZnRlciBhIHJlZmVyZW5jZSBjeWNsZSBHQyB3aGljaCBjb3VsZCBiZSByZWN5Y2xlZCBieSBuZXcgbG9jYWxzLgorLSBJc3N1ZSAjNjkyMjogRml4IGFuIGluZmluaXRlIGxvb3Agd2hlbiB0cnlpbmcgdG8gZGVjb2RlIGFuIGludmFsaWQgVVRGLTMyCisgIHN0cmVhbSB3aXRoIGEgbm9uLXJhaXNpbmcgZXJyb3IgaGFuZGxlciBsaWtlICJyZXBsYWNlIiBvciAiaWdub3JlIi4KIAotLSBJc3N1ZSAjNjkyMjogRml4IGFuIGluZmluaXRlIGxvb3Agd2hlbiB0cnlpbmcgdG8gZGVjb2RlIGFuIGludmFsaWQKLSAgVVRGLTMyIHN0cmVhbSB3aXRoIGEgbm9uLXJhaXNpbmcgZXJyb3IgaGFuZGxlciBsaWtlICJyZXBsYWNlIiBvciAiaWdub3JlIi4KKy0gSXNzdWUgIzY3MTM6IEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgYmFzZSAxMCBpbnQgLT4gc3RyaW5nIGFuZCBsb25nIC0+IHN0cmluZworICBjb252ZXJzaW9ucy4KIAogLSBJc3N1ZSAjMTU5MDg2NDogRml4IHBvdGVudGlhbCBkZWFkbG9jayB3aGVuIG1peGluZyB0aHJlYWRzIGFuZCBmb3JrKCkuCiAKQEAgLTk2NywzNTQgKzIyNjEsMjM4IEBACiAKIC0gSXNzdWUgIzY4NDY6IEZpeCBidWcgd2hlcmUgYnl0ZWFycmF5LnBvcCgpIHJldHVybnMgbmVnYXRpdmUgaW50ZWdlcnMuCiAKLS0gSXNzdWUgIzY3MDc6IGRpcigpIG9uIGFuIHVuaW5pdGlhbGl6ZWQgbW9kdWxlIGNhdXNlZCBhIGNyYXNoLgorLSBgYGNsYXNzbWV0aG9kKClgYCBubyBsb25nZXIgY2hlY2tzIGlmIGl0cyBhcmd1bWVudCBpcyBjYWxsYWJsZS4KIAotLSBJc3N1ZSAjNjU0MDogRml4ZWQgY3Jhc2ggZm9yIGJ5dGVhcnJheS50cmFuc2xhdGUoKSB3aXRoIGludmFsaWQgcGFyYW1ldGVycy4KKy0gSXNzdWUgIzY3NTA6IEEgdGV4dCBmaWxlIG9wZW5lZCB3aXRoIGBgaW8ub3BlbigpYGAgY291bGQgZHVwbGljYXRlIGl0cyBvdXRwdXQKKyAgd2hlbiB3cml0aW5nIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lLgogCi0tIElzc3VlICM2NTczOiBzZXQudW5pb24oKSBzdG9wcGVkIHByb2Nlc3NpbmcgaW5wdXRzIGlmIGFuIGluc3RhbmNlIG9mIHNlbGYKKy0gSXNzdWUgIzY3MDQ6IEltcHJvdmUgdGhlIGNvbF9vZmZzZXQgaW4gQVNUIGZvciAiZm9yIiBzdGF0ZW1lbnRzIHdpdGggYSB0YXJnZXQKKyAgb2YgdHVwbGUgdW5wYWNraW5nLgorCistIElzc3VlICM2NzA3OiBgYGRpcigpYGAgb24gYW4gdW5pbml0aWFsaXplZCBtb2R1bGUgY2F1c2VkIGEgY3Jhc2guCisKKy0gSXNzdWUgIzY1NDA6IEZpeGVkIGNyYXNoIGZvciBgYGJ5dGVhcnJheS50cmFuc2xhdGUoKWBgIHdpdGggaW52YWxpZCBwYXJhbWV0ZXJzLgorCistIElzc3VlICM2NTczOiBgYHNldC51bmlvbigpYGAgc3RvcHBlZCBwcm9jZXNzaW5nIGlucHV0cyBpZiBhbiBpbnN0YW5jZSBvZiBzZWxmCiAgIG9jY3VycmVkIGluIHRoZSBhcmd1bWVudCBjaGFpbi4KIAotLSBJc3N1ZSAjNjA3MDogT24gcG9zaXggcGxhdGZvcm1zIGltcG9ydCBubyBsb25nZXIgY29waWVzIHRoZSBleGVjdXRlIGJpdAotICBmcm9tIHRoZSAucHkgZmlsZSB0byB0aGUgLnB5YyBmaWxlIGlmIGl0IGlzIHNldC4KKy0gSXNzdWUgIzE2MTY5Nzk6IEFkZGVkIHRoZSBjcDcyMCAoQXJhYmljIERPUykgZW5jb2RpbmcuCiAKLS0gSXNzdWUgIzQ1NDc6IFdoZW4gZGVidWdnaW5nIGEgdmVyeSBsYXJnZSBmdW5jdGlvbiwgaXQgd2FzIG5vdCBhbHdheXMKLSAgcG9zc2libGUgdG8gdXBkYXRlIHRoZSBsaW5lbm8gYXR0cmlidXRlIG9mIHRoZSBjdXJyZW50IGZyYW1lLgorLSBJc3N1ZSAjNjA3MDogT24gcG9zaXggcGxhdGZvcm1zIGltcG9ydCBubyBsb25nZXIgY29waWVzIHRoZSBleGVjdXRlIGJpdCBmcm9tCisgIHRoZSAucHkgZmlsZSB0byB0aGUgLnB5YyBmaWxlIGlmIGl0IGlzIHNldC4gIFBhdGNoIGJ5IE1hcmNvIE4uCiAKLS0gSXNzdWUgIzQ2MTg6IFdoZW4gdW5pY29kZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byBwcmludCgpLCB0aGUgZGVmYXVsdAorLSBJc3N1ZSAjNDYxODogV2hlbiB1bmljb2RlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIGBgcHJpbnQoKWBgLCB0aGUgZGVmYXVsdAogICBzZXBhcmF0b3IgYW5kIGVuZCBzaG91bGQgYmUgdW5pY29kZSBhbHNvLgogCiAtIElzc3VlICM2MTE5OiBGaXhlZCBhbiBpbmNvcnJlY3QgUHkzayB3YXJuaW5nIGFib3V0IG9yZGVyIGNvbXBhcmlzb25zIG9mCiAgIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy4KIAorLSBJc3N1ZSAjNjM0NzogSW5jbHVkZSBpbnR0eXBlcy5oIGFzIHdlbGwgYXMgc3RkaW50LmggaW4gcHlwb3J0LmguICBUaGlzIGZpeGVzIGEKKyAgYnVpbGQgZmFpbHVyZSBvbiBIUC1VWDogaW50MzJfdCBhbmQgdWludDMyX3QgYXJlIGRlZmluZWQgaW4gaW50dHlwZXMuaCBpbnN0ZWFkCisgIG9mIHN0ZGludC5oIG9uIHRoYXQgcGxhdGZvcm0uCisKKy0gSXNzdWUgIzQ4NTY6IFJlbW92ZSBjaGVja3MgZm9yIHdpbiBOVC4KKworLSBJc3N1ZSAjMjAxNjogRml4ZWQgYSBjcmFzaCBpbiBhIGNvcm5lciBjYXNlIHdoZXJlIHRoZSBkaWN0aW9uYXJ5IG9mIGtleXdvcmQKKyAgYXJndW1lbnRzIGNvdWxkIGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgZnVuY3Rpb24gY2FsbCBzZXR1cC4KKworLSBSZW1vdmVkIHRoZSBpcGFkZHIgbW9kdWxlLgorCistIElzc3VlICM2MzI5OiBGaXhlZCBpdGVyYXRpb24gZm9yIG1lbW9yeXZpZXcgb2JqZWN0cyAoaXQgd2FzIGJlaW5nIGJsb2NrZWQKKyAgYmVjYXVzZSBpdCB3YXNuJ3QgcmVjb2duaXplZCBhcyBhIHNlcXVlbmNlKS4KKworLSBJc3N1ZSAjNjI4OTogRW5jb2RpbmcgZXJyb3JzIGZyb20gYGBjb21waWxlKClgYCB3ZXJlIGJlaW5nIG1hc2tlZC4KKworLSBXaGVuIG5vIG1vZHVsZSBpcyBnaXZlbiBpbiBhIHJlbGF0aXZlIGltcG9ydCwgdGhlIG1vZHVsZSBmaWVsZCBvZiB0aGUKKyAgSW1wb3J0RnJvbSBBU1Qgbm9kZSBpcyBub3cgTm9uZSBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZy4KKworLSBBc3NpZ25tZW50IHRvIE5vbmUgdXNpbmcgaW1wb3J0IHN0YXRlbWVudHMgbm93IHJhaXNlcyBhIFN5bnRheEVycm9yLgorCistIElzc3VlICM0NTQ3OiBXaGVuIGRlYnVnZ2luZyBhIHZlcnkgbGFyZ2UgZnVuY3Rpb24sIGl0IHdhcyBub3QgYWx3YXlzIHBvc3NpYmxlCisgIHRvIHVwZGF0ZSB0aGUgbGluZW5vIGF0dHJpYnV0ZSBvZiB0aGUgY3VycmVudCBmcmFtZS4KKwogLSBJc3N1ZSAjNTMzMDogQyBmdW5jdGlvbnMgY2FsbGVkIHdpdGgga2V5d29yZCBhcmd1bWVudHMgd2VyZSBub3QgcmVwb3J0ZWQgYnkKLSAgdGhlIHZhcmlvdXMgcHJvZmlsaW5nIG1vZHVsZXMgKHByb2ZpbGUsIGNQcm9maWxlKS4gUGF0Y2ggYnkgSGFnZW4gRsO8cnN0ZW5hdS4KKyAgdGhlIHZhcmlvdXMgcHJvZmlsaW5nIG1vZHVsZXMgKHByb2ZpbGUsIGNQcm9maWxlKS4gIFBhdGNoIGJ5IEhhZ2VuIEbDvHJzdGVuYXUuCiAKLS0gSXNzdWUgIzYwODk6IHN0ci5mb3JtYXQgY2FuIHJhaXNlIFN5c3RlbUVycm9yIHdpdGggY2VydGFpbiBpbnZhbGlkCi0gIGZpZWxkIHNwZWNpZmllcnMuCistIElzc3VlICM1OTgyOiBzdGF0aWNtZXRob2QgYW5kIGNsYXNzbWV0aG9kIG5vdyBleHBvc2UgdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2l0aAorICBgYF9fZnVuY19fYGAuCiAKLS0gSXNzdWUgIzU5OTQ6IHRoZSBtYXJzaGFsIG1vZHVsZSBub3cgaGFzIGRvY3N0cmluZ3MuCistIEFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMgaW4gdGhlIHNhbWUgd2l0aC1zdGF0ZW1lbnQuCisgIERlcHJlY2F0ZWQgYGBjb250ZXh0bGliLm5lc3RlZCgpYGAgd2hpY2ggaXMgbm8gbG9uZ2VyIG5lZWRlZC4KIAotLSBJc3N1ZSAjNTk4MTogRml4IHR3byBtaW5vciBpbmYvbmFuIGlzc3VlcyBpbiBmbG9hdC5mcm9taGV4OiAoMSkgaW5mCi0gIGFuZCBuYW4gc3RyaW5ncyB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2VyZSBpbmNvcnJlY3RseSByZWplY3RlZAotICBhbmQgKDIpIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmcm9taGV4KCctbmFuJykgZGlkbid0IG1hdGNoIHRoYXQgb2YKLSAgZmxvYXQoJy1uYW4nKS4KKy0gSXNzdWUgIzYxMDE6IEEgbmV3IG9wY29kZSwgU0VUVVBfV0lUSCwgaGFzIGJlZW4gYWRkZWQgdG8gc3BlZWQgdXAgdGhlIHdpdGgKKyAgc3RhdGVtZW50IGFuZCBjb3JyZWN0bHkgbG9va3VwIHRoZSBfX2VudGVyX18gYW5kIF9fZXhpdF9fIHNwZWNpYWwgbWV0aG9kcy4KIAotLSBJc3N1ZSAjNTg5MDogaW4gc3ViY2xhc3NlcyBvZiAncHJvcGVydHknIHRoZSBfX2RvY19fIGF0dHJpYnV0ZSB3YXMKLSAgc2hhZG93ZWQgYnkgY2xhc3N0eXBlJ3MsIGV2ZW4gaWYgaXQgd2FzIE5vbmUuICBwcm9wZXJ0eSBub3cKLSAgaW5zZXJ0cyB0aGUgX19kb2NfXyBpbnRvIHRoZSBzdWJjbGFzcyBpbnN0YW5jZSBfX2RpY3RfXy4KKy0gSXNzdWUgIzU4Mjk6IGNvbXBsZXgoIjFlNTAwIikgbm8gbG9uZ2VyIHJhaXNlcyBPdmVyZmxvd0Vycm9yLiAgVGhpcyBtYWtlcyBpdAorICBjb25zaXN0ZW50IHdpdGggZmxvYXQoIjFlNTAwIikgYW5kIGludGVycHJldGF0aW9uIG9mIHJlYWwgYW5kIGltYWdpbmFyeQorICBsaXRlcmFscy4KIAotLSBJc3N1ZSAjNTcyNDogKFNlZSBhbHNvIGlzc3VlICM0NTc1LikgRml4IFB5X0lTX0lORklOSVRZIG1hY3JvIHRvCi0gIHdvcmsgY29ycmVjdGx5IG9uIHg4NyBGUFVzOiBpdCBub3cgZm9yY2VzIGl0cyBhcmd1bWVudCB0byBkb3VibGUKLSAgYmVmb3JlIHRlc3RpbmcgZm9yIGluZmluaXR5LgorLSBJc3N1ZSAjMzUyNzogUmVtb3ZlZCBQeV9XSU5fV0lERV9GSUxFTkFNRVMgd2hpY2ggaXMgbm90IHVzZWQgYW55IG1vcmUuCiAKLS0gSXNzdWUgIzQ5NzE6IEZpeCB0aXRsZWNhc2UgZm9yIGNoYXJhY3RlcnMgdGhhdCBhcmUgdGhlaXIgb3duCi0gIHRpdGxlY2FzZSwgYnV0IG5vdCB0aGVpciBvd24gdXBwZXJjYXNlLgorLSBgYF9faW5zdGFuY2VjaGVja19fKClgYCBhbmQgYGBfX3N1YmNsYXNzY2hlY2tfXygpYGAgYXJlIG5vdyBjb21wbGV0ZWx5IGlnbm9yZWQKKyAgb24gY2xhc3NpYyBjbGFzc2VzIGFuZCBpbnN0YW5jZXMuCiAKLS0gSXNzdWUgIzU4Mjk6IGNvbXBsZXgoJzFlLTUwMCcpIG5vIGxvbmdlciByYWlzZXMgYW4gZXhjZXB0aW9uCistIElzc3VlICM1OTk0OiBUaGUgbWFyc2hhbCBtb2R1bGUgbm93IGhhcyBkb2NzdHJpbmdzLgogCi0tIElzc3VlICM1Nzg3OiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzb21lX3R5cGUsICJfX2Jhc2VzX18iKSBzZWdmYXVsdGVkIG9uCi0gIHNvbWUgYnVpbHQtaW4gdHlwZXMuCistIElzc3VlICM1OTgxOiBGaXggdGhyZWUgbWlub3IgaW5mL25hbiBpc3N1ZXMgaW4gZmxvYXQuZnJvbWhleDoKKworICAoMSkgaW5mIGFuZCBuYW4gc3RyaW5ncyB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2VyZSBpbmNvcnJlY3RseSByZWplY3RlZDsKKyAgKDIpIHBhcnNpbmcgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgaW5maW5pdGllcyBhbmQgbmFucyB3YXMgbG9jYWxlIGF3YXJlOyBhbmQKKyAgKDMpIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmcm9taGV4KCctbmFuJykgZGlkbid0IG1hdGNoIHRoYXQgb2YgZmxvYXQoJy1uYW4nKS4KKworLSBJc3N1ZSAjNTkyMDogRm9yIGBgZmxvYXQuX19mb3JtYXRfXygpYGAsIGNoYW5nZSB0aGUgYmVoYXZpb3Igd2l0aCB0aGUgZW1wdHkKKyAgcHJlc2VudGF0aW9uIHR5cGUgKHRoYXQgaXMsIG5vdCBvbmUgb2YgJ2UnLCAnZicsICdnJywgb3IgJ24nKSB0byBiZSBsaWtlICdnJworICBidXQgd2l0aCBhdCBsZWFzdCBvbmUgZGVjaW1hbCBwb2ludCBhbmQgd2l0aCBhIGRlZmF1bHQgcHJlY2lzaW9uCisgIG9mIDEyLiBQcmV2aW91c2x5LCB0aGUgYmVoYXZpb3IgdGhlIHNhbWUgYnV0IHdpdGggYSBkZWZhdWx0IHByZWNpc2lvbiBvZiA2LgorICBUaGlzIG1vcmUgY2xvc2VseSBtYXRjaGVzIGBgc3RyKClgYCwgYW5kIHJlZHVjZXMgc3VycHJpc2VzIHdoZW4gYWRkaW5nCisgIGFsaWdubWVudCBmbGFncyB0byB0aGUgZW1wdHkgcHJlc2VudGF0aW9uIHR5cGUuIFRoaXMgYWxzbyBhZmZlY3RzIHRoZSBuZXcKKyAgY29tcGxleC5fX2Zvcm1hdF9fIGluIHRoZSBzYW1lIHdheS4KKworLSBJc3N1ZSAjNTg5MDogSW4gc3ViY2xhc3NlcyBvZiAncHJvcGVydHknIHRoZSBfX2RvY19fIGF0dHJpYnV0ZSB3YXMgc2hhZG93ZWQgYnkKKyAgY2xhc3N0eXBlJ3MsIGV2ZW4gaWYgaXQgd2FzIE5vbmUuICBwcm9wZXJ0eSBub3cgaW5zZXJ0cyB0aGUgX19kb2NfXyBpbnRvIHRoZQorICBzdWJjbGFzcyBpbnN0YW5jZSBfX2RpY3RfXy4KKworLSBJc3N1ZSAjNDQyNjogVGhlIFVURi03IGRlY29kZXIgd2FzIHRvbyBzdHJpY3QgYW5kIGRpZG4ndCBhY2NlcHQgc29tZSBsZWdhbAorICBzZXF1ZW5jZXMuICBQYXRjaCBieSBOaWNrIEJhcm5lcyBhbmQgVmljdG9yIFN0aW5uZXIuCisKKy0gSXNzdWUgIzE1ODg6IEFkZCBjb21wbGV4Ll9fZm9ybWF0X18uIEZvciBleGFtcGxlLCBgYGZvcm1hdChjb21wbGV4KDEsIDIuLzMpLAorICAnLjUnKWBgIG5vdyBwcm9kdWNlcyBhIHNlbnNpYmxlIHJlc3VsdC4KKworLSBJc3N1ZSAjNTg2NDogRml4IGVtcHR5IGZvcm1hdCBjb2RlIGZvcm1hdHRpbmcgZm9yIGZsb2F0cyBzbyB0aGF0IGl0IG5ldmVyCisgIGdpdmVzIG1vcmUgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMuCisKKy0gSXNzdWUgIzU3OTM6IFJhdGlvbmFsaXplIGlzZGlnaXQgLyBpc2FscGhhIC8gdG9sb3dlciwgZXRjLiBJbmNsdWRlcyBuZXcKKyAgUHlfSVNESUdJVCAvIFB5X0lTQUxQSEEgLyBQeV9UT0xPV0VSLCBldGMuIGluIHBjdHlwZXMuaC4KKworLSBJc3N1ZSAjNDk3MTogRml4IHRpdGxlY2FzZSBmb3IgY2hhcmFjdGVycyB0aGF0IGFyZSB0aGVpciBvd24gdGl0bGVjYXNlLCBidXQKKyAgbm90IHRoZWlyIG93biB1cHBlcmNhc2UuCisKKy0gSXNzdWUgIzU4MzU6IERlcHJlY2F0ZSBQeU9TX2FzY2lpX2Zvcm1hdGQgYW5kIHJlcGxhY2UgaXQgd2l0aAorICBfUHlPU19kb3VibGVfdG9fc3RyaW5nIG9yIFB5T1NfZG91YmxlX3RvX3N0cmluZy4KIAogLSBJc3N1ZSAjNTI4MzogU2V0dGluZyBfX2NsYXNzX18gaW4gX19kZWxfXyBjYXVzZWQgYSBzZWdmYXVsdC4KIAorLSBJc3N1ZSAjNTgxNjogYGBjb21wbGV4KHJlcHIoeikpYGAgbm93IHJlY292ZXJzIHogZXhhY3RseSwgZXZlbiB3aGVuIHogaW52b2x2ZXMKKyAgbmFucywgaW5mcyBvciBuZWdhdGl2ZSB6ZXJvcy4KKworLSBJbXBsZW1lbnQgUEVQIDM3OCwgRm9ybWF0IFNwZWNpZmllciBmb3IgVGhvdXNhbmRzIFNlcGFyYXRvciwgZm9yIGZsb2F0cywgaW50cywKKyAgYW5kIGxvbmdzLgorCistIElzc3VlICM1NTE1OiAnbicgZm9ybWF0dGluZyBmb3IgaW50cywgbG9uZ3MsIGFuZCBmbG9hdHMgaGFuZGxlcyBsZWFkaW5nIHplcm8KKyAgZm9ybWF0dGluZyBwb29ybHkuCisKKy0gSXNzdWUgIzU3NzI6IEZvciBmbG9hdC5fX2Zvcm1hdF9fLCBkb24ndCBhZGQgYSB0cmFpbGluZyAiLjAiIGlmIHdlJ3JlIHVzaW5nIG5vCisgIHR5cGUgY29kZSBhbmQgd2UgaGF2ZSBhbiBleHBvbmVudC4KKworLSBJc3N1ZSAjMzE2NjogTWFrZSBsb25nIC0+IGZsb2F0IChhbmQgaW50IC0+IGZsb2F0KSBjb252ZXJzaW9ucyBjb3JyZWN0bHkKKyAgcm91bmRlZC4KKworLSBJc3N1ZSAjNTc4NzogYGBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzb21lX3R5cGUsICJfX2Jhc2VzX18iKWBgIHNlZ2ZhdWx0ZWQgb24KKyAgc29tZSBidWlsdC1pbiB0eXBlcy4KKworLSBJc3N1ZSAjMTg2OTogRml4IGEgY291cGxlIG9mIG1pbm9yIHJvdW5kKCkgaXNzdWVzLiAgYGByb3VuZCg1ZTE1KzEpYGAgd2FzCisgIGdpdmluZyA1ZTE1KzI7IGBgcm91bmQoLTAuMClgYCB3YXMgbG9zaW5nIHRoZSBzaWduIG9mIHRoZSB6ZXJvLgorCiAtIElzc3VlICM1NzU5OiBmbG9hdCgpIGRpZG4ndCBjYWxsIF9fZmxvYXRfXyBvbiBzdHIgc3ViY2xhc3Nlcy4KIAotLSBJc3N1ZSAjNTEwODogSGFuZGxlICVzIGxpa2UgJVMgYW5kICVSIGluIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpOiBDYWxsCi0gIFB5VW5pY29kZV9EZWNvZGVVVEY4KCkgb25jZSwgcmVtZW1iZXIgdGhlIHJlc3VsdCBhbmQgb3V0cHV0IGl0IGluIGEgc2Vjb25kCi0gIHN0ZXAuIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGggY291bnRpbmcgVVRGLTggYnl0ZXMgdGhhdCBpZ25vcmVzIHRoZSBlZmZlY3QKLSAgb2YgdXNpbmcgdGhlIHJlcGxhY2UgZXJyb3IgaGFuZGxlciBpbiBQeVVuaWNvZGVfRGVjb2RlVVRGOCgpLgorLSBJc3N1ZSAjNTcwNDogVGhlICItMyIgY29tbWFuZC1saW5lIG9wdGlvbiBub3cgaW1wbGllcyAiLXQiLgogCi1MaWJyYXJ5Ci0tLS0tLS0tCistIElzc3VlICMyMTcwOiBSZWZhY3RvcmVkIGBgeG1sLmRvbS5taW5pZG9tLm5vcm1hbGl6ZWBgLCBpbmNyZWFzaW5nIGJvdGggaXRzCisgIGNsYXJpdHkgYW5kIGl0cyBzcGVlZC4KIAotLSBJc3N1ZSAjNjg5NDogRml4ZWQgdGhlIGlzc3VlIHVybGxpYjIgZG9lc24ndCByZXNwZWN0ICJub19wcm94eSIgZW52aXJvbm1lbnQKLQotLSBJc3N1ZSAjNjc5MDogTWFrZSBpdCBwb3NzaWJsZSBhZ2FpbiB0byBwYXNzIGFuIGBhcnJheS5hcnJheWAgdG8KLSAgYGh0dHBsaWIuSFRUUENvbm5lY3Rpb24uc2VuZGAuIFBhdGNoIGJ5IEtpcmsgTWNEb25hbGQuCi0KLS0gSXNzdWUgIzYyMzYsICM2MzQ4OiBGaXggdmFyaW91cyBmYWlsdXJlcyBpbiB0aGUgYGlvYCBtb2R1bGUgdW5kZXIgQUlYCi0gIGFuZCBvdGhlciBwbGF0Zm9ybXMsIHdoZW4gdXNpbmcgYSBub24tZ2NjIGNvbXBpbGVyLiBQYXRjaCBieSBlZ3JlZW4uCi0KLS0gSXNzdWUgIzY4NTE6IEZpeCB1cmxsaWIudXJsb3BlbiBjcmFzaCBvbiBzZWNvbmRhaXJ5IHRocmVhZHMgb24gT1NYIDEwLjYKLQotLSBJc3N1ZSAjNjk0NzogRml4IGRpc3R1dGlscyB0ZXN0IG9uIHdpbmRvd3MuIFBhdGNoIGJ5IEhpcm9rYXp1IFlhbWFtb3RvLgotCi0tIElzc3VlICM0NjA2OiBQYXNzaW5nICdOb25lJyBpZiBjdHlwZXMgYXJndHlwZSBpcyBzZXQgdG8gUE9JTlRFUiguLi4pCi0gIGRvZXMgbm93IGFsd2F5cyByZXN1bHQgaW4gTlVMTC4KLQotLSBJc3N1ZSAjNTA0MjogY3R5cGVzIFN0cnVjdHVyZSBzdWItc3ViY2xhc3MgZG9lcyBub3cgaW5pdGlhbGl6ZQotICBjb3JyZWN0bHkgd2l0aCBiYXNlIGNsYXNzIHBvc2l0aW9uYWwgYXJndW1lbnRzLgotCi0tIElzc3VlICM2OTM4OiBGaXggYSBUeXBlRXJyb3IgaW4gc3RyaW5nIGZvcm1hdHRpbmcgb2YgYSBtdWx0aXByb2Nlc3NpbmcKLSAgZGVidWcgbWVzc2FnZS4KLQotLSBJc3N1ZSAjNjYzNTogRml4IHByb2ZpbGVyIHByaW50aW5nIHVzYWdlIG1lc3NhZ2UuCi0KLS0gSXNzdWUgIzY3OTU6IGludChEZWNpbWFsKCduYW4nKSkgbm93IHJhaXNlcyBWYWx1ZUVycm9yIGluc3RlYWQgb2YKLSAgcmV0dXJuaW5nIE5hTiBvciByYWlzaW5nIEludmFsaWRDb250ZXh0LiAgQWxzbywgZml4IGluZmluaXRlIHJlY3Vyc2lvbgotICBpbiBsb25nKERlY2ltYWwoJ25hbicpKS4KLQotLSBJc3N1ZSAjNjg1MDogRml4IGJ1ZyBpbiBEZWNpbWFsLl9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyIGZvciBmb3JtYXRzCi0gIHdpdGggbm8gdHlwZSBzcGVjaWZpZXIuCi0KLS0gSXNzdWUgIzQ5Mzc6IHBsYXQtbWFjL2J1bmRsZWJ1aWxkZXIgcmV2ZXJzIHRvIG5vbi1leGlzdGluZyB2ZXJzaW9uLnBsaXN0Ci0KLS0gSXNzdWUgIzY4Mzg6IFVzZSBhIGxpc3QgdG8gYWNjdW11bGF0ZSB0aGUgdmFsdWUgaW5zdGVhZCBvZgotICByZXBlYXRlZGx5IGNvbmNhdGVuYXRpbmcgc3RyaW5ncyBpbiBodHRwbGliJ3MKLSAgSFRUUFJlc3BvbnNlLl9yZWFkX2NodW5rZWQgcHJvdmlkaW5nIGEgc2lnbmlmaWNhbnQgc3BlZWQgaW5jcmVhc2UKLSAgd2hlbiBkb3dubG9hZGluZyBsYXJnZSBmaWxlcyBzZXJ2ZW5kIHdpdGggYSBUcmFuc2Zlci1FbmNvZGluZyBvZiAnY2h1bmtlZCcuCi0KLS0gSXNzdWUgIzY3OTQ6IEZpeCBEZWNpbWFsLmNvbXBhcmVfdG90YWwgYW5kIERlY2ltYWwuY29tcGFyZV90b3RhbF9tYWc6IE5hTgotICBwYXlsb2FkcyBhcmUgbm93IG9yZGVyZWQgYnkgaW50ZWdlciB2YWx1ZSByYXRoZXIgdGhhbiBsZXhpY29ncmFwaGljYWxseS4KLQotLSBJc3N1ZSAjNjExNzogRml4IE8obioqMikgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gd2hlbiBvdXRwdXR0aW5nIGxvdHMgb2YKLSAgc21hbGwgZGF0YSBvbiBhIGJ1ZmZlcmVkIHNvY2tldC5zb2NrZXQubWFrZWZpbGUoKSBvYmplY3QuCi0KLS0gSXNzdWUgIzY2Mzc6IGRlZmF1bHRkaWN0LmNvcHkoKSBkaWQgbm90IHdvcmsgd2hlbiB0aGUgZGVmYXVsdCBmYWN0b3J5Ci0gIHdhcyBsZWZ0IHVuc3BlY2lmaWVkLiAgQWxzbywgdGhlIGV2YWwvcmVwciByb3VuZC10cmlwIHdvdWxkIGZhaWwgd2hlbgotICB0aGUgZGVmYXVsdF9mYWN0b3J5IHdhcyBOb25lLgotCi0tIElzc3VlICMxNDI0MTUyOiBGaXggZm9yIGh0dHBsaWIsIHVybGxpYjIgdG8gc3VwcG9ydCBTU0wgd2hpbGUgd29ya2luZyB0aHJvdWdoCi0gIHByb3h5LiBPcmlnaW5hbCBwYXRjaCBieSBDaHJpc3RvcGhlciBMaSwgY2hhbmdlcyBtYWRlIGJ5IFNlbnRoaWwgS3VtYXJhbi4KLQotLSBJc3N1ZXMgIzUxNTUsIDUzMTMsIDUzMzE6IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9ib290c3RyYXAgd2FzCi0gIHVuY29uZGl0aW9uYWxseSBjYWxsaW5nICJvcy5jbG9zZShzeXMuc3RkaW4uZmlsZW5vKCkpIiByZXN1bHRpbmcgaW4gZmlsZQotICBkZXNjcmlwdG9yIGVycm9ycwotCi0tIElzc3VlICM2NDE1OiBGaXhlZCB3YXJuaW5ncy53YXJuIHNhZ2ZhdWx0IG9uIGJhZCBmb3JtYXR0ZWQgc3RyaW5nLgotCi0tIElzc3VlICM2MzQ0OiBGaXhlZCBhIGNyYXNoIG9mIG1tYXAucmVhZCgpIHdoZW4gcGFzc2VkIGEgbmVnYXRpdmUgYXJndW1lbnQuCi0KLS0gSXNzdWUgIzUyMzA6IHB5ZG9jIHdvdWxkIHJlcG9ydCBubyBkb2N1bWVudGF0aW9uIGZvdW5kIGlmIGEgbW9kdWxlIGdlbmVyYXRlZAotICBhICdub3QgZm91bmQnIGltcG9ydCBlcnJvciB3aGVuIGxvYWRlZDsgaXQgbm93IHJlcG9ydHMgdGhlIGltcG9ydCBlcnJvcnMuCi0gIFRoYW5rcyB0byBMdWNhcyBQcmFkbyBNZWxvIGZvciBpbml0aWFsIGZpeCBhbmQgY29sbGFib3JhdGlvbiBvbiB0aGUgdGVzdHMuCi0KLS0gSXNzdWUgIzYyNzQ6IEZpeGVkIHBvc3NpYmxlIGZpbGUgZGVzY3JpcHRvcnMgbGVhayBpbiBzdWJwcm9jZXNzLnB5Ci0KLS0gSXNzdWUgIzYyNzE6IG1tYXAgdHJpZWQgdG8gY2xvc2UgaW52YWxpZCBmaWxlIGhhbmRsZSAoLTEpIHdoZW4gYW5ub255bW91cy4KLSAgKE9uIFVuaXgpCi0KLS0gSXNzdWUgIzYyNTg6IFN1cHBvcnQgQU1ENjQgaW4gYmRpc3RfbXNpLgotCi0tIElzc3VlICM2MjUyOiBGaXhlZCBidWcgaW4gbmV4dCByb2xsb3ZlciB0aW1lIGNvbXB1dGF0aW9uIGluCi0gIFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlci4KLQotLSBJc3N1ZSAjNjEyMTogcHlkb2Mgbm93IGlnbm9yZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGluIHRoZQotICBhcmd1bWVudCB0byB0aGUgJ2hlbHAnIGZ1bmN0aW9uLgotCi0tIElzc3VlICM2MDUwOiBEb24ndCBmYWlsIGV4dHJhY3RpbmcgYSBkaXJlY3RvcnkgZnJvbSBhIHppcGZpbGUgaWYKLSAgdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4KLQotLSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCkgd2FzIG5vdCB3b3JraW5nIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZAotICBuYW1lczogIGNscywgc2VsZiwgdHVwbGUsIGl0ZW1nZXR0ZXIsIGFuZCBwcm9wZXJ0eS4KLQotLSBJc3N1ZSAjMTMwOTM1MjogZmNudGwgbm93IGNvbnZlcnRzIGl0cyB0aGlyZCBhcmd1bWVudHMgdG8gYSBDIGBsb25nYCByYXRoZXIKLSAgdGhhbiBhbiBpbnQsIHdoaWNoIG1ha2VzIHNvbWUgb3BlcmF0aW9ucyBwb3NzaWJsZSB1bmRlciA2NC1iaXQgTGludXggKGUuZy4KLSAgRE5fTVVMVElTSE9UIHdpdGggRl9OT1RJRlkpLgotCi0tIElzc3VlICMxOTgzOiBGaXggZnVuY3Rpb25zIHRha2luZyBvciByZXR1cm5pbmcgYSBwcm9jZXNzIGlkZW50aWZpZXIgdG8gdXNlCi0gIHRoZSBkZWRpY2F0ZWQgQyB0eXBlIGBgcGlkX3RgYCBpbnN0ZWFkIG9mIGEgQyBgYGludGBgLiBTb21lIHBsYXRmb3JtcyBoYXZlCi0gIGEgcHJvY2VzcyBpZGVudGlmaWVyIHR5cGUgd2lkZXIgdGhhbiB0aGUgc3RhbmRhcmQgQyBpbnRlZ2VyIHR5cGUuCi0KLS0gSXNzdWUgIzQwNjY6IHNtdHBsaWIuU01UUF9TU0wuX2dldF9zb2NrZXQgbm93IGNvcnJlY3RseSByZXR1cm5zIHRoZSBzb2NrZXQuCi0gIFBhdGNoIGJ5IEZhcmhhbiBBaG1hZCwgdGVzdCBieSBNYXJjaW4gQmFjaHJ5LgotCi0tIElzc3VlICMxNjU1OiBNYWtlIGltYXBsaWIgSVB2Ni1jYXBhYmxlLiBQYXRjaCBieSBEZXJlayBNb3JyLgotCi0tIElzc3VlICMxNjY0OiBNYWtlIG5udHBsaWIgSVB2Ni1jYXBhYmxlLiBQYXRjaCBieSBEZXJlayBNb3JyLgotCi0tIElzc3VlICM1OTcxOiBTdHJlYW1IYW5kbGVyLmhhbmRsZUVycm9yIG5vdyBzd2FsbG93cyBJT0Vycm9ycyB3aGljaCBvY2N1ciB3aGVuCi0gIHRyeWluZyB0byBwcmludCBhIHRyYWNlYmFjay4KLQotLSBJc3N1ZSAjNTk1NTogYWlmYydzIGNsb3NlIG1ldGhvZCBkaWQgbm90IGNsb3NlIHRoZSBmaWxlIGl0IHdyYXBwZWQsCi0gIG5vdyBpdCBkb2VzLiAgVGhpcyBhbHNvIG1lYW5zIGdldGZwIG1ldGhvZCBub3cgcmV0dXJucyB0aGUgcmVhbCBmcC4KLQotLSBJc3N1ZSAjNDg3NTogT24gd2luMzIsIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSBkb2VzIG5vIGxvbmdlcgotICByZXR1cm4gZGlyZWN0b3JpZXMuCi0KLS0gSXNzdWUgIzU2OTI6IEluIDpjbGFzczpgemlwZmlsZS5aaXBmaWxlYCwgZml4IHdyb25nIHBhdGggY2FsY3VsYXRpb24gd2hlbgotICBleHRyYWN0aW5nIGEgZmlsZSB0byB0aGUgcm9vdCBkaXJlY3RvcnkuCi0KLS0gSXNzdWUgIzIyNDU6IGFpZmMgbm93IHNraXBzIGNodW5rIHR5cGVzIGl0IGRvZXNuJ3QgcmVjb2duaXplLCBwZXIgc3BlYy4KLQotLSBJc3N1ZSAjNDMwNTogY3R5cGVzIHNob3VsZCBub3cgYnVpbGQgYWdhaW4gb24gbWlwc2VsLWxpbnV4LWdudQotCi0tIElzc3VlICM1ODUzOiBjYWxsaW5nIGEgZnVuY3Rpb24gb2YgdGhlIG1pbWV0eXBlcyBtb2R1bGUgZnJvbSBzZXZlcmFsIHRocmVhZHMKLSAgYXQgb25jZSBjb3VsZCBoaXQgdGhlIHJlY3Vyc2lvbiBsaW1pdCBpZiB0aGUgbWltZXR5cGVzIGRhdGFiYXNlIGhhZG4ndCBiZWVuCi0gIGluaXRpYWxpemVkIGJlZm9yZS4KLQotLSBJc3N1ZSAjNTA0MTogY3R5cGVzIGRvZXMgbm93IGFsbG93IHBpY2tsaW5nIHdpZGUgY2hhcmFjdGVyLgotCi0tIElzc3VlICM1NzY4OiBGaXhlZCBidWcgaW4gVW5pY29kZSBvdXRwdXQgbG9naWMgYW5kIHRlc3QgY2FzZSBmb3Igc2FtZS4KLQotLSBJc3N1ZSAjMTE2MTAzMTogZml4IHJlYWR3cml0ZSBzZWxlY3QgZmxhZyBoYW5kbGluZzogUE9MTFBSSSBub3cKLSAgcmVzdWx0cyBpbiBhIGhhbmRsZV9leHB0X2V2ZW50IGNhbGwsIG5vdCBoYW5kbGVfcmVhZF9ldmVudCwgYW5kIFBPTExFUlIKLSAgYW5kIFBPTExOVkFMIG5vdyBjYWxsIGhhbmRsZV9jbG9zZSwgbm90IGhhbmRsZV9leHB0X2V2ZW50LiAgQWxzbywKLSAgZGlzcGF0Y2hlciBub3cgaGFzIGFuICdpZ25vcmVfbG9nX3R5cGVzJyBhdHRyaWJ1dGUgZm9yIHN1cHByZXNzaW5nCi0gIGxvZyBtZXNzYWdlcywgd2hpY2ggaXMgc2V0IHRvICd3YXJuaW5nJyBieSBkZWZhdWx0LgotCi0tIElzc3VlICM1ODI4IChJbnZhbGlkIGJlaGF2aW9yIG9mIHVuaWNvZGUubG93ZXIpOiBGaXhlZCBib2d1cyBsb2dpYyBpbgotICBtYWtldW5pY29kZWRhdGEucHkgYW5kIHJlZ2VuZXJhdGVkIHRoZSBVbmljb2RlIGRhdGFiYXNlIChUaGlzIGZpeGVzCi0gIHUnXHUxZDc5Jy5sb3dlcigpID09ICdceDAwJykuCi0KLS0gSXNzdWUgIzEyMDI6IHppcGZpbGUgbW9kdWxlIHdvdWxkIGNhdXNlIGEgRGVwcmVjYXRpb25XYXJuaW5nIHdoZW4gc3RvcmluZwotICBmaWxlcyB3aXRoIGEgQ1JDMzIgPiAyKiozMS0xLgotCi0tIElzc3VlICM2MTYzOiBGaXhlZCBIUC1VWCBydW50aW1lIGxpYnJhcnkgZGlyIG9wdGlvbnMgaW4KLSAgZGlzdHV0aWxzLnVuaXhjb21waWxlci4gSW5pdGlhbCBwYXRjaCBieSBTcmlkaGFyIFJhdG5ha3VtYXIgYW5kCi0gIE1pY2hhZWwgSGF1YmVud2FsbG5lci4KLQotLSBJc3N1ZSAjNDY2MDogSWYgYSBtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZS5wdXQoKSB3YXMgcHJlZW1wdGVkLCBpdCB3YXMKLSAgcG9zc2libGUgdG8gZ2V0IGEgc3B1cmlvdXMgJ3Rhc2tfZG9uZSgpIGNhbGxlZCB0b28gbWFueSB0aW1lcycgZXJyb3IuCi0KLS0gSXNzdWUgIzY1OTU6IFRoZSBEZWNpbWFsIGNvbnN0cnVjdG9yIG5vdyBhbGxvd3MgYXJiaXRyYXJ5IFVuaWNvZGUKLSAgZGVjaW1hbCBkaWdpdHMgaW4gaW5wdXQsIGFzIHJlY29tbWVuZGVkIGJ5IHRoZSBzdGFuZGFyZC4gIFByZXZpb3VzbHkKLSAgaXQgd2FzIHJlc3RyaWN0ZWQgdG8gYWNjZXB0aW5nIFswLTldLgotCi0tIElzc3VlICM2NTUzOiBGaXhlZCBhIGNyYXNoIGluIGNQaWNrbGUubG9hZCgpLCB3aGVuIGdpdmVuIGEgZmlsZS1saWtlIG9iamVjdAotICBjb250YWluaW5nIGluY29tcGxldGUgZGF0YS4KLQotLSBJc3N1ZSAjMjYyMjogRml4ZWQgYW4gSW1wb3J0RXJyb3Igd2hlbiBpbXBvcnRpbmcgZW1haWwubWVzc2FnZSBmcm9tIGEKLSAgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiBidWlsdCB3aXRoIHB5MmV4ZSBvciBweTJhcHAuCi0KLS0gSXNzdWUgIzY0NTU6IEZpeGVkIHRlc3RfYnVpbGRfZXh0IHVuZGVyIHdpbjMyLgotCi0tIElzc3VlICM2NDAzOiBGaXhlZCBwYWNrYWdlIHBhdGggdXNhZ2UgaW4gYnVpbGRfZXh0LgotCi0tIElzc3VlICM2Mjg3OiBBZGRlZCB0aGUgbGljZW5zZSBmaWVsZCBpbiBEaXN0dXRpbHMgZG9jdW1lbnRhdGlvbi4KLQotLSBJc3N1ZSAjNjI2MzogRml4ZWQgc3ludGF4IGVycm9yIGluIGRpc3R1dGlscy5jeWd3aW5jb21waWxlci4KLQotLSBJc3N1ZSAjNTIwMTogZGlzdHV0aWxzLnN5c2NvbmZpZy5wYXJzZV9tYWtlZmlsZSgpIG5vdyB1bmRlcnN0YW5kcyBgJCRgCi0gIGluIE1ha2VmaWxlcy4gVGhpcyBwcmV2ZW50cyBjb21waWxlIGVycm9ycyB3aGVuIHVzaW5nIHN5bnRheCBsaWtlOgotICBgTERGTEFHUz0nLXJwYXRoPVwkJExJQjovc29tZS9vdGhlci9wYXRoJ2AuIFBhdGNoIGJ5IEZsb3JpcyBCcnV5bm9vZ2hlLgotCi0tIElzc3VlICM2MDYyOiBJbiBkaXN0dXRpbHMsIGZpeGVkIHRoZSBwYWNrYWdlIG9wdGlvbiBvZiBidWlsZF9leHQuIEZlZWRiYWNrCi0gIGFuZCB0ZXN0cyBvbiBweXdpbjMyIGJ5IFRpbSBHb2xkZW4uCi0KLS0gSXNzdWUgIzEzMDk1Njc6IEZpeCBsaW5lY2FjaGUgYmVoYXZpb3Igb2Ygc3RyaXBwaW5nIHN1YmRpcmVjdG9yaWVzIHdoZW4KLSAgbG9va2luZyBmb3IgZmlsZXMgZ2l2ZW4gYnkgYSByZWxhdGl2ZSBmaWxlbmFtZS4KLQotLSBJc3N1ZSAjNjA0NjogRml4ZWQgdGhlIGxpYnJhcnkgZXh0ZW5zaW9uIHdoZW4gZGlzdHV0aWxzIGJ1aWxkX2V4dCBpcyB1c2VkCi0gIGlucGxhY2UuIEluaXRpYWwgcGF0Y2ggYnkgUm91bWVuIFBldHJvdi4KLQotLSBJc3N1ZSAjNjAyMjogYSB0ZXN0IGZpbGUgd2FzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYnkKLSAgdGVzdF9nZXRfb3V0cHV0cyBpbiBEaXN0dXRpbHMuCi0KLS0gSXNzdWUgIzU5Nzc6IGRpc3R1dGlscyBidWlsZF9leHQuZ2V0X291dHB1dHMgd2FzIG5vdCB0YWtpbmcgaW50byBhY2NvdW50IHRoZQotICBpbnBsYWNlIG9wdGlvbi4gSW5pdGlhbCBwYXRjaCBieSBreHJvYmVydG8uCi0KLS0gSXNzdWUgIzU5ODQ6IGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2V4dC5jaGVja19leHRlbnNpb25zX2xpc3QgY2hlY2tzIHdlcmUKLSAgYnJva2VuIGZvciBvbGQtc3R5bGUgZXh0ZW5zaW9ucy4KLQotLSBJc3N1ZSAjNTg1NDogVXBkYXRlZCBfX2FsbF9fIHRvIGluY2x1ZGUgc29tZSBtaXNzaW5nIG5hbWVzIGFuZCByZW1vdmUgc29tZQotICBuYW1lcyB3aGljaCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLgotCi0tIElzc3VlICM1ODEwOiBGaXhlZCBEaXN0dXRpbHMgdGVzdF9idWlsZF9zY3JpcHRzIHNvIGl0IHVzZXMKLSAgc3lzY29uZmlnLmdldF9jb25maWdfdmFycy4KLQotLSBJc3N1ZSAjNjg2NTogRml4IHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHB3ZAotICBtb2R1bGUuCi0KLUV4dGVuc2lvbiBNb2R1bGVzCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICM2OTQ0OiBGaXggYSBTeXN0ZW1FcnJvciB3aGVuIHNvY2tldC5nZXRuYW1laW5mbygpIHdhcyBjYWxsZWQKLSAgd2l0aCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHR1cGxlIGFzIGZpcnN0IGFyZ3VtZW50LgotCi0tIElzc3VlICM2ODQ4OiBGaXggY3Vyc2VzIG1vZHVsZSBidWlsZCBmYWlsdXJlIG9uIE9TIFggMTAuNi4KLQotLSBGaXggZXhwYXQgdG8gbm90IHNlZ2ZhdWx0IHdpdGggc3BlY2lhbGx5IGNyYWZ0ZWQgaW5wdXQuCi0KLS0gSXNzdWUgIzQ4NzM6IEZpeCByZXNvdXJjZSBsZWFrcyBpbiBlcnJvciBjYXNlcyBvZiBwd2QgYW5kIGdycC4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzY5ODA6IEZpeCBjdHlwZXMgYnVpbGQgZmFpbHVyZSBvbiBhcm1lbC1saW51eC1nbnVlYWJpIHdpdGgKLSAgLW1mbG9hdC1hYmk9c29mdGZwLgotCi0tIElzc3VlICM2ODAyOiBGaXggYnVpbGQgaXNzdWVzIG9uIE1hY09TWCAxMC42Ci0KLS0gSXNzdWUgIzUzOTA6IEFkZCB1bmluc3RhbGwgaWNvbiBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIGZpbGUKLSAgZXh0ZW5zaW9ucyBhcmUgaW5zdGFsbGVkLgotCi0tIElzc3VlICM2MDk0OiBCdWlsZCBjb3JyZWN0bHkgd2l0aCBTdWJ2ZXJzaW9uIDEuNy4KLQotLSBJc3N1ZSAjNTcyNjogTWFrZSBNb2R1bGVzL2xkX3NvX2FpeCByZXR1cm4gdGhlIGFjdHVhbCBleGl0IGNvZGUgb2YgdGhlCi0gIGxpbmtlciwgcmF0aGVyIHRoYW4gYWx3YXlzIGV4aXQgc3VjY2Vzc2Z1bGx5LiBQYXRjaCBieSBGbG9yaXMgQnJ1eW5vb2doZS4KLQotLSBJc3N1ZSAjNTgwOTogU3BlY2lmeWluZyBib3RoIC0tZW5hYmxlLWZyYW1ld29yayBhbmQgLS1lbmFibGUtc2hhcmVkIGlzCi0gIGFuIGVycm9yLiBDb25maWd1cmUgbm93IGV4cGxpY2l0eSB0ZWxscyB5b3UgYWJvdXQgdGhpcy4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICM2NTU2OiBGaXhlZCB0aGUgRGlzdHV0aWxzIGNvbmZpZ3VyYXRpb24gZmlsZXMgbG9jYXRpb24gZXhwbGFuYXRpb24KLSAgZm9yIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzY4MDEgOiBzeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUgYWxzbyBhY2NlcHRzIHwuCi0gIFRoYW5rcyB0byBDYXJsIENoZW5ldC4KLQotVGVzdHMKLS0tLS0tCi0KLS0gSXNzdWUgIzU4Mzc6IENlcnRhaW4gc2VxdWVuY2VzIG9mIGNhbGxzIHRvIHNldCgpIGFuZCB1bnNldCgpIGZvcgotICBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQgb2JqZWN0cyByZXN0b3JlZCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0gIGluY29ycmVjdGx5IG9uIF9fZXhpdF9fLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNi4yCi09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAxNC1BcHItMjAwOSoKLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuMiByYyAxCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA2LUFwci0yMDA5KgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSB4cmFuZ2UoKSBpcyBub3cgcmVnaXN0ZXJlZCBhcyBhIFNlcXVlbmNlLgorLSBJc3N1ZSAjMjM5NjogVGhlIG1lbW9yeXZpZXcgb2JqZWN0IHdhcyBiYWNrcG9ydGVkIGZyb20gUHl0aG9uIDMuMS4KIAogLSBGaXggYSBwcm9ibGVtIGluIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbiB0aGF0IGxlYWRzIHRvICJ1bmRldGVjdGVkIGVycm9ycyIKICAgd2hlbiBoaXR0aW5nIHRoZSByZWN1cnNpb24gbGltaXQgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLgogCiAtIElzc3VlICMxNjY1MjA2OiBSZW1vdmUgdGhlIGxhc3QgZWFnZXIgaW1wb3J0IGluIF93YXJuaW5ncy5jIGFuZCBtYWtlIGl0IGxhenkuCiAKLS0gSXNzdWUgIzQwMzQ6IEZpeCB3ZWlyZCBhdHRyaWJ1dGUgZXJyb3IgbWVzc2FnZXMgb2YgdGhlIHRyYWNlYmFjayBvYmplY3QuIChBcwotICBhIHJlc3VsdCB0cmFjZWJhY2suX19tZW1iZXJzX18gbm8gbG9uZ2VyIGV4aXN0cy4pCistIElzc3VlICM0ODY1OiBPbiBNYWNPU1ggL0xpYnJhcnkvUHl0aG9uLzIuNy9zaXRlLXBhY2thZ2VzIGlzIGFkZGVkIHRvIHRoZSBlbmQKKyAgc3lzLnBhdGgsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHN5c3RlbSBpbnN0YWxsIG9mIFB5dGhvbi4KIAotLSBJc3N1ZSAjNTI0NzogSW1wcm92ZSBlcnJvciBtZXNzYWdlIHdoZW4gdW5rbm93biBmb3JtYXQgY29kZXMgYXJlCi0gIHVzZWQgd2hlbiB1c2luZyBzdHIuZm9ybWF0KCkgd2l0aCBzdHIsIHVuaWNvZGUsIGxvbmcsIGludCwgYW5kCi0gIGZsb2F0IGFyZ3VtZW50cy4KKy0gSXNzdWUgIzQ2ODg6IEFkZCBhIGhldXJpc3RpYyBzbyB0aGF0IHR1cGxlcyBhbmQgZGljdHMgY29udGFpbmluZyBvbmx5CisgIHVudHJhY2thYmxlIG9iamVjdHMgYXJlIG5vdCB0cmFja2VkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gVGhpcyBjYW4gcmVkdWNlCisgIHRoZSBzaXplIG9mIGNvbGxlY3Rpb25zIGFuZCB0aGVyZWZvcmUgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBvdmVyaGVhZCBvbgorICBsb25nLXJ1bm5pbmcgcHJvZ3JhbXMsIGRlcGVuZGluZyBvbiB0aGVpciBwYXJ0aWN1bGFyIHVzZSBvZiBkYXRhdHlwZXMuCiAKLS0gUnVubmluZyBQeXRob24gd2l0aCB0aGUgLTMgb3B0aW9uIG5vdyBhbHNvIHdhcm5zIGFib3V0IGNsYXNzaWMgZGl2aXNpb24KLSAgZm9yIGludHMgYW5kIGxvbmdzLgorLSBJc3N1ZSAjNTUxMjogUmV3cml0ZSBQeUxvbmcgbG9uZyBkaXZpc2lvbiBhbGdvcml0aG0gKHhfZGl2cmVtKSB0byBpbXByb3ZlIGl0cworICBwZXJmb3JtYW5jZS4gIExvbmcgZGl2aXNpb25zIGFuZCByZW1haW5kZXIgb3BlcmF0aW9ucyBhcmUgbm93IGJldHdlZW4gNTAlIGFuZAorICAxNTAlIGZhc3Rlci4KIAotLSBJc3N1ZSAjNTAxMzogRml4ZWQgYSBidWcgaW4gRmlsZUhhbmRsZXIgd2hpY2ggb2NjdXJyZWQgd2hlbiB0aGUgZGVsYXkKLSAgcGFyYW1ldGVyIHdhcyBzZXQuCistIElzc3VlICM0MjU4OiBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBiYXNlIDIqKjMwIGluc3RlYWQgb2YgYmFzZSAyKioxNSBmb3IgdGhlCisgIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGludGVnZXJzLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gIEJhc2UgMioqMzAgaXMKKyAgZW5hYmxlZCBieSBkZWZhdWx0IG9uIDY0LWJpdCBtYWNoaW5lcy4gIEFkZCAtLWVuYWJsZS1iaWctZGlnaXRzIG9wdGlvbiB0bworICBjb25maWd1cmUsIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdC4gIEFkZCBzeXMubG9uZ19pbmZvIHN0cnVjdHNlcSB0bworICBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnRlcm5hbCBmb3JtYXQuCisKKy0gSXNzdWUgIzQwMzQ6IEZpeCB3ZWlyZCBhdHRyaWJ1dGUgZXJyb3IgbWVzc2FnZXMgb2YgdGhlIHRyYWNlYmFjayBvYmplY3QuIChBcyBhCisgIHJlc3VsdCB0cmFjZWJhY2suX19tZW1iZXJzX18gbm8gbG9uZ2VyIGV4aXN0cy4pCisKKy0gSXNzdWUgIzQ0NzQ6IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIgbm93IGNvbnZlcnRzIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgQk1QIHRvCisgIHN1cnJvZ2F0ZSBwYWlycywgb24gc3lzdGVtcyB3aXRoIHNpemVvZih3Y2hhcl90KSA9PSA0IGFuZCBzaXplb2YoUHlfVU5JQ09ERSkKKyAgPT0gMi4KKworLSBJc3N1ZSAjNTIzNzogQWxsb3cgYXV0by1udW1iZXJlZCBmaWVsZHMgaW4gc3RyLmZvcm1hdCgpLiBGb3IgZXhhbXBsZTogYGAne30KKyAge30nLmZvcm1hdCgxLCAyKSA9PSAnMSAyJ2BgLgorCistIElzc3VlICMzNjUyOiBNYWtlIHRoZSAnbGluZScgYXJndW1lbnQgZm9yIGBgd2FybmluZ3Muc2hvd3dhcm5pbmcoKWBgIGEKKyAgcmVxdWlyZW1lbnQuICBNZWFucyB0aGUgRGVwcmVjYXRpb25XYXJuaW5nIGZyb20gUHl0aG9uIDIuNiBjYW4gZ28gYXdheS4KKworLSBJc3N1ZSAjNTI0NzogSW1wcm92ZSBlcnJvciBtZXNzYWdlIHdoZW4gdW5rbm93biBmb3JtYXQgY29kZXMgYXJlIHVzZWQgd2hlbgorICB1c2luZyBgYHN0ci5mb3JtYXQoKWBgIHdpdGggc3RyLCB1bmljb2RlLCBsb25nLCBpbnQsIGFuZCBmbG9hdCBhcmd1bWVudHMuCisKKy0gUnVubmluZyBQeXRob24gd2l0aCB0aGUgLTMgb3B0aW9uIG5vdyBhbHNvIHdhcm5zIGFib3V0IGNsYXNzaWMgZGl2aXNpb24gZm9yCisgIGludHMgYW5kIGxvbmdzLgorCistIElzc3VlICM1MjYwOiBMb25nIGludGVnZXJzIG5vdyBjb25zdW1lIGxlc3MgbWVtb3J5OiBhdmVyYWdlIHNhdmluZyBpcyAyIGJ5dGVzCisgIHBlciBsb25nIG9uIGEgMzItYml0IHN5c3RlbSBhbmQgNiBieXRlcyBwZXIgbG9uZyBvbiBhIDY0LWJpdCBzeXN0ZW0uCisKKy0gSXNzdWUgIzUxODY6IFJlZHVjZSBoYXNoIGNvbGxpc2lvbnMgZm9yIG9iamVjdHMgd2l0aCBubyBfX2hhc2hfXyBtZXRob2QgYnkKKyAgcm90YXRpbmcgdGhlIG9iamVjdCBwb2ludGVyIGJ5IDQgYml0cyB0byB0aGUgcmlnaHQuCisKKy0gSXNzdWUgIzQ1NzU6IEZpeCBQeV9JU19JTkZJTklUWSBtYWNybyB0byB3b3JrIGNvcnJlY3RseSBvbiB4ODcgRlBVczogaXQgbm93CisgIGZvcmNlcyBpdHMgYXJndW1lbnQgdG8gZG91YmxlIGJlZm9yZSB0ZXN0aW5nIGZvciBpbmZpbml0eS4KKworLSBJc3N1ZSAjNDk3ODogUGFzc2luZyBrZXl3b3JkIGFyZ3VtZW50cyBhcyB1bmljb2RlIHN0cmluZ3MgaXMgbm93IGFsbG93ZWQuCiAKIC0gSXNzdWUgIzEyNDI2NTc6IHRoZSBfX2xlbl9fKCkgYW5kIF9fbGVuZ3RoX2hpbnRfXygpIGNhbGxzIGluIHNldmVyYWwgdG9vbHMKICAgd2VyZSBzdXBwcmVzc2luZyBhbGwgZXhjZXB0aW9ucy4gIFRoZXNlIGluY2x1ZGUgbGlzdCgpLCBmaWx0ZXIoKSwgbWFwKCksCiAgIHppcCgpLCBhbmQgYnl0ZWFycmF5KCkuCiAKLS0gSXNzdWUgIzQ5MzU6IFRoZSBvdmVyZmxvdyBjaGVja2luZyBjb2RlIGluIHRoZSBleHBhbmR0YWJzKCkgbWV0aG9kIGNvbW1vbgotICB0byBzdHIsIGJ5dGVzIGFuZCBieXRlYXJyYXkgY291bGQgYmUgb3B0aW1pemVkIGF3YXkgYnkgdGhlIGNvbXBpbGVyLCBsZXR0aW5nCi0gIHRoZSBpbnRlcnByZXRlciBzZWdmYXVsdCBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXJyb3IuCistIG9zLmZ0cnVuY2F0ZSByYWlzZXMgT1NFcnJvcnMgaW5zdGVhZCBvZiBJT0Vycm9ycyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBvcworICBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzQ5OTE6IFBhc3NpbmcgaW52YWxpZCBmaWxlIGRlc2NyaXB0b3JzIHRvIGlvLkZpbGVJTyBub3cgcmFpc2VzIGFuCisgIE9TRXJyb3IuCisKKy0gSXNzdWUgIzQ4MDc6IFBvcnQgdGhlIF93aW5yZWcgbW9kdWxlIHRvIFdpbmRvd3MgQ0UuCisKKy0gSXNzdWUgIzQ5MzU6IFRoZSBvdmVyZmxvdyBjaGVja2luZyBjb2RlIGluIHRoZSBleHBhbmR0YWJzKCkgbWV0aG9kIGNvbW1vbiB0bworICBzdHIsIGJ5dGVzIGFuZCBieXRlYXJyYXkgY291bGQgYmUgb3B0aW1pemVkIGF3YXkgYnkgdGhlIGNvbXBpbGVyLCBsZXR0aW5nIHRoZQorICBpbnRlcnByZXRlciBzZWdmYXVsdCBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzM3MjA6IEZpeCBhIGNyYXNoIHdoZW4gYW4gaXRlcmF0b3IgbW9kaWZpZXMgaXRzIGNsYXNzIGFuZCByZW1vdmVzIGl0cworICBfX25leHRfXyBtZXRob2QuCisKKy0gSXNzdWUgIzQ4OTM6IFVzZSBOVCB0aHJlYWRpbmcgb24gQ0UuCiAKIC0gSXNzdWUgIzQ5MTU6IFBvcnQgc3lzbW9kdWxlIHRvIFdpbmRvd3MgQ0UuCiAKLS0gSXNzdWUgIzExODAxOTM6IFdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlIGZyb20gYSAucHljIChvciAucHlvKSBmaWxlIHdpdGgKLSAgYW4gZXhpc3RpbmcgLnB5IGNvdW50ZXJwYXJ0LCBvdmVycmlkZSB0aGUgY29fZmlsZW5hbWUgYXR0cmlidXRlcyBvZiBhbGwKLSAgY29kZSBvYmplY3RzIGlmIHRoZSBvcmlnaW5hbCBmaWxlbmFtZSBpcyBvYnNvbGV0ZSAod2hpY2ggY2FuIGhhcHBlbiBpZiB0aGUKLSAgZmlsZSBoYXMgYmVlbiByZW5hbWVkLCBtb3ZlZCwgb3IgaWYgaXQgaXMgYWNjZXNzZWQgdGhyb3VnaCBkaWZmZXJlbnQgcGF0aHMpLgotICBQYXRjaCBieSBaaWdhIFNlaWxuYWNodCBhbmQgSmVhbi1QYXVsIENhbGRlcm9uZS4KKy0gSXNzdWUgIzQwNzQ6IENoYW5nZSB0aGUgY3JpdGVyaWEgZm9yIGRvaW5nIGEgZnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gKGkuZS4KKyAgY29sbGVjdGluZyB0aGUgb2xkZXN0IGdlbmVyYXRpb24pIHNvIHRoYXQgYWxsb2NhdGluZyBsb3RzIG9mIG9iamVjdHMgd2l0aG91dAorICBkZXN0cm95aW5nIHRoZW0gZG9lcyBub3Qgc2hvdyBxdWFkcmF0aWMgcGVyZm9ybWFuY2UuIEJhc2VkIG9uIGEgcHJvcG9zYWwgYnkKKyAgTWFydGluIHZvbiBMw7Z3aXMgYXQKKyAgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDA4LUp1bmUvMDgwNTc5Lmh0bWwuCiAKLS0gSXNzdWUgIzQwNzU6IFVzZSBPdXRwdXREZWJ1Z1N0cmluZ1cgaW4gUHlfRmF0YWxFcnJvci4KKy0gSXNzdWUgIzQ4NTA6IENoYW5nZSBDT1VOVF9BTExPQ1MgdmFyaWFibGVzIHRvIFB5X3NzaXplX3QuCisKKy0gSXNzdWUgIzExODAxOTM6IFdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlIGZyb20gYSAucHljIChvciAucHlvKSBmaWxlIHdpdGggYW4KKyAgZXhpc3RpbmcgLnB5IGNvdW50ZXJwYXJ0LCBvdmVycmlkZSB0aGUgY29fZmlsZW5hbWUgYXR0cmlidXRlcyBvZiBhbGwgY29kZQorICBvYmplY3RzIGlmIHRoZSBvcmlnaW5hbCBmaWxlbmFtZSBpcyBvYnNvbGV0ZSAod2hpY2ggY2FuIGhhcHBlbiBpZiB0aGUgZmlsZSBoYXMKKyAgYmVlbiByZW5hbWVkLCBtb3ZlZCwgb3IgaWYgaXQgaXMgYWNjZXNzZWQgdGhyb3VnaCBkaWZmZXJlbnQgcGF0aHMpLiAgUGF0Y2ggYnkKKyAgWmlnYSBTZWlsbmFjaHQgYW5kIEplYW4tUGF1bCBDYWxkZXJvbmUuCisKKy0gSXNzdWUgIzQwNzU6IFVzZSBgYE91dHB1dERlYnVnU3RyaW5nVygpYGAgaW4gUHlfRmF0YWxFcnJvci4KIAogLSBJc3N1ZSAjNDc5NzogSU9FcnJvci5maWxlbmFtZSB3YXMgbm90IHNldCB3aGVuIF9maWxlaW8uRmlsZUlPIGZhaWxlZCB0byBvcGVuCiAgIGZpbGUgd2l0aCBgc3RyJyBmaWxlbmFtZSBvbiBXaW5kb3dzLgpAQCAtMTMyMiw4ICsyNTAwLDggQEAKIC0gSXNzdWUgIzM2ODA6IFJlZmVyZW5jZSBjeWNsZXMgY3JlYXRlZCB0aHJvdWdoIGEgZGljdCwgc2V0IG9yIGRlcXVlIGl0ZXJhdG9yCiAgIGRpZCBub3QgZ2V0IGNvbGxlY3RlZC4KIAotLSBJc3N1ZSAjNDcwMTogUHlPYmplY3RfSGFzaCBub3cgaW1wbGljaXRseSBjYWxscyBQeVR5cGVfUmVhZHkgb24gdHlwZXMKLSAgd2hlcmUgdGhlIHRwX2hhc2ggYW5kIHRwX2RpY3Qgc2xvdHMgYXJlIGJvdGggTlVMTC4KKy0gSXNzdWUgIzQ3MDE6IFB5T2JqZWN0X0hhc2ggbm93IGltcGxpY2l0bHkgY2FsbHMgUHlUeXBlX1JlYWR5IG9uIHR5cGVzIHdoZXJlCisgIHRoZSB0cF9oYXNoIGFuZCB0cF9kaWN0IHNsb3RzIGFyZSBib3RoIE5VTEwuCiAKIC0gSXNzdWUgIzQ3NjQ6IFdpdGggaW8ub3BlbiwgSU9FcnJvci5maWxlbmFtZSBpcyBzZXQgd2hlbiB0cnlpbmcgdG8gb3BlbiBhCiAgIGRpcmVjdG9yeSBvbiBQT1NJWCBzeXN0ZW1zLgpAQCAtMTMzMiw2MCArMjUxMCw2NjUgQEAKICAgc3lzdGVtcy4KIAogLSBJc3N1ZSAjNDc1OTogTm9uZSBpcyBub3cgYWxsb3dlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgb2YKLSAgYnl0ZWFycmF5LnRyYW5zbGF0ZSgpLiAgSXQgd2FzIGFsd2F5cyBhbGxvd2VkIGZvciBieXRlcy50cmFuc2xhdGUoKS4KLQotLSBJc3N1ZSAjNDc1OTogZml4IGEgc2VnZmF1bHQgZm9yIGJ5dGVhcnJheS50cmFuc2xhdGUoeCwgTm9uZSkuCisgIGBgYnl0ZWFycmF5LnRyYW5zbGF0ZSgpYGAuICBJdCB3YXMgYWx3YXlzIGFsbG93ZWQgZm9yIGBgYnl0ZXMudHJhbnNsYXRlKClgYC4KIAogLSBBZGRlZCB0ZXN0IGNhc2UgdG8gZW5zdXJlIGF0dGVtcHRzIHRvIHJlYWQgZnJvbSBhIGZpbGUgb3BlbmVkIGZvciB3cml0aW5nCiAgIGZhaWwuCiAKLS0gSXNzdWUgIzQ1OTc6IEZpeGVkIHNldmVyYWwgb3Bjb2RlcyB0aGF0IHdlcmVuJ3QgYWx3YXlzIHByb3BhZ2F0aW5nCi0gIGV4Y2VwdGlvbnMuCistIElzc3VlICMyNDY3OiBnYy5ERUJVR19TVEFUUyByZXBvcnRlZCBpbnZhbGlkIGVsYXBzZWQgdGltZXMuIEFsc28sIGFsd2F5cyBwcmludAorICBlbGFwc2VkIHRpbWVzLCBub3Qgb25seSB3aGVuIHNvbWUgb2JqZWN0cyBhcmUgdW5jb2xsZWN0YWJsZS91bnJlYWNoYWJsZS4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgTmVpbCBTY2hlbWVuYXVlci4KIAotLSBJc3N1ZSAjMjQ2NzogZ2MuREVCVUdfU1RBVFMgcmVwb3J0ZWQgaW52YWxpZCBlbGFwc2VkIHRpbWVzLiBBbHNvLCBhbHdheXMKLSAgcHJpbnQgZWxhcHNlZCB0aW1lcywgbm90IG9ubHkgd2hlbiBzb21lIG9iamVjdHMgYXJlIHVuY29sbGVjdGFibGUgLwotICB1bnJlYWNoYWJsZS4gT3JpZ2luYWwgcGF0Y2ggYnkgTmVpbCBTY2hlbWVuYXVlci4KKy0gSXNzdWUgIzM0Mzk6IEFkZCBhIGJpdF9sZW5ndGggbWV0aG9kIHRvIGludCBhbmQgbG9uZy4KIAotLSBJc3N1ZSAjNDU4OTogRml4ZWQgZXhjZXB0aW9uIGhhbmRsaW5nIHdoZW4gdGhlIF9fZXhpdF9fIGZ1bmN0aW9uIG9mIGEKLSAgY29udGV4dCBtYW5hZ2VyIHJldHVybnMgYSB2YWx1ZSB0aGF0IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBib29sLgorLSBJc3N1ZSAjMjE4MzogU2ltcGxpZnkgYW5kIG9wdGltaXplIGJ5dGVjb2RlIGZvciBsaXN0IGNvbXByZWhlbnNpb25zLiAgT3JpZ2luYWwKKyAgcGF0Y2ggYnkgTmVhbCBOb3J3aXR6LgogCi0tIElzc3VlICM0MjMzOiBDaGFuZ2VkIHNlbWFudGljIG9mIGBgX2ZpbGVpby5GaWxlSU9gYCdzIGBgY2xvc2UoKWBgCi0gIG1ldGhvZCBvbiBmaWxlIG9iamVjdHMgd2l0aCBjbG9zZWZkPUZhbHNlLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIHN0aWxsCi0gIGtlcHQgb3BlbiBidXQgdGhlIGZpbGUgb2JqZWN0IGJlaGF2ZXMgbGlrZSBhIGNsb3NlZCBmaWxlLiBUaGUgYGBGaWxlSU9gYAotICBvYmplY3QgYWxzbyBnb3QgYSBuZXcgcmVhZG9ubHkgYXR0cmlidXRlIGBgY2xvc2VmZGBgLgorLSBJc3N1ZSAjNDU5NzogRml4ZWQgZXhjZXB0aW9uIGhhbmRsaW5nIHdoZW4gdGhlIF9fZXhpdF9fIGZ1bmN0aW9uIG9mIGEgY29udGV4dAorICBtYW5hZ2VyIHJldHVybnMgYSB2YWx1ZSB0aGF0IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBib29sLgogCi0tIElzc3VlICMzNjg5OiBUaGUgbGlzdCByZXZlcnNlZCBpdGVyYXRvciBub3cgc3VwcG9ydHMgX19sZW5ndGhfaGludF9fCi0gIGluc3RlYWQgb2YgX19sZW5fXy4gIEJlaGF2aW9yIG5vdyBtYXRjaGVzIG90aGVyIHJldmVyc2VkIGl0ZXJhdG9ycy4KKy0gSXNzdWUgIzQ1OTc6IEZpeGVkIHNldmVyYWwgb3Bjb2RlcyB0aGF0IHdlcmVuJ3QgYWx3YXlzIHByb3BhZ2F0aW5nIGV4Y2VwdGlvbnMuCiAKLS0gSXNzdWUgIzQ1MDk6IFZhcmlvdXMgaXNzdWVzIHN1cnJvdW5kaW5nIHJlc2l6ZSBvZiBieXRlYXJyYXkgb2JqZWN0cyB0bwotICB3aGljaCB0aGVyZSBhcmUgYnVmZmVyIGV4cG9ydHMuCistIElzc3VlICM0NDQ1OiBSZXBsYWNlIGBgc2l6ZW9mKFB5U3RyaW5nT2JqZWN0KWBgIHdpdGgKKyAgYGBvZmZzZXRvZihQeVN0cmluZ09iamVjdCwgb2Jfc3ZhbCkgKyAxYGAgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSBmb3Igc3RyCisgIGluc3RhbmNlcy4gIE9uIGEgdHlwaWNhbCBtYWNoaW5lIHRoaXMgc2F2ZXMgMyBieXRlcyBvZiBtZW1vcnkgKG9uIGF2ZXJhZ2UpIHBlcgorICBzdHJpbmcgYWxsb2NhdGlvbi4KIAotLSBJc3N1ZSAjMzg0NTogSW4gUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MgYXZvaWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdpdGgKLSAgc2hvcnQgZmlsZSBuYW1lcy4KKy0gSXNzdWUgIzM5OTY6IE9uIFdpbmRvd3MsIHRoZSBQeU9TX0NoZWNrU3RhY2sgZnVuY3Rpb24gd291bGQgY2F1c2UgdGhlCisgIGludGVycHJldGVyIHRvIGFib3J0ICgiRmF0YWwgUHl0aG9uIGVycm9yOiBDb3VsZCBub3QgcmVzZXQgdGhlIHN0YWNrISIpCisgIGluc3RlYWQgb2YgdGhyb3dpbmcgYSBNZW1vcnlFcnJvci4KKworLSBJc3N1ZSAjMzY4OTogVGhlIGxpc3QgcmV2ZXJzZWQgaXRlcmF0b3Igbm93IHN1cHBvcnRzIF9fbGVuZ3RoX2hpbnRfXyBpbnN0ZWFkCisgIG9mIF9fbGVuX18uICBCZWhhdmlvciBub3cgbWF0Y2hlcyBvdGhlciByZXZlcnNlZCBpdGVyYXRvcnMuCisKKy0gSXNzdWUgIzQzNjc6IFB5dGhvbiB3b3VsZCBzZWdmYXVsdCBkdXJpbmcgY29tcGlsaW5nIHdoZW4gdGhlIHVuaWNvZGVkYXRhCisgIG1vZHVsZSBjb3VsZG4ndCBiZSBpbXBvcnRlZCBhbmQgXE4gZXNjYXBlcyB3ZXJlIHByZXNlbnQuCisKKy0gSXNzdWUgIzQyMzM6IENoYW5nZWQgc2VtYW50aWMgb2YgYGBfZmlsZWlvLkZpbGVJT2BgJ3MgYGBjbG9zZSgpYGAgbWV0aG9kIG9uCisgIGZpbGUgb2JqZWN0cyB3aXRoIGNsb3NlZmQ9RmFsc2UuIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgc3RpbGwga2VwdCBvcGVuIGJ1dAorICB0aGUgZmlsZSBvYmplY3QgYmVoYXZlcyBsaWtlIGEgY2xvc2VkIGZpbGUuIFRoZSBgYEZpbGVJT2BgIG9iamVjdCBhbHNvIGdvdCBhCisgIG5ldyByZWFkb25seSBhdHRyaWJ1dGUgYGBjbG9zZWZkYGAuCisKKy0gSXNzdWUgIzQzNDg6IFNvbWUgYnl0ZWFycmF5IG1ldGhvZHMgcmV0dXJuZWQgdGhhdCBkaWRuJ3QgY2F1c2UgYW55IGNoYW5nZSB0bworICB0aGUgYnl0ZWFycmF5LCByZXR1cm5lZCB0aGUgc2FtZSBieXRlYXJyYXkgaW5zdGVhZCBvZiBhIGNvcHkuCisKKy0gSXNzdWUgIzQzMTc6IEZpeGVkIGEgY3Jhc2ggaW4gdGhlIGBgaW1hZ2VvcC5yZ2IycmdiOCgpYGAgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzQyMzA6IElmIGBgX19nZXRhdHRyX19gYCBpcyBhIGRlc2NyaXB0b3IsIGl0IG5vdyBmdW5jdGlvbnMgY29ycmVjdGx5LgorCistIElzc3VlICM0MDQ4OiBUaGUgcGFyc2VyIG1vZHVsZSBub3cgY29ycmVjdGx5IHZhbGlkYXRlcyByZWxhdGl2ZSBpbXBvcnRzLgorCistIElzc3VlICM0MjI1OiBgYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFsc2BgIGRpZG4ndCB3b3JrIGluIGFuCisgIGV4ZWMgc3RhdGVtZW50LgorCistIElzc3VlICM0MTc2OiBGaXhlZCBhIGNyYXNoIHdoZW4gcGlja2xpbmcgYW4gb2JqZWN0IHdoaWNoIGBgX19yZWR1Y2VfX2BgIG1ldGhvZAorICBkb2VzIG5vdCByZXR1cm4gaXRlcmF0b3JzIGZvciB0aGUgNHRoIGFuZCA1dGggaXRlbXMuCisKKy0gSXNzdWUgIzQyMDk6IEVuYWJsaW5nIHVuaWNvZGVfbGl0ZXJhbHMgYW5kIHRoZSBwcmludF9mdW5jdGlvbiBpbiB0aGUgc2FtZQorICBfX2Z1dHVyZV9fIGltcG9ydCBkaWRuJ3Qgd29yay4KKworLSBVc2luZyBgYG5vbmxvY2FsYGAgYXMgYSB2YXJpYWJsZSBuYW1lIHdpbGwgbm93IHJhaXNlIGEgUHkzayBTeW50YXhXYXJuaW5nCisgIGJlY2F1c2UgaXQgaXMgYSByZXNlcnZlZCB3b3JkIGluIDMueC4KKworLSBPbiB3aW5kb3dzLCBgYG9zLmNoZGlyKClgYCBnaXZlbiB1bmljb2RlIHdhcyBub3Qgd29ya2luZyBpZgorICBHZXRDdXJyZW50RGlyZWN0b3J5VyByZXR1cm5lZCBhIHBhdGggbG9uZ2VyIHRoYW4gTUFYX1BBVEguIChCdXQgSXQncyBkb3VidGZ1bAorICB0aGlzIGNvZGUgcGF0aCBpcyByZWFsbHkgZXhlY3V0ZWQgYmVjYXVzZSBJIGNhbm5vdCBtb3ZlIHRvIHN1Y2ggZGlyZWN0b3J5IG9uCisgIHdpbjJrKQorCistIElzc3VlICM0MDY5OiBXaGVuIGBgc2V0LnJlbW92ZShlbGVtZW50KWBgIGlzIHVzZWQgd2l0aCBhIHNldCBlbGVtZW50LCB0aGUKKyAgZWxlbWVudCBpcyB0ZW1wb3JhcmlseSByZXBsYWNlZCB3aXRoIGFuIGVxdWl2YWxlbnQgZnJvemVuc2V0LiAgQnV0IHRoZQorICBldmVudHVhbCBLZXlFcnJvciB3b3VsZCBhbHdheXMgcmVwb3J0IHRoZSBlbXB0eSBgYGZyb3plbnNldCgpYGAgYXMgdGhlIG1pc3NpbmcKKyAga2V5LiAgTm93IGl0IGNvcnJlY3RseSByZWZlcnMgdG8gdGhlIGluaXRpYWwgZWxlbWVudC4KKworLSBJc3N1ZSAjNDUwOTogVmFyaW91cyBpc3N1ZXMgc3Vycm91bmRpbmcgcmVzaXplIG9mIGJ5dGVhcnJheSBvYmplY3RzIHRvIHdoaWNoCisgIHRoZXJlIGFyZSBidWZmZXIgZXhwb3J0cy4KKworLSBJc3N1ZSAjNDc0ODogTGFtYmRhIGdlbmVyYXRvcnMgbm8gbG9uZ2VyIHJldHVybiBhIHZhbHVlLgorCistIElzc3VlICMzNTgyOiBVc2UgbmF0aXZlIFRMUyBmdW5jdGlvbnMgb24gV2luZG93cworCistIFRoZSByZS5zdWIoKSwgcmUuc3VibigpIGFuZCByZS5zcGxpdCgpIGZ1bmN0aW9ucyBub3cgYWNjZXB0IGEgZmxhZ3MgcGFyYW1ldGVyLgorCistIElzc3VlICMzODQ1OiBJbiBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncyBhdm9pZCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2l0aCBzaG9ydAorICBmaWxlIG5hbWVzLgorCistIElzc3VlICMxMTEzMjQ0OiBQeV9YSU5DUkVGLCBQeV9ERUNSRUYsIFB5X1hERUNSRUY6IEFkZCBgZG8geyAuLi4gfSB3aGlsZSAoMCknCisgIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgogCiAtIElzc3VlICM1NzA1OiBvcy5zZXR1aWQoKSB3b3VsZCBub3QgYWNjZXB0IHZhbHVlcyA+IDIqKjMxLTEgYnV0IHB3ZC5nZXRwd25hbSgpCiAgIHJldHVybmVkIHRoZW0gb24gNjRiaXQgcGxhdGZvcm1zLgogCistIElzc3VlICM1MTA4OiBIYW5kbGUgJXMgbGlrZSAlUyBhbmQgJVIgaW4gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCk6IENhbGwKKyAgUHlVbmljb2RlX0RlY29kZVVURjgoKSBvbmNlLCByZW1lbWJlciB0aGUgcmVzdWx0IGFuZCBvdXRwdXQgaXQgaW4gYSBzZWNvbmQKKyAgc3RlcC4gVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aCBjb3VudGluZyBVVEYtOCBieXRlcyB0aGF0IGlnbm9yZXMgdGhlIGVmZmVjdAorICBvZiB1c2luZyB0aGUgcmVwbGFjZSBlcnJvciBoYW5kbGVyIGluIFB5VW5pY29kZV9EZWNvZGVVVEY4KCkuCisKKy0gSXNzdWUgIzM3Mzk6IFRoZSB1bmljb2RlLWludGVybmFsIGVuY29kZXIgbm93IHJlcG9ydHMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCisgIGNvbnN1bWVkIGxpa2UgYW55IG90aGVyIGVuY29kZXIgKGluc3RlYWQgb2YgdGhlIG51bWJlciBvZiBieXRlcykuCisKKy0gSXNzdWUgIzI0MjI6IFdoZW4gY29tcGlsZWQgd2l0aCB0aGUgYGAtLXdpdGgtdmFsZ3JpbmRgYCBvcHRpb24sIHRoZSBweW1hbGxvYworICBhbGxvY2F0b3Igd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIHdoZW4gcnVubmluZyB1bmRlciBWYWxncmluZC4gIFRoaXMKKyAgZ2l2ZXMgaW1wcm92ZWQgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIHdoZW4gcnVubmluZyB1bmRlciBWYWxncmluZCwgd2hpbGUgdGFraW5nCisgIGFkdmFudGFnZSBvZiBweW1hbGxvYyBhdCBvdGhlciB0aW1lcy4KKwogTGlicmFyeQogLS0tLS0tLQogCi0tIElzc3VlICM1NzQxOiBkb24ndCBkaXNhbGxvdyAiJSUiICh3aGljaCBpcyBhbiBlc2NhcGUgZm9yICIlIikgd2hlbiBzZXR0aW5nCi0gIGEgdmFsdWUgaW4gU2FmZUNvbmZpZ1BhcnNlci4KKy0gQWRkIGNvdW50KCkgYW5kIHJldmVyc2UoKSBtZXRob2RzIHRvIGNvbGxlY3Rpb25zLmRlcXVlKCkuCisKKy0gRml4IHZhcmlhdGlvbnMgb2YgZXh0ZW5kaW5nIGRlcXVlczogIGQuZXh0ZW5kKGQpICBkLmV4dGVuZGxlZnQoZCkgIGQrPWQKKworLSBJc3N1ZSAjNjk4NjogRml4IGNyYXNoIGluIHRoZSBKU09OIEMgYWNjZWxlcmF0b3Igd2hlbiBjYWxsZWQgd2l0aCB0aGUgd3JvbmcKKyAgcGFyYW1ldGVyIHR5cGVzLiAgUGF0Y2ggYnkgVmljdG9yIFN0aW5uZXIuCisKKy0gbG9nZ2luZzogQWRkZWQgb3B0aW9uYWwgInNlY3VyZSIgcGFyYW1ldGVyIHRvIFNNVFBIYW5kbGVyLCB0byBlbmFibGUgdXNlIG9mCisgIFRMUyB3aXRoIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLgorCistIElzc3VlICMxOTIzOiBGaXhlZCB0aGUgcmVtb3ZhbCBvZiBtZWFuaW5nZnVsIHNwYWNlcyB3aGVuIFBLRy1JTkZPIGlzIGdlbmVyYXRlZAorICBpbiBEaXN0dXRpbHMuIFBhdGNoIGJ5IFN0ZXBoZW4gRW1zbGllLgorCistIElzc3VlICM0MTIwOiBEcm9wIHJlZmVyZW5jZSB0byBDUlQgZnJvbSBtYW5pZmVzdCB3aGVuIGJ1aWxkaW5nIGV4dGVuc2lvbnMgd2l0aAorICBtc3ZjOWNvbXBpbGVyLgorCistIElzc3VlICM3MzMzOiBUaGUgYGBwb3NpeGBgIG1vZHVsZSBnYWlucyBhbiBgYGluaXRncm91cHMoKWBgIGZ1bmN0aW9uIHByb3ZpZGluZworICBhY2Nlc3MgdG8gdGhlIGluaXRncm91cHMoMykgQyBsaWJyYXJ5IGNhbGwgb24gVW5peCBzeXN0ZW1zIHdoaWNoIGltcGxlbWVudCBpdC4KKyAgUGF0Y2ggYnkgSmVhbi1QYXVsIENhbGRlcm9uZS4KKworLSBJc3N1ZSAjNzQwODogRml4ZWQgZGlzdHV0aWxzLnRlc3RzLnNkaXN0IHNvIGl0IGRvZXNuJ3QgY2hlY2sgZm9yIGdyb3VwCisgIG93bmVyc2hpcCB3aGVuIHRoZSBncm91cCBpcyBub3QgZm9yY2VkLCBiZWNhdXNlIHRoZSBncm91cCBtYXkgYmUgZGlmZmVyZW50CisgIGZyb20gdGhlIHVzZXIncyBncm91cCBhbmQgaW5oZXJpdCBmcm9tIGl0cyBjb250YWluZXIgd2hlbiB0aGUgdGVzdCBpcyBydW4uCisKKy0gSXNzdWUgIzE1MTU6IEVuYWJsZSB1c2Ugb2YgZGVlcGNvcHkoKSB3aXRoIGluc3RhbmNlIG1ldGhvZHMuICBQYXRjaCBieSBSb2JlcnQKKyAgQ29sbGlucy4KKworLSBJc3N1ZSAjNzQwMzogbG9nZ2luZzogRml4ZWQgcG9zc2libGUgcmFjZSBjb25kaXRpb24gaW4gbG9jayBjcmVhdGlvbi4KKworLSBJc3N1ZSAjNjg0NTogQWRkIHJlc3RhcnQgc3VwcG9ydCBmb3IgYmluYXJ5IHVwbG9hZCBpbiBmdHBsaWIuICBUaGUKKyAgYGBzdG9yYmluYXJ5KClgYCBtZXRob2Qgb2YgRlRQIGFuZCBGVFBfVExTIG9iamVjdHMgZ2FpbnMgYW4gb3B0aW9uYWwgInJlc3QiCisgIGFyZ3VtZW50LiAgUGF0Y2ggYnkgUGFibG8gTW91em8uCisKKy0gSXNzdWUgIzU3ODg6IGBgZGF0ZXRpbWUudGltZWRlbHRhYGAgb2JqZWN0cyBnZXQgYSBuZXcgYGB0b3RhbF9zZWNvbmRzKClgYAorICBtZXRob2QgcmV0dXJuaW5nIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24uICBQYXRjaCBieSBCcmlhbgorICBRdWlubGFuLgorCistIElzc3VlICM2NjE1OiBsb2dnaW5nOiBVc2VkIHdlYWtyZWZzIGluIGludGVybmFsIGhhbmRsZXIgbGlzdC4KKworLSBJc3N1ZSAjMTQ4ODk0MzogYGBkaWZmbGliLkRpZmZlcmBgIGRvZXNuJ3QgYWx3YXlzIGFkZCBoaW50cyBmb3IgdGFiCisgIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzYxMjM6IHRhcmZpbGUgbm93IG9wZW5zIGVtcHR5IGFyY2hpdmVzIGNvcnJlY3RseSBhbmQgY29uc2lzdGVudGx5CisgIHJhaXNlcyBSZWFkRXJyb3Igb24gZW1wdHkgZmlsZXMuCisKKy0gSXNzdWUgIzczNTQ6IGRpc3R1dGlscy50ZXN0cy50ZXN0X21zdmM5Y29tcGlsZXIgLSBkcmFnZnVsbHdpbmRvd3MgY2FuIGJlIDIuCisKKy0gSXNzdWUgIzUwMzc6IFByb3h5IHRoZSBfX3VuaWNvZGVfXyBzcGVjaWFsIG1ldGhvZCB0byBfX3VuaWNvZGVfXyBpbnN0ZWFkIG9mCisgIF9fc3RyX18uCisKKy0gSXNzdWUgIzczNDE6IENsb3NlIHRoZSBpbnRlcm5hbCBmaWxlIG9iamVjdCBpbiB0aGUgVGFyRmlsZSBjb25zdHJ1Y3RvciBpbiBjYXNlCisgIG9mIGFuIGVycm9yLgorCistIElzc3VlICM3MjkzOiBgYGRpc3R1dGlscy50ZXN0X21zdmM5Y29tcGlsZXJgYCBpcyBmaXhlZCB0byB3b3JrIG9uIGFueSBmcmVzaAorICBXaW5kb3dzIGJveC4gIEhlbHAgcHJvdmlkZWQgYnkgRGF2aWQgQm9sZW4uCisKKy0gSXNzdWUgIzczMjg6IHB5ZG9jIG5vIGxvbmdlciBjb3JydXB0cyBzeXMucGF0aCB3aGVuIHJ1biB3aXRoIHRoZSAnLW0nIHN3aXRjaC4KKworLSBJc3N1ZSAjMjA1NDogZnRwbGliIG5vdyBwcm92aWRlcyBhbiBGVFBfVExTIGNsYXNzIHRvIGRvIHNlY3VyZSBGVFAgdXNpbmcgVExTCisgIG9yIFNTTC4gIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnLgorCistIElzc3VlICM0OTY5OiBUaGUgbWltZXR5cGVzIG1vZHVsZSBub3cgcmVhZHMgdGhlIE1JTUUgZGF0YWJhc2UgZnJvbSB0aGUKKyAgcmVnaXN0cnkgdW5kZXIgV2luZG93cy4gIFBhdGNoIGJ5IEdhYnJpZWwgR2VuZWxsaW5hLgorCistIElzc3VlICM2ODE2OiBydW5weSBub3cgcHJvdmlkZXMgYSBydW5fcGF0aCBmdW5jdGlvbiB0aGF0IGFsbG93cyBQeXRob24gY29kZSB0bworICBleGVjdXRlIGZpbGUgcGF0aHMgdGhhdCByZWZlciB0byBzb3VyY2Ugb3IgY29tcGlsZWQgUHl0aG9uIGZpbGVzIGFzIHdlbGwgYXMKKyAgemlwZmlsZXMsIGRpcmVjdG9yaWVzIGFuZCBvdGhlciB2YWxpZCBzeXMucGF0aCBlbnRyaWVzIHRoYXQgY29udGFpbiBhCisgIF9fbWFpbl9fLnB5IGZpbGUuIFRoaXMgYWxsb3dzIGFwcGxpY2F0aW9ucyB0aGF0IHJ1biBvdGhlciBQeXRob24gc2NyaXB0cyB0bworICBzdXBwb3J0IHRoZSBzYW1lIGZsZXhpYmlsaXR5IGFzIHRoZSBDUHl0aG9uIGNvbW1hbmQgbGluZSBpdHNlbGYuCisKKy0gSXNzdWUgIzczMTg6IG11bHRpcHJvY2Vzc2luZyBub3cgdXNlcyBhIHRpbWVvdXQgd2hlbiBpdCBmYWlscyB0byBlc3RhYmxpc2ggYQorICBjb25uZWN0aW9uIHdpdGggYW5vdGhlciBwcm9jZXNzLCByYXRoZXIgdGhhbiBsb29waW5nIGVuZGxlc3NseS4gVGhlIGRlZmF1bHQKKyAgdGltZW91dCBpcyAyMCBzZWNvbmRzLCB3aGljaCBzaG91bGQgYmUgYW1wbHkgc3VmZmljaWVudCBmb3IgbG9jYWwgY29ubmVjdGlvbnMuCisKKy0gSXNzdWUgIzcxOTc6IEFsbG93IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyIG9iamVjdHMgdG8gYmUgcGlja2xlZCBhbmQKKyAgdW5waWNrbGVkLiAgVGhpcyBmaXhlcyBjcmFzaGVzIHVuZGVyIFdpbmRvd3Mgd2hlbiB0cnlpbmcgdG8gcnVuCisgIHRlc3RfbXVsdGlwcm9jZXNzaW5nIGluIHZlcmJvc2UgbW9kZS4KKworLSBJc3N1ZSAjNzI4MjogRml4IGEgbWVtb3J5IGxlYWsgd2hlbiBhbiBSTG9jayB3YXMgdXNlZCBpbiBhIHRocmVhZCBvdGhlciB0aGFuCisgIHRob3NlIHN0YXJ0ZWQgdGhyb3VnaCBgYHRocmVhZGluZy5UaHJlYWRgYCAoZm9yIGV4YW1wbGUsIHVzaW5nCisgIGBgdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoKWBgLgorCistIElzc3VlICM3MjY0OiBGaXggYSBwb3NzaWJsZSBkZWFkbG9jayB3aGVuIGRlYWxsb2NhdGluZyB0aHJlYWQtbG9jYWwgb2JqZWN0cworICB3aGljaCBhcmUgcGFydCBvZiBhIHJlZmVyZW5jZSBjeWNsZS4KKworLSBJc3N1ZSAjNzIxMTogQWxsb3cgNjQtYml0IHZhbHVlcyBmb3IgdGhlIGBgaWRlbnRgYCBhbmQgYGBkYXRhYGAgZmllbGRzIG9mCisgIGtldmVudCBvYmplY3RzIG9uIDY0LWJpdCBzeXN0ZW1zLiAgUGF0Y2ggYnkgTWljaGFlbCBCcm9naHRvbi4KKworLSBJc3N1ZSAjNjg5NjogYGBtYWlsYm94Lk1haWxkaXJgYCBub3cgaW52YWxpZGF0ZXMgaXRzIGludGVybmFsIGNhY2hlIGVhY2ggdGltZQorICBhIG1vZGlmaWNhdGlvbiBpcyBkb25lIHRocm91Z2ggaXQuICBUaGlzIGZpeGVzIGluY29uc2lzdGVuY2llcyBhbmQgdGVzdAorICBmYWlsdXJlcyBvbiBzeXN0ZW1zIHdpdGggc2xpZ2h0bHkgYm9ndXMgbXRpbWUgYmVoYXZpb3VyLgorCistIElzc3VlICM3MjQ2ICYgSXNzdWUgIzcyMDg6IGdldHBhc3Mgbm93IHByb3Blcmx5IGZsdXNoZXMgaW5wdXQgYmVmb3JlIHJlYWRpbmcKKyAgZnJvbSBzdGRpbiBzbyB0aGF0IGV4aXN0aW5nIGlucHV0IGRvZXMgbm90IGNvbmZ1c2UgaXQgYW5kIGxlYWQgdG8gaW5jb3JyZWN0CisgIGVudHJ5IG9yIGFuIElPRXJyb3IuICBJdCBhbHNvIHByb3Blcmx5IGZsdXNoZXMgaXQgYWZ0ZXJ3YXJkcyB0byBhdm9pZCB0aGUKKyAgdGVybWluYWwgZWNob2luZyB0aGUgaW5wdXQgYWZ0ZXJ3YXJkcyBvbiBPU2VzIHN1Y2ggYXMgU29sYXJpcy4KKworLSBJc3N1ZSAjNzIzMzogRml4IGEgbnVtYmVyIG9mIHR3by1hcmd1bWVudCBEZWNpbWFsIG1ldGhvZHMgdG8gbWFrZSBzdXJlIHRoYXQKKyAgdGhleSBhY2NlcHQgYW4gaW50IG9yIGxvbmcgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4gIEFsc28gZml4IGJ1Z2d5IGhhbmRsaW5nIG9mCisgIGxhcmdlIGFyZ3VtZW50cyAodGhvc2Ugd2l0aCBjb2VmZmljaWVudCBsb25nZXIgdGhhbiB0aGUgY3VycmVudCBwcmVjaXNpb24pIGluCisgIHNoaWZ0IGFuZCByb3RhdGUuCisKKy0gSXNzdWUgIzQ3NTA6IFN0b3JlIHRoZSBiYXNlbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZW5hbWUgaW4gdGhlIGd6aXAgRk5BTUUKKyAgaGVhZGVyIGFzIHJlcXVpcmVkIGJ5IFJGQyAxOTUyLgorCistIElzc3VlICMxMTgwOiBBZGRlZCBhIG5ldyBnbG9iYWwgb3B0aW9uIHRvIGlnbm9yZSB+Ly5weWRpc3R1dGlscy5jZmcgaW4KKyAgRGlzdHV0aWxzLgorCistIElzc3VlICM3MjE4OiBGaXggdGVzdF9zaXRlIGZvciB3aW4zMiwgdGhlIGRpcmVjdG9yeSBjb21wYXJpc29uIHdhcyBkb25lIHdpdGgKKyAgYW4gdXBwZXJjYXNlLgorCistIElzc3VlICM3MjA1OiBGaXggYSBwb3NzaWJsZSBkZWFkbG9jayB3aGVuIHVzaW5nIGEgQloyRmlsZSBvYmplY3QgZnJvbSBzZXZlcmFsCisgIHRocmVhZHMgYXQgb25jZS4KKworLSBJc3N1ZSAjNzA3MTogYnl0ZS1jb21waWxhdGlvbiBpbiBEaXN0dXRpbHMgaXMgbm93IGRvbmUgd2l0aCByZXNwZWN0IHRvCisgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLgorCistIElzc3VlICM3MDY2OiBhcmNoaXZlX3V0aWwubWFrZV9hcmNoaXZlIG5vdyByZXN0b3JlcyB0aGUgY3dkIGlmIGFuIGVycm9yIGlzCisgIHJhaXNlZC4gSW5pdGlhbCBwYXRjaCBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzYyMTg6IGlvLlN0cmluZ0lPIGFuZCBpby5CeXRlc0lPIGluc3RhbmNlcyBhcmUgbm93IHBpY2tsYWJsZSB3aXRoCisgIHByb3RvY29sIDIuCisKKy0gSXNzdWUgIzcwNzc6IGxvZ2dpbmc6IFN5c0xvZ0hhbmRsZXIgbm93IHRyZWF0cyBVbmljb2RlIGFzIHBlciBSRkMgNTQyNC4KKworLSBJc3N1ZSAjNzA5OTogRGVjaW1hbC5pc19ub3JtYWwgbm93IHJldHVybnMgVHJ1ZSBmb3IgbnVtYmVycyB3aXRoIGV4cG9uZW50CisgIGxhcmdlciB0aGFuIGVtYXguCisKKy0gSXNzdWUgIzU4MzM6IEZpeCBleHRyYSBzcGFjZSBjaGFyYWN0ZXIgaW4gcmVhZGxpbmUgY29tcGxldGlvbiB3aXRoIHRoZSBHTlUKKyAgcmVhZGxpbmUgbGlicmFyeSB2ZXJzaW9uIDYuMC4KKworLSBJc3N1ZSAjNzEzMzogU1NMIG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIG5ldyBidWZmZXIgQVBJLgorCistIElzc3VlICM3MTQ5OiB1cmxsaWIgZmFpbHMgb24gT1NYIGluIHRoZSBwcm94eSBkZXRlY3Rpb24gY29kZS4KKworLSBJc3N1ZSAjNzA2OTogTWFrZSBpbnNwZWN0LmlzYWJzdHJhY3QoKSByZXR1cm4gYSBib29sZWFuLgorCistIEFkZCBzdXBwb3J0IHRvIHRoZSBgYGlob29rc2BgIG1vZHVsZSBmb3IgcmVsYXRpdmUgaW1wb3J0cy4KKworLSBJc3N1ZSAjNjg5NDogRml4ZWQgdGhlIGlzc3VlIHVybGxpYjIgZG9lc24ndCByZXNwZWN0ICJub19wcm94eSIgZW52aXJvbm1lbnQuCisKKy0gSXNzdWUgIzcwODY6IEFkZGVkIFRDUCBzdXBwb3J0IHRvIFN5c0xvZ0hhbmRsZXIsIGFuZCB0aWRpZWQgdXAgc29tZQorICBhbmFjaHJvbmlzbXMgaW4gdGhlIGNvZGUgd2hpY2ggd2VyZSBhIHJlbGljIG9mIDEuNS4yIGNvbXBhdGliaWxpdHkuCisKKy0gSXNzdWUgIzcwODI6IFdoZW4gZmFsbGluZyBiYWNrIHRvIHRoZSBNSU1FICduYW1lJyBwYXJhbWV0ZXIsIHRoZSBjb3JyZWN0IHBsYWNlCisgIHRvIGxvb2sgZm9yIGl0IGlzIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLgorCistIElzc3VlICM3MDQ4OiBGb3JjZSBEZWNpbWFsLmxvZ2IgdG8gcm91bmQgaXRzIHJlc3VsdCB3aGVuIHRoYXQgcmVzdWx0IGlzIHRvbworICBsYXJnZSB0byBmaXQgaW4gdGhlIGN1cnJlbnQgcHJlY2lzaW9uLgorCistIElzc3VlICM2NTE2OiBBZGRlZCBvd25lci9ncm91cCBzdXBwb3J0IHdoZW4gY3JlYXRpbmcgdGFyIGFyY2hpdmVzIGluCisgIERpc3R1dGlscy4KKworLSBJc3N1ZSAjNzAzMTogQWRkIGBgVGVzdENhc2UuYXNzZXJ0KE5vdClJc0luc3RhbmNlKClgYCBtZXRob2RzLgorCistIElzc3VlICM2NzkwOiBNYWtlIGl0IHBvc3NpYmxlIGFnYWluIHRvIHBhc3MgYW4gYGBhcnJheS5hcnJheWBgIHRvCisgIGBgaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5zZW5kYGAuICBQYXRjaCBieSBLaXJrIE1jRG9uYWxkLgorCistIElzc3VlICM2MjM2LCAjNjM0ODogRml4IHZhcmlvdXMgZmFpbHVyZXMgaW4gdGhlIGBpb2AgbW9kdWxlIHVuZGVyIEFJWCBhbmQKKyAgb3RoZXIgcGxhdGZvcm1zLCB3aGVuIHVzaW5nIGEgbm9uLWdjYyBjb21waWxlci4gIFBhdGNoIGJ5IGVncmVlbi4KKworLSBJc3N1ZSAjNjk1NDogRml4ZWQgY3Jhc2ggd2hlbiB1c2luZyBESVNUVVRJTFNfREVCVUcgZmxhZyBpbiBEaXN0dXRpbHMuCisKKy0gSXNzdWUgIzY4NTE6IEZpeCB1cmxsaWIudXJsb3BlbiBjcmFzaCBvbiBzZWNvbmRhaXJ5IHRocmVhZHMgb24gT1NYIDEwLjYKKworLSBJc3N1ZSAjNDYwNjogUGFzc2luZyAnTm9uZScgaWYgY3R5cGVzIGFyZ3R5cGUgaXMgc2V0IHRvIFBPSU5URVIoLi4uKSAgZG9lcyBub3cKKyAgYWx3YXlzIHJlc3VsdCBpbiBOVUxMLgorCistIElzc3VlICM1MDQyOiBjdHlwZXMgU3RydWN0dXJlIHN1Yi1zdWJjbGFzcyBkb2VzIG5vdyBpbml0aWFsaXplIGNvcnJlY3RseSB3aXRoCisgIGJhc2UgY2xhc3MgcG9zaXRpb25hbCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzY5Mzg6IEZpeCBhIFR5cGVFcnJvciBpbiBzdHJpbmcgZm9ybWF0dGluZyBvZiBhIG11bHRpcHJvY2Vzc2luZyBkZWJ1ZworICBtZXNzYWdlLgorCistIElzc3VlICM2NjM1OiBGaXggcHJvZmlsZXIgcHJpbnRpbmcgdXNhZ2UgbWVzc2FnZS4KKworLSBJc3N1ZSAjNjg1NjogQWRkIGEgZmlsdGVyIGtleXdvcmQgYXJndW1lbnQgdG8gVGFyRmlsZS5hZGQoKS4KKworLSBJc3N1ZSAjNjE2MzogRml4ZWQgSFAtVVggcnVudGltZSBsaWJyYXJ5IGRpciBvcHRpb25zIGluCisgIGRpc3R1dGlscy51bml4Y29tcGlsZXIuICBJbml0aWFsIHBhdGNoIGJ5IFNyaWRoYXIgUmF0bmFrdW1hciBhbmQgTWljaGFlbAorICBIYXViZW53YWxsbmVyLgorCistIElzc3VlICM2ODU3OiBEZWZhdWx0IGZvcm1hdCgpIGFsaWdubWVudCBzaG91bGQgYmUgJz4nIGZvciBEZWNpbWFsIGluc3RhbmNlcy4KKworLSBJc3N1ZSAjNjc5NTogaW50KERlY2ltYWwoJ25hbicpKSBub3cgcmFpc2VzIFZhbHVlRXJyb3IgaW5zdGVhZCBvZiByZXR1cm5pbmcKKyAgTmFOIG9yIHJhaXNpbmcgSW52YWxpZENvbnRleHQuICBBbHNvLCBmaXggaW5maW5pdGUgcmVjdXJzaW9uIGluCisgIGxvbmcoRGVjaW1hbCgnbmFuJykpLgorCistIElzc3VlICM2ODUwOiBGaXggYnVnIGluIERlY2ltYWwuX3BhcnNlX2Zvcm1hdF9zcGVjaWZpZXIgZm9yIGZvcm1hdHMgd2l0aCBubworICB0eXBlIHNwZWNpZmllci4KKworLSBJc3N1ZSAjNDkzNzogcGxhdC1tYWMvYnVuZGxlYnVpbGRlciByZWZlcnMgdG8gbm9uLWV4aXN0aW5nIHZlcnNpb24ucGxpc3QuCisKKy0gSXNzdWUgIzY4Mzg6IFVzZSBhIGxpc3QgdG8gYWNjdW11bGF0ZSB0aGUgdmFsdWUgaW5zdGVhZCBvZiByZXBlYXRlZGx5CisgIGNvbmNhdGVuYXRpbmcgc3RyaW5ncyBpbiBodHRwbGliJ3MgSFRUUFJlc3BvbnNlLl9yZWFkX2NodW5rZWQgcHJvdmlkaW5nIGEKKyAgc2lnbmlmaWNhbnQgc3BlZWQgaW5jcmVhc2Ugd2hlbiBkb3dubG9hZGluZyBsYXJnZSBmaWxlcyBzZXJ2ZW5kIHdpdGggYQorICBUcmFuc2Zlci1FbmNvZGluZyBvZiAnY2h1bmtlZCcuCisKKy0gSXNzdWUgIzUyNzU6IEluIENvb2tpZSdzIENvb2tpZS5sb2FkKCksIHByb3Blcmx5IGhhbmRsZSBub24tc3RyaW5nIGFyZ3VtZW50cworICBhcyBkb2N1bWVudGVkLgorCistIElzc3VlICMyNjY2OiBIYW5kbGUgQlJPV1NFUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBwcm9wZXJseSBmb3IgdW5rbm93biBicm93c2VyCisgIG5hbWVzIGluIHRoZSB3ZWJicm93c2VyIG1vZHVsZS4KKworLSBJc3N1ZSAjNjA1NDogRG8gbm90IG5vcm1hbGl6ZSBzdG9yZWQgcGF0aG5hbWVzIGluIHRhcmZpbGUuCisKKy0gSXNzdWUgIzY3OTQ6IEZpeCBEZWNpbWFsLmNvbXBhcmVfdG90YWwgYW5kIERlY2ltYWwuY29tcGFyZV90b3RhbF9tYWc6IE5hTgorICBwYXlsb2FkcyBhcmUgbm93IG9yZGVyZWQgYnkgaW50ZWdlciB2YWx1ZSByYXRoZXIgdGhhbiBsZXhpY29ncmFwaGljYWxseS4KKworLSBJc3N1ZSAjNjY5MzogTmV3IGZ1bmN0aW9ucyBpbiBzaXRlLnB5IHRvIGdldCB1c2VyL2dsb2JhbCBzaXRlIHBhY2thZ2VzIHBhdGhzLgorCistIFRoZSB0aHJlYWQubG9jayB0eXBlIG5vdyBzdXBwb3J0cyB3ZWFrIHJlZmVyZW5jZXMuCisKKy0gSXNzdWUgIzEzNTY5Njk6IEFkZCBtaXNzaW5nIGluZm8gbWV0aG9kcyBpbiBUaXguSExpc3QuCisKKy0gSXNzdWUgIzE1MjI1ODc6IE5ldyBjb25zdGFudHMgYW5kIG1ldGhvZHMgZm9yIHRoZSBUaXguR3JpZCB3aWRnZXQuCisKKy0gSXNzdWUgIzEyNTA0Njk6IEZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mIFRpeC5QYW5lZFdpbmRvdy5wYW5lcy4KKworLSBJc3N1ZSAjMTExOTY3MzogRG8gbm90IG92ZXJyaWRlIFRraW50ZXIuVGV4dCBtZXRob2RzIHdoZW4gY3JlYXRpbmcgYQorICBTY3JvbGxlZFRleHQuCisKKy0gSXNzdWUgIzY2NjU6IEZpeCBmbm1hdGNoIHRvIHByb3Blcmx5IG1hdGNoIGZpbGVuYW1lcyB3aXRoIG5ld2xpbmVzIGluIHRoZW0uCisKKy0gSXNzdWUgIzExMzU6IEFkZCB0aGUgWFZpZXcgYW5kIFlWaWV3IG1peC1pbnMgdG8gYXZvaWQgZHVwbGljYXRpbmcgdGhlIHh2aWV3KgorICBhbmQgeXZpZXcqIG1ldGhvZHMuCisKKy0gSXNzdWUgIzY2Mjk6IEZpeCBhIGRhdGEgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgbmV3IGBpb2AgcGFja2FnZSwgd2hpY2ggY291bGQKKyAgb2NjdXIgd2hlbiB3cml0aW5nIHRvIGEgQnVmZmVyZWRSYW5kb20gb2JqZWN0IChlLmcuIGEgZmlsZSBvcGVuZWQgaW4gInJiKyIgb3IKKyAgIndiKyIgbW9kZSkgYWZ0ZXIgaGF2aW5nIGJ1ZmZlcmVkIGEgY2VydGFpbiBhbW91bnQgb2YgZGF0YSBmb3IgcmVhZGluZy4gVGhpcworICBidWcgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNDY2MDogSWYgYSBtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZS5wdXQoKSB3YXMgcHJlZW1wdGVkLCBpdCB3YXMKKyAgcG9zc2libGUgdG8gZ2V0IGEgc3B1cmlvdXMgJ3Rhc2tfZG9uZSgpIGNhbGxlZCB0b28gbWFueSB0aW1lcycgZXJyb3IuCisKKy0gSXNzdWUgIzE2MjgyMDU6IFNvY2tldCBmaWxlIG9iamVjdHMgcmV0dXJuZWQgYnkgc29ja2V0LnNvY2tldC5tYWtlZmlsZSgpIG5vdworICBwcm9wZXJseSBoYW5kbGVzIEVJTlRSIHdpdGhpbiB0aGUgcmVhZCwgcmVhZGxpbmUsIHdyaXRlICYgZmx1c2ggbWV0aG9kcy4gIFRoZQorICBzb2NrZXQuc2VuZGFsbCgpIG1ldGhvZCBub3cgcHJvcGVybHkgaGFuZGxlcyBpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbHMuCisKKy0gSXNzdWUgIzY1OTU6IFRoZSBEZWNpbWFsIGNvbnN0cnVjdG9yIG5vdyBhbGxvd3MgYXJiaXRyYXJ5IFVuaWNvZGUgZGVjaW1hbAorICBkaWdpdHMgaW4gaW5wdXQsIGFzIHJlY29tbWVuZGVkIGJ5IHRoZSBzdGFuZGFyZC4gIFByZXZpb3VzbHkgaXQgd2FzIHJlc3RyaWN0ZWQKKyAgdG8gYWNjZXB0aW5nIFswLTldLgorCistIElzc3VlICM2NTExOiBaaXBGaWxlIG5vdyByYWlzZXMgQmFkWmlwZmlsZSAoaW5zdGVhZCBvZiBhbiBJT0Vycm9yKSB3aGVuCisgIG9wZW5pbmcgYW4gZW1wdHkgb3IgdmVyeSBzbWFsbCBmaWxlLgorCistIElzc3VlICM2NTUzOiBGaXhlZCBhIGNyYXNoIGluIGNQaWNrbGUubG9hZCgpLCB3aGVuIGdpdmVuIGEgZmlsZS1saWtlIG9iamVjdAorICBjb250YWluaW5nIGluY29tcGxldGUgZGF0YS4KKworLSBJc3N1ZSAjNjU0NTogUmVtb3ZlZCBhc3NlcnQgc3RhdGVtZW50cyBpbiBkaXN0dXRpbHMuRXh0ZW5zaW9uLCBzbyB0aGUgYmVoYXZpb3IKKyAgaXMgc2ltaWxhciB3aGVuIHVzZWQgd2l0aCAtTy4KKworLSB1bml0dGVzdCBoYXMgYmVlbiBzcGxpdCB1cCBpbnRvIGEgcGFja2FnZS4gIEFsbCBvbGQgbmFtZXMgc2hvdWxkIHN0aWxsIHdvcmsuCisKKy0gSXNzdWUgIzY0MzE6IE1ha2UgRnJhY3Rpb24gdHlwZSByZXR1cm4gTm90SW1wbGVtZW50ZWQgd2hlbiBpdCBkb2Vzbid0IGtub3cgaG93CisgIHRvIGhhbmRsZSBhIGNvbXBhcmlzb24gd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4gIEFsc28gYWRkIGNvcnJlY3QgaGFuZGxpbmcKKyAgb2YgaW5maW5pdGllcyBhbmQgbmFucyBmb3IgY29tcGFyaXNvbnMgd2l0aCBmbG9hdC4KKworLSBJc3N1ZSAjNjQxNTogRml4ZWQgd2FybmluZ3Mud2FybiBzZWdmYXVsdCBvbiBiYWQgZm9ybWF0dGVkIHN0cmluZy4KKworLSBJc3N1ZSAjNjQ2NjogTm93IGRpc3R1dGlscy5jeWd3aW5jY29tcGlsZXIgYW5kIGRpc3R1dGlscy5lbXhjY29tcGlsZXIgdXNlcyB0aGUKKyAgc2FtZSByZWZhY3RvcmVkIGZ1bmN0aW9uIHRvIGdldCBnY2MvbGQvZGxsd3JhcCB2ZXJzaW9ucyBudW1iZXJzLiAgSXQncworICBgYGRpc3R1dGlscy51dGlsLmdldF9jb21waWxlcl92ZXJzaW9ucygpYGAuICBBZGRlZCBkZXByZWNhdGlvbiB3YXJuaW5ncyBmb3IKKyAgdGhlIG9ic29sZXRlIGdldF92ZXJzaW9ucygpIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjNjQzMzogRml4ZWQgaXNzdWVzIHdpdGggbXVsdGlwcm9jZXNzaW5nLnBvb2wubWFwIGhhbmdpbmcgb24gZW1wdHkgbGlzdC4KKworLSBJc3N1ZSAjNjMxNDogbG9nZ2luZzogRXh0cmEgY2hlY2tzIG9uIHRoZSAibGV2ZWwiIGFyZ3VtZW50IGluIG1vcmUgcGxhY2VzLgorCistIElzc3VlICMyNjIyOiBGaXhlZCBhbiBJbXBvcnRFcnJvciB3aGVuIGltcG9ydGluZyBlbWFpbC5tZXNzc2FnZSBmcm9tIGEKKyAgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiBidWlsdCB3aXRoIHB5MmV4ZSBvciBweTJhcHAuCisKKy0gSXNzdWUgIzY0NTU6IEZpeGVkIHRlc3RfYnVpbGRfZXh0IHVuZGVyIHdpbjMyLgorCistIElzc3VlICM2Mzc3OiBFbmFibGVkIHRoZSBjb21waWxlciBvcHRpb24sIGFuZCBkZXByZWNhdGUgaXRzIHVzYWdlIGFzIGFuCisgIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjNjQxMzogRml4ZWQgdGhlIGxvZyBsZXZlbCBpbiBkaXN0dXRpbHMuZGlzdCBmb3IgYW5ub3VuY2UuCisKKy0gSXNzdWUgIzMzOTI6IFRoZSBzdWJwcm9jZXNzIGNvbW11bmljYXRlKCkgbWV0aG9kIG5vIGxvbmdlciBmYWlscyBpbiBzZWxlY3QoKQorICB3aGVuIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGxhcmdlOyBjb21tdW5pY2F0ZSgpIG5vdyB1c2VzIHBvbGwoKSB3aGVuIHBvc3NpYmxlLgorCistIElzc3VlICM2NDAzOiBGaXhlZCBwYWNrYWdlIHBhdGggdXNhZ2UgaW4gYnVpbGRfZXh0LgorCistIElzc3VlcyAjNTE1NSwgIzUzMTMsICM1MzMxOiBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5fYm9vdHN0cmFwIHdhcworICB1bmNvbmRpdGlvbmFsbHkgY2FsbGluZyAib3MuY2xvc2Uoc3lzLnN0ZGluLmZpbGVubygpKSIgcmVzdWx0aW5nIGluIGZpbGUKKyAgZGVzY3JpcHRvciBlcnJvcnMuCisKKy0gSXNzdWUgIzYzNjU6IERpc3R1dGlscyBidWlsZF9leHQgaW5wbGFjZSBtb2RlIHdhcyBjb3B5aW5nIHRoZSBjb21waWxlZAorICBleHRlbnNpb24gaW4gYSBzdWJkaXJlY3RvcnkgaWYgdGhlIGV4dGVuc2lvbiBuYW1lIGhhZCBkb3RzLgorCistIElzc3VlICM2MzQ0OiBGaXhlZCBhIGNyYXNoIG9mIG1tYXAucmVhZCgpIHdoZW4gcGFzc2VkIGEgbmVnYXRpdmUgYXJndW1lbnQuCisKKy0gSXNzdWUgIzUyMzA6IHB5ZG9jIHdvdWxkIHJlcG9ydCBubyBkb2N1bWVudGF0aW9uIGZvdW5kIGlmIGEgbW9kdWxlIGdlbmVyYXRlZCBhCisgICdub3QgZm91bmQnIGltcG9ydCBlcnJvciB3aGVuIGxvYWRlZDsgaXQgbm93IHJlcG9ydHMgdGhlIGltcG9ydCBlcnJvcnMuCisgIFRoYW5rcyB0byBMdWNhcyBQcmFkbyBNZWxvIGZvciBpbml0aWFsIGZpeCBhbmQgY29sbGFib3JhdGlvbiBvbiB0aGUgdGVzdHMuCisKKy0gSXNzdWUgIzYzMTQ6IGBgbG9nZ2luZy5iYXNpY0NvbmZpZygpYGAgcGVyZm9ybXMgZXh0cmEgY2hlY2tzIG9uIHRoZSAibGV2ZWwiCisgIGFyZ3VtZW50LgorCistIElzc3VlICM2MTY0OiBBZGRlZCBhbiBBSVggc3BlY2lmaWMgbGlua2VyIGFyZ3VtZW50IGluIERpc3R1dGlscyB1bml4Y29tcGlsZXIuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IFNyaWRoYXIgUmF0bmFrdW1hci4KKworLSBJc3N1ZSAjNjI3NDogRml4ZWQgcG9zc2libGUgZmlsZSBkZXNjcmlwdG9ycyBsZWFrIGluIHN1YnByb2Nlc3MucHkuCisKKy0gSXNzdWUgIzYxODk6IFJlc3RvcmVkIGNvbXBhdGliaWxpdHkgb2Ygc3VicHJvY2Vzcy5weSB3aXRoIFB5dGhvbiAyLjIuCisKKy0gSXNzdWUgIzYyODc6IEFkZGVkIHRoZSBsaWNlbnNlIGZpZWxkIGluIERpc3R1dGlscyBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICM2Mjg2OiBOb3cgRGlzdHV0aWxzIHVwbG9hZCBjb21tYW5kIGlzIGJhc2VkIG9uIHVybGxpYjIgaW5zdGVhZCBvZgorICBodHRwbGliLCBhbGxvd2luZyB0aGUgdXNhZ2Ugb2YgaHR0cF9wcm94eS4KKworLSBJc3N1ZSAjNjI3MTogbW1hcCB0cmllZCB0byBjbG9zZSBpbnZhbGlkIGZpbGUgaGFuZGxlICgtMSkgZm9yIGFub255bW91cyBtYXBzCisgIG9uIFVuaXguCisKKy0gSXNzdWUgIzYyMTU6IEFsbCBidWcgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyBmcm9tIHRoZSBQeXRob24gMy4xIGlvIGxpYnJhcnkKKyAgKGluY2x1ZGluZyB0aGUgZmFzdCBDIGltcGxlbWVudGF0aW9uKSBoYXZlIGJlZW4gYmFja3BvcnRlZCB0byB0aGUgc3RhbmRhcmQKKyAgYGBpb2BgIG1vZHVsZS4KKworLSBJc3N1ZSAjNjI1ODogU3VwcG9ydCBBTUQ2NCBpbiBiZGlzdF9tc2kuCisKKy0gSXNzdWUgIzYyNTI6IEZpeGVkIGJ1ZyBpbiBuZXh0IHJvbGxvdmVyIHRpbWUgY29tcHV0YXRpb24gaW4KKyAgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyLgorCistIElzc3VlICM2MjYzOiBGaXhlZCBzeW50YXggZXJyb3IgaW4gZGlzdHV0aWxzLmN5Z3dpbmNvbXBpbGVyLgorCistIElzc3VlICM1MjAxOiBkaXN0dXRpbHMuc3lzY29uZmlnLnBhcnNlX21ha2VmaWxlKCkgbm93IHVuZGVyc3RhbmRzIGBgJCRgYCBpbgorICBNYWtlZmlsZXMuICBUaGlzIHByZXZlbnRzIGNvbXBpbGUgZXJyb3JzIHdoZW4gdXNpbmcgc3ludGF4IGxpa2U6CisgIGBgTERGTEFHUz0nLXJwYXRoPVwkJExJQjovc29tZS9vdGhlci9wYXRoJ2BgLiAgUGF0Y2ggYnkgRmxvcmlzIEJydXlub29naGUuCisKKy0gSXNzdWUgIzU3Njc6IFJlbW92ZWQgc2dtbG9wIHN1cHBvcnQgZnJvbSB4bWxycGNsaWIuCisKKy0gSXNzdWUgIzYxMzE6IHRlc3RfbW9kdWxlZmluZGVyIGxlYWtlZCB3aGVuIHJ1biBhZnRlciB0ZXN0X2Rpc3R1dGlscy4gIFBhdGNoIGJ5CisgIEhpcm9rYXp1IFlhbWFtb3RvLgorCistIElzc3VlICM2MDQ4OiBOb3cgRGlzdHV0aWxzIHVzZXMgdGhlIHRhcmZpbGUgbW9kdWxlIGluIGFyY2hpdmVfdXRpbC4KKworLSBJc3N1ZSAjNTE1MDogSURMRSdzIGZvcm1hdCBtZW51IG5vdyBoYXMgYW4gb3B0aW9uIHRvIHN0cmlwIHRyYWlsaW5nCisgIHdoaXRlc3BhY2UuCisKKy0gSXNzdWUgIzYxMjE6IHB5ZG9jIG5vdyBpZ25vcmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBpbiB0aGUgYXJndW1lbnQgdG8KKyAgdGhlICdoZWxwJyBmdW5jdGlvbi4KKworLSBJbiB1bml0dGVzdCwgdXNpbmcgYSBza2lwcGluZyBkZWNvcmF0b3Igb24gYSBjbGFzcyBpcyBub3cgZXF1aXZhbGVudCB0bworICBza2lwcGluZyBldmVyeSB0ZXN0IG9uIHRoZSBjbGFzcy4gIFRoZSBDbGFzc1Rlc3RTdWl0ZSBjbGFzcyBoYXMgYmVlbiByZW1vdmVkLgorCistIElzc3VlICM2MDUwOiBEb24ndCBmYWlsIGV4dHJhY3RpbmcgYSBkaXJlY3RvcnkgZnJvbSBhIHppcGZpbGUgaWYgdGhlIGRpcmVjdG9yeQorICBhbHJlYWR5IGV4aXN0cy4KKworLSBJc3N1ZSAjNTMxMTogYmRpc3RfbXNpIGNhbiBub3cgYnVpbGQgcGFja2FnZXMgdGhhdCBkbyBub3QgZGVwZW5kIG9uIGEgc3BlY2lmaWMKKyAgUHl0aG9uIHZlcnNpb24uCisKKy0gSXNzdWUgIzEzMDkzNTI6IGZjbnRsIG5vdyBjb252ZXJ0cyBpdHMgdGhpcmQgYXJndW1lbnRzIHRvIGEgQyBgbG9uZ2AgcmF0aGVyCisgIHRoYW4gYW4gaW50LCB3aGljaCBtYWtlcyBzb21lIG9wZXJhdGlvbnMgcG9zc2libGUgdW5kZXIgNjQtYml0IExpbnV4IChlLmcuCisgIEROX01VTFRJU0hPVCB3aXRoIEZfTk9USUZZKS4KKworLSBJc3N1ZSAjMTQyNDE1MjogRml4IGZvciBodHRwbGliLCB1cmxsaWIyIHRvIHN1cHBvcnQgU1NMIHdoaWxlIHdvcmtpbmcgdGhyb3VnaAorICBwcm94eS4gT3JpZ2luYWwgcGF0Y2ggYnkgQ2hyaXN0b3BoZXIgTGksIGNoYW5nZXMgbWFkZSBieSBTZW50aGlsIEt1bWFyYW4uCisKKy0gSXNzdWUgIzE5ODM6IEZpeCBmdW5jdGlvbnMgdGFraW5nIG9yIHJldHVybmluZyBhIHByb2Nlc3MgaWRlbnRpZmllciB0byB1c2UgdGhlCisgIGRlZGljYXRlZCBDIHR5cGUgYGBwaWRfdGBgIGluc3RlYWQgb2YgYSBDIGBgaW50YGAuICBTb21lIHBsYXRmb3JtcyBoYXZlIGEKKyAgcHJvY2VzcyBpZGVudGlmaWVyIHR5cGUgd2lkZXIgdGhhbiB0aGUgc3RhbmRhcmQgQyBpbnRlZ2VyIHR5cGUuCisKKy0gSXNzdWUgIzQwNjY6IHNtdHBsaWIuU01UUF9TU0wuX2dldF9zb2NrZXQgbm93IGNvcnJlY3RseSByZXR1cm5zIHRoZSBzb2NrZXQuCisgIFBhdGNoIGJ5IEZhcmhhbiBBaG1hZCwgdGVzdCBieSBNYXJjaW4gQmFjaHJ5LgorCistIElzc3VlICM2MDYyOiBJbiBkaXN0dXRpbHMsIGZpeGVkIHRoZSBwYWNrYWdlIG9wdGlvbiBvZiBidWlsZF9leHQuICBGZWVkYmFjaworICBhbmQgdGVzdHMgb24gcHl3aW4zMiBieSBUaW0gR29sZGVuLgorCistIElzc3VlICM2MDUzOiBGaXhlZCBkaXN0dXRpbHMgdGVzdHMgb24gd2luMzIuICBQYXRjaCBieSBIaXJva2F6dSBZYW1hbW90by4KKworLSBJc3N1ZSAjNjA0NjogRml4ZWQgdGhlIGxpYnJhcnkgZXh0ZW5zaW9uIHdoZW4gZGlzdHV0aWxzIGJ1aWxkX2V4dCBpcyB1c2VkIGluCisgIHBsYWNlLiAgSW5pdGlhbCBwYXRjaCBieSBSb3VtZW4gUGV0cm92LgorCistIElzc3VlICM2MDQxOiBOb3cgZGlzdHV0aWxzIGBzZGlzdGAgYW5kIGByZWdpc3RlcmAgY29tbWFuZHMgdXNlIGBjaGVja2AgYXMgYQorICBzdWJjb21tYW5kLgorCistIElzc3VlICMyMTE2OiBXZWFrIHJlZmVyZW5jZXMgYW5kIHdlYWsgZGljdGlvbmFyaWVzIG5vdyBzdXBwb3J0IGNvcHkoKWluZyBhbmQKKyAgZGVlcGNvcHkoKWluZy4KKworLSBJc3N1ZSAjMTY1NTogTWFrZSBpbWFwbGliIElQdjYtY2FwYWJsZS4gIFBhdGNoIGJ5IERlcmVrIE1vcnIuCisKKy0gSXNzdWUgIzU5MTg6IEZpeCBhIGNyYXNoIGluIHRoZSBwYXJzZXIgbW9kdWxlLgorCistIElzc3VlICMxNjY0OiBNYWtlIG5udHBsaWIgSVB2Ni1jYXBhYmxlLiAgUGF0Y2ggYnkgRGVyZWsgTW9yci4KKworLSBJc3N1ZSAjNjAyMjogQSB0ZXN0IGZpbGUgd2FzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYnkKKyAgdGVzdF9nZXRfb3V0cHV0cyBpbiBEaXN0dXRpbHMuCisKKy0gSXNzdWUgIzQwNTA6IGluc3BlY3QuZmluZHNvdXJjZS9nZXRzb3VyY2Ugbm93IHJhaXNlIGFuIElPRXJyb3IgaWYgdGhlICdzb3VyY2UnCisgIGZpbGUgaXMgYSBiaW5hcnkuICBQYXRjaCBieSBCcm9kaWUgUmFvLCB0ZXN0cyBieSBEYW5pZWwgRGluaXouCisKKy0gSXNzdWUgIzU5Nzc6IGRpc3R1dGlscyBidWlsZF9leHQuZ2V0X291dHB1dHMgd2FzIG5vdCB0YWtpbmcgaW50byBhY2NvdW50IHRoZQorICBpbnBsYWNlIG9wdGlvbi4gIEluaXRpYWwgcGF0Y2ggYnkga3hyb2JlcnRvLgorCistIElzc3VlICM1OTg0OiBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHQuY2hlY2tfZXh0ZW5zaW9uc19saXN0IGNoZWNrcyB3ZXJlCisgIGJyb2tlbiBmb3Igb2xkLXN0eWxlIGV4dGVuc2lvbnMuCisKKy0gSXNzdWUgIzU5NzE6IFN0cmVhbUhhbmRsZXIuaGFuZGxlRXJyb3Igbm93IHN3YWxsb3dzIElPRXJyb3JzIHdoaWNoIG9jY3VyIHdoZW4KKyAgdHJ5aW5nIHRvIHByaW50IGEgdHJhY2ViYWNrLgorCistIElzc3VlICM1OTc2OiBGaXhlZCBEaXN0dXRpbHMgdGVzdF9jaGVja19lbnZpcm9uLgorCistIElzc3VlICM1OTAwOiBFbnN1cmUgUlVOUEFUSCBpcyBhZGRlZCB0byBleHRlbnNpb24gbW9kdWxlcyB3aXRoIFJQQVRIIGlmIEdOVSBsZAorICBpcyB1c2VkLiAgT3JpZ2luYWwgcGF0Y2ggYnkgRmxvcmlzIEJydXlub29naGUuCisKKy0gSXNzdWUgIzU5NDE6IERpc3R1dGlscyBidWlsZF9jbGliIGNvbW1hbmQgd2FzIG5vdCB3b3JraW5nIGFueW1vcmUgYmVjYXVzZSBvZgorICBhbiBpbmNvbXBsZXRlIGNvc3R1bWl6YXRpb24gb2YgdGhlIGFyY2hpdmVyIGNvbW1hbmQuICBBZGRlZCBBUkZMQUdTIGluIHRoZQorICBNYWtlZmlsZSBiZXNpZGVzIEFSIGFuZCBtYWtlIERpc3R1dGlscyB1c2UgaXQuICBPcmlnaW5hbCBwYXRjaCBieSBEYXZpZAorICBDb3VybmFwZWF1LgorCistIElzc3VlICM1OTU1OiBhaWZjJ3MgY2xvc2UgbWV0aG9kIGRpZCBub3QgY2xvc2UgdGhlIGZpbGUgaXQgd3JhcHBlZCwgbm93IGl0CisgIGRvZXMuICBUaGlzIGFsc28gbWVhbnMgZ2V0ZnAgbWV0aG9kIG5vdyByZXR1cm5zIHRoZSByZWFsIGZwLgorCistIElzc3VlICM0ODc1OiBPbiB3aW4zMiwgY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5IGRvZXMgbm8gbG9uZ2VyIHJldHVybgorICBkaXJlY3Rvcmllcy4KKworLSBJc3N1ZSAjNTE0MjogQWRkIHRoZSBhYmlsaXR5IHRvIHNraXAgbW9kdWxlcyB3aGlsZSBzdGVwcGluZyB0byBwZGIuCisKKy0gSXNzdWUgIzEzMDk1Njc6IEZpeCBsaW5lY2FjaGUgYmVoYXZpb3Igb2Ygc3RyaXBwaW5nIHN1YmRpcmVjdG9yaWVzIHdoZW4KKyAgbG9va2luZyBmb3IgZmlsZXMgZ2l2ZW4gYnkgYSByZWxhdGl2ZSBmaWxlbmFtZS4KKworLSBJc3N1ZSAjNTY5MjogSW4gYGB6aXBmaWxlLlppcGZpbGVgYCwgZml4IHdyb25nIHBhdGggY2FsY3VsYXRpb24gd2hlbgorICBleHRyYWN0aW5nIGEgZmlsZSB0byB0aGUgcm9vdCBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzU5MTM6IGBgb3MubGlzdGRpcigpYGAgc2hvdWxkIGZhaWwgZm9yIGVtcHR5IHBhdGggb24gd2luZG93cy4KKworLSBJc3N1ZSAjNTA4NDogVW5waWNrbGluZyBub3cgaW50ZXJucyB0aGUgYXR0cmlidXRlIG5hbWVzIG9mIHBpY2tsZWQgb2JqZWN0cywKKyAgc2F2aW5nIG1lbW9yeSBhbmQgYXZvaWRpbmcgZ3Jvd3RoIGluIHNpemUgb2Ygc3Vic2VxdWVudCBwaWNrbGVzLiAgUHJvcG9zYWwgYW5kCisgIG9yaWdpbmFsIHBhdGNoIGJ5IEpha2UgTWNHdWlyZS4KKworLSBJc3N1ZSAjMzAwMjogYGBzaHV0aWwuY29weWZpbGUoKWBgIGFuZCBgYHNodXRpbC5jb3B5dHJlZSgpYGAgbm93IHJhaXNlIGFuCisgIGVycm9yIHdoZW4gYSBuYW1lZCBwaXBlIGlzIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBibG9ja2luZyBpbmZpbml0ZWx5LgorCistIElzc3VlICMzOTU5OiBUaGUgaXBhZGRyIG1vZHVsZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc3RhbmRhcmQgbGlicmFyeS4KKyAgQ29udHJpYnV0ZWQgYnkgR29vZ2xlLgorCistIElzc3VlICMyMjQ1OiBhaWZjIG5vdyBza2lwcyBjaHVuayB0eXBlcyBpdCBkb2Vzbid0IHJlY29nbml6ZSwgcGVyIHNwZWMuCisKKy0gSXNzdWUgIzU4NzQ6IGRpc3R1dGlscy50ZXN0cy50ZXN0X2NvbmZpZ19jbWQgaXMgbm90IGxvY2FsZS1zZW5zaXRpdmUgYW55bW9yZS4KKworLSBJc3N1ZSAjNDMwNTogY3R5cGVzIHNob3VsZCBub3cgYnVpbGQgYWdhaW4gb24gbWlwc2VsLWxpbnV4LWdudQorCistIElzc3VlICMxNzM0MjM0OiBNYXNzaXZlbHkgc3BlZWR1cCBgYHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgpYGAgd2hlbiB0aGUgc3RyaW5nCisgIGlzIGFscmVhZHkgaW4gbm9ybWFsaXplZCBmb3JtLCBieSBwZXJmb3JtaW5nIGEgcXVpY2sgY2hlY2sgYmVmb3JlaGFuZC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgUmF1bGkgUnVvaG9uZW4uCisKKy0gSXNzdWUgIzU4NTM6IENhbGxpbmcgYSBmdW5jdGlvbiBvZiB0aGUgbWltZXR5cGVzIG1vZHVsZSBmcm9tIHNldmVyYWwgdGhyZWFkcworICBhdCBvbmNlIGNvdWxkIGhpdCB0aGUgcmVjdXJzaW9uIGxpbWl0IGlmIHRoZSBtaW1ldHlwZXMgZGF0YWJhc2UgaGFkbid0IGJlZW4KKyAgaW5pdGlhbGl6ZWQgYmVmb3JlLgorCistIElzc3VlICM1ODU0OiBVcGRhdGVkIF9fYWxsX18gdG8gaW5jbHVkZSBzb21lIG1pc3NpbmcgbmFtZXMgYW5kIHJlbW92ZSBzb21lCisgIG5hbWVzIHdoaWNoIHNob3VsZCBub3QgYmUgZXhwb3J0ZWQuCisKKy0gSXNzdWUgIzU4MTA6IEZpeGVkIERpc3R1dGlscyB0ZXN0X2J1aWxkX3NjcmlwdHMgc28gaXQgdXNlcworICBgYHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKWBgLgorCistIElzc3VlICM0OTUxOiBGaXhlZCBmYWlsdXJlIGluIHRlc3RfaHR0cHNlcnZlcnMuCisKKy0gSXNzdWUgIzMxMDI6IEFsbCBnbG9iYWwgc3ltYm9scyB0aGF0IHRoZSBfY3R5cGVzIGV4dGVuc2lvbiBkZWZpbmVzIGFyZSBub3cKKyAgcHJlZml4ZWQgd2l0aCAnUHknIG9yICdfY3R5cGVzJy4KKworLSBJc3N1ZSAjNTA0MTogY3R5cGVzIGRvZXMgbm93IGFsbG93IHBpY2tsaW5nIHdpZGUgY2hhcmFjdGVyLgorCistIElzc3VlICM1ODEyOiBGb3IgdGhlIHR3by1hcmd1bWVudCBmb3JtIG9mIHRoZSBGcmFjdGlvbiBjb25zdHJ1Y3RvciwKKyAgYGBGcmFjdGlvbihtLCBuKWBgLCBtIGFuZCBuIGFyZSBwZXJtaXR0ZWQgdG8gYmUgYXJiaXRyYXJ5IFJhdGlvbmFsIGluc3RhbmNlcy4KKworLSBJc3N1ZSAjNTgxMjogRnJhY3Rpb24oJzFlNicpIGlzIHZhbGlkOiBtb3JlIGdlbmVyYWxseSwgYW55IHN0cmluZyB0aGF0J3MgdmFsaWQKKyAgZm9yIGZsb2F0KCkgaXMgbm93IHZhbGlkIGZvciBGcmFjdGlvbigpLCB3aXRoIHRoZSBleGNlcHRpb24gb2Ygc3RyaW5ncworICByZXByZXNlbnRpbmcgTmFOcyBhbmQgaW5maW5pdGllcy4KKworLSBJc3N1ZSAjNTc5NTogRml4ZWQgdGVzdF9kaXN0dXRpbHMgZmFpbHVyZSBvbiBEZWJpYW4gcHBjLgorCistIElzc3VlICM1NzY4OiBGaXhlZCBidWcgaW4gVW5pY29kZSBvdXRwdXQgbG9naWMgYW5kIHRlc3QgY2FzZSBmb3Igc2FtZS4KKworLSBJc3N1ZSAjMTE2MTAzMTogRml4IHJlYWR3cml0ZSBzZWxlY3QgZmxhZyBoYW5kbGluZzogUE9MTFBSSSBub3cgcmVzdWx0cyBpbiBhCisgIGhhbmRsZV9leHB0X2V2ZW50IGNhbGwsIG5vdCBoYW5kbGVfcmVhZF9ldmVudCwgYW5kIFBPTExFUlIgYW5kIFBPTExOVkFMIG5vdworICBjYWxsIGhhbmRsZV9jbG9zZSwgbm90IGhhbmRsZV9leHB0X2V2ZW50LiAgQWxzbywgZGlzcGF0Y2hlciBub3cgaGFzIGFuCisgICdpZ25vcmVfbG9nX3R5cGVzJyBhdHRyaWJ1dGUgZm9yIHN1cHByZXNzaW5nIGxvZyBtZXNzYWdlcywgd2hpY2ggaXMgc2V0IHRvCisgICd3YXJuaW5nJyBieSBkZWZhdWx0LgorCistIElzc3VlICM1NjA3OiBGaXhlZCBEaXN0dXRpbHMgdGVzdF9nZXRfcGxhdGZvcm0gZm9yIE1hYyBPUyBYIGZhdCBiaW5hcmllcy4KKworLSBJc3N1ZSAjNTc0MTogRG9uJ3QgZGlzYWxsb3cgIiUlIiAod2hpY2ggaXMgYW4gZXNjYXBlIGZvciAiJSIpIHdoZW4gc2V0dGluZyBhCisgIHZhbHVlIGluIFNhZmVDb25maWdQYXJzZXIuCisKKy0gSXNzdWUgIzU3MzI6IEFkZGVkIGEgbmV3IGNvbW1hbmQgaW4gRGlzdHV0aWxzOiBjaGVjay4KIAogLSBJc3N1ZSAjNTczMTogRGlzdHV0aWxzIGJkaXN0X3dpbmluc3Qgbm8gbG9uZ2VyIHdvcmtlZCBvbiBub24tV2luZG93cwotICBwbGF0Zm9ybXMuIEluaXRpYWwgcGF0Y2ggYnkgUGF1bCBNb29yZS4KKyAgcGxhdGZvcm1zLiAgSW5pdGlhbCBwYXRjaCBieSBQYXVsIE1vb3JlLgogCi0tIElzc3VlICMxNDkxNDMxOiBGaXhlZCBkaXN0dXRpbHMuZmlsZWxpc3QuZ2xvYl90b19yZSBmb3IgZWRnZSBjYXNlcy4KLSAgSW5pdGlhbCBmaXggYnkgV2F5bmUgRGF2aXNvbi4KKy0gSXNzdWUgIzIyNTQ6IEZpeCBDR0lIVFRQU2VydmVyIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuICBSZWxhdGl2ZSBwYXRocyBhcmUgbm93CisgIGNvbGxhcHNlZCB3aXRoaW4gdGhlIHVybCBwcm9wZXJseSBiZWZvcmUgbG9va2luZyBpbiBjZ2lfZGlyZWN0b3JpZXMuCisKKy0gSXNzdWUgIzUwOTU6IEFkZGVkIGJkaXN0X21zaSB0byB0aGUgbGlzdCBvZiBiZGlzdCBzdXBwb3J0ZWQgZm9ybWF0cy4gIEluaXRpYWwKKyAgZml4IGJ5IFN0ZXZlbiBCZXRoYXJkLgorCistIElzc3VlICMxNDkxNDMxOiBGaXhlZCBkaXN0dXRpbHMuZmlsZWxpc3QuZ2xvYl90b19yZSBmb3IgZWRnZSBjYXNlcy4gIEluaXRpYWwKKyAgZml4IGJ5IFdheW5lIERhdmlzb24uCisKKy0gSXNzdWUgIzU2OTM6IFRlc3RTdWl0ZS5fX2l0ZXJfXyBjYW4gbm93IGJlIGNvbnNpc3RlbnRseSBvdmVycmlkZGVuIGluCisgIHN1YmNsYXNzZXMuCisKKy0gSXNzdWUgIzU2OTQ6IFJlbW92ZWQgc3B1cmlvdXMgdGVzdCBvdXRwdXQgaW4gRGlzdHV0aWxzICh0ZXN0X2NsZWFuKS4KIAogLSBJc3N1ZSAjNTQ3MTogRml4IG9zLnBhdGguZXhwYW5kdXNlcigpIGZvciAkSE9NRSBzZXQgdG8gJy8nLgogCi0tIElzc3VlICMxNzI2MTcyOiBmaXggSW5kZXhFcnJvciBpbiB0aGUgY2FzZSBvZiBhbmQgZW1wdHkgcmVzcG9uc2UgaW4gZnRwbGliLgorLSBJc3N1ZSAjMTMyNjA3NzogRml4IHRoZSBmb3JtYXR0aW5nIG9mIFN5bnRheEVycm9ycyBieSB0aGUgdHJhY2ViYWNrIG1vZHVsZS4KKworLSBJc3N1ZSAjMTcyNjE3MjogRml4IEluZGV4RXJyb3IgaW4gdGhlIGNhc2Ugb2YgYW5kIGVtcHR5IHJlc3BvbnNlIGluIGZ0cGxpYi4KKworLSBJc3N1ZSAjMjYyNTogQWRkZWQgbWlzc2luZyBpdGVyaXRlbXMoKSBjYWxsIHRvIHRoZSBmb3IgbG9vcCBpbgorICBtYWlsYm94Lk1ILmdldF9tZXNzYWdlKCkuCisKKy0gSXNzdWUgIzU1ODU6IEFkZCB0aGUgYWJpbGl0eSB0byBjYWxsIGFuIGluaXRpYWxpemVyIHRvCisgIG11bGl0aXByb2Nlc3NpbmcubWFuYWdlciBzbyB0aGF0IHVzZXJzIGNhbiBpbnN0YWxsIGN1c3RvbSBoYW5kbGVycy9ldGMuCisKKy0gSXNzdWUgIzM1NTE6IFBhdGNoIG11bHRpcHJvY2Vzc2luZyB0byByYWlzZSBhIHByb3BlciBleGNlcHRpb24gaWYgdGhlIHNpemUgb2YKKyAgdGhlIG9iamVjdCB3aGVuIHdyaXRlZmlsZSBpcyBjYWxsZWQgY2F1c2VzIGEgRVJST1JfTk9fU1lTVEVNX1JFU09VUkNFUy4gIEFkZGVkCisgIGRvY3MgdG8gbm90ZSB0aGUgbGltaXRhdGlvbi4KKworLSB1bml0dGVzdC5hc3NlcnROb3RFcXVhbCgpIG5vdyB1c2VzIHRoZSBpbmVxdWFsaXR5IG9wZXJhdG9yICghPSkgaW5zdGVhZCBvZiB0aGUKKyAgZXF1YWxpdHkgb3BlcmF0b3IuCisKKy0gSXNzdWUgIzYwMDE6IFRlc3QgZGlzY292ZXJ5IGZvciB1bml0dGVzdC4gSW1wbGVtZW50ZWQgaW4KKyAgdW5pdHRlc3QuVGVzdExvYWRlci5kaXNjb3ZlciBhbmQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCistIElzc3VlICM1Njc5OiBUaGUgbWV0aG9kcyB1bml0dGVzdC5UZXN0Q2FzZS5hZGRDbGVhbnVwIGFuZCBkb0NsZWFudXBzIHdlcmUKKyAgYWRkZWQuICBhZGRDbGVhbnVwIGFsbG93cyB5b3UgdG8gYWRkIGNsZWFudXAgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBjYWxsZWQKKyAgdW5jb25kaXRpb25hbGx5IChhZnRlciBzZXRVcCBpZiBzZXRVcCBmYWlscywgb3RoZXJ3aXNlIGFmdGVyIHRlYXJEb3duKS4gVGhpcworICBhbGxvd3MgZm9yIG11Y2ggc2ltcGxlciByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZHVyaW5nIHRlc3RzLgorCistIElzc3VlICMzMzc5OiB1bml0dGVzdC5tYWluIG5vdyB0YWtlcyBhbiBvcHRpb25hbCBleGl0IGFyZ3VtZW50LiBJZiBGYWxzZSBtYWluCisgIGRvZXNuJ3QgY2FsbCBzeXMuZXhpdCBhbGxvd2luZyBpdCB0byBiZSB1c2VkIGZyb20gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyLgorCistIElzc3VlICM1OTk1OiB1bml0dGVzdC5tYWluIG5vdyB0YWtlcyBhbiBvcHRpb25hbCB2ZXJib3NpdHkgYXJndW1lbnQgYWxsb3dpbmcKKyAgdGVzdCBtb2R1bGVzIHRvIGJlIHJ1biB3aXRoIGEgaGlnaGVyIHRoYW4gZGVmYXVsdCB2ZXJib3NpdHkuCisKKy0gSXNzdWUgIzU5OTU6IEEgZml4IHRvIGFsbG93IHlvdSB0byBydW4gInB5dGhvbiAtbSB1bml0dGVzdCB0ZXN0X21vZHVsZSIgb3IKKyAgInB5dGhvbiAtbSB1bml0dGVzdCB0ZXN0X21vZHVsZS5UZXN0Q2xhc3MiIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworLSBJc3N1ZSAjNTcyODogdW5pdHRlc3QuVGVzdFJlc3VsdCBoYXMgbmV3IHN0YXJ0VGVzdFJ1biBhbmQgc3RvcFRlc3RSdW4gbWV0aG9kczsKKyAgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBhbmQgYWZ0ZXIgYSB0ZXN0IHJ1bi4KKworLSBJc3N1ZSAjNTY2MzogQmV0dGVyIGZhaWx1cmUgbWVzc2FnZXMgZm9yIHVuaXR0ZXN0IGFzc2VydHMuIERlZmF1bHQgYXNzZXJ0VHJ1ZQorICBhbmQgYXNzZXJ0RmFsc2UgbWVzc2FnZXMgYXJlIG5vdyB1c2VmdWwuIFRlc3RDYXNlIGhhcyBhIGxvbmdNZXNzYWdlIGF0dHJpYnV0ZS4KKyAgVGhpcyBkZWZhdWx0cyB0byBGYWxzZSwgYnV0IGlmIHNldCB0byBUcnVlIHVzZWZ1bCBlcnJvciBtZXNzYWdlcyBhcmUgc2hvd24gaW4KKyAgYWRkaXRpb24gdG8gZXhwbGljaXQgbWVzc2FnZXMgcGFzc2VkIHRvIGFzc2VydCBtZXRob2RzLgorCistIElzc3VlICMzMTEwOiBBZGQgYWRkaXRpb25hbCBwcm90ZWN0IGFyb3VuZCBTRU1fVkFMVUVfTUFYIGZvciBtdWx0aXByb2Nlc3NpbmcuCiAKIC0gSW4gUGRiLCBwcmV2ZW50IHRoZSByZWFzc2lnbm1lbnQgb2YgX19idWlsdGluX18uXyBieSBzeXMuZGlzcGxheWhvb2sgb24KICAgcHJpbnRpbmcgb3V0IHZhbHVlcy4KIAotLSBJc3N1ZSAjNDU3MjogYWRkZWQgU0VFS18qIHN5bWJvbGljIGNvbnN0YW50cyB0byBpbyBtb2R1bGUuCistIElzc3VlICM0NTcyOiBBZGRlZCBTRUVLXyogc3ltYm9saWMgY29uc3RhbnRzIHRvIGlvIG1vZHVsZS4KIAogLSBJc3N1ZSAjMTY2NTIwNiAocGFydGlhbGx5KTogTW92ZSBpbXBvcnRzIGluIGNnaXRiIHRvIHRoZSB0b3Agb2YgdGhlIG1vZHVsZQogICBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgdGhlbSBpbiBmdW5jdGlvbnMuIEhlbHBzIHByZXZlbnQgaW1wb3J0IGRlYWRsb2NraW5nIGluCkBAIC0xMzk1LDM5MiArMzE3OCwzODQgQEAKIAogLSBBY3R1YWxseSBtYWtlIHRoZSBTaW1wbGVYTUxSUENTZXJ2ZXIgQ0dJIGhhbmRsZXIgd29yay4KIAotLSBJc3N1ZSAjMjYyNTogYWRkZWQgbWlzc2luZyBpdGVyaXRlbXMoKSBjYWxsIHRvIHRoZSBmb3IgbG9vcCBpbgotICBtYWlsYm94Lk1ILmdldF9tZXNzYWdlKCkuCistIElzc3VlICMyNTIyOiBsb2NhbGUuZm9ybWF0KCkgbm93IGNoZWNrcyBpdHMgZmlyc3QgYXJndW1lbnQgdG8gZW5zdXJlIGl0IGhhcworICBiZWVuIHBhc3NlZCBvbmx5IG9uZSBwYXR0ZXJuLCBhdm9pZGluZyBteXN0ZXJpb3VzIGVycm9ycyB3aGVyZSBpdCBhcHBlYXJlZAorICB0aGF0IGl0IHdhcyBmYWlsaW5nIHRvIGRvIGxvY2FsaXphdGlvbi4KIAotLSBJc3N1ZSAjNTY0NzogTXV0YWJsZVNldC5fX2lhbmRfXygpIG5vIGxvbmdlciBtdXRhdGVzIHNlbGYgZHVyaW5nIGl0ZXJhdGlvbi4KKy0gSXNzdWUgIzU1ODM6IEFkZGVkIG9wdGlvbmFsIGV4dGVuc2lvbnMgaW4gRGlzdHV0aWxzLiAgSW5pdGlhbCBwYXRjaCBieSBHZW9yZworICBCcmFuZGwuCiAKLS0gSXNzdWUgIzU2MTk6IE11bHRpcHJvY2Vzc2luZyBjaGlsZHJlbiBkaXNvYmV5IHRoZSBkZWJ1ZyBmbGFnIGFuZCBjYXVzZXMKLSAgcG9wdXBzIG9uIHdpbmRvd3MgYnVpbGRib3RzLiBQYXRjaCBhcHBsaWVkIHRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUuCistIElzc3VlICM1NjE5OiBNdWx0aXByb2Nlc3NpbmcgY2hpbGRyZW4gZGlzb2JleSB0aGUgZGVidWcgZmxhZyBhbmQgY2F1c2VzIHBvcHVwcworICBvbiB3aW5kb3dzIGJ1aWxkYm90cy4gIFBhdGNoIGFwcGxpZWQgdG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZS4KIAotLSBJc3N1ZSAjNTYzMjogVGhyZWFkLmlkZW50IHdhcyBOb25lIGZvciB0aGUgbWFpbiB0aHJlYWQgYW5kIHRocmVhZHMgbm90Ci0gIGNyZWF0ZWQgd2l0aCB0aGUgdGhyZWFkaW5nIG1vZHVsZS4KKy0gSXNzdWUgIzU2MzI6IFRocmVhZC5pZGVudCB3YXMgTm9uZSBmb3IgdGhlIG1haW4gdGhyZWFkIGFuZCB0aHJlYWRzIG5vdCBjcmVhdGVkCisgIHdpdGggdGhlIHRocmVhZGluZyBtb2R1bGUuCiAKLS0gSXNzdWUgIzU0MDA6IEFkZGVkIHBhdGNoIGZvciBtdWx0aXByb2Nlc3Npbmcgb24gbmV0YnNkIGNvbXBpbGF0aW9uL3N1cHBvcnQKLQotLSBGaXggYW5kIHByb3Blcmx5IGRvY3VtZW50IHRoZSBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlJ3MgbG9nZ2luZwotICBzdXBwb3J0LCBleHBvc2UgdGhlIGludGVybmFsIGxldmVscyBhbmQgcHJvdmlkZSBwcm9wZXIgdXNhZ2UKLSAgZXhhbXBsZXMuCistIElzc3VlICM1NDAwOiBBZGRlZCBwYXRjaCBmb3IgbXVsdGlwcm9jZXNzaW5nIG9uIG5ldGJzZCBjb21waWxhdGlvbi9zdXBwb3J0LgogCiAtIElzc3VlICM1Mzg3OiBGaXhlZCBtbWFwLm1vdmUgY3Jhc2ggYnkgaW50ZWdlciBvdmVyZmxvdy4KIAotLSBJc3N1ZSAjMzgwNzogX211bHRpcHJvY2Vzc2luZyBidWlsZCBmYWlscyB3aGVuIGNvbmZpZ3VyZSBpcyBwYXNzZWQKLSAgLS13aXRob3V0LXRocmVhZHMgYXJndW1lbnQuIFdoZW4gdGhpcyBvY2N1cnMsIF9tdWx0aXByb2Nlc3Npbmcgd2lsbAotICBiZSBkaXNhYmxlZCwgYW5kIG5vdCBjb21waWxlZC4KLQotLSBJc3N1ZSAjNTI2MTogUGF0Y2ggbXVsdGlwcm9jZXNzaW5nJ3Mgc2VtYXBob3JlLmMgdG8gc3VwcG9ydCBjb250ZXh0Ci0gIG1hbmFnZXIgdXNlOiAid2l0aCBtdWx0aXByb2Nlc3NpbmcuTG9jaygpIiB3b3JrcyBub3cuCistIElzc3VlICM1MjYxOiBQYXRjaCBtdWx0aXByb2Nlc3NpbmcncyBzZW1hcGhvcmUuYyB0byBzdXBwb3J0IGNvbnRleHQgbWFuYWdlcgorICB1c2U6ICJ3aXRoIG11bHRpcHJvY2Vzc2luZy5Mb2NrKCkiIHdvcmtzIG5vdy4KIAogLSBJc3N1ZSAjNTE3NzogTXVsdGlwcm9jZXNzaW5nJ3MgU29ja2V0TGlzdGVuZXIgY2xhc3Mgbm93IHVzZXMKLSAgc29ja2V0LlNPX1JFVVNFQUREUiBvbiBhbGwgY29ubmVjdGlvbnMgc28gdGhhdCB0aGUgdXNlciBubyBsb25nZXIgbmVlZHMKLSAgdG8gd2FpdCAxMjAgc2Vjb25kcyBmb3IgdGhlIHNvY2tldCB0byBleHBpcmUuCisgIHNvY2tldC5TT19SRVVTRUFERFIgb24gYWxsIGNvbm5lY3Rpb25zIHNvIHRoYXQgdGhlIHVzZXIgbm8gbG9uZ2VyIG5lZWRzIHRvCisgIHdhaXQgMTIwIHNlY29uZHMgZm9yIHRoZSBzb2NrZXQgdG8gZXhwaXJlLgogCi0tIEFkanVzdGVkIF90a2ludGVyIHRvIGNvbXBpbGUgd2l0aG91dCB3YXJuaW5ncyB3aGVuIFdJVEhfVEhSRUFEIGlzIG5vdAotICBkZWZpbmVkIChwYXJ0IG9mIGlzc3VlICM1MDM1KS4KKy0gQWRqdXN0ZWQgX3RraW50ZXIgdG8gY29tcGlsZSB3aXRob3V0IHdhcm5pbmdzIHdoZW4gV0lUSF9USFJFQUQgaXMgbm90IGRlZmluZWQKKyAgKHBhcnQgb2YgaXNzdWUgIzUwMzUpLgogCiAtIElzc3VlICM1NTYxOiBSZW1vdmVkIHRoZSBzeXMudmVyc2lvbl9pbmZvIHNob3J0Y3V0cyBmcm9tIHBsYXRmb3JtJ3MKICAgcHl0aG9uX3ZlcnNpb24oKSBhbmQgcHl0aG9uX3ZlcnNpb25fdHVwbGUoKSBzaW5jZSB0aGV5IHByb2R1Y2VkIGRpZmZlcmVudAogICBvdXRwdXQgY29tcGFyZWQgdG8gcHJldmlvdXMgUHl0aG9uIHZlcnNpb25zLgogCi0tIElzc3VlICM1MDY4OiBGaXhlZCB0aGUgdGFyZmlsZS5fQloyUHJveHkucmVhZCgpIG1ldGhvZCB0aGF0IHdvdWxkIGxvb3AKLSAgZm9yZXZlciBvbiBpbmNvbXBsZXRlIGlucHV0LiBUaGF0IGNhdXNlZCB0YXJmaWxlLm9wZW4oKSB0byBoYW5nIHdoZW4gdXNlZAotICB3aXRoIG1vZGUgJ3InIG9yICdyOmJ6MicgYW5kIGEgZmlsZW9iaiBhcmd1bWVudCB0aGF0IGNvbnRhaW5lZCBubyBkYXRhIG9yCi0gIHBhcnRpYWwgYnppcDIgY29tcHJlc3NlZCBkYXRhLgorLSBJc3N1ZSAjMTAzNDA1MzogdW5pdHRlc3Qgbm93IHN1cHBvcnRzIHNraXBwaW5nIHRlc3RzIGFuZCBleHBlY3RlZCBmYWlsdXJlcy4KKworLSBUaGUgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmFpc2VzKCkgbWV0aG9kIG5vdyByZXR1cm5zIGEgY29udGV4dCBtYW5hZ2VyIHdoZW4KKyAgbm90IGdpdmVuIGEgY2FsbGFibGUgc28gdGhhdCBjb2RlIHRvIGJlIHRlc3RlZCBjYW4gYmUgd3JpdHRlbiBpbmxpbmUgdXNpbmcgYQorICB3aXRoIHN0YXRlbWVudC4KKworLSBJc3N1ZSAjMjU3ODogVGhlIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsKCkgbm93IGRpc3BsYXlzIHRoZSBkaWZmZXJlbmNlcworICBpbiBsaXN0cywgdHVwbGVzLCBkaWN0cyBhbmQgc2V0cyBvbiBmYWlsdXJlLiAgTWFueSBuZXcgaGFuZHkgdHlwZSBhbmQKKyAgY29tcGFyaXNvbiBzcGVjaWZpYyBhc3NlcnQqIG1ldGhvZHMgaGF2ZSBiZWVuIGFkZGVkIHRoYXQgZmFpbCB3aXRoIGVycm9yCisgIG1lc3NhZ2VzIGFjdHVhbGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAgQ29udHJpYnV0ZWQgaW4gcGFydCBieSBHb29nbGUuCisKKy0gSXNzdWUgIzUwNjg6IEZpeGVkIHRoZSB0YXJmaWxlLl9CWjJQcm94eS5yZWFkKCkgbWV0aG9kIHRoYXQgd291bGQgbG9vcCBmb3JldmVyCisgIG9uIGluY29tcGxldGUgaW5wdXQuICBUaGF0IGNhdXNlZCB0YXJmaWxlLm9wZW4oKSB0byBoYW5nIHdoZW4gdXNlZCB3aXRoIG1vZGUKKyAgJ3InIG9yICdyOmJ6MicgYW5kIGEgZmlsZW9iaiBhcmd1bWVudCB0aGF0IGNvbnRhaW5lZCBubyBkYXRhIG9yIHBhcnRpYWwgYnppcDIKKyAgY29tcHJlc3NlZCBkYXRhLgogCiAtIElzc3VlICM1NTM2OiB1cmxsaWIudXJscmV0cmlldmUgbWFrZXMgc3VyZSB0byBjbG9zZSB0aGUgZmlsZSBpdCdzIHdyaXRpbmcgdG8KICAgZXZlbiBpZiBhbiBleGNlcHRpb24gb2NjdXJzLgogCi0tIEZpeCBEZWNpbWFsLl9fZm9ybWF0X18gYnVnIHRoYXQgc3dhcHBlZCB0aGUgbWVhbmluZ3Mgb2YgdGhlICc8JyBhbmQKLSAgJz4nIGFsaWdubWVudCBjaGFyYWN0ZXJzLgorLSBJc3N1ZSAjNTM4MTogQWRkZWQgb2JqZWN0X3BhaXJzX2hvb2sgdG8gdGhlIGpzb24gbW9kdWxlLiAgVGhpcyBhbGxvd3MKKyAgT3JkZXJlZERpY3RzIHRvIGJlIGJ1aWx0IGJ5IHRoZSBkZWNvZGVyLgogCi0tIElzc3VlICMxMjIyOiBsb2NhbGUuZm9ybWF0KCkgYnVnIHdoZW4gdGhlIHRob3VzYW5kcyBzZXBhcmF0b3IgaXMgYSBzcGFjZQorLSBJc3N1ZSAjMjExMDogQWRkIHN1cHBvcnQgZm9yIHRob3VzYW5kcyBzZXBhcmF0b3IgYW5kICduJyB0eXBlIHNwZWNpZmllciB0bworICBgYERlY2ltYWwuX19mb3JtYXRfXygpYGAuCisKKy0gRml4IERlY2ltYWwuX19mb3JtYXRfXyBidWcgdGhhdCBzd2FwcGVkIHRoZSBtZWFuaW5ncyBvZiB0aGUgJzwnIGFuZCAnPicKKyAgYWxpZ25tZW50IGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzEyMjI6IGBgbG9jYWxlLmZvcm1hdCgpYGAgYnVnIHdoZW4gdGhlIHRob3VzYW5kcyBzZXBhcmF0b3IgaXMgYSBzcGFjZQogICBjaGFyYWN0ZXIuCiAKLS0gSXNzdWUgIzQ3OTI6IFByZXZlbnQgYSBzZWdmYXVsdCBpbiBfdGtpbnRlciBieSB1c2luZyB0aGUKLSAgZ3VhcmFudGVlZCB0byBiZSBzYWZlIGludGVycCBhcmd1bWVudCBnaXZlbiB0byB0aGUgUHl0aG9uQ21kIGluIHBsYWNlIG9mCi0gIHRoZSBUY2wgaW50ZXJwcmV0ZXIgdGFrZW4gZnJvbSBhIFB5dGhvbkNtZF9DbGllbnREYXRhLgorLSBJc3N1ZSAjNTQ3MjogRml4ZWQgZGlzdHV0aWxzLnRlc3RfdXRpbCB0ZWFyIGRvd24uIE9yaWdpbmFsIHBhdGNoIGJ5IFRpbQorICBHb2xkZW4uCisKKy0gY29sbGVjdGlvbnMuZGVxdWUgb2JqZWN0cyBub3cgaGF2ZSBhIHJlYWQtb25seSBhdHRyaWJ1dGUgY2FsbGVkIG1heGxlbi4KKworLSBJc3N1ZSAjMjYzODogU2hvdyBhIHdpbmRvdyBjb25zdHJ1Y3RlZCB3aXRoIHRrU2ltcGxlRGlhbG9nLkRpYWxvZyBvbmx5IGFmdGVyCisgIGl0IGlzIGhhcyBiZWVuIHBvcHVsYXRlZCBhbmQgcHJvcGVybHkgY29uZmlndXJlZCBpbiBvcmRlciB0byBwcmV2ZW50IHdpbmRvdworICBmbGFzaGluZy4KKworLSBJc3N1ZSAjNDc5MjogUHJldmVudCBhIHNlZ2ZhdWx0IGluIF90a2ludGVyIGJ5IHVzaW5nIHRoZSBndWFyYW50ZWVkIHRvIGJlIHNhZmUKKyAgaW50ZXJwIGFyZ3VtZW50IGdpdmVuIHRvIHRoZSBQeXRob25DbWQgaW4gcGxhY2Ugb2YgdGhlIFRjbCBpbnRlcnByZXRlciB0YWtlbgorICBmcm9tIGEgUHl0aG9uQ21kX0NsaWVudERhdGEuCiAKIC0gSXNzdWUgIzUxOTM6IEd1YXJhbnRlZSB0aGF0IFRraW50ZXIuVGV4dC5zZWFyY2ggcmV0dXJucyBhIHN0cmluZy4KIAorLSBJc3N1ZSAjNTM5NDogUmVtb3ZlZCA+IDIuMyBzeW50YXggZnJvbSBkaXN0dXRpbHMubXN2Yzljb21waWxlci4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQWtpcmEgS2l0YWRhLgorCiAtIElzc3VlICM1Mzg1OiBGaXhlZCBtbWFwIGNyYXNoIGFmdGVyIHJlc2l6ZSBmYWlsdXJlIG9uIHdpbmRvd3MuCiAKIC0gSXNzdWUgIzUxNzk6IEZpeGVkIHN1YnByb2Nlc3MgaGFuZGxlIGxlYWsgb24gZmFpbHVyZSBvbiB3aW5kb3dzLgogCi0tIElzc3VlICM0MzA4OiBodHRwbGliLkluY29tcGxldGVSZWFkJ3MgcmVwciBkb2Vzbid0IGluY2x1ZGUgYWxsIG9mIHRoZSBkYXRhCi0gIGFsbCByZWFkeSByZWNlaXZlZC4KKy0gUEVQIDM3MjogQWRkZWQgY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKS4KKworLSBUaGUgX2FzZGljdCgpIGZvciBtZXRob2QgZm9yIG5hbWVkdHVwbGVzIG5vdyByZXR1cm5zIGFuIE9yZGVyZWREaWN0KCkuCisKKy0gVGhlIGNvbmZpZ3BhcnNlciBtb2R1bGUgbm93IGRlZmF1bHRzIHRvIHVzaW5nIGFuIG9yZGVyZWQgZGljdGlvbmFyeS4KKworLSBJc3N1ZSAjNDMwODogaHR0cGxpYi5JbmNvbXBsZXRlUmVhZCdzIHJlcHIgZG9lc24ndCBpbmNsdWRlIGFsbCBvZiB0aGUgZGF0YSBhbGwKKyAgcmVhZHkgcmVjZWl2ZWQuCiAKIC0gSXNzdWUgIzU0MDE6IEZpeGVkIGEgcGVyZm9ybWFuY2UgcHJvYmxlbSBpbiBtaW1ldHlwZXMgd2hlbiBgYGZyb20gbWltZXR5cGVzCiAgIGltcG9ydCBndWVzc19leHRlbnNpb25gYCB3YXMgdXNlZC4KIAotLSBJc3N1ZSAjMTczMzk4NjogRml4ZWQgbW1hcCBjcmFzaCBpbiBhY2Nlc3NpbmcgZWxlbWVudHMgb2Ygc2Vjb25kIG1hcCBvYmplY3QKLSAgd2l0aCBzYW1lIHRhZ25hbWUgYnV0IGxhcmdlciBzaXplIHRoYW4gZmlyc3QgbWFwLiAoV2luZG93cykKKy0gSXNzdWUgIzE3MzM5ODY6IEZpeGVkIG1tYXAgY3Jhc2ggb24gV2luZG93cyBpbiBhY2Nlc3NpbmcgZWxlbWVudHMgb2Ygc2Vjb25kCisgIG1hcCBvYmplY3Qgd2l0aCBzYW1lIHRhZ25hbWUgYnV0IGxhcmdlciBzaXplIHRoYW4gZmlyc3QgbWFwLgogCiAtIElzc3VlICM1Mzg2OiBtbWFwLndyaXRlX2J5dGUgZGlkbid0IGNoZWNrIG1hcCBzaXplLCBzbyBpdCBjb3VsZCBjYXVzZSBidWZmZXIKICAgb3ZlcnJ1bi4KIAorLSBJc3N1ZSAjMTUzMzE2NDogSW5zdGFsbGVkIGJ1dCBub3QgbGlzdGVkICoucHlvIHdhcyBicmVha2luZyBEaXN0dXRpbHMKKyAgYmRpc3RfcnBtIGNvbW1hbmQuCisKKy0gSXNzdWUgIzUzNzg6IEFkZGVkIC0tcXVpZXQgb3B0aW9uIHRvIERpc3R1dGlscyBiZGlzdF9ycG0gY29tbWFuZC4KKworLSBJc3N1ZSAjNTA1MjogTWFrZSBEaXN0dXRpbHMgY29tcGF0aWJsZSB3aXRoIDIuMyBhZ2Fpbi4KKworLSBEZXByZWNhdGVkIG1ldGhvZHMgb2Ygc3ltdGFibGUuU3ltYm9sIGhhdmUgYmVlbiByZW1vdmVkOiBpc19rZXl3b3JkYXJnKCksCisgIGlzX3ZhcmFyZygpLCBhbmQgaXNfaW5fdHVwbGUoKS4KKworLSBJc3N1ZSAjNTMxNjogRml4ZWQgYnVpbGRib3QgZmFpbHVyZXMgaW50cm9kdWNlZCBieSBtdWx0aXBsZSBpbmhlcml0YW5jZSBpbgorICBEaXN0dXRpbHMgdGVzdHMuCisKKy0gSXNzdWUgIzUyODc6IEFkZCBleGNlcHRpb24gaGFuZGxpbmcgYXJvdW5kIGZpbmRDYWxsZXIoKSBjYWxsIHRvIGhlbHAgb3V0CisgIElyb25QeXRob24uCisKKy0gSXNzdWUgIzUyODI6IEZpeGVkIG1tYXAgcmVzaXplIG9uIDMyYml0IFdpbmRvd3MgYW5kIFVuaXguICBXaGVuIGBgb2Zmc2V0ID4KKyAgMGBgLCB0aGUgZmlsZSB3YXMgcmVzaXplZCB0byB3cm9uZyBzaXplLgorCiAtIElzc3VlICM1MjkyOiBGaXhlZCBtbWFwIGNyYXNoIG9uIGl0cyBib3VuZGFyeSBhY2Nlc3MgbVtsZW4obSldLgogCi0tIElzc3VlICM1MjgyOiBGaXhlZCBtbWFwIHJlc2l6ZSBvbiAzMmJpdCB3aW5kb3dzIGFuZCB1bml4LiBXaGVuIG9mZnNldCA+IDAsCi0gIFRoZSBmaWxlIHdhcyByZXNpemVkIHRvIHdyb25nIHNpemUuCistIElzc3VlICMyMjc5OiBkaXN0dXRpbHMuc2Rpc3QuYWRkX2RlZmF1bHRzIG5vdyBhZGQgZmlsZXMgZnJvbSB0aGUgcGFja2FnZV9kYXRhCisgIGFuZCB0aGUgZGF0YV9maWxlcyBtZXRhZGF0YS4KIAotLSBJc3N1ZSAjNTI4NzogQWRkIGV4Y2VwdGlvbiBoYW5kbGluZyBhcm91bmQgZmluZENhbGxlcigpIGNhbGwgaW4gbG9nZ2luZyB0bwotICBoZWxwIG91dCBJcm9uUHl0aG9uLgorLSBJc3N1ZSAjNTI1NzogUmVmYWN0b3JlZCBhbGwgdGVzdHMgaW4gZGlzdHV0aWxzLCBzbyB0aGV5IHVzZQorICBzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLCB0byBhdm9pZCB3cml0aW5nIGluIHRoZSB0ZXN0cyBkaXJlY3RvcnkuCiAKIC0gSXNzdWUgIzQ1MjQ6IGRpc3R1dGlscyBidWlsZF9zY3JpcHQgY29tbWFuZCBmYWlsZWQgd2l0aCAtLXdpdGgtc3VmZml4PTMuCiAgIEluaXRpYWwgcGF0Y2ggYnkgQW1hdXJ5IEZvcmdlb3QgZCdBcmMuCiAKLS0gSXNzdWUgIzQ5OTg6IFRoZSBtZW1vcnkgc2F2aW5nIGVmZmVjdCBvZiBfX3Nsb3RzX18gaGFkIGJlZW4gbG9zdCBvbiBGcmFjdGlvbnMKLSAgd2hpY2ggaW5oZXJpdGVkIGZyb20gbnVtYmVycy5weSB3aGljaCBkaWQgbm90IGhhdmUgX19zbG90c19fIGRlZmluZWQuICBUaGUKLSAgbnVtYmVycyBoaWVyYXJjaHkgbm93IGhhcyBpdHMgb3duIF9fc2xvdHNfXyBkZWNsYXJhdGlvbnMuCistIElzc3VlICMyNDYxOiBBZGRlZCB0ZXN0cyBmb3IgZGlzdHV0aWxzLnV0aWwuCisKKy0gSXNzdWUgIzEwMDgwODY6IEZpeGVkIHNvY2tldC5pbmV0X2F0b24oKSB0byBhbHdheXMgcmV0dXJuIDQgYnl0ZXMgZXZlbiBvbiBMUDY0CisgIHBsYXRmb3JtcyAobW9zdCA2NC1iaXQgTGludXgsIGJzZCwgdW5peCBzeXN0ZW1zKS4KIAogLSBJc3N1ZSAjNTIwMzogRml4ZWQgY3R5cGVzIHNlZ2ZhdWx0cyB3aGVuIHBhc3NpbmcgYSB1bmljb2RlIHN0cmluZyB0byBhCiAgIGZ1bmN0aW9uIHdpdGhvdXQgYXJndHlwZXMgKG9ubHkgb2NjdXJzIGlmIEhBVkVfVVNBQkxFX1dDSEFSX1QgaXMgZmFsc2UpLgogCi0tIElzc3VlICMzMzIxOiBfbXVsdGlwcm9jZXNzaW5nLkNvbm5lY3Rpb24oKSBkb2Vzbid0IGNoZWNrIGhhbmRsZTsgYWRkZWQgY2hlY2tzCi0gIGZvciAqbml4IG1hY2hpbmVzIGZvciBuZWdhdGl2ZSBoYW5kbGVzIGFuZCBsYXJnZSBpbnQgaGFuZGxlcy4gV2l0aG91dCB0aGlzCi0gIGNoZWNrIGl0IGlzIHBvc3NpYmxlIHRvIHNlZ2ZhdWx0IHRoZSBpbnRlcnByZXRlci4KLQotLSBJc3N1ZSAjNDQ0OTogQXNzZXJ0aW9uRXJyb3IgaW4gbXBfYmVuY2htYXJrcy5weSwgY2F1c2VkIGJ5IGFuIHVuZGVybHlpbmcKLSAgaXNzdWUgaW4gc2hhcmVkY3R5cGVzLnB5LgotCiAtIElzc3VlICMzMzg2OiBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliIHByZWZpeCBhcmd1bWVudCB3YXMgaWdub3JlZAogICB1bmRlciBOVCBhbmQgT1MyLiBQYXRjaCBieSBQaGlsaXAgSmVudmV5LgogCistIElzc3VlICM1MTI4OiBNYWtlIGNvbXBpbGVhbGwgcHJvcGVybHkgaW5zcGVjdCBieXRlY29kZSB0byBkZXRlcm1pbmUgaWYgbmVlZHMKKyAgdG8gYmUgcmVjcmVhdGVkLiAgVGhpcyBhdm9pZHMgYSB0aW1pbmcgaG9sZSB0aGFua3MgdG8gdGhlIG9sZCByZWxpYW5jZSBvbiB0aGUKKyAgY3RpbWUgb2YgdGhlIGZpbGVzIGludm9sdmVkLgorCistIElzc3VlICM1MTIyOiBTeW5jaHJvbml6ZSB0ayBsb2FkIGZhaWx1cmUgY2hlY2sgdG8gcHJldmVudCBhIHBvdGVudGlhbAorICBkZWFkbG9jay4KKworLSBJc3N1ZSAjMTgxODogY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIG5vdyBzdXBwb3J0cyBhIGtleXdvcmQgYXJndW1lbnQgJ3JlbmFtZScKKyAgd2hpY2ggbGV0cyBpbnZhbGlkIGZpZWxkbmFtZXMgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gcG9zaXRpb25hbCBuYW1lcworICBpbiB0aGUgZm9ybSwgXzEsIF8yLCAuLi4KKwogLSBJc3N1ZSAjNDg5MDogSGFuZGxlIGVtcHR5IHRleHQgc2VhcmNoIHBhdHRlcm4gaW4gVGtpbnRlci5UZXh0LnNlYXJjaC4KIAotLSBJc3N1ZSAjNTE3MDogRml4ZWQgVW5pY29kZSBvdXRwdXQgYnVnIGluIGxvZ2dpbmcgYW5kIGFkZGVkIHRlc3QgY2FzZS4KLSAgVGhpcyBpcyBhIHJlZ3Jlc3Npb24gd2hpY2ggZGlkIG5vdCBvY2N1ciBpbiAyLjUuCistIElzc3VlICM1MTcwOiBGaXhlZCBVbmljb2RlIG91dHB1dCBidWcgaW4gbG9nZ2luZyBhbmQgYWRkZWQgdGVzdCBjYXNlLiAgVGhpcyBpcworICBhIHJlZ3Jlc3Npb24gd2hpY2ggZGlkIG5vdCBvY2N1ciBpbiAyLjUuCiAKLS0gUGFydGlhbCBmaXggdG8gaXNzdWUgIzE3MzE3MDY6IG1lbW9yeSBsZWFrIGluIFRrYXBwX0NhbGwgd2hlbiBjYWxsaW5nCi0gIGZyb20gYSB0aHJlYWQgZGlmZmVyZW50IHRoYW4gdGhlIG9uZSB0aGF0IGNyZWF0ZWQgdGhlIFRjbCBpbnRlcnByZXRlci4KLSAgUGF0Y2ggYnkgUm9iZXJ0IEhhbmNvY2suCistIElzc3VlICM0NTEyIChwYXJ0IDIpOiBQcm9tb3RlIGBgWmlwSW1wb3J0ZXIuX2dldF9maWxlbmFtZSgpYGAgdG8gYmUgYSBwdWJsaWMKKyAgZG9jdW1lbnRlZCBtZXRob2QgYGBaaXBJbXBvcnRlci5nZXRfZmlsZW5hbWUoKWBgLgorCistIElzc3VlICM0MTk1OiBUaGUgYGBydW5weWBgIG1vZHVsZSAoYW5kIHRoZSBgYC1tYGAgc3dpdGNoKSBub3cgc3VwcG9ydCB0aGUKKyAgZXhlY3V0aW9uIG9mIHBhY2thZ2VzIGJ5IGxvb2tpbmcgZm9yIGFuZCBleGVjdXRpbmcgYSBgYF9fbWFpbl9fYGAgc3VibW9kdWxlCisgIHdoZW4gYSBwYWNrYWdlIG5hbWUgaXMgc3VwcGxpZWQuIEluaXRpYWwgcGF0Y2ggYnkgQW5kaSBWYWpkYS4KKworLSBJc3N1ZSAjMTczMTcwNjogQ2FsbCBUY2xfQ29uZGl0aW9uRmluYWxpemUgZm9yIFRjbF9Db25kaXRpb25zIHRoYXQgd2lsbCBub3QgYmUKKyAgdXNlZCBhZ2FpbiAodGhpcyByZXF1aXJlcyBUY2wvVGsgOC4zLjEpLCBhbHNvIGZpeCBhIG1lbW9yeSBsZWFrIGluIFRrYXBwX0NhbGwKKyAgd2hlbiBjYWxsaW5nIGZyb20gYSB0aHJlYWQgZGlmZmVyZW50IHRoYW4gdGhlIG9uZSB0aGF0IGNyZWF0ZWQgdGhlIFRjbAorICBpbnRlcnByZXRlci4gIFBhdGNoIGJ5IFJvYmVydCBIYW5jb2NrLgorCistIElzc3VlICMxNTIwODc3OiBOb3cgZGlzdHV0aWxzLnN5c2NvbmZpZyByZWFkcyAkQVIgZnJvbSB0aGUKKyAgZW52aXJvbm1lbnQvTWFrZWZpbGUuIFBhdGNoIGJ5IERvdWdsYXMgR3JlaW1hbi4KKworLSBJc3N1ZSAjNDI4NTogQ2hhbmdlIHN5cy52ZXJzaW9uX2luZm8gdG8gYmUgYSBuYW1lZCB0dXBsZS4gIFBhdGNoIGJ5IFJvc3MKKyAgTGlnaHQuCisKKy0gSXNzdWUgIzEyNzY3Njg6IFRoZSB2ZXJib3NlIG9wdGlvbiB3YXMgbm90IHVzZWQgaW4gdGhlIGNvZGUgb2YKKyAgZGlzdHV0aWxzLmZpbGVfdXRpbCBhbmQgZGlzdHV0aWxzLmRpcl91dGlsLgogCiAtIElzc3VlICM1MTMyOiBGaXhlZCB0cm91YmxlIGJ1aWxkaW5nIGV4dGVuc2lvbnMgdW5kZXIgU29sYXJpcyB3aXRoCiAgIC0tZW5hYmxlZC1zaGFyZWQgYWN0aXZhdGVkLiBJbml0aWFsIHBhdGNoIGJ5IERhdmUgUGV0ZXJzb24uCiAKIC0gSXNzdWUgIzE1ODE0NzY6IEFsd2F5cyB1c2UgdGhlIFRjbCBnbG9iYWwgbmFtZXNwYWNlIHdoZW4gY2FsbGluZyBpbnRvIFRjbC4KIAotLSBJc3N1ZSAjMjA0Nzogc2h1dGlsLm1vdmUoKSBjb3VsZCBiZWxpZXZlIHRoYXQgaXRzIGRlc3RpbmF0aW9uIHBhdGggd2FzCi0gIGluc2lkZSBpdHMgc291cmNlIHBhdGggaWYgaXQgYmVnYW4gd2l0aCB0aGUgc2FtZSBsZXR0ZXJzIChlLmcuICJzcmMiIHZzLgotICAic3JjLm5ldyIpLgorLSBJc3N1ZSAjMjA0Nzogc2h1dGlsLm1vdmUoKSBjb3VsZCBiZWxpZXZlIHRoYXQgaXRzIGRlc3RpbmF0aW9uIHBhdGggd2FzIGluc2lkZQorICBpdHMgc291cmNlIHBhdGggaWYgaXQgYmVnYW4gd2l0aCB0aGUgc2FtZSBsZXR0ZXJzIChlLmcuICJzcmMiIHZzLiAgInNyYy5uZXciKS4KIAotLSBJc3N1ZSAjNDkyMDogIEZpeGVkIC5uZXh0KCkgdnMgLl9fbmV4dF9fKCkgaXNzdWVzIGluIHRoZSBBQkNzIGZvcgotICBJdGVyYXRvciBhbmQgTXV0YWJsZVNldC4KKy0gSXNzdWUgIzQ5MjA6IEZpeGVkIC5uZXh0KCkgdnMgLl9fbmV4dF9fKCkgaXNzdWVzIGluIHRoZSBBQkNzIGZvciBJdGVyYXRvciBhbmQKKyAgTXV0YWJsZVNldC4KIAotLSBJc3N1ZSAjNTAyMTogIGRvY3Rlc3QudGVzdGZpbGUoKSBkaWQgbm90IGNyZWF0ZSBfX25hbWVfXyBhbmQKKy0gQWRkZWQgdGhlIHR0ayBtb2R1bGUuIFNlZSBpc3N1ZSAjMjk4MzogVHRrIHN1cHBvcnQgZm9yIFRraW50ZXIuCisKKy0gSXNzdWUgIzUwMjE6IGRvY3Rlc3QudGVzdGZpbGUoKSBkaWQgbm90IGNyZWF0ZSBfX25hbWVfXyBhbmQKICAgY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIHJlbGllZCBvbiBfX25hbWVfXyBiZWluZyBkZWZpbmVkLgogCi0tIElzc3VlICMzODgxOiBIZWxwIFRjbCB0byBsb2FkIGV2ZW4gd2hlbiBzdGFydGVkIHRocm91Z2ggdGhlCi0gIHVucmVhZGFibGUgbG9jYWwgc3ltbGluayB0byAiUHJvZ3JhbSBGaWxlcyIgb24gVmlzdGEuCistIEJhY2twb3J0IGltcG9ydGxpYiBmcm9tIFB5dGhvbiAzLjEuIE9ubHkgdGhlIGltcG9ydF9tb2R1bGUoKSBmdW5jdGlvbiBoYXMgYmVlbgorICBiYWNrcG9ydGVkIHRvIGhlbHAgZmFjaWxpdGF0ZSB0cmFuc2l0aW9ucyBmcm9tIDIuNyB0byAzLjEuCiAKLS0gSXNzdWUgIzQ3MTA6IEV4dHJhY3QgZGlyZWN0b3JpZXMgcHJvcGVybHkgaW4gdGhlIHppcGZpbGUgbW9kdWxlOwotICBhbGxvdyBhZGRpbmcgZGlyZWN0b3JpZXMgdG8gYSB6aXBmaWxlLgorLSBJc3N1ZSAjMTg4NTogZGlzdHV0aWxzOiBXaGVuIHJ1bm5pbmcgc2Rpc3Qgd2l0aCAtLWZvcm1hdHM9dGFyLGd6dGFyIHRoZSB0YXIKKyAgZmlsZSB3YXMgb3ZlcnJpZGVuIGJ5IHRoZSBnenRhciBvbmUuCiAKLS0gSXNzdWUgIzUwMDg6IFdoZW4gYSBmaWxlIGlzIG9wZW5lZCBpbiBhcHBlbmQgbW9kZSB3aXRoIHRoZSBuZXcgSU8gbGlicmFyeSwKLSAgZG8gYW4gZXhwbGljaXQgc2VlayB0byB0aGUgZW5kIG9mIGZpbGUgKHNvIHRoYXQgZS5nLiB0ZWxsKCkgcmV0dXJucyB0aGUKLSAgZmlsZSBzaXplIHJhdGhlciB0aGFuIDApLiBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgYmVoYXZpb3VyIG9mIHRoZQotICB0cmFkaXRpb25hbCAyLnggZmlsZSBvYmplY3QuCistIElzc3VlICM0ODYzOiBkaXN0dXRpbHMubXdlcmtzY29tcGlsZXIgaGFzIGJlZW4gcmVtb3ZlZC4KIAotLSBJc3N1ZSAjMzk5NzogemlwZmlsZXMgZ2VuZXJhdGVkIHdpdGggbW9yZSB0aGFuIDY1NTM2IGZpbGVzIGNvdWxkIG5vdCBiZQotICBvcGVuZWQgd2l0aCBvdGhlciBhcHBsaWNhdGlvbnMuCistIEFkZGVkIG5ldyBpdGVydG9vbHMgZnVuY3Rpb25zOiBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgpIGFuZCBjb21wcmVzcygpLgogCi0tIElzc3VlICM0ODE2OiBpdGVydG9vbHMuY29tYmluYXRpb25zKCkgYW5kIGl0ZXJ0b29scy5wcm9kdWN0IHdlcmUgcmFpc2luZwotICBhIFZhbHVlRXJyb3IgZm9yIHZhbHVlcyBvZiAqciogbGFyZ2VyIHRoYW4gdGhlIGlucHV0IGl0ZXJhYmxlLiAgVGhleSBub3cKLSAgY29ycmVjdGx5IHJldHVybiBhbiBlbXB0eSBpdGVyYXRvci4KKy0gSXNzdWUgIzUwMzI6IEFkZGVkIGEgc3RlcCBhcmd1bWVudCB0byBpdGVydG9vbHMuY291bnQoKSBhbmQgYWxsb3dlZAorICBub24taW50ZWdlciBhcmd1bWVudHMuCiAKLS0gRnJhY3Rpb25zLmZyb21fZmxvYXQoKSBubyBsb25nZXIgbG9zZXMgcHJlY2lzaW9uIGZvciBpbnRlZ2VycyB0b28gYmlnIHRvCi0gIGNhc3QgYXMgZmxvYXRzLgorLSBGaXggYW5kIHByb3Blcmx5IGRvY3VtZW50IHRoZSBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlJ3MgbG9nZ2luZyBzdXBwb3J0LCBleHBvc2UKKyAgdGhlIGludGVybmFsIGxldmVscyBhbmQgcHJvdmlkZSBwcm9wZXIgdXNhZ2UgZXhhbXBsZXMuCiAKLS0gSXNzdWUgIzQ3OTA6IFRoZSBuc21hbGxlc3QoKSBhbmQgbmxhcmdlc3QoKSBmdW5jdGlvbnMgaW4gdGhlIGhlYXBxIG1vZHVsZQotICBkaWQgdW5uZWNlc3Nhcnkgd29yayBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgbm8ga2V5IGZ1bmN0aW9uIHdhcyBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzM3Njc6IENvbnZlcnQgVGsgb2JqZWN0IHRvIHN0cmluZyBpbiB0a0NvbG9yQ2hvb3Nlci4KLQotLSBJc3N1ZSAjMzI0ODogQWxsb3cgcGxhY2luZyBTY3JvbGxlZFRleHQgaW4gYSBQYW5lZFdpbmRvdy4KLQotLSBJc3N1ZSAjMzk1NDogRml4IGEgcG90ZW50aWFsIFN5c3RlbUVycm9yIGluIF9ob3RzaG90LmxvZ3JlYWRlciBlcnJvcgotICBoYW5kbGluZy4KLQotLSBJc3N1ZSAjNDU3NDogZml4IGEgY3Jhc2ggaW4gaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciB3aGVuIGEgY2FycmlhZ2UKLSAgcmV0dXJuIGVuY29kZXMgdG8gbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBzb3VyY2UgZW5jb2RpbmcgKGUuZy4gVVRGLTE2KQotICBhbmQgZ2V0cyBzcGxpdCBvbiBhIGNodW5rIGJvdW5kYXJ5LgotCi0tIElzc3VlICM0MjIzOiBpbnNwZWN0LmdldHNvdXJjZSgpIHdpbGwgbm93IGNvcnJlY3RseSBkaXNwbGF5IHNvdXJjZSBjb2RlCi0gIGZvciBwYWNrYWdlcyBsb2FkZWQgdmlhIHppcGltcG9ydCAob3IgYW55IG90aGVyIGNvbmZvcm1hbnQgUEVQIDMwMgotICBsb2FkZXIpLiBPcmlnaW5hbCBwYXRjaCBieSBBbGV4YW5kZXIgQmVsb3BvbHNreS4KLQotLSBJc3N1ZSAjNDIwMTogcGRiIGNhbiBub3cgYWNjZXNzIGFuZCBkaXNwbGF5IHNvdXJjZSBjb2RlIGxvYWRlZCB2aWEKLSAgemlwaW1wb3J0IChvciBhbnkgb3RoZXIgY29uZm9ybWFudCBQRVAgMzAyIGxvYWRlcikuIE9yaWdpbmFsIHBhdGNoIGJ5Ci0gIEFsZXhhbmRlciBCZWxvcG9sc2t5LgotCi0tIElzc3VlICM0MTk3OiBkb2N0ZXN0cyBpbiBtb2R1bGVzIGxvYWRlZCB2aWEgemlwaW1wb3J0IChvciBhbnkgb3RoZXIgUEVQCi0gIDMwMiBjb25mb3JtYW50IGxvYWRlcikgd2lsbCBub3cgd29yayBjb3JyZWN0bHkgaW4gbW9zdCBjYXNlcyAodGhleQotICBhcmUgc3RpbGwgc3ViamVjdCB0byB0aGUgY29uc3RyYWludHMgdGhhdCBleGlzdCBmb3IgYWxsIGNvZGUgcnVubmluZwotICBmcm9tIGluc2lkZSBhIG1vZHVsZSBsb2FkZWQgdmlhIGEgUEVQIDMwMiBsb2FkZXIgYW5kIGF0dGVtcHRpbmcgdG8KLSAgcGVyZm9ybSBJTyBvcGVyYXRpb25zIGJhc2VkIG9uIF9fZmlsZV9fKS4gT3JpZ2luYWwgcGF0Y2ggYnkKLSAgQWxleGFuZGVyIEJlbG9wb2xza3kuCi0KLS0gSXNzdWVzICM0MDgyIGFuZCAjNDUxMjogQWRkIHJ1bnB5IHN1cHBvcnQgdG8gemlwaW1wb3J0IGluIGEgbWFubmVyIHRoYXQKLSAgYWxsb3dzIGJhY2twb3J0aW5nIHRvIG1haW50ZW5hbmNlIGJyYW5jaGVzLiBPcmlnaW5hbCBwYXRjaCBieQotICBBbGV4YW5kZXIgQmVsb3BvbHNreS4KLQotLSBJc3N1ZSAjNDYxNjogVGFyRmlsZS51dGltZSgpOiBSZXN0b3JlIGRpcmVjdG9yeSB0aW1lcyBvbiBXaW5kb3dzLgotCi0tIElzc3VlICM0NDgzOiBfZGJtIG1vZHVsZSBub3cgYnVpbGRzIG9uIHN5c3RlbXMgd2l0aCBnZGJtICYgZ2RibV9jb21wYXQKLSAgbGlicy4KLQotLSBGaWxlSU8ncyBtb2RlIGF0dHJpYnV0ZSBub3cgYWx3YXlzIGluY2x1ZGVzIGBgImIiYGAuCi0KLS0gSXNzdWUgIzQ4NjE6IGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpOiBSb2J1c3RpZnkuIEZpeCBsaWJyYXJ5IGRldGVjdGlvbiBvbgotICBiaWFyY2ggc3lzdGVtcy4gVHJ5IHRvIHJlbHkgb24gbGRjb25maWcgb25seSwgd2l0aG91dCB1c2luZyBvYmpkdW1wIGFuZCBnY2MuCi0KLS0gSXNzdWUgIzI3MDM6IFNpbXBsZVhNTFJQQ0Rpc3BhdGNoZXIuX19pbml0X186IFByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yCi0gIG5ldyBhcmd1bWVudHMgaW50cm9kdWNlZCBpbiAyLjUuCi0KLS0gSXNzdWUgIzE4ODU6IGRpc3R1dGlscy4gV2hlbiBydW5uaW5nIHNkaXN0IHdpdGggLS1mb3JtYXRzPXRhcixnenRhcgotICB0aGUgdGFyIGZpbGUgd2FzIG92ZXJyaWRlbiBieSB0aGUgZ3p0YXIgb25lLgotCi0tIFJlZ2lzdGVyZWQgRGVjaW1hbCBhcyBhIG51bWJlcnMuTnVtYmVyIHNvIHRoYXQgaXNpbnN0YW5jZShkLCBOdW1iZXIpIHdvcmtzLgotCi0tIElzc3VlICMxNjcyMzMyOiBmaXggdW5waWNrbGluZyBvZiBzdWJub3JtYWwgZmxvYXRzLCB3aGljaCB3YXMKKy0gSXNzdWUgIzE2NzIzMzI6IEZpeCB1bnBpY2tsaW5nIG9mIHN1Ym5vcm1hbCBmbG9hdHMsIHdoaWNoIHdhcwogICBwcm9kdWNpbmcgYSBWYWx1ZUVycm9yIG9uIHNvbWUgcGxhdGZvcm1zLgogCistIElzc3VlICMzODgxOiBIZWxwIFRjbCB0byBsb2FkIGV2ZW4gd2hlbiBzdGFydGVkIHRocm91Z2ggdGhlIHVucmVhZGFibGUgbG9jYWwKKyAgc3ltbGluayB0byAiUHJvZ3JhbSBGaWxlcyIgb24gVmlzdGEuCisKKy0gSXNzdWUgIzQ3MTA6IEV4dHJhY3QgZGlyZWN0b3JpZXMgcHJvcGVybHkgaW4gdGhlIHppcGZpbGUgbW9kdWxlOyBhbGxvdyBhZGRpbmcKKyAgZGlyZWN0b3JpZXMgdG8gYSB6aXBmaWxlLgorCistIElzc3VlICMzODA3OiBfbXVsdGlwcm9jZXNzaW5nIGJ1aWxkIGZhaWxzIHdoZW4gY29uZmlndXJlIGlzIHBhc3NlZAorICAtLXdpdGhvdXQtdGhyZWFkcyBhcmd1bWVudC4gV2hlbiB0aGlzIG9jY3VycywgX211bHRpcHJvY2Vzc2luZyB3aWxsIGJlCisgIGRpc2FibGVkLCBhbmQgbm90IGNvbXBpbGVkLgorCistIElzc3VlICM1MDA4OiBXaGVuIGEgZmlsZSBpcyBvcGVuZWQgaW4gYXBwZW5kIG1vZGUgd2l0aCB0aGUgbmV3IElPIGxpYnJhcnksIGRvCisgIGFuIGV4cGxpY2l0IHNlZWsgdG8gdGhlIGVuZCBvZiBmaWxlIChzbyB0aGF0IGUuZy4gdGVsbCgpIHJldHVybnMgdGhlIGZpbGUgc2l6ZQorICByYXRoZXIgdGhhbiAwKS4gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGJlaGF2aW91ciBvZiB0aGUgdHJhZGl0aW9uYWwgMi54CisgIGZpbGUgb2JqZWN0LgorCistIElzc3VlICM1MDEzOiBGaXhlZCBhIGJ1ZyBpbiBGaWxlSGFuZGxlciB3aGljaCBvY2N1cnJlZCB3aGVuIHRoZSBkZWxheQorICBwYXJhbWV0ZXIgd2FzIHNldC4KKworLSBJc3N1ZSAjNDk5ODogVGhlIG1lbW9yeSBzYXZpbmcgZWZmZWN0IG9mIF9fc2xvdHNfXyBoYWQgYmVlbiBsb3N0IG9uIEZyYWN0aW9ucworICB3aGljaCBpbmhlcml0ZWQgZnJvbSBudW1iZXJzLnB5IHdoaWNoIGRpZCBub3QgaGF2ZSBfX3Nsb3RzX18gZGVmaW5lZC4gIFRoZQorICBudW1iZXJzIGhpZXJhcmNoeSBub3cgaGFzIGl0cyBvd24gX19zbG90c19fIGRlY2xhcmF0aW9ucy4KKworLSBJc3N1ZSAjMzMyMTogX211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uKCkgZG9lc24ndCBjaGVjayBoYW5kbGU7IGFkZGVkIGNoZWNrcworICBmb3IgKm5peCBtYWNoaW5lcyBmb3IgbmVnYXRpdmUgaGFuZGxlcyBhbmQgbGFyZ2UgaW50IGhhbmRsZXMuICBXaXRob3V0IHRoaXMKKyAgY2hlY2sgaXQgaXMgcG9zc2libGUgdG8gc2VnZmF1bHQgdGhlIGludGVycHJldGVyLgorCistIElzc3VlICM0NDQ5OiBBc3NlcnRpb25FcnJvciBpbiBtcF9iZW5jaG1hcmtzLnB5LCBjYXVzZWQgYnkgYW4gdW5kZXJseWluZyBpc3N1ZQorICBpbiBzaGFyZWRjdHlwZXMucHkuCisKKy0gSXNzdWUgIzEyMjUxMDc6IGluc3BlY3QuaXNjbGFzcygpIHJldHVybmVkIFRydWUgZm9yIGluc3RhbmNlcyB3aXRoIGEgY3VzdG9tCisgIF9fZ2V0YXR0cl9fLgorCistIElzc3VlICMzOTk3OiBaaXBmaWxlcyBnZW5lcmF0ZWQgd2l0aCBtb3JlIHRoYW4gNjU1MzYgZmlsZXMgY291bGQgbm90IGJlIG9wZW5lZAorICB3aXRoIG90aGVyIGFwcGxpY2F0aW9ucy4KKworLSBJc3N1ZSAjMTE2MjE1NDogYGBpbnNwZWN0LmdldG1lbWJlcnMoKWBgIG5vdyBza2lwcyBhdHRyaWJ1dGVzIHRoYXQgcmFpc2UKKyAgQXR0cmlidXRlRXJyb3IsIGUuZy4gYSBfX3Nsb3RzX18gYXR0cmlidXRlIHdoaWNoIGhhcyBub3QgYmVlbiBzZXQuCisKKy0gSXNzdWUgIzE2OTYxOTk6IEFkZCBjb2xsZWN0aW9ucy5Db3VudGVyKCkgZm9yIHJhcGlkIGFuZCBjb252ZW5pZW50IGNvdW50aW5nLgorCistIElzc3VlICMzODYwOiBHemlwRmlsZSBhbmQgQloyRmlsZSBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLgorCistIElzc3VlICM0MjcyOiBBZGQgYW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gdGhlIEd6aXBGaWxlIGNvbnN0cnVjdG9yIHRvIG92ZXJyaWRlCisgIHRoZSB0aW1lc3RhbXAgaW4gdGhlIGd6aXAgc3RyZWFtLiAgVGhlIGRlZmF1bHQgdmFsdWUgcmVtYWlucyB0aGUgY3VycmVudCB0aW1lLgorICBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQgYnkgZS5nLiBndW56aXAgd2hlbiBkZWNvbXByZXNzaW5nLiAgUGF0Y2ggYnkKKyAgSmFjcXVlcyBGcmVjaGV0LgorCiAtIFJlc3RvcmUgUHl0aG9uIDIuMyBjb21wYXRpYmlsaXR5IGZvciBkZWNpbWFsLnB5LgogCiAtIElzc3VlICMxNzAyNTUxOiBkaXN0dXRpbHMgc2Rpc3Qgd2FzIG5vdCBleGNsdWRpbmcgVkNTIGRpcmVjdG9yaWVzIHVuZGVyCiAgIFdpbmRvd3MuIEluaXRhbCBzb2x1dGlvbiBieSBHdXkgRGFsYmVydG8uCiAKLS0gSXNzdWUgIzQ4MTI6IGFkZCBtaXNzaW5nIHVuZGVyc2NvcmUgcHJlZml4IHRvIHNvbWUgaW50ZXJuYWwtdXNlLW9ubHkKLSAgY29uc3RhbnRzIGluIHRoZSBkZWNpbWFsIG1vZHVsZS4gIChEZWNfMCBiZWNvbWVzIF9EZWNfMCwgZXRjLikKKy0gVGhlIF90a2ludGVyIG1vZHVsZSBmdW5jdGlvbnMgImNyZWF0ZWZpbGVoYW5kbGVyIiwgImRlbGV0ZWZpbGVoYW5kbGVyIiwKKyAgImNyZWF0ZXRpbWVyaGFuZGxlciIsICJtYWlubG9vcCIsICJkb29uZWV2ZW50IiBhbmQgInF1aXQiIGhhdmUgYmVlbiBkZXByZWNhdGVkCisgIGZvciByZW1vdmFsIGluIDMueAorCistIElzc3VlICM0Nzk2OiBBZGRlZCBEZWNpbWFsLmZyb21fZmxvYXQoKSBhbmQKKyAgQ29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KCkgdG8gdGhlIGRlY2ltYWwgbW9kdWxlLgorCistIElzc3VlICM0ODEyOiBBZGQgbWlzc2luZyB1bmRlcnNjb3JlIHByZWZpeCB0byBzb21lIGludGVybmFsLXVzZS1vbmx5IGNvbnN0YW50cworICBpbiB0aGUgZGVjaW1hbCBtb2R1bGUuICAoRGVjXzAgYmVjb21lcyBfRGVjXzAsIGV0Yy4pCiAKIC0gSXNzdWUgIzQ3OTU6IGluc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbigpIHJldHVybnMgRmFsc2UgaW5zdGVhZCBvZiBOb25lIHdoZW4KICAgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhIGdlbmVyYXRvci4KIAotLSBJc3N1ZSAjNDcwMjogVGhyb3dpbmcgYSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yIGluc3RlYWQgb2YgSU9FcnJvciBpbiBjYXNlCi0gIG5vIE1TVkMgY29tcGlsZXIgaXMgZm91bmQgdW5kZXIgV2luZG93cy4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbGlwIEplbnZleS4KKy0gSXNzdWUgIzQ3MDI6IFRocm93aW5nIGEgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciBpbnN0ZWFkIG9mIElPRXJyb3IgaW4gY2FzZSBubworICBNU1ZDIGNvbXBpbGVyIGlzIGZvdW5kIHVuZGVyIFdpbmRvd3MuICBPcmlnaW5hbCBwYXRjaCBieSBQaGlsaXAgSmVudmV5LgogCi0gIC0gSXNzdWUgIzQ3Mzk6IEFkZCBweWRvYyBoZWxwIHRvcGljcyBmb3Igc3ltYm9scywgc28gdGhhdCBlLmcuIGhlbHAoJ0AnKQotICB3b3JrcyBhcyBleHBlY3RlZCBpbiB0aGUgaW50ZXJhY3RpdmUgZW52aXJvbm1lbnQuCistIElzc3VlICM0NjQ2OiBkaXN0dXRpbHMgd2FzIGNob2tpbmcgb24gZW1wdHkgb3B0aW9ucyBhcmcgaW4gdGhlIHNldHVwIGZ1bmN0aW9uLgorICBPcmlnaW5hbCBwYXRjaCBieSBUaG9tYXMgSGVsbGVyLgorCistIEZyYWN0aW9ucy5mcm9tX2Zsb2F0KCkgbm8gbG9uZ2VyIGxvc2VzIHByZWNpc2lvbiBmb3IgaW50ZWdlcnMgdG9vIGJpZyB0byBjYXN0CisgIGFzIGZsb2F0cy4KKworLSBJc3N1ZSAjNDc5MDogVGhlIG5zbWFsbGVzdCgpIGFuZCBubGFyZ2VzdCgpIGZ1bmN0aW9ucyBpbiB0aGUgaGVhcHEgbW9kdWxlIGRpZAorICB1bm5lY2Vzc2FyeSB3b3JrIGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSBubyBrZXkgZnVuY3Rpb24gd2FzIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMzc2NzogQ29udmVydCBUayBvYmplY3QgdG8gc3RyaW5nIGluIHRrQ29sb3JDaG9vc2VyLgorCistIElzc3VlICMzMjQ4OiBBbGxvdyBwbGFjaW5nIFNjcm9sbGVkVGV4dCBpbiBhIFBhbmVkV2luZG93LgorCistIElzc3VlICM0NDQ0OiBBbGxvdyBhc3NlcnRSYWlzZXMoKSB0byBiZSB1c2VkIGFzIGEgY29udGV4dCBoYW5kbGVyLCBzbyB0aGF0IHRoZQorICBjb2RlIHVuZGVyIHRlc3QgY2FuIGJlIHdyaXR0ZW4gaW5saW5lIGlmIG1vcmUgcHJhY3RpY2FsLgorCistIElzc3VlICM0NzM5OiBBZGQgcHlkb2MgaGVscCB0b3BpY3MgZm9yIHN5bWJvbHMsIHNvIHRoYXQgZS5nLiBoZWxwKCdAJykgd29ya3MKKyAgYXMgZXhwZWN0ZWQgaW4gdGhlIGludGVyYWN0aXZlIGVudmlyb25tZW50LgogCiAtIElzc3VlICM0NzU2OiB6aXBmaWxlLmlzX3ppcGZpbGUoKSBub3cgc3VwcG9ydHMgZmlsZS1saWtlIG9iamVjdHMuIFBhdGNoIGJ5CiAgIEdhYnJpZWwgR2VuZWxsaW5hLgogCi0tIElzc3VlICM0NjQ2OiBkaXN0dXRpbHMgd2FzIGNob2tpbmcgb24gZW1wdHkgb3B0aW9ucyBhcmcgaW4gdGhlIHNldHVwCi0gIGZ1bmN0aW9uLiBPcmlnaW5hbCBwYXRjaCBieSBUaG9tYXMgSGVsbGVyLgotCiAtIElzc3VlICM0NDAwOiAucHlwaXJjIGRlZmF1bHQgZ2VuZXJhdGVkIGZpbGUgd2FzIGJyb2tlbiBpbiBkaXN0dXRpbHMuCiAKIC0gSXNzdWUgIzQ3MzY6IGlvLkJ1ZmZlcmVkUldQYWlyJ3MgY2xvc2VkIHByb3BlcnR5IG5vdyBmdW5jdGlvbnMgcHJvcGVybHkuCiAKLS0gSXNzdWUgIzM5NTQ6IEZpeCBhIHBvdGVudGlhbCBTeXN0ZW1FcnJvciBpbiBfaG90c2hvdC5sb2dyZWFkZXIgZXJyb3IKLSAgaGFuZGxpbmcuCistIElzc3VlICMzOTU0OiBGaXggYSBwb3RlbnRpYWwgU3lzdGVtRXJyb3IgaW4gX2hvdHNob3QubG9ncmVhZGVyIGVycm9yIGhhbmRsaW5nLgorCistIElzc3VlICM0NTc0OiBGaXggYSBjcmFzaCBpbiBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyIHdoZW4gYSBjYXJyaWFnZQorICByZXR1cm4gZW5jb2RlcyB0byBtb3JlIHRoYW4gb25lIGJ5dGUgaW4gdGhlIHNvdXJjZSBlbmNvZGluZyAoZS5nLiBVVEYtMTYpIGFuZAorICBnZXRzIHNwbGl0IG9uIGEgY2h1bmsgYm91bmRhcnkuCisKKy0gSXNzdWUgIzQyMjM6IGluc3BlY3QuZ2V0c291cmNlKCkgd2lsbCBub3cgY29ycmVjdGx5IGRpc3BsYXkgc291cmNlIGNvZGUgZm9yCisgIHBhY2thZ2VzIGxvYWRlZCB2aWEgemlwaW1wb3J0IChvciBhbnkgb3RoZXIgY29uZm9ybWFudCBQRVAgMzAyCisgIGxvYWRlcikuIE9yaWdpbmFsIHBhdGNoIGJ5IEFsZXhhbmRlciBCZWxvcG9sc2t5LgorCistIElzc3VlICM0MjAxOiBwZGIgY2FuIG5vdyBhY2Nlc3MgYW5kIGRpc3BsYXkgc291cmNlIGNvZGUgbG9hZGVkIHZpYSB6aXBpbXBvcnQKKyAgKG9yIGFueSBvdGhlciBjb25mb3JtYW50IFBFUCAzMDIgbG9hZGVyKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFsZXhhbmRlcgorICBCZWxvcG9sc2t5LgorCistIElzc3VlICM0MTk3OiBEb2N0ZXN0cyBpbiBtb2R1bGVzIGxvYWRlZCB2aWEgemlwaW1wb3J0IChvciBhbnkgb3RoZXIgUEVQIDMwMgorICBjb25mb3JtYW50IGxvYWRlcikgd2lsbCBub3cgd29yayBjb3JyZWN0bHkgaW4gbW9zdCBjYXNlcyAodGhleSBhcmUgc3RpbGwKKyAgc3ViamVjdCB0byB0aGUgY29uc3RyYWludHMgdGhhdCBleGlzdCBmb3IgYWxsIGNvZGUgcnVubmluZyBmcm9tIGluc2lkZSBhCisgIG1vZHVsZSBsb2FkZWQgdmlhIGEgUEVQIDMwMiBsb2FkZXIgYW5kIGF0dGVtcHRpbmcgdG8gcGVyZm9ybSBJTyBvcGVyYXRpb25zCisgIGJhc2VkIG9uIF9fZmlsZV9fKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFsZXhhbmRlciBCZWxvcG9sc2t5LgorCistIElzc3VlcyAjNDA4MiBhbmQgIzQ1MTI6IEFkZCBydW5weSBzdXBwb3J0IHRvIHppcGltcG9ydCBpbiBhIG1hbm5lciB0aGF0IGFsbG93cworICBiYWNrcG9ydGluZyB0byBtYWludGVuYW5jZSBicmFuY2hlcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFsZXhhbmRlciBCZWxvcG9sc2t5LgogCiAtIElzc3VlICM0MTYzOiBVc2UgdW5pY29kZS1mcmllbmRseSB3b3JkIHNwbGl0dGluZyBpbiB0aGUgdGV4dHdyYXAgZnVuY3Rpb25zCiAgIHdoZW4gZ2l2ZW4gYW4gdW5pY29kZSBzdHJpbmcuCiAKIC0gSXNzdWUgIzQ2MTY6IFRhckZpbGUudXRpbWUoKTogUmVzdG9yZSBkaXJlY3RvcnkgdGltZXMgb24gV2luZG93cy4KIAotLSBJc3N1ZSAjNDA4NDogRml4IG1heCwgbWluLCBtYXhfbWFnIGFuZCBtaW5fbWFnIERlY2ltYWwgbWV0aG9kcyB0bwotICBnaXZlIGNvcnJlY3QgcmVzdWx0cyBpbiB0aGUgY2FzZSB3aGVyZSBvbmUgYXJndW1lbnQgaXMgYSBxdWlldCBOYU4KLSAgYW5kIHRoZSBvdGhlciBpcyBhIGZpbml0ZSBudW1iZXIgdGhhdCByZXF1aXJlcyByb3VuZGluZy4KKy0gSXNzdWUgIzQwODQ6IEZpeCBtYXgsIG1pbiwgbWF4X21hZyBhbmQgbWluX21hZyBEZWNpbWFsIG1ldGhvZHMgdG8gZ2l2ZSBjb3JyZWN0CisgIHJlc3VsdHMgaW4gdGhlIGNhc2Ugd2hlcmUgb25lIGFyZ3VtZW50IGlzIGEgcXVpZXQgTmFOIGFuZCB0aGUgb3RoZXIgaXMgYQorICBmaW5pdGUgbnVtYmVyIHRoYXQgcmVxdWlyZXMgcm91bmRpbmcuCiAKLS0gSXNzdWUgIzEwMzAyNTA6IERpc3R1dGlscyBjcmVhdGVkIGRpcmVjdG9yaWVzIGV2ZW4gd2hlbiBydW4gd2l0aCB0aGUKLSAgLS1kcnktcnVuIG9wdGlvbi4KKy0gSXNzdWUgIzEwMzAyNTA6IERpc3R1dGlscyBjcmVhdGVkIGRpcmVjdG9yaWVzIGV2ZW4gd2hlbiBydW4gd2l0aCB0aGUgLS1kcnktcnVuCisgIG9wdGlvbi4KIAotLSBJc3N1ZSAjNDQ4MzogX2RibSBtb2R1bGUgbm93IGJ1aWxkcyBvbiBzeXN0ZW1zIHdpdGggZ2RibSAmIGdkYm1fY29tcGF0Ci0gIGxpYnMuCistIElzc3VlICM0NDgzOiBfZGJtIG1vZHVsZSBub3cgYnVpbGRzIG9uIHN5c3RlbXMgd2l0aCBnZGJtICYgZ2RibV9jb21wYXQgbGlicy4KIAotLSBJc3N1ZSAjNDUyOTogZml4IHRoZSBwYXJzZXIgbW9kdWxlJ3MgdmFsaWRhdGlvbiBvZiB0cnktZXhjZXB0LWZpbmFsbHkKKy0gSXNzdWUgIzQ1Mjk6IEZpeCB0aGUgcGFyc2VyIG1vZHVsZSdzIHZhbGlkYXRpb24gb2YgdHJ5LWV4Y2VwdC1maW5hbGx5CiAgIHN0YXRlbWVudHMuCiAKIC0gSXNzdWUgIzQ0NTg6IGdldG9wdC5nbnVfZ2V0b3B0KCkgbm93IHJlY29nbml6ZXMgYSBzaW5nbGUgIi0iIGFzIGFuIGFyZ3VtZW50LAogICBub3QgYSBtYWxmb3JtZWQgb3B0aW9uLgogCi0tIEFkZGVkIHRoZSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgpIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGdldCBvdXRwdXQKLSAgZnJvbSBhIHN1YnByb2Nlc3Mgb24gc3VjY2VzcyBvciByYWlzZSBhbiBleGNlcHRpb24gb24gZXJyb3IuCistIEFkZGVkIHRoZSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgpIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGdldCBvdXRwdXQgZnJvbSBhCisgIHN1YnByb2Nlc3Mgb24gc3VjY2VzcyBvciByYWlzZSBhbiBleGNlcHRpb24gb24gZXJyb3IuCiAKIC0gSXNzdWUgIzEwNTUyMzQ6IGNnaS5wYXJzZV9oZWFkZXIoKTogRml4ZWQgcGFyc2luZyBvZiBoZWFkZXIgcGFyYW1ldGVycyB0bwogICBzdXBwb3J0IHVudXN1YWwgZmlsZW5hbWVzIChzdWNoIGFzIHRob3NlIGNvbnRhaW5pbmcgc2VtaS1jb2xvbnMpIGluCiAgIENvbnRlbnQtRGlzcG9zaXRpb24gaGVhZGVycy4KIAotLSBJc3N1ZSAjNDczMDogRml4ZWQgdGhlIGNQaWNrbGUgbW9kdWxlIHRvIGhhbmRsZSBjb3JyZWN0bHkgYXN0cmFsIGNoYXJhY3RlcnMKLSAgd2hlbiBwcm90b2NvbCAwIGlzIHVzZWQuCi0KLS0gSXNzdWUgIzE2Mjc4OTUyOiBwbGF0LW1hYy92aWRlb3JlYWRlci5weSBub3cgY29ycmVjdGx5IGltcG9ydHMgTWVkaWFEZXNjcgotCi0tIElzc3VlICMxNzM3ODMyIDogcGxhdC1tYWMvRWFzeURpYWxvZy5weSBubyBsb25nZXIgdXNlcyB0aGUgYnJva2VuIGFlcGFjawotICBtb2R1bGUuCi0KLS0gSXNzdWUgIzExNDk4MDQ6IG1hY29zdG9vbHMubWtkaXJzIG5vdyBldmVuIHdvcmtzIHdoZW4gYW5vdGhlciBwcm9jZXNzCi0gIGNyZWF0ZXMgb25lIG9mIHRoZSBuZWVkZWQgc3ViZGlyZWN0b3JpZXMuCi0KLVRvb2xzL0RlbW9zCi0tLS0tLS0tLS0tLQotCi0tIElzc3VlICM0Njc3OiBhZGQgdHdvIGxpc3QgY29tcHJlaGVuc2lvbiB0ZXN0cyB0byBweWJlbmNoLgotCi1FeHRlbnNpb24gTW9kdWxlcwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjNDMwMTogUGF0Y2ggdGhlIGxvZ2dpbmcgbW9kdWxlIHRvIGFkZCBwcm9jZXNzTmFtZSBzdXBwb3J0LCByZW1vdmUKLSAgX2NoZWNrX2xvZ2dlcl9jbGFzcyBmcm9tIG11bHRpcHJvY2Vzc2luZy4KLQotLSBJc3N1ZSAjMTA0MDAyNjogRml4IG9zLnRpbWVzIHJlc3VsdCBvbiBzeXN0ZW1zIHdoZXJlIEhaIGlzIGluY29ycmVjdC4KLQotLSBJc3N1ZSAjNDM5NzogRml4IG9jY2FzaW9uYWwgdGVzdF9zb2NrZXQgZmFpbHVyZSBvbiBPUyBYLgotCi0tIElzc3VlICM0Mjc5OiBGaXggYnVpbGQgb2YgcGFyc2VybW9kdWxlIHVuZGVyIEN5Z3dpbi4KLQotLSBJc3N1ZSAjNDA1MTogUHJldmVudCBjb25mbGljdCBvZiBVTklDT0RFIG1hY3JvcyBpbiBjUGlja2xlLgotCi0tIElzc3VlICM0MjI4OiBQYWNrIG5lZ2F0aXZlIHZhbHVlcyB0aGUgc2FtZSB3YXkgYXMgMi40IGluIHN0cnVjdCdzIEwgZm9ybWF0LgotCi0tIElzc3VlICMxMDQwMDI2OiBGaXggb3MudGltZXMgcmVzdWx0IG9uIHN5c3RlbXMgd2hlcmUgSFogaXMgaW5jb3JyZWN0LgotCi0tIElzc3VlcyAjMzE2NywgIzM2ODI6IEZpeCB0ZXN0X21hdGggZmFpbHVyZXMgZm9yIGxvZywgbG9nMTAgb24gU29sYXJpcywKLSAgT3BlbkJTRC4KLQotQnVpbGQKLS0tLS0tCi0KLS0gTGluayB0aGUgc2hhcmVkIHB5dGhvbiBsaWJyYXJ5IHdpdGggJChNT0RMSUJTKS4KLQotLSBJc3N1ZSAjNTEzNDogU2lsZW5jZSBjb21waWxlciB3YXJuaW5ncyB3aGVuIGNvbXBpbGluZyBzcWxpdGUgd2l0aCBWQysrLgotCi0tIElzc3VlICM0NDk0OiBGaXggYnVpbGQgd2l0aCBQeV9OT19FTkFCTEVfU0hBUkVEIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzQ4OTU6IFVzZSBfc3RyZHVwIG9uIFdpbmRvd3MgQ0UuCi0KLS0gSXNzdWUgIzQ0NzI6ICJjb25maWd1cmUgLS1lbmFibGUtc2hhcmVkIiBub3cgd29ya3Mgb24gT1NYCi0KLS0gSXNzdWVzICM0NzI4IGFuZCAjNDA2MDogV09SRFNfQklHRURJQU4gaXMgbm93IGNvcnJlY3QgaW4gVW5pdmVyc2FsIGJ1aWxkcy4KLQotQy1BUEkKLS0tLS0tCi0KLS0gSXNzdWUgIzQ3MjA6IFRoZSBmb3JtYXQgZm9yIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyBjYW4gYmVnaW4gd2l0aCAnfCcuCi0KLS0gSXNzdWUgIzM2MzI6IGZyb20gdGhlIGdkYiBkZWJ1Z2dlciwgdGhlICdweW8nIG1hY3JvIGNhbiBub3cgYmUgY2FsbGVkIHdoZW4KLSAgdGhlIEdJTCBpcyByZWxlYXNlZCwgb3Igb3duZWQgYnkgYW5vdGhlciB0aHJlYWQuCi0KLVRlc3RzCi0tLS0tLQotCi0tIElzc3VlICM1NjM1OiBGaXggcnVubmluZyB0ZXN0X3N5cyB3aXRoIHRyYWNpbmcgZW5hYmxlZC4KLQotLSByZWdydGVzdCBubyBsb25nZXIgdHJlYXRzIEltcG9ydEVycm9yIGFzIGVxdWl2YWxlbnQgdG8gU2tpcFRlc3QuICBJbXBvcnRzCi0gIHRoYXQgc2hvdWxkIGNhdXNlIGEgdGVzdCB0byBiZSBza2lwcGVkIGFyZSBub3cgZG9uZSB1c2luZyBpbXBvcnRfbW9kdWxlCi0gIGZyb20gdGVzdCBzdXBwb3J0LCB3aGljaCBkb2VzIHRoZSBjb252ZXJzaW9uLgotCi0tIElzc3VlICM1MDgzOiBOZXcgJ2d1aScgcmVzb3VyY2UgZm9yIHJlZ3J0ZXN0LgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNi4xCi09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAwNC1EZWMtMjAwOCoKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzM5OTY6IE9uIFdpbmRvd3MsIHRoZSBQeU9TX0NoZWNrU3RhY2sgZnVuY3Rpb24gd291bGQgY2F1c2UgdGhlCi0gIGludGVycHJldGVyIHRvIGFib3J0ICgiRmF0YWwgUHl0aG9uIGVycm9yOiBDb3VsZCBub3QgcmVzZXQgdGhlIHN0YWNrISIpCi0gIGluc3RlYWQgb2YgdGhyb3dpbmcgYSBNZW1vcnlFcnJvci4KLQotLSBJc3N1ZSAjNDM2NzogUHl0aG9uIHdvdWxkIHNlZ2ZhdWx0IGR1cmluZyBjb21waWxpbmcgd2hlbiB0aGUgdW5pY29kZWRhdGEKLSAgbW9kdWxlIGNvdWxkbid0IGJlIGltcG9ydGVkIGFuZCBcTiBlc2NhcGVzIHdlcmUgcHJlc2VudC4KLQotLSBJc3N1ZSAjNDM0ODogU29tZSBieXRlYXJyYXkgbWV0aG9kcyByZXR1cm5lZCB0aGF0IGRpZG4ndCBjYXVzZSBhbnkgY2hhbmdlIHRvCi0gIHRoZSBieXRlYXJyYXksIHJldHVybmVkIHRoZSBzYW1lIGJ5dGVhcnJheSBpbnN0ZWFkIG9mIGEgY29weS4KLQotLSBJc3N1ZSAjNDMxNzogRml4ZWQgYSBjcmFzaCBpbiB0aGUgaW1hZ2VvcC5yZ2IycmdiOCgpIGZ1bmN0aW9uLgotCi0tIElzc3VlICM0MjMwOiBJZiBgYF9fZ2V0YXR0cl9fYGAgaXMgYSBkZXNjcmlwdG9yLCBpdCBub3cgZnVuY3Rpb25zIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjNDA0ODogVGhlIHBhcnNlciBtb2R1bGUgbm93IGNvcnJlY3RseSB2YWxpZGF0ZXMgcmVsYXRpdmUgaW1wb3J0cy4KLQotLSBJc3N1ZSAjNDIyNTogYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHNgYCBkaWRuJ3Qgd29yayBpbiBhbgotICBleGVjIHN0YXRlbWVudC4KLQotLSBJc3N1ZSAjNDE3NjogRml4ZWQgYSBjcmFzaCB3aGVuIHBpY2tsaW5nIGFuIG9iamVjdCB3aGljaCBgYF9fcmVkdWNlX19gYAotICBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGl0ZXJhdG9ycyBmb3IgdGhlIDR0aCBhbmQgNXRoIGl0ZW1zLgotCi0tIElzc3VlICM0MjA5OiBFbmFibGluZyB1bmljb2RlX2xpdGVyYWxzIGFuZCB0aGUgcHJpbnRfZnVuY3Rpb24gaW4gdGhlIHNhbWUKLSAgX19mdXR1cmVfXyBpbXBvcnQgZGlkbid0IHdvcmsuCi0KLS0gT24gd2luZG93cywgb3MuY2hkaXIgZ2l2ZW4gdW5pY29kZSB3YXMgbm90IHdvcmtpbmcgaWYgR2V0Q3VycmVudERpcmVjdG9yeVcKLSAgcmV0dXJuZWQgYSBwYXRoIGxvbmdlciB0aGFuIE1BWF9QQVRILiAoQnV0IEl0J3MgZG91YnRmdWwgdGhpcyBjb2RlIHBhdGggaXMKLSAgcmVhbGx5IGV4ZWN1dGVkIGJlY2F1c2UgSSBjYW5ub3QgbW92ZSB0byBzdWNoIGRpcmVjdG9yeSBvbiB3aW4yaykKLQotLSBJc3N1ZSAjNDA2OTogV2hlbiBzZXQucmVtb3ZlKGVsZW1lbnQpIGlzIHVzZWQgd2l0aCBhIHNldCBlbGVtZW50LCB0aGUgZWxlbWVudAotICBpcyB0ZW1wb3JhcmlseSByZXBsYWNlZCB3aXRoIGFuIGVxdWl2YWxlbnQgZnJvemVuc2V0LiAgQnV0IHRoZSBldmVudHVhbAotICBLZXlFcnJvciB3b3VsZCBhbHdheXMgcmVwb3J0IHRoZSBlbXB0eSBmcm96ZW5zZXQoW10pIGFzIHRoZSBtaXNzaW5nIGtleS4gTm93Ci0gIGl0IGNvcnJlY3RseSByZWZlcnMgdG8gdGhlIGluaXRpYWwgZWxlbWVudC4KLQotLSBGaXhlZCBDOTkgc3R5bGUgY29tbWVudHMgaW4gc2V2ZXJhbCBmaWxlcy4gUHl0aG9uIGlzIG5vdyBDODkgY29tcGF0aWJsZQotICBhZ2Fpbi4KLQotTGlicmFyeQotLS0tLS0tLQorLSBJc3N1ZSAjNDM4NDogQWRkZWQgbG9nZ2luZyBpbnRlZ3JhdGlvbiB3aXRoIHdhcm5pbmdzIG1vZHVsZSB1c2luZworICBjYXB0dXJlV2FybmluZ3MoKS4gIFRoaXMgY2hhbmdlIGluY2x1ZGVzIGEgTnVsbEhhbmRsZXIgd2hpY2ggZG9lcyBub3RoaW5nOyBpdAorICB3aWxsIGJlIG9mIHVzZSB0byBsaWJyYXJ5IGRldmVsb3BlcnMgd2hvIHdhbnQgdG8gYXZvaWQgdGhlICJObyBoYW5kbGVycyBjb3VsZAorICBiZSBmb3VuZCBmb3IgbG9nZ2VyIFhYWCIgbWVzc2FnZSB3aGljaCBjYW4gYXBwZWFyIGlmIHRoZSBsaWJyYXJ5IHVzZXIgZG9lc24ndAorICBjb25maWd1cmUgbG9nZ2luZy4KIAogLSBJc3N1ZSAjMzc0MTogRElTVFVUSUxTX1VTRV9TREsgc2V0IGNhdXNlcyBtc3ZjOWNvbXBpbGVyLnB5IHRvIHJhaXNlIGFuCiAgIGV4Y2VwdGlvbi4KIAotLSBJc3N1ZSAjNDM2MzogVGhlIHV1aWQudXVpZDEoKSBhbmQgdXVpZC51dWlkNCgpIGZ1bmN0aW9ucyBub3cgd29yayBldmVuIGlmCi0gIHRoZSBjdHlwZXMgbW9kdWxlIGlzIG5vdCBwcmVzZW50LgorLSBJc3N1ZSAjNDM2MzogVGhlIHV1aWQudXVpZDEoKSBhbmQgdXVpZC51dWlkNCgpIGZ1bmN0aW9ucyBub3cgd29yayBldmVuIGlmIHRoZQorICBjdHlwZXMgbW9kdWxlIGlzIG5vdCBwcmVzZW50LgorCistIEZpbGVJTydzIG1vZGUgYXR0cmlidXRlIG5vdyBhbHdheXMgaW5jbHVkZXMgYGAiYiJgYC4KIAogLSBJc3N1ZSAjNDExNjogUmVzb2x2ZSBtZW1iZXIgbmFtZSBjb25mbGljdCBpbiBTY3JvbGxlZENhbnZhcy5fX2luaXRfXy4KIAorLSBodHRwbGliLkhUVFBDb25uZWN0aW9uLnB1dGhlYWRlcigpIG5vdyBhY2NlcHRzIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgdmFsdWVzCisgIGZvciBhbnkgaGVhZGVyLCBtYXRjaGluZyB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIGhhcyBjbGFpbWVkIGZvciBhIHdoaWxlLgorCiAtIElzc3VlICMzNzc0OiBGaXhlZCBhbiBlcnJvciB3aGVuIGNyZWF0ZSBhIFRraW50ZXIgbWVudSBpdGVtIHdpdGhvdXQgY29tbWFuZAogICBhbmQgdGhlbiByZW1vdmUgaXQuCiAKQEAgLTE3OTcsOSArMzU3Miw5OSBAQAogLSBJc3N1ZSAjNDAxNDogRG9uJ3QgY2xhaW0gdGhhdCBQeXRob24gaGFzIGFuIEFscGhhIHJlbGVhc2Ugc3RhdHVzLCBpbiBhZGRpdGlvbgogICB0byBjbGFpbWluZyBpdCBpcyBNYXR1cmUuCiAKKy0gSXNzdWUgIzQ3MzA6IEZpeGVkIHRoZSBjUGlja2xlIG1vZHVsZSB0byBoYW5kbGUgY29ycmVjdGx5IGFzdHJhbCBjaGFyYWN0ZXJzCisgIHdoZW4gcHJvdG9jb2wgMCBpcyB1c2VkLgorCistIElzc3VlICMxNTk0OiBNYWNPUy5HZXRDcmVhdG9yQW5kVHlwZSBub3cgYWx3YXlzIHJldHVybnMgYSBiaWctZW5kaWFuIHJlc3VsdCwKKyAgdG8gYmUgY29uc2lzdGVudCB3aXRoIEFwcGxlIHRvb2xzLgorCistIElzc3VlICM5MDA5NDk6IHBsYXQtbWFjL3ZpZGVvcmVhZGVyLnB5IG5vIGxvbmdlciByZWxpZXMgb24gYSBub24tZXhpc3RpbmcKKyAgbW9kdWxlLgorCistIElzc3VlICMxNjI3ODk1MjogcGxhdC1tYWMvdmlkZW9yZWFkZXIucHkgbm93IGNvcnJlY3RseSBpbXBvcnRzIE1lZGlhRGVzY3IKKworLSBJc3N1ZSAjMTczNzgzMjogcGxhdC1tYWMvRWFzeURpYWxvZy5weSBubyBsb25nZXIgdXNlcyB0aGUgYnJva2VuIGFlcGFjaworICBtb2R1bGUuCisKKy0gSXNzdWUgIzExNDk4MDQ6IG1hY29zdG9vbHMubWtkaXJzIG5vdyBldmVuIHdvcmtzIHdoZW4gYW5vdGhlciBwcm9jZXNzIGNyZWF0ZXMKKyAgb25lIG9mIHRoZSBuZWVkZWQgc3ViZGlyZWN0b3JpZXMuCisKKy0gSXNzdWUgIzkwMDUwNjogYWRkZWQgLS1uby16aXBpbXBvcnQgZmxhZyB0byB0aGUgYnVuZGxlYnVpbGRlciBzY3JpcHQuCisKKy0gSXNzdWUgIzg0MTgwMDogYnVuZGxlYnVpbGRlciBub3cgd29ya3Mgd2l0aCAncHl0aG9uIC1PJy4KKworLSBJc3N1ZSAjNDg2MTogY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5KCk6IFJvYnVzdGlmeS4gRml4IGxpYnJhcnkgZGV0ZWN0aW9uIG9uCisgIGJpYXJjaCBzeXN0ZW1zLiAgVHJ5IHRvIHJlbHkgb24gbGRjb25maWcgb25seSwgd2l0aG91dCB1c2luZyBvYmpkdW1wIGFuZCBnY2MuCisKKy0gSXNzdWUgIzUxMDQ6IFRoZSBzb2NrZXQgbW9kdWxlIG5vdyByYWlzZXMgT3ZlcmZsb3dFcnJvciB3aGVuIDE2LWJpdCBwb3J0IGFuZAorICBwcm90b2NvbCBudW1iZXJzIGFyZSBzdXBwbGllZCBvdXRzaWRlIHRoZSBhbGxvd2VkIDAtNjU1MzYgcmFuZ2Ugb24gYmluZCgpIGFuZAorICBnZXRzZXJ2Ynlwb3J0KCkuCisKKy0gSXNzdWUgIzk5OTA0MjogVGhlIFB5dGhvbiBjb21waWxlciBub3cgaGFuZGxlcyBleHBsaWN0IGdsb2JhbCBzdGF0ZW1lbnRzCisgIGNvcnJlY3RseSAoc2hvdWxkIGJlIGFzc2lnbmVkIHVzaW5nIFNUT1JFX0dMT0JBTCBvcGNvZGUpLgorCistIElzc3VlICMyNzAzOiBTaW1wbGVYTUxSUENEaXNwYXRjaGVyLl9faW5pdF9fOiBQcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBuZXcKKyAgYXJndW1lbnRzIGludHJvZHVjZWQgaW4gMi41LgorCistIElzc3VlICM1ODI4IChJbnZhbGlkIGJlaGF2aW9yIG9mIHVuaWNvZGUubG93ZXIpOiBGaXhlZCBib2d1cyBsb2dpYyBpbgorICBtYWtldW5pY29kZWRhdGEucHkgYW5kIHJlZ2VuZXJhdGVkIHRoZSBVbmljb2RlIGRhdGFiYXNlIChUaGlzIGZpeGVzCisgIHUnXHUxZDc5Jy5sb3dlcigpID09ICdceDAwJykuCisKKy0gV2luZG93cyBsb2NhbGUgbWFwcGluZyB1cGRhdGVkIHRvIFZpc3RhLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBUdGsgZGVtb3MgYWRkZWQgaW4gRGVtby90a2ludGVyL3R0ay8uCisKKy0gSXNzdWUgIzQ2Nzc6IEFkZCB0d28gbGlzdCBjb21wcmVoZW5zaW9uIHRlc3RzIHRvIHB5YmVuY2guCisKIEJ1aWxkCiAtLS0tLQogCistIElzc3VlICM2NjAzOiBDaGFuZ2UgUkVBRF9USU1FU1RBTVAgbWFjcm8gaW4gY2V2YWwuYyBzbyB0aGF0IGl0IGNvbXBpbGVzCisgIGNvcnJlY3RseSB1bmRlciBnY2Mgb24geDg2LTY0LiAgVGhpcyBmaXhlcyBhIHJlcG9ydGVkIHByb2JsZW0gd2l0aCB0aGUKKyAgLS13aXRoLXRzYyBidWlsZCBvbiB4ODYtNjQuCisKKy0gQWRkIDIgbmV3IG9wdGlvbnMgdG8gYGAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzYGAgb24gTWFjT1NYOiBgYGludGVsYGAgYnVpbGRzIGEKKyAgZGlzdHJpYnV0aW9uIHdpdGggYGBpMzg2YGAgYW5kIGBgeDg2XzY0YGAgYXJjaGl0ZWN0dXJlcywgd2hpbGUgYGAzLXdheWBgCisgIGJ1aWxkcyBhIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBgYHBwY2BgLCBgYGkzODZgYCBhbmQgYGB4ODZfNjRgYCBhcmNoaXRlY3R1cmVzLgorCistIElzc3VlICM2ODAyOiBGaXggYnVpbGQgaXNzdWVzIG9uIE1hY09TWCAxMC42LgorCistIElzc3VlICM2MjQ0OiBBbGxvdyBkZXRlY3RfdGtpbnRlciB0byBsb29rIGZvciBUY2wvVGsgOC42LgorCistIElzc3VlICM1MzkwOiBBZGQgdW5pbnN0YWxsIGljb24gaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBmaWxlIGV4dGVuc2lvbnMgYXJlCisgIGluc3RhbGxlZC4KKworLSBJc3N1ZSAjNTgwOTogU3BlY2lmeWluZyBib3RoIC0tZW5hYmxlLWZyYW1ld29yayBhbmQgLS1lbmFibGUtc2hhcmVkIGlzIGFuCisgIGVycm9yLiBDb25maWd1cmUgbm93IGV4cGxpY2l0eSB0ZWxscyB5b3UgYWJvdXQgdGhpcy4KKworLSBJc3N1ZSAjMzU4NTogQWRkIHBrZy1jb25maWcgc3VwcG9ydC4gIEl0IGNyZWF0ZXMgYSBweXRob24tMi43LnBjIGZpbGUgYW5kIGEKKyAgcHl0aG9uLnBjIHN5bWxpbmsgaW4gdGhlICQoTElCRElSKS9wa2djb25maWcgZGlyZWN0b3J5LiAgUGF0Y2ggYnkgQ2xpbnRvbiBSb3kuCisKKy0gSXNzdWUgIzYwOTQ6IEJ1aWxkIGNvcnJlY3RseSB3aXRoIFN1YnZlcnNpb24gMS43LgorCistIElzc3VlICM1ODQ3OiBSZW1vdmUgLW4gc3dpdGNoIG9uICJFZGl0IHdpdGggSURMRSIgbWVudSBpdGVtLgorCistIElzc3VlICM1NzI2OiBNYWtlIE1vZHVsZXMvbGRfc29fYWl4IHJldHVybiB0aGUgYWN0dWFsIGV4aXQgY29kZSBvZiB0aGUgbGlua2VyLAorICByYXRoZXIgdGhhbiBhbHdheXMgZXhpdCBzdWNjZXNzZnVsbHkuICBQYXRjaCBieSBGbG9yaXMgQnJ1eW5vb2doZS4KKworLSBJc3N1ZSAjNDU4NzogQWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLWRibWxpYm9yZGVyPWRiMTpkYjI6Li4uIHRvIHNwZWNpZnkKKyAgdGhlIG9yZGVyIHRoYXQgYmFja2VuZHMgZm9yIHRoZSBkYm0gZXh0ZW5zaW9uIGFyZSBjaGVja2VkLgorCistIExpbmsgdGhlIHNoYXJlZCBweXRob24gbGlicmFyeSB3aXRoICQoTU9ETElCUykuCisKKy0gSXNzdWUgIzUxMzQ6IFNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBjb21waWxpbmcgc3FsaXRlIHdpdGggVkMrKy4KKworLSBJc3N1ZSAjNDQ5NDogRml4IGJ1aWxkIHdpdGggUHlfTk9fRU5BQkxFX1NIQVJFRCBvbiBXaW5kb3dzLgorCistIElzc3VlICM0ODk1OiBVc2UgX3N0cmR1cCBvbiBXaW5kb3dzIENFLgorCistIElzc3VlICM0NDcyOiBgYGNvbmZpZ3VyZSAtLWVuYWJsZS1zaGFyZWRgYCBub3cgd29ya3Mgb24gT1NYLgorCistIElzc3VlcyAjNDcyOCBhbmQgIzQwNjA6IFdPUkRTX0JJR0VESUFOIGlzIG5vdyBjb3JyZWN0IGluIFVuaXZlcnNhbCBidWlsZHMuCisKIC0gSXNzdWUgIzQzODk6IEFkZCBpY29uIHRvIHRoZSB1bmluc3RhbGwgZW50cnkgaW4gImFkZC1hbmQtcmVtb3ZlLXByb2dyYW1zIi4KIAogLSBJc3N1ZSAjNDI4OTogUmVtb3ZlIENhbmNlbCBidXR0b24gZnJvbSBBZHZhbmNlZERsZy4KQEAgLTE4MTIsMjMgKzM2NzcsMjE3IEBACiAKIC0gSXNzdWUgIzQwMTg6IERpc2FibGUgImZvciBtZSIgaW5zdGFsbGF0aW9ucyBvbiBWaXN0YS4KIAotLSBJc3N1ZSAjMzc1ODogQWRkIGBgcGF0Y2hjaGVja2BgIGJ1aWxkIHRhcmdldCB0byAuUEhPTlkuCistIElzc3VlICMzNzU4OiBBZGQgYGBwYXRjaGNoZWNrYGAgYnVpbGQgdGFyZ2V0IHRvIGBgLlBIT05ZYGAuCiAKIC0gSXNzdWUgIzQyMDQ6IEZpeGVkIG1vZHVsZSBidWlsZCBlcnJvcnMgb24gRnJlZUJTRCA0LgogCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzY1NTY6IEZpeGVkIHRoZSBEaXN0dXRpbHMgY29uZmlndXJhdGlvbiBmaWxlcyBsb2NhdGlvbiBleHBsYW5hdGlvbiBmb3IKKyAgV2luZG93cy4KKworLSBJc3N1ZSAjNjgwMTogc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlIGFsc28gYWNjZXB0cyBgYHxgYC4gIFRoYW5rcyB0byBDYXJsCisgIENoZW5ldC4KKwogQy1BUEkKIC0tLS0tCiAKKy0gSXNzdWUgIzc1Mjg6IEFkZCBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cgKGJhY2twb3J0ZWQgZnJvbSBweTNrKS4KKworLSBJc3N1ZSAjNzIyODogQWRkICclbGxkJyBhbmQgJyVsbHUnIHN1cHBvcnQgdG8gUHlTdHJpbmdfRnJvbUZvcm1hdChWKSBhbmQKKyAgUHlFcnJfRm9ybWF0LCBvbiBtYWNoaW5lcyB3aXRoIEhBVkVfTE9OR19MT05HIGRlZmluZWQuCisKKy0gQWRkIG5ldyBDLUFQSSBmdW5jdGlvbiBQeU9TX3N0cmluZ190b19kb3VibGUsIGFuZCBkZXByZWNhdGVkIFB5T1NfYXNjaWlfYXRvZgorICBhbmQgUHlPU19hc2NpaV9zdHJ0b2QuCisKKy0gUmVtb3ZlZCBfUHlPU19kb3VibGVfdG9fc3RyaW5nLiBVc2UgUHlPU19kb3VibGVfdG9fc3RyaW5nIGluc3RlYWQuICBUaGlzIGlzIGluCisgIHByZXBhcmF0aW9uIGZvciAoYnV0IG5vdCBzdHJpY3RseSByZWxhdGVkIHRvKSBpc3N1ZSAjNzExNywgc2hvcnQgZmxvYXQgcmVwci4KKworLSBJc3N1ZSAjNjYyNDogUHlBcmdfUGFyc2VUdXBsZSB3aXRoICJzIiBmb3JtYXQgd2hlbiBwYXJzaW5nIGFyZ3VtZW50IHdpdGggTlVMTDoKKyAgQm9ndXMgVHlwZUVycm9yIGRldGFpbCBzdHJpbmcuCisKKy0gSXNzdWUgIzU5NTQ6IEFkZCBhIFB5RnJhbWVfR2V0TGluZU51bWJlcigpIGZ1bmN0aW9uIHRvIHJlcGxhY2UgbW9zdCB1c2VzIG9mCisgIFB5Q29kZV9BZGRyMkxpbmUoKS4KKworLSBJc3N1ZSAjNTk1OTogQWRkIGEgUHlDb2RlX05ld0VtcHR5KCkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IGVtcHR5IGNvZGUKKyAgb2JqZWN0IGF0IGEgc3BlY2lmaWVkIGZpbGUsIGZ1bmN0aW9uLCBhbmQgbGluZSBudW1iZXIuCisKKy0gSXNzdWUgIzE0MTk2NTI6IENoYW5nZSB0aGUgZmlyc3QgYXJndW1lbnQgdG8gUHlJbXBvcnRfQXBwZW5kSW5pdHRhYigpIHRvCisgIGBgY29uc3QgY2hhciAqYGAgYXMgdGhlIHN0cmluZyBpcyBzdG9yZWQgYmV5b25kIHRoZSBjYWxsLgorCistIFNvbWUgUHlCeXRlc18qIGFsaWFzZXMgaGF2ZSBiZWVuIHJlbW92ZWQgYmVjYXVzZSB0aGV5IGRvbid0IGV4aXN0IGluIDMueC4KKworLSBJc3N1ZSAjNTE3NTogUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyBub3cgcmFpc2VzIE92ZXJmbG93RXJyb3IgZm9yIG5lZ2F0aXZlCisgIGFyZ3VtZW50cy4gIFByZXZpb3VzbHksIGl0IHJhaXNlZCBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzQ3MjA6IFRoZSBmb3JtYXQgZm9yIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyBjYW4gYmVnaW4gd2l0aCAnfCcuCisKKy0gSXNzdWUgIzM2MzI6IEZyb20gdGhlIGdkYiBkZWJ1Z2dlciwgdGhlICdweW8nIG1hY3JvIGNhbiBub3cgYmUgY2FsbGVkIHdoZW4gdGhlCisgIEdJTCBpcyByZWxlYXNlZCwgb3Igb3duZWQgYnkgYW5vdGhlciB0aHJlYWQuCisKIC0gSXNzdWUgIzQxMjI6IE9uIFdpbmRvd3MsIGZpeCBhIGNvbXBpbGF0aW9uIGVycm9yIHdoZW4gdXNpbmcgdGhlCiAgIFB5X1VOSUNPREVfSVNTUEFDRSBtYWNybyBpbiBhbiBleHRlbnNpb24gbW9kdWxlLgogCistIElzc3VlICM0MjkzOiBQeV9BZGRQZW5kaW5nQ2FsbCgpIGlzIG5vdyB0aHJlYWQgc2FmZSBhbmQgY2FuIGJlIHVzZWQgZm9yCisgIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb25zIHRvIHB5dGhvbiBmcm9tIGFueSB0aHJlYWQuICBEb2N1bWVudGF0aW9uIGFkZGVkLgorCiBFeHRlbnNpb24gTW9kdWxlcwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjNjUwODogQWRkIHBvc2l4LntnZXRyZXN1aWQsZ2V0cmVzZ2lkLHNldHJlc3VpZCxzZXRyZXNnaWR9LgorCistIElzc3VlICM3MDc4OiBTZXQgc3RydWN0Ll9fZG9jX18gZnJvbSBfc3RydWN0Ll9fZG9jX18uCisKKy0gSXNzdWUgIzMzNjY6IEFkZCBlcmYsIGVyZmMsIGV4cG0xLCBnYW1tYSwgbGdhbW1hIGZ1bmN0aW9ucyB0byBtYXRoIG1vZHVsZS4KKworLSBJc3N1ZSAjNjgyMzogQWxsb3cgdGltZS5zdHJmdGltZSgpIHRvIGFjY2VwdCBhIHR1cGxlIHdpdGggYSBpc2RzdCBmaWVsZAorICBvdXRzaWRlIG9mIHRoZSByYW5nZSBvZiBbLTEsIDFdIGJ5IG5vcm1hbGl6aW5nIHRoZSB2YWx1ZSB0byB3aXRoaW4gdGhhdCByYW5nZS4KKworLSBJc3N1ZSAjNjg3NzogTWFrZSBpdCBwb3NzaWJsZSB0byBsaW5rIHRoZSByZWFkbGluZSBleHRlbnNpb24gdG8gbGliZWRpdCBvbgorICBPU1guCisKKy0gSXNzdWUgIzY5NDQ6IEZpeCBhIFN5c3RlbUVycm9yIHdoZW4gc29ja2V0LmdldG5hbWVpbmZvKCkgd2FzIGNhbGxlZCB3aXRoCisgIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgdHVwbGUgYXMgZmlyc3QgYXJndW1lbnQuCisKKy0gSXNzdWUgIzY4NjU6IEZpeCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwd2QKKyAgbW9kdWxlLgorCistIElzc3VlICM2ODQ4OiBGaXggY3Vyc2VzIG1vZHVsZSBidWlsZCBmYWlsdXJlIG9uIE9TIFggMTAuNi4KKworLSBGaXggYSBzZWdmYXVsdCBpbiBleHBhdCB3aGVuIGdpdmVuIGEgc3BlY2lhbGx5IGNyYWZ0ZWQgaW5wdXQgbGVhZCB0byB0aGUKKyAgdG9rZW5pemVyIG5vdCBzdG9wcGluZy4gQ1ZFLTIwMDktMzcyMC4KKworLSBJc3N1ZSAjNjU2MTogJ1xkJyBpbiBhIHJlZ2V4IG5vdyBtYXRjaGVzIG9ubHkgY2hhcmFjdGVycyB3aXRoIFVuaWNvZGUgY2F0ZWdvcnkKKyAgJ05kJyAoTnVtYmVyLCBEZWNpbWFsIERpZ2l0KS4gIFByZXZpb3VzbHkgaXQgYWxzbyBtYXRjaGVkIGNoYXJhY3RlcnMgd2l0aAorICBjYXRlZ29yeSAnTm8nLgorCistIElzc3VlICMxNTIzOiBSZW1vdmUgZGVwcmVjYXRlZCBvdmVyZmxvdyB3cmFwcGluZyBmb3Igc3RydWN0LnBhY2sgd2l0aCBhbgorICBpbnRlZ2VyIGZvcm1hdCBjb2RlICgnYkJoSGlJbExxUScpLiAgUGFja2luZyBhbiBvdXQtb2YtcmFuZ2UgaW50ZWdlciBub3cKKyAgY29uc2lzdGVudGx5IHJhaXNlcyBzdHJ1Y3QuZXJyb3IuCisKKy0gSXNzdWVzICMxNTMwNTU5LCAjMTc0MTEzMDogRml4IHZhcmlvdXMgc3RydWN0LnBhY2sgaW5jb25zaXN0ZW5jaWVzIGZvciB0aGUKKyAgaW50ZWdlciBmb3JtYXRzICgnYkJoSGlJbExxUScpLiAgSW4gdGhlIGZvbGxvd2luZywgJyonIHJlcHJlc2VudHMgYW55IG9mICc9JywKKyAgJzwnLCAnPicuCisKKyAgICAtIFBhY2tpbmcgYSBmbG9hdCBub3cgYWx3YXlzIGdpdmVzIGEgRGVwcmVjYXRpb24gV2FybmluZy4gIFByZXZpb3VzbHkgaXQKKyAgICAgIG9ubHkgd2FybmVkIGZvciAnSScsICdMJywgJypCJywgJypIJywgJypJJywgJypMJy4KKworICAgIC0gSWYgeCBpcyBub3QgYW4gaW50LCBsb25nIG9yIGZsb2F0LCB0aGVuIHBhY2tpbmcgeCB3aWxsIGFsd2F5cyByZXN1bHQgaW4KKyAgICAgIHN0cnVjdC5lcnJvci4gIFByZXZpb3VzbHkgYW4geCB3aXRoIGFuIF9faW50X18gbWV0aG9kIGNvdWxkIGJlIHBhY2tlZCBieQorICAgICAgJ2InLCAnQicsICdoJywgJ0gnLCAnaScsICdsJywgJypiJywgJypoJyAsJyppJywgJypsJywgYW5kIGFuIHggd2l0aCBhCisgICAgICBfX2xvbmdfXyBtZXRob2QgY291bGQgYmUgcGFja2VkIGJ5ICdxJywgJ1EnLCAnKnEnLCAnKlEnOyBmb3IgeCB3aXRoCisgICAgICBuZWl0aGVyIF9faW50X18gbm9yIF9fbG9uZ19fLCBUeXBlRXJyb3IgdXNlZCB0byBiZSByYWlzZWQgKHdpdGggYQorICAgICAgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2UpIGZvciAnSScsICdMJywgJypCJywgJypIJywgJypJJywgJypMJywgYW5kCisgICAgICBzdHJ1Y3QuZXJyb3IgaW4gb3RoZXIgY2FzZXMuCisKKyAgTm90ZTogYXMgb2YgUHl0aG9uIDIuNyBiZXRhIDEsIHRoZSBhYm92ZSBpcyBvdXQgb2YgZGF0ZS4gIEluIDIuNyBiZXRhIDEsIGFueQorICBhcmd1bWVudCB3aXRoIGFuIF9faW50X18gbWV0aG9kIGNhbiBiZSBwYWNrZWQsIGJ1dCB1c2Ugb2YgdGhpcyBmZWF0dXJlCisgIHRyaWdnZXJzIGEgRGVwcmVjYXRpb25XYXJuaW5nLgorCistIElzc3VlICM0ODczOiBGaXggcmVzb3VyY2UgbGVha3MgaW4gZXJyb3IgY2FzZXMgb2YgcHdkIGFuZCBncnAuCisKKy0gSXNzdWUgIzQ3NTE6IEZvciBoYXNobGliIGFsZ29yaXRobXMgcHJvdmlkZWQgYnkgT3BlblNTTCwgdGhlIFB5dGhvbiBHSUwgaXMgbm93CisgIHJlbGVhc2VkIGR1cmluZyBjb21wdXRhdGlvbiBvbiBkYXRhIGxlbmd0aHMgPj0gMjA0OCBieXRlcy4KKworLSBJc3N1ZSAjMzc0NTogRml4IGhhc2hsaWIgdG8gYWx3YXlzIHJlamVjdCB1bmljb2RlIGFuZCBub24gYnVmZmVyLWFwaQorICBzdXBwb3J0aW5nIG9iamVjdHMgYXMgaW5wdXQgbm8gbWF0dGVyIGhvdyBpdCB3YXMgY29tcGlsZWQgKGJ1aWx0IGluCisgIGltcGxlbWVudGF0aW9ucyBvciBleHRlcm5hbCBvcGVuc3NsIGxpYnJhcnkpLiAgTk9URTogVW5kb25lIGluIDIuN2EyLgorCistIElzc3VlICM0Mzk3OiBGaXggb2NjYXNpb25hbCB0ZXN0X3NvY2tldCBmYWlsdXJlIG9uIE9TIFguCisKKy0gSXNzdWUgIzQyNzk6IEZpeCBidWlsZCBvZiBwYXJzZXJtb2R1bGUgdW5kZXIgQ3lnd2luLgorCistIElzc3VlICM0MDUxOiBQcmV2ZW50IGNvbmZsaWN0IG9mIFVOSUNPREUgbWFjcm9zIGluIGNQaWNrbGUuCisKKy0gSXNzdWUgIzQyMjg6IFBhY2sgbmVnYXRpdmUgdmFsdWVzIHRoZSBzYW1lIHdheSBhcyAyLjQgaW4gc3RydWN0J3MgTCBmb3JtYXQuCisKKy0gSXNzdWUgIzEwNDAwMjY6IEZpeCBvcy50aW1lcyByZXN1bHQgb24gc3lzdGVtcyB3aGVyZSBIWiBpcyBpbmNvcnJlY3QuCisKKy0gSXNzdWVzICMzMTY3LCAjMzY4MjogRml4IHRlc3RfbWF0aCBmYWlsdXJlcyBmb3IgbG9nLCBsb2cxMCBvbiBTb2xhcmlzLAorICBPcGVuQlNELgorCiAtIElzc3VlICM0MzY1OiBBZGQgY3J0YXNzZW0uaCBjb25zdGFudHMgdG8gdGhlIG1zdmNydCBtb2R1bGUuCiAKIC0gSXNzdWUgIzQzOTY6IFRoZSBwYXJzZXIgbW9kdWxlIG5vdyBjb3JyZWN0bHkgdmFsaWRhdGVzIHRoZSB3aXRoIHN0YXRlbWVudC4KIAorLSBJc3N1ZSAjNTIyODogTWFrZSBmdW5jdG9vbHMucGFydGlhbCBvYmplY3RzIGNhbiBub3cgYmUgcGlja2xlZC4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzc0MzE6IFVzZSBURVNURk4gaW4gdGVzdF9saW5lY2FjaGUgaW5zdGVhZCBvZiB0cnlpbmcgdG8gY3JlYXRlIGEgZmlsZQorICBpbiB0aGUgTGliL3Rlc3QgZGlyZWN0b3J5LCB3aGljaCBtaWdodCBiZSByZWFkLW9ubHkgZm9yIHRoZSB1c2VyIHJ1bm5pbmcgdGhlCisgIHRlc3RzLgorCistIElzc3VlICM3MzI0OiBBZGQgYSBzYW5pdHkgY2hlY2sgdG8gcmVncnRlc3QgYXJndW1lbnQgcGFyc2luZyB0byBjYXRjaCB0aGUgY2FzZQorICBvZiBhbiBvcHRpb24gd2l0aCBubyBoYW5kbGVyLgorCistIElzc3VlICM3MzEyOiBBZGQgYSAtRiBmbGFnIHRvIHJ1biB0aGUgc2VsZWN0ZWQgdGVzdHMgaW4gYSBsb29wIHVudGlsIGEgdGVzdAorICBmYWlscy4gIENhbiBiZSBjb21iaW5lZCB3aXRoIC1qLgorCistIElzc3VlICM3Mjk1OiBEbyBub3QgdXNlIGEgaGFyZGNvZGVkIGZpbGUgbmFtZSBpbiB0ZXN0X3RhcmZpbGUuCisKKy0gSXNzdWUgIzcyNzA6IEFkZCBzb21lIGRlZGljYXRlZCB1bml0IHRlc3RzIGZvciBtdWx0aS10aHJlYWQgc3luY2hyb25pemF0aW9uCisgIHByaW1pdGl2ZXMgc3VjaCBhcyBMb2NrLCBSTG9jaywgQ29uZGl0aW9uLCBFdmVudCBhbmQgU2VtYXBob3JlLgorCistIElzc3VlICM3MjIyOiBNYWtlIHRocmVhZCAicmVhcGluZyIgbW9yZSByZWxpYWJsZSBzbyB0aGF0IHJlZmVyZW5jZQorICBsZWFrLWNoYXNpbmcgdGVzdCBydW5zIGdpdmUgc2Vuc2libGUgcmVzdWx0cy4gIFRoZSBwcmV2aW91cyBtZXRob2Qgb2YgcmVhcGluZworICB0aHJlYWRzIGNvdWxkIHJldHVybiBzdWNjZXNzZnVsbHkgd2hpbGUgc29tZSBUaHJlYWQgb2JqZWN0cyB3ZXJlIHN0aWxsCisgIHJlZmVyZW5jZWQuICBUaGlzIGFsc28gaW50cm9kdWNlcyBhIG5ldyBwcml2YXRlIGZ1bmN0aW9uOiBgYHRocmVhZC5fY291bnQoKWBgLgorCistIElzc3VlICM3MTUxOiBGaXhlZCByZWdydGVzdCAtaiBzbyB0aGF0IG91dHB1dCB0byBzdGRlcnIgZnJvbSBhIHRlc3Qgbm8gbG9uZ2VyCisgIHJ1bnMgdGhlIHJpc2sgb2YgY2F1c2luZyB0aGUgd29ya2VyIHRocmVhZCB0byBmYWlsLgorCistIElzc3VlICM3MDU1OiB0ZXN0X19fYWxsX18gbm93IGdyZWVkaWx5IGRldGVjdHMgYWxsIG1vZHVsZXMgd2hpY2ggaGF2ZSBhbgorICBfX2FsbF9fIGF0dHJpYnV0ZSwgcmF0aGVyIHRoYW4gdXNpbmcgYSBoYXJkY29kZWQgYW5kIGluY29tcGxldGUgbGlzdC4KKworLSBJc3N1ZSAjNzA1ODogQWRkZWQgc2F2ZS9yZXN0b3JlIGZvciB0aGluZ3MgbGlrZSBzeXMuYXJndiBhbmQgY3dkIHRvCisgIHJ1bnRlc3RfaW5uZXIgaW4gcmVncnRlc3QsIHdpdGggd2FybmluZ3MgaWYgdGhlIGNhbGxlZCB0ZXN0IG1vZGlmaWVzIHRoZW0sCisgIGFuZCBhIG5ldyBzZWN0aW9uIGluIHRoZSBzdW1tYXJ5IHJlcG9ydCBhdCB0aGUgZW5kLgorCistIElzc3VlICM3MDQyOiBGaXggdGVzdF9zaWduYWwgKHRlc3RfaXRpbWVyX3ZpcnR1YWwpIGZhaWx1cmUgb24gT1MgWCAxMC42LgorCistIElzc3VlICM2ODA2OiB0ZXN0X3BsYXRmb3JtIGZhaWxlZCB1bmRlciBPUyBYIDEwLjYuMCBiZWNhdXNlIGBgc3dfdmVyYGAgbGVhdmVzCisgIG9mZiB0aGUgdHJhaWxpbmcgMCBpbiB0aGUgdmVyc2lvbiBudW1iZXIuCisKKy0gSXNzdWUgIzU0NTA6IE1vdmVkIHRlc3RzIGludm9sdmluZyBsb2FkaW5nIHRrIGZyb20gTGliL3Rlc3QvdGVzdF90Y2wgdG8KKyAgTGliL2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2xvYWR0ay4gV2l0aCB0aGlzLCB0aGVzZSB0ZXN0cyBkZW1vbnN0cmF0ZQorICB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgdGVzdF90dGtndWlvbmx5IChhbmQgbm93IGFsc28gdGVzdF90aykgd2hpY2ggaXMgdG8gc2tpcAorICB0aGUgdGVzdHMgaWYgRElTUExBWSBpcyBkZWZpbmVkIGJ1dCBjYW4ndCBiZSB1c2VkLgorCistIElzc3VlICM2MTUyOiBOZXcgb3B0aW9uICctaicvJy0tbXVsdGlwcm9jZXNzJyBmb3IgcmVncnRlc3QgYWxsb3dzIHJ1bm5pbmcKKyAgcmVncmVzc2lvbiB0ZXN0cyBpbiBwYXJhbGxlbCwgc2hvcnRlbmluZyB0aGUgdG90YWwgcnVudGltZS4KKworLSBJc3N1ZSAjNTM1NDogTmV3IHRlc3Qgc3VwcG9ydCBmdW5jdGlvbiBpbXBvcnRfZnJlc2hfbW9kdWxlKCkgbWFrZXMgaXQgZWFzeSB0bworICBpbXBvcnQgYm90aCBub3JtYWwgYW5kIG9wdGltaXNlZCB2ZXJzaW9ucyBvZiBtb2R1bGVzLiAgdGVzdF9oZWFwcSBhbmQKKyAgdGVzdF93YXJuaW5ncyBoYXZlIGJlZW4gYWRqdXN0ZWQgdG8gdXNlIGl0LCB0ZXN0cyBmb3Igb3RoZXIgbW9kdWxlcyB3aXRoIGJvdGgKKyAgQyBhbmQgUHl0aG9uIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgc3RkbGliIGNhbiBiZSBhZGp1c3RlZCB0byB1c2UgaXQgb3ZlcgorICB0aW1lLgorCistIEZpeCB0ZXN0X3dhcm5pbmdzIHRvIG5vIGxvbmdlciByZXNldCB0aGUgd2FybmluZ3MgZmlsdGVyLgorCistIEZpeCB0ZXN0X2xvZ2dpbmcgdG8gbm8gbG9uZ2VyIHJlc2V0IHRoZSB3YXJuaW5ncyBmaWx0ZXIuCisKKy0gSXNzdWUgIzU2MzU6IEZpeCBydW5uaW5nIHRlc3Rfc3lzIHdpdGggdHJhY2luZyBlbmFibGVkLgorCistIHJlZ3J0ZXN0IG5vIGxvbmdlciB0cmVhdHMgSW1wb3J0RXJyb3IgYXMgZXF1aXZhbGVudCB0byBTa2lwVGVzdC4gIEltcG9ydHMgdGhhdAorICBzaG91bGQgY2F1c2UgYSB0ZXN0IHRvIGJlIHNraXBwZWQgYXJlIG5vdyBkb25lIHVzaW5nIGltcG9ydF9tb2R1bGUgZnJvbSB0ZXN0CisgIHN1cHBvcnQsIHdoaWNoIGRvZXMgdGhlIGNvbnZlcnNpb24uCisKKy0gSXNzdWUgIzUwODM6IE5ldyAnZ3VpJyByZXNvdXJjZSBmb3IgcmVncnRlc3QuCisKKy0gSXNzdWUgIzU4Mzc6IENlcnRhaW4gc2VxdWVuY2VzIG9mIGNhbGxzIHRvIHNldCgpIGFuZCB1bnNldCgpIGZvcgorICBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQgb2JqZWN0cyByZXN0b3JlZCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgIGluY29ycmVjdGx5IG9uIF9fZXhpdF9fLgorCistIElzc3VlICMyMzg5OiBBcnJheSBvYmplY3RzIGFyZSBub3cgcGlja2xlZCBpbiBhIHBvcnRhYmxlIG1hbm5lci4KKworTWlzYworLS0tLQorCistIElzc3VlICM1NjExOiBBdXRvLWRldGVjdCB3aGV0aGVyIGEgQyBmaWxlIHVzZXMgdGFicyBvciBzcGFjZXMgaW4gVmltLgorCiAKIFdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNiBmaW5hbAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xODk1LDcgKzM5NTQsNyBAQAogVG9vbHMvRGVtb3MKIC0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzM4NTA6IHJlY3Vyc2lvbiB0ZXN0cyBpbiBNaXNjL2ZpbmRfcmVjdXJzaW9uX2xpbWl0LnB5IGNhbiByYWlzZQorLSBJc3N1ZSAjMzg1MDogcmVjdXJzaW9uIHRlc3RzIGluIFRvb2xzL3NjcmlwdHMvZmluZF9yZWN1cnNpb25fbGltaXQucHkgY2FuIHJhaXNlCiAgIEF0dHJpYnV0ZUVycm9yIGluc3RlYWQgb2YgUnVudGltZUVycm9yLCBkZXBlbmRpbmcgaW4gd2hpY2ggQyBBUEkgY2FsbAogICBleGFjdGx5IHRoZSByZWN1cnNpb24gbGltaXQgaXMgZXhjZWVkZWQuIENvbnNlcXVlbnRseSwgYm90aCBleGNlcHRpb24gdHlwZXMKICAgYXJlIGNhdWdodCBhbmQgc2lsZW5jZWQuCkBAIC0yMDQyLDYgKzQxMDEsOSBAQAogRXh0ZW5zaW9uIE1vZHVsZXMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzQzMDE6IFBhdGNoIHRoZSBsb2dnaW5nIG1vZHVsZSB0byBhZGQgcHJvY2Vzc05hbWUgc3VwcG9ydCwgcmVtb3ZlCisgIF9jaGVja19sb2dnZXJfY2xhc3MgZnJvbSBtdWx0aXByb2Nlc3NpbmcuCisKIC0gSXNzdWUgIzI5NzU6IFdoZW4gY29tcGlsaW5nIHNldmVyYWwgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBWaXN1YWwgU3R1ZGlvIDIwMDgKICAgZnJvbSB0aGUgc2FtZSBweXRob24gaW50ZXJwcmV0ZXIsIHNvbWUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdvdWxkIGdyb3cKICAgd2l0aG91dCBsaW1pdC4KZGlmZiAtLWdpdCBhL01pc2MvTkVXUy5oZWxwIGIvTWlzYy9ORVdTLmhlbHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1Njc4NWYuLjAwMDAwMDAKLS0tIGEvTWlzYy9ORVdTLmhlbHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0JCQkJCQkJLSotIHRleHQgLSotCi0KLUlmIHlvdSBlZGl0ZWQgTWlzYy9ORVdTIGJlZm9yZSBpdCB3YXMgY29udmVydGVkIHRvIFJlU1QgZm9ybWF0IHNraW1taW5nIHRoaXMKLWZpbGUgc2hvdWxkIGhlbHAgbWFrZSB0aGUgdHJhbnNpdGlvbiBhIGJpdCBlYXNpZXIuICBGb3IgZnVsbCBkZXRhaWxzIGFib3V0Ci1Eb2N1dGlscyBhbmQgUmVTVCwgZ28gdG8gdGhlIERvY3V0aWxzIHdlYnNpdGU6Ci0KLSAgICBodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0LwotCi1UbyBwcm9jZXNzIE1pc2MvTkVXUyB1c2luZyBEb2N1dGlscywgeW91J2xsIG5lZWQgdGhlIGxhdGVzdCBkb2N1dGlscwotc25hcHNob3Q6Ci0KLSAgICBodHRwOi8vZG9jdXRpbHMuc2YubmV0L2RvY3V0aWxzLXNuYXBzaG90LnRnegotCi1Eb2N1dGlscyB3b3JrcyB3aXRoIFB5dGhvbiAyLjIgb3IgbmV3ZXIuCi0KLVRvIHByb2Nlc3MgTkVXUyBpbnRvIE5FV1MuaHRtbCwgZmlyc3QgaW5zdGFsbCBEb2N1dGlscywgYW5kIHRoZW4gcnVuCi10aGlzIGNvbW1hbmQ6Ci0KLSAgICBweXRob24gLi4uL2RvY3V0aWxzL3Rvb2xzL3JzdDJodG1sLnB5IE5FV1MgTkVXUy5odG1sCi0KLUhlcmUgIi4uLi9kb2N1dGlscyIgaXMgdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRoZSBhYm92ZSBzbmFwc2hvdCB3YXMKLWV4dHJhY3RlZC4gIChJIGhvcGUgdGhpcyByZWNpcGUgd2lsbCBjaGFuZ2UgZm9yIHRoZSBiZXR0ZXIuKQotCi1EYXZpZCBHb29kZ2VyIG1hZGUgYSBjaGFuZ2UgdG8gdGhlIGFsbG93YWJsZSBzdHJ1Y3R1cmUgb2YgaW50ZXJuYWwKLXJlZmVyZW5jZXMgd2hpY2ggZ3JlYXRseSBzaW1wbGlmaWVkIGluaXRpYWwgY29udmVyc2lvbiBvZiB0aGUgZmlsZS4KLQotVGhlIGNoYW5nZXMgcmVxdWlyZWQgZmVsbCBpbnRvIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllczoKLQotKiBUaGUgdG9wLWxldmVsICJXaGF0J3MgTmV3IiBzZWN0aW9uIGhlYWRlcnMgY2hhbmdlZCB0bzoKLQotICAgIFdoYXQncyBOZXcgaW4gUHl0aG9uIDIuMyBhbHBoYSAxPwotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgKlJlbGVhc2UgZGF0ZTogREQtTU1NLTIwMDIqCi0KLSAgTm90ZSB0aGF0IHRoZSByZWxlYXNlIGRhdGUgbGluZSBpcyBlbXBoYXNpemVkLCB3aXRoIGEgIioiIGF0IGVhY2gKLSAgZW5kLgotCi0qIFN1YnNlY3Rpb25zIGFyZSB1bmRlcmxpbmVkIHdpdGggYSBzaW5nbGUgcm93IG9mIGh5cGhlbnM6Ci0KLSAgICBUeXBlL2NsYXNzIHVuaWZpY2F0aW9uIGFuZCBuZXctc3R5bGUgY2xhc3NlcwotICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSogUGxhY2VzIHdoZXJlICJiYWxhbmNlZCIgc2luZ2xlIHF1b3RlcyB3ZXJlIHVzZWQgd2VyZSBjaGFuZ2VkIHRvIHVzZQotICBhcG9zdHJvcGhlcyBhcyBib3RoIHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIHF1b3RlIChgc3RyaW5nJyAtPiAnc3RyaW5nJykuCi0KLSogSW4gYSBmZXcgcGxhY2VzIGFzdGVyaXNrcyBuZWVkZWQgdG8gYmUgZXNjYXBlZCB3aGljaCB3b3VsZCBvdGhlcndpc2UgaGF2ZQotICBiZWVuIGludGVycHJldGVkIGFzIGJlZ2lubmluZyBibG9ja3Mgb2YgaXRhbGljIG9yIGJvbGQgdGV4dCwgZS5nLjoKLQotICAgIC0gVGhlIHR5cGUgb2YgdHBfZnJlZSBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gImBgdm9pZCAoKikoUHlPYmplY3QgKilgYCIKLSAgICAgIHRvICJgYHZvaWQgKCopKHZvaWQgKilgYCIuCi0KLSAgTm90ZSB0aGF0IG9ubHkgdGhlIGFzdGVyaXNrcyBwcmVjZWRlZCBieSB3aGl0ZXNwYWNlIG5lZWRlZCB0byBiZSBlc2NhcGVkLgotCi0qIE9uZSBpbnN0YW5jZSBvZiBhIHdvcmQgZW5kaW5nIHdpdGggYW4gdW5kZXJzY29yZSBuZWVkZWQgdG8gYmUgcXVvdGVkCi0gICgiUHlDbXBfIiBiZWNhbWUgImBgUHlDbXBfYGAiKS4KLQotKiBPbmUgdGFibGUgd2FzIGNvbnZlcnRlZCB0byBSZVNUIGZvcm0gKHNlYXJjaCBNaXNjL05FV1MgZm9yICJOZXcgY29kZWNzIgotICBmb3IgdGhpcyBleGFtcGxlKS4KLQotKiBBIGZldyBwbGFjZXMgd2hlcmUgY2h1bmtzIG9mIGNvZGUgb3IgaW5kZW50ZWQgdGV4dCB3ZXJlIGRpc3BsYXllZCBuZWVkZWQKLSAgdG8gYmUgcHJvcGVybHkgaW50cm9kdWNlZCAocHJlY2VkaW5nIHBhcmFncmFwaCB0ZXJtaW5hdGVkIGJ5ICI6OiIgYW5kIHRoZQotICBjaHVuayBvZiBjb2RlIG9yIHRleHQgaW5kZW50ZWQgdy5yLnQuIHRoZSBwYXJhZ3JhcGgpLiAgRm9yIGV4YW1wbGU6Ci0KLSAgICAtIE5vdGUgdGhhdCBQeUxvbmdfQXNEb3VibGUgY2FuIGZhaWwhICBUaGlzIGhhcyBhbHdheXMgYmVlbiB0cnVlLAotICAgICAgYnV0IG5vIGNhbGxlcnMgY2hlY2tlZCBmb3IgaXQuICBJdCdzIG1vcmUgbGlrZWx5IHRvIGZhaWwgbm93LAotICAgICAgYmVjYXVzZSBvdmVyZmxvdyBlcnJvcnMgYXJlIHByb3Blcmx5IGRldGVjdGVkIG5vdy4gIFRoZSBwcm9wZXIgd2F5Ci0gICAgICB0byBjaGVjazo6Ci0KLSAgICAgICAgICBkb3VibGUgeCA9IFB5TG9uZ19Bc0RvdWJsZShzb21lX2xvbmdfb2JqZWN0KTsKLSAgICAgICAgICBpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgLyogVGhlIGNvbnZlcnNpb24gZmFpbGVkLiAqLwotICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9NaXNjL1BVUklGWS5SRUFETUUgYi9NaXNjL1BVUklGWS5SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNWQyYWMuLjAwMDAwMDAKLS0tIGEvTWlzYy9QVVJJRlkuUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotUHVyaWZ5ICh0bSkgYW5kIFF1YW50aWZ5ICh0bSkgYXJlIGNvbW1lcmNpYWwgc29mdHdhcmUgcXVhbGl0eQotYXNzdXJhbmNlIHRvb2xzIGF2YWlsYWJsZSBmcm9tIElCTSA8aHR0cDovL3d3dy5pYm0uY29tL3NvZnR3YXJlL3JhdGlvbmFsLz4uCi1QdXJpZnkgaXMgZXNzZW50aWFsbHkgYSBtZW1vcnkgYWNjZXNzCi12ZXJpZmllciBhbmQgbGVhayBkZXRlY3RvcjsgUXVhbnRpZnkgaXMgYSBDIGxldmVsIHByb2ZpbGVyLiAgVGhlIHJlc3QKLW9mIHRoaXMgZmlsZSBhc3N1bWVzIHlvdSBnZW5lcmFsbHkga25vdyBob3cgdG8gdXNlIFB1cmlmeSBhbmQKLVF1YW50aWZ5LCBhbmQgdGhhdCB5b3UgaGF2ZSBpbnN0YWxsZWQgdmFsaWQgbGljZW5zZXMgZm9yIHRoZXNlCi1wcm9kdWN0cy4gIElmIHlvdSBoYXZlbid0IGluc3RhbGxlZCBzdWNoIGxpY2Vuc2VzLCB5b3UgY2FuIGlnbm9yZSB0aGUKLWZvbGxvd2luZyBzaW5jZSBpdCB3b24ndCBoZWxwIHlvdSBhIGJpdCEKLQotWW91IGNhbiBlYXNpbHkgYnVpbGQgYSBQdXJpZnkgb3IgUXVhbnRpZnkgaW5zdHJ1bWVudGVkIHZlcnNpb24gb2YgdGhlCi1QeXRob24gaW50ZXJwcmV0ZXIgYnkgcGFzc2luZyB0aGUgUFVSSUZZIHZhcmlhYmxlIHRvIHRoZSBtYWtlIGNvbW1hbmQKLWF0IHRoZSB0b3Agb2YgdGhlIFB5dGhvbiB0cmVlOgotCi0gICAgbWFrZSBQVVJJRlk9cHVyaWZ5Ci0KLVRoaXMgYXNzdW1lcyB0aGF0IHRoZSBgcHVyaWZ5JyBwcm9ncmFtIGlzIG9uIHlvdXIgJFBBVEguICBOb3RlIHRoYXQKLXlvdSBjYW5ub3QgYm90aCBQdXJpZnkgYW5kIFF1YW50aWZ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgKG9yIGFueQotcHJvZ3JhbSBmb3IgdGhhdCBtYXR0ZXIpIGF0IHRoZSBzYW1lIHRpbWUuICBJZiB5b3Ugd2FudCB0byBidWlsZCBhCi1RdWFudGlmeSdkIGludGVycHJldGVyLCBkbyB0aGlzOgotCi0gICAgbWFrZSBQVVJJRlk9cXVhbnRpZnkKLQotU3RhcnRpbmcgd2l0aCBQeXRob24gMi4zLCBweW1hbGxvYyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuICBUaGlzCi13aWxsIGNhdXNlIG1hbnkgc3VwdXJpb3VzIHdhcm5pbmdzLiAgTW9kaWZ5IE9iamVjdHMvb2JtYWxsb2MuYwotYW5kIGVuYWJsZSBQeV9VU0lOR19NRU1PUllfREVCVUdHRVIgYnkgdW5jb21tZW50aW5nIGl0LgotUkVBRE1FLnZhbGdyaW5kIGhhcyBtb3JlIGRldGFpbHMgYWJvdXQgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotU2VlIGJlbG93IGFib3V0IHNldHRpbmcgdXAgc3VwcHJlc3Npb25zLiAgU29tZSB0ZXN0cyBtYXkgbm90Ci1ydW4gd2VsbCB3aXRoIFB1cmlmeSBkdWUgdG8gaGVhdnkgbWVtb3J5IG9yIENQVSB1c2FnZS4gIFRoZXNlCi10ZXN0cyBtYXkgaW5jbHVkZTogdGVzdF9sYXJnZWZpbGUsIHRlc3RfaW1wb3J0LCBhbmQgdGVzdF9sb25nLgotCi1QbGVhc2UgcmVwb3J0IGFueSBmaW5kaW5ncyAocHJvYmxlbXMgb3Igbm8gd2FybmluZ3MpIHRvIHB5dGhvbi1kZXZAcHl0aG9uLm9yZy4KLUl0IG1heSBiZSB1c2VmdWwgdG8gc3VibWl0IGEgYnVnIHJlcG9ydCBmb3IgYW55IHByb2JsZW1zLiAgCi0KLVdoZW4gcnVubmluZyB0aGUgcmVncmVzc2lvbiB0ZXN0IChtYWtlIHRlc3QpLCBJIGhhdmUgZm91bmQgaXQgdXNlZnVsCi10byBzZXQgbXkgUFVSSUZZT1BUSU9OUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB1c2luZyB0aGUgZm9sbG93aW5nCi0oYmFzaCkgc2hlbGwgZnVuY3Rpb24uICBDaGVjayBvdXQgdGhlIFB1cmlmeSBkb2N1bWVudGF0aW9uIGZvcgotZGV0YWlsczoKLQotcCgpIHsKLSAgY2hhaW5sZW49Jy1jaGFpbi1sZW5ndGg9MTInCi0gIGlnbm9yZXNpZ3M9Jy1pZ25vcmUtc2lnbmFscz0iU0lHSFVQLFNJR0lOVCxTSUdRVUlULFNJR0lMTCxTSUdUUkFQLFNJR0FWUlQsU0lHRU1ULFNJR0ZQRSxTSUdLSUxMLFNJR0JVUyxTSUdTRUdWLFNJR1BJUEUsU0lHVEVSTSxTSUdVU1IxLFNJR1VTUjIsU0lHUE9MTCxTSUdYQ1BVLFNJR1hGU1osU0lHRlJFRVpFLFNJR1RIQVcsU0lHUlRNSU4sU0lHUlRNQVgiJwotICBmb2xsb3djaGlsZD0nLWZvbGxvdy1jaGlsZC1wcm9jZXNzZXM9eWVzJwotICB0aHJlYWRzPSctbWF4LXRocmVhZHM9NTAnCi0gIGV4cG9ydCBQVVJJRllPUFRJT05TPSIkY2hhaW5sZW4gJGlnbm9yZXNpZ3MgJGZvbGxvd2NoaWxkICR0aHJlYWRzIgotICBlY2hvICRQVVJJRllPUFRJT05TCi19Ci0KLU5vdGUgdGhhdCB5b3UgbWF5IHdhbnQgdG8gY3JhbmsgLWNoYWluLWxlbmd0aCB1cCBldmVuIGZ1cnRoZXIuICBBCi12YWx1ZSBvZiAyMCBzaG91bGQgZ2V0IHlvdSB0aGUgZW50aXJlIHN0YWNrIHVwIGludG8gdGhlIFB5dGhvbiBDIGNvZGUKLWluIGFsbCBzaXR1YXRpb25zLgotCi1XaXRoIHRoZSByZWdyZXNzaW9uIHRlc3Qgb24gYSBmYXRseSBjb25maWd1cmVkIGludGVycHJldGVyCi0oaS5lLiBpbmNsdWRpbmcgYXMgbWFueSBtb2R1bGVzIGFzIHBvc3NpYmxlIGluIHlvdXIgTW9kdWxlcy9TZXR1cAotZmlsZSksIHlvdSdsbCBwcm9iYWJseSBnZXQgYSBnYWJpbGxpb24gVU1SIGVycm9ycywgYW5kIGEgZmV3IE1MSwotZXJyb3JzLiAgSSB0aGluayBtb3N0IG9mIHRoZXNlIGNhbiBiZSBzYWZlbHkgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHRoZQotZm9sbG93aW5nIGluIHlvdXIgLnB1cmlmeSBmaWxlOgotCi0gICAgc3VwcHJlc3MgdW1yIC4uLjsgInNvY2tldG1vZHVsZS5jIgotICAgIHN1cHByZXNzIHVtciAuLi47IHRpbWVfc3RyZnRpbWUKLSAgICBzdXBwcmVzcyB1bXIgLi4uOyAiZGJtbW9kdWxlLmMiCi0gICAgc3VwcHJlc3MgdW1yIC4uLjsgImdkYm1tb2R1bGUuYyIKLSAgICBzdXBwcmVzcyB1bXIgLi4uOyAiZ3JwbW9kdWxlLmMiCi0gICAgc3VwcHJlc3MgdW1yIC4uLjsgIm5pc21vZHVsZS5jIgotICAgIHN1cHByZXNzIHVtciAuLi47ICJwd2Rtb2R1bGUuYyIKLQotTm90ZTogdGhpcyBsaXN0IGlzIHZlcnkgb2xkIGFuZCBtYXkgbm90IGJlIGFjY3VyYXRlIGFueSBsb25nZXIuCi1JdCdzIHBvc3NpYmxlIHNvbWUgb2YgdGhlc2Ugbm8gbG9uZ2VyIG5lZWQgdG8gYmUgc3VwcHJlc3NlZC4KLVlvdSB3aWxsIGFsc28gbmVlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyAoYXQgbGVhc3QgdW1yKQotZnJvbSBQeV9BRERSRVNTX0lOX1JBTkdFLgotCi1UaGlzIHdpbGwgc3RpbGwgbGVhdmUgeW91IHdpdGgganVzdCBhIGZldyBVTVIsIG1vc3RseSBpbiB0aGUgcmVhZGxpbmUKLWxpYnJhcnksIHdoaWNoIHlvdSBjYW4gc2FmZWx5IGlnbm9yZS4gIEEgbG90IG9mIHdvcmsgaGFzIGdvbmUgaW50bwotUHl0aG9uIDEuNSB0byBwbHVnIGFzIG1hbnkgbGVha3MgYXMgcG9zc2libGUuCi0KLVVzaW5nIFB1cmlmeSBvciBRdWFudGlmeSBpbiB0aGlzIHdheSB3aWxsIGdpdmUgeW91IGNvYXJzZSBncmFpbmVkCi1yZXBvcnRzIG9uIHRoZSB3aG9sZSBQeXRob24gaW50ZXJwcmV0ZXIuICBZb3UgY2FuIGFjdHVhbGx5IGdldCBtb3JlCi1maW5lIGdyYWluZWQgY29udHJvbCBvdmVyIGJvdGggYnkgbGlua2luZyB3aXRoIHRoZSBvcHRpb25hbCBgcHVyZScKLW1vZHVsZSwgd2hpY2ggZXhwb3J0cyAobW9zdCBvZikgdGhlIFB1cmlmeSBhbmQgUXVhbnRpZnkgQyBBUEkncyBpbnRvCi1QeXRob24uICBUbyBsaW5rIGluIHRoaXMgbW9kdWxlIChpdCBtdXN0IGJlIHN0YXRpY2FsbHkgbGlua2VkKSwgZWRpdAoteW91ciBNb2R1bGVzL1NldHVwIGZpbGUgZm9yIHlvdXIgc2l0ZSwgYW5kIHJlYnVpbGQgdGhlIGludGVycHJldGVyLgotWW91IG1pZ2h0IHdhbnQgdG8gY2hlY2sgb3V0IHRoZSBjb21tZW50cyBpbiB0aGUgTW9kdWxlcy9wdXJlbW9kdWxlLmMKLWZpbGUgZm9yIHNvbWUgaWRpb3N5bmNyYXNpZXMuCi0KLVVzaW5nIHRoaXMgbW9kdWxlLCB5b3UgY2FuIGFjdHVhbGx5IHByb2ZpbGUgb3IgbGVhayB0ZXN0IGEgc21hbGwKLXNlY3Rpb24gb2YgY29kZSwgaW5zdGVhZCBvZiB0aGUgd2hvbGUgaW50ZXJwcmV0ZXIuICBVc2luZyB0aGlzIGluCi1jb25qdWN0aW9uIHdpdGggcGRiLnB5LCBkYngsIG9yIHRoZSBwcm9maWxlci5weSBtb2R1bGUgcmVhbGx5IGdpdmVzCi15b3UgcXVpdGUgYSBiaXQgb2YgaW50cm9zcGVjdGl2ZSBwb3dlci4KLQotTmF0dXJhbGx5IHRoZXJlIGFyZSBhIGNvdXBsZSBvZiBjYXZlYXRzLiAgVGhpcyBoYXMgb25seSBiZWVuIHRlc3RlZAotd2l0aCBQdXJpZnkgNC4wLjEgYW5kIFF1YW50aWZ5IDIuMS1iZXRhIG9uIFNvbGFyaXMgMi41LiAgUHVyaWZ5IDQuMC4xCi1kb2VzIG5vdCB3b3JrIHdpdGggU29sYXJpcyAyLjYsIGJ1dCBQdXJpZnkgNC4xIHdoaWNoIHJlcG9ydGVkbHkgd2lsbCwKLWlzIGN1cnJlbnRseSBpbiBiZXRhIHRlc3QuICBUaGVyZSBhcmUgZnVua3kgcHJvYmxlbXMgd2hlbiBQdXJpZnknaW5nIGEgCi1QeXRob24gaW50ZXJwcmV0ZXIgYnVpbGQgd2l0aCB0aHJlYWRzLiAgSSd2ZSBoYWQgYSBsb3Qgb2YgcHJvYmxlbXMKLWdldHRpbmcgdGhpcyB0byB3b3JrLCBzbyBJIGdlbmVyYWxseSBkb24ndCBidWlsZCB3aXRoIHRocmVhZHMgd2hlbiBJJ20gCi1QdXJpZnknaW5nLiAgSWYgeW91IGdldCB0aGlzIHRvIHdvcmssIGxldCB1cyBrbm93IQotCi0tQmFycnkgV2Fyc2F3IDxid2Fyc2F3QGNucmkucmVzdG9uLnZhLnVzPgpkaWZmIC0tZ2l0IGEvTWlzYy9SRUFETUUgYi9NaXNjL1JFQURNRQppbmRleCBhZjZlOGU4Li5iYjk4YjNkIDEwMDY0NAotLS0gYS9NaXNjL1JFQURNRQorKysgYi9NaXNjL1JFQURNRQpAQCAtNywyNyArNywzNyBAQAogRmlsZXMgZm91bmQgaGVyZQogLS0tLS0tLS0tLS0tLS0tLQogCi1BQ0tTCQlBY2tub3dsZWRnZW1lbnRzCi1BSVgtTk9URVMJTm90ZXMgZm9yIGJ1aWxkaW5nIFB5dGhvbiBvbiBBSVgKLUJlT1MtTk9URVMJTm90ZXMgZm9yIGJ1aWxkaW5nIG9uIEJlT1MKLUJlT1Mtc2V0dXAucHkJc2V0dXAucHkgcmVwbGFjZW1lbnQgZm9yIEJlT1MsIHNlZSBCZU9TLU5PVEVTCi1jaGVhdHNoZWV0CVF1aWNrIHN1bW1hcnkgb2YgUHl0aG9uIGJ5IEtlbiBNYW5oZWltZXIKLWZpbmRfcmVjdXJzaW9ubGltaXQucHkgIFNjcmlwdCB0byBmaW5kIGEgdmFsdWUgZm9yIHN5cy5tYXhyZWN1cnNpb25saW1pdAotZ2RiaW5pdAkJSGFuZHkgc3R1ZmYgdG8gcHV0IGluIHlvdXIgLmdkYmluaXQgZmlsZSwgaWYgeW91IHVzZSBnZGIKLUhJU1RPUlkJCU5ld3MgZnJvbSBwcmV2aW91cyByZWxlYXNlcyAtLSBvbGRlc3QgbGFzdAotSFBVWC1OT1RFUwlOb3RlcyBhYm91dCBkeW5hbWljIGxvYWRpbmcgdW5kZXIgSFAtVVgKLWluZGVudC5wcm8JR05VIGluZGVudCBwcm9maWxlIGFwcHJveGltYXRpbmcgbXkgQyBzdHlsZQotTkVXUwkJTmV3cyBmb3IgdGhpcyByZWxlYXNlIChmb3Igc29tZSBtZWFuaW5nIG9mICJ0aGlzIikKLVBvcnRpbmcJCU1pbmktRkFRIG9uIHBvcnRpbmcgdG8gbmV3IHBsYXRmb3JtcwotUFVSSUZZLlJFQURNRQlJbmZvcm1hdGlvbiBmb3IgUHVyaWZ5IHVzZXJzCi1weW1lbWNvbXBhdC5oCU1lbW9yeSBpbnRlcmZhY2UgY29tcGF0aWJpbGl0eSBmaWxlLgotcHl0aG9uLm1hbglVTklYIG1hbiBwYWdlIGZvciB0aGUgcHl0aG9uIGludGVycHJldGVyCi1weXRob24tbW9kZS5lbAlFbWFjcyBtb2RlIGZvciBlZGl0aW5nIFB5dGhvbiBwcm9ncmFtcwotUkVBRE1FCQlUaGUgZmlsZSB5b3UncmUgcmVhZGluZyBub3cKLVJFQURNRS52YWxncmluZAlJbmZvcm1hdGlvbiBmb3IgVmFsZ3JpbmQgdXNlcnMsIHNlZSB2YWxncmluZC1weXRob24uc3VwcAotUkZECQlSZXF1ZXN0IEZvciBEaXNjdXNzaW9uIGFib3V0IGEgUHl0aG9uIG5ld3Nncm91cAotUlBNCQkoT2xkKSB0b29scyB0byBidWlsZCBSUE1zCi1TcGVjaWFsQnVpbGRzLnR4dCAgICAgRGVzY3JpYmVzIGV4dHJhIHN5bWJvbHMgeW91IGNhbiBzZXQgZm9yIGRlYnVnIGJ1aWxkcwotc2V0dWlkLXByb2cuYwlDIGhlbHBlciBwcm9ncmFtIGZvciBzZXQtdWlkIFB5dGhvbiBzY3JpcHRzCi12Z3JpbmRlZnMJUHl0aG9uIGNvbmZpZ3VyYXRpb24gZm9yIHZncmluZCAoYSBnZW5lcmljIHByZXR0eSBwcmludGVyKQotdmFsZ3JpbmQtcHl0aG9uLnN1cHAJVmFsZ3JpbmQgc3VwcHJlc3Npb24gZmlsZSwgc2VlIFJFQURNRS52YWxncmluZAorQUNLUyAgICAgICAgICAgICAgICAgICAgQWNrbm93bGVkZ2VtZW50cworQUlYLU5PVEVTICAgICAgICAgICAgICAgTm90ZXMgZm9yIGJ1aWxkaW5nIFB5dGhvbiBvbiBBSVgKK0JlT1MtTk9URVMgICAgICAgICAgICAgIE5vdGVzIGZvciBidWlsZGluZyBvbiBCZU9TCitCZU9TLXNldHVwLnB5ICAgICAgICAgICBzZXR1cC5weSByZXBsYWNlbWVudCBmb3IgQmVPUywgc2VlIEJlT1MtTk9URVMKK2J1aWxkLnNoICAgICAgICAgICAgICAgIFNjcmlwdCB0byBidWlsZCBhbmQgdGVzdCBsYXRlc3QgUHl0aG9uIGZyb20gdGhlIHJlcG9zaXRvcnkKK2NoZWF0c2hlZXQgICAgICAgICAgICAgIFF1aWNrIHN1bW1hcnkgb2YgUHl0aG9uIGJ5IEtlbiBNYW5oZWltZXIKK2RldmVsb3BlcnMudHh0ICAgICAgICAgIEEgaGlzdG9yeSBvZiB3aG8gZ290IGRldmVsb3BlciBwZXJtaXNzaW9ucywgYW5kIHdoeQorZ2RiaW5pdCAgICAgICAgICAgICAgICAgSGFuZHkgc3R1ZmYgdG8gcHV0IGluIHlvdXIgLmdkYmluaXQgZmlsZSwgaWYgeW91IHVzZSBnZGIKK0hJU1RPUlkgICAgICAgICAgICAgICAgIE5ld3MgZnJvbSBwcmV2aW91cyByZWxlYXNlcyAtLSBvbGRlc3QgbGFzdAoraW5kZW50LnBybyAgICAgICAgICAgICAgR05VIGluZGVudCBwcm9maWxlIGFwcHJveGltYXRpbmcgbXkgQyBzdHlsZQorbWFpbnRhaW5lcnMucnN0ICAgICAgICAgQSBsaXN0IG9mIG1haW50YWluZXJzIGZvciBsaWJyYXJ5IG1vZHVsZXMKK05FV1MgICAgICAgICAgICAgICAgICAgIE5ld3MgZm9yIHRoaXMgcmVsZWFzZSAoZm9yIHNvbWUgbWVhbmluZyBvZiAidGhpcyIpCitORVdTLmhlbHAgICAgICAgICAgICAgICBIb3cgdG8gZWRpdCBORVdTCitQb3J0aW5nICAgICAgICAgICAgICAgICBNaW5pLUZBUSBvbiBwb3J0aW5nIHRvIG5ldyBwbGF0Zm9ybXMKK1BVUklGWS5SRUFETUUgICAgICAgICAgIEluZm9ybWF0aW9uIGZvciBQdXJpZnkgdXNlcnMKK3B5bWVtY29tcGF0LmggICAgICAgICAgIE1lbW9yeSBpbnRlcmZhY2UgY29tcGF0aWJpbGl0eSBmaWxlLgorcHl0aG9uLWNvbmZpZy5pbiAgICAgICAgUHl0aG9uIHNjcmlwdCB0ZW1wbGF0ZSBmb3IgcHl0aG9uLWNvbmZpZworcHl0aG9uLm1hbiAgICAgICAgICAgICAgVU5JWCBtYW4gcGFnZSBmb3IgdGhlIHB5dGhvbiBpbnRlcnByZXRlcgorcHl0aG9uLW1vZGUuZWwgICAgICAgICAgRW1hY3MgbW9kZSBmb3IgZWRpdGluZyBQeXRob24gcHJvZ3JhbXMKK3B5dGhvbi5wYy5pbiAgICAgICAgICAgIFBhY2thZ2UgY29uZmlndXJhdGlvbiBpbmZvIHRlbXBsYXRlIGZvciBwa2ctY29uZmlnCitweXRob24td2luZy53cHIgICAgICAgICBXaW5nIElERSBwcm9qZWN0IGZpbGUKK1JFQURNRSAgICAgICAgICAgICAgICAgIFRoZSBmaWxlIHlvdSdyZSByZWFkaW5nIG5vdworUkVBRE1FLmNvdmVyaXR5ICAgICAgICAgSW5mb3JtYXRpb24gYWJvdXQgcnVubmluZyBDb3Zlcml0eSdzIFByZXZlbnQgb24gUHl0aG9uCitSRUFETUUua2xvY3dvcmsgICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBydW5uaW5nIEtsb2N3b3JrJ3MgSzcgb24gUHl0aG9uCitSRUFETUUuT3BlbkJTRCAgICAgICAgICBIZWxwIGZvciBidWlsZGluZyBwcm9ibGVtcyBvbiBPcGVuQlNECitSRUFETUUudmFsZ3JpbmQgICAgICAgICBJbmZvcm1hdGlvbiBmb3IgVmFsZ3JpbmQgdXNlcnMsIHNlZSB2YWxncmluZC1weXRob24uc3VwcAorUkZEICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdCBGb3IgRGlzY3Vzc2lvbiBhYm91dCBhIFB5dGhvbiBuZXdzZ3JvdXAKK1JQTSAgICAgICAgICAgICAgICAgICAgIChPbGQpIHRvb2xzIHRvIGJ1aWxkIFJQTXMKK3NldHVpZC1wcm9nLmMgICAgICAgICAgIEMgaGVscGVyIHByb2dyYW0gZm9yIHNldC11aWQgUHl0aG9uIHNjcmlwdHMKK1NwZWNpYWxCdWlsZHMudHh0ICAgICAgIERlc2NyaWJlcyBleHRyYSBzeW1ib2xzIHlvdSBjYW4gc2V0IGZvciBkZWJ1ZyBidWlsZHMKK1RleHRNYXRlICAgICAgICAgICAgICAgIEEgVGV4dE1hdGUgYnVuZGxlIGZvciBQeXRob24gZGV2ZWxvcG1lbnQKK3ZhbGdyaW5kLXB5dGhvbi5zdXBwICAgIFZhbGdyaW5kIHN1cHByZXNzaW9uIGZpbGUsIHNlZSBSRUFETUUudmFsZ3JpbmQKK3ZncmluZGVmcyAgICAgICAgICAgICAgIFB5dGhvbiBjb25maWd1cmF0aW9uIGZvciB2Z3JpbmQgKGEgZ2VuZXJpYyBwcmV0dHkgcHJpbnRlcikKK1ZpbSAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBkZXZlbG9wbWVudCB1dGlsaXRpZXMgZm9yIHRoZSBWaW0gZWRpdG9yCmRpZmYgLS1naXQgYS9NaXNjL1JFQURNRS5BSVggYi9NaXNjL1JFQURNRS5BSVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlNjQ3MgotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvUkVBRE1FLkFJWApAQCAtMCwwICsxLDEzNyBAQAorCitUaGlzIGRvY3VtZW50YXRpb24gdHJpZXMgdG8gaGVscCBwZW9wbGUgd2hvIGludGVuZCB0byB1c2UgUHl0aG9uIG9uCitBSVguCisKK1RoZXJlIHVzZWQgdG8gYmUgbWFueSBpc3N1ZXMgd2l0aCBQeXRob24gb24gQUlYLCBidXQgdGhlIG1ham9yIG9uZXMKK2hhdmUgYmVlbiBjb3JyZWN0ZWQgZm9yIHZlcnNpb24gMy4yLCBzbyB0aGF0IFB5dGhvbiBzaG91bGQgbm93IHdvcmsKK3JhdGhlciB3ZWxsIG9uIHRoaXMgcGxhdGZvcm0uIFRoZSByZW1haW5pbmcga25vd24gaXNzdWVzIGFyZSBsaXN0ZWQgaW4KK3RoaXMgZG9jdW1lbnQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJICAgQ29tcGlsaW5nIFB5dGhvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGNvbXBpbGUgUHl0aG9uIHdpdGggZ2NjIG9yIHRoZSBuYXRpdmUgQUlYIGNvbXBpbGVyLiBUaGUgbmF0aXZlCitjb21waWxlciB1c2VkIHRvIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlcyBvbiB0aGlzIHN5c3RlbSB3aXRoIG9sZGVyCit2ZXJzaW9ucyBvZiBQeXRob24uICBXaXRoIFB5dGhvbiAzLjIgaXQgbWF5IG5vdCBiZSB0aGUgY2FzZSBhbnltb3JlLAorYXMgdGhpcyBjb21waWxlciBkb2VzIG5vdCBhbGxvdyBjb21waWxpbmcgUHl0aG9uIHdpdGggY29tcHV0ZWQgZ290b3MuCitTb21lIGJlbmNobWFya3MgbmVlZCB0byBiZSBkb25lLgorCitDb21waWxpbmcgd2l0aCBnY2M6CisKK2NkIFB5dGhvbi0zLjIKK0NDPWdjYyBPUFQ9Ii1PMiIgLi9jb25maWd1cmUgLS1lbmFibGUtc2hhcmVkCittYWtlCisKK1RoZXJlIGFyZSB2YXJpb3VzIGFsaWFzZXMgZm9yIHRoZSBuYXRpdmUgY29tcGlsZXIuICBUaGUgcmVjb21tZW5kZWQKK2FsaWFzIGZvciBjb21waWxpbmcgUHl0aG9uIGlzICd4bGNfcicsIHdoaWNoIHByb3ZpZGVzIGEgYmV0dGVyIGxldmVsIG9mCitjb21wYXRpYmlsaXR5IGFuZCBoYW5kbGVzIHRocmVhZCBpbml0aWFsaXphdGlvbiBwcm9wZXJseS4KKworSXQgaXMgYSBnb29kIGlkZWEgdG8gYWRkIHRoZSAnLXFtYXhtZW09NzAwMDAnIG9wdGlvbiwgb3RoZXJ3aXNlIHRoZQorY29tcGlsZXIgY29uc2lkZXJzIHZhcmlvdXMgZmlsZXMgdG9vIGNvbXBsZXggdG8gb3B0aW1pemUuCisKK0NvbXBpbGluZyB3aXRoIHhsYzoKKworY2QgUHl0aG9uLTMuMgorQ0M9eGxjX3IgT1BUPSItTzIgLXFtYXhtZW09NzAwMDAiIC4vY29uZmlndXJlIC0td2l0aG91dC1jb21wdXRlZC1nb3RvcyAtLWVuYWJsZS1zaGFyZWQKK21ha2UKKworTm90ZToKK09uIEFJWCA1LjMgYW5kIGVhcmxpZXIsIHlvdSB3aWxsIGFsc28gbmVlZCB0byBzcGVjaWZ5IHRoZQorIi0tZGlzYWJsZS1pcHY2IiBmbGFnIHRvIGNvbmZpZ3VyZS4gVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQgaW4gQUlYCis2LjEuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJICBNZW1vcnkgTGltaXRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogdGhpcyBzZWN0aW9uIG1heSBub3QgYXBwbHkgd2hlbiBjb21waWxpbmcgUHl0aG9uIGFzIGEgNjQgYml0CithcHBsaWNhdGlvbi4KKworQnkgZGVmYXVsdCBvbiBBSVggZWFjaCBwcm9ncmFtIGdldHMgb25lIHNlZ21lbnQgcmVnaXN0ZXIgZm9yIGl0cyBkYXRhCitzZWdtZW50LiBBcyBlYWNoIHNlZ21lbnQgcmVnaXN0ZXIgY292ZXJzIDI1NiBNQiwgYSBQeXRob24gcHJvZ3JhbSB0aGF0Cit3b3VsZCB1c2UgbW9yZSB0aGFuIDI1Nk1CIHdpbGwgcmFpc2UgYSBNZW1vcnlFcnJvci4gIFRoZSBzdGFuZGFyZAorUHl0aG9uIHRlc3Qgc3VpdGUgaXMgb25lIHN1Y2ggYXBwbGljYXRpb24uCisKK1RvIGFsbG9jYXRlIG1vcmUgc2VnbWVudCByZWdpc3RlcnMgdG8gUHl0aG9uLCB5b3UgbXVzdCB1c2UgdGhlIGxpbmtlcgorb3B0aW9uIC1ibWF4ZGF0YSBvciB0aGUgbGRlZGl0IHRvb2wgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdQorbmVlZCBpbiB0aGUgZGF0YSBzZWdtZW50LgorCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gYWxsb3cgNTEyTUIgb2YgbWVtb3J5IGZvciBQeXRob24gKHRoaXMgaXMKK2Vub3VnaCBmb3IgdGhlIHRlc3Qgc3VpdGUgdG8gcnVuIHdpdGhvdXQgTWVtb3J5RXJyb3JzKSwgeW91IHNob3VsZCBydW4KK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uOgorCitsZGVkaXQgLWIgbWF4ZGF0YToweDIwMDAwMDAwIC4vcHl0aG9uCisKK1lvdSBjYW4gYWxsb3cgdXAgdG8gMkdCIG9mIG1lbW9yeSBmb3IgUHl0aG9uIGJ5IHVzaW5nIHRoZSB2YWx1ZQorMHg4MDAwMDAwMCBmb3IgbWF4ZGF0YS4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBnbyBiZXlvbmQgMkdCIG9mIG1lbW9yeSBieSBhY3RpdmF0aW5nIExhcmdlCitQYWdlIFVzZS4gWW91IHNob3VsZCBjb25zdWx0IHRoZSBJQk0gZG9jdW1lbnRhdGlvbiBpZiB5b3UgbmVlZCB0byB1c2UKK3RoaXMgb3B0aW9uLiBZb3UgY2FuIGFsc28gZm9sbG93IHRoZSBkaXNjdXNzaW9uIG9mIHRoaXMgcHJvYmxlbQoraW4gaXNzdWUgMTEyMTIgYXQgYnVncy5weXRob24ub3JnLgorCitodHRwOi8vcHVibGliLmJvdWxkZXIuaWJtLmNvbS9pbmZvY2VudGVyL2FpeC92NnIxL2luZGV4LmpzcD90b3BpYz0vY29tLmlibS5haXguY21kcy9kb2MvYWl4Y21kczMvbGRlZGl0Lmh0bQorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSAgICAgS25vd24gaXNzdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Rob3NlIGlzc3VlcyBhcmUgY3VycmVudGx5IGFmZmVjdGluZyBQeXRob24gb24gQUlYOgorCisqIFB5dGhvbiBoYXMgbm90IGJlZW4gZnVsbHkgdGVzdGVkIG9uIEFJWCB3aGVuIGNvbXBpbGVkIGFzIGEgNjQgYml0CisgIGFwcGxpY2F0aW9uLgorCisqIGlzc3VlIDM1MjY6IHRoZSBtZW1vcnkgdXNlZCBieSBhIFB5dGhvbiBwcm9jZXNzIHdpbGwgbmV2ZXIgYmUKKyAgcmVsZWFzZWQgdG8gdGhlIHN5c3RlbS4gSWYgeW91IGhhdmUgYSBQeXRob24gYXBwbGljYXRpb24gb24gQUlYIHRoYXQKKyAgdXNlcyBhIGxvdCBvZiBtZW1vcnksIHlvdSBzaG91bGQgcmVhZCB0aGlzIGlzc3VlIGFuZCB5b3UgbWF5CisgIGNvbnNpZGVyIHVzaW5nIHRoZSBwcm92aWRlZCBwYXRjaCB0aGF0IGltcGxlbWVudHMgYSBjdXN0b20gbWFsbG9jCisgIGltcGxlbWVudGF0aW9uCisKKyogaXNzdWUgMTExODQ6IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzIGlzIGN1cnJlbnRseSBicm9rZW4KKworKiBpc3N1ZSAxMTE4NTogb3Mud2FpdDQgZG9lcyBub3QgYmVoYXZlIGNvcnJlY3RseSB3aXRoIG9wdGlvbiBXTk9IQU5HCisKKyogaXNzdWUgMTc0NTEwODogdGhlcmUgbWF5IGJlIHNvbWUgcHJvYmxlbXMgd2l0aCBjdXJzZXMucGFuZWwKKworKiBpc3N1ZSAxMTE5MjogdGVzdF9zb2NrZXQgZmFpbHMKKworKiBpc3N1ZSAxMTE5MDogdGVzdF9sb2NhbGUgZmFpbHMKKworKiBpc3N1ZSAxMTE5MzogdGVzdF9zdWJwcm9jZXNzIGZhaWxzCisKKyogaXNzdWUgOTkyMDogbWlub3IgYXJpdGhtZXRpYyBpc3N1ZXMgaW4gY21hdGgKKworKiBpc3N1ZSAxMTIxNTogdGVzdF9maWxlaW8gZmFpbHMKKworKiBpc3N1ZSAxMTE4ODogdGVzdF90aW1lIGZhaWxzCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQlJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBkZXZlbG9wZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1B5dGhvbiBhbmQgcHl0aG9uIG1vZHVsZXMgY2FuIG5vdyBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWAorYXMgdXN1YWwuCisKK0FJWCBzaGFyZWQgbGlicmFyaWVzIHJlcXVpcmUgdGhhdCBhbiAiZXhwb3J0IiBhbmQgImltcG9ydCIgZmlsZSBiZQorcHJvdmlkZWQgYXQgY29tcGlsZSB0aW1lIHRvIGxpc3QgYWxsIGV4dGVybiBzeW1ib2xzIHdoaWNoIG1heSBiZQorc2hhcmVkIGJldHdlZW4gbW9kdWxlcy4gIFRoZSAiZXhwb3J0IiBmaWxlIChuYW1lZCBweXRob24uZXhwKSBmb3IgdGhlCittb2R1bGVzIGFuZCB0aGUgbGlicmFyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBQeXRob24gY29yZSBpcyBjcmVhdGVkIGJ5Cit0aGUgIm1ha2V4cF9haXgiIHNjcmlwdCBiZWZvcmUgcGVyZm9ybWluZyB0aGUgbGluayBvZiB0aGUgcHl0aG9uCitiaW5hcnkuIEl0IGxpc3RzIGFsbCBnbG9iYWwgc3ltYm9scyAoZXhwb3J0ZWQgZHVyaW5nIHRoZSBsaW5rKSBvZiB0aGUKK21vZHVsZXMgYW5kIHRoZSBsaWJyYXJpZXMgdGhhdCBtYWtlIHVwIHRoZSBweXRob24gZXhlY3V0YWJsZS4KKworV2hlbiBzaGFyZWQgbGlicmFyeSBtb2R1bGVzICguc28gZmlsZXMpIGFyZSBtYWRlLCBhIHNlY29uZCBzaGVsbAorc2NyaXB0IGlzIGludm9rZWQuICBUaGlzIHNjcmlwdCBpcyBuYW1lZCAibGRfc29fYWl4IiBhbmQgaXMgYWxzbworcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uIGluIHRoZSBNb2R1bGVzIHN1YmRpcmVjdG9yeS4gIFRoaXMKK3NjcmlwdCBhY3RzIGFzIGFuICJsZCIgd3JhcHBlciB3aGljaCBoaWRlcyB0aGUgZXhwbGljaXQgbWFuYWdlbWVudCBvZgorImV4cG9ydCIgYW5kICJpbXBvcnQiIGZpbGVzOyBpdCBhZGRzIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMgKGluIHRoZQorYXBwcm9wcmlhdGUgb3JkZXIpIHRvIHRoZSBsaW5rIGNvbW1hbmQgdGhhdCBjcmVhdGVzIHRoZSBzaGFyZWQgbW9kdWxlLgorQW1vbmcgb3RoZXIgdGhpbmdzLCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgInB5dGhvbi5leHAiIGZpbGUgaXMgYW4KKyJpbXBvcnQiIGZpbGUgZm9yIHRoZSBzaGFyZWQgbW9kdWxlLgorCitUaGlzIG1lY2hhbmlzbSBzaG91bGQgYmUgdHJhbnNwYXJlbnQuCmRpZmYgLS1naXQgYS9NaXNjL1JFQURNRS5FbWFjcyBiL01pc2MvUkVBRE1FLkVtYWNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YmIxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL1JFQURNRS5FbWFjcwpAQCAtMCwwICsxLDMyIEBACis9PT09PT09PT09PT09CitFbWFjcyBzdXBwb3J0Cis9PT09PT09PT09PT09CisKK0lmIHlvdSB3YW50IHRvIGVkaXQgUHl0aG9uIGNvZGUgaW4gRW1hY3MsIHlvdSBzaG91bGQgZG93bmxvYWQgcHl0aG9uLW1vZGUuZWwKK2FuZCBpbnN0YWxsIGl0IHNvbWV3aGVyZSBvbiB5b3VyIGxvYWQtcGF0aC4gIFNlZSB0aGUgcHJvamVjdCBwYWdlIHRvIGRvd25sb2FkOgorCisgICAgaHR0cHM6Ly9sYXVuY2hwYWQubmV0L3B5dGhvbi1tb2RlCisKK1doaWxlIEVtYWNzIGNvbWVzIHdpdGggYSBweXRob24uZWwgZmlsZSwgaXQgaXMgbm90IHJlY29tbWVuZGVkLgorcHl0aG9uLW1vZGUuZWwgaXMgbWFpbnRhaW5lZCBieSBjb3JlIFB5dGhvbiBkZXZlbG9wZXJzIGFuZCBpcyBnZW5lcmFsbHkKK2NvbnNpZGVyZWQgbW9yZSBQeXRob24gcHJvZ3JhbW1lciBmcmllbmRseS4gIEZvciBleGFtcGxlLCBweXRob24tbW9kZS5lbAoraW5jbHVkZXMgYSBraWxsZXIgZmVhdHVyZSBjYWxsZWQgYHBkYnRyYWNrYCB3aGljaCBhbGxvd3MgeW91IHRvIHNldCBhIHBkYgorYnJlYWtwb2ludCBpbiB5b3VyIGNvZGUsIHJ1biB5b3VyIHByb2dyYW0gaW4gYW4gRW1hY3Mgc2hlbGwgYnVmZmVyLCBhbmQgZG8gZ3VkCitzdHlsZSBkZWJ1Z2dpbmcgd2hlbiB0aGUgYnJlYWtwb2ludCBpcyBoaXQuCisKK3B5dGhvbi1tb2RlLmVsIGlzIGNvbXBhdGlibGUgd2l0aCBib3RoIEdOVSBFbWFjcyBmcm9tIHRoZSBGU0YsIGFuZCBYRW1hY3MuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBidWcgcmVwb3J0aW5nLCBzZWUgdGhlIGFib3ZlIHByb2plY3QgcGFnZS4gIEZvciBoZWxwLAorZGV2ZWxvcG1lbnQsIG9yIGRpc2N1c3Npb25zLCBzZWUgdGhlIHB5dGhvbi1tb2RlIG1haWxpbmcgbGlzdDoKKworICAgIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9weXRob24tbW9kZQorCisKKy4uCisgICBMb2NhbCBWYXJpYWJsZXM6CisgICBtb2RlOiBpbmRlbnRlZC10ZXh0CisgICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAgIHNlbnRlbmNlLWVuZC1kb3VibGUtc3BhY2U6IHQKKyAgIGZpbGwtY29sdW1uOiA3OAorICAgY29kaW5nOiB1dGYtOAorICAgRW5kOgpkaWZmIC0tZ2l0IGEvTWlzYy9SUE0vcHl0aG9uLTIuNi5zcGVjIGIvTWlzYy9SUE0vcHl0aG9uLTIuNy5zcGVjCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIE1pc2MvUlBNL3B5dGhvbi0yLjYuc3BlYwpyZW5hbWUgdG8gTWlzYy9SUE0vcHl0aG9uLTIuNy5zcGVjCmluZGV4IGJlODg3MTkuLmRjNDM3ZGQgMTAwNjQ0Ci0tLSBhL01pc2MvUlBNL3B5dGhvbi0yLjYuc3BlYworKysgYi9NaXNjL1JQTS9weXRob24tMi43LnNwZWMKQEAgLTM5LDggKzM5LDggQEAKIAogJWRlZmluZSBuYW1lIHB5dGhvbgogIy0tc3RhcnQgY29uc3RhbnRzLS0KLSVkZWZpbmUgdmVyc2lvbiAyLjYuNgotJWRlZmluZSBsaWJ2ZXIgMi42CislZGVmaW5lIHZlcnNpb24gMi43LjEKKyVkZWZpbmUgbGlidmVycyAyLjcKICMtLWVuZCBjb25zdGFudHMtLQogJWRlZmluZSByZWxlYXNlIDFweWRvdG9yZwogJWRlZmluZSBfX3ByZWZpeCAvdXNyCkBAIC02MSw3ICs2MSw3IEBACiBOYW1lOiAle25hbWV9JXtiaW5zdWZmaXh9CiBWZXJzaW9uOiAle3ZlcnNpb259CiBSZWxlYXNlOiAle3JlbGVhc2V9Ci1MaWNlbnNlOiBNb2RpZmllZCBDTlJJIE9wZW4gU291cmNlIExpY2Vuc2UKK0xpY2Vuc2U6IFBTRgogR3JvdXA6IERldmVsb3BtZW50L0xhbmd1YWdlcwogU291cmNlOiBQeXRob24tJXt2ZXJzaW9ufS50YXIuYnoyCiAlaWYgJXtpbmNsdWRlX2RvY3N9CmRpZmYgLS1naXQgYS9NaXNjL1NwZWNpYWxCdWlsZHMudHh0IGIvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dAppbmRleCAyNWJiNmQxLi5mODY5ZTdjIDEwMDY0NAotLS0gYS9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CisrKyBiL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKQEAgLTEsMTcgKzEsMjAgQEAKLVRoaXMgZmlsZSBkZXNjcmliZXMgc29tZSBzcGVjaWFsIFB5dGhvbiBidWlsZCB0eXBlcyBlbmFibGVkIHZpYQotY29tcGlsZS10aW1lIHByZXByb2Nlc3NvciBkZWZpbmVzLgorVGhpcyBmaWxlIGRlc2NyaWJlcyBzb21lIHNwZWNpYWwgUHl0aG9uIGJ1aWxkIHR5cGVzIGVuYWJsZWQgdmlhIGNvbXBpbGUtdGltZQorcHJlcHJvY2Vzc29yIGRlZmluZXMuCiAKLUl0IGlzIGJlc3QgdG8gZGVmaW5lIHRoZXNlIG9wdGlvbnMgaW4gdGhlIEVYVFJBX0NGTEFHUyBtYWtlIHZhcmlhYmxlOworSU1QT1JUQU5UOiBpZiB5b3Ugd2FudCB0byBidWlsZCBhIGRlYnVnLWVuYWJsZWQgUHl0aG9uLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0Cit5b3UgdXNlIGBgLi9jb25maWd1cmUgLS13aXRoLXB5ZGVidWdgYCwgcmF0aGVyIHRoYW4gdGhlIG9wdGlvbnMgbGlzdGVkIGhlcmUuCisKK0hvd2V2ZXIsIGlmIHlvdSB3aXNoIHRvIGRlZmluZSBzb21lIG9mIHRoZXNlIG9wdGlvbnMgaW5kaXZpZHVhbGx5LCBpdCBpcyBiZXN0Cit0byBkZWZpbmUgdGhlbSBpbiB0aGUgRVhUUkFfQ0ZMQUdTIG1ha2UgdmFyaWFibGU7CiBgYG1ha2UgRVhUUkFfQ0ZMQUdTPSItRFB5X1JFRl9ERUJVRyJgYC4KIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QeV9SRUZfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9kdWNlZCBpbiAxLjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lZCBSRUZfREVCVUcgYmVmb3JlIDEuNAogCi1UdXJuIG9uIGFnZ3JlZ2F0ZSByZWZlcmVuY2UgY291bnRpbmcuICBUaGlzIGFycmFuZ2VzIHRoYXQgZXh0ZXJuCi1fUHlfUmVmVG90YWwgaG9sZCBhIGNvdW50IG9mIGFsbCByZWZlcmVuY2VzLCB0aGUgc3VtIG9mIG9iX3JlZmNudCBhY3Jvc3MKLWFsbCBvYmplY3RzLiAgSW4gYSBkZWJ1Zy1tb2RlIGJ1aWxkLCB0aGlzIGlzIHdoZXJlIHRoZSAiODI4OCIgY29tZXMgZnJvbQotaW4KK1B5X1JFRl9ERUJVRworLS0tLS0tLS0tLS0tCisKK1R1cm4gb24gYWdncmVnYXRlIHJlZmVyZW5jZSBjb3VudGluZy4gIFRoaXMgYXJyYW5nZXMgdGhhdCBleHRlcm4gX1B5X1JlZlRvdGFsCitob2xkIGEgY291bnQgb2YgYWxsIHJlZmVyZW5jZXMsIHRoZSBzdW0gb2Ygb2JfcmVmY250IGFjcm9zcyBhbGwgb2JqZWN0cy4gIEluIGEKK2RlYnVnLW1vZGUgYnVpbGQsIHRoaXMgaXMgd2hlcmUgdGhlICI4Mjg4IiBjb21lcyBmcm9tIGluCiAKICAgICA+Pj4gMjMKICAgICAyMwpAQCAtMTksNzUgKzIyLDcyIEBACiAgICAgPj4+CiAKIE5vdGUgdGhhdCBpZiB0aGlzIGNvdW50IGluY3JlYXNlcyB3aGVuIHlvdSdyZSBub3Qgc3RvcmluZyBhd2F5IG5ldyBvYmplY3RzLAotdGhlcmUncyBwcm9iYWJseSBhIGxlYWsuICBSZW1lbWJlciwgdGhvdWdoLCB0aGF0IGluIGludGVyYWN0aXZlIG1vZGUgdGhlCi1zcGVjaWFsIG5hbWUgIl8iIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBsYXN0IHJlc3VsdCBkaXNwbGF5ZWQhCit0aGVyZSdzIHByb2JhYmx5IGEgbGVhay4gIFJlbWVtYmVyLCB0aG91Z2gsIHRoYXQgaW4gaW50ZXJhY3RpdmUgbW9kZSB0aGUgc3BlY2lhbAorbmFtZSAiXyIgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIGxhc3QgcmVzdWx0IGRpc3BsYXllZCEKIAotUHlfUkVGX0RFQlVHIGFsc28gY2hlY2tzIGFmdGVyIGV2ZXJ5IGRlY3JlZiB0byB2ZXJpZnkgdGhhdCB0aGUgcmVmY291bnQKLWhhc24ndCBnb25lIG5lZ2F0aXZlLCBhbmQgY2F1c2VzIGFuIGltbWVkaWF0ZSBmYXRhbCBlcnJvciBpZiBpdCBoYXMuCitQeV9SRUZfREVCVUcgYWxzbyBjaGVja3MgYWZ0ZXIgZXZlcnkgZGVjcmVmIHRvIHZlcmlmeSB0aGF0IHRoZSByZWZjb3VudCBoYXNuJ3QKK2dvbmUgbmVnYXRpdmUsIGFuZCBjYXVzZXMgYW4gaW1tZWRpYXRlIGZhdGFsIGVycm9yIGlmIGl0IGhhcy4KIAogU3BlY2lhbCBnaW1taWNrczoKIAogc3lzLmdldHRvdGFscmVmY291bnQoKQogICAgIFJldHVybiBjdXJyZW50IHRvdGFsIG9mIGFsbCByZWZjb3VudHMuCi0gICAgQXZhaWxhYmxlIHVuZGVyIFB5X1JFRl9ERUJVRyBpbiBQeXRob24gMi4zLgotICAgIEJlZm9yZSAyLjMsIFB5X1RSQUNFX1JFRlMgd2FzIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QeV9UUkFDRV9SRUZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9kdWNlZCBpbiAxLjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVkIFRSQUNFX1JFRlMgYmVmb3JlIDEuNAogCi1UdXJuIG9uIGhlYXZ5IHJlZmVyZW5jZSBkZWJ1Z2dpbmcuICBUaGlzIGlzIG1ham9yIHN1cmdlcnkuICBFdmVyeSBQeU9iamVjdAotZ3Jvd3MgdHdvIG1vcmUgcG9pbnRlcnMsIHRvIG1haW50YWluIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGFsbCBsaXZlCi1oZWFwLWFsbG9jYXRlZCBvYmplY3RzLiAgTW9zdCBidWlsdC1pbiB0eXBlIG9iamVjdHMgYXJlIG5vdCBpbiB0aGlzIGxpc3QsCi1hcyB0aGV5J3JlIHN0YXRpY2FsbHkgYWxsb2NhdGVkLiAgU3RhcnRpbmcgaW4gUHl0aG9uIDIuMywgaWYgQ09VTlRfQUxMT0NTCi0oc2VlIGJlbG93KSBpcyBhbHNvIGRlZmluZWQsIGEgc3RhdGljIHR5cGUgb2JqZWN0IFQgZG9lcyBhcHBlYXIgaW4gdGhpcwotbGlzdCBpZiBhdCBsZWFzdCBvbmUgb2JqZWN0IG9mIHR5cGUgVCBoYXMgYmVlbiBjcmVhdGVkLgorCitQeV9UUkFDRV9SRUZTCistLS0tLS0tLS0tLS0tCisKK1R1cm4gb24gaGVhdnkgcmVmZXJlbmNlIGRlYnVnZ2luZy4gIFRoaXMgaXMgbWFqb3Igc3VyZ2VyeS4gIEV2ZXJ5IFB5T2JqZWN0IGdyb3dzCit0d28gbW9yZSBwb2ludGVycywgdG8gbWFpbnRhaW4gYSBkb3VibHktbGlua2VkIGxpc3Qgb2YgYWxsIGxpdmUgaGVhcC1hbGxvY2F0ZWQKK29iamVjdHMuICBNb3N0IGJ1aWx0LWluIHR5cGUgb2JqZWN0cyBhcmUgbm90IGluIHRoaXMgbGlzdCwgYXMgdGhleSdyZSBzdGF0aWNhbGx5CithbGxvY2F0ZWQuICBTdGFydGluZyBpbiBQeXRob24gMi4zLCBpZiBDT1VOVF9BTExPQ1MgKHNlZSBiZWxvdykgaXMgYWxzbyBkZWZpbmVkLAorYSBzdGF0aWMgdHlwZSBvYmplY3QgVCBkb2VzIGFwcGVhciBpbiB0aGlzIGxpc3QgaWYgYXQgbGVhc3Qgb25lIG9iamVjdCBvZiB0eXBlIFQKK2hhcyBiZWVuIGNyZWF0ZWQuCiAKIE5vdGUgdGhhdCBiZWNhdXNlIHRoZSBmdW5kYW1lbnRhbCBQeU9iamVjdCBsYXlvdXQgY2hhbmdlcywgUHl0aG9uIG1vZHVsZXMKLWNvbXBpbGVkIHdpdGggUHlfVFJBQ0VfUkVGUyBhcmUgaW5jb21wYXRpYmxlIHdpdGggbW9kdWxlcyBjb21waWxlZCB3aXRob3V0Ci1pdC4KK2NvbXBpbGVkIHdpdGggUHlfVFJBQ0VfUkVGUyBhcmUgaW5jb21wYXRpYmxlIHdpdGggbW9kdWxlcyBjb21waWxlZCB3aXRob3V0IGl0LgogCiBQeV9UUkFDRV9SRUZTIGltcGxpZXMgUHlfUkVGX0RFQlVHLgogCiBTcGVjaWFsIGdpbW1pY2tzOgogCiBzeXMuZ2V0b2JqZWN0cyhtYXhbLCB0eXBlXSkKLSAgICBSZXR1cm4gbGlzdCBvZiB0aGUgKG5vIG1vcmUgdGhhbikgbWF4IG1vc3QtcmVjZW50bHkgYWxsb2NhdGVkIG9iamVjdHMsCi0gICAgbW9zdCByZWNlbnRseSBhbGxvY2F0ZWQgZmlyc3QgaW4gdGhlIGxpc3QsIGxlYXN0LXJlY2VudGx5IGFsbG9jYXRlZAotICAgIGxhc3QgaW4gdGhlIGxpc3QuICBtYXg9MCBtZWFucyBubyBsaW1pdCBvbiBsaXN0IGxlbmd0aC4KLSAgICBJZiBhbiBvcHRpb25hbCB0eXBlIG9iamVjdCBpcyBwYXNzZWQsIHRoZSBsaXN0IGlzIGFsc28gcmVzdHJpY3RlZCB0bwotICAgIG9iamVjdHMgb2YgdGhhdCB0eXBlLgotICAgIFRoZSByZXR1cm4gbGlzdCBpdHNlbGYsIGFuZCBzb21lIHRlbXAgb2JqZWN0cyBjcmVhdGVkIGp1c3QgdG8gY2FsbAotICAgIHN5cy5nZXRvYmplY3RzKCksIGFyZSBleGNsdWRlZCBmcm9tIHRoZSByZXR1cm4gbGlzdC4gIE5vdGUgdGhhdCB0aGUKLSAgICBsaXN0IHJldHVybmVkIGlzIGp1c3QgYW5vdGhlciBvYmplY3QsIHRob3VnaCwgc28gbWF5IGFwcGVhciBpbiB0aGUKLSAgICByZXR1cm4gbGlzdCB0aGUgbmV4dCB0aW1lIHlvdSBjYWxsIGdldG9iamVjdHMoKTsgbm90ZSB0aGF0IGV2ZXJ5Ci0gICAgb2JqZWN0IGluIHRoZSBsaXN0IGlzIGtlcHQgYWxpdmUgdG9vLCBzaW1wbHkgYnkgdmlydHVlIG9mIGJlaW5nIGluCi0gICAgdGhlIGxpc3QuCisgICAgUmV0dXJuIGxpc3Qgb2YgdGhlIChubyBtb3JlIHRoYW4pIG1heCBtb3N0LXJlY2VudGx5IGFsbG9jYXRlZCBvYmplY3RzLCBtb3N0CisgICAgcmVjZW50bHkgYWxsb2NhdGVkIGZpcnN0IGluIHRoZSBsaXN0LCBsZWFzdC1yZWNlbnRseSBhbGxvY2F0ZWQgbGFzdCBpbiB0aGUKKyAgICBsaXN0LiAgbWF4PTAgbWVhbnMgbm8gbGltaXQgb24gbGlzdCBsZW5ndGguICBJZiBhbiBvcHRpb25hbCB0eXBlIG9iamVjdCBpcworICAgIHBhc3NlZCwgdGhlIGxpc3QgaXMgYWxzbyByZXN0cmljdGVkIHRvIG9iamVjdHMgb2YgdGhhdCB0eXBlLiAgVGhlIHJldHVybgorICAgIGxpc3QgaXRzZWxmLCBhbmQgc29tZSB0ZW1wIG9iamVjdHMgY3JlYXRlZCBqdXN0IHRvIGNhbGwgc3lzLmdldG9iamVjdHMoKSwKKyAgICBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgcmV0dXJuIGxpc3QuICBOb3RlIHRoYXQgdGhlIGxpc3QgcmV0dXJuZWQgaXMganVzdAorICAgIGFub3RoZXIgb2JqZWN0LCB0aG91Z2gsIHNvIG1heSBhcHBlYXIgaW4gdGhlIHJldHVybiBsaXN0IHRoZSBuZXh0IHRpbWUgeW91CisgICAgY2FsbCBnZXRvYmplY3RzKCk7IG5vdGUgdGhhdCBldmVyeSBvYmplY3QgaW4gdGhlIGxpc3QgaXMga2VwdCBhbGl2ZSB0b28sCisgICAgc2ltcGx5IGJ5IHZpcnR1ZSBvZiBiZWluZyBpbiB0aGUgbGlzdC4KIAotZW52YXIgUFlUSE9ORFVNUFJFRlMKLSAgICBJZiB0aGlzIGVudmFyIGV4aXN0cywgUHlfRmluYWxpemUoKSBhcnJhbmdlcyB0byBwcmludCBhIGxpc3Qgb2YKLSAgICBhbGwgc3RpbGwtbGl2ZSBoZWFwIG9iamVjdHMuICBUaGlzIGlzIHByaW50ZWQgdHdpY2UsIGluIGRpZmZlcmVudAotICAgIGZvcm1hdHMsIGJlZm9yZSBhbmQgYWZ0ZXIgUHlfRmluYWxpemUgaGFzIGNsZWFuZWQgdXAgZXZlcnl0aGluZyBpdAotICAgIGNhbiBjbGVhbiB1cC4gIFRoZSBmaXJzdCBvdXRwdXQgYmxvY2sgcHJvZHVjZXMgdGhlIHJlcHIoKSBvZiBlYWNoCi0gICAgb2JqZWN0IHNvIGlzIG1vcmUgaW5mb3JtYXRpdmU7IGhvd2V2ZXIsIGEgbG90IG9mIHN0dWZmIGRlc3RpbmVkIHRvCi0gICAgZGllIGlzIHN0aWxsIGFsaXZlIHRoZW4uICBUaGUgc2Vjb25kIG91dHB1dCBibG9jayBpcyBtdWNoIGhhcmRlcgotICAgIHRvIHdvcmsgd2l0aCAocmVwcigpIGNhbid0IGJlIGludm9rZWQgYW55bW9yZSAtLSB0aGUgaW50ZXJwcmV0ZXIKLSAgICBoYXMgYmVlbiB0b3JuIGRvd24gdG9vIGZhciksIGJ1dCBkb2Vzbid0IGxpc3QgYW55IG9iamVjdHMgdGhhdCB3aWxsCi0gICAgZGllLiAgVGhlIHRvb2wgc2NyaXB0IGNvbWJpbmVyZWZzLnB5IGNhbiBiZSBydW4gb3ZlciB0aGlzIHRvIGNvbWJpbmUKLSAgICB0aGUgaW5mbyBmcm9tIGJvdGggb3V0cHV0IGJsb2Nrcy4gIFRoZSBzZWNvbmQgb3V0cHV0IGJsb2NrLCBhbmQKK2VudnZhciBQWVRIT05EVU1QUkVGUworICAgIElmIHRoaXMgZW52dmFyIGV4aXN0cywgUHlfRmluYWxpemUoKSBhcnJhbmdlcyB0byBwcmludCBhIGxpc3Qgb2YgYWxsCisgICAgc3RpbGwtbGl2ZSBoZWFwIG9iamVjdHMuICBUaGlzIGlzIHByaW50ZWQgdHdpY2UsIGluIGRpZmZlcmVudCBmb3JtYXRzLAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgUHlfRmluYWxpemUgaGFzIGNsZWFuZWQgdXAgZXZlcnl0aGluZyBpdCBjYW4gY2xlYW4gdXAuICBUaGUKKyAgICBmaXJzdCBvdXRwdXQgYmxvY2sgcHJvZHVjZXMgdGhlIHJlcHIoKSBvZiBlYWNoIG9iamVjdCBzbyBpcyBtb3JlCisgICAgaW5mb3JtYXRpdmU7IGhvd2V2ZXIsIGEgbG90IG9mIHN0dWZmIGRlc3RpbmVkIHRvIGRpZSBpcyBzdGlsbCBhbGl2ZSB0aGVuLgorICAgIFRoZSBzZWNvbmQgb3V0cHV0IGJsb2NrIGlzIG11Y2ggaGFyZGVyIHRvIHdvcmsgd2l0aCAocmVwcigpIGNhbid0IGJlIGludm9rZWQKKyAgICBhbnltb3JlIC0tIHRoZSBpbnRlcnByZXRlciBoYXMgYmVlbiB0b3JuIGRvd24gdG9vIGZhciksIGJ1dCBkb2Vzbid0IGxpc3QgYW55CisgICAgb2JqZWN0cyB0aGF0IHdpbGwgZGllLiAgVGhlIHRvb2wgc2NyaXB0IGNvbWJpbmVyZWZzLnB5IGNhbiBiZSBydW4gb3ZlciB0aGlzCisgICAgdG8gY29tYmluZSB0aGUgaW5mbyBmcm9tIGJvdGggb3V0cHV0IGJsb2Nrcy4gIFRoZSBzZWNvbmQgb3V0cHV0IGJsb2NrLCBhbmQKICAgICBjb21iaW5lcmVmcy5weSwgd2VyZSBuZXcgaW4gUHl0aG9uIDIuM2IxLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QWU1BTExPQ19ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9kdWNlZCBpbiAyLjMKKworCitQWU1BTExPQ19ERUJVRworLS0tLS0tLS0tLS0tLS0KIAogV2hlbiBweW1hbGxvYyBpcyBlbmFibGVkIChXSVRIX1BZTUFMTE9DIGlzIGRlZmluZWQpLCBjYWxscyB0byB0aGUgUHlPYmplY3RfCi1tZW1vcnkgcm91dGluZXMgYXJlIGhhbmRsZWQgYnkgUHl0aG9uJ3Mgb3duIHNtYWxsLW9iamVjdCBhbGxvY2F0b3IsIHdoaWxlCi1jYWxscyB0byB0aGUgUHlNZW1fIG1lbW9yeSByb3V0aW5lcyBhcmUgZGlyZWN0ZWQgdG8gdGhlIHN5c3RlbSBtYWxsb2MvCi1yZWFsbG9jL2ZyZWUuICBJZiBQWU1BTExPQ19ERUJVRyBpcyBhbHNvIGRlZmluZWQsIGNhbGxzIHRvIGJvdGggUHlPYmplY3RfCi1hbmQgUHlNZW1fIG1lbW9yeSByb3V0aW5lcyBhcmUgZGlyZWN0ZWQgdG8gYSBzcGVjaWFsIGRlYnVnZ2luZyBtb2RlIG9mCi1QeXRob24ncyBzbWFsbC1vYmplY3QgYWxsb2NhdG9yLgorbWVtb3J5IHJvdXRpbmVzIGFyZSBoYW5kbGVkIGJ5IFB5dGhvbidzIG93biBzbWFsbC1vYmplY3QgYWxsb2NhdG9yLCB3aGlsZSBjYWxscwordG8gdGhlIFB5TWVtXyBtZW1vcnkgcm91dGluZXMgYXJlIGRpcmVjdGVkIHRvIHRoZSBzeXN0ZW0gbWFsbG9jLyByZWFsbG9jL2ZyZWUuCitJZiBQWU1BTExPQ19ERUJVRyBpcyBhbHNvIGRlZmluZWQsIGNhbGxzIHRvIGJvdGggUHlPYmplY3RfIGFuZCBQeU1lbV8gbWVtb3J5Cityb3V0aW5lcyBhcmUgZGlyZWN0ZWQgdG8gYSBzcGVjaWFsIGRlYnVnZ2luZyBtb2RlIG9mIFB5dGhvbidzIHNtYWxsLW9iamVjdAorYWxsb2NhdG9yLgogCi1UaGlzIG1vZGUgZmlsbHMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3Mgd2l0aCBzcGVjaWFsLAotcmVjb2duaXphYmxlIGJpdCBwYXR0ZXJucywgYW5kIGFkZHMgZGVidWdnaW5nIGluZm8gb24gZWFjaCBlbmQgb2YKLWR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzLiAgVGhlIHNwZWNpYWwgYml0IHBhdHRlcm5zIGFyZToKK1RoaXMgbW9kZSBmaWxscyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcyB3aXRoIHNwZWNpYWwsIHJlY29nbml6YWJsZQorYml0IHBhdHRlcm5zLCBhbmQgYWRkcyBkZWJ1Z2dpbmcgaW5mbyBvbiBlYWNoIGVuZCBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQKK21lbW9yeSBibG9ja3MuICBUaGUgc3BlY2lhbCBiaXQgcGF0dGVybnMgYXJlOgogCiAjZGVmaW5lIENMRUFOQllURSAgICAgMHhDQiAgIC8qIGNsZWFuIChuZXdseSBhbGxvY2F0ZWQpIG1lbW9yeSAqLwogI2RlZmluZSBERUFEQllURSAgICAgIDB4REIgICAvKiBkZWFkIChuZXdseSBmcmVlZCkgbWVtb3J5ICovCkBAIC05Niw3MyArOTYsNzAgQEAKIFN0cmluZ3Mgb2YgdGhlc2UgYnl0ZXMgYXJlIHVubGlrZWx5IHRvIGJlIHZhbGlkIGFkZHJlc3NlcywgZmxvYXRzLCBvciA3LWJpdAogQVNDSUkgc3RyaW5ncy4KIAotTGV0IFMgPSBzaXplb2Yoc2l6ZV90KS4gMipTIGJ5dGVzIGFyZSBhZGRlZCBhdCBlYWNoIGVuZCBvZiBlYWNoIGJsb2NrIG9mIE4KLWJ5dGVzIHJlcXVlc3RlZC4gIFRoZSBtZW1vcnkgbGF5b3V0IGlzIGxpa2Ugc28sIHdoZXJlIHAgcmVwcmVzZW50cyB0aGUKLWFkZHJlc3MgcmV0dXJuZWQgYnkgYSBtYWxsb2MtbGlrZSBvciByZWFsbG9jLWxpa2UgZnVuY3Rpb24gKHBbaTpqXSBtZWFucwotdGhlIHNsaWNlIG9mIGJ5dGVzIGZyb20gKihwK2kpIGluY2x1c2l2ZSB1cCB0byAqKHAraikgZXhjbHVzaXZlOyBub3RlIHRoYXQKLXRoZSB0cmVhdG1lbnQgb2YgbmVnYXRpdmUgaW5kaWNlcyBkaWZmZXJzIGZyb20gYSBQeXRob24gc2xpY2UpOgorTGV0IFMgPSBzaXplb2Yoc2l6ZV90KS4gMipTIGJ5dGVzIGFyZSBhZGRlZCBhdCBlYWNoIGVuZCBvZiBlYWNoIGJsb2NrIG9mIE4gYnl0ZXMKK3JlcXVlc3RlZC4gIFRoZSBtZW1vcnkgbGF5b3V0IGlzIGxpa2Ugc28sIHdoZXJlIHAgcmVwcmVzZW50cyB0aGUgYWRkcmVzcworcmV0dXJuZWQgYnkgYSBtYWxsb2MtbGlrZSBvciByZWFsbG9jLWxpa2UgZnVuY3Rpb24gKHBbaTpqXSBtZWFucyB0aGUgc2xpY2Ugb2YKK2J5dGVzIGZyb20gKihwK2kpIGluY2x1c2l2ZSB1cCB0byAqKHAraikgZXhjbHVzaXZlOyBub3RlIHRoYXQgdGhlIHRyZWF0bWVudCBvZgorbmVnYXRpdmUgaW5kaWNlcyBkaWZmZXJzIGZyb20gYSBQeXRob24gc2xpY2UpOgogCiBwWy0yKlM6LVNdCi0gICAgTnVtYmVyIG9mIGJ5dGVzIG9yaWdpbmFsbHkgYXNrZWQgZm9yLiAgVGhpcyBpcyBhIHNpemVfdCwgYmlnLWVuZGlhbgotICAgIChlYXNpZXIgdG8gcmVhZCBpbiBhIG1lbW9yeSBkdW1wKS4KKyAgICBOdW1iZXIgb2YgYnl0ZXMgb3JpZ2luYWxseSBhc2tlZCBmb3IuICBUaGlzIGlzIGEgc2l6ZV90LCBiaWctZW5kaWFuIChlYXNpZXIKKyAgICB0byByZWFkIGluIGEgbWVtb3J5IGR1bXApLgogcFstUzowXQogICAgIENvcGllcyBvZiBGT1JCSURERU5CWVRFLiAgVXNlZCB0byBjYXRjaCB1bmRlci0gd3JpdGVzIGFuZCByZWFkcy4KIHBbMDpOXQogICAgIFRoZSByZXF1ZXN0ZWQgbWVtb3J5LCBmaWxsZWQgd2l0aCBjb3BpZXMgb2YgQ0xFQU5CWVRFLCB1c2VkIHRvIGNhdGNoCi0gICAgcmVmZXJlbmNlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgotICAgIFdoZW4gYSByZWFsbG9jLWxpa2UgZnVuY3Rpb24gaXMgY2FsbGVkIHJlcXVlc3RpbmcgYSBsYXJnZXIgbWVtb3J5Ci0gICAgYmxvY2ssIHRoZSBuZXcgZXhjZXNzIGJ5dGVzIGFyZSBhbHNvIGZpbGxlZCB3aXRoIENMRUFOQllURS4KLSAgICBXaGVuIGEgZnJlZS1saWtlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlc2UgYXJlIG92ZXJ3cml0dGVuIHdpdGgKLSAgICBERUFEQllURSwgdG8gY2F0Y2ggcmVmZXJlbmNlIHRvIGZyZWVkIG1lbW9yeS4gIFdoZW4gYSByZWFsbG9jLQotICAgIGxpa2UgZnVuY3Rpb24gaXMgY2FsbGVkIHJlcXVlc3RpbmcgYSBzbWFsbGVyIG1lbW9yeSBibG9jaywgdGhlIGV4Y2VzcwotICAgIG9sZCBieXRlcyBhcmUgYWxzbyBmaWxsZWQgd2l0aCBERUFEQllURS4KKyAgICByZWZlcmVuY2UgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuICBXaGVuIGEgcmVhbGxvYy1saWtlIGZ1bmN0aW9uIGlzIGNhbGxlZAorICAgIHJlcXVlc3RpbmcgYSBsYXJnZXIgbWVtb3J5IGJsb2NrLCB0aGUgbmV3IGV4Y2VzcyBieXRlcyBhcmUgYWxzbyBmaWxsZWQgd2l0aAorICAgIENMRUFOQllURS4gIFdoZW4gYSBmcmVlLWxpa2UgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGVzZSBhcmUgb3ZlcndyaXR0ZW4gd2l0aAorICAgIERFQURCWVRFLCB0byBjYXRjaCByZWZlcmVuY2UgdG8gZnJlZWQgbWVtb3J5LiAgV2hlbiBhIHJlYWxsb2MtIGxpa2UgZnVuY3Rpb24KKyAgICBpcyBjYWxsZWQgcmVxdWVzdGluZyBhIHNtYWxsZXIgbWVtb3J5IGJsb2NrLCB0aGUgZXhjZXNzIG9sZCBieXRlcyBhcmUgYWxzbworICAgIGZpbGxlZCB3aXRoIERFQURCWVRFLgogcFtOOk4rU10KICAgICBDb3BpZXMgb2YgRk9SQklEREVOQllURS4gIFVzZWQgdG8gY2F0Y2ggb3Zlci0gd3JpdGVzIGFuZCByZWFkcy4KIHBbTitTOk4rMipTXQogICAgIEEgc2VyaWFsIG51bWJlciwgaW5jcmVtZW50ZWQgYnkgMSBvbiBlYWNoIGNhbGwgdG8gYSBtYWxsb2MtbGlrZSBvcgotICAgIHJlYWxsb2MtbGlrZSBmdW5jdGlvbi4KLSAgICBCaWctZW5kaWFuIHNpemVfdC4KLSAgICBJZiAiYmFkIG1lbW9yeSIgaXMgZGV0ZWN0ZWQgbGF0ZXIsIHRoZSBzZXJpYWwgbnVtYmVyIGdpdmVzIGFuCi0gICAgZXhjZWxsZW50IHdheSB0byBzZXQgYSBicmVha3BvaW50IG9uIHRoZSBuZXh0IHJ1biwgdG8gY2FwdHVyZSB0aGUKLSAgICBpbnN0YW50IGF0IHdoaWNoIHRoaXMgYmxvY2sgd2FzIHBhc3NlZCBvdXQuICBUaGUgc3RhdGljIGZ1bmN0aW9uCi0gICAgYnVtcHNlcmlhbG5vKCkgaW4gb2JtYWxsb2MuYyBpcyB0aGUgb25seSBwbGFjZSB0aGUgc2VyaWFsIG51bWJlcgotICAgIGlzIGluY3JlbWVudGVkLCBhbmQgZXhpc3RzIHNvIHlvdSBjYW4gc2V0IHN1Y2ggYSBicmVha3BvaW50IGVhc2lseS4KKyAgICByZWFsbG9jLWxpa2UgZnVuY3Rpb24uICBCaWctZW5kaWFuIHNpemVfdC4gIElmICJiYWQgbWVtb3J5IiBpcyBkZXRlY3RlZAorICAgIGxhdGVyLCB0aGUgc2VyaWFsIG51bWJlciBnaXZlcyBhbiBleGNlbGxlbnQgd2F5IHRvIHNldCBhIGJyZWFrcG9pbnQgb24gdGhlCisgICAgbmV4dCBydW4sIHRvIGNhcHR1cmUgdGhlIGluc3RhbnQgYXQgd2hpY2ggdGhpcyBibG9jayB3YXMgcGFzc2VkIG91dC4gIFRoZQorICAgIHN0YXRpYyBmdW5jdGlvbiBidW1wc2VyaWFsbm8oKSBpbiBvYm1hbGxvYy5jIGlzIHRoZSBvbmx5IHBsYWNlIHRoZSBzZXJpYWwKKyAgICBudW1iZXIgaXMgaW5jcmVtZW50ZWQsIGFuZCBleGlzdHMgc28geW91IGNhbiBzZXQgc3VjaCBhIGJyZWFrcG9pbnQgZWFzaWx5LgogCi1BIHJlYWxsb2MtbGlrZSBvciBmcmVlLWxpa2UgZnVuY3Rpb24gZmlyc3QgY2hlY2tzIHRoYXQgdGhlIEZPUkJJRERFTkJZVEVzCi1hdCBlYWNoIGVuZCBhcmUgaW50YWN0LiAgSWYgdGhleSd2ZSBiZWVuIGFsdGVyZWQsIGRpYWdub3N0aWMgb3V0cHV0IGlzCi13cml0dGVuIHRvIHN0ZGVyciwgYW5kIHRoZSBwcm9ncmFtIGlzIGFib3J0ZWQgdmlhIFB5X0ZhdGFsRXJyb3IoKS4gIFRoZQotb3RoZXIgbWFpbiBmYWlsdXJlIG1vZGUgaXMgcHJvdm9raW5nIGEgbWVtb3J5IGVycm9yIHdoZW4gYSBwcm9ncmFtCi1yZWFkcyB1cCBvbmUgb2YgdGhlIHNwZWNpYWwgYml0IHBhdHRlcm5zIGFuZCB0cmllcyB0byB1c2UgaXQgYXMgYW4gYWRkcmVzcy4KLUlmIHlvdSBnZXQgaW4gYSBkZWJ1Z2dlciB0aGVuIGFuZCBsb29rIGF0IHRoZSBvYmplY3QsIHlvdSdyZSBsaWtlbHkKLXRvIHNlZSB0aGF0IGl0J3MgZW50aXJlbHkgZmlsbGVkIHdpdGggMHhEQiAobWVhbmluZyBmcmVlZCBtZW1vcnkgaXMKLWdldHRpbmcgdXNlZCkgb3IgMHhDQiAobWVhbmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBnZXR0aW5nIHVzZWQpLgorQSByZWFsbG9jLWxpa2Ugb3IgZnJlZS1saWtlIGZ1bmN0aW9uIGZpcnN0IGNoZWNrcyB0aGF0IHRoZSBGT1JCSURERU5CWVRFcyBhdAorZWFjaCBlbmQgYXJlIGludGFjdC4gIElmIHRoZXkndmUgYmVlbiBhbHRlcmVkLCBkaWFnbm9zdGljIG91dHB1dCBpcyB3cml0dGVuIHRvCitzdGRlcnIsIGFuZCB0aGUgcHJvZ3JhbSBpcyBhYm9ydGVkIHZpYSBQeV9GYXRhbEVycm9yKCkuICBUaGUgb3RoZXIgbWFpbiBmYWlsdXJlCittb2RlIGlzIHByb3Zva2luZyBhIG1lbW9yeSBlcnJvciB3aGVuIGEgcHJvZ3JhbSByZWFkcyB1cCBvbmUgb2YgdGhlIHNwZWNpYWwgYml0CitwYXR0ZXJucyBhbmQgdHJpZXMgdG8gdXNlIGl0IGFzIGFuIGFkZHJlc3MuICBJZiB5b3UgZ2V0IGluIGEgZGVidWdnZXIgdGhlbiBhbmQKK2xvb2sgYXQgdGhlIG9iamVjdCwgeW91J3JlIGxpa2VseSB0byBzZWUgdGhhdCBpdCdzIGVudGlyZWx5IGZpbGxlZCB3aXRoIDB4REIKKyhtZWFuaW5nIGZyZWVkIG1lbW9yeSBpcyBnZXR0aW5nIHVzZWQpIG9yIDB4Q0IgKG1lYW5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMKK2dldHRpbmcgdXNlZCkuCiAKIE5vdGUgdGhhdCBQWU1BTExPQ19ERUJVRyByZXF1aXJlcyBXSVRIX1BZTUFMTE9DLgogCiBTcGVjaWFsIGdpbW1pY2tzOgogCi1lbnZhciBQWVRIT05NQUxMT0NTVEFUUwotICAgIElmIHRoaXMgZW52YXIgZXhpc3RzLCBhIHJlcG9ydCBvZiBweW1hbGxvYyBzdW1tYXJ5IHN0YXRpc3RpY3MgaXMKLSAgICBwcmludGVkIHRvIHN0ZGVyciB3aGVuZXZlciBhIG5ldyBhcmVuYSBpcyBhbGxvY2F0ZWQsIGFuZCBhbHNvCi0gICAgYnkgUHlfRmluYWxpemUoKS4KK2VudnZhciBQWVRIT05NQUxMT0NTVEFUUworICAgIElmIHRoaXMgZW52dmFyIGV4aXN0cywgYSByZXBvcnQgb2YgcHltYWxsb2Mgc3VtbWFyeSBzdGF0aXN0aWNzIGlzIHByaW50ZWQgdG8KKyAgICBzdGRlcnIgd2hlbmV2ZXIgYSBuZXcgYXJlbmEgaXMgYWxsb2NhdGVkLCBhbmQgYWxzbyBieSBQeV9GaW5hbGl6ZSgpLgogCiBDaGFuZ2VkIGluIDIuNTogIFRoZSBudW1iZXIgb2YgZXh0cmEgYnl0ZXMgYWxsb2NhdGVkIGlzIDQqc2l6ZW9mKHNpemVfdCkuCiBCZWZvcmUgaXQgd2FzIDE2IG9uIGFsbCBib3hlcywgcmVmbGVjdGluZyB0aGF0IFB5dGhvbiBjb3VsZG4ndCBtYWtlIHVzZSBvZgogYWxsb2NhdGlvbnMgPj0gMioqMzIgYnl0ZXMgZXZlbiBvbiA2NC1iaXQgYm94ZXMgYmVmb3JlIDIuNS4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUHlfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjZWQgaW4gMS41Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVkIERFQlVHIGJlZm9yZSAxLjUKKworCitQeV9ERUJVRworLS0tLS0tLS0KIAogVGhpcyBpcyB3aGF0IGlzIGdlbmVyYWxseSBtZWFudCBieSAiYSBkZWJ1ZyBidWlsZCIgb2YgUHl0aG9uLgogCi1QeV9ERUJVRyBpbXBsaWVzIExMVFJBQ0UsIFB5X1JFRl9ERUJVRywgUHlfVFJBQ0VfUkVGUywgYW5kCi1QWU1BTExPQ19ERUJVRyAoaWYgV0lUSF9QWU1BTExPQyBpcyBlbmFibGVkKS4gIEluIGFkZGl0aW9uLCBDCi1hc3NlcnQoKXMgYXJlIGVuYWJsZWQgKHZpYSB0aGUgQyB3YXk6IGJ5IG5vdCBkZWZpbmluZyBOREVCVUcpLCBhbmQKLXNvbWUgcm91dGluZXMgZG8gYWRkaXRpb25hbCBzYW5pdHkgY2hlY2tzIGluc2lkZSAiI2lmZGVmIFB5X0RFQlVHIgotYmxvY2tzLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DT1VOVF9BTExPQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjZWQgaW4gMC45LjkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRseSBicm9rZW4gaW4gMi4yIGFuZCAyLjIuMQorUHlfREVCVUcgaW1wbGllcyBMTFRSQUNFLCBQeV9SRUZfREVCVUcsIFB5X1RSQUNFX1JFRlMsIGFuZCBQWU1BTExPQ19ERUJVRyAoaWYKK1dJVEhfUFlNQUxMT0MgaXMgZW5hYmxlZCkuICBJbiBhZGRpdGlvbiwgQyBhc3NlcnQoKXMgYXJlIGVuYWJsZWQgKHZpYSB0aGUgQyB3YXk6CitieSBub3QgZGVmaW5pbmcgTkRFQlVHKSwgYW5kIHNvbWUgcm91dGluZXMgZG8gYWRkaXRpb25hbCBzYW5pdHkgY2hlY2tzIGluc2lkZQorIiNpZmRlZiBQeV9ERUJVRyIgYmxvY2tzLgorCisKK0NPVU5UX0FMTE9DUworLS0tLS0tLS0tLS0tCiAKIEVhY2ggdHlwZSBvYmplY3QgZ3Jvd3MgdGhyZWUgbmV3IG1lbWJlcnM6CiAKQEAgLTE3OCw4NCArMTc1LDg1IEBACiAgICAgICovCiAgICAgaW50IHRwX21heGFsbG9jOwogCi1BbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gY29kZSBrZWVwcyB0aGVzZSBjb3VudHMgdXAgdG8gZGF0ZS4KLVB5X0ZpbmFsaXplKCkgZGlzcGxheXMgYSBzdW1tYXJ5IG9mIHRoZSBpbmZvIHJldHVybmVkIGJ5IHN5cy5nZXRjb3VudHMoKQotKHNlZSBiZWxvdyksIGFsb25nIHdpdGggYXNzb3J0ZWQgb3RoZXIgc3BlY2lhbCBhbGxvY2F0aW9uIGNvdW50cyAobGlrZQotdGhlIG51bWJlciBvZiB0dXBsZSBhbGxvY2F0aW9ucyBzYXRpc2ZpZWQgYnkgYSB0dXBsZSBmcmVlLWxpc3QsIHRoZSBudW1iZXIKLW9mIDEtY2hhcmFjdGVyIHN0cmluZ3MgYWxsb2NhdGVkLCBldGMpLgorQWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGNvZGUga2VlcHMgdGhlc2UgY291bnRzIHVwIHRvIGRhdGUuICBQeV9GaW5hbGl6ZSgpCitkaXNwbGF5cyBhIHN1bW1hcnkgb2YgdGhlIGluZm8gcmV0dXJuZWQgYnkgc3lzLmdldGNvdW50cygpIChzZWUgYmVsb3cpLCBhbG9uZword2l0aCBhc3NvcnRlZCBvdGhlciBzcGVjaWFsIGFsbG9jYXRpb24gY291bnRzIChsaWtlIHRoZSBudW1iZXIgb2YgdHVwbGUKK2FsbG9jYXRpb25zIHNhdGlzZmllZCBieSBhIHR1cGxlIGZyZWUtbGlzdCwgdGhlIG51bWJlciBvZiAxLWNoYXJhY3RlciBzdHJpbmdzCithbGxvY2F0ZWQsIGV0YykuCiAKIEJlZm9yZSBQeXRob24gMi4yLCB0eXBlIG9iamVjdHMgd2VyZSBpbW1vcnRhbCwgYW5kIHRoZSBDT1VOVF9BTExPQ1MKLWltcGxlbWVudGF0aW9uIHJlbGllcyBvbiB0aGF0LiAgQXMgb2YgUHl0aG9uIDIuMiwgaGVhcC1hbGxvY2F0ZWQgdHlwZS8KLWNsYXNzIG9iamVjdHMgY2FuIGdvIGF3YXkuICBDT1VOVF9BTExPQ1MgY2FuIGJsb3cgdXAgaW4gMi4yIGFuZCAyLjIuMQotYmVjYXVzZSBvZiB0aGlzOyB0aGlzIHdhcyBmaXhlZCBpbiAyLjIuMi4gIFVzZSBvZiBDT1VOVF9BTExPQ1MgbWFrZXMKLWFsbCBoZWFwLWFsbG9jYXRlZCB0eXBlIG9iamVjdHMgaW1tb3J0YWwsIGV4Y2VwdCBmb3IgdGhvc2UgZm9yIHdoaWNoIG5vCi1vYmplY3Qgb2YgdGhhdCB0eXBlIGlzIGV2ZXIgYWxsb2NhdGVkLgoraW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIHRoYXQuICBBcyBvZiBQeXRob24gMi4yLCBoZWFwLWFsbG9jYXRlZCB0eXBlLyBjbGFzcworb2JqZWN0cyBjYW4gZ28gYXdheS4gIENPVU5UX0FMTE9DUyBjYW4gYmxvdyB1cCBpbiAyLjIgYW5kIDIuMi4xIGJlY2F1c2Ugb2YgdGhpczsKK3RoaXMgd2FzIGZpeGVkIGluIDIuMi4yLiAgVXNlIG9mIENPVU5UX0FMTE9DUyBtYWtlcyBhbGwgaGVhcC1hbGxvY2F0ZWQgdHlwZQorb2JqZWN0cyBpbW1vcnRhbCwgZXhjZXB0IGZvciB0aG9zZSBmb3Igd2hpY2ggbm8gb2JqZWN0IG9mIHRoYXQgdHlwZSBpcyBldmVyCithbGxvY2F0ZWQuCiAKIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMywgSWYgUHlfVFJBQ0VfUkVGUyBpcyBhbHNvIGRlZmluZWQsIENPVU5UX0FMTE9DUwotYXJyYW5nZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHR5cGUgb2JqZWN0IGZvciBlYWNoIGFsbG9jYXRlZCBvYmplY3QKLWFwcGVhcnMgaW4gdGhlIGRvdWJseS1saW5rZWQgbGlzdCBvZiBhbGwgb2JqZWN0cyBtYWludGFpbmVkIGJ5Ci1QeV9UUkFDRV9SRUZTLgorYXJyYW5nZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHR5cGUgb2JqZWN0IGZvciBlYWNoIGFsbG9jYXRlZCBvYmplY3QgYXBwZWFycyBpbiB0aGUKK2RvdWJseS1saW5rZWQgbGlzdCBvZiBhbGwgb2JqZWN0cyBtYWludGFpbmVkIGJ5IFB5X1RSQUNFX1JFRlMuCiAKIFNwZWNpYWwgZ2ltbWlja3M6CiAKIHN5cy5nZXRjb3VudHMoKQotICAgIFJldHVybiBhIGxpc3Qgb2YgNC10dXBsZXMsIG9uZSBlbnRyeSBmb3IgZWFjaCB0eXBlIG9iamVjdCBmb3Igd2hpY2gKLSAgICBhdCBsZWFzdCBvbmUgb2JqZWN0IG9mIHRoYXQgdHlwZSB3YXMgYWxsb2NhdGVkLiAgRWFjaCB0dXBsZSBpcyBvZgotICAgIHRoZSBmb3JtOgorICAgIFJldHVybiBhIGxpc3Qgb2YgNC10dXBsZXMsIG9uZSBlbnRyeSBmb3IgZWFjaCB0eXBlIG9iamVjdCBmb3Igd2hpY2ggYXQgbGVhc3QKKyAgICBvbmUgb2JqZWN0IG9mIHRoYXQgdHlwZSB3YXMgYWxsb2NhdGVkLiAgRWFjaCB0dXBsZSBpcyBvZiB0aGUgZm9ybToKIAogICAgICAgICAodHBfbmFtZSwgdHBfYWxsb2NzLCB0cF9mcmVlcywgdHBfbWF4YWxsb2MpCiAKLSAgICBFYWNoIGRpc3RpbmN0IHR5cGUgb2JqZWN0IGdldHMgYSBkaXN0aW5jdCBlbnRyeSBpbiB0aGlzIGxpc3QsIGV2ZW4KLSAgICBpZiB0d28gb3IgbW9yZSB0eXBlIG9iamVjdHMgaGF2ZSB0aGUgc2FtZSB0cF9uYW1lIChpbiB3aGljaCBjYXNlCi0gICAgdGhlcmUncyBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggdGhlbSBieSBsb29raW5nIGF0IHRoaXMgbGlzdCkuICBUaGUKLSAgICBsaXN0IGlzIG9yZGVyZWQgYnkgdGltZSBvZiBmaXJzdCBvYmplY3QgYWxsb2NhdGlvbjogIHRoZSB0eXBlIG9iamVjdAotICAgIGZvciB3aGljaCB0aGUgZmlyc3QgYWxsb2NhdGlvbiBvZiBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlIG9jY3VycmVkCi0gICAgbW9zdCByZWNlbnRseSBpcyBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUxMVFJBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y2VkIHdlbGwgYmVmb3JlIDEuMAorICAgIEVhY2ggZGlzdGluY3QgdHlwZSBvYmplY3QgZ2V0cyBhIGRpc3RpbmN0IGVudHJ5IGluIHRoaXMgbGlzdCwgZXZlbiBpZiB0d28gb3IKKyAgICBtb3JlIHR5cGUgb2JqZWN0cyBoYXZlIHRoZSBzYW1lIHRwX25hbWUgKGluIHdoaWNoIGNhc2UgdGhlcmUncyBubyB3YXkgdG8KKyAgICBkaXN0aW5ndWlzaCB0aGVtIGJ5IGxvb2tpbmcgYXQgdGhpcyBsaXN0KS4gIFRoZSBsaXN0IGlzIG9yZGVyZWQgYnkgdGltZSBvZgorICAgIGZpcnN0IG9iamVjdCBhbGxvY2F0aW9uOiB0aGUgdHlwZSBvYmplY3QgZm9yIHdoaWNoIHRoZSBmaXJzdCBhbGxvY2F0aW9uIG9mCisgICAgYW4gb2JqZWN0IG9mIHRoYXQgdHlwZSBvY2N1cnJlZCBtb3N0IHJlY2VudGx5IGlzIGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdC4KKworCitMTFRSQUNFCistLS0tLS0tCiAKIENvbXBpbGUgaW4gc3VwcG9ydCBmb3IgTG93IExldmVsIFRSQUNFLWluZyBvZiB0aGUgbWFpbiBpbnRlcnByZXRlciBsb29wLgogCi1XaGVuIHRoaXMgcHJlcHJvY2Vzc29yIHN5bWJvbCBpcyBkZWZpbmVkLCBiZWZvcmUgUHlFdmFsX0V2YWxGcmFtZQotKGV2YWxfZnJhbWUgaW4gMi4zIGFuZCAyLjIsIGV2YWxfY29kZTIgYmVmb3JlIHRoYXQpIGV4ZWN1dGVzIGEgZnJhbWUncyBjb2RlCi1pdCBjaGVja3MgdGhlIGZyYW1lJ3MgZ2xvYmFsIG5hbWVzcGFjZSBmb3IgYSB2YXJpYWJsZSAiX19sbHRyYWNlX18iLiAgSWYKLXN1Y2ggYSB2YXJpYWJsZSBpcyBmb3VuZCwgbW91bmRzIG9mIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGludGVycHJldGVyCi1pcyBkb2luZyBhcmUgc3ByYXllZCB0byBzdGRvdXQsIHN1Y2ggYXMgZXZlcnkgb3Bjb2RlIGFuZCBvcGNvZGUgYXJndW1lbnQKLWFuZCB2YWx1ZXMgcHVzaGVkIG9udG8gYW5kIHBvcHBlZCBvZmYgdGhlIHZhbHVlIHN0YWNrLgorV2hlbiB0aGlzIHByZXByb2Nlc3NvciBzeW1ib2wgaXMgZGVmaW5lZCwgYmVmb3JlIFB5RXZhbF9FdmFsRnJhbWUgKGV2YWxfZnJhbWUgaW4KKzIuMyBhbmQgMi4yLCBldmFsX2NvZGUyIGJlZm9yZSB0aGF0KSBleGVjdXRlcyBhIGZyYW1lJ3MgY29kZSBpdCBjaGVja3MgdGhlCitmcmFtZSdzIGdsb2JhbCBuYW1lc3BhY2UgZm9yIGEgdmFyaWFibGUgIl9fbGx0cmFjZV9fIi4gIElmIHN1Y2ggYSB2YXJpYWJsZSBpcworZm91bmQsIG1vdW5kcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZSBpbnRlcnByZXRlciBpcyBkb2luZyBhcmUgc3ByYXllZCB0bworc3Rkb3V0LCBzdWNoIGFzIGV2ZXJ5IG9wY29kZSBhbmQgb3Bjb2RlIGFyZ3VtZW50IGFuZCB2YWx1ZXMgcHVzaGVkIG9udG8gYW5kCitwb3BwZWQgb2ZmIHRoZSB2YWx1ZSBzdGFjay4KIAogTm90IHVzZWZ1bCB2ZXJ5IG9mdGVuLCBidXQgdmVyeSB1c2VmdWwgd2hlbiBuZWVkZWQuCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ0FMTF9QUk9GSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y2VkIGZvciBQeXRob24gMi4zCisKK0NBTExfUFJPRklMRQorLS0tLS0tLS0tLS0tCiAKIENvdW50IHRoZSBudW1iZXIgb2YgZnVuY3Rpb24gY2FsbHMgZXhlY3V0ZWQuCiAKLVdoZW4gdGhpcyBzeW1ib2wgaXMgZGVmaW5lZCwgdGhlIGNldmFsIG1haW5sb29wIGFuZCBoZWxwZXIgZnVuY3Rpb25zCi1jb3VudCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGNhbGxzIG1hZGUuICBJdCBrZWVwcyBkZXRhaWxlZCBzdGF0aXN0aWNzCi1hYm91dCB3aGF0IGtpbmQgb2Ygb2JqZWN0IHdhcyBjYWxsZWQgYW5kIHdoZXRoZXIgdGhlIGNhbGwgaGl0IGFueSBvZgotdGhlIHNwZWNpYWwgZmFzdCBwYXRocyBpbiB0aGUgY29kZS4KK1doZW4gdGhpcyBzeW1ib2wgaXMgZGVmaW5lZCwgdGhlIGNldmFsIG1haW5sb29wIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGNvdW50IHRoZQorbnVtYmVyIG9mIGZ1bmN0aW9uIGNhbGxzIG1hZGUuICBJdCBrZWVwcyBkZXRhaWxlZCBzdGF0aXN0aWNzIGFib3V0IHdoYXQga2luZCBvZgorb2JqZWN0IHdhcyBjYWxsZWQgYW5kIHdoZXRoZXIgdGhlIGNhbGwgaGl0IGFueSBvZiB0aGUgc3BlY2lhbCBmYXN0IHBhdGhzIGluIHRoZQorY29kZS4KIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1XSVRIX1RTQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjZWQgZm9yIFB5dGhvbiAyLjQKIAotU3VwZXItbG93bGV2ZWwgcHJvZmlsaW5nIG9mIHRoZSBpbnRlcnByZXRlci4gIFdoZW4gZW5hYmxlZCwgdGhlIHN5cwotbW9kdWxlIGdyb3dzIGEgbmV3IGZ1bmN0aW9uOgorV0lUSF9UU0MKKy0tLS0tLS0tCisKK1N1cGVyLWxvd2xldmVsIHByb2ZpbGluZyBvZiB0aGUgaW50ZXJwcmV0ZXIuICBXaGVuIGVuYWJsZWQsIHRoZSBzeXMgbW9kdWxlIGdyb3dzCithIG5ldyBmdW5jdGlvbjoKIAogc2V0dHNjZHVtcChib29sKQotICAgIElmIHRydWUsIHRlbGwgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB0byBkdW1wIFZNIG1lYXN1cmVtZW50cyB0bwotICAgIHN0ZGVyci4gIElmIGZhbHNlLCB0dXJuIG9mZiBkdW1wLiAgVGhlIG1lYXN1cmVtZW50cyBhcmUgYmFzZWQgb24gdGhlCi0gICAgcHJvY2Vzc29yJ3MgdGltZS1zdGFtcCBjb3VudGVyLgorICAgIElmIHRydWUsIHRlbGwgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB0byBkdW1wIFZNIG1lYXN1cmVtZW50cyB0byBzdGRlcnIuICBJZgorICAgIGZhbHNlLCB0dXJuIG9mZiBkdW1wLiAgVGhlIG1lYXN1cmVtZW50cyBhcmUgYmFzZWQgb24gdGhlIHByb2Nlc3NvcidzCisgICAgdGltZS1zdGFtcCBjb3VudGVyLgogCi1UaGlzIGJ1aWxkIG9wdGlvbiByZXF1aXJlcyBhIHNtYWxsIGFtb3VudCBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlLgotQ3VycmVudGx5IHRoaXMgY29kZSBpcyBwcmVzZW50IGZvciBsaW51eC94ODYgYW5kIGFueSBQb3dlclBDIHBsYXRmb3JtCi10aGF0IHVzZXMgR0NDIChpLmUuIE9TIFggYW5kIGxpbnV4L3BwYykuCitUaGlzIGJ1aWxkIG9wdGlvbiByZXF1aXJlcyBhIHNtYWxsIGFtb3VudCBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlLiAgQ3VycmVudGx5Cit0aGlzIGNvZGUgaXMgcHJlc2VudCBmb3IgbGludXgveDg2IGFuZCBhbnkgUG93ZXJQQyBwbGF0Zm9ybSB0aGF0IHVzZXMgR0NDCisoaS5lLiBPUyBYIGFuZCBsaW51eC9wcGMpLgogCi1PbiB0aGUgUG93ZXJQQyB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgdGltZSBiYXNlIHJlZ2lzdGVyIGlzIGluY3JlbWVudGVkCi1pcyBub3QgZGVmaW5lZCBieSB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYXRpb24sIHNvIHlvdSdsbCBuZWVkIHRvCi1maW5kIHRoZSBtYW51YWwgZm9yIHlvdXIgc3BlY2lmaWMgcHJvY2Vzc29yLiAgRm9yIHRoZSA3NTBDWCwgNzUwQ1hlCi1hbmQgNzUwRlggKGFsbCBzb2xkIGFzIHRoZSBHMykgd2UgZmluZDoKK09uIHRoZSBQb3dlclBDIHRoZSByYXRlIGF0IHdoaWNoIHRoZSB0aW1lIGJhc2UgcmVnaXN0ZXIgaXMgaW5jcmVtZW50ZWQgaXMgbm90CitkZWZpbmVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhdGlvbiwgc28geW91J2xsIG5lZWQgdG8gZmluZCB0aGUgbWFudWFsIGZvcgoreW91ciBzcGVjaWZpYyBwcm9jZXNzb3IuICBGb3IgdGhlIDc1MENYLCA3NTBDWGUgYW5kIDc1MEZYIChhbGwgc29sZCBhcyB0aGUgRzMpCit3ZSBmaW5kOgogCi0gICAgVGhlIHRpbWUgYmFzZSBjb3VudGVyIGlzIGNsb2NrZWQgYXQgYSBmcmVxdWVuY3kgdGhhdCBpcwotICAgIG9uZS1mb3VydGggdGhhdCBvZiB0aGUgYnVzIGNsb2NrLgorICAgIFRoZSB0aW1lIGJhc2UgY291bnRlciBpcyBjbG9ja2VkIGF0IGEgZnJlcXVlbmN5IHRoYXQgaXMgb25lLWZvdXJ0aCB0aGF0IG9mCisgICAgdGhlIGJ1cyBjbG9jay4KIAogVGhpcyBidWlsZCBpcyBlbmFibGVkIGJ5IHRoZSAtLXdpdGgtdHNjIGZsYWcgdG8gY29uZmlndXJlLgpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vcHl0aG9uLnZpbSBiL01pc2MvVmltL3B5dGhvbi52aW0KaW5kZXggMmY4MjI4NS4uZGYzZjhkYiAxMDA2NDQKLS0tIGEvTWlzYy9WaW0vcHl0aG9uLnZpbQorKysgYi9NaXNjL1ZpbS9weXRob24udmltCkBAIC0xLDQgKzEsNCBAQAotIiBBdXRvLWdlbmVyYXRlZCBWaW0gc3ludGF4IGZpbGUgZm9yIFB5dGhvbiAodHJ1bms6IHI2MDM3Nk0pLgorIiBBdXRvLWdlbmVyYXRlZCBWaW0gc3ludGF4IGZpbGUgZm9yIFB5dGhvbiAodHJ1bms6IHI4MDQ5MCkuCiAiCiAiIFRvIHVzZTogY29weSBvciBzeW1saW5rIHRvIH4vLnZpbS9zeW50YXgvcHl0aG9uLnZpbQogCkBAIC02MywzMSArNjMsMzIgQEAKIAogaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zIikKICAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBFbGxpcHNpcyBGYWxzZSBOb25lIE5vdEltcGxlbWVudGVkIFRydWUgX19kZWJ1Z19fCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgX19pbXBvcnRfXyBhYnMgYWxsIGFueSBhcHBseSBiYXNlc3RyaW5nIGJvb2wKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBidWZmZXIgYnl0ZXMgY2FsbGFibGUgY2hyIGNsYXNzbWV0aG9kIGNtcCBjb2VyY2UKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBjb21waWxlIGNvbXBsZXggY29weXJpZ2h0IGNyZWRpdHMgZGVsYXR0ciBkaWN0Ci0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZGlyIGRpdm1vZCBlbnVtZXJhdGUgZXZhbCBleGVjZmlsZSBleGl0IGZpbGUKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBmaWx0ZXIgZmxvYXQgZnJvemVuc2V0IGdldGF0dHIgZ2xvYmFscyBoYXNhdHRyCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgaGFzaCBoZWxwIGhleCBpZCBpbnB1dCBpbnQgaW50ZXJuIGlzaW5zdGFuY2UKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBpc3N1YmNsYXNzIGl0ZXIgbGVuIGxpY2Vuc2UgbGlzdCBsb2NhbHMgbG9uZyBtYXAKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBtYXggbWluIG9iamVjdCBvY3Qgb3BlbiBvcmQgcG93IHByb3BlcnR5IHF1aXQKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICByYW5nZSByYXdfaW5wdXQgcmVkdWNlIHJlbG9hZCByZXByIHJldmVyc2VkIHJvdW5kCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgc2V0IHNldGF0dHIgc2xpY2Ugc29ydGVkIHN0YXRpY21ldGhvZCBzdHIgc3VtCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgc3VwZXIgdHJ1bmMgdHVwbGUgdHlwZSB1bmljaHIgdW5pY29kZSB2YXJzIHhyYW5nZQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHppcAorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIF9faW1wb3J0X18gYWJzIGFsbCBhbnkgYXBwbHkgYmFzZXN0cmluZyBiaW4gYm9vbAorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGJ1ZmZlciBieXRlYXJyYXkgYnl0ZXMgY2FsbGFibGUgY2hyIGNsYXNzbWV0aG9kCisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgY21wIGNvZXJjZSBjb21waWxlIGNvbXBsZXggY29weXJpZ2h0IGNyZWRpdHMKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBkZWxhdHRyIGRpY3QgZGlyIGRpdm1vZCBlbnVtZXJhdGUgZXZhbCBleGVjZmlsZQorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGV4aXQgZmlsZSBmaWx0ZXIgZmxvYXQgZm9ybWF0IGZyb3plbnNldCBnZXRhdHRyCisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZ2xvYmFscyBoYXNhdHRyIGhhc2ggaGVscCBoZXggaWQgaW5wdXQgaW50IGludGVybgorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGlzaW5zdGFuY2UgaXNzdWJjbGFzcyBpdGVyIGxlbiBsaWNlbnNlIGxpc3QKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBsb2NhbHMgbG9uZyBtYXAgbWF4IG1lbW9yeXZpZXcgbWluIG5leHQgb2JqZWN0CisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgb2N0IG9wZW4gb3JkIHBvdyBwcmludCBwcm9wZXJ0eSBxdWl0IHJhbmdlCisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgcmF3X2lucHV0IHJlZHVjZSByZWxvYWQgcmVwciByZXZlcnNlZCByb3VuZCBzZXQKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBzZXRhdHRyIHNsaWNlIHNvcnRlZCBzdGF0aWNtZXRob2Qgc3RyIHN1bSBzdXBlcgorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHR1cGxlIHR5cGUgdW5pY2hyIHVuaWNvZGUgdmFycyB4cmFuZ2UgemlwCiAKIGVuZGlmCiAKIAogaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMiKQogICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgQXJpdGhtZXRpY0Vycm9yIEFzc2VydGlvbkVycm9yIEF0dHJpYnV0ZUVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBCYXNlRXhjZXB0aW9uIERlcHJlY2F0aW9uV2FybmluZyBFT0ZFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgRW52aXJvbm1lbnRFcnJvciBFeGNlcHRpb24gRmxvYXRpbmdQb2ludEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBGdXR1cmVXYXJuaW5nIEdlbmVyYXRvckV4aXQgSU9FcnJvciBJbXBvcnRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgSW1wb3J0V2FybmluZyBJbmRlbnRhdGlvbkVycm9yIEluZGV4RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEtleUVycm9yIEtleWJvYXJkSW50ZXJydXB0IExvb2t1cEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBNZW1vcnlFcnJvciBOYW1lRXJyb3IgTm90SW1wbGVtZW50ZWRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgT1NFcnJvciBPdmVyZmxvd0Vycm9yIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEJhc2VFeGNlcHRpb24gQnVmZmVyRXJyb3IgQnl0ZXNXYXJuaW5nCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBEZXByZWNhdGlvbldhcm5pbmcgRU9GRXJyb3IgRW52aXJvbm1lbnRFcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgRXhjZXB0aW9uIEZsb2F0aW5nUG9pbnRFcnJvciBGdXR1cmVXYXJuaW5nCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBHZW5lcmF0b3JFeGl0IElPRXJyb3IgSW1wb3J0RXJyb3IgSW1wb3J0V2FybmluZworICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgSW5kZW50YXRpb25FcnJvciBJbmRleEVycm9yIEtleUVycm9yCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBLZXlib2FyZEludGVycnVwdCBMb29rdXBFcnJvciBNZW1vcnlFcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgTmFtZUVycm9yIE5vdEltcGxlbWVudGVkRXJyb3IgT1NFcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgT3ZlcmZsb3dFcnJvciBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nCiAgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBSZWZlcmVuY2VFcnJvciBSdW50aW1lRXJyb3IgUnVudGltZVdhcm5pbmcKICAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFN0YW5kYXJkRXJyb3IgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvcgogICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgU3ludGF4V2FybmluZyBTeXN0ZW1FcnJvciBTeXN0ZW1FeGl0IFRhYkVycm9yCmRpZmYgLS1naXQgYS9NaXNjL1ZpbS92aW1yYyBiL01pc2MvVmltL3ZpbXJjCmluZGV4IGFlMTRlNmEuLmZjMDBiOWUgMTAwNjQ0Ci0tLSBhL01pc2MvVmltL3ZpbXJjCisrKyBiL01pc2MvVmltL3ZpbXJjCkBAIC0xNSwzMSArMTUsMjkgQEAKICIgT25seSBiYXNpYyBzZXR0aW5ncyBuZWVkZWQgdG8gZW5mb3JjZSB0aGUgc3R5bGUgZ3VpZGVsaW5lcyBhcmUgc2V0LgogIiBTb21lIHN1Z2dlc3RlZCBvcHRpb25zIGFyZSBsaXN0ZWQgYnV0IGNvbW1lbnRlZCBvdXQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCiAKLQotIiBOdW1iZXIgb2Ygc3BhY2VzIHRvIHVzZSBmb3IgYW4gaW5kZW50LgotIiBUaGlzIHdpbGwgYWZmZWN0IEN0cmwtVCBhbmQgJ2F1dG9pbmRlbnQnLgotIiBQeXRob246IDQgc3BhY2VzCi0iIEM6IDggc3BhY2VzIChwcmUtZXhpc3RpbmcgZmlsZXMpIG9yIDQgc3BhY2VzIChuZXcgZmlsZXMpCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqcHl3IHNldCBzaGlmdHdpZHRoPTQKLWF1IEJ1ZlJlYWQgKi5jLCouaCBzZXQgc2hpZnR3aWR0aD04Ci1hdSBCdWZOZXdGaWxlICouYywqLmggc2V0IHNoaWZ0d2lkdGg9NAotCiAiIE51bWJlciBvZiBzcGFjZXMgdGhhdCBhIHByZS1leGlzdGluZyB0YWIgaXMgZXF1YWwgdG8uCiAiIEZvciB0aGUgYW1vdW50IG9mIHNwYWNlIHVzZWQgZm9yIGEgbmV3IHRhYiB1c2Ugc2hpZnR3aWR0aC4KLSIgUHl0aG9uOiA4Ci0iIEM6IDgKIGF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqcHksKnB5dywqLmMsKi5oIHNldCB0YWJzdG9wPTgKIAotIiBSZXBsYWNlIHRhYnMgd2l0aCB0aGUgZXF1aXZhbGVudCBudW1iZXIgb2Ygc3BhY2VzLgotIiBBbHNvIGhhdmUgYW4gYXV0b2NtZCBmb3IgTWFrZWZpbGVzIHNpbmNlIHRoZXkgcmVxdWlyZSBoYXJkIHRhYnMuCi0iIFB5dGhvbjogeWVzCi0iIEM6IG5vCi0iIE1ha2VmaWxlOiBubworIiBXaGF0IHRvIHVzZSBmb3IgYW4gaW5kZW50LgorIiBUaGlzIHdpbGwgYWZmZWN0IEN0cmwtVCBhbmQgJ2F1dG9pbmRlbnQnLgorIiBQeXRob246IDQgc3BhY2VzCisiIEM6IHRhYnMgKHByZS1leGlzdGluZyBmaWxlcykgb3IgNCBzcGFjZXMgKG5ldyBmaWxlcykKK2F1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCpweXcgc2V0IHNoaWZ0d2lkdGg9NAogYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcgc2V0IGV4cGFuZHRhYgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICouYywqLmggc2V0IG5vZXhwYW5kdGFiCitmdSBTZWxlY3RfY19zdHlsZSgpCisgICAgaWYgc2VhcmNoKCdeXHQnLCAnbicsIDE1MCkKKyAgICAgICAgc2V0IHNoaWZ0d2lkdGg9OAorICAgICAgICBzZXQgbm9leHBhbmR0YWIKKyAgICBlbCAKKyAgICAgICAgc2V0IHNoaWZ0d2lkdGg9NAorICAgICAgICBzZXQgZXhwYW5kdGFiCisgICAgZW4KK2VuZGYKK2F1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLmMsKi5oIGNhbGwgU2VsZWN0X2Nfc3R5bGUoKQogYXUgQnVmUmVhZCxCdWZOZXdGaWxlIE1ha2VmaWxlKiBzZXQgbm9leHBhbmR0YWIKIAotIiBVc2UgdGhlIGJlbG93IGhpZ2hsaWdodCBncm91cCB3aGVuIGRpc3BsYXlpbmcgYmFkIHdoaXRlc3BhY2UgaXMgZGVzaXJlZAorIiBVc2UgdGhlIGJlbG93IGhpZ2hsaWdodCBncm91cCB3aGVuIGRpc3BsYXlpbmcgYmFkIHdoaXRlc3BhY2UgaXMgZGVzaXJlZC4KIGhpZ2hsaWdodCBCYWRXaGl0ZXNwYWNlIGN0ZXJtYmc9cmVkIGd1aWJnPXJlZAogCiAiIERpc3BsYXkgdGFicyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBpbiBQeXRob24gbW9kZSBhcyBiYWQuCmRpZmYgLS1naXQgYS9NaXNjL2J1aWxkLnNoIGIvTWlzYy9idWlsZC5zaAppbmRleCA1ZDA5NmVlLi4yZjdiZmYxIDEwMDc1NQotLS0gYS9NaXNjL2J1aWxkLnNoCisrKyBiL01pc2MvYnVpbGQuc2gKQEAgLTUyLDE3ICs1MiwxNiBAQAogI0ZBSUxVUkVfQ0M9Im9wdGlvbmFsLS11bmNvbW1lbnQgYW5kIHNldCB0byBkZXNpcmVkIGFkZHJlc3MiCiAKIFJFTU9URV9TWVNURU09Im5lYWxAZGluc2RhbGUucHl0aG9uLm9yZyIKLVJFTU9URV9ESVI9Ii9kYXRhL2Z0cC5weXRob24ub3JnL3B1Yi93d3cucHl0aG9uLm9yZy9kb2MvY3VycmVudCIKLVJFTU9URV9ESVJfRElTVD0iL2RhdGEvZnRwLnB5dGhvbi5vcmcvcHViL3B5dGhvbi9kb2MvY3VycmVudCIKK1JFTU9URV9ESVI9Ii9kYXRhL2Z0cC5weXRob24ub3JnL3B1Yi9kb2NzLnB5dGhvbi5vcmcvZGV2LyIKIFJFU1VMVF9GSUxFPSIkRElSL2J1aWxkL2luZGV4Lmh0bWwiCi1JTlNUQUxMX0RJUj0iL3RtcC9weXRob24tdGVzdC0yLjYvbG9jYWwiCitJTlNUQUxMX0RJUj0iL3RtcC9weXRob24tdGVzdC9sb2NhbCIKIFJTWU5DX09QVFM9Ii1DIC1lIHNzaCAtcmxvZ0QiCiAKICMgQWx3YXlzIHJ1biB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUHl0aG9uLgogUFlUSE9OPSRJTlNUQUxMX0RJUi9iaW4vcHl0aG9uCiAKICMgUHl0aG9uIG9wdGlvbnMgYW5kIHJlZ3Jlc3Npb24gdGVzdCBwcm9ncmFtIHRoYXQgc2hvdWxkIGFsd2F5cyBiZSBydW4uCi1SRUdSVEVTVF9BUkdTPSItRSAtdHQgJElOU1RBTExfRElSL2xpYi9weXRob24yLjYvdGVzdC9yZWdydGVzdC5weSIKK1JFR1JURVNUX0FSR1M9Ii1FIC10dCAkSU5TVEFMTF9ESVIvbGliL3B5dGhvbjIuNy90ZXN0L3JlZ3J0ZXN0LnB5IgogCiBSRUZMT0c9ImJ1aWxkL3JlZmxvZy50eHQub3V0IgogIyBUaGVzZSB0ZXN0cyBhcmUgbm90IHN0YWJsZSBhbmQgZmFsc2VseSByZXBvcnQgbGVha3Mgc29tZXRpbWVzLgpAQCAtNzAsNyArNjksNyBAQAogIyBOb3RlOiB0ZXN0X1hYWCAobm9uZSBjdXJyZW50bHkpIHJlYWxseSBsZWFrLCBidXQgYXJlIGRpc2FibGVkCiAjIHNvIHdlIGRvbid0IHNlbmQgc3BhbS4gIEFueSB0ZXN0IHdoaWNoIHJlYWxseSBsZWFrcyBzaG91bGQgb25seSAKICMgYmUgbGlzdGVkIGhlcmUgaWYgdGhlcmUgYXJlIGFsc28gdGVzdCBjYXNlcyB1bmRlciBMaWIvdGVzdC9sZWFrZXJzLgotTEVBS1lfVEVTVFM9InRlc3RfKGFzeW5jaGF0fGNtZF9saW5lfGRvY3htbHJwY3xkdW1iZGJtfGZpbGV8ZnRwbGlifGh0dHBzZXJ2ZXJzfGltYXBsaWJ8cG9wZW4yfHNvY2tldHxzbXRwbGlifHN5c3x0ZWxuZXRsaWJ8dGhyZWFkZWR0ZW1wZmlsZXx0aHJlYWRpbmd8dGhyZWFkc2lnbmFsc3x1cmxsaWIyX2xvY2FsbmV0fHhtbHJwYykiCitMRUFLWV9URVNUUz0idGVzdF8oYXN5bmNoYXR8Y21kX2xpbmV8ZG9jeG1scnBjfGR1bWJkYm18ZmlsZXxmdHBsaWJ8aHR0cHNlcnZlcnN8aW1hcGxpYnxwb3BlbjJ8c29ja2V0fHNtdHBsaWJ8c3lzfHRlbG5ldGxpYnx0aHJlYWRlZHRlbXBmaWxlfHRocmVhZGluZ3x0aHJlYWRzaWduYWxzfHhtbHJwYykiCiAKICMgU2tpcCB0aGVzZSB0ZXN0cyBhbHRvZ2V0aGVyIHdoZW4gbG9va2luZyBmb3IgbGVha3MuICBUaGVzZSB0ZXN0cwogIyBkbyBub3QgbmVlZCB0byBiZSBzdG9yZWQgYWJvdmUgaW4gTEVBS1lfVEVTVFMgdG9vLgpAQCAtODEsNyArODAsNyBAQAogTEVBS1lfU0tJUFM9Ii14IHRlc3RfY29tcGlsZXIgdGVzdF9sb2dnaW5nIHRlc3RfaHR0cHNlcnZlcnMiCiAKICMgQ2hhbmdlIHRoaXMgZmxhZyB0byAieWVzIiBmb3Igb2xkIHJlbGVhc2VzIHRvIG9ubHkgdXBkYXRlL2J1aWxkIHRoZSBkb2NzLgotQlVJTERfRElTQUJMRUQ9InllcyIKK0JVSUxEX0RJU0FCTEVEPSJubyIKIAogIyMgdXRpbGl0eSBmdW5jdGlvbnMKIGN1cnJlbnRfdGltZSgpIHsKQEAgLTIxMyw3ICsyMTIsNyBAQAogICAgICAgICAgICAgIyMgbWFrZSBhbmQgcnVuIGJhc2ljIHRlc3RzCiAgICAgICAgICAgICBGPW1ha2UtdGVzdC5vdXQKICAgICAgICAgICAgIHN0YXJ0PWBjdXJyZW50X3RpbWVgCi0gICAgICAgICAgICAkUFlUSE9OICRSRUdSVEVTVF9BUkdTIC11IHVybGZldGNoID4mIGJ1aWxkLyRGCisgICAgICAgICAgICAkUFlUSE9OICRSRUdSVEVTVF9BUkdTIC1XIC11IHVybGZldGNoID4mIGJ1aWxkLyRGCiAgICAgICAgICAgICBOVU1fRkFJTFVSRVM9YGNvdW50X2ZhaWx1cmVzIGJ1aWxkLyRGYAogICAgICAgICAgICAgcGxhY2Vfc3VtbWFyeV9maXJzdCBidWlsZC8kRgogICAgICAgICAgICAgdXBkYXRlX3N0YXR1cyAiVGVzdGluZyBiYXNpY3MgKCROVU1fRkFJTFVSRVMgZmFpbHVyZXMpIiAiJEYiICRzdGFydApAQCAtMjIxLDcgKzIyMCw3IEBACiAKICAgICAgICAgICAgIEY9bWFrZS10ZXN0LW9wdC5vdXQKICAgICAgICAgICAgIHN0YXJ0PWBjdXJyZW50X3RpbWVgCi0gICAgICAgICAgICAkUFlUSE9OIC1PICRSRUdSVEVTVF9BUkdTIC11IHVybGZldGNoID4mIGJ1aWxkLyRGCisgICAgICAgICAgICAkUFlUSE9OIC1PICRSRUdSVEVTVF9BUkdTIC1XIC11IHVybGZldGNoID4mIGJ1aWxkLyRGCiAgICAgICAgICAgICBOVU1fRkFJTFVSRVM9YGNvdW50X2ZhaWx1cmVzIGJ1aWxkLyRGYAogICAgICAgICAgICAgcGxhY2Vfc3VtbWFyeV9maXJzdCBidWlsZC8kRgogICAgICAgICAgICAgdXBkYXRlX3N0YXR1cyAiVGVzdGluZyBvcHQgKCROVU1fRkFJTFVSRVMgZmFpbHVyZXMpIiAiJEYiICRzdGFydApAQCAtMjQ0LDcgKzI0Myw3IEBACiAgICAgICAgICAgICBzdGFydD1gY3VycmVudF90aW1lYAogICAgICAgICAgICAgIyMgc2tpcCBjdXJzZXMgd2hlbiBydW5uaW5nIGZyb20gY3JvbiBzaW5jZSB0aGVyZSdzIG5vIHRlcm1pbmFsCiAgICAgICAgICAgICAjIyBza2lwIHNvdW5kIHNpbmNlIGl0J3Mgbm90IHNldHVwIG9uIHRoZSBQU0YgYm94ICgvZGV2L2RzcCkKLSAgICAgICAgICAgICRQWVRIT04gJFJFR1JURVNUX0FSR1MgLXVhbGwgLXggdGVzdF9jdXJzZXMgdGVzdF9saW51eGF1ZGlvZGV2IHRlc3Rfb3NzYXVkaW9kZXYgPiYgYnVpbGQvJEYKKyAgICAgICAgICAgICRQWVRIT04gJFJFR1JURVNUX0FSR1MgLVcgLXVhbGwgLXggdGVzdF9jdXJzZXMgdGVzdF9saW51eGF1ZGlvZGV2IHRlc3Rfb3NzYXVkaW9kZXYgPiYgYnVpbGQvJEYKICAgICAgICAgICAgIE5VTV9GQUlMVVJFUz1gY291bnRfZmFpbHVyZXMgYnVpbGQvJEZgCiAgICAgICAgICAgICBwbGFjZV9zdW1tYXJ5X2ZpcnN0IGJ1aWxkLyRGCiAgICAgICAgICAgICB1cGRhdGVfc3RhdHVzICJUZXN0aW5nIGFsbCBleGNlcHQgY3Vyc2VzIGFuZCBzb3VuZCAoJE5VTV9GQUlMVVJFUyBmYWlsdXJlcykiICIkRiIgJHN0YXJ0CkBAIC0yNjcsMTggKzI2Niw2IEBACiAgICAgbWFpbF9vbl9mYWlsdXJlICJkb2MiIC4uL2J1aWxkLyRGCiBmaQogCi1GPSJtYWtlLWRvYy1kaXN0Lm91dCIKLXN0YXJ0PWBjdXJyZW50X3RpbWVgCi1pZiBbICRjb25mbGljdF9jb3VudCA9PSAwIF07IHRoZW4KLSAgICBtYWtlIGRpc3QgPiYgLi4vYnVpbGQvJEYKLSAgICBlcnI9JD8KLWZpCi11cGRhdGVfc3RhdHVzICJNYWtpbmcgZG93bmxvYWRhYmxlIGRvYyIgIiRGIiAkc3RhcnQKLWlmIFsgJGVyciAhPSAwIF07IHRoZW4KLSAgICBOVU1fRkFJTFVSRVM9MQotICAgIG1haWxfb25fZmFpbHVyZSAiZG9jIGRpc3QiIC4uL2J1aWxkLyRGCi1maQotCiBlY2hvICI8L3VsPiIgPj4gJFJFU1VMVF9GSUxFCiBlY2hvICI8L2JvZHk+IiA+PiAkUkVTVUxUX0ZJTEUKIGVjaG8gIjwvaHRtbD4iID4+ICRSRVNVTFRfRklMRQpAQCAtMjg4LDYgKzI3NSw1IEBACiAjY2hncnAgLVIgd2VibWFzdGVyIGJ1aWxkL2h0bWwKICNjaG1vZCAtUiBnK3cgYnVpbGQvaHRtbAogI3JzeW5jICRSU1lOQ19PUFRTIGJ1aWxkL2h0bWwvKiAkUkVNT1RFX1NZU1RFTTokUkVNT1RFX0RJUgotI3JzeW5jICRSU1lOQ19PUFRTIGRpc3QvKiAkUkVNT1RFX1NZU1RFTTokUkVNT1RFX0RJUl9ESVNUCiAjY2QgLi4vYnVpbGQKICNyc3luYyAkUlNZTkNfT1BUUyBpbmRleC5odG1sICoub3V0ICRSRU1PVEVfU1lTVEVNOiRSRU1PVEVfRElSL3Jlc3VsdHMvCmRpZmYgLS1naXQgYS9NaXNjL2NoZWF0c2hlZXQgYi9NaXNjL2NoZWF0c2hlZXQKaW5kZXggOThlMzM5OS4uZDg3ODQyNCAxMDA2NDQKLS0tIGEvTWlzYy9jaGVhdHNoZWV0CisrKyBiL01pc2MvY2hlYXRzaGVldApAQCAtMTM5MCw3ICsxMzkwLDcgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgb3MgdmFyaWFibGVzCiAgICAgIFZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVhbmluZwotbmFtZSAgICAgICAgICAgICAgICBuYW1lIG9mIE8vUy1zcGVjaWZpYyBtb2R1bGUgKGUuZy4gInBvc2l4IiwgIm1hYyIsICJudCIpCituYW1lICAgICAgICAgICAgICAgIG5hbWUgb2YgTy9TLXNwZWNpZmljIG1vZHVsZSAoZS5nLiAicG9zaXgiLCAibnQiKQogcGF0aCAgICAgICAgICAgICAgICBPL1Mtc3BlY2lmaWMgbW9kdWxlIGZvciBwYXRoIG1hbmlwdWxhdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgIE9uIFVuaXgsIG9zLnBhdGguc3BsaXQoKSA8PT4gcG9zaXhwYXRoLnNwbGl0KCkKIGN1cmRpciAgICAgICAgICAgICAgc3RyaW5nIHVzZWQgdG8gcmVwcmVzZW50IGN1cnJlbnQgZGlyZWN0b3J5ICgnLicpCmRpZmYgLS1naXQgYS9NaXNjL2RldmVsb3BlcnMudHh0IGIvTWlzYy9kZXZlbG9wZXJzLnR4dAppbmRleCAwZjJkNDFkLi4wYzM0NjEzIDEwMDY0NAotLS0gYS9NaXNjL2RldmVsb3BlcnMudHh0CisrKyBiL01pc2MvZGV2ZWxvcGVycy50eHQKQEAgLTEyLDExICsxMiw0MiBAQAogcHJvamVjdCBhZG1pbiB3aG8gbWFkZSB0aGUgY2hhbmdlIG9yIGdyYW50ZWQgYWNjZXNzLiAgRmVlbCBmcmVlIHRvIHJldmlzZQogdGhlIGZvcm1hdCB0byBhY2NvbW1vZGF0ZSBkb2N1bWVudGF0aW9uIG5lZWRzIGFzIHRoZXkgYXJpc2UuCiAKK05vdGUsIHdoZW4gZ2l2aW5nIG5ldyBjb21taXQgcGVybWlzc2lvbnMsIGJlIHN1cmUgdG8gZ2V0IGEgY29udHJpYnV0b3IKK2FncmVlbWVudCBmcm9tIHRoZSBjb21taXR0ZXIuICBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9jb250cmliLworZm9yIGRldGFpbHMuICBXaGVuIHRoZSBhZ3JlZW1lbnQgaXMgc2lnbmVkLCBwbGVhc2Ugbm90ZSBpdCBpbiB0aGlzIGxvZy4KIAorVGhpcyBmaWxlIGlzIGVuY29kZWQgaW4gVVRGLTguICBJZiB0aGUgdXN1YWwgZm9ybSBmb3IgYSBuYW1lIGlzIG5vdCBpbgorYSBMYXRpbiBvciBleHRlbmRlZCBMYXRpbiBhbHBoYWJldCwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgYW4gQVNDSUkKK3RyYW5zbGl0ZXJhdGlvbiB0b28uCiAKIFBlcm1pc3Npb25zIEhpc3RvcnkKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBEYXZpZCBNYWxjb2xtIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIE9jdCAyNyAyMDEwIGJ5IEdGQiwKKyAgYXQgcmVjb21tZW5kYXRpb24gYnkgQW50b2luZSBQaXRyb3UgYW5kIFJheW1vbmQgSGV0dGluZ2VyLgorCistIFRhbCBFaW5hdCB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBPY3QgNCAyMDEwIGJ5IE12TCwKKyAgZm9yIGltcHJvdmluZyBJRExFLgorCistIMWBdWthc3ogTGFuZ2Egd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gU2VwIDA4IDIwMTAgYnkgR0ZCLAorICBhdCBzdWdnZXN0aW9uIG9mIEFudG9pbmUgUGl0cm91LCBmb3IgZ2VuZXJhbCBidWcgZml4aW5nLgorCistIERhbmllbCBTdHV0emJhY2ggd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gQXVnIDIyIDIwMTAgYnkgTXZMLAorICBmb3IgZ2VuZXJhbCBidWcgZml4aW5nLgorCistIEFzayBTb2xlbSB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBBdWcgMTcgMjAxMCBieSBNdkwsCisgIG9uIHJlY29tbWVuZGF0aW9uIGJ5IEplc3NlIE5vbGxlciwgZm9yIHdvcmsgb24gdGhlIG11bHRpcHJvY2Vzc2luZworICBsaWJyYXJ5LgorCistIEdlb3JnZSBCb3V0c2lvdWtpcyB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBBdWcgMTAgMjAxMAorICBieSBNdkwsIGZvciB3b3JrIG9uIDJ0bzMuCisKKy0gw4lyaWMgQXJhdWpvIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIEF1ZyAxMCAyMDEwIGJ5IEJBQywKKyAgYXQgc3VnZ2VzdGlvbiBvZiBUYXJlayBaaWFkw6kuCisKKy0gVGVycnkgUmVlZHkgd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gQXVnIDA0IDIwMTAgYnkgTXZMLAorICBhdCBzdWdnZXN0aW9uIG9mIE5pY2sgQ29naGxhbi4KKwogLSBCcmlhbiBRdWlubGFuIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIEp1bCAyNiAyMDEwIGJ5IEdGQiwKICAgZm9yIHdvcmsgcmVsYXRlZCB0byBQRVAgMzE0OC4KIApAQCAtMzAsNyArNjEsNyBAQAogLSBUaW0gR29sZGVuIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIEFwcmlsIDIxIDIwMTAgYnkgTXZMLAogICBhdCBzdWdnZXN0aW9uIG9mIE1pY2hhZWwgRm9vcmQuCiAKLS0gR2lhbXBhb2xvIFJvZG9s4CB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBBcHJpbCAxNyAyMDEwIGJ5CistIEdpYW1wYW9sbyBSb2RvbMOgIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIEFwcmlsIDE3IDIwMTAgYnkKICAgTXZMLCBhdCBzdWdnZXN0aW9uIG9mIFIuIERhdmlkIE11cnJheS4KIAogLSBKZWFuLVBhdWwgQ2FsZGVyb25lIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIEFwcmlsIDYgMjAxMCBieQpAQCAtNzQsNyArMTA1LDcgQEAKIC0gQ2hyaXMgV2l0aGVycyB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiBNYXJjaCA4IDIwMDkgYnkgTXZMLAogICBhZnRlciByZWNvbW1lbmRhdGlvbiBieSBHdlIuCiAKLS0gVGFyZWsgWmlhZOkgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gRGVjZW1iZXIgMjEgMjAwOCBieSBOQ04sCistIFRhcmVrIFppYWTDqSB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiBEZWNlbWJlciAyMSAyMDA4IGJ5IE5DTiwKICAgZm9yIG1haW50ZW5hbmNlIG9mIGRpc3R1dGlscy4KIAogLSBIaXJva2F6dSBZYW1hbW90byB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiBBdWd1c3QgMTIgMjAwOCBieSBNdkwsCkBAIC0xNDMsNyArMTc0LDE0IEBACiAgIGZvciBoaXMgd29yayBvbiB0aGUgU1NMIG1vZHVsZSBhbmQgb3RoZXIgdGhpbmdzIHJlbGF0ZWQgdG8gKFNTTCkgc29ja2V0cy4KIAogLSBKZWZmcmV5IFlhc3NraW4gd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gOSBBdWd1c3QgMjAwNyBieSBOQ04sCi0gIGZvciBoaXMgd29yayBvbiBQRVBzIGFuZCBvdGhlciBnZW5lcmFsIHBhdGNoZXMuIAorICBmb3IgaGlzIHdvcmsgb24gUEVQcyBhbmQgb3RoZXIgZ2VuZXJhbCBwYXRjaGVzLgorCistIE1hcmsgU3VtbWVyZmllbGQgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gMSBBdWd1c3QgMjAwNyBieSBHRkIsCisgIGZvciB3b3JrIG9uIGRvY3VtZW50YXRpb24uCisKKy0gQXJtaW4gUm9uYWNoZXIgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gMjMgSnVseSAyMDA3IGJ5IEdGQiwKKyAgZm9yIHdvcmsgb24gdGhlIGRvY3VtZW50YXRpb24gdG9vbHNldC4gIEhlIG5vdyBtYWludGFpbnMgdGhlCisgIGFzdCBtb2R1bGUuCiAKIC0gU2VudGhpbCBLdW1hcmFuIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDE2IEp1bmUgMjAwNyBieSBNdkwsCiAgIGZvciBoaXMgU3VtbWVyLW9mLUNvZGUgcHJvamVjdCwgbWVudG9yZWQgYnkgU2tpcCBNb250YW5hcm8uCkBAIC0xODAsMTIgKzIxOCwxMiBAQAogICBoYXZlIHRoZWlyIHdvcmsgcmV2aWV3ZWQgYmVmb3JlIGNoYW5nZXMgYXJlIGFjY2VwdGVkIGludG8gdGhlIHRydW5rLgogCiAgIC0gTWF0dCBGbGVtaW5nIHdhcyBhZGRlZCBvbiAyNSBNYXkgMjAwNiBieSBBTUs7IGhlJ2xsIGJlIHdvcmtpbmcgb24KLSAgICBlbmhhbmNpbmcgdGhlIFB5dGhvbiBkZWJ1Z2dlci4gICAKKyAgICBlbmhhbmNpbmcgdGhlIFB5dGhvbiBkZWJ1Z2dlci4KIAogICAtIEphY2tpbHluIEhveHdvcnRoIHdhcyBhZGRlZCBvbiAyNSBNYXkgMjAwNiBieSBBTUs7IHNoZSdsbCBiZSBhZGRpbmcgbG9nZ2luZwotICAgIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiAgCisgICAgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkuCiAKLSAgLSBNYXRldXN6IFJ1a293aWN6IHdhcyBhZGRlZCBvbiAzMCBNYXkgMjAwNiBieSBBTUs7IGhlJ2xsIGJlIAorICAtIE1hdGV1c3ogUnVrb3dpY3ogd2FzIGFkZGVkIG9uIDMwIE1heSAyMDA2IGJ5IEFNSzsgaGUnbGwgYmUKICAgICB0cmFuc2xhdGluZyB0aGUgZGVjaW1hbCBtb2R1bGUgaW50byBDLgogCiAtIFNWTiBhY2Nlc3MgZ3JhbnRlZCB0byB0aGUgIk5lZWQgZm9yIFNwZWVkIiBJY2VsYW5kIHNwcmludCBhdHRlbmRlZXMsCkBAIC0xOTcsNyArMjM1LDcgQEAKICAgQ2hyaXN0aWFuIFRpc21lcgogICBKYWNrIERpZWRlcmljaAogICBKb2huIEJlbmVkaWt0c3NvbgotICBLcmlzdGrhbiBWLiBK825zc29uCisgIEtyaXN0asOhbiBWLiBKw7Nuc3NvbgogICBNYXJ0aW4gQmxhaXMKICAgUmljaGFyZCBFbXNsaWUKICAgUmljaGFyZCBKb25lcwpkaWZmIC0tZ2l0IGEvTWlzYy9nZGJpbml0IGIvTWlzYy9nZGJpbml0CmluZGV4IDMxNmZmM2QuLjkxZGE2ODkgMTAwNjQ0Ci0tLSBhL01pc2MvZ2RiaW5pdAorKysgYi9NaXNjL2dkYmluaXQKQEAgLTEsNSArMSwzIEBACi0jIC0qLSBrc2ggLSotCi0jCiAjIElmIHlvdSB1c2UgdGhlIEdOVSBkZWJ1Z2dlciBnZGIgdG8gZGVidWcgdGhlIFB5dGhvbiBDIHJ1bnRpbWUsIHlvdQogIyBtaWdodCBmaW5kIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB1c2VmdWwuICBDb3B5IHRoaXMgdG8geW91cgogIyB+Ly5nZGJpbml0IGZpbGUgYW5kIGl0J2xsIGdldCBsb2FkZWQgaW50byBnZGIgYXV0b21hdGljYWxseSB3aGVuIHlvdQpAQCAtMTEsMTkgKzksMjYgQEAKICMgICAgYWRkcmVzcyAgICA6IDg0YTdhMmMKICMgICAgJDEgPSB2b2lkCiAjICAgIChnZGIpCisjCisjIE5PVEU6IElmIHlvdSBoYXZlIGdkYiA3IG9yIGxhdGVyLCBpdCBzdXBwb3J0cyBkZWJ1Z2dpbmcgb2YgUHl0aG9uIGRpcmVjdGx5CisjIHdpdGggZW1iZWRkZWQgbWFjcm9zIHRoYXQgeW91IG1heSBmaW5kIHN1cGVyaW9yIHRvIHdoYXQgaXMgaW4gaGVyZS4KKyMgU2VlIFRvb2xzL2dkYi9saWJweXRob24ucHkgYW5kIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MDMyLgogCiAjIFByaW50cyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgdG8gc3RkZXJyLCBhbG9uZyB3aXRoIHRoZQogIyBudW1iZXIgb2YgcmVmZXJlbmNlIGNvdW50cyBpdCBjdXJyZW50IGhhcyBhbmQgdGhlIGhleCBhZGRyZXNzIHRoZQogIyBvYmplY3QgaXMgYWxsb2NhdGVkIGF0LiAgVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBQeU9iamVjdCoKIGRlZmluZSBweW8KLXByaW50IF9QeU9iamVjdF9EdW1wKCRhcmcwKQorICAgICMgc2lkZSBlZmZlY3Qgb2YgY2FsbGluZyBfUHlPYmplY3RfRHVtcCBpcyB0byBkdW1wIHRoZSBvYmplY3QncworICAgICMgaW5mbyAtIGFzc2lnbmluZyBqdXN0IHByZXZlbnRzIGdkYiBmcm9tIHByaW50aW5nIHRoZQorICAgICMgTlVMTCByZXR1cm4gdmFsdWUKKyAgICBzZXQgJF91bnVzZWRfdm9pZCA9IF9QeU9iamVjdF9EdW1wKCRhcmcwKQogZW5kCiAKICMgUHJpbnRzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCB0byBzdGRlcnIsIGFsb25nIHdpdGggdGhlCiAjIG51bWJlciBvZiByZWZlcmVuY2UgY291bnRzIGl0IGN1cnJlbnQgaGFzIGFuZCB0aGUgaGV4IGFkZHJlc3MgdGhlCiAjIG9iamVjdCBpcyBhbGxvY2F0ZWQgYXQuICBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFB5R0NfSGVhZCoKIGRlZmluZSBweWcKLXByaW50IF9QeUdDX0R1bXAoJGFyZzApCisgICAgcHJpbnQgX1B5R0NfRHVtcCgkYXJnMCkKIGVuZAogCiAjIHByaW50IHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGN1cnJlbnQgZnJhbWUKQEAgLTM0LDEwICszOSw3IEBACiAJICAgIHNldCAkX25hbWVzID0gY28tPmNvX3Zhcm5hbWVzCiAJICAgIHNldCAkX25hbWUgPSBQeVN0cmluZ19Bc1N0cmluZyhQeVR1cGxlX0dldEl0ZW0oJF9uYW1lcywgJF9pKSkKIAkgICAgcHJpbnRmICIlczpcbiIsICRfbmFtZQotCSAgICAjIHNpZGUgZWZmZWN0IG9mIGNhbGxpbmcgX1B5T2JqZWN0X0R1bXAgaXMgdG8gZHVtcCB0aGUgb2JqZWN0J3MKLQkgICAgIyBpbmZvIC0gYXNzaWduaW5nIGp1c3QgcHJldmVudHMgZ2RiIGZyb20gcHJpbnRpbmcgdGhlCi0JICAgICMgTlVMTCByZXR1cm4gdmFsdWUKLQkgICAgc2V0ICRfdmFsID0gX1B5T2JqZWN0X0R1bXAoZi0+Zl9sb2NhbHNwbHVzWyRfaV0pCisgICAgICAgICAgICBweW8gZi0+Zl9sb2NhbHNwbHVzWyRfaV0KIAllbmQKICAgICAgICAgc2V0ICRfaSA9ICRfaSArIDEKICAgICBlbmQKQEAgLTU5LDkgKzYxLDEwIEBACiAgICAgICBzZXQgJF9fcCA9ICRfX3AgKyAxCiAgICAgICBpZiAoJF9fYWQgPiAkX19sYXN0aSkKIAlzZXQgJF9fY29udGludWUgPSAwCisgICAgICBlbHNlCisgICAgICAgIHNldCAkX19saSA9ICRfX2xpICsgKiRfX3AKKyAgICAgICAgc2V0ICRfX3AgPSAkX19wICsgMQogICAgICAgZW5kCi0gICAgICBzZXQgJF9fbGkgPSAkX19saSArICokX19wCi0gICAgICBzZXQgJF9fcCA9ICRfX3AgKyAxCiAgICAgZW5kCiAgICAgcHJpbnRmICIlZCIsICRfX2xpCiBlbmQKQEAgLTExNSwxMiArMTE4LDE4IEBACiAjIGludGVycHJldGVyLCBidXQgdGhlIHRlc3QgY2FuIGJlIGV4dGVuZGVkIGJ5IGFuIGludGVyZXN0ZWQgcGFydHkpLiAgSWYKICMgUHlfTWFpbiA8PSAkcGMgPD0gUHlfR2V0QXJnY0FydiBpcyB0cnVlLCAkcGMgaXMgaW4gUHlfTWFpbigpLCBzbyB0aGUgd2hpbGUKICMgdGVzdHMgc3VjY2VlZHMgYXMgbG9uZyBhcyBpdCdzIG5vdCB0cnVlLiAgSW4gYSBzaW1pbGFyIGZhc2hpb24gdGhlIGlmCi0jIHN0YXRlbWVudCB0ZXN0cyB0byBzZWUgaWYgd2UgYXJlIGluIFB5RXZhbF9FdmFsRnJhbWUoKS4KKyMgc3RhdGVtZW50IHRlc3RzIHRvIHNlZSBpZiB3ZSBhcmUgaW4gUHlFdmFsX0V2YWxGcmFtZUV4KCkuCisKKyMgTm90ZTogVGhlIG5hbWUgb2YgdGhlIG1haW4gaW50ZXJwcmV0ZXIgZnVuY3Rpb24gYW5kIHRoZSBmdW5jdGlvbiB3aGljaAorIyBmb2xsb3cgaXQgaGFzIGNoYW5nZWQgb3ZlciB0aW1lLiAgVGhpcyB2ZXJzaW9uIG9mIHB5c3RhY2sgd29ya3Mgd2l0aCB0aGlzCisjIHZlcnNpb24gb2YgUHl0aG9uLiAgSWYgeW91IHRyeSB1c2luZyBpdCB3aXRoIG9sZGVyIG9yIG5ld2VyIHZlcnNpb25zIG9mCisjIHRoZSBpbnRlcnByZXRlciB5b3UgbWF5IHdpbGwgaGF2ZSB0byBjaGFuZ2UgdGhlIGZ1bmN0aW9ucyB5b3UgY29tcGFyZSB3aXRoCisjICRwYy4KIAogIyBwcmludCB0aGUgZW50aXJlIFB5dGhvbiBjYWxsIHN0YWNrCiBkZWZpbmUgcHlzdGFjawogICAgIHdoaWxlICRwYyA8IFB5X01haW4gfHwgJHBjID4gUHlfR2V0QXJnY0FyZ3YKLSAgICAgICAgaWYgJHBjID4gUHlFdmFsX0V2YWxGcmFtZSAmJiAkcGMgPCBQeUV2YWxfRXZhbENvZGVFeAorICAgICAgICBpZiAkcGMgPiBQeUV2YWxfRXZhbEZyYW1lRXggJiYgJHBjIDwgUHlFdmFsX0V2YWxDb2RlRXgKIAkgICAgcHlmcmFtZQogICAgICAgICBlbmQKICAgICAgICAgdXAtc2lsZW50bHkgMQpAQCAtMTMxLDcgKzE0MCw3IEBACiAjIHByaW50IHRoZSBlbnRpcmUgUHl0aG9uIGNhbGwgc3RhY2sgLSB2ZXJib3NlIG1vZGUKIGRlZmluZSBweXN0YWNrdgogICAgIHdoaWxlICRwYyA8IFB5X01haW4gfHwgJHBjID4gUHlfR2V0QXJnY0FyZ3YKLSAgICAgICAgaWYgJHBjID4gUHlFdmFsX0V2YWxGcmFtZSAmJiAkcGMgPCBQeUV2YWxfRXZhbENvZGVFeAorICAgICAgICBpZiAkcGMgPiBQeUV2YWxfRXZhbEZyYW1lRXggJiYgJHBjIDwgUHlFdmFsX0V2YWxDb2RlRXgKIAkgICAgcHlmcmFtZXYKICAgICAgICAgZW5kCiAgICAgICAgIHVwLXNpbGVudGx5IDEKZGlmZiAtLWdpdCBhL01pc2MvaW5kZW50LnBybyBiL01pc2MvaW5kZW50LnBybwppbmRleCAzZWZhYzg5Li4wMmNjZWI2IDEwMDY0NAotLS0gYS9NaXNjL2luZGVudC5wcm8KKysrIGIvTWlzYy9pbmRlbnQucHJvCkBAIC0xLDE1ICsxLDI0IEBACi0tc29iCi0tbmJhZAotLWJhcAotLWJyCi0tbmNlCi0tbmNzCi0tbnBjcwotLWk4Ci0taXA4Ci0tYzI1CistLWJsYW5rLWxpbmVzLWFmdGVyLWRlY2xhcmF0aW9ucworLS1ibGFuay1saW5lcy1hZnRlci1wcm9jZWR1cmVzCistLWJyYWNlcy1hZnRlci1mdW5jLWRlZi1saW5lCistLWJyYWNlcy1vbi1pZi1saW5lCistLWJyYWNlcy1vbi1zdHJ1Y3QtZGVjbC1saW5lCistLWJyZWFrLWFmdGVyLWJvb2xlYW4tb3BlcmF0b3IKKy0tY29tbWVudC1pbmRlbnRhdGlvbjI1CistLWNvbW1lbnQtbGluZS1sZW5ndGg3OQorLS1jb250aW51ZS1hdC1wYXJlbnRoZXNlcworLS1kb250LWN1ZGRsZS1kby13aGlsZQorLS1kb250LWN1ZGRsZS1lbHNlCistLWluZGVudC1sZXZlbDQKKy0tbGluZS1sZW5ndGg3OQorLS1uby1zcGFjZS1hZnRlci1jYXN0cworLS1uby1zcGFjZS1hZnRlci1mdW5jdGlvbi1jYWxsLW5hbWVzCistLW5vLXNwYWNlLWFmdGVyLXBhcmVudGhlc2VzCistLW5vLXRhYnMKKy0tcHJvY25hbWVzLXN0YXJ0LWxpbmVzCistLXNwYWNlLWFmdGVyLWZvcgorLS1zcGFjZS1hZnRlci1pZgorLS1zcGFjZS1hZnRlci13aGlsZQorLS1zd2FsbG93LW9wdGlvbmFsLWJsYW5rLWxpbmVzCistVCBQeUNGdW5jdGlvbgogLVQgUHlPYmplY3QKLQotCi0KLQpkaWZmIC0tZ2l0IGEvTWlzYy9tYWludGFpbmVycy5yc3QgYi9NaXNjL21haW50YWluZXJzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDFjYWJkCi0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9tYWludGFpbmVycy5yc3QKQEAgLTAsMCArMSwzMTkgQEAKK01haW50YWluZXJzIEluZGV4Cis9PT09PT09PT09PT09PT09PQorCisuLiB3YXJuaW5nOjoKKworICAgVGhpcyBkb2N1bWVudCBpcyBvdXQgb2YgZGF0ZSBhbmQgcmVwbGFjZWQgYnkgYW5vdGhlciB2ZXJzaW9uIGluIHRoZQorICAgZGV2ZWxvcGVyJ3MgZ3VpZGUgYXQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9leHBlcnRzCisKK1RoaXMgZG9jdW1lbnQgaGFzIHRhYmxlcyB0aGF0IGxpc3QgUHl0aG9uIE1vZHVsZXMsIFRvb2xzLCBQbGF0Zm9ybXMgYW5kCitJbnRlcmVzdCBBcmVhcyBhbmQgbmFtZXMgZm9yIGVhY2ggaXRlbSB0aGF0IGluZGljYXRlIGEgbWFpbnRhaW5lciBvciBhbgorZXhwZXJ0IGluIHRoZSBmaWVsZC4gIFRoaXMgbGlzdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGlzc3VlIHN1Ym1pdHRlcnMsCitpc3N1ZSB0cmlhZ2UgcGVvcGxlLCBhbmQgb3RoZXIgaXNzdWUgcGFydGljaXBhbnRzIHRvIGZpbmQgcGVvcGxlIHRvIGFkZCB0bwordGhlIG5vc3kgbGlzdCBvciB0byBjb250YWN0IGRpcmVjdGx5IGJ5IGVtYWlsIGZvciBoZWxwIGFuZCBkZWNpc2lvbnMgb24KK2ZlYXR1cmUgcmVxdWVzdHMgYW5kIGJ1ZyBmaXhlcy4gIFBlb3BsZSBvbiB0aGlzIGxpc3QgbWF5IGJlIGFza2VkIHRvIHJlbmRlcgorZmluYWwganVkZ2VtZW50IG9uIGEgZmVhdHVyZSBvciBidWcuICBJZiBubyBhY3RpdmUgbWFpbnRhaW5lciBpcyBsaXN0ZWQgZm9yCithIGdpdmVuIG1vZHVsZSwgdGhlbiBxdWVzdGlvbmFibGUgY2hhbmdlcyBzaG91bGQgZ28gdG8gcHl0aG9uLWRldiwgd2hpbGUKK2FueSBvdGhlciBpc3N1ZXMgY2FuIGFuZCBzaG91bGQgYmUgZGVjaWRlZCBieSBhbnkgY29tbWl0dGVyLgorCitVbmxlc3MgYSBuYW1lIGlzIGZvbGxvd2VkIGJ5IGEgJyonLCB5b3Ugc2hvdWxkIG5ldmVyIGFzc2lnbiBhbiBpc3N1ZSB0bwordGhhdCBwZXJzb24sIG9ubHkgbWFrZSB0aGVtIG5vc3kuICBOYW1lcyBmb2xsb3dlZCBieSBhICcqJyBtYXkgYmUgYXNzaWduZWQKK2lzc3VlcyBpbnZvbHZpbmcgdGhlIG1vZHVsZSBvciB0b3BpYy4KKworVGhlIFBsYXRmb3JtIGFuZCBJbnRlcmVzdCBBcmVhIHRhYmxlcyBsaXN0IGJyb2FkZXIgZmllbGRzIGluIHdoaWNoIHZhcmlvdXMKK3Blb3BsZSBoYXZlIGV4cGVydGlzZS4gIFRoZXNlIHBlb3BsZSBjYW4gYWxzbyBiZSBjb250YWN0ZWQgZm9yIGhlbHAsCitvcGluaW9ucywgYW5kIGRlY2lzaW9ucyB3aGVuIGlzc3VlcyBpbnZvbHZlIHRoZWlyIGFyZWFzLgorCitJZiBhIGxpc3RlZCBtYWludGFpbmVyIGRvZXMgbm90IHJlc3BvbmQgdG8gcmVxdWVzdHMgZm9yIGNvbW1lbnQgZm9yIGFuCitleHRlbmRlZCBwZXJpb2QgKHRocmVlIHdlZWtzIG9yIG1vcmUpLCB0aGV5IHNob3VsZCBiZSBtYXJrZWQgYXMgaW5hY3RpdmUKK2luIHRoaXMgbGlzdCBieSBwbGFjaW5nIHRoZSB3b3JkICdpbmFjdGl2ZScgaW4gcGFyZW50aGVzaXMgYmVoaW5kIHRoZWlyCit0cmFja2VyIGlkLiAgVGhleSBhcmUgb2YgY291cnNlIGZyZWUgdG8gcmVtb3ZlIHRoYXQgaW5hY3RpdmUgbWFyayBhdAorYW55IHRpbWUuCisKK0NvbW1pdHRlcnMgc2hvdWxkIHVwZGF0ZSB0aGVzZSB0YWJsZXMgYXMgdGhlaXIgYXJlYXMgb2YgZXhwZXJ0aXNlIHdpZGVuLgorTmV3IHRvcGljcyBtYXkgYmUgYWRkZWQgdG8gdGhlIEludGVyZXN0IEFyZWEgdGFibGUgYXQgd2lsbC4KKworVGhlIGV4aXN0ZW5jZSBvZiB0aGlzIGxpc3QgaXMgbm90IG1lYW50IHRvIGluZGljYXRlIHRoYXQgdGhlc2UgcGVvcGxlCisqbXVzdCogYmUgY29udGFjdGVkIGZvciBkZWNpc2lvbnM7IGl0IGlzLCByYXRoZXIsIGEgcmVzb3VyY2UgdG8gYmUgdXNlZAorYnkgbm9uLWNvbW1pdHRlcnMgdG8gZmluZCByZXNwb25zaWJsZSBwYXJ0aWVzLCBhbmQgYnkgY29tbWl0dGVycyB3aG8gZG8KK25vdCBmZWVsIHF1YWxpZmllZCB0byBtYWtlIGEgZGVjaXNpb24gaW4gYSBwYXJ0aWN1bGFyIGNvbnRleHQuCisKK1NlZSBhbHNvIGBQRVAgMjkxYF8gYW5kIGBQRVAgMzYwYF8gZm9yIGluZm9ybWF0aW9uIGFib3V0IGNlcnRhaW4gbW9kdWxlcword2l0aCBzcGVjaWFsIHJ1bGVzLgorCisuLiBfYFBFUCAyOTFgOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTAyOTEvCisuLiBfYFBFUCAzNjBgOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTAzNjAvCisKKworPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PQorTW9kdWxlICAgICAgICAgICAgICBNYWludGFpbmVycworPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PQorX19idWlsdGluX18KK19fZnV0dXJlX18KK19fbWFpbl9fICAgICAgICAgICAgZ3ZhbnJvc3N1bQorX2R1bW15X3RocmVhZCAgICAgICBicmV0dC5jYW5ub24KK190aHJlYWQgICAgICAgICAgICAgcGl0cm91Citfd2lucmVnICAgICAgICAgICAgIGJyaWFuLmN1cnRpbiosIHN0dXR6YmFjaAorYWJjCithaWZjICAgICAgICAgICAgICAgIHIuZGF2aWQubXVycmF5CithcmdwYXJzZSAgICAgICAgICAgIGJldGhhcmQKK2FycmF5Cithc3QKK2FzeW5jaGF0ICAgICAgICAgICAgam9zaWFoY2FybHNvbiwgZ2lhbXBhb2xvLnJvZG9sYSwgc3R1dHpiYWNoCithc3luY29yZSAgICAgICAgICAgIGpvc2lhaGNhcmxzb24sIGdpYW1wYW9sby5yb2RvbGEsIHN0dXR6YmFjaAorYXRleGl0CithdWRpb29wCitiYXNlNjQKK0Jhc2VIVFRQU2VydmVyCitiZGIKK2JpbmFzY2lpCitiaW5oZXgKK2Jpc2VjdCAgICAgICAgICAgICAgcmhldHRpbmdlcgorYnoyCitjYWxlbmRhciAgICAgICAgICAgIHJoZXR0aW5nZXIKK2NnaQorQ0dJSFRUUFNlcnZlcgorY2dpdGIKK2NodW5rCitjbWF0aCAgICAgICAgICAgICAgIG1hcmsuZGlja2luc29uCitjbWQKK2NvZGUKK2NvZGVjcyAgICAgICAgICAgICAgbGVtYnVyZywgZG9lcndhbHRlcgorY29kZW9wCitjb2xsZWN0aW9ucyAgICAgICAgIHJoZXR0aW5nZXIKK2NvbGxlY3Rpb25zLl9hYmNvbGwgcmhldHRpbmdlciwgc3R1dHpiYWNoCitjb2xvcnN5cworY29tcGlsZWFsbAorQ29uZmlnUGFyc2VyICAgICAgICBsdWthc3oubGFuZ2EKK2NvbnRleHRsaWIgICAgICAgICAgbmNvZ2hsYW4KK2NvcHkgICAgICAgICAgICAgICAgYWxleGFuZHJlLnZhc3NhbG90dGkKK2NvcHlfcmVnICAgICAgICAgICAgYWxleGFuZHJlLnZhc3NhbG90dGkKK2NQcm9maWxlCitjcnlwdCAgICAgICAgICAgICAgIGphZm8qCitjc3YgICAgICAgICAgICAgICAgIHNraXAubW9udGFuYXJvCitjdHlwZXMgICAgICAgICAgICAgIHRoZWxsZXIKK2N1cnNlcworZGF0ZXRpbWUgICAgICAgICAgICBiZWxvcG9sc2t5CitkYm0KK2RlY2ltYWwgICAgICAgICAgICAgZmFjdW5kb2JhdGlzdGEsIHJoZXR0aW5nZXIsIG1hcmsuZGlja2luc29uCitkaWZmbGliICAgICAgICAgICAgIHRpbV9vbmUgKGluYWN0aXZlKQorZGlzCitkaXN0dXRpbHMgICAgICAgICAgIHRhcmVrKiwgZXJpYy5hcmF1am8qCitkb2N0ZXN0ICAgICAgICAgICAgIHRpbV9vbmUgKGluYWN0aXZlKQorZHVtbXlfdGhyZWFkaW5nICAgICBicmV0dC5jYW5ub24KK2VtYWlsICAgICAgICAgICAgICAgYmFycnksIHIuZGF2aWQubXVycmF5KgorZW5jb2RpbmdzICAgICAgICAgICBsZW1idXJnLCBsb2V3aXMKK2Vycm5vCitleGNlcHRpb25zCitmY250bAorZmlsZWNtcAorZmlsZWlucHV0Citmbm1hdGNoCitmb3JtYXR0ZXIKK2ZwZWN0bAorZnJhY3Rpb25zICAgICAgICAgICBtYXJrLmRpY2tpbnNvbiwgcmhldHRpbmdlcgorZnRwbGliICAgICAgICAgICAgICBnaWFtcGFvbG8ucm9kb2xhCitmdW5jdG9vbHMgICAgICAgICAgIG5jb2dobGFuLCByaGV0dGluZ2VyCitnYyAgICAgICAgICAgICAgICAgIHBpdHJvdQorZ2V0b3B0CitnZXRwYXNzCitnZXR0ZXh0ICAgICAgICAgICAgIGxvZXdpcworZ2xvYgorZ3JwCitnemlwCitoYXNobGliCitoZWFwcSAgICAgICAgICAgICAgIHJoZXR0aW5nZXIsIHN0dXR6YmFjaAoraG1hYworaHRtbGVudGl0eWRlZnMKK2h0bWxsaWIKK0hUTUxQYXJzZXIKK2h0dHBsaWIKK2lkbGVsaWIgICAgICAgICAgICAga2JrCitpbWFwbGliCitpbWdoZHIKK2ltcAoraW1wb3J0bGliICAgICAgICAgICBicmV0dC5jYW5ub24KK2luc3BlY3QKK2lvICAgICAgICAgICAgICAgICAgcGl0cm91LCBiZW5qYW1pbi5wZXRlcnNvbiwgc3R1dHpiYWNoCitpdGVydG9vbHMgICAgICAgICAgIHJoZXR0aW5nZXIKK2pzb24gICAgICAgICAgICAgICAgYm9iLmlwcG9saXRvIChpbmFjdGl2ZSksIHJoZXR0aW5nZXIKK2tleXdvcmQKK2xpYjJ0bzMgICAgICAgICAgICAgYmVuamFtaW4ucGV0ZXJzb24KK2xpbmVjYWNoZQorbG9jYWxlICAgICAgICAgICAgICBsb2V3aXMsIGxlbWJ1cmcKK2xvZ2dpbmcgICAgICAgICAgICAgdmluYXkuc2FqaXAKK21hY3BhdGgKK21haWxib3gKK21haWxjYXAKK21hcnNoYWwKK21hdGggICAgICAgICAgICAgICAgbWFyay5kaWNraW5zb24sIHJoZXR0aW5nZXIsIHN0dXR6YmFjaAorbWltZXR5cGVzCittbWFwCittb2R1bGVmaW5kZXIgICAgICAgIHRoZWxsZXIsIGp2cgorbXNpbGliICAgICAgICAgICAgICBsb2V3aXMKK21zdmNydAorbXVsdGlwcm9jZXNzaW5nICAgICBqbm9sbGVyCituZXRyYworbmlzCitubnRwbGliICAgICAgICAgICAgIHBpdHJvdQorbnVtYmVycworb3BlcmF0b3IKK29wdHBhcnNlICAgICAgICAgICAgYXJvbmFjaGVyCitvcyAgICAgICAgICAgICAgICAgIGxvZXdpcworb3NzYXVkaW9kZXYKK3BhcnNlcgorcGRiICAgICAgICAgICAgICAgICBnZW9yZy5icmFuZGwqCitwaWNrbGUgICAgICAgICAgICAgIGFsZXhhbmRyZS52YXNzYWxvdHRpLCBwaXRyb3UKK3BpY2tsZXRvb2xzICAgICAgICAgYWxleGFuZHJlLnZhc3NhbG90dGkKK3BpcGVzCitwa2d1dGlsCitwbGF0Zm9ybSAgICAgICAgICAgIGxlbWJ1cmcKK3BsaXN0bGliCitwb3BsaWIKK3Bvc2l4CitwcHJpbnQgICAgICAgICAgICAgIGZkcmFrZQorcHJvZmlsZSAgICAgICAgICAgICBnZW9yZy5icmFuZGwKK3BzdGF0cyAgICAgICAgICAgICAgZ2VvcmcuYnJhbmRsCitwdHkKK3B3ZAorcHlfY29tcGlsZQorcHliZW5jaCAgICAgICAgICAgICBsZW1idXJnLCBwaXRyb3UKK3B5Y2xicgorcHlkb2MKK1F1ZXVlICAgICAgICAgICAgICAgcmhldHRpbmdlcgorcXVvcHJpCityYW5kb20gICAgICAgICAgICAgIHJoZXR0aW5nZXIKK3JlICAgICAgICAgICAgICAgICAgZWZmYm90IChpbmFjdGl2ZSksIHBpdHJvdSwgZXppby5tZWxvdHRpCityZWFkbGluZQorcmVwcmxpYgorcmVzb3VyY2UKK3JsY29tcGxldGVyCitydW5weSAgICAgICAgICAgICAgIG5jb2dobGFuCitzY2hlZAorc2VsZWN0CitzaGVsdmUKK3NobGV4CitzaHV0aWwgICAgICAgICAgICAgIHRhcmVrCitzaWduYWwKK1NpbXBsZUhUVFBTZXJ2ZXIKK3NpdGUKK3NtdHBkCitzbXRwbGliCitzbmRoZHIKK3NvY2tldAorU29ja2V0U2VydmVyCitzcHdkCitzcWxpdGUzICAgICAgICAgICAgIGdoYWVyaW5nCitzc2wgICAgICAgICAgICAgICAgIGphbnNzZW4sIHBpdHJvdSwgZ2lhbXBhb2xvLnJvZG9sYQorc3RhdAorc3RyaW5nICAgICAgICAgICAgICBnZW9yZy5icmFuZGwqCitzdHJpbmdwcmVwCitzdHJ1Y3QgICAgICAgICAgICAgIG1hcmsuZGlja2luc29uCitzdWJwcm9jZXNzICAgICAgICAgIGFzdHJhbmQgKGluYWN0aXZlKQorc3VuYXUKK3N5bWJvbAorc3ltdGFibGUgICAgICAgICAgICBiZW5qYW1pbi5wZXRlcnNvbgorc3lzCitzeXNjb25maWcgICAgICAgICAgIHRhcmVrCitzeXNsb2cgICAgICAgICAgICAgIGphZm8qCit0YWJuYW5ueSAgICAgICAgICAgIHRpbV9vbmUgKGluYWN0aXZlKQordGFyZmlsZSAgICAgICAgICAgICBsYXJzLmd1c3RhZWJlbAordGVsbmV0bGliCit0ZW1wZmlsZSAgICAgICAgICAgIGdlb3JnLmJyYW5kbAordGVybWlvcwordGVzdAordGV4dHdyYXAgICAgICAgICAgICBnZW9yZy5icmFuZGwKK3RocmVhZGluZyAgICAgICAgICAgcGl0cm91Cit0aW1lICAgICAgICAgICAgICAgIGJlbG9wb2xza3kKK3RpbWVpdCAgICAgICAgICAgICAgZ2VvcmcuYnJhbmRsCitUa2ludGVyICAgICAgICAgICAgIGdwb2xvCit0b2tlbiAgICAgICAgICAgICAgIGdlb3JnLmJyYW5kbAordG9rZW5pemUKK3RyYWNlICAgICAgICAgICAgICAgYmVsb3BvbHNreQordHJhY2ViYWNrICAgICAgICAgICBnZW9yZy5icmFuZGwqCit0dHkKK3R1cnRsZSAgICAgICAgICAgICAgZ3JlZ29ybGluZ2wKK3R5cGVzCit1bmljb2RlZGF0YSAgICAgICAgIGxvZXdpcywgbGVtYnVyZywgZXppby5tZWxvdHRpCit1bml0dGVzdCAgICAgICAgICAgIG1pY2hhZWwuZm9vcmQsIGV6aW8ubWVsb3R0aQordXJsbGliICAgICAgICAgICAgICBvcnNlbnRoaWwKK3V1Cit1dWlkCit3YXJuaW5ncyAgICAgICAgICAgIGJyZXR0LmNhbm5vbgord2F2ZQord2Vha3JlZiAgICAgICAgICAgICBmZHJha2UsIHBpdHJvdQord2ViYnJvd3NlciAgICAgICAgICBnZW9yZy5icmFuZGwKK3dpbnNvdW5kICAgICAgICAgICAgZWZmYm90IChpbmFjdGl2ZSkKK3dzZ2lyZWYgICAgICAgICAgICAgcGplCit4ZHJsaWIKK3htbC5kb20KK3htbC5kb20ubWluaWRvbQoreG1sLmRvbS5wdWxsZG9tCit4bWwuZXRyZWUgICAgICAgICAgIGVmZmJvdCAoaW5hY3RpdmUpCit4bWwucGFyc2Vycy5leHBhdAoreG1sLnNheAoreG1sLnNheC5oYW5kbGVyCit4bWwuc2F4LnNheHV0aWxzCit4bWwuc2F4LnhtbHJlYWRlcgoreG1scnBjICAgICAgICAgICAgICBsb2V3aXMKK3ppcGZpbGUgICAgICAgICAgICAgYWxhbm1jaW50eXJlCit6aXBpbXBvcnQKK3psaWIKKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KKworCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09CitUb29sICAgICAgICAgICAgICAgIE1haW50YWluZXJzCistLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tCitweWJlbmNoICAgICAgICAgICAgIGxlbWJ1cmcKKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KKworCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09CitQbGF0Zm9ybSAgICAgICAgICAgIE1haW50YWluZXJzCistLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tCitBSVgKK0N5Z3dpbiAgICAgICAgICAgICAgamx0NjMsIHN0dXR6YmFjaAorRnJlZUJTRAorSFAtVVgKK0xpbnV4CitNYWMgICAgICAgICAgICAgICAgIHJvbmFsZG91c3NvcmVuLCBuZWQuZGVpbHkKK05ldEJTRDEKK09TMi9FTVggICAgICAgICAgICAgYWltYWNpbnR5cmUKK1NvbGFyaXMKK1dpbmRvd3MgICAgICAgICAgICAgdGltLmdvbGRlbiwgYnJpYW4uY3VydGluCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09CisKKworPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PQorSW50ZXJlc3QgQXJlYSAgICAgICBNYWludGFpbmVycworLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLQorYWxnb3JpdGhtcworYXN0L2NvbXBpbGVyICAgICAgICBuY29naGxhbiwgYmVuamFtaW4ucGV0ZXJzb24sIGJyZXR0LmNhbm5vbiwgZ2VvcmcuYnJhbmRsCithdXRvY29uZi9tYWtlZmlsZXMKK2JzZAorYnVnIHRyYWNrZXIgICAgICAgICBlemlvLm1lbG90dGkKK2J1aWxkYm90cworYnl0ZWNvZGUgICAgICAgICAgICBwaXRyb3UKK2RhdGEgZm9ybWF0cyAgICAgICAgbWFyay5kaWNraW5zb24sIGdlb3JnLmJyYW5kbAorZGF0YWJhc2UgICAgICAgICAgICBsZW1idXJnCitkb2N1bWVudGF0aW9uICAgICAgIGdlb3JnLmJyYW5kbCwgZXppby5tZWxvdHRpCitHVUkKK2kxOG4gICAgICAgICAgICAgICAgbGVtYnVyZworaW1wb3J0IG1hY2hpbmVyeSAgICBicmV0dC5jYW5ub24sIG5jb2dobGFuCitpbyAgICAgICAgICAgICAgICAgIHBpdHJvdSwgYmVuamFtaW4ucGV0ZXJzb24sIHN0dXR6YmFjaAorbG9jYWxlICAgICAgICAgICAgICBsZW1idXJnLCBsb2V3aXMKK21hdGhlbWF0aWNzICAgICAgICAgbWFyay5kaWNraW5zb24sIGVyaWMuc21pdGgsIGxlbWJ1cmcsIHN0dXR6YmFjaAorbWVtb3J5IG1hbmFnZW1lbnQgICB0aW1fb25lLCBsZW1idXJnCituZXR3b3JraW5nICAgICAgICAgIGdpYW1wYW9sby5yb2RvbGEKK3BhY2thZ2luZyAgICAgICAgICAgdGFyZWssIGxlbWJ1cmcKK3B5MyB0cmFuc2l0aW9uICAgICAgYmVuamFtaW4ucGV0ZXJzb24KK3JlbGVhc2UgbWFuYWdlbWVudCAgdGFyZWssIGxlbWJ1cmcsIGJlbmphbWluLnBldGVyc29uLCBiYXJyeSwgbG9ld2lzLAorICAgICAgICAgICAgICAgICAgICBndmFucm9zc3VtLCBhbnRob255YmF4dGVyCitzdHIuZm9ybWF0ICAgICAgICAgIGVyaWMuc21pdGgKK3Rlc3RpbmcgICAgICAgICAgICAgbWljaGFlbC5mb29yZCwgcGl0cm91LCBnaWFtcGFvbG8ucm9kb2xhLCBlemlvLm1lbG90dGkKK3RocmVhZHMgICAgICAgICAgICAgcGl0cm91Cit0aW1lIGFuZCBkYXRlcyAgICAgIGxlbWJ1cmcsIGJlbG9wb2xza3kKK3VuaWNvZGUgICAgICAgICAgICAgbGVtYnVyZywgZXppby5tZWxvdHRpLCBoYXlwbwordmVyc2lvbiBjb250cm9sCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09CmRpZmYgLS1naXQgYS9NaXNjL3B5bWVtY29tcGF0LmggYi9NaXNjL3B5bWVtY29tcGF0LmgKaW5kZXggMjc1N2UzYS4uYTBmYTMzNiAxMDA2NDQKLS0tIGEvTWlzYy9weW1lbWNvbXBhdC5oCisrKyBiL01pc2MvcHltZW1jb21wYXQuaApAQCAtNzIsNyArNzIsNyBAQAogCiAgICBJdCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0IGJvdGggdGhlIDIuMCBhbmQgMi4yIEdDIEFQSXMsIGJ1dCBpdCdzCiAgICBub3QgcHJldHR5IGFuZCB0aGlzIGNvbW1lbnQgYmxvY2sgaXMgdG9vIG5hcnJvdyB0byBjb250YWluIGEKLSAgIGRlc2NpcHRpb24gb2Ygd2hhdCdzIHJlcXVpcmVkLi4uICovCisgICBkZXNjcmlwdGlvbiBvZiB3aGF0J3MgcmVxdWlyZWQuLi4gKi8KIAogI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjAyMDBCMQogI2RlZmluZSBQeU9iamVjdF9HQ19OZXcgICAgICAgICBQeU9iamVjdF9OZXcKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLWNvbmZpZy5pbiBiL01pc2MvcHl0aG9uLWNvbmZpZy5pbgppbmRleCA5YWM0NDE0Li41NTJiYmQ1IDEwMDY0NAotLS0gYS9NaXNjL3B5dGhvbi1jb25maWcuaW4KKysrIGIvTWlzYy9weXRob24tY29uZmlnLmluCkBAIC01LDExICs1LDExIEBACiBpbXBvcnQgZ2V0b3B0CiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiAKLXZhbGlkX29wdHMgPSBbJ3ByZWZpeCcsICdleGVjLXByZWZpeCcsICdpbmNsdWRlcycsICdsaWJzJywgJ2NmbGFncycsIAordmFsaWRfb3B0cyA9IFsncHJlZml4JywgJ2V4ZWMtcHJlZml4JywgJ2luY2x1ZGVzJywgJ2xpYnMnLCAnY2ZsYWdzJywKICAgICAgICAgICAgICAgJ2xkZmxhZ3MnLCAnaGVscCddCiAKIGRlZiBleGl0X3dpdGhfdXNhZ2UoY29kZT0xKToKLSAgICBwcmludCA+PnN5cy5zdGRlcnIsICJVc2FnZTogJXMgWyVzXSIgJSAoc3lzLmFyZ3ZbMF0sIAorICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIlVzYWdlOiAlcyBbJXNdIiAlIChzeXMuYXJndlswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3wnLmpvaW4oJy0tJytvcHQgZm9yIG9wdCBpbiB2YWxpZF9vcHRzKSkKICAgICBzeXMuZXhpdChjb2RlKQogCkBAIC0yMSwzMyArMjEsMzYgQEAKIGlmIG5vdCBvcHRzOgogICAgIGV4aXRfd2l0aF91c2FnZSgpCiAKLW9wdCA9IG9wdHNbMF1bMF0KLQogcHl2ZXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1ZFUlNJT04nKQogZ2V0dmFyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyCiAKLWlmIG9wdCA9PSAnLS1oZWxwJzoKLSAgICBleGl0X3dpdGhfdXNhZ2UoMCkKK29wdF9mbGFncyA9IFtmbGFnIGZvciAoZmxhZywgdmFsKSBpbiBvcHRzXQogCi1lbGlmIG9wdCA9PSAnLS1wcmVmaXgnOgotICAgIHByaW50IHN5c2NvbmZpZy5QUkVGSVgKK2lmICctLWhlbHAnIGluIG9wdF9mbGFnczoKKyAgICBleGl0X3dpdGhfdXNhZ2UoY29kZT0wKQogCi1lbGlmIG9wdCA9PSAnLS1leGVjLXByZWZpeCc6Ci0gICAgcHJpbnQgc3lzY29uZmlnLkVYRUNfUFJFRklYCitmb3Igb3B0IGluIG9wdF9mbGFnczoKKyAgICBpZiBvcHQgPT0gJy0tcHJlZml4JzoKKyAgICAgICAgcHJpbnQgc3lzY29uZmlnLlBSRUZJWAogCi1lbGlmIG9wdCBpbiAoJy0taW5jbHVkZXMnLCAnLS1jZmxhZ3MnKToKLSAgICBmbGFncyA9IFsnLUknICsgc3lzY29uZmlnLmdldF9weXRob25faW5jKCksCi0gICAgICAgICAgICAgJy1JJyArIHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPVRydWUpXQotICAgIGlmIG9wdCA9PSAnLS1jZmxhZ3MnOgotICAgICAgICBmbGFncy5leHRlbmQoZ2V0dmFyKCdDRkxBR1MnKS5zcGxpdCgpKQotICAgIHByaW50ICcgJy5qb2luKGZsYWdzKQorICAgIGVsaWYgb3B0ID09ICctLWV4ZWMtcHJlZml4JzoKKyAgICAgICAgcHJpbnQgc3lzY29uZmlnLkVYRUNfUFJFRklYCiAKLWVsaWYgb3B0IGluICgnLS1saWJzJywgJy0tbGRmbGFncycpOgotICAgIGxpYnMgPSBnZXR2YXIoJ0xJQlMnKS5zcGxpdCgpICsgZ2V0dmFyKCdTWVNMSUJTJykuc3BsaXQoKQotICAgIGxpYnMuYXBwZW5kKCctbHB5dGhvbicrcHl2ZXIpCi0gICAgIyBhZGQgdGhlIHByZWZpeC9saWIvcHl0aG9uWC5ZL2NvbmZpZyBkaXIsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG5vCi0gICAgIyBzaGFyZWQgbGlicmFyeSBpbiBwcmVmaXgvbGliLy4KLSAgICBpZiBvcHQgPT0gJy0tbGRmbGFncycgYW5kIG5vdCBnZXR2YXIoJ1B5X0VOQUJMRV9TSEFSRUQnKToKLSAgICAgICAgbGlicy5pbnNlcnQoMCwgJy1MJyArIGdldHZhcignTElCUEwnKSkKLSAgICBwcmludCAnICcuam9pbihsaWJzKQorICAgIGVsaWYgb3B0IGluICgnLS1pbmNsdWRlcycsICctLWNmbGFncycpOgorICAgICAgICBmbGFncyA9IFsnLUknICsgc3lzY29uZmlnLmdldF9weXRob25faW5jKCksCisgICAgICAgICAgICAgICAgICctSScgKyBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz1UcnVlKV0KKyAgICAgICAgaWYgb3B0ID09ICctLWNmbGFncyc6CisgICAgICAgICAgICBmbGFncy5leHRlbmQoZ2V0dmFyKCdDRkxBR1MnKS5zcGxpdCgpKQorICAgICAgICBwcmludCAnICcuam9pbihmbGFncykKKworICAgIGVsaWYgb3B0IGluICgnLS1saWJzJywgJy0tbGRmbGFncycpOgorICAgICAgICBsaWJzID0gZ2V0dmFyKCdMSUJTJykuc3BsaXQoKSArIGdldHZhcignU1lTTElCUycpLnNwbGl0KCkKKyAgICAgICAgbGlicy5hcHBlbmQoJy1scHl0aG9uJytweXZlcikKKyAgICAgICAgIyBhZGQgdGhlIHByZWZpeC9saWIvcHl0aG9uWC5ZL2NvbmZpZyBkaXIsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG5vCisgICAgICAgICMgc2hhcmVkIGxpYnJhcnkgaW4gcHJlZml4L2xpYi8uCisgICAgICAgIGlmIG9wdCA9PSAnLS1sZGZsYWdzJzoKKyAgICAgICAgICAgIGlmIG5vdCBnZXR2YXIoJ1B5X0VOQUJMRV9TSEFSRUQnKToKKyAgICAgICAgICAgICAgICBsaWJzLmluc2VydCgwLCAnLUwnICsgZ2V0dmFyKCdMSUJQTCcpKQorICAgICAgICAgICAgbGlicy5leHRlbmQoZ2V0dmFyKCdMSU5LRk9SU0hBUkVEJykuc3BsaXQoKSkKKyAgICAgICAgcHJpbnQgJyAnLmpvaW4obGlicykKIApkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24tbW9kZS5lbCBiL01pc2MvcHl0aG9uLW1vZGUuZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlOWJlNzQuLjAwMDAwMDAKLS0tIGEvTWlzYy9weXRob24tbW9kZS5lbAorKysgL2Rldi9udWxsCkBAIC0xLDM5MDYgKzAsMCBAQAotOzs7IHB5dGhvbi1tb2RlLmVsIC0tLSBNYWpvciBtb2RlIGZvciBlZGl0aW5nIFB5dGhvbiBwcm9ncmFtcwotCi07OyBDb3B5cmlnaHQgKEMpIDE5OTIsMTk5MywxOTk0ICBUaW0gUGV0ZXJzCi0KLTs7IEF1dGhvcjogMjAwMy0yMDA3IGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvcHl0aG9uLW1vZGUKLTs7ICAgICAgICAgMTk5NS0yMDAyIEJhcnJ5IEEuIFdhcnNhdwotOzsgICAgICAgICAxOTkyLTE5OTQgVGltIFBldGVycwotOzsgTWFpbnRhaW5lcjogcHl0aG9uLW1vZGVAcHl0aG9uLm9yZwotOzsgQ3JlYXRlZDogICAgRmViIDE5OTIKLTs7IEtleXdvcmRzOiAgIHB5dGhvbiBsYW5ndWFnZXMgb29wCi0KLShkZWZjb25zdCBweS12ZXJzaW9uICIkUmV2aXNpb24kIgotICAiYHB5dGhvbi1tb2RlJyB2ZXJzaW9uIG51bWJlci4iKQotCi07OyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLCB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAotOzsgd2FycmFudHkuICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIG9yIHNlbGwgdGhpcwotOzsgc29mdHdhcmUsIHdpdGhvdXQgZmVlLCBmb3IgYW55IHB1cnBvc2UgYW5kIGJ5IGFueSBpbmRpdmlkdWFsIG9yCi07OyBvcmdhbml6YXRpb24sIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKLTs7IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0KLTs7OyBDb21tZW50YXJ5OgotCi07OyBUaGlzIGlzIGEgbWFqb3IgbW9kZSBmb3IgZWRpdGluZyBQeXRob24gcHJvZ3JhbXMuICBJdCB3YXMgZGV2ZWxvcGVkIGJ5IFRpbQotOzsgUGV0ZXJzIGFmdGVyIGFuIG9yaWdpbmFsIGlkZWEgYnkgTWljaGFlbCBBLiBHdXJhdmFnZS4gIFRpbSBzdWJzZXF1ZW50bHkKLTs7IGxlZnQgdGhlIG5ldCBhbmQgaW4gMTk5NSwgQmFycnkgV2Fyc2F3IGluaGVyaXRlZCB0aGUgbW9kZS4gIFRpbSdzIG5vdyBiYWNrCi07OyBidXQgZGlzYXZvd3MgYWxsIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbW9kZS4gIEluIGZhY3QsIHdlIHN1c3BlY3QgaGUKLTs7IGRvZXNuJ3QgZXZlbiB1c2UgRW1hY3MgYW55IG1vcmUuICBJbiAyMDAzLCBweXRob24tbW9kZS5lbCB3YXMgbW92ZWQgdG8gaXRzCi07OyBvd24gU291cmNlRm9yZ2UgcHJvamVjdCBhcGFydCBmcm9tIHRoZSBQeXRob24gcHJvamVjdCwgYW5kIG5vdyBpcwotOzsgbWFpbnRhaW5lZCBieSB0aGUgdm9sdW50ZWVycyBhdCB0aGUgcHl0aG9uLW1vZGVAcHl0aG9uLm9yZyBtYWlsaW5nIGxpc3QuCi0KLTs7IHBkYnRyYWNrIHN1cHBvcnQgY29udHJpYnV0ZWQgYnkgS2VuIE1hbmhlaW1lciwgQXByaWwgMjAwMS4gIFNraXAgTW9udGFuYXJvCi07OyBoYXMgYWxzbyBjb250cmlidXRlZCBzaWduaWZpY2FudGx5IHRvIHB5dGhvbi1tb2RlJ3MgZGV2ZWxvcG1lbnQuCi0KLTs7IFBsZWFzZSB1c2UgdGhlIFNvdXJjZUZvcmdlIFB5dGhvbiBwcm9qZWN0IHRvIHN1Ym1pdCBidWdzIG9yCi07OyBwYXRjaGVzOgotOzsKLTs7ICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3B5dGhvbgotCi07OyBJTlNUQUxMQVRJT046Ci0KLTs7IFRvIGluc3RhbGwsIGp1c3QgZHJvcCB0aGlzIGZpbGUgaW50byBhIGRpcmVjdG9yeSBvbiB5b3VyIGxvYWQtcGF0aCBhbmQKLTs7IGJ5dGUtY29tcGlsZSBpdC4gIFRvIHNldCB1cCBFbWFjcyB0byBhdXRvbWF0aWNhbGx5IGVkaXQgZmlsZXMgZW5kaW5nIGluCi07OyAiLnB5IiB1c2luZyBweXRob24tbW9kZSBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIH4vLmVtYWNzIGZpbGUgKEdOVQotOzsgRW1hY3MpIG9yIH4vLnhlbWFjcy9pbml0LmVsIGZpbGUgKFhFbWFjcyk6Ci07OyAgICAoc2V0cSBhdXRvLW1vZGUtYWxpc3QgKGNvbnMgJygiXFwucHkkIiAuIHB5dGhvbi1tb2RlKSBhdXRvLW1vZGUtYWxpc3QpKQotOzsgICAgKHNldHEgaW50ZXJwcmV0ZXItbW9kZS1hbGlzdCAoY29ucyAnKCJweXRob24iIC4gcHl0aG9uLW1vZGUpCi07OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycHJldGVyLW1vZGUtYWxpc3QpKQotOzsgICAgKGF1dG9sb2FkICdweXRob24tbW9kZSAicHl0aG9uLW1vZGUiICJQeXRob24gZWRpdGluZyBtb2RlLiIgdCkKLTs7Ci07OyBJbiBYRW1hY3Mgc3ludGF4IGhpZ2hsaWdodGluZyBzaG91bGQgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5LiAgSW4gR05VCi07OyBFbWFjcyB5b3UgbWF5IGhhdmUgdG8gYWRkIHRoZXNlIGxpbmVzIHRvIHlvdXIgfi8uZW1hY3MgZmlsZToKLTs7ICAgIChnbG9iYWwtZm9udC1sb2NrLW1vZGUgdCkKLTs7ICAgIChzZXRxIGZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRpb24gdCkKLQotOzsgRk9SIE1PUkUgSU5GT1JNQVRJT046Ci0KLTs7IFRoZXJlIGlzIHNvbWUgaW5mb3JtYXRpb24gb24gcHl0aG9uLW1vZGUuZWwgYXQKLQotOzsgICAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9lbWFjcy9weXRob24tbW9kZS8KLTs7Ci07OyBJdCBkb2VzIGNvbnRhaW4gbGlua3MgdG8gb3RoZXIgcGFja2FnZXMgdGhhdCB5b3UgbWlnaHQgZmluZCB1c2VmdWwsCi07OyBzdWNoIGFzIHBkYiBpbnRlcmZhY2VzLCBPTy1Ccm93c2VyIGxpbmtzLCBldGMuCi0KLTs7IEJVRyBSRVBPUlRJTkc6Ci0KLTs7IEFzIG1lbnRpb25lZCBhYm92ZSwgcGxlYXNlIHVzZSB0aGUgU291cmNlRm9yZ2UgUHl0aG9uIHByb2plY3QgZm9yCi07OyBzdWJtaXR0aW5nIGJ1ZyByZXBvcnRzIG9yIHBhdGNoZXMuICBUaGUgb2xkIHJlY29tbWVuZGF0aW9uLCB0byB1c2UKLTs7IEMtYyBDLWIgd2lsbCBzdGlsbCB3b3JrLCBidXQgdGhvc2UgcmVwb3J0cyBoYXZlIGEgaGlnaGVyIGNoYW5jZSBvZgotOzsgZ2V0dGluZyBidXJpZWQgaW4gbXkgbWFpbGJveC4gIFBsZWFzZSBpbmNsdWRlIGEgY29tcGxldGUsIGJ1dAotOzsgY29uY2lzZSBjb2RlIHNhbXBsZSBhbmQgYSByZWNpcGUgZm9yIHJlcHJvZHVjaW5nIHRoZSBidWcuICBTZW5kCi07OyBzdWdnZXN0aW9ucyBhbmQgb3RoZXIgY29tbWVudHMgdG8gcHl0aG9uLW1vZGVAcHl0aG9uLm9yZy4KLQotOzsgV2hlbiBpbiBhIFB5dGhvbiBtb2RlIGJ1ZmZlciwgZG8gYSBDLWggbSBmb3IgbW9yZSBoZWxwLiAgSXQncwotOzsgZG91YnRmdWwgdGhhdCBhIHRleGluZm8gbWFudWFsIHdvdWxkIGJlIHZlcnkgdXNlZnVsLCBidXQgaWYgeW91Ci07OyB3YW50IHRvIGNvbnRyaWJ1dGUgb25lLCBJJ2xsIGNlcnRhaW5seSBhY2NlcHQgaXQhCi0KLTs7OyBDb2RlOgotCi0ocmVxdWlyZSAnY29taW50KQotKHJlcXVpcmUgJ2N1c3RvbSkKLShyZXF1aXJlICdjbCkKLShyZXF1aXJlICdjb21waWxlKQotKHJlcXVpcmUgJ2Fuc2ktY29sb3IpCi0KLQwKLTs7IHVzZXIgZGVmaW5hYmxlIHZhcmlhYmxlcwotOzsgdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ci0KLShkZWZncm91cCBweXRob24gbmlsCi0gICJTdXBwb3J0IGZvciB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlLCA8aHR0cDovL3d3dy5weXRob24ub3JnLz4iCi0gIDpncm91cCAnbGFuZ3VhZ2VzCi0gIDpwcmVmaXggInB5LSIpCi0KLShkZWZjdXN0b20gcHktdGFiLWFsd2F5cy1pbmRlbnQgdAotICAiKk5vbi1uaWwgbWVhbnMgVEFCIGluIFB5dGhvbiBtb2RlIHNob3VsZCBhbHdheXMgcmVpbmRlbnQgdGhlIGN1cnJlbnQgbGluZSwKLXJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gdGhlIGxpbmUgcG9pbnQgaXMgd2hlbiB0aGUgVEFCIGNvbW1hbmQgaXMgdXNlZC4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LXB5dGhvbi1jb21tYW5kICJweXRob24iCi0gICIqU2hlbGwgY29tbWFuZCB1c2VkIHRvIHN0YXJ0IFB5dGhvbiBpbnRlcnByZXRlci4iCi0gIDp0eXBlICdzdHJpbmcKLSAgOmdyb3VwICdweXRob24pCi0KLShtYWtlLW9ic29sZXRlLXZhcmlhYmxlICdweS1qcHl0aG9uLWNvbW1hbmQgJ3B5LWp5dGhvbi1jb21tYW5kKQotKGRlZmN1c3RvbSBweS1qeXRob24tY29tbWFuZCAianl0aG9uIgotICAiKlNoZWxsIGNvbW1hbmQgdXNlZCB0byBzdGFydCB0aGUgSnl0aG9uIGludGVycHJldGVyLiIKLSAgOnR5cGUgJ3N0cmluZwotICA6Z3JvdXAgJ3B5dGhvbgotICA6dGFnICJKeXRob24gQ29tbWFuZCIpCi0KLShkZWZjdXN0b20gcHktZGVmYXVsdC1pbnRlcnByZXRlciAnY3B5dGhvbgotICAiKldoaWNoIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c2VkIGJ5IGRlZmF1bHQuCi1UaGUgdmFsdWUgZm9yIHRoaXMgdmFyaWFibGUgY2FuIGJlIGVpdGhlciBgY3B5dGhvbicgb3IgYGp5dGhvbicuCi0KLVdoZW4gdGhlIHZhbHVlIGlzIGBjcHl0aG9uJywgdGhlIHZhcmlhYmxlcyBgcHktcHl0aG9uLWNvbW1hbmQnIGFuZAotYHB5LXB5dGhvbi1jb21tYW5kLWFyZ3MnIGFyZSBjb25zdWx0ZWQgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcnByZXRlcgotYW5kIGFyZ3VtZW50cyB0byB1c2UuCi0KLVdoZW4gdGhlIHZhbHVlIGlzIGBqeXRob24nLCB0aGUgdmFyaWFibGVzIGBweS1qeXRob24tY29tbWFuZCcgYW5kCi1gcHktanl0aG9uLWNvbW1hbmQtYXJncycgYXJlIGNvbnN1bHRlZCB0byBkZXRlcm1pbmUgdGhlIGludGVycHJldGVyCi1hbmQgYXJndW1lbnRzIHRvIHVzZS4KLQotTm90ZSB0aGF0IHRoaXMgdmFyaWFibGUgaXMgY29uc3VsdGVkIG9ubHkgdGhlIGZpcnN0IHRpbWUgdGhhdCBhIFB5dGhvbgotbW9kZSBidWZmZXIgaXMgdmlzaXRlZCBkdXJpbmcgYW4gRW1hY3Mgc2Vzc2lvbi4gIEFmdGVyIHRoYXQsIHVzZQotXFxbcHktdG9nZ2xlLXNoZWxsc10gdG8gY2hhbmdlIHRoZSBpbnRlcnByZXRlciBzaGVsbC4iCi0gIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJQeXRob24gKGEuay5hLiBDUHl0aG9uKSIgY3B5dGhvbikKLQkJIChjb25zdCA6dGFnICJKeXRob24iIGp5dGhvbikpCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LXB5dGhvbi1jb21tYW5kLWFyZ3MgJygiLWkiKQotICAiKkxpc3Qgb2Ygc3RyaW5nIGFyZ3VtZW50cyB0byBiZSB1c2VkIHdoZW4gc3RhcnRpbmcgYSBQeXRob24gc2hlbGwuIgotICA6dHlwZSAnKHJlcGVhdCBzdHJpbmcpCi0gIDpncm91cCAncHl0aG9uKQotCi0obWFrZS1vYnNvbGV0ZS12YXJpYWJsZSAncHktanB5dGhvbi1jb21tYW5kLWFyZ3MgJ3B5LWp5dGhvbi1jb21tYW5kLWFyZ3MpCi0oZGVmY3VzdG9tIHB5LWp5dGhvbi1jb21tYW5kLWFyZ3MgJygiLWkiKQotICAiKkxpc3Qgb2Ygc3RyaW5nIGFyZ3VtZW50cyB0byBiZSB1c2VkIHdoZW4gc3RhcnRpbmcgYSBKeXRob24gc2hlbGwuIgotICA6dHlwZSAnKHJlcGVhdCBzdHJpbmcpCi0gIDpncm91cCAncHl0aG9uCi0gIDp0YWcgIkp5dGhvbiBDb21tYW5kIEFyZ3MiKQotCi0oZGVmY3VzdG9tIHB5LWluZGVudC1vZmZzZXQgNAotICAiKkFtb3VudCBvZiBvZmZzZXQgcGVyIGxldmVsIG9mIGluZGVudGF0aW9uLgotYFxcW3B5LWd1ZXNzLWluZGVudC1vZmZzZXRdJyBjYW4gdXN1YWxseSBndWVzcyBhIGdvb2QgdmFsdWUgd2hlbgoteW91J3JlIGVkaXRpbmcgc29tZW9uZSBlbHNlJ3MgUHl0aG9uIGNvZGUuIgotICA6dHlwZSAnaW50ZWdlcgotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1jb250aW51YXRpb24tb2Zmc2V0IDQKLSAgIipBZGRpdGlvbmFsIGFtb3VudCBvZiBvZmZzZXQgdG8gZ2l2ZSBmb3Igc29tZSBjb250aW51YXRpb24gbGluZXMuCi1Db250aW51YXRpb24gbGluZXMgYXJlIHRob3NlIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93IGEgYmFja3NsYXNoCi10ZXJtaW5hdGVkIGxpbmUuICBPbmx5IHRob3NlIGNvbnRpbnVhdGlvbiBsaW5lcyBmb3IgYSBibG9jayBvcGVuaW5nCi1zdGF0ZW1lbnQgYXJlIGdpdmVuIHRoaXMgZXh0cmEgb2Zmc2V0LiIKLSAgOnR5cGUgJ2ludGVnZXIKLSAgOmdyb3VwICdweXRob24pCi0KLShkZWZjdXN0b20gcHktc21hcnQtaW5kZW50YXRpb24gdAotICAiKlNob3VsZCBgcHl0aG9uLW1vZGUnIHRyeSB0byBhdXRvbWFnaWNhbGx5IHNldCBzb21lIGluZGVudGF0aW9uIHZhcmlhYmxlcz8KLVdoZW4gdGhpcyB2YXJpYWJsZSBpcyBub24tbmlsLCB0d28gdGhpbmdzIGhhcHBlbiB3aGVuIGEgYnVmZmVyIGlzIHNldAotdG8gYHB5dGhvbi1tb2RlJzoKLQotICAgIDEuIGBweS1pbmRlbnQtb2Zmc2V0JyBpcyBndWVzc2VkIGZyb20gZXhpc3RpbmcgY29kZSBpbiB0aGUgYnVmZmVyLgotICAgICAgIE9ubHkgZ3Vlc3NlZCB2YWx1ZXMgYmV0d2VlbiAyIGFuZCA4IGFyZSBjb25zaWRlcmVkLiAgSWYgYSB2YWxpZAotICAgICAgIGd1ZXNzIGNhbid0IGJlIG1hZGUgKHBlcmhhcHMgYmVjYXVzZSB5b3UgYXJlIHZpc2l0aW5nIGEgbmV3Ci0gICAgICAgZmlsZSksIHRoZW4gdGhlIHZhbHVlIGluIGBweS1pbmRlbnQtb2Zmc2V0JyBpcyB1c2VkLgotCi0gICAgMi4gYGluZGVudC10YWJzLW1vZGUnIGlzIHR1cm5lZCBvZmYgaWYgYHB5LWluZGVudC1vZmZzZXQnIGRvZXMgbm90Ci0gICAgICAgZXF1YWwgYHRhYi13aWR0aCcgKGBpbmRlbnQtdGFicy1tb2RlJyBpcyBuZXZlciB0dXJuZWQgb24gYnkKLSAgICAgICBQeXRob24gbW9kZSkuICBUaGlzIG1lYW5zIHRoYXQgZm9yIG5ld2x5IHdyaXR0ZW4gY29kZSwgdGFicyBhcmUKLSAgICAgICBvbmx5IGluc2VydGVkIGluIGluZGVudGF0aW9uIGlmIG9uZSB0YWIgaXMgb25lIGluZGVudGF0aW9uCi0gICAgICAgbGV2ZWwsIG90aGVyd2lzZSBvbmx5IHNwYWNlcyBhcmUgdXNlZC4KLQotTm90ZSB0aGF0IGJvdGggdGhlc2Ugc2V0dGluZ3Mgb2NjdXIgKmFmdGVyKiBgcHl0aG9uLW1vZGUtaG9vaycgaXMgcnVuLAotc28gaWYgeW91IHdhbnQgdG8gZGVmZWF0IHRoZSBhdXRvbWFnaWMgY29uZmlndXJhdGlvbiwgeW91IG11c3QgYWxzbwotc2V0IGBweS1zbWFydC1pbmRlbnRhdGlvbicgdG8gbmlsIGluIHlvdXIgYHB5dGhvbi1tb2RlLWhvb2snLiIKLSAgOnR5cGUgJ2Jvb2xlYW4KLSAgOmdyb3VwICdweXRob24pCi0KLShkZWZjdXN0b20gcHktYWxpZ24tbXVsdGlsaW5lLXN0cmluZ3MtcCB0Ci0gICIqRmxhZyBkZXNjcmliaW5nIGhvdyBtdWx0aS1saW5lIHRyaXBsZSBxdW90ZWQgc3RyaW5ncyBhcmUgYWxpZ25lZC4KLVdoZW4gdGhpcyBmbGFnIGlzIG5vbi1uaWwsIGNvbnRpbnVhdGlvbiBsaW5lcyBhcmUgbGluZWQgdXAgdW5kZXIgdGhlCi1wcmVjZWRpbmcgbGluZSdzIGluZGVudGF0aW9uLiAgV2hlbiB0aGlzIGZsYWcgaXMgbmlsLCBjb250aW51YXRpb24KLWxpbmVzIGFyZSBhbGlnbmVkIHRvIGNvbHVtbiB6ZXJvLiIKLSAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIkFsaWduIHVuZGVyIHByZWNlZGluZyBsaW5lIiB0KQotCQkgKGNvbnN0IDp0YWcgIkFsaWduIHRvIGNvbHVtbiB6ZXJvIiBuaWwpKQotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1ibG9jay1jb21tZW50LXByZWZpeCAiIyMiCi0gICIqU3RyaW5nIHVzZWQgYnkgXFxbY29tbWVudC1yZWdpb25dIHRvIGNvbW1lbnQgb3V0IGEgYmxvY2sgb2YgY29kZS4KLVRoaXMgc2hvdWxkIGZvbGxvdyB0aGUgY29udmVudGlvbiBmb3Igbm9uLWluZGVudGluZyBjb21tZW50IGxpbmVzIHNvCi10aGF0IHRoZSBpbmRlbnRhdGlvbiBjb21tYW5kcyB3b24ndCBnZXQgY29uZnVzZWQgKGkuZS4sIHRoZSBzdHJpbmcKLXNob3VsZCBiZSBvZiB0aGUgZm9ybSBgI3guLi4nIHdoZXJlIGB4JyBpcyBub3QgYSBibGFuayBvciBhIHRhYiwgYW5kCi1gLi4uJyBpcyBhcmJpdHJhcnkpLiAgSG93ZXZlciwgdGhpcyBzdHJpbmcgc2hvdWxkIG5vdCBlbmQgaW4gd2hpdGVzcGFjZS4iCi0gIDp0eXBlICdzdHJpbmcKLSAgOmdyb3VwICdweXRob24pCi0KLShkZWZjdXN0b20gcHktaG9ub3ItY29tbWVudC1pbmRlbnRhdGlvbiB0Ci0gICIqQ29udHJvbHMgaG93IGNvbW1lbnQgbGluZXMgaW5mbHVlbmNlIHN1YnNlcXVlbnQgaW5kZW50YXRpb24uCi0KLVdoZW4gbmlsLCBhbGwgY29tbWVudCBsaW5lcyBhcmUgc2tpcHBlZCBmb3IgaW5kZW50YXRpb24gcHVycG9zZXMsIGFuZAotaWYgcG9zc2libGUsIGEgZmFzdGVyIGFsZ29yaXRobSBpcyB1c2VkIChpLmUuIFgvRW1hY3MgMTkgYW5kIGJleW9uZCkuCi0KLVdoZW4gdCwgbGluZXMgdGhhdCBiZWdpbiB3aXRoIGEgc2luZ2xlIGAjJyBhcmUgYSBoaW50IHRvIHN1YnNlcXVlbnQKLWxpbmUgaW5kZW50YXRpb24uICBJZiB0aGUgcHJldmlvdXMgbGluZSBpcyBzdWNoIGEgY29tbWVudCBsaW5lIChhcwotb3Bwb3NlZCB0byBvbmUgdGhhdCBzdGFydHMgd2l0aCBgcHktYmxvY2stY29tbWVudC1wcmVmaXgnKSwgdGhlbiBpdHMKLWluZGVudGF0aW9uIGlzIHVzZWQgYXMgYSBoaW50IGZvciB0aGlzIGxpbmUncyBpbmRlbnRhdGlvbi4gIExpbmVzIHRoYXQKLWJlZ2luIHdpdGggYHB5LWJsb2NrLWNvbW1lbnQtcHJlZml4JyBhcmUgaWdub3JlZCBmb3IgaW5kZW50YXRpb24KLXB1cnBvc2VzLgotCi1XaGVuIG5vdCBuaWwgb3IgdCwgY29tbWVudCBsaW5lcyB0aGF0IGJlZ2luIHdpdGggYSBzaW5nbGUgYCMnIGFyZSB1c2VkCi1hcyBpbmRlbnRhdGlvbiBoaW50cywgdW5sZXNzIHRoZSBjb21tZW50IGNoYXJhY3RlciBpcyBpbiBjb2x1bW4gemVyby4iCi0gIDp0eXBlICcoY2hvaWNlCi0JICAoY29uc3QgOnRhZyAiU2tpcCBhbGwgY29tbWVudCBsaW5lcyAoZmFzdCkiIG5pbCkKLQkgIChjb25zdCA6dGFnICJTaW5nbGUgIyBgc2V0cycgaW5kZW50YXRpb24gZm9yIG5leHQgbGluZSIgdCkKLQkgIChjb25zdCA6dGFnICJTaW5nbGUgIyBgc2V0cycgaW5kZW50YXRpb24gZXhjZXB0IGF0IGNvbHVtbiB6ZXJvIgotCQkgb3RoZXIpCi0JICApCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LXRlbXAtZGlyZWN0b3J5Ci0gIChsZXQgKChvayAnKGxhbWJkYSAoeCkKLQkgICAgICAgKGFuZCB4Ci0JCSAgICAoc2V0cSB4IChleHBhbmQtZmlsZS1uYW1lIHgpKSA7IGFsd2F5cyB0cnVlCi0JCSAgICAoZmlsZS1kaXJlY3RvcnktcCB4KQotCQkgICAgKGZpbGUtd3JpdGFibGUtcCB4KQotCQkgICAgeCkpKSkKLSAgICAob3IgKGZ1bmNhbGwgb2sgKGdldGVudiAiVE1QRElSIikpCi0JKGZ1bmNhbGwgb2sgIi91c3IvdG1wIikKLQkoZnVuY2FsbCBvayAiL3RtcCIpCi0JKGZ1bmNhbGwgb2sgIi92YXIvdG1wIikKLQkoZnVuY2FsbCBvayAgIi4iKQotCShlcnJvcgotCSAiQ291bGRuJ3QgZmluZCBhIHVzYWJsZSB0ZW1wIGRpcmVjdG9yeSAtLSBzZXQgYHB5LXRlbXAtZGlyZWN0b3J5JyIpKSkKLSAgIipEaXJlY3RvcnkgdXNlZCBmb3IgdGVtcG9yYXJ5IGZpbGVzIGNyZWF0ZWQgYnkgYSAqUHl0aG9uKiBwcm9jZXNzLgotQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGRpcmVjdG9yeSBmcm9tIHRoaXMgbGlzdCB0aGF0IGV4aXN0cyBhbmQgdGhhdCB5b3UKLWNhbiB3cml0ZSBpbnRvOiB0aGUgdmFsdWUgKGlmIGFueSkgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRNUERJUiwKLS91c3IvdG1wLCAvdG1wLCAvdmFyL3RtcCwgb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiIKLSAgOnR5cGUgJ3N0cmluZwotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1iZWVwLWlmLXRhYi1jaGFuZ2UgdAotICAiKlJpbmcgdGhlIGJlbGwgaWYgYHRhYi13aWR0aCcgaXMgY2hhbmdlZC4KLUlmIGEgY29tbWVudCBvZiB0aGUgZm9ybQotCi0gIFx0IyB2aTpzZXQgdGFic2l6ZT08bnVtYmVyPjoKLQotaXMgZm91bmQgYmVmb3JlIHRoZSBmaXJzdCBjb2RlIGxpbmUgd2hlbiB0aGUgZmlsZSBpcyBlbnRlcmVkLCBhbmQgdGhlCi1jdXJyZW50IHZhbHVlIG9mICh0aGUgZ2VuZXJhbCBFbWFjcyB2YXJpYWJsZSkgYHRhYi13aWR0aCcgZG9lcyBub3QKLWVxdWFsIDxudW1iZXI+LCBgdGFiLXdpZHRoJyBpcyBzZXQgdG8gPG51bWJlcj4sIGEgbWVzc2FnZSBzYXlpbmcgc28gaXMKLWRpc3BsYXllZCBpbiB0aGUgZWNobyBhcmVhLCBhbmQgaWYgYHB5LWJlZXAtaWYtdGFiLWNoYW5nZScgaXMgbm9uLW5pbAotdGhlIEVtYWNzIGJlbGwgaXMgYWxzbyBydW5nIGFzIGEgd2FybmluZy4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LWp1bXAtb24tZXhjZXB0aW9uIHQKLSAgIipKdW1wIHRvIGlubmVybW9zdCBleGNlcHRpb24gZnJhbWUgaW4gKlB5dGhvbiBPdXRwdXQqIGJ1ZmZlci4KLVdoZW4gdGhpcyB2YXJpYWJsZSBpcyBub24tbmlsIGFuZCBhbiBleGNlcHRpb24gb2NjdXJzIHdoZW4gcnVubmluZwotUHl0aG9uIGNvZGUgc3luY2hyb25vdXNseSBpbiBhIHN1YnByb2Nlc3MsIGp1bXAgaW1tZWRpYXRlbHkgdG8gdGhlCi1zb3VyY2UgY29kZSBvZiB0aGUgaW5uZXJtb3N0IHRyYWNlYmFjayBmcmFtZS4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LWFzay1hYm91dC1zYXZlIHQKLSAgIklmIG5vdCBuaWwsIGFzayBhYm91dCB3aGljaCBidWZmZXJzIHRvIHNhdmUgYmVmb3JlIGV4ZWN1dGluZyBzb21lIGNvZGUuCi1PdGhlcndpc2UsIGFsbCBtb2RpZmllZCBidWZmZXJzIGFyZSBzYXZlZCB3aXRob3V0IGFza2luZy4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LWJhY2tzcGFjZS1mdW5jdGlvbiAnYmFja3dhcmQtZGVsZXRlLWNoYXItdW50YWJpZnkKLSAgIipGdW5jdGlvbiBjYWxsZWQgYnkgYHB5LWVsZWN0cmljLWJhY2tzcGFjZScgd2hlbiBkZWxldGluZyBiYWNrd2FyZHMuIgotICA6dHlwZSAnZnVuY3Rpb24KLSAgOmdyb3VwICdweXRob24pCi0KLShkZWZjdXN0b20gcHktZGVsZXRlLWZ1bmN0aW9uICdkZWxldGUtY2hhcgotICAiKkZ1bmN0aW9uIGNhbGxlZCBieSBgcHktZWxlY3RyaWMtZGVsZXRlJyB3aGVuIGRlbGV0aW5nIGZvcndhcmRzLiIKLSAgOnR5cGUgJ2Z1bmN0aW9uCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LWltZW51LXNob3ctbWV0aG9kLWFyZ3MtcCBuaWwKLSAgIipDb250cm9scyBlY2hvaW5nIG9mIGFyZ3VtZW50cyBvZiBmdW5jdGlvbnMgJiBtZXRob2RzIGluIHRoZSBJbWVudSBidWZmZXIuCi1XaGVuIG5vbi1uaWwsIGFyZ3VtZW50cyBhcmUgcHJpbnRlZC4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpncm91cCAncHl0aG9uKQotKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdweS1pbmRlbnQtb2Zmc2V0KQotCi0oZGVmY3VzdG9tIHB5LXBkYnRyYWNrLWRvLXRyYWNraW5nLXAgdAotICAiKkNvbnRyb2xzIHdoZXRoZXIgdGhlIHBkYnRyYWNrIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBub3QuCi1XaGVuIG5vbi1uaWwsIHBkYnRyYWNrIGlzIGVuYWJsZWQgaW4gYWxsIGNvbWludC1iYXNlZCBidWZmZXJzLAotZS5nLiBzaGVsbCBidWZmZXJzIGFuZCB0aGUgKlB5dGhvbiogYnVmZmVyLiAgV2hlbiB1c2luZyBwZGIgdG8gZGVidWcgYQotUHl0aG9uIHByb2dyYW0sIHBkYnRyYWNrIG5vdGljZXMgdGhlIHBkYiBwcm9tcHQgYW5kIGRpc3BsYXlzIHRoZQotc291cmNlIGZpbGUgYW5kIGxpbmUgdGhhdCB0aGUgcHJvZ3JhbSBpcyBzdG9wcGVkIGF0LCBtdWNoIHRoZSBzYW1lIHdheQotYXMgZ3VkLW1vZGUgZG9lcyBmb3IgZGVidWdnaW5nIEMgcHJvZ3JhbXMgd2l0aCBnZGIuIgotICA6dHlwZSAnYm9vbGVhbgotICA6Z3JvdXAgJ3B5dGhvbikKLShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAncHktcGRidHJhY2stZG8tdHJhY2tpbmctcCkKLQotKGRlZmN1c3RvbSBweS1wZGJ0cmFjay1taW5vci1tb2RlLXN0cmluZyAiIFBEQiIKLSAgIipTdHJpbmcgdG8gdXNlIGluIHRoZSBtaW5vciBtb2RlIGxpc3Qgd2hlbiBwZGJ0cmFjayBpcyBlbmFibGVkLiIKLSAgOnR5cGUgJ3N0cmluZwotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1pbXBvcnQtY2hlY2stcG9pbnQtbWF4Ci0gIDIwMDAwCi0gICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHNlYXJjaCBmb3IgYSBKYXZhLWlzaCBpbXBvcnQgc3RhdGVtZW50LgotV2hlbiBgcHl0aG9uLW1vZGUnIHRyaWVzIHRvIGNhbGN1bGF0ZSB0aGUgc2hlbGwgdG8gdXNlIChlaXRoZXIgYQotQ1B5dGhvbiBvciBhIEp5dGhvbiBzaGVsbCksIGl0IGxvb2tzIGF0IHRoZSBzby1jYWxsZWQgYHNoZWJhbmcnIGxpbmUKLS0tIGkuZS4gIyEgbGluZS4gIElmIHRoYXQncyBub3QgYXZhaWxhYmxlLCBpdCBsb29rcyBhdCBzb21lIG9mIHRoZQotZmlsZSBoZWFkaW5nIGltcG9ydHMgdG8gc2VlIGlmIHRoZXkgbG9vayBKYXZhLWxpa2UuIgotICA6dHlwZSAnaW50ZWdlcgotICA6Z3JvdXAgJ3B5dGhvbgotICApCi0KLShtYWtlLW9ic29sZXRlLXZhcmlhYmxlICdweS1qcHl0aG9uLXBhY2thZ2VzICdweS1qeXRob24tcGFja2FnZXMpCi0oZGVmY3VzdG9tIHB5LWp5dGhvbi1wYWNrYWdlcwotICAnKCJqYXZhIiAiamF2YXgiICJvcmciICJjb20iKQotICAiSW1wb3J0ZWQgcGFja2FnZXMgdGhhdCBpbXBseSBganl0aG9uLW1vZGUnLiIKLSAgOnR5cGUgJyhyZXBlYXQgc3RyaW5nKQotICA6Z3JvdXAgJ3B5dGhvbikKLQotOzsgTm90IGN1c3RvbWl6YWJsZQotKGRlZnZhciBweS1tYXN0ZXItZmlsZSBuaWwKLSAgIklmIG5vbi1uaWwsIGV4ZWN1dGUgdGhlIG5hbWVkIGZpbGUgaW5zdGVhZCBvZiB0aGUgYnVmZmVyJ3MgZmlsZS4KLVRoZSBpbnRlbnQgaXMgdG8gYWxsb3cgeW91IHRvIHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBmaWxlJ3MgbG9jYWwKLXZhcmlhYmxlIHNlY3Rpb24sIGUuZy46Ci0KLSAgICAjIExvY2FsIFZhcmlhYmxlczoKLSAgICAjIHB5LW1hc3Rlci1maWxlOiBcIm1hc3Rlci5weVwiCi0gICAgIyBFbmQ6Ci0KLXNvIHRoYXQgdHlwaW5nIFxcW3B5LWV4ZWN1dGUtYnVmZmVyXSBpbiB0aGF0IGJ1ZmZlciBleGVjdXRlcyB0aGUgbmFtZWQKLW1hc3RlciBmaWxlIGluc3RlYWQgb2YgdGhlIGJ1ZmZlcidzIGZpbGUuICBJZiB0aGUgZmlsZSBuYW1lIGhhcyBhCi1yZWxhdGl2ZSBwYXRoLCB0aGUgdmFsdWUgb2YgdmFyaWFibGUgYGRlZmF1bHQtZGlyZWN0b3J5JyBmb3IgdGhlCi1idWZmZXIgaXMgcHJlcGVuZGVkIHRvIGNvbWUgdXAgd2l0aCBhIGZpbGUgbmFtZS4iKQotKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdweS1tYXN0ZXItZmlsZSkKLQotKGRlZmN1c3RvbSBweS1weWNoZWNrZXItY29tbWFuZCAicHljaGVja2VyIgotICAiKlNoZWxsIGNvbW1hbmQgdXNlZCB0byBydW4gUHljaGVja2VyLiIKLSAgOnR5cGUgJ3N0cmluZwotICA6Z3JvdXAgJ3B5dGhvbgotICA6dGFnICJQeWNoZWNrZXIgQ29tbWFuZCIpCi0KLShkZWZjdXN0b20gcHktcHljaGVja2VyLWNvbW1hbmQtYXJncyAnKCItLXN0ZGxpYiIpCi0gICIqTGlzdCBvZiBzdHJpbmcgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBweWNoZWNrZXIuIgotICA6dHlwZSAnKHJlcGVhdCBzdHJpbmcpCi0gIDpncm91cCAncHl0aG9uCi0gIDp0YWcgIlB5Y2hlY2tlciBDb21tYW5kIEFyZ3MiKQotCi0oZGVmdmFyIHB5LXNoZWxsLWFsaXN0Ci0gICcoKCJqeXRob24iIC4gJ2p5dGhvbikKLSAgICAoInB5dGhvbiIgLiAnY3B5dGhvbikpCi0gICIqQWxpc3Qgb2YgaW50ZXJwcmV0ZXJzIGFuZCBweXRob24gc2hlbGxzLiBVc2VkIGJ5IGBweS1jaG9vc2Utc2hlbGwnCi10byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHB5dGhvbiBpbnRlcnByZXRlciBtb2RlIGZvciBhIGZpbGUuIikKLQotKGRlZmN1c3RvbSBweS1zaGVsbC1pbnB1dC1wcm9tcHQtMS1yZWdleHAgIl4+Pj4gIgotICAiKkEgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBpbnB1dCBwcm9tcHQgb2YgdGhlIHNoZWxsLiIKLSAgOnR5cGUgJ3N0cmluZwotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1zaGVsbC1pbnB1dC1wcm9tcHQtMi1yZWdleHAgIl5bLl1bLl1bLl0gIgotICAiKkEgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBpbnB1dCBwcm9tcHQgb2YgdGhlIHNoZWxsIGFmdGVyIHRoZQotICBmaXJzdCBsaW5lIG9mIGlucHV0LiIKLSAgOnR5cGUgJ3N0cmluZwotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1zaGVsbC1zd2l0Y2gtYnVmZmVycy1vbi1leGVjdXRlIHQKLSAgIipDb250cm9scyBzd2l0Y2hpbmcgdG8gdGhlIFB5dGhvbiBidWZmZXIgd2hlcmUgY29tbWFuZHMgYXJlCi0gIGV4ZWN1dGVkLiAgV2hlbiBub24tbmlsIHRoZSBidWZmZXIgc3dpdGNoZXMgdG8gdGhlIFB5dGhvbiBidWZmZXIsIGlmCi0gIG5vdCBubyBzd2l0Y2hpbmcgb2NjdXJzLiIKLSAgOnR5cGUgJ2Jvb2xlYW4KLSAgOmdyb3VwICdweXRob24pCi0KLQwKLTs7IF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgotOzsgTk8gVVNFUiBERUZJTkFCTEUgVkFSSUFCTEVTIEJFWU9ORCBUSElTIFBPSU5UCi0KLShkZWZ2YXIgcHktbGluZS1udW1iZXItb2Zmc2V0IDAKLSAgIldoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBhcyBhIHJlc3VsdCBvZiBweS1leGVjdXRlLXJlZ2lvbiwgYQotc3Vic2VxdWVudCBweS11cC1leGNlcHRpb24gbmVlZHMgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSByZWdpb24KLXN0YXJ0ZWQsIGluIG9yZGVyIHRvIGp1bXAgdG8gdGhlIGNvcnJlY3QgZmlsZSBsaW5lLiAgVGhpcyB2YXJpYWJsZSBpcwotc2V0IGluIHB5LWV4ZWN1dGUtcmVnaW9uIGFuZCB1c2VkIGluIHB5LWp1bXAtdG8tZXhjZXB0aW9uLiIpCi0KLShkZWZjb25zdCBweS1lbWFjcy1mZWF0dXJlcwotICAobGV0IChmZWF0dXJlcykKLSAgIGZlYXR1cmVzKQotICAiQSBsaXN0IG9mIGZlYXR1cmVzIGV4dGFudCBpbiB0aGUgRW1hY3MgeW91IGFyZSB1c2luZy4KLVRoZXJlIGFyZSBtYW55IGZsYXZvcnMgb2YgRW1hY3Mgb3V0IHRoZXJlLCB3aXRoIGRpZmZlcmVudCBsZXZlbHMgb2YKLXN1cHBvcnQgZm9yIGZlYXR1cmVzIG5lZWRlZCBieSBgcHl0aG9uLW1vZGUnLiIpCi0KLTs7IEZhY2UgZm9yIE5vbmUsIFRydWUsIEZhbHNlLCBzZWxmLCBhbmQgRWxsaXBzaXMKLShkZWZ2YXIgcHktcHNldWRvLWtleXdvcmQtZmFjZSAncHktcHNldWRvLWtleXdvcmQtZmFjZQotICAiRmFjZSBmb3IgcHNldWRvIGtleXdvcmRzIGluIFB5dGhvbiBtb2RlLCBsaWtlIHNlbGYsIFRydWUsIEZhbHNlLCBFbGxpcHNpcy4iKQotKG1ha2UtZmFjZSAncHktcHNldWRvLWtleXdvcmQtZmFjZSkKLQotOzsgUEVQIDMxOCBkZWNvcmF0b3JzCi0oZGVmdmFyIHB5LWRlY29yYXRvcnMtZmFjZSAncHktZGVjb3JhdG9ycy1mYWNlCi0gICJGYWNlIG1ldGhvZCBkZWNvcmF0b3JzLiIpCi0obWFrZS1mYWNlICdweS1kZWNvcmF0b3JzLWZhY2UpCi0KLTs7IEZhY2UgZm9yIGJ1aWx0aW5zCi0oZGVmdmFyIHB5LWJ1aWx0aW5zLWZhY2UgJ3B5LWJ1aWx0aW5zLWZhY2UKLSAgIkZhY2UgZm9yIGJ1aWx0aW5zIGxpa2UgVHlwZUVycm9yLCBvYmplY3QsIG9wZW4sIGFuZCBleGVjLiIpCi0obWFrZS1mYWNlICdweS1idWlsdGlucy1mYWNlKQotCi07OyBYWFgsIFRPRE8sIGFuZCBGSVhNRSBjb21tZW50cyBhbmQgc3VjaAotKGRlZnZhciBweS1YWFgtdGFnLWZhY2UgJ3B5LVhYWC10YWctZmFjZQotICAiRmFjZSBmb3IgWFhYLCBUT0RPLCBhbmQgRklYTUUgdGFncyIpCi0obWFrZS1mYWNlICdweS1YWFgtdGFnLWZhY2UpCi0KLShkZWZ1biBweS1mb250LWxvY2stbW9kZS1ob29rICgpCi0gIChvciAoZmFjZS1kaWZmZXJzLWZyb20tZGVmYXVsdC1wICdweS1wc2V1ZG8ta2V5d29yZC1mYWNlKQotICAgICAgKGNvcHktZmFjZSAnZm9udC1sb2NrLWtleXdvcmQtZmFjZSAncHktcHNldWRvLWtleXdvcmQtZmFjZSkpCi0gIChvciAoZmFjZS1kaWZmZXJzLWZyb20tZGVmYXVsdC1wICdweS1idWlsdGlucy1mYWNlKQotICAgICAgKGNvcHktZmFjZSAnZm9udC1sb2NrLWtleXdvcmQtZmFjZSAncHktYnVpbHRpbnMtZmFjZSkpCi0gIChvciAoZmFjZS1kaWZmZXJzLWZyb20tZGVmYXVsdC1wICdweS1kZWNvcmF0b3JzLWZhY2UpCi0gICAgICAoY29weS1mYWNlICdweS1wc2V1ZG8ta2V5d29yZC1mYWNlICdweS1kZWNvcmF0b3JzLWZhY2UpKQotICAob3IgKGZhY2UtZGlmZmVycy1mcm9tLWRlZmF1bHQtcCAncHktWFhYLXRhZy1mYWNlKQotICAgICAgKGNvcHktZmFjZSAnZm9udC1sb2NrLWNvbW1lbnQtZmFjZSAncHktWFhYLXRhZy1mYWNlKSkKLSAgKQotKGFkZC1ob29rICdmb250LWxvY2stbW9kZS1ob29rICdweS1mb250LWxvY2stbW9kZS1ob29rKQotCi0oZGVmdmFyIHB5dGhvbi1mb250LWxvY2sta2V5d29yZHMKLSAgKGxldCAoKGt3MSAobWFwY29uY2F0ICdpZGVudGl0eQotCQkJJygiYW5kIiAgICAgICJhc3NlcnQiICAgImJyZWFrIiAgICJjbGFzcyIKLQkJCSAgImNvbnRpbnVlIiAiZGVmIiAgICAgICJkZWwiICAgICAiZWxpZiIKLQkJCSAgImVsc2UiICAgICAiZXhjZXB0IiAgICJleGVjIiAgICAiZm9yIgotCQkJICAiZnJvbSIgICAgICJnbG9iYWwiICAgImlmIiAgICAgICJpbXBvcnQiCi0JCQkgICJpbiIgICAgICAgImlzIiAgICAgICAibGFtYmRhIiAgIm5vdCIKLQkJCSAgIm9yIiAgICAgICAicGFzcyIgICAgICJwcmludCIgICAicmFpc2UiCi0JCQkgICJyZXR1cm4iICAgIndoaWxlIiAgICAid2l0aCIgICAgInlpZWxkIgotCQkJICApCi0JCQkiXFx8IikpCi0JKGt3MiAobWFwY29uY2F0ICdpZGVudGl0eQotCQkJJygiZWxzZToiICJleGNlcHQ6IiAiZmluYWxseToiICJ0cnk6IikKLQkJCSJcXHwiKSkKLQkoa3czIChtYXBjb25jYXQgJ2lkZW50aXR5Ci0JCQk7OyBEb24ndCBpbmNsdWRlIFRydWUsIEZhbHNlLCBOb25lLCBvcgotCQkJOzsgRWxsaXBzaXMgaW4gdGhpcyBsaXN0LCBzaW5jZSB0aGV5IGFyZQotCQkJOzsgYWxyZWFkeSBkZWZpbmVkIGFzIHBzZXVkbyBrZXl3b3Jkcy4KLQkJCScoIl9fZGVidWdfXyIKLQkJCSAgIl9faW1wb3J0X18iICJfX25hbWVfXyIgImFicyIgImFwcGx5IiAiYmFzZXN0cmluZyIKLQkJCSAgImJvb2wiICJidWZmZXIiICJjYWxsYWJsZSIgImNociIgImNsYXNzbWV0aG9kIgotCQkJICAiY21wIiAiY29lcmNlIiAiY29tcGlsZSIgImNvbXBsZXgiICJjb3B5cmlnaHQiCi0JCQkgICJkZWxhdHRyIiAiZGljdCIgImRpciIgImRpdm1vZCIKLQkJCSAgImVudW1lcmF0ZSIgImV2YWwiICJleGVjZmlsZSIgImV4aXQiICJmaWxlIgotCQkJICAiZmlsdGVyIiAiZmxvYXQiICJnZXRhdHRyIiAiZ2xvYmFscyIgImhhc2F0dHIiCi0JCQkgICJoYXNoIiAiaGV4IiAiaWQiICJpbnB1dCIgImludCIgImludGVybiIKLQkJCSAgImlzaW5zdGFuY2UiICJpc3N1YmNsYXNzIiAiaXRlciIgImxlbiIgImxpY2Vuc2UiCi0JCQkgICJsaXN0IiAibG9jYWxzIiAibG9uZyIgIm1hcCIgIm1heCIgIm1pbiIgIm9iamVjdCIKLQkJCSAgIm9jdCIgIm9wZW4iICJvcmQiICJwb3ciICJwcm9wZXJ0eSIgInJhbmdlIgotCQkJICAicmF3X2lucHV0IiAicmVkdWNlIiAicmVsb2FkIiAicmVwciIgInJvdW5kIgotCQkJICAic2V0YXR0ciIgInNsaWNlIiAic3RhdGljbWV0aG9kIiAic3RyIiAic3VtIgotCQkJICAic3VwZXIiICJ0dXBsZSIgInR5cGUiICJ1bmljaHIiICJ1bmljb2RlIiAidmFycyIKLQkJCSAgInhyYW5nZSIgInppcCIpCi0JCQkiXFx8IikpCi0JKGt3NCAobWFwY29uY2F0ICdpZGVudGl0eQotCQkJOzsgRXhjZXB0aW9ucyBhbmQgd2FybmluZ3MKLQkJCScoIkFyaXRobWV0aWNFcnJvciIgIkFzc2VydGlvbkVycm9yIgotCQkJICAiQXR0cmlidXRlRXJyb3IiICJEZXByZWNhdGlvbldhcm5pbmciICJFT0ZFcnJvciIKLQkJCSAgIkVudmlyb25tZW50RXJyb3IiICJFeGNlcHRpb24iCi0JCQkgICJGbG9hdGluZ1BvaW50RXJyb3IiICJGdXR1cmVXYXJuaW5nIiAiSU9FcnJvciIKLQkJCSAgIkltcG9ydEVycm9yIiAiSW5kZW50YXRpb25FcnJvciIgIkluZGV4RXJyb3IiCi0JCQkgICJLZXlFcnJvciIgIktleWJvYXJkSW50ZXJydXB0IiAiTG9va3VwRXJyb3IiCi0JCQkgICJNZW1vcnlFcnJvciIgIk5hbWVFcnJvciIgIk5vdEltcGxlbWVudGVkIgotCQkJICAiTm90SW1wbGVtZW50ZWRFcnJvciIgIk9TRXJyb3IiICJPdmVyZmxvd0Vycm9yIgotCQkJICAiT3ZlcmZsb3dXYXJuaW5nIiAiUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyIKLQkJCSAgIlJlZmVyZW5jZUVycm9yIiAiUnVudGltZUVycm9yIiAiUnVudGltZVdhcm5pbmciCi0JCQkgICJTdGFuZGFyZEVycm9yIiAiU3RvcEl0ZXJhdGlvbiIgIlN5bnRheEVycm9yIgotCQkJICAiU3ludGF4V2FybmluZyIgIlN5c3RlbUVycm9yIiAiU3lzdGVtRXhpdCIKLQkJCSAgIlRhYkVycm9yIiAiVHlwZUVycm9yIiAiVW5ib3VuZExvY2FsRXJyb3IiCi0JCQkgICJVbmljb2RlRGVjb2RlRXJyb3IiICJVbmljb2RlRW5jb2RlRXJyb3IiCi0JCQkgICJVbmljb2RlRXJyb3IiICJVbmljb2RlVHJhbnNsYXRlRXJyb3IiCi0JCQkgICJVc2VyV2FybmluZyIgIlZhbHVlRXJyb3IiICJXYXJuaW5nIgotCQkJICAiWmVyb0RpdmlzaW9uRXJyb3IiKQotCQkJIlxcfCIpKQotCSkKLSAgICAobGlzdAotICAgICAnKCJeWyBcdF0qXFwoQC4rXFwpIiAxICdweS1kZWNvcmF0b3JzLWZhY2UpCi0gICAgIDs7IGtleXdvcmRzCi0gICAgIChjb25zIChjb25jYXQgIlxcPFxcKCIga3cxICJcXClcXD5bIFxuXHQoXSIpIDEpCi0gICAgIDs7IGJ1aWx0aW5zIHdoZW4gdGhleSBkb24ndCBhcHBlYXIgYXMgb2JqZWN0IGF0dHJpYnV0ZXMKLSAgICAgKGxpc3QgKGNvbmNhdCAiXFwoW14uIFx0XVxcfF5cXClbIFx0XSpcXDxcXCgiIGt3MyAiXFwpXFw+WyBcblx0KF0iKSAyCi0JICAgJ3B5LWJ1aWx0aW5zLWZhY2UpCi0gICAgIDs7IGJsb2NrIGludHJvZHVjaW5nIGtleXdvcmRzIHdpdGggaW1tZWRpYXRlbHkgZm9sbG93aW5nIGNvbG9ucy4KLSAgICAgOzsgWWVzICJleGNlcHQiIGlzIGluIGJvdGggbGlzdHMuCi0gICAgIChjb25zIChjb25jYXQgIlxcPFxcKCIga3cyICJcXClbIFxuXHQoXSIpIDEpCi0gICAgIDs7IEV4Y2VwdGlvbnMKLSAgICAgKGxpc3QgKGNvbmNhdCAiXFw8XFwoIiBrdzQgIlxcKVsgXG5cdDosKF0iKSAxICdweS1idWlsdGlucy1mYWNlKQotICAgICA7OyBgYXMnIGJ1dCBvbmx5IGluICJpbXBvcnQgZm9vIGFzIGJhciIgb3IgIndpdGggZm9vIGFzIGJhciIKLSAgICAgJygiWyBcdF0qXFwoXFw8ZnJvbVxcPi4qXFwpP1xcPGltcG9ydFxcPi4qXFw8XFwoYXNcXClcXD4iIC4gMikKLSAgICAgJygiWyBcdF0qXFw8d2l0aFxcPi4qXFw8XFwoYXNcXClcXD4iIC4gMSkKLSAgICAgOzsgY2xhc3NlcwotICAgICAnKCJcXDxjbGFzc1sgXHRdK1xcKFthLXpBLVpfXStbYS16QS1aMC05X10qXFwpIiAxIGZvbnQtbG9jay10eXBlLWZhY2UpCi0gICAgIDs7IGZ1bmN0aW9ucwotICAgICAnKCJcXDxkZWZbIFx0XStcXChbYS16QS1aX10rW2EtekEtWjAtOV9dKlxcKSIKLSAgICAgICAxIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCi0gICAgIDs7IHBzZXVkby1rZXl3b3JkcwotICAgICAnKCJcXDxcXChzZWxmXFx8Tm9uZVxcfFRydWVcXHxGYWxzZVxcfEVsbGlwc2lzXFwpXFw+IgotICAgICAgIDEgcHktcHNldWRvLWtleXdvcmQtZmFjZSkKLSAgICAgOzsgWFhYLCBUT0RPLCBhbmQgRklYTUUgdGFncwotICAgICAnKCJYWFhcXHxUT0RPXFx8RklYTUUiIDAgcHktWFhYLXRhZy1mYWNlIHQpCi0gICAgICkpCi0gICJBZGRpdGlvbmFsIGV4cHJlc3Npb25zIHRvIGhpZ2hsaWdodCBpbiBQeXRob24gbW9kZS4iKQotKHB1dCAncHl0aG9uLW1vZGUgJ2ZvbnQtbG9jay1kZWZhdWx0cyAnKHB5dGhvbi1mb250LWxvY2sta2V5d29yZHMpKQotCi07OyBoYXZlIHRvIGJpbmQgcHktZmlsZS1xdWV1ZSBiZWZvcmUgaW5zdGFsbGluZyB0aGUga2lsbC1lbWFjcy1ob29rCi0oZGVmdmFyIHB5LWZpbGUtcXVldWUgbmlsCi0gICJRdWV1ZSBvZiBQeXRob24gdGVtcCBmaWxlcyBhd2FpdGluZyBleGVjdXRpb24uCi1DdXJyZW50bHktYWN0aXZlIGZpbGUgaXMgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIikKLQotKGRlZnZhciBweS1wZGJ0cmFjay1pcy10cmFja2luZy1wIG5pbCkKLQotKGRlZnZhciBweS1weWNoZWNrZXItaGlzdG9yeSBuaWwpCi0KLQotDAotOzsgQ29uc3RhbnRzCi0KLShkZWZjb25zdCBweS1zdHJpbmdsaXQtcmUKLSAgKGNvbmNhdAotICAgOzsgVGhlc2UgZmFpbCBpZiBiYWNrc2xhc2gtcXVvdGUgZW5kcyB0aGUgc3RyaW5nIChub3Qgd29ydGgKLSAgIDs7IGZpeGluZz8pLiAgVGhleSBwcmVjZWRlIHRoZSBzaG9ydCB2ZXJzaW9ucyBzbyB0aGF0IHRoZSBmaXJzdCB0d28KLSAgIDs7IHF1b3RlcyBkb24ndCBsb29rIGxpa2UgYW4gZW1wdHkgc2hvcnQgc3RyaW5nLgotICAgOzsKLSAgIDs7IChtYXliZSByYXcpLCBsb25nIHNpbmdsZSBxdW90ZWQgdHJpcGxlIHF1b3RlZCBzdHJpbmdzIChTUVRRKSwKLSAgIDs7IHdpdGggcG90ZW50aWFsIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMKLSAgICJbclJdPycnJ1teJ10qXFwoXFwoJ1teJ11cXHwnJ1teJ11cXClbXiddKlxcKSonJyciCi0gICAiXFx8IgotICAgOzsgKG1heWJlIHJhdyksIGxvbmcgZG91YmxlIHF1b3RlZCB0cmlwbGUgcXVvdGVkIHN0cmluZ3MgKERRVFEpLAotICAgOzsgd2l0aCBwb3RlbnRpYWwgZW1iZWRkZWQgZG91YmxlIHF1b3RlcwotICAgIltyUl0/XCJcIlwiW15cIl0qXFwoXFwoXCJbXlwiXVxcfFwiXCJbXlwiXVxcKVteXCJdKlxcKSpcIlwiXCIiCi0gICAiXFx8IgotICAgIltyUl0/J1xcKFteJ1xuXFxdXFx8XFxcXC5cXCkqJyIJOyBzaW5nbGUtcXVvdGVkCi0gICAiXFx8IgkJCQk7IG9yCi0gICAiW3JSXT9cIlxcKFteXCJcblxcXVxcfFxcXFwuXFwpKlwiIgk7IGRvdWJsZS1xdW90ZWQKLSAgICkKLSAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhIFB5dGhvbiBzdHJpbmcgbGl0ZXJhbC4iKQotCi0oZGVmY29uc3QgcHktY29udGludWVkLXJlCi0gIDs7IFRoaXMgaXMgdHJpY2t5IGJlY2F1c2UgYSB0cmFpbGluZyBiYWNrc2xhc2ggZG9lcyBub3QgbWVhbgotICA7OyBjb250aW51YXRpb24gaWYgaXQncyBpbiBhIGNvbW1lbnQKLSAgKGNvbmNhdAotICAgIlxcKCIgIlteIydcIlxuXFxdIiAiXFx8IiBweS1zdHJpbmdsaXQtcmUgIlxcKSoiCi0gICAiXFxcXCQiKQotICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIFB5dGhvbiBiYWNrc2xhc2ggY29udGludWF0aW9uIGxpbmVzLiIpCi0KLShkZWZjb25zdCBweS1ibGFuay1vci1jb21tZW50LXJlICJbIFx0XSpcXCgkXFx8I1xcKSIKLSAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhIGJsYW5rIG9yIGNvbW1lbnQgbGluZS4iKQotCi0oZGVmY29uc3QgcHktb3V0ZGVudC1yZQotICAoY29uY2F0ICJcXCgiIChtYXBjb25jYXQgJ2lkZW50aXR5Ci0JCQkgICAnKCJlbHNlOiIKLQkJCSAgICAgImV4Y2VwdFxcKFxccyArLipcXCk/OiIKLQkJCSAgICAgImZpbmFsbHk6IgotCQkJICAgICAiZWxpZlxccyArLio6IikKLQkJCSAgICJcXHwiKQotCSAgIlxcKSIpCi0gICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgc3RhdGVtZW50cyB0byBiZSBkZWRlbnRlZCBvbmUgbGV2ZWwuIikKLQotKGRlZmNvbnN0IHB5LWJsb2NrLWNsb3Npbmcta2V5d29yZHMtcmUKLSAgIlxcKHJldHVyblxcfHJhaXNlXFx8YnJlYWtcXHxjb250aW51ZVxcfHBhc3NcXCkiCi0gICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcga2V5d29yZHMgd2hpY2ggdHlwaWNhbGx5IGNsb3NlIGEgYmxvY2suIikKLQotKGRlZmNvbnN0IHB5LW5vLW91dGRlbnQtcmUKLSAgKGNvbmNhdAotICAgIlxcKCIKLSAgIChtYXBjb25jYXQgJ2lkZW50aXR5Ci0JICAgICAgKGxpc3QgInRyeToiCi0JCSAgICAiZXhjZXB0XFwoXFxzICsuKlxcKT86IgotCQkgICAgIndoaWxlXFxzICsuKjoiCi0JCSAgICAiZm9yXFxzICsuKjoiCi0JCSAgICAiaWZcXHMgKy4qOiIKLQkJICAgICJlbGlmXFxzICsuKjoiCi0JCSAgICAoY29uY2F0IHB5LWJsb2NrLWNsb3Npbmcta2V5d29yZHMtcmUgIlsgXHRcbl0iKQotCQkgICAgKQotCSAgICAgICJcXHwiKQotCSAgIlxcKSIpCi0gICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgbGluZXMgbm90IHRvIGRlZGVudCBhZnRlci4iKQotCi0oZGVmdmFyIHB5LXRyYWNlYmFjay1saW5lLXJlCi0gICJbIFx0XStGaWxlIFwiXFwoW15cIl0rXFwpXCIsIGxpbmUgXFwoWzAtOV0rXFwpIgotICAiUmVndWxhciBleHByZXNzaW9uIHRoYXQgZGVzY3JpYmVzIHRyYWNlYmFja3MuIikKLQotOzsgcGRidHJhY2sgY29uc3RhbnRzCi0oZGVmY29uc3QgcHktcGRidHJhY2stc3RhY2stZW50cnktcmVnZXhwCi07ICAiXj4gXFwoW14oXStcXCkoXFwoWzAtOV0rXFwpKVxcKFs/YS16QS1aMC05X10rXFwpKCkiCi0gICJePiBcXCguKlxcKShcXChbMC05XStcXCkpXFwoWz9hLXpBLVowLTlfXStcXCkoKSIKLSAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBwZGJ0cmFjayB1c2VzIHRvIGZpbmQgYSBzdGFjayB0cmFjZSBlbnRyeS4iKQotCi0oZGVmY29uc3QgcHktcGRidHJhY2staW5wdXQtcHJvbXB0ICJcblsoPF0qW1BwXWRiWz4pXSsgIgotICAiUmVndWxhciBleHByZXNzaW9uIHBkYnRyYWNrIHVzZXMgdG8gcmVjb2duaXplIGEgcGRiIHByb21wdC4iKQotCi0oZGVmY29uc3QgcHktcGRidHJhY2stdHJhY2stcmFuZ2UgMTAwMDAKLSAgIk1heCBudW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIGVuZCBvZiBidWZmZXIgdG8gc2VhcmNoIGZvciBzdGFjayBlbnRyeS4iKQotCi0KLQwKLTs7IE1ham9yIG1vZGUgYm9pbGVycGxhdGUKLQotOzsgZGVmaW5lIGEgbW9kZS1zcGVjaWZpYyBhYmJyZXYgdGFibGUgZm9yIHRob3NlIHdobyB1c2Ugc3VjaCB0aGluZ3MKLShkZWZ2YXIgcHl0aG9uLW1vZGUtYWJicmV2LXRhYmxlIG5pbAotICAiQWJicmV2IHRhYmxlIGluIHVzZSBpbiBgcHl0aG9uLW1vZGUnIGJ1ZmZlcnMuIikKLShkZWZpbmUtYWJicmV2LXRhYmxlICdweXRob24tbW9kZS1hYmJyZXYtdGFibGUgbmlsKQotCi0oZGVmdmFyIHB5dGhvbi1tb2RlLWhvb2sgbmlsCi0gICIqSG9vayBjYWxsZWQgYnkgYHB5dGhvbi1tb2RlJy4iKQotCi0obWFrZS1vYnNvbGV0ZS12YXJpYWJsZSAnanB5dGhvbi1tb2RlLWhvb2sgJ2p5dGhvbi1tb2RlLWhvb2spCi0oZGVmdmFyIGp5dGhvbi1tb2RlLWhvb2sgbmlsCi0gICIqSG9vayBjYWxsZWQgYnkgYGp5dGhvbi1tb2RlJy4gYGp5dGhvbi1tb2RlJyBhbHNvIGNhbGxzCi1gcHl0aG9uLW1vZGUtaG9vaycuIikKLQotKGRlZnZhciBweS1zaGVsbC1ob29rIG5pbAotICAiKkhvb2sgY2FsbGVkIGJ5IGBweS1zaGVsbCcuIikKLQotOzsgSW4gcHJldmlvdXMgdmVyc2lvbiBvZiBweXRob24tbW9kZS5lbCwgdGhlIGhvb2sgd2FzIGluY29ycmVjdGx5Ci07OyBjYWxsZWQgcHktbW9kZS1ob29rLCBhbmQgd2FzIG5vdCBkZWZ2YXInZC4gIERlcHJlY2F0ZSBpdHMgdXNlLgotKGFuZCAoZmJvdW5kcCAnbWFrZS1vYnNvbGV0ZS12YXJpYWJsZSkKLSAgICAgKG1ha2Utb2Jzb2xldGUtdmFyaWFibGUgJ3B5LW1vZGUtaG9vayAncHl0aG9uLW1vZGUtaG9vaykpCi0KLShkZWZ2YXIgcHktbW9kZS1tYXAgKCkKLSAgIktleW1hcCB1c2VkIGluIGBweXRob24tbW9kZScgYnVmZmVycy4iKQotKGlmIHB5LW1vZGUtbWFwCi0gICAgbmlsCi0gIChzZXRxIHB5LW1vZGUtbWFwIChtYWtlLXNwYXJzZS1rZXltYXApKQotICA7OyBlbGVjdHJpYyBrZXlzCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICI6IiAncHktZWxlY3RyaWMtY29sb24pCi0gIDs7IGluZGVudGF0aW9uIGxldmVsIG1vZGlmaWVycwotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLWwiICAncHktc2hpZnQtcmVnaW9uLWxlZnQpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jXEMtciIgICdweS1zaGlmdC1yZWdpb24tcmlnaHQpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jPCIgICAgICdweS1zaGlmdC1yZWdpb24tbGVmdCkKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWM+IiAgICAgJ3B5LXNoaWZ0LXJlZ2lvbi1yaWdodCkKLSAgOzsgc3VicHJvY2VzcyBjb21tYW5kcwotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLWMiICAncHktZXhlY3V0ZS1idWZmZXIpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jXEMtbSIgICdweS1leGVjdXRlLWltcG9ydC1vci1yZWxvYWQpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jXEMtcyIgICdweS1leGVjdXRlLXN0cmluZykKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWN8IiAgICAgJ3B5LWV4ZWN1dGUtcmVnaW9uKQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXGVcQy14IiAgICAncHktZXhlY3V0ZS1kZWYtb3ItY2xhc3MpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jISIgICAgICdweS1zaGVsbCkKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcQy10IiAgJ3B5LXRvZ2dsZS1zaGVsbHMpCi0gIDs7IENhdXRpb24hICBFbnRlciBoZXJlIGF0IHlvdXIgb3duIHJpc2suICBXZSBhcmUgdHJ5aW5nIHRvIHN1cHBvcnQKLSAgOzsgc2V2ZXJhbCBiZWhhdmlvcnMgYW5kIGl0IGdldHMgZGlzZ3VzdGluZy4gOi0oIFRoaXMgbG9naWMgcmlwcGVkCi0gIDs7IGxhcmdlbHkgZnJvbSBDQyBNb2RlLgotICA7OwotICA7OyBJbiBYRW1hY3MgMTksIEVtYWNzIDE5LCBhbmQgRW1hY3MgMjAsIHdlIHVzZSB0aGlzIHRvIGJpbmQKLSAgOzsgYmFja3dhcmRzIGRlbGV0aW9uIGJlaGF2aW9yIHRvIERFTCwgd2hpY2ggYm90aCBEZWxldGUgYW5kCi0gIDs7IEJhY2tzcGFjZSBnZXQgdHJhbnNsYXRlZCB0by4gIFRoZXJlJ3Mgbm8gd2F5IHRvIHNlcGFyYXRlIHRoaXMKLSAgOzsgYmVoYXZpb3IgaW4gYSBjbGVhbiB3YXksIHNvIGRlYWwgd2l0aCBpdCEgIEJlc2lkZXMsIGl0J3MgYmVlbgotICA7OyB0aGlzIHdheSBzaW5jZSB0aGUgZGF3biBvZiB0aW1lLgotICAoaWYgKG5vdCAoYm91bmRwICdkZWxldGUta2V5LWRlbGV0ZXMtZm9yd2FyZCkpCi0gICAgICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXDE3NyIgJ3B5LWVsZWN0cmljLWJhY2tzcGFjZSkKLSAgICA7OyBIb3dldmVyLCBYRW1hY3MgMjAgYWN0dWFsbHkgYWNoaWV2ZWQgZW5saWdodGVubWVudC4gIEl0IGlzCi0gICAgOzsgcG9zc2libGUgdG8gc2FuZWx5IGRlZmluZSBib3RoIGJhY2t3YXJkIGFuZCBmb3J3YXJkIGRlbGV0aW9uCi0gICAgOzsgYmVoYXZpb3IgdW5kZXIgWCBzZXBhcmF0ZWx5IChUVFlzIGFyZSBmb3JldmVyIGJleW9uZCBob3BlLCBidXQKLSAgICA7OyB3aG8gY2FyZXM/ICBYRW1hY3MgMjAgZG9lcyB0aGUgcmlnaHQgdGhpbmcgd2l0aCB0aGVzZSB0b28pLgotICAgIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwIFtkZWxldGVdICAgICdweS1lbGVjdHJpYy1kZWxldGUpCi0gICAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgW2JhY2tzcGFjZV0gJ3B5LWVsZWN0cmljLWJhY2tzcGFjZSkpCi0gIDs7IFNlcGFyYXRlIE0tQlMgZnJvbSBDLU0taC4gIFRoZSBmb3JtZXIgc2hvdWxkIHJlbWFpbgotICA7OyBiYWNrd2FyZC1raWxsLXdvcmQuCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwIFsoY29udHJvbCBtZXRhIGgpXSAncHktbWFyay1kZWYtb3ItY2xhc3MpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jXEMtayIgICdweS1tYXJrLWJsb2NrKQotICA7OyBNaXNjZWxsYW5lb3VzCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jOiIgICAgICdweS1ndWVzcy1pbmRlbnQtb2Zmc2V0KQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1x0IiAgICAncHktaW5kZW50LXJlZ2lvbikKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcQy1kIiAgJ3B5LXBkYnRyYWNrLXRvZ2dsZS1zdGFjay10cmFja2luZykKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcQy1uIiAgJ3B5LW5leHQtc3RhdGVtZW50KQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLXAiICAncHktcHJldmlvdXMtc3RhdGVtZW50KQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLXUiICAncHktZ290by1ibG9jay11cCkKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWMjIiAgICAgJ3B5LWNvbW1lbnQtcmVnaW9uKQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtYz8iICAgICAncHktZGVzY3JpYmUtbW9kZSkKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcQy1oIiAgJ3B5LWhlbHAtYXQtcG9pbnQpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcZVxDLWEiICAgICdweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzKQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXGVcQy1lIiAgICAncHktZW5kLW9mLWRlZi1vci1jbGFzcykKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWMtIiAgICAgJ3B5LXVwLWV4Y2VwdGlvbikKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWM9IiAgICAgJ3B5LWRvd24tZXhjZXB0aW9uKQotICA7OyBzdHVmZiB0aGF0IGlzIGBzdGFuZGFyZCcgYnV0IGRvZXNuJ3QgaW50ZXJmYWNlIHdlbGwgd2l0aAotICA7OyBweXRob24tbW9kZSwgd2hpY2ggZm9yY2VzIHVzIHRvIHJlYmluZCB0byBzcGVjaWFsIGNvbW1hbmRzCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy14bmQiICAgICdweS1uYXJyb3ctdG8tZGVmdW4pCi0gIDs7IGluZm9ybWF0aW9uCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jXEMtYiIgJ3B5LXN1Ym1pdC1idWctcmVwb3J0KQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLXYiICdweS12ZXJzaW9uKQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLXciICdweS1weWNoZWNrZXItcnVuKQotICA7OyBzaGFkb3cgZ2xvYmFsIGJpbmRpbmdzIGZvciBuZXdsaW5lLWFuZC1pbmRlbnQgdy8gdGhlIHB5LSB2ZXJzaW9uLgotICA7OyBCQVcgLSB0aGlzIGlzIGV4dHJlbWVseSBiYWQgZm9ybSwgYnV0IEknbSBub3QgZ29pbmcgdG8gY2hhbmdlIGl0Ci0gIDs7IGZvciBub3cuCi0gIChtYXBjYXIgIycobGFtYmRhIChrZXkpCi0JICAgICAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAga2V5ICdweS1uZXdsaW5lLWFuZC1pbmRlbnQpKQotCSAgKHdoZXJlLWlzLWludGVybmFsICduZXdsaW5lLWFuZC1pbmRlbnQpKQotICA7OyBGb3JjZSBSRVQgdG8gYmUgcHktbmV3bGluZS1hbmQtaW5kZW50IGV2ZW4gaWYgaXQgZGlkbid0IGdldAotICA7OyBtYXBwZWQgYnkgdGhlIGFib3ZlIGNvZGUuICBtb3RpdmF0aW9uOiBFbWFjcycgZGVmYXVsdCBiaW5kaW5nIGZvcgotICA7OyBSRVQgaXMgYG5ld2xpbmUnIGFuZCBDLWogaXMgYG5ld2xpbmUtYW5kLWluZGVudCcuICBNb3N0IFB5dGhvbmVlcnMKLSAgOzsgZXhwZWN0IFJFVCB0byBkbyBhIGBweS1uZXdsaW5lLWFuZC1pbmRlbnQnIGFuZCBhbnkgRW1hY3NlcnMgd2hvCi0gIDs7IGRpc2xpa2UgdGhpcyBhcmUgcHJvYmFibHkga25vd2xlZGdlYWJsZSBlbm91Z2ggdG8gZG8gYSByZWJpbmQuCi0gIDs7IEhvd2V2ZXIsIHdlIGRvICpub3QqIGNoYW5nZSBDLWogc2luY2UgbWFueSBFbWFjc2VycyBoYXZlIGFscmVhZHkKLSAgOzsgc3dhcHBlZCBSRVQgYW5kIEMtaiBhbmQgdGhleSBkb24ndCB3YW50IEMtaiBib3VuZCB0byBgbmV3bGluZScgdG8KLSAgOzsgY2hhbmdlLgotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtbSIgJ3B5LW5ld2xpbmUtYW5kLWluZGVudCkKLSAgKQotCi0oZGVmdmFyIHB5LW1vZGUtb3V0cHV0LW1hcCBuaWwKLSAgIktleW1hcCB1c2VkIGluICpQeXRob24gT3V0cHV0KiBidWZmZXJzLiIpCi0oaWYgcHktbW9kZS1vdXRwdXQtbWFwCi0gICAgbmlsCi0gIChzZXRxIHB5LW1vZGUtb3V0cHV0LW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1vdXRwdXQtbWFwIFtidXR0b24yXSAgJ3B5LW1vdXNldG8tZXhjZXB0aW9uKQotICAoZGVmaW5lLWtleSBweS1tb2RlLW91dHB1dC1tYXAgIlxDLWNcQy1jIiAncHktZ290by1leGNlcHRpb24pCi0gIDs7IFRCRDogRGlzYWJsZSBhbGwgc2VsZi1pbnNlcnRpbmcga2V5cy4gIFRoaXMgaXMgYm9ndXMsIHdlIHNob3VsZAotICA7OyByZWFsbHkgaW1wbGVtZW50IHRoaXMgYXMgKlB5dGhvbiBPdXRwdXQqIGJ1ZmZlciBiZWluZyByZWFkLW9ubHkKLSAgKG1hcGNhciAjJyAobGFtYmRhIChrZXkpCi0JICAgICAgIChkZWZpbmUta2V5IHB5LW1vZGUtb3V0cHV0LW1hcCBrZXkKLQkJICMnKGxhbWJkYSAoKSAoaW50ZXJhY3RpdmUpIChiZWVwKSkpKQotCSAgICAgKHdoZXJlLWlzLWludGVybmFsICdzZWxmLWluc2VydC1jb21tYW5kKSkKLSAgKQotCi0oZGVmdmFyIHB5LXNoZWxsLW1hcCBuaWwKLSAgIktleW1hcCB1c2VkIGluICpQeXRob24qIHNoZWxsIGJ1ZmZlcnMuIikKLShpZiBweS1zaGVsbC1tYXAKLSAgICBuaWwKLSAgKHNldHEgcHktc2hlbGwtbWFwIChjb3B5LWtleW1hcCBjb21pbnQtbW9kZS1tYXApKQotICAoZGVmaW5lLWtleSBweS1zaGVsbC1tYXAgW3RhYl0gICAndGFiLXRvLXRhYi1zdG9wKQotICAoZGVmaW5lLWtleSBweS1zaGVsbC1tYXAgIlxDLWMtIiAncHktdXAtZXhjZXB0aW9uKQotICAoZGVmaW5lLWtleSBweS1zaGVsbC1tYXAgIlxDLWM9IiAncHktZG93bi1leGNlcHRpb24pCi0gICkKLQotKGRlZnZhciBweS1tb2RlLXN5bnRheC10YWJsZSBuaWwKLSAgIlN5bnRheCB0YWJsZSB1c2VkIGluIGBweXRob24tbW9kZScgYnVmZmVycy4iKQotKHdoZW4gKG5vdCBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKHNldHEgcHktbW9kZS1zeW50YXgtdGFibGUgKG1ha2Utc3ludGF4LXRhYmxlKSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1woICIoKSIgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cKSAiKSgiIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XFsgIihdIiBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1xdICIpWyIgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9ceyAiKH0iIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XH0gIil7IiBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgOzsgQWRkIG9wZXJhdG9yIHN5bWJvbHMgbWlzYXNzaWduZWQgaW4gdGhlIHN0ZCB0YWJsZQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCQgIi4iICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1wlICIuIiAgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cJiAiLiIgIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCogIi4iICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1wrICIuIiAgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cLSAiLiIgIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XC8gIi4iICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1w8ICIuIiAgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cPSAiLiIgIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XD4gIi4iICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1x8ICIuIiAgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIDs7IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHVuZGVyc2NvcmUgaXMgd29yZCBjbGFzcyBpbnN0ZWFkIG9mCi0gIDs7IHN5bWJvbCBjbGFzcy4gIEdOVSBjb252ZW50aW9ucyBzYXkgaXQgc2hvdWxkIGJlIHN5bWJvbCBjbGFzcywgYnV0Ci0gIDs7IHRoZXJlJ3MgYSBuYXR1cmFsIGNvbmZsaWN0IGJldHdlZW4gd2hhdCBtYWpvciBtb2RlIGF1dGhvcnMgd2FudAotICA7OyBhbmQgd2hhdCB1c2VycyBleHBlY3QgZnJvbSBgZm9yd2FyZC13b3JkJyBhbmQgYGJhY2t3YXJkLXdvcmQnLgotICA7OyBHdWlkbyBhbmQgSSBoYXZlIGhhc2hlZCB0aGlzIG91dCBhbmQgaGF2ZSBkZWNpZGVkIHRvIGtlZXAKLSAgOzsgdW5kZXJzY29yZSBpbiB3b3JkIGNsYXNzLiAgSWYgeW91J3JlIHRlbXB0ZWQgdG8gY2hhbmdlIGl0LCB0cnkKLSAgOzsgYmluZGluZyBNLWYgYW5kIE0tYiB0byBweS1mb3J3YXJkLWludG8tbm9tZW5jbGF0dXJlIGFuZAotICA7OyBweS1iYWNrd2FyZC1pbnRvLW5vbWVuY2xhdHVyZSBpbnN0ZWFkLiAgVGhpcyBkb2Vzbid0IGhlbHAgaW4gYWxsCi0gIDs7IHNpdHVhdGlvbnMgd2hlcmUgeW91J2Qgd2FudCB0aGUgZGlmZmVyZW50IGJlaGF2aW9yCi0gIDs7IChlLmcuIGJhY2t3YXJkLWtpbGwtd29yZCkuCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cXyAidyIgIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICA7OyBCb3RoIHNpbmdsZSBxdW90ZSBhbmQgZG91YmxlIHF1b3RlIGFyZSBzdHJpbmcgZGVsaW1pdGVycwotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCcgIlwiIiBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1wiICJcIiIgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIDs7IGJhY2txdW90ZSBpcyBvcGVuIGFuZCBjbG9zZSBwYXJlbgotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XGAgIiQiICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgOzsgY29tbWVudCBkZWxpbWl0ZXJzCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cIyAiPCIgIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XG4gIj4iICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKQotCi07OyBBbiBhdXhpbGlhcnkgc3ludGF4IHRhYmxlIHdoaWNoIHBsYWNlcyB1bmRlcnNjb3JlIGFuZCBkb3QgaW4gdGhlCi07OyBzeW1ib2wgY2xhc3MgZm9yIHNpbXBsaWNpdHkKLShkZWZ2YXIgcHktZG90dGVkLWV4cHJlc3Npb24tc3ludGF4LXRhYmxlIG5pbAotICAiU3ludGF4IHRhYmxlIHVzZWQgdG8gaWRlbnRpZnkgUHl0aG9uIGRvdHRlZCBleHByZXNzaW9ucy4iKQotKHdoZW4gKG5vdCBweS1kb3R0ZWQtZXhwcmVzc2lvbi1zeW50YXgtdGFibGUpCi0gIChzZXRxIHB5LWRvdHRlZC1leHByZXNzaW9uLXN5bnRheC10YWJsZQotCShjb3B5LXN5bnRheC10YWJsZSBweS1tb2RlLXN5bnRheC10YWJsZSkpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9fICJfIiBweS1kb3R0ZWQtZXhwcmVzc2lvbi1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID8uICJfIiBweS1kb3R0ZWQtZXhwcmVzc2lvbi1zeW50YXgtdGFibGUpKQotCi0KLQwKLTs7IFV0aWxpdGllcwotKGRlZm1hY3JvIHB5LXNhZmUgKCZyZXN0IGJvZHkpCi0gICJTYWZlbHkgZXhlY3V0ZSBCT0RZLCByZXR1cm4gbmlsIGlmIGFuIGVycm9yIG9jY3VycmVkLiIKLSAgKGAgKGNvbmRpdGlvbi1jYXNlIG5pbAotCSAocHJvZ24gKCxAIGJvZHkpKQotICAgICAgIChlcnJvciBuaWwpKSkpCi0KLShkZWZzdWJzdCBweS1rZWVwLXJlZ2lvbi1hY3RpdmUgKCkKLSAgIktlZXAgdGhlIHJlZ2lvbiBhY3RpdmUgaW4gWEVtYWNzLiIKLSAgOzsgSWdub3JlIGJ5dGUtY29tcGlsZXIgd2FybmluZ3MgeW91IG1pZ2h0IHNlZS4gIEFsc28gbm90ZSB0aGF0Ci0gIDs7IEZTRidzIEVtYWNzIDE5IGRvZXMgaXQgZGlmZmVyZW50bHk7IGl0cyBwb2xpY3kgZG9lc24ndCByZXF1aXJlIHVzCi0gIDs7IHRvIHRha2UgZXhwbGljaXQgYWN0aW9uLgotICAoYW5kIChib3VuZHAgJ3ptYWNzLXJlZ2lvbi1zdGF5cykKLSAgICAgICAoc2V0cSB6bWFjcy1yZWdpb24tc3RheXMgdCkpKQotCi0oZGVmc3Vic3QgcHktcG9pbnQgKHBvc2l0aW9uKQotICAiUmV0dXJucyB0aGUgdmFsdWUgb2YgcG9pbnQgYXQgY2VydGFpbiBjb21tb25seSByZWZlcmVuY2VkIFBPU0lUSU9Ocy4KLVBPU0lUSU9OIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzeW1ib2xzOgotCi0gIGJvbCAgLS0gYmVnaW5uaW5nIG9mIGxpbmUKLSAgZW9sICAtLSBlbmQgb2YgbGluZQotICBib2QgIC0tIGJlZ2lubmluZyBvZiBkZWYgb3IgY2xhc3MKLSAgZW9kICAtLSBlbmQgb2YgZGVmIG9yIGNsYXNzCi0gIGJvYiAgLS0gYmVnaW5uaW5nIG9mIGJ1ZmZlcgotICBlb2IgIC0tIGVuZCBvZiBidWZmZXIKLSAgYm9pICAtLSBiYWNrIHRvIGluZGVudGF0aW9uCi0gIGJvcyAgLS0gYmVnaW5uaW5nIG9mIHN0YXRlbWVudAotCi1UaGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1vZGlmeSBwb2ludCBvciBtYXJrLiIKLSAgKGxldCAoKGhlcmUgKHBvaW50KSkpCi0gICAgKGNvbmQKLSAgICAgKChlcSBwb3NpdGlvbiAnYm9sKSAoYmVnaW5uaW5nLW9mLWxpbmUpKQotICAgICAoKGVxIHBvc2l0aW9uICdlb2wpIChlbmQtb2YtbGluZSkpCi0gICAgICgoZXEgcG9zaXRpb24gJ2JvZCkgKHB5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3MgJ2VpdGhlcikpCi0gICAgICgoZXEgcG9zaXRpb24gJ2VvZCkgKHB5LWVuZC1vZi1kZWYtb3ItY2xhc3MgJ2VpdGhlcikpCi0gICAgIDs7IEtpbmQgb2YgZnVubnksIEkga25vdywgYnV0IHVzZWZ1bCBmb3IgcHktdXAtZXhjZXB0aW9uLgotICAgICAoKGVxIHBvc2l0aW9uICdib2IpIChiZWdpbm5pbmctb2YtYnVmZmVyKSkKLSAgICAgKChlcSBwb3NpdGlvbiAnZW9iKSAoZW5kLW9mLWJ1ZmZlcikpCi0gICAgICgoZXEgcG9zaXRpb24gJ2JvaSkgKGJhY2stdG8taW5kZW50YXRpb24pKQotICAgICAoKGVxIHBvc2l0aW9uICdib3MpIChweS1nb3RvLWluaXRpYWwtbGluZSkpCi0gICAgICh0IChlcnJvciAiVW5rbm93biBidWZmZXIgcG9zaXRpb24gcmVxdWVzdGVkOiAlcyIgcG9zaXRpb24pKQotICAgICApCi0gICAgKHByb2cxCi0JKHBvaW50KQotICAgICAgKGdvdG8tY2hhciBoZXJlKSkpKQotCi0oZGVmc3Vic3QgcHktaGlnaGxpZ2h0LWxpbmUgKGZyb20gdG8gZmlsZSBsaW5lKQotICAoY29uZAotICAgKChmYm91bmRwICdtYWtlLWV4dGVudCkKLSAgICA7OyBYRW1hY3MKLSAgICAobGV0ICgoZSAobWFrZS1leHRlbnQgZnJvbSB0bykpKQotICAgICAgKHNldC1leHRlbnQtcHJvcGVydHkgZSAnbW91c2UtZmFjZSAnaGlnaGxpZ2h0KQotICAgICAgKHNldC1leHRlbnQtcHJvcGVydHkgZSAncHktZXhjLWluZm8gKGNvbnMgZmlsZSBsaW5lKSkKLSAgICAgIChzZXQtZXh0ZW50LXByb3BlcnR5IGUgJ2tleW1hcCBweS1tb2RlLW91dHB1dC1tYXApKSkKLSAgICh0Ci0gICAgOzsgRW1hY3MgLS0gUGxlYXNlIHBvcnQgdGhpcyEKLSAgICApCi0gICApKQotCi0oZGVmdW4gcHktaW4tbGl0ZXJhbCAoJm9wdGlvbmFsIGxpbSkKLSAgIlJldHVybiBub24tbmlsIGlmIHBvaW50IGlzIGluIGEgUHl0aG9uIGxpdGVyYWwgKGEgY29tbWVudCBvciBzdHJpbmcpLgotT3B0aW9uYWwgYXJndW1lbnQgTElNIGluZGljYXRlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb250YWluaW5nIGZvcm0sCi1pLmUuIHRoZSBsaW1pdCBvbiBob3cgZmFyIGJhY2sgdG8gc2Nhbi4iCi0gIDs7IFRoaXMgaXMgdGhlIHZlcnNpb24gdXNlZCBmb3Igbm9uLVhFbWFjcywgd2hpY2ggaGFzIGEgbmljZXIKLSAgOzsgaW50ZXJmYWNlLgotICA7OwotICA7OyBXQVJOSU5HOiBXYXRjaCBvdXQgZm9yIGluZmluaXRlIHJlY3Vyc2lvbi4KLSAgKGxldCogKChsaW0gKG9yIGxpbSAocHktcG9pbnQgJ2JvZCkpKQotCSAoc3RhdGUgKHBhcnNlLXBhcnRpYWwtc2V4cCBsaW0gKHBvaW50KSkpKQotICAgIChjb25kCi0gICAgICgobnRoIDMgc3RhdGUpICdzdHJpbmcpCi0gICAgICgobnRoIDQgc3RhdGUpICdjb21tZW50KQotICAgICAodCBuaWwpKSkpCi0KLTs7IFhFbWFjcyBoYXMgYSBidWlsdC1pbiBmdW5jdGlvbiB0aGF0IHNob3VsZCBtYWtlIHRoaXMgbXVjaCBxdWlja2VyLgotOzsgSW4gdGhpcyBjYXNlLCBsaW0gaXMgaWdub3JlZAotKGRlZnVuIHB5LWZhc3QtaW4tbGl0ZXJhbCAoJm9wdGlvbmFsIGxpbSkKLSAgIkZhc3QgdmVyc2lvbiBvZiBgcHktaW4tbGl0ZXJhbCcsIHVzZWQgb25seSBieSBYRW1hY3MuCi1PcHRpb25hbCBMSU0gaXMgaWdub3JlZC4iCi0gIDs7IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgY29udGV4dCA9PSAnYmxvY2stY29tbWVudAotICAoYnVmZmVyLXN5bnRhY3RpYy1jb250ZXh0KSkKLQotKGlmIChmYm91bmRwICdidWZmZXItc3ludGFjdGljLWNvbnRleHQpCi0gICAgKGRlZmFsaWFzICdweS1pbi1saXRlcmFsICdweS1mYXN0LWluLWxpdGVyYWwpKQotCi0KLQwKLTs7IE1lbnUgZGVmaW5pdGlvbnMsIG9ubHkgcmVsZXZlbnQgaWYgeW91IGhhdmUgdGhlIGVhc3ltZW51LmVsIHBhY2thZ2UKLTs7IChzdGFuZGFyZCBpbiB0aGUgbGF0ZXN0IEVtYWNzIDE5IGFuZCBYRW1hY3MgMTkgZGlzdHJpYnV0aW9ucykuCi0oZGVmdmFyIHB5LW1lbnUgbmlsCi0gICJNZW51IGZvciBQeXRob24gTW9kZS4KLVRoaXMgbWVudSB3aWxsIGdldCBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgaWYgeW91IGhhdmUgdGhlIGBlYXN5bWVudScKLXBhY2thZ2UuICBOb3RlIHRoYXQgdGhlIGxhdGVzdCBYL0VtYWNzIHJlbGVhc2VzIGNvbnRhaW4gdGhpcyBwYWNrYWdlLiIpCi0KLShhbmQgKHB5LXNhZmUgKHJlcXVpcmUgJ2Vhc3ltZW51KSB0KQotICAgICAoZWFzeS1tZW51LWRlZmluZQotICAgICAgcHktbWVudSBweS1tb2RlLW1hcCAiUHl0aG9uIE1vZGUgbWVudSIKLSAgICAgICcoIlB5dGhvbiIKLQlbIkNvbW1lbnQgT3V0IFJlZ2lvbiIgICBweS1jb21tZW50LXJlZ2lvbiAgKG1hcmspXQotCVsiVW5jb21tZW50IFJlZ2lvbiIgICAgIChweS1jb21tZW50LXJlZ2lvbiAocG9pbnQpIChtYXJrKSAnKDQpKSAobWFyayldCi0JIi0iCi0JWyJNYXJrIGN1cnJlbnQgYmxvY2siICAgcHktbWFyay1ibG9jayB0XQotCVsiTWFyayBjdXJyZW50IGRlZiIgICAgIHB5LW1hcmstZGVmLW9yLWNsYXNzIHRdCi0JWyJNYXJrIGN1cnJlbnQgY2xhc3MiICAgKHB5LW1hcmstZGVmLW9yLWNsYXNzIHQpIHRdCi0JIi0iCi0JWyJTaGlmdCByZWdpb24gbGVmdCIgICAgcHktc2hpZnQtcmVnaW9uLWxlZnQgKG1hcmspXQotCVsiU2hpZnQgcmVnaW9uIHJpZ2h0IiAgIHB5LXNoaWZ0LXJlZ2lvbi1yaWdodCAobWFyayldCi0JIi0iCi0JWyJJbXBvcnQvcmVsb2FkIGZpbGUiICAgcHktZXhlY3V0ZS1pbXBvcnQtb3ItcmVsb2FkIHRdCi0JWyJFeGVjdXRlIGJ1ZmZlciIgICAgICAgcHktZXhlY3V0ZS1idWZmZXIgdF0KLQlbIkV4ZWN1dGUgcmVnaW9uIiAgICAgICBweS1leGVjdXRlLXJlZ2lvbiAobWFyayldCi0JWyJFeGVjdXRlIGRlZiBvciBjbGFzcyIgcHktZXhlY3V0ZS1kZWYtb3ItY2xhc3MgKG1hcmspXQotCVsiRXhlY3V0ZSBzdHJpbmciICAgICAgIHB5LWV4ZWN1dGUtc3RyaW5nIHRdCi0JWyJTdGFydCBpbnRlcnByZXRlci4uLiIgcHktc2hlbGwgdF0KLQkiLSIKLQlbIkdvIHRvIHN0YXJ0IG9mIGJsb2NrIiBweS1nb3RvLWJsb2NrLXVwIHRdCi0JWyJHbyB0byBzdGFydCBvZiBjbGFzcyIgKHB5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3MgdCkgdF0KLQlbIk1vdmUgdG8gZW5kIG9mIGNsYXNzIiAocHktZW5kLW9mLWRlZi1vci1jbGFzcyB0KSB0XQotCVsiTW92ZSB0byBzdGFydCBvZiBkZWYiIHB5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3MgdF0KLQlbIk1vdmUgdG8gZW5kIG9mIGRlZiIgICBweS1lbmQtb2YtZGVmLW9yLWNsYXNzIHRdCi0JIi0iCi0JWyJEZXNjcmliZSBtb2RlIiAgICAgICAgcHktZGVzY3JpYmUtbW9kZSB0XQotCSkpKQotCi0KLQwKLTs7IEltZW51IGRlZmluaXRpb25zCi0oZGVmdmFyIHB5LWltZW51LWNsYXNzLXJlZ2V4cAotICAoY29uY2F0CQkJCTsgPDxjbGFzc2VzPj4KLSAgICJcXCgiCQkJCTsKLSAgICJeWyBcdF0qIgkJCQk7IG5ld2xpbmUgYW5kIG1heWJlIHdoaXRlc3BhY2UKLSAgICJcXChjbGFzc1sgXHRdK1thLXpBLVowLTlfXStcXCkiCTsgY2xhc3MgbmFtZQotCQkJCQk7IHBvc3NpYmx5IG11bHRpcGxlIHN1cGVyY2xhc3NlcwotICAgIlxcKFsgXHRdKlxcKChcXChbYS16QS1aMC05XywuIFx0XG5dXFwpKilcXCk/XFwpIgotICAgIlsgXHRdKjoiCQkJCTsgYW5kIHRoZSBmaW5hbCA6Ci0gICAiXFwpIgkJCQk7ID4+Y2xhc3Nlczw8Ci0gICApCi0gICJSZWdleHAgZm9yIFB5dGhvbiBjbGFzc2VzIGZvciB1c2Ugd2l0aCB0aGUgSW1lbnUgcGFja2FnZS4iCi0gICkKLQotKGRlZnZhciBweS1pbWVudS1tZXRob2QtcmVnZXhwCi0gIChjb25jYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyA8PG1ldGhvZHMgYW5kIGZ1bmN0aW9ucz4+Ci0gICAiXFwoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwotICAgIl5bIFx0XSoiICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbmV3IGxpbmUgYW5kIG1heWJlIHdoaXRlc3BhY2UKLSAgICJcXChkZWZbIFx0XSsiICAgICAgICAgICAgICAgICAgICAgICA7IGZ1bmN0aW9uIGRlZmluaXRpb25zIHN0YXJ0IHdpdGggZGVmCi0gICAiXFwoW2EtekEtWjAtOV9dK1xcKSIgICAgICAgICAgICAgICAgOyAgIG5hbWUgaXMgaGVyZQotCQkJCQk7ICAgZnVuY3Rpb24gYXJndW1lbnRzLi4uCi07OyAgICJbIFx0XSooXFwoWy0rL2EtekEtWjAtOV89LFwqIFx0XG4uKClcIicjXSpcXCkpIgotICAgIlsgXHRdKihcXChbXjojXSpcXCkpIgotICAgIlxcKSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZW5kIG9mIGRlZgotICAgIlsgXHRdKjoiICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgYW5kIHRoZW4gdGhlIDoKLSAgICJcXCkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ID4+bWV0aG9kcyBhbmQgZnVuY3Rpb25zPDwKLSAgICkKLSAgIlJlZ2V4cCBmb3IgUHl0aG9uIG1ldGhvZHMvZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCB0aGUgSW1lbnUgcGFja2FnZS4iCi0gICkKLQotKGRlZnZhciBweS1pbWVudS1tZXRob2Qtbm8tYXJnLXBhcmVucyAnKDIgOCkKLSAgIkluZGljZXMgaW50byBncm91cHMgb2YgdGhlIFB5dGhvbiByZWdleHAgZm9yIHVzZSB3aXRoIEltZW51LgotCi1Vc2luZyB0aGVzZSB2YWx1ZXMgd2lsbCByZXN1bHQgaW4gc21hbGxlciBJbWVudSBsaXN0cywgYXMgYXJndW1lbnRzIHRvCi1mdW5jdGlvbnMgYXJlIG5vdCBsaXN0ZWQuCi0KLVNlZSB0aGUgdmFyaWFibGUgYHB5LWltZW51LXNob3ctbWV0aG9kLWFyZ3MtcCcgZm9yIG1vcmUKLWluZm9ybWF0aW9uLiIpCi0KLShkZWZ2YXIgcHktaW1lbnUtbWV0aG9kLWFyZy1wYXJlbnMgJygyIDcpCi0gICJJbmRpY2VzIGludG8gZ3JvdXBzIG9mIHRoZSBQeXRob24gcmVnZXhwIGZvciB1c2Ugd2l0aCBpbWVudS4KLVVzaW5nIHRoZXNlIHZhbHVlcyB3aWxsIHJlc3VsdCBpbiBsYXJnZSBJbWVudSBsaXN0cywgYXMgYXJndW1lbnRzIHRvCi1mdW5jdGlvbnMgYXJlIGxpc3RlZC4KLQotU2VlIHRoZSB2YXJpYWJsZSBgcHktaW1lbnUtc2hvdy1tZXRob2QtYXJncy1wJyBmb3IgbW9yZQotaW5mb3JtYXRpb24uIikKLQotOzsgTm90ZSB0aGF0IGluIHRoaXMgZm9ybWF0LCB0aGlzIHZhcmlhYmxlIGNhbiBzdGlsbCBiZSB1c2VkIHdpdGggdGhlCi07OyBpbWVudS0tZ2VuZXJpYy1mdW5jdGlvbi4gT3RoZXJ3aXNlLCB0aGVyZSBpcyBubyByZWFsIHJlYXNvbiB0byBoYXZlCi07OyBpdC4KLShkZWZ2YXIgcHktaW1lbnUtZ2VuZXJpYy1leHByZXNzaW9uCi0gIChjb25zCi0gICAoY29uY2F0Ci0gICAgcHktaW1lbnUtY2xhc3MtcmVnZXhwCi0gICAgIlxcfCIJCQkJOyBvci4uLgotICAgIHB5LWltZW51LW1ldGhvZC1yZWdleHAKLSAgICApCi0gICBweS1pbWVudS1tZXRob2Qtbm8tYXJnLXBhcmVucykKLSAgIkdlbmVyaWMgUHl0aG9uIGV4cHJlc3Npb24gd2hpY2ggbWF5IGJlIHVzZWQgZGlyZWN0bHkgd2l0aCBJbWVudS4KLVVzZWQgYnkgc2V0dGluZyB0aGUgdmFyaWFibGUgYGltZW51LWdlbmVyaWMtZXhwcmVzc2lvbicgdG8gdGhpcyB2YWx1ZS4KLUFsc28sIHNlZSB0aGUgZnVuY3Rpb24gXFxbcHktaW1lbnUtY3JlYXRlLWluZGV4XSBmb3IgYSBiZXR0ZXIKLWFsdGVybmF0aXZlIGZvciBmaW5kaW5nIHRoZSBpbmRleC4iKQotCi07OyBUaGVzZSBuZXh0IHR3byB2YXJpYWJsZXMgYXJlIHVzZWQgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBQeXRob24KLTs7IGNsYXNzL2RlZmluaXRpb25zLiBKdXN0IHNhdmluZyBzb21lIHRpbWUgaW4gYWNjZXNzaW5nIHRoZQotOzsgZ2VuZXJpYy1weXRob24tZXhwcmVzc2lvbiwgcmVhbGx5LgotKGRlZnZhciBweS1pbWVudS1nZW5lcmljLXJlZ2V4cCBuaWwpCi0oZGVmdmFyIHB5LWltZW51LWdlbmVyaWMtcGFyZW5zIG5pbCkKLQotCi0oZGVmdW4gcHktaW1lbnUtY3JlYXRlLWluZGV4LWZ1bmN0aW9uICgpCi0gICJQeXRob24gaW50ZXJmYWNlIGZ1bmN0aW9uIGZvciB0aGUgSW1lbnUgcGFja2FnZS4KLUZpbmRzIGFsbCBQeXRob24gY2xhc3NlcyBhbmQgZnVuY3Rpb25zL21ldGhvZHMuIENhbGxzIGZ1bmN0aW9uCi1cXFtweS1pbWVudS1jcmVhdGUtaW5kZXgtZW5naW5lXS4gIFNlZSB0aGF0IGZ1bmN0aW9uIGZvciB0aGUgZGV0YWlscwotb2YgaG93IHRoaXMgd29ya3MuIgotICAoc2V0cSBweS1pbWVudS1nZW5lcmljLXJlZ2V4cCAoY2FyIHB5LWltZW51LWdlbmVyaWMtZXhwcmVzc2lvbikKLQlweS1pbWVudS1nZW5lcmljLXBhcmVucyAoaWYgcHktaW1lbnUtc2hvdy1tZXRob2QtYXJncy1wCi0JCQkJICAgIHB5LWltZW51LW1ldGhvZC1hcmctcGFyZW5zCi0JCQkJICBweS1pbWVudS1tZXRob2Qtbm8tYXJnLXBhcmVucykpCi0gIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCi0gIDs7IFdhcm5pbmc6IFdoZW4gdGhlIGJ1ZmZlciBoYXMgbm8gY2xhc3NlcyBvciBmdW5jdGlvbnMsIHRoaXMgd2lsbAotICA7OyByZXR1cm4gbmlsLCB3aGljaCBzZWVtcyBwcm9wZXIgYWNjb3JkaW5nIHRvIHRoZSBJbWVudSBBUEksIGJ1dAotICA7OyBjYXVzZXMgYW4gZXJyb3IgaW4gdGhlIFhFbWFjcyBwb3J0IG9mIEltZW51LiAgU2lnaC4KLSAgKHB5LWltZW51LWNyZWF0ZS1pbmRleC1lbmdpbmUgbmlsKSkKLQotKGRlZnVuIHB5LWltZW51LWNyZWF0ZS1pbmRleC1lbmdpbmUgKCZvcHRpb25hbCBzdGFydC1pbmRlbnQpCi0gICJGdW5jdGlvbiBmb3IgZmluZGluZyBJbWVudSBkZWZpbml0aW9ucyBpbiBQeXRob24uCi0KLUZpbmRzIGFsbCBkZWZpbml0aW9ucyAoY2xhc3NlcywgbWV0aG9kcywgb3IgZnVuY3Rpb25zKSBpbiBhIFB5dGhvbgotZmlsZSBmb3IgdGhlIEltZW51IHBhY2thZ2UuCi0KLVJldHVybnMgYSBwb3NzaWJseSBuZXN0ZWQgYWxpc3Qgb2YgdGhlIGZvcm0KLQotCShJTkRFWC1OQU1FIC4gSU5ERVgtUE9TSVRJT04pCi0KLVRoZSBzZWNvbmQgZWxlbWVudCBvZiB0aGUgYWxpc3QgbWF5IGJlIGFuIGFsaXN0LCBwcm9kdWNpbmcgYSBuZXN0ZWQKLWxpc3QgYXMgaW4KLQotCShJTkRFWC1OQU1FIC4gSU5ERVgtQUxJU1QpCi0KLVRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHksIGFzIGl0IGNhbGxzIGl0c2VsZgotcmVjdXJzaXZlbHkgYW5kIHJlcXVpcmVzIHNvbWUgc2V0dXAuICBSYXRoZXIgdGhpcyBpcyB0aGUgZW5naW5lIGZvcgotdGhlIGZ1bmN0aW9uIFxcW3B5LWltZW51LWNyZWF0ZS1pbmRleC1mdW5jdGlvbl0uCi0KLUl0IHdvcmtzIHJlY3Vyc2l2ZWx5IGJ5IGxvb2tpbmcgZm9yIGFsbCBkZWZpbml0aW9ucyBhdCB0aGUgY3VycmVudAotaW5kZW50aW9uIGxldmVsLiAgV2hlbiBpdCBmaW5kcyBvbmUsIGl0IGFkZHMgaXQgdG8gdGhlIGFsaXN0LiAgSWYgaXQKLWZpbmRzIGEgZGVmaW5pdGlvbiBhdCBhIGdyZWF0ZXIgaW5kZW50YXRpb24gbGV2ZWwsIGl0IHJlbW92ZXMgdGhlCi1wcmV2aW91cyBkZWZpbml0aW9uIGZyb20gdGhlIGFsaXN0LiBJbiBpdHMgcGxhY2UgaXQgYWRkcyBhbGwKLWRlZmluaXRpb25zIGZvdW5kIGF0IHRoZSBuZXh0IGluZGVudGF0aW9uIGxldmVsLiAgV2hlbiBpdCBmaW5kcyBhCi1kZWZpbml0aW9uIHRoYXQgaXMgbGVzcyBpbmRlbnRlZCB0aGVuIHRoZSBjdXJyZW50IGxldmVsLCBpdCByZXR1cm5zCi10aGUgYWxpc3QgaXQgaGFzIGNyZWF0ZWQgdGh1cyBmYXIuCi0KLVRoZSBvcHRpb25hbCBhcmd1bWVudCBTVEFSVC1JTkRFTlQgaW5kaWNhdGVzIHRoZSBzdGFydGluZyBpbmRlbnRhdGlvbgotYXQgd2hpY2ggdG8gY29udGludWUgbG9va2luZyBmb3IgUHl0aG9uIGNsYXNzZXMsIG1ldGhvZHMsIG9yCi1mdW5jdGlvbnMuICBJZiB0aGlzIGlzIG5vdCBzdXBwbGllZCwgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGluZGVudGF0aW9uCi1vZiB0aGUgZmlyc3QgZGVmaW5pdGlvbiBmb3VuZC4iCi0gIChsZXQgKGluZGV4LWFsaXN0Ci0Jc3ViLW1ldGhvZC1hbGlzdAotCWxvb2tpbmctcAotCWRlZi1uYW1lIHByZXYtbmFtZQotCWN1ci1pbmRlbnQgZGVmLXBvcwotCShjbGFzcy1wYXJlbiAoZmlyc3QgIHB5LWltZW51LWdlbmVyaWMtcGFyZW5zKSkKLQkoZGVmLXBhcmVuICAgKHNlY29uZCBweS1pbWVudS1nZW5lcmljLXBhcmVucykpKQotICAgIChzZXRxIGxvb2tpbmctcAotCSAgKHJlLXNlYXJjaC1mb3J3YXJkIHB5LWltZW51LWdlbmVyaWMtcmVnZXhwIChwb2ludC1tYXgpIHQpKQotICAgICh3aGlsZSBsb29raW5nLXAKLSAgICAgIChzYXZlLWV4Y3Vyc2lvbgotCTs7IHVzZWQgdG8gc2V0IGRlZi1uYW1lIHRvIHRoaXMgdmFsdWUgYnV0IGdlbmVyaWMtZXh0cmFjdC1uYW1lCi0JOzsgaXMgbmV3IHRvIGltZW51LTEuMTQuIHRoaXMgd2F5IGl0IHN0aWxsIHdvcmtzIHdpdGgKLQk7OyBpbWVudS0xLjExCi0JOzsoaW1lbnUtLWdlbmVyaWMtZXh0cmFjdC1uYW1lIHB5LWltZW51LWdlbmVyaWMtcGFyZW5zKSkKLQkobGV0ICgoY3VyLXBhcmVuIChpZiAobWF0Y2gtYmVnaW5uaW5nIGNsYXNzLXBhcmVuKQotCQkJICAgICBjbGFzcy1wYXJlbiBkZWYtcGFyZW4pKSkKLQkgIChzZXRxIGRlZi1uYW1lCi0JCShidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKG1hdGNoLWJlZ2lubmluZyBjdXItcGFyZW4pCi0JCQkJCQkobWF0Y2gtZW5kIGN1ci1wYXJlbikpKSkKLQkoc2F2ZS1tYXRjaC1kYXRhCi0JICAocHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzcyAnZWl0aGVyKSkKLQkoYmVnaW5uaW5nLW9mLWxpbmUpCi0JKHNldHEgY3VyLWluZGVudCAoY3VycmVudC1pbmRlbnRhdGlvbikpKQotICAgICAgOzsgSEFDSzogd2FudCB0byBnbyB0byB0aGUgbmV4dCBjb3JyZWN0IGRlZmluaXRpb24gbG9jYXRpb24uICBXZQotICAgICAgOzsgZXhwbGljaXRseSBsaXN0IHRoZW0gaGVyZSBidXQgaXQgd291bGQgYmUgYmV0dGVyIHRvIGhhdmUgdGhlbQotICAgICAgOzsgaW4gYSBsaXN0LgotICAgICAgKHNldHEgZGVmLXBvcwotCSAgICAob3IgKG1hdGNoLWJlZ2lubmluZyBjbGFzcy1wYXJlbikKLQkJKG1hdGNoLWJlZ2lubmluZyBkZWYtcGFyZW4pKSkKLSAgICAgIDs7IGlmIHdlIGRvbid0IGhhdmUgYSBzdGFydGluZyBpbmRlbnQgbGV2ZWwsIHRha2UgdGhpcyBvbmUKLSAgICAgIChvciBzdGFydC1pbmRlbnQKLQkgIChzZXRxIHN0YXJ0LWluZGVudCBjdXItaW5kZW50KSkKLSAgICAgIDs7IGlmIHdlIGRvbid0IGhhdmUgY2xhc3MgbmFtZSB5ZXQsIHRha2UgdGhpcyBvbmUKLSAgICAgIChvciBwcmV2LW5hbWUKLQkgIChzZXRxIHByZXYtbmFtZSBkZWYtbmFtZSkpCi0gICAgICA7OyB3aGF0IGxldmVsIGlzIHRoZSBuZXh0IGRlZmluaXRpb24gb24/ICBtdXN0IGJlIHNhbWUsIGRlZXBlcgotICAgICAgOzsgb3Igc2hhbGxvd2VyIGluZGVudGF0aW9uCi0gICAgICAoY29uZAotICAgICAgIDs7IFNraXAgY29kZSBpbiBjb21tZW50cyBhbmQgc3RyaW5ncwotICAgICAgICgocHktaW4tbGl0ZXJhbCkpCi0gICAgICAgOzsgYXQgdGhlIHNhbWUgaW5kZW50IGxldmVsLCBhZGQgaXQgdG8gdGhlIGxpc3QuLi4KLSAgICAgICAoKD0gc3RhcnQtaW5kZW50IGN1ci1pbmRlbnQpCi0JKHB1c2ggKGNvbnMgZGVmLW5hbWUgZGVmLXBvcykgaW5kZXgtYWxpc3QpKQotICAgICAgIDs7IGRlZXBlciBpbmRlbnRlZCBleHByZXNzaW9uLCByZWN1cnNlCi0gICAgICAgKCg8IHN0YXJ0LWluZGVudCBjdXItaW5kZW50KQotCTs7IHRoZSBwb2ludCBpcyBjdXJyZW50bHkgb24gdGhlIGV4cHJlc3Npb24gd2UncmUgc3VwcG9zZWQgdG8KLQk7OyBzdGFydCBvbiwgc28gZ28gYmFjayB0byB0aGUgbGFzdCBleHByZXNzaW9uLiBUaGUgcmVjdXJzaXZlCi0JOzsgY2FsbCB3aWxsIGZpbmQgdGhpcyBwbGFjZSBhZ2FpbiBhbmQgYWRkIGl0IHRvIHRoZSBjb3JyZWN0Ci0JOzsgbGlzdAotCShyZS1zZWFyY2gtYmFja3dhcmQgcHktaW1lbnUtZ2VuZXJpYy1yZWdleHAgKHBvaW50LW1pbikgJ21vdmUpCi0JKHNldHEgc3ViLW1ldGhvZC1hbGlzdCAocHktaW1lbnUtY3JlYXRlLWluZGV4LWVuZ2luZSBjdXItaW5kZW50KSkKLQkoaWYgc3ViLW1ldGhvZC1hbGlzdAotCSAgICA7OyB3ZSBwdXQgdGhlIGxhc3QgZWxlbWVudCBvbiB0aGUgaW5kZXgtYWxpc3Qgb24gdGhlIHN0YXJ0Ci0JICAgIDs7IG9mIHRoZSBzdWJtZXRob2QgYWxpc3Qgc28gdGhlIHVzZXIgY2FuIHN0aWxsIGdldCB0byBpdC4KLQkgICAgKGxldCAoKHNhdmUtZWxtdCAocG9wIGluZGV4LWFsaXN0KSkpCi0JICAgICAgKHB1c2ggKGNvbnMgcHJldi1uYW1lCi0JCQkgIChjb25zIHNhdmUtZWxtdCBzdWItbWV0aG9kLWFsaXN0KSkKLQkJICAgIGluZGV4LWFsaXN0KSkpKQotICAgICAgIDs7IGZvdW5kIGxlc3MgaW5kZW50ZWQgZXhwcmVzc2lvbiwgd2UncmUgZG9uZS4KLSAgICAgICAodAotCShzZXRxIGxvb2tpbmctcCBuaWwpCi0JKHJlLXNlYXJjaC1iYWNrd2FyZCBweS1pbWVudS1nZW5lcmljLXJlZ2V4cCAocG9pbnQtbWluKSB0KSkpCi0gICAgICA7OyBlbmQtY29uZAotICAgICAgKHNldHEgcHJldi1uYW1lIGRlZi1uYW1lKQotICAgICAgKGFuZCBsb29raW5nLXAKLQkgICAoc2V0cSBsb29raW5nLXAKLQkJIChyZS1zZWFyY2gtZm9yd2FyZCBweS1pbWVudS1nZW5lcmljLXJlZ2V4cAotCQkJCSAgICAocG9pbnQtbWF4KSAnbW92ZSkpKSkKLSAgICAobnJldmVyc2UgaW5kZXgtYWxpc3QpKSkKLQotCi0MCi0oZGVmdW4gcHktY2hvb3NlLXNoZWxsLWJ5LXNoZWJhbmcgKCkKLSAgIkNob29zZSBDUHl0aG9uIG9yIEp5dGhvbiBtb2RlIGJ5IGxvb2tpbmcgYXQgIyEgb24gdGhlIGZpcnN0IGxpbmUuCi1SZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBtb2RlIGZ1bmN0aW9uLgotVXNlZCBieSBgcHktY2hvb3NlLXNoZWxsJywgYW5kIHNpbWlsYXIgdG8gYnV0IGRpc3RpbmN0IGZyb20KLWBzZXQtYXV0by1tb2RlJywgdGhvdWdoIGl0IHVzZXMgYGF1dG8tbW9kZS1pbnRlcnByZXRlci1yZWdleHAnIChpZiBhdmFpbGFibGUpLiIKLSAgOzsgbG9vayBmb3IgYW4gaW50ZXJwcmV0ZXIgc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBsaW5lCi0gIDs7IHNpbWlsYXIgdG8gc2V0LWF1dG8tbW9kZSAoZmlsZXMuZWwpCi0gIChsZXQqICgocmUgKGlmIChib3VuZHAgJ2F1dG8tbW9kZS1pbnRlcnByZXRlci1yZWdleHApCi0JCSBhdXRvLW1vZGUtaW50ZXJwcmV0ZXItcmVnZXhwCi0JICAgICAgIDs7IHN0b2xlbiBmcm9tIEVtYWNzIDIxLjIKLQkgICAgICAgIiMhWyBcdF0/XFwoW14gXHRcbl0qL2Jpbi9lbnZbIFx0XVxcKT9cXChbXiBcdFxuXStcXCkiKSkKLQkgKGludGVycHJldGVyIChzYXZlLWV4Y3Vyc2lvbgotCQkJKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLQkJCShpZiAobG9va2luZy1hdCByZSkKLQkJCSAgICAobWF0Y2gtc3RyaW5nIDIpCi0JCQkgICIiKSkpCi0JIGVsdCkKLSAgICA7OyBNYXAgaW50ZXJwcmV0ZXIgbmFtZSB0byBhIG1vZGUuCi0gICAgKHNldHEgZWx0IChhc3NvYyAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBpbnRlcnByZXRlcikKLQkJICAgICBweS1zaGVsbC1hbGlzdCkpCi0gICAgKGFuZCBlbHQgKGNhZGRyIGVsdCkpKSkKLQotCi0MCi0oZGVmdW4gcHktY2hvb3NlLXNoZWxsLWJ5LWltcG9ydCAoKQotICAiQ2hvb3NlIENQeXRob24gb3IgSnl0aG9uIG1vZGUgYmFzZWQgaW1wb3J0cy4KLUlmIGEgZmlsZSBpbXBvcnRzIGFueSBwYWNrYWdlcyBpbiBgcHktanl0aG9uLXBhY2thZ2VzJywgd2l0aGluCi1gcHktaW1wb3J0LWNoZWNrLXBvaW50LW1heCcgY2hhcmFjdGVycyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlsZSwKLXJldHVybiBganl0aG9uJywgb3RoZXJ3aXNlIHJldHVybiBuaWwuIgotICAobGV0IChtb2RlKQotICAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLSAgICAgICh3aGlsZSAoYW5kIChub3QgbW9kZSkKLQkJICAoc2VhcmNoLWZvcndhcmQtcmVnZXhwCi0JCSAgICJeXFwoXFwoZnJvbVxcKVxcfFxcKGltcG9ydFxcKVxcKSBcXChbXiBcdFxuLl0rXFwpIgotCQkgICBweS1pbXBvcnQtY2hlY2stcG9pbnQtbWF4IHQpKQotCShzZXRxIG1vZGUgKGFuZCAobWVtYmVyIChtYXRjaC1zdHJpbmcgNCkgcHktanl0aG9uLXBhY2thZ2VzKQotCQkJJ2p5dGhvbgotCQkJKSkpKQotICAgIG1vZGUpKQotCi0MCi0oZGVmdW4gcHktY2hvb3NlLXNoZWxsICgpCi0gICJDaG9vc2UgQ1B5dGhvbiBvciBKeXRob24gbW9kZS4gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgbW9kZSBmdW5jdGlvbi4KLVRoaXMgZG9lcyB0aGUgZm9sbG93aW5nOgotIC0gbG9vayBmb3IgYW4gaW50ZXJwcmV0ZXIgd2l0aCBgcHktY2hvb3NlLXNoZWxsLWJ5LXNoZWJhbmcnCi0gLSBleGFtaW5lIGltcG9ydHMgdXNpbmcgYHB5LWNob29zZS1zaGVsbC1ieS1pbXBvcnQnCi0gLSBkZWZhdWx0IHRvIHRoZSB2YXJpYWJsZSBgcHktZGVmYXVsdC1pbnRlcnByZXRlciciCi0gIChpbnRlcmFjdGl2ZSkKLSAgKG9yIChweS1jaG9vc2Utc2hlbGwtYnktc2hlYmFuZykKLSAgICAgIChweS1jaG9vc2Utc2hlbGwtYnktaW1wb3J0KQotICAgICAgcHktZGVmYXVsdC1pbnRlcnByZXRlcgotOyAgICAgICdjcHl0aG9uIDs7IGRvbid0IHVzZSB0byBweS1kZWZhdWx0LWludGVycHJldGVyLCBiZWNhdXNlIGRlZmF1bHQKLTsgICAgICAgICAgICAgICA7OyBpcyBvbmx5IHdheSB0byBjaG9vc2UgQ1B5dGhvbgotICAgICAgKSkKLQotDAotOzs7IyMjYXV0b2xvYWQKLShkZWZ1biBweXRob24tbW9kZSAoKQotICAiTWFqb3IgbW9kZSBmb3IgZWRpdGluZyBQeXRob24gZmlsZXMuCi1UbyBzdWJtaXQgYSBwcm9ibGVtIHJlcG9ydCwgZW50ZXIgYFxcW3B5LXN1Ym1pdC1idWctcmVwb3J0XScgZnJvbSBhCi1gcHl0aG9uLW1vZGUnIGJ1ZmZlci4gIERvIGBcXFtweS1kZXNjcmliZS1tb2RlXScgZm9yIGRldGFpbGVkCi1kb2N1bWVudGF0aW9uLiAgVG8gc2VlIHdoYXQgdmVyc2lvbiBvZiBgcHl0aG9uLW1vZGUnIHlvdSBhcmUgcnVubmluZywKLWVudGVyIGBcXFtweS12ZXJzaW9uXScuCi0KLVRoaXMgbW9kZSBrbm93cyBhYm91dCBQeXRob24gaW5kZW50YXRpb24sIHRva2VucywgY29tbWVudHMgYW5kCi1jb250aW51YXRpb24gbGluZXMuICBQYXJhZ3JhcGhzIGFyZSBzZXBhcmF0ZWQgYnkgYmxhbmsgbGluZXMgb25seS4KLQotQ09NTUFORFMKLVxce3B5LW1vZGUtbWFwfQotVkFSSUFCTEVTCi0KLXB5LWluZGVudC1vZmZzZXRcdFx0aW5kZW50YXRpb24gaW5jcmVtZW50Ci1weS1ibG9jay1jb21tZW50LXByZWZpeFx0XHRjb21tZW50IHN0cmluZyB1c2VkIGJ5IGBjb21tZW50LXJlZ2lvbicKLXB5LXB5dGhvbi1jb21tYW5kXHRcdHNoZWxsIGNvbW1hbmQgdG8gaW52b2tlIFB5dGhvbiBpbnRlcnByZXRlcgotcHktdGVtcC1kaXJlY3RvcnlcdFx0ZGlyZWN0b3J5IHVzZWQgZm9yIHRlbXAgZmlsZXMgKGlmIG5lZWRlZCkKLXB5LWJlZXAtaWYtdGFiLWNoYW5nZVx0XHRyaW5nIHRoZSBiZWxsIGlmIGB0YWItd2lkdGgnIGlzIGNoYW5nZWQiCi0gIChpbnRlcmFjdGl2ZSkKLSAgOzsgc2V0IHVwIGxvY2FsIHZhcmlhYmxlcwotICAoa2lsbC1hbGwtbG9jYWwtdmFyaWFibGVzKQotICAobWFrZS1sb2NhbC12YXJpYWJsZSAnZm9udC1sb2NrLWRlZmF1bHRzKQotICAobWFrZS1sb2NhbC12YXJpYWJsZSAncGFyYWdyYXBoLXNlcGFyYXRlKQotICAobWFrZS1sb2NhbC12YXJpYWJsZSAncGFyYWdyYXBoLXN0YXJ0KQotICAobWFrZS1sb2NhbC12YXJpYWJsZSAncmVxdWlyZS1maW5hbC1uZXdsaW5lKQotICAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1zdGFydCkKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbW1lbnQtZW5kKQotICAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1zdGFydC1za2lwKQotICAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1jb2x1bW4pCi0gIChtYWtlLWxvY2FsLXZhcmlhYmxlICdjb21tZW50LWluZGVudC1mdW5jdGlvbikKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2luZGVudC1yZWdpb24tZnVuY3Rpb24pCi0gIChtYWtlLWxvY2FsLXZhcmlhYmxlICdpbmRlbnQtbGluZS1mdW5jdGlvbikKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2FkZC1sb2ctY3VycmVudC1kZWZ1bi1mdW5jdGlvbikKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZpbGwtcGFyYWdyYXBoLWZ1bmN0aW9uKQotICA7OwotICAoc2V0LXN5bnRheC10YWJsZSBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKHNldHEgbWFqb3ItbW9kZSAgICAgICAgICAgICAgJ3B5dGhvbi1tb2RlCi0JbW9kZS1uYW1lICAgICAgICAgICAgICAgIlB5dGhvbiIKLQlsb2NhbC1hYmJyZXYtdGFibGUgICAgICBweXRob24tbW9kZS1hYmJyZXYtdGFibGUKLQlmb250LWxvY2stZGVmYXVsdHMgICAgICAnKHB5dGhvbi1mb250LWxvY2sta2V5d29yZHMpCi0JcGFyYWdyYXBoLXNlcGFyYXRlICAgICAgIl5bIFx0XSokIgotCXBhcmFncmFwaC1zdGFydCAgICAgICAgICJeWyBcdF0qJCIKLQlyZXF1aXJlLWZpbmFsLW5ld2xpbmUgICB0Ci0JY29tbWVudC1zdGFydCAgICAgICAgICAgIiMgIgotCWNvbW1lbnQtZW5kICAgICAgICAgICAgICIiCi0JY29tbWVudC1zdGFydC1za2lwICAgICAgIiMgKiIKLQljb21tZW50LWNvbHVtbiAgICAgICAgICA0MAotCWNvbW1lbnQtaW5kZW50LWZ1bmN0aW9uICdweS1jb21tZW50LWluZGVudC1mdW5jdGlvbgotCWluZGVudC1yZWdpb24tZnVuY3Rpb24gICdweS1pbmRlbnQtcmVnaW9uCi0JaW5kZW50LWxpbmUtZnVuY3Rpb24gICAgJ3B5LWluZGVudC1saW5lCi0JOzsgdGVsbCBhZGQtbG9nLmVsIGhvdyB0byBmaW5kIHRoZSBjdXJyZW50IGZ1bmN0aW9uL21ldGhvZC92YXJpYWJsZQotCWFkZC1sb2ctY3VycmVudC1kZWZ1bi1mdW5jdGlvbiAncHktY3VycmVudC1kZWZ1bgotCi0JZmlsbC1wYXJhZ3JhcGgtZnVuY3Rpb24gJ3B5LWZpbGwtcGFyYWdyYXBoCi0JKQotICAodXNlLWxvY2FsLW1hcCBweS1tb2RlLW1hcCkKLSAgOzsgYWRkIHRoZSBtZW51Ci0gIChpZiBweS1tZW51Ci0gICAgICAoZWFzeS1tZW51LWFkZCBweS1tZW51KSkKLSAgOzsgRW1hY3MgMTkgcmVxdWlyZXMgdGhpcwotICAoaWYgKGJvdW5kcCAnY29tbWVudC1tdWx0aS1saW5lKQotICAgICAgKHNldHEgY29tbWVudC1tdWx0aS1saW5lIG5pbCkpCi0gIDs7IEluc3RhbGwgSW1lbnUgaWYgYXZhaWxhYmxlCi0gICh3aGVuIChweS1zYWZlIChyZXF1aXJlICdpbWVudSkpCi0gICAgKHNldHEgaW1lbnUtY3JlYXRlLWluZGV4LWZ1bmN0aW9uICMncHktaW1lbnUtY3JlYXRlLWluZGV4LWZ1bmN0aW9uKQotICAgIChzZXRxIGltZW51LWdlbmVyaWMtZXhwcmVzc2lvbiBweS1pbWVudS1nZW5lcmljLWV4cHJlc3Npb24pCi0gICAgKGlmIChmYm91bmRwICdpbWVudS1hZGQtdG8tbWVudWJhcikKLQkoaW1lbnUtYWRkLXRvLW1lbnViYXIgKGZvcm1hdCAiJXMtJXMiICJJTSIgbW9kZS1uYW1lKSkpCi0gICAgKQotICA7OyBSdW4gdGhlIG1vZGUgaG9vay4gIE5vdGUgdGhhdCBweS1tb2RlLWhvb2sgaXMgZGVwcmVjYXRlZC4KLSAgKGlmIHB5dGhvbi1tb2RlLWhvb2sKLSAgICAgIChydW4taG9va3MgJ3B5dGhvbi1tb2RlLWhvb2spCi0gICAgKHJ1bi1ob29rcyAncHktbW9kZS1ob29rKSkKLSAgOzsgTm93IGRvIHRoZSBhdXRvbWFnaWNhbCBndWVzc2luZwotICAoaWYgcHktc21hcnQtaW5kZW50YXRpb24KLSAgICAobGV0ICgob2Zmc2V0IHB5LWluZGVudC1vZmZzZXQpKQotICAgICAgOzsgSXQncyBva2F5IGlmIHRoaXMgZmFpbHMgdG8gZ3Vlc3MgYSBnb29kIHZhbHVlCi0gICAgICAoaWYgKGFuZCAocHktc2FmZSAocHktZ3Vlc3MtaW5kZW50LW9mZnNldCkpCi0JICAgICAgICg8PSBweS1pbmRlbnQtb2Zmc2V0IDgpCi0JICAgICAgICg+PSBweS1pbmRlbnQtb2Zmc2V0IDIpKQotCSAgKHNldHEgb2Zmc2V0IHB5LWluZGVudC1vZmZzZXQpKQotICAgICAgKHNldHEgcHktaW5kZW50LW9mZnNldCBvZmZzZXQpCi0gICAgICA7OyBPbmx5IHR1cm4gaW5kZW50LXRhYnMtbW9kZSBvZmYgaWYgdGFiLXdpZHRoICE9Ci0gICAgICA7OyBweS1pbmRlbnQtb2Zmc2V0LiAgTmV2ZXIgdHVybiBpdCBvbiwgYmVjYXVzZSB0aGUgdXNlciBtdXN0Ci0gICAgICA7OyBoYXZlIGV4cGxpY2l0bHkgdHVybmVkIGl0IG9mZi4KLSAgICAgIChpZiAoLz0gdGFiLXdpZHRoIHB5LWluZGVudC1vZmZzZXQpCi0JICAoc2V0cSBpbmRlbnQtdGFicy1tb2RlIG5pbCkpCi0gICAgICApKQotICA7OyBTZXQgdGhlIGRlZmF1bHQgc2hlbGwgaWYgbm90IGFscmVhZHkgc2V0Ci0gICh3aGVuIChudWxsIHB5LXdoaWNoLXNoZWxsKQotICAgIChweS10b2dnbGUtc2hlbGxzIChweS1jaG9vc2Utc2hlbGwpKSkpCi0KLQotKG1ha2Utb2Jzb2xldGUgJ2pweXRob24tbW9kZSAnanl0aG9uLW1vZGUpCi0oZGVmdW4ganl0aG9uLW1vZGUgKCkKLSAgIk1ham9yIG1vZGUgZm9yIGVkaXRpbmcgSnl0aG9uL0p5dGhvbiBmaWxlcy4KLVRoaXMgaXMgYSBzaW1wbGUgd3JhcHBlciBhcm91bmQgYHB5dGhvbi1tb2RlJy4KLUl0IHJ1bnMgYGp5dGhvbi1tb2RlLWhvb2snIHRoZW4gY2FsbHMgYHB5dGhvbi1tb2RlLicKLUl0IGlzIGFkZGVkIHRvIGBpbnRlcnByZXRlci1tb2RlLWFsaXN0JyBhbmQgYHB5LWNob29zZS1zaGVsbCcuCi0iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKHB5dGhvbi1tb2RlKQotICAocHktdG9nZ2xlLXNoZWxscyAnanl0aG9uKQotICAod2hlbiBqeXRob24tbW9kZS1ob29rCi0gICAgICAocnVuLWhvb2tzICdqeXRob24tbW9kZS1ob29rKSkpCi0KLQotOzsgSXQncyBoYW5keSB0byBhZGQgcmVjb2duaXRpb24gb2YgUHl0aG9uIGZpbGVzIHRvIHRoZQotOzsgaW50ZXJwcmV0ZXItbW9kZS1hbGlzdCBhbmQgdG8gYXV0by1tb2RlLWFsaXN0LiAgV2l0aCB0aGUgZm9ybWVyLCB3ZQotOzsgY2FuIHNwZWNpZnkgZGlmZmVyZW50IGBkZXJpdmVkLW1vZGVzJyBiYXNlZCBvbiB0aGUgIyEgbGluZSwgYnV0Ci07OyB3aXRoIHRoZSBsYXR0ZXIsIHdlIGNhbid0LiAgU28gd2UganVzdCB3b24ndCBhZGQgdGhlbSBpZiB0aGV5J3JlCi07OyBhbHJlYWR5IGFkZGVkLgotOzs7IyMjYXV0b2xvYWQKLShsZXQgKChtb2RlcyAnKCgianl0aG9uIiAuIGp5dGhvbi1tb2RlKQotCSAgICAgICAoInB5dGhvbiIgLiBweXRob24tbW9kZSkpKSkKLSAgKHdoaWxlIG1vZGVzCi0gICAgKHdoZW4gKG5vdCAoYXNzb2MgKGNhciBtb2RlcykgaW50ZXJwcmV0ZXItbW9kZS1hbGlzdCkpCi0gICAgICAocHVzaCAoY2FyIG1vZGVzKSBpbnRlcnByZXRlci1tb2RlLWFsaXN0KSkKLSAgICAoc2V0cSBtb2RlcyAoY2RyIG1vZGVzKSkpKQotOzs7IyMjYXV0b2xvYWQKLSh3aGVuIChub3QgKG9yIChyYXNzcSAncHl0aG9uLW1vZGUgYXV0by1tb2RlLWFsaXN0KQotCSAgICAgICAocmFzc3EgJ2p5dGhvbi1tb2RlIGF1dG8tbW9kZS1hbGlzdCkpKQotICAocHVzaCAnKCJcXC5weSQiIC4gcHl0aG9uLW1vZGUpIGF1dG8tbW9kZS1hbGlzdCkpCi0KLQotDAotOzsgZWxlY3RyaWMgY2hhcmFjdGVycwotKGRlZnVuIHB5LW91dGRlbnQtcCAoKQotICAiUmV0dXJucyBub24tbmlsIGlmIHRoZSBjdXJyZW50IGxpbmUgc2hvdWxkIGRlZGVudCBvbmUgbGV2ZWwuIgotICAoc2F2ZS1leGN1cnNpb24KLSAgICAoYW5kIChwcm9nbiAoYmFjay10by1pbmRlbnRhdGlvbikKLQkJKGxvb2tpbmctYXQgcHktb3V0ZGVudC1yZSkpCi0JIDs7IHNob3J0IGNpcmN1aXQgaW5mbG9vcCBvbiBpbGxlZ2FsIGNvbnN0cnVjdAotCSAobm90IChib2JwKSkKLQkgKHByb2duIChmb3J3YXJkLWxpbmUgLTEpCi0JCShweS1nb3RvLWluaXRpYWwtbGluZSkKLQkJKGJhY2stdG8taW5kZW50YXRpb24pCi0JCSh3aGlsZSAob3IgKGxvb2tpbmctYXQgcHktYmxhbmstb3ItY29tbWVudC1yZSkKLQkJCSAgIChib2JwKSkKLQkJICAoYmFja3dhcmQtdG8taW5kZW50YXRpb24gMSkpCi0JCShub3QgKGxvb2tpbmctYXQgcHktbm8tb3V0ZGVudC1yZSkpKQotCSApKSkKLQotKGRlZnVuIHB5LWVsZWN0cmljLWNvbG9uIChhcmcpCi0gICJJbnNlcnQgYSBjb2xvbi4KLUluIGNlcnRhaW4gY2FzZXMgdGhlIGxpbmUgaXMgZGVkZW50ZWQgYXBwcm9wcmlhdGVseS4gIElmIGEgbnVtZXJpYwotYXJndW1lbnQgQVJHIGlzIHByb3ZpZGVkLCB0aGF0IG1hbnkgY29sb25zIGFyZSBpbnNlcnRlZAotbm9uLWVsZWN0cmljYWxseS4gIEVsZWN0cmljIGJlaGF2aW9yIGlzIGluaGliaXRlZCBpbnNpZGUgYSBzdHJpbmcgb3IKLWNvbW1lbnQuIgotICAoaW50ZXJhY3RpdmUgIipQIikKLSAgKHNlbGYtaW5zZXJ0LWNvbW1hbmQgKHByZWZpeC1udW1lcmljLXZhbHVlIGFyZykpCi0gIDs7IGFyZSB3ZSBpbiBhIHN0cmluZyBvciBjb21tZW50PwotICAoaWYgKHNhdmUtZXhjdXJzaW9uCi0JKGxldCAoKHBwcyAocGFyc2UtcGFydGlhbC1zZXhwIChzYXZlLWV4Y3Vyc2lvbgotCQkJCQkgKHB5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3MpCi0JCQkJCSAocG9pbnQpKQotCQkJCSAgICAgICAocG9pbnQpKSkpCi0JICAobm90IChvciAobnRoIDMgcHBzKSAobnRoIDQgcHBzKSkpKSkKLSAgICAgIChzYXZlLWV4Y3Vyc2lvbgotCShsZXQgKChoZXJlIChwb2ludCkpCi0JICAgICAgKG91dGRlbnQgMCkKLQkgICAgICAoaW5kZW50IChweS1jb21wdXRlLWluZGVudGF0aW9uIHQpKSkKLQkgIChpZiAoYW5kIChub3QgYXJnKQotCQkgICAocHktb3V0ZGVudC1wKQotCQkgICAoPSBpbmRlbnQgKHNhdmUtZXhjdXJzaW9uCi0JCQkgICAgICAgKHB5LW5leHQtc3RhdGVtZW50IC0xKQotCQkJICAgICAgIChweS1jb21wdXRlLWluZGVudGF0aW9uIHQpKSkKLQkJICAgKQotCSAgICAgIChzZXRxIG91dGRlbnQgcHktaW5kZW50LW9mZnNldCkpCi0JICA7OyBEb24ndCBpbmRlbnQsIG9ubHkgZGVkZW50LiAgVGhpcyBhc3N1bWVzIHRoYXQgYW55IGxpbmVzCi0JICA7OyB0aGF0IGFyZSBhbHJlYWR5IGRlZGVudGVkIHJlbGF0aXZlIHRvCi0JICA7OyBweS1jb21wdXRlLWluZGVudGF0aW9uIHdlcmUgcHV0IHRoZXJlIG9uIHB1cnBvc2UuICBJdCdzCi0JICA7OyBoaWdobHkgYW5ub3lpbmcgdG8gaGF2ZSBgOicgaW5kZW50IGZvciB5b3UuICBVc2UgVEFCLCBDLWMKLQkgIDs7IEMtbCBvciBDLWMgQy1yIHRvIGFkanVzdC4gIFRCRDogSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvCi0JICA7OyBkZXRlcm1pbmUgdGhpcz8/PwotCSAgKGlmICg8IChjdXJyZW50LWluZGVudGF0aW9uKSBpbmRlbnQpIG5pbAotCSAgICAoZ290by1jaGFyIGhlcmUpCi0JICAgIChiZWdpbm5pbmctb2YtbGluZSkKLQkgICAgKGRlbGV0ZS1ob3Jpem9udGFsLXNwYWNlKQotCSAgICAoaW5kZW50LXRvICgtIGluZGVudCBvdXRkZW50KSkKLQkgICAgKSkpKSkKLQotDAotOzsgUHl0aG9uIHN1YnByb2Nlc3MgdXRpbGl0aWVzIGFuZCBmaWx0ZXJzCi0oZGVmdW4gcHktZXhlY3V0ZS1maWxlIChwcm9jIGZpbGVuYW1lKQotICAiU2VuZCB0byBQeXRob24gaW50ZXJwcmV0ZXIgcHJvY2VzcyBQUk9DIFwiZXhlY2ZpbGUoJ0ZJTEVOQU1FJylcIi4KLU1ha2UgdGhhdCBwcm9jZXNzJ3MgYnVmZmVyIHZpc2libGUgYW5kIGZvcmNlIGRpc3BsYXkuICBBbHNvIG1ha2UKLWNvbWludCBiZWxpZXZlIHRoZSB1c2VyIHR5cGVkIHRoaXMgc3RyaW5nIHNvIHRoYXQKLWBraWxsLW91dHB1dC1mcm9tLXNoZWxsJyBkb2VzIFRoZSBSaWdodCBUaGluZy4iCi0gIChsZXQgKChjdXJidWYgKGN1cnJlbnQtYnVmZmVyKSkKLQkocHJvY2J1ZiAocHJvY2Vzcy1idWZmZXIgcHJvYykpCi07CShjb21pbnQtc2Nyb2xsLXRvLWJvdHRvbS1vbi1vdXRwdXQgdCkKLQkobXNnIChmb3JtYXQgIiMjIHdvcmtpbmcgb24gcmVnaW9uIGluIGZpbGUgJXMuLi5cbiIgZmlsZW5hbWUpKQotICAgICAgICA7OyBhZGQgc29tZSBjb21tZW50LCBzbyB0aGF0IHdlIGNhbiBmaWx0ZXIgaXQgb3V0IG9mIGhpc3RvcnkKLQkoY21kIChmb3JtYXQgImV4ZWNmaWxlKHInJXMnKSAjIFBZVEhPTi1NT0RFXG4iIGZpbGVuYW1lKSkpCi0gICAgKHVud2luZC1wcm90ZWN0Ci0JKHNhdmUtZXhjdXJzaW9uCi0JICAoc2V0LWJ1ZmZlciBwcm9jYnVmKQotCSAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkKLQkgIChtb3ZlLW1hcmtlciAocHJvY2Vzcy1tYXJrIHByb2MpIChwb2ludCkpCi0JICAoZnVuY2FsbCAocHJvY2Vzcy1maWx0ZXIgcHJvYykgcHJvYyBtc2cpKQotICAgICAgKHNldC1idWZmZXIgY3VyYnVmKSkKLSAgICAocHJvY2Vzcy1zZW5kLXN0cmluZyBwcm9jIGNtZCkpKQotCi0oZGVmdW4gcHktY29taW50LW91dHB1dC1maWx0ZXItZnVuY3Rpb24gKHN0cmluZykKLSAgIldhdGNoIG91dHB1dCBmb3IgUHl0aG9uIHByb21wdCBhbmQgZXhlYyBuZXh0IGZpbGUgd2FpdGluZyBpbiBxdWV1ZS4KLVRoaXMgZnVuY3Rpb24gaXMgYXBwcm9wcmlhdGUgZm9yIGBjb21pbnQtb3V0cHV0LWZpbHRlci1mdW5jdGlvbnMnLiIKLSAgOztyZW1vdmUgYW5zaSB0ZXJtaW5hbCBlc2NhcGUgc2VxdWVuY2VzIGZyb20gc3RyaW5nLCBub3Qgc3VyZSB3aHkgdGhleSBhcmUKLSAgOztzdGlsbCBhcm91bmQuLi4KLSAgKHNldHEgc3RyaW5nIChhbnNpLWNvbG9yLWZpbHRlci1hcHBseSBzdHJpbmcpKQotICAod2hlbiAoYW5kIChzdHJpbmctbWF0Y2ggcHktc2hlbGwtaW5wdXQtcHJvbXB0LTEtcmVnZXhwIHN0cmluZykKLSAgICAgICAgICAgICAgICAgICBweS1maWxlLXF1ZXVlKQotICAgIChpZiBweS1zaGVsbC1zd2l0Y2gtYnVmZmVycy1vbi1leGVjdXRlCi0gICAgICAocG9wLXRvLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKSkKLSAgICAocHktc2FmZSAoZGVsZXRlLWZpbGUgKGNhciBweS1maWxlLXF1ZXVlKSkpCi0gICAgKHNldHEgcHktZmlsZS1xdWV1ZSAoY2RyIHB5LWZpbGUtcXVldWUpKQotICAgIChpZiBweS1maWxlLXF1ZXVlCi0JKGxldCAoKHB5cHJvYyAoZ2V0LWJ1ZmZlci1wcm9jZXNzIChjdXJyZW50LWJ1ZmZlcikpKSkKLQkgIChweS1leGVjdXRlLWZpbGUgcHlwcm9jIChjYXIgcHktZmlsZS1xdWV1ZSkpKSkKLSAgICApKQotCi0oZGVmdW4gcHktcGRidHJhY2stb3ZlcmxheS1hcnJvdyAoYWN0aXZhdGlvbikKLSAgIkFjdGl2YXRlIG9yIGRlIGFycm93IGF0IGJlZ2lubmluZy1vZi1saW5lIGluIGN1cnJlbnQgYnVmZmVyLiIKLSAgOzsgVGhpcyB3YXMgZGVyaXZlZC9zaW1wbGlmaWVkIGZyb20gZWRlYnVnLW92ZXJsYXktYXJyb3cKLSAgKGNvbmQgKGFjdGl2YXRpb24KLQkgKHNldHEgb3ZlcmxheS1hcnJvdy1wb3NpdGlvbiAobWFrZS1tYXJrZXIpKQotCSAoc2V0cSBvdmVybGF5LWFycm93LXN0cmluZyAiPT4iKQotCSAoc2V0LW1hcmtlciBvdmVybGF5LWFycm93LXBvc2l0aW9uIChweS1wb2ludCAnYm9sKSAoY3VycmVudC1idWZmZXIpKQotCSAoc2V0cSBweS1wZGJ0cmFjay1pcy10cmFja2luZy1wIHQpKQotCShvdmVybGF5LWFycm93LXBvc2l0aW9uCi0JIChzZXRxIG92ZXJsYXktYXJyb3ctcG9zaXRpb24gbmlsKQotCSAoc2V0cSBweS1wZGJ0cmFjay1pcy10cmFja2luZy1wIG5pbCkpCi0JKSkKLQotKGRlZnVuIHB5LXBkYnRyYWNrLXRyYWNrLXN0YWNrLWZpbGUgKHRleHQpCi0gICJTaG93IHRoZSBmaWxlIGluZGljYXRlZCBieSB0aGUgcGRiIHN0YWNrIGVudHJ5IGxpbmUsIGluIGEgc2VwYXJhdGUgd2luZG93LgotCi1BY3Rpdml0eSBpcyBkaXNhYmxlZCBpZiB0aGUgYnVmZmVyLWxvY2FsIHZhcmlhYmxlCi1gcHktcGRidHJhY2stZG8tdHJhY2tpbmctcCcgaXMgbmlsLgotCi1XZSBkZXBlbmQgb24gdGhlIHBkYiBpbnB1dCBwcm9tcHQgbWF0Y2hpbmcgYHB5LXBkYnRyYWNrLWlucHV0LXByb21wdCcKLWF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuCi0KLUlmIHRoZSB0cmFjZWJhY2sgdGFyZ2V0IGZpbGUgcGF0aCBpcyBpbnZhbGlkLCB3ZSBsb29rIGZvciB0aGUgbW9zdAotcmVjZW50bHkgdmlzaXRlZCBweXRob24tbW9kZSBidWZmZXIgd2hpY2ggZWl0aGVyIGhhcyB0aGUgbmFtZSBvZiB0aGUKLWN1cnJlbnQgZnVuY3Rpb24gXChvciBjbGFzcykgb3Igd2hpY2ggZGVmaW5lcyB0aGUgZnVuY3Rpb24gXChvcgotY2xhc3MpLiAgVGhpcyBpcyB0byBwcm92aWRlIGZvciByZW1vdGUgc2NyaXB0cywgZWcsIFpvcGUncyAnU2NyaXB0Ci0oUHl0aG9uKScgLSBwdXQgYSBfY29weV8gb2YgdGhlIHNjcmlwdCBpbiBhIGJ1ZmZlciBuYW1lZCBmb3IgdGhlCi1zY3JpcHQsIGFuZCBzZXQgdG8gcHl0aG9uLW1vZGUsIGFuZCBwZGJ0cmFjayB3aWxsIGZpbmQgaXQuKSIKLSAgOzsgSW5zdGVhZCBvZiB0cnlpbmcgdG8gcGllY2UgdGhpbmdzIHRvZ2V0aGVyIGZyb20gcGFydGlhbCB0ZXh0Ci0gIDs7ICh3aGljaCBjYW4gYmUgYWxtb3N0IHVzZWxlc3MgZGVwZW5kaW5nIG9uIEVtYWNzIHZlcnNpb24pLCB3ZQotICA7OyBtb25pdG9yIHRvIHRoZSBwb2ludCB3aGVyZSB3ZSBoYXZlIHRoZSBuZXh0IHBkYiBwcm9tcHQsIGFuZCB0aGVuCi0gIDs7IGNoZWNrIGFsbCB0ZXh0IGZyb20gY29taW50LWxhc3QtaW5wdXQtZW5kIHRvIHByb2Nlc3MtbWFyay4KLSAgOzsKLSAgOzsgQWxzbywgd2UncmUgdmVyeSBjb25zZXJ2YXRpdmUgYWJvdXQgY2xlYXJpbmcgdGhlIG92ZXJsYXkgYXJyb3csCi0gIDs7IHRvIG1pbmltaXplIHJlc2lkdWUuICBUaGlzIG1lYW5zLCBmb3IgaW5zdGFuY2UsIHRoYXQgZXhlY3V0aW5nCi0gIDs7IG90aGVyIHBkYiBjb21tYW5kcyB3aXBlIG91dCB0aGUgaGlnaGxpZ2h0LiAgWW91IGNhbiBhbHdheXMgZG8gYQotICA7OyAnd2hlcmUnIChha2EgJ3cnKSBjb21tYW5kIHRvIHJldmVhbCB0aGUgb3ZlcmxheSBhcnJvdy4KLSAgKGxldCogKChvcmlnYnVmIChjdXJyZW50LWJ1ZmZlcikpCi0JIChjdXJycHJvYyAoZ2V0LWJ1ZmZlci1wcm9jZXNzIG9yaWdidWYpKSkKLQotICAgIChpZiAobm90IChhbmQgY3VycnByb2MgcHktcGRidHJhY2stZG8tdHJhY2tpbmctcCkpCi0gICAgICAgIChweS1wZGJ0cmFjay1vdmVybGF5LWFycm93IG5pbCkKLQotICAgICAgKGxldCogKChwcm9jbWFyayAocHJvY2Vzcy1tYXJrIGN1cnJwcm9jKSkKLSAgICAgICAgICAgICAoYmxvY2sgKGJ1ZmZlci1zdWJzdHJpbmcgKG1heCBjb21pbnQtbGFzdC1pbnB1dC1lbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLSBwcm9jbWFyawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5LXBkYnRyYWNrLXRyYWNrLXJhbmdlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY21hcmspKQotICAgICAgICAgICAgIHRhcmdldCB0YXJnZXRfZm5hbWUgdGFyZ2V0X2xpbmVubyB0YXJnZXRfYnVmZmVyKQotCi0gICAgICAgIChpZiAobm90IChzdHJpbmctbWF0Y2ggKGNvbmNhdCBweS1wZGJ0cmFjay1pbnB1dC1wcm9tcHQgIiQiKSBibG9jaykpCi0gICAgICAgICAgICAocHktcGRidHJhY2stb3ZlcmxheS1hcnJvdyBuaWwpCi0KLSAgICAgICAgICAoc2V0cSB0YXJnZXQgKHB5LXBkYnRyYWNrLWdldC1zb3VyY2UtYnVmZmVyIGJsb2NrKSkKLQotICAgICAgICAgIChpZiAoc3RyaW5ncCB0YXJnZXQpCi0gICAgICAgICAgICAgIChtZXNzYWdlICJwZGJ0cmFjazogJXMiIHRhcmdldCkKLQotICAgICAgICAgICAgKHNldHEgdGFyZ2V0X2xpbmVubyAoY2FyIHRhcmdldCkpCi0gICAgICAgICAgICAoc2V0cSB0YXJnZXRfYnVmZmVyIChjYWRyIHRhcmdldCkpCi0gICAgICAgICAgICAoc2V0cSB0YXJnZXRfZm5hbWUgKGJ1ZmZlci1maWxlLW5hbWUgdGFyZ2V0X2J1ZmZlcikpCi0gICAgICAgICAgICAoc3dpdGNoLXRvLWJ1ZmZlci1vdGhlci13aW5kb3cgdGFyZ2V0X2J1ZmZlcikKLSAgICAgICAgICAgIChnb3RvLWxpbmUgdGFyZ2V0X2xpbmVubykKLSAgICAgICAgICAgIChtZXNzYWdlICJwZGJ0cmFjazogbGluZSAlcywgZmlsZSAlcyIgdGFyZ2V0X2xpbmVubyB0YXJnZXRfZm5hbWUpCi0gICAgICAgICAgICAocHktcGRidHJhY2stb3ZlcmxheS1hcnJvdyB0KQotICAgICAgICAgICAgKHBvcC10by1idWZmZXIgb3JpZ2J1ZiB0KQotCi0gICAgICAgICAgICApKSkpKQotICApCi0KLShkZWZ1biBweS1wZGJ0cmFjay1nZXQtc291cmNlLWJ1ZmZlciAoYmxvY2spCi0gICJSZXR1cm4gbGluZSBudW1iZXIgYW5kIGJ1ZmZlciBvZiBjb2RlIGluZGljYXRlZCBieSBibG9jaydzIHRyYWNlYmFjayB0ZXh0LgotCi1XZSBsb29rIGZpcnN0IHRvIHZpc2l0IHRoZSBmaWxlIGluZGljYXRlZCBpbiB0aGUgdHJhY2UuCi0KLUZhaWxpbmcgdGhhdCwgd2UgbG9vayBmb3IgdGhlIG1vc3QgcmVjZW50bHkgdmlzaXRlZCBweXRob24tbW9kZSBidWZmZXIKLXdpdGggdGhlIHNhbWUgbmFtZSBvciBoYXZpbmcgdGhlIG5hbWVkIGZ1bmN0aW9uLgotCi1JZiB3ZSdyZSB1bmFibGUgZmluZCB0aGUgc291cmNlIGNvZGUgd2UgcmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlCi1wcm9ibGVtIGFzIGJlc3QgYXMgd2UgY2FuIGRldGVybWluZS4iCi0KLSAgKGlmIChub3QgKHN0cmluZy1tYXRjaCBweS1wZGJ0cmFjay1zdGFjay1lbnRyeS1yZWdleHAgYmxvY2spKQotCi0gICAgICAiVHJhY2ViYWNrIGN1ZSBub3QgZm91bmQiCi0KLSAgICAobGV0KiAoKGZpbGVuYW1lIChtYXRjaC1zdHJpbmcgMSBibG9jaykpCi0gICAgICAgICAgIChsaW5lbm8gKHN0cmluZy10by1pbnQgKG1hdGNoLXN0cmluZyAyIGJsb2NrKSkpCi0gICAgICAgICAgIChmdW5jbmFtZSAobWF0Y2gtc3RyaW5nIDMgYmxvY2spKQotICAgICAgICAgICBmdW5jYnVmZmVyKQotCi0gICAgICAoY29uZCAoKGZpbGUtZXhpc3RzLXAgZmlsZW5hbWUpCi0gICAgICAgICAgICAgKGxpc3QgbGluZW5vIChmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZW5hbWUpKSkKLQotICAgICAgICAgICAgKChzZXRxIGZ1bmNidWZmZXIgKHB5LXBkYnRyYWNrLWdydWItZm9yLWJ1ZmZlciBmdW5jbmFtZSBsaW5lbm8pKQotICAgICAgICAgICAgIChpZiAoc3RyaW5nLW1hdGNoICIvU2NyaXB0IChQeXRob24pJCIgZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgIDs7IEFkZCBpbiBudW1iZXIgb2YgbGluZXMgZm9yIGxlYWRpbmcgJyMjJyBjb21tZW50czoKLSAgICAgICAgICAgICAgICAgKHNldHEgbGluZW5vCi0gICAgICAgICAgICAgICAgICAgICAgICgrIGxpbmVubwotICAgICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0LWJ1ZmZlciBmdW5jYnVmZmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3VudC1saW5lcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQtbWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4IChwb2ludC1taW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1tYXRjaCAiXlxcKFteI11cXHwjW14jXVxcfCMkXFwpIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludC1tYXgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkpKSkKLSAgICAgICAgICAgICAobGlzdCBsaW5lbm8gZnVuY2J1ZmZlcikpCi0KLSAgICAgICAgICAgICgoPSAoZWx0IGZpbGVuYW1lIDApID9cPCkKLSAgICAgICAgICAgICAoZm9ybWF0ICIoTm9uLWZpbGUgc291cmNlOiAnJXMnKSIgZmlsZW5hbWUpKQotCi0gICAgICAgICAgICAodCAoZm9ybWF0ICJOb3QgZm91bmQ6ICVzKCksICVzIiBmdW5jbmFtZSBmaWxlbmFtZSkpKQotICAgICAgKQotICAgICkKLSAgKQotCi0oZGVmdW4gcHktcGRidHJhY2stZ3J1Yi1mb3ItYnVmZmVyIChmdW5jbmFtZSBsaW5lbm8pCi0gICJGaW5kIG1vc3QgcmVjZW50IGJ1ZmZlciBpdHNlbGYgbmFtZWQgb3IgaGF2aW5nIGZ1bmN0aW9uIGZ1bmNuYW1lLgotCi1XZSB3YWxrIHRoZSBidWZmZXItbGlzdCBoaXN0b3J5IGZvciBweXRob24tbW9kZSBidWZmZXJzIHRoYXQgYXJlCi1uYW1lZCBmb3IgZnVuY25hbWUgb3IgZGVmaW5lIGEgZnVuY3Rpb24gZnVuY25hbWUuIgotICAobGV0ICgoYnVmZmVycyAoYnVmZmVyLWxpc3QpKQotICAgICAgICBidWYKLSAgICAgICAgZ290KQotICAgICh3aGlsZSAoYW5kIGJ1ZmZlcnMgKG5vdCBnb3QpKQotICAgICAgKHNldHEgYnVmIChjYXIgYnVmZmVycykKLSAgICAgICAgICAgIGJ1ZmZlcnMgKGNkciBidWZmZXJzKSkKLSAgICAgIChpZiAoYW5kIChzYXZlLWV4Y3Vyc2lvbiAoc2V0LWJ1ZmZlciBidWYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZz0gbWFqb3ItbW9kZSAicHl0aG9uLW1vZGUiKSkKLSAgICAgICAgICAgICAgIChvciAoc3RyaW5nLW1hdGNoIGZ1bmNuYW1lIChidWZmZXItbmFtZSBidWYpKQotICAgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2ggKGNvbmNhdCAiXlxccy0qXFwoZGVmXFx8Y2xhc3NcXClcXHMtKyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY25hbWUgIlxccy0qKCIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldC1idWZmZXIgYnVmKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQtbWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQtbWF4KSkpKSkpCi0gICAgICAgICAgKHNldHEgZ290IGJ1ZikpKQotICAgIGdvdCkpCi0KLShkZWZ1biBweS1wb3N0cHJvY2Vzcy1vdXRwdXQtYnVmZmVyIChidWYpCi0gICJIaWdobGlnaHQgZXhjZXB0aW9ucyBmb3VuZCBpbiBCVUYuCi1JZiBhbiBleGNlcHRpb24gb2NjdXJyZWQgcmV0dXJuIHQsIG90aGVyd2lzZSByZXR1cm4gbmlsLiAgQlVGIG11c3QgZXhpc3QuIgotICAobGV0IChsaW5lIGZpbGUgYm9sIGVyci1wKQotICAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgKHNldC1idWZmZXIgYnVmKQotICAgICAgKGJlZ2lubmluZy1vZi1idWZmZXIpCi0gICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIHB5LXRyYWNlYmFjay1saW5lLXJlIG5pbCB0KQotCShzZXRxIGZpbGUgKG1hdGNoLXN0cmluZyAxKQotCSAgICAgIGxpbmUgKHN0cmluZy10by1pbnQgKG1hdGNoLXN0cmluZyAyKSkKLQkgICAgICBib2wgKHB5LXBvaW50ICdib2wpKQotCShweS1oaWdobGlnaHQtbGluZSBib2wgKHB5LXBvaW50ICdlb2wpIGZpbGUgbGluZSkpKQotICAgICh3aGVuIChhbmQgcHktanVtcC1vbi1leGNlcHRpb24gbGluZSkKLSAgICAgIChiZWVwKQotICAgICAgKHB5LWp1bXAtdG8tZXhjZXB0aW9uIGZpbGUgbGluZSkKLSAgICAgIChzZXRxIGVyci1wIHQpKQotICAgIGVyci1wKSkKLQotCi0MCi07OzsgU3VicHJvY2VzcyBjb21tYW5kcwotCi07OyBvbmx5IHVzZWQgd2hlbiAobWVtcSAnYnJva2VuLXRlbXAtbmFtZXMgcHktZW1hY3MtZmVhdHVyZXMpCi0oZGVmdmFyIHB5LXNlcmlhbC1udW1iZXIgMCkKLShkZWZ2YXIgcHktZXhjZXB0aW9uLWJ1ZmZlciBuaWwpCi0oZGVmY29uc3QgcHktb3V0cHV0LWJ1ZmZlciAiKlB5dGhvbiBPdXRwdXQqIikKLShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAncHktb3V0cHV0LWJ1ZmZlcikKLQotOzsgZm9yIHRvZ2dsaW5nIGJldHdlZW4gQ1B5dGhvbiBhbmQgSnl0aG9uCi0oZGVmdmFyIHB5LXdoaWNoLXNoZWxsIG5pbCkKLShkZWZ2YXIgcHktd2hpY2gtYXJncyAgcHktcHl0aG9uLWNvbW1hbmQtYXJncykKLShkZWZ2YXIgcHktd2hpY2gtYnVmbmFtZSAiUHl0aG9uIikKLShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAncHktd2hpY2gtc2hlbGwpCi0obWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ3B5LXdoaWNoLWFyZ3MpCi0obWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ3B5LXdoaWNoLWJ1Zm5hbWUpCi0KLShkZWZ1biBweS10b2dnbGUtc2hlbGxzIChhcmcpCi0gICJUb2dnbGVzIGJldHdlZW4gdGhlIENQeXRob24gYW5kIEp5dGhvbiBzaGVsbHMuCi0KLVdpdGggcG9zaXRpdmUgYXJndW1lbnQgQVJHIChpbnRlcmFjdGl2ZWx5IFxcW3VuaXZlcnNhbC1hcmd1bWVudF0pLAotdXNlcyB0aGUgQ1B5dGhvbiBzaGVsbCwgd2l0aCBuZWdhdGl2ZSBBUkcgdXNlcyB0aGUgSnl0aG9uIHNoZWxsLCBhbmQKLXdpdGggYSB6ZXJvIGFyZ3VtZW50LCB0b2dnbGVzIHRoZSBzaGVsbC4KLQotUHJvZ3JhbW1hdGljYWxseSwgQVJHIGNhbiBhbHNvIGJlIG9uZSBvZiB0aGUgc3ltYm9scyBgY3B5dGhvbicgb3IKLWBqeXRob24nLCBlcXVpdmFsZW50IHRvIHBvc2l0aXZlIGFyZyBhbmQgbmVnYXRpdmUgYXJnIHJlc3BlY3RpdmVseS4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCi0gIDs7IGRlZmF1bHQgaXMgdG8gdG9nZ2xlCi0gIChpZiAobnVsbCBhcmcpCi0gICAgICAoc2V0cSBhcmcgMCkpCi0gIDs7IHByZXByb2Nlc3MgYXJnCi0gIChjb25kCi0gICAoKGVxdWFsIGFyZyAwKQotICAgIDs7IHRvZ2dsZQotICAgIChpZiAoc3RyaW5nLWVxdWFsIHB5LXdoaWNoLWJ1Zm5hbWUgIlB5dGhvbiIpCi0JKHNldHEgYXJnIC0xKQotICAgICAgKHNldHEgYXJnIDEpKSkKLSAgICgoZXF1YWwgYXJnICdjcHl0aG9uKSAoc2V0cSBhcmcgMSkpCi0gICAoKGVxdWFsIGFyZyAnanl0aG9uKSAoc2V0cSBhcmcgLTEpKSkKLSAgKGxldCAobXNnKQotICAgIChjb25kCi0gICAgICgoPCAwIGFyZykKLSAgICAgIDs7IHNldCB0byBDUHl0aG9uCi0gICAgICAoc2V0cSBweS13aGljaC1zaGVsbCBweS1weXRob24tY29tbWFuZAotCSAgICBweS13aGljaC1hcmdzIHB5LXB5dGhvbi1jb21tYW5kLWFyZ3MKLQkgICAgcHktd2hpY2gtYnVmbmFtZSAiUHl0aG9uIgotCSAgICBtc2cgIkNQeXRob24iKQotICAgICAgKGlmIChzdHJpbmctZXF1YWwgcHktd2hpY2gtYnVmbmFtZSAiSnl0aG9uIikKLQkgIChzZXRxIG1vZGUtbmFtZSAiUHl0aG9uIikpKQotICAgICAoKD4gMCBhcmcpCi0gICAgICAoc2V0cSBweS13aGljaC1zaGVsbCBweS1qeXRob24tY29tbWFuZAotCSAgICBweS13aGljaC1hcmdzIHB5LWp5dGhvbi1jb21tYW5kLWFyZ3MKLQkgICAgcHktd2hpY2gtYnVmbmFtZSAiSnl0aG9uIgotCSAgICBtc2cgIkp5dGhvbiIpCi0gICAgICAoaWYgKHN0cmluZy1lcXVhbCBweS13aGljaC1idWZuYW1lICJQeXRob24iKQotCSAgKHNldHEgbW9kZS1uYW1lICJKeXRob24iKSkpCi0gICAgICkKLSAgICAobWVzc2FnZSAiVXNpbmcgdGhlICVzIHNoZWxsIiBtc2cpCi0gICAgKHNldHEgcHktb3V0cHV0LWJ1ZmZlciAoZm9ybWF0ICIqJXMgT3V0cHV0KiIgcHktd2hpY2gtYnVmbmFtZSkpKSkKLQotOzs7IyMjYXV0b2xvYWQKLShkZWZ1biBweS1zaGVsbCAoJm9wdGlvbmFsIGFyZ3Byb21wdCkKLSAgIlN0YXJ0IGFuIGludGVyYWN0aXZlIFB5dGhvbiBpbnRlcnByZXRlciBpbiBhbm90aGVyIHdpbmRvdy4KLVRoaXMgaXMgbGlrZSBTaGVsbCBtb2RlLCBleGNlcHQgdGhhdCBQeXRob24gaXMgcnVubmluZyBpbiB0aGUgd2luZG93Ci1pbnN0ZWFkIG9mIGEgc2hlbGwuICBTZWUgdGhlIGBJbnRlcmFjdGl2ZSBTaGVsbCcgYW5kIGBTaGVsbCBNb2RlJwotc2VjdGlvbnMgb2YgdGhlIEVtYWNzIG1hbnVhbCBmb3IgZGV0YWlscywgZXNwZWNpYWxseSBmb3IgdGhlIGtleQotYmluZGluZ3MgYWN0aXZlIGluIHRoZSBgKlB5dGhvbionIGJ1ZmZlci4KLQotV2l0aCBvcHRpb25hbCBcXFt1bml2ZXJzYWwtYXJndW1lbnRdLCB0aGUgdXNlciBpcyBwcm9tcHRlZCBmb3IgdGhlCi1mbGFncyB0byBwYXNzIHRvIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBUaGlzIGhhcyBubyBlZmZlY3Qgd2hlbiB0aGlzCi1jb21tYW5kIGlzIHVzZWQgdG8gc3dpdGNoIHRvIGFuIGV4aXN0aW5nIHByb2Nlc3MsIG9ubHkgd2hlbiBhIG5ldwotcHJvY2VzcyBpcyBzdGFydGVkLiAgSWYgeW91IHVzZSB0aGlzLCB5b3Ugd2lsbCBwcm9iYWJseSB3YW50IHRvIGVuc3VyZQotdGhhdCB0aGUgY3VycmVudCBhcmd1bWVudHMgYXJlIHJldGFpbmVkICh0aGV5IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlCi1wcm9tcHQpLiAgVGhpcyBhcmd1bWVudCBpcyBpZ25vcmVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKLXByb2dyYW1tYXRpY2FsbHksIG9yIHdoZW4gcnVubmluZyBpbiBFbWFjcyAxOS4zNCBvciBvbGRlci4KLQotTm90ZTogWW91IGNhbiB0b2dnbGUgYmV0d2VlbiB1c2luZyB0aGUgQ1B5dGhvbiBpbnRlcnByZXRlciBhbmQgdGhlCi1KeXRob24gaW50ZXJwcmV0ZXIgYnkgaGl0dGluZyBcXFtweS10b2dnbGUtc2hlbGxzXS4gIFRoaXMgdG9nZ2xlcwotYnVmZmVyIGxvY2FsIHZhcmlhYmxlcyB3aGljaCBjb250cm9sIHdoZXRoZXIgYWxsIHlvdXIgc3Vic2hlbGwKLWludGVyYWN0aW9ucyBoYXBwZW4gdG8gdGhlIGAqSnl0aG9uKicgb3IgYCpQeXRob24qJyBidWZmZXJzICh0aGUKLWxhdHRlciBpcyB0aGUgbmFtZSB1c2VkIGZvciB0aGUgQ1B5dGhvbiBidWZmZXIpLgotCi1XYXJuaW5nOiBEb24ndCB1c2UgYW4gaW50ZXJhY3RpdmUgUHl0aG9uIGlmIHlvdSBjaGFuZ2Ugc3lzLnBzMSBvcgotc3lzLnBzMiBmcm9tIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBvciBpZiB5b3UncmUgcnVubmluZyBjb2RlIHRoYXQKLXByaW50cyBgPj4+ICcgb3IgYC4uLiAnIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUuICBgcHl0aG9uLW1vZGUnIGNhbid0Ci1kaXN0aW5ndWlzaCB5b3VyIG91dHB1dCBmcm9tIFB5dGhvbidzIG91dHB1dCwgYW5kIGFzc3VtZXMgdGhhdCBgPj4+ICcKLWF0IHRoZSBzdGFydCBvZiBhIGxpbmUgaXMgYSBwcm9tcHQgZnJvbSBQeXRob24uICBTaW1pbGFybHksIHRoZSBFbWFjcwotU2hlbGwgbW9kZSBjb2RlIGFzc3VtZXMgdGhhdCBib3RoIGA+Pj4gJyBhbmQgYC4uLiAnIGF0IHRoZSBzdGFydCBvZiBhCi1saW5lIGFyZSBQeXRob24gcHJvbXB0cy4gIEJhZCB0aGluZ3MgY2FuIGhhcHBlbiBpZiB5b3UgZm9vbCBlaXRoZXIKLW1vZGUuCi0KLVdhcm5pbmc6ICBJZiB5b3UgZG8gYW55IGVkaXRpbmcgKmluKiB0aGUgcHJvY2VzcyBidWZmZXIgKndoaWxlKiB0aGUKLWJ1ZmZlciBpcyBhY2NlcHRpbmcgb3V0cHV0IGZyb20gUHl0aG9uLCBkbyBOT1QgYXR0ZW1wdCB0byBgdW5kbycgdGhlCi1jaGFuZ2VzLiAgU29tZSBvZiB0aGUgb3V0cHV0IChub3doZXJlIG5lYXIgdGhlIHBhcnRzIHlvdSBjaGFuZ2VkISkgbWF5Ci1iZSBsb3N0IGlmIHlvdSBkby4gIFRoaXMgYXBwZWFycyB0byBiZSBhbiBFbWFjcyBidWcsIGFuIHVuZm9ydHVuYXRlCi1pbnRlcmFjdGlvbiBiZXR3ZWVuIHVuZG8gYW5kIHByb2Nlc3MgZmlsdGVyczsgdGhlIHNhbWUgcHJvYmxlbSBleGlzdHMgaW4KLW5vbi1QeXRob24gcHJvY2VzcyBidWZmZXJzIHVzaW5nIHRoZSBkZWZhdWx0IChFbWFjcy1zdXBwbGllZCkgcHJvY2VzcwotZmlsdGVyLiIKLSAgKGludGVyYWN0aXZlICJQIikKLSAgOzsgU2V0IHRoZSBkZWZhdWx0IHNoZWxsIGlmIG5vdCBhbHJlYWR5IHNldAotICAod2hlbiAobnVsbCBweS13aGljaC1zaGVsbCkKLSAgICAocHktdG9nZ2xlLXNoZWxscyBweS1kZWZhdWx0LWludGVycHJldGVyKSkKLSAgKGxldCAoKGFyZ3MgcHktd2hpY2gtYXJncykpCi0gICAgKHdoZW4gKGFuZCBhcmdwcm9tcHQKLQkgICAgICAgKGludGVyYWN0aXZlLXApCi0JICAgICAgIChmYm91bmRwICdzcGxpdC1zdHJpbmcpKQotICAgICAgOzsgVEJEOiBQZXJoYXBzIGZvcmNlICItaSIgaW4gdGhlIGZpbmFsIGxpc3Q/Ci0gICAgICAoc2V0cSBhcmdzIChzcGxpdC1zdHJpbmcKLQkJICAocmVhZC1zdHJpbmcgKGNvbmNhdCBweS13aGljaC1idWZuYW1lCi0JCQkJICAgICAgICIgYXJndW1lbnRzOiAiKQotCQkJICAgICAgIChjb25jYXQKLQkJCQkobWFwY29uY2F0ICdpZGVudGl0eSBweS13aGljaC1hcmdzICIgIikgIiAiKQotCQkJICAgICAgICkpKSkKLSAgICAoaWYgKG5vdCAoZXF1YWwgKGJ1ZmZlci1uYW1lKSAiKlB5dGhvbioiKSkKLSAgICAgICAgKHN3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93Ci0gICAgICAgICAoYXBwbHkgJ21ha2UtY29taW50IHB5LXdoaWNoLWJ1Zm5hbWUgcHktd2hpY2gtc2hlbGwgbmlsIGFyZ3MpKQotICAgICAgKGFwcGx5ICdtYWtlLWNvbWludCBweS13aGljaC1idWZuYW1lIHB5LXdoaWNoLXNoZWxsIG5pbCBhcmdzKSkKLSAgICAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29taW50LXByb21wdC1yZWdleHApCi0gICAgKHNldHEgY29taW50LXByb21wdC1yZWdleHAgKGNvbmNhdCBweS1zaGVsbC1pbnB1dC1wcm9tcHQtMS1yZWdleHAgIlxcfCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5LXNoZWxsLWlucHV0LXByb21wdC0yLXJlZ2V4cCAiXFx8IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4oW1BwXWRiKSAiKSkKLSAgICAoYWRkLWhvb2sgJ2NvbWludC1vdXRwdXQtZmlsdGVyLWZ1bmN0aW9ucwotCSAgICAgICdweS1jb21pbnQtb3V0cHV0LWZpbHRlci1mdW5jdGlvbikKLSAgICA7OyBwZGJ0cmFjawotICAgIChhZGQtaG9vayAnY29taW50LW91dHB1dC1maWx0ZXItZnVuY3Rpb25zICdweS1wZGJ0cmFjay10cmFjay1zdGFjay1maWxlKQotICAgIChzZXRxIHB5LXBkYnRyYWNrLWRvLXRyYWNraW5nLXAgdCkKLSAgICAoc2V0LXN5bnRheC10YWJsZSBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgICAodXNlLWxvY2FsLW1hcCBweS1zaGVsbC1tYXApCi0gICAgKHJ1bi1ob29rcyAncHktc2hlbGwtaG9vaykKLSAgICApKQotCi0oZGVmdW4gcHktY2xlYXItcXVldWUgKCkKLSAgIkNsZWFyIHRoZSBxdWV1ZSBvZiB0ZW1wb3JhcnkgZmlsZXMgd2FpdGluZyB0byBleGVjdXRlLiIKLSAgKGludGVyYWN0aXZlKQotICAobGV0ICgobiAobGVuZ3RoIHB5LWZpbGUtcXVldWUpKSkKLSAgICAobWFwY2FyICdkZWxldGUtZmlsZSBweS1maWxlLXF1ZXVlKQotICAgIChzZXRxIHB5LWZpbGUtcXVldWUgbmlsKQotICAgIChtZXNzYWdlICIlZCBwZW5kaW5nIGZpbGVzIGRlLXF1ZXVlZC4iIG4pKSkKLQotDAotKGRlZnVuIHB5LWV4ZWN1dGUtcmVnaW9uIChzdGFydCBlbmQgJm9wdGlvbmFsIGFzeW5jKQotICAiRXhlY3V0ZSB0aGUgcmVnaW9uIGluIGEgUHl0aG9uIGludGVycHJldGVyLgotCi1UaGUgcmVnaW9uIGlzIGZpcnN0IGNvcGllZCBpbnRvIGEgdGVtcG9yYXJ5IGZpbGUgKGluIHRoZSBkaXJlY3RvcnkKLWBweS10ZW1wLWRpcmVjdG9yeScpLiAgSWYgdGhlcmUgaXMgbm8gUHl0aG9uIGludGVycHJldGVyIHNoZWxsCi1ydW5uaW5nLCB0aGlzIGZpbGUgaXMgZXhlY3V0ZWQgc3luY2hyb25vdXNseSB1c2luZwotYHNoZWxsLWNvbW1hbmQtb24tcmVnaW9uJy4gIElmIHRoZSBwcm9ncmFtIGlzIGxvbmcgcnVubmluZywgdXNlCi1cXFt1bml2ZXJzYWwtYXJndW1lbnRdIHRvIHJ1biB0aGUgY29tbWFuZCBhc3luY2hyb25vdXNseSBpbiBpdHMgb3duCi1idWZmZXIuCi0KLVdoZW4gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHByb2dyYW1tYXRpY2FsbHksIGFyZ3VtZW50cyBTVEFSVCBhbmQgRU5ECi1zcGVjaWZ5IHRoZSByZWdpb24gdG8gZXhlY3V0ZSwgYW5kIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IEFTWU5DLCBpZgotbm9uLW5pbCwgc3BlY2lmaWVzIHRvIHJ1biB0aGUgY29tbWFuZCBhc3luY2hyb25vdXNseSBpbiBpdHMgb3duCi1idWZmZXIuCi0KLUlmIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgc2hlbGwgaXMgcnVubmluZywgdGhlIHJlZ2lvbiBpcyBleGVjZmlsZSgpJ2QKLWluIHRoYXQgc2hlbGwuICBJZiB5b3UgdHJ5IHRvIGV4ZWN1dGUgcmVnaW9ucyB0b28gcXVpY2tseSwKLWBweXRob24tbW9kZScgd2lsbCBxdWV1ZSB0aGVtIHVwIGFuZCBleGVjdXRlIHRoZW0gb25lIGF0IGEgdGltZSB3aGVuCi1pdCBzZWVzIGEgYD4+PiAnIHByb21wdCBmcm9tIFB5dGhvbi4gIEVhY2ggdGltZSB0aGlzIGhhcHBlbnMsIHRoZQotcHJvY2VzcyBidWZmZXIgaXMgcG9wcGVkIGludG8gYSB3aW5kb3cgKGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gc29tZQotd2luZG93KSBzbyB5b3UgY2FuIHNlZSBpdCwgYW5kIGEgY29tbWVudCBvZiB0aGUgZm9ybQotCi0gICAgXHQjIyB3b3JraW5nIG9uIHJlZ2lvbiBpbiBmaWxlIDxuYW1lPi4uLgotCi1pcyBpbnNlcnRlZCBhdCB0aGUgZW5kLiAgU2VlIGFsc28gdGhlIGNvbW1hbmQgYHB5LWNsZWFyLXF1ZXVlJy4iCi0gIChpbnRlcmFjdGl2ZSAiclxuUCIpCi0gIDs7IFNraXAgYWhlYWQgdG8gdGhlIGZpcnN0IG5vbi1ibGFuayBsaW5lCi0gIChsZXQqICgocHJvYyAoZ2V0LXByb2Nlc3MgcHktd2hpY2gtYnVmbmFtZSkpCi0JICh0ZW1wIChpZiAobWVtcSAnYnJva2VuLXRlbXAtbmFtZXMgcHktZW1hY3MtZmVhdHVyZXMpCi0JCSAgIChsZXQKLQkJICAgICAgICgoc24gcHktc2VyaWFsLW51bWJlcikKLQkJCShwaWQgKGFuZCAoZmJvdW5kcCAnZW1hY3MtcGlkKSAoZW1hY3MtcGlkKSkpKQotCQkgICAgIChzZXRxIHB5LXNlcmlhbC1udW1iZXIgKDErIHB5LXNlcmlhbC1udW1iZXIpKQotCQkgICAgIChpZiBwaWQKLQkJCSAoZm9ybWF0ICJweXRob24tJWQtJWQiIHNuIHBpZCkKLQkJICAgICAgIChmb3JtYXQgInB5dGhvbi0lZCIgc24pKSkKLQkJIChtYWtlLXRlbXAtbmFtZSAicHl0aG9uLSIpKSkKLQkgKGZpbGUgKGNvbmNhdCAoZXhwYW5kLWZpbGUtbmFtZSB0ZW1wIHB5LXRlbXAtZGlyZWN0b3J5KSAiLnB5IikpCi0JIChjdXIgKGN1cnJlbnQtYnVmZmVyKSkKLQkgKGJ1ZiAoZ2V0LWJ1ZmZlci1jcmVhdGUgZmlsZSkpCi0JIHNoZWxsKQotICAgIDs7IFdyaXRlIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyLCB3YXRjaGluZyBvdXQgZm9yIGluZGVudGVkIHJlZ2lvbnMuCi0gICAgKHNhdmUtZXhjdXJzaW9uCi0gICAgICAoZ290by1jaGFyIHN0YXJ0KQotICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgICAgKHdoaWxlIChhbmQgKGxvb2tpbmctYXQgIlxccyAqJCIpCi0JCSAgKDwgKHBvaW50KSBlbmQpKQotCShmb3J3YXJkLWxpbmUgMSkpCi0gICAgICAoc2V0cSBzdGFydCAocG9pbnQpKQotICAgICAgKG9yICg8IHN0YXJ0IGVuZCkKLQkgIChlcnJvciAiUmVnaW9uIGlzIGVtcHR5IikpCi0gICAgICAoc2V0cSBweS1saW5lLW51bWJlci1vZmZzZXQgKGNvdW50LWxpbmVzIDEgc3RhcnQpKQotICAgICAgKGxldCAoKG5lZWRzLWlmICgvPSAocHktcG9pbnQgJ2JvbCkgKHB5LXBvaW50ICdib2kpKSkpCi0JKHNldC1idWZmZXIgYnVmKQotCShweXRob24tbW9kZSkKLQkod2hlbiBuZWVkcy1pZgotCSAgKGluc2VydCAiaWYgMTpcbiIpCi0JICAoc2V0cSBweS1saW5lLW51bWJlci1vZmZzZXQgKC0gcHktbGluZS1udW1iZXItb2Zmc2V0IDEpKSkKLQkoaW5zZXJ0LWJ1ZmZlci1zdWJzdHJpbmcgY3VyIHN0YXJ0IGVuZCkKLQk7OyBTZXQgdGhlIHNoZWxsIGVpdGhlciB0byB0aGUgIyEgbGluZSBjb21tYW5kLCBvciB0byB0aGUKLQk7OyBweS13aGljaC1zaGVsbCBidWZmZXIgbG9jYWwgdmFyaWFibGUuCi0JKHNldHEgc2hlbGwgKG9yIChweS1jaG9vc2Utc2hlbGwtYnktc2hlYmFuZykKLQkJCShweS1jaG9vc2Utc2hlbGwtYnktaW1wb3J0KQotCQkJcHktd2hpY2gtc2hlbGwpKSkpCi0gICAgKGNvbmQKLSAgICAgOzsgYWx3YXlzIHJ1biB0aGUgY29kZSBpbiBpdHMgb3duIGFzeW5jaHJvbm91cyBzdWJwcm9jZXNzCi0gICAgIChhc3luYwotICAgICAgOzsgVXNlciBleHBsaWNpdGx5IHdhbnRzIHRoaXMgdG8gcnVuIGluIGl0cyBvd24gYXN5bmMgc3VicHJvY2VzcwotICAgICAgKHNhdmUtZXhjdXJzaW9uCi0JKHNldC1idWZmZXIgYnVmKQotCSh3cml0ZS1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkgZmlsZSBuaWwgJ25vbXNnKSkKLSAgICAgIChsZXQqICgoYnVmIChnZW5lcmF0ZS1uZXctYnVmZmVyLW5hbWUgcHktb3V0cHV0LWJ1ZmZlcikpCi0JICAgICA7OyBUQkQ6IGEgaG9ycmlibGUgaGFjaywgYnV0IHdoeSBjcmVhdGUgbmV3IEN1c3RvbSB2YXJpYWJsZXM/Ci0JICAgICAoYXJnIChpZiAoc3RyaW5nLWVxdWFsIHB5LXdoaWNoLWJ1Zm5hbWUgIlB5dGhvbiIpCi0JCSAgICAgICItdSIgIiIpKSkKLQkoc3RhcnQtcHJvY2VzcyBweS13aGljaC1idWZuYW1lIGJ1ZiBzaGVsbCBhcmcgZmlsZSkKLQkocG9wLXRvLWJ1ZmZlciBidWYpCi0JKHB5LXBvc3Rwcm9jZXNzLW91dHB1dC1idWZmZXIgYnVmKQotCTs7IFRCRDogY2xlYW4gdXAgdGhlIHRlbXBvcmFyeSBmaWxlIQotCSkpCi0gICAgIDs7IGlmIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgc2hlbGwgaXMgcnVubmluZywgcXVldWUgaXQgdXAgZm9yCi0gICAgIDs7IGV4ZWN1dGlvbiB0aGVyZS4KLSAgICAgKHByb2MKLSAgICAgIDs7IHVzZSB0aGUgZXhpc3RpbmcgcHl0aG9uIHNoZWxsCi0gICAgICAoc2F2ZS1leGN1cnNpb24KLQkoc2V0LWJ1ZmZlciBidWYpCi0JKHdyaXRlLXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSBmaWxlIG5pbCAnbm9tc2cpKQotICAgICAgKGlmIChub3QgcHktZmlsZS1xdWV1ZSkKLQkgIChweS1leGVjdXRlLWZpbGUgcHJvYyBmaWxlKQotCShtZXNzYWdlICJGaWxlICVzIHF1ZXVlZCBmb3IgZXhlY3V0aW9uIiBmaWxlKSkKLSAgICAgIChzZXRxIHB5LWZpbGUtcXVldWUgKGFwcGVuZCBweS1maWxlLXF1ZXVlIChsaXN0IGZpbGUpKSkKLSAgICAgIChzZXRxIHB5LWV4Y2VwdGlvbi1idWZmZXIgKGNvbnMgZmlsZSAoY3VycmVudC1idWZmZXIpKSkpCi0gICAgICh0Ci0gICAgICA7OyBUQkQ6IGEgaG9ycmlibGUgaGFjaywgYnV0IHdoeSBjcmVhdGUgbmV3IEN1c3RvbSB2YXJpYWJsZXM/Ci0gICAgICAobGV0ICgoY21kIChjb25jYXQgcHktd2hpY2gtc2hlbGwgKGlmIChzdHJpbmctZXF1YWwgcHktd2hpY2gtYnVmbmFtZQotCQkJCQkJCSAgIkp5dGhvbiIpCi0JCQkJCSAgICAiIC0iICIiKSkpKQotCTs7IG90aGVyd2lzZSBlaXRoZXIgcnVuIGl0IHN5bmNocm9ub3VzbHkgaW4gYSBzdWJwcm9jZXNzCi0JKHNhdmUtZXhjdXJzaW9uCi0JICAoc2V0LWJ1ZmZlciBidWYpCi0JICAoc2hlbGwtY29tbWFuZC1vbi1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkKLQkJCQkgICBjbWQgcHktb3V0cHV0LWJ1ZmZlcikpCi0JOzsgc2hlbGwtY29tbWFuZC1vbi1yZWdpb24ga2lsbHMgdGhlIG91dHB1dCBidWZmZXIgaWYgaXQgbmV2ZXIKLQk7OyBleGlzdGVkIGFuZCB0aGVyZSdzIG5vIG91dHB1dCBmcm9tIHRoZSBjb21tYW5kCi0JKGlmIChub3QgKGdldC1idWZmZXIgcHktb3V0cHV0LWJ1ZmZlcikpCi0JICAgIChtZXNzYWdlICJObyBvdXRwdXQuIikKLQkgIChzZXRxIHB5LWV4Y2VwdGlvbi1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKLQkgIChsZXQgKChlcnItcCAocHktcG9zdHByb2Nlc3Mtb3V0cHV0LWJ1ZmZlciBweS1vdXRwdXQtYnVmZmVyKSkpCi0JICAgIChwb3AtdG8tYnVmZmVyIHB5LW91dHB1dC1idWZmZXIpCi0JICAgIChpZiBlcnItcAotCQkocG9wLXRvLWJ1ZmZlciBweS1leGNlcHRpb24tYnVmZmVyKSkpCi0JICApKQotICAgICAgKSkKLSAgICA7OyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuCi0gICAgKGtpbGwtYnVmZmVyIGJ1ZikpKQotCi0MCi07OyBDb2RlIGV4ZWN1dGlvbiBjb21tYW5kcwotKGRlZnVuIHB5LWV4ZWN1dGUtYnVmZmVyICgmb3B0aW9uYWwgYXN5bmMpCi0gICJTZW5kIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHRvIGEgUHl0aG9uIGludGVycHJldGVyLgotSWYgdGhlIGZpbGUgbG9jYWwgdmFyaWFibGUgYHB5LW1hc3Rlci1maWxlJyBpcyBub24tbmlsLCBleGVjdXRlIHRoZQotbmFtZWQgZmlsZSBpbnN0ZWFkIG9mIHRoZSBidWZmZXIncyBmaWxlLgotCi1JZiB0aGVyZSBpcyBhICpQeXRob24qIHByb2Nlc3MgYnVmZmVyIGl0IGlzIHVzZWQuICBJZiBhIGNsaXBwaW5nCi1yZXN0cmljdGlvbiBpcyBpbiBlZmZlY3QsIG9ubHkgdGhlIGFjY2Vzc2libGUgcG9ydGlvbiBvZiB0aGUgYnVmZmVyIGlzCi1zZW50LiAgQSB0cmFpbGluZyBuZXdsaW5lIHdpbGwgYmUgc3VwcGxpZWQgaWYgbmVlZGVkLgotCi1TZWUgdGhlIGBcXFtweS1leGVjdXRlLXJlZ2lvbl0nIGRvY3MgZm9yIGFuIGFjY291bnQgb2Ygc29tZQotc3VidGxldGllcywgaW5jbHVkaW5nIHRoZSB1c2Ugb2YgdGhlIG9wdGlvbmFsIEFTWU5DIGFyZ3VtZW50LiIKLSAgKGludGVyYWN0aXZlICJQIikKLSAgKGxldCAoKG9sZC1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkpCi0gICAgKGlmIHB5LW1hc3Rlci1maWxlCi0gICAgICAgIChsZXQqICgoZmlsZW5hbWUgKGV4cGFuZC1maWxlLW5hbWUgcHktbWFzdGVyLWZpbGUpKQotICAgICAgICAgICAgICAgKGJ1ZmZlciAob3IgKGdldC1maWxlLWJ1ZmZlciBmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZW5hbWUpKSkpCi0gICAgICAgICAgKHNldC1idWZmZXIgYnVmZmVyKSkpCi0gICAgKHB5LWV4ZWN1dGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpIGFzeW5jKQotICAgICAgIChwb3AtdG8tYnVmZmVyIG9sZC1idWZmZXIpKSkKLQotKGRlZnVuIHB5LWV4ZWN1dGUtaW1wb3J0LW9yLXJlbG9hZCAoJm9wdGlvbmFsIGFzeW5jKQotICAiSW1wb3J0IHRoZSBjdXJyZW50IGJ1ZmZlcidzIGZpbGUgaW4gYSBQeXRob24gaW50ZXJwcmV0ZXIuCi0KLUlmIHRoZSBmaWxlIGhhcyBhbHJlYWR5IGJlZW4gaW1wb3J0ZWQsIHRoZW4gZG8gcmVsb2FkIGluc3RlYWQgdG8gZ2V0Ci10aGUgbGF0ZXN0IHZlcnNpb24uCi0KLUlmIHRoZSBmaWxlJ3MgbmFtZSBkb2VzIG5vdCBlbmQgaW4gXCIucHlcIiwgdGhlbiBkbyBleGVjZmlsZSBpbnN0ZWFkLgotCi1JZiB0aGUgY3VycmVudCBidWZmZXIgaXMgbm90IHZpc2l0aW5nIGEgZmlsZSwgZG8gYHB5LWV4ZWN1dGUtYnVmZmVyJwotaW5zdGVhZC4KLQotSWYgdGhlIGZpbGUgbG9jYWwgdmFyaWFibGUgYHB5LW1hc3Rlci1maWxlJyBpcyBub24tbmlsLCBpbXBvcnQgb3IKLXJlbG9hZCB0aGUgbmFtZWQgZmlsZSBpbnN0ZWFkIG9mIHRoZSBidWZmZXIncyBmaWxlLiAgVGhlIGZpbGUgbWF5IGJlCi1zYXZlZCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYHB5LWV4ZWN1dGUtaW1wb3J0LW9yLXJlbG9hZC1zYXZlLXAnLgotCi1TZWUgdGhlIGBcXFtweS1leGVjdXRlLXJlZ2lvbl0nIGRvY3MgZm9yIGFuIGFjY291bnQgb2Ygc29tZQotc3VidGxldGllcywgaW5jbHVkaW5nIHRoZSB1c2Ugb2YgdGhlIG9wdGlvbmFsIEFTWU5DIGFyZ3VtZW50LgotCi1UaGlzIG1heSBiZSBwcmVmZXJhYmxlIHRvIGBcXFtweS1leGVjdXRlLWJ1ZmZlcl0nIGJlY2F1c2U6Ci0KLSAtIERlZmluaXRpb25zIHN0YXkgaW4gdGhlaXIgbW9kdWxlIHJhdGhlciB0aGFuIGFwcGVhcmluZyBhdCB0b3AKLSAgIGxldmVsLCB3aGVyZSB0aGV5IHdvdWxkIGNsdXR0ZXIgdGhlIGdsb2JhbCBuYW1lc3BhY2UgYW5kIG5vdCBhZmZlY3QKLSAgIHVzZXMgb2YgcXVhbGlmaWVkIG5hbWVzIChNT0RVTEUuTkFNRSkuCi0KLSAtIFRoZSBQeXRob24gZGVidWdnZXIgZ2V0cyBsaW5lIG51bWJlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZnVuY3Rpb25zLiIKLSAgKGludGVyYWN0aXZlICJQIikKLSAgOzsgQ2hlY2sgZmlsZSBsb2NhbCB2YXJpYWJsZSBweS1tYXN0ZXItZmlsZQotICAoaWYgcHktbWFzdGVyLWZpbGUKLSAgICAgIChsZXQqICgoZmlsZW5hbWUgKGV4cGFuZC1maWxlLW5hbWUgcHktbWFzdGVyLWZpbGUpKQotICAgICAgICAgICAgIChidWZmZXIgKG9yIChnZXQtZmlsZS1idWZmZXIgZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGZpbmQtZmlsZS1ub3NlbGVjdCBmaWxlbmFtZSkpKSkKLSAgICAgICAgKHNldC1idWZmZXIgYnVmZmVyKSkpCi0gIChsZXQgKChmaWxlIChidWZmZXItZmlsZS1uYW1lIChjdXJyZW50LWJ1ZmZlcikpKSkKLSAgICAoaWYgZmlsZQotICAgICAgICAocHJvZ24KLQkgIDs7IE1heWJlIHNhdmUgc29tZSBidWZmZXJzCi0JICAoc2F2ZS1zb21lLWJ1ZmZlcnMgKG5vdCBweS1hc2stYWJvdXQtc2F2ZSkgbmlsKQotICAgICAgICAgIChweS1leGVjdXRlLXN0cmluZwotICAgICAgICAgICAoaWYgKHN0cmluZy1tYXRjaCAiXFwucHkkIiBmaWxlKQotICAgICAgICAgICAgICAgKGxldCAoKGYgKGZpbGUtbmFtZS1zYW5zLWV4dGVuc2lvbgotCQkJIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGZpbGUpKSkpCi0gICAgICAgICAgICAgICAgIChmb3JtYXQgImlmIGdsb2JhbHMoKS5oYXNfa2V5KCclcycpOlxuICAgIHJlbG9hZCglcylcbmVsc2U6XG4gICAgaW1wb3J0ICVzXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgZiBmIGYpKQotICAgICAgICAgICAgIChmb3JtYXQgImV4ZWNmaWxlKHInJXMnKVxuIiBmaWxlKSkKLSAgICAgICAgICAgYXN5bmMpKQotICAgICAgOzsgZWxzZQotICAgICAgKHB5LWV4ZWN1dGUtYnVmZmVyIGFzeW5jKSkpKQotCi0KLShkZWZ1biBweS1leGVjdXRlLWRlZi1vci1jbGFzcyAoJm9wdGlvbmFsIGFzeW5jKQotICAiU2VuZCB0aGUgY3VycmVudCBmdW5jdGlvbiBvciBjbGFzcyBkZWZpbml0aW9uIHRvIGEgUHl0aG9uIGludGVycHJldGVyLgotCi1JZiB0aGVyZSBpcyBhICpQeXRob24qIHByb2Nlc3MgYnVmZmVyIGl0IGlzIHVzZWQuCi0KLVNlZSB0aGUgYFxcW3B5LWV4ZWN1dGUtcmVnaW9uXScgZG9jcyBmb3IgYW4gYWNjb3VudCBvZiBzb21lCi1zdWJ0bGV0aWVzLCBpbmNsdWRpbmcgdGhlIHVzZSBvZiB0aGUgb3B0aW9uYWwgQVNZTkMgYXJndW1lbnQuIgotICAoaW50ZXJhY3RpdmUgIlAiKQotICAoc2F2ZS1leGN1cnNpb24KLSAgICAocHktbWFyay1kZWYtb3ItY2xhc3MpCi0gICAgOzsgbWFyayBpcyBiZWZvcmUgcG9pbnQKLSAgICAocHktZXhlY3V0ZS1yZWdpb24gKG1hcmspIChwb2ludCkgYXN5bmMpKSkKLQotCi0oZGVmdW4gcHktZXhlY3V0ZS1zdHJpbmcgKHN0cmluZyAmb3B0aW9uYWwgYXN5bmMpCi0gICJTZW5kIHRoZSBhcmd1bWVudCBTVFJJTkcgdG8gYSBQeXRob24gaW50ZXJwcmV0ZXIuCi0KLUlmIHRoZXJlIGlzIGEgKlB5dGhvbiogcHJvY2VzcyBidWZmZXIgaXQgaXMgdXNlZC4KLQotU2VlIHRoZSBgXFxbcHktZXhlY3V0ZS1yZWdpb25dJyBkb2NzIGZvciBhbiBhY2NvdW50IG9mIHNvbWUKLXN1YnRsZXRpZXMsIGluY2x1ZGluZyB0aGUgdXNlIG9mIHRoZSBvcHRpb25hbCBBU1lOQyBhcmd1bWVudC4iCi0gIChpbnRlcmFjdGl2ZSAic0V4ZWN1dGUgUHl0aG9uIGNvbW1hbmQ6ICIpCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChzZXQtYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZQotICAgICAgICAgICAgICAgICAoZ2VuZXJhdGUtbmV3LWJ1ZmZlci1uYW1lICIgKlB5dGhvbiBDb21tYW5kKiIpKSkKLSAgICAoaW5zZXJ0IHN0cmluZykKLSAgICAocHktZXhlY3V0ZS1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkgYXN5bmMpKSkKLQotCi0MCi0oZGVmdW4gcHktanVtcC10by1leGNlcHRpb24gKGZpbGUgbGluZSkKLSAgIkp1bXAgdG8gdGhlIFB5dGhvbiBjb2RlIGluIEZJTEUgYXQgTElORS4iCi0gIChsZXQgKChidWZmZXIgKGNvbmQgKChzdHJpbmctZXF1YWwgZmlsZSAiPHN0ZGluPiIpCi0JCSAgICAgICAoaWYgKGNvbnNwIHB5LWV4Y2VwdGlvbi1idWZmZXIpCi0JCQkgICAoY2RyIHB5LWV4Y2VwdGlvbi1idWZmZXIpCi0JCQkgcHktZXhjZXB0aW9uLWJ1ZmZlcikpCi0JCSAgICAgICgoYW5kIChjb25zcCBweS1leGNlcHRpb24tYnVmZmVyKQotCQkJICAgIChzdHJpbmctZXF1YWwgZmlsZSAoY2FyIHB5LWV4Y2VwdGlvbi1idWZmZXIpKSkKLQkJICAgICAgIChjZHIgcHktZXhjZXB0aW9uLWJ1ZmZlcikpCi0JCSAgICAgICgocHktc2FmZSAoZmluZC1maWxlLW5vc2VsZWN0IGZpbGUpKSkKLQkJICAgICAgOzsgY291bGQgbm90IGZpZ3VyZSBvdXQgd2hhdCBmaWxlIHRoZSBleGNlcHRpb24KLQkJICAgICAgOzsgaXMgcG9pbnRpbmcgdG8sIHNvIHByb21wdCBmb3IgaXQKLQkJICAgICAgKHQgKGZpbmQtZmlsZSAocmVhZC1maWxlLW5hbWUgIkV4Y2VwdGlvbiBmaWxlOiAiCi0JCQkJCQkgICAgbmlsCi0JCQkJCQkgICAgZmlsZSB0KSkpKSkpCi0gICAgOzsgRmlkZGxlIGFib3V0IHdpdGggbGluZSBudW1iZXIKLSAgICAoc2V0cSBsaW5lICgrIHB5LWxpbmUtbnVtYmVyLW9mZnNldCBsaW5lKSkKLQotICAgIChwb3AtdG8tYnVmZmVyIGJ1ZmZlcikKLSAgICA7OyBGb3JjZSBQeXRob24gbW9kZQotICAgIChpZiAobm90IChlcSBtYWpvci1tb2RlICdweXRob24tbW9kZSkpCi0JKHB5dGhvbi1tb2RlKSkKLSAgICAoZ290by1saW5lIGxpbmUpCi0gICAgKG1lc3NhZ2UgIkp1bXBpbmcgdG8gZXhjZXB0aW9uIGluIGZpbGUgJXMgb24gbGluZSAlZCIgZmlsZSBsaW5lKSkpCi0KLShkZWZ1biBweS1tb3VzZXRvLWV4Y2VwdGlvbiAoZXZlbnQpCi0gICJKdW1wIHRvIHRoZSBjb2RlIHdoaWNoIGNhdXNlZCB0aGUgUHl0aG9uIGV4Y2VwdGlvbiBhdCBFVkVOVC4KLUVWRU5UIGlzIHVzdWFsbHkgYSBtb3VzZSBjbGljay4iCi0gIChpbnRlcmFjdGl2ZSAiZSIpCi0gIChjb25kCi0gICAoKGZib3VuZHAgJ2V2ZW50LXBvaW50KQotICAgIDs7IFhFbWFjcwotICAgIChsZXQqICgocG9pbnQgKGV2ZW50LXBvaW50IGV2ZW50KSkKLQkgICAoYnVmZmVyIChldmVudC1idWZmZXIgZXZlbnQpKQotCSAgIChlIChhbmQgcG9pbnQgYnVmZmVyIChleHRlbnQtYXQgcG9pbnQgYnVmZmVyICdweS1leGMtaW5mbykpKQotCSAgIChpbmZvIChhbmQgZSAoZXh0ZW50LXByb3BlcnR5IGUgJ3B5LWV4Yy1pbmZvKSkpKQotICAgICAgKG1lc3NhZ2UgIkV2ZW50IHBvaW50OiAlZCwgaW5mbzogJXMiIHBvaW50IGluZm8pCi0gICAgICAoYW5kIGluZm8KLQkgICAocHktanVtcC10by1leGNlcHRpb24gKGNhciBpbmZvKSAoY2RyIGluZm8pKSkKLSAgICAgICkpCi0gICA7OyBFbWFjcyAtLSBQbGVhc2UgcG9ydCB0aGlzIQotICAgKSkKLQotKGRlZnVuIHB5LWdvdG8tZXhjZXB0aW9uICgpCi0gICJHbyB0byB0aGUgbGluZSBpbmRpY2F0ZWQgYnkgdGhlIHRyYWNlYmFjay4iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKGxldCAoZmlsZSBsaW5lKQotICAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgICAgKGlmIChsb29raW5nLWF0IHB5LXRyYWNlYmFjay1saW5lLXJlKQotCSAgKHNldHEgZmlsZSAobWF0Y2gtc3RyaW5nIDEpCi0JCWxpbmUgKHN0cmluZy10by1pbnQgKG1hdGNoLXN0cmluZyAyKSkpKSkKLSAgICAoaWYgKG5vdCBmaWxlKQotCShlcnJvciAiTm90IG9uIGEgdHJhY2ViYWNrIGxpbmUiKSkKLSAgICAocHktanVtcC10by1leGNlcHRpb24gZmlsZSBsaW5lKSkpCi0KLShkZWZ1biBweS1maW5kLW5leHQtZXhjZXB0aW9uIChzdGFydCBidWZmZXIgc2VhcmNoZGlyIGVycndoZXJlKQotICAiRmluZCB0aGUgbmV4dCBQeXRob24gZXhjZXB0aW9uIGFuZCBqdW1wIHRvIHRoZSBjb2RlIHRoYXQgY2F1c2VkIGl0LgotU1RBUlQgaXMgdGhlIGJ1ZmZlciBwb3NpdGlvbiBpbiBCVUZGRVIgZnJvbSB3aGljaCB0byBiZWdpbiBzZWFyY2hpbmcKLWZvciBhbiBleGNlcHRpb24uICBTRUFSQ0hESVIgaXMgYSBmdW5jdGlvbiwgZWl0aGVyCi1gcmUtc2VhcmNoLWJhY2t3YXJkJyBvciBgcmUtc2VhcmNoLWZvcndhcmQnIGluZGljYXRpbmcgdGhlIGRpcmVjdGlvbgotdG8gc2VhcmNoLiAgRVJSV0hFUkUgaXMgdXNlZCBpbiBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBsaW1pdCAodG9wIG9yCi1ib3R0b20pIG9mIHRoZSB0cmFja2JhY2sgc3RhY2sgaXMgZW5jb3VudGVyZWQuIgotICAobGV0IChmaWxlIGxpbmUpCi0gICAgKHNhdmUtZXhjdXJzaW9uCi0gICAgICAoc2V0LWJ1ZmZlciBidWZmZXIpCi0gICAgICAoZ290by1jaGFyIChweS1wb2ludCBzdGFydCkpCi0gICAgICAoaWYgKGZ1bmNhbGwgc2VhcmNoZGlyIHB5LXRyYWNlYmFjay1saW5lLXJlIG5pbCB0KQotCSAgKHNldHEgZmlsZSAobWF0Y2gtc3RyaW5nIDEpCi0JCWxpbmUgKHN0cmluZy10by1pbnQgKG1hdGNoLXN0cmluZyAyKSkpKSkKLSAgICAoaWYgKGFuZCBmaWxlIGxpbmUpCi0JKHB5LWp1bXAtdG8tZXhjZXB0aW9uIGZpbGUgbGluZSkKLSAgICAgIChlcnJvciAiJXMgb2YgdHJhY2ViYWNrIiBlcnJ3aGVyZSkpKSkKLQotKGRlZnVuIHB5LWRvd24tZXhjZXB0aW9uICgmb3B0aW9uYWwgYm90dG9tKQotICAiR28gdG8gdGhlIG5leHQgbGluZSBkb3duIGluIHRoZSB0cmFjZWJhY2suCi1XaXRoIFxcW3VuaXZlcmFsLWFyZ3VtZW50XSAocHJvZ3JhbW1hdGljYWxseSwgb3B0aW9uYWwgYXJndW1lbnQKLUJPVFRPTSksIGp1bXAgdG8gdGhlIGJvdHRvbSAoaW5uZXJtb3N0KSBleGNlcHRpb24gaW4gdGhlIGV4Y2VwdGlvbgotc3RhY2suIgotICAoaW50ZXJhY3RpdmUgIlAiKQotICAobGV0KiAoKHByb2MgKGdldC1wcm9jZXNzICJQeXRob24iKSkKLQkgKGJ1ZmZlciAoaWYgcHJvYyAiKlB5dGhvbioiIHB5LW91dHB1dC1idWZmZXIpKSkKLSAgICAoaWYgYm90dG9tCi0JKHB5LWZpbmQtbmV4dC1leGNlcHRpb24gJ2VvYiBidWZmZXIgJ3JlLXNlYXJjaC1iYWNrd2FyZCAiQm90dG9tIikKLSAgICAgIChweS1maW5kLW5leHQtZXhjZXB0aW9uICdlb2wgYnVmZmVyICdyZS1zZWFyY2gtZm9yd2FyZCAiQm90dG9tIikpKSkKLQotKGRlZnVuIHB5LXVwLWV4Y2VwdGlvbiAoJm9wdGlvbmFsIHRvcCkKLSAgIkdvIHRvIHRoZSBwcmV2aW91cyBsaW5lIHVwIGluIHRoZSB0cmFjZWJhY2suCi1XaXRoIFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gKHByb2dyYW1tYXRpY2FsbHksIG9wdGlvbmFsIGFyZ3VtZW50IFRPUCkKLWp1bXAgdG8gdGhlIHRvcCAob3V0ZXJtb3N0KSBleGNlcHRpb24gaW4gdGhlIGV4Y2VwdGlvbiBzdGFjay4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCi0gIChsZXQqICgocHJvYyAoZ2V0LXByb2Nlc3MgIlB5dGhvbiIpKQotCSAoYnVmZmVyIChpZiBwcm9jICIqUHl0aG9uKiIgcHktb3V0cHV0LWJ1ZmZlcikpKQotICAgIChpZiB0b3AKLQkocHktZmluZC1uZXh0LWV4Y2VwdGlvbiAnYm9iIGJ1ZmZlciAncmUtc2VhcmNoLWZvcndhcmQgIlRvcCIpCi0gICAgICAocHktZmluZC1uZXh0LWV4Y2VwdGlvbiAnYm9sIGJ1ZmZlciAncmUtc2VhcmNoLWJhY2t3YXJkICJUb3AiKSkpKQotCi0MCi07OyBFbGVjdHJpYyBkZWxldGlvbgotKGRlZnVuIHB5LWVsZWN0cmljLWJhY2tzcGFjZSAoYXJnKQotICAiRGVsZXRlIHByZWNlZGluZyBjaGFyYWN0ZXIgb3IgbGV2ZWxzIG9mIGluZGVudGF0aW9uLgotRGVsZXRpb24gaXMgcGVyZm9ybWVkIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGluIGBweS1iYWNrc3BhY2UtZnVuY3Rpb24nCi13aXRoIGEgc2luZ2xlIGFyZ3VtZW50ICh0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gZGVsZXRlKS4KLQotSWYgcG9pbnQgaXMgYXQgdGhlIGxlZnRtb3N0IGNvbHVtbiwgZGVsZXRlIHRoZSBwcmVjZWRpbmcgbmV3bGluZS4KLQotT3RoZXJ3aXNlLCBpZiBwb2ludCBpcyBhdCB0aGUgbGVmdG1vc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIG9mIGEKLWxpbmUgdGhhdCBpcyBuZWl0aGVyIGEgY29udGludWF0aW9uIGxpbmUgbm9yIGEgbm9uLWluZGVudGluZyBjb21tZW50Ci1saW5lLCBvciBpZiBwb2ludCBpcyBhdCB0aGUgZW5kIG9mIGEgYmxhbmsgbGluZSwgdGhpcyBjb21tYW5kIHJlZHVjZXMKLXRoZSBpbmRlbnRhdGlvbiB0byBtYXRjaCB0aGF0IG9mIHRoZSBsaW5lIHRoYXQgb3BlbmVkIHRoZSBjdXJyZW50Ci1ibG9jayBvZiBjb2RlLiAgVGhlIGxpbmUgdGhhdCBvcGVuZWQgdGhlIGJsb2NrIGlzIGRpc3BsYXllZCBpbiB0aGUKLWVjaG8gYXJlYSB0byBoZWxwIHlvdSBrZWVwIHRyYWNrIG9mIHdoZXJlIHlvdSBhcmUuICBXaXRoCi1cXFt1bml2ZXJzYWwtYXJndW1lbnRdIGRlZGVudHMgdGhhdCBtYW55IGJsb2NrcyAoYnV0IG5vdCBwYXN0IGNvbHVtbgotemVybykuCi0KLU90aGVyd2lzZSB0aGUgcHJlY2VkaW5nIGNoYXJhY3RlciBpcyBkZWxldGVkLCBjb252ZXJ0aW5nIGEgdGFiIHRvCi1zcGFjZXMgaWYgbmVlZGVkIHNvIHRoYXQgb25seSBhIHNpbmdsZSBjb2x1bW4gcG9zaXRpb24gaXMgZGVsZXRlZC4KLVxcW3VuaXZlcnNhbC1hcmd1bWVudF0gc3BlY2lmaWVzIGhvdyBtYW55IGNoYXJhY3RlcnMgdG8gZGVsZXRlOwotZGVmYXVsdCBpcyAxLgotCi1XaGVuIHVzZWQgcHJvZ3JhbW1hdGljYWxseSwgYXJndW1lbnQgQVJHIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mCi1ibG9ja3MgdG8gZGVkZW50LCBvciB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gZGVsZXRlLCBhcyBpbmRpY2F0ZWQKLWFib3ZlLiIKLSAgKGludGVyYWN0aXZlICIqcCIpCi0gIChpZiAob3IgKC89IChjdXJyZW50LWluZGVudGF0aW9uKSAoY3VycmVudC1jb2x1bW4pKQotCSAgKGJvbHApCi0JICAocHktY29udGludWF0aW9uLWxpbmUtcCkKLTsJICAobm90IHB5LWhvbm9yLWNvbW1lbnQtaW5kZW50YXRpb24pCi07CSAgKGxvb2tpbmctYXQgIiNbXiBcdFxuXSIpCTsgbm9uLWluZGVudGluZyAjCi0JICApCi0gICAgICAoZnVuY2FsbCBweS1iYWNrc3BhY2UtZnVuY3Rpb24gYXJnKQotICAgIDs7IGVsc2UgaW5kZW50IHRoZSBzYW1lIGFzIHRoZSBjb2xvbiBsaW5lIHRoYXQgb3BlbmVkIHRoZSBibG9jawotICAgIDs7IGZvcmNlIG5vbi1ibGFuayBzbyBweS1nb3RvLWJsb2NrLXVwIGRvZXNuJ3QgaWdub3JlIGl0Ci0gICAgKGluc2VydC1jaGFyID8qIDEpCi0gICAgKGJhY2t3YXJkLWNoYXIpCi0gICAgKGxldCAoKGJhc2UtaW5kZW50IDApCQk7IGluZGVudGF0aW9uIG9mIGJhc2UgbGluZQotCSAgKGJhc2UtdGV4dCAiIikJCTsgYW5kIHRleHQgb2YgYmFzZSBsaW5lCi0JICAoYmFzZS1mb3VuZC1wIG5pbCkpCi0gICAgICAoc2F2ZS1leGN1cnNpb24KLQkod2hpbGUgKDwgMCBhcmcpCi0JICAoY29uZGl0aW9uLWNhc2UgbmlsCQk7IGluIGNhc2Ugbm8gZW5jbG9zaW5nIGJsb2NrCi0JICAgICAgKHByb2duCi0JCShweS1nb3RvLWJsb2NrLXVwICduby1tYXJrKQotCQkoc2V0cSBiYXNlLWluZGVudCAoY3VycmVudC1pbmRlbnRhdGlvbikKLQkJICAgICAgYmFzZS10ZXh0ICAgKHB5LXN1Y2stdXAtbGVhZGluZy10ZXh0KQotCQkgICAgICBiYXNlLWZvdW5kLXAgdCkpCi0JICAgIChlcnJvciBuaWwpKQotCSAgKHNldHEgYXJnICgxLSBhcmcpKSkpCi0gICAgICAoZGVsZXRlLWNoYXIgMSkJCQk7IHRvc3MgdGhlIGR1bW15IGNoYXJhY3RlcgotICAgICAgKGRlbGV0ZS1ob3Jpem9udGFsLXNwYWNlKQotICAgICAgKGluZGVudC10byBiYXNlLWluZGVudCkKLSAgICAgIChpZiBiYXNlLWZvdW5kLXAKLQkgIChtZXNzYWdlICJDbG9zZXMgYmxvY2s6ICVzIiBiYXNlLXRleHQpKSkpKQotCi0KLShkZWZ1biBweS1lbGVjdHJpYy1kZWxldGUgKGFyZykKLSAgIkRlbGV0ZSBwcmVjZWRpbmcgb3IgZm9sbG93aW5nIGNoYXJhY3RlciBvciBsZXZlbHMgb2Ygd2hpdGVzcGFjZS4KLQotVGhlIGJlaGF2aW9yIG9mIHRoaXMgZnVuY3Rpb24gZGVwZW5kcyBvbiB0aGUgdmFyaWFibGUKLWBkZWxldGUta2V5LWRlbGV0ZXMtZm9yd2FyZCcuICBJZiB0aGlzIHZhcmlhYmxlIGlzIG5pbCAob3IgZG9lcyBub3QKLWV4aXN0LCBhcyBpbiBvbGRlciBFbWFjc2VuIGFuZCBub24tWEVtYWNzIHZlcnNpb25zKSwgdGhlbiB0aGlzCi1mdW5jdGlvbiBiZWhhdmVzIGlkZW50aWNhbGx5IHRvIFxcW2MtZWxlY3RyaWMtYmFja3NwYWNlXS4KLQotSWYgYGRlbGV0ZS1rZXktZGVsZXRlcy1mb3J3YXJkJyBpcyBub24tbmlsIGFuZCBpcyBzdXBwb3J0ZWQgaW4geW91cgotRW1hY3MsIHRoZW4gZGVsZXRpb24gb2NjdXJzIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbiwgYnkgY2FsbGluZyB0aGUKLWZ1bmN0aW9uIGluIGBweS1kZWxldGUtZnVuY3Rpb24nLgotCi1cXFt1bml2ZXJzYWwtYXJndW1lbnRdIChwcm9ncmFtbWF0aWNhbGx5LCBhcmd1bWVudCBBUkcpIHNwZWNpZmllcyB0aGUKLW51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGRlbGV0ZSAoZGVmYXVsdCBpcyAxKS4iCi0gIChpbnRlcmFjdGl2ZSAiKnAiKQotICAoaWYgKG9yIChhbmQgKGZib3VuZHAgJ2RlbGV0ZS1mb3J3YXJkLXApIDtYRW1hY3MgMjEKLQkgICAgICAgKGRlbGV0ZS1mb3J3YXJkLXApKQotCSAgKGFuZCAoYm91bmRwICdkZWxldGUta2V5LWRlbGV0ZXMtZm9yd2FyZCkgO1hFbWFjcyAyMAotCSAgICAgICBkZWxldGUta2V5LWRlbGV0ZXMtZm9yd2FyZCkpCi0gICAgICAoZnVuY2FsbCBweS1kZWxldGUtZnVuY3Rpb24gYXJnKQotICAgIChweS1lbGVjdHJpYy1iYWNrc3BhY2UgYXJnKSkpCi0KLTs7IHJlcXVpcmVkIGZvciBwZW5kaW5nLWRlbCBhbmQgZGVsc2VsIG1vZGVzCi0ocHV0ICdweS1lbGVjdHJpYy1jb2xvbiAnZGVsZXRlLXNlbGVjdGlvbiB0KSA7ZGVsc2VsCi0ocHV0ICdweS1lbGVjdHJpYy1jb2xvbiAncGVuZGluZy1kZWxldGUgICB0KSA7cGVuZGluZy1kZWwKLShwdXQgJ3B5LWVsZWN0cmljLWJhY2tzcGFjZSAnZGVsZXRlLXNlbGVjdGlvbiAnc3VwZXJzZWRlKSA7ZGVsc2VsCi0ocHV0ICdweS1lbGVjdHJpYy1iYWNrc3BhY2UgJ3BlbmRpbmctZGVsZXRlICAgJ3N1cGVyc2VkZSkgO3BlbmRpbmctZGVsCi0ocHV0ICdweS1lbGVjdHJpYy1kZWxldGUgICAgJ2RlbGV0ZS1zZWxlY3Rpb24gJ3N1cGVyc2VkZSkgO2RlbHNlbAotKHB1dCAncHktZWxlY3RyaWMtZGVsZXRlICAgICdwZW5kaW5nLWRlbGV0ZSAgICdzdXBlcnNlZGUpIDtwZW5kaW5nLWRlbAotCi0KLQwKLShkZWZ1biBweS1pbmRlbnQtbGluZSAoJm9wdGlvbmFsIGFyZykKLSAgIkZpeCB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbGluZSBhY2NvcmRpbmcgdG8gUHl0aG9uIHJ1bGVzLgotV2l0aCBcXFt1bml2ZXJzYWwtYXJndW1lbnRdIChwcm9ncmFtbWF0aWNhbGx5LCB0aGUgb3B0aW9uYWwgYXJndW1lbnQKLUFSRyBub24tbmlsKSwgaWdub3JlIGRlZGVudGluZyBydWxlcyBmb3IgYmxvY2sgY2xvc2luZyBzdGF0ZW1lbnRzCi0oZS5nLiByZXR1cm4sIHJhaXNlLCBicmVhaywgY29udGludWUsIHBhc3MpCi0KLVRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgYm91bmQgdG8gYGluZGVudC1saW5lLWZ1bmN0aW9uJyBzbwotXFxbaW5kZW50LWZvci10YWItY29tbWFuZF0gd2lsbCBjYWxsIGl0LiIKLSAgKGludGVyYWN0aXZlICJQIikKLSAgKGxldCogKChjaSAoY3VycmVudC1pbmRlbnRhdGlvbikpCi0JIChtb3ZlLXRvLWluZGVudGF0aW9uLXAgKDw9IChjdXJyZW50LWNvbHVtbikgY2kpKQotCSAobmVlZCAocHktY29tcHV0ZS1pbmRlbnRhdGlvbiAobm90IGFyZykpKQotICAgICAgICAgKGNjIChjdXJyZW50LWNvbHVtbikpKQotICAgIDs7IGRlZGVudCBvdXQgYSBsZXZlbCBpZiBwcmV2aW91cyBjb21tYW5kIHdhcyB0aGUgc2FtZSB1bmxlc3Mgd2UncmUgaW4KLSAgICA7OyBjb2x1bW4gMQotICAgIChpZiAoYW5kIChlcXVhbCBsYXN0LWNvbW1hbmQgdGhpcy1jb21tYW5kKQotICAgICAgICAgICAgICgvPSBjYyAwKSkKLSAgICAgICAgKHByb2duCi0gICAgICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgICAgICAgIChkZWxldGUtaG9yaXpvbnRhbC1zcGFjZSkKLSAgICAgICAgICAoaW5kZW50LXRvICgqICgvICgtIGNjIDEpIHB5LWluZGVudC1vZmZzZXQpIHB5LWluZGVudC1vZmZzZXQpKSkKLSAgICAgIChwcm9nbgotCTs7IHNlZSBpZiB3ZSBuZWVkIHRvIGRlZGVudAotCShpZiAocHktb3V0ZGVudC1wKQotCSAgICAoc2V0cSBuZWVkICgtIG5lZWQgcHktaW5kZW50LW9mZnNldCkpKQotCShpZiAob3IgcHktdGFiLWFsd2F5cy1pbmRlbnQKLQkJbW92ZS10by1pbmRlbnRhdGlvbi1wKQotCSAgICAocHJvZ24gKGlmICgvPSBjaSBuZWVkKQotCQkgICAgICAgKHNhdmUtZXhjdXJzaW9uCi0JCSAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCi0JCSAgICAgICAoZGVsZXRlLWhvcml6b250YWwtc3BhY2UpCi0JCSAgICAgICAoaW5kZW50LXRvIG5lZWQpKSkKLQkJICAgKGlmIG1vdmUtdG8taW5kZW50YXRpb24tcCAoYmFjay10by1pbmRlbnRhdGlvbikpKQotCSAgICAoaW5zZXJ0LXRhYikpKSkpKQotCi0oZGVmdW4gcHktbmV3bGluZS1hbmQtaW5kZW50ICgpCi0gICJTdHJpdmVzIHRvIGFjdCBsaWtlIHRoZSBFbWFjcyBgbmV3bGluZS1hbmQtaW5kZW50Jy4KLVRoaXMgaXMganVzdCBgc3RyaXZlcyB0bycgYmVjYXVzZSBjb3JyZWN0IGluZGVudGF0aW9uIGNhbid0IGJlIGNvbXB1dGVkCi1mcm9tIHNjcmF0Y2ggZm9yIFB5dGhvbiBjb2RlLiAgSW4gZ2VuZXJhbCwgZGVsZXRlcyB0aGUgd2hpdGVzcGFjZSBiZWZvcmUKLXBvaW50LCBpbnNlcnRzIGEgbmV3bGluZSwgYW5kIHRha2VzIGFuIGVkdWNhdGVkIGd1ZXNzIGFzIHRvIGhvdyB5b3Ugd2FudAotdGhlIG5ldyBsaW5lIGluZGVudGVkLiIKLSAgKGludGVyYWN0aXZlKQotICAobGV0ICgoY2kgKGN1cnJlbnQtaW5kZW50YXRpb24pKSkKLSAgICAoaWYgKDwgY2kgKGN1cnJlbnQtY29sdW1uKSkJCTsgaWYgcG9pbnQgYmV5b25kIGluZGVudGF0aW9uCi0JKG5ld2xpbmUtYW5kLWluZGVudCkKLSAgICAgIDs7IGVsc2UgdHJ5IHRvIGFjdCBsaWtlIG5ld2xpbmUtYW5kLWluZGVudCAibm9ybWFsbHkiIGFjdHMKLSAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAgIChpbnNlcnQtY2hhciA/XG4gMSkKLSAgICAgIChtb3ZlLXRvLWNvbHVtbiBjaSkpKSkKLQotKGRlZnVuIHB5LWNvbXB1dGUtaW5kZW50YXRpb24gKGhvbm9yLWJsb2NrLWNsb3NlLXApCi0gICJDb21wdXRlIFB5dGhvbiBpbmRlbnRhdGlvbi4KLVdoZW4gSE9OT1ItQkxPQ0stQ0xPU0UtUCBpcyBub24tbmlsLCBzdGF0ZW1lbnRzIHN1Y2ggYXMgYHJldHVybicsCi1gcmFpc2UnLCBgYnJlYWsnLCBgY29udGludWUnLCBhbmQgYHBhc3MnIGZvcmNlIG9uZSBsZXZlbCBvZgotZGVkZW50aW5nLiIKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgIChsZXQqICgoYm9kIChweS1wb2ludCAnYm9kKSkKLQkgICAocHBzIChwYXJzZS1wYXJ0aWFsLXNleHAgYm9kIChwb2ludCkpKQotCSAgIChib2lwcHMgKHBhcnNlLXBhcnRpYWwtc2V4cCBib2QgKHB5LXBvaW50ICdib2kpKSkKLQkgICBwbGFjZWhvbGRlcikKLSAgICAgIChjb25kCi0gICAgICAgOzsgYXJlIHdlIGluc2lkZSBhIG11bHRpLWxpbmUgc3RyaW5nIG9yIGNvbW1lbnQ/Ci0gICAgICAgKChvciAoYW5kIChudGggMyBwcHMpIChudGggMyBib2lwcHMpKQotCSAgICAoYW5kIChudGggNCBwcHMpIChudGggNCBib2lwcHMpKSkKLQkoc2F2ZS1leGN1cnNpb24KLQkgIChpZiAobm90IHB5LWFsaWduLW11bHRpbGluZS1zdHJpbmdzLXApIDAKLQkgICAgOzsgc2tpcCBiYWNrIG92ZXIgYmxhbmsgJiBub24taW5kZW50aW5nIGNvbW1lbnQgbGluZXMKLQkgICAgOzsgbm90ZTogd2lsbCBza2lwIGEgYmxhbmsgb3Igbm9uLWluZGVudGluZyBjb21tZW50IGxpbmUKLQkgICAgOzsgdGhhdCBoYXBwZW5zIHRvIGJlIGEgY29udGludWF0aW9uIGxpbmUgdG9vCi0JICAgIChyZS1zZWFyY2gtYmFja3dhcmQgIl5bIFx0XSpcXChbXiBcdFxuI11cXHwjWyBcdFxuXVxcKSIgbmlsICdtb3ZlKQotCSAgICAoYmFjay10by1pbmRlbnRhdGlvbikKLQkgICAgKGN1cnJlbnQtY29sdW1uKSkpKQotICAgICAgIDs7IGFyZSB3ZSBvbiBhIGNvbnRpbnVhdGlvbiBsaW5lPwotICAgICAgICgocHktY29udGludWF0aW9uLWxpbmUtcCkKLQkobGV0ICgoc3RhcnRwb3MgKHBvaW50KSkKLQkgICAgICAob3Blbi1icmFja2V0LXBvcyAocHktbmVzdGluZy1sZXZlbCkpCi0JICAgICAgZW5kcG9zIHNlYXJjaGluZyBmb3VuZCBzdGF0ZSBjaW5kIGNsaW5lKQotCSAgKGlmIG9wZW4tYnJhY2tldC1wb3MKLQkgICAgICAocHJvZ24KLQkJKHNldHEgZW5kcG9zIChweS1wb2ludCAnYm9sKSkKLQkJKHB5LWdvdG8taW5pdGlhbC1saW5lKQotCQkoc2V0cSBjaW5kIChjdXJyZW50LWluZGVudGF0aW9uKSkKLQkJKHNldHEgY2xpbmUgY2luZCkKLQkJKGRvbGlzdCAoYnAgCi0JCQkgKG50aCA5IChzYXZlLWV4Y3Vyc2lvbgotCQkJCSAgKHBhcnNlLXBhcnRpYWwtc2V4cCAocG9pbnQpIGVuZHBvcykpKQotCQkJIGNpbmQpCi0JCSAgKGlmIChzZWFyY2gtZm9yd2FyZCAiXG4iIGJwIHQpIChzZXRxIGNsaW5lIGNpbmQpKQotCQkgIChnb3RvLWNoYXIgKDErIGJwKSkKLQkJICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHQiKQotCQkgIChzZXRxIGNpbmQgKGlmIChtZW1xIChmb2xsb3dpbmctY2hhcikgJyg/XG4gPyMgP1xcKSkKLQkJCQkgKCsgY2xpbmUgcHktaW5kZW50LW9mZnNldCkKLQkJCSAgICAgICAoY3VycmVudC1jb2x1bW4pKSkpKQotCSAgICA7OyBlbHNlIG9uIGJhY2tzbGFzaCBjb250aW51YXRpb24gbGluZQotCSAgICAoZm9yd2FyZC1saW5lIC0xKQotCSAgICAoaWYgKHB5LWNvbnRpbnVhdGlvbi1saW5lLXApIDsgb24gYXQgbGVhc3QgM3JkIGxpbmUgaW4gYmxvY2sKLQkJKGN1cnJlbnQtaW5kZW50YXRpb24pCTsgc28ganVzdCBjb250aW51ZSB0aGUgcGF0dGVybgotCSAgICAgIDs7IGVsc2Ugc3RhcnRlZCBvbiAybmQgbGluZSBpbiBibG9jaywgc28gaW5kZW50IG1vcmUuCi0JICAgICAgOzsgaWYgYmFzZSBsaW5lIGlzIGFuIGFzc2lnbm1lbnQgd2l0aCBhIHN0YXJ0IG9uIGEgUkhTLAotCSAgICAgIDs7IGluZGVudCB0byAyIGJleW9uZCB0aGUgbGVmdG1vc3QgIj0iOyBlbHNlIHNraXAgZmlyc3QKLQkgICAgICA7OyBjaHVuayBvZiBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIG9uIGJhc2UgbGluZSwgKyAxIG1vcmUKLQkgICAgICA7OyBjb2x1bW4KLQkgICAgICAoZW5kLW9mLWxpbmUpCi0JICAgICAgKHNldHEgZW5kcG9zIChwb2ludCkKLQkJICAgIHNlYXJjaGluZyB0KQotCSAgICAgIChiYWNrLXRvLWluZGVudGF0aW9uKQotCSAgICAgIChzZXRxIHN0YXJ0cG9zIChwb2ludCkpCi0JICAgICAgOzsgbG9vayBhdCBhbGwgIj0iIGZyb20gbGVmdCB0byByaWdodCwgc3RvcHBpbmcgYXQgZmlyc3QKLQkgICAgICA7OyBvbmUgbm90IG5lc3RlZCBpbiBhIGxpc3Qgb3Igc3RyaW5nCi0JICAgICAgKHdoaWxlIHNlYXJjaGluZwotCQkoc2tpcC1jaGFycy1mb3J3YXJkICJePSIgZW5kcG9zKQotCQkoaWYgKD0gKHBvaW50KSBlbmRwb3MpCi0JCSAgICAoc2V0cSBzZWFyY2hpbmcgbmlsKQotCQkgIChmb3J3YXJkLWNoYXIgMSkKLQkJICAoc2V0cSBzdGF0ZSAocGFyc2UtcGFydGlhbC1zZXhwIHN0YXJ0cG9zIChwb2ludCkpKQotCQkgIChpZiAoYW5kICh6ZXJvcCAoY2FyIHN0YXRlKSkgOyBub3QgaW4gYSBicmFja2V0Ci0JCQkgICAobnVsbCAobnRoIDMgc3RhdGUpKSkgOyAmIG5vdCBpbiBhIHN0cmluZwotCQkgICAgICAocHJvZ24KLQkJCShzZXRxIHNlYXJjaGluZyBuaWwpIDsgZG9uZSBzZWFyY2hpbmcgaW4gYW55IGNhc2UKLQkJCShzZXRxIGZvdW5kCi0JCQkgICAgICAobm90IChvcgotCQkJCSAgICAoZXEgKGZvbGxvd2luZy1jaGFyKSA/PSkKLQkJCQkgICAgKG1lbXEgKGNoYXItYWZ0ZXIgKC0gKHBvaW50KSAyKSkKLQkJCQkJICAnKD88ID8+ID8hKSkpKSkpKSkpCi0JICAgICAgKGlmIChvciAobm90IGZvdW5kKQk7IG5vdCBhbiBhc3NpZ25tZW50Ci0JCSAgICAgIChsb29raW5nLWF0ICJbIFx0XSpcXFxcIikpIDsgPD0+PHNwYWNlcz48YmFja3NsYXNoPgotCQkgIChwcm9nbgotCQkgICAgKGdvdG8tY2hhciBzdGFydHBvcykKLQkJICAgIChza2lwLWNoYXJzLWZvcndhcmQgIl4gXHRcbiIpKSkKLQkgICAgICA7OyBpZiB0aGlzIGlzIGEgY29udGludWF0aW9uIGZvciBhIGJsb2NrIG9wZW5pbmcKLQkgICAgICA7OyBzdGF0ZW1lbnQsIGFkZCBzb21lIGV4dHJhIG9mZnNldC4KLQkgICAgICAoKyAoY3VycmVudC1jb2x1bW4pIChpZiAocHktc3RhdGVtZW50LW9wZW5zLWJsb2NrLXApCi0JCQkJICAgICAgcHktY29udGludWF0aW9uLW9mZnNldCAwKQotCQkgMSkKLQkgICAgICApKSkpCi0KLSAgICAgICA7OyBub3Qgb24gYSBjb250aW51YXRpb24gbGluZQotICAgICAgICgoYm9icCkgKGN1cnJlbnQtaW5kZW50YXRpb24pKQotCi0gICAgICAgOzsgRGZuOiAiSW5kZW50aW5nIGNvbW1lbnQgbGluZSIuICBBIGxpbmUgY29udGFpbmluZyBvbmx5IGEKLSAgICAgICA7OyBjb21tZW50LCBidXQgd2hpY2ggaXMgdHJlYXRlZCBsaWtlIGEgc3RhdGVtZW50IGZvcgotICAgICAgIDs7IGluZGVudGF0aW9uIGNhbGN1bGF0aW9uIHB1cnBvc2VzLiAgU3VjaCBsaW5lcyBhcmUgb25seQotICAgICAgIDs7IHRyZWF0ZWQgc3BlY2lhbGx5IGJ5IHRoZSBtb2RlOyB0aGV5IGFyZSBub3QgdHJlYXRlZAotICAgICAgIDs7IHNwZWNpYWxseSBieSB0aGUgUHl0aG9uIGludGVycHJldGVyLgotCi0gICAgICAgOzsgVGhlIHJ1bGVzIGZvciBpbmRlbnRpbmcgY29tbWVudCBsaW5lcyBhcmUgYSBsaW5lIHdoZXJlOgotICAgICAgIDs7ICAgLSB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGAjJywgYW5kCi0gICAgICAgOzsgICAtIHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBgIycgaXMgd2hpdGVzcGFjZSwgYW5kCi0gICAgICAgOzsgICAtIHRoZSBsaW5lIGlzIGRlZGVudGVkIHdpdGggcmVzcGVjdCB0byAoaS5lLiB0byB0aGUgbGVmdAotICAgICAgIDs7ICAgICBvZikgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBwcmVjZWRpbmcgbm9uLWJsYW5rIGxpbmUuCi0KLSAgICAgICA7OyBUaGUgZmlyc3Qgbm9uLWJsYW5rIGxpbmUgZm9sbG93aW5nIGFuIGluZGVudGluZyBjb21tZW50Ci0gICAgICAgOzsgbGluZSBpcyBnaXZlbiB0aGUgc2FtZSBhbW91bnQgb2YgaW5kZW50YXRpb24gYXMgdGhlCi0gICAgICAgOzsgaW5kZW50aW5nIGNvbW1lbnQgbGluZS4KLQotICAgICAgIDs7IEFsbCBvdGhlciBjb21tZW50LW9ubHkgbGluZXMgYXJlIGlnbm9yZWQgZm9yIGluZGVudGF0aW9uCi0gICAgICAgOzsgcHVycG9zZXMuCi0KLSAgICAgICA7OyBBcmUgd2UgbG9va2luZyBhdCBhIGNvbW1lbnQtb25seSBsaW5lIHdoaWNoIGlzICpub3QqIGFuCi0gICAgICAgOzsgaW5kZW50aW5nIGNvbW1lbnQgbGluZT8gIElmIHNvLCB3ZSBhc3N1bWUgdGhhdCBpdCdzIGJlZW4KLSAgICAgICA7OyBwbGFjZWQgYXQgdGhlIGRlc2lyZWQgaW5kZW50YXRpb24sIHNvIGxlYXZlIGl0IGFsb25lLgotICAgICAgIDs7IEluZGVudGluZyBjb21tZW50IGxpbmVzIGFyZSBhbGlnbmVkIGFzIHN0YXRlbWVudHMgZG93bgotICAgICAgIDs7IGJlbG93LgotICAgICAgICgoYW5kIChsb29raW5nLWF0ICJbIFx0XSojW14gXHRcbl0iKQotCSAgICAgOzsgTk9URTogdGhpcyB0ZXN0IHdpbGwgbm90IGJlIHBlcmZvcm1lZCBpbiBvbGRlciBFbWFjc2VuCi0JICAgICAoZmJvdW5kcCAnZm9yd2FyZC1jb21tZW50KQotCSAgICAgKDw9IChjdXJyZW50LWluZGVudGF0aW9uKQotCQkgKHNhdmUtZXhjdXJzaW9uCi0JCSAgIChmb3J3YXJkLWNvbW1lbnQgKC0gKHBvaW50LW1heCkpKQotCQkgICAoY3VycmVudC1pbmRlbnRhdGlvbikpKSkKLQkoY3VycmVudC1pbmRlbnRhdGlvbikpCi0KLSAgICAgICA7OyBlbHNlIGluZGVudGF0aW9uIGJhc2VkIG9uIHRoYXQgb2YgdGhlIHN0YXRlbWVudCB0aGF0Ci0gICAgICAgOzsgcHJlY2VkZXMgdXM7IHVzZSB0aGUgZmlyc3QgbGluZSBvZiB0aGF0IHN0YXRlbWVudCB0bwotICAgICAgIDs7IGVzdGFibGlzaCB0aGUgYmFzZSwgaW4gY2FzZSB0aGUgdXNlciBmb3JjZWQgYSBub24tc3RkCi0gICAgICAgOzsgaW5kZW50YXRpb24gZm9yIHRoZSBjb250aW51YXRpb24gbGluZXMgKGlmIGFueSkKLSAgICAgICAodAotCTs7IHNraXAgYmFjayBvdmVyIGJsYW5rICYgbm9uLWluZGVudGluZyBjb21tZW50IGxpbmVzIG5vdGU6Ci0JOzsgd2lsbCBza2lwIGEgYmxhbmsgb3Igbm9uLWluZGVudGluZyBjb21tZW50IGxpbmUgdGhhdAotCTs7IGhhcHBlbnMgdG8gYmUgYSBjb250aW51YXRpb24gbGluZSB0b28uICB1c2UgZmFzdCBFbWFjcyAxOQotCTs7IGZ1bmN0aW9uIGlmIGl0J3MgdGhlcmUuCi0JKGlmIChhbmQgKGVxIHB5LWhvbm9yLWNvbW1lbnQtaW5kZW50YXRpb24gbmlsKQotCQkgKGZib3VuZHAgJ2ZvcndhcmQtY29tbWVudCkpCi0JICAgIChmb3J3YXJkLWNvbW1lbnQgKC0gKHBvaW50LW1heCkpKQotCSAgKGxldCAoKHByZWZpeC1yZSAoY29uY2F0IHB5LWJsb2NrLWNvbW1lbnQtcHJlZml4ICJbIFx0XSoiKSkKLQkJZG9uZSkKLQkgICAgKHdoaWxlIChub3QgZG9uZSkKLQkgICAgICAocmUtc2VhcmNoLWJhY2t3YXJkICJeWyBcdF0qXFwoW14gXHRcbiNdXFx8I1xcKSIgbmlsICdtb3ZlKQotCSAgICAgIChzZXRxIGRvbmUgKG9yIChib2JwKQotCQkJICAgICAoYW5kIChlcSBweS1ob25vci1jb21tZW50LWluZGVudGF0aW9uIHQpCi0JCQkJICAoc2F2ZS1leGN1cnNpb24KLQkJCQkgICAgKGJhY2stdG8taW5kZW50YXRpb24pCi0JCQkJICAgIChub3QgKGxvb2tpbmctYXQgcHJlZml4LXJlKSkKLQkJCQkgICAgKSkKLQkJCSAgICAgKGFuZCAobm90IChlcSBweS1ob25vci1jb21tZW50LWluZGVudGF0aW9uIHQpKQotCQkJCSAgKHNhdmUtZXhjdXJzaW9uCi0JCQkJICAgIChiYWNrLXRvLWluZGVudGF0aW9uKQotCQkJCSAgICAoYW5kIChub3QgKGxvb2tpbmctYXQgcHJlZml4LXJlKSkKLQkJCQkJIChvciAobG9va2luZy1hdCAiW14jXSIpCi0JCQkJCSAgICAgKG5vdCAoemVyb3AgKGN1cnJlbnQtY29sdW1uKSkpCi0JCQkJCSAgICAgKSkKLQkJCQkgICAgKSkKLQkJCSAgICAgKSkKLQkgICAgICApKSkKLQk7OyBpZiB3ZSBsYW5kZWQgaW5zaWRlIGEgc3RyaW5nLCBnbyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoYXQKLQk7OyBzdHJpbmcuIHRoaXMgaGFuZGxlcyB0cmlwbGUgcXVvdGVkLCBtdWx0aS1saW5lIHNwYW5uaW5nCi0JOzsgc3RyaW5ncy4KLQkocHktZ290by1iZWdpbm5pbmctb2YtdHFzIChudGggMyAocGFyc2UtcGFydGlhbC1zZXhwIGJvZCAocG9pbnQpKSkpCi0JOzsgbm93IHNraXAgYmFja3dhcmQgb3ZlciBjb250aW51ZWQgbGluZXMKLQkoc2V0cSBwbGFjZWhvbGRlciAocG9pbnQpKQotCShweS1nb3RvLWluaXRpYWwtbGluZSkKLQk7OyB3ZSBtYXkgKm5vdyogaGF2ZSBsYW5kZWQgaW4gYSBUUVMsIHNvIGZpbmQgdGhlIGJlZ2lubmluZyBvZgotCTs7IHRoaXMgc3RyaW5nLgotCShweS1nb3RvLWJlZ2lubmluZy1vZi10cXMKLQkgKHNhdmUtZXhjdXJzaW9uIChudGggMyAocGFyc2UtcGFydGlhbC1zZXhwCi0JCQkJIHBsYWNlaG9sZGVyIChwb2ludCkpKSkpCi0JKCsgKGN1cnJlbnQtaW5kZW50YXRpb24pCi0JICAgKGlmIChweS1zdGF0ZW1lbnQtb3BlbnMtYmxvY2stcCkKLQkgICAgICAgcHktaW5kZW50LW9mZnNldAotCSAgICAgKGlmIChhbmQgaG9ub3ItYmxvY2stY2xvc2UtcCAocHktc3RhdGVtZW50LWNsb3Nlcy1ibG9jay1wKSkKLQkJICgtIHB5LWluZGVudC1vZmZzZXQpCi0JICAgICAgIDApKSkKLQkpKSkpKQotCi0oZGVmdW4gcHktZ3Vlc3MtaW5kZW50LW9mZnNldCAoJm9wdGlvbmFsIGdsb2JhbCkKLSAgIkd1ZXNzIGEgZ29vZCB2YWx1ZSBmb3IsIGFuZCBjaGFuZ2UsIGBweS1pbmRlbnQtb2Zmc2V0Jy4KLQotQnkgZGVmYXVsdCwgbWFrZSBhIGJ1ZmZlci1sb2NhbCBjb3B5IG9mIGBweS1pbmRlbnQtb2Zmc2V0JyB3aXRoIHRoZQotbmV3IHZhbHVlLCBzbyB0aGF0IG90aGVyIFB5dGhvbiBidWZmZXJzIGFyZSBub3QgYWZmZWN0ZWQuICBXaXRoCi1cXFt1bml2ZXJzYWwtYXJndW1lbnRdIChwcm9ncmFtbWF0aWNhbGx5LCBvcHRpb25hbCBhcmd1bWVudCBHTE9CQUwpLAotY2hhbmdlIHRoZSBnbG9iYWwgdmFsdWUgb2YgYHB5LWluZGVudC1vZmZzZXQnLiAgVGhpcyBhZmZlY3RzIGFsbAotUHl0aG9uIGJ1ZmZlcnMgKHRoYXQgZG9uJ3QgaGF2ZSB0aGVpciBvd24gYnVmZmVyLWxvY2FsIGNvcHkpLCBib3RoCi10aG9zZSBjdXJyZW50bHkgZXhpc3RpbmcgYW5kIHRob3NlIGNyZWF0ZWQgbGF0ZXIgaW4gdGhlIEVtYWNzIHNlc3Npb24uCi0KLVNvbWUgcGVvcGxlIHVzZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgYHB5LWluZGVudC1vZmZzZXQnIHRoYW4geW91IHVzZS4KLVRoZXJlJ3Mgbm8gZXhjdXNlIGZvciBzdWNoIGZvb2xpc2huZXNzLCBidXQgc29tZXRpbWVzIHlvdSBoYXZlIHRvIGRlYWwKLXdpdGggdGhlaXIgdWdseSBjb2RlIGFueXdheS4gIFRoaXMgZnVuY3Rpb24gZXhhbWluZXMgdGhlIGZpbGUgYW5kIHNldHMKLWBweS1pbmRlbnQtb2Zmc2V0JyB0byB3aGF0IGl0IHRoaW5rcyBpdCB3YXMgd2hlbiB0aGV5IGNyZWF0ZWQgdGhlCi1tZXNzLgotCi1TcGVjaWZpY2FsbHksIGl0IHNlYXJjaGVzIGZvcndhcmQgZnJvbSB0aGUgc3RhdGVtZW50IGNvbnRhaW5pbmcgcG9pbnQsCi1sb29raW5nIGZvciBhIGxpbmUgdGhhdCBvcGVucyBhIGJsb2NrIG9mIGNvZGUuICBgcHktaW5kZW50LW9mZnNldCcgaXMKLXNldCB0byB0aGUgZGlmZmVyZW5jZSBpbiBpbmRlbnRhdGlvbiBiZXR3ZWVuIHRoYXQgbGluZSBhbmQgdGhlIFB5dGhvbgotc3RhdGVtZW50IGZvbGxvd2luZyBpdC4gIElmIHRoZSBzZWFyY2ggZG9lc24ndCBzdWNjZWVkIGdvaW5nIGZvcndhcmQsCi1pdCdzIHRyaWVkIGFnYWluIGdvaW5nIGJhY2t3YXJkLiIKLSAgKGludGVyYWN0aXZlICJQIikJCQk7IHJhdyBwcmVmaXggYXJnCi0gIChsZXQgKG5ldy12YWx1ZQotCShzdGFydCAocG9pbnQpKQotCShyZXN0YXJ0IChwb2ludCkpCi0JKGZvdW5kIG5pbCkKLQljb2xvbi1pbmRlbnQpCi0gICAgKHB5LWdvdG8taW5pdGlhbC1saW5lKQotICAgICh3aGlsZSAobm90IChvciBmb3VuZCAoZW9icCkpKQotICAgICAgKHdoZW4gKGFuZCAocmUtc2VhcmNoLWZvcndhcmQgIjpbIFx0XSpcXCgkXFx8WyNcXF1cXCkiIG5pbCAnbW92ZSkKLQkJIChub3QgKHB5LWluLWxpdGVyYWwgcmVzdGFydCkpKQotCShzZXRxIHJlc3RhcnQgKHBvaW50KSkKLQkocHktZ290by1pbml0aWFsLWxpbmUpCi0JKGlmIChweS1zdGF0ZW1lbnQtb3BlbnMtYmxvY2stcCkKLQkgICAgKHNldHEgZm91bmQgdCkKLQkgIChnb3RvLWNoYXIgcmVzdGFydCkpKSkKLSAgICAodW5sZXNzIGZvdW5kCi0gICAgICAoZ290by1jaGFyIHN0YXJ0KQotICAgICAgKHB5LWdvdG8taW5pdGlhbC1saW5lKQotICAgICAgKHdoaWxlIChub3QgKG9yIGZvdW5kIChib2JwKSkpCi0JKHNldHEgZm91bmQgKGFuZAotCQkgICAgIChyZS1zZWFyY2gtYmFja3dhcmQgIjpbIFx0XSpcXCgkXFx8WyNcXF1cXCkiIG5pbCAnbW92ZSkKLQkJICAgICAob3IgKHB5LWdvdG8taW5pdGlhbC1saW5lKSB0KSA7IGFsd2F5cyB0cnVlIC0tIHNpZGUgZWZmZWN0Ci0JCSAgICAgKHB5LXN0YXRlbWVudC1vcGVucy1ibG9jay1wKSkpKSkKLSAgICAoc2V0cSBjb2xvbi1pbmRlbnQgKGN1cnJlbnQtaW5kZW50YXRpb24pCi0JICBmb3VuZCAoYW5kIGZvdW5kICh6ZXJvcCAocHktbmV4dC1zdGF0ZW1lbnQgMSkpKQotCSAgbmV3LXZhbHVlICgtIChjdXJyZW50LWluZGVudGF0aW9uKSBjb2xvbi1pbmRlbnQpKQotICAgIChnb3RvLWNoYXIgc3RhcnQpCi0gICAgKGlmIChub3QgZm91bmQpCi0JKGVycm9yICJTb3JyeSwgY291bGRuJ3QgZ3Vlc3MgYSB2YWx1ZSBmb3IgcHktaW5kZW50LW9mZnNldCIpCi0gICAgICAoZnVuY2FsbCAoaWYgZ2xvYmFsICdraWxsLWxvY2FsLXZhcmlhYmxlICdtYWtlLWxvY2FsLXZhcmlhYmxlKQotCSAgICAgICAncHktaW5kZW50LW9mZnNldCkKLSAgICAgIChzZXRxIHB5LWluZGVudC1vZmZzZXQgbmV3LXZhbHVlKQotICAgICAgKG9yIG5vbmludGVyYWN0aXZlCi0JICAobWVzc2FnZSAiJXMgdmFsdWUgb2YgcHktaW5kZW50LW9mZnNldCBzZXQgdG8gJWQiCi0JCSAgIChpZiBnbG9iYWwgIkdsb2JhbCIgIkxvY2FsIikKLQkJICAgcHktaW5kZW50LW9mZnNldCkpKQotICAgICkpCi0KLShkZWZ1biBweS1jb21tZW50LWluZGVudC1mdW5jdGlvbiAoKQotICAiUHl0aG9uIHZlcnNpb24gb2YgYGNvbW1lbnQtaW5kZW50LWZ1bmN0aW9uJy4iCi0gIDs7IFRoaXMgaXMgcmVxdWlyZWQgd2hlbiBmaWxsYWRhcHQgaXMgdHVybmVkIG9mZi4gIFdpdGhvdXQgaXQsIHdoZW4KLSAgOzsgZmlsbGFkYXB0IGlzIG5vdCB1c2VkLCBjb21tZW50cyB3aGljaCBzdGFydCBpbiBjb2x1bW4gemVybwotICA7OyBjYXNjYWRlIG9uZSBjaGFyYWN0ZXIgdG8gdGhlIHJpZ2h0Ci0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAobGV0ICgoZW9sIChweS1wb2ludCAnZW9sKSkpCi0gICAgICAoYW5kIGNvbW1lbnQtc3RhcnQtc2tpcAotCSAgIChyZS1zZWFyY2gtZm9yd2FyZCBjb21tZW50LXN0YXJ0LXNraXAgZW9sIHQpCi0JICAgKHNldHEgZW9sIChtYXRjaC1iZWdpbm5pbmcgMCkpKQotICAgICAgKGdvdG8tY2hhciBlb2wpCi0gICAgICAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFx0IikKLSAgICAgIChtYXggY29tbWVudC1jb2x1bW4gKCsgKGN1cnJlbnQtY29sdW1uKSAoaWYgKGJvbHApIDAgMSkpKQotICAgICAgKSkpCi0KLShkZWZ1biBweS1uYXJyb3ctdG8tZGVmdW4gKCZvcHRpb25hbCBjbGFzcykKLSAgIk1ha2UgdGV4dCBvdXRzaWRlIGN1cnJlbnQgZGVmdW4gaW52aXNpYmxlLgotVGhlIGRlZnVuIHZpc2libGUgaXMgdGhlIG9uZSB0aGF0IGNvbnRhaW5zIHBvaW50IG9yIGZvbGxvd3MgcG9pbnQuCi1PcHRpb25hbCBDTEFTUyBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gYHB5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3MnLiIKLSAgKGludGVyYWN0aXZlICJQIikKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKHdpZGVuKQotICAgIChweS1lbmQtb2YtZGVmLW9yLWNsYXNzIGNsYXNzKQotICAgIChsZXQgKChlbmQgKHBvaW50KSkpCi0gICAgICAocHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzcyBjbGFzcykKLSAgICAgIChuYXJyb3ctdG8tcmVnaW9uIChwb2ludCkgZW5kKSkpKQotCi0MCi0oZGVmdW4gcHktc2hpZnQtcmVnaW9uIChzdGFydCBlbmQgY291bnQpCi0gICJJbmRlbnQgbGluZXMgZnJvbSBTVEFSVCB0byBFTkQgYnkgQ09VTlQgc3BhY2VzLiIKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKGdvdG8tY2hhciBlbmQpCi0gICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgIChzZXRxIGVuZCAocG9pbnQpKQotICAgIChnb3RvLWNoYXIgc3RhcnQpCi0gICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgIChzZXRxIHN0YXJ0IChwb2ludCkpCi0gICAgKGluZGVudC1yaWdpZGx5IHN0YXJ0IGVuZCBjb3VudCkpKQotCi0oZGVmdW4gcHktc2hpZnQtcmVnaW9uLWxlZnQgKHN0YXJ0IGVuZCAmb3B0aW9uYWwgY291bnQpCi0gICJTaGlmdCByZWdpb24gb2YgUHl0aG9uIGNvZGUgdG8gdGhlIGxlZnQuCi1UaGUgbGluZXMgZnJvbSB0aGUgbGluZSBjb250YWluaW5nIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCByZWdpb24gdXAKLXRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIGxpbmUgY29udGFpbmluZyB0aGUgZW5kIG9mIHRoZSByZWdpb24gYXJlCi1zaGlmdGVkIHRvIHRoZSBsZWZ0LCBieSBgcHktaW5kZW50LW9mZnNldCcgY29sdW1ucy4KLQotSWYgYSBwcmVmaXggYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSByZWdpb24gaXMgaW5zdGVhZCBzaGlmdGVkIGJ5IHRoYXQKLW1hbnkgY29sdW1ucy4gIFdpdGggbm8gYWN0aXZlIHJlZ2lvbiwgZGVkZW50IG9ubHkgdGhlIGN1cnJlbnQgbGluZS4KLVlvdSBjYW5ub3QgZGVkZW50IHRoZSByZWdpb24gaWYgYW55IGxpbmUgaXMgYWxyZWFkeSBhdCBjb2x1bW4gemVyby4iCi0gIChpbnRlcmFjdGl2ZQotICAgKGxldCAoKHAgKHBvaW50KSkKLQkgKG0gKG1hcmspKQotCSAoYXJnIGN1cnJlbnQtcHJlZml4LWFyZykpCi0gICAgIChpZiBtCi0JIChsaXN0IChtaW4gcCBtKSAobWF4IHAgbSkgYXJnKQotICAgICAgIChsaXN0IHAgKHNhdmUtZXhjdXJzaW9uIChmb3J3YXJkLWxpbmUgMSkgKHBvaW50KSkgYXJnKSkpKQotICA7OyBpZiBhbnkgbGluZSBpcyBhdCBjb2x1bW4gemVybywgZG9uJ3Qgc2hpZnQgdGhlIHJlZ2lvbgotICAoc2F2ZS1leGN1cnNpb24KLSAgICAoZ290by1jaGFyIHN0YXJ0KQotICAgICh3aGlsZSAoPCAocG9pbnQpIGVuZCkKLSAgICAgIChiYWNrLXRvLWluZGVudGF0aW9uKQotICAgICAgKGlmIChhbmQgKHplcm9wIChjdXJyZW50LWNvbHVtbikpCi0JICAgICAgIChub3QgKGxvb2tpbmctYXQgIlxccyAqJCIpKSkKLQkgIChlcnJvciAiUmVnaW9uIGlzIGF0IGxlZnQgZWRnZSIpKQotICAgICAgKGZvcndhcmQtbGluZSAxKSkpCi0gIChweS1zaGlmdC1yZWdpb24gc3RhcnQgZW5kICgtIChwcmVmaXgtbnVtZXJpYy12YWx1ZQotCQkJCSAob3IgY291bnQgcHktaW5kZW50LW9mZnNldCkpKSkKLSAgKHB5LWtlZXAtcmVnaW9uLWFjdGl2ZSkpCi0KLShkZWZ1biBweS1zaGlmdC1yZWdpb24tcmlnaHQgKHN0YXJ0IGVuZCAmb3B0aW9uYWwgY291bnQpCi0gICJTaGlmdCByZWdpb24gb2YgUHl0aG9uIGNvZGUgdG8gdGhlIHJpZ2h0LgotVGhlIGxpbmVzIGZyb20gdGhlIGxpbmUgY29udGFpbmluZyB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgcmVnaW9uIHVwCi10byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIGVuZCBvZiB0aGUgcmVnaW9uIGFyZQotc2hpZnRlZCB0byB0aGUgcmlnaHQsIGJ5IGBweS1pbmRlbnQtb2Zmc2V0JyBjb2x1bW5zLgotCi1JZiBhIHByZWZpeCBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIHJlZ2lvbiBpcyBpbnN0ZWFkIHNoaWZ0ZWQgYnkgdGhhdAotbWFueSBjb2x1bW5zLiAgV2l0aCBubyBhY3RpdmUgcmVnaW9uLCBpbmRlbnQgb25seSB0aGUgY3VycmVudCBsaW5lLiIKLSAgKGludGVyYWN0aXZlCi0gICAobGV0ICgocCAocG9pbnQpKQotCSAobSAobWFyaykpCi0JIChhcmcgY3VycmVudC1wcmVmaXgtYXJnKSkKLSAgICAgKGlmIG0KLQkgKGxpc3QgKG1pbiBwIG0pIChtYXggcCBtKSBhcmcpCi0gICAgICAgKGxpc3QgcCAoc2F2ZS1leGN1cnNpb24gKGZvcndhcmQtbGluZSAxKSAocG9pbnQpKSBhcmcpKSkpCi0gIChweS1zaGlmdC1yZWdpb24gc3RhcnQgZW5kIChwcmVmaXgtbnVtZXJpYy12YWx1ZQotCQkJICAgICAgKG9yIGNvdW50IHB5LWluZGVudC1vZmZzZXQpKSkKLSAgKHB5LWtlZXAtcmVnaW9uLWFjdGl2ZSkpCi0KLShkZWZ1biBweS1pbmRlbnQtcmVnaW9uIChzdGFydCBlbmQgJm9wdGlvbmFsIGluZGVudC1vZmZzZXQpCi0gICJSZWluZGVudCBhIHJlZ2lvbiBvZiBQeXRob24gY29kZS4KLQotVGhlIGxpbmVzIGZyb20gdGhlIGxpbmUgY29udGFpbmluZyB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgcmVnaW9uIHVwCi10byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIGVuZCBvZiB0aGUgcmVnaW9uIGFyZQotcmVpbmRlbnRlZC4gIElmIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSByZWdpb24gaGFzIGEgbm9uLXdoaXRlc3BhY2UKLWNoYXJhY3RlciBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGUgZmlyc3QgbGluZSBpcyBsZWZ0IGFsb25lIGFuZCB0aGUKLXJlc3Qgb2YgdGhlIHJlZ2lvbiBpcyByZWluZGVudGVkIHdpdGggcmVzcGVjdCB0byBpdC4gIEVsc2UgdGhlIGVudGlyZQotcmVnaW9uIGlzIHJlaW5kZW50ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSAoY2xvc2VzdCBjb2RlIG9yIGluZGVudGluZwotY29tbWVudCkgc3RhdGVtZW50IGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgcmVnaW9uLgotCi1UaGlzIGlzIHVzZWZ1bCB3aGVuIGNvZGUgYmxvY2tzIGFyZSBtb3ZlZCBvciB5YW5rZWQsIHdoZW4gZW5jbG9zaW5nCi1jb250cm9sIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgcmVtb3ZlZCwgb3IgdG8gcmVmb3JtYXQgY29kZQotdXNpbmcgYSBuZXcgdmFsdWUgZm9yIHRoZSBpbmRlbnRhdGlvbiBvZmZzZXQuCi0KLUlmIGEgbnVtZXJpYyBwcmVmaXggYXJndW1lbnQgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgb2YKLXRoZSBpbmRlbnRhdGlvbiBvZmZzZXQuICBFbHNlIHRoZSB2YWx1ZSBvZiBgcHktaW5kZW50LW9mZnNldCcgd2lsbCBiZQotdXNlZC4KLQotV2FybmluZzogVGhlIHJlZ2lvbiBtdXN0IGJlIGNvbnNpc3RlbnRseSBpbmRlbnRlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbgotaXMgY2FsbGVkISAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb21wdXRlIHByb3BlciBpbmRlbnRhdGlvbiBmcm9tCi1zY3JhdGNoICh0aGF0J3MgaW1wb3NzaWJsZSBpbiBQeXRob24pLCBpdCBtZXJlbHkgYWRqdXN0cyB0aGUgZXhpc3RpbmcKLWluZGVudGF0aW9uIHRvIGJlIGNvcnJlY3QgaW4gY29udGV4dC4KLQotV2FybmluZzogVGhpcyBmdW5jdGlvbiByZWFsbHkgaGFzIG5vIGlkZWEgd2hhdCB0byBkbyB3aXRoCi1ub24taW5kZW50aW5nIGNvbW1lbnQgbGluZXMsIGFuZCBzaGlmdHMgdGhlbSBhcyBpZiB0aGV5IHdlcmUgaW5kZW50aW5nCi1jb21tZW50IGxpbmVzLiAgRml4aW5nIHRoaXMgYXBwZWFycyB0byByZXF1aXJlIHRlbGVwYXRoeS4KLQotU3BlY2lhbCBjYXNlczogd2hpdGVzcGFjZSBpcyBkZWxldGVkIGZyb20gYmxhbmsgbGluZXM7IGNvbnRpbnVhdGlvbgotbGluZXMgYXJlIHNoaWZ0ZWQgYnkgdGhlIHNhbWUgYW1vdW50IHRoZWlyIGluaXRpYWwgbGluZSB3YXMgc2hpZnRlZCwKLWluIG9yZGVyIHRvIHByZXNlcnZlIHRoZWlyIHJlbGF0aXZlIGluZGVudGF0aW9uIHdpdGggcmVzcGVjdCB0byB0aGVpcgotaW5pdGlhbCBsaW5lOyBhbmQgY29tbWVudCBsaW5lcyBiZWdpbm5pbmcgaW4gY29sdW1uIDEgYXJlIGlnbm9yZWQuIgotICAoaW50ZXJhY3RpdmUgIipyXG5QIikJCQk7IHJlZ2lvbjsgcmF3IHByZWZpeCBhcmcKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKGdvdG8tY2hhciBlbmQpICAgKGJlZ2lubmluZy1vZi1saW5lKSAoc2V0cSBlbmQgKHBvaW50LW1hcmtlcikpCi0gICAgKGdvdG8tY2hhciBzdGFydCkgKGJlZ2lubmluZy1vZi1saW5lKQotICAgIChsZXQgKChweS1pbmRlbnQtb2Zmc2V0IChwcmVmaXgtbnVtZXJpYy12YWx1ZQotCQkJICAgICAob3IgaW5kZW50LW9mZnNldCBweS1pbmRlbnQtb2Zmc2V0KSkpCi0JICAoaW5kZW50cyAnKC0xKSkJCTsgc3RhY2sgb2YgYWN0aXZlIGluZGVudCBsZXZlbHMKLQkgICh0YXJnZXQtY29sdW1uIDApCQk7IGNvbHVtbiB0byB3aGljaCB0byBpbmRlbnQKLQkgIChiYXNlLXNoaWZ0ZWQtYnkgMCkJCTsgYW1vdW50IGxhc3QgYmFzZSBsaW5lIHdhcyBzaGlmdGVkCi0JICAoaW5kZW50LWJhc2UgKGlmIChsb29raW5nLWF0ICJbIFx0XG5dIikKLQkJCSAgIChweS1jb21wdXRlLWluZGVudGF0aW9uIHQpCi0JCQkgMCkpCi0JICBjaSkKLSAgICAgICh3aGlsZSAoPCAocG9pbnQpIGVuZCkKLQkoc2V0cSBjaSAoY3VycmVudC1pbmRlbnRhdGlvbikpCi0JOzsgZmlndXJlIG91dCBhcHByb3ByaWF0ZSB0YXJnZXQgY29sdW1uCi0JKGNvbmQKLQkgKChvciAoZXEgKGZvbGxvd2luZy1jaGFyKSA/IykJOyBjb21tZW50IGluIGNvbHVtbiAxCi0JICAgICAgKGxvb2tpbmctYXQgIlsgXHRdKiQiKSkJOyBlbnRpcmVseSBibGFuawotCSAgKHNldHEgdGFyZ2V0LWNvbHVtbiAwKSkKLQkgKChweS1jb250aW51YXRpb24tbGluZS1wKQk7IHNoaWZ0IHJlbGF0aXZlIHRvIGJhc2UgbGluZQotCSAgKHNldHEgdGFyZ2V0LWNvbHVtbiAoKyBjaSBiYXNlLXNoaWZ0ZWQtYnkpKSkKLQkgKHQJCQkJOyBuZXcgYmFzZSBsaW5lCi0JICAoaWYgKD4gY2kgKGNhciBpbmRlbnRzKSkJOyBnb2luZyBkZWVwZXI7IHB1c2ggaXQKLQkgICAgICAoc2V0cSBpbmRlbnRzIChjb25zIGNpIGluZGVudHMpKQotCSAgICA7OyBlbHNlIHdlIHNob3VsZCBoYXZlIHNlZW4gdGhpcyBpbmRlbnQgYmVmb3JlCi0JICAgIChzZXRxIGluZGVudHMgKG1lbXEgY2kgaW5kZW50cykpIDsgcG9wIGRlZXBlciBpbmRlbnRzCi0JICAgIChpZiAobnVsbCBpbmRlbnRzKQotCQkoZXJyb3IgIkJhZCBpbmRlbnRhdGlvbiBpbiByZWdpb24sIGF0IGxpbmUgJWQiCi0JCSAgICAgICAoc2F2ZS1yZXN0cmljdGlvbgotCQkJICh3aWRlbikKLQkJCSAoMSsgKGNvdW50LWxpbmVzIDEgKHBvaW50KSkpKSkpKQotCSAgKHNldHEgdGFyZ2V0LWNvbHVtbiAoKyBpbmRlbnQtYmFzZQotCQkJCSAoKiBweS1pbmRlbnQtb2Zmc2V0Ci0JCQkJICAgICgtIChsZW5ndGggaW5kZW50cykgMikpKSkKLQkgIChzZXRxIGJhc2Utc2hpZnRlZC1ieSAoLSB0YXJnZXQtY29sdW1uIGNpKSkpKQotCTs7IHNoaWZ0IGFzIG5lZWRlZAotCShpZiAoLz0gY2kgdGFyZ2V0LWNvbHVtbikKLQkgICAgKHByb2duCi0JICAgICAgKGRlbGV0ZS1ob3Jpem9udGFsLXNwYWNlKQotCSAgICAgIChpbmRlbnQtdG8gdGFyZ2V0LWNvbHVtbikpKQotCShmb3J3YXJkLWxpbmUgMSkpKSkKLSAgKHNldC1tYXJrZXIgZW5kIG5pbCkpCi0KLShkZWZ1biBweS1jb21tZW50LXJlZ2lvbiAoYmVnIGVuZCAmb3B0aW9uYWwgYXJnKQotICAiTGlrZSBgY29tbWVudC1yZWdpb24nIGJ1dCB1c2VzIGRvdWJsZSBoYXNoIChgIycpIGNvbW1lbnQgc3RhcnRlci4iCi0gIChpbnRlcmFjdGl2ZSAiclxuUCIpCi0gIChsZXQgKChjb21tZW50LXN0YXJ0IHB5LWJsb2NrLWNvbW1lbnQtcHJlZml4KSkKLSAgICAoY29tbWVudC1yZWdpb24gYmVnIGVuZCBhcmcpKSkKLQotDAotOzsgRnVuY3Rpb25zIGZvciBtb3ZpbmcgcG9pbnQKLShkZWZ1biBweS1wcmV2aW91cy1zdGF0ZW1lbnQgKGNvdW50KQotICAiR28gdG8gdGhlIHN0YXJ0IG9mIHRoZSBDT1VOVHRoIHByZWNlZGluZyBQeXRob24gc3RhdGVtZW50LgotQnkgZGVmYXVsdCwgZ29lcyB0byB0aGUgcHJldmlvdXMgc3RhdGVtZW50LiAgSWYgdGhlcmUgaXMgbm8gc3VjaAotc3RhdGVtZW50LCBnb2VzIHRvIHRoZSBmaXJzdCBzdGF0ZW1lbnQuICBSZXR1cm4gY291bnQgb2Ygc3RhdGVtZW50cwotbGVmdCB0byBtb3ZlLiAgYFN0YXRlbWVudHMnIGRvIG5vdCBpbmNsdWRlIGJsYW5rLCBjb21tZW50LCBvcgotY29udGludWF0aW9uIGxpbmVzLiIKLSAgKGludGVyYWN0aXZlICJwIikJCQk7IG51bWVyaWMgcHJlZml4IGFyZwotICAoaWYgKDwgY291bnQgMCkgKHB5LW5leHQtc3RhdGVtZW50ICgtIGNvdW50KSkKLSAgICAocHktZ290by1pbml0aWFsLWxpbmUpCi0gICAgKGxldCAoc3RhcnQpCi0gICAgICAod2hpbGUgKGFuZAotCSAgICAgIChzZXRxIHN0YXJ0IChwb2ludCkpCTsgYWx3YXlzIHRydWUgLS0gc2lkZSBlZmZlY3QKLQkgICAgICAoPiBjb3VudCAwKQotCSAgICAgICh6ZXJvcCAoZm9yd2FyZC1saW5lIC0xKSkKLQkgICAgICAocHktZ290by1zdGF0ZW1lbnQtYXQtb3ItYWJvdmUpKQotCShzZXRxIGNvdW50ICgxLSBjb3VudCkpKQotICAgICAgKGlmICg+IGNvdW50IDApIChnb3RvLWNoYXIgc3RhcnQpKSkKLSAgICBjb3VudCkpCi0KLShkZWZ1biBweS1uZXh0LXN0YXRlbWVudCAoY291bnQpCi0gICJHbyB0byB0aGUgc3RhcnQgb2YgbmV4dCBQeXRob24gc3RhdGVtZW50LgotSWYgdGhlIHN0YXRlbWVudCBhdCBwb2ludCBpcyB0aGUgaSd0aCBQeXRob24gc3RhdGVtZW50LCBnb2VzIHRvIHRoZQotc3RhcnQgb2Ygc3RhdGVtZW50IGkrQ09VTlQuICBJZiB0aGVyZSBpcyBubyBzdWNoIHN0YXRlbWVudCwgZ29lcyB0byB0aGUKLWxhc3Qgc3RhdGVtZW50LiAgUmV0dXJucyBjb3VudCBvZiBzdGF0ZW1lbnRzIGxlZnQgdG8gbW92ZS4gIGBTdGF0ZW1lbnRzJwotZG8gbm90IGluY2x1ZGUgYmxhbmssIGNvbW1lbnQsIG9yIGNvbnRpbnVhdGlvbiBsaW5lcy4iCi0gIChpbnRlcmFjdGl2ZSAicCIpCQkJOyBudW1lcmljIHByZWZpeCBhcmcKLSAgKGlmICg8IGNvdW50IDApIChweS1wcmV2aW91cy1zdGF0ZW1lbnQgKC0gY291bnQpKQotICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAobGV0IChzdGFydCkKLSAgICAgICh3aGlsZSAoYW5kCi0JICAgICAgKHNldHEgc3RhcnQgKHBvaW50KSkJOyBhbHdheXMgdHJ1ZSAtLSBzaWRlIGVmZmVjdAotCSAgICAgICg+IGNvdW50IDApCi0JICAgICAgKHB5LWdvdG8tc3RhdGVtZW50LWJlbG93KSkKLQkoc2V0cSBjb3VudCAoMS0gY291bnQpKSkKLSAgICAgIChpZiAoPiBjb3VudCAwKSAoZ290by1jaGFyIHN0YXJ0KSkpCi0gICAgY291bnQpKQotCi0oZGVmdW4gcHktZ290by1ibG9jay11cCAoJm9wdGlvbmFsIG5vbWFyaykKLSAgIk1vdmUgdXAgdG8gc3RhcnQgb2YgY3VycmVudCBibG9jay4KLUdvIHRvIHRoZSBzdGF0ZW1lbnQgdGhhdCBzdGFydHMgdGhlIHNtYWxsZXN0IGVuY2xvc2luZyBibG9jazsgcm91Z2hseQotc3BlYWtpbmcsIHRoaXMgd2lsbCBiZSB0aGUgY2xvc2VzdCBwcmVjZWRpbmcgc3RhdGVtZW50IHRoYXQgZW5kcyB3aXRoIGEKLWNvbG9uIGFuZCBpcyBpbmRlbnRlZCBsZXNzIHRoYW4gdGhlIHN0YXRlbWVudCB5b3Ugc3RhcnRlZCBvbi4gIElmCi1zdWNjZXNzZnVsLCBhbHNvIHNldHMgdGhlIG1hcmsgdG8gdGhlIHN0YXJ0aW5nIHBvaW50LgotCi1gXFxbcHktbWFyay1ibG9ja10nIGNhbiBiZSB1c2VkIGFmdGVyd2FyZCB0byBtYXJrIHRoZSB3aG9sZSBjb2RlCi1ibG9jaywgaWYgZGVzaXJlZC4KLQotSWYgY2FsbGVkIGZyb20gYSBwcm9ncmFtLCB0aGUgbWFyayB3aWxsIG5vdCBiZSBzZXQgaWYgb3B0aW9uYWwgYXJndW1lbnQKLU5PTUFSSyBpcyBub3QgbmlsLiIKLSAgKGludGVyYWN0aXZlKQotICAobGV0ICgoc3RhcnQgKHBvaW50KSkKLQkoZm91bmQgbmlsKQotCWluaXRpYWwtaW5kZW50KQotICAgIChweS1nb3RvLWluaXRpYWwtbGluZSkKLSAgICA7OyBpZiBvbiBibGFuayBvciBub24taW5kZW50aW5nIGNvbW1lbnQgbGluZSwgdXNlIHRoZSBwcmVjZWRpbmcgc3RtdAotICAgIChpZiAobG9va2luZy1hdCAiWyBcdF0qXFwoJFxcfCNbXiBcdFxuXVxcKSIpCi0JKHByb2duCi0JICAocHktZ290by1zdGF0ZW1lbnQtYXQtb3ItYWJvdmUpCi0JICAoc2V0cSBmb3VuZCAocHktc3RhdGVtZW50LW9wZW5zLWJsb2NrLXApKSkpCi0gICAgOzsgc2VhcmNoIGJhY2sgZm9yIGNvbG9uIGxpbmUgaW5kZW50ZWQgbGVzcwotICAgIChzZXRxIGluaXRpYWwtaW5kZW50IChjdXJyZW50LWluZGVudGF0aW9uKSkKLSAgICAoaWYgKHplcm9wIGluaXRpYWwtaW5kZW50KQotCTs7IGZvcmNlIGZhc3QgZXhpdAotCShnb3RvLWNoYXIgKHBvaW50LW1pbikpKQotICAgICh3aGlsZSAobm90IChvciBmb3VuZCAoYm9icCkpKQotICAgICAgKHNldHEgZm91bmQKLQkgICAgKGFuZAotCSAgICAgKHJlLXNlYXJjaC1iYWNrd2FyZCAiOlsgXHRdKlxcKCRcXHxbI1xcXVxcKSIgbmlsICdtb3ZlKQotCSAgICAgKG9yIChweS1nb3RvLWluaXRpYWwtbGluZSkgdCkgOyBhbHdheXMgdHJ1ZSAtLSBzaWRlIGVmZmVjdAotCSAgICAgKDwgKGN1cnJlbnQtaW5kZW50YXRpb24pIGluaXRpYWwtaW5kZW50KQotCSAgICAgKHB5LXN0YXRlbWVudC1vcGVucy1ibG9jay1wKSkpKQotICAgIChpZiBmb3VuZAotCShwcm9nbgotCSAgKG9yIG5vbWFyayAocHVzaC1tYXJrIHN0YXJ0KSkKLQkgIChiYWNrLXRvLWluZGVudGF0aW9uKSkKLSAgICAgIChnb3RvLWNoYXIgc3RhcnQpCi0gICAgICAoZXJyb3IgIkVuY2xvc2luZyBibG9jayBub3QgZm91bmQiKSkpKQotCi0oZGVmdW4gcHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzcyAoJm9wdGlvbmFsIGNsYXNzIGNvdW50KQotICAiTW92ZSBwb2ludCB0byBzdGFydCBvZiBgZGVmJyBvciBgY2xhc3MnLgotCi1TZWFyY2hlcyBiYWNrIGZvciB0aGUgY2xvc2VzdCBwcmVjZWRpbmcgYGRlZicuICBJZiB5b3Ugc3VwcGx5IGEgcHJlZml4Ci1hcmcsIGxvb2tzIGZvciBhIGBjbGFzcycgaW5zdGVhZC4gIFRoZSBkb2NzIGJlbG93IGFzc3VtZSB0aGUgYGRlZicKLWNhc2U7IGp1c3Qgc3Vic3RpdHV0ZSBgY2xhc3MnIGZvciBgZGVmJyBmb3IgdGhlIG90aGVyIGNhc2UuCi1Qcm9ncmFtbWF0aWNhbGx5LCBpZiBDTEFTUyBpcyBgZWl0aGVyJywgdGhlbiBtb3ZlcyB0byBlaXRoZXIgYGNsYXNzJwotb3IgYGRlZicuCi0KLVdoZW4gc2Vjb25kIG9wdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuIHByb2dyYW1tYXRpY2FsbHksIG1vdmUgdG8gdGhlCi1DT1VOVHRoIHN0YXJ0IG9mIGBkZWYnLgotCi1JZiBwb2ludCBpcyBpbiBhIGBkZWYnIHN0YXRlbWVudCBhbHJlYWR5LCBhbmQgYWZ0ZXIgdGhlIGBkJywgc2ltcGx5Ci1tb3ZlcyBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIHN0YXRlbWVudC4KLQotT3RoZXJ3aXNlIChpLmUuIHdoZW4gcG9pbnQgaXMgbm90IGluIGEgYGRlZicgc3RhdGVtZW50LCBvciBhdCBvcgotYmVmb3JlIHRoZSBgZCcgb2YgYSBgZGVmJyBzdGF0ZW1lbnQpLCBzZWFyY2hlcyBmb3IgdGhlIGNsb3Nlc3QKLXByZWNlZGluZyBgZGVmJyBzdGF0ZW1lbnQsIGFuZCBsZWF2ZXMgcG9pbnQgYXQgaXRzIHN0YXJ0LiAgSWYgbm8gc3VjaAotc3RhdGVtZW50IGNhbiBiZSBmb3VuZCwgbGVhdmVzIHBvaW50IGF0IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLgotCi1SZXR1cm5zIHQgaWZmIGEgYGRlZicgc3RhdGVtZW50IGlzIGZvdW5kIGJ5IHRoZXNlIHJ1bGVzLgotCi1Ob3RlIHRoYXQgZG9pbmcgdGhpcyBjb21tYW5kIHJlcGVhdGVkbHkgd2lsbCB0YWtlIHlvdSBjbG9zZXIgdG8gdGhlCi1zdGFydCBvZiB0aGUgYnVmZmVyIGVhY2ggdGltZS4KLQotVG8gbWFyayB0aGUgY3VycmVudCBgZGVmJywgc2VlIGBcXFtweS1tYXJrLWRlZi1vci1jbGFzc10nLiIKLSAgKGludGVyYWN0aXZlICJQIikJCQk7IHJhdyBwcmVmaXggYXJnCi0gIChzZXRxIGNvdW50IChvciBjb3VudCAxKSkKLSAgKGxldCAoKGF0LW9yLWJlZm9yZS1wICg8PSAoY3VycmVudC1jb2x1bW4pIChjdXJyZW50LWluZGVudGF0aW9uKSkpCi0JKHN0YXJ0LW9mLWxpbmUgKGdvdG8tY2hhciAocHktcG9pbnQgJ2JvbCkpKQotCShzdGFydC1vZi1zdG10IChnb3RvLWNoYXIgKHB5LXBvaW50ICdib3MpKSkKLQkoc3RhcnQtcmUgKGNvbmQgKChlcSBjbGFzcyAnZWl0aGVyKSAiXlsgXHRdKlxcKGNsYXNzXFx8ZGVmXFwpXFw+IikKLQkJCShjbGFzcyAiXlsgXHRdKmNsYXNzXFw+IikKLQkJCSh0ICJeWyBcdF0qZGVmXFw+IikpKQotCSkKLSAgICA7OyBzZWFyY2hpbmcgYmFja3dhcmQKLSAgICAoaWYgKGFuZCAoPCAwIGNvdW50KQotCSAgICAgKG9yICgvPSBzdGFydC1vZi1zdG10IHN0YXJ0LW9mLWxpbmUpCi0JCSAobm90IGF0LW9yLWJlZm9yZS1wKSkpCi0JKGVuZC1vZi1saW5lKSkKLSAgICA7OyBzZWFyY2ggZm9yd2FyZAotICAgIChpZiAoYW5kICg+IDAgY291bnQpCi0JICAgICAoemVyb3AgKGN1cnJlbnQtY29sdW1uKSkKLQkgICAgIChsb29raW5nLWF0IHN0YXJ0LXJlKSkKLQkoZW5kLW9mLWxpbmUpKQotICAgIChpZiAocmUtc2VhcmNoLWJhY2t3YXJkIHN0YXJ0LXJlIG5pbCAnbW92ZSBjb3VudCkKLQkoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMCkpKSkpCi0KLTs7IEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci0oZGVmYWxpYXMgJ2JlZ2lubmluZy1vZi1weXRob24tZGVmLW9yLWNsYXNzICdweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzKQotCi0oZGVmdW4gcHktZW5kLW9mLWRlZi1vci1jbGFzcyAoJm9wdGlvbmFsIGNsYXNzIGNvdW50KQotICAiTW92ZSBwb2ludCBiZXlvbmQgZW5kIG9mIGBkZWYnIG9yIGBjbGFzcycgYm9keS4KLQotQnkgZGVmYXVsdCwgbG9va3MgZm9yIGFuIGFwcHJvcHJpYXRlIGBkZWYnLiAgSWYgeW91IHN1cHBseSBhIHByZWZpeAotYXJnLCBsb29rcyBmb3IgYSBgY2xhc3MnIGluc3RlYWQuICBUaGUgZG9jcyBiZWxvdyBhc3N1bWUgdGhlIGBkZWYnCi1jYXNlOyBqdXN0IHN1YnN0aXR1dGUgYGNsYXNzJyBmb3IgYGRlZicgZm9yIHRoZSBvdGhlciBjYXNlLgotUHJvZ3JhbW1hdGljYWxseSwgaWYgQ0xBU1MgaXMgYGVpdGhlcicsIHRoZW4gbW92ZXMgdG8gZWl0aGVyIGBjbGFzcycKLW9yIGBkZWYnLgotCi1XaGVuIHNlY29uZCBvcHRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiBwcm9ncmFtbWF0aWNhbGx5LCBtb3ZlIHRvIHRoZQotQ09VTlR0aCBlbmQgb2YgYGRlZicuCi0KLUlmIHBvaW50IGlzIGluIGEgYGRlZicgc3RhdGVtZW50IGFscmVhZHksIHRoaXMgaXMgdGhlIGBkZWYnIHdlIHVzZS4KLQotRWxzZSwgaWYgdGhlIGBkZWYnIGZvdW5kIGJ5IGBcXFtweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzXScKLWNvbnRhaW5zIHRoZSBzdGF0ZW1lbnQgeW91IHN0YXJ0ZWQgb24sIHRoYXQncyB0aGUgYGRlZicgd2UgdXNlLgotCi1PdGhlcndpc2UsIHdlIHNlYXJjaCBmb3J3YXJkIGZvciB0aGUgY2xvc2VzdCBmb2xsb3dpbmcgYGRlZicsIGFuZCB1c2UgdGhhdC4KLQotSWYgYSBgZGVmJyBjYW4gYmUgZm91bmQgYnkgdGhlc2UgcnVsZXMsIHBvaW50IGlzIG1vdmVkIHRvIHRoZSBzdGFydCBvZgotdGhlIGxpbmUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBgZGVmJyBibG9jaywgYW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUKLXN0YXJ0IG9mIHRoZSBgZGVmJyBpcyByZXR1cm5lZC4KLQotRWxzZSBwb2ludCBpcyBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGFuZCBuaWwgaXMgcmV0dXJuZWQuCi0KLU5vdGUgdGhhdCBkb2luZyB0aGlzIGNvbW1hbmQgcmVwZWF0ZWRseSB3aWxsIHRha2UgeW91IGNsb3NlciB0byB0aGUKLWVuZCBvZiB0aGUgYnVmZmVyIGVhY2ggdGltZS4KLQotVG8gbWFyayB0aGUgY3VycmVudCBgZGVmJywgc2VlIGBcXFtweS1tYXJrLWRlZi1vci1jbGFzc10nLiIKLSAgKGludGVyYWN0aXZlICJQIikJCQk7IHJhdyBwcmVmaXggYXJnCi0gIChpZiAoYW5kIGNvdW50ICgvPSBjb3VudCAxKSkKLSAgICAgIChweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzICgtIDEgY291bnQpKSkKLSAgKGxldCAoKHN0YXJ0IChwcm9nbiAocHktZ290by1pbml0aWFsLWxpbmUpIChwb2ludCkpKQotCSh3aGljaCAoY29uZCAoKGVxIGNsYXNzICdlaXRoZXIpICJcXChjbGFzc1xcfGRlZlxcKSIpCi0JCSAgICAgKGNsYXNzICJjbGFzcyIpCi0JCSAgICAgKHQgImRlZiIpKSkKLQkoc3RhdGUgJ25vdC1mb3VuZCkpCi0gICAgOzsgbW92ZSBwb2ludCB0byBzdGFydCBvZiBhcHByb3ByaWF0ZSBkZWYvY2xhc3MKLSAgICAoaWYgKGxvb2tpbmctYXQgKGNvbmNhdCAiWyBcdF0qIiB3aGljaCAiXFw+IikpIDsgYWxyZWFkeSBvbiBvbmUKLQkoc2V0cSBzdGF0ZSAnYXQtYmVnaW5uaW5nKQotICAgICAgOzsgZWxzZSBzZWUgaWYgcHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzcyBoaXRzIGNvbnRhaW5lcgotICAgICAgKGlmIChhbmQgKHB5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3MgY2xhc3MpCi0JICAgICAgIChwcm9nbiAocHktZ290by1iZXlvbmQtYmxvY2spCi0JCSAgICAgICg+IChwb2ludCkgc3RhcnQpKSkKLQkgIChzZXRxIHN0YXRlICdhdC1lbmQpCi0JOzsgZWxzZSBzZWFyY2ggZm9yd2FyZAotCShnb3RvLWNoYXIgc3RhcnQpCi0JKGlmIChyZS1zZWFyY2gtZm9yd2FyZCAoY29uY2F0ICJeWyBcdF0qIiB3aGljaCAiXFw+IikgbmlsICdtb3ZlKQotCSAgICAocHJvZ24gKHNldHEgc3RhdGUgJ2F0LWJlZ2lubmluZykKLQkJICAgKGJlZ2lubmluZy1vZi1saW5lKSkpKSkKLSAgICAoY29uZAotICAgICAoKGVxIHN0YXRlICdhdC1iZWdpbm5pbmcpIChweS1nb3RvLWJleW9uZC1ibG9jaykgdCkKLSAgICAgKChlcSBzdGF0ZSAnYXQtZW5kKSB0KQotICAgICAoKGVxIHN0YXRlICdub3QtZm91bmQpIG5pbCkKLSAgICAgKHQgKGVycm9yICJJbnRlcm5hbCBlcnJvciBpbiBgcHktZW5kLW9mLWRlZi1vci1jbGFzcyciKSkpKSkKLQotOzsgQmFja3dhcmRzIGNvbXBhYml0aWxpdHkKLShkZWZhbGlhcyAnZW5kLW9mLXB5dGhvbi1kZWYtb3ItY2xhc3MgJ3B5LWVuZC1vZi1kZWYtb3ItY2xhc3MpCi0KLQwKLTs7IEZ1bmN0aW9ucyBmb3IgbWFya2luZyByZWdpb25zCi0oZGVmdW4gcHktbWFyay1ibG9jayAoJm9wdGlvbmFsIGV4dGVuZCBqdXN0LW1vdmUpCi0gICJNYXJrIGZvbGxvd2luZyBibG9jayBvZiBsaW5lcy4gIFdpdGggcHJlZml4IGFyZywgbWFyayBzdHJ1Y3R1cmUuCi1FYXNpZXIgdG8gdXNlIHRoYW4gZXhwbGFpbi4gIEl0IHNldHMgdGhlIHJlZ2lvbiB0byBhbiBgaW50ZXJlc3RpbmcnCi1ibG9jayBvZiBzdWNjZWVkaW5nIGxpbmVzLiAgSWYgcG9pbnQgaXMgb24gYSBibGFuayBsaW5lLCBpdCBnb2VzIGRvd24gdG8KLXRoZSBuZXh0IG5vbi1ibGFuayBsaW5lLiAgVGhhdCB3aWxsIGJlIHRoZSBzdGFydCBvZiB0aGUgcmVnaW9uLiAgVGhlIGVuZAotb2YgdGhlIHJlZ2lvbiBkZXBlbmRzIG9uIHRoZSBraW5kIG9mIGxpbmUgYXQgdGhlIHN0YXJ0OgotCi0gLSBJZiBhIGNvbW1lbnQsIHRoZSByZWdpb24gd2lsbCBpbmNsdWRlIGFsbCBzdWNjZWVkaW5nIGNvbW1lbnQgbGluZXMgdXAKLSAgIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIG5leHQgbm9uLWNvbW1lbnQgbGluZSAoaWYgYW55KS4KLQotIC0gRWxzZSBpZiBhIHByZWZpeCBhcmcgaXMgZ2l2ZW4sIGFuZCB0aGUgbGluZSBiZWdpbnMgb25lIG9mIHRoZXNlCi0gICBzdHJ1Y3R1cmVzOgotCi0gICAgIGlmIGVsaWYgZWxzZSB0cnkgZXhjZXB0IGZpbmFsbHkgZm9yIHdoaWxlIGRlZiBjbGFzcwotCi0gICB0aGUgcmVnaW9uIHdpbGwgYmUgc2V0IHRvIHRoZSBib2R5IG9mIHRoZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZwotICAgZm9sbG93aW5nIGJsb2NrcyB0aGF0IGBiZWxvbmcnIHRvIGl0LCBidXQgZXhjbHVkaW5nIHRyYWlsaW5nIGJsYW5rCi0gICBhbmQgY29tbWVudCBsaW5lcy4gIEUuZy4sIGlmIG9uIGEgYHRyeScgc3RhdGVtZW50LCB0aGUgYHRyeScgYmxvY2sKLSAgIGFuZCBhbGwgKGlmIGFueSkgb2YgdGhlIGZvbGxvd2luZyBgZXhjZXB0JyBhbmQgYGZpbmFsbHknIGJsb2NrcwotICAgdGhhdCBiZWxvbmcgdG8gdGhlIGB0cnknIHN0cnVjdHVyZSB3aWxsIGJlIGluIHRoZSByZWdpb24uICBEaXR0bwotICAgZm9yIGlmL2VsaWYvZWxzZSwgZm9yL2Vsc2UgYW5kIHdoaWxlL2Vsc2Ugc3RydWN0dXJlcywgYW5kIChhIGJpdAotICAgZGVnZW5lcmF0ZSwgc2luY2UgdGhleSdyZSBhbHdheXMgb25lLWJsb2NrIHN0cnVjdHVyZXMpIGRlZiBhbmQKLSAgIGNsYXNzIGJsb2Nrcy4KLQotIC0gRWxzZSBpZiBubyBwcmVmaXggYXJndW1lbnQgaXMgZ2l2ZW4sIGFuZCB0aGUgbGluZSBiZWdpbnMgYSBQeXRob24KLSAgIGJsb2NrIChzZWUgbGlzdCBhYm92ZSksIGFuZCB0aGUgYmxvY2sgaXMgbm90IGEgYG9uZS1saW5lcicgKGkuZS4sCi0gICB0aGUgc3RhdGVtZW50IGVuZHMgd2l0aCBhIGNvbG9uLCBub3Qgd2l0aCBjb2RlKSwgdGhlIHJlZ2lvbiB3aWxsCi0gICBpbmNsdWRlIGFsbCBzdWNjZWVkaW5nIGxpbmVzIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIG5leHQKLSAgIGNvZGUgc3RhdGVtZW50IChpZiBhbnkpIHRoYXQncyBpbmRlbnRlZCBubyBtb3JlIHRoYW4gdGhlIHN0YXJ0aW5nCi0gICBsaW5lLCBleGNlcHQgdGhhdCB0cmFpbGluZyBibGFuayBhbmQgY29tbWVudCBsaW5lcyBhcmUgZXhjbHVkZWQuCi0gICBFLmcuLCBpZiB0aGUgc3RhcnRpbmcgbGluZSBiZWdpbnMgYSBtdWx0aS1zdGF0ZW1lbnQgYGRlZicKLSAgIHN0cnVjdHVyZSwgdGhlIHJlZ2lvbiB3aWxsIGJlIHNldCB0byB0aGUgZnVsbCBmdW5jdGlvbiBkZWZpbml0aW9uLAotICAgYnV0IHdpdGhvdXQgYW55IHRyYWlsaW5nIGBub2lzZScgbGluZXMuCi0KLSAtIEVsc2UgdGhlIHJlZ2lvbiB3aWxsIGluY2x1ZGUgYWxsIHN1Y2NlZWRpbmcgbGluZXMgdXAgdG8gKGJ1dCBub3QKLSAgIGluY2x1ZGluZykgdGhlIG5leHQgYmxhbmsgbGluZSwgb3IgY29kZSBvciBpbmRlbnRpbmctY29tbWVudCBsaW5lCi0gICBpbmRlbnRlZCBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIHN0YXJ0aW5nIGxpbmUuICBUcmFpbGluZyBpbmRlbnRpbmcKLSAgIGNvbW1lbnQgbGluZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMgY2FzZSwgYnV0IG5vdCB0cmFpbGluZyBibGFuawotICAgbGluZXMuCi0KLUEgbXNnIGlkZW50aWZ5aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgbWFyayBpcyBkaXNwbGF5ZWQgaW4gdGhlIGVjaG8KLWFyZWE7IG9yIGRvIGBcXFtleGNoYW5nZS1wb2ludC1hbmQtbWFya10nIHRvIGZsaXAgZG93biB0byB0aGUgZW5kLgotCi1JZiBjYWxsZWQgZnJvbSBhIHByb2dyYW0sIG9wdGlvbmFsIGFyZ3VtZW50IEVYVEVORCBwbGF5cyB0aGUgcm9sZSBvZgotdGhlIHByZWZpeCBhcmcsIGFuZCBpZiBvcHRpb25hbCBhcmd1bWVudCBKVVNULU1PVkUgaXMgbm90IG5pbCwganVzdAotbW92ZXMgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKCYgZG9lcyBub3Qgc2V0IG1hcmsgb3IgZGlzcGxheSBhIG1zZykuIgotICAoaW50ZXJhY3RpdmUgIlAiKQkJCTsgcmF3IHByZWZpeCBhcmcKLSAgKHB5LWdvdG8taW5pdGlhbC1saW5lKQotICA7OyBza2lwIG92ZXIgYmxhbmsgbGluZXMKLSAgKHdoaWxlIChhbmQKLQkgIChsb29raW5nLWF0ICJbIFx0XSokIikJOyB3aGlsZSBibGFuayBsaW5lCi0JICAobm90IChlb2JwKSkpCQkJOyAmIHNvbWV3aGVyZSB0byBnbwotICAgIChmb3J3YXJkLWxpbmUgMSkpCi0gIChpZiAoZW9icCkKLSAgICAgIChlcnJvciAiSGl0IGVuZCBvZiBidWZmZXIgd2l0aG91dCBmaW5kaW5nIGEgbm9uLWJsYW5rIHN0bXQiKSkKLSAgKGxldCAoKGluaXRpYWwtcG9zIChwb2ludCkpCi0JKGluaXRpYWwtaW5kZW50IChjdXJyZW50LWluZGVudGF0aW9uKSkKLQlsYXN0LXBvcwkJCTsgcG9zaXRpb24gb2YgbGFzdCBzdG10IGluIHJlZ2lvbgotCShmb2xsb3dlcnMKLQkgJygoaWYgZWxpZiBlbHNlKSAoZWxpZiBlbGlmIGVsc2UpIChlbHNlKQotCSAgICh0cnkgZXhjZXB0IGZpbmFsbHkpIChleGNlcHQgZXhjZXB0KSAoZmluYWxseSkKLQkgICAoZm9yIGVsc2UpICh3aGlsZSBlbHNlKQotCSAgIChkZWYpIChjbGFzcykgKSApCi0JZmlyc3Qtc3ltYm9sIG5leHQtc3ltYm9sKQotCi0gICAgKGNvbmQKLSAgICAgOzsgaWYgY29tbWVudCBsaW5lLCBzdWNrIHVwIHRoZSBmb2xsb3dpbmcgY29tbWVudCBsaW5lcwotICAgICAoKGxvb2tpbmctYXQgIlsgXHRdKiMiKQotICAgICAgKHJlLXNlYXJjaC1mb3J3YXJkICJeWyBcdF0qW14gXHQjXSIgbmlsICdtb3ZlKSA7IGxvb2sgZm9yIG5vbi1jb21tZW50Ci0gICAgICAocmUtc2VhcmNoLWJhY2t3YXJkICJeWyBcdF0qIyIpCTsgYW5kIGJhY2sgdG8gbGFzdCBjb21tZW50IGluIGJsb2NrCi0gICAgICAoc2V0cSBsYXN0LXBvcyAocG9pbnQpKSkKLQotICAgICA7OyBlbHNlIGlmIGxpbmUgaXMgYSBibG9jayBsaW5lIGFuZCBFWFRFTkQgZ2l2ZW4sIHN1Y2sgdXAKLSAgICAgOzsgdGhlIHdob2xlIHN0cnVjdHVyZQotICAgICAoKGFuZCBleHRlbmQKLQkgICAoc2V0cSBmaXJzdC1zeW1ib2wgKHB5LXN1Y2stdXAtZmlyc3Qta2V5d29yZCkgKQotCSAgIChhc3NxIGZpcnN0LXN5bWJvbCBmb2xsb3dlcnMpKQotICAgICAgKHdoaWxlIChhbmQKLQkgICAgICAob3IgKHB5LWdvdG8tYmV5b25kLWJsb2NrKSB0KSA7IHNpZGUgZWZmZWN0Ci0JICAgICAgKGZvcndhcmQtbGluZSAtMSkJCTsgc2lkZSBlZmZlY3QKLQkgICAgICAoc2V0cSBsYXN0LXBvcyAocG9pbnQpKQk7IHNpZGUgZWZmZWN0Ci0JICAgICAgKHB5LWdvdG8tc3RhdGVtZW50LWJlbG93KQotCSAgICAgICg9IChjdXJyZW50LWluZGVudGF0aW9uKSBpbml0aWFsLWluZGVudCkKLQkgICAgICAoc2V0cSBuZXh0LXN5bWJvbCAocHktc3Vjay11cC1maXJzdC1rZXl3b3JkKSkKLQkgICAgICAobWVtcSBuZXh0LXN5bWJvbCAoY2RyIChhc3NxIGZpcnN0LXN5bWJvbCBmb2xsb3dlcnMpKSkpCi0JKHNldHEgZmlyc3Qtc3ltYm9sIG5leHQtc3ltYm9sKSkpCi0KLSAgICAgOzsgZWxzZSBpZiBsaW5lICpvcGVucyogYSBibG9jaywgc2VhcmNoIGZvciBuZXh0IHN0bXQgaW5kZW50ZWQgPD0KLSAgICAgKChweS1zdGF0ZW1lbnQtb3BlbnMtYmxvY2stcCkKLSAgICAgICh3aGlsZSAoYW5kCi0JICAgICAgKHNldHEgbGFzdC1wb3MgKHBvaW50KSkJOyBhbHdheXMgdHJ1ZSAtLSBzaWRlIGVmZmVjdAotCSAgICAgIChweS1nb3RvLXN0YXRlbWVudC1iZWxvdykKLQkgICAgICAoPiAoY3VycmVudC1pbmRlbnRhdGlvbikgaW5pdGlhbC1pbmRlbnQpCi0JICAgICAgKSkpCi0KLSAgICAgOzsgZWxzZSBwbGFpbiBjb2RlIGxpbmU7IHN0b3AgYXQgbmV4dCBibGFuayBsaW5lLCBvciBzdG10IG9yCi0gICAgIDs7IGluZGVudGluZyBjb21tZW50IGxpbmUgaW5kZW50ZWQgPAotICAgICAodAotICAgICAgKHdoaWxlIChhbmQKLQkgICAgICAoc2V0cSBsYXN0LXBvcyAocG9pbnQpKQk7IGFsd2F5cyB0cnVlIC0tIHNpZGUgZWZmZWN0Ci0JICAgICAgKG9yIChweS1nb3RvLWJleW9uZC1maW5hbC1saW5lKSB0KQotCSAgICAgIChub3QgKGxvb2tpbmctYXQgIlsgXHRdKiQiKSkgOyBzdG9wIGF0IGJsYW5rIGxpbmUKLQkgICAgICAob3IKLQkgICAgICAgKD49IChjdXJyZW50LWluZGVudGF0aW9uKSBpbml0aWFsLWluZGVudCkKLQkgICAgICAgKGxvb2tpbmctYXQgIlsgXHRdKiNbXiBcdFxuXSIpKSkgOyBpZ25vcmUgbm9uLWluZGVudGluZyAjCi0JbmlsKSkpCi0KLSAgICA7OyBza2lwIHRvIGVuZCBvZiBsYXN0IHN0bXQKLSAgICAoZ290by1jaGFyIGxhc3QtcG9zKQotICAgIChweS1nb3RvLWJleW9uZC1maW5hbC1saW5lKQotCi0gICAgOzsgc2V0IG1hcmsgJiBkaXNwbGF5Ci0gICAgKGlmIGp1c3QtbW92ZQotCSgpCQkJCTsganVzdCByZXR1cm4KLSAgICAgIChwdXNoLW1hcmsgKHBvaW50KSAnbm8tbXNnKQotICAgICAgKGZvcndhcmQtbGluZSAtMSkKLSAgICAgIChtZXNzYWdlICJNYXJrIHNldCBhZnRlcjogJXMiIChweS1zdWNrLXVwLWxlYWRpbmctdGV4dCkpCi0gICAgICAoZ290by1jaGFyIGluaXRpYWwtcG9zKSkpKQotCi0oZGVmdW4gcHktbWFyay1kZWYtb3ItY2xhc3MgKCZvcHRpb25hbCBjbGFzcykKLSAgIlNldCByZWdpb24gdG8gYm9keSBvZiBkZWYgKG9yIGNsYXNzLCB3aXRoIHByZWZpeCBhcmcpIGVuY2xvc2luZyBwb2ludC4KLVB1c2hlcyB0aGUgY3VycmVudCBtYXJrLCB0aGVuIHBvaW50LCBvbiB0aGUgbWFyayByaW5nIChhbGwgbGFuZ3VhZ2UKLW1vZGVzIGRvIHRoaXMsIGJ1dCBhbHRob3VnaCBpdCdzIGhhbmR5IGl0J3MgbmV2ZXIgZG9jdW1lbnRlZCAuLi4pLgotCi1JbiBtb3N0IEVtYWNzIGxhbmd1YWdlIG1vZGVzLCB0aGlzIGZ1bmN0aW9uIGJlYXJzIGF0IGxlYXN0IGEKLWhhbGx1Y2lub2dlbmljIHJlc2VtYmxhbmNlIHRvIGBcXFtweS1lbmQtb2YtZGVmLW9yLWNsYXNzXScgYW5kCi1gXFxbcHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzc10nLgotCi1BbmQgaW4gZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24gbW9kZSwgYWxsIDMgd2VyZSB0aWdodGx5IGNvbm5lY3RlZC4KLVR1cm5lZCBvdXQgdGhhdCB3YXMgbW9yZSBjb25mdXNpbmcgdGhhbiB1c2VmdWw6IHRoZSBgZ290byBzdGFydCcgYW5kCi1gZ290byBlbmQnIGNvbW1hbmRzIGFyZSB1c3VhbGx5IHVzZWQgdG8gc2VhcmNoIHRocm91Z2ggYSBmaWxlLCBhbmQKLXBlb3BsZSBleHBlY3QgdGhlbSB0byBhY3QgYSBsb3QgbGlrZSBgc2VhcmNoIGJhY2t3YXJkJyBhbmQgYHNlYXJjaAotZm9yd2FyZCcgc3RyaW5nLXNlYXJjaCBjb21tYW5kcy4gIEJ1dCBiZWNhdXNlIFB5dGhvbiBgZGVmJyBhbmQgYGNsYXNzJwotY2FuIG5lc3QgdG8gYXJiaXRyYXJ5IGxldmVscywgZmluZGluZyB0aGUgc21hbGxlc3QgZGVmIGNvbnRhaW5pbmcKLXBvaW50IGNhbm5vdCBiZSBkb25lIHZpYSBhIHNpbXBsZSBiYWNrd2FyZCBzZWFyY2g6IHRoZSBkZWYgY29udGFpbmluZwotcG9pbnQgbWF5IG5vdCBiZSB0aGUgY2xvc2VzdCBwcmVjZWRpbmcgZGVmLCBvciBldmVuIHRoZSBjbG9zZXN0Ci1wcmVjZWRpbmcgZGVmIHRoYXQncyBpbmRlbnRlZCBsZXNzLiAgVGhlIGZhbmN5IGFsZ29yaXRobSByZXF1aXJlZCBpcwotYXBwcm9wcmlhdGUgZm9yIHRoZSB1c3VhbCB1c2VzIG9mIHRoaXMgYG1hcmsnIGNvbW1hbmQsIGJ1dCBub3QgZm9yIHRoZQotYGdvdG8nIHZhcmlhdGlvbnMuCi0KLVNvIHRoZSBkZWYgbWFya2VkIGJ5IHRoaXMgY29tbWFuZCBtYXkgbm90IGJlIHRoZSBvbmUgZWl0aGVyIG9mIHRoZQotYGdvdG8nIGNvbW1hbmRzIGZpbmQ6IElmIHBvaW50IGlzIG9uIGEgYmxhbmsgb3Igbm9uLWluZGVudGluZyBjb21tZW50Ci1saW5lLCBtb3ZlcyBiYWNrIHRvIHN0YXJ0IG9mIHRoZSBjbG9zZXN0IHByZWNlZGluZyBjb2RlIHN0YXRlbWVudCBvcgotaW5kZW50aW5nIGNvbW1lbnQgbGluZS4gIElmIHRoaXMgaXMgYSBgZGVmJyBzdGF0ZW1lbnQsIHRoYXQncyB0aGUgZGVmCi13ZSB1c2UuICBFbHNlIHNlYXJjaGVzIGZvciB0aGUgc21hbGxlc3QgZW5jbG9zaW5nIGBkZWYnIGJsb2NrIGFuZCB1c2VzCi10aGF0LiAgRWxzZSBzaWduYWxzIGFuIGVycm9yLgotCi1XaGVuIGFuIGVuY2xvc2luZyBkZWYgaXMgZm91bmQ6IFRoZSBtYXJrIGlzIGxlZnQgaW1tZWRpYXRlbHkgYmV5b25kCi10aGUgbGFzdCBsaW5lIG9mIHRoZSBkZWYgYmxvY2suICBQb2ludCBpcyBsZWZ0IGF0IHRoZSBzdGFydCBvZiB0aGUKLWRlZiwgZXhjZXB0IHRoYXQ6IGlmIHRoZSBkZWYgaXMgcHJlY2VkZWQgYnkgYSBudW1iZXIgb2YgY29tbWVudCBsaW5lcwotZm9sbG93ZWQgYnkgKGF0IG1vc3QpIG9uZSBvcHRpb25hbCBibGFuayBsaW5lLCBwb2ludCBpcyBsZWZ0IGF0IHRoZQotc3RhcnQgb2YgdGhlIGNvbW1lbnRzOyBlbHNlIGlmIHRoZSBkZWYgaXMgcHJlY2VkZWQgYnkgYSBibGFuayBsaW5lLAotcG9pbnQgaXMgbGVmdCBhdCBpdHMgc3RhcnQuCi0KLVRoZSBpbnRlbnQgaXMgdG8gbWFyayB0aGUgY29udGFpbmluZyBkZWYvY2xhc3MgYW5kIGl0cyBhc3NvY2lhdGVkCi1kb2N1bWVudGF0aW9uLCB0byBtYWtlIG1vdmluZyBhbmQgZHVwbGljYXRpbmcgZnVuY3Rpb25zIGFuZCBjbGFzc2VzCi1wbGVhc2FudC4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCQkJOyByYXcgcHJlZml4IGFyZwotICAobGV0ICgoc3RhcnQgKHBvaW50KSkKLQkod2hpY2ggKGNvbmQgKChlcSBjbGFzcyAnZWl0aGVyKSAiXFwoY2xhc3NcXHxkZWZcXCkiKQotCQkgICAgIChjbGFzcyAiY2xhc3MiKQotCQkgICAgICh0ICJkZWYiKSkpKQotICAgIChwdXNoLW1hcmsgc3RhcnQpCi0gICAgKGlmIChub3QgKHB5LWdvLXVwLXRyZWUtdG8ta2V5d29yZCB3aGljaCkpCi0JKHByb2duIChnb3RvLWNoYXIgc3RhcnQpCi0JICAgICAgIChlcnJvciAiRW5jbG9zaW5nICVzIG5vdCBmb3VuZCIKLQkJICAgICAgKGlmIChlcSBjbGFzcyAnZWl0aGVyKQotCQkJICAiZGVmIG9yIGNsYXNzIgotCQkJd2hpY2gpKSkKLSAgICAgIDs7IGVsc2UgZW5jbG9zaW5nIGRlZi9jbGFzcyBmb3VuZAotICAgICAgKHNldHEgc3RhcnQgKHBvaW50KSkKLSAgICAgIChweS1nb3RvLWJleW9uZC1ibG9jaykKLSAgICAgIChwdXNoLW1hcmsgKHBvaW50KSkKLSAgICAgIChnb3RvLWNoYXIgc3RhcnQpCi0gICAgICAoaWYgKHplcm9wIChmb3J3YXJkLWxpbmUgLTEpKQk7IGlmIHRoZXJlIGlzIGEgcHJlY2VkaW5nIGxpbmUKLQkgIChwcm9nbgotCSAgICAoaWYgKGxvb2tpbmctYXQgIlsgXHRdKiQiKQk7IGl0J3MgYmxhbmsKLQkJKHNldHEgc3RhcnQgKHBvaW50KSkJOyBzbyByZXNldCBzdGFydCBwb2ludAotCSAgICAgIChnb3RvLWNoYXIgc3RhcnQpKQk7IGVsc2UgdHJ5IGFnYWluCi0JICAgIChpZiAoemVyb3AgKGZvcndhcmQtbGluZSAtMSkpCi0JCShpZiAobG9va2luZy1hdCAiWyBcdF0qIyIpIDsgYSBjb21tZW50Ci0JCSAgICA7OyBsb29rIGJhY2sgZm9yIG5vbi1jb21tZW50IGxpbmUKLQkJICAgIDs7IHRyaWNreTogbm90ZSB0aGF0IHRoZSByZWdleHAgbWF0Y2hlcyBhIGJsYW5rCi0JCSAgICA7OyBsaW5lLCBjdXogXG4gaXMgaW4gdGhlIDJuZCBjaGFyYWN0ZXIgY2xhc3MKLQkJICAgIChhbmQKLQkJICAgICAocmUtc2VhcmNoLWJhY2t3YXJkICJeWyBcdF0qW14gXHQjXSIgbmlsICdtb3ZlKQotCQkgICAgIChmb3J3YXJkLWxpbmUgMSkpCi0JCSAgOzsgbm8gY29tbWVudCwgc28gZ28gYmFjawotCQkgIChnb3RvLWNoYXIgc3RhcnQpKSkpKSkpCi0gIChleGNoYW5nZS1wb2ludC1hbmQtbWFyaykKLSAgKHB5LWtlZXAtcmVnaW9uLWFjdGl2ZSkpCi0KLTs7IHJpcHBlZCBmcm9tIGNjLW1vZGUKLShkZWZ1biBweS1mb3J3YXJkLWludG8tbm9tZW5jbGF0dXJlICgmb3B0aW9uYWwgYXJnKQotICAiTW92ZSBmb3J3YXJkIHRvIGVuZCBvZiBhIG5vbWVuY2xhdHVyZSBzZWN0aW9uIG9yIHdvcmQuCi1XaXRoIFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gKHByb2dyYW1tYXRpY2FsbHksIG9wdGlvbmFsIGFyZ3VtZW50IEFSRyksCi1kbyBpdCB0aGF0IG1hbnkgdGltZXMuCi0KLUEgYG5vbWVuY2xhdHVyZScgaXMgYSBmYW5jeSB3YXkgb2Ygc2F5aW5nIEFXb3JkV2l0aE1peGVkQ2FzZU5vdFVuZGVyc2NvcmVzLiIKLSAgKGludGVyYWN0aXZlICJwIikKLSAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggbmlsKSkKLSAgICAoaWYgKD4gYXJnIDApCi0JKHJlLXNlYXJjaC1mb3J3YXJkCi0JICJcXChcXFdcXHxbX11cXCkqXFwoW0EtWl0qW2EtejAtOV0qXFwpIgotCSAocG9pbnQtbWF4KSB0IGFyZykKLSAgICAgICh3aGlsZSAoYW5kICg8IGFyZyAwKQotCQkgIChyZS1zZWFyY2gtYmFja3dhcmQKLQkJICAgIlxcKFxcV1xcfFthLXowLTldXFwpW0EtWl0rXFx8XFwoXFxXXFx8W19dXFwpXFx3KyIKLQkJICAgKHBvaW50LW1pbikgMCkpCi0JKGZvcndhcmQtY2hhciAxKQotCShzZXRxIGFyZyAoMSsgYXJnKSkpKSkKLSAgKHB5LWtlZXAtcmVnaW9uLWFjdGl2ZSkpCi0KLShkZWZ1biBweS1iYWNrd2FyZC1pbnRvLW5vbWVuY2xhdHVyZSAoJm9wdGlvbmFsIGFyZykKLSAgIk1vdmUgYmFja3dhcmQgdG8gYmVnaW5uaW5nIG9mIGEgbm9tZW5jbGF0dXJlIHNlY3Rpb24gb3Igd29yZC4KLVdpdGggb3B0aW9uYWwgQVJHLCBtb3ZlIHRoYXQgbWFueSB0aW1lcy4gIElmIEFSRyBpcyBuZWdhdGl2ZSwgbW92ZQotZm9yd2FyZC4KLQotQSBgbm9tZW5jbGF0dXJlJyBpcyBhIGZhbmN5IHdheSBvZiBzYXlpbmcgQVdvcmRXaXRoTWl4ZWRDYXNlTm90VW5kZXJzY29yZXMuIgotICAoaW50ZXJhY3RpdmUgInAiKQotICAocHktZm9yd2FyZC1pbnRvLW5vbWVuY2xhdHVyZSAoLSBhcmcpKQotICAocHkta2VlcC1yZWdpb24tYWN0aXZlKSkKLQotCi0MCi07OyBwZGJ0cmFjayBmdW5jdGlvbnMKLShkZWZ1biBweS1wZGJ0cmFjay10b2dnbGUtc3RhY2stdHJhY2tpbmcgKGFyZykKLSAgKGludGVyYWN0aXZlICJQIikKLSAgKGlmIChub3QgKGdldC1idWZmZXItcHJvY2VzcyAoY3VycmVudC1idWZmZXIpKSkKLSAgICAgIChlcnJvciAiTm8gcHJvY2VzcyBhc3NvY2lhdGVkIHdpdGggYnVmZmVyICclcyciIChjdXJyZW50LWJ1ZmZlcikpKQotICA7OyBtaXNzaW5nIG9yIDAgaXMgdG9nZ2xlLCA+MCB0dXJuIG9uLCA8MCB0dXJuIG9mZgotICAoaWYgKG9yIChub3QgYXJnKQotCSAgKHplcm9wIChzZXRxIGFyZyAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSkpKQotICAgICAgKHNldHEgcHktcGRidHJhY2stZG8tdHJhY2tpbmctcCAobm90IHB5LXBkYnRyYWNrLWRvLXRyYWNraW5nLXApKQotICAgIChzZXRxIHB5LXBkYnRyYWNrLWRvLXRyYWNraW5nLXAgKD4gYXJnIDApKSkKLSAgKG1lc3NhZ2UgIiVzYWJsZWQgUHl0aG9uJ3MgcGRidHJhY2siCi0gICAgICAgICAgIChpZiBweS1wZGJ0cmFjay1kby10cmFja2luZy1wICJFbiIgIkRpcyIpKSkKLQotKGRlZnVuIHR1cm4tb24tcGRidHJhY2sgKCkKLSAgKGludGVyYWN0aXZlKQotICAocHktcGRidHJhY2stdG9nZ2xlLXN0YWNrLXRyYWNraW5nIDEpKQotCi0oZGVmdW4gdHVybi1vZmYtcGRidHJhY2sgKCkKLSAgKGludGVyYWN0aXZlKQotICAocHktcGRidHJhY2stdG9nZ2xlLXN0YWNrLXRyYWNraW5nIDApKQotCi0KLQwKLTs7IFB5Y2hlY2tlcgotCi07OyBoYWNrIGZvciBGU0YgRW1hY3MKLSh1bmxlc3MgKGZib3VuZHAgJ3JlYWQtc2hlbGwtY29tbWFuZCkKLSAgKGRlZmFsaWFzICdyZWFkLXNoZWxsLWNvbW1hbmQgJ3JlYWQtc3RyaW5nKSkKLQotKGRlZnVuIHB5LXB5Y2hlY2tlci1ydW4gKGNvbW1hbmQpCi0gICIqUnVuIHB5Y2hlY2tlciAoZGVmYXVsdCBvbiB0aGUgZmlsZSBjdXJyZW50bHkgdmlzaXRlZCkuIgotICAoaW50ZXJhY3RpdmUKLSAgIChsZXQgKChkZWZhdWx0Ci0gICAgICAgICAgIChmb3JtYXQgIiVzICVzICVzIiBweS1weWNoZWNrZXItY29tbWFuZAotCQkgICAobWFwY29uY2F0ICdpZGVudGl0eSBweS1weWNoZWNrZXItY29tbWFuZC1hcmdzICIgIikKLQkJICAgKGJ1ZmZlci1maWxlLW5hbWUpKSkKLQkgKGxhc3QgKHdoZW4gcHktcHljaGVja2VyLWhpc3RvcnkKLQkJIChsZXQqICgobGFzdGNtZCAoY2FyIHB5LXB5Y2hlY2tlci1oaXN0b3J5KSkKLQkJCShjbWQgKGNkciAocmV2ZXJzZSAoc3BsaXQtc3RyaW5nIGxhc3RjbWQpKSkpCi0JCQkobmV3Y21kIChyZXZlcnNlIChjb25zIChidWZmZXItZmlsZS1uYW1lKSBjbWQpKSkpCi0JCSAgIChtYXBjb25jYXQgJ2lkZW50aXR5IG5ld2NtZCAiICIpKSkpKQotCi0gICAgIChsaXN0Ci0gICAgICAoaWYgKGZib3VuZHAgJ3JlYWQtc2hlbGwtY29tbWFuZCkKLQkgIChyZWFkLXNoZWxsLWNvbW1hbmQgIlJ1biBweWNoZWNrZXIgbGlrZSB0aGlzOiAiCi0JCQkgICAgICAoaWYgbGFzdAotCQkJCSAgbGFzdAotCQkJCWRlZmF1bHQpCi0JCQkgICAgICAncHktcHljaGVja2VyLWhpc3RvcnkpCi0JKHJlYWQtc3RyaW5nICJSdW4gcHljaGVja2VyIGxpa2UgdGhpczogIgotCQkgICAgIChpZiBsYXN0Ci0JCQkgbGFzdAotCQkgICAgICAgZGVmYXVsdCkKLQkJICAgICAncHktcHljaGVja2VyLWhpc3RvcnkpKQotCSkpKQotICAoc2F2ZS1zb21lLWJ1ZmZlcnMgKG5vdCBweS1hc2stYWJvdXQtc2F2ZSkgbmlsKQotICAoY29tcGlsZS1pbnRlcm5hbCBjb21tYW5kICJObyBtb3JlIGVycm9ycyIpKQotCi0KLQwKLTs7IHB5ZG9jIGNvbW1hbmRzLiBUaGUgZ3V0cyBvZiB0aGlzIGZ1bmN0aW9uIGlzIHN0b2xlbiBmcm9tIFhFbWFjcydzCi07OyBzeW1ib2wtbmVhci1wb2ludCwgYnV0IHdpdGhvdXQgdGhlIHVzZWxlc3MgcmVnZXhwLXF1b3RlIGNhbGwgb24gdGhlCi07OyByZXN1bHRzLCBub3IgdGhlIGludGVyYWN0aXZlIGJpdC4gIEFsc28sIHdlJ3ZlIGFkZGVkIHRoZSB0ZW1wb3JhcnkKLTs7IHN5bnRheCB0YWJsZSBzZXR0aW5nLCB3aGljaCBTa2lwIG9yaWdpbmFsbHkgaGFkIGJyb2tlbiBvdXQgaW50byBhCi07OyBzZXBhcmF0ZSBmdW5jdGlvbi4gIE5vdGUgdGhhdCBFbWFjcyBkb2Vzbid0IGhhdmUgdGhlIG9yaWdpbmFsCi07OyBmdW5jdGlvbi4KLShkZWZ1biBweS1zeW1ib2wtbmVhci1wb2ludCAoKQotICAiUmV0dXJuIHRoZSBmaXJzdCB0ZXh0dWFsIGl0ZW0gdG8gdGhlIG5lYXJlc3QgcG9pbnQuIgotICA7OyBhbGcgc3RvbGVuIGZyb20gZXRhZy5lbAotICAoc2F2ZS1leGN1cnNpb24KLSAgICAod2l0aC1zeW50YXgtdGFibGUgcHktZG90dGVkLWV4cHJlc3Npb24tc3ludGF4LXRhYmxlCi0gICAgICAoaWYgKG9yIChib2JwKSAobm90IChtZW1xIChjaGFyLXN5bnRheCAoY2hhci1iZWZvcmUpKSAnKD93ID9fKSkpKQotCSAgKHdoaWxlIChub3QgKGxvb2tpbmctYXQgIlxcc3dcXHxcXHNfXFx8XFwnIikpCi0JICAgIChmb3J3YXJkLWNoYXIgMSkpKQotICAgICAgKHdoaWxlIChsb29raW5nLWF0ICJcXHN3XFx8XFxzXyIpCi0JKGZvcndhcmQtY2hhciAxKSkKLSAgICAgIChpZiAocmUtc2VhcmNoLWJhY2t3YXJkICJcXHN3XFx8XFxzXyIgbmlsIHQpCi0JICAocHJvZ24gKGZvcndhcmQtY2hhciAxKQotCQkgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50KQotCQkJCSAgIChwcm9nbiAoZm9yd2FyZC1zZXhwIC0xKQotCQkJCQkgICh3aGlsZSAobG9va2luZy1hdCAiXFxzJyIpCi0JCQkJCSAgICAoZm9yd2FyZC1jaGFyIDEpKQotCQkJCQkgIChwb2ludCkpKSkKLQluaWwpKSkpCi0KLShkZWZ1biBweS1oZWxwLWF0LXBvaW50ICgpCi0gICJHZXQgaGVscCBmcm9tIFB5dGhvbiBiYXNlZCBvbiB0aGUgc3ltYm9sIG5lYXJlc3QgcG9pbnQuIgotICAoaW50ZXJhY3RpdmUpCi0gIChsZXQqICgoc3ltIChweS1zeW1ib2wtbmVhci1wb2ludCkpCi0JIChiYXNlIChzdWJzdHJpbmcgc3ltIDAgKG9yIChzZWFyY2ggIi4iIHN5bSA6ZnJvbS1lbmQgdCkgMCkpKQotCSBjbWQpCi0gICAgKGlmIChub3QgKGVxdWFsIGJhc2UgIiIpKQotICAgICAgICAoc2V0cSBjbWQgKGNvbmNhdCAiaW1wb3J0ICIgYmFzZSAiXG4iKSkpCi0gICAgKHNldHEgY21kIChjb25jYXQgImltcG9ydCBweWRvY1xuIgotICAgICAgICAgICAgICAgICAgICAgIGNtZAotCQkgICAgICAidHJ5OiBweWRvYy5oZWxwKCciIHN5bSAiJylcbiIKLQkJICAgICAgImV4Y2VwdDogcHJpbnQgJ05vIGhlbHAgYXZhaWxhYmxlIG9uOicsIFwiIiBzeW0gIlwiIikpCi0gICAgKG1lc3NhZ2UgY21kKQotICAgIChweS1leGVjdXRlLXN0cmluZyBjbWQpCi0gICAgKHNldC1idWZmZXIgIipQeXRob24gT3V0cHV0KiIpCi0gICAgOzsgQkFXOiBTaG91bGQgd2UgcmVhbGx5IGJlIGxlYXZpbmcgdGhlIG91dHB1dCBidWZmZXIgaW4gaGVscC1tb2RlPwotICAgIChoZWxwLW1vZGUpKSkKLQotCi0MCi07OyBEb2N1bWVudGF0aW9uIGZ1bmN0aW9ucwotCi07OyBkdW1wIHRoZSBsb25nIGZvcm0gb2YgdGhlIG1vZGUgYmx1cmI7IGRvZXMgdGhlIHVzdWFsIGRvYyBlc2NhcGVzLAotOzsgcGx1cyBsaW5lcyBvZiB0aGUgZm9ybSBeW3ZjXTpuYW1lJCB0byBzdWNrIHZhcmlhYmxlICYgY29tbWFuZCBkb2NzCi07OyBvdXQgb2YgdGhlIHJpZ2h0IHBsYWNlcywgYWxvbmcgd2l0aCB0aGUga2V5cyB0aGV5J3JlIG9uICYgY3VycmVudAotOzsgdmFsdWVzCi0oZGVmdW4gcHktZHVtcC1oZWxwLXN0cmluZyAoc3RyKQotICAod2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXIgIipIZWxwKiIKLSAgICAobGV0ICgobG9jYWxzIChidWZmZXItbG9jYWwtdmFyaWFibGVzKSkKLQkgIGZ1bmNraW5kIGZ1bmNuYW1lIGZ1bmMgZnVuY2RvYwotCSAgKHN0YXJ0IDApIG1zdGFydCBlbmQKLQkgIGtleXMgKQotICAgICAgKHdoaWxlIChzdHJpbmctbWF0Y2ggIl4lXFwoW3ZjXVxcKTpcXCguK1xcKVxuIiBzdHIgc3RhcnQpCi0JKHNldHEgbXN0YXJ0IChtYXRjaC1iZWdpbm5pbmcgMCkgIGVuZCAobWF0Y2gtZW5kIDApCi0JICAgICAgZnVuY2tpbmQgKHN1YnN0cmluZyBzdHIgKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKQotCSAgICAgIGZ1bmNuYW1lIChzdWJzdHJpbmcgc3RyIChtYXRjaC1iZWdpbm5pbmcgMikgKG1hdGNoLWVuZCAyKSkKLQkgICAgICBmdW5jIChpbnRlcm4gZnVuY25hbWUpKQotCShwcmluYyAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMgKHN1YnN0cmluZyBzdHIgc3RhcnQgbXN0YXJ0KSkpCi0JKGNvbmQKLQkgKChlcXVhbCBmdW5ja2luZCAiYyIpCQk7IGNvbW1hbmQKLQkgIChzZXRxIGZ1bmNkb2MgKGRvY3VtZW50YXRpb24gZnVuYykKLQkJa2V5cyAoY29uY2F0Ci0JCSAgICAgICJLZXkocyk6ICIKLQkJICAgICAgKG1hcGNvbmNhdCAna2V5LWRlc2NyaXB0aW9uCi0JCQkJICh3aGVyZS1pcy1pbnRlcm5hbCBmdW5jIHB5LW1vZGUtbWFwKQotCQkJCSAiLCAiKSkpKQotCSAoKGVxdWFsIGZ1bmNraW5kICJ2IikJCTsgdmFyaWFibGUKLQkgIChzZXRxIGZ1bmNkb2MgKGRvY3VtZW50YXRpb24tcHJvcGVydHkgZnVuYyAndmFyaWFibGUtZG9jdW1lbnRhdGlvbikKLQkJa2V5cyAoaWYgKGFzc3EgZnVuYyBsb2NhbHMpCi0JCQkgKGNvbmNhdAotCQkJICAiTG9jYWwvR2xvYmFsIHZhbHVlczogIgotCQkJICAocHJpbjEtdG8tc3RyaW5nIChzeW1ib2wtdmFsdWUgZnVuYykpCi0JCQkgICIgLyAiCi0JCQkgIChwcmluMS10by1zdHJpbmcgKGRlZmF1bHQtdmFsdWUgZnVuYykpKQotCQkgICAgICAgKGNvbmNhdAotCQkJIlZhbHVlOiAiCi0JCQkocHJpbjEtdG8tc3RyaW5nIChzeW1ib2wtdmFsdWUgZnVuYykpKSkpKQotCSAodAkJCQk7IHVuZXhwZWN0ZWQKLQkgIChlcnJvciAiRXJyb3IgaW4gcHktZHVtcC1oZWxwLXN0cmluZywgdGFnIGAlcyciIGZ1bmNraW5kKSkpCi0JKHByaW5jIChmb3JtYXQgIlxuLT4gJXM6XHQlc1x0JXNcblxuIgotCQkgICAgICAgKGlmIChlcXVhbCBmdW5ja2luZCAiYyIpICJDb21tYW5kIiAiVmFyaWFibGUiKQotCQkgICAgICAgZnVuY25hbWUga2V5cykpCi0JKHByaW5jIGZ1bmNkb2MpCi0JKHRlcnByaSkKLQkoc2V0cSBzdGFydCBlbmQpKQotICAgICAgKHByaW5jIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyAoc3Vic3RyaW5nIHN0ciBzdGFydCkpKSkKLSAgICAocHJpbnQtaGVscC1yZXR1cm4tbWVzc2FnZSkpKQotCi0oZGVmdW4gcHktZGVzY3JpYmUtbW9kZSAoKQotICAiRHVtcCBsb25nIGZvcm0gb2YgUHl0aG9uLW1vZGUgZG9jcy4iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKHB5LWR1bXAtaGVscC1zdHJpbmcgIk1ham9yIG1vZGUgZm9yIGVkaXRpbmcgUHl0aG9uIGZpbGVzLgotS25vd3MgYWJvdXQgUHl0aG9uIGluZGVudGF0aW9uLCB0b2tlbnMsIGNvbW1lbnRzIGFuZCBjb250aW51YXRpb24gbGluZXMuCi1QYXJhZ3JhcGhzIGFyZSBzZXBhcmF0ZWQgYnkgYmxhbmsgbGluZXMgb25seS4KLQotTWFqb3Igc2VjdGlvbnMgYmVsb3cgYmVnaW4gd2l0aCB0aGUgc3RyaW5nIGBAJzsgc3BlY2lmaWMgZnVuY3Rpb24gYW5kCi12YXJpYWJsZSBkb2NzIGJlZ2luIHdpdGggYC0+Jy4KLQotQEVYRUNVVElORyBQWVRIT04gQ09ERQotCi1cXFtweS1leGVjdXRlLWltcG9ydC1vci1yZWxvYWRdXHRpbXBvcnRzIG9yIHJlbG9hZHMgdGhlIGZpbGUgaW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlcgotXFxbcHktZXhlY3V0ZS1idWZmZXJdXHRzZW5kcyB0aGUgZW50aXJlIGJ1ZmZlciB0byB0aGUgUHl0aG9uIGludGVycHJldGVyCi1cXFtweS1leGVjdXRlLXJlZ2lvbl1cdHNlbmRzIHRoZSBjdXJyZW50IHJlZ2lvbgotXFxbcHktZXhlY3V0ZS1kZWYtb3ItY2xhc3NdXHRzZW5kcyB0aGUgY3VycmVudCBmdW5jdGlvbiBvciBjbGFzcyBkZWZpbml0aW9uCi1cXFtweS1leGVjdXRlLXN0cmluZ11cdHNlbmRzIGFuIGFyYml0cmFyeSBzdHJpbmcKLVxcW3B5LXNoZWxsXVx0c3RhcnRzIGEgUHl0aG9uIGludGVycHJldGVyIHdpbmRvdzsgdGhpcyB3aWxsIGJlIHVzZWQgYnkKLVx0c3Vic2VxdWVudCBQeXRob24gZXhlY3V0aW9uIGNvbW1hbmRzCi0lYzpweS1leGVjdXRlLWltcG9ydC1vci1yZWxvYWQKLSVjOnB5LWV4ZWN1dGUtYnVmZmVyCi0lYzpweS1leGVjdXRlLXJlZ2lvbgotJWM6cHktZXhlY3V0ZS1kZWYtb3ItY2xhc3MKLSVjOnB5LWV4ZWN1dGUtc3RyaW5nCi0lYzpweS1zaGVsbAotCi1AVkFSSUFCTEVTCi0KLXB5LWluZGVudC1vZmZzZXRcdGluZGVudGF0aW9uIGluY3JlbWVudAotcHktYmxvY2stY29tbWVudC1wcmVmaXhcdGNvbW1lbnQgc3RyaW5nIHVzZWQgYnkgY29tbWVudC1yZWdpb24KLQotcHktcHl0aG9uLWNvbW1hbmRcdHNoZWxsIGNvbW1hbmQgdG8gaW52b2tlIFB5dGhvbiBpbnRlcnByZXRlcgotcHktdGVtcC1kaXJlY3RvcnlcdGRpcmVjdG9yeSB1c2VkIGZvciB0ZW1wIGZpbGVzIChpZiBuZWVkZWQpCi0KLXB5LWJlZXAtaWYtdGFiLWNoYW5nZVx0cmluZyB0aGUgYmVsbCBpZiB0YWItd2lkdGggaXMgY2hhbmdlZAotJXY6cHktaW5kZW50LW9mZnNldAotJXY6cHktYmxvY2stY29tbWVudC1wcmVmaXgKLSV2OnB5LXB5dGhvbi1jb21tYW5kCi0ldjpweS10ZW1wLWRpcmVjdG9yeQotJXY6cHktYmVlcC1pZi10YWItY2hhbmdlCi0KLUBLSU5EUyBPRiBMSU5FUwotCi1FYWNoIHBoeXNpY2FsIGxpbmUgaW4gdGhlIGZpbGUgaXMgZWl0aGVyIGEgYGNvbnRpbnVhdGlvbiBsaW5lJyAodGhlCi1wcmVjZWRpbmcgbGluZSBlbmRzIHdpdGggYSBiYWNrc2xhc2ggdGhhdCdzIG5vdCBwYXJ0IG9mIGEgY29tbWVudCwgb3IKLXRoZSBwYXJlbi9icmFja2V0L2JyYWNlIG5lc3RpbmcgbGV2ZWwgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGlzCi1ub24temVybywgb3IgYm90aCkgb3IgYW4gYGluaXRpYWwgbGluZScgKGV2ZXJ5dGhpbmcgZWxzZSkuCi0KLUFuIGluaXRpYWwgbGluZSBpcyBpbiB0dXJuIGEgYGJsYW5rIGxpbmUnIChjb250YWlucyBub3RoaW5nIGV4Y2VwdAotcG9zc2libHkgYmxhbmtzIG9yIHRhYnMpLCBhIGBjb21tZW50IGxpbmUnIChsZWZ0bW9zdCBub24tYmxhbmsKLWNoYXJhY3RlciBpcyBgIycpLCBvciBhIGBjb2RlIGxpbmUnIChldmVyeXRoaW5nIGVsc2UpLgotCi1Db21tZW50IExpbmVzCi0KLUFsdGhvdWdoIGFsbCBjb21tZW50IGxpbmVzIGFyZSB0cmVhdGVkIGFsaWtlIGJ5IFB5dGhvbiwgUHl0aG9uIG1vZGUKLXJlY29nbml6ZXMgdHdvIGtpbmRzIHRoYXQgYWN0IGRpZmZlcmVudGx5IHdpdGggcmVzcGVjdCB0byBpbmRlbnRhdGlvbi4KLQotQW4gYGluZGVudGluZyBjb21tZW50IGxpbmUnIGlzIGEgY29tbWVudCBsaW5lIHdpdGggYSBibGFuaywgdGFiIG9yCi1ub3RoaW5nIGFmdGVyIHRoZSBpbml0aWFsIGAjJy4gIFRoZSBpbmRlbnRhdGlvbiBjb21tYW5kcyAoc2VlIGJlbG93KQotdHJlYXQgdGhlc2UgZXhhY3RseSBhcyBpZiB0aGV5IHdlcmUgY29kZSBsaW5lczogYSBsaW5lIGZvbGxvd2luZyBhbgotaW5kZW50aW5nIGNvbW1lbnQgbGluZSB3aWxsIGJlIGluZGVudGVkIGxpa2UgdGhlIGNvbW1lbnQgbGluZS4gIEFsbAotb3RoZXIgY29tbWVudCBsaW5lcyAodGhvc2Ugd2l0aCBhIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpbW1lZGlhdGVseQotZm9sbG93aW5nIHRoZSBpbml0aWFsIGAjJykgYXJlIGBub24taW5kZW50aW5nIGNvbW1lbnQgbGluZXMnLCBhbmQKLXRoZWlyIGluZGVudGF0aW9uIGlzIGlnbm9yZWQgYnkgdGhlIGluZGVudGF0aW9uIGNvbW1hbmRzLgotCi1JbmRlbnRpbmcgY29tbWVudCBsaW5lcyBhcmUgYnkgZmFyIHRoZSB1c3VhbCBjYXNlLCBhbmQgc2hvdWxkIGJlIHVzZWQKLXdoZW5ldmVyIHBvc3NpYmxlLiAgTm9uLWluZGVudGluZyBjb21tZW50IGxpbmVzIGFyZSB1c2VmdWwgaW4gY2FzZXMKLWxpa2UgdGhlc2U6Ci0KLVx0YSA9IGIgICAjIGEgdmVyeSB3b3JkeSBzaW5nbGUtbGluZSBjb21tZW50IHRoYXQgZW5kcyB1cCBiZWluZwotXHQgICAgICAgICMuLi4gY29udGludWVkIG9udG8gYW5vdGhlciBsaW5lCi0KLVx0aWYgYSA9PSBiOgotIyNcdFx0cHJpbnQgJ3BhbmljIScgIyBvbGQgY29kZSB3ZSd2ZSBgY29tbWVudGVkIG91dCcKLVx0XHRyZXR1cm4gYQotCi1TaW5jZSB0aGUgYCMuLi4nIGFuZCBgIyMnIGNvbW1lbnQgbGluZXMgaGF2ZSBhIG5vbi13aGl0ZXNwYWNlCi1jaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBpbml0aWFsIGAjJywgUHl0aG9uIG1vZGUgaWdub3JlcyB0aGVtIHdoZW4KLWNvbXB1dGluZyB0aGUgcHJvcGVyIGluZGVudGF0aW9uIGZvciB0aGUgbmV4dCBsaW5lLgotCi1Db250aW51YXRpb24gTGluZXMgYW5kIFN0YXRlbWVudHMKLQotVGhlIFB5dGhvbi1tb2RlIGNvbW1hbmRzIGdlbmVyYWxseSB3b3JrIG9uIHN0YXRlbWVudHMgaW5zdGVhZCBvZiBvbgotaW5kaXZpZHVhbCBsaW5lcywgd2hlcmUgYSBgc3RhdGVtZW50JyBpcyBhIGNvbW1lbnQgb3IgYmxhbmsgbGluZSwgb3IgYQotY29kZSBsaW5lIGFuZCBhbGwgb2YgaXRzIGZvbGxvd2luZyBjb250aW51YXRpb24gbGluZXMgKGlmIGFueSkKLWNvbnNpZGVyZWQgYXMgYSBzaW5nbGUgbG9naWNhbCB1bml0LiAgVGhlIGNvbW1hbmRzIGluIHRoaXMgbW9kZQotZ2VuZXJhbGx5ICh3aGVuIGl0IG1ha2VzIHNlbnNlKSBhdXRvbWF0aWNhbGx5IG1vdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZQotc3RhdGVtZW50IGNvbnRhaW5pbmcgcG9pbnQsIGV2ZW4gaWYgcG9pbnQgaGFwcGVucyB0byBiZSBpbiB0aGUgbWlkZGxlCi1vZiBzb21lIGNvbnRpbnVhdGlvbiBsaW5lLgotCi0KLUBJTkRFTlRBVElPTgotCi1QcmltYXJpbHkgZm9yIGVudGVyaW5nIG5ldyBjb2RlOgotXHRcXFtpbmRlbnQtZm9yLXRhYi1jb21tYW5kXVx0IGluZGVudCBsaW5lIGFwcHJvcHJpYXRlbHkKLVx0XFxbcHktbmV3bGluZS1hbmQtaW5kZW50XVx0IGluc2VydCBuZXdsaW5lLCB0aGVuIGluZGVudAotXHRcXFtweS1lbGVjdHJpYy1iYWNrc3BhY2VdXHQgcmVkdWNlIGluZGVudGF0aW9uLCBvciBkZWxldGUgc2luZ2xlIGNoYXJhY3RlcgotCi1QcmltYXJpbHkgZm9yIHJlaW5kZW50aW5nIGV4aXN0aW5nIGNvZGU6Ci1cdFxcW3B5LWd1ZXNzLWluZGVudC1vZmZzZXRdXHQgZ3Vlc3MgcHktaW5kZW50LW9mZnNldCBmcm9tIGZpbGUgY29udGVudDsgY2hhbmdlIGxvY2FsbHkKLVx0XFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBcXFtweS1ndWVzcy1pbmRlbnQtb2Zmc2V0XVx0IGRpdHRvLCBidXQgY2hhbmdlIGdsb2JhbGx5Ci0KLVx0XFxbcHktaW5kZW50LXJlZ2lvbl1cdCByZWluZGVudCByZWdpb24gdG8gbWF0Y2ggaXRzIGNvbnRleHQKLVx0XFxbcHktc2hpZnQtcmVnaW9uLWxlZnRdXHQgc2hpZnQgcmVnaW9uIGxlZnQgYnkgcHktaW5kZW50LW9mZnNldAotXHRcXFtweS1zaGlmdC1yZWdpb24tcmlnaHRdXHQgc2hpZnQgcmVnaW9uIHJpZ2h0IGJ5IHB5LWluZGVudC1vZmZzZXQKLQotVW5saWtlIG1vc3QgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLCBQeXRob24gdXNlcyBpbmRlbnRhdGlvbiwgYW5kIG9ubHkKLWluZGVudGF0aW9uLCB0byBzcGVjaWZ5IGJsb2NrIHN0cnVjdHVyZS4gIEhlbmNlIHRoZSBpbmRlbnRhdGlvbiBzdXBwbGllZAotYXV0b21hdGljYWxseSBieSBQeXRob24tbW9kZSBpcyBqdXN0IGFuIGVkdWNhdGVkIGd1ZXNzOiAgb25seSB5b3Uga25vdwotdGhlIGJsb2NrIHN0cnVjdHVyZSB5b3UgaW50ZW5kLCBzbyBvbmx5IHlvdSBjYW4gc3VwcGx5IGNvcnJlY3QKLWluZGVudGF0aW9uLgotCi1UaGUgXFxbaW5kZW50LWZvci10YWItY29tbWFuZF0gYW5kIFxcW3B5LW5ld2xpbmUtYW5kLWluZGVudF0ga2V5cyB0cnkgdG8gc3VnZ2VzdCBwbGF1c2libGUgaW5kZW50YXRpb24sIGJhc2VkIG9uCi10aGUgaW5kZW50YXRpb24gb2YgcHJlY2VkaW5nIHN0YXRlbWVudHMuICBFLmcuLCBhc3N1bWluZwotcHktaW5kZW50LW9mZnNldCBpcyA0LCBhZnRlciB5b3UgZW50ZXIKLVx0aWYgYSA+IDA6IFxcW3B5LW5ld2xpbmUtYW5kLWluZGVudF0KLXRoZSBjdXJzb3Igd2lsbCBiZSBtb3ZlZCB0byB0aGUgcG9zaXRpb24gb2YgdGhlIGBfJyAoXyBpcyBub3QgYQotY2hhcmFjdGVyIGluIHRoZSBmaWxlLCBpdCdzIGp1c3QgdXNlZCBoZXJlIHRvIGluZGljYXRlIHRoZSBsb2NhdGlvbiBvZgotdGhlIGN1cnNvcik6Ci1cdGlmIGEgPiAwOgotXHQgICAgXwotSWYgeW91IHRoZW4gZW50ZXIgYGMgPSBkJyBcXFtweS1uZXdsaW5lLWFuZC1pbmRlbnRdLCB0aGUgY3Vyc29yIHdpbGwgbW92ZQotdG8KLVx0aWYgYSA+IDA6Ci1cdCAgICBjID0gZAotXHQgICAgXwotUHl0aG9uLW1vZGUgY2Fubm90IGtub3cgd2hldGhlciB0aGF0J3Mgd2hhdCB5b3UgaW50ZW5kZWQsIG9yIHdoZXRoZXIKLVx0aWYgYSA+IDA6Ci1cdCAgICBjID0gZAotXHRfCi13YXMgeW91ciBpbnRlbnQuICBJbiBnZW5lcmFsLCBQeXRob24tbW9kZSBlaXRoZXIgcmVwcm9kdWNlcyB0aGUKLWluZGVudGF0aW9uIG9mIHRoZSAoY2xvc2VzdCBjb2RlIG9yIGluZGVudGluZy1jb21tZW50KSBwcmVjZWRpbmcKLXN0YXRlbWVudCwgb3IgYWRkcyBhbiBleHRyYSBweS1pbmRlbnQtb2Zmc2V0IGJsYW5rcyBpZiB0aGUgcHJlY2VkaW5nCi1zdGF0ZW1lbnQgaGFzIGA6JyBhcyBpdHMgbGFzdCBzaWduaWZpY2FudCAobm9uLXdoaXRlc3BhY2UgYW5kIG5vbi0KLWNvbW1lbnQpIGNoYXJhY3Rlci4gIElmIHRoZSBzdWdnZXN0ZWQgaW5kZW50YXRpb24gaXMgdG9vIG11Y2gsIHVzZQotXFxbcHktZWxlY3RyaWMtYmFja3NwYWNlXSB0byByZWR1Y2UgaXQuCi0KLUNvbnRpbnVhdGlvbiBsaW5lcyBhcmUgZ2l2ZW4gZXh0cmEgaW5kZW50YXRpb24uICBJZiB5b3UgZG9uJ3QgbGlrZSB0aGUKLXN1Z2dlc3RlZCBpbmRlbnRhdGlvbiwgY2hhbmdlIGl0IHRvIHNvbWV0aGluZyB5b3UgZG8gbGlrZSwgYW5kIFB5dGhvbi0KLW1vZGUgd2lsbCBzdHJpdmUgdG8gaW5kZW50IGxhdGVyIGxpbmVzIG9mIHRoZSBzdGF0ZW1lbnQgaW4gdGhlIHNhbWUgd2F5LgotCi1JZiBhIGxpbmUgaXMgYSBjb250aW51YXRpb24gbGluZSBieSB2aXJ0dWUgb2YgYmVpbmcgaW4gYW4gdW5jbG9zZWQKLXBhcmVuL2JyYWNrZXQvYnJhY2Ugc3RydWN0dXJlIChgbGlzdCcsIGZvciBzaG9ydCksIHRoZSBzdWdnZXN0ZWQKLWluZGVudGF0aW9uIGRlcGVuZHMgb24gd2hldGhlciB0aGUgY3VycmVudCBsaW5lIGNvbnRhaW5zIHRoZSBmaXJzdCBpdGVtCi1pbiB0aGUgbGlzdC4gIElmIGl0IGRvZXMsIGl0J3MgaW5kZW50ZWQgcHktaW5kZW50LW9mZnNldCBjb2x1bW5zIGJleW9uZAotdGhlIGluZGVudGF0aW9uIG9mIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIG9wZW4gYnJhY2tldC4gIElmIHlvdSBkb24ndAotbGlrZSB0aGF0LCBjaGFuZ2UgaXQgYnkgaGFuZC4gIFRoZSByZW1haW5pbmcgaXRlbXMgaW4gdGhlIGxpc3Qgd2lsbCBtaW1pYwotd2hhdGV2ZXIgaW5kZW50YXRpb24geW91IGdpdmUgdG8gdGhlIGZpcnN0IGl0ZW0uCi0KLUlmIGEgbGluZSBpcyBhIGNvbnRpbnVhdGlvbiBsaW5lIGJlY2F1c2UgdGhlIGxpbmUgcHJlY2VkaW5nIGl0IGVuZHMgd2l0aAotYSBiYWNrc2xhc2gsIHRoZSB0aGlyZCBhbmQgZm9sbG93aW5nIGxpbmVzIG9mIHRoZSBzdGF0ZW1lbnQgaW5oZXJpdCB0aGVpcgotaW5kZW50YXRpb24gZnJvbSB0aGUgbGluZSBwcmVjZWRpbmcgdGhlbS4gIFRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgc2Vjb25kCi1saW5lIGluIHRoZSBzdGF0ZW1lbnQgZGVwZW5kcyBvbiB0aGUgZm9ybSBvZiB0aGUgZmlyc3QgKGJhc2UpIGxpbmU6ICBpZgotdGhlIGJhc2UgbGluZSBpcyBhbiBhc3NpZ25tZW50IHN0YXRlbWVudCB3aXRoIGFueXRoaW5nIG1vcmUgaW50ZXJlc3RpbmcKLXRoYW4gdGhlIGJhY2tzbGFzaCBmb2xsb3dpbmcgdGhlIGxlZnRtb3N0IGFzc2lnbmluZyBgPScsIHRoZSBzZWNvbmQgbGluZQotaXMgaW5kZW50ZWQgdHdvIGNvbHVtbnMgYmV5b25kIHRoYXQgYD0nLiAgRWxzZSBpdCdzIGluZGVudGVkIHRvIHR3bwotY29sdW1ucyBiZXlvbmQgdGhlIGxlZnRtb3N0IHNvbGlkIGNodW5rIG9mIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgb24KLXRoZSBiYXNlIGxpbmUuCi0KLVdhcm5pbmc6ICBpbmRlbnQtcmVnaW9uIHNob3VsZCBub3Qgbm9ybWFsbHkgYmUgdXNlZCEgIEl0IGNhbGxzIFxcW2luZGVudC1mb3ItdGFiLWNvbW1hbmRdCi1yZXBlYXRlZGx5LCBhbmQgYXMgZXhwbGFpbmVkIGFib3ZlLCBcXFtpbmRlbnQtZm9yLXRhYi1jb21tYW5kXSBjYW4ndCBndWVzcyB0aGUgYmxvY2sKLXN0cnVjdHVyZSB5b3UgaW50ZW5kLgotJWM6aW5kZW50LWZvci10YWItY29tbWFuZAotJWM6cHktbmV3bGluZS1hbmQtaW5kZW50Ci0lYzpweS1lbGVjdHJpYy1iYWNrc3BhY2UKLQotCi1UaGUgbmV4dCBmdW5jdGlvbiBtYXkgYmUgaGFuZHkgd2hlbiBlZGl0aW5nIGNvZGUgeW91IGRpZG4ndCB3cml0ZToKLSVjOnB5LWd1ZXNzLWluZGVudC1vZmZzZXQKLQotCi1UaGUgcmVtYWluaW5nIGBpbmRlbnQnIGZ1bmN0aW9ucyBhcHBseSB0byBhIHJlZ2lvbiBvZiBQeXRob24gY29kZS4gIFRoZXkKLWFzc3VtZSB0aGUgYmxvY2sgc3RydWN0dXJlIChlcXVhbHMgaW5kZW50YXRpb24sIGluIFB5dGhvbikgb2YgdGhlIHJlZ2lvbgotaXMgY29ycmVjdCwgYW5kIGFsdGVyIHRoZSBpbmRlbnRhdGlvbiBpbiB2YXJpb3VzIHdheXMgd2hpbGUgcHJlc2VydmluZwotdGhlIGJsb2NrIHN0cnVjdHVyZToKLSVjOnB5LWluZGVudC1yZWdpb24KLSVjOnB5LXNoaWZ0LXJlZ2lvbi1sZWZ0Ci0lYzpweS1zaGlmdC1yZWdpb24tcmlnaHQKLQotQE1BUktJTkcgJiBNQU5JUFVMQVRJTkcgUkVHSU9OUyBPRiBDT0RFCi0KLVxcW3B5LW1hcmstYmxvY2tdXHQgbWFyayBibG9jayBvZiBsaW5lcwotXFxbcHktbWFyay1kZWYtb3ItY2xhc3NdXHQgbWFyayBzbWFsbGVzdCBlbmNsb3NpbmcgZGVmCi1cXFt1bml2ZXJzYWwtYXJndW1lbnRdIFxcW3B5LW1hcmstZGVmLW9yLWNsYXNzXVx0IG1hcmsgc21hbGxlc3QgZW5jbG9zaW5nIGNsYXNzCi1cXFtjb21tZW50LXJlZ2lvbl1cdCBjb21tZW50IG91dCByZWdpb24gb2YgY29kZQotXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBcXFtjb21tZW50LXJlZ2lvbl1cdCB1bmNvbW1lbnQgcmVnaW9uIG9mIGNvZGUKLSVjOnB5LW1hcmstYmxvY2sKLSVjOnB5LW1hcmstZGVmLW9yLWNsYXNzCi0lYzpjb21tZW50LXJlZ2lvbgotCi1ATU9WSU5HIFBPSU5UCi0KLVxcW3B5LXByZXZpb3VzLXN0YXRlbWVudF1cdCBtb3ZlIHRvIHN0YXRlbWVudCBwcmVjZWRpbmcgcG9pbnQKLVxcW3B5LW5leHQtc3RhdGVtZW50XVx0IG1vdmUgdG8gc3RhdGVtZW50IGZvbGxvd2luZyBwb2ludAotXFxbcHktZ290by1ibG9jay11cF1cdCBtb3ZlIHVwIHRvIHN0YXJ0IG9mIGN1cnJlbnQgYmxvY2sKLVxcW3B5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3NdXHQgbW92ZSB0byBzdGFydCBvZiBkZWYKLVxcW3VuaXZlcnNhbC1hcmd1bWVudF0gXFxbcHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzc11cdCBtb3ZlIHRvIHN0YXJ0IG9mIGNsYXNzCi1cXFtweS1lbmQtb2YtZGVmLW9yLWNsYXNzXVx0IG1vdmUgdG8gZW5kIG9mIGRlZgotXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBcXFtweS1lbmQtb2YtZGVmLW9yLWNsYXNzXVx0IG1vdmUgdG8gZW5kIG9mIGNsYXNzCi0KLVRoZSBmaXJzdCB0d28gbW92ZSB0byBvbmUgc3RhdGVtZW50IGJleW9uZCB0aGUgc3RhdGVtZW50IHRoYXQgY29udGFpbnMKLXBvaW50LiAgQSBudW1lcmljIHByZWZpeCBhcmd1bWVudCB0ZWxscyB0aGVtIHRvIG1vdmUgdGhhdCBtYW55Ci1zdGF0ZW1lbnRzIGluc3RlYWQuICBCbGFuayBsaW5lcywgY29tbWVudCBsaW5lcywgYW5kIGNvbnRpbnVhdGlvbiBsaW5lcwotZG8gbm90IGNvdW50IGFzIGBzdGF0ZW1lbnRzJyBmb3IgdGhlc2UgY29tbWFuZHMuICBTbywgZS5nLiwgeW91IGNhbiBnbwotdG8gdGhlIGZpcnN0IGNvZGUgc3RhdGVtZW50IGluIGEgZmlsZSBieSBlbnRlcmluZwotXHRcXFtiZWdpbm5pbmctb2YtYnVmZmVyXVx0IHRvIG1vdmUgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZQotXHRcXFtweS1uZXh0LXN0YXRlbWVudF1cdCB0byBza2lwIG92ZXIgaW5pdGlhbCBjb21tZW50cyBhbmQgYmxhbmsgbGluZXMKLU9yIGRvIGBcXFtweS1wcmV2aW91cy1zdGF0ZW1lbnRdJyB3aXRoIGEgaHVnZSBwcmVmaXggYXJndW1lbnQuCi0lYzpweS1wcmV2aW91cy1zdGF0ZW1lbnQKLSVjOnB5LW5leHQtc3RhdGVtZW50Ci0lYzpweS1nb3RvLWJsb2NrLXVwCi0lYzpweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzCi0lYzpweS1lbmQtb2YtZGVmLW9yLWNsYXNzCi0KLUBMSVRUTEUtS05PV04gRU1BQ1MgQ09NTUFORFMgUEFSVElDVUxBUkxZIFVTRUZVTCBJTiBQWVRIT04gTU9ERQotCi1gXFxbaW5kZW50LW5ldy1jb21tZW50LWxpbmVdJyBpcyBoYW5keSBmb3IgZW50ZXJpbmcgYSBtdWx0aS1saW5lIGNvbW1lbnQuCi0KLWBcXFtzZXQtc2VsZWN0aXZlLWRpc3BsYXldJyB3aXRoIGEgYHNtYWxsJyBwcmVmaXggYXJnIGlzIGlkZWFsbHkgc3VpdGVkIGZvciB2aWV3aW5nIHRoZQotb3ZlcmFsbCBjbGFzcyBhbmQgZGVmIHN0cnVjdHVyZSBvZiBhIG1vZHVsZS4KLQotYFxcW2JhY2stdG8taW5kZW50YXRpb25dJyBtb3ZlcyBwb2ludCB0byBhIGxpbmUncyBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyLgotCi1gXFxbaW5kZW50LXJlbGF0aXZlXScgaXMgaGFuZHkgZm9yIGNyZWF0aW5nIG9kZCBpbmRlbnRhdGlvbi4KLQotQE9USEVSIEVNQUNTIEhJTlRTCi0KLUlmIHlvdSBkb24ndCBsaWtlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgdmFyaWFibGUsIGNoYW5nZSBpdHMgdmFsdWUgdG8KLXdoYXRldmVyIHlvdSBkbyBsaWtlIGJ5IHB1dHRpbmcgYSBgc2V0cScgbGluZSBpbiB5b3VyIC5lbWFjcyBmaWxlLgotRS5nLiwgdG8gc2V0IHRoZSBpbmRlbnRhdGlvbiBpbmNyZW1lbnQgdG8gNCwgcHV0IHRoaXMgbGluZSBpbiB5b3VyCi0uZW1hY3M6Ci1cdChzZXRxICBweS1pbmRlbnQtb2Zmc2V0ICA0KQotVG8gc2VlIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLCBkbyBgXFxbZGVzY3JpYmUtdmFyaWFibGVdJyBhbmQgZW50ZXIgdGhlIHZhcmlhYmxlCi1uYW1lIGF0IHRoZSBwcm9tcHQuCi0KLVdoZW4gZW50ZXJpbmcgYSBrZXkgc2VxdWVuY2UgbGlrZSBgQy1jIEMtbicsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KLXJlbGVhc2UgdGhlIENPTlRST0wga2V5IGFmdGVyIGRvaW5nIHRoZSBgQy1jJyBwYXJ0IC0tIGl0IHN1ZmZpY2VzIHRvCi1wcmVzcyB0aGUgQ09OVFJPTCBrZXksIHByZXNzIGFuZCByZWxlYXNlIGBjJyAod2hpbGUgc3RpbGwgaG9sZGluZyBkb3duCi1DT05UUk9MKSwgcHJlc3MgYW5kIHJlbGVhc2UgYG4nICh3aGlsZSBzdGlsbCBob2xkaW5nIGRvd24gQ09OVFJPTCksICYKLXRoZW4gcmVsZWFzZSBDT05UUk9MLgotCi1FbnRlcmluZyBQeXRob24gbW9kZSBjYWxscyB3aXRoIG5vIGFyZ3VtZW50cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlCi1gcHl0aG9uLW1vZGUtaG9vaycsIGlmIHRoYXQgdmFsdWUgZXhpc3RzIGFuZCBpcyBub3QgbmlsOyBmb3IgYmFja3dhcmQKLWNvbXBhdGliaWxpdHkgaXQgYWxzbyB0cmllcyBgcHktbW9kZS1ob29rJzsgc2VlIHRoZSBgSG9va3MnIHNlY3Rpb24gb2YKLXRoZSBFbGlzcCBtYW51YWwgZm9yIGRldGFpbHMuCi0KLU9ic2N1cmU6ICBXaGVuIHB5dGhvbi1tb2RlIGlzIGZpcnN0IGxvYWRlZCwgaXQgbG9va3MgZm9yIGFsbCBiaW5kaW5ncwotdG8gbmV3bGluZS1hbmQtaW5kZW50IGluIHRoZSBnbG9iYWwga2V5bWFwLCBhbmQgc2hhZG93cyB0aGVtIHdpdGgKLWxvY2FsIGJpbmRpbmdzIHRvIHB5LW5ld2xpbmUtYW5kLWluZGVudC4iKSkKLQotKHJlcXVpcmUgJ2luZm8tbG9vaykKLTs7IFRoZSBpbmZvLWxvb2sgcGFja2FnZSBkb2VzIG5vdCBhbHdheXMgcHJvdmlkZSB0aGlzIGZ1bmN0aW9uIChpdAotOzsgYXBwZWFycyB0aGlzIGlzIHRoZSBjYXNlIHdpdGggWEVtYWNzIDIxLjEpCi0od2hlbiAoZmJvdW5kcCAnaW5mby1sb29rdXAtbWF5YmUtYWRkLWhlbHApCi0gIChpbmZvLWxvb2t1cC1tYXliZS1hZGQtaGVscAotICAgOm1vZGUgJ3B5dGhvbi1tb2RlCi0gICA6cmVnZXhwICJbYS16QS1aMC05X10rIgotICAgOmRvYy1zcGVjICcoKCIocHl0aG9uLWxpYilNb2R1bGUgSW5kZXgiKQotCSAgICAgICAoIihweXRob24tbGliKUNsYXNzLUV4Y2VwdGlvbi1PYmplY3QgSW5kZXgiKQotCSAgICAgICAoIihweXRob24tbGliKUZ1bmN0aW9uLU1ldGhvZC1WYXJpYWJsZSBJbmRleCIpCi0JICAgICAgICgiKHB5dGhvbi1saWIpTWlzY2VsbGFuZW91cyBJbmRleCIpKSkKLSAgKQotCi0MCi07OyBIZWxwZXIgZnVuY3Rpb25zCi0oZGVmdmFyIHB5LXBhcnNlLXN0YXRlLXJlCi0gIChjb25jYXQKLSAgICJeWyBcdF0qXFwoZWxpZlxcfGVsc2VcXHx3aGlsZVxcfGRlZlxcfGNsYXNzXFwpXFw+IgotICAgIlxcfCIKLSAgICJeW14gI1x0XG5dIikpCi0KLShkZWZ1biBweS1wYXJzZS1zdGF0ZSAoKQotICAiUmV0dXJuIHRoZSBwYXJzZSBzdGF0ZSBhdCBwb2ludCAoc2VlIGBwYXJzZS1wYXJ0aWFsLXNleHAnIGRvY3MpLiIKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKGxldCAoKGhlcmUgKHBvaW50KSkKLQkgIHBwcyBkb25lKQotICAgICAgKHdoaWxlIChub3QgZG9uZSkKLQk7OyBiYWNrIHVwIHRvIHRoZSBmaXJzdCBwcmVjZWRpbmcgbGluZSAoaWYgYW55OyBlbHNlIHN0YXJ0IG9mCi0JOzsgYnVmZmVyKSB0aGF0IGJlZ2lucyB3aXRoIGEgcG9wdWxhciBQeXRob24ga2V5d29yZCwgb3IgYQotCTs7IG5vbi0gd2hpdGVzcGFjZSBhbmQgbm9uLWNvbW1lbnQgY2hhcmFjdGVyLiAgVGhlc2UgYXJlIGdvb2QKLQk7OyBwbGFjZXMgdG8gc3RhcnQgcGFyc2luZyB0byBzZWUgd2hldGhlciB3aGVyZSB3ZSBzdGFydGVkIGlzCi0JOzsgYXQgYSBub24temVybyBuZXN0aW5nIGxldmVsLiAgSXQgbWF5IGJlIHNsb3cgZm9yIHBlb3BsZSB3aG8KLQk7OyB3cml0ZSBodWdlIGNvZGUgYmxvY2tzIG9yIGh1Z2UgbGlzdHMgLi4uIHRvdWdoIGJlYW5zLgotCShyZS1zZWFyY2gtYmFja3dhcmQgcHktcGFyc2Utc3RhdGUtcmUgbmlsICdtb3ZlKQotCShiZWdpbm5pbmctb2YtbGluZSkKLQk7OyBJbiBYRW1hY3MsIHdlIGhhdmUgYSBtdWNoIGJldHRlciB3YXkgdG8gdGVzdCBmb3Igd2hldGhlcgotCTs7IHdlJ3JlIGluIGEgdHJpcGxlLXF1b3RlZCBzdHJpbmcgb3Igbm90LiAgRW1hY3MgZG9lcyBub3QKLQk7OyBoYXZlIHRoaXMgYnVpbHQtaW4gZnVuY3Rpb24sIHdoaWNoIGlzIGl0cyBsb3NzIGJlY2F1c2UKLQk7OyB3aXRob3V0IHNjYW5uaW5nIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLCB0aGVyZSdzCi0JOzsgbm8gYWNjdXJhdGUgd2F5IHRvIGRldGVybWluZSB0aGlzIG90aGVyd2lzZS4KLQkoc2F2ZS1leGN1cnNpb24gKHNldHEgcHBzIChwYXJzZS1wYXJ0aWFsLXNleHAgKHBvaW50KSBoZXJlKSkpCi0JOzsgbWFrZSBzdXJlIHdlIGRvbid0IGxhbmQgaW5zaWRlIGEgdHJpcGxlLXF1b3RlZCBzdHJpbmcKLQkoc2V0cSBkb25lIChvciAobm90IChudGggMyBwcHMpKQotCQkgICAgICAgKGJvYnApKSkKLQk7OyBKdXN0IGdvIGFoZWFkIGFuZCBzaG9ydCBjaXJjdWl0IHRoZSB0ZXN0IGJhY2sgdG8gdGhlCi0JOzsgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIuICBUaGlzIHdpbGwgYmUgc2xvdywgYnV0IG5vdAotCTs7IG5lYXJseSBhcyBzbG93IGFzIGxvb3BpbmcgdGhyb3VnaCBtYW55Ci0JOzsgcmUtc2VhcmNoLWJhY2t3YXJkcy4KLQkoaWYgKG5vdCBkb25lKQotCSAgICAoZ290by1jaGFyIChwb2ludC1taW4pKSkpCi0gICAgICBwcHMpKSkKLQotKGRlZnVuIHB5LW5lc3RpbmctbGV2ZWwgKCkKLSAgIlJldHVybiB0aGUgYnVmZmVyIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHVuY2xvc2VkIGVuY2xvc2luZyBsaXN0LgotSWYgbmVzdGluZyBsZXZlbCBpcyB6ZXJvLCByZXR1cm4gbmlsLiIKLSAgKGxldCAoKHN0YXR1cyAocHktcGFyc2Utc3RhdGUpKSkKLSAgICAoaWYgKHplcm9wIChjYXIgc3RhdHVzKSkKLQluaWwJCQkJOyBub3QgaW4gYSBuZXN0Ci0gICAgICAoY2FyIChjZHIgc3RhdHVzKSkpKSkJCTsgY2hhciMgb2Ygb3BlbiBicmFja2V0Ci0KLShkZWZ1biBweS1iYWNrc2xhc2gtY29udGludWF0aW9uLWxpbmUtcCAoKQotICAiUmV0dXJuIHQgaWZmIHByZWNlZGluZyBsaW5lIGVuZHMgd2l0aCBiYWNrc2xhc2ggdGhhdCBpcyBub3QgaW4gYSBjb21tZW50LiIKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgIChhbmQKLSAgICAgOzsgdXNlIGEgY2hlYXAgdGVzdCBmaXJzdCB0byBhdm9pZCB0aGUgcmVnZXhwIGlmIHBvc3NpYmxlCi0gICAgIDs7IHVzZSAnZXEnIGJlY2F1c2UgY2hhci1hZnRlciBtYXkgcmV0dXJuIG5pbAotICAgICAoZXEgKGNoYXItYWZ0ZXIgKC0gKHBvaW50KSAyKSkgP1xcICkKLSAgICAgOzsgbWFrZSBzdXJlOyBzaW5jZSBlcSB0ZXN0IHBhc3NlZCwgdGhlcmUgaXMgYSBwcmVjZWRpbmcgbGluZQotICAgICAoZm9yd2FyZC1saW5lIC0xKQkJCTsgYWx3YXlzIHRydWUgLS0gc2lkZSBlZmZlY3QKLSAgICAgKGxvb2tpbmctYXQgcHktY29udGludWVkLXJlKSkpKQotCi0oZGVmdW4gcHktY29udGludWF0aW9uLWxpbmUtcCAoKQotICAiUmV0dXJuIHQgaWZmIGN1cnJlbnQgbGluZSBpcyBhIGNvbnRpbnVhdGlvbiBsaW5lLiIKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgIChvciAocHktYmFja3NsYXNoLWNvbnRpbnVhdGlvbi1saW5lLXApCi0JKHB5LW5lc3RpbmctbGV2ZWwpKSkpCi0KLShkZWZ1biBweS1nb3RvLWJlZ2lubmluZy1vZi10cXMgKGRlbGltKQotICAiR28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJpcGxlIHF1b3RlZCBzdHJpbmcgd2UgZmluZCBvdXJzZWx2ZXMgaW4uCi1ERUxJTSBpcyB0aGUgVFFTIHN0cmluZyBkZWxpbWl0ZXIgY2hhcmFjdGVyIHdlJ3JlIHNlYXJjaGluZyBiYWNrd2FyZHMKLWZvci4iCi0gIChsZXQgKChza2lwIChhbmQgZGVsaW0gKG1ha2Utc3RyaW5nIDEgZGVsaW0pKSkKLQkoY29udGludWUgdCkpCi0gICAgKHdoZW4gc2tpcAotICAgICAgKHNhdmUtZXhjdXJzaW9uCi0JKHdoaWxlIGNvbnRpbnVlCi0JICAocHktc2FmZSAoc2VhcmNoLWJhY2t3YXJkIHNraXApKQotCSAgKHNldHEgY29udGludWUgKGFuZCAobm90IChib2JwKSkKLQkJCSAgICAgICg9IChjaGFyLWJlZm9yZSkgP1xcKSkpKQotCShpZiAoYW5kICg9IChjaGFyLWJlZm9yZSkgZGVsaW0pCi0JCSAoPSAoY2hhci1iZWZvcmUgKDEtIChwb2ludCkpKSBkZWxpbSkpCi0JICAgIChzZXRxIHNraXAgKG1ha2Utc3RyaW5nIDMgZGVsaW0pKSkpCi0gICAgICA7OyB3ZSdyZSBsb29raW5nIGF0IGEgdHJpcGxlLXF1b3RlZCBzdHJpbmcKLSAgICAgIChweS1zYWZlIChzZWFyY2gtYmFja3dhcmQgc2tpcCkpKSkpCi0KLShkZWZ1biBweS1nb3RvLWluaXRpYWwtbGluZSAoKQotICAiR28gdG8gdGhlIGluaXRpYWwgbGluZSBvZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQuCi1Vc3VhbGx5IHRoaXMgaXMgdGhlIGxpbmUgd2UncmUgb24sIGJ1dCBpZiB3ZSdyZSBvbiB0aGUgMm5kIG9yCi1mb2xsb3dpbmcgbGluZXMgb2YgYSBjb250aW51YXRpb24gYmxvY2ssIHdlIG5lZWQgdG8gZ28gdXAgdG8gdGhlIGZpcnN0Ci1saW5lIG9mIHRoZSBibG9jay4iCi0gIDs7IFRyaWNreTogV2Ugd2FudCB0byBhdm9pZCBxdWFkcmF0aWMtdGltZSBiZWhhdmlvciBmb3IgbG9uZwotICA7OyBjb250aW51ZWQgYmxvY2tzLCB3aGV0aGVyIG9mIHRoZSBiYWNrc2xhc2ggb3Igb3Blbi1icmFja2V0Ci0gIDs7IHZhcmlldGllcywgb3IgYSBtaXggb2YgdGhlIHR3by4gIFRoZSBmb2xsb3dpbmcgbWFuYWdlcyB0byBkbyB0aGF0Ci0gIDs7IGluIHRoZSB1c3VhbCBjYXNlcy4KLSAgOzsKLSAgOzsgQWxzbywgaWYgd2UncmUgc2l0dGluZyBpbnNpZGUgYSB0cmlwbGUgcXVvdGVkIHN0cmluZywgdGhpcyB3aWxsCi0gIDs7IGRyb3AgdXMgYXQgdGhlIGxpbmUgdGhhdCBiZWdpbnMgdGhlIHN0cmluZy4KLSAgKGxldCAob3Blbi1icmFja2V0LXBvcykKLSAgICAod2hpbGUgKHB5LWNvbnRpbnVhdGlvbi1saW5lLXApCi0gICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCi0gICAgICAoaWYgKHB5LWJhY2tzbGFzaC1jb250aW51YXRpb24tbGluZS1wKQotCSAgKHdoaWxlIChweS1iYWNrc2xhc2gtY29udGludWF0aW9uLWxpbmUtcCkKLQkgICAgKGZvcndhcmQtbGluZSAtMSkpCi0JOzsgZWxzZSB6aXAgb3V0IG9mIG5lc3RlZCBicmFja2V0cy9icmFjZXMvcGFyZW5zCi0JKHdoaWxlIChzZXRxIG9wZW4tYnJhY2tldC1wb3MgKHB5LW5lc3RpbmctbGV2ZWwpKQotCSAgKGdvdG8tY2hhciBvcGVuLWJyYWNrZXQtcG9zKSkpKSkKLSAgKGJlZ2lubmluZy1vZi1saW5lKSkKLQotKGRlZnVuIHB5LWdvdG8tYmV5b25kLWZpbmFsLWxpbmUgKCkKLSAgIkdvIHRvIHRoZSBwb2ludCBqdXN0IGJleW9uZCB0aGUgZmluZSBsaW5lIG9mIHRoZSBjdXJyZW50IHN0YXRlbWVudC4KLVVzdWFsbHkgdGhpcyBpcyB0aGUgc3RhcnQgb2YgdGhlIG5leHQgbGluZSwgYnV0IGlmIHRoaXMgaXMgYQotbXVsdGktbGluZSBzdGF0ZW1lbnQgd2UgbmVlZCB0byBza2lwIG92ZXIgdGhlIGNvbnRpbnVhdGlvbiBsaW5lcy4iCi0gIDs7IFRyaWNreTogQWdhaW4gd2UgbmVlZCB0byBiZSBjbGV2ZXIgdG8gYXZvaWQgcXVhZHJhdGljIHRpbWUKLSAgOzsgYmVoYXZpb3IuCi0gIDs7Ci0gIDs7IFhYWDogTm90IHF1aXRlIHRoZSByaWdodCBzb2x1dGlvbiwgYnV0IGRlYWxzIHdpdGggbXVsdGktbGluZSBkb2MKLSAgOzsgc3RyaW5ncwotICAoaWYgKGxvb2tpbmctYXQgKGNvbmNhdCAiWyBcdF0qXFwoIiBweS1zdHJpbmdsaXQtcmUgIlxcKSIpKQotICAgICAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKSkKLSAgOzsKLSAgKGZvcndhcmQtbGluZSAxKQotICAobGV0IChzdGF0ZSkKLSAgICAod2hpbGUgKGFuZCAocHktY29udGludWF0aW9uLWxpbmUtcCkKLQkJKG5vdCAoZW9icCkpKQotICAgICAgOzsgc2tpcCBvdmVyIHRoZSBiYWNrc2xhc2ggZmxhdm9yCi0gICAgICAod2hpbGUgKGFuZCAocHktYmFja3NsYXNoLWNvbnRpbnVhdGlvbi1saW5lLXApCi0JCSAgKG5vdCAoZW9icCkpKQotCShmb3J3YXJkLWxpbmUgMSkpCi0gICAgICA7OyBpZiBpbiBuZXN0LCB6aXAgdG8gdGhlIGVuZCBvZiB0aGUgbmVzdAotICAgICAgKHNldHEgc3RhdGUgKHB5LXBhcnNlLXN0YXRlKSkKLSAgICAgIChpZiAoYW5kIChub3QgKHplcm9wIChjYXIgc3RhdGUpKSkKLQkgICAgICAgKG5vdCAoZW9icCkpKQotCSAgKHByb2duCi0JICAgIChwYXJzZS1wYXJ0aWFsLXNleHAgKHBvaW50KSAocG9pbnQtbWF4KSAwIG5pbCBzdGF0ZSkKLQkgICAgKGZvcndhcmQtbGluZSAxKSkpKSkpCi0KLShkZWZ1biBweS1zdGF0ZW1lbnQtb3BlbnMtYmxvY2stcCAoKQotICAiUmV0dXJuIHQgaWZmIHRoZSBjdXJyZW50IHN0YXRlbWVudCBvcGVucyBhIGJsb2NrLgotSS5lLiwgaWZmIGl0IGVuZHMgd2l0aCBhIGNvbG9uIHRoYXQgaXMgbm90IGluIGEgY29tbWVudC4gIFBvaW50IHNob3VsZAotYmUgYXQgdGhlIHN0YXJ0IG9mIGEgc3RhdGVtZW50LiIKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKGxldCAoKHN0YXJ0IChwb2ludCkpCi0JICAoZmluaXNoIChwcm9nbiAocHktZ290by1iZXlvbmQtZmluYWwtbGluZSkgKDEtIChwb2ludCkpKSkKLQkgIChzZWFyY2hpbmcgdCkKLQkgIChhbnN3ZXIgbmlsKQotCSAgc3RhdGUpCi0gICAgICAoZ290by1jaGFyIHN0YXJ0KQotICAgICAgKHdoaWxlIHNlYXJjaGluZwotCTs7IGxvb2sgZm9yIGEgY29sb24gd2l0aCBub3RoaW5nIGFmdGVyIGl0IGV4Y2VwdCB3aGl0ZXNwYWNlLCBhbmQKLQk7OyBtYXliZSBhIGNvbW1lbnQKLQkoaWYgKHJlLXNlYXJjaC1mb3J3YXJkICI6XFwoWyBcdF1cXHxcXFxcXG5cXCkqXFwoIy4qXFwpPyQiCi0JCQkgICAgICAgZmluaXNoIHQpCi0JICAgIChpZiAoZXEgKHBvaW50KSBmaW5pc2gpCTsgbm90ZTogbm8gYGVsc2UnIGNsYXVzZTsganVzdAotCQkJCQk7IGtlZXAgc2VhcmNoaW5nIGlmIHdlJ3JlIG5vdCBhdAotCQkJCQk7IHRoZSBlbmQgeWV0Ci0JCTs7IHN1cmUgbG9va3MgbGlrZSBpdCBvcGVucyBhIGJsb2NrIC0tIGJ1dCBpdCBtaWdodAotCQk7OyBiZSBpbiBhIGNvbW1lbnQKLQkJKHByb2duCi0JCSAgKHNldHEgc2VhcmNoaW5nIG5pbCkJOyBzZWFyY2ggaXMgZG9uZSBlaXRoZXIgd2F5Ci0JCSAgKHNldHEgc3RhdGUgKHBhcnNlLXBhcnRpYWwtc2V4cCBzdGFydAotCQkJCQkJICAobWF0Y2gtYmVnaW5uaW5nIDApKSkKLQkJICAoc2V0cSBhbnN3ZXIgKG5vdCAobnRoIDQgc3RhdGUpKSkpKQotCSAgOzsgc2VhcmNoIGZhaWxlZDogY291bGRuJ3QgZmluZCBhbm90aGVyIGludGVyZXN0aW5nIGNvbG9uCi0JICAoc2V0cSBzZWFyY2hpbmcgbmlsKSkpCi0gICAgICBhbnN3ZXIpKSkKLQotKGRlZnVuIHB5LXN0YXRlbWVudC1jbG9zZXMtYmxvY2stcCAoKQotICAiUmV0dXJuIHQgaWZmIHRoZSBjdXJyZW50IHN0YXRlbWVudCBjbG9zZXMgYSBibG9jay4KLUkuZS4sIGlmIHRoZSBsaW5lIHN0YXJ0cyB3aXRoIGByZXR1cm4nLCBgcmFpc2UnLCBgYnJlYWsnLCBgY29udGludWUnLAotYW5kIGBwYXNzJy4gIFRoaXMgZG9lc24ndCBjYXRjaCBlbWJlZGRlZCBzdGF0ZW1lbnRzLiIKLSAgKGxldCAoKGhlcmUgKHBvaW50KSkpCi0gICAgKHB5LWdvdG8taW5pdGlhbC1saW5lKQotICAgIChiYWNrLXRvLWluZGVudGF0aW9uKQotICAgIChwcm9nMQotCShsb29raW5nLWF0IChjb25jYXQgcHktYmxvY2stY2xvc2luZy1rZXl3b3Jkcy1yZSAiXFw+IikpCi0gICAgICAoZ290by1jaGFyIGhlcmUpKSkpCi0KLShkZWZ1biBweS1nb3RvLWJleW9uZC1ibG9jayAoKQotICAiR28gdG8gcG9pbnQganVzdCBiZXlvbmQgdGhlIGZpbmFsIGxpbmUgb2YgYmxvY2sgYmVndW4gYnkgdGhlIGN1cnJlbnQgbGluZS4KLVRoaXMgaXMgdGhlIHNhbWUgYXMgd2hlcmUgYHB5LWdvdG8tYmV5b25kLWZpbmFsLWxpbmUnIGdvZXMgdW5sZXNzCi13ZSdyZSBvbiBjb2xvbiBsaW5lLCBpbiB3aGljaCBjYXNlIHdlIGdvIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrLgotQXNzdW1lcyBwb2ludCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLiIKLSAgKGlmIChweS1zdGF0ZW1lbnQtb3BlbnMtYmxvY2stcCkKLSAgICAgIChweS1tYXJrLWJsb2NrIG5pbCAnanVzdC1tb3ZlKQotICAgIChweS1nb3RvLWJleW9uZC1maW5hbC1saW5lKSkpCi0KLShkZWZ1biBweS1nb3RvLXN0YXRlbWVudC1hdC1vci1hYm92ZSAoKQotICAiR28gdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBzdGF0ZW1lbnQgYXQgb3IgcHJlY2VkaW5nIHBvaW50LgotUmV0dXJuIHQgaWYgdGhlcmUgaXMgc3VjaCBhIHN0YXRlbWVudCwgb3RoZXJ3aXNlIG5pbC4gIGBTdGF0ZW1lbnQnCi1kb2VzIG5vdCBpbmNsdWRlIGJsYW5rIGxpbmVzLCBjb21tZW50cywgb3IgY29udGludWF0aW9uIGxpbmVzLiIKLSAgKHB5LWdvdG8taW5pdGlhbC1saW5lKQotICAoaWYgKGxvb2tpbmctYXQgcHktYmxhbmstb3ItY29tbWVudC1yZSkKLSAgICAgIDs7IHNraXAgYmFjayBvdmVyIGJsYW5rICYgY29tbWVudCBsaW5lcwotICAgICAgOzsgbm90ZTogIHdpbGwgc2tpcCBhIGJsYW5rIG9yIGNvbW1lbnQgbGluZSB0aGF0IGhhcHBlbnMgdG8gYmUKLSAgICAgIDs7IGEgY29udGludWF0aW9uIGxpbmUgdG9vCi0gICAgICAoaWYgKHJlLXNlYXJjaC1iYWNrd2FyZCAiXlsgXHRdKlteIFx0I1xuXSIgbmlsIHQpCi0JICAocHJvZ24gKHB5LWdvdG8taW5pdGlhbC1saW5lKSB0KQotCW5pbCkKLSAgICB0KSkKLQotKGRlZnVuIHB5LWdvdG8tc3RhdGVtZW50LWJlbG93ICgpCi0gICJHbyB0byBzdGFydCBvZiB0aGUgZmlyc3Qgc3RhdGVtZW50IGZvbGxvd2luZyB0aGUgc3RhdGVtZW50IGNvbnRhaW5pbmcgcG9pbnQuCi1SZXR1cm4gdCBpZiB0aGVyZSBpcyBzdWNoIGEgc3RhdGVtZW50LCBvdGhlcndpc2UgbmlsLiAgYFN0YXRlbWVudCcKLWRvZXMgbm90IGluY2x1ZGUgYmxhbmsgbGluZXMsIGNvbW1lbnRzLCBvciBjb250aW51YXRpb24gbGluZXMuIgotICAoYmVnaW5uaW5nLW9mLWxpbmUpCi0gIChsZXQgKChzdGFydCAocG9pbnQpKSkKLSAgICAocHktZ290by1iZXlvbmQtZmluYWwtbGluZSkKLSAgICAod2hpbGUgKGFuZAotCSAgICAob3IgKGxvb2tpbmctYXQgcHktYmxhbmstb3ItY29tbWVudC1yZSkKLQkJKHB5LWluLWxpdGVyYWwpKQotCSAgICAobm90IChlb2JwKSkpCi0gICAgICAoZm9yd2FyZC1saW5lIDEpKQotICAgIChpZiAoZW9icCkKLQkocHJvZ24gKGdvdG8tY2hhciBzdGFydCkgbmlsKQotICAgICAgdCkpKQotCi0oZGVmdW4gcHktZ28tdXAtdHJlZS10by1rZXl3b3JkIChrZXkpCi0gICJHbyB0byBiZWdpbmluZyBvZiBzdGF0ZW1lbnQgc3RhcnRpbmcgd2l0aCBLRVksIGF0IG9yIHByZWNlZGluZyBwb2ludC4KLQotS0VZIGlzIGEgcmVndWxhciBleHByZXNzaW9uIGRlc2NyaWJpbmcgYSBQeXRob24ga2V5d29yZC4gIFNraXAgYmxhbmsKLWxpbmVzIGFuZCBub24taW5kZW50aW5nIGNvbW1lbnRzLiAgSWYgdGhlIHN0YXRlbWVudCBmb3VuZCBzdGFydHMgd2l0aAotS0VZLCB0aGVuIHN0b3AsIG90aGVyd2lzZSBnbyBiYWNrIHRvIGZpcnN0IGVuY2xvc2luZyBibG9jayBzdGFydGluZwotd2l0aCBLRVkuICBJZiBzdWNjZXNzZnVsLCBsZWF2ZSBwb2ludCBhdCB0aGUgc3RhcnQgb2YgdGhlIEtFWSBsaW5lIGFuZAotcmV0dXJuIHQuICBPdGhlcndpc2UsIGxlYXZlIHBvaW50IGF0IGFuIHVuZGVmaW5lZCBwbGFjZSBhbmQgcmV0dXJuIG5pbC4iCi0gIDs7IHNraXAgYmxhbmtzIGFuZCBub24taW5kZW50aW5nICMKLSAgKHB5LWdvdG8taW5pdGlhbC1saW5lKQotICAod2hpbGUgKGFuZAotCSAgKGxvb2tpbmctYXQgIlsgXHRdKlxcKCRcXHwjW14gXHRcbl1cXCkiKQotCSAgKHplcm9wIChmb3J3YXJkLWxpbmUgLTEpKSkJOyBnbyBiYWNrCi0gICAgbmlsKQotICAocHktZ290by1pbml0aWFsLWxpbmUpCi0gIChsZXQqICgocmUgKGNvbmNhdCAiWyBcdF0qIiBrZXkgIlxcPiIpKQotCSAoY2FzZS1mb2xkLXNlYXJjaCBuaWwpCQk7IGxldCogc28gbG9va2luZy1hdCBzZWVzIHRoaXMKLQkgKGZvdW5kIChsb29raW5nLWF0IHJlKSkKLQkgKGRlYWQgbmlsKSkKLSAgICAod2hpbGUgKG5vdCAob3IgZm91bmQgZGVhZCkpCi0gICAgICAoY29uZGl0aW9uLWNhc2UgbmlsCQk7IGluIGNhc2Ugbm8gZW5jbG9zaW5nIGJsb2NrCi0JICAocHktZ290by1ibG9jay11cCAnbm8tbWFyaykKLQkoZXJyb3IgKHNldHEgZGVhZCB0KSkpCi0gICAgICAob3IgZGVhZCAoc2V0cSBmb3VuZCAobG9va2luZy1hdCByZSkpKSkKLSAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCi0gICAgZm91bmQpKQotCi0oZGVmdW4gcHktc3Vjay11cC1sZWFkaW5nLXRleHQgKCkKLSAgIlJldHVybiBzdHJpbmcgaW4gYnVmZmVyIGZyb20gc3RhcnQgb2YgaW5kZW50YXRpb24gdG8gZW5kIG9mIGxpbmUuCi1QcmVmaXggd2l0aCBcIi4uLlwiIGlmIGxlYWRpbmcgd2hpdGVzcGFjZSB3YXMgc2tpcHBlZC4iCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChiYWNrLXRvLWluZGVudGF0aW9uKQotICAgIChjb25jYXQKLSAgICAgKGlmIChib2xwKSAiIiAiLi4uIikKLSAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50KSAocHJvZ24gKGVuZC1vZi1saW5lKSAocG9pbnQpKSkpKSkKLQotKGRlZnVuIHB5LXN1Y2stdXAtZmlyc3Qta2V5d29yZCAoKQotICAiUmV0dXJuIGZpcnN0IGtleXdvcmQgb24gdGhlIGxpbmUgYXMgYSBMaXNwIHN5bWJvbC4KLWBLZXl3b3JkJyBpcyBkZWZpbmVkIChlc3NlbnRpYWxseSkgYXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgotKFthLXpdKykuICBSZXR1cm5zIG5pbCBpZiBub25lIHdhcyBmb3VuZC4iCi0gIChsZXQgKChjYXNlLWZvbGQtc2VhcmNoIG5pbCkpCi0gICAgKGlmIChsb29raW5nLWF0ICJbIFx0XSpcXChbYS16XStcXClcXD4iKQotCShpbnRlcm4gKGJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKSkKLSAgICAgIG5pbCkpKQotCi0oZGVmdW4gcHktY3VycmVudC1kZWZ1biAoKQotICAiUHl0aG9uIHZhbHVlIGZvciBgYWRkLWxvZy1jdXJyZW50LWRlZnVuLWZ1bmN0aW9uJy4KLVRoaXMgdGVsbHMgYWRkLWxvZy5lbCBob3cgdG8gZmluZCB0aGUgY3VycmVudCBmdW5jdGlvbi9tZXRob2QvdmFyaWFibGUuIgotICAoc2F2ZS1leGN1cnNpb24KLQotICAgIDs7IE1vdmUgYmFjayB0byBzdGFydCBvZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQuCi0KLSAgICAocHktZ290by1pbml0aWFsLWxpbmUpCi0gICAgKGJhY2stdG8taW5kZW50YXRpb24pCi0gICAgKHdoaWxlIChhbmQgKG9yIChsb29raW5nLWF0IHB5LWJsYW5rLW9yLWNvbW1lbnQtcmUpCi0JCSAgICAocHktaW4tbGl0ZXJhbCkpCi0JCShub3QgKGJvYnApKSkKLSAgICAgIChiYWNrd2FyZC10by1pbmRlbnRhdGlvbiAxKSkKLSAgICAocHktZ290by1pbml0aWFsLWxpbmUpCi0KLSAgICAobGV0ICgoc2NvcGVzICIiKQotCSAgKHNlcCAiIikKLQkgIGRlYWQgYXNzaWdubWVudCkKLQotICAgICAgOzsgQ2hlY2sgZm9yIGFuIGFzc2lnbm1lbnQuICBJZiB0aGlzIGFzc2lnbm1lbnQgZXhpc3RzIGluc2lkZSBhCi0gICAgICA7OyBkZWYsIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW5zaWRlIHRoZSB3aGlsZSBsb29wLiAgSWYgaXQKLSAgICAgIDs7IGV4aXN0cyBhdCB0b3AgbGV2ZXIgb3IgaW5zaWRlIGEgY2xhc3MsIGl0IHdpbGwgYmUgcHJlc2VydmVkLgotCi0gICAgICAod2hlbiAobG9va2luZy1hdCAiWyBcdF0qXFwoW2EtekEtWjAtOV9dK1xcKVsgXHRdKj0iKQotCShzZXRxIHNjb3BlcyAoYnVmZmVyLXN1YnN0cmluZyAobWF0Y2gtYmVnaW5uaW5nIDEpIChtYXRjaC1lbmQgMSkpKQotCShzZXRxIGFzc2lnbm1lbnQgdCkKLQkoc2V0cSBzZXAgIi4iKSkKLQotICAgICAgOzsgUHJlcGVuZCB0aGUgbmFtZSBvZiBlYWNoIG91dGVyIHNvY3BlIChkZWYgb3IgY2xhc3MpLgotCi0gICAgICAod2hpbGUgKG5vdCBkZWFkKQotCShpZiAoYW5kIChweS1nby11cC10cmVlLXRvLWtleXdvcmQgIlxcKGNsYXNzXFx8ZGVmXFwpIikKLQkJIChsb29raW5nLWF0Ci0JCSAgIlsgXHRdKlxcKGNsYXNzXFx8ZGVmXFwpWyBcdF0qXFwoW2EtekEtWjAtOV9dK1xcKVsgXHRdKiIpKQotCSAgICAobGV0ICgobmFtZSAoYnVmZmVyLXN1YnN0cmluZyAobWF0Y2gtYmVnaW5uaW5nIDIpIChtYXRjaC1lbmQgMikpKSkKLQkgICAgICAoaWYgKGFuZCBhc3NpZ25tZW50IChsb29raW5nLWF0ICJbIFx0XSpkZWYiKSkKLQkJICAoc2V0cSBzY29wZXMgbmFtZSkKLQkJKHNldHEgc2NvcGVzIChjb25jYXQgbmFtZSBzZXAgc2NvcGVzKSkKLQkJKHNldHEgc2VwICIuIikpKSkKLQkoc2V0cSBhc3NpZ25tZW50IG5pbCkKLQkoY29uZGl0aW9uLWNhc2UgbmlsCQk7IFRlcm1pbmF0ZSBuaWNlbHkgYXQgdG9wIGxldmVsLgotCSAgICAocHktZ290by1ibG9jay11cCAnbm8tbWFyaykKLQkgIChlcnJvciAoc2V0cSBkZWFkIHQpKSkpCi0gICAgICAoaWYgKHN0cmluZz0gc2NvcGVzICIiKQotCSAgbmlsCi0Jc2NvcGVzKSkpKQotCi0KLQwKLShkZWZjb25zdCBweS1oZWxwLWFkZHJlc3MgInB5dGhvbi1tb2RlQHB5dGhvbi5vcmciCi0gICJBZGRyZXNzIGFjY2VwdGluZyBzdWJtaXNzaW9uIG9mIGJ1ZyByZXBvcnRzLiIpCi0KLShkZWZ1biBweS12ZXJzaW9uICgpCi0gICJFY2hvIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgYHB5dGhvbi1tb2RlJyBpbiB0aGUgbWluaWJ1ZmZlci4iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKG1lc3NhZ2UgIlVzaW5nIGBweXRob24tbW9kZScgdmVyc2lvbiAlcyIgcHktdmVyc2lvbikKLSAgKHB5LWtlZXAtcmVnaW9uLWFjdGl2ZSkpCi0KLTs7IG9ubHkgd29ya3MgdW5kZXIgRW1hY3MgMTkKLTsoZXZhbC13aGVuLWNvbXBpbGUKLTsgIChyZXF1aXJlICdyZXBvcnRlcikpCi0KLShkZWZ1biBweS1zdWJtaXQtYnVnLXJlcG9ydCAoZW5oYW5jZW1lbnQtcCkKLSAgIlN1Ym1pdCB2aWEgbWFpbCBhIGJ1ZyByZXBvcnQgb24gYHB5dGhvbi1tb2RlJy4KLVdpdGggXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSAocHJvZ3JhbW1hdGljYWxseSwgYXJndW1lbnQgRU5IQU5DRU1FTlQtUAotbm9uLW5pbCkganVzdCBzdWJtaXQgYW4gZW5oYW5jZW1lbnQgcmVxdWVzdC4iCi0gIChpbnRlcmFjdGl2ZQotICAgKGxpc3QgKG5vdCAoeS1vci1uLXAKLQkgICAgICAgIklzIHRoaXMgYSBidWcgcmVwb3J0IChoaXQgYG4nIHRvIHNlbmQgb3RoZXIgY29tbWVudHMpPyAiKSkpKQotICAobGV0ICgocmVwb3J0ZXItcHJvbXB0LWZvci1zdW1tYXJ5LXAgKGlmIGVuaGFuY2VtZW50LXAKLQkJCQkJICAgIihWZXJ5KSBicmllZiBzdW1tYXJ5OiAiCi0JCQkJCSB0KSkpCi0gICAgKHJlcXVpcmUgJ3JlcG9ydGVyKQotICAgIChyZXBvcnRlci1zdWJtaXQtYnVnLXJlcG9ydAotICAgICBweS1oZWxwLWFkZHJlc3MJCQk7YWRkcmVzcwotICAgICAoY29uY2F0ICJweXRob24tbW9kZSAiIHB5LXZlcnNpb24pCTtwa2duYW1lCi0gICAgIDs7IHZhcmxpc3QKLSAgICAgKGlmIGVuaGFuY2VtZW50LXAgbmlsCi0gICAgICAgJyhweS1weXRob24tY29tbWFuZAotCSBweS1pbmRlbnQtb2Zmc2V0Ci0JIHB5LWJsb2NrLWNvbW1lbnQtcHJlZml4Ci0JIHB5LXRlbXAtZGlyZWN0b3J5Ci0JIHB5LWJlZXAtaWYtdGFiLWNoYW5nZSkpCi0gICAgIG5pbAkJCQk7cHJlLWhvb2tzCi0gICAgIG5pbAkJCQk7cG9zdC1ob29rcwotICAgICAiRGVhciBCYXJyeSwiKQkJCTtzYWx1dGF0aW9uCi0gICAgKGlmIGVuaGFuY2VtZW50LXAgbmlsCi0gICAgICAoc2V0LW1hcmsgKHBvaW50KSkKLSAgICAgIChpbnNlcnQKLSJQbGVhc2UgcmVwbGFjZSB0aGlzIHRleHQgd2l0aCBhIHN1ZmZpY2llbnRseSBsYXJnZSBjb2RlIHNhbXBsZVxuXAotYW5kIGFuIGV4YWN0IHJlY2lwZSBzbyB0aGF0IEkgY2FuIHJlcHJvZHVjZSB5b3VyIHByb2JsZW0uICBGYWlsdXJlXG5cCi10byBkbyBzbyBtYXkgbWVhbiBhIGdyZWF0ZXIgZGVsYXkgaW4gZml4aW5nIHlvdXIgYnVnLlxuXG4iKQotICAgICAgKGV4Y2hhbmdlLXBvaW50LWFuZC1tYXJrKQotICAgICAgKHB5LWtlZXAtcmVnaW9uLWFjdGl2ZSkpKSkKLQotDAotKGRlZnVuIHB5LWtpbGwtZW1hY3MtaG9vayAoKQotICAiRGVsZXRlIGZpbGVzIGluIGBweS1maWxlLXF1ZXVlJy4KLVRoZXNlIGFyZSBQeXRob24gdGVtcG9yYXJ5IGZpbGVzIGF3YWl0aW5nIGV4ZWN1dGlvbi4iCi0gIChtYXBjYXIgIycobGFtYmRhIChmaWxlbmFtZSkKLQkgICAgICAocHktc2FmZSAoZGVsZXRlLWZpbGUgZmlsZW5hbWUpKSkKLQkgIHB5LWZpbGUtcXVldWUpKQotCi07OyBhcnJhbmdlIHRvIGtpbGwgdGVtcCBmaWxlcyB3aGVuIEVtYWNzIGV4aXN0cwotKGFkZC1ob29rICdraWxsLWVtYWNzLWhvb2sgJ3B5LWtpbGwtZW1hY3MtaG9vaykKLShhZGQtaG9vayAnY29taW50LW91dHB1dC1maWx0ZXItZnVuY3Rpb25zICdweS1wZGJ0cmFjay10cmFjay1zdGFjay1maWxlKQotCi07OyBBZGQgYSBkZXNpZ25hdG9yIHRvIHRoZSBtaW5vciBtb2RlIHN0cmluZ3MKLShvciAoYXNzcSAncHktcGRidHJhY2staXMtdHJhY2tpbmctcCBtaW5vci1tb2RlLWFsaXN0KQotICAgIChwdXNoICcocHktcGRidHJhY2staXMtdHJhY2tpbmctcCBweS1wZGJ0cmFjay1taW5vci1tb2RlLXN0cmluZykKLQkgIG1pbm9yLW1vZGUtYWxpc3QpKQotCi0KLQwKLTs7OyBwYXJhZ3JhcGggYW5kIHN0cmluZyBmaWxsaW5nIGNvZGUgZnJvbSBCZXJuaGFyZCBIZXJ6b2cKLTs7OyBzZWUgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWxpc3QvMjAwMi1NYXkvMTAzMTg5Lmh0bWwKLQotKGRlZnVuIHB5LWZpbGwtY29tbWVudCAoJm9wdGlvbmFsIGp1c3RpZnkpCi0gICJGaWxsIHRoZSBjb21tZW50IHBhcmFncmFwaCBhcm91bmQgcG9pbnQiCi0gIChsZXQgKDs7IE5vbi1uaWwgaWYgdGhlIGN1cnJlbnQgbGluZSBjb250YWlucyBhIGNvbW1lbnQuCi0JaGFzLWNvbW1lbnQKLQotCTs7IElmIGhhcy1jb21tZW50LCB0aGUgYXBwcm9wcmlhdGUgZmlsbC1wcmVmaXggZm9yIHRoZSBjb21tZW50LgotCWNvbW1lbnQtZmlsbC1wcmVmaXgpCi0KLSAgICA7OyBGaWd1cmUgb3V0IHdoYXQga2luZCBvZiBjb21tZW50IHdlIGFyZSBsb29raW5nIGF0LgotICAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgICAgKGNvbmQKLSAgICAgICA7OyBBIGxpbmUgd2l0aCBub3RoaW5nIGJ1dCBhIGNvbW1lbnQgb24gaXQ/Ci0gICAgICAgKChsb29raW5nLWF0ICJbIFx0XSojWyMgXHRdKiIpCi0JKHNldHEgaGFzLWNvbW1lbnQgdAotCSAgICAgIGNvbW1lbnQtZmlsbC1wcmVmaXggKGJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyAwKQotCQkJCQkJICAgIChtYXRjaC1lbmQgMCkpKSkKLQotICAgICAgIDs7IEEgbGluZSB3aXRoIHNvbWUgY29kZSwgZm9sbG93ZWQgYnkgYSBjb21tZW50PyBSZW1lbWJlciB0aGF0IHRoZSBoYXNoCi0gICAgICAgOzsgd2hpY2ggc3RhcnRzIHRoZSBjb21tZW50IHNob3VsZG4ndCBiZSBwYXJ0IG9mIGEgc3RyaW5nIG9yIGNoYXJhY3Rlci4KLSAgICAgICAoKHByb2duCi0JICAod2hpbGUgKG5vdCAobG9va2luZy1hdCAiI1xcfCQiKSkKLQkgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiXiNcblwiJ1xcIikKLQkgICAgKGNvbmQKLQkgICAgICgoZXEgKGNoYXItYWZ0ZXIgKHBvaW50KSkgP1xcKSAoZm9yd2FyZC1jaGFyIDIpKQotCSAgICAgKChtZW1xIChjaGFyLWFmdGVyIChwb2ludCkpICcoP1wiID8nKSkgKGZvcndhcmQtc2V4cCAxKSkpKQotCSAgKGxvb2tpbmctYXQgIiMrW1x0IF0qIikpCi0JKHNldHEgaGFzLWNvbW1lbnQgdCkKLQkoc2V0cSBjb21tZW50LWZpbGwtcHJlZml4Ci0JICAgICAgKGNvbmNhdCAobWFrZS1zdHJpbmcgKGN1cnJlbnQtY29sdW1uKSA/ICkKLQkJICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApKSkpKSkpCi0KLSAgICAoaWYgKG5vdCBoYXMtY29tbWVudCkKLQkoZmlsbC1wYXJhZ3JhcGgganVzdGlmeSkKLQotICAgICAgOzsgTmFycm93IHRvIGluY2x1ZGUgb25seSB0aGUgY29tbWVudCwgYW5kIHRoZW4gZmlsbCB0aGUgcmVnaW9uLgotICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KLQkobmFycm93LXRvLXJlZ2lvbgotCi0JIDs7IEZpbmQgdGhlIGZpcnN0IGxpbmUgd2Ugc2hvdWxkIGluY2x1ZGUgaW4gdGhlIHJlZ2lvbiB0byBmaWxsLgotCSAoc2F2ZS1leGN1cnNpb24KLQkgICAod2hpbGUgKGFuZCAoemVyb3AgKGZvcndhcmQtbGluZSAtMSkpCi0JCSAgICAgICAobG9va2luZy1hdCAiXlsgXHRdKiMiKSkpCi0KLQkgICA7OyBXZSBtYXkgaGF2ZSBnb25lIHRvIGZhci4gIEdvIGZvcndhcmQgYWdhaW4uCi0JICAgKG9yIChsb29raW5nLWF0ICJeWyBcdF0qIyIpCi0JICAgICAgIChmb3J3YXJkLWxpbmUgMSkpCi0JICAgKHBvaW50KSkKLQotCSA7OyBGaW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IGxpbmUgcGFzdCB0aGUgcmVnaW9uIHRvIGZpbGwuCi0JIChzYXZlLWV4Y3Vyc2lvbgotCSAgICh3aGlsZSAocHJvZ24gKGZvcndhcmQtbGluZSAxKQotCQkJIChsb29raW5nLWF0ICJeWyBcdF0qIyIpKSkKLQkgICAocG9pbnQpKSkKLQotCTs7IExpbmVzIHdpdGggb25seSBoYXNoZXMgb24gdGhlbSBjYW4gYmUgcGFyYWdyYXBoIGJvdW5kYXJpZXMuCi0JKGxldCAoKHBhcmFncmFwaC1zdGFydCAoY29uY2F0IHBhcmFncmFwaC1zdGFydCAiXFx8WyBcdCNdKiQiKSkKLQkgICAgICAocGFyYWdyYXBoLXNlcGFyYXRlIChjb25jYXQgcGFyYWdyYXBoLXNlcGFyYXRlICJcXHxbIFx0I10qJCIpKQotCSAgICAgIChmaWxsLXByZWZpeCBjb21tZW50LWZpbGwtcHJlZml4KSkKLQkgIDs7KG1lc3NhZ2UgInBhcmFncmFwaC1zdGFydCAlUyBwYXJhZ3JhcGgtc2VwYXJhdGUgJVMiCi0JICA7O3BhcmFncmFwaC1zdGFydCBwYXJhZ3JhcGgtc2VwYXJhdGUpCi0JICAoZmlsbC1wYXJhZ3JhcGgganVzdGlmeSkpKSkKLSAgICB0KSkKLQotCi0oZGVmdW4gcHktZmlsbC1zdHJpbmcgKHN0YXJ0ICZvcHRpb25hbCBqdXN0aWZ5KQotICAiRmlsbCB0aGUgcGFyYWdyYXBoIGFyb3VuZCAocG9pbnQpIGluIHRoZSBzdHJpbmcgc3RhcnRpbmcgYXQgc3RhcnQiCi0gIDs7IGJhc2ljIHN0cmF0ZWd5OiBuYXJyb3cgdG8gdGhlIHN0cmluZyBhbmQgY2FsbCB0aGUgZGVmYXVsdAotICA7OyBpbXBsZW1lbnRhdGlvbgotICAobGV0ICg7OyB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZydzIGNvbnRlbnRzCi0Jc3RyaW5nLXN0YXJ0Ci0JOzsgdGhlIGVuZCBvZiB0aGUgc3RyaW5nJ3MgY29udGVudHMKLQlzdHJpbmctZW5kCi0JOzsgbGVuZ3RoIG9mIHRoZSBzdHJpbmcncyBkZWxpbWl0ZXIKLQlkZWxpbS1sZW5ndGgKLQk7OyBUaGUgc3RyaW5nIGRlbGltaXRlcgotCWRlbGltCi0JKQotCi0gICAgKHNhdmUtZXhjdXJzaW9uCi0gICAgICAoZ290by1jaGFyIHN0YXJ0KQotICAgICAgKGlmIChsb29raW5nLWF0ICJcXCgnJydcXHxcIlwiXCJcXHwnXFx8XCJcXClcXFxcP1xuPyIpCi0JICAoc2V0cSBzdHJpbmctc3RhcnQgKG1hdGNoLWVuZCAwKQotCQlkZWxpbS1sZW5ndGggKC0gKG1hdGNoLWVuZCAxKSAobWF0Y2gtYmVnaW5uaW5nIDEpKQotCQlkZWxpbSAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIChtYXRjaC1iZWdpbm5pbmcgMSkKLQkJCQkJCSAgICAgIChtYXRjaC1lbmQgMSkpKQotCShlcnJvciAiVGhlIHBhcmFtZXRlciBzdGFydCBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiBhIHB5dGhvbiBzdHJpbmciKSkKLQotICAgICAgOzsgaWYgdGhlIHN0cmluZyBpcyB0aGUgZmlyc3QgdG9rZW4gb24gYSBsaW5lIGFuZCBkb2Vzbid0IHN0YXJ0IHdpdGgKLSAgICAgIDs7IGEgbmV3bGluZSwgZmlsbCBhcyBpZiB0aGUgc3RyaW5nIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQotICAgICAgOzsgbGluZS4gdGhpcyBoZWxwcyB3aXRoIG9uZSBsaW5lIGRvY3N0cmluZ3MKLSAgICAgIChzYXZlLWV4Y3Vyc2lvbgotCShiZWdpbm5pbmctb2YtbGluZSkKLQkoYW5kICgvPSAoY2hhci1iZWZvcmUgc3RyaW5nLXN0YXJ0KSA/XG4pCi0JICAgICAobG9va2luZy1hdCAoY29uY2F0ICJbIFx0XSoiIGRlbGltKSkKLQkgICAgIChzZXRxIHN0cmluZy1zdGFydCAocG9pbnQpKSkpCi0KLSAgICAgIChmb3J3YXJkLXNleHAgKGlmICg9IGRlbGltLWxlbmd0aCAzKSAyIDEpKQotCi0gICAgICA7OyB3aXRoIGJvdGggdHJpcGxlIHF1b3RlZCBzdHJpbmdzIGFuZCBzaW5nbGUvZG91YmxlIHF1b3RlZCBzdHJpbmdzCi0gICAgICA7OyB3ZSdyZSBub3cgZGlyZWN0bHkgYmVoaW5kIHRoZSBmaXJzdCBjaGFyIG9mIHRoZSBlbmQgZGVsaW1pdGVyCi0gICAgICA7OyAodGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdoZW4gdGhlIHRyaXBsZSBxdW90ZWQgc3RyaW5nCi0gICAgICA7OyBjb250YWlucyB0aGUgcXVvdGUgbWFyayBpdHNlbGYpLiBUaGUgZW5kIG9mIHRoZSBzdHJpbmcncyBjb250ZW50cwotICAgICAgOzsgaXMgb25lIGxlc3MgdGhhbiBwb2ludAotICAgICAgKHNldHEgc3RyaW5nLWVuZCAoMS0gKHBvaW50KSkpKQotCi0gICAgOzsgTmFycm93IHRvIHRoZSBzdHJpbmcncyBjb250ZW50cyBhbmQgZmlsbCB0aGUgY3VycmVudCBwYXJhZ3JhcGgKLSAgICAoc2F2ZS1yZXN0cmljdGlvbgotICAgICAgKG5hcnJvdy10by1yZWdpb24gc3RyaW5nLXN0YXJ0IHN0cmluZy1lbmQpCi0gICAgICAobGV0ICgoZW5kcy13aXRoLW5ld2xpbmUgKD0gKGNoYXItYmVmb3JlIChwb2ludC1tYXgpKSA/XG4pKSkKLQkoZmlsbC1wYXJhZ3JhcGgganVzdGlmeSkKLQkoaWYgKGFuZCAobm90IGVuZHMtd2l0aC1uZXdsaW5lKQotCQkgKD0gKGNoYXItYmVmb3JlIChwb2ludC1tYXgpKSA/XG4pKQotCSAgICA7OyB0aGUgZGVmYXVsdCBmaWxsLXBhcmFncmFwaCBpbXBsZW1lbnRhdGlvbiBoYXMgaW5zZXJ0ZWQgYQotCSAgICA7OyBuZXdsaW5lIGF0IHRoZSBlbmQuIFJlbW92ZSBpdCBhZ2Fpbi4KLQkgICAgKHNhdmUtZXhjdXJzaW9uCi0JICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkKLQkgICAgICAoZGVsZXRlLWNoYXIgLTEpKSkpKQotCi0gICAgOzsgcmV0dXJuIHQgdG8gaW5kaWNhdGUgdGhhdCB3ZSd2ZSBkb25lIG91ciB3b3JrCi0gICAgdCkpCi0KLShkZWZ1biBweS1maWxsLXBhcmFncmFwaCAoJm9wdGlvbmFsIGp1c3RpZnkpCi0gICJMaWtlIFxcW2ZpbGwtcGFyYWdyYXBoXSwgYnV0IGhhbmRsZSBQeXRob24gY29tbWVudHMgYW5kIHN0cmluZ3MuCi1JZiBhbnkgb2YgdGhlIGN1cnJlbnQgbGluZSBpcyBhIGNvbW1lbnQsIGZpbGwgdGhlIGNvbW1lbnQgb3IgdGhlCi1wYXJhZ3JhcGggb2YgaXQgdGhhdCBwb2ludCBpcyBpbiwgcHJlc2VydmluZyB0aGUgY29tbWVudCdzIGluZGVudGF0aW9uCi1hbmQgaW5pdGlhbCBgIydzLgotSWYgcG9pbnQgaXMgaW5zaWRlIGEgc3RyaW5nLCBuYXJyb3cgdG8gdGhhdCBzdHJpbmcgYW5kIGZpbGwuCi0iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCi0gIDs7IGZpbGwtcGFyYWdyYXBoIHdpbGwgbmFycm93IGluY29ycmVjdGx5Ci0gIChzYXZlLXJlc3RyaWN0aW9uCi0gICAgKHdpZGVuKQotICAgIChsZXQqICgoYm9kIChweS1wb2ludCAnYm9kKSkKLQkgICAocHBzIChwYXJzZS1wYXJ0aWFsLXNleHAgYm9kIChwb2ludCkpKSkKLSAgICAgIChjb25kCi0gICAgICAgOzsgYXJlIHdlIGluc2lkZSBhIGNvbW1lbnQgb3Igb24gYSBsaW5lIHdpdGggb25seSB3aGl0ZXNwYWNlIGJlZm9yZQotICAgICAgIDs7IHRoZSBjb21tZW50IHN0YXJ0PwotICAgICAgICgob3IgKG50aCA0IHBwcykKLQkgICAgKHNhdmUtZXhjdXJzaW9uIChiZWdpbm5pbmctb2YtbGluZSkgKGxvb2tpbmctYXQgIlsgXHRdKiMiKSkpCi0JKHB5LWZpbGwtY29tbWVudCBqdXN0aWZ5KSkKLSAgICAgICA7OyBhcmUgd2UgaW5zaWRlIGEgc3RyaW5nPwotICAgICAgICgobnRoIDMgcHBzKQotCShweS1maWxsLXN0cmluZyAobnRoIDggcHBzKSkpCi0gICAgICAgOzsgYXJlIHdlIGF0IHRoZSBvcGVuaW5nIHF1b3RlIG9mIGEgc3RyaW5nLCBvciBpbiB0aGUgaW5kZW50YXRpb24/Ci0gICAgICAgKChzYXZlLWV4Y3Vyc2lvbgotCSAgKGZvcndhcmQtd29yZCAxKQotCSAgKGVxIChweS1pbi1saXRlcmFsKSAnc3RyaW5nKSkKLQkoc2F2ZS1leGN1cnNpb24KLQkgIChweS1maWxsLXN0cmluZyAocHktcG9pbnQgJ2JvaSkpKSkKLSAgICAgICA7OyBhcmUgd2UgYXQgb3IgYWZ0ZXIgdGhlIGNsb3NpbmcgcXVvdGUgb2YgYSBzdHJpbmc/Ci0gICAgICAgKChzYXZlLWV4Y3Vyc2lvbgotCSAgKGJhY2t3YXJkLXdvcmQgMSkKLQkgIChlcSAocHktaW4tbGl0ZXJhbCkgJ3N0cmluZykpCi0JKHNhdmUtZXhjdXJzaW9uCi0JICAocHktZmlsbC1zdHJpbmcgKHB5LXBvaW50ICdib2kpKSkpCi0gICAgICAgOzsgb3RoZXJ3aXNlIHVzZSB0aGUgZGVmYXVsdAotICAgICAgICh0Ci0JKGZpbGwtcGFyYWdyYXBoIGp1c3RpZnkpKSkpKSkKLQotCi0MCi0ocHJvdmlkZSAncHl0aG9uLW1vZGUpCi07OzsgcHl0aG9uLW1vZGUuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi13aW5nMy53cHIgYi9NaXNjL3B5dGhvbi13aW5nMy53cHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkOTA1ZAotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvcHl0aG9uLXdpbmczLndwcgpAQCAtMCwwICsxLDEzIEBACisjIXdpbmcKKyMhdmVyc2lvbj0zLjAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBXaW5nIElERSBwcm9qZWN0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1twcm9qZWN0IGF0dHJpYnV0ZXNdCitwcm9qLmRpcmVjdG9yeS1saXN0ID0gW3snZGlybG9jJzogbG9jKCcuLicpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGVzJzogKCksCisgICAgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJzogJyonLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAncmVjdXJzaXZlJzogVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd3YXRjaF9mb3JfY2hhbmdlcyc6IFRydWV9XQorcHJvai5maWxlLXR5cGUgPSAnc2hhcmVkJwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24td2luZzQud3ByIGIvTWlzYy9weXRob24td2luZzQud3ByCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZjE1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL3B5dGhvbi13aW5nNC53cHIKQEAgLTAsMCArMSwxNSBAQAorIyF3aW5nCisjIXZlcnNpb249NC4wCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV2luZyBJREUgcHJvamVjdCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitbcHJvamVjdCBhdHRyaWJ1dGVzXQorcHJvai5kaXJlY3RvcnktbGlzdCA9IFt7J2RpcmxvYyc6IGxvYygnLi4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdleGNsdWRlcyc6IFt1J0xpYi9fX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdEb2MvYnVpbGQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXInOiAnKicsCisgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdyZWN1cnNpdmUnOiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3dhdGNoX2Zvcl9jaGFuZ2VzJzogVHJ1ZX1dCitwcm9qLmZpbGUtdHlwZSA9ICdzaGFyZWQnCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi5tYW4gYi9NaXNjL3B5dGhvbi5tYW4KaW5kZXggZDk4MWZiYS4uZGRmY2NlZiAxMDA2NDQKLS0tIGEvTWlzYy9weXRob24ubWFuCisrKyBiL01pc2MvcHl0aG9uLm1hbgpAQCAtNDAxLDkgKzQwMSwxOCBAQAogLklQIFBZVEhPTklOU1BFQ1QKIElmIHRoaXMgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZyBpdCBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcKIHRoZSBcZkJcLWlcZlAgb3B0aW9uLgorLklQIFBZVEhPTklPRU5DT0RJTkcKK0lmIHRoaXMgaXMgc2V0IGJlZm9yZSBydW5uaW5nIHRoZSBpbnRlcnByZXRlciwgaXQgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZyB1c2VkCitmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciwgaW4gdGhlIHN5bnRheAorLklCIGVuY29kaW5nbmFtZSAiOiIgZXJyb3JoYW5kbGVyCitUaGUKKy5JQiBlcnJvcmhhbmRsZXIKK3BhcnQgaXMgb3B0aW9uYWwgYW5kIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIHN0ci5lbmNvZGUuIEZvciBzdGRlcnIsIHRoZQorLklCIGVycm9yaGFuZGxlcgorIHBhcnQgaXMgaWdub3JlZDsgdGhlIGhhbmRsZXIgd2lsbCBhbHdheXMgYmUgXCdiYWNrc2xhc2hyZXBsYWNlXCcuCiAuSVAgUFlUSE9OTk9VU0VSU0lURQotSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwotdGhlIFxmQlwtc1xmUCBvcHRpb24gKERvbid0IGFkZCB0aGUgdXNlciBzaXRlIGRpcmVjdG9yeSB0byBzeXMucGF0aCkuCitJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHRoZQorXGZCXC1zXGZQIG9wdGlvbiAoRG9uJ3QgYWRkIHRoZSB1c2VyIHNpdGUgZGlyZWN0b3J5IHRvIHN5cy5wYXRoKS4KIC5JUCBQWVRIT05VTkJVRkZFUkVECiBJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nCiB0aGUgXGZCXC11XGZQIG9wdGlvbi4KQEAgLTQxMSw2ICs0MjAsOSBAQAogSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwogdGhlIFxmQlwtdlxmUCBvcHRpb24uIElmIHNldCB0byBhbiBpbnRlZ2VyLCBpdCBpcyBlcXVpdmFsZW50IHRvCiBzcGVjaWZ5aW5nIFxmQlwtdlxmUCBtdWx0aXBsZSB0aW1lcy4gCisuSVAgUFlUSE9OV0FSTklOR1MKK0lmIHRoaXMgaXMgc2V0IHRvIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBpdCBpcyBlcXVpdmFsZW50IHRvCitzcGVjaWZ5aW5nIHRoZSBcZkJcLVdcZlAgb3B0aW9uIGZvciBlYWNoIHNlcGFyYXRlIHZhbHVlLgogLlNIIEFVVEhPUgogVGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmCiAuU0ggSU5URVJORVQgUkVTT1VSQ0VTCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi5wYy5pbiBiL01pc2MvcHl0aG9uLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDgxYTkKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL3B5dGhvbi5wYy5pbgpAQCAtMCwwICsxLDEzIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKworTmFtZTogUHl0aG9uCitEZXNjcmlwdGlvbjogUHl0aG9uIGxpYnJhcnkKK1JlcXVpcmVzOiAKK1ZlcnNpb246IEBWRVJTSU9OQAorTGlicy5wcml2YXRlOiBATElCU0AKK0xpYnM6IC1MJHtsaWJkaXJ9IC1scHl0aG9uQFZFUlNJT05ACitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9weXRob25AVkVSU0lPTkAgCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvU2V0dXAuZGlzdCBiL01vZHVsZXMvU2V0dXAuZGlzdAppbmRleCA1ZTY5YTYwLi5lMDJmZDc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1NldHVwLmRpc3QKKysrIGIvTW9kdWxlcy9TZXR1cC5kaXN0CkBAIC0xMTgsNiArMTE4LDcgQEAKIAkJCQkjIGlmICRIT01FIGlzIG5vdCBzZXQKIF9zcmUgX3NyZS5jCQkJIyBGcmVkcmlrIEx1bmRoJ3MgbmV3IHJlZ3VsYXIgZXhwcmVzc2lvbnMKIF9jb2RlY3MgX2NvZGVjc21vZHVsZS5jCQkjIGFjY2VzcyB0byB0aGUgYnVpbHRpbiBjb2RlY3MgYW5kIGNvZGVjIHJlZ2lzdHJ5Citfd2Vha3JlZiBfd2Vha3JlZi5jICAgICAgICAgICAgICMgd2VhayByZWZlcmVuY2VzCiAKICMgVGhlIHppcGltcG9ydCBtb2R1bGUgaXMgYWx3YXlzIGltcG9ydGVkIGF0IHN0YXJ0dXAuIEhhdmluZyBpdCBhcyBhCiAjIGJ1aWx0aW4gbW9kdWxlIGF2b2lkcyBzb21lIGJvb3RzdHJhcHBpbmcgcHJvYmxlbXMgYW5kIHJlZHVjZXMgb3ZlcmhlYWQuCkBAIC0xNjgsMTIgKzE2OSwxMSBAQAogIyBNb2R1bGVzIHRoYXQgc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50IChub24gVU5JWCBkZXBlbmRlbnQpOgogCiAjYXJyYXkgYXJyYXltb2R1bGUuYwkjIGFycmF5IG9iamVjdHMKLSNjbWF0aCBjbWF0aG1vZHVsZS5jICMgLWxtICMgY29tcGxleCBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zCi0jbWF0aCBtYXRobW9kdWxlLmMgIyAtbG0gIyBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zLCBlLmcuIHNpbigpCisjY21hdGggY21hdGhtb2R1bGUuYyBfbWF0aC5jICMgLWxtICMgY29tcGxleCBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zCisjbWF0aCBtYXRobW9kdWxlLmMgX21hdGguYyAjIC1sbSAjIG1hdGggbGlicmFyeSBmdW5jdGlvbnMsIGUuZy4gc2luKCkKICNfc3RydWN0IF9zdHJ1Y3QuYwkjIGJpbmFyeSBzdHJ1Y3R1cmUgcGFja2luZy91bnBhY2tpbmcKICN0aW1lIHRpbWVtb2R1bGUuYyAjIC1sbSAjIHRpbWUgb3BlcmF0aW9ucyBhbmQgdmFyaWFibGVzCiAjb3BlcmF0b3Igb3BlcmF0b3IuYwkjIG9wZXJhdG9yLmFkZCgpIGFuZCBzaW1pbGFyIGdvb2RpZXMKLSNfd2Vha3JlZiBfd2Vha3JlZi5jCSMgYmFzaWMgd2VhayByZWZlcmVuY2Ugc3VwcG9ydAogI190ZXN0Y2FwaSBfdGVzdGNhcGltb2R1bGUuYyAgICAjIFB5dGhvbiBDIEFQSSB0ZXN0IG1vZHVsZQogI19yYW5kb20gX3JhbmRvbW1vZHVsZS5jCSMgUmFuZG9tIG51bWJlciBnZW5lcmF0b3IKICNfY29sbGVjdGlvbnMgX2NvbGxlY3Rpb25zbW9kdWxlLmMgIyBDb250YWluZXIgdHlwZXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jIGIvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKaW5kZXggYjUxZjNkZS4uZTg5NzZiMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKQEAgLTIzNyw3ICsyMzcsNSBAQAogUHlNT0RJTklUX0ZVTkMKIGluaXRfYmlzZWN0KHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm07Ci0KLSAgICBtID0gUHlfSW5pdE1vZHVsZTMoIl9iaXNlY3QiLCBiaXNlY3RfbWV0aG9kcywgbW9kdWxlX2RvYyk7CisgICAgUHlfSW5pdE1vZHVsZTMoIl9iaXNlY3QiLCBiaXNlY3RfbWV0aG9kcywgbW9kdWxlX2RvYyk7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19ic2RkYi5jIGIvTW9kdWxlcy9fYnNkZGIuYwppbmRleCA3NTUyNDJjLi5kMmQxMmZmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19ic2RkYi5jCisrKyBiL01vZHVsZXMvX2JzZGRiLmMKQEAgLTczLDYgKzczLDEwIEBACiAgKiBEQkxvY2sgICAgICAgKEEgbG9jayBoYW5kbGUpCiAgKiBEQlNlcXVlbmNlICAgKFNlcXVlbmNlKQogICoKKyAqIE1vcmUgZGF0YXR5cGVzIGFkZGVkOgorICoKKyAqIERCTG9nQ3Vyc29yICAoTG9nIEN1cnNvcikKKyAqCiAgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNjksOSArMTczLDYgQEAKIAogI2VuZGlmCiAKLS8qIFNob3VsZCBEQl9JTkNPTVBMRVRFIGJlIHR1cm5lZCBpbnRvIGEgd2FybmluZyBvciBhbiBleGNlcHRpb24/ICovCi0jZGVmaW5lIElOQ09NUExFVEVfSVNfV0FSTklORyAxCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRXhjZXB0aW9ucyAqLwogCkBAIC0xOTEsMTAgKzE5Miw2IEBACiBzdGF0aWMgUHlPYmplY3QqIERCUGFnZU5vdEZvdW5kRXJyb3I7ICAgLyogREJfUEFHRV9OT1RGT1VORCAqLwogc3RhdGljIFB5T2JqZWN0KiBEQlNlY29uZGFyeUJhZEVycm9yOyAgIC8qIERCX1NFQ09OREFSWV9CQUQgKi8KIAotI2lmICFJTkNPTVBMRVRFX0lTX1dBUk5JTkcKLXN0YXRpYyBQeU9iamVjdCogREJJbmNvbXBsZXRlRXJyb3I7ICAgICAvKiBEQl9JTkNPTVBMRVRFICovCi0jZW5kaWYKLQogc3RhdGljIFB5T2JqZWN0KiBEQkludmFsaWRBcmdFcnJvcjsgICAgIC8qIEVJTlZBTCAqLwogc3RhdGljIFB5T2JqZWN0KiBEQkFjY2Vzc0Vycm9yOyAgICAgICAgIC8qIEVBQ0NFUyAqLwogc3RhdGljIFB5T2JqZWN0KiBEQk5vU3BhY2VFcnJvcjsgICAgICAgIC8qIEVOT1NQQyAqLwpAQCAtMjA4LDYgKzIwNSwxOCBAQAogI2lmIChEQlZFUiA+PSA0MikKIHN0YXRpYyBQeU9iamVjdCogREJSZXBIYW5kbGVEZWFkRXJyb3I7ICAvKiBEQl9SRVBfSEFORExFX0RFQUQgKi8KICNlbmRpZgorI2lmIChEQlZFUiA+PSA0NCkKK3N0YXRpYyBQeU9iamVjdCogREJSZXBMb2Nrb3V0RXJyb3I7ICAgICAvKiBEQl9SRVBfTE9DS09VVCAqLworI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDYpCitzdGF0aWMgUHlPYmplY3QqIERCUmVwTGVhc2VFeHBpcmVkRXJyb3I7IC8qIERCX1JFUF9MRUFTRV9FWFBJUkVEICovCisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NykKK3N0YXRpYyBQeU9iamVjdCogREJGb3JlaWduQ29uZmxpY3RFcnJvcjsgLyogREJfRk9SRUlHTl9DT05GTElDVCAqLworI2VuZGlmCisKIAogc3RhdGljIFB5T2JqZWN0KiBEQlJlcFVuYXZhaWxFcnJvcjsgICAgIC8qIERCX1JFUF9VTkFWQUlMICovCiAKQEAgLTIxNSw2ICsyMjQsMTAgQEAKICNkZWZpbmUgREJfQlVGRkVSX1NNQUxMICAgICAgICAgRU5PTUVNCiAjZW5kaWYKIAorI2lmIChEQlZFUiA8IDQ4KQorI2RlZmluZSBEQl9HSURfU0laRSBEQl9YSUREQVRBU0laRQorI2VuZGlmCisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBTdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgKi8KQEAgLTIzOCw3ICsyNTEsNyBAQAogI2VuZGlmCiAKIHN0YXRpY2ZvcndhcmQgUHlUeXBlT2JqZWN0IERCX1R5cGUsIERCQ3Vyc29yX1R5cGUsIERCRW52X1R5cGUsIERCVHhuX1R5cGUsCi0gICAgICAgICAgICAgIERCTG9ja19UeXBlOworICAgICAgICAgICAgICBEQkxvY2tfVHlwZSwgREJMb2dDdXJzb3JfVHlwZTsKICNpZiAoREJWRVIgPj0gNDMpCiBzdGF0aWNmb3J3YXJkIFB5VHlwZU9iamVjdCBEQlNlcXVlbmNlX1R5cGU7CiAjZW5kaWYKQEAgLTI1MCw2ICsyNjMsNyBAQAogCiAjZGVmaW5lIERCT2JqZWN0X0NoZWNrKHYpICAgICAgICAgICAoUHlfVFlQRSh2KSA9PSAmREJfVHlwZSkKICNkZWZpbmUgREJDdXJzb3JPYmplY3RfQ2hlY2sodikgICAgIChQeV9UWVBFKHYpID09ICZEQkN1cnNvcl9UeXBlKQorI2RlZmluZSBEQkxvZ0N1cnNvck9iamVjdF9DaGVjayh2KSAgKFB5X1RZUEUodikgPT0gJkRCTG9nQ3Vyc29yX1R5cGUpCiAjZGVmaW5lIERCRW52T2JqZWN0X0NoZWNrKHYpICAgICAgICAoUHlfVFlQRSh2KSA9PSAmREJFbnZfVHlwZSkKICNkZWZpbmUgREJUeG5PYmplY3RfQ2hlY2sodikgICAgICAgIChQeV9UWVBFKHYpID09ICZEQlR4bl9UeXBlKQogI2RlZmluZSBEQkxvY2tPYmplY3RfQ2hlY2sodikgICAgICAgKFB5X1RZUEUodikgPT0gJkRCTG9ja19UeXBlKQpAQCAtMzU1LDYgKzM2OSw5IEBACiAjZGVmaW5lIENIRUNLX0NVUlNPUl9OT1RfQ0xPU0VEKGN1cnMpIFwKICAgICAgICAgX0NIRUNLX09CSkVDVF9OT1RfQ0xPU0VEKGN1cnMtPmRiYywgREJDdXJzb3JDbG9zZWRFcnJvciwgREJDdXJzb3IpCiAKKyNkZWZpbmUgQ0hFQ0tfTE9HQ1VSU09SX05PVF9DTE9TRUQobG9nY3VycykgXAorICAgICAgICBfQ0hFQ0tfT0JKRUNUX05PVF9DTE9TRUQobG9nY3Vycy0+bG9nYywgREJDdXJzb3JDbG9zZWRFcnJvciwgREJMb2dDdXJzb3IpCisKICNpZiAoREJWRVIgPj0gNDMpCiAjZGVmaW5lIENIRUNLX1NFUVVFTkNFX05PVF9DTE9TRUQoY3VycykgXAogICAgICAgICBfQ0hFQ0tfT0JKRUNUX05PVF9DTE9TRUQoY3Vycy0+c2VxdWVuY2UsIERCRXJyb3IsIERCU2VxdWVuY2UpCkBAIC02NjcsMjcgKzY4NCw4IEBACiAgICAgdW5zaWduZWQgaW50IGJ5dGVzX2xlZnQ7CiAKICAgICBzd2l0Y2ggKGVycikgewotICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgLyogc3VjY2Vzc2Z1bCwgbm8gZXJyb3IgKi8gICAgICBicmVhazsKLQotI2lmIChEQlZFUiA8IDQxKQotICAgICAgICBjYXNlIERCX0lOQ09NUExFVEU6Ci0jaWYgSU5DT01QTEVURV9JU19XQVJOSU5HCi0gICAgICAgICAgICBieXRlc19sZWZ0ID0gb3VyX3N0cmxjcHkoZXJyVHh0LCBkYl9zdHJlcnJvcihlcnIpLCBzaXplb2YoZXJyVHh0KSk7Ci0gICAgICAgICAgICAvKiBFbnN1cmUgdGhhdCBieXRlc19sZWZ0IG5ldmVyIGdvZXMgbmVnYXRpdmUgKi8KLSAgICAgICAgICAgIGlmIChfZGJfZXJybXNnWzBdICYmIGJ5dGVzX2xlZnQgPCAoc2l6ZW9mKGVyclR4dCkgLSA0KSkgewotICAgICAgICAgICAgICAgIGJ5dGVzX2xlZnQgPSBzaXplb2YoZXJyVHh0KSAtIGJ5dGVzX2xlZnQgLSA0IC0gMTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoYnl0ZXNfbGVmdCA+PSAwKTsKLSAgICAgICAgICAgICAgICBzdHJjYXQoZXJyVHh0LCAiIC0tICIpOwotICAgICAgICAgICAgICAgIHN0cm5jYXQoZXJyVHh0LCBfZGJfZXJybXNnLCBieXRlc19sZWZ0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9kYl9lcnJtc2dbMF0gPSAwOwotICAgICAgICAgICAgZXhjZXB0aW9uUmFpc2VkID0gUHlFcnJfV2FybihQeUV4Y19SdW50aW1lV2FybmluZywgZXJyVHh0KTsKLQotI2Vsc2UgIC8qIGRvIGFuIGV4Y2VwdGlvbiBpbnN0ZWFkICovCi0gICAgICAgIGVyck9iaiA9IERCSW5jb21wbGV0ZUVycm9yOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIERCVkVSIDwgNDEgKi8KKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3NmdWwsIG5vIGVycm9yICovCisgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBjYXNlIERCX0tFWUVNUFRZOiAgICAgICAgICAgZXJyT2JqID0gREJLZXlFbXB0eUVycm9yOyAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEQl9LRVlFWElTVDogICAgICAgICAgIGVyck9iaiA9IERCS2V5RXhpc3RFcnJvcjsgICAgICAgYnJlYWs7CkBAIC03MjAsNiArNzE4LDE3IEBACiAjaWYgKERCVkVSID49IDQyKQogICAgICAgICBjYXNlIERCX1JFUF9IQU5ETEVfREVBRCA6IGVyck9iaiA9IERCUmVwSGFuZGxlRGVhZEVycm9yOyBicmVhazsKICNlbmRpZgorI2lmIChEQlZFUiA+PSA0NCkKKyAgICAgICAgY2FzZSBEQl9SRVBfTE9DS09VVCA6IGVyck9iaiA9IERCUmVwTG9ja291dEVycm9yOyBicmVhazsKKyNlbmRpZgorCisjaWYgKERCVkVSID49IDQ2KQorICAgICAgICBjYXNlIERCX1JFUF9MRUFTRV9FWFBJUkVEIDogZXJyT2JqID0gREJSZXBMZWFzZUV4cGlyZWRFcnJvcjsgYnJlYWs7CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NykKKyAgICAgICAgY2FzZSBEQl9GT1JFSUdOX0NPTkZMSUNUIDogZXJyT2JqID0gREJGb3JlaWduQ29uZmxpY3RFcnJvcjsgYnJlYWs7CisjZW5kaWYKIAogICAgICAgICBjYXNlIERCX1JFUF9VTkFWQUlMIDogZXJyT2JqID0gREJSZXBVbmF2YWlsRXJyb3I7IGJyZWFrOwogCkBAIC03ODgsNyArNzk3LDYgQEAKICAgICBpZiAobWFrZURCRXJyb3IoZXJyKSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIHNlbGYtPmhhdmVTdGF0ID0gMDsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtODA1LDcgKzgxMyw2IEBACiAgICAgaWYgKG1ha2VEQkVycm9yKGVycikpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBzZWxmLT5oYXZlU3RhdCA9IDA7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTkzMCw3ICs5MzcsNiBAQAogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZi0+aGF2ZVN0YXQgPSAwOwogICAgIHNlbGYtPmZsYWdzID0gMDsKICAgICBzZWxmLT5zZXRmbGFncyA9IDA7CiAgICAgc2VsZi0+bXllbnZvYmogPSBOVUxMOwpAQCAtMTA3Nyw2ICsxMDgzLDU0IEBACiB9CiAKIAorc3RhdGljIERCTG9nQ3Vyc29yT2JqZWN0KgorbmV3REJMb2dDdXJzb3JPYmplY3QoREJfTE9HQyogZGJsb2djLCBEQkVudk9iamVjdCogZW52KQoreworICAgIERCTG9nQ3Vyc29yT2JqZWN0KiBzZWxmOworCisgICAgc2VsZiA9IFB5T2JqZWN0X05ldyhEQkxvZ0N1cnNvck9iamVjdCwgJkRCTG9nQ3Vyc29yX1R5cGUpOworCisgICAgaWYgKHNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT5sb2djID0gZGJsb2djOworICAgIHNlbGYtPmVudiA9IGVudjsKKworICAgIElOU0VSVF9JTl9ET1VCTEVfTElOS0VEX0xJU1Qoc2VsZi0+ZW52LT5jaGlsZHJlbl9sb2djdXJzb3JzLCBzZWxmKTsKKworICAgIHNlbGYtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKKyAgICBQeV9JTkNSRUYoc2VsZi0+ZW52KTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgUHlPYmplY3QgKkRCTG9nQ3Vyc29yX2Nsb3NlX2ludGVybmFsKERCTG9nQ3Vyc29yT2JqZWN0KiBzZWxmKTsKKworc3RhdGljIHZvaWQKK0RCTG9nQ3Vyc29yX2RlYWxsb2MoREJMb2dDdXJzb3JPYmplY3QqIHNlbGYpCit7CisgICAgUHlPYmplY3QgKmR1bW15OworCisgICAgaWYgKHNlbGYtPmxvZ2MgIT0gTlVMTCkgeworICAgICAgICBkdW1teSA9IERCTG9nQ3Vyc29yX2Nsb3NlX2ludGVybmFsKHNlbGYpOworICAgICAgICAvKgorICAgICAgICAqKiBSYWlzaW5nIGV4Y2VwdGlvbnMgd2hpbGUgZG9pbmcKKyAgICAgICAgKiogZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGEgZmF0YWwgZXJyb3IuCisgICAgICAgICovCisgICAgICAgIGlmIChkdW1teSkKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkdW1teSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIGlmIChzZWxmLT5pbl93ZWFrcmVmbGlzdCAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOworICAgIH0KKyAgICBQeV9ERUNSRUYoc2VsZi0+ZW52KTsKKyAgICBQeU9iamVjdF9EZWwoc2VsZik7Cit9CisKKwogc3RhdGljIERCRW52T2JqZWN0KgogbmV3REJFbnZPYmplY3QoaW50IGZsYWdzKQogewpAQCAtMTA5Miw2ICsxMTQ2LDcgQEAKICAgICBzZWxmLT5tb2R1bGVGbGFncy5jdXJzb3JTZXRSZXR1cm5zTm9uZSA9IERFRkFVTFRfQ1VSU09SX1NFVF9SRVRVUk5TX05PTkU7CiAgICAgc2VsZi0+Y2hpbGRyZW5fZGJzID0gTlVMTDsKICAgICBzZWxmLT5jaGlsZHJlbl90eG5zID0gTlVMTDsKKyAgICBzZWxmLT5jaGlsZHJlbl9sb2djdXJzb3JzID0gTlVMTCA7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHNlbGYtPnByaXZhdGVfb2JqID0gUHlfTm9uZTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CkBAIC0xMTYzLDYgKzEyMTgsOCBAQAogICAgIHNlbGYtPmZsYWdfcHJlcGFyZSA9IDA7CiAgICAgc2VsZi0+cGFyZW50X3R4biA9IE5VTEw7CiAgICAgc2VsZi0+ZW52ID0gTlVMTDsKKyAgICAvKiBXZSBpbml0aWFsaXplIGp1c3QgaW4gY2FzZSAidHhuX2JlZ2luIiBmYWlscyAqLworICAgIHNlbGYtPnR4biA9IE5VTEw7CiAKICAgICBpZiAocGFyZW50ICYmICgoUHlPYmplY3QgKilwYXJlbnQhPVB5X05vbmUpKSB7CiAgICAgICAgIHBhcmVudF90eG4gPSBwYXJlbnQtPnR4bjsKQEAgLTExNzYsNiArMTIzMyw3IEBACiAgICAgICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CiAKICAgICAgICAgaWYgKG1ha2VEQkVycm9yKGVycikpIHsKKyAgICAgICAgICAgIC8qIEZyZWUgb2JqZWN0IGhhbGYgaW5pdGlhbGl6ZWQgKi8KICAgICAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC0xMjA5LDcgKzEyNjcsNyBAQAogICAgIGlmIChzZWxmLT50eG4pIHsKICAgICAgICAgaW50IGZsYWdfcHJlcGFyZSA9IHNlbGYtPmZsYWdfcHJlcGFyZTsKIAotICAgICAgICBkdW1teT1EQlR4bl9hYm9ydF9kaXNjYXJkX2ludGVybmFsKHNlbGYsMCk7CisgICAgICAgIGR1bW15PURCVHhuX2Fib3J0X2Rpc2NhcmRfaW50ZXJuYWwoc2VsZiwgMCk7CiAgICAgICAgIC8qCiAgICAgICAgICoqIFJhaXNpbmcgZXhjZXB0aW9ucyB3aGlsZSBkb2luZwogICAgICAgICAqKiBnYXJiYWdlIGNvbGxlY3Rpb24gaXMgYSBmYXRhbCBlcnJvci4KQEAgLTEyMzIsNyArMTI5MCwxMiBAQAogICAgIGlmIChzZWxmLT5lbnYpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYtPmVudik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYtPnBhcmVudF90eG4pOworICAgICAgICAvKgorICAgICAgICAqKiBXZSBjYW4gaGF2ZSAic2VsZi0+ZW52PT1OVUxMIiBhbmQgInNlbGYtPnBhcmVudF90eG49PU5VTEwiCisgICAgICAgICoqIGlmIHNvbWV0aGluZyBoYXBwZW5zIHdoZW4gY3JlYXRpbmcgdGhlIHRyYW5zYWN0aW9uIG9iamVjdAorICAgICAgICAqKiBhbmQgd2UgYWJvcnQgdGhlIG9iamVjdCB3aGlsZSBoYWxmIGRvbmUuCisgICAgICAgICovCisgICAgICAgIFB5X1hERUNSRUYoc2VsZi0+cGFyZW50X3R4bik7CiAgICAgfQogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKIH0KQEAgLTEyNDcsNiArMTMxMCw3IEBACiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc2VsZi0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOworICAgIHNlbGYtPmxvY2tfaW5pdGlhbGl6ZWQgPSAwOyAgLyogSnVzdCBpbiBjYXNlIHRoZSBjYWxsIGZhaWxzICovCiAKICAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CiAgICAgZXJyID0gbXllbnYtPmRiX2Vudi0+bG9ja19nZXQobXllbnYtPmRiX2VudiwgbG9ja2VyLCBmbGFncywgb2JqLCBsb2NrX21vZGUsCkBAIC0xMjU1LDYgKzEzMTksOCBAQAogICAgIGlmIChtYWtlREJFcnJvcihlcnIpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgc2VsZiA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2VsZi0+bG9ja19pbml0aWFsaXplZCA9IDE7CiAgICAgfQogCiAgICAgcmV0dXJuIHNlbGY7CkBAIC0xMjY4LDYgKzEzMzQsNyBAQAogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKICAgICB9CiAgICAgLyogVE9ETzogaXMgdGhpcyBsb2NrIGhlbGQ/IHNob3VsZCB3ZSByZWxlYXNlIGl0PyAqLworICAgIC8qIENBVVRJT046IFRoZSBsb2NrIGNhbiBiZSBub3QgaW5pdGlhbGl6ZWQgaWYgdGhlIGNyZWF0aW9uIGhhcyBmYWlsZWQgKi8KIAogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKIH0KQEAgLTEyODgsNiArMTM1NSw3IEBACiAgICAgc2VsZi0+dHhuID0gTlVMTDsKIAogICAgIHNlbGYtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKKyAgICBzZWxmLT5zZXF1ZW5jZSA9IE5VTEw7ICAvKiBKdXN0IGluIGNhc2UgdGhlIGNhbGwgZmFpbHMgKi8KIAogICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKICAgICBlcnIgPSBkYl9zZXF1ZW5jZV9jcmVhdGUoJnNlbGYtPnNlcXVlbmNlLCBzZWxmLT5teWRiLT5kYiwgZmxhZ3MpOwpAQCAtMTQxNywxMCArMTQ4NSw3MCBAQAogICAgICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyNpZiAoREJWRVIgPj0gNDYpCisgICAgICAgIGVsc2UgaWYgKFB5TGlzdF9DaGVjayhyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyKiBkYXRhOworICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplOworICAgICAgICAgICAgaW50IGksIGxpc3RsZW47CisgICAgICAgICAgICBEQlQqIGRidHM7CisKKyAgICAgICAgICAgIGxpc3RsZW4gPSBQeUxpc3RfU2l6ZShyZXN1bHQpOworCisgICAgICAgICAgICBkYnRzID0gKERCVCAqKW1hbGxvYyhzaXplb2YoREJUKSAqIGxpc3RsZW4pOworCisgICAgICAgICAgICBmb3IgKGk9MDsgaTxsaXN0bGVuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKFB5TGlzdF9HZXRJdGVtKHJlc3VsdCwgaSkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCisjaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMzAwMDAwMCkKKyJUaGUgbGlzdCByZXR1cm5lZCBieSBEQi0+YXNzb2NpYXRlIGNhbGxiYWNrIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3RyaW5ncy4iKTsKKyNlbHNlCisiVGhlIGxpc3QgcmV0dXJuZWQgYnkgREItPmFzc29jaWF0ZSBjYWxsYmFjayBzaG91bGQgYmUgYSBsaXN0IG9mIGJ5dGVzLiIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoCisgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HZXRJdGVtKHJlc3VsdCwgaSksCisgICAgICAgICAgICAgICAgICAgICZkYXRhLCAmc2l6ZSk7CisKKyAgICAgICAgICAgICAgICBDTEVBUl9EQlQoZGJ0c1tpXSk7CisgICAgICAgICAgICAgICAgZGJ0c1tpXS5kYXRhID0gbWFsbG9jKHNpemUpOyAgICAgICAgICAvKiBUT0RPLCBjaGVjayB0aGlzICovCisKKyAgICAgICAgICAgICAgICBpZiAoZGJ0c1tpXS5kYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGRidHNbaV0uZGF0YSwgZGF0YSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGRidHNbaV0uc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAgICAgIGRidHNbaV0udWxlbiA9IGRidHNbaV0uc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgZGJ0c1tpXS5mbGFncyA9IERCX0RCVF9BUFBNQUxMT0M7ICAvKiBEQiB3aWxsIGZyZWUgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1hbGxvYyBmYWlsZWQgaW4gX2RiX2Fzc29jaWF0ZUNhbGxiYWNrIChsaXN0KSIpOworICAgICAgICAgICAgICAgICAgICBQeUVycl9QcmludCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ0xFQVJfREJUKCpzZWNLZXkpOworCisgICAgICAgICAgICBzZWNLZXktPmRhdGEgPSBkYnRzOworICAgICAgICAgICAgc2VjS2V5LT5zaXplID0gbGlzdGxlbjsKKyAgICAgICAgICAgIHNlY0tleS0+ZmxhZ3MgPSBEQl9EQlRfQVBQTUFMTE9DIHwgREJfREJUX01VTFRJUExFOworICAgICAgICAgICAgcmV0dmFsID0gMDsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgIkRCIGFzc29jaWF0ZSBjYWxsYmFjayBzaG91bGQgcmV0dXJuIERCX0RPTk9USU5ERVggb3Igc3RyaW5nLiIpOworI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDApCisiREIgYXNzb2NpYXRlIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gREJfRE9OT1RJTkRFWC9zdHJpbmcvbGlzdCBvZiBzdHJpbmdzLiIpOworI2Vsc2UKKyJEQiBhc3NvY2lhdGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBEQl9ET05PVElOREVYL2J5dGVzL2xpc3Qgb2YgYnl0ZXMuIik7CisjZW5kaWYKICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIH0KIApAQCAtMTQzOSwyOSArMTU2NywxOCBAQAogICAgIGludCBlcnIsIGZsYWdzPTA7CiAgICAgREJPYmplY3QqIHNlY29uZGFyeURCOwogICAgIFB5T2JqZWN0KiBjYWxsYmFjazsKLSNpZiAoREJWRVIgPj0gNDEpCiAgICAgUHlPYmplY3QgKnR4bm9iaiA9IE5VTEw7CiAgICAgREJfVFhOICp0eG4gPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7InNlY29uZGFyeURCIiwgImNhbGxiYWNrIiwgImZsYWdzIiwgInR4biIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMfTsKLSNlbHNlCi0gICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsic2Vjb25kYXJ5REIiLCAiY2FsbGJhY2siLCAiZmxhZ3MiLCBOVUxMfTsKLSNlbmRpZgogCi0jaWYgKERCVkVSID49IDQxKQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk9PfGlPOmFzc29jaWF0ZSIsIGt3bmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlY29uZGFyeURCLCAmY2FsbGJhY2ssICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHhub2JqKSkgewotI2Vsc2UKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPT3xpOmFzc29jaWF0ZSIsIGt3bmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlY29uZGFyeURCLCAmY2FsbGJhY2ssICZmbGFncykpIHsKLSNlbmRpZgogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSNpZiAoREJWRVIgPj0gNDEpCiAgICAgaWYgKCFjaGVja1R4bk9iaih0eG5vYmosICZ0eG4pKSByZXR1cm4gTlVMTDsKLSNlbmRpZgogCiAgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKICAgICBpZiAoIURCT2JqZWN0X0NoZWNrKHNlY29uZGFyeURCKSkgewpAQCAtMTQ5NywxOCArMTYxNCwxMSBAQAogICAgIFB5RXZhbF9Jbml0VGhyZWFkcygpOwogI2VuZGlmCiAgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOwotI2lmIChEQlZFUiA+PSA0MSkKICAgICBlcnIgPSBzZWxmLT5kYi0+YXNzb2NpYXRlKHNlbGYtPmRiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5REItPmRiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RiX2Fzc29jaWF0ZUNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOwotI2Vsc2UKLSAgICBlcnIgPSBzZWxmLT5kYi0+YXNzb2NpYXRlKHNlbGYtPmRiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5REItPmRiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RiX2Fzc29jaWF0ZUNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOwotI2VuZGlmCiAgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKIAogICAgIGlmIChlcnIpIHsKQEAgLTE3MDEsNiArMTgxMSw2NCBAQAogfQogCiAKKyNpZiAoREJWRVIgPj0gNDcpCisvKgorKiogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgc2luY2UgQmVya2VsZXkgREIgNC40LAorKiogYnV0IDQuNiB2ZXJzaW9uIGlzIHNvIGJ1Z2d5IHRoYXQgd2Ugb25seSBzdXBwb3J0CisqKiBpdCBmcm9tIEJEQiA0LjcgYW5kIG5ld2VyLgorKi8KK3N0YXRpYyBQeU9iamVjdCoKK0RCX2NvbXBhY3QoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQoreworICAgIFB5T2JqZWN0KiB0eG5vYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdGFydG9iaiA9IE5VTEwsICpzdG9wb2JqID0gTlVMTDsKKyAgICBpbnQgZmxhZ3MgPSAwOworICAgIERCX1RYTiAqdHhuID0gTlVMTDsKKyAgICBEQlQgKnN0YXJ0X3AgPSBOVUxMLCAqc3RvcF9wID0gTlVMTDsKKyAgICBEQlQgc3RhcnQsIHN0b3A7CisgICAgaW50IGVycjsKKyAgICBEQl9DT01QQUNUIGNfZGF0YSA9IHsgMCB9OworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ICJ0eG4iLCAic3RhcnQiLCAic3RvcCIsICJmbGFncyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBhY3RfZmlsbHBlcmNlbnQiLCAiY29tcGFjdF9wYWdlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBhY3RfdGltZW91dCIsIE5VTEwgfTsKKworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE9PT2lpaUk6Y29tcGFjdCIsIGt3bmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR4bm9iaiwgJnN0YXJ0b2JqLCAmc3RvcG9iaiwgJmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjX2RhdGEuY29tcGFjdF9maWxscGVyY2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY19kYXRhLmNvbXBhY3RfcGFnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNfZGF0YS5jb21wYWN0X3RpbWVvdXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisgICAgaWYgKCFjaGVja1R4bk9iaih0eG5vYmosICZ0eG4pKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChzdGFydG9iaiAmJiBtYWtlX2tleV9kYnQoc2VsZiwgc3RhcnRvYmosICZzdGFydCwgTlVMTCkpIHsKKyAgICAgICAgc3RhcnRfcCA9ICZzdGFydDsKKyAgICB9CisgICAgaWYgKHN0b3BvYmogJiYgbWFrZV9rZXlfZGJ0KHNlbGYsIHN0b3BvYmosICZzdG9wLCBOVUxMKSkgeworICAgICAgICBzdG9wX3AgPSAmc3RvcDsKKyAgICB9CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmNvbXBhY3Qoc2VsZi0+ZGIsIHR4biwgc3RhcnRfcCwgc3RvcF9wLCAmY19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBOVUxMKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgaWYgKHN0YXJ0b2JqKQorICAgICAgICBGUkVFX0RCVChzdGFydCk7CisgICAgaWYgKHN0b3BvYmopCisgICAgICAgIEZSRUVfREJUKHN0b3ApOworCisgICAgUkVUVVJOX0lGX0VSUigpOworCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGNfZGF0YS5jb21wYWN0X3BhZ2VzX3RydW5jYXRlZCk7Cit9CisjZW5kaWYKKworCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9mZChEQk9iamVjdCogc2VsZikKIHsKQEAgLTE3MTYsNiArMTg4NCw1NSBAQAogfQogCiAKKyNpZiAoREJWRVIgPj0gNDYpCitzdGF0aWMgUHlPYmplY3QqCitEQl9leGlzdHMoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQoreworICAgIGludCBlcnIsIGZsYWdzPTA7CisgICAgUHlPYmplY3QqIHR4bm9iaiA9IE5VTEw7CisgICAgUHlPYmplY3QqIGtleW9iajsKKyAgICBEQlQga2V5OworICAgIERCX1RYTiAqdHhuOworCisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsia2V5IiwgInR4biIsICJmbGFncyIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xPaTpleGlzdHMiLCBrd25hbWVzLAorICAgICAgICAgICAgICAgICZrZXlvYmosICZ0eG5vYmosICZmbGFncykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKyAgICBpZiAoIW1ha2Vfa2V5X2RidChzZWxmLCBrZXlvYmosICZrZXksIE5VTEwpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIWNoZWNrVHhuT2JqKHR4bm9iaiwgJnR4bikpIHsKKyAgICAgICAgRlJFRV9EQlQoa2V5KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5leGlzdHMoc2VsZi0+ZGIsIHR4biwgJmtleSwgZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBGUkVFX0RCVChrZXkpOworCisgICAgaWYgKCFlcnIpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOworICAgICAgICByZXR1cm4gUHlfVHJ1ZTsKKyAgICB9CisgICAgaWYgKChlcnIgPT0gREJfTk9URk9VTkQgfHwgZXJyID09IERCX0tFWUVNUFRZKSkgeworICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOworICAgICAgICByZXR1cm4gUHlfRmFsc2U7CisgICAgfQorCisgICAgLyoKKyAgICAqKiBJZiB3ZSByZWFjaCB0aGVyZSwgdGhlcmUgd2FzIGFuIGVycm9yLiBUaGUKKyAgICAqKiAicmV0dXJuIiBzaG91bGQgYmUgdW5yZWFjaGFibGUuCisgICAgKi8KKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgYXNzZXJ0KDApOyAgLyogVGhpcyBjb3VkZSBTSE9VTEQgYmUgdW5yZWFjaGFibGUgKi8KKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9nZXQoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewpAQCAtMjExNCw3ICsyMzMxLDYgQEAKICAgICBpbnQgZXJyLCB0eXBlID0gREJfVU5LTk9XTiwgZmxhZ3M9MCwgbW9kZT0wNjYwOwogICAgIGNoYXIqIGZpbGVuYW1lID0gTlVMTDsKICAgICBjaGFyKiBkYm5hbWUgPSBOVUxMOwotI2lmIChEQlZFUiA+PSA0MSkKICAgICBQeU9iamVjdCAqdHhub2JqID0gTlVMTDsKICAgICBEQl9UWE4gKnR4biA9IE5VTEw7CiAgICAgLyogd2l0aCBkYm5hbWUgKi8KQEAgLTIxMjMsNDUgKzIzMzksMjIgQEAKICAgICAvKiB3aXRob3V0IGRibmFtZSAqLwogICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzX2Jhc2ljW10gPSB7CiAgICAgICAgICJmaWxlbmFtZSIsICJkYnR5cGUiLCAiZmxhZ3MiLCAibW9kZSIsICJ0eG4iLCBOVUxMfTsKLSNlbHNlCi0gICAgLyogd2l0aCBkYm5hbWUgKi8KLSAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0gewotICAgICAgICAiZmlsZW5hbWUiLCAiZGJuYW1lIiwgImRidHlwZSIsICJmbGFncyIsICJtb2RlIiwgTlVMTH07Ci0gICAgLyogd2l0aG91dCBkYm5hbWUgKi8KLSAgICBzdGF0aWMgY2hhcioga3duYW1lc19iYXNpY1tdID0gewotICAgICAgICAiZmlsZW5hbWUiLCAiZGJ0eXBlIiwgImZsYWdzIiwgIm1vZGUiLCBOVUxMfTsKLSNlbmRpZgogCi0jaWYgKERCVkVSID49IDQxKQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInp8emlpaU86b3BlbiIsIGt3bmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCAmZGJuYW1lLCAmdHlwZSwgJmZsYWdzLCAmbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHhub2JqKSkKLSNlbHNlCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAienx6aWlpOm9wZW4iLCBrd25hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlbmFtZSwgJmRibmFtZSwgJnR5cGUsICZmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbW9kZSkpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHR5cGUgPSBEQl9VTktOT1dOOyBmbGFncyA9IDA7IG1vZGUgPSAwNjYwOwogICAgICAgICBmaWxlbmFtZSA9IE5VTEw7IGRibmFtZSA9IE5VTEw7Ci0jaWYgKERCVkVSID49IDQxKQogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsInp8aWlpTzpvcGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3duYW1lc19iYXNpYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCAmdHlwZSwgJmZsYWdzLCAmbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR4bm9iaikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSNlbHNlCi0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywienxpaWk6b3BlbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bmFtZXNfYmFzaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlbmFtZSwgJnR5cGUsICZmbGFncywgJm1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKICAgICB9CiAKLSNpZiAoREJWRVIgPj0gNDEpCiAgICAgaWYgKCFjaGVja1R4bk9iaih0eG5vYmosICZ0eG4pKSByZXR1cm4gTlVMTDsKLSNlbmRpZgogCiAgICAgaWYgKE5VTEwgPT0gc2VsZi0+ZGIpIHsKICAgICAgICAgUHlPYmplY3QgKnQgPSBQeV9CdWlsZFZhbHVlKCIoaXMpIiwgMCwKQEAgLTIxNzMsMjQgKzIzNjYsMTcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0jaWYgKERCVkVSID49IDQxKQogICAgIGlmICh0eG4pIHsgIC8qIENhbid0IHVzZSAndHhub2JqJyBiZWNhdXNlIGNvdWxkIGJlICd0eG5vYmo9PVB5X05vbmUnICovCiAgICAgICAgIElOU0VSVF9JTl9ET1VCTEVfTElOS0VEX0xJU1RfVFhOKCgoREJUeG5PYmplY3QgKil0eG5vYmopLT5jaGlsZHJlbl9kYnMsc2VsZik7CiAgICAgICAgIHNlbGYtPnR4bj0oREJUeG5PYmplY3QgKil0eG5vYmo7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2VsZi0+dHhuPU5VTEw7CiAgICAgfQotI2Vsc2UKLSAgICBzZWxmLT50eG49TlVMTDsKLSNlbmRpZgogCiAgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOwotI2lmIChEQlZFUiA+PSA0MSkKICAgICBlcnIgPSBzZWxmLT5kYi0+b3BlbihzZWxmLT5kYiwgdHhuLCBmaWxlbmFtZSwgZGJuYW1lLCB0eXBlLCBmbGFncywgbW9kZSk7Ci0jZWxzZQotICAgIGVyciA9IHNlbGYtPmRiLT5vcGVuKHNlbGYtPmRiLCBmaWxlbmFtZSwgZGJuYW1lLCB0eXBlLCBmbGFncywgbW9kZSk7Ci0jZW5kaWYKICAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCiAgICAgaWYgKG1ha2VEQkVycm9yKGVycikpIHsKICAgICAgICAgUHlPYmplY3QgKmR1bW15OwogCkBAIC0yMzE5LDEzICsyNTA1LDc5IEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0NikKK3N0YXRpYyBQeU9iamVjdCoKK0RCX3NldF9wcmlvcml0eShEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVyciwgcHJpb3JpdHk7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTpzZXRfcHJpb3JpdHkiLCAmcHJpb3JpdHkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5zZXRfcHJpb3JpdHkoc2VsZi0+ZGIsIHByaW9yaXR5KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQl9nZXRfcHJpb3JpdHkoREJPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVyciA9IDA7CisgICAgREJfQ0FDSEVfUFJJT1JJVFkgcHJpb3JpdHk7CisKKyAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5nZXRfcHJpb3JpdHkoc2VsZi0+ZGIsICZwcmlvcml0eSk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhwcmlvcml0eSk7Cit9CisjZW5kaWYKKworc3RhdGljIFB5T2JqZWN0KgorREJfc2V0X3FfZXh0ZW50c2l6ZShEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgZXh0ZW50c2l6ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpOnNldF9xX2V4dGVudHNpemUiLCAmZXh0ZW50c2l6ZSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPnNldF9xX2V4dGVudHNpemUoc2VsZi0+ZGIsIGV4dGVudHNpemUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQl9nZXRfcV9leHRlbnRzaXplKERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnIgPSAwOworICAgIHVfaW50MzJfdCBleHRlbnRzaXplOworCisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0X3FfZXh0ZW50c2l6ZShzZWxmLT5kYiwgJmV4dGVudHNpemUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoZXh0ZW50c2l6ZSk7Cit9CisjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogREJfc2V0X2J0X21pbmtleShEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgaW50IGVyciwgbWlua2V5OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk6c2V0X2J0X21pbmtleSIsICZtaW5rZXkgKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTpzZXRfYnRfbWlua2V5IiwgJm1pbmtleSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CiAKQEAgLTIzMzYsNiArMjU4OCwyMyBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQl9nZXRfYnRfbWlua2V5KERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGJ0X21pbmtleTsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9idF9taW5rZXkoc2VsZi0+ZGIsICZidF9taW5rZXkpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoYnRfbWlua2V5KTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50CiBfZGVmYXVsdF9jbXAoY29uc3QgREJUICpsZWZ0S2V5LAogICAgICAgICAgICAgIGNvbnN0IERCVCAqcmlnaHRLZXkpCkBAIC0yNDkwLDYgKzI3NTksMjUgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJfZ2V0X2NhY2hlc2l6ZShEQk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBnYnl0ZXMsIGJ5dGVzOworICAgIGludCBuY2FjaGU7CisKKyAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5nZXRfY2FjaGVzaXplKHNlbGYtPmRiLCAmZ2J5dGVzLCAmYnl0ZXMsICZuY2FjaGUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpaSkiLCBnYnl0ZXMsIGJ5dGVzLCBuY2FjaGUpOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCX3NldF9mbGFncyhEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC0yNTA5LDYgKzI3OTcsMjIgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJfZ2V0X2ZsYWdzKERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGZsYWdzOworCisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0X2ZsYWdzKHNlbGYtPmRiLCAmZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoZmxhZ3MpOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCX3NldF9oX2ZmYWN0b3IoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtMjUyNiw2ICsyODMwLDIyIEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCX2dldF9oX2ZmYWN0b3IoREJPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgZmZhY3RvcjsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9oX2ZmYWN0b3Ioc2VsZi0+ZGIsICZmZmFjdG9yKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGZmYWN0b3IpOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCX3NldF9oX25lbGVtKERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTI1NDMsNiArMjg2MywyMiBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQl9nZXRfaF9uZWxlbShEQk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBuZWxlbTsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9oX25lbGVtKHNlbGYtPmRiLCAmbmVsZW0pOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcobmVsZW0pOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCX3NldF9sb3JkZXIoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtMjU2MCw2ICsyODk2LDIyIEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCX2dldF9sb3JkZXIoREJPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgbG9yZGVyOworCisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0X2xvcmRlcihzZWxmLT5kYiwgJmxvcmRlcik7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhsb3JkZXIpOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCX3NldF9wYWdlc2l6ZShEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC0yNTc3LDYgKzI5MjksMjIgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJfZ2V0X3BhZ2VzaXplKERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IHBhZ2VzaXplOworCisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0X3BhZ2VzaXplKHNlbGYtPmRiLCAmcGFnZXNpemUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcocGFnZXNpemUpOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCX3NldF9yZV9kZWxpbShEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC0yNTk5LDYgKzI5NjcsMjIgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJfZ2V0X3JlX2RlbGltKERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnIsIHJlX2RlbGltOworCisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0X3JlX2RlbGltKHNlbGYtPmRiLCAmcmVfZGVsaW0pOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcocmVfZGVsaW0pOworfQorI2VuZGlmCisKIHN0YXRpYyBQeU9iamVjdCoKIERCX3NldF9yZV9sZW4oREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewpAQCAtMjYxNSw2ICsyOTk5LDIyIEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCX2dldF9yZV9sZW4oREJPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgcmVfbGVuOworCisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0X3JlX2xlbihzZWxmLT5kYiwgJnJlX2xlbik7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhyZV9sZW4pOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCX3NldF9yZV9wYWQoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtMjYzNiw0MSArMzAzNiw1NSBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQl9nZXRfcmVfcGFkKERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnIsIHJlX3BhZDsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9yZV9wYWQoc2VsZi0+ZGIsICZyZV9wYWQpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcocmVfcGFkKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zZXRfcmVfc291cmNlKERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICBpbnQgZXJyOwotICAgIGNoYXIgKnJlX3NvdXJjZTsKKyAgICBjaGFyICpzb3VyY2U7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiczpzZXRfcmVfc291cmNlIiwgJnJlX3NvdXJjZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsInM6c2V0X3JlX3NvdXJjZSIsICZzb3VyY2UpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOwogCiAgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOwotICAgIGVyciA9IHNlbGYtPmRiLT5zZXRfcmVfc291cmNlKHNlbGYtPmRiLCByZV9zb3VyY2UpOworICAgIGVyciA9IHNlbGYtPmRiLT5zZXRfcmVfc291cmNlKHNlbGYtPmRiLCBzb3VyY2UpOwogICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CiAgICAgUkVUVVJOX0lGX0VSUigpOwogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKLQorI2lmIChEQlZFUiA+PSA0MikKIHN0YXRpYyBQeU9iamVjdCoKLURCX3NldF9xX2V4dGVudHNpemUoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorREJfZ2V0X3JlX3NvdXJjZShEQk9iamVjdCogc2VsZikKIHsKICAgICBpbnQgZXJyOwotICAgIGludCBleHRlbnRzaXplOworICAgIGNvbnN0IGNoYXIgKnNvdXJjZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpOnNldF9xX2V4dGVudHNpemUiLCAmZXh0ZW50c2l6ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CiAKICAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7Ci0gICAgZXJyID0gc2VsZi0+ZGItPnNldF9xX2V4dGVudHNpemUoc2VsZi0+ZGIsIGV4dGVudHNpemUpOworICAgIGVyciA9IHNlbGYtPmRiLT5nZXRfcmVfc291cmNlKHNlbGYtPmRiLCAmc291cmNlKTsKICAgICBNWURCX0VORF9BTExPV19USFJFQURTOwogICAgIFJFVFVSTl9JRl9FUlIoKTsKLSAgICBSRVRVUk5fTk9ORSgpOworICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcoc291cmNlKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zdGF0KERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKQEAgLTI3MDcsOCArMzEyMSw2IEBACiAgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKICAgICBSRVRVUk5fSUZfRVJSKCk7CiAKLSAgICBzZWxmLT5oYXZlU3RhdCA9IDE7Ci0KICAgICAvKiBUdXJuIHRoZSBzdGF0IHN0cnVjdHVyZSBpbnRvIGEgZGljdGlvbmFyeSAqLwogICAgIHR5cGUgPSBfREJfZ2V0X3R5cGUoc2VsZik7CiAgICAgaWYgKCh0eXBlID09IC0xKSB8fCAoKGQgPSBQeURpY3RfTmV3KCkpID09IE5VTEwpKSB7CkBAIC0yNzMwLDkgKzMxNDIsNiBAQAogICAgICAgICBNQUtFX0hBU0hfRU5UUlkocGFnZWNudCk7CiAjZW5kaWYKICAgICAgICAgTUFLRV9IQVNIX0VOVFJZKHBhZ2VzaXplKTsKLSNpZiAoREJWRVIgPCA0MSkKLSAgICAgICAgTUFLRV9IQVNIX0VOVFJZKG5lbGVtKTsKLSNlbmRpZgogICAgICAgICBNQUtFX0hBU0hfRU5UUlkoZmZhY3Rvcik7CiAgICAgICAgIE1BS0VfSEFTSF9FTlRSWShidWNrZXRzKTsKICAgICAgICAgTUFLRV9IQVNIX0VOVFJZKGZyZWUpOwpAQCAtMjc3OSw5ICszMTg4LDcgQEAKICAgICAgICAgTUFLRV9RVUVVRV9FTlRSWShua2V5cyk7CiAgICAgICAgIE1BS0VfUVVFVUVfRU5UUlkobmRhdGEpOwogICAgICAgICBNQUtFX1FVRVVFX0VOVFJZKHBhZ2VzaXplKTsKLSNpZiAoREJWRVIgPj0gNDEpCiAgICAgICAgIE1BS0VfUVVFVUVfRU5UUlkoZXh0ZW50c2l6ZSk7Ci0jZW5kaWYKICAgICAgICAgTUFLRV9RVUVVRV9FTlRSWShwYWdlcyk7CiAgICAgICAgIE1BS0VfUVVFVUVfRU5UUlkocmVfbGVuKTsKICAgICAgICAgTUFLRV9RVUVVRV9FTlRSWShyZV9wYWQpOwpAQCAtMjgwNyw2ICszMjE0LDI5IEBACiAgICAgcmV0dXJuIGQ7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDMpCitzdGF0aWMgUHlPYmplY3QqCitEQl9zdGF0X3ByaW50KERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBmbGFncz0wOworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ICJmbGFncyIsIE5VTEwgfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpOnN0YXRfcHJpbnQiLAorICAgICAgICAgICAgICAgIGt3bmFtZXMsICZmbGFncykpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPnN0YXRfcHJpbnQoc2VsZi0+ZGIsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorI2VuZGlmCisKKwogc3RhdGljIFB5T2JqZWN0KgogREJfc3luYyhEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CkBAIC0yODkyLDcgKzMzMjIsNyBAQAogICAgICAgICBQeU9iamVjdCAqZXJyb3I7CiAKICAgICAgICAgZXJyb3I9REJfY2xvc2VfaW50ZXJuYWwoc2VsZiwgMCwgMSk7Ci0gICAgICAgIGlmIChlcnJvciApIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CiAgICAgIH0KQEAgLTI5MzAsNyArMzM2MCw2IEBACiAgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhvbGRWYWx1ZSk7CiB9CiAKLSNpZiAoREJWRVIgPj0gNDEpCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zZXRfZW5jcnlwdChEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7CkBAIC0yOTUxLDcgKzMzODAsMjQgQEAKICAgICBSRVRVUk5fSUZfRVJSKCk7CiAgICAgUkVUVVJOX05PTkUoKTsKIH0KLSNlbmRpZiAvKiBEQlZFUiA+PSA0MSAqLworCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJfZ2V0X2VuY3J5cHRfZmxhZ3MoREJPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgZmxhZ3M7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9lbmNyeXB0X2ZsYWdzKHNlbGYtPmRiLCAmZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGZsYWdzKTsKK30KKyNlbmRpZgorCiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjk2MSw3ICszNDA3LDYgQEAKIHsKICAgICBpbnQgZXJyOwogICAgIFB5X3NzaXplX3Qgc2l6ZSA9IDA7Ci0gICAgaW50IGZsYWdzID0gMDsKICAgICB2b2lkKiBzcDsKICAgICBEQk9iamVjdCogc2VsZiA9IChEQk9iamVjdCopX3NlbGY7CiAKQEAgLTI5NzQsNDEgKzM0MTksMjEgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmIChzZWxmLT5oYXZlU3RhdCkgeyAgLyogSGFzIHRoZSBzdGF0IGZ1bmN0aW9uIGJlZW4gY2FsbGVkIHJlY2VudGx5PyAgSWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvLCB3ZSBjYW4gdXNlIHRoZSBjYWNoZWQgdmFsdWUuICovCi0gICAgICAgIGZsYWdzID0gREJfRkFTVF9TVEFUOwotICAgIH0KLQogICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKLXJlZG9fc3RhdF9mb3JfbGVuZ3RoOgogI2lmIChEQlZFUiA+PSA0MykKLSAgICBlcnIgPSBzZWxmLT5kYi0+c3RhdChzZWxmLT5kYiwgLyp0eG5pZCovIE5VTEwsICZzcCwgZmxhZ3MpOworICAgIGVyciA9IHNlbGYtPmRiLT5zdGF0KHNlbGYtPmRiLCAvKnR4bmlkKi8gTlVMTCwgJnNwLCAwKTsKICNlbHNlCi0gICAgZXJyID0gc2VsZi0+ZGItPnN0YXQoc2VsZi0+ZGIsICZzcCwgZmxhZ3MpOworICAgIGVyciA9IHNlbGYtPmRiLT5zdGF0KHNlbGYtPmRiLCAmc3AsIDApOwogI2VuZGlmCisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKIAogICAgIC8qIEFsbCB0aGUgc3RhdCBzdHJ1Y3R1cmVzIGhhdmUgbWF0Y2hpbmcgZmllbGRzIHVwdG8gdGhlIG5kYXRhIGZpZWxkLAogICAgICAgIHNvIHdlIGNhbiB1c2UgYW55IG9mIHRoZW0gZm9yIHRoZSB0eXBlIGNhc3QgKi8KICAgICBzaXplID0gKChEQl9CVFJFRV9TVEFUKilzcCktPmJ0X25kYXRhOwogCi0gICAgLyogQSBzaXplIG9mIDAgY291bGQgbWVhbiB0aGF0IEJlcmtlbGV5IERCIG5vIGxvbmdlciBoYWQgdGhlIHN0YXQgdmFsdWVzIGNhY2hlZC4KLSAgICAgKiByZWRvIGEgZnVsbCBzdGF0IHRvIG1ha2Ugc3VyZS4KLSAgICAgKiAgIEZpeGVzIFNGIHB5dGhvbiBidWcgMTQ5MzMyMiwgcHlic2RkYiBidWcgMTE4NDAxMgotICAgICAqLwotICAgIGlmIChzaXplID09IDAgJiYgKGZsYWdzICYgREJfRkFTVF9TVEFUKSkgewotICAgICAgICBmbGFncyA9IDA7Ci0gICAgICAgIGlmICghZXJyKQotICAgICAgICAgICAgZnJlZShzcCk7Ci0gICAgICAgIGdvdG8gcmVkb19zdGF0X2Zvcl9sZW5ndGg7Ci0gICAgfQotCi0gICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKLQogICAgIGlmIChlcnIpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHNlbGYtPmhhdmVTdGF0ID0gMTsKLQogICAgIGZyZWUoc3ApOwogICAgIHJldHVybiBzaXplOwogfQpAQCAtMzA5NywxOCArMzUyMiwxMSBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCoKLURCX2hhc19rZXkoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQorX0RCX2hhc19rZXkoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBrZXlvYmosIFB5T2JqZWN0KiB0eG5vYmopCiB7CiAgICAgaW50IGVycjsKLSAgICBQeU9iamVjdCoga2V5b2JqOwotICAgIERCVCBrZXksIGRhdGE7Ci0gICAgUHlPYmplY3QqIHR4bm9iaiA9IE5VTEw7CisgICAgREJUIGtleTsKICAgICBEQl9UWE4gKnR4biA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsia2V5IiwidHhuIiwgTlVMTH07Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfE86aGFzX2tleSIsIGt3bmFtZXMsCi0gICAgICAgICAgICAgICAgJmtleW9iaiwgJnR4bm9iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKICAgICBpZiAoIW1ha2Vfa2V5X2RidChzZWxmLCBrZXlvYmosICZrZXksIE5VTEwpKQpAQCAtMzExOCwyOCArMzUzNiw3NyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyNpZiAoREJWRVIgPCA0NikKICAgICAvKiBUaGlzIGNhdXNlcyBEQl9CVUZGRVJfU01BTEwgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgZGIgaGFzIHRoZSBrZXkgYmVjYXVzZQogICAgICAgIGl0IGhhcyBhIHJlY29yZCBidXQgY2FuJ3QgYWxsb2NhdGUgYSBidWZmZXIgZm9yIHRoZSBkYXRhLiAgVGhpcyBzYXZlcwogICAgICAgIGhhdmluZyB0byBkZWFsIHdpdGggZGF0YSB3ZSB3b24ndCBiZSB1c2luZy4KICAgICAgKi8KLSAgICBDTEVBUl9EQlQoZGF0YSk7Ci0gICAgZGF0YS5mbGFncyA9IERCX0RCVF9VU0VSTUVNOworICAgIHsKKyAgICAgICAgREJUIGRhdGEgOworICAgICAgICBDTEVBUl9EQlQoZGF0YSk7CisgICAgICAgIGRhdGEuZmxhZ3MgPSBEQl9EQlRfVVNFUk1FTTsKIAorICAgICAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgICAgIGVyciA9IHNlbGYtPmRiLT5nZXQoc2VsZi0+ZGIsIHR4biwgJmtleSwgJmRhdGEsIDApOworICAgICAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIH0KKyNlbHNlCiAgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOwotICAgIGVyciA9IHNlbGYtPmRiLT5nZXQoc2VsZi0+ZGIsIHR4biwgJmtleSwgJmRhdGEsIDApOworICAgIGVyciA9IHNlbGYtPmRiLT5leGlzdHMoc2VsZi0+ZGIsIHR4biwgJmtleSwgMCk7CiAgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyNlbmRpZgorCiAgICAgRlJFRV9EQlQoa2V5KTsKIAorICAgIC8qCisgICAgKiogREJfQlVGRkVSX1NNQUxMIGlzIG9ubHkgdXNlZCBpZiB3ZSB1c2UgImdldCIuCisgICAgKiogV2UgY2FuIGRyb3AgaXQgd2hlbiB3ZSBvbmx5IHVzZSAiZXhpc3RzIiwKKyAgICAqKiB3aGVuIHdlIGRyb3Agc3Vwb3J0IGZvciBCZXJrZWxleSBEQiA8IDQuNi4KKyAgICAqLwogICAgIGlmIChlcnIgPT0gREJfQlVGRkVSX1NNQUxMIHx8IGVyciA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoMSk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKKyAgICAgICAgcmV0dXJuIFB5X1RydWU7CiAgICAgfSBlbHNlIGlmIChlcnIgPT0gREJfTk9URk9VTkQgfHwgZXJyID09IERCX0tFWUVNUFRZKSB7Ci0gICAgICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoMCk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9GYWxzZSk7CisgICAgICAgIHJldHVybiBQeV9GYWxzZTsKICAgICB9CiAKICAgICBtYWtlREJFcnJvcihlcnIpOwogICAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMgUHlPYmplY3QqCitEQl9oYXNfa2V5KERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK3sKKyAgICBQeU9iamVjdCoga2V5b2JqOworICAgIFB5T2JqZWN0KiB0eG5vYmogPSBOVUxMOworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ImtleSIsInR4biIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xPOmhhc19rZXkiLCBrd25hbWVzLAorICAgICAgICAgICAgICAgICZrZXlvYmosICZ0eG5vYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBfREJfaGFzX2tleShzZWxmLCBrZXlvYmosIHR4bm9iaik7Cit9CisKKworc3RhdGljIGludCBEQl9jb250YWlucyhEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGtleW9iaikKK3sKKyAgICBQeU9iamVjdCogcmVzdWx0OworICAgIGludCByZXN1bHQyID0gMDsKKworICAgIHJlc3VsdCA9IF9EQl9oYXNfa2V5KHNlbGYsIGtleW9iaiwgTlVMTCkgOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7IC8qIFByb3BhZ3VlIGV4Y2VwdGlvbiAqLworICAgIH0KKyAgICBpZiAocmVzdWx0ICE9IFB5X0ZhbHNlKSB7CisgICAgICAgIHJlc3VsdDIgPSAxOworICAgIH0KKworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQyOworfQorCiAKICNkZWZpbmUgX0tFWVNfTElTVCAgICAgIDEKICNkZWZpbmUgX1ZBTFVFU19MSVNUICAgIDIKQEAgLTMyOTMsNiArMzc2MCwxMTYgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBEQkxvZ0N1cnNvciBtZXRob2RzICovCisKKworc3RhdGljIFB5T2JqZWN0KgorREJMb2dDdXJzb3JfY2xvc2VfaW50ZXJuYWwoREJMb2dDdXJzb3JPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVyciA9IDA7CisKKyAgICBpZiAoc2VsZi0+bG9nYyAhPSBOVUxMKSB7CisgICAgICAgIEVYVFJBQ1RfRlJPTV9ET1VCTEVfTElOS0VEX0xJU1Qoc2VsZik7CisKKyAgICAgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgICAgICBlcnIgPSBzZWxmLT5sb2djLT5jbG9zZShzZWxmLT5sb2djLCAwKTsKKyAgICAgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICAgICAgc2VsZi0+bG9nYyA9IE5VTEw7CisgICAgfQorICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkxvZ0N1cnNvcl9jbG9zZShEQkxvZ0N1cnNvck9iamVjdCogc2VsZikKK3sKKyAgICByZXR1cm4gREJMb2dDdXJzb3JfY2xvc2VfaW50ZXJuYWwoc2VsZik7Cit9CisKKworc3RhdGljIFB5T2JqZWN0KgorX0RCTG9nQ3Vyc29yX2dldChEQkxvZ0N1cnNvck9iamVjdCogc2VsZiwgaW50IGZsYWcsIERCX0xTTiAqbHNuMikKK3sKKyAgICBpbnQgZXJyOworICAgIERCVCBkYXRhOworICAgIERCX0xTTiBsc24gPSB7MCwgMH07CisgICAgUHlPYmplY3QgKmR1bW15LCAqcmV0dmFsOworCisgICAgQ0xFQVJfREJUKGRhdGEpOworICAgIGRhdGEuZmxhZ3MgPSBEQl9EQlRfTUFMTE9DOyAvKiBCZXJrZWxleSBEQiBtdXN0IGRvIHRoZSBtYWxsb2MgKi8KKworICAgIENIRUNLX0xPR0NVUlNPUl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgaWYgKGxzbjIpCisgICAgICAgIGxzbiA9ICpsc24yOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmxvZ2MtPmdldChzZWxmLT5sb2djLCAmbHNuLCAmZGF0YSwgZmxhZyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIGlmIChlcnIgPT0gREJfTk9URk9VTkQpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR2YWwgPSBQeV9Ob25lOworICAgIH0KKyAgICBlbHNlIGlmIChtYWtlREJFcnJvcihlcnIpKSB7CisgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR2YWwgPSBkdW1teSA9IEJ1aWxkVmFsdWVfUyhkYXRhLmRhdGEsIGRhdGEuc2l6ZSk7CisgICAgICAgIGlmIChkdW1teSkgeworICAgICAgICAgICAgcmV0dmFsID0gUHlfQnVpbGRWYWx1ZSgiKGlpKU8iLCBsc24uZmlsZSwgbHNuLm9mZnNldCwgZHVtbXkpOworICAgICAgICAgICAgUHlfREVDUkVGKGR1bW15KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEZSRUVfREJUKGRhdGEpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCTG9nQ3Vyc29yX2N1cnJlbnQoREJMb2dDdXJzb3JPYmplY3QqIHNlbGYpCit7CisgICAgcmV0dXJuIF9EQkxvZ0N1cnNvcl9nZXQoc2VsZiwgREJfQ1VSUkVOVCwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCTG9nQ3Vyc29yX2ZpcnN0KERCTG9nQ3Vyc29yT2JqZWN0KiBzZWxmKQoreworICAgIHJldHVybiBfREJMb2dDdXJzb3JfZ2V0KHNlbGYsIERCX0ZJUlNULCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJMb2dDdXJzb3JfbGFzdChEQkxvZ0N1cnNvck9iamVjdCogc2VsZikKK3sKKyAgICByZXR1cm4gX0RCTG9nQ3Vyc29yX2dldChzZWxmLCBEQl9MQVNULCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJMb2dDdXJzb3JfbmV4dChEQkxvZ0N1cnNvck9iamVjdCogc2VsZikKK3sKKyAgICByZXR1cm4gX0RCTG9nQ3Vyc29yX2dldChzZWxmLCBEQl9ORVhULCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJMb2dDdXJzb3JfcHJldihEQkxvZ0N1cnNvck9iamVjdCogc2VsZikKK3sKKyAgICByZXR1cm4gX0RCTG9nQ3Vyc29yX2dldChzZWxmLCBEQl9QUkVWLCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJMb2dDdXJzb3Jfc2V0KERCTG9nQ3Vyc29yT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBEQl9MU04gbHNuOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIoaWkpOnNldCIsICZsc24uZmlsZSwgJmxzbi5vZmZzZXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBfREJMb2dDdXJzb3JfZ2V0KHNlbGYsIERCX1NFVCwgJmxzbik7Cit9CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIERCQ3Vyc29yIG1ldGhvZHMgKi8KIAogCkBAIC0zMzY3LDcgKzM5NDQsNiBAQAogICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CiAgICAgUkVUVVJOX0lGX0VSUigpOwogCi0gICAgc2VsZi0+bXlkYi0+aGF2ZVN0YXQgPSAwOwogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKQEAgLTM2NTUsNyArNDIzMSw2IEBACiAgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKICAgICBGUkVFX0RCVChrZXkpOyAgLyogJ21ha2Vfa2V5X2RidCcgY291bGQgZG8gYSAnbWFsbG9jJyAqLwogICAgIFJFVFVSTl9JRl9FUlIoKTsKLSAgICBzZWxmLT5teWRiLT5oYXZlU3RhdCA9IDA7CiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIApAQCAtMzk3MCw2ICs0NTQ1LDEzIEBACiAgICAgcmV0dXJuIF9EQkN1cnNvcl9nZXQoc2VsZixEQl9ORVhUX05PRFVQLGFyZ3Msa3dhcmdzLCJ8aWlpOm5leHRfbm9kdXAiKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0NikKK3N0YXRpYyBQeU9iamVjdCoKK0RCQ19wcmV2X2R1cChEQkN1cnNvck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgcmV0dXJuIF9EQkN1cnNvcl9nZXQoc2VsZixEQl9QUkVWX0RVUCxhcmdzLGt3YXJncywifGlpaTpwcmV2X2R1cCIpOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCQ19wcmV2X25vZHVwKERCQ3Vyc29yT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QgKmt3YXJncykKQEAgLTQwMTIsNiArNDU5NCw0NCBAQAogfQogCiAKKyNpZiAoREJWRVIgPj0gNDYpCitzdGF0aWMgUHlPYmplY3QqCitEQkNfc2V0X3ByaW9yaXR5KERCQ3Vyc29yT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK3sKKyAgICBpbnQgZXJyLCBwcmlvcml0eTsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyAicHJpb3JpdHkiLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpOnNldF9wcmlvcml0eSIsIGt3bmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByaW9yaXR5KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBDSEVDS19DVVJTT1JfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYmMtPnNldF9wcmlvcml0eShzZWxmLT5kYmMsIHByaW9yaXR5KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCisKK3N0YXRpYyBQeU9iamVjdCoKK0RCQ19nZXRfcHJpb3JpdHkoREJDdXJzb3JPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICBEQl9DQUNIRV9QUklPUklUWSBwcmlvcml0eTsKKworICAgIENIRUNLX0NVUlNPUl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiYy0+Z2V0X3ByaW9yaXR5KHNlbGYtPmRiYywgJnByaW9yaXR5KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKHByaW9yaXR5KTsKK30KKyNlbmRpZgorCisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBEQkVudiBtZXRob2RzICovCkBAIC00MDI1LDEyICs0NjQ1LDE2IEBACiAKICAgICBpZiAoIXNlbGYtPmNsb3NlZCkgeyAgICAgIC8qIERvbid0IGNsb3NlIG1vcmUgdGhhbiBvbmNlICovCiAgICAgICAgIHdoaWxlKHNlbGYtPmNoaWxkcmVuX3R4bnMpIHsKLSAgICAgICAgICBkdW1teT1EQlR4bl9hYm9ydF9kaXNjYXJkX2ludGVybmFsKHNlbGYtPmNoaWxkcmVuX3R4bnMsMCk7Ci0gICAgICAgICAgUHlfWERFQ1JFRihkdW1teSk7CisgICAgICAgICAgICBkdW1teSA9IERCVHhuX2Fib3J0X2Rpc2NhcmRfaW50ZXJuYWwoc2VsZi0+Y2hpbGRyZW5fdHhucywgMCk7CisgICAgICAgICAgICBQeV9YREVDUkVGKGR1bW15KTsKICAgICAgICAgfQogICAgICAgICB3aGlsZShzZWxmLT5jaGlsZHJlbl9kYnMpIHsKLSAgICAgICAgICBkdW1teT1EQl9jbG9zZV9pbnRlcm5hbChzZWxmLT5jaGlsZHJlbl9kYnMsIDAsIDApOwotICAgICAgICAgIFB5X1hERUNSRUYoZHVtbXkpOworICAgICAgICAgICAgZHVtbXkgPSBEQl9jbG9zZV9pbnRlcm5hbChzZWxmLT5jaGlsZHJlbl9kYnMsIDAsIDApOworICAgICAgICAgICAgUHlfWERFQ1JFRihkdW1teSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoc2VsZi0+Y2hpbGRyZW5fbG9nY3Vyc29ycykgeworICAgICAgICAgICAgZHVtbXkgPSBEQkxvZ0N1cnNvcl9jbG9zZV9pbnRlcm5hbChzZWxmLT5jaGlsZHJlbl9sb2djdXJzb3JzKTsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoZHVtbXkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MDgwLDYgKzQ3MDQsMTk1IEBACiAKIAogc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbWVtcF9zdGF0KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIERCX01QT09MX1NUQVQgKmdzcDsKKyAgICBEQl9NUE9PTF9GU1RBVCAqKmZzcCwgKipmc3AyOworICAgIFB5T2JqZWN0KiBkID0gTlVMTCwgKmQyLCAqZDMsICpyOworICAgIHVfaW50MzJfdCBmbGFncyA9IDA7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZsYWdzIiwgTlVMTCB9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGk6bWVtcF9zdGF0IiwKKyAgICAgICAgICAgICAgICBrd25hbWVzLCAmZmxhZ3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bWVtcF9zdGF0KHNlbGYtPmRiX2VudiwgJmdzcCwgJmZzcCwgZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworCisgICAgLyogVHVybiB0aGUgc3RhdCBzdHJ1Y3R1cmUgaW50byBhIGRpY3Rpb25hcnkgKi8KKyAgICBkID0gUHlEaWN0X05ldygpOworICAgIGlmIChkID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGdzcCkKKyAgICAgICAgICAgIGZyZWUoZ3NwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjZGVmaW5lIE1BS0VfRU5UUlkobmFtZSkgIF9hZGRJbnRUb0RpY3QoZCwgI25hbWUsIGdzcC0+c3RfIyNuYW1lKQorCisgICAgTUFLRV9FTlRSWShnYnl0ZXMpOworICAgIE1BS0VfRU5UUlkobmNhY2hlKTsKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgTUFLRV9FTlRSWShtYXhfbmNhY2hlKTsKKyNlbmRpZgorICAgIE1BS0VfRU5UUlkocmVnc2l6ZSk7CisjaWYgKERCVkVSID49IDQzKQorICAgIE1BS0VfRU5UUlkobW1hcHNpemUpOworICAgIE1BS0VfRU5UUlkobWF4b3BlbmZkKTsKKyAgICBNQUtFX0VOVFJZKG1heHdyaXRlKTsKKyAgICBNQUtFX0VOVFJZKG1heHdyaXRlX3NsZWVwKTsKKyNlbmRpZgorICAgIE1BS0VfRU5UUlkobWFwKTsKKyAgICBNQUtFX0VOVFJZKGNhY2hlX2hpdCk7CisgICAgTUFLRV9FTlRSWShjYWNoZV9taXNzKTsKKyAgICBNQUtFX0VOVFJZKHBhZ2VfY3JlYXRlKTsKKyAgICBNQUtFX0VOVFJZKHBhZ2VfaW4pOworICAgIE1BS0VfRU5UUlkocGFnZV9vdXQpOworICAgIE1BS0VfRU5UUlkocm9fZXZpY3QpOworICAgIE1BS0VfRU5UUlkocndfZXZpY3QpOworICAgIE1BS0VfRU5UUlkocGFnZV90cmlja2xlKTsKKyAgICBNQUtFX0VOVFJZKHBhZ2VzKTsKKyAgICBNQUtFX0VOVFJZKHBhZ2VfY2xlYW4pOworICAgIE1BS0VfRU5UUlkocGFnZV9kaXJ0eSk7CisgICAgTUFLRV9FTlRSWShoYXNoX2J1Y2tldHMpOworICAgIE1BS0VfRU5UUlkoaGFzaF9zZWFyY2hlcyk7CisgICAgTUFLRV9FTlRSWShoYXNoX2xvbmdlc3QpOworICAgIE1BS0VfRU5UUlkoaGFzaF9leGFtaW5lZCk7CisgICAgTUFLRV9FTlRSWShoYXNoX25vd2FpdCk7CisgICAgTUFLRV9FTlRSWShoYXNoX3dhaXQpOworI2lmIChEQlZFUiA+PSA0NSkKKyAgICBNQUtFX0VOVFJZKGhhc2hfbWF4X25vd2FpdCk7CisjZW5kaWYKKyAgICBNQUtFX0VOVFJZKGhhc2hfbWF4X3dhaXQpOworICAgIE1BS0VfRU5UUlkocmVnaW9uX3dhaXQpOworICAgIE1BS0VfRU5UUlkocmVnaW9uX25vd2FpdCk7CisjaWYgKERCVkVSID49IDQ1KQorICAgIE1BS0VfRU5UUlkobXZjY19mcm96ZW4pOworICAgIE1BS0VfRU5UUlkobXZjY190aGF3ZWQpOworICAgIE1BS0VfRU5UUlkobXZjY19mcmVlZCk7CisjZW5kaWYKKyAgICBNQUtFX0VOVFJZKGFsbG9jKTsKKyAgICBNQUtFX0VOVFJZKGFsbG9jX2J1Y2tldHMpOworICAgIE1BS0VfRU5UUlkoYWxsb2NfbWF4X2J1Y2tldHMpOworICAgIE1BS0VfRU5UUlkoYWxsb2NfcGFnZXMpOworICAgIE1BS0VfRU5UUlkoYWxsb2NfbWF4X3BhZ2VzKTsKKyNpZiAoREJWRVIgPj0gNDUpCisgICAgTUFLRV9FTlRSWShpb193YWl0KTsKKyNlbmRpZgorI2lmIChEQlZFUiA+PSA0OCkKKyAgICBNQUtFX0VOVFJZKHN5bmNfaW50ZXJydXB0ZWQpOworI2VuZGlmCisKKyN1bmRlZiBNQUtFX0VOVFJZCisgICAgZnJlZShnc3ApOworCisgICAgZDIgPSBQeURpY3RfTmV3KCk7CisgICAgaWYgKGQyID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGQpOworICAgICAgICBpZiAoZnNwKQorICAgICAgICAgICAgZnJlZShmc3ApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZGVmaW5lIE1BS0VfRU5UUlkobmFtZSkgIF9hZGRJbnRUb0RpY3QoZDMsICNuYW1lLCAoKmZzcDIpLT5zdF8jI25hbWUpCisgICAgZm9yKGZzcDI9ZnNwOypmc3AyOyBmc3AyKyspIHsKKyAgICAgICAgZDMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgIGlmIChkMyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZDIpOworICAgICAgICAgICAgaWYgKGZzcCkKKyAgICAgICAgICAgICAgICBmcmVlKGZzcCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBNQUtFX0VOVFJZKHBhZ2VzaXplKTsKKyAgICAgICAgTUFLRV9FTlRSWShjYWNoZV9oaXQpOworICAgICAgICBNQUtFX0VOVFJZKGNhY2hlX21pc3MpOworICAgICAgICBNQUtFX0VOVFJZKG1hcCk7CisgICAgICAgIE1BS0VfRU5UUlkocGFnZV9jcmVhdGUpOworICAgICAgICBNQUtFX0VOVFJZKHBhZ2VfaW4pOworICAgICAgICBNQUtFX0VOVFJZKHBhZ2Vfb3V0KTsKKyAgICAgICAgaWYoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZDIsICgqZnNwMiktPmZpbGVfbmFtZSwgZDMpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZDIpOworICAgICAgICAgICAgUHlfREVDUkVGKGQzKTsKKyAgICAgICAgICAgIGlmIChmc3ApCisgICAgICAgICAgICAgICAgZnJlZShmc3ApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGQzKTsKKyAgICB9CisKKyN1bmRlZiBNQUtFX0VOVFJZCisgICAgZnJlZShmc3ApOworCisgICAgciA9IFB5X0J1aWxkVmFsdWUoIihPTykiLCBkLCBkMik7CisgICAgUHlfREVDUkVGKGQpOworICAgIFB5X0RFQ1JFRihkMik7CisgICAgcmV0dXJuIHI7Cit9CisKKyNpZiAoREJWRVIgPj0gNDMpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9tZW1wX3N0YXRfcHJpbnQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IGZsYWdzPTA7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZsYWdzIiwgTlVMTCB9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGk6bWVtcF9zdGF0X3ByaW50IiwKKyAgICAgICAgICAgICAgICBrd25hbWVzLCAmZmxhZ3MpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPm1lbXBfc3RhdF9wcmludChzZWxmLT5kYl9lbnYsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorI2VuZGlmCisKKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbWVtcF90cmlja2xlKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyLCBwZXJjZW50LCBud3JvdGVwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOm1lbXBfdHJpY2tsZSIsICZwZXJjZW50KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bWVtcF90cmlja2xlKHNlbGYtPmRiX2VudiwgcGVyY2VudCwgJm53cm90ZXApOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcobndyb3RlcCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X21lbXBfc3luYyhEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBEQl9MU04gbHNuID0gezAsIDB9OworICAgIERCX0xTTiAqbHNuX3AgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8KGlpKTptZW1wX3N5bmMiLCAmbHNuLmZpbGUsICZsc24ub2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKChsc24uZmlsZSE9MCkgfHwgKGxzbi5vZmZzZXQhPTApKSB7CisgICAgICAgIGxzbl9wID0gJmxzbjsKKyAgICB9CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bWVtcF9zeW5jKHNlbGYtPmRiX2VudiwgbHNuX3ApOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKIERCRW52X3JlbW92ZShEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgaW50IGVyciwgZmxhZ3M9MDsKQEAgLTQwOTUsNyArNDkwOCw2IEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAotI2lmIChEQlZFUiA+PSA0MSkKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X2RicmVtb3ZlKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKQEAgLTQxNTIsNiArNDk2NCw4IEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorCisKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3NldF9lbmNyeXB0KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKQEAgLTQxNzIsNyArNDk4Niw0NyBAQAogICAgIFJFVFVSTl9JRl9FUlIoKTsKICAgICBSRVRVUk5fTk9ORSgpOwogfQotI2VuZGlmIC8qIERCVkVSID49IDQxICovCisKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfZW5jcnlwdF9mbGFncyhEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBmbGFnczsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X2VuY3J5cHRfZmxhZ3Moc2VsZi0+ZGJfZW52LCAmZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGZsYWdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X3RpbWVvdXQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IGZsYWc7CisgICAgdV9pbnQzMl90IHRpbWVvdXQ7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsiZmxhZyIsIE5VTEwgfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImk6Z2V0X3RpbWVvdXQiLCBrd25hbWVzLAorICAgICAgICAgICAgICAgICZmbGFnKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfdGltZW91dChzZWxmLT5kYl9lbnYsICZ0aW1lb3V0LCBmbGFnKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKHRpbWVvdXQpOworfQorI2VuZGlmCisKIAogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X3RpbWVvdXQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQpAQCAtNDIxMCw2ICs1MDY0LDk1IEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9zaG1fa2V5KERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgbG9uZyBzaG1fa2V5OworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfc2htX2tleShzZWxmLT5kYl9lbnYsICZzaG1fa2V5KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworCisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhzaG1fa2V5KTsKK30KKyNlbmRpZgorCisjaWYgKERCVkVSID49IDQ2KQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfc2V0X2NhY2hlX21heChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVyciwgZ2J5dGVzLCBieXRlczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6c2V0X2NhY2hlX21heCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZnYnl0ZXMsICZieXRlcykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+c2V0X2NhY2hlX21heChzZWxmLT5kYl9lbnYsIGdieXRlcywgYnl0ZXMpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9jYWNoZV9tYXgoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgZ2J5dGVzLCBieXRlczsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X2NhY2hlX21heChzZWxmLT5kYl9lbnYsICZnYnl0ZXMsICZieXRlcyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgZ2J5dGVzLCBieXRlcyk7Cit9CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3NldF90aHJlYWRfY291bnQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGNvdW50OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnNldF90aHJlYWRfY291bnQiLCAmY291bnQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnNldF90aHJlYWRfY291bnQoc2VsZi0+ZGJfZW52LCBjb3VudCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X3RocmVhZF9jb3VudChEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBjb3VudDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X3RocmVhZF9jb3VudChzZWxmLT5kYl9lbnYsICZjb3VudCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhjb3VudCk7Cit9CisjZW5kaWYKKwogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X2NhY2hlc2l6ZShEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CkBAIC00MjI3LDYgKzUxNzAsMjYgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X2NhY2hlc2l6ZShEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBnYnl0ZXMsIGJ5dGVzOworICAgIGludCBuY2FjaGU7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9jYWNoZXNpemUoc2VsZi0+ZGJfZW52LCAmZ2J5dGVzLCAmYnl0ZXMsICZuY2FjaGUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpaSkiLCBnYnl0ZXMsIGJ5dGVzLCBuY2FjaGUpOworfQorI2VuZGlmCisKIAogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X2ZsYWdzKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTQyNDUsNiArNTIwOCwyMiBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfZmxhZ3MoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgZmxhZ3M7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9mbGFncyhzZWxmLT5kYl9lbnYsICZmbGFncyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhmbGFncyk7Cit9CisjZW5kaWYKIAogI2lmIChEQlZFUiA+PSA0NykKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTQyNjMsOCArNTI0MiwxNjkgQEAKICAgICBSRVRVUk5fSUZfRVJSKCk7CiAgICAgUkVUVVJOX05PTkUoKTsKIH0KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbG9nX2dldF9jb25maWcoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnIsIGZsYWcsIG9ub2ZmOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmxvZ19nZXRfY29uZmlnIiwgJmZsYWcpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmxvZ19nZXRfY29uZmlnKHNlbGYtPmRiX2VudiwgZmxhZywgJm9ub2ZmKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKG9ub2ZmKTsKK30KICNlbmRpZiAvKiBEQlZFUiA+PSA0NyAqLwogCisjaWYgKERCVkVSID49IDQ0KQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbXV0ZXhfc2V0X21heChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6bXV0ZXhfc2V0X21heCIsICZ2YWx1ZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5tdXRleF9zZXRfbWF4KHNlbGYtPmRiX2VudiwgdmFsdWUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbXV0ZXhfZ2V0X21heChEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCB2YWx1ZTsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bXV0ZXhfZ2V0X21heChzZWxmLT5kYl9lbnYsICZ2YWx1ZSk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcodmFsdWUpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9tdXRleF9zZXRfYWxpZ24oREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IGFsaWduOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOm11dGV4X3NldF9hbGlnbiIsICZhbGlnbikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5tdXRleF9zZXRfYWxpZ24oc2VsZi0+ZGJfZW52LCBhbGlnbik7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9tdXRleF9nZXRfYWxpZ24oREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgYWxpZ247CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPm11dGV4X2dldF9hbGlnbihzZWxmLT5kYl9lbnYsICZhbGlnbik7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoYWxpZ24pOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9tdXRleF9zZXRfaW5jcmVtZW50KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBpbmNyZW1lbnQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6bXV0ZXhfc2V0X2luY3JlbWVudCIsICZpbmNyZW1lbnQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bXV0ZXhfc2V0X2luY3JlbWVudChzZWxmLT5kYl9lbnYsIGluY3JlbWVudCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9tdXRleF9nZXRfaW5jcmVtZW50KERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGluY3JlbWVudDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bXV0ZXhfZ2V0X2luY3JlbWVudChzZWxmLT5kYl9lbnYsICZpbmNyZW1lbnQpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGluY3JlbWVudCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X211dGV4X3NldF90YXNfc3BpbnMoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IHRhc19zcGluczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTptdXRleF9zZXRfdGFzX3NwaW5zIiwgJnRhc19zcGlucykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5tdXRleF9zZXRfdGFzX3NwaW5zKHNlbGYtPmRiX2VudiwgdGFzX3NwaW5zKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X211dGV4X2dldF90YXNfc3BpbnMoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgdGFzX3NwaW5zOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5tdXRleF9nZXRfdGFzX3NwaW5zKHNlbGYtPmRiX2VudiwgJnRhc19zcGlucyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcodGFzX3NwaW5zKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9zZXRfZGF0YV9kaXIoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtNDI4Myw2ICs1NDIzLDc5IEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9kYXRhX2RpcnMoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICBQeU9iamVjdCAqdHVwbGU7CisgICAgUHlPYmplY3QgKml0ZW07CisgICAgY29uc3QgY2hhciAqKmRpcnBwOworICAgIGludCBzaXplLCBpOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfZGF0YV9kaXJzKHNlbGYtPmRiX2VudiwgJmRpcnBwKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworCisgICAgLyoKKyAgICAqKiBDYWxjdWxhdGUgc2l6ZS4gUHl0aG9uIEMgQVBJCisgICAgKiogYWN0dWFsbHkgYWxsb3dzIGZvciB0dXBsZSByZXNpemluZywKKyAgICAqKiBidXQgdGhpcyBpcyBzaW1wbGUgZW5vdWdoLgorICAgICovCisgICAgZm9yIChzaXplPTA7ICooZGlycHArc2l6ZSkgOyBzaXplKyspOworCisgICAgdHVwbGUgPSBQeVR1cGxlX05ldyhzaXplKTsKKyAgICBpZiAoIXR1cGxlKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaT0wOyBpPHNpemU7IGkrKykgeworICAgICAgICBpdGVtID0gUHlCeXRlc19Gcm9tU3RyaW5nICgqKGRpcnBwK2kpKTsKKyAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgICAgIHR1cGxlID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwbGUsIGksIGl0ZW0pOworICAgIH0KKyAgICByZXR1cm4gdHVwbGU7Cit9CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NCkKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3NldF9sZ19maWxlbW9kZShEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVyciwgZmlsZW1vZGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6c2V0X2xnX2ZpbGVtb2RlIiwgJmZpbGVtb2RlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5zZXRfbGdfZmlsZW1vZGUoc2VsZi0+ZGJfZW52LCBmaWxlbW9kZSk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X2xnX2ZpbGVtb2RlKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnIsIGZpbGVtb2RlOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfbGdfZmlsZW1vZGUoc2VsZi0+ZGJfZW52LCAmZmlsZW1vZGUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoZmlsZW1vZGUpOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3NldF9sZ19ic2l6ZShEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC00MzAwLDYgKzU1MTMsMjIgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X2xnX2JzaXplKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGxnX2JzaXplOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfbGdfYnNpemUoc2VsZi0+ZGJfZW52LCAmbGdfYnNpemUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcobGdfYnNpemUpOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3NldF9sZ19kaXIoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtNDMxOCw2ICs1NTQ3LDIzIEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9sZ19kaXIoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICBjb25zdCBjaGFyICpkaXJwOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfbGdfZGlyKHNlbGYtPmRiX2VudiwgJmRpcnApOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcoZGlycCk7Cit9CisjZW5kaWYKKwogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X2xnX21heChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CkBAIC00MzY4LDYgKzU2MTQsNTUgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X2xnX3JlZ2lvbm1heChEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBsZ19yZWdpb25tYXg7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9sZ19yZWdpb25tYXgoc2VsZi0+ZGJfZW52LCAmbGdfcmVnaW9ubWF4KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGxnX3JlZ2lvbm1heCk7Cit9CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NykKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3NldF9sa19wYXJ0aXRpb25zKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyLCBsa19wYXJ0aXRpb25zOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnNldF9sa19wYXJ0aXRpb25zIiwgJmxrX3BhcnRpdGlvbnMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnNldF9sa19wYXJ0aXRpb25zKHNlbGYtPmRiX2VudiwgbGtfcGFydGl0aW9ucyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X2xrX3BhcnRpdGlvbnMoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgbGtfcGFydGl0aW9uczsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X2xrX3BhcnRpdGlvbnMoc2VsZi0+ZGJfZW52LCAmbGtfcGFydGl0aW9ucyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhsa19wYXJ0aXRpb25zKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9zZXRfbGtfZGV0ZWN0KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTQzODUsNiArNTY4MCwyMyBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfbGtfZGV0ZWN0KERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGxrX2RldGVjdDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X2xrX2RldGVjdChzZWxmLT5kYl9lbnYsICZsa19kZXRlY3QpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcobGtfZGV0ZWN0KTsKK30KKyNlbmRpZgorCiAKICNpZiAoREJWRVIgPCA0NSkKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTQ0MjIsNiArNTczNCwyMiBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfbGtfbWF4X2xvY2tzKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGxrX21heDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X2xrX21heF9sb2NrcyhzZWxmLT5kYl9lbnYsICZsa19tYXgpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcobGtfbWF4KTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9zZXRfbGtfbWF4X2xvY2tlcnMoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtNDQzOSw2ICs1NzY3LDIyIEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9sa19tYXhfbG9ja2VycyhEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBsa19tYXg7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9sa19tYXhfbG9ja2VycyhzZWxmLT5kYl9lbnYsICZsa19tYXgpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcobGtfbWF4KTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9zZXRfbGtfbWF4X29iamVjdHMoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtNDQ1Niw2ICs1ODAwLDQwIEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9sa19tYXhfb2JqZWN0cyhEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBsa19tYXg7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9sa19tYXhfb2JqZWN0cyhzZWxmLT5kYl9lbnYsICZsa19tYXgpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcobGtfbWF4KTsKK30KKyNlbmRpZgorCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X21wX21tYXBzaXplKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgc2l6ZV90IG1tYXBzaXplOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfbXBfbW1hcHNpemUoc2VsZi0+ZGJfZW52LCAmbW1hcHNpemUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcobW1hcHNpemUpOworfQorI2VuZGlmCisKIAogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X21wX21tYXBzaXplKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTQ0OTIsNiArNTg3MCwyNiBAQAogfQogCiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfdG1wX2RpcihEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIGNvbnN0IGNoYXIgKmRpcnBwOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfdG1wX2RpcihzZWxmLT5kYl9lbnYsICZkaXJwcCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcoZGlycHApOworfQorI2VuZGlmCisKKwogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfdHhuX3JlY292ZXIoREJFbnZPYmplY3QqIHNlbGYpCiB7CkBAIC00NTAxLDcgKzU4OTksMTEgQEAKICAgICBEQlR4bk9iamVjdCAqdHhuOwogI2RlZmluZSBQUkVQTElTVF9MRU4gMTYKICAgICBEQl9QUkVQTElTVCBwcmVwbGlzdFtQUkVQTElTVF9MRU5dOworI2lmIChEQlZFUiA8IDQ4KQogICAgIGxvbmcgcmV0cDsKKyNlbHNlCisgICAgdV9pbnQzMl90IHJldHA7CisjZW5kaWYKIAogICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOwogCkBAIC00NTIyLDEyICs1OTI0LDEyIEBACiAgICAgICAgIGZsYWdzPURCX05FWFQ7ICAvKiBQcmVwYXJlIGZvciBuZXh0IGxvb3AgcGFzcyAqLwogICAgICAgICBmb3IgKGk9MDsgaTxyZXRwOyBpKyspIHsKICAgICAgICAgICAgIGdpZD1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopKHByZXBsaXN0W2ldLmdpZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCX1hJRERBVEFTSVpFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJfR0lEX1NJWkUpOwogICAgICAgICAgICAgaWYgKCFnaWQpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0eG49bmV3REJUeG5PYmplY3Qoc2VsZiwgTlVMTCwgcHJlcGxpc3RbaV0udHhuLCBmbGFncyk7CisgICAgICAgICAgICB0eG49bmV3REJUeG5PYmplY3Qoc2VsZiwgTlVMTCwgcHJlcGxpc3RbaV0udHhuLCAwKTsKICAgICAgICAgICAgIGlmICghdHhuKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihnaWQpOwpAQCAtNDYwMiw2ICs2MDA0LDI0IEBACiB9CiAKIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF90eF9tYXgoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgbWF4OworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfdHhfbWF4KHNlbGYtPmRiX2VudiwgJm1heCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKG1heCk7Cit9CisjZW5kaWYKKworCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9zZXRfdHhfbWF4KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKQEAgLTQ2MTEsMTIgKzYwMzEsMzEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CiAKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CiAgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5zZXRfdHhfbWF4KHNlbGYtPmRiX2VudiwgbWF4KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOwogICAgIFJFVFVSTl9JRl9FUlIoKTsKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfdHhfdGltZXN0YW1wKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdGltZV90IHRpbWVzdGFtcDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X3R4X3RpbWVzdGFtcChzZWxmLT5kYl9lbnYsICZ0aW1lc3RhbXApOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcodGltZXN0YW1wKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9zZXRfdHhfdGltZXN0YW1wKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKQEAgLTQ2MjgsNyArNjA2Nyw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOwogICAgIHRpbWVzdGFtcCA9ICh0aW1lX3Qpc3RhbXA7CisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOwogICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+c2V0X3R4X3RpbWVzdGFtcChzZWxmLT5kYl9lbnYsICZ0aW1lc3RhbXApOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CiAgICAgUkVUVVJOX0lGX0VSUigpOwogICAgIFJFVFVSTl9OT05FKCk7CiB9CkBAIC00NzIyLDYgKzYxNjMsMjYgQEAKIAogI2lmIChEQlZFUiA+PSA0NCkKIHN0YXRpYyBQeU9iamVjdCoKK0RCRW52X2ZpbGVpZF9yZXNldChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBjaGFyICpmaWxlOworICAgIHVfaW50MzJfdCBmbGFncyA9IDA7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZpbGUiLCAiZmxhZ3MiLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInp8aTpmaWxlaWRfcmVzZXQiLCBrd25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmZmxhZ3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmZpbGVpZF9yZXNldChzZWxmLT5kYl9lbnYsIGZpbGUsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCitzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9sc25fcmVzZXQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewogICAgIGludCBlcnI7CkBAIC00NzQyLDYgKzYyMDMsMzAgQEAKIH0KICNlbmRpZiAvKiBEQlZFUiA+PSA0LjQgKi8KIAorCisjaWYgKERCVkVSID49IDQzKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfc3RhdF9wcmludChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgZmxhZ3M9MDsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyAiZmxhZ3MiLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aTpzdGF0X3ByaW50IiwKKyAgICAgICAgICAgICAgICBrd25hbWVzLCAmZmxhZ3MpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnN0YXRfcHJpbnQoc2VsZi0+ZGJfZW52LCBmbGFncyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKyNlbmRpZgorCisKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X2xvZ19zdGF0KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKQEAgLTQ3NzcsOSArNjI2Miw2IEBACiAgICAgTUFLRV9FTlRSWShsZ19zaXplKTsKICAgICBNQUtFX0VOVFJZKHJlY29yZCk7CiAjZW5kaWYKLSNpZiAoREJWRVIgPCA0MSkKLSAgICBNQUtFX0VOVFJZKGxnX21heCk7Ci0jZW5kaWYKICAgICBNQUtFX0VOVFJZKHdfbWJ5dGVzKTsKICAgICBNQUtFX0VOVFJZKHdfYnl0ZXMpOwogICAgIE1BS0VfRU5UUlkod2NfbWJ5dGVzKTsKQEAgLTQ4MDYsNiArNjI4OCwyOSBAQAogfSAvKiBEQkVudl9sb2dfc3RhdCAqLwogCiAKKyNpZiAoREJWRVIgPj0gNDMpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9sb2dfc3RhdF9wcmludChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgZmxhZ3M9MDsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyAiZmxhZ3MiLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aTpsb2dfc3RhdF9wcmludCIsCisgICAgICAgICAgICAgICAga3duYW1lcywgJmZsYWdzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5sb2dfc3RhdF9wcmludChzZWxmLT5kYl9lbnYsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorI2VuZGlmCisKKwogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfbG9ja19zdGF0KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKQEAgLTQ4MzIsMTMgKzYzMzcsOCBAQAogCiAjZGVmaW5lIE1BS0VfRU5UUlkobmFtZSkgIF9hZGRJbnRUb0RpY3QoZCwgI25hbWUsIHNwLT5zdF8jI25hbWUpCiAKLSNpZiAoREJWRVIgPCA0MSkKLSAgICBNQUtFX0VOVFJZKGxhc3RpZCk7Ci0jZW5kaWYKLSNpZiAoREJWRVIgPj00MSkKICAgICBNQUtFX0VOVFJZKGlkKTsKICAgICBNQUtFX0VOVFJZKGN1cl9tYXhpZCk7Ci0jZW5kaWYKICAgICBNQUtFX0VOVFJZKG5tb2Rlcyk7CiAgICAgTUFLRV9FTlRSWShtYXhsb2Nrcyk7CiAgICAgTUFLRV9FTlRSWShtYXhsb2NrZXJzKTsKQEAgLTQ4NjMsMTAgKzYzNjMsOCBAQAogICAgIE1BS0VfRU5UUlkobG9ja193YWl0KTsKICNlbmRpZgogICAgIE1BS0VfRU5UUlkobmRlYWRsb2Nrcyk7Ci0jaWYgKERCVkVSID49IDQxKQogICAgIE1BS0VfRU5UUlkobG9ja3RpbWVvdXQpOwogICAgIE1BS0VfRU5UUlkodHhudGltZW91dCk7Ci0jZW5kaWYKICAgICBNQUtFX0VOVFJZKG5sb2NrdGltZW91dHMpOwogICAgIE1BS0VfRU5UUlkobnR4bnRpbWVvdXRzKTsKICNpZiAoREJWRVIgPj0gNDYpCkBAIC00ODkyLDYgKzYzOTAsNDUgQEAKICAgICByZXR1cm4gZDsKIH0KIAorI2lmIChEQlZFUiA+PSA0MykKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2xvY2tfc3RhdF9wcmludChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgZmxhZ3M9MDsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyAiZmxhZ3MiLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aTpsb2NrX3N0YXRfcHJpbnQiLAorICAgICAgICAgICAgICAgIGt3bmFtZXMsICZmbGFncykpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bG9ja19zdGF0X3ByaW50KHNlbGYtPmRiX2VudiwgZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisjZW5kaWYKKworCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9sb2dfY3Vyc29yKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgREJfTE9HQyogZGJsb2djOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5sb2dfY3Vyc29yKHNlbGYtPmRiX2VudiwgJmRibG9nYywgMCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIChQeU9iamVjdCopIG5ld0RCTG9nQ3Vyc29yT2JqZWN0KGRibG9nYywgc2VsZik7Cit9CisKKwogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfbG9nX2ZsdXNoKERCRW52T2JqZWN0KiBzZWxmKQogewpAQCAtNDkwOCw2ICs2NDQ1LDg2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKK0RCRW52X2xvZ19maWxlKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIERCX0xTTiBsc24gPSB7MCwgMH07CisgICAgaW50IHNpemUgPSAyMDsKKyAgICBjaGFyICpuYW1lID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dmFsOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIoaWkpOmxvZ19maWxlIiwgJmxzbi5maWxlLCAmbHNuLm9mZnNldCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBkbyB7CisgICAgICAgIG5hbWUgPSBtYWxsb2Moc2l6ZSk7CisgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICAgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5sb2dfZmlsZShzZWxmLT5kYl9lbnYsICZsc24sIG5hbWUsIHNpemUpOworICAgICAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgICAgICBpZiAoZXJyID09IEVJTlZBTCkgeworICAgICAgICAgICAgZnJlZShuYW1lKTsKKyAgICAgICAgICAgIHNpemUgKj0gMjsKKyAgICAgICAgfSBlbHNlIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGZyZWUobmFtZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgICAgICAgICBhc3NlcnQoMCk7ICAvKiBVbnJlYWNoYWJsZS4uLiBzdXBwb3NlbHkgKi8KKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisvKgorKiogSWYgdGhlIGZpbmFsIGJ1ZmZlciB3ZSB0cnkgaXMgdG9vIHNtYWxsLCB3ZSB3aWxsCisqKiBnZXQgdGhpcyBleGNlcHRpb246CisqKiBEQkludmFsaWRBcmdFcnJvcjoKKyoqICAgICgyMiwgJ0ludmFsaWQgYXJndW1lbnQgLS0gREJfRU5WLT5sb2dfZmlsZTogbmFtZSBidWZmZXIgaXMgdG9vIHNob3J0JykKKyovCisgICAgfSB3aGlsZSAoKGVyciA9PSBFSU5WQUwpICYmIChzaXplPCgxPDwxNykpKTsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsgIC8qIE1heWJlIHRoZSBzaXplIGlzIG5vdCB0aGUgcHJvYmxlbSAqLworCisgICAgcmV0dmFsID0gUHlfQnVpbGRWYWx1ZSgicyIsIG5hbWUpOworICAgIGZyZWUobmFtZSk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworCisjaWYgKERCVkVSID49IDQ0KQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbG9nX3ByaW50ZihEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBjaGFyICpzdHJpbmc7CisgICAgUHlPYmplY3QgKnR4bm9iaiA9IE5VTEw7CisgICAgREJfVFhOICp0eG4gPSBOVUxMOworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7InN0cmluZyIsICJ0eG4iLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfE86bG9nX3ByaW50ZiIsIGt3bmFtZXMsCisgICAgICAgICAgICAgICAgJnN0cmluZywgJnR4bm9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBpZiAoIWNoZWNrVHhuT2JqKHR4bm9iaiwgJnR4bikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoKKyAgICAqKiBEbyBub3QgdXNlIHRoZSBmb3JtYXQgc3RyaW5nIGRpcmVjdGx5LCB0byBhdm9pZCBhdHRhY2tzLgorICAgICovCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bG9nX3ByaW50ZihzZWxmLT5kYl9lbnYsIHR4biwgIiVzIiwgc3RyaW5nKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisjZW5kaWYKKworCitzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9sb2dfYXJjaGl2ZShEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgaW50IGZsYWdzPTA7CkBAIC00OTU1LDYgKzY1NzIsOTkgQEAKIH0KIAogCisjaWYgKERCVkVSID49IDQ0KQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbXV0ZXhfc3RhdChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBEQl9NVVRFWF9TVEFUKiBzdGF0cCA9IE5VTEw7CisgICAgUHlPYmplY3QqIGQgPSBOVUxMOworICAgIHVfaW50MzJfdCBmbGFncyA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOm11dGV4X3N0YXQiLCAmZmxhZ3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPm11dGV4X3N0YXQoc2VsZi0+ZGJfZW52LCAmc3RhdHAsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIC8qIFR1cm4gdGhlIHN0YXQgc3RydWN0dXJlIGludG8gYSBkaWN0aW9uYXJ5ICovCisgICAgZCA9IFB5RGljdF9OZXcoKTsKKyAgICBpZiAoZCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChzdGF0cCkKKyAgICAgICAgICAgIGZyZWUoc3RhdHApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNkZWZpbmUgTUFLRV9FTlRSWShuYW1lKSAgX2FkZEludFRvRGljdChkLCAjbmFtZSwgc3RhdHAtPnN0XyMjbmFtZSkKKworICAgIE1BS0VfRU5UUlkobXV0ZXhfYWxpZ24pOworICAgIE1BS0VfRU5UUlkobXV0ZXhfdGFzX3NwaW5zKTsKKyAgICBNQUtFX0VOVFJZKG11dGV4X2NudCk7CisgICAgTUFLRV9FTlRSWShtdXRleF9mcmVlKTsKKyAgICBNQUtFX0VOVFJZKG11dGV4X2ludXNlKTsKKyAgICBNQUtFX0VOVFJZKG11dGV4X2ludXNlX21heCk7CisgICAgTUFLRV9FTlRSWShyZWdzaXplKTsKKyAgICBNQUtFX0VOVFJZKHJlZ2lvbl93YWl0KTsKKyAgICBNQUtFX0VOVFJZKHJlZ2lvbl9ub3dhaXQpOworCisjdW5kZWYgTUFLRV9FTlRSWQorICAgIGZyZWUoc3RhdHApOworICAgIHJldHVybiBkOworfQorI2VuZGlmCisKKworI2lmIChEQlZFUiA+PSA0NCkKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X211dGV4X3N0YXRfcHJpbnQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IGZsYWdzPTA7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZsYWdzIiwgTlVMTCB9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGk6bXV0ZXhfc3RhdF9wcmludCIsCisgICAgICAgICAgICAgICAga3duYW1lcywgJmZsYWdzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5tdXRleF9zdGF0X3ByaW50KHNlbGYtPmRiX2VudiwgZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisjZW5kaWYKKworCisjaWYgKERCVkVSID49IDQzKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfdHhuX3N0YXRfcHJpbnQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IGZsYWdzPTA7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZsYWdzIiwgTlVMTCB9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGk6c3RhdF9wcmludCIsCisgICAgICAgICAgICAgICAga3duYW1lcywgJmZsYWdzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+dHhuX3N0YXRfcHJpbnQoc2VsZi0+ZGJfZW52LCBmbGFncyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKyNlbmRpZgorCisKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3R4bl9zdGF0KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKQEAgLTUwNDcsNiArNjc1Nyw3IEBACiB9CiAKIAorI2lmIChEQlZFUiA8IDQ4KQogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X3JwY19zZXJ2ZXIoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewpAQCAtNTA2OCw2ICs2Nzc5LDg0IEBACiAgICAgUkVUVVJOX0lGX0VSUigpOwogICAgIFJFVFVSTl9OT05FKCk7CiB9CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0MykKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3NldF9tcF9tYXhfb3BlbmZkKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBtYXhvcGVuZmQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6c2V0X21wX21heF9vcGVuZmQiLCAmbWF4b3BlbmZkKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+c2V0X21wX21heF9vcGVuZmQoc2VsZi0+ZGJfZW52LCBtYXhvcGVuZmQpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9tcF9tYXhfb3BlbmZkKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgaW50IG1heG9wZW5mZDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X21wX21heF9vcGVuZmQoc2VsZi0+ZGJfZW52LCAmbWF4b3BlbmZkKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKG1heG9wZW5mZCk7Cit9CisKKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfc2V0X21wX21heF93cml0ZShEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgbWF4d3JpdGUsIG1heHdyaXRlX3NsZWVwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTpzZXRfbXBfbWF4X3dyaXRlIiwgJm1heHdyaXRlLAorICAgICAgICAgICAgICAgICZtYXh3cml0ZV9zbGVlcCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnNldF9tcF9tYXhfd3JpdGUoc2VsZi0+ZGJfZW52LCBtYXh3cml0ZSwKKyAgICAgICAgICAgIG1heHdyaXRlX3NsZWVwKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfbXBfbWF4X3dyaXRlKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgaW50IG1heHdyaXRlOworI2lmIChEQlZFUiA+PSA0NikKKyAgICBkYl90aW1lb3V0X3QgbWF4d3JpdGVfc2xlZXA7CisjZWxzZQorICAgIGludCBtYXh3cml0ZV9zbGVlcDsKKyNlbmRpZgorCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfbXBfbWF4X3dyaXRlKHNlbGYtPmRiX2VudiwgJm1heHdyaXRlLAorICAgICAgICAgICAgJm1heHdyaXRlX3NsZWVwKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgbWF4d3JpdGUsIChpbnQpbWF4d3JpdGVfc2xlZXApOworfQorI2VuZGlmCisKIAogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X3ZlcmJvc2UoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtNTYyNSw2ICs3NDE0LDE3NSBAQAogfQogI2VuZGlmCiAKKworI2lmIChEQlZFUiA+PSA0NykKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3JlcF9zZXRfY2xvY2tza2V3KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGludCBmYXN0LCBzbG93OworCisjaWYgKFBZX1ZFUlNJT05fSEVYID49IDB4MDIwNDAwMDApCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIklJOnJlcF9zZXRfY2xvY2tza2V3IiwgJmZhc3QsICZzbG93KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZWxzZQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTpyZXBfc2V0X2Nsb2Nrc2tldyIsICZmYXN0LCAmc2xvdykpCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmCisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnJlcF9zZXRfY2xvY2tza2V3KHNlbGYtPmRiX2VudiwgZmFzdCwgc2xvdyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfcmVwX2dldF9jbG9ja3NrZXcoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBpbnQgZmFzdCwgc2xvdzsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnJlcF9nZXRfY2xvY2tza2V3KHNlbGYtPmRiX2VudiwgJmZhc3QsICZzbG93KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyNpZiAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMjA0MDAwMCkKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKElJKSIsIGZhc3QsIHNsb3cpOworI2Vsc2UKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZhc3QsIHNsb3cpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0MykKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3JlcF9zdGF0X3ByaW50KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBmbGFncz0wOworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ICJmbGFncyIsIE5VTEwgfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpOnJlcF9zdGF0X3ByaW50IiwKKyAgICAgICAgICAgICAgICBrd25hbWVzLCAmZmxhZ3MpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnJlcF9zdGF0X3ByaW50KHNlbGYtPmRiX2VudiwgZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisjZW5kaWYKKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfcmVwX3N0YXQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IGZsYWdzPTA7CisgICAgREJfUkVQX1NUQVQgKnN0YXRwOworICAgIFB5T2JqZWN0ICpzdGF0czsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyAiZmxhZ3MiLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aTpyZXBfc3RhdCIsCisgICAgICAgICAgICAgICAga3duYW1lcywgJmZsYWdzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5yZXBfc3RhdChzZWxmLT5kYl9lbnYsICZzdGF0cCwgZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworCisgICAgc3RhdHM9UHlEaWN0X05ldygpOworICAgIGlmIChzdGF0cyA9PSBOVUxMKSB7CisgICAgICAgIGZyZWUoc3RhdHApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNkZWZpbmUgTUFLRV9FTlRSWShuYW1lKSAgX2FkZEludFRvRGljdChzdGF0cywgI25hbWUsIHN0YXRwLT5zdF8jI25hbWUpCisjZGVmaW5lIE1BS0VfREJfTFNOX0VOVFJZKG5hbWUpIF9hZGREQl9sc25Ub0RpY3Qoc3RhdHMgLCAjbmFtZSwgc3RhdHAtPnN0XyMjbmFtZSkKKworI2lmIChEQlZFUiA+PSA0NCkKKyAgICBNQUtFX0VOVFJZKGJ1bGtfZmlsbHMpOworICAgIE1BS0VfRU5UUlkoYnVsa19vdmVyZmxvd3MpOworICAgIE1BS0VfRU5UUlkoYnVsa19yZWNvcmRzKTsKKyAgICBNQUtFX0VOVFJZKGJ1bGtfdHJhbnNmZXJzKTsKKyAgICBNQUtFX0VOVFJZKGNsaWVudF9yZXJlcXVlc3RzKTsKKyAgICBNQUtFX0VOVFJZKGNsaWVudF9zdmNfbWlzcyk7CisgICAgTUFLRV9FTlRSWShjbGllbnRfc3ZjX3JlcSk7CisjZW5kaWYKKyAgICBNQUtFX0VOVFJZKGR1cG1hc3RlcnMpOworI2lmIChEQlZFUiA+PSA0MykKKyAgICBNQUtFX0VOVFJZKGVnZW4pOworICAgIE1BS0VfRU5UUlkoZWxlY3Rpb25fbnZvdGVzKTsKKyAgICBNQUtFX0VOVFJZKHN0YXJ0dXBfY29tcGxldGUpOworICAgIE1BS0VfRU5UUlkocGdfZHVwbGljYXRlZCk7CisgICAgTUFLRV9FTlRSWShwZ19yZWNvcmRzKTsKKyAgICBNQUtFX0VOVFJZKHBnX3JlcXVlc3RlZCk7CisgICAgTUFLRV9FTlRSWShuZXh0X3BnKTsKKyAgICBNQUtFX0VOVFJZKHdhaXRpbmdfcGcpOworI2VuZGlmCisgICAgTUFLRV9FTlRSWShlbGVjdGlvbl9jdXJfd2lubmVyKTsKKyAgICBNQUtFX0VOVFJZKGVsZWN0aW9uX2dlbik7CisgICAgTUFLRV9EQl9MU05fRU5UUlkoZWxlY3Rpb25fbHNuKTsKKyAgICBNQUtFX0VOVFJZKGVsZWN0aW9uX25zaXRlcyk7CisgICAgTUFLRV9FTlRSWShlbGVjdGlvbl9wcmlvcml0eSk7CisjaWYgKERCVkVSID49IDQ0KQorICAgIE1BS0VfRU5UUlkoZWxlY3Rpb25fc2VjKTsKKyAgICBNQUtFX0VOVFJZKGVsZWN0aW9uX3VzZWMpOworI2VuZGlmCisgICAgTUFLRV9FTlRSWShlbGVjdGlvbl9zdGF0dXMpOworICAgIE1BS0VfRU5UUlkoZWxlY3Rpb25fdGllYnJlYWtlcik7CisgICAgTUFLRV9FTlRSWShlbGVjdGlvbl92b3Rlcyk7CisgICAgTUFLRV9FTlRSWShlbGVjdGlvbnMpOworICAgIE1BS0VfRU5UUlkoZWxlY3Rpb25zX3dvbik7CisgICAgTUFLRV9FTlRSWShlbnZfaWQpOworICAgIE1BS0VfRU5UUlkoZW52X3ByaW9yaXR5KTsKKyAgICBNQUtFX0VOVFJZKGdlbik7CisgICAgTUFLRV9FTlRSWShsb2dfZHVwbGljYXRlZCk7CisgICAgTUFLRV9FTlRSWShsb2dfcXVldWVkKTsKKyAgICBNQUtFX0VOVFJZKGxvZ19xdWV1ZWRfbWF4KTsKKyAgICBNQUtFX0VOVFJZKGxvZ19xdWV1ZWRfdG90YWwpOworICAgIE1BS0VfRU5UUlkobG9nX3JlY29yZHMpOworICAgIE1BS0VfRU5UUlkobG9nX3JlcXVlc3RlZCk7CisgICAgTUFLRV9FTlRSWShtYXN0ZXIpOworICAgIE1BS0VfRU5UUlkobWFzdGVyX2NoYW5nZXMpOworI2lmIChEQlZFUiA+PSA0NykKKyAgICBNQUtFX0VOVFJZKG1heF9sZWFzZV9zZWMpOworICAgIE1BS0VfRU5UUlkobWF4X2xlYXNlX3VzZWMpOworICAgIE1BS0VfREJfTFNOX0VOVFJZKG1heF9wZXJtX2xzbik7CisjZW5kaWYKKyAgICBNQUtFX0VOVFJZKG1zZ3NfYmFkZ2VuKTsKKyAgICBNQUtFX0VOVFJZKG1zZ3NfcHJvY2Vzc2VkKTsKKyAgICBNQUtFX0VOVFJZKG1zZ3NfcmVjb3Zlcik7CisgICAgTUFLRV9FTlRSWShtc2dzX3NlbmRfZmFpbHVyZXMpOworICAgIE1BS0VfRU5UUlkobXNnc19zZW50KTsKKyAgICBNQUtFX0VOVFJZKG5ld3NpdGVzKTsKKyAgICBNQUtFX0RCX0xTTl9FTlRSWShuZXh0X2xzbik7CisgICAgTUFLRV9FTlRSWShuc2l0ZXMpOworICAgIE1BS0VfRU5UUlkobnRocm90dGxlcyk7CisgICAgTUFLRV9FTlRSWShvdXRkYXRlZCk7CisjaWYgKERCVkVSID49IDQ2KQorICAgIE1BS0VfRU5UUlkoc3RhcnRzeW5jX2RlbGF5ZWQpOworI2VuZGlmCisgICAgTUFLRV9FTlRSWShzdGF0dXMpOworICAgIE1BS0VfRU5UUlkodHhuc19hcHBsaWVkKTsKKyAgICBNQUtFX0RCX0xTTl9FTlRSWSh3YWl0aW5nX2xzbik7CisKKyN1bmRlZiBNQUtFX0RCX0xTTl9FTlRSWQorI3VuZGVmIE1BS0VfRU5UUlkKKworICAgIGZyZWUoc3RhdHApOworICAgIHJldHVybiBzdGF0czsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBSRVBMSUNBVElPTiBNRVRIT0RTOiBSZXBsaWNhdGlvbiBNYW5hZ2VyICovCiAKQEAgLTU5NDksOSArNzkwNyw5IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpwcmVwYXJlIiwgJmdpZCwgJmdpZF9zaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoZ2lkX3NpemUgIT0gREJfWElEREFUQVNJWkUpIHsKKyAgICBpZiAoZ2lkX3NpemUgIT0gREJfR0lEX1NJWkUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJnaWQgbXVzdCBiZSBEQl9YSUREQVRBU0laRSBieXRlcyBsb25nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiZ2lkIG11c3QgYmUgREJfR0lEX1NJWkUgYnl0ZXMgbG9uZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTYwNjYsNiArODAyNCw3NiBAQAogICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoaWQpOwogfQogCisKK3N0YXRpYyBQeU9iamVjdCoKK0RCVHhuX3NldF90aW1lb3V0KERCVHhuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBmbGFncz0wOworICAgIHVfaW50MzJfdCB0aW1lb3V0ID0gMDsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyAidGltZW91dCIsICJmbGFncyIsIE5VTEwgfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImlpOnNldF90aW1lb3V0Iiwga3duYW1lcywKKyAgICAgICAgICAgICAgICAmdGltZW91dCwgJmZsYWdzKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+dHhuLT5zZXRfdGltZW91dChzZWxmLT50eG4sIChkYl90aW1lb3V0X3QpdGltZW91dCwgZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworCisjaWYgKERCVkVSID49IDQ0KQorc3RhdGljIFB5T2JqZWN0KgorREJUeG5fc2V0X25hbWUoREJUeG5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnI7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpzZXRfbmFtZSIsICZuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+dHhuLT5zZXRfbmFtZShzZWxmLT50eG4sIG5hbWUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKyNlbmRpZgorCisKKyNpZiAoREJWRVIgPj0gNDQpCitzdGF0aWMgUHlPYmplY3QqCitEQlR4bl9nZXRfbmFtZShEQlR4bk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+dHhuLT5nZXRfbmFtZShzZWxmLT50eG4sICZuYW1lKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDApCisgICAgaWYgKCFuYW1lKSB7CisgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKCIiKTsKKyAgICB9CisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcobmFtZSk7CisjZWxzZQorICAgIGlmICghbmFtZSkgeworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOworICAgIH0KKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcobmFtZSk7CisjZW5kaWYKK30KKyNlbmRpZgorCisKICNpZiAoREJWRVIgPj0gNDMpCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIERCU2VxdWVuY2UgbWV0aG9kcyAqLwpAQCAtNjE2OSwxMiArODE5NywxMiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QqCi1EQlNlcXVlbmNlX2luaXRfdmFsdWUoREJTZXF1ZW5jZU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCitEQlNlcXVlbmNlX2luaXRpYWxfdmFsdWUoREJTZXF1ZW5jZU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgaW50IGVycjsKICAgICBQWV9MT05HX0xPTkcgdmFsdWU7CiAgICAgZGJfc2VxX3QgdmFsdWUyOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJMOmluaXRfdmFsdWUiLCAmdmFsdWUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJMOmluaXRpYWxfdmFsdWUiLCAmdmFsdWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19TRVFVRU5DRV9OT1RfQ0xPU0VEKHNlbGYpCiAKQEAgLTYzNTIsNiArODM4MCwyOSBAQAogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTEwpIiwgbWluLCBtYXgpOwogfQogCisKK3N0YXRpYyBQeU9iamVjdCoKK0RCU2VxdWVuY2Vfc3RhdF9wcmludChEQlNlcXVlbmNlT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBmbGFncz0wOworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ICJmbGFncyIsIE5VTEwgfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpOnN0YXRfcHJpbnQiLAorICAgICAgICAgICAgICAgIGt3bmFtZXMsICZmbGFncykpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBDSEVDS19TRVFVRU5DRV9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPnNlcXVlbmNlLT5zdGF0X3ByaW50KHNlbGYtPnNlcXVlbmNlLCBmbGFncyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKwogc3RhdGljIFB5T2JqZWN0KgogREJTZXF1ZW5jZV9zdGF0KERCU2VxdWVuY2VPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewpAQCAtNjQwMywxMSArODQ1NCwxOCBAQAogICAgIHsiYXBwZW5kIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCX2FwcGVuZCwgICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJhc3NvY2lhdGUiLCAgICAgICAoUHlDRnVuY3Rpb24pREJfYXNzb2NpYXRlLCAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7ImNsb3NlIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9jbG9zZSwgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDcpCisgICAgeyJjb21wYWN0IiwgICAgICAgICAoUHlDRnVuY3Rpb24pREJfY29tcGFjdCwgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyNlbmRpZgogICAgIHsiY29uc3VtZSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCX2NvbnN1bWUsICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJjb25zdW1lX3dhaXQiLCAgICAoUHlDRnVuY3Rpb24pREJfY29uc3VtZV93YWl0LCAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7ImN1cnNvciIsICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9jdXJzb3IsICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiZGVsZXRlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCX2RlbGV0ZSwgICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJmZCIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJfZmQsICAgICAgICAgICAgIE1FVEhfTk9BUkdTfSwKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgeyJleGlzdHMiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pREJfZXhpc3RzLAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjZW5kaWYKICAgICB7ImdldCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9nZXQsICAgICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsicGdldCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCX3BnZXQsICAgICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJnZXRfYm90aCIsICAgICAgICAoUHlDRnVuY3Rpb24pREJfZ2V0X2JvdGgsICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKQEAgLTY0MjQsMjQgKzg0ODIsNzAgQEAKICAgICB7InJlbW92ZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9yZW1vdmUsICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsicmVuYW1lIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCX3JlbmFtZSwgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsic2V0X2J0X21pbmtleSIsICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9idF9taW5rZXksICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9idF9taW5rZXkiLCAgIChQeUNGdW5jdGlvbilEQl9nZXRfYnRfbWlua2V5LCAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRfYnRfY29tcGFyZSIsICAoUHlDRnVuY3Rpb24pREJfc2V0X2J0X2NvbXBhcmUsIE1FVEhfT30sCiAgICAgeyJzZXRfY2FjaGVzaXplIiwgICAoUHlDRnVuY3Rpb24pREJfc2V0X2NhY2hlc2l6ZSwgIE1FVEhfVkFSQVJHU30sCi0jaWYgKERCVkVSID49IDQxKQotICAgIHsic2V0X2VuY3J5cHQiLCAgICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9lbmNyeXB0LCAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2NhY2hlc2l6ZSIsICAgKFB5Q0Z1bmN0aW9uKURCX2dldF9jYWNoZXNpemUsICBNRVRIX05PQVJHU30sCiAjZW5kaWYKKyAgICB7InNldF9lbmNyeXB0IiwgICAgIChQeUNGdW5jdGlvbilEQl9zZXRfZW5jcnlwdCwgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9lbmNyeXB0X2ZsYWdzIiwgKFB5Q0Z1bmN0aW9uKURCX2dldF9lbmNyeXB0X2ZsYWdzLCBNRVRIX05PQVJHU30sCisjZW5kaWYKKwogICAgIHsic2V0X2ZsYWdzIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9mbGFncywgICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9mbGFncyIsICAgICAgIChQeUNGdW5jdGlvbilEQl9nZXRfZmxhZ3MsICAgICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRfaF9mZmFjdG9yIiwgICAoUHlDRnVuY3Rpb24pREJfc2V0X2hfZmZhY3RvciwgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2hfZmZhY3RvciIsICAgKFB5Q0Z1bmN0aW9uKURCX2dldF9oX2ZmYWN0b3IsICBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7InNldF9oX25lbGVtIiwgICAgIChQeUNGdW5jdGlvbilEQl9zZXRfaF9uZWxlbSwgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfaF9uZWxlbSIsICAgICAoUHlDRnVuY3Rpb24pREJfZ2V0X2hfbmVsZW0sICAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHsic2V0X2xvcmRlciIsICAgICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9sb3JkZXIsICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9sb3JkZXIiLCAgICAgIChQeUNGdW5jdGlvbilEQl9nZXRfbG9yZGVyLCAgICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRfcGFnZXNpemUiLCAgICAoUHlDRnVuY3Rpb24pREJfc2V0X3BhZ2VzaXplLCAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X3BhZ2VzaXplIiwgICAgKFB5Q0Z1bmN0aW9uKURCX2dldF9wYWdlc2l6ZSwgICBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7InNldF9yZV9kZWxpbSIsICAgIChQeUNGdW5jdGlvbilEQl9zZXRfcmVfZGVsaW0sICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfcmVfZGVsaW0iLCAgICAoUHlDRnVuY3Rpb24pREJfZ2V0X3JlX2RlbGltLCAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHsic2V0X3JlX2xlbiIsICAgICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9yZV9sZW4sICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9yZV9sZW4iLCAgICAgIChQeUNGdW5jdGlvbilEQl9nZXRfcmVfbGVuLCAgICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRfcmVfcGFkIiwgICAgICAoUHlDRnVuY3Rpb24pREJfc2V0X3JlX3BhZCwgICAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X3JlX3BhZCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCX2dldF9yZV9wYWQsICAgICBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7InNldF9yZV9zb3VyY2UiLCAgIChQeUNGdW5jdGlvbilEQl9zZXRfcmVfc291cmNlLCAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfcmVfc291cmNlIiwgICAoUHlDRnVuY3Rpb24pREJfZ2V0X3JlX3NvdXJjZSwgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHsic2V0X3FfZXh0ZW50c2l6ZSIsKFB5Q0Z1bmN0aW9uKURCX3NldF9xX2V4dGVudHNpemUsIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X3FfZXh0ZW50c2l6ZSIsKFB5Q0Z1bmN0aW9uKURCX2dldF9xX2V4dGVudHNpemUsIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHsic2V0X3ByaXZhdGUiLCAgICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9wcml2YXRlLCAgICBNRVRIX099LAogICAgIHsiZ2V0X3ByaXZhdGUiLCAgICAgKFB5Q0Z1bmN0aW9uKURCX2dldF9wcml2YXRlLCAgICBNRVRIX05PQVJHU30sCisjaWYgKERCVkVSID49IDQ2KQorICAgIHsic2V0X3ByaW9yaXR5IiwgICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9wcmlvcml0eSwgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0X3ByaW9yaXR5IiwgICAgKFB5Q0Z1bmN0aW9uKURCX2dldF9wcmlvcml0eSwgICBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7InN0YXQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9zdGF0LCAgICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2lmIChEQlZFUiA+PSA0MykKKyAgICB7InN0YXRfcHJpbnQiLCAgICAgIChQeUNGdW5jdGlvbilEQl9zdGF0X3ByaW50LAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjZW5kaWYKICAgICB7InN5bmMiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9zeW5jLCAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InRydW5jYXRlIiwgICAgICAgIChQeUNGdW5jdGlvbilEQl90cnVuY2F0ZSwgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsidHlwZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCX2dldF90eXBlLCAgICAgICBNRVRIX05PQVJHU30sCkBAIC02NDUzLDYgKzg1NTcsMjAgQEAKIH07CiAKIAorLyogV2UgbmVlZCB0aGlzIHRvIHN1cHBvcnQgX19jb250YWluc19fKCkgKi8KK3N0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBEQl9zZXF1ZW5jZSA9IHsKKyAgICAwLCAvKiBzcV9sZW5ndGgsIG1hcHBpbmcgd2lucyBoZXJlICovCisgICAgMCwgLyogc3FfY29uY2F0ICovCisgICAgMCwgLyogc3FfcmVwZWF0ICovCisgICAgMCwgLyogc3FfaXRlbSAqLworICAgIDAsIC8qIHNxX3NsaWNlICovCisgICAgMCwgLyogc3FfYXNzX2l0ZW0gKi8KKyAgICAwLCAvKiBzcV9hc3Nfc2xpY2UgKi8KKyAgICAob2Jqb2JqcHJvYylEQl9jb250YWlucywgLyogc3FfY29udGFpbnMgKi8KKyAgICAwLCAvKiBzcV9pbnBsYWNlX2NvbmNhdCAqLworICAgIDAsIC8qIHNxX2lucGxhY2VfcmVwZWF0ICovCit9OworCiBzdGF0aWMgUHlNYXBwaW5nTWV0aG9kcyBEQl9tYXBwaW5nID0gewogICAgICAgICBEQl9sZW5ndGgsICAgICAgICAgICAgICAgICAgIC8qbXBfbGVuZ3RoKi8KICAgICAgICAgKGJpbmFyeWZ1bmMpREJfc3Vic2NyaXB0LCAgICAvKm1wX3N1YnNjcmlwdCovCkBAIC02NDgzLDggKzg2MDEsMjkgQEAKICAgICB7ImNvbnN1bWUiLCAgICAgICAgIChQeUNGdW5jdGlvbilEQkNfY29uc3VtZSwgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsibmV4dF9kdXAiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCQ19uZXh0X2R1cCwgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJuZXh0X25vZHVwIiwgICAgICAoUHlDRnVuY3Rpb24pREJDX25leHRfbm9kdXAsICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgeyJwcmV2X2R1cCIsICAgICAgICAoUHlDRnVuY3Rpb24pREJDX3ByZXZfZHVwLAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjZW5kaWYKICAgICB7InByZXZfbm9kdXAiLCAgICAgIChQeUNGdW5jdGlvbilEQkNfcHJldl9ub2R1cCwgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiam9pbl9pdGVtIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCQ19qb2luX2l0ZW0sICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0NikKKyAgICB7InNldF9wcmlvcml0eSIsICAgIChQeUNGdW5jdGlvbilEQkNfc2V0X3ByaW9yaXR5LAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisgICAgeyJnZXRfcHJpb3JpdHkiLCAgICAoUHlDRnVuY3Rpb24pREJDX2dldF9wcmlvcml0eSwgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisgICAge05VTEwsICAgICAgTlVMTH0gICAgICAgLyogc2VudGluZWwgKi8KK307CisKKworc3RhdGljIFB5TWV0aG9kRGVmIERCTG9nQ3Vyc29yX21ldGhvZHNbXSA9IHsKKyAgICB7ImNsb3NlIiwgICAoUHlDRnVuY3Rpb24pREJMb2dDdXJzb3JfY2xvc2UsICAgICBNRVRIX05PQVJHU30sCisgICAgeyJjdXJyZW50IiwgKFB5Q0Z1bmN0aW9uKURCTG9nQ3Vyc29yX2N1cnJlbnQsICAgTUVUSF9OT0FSR1N9LAorICAgIHsiZmlyc3QiLCAgIChQeUNGdW5jdGlvbilEQkxvZ0N1cnNvcl9maXJzdCwgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7Imxhc3QiLCAgICAoUHlDRnVuY3Rpb24pREJMb2dDdXJzb3JfbGFzdCwgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJuZXh0IiwgICAgKFB5Q0Z1bmN0aW9uKURCTG9nQ3Vyc29yX25leHQsICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsicHJldiIsICAgIChQeUNGdW5jdGlvbilEQkxvZ0N1cnNvcl9wcmV2LCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InNldCIsICAgICAoUHlDRnVuY3Rpb24pREJMb2dDdXJzb3Jfc2V0LCAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHtOVUxMLCAgICAgIE5VTEx9ICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC02NDkzLDU3ICs4NjMyLDE3OCBAQAogICAgIHsiY2xvc2UiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2Nsb3NlLCAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJvcGVuIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfb3BlbiwgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InJlbW92ZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9yZW1vdmUsICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotI2lmIChEQlZFUiA+PSA0MSkKICAgICB7ImRicmVtb3ZlIiwgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9kYnJlbW92ZSwgICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJkYnJlbmFtZSIsICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfZGJyZW5hbWUsICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2lmIChEQlZFUiA+PSA0NikKKyAgICB7InNldF90aHJlYWRfY291bnQiLCAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X3RocmVhZF9jb3VudCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldF90aHJlYWRfY291bnQiLCAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X3RocmVhZF9jb3VudCwgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRfZW5jcnlwdCIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2VuY3J5cHQsICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAotI2VuZGlmCi0gICAgeyJzZXRfdGltZW91dCIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X3RpbWVvdXQsICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAotICAgIHsic2V0X3NobV9rZXkiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9zaG1fa2V5LCAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJzZXRfY2FjaGVzaXplIiwgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2NhY2hlc2l6ZSwgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InNldF9kYXRhX2RpciIsICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfZGF0YV9kaXIsICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsic2V0X2ZsYWdzIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9mbGFncywgICAgICAgIE1FVEhfVkFSQVJHU30sCi0jaWYgKERCVkVSID49IDQ3KQotICAgIHsibG9nX3NldF9jb25maWciLCAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvZ19zZXRfY29uZmlnLCAgIE1FVEhfVkFSQVJHU30sCi0jZW5kaWYKLSAgICB7InNldF9sZ19ic2l6ZSIsICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbGdfYnNpemUsICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsic2V0X2xnX2RpciIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sZ19kaXIsICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJzZXRfbGdfbWF4IiwgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xnX21heCwgICAgICAgTUVUSF9WQVJBUkdTfSwKICNpZiAoREJWRVIgPj0gNDIpCi0gICAgeyJnZXRfbGdfbWF4IiwgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X2xnX21heCwgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0X2VuY3J5cHRfZmxhZ3MiLCAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X2VuY3J5cHRfZmxhZ3MsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImdldF90aW1lb3V0IiwgICAgIChQeUNGdW5jdGlvbilEQkVudl9nZXRfdGltZW91dCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCisgICAgeyJzZXRfdGltZW91dCIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X3RpbWVvdXQsICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisgICAgeyJzZXRfc2htX2tleSIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X3NobV9rZXksICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9zaG1fa2V5IiwgICAgIChQeUNGdW5jdGlvbilEQkVudl9nZXRfc2htX2tleSwgICAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorI2lmIChEQlZFUiA+PSA0NikKKyAgICB7InNldF9jYWNoZV9tYXgiLCAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfY2FjaGVfbWF4LCAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRfY2FjaGVfbWF4IiwgICAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X2NhY2hlX21heCwgICBNRVRIX05PQVJHU30sCisjZW5kaWYKKyAgICB7InNldF9jYWNoZXNpemUiLCAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfY2FjaGVzaXplLCAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2NhY2hlc2l6ZSIsICAgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9jYWNoZXNpemUsICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisgICAgeyJtZW1wX3RyaWNrbGUiLCAgICAoUHlDRnVuY3Rpb24pREJFbnZfbWVtcF90cmlja2xlLCAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsibWVtcF9zeW5jIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X21lbXBfc3luYywgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im1lbXBfc3RhdCIsICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9tZW1wX3N0YXQsCisgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyNpZiAoREJWRVIgPj0gNDMpCisgICAgeyJtZW1wX3N0YXRfcHJpbnQiLCAoUHlDRnVuY3Rpb24pREJFbnZfbWVtcF9zdGF0X3ByaW50LAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjZW5kaWYKKyNpZiAoREJWRVIgPj0gNDQpCisgICAgeyJtdXRleF9zZXRfbWF4IiwgICAoUHlDRnVuY3Rpb24pREJFbnZfbXV0ZXhfc2V0X21heCwgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsibXV0ZXhfZ2V0X21heCIsICAgKFB5Q0Z1bmN0aW9uKURCRW52X211dGV4X2dldF9tYXgsICAgTUVUSF9OT0FSR1N9LAorICAgIHsibXV0ZXhfc2V0X2FsaWduIiwgKFB5Q0Z1bmN0aW9uKURCRW52X211dGV4X3NldF9hbGlnbiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im11dGV4X2dldF9hbGlnbiIsIChQeUNGdW5jdGlvbilEQkVudl9tdXRleF9nZXRfYWxpZ24sIE1FVEhfTk9BUkdTfSwKKyAgICB7Im11dGV4X3NldF9pbmNyZW1lbnQiLCAoUHlDRnVuY3Rpb24pREJFbnZfbXV0ZXhfc2V0X2luY3JlbWVudCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im11dGV4X2dldF9pbmNyZW1lbnQiLCAoUHlDRnVuY3Rpb24pREJFbnZfbXV0ZXhfZ2V0X2luY3JlbWVudCwKKyAgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsibXV0ZXhfc2V0X3Rhc19zcGlucyIsIChQeUNGdW5jdGlvbilEQkVudl9tdXRleF9zZXRfdGFzX3NwaW5zLAorICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsibXV0ZXhfZ2V0X3Rhc19zcGlucyIsIChQeUNGdW5jdGlvbilEQkVudl9tdXRleF9nZXRfdGFzX3NwaW5zLAorICAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJtdXRleF9zdGF0IiwgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbXV0ZXhfc3RhdCwgICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0NCkKKyAgICB7Im11dGV4X3N0YXRfcHJpbnQiLCAoUHlDRnVuY3Rpb24pREJFbnZfbXV0ZXhfc3RhdF9wcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCisjZW5kaWYKKyAgICB7InNldF9kYXRhX2RpciIsICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfZGF0YV9kaXIsICAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2RhdGFfZGlycyIsICAgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9kYXRhX2RpcnMsICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2ZsYWdzIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9mbGFncywgICAgICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisgICAgeyJzZXRfZmxhZ3MiLCAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2ZsYWdzLCAgICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0NykKKyAgICB7ImxvZ19zZXRfY29uZmlnIiwgIChQeUNGdW5jdGlvbilEQkVudl9sb2dfc2V0X2NvbmZpZywgIE1FVEhfVkFSQVJHU30sCisgICAgeyJsb2dfZ2V0X2NvbmZpZyIsICAoUHlDRnVuY3Rpb24pREJFbnZfbG9nX2dldF9jb25maWcsICBNRVRIX1ZBUkFSR1N9LAorI2VuZGlmCisgICAgeyJzZXRfbGdfYnNpemUiLCAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xnX2JzaXplLCAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9sZ19ic2l6ZSIsICAgIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbGdfYnNpemUsICAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorICAgIHsic2V0X2xnX2RpciIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sZ19kaXIsICAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfbGdfZGlyIiwgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X2xnX2RpciwgICAgICBNRVRIX05PQVJHU30sCisjZW5kaWYKKyAgICB7InNldF9sZ19tYXgiLCAgICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbGdfbWF4LCAgICAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2xnX21heCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9sZ19tYXgsICAgICAgTUVUSF9OT0FSR1N9LAogI2VuZGlmCiAgICAgeyJzZXRfbGdfcmVnaW9ubWF4IiwoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xnX3JlZ2lvbm1heCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7InNldF9sa19kZXRlY3QiLCAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbGtfZGV0ZWN0LCAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9sZ19yZWdpb25tYXgiLChQeUNGdW5jdGlvbilEQkVudl9nZXRfbGdfcmVnaW9ubWF4LCBNRVRIX05PQVJHU30sCisjZW5kaWYKKyNpZiAoREJWRVIgPj0gNDQpCisgICAgeyJzZXRfbGdfZmlsZW1vZGUiLCAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xnX2ZpbGVtb2RlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0X2xnX2ZpbGVtb2RlIiwgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9sZ19maWxlbW9kZSwgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisjaWYgKERCVkVSID49IDQ3KQorICAgIHsic2V0X2xrX3BhcnRpdGlvbnMiLCAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xrX3BhcnRpdGlvbnMsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRfbGtfcGFydGl0aW9ucyIsIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbGtfcGFydGl0aW9ucywgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisgICAgeyJzZXRfbGtfZGV0ZWN0IiwgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xrX2RldGVjdCwgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9sa19kZXRlY3QiLCAgIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbGtfZGV0ZWN0LCAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogI2lmIChEQlZFUiA8IDQ1KQotICAgIHsic2V0X2xrX21heCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sa19tYXgsICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJzZXRfbGtfbWF4IiwgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xrX21heCwgICAgICBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCiAgICAgeyJzZXRfbGtfbWF4X2xvY2tzIiwgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sa19tYXhfbG9ja3MsIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2xrX21heF9sb2NrcyIsIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbGtfbWF4X2xvY2tzLCBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7InNldF9sa19tYXhfbG9ja2VycyIsIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbGtfbWF4X2xvY2tlcnMsIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2xrX21heF9sb2NrZXJzIiwgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9sa19tYXhfbG9ja2VycywgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRfbGtfbWF4X29iamVjdHMiLCAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xrX21heF9vYmplY3RzLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsic2V0X21wX21tYXBzaXplIiwgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9tcF9tbWFwc2l6ZSwgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJzZXRfdG1wX2RpciIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X3RtcF9kaXIsICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InR4bl9iZWdpbiIsICAgICAgIChQeUNGdW5jdGlvbilEQkVudl90eG5fYmVnaW4sICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCi0gICAgeyJ0eG5fY2hlY2twb2ludCIsICAoUHlDRnVuY3Rpb24pREJFbnZfdHhuX2NoZWNrcG9pbnQsICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InR4bl9zdGF0IiwgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl90eG5fc3RhdCwgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsic2V0X3R4X21heCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF90eF9tYXgsICAgICAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2xrX21heF9vYmplY3RzIiwgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9sa19tYXhfb2JqZWN0cywgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisjaWYgKERCVkVSID49IDQzKQorICAgIHsic3RhdF9wcmludCIsICAgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9zdGF0X3ByaW50LAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjZW5kaWYKKyAgICB7InNldF9tcF9tbWFwc2l6ZSIsIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbXBfbW1hcHNpemUsIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X21wX21tYXBzaXplIiwgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9tcF9tbWFwc2l6ZSwgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisgICAgeyJzZXRfdG1wX2RpciIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X3RtcF9kaXIsICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF90bXBfZGlyIiwgICAgIChQeUNGdW5jdGlvbilEQkVudl9nZXRfdG1wX2RpciwgICAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorICAgIHsidHhuX2JlZ2luIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3R4bl9iZWdpbiwgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorICAgIHsidHhuX2NoZWNrcG9pbnQiLCAgKFB5Q0Z1bmN0aW9uKURCRW52X3R4bl9jaGVja3BvaW50LCAgTUVUSF9WQVJBUkdTfSwKKyAgICB7InR4bl9zdGF0IiwgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl90eG5fc3RhdCwgICAgICAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQzKQorICAgIHsidHhuX3N0YXRfcHJpbnQiLCAgKFB5Q0Z1bmN0aW9uKURCRW52X3R4bl9zdGF0X3ByaW50LAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjZW5kaWYKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfdHhfbWF4IiwgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X3R4X21heCwgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJnZXRfdHhfdGltZXN0YW1wIiwgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF90eF90aW1lc3RhbXAsIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorICAgIHsic2V0X3R4X21heCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF90eF9tYXgsICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InNldF90eF90aW1lc3RhbXAiLCAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X3R4X3RpbWVzdGFtcCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImxvY2tfZGV0ZWN0IiwgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2NrX2RldGVjdCwgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsibG9ja19nZXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvY2tfZ2V0LCAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJsb2NrX2lkIiwgICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9ja19pZCwgICAgICAgICAgTUVUSF9OT0FSR1N9LAotICAgIHsibG9ja19pZF9mcmVlIiwgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvY2tfaWRfZnJlZSwgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJsb2NrX3B1dCIsICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9ja19wdXQsICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImxvY2tfc3RhdCIsICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2NrX3N0YXQsICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsibG9nX2FyY2hpdmUiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvZ19hcmNoaXZlLCAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJsb2dfZmx1c2giLCAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9nX2ZsdXNoLCAgICAgICAgTUVUSF9OT0FSR1N9LAotICAgIHsibG9nX3N0YXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvZ19zdGF0LCAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJsb2NrX2RldGVjdCIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9ja19kZXRlY3QsICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsibG9ja19nZXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvY2tfZ2V0LCAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImxvY2tfaWQiLCAgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2NrX2lkLCAgICAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7ImxvY2tfaWRfZnJlZSIsICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2NrX2lkX2ZyZWUsICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJsb2NrX3B1dCIsICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9ja19wdXQsICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsibG9ja19zdGF0IiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvY2tfc3RhdCwgICAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDMpCisgICAgeyJsb2NrX3N0YXRfcHJpbnQiLCAoUHlDRnVuY3Rpb24pREJFbnZfbG9ja19zdGF0X3ByaW50LAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjZW5kaWYKKyAgICB7ImxvZ19jdXJzb3IiLCAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2dfY3Vyc29yLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7ImxvZ19maWxlIiwgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2dfZmlsZSwgICAgICAgIE1FVEhfVkFSQVJHU30sCiAjaWYgKERCVkVSID49IDQ0KQotICAgIHsibHNuX3Jlc2V0IiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xzbl9yZXNldCwgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyAgICB7ImxvZ19wcmludGYiLCAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2dfcHJpbnRmLAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjZW5kaWYKKyAgICB7ImxvZ19hcmNoaXZlIiwgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2dfYXJjaGl2ZSwgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJsb2dfZmx1c2giLCAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9nX2ZsdXNoLCAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJsb2dfc3RhdCIsICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9nX3N0YXQsICAgICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MykKKyAgICB7ImxvZ19zdGF0X3ByaW50IiwgIChQeUNGdW5jdGlvbilEQkVudl9sb2dfc3RhdF9wcmludCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCisjaWYgKERCVkVSID49IDQ0KQorICAgIHsiZmlsZWlkX3Jlc2V0IiwgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2ZpbGVpZF9yZXNldCwgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorICAgIHsibHNuX3Jlc2V0IiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xzbl9yZXNldCwgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogI2VuZGlmCiAgICAgeyJzZXRfZ2V0X3JldHVybnNfbm9uZSIsKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9nZXRfcmV0dXJuc19ub25lLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsidHhuX3JlY292ZXIiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3R4bl9yZWNvdmVyLCAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0eG5fcmVjb3ZlciIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfdHhuX3JlY292ZXIsICAgICBNRVRIX05PQVJHU30sCisjaWYgKERCVkVSIDwgNDgpCiAgICAgeyJzZXRfcnBjX3NlcnZlciIsICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X3JwY19zZXJ2ZXIsCiAgICAgICAgIE1FVEhfVkFSQVJHU3x8TUVUSF9LRVlXT1JEU30sCi0gICAgeyJzZXRfdmVyYm9zZSIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X3ZlcmJvc2UsICAgICAgIE1FVEhfVkFSQVJHU30sCisjZW5kaWYKKyNpZiAoREJWRVIgPj0gNDMpCisgICAgeyJzZXRfbXBfbWF4X29wZW5mZCIsIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbXBfbWF4X29wZW5mZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldF9tcF9tYXhfb3BlbmZkIiwgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9tcF9tYXhfb3BlbmZkLCBNRVRIX05PQVJHU30sCisgICAgeyJzZXRfbXBfbWF4X3dyaXRlIiwgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9tcF9tYXhfd3JpdGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRfbXBfbWF4X3dyaXRlIiwgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9tcF9tYXhfd3JpdGUsIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorICAgIHsic2V0X3ZlcmJvc2UiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF92ZXJib3NlLCAgICAgTUVUSF9WQVJBUkdTfSwKICNpZiAoREJWRVIgPj0gNDIpCiAgICAgeyJnZXRfdmVyYm9zZSIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X3ZlcmJvc2UsICAgICAgIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKQEAgLTY1ODEsNiArODg0MSwxNyBAQAogICAgIHsicmVwX3NldF90aW1lb3V0IiwgKFB5Q0Z1bmN0aW9uKURCRW52X3JlcF9zZXRfdGltZW91dCwgTUVUSF9WQVJBUkdTfSwKICAgICB7InJlcF9nZXRfdGltZW91dCIsIChQeUNGdW5jdGlvbilEQkVudl9yZXBfZ2V0X3RpbWVvdXQsIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKKyNpZiAoREJWRVIgPj0gNDcpCisgICAgeyJyZXBfc2V0X2Nsb2Nrc2tldyIsIChQeUNGdW5jdGlvbilEQkVudl9yZXBfc2V0X2Nsb2Nrc2tldywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlcF9nZXRfY2xvY2tza2V3IiwgKFB5Q0Z1bmN0aW9uKURCRW52X3JlcF9nZXRfY2xvY2tza2V3LCBNRVRIX1ZBUkFSR1N9LAorI2VuZGlmCisgICAgeyJyZXBfc3RhdCIsIChQeUNGdW5jdGlvbilEQkVudl9yZXBfc3RhdCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2lmIChEQlZFUiA+PSA0MykKKyAgICB7InJlcF9zdGF0X3ByaW50IiwgKFB5Q0Z1bmN0aW9uKURCRW52X3JlcF9zdGF0X3ByaW50LAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjZW5kaWYKKwogI2lmIChEQlZFUiA+PSA0NSkKICAgICB7InJlcG1ncl9zdGFydCIsIChQeUNGdW5jdGlvbilEQkVudl9yZXBtZ3Jfc3RhcnQsCiAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKQEAgLTY2MTEsNiArODg4MiwxMiBAQAogICAgIHsiZGlzY2FyZCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCVHhuX2Rpc2NhcmQsICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJhYm9ydCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJUeG5fYWJvcnQsICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7ImlkIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilEQlR4bl9pZCwgICAgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsic2V0X3RpbWVvdXQiLCAgICAgKFB5Q0Z1bmN0aW9uKURCVHhuX3NldF90aW1lb3V0LAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjaWYgKERCVkVSID49IDQ0KQorICAgIHsic2V0X25hbWUiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCVHhuX3NldF9uYW1lLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0X25hbWUiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCVHhuX2dldF9uYW1lLCBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7TlVMTCwgICAgICBOVUxMfSAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNjYyMSw3ICs4ODk4LDcgQEAKICAgICB7ImdldCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilEQlNlcXVlbmNlX2dldCwgICAgICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJnZXRfZGJwIiwgICAgICAgICAoUHlDRnVuY3Rpb24pREJTZXF1ZW5jZV9nZXRfZGJwLCAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsiZ2V0X2tleSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCU2VxdWVuY2VfZ2V0X2tleSwgICAgICAgIE1FVEhfTk9BUkdTfSwKLSAgICB7ImluaXRfdmFsdWUiLCAgICAgIChQeUNGdW5jdGlvbilEQlNlcXVlbmNlX2luaXRfdmFsdWUsICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5pdGlhbF92YWx1ZSIsICAgKFB5Q0Z1bmN0aW9uKURCU2VxdWVuY2VfaW5pdGlhbF92YWx1ZSwgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJvcGVuIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJTZXF1ZW5jZV9vcGVuLCAgICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsicmVtb3ZlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCU2VxdWVuY2VfcmVtb3ZlLCAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7InNldF9jYWNoZXNpemUiLCAgIChQeUNGdW5jdGlvbilEQlNlcXVlbmNlX3NldF9jYWNoZXNpemUsICBNRVRIX1ZBUkFSR1N9LApAQCAtNjYzMSw2ICs4OTA4LDggQEAKICAgICB7InNldF9yYW5nZSIsICAgICAgIChQeUNGdW5jdGlvbilEQlNlcXVlbmNlX3NldF9yYW5nZSwgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0X3JhbmdlIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCU2VxdWVuY2VfZ2V0X3JhbmdlLCAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InN0YXQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilEQlNlcXVlbmNlX3N0YXQsICAgICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisgICAgeyJzdGF0X3ByaW50IiwgICAgICAoUHlDRnVuY3Rpb24pREJTZXF1ZW5jZV9zdGF0X3ByaW50LAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAge05VTEwsICAgICAgTlVMTH0gICAgICAgLyogc2VudGluZWwgKi8KIH07CiAjZW5kaWYKQEAgLTY2NDQsNyArODkyMyw5IEBACiAgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CiAKICNpZiAoREJWRVIgPj0gNDIpCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOwogICAgIHNlbGYtPmRiX2Vudi0+Z2V0X2hvbWUoc2VsZi0+ZGJfZW52LCAmaG9tZSk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKICNlbHNlCiAgICAgaG9tZT1zZWxmLT5kYl9lbnYtPmRiX2hvbWU7CiAjZW5kaWYKQEAgLTY2NzksNyArODk2MCw3IEBACiAgICAgMCwgICAgICAgICAgLyp0cF9jb21wYXJlKi8KICAgICAwLCAgICAgICAgICAvKnRwX3JlcHIqLwogICAgIDAsICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KLSAgICAwLCAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAmREJfc2VxdWVuY2UsLyp0cF9hc19zZXF1ZW5jZSovCiAgICAgJkRCX21hcHBpbmcsLyp0cF9hc19tYXBwaW5nKi8KICAgICAwLCAgICAgICAgICAvKnRwX2hhc2gqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLwpAQCAtNjc0Nyw2ICs5MDI4LDQ5IEBACiB9OwogCiAKK3N0YXRpY2hlcmUgUHlUeXBlT2JqZWN0IERCTG9nQ3Vyc29yX1R5cGUgPSB7CisjaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMzAwMDAwMCkKKyAgICBQeU9iamVjdF9IRUFEX0lOSVQoTlVMTCkKKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qb2Jfc2l6ZSovCisjZWxzZQorICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorI2VuZGlmCisgICAgIkRCTG9nQ3Vyc29yIiwgICAgICAgICAvKnRwX25hbWUqLworICAgIHNpemVvZihEQkxvZ0N1cnNvck9iamVjdCksICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCisgICAgLyogbWV0aG9kcyAqLworICAgIChkZXN0cnVjdG9yKURCTG9nQ3Vyc29yX2RlYWxsb2MsLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgLyp0cF9jb21wYXJlKi8KKyAgICAwLCAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgIC8qdHBfaGFzaCovCisgICAgMCwgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDApCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX1dFQUtSRUZTLCAgICAgIC8qIHRwX2ZsYWdzICovCisjZWxzZQorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAvKiB0cF9mbGFncyAqLworI2VuZGlmCisgICAgMCwgICAgICAgICAgLyogdHBfZG9jICovCisgICAgMCwgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgb2Zmc2V0b2YoREJMb2dDdXJzb3JPYmplY3QsIGluX3dlYWtyZWZsaXN0KSwgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgIC8qdHBfaXRlciovCisgICAgMCwgICAgICAgICAgLyp0cF9pdGVybmV4dCovCisgICAgREJMb2dDdXJzb3JfbWV0aG9kcywgLyp0cF9tZXRob2RzKi8KKyAgICAwLCAgICAgICAgICAvKnRwX21lbWJlcnMqLworfTsKKworCiBzdGF0aWNoZXJlIFB5VHlwZU9iamVjdCBEQkVudl9UeXBlID0gewogI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDApCiAgICAgUHlPYmplY3RfSEVBRF9JTklUKE5VTEwpCkBAIC03MDMxLDE0ICs5MzU1LDI2IEBACiB7CiAgICAgUHlPYmplY3QqIG07CiAgICAgUHlPYmplY3QqIGQ7Ci0gICAgUHlPYmplY3QqIHB5YnNkZGJfdmVyc2lvbl9zID0gUHlCeXRlc19Gcm9tU3RyaW5nKCBQWV9CU0REQl9WRVJTSU9OICk7Ci0gICAgUHlPYmplY3QqIGRiX3ZlcnNpb25fcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZyggREJfVkVSU0lPTl9TVFJJTkcgKTsKLSAgICBQeU9iamVjdCogY3ZzaWRfcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZyggcmNzX2lkICk7CiAgICAgUHlPYmplY3QqIHB5X2FwaTsKKyAgICBQeU9iamVjdCogcHlic2RkYl92ZXJzaW9uX3M7CisgICAgUHlPYmplY3QqIGRiX3ZlcnNpb25fczsKKyAgICBQeU9iamVjdCogY3ZzaWRfczsKKworI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDApCisgICAgcHlic2RkYl92ZXJzaW9uX3MgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKFBZX0JTRERCX1ZFUlNJT04pOworICAgIGRiX3ZlcnNpb25fcyA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoREJfVkVSU0lPTl9TVFJJTkcpOworICAgIGN2c2lkX3MgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHJjc19pZCk7CisjZWxzZQorICAgIC8qIFRoaXMgZGF0YSBzaG91bGQgYmUgYXNjaWksIHNvIFVURi04IGNvbnZlcnNpb24gaXMgZmluZSAqLworICAgIHB5YnNkZGJfdmVyc2lvbl9zID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoUFlfQlNEREJfVkVSU0lPTik7CisgICAgZGJfdmVyc2lvbl9zID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoREJfVkVSU0lPTl9TVFJJTkcpOworICAgIGN2c2lkX3MgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhyY3NfaWQpOworI2VuZGlmCiAKICAgICAvKiBJbml0aWFsaXplIG9iamVjdCB0eXBlcyAqLwogICAgIGlmICgoUHlUeXBlX1JlYWR5KCZEQl9UeXBlKSA8IDApCiAgICAgICAgIHx8IChQeVR5cGVfUmVhZHkoJkRCQ3Vyc29yX1R5cGUpIDwgMCkKKyAgICAgICAgfHwgKFB5VHlwZV9SZWFkeSgmREJMb2dDdXJzb3JfVHlwZSkgPCAwKQogICAgICAgICB8fCAoUHlUeXBlX1JlYWR5KCZEQkVudl9UeXBlKSA8IDApCiAgICAgICAgIHx8IChQeVR5cGVfUmVhZHkoJkRCVHhuX1R5cGUpIDwgMCkKICAgICAgICAgfHwgKFB5VHlwZV9SZWFkeSgmREJMb2NrX1R5cGUpIDwgMCkKQEAgLTcwOTEsNiArOTQyNyw3IEBACiAgICAgQUREX0lOVChkLCBEQl9NQVhfUEFHRVMpOwogICAgIEFERF9JTlQoZCwgREJfTUFYX1JFQ09SRFMpOwogCisjaWYgKERCVkVSIDwgNDgpCiAjaWYgKERCVkVSID49IDQyKQogICAgIEFERF9JTlQoZCwgREJfUlBDQ0xJRU5UKTsKICNlbHNlCkBAIC03MDk4LDcgKzk0MzUsMTEgQEAKICAgICAvKiBhbGxvdyBhcHBzIHRvIGJlIHdyaXR0ZW4gdXNpbmcgREJfUlBDQ0xJRU5UIG9uIG9sZGVyIEJlcmtlbGV5IERCICovCiAgICAgX2FkZEludFRvRGljdChkLCAiREJfUlBDQ0xJRU5UIiwgREJfQ0xJRU5UKTsKICNlbmRpZgorI2VuZGlmCisKKyNpZiAoREJWRVIgPCA0OCkKICAgICBBRERfSU5UKGQsIERCX1hBX0NSRUFURSk7CisjZW5kaWYKIAogICAgIEFERF9JTlQoZCwgREJfQ1JFQVRFKTsKICAgICBBRERfSU5UKGQsIERCX05PTU1BUCk7CkBAIC03MTE1LDcgKzk0NTYsMTMgQEAKICAgICBBRERfSU5UKGQsIERCX0lOSVRfVFhOKTsKICAgICBBRERfSU5UKGQsIERCX0pPSU5FTlYpOwogCisjaWYgKERCVkVSID49IDQ4KQorICAgIEFERF9JTlQoZCwgREJfR0lEX1NJWkUpOworI2Vsc2UKICAgICBBRERfSU5UKGQsIERCX1hJRERBVEFTSVpFKTsKKyAgICAvKiBBbGxvdyBuZXcgY29kZSB0byB3b3JrIGluIG9sZCBCREIgcmVsZWFzZXMgKi8KKyAgICBfYWRkSW50VG9EaWN0KGQsICJEQl9HSURfU0laRSIsIERCX1hJRERBVEFTSVpFKTsKKyNlbmRpZgogCiAgICAgQUREX0lOVChkLCBEQl9SRUNPVkVSKTsKICAgICBBRERfSU5UKGQsIERCX1JFQ09WRVJfRkFUQUwpOwpAQCAtNzEzMCw2ICs5NDc3LDEwIEBACiAgICAgQUREX0lOVChkLCBEQl9UWE5fU1lOQyk7CiAgICAgQUREX0lOVChkLCBEQl9UWE5fTk9XQUlUKTsKIAorI2lmIChEQlZFUiA+PSA0NikKKyAgICBBRERfSU5UKGQsIERCX1RYTl9XQUlUKTsKKyNlbmRpZgorCiAgICAgQUREX0lOVChkLCBEQl9FWENMKTsKICAgICBBRERfSU5UKGQsIERCX0ZDTlRMX0xPQ0tJTkcpOwogICAgIEFERF9JTlQoZCwgREJfT0RERklMRVNJWkUpOwpAQCAtNzE0MSw2ICs5NDkyLDcgQEAKICAgICBBRERfSU5UKGQsIERCX1ZFUklGWSk7CiAgICAgQUREX0lOVChkLCBEQl9VUEdSQURFKTsKIAorICAgIEFERF9JTlQoZCwgREJfUFJJTlRBQkxFKTsKICAgICBBRERfSU5UKGQsIERCX0FHR1JFU1NJVkUpOwogICAgIEFERF9JTlQoZCwgREJfTk9PUkRFUkNISyk7CiAgICAgQUREX0lOVChkLCBEQl9PUkRFUkNIS09OTFkpOwpAQCAtNzIyNiw2ICs5NTc4LDEwIEBACiAgICAgQUREX0lOVChkLCBEQl9SRVZTUExJVE9GRik7CiAgICAgQUREX0lOVChkLCBEQl9TTkFQU0hPVCk7CiAKKyNpZiAoREJWRVIgPj0gNDMpCisgICAgQUREX0lOVChkLCBEQl9JTk9SREVSKTsKKyNlbmRpZgorCiAgICAgQUREX0lOVChkLCBEQl9KT0lOX05PU09SVCk7CiAKICAgICBBRERfSU5UKGQsIERCX0FGVEVSKTsKQEAgLTcyMzUsMTIgKzk1OTEsNiBAQAogICAgIEFERF9JTlQoZCwgREJfQ0FDSEVEX0NPVU5UUyk7CiAjZW5kaWYKIAotI2lmIChEQlZFUiA+PSA0MSkKLSAgICBfYWRkSW50VG9EaWN0KGQsICJEQl9DSEVDS1BPSU5UIiwgMCk7Ci0jZWxzZQotICAgIEFERF9JTlQoZCwgREJfQ0hFQ0tQT0lOVCk7Ci0gICAgQUREX0lOVChkLCBEQl9DVVJMU04pOwotI2VuZGlmCiAjaWYgKERCVkVSIDw9IDQxKQogICAgIEFERF9JTlQoZCwgREJfQ09NTUlUKTsKICNlbmRpZgpAQCAtNzI1MSw2ICs5NjAxLDcgQEAKICAgICBBRERfSU5UKGQsIERCX0ZJUlNUKTsKICAgICBBRERfSU5UKGQsIERCX0ZMVVNIKTsKICAgICBBRERfSU5UKGQsIERCX0dFVF9CT1RIKTsKKyAgICBBRERfSU5UKGQsIERCX0dFVF9CT1RIX1JBTkdFKTsKICAgICBBRERfSU5UKGQsIERCX0dFVF9SRUNOTyk7CiAgICAgQUREX0lOVChkLCBEQl9KT0lOX0lURU0pOwogICAgIEFERF9JTlQoZCwgREJfS0VZRklSU1QpOwpAQCAtNzI2NSw2ICs5NjE2LDkgQEAKICAgICBBRERfSU5UKGQsIERCX1BPU0lUSU9OKTsKICAgICBBRERfSU5UKGQsIERCX1BSRVYpOwogICAgIEFERF9JTlQoZCwgREJfUFJFVl9OT0RVUCk7CisjaWYgKERCVkVSID49IDQ2KQorICAgIEFERF9JTlQoZCwgREJfUFJFVl9EVVApOworI2VuZGlmCiAjaWYgKERCVkVSIDwgNDUpCiAgICAgQUREX0lOVChkLCBEQl9SRUNPUkRDT1VOVCk7CiAjZW5kaWYKQEAgLTcyODAsMTcgKzk2MzQsMTggQEAKICAgICBBRERfSU5UKGQsIERCX01VTFRJUExFX0tFWSk7CiAKICNpZiAoREJWRVIgPj0gNDQpCisgICAgQUREX0lOVChkLCBEQl9JTU1VVEFCTEVfS0VZKTsKICAgICBBRERfSU5UKGQsIERCX1JFQURfVU5DT01NSVRURUQpOyAgICAvKiByZXBsYWNlcyBEQl9ESVJUWV9SRUFEIGluIDQuNCAqLwogICAgIEFERF9JTlQoZCwgREJfUkVBRF9DT01NSVRURUQpOwogI2VuZGlmCiAKKyNpZiAoREJWRVIgPj0gNDQpCisgICAgQUREX0lOVChkLCBEQl9GUkVFTElTVF9PTkxZKTsKKyAgICBBRERfSU5UKGQsIERCX0ZSRUVfU1BBQ0UpOworI2VuZGlmCisKICAgICBBRERfSU5UKGQsIERCX0RPTk9USU5ERVgpOwogCi0jaWYgKERCVkVSID49IDQxKQotICAgIF9hZGRJbnRUb0RpY3QoZCwgIkRCX0lOQ09NUExFVEUiLCAwKTsKLSNlbHNlCi0gICAgQUREX0lOVChkLCBEQl9JTkNPTVBMRVRFKTsKLSNlbmRpZgogICAgIEFERF9JTlQoZCwgREJfS0VZRU1QVFkpOwogICAgIEFERF9JTlQoZCwgREJfS0VZRVhJU1QpOwogICAgIEFERF9JTlQoZCwgREJfTE9DS19ERUFETE9DSyk7CkBAIC03MzExLDE0ICs5NjY2LDMwIEBACiAgICAgQUREX0lOVChkLCBEQl9QQU5JQ19FTlZJUk9OTUVOVCk7CiAgICAgQUREX0lOVChkLCBEQl9OT1BBTklDKTsKIAotI2lmIChEQlZFUiA+PSA0MSkKICAgICBBRERfSU5UKGQsIERCX09WRVJXUklURSk7CisKKyNpZiAoREJWRVIgPj0gNDMpCisgICAgQUREX0lOVChkLCBEQl9TVEFUX1NVQlNZU1RFTSk7CisgICAgQUREX0lOVChkLCBEQl9TVEFUX01FTVBfSEFTSCk7CiAjZW5kaWYKIAotI2lmZGVmIERCX1JFR0lTVEVSCisjaWYgKERCVkVSID49IDQ4KQorICAgIEFERF9JTlQoZCwgREJfT1ZFUldSSVRFX0RVUCk7CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NykKKyAgICBBRERfSU5UKGQsIERCX0ZPUkVJR05fQUJPUlQpOworICAgIEFERF9JTlQoZCwgREJfRk9SRUlHTl9DQVNDQURFKTsKKyAgICBBRERfSU5UKGQsIERCX0ZPUkVJR05fTlVMTElGWSk7CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NCkKICAgICBBRERfSU5UKGQsIERCX1JFR0lTVEVSKTsKICNlbmRpZgogCisgICAgQUREX0lOVChkLCBEQl9FSURfSU5WQUxJRCk7CisgICAgQUREX0lOVChkLCBEQl9FSURfQlJPQURDQVNUKTsKKwogI2lmIChEQlZFUiA+PSA0MikKICAgICBBRERfSU5UKGQsIERCX1RJTUVfTk9UR1JBTlRFRCk7CiAgICAgQUREX0lOVChkLCBEQl9UWE5fTk9UX0RVUkFCTEUpOwpAQCAtNzM5MSw2ICs5NzYyLDMyIEBACiAKICAgICBBRERfSU5UKGQsIERCX1JFUF9NQVNURVIpOwogICAgIEFERF9JTlQoZCwgREJfUkVQX0NMSUVOVCk7CisKKyAgICBBRERfSU5UKGQsIERCX1JFUF9QRVJNQU5FTlQpOworCisjaWYgKERCVkVSID49IDQ0KQorICAgIEFERF9JTlQoZCwgREJfUkVQX0NPTkZfTk9BVVRPSU5JVCk7CisgICAgQUREX0lOVChkLCBEQl9SRVBfQ09ORl9ERUxBWUNMSUVOVCk7CisgICAgQUREX0lOVChkLCBEQl9SRVBfQ09ORl9CVUxLKTsKKyAgICBBRERfSU5UKGQsIERCX1JFUF9DT05GX05PV0FJVCk7CisgICAgQUREX0lOVChkLCBEQl9SRVBfQU5ZV0hFUkUpOworICAgIEFERF9JTlQoZCwgREJfUkVQX1JFUkVRVUVTVCk7CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0MikKKyAgICBBRERfSU5UKGQsIERCX1JFUF9OT0JVRkZFUik7CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NikKKyAgICBBRERfSU5UKGQsIERCX1JFUF9MRUFTRV9FWFBJUkVEKTsKKyAgICBBRERfSU5UKGQsIERCX0lHTk9SRV9MRUFTRSk7CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NykKKyAgICBBRERfSU5UKGQsIERCX1JFUF9DT05GX0xFQVNFKTsKKyAgICBBRERfSU5UKGQsIERCX1JFUE1HUl9DT05GXzJTSVRFX1NUUklDVCk7CisjZW5kaWYKKwogI2lmIChEQlZFUiA+PSA0NSkKICAgICBBRERfSU5UKGQsIERCX1JFUF9FTEVDVElPTik7CiAKQEAgLTc0MDIsNiArOTc5OSwxMSBAQAogI2lmIChEQlZFUiA+PSA0NikKICAgICBBRERfSU5UKGQsIERCX1JFUF9DSEVDS1BPSU5UX0RFTEFZKTsKICAgICBBRERfSU5UKGQsIERCX1JFUF9GVUxMX0VMRUNUSU9OX1RJTUVPVVQpOworICAgIEFERF9JTlQoZCwgREJfUkVQX0xFQVNFX1RJTUVPVVQpOworI2VuZGlmCisjaWYgKERCVkVSID49IDQ3KQorICAgIEFERF9JTlQoZCwgREJfUkVQX0hFQVJUQkVBVF9NT05JVE9SKTsKKyAgICBBRERfSU5UKGQsIERCX1JFUF9IRUFSVEJFQVRfU0VORCk7CiAjZW5kaWYKIAogI2lmIChEQlZFUiA+PSA0NSkKQEAgLTc0MTQsNyArOTgxNiw2IEBACiAgICAgQUREX0lOVChkLCBEQl9SRVBNR1JfQUNLU19RVU9SVU0pOwogICAgIEFERF9JTlQoZCwgREJfUkVQTUdSX0NPTk5FQ1RFRCk7CiAgICAgQUREX0lOVChkLCBEQl9SRVBNR1JfRElTQ09OTkVDVEVEKTsKLSAgICBBRERfSU5UKGQsIERCX1NUQVRfQ0xFQVIpOwogICAgIEFERF9JTlQoZCwgREJfU1RBVF9BTEwpOwogI2VuZGlmCiAKQEAgLTc0MzAsMTIgKzk4MzEsMTYgQEAKICAgICBBRERfSU5UKGQsIERCX0RTWU5DX0xPRyk7CiAjZW5kaWYKIAotI2lmIChEQlZFUiA+PSA0MSkKICAgICBBRERfSU5UKGQsIERCX0VOQ1JZUFRfQUVTKTsKICAgICBBRERfSU5UKGQsIERCX0FVVE9fQ09NTUlUKTsKLSNlbHNlCi0gICAgLyogYWxsb3cgQmVya2VsZXkgREIgNC4xIGF3YXJlIGFwcHMgdG8gcnVuIG9uIG9sZGVyIHZlcnNpb25zICovCi0gICAgX2FkZEludFRvRGljdChkLCAiREJfQVVUT19DT01NSVQiLCAwKTsKKyAgICBBRERfSU5UKGQsIERCX1BSSU9SSVRZX1ZFUllfTE9XKTsKKyAgICBBRERfSU5UKGQsIERCX1BSSU9SSVRZX0xPVyk7CisgICAgQUREX0lOVChkLCBEQl9QUklPUklUWV9ERUZBVUxUKTsKKyAgICBBRERfSU5UKGQsIERCX1BSSU9SSVRZX0hJR0gpOworICAgIEFERF9JTlQoZCwgREJfUFJJT1JJVFlfVkVSWV9ISUdIKTsKKworI2lmIChEQlZFUiA+PSA0NikKKyAgICBBRERfSU5UKGQsIERCX1BSSU9SSVRZX1VOQ0hBTkdFRCk7CiAjZW5kaWYKIAogICAgIEFERF9JTlQoZCwgRUlOVkFMKTsKQEAgLTc0OTksMTIgKzk5MDQsNyBAQAogICAgIH0KICNlbmRpZgogCi0KLSNpZiAhSU5DT01QTEVURV9JU19XQVJOSU5HCi0gICAgTUFLRV9FWChEQkluY29tcGxldGVFcnJvcik7Ci0jZW5kaWYKICAgICBNQUtFX0VYKERCQ3Vyc29yQ2xvc2VkRXJyb3IpOwotICAgIE1BS0VfRVgoREJLZXlFbXB0eUVycm9yKTsKICAgICBNQUtFX0VYKERCS2V5RXhpc3RFcnJvcik7CiAgICAgTUFLRV9FWChEQkxvY2tEZWFkbG9ja0Vycm9yKTsKICAgICBNQUtFX0VYKERCTG9ja05vdEdyYW50ZWRFcnJvcik7CkBAIC03NTMwLDI1ICs5OTMwLDY5IEBACiAjaWYgKERCVkVSID49IDQyKQogICAgIE1BS0VfRVgoREJSZXBIYW5kbGVEZWFkRXJyb3IpOwogI2VuZGlmCisjaWYgKERCVkVSID49IDQ0KQorICAgIE1BS0VfRVgoREJSZXBMb2Nrb3V0RXJyb3IpOworI2VuZGlmCiAKICAgICBNQUtFX0VYKERCUmVwVW5hdmFpbEVycm9yKTsKIAorI2lmIChEQlZFUiA+PSA0NikKKyAgICBNQUtFX0VYKERCUmVwTGVhc2VFeHBpcmVkRXJyb3IpOworI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDcpCisgICAgICAgIE1BS0VfRVgoREJGb3JlaWduQ29uZmxpY3RFcnJvcik7CisjZW5kaWYKKwogI3VuZGVmIE1BS0VfRVgKIAotICAgIC8qIEluaXRpbGlhc2UgdGhlIEMgQVBJIHN0cnVjdHVyZSBhbmQgYWRkIGl0IHRvIHRoZSBtb2R1bGUgKi8KLSAgICBic2RkYl9hcGkuZGJfdHlwZSAgICAgICAgID0gJkRCX1R5cGU7Ci0gICAgYnNkZGJfYXBpLmRiY3Vyc29yX3R5cGUgICA9ICZEQkN1cnNvcl9UeXBlOwotICAgIGJzZGRiX2FwaS5kYmVudl90eXBlICAgICAgPSAmREJFbnZfVHlwZTsKLSAgICBic2RkYl9hcGkuZGJ0eG5fdHlwZSAgICAgID0gJkRCVHhuX1R5cGU7Ci0gICAgYnNkZGJfYXBpLmRibG9ja190eXBlICAgICA9ICZEQkxvY2tfVHlwZTsKKyAgICAvKiBJbml0aWFsaXNlIHRoZSBDIEFQSSBzdHJ1Y3R1cmUgYW5kIGFkZCBpdCB0byB0aGUgbW9kdWxlICovCisgICAgYnNkZGJfYXBpLmRiX3R5cGUgICAgICAgICAgPSAmREJfVHlwZTsKKyAgICBic2RkYl9hcGkuZGJjdXJzb3JfdHlwZSAgICA9ICZEQkN1cnNvcl9UeXBlOworICAgIGJzZGRiX2FwaS5kYmxvZ2N1cnNvcl90eXBlID0gJkRCTG9nQ3Vyc29yX1R5cGU7CisgICAgYnNkZGJfYXBpLmRiZW52X3R5cGUgICAgICAgPSAmREJFbnZfVHlwZTsKKyAgICBic2RkYl9hcGkuZGJ0eG5fdHlwZSAgICAgICA9ICZEQlR4bl9UeXBlOworICAgIGJzZGRiX2FwaS5kYmxvY2tfdHlwZSAgICAgID0gJkRCTG9ja19UeXBlOwogI2lmIChEQlZFUiA+PSA0MykKLSAgICBic2RkYl9hcGkuZGJzZXF1ZW5jZV90eXBlID0gJkRCU2VxdWVuY2VfVHlwZTsKKyAgICBic2RkYl9hcGkuZGJzZXF1ZW5jZV90eXBlICA9ICZEQlNlcXVlbmNlX1R5cGU7CiAjZW5kaWYKLSAgICBic2RkYl9hcGkubWFrZURCRXJyb3IgICAgID0gbWFrZURCRXJyb3I7CisgICAgYnNkZGJfYXBpLm1ha2VEQkVycm9yICAgICAgPSBtYWtlREJFcnJvcjsKIAorICAgIC8qCisgICAgKiogQ2Fwc3VsZXMgZXhpc3QgZnJvbSBQeXRob24gMy4xLCBidXQgSQorICAgICoqIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhlIEFQSSBjb21wYXRpYmlsaXR5CisgICAgKiogZm9yIGFscmVhZHkgcHVibGlzaGVkIFB5dGhvbiB2ZXJzaW9ucy4KKyAgICAqLworI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMjAwMDApCiAgICAgcHlfYXBpID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKCh2b2lkKikmYnNkZGJfYXBpLCBOVUxMKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiYXBpIiwgcHlfYXBpKTsKLSAgICBQeV9ERUNSRUYocHlfYXBpKTsKKyNlbHNlCisgICAgeworICAgICAgICBjaGFyIHB5X2FwaV9uYW1lWzI1MF07CisKKyAgICAgICAgc3RyY3B5KHB5X2FwaV9uYW1lLCBfYnNkZGJNb2R1bGVOYW1lKTsKKyAgICAgICAgc3RyY2F0KHB5X2FwaV9uYW1lLCAiLmFwaSIpOworCisgICAgICAgIHB5X2FwaSA9IFB5Q2Fwc3VsZV9OZXcoKHZvaWQqKSZic2RkYl9hcGksIHB5X2FwaV9uYW1lLCBOVUxMKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIENoZWNrIGVycm9yIGNvbnRyb2wgKi8KKyAgICAvKgorICAgICoqIFB5RXJyX05vTWVtb3J5KCk7CisgICAgKiogcHlfYXBpID0gTlVMTDsKKyAgICAqLworCisgICAgaWYgKHB5X2FwaSkgeworICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiYXBpIiwgcHlfYXBpKTsKKyAgICAgICAgUHlfREVDUkVGKHB5X2FwaSk7CisgICAgfSBlbHNlIHsgLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCAqLworICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUobSk7CisgICAgICAgIGlmKFB5RXJyX1dhcm4oUHlFeGNfUnVudGltZVdhcm5pbmcsCisgICAgICAgICAgICAgICAgIl9ic2RkYi9fcHlic2RkYiBDIEFQSSB3aWxsIGJlIG5vdCBhdmFpbGFibGUiKSkgeworICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKG0pOworICAgICAgICB9CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQogCiAgICAgLyogQ2hlY2sgZm9yIGVycm9ycyAqLwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYyBiL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCmluZGV4IDNiMDdiNmQuLjExZDdjZDAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCkBAIC02NDcsNyArNjQ3LDcgQEAKICAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9BU19EQVRBKG9iaik7CiAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0RBVEFfU0laRShvYmopOwogICAgICAgICByZXR1cm4gY29kZWNfdHVwbGUoUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoZGF0YSwgc2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRShvYmopKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChQeU9iamVjdF9Bc1JlYWRCdWZmZXIob2JqLCAoY29uc3Qgdm9pZCAqKikmZGF0YSwgJnNpemUpKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYyBiL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKaW5kZXggNmFhZGVjMS4uZmFhMjU3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCkBAIC0yNzYsNiArMjc2LDIzIEBACiAKIFB5RG9jX1NUUlZBUihhcHBlbmRsZWZ0X2RvYywgIkFkZCBhbiBlbGVtZW50IHRvIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGRlcXVlLiIpOwogCisKKy8qIFJ1biBhbiBpdGVyYXRvciB0byBleGhhdXN0aW9uLiAgU2hvcnRjdXQgZm9yCisgICB0aGUgZXh0ZW5kL2V4dGVuZGxlZnQgbWV0aG9kcyB3aGVuIG1heGxlbiA9PSAwLiAqLworc3RhdGljIFB5T2JqZWN0KgorY29uc3VtZV9pdGVyYXRvcihQeU9iamVjdCAqaXQpCit7CisgICAgUHlPYmplY3QgKml0ZW07CisKKyAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgIH0KKyAgICBQeV9ERUNSRUYoaXQpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIGRlcXVlX2V4dGVuZChkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICppdGVyYWJsZSkKIHsKQEAgLTI5Niw2ICszMTMsOSBAQAogICAgIGlmIChpdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChkZXF1ZS0+bWF4bGVuID09IDApCisgICAgICAgIHJldHVybiBjb25zdW1lX2l0ZXJhdG9yKGl0KTsKKwogICAgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewogICAgICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IEJMT0NLTEVOLTEpIHsKQEAgLTM0NSw2ICszNjUsOSBAQAogICAgIGlmIChpdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChkZXF1ZS0+bWF4bGVuID09IDApCisgICAgICAgIHJldHVybiBjb25zdW1lX2l0ZXJhdG9yKGl0KTsKKwogICAgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewogICAgICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gMCkgewpAQCAtNDM5LDYgKzQ2Miw5MSBAQAogUHlEb2NfU1RSVkFSKHJvdGF0ZV9kb2MsCiAiUm90YXRlIHRoZSBkZXF1ZSBuIHN0ZXBzIHRvIHRoZSByaWdodCAoZGVmYXVsdCBuPTEpLiAgSWYgbiBpcyBuZWdhdGl2ZSwgcm90YXRlcyBsZWZ0LiIpOwogCitzdGF0aWMgUHlPYmplY3QgKgorZGVxdWVfcmV2ZXJzZShkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICp1bnVzZWQpCit7CisgICAgYmxvY2sgKmxlZnRibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgYmxvY2sgKnJpZ2h0YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jazsKKyAgICBQeV9zc2l6ZV90IGxlZnRpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CisgICAgUHlfc3NpemVfdCByaWdodGluZGV4ID0gZGVxdWUtPnJpZ2h0aW5kZXg7CisgICAgUHlfc3NpemVfdCBuID0gKGRlcXVlLT5sZW4pLzI7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5T2JqZWN0ICp0bXA7CisKKyAgICBmb3IgKGk9MCA7IGk8biA7IGkrKykgeworICAgICAgICAvKiBWYWxpZGF0ZSB0aGF0IHBvaW50ZXJzIGhhdmVuJ3QgbWV0IGluIHRoZSBtaWRkbGUgKi8KKyAgICAgICAgYXNzZXJ0KGxlZnRibG9jayAhPSByaWdodGJsb2NrIHx8IGxlZnRpbmRleCA8IHJpZ2h0aW5kZXgpOworCisgICAgICAgIC8qIFN3YXAgKi8KKyAgICAgICAgdG1wID0gbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleF07CisgICAgICAgIGxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdID0gcmlnaHRibG9jay0+ZGF0YVtyaWdodGluZGV4XTsKKyAgICAgICAgcmlnaHRibG9jay0+ZGF0YVtyaWdodGluZGV4XSA9IHRtcDsKKworICAgICAgICAvKiBBZHZhbmNlIGxlZnQgYmxvY2svaW5kZXggcGFpciAqLworICAgICAgICBsZWZ0aW5kZXgrKzsKKyAgICAgICAgaWYgKGxlZnRpbmRleCA9PSBCTE9DS0xFTikgeworICAgICAgICAgICAgaWYgKGxlZnRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBsZWZ0YmxvY2sgPSBsZWZ0YmxvY2stPnJpZ2h0bGluazsKKyAgICAgICAgICAgIGxlZnRpbmRleCA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvKiBTdGVwIGJhY2t3YXJkcyB3aXRoIHRoZSByaWdodCBibG9jay9pbmRleCBwYWlyICovCisgICAgICAgIHJpZ2h0aW5kZXgtLTsKKyAgICAgICAgaWYgKHJpZ2h0aW5kZXggPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChyaWdodGJsb2NrLT5sZWZ0bGluayA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmlnaHRibG9jayA9IHJpZ2h0YmxvY2stPmxlZnRsaW5rOworICAgICAgICAgICAgcmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHJldmVyc2VfZG9jLAorIkQucmV2ZXJzZSgpIC0tIHJldmVyc2UgKklOIFBMQUNFKiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGVxdWVfY291bnQoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqdikKK3sKKyAgICBibG9jayAqbGVmdGJsb2NrID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICBQeV9zc2l6ZV90IGxlZnRpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CisgICAgUHlfc3NpemVfdCBuID0gZGVxdWUtPmxlbjsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBjb3VudCA9IDA7CisgICAgUHlPYmplY3QgKml0ZW07CisgICAgbG9uZyBzdGFydF9zdGF0ZSA9IGRlcXVlLT5zdGF0ZTsKKyAgICBpbnQgY21wOworCisgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspIHsKKyAgICAgICAgaXRlbSA9IGxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbSwgdiwgUHlfRVEpOworICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIGVsc2UgaWYgKGNtcCA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBpZiAoc3RhcnRfc3RhdGUgIT0gZGVxdWUtPnN0YXRlKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXF1ZSBtdXRhdGVkIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogQWR2YW5jZSBsZWZ0IGJsb2NrL2luZGV4IHBhaXIgKi8KKyAgICAgICAgbGVmdGluZGV4Kys7CisgICAgICAgIGlmIChsZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKKyAgICAgICAgICAgIGlmIChsZWZ0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKSAgLyogY2FuIG9jY3VyIHdoZW4gaT09bi0xICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBsZWZ0YmxvY2sgPSBsZWZ0YmxvY2stPnJpZ2h0bGluazsKKyAgICAgICAgICAgIGxlZnRpbmRleCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KGNvdW50KTsKK30KKworUHlEb2NfU1RSVkFSKGNvdW50X2RvYywKKyJELmNvdW50KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdmFsdWUiKTsKKwogc3RhdGljIFB5X3NzaXplX3QKIGRlcXVlX2xlbihkZXF1ZW9iamVjdCAqZGVxdWUpCiB7CkBAIC04ODIsNiArOTkwLDIwIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkZXF1ZV9nZXRfbWF4bGVuKGRlcXVlb2JqZWN0ICpkZXF1ZSkKK3sKKyAgICBpZiAoZGVxdWUtPm1heGxlbiA9PSAtMSkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KGRlcXVlLT5tYXhsZW4pOworfQorCitzdGF0aWMgUHlHZXRTZXREZWYgZGVxdWVfZ2V0c2V0W10gPSB7CisgICAgeyJtYXhsZW4iLCAoZ2V0dGVyKWRlcXVlX2dldF9tYXhsZW4sIChzZXR0ZXIpTlVMTCwKKyAgICAgIm1heGltdW0gc2l6ZSBvZiBhIGRlcXVlIG9yIE5vbmUgaWYgdW5ib3VuZGVkIn0sCisgICAgezB9Cit9OworCiBzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgZGVxdWVfYXNfc2VxdWVuY2UgPSB7CiAgICAgKGxlbmZ1bmMpZGVxdWVfbGVuLCAgICAgICAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfY29uY2F0ICovCkBAIC05MTIsNiArMTAzNCw4IEBACiAgICAgICAgIE1FVEhfTk9BUkdTLCAgICAgICAgICAgICBjbGVhcl9kb2N9LAogICAgIHsiX19jb3B5X18iLCAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfY29weSwKICAgICAgICAgTUVUSF9OT0FSR1MsICAgICAgICAgICAgIGNvcHlfZG9jfSwKKyAgICB7ImNvdW50IiwgICAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRlcXVlX2NvdW50LAorICAgICAgICBNRVRIX08sICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X2RvY30sCiAgICAgeyJleHRlbmQiLCAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9leHRlbmQsCiAgICAgICAgIE1FVEhfTywgICAgICAgICAgICAgICAgICBleHRlbmRfZG9jfSwKICAgICB7ImV4dGVuZGxlZnQiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRlcXVlX2V4dGVuZGxlZnQsCkBAIC05MjYsNiArMTA1MCw4IEBACiAgICAgICAgIE1FVEhfTywgICAgICAgICAgICAgICAgICByZW1vdmVfZG9jfSwKICAgICB7Il9fcmV2ZXJzZWRfXyIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRlcXVlX3Jldml0ZXIsCiAgICAgICAgIE1FVEhfTk9BUkdTLCAgICAgICAgICAgICByZXZlcnNlZF9kb2N9LAorICAgIHsicmV2ZXJzZSIsICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfcmV2ZXJzZSwKKyAgICAgICAgTUVUSF9OT0FSR1MsICAgICAgICAgICAgIHJldmVyc2VfZG9jfSwKICAgICB7InJvdGF0ZSIsICAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRlcXVlX3JvdGF0ZSwKICAgICAgICAgTUVUSF9WQVJBUkdTLCAgICAgICAgICAgcm90YXRlX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgIC8qIHNlbnRpbmVsICovCkBAIC05NjgsNyArMTA5NCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBkZXF1ZV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIGRlcXVlX2dldHNldCwgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCmluZGV4IGFmNGZmNDkuLjRmYzlkMDIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYwpAQCAtNiw3ICs2LDcgQEAKIC8qCiAgIFRvRG86CiAKLSAgR2V0IHJpZCBvZiB0aGUgY2hlY2tlciAoYW5kIGFsc28gdGhlIGNvbnZlcnRlcnMpIGZpZWxkIGluIENGdW5jUHRyT2JqZWN0IGFuZAorICBHZXQgcmlkIG9mIHRoZSBjaGVja2VyIChhbmQgYWxzbyB0aGUgY29udmVydGVycykgZmllbGQgaW4gUHlDRnVuY1B0ck9iamVjdCBhbmQKICAgU3RnRGljdE9iamVjdCwgYW5kIHJlcGxhY2UgdGhlbSBieSBzbG90IGZ1bmN0aW9ucyBpbiBTdGdEaWN0T2JqZWN0LgogCiAgIHRoaW5rIGFib3V0IGEgYnVmZmVyLWxpa2Ugb2JqZWN0IChtZW1vcnk/IGJ5dGVzPykKQEAgLTI4LDIwICsyOCwyMCBAQAogTmFtZSAgICAgICAgICAgICAgICAgICAgbWV0aG9kcywgbWVtYmVycywgZ2V0c2V0cwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVN0cnVjdFR5cGVfVHlwZSAgICAgICAgIF9fbmV3X18oKSwgZnJvbV9hZGRyZXNzKCksIF9fbXVsX18oKSwgZnJvbV9wYXJhbSgpCitQeUNTdHJ1Y3RUeXBlX1R5cGUgICAgICAgICAgICAgIF9fbmV3X18oKSwgZnJvbV9hZGRyZXNzKCksIF9fbXVsX18oKSwgZnJvbV9wYXJhbSgpCiBVbmlvblR5cGVfVHlwZSAgICAgICAgICBfX25ld19fKCksIGZyb21fYWRkcmVzcygpLCBfX211bF9fKCksIGZyb21fcGFyYW0oKQotUG9pbnRlclR5cGVfVHlwZSAgICAgICAgX19uZXdfXygpLCBmcm9tX2FkZHJlc3MoKSwgX19tdWxfXygpLCBmcm9tX3BhcmFtKCksIHNldF90eXBlKCkKLUFycmF5VHlwZV9UeXBlICAgICAgICAgIF9fbmV3X18oKSwgZnJvbV9hZGRyZXNzKCksIF9fbXVsX18oKSwgZnJvbV9wYXJhbSgpCi1TaW1wbGVUeXBlX1R5cGUgICAgICAgICBfX25ld19fKCksIGZyb21fYWRkcmVzcygpLCBfX211bF9fKCksIGZyb21fcGFyYW0oKQorUHlDUG9pbnRlclR5cGVfVHlwZSAgICAgX19uZXdfXygpLCBmcm9tX2FkZHJlc3MoKSwgX19tdWxfXygpLCBmcm9tX3BhcmFtKCksIHNldF90eXBlKCkKK1B5Q0FycmF5VHlwZV9UeXBlICAgICAgICAgICAgICAgX19uZXdfXygpLCBmcm9tX2FkZHJlc3MoKSwgX19tdWxfXygpLCBmcm9tX3BhcmFtKCkKK1B5Q1NpbXBsZVR5cGVfVHlwZSAgICAgICAgICAgICAgX19uZXdfXygpLCBmcm9tX2FkZHJlc3MoKSwgX19tdWxfXygpLCBmcm9tX3BhcmFtKCkKIAotQ0RhdGFfVHlwZQorUHlDRGF0YV9UeXBlCiAgIFN0cnVjdF9UeXBlICAgICAgICAgICBfX25ld19fKCksIF9faW5pdF9fKCkKLSAgUG9pbnRlcl9UeXBlICAgICAgICAgIF9fbmV3X18oKSwgX19pbml0X18oKSwgX2FzX3BhcmFtZXRlcl8sIGNvbnRlbnRzCi0gIEFycmF5X1R5cGUgICAgICAgICAgICBfX25ld19fKCksIF9faW5pdF9fKCksIF9hc19wYXJhbWV0ZXJfLCBfX2dldC9zZXRpdGVtX18oKSwgX19sZW5fXygpCisgIFB5Q1BvaW50ZXJfVHlwZSAgICAgICAgICAgICAgIF9fbmV3X18oKSwgX19pbml0X18oKSwgX2FzX3BhcmFtZXRlcl8sIGNvbnRlbnRzCisgIFB5Q0FycmF5X1R5cGUgICAgICAgICBfX25ld19fKCksIF9faW5pdF9fKCksIF9hc19wYXJhbWV0ZXJfLCBfX2dldC9zZXRpdGVtX18oKSwgX19sZW5fXygpCiAgIFNpbXBsZV9UeXBlICAgICAgICAgICBfX25ld19fKCksIF9faW5pdF9fKCksIF9hc19wYXJhbWV0ZXJfCiAKLUNGaWVsZF9UeXBlCi1TdGdEaWN0X1R5cGUKK1B5Q0ZpZWxkX1R5cGUKK1B5Q1N0Z0RpY3RfVHlwZQogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtODcsMjAgKzg3LDIwIEBACiAqLwogCiAvKgotICogU3RnRGljdF9UeXBlCi0gKiBTdHJ1Y3RUeXBlX1R5cGUKKyAqIFB5Q1N0Z0RpY3RfVHlwZQorICogUHlDU3RydWN0VHlwZV9UeXBlCiAgKiBVbmlvblR5cGVfVHlwZQotICogUG9pbnRlclR5cGVfVHlwZQotICogQXJyYXlUeXBlX1R5cGUKLSAqIFNpbXBsZVR5cGVfVHlwZQorICogUHlDUG9pbnRlclR5cGVfVHlwZQorICogUHlDQXJyYXlUeXBlX1R5cGUKKyAqIFB5Q1NpbXBsZVR5cGVfVHlwZQogICoKLSAqIENEYXRhX1R5cGUKKyAqIFB5Q0RhdGFfVHlwZQogICogU3RydWN0X1R5cGUKICAqIFVuaW9uX1R5cGUKLSAqIEFycmF5X1R5cGUKKyAqIFB5Q0FycmF5X1R5cGUKICAqIFNpbXBsZV9UeXBlCi0gKiBQb2ludGVyX1R5cGUKLSAqIENGaWVsZF9UeXBlCisgKiBQeUNQb2ludGVyX1R5cGUKKyAqIFB5Q0ZpZWxkX1R5cGUKICAqCiAgKi8KIApAQCAtMTMwLDE1ICsxMzAsMTUgQEAKIFB5T2JqZWN0ICpQeUV4Y19BcmdFcnJvcjsKIAogLyogVGhpcyBkaWN0IG1hcHMgY3R5cGVzIHR5cGVzIHRvIFBPSU5URVIgdHlwZXMgKi8KLVB5T2JqZWN0ICpfcG9pbnRlcl90eXBlX2NhY2hlOworUHlPYmplY3QgKl9jdHlwZXNfcHRydHlwZV9jYWNoZTsKIAogc3RhdGljIFB5VHlwZU9iamVjdCBTaW1wbGVfVHlwZTsKIAogLyogYSBjYWxsYWJsZSBvYmplY3QgdXNlZCBmb3IgdW5waWNrbGluZyAqLwogc3RhdGljIFB5T2JqZWN0ICpfdW5waWNrbGU7CiAKLWNoYXIgKmNvbnZlcnNpb25fbW9kZV9lbmNvZGluZyA9IE5VTEw7Ci1jaGFyICpjb252ZXJzaW9uX21vZGVfZXJyb3JzID0gTlVMTDsKK2NoYXIgKl9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZyA9IE5VTEw7CitjaGFyICpfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzID0gTlVMTDsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMwMCw3ICszMDAsNyBAQAogICBhbHJlYWR5IGJlIHNldC4KICAqLwogY2hhciAqCi1hbGxvY19mb3JtYXRfc3RyaW5nKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqc3VmZml4KQorX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqc3VmZml4KQogewogICAgIHNpemVfdCBsZW47CiAgICAgY2hhciAqcmVzdWx0OwpAQCAtMzI0LDcgKzMyNCw3IEBACiB9CiAKIC8qCi0gIFN0cnVjdFR5cGVfVHlwZSAtIGEgbWV0YSB0eXBlL2NsYXNzLiAgQ3JlYXRpbmcgYSBuZXcgY2xhc3MgdXNpbmcgdGhpcyBvbmUgYXMKKyAgUHlDU3RydWN0VHlwZV9UeXBlIC0gYSBtZXRhIHR5cGUvY2xhc3MuICBDcmVhdGluZyBhIG5ldyBjbGFzcyB1c2luZyB0aGlzIG9uZSBhcwogICBfX21ldGFjbGFzc19fIHdpbGwgY2FsbCB0aGUgY29udHJ1Y3RvciBTdHJ1Y3RVbmlvblR5cGVfbmV3LiAgSXQgcmVwbGFjZXMgdGhlCiAgIHRwX2RpY3QgbWVtYmVyIHdpdGggYSBuZXcgaW5zdGFuY2Ugb2YgU3RnRGljdCwgYW5kIGluaXRpYWxpemVzIHRoZSBDCiAgIGFjY2Vzc2libGUgZmllbGRzIHNvbWVob3cuCkBAIC0zMzYsNyArMzM2LDcgQEAKICAgICBQeUNBcmdPYmplY3QgKnBhcmc7CiAgICAgU3RnRGljdE9iamVjdCAqc3RnZGljdDsKIAotICAgIHBhcmcgPSBuZXdfQ0FyZ09iamVjdCgpOworICAgIHBhcmcgPSBQeUNBcmdPYmplY3RfbmV3KCk7CiAgICAgaWYgKHBhcmcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM3Miw3ICszNzIsNyBAQAogICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhyZXN1bHQtPnRwX2RpY3QsICJfYWJzdHJhY3RfIikpCiAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilyZXN1bHQ7CiAKLSAgICBkaWN0ID0gKFN0Z0RpY3RPYmplY3QgKilQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKSZTdGdEaWN0X1R5cGUsIE5VTEwpOworICAgIGRpY3QgPSAoU3RnRGljdE9iamVjdCAqKVB5T2JqZWN0X0NhbGxPYmplY3QoKFB5T2JqZWN0ICopJlB5Q1N0Z0RpY3RfVHlwZSwgTlVMTCk7CiAgICAgaWYgKCFkaWN0KSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM4Niw3ICszODYsNyBAQAogICAgIH0KICAgICBQeV9ERUNSRUYocmVzdWx0LT50cF9kaWN0KTsKICAgICByZXN1bHQtPnRwX2RpY3QgPSAoUHlPYmplY3QgKilkaWN0OwotICAgIGRpY3QtPmZvcm1hdCA9IGFsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIkIiKTsKKyAgICBkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIkIiKTsKICAgICBpZiAoZGljdC0+Zm9ybWF0ID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDAxLDcgKzQwMSw3IEBACiAgICAgICAgIGlmIChiYXNlZGljdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKXJlc3VsdDsKICAgICAgICAgLyogY29weSBiYXNlIGRpY3QgKi8KLSAgICAgICAgaWYgKC0xID09IFN0Z0RpY3RfY2xvbmUoZGljdCwgYmFzZWRpY3QpKSB7CisgICAgICAgIGlmICgtMSA9PSBQeUNTdGdEaWN0X2Nsb25lKGRpY3QsIGJhc2VkaWN0KSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtNDE4LDcgKzQxOCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1TdHJ1Y3RUeXBlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK1B5Q1N0cnVjdFR5cGVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIHJldHVybiBTdHJ1Y3RVbmlvblR5cGVfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMsIDEpOwogfQpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAgICAgYnVmID0gKHZvaWQgKilQeUxvbmdfQXNWb2lkUHRyKHZhbHVlKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIENEYXRhX0F0QWRkcmVzcyh0eXBlLCBidWYpOworICAgIHJldHVybiBQeUNEYXRhX0F0QWRkcmVzcyh0eXBlLCBidWYpOwogfQogCiBzdGF0aWMgY2hhciBmcm9tX2J1ZmZlcl9kb2NbXSA9CkBAIC00OTEsNyArNDkxLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gQ0RhdGFfQXRBZGRyZXNzKHR5cGUsIChjaGFyICopYnVmZmVyICsgb2Zmc2V0KTsKKyAgICByZXN1bHQgPSBQeUNEYXRhX0F0QWRkcmVzcyh0eXBlLCAoY2hhciAqKWJ1ZmZlciArIG9mZnNldCk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtNTA3LDcgKzUwNyw3IEBACiAiQy5mcm9tX2J1ZmZlcl9jb3B5KG9iamVjdCwgb2Zmc2V0PTApIC0+IEMgaW5zdGFuY2VcbmNyZWF0ZSBhIEMgaW5zdGFuY2UgZnJvbSBhIHJlYWRhYmxlIGJ1ZmZlciI7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1HZW5lcmljQ0RhdGFfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKTsKK0dlbmVyaWNQeUNEYXRhX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBDRGF0YVR5cGVfZnJvbV9idWZmZXJfY29weShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MpCkBAIC01NDgsNyArNTQ4LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gR2VuZXJpY0NEYXRhX25ldygoUHlUeXBlT2JqZWN0ICopdHlwZSwgTlVMTCwgTlVMTCk7CisgICAgcmVzdWx0ID0gR2VuZXJpY1B5Q0RhdGFfbmV3KChQeVR5cGVPYmplY3QgKil0eXBlLCBOVUxMLCBOVUxMKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG1lbWNweSgoKENEYXRhT2JqZWN0ICopcmVzdWx0KS0+Yl9wdHIsCkBAIC02MTAsNyArNjEwLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIENEYXRhX0F0QWRkcmVzcyh0eXBlLCBhZGRyZXNzKTsKKyAgICByZXR1cm4gUHlDRGF0YV9BdEFkZHJlc3ModHlwZSwgYWRkcmVzcyk7CiB9CiAKIHN0YXRpYyBjaGFyIGZyb21fcGFyYW1fZG9jW10gPQpAQCAtNjc4LDcgKzY3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFycmF5IGxlbmd0aCBtdXN0IGJlID49IDAsIG5vdCAlemQiLAogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKLSAgICByZXR1cm4gQ3JlYXRlQXJyYXlUeXBlKHNlbGYsIGxlbmd0aCk7CisgICAgcmV0dXJuIFB5Q0FycmF5VHlwZV9mcm9tX2N0eXBlKHNlbGYsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBDRGF0YVR5cGVfYXNfc2VxdWVuY2UgPSB7CkBAIC03MTQsNyArNzE0LDcgQEAKIH0KIAogc3RhdGljIGludAotU3RydWN0VHlwZV9zZXRhdHRybyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKnZhbHVlKQorUHlDU3RydWN0VHlwZV9zZXRhdHRybyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIC8qIFhYWCBTaG91bGQgd2UgZGlzYWxsb3cgZGVsZXRpbmcgX2ZpZWxkc18/ICovCiAgICAgaWYgKC0xID09IFB5VHlwZV9UeXBlLnRwX3NldGF0dHJvKHNlbGYsIGtleSwgdmFsdWUpKQpAQCAtNzIyLDcgKzcyMiw3IEBACiAKICAgICBpZiAodmFsdWUgJiYgUHlTdHJpbmdfQ2hlY2soa2V5KSAmJgogICAgICAgICAwID09IHN0cmNtcChQeVN0cmluZ19BU19TVFJJTkcoa2V5KSwgIl9maWVsZHNfIikpCi0gICAgICAgIHJldHVybiBTdHJ1Y3RVbmlvblR5cGVfdXBkYXRlX3N0Z2RpY3Qoc2VsZiwgdmFsdWUsIDEpOworICAgICAgICByZXR1cm4gUHlDU3RydWN0VW5pb25UeXBlX3VwZGF0ZV9zdGdkaWN0KHNlbGYsIHZhbHVlLCAxKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNzM2LDE0ICs3MzYsMTQgQEAKIAogICAgIGlmIChQeVN0cmluZ19DaGVjayhrZXkpICYmCiAgICAgICAgIDAgPT0gc3RyY21wKFB5U3RyaW5nX0FTX1NUUklORyhrZXkpLCAiX2ZpZWxkc18iKSkKLSAgICAgICAgcmV0dXJuIFN0cnVjdFVuaW9uVHlwZV91cGRhdGVfc3RnZGljdChzZWxmLCB2YWx1ZSwgMCk7CisgICAgICAgIHJldHVybiBQeUNTdHJ1Y3RVbmlvblR5cGVfdXBkYXRlX3N0Z2RpY3Qoc2VsZiwgdmFsdWUsIDApOwogICAgIHJldHVybiAwOwogfQogCiAKLVB5VHlwZU9iamVjdCBTdHJ1Y3RUeXBlX1R5cGUgPSB7CitQeVR5cGVPYmplY3QgUHlDU3RydWN0VHlwZV9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJfY3R5cGVzLlN0cnVjdFR5cGUiLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgICJfY3R5cGVzLlB5Q1N0cnVjdFR5cGUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCkBAIC03NTksNyArNzU5LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KLSAgICBTdHJ1Y3RUeXBlX3NldGF0dHJvLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgUHlDU3RydWN0VHlwZV9zZXRhdHRybywgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyogdHBfZmxhZ3MgKi8KICAgICAibWV0YXR5cGUgZm9yIHRoZSBDRGF0YSBPYmplY3RzIiwgICAgICAgICAgIC8qIHRwX2RvYyAqLwpAQCAtNzc5LDcgKzc3OSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwotICAgIFN0cnVjdFR5cGVfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgUHlDU3RydWN0VHlwZV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIApAQCAtODMwLDIwICs4MzAsMjAgQEAKIAogLyoKIAotVGhlIFBvaW50ZXJUeXBlX1R5cGUgbWV0YWNsYXNzIG11c3QgZW5zdXJlIHRoYXQgdGhlIHN1YmNsYXNzIG9mIFBvaW50ZXIgY2FuIGJlCitUaGUgUHlDUG9pbnRlclR5cGVfVHlwZSBtZXRhY2xhc3MgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc3ViY2xhc3Mgb2YgUG9pbnRlciBjYW4gYmUKIGNyZWF0ZWQuIEl0IG11c3QgY2hlY2sgZm9yIGEgX3R5cGVfIGF0dHJpYnV0ZSBpbiB0aGUgY2xhc3MuIFNpbmNlIGFyZSBubwogcnVudGltZSBjcmVhdGVkIHByb3BlcnRpZXMsIGEgQ0ZpZWxkIGlzIHByb2JhYmx5ICpub3QqIG5lZWRlZCA/CiAKIGNsYXNzIEludFBvaW50ZXIoUG9pbnRlcik6CiAgICAgX3R5cGVfID0gImkiCiAKLVRoZSBQb2ludGVyX1R5cGUgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHk6IGEgY29udGVudHMgbWV0aG9kL3Byb3BlcnR5LCBhCitUaGUgUHlDUG9pbnRlcl9UeXBlIHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5OiBhIGNvbnRlbnRzIG1ldGhvZC9wcm9wZXJ0eSwgYQogc2l6ZSBwcm9wZXJ0eS9tZXRob2QsIGFuZCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wuCiAKICovCiAKIHN0YXRpYyBpbnQKLVBvaW50ZXJUeXBlX1NldFByb3RvKFN0Z0RpY3RPYmplY3QgKnN0Z2RpY3QsIFB5T2JqZWN0ICpwcm90bykKK1B5Q1BvaW50ZXJUeXBlX1NldFByb3RvKFN0Z0RpY3RPYmplY3QgKnN0Z2RpY3QsIFB5T2JqZWN0ICpwcm90bykKIHsKICAgICBpZiAoIXByb3RvIHx8ICFQeVR5cGVfQ2hlY2socHJvdG8pKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC04NjIsMTEgKzg2MiwxMSBAQAogfQogCiBzdGF0aWMgUHlDQXJnT2JqZWN0ICoKLVBvaW50ZXJUeXBlX3BhcmFtZnVuYyhDRGF0YU9iamVjdCAqc2VsZikKK1B5Q1BvaW50ZXJUeXBlX3BhcmFtZnVuYyhDRGF0YU9iamVjdCAqc2VsZikKIHsKICAgICBQeUNBcmdPYmplY3QgKnBhcmc7CiAKLSAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgIGlmIChwYXJnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC04NzksNyArODc5LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLVBvaW50ZXJUeXBlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK1B5Q1BvaW50ZXJUeXBlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeVR5cGVPYmplY3QgKnJlc3VsdDsKICAgICBTdGdEaWN0T2JqZWN0ICpzdGdkaWN0OwpAQCAtODk0LDE4ICs4OTQsMTggQEAKICAgc3RnZGljdC0+cHJvdG8gaGFzIGluZm8gYWJvdXQgdGhlIHBvaW50ZWQgdG8gdHlwZSEKICovCiAgICAgc3RnZGljdCA9IChTdGdEaWN0T2JqZWN0ICopUHlPYmplY3RfQ2FsbE9iamVjdCgKLSAgICAgICAgKFB5T2JqZWN0ICopJlN0Z0RpY3RfVHlwZSwgTlVMTCk7CisgICAgICAgIChQeU9iamVjdCAqKSZQeUNTdGdEaWN0X1R5cGUsIE5VTEwpOwogICAgIGlmICghc3RnZGljdCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3RnZGljdC0+c2l6ZSA9IHNpemVvZih2b2lkICopOwotICAgIHN0Z2RpY3QtPmFsaWduID0gZ2V0ZW50cnkoIlAiKS0+cGZmaV90eXBlLT5hbGlnbm1lbnQ7CisgICAgc3RnZGljdC0+YWxpZ24gPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoIlAiKS0+cGZmaV90eXBlLT5hbGlnbm1lbnQ7CiAgICAgc3RnZGljdC0+bGVuZ3RoID0gMTsKICAgICBzdGdkaWN0LT5mZmlfdHlwZV9wb2ludGVyID0gZmZpX3R5cGVfcG9pbnRlcjsKLSAgICBzdGdkaWN0LT5wYXJhbWZ1bmMgPSBQb2ludGVyVHlwZV9wYXJhbWZ1bmM7CisgICAgc3RnZGljdC0+cGFyYW1mdW5jID0gUHlDUG9pbnRlclR5cGVfcGFyYW1mdW5jOwogICAgIHN0Z2RpY3QtPmZsYWdzIHw9IFRZUEVGTEFHX0lTUE9JTlRFUjsKIAogICAgIHByb3RvID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcodHlwZWRpY3QsICJfdHlwZV8iKTsgLyogQm9ycm93ZWQgcmVmICovCi0gICAgaWYgKHByb3RvICYmIC0xID09IFBvaW50ZXJUeXBlX1NldFByb3RvKHN0Z2RpY3QsIHByb3RvKSkgeworICAgIGlmIChwcm90byAmJiAtMSA9PSBQeUNQb2ludGVyVHlwZV9TZXRQcm90byhzdGdkaWN0LCBwcm90bykpIHsKICAgICAgICAgUHlfREVDUkVGKChQeU9iamVjdCAqKXN0Z2RpY3QpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC05MTgsNyArOTE4LDcgQEAKICAgICAgICAgICAgJ3BvaW50ZXIgdG8gYnl0ZXMnIGluIHRoaXMgY2FzZS4gIFhYWCBCZXR0ZXIgd291bGQgYmUgdG8KICAgICAgICAgICAgZml4IHRoZSBmb3JtYXQgc3RyaW5nIGxhdGVyLi4uCiAgICAgICAgICovCi0gICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IGFsbG9jX2Zvcm1hdF9zdHJpbmcoIiYiLAorICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoIiYiLAogICAgICAgICAgICAgICAgICAgICAgIGl0ZW1kaWN0LT5mb3JtYXQgPyBpdGVtZGljdC0+Zm9ybWF0IDogIkIiKTsKICAgICAgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopc3RnZGljdCk7CkBAIC05NDgsMTQgKzk0OCwxNCBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Qb2ludGVyVHlwZV9zZXRfdHlwZShQeVR5cGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0eXBlKQorUHlDUG9pbnRlclR5cGVfc2V0X3R5cGUoUHlUeXBlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdHlwZSkKIHsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0OwogCiAgICAgZGljdCA9IFB5VHlwZV9zdGdkaWN0KChQeU9iamVjdCAqKXNlbGYpOwogICAgIGFzc2VydChkaWN0KTsKIAotICAgIGlmICgtMSA9PSBQb2ludGVyVHlwZV9TZXRQcm90byhkaWN0LCB0eXBlKSkKKyAgICBpZiAoLTEgPT0gUHlDUG9pbnRlclR5cGVfU2V0UHJvdG8oZGljdCwgdHlwZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKC0xID09IFB5RGljdF9TZXRJdGVtU3RyaW5nKChQeU9iamVjdCAqKWRpY3QsICJfdHlwZV8iLCB0eXBlKSkKQEAgLTk2OCw3ICs5NjgsNyBAQAogc3RhdGljZm9yd2FyZCBQeU9iamVjdCAqX2J5cmVmKFB5T2JqZWN0ICopOwogCiBzdGF0aWMgUHlPYmplY3QgKgotUG9pbnRlclR5cGVfZnJvbV9wYXJhbShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlKQorUHlDUG9pbnRlclR5cGVfZnJvbV9wYXJhbShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFN0Z0RpY3RPYmplY3QgKnR5cGVkaWN0OwogCkBAIC0xMDA5LDE5ICsxMDA5LDE5IEBACiAgICAgcmV0dXJuIENEYXRhVHlwZV9mcm9tX3BhcmFtKHR5cGUsIHZhbHVlKTsKIH0KIAotc3RhdGljIFB5TWV0aG9kRGVmIFBvaW50ZXJUeXBlX21ldGhvZHNbXSA9IHsKK3N0YXRpYyBQeU1ldGhvZERlZiBQeUNQb2ludGVyVHlwZV9tZXRob2RzW10gPSB7CiAgICAgeyAiZnJvbV9hZGRyZXNzIiwgQ0RhdGFUeXBlX2Zyb21fYWRkcmVzcywgTUVUSF9PLCBmcm9tX2FkZHJlc3NfZG9jIH0sCiAgICAgeyAiZnJvbV9idWZmZXIiLCBDRGF0YVR5cGVfZnJvbV9idWZmZXIsIE1FVEhfVkFSQVJHUywgZnJvbV9idWZmZXJfZG9jLCB9LAogICAgIHsgImZyb21fYnVmZmVyX2NvcHkiLCBDRGF0YVR5cGVfZnJvbV9idWZmZXJfY29weSwgTUVUSF9WQVJBUkdTLCBmcm9tX2J1ZmZlcl9jb3B5X2RvYywgfSwKICAgICB7ICJpbl9kbGwiLCBDRGF0YVR5cGVfaW5fZGxsLCBNRVRIX1ZBUkFSR1MsIGluX2RsbF9kb2N9LAotICAgIHsgImZyb21fcGFyYW0iLCAoUHlDRnVuY3Rpb24pUG9pbnRlclR5cGVfZnJvbV9wYXJhbSwgTUVUSF9PLCBmcm9tX3BhcmFtX2RvY30sCi0gICAgeyAic2V0X3R5cGUiLCAoUHlDRnVuY3Rpb24pUG9pbnRlclR5cGVfc2V0X3R5cGUsIE1FVEhfTyB9LAorICAgIHsgImZyb21fcGFyYW0iLCAoUHlDRnVuY3Rpb24pUHlDUG9pbnRlclR5cGVfZnJvbV9wYXJhbSwgTUVUSF9PLCBmcm9tX3BhcmFtX2RvY30sCisgICAgeyAic2V0X3R5cGUiLCAoUHlDRnVuY3Rpb24pUHlDUG9pbnRlclR5cGVfc2V0X3R5cGUsIE1FVEhfTyB9LAogICAgIHsgTlVMTCwgTlVMTCB9LAogfTsKIAotUHlUeXBlT2JqZWN0IFBvaW50ZXJUeXBlX1R5cGUgPSB7CitQeVR5cGVPYmplY3QgUHlDUG9pbnRlclR5cGVfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX2N0eXBlcy5Qb2ludGVyVHlwZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgICJfY3R5cGVzLlB5Q1BvaW50ZXJUeXBlIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KQEAgLTEwNDcsNyArMTA0Nyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICBQb2ludGVyVHlwZV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBQeUNQb2ludGVyVHlwZV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtMTA1NywxNyArMTA1NywxNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KLSAgICBQb2ludGVyVHlwZV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIFB5Q1BvaW50ZXJUeXBlX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICBBcnJheVR5cGVfVHlwZQorICBQeUNBcnJheVR5cGVfVHlwZQogKi8KIC8qCi0gIEFycmF5VHlwZV9uZXcgZW5zdXJlcyB0aGF0IHRoZSBuZXcgQXJyYXkgc3ViY2xhc3MgY3JlYXRlZCBoYXMgYSBfbGVuZ3RoXworICBQeUNBcnJheVR5cGVfbmV3IGVuc3VyZXMgdGhhdCB0aGUgbmV3IEFycmF5IHN1YmNsYXNzIGNyZWF0ZWQgaGFzIGEgX2xlbmd0aF8KICAgYXR0cmlidXRlLCBhbmQgYSBfdHlwZV8gYXR0cmlidXRlLgogKi8KIApAQCAtMTA3NiwyMiArMTA3Niw0MiBAQAogewogICAgIGNoYXIgKnB0cjsKICAgICBQeV9zc2l6ZV90IHNpemU7CisjaWYgKFBZX1ZFUlNJT05fSEVYID49IDB4MDIwNjAwMDApCisgICAgUHlfYnVmZmVyIHZpZXcgPSB7IDAgfTsKKyNlbmRpZgogICAgIGlmIChQeUJ1ZmZlcl9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgc2l6ZSA9IFB5X1RZUEUodmFsdWUpLT50cF9hc19idWZmZXItPmJmX2dldHJlYWRidWZmZXIodmFsdWUsIDAsICh2b2lkICopJnB0cik7CiAgICAgICAgIGlmIChzaXplIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgaWYgKC0xID09IFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZSh2YWx1ZSwgJnB0ciwgJnNpemUpKSB7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9IGVsc2UgeworI2lmIChQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDYwMDAwKQorICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHZhbHVlLCAmdmlldywgUHlCVUZfU0lNUExFKSA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHNpemUgPSB2aWV3LmxlbjsKKyAgICAgICAgcHRyID0gdmlldy5idWY7CisjZWxzZQorICAgICAgICBpZiAoLTEgPT0gUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKHZhbHVlLCAmcHRyLCAmc2l6ZSkpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisjZW5kaWYKICAgICB9CiAgICAgaWYgKHNpemUgPiBzZWxmLT5iX3NpemUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsb25nIik7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZ290byBmYWlsOwogICAgIH0KIAogICAgIG1lbWNweShzZWxmLT5iX3B0ciwgcHRyLCBzaXplKTsKIAorI2lmIChQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDYwMDAwKQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworI2VuZGlmCiAgICAgcmV0dXJuIDA7CisgICAgZmFpbDoKKworI2lmIChQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDYwMDAwKQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworI2VuZGlmCisgICAgcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTEyNSw4ICsxMTQ1LDggQEAKIAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIHZhbHVlID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25fbW9kZV9lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25fbW9kZV9lcnJvcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfSBlbHNlIGlmICghUHlTdHJpbmdfQ2hlY2sodmFsdWUpKSB7CkBAIC0xMTg1LDggKzEyMDUsOCBAQAogICAgIH0KICAgICBpZiAoUHlTdHJpbmdfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIHZhbHVlID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uX21vZGVfZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25fbW9kZV9lcnJvcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lcnJvcnMpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0gZWxzZSBpZiAoIVB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKQEAgLTEyNzgsOSArMTI5OCw5IEBACiB9CiAKIHN0YXRpYyBQeUNBcmdPYmplY3QgKgotQXJyYXlUeXBlX3BhcmFtZnVuYyhDRGF0YU9iamVjdCAqc2VsZikKK1B5Q0FycmF5VHlwZV9wYXJhbWZ1bmMoQ0RhdGFPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlDQXJnT2JqZWN0ICpwID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICBQeUNBcmdPYmplY3QgKnAgPSBQeUNBcmdPYmplY3RfbmV3KCk7CiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcC0+dGFnID0gJ1AnOwpAQCAtMTI5Miw3ICsxMzEyLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLUFycmF5VHlwZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitQeUNBcnJheVR5cGVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5VHlwZU9iamVjdCAqcmVzdWx0OwogICAgIFN0Z0RpY3RPYmplY3QgKnN0Z2RpY3Q7CkBAIC0xMzI1LDcgKzEzNDUsNyBAQAogICAgIH0KIAogICAgIHN0Z2RpY3QgPSAoU3RnRGljdE9iamVjdCAqKVB5T2JqZWN0X0NhbGxPYmplY3QoCi0gICAgICAgIChQeU9iamVjdCAqKSZTdGdEaWN0X1R5cGUsIE5VTEwpOworICAgICAgICAoUHlPYmplY3QgKikmUHlDU3RnRGljdF9UeXBlLCBOVUxMKTsKICAgICBpZiAoIXN0Z2RpY3QpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMzQwLDEwICsxMzYwLDEwIEBACiAgICAgYXNzZXJ0KGl0ZW1kaWN0LT5mb3JtYXQpOwogICAgIGlmIChpdGVtZGljdC0+Zm9ybWF0WzBdID09ICcoJykgewogICAgICAgICBzcHJpbnRmKGJ1ZiwgIiglbGQsIiwgbGVuZ3RoKTsKLSAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gYWxsb2NfZm9ybWF0X3N0cmluZyhidWYsIGl0ZW1kaWN0LT5mb3JtYXQrMSk7CisgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhidWYsIGl0ZW1kaWN0LT5mb3JtYXQrMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3ByaW50ZihidWYsICIoJWxkKSIsIGxlbmd0aCk7Ci0gICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IGFsbG9jX2Zvcm1hdF9zdHJpbmcoYnVmLCBpdGVtZGljdC0+Zm9ybWF0KTsKKyAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKGJ1ZiwgaXRlbWRpY3QtPmZvcm1hdCk7CiAgICAgfQogICAgIGlmIChzdGdkaWN0LT5mb3JtYXQgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopc3RnZGljdCk7CkBAIC0xMzc3LDcgKzEzOTcsNyBAQAogICAgIFB5X0lOQ1JFRihwcm90byk7CiAgICAgc3RnZGljdC0+cHJvdG8gPSBwcm90bzsKIAotICAgIHN0Z2RpY3QtPnBhcmFtZnVuYyA9ICZBcnJheVR5cGVfcGFyYW1mdW5jOworICAgIHN0Z2RpY3QtPnBhcmFtZnVuYyA9ICZQeUNBcnJheVR5cGVfcGFyYW1mdW5jOwogCiAgICAgLyogQXJyYXlzIGFyZSBwYXNzZWQgYXMgcG9pbnRlcnMgdG8gZnVuY3Rpb24gY2FsbHMuICovCiAgICAgc3RnZGljdC0+ZmZpX3R5cGVfcG9pbnRlciA9IGZmaV90eXBlX3BvaW50ZXI7CkBAIC0xNDAwLDExICsxNDIwLDExIEBACiAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBjaGFyYWN0ZXIgYXJyYXlzLgogICAgICAgIEEgcGVybWFuZW50IGFubm95YW5jZTogY2hhciBhcnJheXMgYXJlIGFsc28gc3RyaW5ncyEKICAgICAqLwotICAgIGlmIChpdGVtZGljdC0+Z2V0ZnVuYyA9PSBnZXRlbnRyeSgiYyIpLT5nZXRmdW5jKSB7CisgICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiYyIpLT5nZXRmdW5jKSB7CiAgICAgICAgIGlmICgtMSA9PSBhZGRfZ2V0c2V0KHJlc3VsdCwgQ2hhckFycmF5X2dldHNldHMpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAjaWZkZWYgQ1RZUEVTX1VOSUNPREUKLSAgICB9IGVsc2UgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IGdldGVudHJ5KCJ1IiktPmdldGZ1bmMpIHsKKyAgICB9IGVsc2UgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygidSIpLT5nZXRmdW5jKSB7CiAgICAgICAgIGlmICgtMSA9PSBhZGRfZ2V0c2V0KHJlc3VsdCwgV0NoYXJBcnJheV9nZXRzZXRzKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogI2VuZGlmCkBAIC0xNDEzLDkgKzE0MzMsOSBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKilyZXN1bHQ7CiB9CiAKLVB5VHlwZU9iamVjdCBBcnJheVR5cGVfVHlwZSA9IHsKK1B5VHlwZU9iamVjdCBQeUNBcnJheVR5cGVfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX2N0eXBlcy5BcnJheVR5cGUiLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICAiX2N0eXBlcy5QeUNBcnJheVR5cGUiLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KQEAgLTE0NTEsMTggKzE0NzEsMTggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgQXJyYXlUeXBlX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBQeUNBcnJheVR5cGVfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICBTaW1wbGVUeXBlX1R5cGUKKyAgUHlDU2ltcGxlVHlwZV9UeXBlCiAqLwogLyoKIAotU2ltcGxlVHlwZV9uZXcgZW5zdXJlcyB0aGF0IHRoZSBuZXcgU2ltcGxlX1R5cGUgc3ViY2xhc3MgY3JlYXRlZCBoYXMgYSB2YWxpZAorUHlDU2ltcGxlVHlwZV9uZXcgZW5zdXJlcyB0aGF0IHRoZSBuZXcgU2ltcGxlX1R5cGUgc3ViY2xhc3MgY3JlYXRlZCBoYXMgYSB2YWxpZAogX3R5cGVfIGF0dHJpYnV0ZS4KIAogKi8KQEAgLTE0ODIsOSArMTUwMiw5IEBACiAgICAgfQogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpIHx8IFB5U3RyaW5nX0NoZWNrKHZhbHVlKSkgewogICAgICAgICBQeUNBcmdPYmplY3QgKnBhcmc7Ci0gICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gZ2V0ZW50cnkoIloiKTsKKyAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoIloiKTsKIAotICAgICAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICAgICAgcGFyZyA9IFB5Q0FyZ09iamVjdF9uZXcoKTsKICAgICAgICAgaWYgKHBhcmcgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBwYXJnLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfcG9pbnRlcjsKQEAgLTE1MDYsNyArMTUyNiw3IEBACiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CiAgICAgICAgIGFzc2VydChkdCk7IC8qIENhbm5vdCBiZSBOVUxMIGZvciBwb2ludGVyIG9yIGFycmF5IG9iamVjdHMgKi8KICAgICAgICAgZGljdCA9IGR0ICYmIGR0LT5wcm90byA/IFB5VHlwZV9zdGdkaWN0KGR0LT5wcm90bykgOiBOVUxMOwotICAgICAgICBpZiAoZGljdCAmJiAoZGljdC0+c2V0ZnVuYyA9PSBnZXRlbnRyeSgidSIpLT5zZXRmdW5jKSkgeworICAgICAgICBpZiAoZGljdCAmJiAoZGljdC0+c2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoInUiKS0+c2V0ZnVuYykpIHsKICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgIH0KQEAgLTE1MTUsNyArMTUzNSw3IEBACiAgICAgICAgIC8qIGJ5cmVmKGNfY2hhciguLi4pKSAqLwogICAgICAgICBQeUNBcmdPYmplY3QgKmEgPSAoUHlDQXJnT2JqZWN0ICopdmFsdWU7CiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKmRpY3QgPSBQeU9iamVjdF9zdGdkaWN0KGEtPm9iaik7Ci0gICAgICAgIGlmIChkaWN0ICYmIChkaWN0LT5zZXRmdW5jID09IGdldGVudHJ5KCJ1IiktPnNldGZ1bmMpKSB7CisgICAgICAgIGlmIChkaWN0ICYmIChkaWN0LT5zZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygidSIpLT5zZXRmdW5jKSkgewogICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgfQpAQCAtMTU0Niw5ICsxNTY2LDkgQEAKICAgICB9CiAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKHZhbHVlKSB8fCBQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5Q0FyZ09iamVjdCAqcGFyZzsKLSAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBnZXRlbnRyeSgieiIpOworICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygieiIpOwogCi0gICAgICAgIHBhcmcgPSBuZXdfQ0FyZ09iamVjdCgpOworICAgICAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgICAgICBpZiAocGFyZyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHBhcmctPnBmZmlfdHlwZSA9ICZmZmlfdHlwZV9wb2ludGVyOwpAQCAtMTU3MCw3ICsxNTkwLDcgQEAKICAgICAgICAgU3RnRGljdE9iamVjdCAqZGljdDsKICAgICAgICAgYXNzZXJ0KGR0KTsgLyogQ2Fubm90IGJlIE5VTEwgZm9yIHBvaW50ZXIgb3IgYXJyYXkgb2JqZWN0cyAqLwogICAgICAgICBkaWN0ID0gZHQgJiYgZHQtPnByb3RvID8gUHlUeXBlX3N0Z2RpY3QoZHQtPnByb3RvKSA6IE5VTEw7Ci0gICAgICAgIGlmIChkaWN0ICYmIChkaWN0LT5zZXRmdW5jID09IGdldGVudHJ5KCJjIiktPnNldGZ1bmMpKSB7CisgICAgICAgIGlmIChkaWN0ICYmIChkaWN0LT5zZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiYyIpLT5zZXRmdW5jKSkgewogICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgfQpAQCAtMTU3OSw3ICsxNTk5LDcgQEAKICAgICAgICAgLyogYnlyZWYoY19jaGFyKC4uLikpICovCiAgICAgICAgIFB5Q0FyZ09iamVjdCAqYSA9IChQeUNBcmdPYmplY3QgKil2YWx1ZTsKICAgICAgICAgU3RnRGljdE9iamVjdCAqZGljdCA9IFB5T2JqZWN0X3N0Z2RpY3QoYS0+b2JqKTsKLSAgICAgICAgaWYgKGRpY3QgJiYgKGRpY3QtPnNldGZ1bmMgPT0gZ2V0ZW50cnkoImMiKS0+c2V0ZnVuYykpIHsKKyAgICAgICAgaWYgKGRpY3QgJiYgKGRpY3QtPnNldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJjIiktPnNldGZ1bmMpKSB7CiAgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICB9CkBAIC0xNjE1LDkgKzE2MzUsOSBAQAogLyogaW50LCBsb25nICovCiAgICAgaWYgKFB5SW50X0NoZWNrKHZhbHVlKSB8fCBQeUxvbmdfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5Q0FyZ09iamVjdCAqcGFyZzsKLSAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBnZXRlbnRyeSgiUCIpOworICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiUCIpOwogCi0gICAgICAgIHBhcmcgPSBuZXdfQ0FyZ09iamVjdCgpOworICAgICAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgICAgICBpZiAocGFyZyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHBhcmctPnBmZmlfdHlwZSA9ICZmZmlfdHlwZV9wb2ludGVyOwpAQCAtMTYzMiw5ICsxNjUyLDkgQEAKIC8qIHN0cmluZyAqLwogICAgIGlmIChQeVN0cmluZ19DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgUHlDQXJnT2JqZWN0ICpwYXJnOwotICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IGdldGVudHJ5KCJ6Iik7CisgICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJ6Iik7CiAKLSAgICAgICAgcGFyZyA9IG5ld19DQXJnT2JqZWN0KCk7CisgICAgICAgIHBhcmcgPSBQeUNBcmdPYmplY3RfbmV3KCk7CiAgICAgICAgIGlmIChwYXJnID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcGFyZy0+cGZmaV90eXBlID0gJmZmaV90eXBlX3BvaW50ZXI7CkBAIC0xNjQ5LDkgKzE2NjksOSBAQAogLyogdW5pY29kZSAqLwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5Q0FyZ09iamVjdCAqcGFyZzsKLSAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBnZXRlbnRyeSgiWiIpOworICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiWiIpOwogCi0gICAgICAgIHBhcmcgPSBuZXdfQ0FyZ09iamVjdCgpOworICAgICAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgICAgICBpZiAocGFyZyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHBhcmctPnBmZmlfdHlwZSA9ICZmZmlfdHlwZV9wb2ludGVyOwpAQCAtMTY4NSwxMSArMTcwNSwxMSBAQAogICAgICAgICB9CiAgICAgfQogLyogZnVuY3Rpb24gcG9pbnRlciAqLwotICAgIGlmIChDRnVuY1B0ck9iamVjdF9DaGVjayh2YWx1ZSkpIHsKKyAgICBpZiAoUHlDRnVuY1B0ck9iamVjdF9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgUHlDQXJnT2JqZWN0ICpwYXJnOwotICAgICAgICBDRnVuY1B0ck9iamVjdCAqZnVuYzsKLSAgICAgICAgZnVuYyA9IChDRnVuY1B0ck9iamVjdCAqKXZhbHVlOwotICAgICAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICAgICAgUHlDRnVuY1B0ck9iamVjdCAqZnVuYzsKKyAgICAgICAgZnVuYyA9IChQeUNGdW5jUHRyT2JqZWN0ICopdmFsdWU7CisgICAgICAgIHBhcmcgPSBQeUNBcmdPYmplY3RfbmV3KCk7CiAgICAgICAgIGlmIChwYXJnID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcGFyZy0+cGZmaV90eXBlID0gJmZmaV90eXBlX3BvaW50ZXI7CkBAIC0xNzA3LDcgKzE3MjcsNyBAQAogICAgICAgICBzd2l0Y2ggKFB5U3RyaW5nX0FTX1NUUklORyhzdGdkLT5wcm90bylbMF0pIHsKICAgICAgICAgY2FzZSAneic6IC8qIGNfY2hhcl9wICovCiAgICAgICAgIGNhc2UgJ1onOiAvKiBjX3djaGFyX3AgKi8KLSAgICAgICAgICAgIHBhcmcgPSBuZXdfQ0FyZ09iamVjdCgpOworICAgICAgICAgICAgcGFyZyA9IFB5Q0FyZ09iamVjdF9uZXcoKTsKICAgICAgICAgICAgIGlmIChwYXJnID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBwYXJnLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfcG9pbnRlcjsKQEAgLTE3ODYsNyArMTgwNiw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgc3RnZGljdCA9IChTdGdEaWN0T2JqZWN0ICopUHlPYmplY3RfQ2FsbE9iamVjdCgKLSAgICAgICAgKFB5T2JqZWN0ICopJlN0Z0RpY3RfVHlwZSwgTlVMTCk7CisgICAgICAgIChQeU9iamVjdCAqKSZQeUNTdGdEaWN0X1R5cGUsIE5VTEwpOwogICAgIGlmICghc3RnZGljdCkgLyogWFhYIGxlYWtzIHJlc3VsdCEgKi8KICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE4MTMsNyArMTgzMyw3IEBACiB9CiAKIHN0YXRpYyBQeUNBcmdPYmplY3QgKgotU2ltcGxlVHlwZV9wYXJhbWZ1bmMoQ0RhdGFPYmplY3QgKnNlbGYpCitQeUNTaW1wbGVUeXBlX3BhcmFtZnVuYyhDRGF0YU9iamVjdCAqc2VsZikKIHsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0OwogICAgIGNoYXIgKmZtdDsKQEAgLTE4MjUsMTAgKzE4NDUsMTAgQEAKICAgICBmbXQgPSBQeVN0cmluZ19Bc1N0cmluZyhkaWN0LT5wcm90byk7CiAgICAgYXNzZXJ0KGZtdCk7CiAKLSAgICBmZCA9IGdldGVudHJ5KGZtdCk7CisgICAgZmQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoZm10KTsKICAgICBhc3NlcnQoZmQpOwogCi0gICAgcGFyZyA9IG5ld19DQXJnT2JqZWN0KCk7CisgICAgcGFyZyA9IFB5Q0FyZ09iamVjdF9uZXcoKTsKICAgICBpZiAocGFyZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTg0MSw3ICsxODYxLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLVNpbXBsZVR5cGVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorUHlDU2ltcGxlVHlwZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlUeXBlT2JqZWN0ICpyZXN1bHQ7CiAgICAgU3RnRGljdE9iamVjdCAqc3RnZGljdDsKQEAgLTE4ODcsNyArMTkwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICBTSU1QTEVfVFlQRV9DSEFSUyk7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGZtdCA9IGdldGVudHJ5KFB5U3RyaW5nX0FTX1NUUklORyhwcm90bykpOworICAgIGZtdCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYyhQeVN0cmluZ19BU19TVFJJTkcocHJvdG8pKTsKICAgICBpZiAoZm10ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiX3R5cGVfICclcycgbm90IHN1cHBvcnRlZCIsCkBAIC0xODk2LDcgKzE5MTYsNyBAQAogICAgIH0KIAogICAgIHN0Z2RpY3QgPSAoU3RnRGljdE9iamVjdCAqKVB5T2JqZWN0X0NhbGxPYmplY3QoCi0gICAgICAgIChQeU9iamVjdCAqKSZTdGdEaWN0X1R5cGUsIE5VTEwpOworICAgICAgICAoUHlPYmplY3QgKikmUHlDU3RnRGljdF9UeXBlLCBOVUxMKTsKICAgICBpZiAoIXN0Z2RpY3QpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTE5MDcsOSArMTkyNyw5IEBACiAgICAgc3RnZGljdC0+c2V0ZnVuYyA9IGZtdC0+c2V0ZnVuYzsKICAgICBzdGdkaWN0LT5nZXRmdW5jID0gZm10LT5nZXRmdW5jOwogI2lmZGVmIFdPUkRTX0JJR0VORElBTgotICAgIHN0Z2RpY3QtPmZvcm1hdCA9IGFsbG9jX2Zvcm1hdF9zdHJpbmcoIj4iLCBwcm90b19zdHIpOworICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZygiPiIsIHByb3RvX3N0cik7CiAjZWxzZQotICAgIHN0Z2RpY3QtPmZvcm1hdCA9IGFsbG9jX2Zvcm1hdF9zdHJpbmcoIjwiLCBwcm90b19zdHIpOworICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZygiPCIsIHByb3RvX3N0cik7CiAjZW5kaWYKICAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CkBAIC0xOTE4LDcgKzE5MzgsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBzdGdkaWN0LT5wYXJhbWZ1bmMgPSBTaW1wbGVUeXBlX3BhcmFtZnVuYzsKKyAgICBzdGdkaWN0LT5wYXJhbWZ1bmMgPSBQeUNTaW1wbGVUeXBlX3BhcmFtZnVuYzsKIC8qCiAgICAgaWYgKHJlc3VsdC0+dHBfYmFzZSAhPSAmU2ltcGxlX1R5cGUpIHsKICAgICAgICAgc3RnZGljdC0+c2V0ZnVuYyA9IE5VTEw7CkBAIC0xOTM5LDcgKzE5NTksNyBAQAogICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKXN0Z2RpY3Q7CiAKICAgICAvKiBJbnN0YWxsIGZyb21fcGFyYW0gY2xhc3MgbWV0aG9kcyBpbiBjdHlwZXMgYmFzZSBjbGFzc2VzLgotICAgICAgIE92ZXJyaWRlcyB0aGUgU2ltcGxlVHlwZV9mcm9tX3BhcmFtIGdlbmVyaWMgbWV0aG9kLgorICAgICAgIE92ZXJyaWRlcyB0aGUgUHlDU2ltcGxlVHlwZV9mcm9tX3BhcmFtIGdlbmVyaWMgbWV0aG9kLgogICAgICAqLwogICAgIGlmIChyZXN1bHQtPnRwX2Jhc2UgPT0gJlNpbXBsZV9UeXBlKSB7CiAgICAgICAgIHN3aXRjaCAoUHlTdHJpbmdfQVNfU1RSSU5HKHByb3RvKVswXSkgewpAQCAtMTk5OSw3ICsyMDE5LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICh0eXBlID09ICZTaW1wbGVUeXBlX1R5cGUgJiYgZm10LT5zZXRmdW5jX3N3YXBwZWQgJiYgZm10LT5nZXRmdW5jX3N3YXBwZWQpIHsKKyAgICBpZiAodHlwZSA9PSAmUHlDU2ltcGxlVHlwZV9UeXBlICYmIGZtdC0+c2V0ZnVuY19zd2FwcGVkICYmIGZtdC0+Z2V0ZnVuY19zd2FwcGVkKSB7CiAgICAgICAgIFB5T2JqZWN0ICpzd2FwcGVkID0gQ3JlYXRlU3dhcHBlZFR5cGUodHlwZSwgYXJncywga3dkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bywgZm10KTsKICAgICAgICAgU3RnRGljdE9iamVjdCAqc3dfZGljdDsKQEAgLTIwMTQsMTQgKzIwMzQsMTQgQEAKICAgICAgICAgUHlPYmplY3RfU2V0QXR0clN0cmluZyhzd2FwcGVkLCAiX19jdHlwZV9iZV9fIiwgKFB5T2JqZWN0ICopcmVzdWx0KTsKICAgICAgICAgUHlPYmplY3RfU2V0QXR0clN0cmluZyhzd2FwcGVkLCAiX19jdHlwZV9sZV9fIiwgc3dhcHBlZCk7CiAgICAgICAgIC8qIFdlIGFyZSBjcmVhdGluZyB0aGUgdHlwZSBmb3IgdGhlIE9USEVSIGVuZGlhbiAqLwotICAgICAgICBzd19kaWN0LT5mb3JtYXQgPSBhbGxvY19mb3JtYXRfc3RyaW5nKCI8Iiwgc3RnZGljdC0+Zm9ybWF0KzEpOworICAgICAgICBzd19kaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoIjwiLCBzdGdkaWN0LT5mb3JtYXQrMSk7CiAjZWxzZQogICAgICAgICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKXJlc3VsdCwgIl9fY3R5cGVfYmVfXyIsIHN3YXBwZWQpOwogICAgICAgICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKXJlc3VsdCwgIl9fY3R5cGVfbGVfXyIsIChQeU9iamVjdCAqKXJlc3VsdCk7CiAgICAgICAgIFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoc3dhcHBlZCwgIl9fY3R5cGVfbGVfXyIsIChQeU9iamVjdCAqKXJlc3VsdCk7CiAgICAgICAgIFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoc3dhcHBlZCwgIl9fY3R5cGVfYmVfXyIsIHN3YXBwZWQpOwogICAgICAgICAvKiBXZSBhcmUgY3JlYXRpbmcgdGhlIHR5cGUgZm9yIHRoZSBPVEhFUiBlbmRpYW4gKi8KLSAgICAgICAgc3dfZGljdC0+Zm9ybWF0ID0gYWxsb2NfZm9ybWF0X3N0cmluZygiPiIsIHN0Z2RpY3QtPmZvcm1hdCsxKTsKKyAgICAgICAgc3dfZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKCI+Iiwgc3RnZGljdC0+Zm9ybWF0KzEpOwogI2VuZGlmCiAgICAgICAgIFB5X0RFQ1JFRihzd2FwcGVkKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKQEAgLTIwMzgsNyArMjA1OCw3IEBACiAgKiBDb252ZXJ0IGEgcGFyYW1ldGVyIGludG8gc29tZXRoaW5nIHRoYXQgQ29udlBhcmFtIGNhbiBoYW5kbGUuCiAgKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1TaW1wbGVUeXBlX2Zyb21fcGFyYW0oUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSkKK1B5Q1NpbXBsZVR5cGVfZnJvbV9wYXJhbShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CiAgICAgY2hhciAqZm10OwpAQCAtMjA2MCwxMCArMjA4MCwxMCBAQAogICAgIGZtdCA9IFB5U3RyaW5nX0FzU3RyaW5nKGRpY3QtPnByb3RvKTsKICAgICBhc3NlcnQoZm10KTsKIAotICAgIGZkID0gZ2V0ZW50cnkoZm10KTsKKyAgICBmZCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYyhmbXQpOwogICAgIGFzc2VydChmZCk7CiAKLSAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgIGlmIChwYXJnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yMDc3LDcgKzIwOTcsNyBAQAogCiAgICAgYXNfcGFyYW1ldGVyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh2YWx1ZSwgIl9hc19wYXJhbWV0ZXJfIik7CiAgICAgaWYgKGFzX3BhcmFtZXRlcikgewotICAgICAgICB2YWx1ZSA9IFNpbXBsZVR5cGVfZnJvbV9wYXJhbSh0eXBlLCBhc19wYXJhbWV0ZXIpOworICAgICAgICB2YWx1ZSA9IFB5Q1NpbXBsZVR5cGVfZnJvbV9wYXJhbSh0eXBlLCBhc19wYXJhbWV0ZXIpOwogICAgICAgICBQeV9ERUNSRUYoYXNfcGFyYW1ldGVyKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KQEAgLTIwODYsOCArMjEwNiw4IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBQeU1ldGhvZERlZiBTaW1wbGVUeXBlX21ldGhvZHNbXSA9IHsKLSAgICB7ICJmcm9tX3BhcmFtIiwgU2ltcGxlVHlwZV9mcm9tX3BhcmFtLCBNRVRIX08sIGZyb21fcGFyYW1fZG9jIH0sCitzdGF0aWMgUHlNZXRob2REZWYgUHlDU2ltcGxlVHlwZV9tZXRob2RzW10gPSB7CisgICAgeyAiZnJvbV9wYXJhbSIsIFB5Q1NpbXBsZVR5cGVfZnJvbV9wYXJhbSwgTUVUSF9PLCBmcm9tX3BhcmFtX2RvYyB9LAogICAgIHsgImZyb21fYWRkcmVzcyIsIENEYXRhVHlwZV9mcm9tX2FkZHJlc3MsIE1FVEhfTywgZnJvbV9hZGRyZXNzX2RvYyB9LAogICAgIHsgImZyb21fYnVmZmVyIiwgQ0RhdGFUeXBlX2Zyb21fYnVmZmVyLCBNRVRIX1ZBUkFSR1MsIGZyb21fYnVmZmVyX2RvYywgfSwKICAgICB7ICJmcm9tX2J1ZmZlcl9jb3B5IiwgQ0RhdGFUeXBlX2Zyb21fYnVmZmVyX2NvcHksIE1FVEhfVkFSQVJHUywgZnJvbV9idWZmZXJfY29weV9kb2MsIH0sCkBAIC0yMDk1LDkgKzIxMTUsOSBAQAogICAgIHsgTlVMTCwgTlVMTCB9LAogfTsKIAotUHlUeXBlT2JqZWN0IFNpbXBsZVR5cGVfVHlwZSA9IHsKK1B5VHlwZU9iamVjdCBQeUNTaW1wbGVUeXBlX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgIl9jdHlwZXMuU2ltcGxlVHlwZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICAiX2N0eXBlcy5QeUNTaW1wbGVUeXBlIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCkBAIC0yMTE2LDE0ICsyMTM2LDE0IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyogdHBfZmxhZ3MgKi8KLSAgICAibWV0YXR5cGUgZm9yIHRoZSBTaW1wbGVUeXBlIE9iamVjdHMiLCAgICAgIC8qIHRwX2RvYyAqLworICAgICJtZXRhdHlwZSBmb3IgdGhlIFB5Q1NpbXBsZVR5cGUgT2JqZWN0cyIsICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIFNpbXBsZVR5cGVfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIFB5Q1NpbXBsZVR5cGVfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC0yMTMzLDEzICsyMTUzLDEzIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwotICAgIFNpbXBsZVR5cGVfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgUHlDU2ltcGxlVHlwZV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gIENGdW5jUHRyVHlwZV9UeXBlCisgIFB5Q0Z1bmNQdHJUeXBlX1R5cGUKICAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjE5NSw3ICsyMjE1LDcgQEAKICAgICBQeU9iamVjdCAqb2I7CiAgICAgUHlPYmplY3QgKmNvbnZlcnRlcnMgPSBOVUxMOwogCi0gICAgc3RnZGljdC0+YWxpZ24gPSBnZXRlbnRyeSgiUCIpLT5wZmZpX3R5cGUtPmFsaWdubWVudDsKKyAgICBzdGdkaWN0LT5hbGlnbiA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiUCIpLT5wZmZpX3R5cGUtPmFsaWdubWVudDsKICAgICBzdGdkaWN0LT5sZW5ndGggPSAxOwogICAgIHN0Z2RpY3QtPnNpemUgPSBzaXplb2Yodm9pZCAqKTsKICAgICBzdGdkaWN0LT5zZXRmdW5jID0gTlVMTDsKQEAgLTIyNTUsMTEgKzIyNzUsMTEgQEAKIH0KIAogc3RhdGljIFB5Q0FyZ09iamVjdCAqCi1DRnVuY1B0clR5cGVfcGFyYW1mdW5jKENEYXRhT2JqZWN0ICpzZWxmKQorUHlDRnVuY1B0clR5cGVfcGFyYW1mdW5jKENEYXRhT2JqZWN0ICpzZWxmKQogewogICAgIFB5Q0FyZ09iamVjdCAqcGFyZzsKIAotICAgIHBhcmcgPSBuZXdfQ0FyZ09iamVjdCgpOworICAgIHBhcmcgPSBQeUNBcmdPYmplY3RfbmV3KCk7CiAgICAgaWYgKHBhcmcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIyNzIsMjQgKzIyOTIsMjQgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNGdW5jUHRyVHlwZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitQeUNGdW5jUHRyVHlwZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlUeXBlT2JqZWN0ICpyZXN1bHQ7CiAgICAgU3RnRGljdE9iamVjdCAqc3RnZGljdDsKIAogICAgIHN0Z2RpY3QgPSAoU3RnRGljdE9iamVjdCAqKVB5T2JqZWN0X0NhbGxPYmplY3QoCi0gICAgICAgIChQeU9iamVjdCAqKSZTdGdEaWN0X1R5cGUsIE5VTEwpOworICAgICAgICAoUHlPYmplY3QgKikmUHlDU3RnRGljdF9UeXBlLCBOVUxMKTsKICAgICBpZiAoIXN0Z2RpY3QpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc3RnZGljdC0+cGFyYW1mdW5jID0gQ0Z1bmNQdHJUeXBlX3BhcmFtZnVuYzsKKyAgICBzdGdkaWN0LT5wYXJhbWZ1bmMgPSBQeUNGdW5jUHRyVHlwZV9wYXJhbWZ1bmM7CiAgICAgLyogV2UgZG8gTk9UIGV4cG9zZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGluIHRoZSBmb3JtYXQgc3RyaW5nLiAgSXQKICAgICAgICBpcyBpbXBvc3NpYmxlLCBnZW5lcmFsbHksIGJlY2F1c2UgdGhlIG9ubHkgcmVxdWlyZW1lbnQgZm9yIHRoZQogICAgICAgIGFyZ3R5cGVzIGl0ZW1zIGlzIHRoYXQgdGhleSBoYXZlIGEgLmZyb21fcGFyYW0gbWV0aG9kIC0gd2UgZG8gbm90CiAgICAgICAga25vdyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyAoYWx0aG91Z2gsIGluIHByYWN0aWNlLCBtb3N0CiAgICAgICAgYXJndHlwZXMgd291bGQgYmUgYSBjdHlwZXMgdHlwZSkuCiAgICAgKi8KLSAgICBzdGdkaWN0LT5mb3JtYXQgPSBhbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJYe30iKTsKKyAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIlh7fSIpOwogICAgIHN0Z2RpY3QtPmZsYWdzIHw9IFRZUEVGTEFHX0lTUE9JTlRFUjsKIAogICAgIC8qIGNyZWF0ZSB0aGUgbmV3IGluc3RhbmNlICh3aGljaCBpcyBhIGNsYXNzLApAQCAtMjMxNyw5ICsyMzM3LDkgQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopcmVzdWx0OwogfQogCi1QeVR5cGVPYmplY3QgQ0Z1bmNQdHJUeXBlX1R5cGUgPSB7CitQeVR5cGVPYmplY3QgUHlDRnVuY1B0clR5cGVfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX2N0eXBlcy5DRnVuY1B0clR5cGUiLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICAiX2N0eXBlcy5QeUNGdW5jUHRyVHlwZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwpAQCAtMjM1NSw3ICsyMzc1LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgQ0Z1bmNQdHJUeXBlX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBQeUNGdW5jUHRyVHlwZV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIApAQCAtMjM2NSw3ICsyMzg1LDcgQEAKICAqLwogCiBzdGF0aWMgQ0RhdGFPYmplY3QgKgotQ0RhdGFfR2V0Q29udGFpbmVyKENEYXRhT2JqZWN0ICpzZWxmKQorUHlDRGF0YV9HZXRDb250YWluZXIoQ0RhdGFPYmplY3QgKnNlbGYpCiB7CiAgICAgd2hpbGUgKHNlbGYtPmJfYmFzZSkKICAgICAgICAgc2VsZiA9IHNlbGYtPmJfYmFzZTsKQEAgLTIzODMsNyArMjQwMyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogR2V0S2VlcGVkT2JqZWN0cyhDRGF0YU9iamVjdCAqdGFyZ2V0KQogewotICAgIHJldHVybiBDRGF0YV9HZXRDb250YWluZXIodGFyZ2V0KS0+Yl9vYmplY3RzOworICAgIHJldHVybiBQeUNEYXRhX0dldENvbnRhaW5lcih0YXJnZXQpLT5iX29iamVjdHM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDQ3LDcgKzI0NjcsNyBAQAogICAgICAgICBQeV9ERUNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBvYiA9IENEYXRhX0dldENvbnRhaW5lcih0YXJnZXQpOworICAgIG9iID0gUHlDRGF0YV9HZXRDb250YWluZXIodGFyZ2V0KTsKICAgICBpZiAob2ItPmJfb2JqZWN0cyA9PSBOVUxMIHx8ICFQeURpY3RfQ2hlY2tFeGFjdChvYi0+Yl9vYmplY3RzKSkgewogICAgICAgICBQeV9YREVDUkVGKG9iLT5iX29iamVjdHMpOwogICAgICAgICBvYi0+Yl9vYmplY3RzID0ga2VlcDsgLyogcmVmY291bnQgY29uc3VtZWQgKi8KQEAgLTI0NjYsMTAgKzI0ODYsMTAgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gIENEYXRhX1R5cGUKKyAgUHlDRGF0YV9UeXBlCiAgKi8KIHN0YXRpYyBpbnQKLUNEYXRhX3RyYXZlcnNlKENEYXRhT2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK1B5Q0RhdGFfdHJhdmVyc2UoQ0RhdGFPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewogICAgIFB5X1ZJU0lUKHNlbGYtPmJfb2JqZWN0cyk7CiAgICAgUHlfVklTSVQoKFB5T2JqZWN0ICopc2VsZi0+Yl9iYXNlKTsKQEAgLTI0NzcsNyArMjQ5Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLUNEYXRhX2NsZWFyKENEYXRhT2JqZWN0ICpzZWxmKQorUHlDRGF0YV9jbGVhcihDRGF0YU9iamVjdCAqc2VsZikKIHsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0ID0gUHlPYmplY3Rfc3RnZGljdCgoUHlPYmplY3QgKilzZWxmKTsKICAgICBhc3NlcnQoZGljdCk7IC8qIENhbm5vdCBiZSBOVUxMIGZvciBDRGF0YU9iamVjdCBpbnN0YW5jZXMgKi8KQEAgLTI0OTEsMTMgKzI1MTEsMTMgQEAKIH0KIAogc3RhdGljIHZvaWQKLUNEYXRhX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCitQeUNEYXRhX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgQ0RhdGFfY2xlYXIoKENEYXRhT2JqZWN0ICopc2VsZik7CisgICAgUHlDRGF0YV9jbGVhcigoQ0RhdGFPYmplY3QgKilzZWxmKTsKICAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHNlbGYpOwogfQogCi1zdGF0aWMgUHlNZW1iZXJEZWYgQ0RhdGFfbWVtYmVyc1tdID0geworc3RhdGljIFB5TWVtYmVyRGVmIFB5Q0RhdGFfbWVtYmVyc1tdID0gewogICAgIHsgIl9iX2Jhc2VfIiwgVF9PQkpFQ1QsCiAgICAgICBvZmZzZXRvZihDRGF0YU9iamVjdCwgYl9iYXNlKSwgUkVBRE9OTFksCiAgICAgICAidGhlIGJhc2Ugb2JqZWN0IiB9LApAQCAtMjUxMSw3ICsyNTMxLDcgQEAKIH07CiAKICNpZiAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMjA2MDAwMCkKLXN0YXRpYyBpbnQgQ0RhdGFfTmV3R2V0QnVmZmVyKFB5T2JqZWN0ICpfc2VsZiwgUHlfYnVmZmVyICp2aWV3LCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IFB5Q0RhdGFfTmV3R2V0QnVmZmVyKFB5T2JqZWN0ICpfc2VsZiwgUHlfYnVmZmVyICp2aWV3LCBpbnQgZmxhZ3MpCiB7CiAgICAgQ0RhdGFPYmplY3QgKnNlbGYgPSAoQ0RhdGFPYmplY3QgKilfc2VsZjsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0ID0gUHlPYmplY3Rfc3RnZGljdChfc2VsZik7CkBAIC0yNTM5LDE0ICsyNTU5LDE0IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIFB5X3NzaXplX3QgQ0RhdGFfR2V0U2VnY291bnQoUHlPYmplY3QgKl9zZWxmLCBQeV9zc2l6ZV90ICpsZW5wKQorc3RhdGljIFB5X3NzaXplX3QgUHlDRGF0YV9HZXRTZWdjb3VudChQeU9iamVjdCAqX3NlbGYsIFB5X3NzaXplX3QgKmxlbnApCiB7CiAgICAgaWYgKGxlbnApCiAgICAgICAgICpsZW5wID0gMTsKICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIFB5X3NzaXplX3QgQ0RhdGFfR2V0QnVmZmVyKFB5T2JqZWN0ICpfc2VsZiwgUHlfc3NpemVfdCBzZWcsIHZvaWQgKipwcHRyKQorc3RhdGljIFB5X3NzaXplX3QgUHlDRGF0YV9HZXRCdWZmZXIoUHlPYmplY3QgKl9zZWxmLCBQeV9zc2l6ZV90IHNlZywgdm9pZCAqKnBwdHIpCiB7CiAgICAgQ0RhdGFPYmplY3QgKnNlbGYgPSAoQ0RhdGFPYmplY3QgKilfc2VsZjsKICAgICBpZiAoc2VnICE9IDApIHsKQEAgLTI1NTcsMTMgKzI1NzcsMTMgQEAKICAgICByZXR1cm4gc2VsZi0+Yl9zaXplOwogfQogCi1zdGF0aWMgUHlCdWZmZXJQcm9jcyBDRGF0YV9hc19idWZmZXIgPSB7Ci0gICAgKHJlYWRidWZmZXJwcm9jKUNEYXRhX0dldEJ1ZmZlciwKLSAgICAod3JpdGVidWZmZXJwcm9jKUNEYXRhX0dldEJ1ZmZlciwKLSAgICAoc2VnY291bnRwcm9jKUNEYXRhX0dldFNlZ2NvdW50LAorc3RhdGljIFB5QnVmZmVyUHJvY3MgUHlDRGF0YV9hc19idWZmZXIgPSB7CisgICAgKHJlYWRidWZmZXJwcm9jKVB5Q0RhdGFfR2V0QnVmZmVyLAorICAgICh3cml0ZWJ1ZmZlcnByb2MpUHlDRGF0YV9HZXRCdWZmZXIsCisgICAgKHNlZ2NvdW50cHJvYylQeUNEYXRhX0dldFNlZ2NvdW50LAogICAgIChjaGFyYnVmZmVycHJvYylOVUxMLAogI2lmIChQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDYwMDAwKQotICAgIChnZXRidWZmZXJwcm9jKUNEYXRhX05ld0dldEJ1ZmZlciwKKyAgICAoZ2V0YnVmZmVycHJvYylQeUNEYXRhX05ld0dldEJ1ZmZlciwKICAgICAocmVsZWFzZWJ1ZmZlcnByb2MpTlVMTCwKICNlbmRpZgogfTsKQEAgLTI1NzIsMTQgKzI1OTIsMTQgQEAKICAqIENEYXRhIG9iamVjdHMgYXJlIG11dGFibGUsIHNvIHRoZXkgY2Fubm90IGJlIGhhc2hhYmxlIQogICovCiBzdGF0aWMgbG9uZwotQ0RhdGFfbm9oYXNoKFB5T2JqZWN0ICpzZWxmKQorUHlDRGF0YV9ub2hhc2goUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInVuaGFzaGFibGUgdHlwZSIpOwogICAgIHJldHVybiAtMTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNEYXRhX3JlZHVjZShQeU9iamVjdCAqX3NlbGYsIFB5T2JqZWN0ICphcmdzKQorUHlDRGF0YV9yZWR1Y2UoUHlPYmplY3QgKl9zZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBDRGF0YU9iamVjdCAqc2VsZiA9IChDRGF0YU9iamVjdCAqKV9zZWxmOwogCkBAIC0yNTk2LDcgKzI2MTYsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotQ0RhdGFfc2V0c3RhdGUoUHlPYmplY3QgKl9zZWxmLCBQeU9iamVjdCAqYXJncykKK1B5Q0RhdGFfc2V0c3RhdGUoUHlPYmplY3QgKl9zZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3QgbGVuOwpAQCAtMjYyMSwyNSArMjY0MSwyNSBAQAogICogZGVmYXVsdCBfX2N0eXBlc19mcm9tX291dHBhcmFtX18gbWV0aG9kIHJldHVybnMgc2VsZi4KICAqLwogc3RhdGljIFB5T2JqZWN0ICoKLUNEYXRhX2Zyb21fb3V0cGFyYW0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorUHlDRGF0YV9mcm9tX291dHBhcmFtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9JTkNSRUYoc2VsZik7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLXN0YXRpYyBQeU1ldGhvZERlZiBDRGF0YV9tZXRob2RzW10gPSB7Ci0gICAgeyAiX19jdHlwZXNfZnJvbV9vdXRwYXJhbV9fIiwgQ0RhdGFfZnJvbV9vdXRwYXJhbSwgTUVUSF9OT0FSR1MsIH0sCi0gICAgeyAiX19yZWR1Y2VfXyIsIENEYXRhX3JlZHVjZSwgTUVUSF9OT0FSR1MsIH0sCi0gICAgeyAiX19zZXRzdGF0ZV9fIiwgQ0RhdGFfc2V0c3RhdGUsIE1FVEhfVkFSQVJHUywgfSwKK3N0YXRpYyBQeU1ldGhvZERlZiBQeUNEYXRhX21ldGhvZHNbXSA9IHsKKyAgICB7ICJfX2N0eXBlc19mcm9tX291dHBhcmFtX18iLCBQeUNEYXRhX2Zyb21fb3V0cGFyYW0sIE1FVEhfTk9BUkdTLCB9LAorICAgIHsgIl9fcmVkdWNlX18iLCBQeUNEYXRhX3JlZHVjZSwgTUVUSF9OT0FSR1MsIH0sCisgICAgeyAiX19zZXRzdGF0ZV9fIiwgUHlDRGF0YV9zZXRzdGF0ZSwgTUVUSF9WQVJBUkdTLCB9LAogICAgIHsgTlVMTCwgTlVMTCB9LAogfTsKIAotUHlUeXBlT2JqZWN0IENEYXRhX1R5cGUgPSB7CitQeVR5cGVPYmplY3QgUHlDRGF0YV9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJfY3R5cGVzLl9DRGF0YSIsCiAgICAgc2l6ZW9mKENEYXRhT2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCi0gICAgQ0RhdGFfZGVhbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgUHlDRGF0YV9kZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCkBAIC0yNjQ4LDIyICsyNjY4LDIyIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCi0gICAgQ0RhdGFfbm9oYXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgUHlDRGF0YV9ub2hhc2gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwotICAgICZDRGF0YV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgJlB5Q0RhdGFfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyogdHBfZmxhZ3MgKi8KICAgICAiWFhYIHRvIGJlIHByb3ZpZGVkIiwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgICh0cmF2ZXJzZXByb2MpQ0RhdGFfdHJhdmVyc2UsICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAoaW5xdWlyeSlDRGF0YV9jbGVhciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgKHRyYXZlcnNlcHJvYylQeUNEYXRhX3RyYXZlcnNlLCAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KVB5Q0RhdGFfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICBDRGF0YV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KLSAgICBDRGF0YV9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBQeUNEYXRhX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIFB5Q0RhdGFfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KQEAgLTI2NzYsNyArMjY5Niw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCi1zdGF0aWMgaW50IENEYXRhX01hbGxvY0J1ZmZlcihDRGF0YU9iamVjdCAqb2JqLCBTdGdEaWN0T2JqZWN0ICpkaWN0KQorc3RhdGljIGludCBQeUNEYXRhX01hbGxvY0J1ZmZlcihDRGF0YU9iamVjdCAqb2JqLCBTdGdEaWN0T2JqZWN0ICpkaWN0KQogewogICAgIGlmICgoc2l6ZV90KWRpY3QtPnNpemUgPD0gc2l6ZW9mKG9iai0+Yl92YWx1ZSkpIHsKICAgICAgICAgLyogTm8gbmVlZCB0byBjYWxsIG1hbGxvYywgY2FuIHVzZSB0aGUgZGVmYXVsdCBidWZmZXIgKi8KQEAgLTI3MDUsNyArMjcyNSw3IEBACiB9CiAKIFB5T2JqZWN0ICoKLUNEYXRhX0Zyb21CYXNlT2JqKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZSwgUHlfc3NpemVfdCBpbmRleCwgY2hhciAqYWRyKQorUHlDRGF0YV9Gcm9tQmFzZU9iaihQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2UsIFB5X3NzaXplX3QgaW5kZXgsIGNoYXIgKmFkcikKIHsKICAgICBDRGF0YU9iamVjdCAqY21lbTsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0OwpAQCAtMjczMyw3ICsyNzUzLDcgQEAKICAgICAgICAgY21lbS0+Yl9iYXNlID0gKENEYXRhT2JqZWN0ICopYmFzZTsKICAgICAgICAgY21lbS0+Yl9pbmRleCA9IGluZGV4OwogICAgIH0gZWxzZSB7IC8qIGNvcHkgY29udGVudHMgb2YgYWRyICovCi0gICAgICAgIGlmICgtMSA9PSBDRGF0YV9NYWxsb2NCdWZmZXIoY21lbSwgZGljdCkpIHsKKyAgICAgICAgaWYgKC0xID09IFB5Q0RhdGFfTWFsbG9jQnVmZmVyKGNtZW0sIGRpY3QpKSB7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIFB5X0RFQ1JFRihjbWVtKTsKICAgICAgICAgfQpAQCAtMjc0Nyw3ICsyNzY3LDcgQEAKICBCb3ggYSBtZW1vcnkgYmxvY2sgaW50byBhIENEYXRhIGluc3RhbmNlLgogKi8KIFB5T2JqZWN0ICoKLUNEYXRhX0F0QWRkcmVzcyhQeU9iamVjdCAqdHlwZSwgdm9pZCAqYnVmKQorUHlDRGF0YV9BdEFkZHJlc3MoUHlPYmplY3QgKnR5cGUsIHZvaWQgKmJ1ZikKIHsKICAgICBDRGF0YU9iamVjdCAqcGQ7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdDsKQEAgLTI3NzYsMTcgKzI3OTYsMTcgQEAKICAgY2xhc3Nlcy4gIEZBTFNFIG90aGVyd2lzZSBGQUxTRSBhbHNvIGZvciBzdWJjbGFzc2VzIG9mIGNfaW50IGFuZAogICBzdWNoLgogKi8KLWludCBJc1NpbXBsZVN1YlR5cGUoUHlPYmplY3QgKm9iaikKK2ludCBfY3R5cGVzX3NpbXBsZV9pbnN0YW5jZShQeU9iamVjdCAqb2JqKQogewogICAgIFB5VHlwZU9iamVjdCAqdHlwZSA9IChQeVR5cGVPYmplY3QgKilvYmo7CiAKLSAgICBpZiAoU2ltcGxlVHlwZU9iamVjdF9DaGVjayh0eXBlKSkKKyAgICBpZiAoUHlDU2ltcGxlVHlwZU9iamVjdF9DaGVjayh0eXBlKSkKICAgICAgICAgcmV0dXJuIHR5cGUtPnRwX2Jhc2UgIT0gJlNpbXBsZV9UeXBlOwogICAgIHJldHVybiAwOwogfQogCiBQeU9iamVjdCAqCi1DRGF0YV9nZXQoUHlPYmplY3QgKnR5cGUsIEdFVEZVTkMgZ2V0ZnVuYywgUHlPYmplY3QgKnNyYywKK1B5Q0RhdGFfZ2V0KFB5T2JqZWN0ICp0eXBlLCBHRVRGVU5DIGdldGZ1bmMsIFB5T2JqZWN0ICpzcmMsCiAgICAgICAgICAgUHlfc3NpemVfdCBpbmRleCwgUHlfc3NpemVfdCBzaXplLCBjaGFyICphZHIpCiB7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdDsKQEAgLTI3OTQsMTYgKzI4MTQsMTYgQEAKICAgICAgICAgcmV0dXJuIGdldGZ1bmMoYWRyLCBzaXplKTsKICAgICBhc3NlcnQodHlwZSk7CiAgICAgZGljdCA9IFB5VHlwZV9zdGdkaWN0KHR5cGUpOwotICAgIGlmIChkaWN0ICYmIGRpY3QtPmdldGZ1bmMgJiYgIUlzU2ltcGxlU3ViVHlwZSh0eXBlKSkKKyAgICBpZiAoZGljdCAmJiBkaWN0LT5nZXRmdW5jICYmICFfY3R5cGVzX3NpbXBsZV9pbnN0YW5jZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIGRpY3QtPmdldGZ1bmMoYWRyLCBzaXplKTsKLSAgICByZXR1cm4gQ0RhdGFfRnJvbUJhc2VPYmoodHlwZSwgc3JjLCBpbmRleCwgYWRyKTsKKyAgICByZXR1cm4gUHlDRGF0YV9Gcm9tQmFzZU9iaih0eXBlLCBzcmMsIGluZGV4LCBhZHIpOwogfQogCiAvKgotICBIZWxwZXIgZnVuY3Rpb24gZm9yIENEYXRhX3NldCBiZWxvdy4KKyAgSGVscGVyIGZ1bmN0aW9uIGZvciBQeUNEYXRhX3NldCBiZWxvdy4KICovCiBzdGF0aWMgUHlPYmplY3QgKgotX0NEYXRhX3NldChDRGF0YU9iamVjdCAqZHN0LCBQeU9iamVjdCAqdHlwZSwgU0VURlVOQyBzZXRmdW5jLCBQeU9iamVjdCAqdmFsdWUsCitfUHlDRGF0YV9zZXQoQ0RhdGFPYmplY3QgKmRzdCwgUHlPYmplY3QgKnR5cGUsIFNFVEZVTkMgc2V0ZnVuYywgUHlPYmplY3QgKnZhbHVlLAogICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsIGNoYXIgKnB0cikKIHsKICAgICBDRGF0YU9iamVjdCAqc3JjOwpAQCAtMjgyNSwxNSArMjg0NSwxNSBAQAogICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICAgICAgICAgIG9iID0gUHlPYmplY3RfQ2FsbE9iamVjdCh0eXBlLCB2YWx1ZSk7CiAgICAgICAgICAgICBpZiAob2IgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIEV4dGVuZF9FcnJvcl9JbmZvKFB5RXhjX1J1bnRpbWVFcnJvciwgIiglcykgIiwKKyAgICAgICAgICAgICAgICBfY3R5cGVzX2V4dGVuZF9lcnJvcihQeUV4Y19SdW50aW1lRXJyb3IsICIoJXMpICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQeVR5cGVPYmplY3QgKil0eXBlKS0+dHBfbmFtZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQgPSBfQ0RhdGFfc2V0KGRzdCwgdHlwZSwgc2V0ZnVuYywgb2IsCisgICAgICAgICAgICByZXN1bHQgPSBfUHlDRGF0YV9zZXQoZHN0LCB0eXBlLCBzZXRmdW5jLCBvYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgcHRyKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihvYik7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09IFB5X05vbmUgJiYgUG9pbnRlclR5cGVPYmplY3RfQ2hlY2sodHlwZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBQeV9Ob25lICYmIFB5Q1BvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKHR5cGUpKSB7CiAgICAgICAgICAgICAqKHZvaWQgKiopcHRyID0gTlVMTDsKICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOwpAQCAtMjg1Miw3ICsyODcyLDcgQEAKICAgICAgICAgICAgICAgIHNyYy0+Yl9wdHIsCiAgICAgICAgICAgICAgICBzaXplKTsKIAotICAgICAgICBpZiAoUG9pbnRlclR5cGVPYmplY3RfQ2hlY2sodHlwZSkpCisgICAgICAgIGlmIChQeUNQb2ludGVyVHlwZU9iamVjdF9DaGVjayh0eXBlKSkKICAgICAgICAgICAgIC8qIFhYWCAqLzsKIAogICAgICAgICB2YWx1ZSA9IEdldEtlZXBlZE9iamVjdHMoc3JjKTsKQEAgLTI4NjAsNyArMjg4MCw3IEBACiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBpZiAoUG9pbnRlclR5cGVPYmplY3RfQ2hlY2sodHlwZSkKKyAgICBpZiAoUHlDUG9pbnRlclR5cGVPYmplY3RfQ2hlY2sodHlwZSkKICAgICAgICAgJiYgQXJyYXlPYmplY3RfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKnAxLCAqcDI7CiAgICAgICAgIFB5T2JqZWN0ICprZWVwOwpAQCAtMjkwMSw3ICsyOTIxLDcgQEAKICAqIHRvIHRoZSB2YWx1ZSAndmFsdWUnLgogICovCiBpbnQKLUNEYXRhX3NldChQeU9iamVjdCAqZHN0LCBQeU9iamVjdCAqdHlwZSwgU0VURlVOQyBzZXRmdW5jLCBQeU9iamVjdCAqdmFsdWUsCitQeUNEYXRhX3NldChQeU9iamVjdCAqZHN0LCBQeU9iamVjdCAqdHlwZSwgU0VURlVOQyBzZXRmdW5jLCBQeU9iamVjdCAqdmFsdWUsCiAgICAgICAgICAgUHlfc3NpemVfdCBpbmRleCwgUHlfc3NpemVfdCBzaXplLCBjaGFyICpwdHIpCiB7CiAgICAgQ0RhdGFPYmplY3QgKm1lbSA9IChDRGF0YU9iamVjdCAqKWRzdDsKQEAgLTI5MTMsNyArMjkzMyw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICByZXN1bHQgPSBfQ0RhdGFfc2V0KG1lbSwgdHlwZSwgc2V0ZnVuYywgdmFsdWUsCisgICAgcmVzdWx0ID0gX1B5Q0RhdGFfc2V0KG1lbSwgdHlwZSwgc2V0ZnVuYywgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLCBwdHIpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMjkyNyw3ICsyOTQ3LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1HZW5lcmljQ0RhdGFfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorR2VuZXJpY1B5Q0RhdGFfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIENEYXRhT2JqZWN0ICpvYmo7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdDsKQEAgLTI5NDksNyArMjk2OSw3IEBACiAgICAgb2JqLT5iX29iamVjdHMgPSBOVUxMOwogICAgIG9iai0+Yl9sZW5ndGggPSBkaWN0LT5sZW5ndGg7CiAKLSAgICBpZiAoLTEgPT0gQ0RhdGFfTWFsbG9jQnVmZmVyKG9iaiwgZGljdCkpIHsKKyAgICBpZiAoLTEgPT0gUHlDRGF0YV9NYWxsb2NCdWZmZXIob2JqLCBkaWN0KSkgewogICAgICAgICBQeV9ERUNSRUYob2JqKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMjk1NywxMSArMjk3NywxMSBAQAogfQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAgQ0Z1bmNQdHJfVHlwZQorICBQeUNGdW5jUHRyX1R5cGUKICovCiAKIHN0YXRpYyBpbnQKLUNGdW5jUHRyX3NldF9lcnJjaGVjayhDRnVuY1B0ck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iKQorUHlDRnVuY1B0cl9zZXRfZXJyY2hlY2soUHlDRnVuY1B0ck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iKQogewogICAgIGlmIChvYiAmJiAhUHlDYWxsYWJsZV9DaGVjayhvYikpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKQEAgLTI5NzUsNyArMjk5NSw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1DRnVuY1B0cl9nZXRfZXJyY2hlY2soQ0Z1bmNQdHJPYmplY3QgKnNlbGYpCitQeUNGdW5jUHRyX2dldF9lcnJjaGVjayhQeUNGdW5jUHRyT2JqZWN0ICpzZWxmKQogewogICAgIGlmIChzZWxmLT5lcnJjaGVjaykgewogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+ZXJyY2hlY2spOwpAQCAtMjk4Niw3ICszMDA2LDcgQEAKIH0KIAogc3RhdGljIGludAotQ0Z1bmNQdHJfc2V0X3Jlc3R5cGUoQ0Z1bmNQdHJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYikKK1B5Q0Z1bmNQdHJfc2V0X3Jlc3R5cGUoUHlDRnVuY1B0ck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iKQogewogICAgIGlmIChvYiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1hERUNSRUYoc2VsZi0+cmVzdHlwZSk7CkBAIC0zMDExLDcgKzMwMzEsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotQ0Z1bmNQdHJfZ2V0X3Jlc3R5cGUoQ0Z1bmNQdHJPYmplY3QgKnNlbGYpCitQeUNGdW5jUHRyX2dldF9yZXN0eXBlKFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGYpCiB7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdDsKICAgICBpZiAoc2VsZi0+cmVzdHlwZSkgewpAQCAtMzAxOSw3ICszMDM5LDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYtPnJlc3R5cGU7CiAgICAgfQogICAgIGRpY3QgPSBQeU9iamVjdF9zdGdkaWN0KChQeU9iamVjdCAqKXNlbGYpOwotICAgIGFzc2VydChkaWN0KTsgLyogQ2Fubm90IGJlIE5VTEwgZm9yIENGdW5jUHRyT2JqZWN0IGluc3RhbmNlcyAqLworICAgIGFzc2VydChkaWN0KTsgLyogQ2Fubm90IGJlIE5VTEwgZm9yIFB5Q0Z1bmNQdHJPYmplY3QgaW5zdGFuY2VzICovCiAgICAgaWYgKGRpY3QtPnJlc3R5cGUpIHsKICAgICAgICAgUHlfSU5DUkVGKGRpY3QtPnJlc3R5cGUpOwogICAgICAgICByZXR1cm4gZGljdC0+cmVzdHlwZTsKQEAgLTMwMzAsNyArMzA1MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLUNGdW5jUHRyX3NldF9hcmd0eXBlcyhDRnVuY1B0ck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iKQorUHlDRnVuY1B0cl9zZXRfYXJndHlwZXMoUHlDRnVuY1B0ck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iKQogewogICAgIFB5T2JqZWN0ICpjb252ZXJ0ZXJzOwogCkBAIC0zMDUzLDcgKzMwNzMsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotQ0Z1bmNQdHJfZ2V0X2FyZ3R5cGVzKENGdW5jUHRyT2JqZWN0ICpzZWxmKQorUHlDRnVuY1B0cl9nZXRfYXJndHlwZXMoUHlDRnVuY1B0ck9iamVjdCAqc2VsZikKIHsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0OwogICAgIGlmIChzZWxmLT5hcmd0eXBlcykgewpAQCAtMzA2MSw3ICszMDgxLDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYtPmFyZ3R5cGVzOwogICAgIH0KICAgICBkaWN0ID0gUHlPYmplY3Rfc3RnZGljdCgoUHlPYmplY3QgKilzZWxmKTsKLSAgICBhc3NlcnQoZGljdCk7IC8qIENhbm5vdCBiZSBOVUxMIGZvciBDRnVuY1B0ck9iamVjdCBpbnN0YW5jZXMgKi8KKyAgICBhc3NlcnQoZGljdCk7IC8qIENhbm5vdCBiZSBOVUxMIGZvciBQeUNGdW5jUHRyT2JqZWN0IGluc3RhbmNlcyAqLwogICAgIGlmIChkaWN0LT5hcmd0eXBlcykgewogICAgICAgICBQeV9JTkNSRUYoZGljdC0+YXJndHlwZXMpOwogICAgICAgICByZXR1cm4gZGljdC0+YXJndHlwZXM7CkBAIC0zMDcxLDEzICszMDkxLDEzIEBACiAgICAgfQogfQogCi1zdGF0aWMgUHlHZXRTZXREZWYgQ0Z1bmNQdHJfZ2V0c2V0c1tdID0gewotICAgIHsgImVycmNoZWNrIiwgKGdldHRlcilDRnVuY1B0cl9nZXRfZXJyY2hlY2ssIChzZXR0ZXIpQ0Z1bmNQdHJfc2V0X2VycmNoZWNrLAorc3RhdGljIFB5R2V0U2V0RGVmIFB5Q0Z1bmNQdHJfZ2V0c2V0c1tdID0geworICAgIHsgImVycmNoZWNrIiwgKGdldHRlcilQeUNGdW5jUHRyX2dldF9lcnJjaGVjaywgKHNldHRlcilQeUNGdW5jUHRyX3NldF9lcnJjaGVjaywKICAgICAgICJhIGZ1bmN0aW9uIHRvIGNoZWNrIGZvciBlcnJvcnMiLCBOVUxMIH0sCi0gICAgeyAicmVzdHlwZSIsIChnZXR0ZXIpQ0Z1bmNQdHJfZ2V0X3Jlc3R5cGUsIChzZXR0ZXIpQ0Z1bmNQdHJfc2V0X3Jlc3R5cGUsCisgICAgeyAicmVzdHlwZSIsIChnZXR0ZXIpUHlDRnVuY1B0cl9nZXRfcmVzdHlwZSwgKHNldHRlcilQeUNGdW5jUHRyX3NldF9yZXN0eXBlLAogICAgICAgInNwZWNpZnkgdGhlIHJlc3VsdCB0eXBlIiwgTlVMTCB9LAotICAgIHsgImFyZ3R5cGVzIiwgKGdldHRlcilDRnVuY1B0cl9nZXRfYXJndHlwZXMsCi0gICAgICAoc2V0dGVyKUNGdW5jUHRyX3NldF9hcmd0eXBlcywKKyAgICB7ICJhcmd0eXBlcyIsIChnZXR0ZXIpUHlDRnVuY1B0cl9nZXRfYXJndHlwZXMsCisgICAgICAoc2V0dGVyKVB5Q0Z1bmNQdHJfc2V0X2FyZ3R5cGVzLAogICAgICAgInNwZWNpZnkgdGhlIGFyZ3VtZW50IHR5cGVzIiwgTlVMTCB9LAogICAgIHsgTlVMTCwgTlVMTCB9CiB9OwpAQCAtMzEzMiwxMCArMzE1MiwxMCBAQAogewogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CiAKLSAgICBpZiAoUG9pbnRlclR5cGVPYmplY3RfQ2hlY2soYXJnKSkKKyAgICBpZiAoUHlDUG9pbnRlclR5cGVPYmplY3RfQ2hlY2soYXJnKSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBpZiAoQXJyYXlUeXBlT2JqZWN0X0NoZWNrKGFyZykpCisgICAgaWYgKFB5Q0FycmF5VHlwZU9iamVjdF9DaGVjayhhcmcpKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIGRpY3QgPSBQeVR5cGVfc3RnZGljdChhcmcpOwpAQCAtMzE2NSw3ICszMTg1LDcgQEAKICAgICBQeU9iamVjdCAqYXJndHlwZXM7CiAKICAgICBkaWN0ID0gUHlUeXBlX3N0Z2RpY3QoKFB5T2JqZWN0ICopdHlwZSk7Ci0gICAgYXNzZXJ0KGRpY3QpOyAvKiBDYW5ub3QgYmUgTlVMTC4gJ3R5cGUnIGlzIGEgQ0Z1bmNQdHIgdHlwZS4gKi8KKyAgICBhc3NlcnQoZGljdCk7IC8qIENhbm5vdCBiZSBOVUxMLiAndHlwZScgaXMgYSBQeUNGdW5jUHRyIHR5cGUuICovCiAgICAgYXJndHlwZXMgPSBkaWN0LT5hcmd0eXBlczsKIAogICAgIGlmIChwYXJhbWZsYWdzID09IE5VTEwgfHwgZGljdC0+YXJndHlwZXMgPT0gTlVMTCkKQEAgLTMyMzksMTMgKzMyNTksMTMgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotQ0Z1bmNQdHJfRnJvbURsbChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK1B5Q0Z1bmNQdHJfRnJvbURsbChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBjaGFyICpuYW1lOwogICAgIGludCAoKiBhZGRyZXNzKSh2b2lkKTsKICAgICBQeU9iamVjdCAqZGxsOwogICAgIFB5T2JqZWN0ICpvYmo7Ci0gICAgQ0Z1bmNQdHJPYmplY3QgKnNlbGY7CisgICAgUHlDRnVuY1B0ck9iamVjdCAqc2VsZjsKICAgICB2b2lkICpoYW5kbGU7CiAgICAgUHlPYmplY3QgKnBhcmFtZmxhZ3MgPSBOVUxMOwogCkBAIC0zMzAxLDcgKzMzMjEsNyBAQAogICAgIGlmICghX3ZhbGlkYXRlX3BhcmFtZmxhZ3ModHlwZSwgcGFyYW1mbGFncykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZiA9IChDRnVuY1B0ck9iamVjdCAqKUdlbmVyaWNDRGF0YV9uZXcodHlwZSwgYXJncywga3dkcyk7CisgICAgc2VsZiA9IChQeUNGdW5jUHRyT2JqZWN0ICopR2VuZXJpY1B5Q0RhdGFfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTMzMjMsOSArMzM0Myw5IEBACiAKICNpZmRlZiBNU19XSU4zMgogc3RhdGljIFB5T2JqZWN0ICoKLUNGdW5jUHRyX0Zyb21WdGJsSW5kZXgoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitQeUNGdW5jUHRyX0Zyb21WdGJsSW5kZXgoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgQ0Z1bmNQdHJPYmplY3QgKnNlbGY7CisgICAgUHlDRnVuY1B0ck9iamVjdCAqc2VsZjsKICAgICBpbnQgaW5kZXg7CiAgICAgY2hhciAqbmFtZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnBhcmFtZmxhZ3MgPSBOVUxMOwpAQCAtMzM0MCw3ICszMzYwLDcgQEAKICAgICBpZiAoIV92YWxpZGF0ZV9wYXJhbWZsYWdzKHR5cGUsIHBhcmFtZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYgPSAoQ0Z1bmNQdHJPYmplY3QgKilHZW5lcmljQ0RhdGFfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOworICAgIHNlbGYgPSAoUHlDRnVuY1B0ck9iamVjdCAqKUdlbmVyaWNQeUNEYXRhX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKICAgICBzZWxmLT5pbmRleCA9IGluZGV4ICsgMHgxMDAwOwogICAgIFB5X1hJTkNSRUYocGFyYW1mbGFncyk7CiAgICAgc2VsZi0+cGFyYW1mbGFncyA9IHBhcmFtZmxhZ3M7CkBAIC0zMzUxLDcgKzMzNzEsNyBAQAogI2VuZGlmCiAKIC8qCi0gIENGdW5jUHRyX25ldyBhY2NlcHRzIGRpZmZlcmVudCBhcmd1bWVudCBsaXN0cyBpbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQKKyAgUHlDRnVuY1B0cl9uZXcgYWNjZXB0cyBkaWZmZXJlbnQgYXJndW1lbnQgbGlzdHMgaW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkCiAgIF9iYXNlc3BlY18ga2V5d29yZCBhcmc6CiAKICAgb25lIGFyZ3VtZW50IGZvcm0KQEAgLTMzNjQsMjIgKzMzODQsMjIgQEAKICAgImlzfC4uLiIgLSB2dGFibGUgaW5kZXgsIG1ldGhvZCBuYW1lLCBjcmVhdGVzIGNhbGxhYmxlIGNhbGxpbmcgQ09NIHZ0YmwKICovCiBzdGF0aWMgUHlPYmplY3QgKgotQ0Z1bmNQdHJfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorUHlDRnVuY1B0cl9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgQ0Z1bmNQdHJPYmplY3QgKnNlbGY7CisgICAgUHlDRnVuY1B0ck9iamVjdCAqc2VsZjsKICAgICBQeU9iamVjdCAqY2FsbGFibGU7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdDsKICAgICBDVGh1bmtPYmplY3QgKnRodW5rOwogCiAgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPT0gMCkKLSAgICAgICAgcmV0dXJuIEdlbmVyaWNDRGF0YV9uZXcodHlwZSwgYXJncywga3dkcyk7CisgICAgICAgIHJldHVybiBHZW5lcmljUHlDRGF0YV9uZXcodHlwZSwgYXJncywga3dkcyk7CiAKICAgICBpZiAoMSA8PSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpICYmIFB5VHVwbGVfQ2hlY2soUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKSkpCi0gICAgICAgIHJldHVybiBDRnVuY1B0cl9Gcm9tRGxsKHR5cGUsIGFyZ3MsIGt3ZHMpOworICAgICAgICByZXR1cm4gUHlDRnVuY1B0cl9Gcm9tRGxsKHR5cGUsIGFyZ3MsIGt3ZHMpOwogCiAjaWZkZWYgTVNfV0lOMzIKICAgICBpZiAoMiA8PSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpICYmIFB5SW50X0NoZWNrKFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCkpKQotICAgICAgICByZXR1cm4gQ0Z1bmNQdHJfRnJvbVZ0YmxJbmRleCh0eXBlLCBhcmdzLCBrd2RzKTsKKyAgICAgICAgcmV0dXJuIFB5Q0Z1bmNQdHJfRnJvbVZ0YmxJbmRleCh0eXBlLCBhcmdzLCBrd2RzKTsKICNlbmRpZgogCiAgICAgaWYgKDEgPT0gUHlUdXBsZV9HRVRfU0laRShhcmdzKQpAQCAtMzM4OSw3ICszNDA5LDcgQEAKICAgICAgICAgdm9pZCAqcHRyID0gUHlMb25nX0FzVm9pZFB0cihQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApKTsKICAgICAgICAgaWYgKHB0ciA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgb2IgPSAoQ0RhdGFPYmplY3QgKilHZW5lcmljQ0RhdGFfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOworICAgICAgICBvYiA9IChDRGF0YU9iamVjdCAqKUdlbmVyaWNQeUNEYXRhX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKICAgICAgICAgaWYgKG9iID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgKih2b2lkICoqKW9iLT5iX3B0ciA9IHB0cjsKQEAgLTM0MTgsNyArMzQzOCw3IEBACiAqLwogCiAgICAgZGljdCA9IFB5VHlwZV9zdGdkaWN0KChQeU9iamVjdCAqKXR5cGUpOwotICAgIC8qIFhYWFggRmFpbHMgaWYgd2UgZG86ICdDRnVuY1B0cihsYW1iZGEgeDogeCknICovCisgICAgLyogWFhYWCBGYWlscyBpZiB3ZSBkbzogJ1B5Q0Z1bmNQdHIobGFtYmRhIHg6IHgpJyAqLwogICAgIGlmICghZGljdCB8fCAhZGljdC0+YXJndHlwZXMpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICJjYW5ub3QgY29uc3RydWN0IGluc3RhbmNlIG9mIHRoaXMgY2xhc3M6IgpAQCAtMzQyNiwxNCArMzQ0NiwxNCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICB0aHVuayA9IEFsbG9jRnVuY3Rpb25DYWxsYmFjayhjYWxsYWJsZSwKKyAgICB0aHVuayA9IF9jdHlwZXNfYWxsb2NfY2FsbGJhY2soY2FsbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC0+YXJndHlwZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC0+cmVzdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LT5mbGFncyk7CiAgICAgaWYgKCF0aHVuaykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmID0gKENGdW5jUHRyT2JqZWN0ICopR2VuZXJpY0NEYXRhX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKKyAgICBzZWxmID0gKFB5Q0Z1bmNQdHJPYmplY3QgKilHZW5lcmljUHlDRGF0YV9uZXcodHlwZSwgYXJncywga3dkcyk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYodGh1bmspOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM0NDMsNyArMzQ2Myw3IEBACiAgICAgc2VsZi0+Y2FsbGFibGUgPSBjYWxsYWJsZTsKIAogICAgIHNlbGYtPnRodW5rID0gdGh1bms7Ci0gICAgKih2b2lkICoqKXNlbGYtPmJfcHRyID0gKHZvaWQgKil0aHVuay0+cGNsOworICAgICoodm9pZCAqKilzZWxmLT5iX3B0ciA9ICh2b2lkICopdGh1bmstPnBjbF9leGVjOwogCiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKXRodW5rKTsgLyogZm9yIEtlZXBSZWYgKi8KICAgICBpZiAoLTEgPT0gS2VlcFJlZigoQ0RhdGFPYmplY3QgKilzZWxmLCAwLCAoUHlPYmplY3QgKil0aHVuaykpIHsKQEAgLTM0NjcsNyArMzQ4Nyw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHBhcmcgPSBuZXdfQ0FyZ09iamVjdCgpOworICAgIHBhcmcgPSBQeUNBcmdPYmplY3RfbmV3KCk7CiAgICAgaWYgKHBhcmcgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYob2JqKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTI5LDcgKzM1NDksNyBAQAogIGZ1bmN0aW9uLgogKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1fYnVpbGRfY2FsbGFyZ3MoQ0Z1bmNQdHJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmd0eXBlcywKK19idWlsZF9jYWxsYXJncyhQeUNGdW5jUHRyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJndHlwZXMsCiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmluYXJncywgUHlPYmplY3QgKmt3ZHMsCiAgICAgICAgICAgICAgICAgaW50ICpwb3V0bWFzaywgaW50ICpwaW5vdXRtYXNrLCB1bnNpZ25lZCBpbnQgKnBudW1yZXR2YWxzKQogewpAQCAtMzY0MSw3ICszNjYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgKChQeVR5cGVPYmplY3QgKilvYiktPnRwX25hbWUpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoQXJyYXlUeXBlT2JqZWN0X0NoZWNrKG9iKSkKKyAgICAgICAgICAgIGlmIChQeUNBcnJheVR5cGVPYmplY3RfQ2hlY2sob2IpKQogICAgICAgICAgICAgICAgIG9iID0gUHlPYmplY3RfQ2FsbE9iamVjdChvYiwgTlVMTCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgLyogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBwb2ludGVkLXRvIHR5cGUgKi8KQEAgLTM3NjEsNyArMzc4MSw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1DRnVuY1B0cl9jYWxsKENGdW5jUHRyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5hcmdzLCBQeU9iamVjdCAqa3dkcykKK1B5Q0Z1bmNQdHJfY2FsbChQeUNGdW5jUHRyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5hcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9iamVjdCAqcmVzdHlwZTsKICAgICBQeU9iamVjdCAqY29udmVydGVyczsKQEAgLTM3ODAsNyArMzgwMCw3IEBACiAgICAgaW50IG91dG1hc2s7CiAgICAgdW5zaWduZWQgaW50IG51bXJldHZhbHM7CiAKLSAgICBhc3NlcnQoZGljdCk7IC8qIENhbm5vdCBiZSBOVUxMIGZvciBDRnVuY1B0ck9iamVjdCBpbnN0YW5jZXMgKi8KKyAgICBhc3NlcnQoZGljdCk7IC8qIENhbm5vdCBiZSBOVUxMIGZvciBQeUNGdW5jUHRyT2JqZWN0IGluc3RhbmNlcyAqLwogICAgIHJlc3R5cGUgPSBzZWxmLT5yZXN0eXBlID8gc2VsZi0+cmVzdHlwZSA6IGRpY3QtPnJlc3R5cGU7CiAgICAgY29udmVydGVycyA9IHNlbGYtPmNvbnZlcnRlcnMgPyBzZWxmLT5jb252ZXJ0ZXJzIDogZGljdC0+Y29udmVydGVyczsKICAgICBjaGVja2VyID0gc2VsZi0+Y2hlY2tlciA/IHNlbGYtPmNoZWNrZXIgOiBkaWN0LT5jaGVja2VyOwpAQCAtMzg1Nyw3ICszODc3LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHJlc3VsdCA9IF9DYWxsUHJvYyhwUHJvYywKKyAgICByZXN1bHQgPSBfY3R5cGVzX2NhbGxwcm9jKHBQcm9jLAogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYXJncywKICNpZmRlZiBNU19XSU4zMgogICAgICAgICAgICAgICAgICAgICAgICBwaXVuaywKQEAgLTM4OTMsNyArMzkxMyw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLUNGdW5jUHRyX3RyYXZlcnNlKENGdW5jUHRyT2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK1B5Q0Z1bmNQdHJfdHJhdmVyc2UoUHlDRnVuY1B0ck9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CiAgICAgUHlfVklTSVQoc2VsZi0+Y2FsbGFibGUpOwogICAgIFB5X1ZJU0lUKHNlbGYtPnJlc3R5cGUpOwpAQCAtMzkwMywxMSArMzkyMywxMSBAQAogICAgIFB5X1ZJU0lUKHNlbGYtPmNvbnZlcnRlcnMpOwogICAgIFB5X1ZJU0lUKHNlbGYtPnBhcmFtZmxhZ3MpOwogICAgIFB5X1ZJU0lUKHNlbGYtPnRodW5rKTsKLSAgICByZXR1cm4gQ0RhdGFfdHJhdmVyc2UoKENEYXRhT2JqZWN0ICopc2VsZiwgdmlzaXQsIGFyZyk7CisgICAgcmV0dXJuIFB5Q0RhdGFfdHJhdmVyc2UoKENEYXRhT2JqZWN0ICopc2VsZiwgdmlzaXQsIGFyZyk7CiB9CiAKIHN0YXRpYyBpbnQKLUNGdW5jUHRyX2NsZWFyKENGdW5jUHRyT2JqZWN0ICpzZWxmKQorUHlDRnVuY1B0cl9jbGVhcihQeUNGdW5jUHRyT2JqZWN0ICpzZWxmKQogewogICAgIFB5X0NMRUFSKHNlbGYtPmNhbGxhYmxlKTsKICAgICBQeV9DTEVBUihzZWxmLT5yZXN0eXBlKTsKQEAgLTM5MTcsMTggKzM5MzcsMTggQEAKICAgICBQeV9DTEVBUihzZWxmLT5jb252ZXJ0ZXJzKTsKICAgICBQeV9DTEVBUihzZWxmLT5wYXJhbWZsYWdzKTsKICAgICBQeV9DTEVBUihzZWxmLT50aHVuayk7Ci0gICAgcmV0dXJuIENEYXRhX2NsZWFyKChDRGF0YU9iamVjdCAqKXNlbGYpOworICAgIHJldHVybiBQeUNEYXRhX2NsZWFyKChDRGF0YU9iamVjdCAqKXNlbGYpOwogfQogCiBzdGF0aWMgdm9pZAotQ0Z1bmNQdHJfZGVhbGxvYyhDRnVuY1B0ck9iamVjdCAqc2VsZikKK1B5Q0Z1bmNQdHJfZGVhbGxvYyhQeUNGdW5jUHRyT2JqZWN0ICpzZWxmKQogewotICAgIENGdW5jUHRyX2NsZWFyKHNlbGYpOworICAgIFB5Q0Z1bmNQdHJfY2xlYXIoc2VsZik7CiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZSgoUHlPYmplY3QgKilzZWxmKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNGdW5jUHRyX3JlcHIoQ0Z1bmNQdHJPYmplY3QgKnNlbGYpCitQeUNGdW5jUHRyX3JlcHIoUHlDRnVuY1B0ck9iamVjdCAqc2VsZikKIHsKICNpZmRlZiBNU19XSU4zMgogICAgIGlmIChzZWxmLT5pbmRleCkKQEAgLTM5NDMsNyArMzk2Myw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLUNGdW5jUHRyX25vbnplcm8oQ0Z1bmNQdHJPYmplY3QgKnNlbGYpCitQeUNGdW5jUHRyX25vbnplcm8oUHlDRnVuY1B0ck9iamVjdCAqc2VsZikKIHsKICAgICByZXR1cm4gKCgqKHZvaWQgKiopc2VsZi0+Yl9wdHIgIT0gTlVMTCkKICNpZmRlZiBNU19XSU4zMgpAQCAtMzk1Miw3ICszOTcyLDcgQEAKICAgICAgICAgKTsKIH0KIAotc3RhdGljIFB5TnVtYmVyTWV0aG9kcyBDRnVuY1B0cl9hc19udW1iZXIgPSB7CitzdGF0aWMgUHlOdW1iZXJNZXRob2RzIFB5Q0Z1bmNQdHJfYXNfbnVtYmVyID0gewogICAgIDAsIC8qIG5iX2FkZCAqLwogICAgIDAsIC8qIG5iX3N1YnRyYWN0ICovCiAgICAgMCwgLyogbmJfbXVsdGlwbHkgKi8KQEAgLTM5NjMsNDAgKzM5ODMsNDAgQEAKICAgICAwLCAvKiBuYl9uZWdhdGl2ZSAqLwogICAgIDAsIC8qIG5iX3Bvc2l0aXZlICovCiAgICAgMCwgLyogbmJfYWJzb2x1dGUgKi8KLSAgICAoaW5xdWlyeSlDRnVuY1B0cl9ub256ZXJvLCAvKiBuYl9ub256ZXJvICovCisgICAgKGlucXVpcnkpUHlDRnVuY1B0cl9ub256ZXJvLCAvKiBuYl9ub256ZXJvICovCiB9OwogCi1QeVR5cGVPYmplY3QgQ0Z1bmNQdHJfVHlwZSA9IHsKK1B5VHlwZU9iamVjdCBQeUNGdW5jUHRyX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgIl9jdHlwZXMuQ0Z1bmNQdHIiLAotICAgIHNpemVvZihDRnVuY1B0ck9iamVjdCksICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgIl9jdHlwZXMuUHlDRnVuY1B0ciIsCisgICAgc2l6ZW9mKFB5Q0Z1bmNQdHJPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KLSAgICAoZGVzdHJ1Y3RvcilDRnVuY1B0cl9kZWFsbG9jLCAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAoZGVzdHJ1Y3RvcilQeUNGdW5jUHRyX2RlYWxsb2MsICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jb21wYXJlICovCi0gICAgKHJlcHJmdW5jKUNGdW5jUHRyX3JlcHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCi0gICAgJkNGdW5jUHRyX2FzX251bWJlciwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAocmVwcmZ1bmMpUHlDRnVuY1B0cl9yZXByLCAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAmUHlDRnVuY1B0cl9hc19udW1iZXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KLSAgICAodGVybmFyeWZ1bmMpQ0Z1bmNQdHJfY2FsbCwgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAodGVybmFyeWZ1bmMpUHlDRnVuY1B0cl9jYWxsLCAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCi0gICAgJkNEYXRhX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICAmUHlDRGF0YV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVIgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKiB0cF9mbGFncyAqLwogICAgICJGdW5jdGlvbiBQb2ludGVyIiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCi0gICAgKHRyYXZlcnNlcHJvYylDRnVuY1B0cl90cmF2ZXJzZSwgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KUNGdW5jUHRyX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAodHJhdmVyc2Vwcm9jKVB5Q0Z1bmNQdHJfdHJhdmVyc2UsICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpUHlDRnVuY1B0cl9jbGVhciwgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwotICAgIENGdW5jUHRyX2dldHNldHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgUHlDRnVuY1B0cl9nZXRzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwpAQCAtNDAwNCw3ICs0MDI0LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgQ0Z1bmNQdHJfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBQeUNGdW5jUHRyX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIApAQCAtNDEzMiwxMSArNDE1MiwxMSBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KLSAgICAmQ0RhdGFfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgICZQeUNEYXRhX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUiB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCiAgICAgIlN0cnVjdHVyZSBiYXNlIGNsYXNzIiwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAodHJhdmVyc2Vwcm9jKUNEYXRhX3RyYXZlcnNlLCAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgKGlucXVpcnkpQ0RhdGFfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgICh0cmF2ZXJzZXByb2MpUHlDRGF0YV90cmF2ZXJzZSwgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSlQeUNEYXRhX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KQEAgLTQxNTEsNyArNDE3MSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCiAgICAgU3RydWN0X2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwotICAgIEdlbmVyaWNDRGF0YV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgR2VuZXJpY1B5Q0RhdGFfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CiAKQEAgLTQxNzQsMTEgKzQxOTQsMTEgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCi0gICAgJkNEYXRhX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICAmUHlDRGF0YV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVIgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKiB0cF9mbGFncyAqLwogICAgICJVbmlvbiBiYXNlIGNsYXNzIiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCi0gICAgKHRyYXZlcnNlcHJvYylDRGF0YV90cmF2ZXJzZSwgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KUNEYXRhX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAodHJhdmVyc2Vwcm9jKVB5Q0RhdGFfdHJhdmVyc2UsICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpUHlDRGF0YV9jbGVhciwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCkBAIC00MTkzLDE0ICs0MjEzLDE0IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCiAgICAgU3RydWN0X2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwotICAgIEdlbmVyaWNDRGF0YV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgR2VuZXJpY1B5Q0RhdGFfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gIEFycmF5X1R5cGUKKyAgUHlDQXJyYXlfVHlwZQogKi8KIHN0YXRpYyBpbnQKIEFycmF5X2luaXQoQ0RhdGFPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpCkBAIC00MjQ1LDcgKzQyNjUsNyBAQAogICAgIHNpemUgPSBzdGdkaWN0LT5zaXplIC8gc3RnZGljdC0+bGVuZ3RoOwogICAgIG9mZnNldCA9IGluZGV4ICogc2l6ZTsKIAotICAgIHJldHVybiBDRGF0YV9nZXQoc3RnZGljdC0+cHJvdG8sIHN0Z2RpY3QtPmdldGZ1bmMsIChQeU9iamVjdCAqKXNlbGYsCisgICAgcmV0dXJuIFB5Q0RhdGFfZ2V0KHN0Z2RpY3QtPnByb3RvLCBzdGdkaWN0LT5nZXRmdW5jLCAoUHlPYmplY3QgKilzZWxmLAogICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIHNpemUsIHNlbGYtPmJfcHRyICsgb2Zmc2V0KTsKIH0KIApAQCAtNDI3NCwxMSArNDI5NCwxMSBAQAogICAgIGl0ZW1kaWN0ID0gUHlUeXBlX3N0Z2RpY3QocHJvdG8pOwogICAgIGFzc2VydChpdGVtZGljdCk7IC8qIHByb3RvIGlzIHRoZSBpdGVtIHR5cGUgb2YgdGhlIGFycmF5LCBhIGN0eXBlcwogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIHNvIHRoaXMgY2Fubm90IGJlIE5VTEwgKi8KLSAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gZ2V0ZW50cnkoImMiKS0+Z2V0ZnVuYykgeworICAgIGlmIChpdGVtZGljdC0+Z2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoImMiKS0+Z2V0ZnVuYykgewogICAgICAgICBjaGFyICpwdHIgPSAoY2hhciAqKXNlbGYtPmJfcHRyOwogICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUocHRyICsgaWxvdywgbGVuKTsKICNpZmRlZiBDVFlQRVNfVU5JQ09ERQotICAgIH0gZWxzZSBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gZ2V0ZW50cnkoInUiKS0+Z2V0ZnVuYykgeworICAgIH0gZWxzZSBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJ1IiktPmdldGZ1bmMpIHsKICAgICAgICAgd2NoYXJfdCAqcHRyID0gKHdjaGFyX3QgKilzZWxmLT5iX3B0cjsKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIocHRyICsgaWxvdywgbGVuKTsKICNlbmRpZgpAQCAtNDMyOCw3ICs0MzQ4LDcgQEAKICAgICAgICAgYXNzZXJ0KGl0ZW1kaWN0KTsgLyogcHJvdG8gaXMgdGhlIGl0ZW0gdHlwZSBvZiB0aGUgYXJyYXksIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzIHR5cGUsIHNvIHRoaXMgY2Fubm90IGJlIE5VTEwgKi8KIAotICAgICAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gZ2V0ZW50cnkoImMiKS0+Z2V0ZnVuYykgeworICAgICAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJjIiktPmdldGZ1bmMpIHsKICAgICAgICAgICAgIGNoYXIgKnB0ciA9IChjaGFyICopc2VsZi0+Yl9wdHI7CiAgICAgICAgICAgICBjaGFyICpkZXN0OwogCkBAIC00MzUzLDcgKzQzNzMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIG5wOwogICAgICAgICB9CiAjaWZkZWYgQ1RZUEVTX1VOSUNPREUKLSAgICAgICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IGdldGVudHJ5KCJ1IiktPmdldGZ1bmMpIHsKKyAgICAgICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygidSIpLT5nZXRmdW5jKSB7CiAgICAgICAgICAgICB3Y2hhcl90ICpwdHIgPSAod2NoYXJfdCAqKXNlbGYtPmJfcHRyOwogICAgICAgICAgICAgd2NoYXJfdCAqZGVzdDsKIApAQCAtNDQyMiw3ICs0NDQyLDcgQEAKICAgICBvZmZzZXQgPSBpbmRleCAqIHNpemU7CiAgICAgcHRyID0gc2VsZi0+Yl9wdHIgKyBvZmZzZXQ7CiAKLSAgICByZXR1cm4gQ0RhdGFfc2V0KChQeU9iamVjdCAqKXNlbGYsIHN0Z2RpY3QtPnByb3RvLCBzdGdkaWN0LT5zZXRmdW5jLCB2YWx1ZSwKKyAgICByZXR1cm4gUHlDRGF0YV9zZXQoKFB5T2JqZWN0ICopc2VsZiwgc3RnZGljdC0+cHJvdG8sIHN0Z2RpY3QtPnNldGZ1bmMsIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIHNpemUsIHB0cik7CiB9CiAKQEAgLTQ1NTIsNyArNDU3Miw3IEBACiAgICAgQXJyYXlfYXNzX3N1YnNjcmlwdCwKIH07CiAKLVB5VHlwZU9iamVjdCBBcnJheV9UeXBlID0geworUHlUeXBlT2JqZWN0IFB5Q0FycmF5X1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9jdHlwZXMuQXJyYXkiLAogICAgIHNpemVvZihDRGF0YU9iamVjdCksICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCkBAIC00NTcxLDExICs0NTkxLDExIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwotICAgICZDRGF0YV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgJlB5Q0RhdGFfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyogdHBfZmxhZ3MgKi8KICAgICAiWFhYIHRvIGJlIHByb3ZpZGVkIiwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgICh0cmF2ZXJzZXByb2MpQ0RhdGFfdHJhdmVyc2UsICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAoaW5xdWlyeSlDRGF0YV9jbGVhciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgKHRyYXZlcnNlcHJvYylQeUNEYXRhX3RyYXZlcnNlLCAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KVB5Q0RhdGFfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwpAQCAtNDU5MCwxMiArNDYxMCwxMiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwogICAgIChpbml0cHJvYylBcnJheV9pbml0LCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KLSAgICBHZW5lcmljQ0RhdGFfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIEdlbmVyaWNQeUNEYXRhX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCiBQeU9iamVjdCAqCi1DcmVhdGVBcnJheVR5cGUoUHlPYmplY3QgKml0ZW10eXBlLCBQeV9zc2l6ZV90IGxlbmd0aCkKK1B5Q0FycmF5VHlwZV9mcm9tX2N0eXBlKFB5T2JqZWN0ICppdGVtdHlwZSwgUHlfc3NpemVfdCBsZW5ndGgpCiB7CiAgICAgc3RhdGljIFB5T2JqZWN0ICpjYWNoZTsKICAgICBQeU9iamVjdCAqa2V5OwpAQCAtNDYzNSwxNCArNDY1NSwxNCBAQAogICAgICAgICAoKFB5VHlwZU9iamVjdCAqKWl0ZW10eXBlKS0+dHBfbmFtZSwgKGxvbmcpbGVuZ3RoKTsKICNlbmRpZgogCi0gICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKSZBcnJheVR5cGVfVHlwZSwKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopJlB5Q0FycmF5VHlwZV9UeXBlLAogI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzKE8pe3M6aSxzOk99IiwKICNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzKE8pe3M6bixzOk99IiwKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQXJyYXlfVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q0FycmF5X1R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfbGVuZ3RoXyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90eXBlXyIsCkBAIC00NzE4LDcgKzQ3MzgsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFNpbXBsZV9mcm9tX291dHBhcm0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGlmIChJc1NpbXBsZVN1YlR5cGUoKFB5T2JqZWN0ICopUHlfVFlQRShzZWxmKSkpIHsKKyAgICBpZiAoX2N0eXBlc19zaW1wbGVfaW5zdGFuY2UoKFB5T2JqZWN0ICopUHlfVFlQRShzZWxmKSkpIHsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gc2VsZjsKICAgICB9CkBAIC00ODA4LDExICs0ODI4LDExIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwotICAgICZDRGF0YV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgJlB5Q0RhdGFfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyogdHBfZmxhZ3MgKi8KICAgICAiWFhYIHRvIGJlIHByb3ZpZGVkIiwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgICh0cmF2ZXJzZXByb2MpQ0RhdGFfdHJhdmVyc2UsICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAoaW5xdWlyeSlDRGF0YV9jbGVhciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgKHRyYXZlcnNlcHJvYylQeUNEYXRhX3RyYXZlcnNlLCAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KVB5Q0RhdGFfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwpAQCAtNDgyNywxMyArNDg0NywxMyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwogICAgIChpbml0cHJvYylTaW1wbGVfaW5pdCwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KLSAgICBHZW5lcmljQ0RhdGFfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIEdlbmVyaWNQeUNEYXRhX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAgUG9pbnRlcl9UeXBlCisgIFB5Q1BvaW50ZXJfVHlwZQogKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBQb2ludGVyX2l0ZW0oUHlPYmplY3QgKl9zZWxmLCBQeV9zc2l6ZV90IGluZGV4KQpAQCAtNDg2Miw3ICs0ODgyLDcgQEAKICAgICBzaXplID0gaXRlbWRpY3QtPnNpemU7CiAgICAgb2Zmc2V0ID0gaW5kZXggKiBpdGVtZGljdC0+c2l6ZTsKIAotICAgIHJldHVybiBDRGF0YV9nZXQocHJvdG8sIHN0Z2RpY3QtPmdldGZ1bmMsIChQeU9iamVjdCAqKXNlbGYsCisgICAgcmV0dXJuIFB5Q0RhdGFfZ2V0KHByb3RvLCBzdGdkaWN0LT5nZXRmdW5jLCAoUHlPYmplY3QgKilzZWxmLAogICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIHNpemUsICgqKGNoYXIgKiopc2VsZi0+Yl9wdHIpICsgb2Zmc2V0KTsKIH0KIApAQCAtNDkwMCw3ICs0OTIwLDcgQEAKICAgICBzaXplID0gaXRlbWRpY3QtPnNpemU7CiAgICAgb2Zmc2V0ID0gaW5kZXggKiBpdGVtZGljdC0+c2l6ZTsKIAotICAgIHJldHVybiBDRGF0YV9zZXQoKFB5T2JqZWN0ICopc2VsZiwgcHJvdG8sIHN0Z2RpY3QtPnNldGZ1bmMsIHZhbHVlLAorICAgIHJldHVybiBQeUNEYXRhX3NldCgoUHlPYmplY3QgKilzZWxmLCBwcm90bywgc3RnZGljdC0+c2V0ZnVuYywgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgc2l6ZSwgKCooY2hhciAqKilzZWxmLT5iX3B0cikgKyBvZmZzZXQpOwogfQogCkBAIC00OTE3LDcgKzQ5MzcsNyBAQAogCiAgICAgc3RnZGljdCA9IFB5T2JqZWN0X3N0Z2RpY3QoKFB5T2JqZWN0ICopc2VsZik7CiAgICAgYXNzZXJ0KHN0Z2RpY3QpOyAvKiBDYW5ub3QgYmUgTlVMTCBmciBwb2ludGVyIGluc3RhbmNlcyAqLwotICAgIHJldHVybiBDRGF0YV9Gcm9tQmFzZU9iaihzdGdkaWN0LT5wcm90bywKKyAgICByZXR1cm4gUHlDRGF0YV9Gcm9tQmFzZU9iaihzdGdkaWN0LT5wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopc2VsZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKih2b2lkICoqKXNlbGYtPmJfcHRyKTsKIH0KQEAgLTQ5OTIsNyArNTAxMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGNyZWF0ZSBpbnN0YW5jZTogaGFzIG5vIF90eXBlXyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIEdlbmVyaWNDRGF0YV9uZXcodHlwZSwgYXJncywga3cpOworICAgIHJldHVybiBHZW5lcmljUHlDRGF0YV9uZXcodHlwZSwgYXJncywga3cpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTAxNiwxMSArNTAzNiwxMSBAQAogICAgIGFzc2VydChwcm90byk7CiAgICAgaXRlbWRpY3QgPSBQeVR5cGVfc3RnZGljdChwcm90byk7CiAgICAgYXNzZXJ0KGl0ZW1kaWN0KTsKLSAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gZ2V0ZW50cnkoImMiKS0+Z2V0ZnVuYykgeworICAgIGlmIChpdGVtZGljdC0+Z2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoImMiKS0+Z2V0ZnVuYykgewogICAgICAgICBjaGFyICpwdHIgPSAqKGNoYXIgKiopc2VsZi0+Yl9wdHI7CiAgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShwdHIgKyBpbG93LCBsZW4pOwogI2lmZGVmIENUWVBFU19VTklDT0RFCi0gICAgfSBlbHNlIGlmIChpdGVtZGljdC0+Z2V0ZnVuYyA9PSBnZXRlbnRyeSgidSIpLT5nZXRmdW5jKSB7CisgICAgfSBlbHNlIGlmIChpdGVtZGljdC0+Z2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoInUiKS0+Z2V0ZnVuYykgewogICAgICAgICB3Y2hhcl90ICpwdHIgPSAqKHdjaGFyX3QgKiopc2VsZi0+Yl9wdHI7CiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHB0ciArIGlsb3csIGxlbik7CiAjZW5kaWYKQEAgLTUxMTAsNyArNTEzMCw3IEBACiAgICAgICAgIGFzc2VydChwcm90byk7CiAgICAgICAgIGl0ZW1kaWN0ID0gUHlUeXBlX3N0Z2RpY3QocHJvdG8pOwogICAgICAgICBhc3NlcnQoaXRlbWRpY3QpOwotICAgICAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gZ2V0ZW50cnkoImMiKS0+Z2V0ZnVuYykgeworICAgICAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJjIiktPmdldGZ1bmMpIHsKICAgICAgICAgICAgIGNoYXIgKnB0ciA9ICooY2hhciAqKilzZWxmLT5iX3B0cjsKICAgICAgICAgICAgIGNoYXIgKmRlc3Q7CiAKQEAgLTUxMzEsNyArNTE1MSw3IEBACiAgICAgICAgICAgICByZXR1cm4gbnA7CiAgICAgICAgIH0KICNpZmRlZiBDVFlQRVNfVU5JQ09ERQotICAgICAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gZ2V0ZW50cnkoInUiKS0+Z2V0ZnVuYykgeworICAgICAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJ1IiktPmdldGZ1bmMpIHsKICAgICAgICAgICAgIHdjaGFyX3QgKnB0ciA9ICood2NoYXJfdCAqKilzZWxmLT5iX3B0cjsKICAgICAgICAgICAgIHdjaGFyX3QgKmRlc3Q7CiAKQEAgLTUyMDksNyArNTIyOSw3IEBACiAgICAgKGlucXVpcnkpUG9pbnRlcl9ub256ZXJvLCAvKiBuYl9ub256ZXJvICovCiB9OwogCi1QeVR5cGVPYmplY3QgUG9pbnRlcl9UeXBlID0geworUHlUeXBlT2JqZWN0IFB5Q1BvaW50ZXJfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiX2N0eXBlcy5fUG9pbnRlciIsCiAgICAgc2l6ZW9mKENEYXRhT2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KQEAgLTUyMjgsMTEgKzUyNDgsMTEgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCi0gICAgJkNEYXRhX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICAmUHlDRGF0YV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVIgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKiB0cF9mbGFncyAqLwogICAgICJYWFggdG8gYmUgcHJvdmlkZWQiLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCi0gICAgKHRyYXZlcnNlcHJvYylDRGF0YV90cmF2ZXJzZSwgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KUNEYXRhX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAodHJhdmVyc2Vwcm9jKVB5Q0RhdGFfdHJhdmVyc2UsICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpUHlDRGF0YV9jbGVhciwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCkBAIC01MzYxLDkgKzUzODEsOSBAQAogewogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CiAKLSAgICBpZiAoUG9pbnRlclR5cGVPYmplY3RfQ2hlY2soYXJnKSkKKyAgICBpZiAoUHlDUG9pbnRlclR5cGVPYmplY3RfQ2hlY2soYXJnKSkKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgaWYgKENGdW5jUHRyVHlwZU9iamVjdF9DaGVjayhhcmcpKQorICAgIGlmIChQeUNGdW5jUHRyVHlwZU9iamVjdF9DaGVjayhhcmcpKQogICAgICAgICByZXR1cm4gMTsKICAgICBkaWN0ID0gUHlUeXBlX3N0Z2RpY3QoYXJnKTsKICAgICBpZiAoZGljdCkgewpAQCAtNTM5OSw5ICs1NDE5LDkgQEAKICAgICAgKi8KICAgICBpZiAoQ0RhdGFPYmplY3RfQ2hlY2soc3JjKSkgewogICAgICAgICBDRGF0YU9iamVjdCAqb2JqID0gKENEYXRhT2JqZWN0ICopc3JjOwotICAgICAgICAvKiBDRGF0YV9HZXRDb250YWluZXIgd2lsbCBpbml0aWFsaXplIHNyYy5iX29iamVjdHMsIHdlIG5lZWQKKyAgICAgICAgLyogUHlDRGF0YV9HZXRDb250YWluZXIgd2lsbCBpbml0aWFsaXplIHNyYy5iX29iamVjdHMsIHdlIG5lZWQKICAgICAgICAgICAgdGhpcyBzbyBpdCBjYW4gYmUgc2hhcmVkICovCi0gICAgICAgIENEYXRhX0dldENvbnRhaW5lcihvYmopOworICAgICAgICBQeUNEYXRhX0dldENvbnRhaW5lcihvYmopOwogICAgICAgICAvKiBCdXQgd2UgbmVlZCBhIGRpY3Rpb25hcnkhICovCiAgICAgICAgIGlmIChvYmotPmJfb2JqZWN0cyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoUHlfTm9uZSk7CkBAIC01NDU1LDE1ICs1NDc1LDE1IEBACiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBQeUV2YWxfSW5pdFRocmVhZHMoKTsKICNlbmRpZgotICAgIG0gPSBQeV9Jbml0TW9kdWxlMygiX2N0eXBlcyIsIG1vZHVsZV9tZXRob2RzLCBtb2R1bGVfZG9jcyk7CisgICAgbSA9IFB5X0luaXRNb2R1bGUzKCJfY3R5cGVzIiwgX2N0eXBlc19tb2R1bGVfbWV0aG9kcywgbW9kdWxlX2RvY3MpOwogICAgIGlmICghbSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgX3BvaW50ZXJfdHlwZV9jYWNoZSA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoX3BvaW50ZXJfdHlwZV9jYWNoZSA9PSBOVUxMKQorICAgIF9jdHlwZXNfcHRydHlwZV9jYWNoZSA9IFB5RGljdF9OZXcoKTsKKyAgICBpZiAoX2N0eXBlc19wdHJ0eXBlX2NhY2hlID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKIAotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX3BvaW50ZXJfdHlwZV9jYWNoZSIsIChQeU9iamVjdCAqKV9wb2ludGVyX3R5cGVfY2FjaGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX3BvaW50ZXJfdHlwZV9jYWNoZSIsIChQeU9iamVjdCAqKV9jdHlwZXNfcHRydHlwZV9jYWNoZSk7CiAKICAgICBfdW5waWNrbGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG0sICJfdW5waWNrbGUiKTsKICAgICBpZiAoX3VucGlja2xlID09IE5VTEwpCkBAIC01NDcyLDEyICs1NDkyLDEyIEBACiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDQXJnX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmQ1RodW5rX1R5cGUpIDwgMCkKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUNUaHVua19UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIC8qIFN0Z0RpY3QgaXMgZGVyaXZlZCBmcm9tIFB5RGljdF9UeXBlICovCi0gICAgU3RnRGljdF9UeXBlLnRwX2Jhc2UgPSAmUHlEaWN0X1R5cGU7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmU3RnRGljdF9UeXBlKSA8IDApCisgICAgUHlDU3RnRGljdF9UeXBlLnRwX2Jhc2UgPSAmUHlEaWN0X1R5cGU7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDU3RnRGljdF9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NDg1LDI4ICs1NTA1LDI4IEBACiAgICAgICogTWV0YWNsYXNzZXMKICAgICAgKi8KIAotICAgIFN0cnVjdFR5cGVfVHlwZS50cF9iYXNlID0gJlB5VHlwZV9UeXBlOwotICAgIGlmIChQeVR5cGVfUmVhZHkoJlN0cnVjdFR5cGVfVHlwZSkgPCAwKQorICAgIFB5Q1N0cnVjdFR5cGVfVHlwZS50cF9iYXNlID0gJlB5VHlwZV9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q1N0cnVjdFR5cGVfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CiAKICAgICBVbmlvblR5cGVfVHlwZS50cF9iYXNlID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlVuaW9uVHlwZV9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIFBvaW50ZXJUeXBlX1R5cGUudHBfYmFzZSA9ICZQeVR5cGVfVHlwZTsKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQb2ludGVyVHlwZV9UeXBlKSA8IDApCisgICAgUHlDUG9pbnRlclR5cGVfVHlwZS50cF9iYXNlID0gJlB5VHlwZV9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q1BvaW50ZXJUeXBlX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQXJyYXlUeXBlX1R5cGUudHBfYmFzZSA9ICZQeVR5cGVfVHlwZTsKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZBcnJheVR5cGVfVHlwZSkgPCAwKQorICAgIFB5Q0FycmF5VHlwZV9UeXBlLnRwX2Jhc2UgPSAmUHlUeXBlX1R5cGU7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDQXJyYXlUeXBlX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2ltcGxlVHlwZV9UeXBlLnRwX2Jhc2UgPSAmUHlUeXBlX1R5cGU7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmU2ltcGxlVHlwZV9UeXBlKSA8IDApCisgICAgUHlDU2ltcGxlVHlwZV9UeXBlLnRwX2Jhc2UgPSAmUHlUeXBlX1R5cGU7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDU2ltcGxlVHlwZV9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIENGdW5jUHRyVHlwZV9UeXBlLnRwX2Jhc2UgPSAmUHlUeXBlX1R5cGU7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmQ0Z1bmNQdHJUeXBlX1R5cGUpIDwgMCkKKyAgICBQeUNGdW5jUHRyVHlwZV9UeXBlLnRwX2Jhc2UgPSAmUHlUeXBlX1R5cGU7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDRnVuY1B0clR5cGVfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTUxNCw1MiArNTUzNCw1OCBAQAogICAgICAqIENsYXNzZXMgdXNpbmcgYSBjdXN0b20gbWV0YWNsYXNzCiAgICAgICovCiAKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZDRGF0YV9UeXBlKSA8IDApCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDRGF0YV9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIFB5X1RZUEUoJlN0cnVjdF9UeXBlKSA9ICZTdHJ1Y3RUeXBlX1R5cGU7Ci0gICAgU3RydWN0X1R5cGUudHBfYmFzZSA9ICZDRGF0YV9UeXBlOworICAgIFB5X1RZUEUoJlN0cnVjdF9UeXBlKSA9ICZQeUNTdHJ1Y3RUeXBlX1R5cGU7CisgICAgU3RydWN0X1R5cGUudHBfYmFzZSA9ICZQeUNEYXRhX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU3RydWN0X1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOworICAgIFB5X0lOQ1JFRigmU3RydWN0X1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU3RydWN0dXJlIiwgKFB5T2JqZWN0ICopJlN0cnVjdF9UeXBlKTsKIAogICAgIFB5X1RZUEUoJlVuaW9uX1R5cGUpID0gJlVuaW9uVHlwZV9UeXBlOwotICAgIFVuaW9uX1R5cGUudHBfYmFzZSA9ICZDRGF0YV9UeXBlOworICAgIFVuaW9uX1R5cGUudHBfYmFzZSA9ICZQeUNEYXRhX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmVW5pb25fVHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CisgICAgUHlfSU5DUkVGKCZVbmlvbl9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVuaW9uIiwgKFB5T2JqZWN0ICopJlVuaW9uX1R5cGUpOwogCi0gICAgUHlfVFlQRSgmUG9pbnRlcl9UeXBlKSA9ICZQb2ludGVyVHlwZV9UeXBlOwotICAgIFBvaW50ZXJfVHlwZS50cF9iYXNlID0gJkNEYXRhX1R5cGU7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUG9pbnRlcl9UeXBlKSA8IDApCisgICAgUHlfVFlQRSgmUHlDUG9pbnRlcl9UeXBlKSA9ICZQeUNQb2ludGVyVHlwZV9UeXBlOworICAgIFB5Q1BvaW50ZXJfVHlwZS50cF9iYXNlID0gJlB5Q0RhdGFfVHlwZTsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUNQb2ludGVyX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX1BvaW50ZXIiLCAoUHlPYmplY3QgKikmUG9pbnRlcl9UeXBlKTsKKyAgICBQeV9JTkNSRUYoJlB5Q1BvaW50ZXJfVHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJfUG9pbnRlciIsIChQeU9iamVjdCAqKSZQeUNQb2ludGVyX1R5cGUpOwogCi0gICAgUHlfVFlQRSgmQXJyYXlfVHlwZSkgPSAmQXJyYXlUeXBlX1R5cGU7Ci0gICAgQXJyYXlfVHlwZS50cF9iYXNlID0gJkNEYXRhX1R5cGU7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmQXJyYXlfVHlwZSkgPCAwKQorICAgIFB5X1RZUEUoJlB5Q0FycmF5X1R5cGUpID0gJlB5Q0FycmF5VHlwZV9UeXBlOworICAgIFB5Q0FycmF5X1R5cGUudHBfYmFzZSA9ICZQeUNEYXRhX1R5cGU7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDQXJyYXlfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm47Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJBcnJheSIsIChQeU9iamVjdCAqKSZBcnJheV9UeXBlKTsKKyAgICBQeV9JTkNSRUYoJlB5Q0FycmF5X1R5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiQXJyYXkiLCAoUHlPYmplY3QgKikmUHlDQXJyYXlfVHlwZSk7CiAKLSAgICBQeV9UWVBFKCZTaW1wbGVfVHlwZSkgPSAmU2ltcGxlVHlwZV9UeXBlOwotICAgIFNpbXBsZV9UeXBlLnRwX2Jhc2UgPSAmQ0RhdGFfVHlwZTsKKyAgICBQeV9UWVBFKCZTaW1wbGVfVHlwZSkgPSAmUHlDU2ltcGxlVHlwZV9UeXBlOworICAgIFNpbXBsZV9UeXBlLnRwX2Jhc2UgPSAmUHlDRGF0YV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNpbXBsZV9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKKyAgICBQeV9JTkNSRUYoJlNpbXBsZV9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIl9TaW1wbGVDRGF0YSIsIChQeU9iamVjdCAqKSZTaW1wbGVfVHlwZSk7CiAKLSAgICBQeV9UWVBFKCZDRnVuY1B0cl9UeXBlKSA9ICZDRnVuY1B0clR5cGVfVHlwZTsKLSAgICBDRnVuY1B0cl9UeXBlLnRwX2Jhc2UgPSAmQ0RhdGFfVHlwZTsKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZDRnVuY1B0cl9UeXBlKSA8IDApCisgICAgUHlfVFlQRSgmUHlDRnVuY1B0cl9UeXBlKSA9ICZQeUNGdW5jUHRyVHlwZV9UeXBlOworICAgIFB5Q0Z1bmNQdHJfVHlwZS50cF9iYXNlID0gJlB5Q0RhdGFfVHlwZTsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUNGdW5jUHRyX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiQ0Z1bmNQdHIiLCAoUHlPYmplY3QgKikmQ0Z1bmNQdHJfVHlwZSk7CisgICAgUHlfSU5DUkVGKCZQeUNGdW5jUHRyX1R5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiQ0Z1bmNQdHIiLCAoUHlPYmplY3QgKikmUHlDRnVuY1B0cl9UeXBlKTsKIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKICAgICAgKiBTaW1wbGUgY2xhc3NlcwogICAgICAqLwogCi0gICAgLyogQ0ZpZWxkX1R5cGUgaXMgZGVyaXZlZCBmcm9tIFB5QmFzZU9iamVjdF9UeXBlICovCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmQ0ZpZWxkX1R5cGUpIDwgMCkKKyAgICAvKiBQeUNGaWVsZF9UeXBlIGlzIGRlcml2ZWQgZnJvbSBQeUJhc2VPYmplY3RfVHlwZSAqLworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q0ZpZWxkX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU2MjAsNiArNTY0Niw3IEBACiAgKiBTZWUgIzEwNDcyNjkgQnVmZmVyIG92ZXJ3cml0ZSBpbiBQeVVuaWNvZGVfQXNXaWRlQ2hhcgogICovCiAKKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDQwMDAwKQogI2lmZGVmIEhBVkVfV0NIQVJfSAogCiBQeU9iamVjdCAqTXlfUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihyZWdpc3RlciBjb25zdCB3Y2hhcl90ICp3LApAQCAtNTY3OCw3ICs1NzA1LDcgQEAKIAogICAgIHJldHVybiBzaXplOwogfQotCisjZW5kaWYKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXNfdGVzdC5jIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXNfdGVzdC5jCmluZGV4IDQ2NDA2YTYuLjI3NTYxODcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzX3Rlc3QuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlc190ZXN0LmMKQEAgLTI1LDYgKzI1LDIwIEBACiAKIC8qIHNvbWUgZnVuY3Rpb25zIGhhbmR5IGZvciB0ZXN0aW5nICovCiAKK0VYUE9SVChpbnQpCitfdGVzdGZ1bmNfY2JrX3JlZ19pbnQoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQsIGludCBlLAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZ1bmMpKGludCwgaW50LCBpbnQsIGludCwgaW50KSkKK3sKKyAgICByZXR1cm4gZnVuYyhhKmEsIGIqYiwgYypjLCBkKmQsIGUqZSk7Cit9CisKK0VYUE9SVChkb3VibGUpCitfdGVzdGZ1bmNfY2JrX3JlZ19kb3VibGUoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAoKmZ1bmMpKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKSkKK3sKKyAgICByZXR1cm4gZnVuYyhhKmEsIGIqYiwgYypjLCBkKmQsIGUqZSk7Cit9CisKIEVYUE9SVCh2b2lkKXRlc3RmdW5jX2FycmF5KGludCB2YWx1ZXNbNF0pCiB7CiAgICAgcHJpbnRmKCJ0ZXN0ZnVuY19hcnJheSAlZCAlZCAlZCAlZFxuIiwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYyBiL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYwppbmRleCBiMWI2MGJhLi43MTZhMDJmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCkBAIC0yMSw4ICsyMSw4IEBACiAgICAgUHlfWERFQ1JFRihzZWxmLT5jb252ZXJ0ZXJzKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmNhbGxhYmxlKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnJlc3R5cGUpOwotICAgIGlmIChzZWxmLT5wY2wpCi0gICAgICAgIEZyZWVDbG9zdXJlKHNlbGYtPnBjbCk7CisgICAgaWYgKHNlbGYtPnBjbF93cml0ZSkKKyAgICAgICAgZmZpX2Nsb3N1cmVfZnJlZShzZWxmLT5wY2xfd3JpdGUpOwogICAgIFB5T2JqZWN0X0dDX0RlbChzZWxmKTsKIH0KIApAQCAtNDYsNyArNDYsNyBAQAogICAgIHJldHVybiAwOwogfQogCi1QeVR5cGVPYmplY3QgQ1RodW5rX1R5cGUgPSB7CitQeVR5cGVPYmplY3QgUHlDVGh1bmtfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiX2N0eXBlcy5DVGh1bmtPYmplY3QiLAogICAgIHNpemVvZihDVGh1bmtPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCkBAIC05NSw0NCArOTUsNjYgQEAKICAgICBQeUVycl9QcmludCgpOwogfQogCisjaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA3MDAwMCkKK1B5Q29kZU9iamVjdCAqCitQeUNvZGVfTmV3RW1wdHkoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgZmlyc3RsaW5lbm8pCit7CisgICAgc3RhdGljIFB5T2JqZWN0ICplbXB0eXN0cmluZyA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICpudWxsdHVwbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZV9vYiA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZ1bmNuYW1lX29iID0gTlVMTDsKKyAgICBQeUNvZGVPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgaWYgKGVtcHR5c3RyaW5nID09IE5VTEwpIHsKKyAgICAgICAgZW1wdHlzdHJpbmcgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCIiKTsKKyAgICAgICAgaWYgKGVtcHR5c3RyaW5nID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgaWYgKG51bGx0dXBsZSA9PSBOVUxMKSB7CisgICAgICAgIG51bGx0dXBsZSA9IFB5VHVwbGVfTmV3KDApOworICAgICAgICBpZiAobnVsbHR1cGxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgZnVuY25hbWVfb2IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGZ1bmNuYW1lKTsKKyAgICBpZiAoZnVuY25hbWVfb2IgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgZmlsZW5hbWVfb2IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGZpbGVuYW1lKTsKKyAgICBpZiAoZmlsZW5hbWVfb2IgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisKKyAgICByZXN1bHQgPSBQeUNvZGVfTmV3KDAsICAgICAgICAgICAgICAgICAgICAgIC8qIGFyZ2NvdW50ICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubG9jYWxzICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFja3NpemUgKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCisgICAgICAgICAgICAgICAgZW1wdHlzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBjb2RlICovCisgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zdHMgKi8KKyAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgICAgICAgICAgICAgICAgIC8qIG5hbWVzICovCisgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAgICAgICAgICAgICAgICAvKiB2YXJuYW1lcyAqLworICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgICAgICAgICAgICAgICAgLyogZnJlZXZhcnMgKi8KKyAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgICAgICAgICAgICAgICAgIC8qIGNlbGx2YXJzICovCisgICAgICAgICAgICAgICAgZmlsZW5hbWVfb2IsICAgICAgICAgICAgICAgICAgICAvKiBmaWxlbmFtZSAqLworICAgICAgICAgICAgICAgIGZ1bmNuYW1lX29iLCAgICAgICAgICAgICAgICAgICAgLyogbmFtZSAqLworICAgICAgICAgICAgICAgIGZpcnN0bGluZW5vLCAgICAgICAgICAgICAgICAgICAgLyogZmlyc3RsaW5lbm8gKi8KKyAgICAgICAgICAgICAgICBlbXB0eXN0cmluZyAgICAgICAgICAgICAgICAgICAgIC8qIGxub3RhYiAqLworICAgICAgICAgICAgICAgICk7CisKK2ZhaWxlZDoKKyAgICBQeV9YREVDUkVGKGZ1bmNuYW1lX29iKTsKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lX29iKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKIAogLyogYWZ0ZXIgY29kZSB0aGF0IHB5cmV4IGdlbmVyYXRlcyAqLwotdm9pZCBfQWRkVHJhY2ViYWNrKGNoYXIgKmZ1bmNuYW1lLCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3ZvaWQgX2N0eXBlc19hZGRfdHJhY2ViYWNrKGNoYXIgKmZ1bmNuYW1lLCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKIHsKLSAgICBQeU9iamVjdCAqcHlfc3JjZmlsZSA9IDA7Ci0gICAgUHlPYmplY3QgKnB5X2Z1bmNuYW1lID0gMDsKICAgICBQeU9iamVjdCAqcHlfZ2xvYmFscyA9IDA7Ci0gICAgUHlPYmplY3QgKmVtcHR5X3R1cGxlID0gMDsKLSAgICBQeU9iamVjdCAqZW1wdHlfc3RyaW5nID0gMDsKICAgICBQeUNvZGVPYmplY3QgKnB5X2NvZGUgPSAwOwogICAgIFB5RnJhbWVPYmplY3QgKnB5X2ZyYW1lID0gMDsKIAotICAgIHB5X3NyY2ZpbGUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGZpbGVuYW1lKTsKLSAgICBpZiAoIXB5X3NyY2ZpbGUpIGdvdG8gYmFkOwotICAgIHB5X2Z1bmNuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZyhmdW5jbmFtZSk7Ci0gICAgaWYgKCFweV9mdW5jbmFtZSkgZ290byBiYWQ7CiAgICAgcHlfZ2xvYmFscyA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoIXB5X2dsb2JhbHMpIGdvdG8gYmFkOwotICAgIGVtcHR5X3R1cGxlID0gUHlUdXBsZV9OZXcoMCk7Ci0gICAgaWYgKCFlbXB0eV90dXBsZSkgZ290byBiYWQ7Ci0gICAgZW1wdHlfc3RyaW5nID0gUHlTdHJpbmdfRnJvbVN0cmluZygiIik7Ci0gICAgaWYgKCFlbXB0eV9zdHJpbmcpIGdvdG8gYmFkOwotICAgIHB5X2NvZGUgPSBQeUNvZGVfTmV3KAotICAgICAgICAwLCAgICAgICAgICAgIC8qaW50IGFyZ2NvdW50LCovCi0gICAgICAgIDAsICAgICAgICAgICAgLyppbnQgbmxvY2FscywqLwotICAgICAgICAwLCAgICAgICAgICAgIC8qaW50IHN0YWNrc2l6ZSwqLwotICAgICAgICAwLCAgICAgICAgICAgIC8qaW50IGZsYWdzLCovCi0gICAgICAgIGVtcHR5X3N0cmluZywgLypQeU9iamVjdCAqY29kZSwqLwotICAgICAgICBlbXB0eV90dXBsZSwgIC8qUHlPYmplY3QgKmNvbnN0cywqLwotICAgICAgICBlbXB0eV90dXBsZSwgIC8qUHlPYmplY3QgKm5hbWVzLCovCi0gICAgICAgIGVtcHR5X3R1cGxlLCAgLypQeU9iamVjdCAqdmFybmFtZXMsKi8KLSAgICAgICAgZW1wdHlfdHVwbGUsICAvKlB5T2JqZWN0ICpmcmVldmFycywqLwotICAgICAgICBlbXB0eV90dXBsZSwgIC8qUHlPYmplY3QgKmNlbGx2YXJzLCovCi0gICAgICAgIHB5X3NyY2ZpbGUsICAgLypQeU9iamVjdCAqZmlsZW5hbWUsKi8KLSAgICAgICAgcHlfZnVuY25hbWUsICAvKlB5T2JqZWN0ICpuYW1lLCovCi0gICAgICAgIGxpbmVubywgICAvKmludCBmaXJzdGxpbmVubywqLwotICAgICAgICBlbXB0eV9zdHJpbmcgIC8qUHlPYmplY3QgKmxub3RhYiovCi0gICAgICAgICk7CisgICAgcHlfY29kZSA9IFB5Q29kZV9OZXdFbXB0eShmaWxlbmFtZSwgZnVuY25hbWUsIGxpbmVubyk7CiAgICAgaWYgKCFweV9jb2RlKSBnb3RvIGJhZDsKICAgICBweV9mcmFtZSA9IFB5RnJhbWVfTmV3KAogICAgICAgICBQeVRocmVhZFN0YXRlX0dldCgpLCAvKlB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwqLwpAQCAtMTQ1LDEwICsxNjcsNiBAQAogICAgIFB5VHJhY2VCYWNrX0hlcmUocHlfZnJhbWUpOwogICBiYWQ6CiAgICAgUHlfWERFQ1JFRihweV9nbG9iYWxzKTsKLSAgICBQeV9YREVDUkVGKHB5X3NyY2ZpbGUpOwotICAgIFB5X1hERUNSRUYocHlfZnVuY25hbWUpOwotICAgIFB5X1hERUNSRUYoZW1wdHlfdHVwbGUpOwotICAgIFB5X1hERUNSRUYoZW1wdHlfc3RyaW5nKTsKICAgICBQeV9YREVDUkVGKHB5X2NvZGUpOwogICAgIFB5X1hERUNSRUYocHlfZnJhbWUpOwogfQpAQCAtMjI3LDcgKzI0NSw3IEBACiAgICAgICAgICAgICBnb3RvIERvbmU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZGljdCAmJiBkaWN0LT5nZXRmdW5jICYmICFJc1NpbXBsZVN1YlR5cGUoY252KSkgeworICAgICAgICBpZiAoZGljdCAmJiBkaWN0LT5nZXRmdW5jICYmICFfY3R5cGVzX3NpbXBsZV9pbnN0YW5jZShjbnYpKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdiA9IGRpY3QtPmdldGZ1bmMoKnBBcmdzLCBkaWN0LT5zaXplKTsKICAgICAgICAgICAgIGlmICghdikgewogICAgICAgICAgICAgICAgIFByaW50RXJyb3IoImNyZWF0ZSBhcmd1bWVudCAlZDpcbiIsIGkpOwpAQCAtMjQxLDcgKzI1OSw3IEBACiAgICAgICAgICAgICAgICBCVFcsIHRoZSBzYW1lIHByb2JsZW0gb2NjdXJycyB3aGVuIHRoZXkgYXJlIHB1c2hlZCBhcyBwYXJhbWV0ZXJzCiAgICAgICAgICAgICAqLwogICAgICAgICB9IGVsc2UgaWYgKGRpY3QpIHsKLSAgICAgICAgICAgIC8qIEhtLCBzaG91bGRuJ3Qgd2UgdXNlIENEYXRhX0F0QWRkcmVzcygpIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQgaW5zdGVhZD8gKi8KKyAgICAgICAgICAgIC8qIEhtLCBzaG91bGRuJ3Qgd2UgdXNlIFB5Q0RhdGFfQXRBZGRyZXNzKCkgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCBpbnN0ZWFkPyAqLwogICAgICAgICAgICAgQ0RhdGFPYmplY3QgKm9iaiA9IChDRGF0YU9iamVjdCAqKVB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY252LCBOVUxMKTsKICAgICAgICAgICAgIGlmICghb2JqKSB7CiAgICAgICAgICAgICAgICAgUHJpbnRFcnJvcigiY3JlYXRlIGFyZ3VtZW50ICVkOlxuIiwgaSk7CkBAIC0yNzIsMTAgKzI5MCwxMCBAQAogICAgIH0KIAogI2RlZmluZSBDSEVDSyh3aGF0LCB4KSBcCi1pZiAoeCA9PSBOVUxMKSBfQWRkVHJhY2ViYWNrKHdoYXQsICJfY3R5cGVzL2NhbGxiYWNrcy5jIiwgX19MSU5FX18gLSAxKSwgUHlFcnJfUHJpbnQoKQoraWYgKHggPT0gTlVMTCkgX2N0eXBlc19hZGRfdHJhY2ViYWNrKHdoYXQsICJfY3R5cGVzL2NhbGxiYWNrcy5jIiwgX19MSU5FX18gLSAxKSwgUHlFcnJfUHJpbnQoKQogCiAgICAgaWYgKGZsYWdzICYgKEZVTkNGTEFHX1VTRV9FUlJOTyB8IEZVTkNGTEFHX1VTRV9MQVNURVJST1IpKSB7Ci0gICAgICAgIGVycm9yX29iamVjdCA9IGdldF9lcnJvcl9vYmplY3QoJnNwYWNlKTsKKyAgICAgICAgZXJyb3Jfb2JqZWN0ID0gX2N0eXBlc19nZXRfZXJyb2JqKCZzcGFjZSk7CiAgICAgICAgIGlmIChlcnJvcl9vYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gRG9uZTsKICAgICAgICAgaWYgKGZsYWdzICYgRlVOQ0ZMQUdfVVNFX0VSUk5PKSB7CkBAIC0zMzIsNyArMzUwLDcgQEAKICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShjYWxsYWJsZSk7CiAgICAgICAgIGVsc2UgaWYgKGtlZXAgPT0gUHlfTm9uZSkgLyogTm90aGluZyB0byBrZWVwICovCiAgICAgICAgICAgICBQeV9ERUNSRUYoa2VlcCk7Ci0gICAgICAgIGVsc2UgaWYgKHNldGZ1bmMgIT0gZ2V0ZW50cnkoIk8iKS0+c2V0ZnVuYykgeworICAgICAgICBlbHNlIGlmIChzZXRmdW5jICE9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiTyIpLT5zZXRmdW5jKSB7CiAgICAgICAgICAgICBpZiAoLTEgPT0gUHlFcnJfV2FybihQeUV4Y19SdW50aW1lV2FybmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgbGVhayBpbiBjYWxsYmFjayBmdW5jdGlvbi4iKSkKICAgICAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoY2FsbGFibGUpOwpAQCAtMzY3LDEzICszODUsMTQgQEAKICAgICBDVGh1bmtPYmplY3QgKnA7CiAgICAgaW50IGk7CiAKLSAgICBwID0gUHlPYmplY3RfR0NfTmV3VmFyKENUaHVua09iamVjdCwgJkNUaHVua19UeXBlLCBuQXJncyk7CisgICAgcCA9IFB5T2JqZWN0X0dDX05ld1ZhcihDVGh1bmtPYmplY3QsICZQeUNUaHVua19UeXBlLCBuQXJncyk7CiAgICAgaWYgKHAgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBwLT5wY2wgPSBOVUxMOworICAgIHAtPnBjbF9leGVjID0gTlVMTDsKKyAgICBwLT5wY2xfd3JpdGUgPSBOVUxMOwogICAgIG1lbXNldCgmcC0+Y2lmLCAwLCBzaXplb2YocC0+Y2lmKSk7CiAgICAgcC0+Y29udmVydGVycyA9IE5VTEw7CiAgICAgcC0+Y2FsbGFibGUgPSBOVUxMOwpAQCAtMzg2LDcgKzQwNSw3IEBACiAgICAgcmV0dXJuIHA7CiB9CiAKLUNUaHVua09iamVjdCAqQWxsb2NGdW5jdGlvbkNhbGxiYWNrKFB5T2JqZWN0ICpjYWxsYWJsZSwKK0NUaHVua09iamVjdCAqX2N0eXBlc19hbGxvY19jYWxsYmFjayhQeU9iamVjdCAqY2FsbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY29udmVydGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKQpAQCAtNDAzLDggKzQyMiw5IEBACiAKICAgICBhc3NlcnQoQ1RodW5rX0NoZWNrRXhhY3QocCkpOwogCi0gICAgcC0+cGNsID0gTWFsbG9jQ2xvc3VyZSgpOwotICAgIGlmIChwLT5wY2wgPT0gTlVMTCkgeworICAgIHAtPnBjbF93cml0ZSA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksCisJCQkJICAgICAmcC0+cGNsX2V4ZWMpOworICAgIGlmIChwLT5wY2xfd3JpdGUgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTQxNCw3ICs0MzQsNyBAQAogICAgICAgICBQeU9iamVjdCAqY252ID0gUHlTZXF1ZW5jZV9HZXRJdGVtKGNvbnZlcnRlcnMsIGkpOwogICAgICAgICBpZiAoY252ID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBwLT5hdHlwZXNbaV0gPSBHZXRUeXBlKGNudik7CisgICAgICAgIHAtPmF0eXBlc1tpXSA9IF9jdHlwZXNfZ2V0X2ZmaV90eXBlKGNudik7CiAgICAgICAgIFB5X0RFQ1JFRihjbnYpOwogICAgIH0KICAgICBwLT5hdHlwZXNbaV0gPSBOVUxMOwpAQCAtNDQyLDE0ICs0NjIsMjAgQEAKICNlbmRpZgogICAgIHJlc3VsdCA9IGZmaV9wcmVwX2NpZigmcC0+Y2lmLCBjYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0FGRV9ET1dOQ0FTVChuQXJncywgUHlfc3NpemVfdCwgaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0VHlwZShyZXN0eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19nZXRfZmZpX3R5cGUocmVzdHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZwLT5hdHlwZXNbMF0pOwogICAgIGlmIChyZXN1bHQgIT0gRkZJX09LKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiZmZpX3ByZXBfY2lmIGZhaWxlZCB3aXRoICVkIiwgcmVzdWx0KTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgcmVzdWx0ID0gZmZpX3ByZXBfY2xvc3VyZShwLT5wY2wsICZwLT5jaWYsIGNsb3N1cmVfZmNuLCBwKTsKKyNpZiBkZWZpbmVkKFg4Nl9EQVJXSU4pIHx8IGRlZmluZWQoUE9XRVJQQ19EQVJXSU4pCisgICAgcmVzdWx0ID0gZmZpX3ByZXBfY2xvc3VyZShwLT5wY2xfd3JpdGUsICZwLT5jaWYsIGNsb3N1cmVfZmNuLCBwKTsKKyNlbHNlCisgICAgcmVzdWx0ID0gZmZpX3ByZXBfY2xvc3VyZV9sb2MocC0+cGNsX3dyaXRlLCAmcC0+Y2lmLCBjbG9zdXJlX2ZjbiwKKwkJCQkgIHAsCisJCQkJICBwLT5wY2xfZXhlYyk7CisjZW5kaWYKICAgICBpZiAocmVzdWx0ICE9IEZGSV9PSykgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgImZmaV9wcmVwX2Nsb3N1cmUgZmFpbGVkIHdpdGggJWQiLCByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYwppbmRleCBjODRiNGYzLi4zOWZjZDE2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYwpAQCAtMjAsNyArMjAsNyBAQAogLyoKICAgSG93IGFyZSBmdW5jdGlvbnMgY2FsbGVkLCBhbmQgaG93IGFyZSBwYXJhbWV0ZXJzIGNvbnZlcnRlZCB0byBDID8KIAotICAxLiBfY3R5cGVzLmM6OkNGdW5jUHRyX2NhbGwgcmVjZWl2ZXMgYW4gYXJndW1lbnQgdHVwbGUgJ2luYXJncycgYW5kIGEKKyAgMS4gX2N0eXBlcy5jOjpQeUNGdW5jUHRyX2NhbGwgcmVjZWl2ZXMgYW4gYXJndW1lbnQgdHVwbGUgJ2luYXJncycgYW5kIGEKICAga2V5d29yZCBkaWN0aW9uYXJ5ICdrd2RzJy4KIAogICAyLiBBZnRlciBzZXZlcmFsIGNoZWNrcywgX2J1aWxkX2NhbGxhcmdzKCkgaXMgY2FsbGVkIHdoaWNoIHJldHVybnMgYW5vdGhlcgpAQCAtMzIsNyArMzIsNyBAQAogICB0aGUgY2FsbGFyZ3MgdHVwbGUsIHNwZWNpZnlpbmcgaG93IHRvIGJ1aWxkIHRoZSByZXR1cm4gdmFsdWUocykgb2YKICAgdGhlIGZ1bmN0aW9uLgogCi0gIDQuIF9DYWxsUHJvYyBpcyB0aGVuIGNhbGxlZCB3aXRoIHRoZSAnY2FsbGFyZ3MnIHR1cGxlLiAgX0NhbGxQcm9jIGZpcnN0CisgIDQuIF9jdHlwZXNfY2FsbHByb2MgaXMgdGhlbiBjYWxsZWQgd2l0aCB0aGUgJ2NhbGxhcmdzJyB0dXBsZS4gIF9jdHlwZXNfY2FsbHByb2MgZmlyc3QKICAgYWxsb2NhdGVzIHR3byBhcnJheXMuICBUaGUgZmlyc3QgaXMgYW4gYXJyYXkgb2YgJ3N0cnVjdCBhcmd1bWVudCcgaXRlbXMsIHRoZQogICBzZWNvbmQgYXJyYXkgaGFzICd2b2lkIConIGVudHJpZWQuCiAKQEAgLTUyLDggKzUyLDggQEAKICAgbGliZmZpIHNwZWNpZmljIHN0dWZmLCB0aGVuIGl0IGNhbGxzIGZmaV9jYWxsLgogCiAgIFNvLCB0aGVyZSBhcmUgNCBkYXRhIHN0cnVjdHVyZXMgaG9sZGluZyBwcm9jZXNzZWQgYXJndW1lbnRzOgotICAtIHRoZSBpbmFyZ3MgdHVwbGUgKGluIENGdW5jUHRyX2NhbGwpCi0gIC0gdGhlIGNhbGxhcmdzIHR1cGxlIChpbiBDRnVuY1B0cl9jYWxsKQorICAtIHRoZSBpbmFyZ3MgdHVwbGUgKGluIFB5Q0Z1bmNQdHJfY2FsbCkKKyAgLSB0aGUgY2FsbGFyZ3MgdHVwbGUgKGluIFB5Q0Z1bmNQdHJfY2FsbCkKICAgLSB0aGUgJ3N0cnVjdCBhcmdndW1lbnRzJyBhcnJheQogICAtIHRoZSAndm9pZCAqJyBhcnJheQogCkBAIC04Myw2ICs4MywxMyBAQAogI2RlZmluZSBET05UX1VTRV9TRUgKICNlbmRpZgogCisKKyNkZWZpbmUgQ1RZUEVTX0NBUFNVTEVfRVJST1JPQkogIl9jdHlwZXMvY2FsbHByb2MuYyBlcnJvciBvYmplY3QiCitDVFlQRVNfQ0FQU1VMRV9JTlNUQU5USUFURV9ERVNUUlVDVE9SKENUWVBFU19DQVBTVUxFX0VSUk9ST0JKKQorCisjZGVmaW5lIENUWVBFU19DQVBTVUxFX1dDSEFSX1QgIl9jdHlwZXMvY2FsbHByb2MuYyB3Y2hhcl90IGJ1ZmZlciBmcm9tIHVuaWNvZGUiCitDVFlQRVNfQ0FQU1VMRV9JTlNUQU5USUFURV9ERVNUUlVDVE9SKENUWVBFU19DQVBTVUxFX1dDSEFSX1QpCisKIC8qCiAgIGN0eXBlcyBtYWludGFpbnMgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgdGhhdCBoYXMgc3BhY2UgZm9yIHR3byBlcnJvciBudW1iZXJzOgogICBwcml2YXRlIGNvcGllcyBvZiB0aGUgc3lzdGVtICdlcnJubycgdmFsdWUgYW5kLCBvbiBXaW5kb3dzLCB0aGUgc3lzdGVtIGVycm9yIGNvZGUKQEAgLTExOCw3ICsxMjUsNyBAQAogICBrZXB0IGFsaXZlIGluIHRoZSB0aHJlYWQgc3RhdGUgZGljdGlvbmFyeSBhcyBsb25nIGFzIHRoZSB0aHJlYWQgaXRzZWxmLgogKi8KIFB5T2JqZWN0ICoKLWdldF9lcnJvcl9vYmplY3QoaW50ICoqcHNwYWNlKQorX2N0eXBlc19nZXRfZXJyb2JqKGludCAqKnBzcGFjZSkKIHsKICAgICBQeU9iamVjdCAqZGljdCA9IFB5VGhyZWFkU3RhdGVfR2V0RGljdCgpOwogICAgIFB5T2JqZWN0ICplcnJvYmo7CkBAIC0xMzQsMTQgKzE0MSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVycm9iaiA9IFB5RGljdF9HZXRJdGVtKGRpY3QsIGVycm9yX29iamVjdF9uYW1lKTsKLSAgICBpZiAoZXJyb2JqKQorICAgIGlmIChlcnJvYmopIHsKKyNpZmRlZiBDVFlQRVNfVVNJTkdfQ0FQU1VMRQorICAgICAgICBpZiAoIVB5Q2Fwc3VsZV9Jc1ZhbGlkKGVycm9iaiwgQ1RZUEVTX0NBUFNVTEVfRVJST1JPQkopKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICJjdHlwZXMuZXJyb3Jfb2JqZWN0IGlzIGFuIGludmFsaWQgY2Fwc3VsZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDVFlQRVNfVVNJTkdfQ0FQU1VMRSAqLwogICAgICAgICBQeV9JTkNSRUYoZXJyb2JqKTsKKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHZvaWQgKnNwYWNlID0gUHlNZW1fTWFsbG9jKHNpemVvZihpbnQpICogMik7CiAgICAgICAgIGlmIChzcGFjZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIG1lbXNldChzcGFjZSwgMCwgc2l6ZW9mKGludCkgKiAyKTsKLSAgICAgICAgZXJyb2JqID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKHNwYWNlLCBQeU1lbV9GcmVlKTsKKyAgICAgICAgZXJyb2JqID0gQ0FQU1VMRV9ORVcoc3BhY2UsIENUWVBFU19DQVBTVUxFX0VSUk9ST0JKKTsKICAgICAgICAgaWYgKGVycm9iaiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmICgtMSA9PSBQeURpY3RfU2V0SXRlbShkaWN0LCBlcnJvcl9vYmplY3RfbmFtZSwKQEAgLTE1MCw3ICsxNjUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgKnBzcGFjZSA9IChpbnQgKilQeUNPYmplY3RfQXNWb2lkUHRyKGVycm9iaik7CisgICAgKnBzcGFjZSA9IChpbnQgKilDQVBTVUxFX0RFUkVGRVJFTkNFKGVycm9iaiwgQ1RZUEVTX0NBUFNVTEVfRVJST1JPQkopOwogICAgIHJldHVybiBlcnJvYmo7CiB9CiAKQEAgLTE1OCw3ICsxNzMsNyBAQAogZ2V0X2Vycm9yX2ludGVybmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgaW50IGluZGV4KQogewogICAgIGludCAqc3BhY2U7Ci0gICAgUHlPYmplY3QgKmVycm9iaiA9IGdldF9lcnJvcl9vYmplY3QoJnNwYWNlKTsKKyAgICBQeU9iamVjdCAqZXJyb2JqID0gX2N0eXBlc19nZXRfZXJyb2JqKCZzcGFjZSk7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgIGlmIChlcnJvYmogPT0gTlVMTCkKQEAgLTE3Nyw3ICsxOTIsNyBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpIiwgJm5ld19lcnJubykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGVycm9iaiA9IGdldF9lcnJvcl9vYmplY3QoJnNwYWNlKTsKKyAgICBlcnJvYmogPSBfY3R5cGVzX2dldF9lcnJvYmooJnNwYWNlKTsKICAgICBpZiAoZXJyb2JqID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG9sZF9lcnJubyA9IHNwYWNlW2luZGV4XTsKQEAgLTIzNCwxNTQgKzI0OSwxNTAgQEAKIH0KIAogI2lmbmRlZiBET05UX1VTRV9TRUgKLXZvaWQgU2V0RXhjZXB0aW9uKERXT1JEIGNvZGUsIEVYQ0VQVElPTl9SRUNPUkQgKnByKQorc3RhdGljIHZvaWQgU2V0RXhjZXB0aW9uKERXT1JEIGNvZGUsIEVYQ0VQVElPTl9SRUNPUkQgKnByKQogewotICAgIFRDSEFSICpscE1zZ0J1ZjsKLSAgICBscE1zZ0J1ZiA9IEZvcm1hdEVycm9yKGNvZGUpOwotICAgIGlmKGxwTXNnQnVmKSB7Ci0gICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGNvZGUpOwotICAgICAgICBMb2NhbEZyZWUobHBNc2dCdWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAoY29kZSkgewotICAgICAgICBjYXNlIEVYQ0VQVElPTl9BQ0NFU1NfVklPTEFUSU9OOgotICAgICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gcmVhZCBmcm9tIG9yIHdyaXRlCi0gICAgICAgICAgICAgICB0byBhIHZpcnR1YWwgYWRkcmVzcyBmb3Igd2hpY2ggaXQgZG9lcyBub3QKLSAgICAgICAgICAgICAgIGhhdmUgdGhlIGFwcHJvcHJpYXRlIGFjY2Vzcy4gKi8KLSAgICAgICAgICAgIGlmIChwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMF0gPT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhY2Nlc3MgdmlvbGF0aW9uIHJlYWRpbmcgJXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMV0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFjY2VzcyB2aW9sYXRpb24gd3JpdGluZyAlcCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByLT5FeGNlcHRpb25JbmZvcm1hdGlvblsxXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFWENFUFRJT05fQlJFQUtQT0lOVDoKLSAgICAgICAgICAgIC8qIEEgYnJlYWtwb2ludCB3YXMgZW5jb3VudGVyZWQuICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGJyZWFrcG9pbnQgZW5jb3VudGVyZWQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRVhDRVBUSU9OX0RBVEFUWVBFX01JU0FMSUdOTUVOVDoKLSAgICAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIHJlYWQgb3Igd3JpdGUgZGF0YSB0aGF0IGlzCi0gICAgICAgICAgICAgICBtaXNhbGlnbmVkIG9uIGhhcmR3YXJlIHRoYXQgZG9lcyBub3QgcHJvdmlkZQotICAgICAgICAgICAgICAgYWxpZ25tZW50LiBGb3IgZXhhbXBsZSwgMTYtYml0IHZhbHVlcyBtdXN0IGJlCi0gICAgICAgICAgICAgICBhbGlnbmVkIG9uIDItYnl0ZSBib3VuZGFyaWVzLCAzMi1iaXQgdmFsdWVzIG9uCi0gICAgICAgICAgICAgICA0LWJ5dGUgYm91bmRhcmllcywgYW5kIHNvIG9uLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBkYXRhdHlwZSBtaXNhbGlnbm1lbnQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRVhDRVBUSU9OX1NJTkdMRV9TVEVQOgotICAgICAgICAgICAgLyogQSB0cmFjZSB0cmFwIG9yIG90aGVyIHNpbmdsZS1pbnN0cnVjdGlvbiBtZWNoYW5pc20KLSAgICAgICAgICAgICAgIHNpZ25hbGVkIHRoYXQgb25lIGluc3RydWN0aW9uIGhhcyBiZWVuIGV4ZWN1dGVkLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzaW5nbGUgc3RlcCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fQVJSQVlfQk9VTkRTX0VYQ0VFREVEOgotICAgICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gYWNjZXNzIGFuIGFycmF5IGVsZW1lbnQKLSAgICAgICAgICAgICAgIHRoYXQgaXMgb3V0IG9mIGJvdW5kcywgYW5kIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlCi0gICAgICAgICAgICAgICBzdXBwb3J0cyBib3VuZHMgY2hlY2tpbmcuICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFycmF5IGJvdW5kcyBleGNlZWRlZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fRkxUX0RFTk9STUFMX09QRVJBTkQ6Ci0gICAgICAgICAgICAvKiBPbmUgb2YgdGhlIG9wZXJhbmRzIGluIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uCi0gICAgICAgICAgICAgICBpcyBkZW5vcm1hbC4gQSBkZW5vcm1hbCB2YWx1ZSBpcyBvbmUgdGhhdCBpcyB0b28KLSAgICAgICAgICAgICAgIHNtYWxsIHRvIHJlcHJlc2VudCBhcyBhIHN0YW5kYXJkIGZsb2F0aW5nLXBvaW50Ci0gICAgICAgICAgICAgICB2YWx1ZS4gKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXRpbmctcG9pbnQgb3BlcmFuZCBkZW5vcm1hbCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fRkxUX0RJVklERV9CWV9aRVJPOgotICAgICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZGl2aWRlIGEgZmxvYXRpbmctcG9pbnQKLSAgICAgICAgICAgICAgIHZhbHVlIGJ5IGEgZmxvYXRpbmctcG9pbnQgZGl2aXNvciBvZiB6ZXJvLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBkaXZpZGUgYnkgemVybyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fRkxUX0lORVhBQ1RfUkVTVUxUOgotICAgICAgICAgICAgLyogVGhlIHJlc3VsdCBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBjYW5ub3QgYmUKLSAgICAgICAgICAgICAgIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBkZWNpbWFsIGZyYWN0aW9uLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBpbmV4YWN0Iik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfSU5WQUxJRF9PUEVSQVRJT046Ci0gICAgICAgICAgICAvKiBUaGlzIGV4Y2VwdGlvbiByZXByZXNlbnRzIGFueSBmbG9hdGluZy1wb2ludAotICAgICAgICAgICAgICAgZXhjZXB0aW9uIG5vdCBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGludmFsaWQgb3BlcmF0aW9uIik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfT1ZFUkZMT1c6Ci0gICAgICAgICAgICAvKiBUaGUgZXhwb25lbnQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gaXMKLSAgICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiB0aGUgbWFnbml0dWRlIGFsbG93ZWQgYnkgdGhlCi0gICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHR5cGUuICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IG92ZXJmbG93Iik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfU1RBQ0tfQ0hFQ0s6Ci0gICAgICAgICAgICAvKiBUaGUgc3RhY2sgb3ZlcmZsb3dlZCBvciB1bmRlcmZsb3dlZCBhcyB0aGUgcmVzdWx0Ci0gICAgICAgICAgICAgICBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbi4gKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc3RhY2sgb3Zlci91bmRlcmZsb3ciKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRVhDRVBUSU9OX1NUQUNLX09WRVJGTE9XOgotICAgICAgICAgICAgLyogVGhlIHN0YWNrIG92ZXJmbG93ZWQgb3IgdW5kZXJmbG93ZWQgYXMgdGhlIHJlc3VsdAotICAgICAgICAgICAgICAgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24uICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHN0YWNrIG92ZXJmbG93Iik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfVU5ERVJGTE9XOgotICAgICAgICAgICAgLyogVGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzIGxlc3MKLSAgICAgICAgICAgICAgIHRoYW4gdGhlIG1hZ25pdHVkZSBhbGxvd2VkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgICAgICB0eXBlLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCB1bmRlcmZsb3ciKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRVhDRVBUSU9OX0lOVF9ESVZJREVfQllfWkVSTzoKLSAgICAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGRpdmlkZSBhbiBpbnRlZ2VyIHZhbHVlIGJ5Ci0gICAgICAgICAgICAgICBhbiBpbnRlZ2VyIGRpdmlzb3Igb2YgemVyby4gKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogaW50ZWdlciBkaXZpZGUgYnkgemVybyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fSU5UX09WRVJGTE9XOgotICAgICAgICAgICAgLyogVGhlIHJlc3VsdCBvZiBhbiBpbnRlZ2VyIG9wZXJhdGlvbiBjYXVzZWQgYSBjYXJyeQotICAgICAgICAgICAgICAgb3V0IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgcmVzdWx0LiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBpbnRlZ2VyIG92ZXJmbG93Iik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVYQ0VQVElPTl9QUklWX0lOU1RSVUNUSU9OOgotICAgICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZXhlY3V0ZSBhbiBpbnN0cnVjdGlvbgotICAgICAgICAgICAgICAgd2hvc2Ugb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICBtYWNoaW5lIG1vZGUuICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHByaXZpbGVkZ2VkIGluc3RydWN0aW9uIik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVYQ0VQVElPTl9OT05DT05USU5VQUJMRV9FWENFUFRJT046Ci0gICAgICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBjb250aW51ZSBleGVjdXRpb24gYWZ0ZXIgYQotICAgICAgICAgICAgICAgbm9uY29udGludWFibGUgZXhjZXB0aW9uIG9jY3VycmVkLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBub2NvbnRpbnVhYmxlIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50ZigiZXJyb3IgJWRcbiIsIGNvZGUpOworICAgIC8qIFRoZSAnY29kZScgaXMgYSBub3JtYWwgd2luMzIgZXJyb3IgY29kZSBzbyBpdCBjb3VsZCBiZSBoYW5kbGVkIGJ5CisgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoKS4gSG93ZXZlciwgZm9yIHNvbWUgZXJyb3JzLCB3ZSBoYXZlIGFkZGl0aW9uYWwKKyAgICBpbmZvcm1hdGlvbiBub3QgaW5jbHVkZWQgaW4gdGhlIGVycm9yIGNvZGUuIFdlIGhhbmRsZSB0aG9zZSBoZXJlIGFuZAorICAgIGRlbGVnYXRlIGFsbCBvdGhlcnMgdG8gdGhlIGdlbmVyaWMgZnVuY3Rpb24uICovCisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgY2FzZSBFWENFUFRJT05fQUNDRVNTX1ZJT0xBVElPTjoKKyAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gcmVhZCBmcm9tIG9yIHdyaXRlCisgICAgICAgICAgIHRvIGEgdmlydHVhbCBhZGRyZXNzIGZvciB3aGljaCBpdCBkb2VzIG5vdAorICAgICAgICAgICBoYXZlIHRoZSBhcHByb3ByaWF0ZSBhY2Nlc3MuICovCisgICAgICAgIGlmIChwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMF0gPT0gMCkKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbiBjb2RlIDB4JTA4eCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFjY2VzcyB2aW9sYXRpb24gcmVhZGluZyAlcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzFdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhY2Nlc3MgdmlvbGF0aW9uIHdyaXRpbmcgJXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByLT5FeGNlcHRpb25JbmZvcm1hdGlvblsxXSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fQlJFQUtQT0lOVDoKKyAgICAgICAgLyogQSBicmVha3BvaW50IHdhcyBlbmNvdW50ZXJlZC4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGJyZWFrcG9pbnQgZW5jb3VudGVyZWQiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVYQ0VQVElPTl9EQVRBVFlQRV9NSVNBTElHTk1FTlQ6CisgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIHJlYWQgb3Igd3JpdGUgZGF0YSB0aGF0IGlzCisgICAgICAgICAgIG1pc2FsaWduZWQgb24gaGFyZHdhcmUgdGhhdCBkb2VzIG5vdCBwcm92aWRlCisgICAgICAgICAgIGFsaWdubWVudC4gRm9yIGV4YW1wbGUsIDE2LWJpdCB2YWx1ZXMgbXVzdCBiZQorICAgICAgICAgICBhbGlnbmVkIG9uIDItYnl0ZSBib3VuZGFyaWVzLCAzMi1iaXQgdmFsdWVzIG9uCisgICAgICAgICAgIDQtYnl0ZSBib3VuZGFyaWVzLCBhbmQgc28gb24uICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBkYXRhdHlwZSBtaXNhbGlnbm1lbnQiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVYQ0VQVElPTl9TSU5HTEVfU1RFUDoKKyAgICAgICAgLyogQSB0cmFjZSB0cmFwIG9yIG90aGVyIHNpbmdsZS1pbnN0cnVjdGlvbiBtZWNoYW5pc20KKyAgICAgICAgICAgc2lnbmFsZWQgdGhhdCBvbmUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gZXhlY3V0ZWQuICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzaW5nbGUgc3RlcCIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX0FSUkFZX0JPVU5EU19FWENFRURFRDoKKyAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gYWNjZXNzIGFuIGFycmF5IGVsZW1lbnQKKyAgICAgICAgICAgdGhhdCBpcyBvdXQgb2YgYm91bmRzLCBhbmQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUKKyAgICAgICAgICAgc3VwcG9ydHMgYm91bmRzIGNoZWNraW5nLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYXJyYXkgYm91bmRzIGV4Y2VlZGVkIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fRkxUX0RFTk9STUFMX09QRVJBTkQ6CisgICAgICAgIC8qIE9uZSBvZiB0aGUgb3BlcmFuZHMgaW4gYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24KKyAgICAgICAgICAgaXMgZGVub3JtYWwuIEEgZGVub3JtYWwgdmFsdWUgaXMgb25lIHRoYXQgaXMgdG9vCisgICAgICAgICAgIHNtYWxsIHRvIHJlcHJlc2VudCBhcyBhIHN0YW5kYXJkIGZsb2F0aW5nLXBvaW50CisgICAgICAgICAgIHZhbHVlLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXRpbmctcG9pbnQgb3BlcmFuZCBkZW5vcm1hbCIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9ESVZJREVfQllfWkVSTzoKKyAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZGl2aWRlIGEgZmxvYXRpbmctcG9pbnQKKyAgICAgICAgICAgdmFsdWUgYnkgYSBmbG9hdGluZy1wb2ludCBkaXZpc29yIG9mIHplcm8uICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBkaXZpZGUgYnkgemVybyIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9JTkVYQUNUX1JFU1VMVDoKKyAgICAgICAgLyogVGhlIHJlc3VsdCBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBjYW5ub3QgYmUKKyAgICAgICAgICAgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhIGRlY2ltYWwgZnJhY3Rpb24uICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBpbmV4YWN0Iik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fRkxUX0lOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICAvKiBUaGlzIGV4Y2VwdGlvbiByZXByZXNlbnRzIGFueSBmbG9hdGluZy1wb2ludAorICAgICAgICAgICBleGNlcHRpb24gbm90IGluY2x1ZGVkIGluIHRoaXMgbGlzdC4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGludmFsaWQgb3BlcmF0aW9uIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fRkxUX09WRVJGTE9XOgorICAgICAgICAvKiBUaGUgZXhwb25lbnQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gaXMKKyAgICAgICAgICAgZ3JlYXRlciB0aGFuIHRoZSBtYWduaXR1ZGUgYWxsb3dlZCBieSB0aGUKKyAgICAgICAgICAgY29ycmVzcG9uZGluZyB0eXBlLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgb3ZlcmZsb3ciKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVYQ0VQVElPTl9GTFRfU1RBQ0tfQ0hFQ0s6CisgICAgICAgIC8qIFRoZSBzdGFjayBvdmVyZmxvd2VkIG9yIHVuZGVyZmxvd2VkIGFzIHRoZSByZXN1bHQKKyAgICAgICAgICAgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24uICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzdGFjayBvdmVyL3VuZGVyZmxvdyIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX1NUQUNLX09WRVJGTE9XOgorICAgICAgICAvKiBUaGUgc3RhY2sgb3ZlcmZsb3dlZCBvciB1bmRlcmZsb3dlZCBhcyB0aGUgcmVzdWx0CisgICAgICAgICAgIG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc3RhY2sgb3ZlcmZsb3ciKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVYQ0VQVElPTl9GTFRfVU5ERVJGTE9XOgorICAgICAgICAvKiBUaGUgZXhwb25lbnQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gaXMgbGVzcworICAgICAgICAgICB0aGFuIHRoZSBtYWduaXR1ZGUgYWxsb3dlZCBieSB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICB0eXBlLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgdW5kZXJmbG93Iik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fSU5UX0RJVklERV9CWV9aRVJPOgorICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBkaXZpZGUgYW4gaW50ZWdlciB2YWx1ZSBieQorICAgICAgICAgICBhbiBpbnRlZ2VyIGRpdmlzb3Igb2YgemVyby4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGludGVnZXIgZGl2aWRlIGJ5IHplcm8iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVYQ0VQVElPTl9JTlRfT1ZFUkZMT1c6CisgICAgICAgIC8qIFRoZSByZXN1bHQgb2YgYW4gaW50ZWdlciBvcGVyYXRpb24gY2F1c2VkIGEgY2FycnkKKyAgICAgICAgICAgb3V0IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgcmVzdWx0LiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogaW50ZWdlciBvdmVyZmxvdyIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX1BSSVZfSU5TVFJVQ1RJT046CisgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGV4ZWN1dGUgYW4gaW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgd2hvc2Ugb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjdXJyZW50CisgICAgICAgICAgIG1hY2hpbmUgbW9kZS4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHByaXZpbGVkZ2VkIGluc3RydWN0aW9uIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fTk9OQ09OVElOVUFCTEVfRVhDRVBUSU9OOgorICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBjb250aW51ZSBleGVjdXRpb24gYWZ0ZXIgYQorICAgICAgICAgICBub25jb250aW51YWJsZSBleGNlcHRpb24gb2NjdXJyZWQuICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBub2NvbnRpbnVhYmxlIik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoY29kZSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtNDEwLDcgKzQyMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIFB5Q0FyZ09iamVjdCAqCi1uZXdfQ0FyZ09iamVjdCh2b2lkKQorUHlDQXJnT2JqZWN0X25ldyh2b2lkKQogewogICAgIFB5Q0FyZ09iamVjdCAqcDsKICAgICBwID0gUHlPYmplY3RfTmV3KFB5Q0FyZ09iamVjdCwgJlB5Q0FyZ19UeXBlKTsKQEAgLTY3NCw3ICs2ODUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIG1lbXNldChwYS0+dmFsdWUucCwgMCwgc2l6ZSk7Ci0gICAgICAgIHBhLT5rZWVwID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKHBhLT52YWx1ZS5wLCBQeU1lbV9GcmVlKTsKKyAgICAgICAgcGEtPmtlZXAgPSBDQVBTVUxFX05FVyhwYS0+dmFsdWUucCwgQ1RZUEVTX0NBUFNVTEVfV0NIQVJfVCk7CiAgICAgICAgIGlmICghcGEtPmtlZXApIHsKICAgICAgICAgICAgIFB5TWVtX0ZyZWUocGEtPnZhbHVlLnApOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNzA5LDcgKzcyMCw3IEBACiB9CiAKIAotZmZpX3R5cGUgKkdldFR5cGUoUHlPYmplY3QgKm9iaikKK2ZmaV90eXBlICpfY3R5cGVzX2dldF9mZmlfdHlwZShQeU9iamVjdCAqb2JqKQogewogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CiAgICAgaWYgKG9iaiA9PSBOVUxMKQpAQCAtNzg5LDcgKzgwMCw3IEBACiAgICAgfQogCiAgICAgaWYgKGZsYWdzICYgKEZVTkNGTEFHX1VTRV9FUlJOTyB8IEZVTkNGTEFHX1VTRV9MQVNURVJST1IpKSB7Ci0gICAgICAgIGVycm9yX29iamVjdCA9IGdldF9lcnJvcl9vYmplY3QoJnNwYWNlKTsKKyAgICAgICAgZXJyb3Jfb2JqZWN0ID0gX2N0eXBlc19nZXRfZXJyb2JqKCZzcGFjZSk7CiAgICAgICAgIGlmIChlcnJvcl9vYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC04MTMsNyArODI0LDcgQEAKICNlbmRpZgogICAgICAgICBkZWx0YSA9CiAjZW5kaWYKLSAgICAgICAgICAgIGZmaV9jYWxsKCZjaWYsICh2b2lkICopcFByb2MsIHJlc21lbSwgYXZhbHVlcyk7CisgICAgICAgICAgICAgICAgZmZpX2NhbGwoJmNpZiwgKHZvaWQgKilwUHJvYywgcmVzbWVtLCBhdmFsdWVzKTsKICNpZmRlZiBNU19XSU4zMgogI2lmbmRlZiBET05UX1VTRV9TRUgKICAgICB9CkBAIC04NDgsMjkgKzg1OSwyOSBAQAogI2lmZGVmIE1TX1dJTjY0CiAgICAgaWYgKGRlbHRhICE9IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJmZmlfY2FsbCBmYWlsZWQgd2l0aCBjb2RlICVkIiwKLSAgICAgICAgICAgICAgICAgICAgIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgImZmaV9jYWxsIGZhaWxlZCB3aXRoIGNvZGUgJWQiLAorICAgICAgICAgICAgICAgICBkZWx0YSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAjZWxzZQogICAgIGlmIChkZWx0YSA8IDApIHsKICAgICAgICAgaWYgKGZsYWdzICYgRlVOQ0ZMQUdfQ0RFQ0wpCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VkdXJlIGNhbGxlZCB3aXRoIG5vdCBlbm91Z2ggIgotICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKCVkIGJ5dGVzIG1pc3NpbmcpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAib3Igd3JvbmcgY2FsbGluZyBjb252ZW50aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAtZGVsdGEpOworICAgICAgICAgICAgICAgICAgICAgIlByb2NlZHVyZSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoICIKKyAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKCVkIGJ5dGVzIG1pc3NpbmcpICIKKyAgICAgICAgICAgICAgICAgICAgICJvciB3cm9uZyBjYWxsaW5nIGNvbnZlbnRpb24iLAorICAgICAgICAgICAgICAgICAgICAgLWRlbHRhKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICglZCBieXRlcyBtaXNzaW5nKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgLWRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgICJQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggbm90IGVub3VnaCAiCisgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICglZCBieXRlcyBtaXNzaW5nKSIsCisgICAgICAgICAgICAgICAgICAgICAtZGVsdGEpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfSBlbHNlIGlmIChkZWx0YSA+IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiUHJvY2VkdXJlIHByb2JhYmx5IGNhbGxlZCB3aXRoIHRvbyBtYW55ICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKCVkIGJ5dGVzIGluIGV4Y2VzcykiLAotICAgICAgICAgICAgICAgICAgICAgZGVsdGEpOworICAgICAgICAgICAgICAgICAiUHJvY2VkdXJlIHByb2JhYmx5IGNhbGxlZCB3aXRoIHRvbyBtYW55ICIKKyAgICAgICAgICAgICAgICAgImFyZ3VtZW50cyAoJWQgYnl0ZXMgaW4gZXhjZXNzKSIsCisgICAgICAgICAgICAgICAgIGRlbHRhKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICNlbmRpZgpAQCAtOTA3LDI0ICs5MTgsMjQgQEAKICAgICBpZiAoZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlc3R5cGUsICJpIiwgKihpbnQgKilyZXN1bHQpOwogCi0gICAgaWYgKGRpY3QtPmdldGZ1bmMgJiYgIUlzU2ltcGxlU3ViVHlwZShyZXN0eXBlKSkgeworICAgIGlmIChkaWN0LT5nZXRmdW5jICYmICFfY3R5cGVzX3NpbXBsZV9pbnN0YW5jZShyZXN0eXBlKSkgewogICAgICAgICByZXR2YWwgPSBkaWN0LT5nZXRmdW5jKHJlc3VsdCwgZGljdC0+c2l6ZSk7CiAgICAgICAgIC8qIElmIHJlc3R5cGUgaXMgcHlfb2JqZWN0IChkZXRlY3RlZCBieSBjb21wYXJpbmcgZ2V0ZnVuYyB3aXRoCiAgICAgICAgICAgIE9fZ2V0KSwgd2UgaGF2ZSB0byBjYWxsIFB5X0RFQ1JFRiBiZWNhdXNlIE9fZ2V0IGhhcyBhbHJlYWR5CiAgICAgICAgICAgIGNhbGxlZCBQeV9JTkNSRUYuCiAgICAgICAgICovCi0gICAgICAgIGlmIChkaWN0LT5nZXRmdW5jID09IGdldGVudHJ5KCJPIiktPmdldGZ1bmMpIHsKKyAgICAgICAgaWYgKGRpY3QtPmdldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJPIiktPmdldGZ1bmMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHZhbCA9IENEYXRhX0Zyb21CYXNlT2JqKHJlc3R5cGUsIE5VTEwsIDAsIHJlc3VsdCk7CisgICAgICAgIHJldHZhbCA9IFB5Q0RhdGFfRnJvbUJhc2VPYmoocmVzdHlwZSwgTlVMTCwgMCwgcmVzdWx0KTsKIAogICAgIGlmICghY2hlY2tlciB8fCAhcmV0dmFsKQogICAgICAgICByZXR1cm4gcmV0dmFsOwogCiAgICAgdiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY2hlY2tlciwgcmV0dmFsLCBOVUxMKTsKICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBfQWRkVHJhY2ViYWNrKCJHZXRSZXN1bHQiLCAiX2N0eXBlcy9jYWxscHJvYy5jIiwgX19MSU5FX18tMik7CisgICAgICAgIF9jdHlwZXNfYWRkX3RyYWNlYmFjaygiR2V0UmVzdWx0IiwgIl9jdHlwZXMvY2FsbHByb2MuYyIsIF9fTElORV9fLTIpOwogICAgIFB5X0RFQ1JFRihyZXR2YWwpOwogICAgIHJldHVybiB2OwogfQpAQCAtOTMzLDcgKzk0NCw3IEBACiAgKiBSYWlzZSBhIG5ldyBleGNlcHRpb24gJ2V4Y19jbGFzcycsIGFkZGluZyBhZGRpdGlvbmFsIHRleHQgdG8gdGhlIG9yaWdpbmFsCiAgKiBleGNlcHRpb24gc3RyaW5nLgogICovCi12b2lkIEV4dGVuZF9FcnJvcl9JbmZvKFB5T2JqZWN0ICpleGNfY2xhc3MsIGNoYXIgKmZtdCwgLi4uKQordm9pZCBfY3R5cGVzX2V4dGVuZF9lcnJvcihQeU9iamVjdCAqZXhjX2NsYXNzLCBjaGFyICpmbXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhcmdzOwogICAgIFB5T2JqZWN0ICp0cCwgKnYsICp0YiwgKnMsICpjbHNfc3RyLCAqbXNnX3N0cjsKQEAgLTEwNTgsNyArMTA2OSw3IEBACiAgKgogICogLSBYWFggdmFyaW91cyByZXF1aXJlbWVudHMgZm9yIHJlc3R5cGUsIG5vdCB5ZXQgY29sbGVjdGVkCiAgKi8KLVB5T2JqZWN0ICpfQ2FsbFByb2MoUFBST0MgcFByb2MsCitQeU9iamVjdCAqX2N0eXBlc19jYWxscHJvYyhQUFJPQyBwUHJvYywKICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3R1cGxlLAogI2lmZGVmIE1TX1dJTjMyCiAgICAgICAgICAgICAgICAgICAgIElVbmtub3duICpwSXVuaywKQEAgLTExMTEsNyArMTEyMiw3IEBACiAgICAgICAgIGFyZyA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHVwbGUsIGkpOyAgICAgICAgICAgIC8qIGJvcnJvd2VkIHJlZiAqLwogICAgICAgICAvKiBGb3IgY2RlY2wgZnVuY3Rpb25zLCB3ZSBhbGxvdyBtb3JlIGFjdHVhbCBhcmd1bWVudHMKICAgICAgICAgICAgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBhcmd0eXBlcyB0dXBsZS4KLSAgICAgICAgICAgVGhpcyBpcyBjaGVja2VkIGluIF9jdHlwZXM6OkNGdW5jUHRyX0NhbGwKKyAgICAgICAgICAgVGhpcyBpcyBjaGVja2VkIGluIF9jdHlwZXM6OlB5Q0Z1bmNQdHJfQ2FsbAogICAgICAgICAqLwogICAgICAgICBpZiAoYXJndHlwZXMgJiYgYXJndHlwZV9jb3VudCA+IGkpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2OwpAQCAtMTEyMCwyNiArMTEzMSwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIEV4dGVuZF9FcnJvcl9JbmZvKFB5RXhjX0FyZ0Vycm9yLCAiYXJndW1lbnQgJWQ6ICIsIGkrMSk7CisgICAgICAgICAgICAgICAgX2N0eXBlc19leHRlbmRfZXJyb3IoUHlFeGNfQXJnRXJyb3IsICJhcmd1bWVudCAlZDogIiwgaSsxKTsKICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGVyciA9IENvbnZQYXJhbSh2LCBpKzEsIHBhKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgICAgIGlmICgtMSA9PSBlcnIpIHsKLSAgICAgICAgICAgICAgICBFeHRlbmRfRXJyb3JfSW5mbyhQeUV4Y19BcmdFcnJvciwgImFyZ3VtZW50ICVkOiAiLCBpKzEpOworICAgICAgICAgICAgICAgIF9jdHlwZXNfZXh0ZW5kX2Vycm9yKFB5RXhjX0FyZ0Vycm9yLCAiYXJndW1lbnQgJWQ6ICIsIGkrMSk7CiAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZXJyID0gQ29udlBhcmFtKGFyZywgaSsxLCBwYSk7CiAgICAgICAgICAgICBpZiAoLTEgPT0gZXJyKSB7Ci0gICAgICAgICAgICAgICAgRXh0ZW5kX0Vycm9yX0luZm8oUHlFeGNfQXJnRXJyb3IsICJhcmd1bWVudCAlZDogIiwgaSsxKTsKKyAgICAgICAgICAgICAgICBfY3R5cGVzX2V4dGVuZF9lcnJvcihQeUV4Y19BcmdFcnJvciwgImFyZ3VtZW50ICVkOiAiLCBpKzEpOwogICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsgLyogbGVha2luZyA/ICovCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBydHlwZSA9IEdldFR5cGUocmVzdHlwZSk7CisgICAgcnR5cGUgPSBfY3R5cGVzX2dldF9mZmlfdHlwZShyZXN0eXBlKTsKICAgICByZXNidWYgPSBhbGxvY2EobWF4KHJ0eXBlLT5zaXplLCBzaXplb2YoZmZpX2FyZykpKTsKIAogICAgIGF2YWx1ZXMgPSAodm9pZCAqKilhbGxvY2Eoc2l6ZW9mKHZvaWQgKikgKiBhcmdjb3VudCk7CkBAIC0xMTUwLDcgKzExNjEsNyBAQAogICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnY291bnQ7ICsraSkgewogICAgICAgICBhdHlwZXNbaV0gPSBhcmdzW2ldLmZmaV90eXBlOwotICAgICAgICBpZiAoYXR5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgICBpZiAoYXR5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCAKICNpZmRlZiBfV0lONjQKICAgICAgICAgICAgICYmIGF0eXBlc1tpXS0+c2l6ZSA8PSBzaXplb2Yodm9pZCAqKQogI2VuZGlmCkBAIC0xMzUxLDcgKzEzNjIsNyBAQAogICAgIHBJdW5rID0gKElVbmtub3duICopKCoodm9pZCAqKikocGNvbS0+Yl9wdHIpKTsKICAgICBscFZ0YmwgPSAoUFBST0MgKikocEl1bmstPmxwVnRibCk7CiAKLSAgICByZXN1bHQgPSAgX0NhbGxQcm9jKGxwVnRibFtpbmRleF0sCisgICAgcmVzdWx0ID0gIF9jdHlwZXNfY2FsbHByb2MobHBWdGJsW2luZGV4XSwKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cywKICNpZmRlZiBNU19XSU4zMgogICAgICAgICAgICAgICAgICAgICAgICAgcEl1bmssCkBAIC0xNDc0LDcgKzE0ODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlUdXBsZV9UeXBlLCAmYXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXN1bHQgPSAgX0NhbGxQcm9jKChQUFJPQylmdW5jLAorICAgIHJlc3VsdCA9ICBfY3R5cGVzX2NhbGxwcm9jKChQUFJPQylmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLAogI2lmZGVmIE1TX1dJTjMyCiAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLApAQCAtMTUwNSw3ICsxNTE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VHVwbGVfVHlwZSwgJmFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmVzdWx0ID0gIF9DYWxsUHJvYygoUFBST0MpZnVuYywKKyAgICByZXN1bHQgPSAgX2N0eXBlc19jYWxscHJvYygoUFBST0MpZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cywKICNpZmRlZiBNU19XSU4zMgogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKQEAgLTE1OTcsNyArMTYwOCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHBhcmcgPSBuZXdfQ0FyZ09iamVjdCgpOworICAgIHBhcmcgPSBQeUNBcmdPYmplY3RfbmV3KCk7CiAgICAgaWYgKHBhcmcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE2NzIsMTcgKzE2ODMsMTcgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAienM6c2V0X2NvbnZlcnNpb25fbW9kZSIsICZjb2RpbmcsICZtb2RlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmVzdWx0ID0gUHlfQnVpbGRWYWx1ZSgiKHp6KSIsIGNvbnZlcnNpb25fbW9kZV9lbmNvZGluZywgY29udmVyc2lvbl9tb2RlX2Vycm9ycyk7CisgICAgcmVzdWx0ID0gUHlfQnVpbGRWYWx1ZSgiKHp6KSIsIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7CiAgICAgaWYgKGNvZGluZykgewotICAgICAgICBQeU1lbV9GcmVlKGNvbnZlcnNpb25fbW9kZV9lbmNvZGluZyk7Ci0gICAgICAgIGNvbnZlcnNpb25fbW9kZV9lbmNvZGluZyA9IFB5TWVtX01hbGxvYyhzdHJsZW4oY29kaW5nKSArIDEpOwotICAgICAgICBzdHJjcHkoY29udmVyc2lvbl9tb2RlX2VuY29kaW5nLCBjb2RpbmcpOworICAgICAgICBQeU1lbV9GcmVlKF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZyk7CisgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZyA9IFB5TWVtX01hbGxvYyhzdHJsZW4oY29kaW5nKSArIDEpOworICAgICAgICBzdHJjcHkoX2N0eXBlc19jb252ZXJzaW9uX2VuY29kaW5nLCBjb2RpbmcpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnZlcnNpb25fbW9kZV9lbmNvZGluZyA9IE5VTEw7CisgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZyA9IE5VTEw7CiAgICAgfQotICAgIFB5TWVtX0ZyZWUoY29udmVyc2lvbl9tb2RlX2Vycm9ycyk7Ci0gICAgY29udmVyc2lvbl9tb2RlX2Vycm9ycyA9IFB5TWVtX01hbGxvYyhzdHJsZW4obW9kZSkgKyAxKTsKLSAgICBzdHJjcHkoY29udmVyc2lvbl9tb2RlX2Vycm9ycywgbW9kZSk7CisgICAgUHlNZW1fRnJlZShfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzKTsKKyAgICBfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzID0gUHlNZW1fTWFsbG9jKHN0cmxlbihtb2RlKSArIDEpOworICAgIHN0cmNweShfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzLCBtb2RlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmCkBAIC0xNzgxLDcgKzE3OTIsNyBAQAogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgY2hhciAqYnVmOwogCi0gICAgcmVzdWx0ID0gUHlEaWN0X0dldEl0ZW0oX3BvaW50ZXJfdHlwZV9jYWNoZSwgY2xzKTsKKyAgICByZXN1bHQgPSBQeURpY3RfR2V0SXRlbShfY3R5cGVzX3B0cnR5cGVfY2FjaGUsIGNscyk7CiAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICBQeV9JTkNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE3ODksMTAgKzE4MDAsMTAgQEAKICAgICBpZiAoUHlTdHJpbmdfQ2hlY2tFeGFjdChjbHMpKSB7CiAgICAgICAgIGJ1ZiA9IGFsbG9jYShzdHJsZW4oUHlTdHJpbmdfQVNfU1RSSU5HKGNscykpICsgMyArIDEpOwogICAgICAgICBzcHJpbnRmKGJ1ZiwgIkxQXyVzIiwgUHlTdHJpbmdfQVNfU1RSSU5HKGNscykpOwotICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopUHlfVFlQRSgmUG9pbnRlcl9UeXBlKSwKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKVB5X1RZUEUoJlB5Q1BvaW50ZXJfVHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyhPKXt9IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQb2ludGVyX1R5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q1BvaW50ZXJfVHlwZSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cihyZXN1bHQpOwpAQCAtMTgwMCwxMCArMTgxMSwxMCBAQAogICAgICAgICB0eXAgPSAoUHlUeXBlT2JqZWN0ICopY2xzOwogICAgICAgICBidWYgPSBhbGxvY2Eoc3RybGVuKHR5cC0+dHBfbmFtZSkgKyAzICsgMSk7CiAgICAgICAgIHNwcmludGYoYnVmLCAiTFBfJXMiLCB0eXAtPnRwX25hbWUpOwotICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopUHlfVFlQRSgmUG9pbnRlcl9UeXBlKSwKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKVB5X1RZUEUoJlB5Q1BvaW50ZXJfVHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyhPKXtzT30iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBvaW50ZXJfVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUNQb2ludGVyX1R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3R5cGVfIiwgY2xzKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE4MTMsNyArMTgyNCw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJtdXN0IGJlIGEgY3R5cGVzIHR5cGUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmICgtMSA9PSBQeURpY3RfU2V0SXRlbShfcG9pbnRlcl90eXBlX2NhY2hlLCBrZXksIHJlc3VsdCkpIHsKKyAgICBpZiAoLTEgPT0gUHlEaWN0X1NldEl0ZW0oX2N0eXBlc19wdHJ0eXBlX2NhY2hlLCBrZXksIHJlc3VsdCkpIHsKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE4MjgsNyArMTgzOSw3IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBQeU9iamVjdCAqdHlwOwogCi0gICAgdHlwID0gUHlEaWN0X0dldEl0ZW0oX3BvaW50ZXJfdHlwZV9jYWNoZSwgKFB5T2JqZWN0ICopUHlfVFlQRShhcmcpKTsKKyAgICB0eXAgPSBQeURpY3RfR2V0SXRlbShfY3R5cGVzX3B0cnR5cGVfY2FjaGUsIChQeU9iamVjdCAqKVB5X1RZUEUoYXJnKSk7CiAgICAgaWYgKHR5cCkKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3ModHlwLCBhcmcsIE5VTEwpOwogICAgIHR5cCA9IFBPSU5URVIoTlVMTCwgKFB5T2JqZWN0ICopUHlfVFlQRShhcmcpKTsKQEAgLTE4NjYsNyArMTg3Nyw3IEBACiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoInNpTiIsIGRpY3QtPmZvcm1hdCwgZGljdC0+bmRpbSwgc2hhcGUpOwogfQogCi1QeU1ldGhvZERlZiBtb2R1bGVfbWV0aG9kc1tdID0geworUHlNZXRob2REZWYgX2N0eXBlc19tb2R1bGVfbWV0aG9kc1tdID0gewogICAgIHsiZ2V0X2Vycm5vIiwgZ2V0X2Vycm5vLCBNRVRIX05PQVJHU30sCiAgICAgeyJzZXRfZXJybm8iLCBzZXRfZXJybm8sIE1FVEhfVkFSQVJHU30sCiAgICAgeyJQT0lOVEVSIiwgUE9JTlRFUiwgTUVUSF9PIH0sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMKaW5kZXggNDYwNTNiOC4uYzcwNTNlZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYwpAQCAtMTAsMTIgKzEwLDE3IEBACiAjZW5kaWYKICNpbmNsdWRlICJjdHlwZXMuaCIKIAorCisjZGVmaW5lIENUWVBFU19DQVBTVUxFX1dDSEFSX1QgIl9jdHlwZXMvY2ZpZWxkLmMgd2NoYXJfdCBidWZmZXIgZnJvbSB1bmljb2RlIgorQ1RZUEVTX0NBUFNVTEVfSU5TVEFOVElBVEVfREVTVFJVQ1RPUihDVFlQRVNfQ0FQU1VMRV9XQ0hBUl9UKQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICBDRmllbGRfVHlwZQorICBQeUNGaWVsZF9UeXBlCiAqLwogc3RhdGljIFB5T2JqZWN0ICoKLUNGaWVsZF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitQeUNGaWVsZF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgQ0ZpZWxkT2JqZWN0ICpvYmo7CiAgICAgb2JqID0gKENGaWVsZE9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwpAQCAtMzUsNyArNDAsNyBAQAogICogcHJldl9kZXNjIHBvaW50cyB0byB0aGUgdHlwZSBvZiB0aGUgcHJldmlvdXMgYml0ZmllbGQsIGlmIGFueS4KICAqLwogUHlPYmplY3QgKgotQ0ZpZWxkX0Zyb21EZXNjKFB5T2JqZWN0ICpkZXNjLCBQeV9zc2l6ZV90IGluZGV4LAorUHlDRmllbGRfRnJvbURlc2MoUHlPYmplY3QgKmRlc2MsIFB5X3NzaXplX3QgaW5kZXgsCiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqcGZpZWxkX3NpemUsIGludCBiaXRzaXplLCBpbnQgKnBiaXRvZnMsCiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqcHNpemUsIFB5X3NzaXplX3QgKnBvZmZzZXQsIFB5X3NzaXplX3QgKnBhbGlnbiwKICAgICAgICAgICAgICAgICBpbnQgcGFjaywgaW50IGJpZ19lbmRpYW4pCkBAIC01Miw3ICs1Nyw3IEBACiAjZGVmaW5lIENPTlRfQklURklFTEQgMgogI2RlZmluZSBFWFBBTkRfQklURklFTEQgMwogCi0gICAgc2VsZiA9IChDRmllbGRPYmplY3QgKilQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKSZDRmllbGRfVHlwZSwKKyAgICBzZWxmID0gKENGaWVsZE9iamVjdCAqKVB5T2JqZWN0X0NhbGxPYmplY3QoKFB5T2JqZWN0ICopJlB5Q0ZpZWxkX1R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTAyLDcgKzEwNyw3IEBACiAgICAgLyogIEZpZWxkIGRlc2NyaXB0b3JzIGZvciAnY19jaGFyICogbicgYXJlIGJlIHNjcGVjaWFsIGNhc2VkIHRvCiAgICAgICAgIHJldHVybiBhIFB5dGhvbiBzdHJpbmcgaW5zdGVhZCBvZiBhbiBBcnJheSBvYmplY3QgaW5zdGFuY2UuLi4KICAgICAqLwotICAgIGlmIChBcnJheVR5cGVPYmplY3RfQ2hlY2socHJvdG8pKSB7CisgICAgaWYgKFB5Q0FycmF5VHlwZU9iamVjdF9DaGVjayhwcm90bykpIHsKICAgICAgICAgU3RnRGljdE9iamVjdCAqYWRpY3QgPSBQeVR5cGVfc3RnZGljdChwcm90byk7CiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKmlkaWN0OwogICAgICAgICBpZiAoYWRpY3QgJiYgYWRpY3QtPnByb3RvKSB7CkBAIC0xMTMsMTQgKzExOCwxNCBAQAogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpZGljdC0+Z2V0ZnVuYyA9PSBnZXRlbnRyeSgiYyIpLT5nZXRmdW5jKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBnZXRlbnRyeSgicyIpOworICAgICAgICAgICAgaWYgKGlkaWN0LT5nZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiYyIpLT5nZXRmdW5jKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoInMiKTsKICAgICAgICAgICAgICAgICBnZXRmdW5jID0gZmQtPmdldGZ1bmM7CiAgICAgICAgICAgICAgICAgc2V0ZnVuYyA9IGZkLT5zZXRmdW5jOwogICAgICAgICAgICAgfQogI2lmZGVmIENUWVBFU19VTklDT0RFCi0gICAgICAgICAgICBpZiAoaWRpY3QtPmdldGZ1bmMgPT0gZ2V0ZW50cnkoInUiKS0+Z2V0ZnVuYykgewotICAgICAgICAgICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gZ2V0ZW50cnkoIlUiKTsKKyAgICAgICAgICAgIGlmIChpZGljdC0+Z2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoInUiKS0+Z2V0ZnVuYykgeworICAgICAgICAgICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJVIik7CiAgICAgICAgICAgICAgICAgZ2V0ZnVuYyA9IGZkLT5nZXRmdW5jOwogICAgICAgICAgICAgICAgIHNldGZ1bmMgPSBmZC0+c2V0ZnVuYzsKICAgICAgICAgICAgIH0KQEAgLTE5NCw3ICsxOTksNyBAQAogfQogCiBzdGF0aWMgaW50Ci1DRmllbGRfc2V0KENGaWVsZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmluc3QsIFB5T2JqZWN0ICp2YWx1ZSkKK1B5Q0ZpZWxkX3NldChDRmllbGRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbnN0LCBQeU9iamVjdCAqdmFsdWUpCiB7CiAgICAgQ0RhdGFPYmplY3QgKmRzdDsKICAgICBjaGFyICpwdHI7CkBAIC0yMDYsMTIgKzIxMSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGRlbGV0ZSBhdHRyaWJ1dGUiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICByZXR1cm4gQ0RhdGFfc2V0KGluc3QsIHNlbGYtPnByb3RvLCBzZWxmLT5zZXRmdW5jLCB2YWx1ZSwKKyAgICByZXR1cm4gUHlDRGF0YV9zZXQoaW5zdCwgc2VsZi0+cHJvdG8sIHNlbGYtPnNldGZ1bmMsIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgc2VsZi0+aW5kZXgsIHNlbGYtPnNpemUsIHB0cik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1DRmllbGRfZ2V0KENGaWVsZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmluc3QsIFB5VHlwZU9iamVjdCAqdHlwZSkKK1B5Q0ZpZWxkX2dldChDRmllbGRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbnN0LCBQeVR5cGVPYmplY3QgKnR5cGUpCiB7CiAgICAgQ0RhdGFPYmplY3QgKnNyYzsKICAgICBpZiAoaW5zdCA9PSBOVUxMKSB7CkBAIC0yMjAsNTEgKzIyNSw1MSBAQAogICAgIH0KICAgICBhc3NlcnQoQ0RhdGFPYmplY3RfQ2hlY2soaW5zdCkpOwogICAgIHNyYyA9IChDRGF0YU9iamVjdCAqKWluc3Q7Ci0gICAgcmV0dXJuIENEYXRhX2dldChzZWxmLT5wcm90bywgc2VsZi0+Z2V0ZnVuYywgaW5zdCwKKyAgICByZXR1cm4gUHlDRGF0YV9nZXQoc2VsZi0+cHJvdG8sIHNlbGYtPmdldGZ1bmMsIGluc3QsCiAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5pbmRleCwgc2VsZi0+c2l6ZSwgc3JjLT5iX3B0ciArIHNlbGYtPm9mZnNldCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1DRmllbGRfZ2V0X29mZnNldChQeU9iamVjdCAqc2VsZiwgdm9pZCAqZGF0YSkKK1B5Q0ZpZWxkX2dldF9vZmZzZXQoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmRhdGEpCiB7CiAgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KCgoQ0ZpZWxkT2JqZWN0ICopc2VsZiktPm9mZnNldCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1DRmllbGRfZ2V0X3NpemUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmRhdGEpCitQeUNGaWVsZF9nZXRfc2l6ZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqZGF0YSkKIHsKICAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3QoKChDRmllbGRPYmplY3QgKilzZWxmKS0+c2l6ZSk7CiB9CiAKLXN0YXRpYyBQeUdldFNldERlZiBDRmllbGRfZ2V0c2V0W10gPSB7Ci0gICAgeyAib2Zmc2V0IiwgQ0ZpZWxkX2dldF9vZmZzZXQsIE5VTEwsICJvZmZzZXQgaW4gYnl0ZXMgb2YgdGhpcyBmaWVsZCIgfSwKLSAgICB7ICJzaXplIiwgQ0ZpZWxkX2dldF9zaXplLCBOVUxMLCAic2l6ZSBpbiBieXRlcyBvZiB0aGlzIGZpZWxkIiB9LAorc3RhdGljIFB5R2V0U2V0RGVmIFB5Q0ZpZWxkX2dldHNldFtdID0geworICAgIHsgIm9mZnNldCIsIFB5Q0ZpZWxkX2dldF9vZmZzZXQsIE5VTEwsICJvZmZzZXQgaW4gYnl0ZXMgb2YgdGhpcyBmaWVsZCIgfSwKKyAgICB7ICJzaXplIiwgUHlDRmllbGRfZ2V0X3NpemUsIE5VTEwsICJzaXplIGluIGJ5dGVzIG9mIHRoaXMgZmllbGQiIH0sCiAgICAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCiB9OwogCiBzdGF0aWMgaW50Ci1DRmllbGRfdHJhdmVyc2UoQ0ZpZWxkT2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK1B5Q0ZpZWxkX3RyYXZlcnNlKENGaWVsZE9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CiAgICAgUHlfVklTSVQoc2VsZi0+cHJvdG8pOwogICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1DRmllbGRfY2xlYXIoQ0ZpZWxkT2JqZWN0ICpzZWxmKQorUHlDRmllbGRfY2xlYXIoQ0ZpZWxkT2JqZWN0ICpzZWxmKQogewogICAgIFB5X0NMRUFSKHNlbGYtPnByb3RvKTsKICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKLUNGaWVsZF9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQorUHlDRmllbGRfZGVhbGxvYyhQeU9iamVjdCAqc2VsZikKIHsKLSAgICBDRmllbGRfY2xlYXIoKENGaWVsZE9iamVjdCAqKXNlbGYpOworICAgIFB5Q0ZpZWxkX2NsZWFyKChDRmllbGRPYmplY3QgKilzZWxmKTsKICAgICBzZWxmLT5vYl90eXBlLT50cF9mcmVlKChQeU9iamVjdCAqKXNlbGYpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotQ0ZpZWxkX3JlcHIoQ0ZpZWxkT2JqZWN0ICpzZWxmKQorUHlDRmllbGRfcmVwcihDRmllbGRPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBQeV9zc2l6ZV90IGJpdHMgPSBzZWxmLT5zaXplID4+IDE2OwpAQCAtMjkyLDE3ICsyOTcsMTcgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QeVR5cGVPYmplY3QgQ0ZpZWxkX1R5cGUgPSB7CitQeVR5cGVPYmplY3QgUHlDRmllbGRfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiX2N0eXBlcy5DRmllbGQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwogICAgIHNpemVvZihDRmllbGRPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwotICAgIENGaWVsZF9kZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIFB5Q0ZpZWxkX2RlYWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLwotICAgIChyZXByZnVuYylDRmllbGRfcmVwciwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIChyZXByZnVuYylQeUNGaWVsZF9yZXByLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCkBAIC0zMTQsMjMgKzMxOSwyMyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAvKiB0cF9mbGFncyAqLwogICAgICJTdHJ1Y3R1cmUvVW5pb24gbWVtYmVyIiwgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCi0gICAgKHRyYXZlcnNlcHJvYylDRmllbGRfdHJhdmVyc2UsICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KUNGaWVsZF9jbGVhciwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAodHJhdmVyc2Vwcm9jKVB5Q0ZpZWxkX3RyYXZlcnNlLCAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSlQeUNGaWVsZF9jbGVhciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KLSAgICBDRmllbGRfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIFB5Q0ZpZWxkX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KLSAgICAoZGVzY3JnZXRmdW5jKUNGaWVsZF9nZXQsICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwotICAgIChkZXNjcnNldGZ1bmMpQ0ZpZWxkX3NldCwgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgKGRlc2NyZ2V0ZnVuYylQeUNGaWVsZF9nZXQsICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAoZGVzY3JzZXRmdW5jKVB5Q0ZpZWxkX3NldCwgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KLSAgICBDRmllbGRfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIFB5Q0ZpZWxkX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCkBAIC0xMTkxLDggKzExOTYsOCBAQAogCiAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKHZhbHVlKSkgewogICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCh2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbl9tb2RlX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uX21vZGVfZXJyb3JzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSBpZiAoIVB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKQEAgLTEyNjYsOCArMTI3MSw4IEBACiAKICAgICBpZiAoUHlTdHJpbmdfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIHZhbHVlID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uX21vZGVfZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25fbW9kZV9lcnJvcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lcnJvcnMpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgewpAQCAtMTM2NCw4ICsxMzY5LDggQEAKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0gZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICBQeU9iamVjdCAqc3RyID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbl9tb2RlX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uX21vZGVfZXJyb3JzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzKTsKICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICooY2hhciAqKilwdHIgPSBQeVN0cmluZ19BU19TVFJJTkcoc3RyKTsKQEAgLTE0MTUsOCArMTQyMCw4IEBACiAgICAgfQogICAgIGlmIChQeVN0cmluZ19DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgdmFsdWUgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QodmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25fbW9kZV9lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbl9tb2RlX2Vycm9ycyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgaWYgKFB5SW50X0NoZWNrKHZhbHVlKSB8fCBQeUxvbmdfQ2hlY2sodmFsdWUpKSB7CkBAIC0xNDU3LDcgKzE0NjIsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIH0KICAgICAgICAgbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgICAgIGtlZXAgPSBQeUNPYmplY3RfRnJvbVZvaWRQdHIoYnVmZmVyLCBQeU1lbV9GcmVlKTsKKyAgICAgICAga2VlcCA9IENBUFNVTEVfTkVXKGJ1ZmZlciwgQ1RZUEVTX0NBUFNVTEVfV0NIQVJfVCk7CiAgICAgICAgIGlmICgha2VlcCkgewogICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIFB5TWVtX0ZyZWUoYnVmZmVyKTsKQEAgLTE1MDksOCArMTUxNCw4IEBACiAgICAgICAgIHZhbHVlID0gTlVMTDsKICAgICB9IGVsc2UgaWYgKFB5U3RyaW5nX0NoZWNrKHZhbHVlKSkgewogICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCh2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbl9tb2RlX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uX21vZGVfZXJyb3JzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgewpAQCAtMTY3MCw3ICsxNjc1LDcgQEAKICovCiAKIHN0cnVjdCBmaWVsZGRlc2MgKgotZ2V0ZW50cnkoY2hhciAqZm10KQorX2N0eXBlc19nZXRfZmllbGRkZXNjKGNoYXIgKmZtdCkKIHsKICAgICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKICAgICBzdHJ1Y3QgZmllbGRkZXNjICp0YWJsZSA9IGZvcm1hdHRhYmxlOwpAQCAtMTY3OSwxMSArMTY4NCwxMSBAQAogICAgICAgICBpbml0aWFsaXplZCA9IDE7CiAjaWZkZWYgQ1RZUEVTX1VOSUNPREUKICAgICAgICAgaWYgKHNpemVvZih3Y2hhcl90KSA9PSBzaXplb2Yoc2hvcnQpKQotICAgICAgICAgICAgZ2V0ZW50cnkoInUiKS0+cGZmaV90eXBlID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgICAgICAgICAgIF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygidSIpLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfc3Nob3J0OwogICAgICAgICBlbHNlIGlmIChzaXplb2Yod2NoYXJfdCkgPT0gc2l6ZW9mKGludCkpCi0gICAgICAgICAgICBnZXRlbnRyeSgidSIpLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfc2ludDsKKyAgICAgICAgICAgIF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygidSIpLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfc2ludDsKICAgICAgICAgZWxzZSBpZiAoc2l6ZW9mKHdjaGFyX3QpID09IHNpemVvZihsb25nKSkKLSAgICAgICAgICAgIGdldGVudHJ5KCJ1IiktPnBmZmlfdHlwZSA9ICZmZmlfdHlwZV9zbG9uZzsKKyAgICAgICAgICAgIF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygidSIpLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfc2xvbmc7CiAjZW5kaWYKICAgICB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jdHlwZXMuaCBiL01vZHVsZXMvX2N0eXBlcy9jdHlwZXMuaAppbmRleCAzN2Y0NzBkLi41OTY0MGNjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY3R5cGVzLmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2N0eXBlcy5oCkBAIC01OSw3ICs1OSw3IEBACiBhbmQgdGhpcyBvbmUgaXMgbm90IHVzZWQuCiAKIE1ha2luZyBDRGF0YU9iamVjdCBhIHZhcmlhYmxlIHNpemUgb2JqZWN0IHdvdWxkIGJlIGEgYmV0dGVyIHNvbHV0aW9uLCBidXQgbW9yZQotZGlmZmljdWx0IGluIHRoZSBwcmVzZW5jZSBvZiBDRnVuY1B0ck9iamVjdC4gIE1heWJlIGxhdGVyLgorZGlmZmljdWx0IGluIHRoZSBwcmVzZW5jZSBvZiBQeUNGdW5jUHRyT2JqZWN0LiAgTWF5YmUgbGF0ZXIuCiAqLwogdW5pb24gdmFsdWUgewogICAgICAgICAgICAgICAgIGNoYXIgY1sxNl07CkBAIC05NSw3ICs5NSw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9WQVJfSEVBRAotICAgIGZmaV9jbG9zdXJlICpwY2w7IC8qIHRoZSBDIGNhbGxhYmxlICovCisgICAgZmZpX2Nsb3N1cmUgKnBjbF93cml0ZTsgLyogdGhlIEMgY2FsbGFibGUsIHdyaXRlYWJsZSAqLworICAgIHZvaWQgKnBjbF9leGVjOyAgICAgICAgIC8qIHRoZSBDIGNhbGxhYmxlLCBleGVjdXRhYmxlICovCiAgICAgZmZpX2NpZiBjaWY7CiAgICAgaW50IGZsYWdzOwogICAgIFB5T2JqZWN0ICpjb252ZXJ0ZXJzOwpAQCAtMTA1LDggKzEwNiw4IEBACiAgICAgZmZpX3R5cGUgKmZmaV9yZXN0eXBlOwogICAgIGZmaV90eXBlICphdHlwZXNbMV07CiB9IENUaHVua09iamVjdDsKLWV4dGVybiBQeVR5cGVPYmplY3QgQ1RodW5rX1R5cGU7Ci0jZGVmaW5lIENUaHVua19DaGVja0V4YWN0KHYpICAgICAgICAoKHYpLT5vYl90eXBlID09ICZDVGh1bmtfVHlwZSkKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlDVGh1bmtfVHlwZTsKKyNkZWZpbmUgQ1RodW5rX0NoZWNrRXhhY3QodikgICAgICAgICgodiktPm9iX3R5cGUgPT0gJlB5Q1RodW5rX1R5cGUpCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICAvKiBGaXJzdCBwYXJ0IGlkZW50aWNhbCB0byB0YWdDRGF0YU9iamVjdCAqLwpAQCAtMTM3LDYxICsxMzgsNjEgQEAKICAgICBHVUlEICppaWQ7CiAjZW5kaWYKICAgICBQeU9iamVjdCAqcGFyYW1mbGFnczsKLX0gQ0Z1bmNQdHJPYmplY3Q7Cit9IFB5Q0Z1bmNQdHJPYmplY3Q7CiAKLWV4dGVybiBQeVR5cGVPYmplY3QgU3RnRGljdF9UeXBlOwotI2RlZmluZSBTdGdEaWN0X0NoZWNrRXhhY3QodikgICAgICAgKCh2KS0+b2JfdHlwZSA9PSAmU3RnRGljdF9UeXBlKQotI2RlZmluZSBTdGdEaWN0X0NoZWNrKHYpICAgICAgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZTdGdEaWN0X1R5cGUpCitleHRlcm4gUHlUeXBlT2JqZWN0IFB5Q1N0Z0RpY3RfVHlwZTsKKyNkZWZpbmUgUHlDU3RnRGljdF9DaGVja0V4YWN0KHYpICAgICAgICAgICAgKCh2KS0+b2JfdHlwZSA9PSAmUHlDU3RnRGljdF9UeXBlKQorI2RlZmluZSBQeUNTdGdEaWN0X0NoZWNrKHYpICAgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeUNTdGdEaWN0X1R5cGUpCiAKLWV4dGVybiBpbnQgU3RydWN0VW5pb25UeXBlX3VwZGF0ZV9zdGdkaWN0KFB5T2JqZWN0ICpmaWVsZHMsIFB5T2JqZWN0ICp0eXBlLCBpbnQgaXNTdHJ1Y3QpOworZXh0ZXJuIGludCBQeUNTdHJ1Y3RVbmlvblR5cGVfdXBkYXRlX3N0Z2RpY3QoUHlPYmplY3QgKmZpZWxkcywgUHlPYmplY3QgKnR5cGUsIGludCBpc1N0cnVjdCk7CiBleHRlcm4gaW50IFB5VHlwZV9zdGdpbmZvKFB5VHlwZU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCAqcHNpemUsIFB5X3NzaXplX3QgKnBhbGlnbiwgUHlfc3NpemVfdCAqcGxlbmd0aCk7CiBleHRlcm4gaW50IFB5T2JqZWN0X3N0Z2luZm8oUHlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgKnBzaXplLCBQeV9zc2l6ZV90ICpwYWxpZ24sIFB5X3NzaXplX3QgKnBsZW5ndGgpOwogCiAKIAotZXh0ZXJuIFB5VHlwZU9iamVjdCBDRGF0YV9UeXBlOwotI2RlZmluZSBDRGF0YU9iamVjdF9DaGVja0V4YWN0KHYpICAgICAgICgodiktPm9iX3R5cGUgPT0gJkNEYXRhX1R5cGUpCi0jZGVmaW5lIENEYXRhT2JqZWN0X0NoZWNrKHYpICAgICAgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZDRGF0YV9UeXBlKQorZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUNEYXRhX1R5cGU7CisjZGVmaW5lIENEYXRhT2JqZWN0X0NoZWNrRXhhY3QodikgICAgICAgKCh2KS0+b2JfdHlwZSA9PSAmUHlDRGF0YV9UeXBlKQorI2RlZmluZSBDRGF0YU9iamVjdF9DaGVjayh2KSAgICAgICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlDRGF0YV9UeXBlKQogCi1leHRlcm4gUHlUeXBlT2JqZWN0IFNpbXBsZVR5cGVfVHlwZTsKLSNkZWZpbmUgU2ltcGxlVHlwZU9iamVjdF9DaGVja0V4YWN0KHYpICAoKHYpLT5vYl90eXBlID09ICZTaW1wbGVUeXBlX1R5cGUpCi0jZGVmaW5lIFNpbXBsZVR5cGVPYmplY3RfQ2hlY2sodikgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZTaW1wbGVUeXBlX1R5cGUpCitleHRlcm4gUHlUeXBlT2JqZWN0IFB5Q1NpbXBsZVR5cGVfVHlwZTsKKyNkZWZpbmUgUHlDU2ltcGxlVHlwZU9iamVjdF9DaGVja0V4YWN0KHYpICAgICAgICgodiktPm9iX3R5cGUgPT0gJlB5Q1NpbXBsZVR5cGVfVHlwZSkKKyNkZWZpbmUgUHlDU2ltcGxlVHlwZU9iamVjdF9DaGVjayh2KSAgICBQeU9iamVjdF9UeXBlQ2hlY2sodiwgJlB5Q1NpbXBsZVR5cGVfVHlwZSkKIAotZXh0ZXJuIFB5VHlwZU9iamVjdCBDRmllbGRfVHlwZTsKLWV4dGVybiBzdHJ1Y3QgZmllbGRkZXNjICpnZXRlbnRyeShjaGFyICpmbXQpOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUNGaWVsZF9UeXBlOworZXh0ZXJuIHN0cnVjdCBmaWVsZGRlc2MgKl9jdHlwZXNfZ2V0X2ZpZWxkZGVzYyhjaGFyICpmbXQpOwogCiAKIGV4dGVybiBQeU9iamVjdCAqCi1DRmllbGRfRnJvbURlc2MoUHlPYmplY3QgKmRlc2MsIFB5X3NzaXplX3QgaW5kZXgsCitQeUNGaWVsZF9Gcm9tRGVzYyhQeU9iamVjdCAqZGVzYywgUHlfc3NpemVfdCBpbmRleCwKICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpwZmllbGRfc2l6ZSwgaW50IGJpdHNpemUsIGludCAqcGJpdG9mcywKICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpwc2l6ZSwgUHlfc3NpemVfdCAqcG9mZnNldCwgUHlfc3NpemVfdCAqcGFsaWduLAogICAgICAgICAgICAgICAgIGludCBwYWNrLCBpbnQgaXNfYmlnX2VuZGlhbik7CiAKLWV4dGVybiBQeU9iamVjdCAqQ0RhdGFfQXRBZGRyZXNzKFB5T2JqZWN0ICp0eXBlLCB2b2lkICpidWYpOwotZXh0ZXJuIFB5T2JqZWN0ICpDRGF0YV9Gcm9tQnl0ZXMoUHlPYmplY3QgKnR5cGUsIGNoYXIgKmRhdGEsIFB5X3NzaXplX3QgbGVuZ3RoKTsKK2V4dGVybiBQeU9iamVjdCAqUHlDRGF0YV9BdEFkZHJlc3MoUHlPYmplY3QgKnR5cGUsIHZvaWQgKmJ1Zik7CitleHRlcm4gUHlPYmplY3QgKlB5Q0RhdGFfRnJvbUJ5dGVzKFB5T2JqZWN0ICp0eXBlLCBjaGFyICpkYXRhLCBQeV9zc2l6ZV90IGxlbmd0aCk7CiAKLWV4dGVybiBQeVR5cGVPYmplY3QgQXJyYXlUeXBlX1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IEFycmF5X1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFBvaW50ZXJUeXBlX1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFBvaW50ZXJfVHlwZTsKLWV4dGVybiBQeVR5cGVPYmplY3QgQ0Z1bmNQdHJfVHlwZTsKLWV4dGVybiBQeVR5cGVPYmplY3QgQ0Z1bmNQdHJUeXBlX1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFN0cnVjdFR5cGVfVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlDQXJyYXlUeXBlX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5Q0FycmF5X1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5Q1BvaW50ZXJUeXBlX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5Q1BvaW50ZXJfVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlDRnVuY1B0cl9UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUNGdW5jUHRyVHlwZV9UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUNTdHJ1Y3RUeXBlX1R5cGU7CiAKLSNkZWZpbmUgQXJyYXlUeXBlT2JqZWN0X0NoZWNrKHYpICAgICAgICBQeU9iamVjdF9UeXBlQ2hlY2sodiwgJkFycmF5VHlwZV9UeXBlKQotI2RlZmluZSBBcnJheU9iamVjdF9DaGVjayh2KSAgICAgICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmQXJyYXlfVHlwZSkKLSNkZWZpbmUgUG9pbnRlck9iamVjdF9DaGVjayh2KSAgICAgICAgICBQeU9iamVjdF9UeXBlQ2hlY2sodiwgJlBvaW50ZXJfVHlwZSkKLSNkZWZpbmUgUG9pbnRlclR5cGVPYmplY3RfQ2hlY2sodikgICAgICBQeU9iamVjdF9UeXBlQ2hlY2sodiwgJlBvaW50ZXJUeXBlX1R5cGUpCi0jZGVmaW5lIENGdW5jUHRyT2JqZWN0X0NoZWNrKHYpICAgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZDRnVuY1B0cl9UeXBlKQotI2RlZmluZSBDRnVuY1B0clR5cGVPYmplY3RfQ2hlY2sodikgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmQ0Z1bmNQdHJUeXBlX1R5cGUpCi0jZGVmaW5lIFN0cnVjdFR5cGVPYmplY3RfQ2hlY2sodikgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZTdHJ1Y3RUeXBlX1R5cGUpCisjZGVmaW5lIFB5Q0FycmF5VHlwZU9iamVjdF9DaGVjayh2KSAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeUNBcnJheVR5cGVfVHlwZSkKKyNkZWZpbmUgQXJyYXlPYmplY3RfQ2hlY2sodikgICAgICAgICAgICBQeU9iamVjdF9UeXBlQ2hlY2sodiwgJlB5Q0FycmF5X1R5cGUpCisjZGVmaW5lIFBvaW50ZXJPYmplY3RfQ2hlY2sodikgICAgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeUNQb2ludGVyX1R5cGUpCisjZGVmaW5lIFB5Q1BvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKHYpICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeUNQb2ludGVyVHlwZV9UeXBlKQorI2RlZmluZSBQeUNGdW5jUHRyT2JqZWN0X0NoZWNrKHYpICAgICAgICAgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeUNGdW5jUHRyX1R5cGUpCisjZGVmaW5lIFB5Q0Z1bmNQdHJUeXBlT2JqZWN0X0NoZWNrKHYpICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeUNGdW5jUHRyVHlwZV9UeXBlKQorI2RlZmluZSBQeUNTdHJ1Y3RUeXBlT2JqZWN0X0NoZWNrKHYpICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlDU3RydWN0VHlwZV9UeXBlKQogCiBleHRlcm4gUHlPYmplY3QgKgotQ3JlYXRlQXJyYXlUeXBlKFB5T2JqZWN0ICppdGVtdHlwZSwgUHlfc3NpemVfdCBsZW5ndGgpOworUHlDQXJyYXlUeXBlX2Zyb21fY3R5cGUoUHlPYmplY3QgKml0ZW10eXBlLCBQeV9zc2l6ZV90IGxlbmd0aCk7CiAKLWV4dGVybiBQeU1ldGhvZERlZiBtb2R1bGVfbWV0aG9kc1tdOworZXh0ZXJuIFB5TWV0aG9kRGVmIF9jdHlwZXNfbW9kdWxlX21ldGhvZHNbXTsKIAotZXh0ZXJuIENUaHVua09iamVjdCAqQWxsb2NGdW5jdGlvbkNhbGxiYWNrKFB5T2JqZWN0ICpjYWxsYWJsZSwKK2V4dGVybiBDVGh1bmtPYmplY3QgKl9jdHlwZXNfYWxsb2NfY2FsbGJhY2soUHlPYmplY3QgKmNhbGxhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjb252ZXJ0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CkBAIC0yMjMsNyArMjI0LDcgQEAKICAgICBQeURpY3RPYmplY3QgZGljdDsgICAgICAgICAgLyogZmlyc3QgcGFydCBpZGVudGljYWwgdG8gUHlEaWN0T2JqZWN0ICovCiAvKiBUaGUgc2l6ZSBhbmQgYWxpZ24gZmllbGRzIGFyZSB1bm5lZWRlZCwgdGhleSBhcmUgaW4gZmZpX3R5cGUgYXMgd2VsbC4gIEFzCiAgICBhbiBleHBlcmltZW50IHNob3dzLCBpdCdzIHRyaXZpYWwgdG8gZ2V0IHJpZCBvZiB0aGVtLCB0aGUgb25seSB0aGluZyB0bwotICAgcmVtZW1iZXIgaXMgdGhhdCBpbiBBcnJheVR5cGVfbmV3IHRoZSBmZmlfdHlwZSBmaWVsZHMgbXVzdCBiZSBmaWxsZWQgaW4gLQorICAgcmVtZW1iZXIgaXMgdGhhdCBpbiBQeUNBcnJheVR5cGVfbmV3IHRoZSBmZmlfdHlwZSBmaWVsZHMgbXVzdCBiZSBmaWxsZWQgaW4gLQogICAgc28gZmFyIGl0IHdhcyB1bm5lZWRlZCBiZWNhdXNlIGxpYmZmaSBkb2Vzbid0IHN1cHBvcnQgYXJyYXlzIGF0IGFsbAogICAgKGJlY2F1c2UgdGhleSBhcmUgcGFzc2VkIGFzIHBvaW50ZXJzIHRvIGZ1bmN0aW9uIGNhbGxzIGFueXdheSkuICBCdXQgaXQncwogICAgdG9vIG11Y2ggcmlzayB0byBjaGFuZ2UgdGhhdCBub3csIGFuZCB0aGVyZSBhcmUgb3RoZXIgZmllbGRzIHdoaWNoIGRvZW4ndApAQCAtMjM4LDcgKzIzOSw3IEBACiAgICAgR0VURlVOQyBnZXRmdW5jOyAgICAgICAgICAgIC8qIE9ubHkgZm9yIHNpbXBsZSBvYmplY3RzICovCiAgICAgUEFSQU1GVU5DIHBhcmFtZnVuYzsKIAotICAgIC8qIEZvbGxvd2luZyBmaWVsZHMgb25seSB1c2VkIGJ5IENGdW5jUHRyVHlwZV9UeXBlIGluc3RhbmNlcyAqLworICAgIC8qIEZvbGxvd2luZyBmaWVsZHMgb25seSB1c2VkIGJ5IFB5Q0Z1bmNQdHJUeXBlX1R5cGUgaW5zdGFuY2VzICovCiAgICAgUHlPYmplY3QgKmFyZ3R5cGVzOyAgICAgICAgIC8qIHR1cGxlIG9mIENEYXRhT2JqZWN0cyAqLwogICAgIFB5T2JqZWN0ICpjb252ZXJ0ZXJzOyAgICAgICAvKiB0dXBsZShbdC5mcm9tX3BhcmFtIGZvciB0IGluIGFyZ3R5cGVzXSkgKi8KICAgICBQeU9iamVjdCAqcmVzdHlwZTsgICAgICAgICAgLyogQ0RhdGFPYmplY3Qgb3IgTlVMTCAqLwpAQCAtMjcyLDcgKzI3Myw3IEBACiAgY29uc3RydWN0aW9uIHRpbWUsIG9yIGFzc2lnbnMgdG8gaXQgbGF0ZXIsIHRwX3NldGF0dHJvIHNob3VsZCB1cGRhdGUgdGhlCiAgU3RnRGljdE9iamVjdCBmdW5jdGlvbiB0byBhIGdlbmVyaWMgb25lLgogCi0gQ3VycmVudGx5LCBDRnVuY1B0ciB0eXBlcyBoYXZlICdjb252ZXJ0ZXJzJyBhbmQgJ2NoZWNrZXInIGVudHJpZXMgaW4gdGhlaXIKKyBDdXJyZW50bHksIFB5Q0Z1bmNQdHIgdHlwZXMgaGF2ZSAnY29udmVydGVycycgYW5kICdjaGVja2VyJyBlbnRyaWVzIGluIHRoZWlyCiAgdHlwZSBkaWN0LiAgVGhleSBhcmUgb25seSB1c2VkIHRvIGNhY2hlIGF0dHJpYnV0ZXMgZnJvbSBvdGhlciBlbnRyaWVzLCB3aGloYwogIGlzIHdyb25nLgogCkBAIC0zMDAsMTEgKzMwMSwxMSBAQAogLyogTWF5IHJldHVybiBOVUxMLCBidXQgZG9lcyBub3Qgc2V0IGFuIGV4Y2VwdGlvbiEgKi8KIGV4dGVybiBTdGdEaWN0T2JqZWN0ICpQeU9iamVjdF9zdGdkaWN0KFB5T2JqZWN0ICpzZWxmKTsKIAotZXh0ZXJuIGludCBTdGdEaWN0X2Nsb25lKFN0Z0RpY3RPYmplY3QgKnNyYywgU3RnRGljdE9iamVjdCAqZHN0KTsKK2V4dGVybiBpbnQgUHlDU3RnRGljdF9jbG9uZShTdGdEaWN0T2JqZWN0ICpzcmMsIFN0Z0RpY3RPYmplY3QgKmRzdCk7CiAKIHR5cGVkZWYgaW50KCogUFBST0MpKHZvaWQpOwogCi1QeU9iamVjdCAqX0NhbGxQcm9jKFBQUk9DIHBQcm9jLAorUHlPYmplY3QgKl9jdHlwZXNfY2FsbHByb2MoUFBST0MgcFByb2MsCiAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmd1bWVudHMsCiAjaWZkZWYgTVNfV0lOMzIKICAgICAgICAgICAgICAgICAgICAgSVVua25vd24gKnBJVW5rLApAQCAtMzUyLDE3ICszNTMsMTcgQEAKIAogZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUNBcmdfVHlwZTsKICNkZWZpbmUgUHlDQXJnX0NoZWNrRXhhY3QodikgICAgICAgICgodiktPm9iX3R5cGUgPT0gJlB5Q0FyZ19UeXBlKQotZXh0ZXJuIFB5Q0FyZ09iamVjdCAqbmV3X0NBcmdPYmplY3Qodm9pZCk7CitleHRlcm4gUHlDQXJnT2JqZWN0ICpQeUNBcmdPYmplY3RfbmV3KHZvaWQpOwogCiBleHRlcm4gUHlPYmplY3QgKgotQ0RhdGFfZ2V0KFB5T2JqZWN0ICp0eXBlLCBHRVRGVU5DIGdldGZ1bmMsIFB5T2JqZWN0ICpzcmMsCitQeUNEYXRhX2dldChQeU9iamVjdCAqdHlwZSwgR0VURlVOQyBnZXRmdW5jLCBQeU9iamVjdCAqc3JjLAogICAgICAgICAgIFB5X3NzaXplX3QgaW5kZXgsIFB5X3NzaXplX3Qgc2l6ZSwgY2hhciAqcHRyKTsKIAogZXh0ZXJuIGludAotQ0RhdGFfc2V0KFB5T2JqZWN0ICpkc3QsIFB5T2JqZWN0ICp0eXBlLCBTRVRGVU5DIHNldGZ1bmMsIFB5T2JqZWN0ICp2YWx1ZSwKK1B5Q0RhdGFfc2V0KFB5T2JqZWN0ICpkc3QsIFB5T2JqZWN0ICp0eXBlLCBTRVRGVU5DIHNldGZ1bmMsIFB5T2JqZWN0ICp2YWx1ZSwKICAgICAgICAgICBQeV9zc2l6ZV90IGluZGV4LCBQeV9zc2l6ZV90IHNpemUsIGNoYXIgKnB0cik7CiAKLWV4dGVybiB2b2lkIEV4dGVuZF9FcnJvcl9JbmZvKFB5T2JqZWN0ICpleGNfY2xhc3MsIGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiB2b2lkIF9jdHlwZXNfZXh0ZW5kX2Vycm9yKFB5T2JqZWN0ICpleGNfY2xhc3MsIGNoYXIgKmZtdCwgLi4uKTsKIAogc3RydWN0IGJhc2VzcGVjIHsKICAgICBDRGF0YU9iamVjdCAqYmFzZTsKQEAgLTM3MiwxMyArMzczLDEzIEBACiAKIGV4dGVybiBjaGFyIGJhc2VzcGVjX3N0cmluZ1tdOwogCi1leHRlcm4gZmZpX3R5cGUgKkdldFR5cGUoUHlPYmplY3QgKm9iaik7CitleHRlcm4gZmZpX3R5cGUgKl9jdHlwZXNfZ2V0X2ZmaV90eXBlKFB5T2JqZWN0ICpvYmopOwogCiAvKiBleGNlcHRpb24gY2xhc3NlcyAqLwogZXh0ZXJuIFB5T2JqZWN0ICpQeUV4Y19BcmdFcnJvcjsKIAotZXh0ZXJuIGNoYXIgKmNvbnZlcnNpb25fbW9kZV9lbmNvZGluZzsKLWV4dGVybiBjaGFyICpjb252ZXJzaW9uX21vZGVfZXJyb3JzOworZXh0ZXJuIGNoYXIgKl9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZzsKK2V4dGVybiBjaGFyICpfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzOwogCiAvKiBQeXRob24gMi40IG1hY3Jvcywgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgaW4gUHl0aG9uIDIuMyAqLwogCkBAIC00MTUsMzYgKzQxNiw2NyBAQAogI2VuZGlmCiAKIAorI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNDAwMDApCiAjaWZkZWYgQ1RZUEVTX1VOSUNPREUKICMgIHVuZGVmIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIKLSMgIGRlZmluZSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyIE15X1B5VW5pY29kZV9Gcm9tV2lkZUNoYXIKKyMgIGRlZmluZSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXJfZml4ZWQKIAogIyAgdW5kZWYgUHlVbmljb2RlX0FzV2lkZUNoYXIKLSMgIGRlZmluZSBQeVVuaWNvZGVfQXNXaWRlQ2hhciBNeV9QeVVuaWNvZGVfQXNXaWRlQ2hhcgorIyAgZGVmaW5lIFB5VW5pY29kZV9Bc1dpZGVDaGFyIFB5VW5pY29kZV9Bc1dpZGVDaGFyX2ZpeGVkCiAKLWV4dGVybiBQeU9iamVjdCAqTXlfUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihjb25zdCB3Y2hhcl90ICosIFB5X3NzaXplX3QpOwotZXh0ZXJuIFB5X3NzaXplX3QgTXlfUHlVbmljb2RlX0FzV2lkZUNoYXIoUHlVbmljb2RlT2JqZWN0ICosIHdjaGFyX3QgKiwgUHlfc3NpemVfdCk7Ci0KK2V4dGVybiBQeU9iamVjdCAqUHlVbmljb2RlX0Zyb21XaWRlQ2hhcl9maXhlZChjb25zdCB3Y2hhcl90ICosIFB5X3NzaXplX3QpOworZXh0ZXJuIFB5X3NzaXplX3QgUHlVbmljb2RlX0FzV2lkZUNoYXJfZml4ZWQoUHlVbmljb2RlT2JqZWN0ICosIHdjaGFyX3QgKiwgUHlfc3NpemVfdCk7CisjZW5kaWYKICNlbmRpZgogCi1leHRlcm4gdm9pZCBGcmVlQ2xvc3VyZSh2b2lkICopOwotZXh0ZXJuIHZvaWQgKk1hbGxvY0Nsb3N1cmUodm9pZCk7CitleHRlcm4gdm9pZCBfY3R5cGVzX2FkZF90cmFjZWJhY2soY2hhciAqLCBjaGFyICosIGludCk7CiAKLWV4dGVybiB2b2lkIF9BZGRUcmFjZWJhY2soY2hhciAqLCBjaGFyICosIGludCk7CitleHRlcm4gUHlPYmplY3QgKlB5Q0RhdGFfRnJvbUJhc2VPYmooUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpiYXNlLCBQeV9zc2l6ZV90IGluZGV4LCBjaGFyICphZHIpOworZXh0ZXJuIGNoYXIgKl9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CiAKLWV4dGVybiBQeU9iamVjdCAqQ0RhdGFfRnJvbUJhc2VPYmooUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpiYXNlLCBQeV9zc2l6ZV90IGluZGV4LCBjaGFyICphZHIpOwotZXh0ZXJuIGNoYXIgKmFsbG9jX2Zvcm1hdF9zdHJpbmcoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpOworZXh0ZXJuIGludCBfY3R5cGVzX3NpbXBsZV9pbnN0YW5jZShQeU9iamVjdCAqb2JqKTsKIAotLyogWFhYIGJldHRlciBuYW1lIG5lZWRlZCEgKi8KLWV4dGVybiBpbnQgSXNTaW1wbGVTdWJUeXBlKFB5T2JqZWN0ICpvYmopOwotCi1leHRlcm4gUHlPYmplY3QgKl9wb2ludGVyX3R5cGVfY2FjaGU7Ci1QeU9iamVjdCAqZ2V0X2Vycm9yX29iamVjdChpbnQgKipwc3BhY2UpOworZXh0ZXJuIFB5T2JqZWN0ICpfY3R5cGVzX3B0cnR5cGVfY2FjaGU7CitQeU9iamVjdCAqX2N0eXBlc19nZXRfZXJyb2JqKGludCAqKnBzcGFjZSk7CiAKICNpZmRlZiBNU19XSU4zMgogZXh0ZXJuIFB5T2JqZWN0ICpDb21FcnJvcjsKICNlbmRpZgogCisjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMjA3MDBBNAorLyogVXNlIFB5Q2Fwc3VsZSBmb3IgMi43ICovCisKKyNkZWZpbmUgQ1RZUEVTX1VTSU5HX0NBUFNVTEUKKworI2RlZmluZSBDVFlQRVNfQ0FQU1VMRV9JTlNUQU5USUFURV9ERVNUUlVDVE9SKG5hbWUpIFwKK3N0YXRpYyB2b2lkIGNhcHN1bGVfZGVzdHJ1Y3Rvcl8gIyMgbmFtZShQeU9iamVjdCAqcHRyKSBcCit7IFwKKyAgICB2b2lkICpwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIocHRyLCBuYW1lKTsgXAorICAgIGlmIChwKSB7IFwKKyAgICAgICAgUHlNZW1fRnJlZShwKTsgXAorICAgIH0gXAorfSBcCisKKyNkZWZpbmUgQ0FQU1VMRV9ORVcocG9pbnRlciwgbmFtZSkgXAorICAgIChQeUNhcHN1bGVfTmV3KHBvaW50ZXIsIG5hbWUsIGNhcHN1bGVfZGVzdHJ1Y3Rvcl8gIyMgbmFtZSkpCisKKyNkZWZpbmUgQ0FQU1VMRV9ERVJFRkVSRU5DRShjYXBzdWxlLCBuYW1lKSBcCisgIChQeUNhcHN1bGVfR2V0UG9pbnRlcihjYXBzdWxlLCBuYW1lKSkKKworI2Vsc2UgLyogUFlfVkVSU0lPTl9IRVggPj0gMHgwMjA3MDBBNCAqLworLyogVXNlIENPYmplY3QgZm9yIDIuNiBhbmQgYmVmb3JlICovCisKKyNkZWZpbmUgQ1RZUEVTX0NBUFNVTEVfSU5TVEFOVElBVEVfREVTVFJVQ1RPUihuYW1lKQorCisjZGVmaW5lIENBUFNVTEVfTkVXKHBvaW50ZXIsIG5hbWUpIFwKKyAgICAoUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKHBvaW50ZXIsIFB5TWVtX0ZyZWUpKQorCisjZGVmaW5lIENBUFNVTEVfREVSRUZFUkVOQ0UoY2Fwc3VsZSwgbmFtZSkgXAorICAoUHlDT2JqZWN0X0FzVm9pZFB0cihjYXBzdWxlKSkKKworI2VuZGlmIC8qIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwNzAwQTQgKi8KKworCiAvKgogIExvY2FsIFZhcmlhYmxlczoKICBjb21waWxlLWNvbW1hbmQ6ICJweXRob24gc2V0dXAucHkgLXEgYnVpbGQgaW5zdGFsbCAtLWhvbWUgfiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWZhMGVkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS5kaWZmCkBAIC0wLDAgKzEsMTEzIEBACitkaWZmIC11ck4gbGliZmZpLm9yaWcvY29uZmlndXJlIGxpYmZmaS9jb25maWd1cmUKKy0tLSBsaWJmZmkub3JpZy9jb25maWd1cmUJMjAxMC0wMy0xOSAxODoyOTo1NC41ODg0OTk4NjIgKzAxMDAKKysrKyBsaWJmZmkvY29uZmlndXJlCTIwMTAtMDMtMTkgMTg6MzI6MDkuMTEzNDk5NDc5ICswMTAwCitAQCAtMTEyMjgsNiArMTEyMjgsOSBAQAorICAgaT84Ni0qLXNvbGFyaXMyLjFbMC05XSopCisgCVRBUkdFVD1YODZfNjQ7IFRBUkdFVERJUj14ODYKKyAJOzsKKysgIGkqODYtKi1udG8tcW54KikKKysgICAgICAgIFRBUkdFVD1YODY7IFRBUkdFVERJUj14ODYKKysgICAgICAgIDs7CisgICBpPzg2LSotKikKKyAJVEFSR0VUPVg4NjsgVEFSR0VURElSPXg4NgorIAk7OworQEAgLTExMjQ1LDEyICsxMTI0OCwxMiBAQAorIAk7OworIAorICAgbWlwcy1zZ2ktaXJpeDUuKiB8IG1pcHMtc2dpLWlyaXg2LiopCistCVRBUkdFVD1NSVBTOyBUQVJHRVRESVI9bWlwcworKwlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcworIAk7OworICAgbWlwcyotKi1saW51eCopCisgCSMgU3VwcG9ydCAxMjgtYml0IGxvbmcgZG91YmxlIGZvciBOZXdBQkkuCisgCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19taXBzNjQpJworLQlUQVJHRVQ9TUlQUzsgVEFSR0VURElSPW1pcHMKKysJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKKyAJOzsKKyAKKyAgIHBvd2VycGMqLSotbGludXgqIHwgcG93ZXJwYy0qLXN5c3YqKQorQEAgLTExMzA3LDcgKzExMzEwLDcgQEAKKyAgIGFzX2ZuX2Vycm9yICJcImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LlwiIiAiJExJTkVOTyIgNQorIGZpCisgCistIGlmIHRlc3QgeCRUQVJHRVQgPSB4TUlQUzsgdGhlbgorKyBpZiBleHByIHgkVEFSR0VUIDogJ3hNSVBTJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgTUlQU19UUlVFPQorICAgTUlQU19GQUxTRT0nIycKKyBlbHNlCitAQCAtMTI0MjIsNiArMTI0MjUsMTIgQEAKKyBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgaW5jbHVkZS9NYWtlZmlsZSBpbmNsdWRlL2ZmaS5oIE1ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSBtYW4vTWFrZWZpbGUgbGliZmZpLnBjIgorIAorIAorK2FjX2NvbmZpZ19saW5rcz0iJGFjX2NvbmZpZ19saW5rcyBpbmNsdWRlL2ZmaV9jb21tb24uaDppbmNsdWRlL2ZmaV9jb21tb24uaCIKKysKKysKKythY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgZmZpY29uZmlnLnB5IgorKworKworIGNhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorICMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorICMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorQEAgLTEzNTIxLDYgKzEzNTMwLDggQEAKKyAgICAgInRlc3RzdWl0ZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0c3VpdGUvTWFrZWZpbGUiIDs7CisgICAgICJtYW4vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbWFuL01ha2VmaWxlIiA7OworICAgICAibGliZmZpLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYmZmaS5wYyIgOzsKKysgICAgImluY2x1ZGUvZmZpX2NvbW1vbi5oIikgQ09ORklHX0xJTktTPSIkQ09ORklHX0xJTktTIGluY2x1ZGUvZmZpX2NvbW1vbi5oOmluY2x1ZGUvZmZpX2NvbW1vbi5oIiA7OworKyAgICAiZmZpY29uZmlnLnB5IikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGZmaWNvbmZpZy5weSIgOzsKKyAKKyAgICopIGFzX2ZuX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OworICAgZXNhYworZGlmZiAtdXJOIGxpYmZmaS5vcmlnL2NvbmZpZ3VyZS5hYyBsaWJmZmkvY29uZmlndXJlLmFjCistLS0gbGliZmZpLm9yaWcvY29uZmlndXJlLmFjCTIwMTAtMDMtMTkgMTg6Mjc6NDQuOTg4NDk4NTg1ICswMTAwCisrKysgbGliZmZpL2NvbmZpZ3VyZS5hYwkyMDEwLTAzLTE5IDE4OjMxOjI5LjI1MjUwNTE3OCArMDEwMAorQEAgLTEsNCArMSw3IEBACisgZG5sIFByb2Nlc3MgdGhpcyB3aXRoIGF1dG9jb25mIHRvIGNyZWF0ZSBjb25maWd1cmUKKysjCisrIyBmaWxlIGZyb20gbGliZmZpIC0gc2xpZ2h0bHkgcGF0Y2hlZCBmb3IgY3R5cGVzCisrIworIAorIEFDX1BSRVJFUSgyLjYzKQorIAorQEAgLTkxLDYgKzk0LDkgQEAKKyAgIGk/ODYtKi1zb2xhcmlzMi4xW1swLTldXSopCisgCVRBUkdFVD1YODZfNjQ7IFRBUkdFVERJUj14ODYKKyAJOzsKKysgIGkqODYtKi1udG8tcW54KikgCisrICAgICAgICBUQVJHRVQ9WDg2OyBUQVJHRVRESVI9eDg2CisrICAgICAgICA7OworICAgaT84Ni0qLSopCisgCVRBUkdFVD1YODY7IFRBUkdFVERJUj14ODYKKyAJOzsKK0BAIC0xMDgsMTIgKzExNCwxMiBAQAorIAk7OworIAorICAgbWlwcy1zZ2ktaXJpeDUuKiB8IG1pcHMtc2dpLWlyaXg2LiopCistCVRBUkdFVD1NSVBTOyBUQVJHRVRESVI9bWlwcworKwlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcworIAk7OworICAgbWlwcyotKi1saW51eCopCisgCSMgU3VwcG9ydCAxMjgtYml0IGxvbmcgZG91YmxlIGZvciBOZXdBQkkuCisgCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19taXBzNjQpJworLQlUQVJHRVQ9TUlQUzsgVEFSR0VURElSPW1pcHMKKysJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKKyAJOzsKKyAKKyAgIHBvd2VycGMqLSotbGludXgqIHwgcG93ZXJwYy0qLXN5c3YqKQorQEAgLTE3MCw3ICsxNzYsNyBAQAorICAgQUNfTVNHX0VSUk9SKFsibGliZmZpIGhhcyBub3QgYmVlbiBwb3J0ZWQgdG8gJGhvc3QuIl0pCisgZmkKKyAKKy1BTV9DT05ESVRJT05BTChNSVBTLCB0ZXN0IHgkVEFSR0VUID0geE1JUFMpCisrQU1fQ09ORElUSU9OQUwoTUlQUyxbZXhwciB4JFRBUkdFVCA6ICd4TUlQUycgPiAvZGV2L251bGxdKQorIEFNX0NPTkRJVElPTkFMKFNQQVJDLCB0ZXN0IHgkVEFSR0VUID0geFNQQVJDKQorIEFNX0NPTkRJVElPTkFMKFg4NiwgdGVzdCB4JFRBUkdFVCA9IHhYODYpCisgQU1fQ09ORElUSU9OQUwoWDg2X0ZSRUVCU0QsIHRlc3QgeCRUQVJHRVQgPSB4WDg2X0ZSRUVCU0QpCitAQCAtNDAxLDQgKzQwNyw4IEBACisgCisgQUNfQ09ORklHX0ZJTEVTKGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9mZmkuaCBNYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgbWFuL01ha2VmaWxlIGxpYmZmaS5wYykKKyAKKytBQ19DT05GSUdfTElOS1MoaW5jbHVkZS9mZmlfY29tbW9uLmg6aW5jbHVkZS9mZmlfY29tbW9uLmgpCisrCisrQUNfQ09ORklHX0ZJTEVTKGZmaWNvbmZpZy5weSkKKysKKyBBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiYTdlZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nCkBAIC0wLDAgKzEsNDE0NSBAQAorMjAxMC0wMy0xNCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYzogRml4IHR5cG8gaW4gY29tbWVudC4KKwkqIHNyYy94ODYvZmZpLmM6IFVzZSAvKiAuLi4gKi8gY29tbWVudCBzdHlsZS4KKworMjAxMC0wMS0wNyAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJmZmkvNDA3MDEKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggW19fYWxwaGFfXyAmJiBfX29zZl9fXSAoUFJJZExMLAorCVBSSXVMTCwgUFJJZDY0LCBQUkl1NjQsIFBSSXVQVFIpOiBEZWZpbmUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBBZGQgLVduby1mb3JtYXQgb24KKwlhbHBoYSotZGVjLW9zZiouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggKGFsbG9jYXRlX21tYXApOiBDYXN0CisJTUFQX0ZBSUxFRCB0byBjaGFyICouCisKKzIwMTAtMDEtMDYgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMvbWlwcy9uMzIuUzogVXNlIC5hYmljYWxscyBhbmQgLmVoX2ZyYW1lIHdpdGggX19HTlVDX18uCisKKzIwMDktMTItMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgbGliZmZpIDMuMC45LgorCisyMDA5LTEyLTI3ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKworCSogY29uZmlndXJlLmFjIChIQVZFX0xPTkdfRE9VQkxFKTogRGVmaW5lIGZvciBtaXBzIHdoZW4KKwlhcHByb3ByaWF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwOS0xMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBNYXJrIGFzIHhmYWlsIGZvcgorCWF2cjMyKi0qLSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jOiBEaXR0by4KKworMjAwOS0xMi0yNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQ29uZGl0aW9uYWxseSBpbmNsdWRlIHN0ZGludC5oCisJYW5kIGludHR5cGVzLmguCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogRGl0dG8uCisKKzIwMDktMTItMjYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIGFtZDY0LSotb3BlbmJzZCouCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IExpbmsKKwlvcGVuYnNkIHByb2dyYW1zIHdpdGggLWxwdGhyZWFkLgorCisyMDA5LTEyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYzogUmVtb3ZlIHhmYWlsIGZvcgorCW1pcHMqLSotKiBhbmQgYXJtKi0qLSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBSZW1vdmUgeGZhaWwgZm9yIGFybSotKi0qLgorCisyMDA5LTEyLTMxICBLYXkgVGlldHogIDxrdGlldHo3MEBnb29nbGVtYWlsLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCwKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChQUklkTEwsIFBSdUxMKTogRml4CisJZGVmaW5pdGlvbnMuCisKKzIwMDktMTItMzEgIENhcmxvIEJyYW1pbmkgIDxjYXJsby5icmFtaXhAbGliZXJvLml0PgorCisJKiBjb25maWd1cmUuYWMgKEFNX0xUTERGTEFHUyk6IERlZmluZSBmb3Igd2luZG93cyBob3N0cy4KKwkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfTERGTEFHUyk6IEFkZCBBTV9MVExERkxBR1MuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwOS0xMi0zMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisJICAgIEJsYWtlIENoYWZmaW4uCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jOiBOZXcgdGVzdCBjYXNlIGZyb20gQmxha2UKKwlDaGFmZmluIEAgQXBwbGUuCisKKzIwMDktMTItMjggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogQ29weSBhYmkgYW5kIG5hcmdzIHRvCisJbG9jYWwgdmFyaWFibGVzLgorCShhaXhfYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDYWxsIGl0LgorCisyMDA5LTEyLTI2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IERlZmluZSBGRklfTU1BUF9FWEVDX1dSSVQgZm9yIHRoZSBnaXZlbiB0YXJnZXRzLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCSogc3JjL2Nsb3N1cmVzLmM6IFJlbW92ZSB0aGUgRkZJX01NQVBfRVhFQ19XUklUIGRlZmluaXRpb24gZm9yCisJU29sYXJpcy94ODYuCisKKzIwMDktMTItMjYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGxpbnV4LW02OGsub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQWR2YW5jZSBpbnRhcmdfY291bnQKKwl3aGVuIGEgZmxvYXQgYXJndW1lbnRzIGlzIHBhc3NlZCBpbiBtZW1vcnkuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTWFyayBnZW5lcmFsIHJlZ2lzdGVycyBhcyB1c2VkIHVwIHdoZW4KKwlhIDY0Yml0IG9yIHNvZnQtZmxvYXQgbG9uZyBkb3VibGUgYXJndW1lbnQgaXMgcGFzc2VkIGluIG1lbW9yeS4KKworMjAwOS0xMi0yNSAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwkqIG1hbi9mZmlfY2FsbC4zOiBGaXggI2luY2x1ZGUgaW4gZXhhbXBsZXMuCisJKiBkb2MvbGliZmZpLnRleGk6IEFkZCBkaXJjYXRlZ29yeS4KKworMjAwOS0xMi0yNSAgRnJhbmsgRXZlcmRpaiA8Zi5wLnguZXZlcmRpakB0dWRlbGZ0Lm5sPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBQbGFjZWQgJ19fR05VQ19fJyBpZmRlZiBhcm91bmQKKwknX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpJyBpbiBmZmlfY2xvc3VyZSwgZml4ZXMgY29tcGlsZSBmb3IKKwlJUklYIE1JUFNQcm8gYzk5LgorCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IEFkZGVkICdfX3NnaScgZGVmaW5lIHRvIG5vbgorCSdfX2F0dHJpYnV0ZV9fKChfX21vZGVfXygpKSknIGludGVnZXIgdHlwZWRlZnMuCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX2NhbGwsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyLAorCWZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogQWRkZWQgJ2RlZmluZWQoX01JUFNFQiknIHRvIEJFIGNoZWNrLgorCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMiwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBBZGRlZAorCUZGSV9MT05HRE9VQkxFIHN1cHBvcnQgYW5kIGFsaWdubWVudChOMzIgb25seSkuCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogQ29ycmVjdGVkICcjaW5jbHVkZSA8c2dpZGVmcy5oPicgZm9yIElSSVggYW5kCisJZml4ZWQgbm9uICdfX2F0dHJpYnV0ZV9fKChfX21vZGVfXygpKSknIGludGVnZXIgdHlwZWRlZnMuCisJKiBzcmMvbWlwcy9uMzIuUzogUHV0ICcjaWZkZWYgbGludXgnIGFyb3VuZCAnLmFiaWNhbGxzJyBhbmQgJy5laF9mcmFtZScKKwlzaW5jZSB0aGV5IGFyZSBMaW51eC9HTlUgQXNzZW1ibGVyIHNwZWNpZmljLgorCisyMDA5LTEyLTI1ICBCcmFkbGV5IFNtaXRoICA8YnJhZEBicmFkLXNtaXRoLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWMsIE1ha2VmaWxlLmFtLCBzcmMvYXZyMzIvZmZpLmMsCisJc3JjL2F2cjMyL2ZmaXRhcmdldC5oLAorCXNyYy9hdnIzMi9zeXN2LlM6IEFkZCBBVlIzMiBwb3J0LgorCSogY29uZmlndXJlLCBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwOS0xMi0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBNYWtlIGk/ODYgYnVpbGQgb24gRnJlZUJTRCBhbmQgT3BlbkJTRC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOS0xMi0xNSAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogRGVmaW5lIFBSSXVQVFIgb24gUEEgSFAtVVguCisKKzIwMDktMTItMTMgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisKKwkqIHNyYy9wYS9mZmkuYyAoZmZpX2Nsb3N1cmVfaW5uZXJfcGEzMik6IEhhbmRsZSBGRklfVFlQRV9MT05HRE9VQkxFCisJdHlwZSBvbiBIUC1VWC4KKworMjAwOS0xMi0xMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OSk6IFByb3Blcmx5IGFsaWduICdsb25nCisJZG91YmxlJyBhcmd1bWVudHMuCisKKzIwMDktMTItMTEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IERlZmluZSBQUkl1UFRSIG9uIFNvbGFyaXMgPCAxMC4KKworMjAwOS0xMi0xMCAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJmZmkvNDA3MDAKKwkqIHNyYy9jbG9zdXJlcy5jIFtYODZfNjQgJiYgX19zdW5fXyAmJiBfX3N2cjRfX10KKwkoRkZJX01NQVBfRVhFQ19XUklUKTogRGVmaW5lLgorCisyMDA5LTEyLTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBjYXZpdW1uZXR3b3Jrcy5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogUmVtb3ZlIHhmYWlsIGZvciBtaXBzKi0qLSoKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYzogU2FtZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jOiBTYW1lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmM6IFNhbWUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IFNhbWUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBTYW1lLgorCisyMDA5LTEyLTA3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMgKGxpYmZmaV9jbG9zdXJlX0FTTSk6IEZpeCB0YWJsZWp1bXAKKwl0eXBvLgorCisyMDA5LTEyLTA1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBVcGRhdGUgQUlYMzIgY29kZSB0byBiZSBjb25zaXN0ZW50IHdpdGggQUlYNjQKKwljb2RlLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogU2FtZS4KKworMjAwOS0xMi0wNSAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogbWFuL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA5LTEyLTA0ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFJlb3JnYW5pemUgNjQtYml0IGNvZGUgdG8gbWF0Y2gKKwlsaW51eDY0X2Nsb3N1cmUuUy4KKworMjAwOS0xMi0wNCAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KKworCVBSIGxpYmZmaS80MTkwOAorCSogc3JjL3g4Ni9mZmk2NC5jIChjbGFzc2lmeV9hcmd1bWVudCk6IFVwZGF0ZSBmcm9tCisJZ2NjL2NvbmZpZy9pMzg2L2kzODYuYy4KKwkoZmZpX2Nsb3N1cmVfdW5peDY0X2lubmVyKTogRG8gbm90IHVzZSB0aGUgYWRkcmVzcyBvZiB0d28gY29uc2VjdXRpdmUKKwlTU0UgcmVnaXN0ZXJzIGRpcmVjdGx5LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jIChtYWluKTogUmVtb3ZlIHhmYWlsCisJZm9yIHg4Nl82NCBsaW51eCB0YXJnZXRzLgorCisyMDA5LTEyLTA0ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IEluY3JlbWVudAorCXBmciBmb3IgbG9uZyBkb3VibGUgc3BsaXQgYmV0d2VlbiBmcHIxMyBhbmQgc3RhY2suCisKKzIwMDktMTItMDMgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogSW5jcmVtZW50IG5leHRfYXJnIGFuZAorCWZwYXJnX2NvdW50IHR3aWNlIGZvciBsb25nIGRvdWJsZS4KKworMjAwOS0xMi0wMyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJUFIgbGliZmZpLzQyMjQzCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgZXh0cmEgcGFyZW50aGVzZXMuCisKKzIwMDktMTItMDMgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jIChtYWluKTogRml4IGZvcm1hdCBzdHJpbmcuCisJUmVtb3ZlIHhmYWlscyBmb3IgeDg2IGxpbnV4IHRhcmdldHMuCisKKzIwMDktMTItMDIgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogRml4IHR5cG8gaW4gSU5UNjQKKwljYXNlLgorCisyMDA5LTEyLTAxICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2FpeC5TIChmZmlfY2FsbF9BSVgpOiBDb252ZXJ0IHRvIG1vcmUgc3RhbmRhcmQKKwlyZWdpc3RlciB1c2FnZS4gIENhbGwgZmZpX3ByZXBfYXJncyBkaXJlY3RseS4gIEFkZCBsb25nIGRvdWJsZQorCXJldHVybiB2YWx1ZSBzdXBwb3J0LgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogRG91YmxlIGFyZyBpbmNyZW1lbnQKKwlhcHBsaWVzIHRvIEZGSV9UWVBFX0RPVUJMRS4gIENvcnJlY3QgZnByX2Jhc2UgaW5jcmVtZW50IHR5cG8uCisJU2VwYXJhdGUgRkZJX1RZUEVfU0lOVDMyIGFuZCBGRklfVFlQRV9VSU5UMzIgY2FzZXMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogT25seSAxNiBieXRlIHN0YWNrIGFsaWdubWVudCBpbiA2NCBiaXQKKwltb2RlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogUmVtb3ZlIG5mIGFuZCBuZyBjb3VudGVycy4gIE1vdmUgdGVtcAorCWludG8gY2FzZS4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IE1haW50YWluIDE2IGJ5dGUgc3RhY2sgYWxpZ25tZW50LgorCUFsbG9jYXRlIHJlc3VsdCBhcmVhIGJldHdlZW4gcGFyYW1zIGFuZCBGUFJzLgorCisyMDA5LTExLTMwICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwlQUiB0YXJnZXQvMzU0ODQKKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChQT1dFUlBDNjQpOiBEZWZpbmUgZm9yIFBQQzY0IExpbnV4IGFuZAorCUFJWDY0LgorCSogc3JjL3Bvd2VycGMvYWl4LlM6IEltcGxlbWVudCBBSVg2NCB2ZXJzaW9uLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogSW1wbGVtZW50IEFJWDY0IHZlcnNpb24uCisJKGZmaV9jbG9zdXJlX0FTTSk6IFVzZSBleHRzYiwgbGhhIGFuZCBkaXNwbGFtZW50IGFkZHJlc3Nlcy4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEltcGxlbWVudCBBSVg2NAorCXN1cHBvcnQuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogU2FtZS4KKwkoZmZpX2NhbGwpOiBTYW1lLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogU2FtZS4KKworMjAwOS0xMS0wMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCVBSIGxpYmZmaS80MTkwOAorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmM6IE5ldyB0ZXN0LgorCisyMDA5LTA5LTI4ICBLYWkgVGlldHogIDxrYWkudGlldHpAb25ldmlzaW9uLmNvbT4KKworCSogc3JjL3g4Ni93aW42NC5TIChfZmZpX2NhbGxfd2luNjQgc3RhY2spOiBSZW1vdmUgZm9yIGdudQorCWFzc2VtYmx5IHZlcnNpb24gdXNlIG9mIF9fX2Noa3N0ay4KKworMjAwOS0wOS0yMyAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwlQUiBsaWJmZmkvNDAyNDIsIFBSIGxpYmZmaS80MTQ0MworCSogc3JjL2FybS9zeXN2LlMgKF9fQVJNX0FSQ0hfXyk6IERlZmluZSBmb3IgcHJvY2Vzc29ycworCV9fQVJNX0FSQ0hfNlQyX18sIF9fQVJNX0FSQ0hfNk1fXywgX19BUk1fQVJDSF83X18sCisJX19BUk1fQVJDSF83QV9fLCBfX0FSTV9BUkNIXzdSX18sIF9fQVJNX0FSQ0hfN01fXy4KKwlDaGFuZ2UgdGhlIGNvbmRpdGlvbmFscyB0byBfX1NPRlRGUF9fIHx8IF9fQVJNX0VBQklfXworCWZvciAtbWZsb2F0LWFiaT1zb2Z0ZnAgdG8gd29yay4KKworMjAwOS0wOS0xNyAgTG9yZW4gSi4gUml0dGxlICA8bGpyaXR0bGVAYWNtLm9yZz4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MyAoc3RyaWtlcyBhZ2FpbikKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIFg4Nl9GUkVFQlNEIHRvCisJZW5hYmxlIHByb3BlciBleHRlbnNpb24gb24gY2hhciBhbmQgc2hvcnQuCisKKzIwMDktMDktMTUgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGNhdml1bW5ldHdvcmtzLmNvbT4KKworCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9yYXdfdG9fcnZhbHVlKTogUmVtb3ZlIHNwZWNpYWwKKwloYW5kbGluZyBmb3IgRkZJX1RZUEVfUE9JTlRFUi4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChGRklfVFlQRV9TVFJVQ1RfRF9TT0ZULAorCUZGSV9UWVBFX1NUUlVDVF9GX1NPRlQsIEZGSV9UWVBFX1NUUlVDVF9ERF9TT0ZULAorCUZGSV9UWVBFX1NUUlVDVF9GRl9TT0ZULCBGRklfVFlQRV9TVFJVQ1RfRkRfU09GVCwKKwlGRklfVFlQRV9TVFJVQ1RfREZfU09GVCwgRkZJX1RZUEVfU1RSVUNUX1NPRlQpOiBOZXcgZGVmaW5lcy4KKwkoRkZJX04zMl9TT0ZUX0ZMT0FULCBGRklfTjY0X1NPRlRfRkxPQVQpOiBOZXcgZmZpX2FiaSBlbnVtZXJhdGlvbnMuCisJKGVudW0gZmZpX2FiaSk6IFNldCBGRklfREVGQVVMVF9BQkkgZm9yIHNvZnQtZmxvYXQuCisJKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2NhbGxfTjMyKTogQWRkIGhhbmRsaW5nIGZvciBzb2Z0LWZsb2F0CisJc3RydWN0dXJlIGFuZCBwb2ludGVyIHJldHVybnMuCisJKGZmaV9jbG9zdXJlX04zMik6IEFkZCBoYW5kbGluZyBmb3IgcG9pbnRlciByZXR1cm5zLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGNhbGNfbjMyX3N0cnVjdF9mbGFncywKKwljYWxjX24zMl9yZXR1cm5fc3RydWN0X2ZsYWdzKTogSGFuZGxlIHNvZnQtZmxvYXQuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogIEhhbmRsZSBzb2Z0LWZsb2F0LCBmaXggcG9pbnRlciBoYW5kbGluZy4KKwkoZmZpX2NhbGxfTjMyKTogRGVjbGFyZSBwcm9wZXIgYXJndW1lbnQgdHlwZXMuCisJKGZmaV9jYWxsLCBjb3B5X3N0cnVjdF9OMzIsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogSGFuZGxlCisJc29mdC1mbG9hdC4KKworMjAwOS0wOC0yNCAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogY29uZmlndXJlLmFjIChBQ19QUkVSRVEpOiBCdW1wIHRvIDIuNjQuCisKKzIwMDktMDgtMjIgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIE1ha2VmaWxlLmFtIChpbnN0YWxsLWh0bWwsIGluc3RhbGwtcGRmKTogUmVtb3ZlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIG1hbi9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwOS0wNy0zMCAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogY29uZmlndXJlLmFjIChfQUNfQVJHX1ZBUl9QUkVDSU9VUyk6IFVzZSBtNF9yZW5hbWVfZm9yY2UuCisKKzIwMDktMDctMjQgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorCisJUFIgbGliZmZpLzQwODA3CisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFsc28gdXNlIHNpZ24vemVyby1leHRlbmRpbmcKKwlyZXR1cm4gdHlwZXMgZm9yIFg4Nl9XSU4zMi4KKwkqIHNyYy94ODYvd2luMzIuUyAoX2ZmaV9jYWxsX1NZU1YpOiBIYW5kbGUgb21pdHRlZCByZXR1cm4gdHlwZXMuCisJKF9mZmlfY2FsbF9TVERDQUxMLCBfZmZpX2Nsb3N1cmVfU1lTViwgX2ZmaV9jbG9zdXJlX3Jhd19TWVNWLAorCV9mZmlfY2xvc3VyZV9TVERDQUxMKTogTGlrZXdpc2UuCisKKwkqIHNyYy9jbG9zdXJlcy5jIChpc19zZWxpbnV4X2VuYWJsZWQpOiBEZWZpbmUgdG8gY29uc3QgMCBmb3IgQ3lnd2luLgorCShkbG1tYXAsIGRsbXVubWFwKTogQWxzbyB1c2UgdGhlc2UgZnVuY3Rpb25zIG9uIEN5Z3dpbi4KKworMjAwOS0wNy0xMSAgUmljaGFyZCBTYW5kaWZvcmQgIDxyZHNhbmRpZm9yZEBnb29nbGVtYWlsLmNvbT4KKworCVBSIHRlc3RzdWl0ZS80MDY5OQorCVBSIHRlc3RzdWl0ZS80MDcwNworCVBSIHRlc3RzdWl0ZS80MDcwOQorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBSZXZlcnQgMjAwOS0wNy0wMiwgMjAwOS0wNy0wMSBhbmQKKwkyMDA5LTA2LTMwIGNvbW1pdHMuCisKKzIwMDktMDctMDEgIFJpY2hhcmQgU2FuZGlmb3JkICA8ci5zYW5kaWZvcmRAdWsuaWJtLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktaW5pdCk6IFNldCBsZF9saWJyYXJ5X3BhdGgKKwl0byAiIiBiZWZvcmUgYWRkaW5nIHBhdGhzLiAgKFRoaXMgcmVpbnN0YXRlcyBhbiBhc3NpZ25tZW50IHRoYXQKKwl3YXMgcmVtb3ZlZCBieSBteSAyMDA5LTA2LTMwIGNvbW1pdCwgYnV0IGNoYW5nZXMgdGhlIGluaXRpYWwKKwl2YWx1ZSBmcm9tICIuIiB0byAiIi4pCisKKzIwMDktMDctMDEgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCVBSIHRlc3RzdWl0ZS80MDYwMQorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktaW5pdCk6IFByb3Blcmx5IHNldAorCWdjY2Rpci4gIEFkanVzdCBsZF9saWJyYXJ5X3BhdGggZm9yIGdjYyBvbmx5IGlmIGdjY2RpciBpc24ndAorCWVtcHR5LgorCisyMDA5LTA2LTMwICBSaWNoYXJkIFNhbmRpZm9yZCAgPHIuc2FuZGlmb3JkQHVrLmlibS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBEb24ndCBhZGQgIi4iCisJdG8gbGRfbGlicmFyeV9wYXRoLiAgVXNlIGFkZF9wYXRoLiAgQWRkIGp1c3QgZmluZF9saWJnY2NfcworCXRvIGxkX2xpYnJhcnlfcGF0aCwgbm90IGV2ZXJ5IGxpYmdjYyBtdWx0aWxpYiBkaXJlY3RvcnkuCisKKzIwMDktMDYtMTYgIFdpbSBMZXdpcyAgPHdpbWxAaGhoaC5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBdm9pZCBjbG9iYmVyaW5nIGNyMyBhbmQgY3I0LCB3aGljaCBhcmUKKwlzdXBwb3NlZCB0byBiZSBjYWxsZWUtc2F2ZWQuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlMgKHNtYWxsX3N0cnVjdF9yZXR1cm5fdmFsdWUpOiBGaXggb3ZlcnJ1biBvZgorCXJldHVybiBidWZmZXIgZm9yIG9kZC1zaXplIHN0cnVjdHMuCisKKzIwMDktMDYtMTYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwlQUiBsaWJmZmkvNDA0NDQKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpX3RhcmdldF9jb21waWxlKTogQWRkCisJYWxsb3dfc3RhY2tfZXhlY3V0ZSBmb3IgRGFyd2luLgorCisyMDA5LTA2LTE2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjIChUQVJHRVRESVIpOiBBZGQgbWlzc2luZyBibGFuayBsaW5lcy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKKwlzcGVjaWZpZXJzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCwKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChQUklkTEwsIFBSSXVMTCk6IERlZmluZS4KKworMjAwOS0wNi0xNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogeGZhaWwgZXZlcnl3aGVyZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBMaWtld2lzZS4KKworMjAwOS0wNi0xMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgaW5mb19URVhJTkZPUy4KKworMjAwOS0wNi0xMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIENoYW5nZUxvZy5saWJmZmk6IHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKKwlzcGVjaWZpZXJzLgorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBpbmNsdWRlIHN0ZGludC5oLgorCisyMDA5LTA2LTExICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIE1ha2VmaWxlLmFtLAorCWNvbmZpZ3VyZS5hYywKKwlpbmNsdWRlL2ZmaS5oLmluLAorCWluY2x1ZGUvZmZpX2NvbW1vbi5oLAorCXNyYy9jbG9zdXJlcy5jLAorCXNyYy9kbG1hbGxvYy5jLAorCXNyYy94ODYvZmZpLmMsCisJc3JjL3g4Ni9mZml0YXJnZXQuaCwKKwlzcmMveDg2L3dpbjY0LlMgKG5ldyksCisJUkVBRE1FOiBBZGRlZCB3aW42NCBzdXBwb3J0IChtaW5ndyBvciBNU1ZDKQorCSogTWFrZWZpbGUuaW4sCisJaW5jbHVkZS9NYWtlZmlsZS5pbiwKKwltYW4vTWFrZWZpbGUuaW4sCisJdGVzdHN1aXRlL01ha2VmaWxlLmluLAorCWNvbmZpZ3VyZSwKKwlhY2xvY2FsLm00OiBSZWdlbmVyYXRlZAorCSogbHRjZi1jLnNoOiBwcm9wZXJseSBlc2NhcGUgY3lnd2luL3czMiBwYXRoCisJKiBtYW4vZmZpX2NhbGwuMzogQ2xhcmlmeSBzaXplIHJlcXVpcmVtZW50cyBmb3IgcmV0dXJuIHZhbHVlLgorCSogc3JjL3g4Ni9mZmk2NC5jOiBGaXggZmlsZW5hbWUgaW4gY29tbWVudC4KKwkqIHNyYy94ODYvd2luMzIuUzogUmVtb3ZlIHVudXNlZCBleHRlcm4uCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IHVzZSBmZmlfY2xvc3VyZV9hbGxvYyBpbnN0ZWFkCisJb2YgY2hlY2tpbmcgZm9yIE1NQVAuICBVc2UgaW50cHRyX3QgaW5zdGVhZCBvZiBsb25nIGNhc3RzLgorCisyMDA5LTA2LTExICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IEFkZCB4ZmFpbCBzaCotKi1saW51eC0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IEFkZCB4ZmFpbCBzaCotKi0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBMaWtld2lzZS4KKworMjAwOS0wNi0wOSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZnJlZWJzZC5TOiBBZGQgbWlzc2luZyBmaWxlLgorCisyMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCUltcG9ydCBmcm9tIGxpYmZmaSAzLjAuODoKKworCSogZG9jL2xpYmZmaS50ZXhpOiBOZXcgZmlsZS4KKwkqIGRvYy9saWJmZmkuaW5mbzogTGlrZXdpc2UuCisJKiBkb2Mvc3RhbXAtdnRpOiBMaWtld2lzZS4KKwkqIG1hbi9NYWtlZmlsZS5hbTogTmV3IGZpbGUuCisJKiBtYW4vZmZpX2NhbGwuMzogTmV3IGZpbGUuCisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHNyYy94ODYvZGFyd2luNjQuUywKKwlzcmMvZGxtYWxsb2MuYy4KKwkobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIFg4Nl9GUkVFQlNELgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuOC4KKwlwYXJpc2MqLSotbGludXgqOiBBZGQuCisJaTM4Ni0qLWZyZWVic2QqIHwgaTM4Ni0qLW9wZW5ic2QqOiBBZGQuCisJcG93ZXJwYy0qLWJlb3MqOiBBZGQuCisJQU1fQ09ORElUSU9OQUwgWDg2X0ZSRUVCU0Q6IEFkZC4KKwlBQ19DT05GSUdfRklMRVM6IEFkZCBtYW4vTWFrZWZpbGUuCisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKEZGSV9GTik6IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorCisyMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogUkVBRE1FOiBJbXBvcnQgZnJvbSBsaWJmZmkgMy4wLjguCisKKzIwMDktMDYtMDggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQWRkIHhmYWlscy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBBZGQgeGZhaWxzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jOiBBZGQgeGZhaWwgeDg2XzY0LSotbGludXgtKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogQWRkIHhmYWlscy4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogQWRkIF9fVU5VU0VEX18gdG8gYXJncy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmM6ICBMaWtld2lzZS4KKworMjAwOC0xMi0yNiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IG1hcmsgZXhwZWN0ZWQKKwlmYWlsdXJlcyBvbiB4ODZfNjQgY3lnd2luL21pbmd3LgorCisyMDA4LTEyLTIyICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmM6IHVzZSBwb3J0YWJsZSBjYXN0IGZyb20KKwlwb2ludGVyIHRvIGludGVnZXIgKGludHB0cl90KS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jOiBkaXNhYmxlIGZvciB3aW42NC4KKworMjAwOC0wNy0yNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBDbGVhbiB1cCBmYWlsdXJlcyBmcm9tCisJY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMDgtMDMtMDQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCSAgICBCbGFrZSBDaGFmZmluCisJICAgIGhvc0B0YW1hbmVnaS5vcmcKKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBOZXcgdGVzdHMgZnJvbSBBcHBsZS4KKworMjAwOS0wNi0wNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmgsIHNyYy94ODYvZmZpLmM6IE1lcmdlIHN0ZGNhbGwgY2hhbmdlcyBmcm9tCisJbGliZmZpLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZml0YXJnZXQuaCwgc3JjL3g4Ni93aW4zMi5TLCBzcmMveDg2L2ZmaS5jOiBCYWNrIG91dAorCXN0ZGNhbGwgY2hhbmdlcy4KKworMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisJICAgIFRob21hcyBIZWxsZXIgIDx0aGVsbGVyQGN0eXBlcy5vcmc+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpOiBDaGFuZ2UgQysrIGNvbW1lbnQgdG8gQworCWNvbW1lbnQuCisKKzIwMDgtMDItMDMgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogc3JjL3g4Ni9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMKTogQ2FsY3VsYXRlIGp1bXAgcmV0dXJuCisJICBvZmZzZXQgYmFzZWQgb24gY29kZSBwb2ludGVyLCBub3QgZGF0YSBwb2ludGVyLgorCisyMDA4LTAxLTMxICBUaW1vdGh5IFdhbGwgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jOiBBZGQgdGVzdCBmb3Igc3RkY2FsbAorCWNsb3N1cmVzLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogSW5jcmVhc2Ugc2l6ZSBvZiB0cmFtcG9saW5lIGZvciBzdGRjYWxsCisJY2xvc3VyZXMuCisJKiBzcmMveDg2L3dpbjMyLlM6IEFkZCBhc3NlbWJseSBmb3Igc3RkY2FsbCBjbG9zdXJlLgorCSogc3JjL3g4Ni9mZmkuYzogSW5pdGlhbGl6ZSBzdGRjYWxsIGNsb3N1cmUgdHJhbXBvbGluZS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorCSogc3JjL3g4Ni9mZmkuYzogTGlrZXdpc2UuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBJbnNlcnQgbGljZW5jZSBoZWFkZXIuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9zeXN2LlM6IExpa2V3aXNlLgorCisJKiBzcmMvc2g2NC9mZmkuYzogQ2hhbmdlIHZvaWQgKCopKCkgdG8gdm9pZCAoKikodm9pZCkuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCSogc3JjL20zMnIvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NoNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9mZmk2NC5jOiBMaWtld2lzZS4KKwkqIHNyYy9hbHBoYS9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvYWxwaGEvb3NmLlM6IExpa2V3aXNlLgorCSogc3JjL2Zydi9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvczM5MC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcGEvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3BhL2hwdXgzMi5TOiBMaWtld2lzZS4KKwkqIHNyYy9pYTY0L3VuaXguUzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL21pcHMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NoL2ZmaS5jOiBMaWtld2lzZS4KKworMjAwOC0wMi0xNSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvZmZpLmMgKFVTRV9fQlVJTFRJTl9fX0NMRUFSX0NBQ0hFKToKKwlEZWZpbmUgKGNvbmRpdGlvbmFsbHkpLCBhbmQgdXNlIGl0IHRvIGluY2x1ZGUgY2FjaGVjdGwuaC4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGaXggY2FjaGUgZmx1c2hpbmcuCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoX0FCSU4zMiwgX0FCSTY0LCBfQUJJTzMyKTogRGVmaW5lLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCWluY2x1ZGUvZmZpLmguaW4sCisJc3JjL2FybS9mZml0YXJnZXQuaCwKKwlzcmMvYXJtL2ZmaS5jLAorCXNyYy9hcm0vc3lzdi5TLAorCXNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oLAorCXNyYy9jbG9zdXJlcy5jLAorCXNyYy9zaDY0L2ZmaXRhcmdldC5oLAorCXNyYy9zaDY0L2ZmaS5jLAorCXNyYy9zaDY0L3N5c3YuUywKKwlzcmMvdHlwZXMuYywKKwlzcmMveDg2L2ZmaTY0LmMsCisJc3JjL3g4Ni9mZml0YXJnZXQuaCwKKwlzcmMveDg2L3dpbjMyLlMsCisJc3JjL3g4Ni9kYXJ3aW4uUywKKwlzcmMveDg2L2ZmaS5jLAorCXNyYy94ODYvc3lzdi5TLAorCXNyYy94ODYvdW5peDY0LlMsCisJc3JjL2FscGhhL2ZmaXRhcmdldC5oLAorCXNyYy9hbHBoYS9mZmkuYywKKwlzcmMvYWxwaGEvb3NmLlMsCisJc3JjL202OGsvZmZpdGFyZ2V0LmgsCisJc3JjL2Zydi9mZml0YXJnZXQuaCwKKwlzcmMvZnJ2L2ZmaS5jLAorCXNyYy9zMzkwL2ZmaXRhcmdldC5oLAorCXNyYy9zMzkwL3N5c3YuUywKKwlzcmMvY3Jpcy9mZml0YXJnZXQuaCwKKwlzcmMvcGEvbGludXguUywKKwlzcmMvcGEvZmZpdGFyZ2V0LmgsCisJc3JjL3BhL2ZmaS5jLAorCXNyYy9yYXdfYXBpLmMsCisJc3JjL2lhNjQvZmZpdGFyZ2V0LmgsCisJc3JjL2lhNjQvdW5peC5TLAorCXNyYy9pYTY0L2ZmaS5jLAorCXNyYy9pYTY0L2lhNjRfZmxhZ3MuaCwKKwlzcmMvamF2YV9yYXdfYXBpLmMsCisJc3JjL2RlYnVnLmMsCisJc3JjL3NwYXJjL3Y5LlMsCisJc3JjL3NwYXJjL2ZmaXRhcmdldC5oLAorCXNyYy9zcGFyYy9mZmkuYywKKwlzcmMvc3BhcmMvdjguUywKKwlzcmMvbWlwcy9mZml0YXJnZXQuaCwKKwlzcmMvbWlwcy9uMzIuUywKKwlzcmMvbWlwcy9vMzIuUywKKwlzcmMvbWlwcy9mZmkuYywKKwlzcmMvcHJlcF9jaWYuYywKKwlzcmMvc2gvZmZpdGFyZ2V0LmgsCisJc3JjL3NoL2ZmaS5jLAorCXNyYy9zaC9zeXN2LlM6IFVwZGF0ZSBsaWNlbnNlIHRleHQuCisKKzIwMDktMDUtMjIgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorCisJKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2xvc3VyZV9TVERDQUxMKTogIE5ldyBmdW5jdGlvbi4KKwkoLmVoX2ZyYW1lKTogIEFkZCBGREUgZm9yIGl0LgorCisyMDA5LTA1LTIyICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKworCSogY29uZmlndXJlLmFjOiAgQWxzbyBjaGVjayBpZiBhc3NlbWJsZXIgc3VwcG9ydHMgcGMtcmVsYXRpdmUKKwlyZWxvY3Mgb24gWDg2X1dJTjMyIHRhcmdldHMuCisJKiBjb25maWd1cmU6ICBSZWdlbmVyYXRlLgorCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfcHJlcF9hcmdzKTogIERlY2xhcmUgZXh0ZXJuLCBub3QgZ2xvYmFsLgorCShfZmZpX2NhbGxfU1lTVik6ICBBZGQgbWlzc2luZyBmdW5jdGlvbiB0eXBlIHN5bWJvbCAuZGVmIGFuZAorCWFkZCBFSCBtYXJrdXAgbGFiZWxzLgorCShfZmZpX2NhbGxfU1REQ0FMTCk6ICBMaWtld2lzZS4KKwkoX2ZmaV9jbG9zdXJlX1NZU1YpOiAgTGlrZXdpc2UuCisJKF9mZmlfY2xvc3VyZV9yYXdfU1lTVik6ICBMaWtld2lzZS4KKwkoLmVoX2ZyYW1lKTogIEFkZCBoYW5kLWNyYWZ0ZWQgRUggZGF0YS4KKworMjAwOS0wNC0wOSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQ2hhbmdlIGNvcHlyaWdodCBoZWFkZXIgdG8gcmVmZXIgdG8KKwl2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0byBwb2ludCByZWFkZXJzCisJYXQgdGhlIENPUFlJTkczIGZpbGUgYW5kIHRoZSBGU0YncyBsaWNlbnNlIHdlYiBwYWdlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTGlrZXdpc2UuCisKKzIwMDktMDMtMDEgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0xMi0xOCAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJmZmkvMjYwNDgKKwkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9BU19YODZfUENSRUwpOiBOZXcgdGVzdC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL3g4Ni9zeXN2LlMgWyFGRklfTk9fUkFXX0FQSV06IFByZWNhbGN1bGF0ZQorCVJBV19DTE9TVVJFX0NJRl9PRkZTRVQsIFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQsCisJUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVCBmb3IgdGhlIFNvbGFyaXMgMTAveDg2IGFzc2VtYmxlci4KKwkoLmVoX2ZyYW1lKTogT25seSB1c2UgU1lNQk9MLS4gaWZmIEhBVkVfQVNfWDg2X1BDUkVMLgorCSogc3JjL3g4Ni91bml4NjQuUyAoLkxzdG9yZV90YWJsZSk6IE1vdmUgdG8gLnRleHQgc2VjdGlvbi4KKwkoLkxsb2FkX3RhYmxlKTogTGlrZXdpc2UuCisJKC5laF9mcmFtZSk6IE9ubHkgdXNlIFNZTUJPTC0uIGlmZiBIQVZFX0FTX1g4Nl9QQ1JFTC4KKworMjAwOC0xMi0xOCAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTExLTIxICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIHN1cHBvcnQgZm9yCisJc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYgcmV0dXJuIHZhbHVlcy4KKwkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2FsbF92OCk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV92OCk6IExpa2V3aXNlLgorCisyMDA4LTA5LTI2ICBQZXRlciBPJ0dvcm1hbiAgPHBvZ21hQHRoZXdyaXR0ZW53b3JkLmNvbT4KKwkgICAgU3RldmUgRWxsY2V5ICA8c2plQGN1cC5ocC5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgbmV3IGxpYnRvb2wuCisJKiBNYWtlZmlsZS5pbjogRGl0dG8uCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBEaXR0by4KKwkqIGFjbG9jYWwubTQ6IERpdHRvLgorCisyMDA4LTA4LTI1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IEFkZCBGRklfTElOVVggYW5kCisJRkZJX0xJTlVYX1NPRlRfRkxPQVQgdG8gdGhlIFBPV0VSUENfRlJFRUJTRCBlbnVtLgorCUFkZCBub3RlIGFib3V0IGZsYWcgYml0cyB1c2VkIGZvciBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVC4KKwlBZGp1c3QgY29weXJpZ2h0IG5vdGljZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBZGQgdHdvIG5ldyBmbGFncyB0byBpbmRpY2F0ZSBpZiB3ZSBoYXZlIG9uZQorCXJlZ2lzdGVyIG9yIHR3byByZWdpc3RlciB0byB1c2UgZm9yIEZGSV9TWVNWIHN0cnVjdHMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUGFzcyB0aGUgcmlnaHQgcmVnaXN0ZXIgZmxhZyBpbnRyb2R1Y2VkIGFib3ZlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEZpeCB0aGUgcmV0dXJuIHR5cGUgZm9yCisJRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QuIENvbW1lbnQuCisJQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisKKzIwMDgtMDctMTYgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVHVybiBJTlNOIGludG8gYW4gdW5zaWduZWQKKwlpbnQuCisKKzIwMDgtMDYtMTcgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDYtMDcgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisJKiBjb25maWd1cmUuYWMgKHBhcmlzYyotKi1saW51eCosIHBvd2VycGMtKi1zeXN2KiwKKwlwb3dlcnBjLSotYmVvcyopOiBSZW1vdmUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDUtMDkgIEp1bGlhbiBCcm93biAgPGp1bGlhbkBjb2Rlc291cmNlcnkuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoTFRMREZMQUdTKTogTmV3LgorCShsaWJmZmlfbGFfTERGTEFHUyk6IFVzZSBhYm92ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA4LTA0LTE4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJUFIgYm9vdHN0cmFwLzM1NDU3CisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTAzLTI2ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KKwkqIHNyYy9zaDY0L3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDgtMDMtMjYgIERhbmllbCBKYWNvYm93aXR6ICA8ZGFuQGRlYmlhbi5vcmc+CisKKwkqIHNyYy9hcm0vc3lzdi5TOiBGaXggQVJNIGNvbW1lbnQgbWFya2VyLgorCisyMDA4LTAzLTI2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgorCSogc3JjL3MzOTAvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvdW5peDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y4LlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorCSogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9hcm0vc3lzdi5TOiBMaWtld2lzZS4KKworMjAwOC0wMy0xNiAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisKKzIwMDgtMDItMTIgIEJqb2VybiBLb2VuaWcgIDxia29lbmlnQGFscGhhLXRpZXJjaGVuLmRlPgorCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBhbWQ2NC0qLWZyZWVic2QqIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0wMS0zMCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJUFIgbGliZmZpLzM0NjEyCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFBvcCA0IGJ5dGUgZnJvbSBzdGFjayB3aGVuCisJcmV0dXJuaW5nIHN0cnVjdC4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBBZGQgIi1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciIKKwl0ZXN0cy4KKworMjAwOC0wMS0yNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDEtMDYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4IHRoaW5rby4KKworMjAwOC0wMS0wNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgY29kZSBmb3IKKwlzaWduZWQvdW5zaWduZWQgaW50OC8xNiBmb3IgWDg2X0RBUldJTi4KKwlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgorCUhhbmRsZSBvbmUgYW5kIHR3byBieXRlIHN0cnVjdHMgd2l0aCBzcGVjaWFsIGNpZi0+ZmxhZ3MuCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBBZGQgc3BlY2lhbCB0eXBlcyBmb3Igb25lIGFuZCB0d28gYnl0ZSBzdHJ1Y3RzLgorCVVwZGF0ZWQgY29weXJpZ2h0IGluZm8uCisJKiBzcmMveDg2L2Rhcndpbi5TIChmZmlfY2FsbF9TWVNWKTogUmV3cml0ZSB0byB1c2UgYSBqdW1wIHRhYmxlIGxpa2UKKwlzeXN2LlMKKwlSZW1vdmUgY29kZSB0byBwb3AgYXJncyBmcm9tIHRoZSBzdGFjayBhZnRlciBjYWxsLgorCVNwZWNpYWwtY2FzZSBzaWduZWQvdW5zaWduZWQgZm9yIGludDgvMTYsIG9uZSBhbmQgdHdvIGJ5dGUgc3RydWN0cy4KKwkoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBIYW5kbGUgRkZJX1RZUEVfVUlOVDgsCisJRkZJX1RZUEVfU0lOVDgsIEZGSV9UWVBFX1VJTlQxNiwgRkZJX1RZUEVfU0lOVDE2LCBGRklfVFlQRV9VSU5UMzIsCisJRkZJX1RZUEVfU0lOVDMyLgorCVVwZGF0ZWQgY29weXJpZ2h0IGluZm8uCisKKzIwMDctMTItMDggIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL24zMi5TIChmZmlfY2FsbF9OMzIpOiAgUmVwbGFjZSBkYWRkIHdpdGggQUREVSwgZHN1YiB3aXRoCisJU1VCVSwgYWRkIHdpdGggQUREVSBhbmQgdXNlIHNtYWxsZXIgY29kZSBzZXF1ZW5jZXMuCisKKzIwMDctMTItMDcgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBsb25nIGRvdWJsZSByZXR1cm4KKwl0eXBlLgorCisyMDA3LTEyLTA2ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfU0laRU9GX0pBVkFfUkFXKTogRGVmaW5lIGlmIG5vdAlhbHJlYWR5CisJZGVmaW5lZC4KKwkoZmZpX2phdmFfcmF3KTogTmV3IHR5cGVkZWYuCisJKGZmaV9qYXZhX3Jhd19jYWxsLCBmZmlfamF2YV9wdHJhcnJheV90b19yYXcsCisJZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5KTogQ2hhbmdlIHBhcmFtZXRlciB0eXBlcyBmcm9tIGZmaV9yYXcgdG8KKwlmZmlfamF2YV9yYXcuCisJKGZmaV9qYXZhX3Jhd19jbG9zdXJlKSA6IFNhbWUuCisJKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmUsIGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jKTogQ2hhbmdlCisJcGFyYW1ldGVyIHR5cGVzLgorCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9yYXdfc2l6ZSk6ICBSZXBsYWNlIEZGSV9TSVpFT0ZfQVJHIHdpdGgKKwlGRklfU0laRU9GX0pBVkFfUkFXLgorCShmZmlfamF2YV9yYXdfdG9fcHRyYXJyYXkpOiBDaGFuZ2UgdHlwZSBvZiByYXcgdG8gZmZpX2phdmFfcmF3LgorCVJlcGxhY2UgRkZJX1NJWkVPRl9BUkcgd2l0aCBGRklfU0laRU9GX0pBVkFfUkFXLiBVc2UKKwlzaXplb2YoZmZpX2phdmFfcmF3KSBmb3IgYWxpZ25tZW50IGNhbGN1bGF0aW9ucy4KKwkoZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3KTogU2FtZS4KKwkoZmZpX2phdmFfcnZhbHVlX3RvX3Jhdyk6IEFkZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBGRklfVFlQRV9QT0lOVEVSCisJaWYgRkZJX1NJWkVPRl9KQVZBX1JBVyA9PSA0LgorCShmZmlfamF2YV9yYXdfdG9fcnZhbHVlKTogU2FtZS4KKwkoZmZpX2phdmFfcmF3X2NhbGwpOiBDaGFuZ2UgdHlwZSBvZiByYXcgdG8gZmZpX2phdmFfcmF3LgorCShmZmlfamF2YV90cmFuc2xhdGVfYXJncyk6IFNhbWUuCisJKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jLCBmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlKTogQ2hhbmdlCisJcGFyYW1ldGVyIHR5cGVzLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKEZGSV9TSVpFT0ZfSkFWQV9SQVcpOiBEZWZpbmUgZm9yIE4zMiBBQkkuCisKKzIwMDctMTItMDYgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL24zMi5TIChmZmlfY2xvc3VyZV9OMzIpOiBVc2UgNjQtYml0IGFkZCBpbnN0cnVjdGlvbiBvbgorCXBvaW50ZXIgdmFsdWVzLgorCisyMDA3LTEyLTAxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJUFIgbGliZmZpLzMxOTM3CisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogSW50cm9kdWNlIG5ldyBBQkkgRkZJX0xJTlVYX1NPRlRfRkxPQVQuCisJQWRkIGxvY2FsIEZGSV9UWVBFX1VJTlQxMjggdG8gaGFuZGxlIHNvZnQtZmxvYXQgbG9uZy1kb3VibGUtMTI4LgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IERpc3Rpbmd1aXNoIGJldHdlZW4gX19OT19GUFJTX18gYW5kIG5vdCBhbmQKKwlzZXQgdGhlIE5VTV9GUFJfQVJHX1JFR0lTVEVSUyBhY2NvcmRpbmcgdG8uCisJQWRkIHN1cHBvcnQgZm9yIHBvdGVudGlhbCBzb2Z0LWZsb2F0IHN1cHBvcnQgdW5kZXIgaGFyZC1mbG9hdAorCWFyY2hpdGVjdHVyZS4KKwkoZmZpX3ByZXBfYXJnc19TWVNWKTogU2V0IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyB0byAwIGluIGNhc2Ugb2YKKwlGRklfTElOVVhfU09GVF9GTE9BVCwgaGFuZGxlIGZsb2F0LCBkb3VibGVzIGFuZCBsb25nLWRvdWJsZXMgYWNjb3JkaW5nCisJdG8gdGhlIEZGSV9MSU5VWF9TT0ZUX0ZMT0FUIEFCSS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IE1ha2Ugc3VyZSBub3QgdG8gc3RvcmUgZmxvYXQvZG91YmxlCisJb24gYXJjaHMgd2hlcmUgX19OT19GUFJTX18gaXMgdHJ1ZS4KKwlBZGQgRkZJX1RZUEVfVUlOVDEyOCBzdXBwb3J0LgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBBZGQgc3VwcG9ydCBmb3Igc29mdC1mbG9hdCBsb25nLWRvdWJsZS0xMjguCisJQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisKKzIwMDctMTEtMjUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIHNyYy9jbG9zdXJlcy5jOiBNb3ZlIGRlZmludGlvbiBvZiBNQVlCRV9VTlVTRUQgZnJvbSBoZXJlIHRvIC4uLgorCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IC4uLiBoZXJlLgorCVVwZGF0ZSBjb3B5cmlnaHQuCisKKzIwMDctMTEtMTcgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTG9hZCBjb3JyZWN0IGNyIHRvIGNvbXBhcmUgaWYgd2UgaGF2ZSBsb25nIGRvdWJsZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIGEgY29tbWVudCB0byBzaG93IHdoaWNoIHBhcnQgZ29lcyBpbnRvIGNyNi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGRsLmM6IE5ldyB0ZXN0LgorCisyMDA3LTA5LTA0ICAgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FybS9zeXN2LlMgKFVOV0lORCk6IE5ldy4KKwkoV2hvbGUgZmlsZSk6IENvbmRpdGlvbmFsbHkgY29tcGlsZSB1bndpbmRlciBkaXJlY3RpdmVzLgorCSogc3JjL2FybS9zeXN2LlM6IEFkZCB1bndpbmRlciBkaXJlY3RpdmVzLgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogQWxpZ24gc3RydWN0cyBieSBhdCBsZWFzdCA0IGJ5dGVzLgorCU9ubHkgdHJlYXQgcjAgYXMgYSBzdHJ1Y3QgYWRkcmVzcyBpZiB3ZSdyZSBhY3R1YWxseSByZXR1cm5pbmcgYQorCXN0cnVjdCBieSBhZGRyZXNzLgorCU9ubHkgY29weSB0aGUgYnl0ZXMgdGhhdCBhcmUgYWN0dWFsbHkgd2l0aGluIGEgc3RydWN0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEEgQ29tcG9zaXRlIFR5cGUgbm90IGxhcmdlciB0aGFuIDQgYnl0ZXMKKwlpcyByZXR1cm5lZCBpbiByMCwgbm90IHBhc3NlZCBieSBhZGRyZXNzLgorCShmZmlfY2FsbCk6IEFsbG9jYXRlIGEgd29yZC1zaXplZCB0ZW1wb3JhcnkgZm9yIHRoZSBjYXNlIHdoZXJlCisJYSBjb21wb3NpdGUgaXMgcmV0dXJuZWQgaW4gcjAuCisJKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IEFsaWduIGFzIG5lY2Vzc2FyeS4KKworMjAwNy0wOC0wNSAgU3RldmVuIE5ld2J1cnkgIDxzX2pfbmV3YnVyeUB5YWhvby5jby51az4KKworCSogc3JjL2FybS9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORSk6IFVzZSBfX2NsZWFyX2NhY2hlIGluc3RlYWQgb2YKKwlkaXJlY3RseSB1c2luZyB0aGUgc3lzX2NhY2hlZmx1c2ggc3lzY2FsbC4KKworMjAwNy0wNy0yNyAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hcm0vc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogQWRkIHNvZnQtZmxvYXQuCisKKzIwMDctMDktMDMgIE1hY2llaiBXLiBSb3p5Y2tpICA8bWFjcm9AbGludXgtbWlwcy5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBVbmlmeSBNSVBTX0lSSVggYW5kIE1JUFNfTElOVVggaW50byBNSVBTLgorCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogY29uZmlndXJlOiBMaWtld2lzZS4KKworMjAwNy0wOC0yNCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zbC5jOiBOZXcgdGVzdC4KKworMjAwNy0wOC0xMCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IFJlbW92ZSB4ZmFpbCBmb3IgbWlwczY0Ki0qLSouCisKKzIwMDctMDgtMTAgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwlQUiBsaWJmZmkvMjgzMTMKKwkqIGNvbmZpZ3VyZS5hYzogRG9uJ3QgdHJlYXQgbWlwczY0IGFzIGEgc3BlY2lhbCBjYXNlLgorCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBuMzIuUy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZQorCSogTWFrZWZpbGUuaW46IERpdHRvLgorCSogZmZpY29uZmlnLmguaW46IERpdHRvLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKFJFR19MLCBSRUdfUywgU1VCVSwgQUREVSwgU1JMLCBMSSk6IEluZGVudC4KKwkoTEEsIEVIX0ZSQU1FX0FMSUdOLCBGREVfQUREUl9CWVRFUyk6IE5ldyBwcmVwcm9jZXNzb3IgbWFjcm9zLgorCShGRklfREVGQVVMVF9BQkkpOiBTZXQgZm9yIG42NCBjYXNlLgorCShGRklfQ0xPU1VSRVMsIEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgZm9yIG4zMiBhbmQgbjY0IGNhc2VzLgorCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jYWxsX04zMik6IEFkZCBkZWJ1ZyBtYWNyb3MgYW5kIGxhYmVscyBmb3IgRkRFLgorCShmZmlfY2xvc3VyZV9OMzIpOiBOZXcgZnVuY3Rpb24uCisJKC5laF9mcmFtZSk6IE5ldyBzZWN0aW9uCisJKiBzcmMvbWlwcy9vMzIuUzogQ2xlYW4gdXAgY29tbWVudHMuCisJKGZmaV9jbG9zdXJlX08zMik6IFBhc3MgZmZpX2Nsb3N1cmUgcGFyYW1ldGVyIGluICQxMi4KKwkqIHNyYy9taXBzL2ZmaS5jOiBVc2UgRkZJX01JUFNfTjMyIGluc3RlYWQgb2YKKwlfTUlQU19TSU0gPT0gX0FCSU4zMiB0aHJvdWdob3V0LgorCShGRklfTUlQU19TVE9QX0hFUkUpOiBOZXcsIHVzZSBpbiBwbGFjZSBvZgorCWZmaV9zdG9wX2hlcmUuCisJKGZmaV9wcmVwX2FyZ3MpOiBVc2UgdW5zaWduZWQgbG9uZyB0byBob2xkIHBvaW50ZXIgdmFsdWVzLiAgUmV3cml0ZQorCXRvIHN1cHBvcnQgbjMyL242NCBBQklzLgorCShjYWxjX24zMl9zdHJ1Y3RfZmxhZ3MpOiBSZXdyaXRlLgorCShjYWxjX24zMl9yZXR1cm5fc3RydWN0X2ZsYWdzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4gIFJldmVyc2UKKwlwb3NpdGlvbiBvZiBmbGFnIGJpdHMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUmV3cml0ZSBuMzIgcG9ydGlvbi4KKwkoZmZpX2NhbGwpOiBFbmFibGUgZm9yIG42NC4gIEFkZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBzbWFsbCBzdHJ1Y3R1cmUKKwlyZXR1cm4gdmFsdWVzLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFkZCBuMzIgYW5kIG42NCBzdXBwb3J0LgorCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IEFkZCBjYXN0IHRvIHNpbGVuY2Ugd2FybmluZy4KKwkoY29weV9zdHJ1Y3RfTjMyLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IE5ldyBmdW5jdGlvbnMuCisKKzIwMDctMDgtMDggIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKGZmaV90eXBlX215bG9uZyk6IFJlbW92ZSBkZWZpbml0aW9uLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYyAobWFpbik6IFVzZSBjb3JyZWN0IHR5cGUKKwlzcGVjaWZpZXJzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jIChtYWluKTogRGl0dG8uCisKKzIwMDctMDgtMDcgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBGaXggdHlwbyBpbiBwcmV2aW91cworCWNoZWNraW4uCisKKzIwMDctMDgtMDYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJUFIgdGVzdHN1aXRlLzMyODQzCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBIYW5kbGUgRkZJX1RZUEVfVUlOVDgsCisJRkZJX1RZUEVfU0lOVDgsIEZGSV9UWVBFX1VJTlQxNiwgRkZJX1RZUEVfU0lOVDE2LCBGRklfVFlQRV9VSU5UMzIsCisJRkZJX1RZUEVfU0lOVDMyLgorCisyMDA3LTA4LTAyICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VsLmMgKG1haW4pOiBEZWZpbmUgcmV0dXJuIHR5cGUgYXMKKwlmZmlfYXJnLiAgVXNlIHByb3BlciBwcmludGYgY29udmVyc2lvbiBzcGVjaWZpZXIuCisKKzIwMDctMDctMzAgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJUFIgdGVzdHN1aXRlLzMyODQzCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IGluIHg4NiBjYXNlLCBhZGQgY29kZSBmb3IKKwlzaWduZWQvdW5zaWduZWQgaW50OC8xNi4KKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogUmV3cml0ZSB0bzoKKwlVc2UgYSBqdW1wIHRhYmxlLgorCVJlbW92ZSBjb2RlIHRvIHBvcCBhcmdzIGZyb20gdGhlIHN0YWNrIGFmdGVyIGNhbGwuCisJU3BlY2lhbC1jYXNlIHNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jIChtYWluKTogUmV2ZXJ0LgorCisyMDA3LTA3LTI2ICBSaWNoYXJkIEd1ZW50aGVyICA8cmd1ZW50aGVyQHN1c2UuZGU+CisKKwlQUiB0ZXN0c3VpdGUvMzI4NDMKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYyAobWFpbik6IFZlcmlmeSBjYWxsCisJcmVzdWx0IGFzIHNpZ25lZCBjaGFyLCBub3QgZmZpX2FyZy4KKworMjAwNy0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoaT84Ni0qLXNvbGFyaXMyLjFbMC05XSk6IFNldCBUQVJHRVQgdG8gWDg2XzY0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA3LTA3LTExICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9mZmkuYzogRG9uJ3QgaW5jbHVkZSBzeXMvY2FjaGVjdGwuaC4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBVc2UgX19idWlsdGluX19fY2xlYXJfY2FjaGUoKSBpbnN0ZWFkIG9mCisJY2FjaGVmbHVzaCgpLgorCisyMDA3LTA1LTE4ICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kIGFqdXN0ZWQKKwlmcm9tIChmZmlfcHJlcF9jbG9zdXJlKTogLi4uIHRoaXMuCisJKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBBZGp1c3QuCisKKzIwMDUtMTItMzEgIFBoaWwgQmx1bmRlbGwgIDxwYkByZWNpdmEuY29tPgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YsCisJZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciwgZmZpX3ByZXBfY2xvc3VyZSk6IE5ldywgYWRkIGNsb3N1cmUgc3VwcG9ydC4KKwkqIHNyYy9hcm0vc3lzdi5TKGZmaV9jbG9zdXJlX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9hcm0vZmZpdGFyZ2V0LmggKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBMaWtld2lzZS4KKwkoRkZJX0NMT1NVUkVTKTogRW5hYmxlIGNsb3N1cmUgc3VwcG9ydC4KKworMjAwNy0wNy0wMyAgQW5kcmV3IEhhbGV5ICA8YXBoQGhlZGdlcy5iaWxsZ2F0bGlmZi5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBFbmFibGUgZm9yIEFSTS4KKworMjAwNy0wNy0wNSAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlZC4KKworMjAwNy0wNi0wMiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA3LTA1LTIzICBTdGV2ZSBFbGxjZXkgIDxzamVAY3VwLmhwLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNy0wNS0xMCAgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisKKwkqIHNyYy9tNjhrL2ZmaS5jIChmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YsCisJZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcixmZmlfcHJlcF9jbG9zdXJlKTogTmV3LCBhZGQgY2xvc3VyZSBzdXBwb3J0LgorCSogc3JjL202OGsvc3lzdi5TKGZmaV9jbG9zdXJlX1NZU1YsZmZpX2Nsb3N1cmVfc3RydWN0X1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL2ZmaXRhcmdldC5oIChGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCisJKEZGSV9DTE9TVVJFUyk6IEVuYWJsZSBjbG9zdXJlIHN1cHBvcnQuCisKKzIwMDctMDUtMTAgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorCisJKiBjb25maWd1cmUuYWMgKEhBVkVfQVNfQ0ZJX1BTRVVET19PUCk6IE5ldyB0ZXN0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMvbTY4ay9zeXN2LlMgKENGSV9TVEFSVFBST0MsQ0ZJX0VORFBST0MsCisJQ0ZJX09GRlNFVCxDRklfREVGX0NGQSk6IE5ldyBtYWNyb3MuCisJKGZmaV9jYWxsX1NZU1YpOiBBZGQgY2FsbGZyYW1lIGFubm90YXRpb24uCisKKzIwMDctMDUtMTAgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorCisJKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfYXJncyxmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeAorCW51bWVyb3VzIHRlc3Qgc3VpdGUgZmFpbHVyZXMuCisJKiBzcmMvbTY4ay9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBMaWtld2lzZS4KKworMjAwNy0wNC0xMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBCcmluZyB1cCB0byBkYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMvZnJ2L2VhYmkuUzogUmVtb3ZlIFJDUyBrZXl3b3JkLgorCisyMDA3LTA0LTA2ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFRpZHkgdGFyZ2V0IGNhc2UuCisJKEhBVkVfTE9OR19ET1VCTEUpOiBBbGxvdyB0aGUgdGFyZ2V0IHRvIG92ZXJyaWRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogRG9uJ3QgZGVmaW5lIGZmaV90eXBlX2ZvbyBpZgorCUxJQkZGSV9ISURFX0JBU0lDX1RZUEVTIGlzIGRlZmluZWQuCisJKGZmaV90eXBlX2xvbmdkb3VibGUpOiBJZiBub3QgSEFWRV9MT05HX0RPVUJMRSwgZGVmaW5lCisJdG8gZmZpX3R5cGVfZG91YmxlLgorCSogdHlwZXMuYyAoTElCRkZJX0hJREVfQkFTSUNfVFlQRVMpOiBEZWZpbmUuCisJKEZGSV9UWVBFREVGLCBmZmlfdHlwZV92b2lkKTogTWFyayB0aGUgZGF0YSBjb25zdC4KKwkoZmZpX3R5cGVfbG9uZ2RvdWJsZSk6IFNwZWNpYWwgY2FzZSBmb3IgQWxwaGEuICBEb24ndCBkZWZpbmUKKwlpZiBsb25nIGRvdWJsZSA9PSBkb3VibGUuCisKKwkqIHNyYy9hbHBoYS9mZmkuYyAoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IEFzc2VydCB1bmlxdWUgdmFsdWUuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGl0IGFzIHRoZSAxMjgtYml0IHR5cGUuCisJKGZmaV9jYWxsLCBmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogTGlrZXdpc2UuICBNYXJrIGhpZGRlbi4KKwkoZmZpX2NhbGxfb3NmLCBmZmlfY2xvc3VyZV9vc2YpOiBNYXJrIGhpZGRlbi4KKwkqIHNyYy9hbHBoYS9mZml0YXJnZXQuaCAoRkZJX0xBU1RfQUJJKTogVGlkeSBkZWZpbml0aW9uLgorCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2FsbF9vc2YsIGZmaV9jbG9zdXJlX29zZik6IE1hcmsgaGlkZGVuLgorCShsb2FkX3RhYmxlKTogSGFuZGxlIDEyOC1iaXQgbG9uZyBkb3VibGUuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDQuYzogQWRkIC1taWVlZSBmb3IgYWxwaGEuCisKKzIwMDctMDQtMDYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KKworCVBSIGxpYmZmaS8zMTQ5MToKKwkqIFJFQURNRTogRml4ZWQgYnVnIGluIGV4YW1wbGUuCisKKzIwMDctMDQtMDMgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvY2xvc3VyZXMuYzogSW5jbHVkZSBzeXMvc3RhdGZzLmguCisJKF9HTlVfU09VUkNFKTogRGVmaW5lIG9uIExpbnV4LgorCShGRklfTU1BUF9FWEVDX1NFTElOVVgpOiBEZWZpbmUuCisJKHNlbGludXhfZW5hYmxlZCk6IE5ldyB2YXJpYWJsZS4KKwkoc2VsaW51eF9lbmFibGVkX2NoZWNrKTogTmV3IGZ1bmN0aW9uLgorCShpc19zZWxpbnV4X2VuYWJsZWQpOiBEZWZpbmUuCisJKGRsbW1hcCk6IFVzZSBpdC4KKworMjAwNy0wMy0yNCAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyAocmV0dXJuX2ZsKTogTWFyayBhcyBzdGF0aWMuCisJVXNlICd2b2xhdGlsZSBmbG9hdCBzdW0nIHRvIGNyZWF0ZSBzdW0gb2YgZmxvYXRzIHRvIGF2b2lkIGZhbHNlCisJbmVnYXRpdmUgZHVlIHRvIGV4Y2VzcyBwcmVjaXNpb24gb24gaXg4NiB0YXJnZXRzLgorCShtYWluKTogRGl0dG8uCisKKzIwMDctMDMtMDggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmx1c2hfaWNhY2hlKTogRml4IGxlZnQtb3ZlciBmcm9tIHByZXZpb3VzCisJcGF0Y2guCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUmVtb3ZlIHVubmVlZGVkIGNhc3RzLiAgQWRkIG5lZWRlZCBvbmVzLgorCisyMDA3LTAzLTA3ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX2Nsb3N1cmVfYWxsb2MsIGZmaV9jbG9zdXJlX2ZyZWUpOiBOZXcuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogTmV3LgorCShmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBOZXcuCisJKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jKTogTmV3LgorCSogc3JjL2Nsb3N1cmVzLmM6IE5ldyBmaWxlLgorCSogc3JjL2RsbWFsbG9jLmMgW0ZGSV9NTUFQX0VYRUNfV1JJVF0gKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCk6CisJUmVwbGFjZSBzZmxhZ3Mgd2l0aCBleGVjX29mZnNldC4KKwlbRkZJX01NQVBfRVhFQ19XUklUXSAobW1hcF9leGVjX29mZnNldCwgYWRkX3NlZ21lbnRfZXhlY19vZmZzZXQsCisJc3ViX3NlZ21lbnRfZXhlY19vZmZzZXQpOiBOZXcgbWFjcm9zLgorCShnZXRfc2VnbWVudF9mbGFncywgc2V0X3NlZ21lbnRfZmxhZ3MsIGNoZWNrX3NlZ21lbnRfbWVyZ2UpOiBOZXcKKwltYWNyb3MuCisJKGlzX21tYXBwZWRfc2VnbWVudCwgaXNfZXh0ZXJuX3NlZ21lbnQpOiBVc2UgZ2V0X3NlZ21lbnRfZmxhZ3MuCisJKGFkZF9zZWdtZW50LCBzeXNfYWxsb2MsIGNyZWF0ZV9tc3BhY2UsIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlLAorCWRlc3Ryb3lfbXNwYWNlKTogVXNlIG5ldyBtYWNyb3MuCisJKHN5c19hbGxvYyk6IFNpbGVuY2Ugd2FybmluZy4KKwkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfU09VUkNFUyk6IEFkZCBzcmMvY2xvc3VyZXMuYy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogc3JjL3ByZXBfY2lmIFtGRklfQ0xPU1VSRVNdIChmZmlfcHJlcF9jbG9zdXJlKTogSW1wbGVtZW50IGluCisJdGVybXMgb2YgZmZpX3ByZXBfY2xvc3VyZV9sb2MuCisJKiBzcmMvcmF3X2FwaS5jIChmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhZGp1c3RlZAorCWZyb20uLi4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiAuLi4gdGhpcy4gIFJlLWltcGxlbWVudCBpbiB0ZXJtcyBvZiB0aGUKKwlyZW5hbWVkIHZlcnNpb24uCisJKiBzcmMvamF2YV9yYXdfYXBpIChmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kCisJYWRqdXN0ZWQgZnJvbS4uLgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuICBSZS1pbXBsZW1lbnQgaW4gdGVybXMgb2YKKwl0aGUgcmVuYW1lZCB2ZXJzaW9uLgorCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbmFtZWQgZnJvbQorCShmZmlfcHJlcF9jbG9zdXJlKTogLi4uIHRoaXMuCisJKiBzcmMvcGEvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL2NyaXMvZmZpLmM6IExpa2V3aXNlLiAgQWRqdXN0LgorCSogc3JjL2Zydi9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvbWlwcy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCSogc3JjL3MzOTAvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NoL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMveDg2L2ZmaTY0LmM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9mZmkuYzogTGlrZXdpc2UuCisJKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBBZGp1c3QuCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kIGFkanVzdGVkIGZyb20uLi4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiAuLi4gdGhpcy4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbmFtZWQgZnJvbQorCShmZmlfcHJlcF9jbG9zdXJlKTogLi4uIHRoaXMuCisJKGZsdXNoX2ljYWNoZSk6IEFkanVzdC4KKworMjAwNy0wMy0wNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIHNyYy9kbG1hbGxvYy5jOiBOZXcgZmlsZSwgaW1wb3J0ZWQgdmVyc2lvbiAyLjguMyBvZiBEb3VnCisJTGVhJ3MgbWFsbG9jLgorCisyMDA3LTAzLTAxICBCcm9va3MgTW9zZXMgIDxicm9va3MubW9zZXNAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBkdW1teSBpbnN0YWxsLXBkZiB0YXJnZXQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZQorCisyMDA3LTAyLTEzICBBbmRyZWFzIEtyZWJiZWwgIDxrcmViYmVsMUBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfYXJncywgZmZpX3ByZXBfY2lmX21hY2hkZXAsCisJZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBBZGQgbG9uZyBkb3VibGUgaGFuZGxpbmcuCisKKzIwMDctMDItMDIgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBNb3ZlIHJlc3RvcmUgb2YgcjIKKwlpbW1lZGlhdGVseSBhZnRlciBiY3RybCBpbnN0cnVjdGlvbi4KKworMjAwNy0wMS0xOCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChhbGwtcmVjdXJzaXZlLCBpbnN0YWxsLXJlY3Vyc2l2ZSwKKwltb3N0bHljbGVhbi1yZWN1cnNpdmUsIGNsZWFuLXJlY3Vyc2l2ZSwgZGlzdGNsZWFuLXJlY3Vyc2l2ZSwKKwltYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZSk6IEFkZCBtaXNzaW5nIHRhcmdldHMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwNi0xMi0xNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgVEFSR0VUIGZvciB4ODZfNjQtKi1kYXJ3aW4qLgorCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBydWxlcyBmb3IgNjQtYml0IHNvdXJjZXMKKwlmb3IgWDg2X0RBUldJTi4KKwkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IFNldCB0cmFtcG9saW5lIHNpemUgZm9yIHg4Nl82NC0qLWRhcndpbiouCisJKiBzcmMveDg2L2RhcndpbjY0LlM6IE5ldyBmaWxlIGZvciB4ODZfNjQtKi1kYXJ3aW4qIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYzogTmV3IHRlc3QgY2FzZSBmb3IKKwlmZmlfY2FsbCBvbmx5LgorCisyMDA2LTEyLTEzICBBbmRyZWFzIFRvYmxlciA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUgd2l0aCBhY2xvY2FsIC1JIC4uIGFzIHdyaXR0ZW4gaW4gdGhlCisJTWFrZWZpbGUuYW0uCisKKzIwMDYtMTAtMzEgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGRhcndpbl9hZGp1c3RfYWdncmVnYXRlX3NpemVzKTogTmV3LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENhbGwgZGFyd2luX2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMgZm9yCisJRGFyd2luLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IFJlbW92ZSBEYXJ3aW4gWEZBSUwuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogUmVtb3ZlIERhcndpbiBYRkFJTC4KKworMjAwNi0xMC0xMCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKwkgICAgU2FuZHJvIFRvbGFpbmkgIDx0b2xhaW5pQGxpYmVyby5pdD4KKworCSogY29uZmlndXJlLmFjIFtpKjg2LSotZGFyd2luKl06IFNldCBYODZfREFSV0lOIHN5bWJvbCBhbmQKKwljb25kaXRpb25hbC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisJKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKSBbWDg2X0RBUldJTl06IE5ldyBjYXNlLgorCShFWFRSQV9ESVNUKTogQWRkIHNyYy94ODYvZGFyd2luLlMuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKSBbWDg2X0RBUldJTl06IFRyZWF0IGxpa2UKKwlYODZfV0lOMzIsIGFuZCBhZGRpdGlvbmFsbHkgYWxpZ24gc3RhY2sgdG8gMTYgYnl0ZXMuCisJKiBzcmMveDg2L2Rhcndpbi5TOiBOZXcsIGJhc2VkIG9uIHN5c3YuUy4KKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpIFtYODZfREFSV0lOXTogQWxpZ24gPiA4LWJ5dGUgc3RydWN0cy4KKworMjAwNi0wOS0xMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCVBSIGxpYmZmaS8yMzkzNQorCSogaW5jbHVkZS9NYWtlZmlsZS5hbTogSW5zdGFsbCBib3RoIGZmaS5oIGFuZCBmZml0YXJnZXQuaCBpbgorCSQobGliZGlyKS9nY2MvJCh0YXJnZXRfYWxpYXMpLyQoZ2NjX3ZlcnNpb24pL2luY2x1ZGUuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlZCBmb3IgYXV0b21ha2UgMS45LjYuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKzIwMDYtMDgtMTcgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKHN0cnVjdCk6IFJldmVydCBhY2NpZGVudGFsIGNvbW1pdC4KKworMjAwNi0wOC0xNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogUmVtb3ZlIGxpbnQgZGlyZWN0aXZlcy4KKwkqIGluY2x1ZGUvZmZpLmguaW46IExpa2V3aXNlLgorCisyMDA2LTA3LTI1ICBUb3JzdGVuIFNjaG9lbmZlbGQgIDxrYWZmZWV0aXNjaEBnbXguZGU+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV90eXBlX3Vsb25nLCBmZmlfdHlwZV9zbG9uZyk6IERlZmluZSBjb3JyZWN0bHkKKwlmb3IgMzItYml0IGFyY2hpdGVjdHVyZXMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VsLmM6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDYtMDctMTkgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jOiBSZW1vdmUgeGZhaWwgZm9yIG1pcHMsCisJeGZhaWwgcmVtYWlucyBmb3IgbWlwczY0LgorCisyMDA2LTA1LTIzICBDYXJsb3MgTydEb25lbGwgIDxjYXJsb3NAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBpbnN0YWxsLWh0bWwgdGFyZ2V0LiBBZGQgaW5zdGFsbC1odG1sIHRvIC5QSE9OWQorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNi0wNS0xOCAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKworCSogcGEvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfcGEzMik6IExvYWQgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzIGZyb20KKwlzdGFjayBzbG90LgorCisyMDA2LTA0LTIyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIFJFQURNRTogUmVtb3ZlIG5vdGljZSBhYm91dCAnQ3JhenkgQ29tbWVudHMnLgorCSogc3JjL2RlYnVnLmM6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuIENsZWFudXAgd2hpdGUgc3BhY2VzLgorCSogc3JjL2phdmFfcmF3X2FwaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wcmVwX2NpZi5jOiBMaWtld2lzZS4KKwkqIHNyYy9yYXdfYXBpLmM6IExpa2V3aXNlLgorCSogc3JjL2ZmaXRlc3QuYzogRGVsZXRlLiBObyBsb25nZXIgbmVlZGVkLCBhbGwgdGVzdCBjYXNlcyBtaWdyYXRlZAorCXRvIHRoZSB0ZXN0c3VpdGUuCisJKiBzcmMvYXJtL2ZmaS5jOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLgorCSogc3JjL20zMnIvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCisJKiBzcmMvc2gvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NoNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9mZmkuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorCisyMDA2LTA0LTEzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wYS9ocHV4MzIuUzogQ29ycmVjdCB1bndpbmQgb2Zmc2V0IGNhbGN1bGF0aW9uIGZvcgorCWZmaV9jbG9zdXJlX3BhMzIuCisJKiBzcmMvcGEvbGludXguUzogTGlrZXdpc2UuCisKKzIwMDYtMDQtMTIgIEphbWVzIEUgV2lsc29uICA8d2lsc29uQHNwZWNpZml4LmNvbT4KKworCVBSIGxpYmdjai8yNjQ4MworCSogc3JjL2lhNjQvZmZpLmMgKHN0Zl9zcGlsbCwgbGRmX2ZpbGwpOiBSZXdyaXRlIGFzIG1hY3Jvcy4KKwkoaGZhX3R5cGVfbG9hZCk6IENhbGwgc3RmX3NwaWxsLgorCShoZmFfdHlwZV9zdG9yZSk6IENhbGwgbGRmX2ZpbGwuCisJKGZmaV9jYWxsKTogQWRqdXN0IGNhbGxzIHRvIGFib3ZlIHJvdXRpbmVzLiAgQWRkIGxvY2FsIHRlbXBzIGZvcgorCW1hY3JvIHJlc3VsdC4KKworMjAwNi0wNC0xMCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBSZWNvZ25pemUgbXVsdGlsaWIKKwlkaXJlY3RvcnkgbmFtZXMgY29udGFpbmluZyB1bmRlcnNjb3Jlcy4KKworMjAwNi0wNC0wNyAgSmFtZXMgRSBXaWxzb24gIDx3aWxzb25Ac3BlY2lmaXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmM6IE5ldyB0ZXN0Y2FzZS4KKworMjAwNi0wNC0wNSAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKwkgICAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIFBBX0hQVVggcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogY29uZmlndXJlLmFjOiBBZGQgUEFfSFBVWCBydWxlcy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIHNyYy9wYS9mZml0YXJnZXQuaDogUmVuYW1lIGxpbnV4IHRhcmdldCB0byBQQV9MSU5VWC4KKwlBZGQgUEFfSFBVWCBhbmQgUEE2NF9IUFVYLgorCVJlbmFtZSBGRklfTElOVVggQUJJIHRvIEZGSV9QQTMyIEFCSS4KKwkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IERlZmluZSBmb3IgMzItYml0IEhQLVVYIHRhcmdldHMuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIpOiBEZWZpbmUuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDQpOiBMaWtld2lzZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUOCk6IExpa2V3aXNlLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QzKTogUmVkZWZpbmUuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDUpOiBMaWtld2lzZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUNik6IExpa2V3aXNlLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q3KTogTGlrZXdpc2UuCisJKiBzcmMvcGEvZmZpLmMgKFJPVU5EX0RPV04pOiBEZWxldGUuCisJKGZsZHcsIGZzdHcsIGZsZGQsIGZzdGQpOiBVc2UgJ19fYXNtX18nLgorCShmZmlfc3RydWN0X3R5cGUpOiBBZGQgc3VwcG9ydCBmb3IgRkZJX1RZUEVfU01BTExfU1RSVUNUMiwKKwlGRklfVFlQRV9TTUFMTF9TVFJVQ1Q0IGFuZCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q4LgorCShmZmlfcHJlcF9hcmdzX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9wcmVwX2FyZ3NfcGEzMi4gVXBkYXRlIGNvbW1lbnQuCisJU2ltcGxpZnkgaW5jcmVtZW50aW5nIG9mIHN0YWNrIHNsb3QgdmFyaWFibGUuIENoYW5nZSB0eXBlIG9mIGxvY2FsCisJJ24nIHRvIHVuc2lnbmVkIGludC4KKwkoZmZpX3NpemVfc3RhY2tfTElOVVgpOiBSZW5hbWUgdG8gZmZpX3NpemVfc3RhY2tfcGEzMi4gSGFuZGxlIGxvbmcKKwlkb3VibGUgb24gUEFfSFBVWC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KKwkoZmZpX2NhbGwpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaW5uZXJfTElOVVgpOiBSZW5hbWUgdG8gZmZpX2Nsb3N1cmVfaW5uZXJfcGEzMi4gQ2hhbmdlCisJcmV0dXJuIHR5cGUgdG8gZmZpX3N0YXR1cy4gU2ltcGxpZnkgaW5jcmVtZW50aW5nIG9mIHN0YWNrIHNsb3QKKwl2YXJpYWJsZS4gT25seSBjb3B5IGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50IHJlZ2lzdGVycyB3aGVuIFBBX0xJTlVYCisJaXMgdHJ1ZS4gUmVmb3JtYXQgZGVidWcgc3RhdGVtZW50LgorCUFkZCBzdXBwb3J0IGZvciBGRklfVFlQRV9TTUFMTF9TVFJVQ1QyLCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q0IGFuZAorCUZGSV9UWVBFX1NNQUxMX1NUUlVDVDguCisJKGZmaV9jbG9zdXJlX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX3BhMzIuIEFkZCAnZXh0ZXJuJyB0bworCWRlY2xhcmF0aW9uLgorCShmZmlfcHJlcF9jbG9zdXJlKTogTWFrZSBsaW51eCB0cmFtcG9saW5lIGNvbmRpdGlvbmFsIG9uIFBBX0xJTlVYLgorCUFkZCBub3BzIHRvIGNhY2hlIGZsdXNoLiAgQWRkIHRyYW1wb2xpbmUgZm9yIFBBX0hQVVguCisJKiBzcmMvcGEvaHB1eDMyLlM6IE5ldyBmaWxlLgorCSogc3JjL3BhL2xpbnV4LlMgKGZmaV9jYWxsX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jYWxsX3BhMzIuIFJlbmFtZQorCWZmaV9wcmVwX2FyZ3NfTElOVVggdG8gZmZpX3ByZXBfYXJnc19wYTMyLgorCUxvY2FsaXplIGxhYmVscy4gQWRkIHN1cHBvcnQgZm9yIDIsIDQgYW5kIDgtYnl0ZSBzbWFsbCBzdHJ1Y3RzLiBIYW5kbGUKKwl1bmFsaWduZWQgZGVzdGluYXRpb25zIGluIDMsIDUsIDYgYW5kIDctYnl0ZSBzbWFsbCBzdHJ1Y3RzLiBPcmRlcgorCWFyZ3VtZW50IHR5cGUgY2hlY2tzIHNvIHRoYXQgY29tbW9uIGFyZ3VtZW50IHR5cGVzIGFwcGVhciBmaXJzdC4KKwkoZmZpX2Nsb3N1cmVfTElOVVgpOiBSZW5hbWUgdG8gZmZpX2Nsb3N1cmVfcGEzMi4gUmVuYW1lCisJZmZpX2Nsb3N1cmVfaW5uZXJfTElOVVggdG8gZmZpX2Nsb3N1cmVfaW5uZXJfcGEzMi4KKworMjAwNi0wMy0yNCAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKGVudW0gZmZpX2FiaSk6IEFkZCBGRklfTElOVVguICBEZWZhdWx0CisJZm9yIDMyLWJpdCB1c2luZyBJQk0gZXh0ZW5kZWQgZG91YmxlIGZvcm1hdC4gIEZpeCBGRklfTEFTVF9BQkkuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogSGFuZGxlIGxpbnV4IHZhcmlhbnQgb2YKKwlGRklfVFlQRV9MT05HRE9VQkxFLgorCShmZmlfcHJlcF9hcmdzNjQpOiBBc3NlcnQgdXNpbmcgSUJNIGV4dGVuZGVkIGRvdWJsZS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBEb24ndCBtdW5nZSBGRklfVFlQRV9MT05HRE9VQkxFIHR5cGUuCisJSGFuZGxlIEZGSV9MSU5VWCBGRklfVFlQRV9MT05HRE9VQkxFIHJldHVybiBhbmQgYXJncy4KKwkoZmZpX2NhbGwpOiBIYW5kbGUgRkZJX0xJTlVYLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IE5vbiBGRklfTElOVVggbG9uZyBkb3VibGUgcmV0dXJuIG5lZWRzCisJZ3ByMyByZXR1cm4gcG9pbnRlciBhcyBmb3Igc3RydWN0IHJldHVybi4gIEhhbmRsZSBGRklfTElOVVgKKwlGRklfVFlQRV9MT05HRE9VQkxFIHJldHVybiBhbmQgYXJncy4gIERvbid0IGluY3JlbWVudCAibmYiCisJdW5uZWNlc3NhcmlseS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBMb2FkIGJvdGggZjEgYW5kIGYyCisJZm9yIEZGSV9UWVBFX0xPTkdET1VCTEUuICBNb3ZlIGVwaWxvZ3VlIGluc25zIGludG8gY2FzZSB0YWJsZS4KKwlEb24ndCB1c2UgcjYgYXMgcG9pbnRlciB0byByZXN1bHRzLCBpbnN0ZWFkIHVzZSBzcCBvZmZzZXQuICBEb24ndAorCW1ha2UgYSBzcGVjaWFsIGNhbGwgdG8gbG9hZCBsciB3aXRoIGNhc2UgdGFibGUgYWRkcmVzcywgaW5zdGVhZAorCXVzZSBvZmZzZXQgZnJvbSBwcmV2aW91cyBjYWxsLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogU2F2ZSBsb25nIGRvdWJsZSByZXR1cm4uCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBTaW1wbGlmeSBsb25nIGRvdWJsZQorCXJldHVybi4KKworMjAwNi0wMy0xNSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaDY0L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBmbG9hdCBhcmd1bWVudHMKKwlwYXNzZWQgd2l0aCBGUCByZWdpc3RlcnMgY29ycmVjdGx5LgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCSogc3JjL3NoNjQvc3lzdi5TOiBMaWtld2lzZS4KKworMjAwNi0wMy0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYyAoY2xvc3VyZV90ZXN0X2ZuKTogTWFyayBjaWYsCisJYXJncyBhbmQgdXNlcmRhdGEgdW51c2VkLgorCShjbG9zdXJlX3Rlc3RfZm4xKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkobWFpbik6IFJlbW92ZSB1bnVzZWQgcmVzLgorCisyMDA2LTAyLTI4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogQWRqdXN0IEZTRiBhZGRyZXNzLiBBZGQgdGVzdCBydW5zIGZvcgorCS1PMiwgLU8zLCAtT3MgYW5kIHRoZSB3YXJuaW5nIGZsYWdzIC1XIC1XYWxsLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBhbiBfX1VOVVNFRF9fIG1hY3JvIHRvIG1hcmsKKwl1bnVzZWQgcGFyYW1ldGVyIHVudXNlZCBmb3IgZ2NjIG9yIGVsc2UgZG8gbm90aGluZy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYyAoY2xzX3N0cnVjdF8xMmJ5dGVfZ24pOiBNYXJrIGNpZgorCWFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jIChjbHNfc3RydWN0XzE2Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYyAoY2xzX3N0cnVjdF8xOGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMgKGNsc19zdHJ1Y3RfMTlieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYyAoY2xzX3N0cnVjdF8xXzFieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jIChjbHNfc3RydWN0XzIwYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMgKGNsc19zdHJ1Y3RfMjBieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jIChjbHNfc3RydWN0XzI0Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jIChjbHNfc3RydWN0XzJieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYyAoY2xzX3N0cnVjdF8zXzFieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jIChjbHNfc3RydWN0XzNieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jIChjbHNfc3RydWN0XzNieXRlX2duMSk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMgKGNsc19zdHJ1Y3RfNF8xYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jIChjbHNfc3RydWN0XzRieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMgKGNsc19zdHJ1Y3RfNWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYyAoY2xzX3N0cnVjdF81Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYyAoY2xzX3N0cnVjdF82NGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYyAoY2xzX3N0cnVjdF82Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jIChjbHNfc3RydWN0XzZieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMgKGNsc19zdHJ1Y3RfN2J5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYyAoY2xzX3N0cnVjdF83Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jIChjbHNfc3RydWN0XzhieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIChjbHNfc3RydWN0XzlieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIChjbHNfc3RydWN0XzlieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYyAoY2xzX3N0cnVjdF9hbGlnbl9mbik6IENhc3QKKwl2b2lkKiB0byBhdm9pZCBjb21waWxlciB3YXJuaW5nLgorCShtYWluKTogTGlrZXdpc2UuCisJKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMgKGNsc19yZXRfZG91YmxlX2ZuKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMgKGNsc19yZXRfZmxvYXRfZm4pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCisJZGF0YSB1bnVzZWQuCisJKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCisJZGF0YSB1bnVzZWQuCisJKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmCisJYW5kIGRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCisJZGF0YSB1bnVzZWQuCisJKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCisJZGF0YSB1bnVzZWQuCisJKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmCisJYW5kIGRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYyAoY2xzX3JldF9zY2hhcl9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF9zY2hhcl9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jIChjbHNfcmV0X3NpbnRfZm4pOiBNYXJrIGNpZiBhbmQKKwl1c2VyZGF0YSB1bnVzZWQuCisJKGNsc19yZXRfc2ludF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgKGNsc19yZXRfc3Nob3J0X2ZuKTogTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3NzaG9ydF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYyAoY2xzX3JldF91Y2hhcl9mbik6ICBNYXJrIGNpZiBhbmQKKwl1c2VyZGF0YSB1bnVzZWQuCisJKGNsc19yZXRfdWNoYXJfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYyAoY2xzX3JldF91aW50X2ZuKTogTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3VpbnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jIChjbHNfcmV0X3Vsb25nbG9uZ19mbik6IE1hcmsgY2lmCisJYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMgKGNsc19yZXRfdXNob3J0X2ZuKTogTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3VzaG9ydF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jIChmbG9hdGluZyk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmMgKG1haW4pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGkuCisJQ2xlYW51cCB3aGl0ZSBzcGFjZXMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVnaW50LmMgKGNoZWNraW5nKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyAoY2xzX3N0cnVjdF9jb21iaW5lZF9nbik6IE1hcmsKKwljaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIChjbHNfc3RydWN0X2NvbWJpbmVkX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyAoQl9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMgKEJfZm4pOiBBZGp1c3QgcHJpbnRmCisJZm9ybWF0dGVycyB0byBzaWxlbmNlIGdjYy4KKwkoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYyAoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YQorCXVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBNZW50aW9uIHJlbGF0ZWQgUFIuCisJKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMgKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEKKwl1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogTWVudGlvbiByZWxhdGVkIFBSLgorCShCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jIChCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhCisJdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMgKEJfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jIChCX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYyAoc3R1Yik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jIChtYWluKTogQ2FzdCB0aGUgcmVzdWx0IHRvIHNpbGVuY2UKKwlnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIChyZXR1cm5fZmwpOiBBZGQgdGhlIG5vdGUgbWVudGlvbmVkCisJaW4gdGhlIGxhc3QgY29tbWl0IGZvciB0aGlzIHRlc3QgY2FzZSBpbiB0aGUgdGVzdCBjYXNlIGl0c2VsZi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIChjbG9zdXJlX3Rlc3RfZm4wKTogTWFyayBjaWYgYXMKKwl1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyAoY2xvc3VyZV90ZXN0X2ZuMSk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMgKGNsb3N1cmVfdGVzdF9mbjIpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jIChjbG9zdXJlX3Rlc3RfZm4zKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgKGNsb3N1cmVfdGVzdF9mbjUpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jIChjbG9zdXJlX3Rlc3RfZm4wKTogTGlrZXdpc2UuCisKKzIwMDYtMDItMjIgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvc3lzdi5TOiBGaXggcmVnaXN0ZXIgbnVtYmVycyBpbiB0aGUgRkRFIGZvcgorCWZmaV9jbG9zdXJlX1NZU1YuCisKKzIwMDYtMDItMjAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyAocmV0dXJuX2ZsKTogUmVtb3ZlIHN0YXRpYworCWRlY2xhcmF0aW9uIHRvIGF2b2lkIGEgZmFsc2UgbmVnYXRpdmUgb24gaXg4Ni4gU2VlIFBSMzIzLgorCisyMDA2LTAyLTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKwlhbmQgY2FzdCBpbnRlZ2VyIHRvIHZvaWQgKiBpZiBuZWVkZWQuICBVcGRhdGUgdGhlIHBvaW50ZXIgdG8KKwl0aGUgRlAgcmVnaXN0ZXIgc2F2ZWQgYXJlYSBjb3JyZWN0bHkuCisKKzIwMDYtMDItMTcgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IFhGQUlMIHRoaXMgdGVzdCB1bnRpbCBQUjI1NjMwCisJaXMgZml4ZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTGlrZXdpc2UuCisKKzIwMDYtMDItMTYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwuYzogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYzogTGlrZXdpc2UuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBSZW1vdmUgZmZpX3R5cGVfbXlsb25nCisJZGVmaW5pdGlvbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBmZmlfdHlwZV9teWxvbmcgZGVmaW5pdGlvbgorCWhlcmUgdG8gYmUgdXNlZCBieSBvdGhlciB0ZXN0IGNhc2VzIHRvby4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jOiBOZXcgdGVzdCBjYXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgorCisyMDA2LTAxLTIxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGNvbmZpZ3VyZS5hYzogRW5hYmxlIGxpYmZmaSBmb3Igc3BhcmM2NC0qLWZyZWVic2QqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDA2LTAxLTE4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvc3lzdi5TIChzbXN0X3R3b19yZWdpc3Rlcik6IERvbid0IGNhbGwgX19hc2hsZGkzLAorCWluc3RlYWQgZG8gdGhlIHNoaWZ0aW5nIGlubGluZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBEb24ndCBjb21wdXRlICVyNQorCXNoaWZ0IGNvdW50IHVuY29uZGl0aW9uYWxseS4gIFNpbXBsaWZ5IGxvYWQgc2VxdWVuY2VzIGZvciAxLCAyLCAzLCA0CisJYW5kIDggYnl0ZSBzdHJ1Y3RzLCBmb3IgdGhlIHJlbWFpbmluZyBzdHJ1Y3Qgc2l6ZXMgZG9uJ3QgY2FsbAorCV9fbHNocmRpMywgaW5zdGVhZCBkbyB0aGUgc2hpZnRpbmcgaW5saW5lLgorCisyMDA1LTEyLTA3ICBUaGllbW8gU2V1ZmVyICA8dGhzQG5ldHdvcmtuby5kZT4KKworCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IFJlbW92ZSBvYnNvbGV0ZSBzZ2lkZWZzLmggaW5jbHVkZS4gQWRkCisJbWlzc2luZyBwYXJlbnRoZXNlcy4KKwkqIHNyYy9taXBzL28zMi5TIChmZmlfY2FsbF9PMzIpOiBDb2RlIGZvcm1hdHRpbmcuIERlZmluZQorCWFuZCB1c2UgQTNfT0ZGLCBGUF9PRkYsIFJBX09GRi4gTWljcm8tb3B0aW1pemF0aW9ucy4KKwkoZmZpX2Nsb3N1cmVfTzMyKTogTGlrZXdpc2UsIGJ1dCB3aXRoIG5ld2x5IGRlZmluZWQgQTNfT0ZGMiwKKwlBMl9PRkYyLCBBMV9PRkYyLCBBMF9PRkYyLCBSQV9PRkYyLCBGUF9PRkYyLCBTMF9PRkYyLCBHUF9PRkYyLAorCVYxX09GRjIsIFYwX09GRjIsIEZBXzFfMV9PRkYyLCBGQV8xXzBfT0ZGMiwgRkFfMF8xX09GRjIsCisJRkFfMF8wX09GRjIuCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IENvZGUgZm9ybWF0dGluZy4gRml4CisJZW5kaWFubmVzcyBidWdzLgorCShmZmlfcHJlcF9jbG9zdXJlKTogSW1wcm92ZSB0cmFtcG9saW5lIGluc3RydWN0aW9uIHNjaGVkdWxpbmcuCisJKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogRml4IGVuZGlhbm5lc3MgYnVncy4KKworMjAwNS0xMi0wMyAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmM6IEZvcm1hdHRpbmcuCisJKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEF2b2lkIHBvc3NpYmxlIGFsaWFzaW5nIHByb2JsZW1zIGJ5IHVzaW5nIHVuaW9ucy4KKwkoZmZpX3ByZXBfYXJnczY0KTogTGlrZXdpc2UuCisKKzIwMDUtMDktMzAgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IEZvcgorCWRhcndpbiwgdXNlIC1zaGFyZWQtbGliZ2NjIG5vdCAtbGdjY19zLCBhbmQgZXhwbGFpbiB3aHkuCisKKzIwMDUtMDktMjYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jICh2YWx1ZV90eXBlKTogTmV3IHR5cGVkZWYuCisJKENBTkFSWSk6IE5ldyBkZWZpbmUuCisJKG1haW4pOiBDaGVjayBmb3IgcmVzdWx0IGJ1ZmZlciBvdmVyZmxvdy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogSGFuZGxlIGxpbnV4NjQgbG9uZyBkb3VibGUgcmV0dXJucy4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChGTEFHX1JFVFVSTlNfMTI4QklUUyk6IE5ldyBjb25zdGFudC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgbGludXg2NCBsb25nIGRvdWJsZSByZXR1cm5zLgorCisyMDA1LTA4LTI1ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJUFIgdGFyZ2V0LzIzNDA0CisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQ29ycmVjdCBwbGFjZW1lbnQgb2Ygc3RhY2sKKwlob21lZCBmcCBhcmdzLgorCShmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ29ycmVjdCBzdGFjayBzaXppbmcgZm9yIHNhbWUuCisKKzIwMDUtMDgtMTEgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWMgKEhBVkVfSElEREVOX1ZJU0lCSUxJVFlfQVRUUklCVVRFKTogTmV3IHRlc3QuCisJKEFIX0JPVFRPTSk6IEFkZCBGRklfSElEREVOIGRlZmluaXRpb24uCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChoaWRkZW4pOiBSZW1vdmUuCisJKGZmaV9jbG9zdXJlX0xJTlVYNjQsIGZmaV9wcmVwX2FyZ3M2NCwgZmZpX2NhbGxfTElOVVg2NCwKKwlmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IFVzZSBGRklfSElEREVOIGluc3RlYWQgb2YgaGlkZGVuLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQsCisJLmZmaV9jbG9zdXJlX0xJTlVYNjQpOiBVc2UgRkZJX0hJRERFTiBpbnN0ZWFkIG9mIC5oaWRkZW4uCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6IFJlbW92ZSwKKwlhZGQgRkZJX0hJRERFTiB0byBpdHMgcHJvdG90eXBlLgorCShmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogTmV3LgorCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YsIGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTmV3LgorCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6IE5ldy4KKworMjAwNS0wOC0xMCAgQWxmcmVkIE0uIFN6bWlkdCAgPGFtc0BnbnUub3JnPgorCisJUFIgbGliZmZpLzIxODE5OgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmFjOiBIYW5kbGUgaSo4Ni0qLWdudSouCisKKzIwMDUtMDgtMDkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogVXNlCisJRFdfQ0ZBX29mZnNldF9leHRlbmRlZF9zZiByYXRoZXIgdGhhbgorCURXX0NGQV9HTlVfbmVnYXRpdmVfb2Zmc2V0X2V4dGVuZGVkLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogTGlrZXdpc2UuCisKKzIwMDUtMDctMjIgIFNVR0lPS0EgVG9zaGlub2J1ICA8c3VnaW9rYUBpdG9uZXQuY28uanA+CisKKwkqIHNyYy9zaC9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBTdG9wIGFyZ3VtZW50IHBvcHBpbmcgY29ycmVjdGx5CisJb24gc2gzLgorCShmZmlfY2xvc3VyZV9TWVNWKTogQ2hhbmdlIHRoZSBzdGFjayBsYXlvdXQgZm9yIHNoMyBzdHJ1Y3QgYXJndW1lbnQuCisJKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggc2gzIGFyZ3VtZW50IGNvcHksIHdoZW4gaXQgaXMKKwlwYXJ0aWFsbHkgb24gcmVnaXN0ZXIuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRG9uJ3Qgc2V0IHRvbyBtYW55IGNpZi0+ZmxhZ3MuCisKKzIwMDUtMDctMjAgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKGZmaV9jYWxsKTogSGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMgY29ycmVjdGx5LgorCVJlbW92ZSBlbXB0eSBsaW5lLgorCSogc3JjL3NoNjQvZmZpLmMgKHNpbXBsZV90eXBlKTogUmVtb3ZlLgorCShyZXR1cm5fdHlwZSk6IEhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGNvcnJlY3RseS4KKwkoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgorCShmZmlfY2FsbCk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCSogc3JjL3NoNjQvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogSGFuZGxlIDEsIDIgYW5kIDQtYnl0ZSByZXR1cm4uCisJRW1pdCBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIGlmIFBJQyBhbmQgcmVtb3ZlIHdyb25nIGRhdGFsYWJlbAorCXByZWZpeGVzIGZyb20gRUggZGF0YS4KKworMjAwNS0wNy0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIFBPV0VSUENfRlJFRUJTRC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogY29uZmlndXJlLmFjOiBBZGQgUE9XRVJQQ19GUkVFQlNEIHJ1bGVzLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IEFkZCBQT1dFUlBDX0ZSRUVCU0QgcnVsZXMuCisJKEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUKTogRGVmaW5lLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IEFkZCBmbGFncyB0byBoYW5kbGUgc21hbGwgc3RydWN0dXJlIHJldHVybnMKKwlpbiBmZmlfY2FsbF9TWVNWLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGZvciBTWVNWIDQgQUJJLgorCUFrYSBGRklfU1lTVi4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IEFkZCByZXR1cm4gdHlwZXMgZm9yIHNtYWxsIHN0cnVjdHVyZXMuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IEFkZCBiaXRzIHRvIGhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGZvcgorCWZpbmFsIFNZU1YgNCBBQkkuCisKKzIwMDUtMDctMTAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jOiBOZXcgdGVzdCBmaWxlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYzogTGlrZXdpc2UuCisKKzIwMDUtMDctMDUgIFJhbmRvbHBoIENodW5nICA8dGF1c3FAZGViaWFuLm9yZz4KKworCSogc3JjL3BhL2ZmaS5jIChmZmlfc3RydWN0X3R5cGUpOiBSZW5hbWUgRkZJX1RZUEVfU01BTExfU1RSVUNUMQorCWFzIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMuICBCcmVhayBvdXQgaGFuZGxpbmcgZm9yIDUtNyBieXRlCisJc3RydWN0dXJlcy4gIEtpbGwgY29tcGlsYXRpb24gd2FybmluZ3MuCisJKGZmaV9jbG9zdXJlX2lubmVyX0xJTlVYKTogUHJpbnQgcmV0dXJuIHZhbHVlcyBhcyBoZXggaW4gZGVidWcKKwltZXNzYWdlLiAgUmVuYW1lIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDEgYXMgRkZJX1RZUEVfU01BTExfU1RSVUNUMy4KKwlQcm9wZXJseSBoYW5kbGUgNS03IGJ5dGUgc3RydWN0dXJlIHJldHVybnMuCisJKiBzcmMvcGEvZmZpdGFyZ2V0LmggKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDEpCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIpOiBSZW1vdmUuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMsIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDUpCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDYsIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDcpOiBEZWZpbmUuCisJKiBzcmMvcGEvbGludXguUzogTWFyayBzb3VyY2UgZmlsZSBhcyB1c2luZyBQQTEuMSBhc3NlbWJseS4KKwkoY2hlY2tzbXN0MSwgY2hlY2tzbXN0Mik6IFJlbW92ZS4KKwkoY2hlY2tzbXN0Myk6IE9wdGltaXplIGhhbmRsaW5nIG9mIDMtYnl0ZSBzdHJ1Y3QgcmV0dXJucy4KKwkoY2hlY2tzbXN0NTY3KTogUHJvcGVybHkgaGFuZGxlIDUtNyBieXRlIHN0cnVjdCByZXR1cm5zLgorCisyMDA1LTA2LTE1ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCVBSIGxpYmdjai8yMTk0MworCSogc3JjL21pcHMvbjMyLlM6IEVuZm9yY2UgUElDIGNvZGUuCisJKiBzcmMvbWlwcy9vMzIuUzogTGlrZXdpc2UuCisKKzIwMDUtMDYtMTUgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBjb25maWd1cmUuYWM6IFRyZWF0IGkqODYtKi1zb2xhcmlzMi4xMCBhbmQgdXAgYXMgWDg2XzY0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA1LTA2LTAxICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogRG9uJ3QgdXNlIEpVTVBUQVJHRVQKKwl0byBjYWxsIGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWLiAgQXBwZW5kIEBsb2NhbCBpbnN0ZWFkLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogTGlrZXdpc2UgZm9yIGZmaV9wcmVwX2FyZ3NfU1lTVi4KKworMjAwNS0wNS0xNyAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBVc2UgQUNfQ19CSUdFTkRJQU4gaW5zdGVhZCBvZiBBQ19DX0JJR0VORElBTl9DUk9TUy4KKwlVc2UgQUNfQ0hFQ0tfU0laRU9GIGluc3RlYWQgb2YgQUNfQ09NUElMRV9DSEVDS19TSVpFT0YuCisJKiBNYWtlZmlsZS5hbSAoQUNMT0NBTF9BTUZMQUdTKTogUmVtb3ZlIC1JIC4uL2NvbmZpZy4KKwkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZSwgZmZpY29uZmlnLmguaW4sIE1ha2VmaWxlLmluLAorCWluY2x1ZGUvTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNS0wNS0wOSAgTWlrZSBTdHVtcCAgPG1yc0BhcHBsZS5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNS0wNS0wOCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCVBSIGxpYmZmaS8yMTI4NQorCSogc3JjL2FscGhhL29zZi5TOiBVcGRhdGUgdW53aW5kIGludG8gdG8gbWF0Y2ggY29kZS4KKworMjAwNS0wNS0wNCAgQW5kcmVhcyBEZWdlcnQgPGFkQHBhcHlydXMtZ21iaC5kZT4KKwkgICAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNhdmUgc3NlLXVzZWQgZmxhZyBpbgorCWJpdCAxMSBvZiBmbGFncy4KKwkoZmZpX2NhbGwpOiBNYXNrIHJldHVybiB0eXBlIGZpZWxkLiAgUGFzcyBzc2Vjb3VudCB0byBmZmlfY2FsbF91bml4NjQuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBTZXQgY2FycnkgYml0IGlmIHNzZS11c2VkIGZsYWcgc2V0LgorCSogc3JjL3g4Ni91bml4NjQuUyAoZmZpX2NhbGxfdW5peDY0KTogQWRkIHNzZWNvdW50IGFyZ3VtZW50LgorCU9ubHkgbG9hZCBzc2UgcmVnaXN0ZXJzIGlmIHNzZWNvdW50IG5vbi16ZXJvLgorCShmZmlfY2xvc3VyZV91bml4NjQpOiBPbmx5IHNhdmUgc3NlIHJlZ2lzdGVycyBpZiBjYXJyeSBzZXQgb24gZW50cnkuCisKKzIwMDUtMDQtMjkgIFJhbGYgQ29yc2VwaXVzICA8cmFsZi5jb3JzZXBpdXNAcnRlbXMub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBpKjg2LSotcnRlbXMqLCBzcGFyYyotKi1ydGVtcyosCisJcG93ZXJwYy0qcnRlbXMqLCBhcm0qLSotcnRlbXMqLCBzaC0qLXJ0ZW1zKi4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNS0wNC0yMCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWRnLXRlc3QtMSk6IEluIHJlZ3N1YiB1c2UsCisJaGF2ZSBUY2w4LjMtY29tcGF0aWJsZSBpbnRlcm1lZGlhdGUgdmFyaWFibGUuCisKKzIwMDUtMDQtMTggIFNpbW9uIFBvc25qYWsgPHNpbW9uLnBvc25qYWtAc2lvbC5uZXQ+CisJICAgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIENSSVMgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW4sCisJaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHNyYy9jcmlzOiBOZXcgZGlyZWN0b3J5LgorCSogc3JjL2NyaXMvZmZpLmMsIHNyYy9jcmlzL3N5c3YuUywgc3JjL2NyaXMvZmZpdGFyZ2V0Lmg6IE5ldyBmaWxlcy4KKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBXcmFwIGluICNpZm5kZWYgX19DUklTX18uCisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWRnLXRlc3QtMSk6IFJlcGxhY2UgXG4gd2l0aAorCVxyP1xuIGluIG91dHB1dCB0ZXN0cy4KKworMjAwNS0wNC0xMiAgTWlrZSBTdHVtcCAgPG1yc0BhcHBsZS5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNS0wMy0zMCAgSGFucyBCb2VobSAgPEhhbnMuQm9laG1AaHAuY29tPgorCisJKiBzcmMvaWE2NC9mZml0YXJnZXQuaCAoZmZpX2FyZyk6IFVzZSBsb25nIGxvbmcgaW5zdGVhZCBvZiBESS4KKworMjAwNS0wMy0zMCAgU3RldmUgRWxsY2V5ICA8c2plQGN1cC5ocC5jb20+CisKKwkqIHNyYy9pYTY0L2ZmaXRhcmdldC5oIChmZmlfYXJnKSBBREQgREkgYXR0cmlidXRlLgorCShmZmlfc2FyZykgRGl0dG8uCisJKiBzcmMvaWE2NC91bml4LlMgKGZmaV9jbG9zdXJlX3VuaXgpOiBFeHRlbmQgZ3AKKwl0byA2NCBiaXRzIGluIElMUDMyIG1vZGUuCisJTG9hZCA2NCBiaXRzIGV2ZW4gZm9yIHNob3J0IGRhdGEuCisKKzIwMDUtMDMtMjMgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogVXBkYXRlIGZvciAtbTY0IG11bHRpbGliLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDUtMDMtMjEgIFphY2sgV2VpbmJlcmcgIDx6YWNrQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogRG8gbm90IGludm9rZSBUTF9BQ19HQ0NfVkVSU0lPTi4KKwlEbyBub3Qgc2V0IHRvb2xfaW5jbHVkZV9kaXIuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmUsIE1ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46CisJUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IFNldCBnY2NfdmVyc2lvbiBhbmQgdG9vbGxpYmZmaWRpci4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDItMjIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBCdW1wIGFsaWdubWVudCB0bworCW9kZC1udW1iZXJlZCByZWdpc3RlciBwYWlycyBmb3IgNjQtYml0IGludGVnZXIgdHlwZXMuCisKKzIwMDUtMDItMjMgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCVBSIGxpYmZmaS8yMDEwNAorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYzogTmV3IHRlc3QgY2FzZS4KKworMjAwNS0wMi0xMSAgSmFuaXMgSm9obnNvbiAgPGphbmlzMTg3QHVzLmlibS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBSZW1vdmUgZGctb3B0aW9ucy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQzLmM6IERpdHRvLgorCisyMDA1LTAyLTA4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9mcnYvZmZpdGFyZ2V0Lmg6IFJlbW92ZSBQUEMgc3R1ZmYgd2hpY2ggZG9lcyBub3QgYmVsb25nIHRvIGZydi4KKworMjAwNS0wMS0xMiAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwIChjeHhfb3B0aW9ucyk6IEFkZAorCS1zaGFyZWQtbGliZ2NjLgorCisyMDA0LTEyLTMxICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMvdHlwZXMuYyAoRkZJX0FHR1JFR0FURV9UWVBFREVGKTogUmVtb3ZlLgorCShGRklfVFlQRURFRik6IFJlbmFtZSBmcm9tIEZGSV9JTlRFR1JBTF9UWVBFREVGLiAgUmVwbGFjZSBzaXplIGFuZAorCW9mZnNldCBwYXJhbWV0ZXJzIHdpdGggYSB0eXBlIHBhcmFtZXRlcjsgZGVkdWNlIHNpemUgYW5kIHN0cnVjdHVyZQorCWFsaWdubWVudC4gIFVwZGF0ZSBhbGwgdXNlcnMuCisKKzIwMDQtMTItMzEgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogRGVmaW5lIHdpdGggc2l6ZW9mLgorCShGRklfVFlQRV9MT05HRE9VQkxFKTogRml4IGZvciBpYTY0LgorCSogc3JjL2lhNjQvZmZpdGFyZ2V0LmggKHN0cnVjdCBmZmlfaWE2NF90cmFtcG9saW5lX3N0cnVjdCk6IE1vdmUKKwlpbnRvIGZmaV9wcmVwX2Nsb3N1cmUuCisJKiBzcmMvaWE2NC9pYTY0X2ZsYWdzLmgsIHNyYy9pYTY0L2ZmaS5jLCBzcmMvaWE2NC91bml4LlM6IFJld3JpdGUKKwlmcm9tIHNjcmF0Y2guCisKKzIwMDQtMTItMjcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvdW5peDY0LlM6IEZpeCB0eXBvIGluIHVud2luZCBpbmZvLgorCisyMDA0LTEyLTI1ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKHN0cnVjdCByZWdpc3Rlcl9hcmdzKTogUmVuYW1lIGZyb20gc3RhY2tMYXlvdXQuCisJKGVudW0geDg2XzY0X3JlZ19jbGFzcyk6IEFkZCBYODZfNjRfQ09NUExFWF9YODdfQ0xBU1MuCisJKG1lcmdlX2NsYXNzZXMpOiBDaGVjayBmb3IgaXQuCisJKFNTRV9DTEFTU19QKTogTmV3LgorCShjbGFzc2lmeV9hcmd1bWVudCk6IFBhc3MgYnl0ZV9vZmZzZXQgYnkgdmFsdWU7IHBlcmZvcm0gYWxsIHVwZGF0ZXMKKwlpbnNpZGUgc3RydWN0IGNhc2UuCisJKGV4YW1pbmVfYXJndW1lbnQpOiBBZGQgY2xhc3NlcyBhcmd1bWVudDsgaGFuZGxlCisJWDg2XzY0X0NPTVBMRVhfWDg3X0NMQVNTLgorCShmZmlfcHJlcF9hcmdzKTogTWVyZ2UgaW50byAuLi4KKwkoZmZpX2NhbGwpOiAuLi4gaGVyZS4gIFNoYXJlIHN0YWNrIGZyYW1lIHdpdGggZmZpX2NhbGxfdW5peDY0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNldHVwIGNpZi0+ZmxhZ3MgZm9yIHByb3BlciBzdHJ1Y3R1cmUgcmV0dXJuLgorCShmZmlfZmlsbF9yZXR1cm5fdmFsdWUpOiBSZW1vdmUuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBSZW1vdmUgZGVhZCBhc3NlcnQuCisJKGZmaV9jbG9zdXJlX3VuaXg2NF9pbm5lcik6IFJlbmFtZSBmcm9tIGZmaV9jbG9zdXJlX1VOSVg2NF9pbm5lci4KKwlSZXdyaXRlIHRvIHVzZSBzdHJ1Y3QgcmVnaXN0ZXJfYXJncyBpbnN0ZWFkIG9mIHZhX2xpc3QuICBDcmVhdGUKKwlmbGFncyBmb3IgaGFuZGxpbmcgc3RydWN0dXJlIHJldHVybnMuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBSZW1vdmUgZGVhZCBzdHJpbmdzLgorCShmZmlfY2FsbF91bml4NjQpOiBSZW5hbWUgZnJvbSBmZmlfY2FsbF9VTklYNjQuICBSZXdyaXRlIHRvIHNoYXJlCisJc3RhY2sgZnJhbWUgd2l0aCBmZmlfY2FsbC4gIEhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJucyBwcm9wZXJseS4KKwkoZmxvYXQyc3NlLCBmbG9hdGZsb2F0MnNzZSwgZG91YmxlMnNzZSk6IFJlbW92ZS4KKwkoc3NlMmZsb2F0LCBzc2UyZG91YmxlLCBzc2UyZmxvYXRmbG9hdCk6IFJlbW92ZS4KKwkoZmZpX2Nsb3N1cmVfdW5peDY0KTogUmVuYW1lIGZyb20gZmZpX2Nsb3N1cmVfVU5JWDY0LiAgUmV3cml0ZQorCXRvIGhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJucyBwcm9wZXJseS4KKworMjAwNC0xMi0wOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fTUFLRUZMQUdTKTogUmVtb3ZlIGR1cGxpY2F0ZSBMSUJDRkxBR1MgYW5kCisJUElDRkxBRy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKworMjAwNC0xMi0wMiAgUmljaGFyZCBTYW5kaWZvcmQgIDxyc2FuZGlmb0ByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFVzZSBUTF9BQ19HQ0NfVkVSU0lPTiB0byBzZXQgZ2NjX3ZlcnNpb24uCisJKiBjb25maWd1cmUsIGFjbG9jYWwubTQsIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA0LTExLTI5ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGxpYnRvb2wgY2hhbmdlLgorCisyMDA0LTExLTI1ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGxpYnRvb2wgcmV2ZXJzaW9uLgorCisyMDA0LTExLTI0ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGxpYnRvb2wgY2hhbmdlLgorCisyMDA0LTExLTIzICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFVzZSBuZXcgcHJvY3MgaW4gdGFyZ2V0LWxpYnBhdGguZXhwLgorCisyMDA0LTExLTIzICBSaWNoYXJkIFNhbmRpZm9yZCAgPHJzYW5kaWZvQHJlZGhhdC5jb20+CisKKwkqIHNyYy9taXBzL28zMi5TIChmZmlfY2FsbF9PMzIsIGZmaV9jbG9zdXJlX08zMik6IFVzZSBqYWxyIGluc3RlYWQKKwlvZiBqYWwuICBVc2UgYW4gYWJzb2x1dGUgZW5jb2RpbmcgZm9yIHRoZSBmcmFtZSBpbmZvcm1hdGlvbi4KKworMjAwNC0xMS0yMyAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW06IFJlbW92ZSBuby1kZXBlbmRlbmNpZXMuICBBZGQgQUNMT0NBTF9BTUZMQUdTLgorCSogYWNpbmNsdWRlLm00OiBEZWxldGUgbG9naWMgZm9yIHNpbmNsdWRlcy4KKwkqIGFjbG9jYWwubTQsIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZTogTGlrZXdpc2UuCisKKzIwMDQtMTEtMjIgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+CisKKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IEFsaWduIGRvdWJsZXMgYW5kIDY0LWJpdCBpbnRlZ2VycworCW9uIGEgOC1ieXRlIGJvdW5kYXJ5LgorCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jbG9zdXJlX3Y4KTogUmVzZXJ2ZSBmcmFtZSBzcGFjZSBmb3IgYXJndW1lbnRzLgorCisyMDA0LTEwLTI3ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisJbG9uZyBsb25nIHZhbHVlcy4gIFJvdW5kIHN0YWNrIGFsbG9jYXRpb24gdG8gYSBtdWx0aXBsZSBvZiA4IGJ5dGVzCisJZm9yIEFUUENTIGNvbXBhdGliaWxpdHkuCisJKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFJld29yayB0byBhdm9pZCB1c2Ugb2YgQVBDUyByZWdpc3RlcgorCW5hbWVzLiAgSGFuZGxlIHJldHVybmluZyBsb25nIGxvbmcgdHlwZXMuICBBZGQgVGh1bWIgYW5kIGludGVyd29ya2luZworCXN1cHBvcnQuICBJbXByb3ZlIHNvZnQtZmxvYXQgY29kZS4KKworMjAwNC0xMC0yNyAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRiLmV4cCAobG9hZF9nY2NfbGliKTogTmV3IGZ1bmN0aW9uLgorCShsaWJmZmlfZXhpdCk6IE5ldyBmdW5jdGlvbi4KKwkobGliZmZpX2luaXQpOiBCdWlsZCB0aGUgdGVzdGdsdWUgd3JhcHBlciBpZiBuZWVkZWQuCisKKzIwMDQtMTAtMjUgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+CisKKwlQUiBvdGhlci8xODEzOAorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBBY2NlcHQgbW9yZSB0aGFuIG9uZSBtdWx0aWxpYiBsaWJnY2MuCisKKzIwMDQtMTAtMjUgIEthenVoaXJvIEluYW9rYSA8aW5hb2thLmthenVoaXJvQHJlbmVzYXMuY29tPgorCisJKiBzcmMvbTMyci9saWJmZml0YXJnZXQuaCAoRkZJX0NMT1NVUkVTKTogU2V0IHRvIDAuCisKKzIwMDQtMTAtMjAgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogRG9uJ3QgYWxpZ24gZm9yIGRvdWJsZSBkYXRhLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0My5jOiBOZXcgdGVzdCBjYXNlLgorCisyMDA0LTEwLTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlKTogU2V0IFQgYml0IGluIHRyYW1wb2xpbmUgZm9yCisJdGhlIGZ1bmN0aW9uIHJldHVybmluZyBhIHN0cnVjdHVyZSBwb2ludGVkIHdpdGggUjIuCisJKiBzcmMvc2gvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogVXNlIFIyIGFzIHRoZSBwb2ludGVyIHRvCisJdGhlIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUgaWYgVCBiaXQgc2V0LiAgRW1pdCBwb3NpdGlvbgorCWluZGVwZW5kZW50IGNvZGUgYW5kIEVIIGRhdGEgaWYgUElDLgorCisyMDA0LTEwLTEzICBLYXp1aGlybyBJbmFva2EgIDxpbmFva2Eua2F6dWhpcm9AcmVuZXNhcy5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgbTMyciBzdXBwb3J0LgorCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZml1Z3JlOiBSZWdlbmVyYXRlLgorCSogc3JjL3R5cGVzLmM6IEFkZCBtMzJyIHBvcnQgdG8gRkZJX0lOVEVSTkFMX1RZUEVERUYKKwkodWludDY0LCBzaW50NjQsIGRvdWJsZSwgbG9uZ2RvdWJsZSkKKwkqIHNyYy9tMzJyOiBOZXcgZGlyZWN0b3J5LgorCSogc3JjL20zMnIvZmZpLmM6IE5ldyBmaWxlLgorCSogc3JjL20zMnIvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9tMzJyL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KKworMjAwNC0xMC0wMiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYzogTmV3IHRlc3QgY2FzZS4KKworMjAwNC0wOS0xNCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJUFIgbGliZ2NqLzE3NDY1CisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IERvbid0IHVzZSBnbG9iYWwgbGRfbGlicmFyeV9wYXRoLgorCVNldCB1cCBMRF9MSUJSQVJZX1BBVEgsIFNITElCX1BBVEgsIExEX0xJQlJBUllOMzJfUEFUSCwKKwlMRF9MSUJSQVJZNjRfUEFUSCwgTERfTElCUkFSWV9QQVRIXzMyLCBMRF9MSUJSQVJZX1BBVEhfNjQgYW5kCisJRFlMRF9MSUJSQVJZX1BBVEguCisKKzIwMDQtMDktMDUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogUmVtb3ZlIHdoaXRlc3BhY2VzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYzogUmVtb3ZlIHVudXNlZCB2YXIuIENsZWFudXAKKwl3aGl0ZXNwYWNlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VjLmM6IExpa2V3aXNlLgorCisyMDA0LTA5LTA1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBGaXggY29tbWVudHMgYW5kIGlkZW50YXRpb24uCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwNC0wOS0wMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IEFkZCBmbGFnIGZvciBsb25nZG91YmxlIHJldHVybiB2YWx1ZXMuCisJKGZmaV9wcmVwX2FyZ3MpOiBIYW5kbGUgbG9uZ2RvdWJsZSBhcmd1bWVudHMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogU2V0IGZsYWdzIGZvciBsb25nZG91YmxlLiBDYWxjdWxhdGUgc3BhY2UgZm9yCisJbG9uZ2RvdWJsZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IEFkZCBjbG9zdXJlIGhhbmRsaW5nIGZvciBsb25nZG91YmxlLgorCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKF9mZmlfY2FsbF9EQVJXSU4pOiBBZGQgaGFuZGxpbmcgb2YgbG9uZ2RvdWJsZQorCXZhbHVlcy4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMgKF9mZmlfY2xvc3VyZV9BU00pOiBMaWtld2lzZS4KKwkqIHNyYy90eXBlcy5jOiBEZWZpbmVkIGxvbmdkb3VibGUgc2l6ZSBhbmQgYWxpZ25tZW50IGZvciBkYXJ3aW4uCisKKzIwMDQtMDktMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvYWl4LlM6IFJlbW92ZSB3aGl0ZXNwYWNlcy4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvYXNtLmg6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKworMjAwNC0wOC0zMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgZnJ2IHN1cHBvcnQuCisJKiBNYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmFjOiBSZWFkIGNvbmZpZ3VyZS5ob3N0LgorCSogY29uZmlndXJlLmluOiBSZWFkIGNvbmZpZ3VyZS5ob3N0LgorCSogY29uZmlndXJlLmhvc3Q6IE5ldyBmaWxlLiAgZnJ2LWVsZiBuZWVkcyBsaWJnbG9zcy4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEZvcmNlIGZmaV9jbG9zdXJlIHRvIGhhdmUgYSBuaWNlIGJpZyAoOCkKKwlhbGlnbm1lbnQuICBUaGlzIGlzIG5lZWRlZCB0byBmcnYgYW5kIHNob3VsZG4ndCBoYXJtIHRoZSBvdGhlcnMuCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoQUxJR05fRE9XTik6IE5ldyBtYWNyby4KKwkqIHNyYy9mcnYvZmZpLmMsIHNyYy9mcnYvZmZpdGFyZ2V0LmgsIHNyYy9mcnYvZWFiaS5TOiBOZXcgZmlsZXMuCisKKzIwMDQtMDgtMjQgIERhdmlkIERhbmV5ICA8ZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFhmYWlsIG1pcHM2NCogaW5zdGVhZCBvZiBtaXBzKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jICBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlIGFuZCBzZXQgcmV0dXJuIHZhbHVlCisJdG8gemVyby4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKworMjAwNC0wOC0yMyAgRGF2aWQgRGFuZXkgPGRhbmV5QGF2dHJleC5jb20+CisKKwlQUiBsaWJnY2ovMTMxNDEKKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChGRklfTzMyX1NPRlRfRkxPQVQpOiBOZXcgQUJJLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggYWxpZ25tZW50IGNhbGN1bGF0aW9uLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBGRklfTzMyX1NPRlRfRkxPQVQgZmxvYXRpbmcgcG9pbnQKKwlwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdHlwZXMuCisJKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9PMzJfU09GVF9GTE9BVCBBQkkuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBEaXR0by4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBIYW5kbGUgRkZJX08zMl9TT0ZUX0ZMT0FUIEFCSSwgZml4CisJYWxpZ25tZW50IGNhbGN1bGF0aW9ucy4KKwkqIHNyYy9taXBzL28zMi5TIChmZmlfY2xvc3VyZV9PMzIpOiBEb24ndCB1c2UgZmxvYXRpbmcgcG9pbnQKKwlpbnN0cnVjdGlvbnMgaWYgRkZJX08zMl9TT0ZUX0ZMT0FULCBtYWtlIHN0YWNrIGZyYW1lIEFCSSBjb21wbGlhbnQuCisKKzIwMDQtMDgtMTQgIENhc2V5IE1hcnNoYWxsIDxjc21AZ251Lm9yZz4KKworCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVmX2NpZl9tYWNoZGVwKTogc2V0IGBjaWYtPmZsYWdzJyB0bworCWNvbnRhaW4gYEZGSV9UWVBFX1VJTlQ2NCcgYXMgcmV0dXJuIHR5cGUgZm9yIGFueSA2NC1iaXQKKwlpbnRlZ2VyIChPMzIgQUJJIG9ubHkpLgorCShmZmlfcHJlcF9jbG9zdXJlKTogbmV3IGZ1bmN0aW9uLgorCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IG5ldyBmdW5jdGlvbi4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBEZWZpbmUgYEZGSV9DTE9TVVJFUycgYW5kCisJYEZGSV9UUkFNUE9MSU5FX1NJWkUnIGFwcHJvcHJpYXRlbHkgaWYgdGhlIEFCSSBpcyBvMzIuCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyKTogYWRkIGxhYmVscyBmb3IgLmVoX2ZyYW1lLiBSZXR1cm4KKwk2NCBiaXQgaW50ZWdlcnMgY29ycmVjdGx5LgorCShmZmlfY2xvc3VyZV9PMzIpOiBuZXcgZnVuY3Rpb24uCisJQWRkZWQgRFdBUkYtMiB1bndpbmQgaW5mbyBmb3IgYm90aCBmdW5jdGlvbnMuCisKKzIwMDQtMDgtMTAgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2FyZ3MgKTogOC1hbGlnbiBhbGwgc3RhY2sgYXJndW1lbnRzLgorCisyMDA0LTA4LTAxICBSb2JlcnQgTWlsbGFuICA8cm9iZXJ0bWhAZ251Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBEZXRlY3Qga25ldGJzZC1nbnUgYW5kIGtmcmVlYnNkLWdudS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNC0wNy0zMCAgTWFjaWVqIFcuIFJvenlja2kgIDxtYWNyb0BsaW51eC1taXBzLm9yZz4KKworCSogYWNpbmNsdWRlLm00IChBQ19GVU5DX01NQVBfQkxBQ0tMSVNUKTogQ2hlY2sgZm9yIDxzeXMvbW1hbi5oPgorCWFuZCBtbWFwKCkgZXhwbGljaXRseSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gcHJlc2V0IGF1dG9jb25mIGNhY2hlCisJdmFyaWFibGVzLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNC0wNy0xMSAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEZpeCBDIGFsaWFzaW5nIHZpb2xhdGlvbi4KKwkoZmZpX2NoZWNrX2Zsb2F0X3N0cnVjdCk6IFJlbW92ZSB1bnVzZWQgcHJvdG90eXBlLgorCisyMDA0LTA2LTMwICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmbHVzaF9pY2FjaGUpOiAnOycgaXMgYSBjb21tZW50CisJY2hhcmFjdGVyIG9uIERhcndpbiwgdXNlICdcblx0JyBpbnN0ZWFkLgorCisyMDA0LTA2LTI2ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KKworCSogbGlidG9vbC12ZXJzaW9uOiBGaXggdHlwbyBpbiByZXZpc2lvbi9hZ2UuCisKKzIwMDQtMDYtMTcgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiBsaWJ0b29sLXZlcnNpb246IE5ldy4KKwkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfTERGTEFHUyk6IFVzZSAtdmVyc2lvbi1pbmZvIGZvciBzb25hbWUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNC0wNi0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW06IFJlbW92ZSB1c2VsZXNzIG11bHRpbGliIHJ1bGVzLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlIHdpdGggYXV0b21ha2UgMS44LjUuCisJKiBjb25maWd1cmUuYWM6IFJlbW92ZSB1c2VsZXNzIG11bHRpbGliIGNvbmZpZ3VyeS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNC0wNi0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogLmN2c2lnbm9yZTogTmV3IGZpbGUuCisKKzIwMDQtMDYtMTAgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvaWE2NC91bml4LlMgKGZmaV9jYWxsX3VuaXgpOiBJbnNlcnQgZ3JvdXAgYmFycmllciBicmVhaworCWZwX2RvbmUuCisJKGZmaV9jbG9zdXJlX1VOSVgpOiBGaXggZjE0L2YxNSBhZGp1c3RtZW50IGlmIEZMT0FUX1NaIGlzIGV2ZXIKKwljaGFuZ2VkIGZyb20gOC4KKworMjAwNC0wNi0wNiAgU2VhbiBNY05laWwgIDxzZWFuQG1jbmVpbC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIHg4Nl82NC0qLWZyZWVic2QqIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDQtMjYgIEpvZSBCdWNrIDxqYnVja0B3ZWxzaC1idWNrLm9yZz4KKworCUJ1ZyAxNTA5MworCSogY29uZmlndXJlLmFjOiBUZXN0IGZvciBleGlzdGVuY2Ugb2YgbW1hcCBhbmQgc3lzL21tYW4uaCBiZWZvcmUKKwljaGVja2luZyBibGFja2xpc3QuICBGaXggc3VnZ2VzdGVkIGJ5IEppbSBXaWxzb24uCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDQtMjYgIE1hdHQgQXVzdGVybiAgPGF1c3Rlcm5AYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogR28gdGhyb3VnaCBhIG5vbi1sYXp5IHBvaW50ZXIgZm9yIGluaXRpYWwKKwlGREUgbG9jYXRpb24uCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwNC0wNC0yNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMgKG1haW4pOiBGaXggaW5pdGlhbGl6YXRpb24KKwllcnJvci4gUmVwb3J0ZWQgYnkgVGhvbWFzIEhlbGxlciA8dGhlbGxlckBweXRob24ubmV0Pi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgKG1haW4pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMgKG1haW4pOiBMaWtld2lzZS4KKworMjAwNC0wMy0yMCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisKKwkqIHNyYy9wYS9saW51eC5TOiBGaXggdHlwby4KKworMjAwNC0wMy0xOSAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBVcGRhdGUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHNyYy9wYS9mZmkuaC5pbjogUmVtb3ZlLgorCSogc3JjL3BhL2ZmaXRhcmdldC5oOiBOZXcgZmlsZS4KKworMjAwNC0wMi0xMCAgUmFuZG9scGggQ2h1bmcgIDx0YXVzcUBkZWJpYW4ub3JnPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIFBBIHN1cHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmUuYWM6IEFkZCBQQSB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBzcmMvcGEvZmZpLmM6IE5ldyBmaWxlLgorCSogc3JjL3BhL2ZmaS5oLmluOiBBZGQgUEEgc3VwcG9ydC4KKwkqIHNyYy9wYS9saW51eC5TOiBOZXcgZmlsZS4KKwkqIHByZXBfY2lmLmM6IEFkZCBQQSBzdXBwb3J0LgorCisyMDA0LTAzLTE2ICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+CisKKwkqIHNyYy90eXBlcy5jOiBGaXggYWxpZ25tZW50IHNpemUgb2YgWDg2X1dJTjMyIGNhc2UgaW50NjQgYW5kCisJZG91YmxlLgorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFJlcGxhY2UgZWNpZi0+Y2lmLT5ydHlwZS0+dHlwZQorCXdpdGggZWNpZi0+Y2lmLT5mbGFncy4KKwkoZmZpX2NhbGwsIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IFJlcGxhY2UgY2lmLT5ydHlwZS0+dHlwZQorCXdpdGggY2lmLT5mbGFncy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgWDg2X1dJTjMyIHN0cnVjdCBjYXNlLgorCShmZmlfY2xvc3VyZV9TWVNWKTogQWRkIDEgb3IgMi1ieXRlcyBzdHJ1Y3QgY2FzZSBmb3IgWDg2X1dJTjMyLgorCSogc3JjL3g4Ni93aW4zMi5TIChyZXRzdHJ1Y3QxYiwgcmV0c3RydWN0MmIsIHNjX3JldHN0cnVjdDFiLAorCXNjX3JldHN0cnVjdDJiKTogQWRkIGZvciAxIG9yIDItYnl0ZXMgc3RydWN0IGNhc2UuCisKKzIwMDQtMDMtMTUgS2VsbGV5IENvb2sgPGtjb29rQGdjYy5nbnUub3JnPgorCisJKiBjb25maWd1cmUuaW46IFJlbmFtZSBmaWxlIHRvIC4uLgorCSogY29uZmlndXJlLmFjOiAuLi4gdGhpcy4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA0LTAzLTEyICBNYXR0IEF1c3Rlcm4gIDxhdXN0ZXJuQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEZpeCBFSCBpbmZvcm1hdGlvbiBzbyBpdCBjb3JyZXNwb25kcyB0bworCWNoYW5nZXMgaW4gRUggZm9ybWF0IHJlc3VsdGluZyBmcm9tIGFkZGl0aW9uIG9mIGxpbmtvbmNlIHN1cHBvcnQuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwNC0wMy0xMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCSAgICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IFNldCB0aGVtLgorCVJlbW92ZSBWUEFUSC4gUmVtb3ZlIHJ1bGVzIGZvciBvYmplY3QgZmlsZXMuIFJlbW92ZSBtdWx0aWxpYiBzdXBwb3J0LgorCShBTV9DQ0FTRkxBR1MpOiBBZGQuCisJKiBjb25maWd1cmUuaW4gKEFDX0NPTkZJR19IRUFERVJTKTogUmVsYWNlIEFNX0NPTkZJR19IRUFERVIuCisJKEFDX1BSRVJFUSk6IEJ1bXAgdmVyc2lvbiB0byAyLjU5LgorCShBQ19JTklUKTogRmlsbCB3aXRoIHZlcnNpb24gaW5mbyBhbmQgYnVnIGFkZHJlc3MuCisJKE9SSUdJTkFMX0xEX0ZPUl9NVUxUSUxJQlMpOiBSZW1vdmUuCisJKEFNX0VOQUJMRV9NVUxUSUxJQik6IFVzZSB0aGlzIGluc3RlYWQgb2YgQUNfQVJHX0VOQUJMRS4KKwlEZS1wcmVjaW91cyBDQyBzbyB0aGF0IHRoZSByaWdodCBmbGFncyBhcmUgcGFzc2VkIGRvd24gdG8gbXVsdGlsaWJzLgorCShBQ19NU0dfRVJST1IpOiBSZXBsYWNlIG9ic29sZXRlIG1hY3JvIEFDX0VSUk9SLgorCShBQ19DT05GSUdfRklMRVMpOiBSZXBsYWNlIG9ic29sZXRlIG1hY3JvIEFDX0xJTktfRklMRVMuCisJKEFDX09VVFBVVCk6IFJlb3JnYW5pemUgdGhlIG91dHB1dCB3aXRoIEFDX0NPTkZJR19DT01NQU5EUy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGFjbG9jYWwubTQ6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCisKKzIwMDQtMDMtMTEgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisKKwkqIHNyYy9pYTY0L2ZmaS5jIChmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1VOSVgpOiBHZXQgZmxvYXRpbmcgcG9pbnQKKwlhcmd1bWVudHMgZnJvbSBmcCByZWdpc3RlcnMgb25seSBmb3IgdGhlIGZpcnN0IDggcGFyYW1ldGVyIHNsb3RzLgorCURvbid0IGNvbnZlcnQgYSBmbG9hdCBwYXJhbWV0ZXIgd2hlbiBwYXNzZWQgaW4gbWVtb3J5LgorCisyMDA0LTAzLTA5ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBjb25maWcvYWNjcm9zcy5tNCBjb3JyZWN0aW9uLgorCisyMDA0LTAyLTI1ICBNYXR0IEtyYWFpICA8a3JhYWlAYWx1bW5pLmNtdS5lZHU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBDaGFuZ2UKKwllY2lmLT5jaWYtPmJ5dGVzIHRvIGJ5dGVzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBicmFjZXMgYXJvdW5kIG5lc3RlZCBpZiBzdGF0ZW1lbnQuCisKKzIwMDQtMDItMDkgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy90eXBlcy5jIChwb2ludGVyKTogUE9XRVJQQzY0IGhhcyA4IGJ5dGUgcG9pbnRlcnMuCisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBDb3JyZWN0IGxvbmcgZG91YmxlIGhhbmRsaW5nLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IEZpeCB0eXBvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IFBhc3MgLW1sb25nLWRvdWJsZS0xMjgKKwlmb3IgcG93ZXJwYzY0LSotKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogTGlrZXdpc2UuCisKKzIwMDQtMDItMDggIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCA8RkZJX0xJTlVYNjQ+KTogQ29ycmVjdAorCWxvbmcgZG91YmxlIGZ1bmN0aW9uIHJldHVybiBhbmQgbG9uZyBkb3VibGUgYXJnIGhhbmRsaW5nLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IEZvcm1hdHRpbmcuICBEZWxldGUgdW51c2VkICJuZyIgdmFyLgorCVVzZSAiZW5kX3BmciIgaW5zdGVhZCBvZiAibmYiLiAgQ29ycmVjdCBsb25nIGRvdWJsZSBoYW5kbGluZy4KKwlMb2NhbGlzZSAidGVtcCIuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBTYXZlIGYyIGxvbmcgZG91YmxlCisJcmV0dXJuIHZhbHVlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQpOiBBbGxvY2F0ZQorCXNwYWNlIGZvciBsb25nIGRvdWJsZSByZXR1cm4gdmFsdWUuICBBZGp1c3Qgc3RhY2sgZnJhbWUgYW5kIG9mZnNldHMuCisJTG9hZCBmMiBsb25nIGRvdWJsZSByZXR1cm4uCisKKzIwMDQtMDItMDcgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy90eXBlcy5jOiBVc2UgMTYgYnl0ZSBsb25nIGRvdWJsZSBmb3IgUE9XRVJQQzY0LgorCisyMDA0LTAxLTI1ICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjkpOiBTaGlmdCB0aGUgcGFyYW1ldGVyIGFycmF5CisJd2hlbiB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzIGlzIHBhc3NlZCBpbiAlbzAuCisJKGZmaV9WOV9yZXR1cm5fc3RydWN0KTogUmVuYW1lIGludG8gZmZpX3Y5X2xheW91dF9zdHJ1Y3QuCisJKGZmaV92OV9sYXlvdXRfc3RydWN0KTogQWxpZ24gdGhlIGZpZWxkIGZvbGxvd2luZyBhIG5lc3RlZCBzdHJ1Y3R1cmUKKwlvbiBhIHdvcmQgYm91bmRhcnkuICBVc2UgbWVtbW92ZSBpbnN0ZWFkIG9mIG1lbWNweS4KKwkoZmZpX2NhbGwpOiBVcGRhdGUgY2FsbCB0byBmZmlfVjlfcmV0dXJuX3N0cnVjdC4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IERlZmluZSAnY3R4JyBvbmx5IGZvciBWOC4KKwkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXIpOiBDbG9uZSBpbnRvIGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y4CisJYW5kIGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y5LgorCShmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OCk6IFJldHVybiBsb25nIGRvdWJsZXMgYnkgcmVmZXJlbmNlLgorCUFsd2F5cyBza2lwIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MuICBGb3Igc3RydWN0dXJlcyBhbmQgbG9uZworCWRvdWJsZXMsIGNvcHkgdGhlIGFyZ3VtZW50IGRpcmVjdGx5LgorCShmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OSk6IFNraXAgdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcyBvbmx5CisJaWYgcmVxdWlyZWQuICBTaGlmdCB0aGUgbWF4aW11bSBmbG9hdGluZy1wb2ludCBzbG90IGFjY29yZGluZ2x5LiAgRm9yCisJYmlnIHN0cnVjdHVyZXMsIGNvcHkgdGhlIGFyZ3VtZW50IGRpcmVjdGx5OyBvdGhlcndpc2UsIGxlZnQtanVzdGlmeSB0aGUKKwlhcmd1bWVudCBhbmQgY2FsbCBmZmlfdjlfbGF5b3V0X3N0cnVjdCB0byBsYXkgb3V0IHRoZSBzdHJ1Y3R1cmUgb24KKwl0aGUgc3RhY2suCisJKiBzcmMvc3BhcmMvdjguUzogVW5kZWYgU1RBQ0tGUkFNRSBiZWZvcmUgZGVmaW5pbmcgaXQuCisJKGZmaV9jbG9zdXJlX3Y4KTogUGFzcyB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAgVXBkYXRlIGNhbGwgdG8KKwlmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OC4gIFNob3J0LWNpcmN1aXQgRkZJX1RZUEVfSU5UIGhhbmRsaW5nLgorCVNraXAgdGhlICd1bmltcCcgaW5zbiB3aGVuIHJldHVybmluZyBsb25nIGRvdWJsZXMgYW5kIHN0cnVjdHVyZXMuCisJKiBzcmMvc3BhcmMvdjkuUzogVW5kZWYgU1RBQ0tGUkFNRSBiZWZvcmUgZGVmaW5pbmcgaXQuCisJKGZmaV9jbG9zdXJlX3Y5KTogSW5jcmVhc2UgdGhlIGZyYW1lIHNpemUgYnkgMiB3b3Jkcy4gIFNob3J0LWNpcmN1aXQKKwlGRklfVFlQRV9JTlQgaGFuZGxpbmcuICBMb2FkIHN0cnVjdHVyZXMgYm90aCBpbiBpbnRlZ2VycyBhbmQKKwlmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgb24gcmV0dXJuLgorCSogUkVBRE1FOiBVcGRhdGUgc3RhdHVzIG9mIHRoZSBTUEFSQyBwb3J0LgorCisyMDA0LTAxLTI0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYyAobWFpbik6IFRyZWF0IHJlc3VsdCB2YWx1ZQorCWFzIG9mIHR5cGUgZmZpX2FyZy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMgKG1haW4pOiBGaXggQ0hFQ0suCisKKzIwMDQtMDEtMjIgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKGNsc19yZXRfdWludF9mbik6IFRyZWF0IHJlc3VsdAorCXZhbHVlIGFzIG9mIHR5cGUgZmZpX2FyZywgbm90IHVuc2lnbmVkIGludC4KKworMjAwNC0wMS0yMSAgTWljaGFlbCBSaXR6ZXJ0ICA8cml0emVydEB0LW9ubGluZS5kZT4KKworCSogZmZpNjQuYyAoZmZpX3ByZXBfYXJncyk6IENhc3QgdGhlIFJIUyBvZiBhbiBhc3NpZ25tZW50IGluc3RlYWQKKwlvZiB0aGUgTEhTLgorCisyMDA0LTAxLTEyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogU2V0IExEX0xJQlJBUllfUEFUSF8zMiBmb3IKKwlTb2xhcmlzLgorCisyMDA0LTAxLTA4ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCAoYWxsb2NhdGVfbW1hcCk6IENhc3QgTUFQX0ZBSUxFRAorCXRvIHZvaWQgKi4KKworMjAwMy0xMi0xMCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IENhc3QgcG9pbnRlcnMgdG8KKwlzaXplX3QgaW5zdGVhZCBvZiBpbnQuCisKKzIwMDMtMTItMDQgIEhvc2FrYSBZdWppICA8aG9zQHRhbWFuZWdpLm9yZz4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogSW5jbHVkZSA8ZmxvYXQuaD4uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jIChtYWluKTogUmVwbGFjZSB2YXJpYWJsZQorCWludCBpIHdpdGggdW5zaWduZWQgbG9uZyB1bC4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYzogTGlrZXdpc2UuCisKKzIwMDMtMTItMDIgIEhvc2FrYSBZdWppICA8aG9zQHRhbWFuZWdpLm9yZz4KKworCVBSIG90aGVyLzEzMjIxCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOgorCUFsaWduIGFyZ3VtZW50cyB0byAzMiBiaXRzLgorCisyMDAzLTEyLTAxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwlQUiBvdGhlci8xMzIyMQorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYzogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYzogTGlrZXdpc2UuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBDb3NtZXRpY3MuCisKKzIwMDMtMTEtMjYgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogSW5jbHVkZSA8ZmNudGwuaD4uCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KKworMjAwMy0xMS0yMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogQ29udmVydCB0aGUgbW1hcCB0bworCXRoZSByaWdodCB0eXBlLgorCisyMDAzLTExLTIxICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CisJICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogYWNpbmNsdWRlLm00OiBBZGQgQUNfRlVOQ19NTUFQX0JMQUNLTElTVC4KKwkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19GVU5DX01NQVBfQkxBQ0tMSVNULgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBhY2xvY2FsLm00OiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisJKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IEFkZCBpbmNsdWRlIGRpci4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBNTUFQIGRlZmluaXRpb25zLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogVXNlIE1NQVAgZnVuY3Rpb25hbGl0eQorCWZvciBmZmlfY2xvc3VyZSBpZiBhdmFpbGFibGUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KKworMjAwMy0xMS0yMCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IE1ha2UgdGhlIC1sZ2NjX3MgY29uZGl0aW9uYWwuCisKKzIwMDMtMTEtMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBBZGQgRFlMRF9MSUJSQVJZX1BBVEggZm9yIGRhcndpbi4KKwlBZGQgLWxnY2NfcyB0byBhZGRpdGlvbmFsIGZsYWdzLgorCisyMDAzLTExLTEyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5hbTogUFIgbGliZ2NqLzExMTQ3LCBpbnN0YWxsCisJdGhlIGZmaXRhcmdldC5oIGhlYWRlciBmaWxlIGluIGEgZ2NjIHZlcnNpb25lZCBhbmQgdGFyZ2V0CisJZGVwZW5kZW50IHBsYWNlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKwkqIE1ha2VmaWxlLmluLCBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisKKzIwMDMtMTEtMDkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFByaW50IHJlc3VsdCBhbmQgY2hlY2sKKwl3aXRoIGRnLW91dHB1dCB0byBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBNYWtlIGZmaV9jbG9zdXJlCisJc3RhdGljLgorCisyMDAzLTExLTA4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KKworMjAwMy0xMS0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBEbyBhIGNoZWNrIG9uIHRoZSByZXN1bHQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYzogQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKworMjAwMy0xMS0wNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogTW92ZSB0aGUgdmFsaWRpdHkgY2hlY2sgYWZ0ZXIKKwl0aGUgaW5pdGlhbGl6YXRpb24uCisKKzIwMDMtMTAtMjMgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9wdHJhcnJheV90b19yYXcpOiBSZXBsYWNlCisJRkZJX0FTU0VSVChGQUxTRSkgd2l0aCBGRklfQVNTRVJUKDApLgorCisyMDAzLTEwLTIyICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogUmVwbGFjZSB1bmRlZmluZWQgVUlOVDMyIGFuZCBmcmllbmRzIHdpdGgKKwlfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSkgYW5kIGZyaWVuZHMuCisKKzIwMDMtMTAtMjIgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisKKwkqIHNyYy9pYTY0L2ZmaS5jOiBSZXBsYWNlIEZBTFNFL1RSVUUgd2l0aCBmYWxzZS90cnVlLgorCisyMDAzLTEwLTIxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGNvbmZpZ3VyZS5pbjogQUNfTElOS19GSUxFUyhmZml0YXJnZXQuaCkuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBNYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCisKKzIwMDMtMTAtMjEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisJICAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwlBdm9pZCB0aGF0IGZmaS5oIGluY2x1ZGVzIGZmaWNvbmZpZy5oLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEluY2x1ZGUgZmZpdGFyZ2V0LmggZmlsZXMKKwkoVEFSR0VUX1NSQ19NSVBTX0dDQyk6IFJlbmFtZWQgdG8gVEFSR0VUX1NSQ19NSVBTX0lSSVguCisJKFRBUkdFVF9TUkNfTUlQU19TR0kpOiBSZW1vdmVkLgorCShNSVBTX0dDQyk6IFJlbmFtZWQgdG8gVEFSR0VUX1NSQ19NSVBTX0lSSVguCisJKE1JUFNfU0dJKTogUmVtb3ZlZC4KKwkoQ0xFQU5GSUxFUyk6IFJlbW92ZWQuCisJKG1vc3RseWNsZWFuLWFtLCBjbGVhbi1hbSwgbW9zdGx5Y2xlYW4tc3ViLCBjbGVhbi1zdWIpOiBOZXcKKwl0YXJnZXRzLgorCSogYWNjb25maWcuaDogUmVtb3ZlZC4KKwkqIGNvbmZpZ3VyZS5pbjogQ29tcHV0ZSBzaXplb2ZzIG9ubHkgZm9yIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUuCisJVXNlIHRoZW0gdG8gZGVmaW5lIGFuZCBzdWJzdCBIQVZFX0xPTkdfRE9VQkxFLiAgSW5jbHVkZSBjb21tZW50cworCWludG8gQUNfREVGSU5FIGluc3RlYWQgb2YgdXNpbmcgYWNjb25maWcuaC4gIENyZWF0ZQorCWluY2x1ZGUvZmZpdGFyZ2V0LmggaW5zdGVhZCBvZiBpbmNsdWRlL2ZmaWNvbmZpZy5oLiAgUmVuYW1lCisJTUlQU19HQ0MgdG8gTUlQU19JUklYLCBkcm9wIE1JUFNfU0dJIHNpbmNlIHdlIGFyZSBpbiBnY2MncyB0cmVlLgorCUFDX0RFRklORSBFSF9GUkFNRV9GTEFHUy4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuYW0gKERJU1RDTEVBTkZJTEVTKTogTmV3IGF1dG9tYWtlIG1hY3JvLgorCShoYWNrX0RBVEEpOiBBZGQgZmZpdGFyZ2V0LmguCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBSZW1vdmUgYWxsIHN5c3RlbSBzcGVjaWZpYyBkZWZpbml0aW9ucy4KKwlEZWNsYXJlIHJhdyBBUEkgZXZlbiBpZiBpdCBpcyBub3QgaW5zdGFsbGVkLCB3aHkgYm90aGVyPworCVVzZSBsaW1pdHMuaCBpbnN0ZWFkIG9mIFNJWkVPRl8qIHRvIGRlZmluZSBmZmlfdHlwZV8qLiAgRG8KKwlub3QgZGVmaW5lIEVIX0ZSQU1FX0ZMQUdTLCBpdCBpcyBpbiBmZmljb25maWcuaCBub3cuICBJbmNsdWRlCisJZmZpdGFyZ2V0LmggaW5zdGVhZCBvZiBmZmljb25maWcuaC4gIFJlbW92ZSBBTElHTiBtYWNyby4KKwkoVUlOVF9BUkcsIElOVF9BUkcpOiBSZW1vdmVkLCB1c2UgZmZpX2FyZyBhbmQgZmZpX3NhcmcgaW5zdGVhZC4KKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChib29sKTogRG8gbm90IGRlZmluZS4KKwkoZmZpX2Fzc2VydCk6IEFjY2VwdCBmYWlsZWQgYXNzZXJ0aW9uLgorCShmZmlfdHlwZV90ZXN0KTogUmV0dXJuIHZvaWQgYW5kIGFjY2VwdCBmaWxlL2xpbmUuCisJKEZGSV9BU1NFUlQpOiBQYXNzIHN0cmluZ2l6ZWQgZmFpbGVkIGFzc2VydGlvbi4KKwkoRkZJX0FTU0VSVF9BVCk6IE5ldyBtYWNyby4KKwkoRkZJX0FTU0VSVF9WQUxJRF9UWVBFKTogTmV3IG1hY3JvLgorCShVSU5UOCwgU0lOVDgsIFVJTlQxNiwgU0lOVDE2LCBVSU5UMzIsIFNJTlQzMiwKKwlVSU5UNjQsIFNJTlQ2NCk6IERlZmluZSBoZXJlIHdpdGggZ2NjJ3MgX19hdHRyaWJ1dGVfXyBtYWNybworCWluc3RlYWQgb2YgaW4gZmZpLmgKKwkoRkxPQVQzMiwgQUxJR04pOiBEZWZpbmUgaGVyZSBpbnN0ZWFkIG9mIGluIGZmaS5oCisJKiBpbmNsdWRlL2ZmaS1taXBzLmg6IFJlbW92ZWQuICBJdHMgY29udGVudCBtb3ZlZCB0bworCXNyYy9taXBzL2ZmaXRhcmdldC5oIGFmdGVyIHNlcGFyYXRpbmcgYXNzZW1ibHkgYW5kIEMgc2VjdGlvbnMuCisJKiBzcmMvYWxwaGEvZmZpLmMsIHNyYy9hbHBoYS9mZmkuYywgc3JjL2phdmFfcmF3X2FwaS5jCisJc3JjL3ByZXBfY2lmLmMsIHNyYy9yYXdfYXBpLmMsIHNyYy9pYTY0L2ZmaS5jLAorCXNyYy9taXBzL2ZmaS5jLCBzcmMvbWlwcy9uMzIuUywgc3JjL21pcHMvbzMyLlMsCisJc3JjL21pcHMvZmZpdGFyZ2V0LmgsIHNyYy9zcGFyYy9mZmkuYywgc3JjL3g4Ni9mZmk2NC5jOgorCVNJWkVPRl9BUkcgLT4gRkZJX1NJWkVPRl9BUkcuCisJKiBzcmMvaWE2NC9mZmkuYzogSW5jbHVkZSBzdGRib29sLmggKHByb3ZpZGVkIGJ5IEdDQyAyLjk1KykuCisJKiBzcmMvZGVidWcuYyAoZmZpX2Fzc2VydCk6IEFjY2VwdCBzdHJpbmdpemVkIGZhaWxlZCBhc3NlcnRpb24uCisJKGZmaV90eXBlX3Rlc3QpOiBSZXdyaXR0ZW4uCisJKiBzcmMvcHJlcC1jaWYuYyAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUsIGZmaV9wcmVwX2NpZik6IENhbGwKKwlGRklfQVNTRVJUX1ZBTElEX1RZUEUuCisJKiBzcmMvYWxwaGEvZmZpdGFyZ2V0LmgsIHNyYy9hcm0vZmZpdGFyZ2V0LmgsCisJc3JjL2lhNjQvZmZpdGFyZ2V0LmgsIHNyYy9tNjhrL2ZmaXRhcmdldC5oLAorCXNyYy9taXBzL2ZmaXRhcmdldC5oLCBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCwKKwlzcmMvczM5MC9mZml0YXJnZXQuaCwgc3JjL3NoL2ZmaXRhcmdldC5oLAorCXNyYy9zaDY0L2ZmaXRhcmdldC5oLCBzcmMvc3BhcmMvZmZpdGFyZ2V0LmgsCisJc3JjL3g4Ni9mZml0YXJnZXQuaDogTmV3IGZpbGVzLgorCSogc3JjL2FscGhhL29zZi5TLCBzcmMvYXJtL3N5c3YuUywgc3JjL2lhNjQvdW5peC5TLAorCXNyYy9tNjhrL3N5c3YuUywgc3JjL21pcHMvbjMyLlMsIHNyYy9taXBzL28zMi5TLAorCXNyYy9wb3dlcnBjL2FpeC5TLCBzcmMvcG93ZXJwYy9kYXJ3aW4uUywKKwlzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMsIHNyYy9wb3dlcnBjL2xpbnV4NjQuUywKKwlzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUywgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUywKKwlzcmMvcG93ZXJwYy9zeXN2LlMsIHNyYy9zMzkwL3N5c3YuUywgc3JjL3NoL3N5c3YuUywKKwlzcmMvc2g2NC9zeXN2LlMsIHNyYy9zcGFyYy92OC5TLCBzcmMvc3BhcmMvdjkuUywKKwlzcmMveDg2L3N5c3YuUywgc3JjL3g4Ni91bml4NjQuUywgc3JjL3g4Ni93aW4zMi5TOgorCWluY2x1ZGUgZmZpY29uZmlnLmgKKworMjAwMy0xMC0yMCAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy9taXBzL2ZmaS5jOiBVc2UgX0FCSU4zMiwgX0FCSU8zMiBpbnN0ZWFkIG9mIGV4dGVybmFsCisJX01JUFNfU0lNX05BQkkzMiwgX01JUFNfU0lNX0FCSTMyLgorCisyMDAzLTEwLTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IERlY2xhcmUgYnl0ZXMgYWdhaW4uCisJVXNlZCB3aGVuIEZGSV9ERUJVRyA9IDEuCisKKzIwMDMtMTAtMTQgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy90eXBlcy5jIChkb3VibGUsIGxvbmdkb3VibGUpOiBEZWZhdWx0IFBPV0VSUEM2NCB0byA4IGJ5dGUgc2l6ZQorCWFuZCBhbGlnbi4KKworMjAwMy0xMC0wNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGluY2x1ZGUvZmZpX21pcHMuaDogRGVmaW5lIEZGSV9NSVBTX04zMiBmb3IgTjMyL042NCBBQklzLAorCUZGSV9NSVBTX08zMiBmb3IgTzMyIEFCSS4KKworMjAwMy0xMC0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFNldCBMRF9MSUJSQVJZX1BBVEhfNjQgZm9yCisJU1BBUkM2NC4gQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKworMjAwMy0wOS0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogWGZhaWwgbWlwcywgYXJtLAorCXN0cm9uZ2FybSwgeHNjYWxlLiBDbGVhbnVwIHdoaXRlc3BhY2VzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYzogQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKworMjAwMy0wOS0xOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXguUzogQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDAzLTA5LTE4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBDbGVhbnVwIHdoaXRlc3BhY2VzLCBjb21tZW50IGZvcm1hdHRpbmcuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCisKKzIwMDMtMDktMTggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKwkgICAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvdHlwZXMuYyAoZG91YmxlKTogQWRkIEFJWCBhbmQgRGFyd2luIHRvIHRoZSByaWdodCBUWVBFREVGLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogUmVtb3ZlIHRoZSBwb2ludGVyIHRvIHRoZSBvdXRnb2luZworCXBhcmFtZXRlciBzdGFjay4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogSGFuZGxlIHN0cnVjdHVyZXMKKwlhY2NvcmRpbmcgdG8gdGhlIERhcndpbi9BSVggQUJJLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogTGlrZXdpc2UuCisJUmVtb3ZlIHRoZSBvdXRnb2luZyBwYXJhbWV0ZXIgc3RhY2sgbG9naWMuIFNpbXBsaWZ5IHRoZSBldmFsdWF0aW9uCisJb2YgdGhlIGRpZmZlcmVudCBDQVNFIHR5cGVzLgorCShmZmlfcHJlcF9jbG91c3VyZSk6IEF2b2lkIHRoZSBjYXN0cyBvbiBsdmFsdWVzLiBDaGFuZ2UgdGhlIGJyYW5jaAorCXN0YXRlbWVudCBpbiB0aGUgdHJhbXBvbGluZSBjb2RlLgorCisyMDAzLTA5LTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogVGFrZSBhY2NvdW50IGludG8gdGhlIGFsaWduZW1lbnQKKwlmb3IgdGhlIHJlZ2lzdGVyIHNpemUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogSGFuZGxlIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlCisJYWRkcmVzcyBjb3JyZWN0bHkuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0eXBlIHdoZW4KKwl0aGUgcmVnaXN0ZXJzIGFyZSB1c2VkIGZvciB0aGUgc3RydWN0dXJlIHJldHVybiB2YWx1ZS4KKwkqIHNyYy9zaC9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBGaXggdGhlIHN0YWNrIGxheW91dCBmb3IKKwl0aGUgNjQtYml0IHJldHVybiB2YWx1ZS4gIFVwZGF0ZSBjb3B5cmlnaHQgeWVhcnMuCisKKzIwMDMtMDktMTcgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IFNlYXJjaCBpbgorCXNyY2RpciBmb3IgZmZpX21pcHMuaC4KKworMjAwMy0wOS0xMiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3ByZXBfY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlKTogSW5jbHVkZSB0YWlsIHBhZGRpbmcgaW4KKwlzdHJ1Y3R1cmUgc2l6ZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogQ29ycmVjdAorCXBsYWNlbWVudCBvZiBmbG9hdCByZXN1bHQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYyAoY2xvc3VyZV90ZXN0X2ZuMSk6IENvcnJlY3QKKwljYXN0IG9mICJyZXNwIiBmb3IgYmlnLWVuZGlhbiA2NCBiaXQgbWFjaGluZXMuCisKKzIwMDMtMDktMTEgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy90eXBlcy5jIChkb3VibGUsIGxvbmdkb3VibGUpOiBNZXJnZSBpZGVudGljYWwgU0ggYW5kIEFSTQorCXR5cGVkZWZzLCBhbmQgYWRkIFBPV0VSUEM2NC4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBDb3JyZWN0IG5leHRfYXJnIGNhbGMgZm9yCisJc3RydWN0IHNwbGl0IG92ZXIgZ3ByIGFuZCByZXN0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENvcnJlY3QgaW50YXJnX2NvdW50IGZvciBzdHJ1Y3R1cmVzLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogRml4IGdwciBvZmZzZXRzLgorCisyMDAzLTA5LTA5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVikgSGFuZGxlIHN0cnVjdAorCXBhc3NpbmcgY29ycmVjdGx5LgorCisyMDAzLTA5LTA5ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDMtMDktMDQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW06IFJlbW92ZSBidWlsZCBydWxlcyBmb3IgZmZpdGVzdC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDAzLTA5LTA0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYzogSW5jbHVkZSA8c3RkbGliLmg+IHRvIGZpeCBjb21waWxlciB3YXJuaW5nCisJYWJvdXQgaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgYWJvcnQoKS4KKworMjAwMy0wOS0wNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIGRlamFnbnUgdGVzdCBmcmFtZXdvcmsuIEZpeGVzIFBSIG90aGVyLzExNDExLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IEFkZCBkZWphZ251IHRlc3QgZnJhbWV3b3JrLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06IE5ldyBmaWxlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBCdWlsdAorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9jb25maWcvZGVmYXVsdC5leHA6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q1LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IE5ldyBmaWxlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisKKworMjAwMy0wOC0xMyAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoT0ZTX0lOVDE2KTogU2V0IDAgZm9yIGxpdHRsZSBlbmRpYW4gY2FzZS4gIFVwZGF0ZQorCWNvcHlyaWdodCB5ZWFycy4KKworMjAwMy0wOC0wMiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3M2NCk6IE1vZGlmeSBmb3IgY2hhbmdlZCBnY2MKKwlzdHJ1Y3R1cmUgcGFzc2luZy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogUmVtb3ZlIGNvZGUgd3JpdGluZyB0byBwYXJtIHNhdmUgYXJlYS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogVXNlIHJldHVybgorCWFkZHJlc3MgaW4gbHIgZnJvbSBmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCBjYWxsIHRvIGNhbGN1bGF0ZQorCXRhYmxlIGFkZHJlc3MuICBPcHRpbWl6ZSBmdW5jdGlvbiB0YWlsLgorCisyMDAzLTA3LTI4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9zcGFyYy9mZmkuYzogSGFuZGxlIGFsbCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuIEZpeGVzIHNlY29uZCBwYXJ0IG9mIFBSIHRhcmdldC8xMTQxMC4KKworMjAwMy0wNy0xMSAgR2VyYWxkIFBmZWlmZXIgIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgorCisJKiBSRUFETUU6IE5vdGUgdGhhdCBsaWJmZmkgaXMgbm90IHBhcnQgb2YgR0NDLiAgVXBkYXRlIHRoZSBwcm9qZWN0CisJVVJMIGFuZCBzdGF0dXMuCisKKzIwMDMtMDYtMTkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogSW5jbHVkZSBmZmkuaC4KKworMjAwMy0wNi0xMyAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy94ODYvc3lzdi5TOiBBdm9pZCBnYXMtb25seSAudWxlYjEyOC8uc2xlYjEyOCBkaXJlY3RpdmVzLgorCVVzZSBDIHN0eWxlIGNvbW1lbnRzLgorCisyMDAzLTA2LTEzICBLYXogS29qaW1hICA8a2tvamltYUByci5paWo0dS5vci5qcD4KKworCSogTWFrZWZpbGUuYW06IEFkZCBTSG1lZGlhIHN1cHBvcnQuICBGaXggYSB0eXBvIG9mIFNIIHN1cHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZS5pbiAoc2g2NC0qLWxpbnV4Kiwgc2g1Ki0qLWxpbnV4Kik6IEFkZCB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgU0htZWRpYSBzdXBwb3J0LgorCSogc3JjL3NoNjQvZmZpLmM6IE5ldyBmaWxlLgorCSogc3JjL3NoNjQvc3lzdi5TOiBOZXcgZmlsZS4KKworMjAwMy0wNS0xNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9ST19FSF9GUkFNRSk6IENoZWNrIHdoZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24KKwlzaG91bGQgYmUgcmVhZC1vbmx5LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBpbmNsdWRlL2ZmaS5oLmluIChFSF9GUkFNRV9GTEFHUyk6IERlZmluZS4KKwkqIHNyYy9hbHBoYS9vc2YuUzogVXNlIEVIX0ZSQU1FX0ZMQUdTLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4gIEluY2x1ZGUgZmZpLmguCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4gIFVzZSBwY3JlbCBlbmNvZGluZworCWlmIC1mcGljLy1mUElDLy1tcmVsb2NhdGFibGUuCisJKiBzcmMvcG93ZXJwYy9wb3dlcnBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvdjguUzogSWYgSEFWRV9ST19FSF9GUkFNRSBpcyBkZWZpbmVkLCBkb24ndCBpbmNsdWRlCisJI3dyaXRlIGluIC5laF9mcmFtZSBmbGFncy4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvdW5peDY0LlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4KKwkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4gIFVzZSBwY3JlbCBlbmNvZGluZyBpZiAtZnBpYy8tZlBJQy4KKwkqIHNyYy9zMzkwL3N5c3YuUzogVXNlIEVIX0ZSQU1FX0ZMQUdTLiAgSW5jbHVkZSBmZmkuaC4KKworMjAwMy0wNS0wNyAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJRml4ZXMgUFIgYm9vdHN0cmFwLzEwNjU2CisJKiBjb25maWd1cmUuaW4gKEhBVkVfQVNfUkVHSVNURVJfUFNFVURPX09QKTogVGVzdCBhc3NlbWJsZXIKKwlzdXBwb3J0IGZvciAucmVnaXN0ZXIgcHNldWRvLW9wLgorCSogc3JjL3NwYXJjL3Y4LlM6IFVzZSBpdC4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAzLTA0LTE4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoUE9XRVJQQzY0KTogRGVmaW5lIGlmIDY0LWJpdC4KKwkoZW51bSBmZmlfYWJpKTogQWRkIEZGSV9MSU5VWDY0IG9uIFBPV0VSUEMuCisJTWFrZSBpdCB0aGUgZGVmYXVsdCBvbiBQT1dFUlBDNjQuCisJKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgdG8gMjQgb24gUE9XRVJQQzY0LgorCSogY29uZmlndXJlLmluOiBDaGFuZ2UgcG93ZXJwYy0qLWxpbnV4KiBpbnRvIHBvd2VycGMqLSotbGludXgqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGhpZGRlbik6IERlZmluZS4KKwkoZmZpX3ByZXBfYXJnc19TWVNWKTogUmVuYW1lZCBmcm9tCisJZmZpX3ByZXBfYXJncy4gIENhc3QgcG9pbnRlcnMgdG8gdW5zaWduZWQgbG9uZyB0byBzaHV0IHVwIHdhcm5pbmdzLgorCShOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQsCisJQVNNX05FRURTX1JFR0lTVEVSUzY0KTogTmV3LgorCShmZmlfcHJlcF9hcmdzNjQpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIEZGSV9MSU5VWDY0IEFCSS4KKwkoZmZpX2NhbGwpOiBMaWtld2lzZS4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IExpa2V3aXNlLgorCShmbHVzaF9pY2FjaGUpOiBTdXJyb3VuZCBieSAjaWZuZGVmIFBPV0VSUEM2NC4KKwkoZmZpX2RibGZsKTogTmV3IHVuaW9uIHR5cGUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogVXNlIGl0IHRvIGF2b2lkIGFsaWFzaW5nIHByb2JsZW1zLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IFN1cnJvdW5kIHdob2xlIGZpbGUgYnkgI2lmbmRlZgorCV9fcG93ZXJwYzY0X18uCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgorCShmZmlfY2FsbF9TWVNWKTogUmVuYW1lIGZmaV9wcmVwX2FyZ3MgdG8gZmZpX3ByZXBfYXJnc19TWVNWLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBOZXcgZmlsZS4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBhbmQKKwlzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUy4KKwkoVEFSR0VUX1NSQ19QT1dFUlBDKTogTGlrZXdpc2UuCisKKwkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbiwgY2xvc3VyZV90ZXN0X2ZuMSwgY2xvc3VyZV90ZXN0X2ZuMiwKKwljbG9zdXJlX3Rlc3RfZm4zKTogRml4IHJlc3VsdCBwcmludGluZyBvbiBiaWctZW5kaWFuIDY0LWJpdAorCW1hY2hpbmVzLgorCShtYWluKTogUHJpbnQgdHN0Ml9hcmcgaW5zdGVhZCBvZiB1bmluaXRpYWxpemVkIHRzdDJfcmVzdWx0LgorCisJKiBzcmMvZmZpdGVzdC5jIChtYWluKTogSGlkZSB3aGF0IGNsb3N1cmUgcG9pbnRlciByZWFsbHkgcG9pbnRzIHRvCisJZnJvbSB0aGUgY29tcGlsZXIuCisKKzIwMDMtMDQtMTYgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorCisJKiBjb25maWd1cmUuaW4gKGFybS0qLW5ldGJzZGVsZiopOiBBZGQgY29uZmlndXJhdGlvbi4KKwkoY29uZmlndXJlKTogUmVnZW5lcmF0ZWQuCisKKzIwMDMtMDQtMDQgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CisKKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDMtMDMtMjEgIFpkZW5layBEdm9yYWsgIDxyYWtkdmVyQGF0cmV5Lmthcmxpbi5tZmYuY3VuaS5jej4KKworCSogbGliZmZpL2luY2x1ZGUvZmZpLmguaW46IERlZmluZSBYODYgaW5zdGVhZCBvZiBYODZfNjQgaW4gMzIKKwliaXQgbW9kZS4KKwkqIGxpYmZmaS9zcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6CisJUmVjZWl2ZSBjbG9zdXJlIHBvaW50ZXIgdGhyb3VnaCBwYXJhbWV0ZXIsIHJlYWQgYXJncyB1c2luZworCV9fYnVpbHRpbl9kd2FyZl9jZmEuCisJKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBTZW5kIGNsb3N1cmUgcmVmZXJlbmNlIHRocm91Z2ggZWF4LgorCisyMDAzLTAzLTEyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBjb25maWd1cmUuaW46IEF2b2lkIHRyYWlsaW5nIC8uIGluIHRvb2xleGVjbGliZGlyLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAzLTAzLTAzICBBbmRyZWFzIFRvYmxlciA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogUmVjb2RlIHRvIGZpdCBkeW5hbWljIGxpYnJhcmllcy4KKworMjAwMy0wMi0wNiAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGxpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOgorCUZpeCBhbGlnbmVtZW50IGJ1ZywgYWxsb2NhdGUgOCBieXRlcyBmb3IgdGhlIHJlc3VsdC4KKwkqIGxpYmZmaS9zcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOgorCUxpa2V3aXNlLgorCSogbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzoKKwlVcGRhdGUgc3RhY2tmcmFtZSBkZXNjcmlwdGlvbiBmb3IgYWl4L2Rhcndpbl9jbG9zdXJlLlMuCisKKzIwMDMtMDItMDYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvczM5MC9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBBZGQgaGlkZGVuIHZpc2liaWxpdHkKKwlhdHRyaWJ1dGUuCisKKzIwMDMtMDEtMzEgIENocmlzdGlhbiBDb3JuZWxzc2VuICA8Y2Nvcm5AY3MudHUtYmVybGluLmRlPiwKKwkgICAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKworCSogY29uZmlndXJlLmluOiBBZGp1c3QgY29tbWFuZCB0byBzb3VyY2UgY29uZmlnLW1sLmluIHRvIGFjY291bnQKKwlmb3IgY2hhbmdlcyB0byB0aGUgbGliZmZpX2Jhc2VkaXIgZGVmaW5pdGlvbi4KKwkobGliZmZpX2Jhc2VkaXIpOiBSZW1vdmUgJHtzcmNkaXJ9IGZyb20gdmFsdWUgYW5kIGluY2x1ZGUgdHJhaWxpbmcKKwlzbGFzaCBpZiBub25lbXB0eS4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAzLTAxLTI5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IFJlY29kZSB0byBmaXQgc2hhcmVkIGxpYnMuCisKKzIwMDMtMDEtMjggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBFbmFibGUgRkZJX0NMT1NVUkVTIGZvciB4ODZfNjQuCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcuCisJKGZmaV9jbG9zdXJlX1VOSVg2NF9pbm5lcik6IE5ldy4KKwkqIHNyYy94ODYvdW5peDY0LlMgKGZmaV9jbG9zdXJlX1VOSVg2NCk6IE5ldy4KKworMjAwMy0wMS0yNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAodG9vbGV4ZWNkaXIsIHRvb2xleGVjbGliZGlyKTogU2V0IGFuZCBBQ19TVUJTVC4KKwlSZW1vdmUgVVNFX0xJQkRJUiBjb25kaXRpb25hbC4KKwkqIE1ha2VmaWxlLmFtICh0b29sZXhlY2RpciwgdG9vbGV4ZWNsaWJkaXIpOiBEb24ndCBvdmVycmlkZS4KKwkqIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDMtMDEwMjcgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfUE9XRVJQQ19BSVgpOiBGaXggdHlwby4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDAzLTAxLTIyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKF9mZmlfY2FsbF9BSVgpOiBBZGQgQXVnbWVudGF0aW9uIHNpemUgdG8KKwl1bndpbmQgaW5mby4KKworMjAwMy0wMS0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogQWRkIHVud2luZCBpbmZvLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDMtMDEtMTQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2FyZ3MpOiBDaGVjayBmb3Igdm9pZCByZXR2YWwuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBBZGQgdW53aW5kIGluZm8uCisKKzIwMDMtMDEtMTQgIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KKworCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IE9ubHkgdXNlIGZmaV9jbG9zdXJlcyBpZiB0aG9zZSBhcmUKKwlzdXBwb3J0ZWQuCisKKzIwMDMtMDEtMTMgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGxpYmZmaS9zcmMvZmZpdGVzdC5jCisJIGFkZCBjbG9zdXJlIHRlc3RjYXNlcworCisyMDAzLTAxLTEzIEtldmluIEIuIEhlbmRyaWNrcyA8a2hlbmRyaWNrc0BpdmV5LnV3by5jYT4KKworCSogbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jCisJIGZpeCBhbGlnbm1lbnQgYnVnIGZvciBmbG9hdCAoNCBieXRlIGFsaWduZWQgaXNvIDggYnl0ZSkKKworMjAwMy0wMS0wOSAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogUmVtb3ZlIFJDUyB2ZXJzaW9uIHN0cmluZy4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBSZW1vdmUgUkNTIHZlcnNpb24gc3RyaW5nLgorCisyMDAzLTAxLTAzICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBjbG9zdXJlIGRlZmluZXMgZm9yIFNQQVJDLCBTUEFSQzY0LgorCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IFVzZSBzdGF0aWMgc3RvcmFnZSBmb3IgY2xvc3VyZS4KKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSwgZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXIpOiBOZXcuCisJKiBzcmMvc3BhcmMvdjguUyAoZmZpX2Nsb3N1cmVfdjgpOiBOZXcuCisJKiBzcmMvc3BhcmMvdjkuUyAoZmZpX2Nsb3N1cmVfdjkpOiBOZXcuCisKKzIwMDItMTEtMTAgIFJhbmppdCBNYXRoZXcgPHJtYXRoZXdAaG90bWFpbC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZGVkIEZGSV9TVERDQUxMIGZmaV90eXBlCisJICBlbnVtZXJhdGlvbiBmb3IgWDg2X1dJTjMyLgorCSogc3JjL3g4Ni93aW4zMi5TOiBBZGRlZCBmZmlfY2FsbF9TVERDQUxMIGZ1bmN0aW9uCisJICBkZWZpbml0aW9uLgorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2NhbGwvZmZpX3Jhd19jYWxsKTogQWRkZWQKKwkgIHN3aXRjaCBjYXNlcyBmb3IgcmVjb2duaXNpbmcgRkZJX1NURENBTEwgYW5kCisJICBjYWxsaW5nIGZmaV9jYWxsX1NURENBTEwgaWYgdGFyZ2V0IGlzIFg4Nl9XSU4zMi4KKwkqIHNyYy9mZml0ZXN0LmMgKG15X3N0ZGNhbGxfc3RybGVuL3N0ZGNhbGxfbWFueSk6CisJICBzdGRjYWxsIHZlcnNpb25zIG9mIHRoZSAibXlfc3RybGVuIiBhbmQgIm1hbnkiCisJICB0ZXN0IGZ1bmN0aW9ucyAoZm9yIFg4Nl9XSU4zMikuCisJICBBZGRlZCB0ZXN0IGNhc2VzIHRvIHRlc3Qgc3RkY2FsbCBpbnZvY2F0aW9uIHVzaW5nCisJICB0aGVzZSBmdW5jdGlvbnMuCisKKzIwMDItMTItMDIgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvc3lzdi5TOiBBZGQgRFdBUkYyIHVud2luZCBpbmZvLgorCisyMDAyLTExLTI3ICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIHNyYy9zMzkwL3N5c3YuUyAoLmVoX2ZyYW1lIHNlY3Rpb24pOiBNYWtlIHNlY3Rpb24gcmVhZC1vbmx5LgorCisyMDAyLTExLTI2ICBKaW0gV2lsc29uICA8d2lsc29uQHJlZGhhdC5jb20+CisKKwkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogSGFzIHNpemUgOCBvbiBJQTY0LgorCisyMDAyLTExLTIzICBILkouIEx1IDxoamxAZ251Lm9yZz4KKworCSogYWNpbmNsdWRlLm00OiBBZGQgZHVtbXkgQU1fUFJPR19MSUJUT09MLgorCUluY2x1ZGUgLi4vY29uZmlnL2FjY3Jvc3MubTQuCisJKiBhY2xvY2FsLm00OyBSZWJ1aWxkLgorCSogY29uZmlndXJlOiBMaWtld2lzZS4KKworMjAwMi0xMS0xNSAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9zeXN2LlMgKC5laF9mcmFtZSBzZWN0aW9uKTogQWRhcHQgdG8gcGNyZWwgRkRFIGVuY29kaW5nLgorCisyMDAyLTExLTExICBESiBEZWxvcmllICA8ZGpAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluOiBMb29rIGZvciBjb21tb24gZmlsZXMgaW4gdGhlIHJpZ2h0IHBsYWNlLgorCisyMDAyLTEwLTA4ICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5KTogSW50ZXJwcmV0CisJcmF3IGRhdGEgYXMgX0p2X3dvcmQgdmFsdWVzLCBub3QgZmZpX3Jhdy4KKwkoZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3KTogTGlrZXdpc2UuCisJKGZmaV9qYXZhX3J2YWx1ZV90b19yYXcpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9qYXZhX3Jhd19jYWxsKTogQ2FsbCBpdC4KKwkoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MpOiBDYWxsIGl0LgorCSogc3JjL2ZmaXRlc3QuYyAoY2xvc3VyZV90ZXN0X2ZuKTogSW50ZXJwcmV0IHJldHVybiB2YWx1ZQorCWFzIGZmaV9hcmcsIG5vdCBpbnQuCisJKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgbWlzc2luZworCUZGSV9UWVBFX1BPSU5URVIgY2FzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4gIEFsc28sIGFzc3VtZSByZXR1cm4KKwl2YWx1ZXMgZXh0ZW5kZWQgdG8gd29yZCBzaXplLgorCisyMDAyLTEwLTAyICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBSZW1vdmUgZGVidWcgb3V0cHV0LgorCisyMDAyLTEwLTAxICBCbyBUaG9yc2VuICA8Ym9Ac21ldGFuYS5zdXNlLmRlPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBGaXggaTM4NiB3aW4zMiBjb21waWxhdGlvbi4KKworMjAwMi0wOS0zMCAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCBzMzkweC0qLWxpbnV4LSogdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogRGVmaW5lIFMzOTBYIGZvciBzMzkweCB0YXJnZXRzLgorCShGRklfQ0xPU1VSRVMpOiBEZWZpbmUgZm9yIHMzOTAvczM5MHguCisJKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBMaWtld2lzZS4KKwkoRkZJX05BVElWRV9SQVdfQVBJKTogTGlrZXdpc2UuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogRG8gbm90IGNvbXB1dGUgc3RhY2sgc3BhY2UgZm9yIHMzOTAuCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IFVzZSA4LWJ5dGUgcG9pbnRlcnMgb24gczM5MHguCisJKiBzcmMvczM5MC9mZmkuYzogTWFqb3IgcmV3b3JrIG9mIGV4aXN0aW5nIGNvZGUuICBBZGQgc3VwcG9ydCBmb3IKKwlzMzkweCB0YXJnZXRzLiAgQWRkIGNsb3N1cmUgc3VwcG9ydC4KKwkqIHNyYy9zMzkwL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDItMDktMjkgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorCisJKiBzcmMvYXJtL3N5c3YuUzogRml4IHR5cG8uCisKKzIwMDItMDktMjggIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorCisJKiBzcmMvYXJtL3N5c3YuUzogSWYgd2UgZG9uJ3QgaGF2ZSBtYWNoaW5lL2FzbS5oIGFuZCB0aGUgcHJlLXByb2Nlc3NvcgorCWhhcyBkZWZpbmVkIF9fVVNFUl9MQUJFTF9QUkVGSVhfXywgdGhlbiB1c2UgaXQgaW4gQ05BTUUuCisJKGZmaV9jYWxsX1NZU1YpOiBIYW5kbGUgc29mdC1mbG9hdC4KKworMjAwMi0wOS0yNyAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEZpeCBtdWx0aWxpYiB4ODYtNjQgc3VwcG9ydC4KKworMjAwMi0wOS0yMiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgorCisJKiBNYWtlZmlsZS5hbSAoYWxsLW11bHRpKTogRml4IG11bHRpbGliIHBhcmFsbGVsIGJ1aWxkLgorCisyMDAyLTA3LTE5ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluIChzaFszNF0qLSotbGludXgqKTogQWRkIGJyYWNrZXRzLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAyLTA3LTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW06IEFkZCBTSCBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmUuaW4gKHNoLSotbGludXgqLCBzaFszNF0qLSotbGludXgqKTogQWRkIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBTSCBzdXBwb3J0LgorCSogc3JjL3NoL2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9zaC9zeXN2LlM6IE5ldyBmaWxlLgorCSogc3JjL3R5cGVzLmM6IEFkZCBTSCBzdXBwb3J0LgorCisyMDAyLTA3LTE2ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KKworCSogc3JjL3g4Ni9mZmk2NC5jOiBOZXcgZmlsZSB0aGF0IGFkZHMgeDg2LTY0IHN1cHBvcnQuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBOZXcgZmlsZSB0aGF0IGhhbmRsZXMgYXJndW1lbnQgc2V0dXAgZm9yCisJeDg2LTY0LgorCSogc3JjL3g4Ni9zeXN2LlM6IERvbid0IHVzZSB0aGlzIG9uIHg4Ni02NC4KKwkqIHNyYy94ODYvZmZpLmM6IERvbid0IHVzZSB0aGlzIG9uIHg4Ni02NC4KKwlSZW1vdmUgdW51c2VkIHZhcnMuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogRG9uJ3QgZG8gc3RhY2sgc2l6ZSBjYWxjdWxhdGlvbgorCWZvciB4ODYtNjQuCisJKiBzcmMvZmZpdGVzdC5jIChzdHJ1Y3Q2KTogTmV3IHRlc3QgdGhhdCB0ZXN0cyBhIHNwZWNpYWwgY2FzZSBpbgorCXRoZSB4ODYtNjQgQUJJLgorCShzdHJ1Y3Q3KTogTGlrZXdpc2UuCisJKHN0cnVjdDgpOiBMaWtld2lzZS4KKwkoc3RydWN0OSk6IExpa2V3aXNlLgorCShjbG9zdXJlX3Rlc3RfZm4pOiBTaWxlbmNlIHdhcm5pbmcgYWJvdXQgdGhpcyB3aGVuIGl0J3Mgbm90IHVzZWQuCisJKG1haW4pOiBBZGQgdGhlIG5ldyB0ZXN0cy4KKwkobWFpbik6IEZpeCBhIGNvdXBsZSBvZiB3cm9uZyBjYXN0cyBhbmQgc2lsZW5jZSBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIHg4Ni02NCBBQkkgZGVmaW5pdGlvbi4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuYW06IEFkZCB4ODYtNjQgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZS5pbjogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisKKzIwMDItMDYtMjQgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorCisJKiBzcmMvdHlwZXMuYzogTWVyZ2Ugc2V0dGluZ3MgZm9yIHNpbWlsYXIgYXJjaGl0ZWN0dXJlcy4KKwlBZGQgeDg2LTY0IHNpemVzIGFuZCBhbGlnbm1lbnRzLgorCisyMDAyLTA2LTIzICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFJlbW92ZSB1bnVzZWQgdmFycy4KKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfYXJnc192OCk6IExpa2V3aXNlLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCisKKzIwMDItMDctMTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKKworCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfTUlQU19MSU5VWCk6IE5ldy4KKwkobGliZmZpX2xhX1NPVVJDRVMpOiBTdXBwb3J0IE1JUFNfTElOVVguCisJKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTKTogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKwkqIGNvbmZpZ3VyZS5pbiAobWlwczY0Ki0qKTogU2tpcC4KKwkobWlwcyotKi1saW51eCopOiBOZXcuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvbWlwcy9mZmkuYzogSW5jbHVkZSA8c2dpZGVmcy5oPi4KKworMjAwMi0wNi0wNiAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9zeXN2LlM6IFNhdmUvcmVzdG9yZSAlcjYuICBBZGQgRFdBUkYtMiB1bndpbmQgaW5mby4KKworMjAwMi0wNS0yNyAgUm9nZXIgU2F5bGUgIDxyb2dlckBleWVzb3Blbi5jb20+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgcmVmZXJlbmNlIHRvIGF2bi4KKworMjAwMi0wNS0yNyAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGFuZAorCWZpeCBmb3JtYXR0aW5nLgorCisyMDAyLTA1LTEzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfY2xvc3VyZSk6IERlY2xhcmUgZmQgYXQKKwliZWdpbm5pbmcgb2YgZnVuY3Rpb24gKGZvciBvbGRlciBhcHBsZSBjYykuCisKKzIwMDItMDUtMDggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKE9SSUdJTkFMX0xEX0ZPUl9NVUxUSUxJQlMpOiBQcmVzZXJ2ZSBMRCBhdAorCXNjcmlwdCBlbnRyeSwgYW5kIHNldCBMRCB0byBpdCB3aGVuIGNvbmZpZ3VyaW5nIG11bHRpbGlicy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMi0wNS0wNSAgSmFzb24gVGhvcnBlICA8dGhvcnBlakB3YXNhYmlzeXN0ZW1zLmNvbT4KKworCSogY29uZmlndXJlLmluIChzcGFyYzY0LSotbmV0YnNkKik6IEFkZCB0YXJnZXQuCisJKHNwYXJjLSotbmV0YnNkZWxmKik6IExpa2V3aXNlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAyLTA0LTI4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4sIGNvbmZpZ3VyZTogRml4IFNQQVJDIHRlc3QgaW4gcHJldmlvdXMgY2hhbmdlLgorCisyMDAyLTA0LTI5ICBHZXJoYXJkIFRvbm4gIDxHZXJoYXJkVG9ubkBzd29sLmRlPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIExpbnV4IGZvciBTLzM5MCBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmUuaW46IEFkZCBMaW51eCBmb3IgUy8zOTAgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBMaW51eCBmb3IgUy8zOTAgc3VwcG9ydC4KKwkqIHNyYy9zMzkwL2ZmaS5jOiBOZXcgZmlsZSBmcm9tIGxpYmZmaSBDVlMgdHJlZS4KKwkqIHNyYy9zMzkwL3N5c3YuUzogTmV3IGZpbGUgZnJvbSBsaWJmZmkgQ1ZTIHRyZWUuCisKKzIwMDItMDQtMjggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKEhBVkVfQVNfU1BBUkNfVUFfUENSRUwpOiBDaGVjayBmb3Igd29ya2luZworCSVyX2Rpc3AzMigpLgorCSogc3JjL3NwYXJjL3Y4LlM6IFVzZSBpdC4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAyLTA0LTA4ICBIYW5zIEJvZWhtICA8SGFuc19Cb2VobUBocC5jb20+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3NpemUpOiBIYW5kbGUgRkZJX1RZUEVfRE9VQkxFCisJY29ycmVjdGx5LgorCSogc3JjL2lhNjQvdW5peC5TOiBBZGQgdW53aW5kIGluZm9ybWF0aW9uLiBGaXggY29tbWVudHMuCisJU2F2ZSBzcCBpbiBhIHdheSB0aGF0J3MgY29tcGF0aWJsZSB3aXRoIHVud2luZCBpbmZvLgorCShmZmlfY2FsbF91bml4KTogQ29ycmVjdGx5IHJlc3RvcmUgc3AgaW4gYWxsIGNhc2VzLgorCSogc3JjL2lhNjQvZmZpLmM6IEFkZCwgZml4IGNvbW1lbnRzLgorCisyMDAyLTA0LTA4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3NwYXJjL3Y4LlM6IE1ha2UgLmVoX2ZyYW1lIGRlcGVuZGVudCBvbiB0YXJnZXQgd29yZCBzaXplLgorCisyMDAyLTA0LTA2ICBKYXNvbiBUaG9ycGUgIDx0aG9ycGVqQHdhc2FiaXN5c3RlbXMuY29tPgorCisJKiBjb25maWd1cmUuaW4gKGFscGhhKi0qLW5ldGJzZCopOiBBZGQgdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAyLTA0LTA0ICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisKKwkqIHNyYy9zcGFyYy92OC5TOiBBZGQgdW53aW5kIGluZm8uCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisKKzIwMDItMDMtMzAgIEtyaXN0ZXIgV2FsZnJpZHNzb24gIDxjYXRvQGRmLmx0aC5zZT4KKworCSogY29uZmlndXJlLmluOiBFbmFibGUgaSo4Ni0qLW5ldGJzZGVsZiouCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDItMDMtMjkgIERhdmlkIEJpbGxpbmdodXJzdCA8RGF2aWQuQmlsbGluZ2h1cnN0QHJpb3RpbnRvLmNvbT4KKworCVBSIG90aGVyLzI2MjAKKwkqIHNyYy9taXBzL24zMi5zOiBEZWxldGUKKwkqIHNyYy9taXBzL28zMi5zOiBEZWxldGUKKworMjAwMi0wMy0yMSAgTG9yZW4gSi4gUml0dGxlICA8bGpyaXR0bGVAYWNtLm9yZz4KKworCSogY29uZmlndXJlLmluOiBFbmFibGUgYWxwaGEqLSotZnJlZWJzZCouCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDItMDMtMTcgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KKworCSogTWFrZWZpbGUuYW06IGxpYmZmaWNvbnZlbmllbmNlIC0+IGxpYmZmaV9jb252ZW5pZW5jZS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisJKiBNYWtlZmlsZS5hbTogRGVmaW5lIGZmaXRlc3RfT0JKRUNUUy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDAyLTAzLTA3ICBBbmRyZWFzIFRvYmxlciAgPHRvYUBwb3AuYWdyaS5jaD4KKwkgICAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBEYXJ3aW4gYW5kIEFJWCBjbG9zdXJlIGZpbGVzLgorCShUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogQWRkIGFpeF9jbG9zdXJlLlMuCisJKFRBUkdFVF9TUkNfUE9XRVJQQ19EQVJXSU4pOiBBZGQgZGFyd2luX2Nsb3N1cmUuUy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIEFJWCBhbmQgRGFyd2luIGNsb3N1cmUgZGVmaW5pdGlvbnMuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcgZnVuY3Rpb24uCisJKGZsdXNoX2ljYWNoZSwgZmx1c2hfcmFuZ2UpOiBOZXcgZnVuY3Rpb25zLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogTmV3IGZ1bmN0aW9uLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogTmV3IGZpbGUuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBOZXcgZmlsZS4KKworMjAwMi0wMi0yNCAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgdHlwZWRlZiBmb3IgZmZpX2FyZy4KKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBEZWNsYXJlIHJpbnQgd2l0aCBmZmlfYXJnLgorCisyMDAyLTAyLTIxICBBbmRyZWFzIFRvYmxlciAgPHRvYUBwb3AuYWdyaS5jaD4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogU2tpcCBhcHByb3ByaWF0ZQorCW51bWJlciBvZiBHUFJzIGZvciBmbG9hdGluZy1wb2ludCBhcmd1bWVudHMuCisKKzIwMDItMDEtMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IFJlcGxhY2UgQ0hFQ0tfU0laRU9GIGFuZCBlbmRpYW4gdGVzdHMgd2l0aAorCWNyb3NzLWNvbXBpbGVyIGZyaWVuZGx5IG1hY3Jvcy4KKwkqIGFjbG9jYWwubTQgKEFDX0NPTVBJTEVfQ0hFQ0tfU0laRU9GLCBBQ19DX0JJR0VORElBTl9DUk9TUyk6IE5ldworCW1hY3Jvcy4KKworMjAwMi0wMS0xOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUyAoX2ZmaV9jYWxsX0FJWCk6IE5ldy4KKwkqIHNyYy9wb3dlcnBjL2FpeC5TIChmZmlfY2FsbF9EQVJXSU4pOiBOZXcuCisKKzIwMDItMDEtMTcgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgRGFyd2luIGFuZCBBSVggZmlsZXMuCisJKFRBUkdFVF9TUkNfUE9XRVJQQ19BSVgpOiBOZXcuCisJKFBPV0VSUENfQUlYKTogTmV3IHN0YW56YS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmluOiBBZGQgQUlYIGNhc2UuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfYWJpKTogQWRkIEZGSV9BSVguCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9zdGF0dXMpOiBVc2UgImxvbmciIHRvIHNjYWxlIGZyYW1lCisJc2l6ZS4gIEZpeCAibG9uZyBkb3VibGUiIHN1cHBvcnQuCisJKGZmaV9jYWxsKTogQWRkIEZGSV9BSVggY2FzZS4KKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBOZXcuCisKKzIwMDEtMTAtMDkgIEpvaG4gSG9ybmt2aXN0ICA8am9obkB0b2FzdGVkbWFyc2htYWxsb3cuY29tPgorCisJSW1wbGVtZW50IERhcndpbiBQb3dlclBDIEFCSS4KKwkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIHBvd2VycGMtKi1kYXJ3aW4qLgorCSogTWFrZWZpbGUuYW06IFNldCBzb3VyY2UgZmlsZXMgZm9yIFBPV0VSUENfREFSV0lOLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBEZWZpbmUgRkZJX0RBUldJTiBhbmQgRkZJX0RFRkFVTFRfQUJJIGZvcgorCVBPV0VSUENfREFSV0lOLgorCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IE5ldyBmaWxlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBOZXcgZmlsZS4KKworMjAwMS0xMC0wNyAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgorCisJKiBzcmMveDg2L2ZmaS5jOiBGaXggc3BlbGxpbmcgZXJyb3Igb2YgInNlcGFyYXRlIiBhcyAic2VwZXJhdGUiLgorCisyMDAxLTA3LTE2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL3g4Ni9zeXN2LlM6IEF2b2lkIGdhcy1vbmx5IC5iYWxpZ24gZGlyZWN0aXZlLgorCVVzZSBDIHN0eWxlIGNvbW1lbnRzLgorCisyMDAxLTA3LTE2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlKTogQXZvaWQgZ2FzLW9ubHkgbW5lbW9uaWMuCisJRml4ZXMgUFIgYm9vdHN0cmFwLzM1NjMuCisKKzIwMDEtMDYtMjYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jbG9zdXJlX29zZik6IFVzZSAucmRhdGEgZm9yIEVDT0ZGLgorCisyMDAxLTA2LTI1ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogY29uZmlndXJlLmluOiBSZWNvZ25pemUgc3BhcmMqLXN1bi0qIGhvc3QuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDEtMDYtMDYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvYWxwaGEvb3NmLlMgKF9fRlJBTUVfQkVHSU5fXyk6IENvbmRpdGlvbmFsaXplIGZvciBFTEYuCisKKzIwMDEtMDYtMDMgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvYWxwaGEvb3NmLlM6IEFkZCB1bndpbmQgaW5mby4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogQWRkIHVud2luZCBpbmZvLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDAtMDUtMzEgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKworCSogY29uZmlndXJlLmluOiBGaXggQUNfQVJHX0VOQUJMRSB1c2FnZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMS0wNS0wNiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUB3YWl0YWtpLm90YWdvLmFjLm56PgorCisJKiBjb25maWd1cmUuaW46IFJlbW92ZSB3YXJuaW5nIGFib3V0IGJldGEgY29kZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMS0wNC0yNSAgSGFucyBCb2VobSA8SGFuc19Cb2VobUBocC5jb20+CisKKwkqIHNyYy9pYTY0L3VuaXguUzogUmVzdG9yZSBzdGFjayBwb2ludGVyIHdoZW4gcmV0dXJuaW5nIGZyb20KKwlmZmlfY2xvc3VyZV9VTklYLgorCSogc3JjL2lhNjQvZmZpLmM6IEZpeCB0eXBvIGluIGNvbW1lbnQuCisKKzIwMDEtMDQtMTggIEppbSBXaWxzb24gIDx3aWxzb25AcmVkaGF0LmNvbT4KKworCSogc3JjL2lhNjQvdW5peC5TOiBEZWxldGUgdW5uZWNlc3NhcnkgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb2YgbG9jMgorCXRvIGVsaW1pbmF0ZSBSQVcgRFYuCisKKzIwMDEtMDQtMTIgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorCisJKiBNYWtlZmlsZS5hbTogTWFrZSBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDAxLTAzLTI5ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KKworCSogY29uZmlndXJlLmluOiBVc2UgZGlmZmVyZW50IHN5bnRheCBmb3Igc3ViZGlyZWN0b3J5IGNyZWF0aW9uLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAxLTAzLTI3ICBKb24gQmVuaXN0b24gIDxqb25AYmVuaXN0b24uY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgKFdpbjMyLCBDeWdXaW4sIE1pbmdXKS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IHN1cHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCBzdXBwb3J0LgorCisJKiBzcmMvZmZpdGVzdC5jOiBEb2Vzbid0IHJ1biBzdHJ1Y3R1cmUgdGVzdHMgZm9yIFg4Nl9XSU4zMiB0YXJnZXRzLgorCSogc3JjL3R5cGVzLmM6IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgc3VwcG9ydC4KKworCSogc3JjL3g4Ni93aW4zMi5TOiBOZXcgZmlsZS4gQmFzZWQgb24gc3lzdi5TLCBidXQgd2l0aCBFSAorCXN0dWZmIHJlbW92ZWQgYW5kIG1hZGUgdG8gd29yayB3aXRoIEN5Z1dpbidzIGdhcy4KKworMjAwMS0wMy0yNiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CisKKwkqIGNvbmZpZ3VyZS5pbjogTWFrZSB0YXJnZXQgc3ViZGlyZWN0b3J5IGluIGJ1aWxkIGRpci4KKwkqIE1ha2VmaWxlLmFtOiBPdmVycmlkZSBzdWZmaXggYmFzZWQgcnVsZXMgdG8gc3BlY2lmeSBjb3JyZWN0IG91dHB1dAorCXN1YmRpcmVjdG9yeS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAxLTAzLTIzICBLZXZpbiBCIEhlbmRyaWNrcyAgPGtoZW5kcmlja3NAaXZleS51d28uY2E+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IE5ldyBmaWxlLgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXhlZCBBQkkgY29tcGF0aWJpbGl0eSBidWcKKwlpbnZvbHZpbmcgbG9uZyBsb25nIGFuZCByZWdpc3RlciBwYWlycy4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IE5ldyBmdW5jdGlvbi4KKwkoZmx1c2hfaWNhY2hlKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfQ0xPU1VSRVMpOiBEZWZpbmUgb24gUFBDLgorCShGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCisJKEZGSV9OQVRJVkVfUkFXX0FQSSk6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZGVkIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMuCisJKFRBUkdFVF9TUkNfUE9XRVJQQyk6IExpa2V3aXNlLgorCisyMDAxLTAzLTE5ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW0gKGZmaXRlc3RfTERGTEFHUyk6IE5ldyBtYWNyby4KKworMjAwMS0wMy0wMiAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBpbmNsdWRlL2ZmaV9taXBzLmg6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2RlYnVnLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2ZmaXRlc3QuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvcHJlcF9jaWYuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvdHlwZXMuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvYWxwaGEvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2FscGhhL29zZi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9hcm0vZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2FybS9zeXN2LlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL21pcHMvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL21pcHMvbjMyLlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL21pcHMvbzMyLlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3NwYXJjL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9zcGFyYy92OC5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9zcGFyYy92OS5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy94ODYvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3g4Ni9zeXN2LlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCisyMDAxLTAyLTA4ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IENoYW5nZSBzb3VyY2V3YXJlLmN5Z251cy5jb20gcmVmZXJlbmNlcyB0bworCWdjYy5nbnUub3JnLgorCisyMDAwLTEyLTA5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9jYWxsKTogU2ltcGxpZnkgc3RydWN0IHJldHVybiB0ZXN0LgorCShmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBJbmRleCByYXRoZXIgdGhhbiBpbmNyZW1lbnQgYXZhbHVlCisJYW5kIGFyZ190eXBlcy4gIEdpdmUgZmZpX2Nsb3N1cmVfb3NmIHRoZSByYXcgcmV0dXJuIHZhbHVlIHR5cGUuCisJKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jbG9zdXJlX29zZik6IEhhbmRsZSByZXR1cm4gdmFsdWUgdHlwZQorCXByb21vdGlvbi4KKworMjAwMC0xMi0wNyAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Jhd19hcGkuYyAoZmZpX3RyYW5zbGF0ZV9hcmdzKTogRml4IHR5cG8uCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBMaWtld2lzZS4KKworCSogaW5jbHVkZS9mZmkuaC5pbiBbQUxQSEFdOiBEZWZpbmUgRkZJX0NMT1NVUkVTIGFuZAorCUZGSV9UUkFNUE9MSU5FX1NJWkUuCisJKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRqdXN0IG1pbmltYWwKKwljaWYtPmJ5dGVzIGZvciBuZXcgZmZpX2NhbGxfb3NmIGltcGxlbWVudGF0aW9uLgorCShmZmlfcHJlcF9hcmdzKTogQWJzb3JiIGludG8gLi4uCisJKGZmaV9jYWxsKTogLi4uIGhlcmUuICBEbyBhbGwgc3RhY2sgYWxsb2NhdGlvbiBoZXJlIGFuZAorCWF2b2lkIGEgY2FsbGJhY2sgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2Nsb3N1cmUsIGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IE5ldy4KKwkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2NhbGxfb3NmKTogUmVpbXBsZW1lbnQgd2l0aCBubyBjYWxsYmFjay4KKwkoZmZpX2Nsb3N1cmVfb3NmKTogTmV3LgorCisyMDAwLTA5LTEwICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBpbnN0YWxsLXNoOiBSZW1vdmVkLgorCSogbHRjb25maWcsIGx0bWFpbi5zaCwgbWlzc2luZywgbWtpbnN0YWxsZGlyczogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogYWNpbmNsdWRlLm00OiBJbmNsdWRlIGxpYnRvb2wgbWFjcm9zIGZyb20gdGhlIHRvcCBsZXZlbC4KKwkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMC0wOC0yMiAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiBbaSo4Ni0qLWZyZWVic2QqXSAoVEFSR0VULCBUQVJHRVRESVIpOiBTZXQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDAtMDUtMTEgIFNjb3R0IEJhbWJyb3VnaCAgPHNjb3R0YkBuZXR3aW5kZXIub3JnPgorCisJKiBsaWJmZmkvc3JjL2FybS9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBEb3VibGVzIGFyZSBub3Qgc2F2ZWQgdG8KKwltZW1vcnkgY29ycmVjdGx5LiAgVXNlIGNvbmRpdGlvbmFsIGluc3RydWN0aW9ucywgbm90IGJyYW5jaGVzIHdoZXJlCisJcG9zc2libGUuCisKKzIwMDAtMDUtMDQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBNYXRjaCBgYXJtKi0qLWxpbnV4LSonLgorCUZyb20gQ2hyaXMgRG9ybmFuIDxjZG9ybmFuQGFybS5jb20+LgorCisyMDAwLTA0LTI4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBEZWZpbmUuCisJKEFNX01BS0VGTEFHUyk6IExpa2V3aXNlLgorCShNdWx0aWxpYiBzdXBwb3J0Lik6IEFkZCBzZWN0aW9uLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBsdGNvbmZpZyAoZXh0cmFfY29tcGlsZXJfZmxhZ3MsIGV4dHJhX2NvbXBpbGVyX2ZsYWdzX3ZhbHVlKToKKwlOZXcgdmFyaWFibGVzLiBTZXQgZm9yIGdjYyB1c2luZyAtcHJpbnQtbXVsdGktbGliLiBFeHBvcnQgdGhlbQorCXRvIGxpYnRvb2wuCisJKHNwYXJjNjQtKi1saW51eC1nbnUqKTogVXNlIGxpYnN1ZmYgNjQgZm9yIHNlYXJjaCBwYXRocy4KKwkqIGx0bWFpbi5zaCAoQnxifFYpOiBEb24ndCB0aHJvdyBhd2F5IGdjYydzIC1CLCAtYiBhbmQgLVYgb3B0aW9ucworCWZvciAtc2hhcmVkIGxpbmtzLgorCShleHRyYV9jb21waWxlcl9mbGFnc192YWx1ZSwgZXh0cmFfY29tcGlsZXJfZmxhZ3MpOiBDaGVjayB0aGVzZQorCWZvciBleHRyYSBjb21waWxlciBvcHRpb25zIHdoaWNoIG5lZWQgdG8gYmUgcGFzc2VkIGRvd24gaW4KKwljb21waWxlcl9mbGFncy4KKworMjAwMC0wNC0xNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIGkqODYtcGMtbGludXgqIHRvIGkqODYtKi1saW51eCouCisKKzIwMDAtMDQtMTQgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChTUEFSQzY0KTogRGVmaW5lIGZvciA2NGJpdCBTUEFSQyBidWlsZHMuCisJU2V0IFNQQVJDIEZGSV9ERUZBVUxUX0FCSSBiYXNlZCBvbiBTUEFSQzY0IGRlZmluZS4KKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfYXJnc192OCk6IFJlbmFtZWQgZnJvbSBmZmlfcHJlcF9hcmdzLgorCVJlcGxhY2UgYWxsIHZvaWQgKiBzaXplb2ZzIHdpdGggc2l6ZW9mKGludCkuCisJT25seSBjb21wYXJlIHR5cGUgd2l0aCBGRklfVFlQRV9MT05HRE9VQkxFIGlmIExPTkdET1VCTEUgaXMKKwlkaWZmZXJlbnQgdGhhbiBET1VCTEUuCisJUmVtb3ZlIEZGSV9UWVBFX1NJTlQzMiBhbmQgRkZJX1RZUEVfVUlOVDMyIGNhc2VzIChoYW5kbGVkIGVsc2V3aGVyZSkuCisJKGZmaV9wcmVwX2FyZ3NfdjkpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIFY5IEFCSSBhbmQgbG9uZyBsb25nIG9uIFY4LgorCShmZmlfVjlfcmV0dXJuX3N0cnVjdCk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX2NhbGwpOiBIYW5kbGUgRkZJX1Y5IEFCSSBmcm9tIDY0Yml0IGNvZGUgYW5kIEZGSV9WOCBBQkkgZnJvbQorCTMyYml0IGNvZGUgKG5vdCB5ZXQgY3Jvc3MtYXJjaCBjYWxscykuCisJKiBzcmMvc3BhcmMvdjguUzogQWRkIHN0cnVjdCByZXR1cm4gZGVsYXkgbm9wLgorCUhhbmRsZSBsb25nIGxvbmcuCisJKiBzcmMvc3BhcmMvdjkuUzogTmV3IGZpbGUuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogUmV0dXJuIHN0cnVjdHVyZSBwb2ludGVyCisJaXMgdXNlZCBvbiBzcGFyYzY0IG9ubHkgZm9yIHN0cnVjdHVyZXMgbGFyZ2VyIHRoYW4gMzIgYnl0ZXMuCisJUGFzcyBieSByZWZlcmVuY2UgZm9yIHN0cnVjdHVyZXMgaXMgZG9uZSBmb3Igc3RydWN0dXJlIGFyZ3VtZW50cworCWxhcmdlciB0aGFuIDE2IGJ5dGVzLgorCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IFVzZSA2NGJpdCByaW50IG9uIHNwYXJjNjQuCisJUnVuIGxvbmcgbG9uZyB0ZXN0cyBvbiBzcGFyYy4KKwkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogUG9pbnRlciBpcyA2NGJpdCBvbiBhbHBoYSBhbmQKKwlzcGFyYzY0LgorCShGRklfVFlQRV9MT05HRE9VQkxFKTogbG9uZyBkb3VibGUgaXMgMTI4IGJpdCBhbGlnbmVkIHRvIDEyOCBiaXRzCisJb24gc3BhcmM2NC4KKwkqIGNvbmZpZ3VyZS5pbiAoc3BhcmMtKi1saW51eCopOiBOZXcgc3VwcG9ydGVkIHRhcmdldC4KKwkoc3BhcmM2NC0qLWxpbnV4Kik6IExpa2V3aXNlLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW06IEFkZCB2OS5TIHRvIFNQQVJDIGZpbGVzLgorCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCShMSU5LKTogU3Vycm91bmQgJChDQ0xEKSBpbnRvIGRvdWJsZSBxdW90ZXMsIHNvIHRoYXQgbXVsdGlsaWIKKwljb21waWxlcyB3b3JrIGNvcnJlY3RseS4KKworMjAwMC0wNC0wNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogKGkqODYtKi1zb2xhcmlzKik6IE5ldyBsaWJmZmkgdGFyZ2V0LiBQYXRjaAorCXByb3Bvc2VkIGJ5IEJyeWNlIE1jS2lubGF5LgorCisyMDAwLTAzLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBIYW5kIGVkaXQgZm9yIGphdmFfcmF3X2FwaS5sby4KKworMjAwMC0wMy0wOCAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CisKKwkqIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YjogVXBkYXRlIGZyb20gdGhlIGdjYyB0cmVlLgorCUZpeCBmb3IgUFIgbGliZ2NqLzE2OC4KKworMjAwMC0wMy0wMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogRml4ZWQgaWE2NCBieSBoYW5kLgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW4gKC0tZW5hYmxlLW11bHRpbGliKTogTmV3IG9wdGlvbi4KKwkobGliZmZpX2Jhc2VkaXIpOiBOZXcgc3Vic3QuCisJKEFDX09VVFBVVCk6IEFkZGVkIG11bHRpbGliIGNvZGUuCisKKzIwMDAtMDMtMDIgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19JQTY0KTogVXNlIGBpYTY0Jywgbm90IGBhbHBoYScsIGFzCisJZGlyZWN0b3J5IG5hbWUuCisKKzIwMDAtMDItMjUgIEhhbnMgQm9laG0gPGJvZWhtQGFjbS5vcmc+CisKKwkqIHNyYy9pYTY0L2ZmaS5jLCBzcmMvaWE2NC9pYTY0X2ZsYWdzLmgsIHNyYy9pYTY0L3VuaXguUzogTmV3CisJZmlsZXMuCisJKiBzcmMvcmF3X2FwaS5jIChmZmlfdHJhbnNsYXRlX2FyZ3MpOiBGaXhlZCB0eXBvIGluIGFyZ3VtZW50CisJbGlzdC4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiBVc2UgZmZpX3RyYW5zbGF0ZV9hcmdzLCBub3QKKwlmZmlfY2xvc3VyZV90cmFuc2xhdGUuCisJKiBzcmMvamF2YV9yYXdfYXBpLmM6IE5ldyBmaWxlLgorCSogc3JjL2ZmaXRlc3QuYyAoY2xvc3VyZV90ZXN0X2ZuKTogTmV3IGZ1bmN0aW9uLgorCShtYWluKTogRGVmaW5lIGByaW50JyBhcyBsb25nIGxvbmcgb24gSUE2NC4gIEFkZGVkIG5ldyB0ZXN0IHdoZW4KKwlGRklfQ0xPU1VSRVMgaXMgZGVmaW5lZC4KKwkqIGluY2x1ZGUvZmZpLmguaW4gKEFMSUdOKTogVXNlIHNpemVfdCwgbm90IHVuc2lnbmVkLgorCShmZmlfYWJpKTogUmVjb2duaXplIElBNjQuCisJKGZmaV9yYXcpOiBBZGRlZCBgZmx0JyBmaWVsZC4KKwlBZGRlZCAiSmF2YSByYXcgQVBJIiBjb2RlLgorCSogY29uZmlndXJlLmluOiBSZWNvZ25pemUgaWE2NC4KKwkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX0lBNjQpOiBOZXcgbWFjcm8uCisJKGxpYmZmaV9sYV9jb21tb25fU09VUkNFUyk6IEFkZGVkIGphdmFfcmF3X2FwaS5jLgorCShsaWJmZmlfbGFfU09VUkNFUyk6IERlZmluZSBpbiBJQTY0IGNhc2UuCisKKzIwMDAtMDEtMDQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQgd2l0aCBuZXdlciBhdXRvbWFrZS4KKworMTk5OS0xMi0zMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBBZGRlZCAtSSQodG9wX3NyY2Rpcikvc3JjLgorCisxOTk5LTA5LTAxICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IFJlbW92ZWQgUEFDS0FHRSBhbmQgVkVSU0lPTiBkZWZpbmVzIGFuZAorCXVuZGVmcy4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBQYXNzIDNyZCBhcmd1bWVudCB0byBBTV9JTklUX0FVVE9NQUtFLgorCVVzZSBBTV9QUk9HX0xJQlRPT0wgKGF1dG9tYWtlIDEuNCBjb21wYXRpYmlsaXR5KS4KKwkqIGFjY29uZmlnLmg6IERvbid0ICN1bmRlZiBQQUNLQUdFIG9yIFZFUlNJT04uCisKKzE5OTktMDgtMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBUcnkgdG8gd29yayBhcm91bmQgbWVzc3kgaGVhZGVyIHByb2JsZW0KKwl3aXRoIFBBQ0tBR0UgYW5kIFZFUlNJT04uCisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIHZlcnNpb24gdG8gMi4wMC1iZXRhLgorCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGFjY29uZmlnLmggKEZGSV9OT19TVFJVQ1RTLCBGRklfTk9fUkFXX0FQSSk6IERlZmluZS4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3Jhd19jYWxsKTogUmVuYW1lLgorCisxOTk5LTA4LTAyICBLcmVzdGVuIEtyYWIgVGhvcnVwICA8a3JhYkBkb21pbmlxLmlzLnMudS10b2t5by5hYy5qcD4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTVik6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogRGl0dG8uCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBEaXR0by4KKwkoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBEaXR0by4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiBNb3JlIGRpdHRvLgorCShmZmlfY2FsbF9yYXcpOiBGaW5hbCBkaXR0by4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIGRlZmluaXRpb25zIGZvciBjbG9zdXJlIGFuZCByYXcgQVBJLgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZGVkIGNhc2UgZm9yCisJRkZJX1RZUEVfVUlOVDY0LgorCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX2NvbW1vbl9TT1VSQ0VTKTogQWRkZWQgcmF3X2FwaS5jCisKKwkqIHNyYy9yYXdfYXBpLmM6IE5ldyBmaWxlLgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfcmF3KTogTmV3IHR5cGUuCisJKFVJTlRfQVJHLCBTSU5UX0FSRyk6IE5ldyBkZWZpbmVzLgorCShmZmlfY2xvc3VyZSwgZmZpX3Jhd19jbG9zdXJlKTogTmV3IHR5cGVzLgorCShmZmlfcHJlcF9jbG9zdXJlLCBmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IE5ldyBkZWNsYXJhdGlvbnMuCisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIGNoZWNrIGZvciBlbmRpYW5uZXNzIGFuZCBzaXplb2Ygdm9pZCouCisKKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogQ2FsbCBmaXh1cCByb3V0aW5lIHZpYSBhcmd1bWVudCwKKwlpbnN0ZWFkIG9mIGRpcmVjdGx5LgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKK1RodSBKdWwgIDggMTQ6Mjg6NDIgMTk5OSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIHg4NiBhbmQgcG93ZXJwYyBCZU9TIGNvbmZpZ3VyYXRpb25zLgorCUZyb20gTWFrb3RvIEthdG8gPG1fa2F0b0BnYTIuc28tbmV0Lm5lLmpwPi4KKworMTk5OS0wNS0wOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIHdhcm5pbmcgYWJvdXQgdGhpcyBiZWluZyBiZXRhIGNvZGUuCisJUmVtb3ZlIHNyYy9NYWtlZmlsZS5hbSBmcm9tIHRoZSBwaWN0dXJlLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBNYWtlZmlsZS5hbTogTW92ZSBsb2dpYyBmcm9tIHNyYy9NYWtlZmlsZS5hbS4gIEFkZCBjaGFuZ2VzCisJdG8gc3VwcG9ydCBsaWJmZmkgYXMgYSB0YXJnZXQgbGlicmFyeS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisJKiBhY2xvY2FsLm00LCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGx0Y29uZmlnLCBsdG1haW4uc2g6CisJVXBncmFkZWQgdG8gbmV3IGF1dG9jb25mLCBhdXRvbWFrZSwgbGlidG9vbC4KKworCSogUkVBRE1FOiBUd2Vha3MuCisKKwkqIExJQ0VOU0U6IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZS4KKworCSogc3JjL01ha2VmaWxlLmFtLCBzcmMvTWFrZWZpbGUuaW46IFJlbW92ZWQuCisKKzE5OTgtMTEtMjkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBpbmNsdWRlL0NoYW5nZUxvZzogUmVtb3ZlZC4KKwkqIHNyYy9DaGFuZ2VMb2c6IFJlbW92ZWQuCisJKiBzcmMvbWlwcy9DaGFuZ2VMb2c6IFJlbW92ZWQuCisJKiBzcmMvc3BhcmMvQ2hhbmdlTG9nOiBSZW1ib3ZlZC4KKwkqIHNyYy94ODYvQ2hhbmdlTG9nOiBSZW1vdmVkLgorCisJKiBDaGFuZ2VMb2cudjE6IENyZWF0ZWQuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy5saWJmZmkgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy5saWJmZmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3MmYzMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLmxpYmZmaQpAQCAtMCwwICsxLDYxMyBAQAorMjAxMC0wMS0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogQWRkIG5vdGVzIG9uIGJ1aWxkaW5nIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysuCisKKzIwMTAtMDEtMTUgIERhbmllbCBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKworCSogbXN2Y2Muc2g6IE5ldyBmaWxlLgorCisJKiBzcmMveDg2L3dpbjMyLlM6IFBvcnQgYXNzZW1ibHkgcm91dGluZXMgdG8gTVNWQyBhbmQgI2lmZGVmLgorCSogc3JjL3g4Ni9mZmkuYzogVHdlYWsgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIHJlbW92ZSBleGNlc3MKKwlwYXJlbnMuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgX19kZWNsc3BlYyhhbGlnbig4KSkgdG8gdHlwZWRlZiBzdHJ1Y3QKKwlmZmlfY2xvc3VyZS4KKworCSogc3JjL3g4Ni9mZmkuYzogTWVyZ2UgZmZpX2NhbGxfU1lTViBhbmQgZmZpX2NhbGxfU1REQ0FMTCBpbnRvIG5ldworCWZ1bmN0aW9uIGZmaV9jYWxsX3dpbjMyIG9uIFg4Nl9XSU4zMi4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2NhbGxfU1lTVik6IFJlbmFtZSB0byBmZmlfY2FsbF93aW4zMi4KKwkoZmZpX2NhbGxfU1REQ0FMTCk6IFJlbW92ZS4KKworCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IE1vdmUgc3RhY2sgc3BhY2UgYWxsb2NhdGlvbiBjb2RlCisJdG8gZmZpX3ByZXBfY2lmX21hY2hkZXAgZm9yIHg4Ni4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogVG8gaGVyZS4KKworMjAxMC0wMS0xNSAgT2xpdmVyIEtpZGRsZSAgPG9raWRkbGVAeWFob28uY28udWs+CisKKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBDaGVjayBmb3IgX19pMzg2IGFuZCBfX2FtZDY0IGZvcgorCVN1biBTdHVkaW8gY29tcGlsZXIgY29tcGF0aWJpbGl0eS4gCisKKzIwMTAtMDEtMTIgIENvbnJhZCBJcndpbiA8Y29ucmFkLmlyd2luQGdtYWlsLmNvbT4KKworCSogZG9jL2xpYmZmaS50ZXhpOiBBZGQgY2xvc3VyZSBleGFtcGxlLgorCSogZG9jL2xpYmZmaS5pbmZvOiBSZWJ1aWx0LgorCisyMDA5LTEyLTI1ICBTYW11bGkgU3VvbWluZW4gIDxzc3VvbWluZW5AZ2VudG9vLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBVbmRlZmluZSBfQUNfQVJHX1ZBUl9QUkVDSU9VUyBmb3IgYXV0b2NvbmYgMi42NC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCisyMDA5LTA2LTE2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBGaXggcHJpbnRmIGZvcm1hdAorCXNwZWNpZmllcnMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogQWQgeDg2IFhGQUlMcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogRml4IGRnLWV4Y2Vzcy1lcnJvcnMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggKFBSSWRMTCwgUFJJdUxMKTogRGVmaW5lLgorCisyMDA5LTA2LTEyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBGaXggcHJpbnRmIGZvcm1hdAorCXNwZWNpZmllcnMuCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IGluY2x1ZGUgc3RkaW50LmguCisKKzIwMDktMDYtMTEgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogTWFrZWZpbGUuYW0sCisgICAgICAgIGNvbmZpZ3VyZS5hYywKKyAgICAgICAgaW5jbHVkZS9mZmkuaC5pbiwKKyAgICAgICAgaW5jbHVkZS9mZmlfY29tbW9uLmgsCisgICAgICAgIHNyYy9jbG9zdXJlcy5jLAorICAgICAgICBzcmMvZGxtYWxsb2MuYywKKyAgICAgICAgc3JjL3g4Ni9mZmkuYywKKyAgICAgICAgc3JjL3g4Ni9mZml0YXJnZXQuaCwKKyAgICAgICAgc3JjL3g4Ni93aW42NC5TIChuZXcpLAorCVJFQURNRTogQWRkZWQgd2luNjQgc3VwcG9ydCAobWluZ3cgb3IgTVNWQykKKyAgICAgICAgKiBNYWtlZmlsZS5pbiwKKyAgICAgICAgaW5jbHVkZS9NYWtlZmlsZS5pbiwKKyAgICAgICAgbWFuL01ha2VmaWxlLmluLAorICAgICAgICB0ZXN0c3VpdGUvTWFrZWZpbGUuaW4sCisgICAgICAgIGNvbmZpZ3VyZSwKKyAgICAgICAgYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQKKyAgICAgICAgKiBsdGNmLWMuc2g6IHByb3Blcmx5IGVzY2FwZSBjeWd3aW4vdzMyIHBhdGgKKyAgICAgICAgKiBtYW4vZmZpX2NhbGwuMzogQ2xhcmlmeSBzaXplIHJlcXVpcmVtZW50cyBmb3IgcmV0dXJuIHZhbHVlLgorICAgICAgICAqIHNyYy94ODYvZmZpNjQuYzogRml4IGZpbGVuYW1lIGluIGNvbW1lbnQuCisgICAgICAgICogc3JjL3g4Ni93aW4zMi5TOiBSZW1vdmUgdW51c2VkIGV4dGVybi4KKworICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiB1c2UgZmZpX2Nsb3N1cmVfYWxsb2MgaW5zdGVhZAorICAgICAgICBvZiBjaGVja2luZyBmb3IgTU1BUC4gIFVzZSBpbnRwdHJfdCBpbnN0ZWFkIG9mIGxvbmcgY2FzdHMuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogRml4IG1pc2FwcGxpZWQgbWVyZ2UgZnJvbSBnY2MuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvbWlwcy9vMzIuUywKKwlzcmMvbWlwcy9uMzIuUzogRml4IGxpY2VuY2UgZm9ybWF0dGluZy4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZGFyd2luLlM6IEZpeCBsaWNlbmNlIGZvcm1hdHRpbmcuCisJc3JjL3g4Ni93aW4zMi5TOiBMaWtld2lzZS4KKwlzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorCXNyYy9zaC9zeXN2LlM6IExpa2V3aXNlLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3NoNjQvZmZpLmM6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuICBXYXMgbWlzc2luZyBmcm9tIG1lcmdlCisJb2YgQW5kcmVhcyBUb2JsZXIncyBwYXRjaCBmcm9tIDIwMDYtMDQtMjIuCisJCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3NoL2ZmaS5jOiBBcHBseSBtaXNzaW5nIGh1bmsgZnJvbSBBbGV4YW5kcmUgT2xpdmEncyBwYXRjaCBvZgorCTIwMDctMDMtMDcuCisKKzIwMDgtMTItMjYgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYzogbWFyayBleHBlY3RlZAorICAgICAgICBmYWlsdXJlcyBvbiB4ODZfNjQgY3lnd2luL21pbmd3LgorCisyMDA4LTEyLTIyICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywgICAgCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMsICAgIAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywgICAgCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsICAgIAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMsICAgIAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsICAgIAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywgICAgCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmM6IHVzZSBwb3J0YWJsZSBjYXN0IGZyb20KKyAgICAgICAgcG9pbnRlciB0byBpbnRlZ2VyIChpbnRwdHJfdCkuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmM6IGRpc2FibGUgZm9yIHdpbjY0LgorCQorMjAwOC0xMi0xOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC44LgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuCisKKzIwMDgtMTEtMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuNy4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKwkqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IHJldmlzaW9uLgorCSogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLgorCisyMDA4LTA4LTI1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IEFkZCBGRklfTElOVVggYW5kCisJRkZJX0xJTlVYX1NPRlRfRkxPQVQgdG8gdGhlIFBPV0VSUENfRlJFRUJTRCBlbnVtLgorCUFkZCBub3RlIGFib3V0IGZsYWcgYml0cyB1c2VkIGZvciBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVC4KKwlBZGp1c3QgY29weXJpZ2h0IG5vdGljZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBZGQgdHdvIG5ldyBmbGFncyB0byBpbmRpY2F0ZSBpZiB3ZSBoYXZlIG9uZQorCXJlZ2lzdGVyIG9yIHR3byByZWdpc3RlciB0byB1c2UgZm9yIEZGSV9TWVNWIHN0cnVjdHMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUGFzcyB0aGUgcmlnaHQgcmVnaXN0ZXIgZmxhZyBpbnRyb2R1Y2VkIGFib3ZlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEZpeCB0aGUgcmV0dXJuIHR5cGUgZm9yCisJRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QuIENvbW1lbnQuCisJQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisKKzIwMDgtMDctMjQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQ2xlYW4gdXAgZmFpbHVyZXMgZnJvbQorCWNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDA4LTA3LTE3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjYuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisJKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4gIEFkZCBkb2N1bWVudGF0aW9uLgorCSogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLgorCisyMDA4LTA3LTE2ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFR1cm4gSU5TTiBpbnRvIGFuIHVuc2lnbmVkCisJaW50LgorCisyMDA4LTA3LTE2ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KKwkqIHNyYy9zaDY0L3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDgtMDQtMDMgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBsaWJmZmkucGMuaW4gKExpYnMpOiBBZGQgLUwke2xpYmRpcn0uCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuNS4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKwkqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IHJldmlzaW9uLgorCSogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLgorCisyMDA4LTA0LTAzICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKwkgICAgWGVyY2VzIFJhbmJ5ICA8eGVyeGVzQHphZmVuYS5zZT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogV3JhcCBkZWZpbml0aW9uIG9mIHRhcmdldCBhcmNoaXRlY3R1cmUgdG8KKwlwcm90ZWN0IGZyb20gZG91YmxlIGRlZmluaXRpb25zLgorCisyMDA4LTAzLTIyICBNb3JpeW9zaGkgS29penVtaSAgPG1vcml5b3NoaUBnbWFpbC5jb20+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IGZvciBidWcgcmV2ZWFsZWQgaW4KKwljbG9zdXJlX2xvY19mbjAuYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYyAoY2xvc3VyZV9sb2NfdGVzdF9mbjApOgorCU5ldyB0ZXN0LgorCisyMDA4LTAzLTA0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKwkgICAgQmxha2UgQ2hhZmZpbgorCSAgICBob3NAdGFtYW5lZ2kub3JnCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTmV3IHRlc3RzIGZyb20gQXBwbGUuCisKKzIwMDgtMDItMjYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgICAgICAgICAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hbHBoYS9vc2YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KKwkqIHNyYy9zMzkwL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni91bml4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvdjguUzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL2lhNjQvdW5peC5TOiBMaWtld2lzZS4KKwkqIHNyYy9hcm0vc3lzdi5TOiBMaWtld2lzZS4KKworMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisgICAgICAgICAgICBUaG9tYXMgSGVsbGVyICA8dGhlbGxlckBjdHlwZXMub3JnPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogQ2hhbmdlIEMrKyBjb21tZW50IHRvIEMKKwljb21tZW50LgorCisyMDA4LTAyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0Lm9yZz4KKyAgICAgICAgICAgIFRob21hcyBIZWxsZXIgIDx0aGVsbGVyQGN0eXBlcy5vcmc+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorCisyMDA4LTAyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0Lm9yZz4KKyAgICAgICAgICAgIFRob21hcyBIZWxsZXIgIDx0aGVsbGVyQGN0eXBlcy5vcmc+CisKKwkqIHNyYy9hbHBoYS9mZmkuYzogQ2hhbmdlIHZvaWQgKCopKCkgdG8gdm9pZCAoKikodm9pZCkuCisJc3JjL2FscGhhL29zZi5TLCBzcmMvYXJtL2ZmaS5jLCBzcmMvZnJ2L2ZmaS5jLCBzcmMvaWE2NC9mZmkuYywKKwlzcmMvaWE2NC91bml4LlMsIHNyYy9qYXZhX3Jhd19hcGkuYywgc3JjL20zMnIvZmZpLmMsCisJc3JjL21pcHMvZmZpLmMsIHNyYy9wYS9mZmkuYywgc3JjL3BhL2hwdXgzMi5TLCBzcmMvcGEvbGludXguUywKKwlzcmMvcG93ZXJwYy9mZmkuYywgc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jLCBzcmMvcmF3X2FwaS5jLAorCXNyYy9zMzkwL2ZmaS5jLCBzcmMvc2gvZmZpLmMsIHNyYy9zaDY0L2ZmaS5jLCBzcmMvc3BhcmMvZmZpLmMsCisJc3JjL3g4Ni9mZmkuYywgc3JjL3g4Ni91bml4NjQuUywgc3JjL3g4Ni9kYXJ3aW42NC5TLAorCXNyYy94ODYvZmZpNjQuYzogRGl0dG8uCisKKzIwMDgtMDItMjQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFjY2VwdCBvcGVuYnNkKiwgbm90IGp1c3Qgb3BlbmJzZC4KKwlCdW1wIHZlcnNpb24gdG8gMy4wLjQuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisJKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKwkqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KKworMjAwOC0wMi0yMiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogQ2xlYW4gdXAgbGlzdCBvZiB0ZXN0ZWQgcGxhdGZvcm1zLgorCisyMDA4LTAyLTIyICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjMuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisJKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKwkqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4gIENsZWFuIHVwIHRlc3QgZG9jcy4KKworMjAwOC0wMi0yMiAgQmpvZXJuIEtvZW5pZyAgPGJrb2VuaWdAYWxwaGEtdGllcmNoZW4uZGU+CisJICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIGFtZDY0LSotZnJlZWJzZCogdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTAyLTIyICBUaG9tYXMgSGVsbGVyIDx0aGVsbGVyQGN0eXBlcy5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIHg4NiBPcGVuQlNEIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDgtMDItMjEgIFRob21hcyBIZWxsZXIgPHRoZWxsZXJAY3R5cGVzLm9yZz4KKworCSogUkVBRE1FOiBDaGFuZ2UgIm1ha2UgdGVzdCIgdG8gIm1ha2UgY2hlY2siLgorCisyMDA4LTAyLTIxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjIuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisJKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKwkqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KKworMjAwOC0wMi0yMSAgQmrDtnJuIEvDtm5pZyA8YmtvZW5pZ0BhbHBoYS10aWVyY2hlbi5kZT4KKworCSogc3JjL3g4Ni9mcmVlYnNkLlM6IE5ldyBmaWxlLgorCSogY29uZmlndXJlLmFjOiBBZGQgeDg2IEZyZWVCU0Qgc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmFtOiBEaXR0by4KKworMjAwOC0wMi0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC4xLgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuCisKKzIwMDgtMDItMTUgIERhdmlkIERhbmV5CSA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL2ZmaS5jOiBSZW1vdmUgZXh0cmEgJz4nIGZyb20gaW5jbHVkZSBkaXJlY3RpdmUuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVXNlIGNsZWFyX2xvY2F0aW9uIGluc3RlYWQgb2YgdHJhbXAuCisKKzIwMDgtMDItMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuMC4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKworMjAwOC0wMi0xNSAgRGF2aWQgRGFuZXkJIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvZmZpLmMgKFVTRV9fQlVJTFRJTl9fX0NMRUFSX0NBQ0hFKToKKwlEZWZpbmUgKGNvbmRpdGlvbmFsbHkpLCBhbmQgdXNlIGl0IHRvIGluY2x1ZGUgY2FjaGVjdGwuaC4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGaXggY2FjaGUgZmx1c2hpbmcuCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoX0FCSU4zMiwgX0FCSTY0LCBfQUJJTzMyKTogRGVmaW5lLgorCisyMDA4LTAyLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworICAgICAgICAqIG1hbi9mZmlfY2FsbC4zLCBtYW4vZmZpX3ByZXBfY2lmLjMsIG1hbi9mZmkuMzoKKwlVcGRhdGUgZGF0ZXMgYW5kIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBmZmlfcHJlcF9jbG9zdXJlLgorCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMi45OS45LgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCisyMDA4LTAyLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogbWFuL2ZmaV9wcmVwX2Nsb3N1cmUuMzogRGVsZXRlLgorCSogbWFuL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVtb3ZlIGZmaV9wcmVwX2Nsb3N1cmUuMy4KKwkobWFuX01BTlMpOiBEaXR0by4KKwkqIG1hbi9NYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuOC4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuNy4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKwkqIGluY2x1ZGUvZmZpLmguaW4gTElDRU5TRSBzcmMvZGVidWcuYyBzcmMvY2xvc3VyZXMuYworICAgICAgICAgIHNyYy9mZml0ZXN0LmMgc3JjL3MzOTAvc3lzdi5TIHNyYy9zMzkwL2ZmaXRhcmdldC5oCisgICAgICAgICAgc3JjL3R5cGVzLmMgc3JjL202OGsvZmZpdGFyZ2V0Lmggc3JjL3Jhd19hcGkuYyBzcmMvZnJ2L2ZmaS5jCisgICAgICAgICAgc3JjL2Zydi9mZml0YXJnZXQuaCBzcmMvc2gvZmZpLmMgc3JjL3NoL3N5c3YuUworICAgICAgICAgIHNyYy9zaC9mZml0YXJnZXQuaCBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCBzcmMvcGEvZmZpLmMKKyAgICAgICAgICBzcmMvcGEvZmZpdGFyZ2V0Lmggc3JjL3BhL2xpbnV4LlMgc3JjL2phdmFfcmF3X2FwaS5jCisgICAgICAgICAgc3JjL2NyaXMvZmZpdGFyZ2V0Lmggc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUworICAgICAgICAgIHNyYy94ODYvdW5peDY0LlMgc3JjL3g4Ni93aW4zMi5TIHNyYy94ODYvZmZpdGFyZ2V0LmgKKyAgICAgICAgICBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni9kYXJ3aW4uUyBzcmMvaWE2NC9mZmkuYworICAgICAgICAgIHNyYy9pYTY0L2ZmaXRhcmdldC5oIHNyYy9pYTY0L2lhNjRfZmxhZ3MuaCBzcmMvaWE2NC91bml4LlMKKyAgICAgICAgICBzcmMvc3BhcmMvZmZpLmMgc3JjL3NwYXJjL3Y5LlMgc3JjL3NwYXJjL2ZmaXRhcmdldC5oCisgICAgICAgICAgc3JjL3NwYXJjL3Y4LlMgc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9mZml0YXJnZXQuaAorICAgICAgICAgIHNyYy9hbHBoYS9vc2YuUyBzcmMvc2g2NC9mZmkuYyBzcmMvc2g2NC9zeXN2LlMKKyAgICAgICAgICBzcmMvc2g2NC9mZml0YXJnZXQuaCBzcmMvbWlwcy9mZmkuYyBzcmMvbWlwcy9mZml0YXJnZXQuaAorICAgICAgICAgIHNyYy9taXBzL24zMi5TIHNyYy9taXBzL28zMi5TIHNyYy9hcm0vZmZpLmMgc3JjL2FybS9zeXN2LlMKKyAgICAgICAgICBzcmMvYXJtL2ZmaXRhcmdldC5oIHNyYy9wcmVwX2NpZi5jOiBVcGRhdGUgbGljZW5zZSB0ZXh0LgorCisyMDA4LTAyLTE0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogUkVBRE1FOiBVcGRhdGUgdGVzdGVkIHBsYXRmb3Jtcy4KKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuNi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuNS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGRhcndpbjY0LlMKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBSZW1vdmUgbGlic3RkYysrIGJpdHMgZnJvbSBHQ0MgdHJlZS4KKwkqIExJQ0VOU0U6IFVwZGF0ZSBXQVJSQU5UWS4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGxpYmZmaS5wYy5pbiAobGliZGlyKTogRml4IGxpYmRpciBkZWZpbml0aW9uLgorCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMi45OS40LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDA4LTAyLTE0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogUkVBRE1FOiBVcGRhdGUuCisJKiBsaWJmZmkuaW5mbzogTmV3IGZpbGUuCisJKiBkb2Mvc3RhbXAtdnRpOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuMy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogQWRkIG1hbiBkaXIuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogQ3JlYXRlIE1ha2VmaWxlLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgICAgICAqIG1hbi9mZmlfY2FsbC4zIG1hbi9mZmlfcHJlcF9jaWYuMyBtYW4vZmZpX3ByZXBfY2xvc3VyZS4zCisgICAgICAgICAgbWFuL01ha2VmaWxlLmFtIG1hbi9NYWtlZmlsZS5pbjogTmV3IGZpbGVzLgorCisyMDA4LTAyLTE0ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisKKwkqIGFjbG9jYWwubTQsIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogbWRhdGUtc2gsIHRleGluZm8udGV4OiBOZXcgZmlsZXMuCisJKiBNYWtlZmlsZS5hbSAoaW5mb19URVhJTkZPUyk6IE5ldyB2YXJpYWJsZS4KKwkqIGRvYy9saWJmZmkudGV4aTogTmV3IGZpbGUuCisJKiBkb2MvdmVyc2lvbi50ZXhpOiBMaWtld2lzZS4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBEb24ndCBjb21waWxlIHdpdGggLUQkKFRBUkdFVCkuCisJKGxpYl9MVExJQlJBUklFUyk6IERlZmluZS4KKwkodG9vbGV4ZWNsaWJfTElCUkFSSUVTKTogVW5kZWZpbmUuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogUmVzZXQgdmVyc2lvbiB0byAyLjk5LjEuCisJKiBjb25maWd1cmUuaW46IFJlYnVpbHQuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBsaWJmZmkucGMuaW46IFVzZSBAUEFDS0FHRV9OQU1FQCBhbmQgQFBBQ0tBR0VfVkVSU0lPTkAuCisJKiBjb25maWd1cmUuYWM6IFJlc2V0IHZlcnNpb24gdG8gMi45OS4xLgorCSogY29uZmlndXJlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgQ2hhbmdlTG9nLmxpYmZmaS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTElDRU5TRTogVXBkYXRlIGNvcHlyaWdodCBub3RpY2UuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL01ha2VmaWxlLmFtIChub2Rpc3RfaW5jbHVkZXNfSEVBREVSUyk6IERlZmluZS4gIERvbid0CisJZGlzdHJpYnV0ZSBmZml0YXJnZXQuaCBvciBmZmkuaCBmcm9tIHRoZSBidWlsZCBpbmNsdWRlIGRpci4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDA4LTAyLTE0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9NYWtlZmlsZS5hbSAoaW5jbHVkZXNkaXIpOiBJbnN0YWxsIGhlYWRlcnMgdW5kZXIgbGliZGlyLgorCShwa2djb25maWdkaXIpOiBEZWZpbmUuIEluc3RhbGwgbGliZmZpLnBjLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGxpYmZmaS5wYy5pbjogQ3JlYXRlLgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgQ1VSUkVOVAorCSogY29uZmlndXJlLmFjOiBBZGQgbGliZmZpLnBjLmluCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDgtMDItMDMgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL01ha2VmaWxlLmFtIChpbmNsdWRlc2Rpcik6IEZpeCBoZWFkZXIgaW5zdGFsbCB3aXRoCisJREVTVERJUi4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDgtMDItMDMgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogc3JjL3g4Ni9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMKTogQ2FsY3VsYXRlIGp1bXAgcmV0dXJuCisgICAgICAgICAgb2Zmc2V0IGJhc2VkIG9uIGNvZGUgcG9pbnRlciwgbm90IGRhdGEgcG9pbnRlci4KKworMjAwOC0wMi0wMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IEZpeCBoZWFkZXIgaW5zdGFsbHMuCisJKiBNYWtlZmlsZS5hbTogRGl0dG8uCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuaW46IERpdHRvLgorCisyMDA4LTAyLTAxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMLAorCUZGSV9JTklUX1RSQU1QT0xJTkUpOiBSZXZlcnQgbXkgYnJva2VuIGNoYW5nZXMgdG8gdHdhbGwncyBsYXN0CisJcGF0Y2guCisKKzIwMDgtMDEtMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBtaXNzaW5nIGZpbGVzLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBEaXR0by4KKwkqIE1ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDgtMDEtMzEgIFRpbW90aHkgV2FsbCA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmM6IEFkZCB0ZXN0IGZvciBzdGRjYWxsCisJY2xvc3VyZXMuCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBJbmNyZWFzZSBzaXplIG9mIHRyYW1wb2xpbmUgZm9yIHN0ZGNhbGwKKwljbG9zdXJlcy4KKwkqIHNyYy94ODYvd2luMzIuUzogQWRkIGFzc2VtYmx5IGZvciBzdGRjYWxsIGNsb3N1cmUuCisJKiBzcmMveDg2L2ZmaS5jOiBJbml0aWFsaXplIHN0ZGNhbGwgY2xvc3VyZSB0cmFtcG9saW5lLgorCisyMDA4LTAxLTMwICBILkouIEx1IDxob25naml1Lmx1QGludGVsLmNvbT4KKworCVBSIGxpYmZmaS8zNDYxMgorCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBQb3AgNCBieXRlIGZyb20gc3RhY2sgd2hlbgorCXJldHVybmluZyBzdHJ1Y3QuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogQWRkICItTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIiCisJdGVzdHMuCisKKzIwMDgtMDEtMzAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSwgaW5jbHVkZS9NYWtlZmlsZS5hbTogTW92ZSBoZWFkZXJzIHRvCisJbGliZmZpX2xhX1NPVVJDRVMgZm9yIG5ldyBhdXRvbWFrZS4KKwkqIE1ha2VmaWxlLmluLCBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCQorCSogdGVzdHN1aXRlL2xpYi93cmFwcGVyLmV4cDogQ29waWVkIGZyb20gZ2NjIHRyZWUgdG8gYWxsb3cgZm9yIAorCWV4ZWN1dGlvbiBvdXRzaWRlIG9mIGdjYyB0cmVlLgorCSogdGVzdHN1aXRlL2xpYi90YXJnZXQtbGlicGF0aC5leHA6IERpdHRvLgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IE1hbnkgY2hhbmdlcyB0byBhbGxvdyBmb3IgZXhlY3V0aW9uCisJb3V0c2lkZSBvZiBnY2MgdHJlZS4KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZ2NqIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZ2NqCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNWQwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy5saWJnY2oKQEAgLTAsMCArMSw0MCBAQAorMjAwNC0wMS0xNCAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluOiBBZGQgaW4gQUNfUFJFUkVRKDIuMTMpCisKKzIwMDMtMDItMjAgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW46IFByb3BhZ2F0ZSBPUklHSU5BTF9MRF9GT1JfTVVMVElMSUJTIHRvCisJY29uZmlnLnN0YXR1cy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMi0wMS0yNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAodG9vbGV4ZWNkaXIsIHRvb2xleGVjbGliZGlyKTogU2V0IGFuZCBBQ19TVUJTVC4KKwlSZW1vdmUgVVNFX0xJQkRJUiBjb25kaXRpb25hbC4KKwkqIE1ha2VmaWxlLmFtICh0b29sZXhlY2RpciwgdG9vbGV4ZWNsaWJkaXIpOiBEb24ndCBvdmVycmlkZS4KKwkqIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCisKK01vbiBBdWcgIDkgMTg6MzM6MzggMTk5OSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdAorCSogTWFrZWZpbGUuYW0gKHRvb2xleGVjbGliZGlyKTogQWRkICQoTVVMVElTVUJESVIpIGV2ZW4gZm9yIG5hdGl2ZQorCWJ1aWxkcy4KKwlVc2UgVVNFX0xJQkRJUi4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluIChVU0VfTElCRElSKTogRGVmaW5lIGZvciBuYXRpdmUgYnVpbGRzLgorCVVzZSBsb3dlcmNhc2UgaW4gY29uZmlndXJlIC0taGVscCBleHBsYW5hdGlvbnMuCisKKzE5OTktMDgtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfRk4pOiBSZW1vdmUgYC4uLicuCisKKzE5OTktMDgtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBDb21waWxlIHdpdGggLWZleGNlcHRpb25zLgorCisJKiBzcmMveDg2L3N5c3YuUzogQWRkIGV4Y2VwdGlvbiBoYW5kbGluZyBtZXRhZGF0YS4KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cudjEgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy52MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjk4MjBjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cudjEKQEAgLTAsMCArMSw3NjQgQEAKK1RoZSBsaWJmZmkgdmVyc2lvbiAxIENoYW5nZUxvZyBhcmNoaXZlLgorCitWZXJzaW9uIDEgb2YgbGliZmZpIGhhZCBwZXItZGlyZWN0b3J5IENoYW5nZUxvZ3MuICBDdXJyZW50IGFuZCBmdXR1cmUKK3ZlcnNpb25zIGhhdmUgYSBzaW5nbGUgQ2hhbmdlTG9nIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LiAgVGhlCit2ZXJzaW9uIDEgQ2hhbmdlTG9ncyBoYXZlIGFsbCBiZWVuIGNvbmNhdG9uYXRlZCBpbnRvIHRoaXMgZmlsZSBmb3IKK2Z1dHVyZSByZWZlcmVuY2Ugb25seS4KKworLS0tIGxpYmZmaSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01vbiBPY3QgIDUgMDI6MTc6NTAgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQm9vc3RlZCByZXYuCisJKiBjb25maWd1cmUsIE1ha2VmaWxlLmluLCBhY2xvY2FsLm00OiBSZWJ1aWx0LgorCSogUkVBRE1FOiBCb29zdGVkIHJldiBhbmQgdXBkYXRlZCByZWxlYXNlIG5vdGVzLgorCitNb24gT2N0ICA1IDAxOjAzOjAzIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEJvb3N0ZWQgcmV2LgorCSogY29uZmlndXJlLCBNYWtlZmlsZS5pbiwgYWNsb2NhbC5tNDogUmVidWlsdC4KKwkqIFJFQURNRTogQm9vc3RlZCByZXYgYW5kIHVwZGF0ZWQgcmVsZWFzZSBub3Rlcy4KKworMTk5OC0wNy0yNSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIG02OGsvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogVXNlIGJpdG1hc2sgZm9yIGNpZi0+ZmxhZ3MuCisJQ29ycmVjdGx5IGhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzLgorCShmZmlfcHJlcF9hcmdzKTogQWxzbyBoYW5kbGUgc21hbGwgc3RydWN0dXJlcy4KKwkoZmZpX2NhbGwpOiBQYXNzIHNpemUgb2YgcmV0dXJuIHR5cGUgdG8gZmZpX2NhbGxfU1lTVi4KKwkqIG02OGsvc3lzdi5TOiBBZGp1c3QgZm9yIGFib3ZlIGNoYW5nZXMuICBDb3JyZWN0bHkgYWxpZ24gc21hbGwKKwlzdHJ1Y3R1cmVzIGluIHRoZSByZXR1cm4gdmFsdWUuCisKKwkqIHR5cGVzLmMgKHVpbnQ2NCwgc2ludDY0KSBbTTY4S106IENoYW5nZSBhbGlnbm1lbnQgdG8gNC4KKworRnJpIEFwciAxNyAxNzoyNjo1OCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLmluOiBCb29zdGVkIHJldi4KKwkqIGNvbmZpZ3VyZSxNYWtlZmlsZS5pbixhY2xvY2FsLm00OiBSZWJ1aWx0LgorCSogUkVBRE1FOiBCb29zdGVkIHJldiBhbmQgYWRkZWQgcmVsZWFzZSBub3Rlcy4KKworU3VuIEZlYiAyMiAwMDo1MDo0MSAxOTk4ICBHZW9mZiBLZWF0aW5nICA8Z2VvZmZrQG96ZW1haWwuY29tLmF1PgorCisJKiBjb25maWd1cmUuaW46IEFkZCBQb3dlclBDIGNvbmZpZyBiaXRzLgorCisxOTk4LTAyLTE0ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KKworCSogY29uZmlndXJlLmluOiBBZGQgbTY4ayBjb25maWcgYml0cy4gIENoYW5nZSBBQ19DQU5PTklDQUxfU1lTVEVNCisJdG8gQUNfQ0FOT05JQ0FMX0hPU1QsIHRoaXMgaXMgbm90IGEgY29tcGlsZXIuICBVc2UgJGhvc3QgaW5zdGVhZAorCW9mICR0YXJnZXQuICBSZW1vdmUgQUNfQ0hFQ0tfU0laRU9GKGNoYXIpLCB3ZSBhbHJlYWR5IGtub3cgdGhlCisJcmVzdWx0LiAgRml4IGFyZ3VtZW50IG9mIEFDX0FSR19FTkFCTEUuCisJKiBjb25maWd1cmUsIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCitUdWUgRmViIDEwIDIwOjUzOjQwIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIEFscGhhIGNvbmZpZyBiaXRzLgorCitUdWUgTWF5IDEzIDEzOjM5OjIwIDE5OTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBSRUFETUU6IFVwZGF0ZWQgZGF0ZXMgYW5kIHJld29yZGVkIElyaXggY29tbWVudHMuCisKKwkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlZCBBQ19QUk9HX1JBTkxJQi4KKworCSogTWFrZWZpbGUuaW4sIGFjbG9jYWwubTQsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgY29uZmlndXJlLAorCWx0bWFpbi5zaCwgKi9NYWtlZmlsZS5pbjogbGlidG9vbGl6ZWQgYWdhaW4gYW5kCXJlYnVpbHQgd2l0aCAKKwlhdXRvbWFrZSBhbmQgYXV0b2NvbmYuCisJCitTYXQgTWF5IDEwIDE4OjQ0OjUwIDE5OTcgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLCBhY2xvY2FsLm00OiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBEb24ndCBjb21wdXRlIEVYVFJBRElTVDsgbm93IGhhbmRsZWQgaW4KKwlzcmMvTWFrZWZpbGUuaW4uICBSZW1vdmVkIG1hY3JvcyBpbXBsaWVkIGJ5IEFNX0lOSVRfQVVUT01BS0UuCisJRG9uJ3QgcnVuIEFNX01BSU5UQUlORVJfTU9ERS4KKworVGh1IE1heSAgOCAxNDozNDowNSAxOTk3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogbWlzc2luZywgbHRtYWluLnNoLCBsdGNvbmZpZy5zaDogQ3JlYXRlZC4gVGhlc2UgYXJlIG5ldyBmaWxlcworCXJlcXVpcmVkIGJ5IGF1dG9tYWtlIGFuZCBsaWJ0b29sLgorCisJKiBSRUFETUU6IEJvb3N0ZWQgcmV2IHRvIDEuMTQuIEFkZGVkIG5vdGVzLgorCisJKiBhY2NvbmZpZy5oOiBNb3ZlZCBQQUNLQUdFIGFuZCBWRVJTSU9OIGZvciBuZXcgYXV0b21ha2UuCisJCisJKiBjb25maWd1cmUuaW46IENoYW5nZXMgZm9yIGxpYnRvb2wuCisJCisJKiBNYWtlZmlsZS5hbSAoY2hlY2spOiBtYWtlIHRlc3Qgbm93IG1ha2UgY2hlY2suIFVzZXMgbGlidG9vbCBub3cuCisKKwkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUuaW4sIGFjbG9jYWwuaCwgZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisKK1RodSBNYXkgIDEgMTY6Mjc6MDcgMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG1pc3Npbmc6IEFkZGVkIGZpbGUgcmVxdWlyZWQgYnkgbmV3IGF1dG9tYWtlLgorCitUdWUgTm92IDI2IDE0OjEwOjQyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjc2szLmN5Z251cy5jb20+CisKKwkqIGFjY29uZmlnLmg6IEFkZGVkIFVTSU5HX1BVUklGWSBmbGFnLiBUaGlzIGlzIGRlZmluZWQgd2hlbgorCS0tZW5hYmxlLXB1cmlmeS1zYWZldHkgd2FzIHVzZWQgYXQgY29uZmlndXJlIHRpbWUuCisKKwkqIGNvbmZpZ3VyZS5pbiAoYWxsc291cmNlcyk6IEFkZGVkIC0tZW5hYmxlLXB1cmlmeS1zYWZldHkgc3dpdGNoLgorCShWRVJTSU9OKTogQm9vc3RlZCByZXYgdG8gMS4xMy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworRnJpIE5vdiAyMiAwNjo0NjoxMiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoVkVSU0lPTik6IEJvb3N0ZWQgcmV2IHRvIDEuMTIuCisJUmVtb3ZlZCBzcGVjaWFsIENGTEFHUyBoYWNrIGZvciBnY2MuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKwkqIFJFQURNRTogQm9vc3RlZCByZXYgdG8gMS4xMi4gQWRkZWQgbm90ZXMuCisKKwkqIE1hbnkgZmlsZXM6IEN5Z251cyBTdXBwb3J0IGNoYW5nZWQgdG8gQ3lnbnVzIFNvbHV0aW9ucy4KKworV2VkIE9jdCAzMCAxMToxNToyNSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoVkVSU0lPTik6IEJvb3N0ZWQgcmV2IHRvIDEuMTEuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKwkqIFJFQURNRTogQm9vc3RlZCByZXYgdG8gMS4xMS4gQWRkZWQgbm90ZXMgYWJvdXQgR05VIG1ha2UuCisKK1R1ZSBPY3QgMjkgMTI6MjU6MTIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEZpeGVkIC1XYWxsIHRyaWNrLgorCShWRVJTSU9OKTogQm9vc3RlZCByZXYuCisJKiBjb25maWd1cmU6IFJlYnVpbHQKKworCSogYWNjb25maWcuaDogTmVlZGVkIGZvciAtLWVuYWJsZS1kZWJ1ZyBjb25maWd1cmUgc3dpdGNoLgorCisJKiBSRUFETUU6IEJvb3N0ZWQgcmV2IHRvIDEuMDkuIEFkZGVkIG1vcmUgbm90ZXMgb24gYnVpbGRpbmcKKwlsaWJmZmksIGFuZCBMQ0xpbnQuCisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgLS1lbmFibGUtZGVidWcgc3dpdGNoLiBCb29zdGVkIHJldiB0bworCTEuMDkuCisJKiBjb25maWd1cmU6IFJlYnVpbHQKKworVHVlIE9jdCAxNSAxMzoxMToyOCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLmluIChWRVJTSU9OKTogQm9vc3RlZCByZXYgdG8gMS4wOAorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBSRUFETUU6IEFkZGVkIG4zMiBidWcgZml4IG5vdGVzLgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgIm1ha2UgbGludCIgcHJvZHVjdGlvbi4gCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworTW9uIE9jdCAxNCAxMDo1NDo0NiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIFJFQURNRTogQWRkZWQgd2ViIHBhZ2UgcmVmZXJlbmNlLgorCisJKiBjb25maWd1cmUuaW4sIFJFQURNRTogQm9vc3RlZCByZXYgdG8gMS4wNQorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBSRUFETUU6IEZpeGVkIG4zMiBzYW1wbGUgY29kZS4KKworRnJpIE9jdCAxMSAxNzowOToyOCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIFJFQURNRTogQWRkZWQgc3BhcmMgbm90ZXMuCisKKwkqIGNvbmZpZ3VyZS5pbiwgUkVBRE1FOiBCb29zdGVkIHJldiB0byAxLjA0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCitUaHUgT2N0IDEwIDEwOjMxOjAzIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLmluLCBSRUFETUU6IEJvb3N0ZWQgcmV2IHRvIDEuMDMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKwkqIFJFQURNRTogQWRkZWQgc3RydWN0IG5vdGVzLiAKKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGRlZCBMSUNFTlNFIHRvIGRpc3RyaWJ1dGlvbi4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisJKiBSRUFETUU6IFJlbW92ZWQgTGludXggc2VjdGlvbi4gTm8gc3BlY2lhbCBub3RlcyBub3cKKwliZWNhdXNlIGFnZ3JlZ2F0ZXMgYXJnL3JldHVybiB0eXBlcyB3b3JrLgorCitXZWQgT2N0ICA5IDE2OjE2OjQyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogUkVBRE1FLCBjb25maWd1cmUuaW4gKFZFUlNJT04pOiBCb29zdGVkIHJldiB0byAxLjAyCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKK1R1ZSBPY3QgIDggMTE6NTY6MzMgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBSRUFETUUgKE5PVEUpOiBBZGRlZCBuMzIgbm90ZXMuCisKKwkqIE1ha2VmaWxlLmFtOiBBZGRlZCB0ZXN0IHByb2R1Y3Rpb24uCisJKiBNYWtlZmlsZTogUmVidWlsdAorCisJKiBSRUFETUU6IHNwZWxsIGNoZWNrZWQhCisKKwkqIGNvbmZpZ3VyZS5pbiAoVkVSU0lPTik6IEJvb3N0ZWQgcmV2IHRvIDEuMDEKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworTW9uIE9jdCAgNyAxNTo1MDoyMiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgbmFzdHkgYml0IHRvIHN1cHBvcnQgU0dJIHRvb2xzLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCQorCSogUkVBRE1FOiBBZGRlZCBTR0kgbm90ZXMuIEFkZGVkIG5vdGUgYWJvdXQgYXV0b21ha2UgYnVnLgorCitNb24gT2N0ICA3IDExOjAwOjI4IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBSRUFETUU6IFJld3JvdGUgaW50cm8sIGFuZCBmaXhlZCBleGFtcGxlcy4KKworRnJpIE9jdCAgNCAxMDoxOTo1NSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLmluOiAtRCRUQVJHRVQgaXMgbm8gbG9uZ2VyIHVzZWQgYXMgYSBjb21waWxlciBzd2l0Y2guCisJSXQgaXMgbm93IGluc2VydGVkIGludG8gZmZpLmggYXQgY29uZmlndXJlIHRpbWUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKwkqIEZGSV9BQkkgYW5kIEZGSV9TVEFUVVMgYXJlIG5vdyBmZmlfYWJpIGFuZCBmZmlfc3RhdHVzLgorCitUaHUgT2N0ICAzIDEzOjQ3OjM0IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBSRUFETUUsIExJQ0VOU0U6IENyZWF0ZWQuIFdyb3RlIHNvbWUgZG9jcy4KKworCSogY29uZmlndXJlLmluOiBEb24ndCBiYXJmIG9uIGk1ODYtdW5rbm93bi1saW51eGFvdXQuCisJQWRkZWQgRVhUUkFESVNUIGNvZGUgZm9yICJtYWtlIGRpc3QiLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiAqL01ha2VmaWxlLmluOiBSZWJ1aWx0IHdpdGggcGF0Y2hlZCBhdXRvbWFrZS4gCisKK1R1ZSBPY3QgIDEgMTc6MTI6MjUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbSwgYWNsb2NhbC5tNCwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLAorCWNvbmZpZ3VyZS5pbiwgZmZpY29uZmlnLmguaW4sIGluc3RhbGwtc2gsIG1raW5zdGFsbGRpcnMsIAorCXN0YW1wLWguaW46IENyZWF0ZWQKKwkqIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IEdlbmVyYXRlZAorCistLS0gbGliZmZpL2luY2x1ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVHVlIEZlYiAyNCAxMzowOTozNiAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AZ2VyYmlsLmN5Z251cy5jb20+CisKKwkqIGZmaV9taXBzLmg6IFVwZGF0ZWQgRkZJX1RZUEVfU1RSVUNUXyogdmFsdWVzIGJhc2VkIG9uCisJZmZpLmguaW4gY2hhbmdlcy4gIFRoaXMgaXMgYSB3b3JrLWFyb3VuZCBmb3IgU0dJJ3MgInNpbXBsZSIKKwlhc3NlbWJsZXIuCisKK1N1biBGZWIgMjIgMDA6NTE6NTUgMTk5OCAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BvemVtYWlsLmNvbS5hdT4KKworCSogZmZpLmguaW46IFBvd2VyUEMgc3VwcG9ydC4KKworMTk5OC0wMi0xNCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIGZmaS5oLmluOiBBZGQgbTY4ayBzdXBwb3J0LgorCShGRklfVFlQRV9MT05HRE9VQkxFKTogTWFrZSBpdCBhIHNlcGFyYXRlIHZhbHVlLgorCitUdWUgRmViIDEwIDIwOjU1OjE2IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluIChTSVpFT0ZfQVJHKTogVXNlIGEgcG9pbnRlciB0eXBlIGJ5IGRlZmF1bHQuCisKKwkqIGZmaS5oLmluOiBBbHBoYSBzdXBwb3J0LgorCitGcmkgTm92IDIyIDA2OjQ4OjQ1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW4sIGZmaV9jb21tb24uaDogQ3lnbnVzIFN1cHBvcnQgLT4gQ3lnbnVzIFNvbHV0aW9ucy4KKworV2VkIE5vdiAyMCAyMjozMTowMSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW46IEFkZGVkIGZmaV90eXBlX3ZvaWQgZGVmaW5pdGlvbi4KKworVHVlIE9jdCAyOSAxMjoyMjo0MCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChoYWNrX0RBVEEpOiBBbHdheXMgaW5zdGFsbCBmZmlfbWlwcy5oLgorCisJKiBmZmkuaC5pbjogUmVtb3ZlZCBGRklfREVCVUcuIEl0J3Mgbm93IGluIHRoZSBjb3JyZWN0CisJcGxhY2UgKGFjY29uZmlnLmgpLgorCUFkZGVkICNpbmNsdWRlIDxzdGRkZWYuaD4gZm9yIHNpemVfdCBkZWZpbml0aW9uLgorCitUdWUgT2N0IDE1IDE3OjIzOjM1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuaC5pbiwgZmZpX2NvbW1vbi5oLCBmZmlfbWlwcy5oOiBNb3JlIGNsZWFuIHVwLgorCUNvbW1lbnRlZCBvdXQgI2RlZmluZSBvZiBGRklfREVCVUcuCisKK1R1ZSBPY3QgMTUgMTM6MDE6MDYgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmlfY29tbW9uLmg6IEFkZGVkIGJvb2wgZGVmaW5pdGlvbi4KKworCSogZmZpLmguaW4sIGZmaV9jb21tb24uaDogQ2xlYW4gdXAgYmFzZWQgb24gTENMaW50IG91dHB1dC4KKwlBZGRlZCBmdW5ueSAvKkAuLi5AKi8gY29tbWVudHMgdG8gYW5ub3RhdGUgc291cmNlLgorCitNb24gT2N0IDE0IDEyOjI5OjIzIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW46IEludGVyZmFjZSBjaGFuZ2VzIGJhc2VkIG9uIGZlZWRiYWNrIGZyb20gSmltCisJQmxhbmR5LgorCitGcmkgT2N0IDExIDE2OjQ5OjM1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW46IFNtYWxsIGNoYW5nZSBmb3Igc3BhcmMgc3VwcG9ydC4KKworVGh1IE9jdCAxMCAxNDo1MzozNyAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaV9taXBzLmg6IEFkZGVkIEZGSV9UWVBFX1NUUlVDVF8qIGRlZmluaXRpb25zIGZvciAKKwlzcGVjaWFsIHN0cnVjdHVyZSByZXR1cm4gdHlwZXMuCisKK1dlZCBPY3QgIDkgMTM6NTU6NTcgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuaC5pbjogQWRkZWQgU0laRU9GX0FSRyBkZWZpbml0aW9uIGZvciBYODYKKworVHVlIE9jdCAgOCAxMTo0MDozNiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluIChGRklfRk4pOiBBZGRlZCBtYWNybyBmb3IgZWxpbWluYXRpbmcgY29tcGlsZXIgd2FybmluZ3MuCisJVXNlIGl0IHRvIGNhc2UgeW91ciBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgcHJvcGVyIHR5cGUuCisKKwkqIGZmaV9taXBzLmggKFNJWkVPRl9BUkcpOiBBZGRlZCBtYWdpYyB0byBmaXggdHlwZSBwcm9tb3Rpb24gYnVnLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZGVkIGZmaV9taXBzLmggdG8gRVhUUkFfRElTVC4KKwkqIE1ha2VmaWxlOiBSZWJ1aWx0LgorCisJKiBmZmlfbWlwcy5oOiBDcmVhdGVkLiBNb3ZlZCBhbGwgY29tbW9uIG1pcHMgZGVmaW5pdGlvbnMgaGVyZS4KKworTW9uIE9jdCAgNyAxMDo1ODoxMiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW46IFRoZSBTR0kgYXNzZW1iZXIgaXMgdmVyeSBwaWNreSBhYm91dCBwYXJlbnMuIFJlZGVmaW5lZAorIAlzb21lIG1hY3JvcyB0byBhdm9pZCBwcm9ibGVtcy4KKworCSogZmZpLmguaW46IEFkZGVkIEZGSV9ERUZBVUxUX0FCSSBkZWZpbml0aW9ucy4gQWxzbyBhZGRlZAorCWV4dGVybnMgZm9yIHBvaW50ZXIsIGFuZCA2NGJpdCBpbnRlZ3JhbCBmZmlfdHlwZXMuCisKK0ZyaSBPY3QgIDQgMDk6NTE6MzcgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluOiBBZGRlZCBGRklfQUJJIG1lbWJlciB0byBmZmlfY2lmIGFuZCBjaGFuZ2VkCisJZnVuY3Rpb24gcHJvdG90eXBlcyBhY2NvcmRpbmdseS4KKwlBZGRlZCAjZGVmaW5lIEBUQVJHRVRALiBOb3cgcHJvZ3JhbXMgaW5jbHVkaW5nIGZmaS5oIGRvbid0IAorCWhhdmUgdG8gc3BlY2lmeSB0aGlzIHRoZW1zZWx2ZXMuCisKK1RodSBPY3QgIDMgMTU6MzY6NDQgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluOiBDaGFuZ2VkIGZmaV9wcmVwX2NpZidzIHZhbHVlcyBmcm9tIHZvaWQqIHRvIHZvaWQqKgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZGVkIEVYVFJBX0RJU1QgZm9yICJtYWtlIGRpc3QiCisJdG8gd29yay4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKworV2VkIE9jdCAgMiAxMDoxNjo1OSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuYW06IENyZWF0ZWQKKwkqIE1ha2VmaWxlLmluOiBHZW5lcmF0ZWQKKworCSogZmZpX2NvbW1vbi5oOiBBZGRlZCByY3NpZCBjb21tZW50CisKK1R1ZSBPY3QgIDEgMTc6MTM6NTEgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuaC5pbiwgZmZpX2NvbW1vbi5oOiBDcmVhdGVkCisKKy0tLSBsaWJmZmkvc3JjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb24gT2N0ICA1IDAyOjE3OjUwIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBhcm0vZmZpLmMsIGFybS9zeXN2LlM6IENyZWF0ZWQuCisKKwkqIE1ha2VmaWxlLmFtOiBBZGRlZCBhcm0gZmlsZXMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworTW9uIE9jdCAgNSAwMTo0MTozOCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfTERGTEFHUyk6IEluY3JlbWVudGVkIHJldmlzaW9uLgorCitTdW4gT2N0ICA0IDE2OjI3OjE3IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBhbHBoYS9vc2YuUyAoZmZpX2NhbGxfb3NmKTogUGF0Y2ggZm9yIERVIGFzc2VtYmxlci4KKworCSogZmZpdGVzdC5jIChtYWluKTogbG9uZyBsb25nIGFuZCBsb25nIGRvdWJsZSByZXR1cm4gdmFsdWVzIHdvcmsKKwlmb3IgeDg2LgorCitGcmkgQXByIDE3IDExOjUwOjU4IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogZmZpdGVzdC5jIChtYWluKTogRmxvYXRpbmcgcG9pbnQgdGVzdHMgbm90IGV4ZWN1dGVkIGZvciBzeXN0ZW1zCisgCXdpdGggYnJva2VuIGxvbmQgZG91YmxlIChTdW5PUyA0IHcvIEdDQykuCisKKwkqIHR5cGVzLmM6IEZpeGVkIHg4NiBhbGlnbm1lbnQgaW5mbyBmb3IgbG9uZyBsb25nIHR5cGVzLgorCitUaHUgQXByIDE2IDA3OjE1OjI4IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBhZGEuY3lnbnVzLmNvbT4KKworCSogZmZpdGVzdC5jOiBBZGRlZCBtb3JlIG5vdGVzIGFib3V0IEdDQyBidWdzIHVuZGVyIElyaXggNi4KKworV2VkIEFwciAxNSAwODo0MjoyMiAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZmZpdGVzdC5jIChzdHJ1Y3Q1KTogTmV3IHRlc3QgZnVuY3Rpb24uCisJKG1haW4pOiBOZXcgdGVzdCB3aXRoIHN0cnVjdDUuCisKK1RodSBNYXIgIDUgMTA6NDg6MTEgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHRvb3RpZS50by5jeWdudXMuY29tPgorCisJKiBwcmVwX2NpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IEZpeCBhc3NlcnRpb24gZm9yCisJbmVzdGVkIHN0cnVjdHVyZXMuCisKK1R1ZSBGZWIgMjQgMTY6MzM6NDEgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIHByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IEFkZGVkIGxvbmcgZG91YmxlIHN1cHBvcnQgZm9yIHNwYXJjLgorCitTdW4gRmViIDIyIDAwOjUyOjE4IDE5OTggIEdlb2ZmIEtlYXRpbmcgIDxnZW9mZmtAb3plbWFpbC5jb20uYXU+CisKKwkqIHBvd2VycGMvYXNtLmg6IE5ldyBmaWxlLgorCSogcG93ZXJwYy9mZmkuYzogTmV3IGZpbGUuCisJKiBwb3dlcnBjL3N5c3YuUzogTmV3IGZpbGUuCisJKiBNYWtlZmlsZS5hbTogUG93ZXJQQyBwb3J0LgorCSogZmZpdGVzdC5jIChtYWluKTogQWxsb3cgYWxsIHRlc3RzIHRvIHJ1biBldmVuIGluIHByZXNlbmNlIG9mIGdjYworIAlidWcgb24gUG93ZXJQQy4KKworMTk5OC0wMi0xNyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG1pcHMvZmZpLmM6IEZpeGVkIGNvbW1lbnQgdHlwby4KKworCSogeDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCksIHg4Ni9zeXN2LlMgKHJldGZsb2F0KTogCisJRml4ZWQgeDg2IGxvbmcgZG91YmxlIHJldHVybiBoYW5kbGluZy4KKworCSogdHlwZXMuYzogRml4ZWQgeDg2IGxvbmcgZG91YmxlIGFsaWdubWVudCBpbmZvLgorCisxOTk4LTAyLTE0ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KKworCSogdHlwZXMuYzogQWRkIG02OGsgc3VwcG9ydC4KKworCSogZmZpdGVzdC5jIChmbG9hdGluZyk6IEFkZCBsb25nIGRvdWJsZSBwYXJhbWV0ZXIuCisJKHJldHVybl9sbCwgbGRibGl0KTogTmV3IGZ1bmN0aW9ucyB0byB0ZXN0IGxvbmcgbG9uZyBhbmQgbG9uZworCWRvdWJsZSByZXR1cm4gdmFsdWUuCisJKG1haW4pOiBGaXggdHlwZSBlcnJvciBpbiBhc3NpZ25tZW50IG9mIHRzWzEtNF1fdHlwZS5lbGVtZW50cy4KKwlBZGQgdGVzdHMgZm9yIGxvbmcgbG9uZyBhbmQgbG9uZyBkb3VibGUgYXJndW1lbnRzIGFuZCByZXR1cm4KKwl2YWx1ZXMuCisKKwkqIHByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZikgW002OEtdOiBEb24ndCBhbGxvY2F0ZSBhcmd1bWVudCBmb3IKKwlzdHJ1Y3QgdmFsdWUgcG9pbnRlci4KKworCSogbTY4ay9mZmkuYywgbTY4ay9zeXN2LlM6IE5ldyBmaWxlcy4KKwkqIE1ha2VmaWxlLmFtOiBBZGQgYml0cyBmb3IgbTY4ayBwb3J0LiAgQWRkIGtsdWRnZSB0byB3b3JrIGFyb3VuZAorCWF1dG9tYWtlIGRlZmljaWVuY3kuCisJKHRlc3QpOiBEb24ndCByZXF1aXJlICIuIiBpbiAkUEFUSC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCitXZWQgRmViIDExIDA3OjM2OjUwIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworVHVlIEZlYiAxMCAyMDo1NjowMCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgorCisJKiBhbHBoYS9mZmkuYywgYWxwaGEvb3NmLlM6IE5ldyBmaWxlcy4KKwkqIE1ha2VmaWxlLmFtOiBBbHBoYSBwb3J0LgorCitUdWUgTm92IDE4IDE0OjEyOjA3IDE5OTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBtaXBzL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEluaXRpYWxpemUgcnN0cnVjdF9mbGFnCisJZm9yIG4zMi4KKworVHVlIEp1biAgMyAxNzoxODoyMCAxOTk3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZmZpdGVzdC5jIChtYWluKTogQWRkZWQgaGFjayB0byBnZXQgc3RydWN0dXJlIHRlc3RzIHdvcmtpbmcKKwljb3JyZWN0bHkuCisKK1NhdCBNYXkgMTAgMTk6MDY6NDIgMTk5NyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogRXhwbGljaXRseSBsaXN0IGFsbCBkaXN0cmlidXRhYmxlCisJZmlsZXMgaW4gc3ViZGlycy4KKwkoVkVSU0lPTiwgQ0MpOiBSZW1vdmVkLgorCitUaHUgTWF5ICA4IDE3OjE5OjAxIDE5OTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbTogTWFueSBjaGFuZ2VzIGZvciBuZXcgYXV0b21ha2UgYW5kIGxpYnRvb2wuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworRnJpIE5vdiAyMiAwNjo1Nzo1NiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaXRlc3QuYyAobWFpbik6IEZpeGVkIHRlc3QgY2FzZSBmb3Igbm9uIG1pcHMgbWFjaGluZXMuCisKK1dlZCBOb3YgMjAgMjI6MzE6NTkgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIHR5cGVzLmM6IEFkZGVkIGZmaV90eXBlX3ZvaWQgZGVjbGFyYXRpb24uCisKK1R1ZSBPY3QgMjkgMTM6MDc6MTkgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZml0ZXN0LmMgKG1haW4pOiBGaXhlZCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorCShtYWluKTogRW1pdCB3YXJuaW5nIGZvciBzdHJ1Y3R1cmUgdGVzdCAzIGZhaWx1cmUgb24gU3VuLgorCisJKiBNYWtlZmlsZS5hbSAoVlBBVEgpOiBGaXhlZCBWUEFUSCBkZWYnbiBzbyBhdXRvbWFrZSB3b24ndAorCXN0cmlwIGl0IG91dC4gCisJTW92ZWQgZGlzdGRpciBoYWNrIGZyb20gbGliZmZpIHRvIGF1dG9tYWtlLiAKKwkoZmZpdGVzdCk6IEFkZGVkIG1pc3NpbmcgLWMgZm9yICQoQ09NUElMRSkgKGNoYW5nZSBpbiBhdXRvbWFrZSkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkKK1R1ZSBPY3QgMTUgMTM6MDg6MjAgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGRlZCAibWFrZSBsaW50IiBwcm9kdWN0aW9uLiAKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisJKiBwcmVwX2NpZi5jIChTVEFDS19BUkdfU0laRSk6IEltcHJvdmVkIFNUQUNLX0FSR19TSVpFIG1hY3JvLgorICAJQ2xlYW4gdXAgYmFzZWQgb24gTENMaW50IG91dHB1dC4gQWRkZWQgZnVubnkgLypALi4uQCovIGNvbW1lbnRzIHRvCisgCWFubm90YXRlIHNvdXJjZS4KKworCSogZmZpdGVzdC5jLCBkZWJ1Zy5jOiBDbGVhbmVkIHVwIGNvZGUuCisKK01vbiBPY3QgMTQgMTI6MjY6NTYgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZml0ZXN0LmM6IENoYW5nZXMgYmFzZWQgb24gaW50ZXJmYWNlIGNoYW5nZXMuCisKKwkqIHByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IENsZWFuZWQgdXAgaW50ZXJmYWNlIGJhc2VkIG9uCisJZmVlZGJhY2sgZnJvbSBKaW0gQmxhbmR5LgorCitGcmkgT2N0IDExIDE1OjUzOjE4IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpdGVzdC5jOiBSZW9yZGVyZWQgdGVzdHMgd2hpbGUgcG9ydGluZyB0byBzcGFyYy4KKwlNYWRlIGNoYW5nZXMgdG8gaGFuZGxlIGxhbWUgc3RydWN0dXJlIHBhc3NpbmcgZm9yIHNwYXJjLgorCVJlbW92ZWQgY2FsbHMgdG8gZmZsdXNoKCkuCisKKwkqIHByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IEFkZGVkIHNwZWNpYWwgY2FzZSBmb3Igc3BhcmMKKwlhZ2dyZWdhdGUgdHlwZSBhcmd1bWVudHMuCisKK1RodSBPY3QgMTAgMDk6NTY6NTEgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZml0ZXN0LmMgKG1haW4pOiBBZGRlZCBzdHJ1Y3R1cmUgcGFzc2luZy9yZXR1cm5pbmcgdGVzdHMuCisKKwkqIHByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IFBlcmZvcm0gcHJvcGVyIGluaXRpYWxpemF0aW9uCisJb2Ygc3RydWN0dXJlIHJldHVybiB0eXBlcyBpZiBuZWVkZWQuCisJKGluaXRpYWxpemVfYWdncmVnYXRlKTogQnVnIGZpeAorCitXZWQgT2N0ICA5IDE2OjA0OjIwIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogdHlwZXMuYzogQWRkZWQgc3BlY2lhbCBkZWZpbml0aW9ucyBmb3IgeDg2IChkb3VibGUgZG9lc24ndAorCW5lZWQgZG91YmxlIHdvcmQgYWxpZ25tZW50KS4KKworCSogZmZpdGVzdC5jOiBBZGRlZCBtYW55IHRlc3RzCisKK1R1ZSBPY3QgIDggMDk6MTk6MjIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBGaXhlZCBhc3NlcnRpb24uCisKKwkqIGRlYnVnLmMgKGZmaV9hc3NlcnQpOiBNdXN0IHJldHVybiBhIG5vbiB2b2lkIG5vdy4KKworCSogTWFrZWZpbGUuYW06IEFkZGVkIHRlc3QgcHJvZHVjdGlvbi4KKwkqIE1ha2VmaWxlOiBSZWJ1aWx0LgorCisJKiBmZml0ZXN0LmMgKG1haW4pOiBDcmVhdGVkLiAKKworCSogdHlwZXMuYzogQ3JlYXRlZC4gU3RyaXBwZWQgY29tbW9uIGNvZGUgb3V0IG9mICovZmZpLmMuCisKKwkqIHByZXBfY2lmLmM6IEFkZGVkIG1pc3Npbmcgc3RkbGliLmggaW5jbHVkZS4KKworCSogZGVidWcuYyAoZmZpX3R5cGVfdGVzdCk6IFVzZWQgImEiIHRvIGVsaW1pbmF0ZSBjb21waWxlcgorCXdhcm5pbmdzIGluIG5vbi1kZWJ1ZyBidWlsZHMuIEluY2x1ZGVkIGZmaV9jb21tb24uaC4KKworTW9uIE9jdCAgNyAxNTozNjo0MiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGRlZCBhIHJ1bGUgZm9yIC5zIC0+IC5vCisJVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgU0dJIGNvbXBpbGVyLgorCSogTWFrZWZpbGU6IFJlYnVpbHQuCisKK0ZyaSBPY3QgIDQgMDk6NTE6MDggMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIHByZXBfY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlKTogTW92ZWQgYWJpIHNwZWNpZmljYXRpb24KKwl0byBmZmlfcHJlcF9jaWYoKS4KKworVGh1IE9jdCAgMyAxNTozNzozNyAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogQ2hhbmdlZCB2YWx1ZXMgZnJvbSB2b2lkKiB0byB2b2lkKiouCisJKGluaXRpYWxpemVfYWdncmVnYXRlKTogRml4ZWQgYWdncmVnYXRlIHR5cGUgaW5pdGlhbGl6YXRpb24uCisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkZWQgc3VwcG9ydCBjb2RlIGZvciAibWFrZSBkaXN0Ii4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKworV2VkIE9jdCAgMiAxMTo0MTo1NyAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZGVidWcuYywgcHJlcF9jaWY6IENyZWF0ZWQuCisKKwkqIE1ha2VmaWxlLmFtOiBBZGRlZCBkZWJ1Zy5vIGFuZCBwcmVwX2NpZi5vIHRvIE9CSi4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKworCSogTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQWRkZWQgbWlzc2luZyAtSS4uL2luY2x1ZGUKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKworVHVlIE9jdCAgMSAxNzoxMTo1MSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGVycm9yLmMsIE1ha2VmaWxlLmFtOiBDcmVhdGVkLgorCSogTWFrZWZpbGUuaW46IEdlbmVyYXRlZC4KKworLS0tIGxpYmZmaS9zcmMveDg2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1biBPY3QgIDQgMTY6Mjc6MTcgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CisKKwkqIHN5c3YuUyAocmV0bG9uZ2RvdWJsZSk6IEZpeGVkIGxvbmcgbG9uZyByZXR1cm4gdmFsdWUgc3VwcG9ydC4KKwkqIGZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IERpdHRvLgorCitXZWQgTWF5IDEzIDA0OjMwOjMzIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkByYWZ0LnBwcC50c29mdC5uZXQ+CisKKwkqIGZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeGVkIGxvbmcgZG91YmxlIHJldHVybiB2YWx1ZQorCXN1cHBvcnQuCisKK1dlZCBBcHIgMTUgMDg6NDM6MjAgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChmZmlfcHJlcF9hcmdzKTogc21hbGwgc3RydWN0IHN1cHBvcnQgd2FzIG1pc3NpbmcuCisKK1RodSBNYXkgIDggMTY6NTM6NTggMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG9iamVjdHMubWFrOiBSZW1vdmVkLgorCitNb24gRGVjICAyIDE1OjEyOjU4IDE5OTYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogc3lzdi5TOiBVc2UgLmJhbGlnbiwgZm9yIGEub3V0IExpbnV4IGJveGVzLgorCitUdWUgT2N0IDE1IDEzOjA2OjUwIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuYzogQ2xlYW4gdXAgYmFzZWQgb24gTENMaW50IG91dHB1dC4KKwlBZGRlZCBmdW5ueSAvKkAuLi5AKi8gY29tbWVudHMgdG8gYW5ub3RhdGUgc291cmNlLgorCitGcmkgT2N0IDExIDE2OjQzOjM4IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmMgKGZmaV9jYWxsKTogQWRkZWQgYXNzZXJ0aW9uIGZvciBiYWQgQUJJcy4KKworV2VkIE9jdCAgOSAxMzo1NzoyNyAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIHN5c3YuUyAocmV0ZG91YmxlKTogRml4ZWQgZG91YmxlIHJldHVybiBwcm9ibGVtcy4KKworCSogZmZpLmMJKGZmaV9jYWxsKTogQ29ycmVjdGVkIGZuIGFyZyBkZWZpbml0aW9uLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeGVkIGRvdWJsZSByZXR1cm4gcHJvYmxlbXMKKworVHVlIE9jdCAgOCAxMjoxMjo0OSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5jOiBNb3ZlZCBmZmlfdHlwZSBkZWZpbml0aW9ucyB0byB0eXBlcy5jLgorCShmZmlfcHJlcF9hcmdzKTogRml4ZWQgdHlwZSBwcm9tb3Rpb24gYnVnLgorCitNb24gT2N0ICA3IDE1OjUzOjA2IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmMgKEZGSV8qX1RZUEVERUYpOiBSZW1vdmVkIHJlZHVuZGFudCAnOycKKworRnJpIE9jdCAgNCAwOTo1NDo1MyAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZmZpLmMgKGZmaV9jYWxsKTogUmVtb3ZlZCBGRklfQUJJIGFyZywgYW5kIHN3YXBwZWQKKwlyZW1haW5pbmcgYXJncy4KKworV2VkIE9jdCAgMiAxMDowNzowNSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZmZpLmMsIHN5c3YuUywgb2JqZWN0cy5tYWs6IENyZWF0ZWQuCisJKGZmaV9wcmVwX2NpZik6IGNpZi0+cnZhbHVlIG5vIGxvbmdlciBpbml0aWFsaXplZCB0byBOVUxMLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IE1vdmVkIG1hY2hpbmUgaW5kZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcKKwl0byBzcmMvcHJlcF9jaWYuYy4gSW50cm9kdWNlZCBmZmlfcHJlcF9jaWZfbWFjaGRlcCgpLgorCistLS0gbGliZmZpL3NyYy9taXBzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVHVlIEZlYiAxNyAxNzoxODowNyAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogbzMyLlM6IEZpeGVkIHR5cG8gaW4gY29tbWVudC4KKworCSogZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4ZWQgYXJndW1lbnQgcHJvY2Vzc2luZy4KKworVGh1IE1heSAgOCAxNjo1Mzo1OCAxOTk3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogbzMyLnMsIG4zMi5zOiBXcmFwcGVycyBmb3IgU0dJIHRvb2wgc3VwcG9ydC4KKworCSogb2JqZWN0cy5tYWs6IFJlbW92ZWQuCisKK1R1ZSBPY3QgMjkgMTQ6Mzc6NDUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuYyAoZmZpX3ByZXBfYXJncyk6IENoYW5nZWQgaW50IHogdG8gc2l6ZV90IHouCisKK1R1ZSBPY3QgMTUgMTM6MTc6MjUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG4zMi5TOiBGaXhlZCBiYWQgc3RhY2sgbXVuZ2luZy4gCisKKwkqIGZmaS5jOiBNb3ZlZCBwcm90b3R5cGVzIGZvciBmZmlfY2FsbF8/MzIoKSB0byBoZXJlIGZyb20KKwlmZmlfbWlwcy5oIGJlY2F1c2UgZXh0ZW5kZWRfY2lmIGlzIG5vdCBkZWZpbmVkIGluIGZmaV9taXBzLmguCisKK01vbiBPY3QgMTQgMTI6NDI6MDIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuYzogSW50ZXJmYWNlIGNoYW5nZXMgYmFzZWQgb24gZmVlZGJhY2sgZnJvbSBKaW0gQmxhbmR5LgorCitUaHUgT2N0IDEwIDExOjIyOjE2IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogbjMyLlMsIGZmaS5jOiBMb3RzIG9mIGNoYW5nZXMgdG8gc3VwcG9ydCBwYXNzaW5nIGFuZCAKKwlyZXR1cm5pbmcgc3RydWN0dXJlcyB3aXRoIHRoZSBuMzIgY2FsbGluZyBjb252ZW50aW9uLgorCisJKiBuMzIuUzogRml4ZWQgZm4gcG9pbnRlciBidWcuCisKKwkqIGZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCBmb3IgbzMyIHN0cnVjdHVyZQorCXJldHVybiB2YWx1ZXMuCisJKGZmaV9wcmVwX2FyZ3MpOiBGaXhlZCBuMzIgc3RydWN0dXJlIHBhc3Npbmcgd2hlbiBzdHJ1Y3R1cmVzCisJcGFydGlhbGx5IGZpdCBpbiByZWdpc3RlcnMuCisKK1dlZCBPY3QgIDkgMTM6NDk6MjUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBvYmplY3RzLm1hazogQWRkZWQgbjMyLm8uCisKKwkqIG4zMi5TOiBDcmVhdGVkLgorCisJKiBmZmkuYyAoZmZpX3ByZXBfYXJncyk6IEFkZGVkIG1hZ2ljIHRvIHN1cHBvcnQgcHJvcGVyCisJbjMyIHByb2Nlc3NpbmcuCisKK1R1ZSBPY3QgIDggMTA6Mzc6MzUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuYzogTW92ZWQgZmZpX3R5cGUgZGVmaW5pdGlvbnMgdG8gdHlwZXMuYy4KKwkoZmZpX3ByZXBfYXJncyk6IEZpeGVkIHR5cGUgcHJvbW90aW9uIGJ1Zy4KKworCSogbzMyLlM6IFRoaXMgY29kZSBpcyBvbmx5IGJ1aWx0IGZvciBvMzIgY29tcGlsZXMuCisJQSBsb3Qgb2YgdGhlICNkZWZpbmUgY3J1ZnQgaGFzIG1vdmVkIHRvIGZmaV9taXBzLmguCisKKwkqIGZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeGVkIGFyZyBmbGFncy4gU2Vjb25kIGFyZworCWlzIG9ubHkgcHJvY2Vzc2VkIGlmIHRoZSBmaXJzdCBpcyBlaXRoZXIgYSBmbG9hdCBvciBkb3VibGUuCisKK01vbiBPY3QgIDcgMTU6MzM6NTkgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBvMzIuUzogTW9kaWZpZWQgdG8gY29tcGlsZSB1bmRlciBlYWNoIG9mIG8zMiwgbjMyIGFuZCBuNjQuCisKKwkqIGZmaS5jIChGRklfKl9UWVBFREVGKTogUmVtb3ZlZCByZWR1bmRhbnQgJzsnCisKK0ZyaSBPY3QgIDQgMDk6NTM6MjUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChmZmlfY2FsbCk6IFJlbW92ZWQgRkZJX0FCSSBhcmcsIGFuZCBzd2FwcGVkCisJcmVtYWluaW5nIGFyZ3MuCisKK1dlZCBPY3QgIDIgMTc6NDE6MjIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBvMzIuUzogUmVtb3ZlZCBjcnVmdHkgZGVmaW5pdGlvbnMuCisKK1dlZCBPY3QgIDIgMTI6NTM6NDIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChmZmlfcHJlcF9jaWYpOiBjaWYtPnJ2YWx1ZSBubyBsb25nZXIgaW5pdGlhbGl6ZWQgdG8gTlVMTC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBNb3ZlZCBhbGwgbWFjaGluZSBpbmRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZworCXRvIHNyYy9wcmVwX2NpZi5jLiBJbnRyb2R1Y2VkIGZmaV9wcmVwX2NpZl9tYWNoZGVwLiBSZXR1cm4gdHlwZXMKKwlvZiBGRklfVFlQRV9TVFJVQ1QgYXJlIG5vIGRpZmZlcmVudCB0aGFuIEZGSV9UWVBFX0lOVC4KKworVHVlIE9jdCAgMSAxNzoxMTowMiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5jLCBvMzIuUywgb2JqZWN0Lm1hazogQ3JlYXRlZAorCQorLS0tIGxpYmZmaS9zcmMvc3BhcmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1R1ZSBGZWIgMjQgMTY6MzM6MTggMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChmZmlfcHJlcF9hcmdzKTogQWRkZWQgbG9uZyBkb3VibGUgc3VwcG9ydC4KKworVGh1IE1heSAgOCAxNjo1Mzo1OCAxOTk3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogb2JqZWN0cy5tYWs6IFJlbW92ZWQuCisKK1RodSBNYXkgIDEgMTY6MDc6NTYgMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIHY4LlM6IEZpeGVkIG1pbm9yIHBvcnRhYmlsaXR5IHByb2JsZW0gcmVwb3J0ZWQgYnkgCisJUnVzcyBNY01hbnVzIDxtY21hbnJAZXEuZ3MuY29tPi4KKworVHVlIE5vdiAyNiAxNDoxMjo0MyAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3NrMy5jeWdudXMuY29tPgorCisJKiB2OC5TOiBVc2VkIFNUQUNLRlJBTUUgZGVmaW5lIGVsc2V3aGVyZS4gCisKKwkqIGZmaS5jIChmZmlfcHJlcF9hcmdzKTogWmVybyBvdXQgc3BhY2Ugd2hlbiBVU0lOR19QVVJJRlkKKwlpcyBzZXQuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWxsb2NhdGUgdGhlIGNvcnJlY3Qgc3RhY2sgZnJhbWUgCisJc3BhY2UgZm9yIGZ1bmN0aW9ucyB3aXRoIDwgNiBhcmdzLgorCitUdWUgT2N0IDI5IDE1OjA4OjU1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBpbnQgeiBpcyBub3cgc2l6ZV90IHouCisKK01vbiBPY3QgMTQgMTM6MzE6MjQgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiB2OC5TIChmZmlfY2FsbF9WOCk6IEdvcmRvbiByZXdyaXRlcyB0aGlzIGFnYWluLiBJdCBsb29rcworCWdyZWF0IG5vdy4KKworCSogZmZpLmMgKGZmaV9jYWxsKTogVGhlIGNvbW1lbnQgYWJvdXQgaGlqYWNrZWQgcmVnaXN0ZXJzCisJaXMgbm8gbG9uZ2VyIHZhbGlkIGFmdGVyIGdvcmRvbmkgaGFja2VkIHY4LlMuCisKKyAgICAgICAgKiB2OC5TIChmZmlfY2FsbF9WOCk6IFJld3JvdGUgd2l0aCBnb3Jkb25pLiBNdWNoIHNpbXBsZXIuCisJCisJKiB2OC5TLCBmZmkuYzogZmZpX2NhbGwoKSBoYWQgY2hhbmdlZCB0byBhY2NlcHQgbW9yZSB0aGFuCisJdHdvIGFyZ3MsIHNvIHY4LlMgaGFkIHRvIGNoYW5nZSAoYmVjYXVzZSBpdCBoaWphY2tzIGluY29taW5nCisJYXJnIHJlZ2lzdGVycykuCisKKwkqIGZmaS5jOiBJbnRlcmZhY2UgY2hhbmdlcyBiYXNlZCBvbiBmZWVkYmFjayBmcm9tIEppbSBCbGFuZHkuCisKK1RodSBPY3QgMTAgMTc6NDg6MTYgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuYywgdjguUywgb2JqZWN0cy5tYWs6IENyZWF0ZWQuCisJCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTElDRU5TRSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTElDRU5TRQppbmRleCAwNjRmNGZhLi5lYzJmZDY5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0xJQ0VOU0UKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9MSUNFTlNFCkBAIC0xLDQgKzEsNCBAQAotbGliZmZpIC0gQ29weXJpZ2h0IChjKSAxOTk2LTIwMDggIFJlZCBIYXQsIEluYyBhbmQgb3RoZXJzLiAgCitsaWJmZmkgLSBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwOSAgQW50aG9ueSBHcmVlbiwgUmVkIEhhdCwgSW5jIGFuZCBvdGhlcnMuICAKIFNlZSBzb3VyY2UgZmlsZXMgZm9yIGRldGFpbHMuCiAKIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5hbSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuYW0KaW5kZXggMGRiNTJjYS4uZjQ3ZGQxYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5hbQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmFtCkBAIC03LDYgKzcsNyBAQAogRVhUUkFfRElTVCA9IExJQ0VOU0UgQ2hhbmdlTG9nLnYxIENoYW5nZUxvZy5saWJnY2ogY29uZmlndXJlLmhvc3QgXAogCXNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvb3NmLlMgc3JjL2FscGhhL2ZmaXRhcmdldC5oIFwKIAlzcmMvYXJtL2ZmaS5jIHNyYy9hcm0vc3lzdi5TIHNyYy9hcm0vZmZpdGFyZ2V0LmggXAorCXNyYy9hdnIzMi9mZmkuYyBzcmMvYXZyMzIvc3lzdi5TIHNyYy9hdnIzMi9mZml0YXJnZXQuaCBcCiAJc3JjL2NyaXMvZmZpLmMgc3JjL2NyaXMvc3lzdi5TIHNyYy9jcmlzL2ZmaXRhcmdldC5oIFwKIAlzcmMvaWE2NC9mZmkuYyBzcmMvaWE2NC9mZml0YXJnZXQuaCBzcmMvaWE2NC9pYTY0X2ZsYWdzLmggXAogCXNyYy9pYTY0L3VuaXguUyBcCkBAIC0yNSwxMiArMjYsMTMgQEAKIAlzcmMvc2g2NC9mZmkuYyBzcmMvc2g2NC9zeXN2LlMgc3JjL3NoNjQvZmZpdGFyZ2V0LmggXAogCXNyYy9zcGFyYy92OC5TIHNyYy9zcGFyYy92OS5TIHNyYy9zcGFyYy9mZml0YXJnZXQuaCBcCiAJc3JjL3NwYXJjL2ZmaS5jIHNyYy94ODYvZGFyd2luNjQuUyBcCi0Jc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUyBzcmMveDg2L3dpbjMyLlMgc3JjL3g4Ni9kYXJ3aW4uUyBcCi0Jc3JjL3g4Ni9mcmVlYnNkLlMgXAorCXNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMgc3JjL3g4Ni93aW4zMi5TIHNyYy94ODYvd2luNjQuUyBcCisJc3JjL3g4Ni9kYXJ3aW4uUyBzcmMveDg2L2ZyZWVic2QuUyBcCiAJc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvdW5peDY0LlMgc3JjL3g4Ni9mZml0YXJnZXQuaCBcCiAJc3JjL3BhL2ZmaXRhcmdldC5oIHNyYy9wYS9mZmkuYyBzcmMvcGEvbGludXguUyBzcmMvcGEvaHB1eDMyLlMgXAogCXNyYy9mcnYvZmZpLmMgc3JjL2Zydi9lYWJpLlMgc3JjL2Zydi9mZml0YXJnZXQuaCBzcmMvZGxtYWxsb2MuYyBcCi0JbGlidG9vbC12ZXJzaW9uIENoYW5nZUxvZy5saWJmZmkKKwlsaWJ0b29sLXZlcnNpb24gQ2hhbmdlTG9nLmxpYmZmaSBtNC9saWJ0b29sLm00IFwKKwltNC9sdH5vYnNvbGV0ZS5tNCBtNC9sdG9wdGlvbnMubTQgbTQvbHRzdWdhci5tNCBtNC9sdHZlcnNpb24ubTQKIAogaW5mb19URVhJTkZPUyA9IGRvYy9saWJmZmkudGV4aQogCkBAIC03OSw2ICs4MSw4IEBACiAKIE1BS0VPVkVSUklERVM9CiAKK0FDTE9DQUxfQU1GTEFHUz0kKEFDTE9DQUxfQU1GTEFHUykgLUkgbTQKKwogbGliX0xUTElCUkFSSUVTID0gbGliZmZpLmxhCiBub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJmZmlfY29udmVuaWVuY2UubGEKIApAQCAtMTAyLDYgKzEwNiw5IEBACiBpZiBYODZfV0lOMzIKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvd2luMzIuUwogZW5kaWYKK2lmIFg4Nl9XSU42NAorbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni93aW42NC5TCitlbmRpZgogaWYgWDg2X0RBUldJTgogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9kYXJ3aW4uUyBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni9kYXJ3aW42NC5TCiBlbmRpZgpAQCAtMTM1LDYgKzE0Miw5IEBACiBpZiBBUk0KIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvYXJtL3N5c3YuUyBzcmMvYXJtL2ZmaS5jCiBlbmRpZgoraWYgQVZSMzIKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvYXZyMzIvc3lzdi5TIHNyYy9hdnIzMi9mZmkuYworZW5kaWYKIGlmIExJQkZGSV9DUklTCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL2NyaXMvc3lzdi5TIHNyYy9jcmlzL2ZmaS5jCiBlbmRpZgpAQCAtMTY1LDcgKzE3NSw3IEBACiAKIEFNX0NGTEFHUyA9IC1XYWxsIC1nIC1mZXhjZXB0aW9ucwogCi1saWJmZmlfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gYGdyZXAgLXYgJ15cIycgJChzcmNkaXIpL2xpYnRvb2wtdmVyc2lvbmAKK2xpYmZmaV9sYV9MREZMQUdTID0gLXZlcnNpb24taW5mbyBgZ3JlcCAtdiAnXlwjJyAkKHNyY2RpcikvbGlidG9vbC12ZXJzaW9uYCAkKExUTERGTEFHUykgJChBTV9MVExERkxBR1MpCiAKIEFNX0NQUEZMQUdTID0gLUkuIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JaW5jbHVkZSAtSSQodG9wX3NyY2Rpcikvc3JjCiBBTV9DQ0FTRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQpAQCAtMTc0LDQgKzE4NCwzIEBACiAuUEhPTlk6IGluc3RhbGwtaHRtbCBpbnN0YWxsLXBkZgogaW5zdGFsbC1odG1sOgogaW5zdGFsbC1wZGY6Ci0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmluCmluZGV4IDkwNTIzZmIuLjQ5YWZjYzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuaW4KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5pbgpAQCAtMSw4ICsxLDkgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEgZnJvbSBNYWtlZmlsZS5hbS4KICMgQGNvbmZpZ3VyZV9pbnB1dEAKIAogIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTE3LDggKzE4LDkgQEAKIAogVlBBVEggPSBAc3JjZGlyQAogcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACiBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAogYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAogaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKQEAgLTM4LDMzICs0MCwzNCBAQAogQFg4Nl9UUlVFQGFtX19hcHBlbmRfMiA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMKIEBYODZfRlJFRUJTRF9UUlVFQGFtX19hcHBlbmRfMyA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9mcmVlYnNkLlMKIEBYODZfV0lOMzJfVFJVRUBhbV9fYXBwZW5kXzQgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvd2luMzIuUwotQFg4Nl9EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzUgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZGFyd2luLlMgc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvZGFyd2luNjQuUwotQFNQQVJDX1RSVUVAYW1fX2FwcGVuZF82ID0gc3JjL3NwYXJjL2ZmaS5jIHNyYy9zcGFyYy92OC5TIHNyYy9zcGFyYy92OS5TCi1AQUxQSEFfVFJVRUBhbV9fYXBwZW5kXzcgPSBzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TCi1ASUE2NF9UUlVFQGFtX19hcHBlbmRfOCA9IHNyYy9pYTY0L2ZmaS5jIHNyYy9pYTY0L3VuaXguUwotQE0zMlJfVFJVRUBhbV9fYXBwZW5kXzkgPSBzcmMvbTMyci9zeXN2LlMgc3JjL20zMnIvZmZpLmMKLUBNNjhLX1RSVUVAYW1fX2FwcGVuZF8xMCA9IHNyYy9tNjhrL2ZmaS5jIHNyYy9tNjhrL3N5c3YuUwotQFBPV0VSUENfVFJVRUBhbV9fYXBwZW5kXzExID0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgc3JjL3Bvd2VycGMvbGludXg2NC5TIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCi1AUE9XRVJQQ19BSVhfVFJVRUBhbV9fYXBwZW5kXzEyID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2FpeC5TIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMKLUBQT1dFUlBDX0RBUldJTl9UUlVFQGFtX19hcHBlbmRfMTMgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgc3JjL3Bvd2VycGMvZGFyd2luLlMgc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUwotQFBPV0VSUENfRlJFRUJTRF9UUlVFQGFtX19hcHBlbmRfMTQgPSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUwotQEFSTV9UUlVFQGFtX19hcHBlbmRfMTUgPSBzcmMvYXJtL3N5c3YuUyBzcmMvYXJtL2ZmaS5jCi1ATElCRkZJX0NSSVNfVFJVRUBhbV9fYXBwZW5kXzE2ID0gc3JjL2NyaXMvc3lzdi5TIHNyYy9jcmlzL2ZmaS5jCi1ARlJWX1RSVUVAYW1fX2FwcGVuZF8xNyA9IHNyYy9mcnYvZWFiaS5TIHNyYy9mcnYvZmZpLmMKLUBTMzkwX1RSVUVAYW1fX2FwcGVuZF8xOCA9IHNyYy9zMzkwL3N5c3YuUyBzcmMvczM5MC9mZmkuYwotQFg4Nl82NF9UUlVFQGFtX19hcHBlbmRfMTkgPSBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni91bml4NjQuUyBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TCi1AU0hfVFJVRUBhbV9fYXBwZW5kXzIwID0gc3JjL3NoL3N5c3YuUyBzcmMvc2gvZmZpLmMKLUBTSDY0X1RSVUVAYW1fX2FwcGVuZF8yMSA9IHNyYy9zaDY0L3N5c3YuUyBzcmMvc2g2NC9mZmkuYwotQFBBX0xJTlVYX1RSVUVAYW1fX2FwcGVuZF8yMiA9IHNyYy9wYS9saW51eC5TIHNyYy9wYS9mZmkuYwotQFBBX0hQVVhfVFJVRUBhbV9fYXBwZW5kXzIzID0gc3JjL3BhL2hwdXgzMi5TIHNyYy9wYS9mZmkuYworQFg4Nl9XSU42NF9UUlVFQGFtX19hcHBlbmRfNSA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni93aW42NC5TCitAWDg2X0RBUldJTl9UUlVFQGFtX19hcHBlbmRfNiA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9kYXJ3aW4uUyBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni9kYXJ3aW42NC5TCitAU1BBUkNfVFJVRUBhbV9fYXBwZW5kXzcgPSBzcmMvc3BhcmMvZmZpLmMgc3JjL3NwYXJjL3Y4LlMgc3JjL3NwYXJjL3Y5LlMKK0BBTFBIQV9UUlVFQGFtX19hcHBlbmRfOCA9IHNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvb3NmLlMKK0BJQTY0X1RSVUVAYW1fX2FwcGVuZF85ID0gc3JjL2lhNjQvZmZpLmMgc3JjL2lhNjQvdW5peC5TCitATTMyUl9UUlVFQGFtX19hcHBlbmRfMTAgPSBzcmMvbTMyci9zeXN2LlMgc3JjL20zMnIvZmZpLmMKK0BNNjhLX1RSVUVAYW1fX2FwcGVuZF8xMSA9IHNyYy9tNjhrL2ZmaS5jIHNyYy9tNjhrL3N5c3YuUworQFBPV0VSUENfVFJVRUBhbV9fYXBwZW5kXzEyID0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgc3JjL3Bvd2VycGMvbGludXg2NC5TIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCitAUE9XRVJQQ19BSVhfVFJVRUBhbV9fYXBwZW5kXzEzID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2FpeC5TIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMKK0BQT1dFUlBDX0RBUldJTl9UUlVFQGFtX19hcHBlbmRfMTQgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgc3JjL3Bvd2VycGMvZGFyd2luLlMgc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUworQFBPV0VSUENfRlJFRUJTRF9UUlVFQGFtX19hcHBlbmRfMTUgPSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUworQEFSTV9UUlVFQGFtX19hcHBlbmRfMTYgPSBzcmMvYXJtL3N5c3YuUyBzcmMvYXJtL2ZmaS5jCitAQVZSMzJfVFJVRUBhbV9fYXBwZW5kXzE3ID0gc3JjL2F2cjMyL3N5c3YuUyBzcmMvYXZyMzIvZmZpLmMKK0BMSUJGRklfQ1JJU19UUlVFQGFtX19hcHBlbmRfMTggPSBzcmMvY3Jpcy9zeXN2LlMgc3JjL2NyaXMvZmZpLmMKK0BGUlZfVFJVRUBhbV9fYXBwZW5kXzE5ID0gc3JjL2Zydi9lYWJpLlMgc3JjL2Zydi9mZmkuYworQFMzOTBfVFJVRUBhbV9fYXBwZW5kXzIwID0gc3JjL3MzOTAvc3lzdi5TIHNyYy9zMzkwL2ZmaS5jCitAWDg2XzY0X1RSVUVAYW1fX2FwcGVuZF8yMSA9IHNyYy94ODYvZmZpNjQuYyBzcmMveDg2L3VuaXg2NC5TIHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMKK0BTSF9UUlVFQGFtX19hcHBlbmRfMjIgPSBzcmMvc2gvc3lzdi5TIHNyYy9zaC9mZmkuYworQFNINjRfVFJVRUBhbV9fYXBwZW5kXzIzID0gc3JjL3NoNjQvc3lzdi5TIHNyYy9zaDY0L2ZmaS5jCitAUEFfTElOVVhfVFJVRUBhbV9fYXBwZW5kXzI0ID0gc3JjL3BhL2xpbnV4LlMgc3JjL3BhL2ZmaS5jCitAUEFfSFBVWF9UUlVFQGFtX19hcHBlbmRfMjUgPSBzcmMvcGEvaHB1eDMyLlMgc3JjL3BhL2ZmaS5jCiBzdWJkaXIgPSAuCiBESVNUX0NPTU1PTiA9IFJFQURNRSAkKGFtX19jb25maWd1cmVfZGVwcykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKIAkkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL2RvYy9zdGFtcC12dGkgXAogCSQoc3JjZGlyKS9kb2MvdmVyc2lvbi50ZXhpICQoc3JjZGlyKS9mZmljb25maWcuaC5pbiBcCi0JJChzcmNkaXIpL2xpYmZmaS5wYy5pbiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBDaGFuZ2VMb2cgVE9ETyBcCi0JY29tcGlsZSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBkZXBjb21wIGluc3RhbGwtc2ggbHRjZi1jLnNoIFwKLQlsdGNmLWN4eC5zaCBsdGNmLWdjai5zaCBsdGNvbmZpZyBsdG1haW4uc2ggbWRhdGUtc2ggbWlzc2luZyBcCi0JbWtpbnN0YWxsZGlycyB0ZXhpbmZvLnRleAorCSQoc3JjZGlyKS9saWJmZmkucGMuaW4gJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgQ2hhbmdlTG9nIFwKKwljb21waWxlIGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGRlcGNvbXAgaW5zdGFsbC1zaCBsdG1haW4uc2ggXAorCW1kYXRlLXNoIG1pc3NpbmcgdGV4aW5mby50ZXgKIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKQEAgLTcyLDE4ICs3NSwzMyBAQAogCSQoQUNMT0NBTF9NNCkKIGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTID0gY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBcCiAgY29uZmlndXJlLmxpbmVubyBjb25maWcuc3RhdHVzLmxpbmVubwotbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKIENPTkZJR19IRUFERVIgPSBmZmljb25maWcuaAogQ09ORklHX0NMRUFOX0ZJTEVTID0gbGliZmZpLnBjCitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQogYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CiBhbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAogICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCiAgICAgKikgZj0kJHA7OyBcCiAgIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoaW5mb2RpcikiIFwKIAkiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIKLWxpYkxUTElCUkFSSUVTX0lOU1RBTEwgPSAkKElOU1RBTEwpCiBMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKSAkKG5vaW5zdF9MVExJQlJBUklFUykKIGxpYmZmaV9sYV9MSUJBREQgPQogYW1fX2RpcnN0YW1wID0gJChhbV9fbGVhZGluZ19kb3QpZGlyc3RhbXAKQEAgLTk0LDM3ICsxMTIsMzkgQEAKIEBYODZfVFJVRUBhbV9fb2JqZWN0c18yID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni9zeXN2LmxvCiBAWDg2X0ZSRUVCU0RfVFJVRUBhbV9fb2JqZWN0c18zID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni9mcmVlYnNkLmxvCiBAWDg2X1dJTjMyX1RSVUVAYW1fX29iamVjdHNfNCA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvd2luMzIubG8KLUBYODZfREFSV0lOX1RSVUVAYW1fX29iamVjdHNfNSA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvZGFyd2luLmxvIFwKK0BYODZfV0lONjRfVFJVRUBhbV9fb2JqZWN0c181ID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni93aW42NC5sbworQFg4Nl9EQVJXSU5fVFJVRUBhbV9fb2JqZWN0c182ID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni9kYXJ3aW4ubG8gXAogQFg4Nl9EQVJXSU5fVFJVRUAJc3JjL3g4Ni9mZmk2NC5sbyBzcmMveDg2L2RhcndpbjY0LmxvCi1AU1BBUkNfVFJVRUBhbV9fb2JqZWN0c182ID0gc3JjL3NwYXJjL2ZmaS5sbyBzcmMvc3BhcmMvdjgubG8gXAorQFNQQVJDX1RSVUVAYW1fX29iamVjdHNfNyA9IHNyYy9zcGFyYy9mZmkubG8gc3JjL3NwYXJjL3Y4LmxvIFwKIEBTUEFSQ19UUlVFQAlzcmMvc3BhcmMvdjkubG8KLUBBTFBIQV9UUlVFQGFtX19vYmplY3RzXzcgPSBzcmMvYWxwaGEvZmZpLmxvIHNyYy9hbHBoYS9vc2YubG8KLUBJQTY0X1RSVUVAYW1fX29iamVjdHNfOCA9IHNyYy9pYTY0L2ZmaS5sbyBzcmMvaWE2NC91bml4LmxvCi1ATTMyUl9UUlVFQGFtX19vYmplY3RzXzkgPSBzcmMvbTMyci9zeXN2LmxvIHNyYy9tMzJyL2ZmaS5sbwotQE02OEtfVFJVRUBhbV9fb2JqZWN0c18xMCA9IHNyYy9tNjhrL2ZmaS5sbyBzcmMvbTY4ay9zeXN2LmxvCi1AUE9XRVJQQ19UUlVFQGFtX19vYmplY3RzXzExID0gc3JjL3Bvd2VycGMvZmZpLmxvIHNyYy9wb3dlcnBjL3N5c3YubG8gXAorQEFMUEhBX1RSVUVAYW1fX29iamVjdHNfOCA9IHNyYy9hbHBoYS9mZmkubG8gc3JjL2FscGhhL29zZi5sbworQElBNjRfVFJVRUBhbV9fb2JqZWN0c185ID0gc3JjL2lhNjQvZmZpLmxvIHNyYy9pYTY0L3VuaXgubG8KK0BNMzJSX1RSVUVAYW1fX29iamVjdHNfMTAgPSBzcmMvbTMyci9zeXN2LmxvIHNyYy9tMzJyL2ZmaS5sbworQE02OEtfVFJVRUBhbV9fb2JqZWN0c18xMSA9IHNyYy9tNjhrL2ZmaS5sbyBzcmMvbTY4ay9zeXN2LmxvCitAUE9XRVJQQ19UUlVFQGFtX19vYmplY3RzXzEyID0gc3JjL3Bvd2VycGMvZmZpLmxvIHNyYy9wb3dlcnBjL3N5c3YubG8gXAogQFBPV0VSUENfVFJVRUAJc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUubG8gXAogQFBPV0VSUENfVFJVRUAJc3JjL3Bvd2VycGMvbGludXg2NC5sbyBcCiBAUE9XRVJQQ19UUlVFQAlzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUubG8KLUBQT1dFUlBDX0FJWF9UUlVFQGFtX19vYmplY3RzXzEyID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5sbyBcCitAUE9XRVJQQ19BSVhfVFJVRUBhbV9fb2JqZWN0c18xMyA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4ubG8gXAogQFBPV0VSUENfQUlYX1RSVUVACXNyYy9wb3dlcnBjL2FpeC5sbyBcCiBAUE9XRVJQQ19BSVhfVFJVRUAJc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUubG8KLUBQT1dFUlBDX0RBUldJTl9UUlVFQGFtX19vYmplY3RzXzEzID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5sbyBcCitAUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fb2JqZWN0c18xNCA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4ubG8gXAogQFBPV0VSUENfREFSV0lOX1RSVUVACXNyYy9wb3dlcnBjL2Rhcndpbi5sbyBcCiBAUE9XRVJQQ19EQVJXSU5fVFJVRUAJc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUubG8KLUBQT1dFUlBDX0ZSRUVCU0RfVFJVRUBhbV9fb2JqZWN0c18xNCA9IHNyYy9wb3dlcnBjL2ZmaS5sbyBcCitAUE9XRVJQQ19GUkVFQlNEX1RSVUVAYW1fX29iamVjdHNfMTUgPSBzcmMvcG93ZXJwYy9mZmkubG8gXAogQFBPV0VSUENfRlJFRUJTRF9UUlVFQAlzcmMvcG93ZXJwYy9zeXN2LmxvIFwKIEBQT1dFUlBDX0ZSRUVCU0RfVFJVRUAJc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUubG8KLUBBUk1fVFJVRUBhbV9fb2JqZWN0c18xNSA9IHNyYy9hcm0vc3lzdi5sbyBzcmMvYXJtL2ZmaS5sbwotQExJQkZGSV9DUklTX1RSVUVAYW1fX29iamVjdHNfMTYgPSBzcmMvY3Jpcy9zeXN2LmxvIHNyYy9jcmlzL2ZmaS5sbwotQEZSVl9UUlVFQGFtX19vYmplY3RzXzE3ID0gc3JjL2Zydi9lYWJpLmxvIHNyYy9mcnYvZmZpLmxvCi1AUzM5MF9UUlVFQGFtX19vYmplY3RzXzE4ID0gc3JjL3MzOTAvc3lzdi5sbyBzcmMvczM5MC9mZmkubG8KLUBYODZfNjRfVFJVRUBhbV9fb2JqZWN0c18xOSA9IHNyYy94ODYvZmZpNjQubG8gc3JjL3g4Ni91bml4NjQubG8gXAorQEFSTV9UUlVFQGFtX19vYmplY3RzXzE2ID0gc3JjL2FybS9zeXN2LmxvIHNyYy9hcm0vZmZpLmxvCitAQVZSMzJfVFJVRUBhbV9fb2JqZWN0c18xNyA9IHNyYy9hdnIzMi9zeXN2LmxvIHNyYy9hdnIzMi9mZmkubG8KK0BMSUJGRklfQ1JJU19UUlVFQGFtX19vYmplY3RzXzE4ID0gc3JjL2NyaXMvc3lzdi5sbyBzcmMvY3Jpcy9mZmkubG8KK0BGUlZfVFJVRUBhbV9fb2JqZWN0c18xOSA9IHNyYy9mcnYvZWFiaS5sbyBzcmMvZnJ2L2ZmaS5sbworQFMzOTBfVFJVRUBhbV9fb2JqZWN0c18yMCA9IHNyYy9zMzkwL3N5c3YubG8gc3JjL3MzOTAvZmZpLmxvCitAWDg2XzY0X1RSVUVAYW1fX29iamVjdHNfMjEgPSBzcmMveDg2L2ZmaTY0LmxvIHNyYy94ODYvdW5peDY0LmxvIFwKIEBYODZfNjRfVFJVRUAJc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni9zeXN2LmxvCi1AU0hfVFJVRUBhbV9fb2JqZWN0c18yMCA9IHNyYy9zaC9zeXN2LmxvIHNyYy9zaC9mZmkubG8KLUBTSDY0X1RSVUVAYW1fX29iamVjdHNfMjEgPSBzcmMvc2g2NC9zeXN2LmxvIHNyYy9zaDY0L2ZmaS5sbwotQFBBX0xJTlVYX1RSVUVAYW1fX29iamVjdHNfMjIgPSBzcmMvcGEvbGludXgubG8gc3JjL3BhL2ZmaS5sbwotQFBBX0hQVVhfVFJVRUBhbV9fb2JqZWN0c18yMyA9IHNyYy9wYS9ocHV4MzIubG8gc3JjL3BhL2ZmaS5sbworQFNIX1RSVUVAYW1fX29iamVjdHNfMjIgPSBzcmMvc2gvc3lzdi5sbyBzcmMvc2gvZmZpLmxvCitAU0g2NF9UUlVFQGFtX19vYmplY3RzXzIzID0gc3JjL3NoNjQvc3lzdi5sbyBzcmMvc2g2NC9mZmkubG8KK0BQQV9MSU5VWF9UUlVFQGFtX19vYmplY3RzXzI0ID0gc3JjL3BhL2xpbnV4LmxvIHNyYy9wYS9mZmkubG8KK0BQQV9IUFVYX1RSVUVAYW1fX29iamVjdHNfMjUgPSBzcmMvcGEvaHB1eDMyLmxvIHNyYy9wYS9mZmkubG8KIG5vZGlzdF9saWJmZmlfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSBcCiAJJChhbV9fb2JqZWN0c18zKSAkKGFtX19vYmplY3RzXzQpICQoYW1fX29iamVjdHNfNSkgXAogCSQoYW1fX29iamVjdHNfNikgJChhbV9fb2JqZWN0c183KSAkKGFtX19vYmplY3RzXzgpIFwKQEAgLTEzMiwzMCArMTUyLDMzIEBACiAJJChhbV9fb2JqZWN0c18xMikgJChhbV9fb2JqZWN0c18xMykgJChhbV9fb2JqZWN0c18xNCkgXAogCSQoYW1fX29iamVjdHNfMTUpICQoYW1fX29iamVjdHNfMTYpICQoYW1fX29iamVjdHNfMTcpIFwKIAkkKGFtX19vYmplY3RzXzE4KSAkKGFtX19vYmplY3RzXzE5KSAkKGFtX19vYmplY3RzXzIwKSBcCi0JJChhbV9fb2JqZWN0c18yMSkgJChhbV9fb2JqZWN0c18yMikgJChhbV9fb2JqZWN0c18yMykKKwkkKGFtX19vYmplY3RzXzIxKSAkKGFtX19vYmplY3RzXzIyKSAkKGFtX19vYmplY3RzXzIzKSBcCisJJChhbV9fb2JqZWN0c18yNCkgJChhbV9fb2JqZWN0c18yNSkKIGxpYmZmaV9sYV9PQkpFQ1RTID0gJChhbV9saWJmZmlfbGFfT0JKRUNUUykgXAogCSQobm9kaXN0X2xpYmZmaV9sYV9PQkpFQ1RTKQogbGliZmZpX2xhX0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCiAJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCiAJJChsaWJmZmlfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAogbGliZmZpX2NvbnZlbmllbmNlX2xhX0xJQkFERCA9Ci1hbV9fb2JqZWN0c18yNCA9IHNyYy9kZWJ1Zy5sbyBzcmMvcHJlcF9jaWYubG8gc3JjL3R5cGVzLmxvIFwKK2FtX19vYmplY3RzXzI2ID0gc3JjL2RlYnVnLmxvIHNyYy9wcmVwX2NpZi5sbyBzcmMvdHlwZXMubG8gXAogCXNyYy9yYXdfYXBpLmxvIHNyYy9qYXZhX3Jhd19hcGkubG8gc3JjL2Nsb3N1cmVzLmxvCi1hbV9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMjQpCi1hbV9fb2JqZWN0c18yNSA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSAkKGFtX19vYmplY3RzXzMpIFwKK2FtX2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18yNikKK2FtX19vYmplY3RzXzI3ID0gJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzIpICQoYW1fX29iamVjdHNfMykgXAogCSQoYW1fX29iamVjdHNfNCkgJChhbV9fb2JqZWN0c181KSAkKGFtX19vYmplY3RzXzYpIFwKIAkkKGFtX19vYmplY3RzXzcpICQoYW1fX29iamVjdHNfOCkgJChhbV9fb2JqZWN0c185KSBcCiAJJChhbV9fb2JqZWN0c18xMCkgJChhbV9fb2JqZWN0c18xMSkgJChhbV9fb2JqZWN0c18xMikgXAogCSQoYW1fX29iamVjdHNfMTMpICQoYW1fX29iamVjdHNfMTQpICQoYW1fX29iamVjdHNfMTUpIFwKIAkkKGFtX19vYmplY3RzXzE2KSAkKGFtX19vYmplY3RzXzE3KSAkKGFtX19vYmplY3RzXzE4KSBcCiAJJChhbV9fb2JqZWN0c18xOSkgJChhbV9fb2JqZWN0c18yMCkgJChhbV9fb2JqZWN0c18yMSkgXAotCSQoYW1fX29iamVjdHNfMjIpICQoYW1fX29iamVjdHNfMjMpCi1ub2Rpc3RfbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzI1KQorCSQoYW1fX29iamVjdHNfMjIpICQoYW1fX29iamVjdHNfMjMpICQoYW1fX29iamVjdHNfMjQpIFwKKwkkKGFtX19vYmplY3RzXzI1KQorbm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18yNykKIGxpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTID0gJChhbV9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUykgXAogCSQobm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTKQogREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AKIGRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKIGFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgogQ1BQQVNDT01QSUxFID0gJChDQ0FTKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAogCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0NBU0ZMQUdTKSAkKENDQVNGTEFHUykKIExUQ1BQQVNDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKQEAgLTE5MywxMCArMjE2LDEyIEBACiAJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKIAlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKIAlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQotcGtnY29uZmlnREFUQV9JTlNUQUxMID0gJChJTlNUQUxMX0RBVEEpCiBEQVRBID0gJChwa2djb25maWdfREFUQSkKIFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCiAgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAorCSQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBcCisJZGlzdGRpciBkaXN0IGRpc3QtYWxsIGRpc3RjaGVjawogRVRBR1MgPSBldGFncwogQ1RBR1MgPSBjdGFncwogRElTVF9TVUJESVJTID0gJChTVUJESVJTKQpAQCAtMjA0LDkgKzIyOSwzNCBAQAogZGlzdGRpciA9ICQoUEFDS0FHRSktJChWRVJTSU9OKQogdG9wX2Rpc3RkaXIgPSAkKGRpc3RkaXIpCiBhbV9fcmVtb3ZlX2Rpc3RkaXIgPSBcCi0gIHsgdGVzdCAhIC1kICQoZGlzdGRpcikgXAotICAgIHx8IHsgZmluZCAkKGRpc3RkaXIpIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAotICAgICAgICAgJiYgcm0gLWZyICQoZGlzdGRpcik7IH07IH0KKyAgeyB0ZXN0ICEgLWQgIiQoZGlzdGRpcikiIFwKKyAgICB8fCB7IGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorICAgICAgICAgJiYgcm0gLWZyICIkKGRpc3RkaXIpIjsgfTsgfQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCiBESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIuZ3oKIEdaSVBfRU5WID0gLS1iZXN0CiBkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gZmluZCAuIC10eXBlIGYgLXByaW50CkBAIC0yMTQsNiArMjY0LDcgQEAKIEFDTE9DQUwgPSBAQUNMT0NBTEAKIEFMTE9DQSA9IEBBTExPQ0FACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0xUTERGTEFHUyA9IEBBTV9MVExERkxBR1NACiBBTV9SVU5URVNURkxBR1MgPSBAQU1fUlVOVEVTVEZMQUdTQAogQVIgPSBAQVJACiBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKQEAgLTIyOCwyMSArMjc5LDE3IEBACiBDRkxBR1MgPSBAQ0ZMQUdTQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKIENZR1BBVEhfVyA9IEBDWUdQQVRIX1dACiBERUZTID0gQERFRlNACiBERVBESVIgPSBAREVQRElSQAotRUNITyA9IEBFQ0hPQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACiBFQ0hPX0MgPSBARUNIT19DQAogRUNIT19OID0gQEVDSE9fTkAKIEVDSE9fVCA9IEBFQ0hPX1RACiBFR1JFUCA9IEBFR1JFUEAKIEVYRUVYVCA9IEBFWEVFWFRACi1GNzcgPSBARjc3QAotRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAogR1JFUCA9IEBHUkVQQAogSEFWRV9MT05HX0RPVUJMRSA9IEBIQVZFX0xPTkdfRE9VQkxFQAogSU5TVEFMTCA9IEBJTlNUQUxMQApAQCAtMjUwLDE2ICsyOTcsMjMgQEAKIElOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACiBJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKIElOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMRCA9IEBMREAKIExERkxBR1MgPSBATERGTEFHU0AKIExJQk9CSlMgPSBATElCT0JKU0AKIExJQlMgPSBATElCU0AKIExJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKIExOX1MgPSBATE5fU0AKIExUTElCT0JKUyA9IEBMVExJQk9CSlNACiBNQUlOVCA9IEBNQUlOVEAKIE1BS0VJTkZPID0gQE1BS0VJTkZPQAogTUtESVJfUCA9IEBNS0RJUl9QQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAogT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAogUEFDS0FHRSA9IEBQQUNLQUdFQAogUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACiBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQApAQCAtMjgwLDggKzMzNCw3IEBACiBhYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACiBhYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKIGFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0Y3NyA9IEBhY19jdF9GNzdACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACiBhbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKIGFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACiBhbV9fcXVvdGUgPSBAYW1fX3F1b3RlQApAQCAtMzEyLDYgKzM2NSw3IEBACiBsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACiBsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAogbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAogbWFuZGlyID0gQG1hbmRpckAKIG1rZGlyX3AgPSBAbWtkaXJfcEAKIG9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKQEAgLTMzMCw2ICszODQsNyBAQAogdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAogdG9vbGV4ZWNkaXIgPSBAdG9vbGV4ZWNkaXJACiB0b29sZXhlY2xpYmRpciA9IEB0b29sZXhlY2xpYmRpckAKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACiB0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACiBBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBzdWJkaXItb2JqZWN0cwpAQCAtMzM3LDYgKzM5Miw3IEBACiBFWFRSQV9ESVNUID0gTElDRU5TRSBDaGFuZ2VMb2cudjEgQ2hhbmdlTG9nLmxpYmdjaiBjb25maWd1cmUuaG9zdCBcCiAJc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9vc2YuUyBzcmMvYWxwaGEvZmZpdGFyZ2V0LmggXAogCXNyYy9hcm0vZmZpLmMgc3JjL2FybS9zeXN2LlMgc3JjL2FybS9mZml0YXJnZXQuaCBcCisJc3JjL2F2cjMyL2ZmaS5jIHNyYy9hdnIzMi9zeXN2LlMgc3JjL2F2cjMyL2ZmaXRhcmdldC5oIFwKIAlzcmMvY3Jpcy9mZmkuYyBzcmMvY3Jpcy9zeXN2LlMgc3JjL2NyaXMvZmZpdGFyZ2V0LmggXAogCXNyYy9pYTY0L2ZmaS5jIHNyYy9pYTY0L2ZmaXRhcmdldC5oIHNyYy9pYTY0L2lhNjRfZmxhZ3MuaCBcCiAJc3JjL2lhNjQvdW5peC5TIFwKQEAgLTM1NSwxMiArNDExLDEzIEBACiAJc3JjL3NoNjQvZmZpLmMgc3JjL3NoNjQvc3lzdi5TIHNyYy9zaDY0L2ZmaXRhcmdldC5oIFwKIAlzcmMvc3BhcmMvdjguUyBzcmMvc3BhcmMvdjkuUyBzcmMvc3BhcmMvZmZpdGFyZ2V0LmggXAogCXNyYy9zcGFyYy9mZmkuYyBzcmMveDg2L2RhcndpbjY0LlMgXAotCXNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMgc3JjL3g4Ni93aW4zMi5TIHNyYy94ODYvZGFyd2luLlMgXAotCXNyYy94ODYvZnJlZWJzZC5TIFwKKwlzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TIHNyYy94ODYvd2luMzIuUyBzcmMveDg2L3dpbjY0LlMgXAorCXNyYy94ODYvZGFyd2luLlMgc3JjL3g4Ni9mcmVlYnNkLlMgXAogCXNyYy94ODYvZmZpNjQuYyBzcmMveDg2L3VuaXg2NC5TIHNyYy94ODYvZmZpdGFyZ2V0LmggXAogCXNyYy9wYS9mZml0YXJnZXQuaCBzcmMvcGEvZmZpLmMgc3JjL3BhL2xpbnV4LlMgc3JjL3BhL2hwdXgzMi5TIFwKIAlzcmMvZnJ2L2ZmaS5jIHNyYy9mcnYvZWFiaS5TIHNyYy9mcnYvZmZpdGFyZ2V0Lmggc3JjL2RsbWFsbG9jLmMgXAotCWxpYnRvb2wtdmVyc2lvbiBDaGFuZ2VMb2cubGliZmZpCisJbGlidG9vbC12ZXJzaW9uIENoYW5nZUxvZy5saWJmZmkgbTQvbGlidG9vbC5tNCBcCisJbTQvbHR+b2Jzb2xldGUubTQgbTQvbHRvcHRpb25zLm00IG00L2x0c3VnYXIubTQgbTQvbHR2ZXJzaW9uLm00CiAKIGluZm9fVEVYSU5GT1MgPSBkb2MvbGliZmZpLnRleGkKIApAQCAtNDAyLDYgKzQ1OSw3IEBACiAJIkRFU1RESVI9JChERVNURElSKSIKIAogTUFLRU9WRVJSSURFUyA9IAorQUNMT0NBTF9BTUZMQUdTID0gJChBQ0xPQ0FMX0FNRkxBR1MpIC1JIG00CiBsaWJfTFRMSUJSQVJJRVMgPSBsaWJmZmkubGEKIG5vaW5zdF9MVExJQlJBUklFUyA9IGxpYmZmaV9jb252ZW5pZW5jZS5sYQogbGliZmZpX2xhX1NPVVJDRVMgPSBzcmMvZGVidWcuYyBzcmMvcHJlcF9jaWYuYyBzcmMvdHlwZXMuYyBcCkBAIC00MTYsMTEgKzQ3NCwxMiBAQAogCSQoYW1fX2FwcGVuZF8xMikgJChhbV9fYXBwZW5kXzEzKSAkKGFtX19hcHBlbmRfMTQpIFwKIAkkKGFtX19hcHBlbmRfMTUpICQoYW1fX2FwcGVuZF8xNikgJChhbV9fYXBwZW5kXzE3KSBcCiAJJChhbV9fYXBwZW5kXzE4KSAkKGFtX19hcHBlbmRfMTkpICQoYW1fX2FwcGVuZF8yMCkgXAotCSQoYW1fX2FwcGVuZF8yMSkgJChhbV9fYXBwZW5kXzIyKSAkKGFtX19hcHBlbmRfMjMpCisJJChhbV9fYXBwZW5kXzIxKSAkKGFtX19hcHBlbmRfMjIpICQoYW1fX2FwcGVuZF8yMykgXAorCSQoYW1fX2FwcGVuZF8yNCkgJChhbV9fYXBwZW5kXzI1KQogbGliZmZpX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMgPSAkKGxpYmZmaV9sYV9TT1VSQ0VTKQogbm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTID0gJChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpCiBBTV9DRkxBR1MgPSAtV2FsbCAtZyAtZmV4Y2VwdGlvbnMKLWxpYmZmaV9sYV9MREZMQUdTID0gLXZlcnNpb24taW5mbyBgZ3JlcCAtdiAnXlwjJyAkKHNyY2RpcikvbGlidG9vbC12ZXJzaW9uYAorbGliZmZpX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZvIGBncmVwIC12ICdeXCMnICQoc3JjZGlyKS9saWJ0b29sLXZlcnNpb25gICQoQU1fTFRMREZMQUdTKQogQU1fQ1BQRkxBR1MgPSAtSS4gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgLUlpbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKS9zcmMKIEFNX0NDQVNGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpCiBhbGw6IGZmaWNvbmZpZy5oCkBAIC00MzQsMTUgKzQ5MywxNSBAQAogCUBmb3IgZGVwIGluICQ/OyBkbyBcCiAJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKIAkgICAgKiQkZGVwKikgXAotCSAgICAgIGVjaG8gJyBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICc7IFwKLQkgICAgICBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBcCisJICAgICAgZWNobyAnIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24nOyBcCisJICAgICAgJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gXAogCQkmJiBleGl0IDA7IFwKIAkgICAgICBleGl0IDE7OyBcCiAJICBlc2FjOyBcCiAJZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIE1ha2VmaWxlCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIE1ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBNYWtlZmlsZQogLlBSRUNJT1VTOiBNYWtlZmlsZQogTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwogCUBjYXNlICckPycgaW4gXApAQCAtNDU4LDkgKzUxNywxMCBAQAogCSQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2sKIAogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJChzcmNkaXIpICYmICQoQVVUT0NPTkYpCisJJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQogJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgJChBQ0xPQ0FMX0FNRkxBR1MpCisJJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpICQoQUNMT0NBTF9BTUZMQUdTKQorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKIAogZmZpY29uZmlnLmg6IHN0YW1wLWgxCiAJQGlmIHRlc3QgISAtZiAkQDsgdGhlbiBcCkBAIC00NzIsNyArNTMyLDcgQEAKIAlAcm0gLWYgc3RhbXAtaDEKIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGZmaWNvbmZpZy5oCiAkKHNyY2RpcikvZmZpY29uZmlnLmguaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpIAotCWNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPSEVBREVSKQorCSgkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9IRUFERVIpKQogCXJtIC1mIHN0YW1wLWgxCiAJdG91Y2ggJEAKIApAQCAtNDgzLDIwICs1NDMsMjQgQEAKIGluc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKLQlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAogCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgICBlY2hvICIgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKGxpYkxUTElCUkFSSUVTX0lOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAnJCRwJyAnJChERVNURElSKSQobGliZGlyKS8kJGYnIjsgXAotCSAgICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQobGliTFRMSUJSQVJJRVNfSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICIkJHAiICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAogCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQogCiB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CiAJQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBwPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQobGliZGlyKS8kJHAnIjsgXAotCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkcCI7IFwKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKIAlkb25lCiAKIGNsZWFuLWxpYkxUTElCUkFSSUVTOgpAQCAtNTU0LDYgKzYxOCw4IEBACiAJc3JjL3g4Ni8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMveDg2L3dpbjMyLmxvOiBzcmMveDg2LyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL3g4Ni8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMveDg2L3dpbjY0LmxvOiBzcmMveDg2LyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL3g4Ni8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMveDg2L2Rhcndpbi5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3g4Ni9mZmk2NC5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXApAQCAtNjQ4LDYgKzcxNCwxNiBAQAogCXNyYy9hcm0vJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL2FybS9mZmkubG86IHNyYy9hcm0vJChhbV9fZGlyc3RhbXApIFwKIAlzcmMvYXJtLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9hdnIzMi8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL2F2cjMyCisJQDogPiBzcmMvYXZyMzIvJChhbV9fZGlyc3RhbXApCitzcmMvYXZyMzIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBzcmMvYXZyMzIvJChERVBESVIpCisJQDogPiBzcmMvYXZyMzIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2F2cjMyL3N5c3YubG86IHNyYy9hdnIzMi8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy9hdnIzMi8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvYXZyMzIvZmZpLmxvOiBzcmMvYXZyMzIvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvYXZyMzIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL2NyaXMvJChhbV9fZGlyc3RhbXApOgogCUAkKE1LRElSX1ApIHNyYy9jcmlzCiAJQDogPiBzcmMvY3Jpcy8kKGFtX19kaXJzdGFtcCkKQEAgLTcyNSw2ICs4MDEsMTAgQEAKIAktcm0gLWYgc3JjL2FybS9mZmkubG8KIAktcm0gLWYgc3JjL2FybS9zeXN2LiQoT0JKRVhUKQogCS1ybSAtZiBzcmMvYXJtL3N5c3YubG8KKwktcm0gLWYgc3JjL2F2cjMyL2ZmaS4kKE9CSkVYVCkKKwktcm0gLWYgc3JjL2F2cjMyL2ZmaS5sbworCS1ybSAtZiBzcmMvYXZyMzIvc3lzdi4kKE9CSkVYVCkKKwktcm0gLWYgc3JjL2F2cjMyL3N5c3YubG8KIAktcm0gLWYgc3JjL2Nsb3N1cmVzLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMvY2xvc3VyZXMubG8KIAktcm0gLWYgc3JjL2NyaXMvZmZpLiQoT0JKRVhUKQpAQCAtODIzLDYgKzkwMyw4IEBACiAJLXJtIC1mIHNyYy94ODYvdW5peDY0LmxvCiAJLXJtIC1mIHNyYy94ODYvd2luMzIuJChPQkpFWFQpCiAJLXJtIC1mIHNyYy94ODYvd2luMzIubG8KKwktcm0gLWYgc3JjL3g4Ni93aW42NC4kKE9CSkVYVCkKKwktcm0gLWYgc3JjL3g4Ni93aW42NC5sbwogCiBkaXN0Y2xlYW4tY29tcGlsZToKIAktcm0gLWYgKi50YWIuYwpAQCAtODM3LDYgKzkxOSw4IEBACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FscGhhLyQoREVQRElSKS9vc2YuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYXJtLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYXJtLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2F2cjMyLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYXZyMzIvJChERVBESVIpL3N5c3YuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvY3Jpcy8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2NyaXMvJChERVBESVIpL3N5c3YuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvZnJ2LyQoREVQRElSKS9lYWJpLlBsb0BhbV9fcXVvdGVACkBAIC04ODAsMTEgKzk2NCwxMiBAQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy94ODYvJChERVBESVIpL3N5c3YuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMveDg2LyQoREVQRElSKS91bml4NjQuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMveDg2LyQoREVQRElSKS93aW4zMi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy94ODYvJChERVBESVIpL3dpbjY0LlBsb0BhbV9fcXVvdGVACiAKIC5TLm86CiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKENQUEFTQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACW12IC1mICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCitAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NBU0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAogQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChDUFBBU0NPTVBJTEUpIC1jIC1vICRAICQ8CkBAIC04OTIsNyArOTc3LDcgQEAKIC5TLm9iajoKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACW12IC1mICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCitAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NBU0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAogQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChDUFBBU0NPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKQEAgLTkwMCw3ICs5ODUsNyBAQAogLlMubG86CiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChMVENQUEFTQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACW12IC1mICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbworQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NBU0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAogQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChMVENQUEFTQ09NUElMRSkgLWMgLW8gJEAgJDwKQEAgLTkwOCw3ICs5OTMsNyBAQAogLmMubzoKIEBhbV9fZmFzdGRlcENDX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKIEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIC1vICRAICQ8CkBAIC05MTYsNyArMTAwMSw3IEBACiAuYy5vYmo6CiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAogQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYApAQCAtOTI0LDcgKzEwMDksNyBAQAogLmMubG86CiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACiBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CkBAIC05MzcsNiArMTAyMiw3IEBACiAJLXJtIC1yZiBzcmMvLmxpYnMgc3JjL19saWJzCiAJLXJtIC1yZiBzcmMvYWxwaGEvLmxpYnMgc3JjL2FscGhhL19saWJzCiAJLXJtIC1yZiBzcmMvYXJtLy5saWJzIHNyYy9hcm0vX2xpYnMKKwktcm0gLXJmIHNyYy9hdnIzMi8ubGlicyBzcmMvYXZyMzIvX2xpYnMKIAktcm0gLXJmIHNyYy9jcmlzLy5saWJzIHNyYy9jcmlzL19saWJzCiAJLXJtIC1yZiBzcmMvZnJ2Ly5saWJzIHNyYy9mcnYvX2xpYnMKIAktcm0gLXJmIHNyYy9pYTY0Ly5saWJzIHNyYy9pYTY0L19saWJzCkBAIC05NTIsMTQgKzEwMzgsMTQgQEAKIAktcm0gLXJmIHNyYy94ODYvLmxpYnMgc3JjL3g4Ni9fbGlicwogCiBkaXN0Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgbGlidG9vbAorCS1ybSAtZiBsaWJ0b29sIGNvbmZpZy5sdAogZG9jLyQoYW1fX2RpcnN0YW1wKToKIAlAJChNS0RJUl9QKSBkb2MKIAlAOiA+IGRvYy8kKGFtX19kaXJzdGFtcCkKIAogJChzcmNkaXIpL2RvYy9saWJmZmkuaW5mbzogZG9jL2xpYmZmaS50ZXhpICQoc3JjZGlyKS9kb2MvdmVyc2lvbi50ZXhpCiAJcmVzdG9yZT06ICYmIGJhY2t1cGRpcj0iJChhbV9fbGVhZGluZ19kb3QpYW0kJCQkIiAmJiBcCi0JYW1fX2N3ZD1gcHdkYCAmJiBjZCAkKHNyY2RpcikgJiYgXAorCWFtX19jd2Q9YHB3ZGAgJiYgJChhbV9fY2QpICQoc3JjZGlyKSAmJiBcCiAJcm0gLXJmICQkYmFja3VwZGlyICYmIG1rZGlyICQkYmFja3VwZGlyICYmIFwKIAlpZiAoJChNQUtFSU5GTykgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAogCSAgZm9yIGYgaW4gJEAgJEAtWzAtOV0gJEAtWzAtOV1bMC05XSAkKEA6LmluZm89KS5pWzAtOV0gJChAOi5pbmZvPSkuaVswLTldWzAtOV07IGRvIFwKQEAgLTk3MSwxMCArMTA1NywxMCBAQAogCSAtbyAkQCAkKHNyY2RpcikvZG9jL2xpYmZmaS50ZXhpOyBcCiAJdGhlbiBcCiAJICByYz0wOyBcCi0JICBjZCAkKHNyY2Rpcik7IFwKKwkgICQoYW1fX2NkKSAkKHNyY2Rpcik7IFwKIAllbHNlIFwKIAkgIHJjPSQkPzsgXAotCSAgY2QgJChzcmNkaXIpICYmIFwKKwkgICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgXAogCSAgJCRyZXN0b3JlICQkYmFja3VwZGlyLyogYGVjaG8gIi4vJEAiIHwgc2VkICdzfFteL10qJCR8fCdgOyBcCiAJZmk7IFwKIAlybSAtcmYgJCRiYWNrdXBkaXI7IGV4aXQgJCRyYwpAQCAtMTAyOCwxNiArMTExNCwxOCBAQAogCiB1bmluc3RhbGwtZHZpLWFtOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoRFZJUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJQGxpc3Q9JyQoRFZJUyknOyB0ZXN0IC1uICIkKGR2aWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKIAkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQoZHZpZGlyKS8kJGYnIjsgXAogCSAgcm0gLWYgIiQoREVTVERJUikkKGR2aWRpcikvJCRmIjsgXAogCWRvbmUKIAogdW5pbnN0YWxsLWh0bWwtYW06CiAJQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChIVE1MUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJQGxpc3Q9JyQoSFRNTFMpJzsgdGVzdCAtbiAiJChodG1sZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAogCSAgZWNobyAiIHJtIC1yZiAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKIAkgIHJtIC1yZiAiJChERVNURElSKSQoaHRtbGRpcikvJCRmIjsgXAogCWRvbmUKQEAgLTEwNTEsNyArMTEzOSw4IEBACiAJICBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKIAkgICAgcmVsZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAnc3xeLiovfHwnYDsgXAogCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9JyQoREVTVERJUikkKGluZm9kaXIpJyAtLXJlbW92ZSAnJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlJyI7IFwKLQkgICAgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9IiQoREVTVERJUikkKGluZm9kaXIpIiAtLXJlbW92ZSAiJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlIjsgXAorCSAgICBpZiBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0iJChERVNURElSKSQoaW5mb2RpcikiIC0tcmVtb3ZlICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiOyBcCisJICAgIHRoZW4gOjsgZWxzZSB0ZXN0ICEgLWYgIiQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSIgfHwgZXhpdCAxOyBmaTsgXAogCSAgZG9uZTsgXAogCWVsc2UgOjsgZmkKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQpAQCAtMTA2NywxNiArMTE1NiwxOCBAQAogCiB1bmluc3RhbGwtcGRmLWFtOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoUERGUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJQGxpc3Q9JyQoUERGUyknOyB0ZXN0IC1uICIkKHBkZmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKIAkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQocGRmZGlyKS8kJGYnIjsgXAogCSAgcm0gLWYgIiQoREVTVERJUikkKHBkZmRpcikvJCRmIjsgXAogCWRvbmUKIAogdW5pbnN0YWxsLXBzLWFtOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoUFNTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKwlAbGlzdD0nJChQU1MpJzsgdGVzdCAtbiAiJChwc2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKIAkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQocHNkaXIpLyQkZiciOyBcCiAJICBybSAtZiAiJChERVNURElSKSQocHNkaXIpLyQkZiI7IFwKIAlkb25lCkBAIC0xMDkzLDE2ICsxMTg0LDE5IEBACiAJICBmb3IgZmlsZSBpbiAkJGQvJCRiYXNlICQkZC8kJGJhc2UtWzAtOV0gJCRkLyQkYmFzZS1bMC05XVswLTldICQkZC8kJGJhc2VfaVswLTldICQkZC8kJGJhc2VfaVswLTldWzAtOV07IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAogCSAgICAgIHJlbGZpbGU9YGV4cHIgIiQkZmlsZSIgOiAiJCRkL1woLipcKSJgOyBcCi0JICAgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkcmVsZmlsZSB8fCBcCi0JCWNwIC1wICQkZmlsZSAkKGRpc3RkaXIpLyQkcmVsZmlsZTsgXAorCSAgICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRyZWxmaWxlIiB8fCBcCisJCWNwIC1wICQkZmlsZSAiJChkaXN0ZGlyKS8kJHJlbGZpbGUiOyBcCiAJICAgIGVsc2UgOjsgZmk7IFwKIAkgIGRvbmU7IFwKIAlkb25lCiAKIG1vc3RseWNsZWFuLWFtaW5mbzoKIAktcm0gLXJmIGxpYmZmaS5hdXggbGliZmZpLmNwIGxpYmZmaS5jcHMgbGliZmZpLmZuIGxpYmZmaS5reSBsaWJmZmkubG9nIFwKLQkgIGxpYmZmaS5wZyBsaWJmZmkudG1wIGxpYmZmaS50b2MgbGliZmZpLnRwIGxpYmZmaS52ciBcCi0JICBkb2MvbGliZmZpLmR2aSBkb2MvbGliZmZpLnBkZiBkb2MvbGliZmZpLnBzIGRvYy9saWJmZmkuaHRtbAorCSAgbGliZmZpLnBnIGxpYmZmaS50bXAgbGliZmZpLnRvYyBsaWJmZmkudHAgbGliZmZpLnZyCisKK2NsZWFuLWFtaW5mbzoKKwktdGVzdCAteiAiZG9jL2xpYmZmaS5kdmkgZG9jL2xpYmZmaS5wZGYgZG9jL2xpYmZmaS5wcyBkb2MvbGliZmZpLmh0bWwiIFwKKwl8fCBybSAtcmYgZG9jL2xpYmZmaS5kdmkgZG9jL2xpYmZmaS5wZGYgZG9jL2xpYmZmaS5wcyBkb2MvbGliZmZpLmh0bWwKIAogbWFpbnRhaW5lci1jbGVhbi1hbWluZm86CiAJQGxpc3Q9JyQoSU5GT19ERVBTKSc7IGZvciBpIGluICQkbGlzdDsgZG8gXApAQCAtMTExMywyMCArMTIwNywyMyBAQAogaW5zdGFsbC1wa2djb25maWdEQVRBOiAkKHBrZ2NvbmZpZ19EQVRBKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCXRlc3QgLXogIiQocGtnY29uZmlnZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIKLQlAbGlzdD0nJChwa2djb25maWdfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChwa2djb25maWdfREFUQSknOyB0ZXN0IC1uICIkKHBrZ2NvbmZpZ2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKHBrZ2NvbmZpZ0RBVEFfSU5TVEFMTCkgJyQkZCQkcCcgJyQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvJCRmJyI7IFwKLQkgICQocGtnY29uZmlnREFUQV9JTlNUQUxMKSAiJCRkJCRwIiAiJChERVNURElSKSQocGtnY29uZmlnZGlyKS8kJGYiOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChwa2djb25maWdkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChwa2djb25maWdkaXIpIiB8fCBleGl0ICQkPzsgXAogCWRvbmUKIAogdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEE6CiAJQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwa2djb25maWdfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvJCRmJyI7IFwKLQkgIHJtIC1mICIkKERFU1RESVIpJChwa2djb25maWdkaXIpLyQkZiI7IFwKLQlkb25lCisJQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgdGVzdCAtbiAiJChwa2djb25maWdkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKHBrZ2NvbmZpZ2RpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChwa2djb25maWdkaXIpIiAmJiBybSAtZiAkJGZpbGVzCiAKICMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCiAjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KQEAgLTExNTIsNyArMTI0OSw3IEBACiAJICBlbHNlIFwKIAkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKIAkgIGZpOyBcCi0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKIAkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCiAJZG9uZTsgXAogCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCkBAIC0xMTg2LDE2ICsxMjgzLDE2IEBACiAJICBlbHNlIFwKIAkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKIAkgIGZpOyBcCi0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKIAkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCiAJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCiB0YWdzLXJlY3Vyc2l2ZToKIAlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKIAlkb25lCiBjdGFncy1yZWN1cnNpdmU6CiAJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKIAlkb25lCiAKIElEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCkBAIC0xMjAzLDE0ICsxMzAwLDE0IEBACiAJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCiAJICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCiAJbWtpZCAtZklEICQkdW5pcXVlCiB0YWdzOiBUQUdTCiAKIFRBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBmZmljb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCiAJCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCisJc2V0IHg7IFwKIAloZXJlPWBwd2RgOyBcCiAJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCiAJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKQEAgLTEyMjIsNDYgKzEzMTksNTAgQEAKIAlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCiAJICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICB0YWdzPSIkJHRhZ3MgJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCiAJICBmaTsgXAogCWRvbmU7IFwKIAlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgZmZpY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAogCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAogCWZpCiBjdGFnczogQ1RBR1MKIENUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGZmaWNvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKIAkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCiAJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGZmaWNvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKIAl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAogCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKIAkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKIAkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQorCSAgICAgJCR1bmlxdWUKIAogR1RBR1M6CiAJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKIAogZGlzdGNsZWFuLXRhZ3M6CiAJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKIAogZGlzdGRpcjogJChESVNURklMRVMpCiAJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi0JdGVzdCAtZCAkKGRpc3RkaXIpIHx8IG1rZGlyICQoZGlzdGRpcikKKwl0ZXN0IC1kICIkKGRpc3RkaXIpIiB8fCBta2RpciAiJChkaXN0ZGlyKSIKIAlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCiAJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAogCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKQEAgLTEyNzcsMjkgKzEzNzgsNDQgQEAKIAkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCiAJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKIAkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKIAkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCiAJICAgIHx8IGV4aXQgMTsgXAogCSAgZmk7IFwKIAlkb25lCi0JbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCiAJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKIAkgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAogCSAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlzdGRpcikgJiYgcHdkYDsgXAotCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgKGNkICQkc3ViZGlyICYmIFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCisJICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCiAJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCiAJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKIAkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAorCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKIAkgICAgICAgIGRpc3RkaXIpIFwKIAkgICAgICB8fCBleGl0IDE7IFwKIAkgIGZpOyBcCkBAIC0xMzA3LDExICsxNDIzLDEyIEBACiAJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAogCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCiAJICBkaXN0LWluZm8KLQktZmluZCAkKGRpc3RkaXIpIC10eXBlIGQgISAtcGVybSAtNzc3IC1leGVjIGNobW9kIGErcnd4IHt9IFw7IC1vIFwKKwktdGVzdCAtbiAiJChhbV9fc2tpcF9tb2RlX2ZpeCkiIFwKKwl8fCBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTc3NyAtZXhlYyBjaG1vZCBhK3J3eCB7fSBcOyAtbyBcCiAJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1saW5rcyAxIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCiAJICAhIC10eXBlIGQgISAtcGVybSAtNDAwIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCiAJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1leGVjICQoaW5zdGFsbF9zaCkgLWMgLW0gYStyIHt9IHt9IFw7IFwKLQl8fCBjaG1vZCAtUiBhK3IgJChkaXN0ZGlyKQorCXx8IGNobW9kIC1SIGErciAiJChkaXN0ZGlyKSIKIGRpc3QtZ3ppcDogZGlzdGRpcgogCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6CiAJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCkBAIC0xMzIwLDYgKzE0MzcsMTQgQEAKIAl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgYnppcDIgLTkgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgogCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQogCitkaXN0LWx6bWE6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgbHptYSAtOSAtYyA+JChkaXN0ZGlyKS50YXIubHptYQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXh6OiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IHh6IC1jID4kKGRpc3RkaXIpLnRhci54egorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCiBkaXN0LXRhclo6IGRpc3RkaXIKIAl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgY29tcHJlc3MgLWMgPiQoZGlzdGRpcikudGFyLloKIAkkKGFtX19yZW1vdmVfZGlzdGRpcikKQEAgLTEzNDYsNiArMTQ3MSwxMCBAQAogCSAgR1pJUD0kKEdaSVBfRU5WKSBndW56aXAgLWMgJChkaXN0ZGlyKS50YXIuZ3ogfCAkKGFtX191bnRhcikgOztcCiAJKi50YXIuYnoyKikgXAogCSAgYnVuemlwMiAtYyAkKGRpc3RkaXIpLnRhci5iejIgfCAkKGFtX191bnRhcikgOztcCisJKi50YXIubHptYSopIFwKKwkgIHVubHptYSAtYyAkKGRpc3RkaXIpLnRhci5sem1hIHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLnh6KikgXAorCSAgeHogLWRjICQoZGlzdGRpcikudGFyLnh6IHwgJChhbV9fdW50YXIpIDs7XAogCSoudGFyLloqKSBcCiAJICB1bmNvbXByZXNzIC1jICQoZGlzdGRpcikudGFyLlogfCAkKGFtX191bnRhcikgOztcCiAJKi5zaGFyLmd6KikgXApAQCAtMTM1Nyw5ICsxNDg2LDExIEBACiAJbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQKIAlta2RpciAkKGRpc3RkaXIpL19pbnN0CiAJY2htb2QgYS13ICQoZGlzdGRpcikKKwl0ZXN0IC1kICQoZGlzdGRpcikvX2J1aWxkIHx8IGV4aXQgMDsgXAogCWRjX2luc3RhbGxfYmFzZT1gJChhbV9fY2QpICQoZGlzdGRpcikvX2luc3QgJiYgcHdkIHwgc2VkIC1lICdzLF5bXjpcXC9dOltcXC9dLC8sJ2AgXAogCSAgJiYgZGNfZGVzdGRpcj0iJCR7VE1QRElSLS90bXB9L2FtLWRjLSQkJCQvIiBcCi0JICAmJiBjZCAkKGRpc3RkaXIpL19idWlsZCBcCisJICAmJiBhbV9fY3dkPWBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKGRpc3RkaXIpL19idWlsZCBcCiAJICAmJiAuLi9jb25maWd1cmUgLS1zcmNkaXI9Li4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCiAJICAgICQoRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAogCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXApAQCAtMTM4MSwxMyArMTUxMiwxNSBAQAogCSAgJiYgcm0gLXJmICIkJGRjX2Rlc3RkaXIiIFwKIAkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3QgXAogCSAgJiYgcm0gLXJmICQoRElTVF9BUkNISVZFUykgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNsZWFuY2hlY2sKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrIFwKKwkgICYmIGNkICIkJGFtX19jd2QiIFwKKwkgIHx8IGV4aXQgMQogCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQogCUAoZWNobyAiJChkaXN0ZGlyKSBhcmNoaXZlcyByZWFkeSBmb3IgZGlzdHJpYnV0aW9uOiAiOyBcCiAJICBsaXN0PSckKERJU1RfQVJDSElWRVMpJzsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICQkaTsgZG9uZSkgfCBcCiAJICBzZWQgLWUgMWggLWUgMXMvLi89L2cgLWUgMXAgLWUgMXggLWUgJyQkcCcgLWUgJyQkeCcKIGRpc3R1bmluc3RhbGxjaGVjazoKLQlAY2QgJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKSBcCisJQCQoYW1fX2NkKSAnJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKScgXAogCSYmIHRlc3QgYCQoZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgfCB3YyAtbGAgLWxlIDEgXAogCSAgIHx8IHsgZWNobyAiRVJST1I6IGZpbGVzIGxlZnQgYWZ0ZXIgdW5pbnN0YWxsOiIgOyBcCiAJICAgICAgICBpZiB0ZXN0IC1uICIkKERFU1RESVIpIjsgdGhlbiBcCkBAIC0xNDMyLDYgKzE1NjUsNyBAQAogCiBkaXN0Y2xlYW4tZ2VuZXJpYzoKIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKIAktcm0gLWYgZG9jLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvJChhbV9fZGlyc3RhbXApCkBAIC0xNDM5LDYgKzE1NzMsOCBAQAogCS1ybSAtZiBzcmMvYWxwaGEvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9hcm0vJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvYXJtLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvYXZyMzIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvYXZyMzIvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9jcmlzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL2NyaXMvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9mcnYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQpAQCAtMTQ3MSwxMiArMTYwNywxMiBAQAogCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKIGNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKIAotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCi0JY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgbW9zdGx5Y2xlYW4tYW0KK2NsZWFuLWFtOiBjbGVhbi1hbWluZm8gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQogCiBkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKIAktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKLQktcm0gLXJmIHNyYy8kKERFUERJUikgc3JjL2FscGhhLyQoREVQRElSKSBzcmMvYXJtLyQoREVQRElSKSBzcmMvY3Jpcy8kKERFUERJUikgc3JjL2Zydi8kKERFUERJUikgc3JjL2lhNjQvJChERVBESVIpIHNyYy9tMzJyLyQoREVQRElSKSBzcmMvbTY4ay8kKERFUERJUikgc3JjL21pcHMvJChERVBESVIpIHNyYy9wYS8kKERFUERJUikgc3JjL3Bvd2VycGMvJChERVBESVIpIHNyYy9zMzkwLyQoREVQRElSKSBzcmMvc2gvJChERVBESVIpIHNyYy9zaDY0LyQoREVQRElSKSBzcmMvc3BhcmMvJChERVBESVIpIHNyYy94ODYvJChERVBESVIpCisJLXJtIC1yZiBzcmMvJChERVBESVIpIHNyYy9hbHBoYS8kKERFUERJUikgc3JjL2FybS8kKERFUERJUikgc3JjL2F2cjMyLyQoREVQRElSKSBzcmMvY3Jpcy8kKERFUERJUikgc3JjL2Zydi8kKERFUERJUikgc3JjL2lhNjQvJChERVBESVIpIHNyYy9tMzJyLyQoREVQRElSKSBzcmMvbTY4ay8kKERFUERJUikgc3JjL21pcHMvJChERVBESVIpIHNyYy9wYS8kKERFUERJUikgc3JjL3Bvd2VycGMvJChERVBESVIpIHNyYy9zMzkwLyQoREVQRElSKSBzcmMvc2gvJChERVBESVIpIHNyYy9zaDY0LyQoREVQRElSKSBzcmMvc3BhcmMvJChERVBESVIpIHNyYy94ODYvJChERVBESVIpCiAJLXJtIC1mIE1ha2VmaWxlCiBkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKIAlkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCkBAIC0xNTAwLDM3ICsxNjM2LDQ1IEBACiBpbnN0YWxsLWR2aS1hbTogJChEVklTKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCXRlc3QgLXogIiQoZHZpZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoZHZpZGlyKSIKLQlAbGlzdD0nJChEVklTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCUBsaXN0PSckKERWSVMpJzsgdGVzdCAtbiAiJChkdmlkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAogCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGQkJHAnICckKERFU1RESVIpJChkdmlkaXIpLyQkZiciOyBcCi0JICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIgIiQoREVTVERJUikkKGR2aWRpcikvJCRmIjsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoZHZpZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoZHZpZGlyKSIgfHwgZXhpdCAkJD87IFwKIAlkb25lCiBpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKIAogaW5zdGFsbC1odG1sLWFtOiAkKEhUTUxTKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCXRlc3QgLXogIiQoaHRtbGRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGh0bWxkaXIpIgotCUBsaXN0PSckKEhUTUxTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCUBsaXN0PSckKEhUTUxTKSc7IGxpc3QyPTsgdGVzdCAtbiAiJChodG1sZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgIiQkcCIgfHwgdGVzdCAtZCAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKIAkgIGlmIHRlc3QgLWQgIiQkZCQkcCI7IHRoZW4gXAogCSAgICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKIAkgICAgJChNS0RJUl9QKSAiJChERVNURElSKSQoaHRtbGRpcikvJCRmIiB8fCBleGl0IDE7IFwKIAkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRkJCRwJy8qICckKERFU1RESVIpJChodG1sZGlyKS8kJGYnIjsgXAotCSAgICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIvKiAiJChERVNURElSKSQoaHRtbGRpcikvJCRmIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIvKiAiJChERVNURElSKSQoaHRtbGRpcikvJCRmIiB8fCBleGl0ICQkPzsgXAogCSAgZWxzZSBcCi0JICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZCQkcCcgJyQoREVTVERJUikkKGh0bWxkaXIpLyQkZiciOyBcCi0JICAgICQoSU5TVEFMTF9EQVRBKSAiJCRkJCRwIiAiJChERVNURElSKSQoaHRtbGRpcikvJCRmIjsgXAorCSAgICBsaXN0Mj0iJCRsaXN0MiAkJGQkJHAiOyBcCiAJICBmaTsgXAotCWRvbmUKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBlY2hvICIkJGxpc3QyIiB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChodG1sZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoaHRtbGRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZTsgfQogaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCiAKIGluc3RhbGwtaW5mby1hbTogJChJTkZPX0RFUFMpCiAJQCQoTk9STUFMX0lOU1RBTEwpCiAJdGVzdCAteiAiJChpbmZvZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoaW5mb2RpcikiCiAJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKElORk9fREVQUyknOyBcCisJbGlzdD0nJChJTkZPX0RFUFMpJzsgdGVzdCAtbiAiJChpbmZvZGlyKSIgfHwgbGlzdD07IFwKIAlmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKIAkgIGNhc2UgJCRmaWxlIGluIFwKIAkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKQEAgLTE1MzgsMTggKzE2ODIsMTkgQEAKIAkgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKIAkgIGZpbGVfaT1gZWNobyAiJCRmaWxlIiB8IHNlZCAnc3xcLmluZm8kJHx8O3N8JCR8Lml8J2A7IFwKIAkgIGZvciBpZmlsZSBpbiAkJGQvJCRmaWxlICQkZC8kJGZpbGUtWzAtOV0gJCRkLyQkZmlsZS1bMC05XVswLTldIFwKLSAgICAgICAgICAgICAgICAgICAgICAgJCRkLyQkZmlsZV9pWzAtOV0gJCRkLyQkZmlsZV9pWzAtOV1bMC05XSA7IGRvIFwKKwkgICAgICAgICAgICAgICAkJGQvJCRmaWxlX2lbMC05XSAkJGQvJCRmaWxlX2lbMC05XVswLTldIDsgZG8gXAogCSAgICBpZiB0ZXN0IC1mICQkaWZpbGU7IHRoZW4gXAotCSAgICAgIHJlbGZpbGU9YGVjaG8gIiQkaWZpbGUiIHwgc2VkICdzfF4uKi98fCdgOyBcCi0JICAgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRpZmlsZScgJyQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSciOyBcCi0JICAgICAgJChJTlNUQUxMX0RBVEEpICIkJGlmaWxlIiAiJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlIjsgXAorCSAgICAgIGVjaG8gIiQkaWZpbGUiOyBcCiAJICAgIGVsc2UgOiA7IGZpOyBcCiAJICBkb25lOyBcCi0JZG9uZQorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoaW5mb2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGluZm9kaXIpIiB8fCBleGl0ICQkPzsgZG9uZQogCUAkKFBPU1RfSU5TVEFMTCkKIAlAaWYgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24gJiYgXAogCSAgICAgaW5zdGFsbC1pbmZvIC0tdmVyc2lvbiAyPiYxIHwgc2VkIDFxIHwgZ3JlcCAtaSAtdiBkZWJpYW4pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICBsaXN0PSckKElORk9fREVQUyknOyBcCisJICBsaXN0PSckKElORk9fREVQUyknOyB0ZXN0IC1uICIkKGluZm9kaXIpIiB8fCBsaXN0PTsgXAogCSAgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCiAJICAgIHJlbGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKIAkgICAgZWNobyAiIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSckKERFU1RESVIpJChpbmZvZGlyKScgJyQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSciO1wKQEAgLTE1NjEsMjkgKzE3MDYsMzMgQEAKIGluc3RhbGwtcGRmLWFtOiAkKFBERlMpCiAJQCQoTk9STUFMX0lOU1RBTEwpCiAJdGVzdCAteiAiJChwZGZkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChwZGZkaXIpIgotCUBsaXN0PSckKFBERlMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJQGxpc3Q9JyQoUERGUyknOyB0ZXN0IC1uICIkKHBkZmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZCQkcCcgJyQoREVTVERJUikkKHBkZmRpcikvJCRmJyI7IFwKLQkgICQoSU5TVEFMTF9EQVRBKSAiJCRkJCRwIiAiJChERVNURElSKSQocGRmZGlyKS8kJGYiOyBcCi0JZG9uZQorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQocGRmZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocGRmZGlyKSIgfHwgZXhpdCAkJD87IGRvbmUKIGluc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCiAKIGluc3RhbGwtcHMtYW06ICQoUFNTKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCXRlc3QgLXogIiQocHNkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChwc2RpcikiCi0JQGxpc3Q9JyQoUFNTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCUBsaXN0PSckKFBTUyknOyB0ZXN0IC1uICIkKHBzZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRkJCRwJyAnJChERVNURElSKSQocHNkaXIpLyQkZiciOyBcCi0JICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIgIiQoREVTVERJUikkKHBzZGlyKS8kJGYiOyBcCi0JZG9uZQorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQocHNkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChwc2RpcikiIHx8IGV4aXQgJCQ/OyBkb25lCiBpbnN0YWxsY2hlY2stYW06CiAKIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCiAJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCiAJLXJtIC1yZiAkKHRvcF9zcmNkaXIpL2F1dG9tNHRlLmNhY2hlCi0JLXJtIC1yZiBzcmMvJChERVBESVIpIHNyYy9hbHBoYS8kKERFUERJUikgc3JjL2FybS8kKERFUERJUikgc3JjL2NyaXMvJChERVBESVIpIHNyYy9mcnYvJChERVBESVIpIHNyYy9pYTY0LyQoREVQRElSKSBzcmMvbTMyci8kKERFUERJUikgc3JjL202OGsvJChERVBESVIpIHNyYy9taXBzLyQoREVQRElSKSBzcmMvcGEvJChERVBESVIpIHNyYy9wb3dlcnBjLyQoREVQRElSKSBzcmMvczM5MC8kKERFUERJUikgc3JjL3NoLyQoREVQRElSKSBzcmMvc2g2NC8kKERFUERJUikgc3JjL3NwYXJjLyQoREVQRElSKSBzcmMveDg2LyQoREVQRElSKQorCS1ybSAtcmYgc3JjLyQoREVQRElSKSBzcmMvYWxwaGEvJChERVBESVIpIHNyYy9hcm0vJChERVBESVIpIHNyYy9hdnIzMi8kKERFUERJUikgc3JjL2NyaXMvJChERVBESVIpIHNyYy9mcnYvJChERVBESVIpIHNyYy9pYTY0LyQoREVQRElSKSBzcmMvbTMyci8kKERFUERJUikgc3JjL202OGsvJChERVBESVIpIHNyYy9taXBzLyQoREVQRElSKSBzcmMvcGEvJChERVBESVIpIHNyYy9wb3dlcnBjLyQoREVQRElSKSBzcmMvczM5MC8kKERFUERJUikgc3JjL3NoLyQoREVQRElSKSBzcmMvc2g2NC8kKERFUERJUikgc3JjL3NwYXJjLyQoREVQRElSKSBzcmMveDg2LyQoREVQRElSKQogCS1ybSAtZiBNYWtlZmlsZQogbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tYW1pbmZvIFwKIAltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi12dGkKQEAgLTE2MDUsMzYgKzE3NTQsMzggQEAKIAl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgdW5pbnN0YWxsLXBkZi1hbSBcCiAJdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgdW5pbnN0YWxsLXBzLWFtCiAKLS5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLXN0cmlwCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgYWxsIFwKKwljdGFncy1yZWN1cnNpdmUgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIHRhZ3MtcmVjdXJzaXZlCiAKIC5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAotCWFsbCBhbGwtYW0gYW0tLXJlZnJlc2ggY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBcCi0JY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3QgZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgXAotCWRpc3QtaW5mbyBkaXN0LXNoYXIgZGlzdC10YXJaIGRpc3QtemlwIGRpc3RjaGVjayBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgXAotCWRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAotCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGtnY29uZmlnREFUQSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCi0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWFtaW5mbyBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1haW50YWluZXItY2xlYW4tdnRpIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1hbWluZm8gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLXZ0aSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgXAotCXRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWR2aS1hbSBcCi0JdW5pbnN0YWxsLWh0bWwtYW0gdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKLQl1bmluc3RhbGwtcGRmLWFtIHVuaW5zdGFsbC1wa2djb25maWdEQVRBIHVuaW5zdGFsbC1wcy1hbQorCWFsbCBhbGwtYW0gYW0tLXJlZnJlc2ggY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tYW1pbmZvIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAorCWNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0IGRpc3QtYWxsIFwKKwlkaXN0LWJ6aXAyIGRpc3QtZ3ppcCBkaXN0LWluZm8gZGlzdC1sem1hIGRpc3Qtc2hhciBkaXN0LXRhclogXAorCWRpc3QteHogZGlzdC16aXAgZGlzdGNoZWNrIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGNsZWFuY2hlY2sgZGlzdGRpciBkaXN0dW5pbnN0YWxsY2hlY2sgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwlpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tYW1pbmZvIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbWFpbnRhaW5lci1jbGVhbi12dGkgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tYW1pbmZvIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tdnRpIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtZHZpLWFtIHVuaW5zdGFsbC1odG1sLWFtIFwKKwl1bmluc3RhbGwtaW5mby1hbSB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgdW5pbnN0YWxsLXBkZi1hbSBcCisJdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgdW5pbnN0YWxsLXBzLWFtCiAKIAogIyBObyBpbnN0YWxsLWh0bWwgb3IgaW5zdGFsbC1wZGYgc3VwcG9ydCBpbiBhdXRvbWFrZSB5ZXQKIC5QSE9OWTogaW5zdGFsbC1odG1sIGluc3RhbGwtcGRmCiBpbnN0YWxsLWh0bWw6CiBpbnN0YWxsLXBkZjoKKwogIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgogLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL1JFQURNRQppbmRleCBhOTM2OTYyLi4xNjdkZTQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL1JFQURNRQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL1JFQURNRQpAQCAtMSw3ICsxLDcgQEAKIFN0YXR1cwogPT09PT09CiAKLWxpYmZmaS0zLjAuNSB3YXMgcmVsZWFzZWQgb24gQXByaWwgMywgMjAwOC4gQ2hlY2sgdGhlIGxpYmZmaSB3ZWIKK2xpYmZmaS0zLjAuMTAgd2FzIHJlbGVhc2VkIG9uIFhYWFhYWFhYWFgsIDIwMTAuIENoZWNrIHRoZSBsaWJmZmkgd2ViCiBwYWdlIGZvciB1cGRhdGVzOiA8VVJMOmh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9saWJmZmkvPi4KIAogCkBAIC05LDI3ICs5LDI3IEBACiA9PT09PT09PT09PT09PT0KIAogQ29tcGlsZXJzIGZvciBoaWdoIGxldmVsIGxhbmd1YWdlcyBnZW5lcmF0ZSBjb2RlIHRoYXQgZm9sbG93IGNlcnRhaW4KLWNvbnZlbnRpb25zLiAgVGhlc2UgY29udmVudGlvbnMgYXJlIG5lY2Vzc2FyeSwgaW4gcGFydCwgZm9yIHNlcGFyYXRlCi1jb21waWxhdGlvbiB0byB3b3JrLiAgT25lIHN1Y2ggY29udmVudGlvbiBpcyB0aGUgImNhbGxpbmcgY29udmVudGlvbiIuCi1UaGUgImNhbGxpbmcgY29udmVudGlvbiIgaXMgYSBzZXQgb2YgYXNzdW1wdGlvbnMgbWFkZSBieSB0aGUgY29tcGlsZXIKLWFib3V0IHdoZXJlIGZ1bmN0aW9uIGFyZ3VtZW50cyB3aWxsIGJlIGZvdW5kIG9uIGVudHJ5IHRvIGEgZnVuY3Rpb24uCi1BICJjYWxsaW5nIGNvbnZlbnRpb24iIGFsc28gc3BlY2lmaWVzIHdoZXJlIHRoZSByZXR1cm4gdmFsdWUgZm9yIGEKLWZ1bmN0aW9uIGlzIGZvdW5kLgorY29udmVudGlvbnMuIFRoZXNlIGNvbnZlbnRpb25zIGFyZSBuZWNlc3NhcnksIGluIHBhcnQsIGZvciBzZXBhcmF0ZQorY29tcGlsYXRpb24gdG8gd29yay4gT25lIHN1Y2ggY29udmVudGlvbiBpcyB0aGUgImNhbGxpbmcKK2NvbnZlbnRpb24iLiBUaGUgImNhbGxpbmcgY29udmVudGlvbiIgaXMgZXNzZW50aWFsbHkgYSBzZXQgb2YKK2Fzc3VtcHRpb25zIG1hZGUgYnkgdGhlIGNvbXBpbGVyIGFib3V0IHdoZXJlIGZ1bmN0aW9uIGFyZ3VtZW50cyB3aWxsCitiZSBmb3VuZCBvbiBlbnRyeSB0byBhIGZ1bmN0aW9uLiBBICJjYWxsaW5nIGNvbnZlbnRpb24iIGFsc28gc3BlY2lmaWVzCit3aGVyZSB0aGUgcmV0dXJuIHZhbHVlIGZvciBhIGZ1bmN0aW9uIGlzIGZvdW5kLgogCiBTb21lIHByb2dyYW1zIG1heSBub3Qga25vdyBhdCB0aGUgdGltZSBvZiBjb21waWxhdGlvbiB3aGF0IGFyZ3VtZW50cwotYXJlIHRvIGJlIHBhc3NlZCB0byBhIGZ1bmN0aW9uLiAgRm9yIGluc3RhbmNlLCBhbiBpbnRlcnByZXRlciBtYXkgYmUKK2FyZSB0byBiZSBwYXNzZWQgdG8gYSBmdW5jdGlvbi4gRm9yIGluc3RhbmNlLCBhbiBpbnRlcnByZXRlciBtYXkgYmUKIHRvbGQgYXQgcnVuLXRpbWUgYWJvdXQgdGhlIG51bWJlciBhbmQgdHlwZXMgb2YgYXJndW1lbnRzIHVzZWQgdG8gY2FsbAotYSBnaXZlbiBmdW5jdGlvbi4gIExpYmZmaSBjYW4gYmUgdXNlZCBpbiBzdWNoIHByb2dyYW1zIHRvIHByb3ZpZGUgYQorYSBnaXZlbiBmdW5jdGlvbi4gTGliZmZpIGNhbiBiZSB1c2VkIGluIHN1Y2ggcHJvZ3JhbXMgdG8gcHJvdmlkZSBhCiBicmlkZ2UgZnJvbSB0aGUgaW50ZXJwcmV0ZXIgcHJvZ3JhbSB0byBjb21waWxlZCBjb2RlLgogCiBUaGUgbGliZmZpIGxpYnJhcnkgcHJvdmlkZXMgYSBwb3J0YWJsZSwgaGlnaCBsZXZlbCBwcm9ncmFtbWluZwotaW50ZXJmYWNlIHRvIHZhcmlvdXMgY2FsbGluZyBjb252ZW50aW9ucy4gIFRoaXMgYWxsb3dzIGEgcHJvZ3JhbW1lciB0bworaW50ZXJmYWNlIHRvIHZhcmlvdXMgY2FsbGluZyBjb252ZW50aW9ucy4gVGhpcyBhbGxvd3MgYSBwcm9ncmFtbWVyIHRvCiBjYWxsIGFueSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkgYSBjYWxsIGludGVyZmFjZSBkZXNjcmlwdGlvbiBhdCBydW4KLXRpbWUuCit0aW1lLiAgCiAKIEZGSSBzdGFuZHMgZm9yIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlLiAgQSBmb3JlaWduIGZ1bmN0aW9uCiBpbnRlcmZhY2UgaXMgdGhlIHBvcHVsYXIgbmFtZSBmb3IgdGhlIGludGVyZmFjZSB0aGF0IGFsbG93cyBjb2RlCi13cml0dGVuIGluIG9uZSBsYW5ndWFnZSB0byBjYWxsIGNvZGUgd3JpdHRlbiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgVGhlCit3cml0dGVuIGluIG9uZSBsYW5ndWFnZSB0byBjYWxsIGNvZGUgd3JpdHRlbiBpbiBhbm90aGVyIGxhbmd1YWdlLiBUaGUKIGxpYmZmaSBsaWJyYXJ5IHJlYWxseSBvbmx5IHByb3ZpZGVzIHRoZSBsb3dlc3QsIG1hY2hpbmUgZGVwZW5kZW50CiBsYXllciBvZiBhIGZ1bGx5IGZlYXR1cmVkIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlLiBBIGxheWVyIG11c3QKIGV4aXN0IGFib3ZlIGxpYmZmaSB0aGF0IGhhbmRsZXMgdHlwZSBjb252ZXJzaW9ucyBmb3IgdmFsdWVzIHBhc3NlZApAQCAtMzksMzYgKzM5LDU4IEBACiBTdXBwb3J0ZWQgUGxhdGZvcm1zCiA9PT09PT09PT09PT09PT09PT09CiAKLUxpYmZmaSBoYXMgYmVlbiBwb3J0ZWQgdG8gbWFueSBkaWZmZXJlbnQgcGxhdGZvcm1zLCBhbHRob3VnaCB0aGlzCi1yZWxlYXNlIHdhcyBvbmx5IHRlc3RlZCBvbjoKK0xpYmZmaSBoYXMgYmVlbiBwb3J0ZWQgdG8gbWFueSBkaWZmZXJlbnQgcGxhdGZvcm1zLgorRm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBhbmQgdGVzdGluZyBzdGF0dXMsIHBsZWFzZQorcmVmZXIgdG8gdGhlIHdpa2kgcGFnZSBoZXJlOgogCi0gICAgIGFybSBvYWJpIGxpbnV4Ci0gICAgIGFybSBlYWJpIGxpbnV4Ci0gICAgIGhwcGEgbGludXgKLSAgICAgbWlwcyBvMzIgbGludXggKGxpdHRsZSBlbmRpYW4pCi0gICAgIHBvd2VycGMgZGFyd2luCi0gICAgIHBvd2VycGM2NCBsaW51eAotICAgICBzcGFyYyBzb2xhcmlzCi0gICAgIHNwYXJjNjQgc29sYXJpcwotICAgICB4ODYgY3lnd2luCi0gICAgIHg4NiBkYXJ3aW4KLSAgICAgeDg2IGZyZWVic2QKLSAgICAgeDg2IGxpbnV4Ci0gICAgIHg4NiBvcGVuYnNkCi0gICAgIHg4Ni02NCBkYXJ3aW4KLSAgICAgeDg2LTY0IGxpbnV4Ci0gICAgIHg4Ni02NCBPUyBYCi0gICAgIHg4Ni02NCBmcmVlYnNkCi0gICAgIAorIGh0dHA6Ly93d3cubW94aWVsb2dpYy5vcmcvd2lraS9pbmRleC5waHA/dGl0bGU9TGliZmZpXzMuMC4xMAorCitBdCB0aGUgdGltZSBvZiByZWxlYXNlLCB0aGUgZm9sbG93aW5nIGJhc2ljIGNvbmZpZ3VyYXRpb25zIGhhdmUgYmVlbgordGVzdGVkOgorCit8LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tfAorfCBBcmNoaXRlY3R1cmUgfCBPcGVyYXRpbmcgU3lzdGVtIHwKK3wtLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS18Cit8IEFscGhhICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBBbHBoYSAgICAgICAgfCBUcnU2NCAgICAgICAgICAgIHwKK3wgQVJNICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IEFWUjMyICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBIUFBBICAgICAgICAgfCBIUFVYICAgICAgICAgICAgIHwKK3wgSUEtNjQgICAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IE1JUFMgICAgICAgICB8IElSSVggICAgICAgICAgICAgfAorfCBNSVBTICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgTUlQUzY0ICAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IFBvd2VyUEMgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBQb3dlclBDICAgICAgfCBNYWMgT1NYICAgICAgICAgIHwKK3wgUG93ZXJQQyAgICAgIHwgRnJlZUJTRCAgICAgICAgICB8Cit8IFBvd2VyUEM2NCAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBTMzkwICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgUzM5MFggICAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IFNQQVJDICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBTUEFSQyAgICAgICAgfCBTb2xhcmlzICAgICAgICAgIHwKK3wgU1BBUkM2NCAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IFNQQVJDNjQgICAgICB8IEZyZWVCU0QgICAgICAgICAgfAorfCBYODYgICAgICAgICAgfCBGcmVlQlNEICAgICAgICAgIHwKK3wgWDg2ICAgICAgICAgIHwga0ZyZWVCU0QgICAgICAgICB8Cit8IFg4NiAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBYODYgICAgICAgICAgfCBNYWMgT1NYICAgICAgICAgIHwKK3wgWDg2ICAgICAgICAgIHwgT3BlbkJTRCAgICAgICAgICB8Cit8IFg4NiAgICAgICAgICB8IFNvbGFyaXMgICAgICAgICAgfAorfCBYODYgICAgICAgICAgfCBXaW5kb3dzL0N5Z3dpbiAgIHwKK3wgWDg2ICAgICAgICAgIHwgV2luZG93cy9NaW5nVyAgICB8Cit8IFg4Ni02NCAgICAgICB8IEZyZWVCU0QgICAgICAgICAgfAorfCBYODYtNjQgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgWDg2LTY0ICAgICAgIHwgT3BlbkJTRCAgICAgICAgICB8Cit8IFg4Ni02NCAgICAgICB8IFdpbmRvd3MvTWluZ1cgICAgfAorfC0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLXwKKwogUGxlYXNlIHNlbmQgYWRkaXRpb25hbCBwbGF0Zm9ybSB0ZXN0IHJlc3VsdHMgdG8KLWxpYmZmaS1kaXNjdXNzQHNvdXJjZXdhcmUub3JnLgorbGliZmZpLWRpc2N1c3NAc291cmNld2FyZS5vcmcgYW5kIGZlZWwgZnJlZSB0byB1cGRhdGUgdGhlIHdpa2kgcGFnZQorYWJvdmUuCiAKIEluc3RhbGxpbmcgbGliZmZpCiA9PT09PT09PT09PT09PT09PQogCi1bTm90ZTogYmVmb3JlIGFjdHVhbGx5IHBlcmZvcm1pbmcgYW55IG9mIHRoZXNlIGluc3RhbGxhdGlvbiBzdGVwcywKLSB5b3UgbWF5IHdpc2ggdG8gcmVhZCB0aGUgIlBsYXRmb3JtIFNwZWNpZmljIE5vdGVzIiBiZWxvdy5dCi0KIEZpcnN0IHlvdSBtdXN0IGNvbmZpZ3VyZSB0aGUgZGlzdHJpYnV0aW9uIGZvciB5b3VyIHBhcnRpY3VsYXIKIHN5c3RlbS4gR28gdG8gdGhlIGRpcmVjdG9yeSB5b3Ugd2lzaCB0byBidWlsZCBsaWJmZmkgaW4gYW5kIHJ1biB0aGUKICJjb25maWd1cmUiIHByb2dyYW0gZm91bmQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBsaWJmZmkgc291cmNlCkBAIC04Nyw2ICsxMDksMTQgQEAKIGFyZSB1c2luZyBQdXJpZnkgd2l0aCBsaWJmZmkuIE9ubHkgdXNlIHRoaXMgc3dpdGNoIHdoZW4gdXNpbmcgCiBQdXJpZnksIGFzIGl0IHdpbGwgc2xvdyBkb3duIHRoZSBsaWJyYXJ5LgogCitJdCdzIGFsc28gcG9zc2libGUgdG8gYnVpbGQgbGliZmZpIG9uIFdpbmRvd3MgcGxhdGZvcm1zIHdpdGgKK01pY3Jvc29mdCdzIFZpc3VhbCBDKysgY29tcGlsZXIuICBJbiB0aGlzIGNhc2UsIHVzZSB0aGUgbXN2Y2Muc2gKK3dyYXBwZXIgc2NyaXB0IGR1cmluZyBjb25maWd1cmF0aW9uIGxpa2Ugc286CisKK3BhdGgvdG8vY29uZmlndXJlIC0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1zdGF0aWMgXAorCUNDPXBhdGgvdG8vbXN2Y2Muc2ggTEQ9bGluayBcCisJQ1BQPVwiY2wgLW5vbG9nbyAtRVBcIgorCiBDb25maWd1cmUgaGFzIG1hbnkgb3RoZXIgb3B0aW9ucy4gVXNlICJjb25maWd1cmUgLS1oZWxwIiB0byBzZWUgdGhlbSBhbGwuCiAKIE9uY2UgY29uZmlndXJlIGhhcyBmaW5pc2hlZCwgdHlwZSAibWFrZSIuIE5vdGUgdGhhdCB5b3UgbXVzdCBiZSB1c2luZwpAQCAtOTgsNjYgKzEyOCwzNSBAQAogVG8gaW5zdGFsbCB0aGUgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzLCB0eXBlICJtYWtlIGluc3RhbGwiLgogCiAKLVBsYXRmb3JtIFNwZWNpZmljIE5vdGVzCi09PT09PT09PT09PT09PT09PT09PT09PQotCi0JTUlQUyAtIElyaXggNS4zICYgNi54Ci0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlyaXggNi4yIGFuZCBiZXR0ZXIgc3VwcG9ydHMgdGhyZWUgZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnM6IG8zMiwKLW4zMiBhbmQgbjY0LiBDdXJyZW50bHksIGxpYmZmaSBvbmx5IHN1cHBvcnRzIGJvdGggbzMyIGFuZCBuMzIgdW5kZXIKLUlyaXggNi54LCBidXQgb25seSBvMzIgdW5kZXIgSXJpeCA1LjMuIExpYmZmaSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUKLWNvbmZpZ3VyZWQgZm9yIHdoaWNoZXZlciBjYWxsaW5nIGNvbnZlbnRpb24gaXQgd2FzIGJ1aWx0IGZvci4KLQotQnkgZGVmYXVsdCwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2lsbCB0cnkgdG8gYnVpbGQgbGliZmZpIHdpdGggdGhlIEdOVQotZGV2ZWxvcG1lbnQgdG9vbHMuIFRvIGJ1aWxkIGxpYmZmaSB3aXRoIHRoZSBTR0kgZGV2ZWxvcG1lbnQgdG9vbHMsIHNldAotdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIENDIHRvIGVpdGhlciAiY2MgLTMyIiBvciAiY2MgLW4zMiIgYmVmb3JlCi1ydW5uaW5nIGNvbmZpZ3VyZSB1bmRlciBJcml4IDYueCAoZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91IHdhbnQgYW4gbzMyCi1vciBuMzIgbGlicmFyeSksIG9yIGp1c3QgImNjIiBmb3IgSXJpeCA1LjMuCi0KLVdpdGggdGhlIG4zMiBjYWxsaW5nIGNvbnZlbnRpb24sIHdoZW4gcmV0dXJuaW5nIHN0cnVjdHVyZXMgc21hbGxlcgotdGhhbiAxNiBieXRlcywgYmUgc3VyZSB0byBwcm92aWRlIGFuIFJWQUxVRSB0aGF0IGlzIDggYnl0ZSBhbGlnbmVkLgotSGVyZSdzIG9uZSB3YXkgb2YgZm9yY2luZyB0aGlzOgotCi0JZG91YmxlIHN0cnVjdF9zdG9yYWdlWzJdOwotCW15X3NtYWxsX3N0cnVjdCAqcyA9IChteV9zbWFsbF9zdHJ1Y3QgKikgc3RydWN0X3N0b3JhZ2U7ICAKLQkvKiBVc2UgcyBmb3IgUlZBTFVFICovCi0KLUlmIHlvdSBkb24ndCBkbyB0aGlzIHlvdSBhcmUgbGlhYmxlIHRvIGdldCBzcHVyaW91cyBidXMgZXJyb3JzLiAKLQotImxvbmcgbG9uZyIgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KLQotWW91IG11c3QgdXNlIEdOVSBNYWtlIHRvIGJ1aWxkIGxpYmZmaSBvbiBTR0kgcGxhdGZvcm1zLgotCi0KLQlQb3dlclBDIFN5c3RlbSBWIEFCSQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGFyZSB0d28gYFN5c3RlbSBWIEFCSSdzIHdoaWNoIGxpYmZmaSBpbXBsZW1lbnRzIGZvciBQb3dlclBDLgotVGhleSBkaWZmZXIgb25seSBpbiBob3cgc21hbGwgc3RydWN0dXJlcyBhcmUgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbnMuCi0KLUluIHRoZSBGRklfU1lTViB2ZXJzaW9uLCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIDggYnl0ZXMgb3Igc21hbGxlciBhcmUKLXJldHVybmVkIGluIHJlZ2lzdGVycy4gIFRoaXMgaXMgd2hhdCBHQ0MgZG9lcyB3aGVuIGl0IGlzIGNvbmZpZ3VyZWQKLWZvciBzb2xhcmlzLCBhbmQgaXMgd2hhdCB0aGUgU3lzdGVtIFYgQUJJIEkgaGF2ZSAoZGF0ZWQgU2VwdGVtYmVyCi0xOTk1KSBzYXlzLgotCi1JbiB0aGUgRkZJX0dDQ19TWVNWIHZlcnNpb24sIGFsbCBzdHJ1Y3R1cmVzIGFyZSByZXR1cm5lZCB0aGUgc2FtZSB3YXk6Ci1ieSBwYXNzaW5nIGEgcG9pbnRlciBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uLiAgVGhpcyBpcwotd2hhdCBHQ0MgZG9lcyB3aGVuIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIGxpbnV4IG9yIGEgZ2VuZXJpYyBzeXN2Ci10YXJnZXQuCi0KLUVHQ1MgMS4wLjEgKGFuZCBwcm9iYWJseSBvdGhlciB2ZXJzaW9ucyBvZiBFR0NTL0dDQykgYWxzbyBoYXMgYQotaW5jb25zaXN0ZW5jeSB3aXRoIHRoZSBTeXNWIEFCSTogV2hlbiBhIHByb2NlZHVyZSBpcyBjYWxsZWQgd2l0aCBtYW55Ci1mbG9hdGluZy1wb2ludCBhcmd1bWVudHMsIHNvbWUgb2YgdGhlbSBnZXQgcHV0IG9uIHRoZSBzdGFjay4gIFRoZXkgYXJlCi1hbGwgc3VwcG9zZWQgdG8gYmUgc3RvcmVkIGluIGRvdWJsZS1wcmVjaXNpb24gZm9ybWF0LCBldmVuIGlmIHRoZXkgYXJlCi1vbmx5IHNpbmdsZS1wcmVjaXNpb24sIGJ1dCBFR0NTIHN0b3JlcyBzaW5nbGUtcHJlY2lzaW9uIGFyZ3VtZW50cyBhcwotc2luZ2xlLXByZWNpc2lvbiBhbnl3YXkuICBUaGlzIGNhdXNlcyBvbmUgdGVzdCB0byBmYWlsICh0aGUgYG1hbnkKLWFyZ3VtZW50cycgdGVzdCkuCi0KLQogSGlzdG9yeQogPT09PT09PQogCitTZWUgdGhlIENoYW5nZUxvZyBmaWxlcyBmb3IgZGV0YWlscy4KKworMy4wLjEwID8/Py0/Py0/PworICAgICAgICBGaXggdGhlIE42NCBidWlsZCBvbiBtaXBzLXNnaS1pcml4Ni41LgorCVRlc3RzdWl0ZSBmaXhlcyBmb3IgVHJ1NjQgVW5peC4KKwlFbmFibGUgYnVpbGRzIHdpdGggTWljcm9zb2Z0J3MgY29tcGlsZXIuCisJRW5hYmxlIHg4NiBidWlsZHMgd2l0aCBTdW4ncyBjb21waWxlci4KKworMy4wLjkgRGVjLTMxLTA5CisgICAgICAgIEFkZCBBVlIzMiBhbmQgd2luNjQgcG9ydHMuICBBZGQgQVJNIHNvZnRmcCBzdXBwb3J0LgorCU1hbnkgZml4ZXMgZm9yIEFJWCwgU29sYXJpcywgSFAtVVgsICpCU0QuCisJU2V2ZXJhbCBQb3dlclBDIGFuZCB4ODYtNjQgYnVnIGZpeGVzLgorCUJ1aWxkIERMTCBmb3Igd2luZG93cy4KKworMy4wLjggRGVjLTE5LTA4CisgICAgICAgIEFkZCAqQlNELCBCZU9TLCBhbmQgUEEtTGludXggc3VwcG9ydC4KKworMy4wLjcgTm92LTExLTA4CisgICAgICAgIEZpeCBmb3IgcHBjIEZyZWVCU0QuCisJKHRoYW5rcyB0byBBbmRyZWFzIFRvYmxlcikKKworMy4wLjYgSnVsLTE3LTA4CisgICAgICAgIEZpeCBmb3IgY2xvc3VyZXMgb24gc2guCisJTWFyayB0aGUgc2gvc2g2NCBzdGFjayBhcyBub24tZXhlY3V0YWJsZS4KKwkoYm90aCB0aGFua3MgdG8gS2F6IEtvamltYSkKKwogMy4wLjUgQXByLTMtMDgKICAgICAgICAgRml4IGxpYmZmaS5wYyBmaWxlLgogCUZpeCAjZGVmaW5lIEFSTSBmb3IgSWNlZFRlYSB1c2Vycy4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYWNsb2NhbC5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYWNsb2NhbC5tNAppbmRleCA2YjM4MzI0Li5jOGU1MjZmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2FjbG9jYWwubTQKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9hY2xvY2FsLm00CkBAIC0xLDcgKzEsNyBAQAotIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTAgLSotIEF1dG9jb25mIC0qLQorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTEuMSAtKi0gQXV0b2NvbmYgLSotCiAKICMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAotIyAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTExLDY1ODAgKzExLDE1IEBACiAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKICMgUEFSVElDVUxBUiBQVVJQT1NFLgogCi1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCi1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgotWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCi15b3Ugc2hvdWxkIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS5dLCBbNjNdKV0pCittNF9pZm5kZWYoW0FDX0FVVE9DT05GX1ZFUlNJT05dLAorICBbbTRfY29weShbbTRfUEFDS0FHRV9WRVJTSU9OXSwgW0FDX0FVVE9DT05GX1ZFUlNJT05dKV0pZG5sCittNF9pZihtNF9kZWZuKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSksIFsyLjY1XSwsCitbbTRfd2FybmluZyhbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCitZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJdCBtYXkgd29yaywgYnV0IGlzIG5vdCBndWFyYW50ZWVkIHRvLgorSWYgeW91IGhhdmUgcHJvYmxlbXMsIHlvdSBtYXkgbmVlZCB0byByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuCitUbyBkbyBzbywgdXNlIHRoZSBwcm9jZWR1cmUgZG9jdW1lbnRlZCBieSB0aGUgcGFja2FnZSwgdHlwaWNhbGx5IGBhdXRvcmVjb25mJy5dKV0pCiAKLSMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCi0KLSMgc2VyaWFsIDUxIEFDX1BST0dfTElCVE9PTAotCi0KLSMgQUNfUFJPVklERV9JRkVMU0UoTUFDUk8tTkFNRSwgSUYtUFJPVklERUQsIElGLU5PVC1QUk9WSURFRCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCBieSBBdXRvY29uZiwgZGVmaW5lIGl0IGhlcmUuCi1tNF9pZmRlZihbQUNfUFJPVklERV9JRkVMU0VdLAotICAgICAgICAgW10sCi0gICAgICAgICBbbTRfZGVmaW5lKFtBQ19QUk9WSURFX0lGRUxTRV0sCi0JICAgICAgICAgW200X2lmZGVmKFtBQ19QUk9WSURFXyQxXSwKLQkJICAgICAgICAgICBbJDJdLCBbJDNdKV0pXSkKLQotCi0jIEFDX1BST0dfTElCVE9PTAotIyAtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLAotW0FDX1JFUVVJUkUoW19BQ19QUk9HX0xJQlRPT0xdKWRubAotZG5sIElmIEFDX1BST0dfQ1hYIGhhcyBhbHJlYWR5IGJlZW4gZXhwYW5kZWQsIHJ1biBBQ19MSUJUT09MX0NYWAotZG5sIGltbWVkaWF0ZWx5LCBvdGhlcndpc2UsIGhvb2sgaXQgaW4gYXQgdGhlIGVuZCBvZiBBQ19QUk9HX0NYWC4KLSAgQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKLSAgICBbQUNfTElCVE9PTF9DWFhdLAotICAgIFtkZWZpbmUoW0FDX1BST0dfQ1hYXSwgZGVmbihbQUNfUFJPR19DWFhdKVtBQ19MSUJUT09MX0NYWAotICBdKV0pCi1kbmwgQW5kIGEgc2ltaWxhciBzZXR1cCBmb3IgRm9ydHJhbiA3NyBzdXBwb3J0Ci0gIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0Y3N10sCi0gICAgW0FDX0xJQlRPT0xfRjc3XSwKLSAgICBbZGVmaW5lKFtBQ19QUk9HX0Y3N10sIGRlZm4oW0FDX1BST0dfRjc3XSlbQUNfTElCVE9PTF9GNzcKLV0pXSkKLQotZG5sIFF1b3RlIEFdW01fUFJPR19HQ0ogc28gdGhhdCBhY2xvY2FsIGRvZXNuJ3QgYnJpbmcgaXQgaW4gbmVlZGxlc3NseS4KLWRubCBJZiBlaXRoZXIgQUNfUFJPR19HQ0ogb3IgQV1bTV9QUk9HX0dDSiBoYXZlIGFscmVhZHkgYmVlbiBleHBhbmRlZCwgcnVuCi1kbmwgQUNfTElCVE9PTF9HQ0ogaW1tZWRpYXRlbHksIG90aGVyd2lzZSwgaG9vayBpdCBpbiBhdCB0aGUgZW5kIG9mIGJvdGguCi0gIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCi0gICAgW0FDX0xJQlRPT0xfR0NKXSwKLSAgICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAotICAgICAgW0FDX0xJQlRPT0xfR0NKXSwKLSAgICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfQUNfUFJPR19HQ0pdLAotCVtBQ19MSUJUT09MX0dDSl0sCi0gICAgICBbaWZkZWYoW0FDX1BST0dfR0NKXSwKLQkgICAgIFtkZWZpbmUoW0FDX1BST0dfR0NKXSwgZGVmbihbQUNfUFJPR19HQ0pdKVtBQ19MSUJUT09MX0dDSl0pXSkKLSAgICAgICBpZmRlZihbQV1bTV9QUk9HX0dDSl0sCi0JICAgICBbZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0FDX0xJQlRPT0xfR0NKXSldKQotICAgICAgIGlmZGVmKFtMVF9BQ19QUk9HX0dDSl0sCi0JICAgICBbZGVmaW5lKFtMVF9BQ19QUk9HX0dDSl0sCi0JCWRlZm4oW0xUX0FDX1BST0dfR0NKXSlbQUNfTElCVE9PTF9HQ0pdKV0pXSldKQotXSldKSMgQUNfUFJPR19MSUJUT09MCi0KLQotIyBfQUNfUFJPR19MSUJUT09MCi0jIC0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSwKLVtBQ19SRVFVSVJFKFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX0NYWF0pZG5sCi1BQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9GNzddKWRubAotQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfR0NKXSlkbmwKLQotIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi0KLSMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCi1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKLUFDX1NVQlNUKExJQlRPT0wpZG5sCi0KLSMgUHJldmVudCBtdWx0aXBsZSBleHBhbnNpb24KLWRlZmluZShbQUNfUFJPR19MSUJUT09MXSwgW10pCi1dKSMgX0FDX1BST0dfTElCVE9PTAotCi0KLSMgQUNfTElCVE9PTF9TRVRVUAotIyAtLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TRVRVUF0sCi1bQUNfUFJFUkVRKDIuNTApZG5sCi1BQ19SRVFVSVJFKFtBQ19FTkFCTEVfU0hBUkVEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0VOQUJMRV9TVEFUSUNdKWRubAotQUNfUkVRVUlSRShbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0xEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19OTV0pZG5sCi0KLUFDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCi1BQ19SRVFVSVJFKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0pZG5sCi0jIEF1dG9jb25mIDIuMTMncyBBQ19PQkpFWFQgYW5kIEFDX0VYRUVYVCBtYWNyb3Mgb25seSB3b3JrcyBmb3IgQyBjb21waWxlcnMhCi1BQ19SRVFVSVJFKFtBQ19PQkpFWFRdKWRubAotQUNfUkVRVUlSRShbQUNfRVhFRVhUXSlkbmwKLWRubAotCi1BQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTgotQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFCi1BQ19MSUJUT09MX09CSkRJUgotCi1BQ19SRVFVSVJFKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSlkbmwKLV9MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNICi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKLSAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCi0gICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLSAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCi0gICAgQ09MTEVDVF9OQU1FUz0KLSAgICBleHBvcnQgQ09MTEVDVF9OQU1FUwotICBmaQotICA7OwotZXNhYwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCi0jIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotWHNlZD0nc2VkIC1lIDFzL15YLy8nCi1bc2VkX3F1b3RlX3N1YnN0PSdzL1woW1xcIlxcYCRcXFxcXVwpL1xcXDEvZyddCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgotW2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGBcXFxcXVwpL1xcXDEvZyddCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCi0jIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCi1kZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKLW5vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJwotCi0jIENvbnN0YW50czoKLXJtPSJybSAtZiIKLQotIyBHbG9iYWwgdmFyaWFibGVzOgotZGVmYXVsdF9vZmlsZT1saWJ0b29sCi1jYW5fYnVpbGRfc2hhcmVkPXllcwotCi0jIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKLSMgd2hpY2ggbmVlZHMgJy5saWInKS4KLWxpYmV4dD1hCi1sdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKLW9maWxlPSIkZGVmYXVsdF9vZmlsZSIKLXdpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCi0KLUFDX0NIRUNLX1RPT0woQVIsIGFyLCBmYWxzZSkKLUFDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsIDopCi1BQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKLQotb2xkX0NDPSIkQ0MiCi1vbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgotCi0jIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwotdGVzdCAteiAiJEFSIiAmJiBBUj1hcgotdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKLXRlc3QgLXogIiRBUyIgJiYgQVM9YXMKLXRlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKLXRlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwotdGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCi10ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCi10ZXN0IC16ICIkTEQiICYmIExEPWxkCi10ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCi10ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQotdGVzdCAteiAiJE5NIiAmJiBOTT1ubQotdGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAotdGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAotdGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKLXRlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgotdGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KLQotIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCi1vbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9Ci0KLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgb3BlbmJzZCopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKLSAgICA7OwotICAqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCi0gICAgOzsKLSAgZXNhYwotICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKLWZpCi0KLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0Ci1jYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotZmlsZV9tYWdpYyopCi0gIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KLSAgICBBQ19QQVRIX01BR0lDCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19MSUJUT09MX0RMT1BFTl0sIGVuYWJsZV9kbG9wZW49eWVzLCBlbmFibGVfZGxvcGVuPW5vKQotQUNfUFJPVklERV9JRkVMU0UoW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwKLWVuYWJsZV93aW4zMl9kbGw9eWVzLCBlbmFibGVfd2luMzJfZGxsPW5vKQotCi1BQ19BUkdfRU5BQkxFKFtsaWJ0b29sLWxvY2tdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCi0JW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCi10ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcwotCi1BQ19BUkdfV0lUSChbcGljXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1waWNdLAotCVt0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBAPDpAZGVmYXVsdD11c2UgYm90aEA6PkBdKV0sCi0gICAgW3BpY19tb2RlPSIkd2l0aHZhbCJdLAotICAgIFtwaWNfbW9kZT1kZWZhdWx0XSkKLXRlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAotCi0jIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAotdGFnbmFtZT0KLUFDX0xJQlRPT0xfTEFOR19DX0NPTkZJRwotX0xUX0FDX1RBR0NPTkZJRwotXSkjIEFDX0xJQlRPT0xfU0VUVVAKLQotCi0jIF9MVF9BQ19TWVNfQ09NUElMRVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19TWVNfQ09NUElMRVJdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi1dKSMgX0xUX0FDX1NZU19DT01QSUxFUgotCi0KLSMgX0xUX0NDX0JBU0VOQU1FKENDKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENhbGN1bGF0ZSBjY19iYXNlbmFtZS4gIFNraXAga25vd24gY29tcGlsZXIgd3JhcHBlcnMgYW5kIGNyb3NzLXByZWZpeC4KLUFDX0RFRlVOKFtfTFRfQ0NfQkFTRU5BTUVdLAotW2ZvciBjY190ZW1wIGluICQxIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltbXFwvXV1jb21waWxlIHwgY2NhY2hlIHwgKltbXFwvXV1jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbW1xcL11dZGlzdGNjIHwgcHVyaWZ5IHwgKltbXFwvXV1wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAotXSkKLQotCi0jIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgZm9yIGNvbXBpbGVyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCi0jIHRoZSBzaW1wbGUgY29tcGlsZXIgdGVzdCBjb2RlLgotQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi1dKSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0KLQotIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgZm9yIGxpbmtlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAotIyB0aGUgc2ltcGxlIGxpbmsgdGVzdCBjb2RlLgotQUNfREVGVU4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLV0pIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLQotIyBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTGlua3MgYSBtaW5pbWFsIHByb2dyYW0gYW5kIGNoZWNrcyB0aGUgZXhlY3V0YWJsZQotIyBmb3IgdGhlIHN5c3RlbSBkZWZhdWx0IGhhcmRjb2RlZCBsaWJyYXJ5IHBhdGguIEluIG1vc3QgY2FzZXMsCi0jIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKLSMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBNUEkgbGlicyBhcmUgaW5jbHVkZWQgdG9vLgotIyBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCB1c2UgdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoIGFjY29yZGluZwotIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KLUFDX0RFRlVOKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWwotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi1maV0sW10pCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLV0pIyBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0KLQotIyBfTFRfQUNfU0hFTExfSU5JVChBUkcpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0sCi1baWZkZWYoW0FDX0RJVkVSU0lPTl9OT1RJQ0VdLAotCSAgICAgW0FDX0RJVkVSVF9QVVNIKEFDX0RJVkVSU0lPTl9OT1RJQ0UpXSwKLQkgW0FDX0RJVkVSVF9QVVNIKE5PVElDRSldKQotJDEKLUFDX0RJVkVSVF9QT1AKLV0pIyBfTFRfQUNfU0hFTExfSU5JVAotCi0KLSMgX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0gKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoCi0jIHdpbGwgZmluZCBhbiBlY2hvIGNvbW1hbmQgd2hpY2ggZG9lc24ndCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCi1BQ19ERUZVTihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdLAotW19MVF9BQ19TSEVMTF9JTklUKFsKLSMgQ2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0KLWNhc2UgWCRFQ0hPIGluCi1YKi0tZmFsbGJhY2stZWNobykKLSAgIyBSZW1vdmUgb25lIGxldmVsIG9mIHF1b3RhdGlvbiAod2hpY2ggd2FzIHJlcXVpcmVkIGZvciBNYWtlKS4KLSAgRUNITz1gZWNobyAiJEVDSE8iIHwgc2VkICdzLFxcXFxcWyRdXFxbJF0wLCdbJF0wJywnYAotICA7OwotZXNhYwotCi1lY2hvPSR7RUNITy1lY2hvfQotaWYgdGVzdCAiWFskXTEiID0gWC0tbm8tcmVleGVjOyB0aGVuCi0gICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgotICBzaGlmdAotZWxpZiB0ZXN0ICJYWyRdMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCi0gICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKLSAgOgotZWxpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCi0gICMgWWlwcGVlLCAkZWNobyB3b3JrcyEKLSAgOgotZWxzZQotICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCi0gIGV4ZWMgJFNIRUxMICJbJF0wIiAtLW5vLXJlZXhlYyAkezErIlskXUAifQotZmkKLQotaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgotICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobwotICBzaGlmdAotICBjYXQgPDxFT0YKLVskXSoKLUVPRgotICBleGl0IDAKLWZpCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLWlmIHRlc3QgLXogIiRFQ0hPIjsgdGhlbgotaWYgdGVzdCAiWCR7ZWNob190ZXN0X3N0cmluZytzZXR9IiAhPSBYc2V0OyB0aGVuCi0jIGZpbmQgYSBzdHJpbmcgYXMgbGFyZ2UgYXMgcG9zc2libGUsIGFzIGxvbmcgYXMgdGhlIHNoZWxsIGNhbiBjb3BlIHdpdGggaXQKLSAgZm9yIGNtZCBpbiAnc2VkIDUwcSAiWyRdMCInICdzZWQgMjBxICJbJF0wIicgJ3NlZCAxMHEgIlskXTAiJyAnc2VkIDJxICJbJF0wIicgJ2VjaG8gdGVzdCc7IGRvCi0gICAgIyBleHBlY3RlZCBzaXplczogbGVzcyB0aGFuIDJLYiwgMUtiLCA1MTIgYnl0ZXMsIDE2IGJ5dGVzLCAuLi4KLSAgICBpZiAoZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYCkgMj4vZGV2L251bGwgJiYKLSAgICAgICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgICYmCi0gICAgICAgKHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGwKLSAgICB0aGVuCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLWZpCi0KLWlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRlY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0gIDoKLWVsc2UKLSAgIyBUaGUgU29sYXJpcywgQUlYLCBhbmQgRGlnaXRhbCBVbml4IGRlZmF1bHQgZWNobyBwcm9ncmFtcyB1bnF1b3RlCi0gICMgYmFja3NsYXNoZXMuICBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgdG8gcXVvdGUgYmFja3NsYXNoZXMgdXNpbmcKLSAgIyAgIGVjaG8gIiRzb21ldGhpbmciIHwgc2VkICdzL1xcL1xcXFwvZycKLSAgIwotICAjIFNvLCBmaXJzdCB3ZSBsb29rIGZvciBhIHdvcmtpbmcgZWNobyBpbiB0aGUgdXNlcidzIFBBVEguCi0KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGZvciBkaXIgaW4gJFBBVEggL3Vzci91Y2I7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgaWYgKHRlc3QgLWYgJGRpci9lY2hvIHx8IHRlc3QgLWYgJGRpci9lY2hvJGFjX2V4ZWV4dCkgJiYKLSAgICAgICB0ZXN0ICJYYCgkZGlyL2VjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRkaXIvZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLSAgICAgIGVjaG89IiRkaXIvZWNobyIKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLQotICBpZiB0ZXN0ICJYJGVjaG8iID0gWGVjaG87IHRoZW4KLSAgICAjIFdlIGRpZG4ndCBmaW5kIGEgYmV0dGVyIGVjaG8sIHNvIGxvb2sgZm9yIGFsdGVybmF0aXZlcy4KLSAgICBpZiB0ZXN0ICJYYChwcmludCAtciAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAocHJpbnQgLXIgIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0gICAgICAjIFRoaXMgc2hlbGwgaGFzIGEgYnVpbHRpbiBwcmludCAtciB0aGF0IGRvZXMgdGhlIHRyaWNrLgotICAgICAgZWNobz0ncHJpbnQgLXInCi0gICAgZWxpZiAodGVzdCAtZiAvYmluL2tzaCB8fCB0ZXN0IC1mIC9iaW4va3NoJGFjX2V4ZWV4dCkgJiYKLQkgdGVzdCAiWCRDT05GSUdfU0hFTEwiICE9IFgvYmluL2tzaDsgdGhlbgotICAgICAgIyBJZiB3ZSBoYXZlIGtzaCwgdHJ5IHJ1bm5pbmcgY29uZmlndXJlIGFnYWluIHdpdGggaXQuCi0gICAgICBPUklHSU5BTF9DT05GSUdfU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KLSAgICAgIGV4cG9ydCBPUklHSU5BTF9DT05GSUdfU0hFTEwKLSAgICAgIENPTkZJR19TSEVMTD0vYmluL2tzaAotICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAotICAgICAgZXhlYyAkQ09ORklHX1NIRUxMICJbJF0wIiAtLW5vLXJlZXhlYyAkezErIlskXUAifQotICAgIGVsc2UKLSAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KLSAgICAgIGVjaG89J3ByaW50ZiAlc1xuJwotICAgICAgaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0JIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JIyBDb29sLCBwcmludGYgd29ya3MKLQk6Ci0gICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCi0JICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLQlDT05GSUdfU0hFTEw9JE9SSUdJTkFMX0NPTkZJR19TSEVMTAotCWV4cG9ydCBDT05GSUdfU0hFTEwKLQlTSEVMTD0iJENPTkZJR19TSEVMTCIKLQlleHBvcnQgU0hFTEwKLQllY2hvPSIkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgotCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JZWNobz0iJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyIKLSAgICAgIGVsc2UKLQkjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgotCXByZXY9OgotCi0JZm9yIGNtZCBpbiAnZWNobyB0ZXN0JyAnc2VkIDJxICJbJF0wIicgJ3NlZCAxMHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgNTBxICJbJF0wIic7IGRvCi0JICBpZiAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYYGV2YWwgJGNtZGAiKSAyPi9kZXYvbnVsbAotCSAgdGhlbgotCSAgICBicmVhawotCSAgZmkKLQkgIHByZXY9IiRjbWQiCi0JZG9uZQotCi0JaWYgdGVzdCAiJHByZXYiICE9ICdzZWQgNTBxICJbJF0wIic7IHRoZW4KLQkgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJHByZXZgCi0JICBleHBvcnQgZWNob190ZXN0X3N0cmluZwotCSAgZXhlYyAke09SSUdJTkFMX0NPTkZJR19TSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0gIlskXTAiICR7MSsiWyRdQCJ9Ci0JZWxzZQotCSAgIyBPb3BzLiAgV2UgbG9zdCBjb21wbGV0ZWx5LCBzbyBqdXN0IHN0aWNrIHdpdGggZWNoby4KLQkgIGVjaG89ZWNobwotCWZpCi0gICAgICBmaQotICAgIGZpCi0gIGZpCi1maQotZmkKLQotIyBDb3B5IGVjaG8gYW5kIHF1b3RlIHRoZSBjb3B5IHN1aXRhYmx5IGZvciBwYXNzaW5nIHRvIGxpYnRvb2wgZnJvbQotIyB0aGUgTWFrZWZpbGUsIGluc3RlYWQgb2YgcXVvdGluZyB0aGUgb3JpZ2luYWwsIHdoaWNoIGlzIHVzZWQgbGF0ZXIuCi1FQ0hPPSRlY2hvCi1pZiB0ZXN0ICJYJEVDSE8iID0gIlgkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgotICAgRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXFskXTAgLS1mYWxsYmFjay1lY2hvIgotZmkKLQotQUNfU1VCU1QoRUNITykKLV0pXSkjIF9MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNICi0KLQotIyBfTFRfQUNfTE9DSwotIyAtLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19MT0NLXSwKLVtBQ19BUkdfRU5BQkxFKFtsaWJ0b29sLWxvY2tdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCi0JW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCi10ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcwotCi0jIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKLSMgbGlidG9vbCBzdXBwb3J0LgotY2FzZSAkaG9zdCBpbgotaWE2NC0qLWhwdXgqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICpFTEYtMzIqKQotICAgICAgSFBVWF9JQTY0X01PREU9IjMyIgotICAgICAgOzsKLSAgICAqRUxGLTY0KikKLSAgICAgIEhQVVhfSUE2NF9NT0RFPSI2NCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0qLSotaXJpeDYqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ1sjXWxpbmUgX19vbGluZV9fICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgKjMyLWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgotICAgICAgOzsKLSAgICAqTjMyKikKLSAgICAgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCi0gICAgICA7OwotICAgIGVzYWMKLSAgIGVsc2UKLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgKjMyLWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLTMyIgotICAgICAgOzsKLSAgICAqTjMyKikKLSAgICAgIExEPSIke0xELWxkfSAtbjMyIgotICAgICAgOzsKLSAgICAqNjQtYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtNjQiCi0gICAgICA7OwotICAgIGVzYWMKLSAgIGZpCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQoteDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCi1zMzkwKi0qbGludXgqfHNwYXJjKi0qbGludXgqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICozMi1iaXQqKQotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCi0gICAgICAgICAgOzsKLSAgICAgICAgeDg2XzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgotICAgICAgICAgIDs7Ci0gICAgICAgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCi0gICAgICAgICAgOzsKLSAgICAgICAgczM5MHgtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCi0gICAgICAgICAgOzsKLSAgICAgICAgc3BhcmM2NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICAqNjQtYml0KikKLSAgICAgIGxpYnN1ZmY9NjQKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCi0gICAgICAgICAgOzsKLSAgICAgICAgeDg2XzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCi0gICAgICAgICAgOzsKLSAgICAgICAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgotICAgICAgICAgIDs7Ci0gICAgICAgIHMzOTAqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCi0gICAgICAgICAgOzsKLSAgICAgICAgc3BhcmMqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotCi0qLSotc2NvMy4ydjUqKQotICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCi0gIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCi0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKLSAgICBbQUNfTEFOR19QVVNIKEMpCi0gICAgIEFDX1RSWV9MSU5LKFtdLFtdLFtsdF9jdl9jY19uZWVkc19iZWxmPXllc10sW2x0X2N2X2NjX25lZWRzX2JlbGY9bm9dKQotICAgICBBQ19MQU5HX1BPUF0pCi0gIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCi0gICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCi0gICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCi0gIGZpCi0gIDs7Ci1zcGFyYyotKnNvbGFyaXMqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICo2NC1iaXQqKQotICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KLSAgICAgIHllcyopIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIgOzsKLSAgICAgICopICAgIExEPSIke0xELWxkfSAtNjQiIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfTElCVE9PTF9XSU4zMl9ETExdLAotWyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKikKLSAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKLSAgQUNfQ0hFQ0tfVE9PTChBUywgYXMsIGZhbHNlKQotICBBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQotICA7OwotICBdKQotZXNhYwotCi1uZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKLQotXSkjIF9MVF9BQ19MT0NLCi0KLQotIyBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKLSMJCVtPVVRQVVQtRklMRV0sIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY29tcGlsZXIgb3B0aW9uIHdvcmtzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSkKLUFDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCi0gIFskMj1ubwotICBpZmVsc2UoWyQ0XSwgLCBbYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0XSwgW2FjX291dGZpbGU9JDRdKQotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkMyIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgIGVjaG8gIiRhc19tZTpfX29saW5lX186IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgJDI9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotXSkKLQotaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KLSAgICBpZmVsc2UoWyQ1XSwgLCA6LCBbJDVdKQotZWxzZQotICAgIGlmZWxzZShbJDZdLCAsIDosIFskNl0pCi1maQotXSkjIEFDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OCi0KLQotIyBBQ19MSUJUT09MX0xJTktFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCi0jICAgICAgICAgICAgICAgICAgICAgICAgICBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY29tcGlsZXIgb3B0aW9uIHdvcmtzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAotICBbJDI9bm8KLSAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0gICBMREZMQUdTPSIkTERGTEFHUyAkMyIKLSAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgotICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgJDI9eWVzCi0gICAgICAgZmkKLSAgICAgZWxzZQotICAgICAgICQyPXllcwotICAgICBmaQotICAgZmkKLSAgICRybSBjb25mdGVzdCoKLSAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi1dKQotCi1pZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgotICAgIGlmZWxzZShbJDRdLCAsIDosIFskNF0pCi1lbHNlCi0gICAgaWZlbHNlKFskNV0sICwgOiwgWyQ1XSkKLWZpCi1dKSMgQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OCi0KLQotIyBBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwKLVsjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLUFDX01TR19DSEVDS0lORyhbdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKQotQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbWF4X2NtZF9sZW5dLCBbZG5sCi0gIGk9MAotICB0ZXN0c3RyaW5nPSJBQkNEIgotCi0gIGNhc2UgJGJ1aWxkX29zIGluCi0gIG1zZG9zZGpncHAqKQotICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKLSAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCi0gICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKLSAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0Ci0gICAgOzsKLQotICBnbnUqKQotICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcwotICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOwotICAgIDs7Ci0KLSAgY3lnd2luKiB8IG1pbmd3KikKLSAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcwotICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCi0gICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKLSAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCi0gICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgotICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQotICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7Ci0gICAgOzsKLQotICBhbWlnYW9zKikKLSAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCi0gICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCi0gICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCi0gICAgZmkKLSAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICA7OwotCi0gIGludGVyaXgqKQotICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKLSAgICA7OwotCi0gIG9zZiopCi0gICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCi0gICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKLSAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgotICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAotICAgICMKLSAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgotICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KLSAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIDs7Ci0gIHNjbzMuMnY1KikKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCi0gICAgOzsKLSAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQotICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKLSAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKltbIAldXS8vJ2AKLSAgICBlbHNlCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKLSAgICBmaQotICAgIDs7Ci0gICopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAotICAgIGVsc2UKLSAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19Ci0gICAgICB3aGlsZSAodGVzdCAiWCJgJFNIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCi0JICAgICAgID0gIlhYJHRlc3RzdHJpbmciKSA+L2Rldi9udWxsIDI+JjEgJiYKLQkgICAgICBuZXdfcmVzdWx0PWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYCAmJgotCSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0kbmV3X3Jlc3VsdCAmJgotCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAotICAgICAgZG8KLSAgICAgICAgaT1gZXhwciAkaSArIDFgCi0gICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZwotICAgICAgZG9uZQotICAgICAgdGVzdHN0cmluZz0KLSAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24gbWFzc2l2ZQotICAgICAgIyBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGxpbmtlci4KLSAgICAgICMgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLV0pCi1pZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChub25lKQotZmkKLV0pIyBBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTgotCi0KLSMgX0xUX0FDX0NIRUNLX0RMRkNOCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19DSEVDS19ETEZDTl0sCi1bQUNfQ0hFQ0tfSEVBREVSUyhkbGZjbi5oKWRubAotXSkjIF9MVF9BQ19DSEVDS19ETEZDTgotCi0KLSMgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0NIRUNLX0RMRkNOXSlkbmwKLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgWyQ0XQotZWxzZQotICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCi0gIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLVsjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKLSNpbmNsdWRlICJjb25mZGVmcy5oIgotCi0jaWYgSEFWRV9ETEZDTl9ICi0jaW5jbHVkZSA8ZGxmY24uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2lmZGVmIFJUTERfR0xPQkFMCi0jICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCi0jZWxzZQotIyAgaWZkZWYgRExfR0xPQkFMCi0jICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCi0jICBlbHNlCi0jICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCi0gICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCi0jaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKLSMgIGlmZGVmIFJUTERfTEFaWQotIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCi0jICBlbHNlCi0jICAgIGlmZGVmIERMX0xBWlkKLSMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQotIyAgICBlbHNlCi0jICAgICAgaWZkZWYgUlRMRF9OT1cKLSMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCi0jICAgICAgZWxzZQotIyAgICAgICAgaWZkZWYgRExfTk9XCi0jICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVwotIyAgICAgICAgZWxzZQotIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCi0jICAgICAgICBlbmRpZgotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7Ci0jZW5kaWYKLQotdm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQotaW50IG1haW4gKCkKLXsKLSAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci0gIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOwotCi0gIGlmIChzZWxmKQotICAgIHsKLSAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOwotICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKLSAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLwotICAgIH0KLSAgZWxzZQotICAgIHB1dHMgKGRsZXJyb3IgKCkpOwotCi0gICAgZXhpdCAoc3RhdHVzKTsKLX1dCi1FT0YKLSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgotICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKLSAgICBsdF9zdGF0dXM9JD8KLSAgICBjYXNlIHgkbHRfc3RhdHVzIGluCi0gICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OwotICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OwotICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7Ci0gICAgZXNhYwotICBlbHNlIDoKLSAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAotICAgICQzCi0gIGZpCi1maQotcm0gLWZyIGNvbmZ0ZXN0KgotXSkjIF9MVF9BQ19UUllfRExPUEVOX1NFTEYKLQotCi0jIEFDX0xJQlRPT0xfRExPUEVOX1NFTEYKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLAotW0FDX1JFUVVJUkUoW19MVF9BQ19DSEVDS19ETEZDTl0pZG5sCi1pZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KLSAgZW5hYmxlX2Rsb3Blbj11bmtub3duCi0gIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCi0gIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgotZWxzZQotICBsdF9jdl9kbG9wZW49bm8KLSAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBiZW9zKikKLSAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgotICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcwotICAgIDs7Ci0KLSAgbWluZ3cqIHwgcHczMiopCi0gICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgIDs7Ci0KLSAgY3lnd2luKikKLSAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgIDs7Ci0KLSAgZGFyd2luKikKLSAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKLSAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCi0JCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCi0gICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgotICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcwotICAgIF0pCi0gICA7OwotCi0gICopCi0gICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAotCSAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiXSwKLSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCi0JICAgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCJdLAotCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAotCSAgICAgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiJdLAotCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKLQkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAotCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCi0JCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCi0JICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKLQkJICAgIFtsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCJdKQotCSAgICAgIF0pCi0JICAgIF0pCi0JICBdKQotCV0pCi0gICAgICBdKQotICAgIDs7Ci0gIGVzYWMKLQotICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCi0gICAgZW5hYmxlX2Rsb3Blbj15ZXMKLSAgZWxzZQotICAgIGVuYWJsZV9kbG9wZW49bm8KLSAgZmkKLQotICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KLSAgZGxvcGVuKQotICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKLQotICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0gICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgotCi0gICAgc2F2ZV9MSUJTPSIkTElCUyIKLSAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCi0KLSAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAotCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKLQkgIF9MVF9BQ19UUllfRExPUEVOX1NFTEYoCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAotCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCi0gICAgXSkKLQotICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgotICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCi0gICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAotICAgIAkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAotCSAgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRigKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQotICAgICAgXSkKLSAgICBmaQotCi0gICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0gICAgTElCUz0iJHNhdmVfTElCUyIKLSAgICA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7Ci0gIGVzYWMKLQotICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKLSAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7Ci0gIGVzYWMKLWZpCi1dKSMgQUNfTElCVE9PTF9ETE9QRU5fU0VMRgotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0NDX0NfTyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlcgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX1JFUVVJUkUoW19MVF9BQ19TWVNfQ09NUElMRVJdKWRubAotQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAotICBbX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKLSAgW19MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubwotICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCi0gICBta2RpciBjb25mdGVzdAotICAgY2QgY29uZnRlc3QKLSAgIG1rZGlyIG91dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi1dKQotXSkjIEFDX0xJQlRPT0xfUFJPR19DQ19DX08KLQotCi0jIEFDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLUyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfTE9DS10pZG5sCi0KLWhhcmRfbGlua3M9Im5vdHRlc3RlZCIKLWlmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCi0gICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCi0gIGhhcmRfbGlua3M9eWVzCi0gICRybSBjb25mdGVzdCoKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgdG91Y2ggY29uZnRlc3QuYQotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCi0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi1dKSMgQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTCi0KLQotIyBBQ19MSUJUT09MX09CSkRJUgotIyAtLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAotW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCi1ta2RpciAubGlicyAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAubGliczsgdGhlbgotICBsdF9jdl9vYmpkaXI9LmxpYnMKLWVsc2UKLSAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KLSAgbHRfY3Zfb2JqZGlyPV9saWJzCi1maQotcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQotb2JqZGlyPSRsdF9jdl9vYmpkaXIKLV0pIyBBQ19MSUJUT09MX09CSkRJUgotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sCi1bQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9Ci1pZiB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8IFwKLSAgIHRlc3QgLW4gIiRfTFRfQUNfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8IFwKLSAgIHRlc3QgIlgkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSIgPSAiWHllcyIgOyB0aGVuCi0KLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgIT0gbm8gJiYKLSAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQotICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpIiAhPSBubyAmJgotICAgICB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXVuc3VwcG9ydGVkCi1maQotQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSldKQotCi1pZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKSIgPSByZWxpbms7IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5Ci0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKLWZpCi1dKSMgQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgKLQotCi0jIEFDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAotW3N0cmlwbGliPQotb2xkX3N0cmlwbGliPQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQotaWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8IGdyZXAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgotICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgotICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKLSAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLWVsc2UKLSMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAotICBjYXNlICRob3N0X29zIGluCi0gICBkYXJ3aW4qKQotICAgICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCi0gICAgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgotICAgICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCi0gICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQotICAgICAgIGVsc2UKLSAgQUNfTVNHX1JFU1VMVChbbm9dKQotZmkKLSAgICAgICA7OwotICAgKikKLSAgQUNfTVNHX1JFU1VMVChbbm9dKQotICAgIDs7Ci0gIGVzYWMKLWZpCi1dKSMgQUNfTElCVE9PTF9TWVNfTElCX1NUUklQCi0KLQotIyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCi1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLW00X2lmKCQxLFtdLFsKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7Ci0gICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKLSAgZXNhYwotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICBpZiBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7JyA+L2Rldi9udWxsIDsgdGhlbgotICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKLSAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKLSAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKLSAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgZWxzZQotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICBmaQotICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAotICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KLSAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9Ci0gIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCi0gIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KLSAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KLSAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCi0gICAgZWxzZQotICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCi0JbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCi0gICAgZmkKLSAgZG9uZQotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyB8IGF3ayAnCi1CRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7Ci0gIGx0X2Zvbz0iIjsKLSAgbHRfY291bnQ9MDsKLSAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKLSAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7Ci0gICAgICBpZiAoJGx0X2kgPT0gIi4uIikgewotICAgICAgICBsdF9jb3VudCsrOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKLSAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBsdF9jb3VudC0tOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQotICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KLX0nYAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCi1lbHNlCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLWZpXSkKLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgOzsKLQotYWl4NCogfCBhaXg1KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGVsc2UKLSAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCi0gICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAotICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KLSAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgotICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4NCB8IGFpeDQuW1swMV1dIHwgYWl4NC5bWzAxXV0uKikKLSAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCi0JICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgZWxzZQotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGZpCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJwotICA7OwotCi1iZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICA7OwotCi1ic2RpW1s0NV1dKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKLSAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93Ci0gICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcwotICA7OwotCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX3ZlcnNpb249bm8KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0KLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpO2VjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkcm0gXCRkbHBhdGgnCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGN5Z3dpbiopCi0gICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgotICAgICAgOzsKLSAgICBtaW5ndyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gICAgICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFtncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5Ci0gICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKLSAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQotICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCi0gICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKLSAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCi0gICAgICA7OwotICAgIHB3MzIqKQotICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJwotICAgIDs7Ci0gIGVzYWMKLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCi0gIHNobGlicGF0aF92YXI9UEFUSAotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKLSAgdmVyc2lvbl90eXBlPWRhcndpbgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKLSAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCi0gIG00X2lmKFskMV0sIFtdLFsKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIl0pIAotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKLSAgOzsKLQotZGd1eCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotZnJlZWJzZDEqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFtbMTIzXV0qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMiopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLltbMDFdXSogfCBmcmVlYnNkZWxmMy5bWzAxXV0qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuW1syLTldXSogfCBmcmVlYnNkZWxmMy5bWzItOV1dKiB8IFwKLSAgZnJlZWJzZDQuW1swLTVdXSB8IGZyZWVic2RlbGY0LltbMC01XV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgOzsKLQotaW50ZXJpeFtbMy05XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKLSAgICAqKQotCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkJdmVyc2lvbl90eXBlPWxpbnV4Ci0JZWxzZQotCQl2ZXJzaW9uX3R5cGU9aXJpeAotCWZpIDs7Ci0gIGVzYWMKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgaXJpeDUqIHwgbm9uc3RvcHV4KikKLSAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9Ci0gICAgOzsKLSAgKikKLSAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECi0gICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKLSAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKLSAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQotICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7Ci0gICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCi0gICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OwotICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgotbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotCi0gICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCi0gIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwotICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICAgIDs7Ci0gICAgc2llbWVucykKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBtb3Rvcm9sYSkKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCi0gICAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotICAgIHZlcnNpb25fdHlwZT1saW51eAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXV0czQqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQotdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCi1maQotXSkjIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSCi0KLQotIyBfTFRfQUNfVEFHQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19BUkdfV0lUSChbdGFnc10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtdGFnc0A8OkA9VEFHU0A6PkBdLAotICAgICAgICBbaW5jbHVkZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIEA8OkBhdXRvbWF0aWNAOj5AXSldLAotICAgIFt0YWduYW1lcz0iJHdpdGh2YWwiXSkKLQotaWYgdGVzdCAtZiAiJGx0bWFpbiIgJiYgdGVzdCAtbiAiJHRhZ25hbWVzIjsgdGhlbgotICBpZiB0ZXN0ICEgLWYgIiR7b2ZpbGV9IjsgdGhlbgotICAgIEFDX01TR19XQVJOKFtvdXRwdXQgZmlsZSBgJG9maWxlJyBkb2VzIG5vdCBleGlzdF0pCi0gIGZpCi0KLSAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCi0gICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENDPSdgIgotICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgICAgQUNfTVNHX1dBUk4oW291dHB1dCBmaWxlIGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0XSkKLSAgICBlbHNlCi0gICAgICBBQ19NU0dfV0FSTihbdXNpbmcgYExUQ0M9JExUQ0MnLCBleHRyYWN0ZWQgZnJvbSBgJG9maWxlJ10pCi0gICAgZmkKLSAgZmkKLSAgaWYgdGVzdCAteiAiJExUQ0ZMQUdTIjsgdGhlbgotICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDRkxBR1M9J2AiCi0gIGZpCi0KLSAgIyBFeHRyYWN0IGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBpbiAkb2ZpbGUuCi0gICMgTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyB0aGUgZW50aXJlIGxpc3QgaXMgb24gb25lIGxpbmUuCi0gIGF2YWlsYWJsZV90YWdzPWBncmVwICJeYXZhaWxhYmxlX3RhZ3M9IiAiJHtvZmlsZX0iIHwgJFNFRCAtZSAncy9hdmFpbGFibGVfdGFncz1cKC4qJFwpL1wxLycgLWUgJ3MvXCIvL2cnYAotCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICBmb3IgdGFnbmFtZSBpbiAkdGFnbmFtZXM7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgIyBDaGVjayB3aGV0aGVyIHRhZ25hbWUgY29udGFpbnMgb25seSB2YWxpZCBjaGFyYWN0ZXJzCi0gICAgY2FzZSBgJGVjaG8gIlgkdGFnbmFtZSIgfCAkWHNlZCAtZSAnczpbWy1fQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAsL11dOjpnJ2AgaW4KLSAgICAiIikgOzsKLSAgICAqKSAgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZV0pCi0JOzsKLSAgICBlc2FjCi0KLSAgICBpZiBncmVwICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZSQiIDwgIiR7b2ZpbGV9IiA+IC9kZXYvbnVsbAotICAgIHRoZW4KLSAgICAgIEFDX01TR19FUlJPUihbdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzXSkKLSAgICBmaQotCi0gICAgIyBVcGRhdGUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gICAgaWYgdGVzdCAtbiAiJHRhZ25hbWUiOyB0aGVuCi0gICAgICBlY2hvIGFwcGVuZGluZyBjb25maWd1cmF0aW9uIHRhZyBcIiR0YWduYW1lXCIgdG8gJG9maWxlCi0KLSAgICAgIGNhc2UgJHRhZ25hbWUgaW4KLSAgICAgIENYWCkKLQlpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgotCSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLQkgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCi0JICBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRwotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7Ci0KLSAgICAgIEY3NykKLQlpZiB0ZXN0IC1uICIkRjc3IiAmJiB0ZXN0ICJYJEY3NyIgIT0gIlhubyI7IHRoZW4KLQkgIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgR0NKKQotCWlmIHRlc3QgLW4gIiRHQ0oiICYmIHRlc3QgIlgkR0NKIiAhPSAiWG5vIjsgdGhlbgotCSAgQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUcKLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBSQykKLQlBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHCi0JOzsKLQotICAgICAgKikKLQlBQ19NU0dfRVJST1IoW1Vuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZV0pCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBBcHBlbmQgdGhlIG5ldyB0YWcgbmFtZSB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIiA7IHRoZW4KLSAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgJHRhZ25hbWUiCi0gICAgZmkKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotCi0gICMgTm93IHN1YnN0aXR1dGUgdGhlIHVwZGF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgaWYgZXZhbCAic2VkIC1lICdzL15hdmFpbGFibGVfdGFncz0uKlwkL2F2YWlsYWJsZV90YWdzPVwiJGF2YWlsYWJsZV90YWdzXCIvJyBcIiRvZmlsZVwiID4gXCIke29maWxlfVRcIiI7IHRoZW4KLSAgICBtdiAiJHtvZmlsZX1UIiAiJG9maWxlIgotICAgIGNobW9kICt4ICIkb2ZpbGUiCi0gIGVsc2UKLSAgICBybSAtZiAiJHtvZmlsZX1UIgotICAgIEFDX01TR19FUlJPUihbdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuXSkKLSAgZmkKLWZpCi1dKSMgX0xUX0FDX1RBR0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9ETE9QRU4KLSMgLS0tLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIGNoZWNrcyBmb3IgZGxvcGVuIHN1cHBvcnQKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCi0gW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSkKLV0pIyBBQ19MSUJUT09MX0RMT1BFTgotCi0KLSMgQUNfTElCVE9PTF9XSU4zMl9ETEwKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIERMTHMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCi1bQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJUT09MX1NFVFVQXSkKLV0pIyBBQ19MSUJUT09MX1dJTjMyX0RMTAotCi0KLSMgQUNfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnCi0jIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KLUFDX0RFRlVOKFtBQ19FTkFCTEVfU0hBUkVEXSwKLVtkZWZpbmUoW0FDX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIGlmZWxzZSgkMSwgbm8sIG5vLCB5ZXMpKWRubAotQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAotCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1BQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFRbQDo+QF0pXSwKLSAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zaGFyZWQ9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjXSwKLSAgICBbZW5hYmxlX3NoYXJlZD1dQUNfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQotXSkjIEFDX0VOQUJMRV9TSEFSRUQKLQotCi0jIEFDX0RJU0FCTEVfU0hBUkVECi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldCB0aGUgZGVmYXVsdCBzaGFyZWQgZmxhZyB0byAtLWRpc2FibGUtc2hhcmVkCi1BQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0VOQUJMRV9TSEFSRUQobm8pCi1dKSMgQUNfRElTQUJMRV9TSEFSRUQKLQotCi0jIEFDX0VOQUJMRV9TVEFUSUMoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZwotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1BQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCi1bZGVmaW5lKFtBQ19FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKLUFDX0FSR19FTkFCTEUoW3N0YXRpY10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKLQlbYnVpbGQgc3RhdGljIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OwotICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7Ci0gICAgKikKLSAgICAgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zdGF0aWM9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjXSwKLSAgICBbZW5hYmxlX3N0YXRpYz1dQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQotXSkjIEFDX0VOQUJMRV9TVEFUSUMKLQotCi0jIEFDX0RJU0FCTEVfU1RBVElDCi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldCB0aGUgZGVmYXVsdCBzdGF0aWMgZmxhZyB0byAtLWRpc2FibGUtc3RhdGljCi1BQ19ERUZVTihbQUNfRElTQUJMRV9TVEFUSUNdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0VOQUJMRV9TVEFUSUMobm8pCi1dKSMgQUNfRElTQUJMRV9TVEFUSUMKLQotCi0jIEFDX0VOQUJMRV9GQVNUX0lOU1RBTEwoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZwotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1BQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCi1bZGVmaW5lKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKLUFDX0FSR19FTkFCTEUoW2Zhc3QtaW5zdGFsbF0sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mYXN0LWluc3RhbGxAPDpAPVBLR1NAOj5AXSwKLSAgICBbb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIEA8OkBkZWZhdWx0PV1BQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKLSAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjXSwKLSAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQotXSkjIEFDX0VOQUJMRV9GQVNUX0lOU1RBTEwKLQotCi0jIEFDX0RJU0FCTEVfRkFTVF9JTlNUQUxMCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldCB0aGUgZGVmYXVsdCB0byAtLWRpc2FibGUtZmFzdC1pbnN0YWxsCi1BQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0VOQUJMRV9GQVNUX0lOU1RBTEwobm8pCi1dKSMgQUNfRElTQUJMRV9GQVNUX0lOU1RBTEwKLQotCi0jIEFDX0xJQlRPT0xfUElDTU9ERShbTU9ERV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnCi0jIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1waWNfbW9kZT1pZmVsc2UoJCMsMSwkMSxkZWZhdWx0KQotXSkjIEFDX0xJQlRPT0xfUElDTU9ERQotCi0KLSMgQUNfUFJPR19FR1JFUAotIyAtLS0tLS0tLS0tLS0tCi0jIFRoaXMgaXMgcHJlZGVmaW5lZCBzdGFydGluZyB3aXRoIEF1dG9jb25mIDIuNTQsIHNvIHRoaXMgY29uZGl0aW9uYWwKLSMgZGVmaW5pdGlvbiBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlIHJlcXVpcmUgQXV0b2NvbmYgMi41NCBvciBsYXRlci4KLW00X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sIFtBQ19ERUZVTihbQUNfUFJPR19FR1JFUF0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlZ3JlcF0sIFthY19jdl9wcm9nX2VncmVwXSwKLSAgIFtpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKLSAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCi0gICAgZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKLSAgICBmaV0pCi0gRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKLSBBQ19TVUJTVChbRUdSRVBdKQotXSldKQotCi0KLSMgQUNfUEFUSF9UT09MX1BSRUZJWAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQotQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAotW2Nhc2UgJE1BR0lDX0NNRCBpbgotW1tcXC8qXSB8ICA/OltcXC9dKl0pCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSopCi0gIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWRubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgotZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAotZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KLSAgYWNfZHVtbXk9ImlmZWxzZShbJDJdLCAsICRQQVRILCBbJDJdKSIKLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgotICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgotCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi0JImZpbGVfbWFnaWMgIiopCi0JICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKLQkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAotCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICA6Ci0JICBlbHNlCi0JICAgIGNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCi0qKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCi0qKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKLSoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAotKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCi0qKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91Ci0qKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCi0qKiogYnVnLWxpYnRvb2xAZ251Lm9yZwotCi1FT0YKLQkgIGZpIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCi0gIDs7Ci1lc2FjXSkKLU1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vKQotZmkKLV0pIyBBQ19QQVRIX1RPT0xfUFJFRklYCi0KLQotIyBBQ19QQVRIX01BR0lDCi0jIC0tLS0tLS0tLS0tLS0KLSMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKLUFDX0RFRlVOKFtBQ19QQVRIX01BR0lDXSwKLVtBQ19QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKLWlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAgIEFDX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKLSAgZWxzZQotICAgIE1BR0lDX0NNRD06Ci0gIGZpCi1maQotXSkjIEFDX1BBVEhfTUFHSUMKLQotCi0jIEFDX1BST0dfTEQKLSMgLS0tLS0tLS0tLQotIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCi1BQ19ERUZVTihbQUNfUFJPR19MRF0sCi1bQUNfQVJHX1dJVEgoW2dudS1sZF0sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKLQlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKLSAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKLSAgICBbd2l0aF9nbnVfbGQ9bm9dKQotQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAotYWNfcHJvZz1sZAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKLSAgY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7Ci0gICopCi0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OwotICBlc2FjCi0gIGNhc2UgJGFjX3Byb2cgaW4KLSAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KLSAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCi0gICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJwotICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCi0gICAgICBkb25lCi0gICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKLSAgICAgIDs7Ci0gICIiKQotICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgotICAgIGFjX3Byb2c9bGQKLSAgICA7OwotICAqKQotICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KLSAgICB3aXRoX2dudV9sZD11bmtub3duCi0gICAgOzsKLSAgZXNhYwotZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCi1lbHNlCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQotZmkKLUFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAotW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCi0gICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKLQk7OwotICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhawotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLWVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpXSkKLUxEPSIkbHRfY3ZfcGF0aF9MRCIKLWlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkTEQpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm8pCi1maQotdGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKLUFDX1BST0dfTERfR05VCi1dKSMgQUNfUFJPR19MRAotCi0KLSMgQUNfUFJPR19MRF9HTlUKLSMgLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCi1BQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKLVsjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCi1jYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotKkdOVSogfCAqJ3dpdGggQkZEJyopCi0gIGx0X2N2X3Byb2dfZ251X2xkPXllcwotICA7OwotKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KLSAgOzsKLWVzYWNdKQotd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCi1dKSMgQUNfUFJPR19MRF9HTlUKLQotCi0jIEFDX1BST0dfTERfUkVMT0FEX0ZMQUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKLSMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgotQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAotW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKLSAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWcsCi0gIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKLXJlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZwotY2FzZSAkcmVsb2FkX2ZsYWcgaW4KLSIiIHwgIiAiKikgOzsKLSopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OwotZXNhYwotcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotY2FzZSAkaG9zdF9vcyBpbgotICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gICAgZWxzZQotICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGZpCi0gICAgOzsKLWVzYWMKLV0pIyBBQ19QUk9HX0xEX1JFTE9BRF9GTEFHCi0KLQotIyBBQ19ERVBMSUJTX0NIRUNLX01FVEhPRAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCi0jICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCi1BQ19ERUZVTihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAotW0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAotbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCi1bbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCi1sdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJwotIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0Ci0jIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCi0jICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KLSMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgotIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgotIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgotIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAotIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KLSMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQotIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4NCogfCBhaXg1KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotYmVvcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWJzZGlbWzQ1XV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJwotICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbwotICA7OwotCi1jeWd3aW4qKQotICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKLSAgOzsKLQotbWluZ3cqIHwgcHczMiopCi0gICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKLSAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCi0gICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCi0gIGlmICggZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKLSAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKLSAgZmkKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgaSo4NiApCi0gICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgotICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KLSAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pW1szLTldXTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JwotICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICBmaQotICA7OwotCi1nbnUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1ocHV4MTAuMjAqIHwgaHB1eDExKikKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxFTEYtW1swLTldXVtbMC05XV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KLSAgICA7OwotICBocHBhKjY0KikKLSAgICBbbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIFBBLVJJU0MgWzAtOV0uWzAtOV0nXQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAotICAgIDs7Ci0gICopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18UEEtUklTQ1tbMC05XV0uW1swLTldXSkgc2hhcmVkIGxpYnJhcnknCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotaW50ZXJpeFtbMy05XV0qKQotICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298XC5hKSQnCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJExEIGluCi0gICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKLSAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7Ci0gICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKLSAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OwotICBlc2FjCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLW5ldGJzZCopCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKLSAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJwotICBmaQotICA7OwotCi1uZXdvczYqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCi0gIDs7Ci0KLW50by1xbngqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi0gIDs7Ci0KLW9wZW5ic2QqKQotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8XC5zb3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJwotICBmaQotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXJkb3MqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1zb2xhcmlzKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgbW90b3JvbGEpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAotICAgIDs7Ci0gIG5jcikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIHNlcXVlbnQpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJwotICAgIDs7Ci0gIHNuaSkKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJwotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbwotICAgIDs7Ci0gIHNpZW1lbnMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBwYykKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci1lc2FjCi1dKQotZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKLXRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotXSkjIEFDX0RFUExJQlNfQ0hFQ0tfTUVUSE9ECi0KLQotIyBBQ19QUk9HX05NCi0jIC0tLS0tLS0tLS0KLSMgZmluZCB0aGUgcGF0aG5hbWUgdG8gYSBCU0QtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgotQUNfREVGVU4oW0FDX1BST0dfTk1dLAotW0FDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELWNvbXBhdGlibGUgbm1dLCBsdF9jdl9wYXRoX05NLAotW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KLSAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGx0X2N2X3BhdGhfTk09IiROTSIKLWVsc2UKLSAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KLSAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgotICBmaQotICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KLSAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKLSAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KLQkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KLQkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgotCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKLQkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKLQljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KLQkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCi0JICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgotCSAgYnJlYWsKLQkgIDs7Ci0JKikKLQkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgotCSAgKi9kZXYvbnVsbCopCi0JICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCi0JICAgIGJyZWFrCi0JICAgIDs7Ci0JICAqKQotCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAotCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncwotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgZG9uZQotICB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9OTSIgJiYgbHRfY3ZfcGF0aF9OTT1ubQotZmldKQotTk09IiRsdF9jdl9wYXRoX05NIgotXSkjIEFDX1BST0dfTk0KLQotCi0jIEFDX0NIRUNLX0xJQk0KLSMgLS0tLS0tLS0tLS0tLQotIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5Ci1BQ19ERUZVTihbQUNfQ0hFQ0tfTElCTV0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotTElCTT0KLWNhc2UgJGhvc3QgaW4KLSotKi1iZW9zKiB8ICotKi1jeWd3aW4qIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCi0gICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAotICA7OwotKi1uY3Itc3lzdjQuMyopCi0gIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09Ii1sbXciKQotICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSIkTElCTSAtbG0iKQotICA7OwotKikKLSAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iLWxtIikKLSAgOzsKLWVzYWMKLV0pIyBBQ19DSEVDS19MSUJNCi0KLQotIyBBQ19MSUJMVERMX0NPTlZFTklFTkNFKFtESVJFQ1RPUlldKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBzZXRzIExJQkxUREwgdG8gdGhlIGxpbmsgZmxhZ3MgZm9yIHRoZSBsaWJsdGRsIGNvbnZlbmllbmNlIGxpYnJhcnkgYW5kCi0jIExURExJTkNMIHRvIHRoZSBpbmNsdWRlIGZsYWdzIGZvciB0aGUgbGlibHRkbCBoZWFkZXIgYW5kIGFkZHMKLSMgLS1lbmFibGUtbHRkbC1jb252ZW5pZW5jZSB0byB0aGUgY29uZmlndXJlIGFyZ3VtZW50cy4gIE5vdGUgdGhhdAotIyBBQ19DT05GSUdfU1VCRElSUyBpcyBub3QgY2FsbGVkIGhlcmUuICBJZiBESVJFQ1RPUlkgaXMgbm90IHByb3ZpZGVkLAotIyBpdCBpcyBhc3N1bWVkIHRvIGJlIGBsaWJsdGRsJy4gIExJQkxUREwgd2lsbCBiZSBwcmVmaXhlZCB3aXRoCi0jICcke3RvcF9idWlsZGRpcn0vJyBhbmQgTFRETElOQ0wgd2lsbCBiZSBwcmVmaXhlZCB3aXRoICcke3RvcF9zcmNkaXJ9LycKLSMgKG5vdGUgdGhlIHNpbmdsZSBxdW90ZXMhKS4gIElmIHlvdXIgcGFja2FnZSBpcyBub3QgZmxhdCBhbmQgeW91J3JlIG5vdAotIyB1c2luZyBhdXRvbWFrZSwgZGVmaW5lIHRvcF9idWlsZGRpciBhbmQgdG9wX3NyY2RpciBhcHByb3ByaWF0ZWx5IGluCi0jIHRoZSBNYWtlZmlsZXMuCi1BQ19ERUZVTihbQUNfTElCTFRETF9DT05WRU5JRU5DRV0sCi1bQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfU0VUVVBdKWRubAotICBjYXNlICRlbmFibGVfbHRkbF9jb252ZW5pZW5jZSBpbgotICBubykgQUNfTVNHX0VSUk9SKFt0aGlzIHBhY2thZ2UgbmVlZHMgYSBjb252ZW5pZW5jZSBsaWJsdGRsXSkgOzsKLSAgIiIpIGVuYWJsZV9sdGRsX2NvbnZlbmllbmNlPXllcwotICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWNvbnZlbmllbmNlIiA7OwotICBlc2FjCi0gIExJQkxUREw9JyR7dG9wX2J1aWxkZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkvbGlibHRkbGMubGEKLSAgTFRETElOQ0w9Jy1JJHt0b3Bfc3JjZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkKLSAgIyBGb3IgYmFja3dhcmRzIG5vbi1nZXR0ZXh0IGNvbnNpc3RlbnQgY29tcGF0aWJpbGl0eS4uLgotICBJTkNMVERMPSIkTFRETElOQ0wiCi1dKSMgQUNfTElCTFRETF9DT05WRU5JRU5DRQotCi0KLSMgQUNfTElCTFRETF9JTlNUQUxMQUJMRShbRElSRUNUT1JZXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgc2V0cyBMSUJMVERMIHRvIHRoZSBsaW5rIGZsYWdzIGZvciB0aGUgbGlibHRkbCBpbnN0YWxsYWJsZSBsaWJyYXJ5IGFuZAotIyBMVERMSU5DTCB0byB0aGUgaW5jbHVkZSBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaGVhZGVyIGFuZCBhZGRzCi0jIC0tZW5hYmxlLWx0ZGwtaW5zdGFsbCB0byB0aGUgY29uZmlndXJlIGFyZ3VtZW50cy4gIE5vdGUgdGhhdAotIyBBQ19DT05GSUdfU1VCRElSUyBpcyBub3QgY2FsbGVkIGhlcmUuICBJZiBESVJFQ1RPUlkgaXMgbm90IHByb3ZpZGVkLAotIyBhbmQgYW4gaW5zdGFsbGVkIGxpYmx0ZGwgaXMgbm90IGZvdW5kLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGBsaWJsdGRsJy4KLSMgTElCTFRETCB3aWxsIGJlIHByZWZpeGVkIHdpdGggJyR7dG9wX2J1aWxkZGlyfS8nIyBhbmQgTFRETElOQ0wgd2l0aAotIyAnJHt0b3Bfc3JjZGlyfS8nIChub3RlIHRoZSBzaW5nbGUgcXVvdGVzISkuICBJZiB5b3VyIHBhY2thZ2UgaXMgbm90Ci0jIGZsYXQgYW5kIHlvdSdyZSBub3QgdXNpbmcgYXV0b21ha2UsIGRlZmluZSB0b3BfYnVpbGRkaXIgYW5kIHRvcF9zcmNkaXIKLSMgYXBwcm9wcmlhdGVseSBpbiB0aGUgTWFrZWZpbGVzLgotIyBJbiB0aGUgZnV0dXJlLCB0aGlzIG1hY3JvIG1heSBoYXZlIHRvIGJlIGNhbGxlZCBhZnRlciBBQ19QUk9HX0xJQlRPT0wuCi1BQ19ERUZVTihbQUNfTElCTFRETF9JTlNUQUxMQUJMRV0sCi1bQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfU0VUVVBdKWRubAotICBBQ19DSEVDS19MSUIobHRkbCwgbHRfZGxpbml0LAotICBbdGVzdCB4IiRlbmFibGVfbHRkbF9pbnN0YWxsIiAhPSB4eWVzICYmIGVuYWJsZV9sdGRsX2luc3RhbGw9bm9dLAotICBbaWYgdGVzdCB4IiRlbmFibGVfbHRkbF9pbnN0YWxsIiA9IHhubzsgdGhlbgotICAgICBBQ19NU0dfV0FSTihbbGlibHRkbCBub3QgaW5zdGFsbGVkLCBidXQgaW5zdGFsbGF0aW9uIGRpc2FibGVkXSkKLSAgIGVsc2UKLSAgICAgZW5hYmxlX2x0ZGxfaW5zdGFsbD15ZXMKLSAgIGZpCi0gIF0pCi0gIGlmIHRlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgPSB4InllcyI7IHRoZW4KLSAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZW5hYmxlLWx0ZGwtaW5zdGFsbCIKLSAgICBMSUJMVERMPScke3RvcF9idWlsZGRpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pL2xpYmx0ZGwubGEKLSAgICBMVERMSU5DTD0nLUkke3RvcF9zcmNkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKQotICBlbHNlCi0gICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWluc3RhbGw9bm8iCi0gICAgTElCTFRETD0iLWxsdGRsIgotICAgIExURExJTkNMPQotICBmaQotICAjIEZvciBiYWNrd2FyZHMgbm9uLWdldHRleHQgY29uc2lzdGVudCBjb21wYXRpYmlsaXR5Li4uCi0gIElOQ0xUREw9IiRMVERMSU5DTCIKLV0pIyBBQ19MSUJMVERMX0lOU1RBTExBQkxFCi0KLQotIyBBQ19MSUJUT09MX0NYWAotIyAtLS0tLS0tLS0tLS0tLQotIyBlbmFibGUgc3VwcG9ydCBmb3IgQysrIGxpYnJhcmllcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfTEFOR19DWFhdKQotXSkjIEFDX0xJQlRPT0xfQ1hYCi0KLQotIyBfTFRfQUNfTEFOR19DWFgKLSMgLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pCi1BQ19SRVFVSVJFKFtfTFRfQUNfUFJPR19DWFhDUFBdKQotX0xUX0FDX1NIRUxMX0lOSVQoW3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfUNYWF0pCi1dKSMgX0xUX0FDX0xBTkdfQ1hYCi0KLSMgX0xUX0FDX1BST0dfQ1hYQ1BQCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19QUk9HX0NYWENQUF0sCi1bCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pCi1pZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgotICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgotICBBQ19QUk9HX0NYWENQUAotZmkKLV0pIyBfTFRfQUNfUFJPR19DWFhDUFAKLQotIyBBQ19MSUJUT09MX0Y3NwotIyAtLS0tLS0tLS0tLS0tLQotIyBlbmFibGUgc3VwcG9ydCBmb3IgRm9ydHJhbiA3NyBsaWJyYXJpZXMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfRjc3XSkKLV0pIyBBQ19MSUJUT09MX0Y3NwotCi0KLSMgX0xUX0FDX0xBTkdfRjc3Ci0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N10sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19GNzddKQotX0xUX0FDX1NIRUxMX0lOSVQoW3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfUY3N10pCi1dKSMgX0xUX0FDX0xBTkdfRjc3Ci0KLQotIyBBQ19MSUJUT09MX0dDSgotIyAtLS0tLS0tLS0tLS0tLQotIyBlbmFibGUgc3VwcG9ydCBmb3IgR0NKIGxpYnJhcmllcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfTEFOR19HQ0pdKQotXSkjIEFDX0xJQlRPT0xfR0NKCi0KLQotIyBfTFRfQUNfTEFOR19HQ0oKLSMgLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKXSwKLVtBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLFtdLAotICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLFtdLAotICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfQUNfUFJPR19HQ0pdLFtdLAotICAgICAgW2lmZGVmKFtBQ19QUk9HX0dDSl0sW0FDX1JFUVVJUkUoW0FDX1BST0dfR0NKXSldLAotCSBbaWZkZWYoW0FdW01fUFJPR19HQ0pdLFtBQ19SRVFVSVJFKFtBXVtNX1BST0dfR0NKXSldLAotCSAgIFtBQ19SRVFVSVJFKFtBXVtDX1BST0dfR0NKX09SX0FdW01fUFJPR19HQ0pdKV0pXSldKV0pXSkKLV9MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1HQ0pdKQotXSkjIF9MVF9BQ19MQU5HX0dDSgotCi0KLSMgQUNfTElCVE9PTF9SQwotIyAtLS0tLS0tLS0tLS0tCi0jIGVuYWJsZSBzdXBwb3J0IGZvciBXaW5kb3dzIHJlc291cmNlIGZpbGVzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9SQ10sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19SQ10pCi1fTFRfQUNfU0hFTExfSU5JVChbdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9UkNdKQotXSkjIEFDX0xJQlRPT0xfUkMKLQotCi0jIEFDX0xJQlRPT0xfTEFOR19DX0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFycyBmb3IgdGhlIEMgY29tcGlsZXIgYXJlCi0jIHN1aXRhYmx5IGRlZmluZWQuICBUaG9zZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5Ci0jIEFDX0xJQlRPT0xfQ09ORklHIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddLCBbX0xUX0FDX0xBTkdfQ19DT05GSUddKQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0NfQ09ORklHXSwKLVtsdF9zYXZlX0NDPSIkQ0MiCi1BQ19MQU5HX1BVU0goQykKLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWMKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JwotCi1fTFRfQUNfU1lTX0NPTVBJTEVSCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1fTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLV9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEkoJDEpCi1BQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDKCQxKQotQUNfTElCVE9PTF9QUk9HX0NDX0NfTygkMSkKLUFDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLUygkMSkKLUFDX0xJQlRPT0xfUFJPR19MRF9TSExJQlMoJDEpCi1BQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUigkMSkKLUFDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIKCQxKQotQUNfTElCVE9PTF9TWVNfTElCX1NUUklQCi1BQ19MSUJUT09MX0RMT1BFTl9TRUxGCi0KLSMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAotQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCi10ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KLQotIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0jIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCi0gICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwotICBmaQotICA7OwotCi1haXg0KiB8IGFpeDUqKQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCi0gICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgZmkKLSAgICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCi0jIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLXRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwotQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQotCi1BQ19MSUJUT09MX0NPTkZJRygkMSkKLQotQUNfTEFOR19QT1AKLUNDPSIkbHRfc2F2ZV9DQyIKLV0pIyBBQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLCBbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJRyhDWFgpXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwKLVtBQ19MQU5HX1BVU0goQysrKQotQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotQUNfUkVRVUlSRShbX0xUX0FDX1BST0dfQ1hYQ1BQXSkKLQotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi1fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKLV9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0KLV9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKHByZWRlcHMsICQxKT0KLV9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKT0KLV9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9Ci0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWNwcAotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSRDQwotbHRfc2F2ZV9MRD0kTEQKLWx0X3NhdmVfR0NDPSRHQ0MKLUdDQz0kR1hYCi1sdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAotbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECi1pZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCi0gIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAotZWxzZQotICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKLWZpCi1pZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KLSAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAotZWxzZQotICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAotZmkKLXRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCi1DQz0ke0NYWC0iYysrIn0KLWNvbXBpbGVyPSRDQwotX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0jIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2VuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQotIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJwotZWxzZQotICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9Ci1maQotCi1pZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgotCi0gIEFDX1BST0dfTEQKLQotICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKLSAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bwotICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCi0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwgXAotCWdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAgIGZpCi0gIGVsc2UKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIHdsYXJjPQotCi0gICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KLSAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQotICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCi0gICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCi0gICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gIGZpCi0KLSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLWVsc2UKLSAgR1hYPW5vCi0gIHdpdGhfZ251X2xkPW5vCi0gIHdsYXJjPQotZmkKLQotIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcwotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIGFpeDQqIHwgYWl4NSopCi0gICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLSAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLSAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKLSAgICBlbHNlCi0gICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLSAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCi0gICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeDUqKQotCWZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotCSAgY2FzZSAkbGRfZmxhZyBpbgotCSAgKi1icnRsKikKLQkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLQkgICAgYnJlYWsKLQkgICAgOzsKLQkgIGVzYWMKLQlkb25lCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLSAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICBmaQotCi0gICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotCi0gICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQotICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCi0gICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQljb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQl0aGVuCi0JICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLQkgIDoKLQllbHNlCi0JICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCi0JICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0JICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCXNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICAjIG5vdCB1c2luZyBnY2MKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLQkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCXNoYXJlZF9mbGFnPSctRycKLSAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPScke3dsfS1HJwotCWVsc2UKLQkgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCi0JZmkKLSAgICAgIGZpCi0gICAgZmkKLQotICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAotICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCi0gICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCi0gICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgZWxzZQotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0gICAgICBlbHNlCi0JIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCV9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJwotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJwotCSMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKLQkjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0gICAgICBmaQotICAgIGZpCi0gICAgOzsKLQotICBiZW9zKikKLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotICAgICAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgIGVsc2UKLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICBmaQotICAgIDs7Ci0KLSAgY2hvcnVzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLQotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0gICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgZWxzZQotCWVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICBmaX4KLSAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgZmkKLSAgOzsKLSAgICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQotICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIDs7Ci0gICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCi0gICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KLSAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KLSAgICAgICAgICAgICAxMC5bWzAxMl1dKQotICAgICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0KLSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyA7IHRoZW4KLSAgICAgIGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgIGlmICRDQyAtZHVtcHNwZWNzIDI+JjEgfCAkRUdSRVAgJ3NpbmdsZV9tb2R1bGUnID4vZGV2L251bGwgOyB0aGVuCi0gICAgICAgbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiWCRsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSBYeWVzIDsgdGhlbgotICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtZHluYW1pY2xpYiAtc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJwotICAgICAgZWxzZQotICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2Jqc34kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCi0gICAgICAgIGZpCi0gICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICAgaWYgdGVzdCAiWCRsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSBYeWVzIDsgdGhlbgotICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1keW5hbWljbGliIC1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2Jqc34kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIGZpCi0gICAgICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgICAgIDs7Ci0KLSAgZGd1eCopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGVjKysqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgZ2hjeCopCi0JIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGZyZWVic2RbWzEyXV0qKQotICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUgc3dpdGNoIHRvIEVMRgotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBmcmVlYnNkLWVsZiopCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgOzsKLSAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCi0gICAgIyBjb252ZW50aW9ucwotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0gICAgOzsKLSAgZ251KikKLSAgICA7OwotICBocHV4OSopCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkjIGJ1dCBhcyB0aGUgZGVmYXVsdAotCQkJCSMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgIENDKikKLSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgOzsKLSAgICBhQ0MqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0gICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICAgICAgIwotICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLSAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLSAgICAgICMgZGVwZW5kZW5jaWVzLgotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIltbLV1dTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGhwdXgxMCp8aHB1eDExKikKLSAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikgOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgaHBwYSo2NCp8aWE2NCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLSAgICAqKQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJCSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJCSAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICBhQ0MqKQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgZ3JlcCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0JICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCi0JICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGhwcGEqNjQqKQotCSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICBpYTY0KikKLQkgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgKikKLQkgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICBmaQotCWVsc2UKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgaW50ZXJpeFtbMy05XV0qKQotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgIDs7Ci0gIGlyaXg1KiB8IGlyaXg2KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU0dJIEMrKwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSMgaW4gdGhlIGFyY2hpdmUuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAtbyAkbGliJwotCSAgZmkKLQlmaQotCV9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotCTs7Ci0gICAgZXNhYwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgIDs7Ci0gIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJwotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCBncmVwICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGgsJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICBpY3BjKikKLQkjIEludGVsIEMrKwotCXdpdGhfZ251X2xkPXllcwotCSMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCi0JIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKLQkjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgotCWNhc2UgYCRDQyAtViAyPiYxYCBpbgotCSoiVmVyc2lvbiA3LiIqKQotICAJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgOzsKLQkqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgotCSAgdG1wX2lkeW49Ci0JICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7Ci0JICBlc2FjCi0gIAkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICA7OwotCWVzYWMKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0JX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQk7OwotICAgICAgcGdDQyopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCi0gIAlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgICAgOzsKLSAgICAgIGN4eCopCi0JIyBDb21wYXEgQysrCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKLQotCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCi0JICAjIFN1biBDKysgNS45Ci0JICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMnCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQotCSAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgotCSAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQotCSAgIyB3b3VsZCBiZSBiZXR0ZXIuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLQotCSAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSAgIyBpbiB0aGUgYXJjaGl2ZS4KLQkgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgbHlueG9zKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgbTg4ayopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIG12cyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGN4eCopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBuZXRic2QqKQotICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgZmkKLSAgICAjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCi0gICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCi0gICAgOzsKLSAgb3BlbmJzZDIqKQotICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0JX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZmkKLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgIGVsc2UKLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICBmaQotICAgIDs7Ci0gIG9zZjMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBLQ0MqKQotCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5Ci0JIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJwotCi0JOzsKLSAgICAgIFJDQyopCi0JIyBSYXRpb25hbCBDKysgMi40LjEKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgIGN4eCopCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIG9zZjQqIHwgb3NmNSopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICBSQ0MqKQotCSMgUmF0aW9uYWwgQysrIDIuNC4xCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICBjeHgqKQotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgotCSAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgLVdsLC1pbnB1dCAtV2wsJGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbgkkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+Ci0JICAkcm0gJGxpYi5leHAnCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHBzb3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBzdW5vczQqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTdW4gQysrIDQueAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgbGNjKikKLQkjIEx1Y2lkCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzb2xhcmlzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCi0JX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQljYXNlICRob3N0X29zIGluCi0JICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwotCSAgKikKLQkgICAgIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkgICAgIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KLQkgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQkgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCSAgICA7OwotCWVzYWMKLQlfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JIyBpbiB0aGUgYXJjaGl2ZS4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgZ2N4KikKLQkjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLQotCSMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgKikKLQkjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgotCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCi0JICBpZiAkQ0MgLS12ZXJzaW9uIHwgZ3JlcCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCi0JICBlbHNlCi0JICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKLQkgICAgIyBwbGF0Zm9ybS4KLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKLQkgIGZpCi0KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICR3bCRsaWJkaXInCi0JICBjYXNlICRob3N0X29zIGluCi0JICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwotCSAgKikKLQkgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JICAgIDs7Ci0JICBlc2FjCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQotICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JwotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICMgYXMgLXogZGVmcy4KLSAgICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCi0gICAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKLSAgICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbwotICAgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCi0gICAgIyBTbyB0aGF0IGJlaGF2aW91ciBpcyBvbmx5IGVuYWJsZWQgaWYgU0NPQUJTUEFUSCBpcyBzZXQgdG8gYQotICAgICMgbm9uLWVtcHR5IHZhbHVlIGluIHRoZSBlbnZpcm9ubWVudC4gIE1vc3QgbGlrZWx5IG9ubHkgdXNlZnVsIGZvcgotICAgICMgY3JlYXRpbmcgb2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyBvZiBwYWNrYWdlcy4KLSAgICAjIFRoaXMgaXMgYSBoYWNrIHVudGlsIGxpYnRvb2wgb2ZmaWNpYWxseSBzdXBwb3J0cyBhYnNvbHV0ZSBwYXRoCi0gICAgIyBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcmllcy4KLSAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLSAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJwotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCi0gICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICB0YW5kZW0qKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBOQ0MqKQotCSMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgdnh3b3JrcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gICopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCi10ZXN0ICIkX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLV9MVF9BQ19UQUdWQVIoR0NDLCAkMSk9IiRHWFgiCi1fTFRfQUNfVEFHVkFSKExELCAkMSk9IiRMRCIKLQotQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUCgkMSkKLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCi1BQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQotQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKLUFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLUFDX0xJQlRPT0xfQ09ORklHKCQxKQotCi1BQ19MQU5HX1BPUAotQ0M9JGx0X3NhdmVfQ0MKLUxEQ1hYPSRMRAotTEQ9JGx0X3NhdmVfTEQKLUdDQz0kbHRfc2F2ZV9HQ0MKLXdpdGhfZ251X2xkY3h4PSR3aXRoX2dudV9sZAotd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLWx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKLWx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAotbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCi1sdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotXSkjIEFDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHCi0KLSMgQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUChbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQotIyBjb21waWxlciBvdXRwdXQgd2hlbiBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0jIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sWwotZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCi1kbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAotZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAotZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKLWRubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgotaWZlbHNlKFskMV0sW10sW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLWludCBhOwotdm9pZCBmb28gKHZvaWQpIHsgYSA9IDA7IH0KLUVPRgotXSxbJDFdLFtDWFhdLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1jbGFzcyBGb28KLXsKLXB1YmxpYzoKLSAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Ci1wcml2YXRlOgotICBpbnQgYTsKLX07Ci1FT0YKLV0sWyQxXSxbRjc3XSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotICAgICAgc3Vicm91dGluZSBmb28KLSAgICAgIGltcGxpY2l0IG5vbmUKLSAgICAgIGludGVnZXIqNCBhCi0gICAgICBhPTAKLSAgICAgIHJldHVybgotICAgICAgZW5kCi1FT0YKLV0sWyQxXSxbR0NKXSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotcHVibGljIGNsYXNzIGZvbyB7Ci0gIHByaXZhdGUgaW50IGE7Ci0gIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgewotICAgIGEgPSAwOwotICB9Ci19OwotRU9GCi1dKQotZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Ci0gICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotCi0gICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKLSAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCi0gIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KLQotICAjIFRoZSBgKicgaW4gdGhlIGNhc2UgbWF0Y2hlcyBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHVzZSBgY2FzZScgaW4KLSAgIyAkb3V0cHV0X3ZlcmJvc2VfY21kIGNhbiB0cmlnZ2VyIGdsb2IgZXhwYW5zaW9uIGR1cmluZyB0aGUgbG9vcAotICAjIGV2YWwgd2l0aG91dCB0aGlzIHN1YnN0aXR1dGlvbi4KLSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9YCRlY2hvICJYJG91dHB1dF92ZXJib3NlX2xpbmtfY21kIiB8ICRYc2VkIC1lICIkbm9fZ2xvYl9zdWJzdCJgCi0KLSAgZm9yIHAgaW4gYGV2YWwgJG91dHB1dF92ZXJib3NlX2xpbmtfY21kYDsgZG8KLSAgICBjYXNlICRwIGluCi0KLSAgICAtTCogfCAtUiogfCAtbCopCi0gICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KLSAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCi0gICAgICAgaWYgdGVzdCAkcCA9ICItTCIgXAotCSAgfHwgdGVzdCAkcCA9ICItUiI7IHRoZW4KLQkgcHJldj0kcAotCSBjb250aW51ZQotICAgICAgIGVsc2UKLQkgcHJldj0KLSAgICAgICBmaQotCi0gICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KLQkgY2FzZSAkcCBpbgotCSAtTCogfCAtUiopCi0JICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCi0JICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCi0JICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCi0JICAgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkiOyB0aGVuCi0JICAgICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke3ByZXZ9JHtwfSIKLQkgICBlbHNlCi0JICAgICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICR7cHJldn0ke3B9IgotCSAgIGZpCi0JICAgOzsKLQkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKLQkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCi0JIGVzYWMKLSAgICAgICBlbHNlCi0JIGlmIHRlc3QgLXogIiRfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCi0JICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke3ByZXZ9JHtwfSIKLQkgZWxzZQotCSAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICR7cHJldn0ke3B9IgotCSBmaQotICAgICAgIGZpCi0gICAgICAgOzsKLQotICAgICouJG9iamV4dCkKLSAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKLSAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KLSAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KLQkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKLQkgY29udGludWUKLSAgICAgICBmaQotCi0gICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KLQkgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KLQkgICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRwIgotCSBlbHNlCi0JICAgX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpICRwIgotCSBmaQotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCi0JICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJHAiCi0JIGVsc2UKLQkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIDs7Ci0KLSAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KLQotICAgIGVzYWMKLSAgZG9uZQotCi0gICMgQ2xlYW4gdXAuCi0gIHJtIC1mIGEub3V0IGEuZXhlCi1lbHNlCi0gIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCi1maQotCi0kcm0gLWYgY29uZmVzdC4kb2JqZXh0Ci0KLSMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCi1pZmVsc2UoWyQxXSxbQ1hYXSwKLVtjYXNlICRob3N0X29zIGluCi1pbnRlcml4W1szLTldXSopCi0gICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KLSAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KLSAgX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9Ci0gIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KLSAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywkMSk9Ci0gIDs7Ci0KLWxpbnV4KikKLSAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0gICpTdW5cIEMqKQotICAgICMgU3VuIEMrKyA1LjkKLSAgICAjCi0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCi0gICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCi0gICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KLSAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgotICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQotICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc29sYXJpcyopCi0gIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gIENDKikKLSAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKLSAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKLSAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCi0gICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgotICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCi0gICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCi0gICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKLSAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCi0gICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KLSAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLWVzYWMKLV0pCi0KLWNhc2UgIiAkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KLSoiIC1sYyAiKikgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7Ci1lc2FjCi1dKSMgQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUAotCi0jIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLCBbX0xUX0FDX0xBTkdfRjc3X0NPTkZJRyhGNzcpXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0Y3N10pCi1BQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKLQotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KLWFjX2V4dD1mCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCi0gICAgICBzdWJyb3V0aW5lIHQKLSAgICAgIHJldHVybgotICAgICAgZW5kCi0iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKLSAgICAgIHByb2dyYW0gdAotICAgICAgZW5kCi0iCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtGNzctImY3NyJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCi10ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KLQotIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0jIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCi0gICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwotICBmaQotICA7OwotYWl4NCogfCBhaXg1KikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGZpCi0gIDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLV9MVF9BQ19UQUdWQVIoR0NDLCAkMSk9IiRHNzciCi1fTFRfQUNfVEFHVkFSKExELCAkMSk9IiRMRCIKLQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUE9QCi1DQz0iJGx0X3NhdmVfQ0MiCi1dKSMgQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLCBbX0xUX0FDX0xBTkdfR0NKX0NPTkZJRyhHQ0opXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSwKLVtBQ19MQU5HX1NBVkUKLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWphdmEKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtHQ0otImdjaiJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0KLV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi0KLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKCQxKQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUkVTVE9SRQotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFycyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIgYXJlCi0jIHN1aXRhYmx5IGRlZmluZWQuICBUaG9zZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5Ci0jIEFDX0xJQlRPT0xfQ09ORklHIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSwgW19MVF9BQ19MQU5HX1JDX0NPTkZJRyhSQyldKQotQUNfREVGVU4oW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCi1bQUNfTEFOR19TQVZFCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9cmMKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke1JDLSJ3aW5kcmVzIn0KLWNvbXBpbGVyPSRDQwotX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcwotCi1BQ19MSUJUT09MX0NPTkZJRygkMSkKLQotQUNfTEFOR19SRVNUT1JFCi1DQz0iJGx0X3NhdmVfQ0MiCi1dKSMgQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9DT05GSUcoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIElmIFRBR05BTUUgaXMgbm90IHBhc3NlZCwgdGhlbiBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdAotIyB3aXRoIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlCi0jIGFkZCBjb2RlIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieQotIyBUQUdOQU1FIGZyb20gdGhlIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTkZJR10sCi1bIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihDQywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKExELCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihwcmVkZXBzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocG9zdGluc3RhbGxfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHBvc3R1bmluc3RhbGxfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpOyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSB8IFwKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSB8IFwKLSAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKSB8IFwKLSAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1xbJF0wIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXFskXTAgLS1mYWxsYmFjay1lY2hvIlskXS9bJF0wIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWlmZWxzZShbJDFdLCBbXSwKLSAgW2NmZ2ZpbGU9IiR7b2ZpbGV9VCIKLSAgdHJhcCAiJHJtIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKLSAgJHJtIC1mICIkY2ZnZmlsZSIKLSAgQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSldLAotICBbY2ZnZmlsZT0iJG9maWxlIl0pCi0KLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi1pZmVsc2UoWyQxXSwgW10sCi1bIyEgJFNIRUxMCi0KLSMgYCRlY2hvICIkY2ZnZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVApCi0jIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KLSMKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbDoKLSMgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgotU0VEPSRsdF9TRUQKLQotIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KLVhzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKLQotIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKLSMgaWYgQ0RQQVRIIGlzIHNldC4KLSh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKLQotIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCi1hdmFpbGFibGVfdGFncz0KLQotIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUddLAotWyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVdKQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X1tdX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRfTFRfQUNfVEFHVkFSKEdDQywgJDEpCi0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X1tdX0xUX0FDX1RBR1ZBUihMRCwgJDEpCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9bXV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSkKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfW11fTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSkKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKQotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKQotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9bXV9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKQotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKQotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfW11fTFRfQUNfVEFHVkFSKHByZWRlcHMsICQxKQotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfW11fTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9bXV9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKQotCi0jIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KLWZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKLQotIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgotZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpCi0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfW11fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKQotCi0jIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KLSMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcwotIyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9bXV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9bXV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKQotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCi0jIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkKLQotIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKLSMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCi1oYXJkY29kZV9hdXRvbWF0aWM9JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotCi0jIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotCi0jIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi1hbHdheXNfZXhwb3J0X3N5bWJvbHM9JF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSkKLQotIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgotZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKQotCi0jIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1leHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9bXV9MVF9BQ19UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSkKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X1tdX0xUX0FDX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKQotCi1pZmVsc2UoWyQxXSxbXSwKLVsjICMjIyBFTkQgTElCVE9PTCBDT05GSUddLAotWyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXSkKLQotX19FT0ZfXwotCi1pZmVsc2UoWyQxXSxbXSwgWwotICBjYXNlICRob3N0X29zIGluCi0gIGFpeDMqKQotICAgIGNhdCA8PFxFT0YgPj4gIiRjZmdmaWxlIgotCi0jIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKLSMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwotIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgotaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCi0gIENPTExFQ1RfTkFNRVM9Ci0gIGV4cG9ydCBDT0xMRUNUX05BTUVTCi1maQotRU9GCi0gICAgOzsKLSAgZXNhYwotCi0gICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgotICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCi0gICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCi0gICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/Ci0gIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0KLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fCBcCi0gICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKLSAgY2htb2QgK3ggIiRvZmlsZSIKLV0pCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLV0pIyBBQ19MSUJUT09MX0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEkoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldLAotW0FDX1JFUVVJUkUoW19MVF9BQ19TWVNfQ09NUElMRVJdKWRubAotCi1fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9Ci0KLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKLQotICBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zLAotICAgIFstZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwgW10sCi0gICAgW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0iJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIl0pCi1maQotXSkjIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJCi0KLQotIyBBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSwKLVtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCi1BQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pCi1BQ19SRVFVSVJFKFtBQ19QUk9HX05NXSkKLUFDX1JFUVVJUkUoW0FDX09CSkVYVF0pCi0jIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgotQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCi1bCi0jIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KLSMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCi0KLSMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KLXN5bWNvZGU9J1tbQkNERUdSU1RdXScKLQotIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCi1zeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eLiAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDE7L3AnIgotCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLQotIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeCopCi0gIHN5bWNvZGU9J1tbQkNEVF1dJwotICA7OwotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJwotICA7OwotaHB1eCopICMgSXRzIGxpbmtlciBkaXN0aW5ndWlzaGVzIGRhdGEgZnJvbSBjb2RlIHN5bWJvbHMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICBzeW1jb2RlPSdbW0FCQ0RFR1JTVF1dJwotICBmaQotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICA7OwotbGludXgqIHwgaypic2QqLWdudSkKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0gIGZpCi0gIDs7Ci1pcml4KiB8IG5vbnN0b3B1eCopCi0gIHN5bWNvZGU9J1tbQkNERUdSU1RdXScKLSAgOzsKLW9zZiopCi0gIHN5bWNvZGU9J1tbQkNERUdRUlNUXV0nCi0gIDs7Ci1zb2xhcmlzKikKLSAgc3ltY29kZT0nW1tCRFJUXV0nCi0gIDs7Ci1zY28zLjJ2NSopCi0gIHN5bWNvZGU9J1tbRFRdXScKLSAgOzsKLXN5c3Y0LjJ1dzIqKQotICBzeW1jb2RlPSdbW0RUXV0nCi0gIDs7Ci1zeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQotICBzeW1jb2RlPSdbW0FCRFRdXScKLSAgOzsKLXN5c3Y0KQotICBzeW1jb2RlPSdbW0RGTlNUVV1dJwotICA7OwotZXNhYwotCi0jIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KLW9wdF9jcj0KLWNhc2UgJGJ1aWxkX29zIGluCi1taW5ndyopCi0gIG9wdF9jcj1gZWNobyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAotICA7OwotZXNhYwotCi0jIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KLWNhc2UgYCROTSAtViAyPiYxYCBpbgotKkdOVSogfCAqJ3dpdGggQkZEJyopCi0gIHN5bWNvZGU9J1tbQUJDREdJUlNUV11dJyA7OwotZXNhYwotCi0jIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyY29yZSwgdGhlbiB3aXRoIGl0LgotZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbwotCi0gICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCi0gIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCi0KLSAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sgCV1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sgCV1dW1sgCV1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgotCi0gICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgotICBwaXBlX3dvcmtzPW5vCi0KLSAgcm0gLWYgY29uZnRlc3QqCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLWNoYXIgbm1fdGVzdF92YXI7Ci12b2lkIG5tX3Rlc3RfZnVuYygpe30KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi1pbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQotRU9GCi0KLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KLSAgICBubGlzdD1jb25mdGVzdC5ubQotICAgIGlmIEFDX1RSWV9FVkFMKE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0KSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCi0gICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgotICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KLQltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKLSAgICAgIGVsc2UKLQlybSAtZiAiJG5saXN0IlQKLSAgICAgIGZpCi0KLSAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KLSAgICAgIGlmIGdyZXAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQlpZiBncmVwICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCSAgY2F0IDw8RU9GID4gY29uZnRlc3QuJGFjX2V4dAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1FT0YKLQkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KLQkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKLQotCSAgY2F0IDw8RU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KLSMgZGVmaW5lIGx0X3B0cl90IHZvaWQgKgotI2Vsc2UKLSMgZGVmaW5lIGx0X3B0cl90IGNoYXIgKgotIyBkZWZpbmUgY29uc3QKLSNlbmRpZgotCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gKi8KLWNvbnN0IHN0cnVjdCB7Ci0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIGx0X3B0cl90IGFkZHJlc3M7Ci19Ci1sdF9wcmVsb2FkZWRfc3ltYm9sc1tbXV0gPQotewotRU9GCi0JICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsIChsdF9wdHJfdCkgXCZcMn0sLyIgPCAiJG5saXN0IiB8IGdyZXAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0JICBjYXQgPDxcRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSAgezAsIChsdF9wdHJfdCkgMH0KLX07Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi1FT0YKLQkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCi0JICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCi0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLQkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCi0JICBDRkxBR1M9IiRDRkxBR1MkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgotCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgotCSAgICBwaXBlX3dvcmtzPXllcwotCSAgZmkKLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCi0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKLQllbHNlCi0JICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0JZmkKLSAgICAgIGVsc2UKLQllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgIGZpCi0gIGVsc2UKLSAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QqIGNvbmZ0c3QqCi0KLSAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgotICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KLSAgICBicmVhawotICBlbHNlCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KLSAgZmkKLWRvbmUKLV0pCi1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9Ci1maQotaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoZmFpbGVkKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG9rKQotZmkKLV0pICMgQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFCi0KLQotIyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10sCi1bX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ci0KLUFDX01TR19DSEVDS0lORyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdKQotIGlmZWxzZShbJDFdLFtDWFhdLFsKLSAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgotICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLSAgICBhbWlnYW9zKikKLSAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwotICAgICAgOzsKLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0gICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnCi0gICAgICA7OwotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJwotICAgICAgOzsKLSAgICAqZGpncHAqKQotICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0gICAgICA7OwotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQqIHwgYWl4NSopCi0JIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQllbHNlCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLQlmaQotCTs7Ci0gICAgICBjaG9ydXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JY3hjaDY4KikKLQkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAjIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgICBkYXJ3aW4qKQotICAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICAgeGxjKikKLSAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcW5vY29tbW9uJwotICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICAgICAgOzsKLSAgICAgICAgIGVzYWMKLSAgICAgICA7OwotICAgICAgZGd1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGVjKysqKQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgZ2hjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0JIyBGcmVlQlNEIHVzZXMgR05VIEMrKwotCTs7Ci0gICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCi0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQkgICAgZmkKLQkgICAgOzsKLQkgIGFDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotCSAgICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBocHBhKjY0KnxpYTY0KikKLQkgICAgICAjICtaIHRoZSBkZWZhdWx0Ci0JICAgICAgOzsKLQkgICAgKikKLQkgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBpbnRlcml4KikKLQkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKLQkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/Ci0JOzsKLSAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0JICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbGludXgqIHwgaypic2QqLWdudSkKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgIyBLQUkgQysrIENvbXBpbGVyCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLQkgICAgOzsKLQkgIGljcGMqIHwgZWNwYyopCi0JICAgICMgSW50ZWwgQysrCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0JICAgIDs7Ci0JICBwZ0NDKikKLQkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIuCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBDb21wYXEgQysrCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICAqKQotCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkgICAgKlN1blwgQyopCi0JICAgICAgIyBTdW4gQysrIDUuOQotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGx5bnhvcyopCi0JOzsKLSAgICAgIG04OGsqKQotCTs7Ci0gICAgICBtdnMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBjeHgqKQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1XIGMsZXhwb3J0YWxsJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIG5ldGJzZCopCi0JOzsKLSAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJwotCSAgICA7OwotCSAgUkNDKikKLQkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgcHNvcyopCi0JOzsKLSAgICAgIHNvbGFyaXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgICAgOzsKLQkgIGdjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBzdW5vczQqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgICMgU3VuIEMrKyA0LngKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgbGNjKikKLQkgICAgIyBMdWNpZAotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgdGFuZGVtKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgTkNDKikKLQkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHZ4d29ya3MqKQotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgZmkKLV0sCi1bCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwotICAgICAgOzsKLQotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQotICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJwotICAgICAgOzsKLQotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xbm9jb21tb24nCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJwotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKLQkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIGNjYyopCi0gICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICA7OwotCSpTdW5cIEYqKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICByZG9zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi1dKQotQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLWlmIHRlc3QgLW4gIiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCi0gIEFDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpLAotICAgIFskX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpaWZlbHNlKFskMV0sW10sWyAtRFBJQ10sW2lmZWxzZShbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pXSwgW10sCi0gICAgW2Nhc2UgJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgotICAgICAiIiB8ICIgIiopIDs7Ci0gICAgICopIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiIDs7Ci0gICAgIGVzYWNdLAotICAgIFtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0gICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm9dKQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgIDs7Ci0gICopCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpaWZlbHNlKFskMV0sW10sWyAtRFBJQ10sW2lmZWxzZShbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgotQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrc10sCi0gIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MsICQxKSwKLSAgJGx0X3RtcF9zdGF0aWNfZmxhZywKLSAgW10sCi0gIFtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9XSkKLV0pCi0KLQotIyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotaWZlbHNlKFskMV0sW0NYWF0sWwotICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICBjYXNlICRob3N0X29zIGluCi0gIGFpeDQqIHwgYWl4NSopCi0gICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0gICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotICAgIGlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIGVsc2UKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFxbJF0yID09ICJUIikgfHwgKFxbJF0yID09ICJEIikgfHwgKFxbJF0yID09ICJCIikpICYmIChbc3Vic3RyXShcWyRdMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXFskXTMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgZmkKLSAgICA7OwotICBwdzMyKikKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCi0gIDs7Ci0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87L14uKltbIF1dX19ubV9fL3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgOzsKLSAgKikKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICA7OwotICBlc2FjCi1dLFsKLSAgcnVucGF0aF92YXI9Ci0gIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KLSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KLSAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi0gIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKLSAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKLSAgX0xUX0FDX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKT0KLSAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKLSAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgotICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCi0gICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgotICBfTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPSJfR0xPQkFMX09GRlNFVF9UQUJMRV8iCi0gICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAotICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKLSAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90Ci0gICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgotICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgotICBleHRyYWN0X2V4cHN5bXNfY21kcz0KLSAgIyBKdXN0IGJlaW5nIHBhcmFub2lkIGFib3V0IGVuc3VyaW5nIHRoYXQgY2NfYmFzZW5hbWUgaXMgc2V0LgotICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKLSAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCi0gICAgICB3aXRoX2dudV9sZD1ubwotICAgIGZpCi0gICAgOzsKLSAgaW50ZXJpeCopCi0gICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKLSAgICB3aXRoX2dudV9sZD15ZXMKLSAgICA7OwotICBvcGVuYnNkKikKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIDs7Ci0gIGVzYWMKLQotICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHt3bH0nCi0KLSAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQotICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQotICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KLSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLSAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBlbHNlCi0gIAlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gICAgZmkKLSAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgMj4vZGV2L251bGxgIGluCi0gICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQotICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KLSAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KLSAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCi0gICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7Ci0gICAgZXNhYwotCi0gICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKLSAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCi0qKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KLSoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQotKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAotKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLQotICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKLSAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCi0gICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKLSAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCi0gICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKLSAgICAgICMgdGhlbS4KLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBiZW9zKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLQkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyAtZSAnXCcnL15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZWxzZQotCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWZpfgotCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFtbMy05XV0qKQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLSAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgOzsKLQotICAgIGdudSogfCBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JdG1wX2FkZGZsYWc9Ci0JY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0JcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKLQkgIDs7Ci0JcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycwotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKLQllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7Ci0JZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKLQlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgotCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKLQllc2FjCi0JY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqKQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnIDs7Ci0JZXNhYwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0KLQlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCWZpCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCi0Jd2xhcmM9Ci0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5Ci0qKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1FT0YKLSAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgotICAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xW1swLTVdXS4qKQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQljYXQgPDxfTFRfRU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKLSoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotX0xUX0VPRgotCTs7Ci0JKikKLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJwotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lLC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICBmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCAiJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm87IHRoZW4KLSAgICAgIHJ1bnBhdGhfdmFyPQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAgIGZpCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKLSAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgotCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotCSMgYnJva2VuIGNvbGxlY3QyLgotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYWl4NCogfCBhaXg1KikKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9IiIKLSAgICAgIGVsc2UKLQkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLQkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0JaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFxbJF0yID09ICJUIikgfHwgKFxbJF0yID09ICJEIikgfHwgKFxbJF0yID09ICJCIikpICYmIChbc3Vic3RyXShcWyRdMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXFskXTMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZWxzZQotCSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQlmaQotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeDUqKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQotCSAgZG9uZQotCSAgOzsKLQllc2FjCi0KLQlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgIGZpCi0KLSAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCi0JIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCi0JIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0gIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JICB0aGVuCi0gIAkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotICAJICA6Ci0JICBlbHNlCi0gIAkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLSAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAotICAJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0gIAkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0gIAkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotICAJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci0JICBmaQotCSAgOzsKLQllc2FjCi0Jc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLQlmaQotICAgICAgZWxzZQotCSMgbm90IHVzaW5nIGdjYwotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotICAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQkgIHNoYXJlZF9mbGFnPSctRycKLQllbHNlCi0JICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCi0JICBlbHNlCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCi0JICBmaQotCWZpCi0gICAgICBmaQotCi0gICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJwotICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLSAgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgICBlbHNlCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKLQkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0JZWxzZQotCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLQkgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotCSBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKLQkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJwotCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKLQkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotCWZpCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBic2RpW1s0NV1dKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0gICAgICBsaWJleHQ9bGliCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCAkU0VEIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotICAgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCi0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotICAgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLSAgICAgIF9MVF9BQ19UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLSAgICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICA7OwotICAgICAgICopICMgRGFyd2luIDEuMyBvbgotICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCi0gICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCi0gICAgICAgICAgICAgMTAuW1swMTJdXSkKLSAgICAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIDEwLiopCi0gICAgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCi0gICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KLSAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJwotICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgZWxzZQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgZnJlZWJzZDEqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgotICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubwotICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQotICAgICMgZXh0cmEgc3BhY2UpLgotICAgIGZyZWVic2QyLjIqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCi0gICAgZnJlZWJzZDIqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIGhwdXg5KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCi0gICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgICA7OwotCi0gICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQotCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZWxzZQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KnxpYTY0KikKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPScrYiAkbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQkgIDs7Ci0JKikKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCi0JICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgOzsKLQotICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBvcGVuYnNkKikKLSAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQllbHNlCi0JICBjYXNlICRob3N0X29zIGluCi0JICAgb3BlbmJzZFtbMDFdXS4qIHwgb3BlbmJzZDIuW1swLTddXSB8IG9wZW5ic2QyLltbMC03XV0uKikKLQkgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotCSAgICAgOzsKLQkgICAqKQotCSAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICAgICA7OwotCSAgZXNhYwotICAgICAgICBmaQotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgb3MyKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIDs7Ci0KLSAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICA7OwotCi0gICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKLQotCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogdGV4dCcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0Jd2xhcmM9JyR7d2x9JwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBlbHNlCi0Jd2xhcmM9JycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gIAkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwotICAgICAgKikKLQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKLQkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KLSAJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JZWxzZQotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCi0JIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubwotCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCkKLSAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0Jc25pKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/Ci0JOzsKLQlzaWVtZW5zKQotCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCi0JICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgX0xUX0FDX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgICAgOzsKLQltb3Rvcm9sYSkKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0LjMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Jy1CZXhwb3J0JwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcwotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCi0gICAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KLSAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCi0gICAgICAjIGFzIC16IGRlZnMuCi0gICAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi1dKQotQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSldKQotdGVzdCAiJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi0jCi0jIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/Ci0jCi1jYXNlICJ4JF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0KLSAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgY2FzZSAkX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBpbgotICAgIConficqKQotICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgotICAgICAgOzsKLSAgICAnJENDICcqKQotICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQotICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCi0gICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICAgICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICBzb25hbWU9Y29uZnRlc3QKLSAgICAgICAgbGliPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotICAgICAgICBkZXBsaWJzPQotICAgICAgICB3bD0kX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKLQlwaWNfZmxhZz0kX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCi0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12Ci0gICAgICAgIGxpbmtlcl9mbGFncz0tdgotICAgICAgICB2ZXJzdHJpbmc9Ci0gICAgICAgIG91dHB1dF9vYmpkaXI9LgotICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQotICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci0gICAgICAgIGlmIEFDX1RSWV9FVkFMKF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKLSAgICAgICAgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICAgIGVsc2UKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKLSAgICAgICAgZmkKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCi0gICAgICBlbHNlCi0gICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgZmkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIEFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSldKQotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi1dKSMgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUwotCi0KLSMgX0xUX0FDX0ZJTEVfTFRETExfQwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEJlIGNhcmVmdWwgdGhhdCB0aGUgc3RhcnQgbWFya2VyIGFsd2F5cyBmb2xsb3dzIGEgbmV3bGluZS4KLUFDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSwgWwotIyAvKiBsdGRsbC5jIHN0YXJ0cyBoZXJlICovCi0jICNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotIyAjaW5jbHVkZSA8d2luZG93cy5oPgotIyAjdW5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgotIyAjaW5jbHVkZSA8c3RkaW8uaD4KLSMKLSMgI2lmbmRlZiBfX0NZR1dJTl9fCi0jICMgIGlmZGVmIF9fQ1lHV0lOMzJfXwotIyAjICAgIGRlZmluZSBfX0NZR1dJTl9fIF9fQ1lHV0lOMzJfXwotIyAjICBlbmRpZgotIyAjZW5kaWYKLSMKLSMgI2lmZGVmIF9fY3BsdXNwbHVzCi0jIGV4dGVybiAiQyIgewotIyAjZW5kaWYKLSMgQk9PTCBBUElFTlRSWSBEbGxNYWluIChISU5TVEFOQ0UgaEluc3QsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKTsKLSMgI2lmZGVmIF9fY3BsdXNwbHVzCi0jIH0KLSMgI2VuZGlmCi0jCi0jICNpZmRlZiBfX0NZR1dJTl9fCi0jICNpbmNsdWRlIDxjeWd3aW4vY3lnd2luX2RsbC5oPgotIyBERUNMQVJFX0NZR1dJTl9ETEwoIERsbE1haW4gKTsKLSMgI2VuZGlmCi0jIEhJTlNUQU5DRSBfX2hEbGxJbnN0YW5jZV9iYXNlOwotIwotIyBCT09MIEFQSUVOVFJZCi0jIERsbE1haW4gKEhJTlNUQU5DRSBoSW5zdCwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCi0jIHsKLSMgICBfX2hEbGxJbnN0YW5jZV9iYXNlID0gaEluc3Q7Ci0jICAgcmV0dXJuIFRSVUU7Ci0jIH0KLSMgLyogbHRkbGwuYyBlbmRzIGhlcmUgKi8KLV0pIyBfTFRfQUNfRklMRV9MVERMTF9DCi0KLQotIyBfTFRfQUNfVEFHVkFSKFZBUk5BTUUsIFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0sIFtpZmVsc2UoWyQyXSwgW10sIFskMV0sIFskMV8kMl0pXSkKLQotCi0jIG9sZCBuYW1lcwotQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sICAgW0FDX1BST0dfTElCVE9PTF0pCi1BQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sICBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQotQUNfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCAgW0FDX0VOQUJMRV9TVEFUSUMoJEApXSkKLUFDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtBQ19ESVNBQkxFX1NIQVJFRCgkQCldKQotQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCi1BQ19ERUZVTihbQU1fUFJPR19MRF0sICAgICAgICBbQUNfUFJPR19MRF0pCi1BQ19ERUZVTihbQU1fUFJPR19OTV0sICAgICAgICBbQUNfUFJPR19OTV0pCi0KLSMgVGhpcyBpcyBqdXN0IHRvIHNpbGVuY2UgYWNsb2NhbCBhYm91dCB0aGUgbWFjcm8gbm90IGJlaW5nIHVzZWQKLWlmZWxzZShbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKQotCi1BQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLAotW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osIG5vKQotICB0ZXN0ICJ4JHtHQ0pGTEFHUytzZXR9IiA9IHhzZXQgfHwgR0NKRkxBR1M9Ii1nIC1PMiIKLSAgQUNfU1VCU1QoR0NKRkxBR1MpCi1dKQotCi1BQ19ERUZVTihbTFRfQUNfUFJPR19SQ10sCi1bQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywgbm8pCi1dKQotCi0KLSMgQ2hlYXAgYmFja3BvcnQgb2YgQVNfRVhFQ1VUQUJMRV9QIGFuZCByZXF1aXJlZCBtYWNyb3MKLSMgZnJvbSBBdXRvY29uZiAyLjU5OyB3ZSBzaG91bGQgbm90IHVzZSAkYXNfZXhlY3V0YWJsZV9wIGRpcmVjdGx5LgotCi0jIF9BU19URVNUX1BSRVBBUkUKLSMgLS0tLS0tLS0tLS0tLS0tLQotbTRfaWZuZGVmKFtfQVNfVEVTVF9QUkVQQVJFXSwKLVttNF9kZWZ1bihbX0FTX1RFU1RfUFJFUEFSRV0sCi1baWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19leGVjdXRhYmxlX3A9J3Rlc3QgLXgnCi1lbHNlCi0gIGFzX2V4ZWN1dGFibGVfcD0ndGVzdCAtZicKLWZpCi1dKV0pIyBfQVNfVEVTVF9QUkVQQVJFCi0KLSMgQVNfRVhFQ1VUQUJMRV9QCi0jIC0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB3aGV0aGVyIGEgZmlsZSBpcyBleGVjdXRhYmxlLgotbTRfaWZuZGVmKFtBU19FWEVDVVRBQkxFX1BdLAotW200X2RlZnVuKFtBU19FWEVDVVRBQkxFX1BdLAotW0FTX1JFUVVJUkUoW19BU19URVNUX1BSRVBBUkVdKWRubAotJGFzX2V4ZWN1dGFibGVfcCAkMVtdZG5sCi1dKV0pIyBBU19FWEVDVVRBQkxFX1AKLQotIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCi0jICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKLSMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIwotIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jIExUX0FDX1BST0dfU0VECi0jIC0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBhIGZ1bGx5LWZ1bmN0aW9uYWwgc2VkIHByb2dyYW0sIHRoYXQgdHJ1bmNhdGVzCi0jIGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLiAgUHJlZmVyIEdOVSBzZWQgaWYgZm91bmQuCi1BQ19ERUZVTihbTFRfQUNfUFJPR19TRURdLAotW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKLUFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX1NFRCwKLVsjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KLSMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBpZiBBU19FWEVDVVRBQkxFX1AoWyIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0Il0pOyB0aGVuCi0gICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIGZpCi0gICAgZG9uZQotICBkb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi1sdF9hY19tYXg9MAotbHRfYWNfY291bnQ9MAotIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKLSMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCi1mb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KLSAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKLSAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCi0gIGx0X2FjX2NvdW50PTAKLSAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCi0gICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBicmVhawotICBmaQotICB3aGlsZSB0cnVlOyBkbwotICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCi0gICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCi0gICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKLSAgICBlY2hvID4+Y29uZnRlc3QubmwKLSAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhawotICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKLSAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKLSAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAotICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCi0gICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50Ci0gICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCi0gICAgZmkKLSAgZG9uZQotZG9uZQotXSkKLVNFRD0kbHRfY3ZfcGF0aF9TRUQKLUFDX1NVQlNUKFtTRURdKQotQUNfTVNHX1JFU1VMVChbJFNFRF0pCi1dKQotCi0jIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCkBAIC02NTk2LDEwICszMSwxMCBAQAogIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KICMgKFRoaXMgcHJpdmF0ZSBtYWNybyBzaG91bGQgbm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoaXMgZmlsZS4pCiBBQ19ERUZVTihbQU1fQVVUT01BS0VfVkVSU0lPTl0sCi1bYW1fX2FwaV92ZXJzaW9uPScxLjEwJworW2FtX19hcGlfdmVyc2lvbj0nMS4xMScKIGRubCBTb21lIHVzZXJzIGZpbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgbWlzdGFrZSBpdCBmb3IgYSB3YXkgdG8KIGRubCByZXF1aXJlIHNvbWUgbWluaW11bSB2ZXJzaW9uLiAgUG9pbnQgdGhlbSB0byB0aGUgcmlnaHQgbWFjcm8uCi1tNF9pZihbJDFdLCBbMS4xMF0sIFtdLAorbTRfaWYoWyQxXSwgWzEuMTEuMV0sIFtdLAogICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAogXSkKIApAQCAtNjYxMywxMCArNDgsMTIgQEAKICMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyB0aGV5IGNhbiBiZSB0cmFjZWQuCi0jIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQUNfSU5JVF9BVVRPTUFLRS4KKyMgVGhpcyBmdW5jdGlvbiBpcyBBQ19SRVFVSVJFZCBieSBBTV9JTklUX0FVVE9NQUtFLgogQUNfREVGVU4oW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dLAotW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuMTBdKWRubAotX0FNX0FVVE9DT05GX1ZFUlNJT04obTRfUEFDS0FHRV9WRVJTSU9OKV0pCitbQU1fQVVUT01BS0VfVkVSU0lPTihbMS4xMS4xXSlkbmwKK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK19BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQogCiAjIEZpZ3VyZSBvdXQgaG93IHRvIHJ1biB0aGUgYXNzZW1ibGVyLiAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKQEAgLTY2OTUsMTQgKzEzMiwxNCBAQAogCiAjIEFNX0NPTkRJVElPTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisjIENvcHlyaWdodCAoQykgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOAogIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA4CisjIHNlcmlhbCA5CiAKICMgQU1fQ09ORElUSU9OQUwoTkFNRSwgU0hFTEwtQ09ORElUSU9OKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02NzE1LDYgKzE1Miw3IEBACiBBQ19TVUJTVChbJDFfRkFMU0VdKWRubAogX0FNX1NVQlNUX05PVE1BS0UoWyQxX1RSVUVdKWRubAogX0FNX1NVQlNUX05PVE1BS0UoWyQxX0ZBTFNFXSlkbmwKK200X2RlZmluZShbX0FNX0NPTkRfVkFMVUVfJDFdLCBbJDJdKWRubAogaWYgJDI7IHRoZW4KICAgJDFfVFJVRT0KICAgJDFfRkFMU0U9JyMnCkBAIC02NzI4LDE0ICsxNjYsMTQgQEAKIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5Ll1dKQogZmldKV0pCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOQogIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA5CisjIHNlcmlhbCAxMAogCiAjIFRoZXJlIGFyZSBhIGZldyBkaXJ0eSBoYWNrcyBiZWxvdyB0byBhdm9pZCBsZXR0aW5nIGBBQ19QUk9HX0NDJyBiZQogIyB3cml0dGVuIGluIGNsZWFyLCBpbiB3aGljaCBjYXNlIGF1dG9tYWtlLCB3aGVuIHJlYWRpbmcgYWNsb2NhbC5tNCwKQEAgLTY3OTIsNiArMjMwLDE2IEBACiAgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCiAgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiBbJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnXSA8IC4vZGVwY29tcGAKICAgZmkKKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorICBtNF9jYXNlKFskMV0sIFtDQ10sCisgICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjXSwKKyAgICBbQ1hYXSwKKyAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWNdKQorCiAgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwogICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwogICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKQEAgLTY4MDksNyArMjU3LDE3IEBACiAgICAgZG9uZQogICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKIAorICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKICAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OwogICAgIG5vc2lkZWVmZmVjdCkKICAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAogICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZApAQCAtNjgxOSwxOSArMjc3LDIzIEBACiAJYnJlYWsKICAgICAgIGZpCiAgICAgICA7OworICAgIG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CiAgICAgbm9uZSkgYnJlYWsgOzsKICAgICBlc2FjCi0gICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KICAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCiAgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKICAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKICAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCiAgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgogICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgogICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwogICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKQEAgLTY4ODgsNTcgKzM1MCw2OCBAQAogCiAjIEdlbmVyYXRlIGNvZGUgdG8gc2V0IHVwIGRlcGVuZGVuY3kgdHJhY2tpbmcuICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAogIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jc2VyaWFsIDMKKyNzZXJpYWwgNQogCiAjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAotW2ZvciBtZiBpbiAkQ09ORklHX0ZJTEVTOyBkbwotICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgotICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAotICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgotICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0Ci0gICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgotICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcwotICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgotICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQotICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KLSAgaWYgc2VkIDEwcSAiJG1mIiB8IGdyZXAgJ14jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UnID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBkaXJwYXJ0PWBBU19ESVJOQU1FKCIkbWYiKWAKLSAgZWxzZQotICAgIGNvbnRpbnVlCi0gIGZpCi0gICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCi0gICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KLSAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKLSAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKLSAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCi0gIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQotICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAotICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAotICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCi0gICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKLSAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCi0gICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCi0gICMgZXhwYW5zaW9uLgotICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKLSAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKLSAgICAgICBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KLSAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KLSAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKLSAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCi0gICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQotICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCi0gICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCitbeworICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCisgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorICBjYXNlICRDT05GSUdfRklMRVMgaW4KKyAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisgIGVzYWMKKyAgc2hpZnQKKyAgZm9yIG1mCisgIGRvCisgICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGRpcnBhcnQ9YEFTX0RJUk5BTUUoIiRtZiIpYAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAorICAgIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCisgICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKyAgICAjIGV4cGFuc2lvbi4KKyAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKyAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCisgICAgICBBU19NS0RJUl9QKFskZGlycGFydC8kZmRpcl0pCisgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgICAgZG9uZQogICBkb25lCi1kb25lCit9CiBdKSMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCiAKIApAQCAtNjk1OCwxMyArNDMxLDEzIEBACiAjIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKICMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAotIyAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDEyCisjIHNlcmlhbCAxNgogCiAjIFRoaXMgbWFjcm8gYWN0dWFsbHkgZG9lcyB0b28gbXVjaC4gIFNvbWUgY2hlY2tzIGFyZSBvbmx5IG5lZWRlZCBpZgogIyB5b3VyIHBhY2thZ2UgZG9lcyBjZXJ0YWluIHRoaW5ncy4gIEJ1dCB0aGlzIGlzbid0IHJlYWxseSBhIGJpZyBkZWFsLgpAQCAtNjk4MSw3ICs0NTQsNyBAQAogIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCiAjIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCiBBQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCi1bQUNfUFJFUkVRKFsyLjYwXSlkbmwKK1tBQ19QUkVSRVEoWzIuNjJdKWRubAogZG5sIEF1dG9jb25mIHdhbnRzIHRvIGRpc2FsbG93IEFNXyBuYW1lcy4gIFdlIGV4cGxpY2l0bHkgYWxsb3cKIGRubCB0aGUgb25lcyB3ZSBjYXJlIGFib3V0LgogbTRfcGF0dGVybl9hbGxvdyhbXkFNX1tBLVpdK0ZMQUdTJF0pZG5sCkBAIC03MDMyLDggKzUwNSw4IEBACiBBTV9NSVNTSU5HX1BST0coQVVUT01BS0UsIGF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSkKIEFNX01JU1NJTkdfUFJPRyhBVVRPSEVBREVSLCBhdXRvaGVhZGVyKQogQU1fTUlTU0lOR19QUk9HKE1BS0VJTkZPLCBtYWtlaW5mbykKLUFNX1BST0dfSU5TVEFMTF9TSAotQU1fUFJPR19JTlNUQUxMX1NUUklQCitBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU0hdKWRubAorQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NUUklQXSlkbmwKIEFDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sCiAjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgogIyBzb21lIHBsYXRmb3Jtcy4KQEAgLTcwNDEsMjQgKzUxNCwzNyBAQAogQUNfUkVRVUlSRShbQUNfUFJPR19NQUtFX1NFVF0pZG5sCiBBQ19SRVFVSVJFKFtBTV9TRVRfTEVBRElOR19ET1RdKWRubAogX0FNX0lGX09QVElPTihbdGFyLXVzdGFyXSwgW19BTV9QUk9HX1RBUihbdXN0YXJdKV0sCi0gICAgICAgICAgICAgIFtfQU1fSUZfT1BUSU9OKFt0YXItcGF4XSwgW19BTV9QUk9HX1RBUihbcGF4XSldLAotCSAgICAgIAkJICAgICBbX0FNX1BST0dfVEFSKFt2N10pXSldKQorCSAgICAgIFtfQU1fSUZfT1BUSU9OKFt0YXItcGF4XSwgW19BTV9QUk9HX1RBUihbcGF4XSldLAorCQkJICAgICBbX0FNX1BST0dfVEFSKFt2N10pXSldKQogX0FNX0lGX09QVElPTihbbm8tZGVwZW5kZW5jaWVzXSwsCiBbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ0NdLAotICAgICAgICAgICAgICAgICAgW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSwKLSAgICAgICAgICAgICAgICAgIFtkZWZpbmUoW0FDX1BST0dfQ0NdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuKFtBQ19QUk9HX0NDXSlbX0FNX0RFUEVOREVOQ0lFUyhDQyldKV0pZG5sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSwKKwkJICBbZGVmaW5lKFtBQ19QUk9HX0NDXSwKKwkJCSAgZGVmbihbQUNfUFJPR19DQ10pW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSldKWRubAogQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKLSAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENYWCldLAotICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19DWFhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhDWFgpXSwKKwkJICBbZGVmaW5lKFtBQ19QUk9HX0NYWF0sCisJCQkgIGRlZm4oW0FDX1BST0dfQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhDWFgpXSldKWRubAogQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfT0JKQ10sCi0gICAgICAgICAgICAgICAgICBbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0sCi0gICAgICAgICAgICAgICAgICBbZGVmaW5lKFtBQ19QUk9HX09CSkNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuKFtBQ19QUk9HX09CSkNdKVtfQU1fREVQRU5ERU5DSUVTKE9CSkMpXSldKWRubAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKE9CSkMpXSwKKwkJICBbZGVmaW5lKFtBQ19QUk9HX09CSkNdLAorCQkJICBkZWZuKFtBQ19QUk9HX09CSkNdKVtfQU1fREVQRU5ERU5DSUVTKE9CSkMpXSldKWRubAogXSkKK19BTV9JRl9PUFRJT04oW3NpbGVudC1ydWxlc10sIFtBQ19SRVFVSVJFKFtBTV9TSUxFTlRfUlVMRVNdKV0pZG5sCitkbmwgVGhlIGBwYXJhbGxlbC10ZXN0cycgZHJpdmVyIG1heSBuZWVkIHRvIGtub3cgYWJvdXQgRVhFRVhULCBzbyBhZGQgdGhlCitkbmwgYGFtX19FWEVFWFQnIGNvbmRpdGlvbmFsIGlmIF9BTV9DT01QSUxFUl9FWEVFWFQgd2FzIHNlZW4uICBUaGlzIG1hY3JvCitkbmwgaXMgaG9va2VkIG9udG8gX0FDX0NPTVBJTEVSX0VYRUVYVCBlYXJseSwgc2VlIGJlbG93LgorQUNfQ09ORklHX0NPTU1BTkRTX1BSRShkbmwKK1ttNF9wcm92aWRlX2lmKFtfQU1fQ09NUElMRVJfRVhFRVhUXSwKKyAgW0FNX0NPTkRJVElPTkFMKFthbV9fRVhFRVhUXSwgW3Rlc3QgLW4gIiRFWEVFWFQiXSldKV0pZG5sCiBdKQogCitkbmwgSG9vayBpbnRvIGBfQUNfQ09NUElMRVJfRVhFRVhUJyBlYXJseSB0byBsZWFybiBpdHMgZXhwYW5zaW9uLiAgRG8gbm90CitkbmwgYWRkIHRoZSBjb25kaXRpb25hbCByaWdodCBoZXJlLCBhcyBfQUNfQ09NUElMRVJfRVhFRVhUIG1heSBiZSBmdXJ0aGVyCitkbmwgbWFuZ2xlZCBieSBBdXRvY29uZiBhbmQgcnVuIGluIGEgc2hlbGwgY29uZGl0aW9uYWwgc3RhdGVtZW50LgorbTRfZGVmaW5lKFtfQUNfQ09NUElMRVJfRVhFRVhUXSwKK200X2RlZm4oW19BQ19DT01QSUxFUl9FWEVFWFRdKVttNF9wcm92aWRlKFtfQU1fQ09NUElMRVJfRVhFRVhUXSldKQorCiAKICMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KICMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCkBAIC03MDY5LDE4ICs1NTUsMTkgQEAKICMgb3VyIHN0YW1wIGZpbGVzIHRoZXJlLgogQUNfREVGVU4oW19BQ19BTV9DT05GSUdfSEVBREVSX0hPT0tdLAogWyMgQ29tcHV0ZSAkMSdzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9JDEKIF9hbV9zdGFtcF9jb3VudD0xCiBmb3IgX2FtX2hlYWRlciBpbiAkY29uZmlnX2hlYWRlcnMgOjsgZG8KICAgY2FzZSAkX2FtX2hlYWRlciBpbgotICAgICQxIHwgJDE6KiApCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKICAgICAgIGJyZWFrIDs7CiAgICAgKiApCiAgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CiAgIGVzYWMKIGRvbmUKLWVjaG8gInRpbWVzdGFtcCBmb3IgJDEiID5gQVNfRElSTkFNRShbJDFdKWAvc3RhbXAtaFtdJF9hbV9zdGFtcF9jb3VudF0pCitlY2hvICJ0aW1lc3RhbXAgZm9yICRfYW1fYXJnIiA+YEFTX0RJUk5BTUUoWyIkX2FtX2FyZyJdKWAvc3RhbXAtaFtdJF9hbV9zdGFtcF9jb3VudF0pCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKQEAgLTcwOTEsNyArNTc4LDE0IEBACiAjIERlZmluZSAkaW5zdGFsbF9zaC4KIEFDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU0hdLAogW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKLWluc3RhbGxfc2g9JHtpbnN0YWxsX3NoLSJcJChTSEVMTCkgJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCJ9CitpZiB0ZXN0IHgiJHtpbnN0YWxsX3NofSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7CisgICopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisgIGVzYWMKK2ZpCiBBQ19TVUJTVChpbnN0YWxsX3NoKV0pCiAKICMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KQEAgLTcxMTgsMjcgKzYxMiwzOCBAQAogIyBBZGQgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIG9wdGlvbiB0byBjb25maWd1cmUuICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogIyBGcm9tIEppbSBNZXllcmluZwogCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNAorIyBzZXJpYWwgNQogCisjIEFNX01BSU5UQUlORVJfTU9ERShbREVGQVVMVC1NT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb250cm9sIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLgorIyBEZWZhdWx0IGlzIHRvIGRpc2FibGUgdGhlbSwgdW5sZXNzIGBlbmFibGUnIGlzIHBhc3NlZCBsaXRlcmFsbHkuCisjIEZvciBzeW1tZXRyeSwgYGRpc2FibGUnIG1heSBiZSBwYXNzZWQgYXMgd2VsbC4gIEFueXdheSwgdGhlIHVzZXIKKyMgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHdpdGggdGhlIC0tZW5hYmxlLy0tZGlzYWJsZSBzd2l0Y2guCiBBQ19ERUZVTihbQU1fTUFJTlRBSU5FUl9NT0RFXSwKLVtBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzXSkKLSAgZG5sIG1haW50YWluZXItbW9kZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Ci0gIEFDX0FSR19FTkFCTEUobWFpbnRhaW5lci1tb2RlLAotWyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKK1ttNF9jYXNlKG00X2RlZmF1bHQoWyQxXSwgW2Rpc2FibGVdKSwKKyAgICAgICBbZW5hYmxlXSwgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtkaXNhYmxlXSldLAorICAgICAgIFtkaXNhYmxlXSwgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKV0sCisgICAgICAgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKQorICAgICAgICBtNF93YXJuKFtzeW50YXhdLCBbdW5leHBlY3RlZCBhcmd1bWVudCB0byBBTUAmdEBfTUFJTlRBSU5FUl9NT0RFOiAkMV0pXSkKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBhbV9tYWludGFpbmVyX290aGVyIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzXSkKKyAgZG5sIG1haW50YWluZXItbW9kZSdzIGRlZmF1bHQgaXMgJ2Rpc2FibGUnIHVubGVzcyAnZW5hYmxlJyBpcyBwYXNzZWQKKyAgQUNfQVJHX0VOQUJMRShbbWFpbnRhaW5lci1tb2RlXSwKK1sgIC0tXVthbV9tYWludGFpbmVyX290aGVyXVstbWFpbnRhaW5lci1tb2RlICBhbV9tYWludGFpbmVyX290aGVyIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCiAJCQkgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXJdLAotICAgICAgVVNFX01BSU5UQUlORVJfTU9ERT0kZW5hYmxldmFsLAotICAgICAgVVNFX01BSU5UQUlORVJfTU9ERT1ubykKKyAgICAgIFtVU0VfTUFJTlRBSU5FUl9NT0RFPSRlbmFibGV2YWxdLAorICAgICAgW1VTRV9NQUlOVEFJTkVSX01PREU9XW00X2lmKGFtX21haW50YWluZXJfb3RoZXIsIFtlbmFibGVdLCBbbm9dLCBbeWVzXSkpCiAgIEFDX01TR19SRVNVTFQoWyRVU0VfTUFJTlRBSU5FUl9NT0RFXSkKLSAgQU1fQ09ORElUSU9OQUwoTUFJTlRBSU5FUl9NT0RFLCBbdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllc10pCisgIEFNX0NPTkRJVElPTkFMKFtNQUlOVEFJTkVSX01PREVdLCBbdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllc10pCiAgIE1BSU5UPSRNQUlOVEFJTkVSX01PREVfVFJVRQotICBBQ19TVUJTVChNQUlOVClkbmwKKyAgQUNfU1VCU1QoW01BSU5UXSlkbmwKIF0KICkKIApAQCAtNzE0NiwxMyArNjUxLDEzIEBACiAKICMgQ2hlY2sgdG8gc2VlIGhvdyAnbWFrZScgdHJlYXRzIGluY2x1ZGVzLgkgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAzCisjIHNlcmlhbCA0CiAKICMgQU1fTUFLRV9JTkNMVURFKCkKICMgLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcxNjEsNyArNjY2LDcgQEAKIFthbV9tYWtlPSR7TUFLRS1tYWtlfQogY2F0ID4gY29uZmluYyA8PCAnRU5EJwogYW1fX2RvaXQ6Ci0JQGVjaG8gZG9uZQorCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAogLlBIT05ZOiBhbV9fZG9pdAogRU5ECiAjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCkBAIC03MTcxLDI0ICs2NzYsMjQgQEAKIF9hbV9yZXN1bHQ9bm9uZQogIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KIGVjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKLSMgV2UgZ3JlcCBvdXQgYEVudGVyaW5nIGRpcmVjdG9yeScgYW5kIGBMZWF2aW5nIGRpcmVjdG9yeScKLSMgbWVzc2FnZXMgd2hpY2ggY2FuIG9jY3VyIGlmIGB3JyBlbmRzIHVwIGluIE1BS0VGTEFHUy4KLSMgSW4gcGFydGljdWxhciB3ZSBkb24ndCBsb29rIGF0IGBebWFrZTonIGJlY2F1c2UgR05VIG1ha2UgbWlnaHQKLSMgYmUgaW52b2tlZCB1bmRlciBzb21lIG90aGVyIG5hbWUgKHVzdWFsbHkgImdtYWtlIiksIGluIHdoaWNoCi0jIGNhc2UgaXQgcHJpbnRzIGl0cyBuZXcgbmFtZSBpbnN0ZWFkIG9mIGBtYWtlJy4KLWlmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsIHwgZ3JlcCAtdiAnaW5nIGRpcmVjdG9yeSdgIiA9ICJkb25lIjsgdGhlbgotICAgYW1fX2luY2x1ZGU9aW5jbHVkZQotICAgYW1fX3F1b3RlPQotICAgX2FtX3Jlc3VsdD1HTlUKLWZpCisjIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSBgbWFrZScuCitjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgYW1fX3F1b3RlPQorICBfYW1fcmVzdWx0PUdOVQorICA7OworZXNhYwogIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCiBpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCiAgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCi0gICBpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAiID0gImRvbmUiOyB0aGVuCi0gICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQotICAgICAgYW1fX3F1b3RlPSJcIiIKLSAgICAgIF9hbV9yZXN1bHQ9QlNECi0gICBmaQorICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICBhbV9fcXVvdGU9IlwiIgorICAgICBfYW1fcmVzdWx0PUJTRAorICAgICA7OworICAgZXNhYwogZmkKIEFDX1NVQlNUKFthbV9faW5jbHVkZV0pCiBBQ19TVUJTVChbYW1fX3F1b3RlXSkKQEAgLTcxOTYsMTQgKzcwMSwxNCBAQAogcm0gLWYgY29uZmluYyBjb25mbWYKIF0pCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1CisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAogIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA1CisjIHNlcmlhbCA2CiAKICMgQU1fUFJPR19DQ19DX08KICMgLS0tLS0tLS0tLS0tLS0KQEAgLTcyMTUsOCArNzIwLDkgQEAKICMgRklYTUU6IHdlIHJlbHkgb24gdGhlIGNhY2hlIHZhcmlhYmxlIG5hbWUgYmVjYXVzZQogIyB0aGVyZSBpcyBubyBvdGhlciB3YXkuCiBzZXQgZHVtbXkgJENDCi1hY19jYz1gZWNobyAkWzJdIHwgc2VkIFsncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLyddYAotaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfcHJvZ19jY18nJHthY19jY31fY19vYFwiICE9IHllcyI7IHRoZW4KK2FtX2NjPWBlY2hvICRbMl0gfCBzZWQgWydzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ11gCitldmFsIGFtX3Q9XCRhY19jdl9wcm9nX2NjXyR7YW1fY2N9X2NfbworaWYgdGVzdCAiJGFtX3QiICE9IHllczsgdGhlbgogICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KICAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCiAgICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KQEAgLTcyMzIsMTQgKzczOCwxNCBAQAogCiAjIEZha2UgdGhlIGV4aXN0ZW5jZSBvZiBwcm9ncmFtcyB0aGF0IEdOVSBtYWludGFpbmVycyB1c2UuICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1CisjIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAogIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA1CisjIHNlcmlhbCA2CiAKICMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzI1Niw3ICs3NjIsMTQgQEAKIEFDX0RFRlVOKFtBTV9NSVNTSU5HX0hBU19SVU5dLAogW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKIEFDX1JFUVVJUkVfQVVYX0ZJTEUoW21pc3NpbmddKWRubAotdGVzdCB4IiR7TUlTU0lORytzZXR9IiA9IHhzZXQgfHwgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCitpZiB0ZXN0IHgiJHtNSVNTSU5HK3NldH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gXCIkYW1fYXV4X2Rpci9taXNzaW5nXCIiIDs7CisgICopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciIDs7CisgIGVzYWMKK2ZpCiAjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKIGlmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCiAgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCkBAIC03Mjk0LDEzICs4MDcsMTMgQEAKIAogIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMworIyBzZXJpYWwgNAogCiAjIF9BTV9NQU5HTEVfT1BUSU9OKE5BTUUpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03MzE3LDcgKzgzMCw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgT1BUSU9OUyBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIEF1dG9tYWtlIG9wdGlvbnMuCiBBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05TXSwKLVtBQ19GT1JFQUNIKFtfQU1fT3B0aW9uXSwgWyQxXSwgW19BTV9TRVRfT1BUSU9OKF9BTV9PcHRpb24pXSldKQorW200X2ZvcmVhY2hfdyhbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKIAogIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTczMjcsMTQgKzg0MCwxNCBAQAogCiAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLiAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA1CisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNSwgMjAwOAogIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA0CisjIHNlcmlhbCA1CiAKICMgQU1fU0FOSVRZX0NIRUNLCiAjIC0tLS0tLS0tLS0tLS0tLQpAQCAtNzM0MywxNiArODU2LDI5IEBACiAjIEp1c3QgaW4gY2FzZQogc2xlZXAgMQogZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCisjIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQorIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgorYW1fbGY9JworJworY2FzZSBgcHdkYCBpbgorICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZl1dKikKKyAgICBBQ19NU0dfRVJST1IoW3Vuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lXSk7OworZXNhYworY2FzZSAkc3JjZGlyIGluCisgICpbW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV1dKikKKyAgICBBQ19NU0dfRVJST1IoW3Vuc2FmZSBzcmNkaXIgdmFsdWU6IGAkc3JjZGlyJ10pOzsKK2VzYWMKKwogIyBEbyBgc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncwogIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCiAjIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCiAjIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZwogIyBkaXJlY3RvcnkpLgogaWYgKAotICAgc2V0IFggYGxzIC1MdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKICAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCiAgICAgICAjIC1MIGRpZG4ndCB3b3JrLgotICAgICAgc2V0IFggYGxzIC10ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGVgCisgICAgICBzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAogICAgZmkKICAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKICAgIGlmIHRlc3QgIiRbKl0iICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKQEAgLTc0MDUsMTggKzkzMSwyNSBAQAogSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKIEFDX1NVQlNUKFtJTlNUQUxMX1NUUklQX1BST0dSQU1dKV0pCiAKLSMgQ29weXJpZ2h0IChDKSAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCisjIHNlcmlhbCAyCisKICMgX0FNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcmV2ZW50IEF1dG9tYWtlIGZyb20gb3V0cHV0aW5nIFZBUklBQkxFID0gQFZBUklBQkxFQCBpbiBNYWtlZmlsZS5pbi4KKyMgUHJldmVudCBBdXRvbWFrZSBmcm9tIG91dHB1dHRpbmcgVkFSSUFCTEUgPSBAVkFSSUFCTEVAIGluIE1ha2VmaWxlLmluLgogIyBUaGlzIG1hY3JvIGlzIHRyYWNlZCBieSBBdXRvbWFrZS4KIEFDX0RFRlVOKFtfQU1fU1VCU1RfTk9UTUFLRV0pCiAKKyMgQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFB1YmxpYyBzaXN0ZXIgb2YgX0FNX1NVQlNUX05PVE1BS0UuCitBQ19ERUZVTihbQU1fU1VCU1RfTk9UTUFLRV0sIFtfQU1fU1VCU1RfTk9UTUFLRSgkQCldKQorCiAjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKICMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KQEAgLTc1MTMsNCArMTA0Niw5IEBACiBBQ19TVUJTVChbYW1fX3VudGFyXSkKIF0pICMgX0FNX1BST0dfVEFSCiAKK200X2luY2x1ZGUoW200L2xpYnRvb2wubTRdKQorbTRfaW5jbHVkZShbbTQvbHRvcHRpb25zLm00XSkKK200X2luY2x1ZGUoW200L2x0c3VnYXIubTRdKQorbTRfaW5jbHVkZShbbTQvbHR2ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoW200L2x0fm9ic29sZXRlLm00XSkKIG00X2luY2x1ZGUoW2FjaW5jbHVkZS5tNF0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbXBpbGUgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbXBpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWIxZDIzMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29tcGlsZQpAQCAtMCwwICsxLDE0MiBAQAorIyEgL2Jpbi9zaAorIyBXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgYC1jIC1vJy4KKworc2NyaXB0dmVyc2lvbj0yMDA1LTA1LTE0LjIyCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXcml0dGVuIGJ5IFRvbSBUcm9tZXkgPHRyb21leUBjeWdudXMuY29tPi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKK2Nhc2UgJDEgaW4KKyAgJycpCisgICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZXhpdCAxOworICAgICA7OworICAtaCB8IC0taCopCisgICAgY2F0IDw8XEVPRgorVXNhZ2U6IGNvbXBpbGUgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KKworV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kIGAtYyAtbycuCitSZW1vdmUgYC1vIGRlc3QubycgZnJvbSBBUkdTLCBydW4gUFJPR1JBTSB3aXRoIHRoZSByZW1haW5pbmcKK2FyZ3VtZW50cywgYW5kIHJlbmFtZSB0aGUgb3V0cHV0IGFzIGV4cGVjdGVkLgorCitJZiB5b3UgYXJlIHRyeWluZyB0byBidWlsZCBhIHdob2xlIHBhY2thZ2UgdGhpcyBpcyBub3QgdGhlCityaWdodCBzY3JpcHQgdG8gcnVuOiBwbGVhc2Ugc3RhcnQgYnkgcmVhZGluZyB0aGUgZmlsZSBgSU5TVEFMTCcuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gImNvbXBpbGUgJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKK29maWxlPQorY2ZpbGU9CitlYXQ9CisKK2ZvciBhcmcKK2RvCisgIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCisgICAgZWF0PQorICBlbHNlCisgICAgY2FzZSAkMSBpbgorICAgICAgLW8pCisJIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzIGBjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisJIyBTbyB3ZSBzdHJpcCBgLW8gYXJnJyBvbmx5IGlmIGFyZyBpcyBhbiBvYmplY3QuCisJZWF0PTEKKwljYXNlICQyIGluCisJICAqLm8gfCAqLm9iaikKKwkgICAgb2ZpbGU9JDIKKwkgICAgOzsKKwkgICopCisJICAgIHNldCB4ICIkQCIgLW8gIiQyIgorCSAgICBzaGlmdAorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKi5jKQorCWNmaWxlPSQxCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgICAgKikKKwlzZXQgeCAiJEAiICIkMSIKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBmaQorICBzaGlmdAorZG9uZQorCitpZiB0ZXN0IC16ICIkb2ZpbGUiIHx8IHRlc3QgLXogIiRjZmlsZSI7IHRoZW4KKyAgIyBJZiBubyBgLW8nIG9wdGlvbiB3YXMgc2VlbiB0aGVuIHdlIG1pZ2h0IGhhdmUgYmVlbiBpbnZva2VkIGZyb20gYQorICAjIHBhdHRlcm4gcnVsZSB3aGVyZSB3ZSBkb24ndCBuZWVkIG9uZS4gIFRoYXQgaXMgb2sgLS0gdGhpcyBpcyBhCisgICMgbm9ybWFsIGNvbXBpbGF0aW9uIHRoYXQgdGhlIGxvc2luZyBjb21waWxlciBjYW4gaGFuZGxlLiAgSWYgbm8KKyAgIyBgLmMnIGZpbGUgd2FzIHNlZW4gdGhlbiB3ZSBhcmUgcHJvYmFibHkgbGlua2luZy4gIFRoYXQgaXMgYWxzbworICAjIG9rLgorICBleGVjICIkQCIKK2ZpCisKKyMgTmFtZSBvZiBmaWxlIHdlIGV4cGVjdCBjb21waWxlciB0byBjcmVhdGUuCitjb2ZpbGU9YGVjaG8gIiRjZmlsZSIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLmMkLy5vLydgCisKKyMgQ3JlYXRlIHRoZSBsb2NrIGRpcmVjdG9yeS4KKyMgTm90ZTogdXNlIGBbLy4tXScgaGVyZSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIHNhbWUgbmFtZQorIyB0aGF0IHdlIGFyZSB1c2luZyBmb3IgdGhlIC5vIGZpbGUuICBBbHNvLCBiYXNlIHRoZSBuYW1lIG9uIHRoZSBleHBlY3RlZAorIyBvYmplY3QgZmlsZSBuYW1lLCBzaW5jZSB0aGF0IGlzIHdoYXQgbWF0dGVycyB3aXRoIGEgcGFyYWxsZWwgYnVpbGQuCitsb2NrZGlyPWBlY2hvICIkY29maWxlIiB8IHNlZCAtZSAnc3xbLy4tXXxffGcnYC5kCit3aGlsZSB0cnVlOyBkbworICBpZiBta2RpciAiJGxvY2tkaXIiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGJyZWFrCisgIGZpCisgIHNsZWVwIDEKK2RvbmUKKyMgRklYTUU6IHJhY2UgY29uZGl0aW9uIGhlcmUgaWYgdXNlciBraWxscyBiZXR3ZWVuIG1rZGlyIGFuZCB0cmFwLgordHJhcCAicm1kaXIgJyRsb2NrZGlyJzsgZXhpdCAxIiAxIDIgMTUKKworIyBSdW4gdGhlIGNvbXBpbGUuCisiJEAiCityZXQ9JD8KKworaWYgdGVzdCAtZiAiJGNvZmlsZSI7IHRoZW4KKyAgbXYgIiRjb2ZpbGUiICIkb2ZpbGUiCitlbGlmIHRlc3QgLWYgIiR7Y29maWxlfWJqIjsgdGhlbgorICBtdiAiJHtjb2ZpbGV9YmoiICIkb2ZpbGUiCitmaQorCitybWRpciAiJGxvY2tkaXIiCitleGl0ICRyZXQKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5ndWVzcwppbmRleCA5NTEzODNlLi5kNTNlMzA5IDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5ndWVzcworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5ndWVzcwpAQCAtMSwxMCArMSwxMCBAQAogIyEgL2Jpbi9zaAogIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgogIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKLSMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgICBJbmMuCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMDctMDUtMTcnCit0aW1lc3RhbXA9JzIwMDktMTEtMTknCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI3LDE2ICsyNywxNiBAQAogIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiAKIAotIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIgPHBlckBib3RobmVyLmNvbT4uCi0jIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAotIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBDaGFuZ2VMb2cgZW50cnkuCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4gIFBsZWFzZSBzZW5kIHBhdGNoZXMgKGNvbnRleHQKKyMgZGlmZiBmb3JtYXQpIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPiBhbmQgaW5jbHVkZSBhIENoYW5nZUxvZworIyBlbnRyeS4KICMKICMgVGhpcyBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUgc2ltaWxhciB0bwogIyBjb25maWcuc3ViLiAgSWYgaXQgc3VjY2VlZHMsIGl0IHByaW50cyB0aGUgc3lzdGVtIG5hbWUgb24gc3Rkb3V0LCBhbmQKICMgZXhpdHMgd2l0aCAwLiAgT3RoZXJ3aXNlLCBpdCBleGl0cyB3aXRoIDEuCiAjCi0jIFRoZSBwbGFuIGlzIHRoYXQgdGhpcyBjYW4gYmUgY2FsbGVkIGJ5IGNvbmZpZ3VyZSBzY3JpcHRzIGlmIHlvdQotIyBkb24ndCBzcGVjaWZ5IGFuIGV4cGxpY2l0IGJ1aWxkIHN5c3RlbSB0eXBlLgorIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECiAKIG1lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAogCkBAIC01Niw4ICs1Niw4IEBACiBHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQogCiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCi1Db3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKLUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKQEAgLTE3MCw3ICsxNzAsNyBAQAogCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKIAkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAogCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAotCQkJfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbAorCQkJfCBncmVwIC1xIF9fRUxGX18KIAkJdGhlbgogCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgogCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CkBAIC0zMjQsMTQgKzMyNCwzMCBAQAogCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgogCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CiAJZXNhYyA7OworICAgIHMzOTB4OlN1bk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OwogICAgIHN1bjRIOlN1bk9TOjUuKjoqKQogCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCiAJZXhpdCA7OwogICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCiAJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKIAlleGl0IDs7Ci0gICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpeDg2eGVuOlN1bk9TOjUuKjoqKQotCWVjaG8gaTM4Ni1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorICAgIGk4NnBjOlN1bk9TOjUuKjoqIHwgaTg2eGVuOlN1bk9TOjUuKjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlTVU5fQVJDSD0iaTM4NiIKKwkjIElmIHRoZXJlIGlzIGEgY29tcGlsZXIsIHNlZSBpZiBpdCBpcyBjb25maWd1cmVkIGZvciA2NC1iaXQgb2JqZWN0cy4KKwkjIE5vdGUgdGhhdCB0aGUgU3VuIGNjIGRvZXMgbm90IHR1cm4gX19MUDY0X18gaW50byAxIGxpa2UgZ2NjIGRvZXMuCisJIyBUaGlzIHRlc3Qgd29ya3MgZm9yIGJvdGggY29tcGlsZXJzLgorCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCSAgICBpZiAoZWNobyAnI2lmZGVmIF9fYW1kNjQnOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCVNVTl9BUkNIPSJ4ODZfNjQiCisJICAgIGZpCisJZmkKKwllY2hvICR7U1VOX0FSQ0h9LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCiAJZXhpdCA7OwogICAgIHN1bjQqOlN1bk9TOjYqOiopCiAJIyBBY2NvcmRpbmcgdG8gY29uZmlnLnN1YiwgdGhpcyBpcyB0aGUgcHJvcGVyIHdheSB0byBjYW5vbmljYWxpemUKQEAgLTUzMiw3ICs1NDgsNyBAQAogCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCiAJZmkKIAlleGl0IDs7Ci0gICAgKjpBSVg6KjpbNDVdKQorICAgICo6QUlYOio6WzQ1Nl0pCiAJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCiAJaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAJCUlCTV9BUkNIPXJzNjAwMApAQCAtNjQwLDcgKzY1Niw3IEBACiAJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMwogCiAJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKLQkJZ3JlcCBfX0xQNjRfXyA+L2Rldi9udWxsCisJCWdyZXAgLXEgX19MUDY0X18KIAkgICAgdGhlbgogCQlIUF9BUkNIPSJocHBhMi4wdyIKIAkgICAgZWxzZQpAQCAtNzkxLDE4ICs4MDcsMjQgQEAKICAgICBpKjpQVyo6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgogCWV4aXQgOzsKLSAgICAqOkludGVyaXgqOlszNDU2XSopCisgICAgKjpJbnRlcml4KjoqKQogICAgIAljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KLQkgICAgeDg2KSAKKwkgICAgeDg2KQogCQllY2hvIGk1ODYtcGMtaW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KIAkJZXhpdCA7OwotCSAgICBFTTY0VCB8IGF1dGhlbnRpY2FtZCkKKwkgICAgYXV0aGVudGljYW1kIHwgZ2VudWluZWludGVsIHwgRU02NFQpCiAJCWVjaG8geDg2XzY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KIAkJZXhpdCA7OworCSAgICBJQTY0KQorCQllY2hvIGlhNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CiAJZXNhYyA7OwogICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKIAllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcwogCWV4aXQgOzsKKyAgICA4NjY0OldpbmRvd3NfTlQ6KikKKwllY2hvIHg4Nl82NC1wYy1ta3MKKwlleGl0IDs7CiAgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCiAJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPwogCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCkBAIC04MzIsOCArODU0LDI5IEBACiAgICAgaSo4NjpNaW5peDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CiAJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisgICAgICAgIGVzYWMKKwlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKwlleGl0IDs7CiAgICAgYXJtKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkgICAgfCBncmVwIC1xIF9fQVJNX0VBQklfXworCXRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVlYWJpCisJZmkKIAlleGl0IDs7CiAgICAgYXZyMzIqOkxpbnV4Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKQEAgLTg0Nyw2ICs4OTAsMTcgQEAKICAgICBmcnY6TGludXg6KjoqKQogICAgIAllY2hvIGZydi11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKKwlMSUJDPWdudQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpZmRlZiBfX2RpZXRsaWJjX18KKwlMSUJDPWRpZXRsaWJjCisJI2VuZGlmCitFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAorCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKwlleGl0IDs7CiAgICAgaWE2NDpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwpAQCAtODU2LDc0ICs5MTAsMzMgQEAKICAgICBtNjgqOkxpbnV4Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7Ci0gICAgbWlwczpMaW51eDoqOiopCisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQogCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKIAlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwogCSN1bmRlZiBDUFUKLQkjdW5kZWYgbWlwcwotCSN1bmRlZiBtaXBzZWwKKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKIAkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQotCUNQVT1taXBzZWwKKwlDUFU9JHtVTkFNRV9NQUNISU5FfWVsCiAJI2Vsc2UKIAkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQotCUNQVT1taXBzCisJQ1BVPSR7VU5BTUVfTUFDSElORX0KIAkjZWxzZQogCUNQVT0KIAkjZW5kaWYKIAkjZW5kaWYKIEVPRgotCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKLQkgICAgL15DUFUvewotCQlzOiA6OmcKLQkJcAotCSAgICB9J2AiCi0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KLQk7OwotICAgIG1pcHM2NDpMaW51eDoqOiopCi0JZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCi0JI3VuZGVmIENQVQotCSN1bmRlZiBtaXBzNjQKLQkjdW5kZWYgbWlwczY0ZWwKLQkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQotCUNQVT1taXBzNjRlbAotCSNlbHNlCi0JI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKLQlDUFU9bWlwczY0Ci0JI2Vsc2UKLQlDUFU9Ci0JI2VuZGlmCi0JI2VuZGlmCi1FT0YKLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCi0JICAgIC9eQ1BVL3sKLQkJczogOjpnCi0JCXAKLQkgICAgfSdgIgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKIAl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQogCTs7CiAgICAgb3IzMjpMaW51eDoqOiopCiAJZWNobyBvcjMyLXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIHBwYzpMaW51eDoqOiopCi0JZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CisgICAgcGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7Ci0gICAgcHBjNjQ6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251Ci0JZXhpdCA7OwotICAgIGFscGhhOkxpbnV4Oio6KikKLQljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgotCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKLQkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OwotCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OwotCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OwotCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKLQkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OwotCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7Ci0gICAgICAgIGVzYWMKLQlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIGxkLnNvLjEgPi9kZXYvbnVsbAotCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7CiAgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQogCSMgTG9vayBmb3IgQ1BVIGxldmVsCkBAIC05MzMsOCArOTQ2LDExIEBACiAJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKIAllc2FjCiAJZXhpdCA7OwotICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCi0JZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcHBjOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7CiAgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eApAQCAtOTU0LDcyICs5NzAsOSBAQAogICAgIHg4Nl82NDpMaW51eDoqOiopCiAJZWNobyB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7Ci0gICAgeHRlbnNhOkxpbnV4Oio6KikKLSAgICAJZWNobyB4dGVuc2EtdW5rbm93bi1saW51eC1nbnUKKyAgICB4dGVuc2EqOkxpbnV4Oio6KikKKyAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIGkqODY6TGludXg6KjoqKQotCSMgVGhlIEJGRCBsaW5rZXIga25vd3Mgd2hhdCB0aGUgZGVmYXVsdCBvYmplY3QgZmlsZSBmb3JtYXQgaXMsIHNvCi0JIyBmaXJzdCBzZWUgaWYgaXQgd2lsbCB0ZWxsIHVzLiBjZCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gcHJldmVudAotCSMgcHJvYmxlbXMgd2l0aCBvdGhlciBwcm9ncmFtcyBvciBkaXJlY3RvcmllcyBjYWxsZWQgYGxkJyBpbiB0aGUgcGF0aC4KLQkjIFNldCBMQ19BTEw9QyB0byBlbnN1cmUgbGQgb3V0cHV0cyBtZXNzYWdlcyBpbiBFbmdsaXNoLgotCWxkX3N1cHBvcnRlZF90YXJnZXRzPWBjZCAvOyBMQ19BTEw9QyBsZCAtLWhlbHAgMj4mMSBcCi0JCQkgfCBzZWQgLW5lICcvc3VwcG9ydGVkIHRhcmdldHM6LyFkCi0JCQkJICAgIHMvWyAJXVsgCV0qLyAvZwotCQkJCSAgICBzLy4qc3VwcG9ydGVkIHRhcmdldHM6ICovLwotCQkJCSAgICBzLyAuKi8vCi0JCQkJICAgIHAnYAotICAgICAgICBjYXNlICIkbGRfc3VwcG9ydGVkX3RhcmdldHMiIGluCi0JICBlbGYzMi1pMzg2KQotCQlURU5UQVRJVkU9IiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251IgotCQk7OwotCSAgYS5vdXQtaTM4Ni1saW51eCkKLQkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVhb3V0IgotCQlleGl0IDs7Ci0JICBjb2ZmLWkzODYpCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251Y29mZiIKLQkJZXhpdCA7OwotCSAgIiIpCi0JCSMgRWl0aGVyIGEgcHJlLUJGRCBhLm91dCBsaW5rZXIgKGxpbnV4LWdudW9sZGxkKSBvcgotCQkjIG9uZSB0aGF0IGRvZXMgbm90IGdpdmUgdXMgdXNlZnVsIC0taGVscC4KLQkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVvbGRsZCIKLQkJZXhpdCA7OwotCWVzYWMKLQkjIERldGVybWluZSB3aGV0aGVyIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGlzIGEub3V0IG9yIGVsZgotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwotCSNpbmNsdWRlIDxmZWF0dXJlcy5oPgotCSNpZmRlZiBfX0VMRl9fCi0JIyBpZmRlZiBfX0dMSUJDX18KLQkjICBpZiBfX0dMSUJDX18gPj0gMgotCUxJQkM9Z251Ci0JIyAgZWxzZQotCUxJQkM9Z251bGliYzEKLQkjICBlbmRpZgotCSMgZWxzZQotCUxJQkM9Z251bGliYzEKLQkjIGVuZGlmCi0JI2Vsc2UKLQkjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSB8fCBkZWZpbmVkKF9fUEdJKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0MpIHx8IGRlZmluZWQoX19TVU5QUk9fQ0MpCi0JTElCQz1nbnUKLQkjZWxzZQotCUxJQkM9Z251YW91dAotCSNlbmRpZgotCSNlbmRpZgotCSNpZmRlZiBfX2RpZXRsaWJjX18KLQlMSUJDPWRpZXRsaWJjCi0JI2VuZGlmCi1FT0YKLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCi0JICAgIC9eTElCQy97Ci0JCXM6IDo6ZwotCQlwCi0JICAgIH0nYCIKLQl0ZXN0IHgiJHtMSUJDfSIgIT0geCAmJiB7Ci0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKLQkJZXhpdAotCX0KLQl0ZXN0IHgiJHtURU5UQVRJVkV9IiAhPSB4ICYmIHsgZWNobyAiJHtURU5UQVRJVkV9IjsgZXhpdDsgfQotCTs7CiAgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKIAkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgogCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKQEAgLTEwNDgsNyArMTAwMSw3IEBACiAgICAgaSo4NjpzeWxsYWJsZToqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCiAJZXhpdCA7OwotICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC4wKjoqKQorICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC5bMDJdKjoqKQogCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CiAgICAgaSo4NjoqRE9TOio6KikKQEAgLTEwOTIsOCArMTA0NSwxMSBAQAogICAgIHBjOio6KjoqKQogCSMgTGVmdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5OgogICAgICAgICAjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAotICAgICAgICAjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpMzg2LgotCWVjaG8gaTM4Ni1wYy1tc2Rvc2RqZ3BwCisgICAgICAgICMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYuCisJIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgorCSMgcHJpbnRzIGZvciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBjb25maWd1cnkgd2lsbCBkZWNpZGUgdGhhdAorCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgorCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCiAgICAgICAgIGV4aXQgOzsKICAgICBJbnRlbDpNYWNoOjMqOiopCiAJZWNobyBpMzg2LXBjLW1hY2gzCkBAIC0xMTMxLDYgKzEwODcsMTYgQEAKICAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKICAgICAgICAgL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCiAgICAgICAgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7CisgICAgTkNSKjoqOjQuMjoqIHwgTVBSQVMqOio6NC4yOiopCisJT1NfUkVMPScuMycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkgICAgJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIHB0ZXJvbiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKICAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKIAllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwpAQCAtMTE0Myw3ICsxMTA5LDcgQEAKICAgICByczYwMDA6THlueE9TOjIuKjoqKQogCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKLSAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuMCo6KikKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKIAllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwogICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCkBAIC0xMjA2LDYgKzExNzIsOSBAQAogICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCiAJZWNobyBpNTg2LXBjLWJlb3MKIAlleGl0IDs7CisgICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1oYWlrdQorCWV4aXQgOzsKICAgICBTWC00OlNVUEVSLVVYOio6KikKIAllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CkBAIC0xMjMzLDYgKzEyMDIsMTYgQEAKICAgICAqOkRhcndpbjoqOiopCiAJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KIAljYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkgICAgaTM4NikKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkJICBpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgICAgZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkJICB0aGVuCisJCSAgICAgIFVOQU1FX1BST0NFU1NPUj0ieDg2XzY0IgorCQkgIGZpCisJCWZpIDs7CiAJICAgIHVua25vd24pIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjIDs7CiAJZXNhYwogCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KQEAgLTEzMTQsNiArMTI5Myw5IEBACiAgICAgaSo4NjpyZG9zOio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcwogCWV4aXQgOzsKKyAgICBpKjg2OkFST1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1hcm9zCisJZXhpdCA7OwogZXNhYwogCiAjZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKQEAgLTE0NzQsOSArMTQ1Niw5IEBACiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91CiBkb3dubG9hZCB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24gb2YgdGhlIGNvbmZpZyBzY3JpcHRzIGZyb20KIAotICBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9jZ2ktYmluL3ZpZXdjdnMvKmNoZWNrb3V0Ki9jb25maWcvY29uZmlnL2NvbmZpZy5ndWVzcworICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKIGFuZAotICBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9jZ2ktYmluL3ZpZXdjdnMvKmNoZWNrb3V0Ki9jb25maWcvY29uZmlnL2NvbmZpZy5zdWIKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAogCiBJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKIHNlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5zdWIgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5zdWIKaW5kZXggYzA2MGY0NC4uMTdjOTE0NSAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuc3ViCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLnN1YgpAQCAtMSwxMCArMSwxMCBAQAogIyEgL2Jpbi9zaAogIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCiAjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAotIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotIyAgIEluYy4KKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLXRpbWVzdGFtcD0nMjAwNy0wNC0yOScKK3RpbWVzdGFtcD0nMjAwOS0xMS0wNycKIAogIyBUaGlzIGZpbGUgaXMgKGluIHByaW5jaXBsZSkgY29tbW9uIHRvIEFMTCBHTlUgc29mdHdhcmUuCiAjIFRoZSBwcmVzZW5jZSBvZiBhIG1hY2hpbmUgaW4gdGhpcyBmaWxlIHN1Z2dlc3RzIHRoYXQgU09NRSBHTlUgc29mdHdhcmUKQEAgLTMyLDEzICszMiwxNiBAQAogCiAKICMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0Ci0jIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KKyMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgR05VIENoYW5nZUxvZyBlbnRyeS4KICMKICMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCiAjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KICMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCiAjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCiAKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKwogIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKICMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCiAjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCkBAIC03Miw4ICs3NSw4IEBACiB2ZXJzaW9uPSJcCiBHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKIAotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1Ci1GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKzIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCkBAIC0xMjIsNiArMTI1LDcgQEAKIGNhc2UgJG1heWJlX29zIGluCiAgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IGxpbnV4LXVjbGliYyogfCBcCiAgIHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKyAga29wZW5zb2xhcmlzKi1nbnUqIHwgXAogICBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCiAgICAgb3M9LSRtYXliZV9vcwogICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCkBAIC0xNDgsMTAgKzE1MiwxMyBAQAogCS1jb252ZXJnZW50KiB8IC1uY3IqIHwgLW5ld3MgfCAtMzIqIHwgLTM2MDAqIHwgLTMxMDAqIHwgLWhpdGFjaGkqIHxcCiAJLWNbMTIzXSogfCAtY29udmV4KiB8IC1zdW4gfCAtY3JkcyB8IC1vbXJvbiogfCAtZGcgfCAtdWx0cmEgfCAtdHRpKiB8IFwKIAktaGFycmlzIHwgLWRvbHBoaW4gfCAtaGlnaGxldmVsIHwgLWdvdWxkIHwgLWNibSB8IC1ucyB8IC1tYXNzY29tcCB8IFwKLQktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5KQorCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkgfCAtbWljcm9ibGF6ZSkKIAkJb3M9CiAJCWJhc2ljX21hY2hpbmU9JDEKIAkJOzsKKyAgICAgICAgLWJsdWVnZW5lKikKKwkgICAgICAgIG9zPS1jbmsKKwkJOzsKIAktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKIAkJb3M9CiAJCWJhc2ljX21hY2hpbmU9JDEKQEAgLTI0OSwxMyArMjU2LDE2IEBACiAJfCBoODMwMCB8IGg4NTAwIHwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAogCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCiAJfCBpcDJrIHwgaXEyMDAwIFwKKwl8IGxtMzIgXAogCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayBcCi0JfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWNvcmUgfCBtZXAgXAorCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAogCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCiAJfCBtaXBzMTYgXAogCXwgbWlwczY0IHwgbWlwczY0ZWwgXAotCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKIAl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKIAl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKIAl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKIAl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKQEAgLTI2OCw2ICsyNzgsNyBAQAogCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKIAl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCiAJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtb3hpZSBcCiAJfCBtdCBcCiAJfCBtc3A0MzAgXAogCXwgbmlvcyB8IG5pb3MyIFwKQEAgLTI3NiwyMCArMjg3LDIyIEBACiAJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAogCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIHwgcHBjYmUgXAogCXwgcHlyYW1pZCBcCisJfCByeCBcCiAJfCBzY29yZSBcCi0JfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKIAl8IHNoNjQgfCBzaDY0bGUgXAogCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAogCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKIAl8IHNwdSB8IHN0cm9uZ2FybSBcCiAJfCB0YWhvZSB8IHRodW1iIHwgdGljNHggfCB0aWM4MCB8IHRyb24gXAorCXwgdWJpY29tMzIgXAogCXwgdjg1MCB8IHY4NTBlIFwKIAl8IHdlMzJrIFwKIAl8IHg4NiB8IHhjMTZ4IHwgeHNjYWxlIHwgeHNjYWxlZVtibF0gfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAotCXwgejhrKQorCXwgejhrIHwgejgwKQogCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJOzsKLQltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIpCisJbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgcGljb2NoaXApCiAJCSMgTW90b3JvbGEgNjhIQzExLzEyLgogCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJb3M9LW5vbmUKQEAgLTMyOSwxNCArMzQyLDE3IEBACiAJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAogCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKIAl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IGxtMzItKiBcCiAJfCBtMzJjLSogfCBtMzJyLSogfCBtMzJybGUtKiBcCiAJfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAotCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogfCBtaWNyb2JsYXplLSogXAogCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAogCXwgbWlwczE2LSogXAogCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKLQl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAorCXwgbWlwczY0b2N0ZW9uLSogfCBtaXBzNjRvY3Rlb25lbC0qIFwKIAl8IG1pcHM2NG9yaW9uLSogfCBtaXBzNjRvcmlvbmVsLSogXAorCXwgbWlwczY0cjU5MDAtKiB8IG1pcHM2NHI1OTAwZWwtKiBcCisJfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKIAl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCiAJfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAogCXwgbWlwczY0dnI1MDAwLSogfCBtaXBzNjR2cjUwMDBlbC0qIFwKQEAgLTM1NywyMSArMzczLDI2IEBACiAJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKIAl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIHwgcHBjYmUtKiBcCiAJfCBweXJhbWlkLSogXAotCXwgcm9tcC0qIHwgcnM2MDAwLSogXAotCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHJvbXAtKiB8IHJzNjAwMC0qIHwgcngtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzI0XWFlYi0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCiAJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKIAl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM2NHYtKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKIAl8IHNwYXJjbGl0ZS0qIFwKIAl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3Ryb25nYXJtLSogfCBzdjEtKiB8IHN4Py0qIFwKIAl8IHRhaG9lLSogfCB0aHVtYi0qIFwKLQl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIFwKKwl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIHwgdGlsZS0qIFwKIAl8IHRyb24tKiBcCisJfCB1Ymljb20zMi0qIFwKIAl8IHY4NTAtKiB8IHY4NTBlLSogfCB2YXgtKiBcCiAJfCB3ZTMyay0qIFwKIAl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4YzE2eC0qIHwgeHBzMTAwLSogfCB4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSogXAotCXwgeHN0b3JteTE2LSogfCB4dGVuc2EtKiBcCisJfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYSotKiBcCiAJfCB5bXAtKiBcCi0JfCB6OGstKikKKwl8IHo4ay0qIHwgejgwLSopCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgorCXh0ZW5zYSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgogCQk7OwogCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKIAkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgpAQCAtNDM1LDYgKzQ1NiwxMCBAQAogCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCiAJCW9zPS1ic2QKIAkJOzsKKwlhcm9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWFyb3MKKwkJOzsKIAlhdXgpCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQogCQlvcz0tYXV4CkBAIC00NDMsMTAgKzQ2OCwyNiBAQAogCQliYXNpY19tYWNoaW5lPW5zMzJrLXNlcXVlbnQKIAkJb3M9LWR5bml4CiAJCTs7CisJYmxhY2tmaW4pCisJCWJhc2ljX21hY2hpbmU9YmZpbi11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCWJsYWNrZmluLSopCisJCWJhc2ljX21hY2hpbmU9YmZpbi1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlibHVlZ2VuZSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LWNuaworCQk7OwogCWM5MCkKIAkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQogCQlvcz0tdW5pY29zCiAJCTs7CisgICAgICAgIGNlZ2NjKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1jZWdjYworCQk7OwogCWNvbnZleC1jMSkKIAkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKIAkJb3M9LWJzZApAQCAtNDc1LDggKzUxNiw4IEBACiAJCWJhc2ljX21hY2hpbmU9Y3JheW52LWNyYXkKIAkJb3M9LXVuaWNvc21wCiAJCTs7Ci0JY3IxNmMpCi0JCWJhc2ljX21hY2hpbmU9Y3IxNmMtdW5rbm93bgorCWNyMTYpCisJCWJhc2ljX21hY2hpbmU9Y3IxNi11bmtub3duCiAJCW9zPS1lbGYKIAkJOzsKIAljcmRzIHwgdW5vcykKQEAgLTUxNCw2ICs1NTUsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCiAJCW9zPS1zeXN2MwogCQk7OworCWRpY29zKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LWRpY29zCisJCTs7CiAJZGpncHApCiAJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYwogCQlvcz0tbXNkb3NkamdwcApAQCAtNjY4LDYgKzcxMywxNCBAQAogCQliYXNpY19tYWNoaW5lPW02OGstaXNpCiAJCW9zPS1zeXN2CiAJCTs7CisJbTY4a25vbW11KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwltNjhrbm9tbXUtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OwogCW04OGstb21yb24qKQogCQliYXNpY19tYWNoaW5lPW04OGstb21yb24KIAkJOzsKQEAgLTY3OSw2ICs3MzIsOSBAQAogCQliYXNpY19tYWNoaW5lPW5zMzJrLXV0ZWsKIAkJb3M9LXN5c3YKIAkJOzsKKyAgICAgICAgbWljcm9ibGF6ZSkKKwkJYmFzaWNfbWFjaGluZT1taWNyb2JsYXplLXhpbGlueAorCQk7OwogCW1pbmd3MzIpCiAJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwogCQlvcz0tbWluZ3czMgpAQCAtODEzLDYgKzg2OSwxNCBAQAogCQliYXNpY19tYWNoaW5lPWk4NjAtaW50ZWwKIAkJb3M9LW9zZgogCQk7OworCXBhcmlzYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJcGFyaXNjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKIAlwYmQpCiAJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCiAJCTs7CkBAIC0xMDIxLDYgKzEwODUsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCiAJCW9zPS1jb2ZmCiAJCTs7CisJdGlsZSopCisJCWJhc2ljX21hY2hpbmU9dGlsZS11bmtub3duCisJCW9zPS1saW51eC1nbnUKKwkJOzsKIAl0eDM5KQogCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5LXVua25vd24KIAkJOzsKQEAgLTEwOTYsNiArMTE2NCwxMCBAQAogCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCiAJCW9zPS1zaW0KIAkJOzsKKwl6ODAtKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4MC11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKIAlub25lKQogCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQogCQlvcz0tbm9uZQpAQCAtMTEzNCw3ICsxMjA2LDcgQEAKIAl3ZTMyaykKIAkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKIAkJOzsKLQlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQogCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KIAkJOzsKIAlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5dikKQEAgLTEyMDQsMTAgKzEyNzYsMTEgQEAKIAkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgogCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KIAktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCi0JICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1jbmsqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCiAJICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1zb2xhcmlzKiB8IC1zeW0qIFwKKwkgICAgICB8IC1rb3BlbnNvbGFyaXMqIFwKIAkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKLQkgICAgICB8IC1hb3MqIFwKKwkgICAgICB8IC1hb3MqIHwgLWFyb3MqIFwKIAkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAogCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAogCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAta25ldGJzZCogfCAtbWlyYnNkKiB8IC1uZXRic2QqIFwKQEAgLTEyMTYsNyArMTI4OSw3IEBACiAJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAogCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKIAkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKLQkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiBcCisJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogfCAtY2VnY2MqIFwKIAkgICAgICB8IC1jeWd3aW4qIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCiAJICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAogCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKQEAgLTEyMjYsNyArMTI5OSw3IEBACiAJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAogCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAogCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCi0JICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyopCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqKQogCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KIAkJOzsKIAktcW54KikKQEAgLTEzNTYsNiArMTQyOSw5IEBACiAJLXp2bW9lKQogCQlvcz0tenZtb2UKIAkJOzsKKwktZGljb3MqKQorCQlvcz0tZGljb3MKKwkJOzsKIAktbm9uZSkKIAkJOzsKIAkqKQpAQCAtMTU1Myw3ICsxNjI5LDcgQEAKIAkJCS1zdW5vcyopCiAJCQkJdmVuZG9yPXN1bgogCQkJCTs7Ci0JCQktYWl4KikKKwkJCS1jbmsqfC1haXgqKQogCQkJCXZlbmRvcj1pYm0KIAkJCQk7OwogCQkJLWJlb3MqKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZQppbmRleCA2OTg0ZmM2Li5jNWM3MGIxIDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZQpAQCAtMSw2MiArMSw4NSBAQAogIyEgL2Jpbi9zaAogIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgotIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEgZm9yIGxpYmZmaSAzLjAuNS4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1IGZvciBsaWJmZmkgMy4wLjEwcmMwLgogIwogIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbD4uCiAjCisjCiAjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKLSMgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMKKyMKICMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiAjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKIERVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgZW11bGF0ZSBzaAogICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCiAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBlbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgotICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OwogZXNhYwotCiBmaQogCiAKLQotCi0jIFBBVEggbmVlZHMgQ1IKLSMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KLWFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwotYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCi1hc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKLWFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKLWFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQogCiAjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KIGlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQotCi0jIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KLWlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc191bnNldD11bnNldAotZWxzZQotICBhc191bnNldD1mYWxzZQorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KIGZpCiAKIApAQCAtNjUsMjAgKzg4LDE4IEBACiAjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KICMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAogIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQotYXNfbmw9JwotJwogSUZTPSIgIiIJJGFzX25sIgogCiAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgotY2FzZSAkMCBpbgorY2FzZSAkMCBpbiAjKCgKICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwogICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCi1kb25lCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiAgICAgIDs7CkBAIC04OSwzMiArMTEwLDI3MSBAQAogICBhc19teXNlbGY9JDAKIGZpCiBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gIGVjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKLSAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQogZmkKIAotIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCi1mb3IgYXNfdmFyIGluIEVOViBNQUlMIE1BSUxQQVRICi1kbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgogZG9uZQogUFMxPSckICcKIFBTMj0nPiAnCiBQUzQ9JysgJwogCiAjIE5MUyBudWlzYW5jZXMuCi1mb3IgYXNfdmFyIGluIFwKLSAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKLSAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKLSAgTENfVEVMRVBIT05FIExDX1RJTUUKLWRvCi0gIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCi0gICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCi0gIGVsc2UKLSAgICAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgotICBmaQotZG9uZQorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQogCi0jIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCisgIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorIgorICBhc19yZXF1aXJlZD0iYXNfZm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQorYXNfZm5fc3VjY2VzcyAoKSB7IGFzX2ZuX3JldHVybiAwOyB9Cithc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0KK2FzX2ZuX3JldF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0KK2FzX2ZuX3JldF9mYWlsdXJlICgpIHsgcmV0dXJuIDE7IH0KKworZXhpdGNvZGU9MAorYXNfZm5fc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2FzX2ZuX3JldF9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9yZXRfZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQoraWYgKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4gOgorCitlbHNlCisgIGV4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorZmkKK3Rlc3QgeFwkZXhpdGNvZGUgPSB4MCB8fCBleGl0IDEiCisgIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElORU5PCisgIGFzX2xpbmVub18yPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMmE9XCRMSU5FTk8KKyAgZXZhbCAndGVzdCBcInhcJGFzX2xpbmVub18xJ1wkYXNfcnVuJ1wiICE9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCIgJiYKKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQordGVzdCBcJCgoIDEgKyAxICkpID0gMiB8fCBleGl0IDEiCisgIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KK2ZpCisgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKworZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19mb3VuZD1mYWxzZQorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBhc19mb3VuZD06CisgIGNhc2UgJGFzX2RpciBpbiAjKAorCSAvKikKKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcworCQkgICBpZiB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19zdWdnZXN0ZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBicmVhayAyCitmaQorZmkKKwkgICBkb25lOzsKKyAgICAgICBlc2FjCisgIGFzX2ZvdW5kPWZhbHNlCitkb25lCiskYXNfZm91bmQgfHwgeyBpZiB7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0gJiYKKwkgICAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJFNIRUxMIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2ZpOyB9CitJRlM9JGFzX3NhdmVfSUZTCisKKworICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4gOgorICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQorCSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCisJIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKwlCQVNIX0VOVj0vZGV2L251bGwKKwlFTlY9L2Rldi9udWxsCisJKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCisJZXhwb3J0IENPTkZJR19TSEVMTAorCWV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KK2ZpCisKKyAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6CisgICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKKyAgJGFzX2VjaG8gIiQwOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iCisgIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCisgICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCisgICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgorICBlbHNlCisgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhbmQKKyQwOiBodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sIGFib3V0IHlvdXIgc3lzdGVtLAorJDA6IGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCiskMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KKyQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKKyMgYXNfZm5fZXJyb3IgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorIyBzY3JpcHQgd2l0aCBzdGF0dXMgJD8sIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KK2FzX2ZuX2Vycm9yICgpCit7CisgIGFzX3N0YXR1cz0kPzsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQzIjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDIifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDEiID4mJDMKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQxIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKwogaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKICAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCiAgIGFzX2V4cHI9ZXhwcgpAQCAtMTI4LDEzICszODgsMTcgQEAKICAgYXNfYmFzZW5hbWU9ZmFsc2UKIGZpCiAKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKIAotIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgogYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiAkYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAogCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAogCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLWVjaG8gWC8iJDAiIHwKKyRhc19lY2hvIFgvIiQwIiB8CiAgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CiAJICAgIHMvL1wxLwogCSAgICBxCkBAIC0xNDksMjk0ICs0MTMsMTkgQEAKIAkgIH0KIAkgIHMvLiovLi87IHEnYAogCi0jIENEUEFUSC4KLSRhc191bnNldCBDRFBBVEgKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cwogCiAKLWlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KLSAgaWYgKGV2YWwgIjoiKSAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19oYXZlX3JlcXVpcmVkPXllcwotZWxzZQotICBhc19oYXZlX3JlcXVpcmVkPW5vCi1maQotCi0gIGlmIHRlc3QgJGFzX2hhdmVfcmVxdWlyZWQgPSB5ZXMgJiYgCSAoZXZhbCAiOgotKGFzX2Z1bmNfcmV0dXJuICgpIHsKLSAgKGV4aXQgXCQxKQotfQotYXNfZnVuY19zdWNjZXNzICgpIHsKLSAgYXNfZnVuY19yZXR1cm4gMAotfQotYXNfZnVuY19mYWlsdXJlICgpIHsKLSAgYXNfZnVuY19yZXR1cm4gMQotfQotYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7Ci0gIHJldHVybiAwCi19Ci1hc19mdW5jX3JldF9mYWlsdXJlICgpIHsKLSAgcmV0dXJuIDEKLX0KLQotZXhpdGNvZGU9MAotaWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCi1maQotCi1pZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCi1maQotCi1pZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgotZmkKLQotaWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgotICBleGl0Y29kZT0xCi0gIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCi1maQotCi1pZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KLWZpCi0KLXRlc3QgXCRleGl0Y29kZSA9IDApIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotCi0oCi0gIGFzX2xpbmVub18xPVwkTElORU5PCi0gIGFzX2xpbmVub18yPVwkTElORU5PCi0gIHRlc3QgXCJ4XCRhc19saW5lbm9fMVwiICE9IFwieFwkYXNfbGluZW5vXzJcIiAmJgotICB0ZXN0IFwieFxgZXhwciBcJGFzX2xpbmVub18xICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yXCIpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotIikgMj4gL2Rldi9udWxsOyB0aGVuCi0gIDoKLWVsc2UKLSAgYXNfY2FuZGlkYXRlX3NoZWxscz0KLSAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGNhc2UgJGFzX2RpciBpbgotCSAvKikKLQkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCi0JICAgICBhc19jYW5kaWRhdGVfc2hlbGxzPSIkYXNfY2FuZGlkYXRlX3NoZWxscyAkYXNfZGlyLyRhc19iYXNlIgotCSAgIGRvbmU7OwotICAgICAgIGVzYWMKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotCi0gICAgICBmb3IgYXNfc2hlbGwgaW4gJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJFNIRUxMOyBkbwotCSAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCi0JIGlmIHsgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgotCQl7ICgiJGFzX3NoZWxsIikgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGVtdWxhdGUgc2gKLSAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKLSAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KLSAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCi0gIHNldG9wdCBOT19HTE9CX1NVQlNUCi1lbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgotICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKLWVzYWMKLQotZmkKLQotCi06Ci1fQVNFT0YKLX07IHRoZW4KLSAgQ09ORklHX1NIRUxMPSRhc19zaGVsbAotCSAgICAgICBhc19oYXZlX3JlcXVpcmVkPXllcwotCSAgICAgICBpZiB7ICIkYXNfc2hlbGwiIDI+IC9kZXYvbnVsbCA8PFxfQVNFT0YKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCi0gICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCi0gIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwotICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotZWxzZQotICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KLSAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7Ci1lc2FjCi0KLWZpCi0KLQotOgotKGFzX2Z1bmNfcmV0dXJuICgpIHsKLSAgKGV4aXQgJDEpCi19Ci1hc19mdW5jX3N1Y2Nlc3MgKCkgewotICBhc19mdW5jX3JldHVybiAwCi19Ci1hc19mdW5jX2ZhaWx1cmUgKCkgewotICBhc19mdW5jX3JldHVybiAxCi19Ci1hc19mdW5jX3JldF9zdWNjZXNzICgpIHsKLSAgcmV0dXJuIDAKLX0KLWFzX2Z1bmNfcmV0X2ZhaWx1cmUgKCkgewotICByZXR1cm4gMQotfQotCi1leGl0Y29kZT0wCi1pZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KLSAgOgotZWxzZQotICBleGl0Y29kZT0xCi0gIGVjaG8gYXNfZnVuY19zdWNjZXNzIGZhaWxlZC4KLWZpCi0KLWlmIGFzX2Z1bmNfZmFpbHVyZTsgdGhlbgotICBleGl0Y29kZT0xCi0gIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KLWZpCi0KLWlmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KLSAgOgotZWxzZQotICBleGl0Y29kZT0xCi0gIGVjaG8gYXNfZnVuY19yZXRfc3VjY2VzcyBmYWlsZWQuCi1maQotCi1pZiBhc19mdW5jX3JldF9mYWlsdXJlOyB0aGVuCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KLWZpCi0KLWlmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSAiJDEiICk7IHRoZW4KLSAgOgotZWxzZQotICBleGl0Y29kZT0xCi0gIGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgotZmkKLQotdGVzdCAkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KLQotKAotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCi0gIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotCi1fQVNFT0YKLX07IHRoZW4KLSAgYnJlYWsKLWZpCi0KLWZpCi0KLSAgICAgIGRvbmUKLQotICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KLSAgZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYKLSAgICAgICAgZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKLSAgICAgICAgZG9uZQotICAgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0gICAgICAgIGV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KLWZpCi0KLQotICAgIGlmIHRlc3QgJGFzX2hhdmVfcmVxdWlyZWQgPSBubzsgdGhlbgotICBlY2hvIFRoaXMgc2NyaXB0IHJlcXVpcmVzIGEgc2hlbGwgbW9yZSBtb2Rlcm4gdGhhbiBhbGwgdGhlCi0gICAgICBlY2hvIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uICBQbGVhc2UgaW5zdGFsbCBhCi0gICAgICBlY2hvIG1vZGVybiBzaGVsbCwgb3IgbWFudWFsbHkgcnVuIHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhCi0gICAgICBlY2hvIHNoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS4KLSAgICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotZmkKLQotCi1maQotCi1maQotCi0KLQotKGV2YWwgImFzX2Z1bmNfcmV0dXJuICgpIHsKLSAgKGV4aXQgXCQxKQotfQotYXNfZnVuY19zdWNjZXNzICgpIHsKLSAgYXNfZnVuY19yZXR1cm4gMAotfQotYXNfZnVuY19mYWlsdXJlICgpIHsKLSAgYXNfZnVuY19yZXR1cm4gMQotfQotYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7Ci0gIHJldHVybiAwCi19Ci1hc19mdW5jX3JldF9mYWlsdXJlICgpIHsKLSAgcmV0dXJuIDEKLX0KLQotZXhpdGNvZGU9MAotaWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCi1maQotCi1pZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCi1maQotCi1pZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgotZmkKLQotaWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgotICBleGl0Y29kZT0xCi0gIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCi1maQotCi1pZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KLWZpCi0KLXRlc3QgXCRleGl0Y29kZSA9IDAiKSB8fCB7Ci0gIGVjaG8gTm8gc2hlbGwgZm91bmQgdGhhdCBzdXBwb3J0cyBzaGVsbCBmdW5jdGlvbnMuCi0gIGVjaG8gUGxlYXNlIHRlbGwgYXV0b2NvbmZAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwKLSAgZWNobyBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcwotICBlY2hvIG1lc3NhZ2UKLX0KLQotCi0KLSAgYXNfbGluZW5vXzE9JExJTkVOTwotICBhc19saW5lbm9fMj0kTElORU5PCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiIHx8IHsKLQotICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCi0gICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKLSAgIyBsaW5lLW51bWJlciBsaW5lIGFmdGVyIGVhY2ggbGluZSB1c2luZyAkTElORU5POyB0aGUgc2Vjb25kICdzZWQnCi0gICMgZG9lcyB0aGUgcmVhbCB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoCi0gICMgbGluZS1udW1iZXIgbGluZSB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcgJExJTkVOTywgYW5kIGFwcGVuZHMKLSAgIyB0cmFpbGluZyAnLScgZHVyaW5nIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbAotICAjIGNhc2UgYXQgbGluZSBlbmQuCi0gICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQotICAjIHNjcmlwdHMgd2l0aCBvcHRpbWl6YXRpb24gaGVscCBmcm9tIFBhb2xvIEJvbnppbmkuICBCbGFtZSBMZWUKLSAgIyBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgYXNfbGluZW5vXzE9JExJTkVOTyBhc19saW5lbm9fMWE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PIGFzX2xpbmVub18yYT0kTElORU5PCisgIGV2YWwgJ3Rlc3QgIngkYXNfbGluZW5vXzEnJGFzX3J1biciICE9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIiAmJgorICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xJyRhc19ydW4nICsgMWAiID0gIngkYXNfbGluZW5vXzInJGFzX3J1biciJyB8fCB7CisgICMgQmxhbWUgTGVlIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQogICBzZWQgLW4gJwogICAgIHAKICAgICAvWyRdTElORU5PLz0KQEAgLTQ1Myw4ICs0NDIsNyBAQAogICAgICAgcy8tXG4uKi8vCiAgICAgJyA+JGFzX21lLmxpbmVubyAmJgogICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7IGFzX2ZuX2V4aXQgMTsgfQogCiAgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCiAgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQpAQCAtNDY0LDQ5ICs0NTIsNDAgQEAKICAgZXhpdAogfQogCi0KLWlmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19kaXJuYW1lPWRpcm5hbWUKLWVsc2UKLSAgYXNfZGlybmFtZT1mYWxzZQotZmkKLQogRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KLWNhc2UgYGVjaG8gLW4geGAgaW4KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCiAtbiopCi0gIGNhc2UgYGVjaG8gJ3hcYydgIGluCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgogICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KLSAgKikgICBFQ0hPX0M9J1xjJzs7CisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CiAgIGVzYWM7OwogKikKICAgRUNIT19OPSctbic7OwogZXNhYwogCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgotICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCiBpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KICAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQogZWxzZQogICBybSAtZiBjb25mJCQuZGlyCi0gIG1rZGlyIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAogZmkKLWVjaG8gPmNvbmYkJC5maWxlCi1pZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbG5fcz0nbG4gLXMnCi0gICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6Ci0gICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCi0gICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgotICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgotICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQogICAgIGFzX2xuX3M9J2NwIC1wJwotZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbG5fcz1sbgorICBmaQogZWxzZQogICBhc19sbl9zPSdjcCAtcCcKIGZpCkBAIC01MTQsNyArNDkzLDcgQEAKIHJtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKIAogaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19ta2Rpcl9wPToKKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJwogZWxzZQogICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAogICBhc19ta2Rpcl9wPWZhbHNlCkBAIC01MzEsMTIgKzUxMCwxMiBAQAogICBhc190ZXN0X3g9JwogICAgIGV2YWwgc2ggLWMgJ1wnJwogICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCi0gICAgICAgIHRlc3QgLWQgIiQxLy4iOworCXRlc3QgLWQgIiQxLy4iOwogICAgICAgZWxzZQotCWNhc2UgJDEgaW4KLSAgICAgICAgLSopc2V0ICIuLyQxIjs7CisJY2FzZSAkMSBpbiAjKAorCS0qKXNldCAiLi8kMSI7OwogCWVzYWM7Ci0JY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbiAjKCgKIAk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCiAgICAgJ1wnJyBzaAogICAnCkBAIC01NTEsMjYgKzUzMCwyNSBAQAogCiAKIAotCiAjIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCiBTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQogCi1jYXNlIFgkRUNITyBpbgorY2FzZSBYJGx0X0VDSE8gaW4KIFgqLS1mYWxsYmFjay1lY2hvKQogICAjIFJlbW92ZSBvbmUgbGV2ZWwgb2YgcXVvdGF0aW9uICh3aGljaCB3YXMgcmVxdWlyZWQgZm9yIE1ha2UpLgotICBFQ0hPPWBlY2hvICIkRUNITyIgfCBzZWQgJ3MsXFxcXFwkXFwkMCwnJDAnLCdgCisgIEVDSE89YGVjaG8gIiRsdF9FQ0hPIiB8IHNlZCAncyxcXFxcXCRcXCQwLCckMCcsJ2AKICAgOzsKIGVzYWMKIAotZWNobz0ke0VDSE8tZWNob30KK0VDSE89JHtsdF9FQ0hPLWVjaG99CiBpZiB0ZXN0ICJYJDEiID0gWC0tbm8tcmVleGVjOyB0aGVuCiAgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgogICBzaGlmdAogZWxpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgogICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCiAgIDoKLWVsaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnIDsgdGhlbgotICAjIFlpcHBlZSwgJGVjaG8gd29ya3MhCitlbGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyA7IHRoZW4KKyAgIyBZaXBwZWUsICRFQ0hPIHdvcmtzIQogICA6CiBlbHNlCiAgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KQEAgLTU4MCw5ICs1NTgsOSBAQAogaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KICAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KICAgc2hpZnQKLSAgY2F0IDw8RU9GCisgIGNhdCA8PF9MVF9FT0YKICQqCi1FT0YKK19MVF9FT0YKICAgZXhpdCAwCiBmaQogCkBAIC01OTAsMTIyICs1NjgsMTE4IEBACiAjIGlmIENEUEFUSCBpcyBzZXQuCiAodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICiAKLWlmIHRlc3QgLXogIiRFQ0hPIjsgdGhlbgotaWYgdGVzdCAiWCR7ZWNob190ZXN0X3N0cmluZytzZXR9IiAhPSBYc2V0OyB0aGVuCi0jIGZpbmQgYSBzdHJpbmcgYXMgbGFyZ2UgYXMgcG9zc2libGUsIGFzIGxvbmcgYXMgdGhlIHNoZWxsIGNhbiBjb3BlIHdpdGggaXQKLSAgZm9yIGNtZCBpbiAnc2VkIDUwcSAiJDAiJyAnc2VkIDIwcSAiJDAiJyAnc2VkIDEwcSAiJDAiJyAnc2VkIDJxICIkMCInICdlY2hvIHRlc3QnOyBkbwotICAgICMgZXhwZWN0ZWQgc2l6ZXM6IGxlc3MgdGhhbiAyS2IsIDFLYiwgNTEyIGJ5dGVzLCAxNiBieXRlcywgLi4uCi0gICAgaWYgKGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGApIDI+L2Rldi9udWxsICYmCi0gICAgICAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYCAmJgotICAgICAgICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsCi0gICAgdGhlbgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi1maQoraWYgdGVzdCAteiAiJGx0X0VDSE8iOyB0aGVuCisgIGlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgICMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAorICAgIGZvciBjbWQgaW4gJ3NlZCA1MHEgIiQwIicgJ3NlZCAyMHEgIiQwIicgJ3NlZCAxMHEgIiQwIicgJ3NlZCAycSAiJDAiJyAnZWNobyB0ZXN0JzsgZG8KKyAgICAgICMgZXhwZWN0ZWQgc2l6ZXM6IGxlc3MgdGhhbiAyS2IsIDFLYiwgNTEyIGJ5dGVzLCAxNiBieXRlcywgLi4uCisgICAgICBpZiB7IGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGA7IH0gMj4vZGV2L251bGwgJiYKKwkgeyB0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGwKKyAgICAgIHRoZW4KKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICBmaQogCi1pZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICA6Ci1lbHNlCi0gICMgVGhlIFNvbGFyaXMsIEFJWCwgYW5kIERpZ2l0YWwgVW5peCBkZWZhdWx0IGVjaG8gcHJvZ3JhbXMgdW5xdW90ZQotICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCi0gICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCi0gICMKLSAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgorICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyAkRUNITyAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICA6CisgIGVsc2UKKyAgICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKKyAgICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCisgICAgIyAgIGVjaG8gIiRzb21ldGhpbmciIHwgc2VkICdzL1xcL1xcXFwvZycKKyAgICAjCisgICAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgogCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBkaXIgaW4gJFBBVEggL3Vzci91Y2I7IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCisgICAgICAgICB0ZXN0ICJYYCgkZGlyL2VjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICAgIEVDSE89IiRkaXIvZWNobyIKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQogICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCi0gICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0gICAgICBlY2hvPSIkZGlyL2VjaG8iCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCiAKLSAgaWYgdGVzdCAiWCRlY2hvIiA9IFhlY2hvOyB0aGVuCi0gICAgIyBXZSBkaWRuJ3QgZmluZCBhIGJldHRlciBlY2hvLCBzbyBsb29rIGZvciBhbHRlcm5hdGl2ZXMuCi0gICAgaWYgdGVzdCAiWGAocHJpbnQgLXIgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KLSAgICAgIGVjaG89J3ByaW50IC1yJwotICAgIGVsaWYgKHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQpICYmCi0JIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KLSAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgotICAgICAgT1JJR0lOQUxfQ09ORklHX1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0gICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0gICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKLSAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKLSAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiJDAiIC0tbm8tcmVleGVjICR7MSsiJEAifQotICAgIGVsc2UKLSAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KLSAgICAgIGVjaG89J3ByaW50ZiAlc1xuJwotICAgICAgaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0JIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JIyBDb29sLCBwcmludGYgd29ya3MKLQk6Ci0gICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgotCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCUNPTkZJR19TSEVMTD0kT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0JZXhwb3J0IENPTkZJR19TSEVMTAotCVNIRUxMPSIkQ09ORklHX1NIRUxMIgotCWV4cG9ydCBTSEVMTAotCWVjaG89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLQllY2hvPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKKyAgICBpZiB0ZXN0ICJYJEVDSE8iID0gWGVjaG87IHRoZW4KKyAgICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgorICAgICAgaWYgdGVzdCAiWGB7IHByaW50IC1yICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7IHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisgICAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KKyAgICAgICAgRUNITz0ncHJpbnQgLXInCisgICAgICBlbGlmIHsgdGVzdCAtZiAvYmluL2tzaCB8fCB0ZXN0IC1mIC9iaW4va3NoJGFjX2V4ZWV4dDsgfSAmJgorCSAgIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KKyAgICAgICAgIyBJZiB3ZSBoYXZlIGtzaCwgdHJ5IHJ1bm5pbmcgY29uZmlndXJlIGFnYWluIHdpdGggaXQuCisgICAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorICAgICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCisgICAgICAgIENPTkZJR19TSEVMTD0vYmluL2tzaAorICAgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiJDAiIC0tbm8tcmVleGVjICR7MSsiJEAifQogICAgICAgZWxzZQotCSMgbWF5YmUgd2l0aCBhIHNtYWxsZXIgc3RyaW5nLi4uCi0JcHJldj06CisgICAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KKyAgICAgICAgRUNITz0ncHJpbnRmICVzXG4nCisgICAgICAgIGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgICMgQ29vbCwgcHJpbnRmIHdvcmtzCisJICA6CisgICAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKwkgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJICBDT05GSUdfU0hFTEw9JE9SSUdJTkFMX0NPTkZJR19TSEVMTAorCSAgZXhwb3J0IENPTkZJR19TSEVMTAorCSAgU0hFTEw9IiRDT05GSUdfU0hFTEwiCisJICBleHBvcnQgU0hFTEwKKwkgIEVDSE89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgRUNITz0iJENPTkZJR19TSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICAgIGVsc2UKKwkgICMgbWF5YmUgd2l0aCBhIHNtYWxsZXIgc3RyaW5nLi4uCisJICBwcmV2PToKIAotCWZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiJDAiJyAnc2VkIDEwcSAiJDAiJyAnc2VkIDIwcSAiJDAiJyAnc2VkIDUwcSAiJDAiJzsgZG8KLQkgIGlmICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCIpIDI+L2Rldi9udWxsCi0JICB0aGVuCi0JICAgIGJyZWFrCisJICBmb3IgY21kIGluICdlY2hvIHRlc3QnICdzZWQgMnEgIiQwIicgJ3NlZCAxMHEgIiQwIicgJ3NlZCAyMHEgIiQwIicgJ3NlZCA1MHEgIiQwIic7IGRvCisJICAgIGlmIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYYGV2YWwgJGNtZGAiOyB9IDI+L2Rldi9udWxsCisJICAgIHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBwcmV2PSIkY21kIgorCSAgZG9uZQorCisJICBpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIiQwIic7IHRoZW4KKwkgICAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkcHJldmAKKwkgICAgZXhwb3J0IGVjaG9fdGVzdF9zdHJpbmcKKwkgICAgZXhlYyAke09SSUdJTkFMX0NPTkZJR19TSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0gIiQwIiAkezErIiRAIn0KKwkgIGVsc2UKKwkgICAgIyBPb3BzLiAgV2UgbG9zdCBjb21wbGV0ZWx5LCBzbyBqdXN0IHN0aWNrIHdpdGggZWNoby4KKwkgICAgRUNITz1lY2hvCiAJICBmaQotCSAgcHJldj0iJGNtZCIKLQlkb25lCi0KLQlpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIiQwIic7IHRoZW4KLQkgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJHByZXZgCi0JICBleHBvcnQgZWNob190ZXN0X3N0cmluZwotCSAgZXhlYyAke09SSUdJTkFMX0NPTkZJR19TSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0gIiQwIiAkezErIiRAIn0KLQllbHNlCi0JICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgotCSAgZWNobz1lY2hvCi0JZmkKKyAgICAgICAgZmkKICAgICAgIGZpCiAgICAgZmkKICAgZmkKIGZpCi1maQogCiAjIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCiAjIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KLUVDSE89JGVjaG8KLWlmIHRlc3QgIlgkRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgotICAgRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXCQwIC0tZmFsbGJhY2stZWNobyIKK2x0X0VDSE89JEVDSE8KK2lmIHRlc3QgIlgkbHRfRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorICAgbHRfRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXCQwIC0tZmFsbGJhY2stZWNobyIKIGZpCiAKIAogCiAKLXRhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfUNYWAotCi10YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1GNzcKLQotZXhlYyA3PCYwIDwvZGV2L251bGwgNj4mMQordGVzdCAtbiAiJERKRElSIiB8fCBleGVjIDc8JjAgPC9kZXYvbnVsbAorZXhlYyA2PiYxCiAKICMgTmFtZSBvZiB0aGUgaG9zdC4KICMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIExpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCkBAIC03MjMsMTQgKzY5NywxNCBAQAogc3ViZGlycz0KIE1GTEFHUz0KIE1BS0VGTEFHUz0KLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CiAKICMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgogUEFDS0FHRV9OQU1FPSdsaWJmZmknCiBQQUNLQUdFX1RBUk5BTUU9J2xpYmZmaScKLVBBQ0tBR0VfVkVSU0lPTj0nMy4wLjUnCi1QQUNLQUdFX1NUUklORz0nbGliZmZpIDMuMC41JworUEFDS0FHRV9WRVJTSU9OPSczLjAuMTByYzAnCitQQUNLQUdFX1NUUklORz0nbGliZmZpIDMuMC4xMHJjMCcKIFBBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sJworUEFDS0FHRV9VUkw9JycKIAogIyBGYWN0b3JpbmcgZGVmYXVsdCBoZWFkZXJzIGZvciBtb3N0IHRlc3RzLgogYWNfaW5jbHVkZXNfZGVmYXVsdD0iXApAQCAtNzY4LDIwMCArNzQyLDIxOSBAQAogIyBpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZiIKIAotYWNfc3Vic3RfdmFycz0nU0hFTEwKLVBBVEhfU0VQQVJBVE9SCi1QQUNLQUdFX05BTUUKLVBBQ0tBR0VfVEFSTkFNRQotUEFDS0FHRV9WRVJTSU9OCi1QQUNLQUdFX1NUUklORwotUEFDS0FHRV9CVUdSRVBPUlQKLWV4ZWNfcHJlZml4Ci1wcmVmaXgKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUKLWJpbmRpcgotc2JpbmRpcgotbGliZXhlY2RpcgotZGF0YXJvb3RkaXIKLWRhdGFkaXIKLXN5c2NvbmZkaXIKLXNoYXJlZHN0YXRlZGlyCi1sb2NhbHN0YXRlZGlyCi1pbmNsdWRlZGlyCi1vbGRpbmNsdWRlZGlyCi1kb2NkaXIKLWluZm9kaXIKLWh0bWxkaXIKLWR2aWRpcgotcGRmZGlyCi1wc2RpcgotbGliZGlyCi1sb2NhbGVkaXIKLW1hbmRpcgotREVGUwotRUNIT19DCi1FQ0hPX04KLUVDSE9fVAotTElCUwotYnVpbGRfYWxpYXMKLWhvc3RfYWxpYXMKLXRhcmdldF9hbGlhcwotYnVpbGQKLWJ1aWxkX2NwdQotYnVpbGRfdmVuZG9yCi1idWlsZF9vcwotaG9zdAotaG9zdF9jcHUKLWhvc3RfdmVuZG9yCi1ob3N0X29zCi10YXJnZXQKLXRhcmdldF9jcHUKLXRhcmdldF92ZW5kb3IKLXRhcmdldF9vcwotSU5TVEFMTF9QUk9HUkFNCi1JTlNUQUxMX1NDUklQVAotSU5TVEFMTF9EQVRBCi1hbV9faXNyYwotQ1lHUEFUSF9XCi1QQUNLQUdFCi1WRVJTSU9OCi1BQ0xPQ0FMCi1BVVRPQ09ORgotQVVUT01BS0UKLUFVVE9IRUFERVIKLU1BS0VJTkZPCi1pbnN0YWxsX3NoCi1TVFJJUAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNCi1ta2Rpcl9wCi1BV0sKLVNFVF9NQUtFCi1hbV9fbGVhZGluZ19kb3QKLUFNVEFSCi1hbV9fdGFyCi1hbV9fdW50YXIKLUNDCi1DRkxBR1MKLUxERkxBR1MKLUNQUEZMQUdTCi1hY19jdF9DQwotRVhFRVhUCi1PQkpFWFQKLURFUERJUgotYW1fX2luY2x1ZGUKLWFtX19xdW90ZQotQU1ERVBfVFJVRQotQU1ERVBfRkFMU0UKLUFNREVQQkFDS1NMQVNICi1DQ0RFUE1PREUKLWFtX19mYXN0ZGVwQ0NfVFJVRQotYW1fX2Zhc3RkZXBDQ19GQUxTRQotQ0NBUwotQ0NBU0ZMQUdTCi1DQ0FTREVQTU9ERQotYW1fX2Zhc3RkZXBDQ0FTX1RSVUUKLWFtX19mYXN0ZGVwQ0NBU19GQUxTRQotU0VECi1HUkVQCi1FR1JFUAotTE5fUwotRUNITwotQVIKLVJBTkxJQgotQ1BQCi1DWFgKLUNYWEZMQUdTCi1hY19jdF9DWFgKLUNYWERFUE1PREUKLWFtX19mYXN0ZGVwQ1hYX1RSVUUKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFCi1DWFhDUFAKLUY3NwotRkZMQUdTCi1hY19jdF9GNzcKLUxJQlRPT0wKLU1BSU5UQUlORVJfTU9ERV9UUlVFCi1NQUlOVEFJTkVSX01PREVfRkFMU0UKLU1BSU5UCi1URVNUU1VCRElSX1RSVUUKLVRFU1RTVUJESVJfRkFMU0UKLUFNX1JVTlRFU1RGTEFHUwotTUlQU19UUlVFCi1NSVBTX0ZBTFNFCi1TUEFSQ19UUlVFCi1TUEFSQ19GQUxTRQotWDg2X1RSVUUKLVg4Nl9GQUxTRQotWDg2X0ZSRUVCU0RfVFJVRQotWDg2X0ZSRUVCU0RfRkFMU0UKLVg4Nl9XSU4zMl9UUlVFCi1YODZfV0lOMzJfRkFMU0UKLVg4Nl9EQVJXSU5fVFJVRQotWDg2X0RBUldJTl9GQUxTRQotQUxQSEFfVFJVRQotQUxQSEFfRkFMU0UKLUlBNjRfVFJVRQotSUE2NF9GQUxTRQotTTMyUl9UUlVFCi1NMzJSX0ZBTFNFCi1NNjhLX1RSVUUKLU02OEtfRkFMU0UKLVBPV0VSUENfVFJVRQotUE9XRVJQQ19GQUxTRQotUE9XRVJQQ19BSVhfVFJVRQotUE9XRVJQQ19BSVhfRkFMU0UKLVBPV0VSUENfREFSV0lOX1RSVUUKLVBPV0VSUENfREFSV0lOX0ZBTFNFCi1QT1dFUlBDX0ZSRUVCU0RfVFJVRQotUE9XRVJQQ19GUkVFQlNEX0ZBTFNFCi1BUk1fVFJVRQotQVJNX0ZBTFNFCi1MSUJGRklfQ1JJU19UUlVFCi1MSUJGRklfQ1JJU19GQUxTRQotRlJWX1RSVUUKLUZSVl9GQUxTRQotUzM5MF9UUlVFCi1TMzkwX0ZBTFNFCi1YODZfNjRfVFJVRQotWDg2XzY0X0ZBTFNFCi1TSF9UUlVFCi1TSF9GQUxTRQotU0g2NF9UUlVFCi1TSDY0X0ZBTFNFCi1QQV9MSU5VWF9UUlVFCi1QQV9MSU5VWF9GQUxTRQotUEFfSFBVWF9UUlVFCi1QQV9IUFVYX0ZBTFNFCi1QQTY0X0hQVVhfVFJVRQotUEE2NF9IUFVYX0ZBTFNFCi1BTExPQ0EKLUhBVkVfTE9OR19ET1VCTEUKLVRBUkdFVAotVEFSR0VURElSCi10b29sZXhlY2RpcgotdG9vbGV4ZWNsaWJkaXIKK2FjX3N1YnN0X3ZhcnM9J2FtX19FWEVFWFRfRkFMU0UKK2FtX19FWEVFWFRfVFJVRQorTFRMSUJPQkpTCiBMSUJPQkpTCi1MVExJQk9CSlMnCit0b29sZXhlY2xpYmRpcgordG9vbGV4ZWNkaXIKK1RBUkdFVERJUgorVEFSR0VUCitIQVZFX0xPTkdfRE9VQkxFCitBTExPQ0EKK1BBNjRfSFBVWF9GQUxTRQorUEE2NF9IUFVYX1RSVUUKK1BBX0hQVVhfRkFMU0UKK1BBX0hQVVhfVFJVRQorUEFfTElOVVhfRkFMU0UKK1BBX0xJTlVYX1RSVUUKK1NINjRfRkFMU0UKK1NINjRfVFJVRQorU0hfRkFMU0UKK1NIX1RSVUUKK1g4Nl82NF9GQUxTRQorWDg2XzY0X1RSVUUKK1MzOTBfRkFMU0UKK1MzOTBfVFJVRQorRlJWX0ZBTFNFCitGUlZfVFJVRQorTElCRkZJX0NSSVNfRkFMU0UKK0xJQkZGSV9DUklTX1RSVUUKK0FWUjMyX0ZBTFNFCitBVlIzMl9UUlVFCitBUk1fRkFMU0UKK0FSTV9UUlVFCitQT1dFUlBDX0ZSRUVCU0RfRkFMU0UKK1BPV0VSUENfRlJFRUJTRF9UUlVFCitQT1dFUlBDX0RBUldJTl9GQUxTRQorUE9XRVJQQ19EQVJXSU5fVFJVRQorUE9XRVJQQ19BSVhfRkFMU0UKK1BPV0VSUENfQUlYX1RSVUUKK1BPV0VSUENfRkFMU0UKK1BPV0VSUENfVFJVRQorTTY4S19GQUxTRQorTTY4S19UUlVFCitNMzJSX0ZBTFNFCitNMzJSX1RSVUUKK0lBNjRfRkFMU0UKK0lBNjRfVFJVRQorQUxQSEFfRkFMU0UKK0FMUEhBX1RSVUUKK1g4Nl9EQVJXSU5fRkFMU0UKK1g4Nl9EQVJXSU5fVFJVRQorWDg2X1dJTjY0X0ZBTFNFCitYODZfV0lONjRfVFJVRQorWDg2X1dJTjMyX0ZBTFNFCitYODZfV0lOMzJfVFJVRQorWDg2X0ZSRUVCU0RfRkFMU0UKK1g4Nl9GUkVFQlNEX1RSVUUKK1g4Nl9GQUxTRQorWDg2X1RSVUUKK1NQQVJDX0ZBTFNFCitTUEFSQ19UUlVFCitNSVBTX0ZBTFNFCitNSVBTX1RSVUUKK0FNX0xUTERGTEFHUworQU1fUlVOVEVTVEZMQUdTCitURVNUU1VCRElSX0ZBTFNFCitURVNUU1VCRElSX1RSVUUKK01BSU5UCitNQUlOVEFJTkVSX01PREVfRkFMU0UKK01BSU5UQUlORVJfTU9ERV9UUlVFCitDUFAKK09UT09MNjQKK09UT09MCitMSVBPCitOTUVESVQKK0RTWU1VVElMCitsdF9FQ0hPCitSQU5MSUIKK0FSCitPQkpEVU1QCitMTl9TCitOTQorYWNfY3RfRFVNUEJJTgorRFVNUEJJTgorTEQKK0ZHUkVQCitFR1JFUAorR1JFUAorU0VECitMSUJUT09MCithbV9fZmFzdGRlcENDQVNfRkFMU0UKK2FtX19mYXN0ZGVwQ0NBU19UUlVFCitDQ0FTREVQTU9ERQorQ0NBU0ZMQUdTCitDQ0FTCithbV9fZmFzdGRlcENDX0ZBTFNFCithbV9fZmFzdGRlcENDX1RSVUUKK0NDREVQTU9ERQorQU1ERVBCQUNLU0xBU0gKK0FNREVQX0ZBTFNFCitBTURFUF9UUlVFCithbV9fcXVvdGUKK2FtX19pbmNsdWRlCitERVBESVIKK09CSkVYVAorRVhFRVhUCithY19jdF9DQworQ1BQRkxBR1MKK0xERkxBR1MKK0NGTEFHUworQ0MKK2FtX191bnRhcgorYW1fX3RhcgorQU1UQVIKK2FtX19sZWFkaW5nX2RvdAorU0VUX01BS0UKK0FXSworbWtkaXJfcAorTUtESVJfUAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNCitTVFJJUAoraW5zdGFsbF9zaAorTUFLRUlORk8KK0FVVE9IRUFERVIKK0FVVE9NQUtFCitBVVRPQ09ORgorQUNMT0NBTAorVkVSU0lPTgorUEFDS0FHRQorQ1lHUEFUSF9XCithbV9faXNyYworSU5TVEFMTF9EQVRBCitJTlNUQUxMX1NDUklQVAorSU5TVEFMTF9QUk9HUkFNCit0YXJnZXRfb3MKK3RhcmdldF92ZW5kb3IKK3RhcmdldF9jcHUKK3RhcmdldAoraG9zdF9vcworaG9zdF92ZW5kb3IKK2hvc3RfY3B1Citob3N0CitidWlsZF9vcworYnVpbGRfdmVuZG9yCitidWlsZF9jcHUKK2J1aWxkCit0YXJnZXRfYWxpYXMKK2hvc3RfYWxpYXMKK2J1aWxkX2FsaWFzCitMSUJTCitFQ0hPX1QKK0VDSE9fTgorRUNIT19DCitERUZTCittYW5kaXIKK2xvY2FsZWRpcgorbGliZGlyCitwc2RpcgorcGRmZGlyCitkdmlkaXIKK2h0bWxkaXIKK2luZm9kaXIKK2RvY2Rpcgorb2xkaW5jbHVkZWRpcgoraW5jbHVkZWRpcgorbG9jYWxzdGF0ZWRpcgorc2hhcmVkc3RhdGVkaXIKK3N5c2NvbmZkaXIKK2RhdGFkaXIKK2RhdGFyb290ZGlyCitsaWJleGVjZGlyCitzYmluZGlyCitiaW5kaXIKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK3ByZWZpeAorZXhlY19wcmVmaXgKK1BBQ0tBR0VfVVJMCitQQUNLQUdFX0JVR1JFUE9SVAorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9UQVJOQU1FCitQQUNLQUdFX05BTUUKK1BBVEhfU0VQQVJBVE9SCitTSEVMTCcKIGFjX3N1YnN0X2ZpbGVzPScnCithY191c2VyX29wdHM9JworZW5hYmxlX29wdGlvbl9jaGVja2luZworZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcKK2VuYWJsZV9zaGFyZWQKK2VuYWJsZV9zdGF0aWMKK3dpdGhfcGljCitlbmFibGVfZmFzdF9pbnN0YWxsCit3aXRoX2dudV9sZAorZW5hYmxlX2xpYnRvb2xfbG9jaworZW5hYmxlX21haW50YWluZXJfbW9kZQorZW5hYmxlX2RlYnVnCitlbmFibGVfc3RydWN0cworZW5hYmxlX3Jhd19hcGkKK2VuYWJsZV9wdXJpZnlfc2FmZXR5CisnCiAgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcwogaG9zdF9hbGlhcwogdGFyZ2V0X2FsaWFzCiBDQ0FTCiBDQ0FTRkxBR1MKIENQUAotQ1BQRkxBR1MKLUNYWAotQ1hYRkxBR1MKLUxERkxBR1MKLUxJQlMKLUNDQwotQ1hYQ1BQCi1GNzcKLUZGTEFHUycKK0NQUEZMQUdTJwogCiAKICMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KIGFjX2luaXRfaGVscD0KIGFjX2luaXRfdmVyc2lvbj1mYWxzZQorYWNfdW5yZWNvZ25pemVkX29wdHM9CithY191bnJlY29nbml6ZWRfc2VwPQogIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKICMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KIGNhY2hlX2ZpbGU9L2Rldi9udWxsCkBAIC0xMDYwLDEzICsxMDUzLDIwIEBACiAgICAgZGF0YXJvb3RkaXI9JGFjX29wdGFyZyA7OwogCiAgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKLSAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvWy0uXS9fL2cnYAotICAgIGV2YWwgZW5hYmxlXyRhY19mZWF0dXJlPW5vIDs7CisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZGlzYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1ubyA7OwogCiAgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCiAgICAgYWNfcHJldj1kb2NkaXIgOzsKQEAgLTEwNzksMTMgKzEwNzksMjAgQEAKICAgICBkdmlkaXI9JGFjX29wdGFyZyA7OwogCiAgIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCi0gICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy9bLS5dL18vZydgCi0gICAgZXZhbCBlbmFibGVfJGFjX2ZlYXR1cmU9XCRhY19vcHRhcmcgOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorImVuYWJsZV8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1lbmFibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKIAogICAtZXhlYy1wcmVmaXggfCAtLWV4ZWNfcHJlZml4IHwgLS1leGVjLXByZWZpeCB8IC0tZXhlYy1wcmVmaSBcCiAgIHwgLS1leGVjLXByZWYgfCAtLWV4ZWMtcHJlIHwgLS1leGVjLXByIHwgLS1leGVjLXAgfCAtLWV4ZWMtIFwKQEAgLTEyNzYsMjIgKzEyODMsMzYgQEAKICAgICBhY19pbml0X3ZlcnNpb249OiA7OwogCiAgIC13aXRoLSogfCAtLXdpdGgtKikKLSAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvWy0uXS9fL2cnYAotICAgIGV2YWwgd2l0aF8kYWNfcGFja2FnZT1cJGFjX29wdGFyZyA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRoLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OwogCiAgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKLSAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvWy0uXS9fL2cnYAotICAgIGV2YWwgd2l0aF8kYWNfcGFja2FnZT1ubyA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRob3V0LSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1ubyA7OwogCiAgIC0teCkKICAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCkBAIC0xMzExLDI1ICsxMzMyLDI1IEBACiAgIHwgLS14LWxpYnJhcj0qIHwgLS14LWxpYnJhPSogfCAtLXgtbGlicj0qIHwgLS14LWxpYj0qIHwgLS14LWxpPSogfCAtLXgtbD0qKQogICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKIAotICAtKikgeyBlY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkYWNfb3B0aW9uCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgLSopIGFzX2ZuX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCRhY19vcHRpb24nCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKICAgICA7OwogCiAgICo9KikKICAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZW52dmFyIiA6ICIuKlteXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYWNfZW52dmFyIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGNhc2UgJGFjX2VudnZhciBpbiAjKAorICAgICAgJycgfCBbMC05XSogfCAqWyFfJGFzX2NyX2FsbnVtXSogKQorICAgICAgYXNfZm5fZXJyb3IgImludmFsaWQgdmFyaWFibGUgbmFtZTogXGAkYWNfZW52dmFyJyIgOzsKKyAgICBlc2FjCiAgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCiAgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKIAogICAqKQogICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KLSAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgogICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCiAgICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQogICAgIDs7CiAKQEAgLTEzMzgsMjMgKzEzNTksMzYgQEAKIAogaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCiAgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKLSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iCiBmaQogCi0jIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiOyB0aGVuCisgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKyAgICBubykgOzsKKyAgICBmYXRhbCkgYXNfZm5fZXJyb3IgInVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiIDs7CisgICAgKikgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMiA7OworICBlc2FjCitmaQorCisjIENoZWNrIGFsbCBkaXJlY3RvcnkgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeS4KIGZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAogCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKIAkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAogCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgogZG8KICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICMgUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMuCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgICovICkKKyAgICAgIGFjX3ZhbD1gZXhwciAiWCRhY192YWwiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRhY192YWwiIDogJ1hcKC4qXCknYAorICAgICAgZXZhbCAkYWNfdmFyPVwkYWNfdmFsOzsKKyAgZXNhYworICAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCiAgIGNhc2UgJGFjX3ZhbCBpbgogICAgIFtcXC8kXSogfCA/OltcXC9dKiApICBjb250aW51ZTs7CiAgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OwogICBlc2FjCi0gIHsgZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCiBkb25lCiAKICMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKQEAgLTEzNjgsNyArMTQwMiw3IEBACiBpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KICAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCiAgICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCi0gICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IElmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCiAgICAgSWYgYSBjcm9zcyBjb21waWxlciBpcyBkZXRlY3RlZCB0aGVuIGNyb3NzIGNvbXBpbGUgbW9kZSB3aWxsIGJlIHVzZWQuIiA+JjIKICAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgogICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKQEAgLTEzODQsMjMgKzE0MTgsMjEgQEAKIGFjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgogYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgogYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8Ci0gIHsgZWNobyAiJGFzX21lOiBlcnJvcjogV29ya2luZyBkaXJlY3RvcnkgY2Fubm90IGJlIGRldGVybWluZWQiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKIHRlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHB3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgInB3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeSIKIAogCiAjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCiBpZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgogICBhY19zcmNkaXJfZGVmYXVsdGVkPXllcwogICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCi0gIGFjX2NvbmZkaXI9YCRhc19kaXJuYW1lIC0tICIkMCIgfHwKLSRhc19leHByIFgiJDAiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiQwIiB8CisgIGFjX2NvbmZkaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfbXlzZWxmIiB8fAorJGFzX2V4cHIgWCIkYXNfbXlzZWxmIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX215c2VsZiIgfAogICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CiAJICAgIHMvL1wxLwogCSAgICBxCkBAIC0xNDI3LDEzICsxNDU5LDExIEBACiBmaQogaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KICAgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzICYmIHNyY2Rpcj0iJGFjX2NvbmZkaXIgb3IgLi4iCi0gIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhc19mbl9lcnJvciAiY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIgogZmkKIGFjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKIGFjX2Fic19jb25mZGlyPWAoCi0JY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCB7IGVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19tc2ciID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCBhc19mbl9lcnJvciAiJGFjX21zZyIKIAlwd2QpYAogIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KIGlmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KQEAgLTE0NTksNyArMTQ4OSw3IEBACiAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgogICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCiAgIGNhdCA8PF9BQ0VPRgotXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgbGliZmZpIDMuMC41IHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KK1xgY29uZmlndXJlJyBjb25maWd1cmVzIGxpYmZmaSAzLjAuMTByYzAgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgogCiBVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KIApAQCAtMTQ4MSw5ICsxNTExLDkgQEAKIAogSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgogICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKLQkJCSAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KICAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKLQkJCSAgW1BSRUZJWF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWF0KIAogQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCiBcYCRhY19kZWZhdWx0X3ByZWZpeC9iaW4nLCBcYCRhY19kZWZhdWx0X3ByZWZpeC9saWInIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeQpAQCAtMTQ5MywyNSArMTUyMywyNSBAQAogRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCiAKIEZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6Ci0gIC0tYmluZGlyPURJUiAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCi0gIC0tc2JpbmRpcj1ESVIgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCi0gIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQotICAtLXN5c2NvbmZkaXI9RElSICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQotICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCi0gIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQotICAtLWxpYmRpcj1ESVIgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCi0gIC0taW5jbHVkZWRpcj1ESVIgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQotICAtLW9sZGluY2x1ZGVkaXI9RElSICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCi0gIC0tZGF0YXJvb3RkaXI9RElSICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQotICAtLWRhdGFkaXI9RElSICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCi0gIC0taW5mb2Rpcj1ESVIgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQotICAtLWxvY2FsZWRpcj1ESVIgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQotICAtLW1hbmRpcj1ESVIgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCi0gIC0tZG9jZGlyPURJUiAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvbGliZmZpXQotICAtLWh0bWxkaXI9RElSICAgICAgICAgIGh0bWwgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQotICAtLWR2aWRpcj1ESVIgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCi0gIC0tcGRmZGlyPURJUiAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KLSAgLS1wc2Rpcj1ESVIgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKyAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCisgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKyAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KKyAgLS1kb2NkaXI9RElSICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvbGliZmZpXQorICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1kdmlkaXI9RElSICAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQogX0FDRU9GCiAKICAgY2F0IDw8XF9BQ0VPRgpAQCAtMTUzMCwxMSArMTU2MCwxMiBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIGxpYmZmaSAzLjAuNToiOzsKKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIGxpYmZmaSAzLjAuMTByYzA6Ijs7CiAgICBlc2FjCiAgIGNhdCA8PFxfQUNFT0YKIAogT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKICAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQogICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCiAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKQEAgLTE1NTQsMTAgKzE1ODUsOSBAQAogT3B0aW9uYWwgUGFja2FnZXM6CiAgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQogICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCi0gIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCi0gIC0td2l0aC10YWdzWz1UQUdTXSAgICAgIGluY2x1ZGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBbYXV0b21hdGljXQorICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCiAKIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgogICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKQEAgLTE1NjUsMTYgKzE1OTUsMTEgQEAKICAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCiAgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KICAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgotICBDUFBGTEFHUyAgICBDL0MrKy9PYmplY3RpdmUgQyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgIENQUEZMQUdTICAgIChPYmplY3RpdmUpIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKICAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CiAgIENDQVMgICAgICAgIGFzc2VtYmxlciBjb21waWxlciBjb21tYW5kIChkZWZhdWx0cyB0byBDQykKICAgQ0NBU0ZMQUdTICAgYXNzZW1ibGVyIGNvbXBpbGVyIGZsYWdzIChkZWZhdWx0cyB0byBDRkxBR1MpCiAgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCi0gIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCi0gIENYWEZMQUdTICAgIEMrKyBjb21waWxlciBmbGFncwotICBDWFhDUFAgICAgICBDKysgcHJlcHJvY2Vzc29yCi0gIEY3NyAgICAgICAgIEZvcnRyYW4gNzcgY29tcGlsZXIgY29tbWFuZAotICBGRkxBR1MgICAgICBGb3J0cmFuIDc3IGNvbXBpbGVyIGZsYWdzCiAKIFVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCiBpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCkBAIC0xNTg3LDE1ICsxNjEyLDE3IEBACiBpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCiAgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCiAgIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCi0gICAgdGVzdCAtZCAiJGFjX2RpciIgfHwgY29udGludWUKKyAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAorICAgICAgeyBjZCAiJHNyY2RpciIgJiYgYWNfcHdkPWBwd2RgICYmIHNyY2Rpcj0uICYmIHRlc3QgLWQgIiRhY19kaXIiOyB9IHx8CisgICAgICBjb250aW51ZQogICAgIGFjX2J1aWxkZGlyPS4KIAogY2FzZSAiJGFjX2RpciIgaW4KIC4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OwogKikKLSAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAogICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcl9zdWI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwvLi4sZztzLC8sLCdgCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAogICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCiAgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKICAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CkBAIC0xNjMxLDcgKzE2NTgsNyBAQAogICAgICAgZWNobyAmJgogICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQogICAgIGVsc2UKLSAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCiAgICAgZmkgfHwgYWNfc3RhdHVzPSQ/CiAgICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQogICBkb25lCkBAIC0xNjQwLDIyICsxNjY3LDU1NyBAQAogdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKLWxpYmZmaSBjb25maWd1cmUgMy4wLjUKLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MQorbGliZmZpIGNvbmZpZ3VyZSAzLjAuMTByYzAKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NQogCi1Db3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCi0yMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KIF9BQ0VPRgogICBleGl0CiBmaQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mIGluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgYWNfZm5fY190cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jb21waWxlCisKKyMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2xpbmsKKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaW4KKyMgSU5DTFVERVMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2NwcCBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jcHAgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY3BwCisKKyMgYWNfZm5fY190cnlfcnVuIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4gQXNzdW1lcworIyB0aGF0IGV4ZWN1dGFibGVzICpjYW4qIGJlIHJ1bi4KK2FjX2ZuX2NfdHJ5X3J1biAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CisgICAgICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICAgICBhY19yZXR2YWw9JGFjX3N0YXR1cworZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X3J1bgorCisjIGFjX2ZuX2NfY2hlY2tfZnVuYyBMSU5FTk8gRlVOQyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKK2FjX2ZuX2NfY2hlY2tfZnVuYyAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJDIgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkMi4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkMiBpbm5vY3VvdXNfJDIKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJDIgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJDIKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkMiAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyQyIHx8IGRlZmluZWQgX19zdHViX19fJDIKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJDIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorCit9ICMgYWNfZm5fY19jaGVja19mdW5jCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cywgZ2l2aW5nIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgYmUgY29tcGlsZWQgdXNpbmcKKyMgdGhlIGluY2x1ZGUgZmlsZXMgaW4gSU5DTFVERVMgYW5kIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IGFzX3Zhcj0kMzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgdXNhYmlsaXR5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgcHJlc2VuY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgcHJlc2VuY2UuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gIygoCisgIHllczpubzogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisoIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWwgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kMzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPVwkYWNfaGVhZGVyX2NvbXBpbGVyIgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwKKworIyBhY19mbl9jX2NvbXB1dGVfaW50IExJTkVOTyBFWFBSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmllcyB0byBmaW5kIHRoZSBjb21waWxlLXRpbWUgdmFsdWUgb2YgRVhQUiBpbiBhIHByb2dyYW0gdGhhdCBpbmNsdWRlcworIyBJTkNMVURFUywgc2V0dGluZyBWQVIgYWNjb3JkaW5nbHkuIFJldHVybnMgd2hldGhlciB0aGUgdmFsdWUgY291bGQgYmUKKyMgY29tcHV0ZWQKK2FjX2ZuX2NfY29tcHV0ZV9pbnQgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBhc19mbl9hcml0aCAkYWNfbWlkICsgMSAmJiBhY19sbz0kYXNfdmFsCisJCQlpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCArIDEgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgYXNfZm5fYXJpdGggJygnICRhY19taWQgJyknIC0gMSAmJiBhY19oaT0kYXNfdmFsCisJCQlpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCAmJiBhY19taWQ9JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGFjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sbyAmJiBhY19taWQ9JGFzX3ZhbAorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgKyAxICYmIGFjX2xvPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluICMoKAorPyopIGV2YWwgIiQzPVwkYWNfbG8iOyBhY19yZXR2YWw9MCA7OworJycpIGFjX3JldHZhbD0xIDs7Citlc2FjCisgIGVsc2UKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gJDI7IH0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIHJldHVybiAxOworICBpZiAoKCQyKSA8IDApCisgICAgeworICAgICAgbG9uZyBpbnQgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoJDIpKQorCXJldHVybiAxOworICAgICAgZnByaW50ZiAoZiwgIiVsZCIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWx1IiwgaSk7CisgICAgfQorICAvKiBEbyBub3Qgb3V0cHV0IGEgdHJhaWxpbmcgbmV3bGluZSwgYXMgdGhpcyBjYXVzZXMgXHJcbiBjb25mdXNpb24KKyAgICAgb24gc29tZSBwbGF0Zm9ybXMuICAqLworICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGVjaG8gPj5jb25mdGVzdC52YWw7IHJlYWQgJDMgPGNvbmZ0ZXN0LnZhbDsgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgYWNfcmV0dmFsPTEKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC52YWwKKworICBmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfY29tcHV0ZV9pbnQKIGNhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgogVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCiAKLUl0IHdhcyBjcmVhdGVkIGJ5IGxpYmZmaSAkYXNfbWUgMy4wLjUsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCitJdCB3YXMgY3JlYXRlZCBieSBsaWJmZmkgJGFzX21lIDMuMC4xMHJjMCwgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjUuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICAkICQwICRACiAKQEAgLTE2OTEsOCArMjI1Myw4IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGVjaG8gIlBBVEg6ICRhc19kaXIiCi1kb25lCisgICAgJGFzX2VjaG8gIlBBVEg6ICRhc19kaXIiCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAogfSA+JjUKQEAgLTE3MjYsMTIgKzIyODgsMTIgQEAKICAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKICAgICAgIGNvbnRpbnVlIDs7CiAgICAgKlwnKikKLSAgICAgIGFjX2FyZz1gZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAgIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CiAgICAgZXNhYwogICAgIGNhc2UgJGFjX3Bhc3MgaW4KLSAgICAxKSBhY19jb25maWd1cmVfYXJnczA9IiRhY19jb25maWd1cmVfYXJnczAgJyRhY19hcmcnIiA7OworICAgIDEpIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczAgIiAnJGFjX2FyZyciIDs7CiAgICAgMikKLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzMT0iJGFjX2NvbmZpZ3VyZV9hcmdzMSAnJGFjX2FyZyciCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MxICIgJyRhY19hcmcnIgogICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCiAJYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgogICAgICAgZWxzZQpAQCAtMTc0NywxMyArMjMwOSwxMyBAQAogCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CiAJZXNhYwogICAgICAgZmkKLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJyRhY19hcmcnIgorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIgogICAgICAgOzsKICAgICBlc2FjCiAgIGRvbmUKIGRvbmUKLSRhc191bnNldCBhY19jb25maWd1cmVfYXJnczAgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczArc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MwPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMDsgfQotJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMSB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMStzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczE9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MxOyB9Cit7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMDt9Cit7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMTt9CiAKICMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKICMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCkBAIC0xNzc4LDEyICsyMzQwLDEzIEBACiAgICAgY2FzZSAkYWNfdmFsIGluICMoCiAgICAgKiR7YXNfbmx9KikKICAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAotICAgICAgKl9jdl8qKSB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mMjt9IDs7CisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CiAgICAgICBlc2FjCiAgICAgICBjYXNlICRhY192YXIgaW4gIygKICAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKLSAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKICAgICAgIGVzYWMgOzsKICAgICBlc2FjCiAgIGRvbmUKQEAgLTE4MTIsOSArMjM3NSw5IEBACiAgICAgZG8KICAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgogICAgICAgY2FzZSAkYWNfdmFsIGluCi0gICAgICAqXCdcJycqKSBhY192YWw9YGVjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKICAgICAgIGVzYWMKLSAgICAgIGVjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgogICAgIGRvbmUgfCBzb3J0CiAgICAgZWNobwogCkBAIC0xODI5LDkgKzIzOTIsOSBAQAogICAgICAgZG8KIAlldmFsIGFjX3ZhbD1cJCRhY192YXIKIAljYXNlICRhY192YWwgaW4KLQkqXCdcJycqKSBhY192YWw9YGVjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKwkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CiAJZXNhYwotCWVjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKICAgICAgIGRvbmUgfCBzb3J0CiAgICAgICBlY2hvCiAgICAgZmkKQEAgLTE4NDcsODMgKzI0MTAsODggQEAKICAgICAgIGVjaG8KICAgICBmaQogICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKLSAgICAgIGVjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgotICAgIGVjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCisgICAgJGFzX2VjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCiAgIH0gPiY1CiAgIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgogICAgIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKICAgICBleGl0ICRleGl0X3N0YXR1cwogJyAwCiBmb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KLSAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCisgIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IGFzX2ZuX2V4aXQgMScgJGFjX3NpZ25hbAogZG9uZQogYWNfc2lnbmFsPTAKIAogIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCiAKKyRhc19lY2hvICIvKiBjb25mZGVmcy5oICovIiA+IGNvbmZkZWZzLmgKKwogIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgogX0FDRU9GCiAKLQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKIF9BQ0VPRgogCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVVJMICIkUEFDS0FHRV9VUkwiCitfQUNFT0YKKwogCiAjIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KLSMgUHJlZmVyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCisjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorYWNfc2l0ZV9maWxlMT1OT05FCithY19zaXRlX2ZpbGUyPU5PTkUKIGlmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KLSAgc2V0IHggIiRDT05GSUdfU0lURSIKKyAgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEUKIGVsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCi0gIHNldCB4ICIkcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlIiAiJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisgIGFjX3NpdGVfZmlsZTE9JHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlCiBlbHNlCi0gIHNldCB4ICIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUiIFwKLQkiJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCiBmaQotc2hpZnQKLWZvciBhY19zaXRlX2ZpbGUKK2ZvciBhY19zaXRlX2ZpbGUgaW4gIiRhY19zaXRlX2ZpbGUxIiAiJGFjX3NpdGVfZmlsZTIiCiBkbwotICBpZiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KKyAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRhY19zaXRlX2ZpbGUiICYmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQogICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQogICAgIC4gIiRhY19zaXRlX2ZpbGUiCiAgIGZpCiBkb25lCiAKIGlmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgotICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAotICAjIGZpbGVzIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4KLSAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCisgICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgogICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OwogICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OwogICAgIGVzYWMKICAgZmkKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KICAgPiRjYWNoZV9maWxlCiBmaQogCkBAIC0xOTM3LDY4ICsyNTA1LDU2IEBACiAgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKICAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgogICAgIHNldCwpCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CiAgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OwogICAgICxzZXQpCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQogICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKICAgICAsKTs7CiAgICAgKikKICAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KLQl7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQotCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mNQotZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjI7fQotCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQotZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjI7fQotCWFjX2NhY2hlX2NvcnJ1cHRlZD06CisJIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCisJYWNfb2xkX3ZhbF93PWBlY2hvIHggJGFjX29sZF92YWxgCisJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCisJaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKwllbHNlCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorCWZpCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mMjt9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CiAgICAgICBmaTs7CiAgIGVzYWMKICAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgogICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KICAgICBjYXNlICRhY19uZXdfdmFsIGluCi0gICAgKlwnKikgYWNfYXJnPSRhY192YXI9YGVjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWAkYXNfZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CiAgICAgKikgYWNfYXJnPSRhY192YXI9JGFjX25ld192YWwgOzsKICAgICBlc2FjCiAgICAgY2FzZSAiICRhY19jb25maWd1cmVfYXJncyAiIGluCiAgICAgICAqIiAnJGFjX2FyZycgIiopIDs7ICMgQXZvaWQgZHVwcy4gIFVzZSBvZiBxdW90ZXMgZW5zdXJlcyBhY2N1cmFjeS4KLSAgICAgICopIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJyRhY19hcmcnIiA7OworICAgICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIiA7OwogICAgIGVzYWMKICAgZmkKIGRvbmUKIGlmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICBhc19mbl9lcnJvciAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUKIGZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwpAQCAtMjAxMiwyNCArMjU2OCwxNiBAQAogCiBhY19hdXhfZGlyPQogZm9yIGFjX2RpciBpbiAiJHNyY2RpciIgIiRzcmNkaXIvLi4iICIkc3JjZGlyLy4uLy4uIjsgZG8KLSAgaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLXNoIjsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCi0gICAgYnJlYWsKLSAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKLSAgICBicmVhawotICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvc2h0b29sIjsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgotICAgIGJyZWFrCi0gIGZpCisgIGZvciBhY190IGluIGluc3RhbGwtc2ggaW5zdGFsbC5zaCBzaHRvb2w7IGRvCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfdCI7IHRoZW4KKyAgICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvJGFjX3QgLWMiCisgICAgICBicmVhayAyCisgICAgZmkKKyAgZG9uZQogZG9uZQogaWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBcIiRzcmNkaXJcIiBcIiRzcmNkaXIvLi5cIiBcIiRzcmNkaXIvLi4vLi5cIiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIGluc3RhbGwtc2gsIGluc3RhbGwuc2gsIG9yIHNodG9vbCBpbiBcIiRzcmNkaXJcIiBcIiRzcmNkaXIvLi5cIiBcIiRzcmNkaXIvLi4vLi5cIiIgIiRMSU5FTk8iIDUKIGZpCiAKICMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLApAQCAtMjA0MywzNSArMjU5MSwyNyBAQAogCiAjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCiAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhc19mbl9lcnJvciAiY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5FTk8iIDUKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKIHRlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgogICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAogdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgImNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgIiRMSU5FTk8iIDUKIGFjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2J1aWxkIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9idWlsZCIgPiY2OyB9CiBjYXNlICRhY19jdl9idWlsZCBpbgogKi0qLSopIDs7Ci0qKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisqKSBhc19mbl9lcnJvciAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiICIkTElORU5PIiA1OzsKIGVzYWMKIGJ1aWxkPSRhY19jdl9idWlsZAogYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJwpAQCAtMjA4NywyOCArMjYyNywyNCBAQAogY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaG9zdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaG9zdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCiAgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCiBlbHNlCiAgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8Ci0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFzX2ZuX2Vycm9yICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CiBmaQogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaG9zdCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KIGNhc2UgJGFjX2N2X2hvc3QgaW4KICotKi0qKSA7OwotKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyopIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiAiJExJTkVOTyIgNTs7CiBlc2FjCiBob3N0PSRhY19jdl9ob3N0CiBhY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCkBAIC0yMTI0LDI4ICsyNjYwLDI0IEBACiBjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYwogCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdGFyZ2V0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfdGFyZ2V0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAieCR0YXJnZXRfYWxpYXMiID0geDsgdGhlbgogICBhY19jdl90YXJnZXQ9JGFjX2N2X2hvc3QKIGVsc2UKICAgYWNfY3ZfdGFyZ2V0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICR0YXJnZXRfYWxpYXNgIHx8Ci0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJHRhcmdldF9hbGlhcyBmYWlsZWQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJHRhcmdldF9hbGlhcyBmYWlsZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJHRhcmdldF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CiBmaQogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdGFyZ2V0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90YXJnZXQiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90YXJnZXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl90YXJnZXQiID4mNjsgfQogY2FzZSAkYWNfY3ZfdGFyZ2V0IGluCiAqLSotKikgOzsKLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIHRhcmdldCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworKikgYXNfZm5fZXJyb3IgImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIHRhcmdldCIgIiRMSU5FTk8iIDU7OwogZXNhYwogdGFyZ2V0PSRhY19jdl90YXJnZXQKIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKQEAgLTIxNjcsMTEgKzI2OTksMTIgQEAKICAgdGVzdCAiJHByb2dyYW1fcHJlZml4JHByb2dyYW1fc3VmZml4JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiID0gXAogICAgIE5PTkVOT05Fcyx4LHgsICYmCiAgIHByb2dyYW1fcHJlZml4PSR7dGFyZ2V0X2FsaWFzfS0KKwogdGFyZ2V0X2FsaWFzPSR7dGFyZ2V0X2FsaWFzLSRob3N0X2FsaWFzfQogCiAuICR7c3JjZGlyfS9jb25maWd1cmUuaG9zdAogCi1hbV9fYXBpX3ZlcnNpb249JzEuMTAnCithbV9fYXBpX3ZlcnNpb249JzEuMTEnCiAKICMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAogIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCkBAIC0yMTg2LDIyICsyNzE5LDIzIEBACiAjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCiAjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKICMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2OyB9CisjIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUgZmlsZXMuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAiID4mNjsgfQogaWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCi1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgotY2FzZSAkYXNfZGlyLyBpbgotICAuLyB8IC4vLyB8IC9jQy8qIHwgXAorICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgorY2FzZSAkYXNfZGlyLyBpbiAjKCgKKyAgLi8gfCAuLy8gfCAvW2NDXS8qIHwgXAogICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKLSAgPzpcXC9vczJcXC9pbnN0YWxsXFwvKiB8ID86XFwvT1MyXFwvSU5TVEFMTFxcLyogfCBcCisgID86W1xcL11vczJbXFwvXWluc3RhbGxbXFwvXSogfCA/OltcXC9dT1MyW1xcL11JTlNUQUxMW1xcL10qIHwgXAogICAvdXNyL3VjYi8qICkgOzsKICAgKikKICAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgpAQCAtMjIxOSwxNyArMjc1MywyOSBAQAogCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KIAkgICAgOgogCSAgZWxzZQotCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCi0JICAgIGJyZWFrIDMKKwkgICAgcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisJICAgIGVjaG8gb25lID4gY29uZnRlc3Qub25lCisJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCisJICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3QudHdvCisJICAgIHRoZW4KKwkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisJICAgICAgYnJlYWsgMworCSAgICBmaQogCSAgZmkKIAlmaQogICAgICAgZG9uZQogICAgIGRvbmUKICAgICA7OwogZXNhYwotZG9uZQorCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAorcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCiAKIGZpCiAgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCkBAIC0yMjQyLDggKzI3ODgsOCBAQAogICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKICAgZmkKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRJTlNUQUxMIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CiskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQogCiAjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCiAjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgpAQCAtMjI1MywyMSArMjc5OSwzNCBAQAogCiB0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JwogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gJEVDSE9fQyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gIiA+JjY7IH0KICMgSnVzdCBpbiBjYXNlCiBzbGVlcCAxCiBlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCithbV9sZj0nCisnCitjYXNlIGBwd2RgIGluCisgICpbXFxcIlwjXCRcJlwnXGAkYW1fbGZdKikKKyAgICBhc19mbl9lcnJvciAidW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWUiICIkTElORU5PIiA1OzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV0qKQorICAgIGFzX2ZuX2Vycm9yICJ1bnNhZmUgc3JjZGlyIHZhbHVlOiBcYCRzcmNkaXInIiAiJExJTkVOTyIgNTs7Citlc2FjCisKICMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKICMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQogIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcwogIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKICMgZGlyZWN0b3J5KS4KIGlmICgKLSAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCiAgICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KICAgICAgICMgLUwgZGlkbid0IHdvcmsuCi0gICAgICBzZXQgWCBgbHMgLXQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZWAKKyAgICAgIHNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCiAgICBmaQogICAgcm0gLWYgY29uZnRlc3QuZmlsZQogICAgaWYgdGVzdCAiJCoiICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKQEAgLTIyNzcsMTEgKzI4MzYsOCBAQAogICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQogICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQogICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgotICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgotYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCi1hbGlhcyBpbiB5b3VyIGVudmlyb25tZW50IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICBhc19mbl9lcnJvciAibHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgIiRMSU5FTk8iIDUKICAgIGZpCiAKICAgIHRlc3QgIiQyIiA9IGNvbmZ0ZXN0LmZpbGUKQEAgLTIyOTAsNTIgKzI4NDYsMTYyIEBACiAgICAjIE9rLgogICAgOgogZWxzZQotICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCi1DaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKLUNoZWNrIHlvdXIgc3lzdGVtIGNsb2NrIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICBhc19mbl9lcnJvciAibmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgIiRMSU5FTk8iIDUKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgogICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJl4mJHByb2dyYW1fcHJlZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKICMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgogdGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCiAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKLSMgRG91YmxlIGFueSBcIG9yICQuICBlY2hvIG1pZ2h0IGludGVycHJldCBiYWNrc2xhc2hlcy4KKyMgRG91YmxlIGFueSBcIG9yICQuCiAjIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgotY2F0IDw8XF9BQ0VPRiA+Y29uZnRlc3Quc2VkCi1zL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vCi1fQUNFT0YKLXByb2dyYW1fdHJhbnNmb3JtX25hbWU9YGVjaG8gJHByb2dyYW1fdHJhbnNmb3JtX25hbWUgfCBzZWQgLWYgY29uZnRlc3Quc2VkYAotcm0gLWYgY29uZnRlc3Quc2VkCithY19zY3JpcHQ9J3MvW1xcJF0vJiYvZztzLztzLHgseCwkLy8nCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPWAkYXNfZWNobyAiJHByb2dyYW1fdHJhbnNmb3JtX25hbWUiIHwgc2VkICIkYWNfc2NyaXB0ImAKIAogIyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAogYW1fYXV4X2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAogCi10ZXN0IHgiJHtNSVNTSU5HK3NldH0iID0geHNldCB8fCBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKK2lmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKKyAgKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKyAgZXNhYworZmkKICMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAogaWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KICAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKIGVsc2UKICAgYW1fbWlzc2luZ19ydW49Ci0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjI7fQogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSB0aHJlYWQtc2FmZSBta2RpciAtcC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgeCIke2luc3RhbGxfc2h9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICckYW1fYXV4X2Rpci9pbnN0YWxsLXNoJyIgOzsKKyAgKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCIKKyAgZXNhYworZmkKKworIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCisjIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0CisjIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCisjIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAoraWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+JjUKKyRhc19lY2hvICIkU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICBhY19jdF9TVFJJUD0kU1RSSVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKK2lmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgorICAgIFNUUklQPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFNUUklQPSRhY19jdF9TVFJJUAorICBmaQorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCitmaQorSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSB0aHJlYWQtc2FmZSBta2RpciAtcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSB0aHJlYWQtc2FmZSBta2RpciAtcC4uLiAiID4mNjsgfQogaWYgdGVzdCAteiAiJE1LRElSX1AiOyB0aGVuCi0gIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfbWtkaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL29wdC9zZncvYmluCiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19wcm9nIGluIG1rZGlyIGdta2RpcjsgZG8KKyAgICBmb3IgYWNfcHJvZyBpbiBta2RpciBnbWtkaXI7IGRvCiAJIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogCSAgIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IH0gfHwgY29udGludWUKIAkgICBjYXNlIGAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLS12ZXJzaW9uIDI+JjFgIGluICMoCkBAIC0yMzQ3LDExICszMDEzLDEyIEBACiAJICAgZXNhYwogCSBkb25lCiAgICAgICAgZG9uZQotZG9uZQorICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiAKKyAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgogICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfbWtkaXIrc2V0fSIgPSBzZXQ7IHRoZW4KICAgICBNS0RJUl9QPSIkYWNfY3ZfcGF0aF9ta2RpciAtcCIKICAgZWxzZQpAQCAtMjM1OSwxMiArMzAyNiwxMSBAQAogICAgICMgdmFsdWUgZm9yIE1LRElSX1Agd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKICAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcwogICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KLSAgICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCiAgICAgTUtESVJfUD0iJGFjX2luc3RhbGxfc2ggLWQiCiAgIGZpCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUtESVJfUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTUtESVJfUCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1LRElSX1AiID4mNQorJGFzX2VjaG8gIiRNS0RJUl9QIiA+JjY7IH0KIAogbWtkaXJfcD0iJE1LRElSX1AiCiBjYXNlICRta2Rpcl9wIGluCkBAIC0yMzc2LDEwICszMDQyLDEwIEBACiBkbwogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX0FXSytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVdLK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMjM4OSwzNiArMzA1NSwzNyBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogQVdLPSRhY19jdl9wcm9nX0FXSwogaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVdLIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRBV0siID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFXSyIgPiY1CiskYXNfZWNobyAiJEFXSyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIAogICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhawogZG9uZQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAkRUNIT19DIiA+JjY7IH0KLXNldCB4ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKLWlmIHsgYXNfdmFyPWFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldDsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gIiA+JjY7IH0KK3NldCB4ICR7TUFLRS1tYWtlfQorYWNfbWFrZT1gJGFzX2VjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCitpZiB7IGFzX3Zhcj1hY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCiBTSEVMTCA9IC9iaW4vc2gKQEAgLTI0MzUsMTIgKzMxMDIsMTIgQEAKIHJtIC1mIGNvbmZ0ZXN0Lm1ha2UKIGZpCiBpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KICAgU0VUX01BS0U9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KICAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgogZmkKIApAQCAtMjQ1OSw5ICszMTI2LDcgQEAKICAgYW1fX2lzcmM9JyAtSSQoc3JjZGlyKScKICAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCiAgIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAic291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiICIkTElORU5PIiA1CiAgIGZpCiBmaQogCkBAIC0yNDc3LDcgKzMxNDIsNyBAQAogCiAjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCiAgUEFDS0FHRT0nbGliZmZpJwotIFZFUlNJT049JzMuMC41JworIFZFUlNJT049JzMuMC4xMHJjMCcKIAogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCkBAIC0yNTA1LDExMiArMzE3MCw2IEBACiAKIE1BS0VJTkZPPSR7TUFLRUlORk8tIiR7YW1fbWlzc2luZ19ydW59bWFrZWluZm8ifQogCi1pbnN0YWxsX3NoPSR7aW5zdGFsbF9zaC0iXCQoU0hFTEwpICRhbV9hdXhfZGlyL2luc3RhbGwtc2gifQotCi0jIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKLSMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKLSMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKLSMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKLWlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU1RSSVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JFNUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KLSAgYWNfY3RfU1RSSVA9JFNUUklQCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKLWlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1NUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgotICAgIFNUUklQPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgU1RSSVA9JGFjX2N0X1NUUklQCi0gIGZpCi1lbHNlCi0gIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKLWZpCi0KLWZpCi1JTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgotCiAjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgogIyBzb21lIHBsYXRmb3Jtcy4KICMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KQEAgLTI2MzksMTAgKzMxOTgsMTAgQEAKIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0yNjUyLDI1ICszMjExLDI1IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIENDPSRhY19jdl9wcm9nX0NDCiBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIApAQCAtMjY3OSwxMCArMzIzOCwxMCBAQAogICBhY19jdF9DQz0kQ0MKICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTI2OTIsMjUgKzMyNTEsMjUgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIGFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCiBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKICAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCkBAIC0yNzE4LDEyICszMjc3LDggQEAKICAgZWxzZQogICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KIHllczopCi17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KIGFjX3Rvb2xfd2FybmVkPXllcyA7OwogZXNhYwogICAgIENDPSRhY19jdF9DQwpAQCAtMjczNiwxMCArMzI5MSwxMCBAQAogICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0yNzQ5LDI1ICszMzA0LDI1IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCkBAIC0yNzc2LDEwICszMzMxLDEwIEBACiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMjc5MCwxOCArMzM0NSwxOCBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgogICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCiAgICAgICAgY29udGludWUKICAgICAgZmkKICAgICBhY19jdl9wcm9nX0NDPSJjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKIGlmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KQEAgLTI4MjAsMTEgKzMzNzUsMTEgQEAKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAKQEAgLTI4MzUsMTAgKzMzOTAsMTAgQEAKICAgZG8KICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTI4NDgsMjUgKzM0MDMsMjUgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCkBAIC0yODc5LDEwICszNDM0LDEwIEBACiBkbwogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTI4OTIsMjUgKzM0NDcsMjUgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCkBAIC0yOTIyLDEyICszNDc3LDggQEAKICAgZWxzZQogICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KIHllczopCi17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KIGFjX3Rvb2xfd2FybmVkPXllcyA7OwogZXNhYwogICAgIENDPSRhY19jdF9DQwpAQCAtMjkzNyw1MSArMzQ4OCwzNyBAQAogZmkKIAogCi10ZXN0IC16ICIkQ0MiICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cit0ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQogCiAjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1hY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCi17IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgogY2FzZSAiKCgkYWNfdHJ5IiBpbgogICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CiBlc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLXYgPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyIC12ID4mNSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQogCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0yOTkzLDQyICszNTMwLDM4IEBACiB9CiBfQUNFT0YKIGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCi1hY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEuZXhlIGIub3V0IgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGIub3V0IgogIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgogIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgogIyBvZiBleGVleHQuCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1hY19saW5rX2RlZmF1bHQ9YGVjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCi0jCi0jIExpc3Qgb2YgcG9zc2libGUgb3V0cHV0IGZpbGVzLCBzdGFydGluZyBmcm9tIHRoZSBtb3N0IGxpa2VseS4KLSMgVGhlIGFsZ29yaXRobSBpcyBub3Qgcm9idXN0IHRvIGp1bmsgaW4gYC4nLCBoZW5jZSBnbyB0byB3aWxkY2FyZHMgKGEuKikKLSMgb25seSBhcyBhIGxhc3QgcmVzb3J0LiAgYi5vdXQgaXMgY3JlYXRlZCBieSBpOTYwIGNvbXBpbGVycy4KLWFjX2ZpbGVzPSdhX291dC5leGUgYS5leGUgY29uZnRlc3QuZXhlIGEub3V0IGNvbmZ0ZXN0IGEuKiBjb25mdGVzdC4qIGIub3V0JwotIwotIyBUaGUgSVJJWCA2IGxpbmtlciB3cml0ZXMgaW50byBleGlzdGluZyBmaWxlcyB3aGljaCBtYXkgbm90IGJlCi0jIGV4ZWN1dGFibGUsIHJldGFpbmluZyB0aGVpciBwZXJtaXNzaW9ucy4gIFJlbW92ZSB0aGVtIGZpcnN0IHNvIGEKLSMgc3Vic2VxdWVudCBleGVjdXRpb24gdGVzdCB3b3Jrcy4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICIgPiY2OyB9CithY19saW5rX2RlZmF1bHQ9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAorCisjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6CithY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgorCiBhY19ybWZpbGVzPQogZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCiBkbwogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5vIHwgKi5vYmogKSA7OworICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKICAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKICAgZXNhYwogZG9uZQogcm0gLWYgJGFjX3JtZmlsZXMKIAotaWYgeyAoYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgoraWYgeyB7IGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKIGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKICAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKICAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRvIGBubycuCiAjIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdvdWxkIGxlYWQgdG8gYEVYRUVYVCA9IG5vJwogIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5vdCBvdmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwKQEAgLTMwMzgsMTQgKzM1NzEsMTQgQEAKIGRvCiAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5vIHwgKi5vYmogKQorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkKIAk7OwogICAgIFthYl0ub3V0ICkKIAkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAogCSMgY2VydGFpbmx5IHJpZ2h0LgogCWJyZWFrOzsKICAgICAqLiogKQotICAgICAgICBpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKwlpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKIAl0aGVuIDo7IGVsc2UKIAkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKIAlmaQpAQCAtMzA2NCw3OCArMzU5Nyw0MiBAQAogZWxzZQogICBhY19maWxlPScnCiBmaQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19maWxlIiA+JjY7IH0KLWlmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbgotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQoraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoreyBhc19mbl9zZXRfc3RhdHVzIDc3Cithc19mbl9lcnJvciAiQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KIGZpCi0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYWNfZmlsZSIgPiY2OyB9CiBhY19leGVleHQ9JGFjX2N2X2V4ZWV4dAogCi0jIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgotIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci0jIEZJWE1FOiBUaGVzZSBjcm9zcyBjb21waWxlciBoYWNrcyBzaG91bGQgYmUgcmVtb3ZlZCBmb3IgQXV0b2NvbmYgMy4wCi0jIElmIG5vdCBjcm9zcyBjb21waWxpbmcsIGNoZWNrIHRoYXQgd2UgY2FuIHJ1biBhIHNpbXBsZSBwcm9ncmFtLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCi0gIGlmIHsgYWNfdHJ5PScuLyRhY19maWxlJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICAgIGNyb3NzX2NvbXBpbGluZz1ubwotICBlbHNlCi0gICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgotCWNyb3NzX2NvbXBpbGluZz15ZXMKLSAgICBlbHNlCi0JeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgotSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCi1JZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgZmkKLSAgZmkKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQotCi1ybSAtZiBhLm91dCBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CiBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQotIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKLSMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAkRUNIT19DIiA+JjY7IH0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KK2lmIHsgeyBhY190cnk9IiRhY19saW5rIgogY2FzZSAiKCgkYWNfdHJ5IiBpbgogICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CiBlc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQogICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKICAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCiAjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKICMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCkBAIC0zMTQzLDM3ICszNjQwLDkwIEBACiBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OwogICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAogCSAgYnJlYWs7OwogICAgICogKSBicmVhazs7CiAgIGVzYWMKIGRvbmUKIGVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CiBmaQotCi1ybSAtZiBjb25mdGVzdCRhY19jdl9leGVleHQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZXhlZXh0IiA+JjY7IH0KK3JtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQogCiBybSAtZiBjb25mdGVzdC4kYWNfZXh0CiBFWEVFWFQ9JGFjX2N2X2V4ZWV4dAogYWNfZXhlZXh0PSRFWEVFWFQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK0ZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CiBfQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBjb25mdGVzdC5vdXQiCisjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CisgICAgZmkKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CiskYXNfZWNobyAiJGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9CisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGNvbmZ0ZXN0Lm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTMxODUsNTEgKzM3MzUsNDYgQEAKIH0KIF9BQ0VPRgogcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKIGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKICAgKGV2YWwgIiRhY19jb21waWxlIikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CiAgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCiAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKICAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiApIDs7CisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKICAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKICAgICAgICBicmVhazs7CiAgIGVzYWMKIGRvbmUKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KIGZpCi0KIHJtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfb2JqZXh0IiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KIE9CSkVYVD0kYWNfY3Zfb2JqZXh0CiBhY19vYmpleHQ9JE9CSkVYVAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0zMjQzLDU0ICszNzg4LDM0IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2NvbXBpbGVyX2dudT15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2NvbXBpbGVyX2dudT1ubworICBhY19jb21waWxlcl9nbnU9bm8KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KLUdDQz1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCiBhY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CiBhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKICAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCiAgICBhY19jdl9wcm9nX2NjX2c9bm8KICAgIENGTEFHUz0iLWciCi0gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0zMzAxLDM0ICszODI2LDExIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X3Byb2dfY2NfZz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCUNGTEFHUz0iIgotICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIENGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTMzMzksMzUgKzM4NDEsMTIgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogCi0JYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZwogCSBDRkxBR1M9Ii1nIgotCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTMzNzgsNDIgKzM4NTcsMTggQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfcHJvZ19jY19nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKICAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KIGlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KICAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUwogZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KQEAgLTM0MjksMTggKzM4ODQsMTQgQEAKICAgICBDRkxBR1M9CiAgIGZpCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jdl9wcm9nX2NjX2M4OT1ubwogYWNfc2F2ZV9DQz0kQ0MKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0zNDk3LDMxICszOTQ4LDkgQEAKIAktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgogZG8KICAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCi0gIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQogZmkKLQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAogICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhawogZG9uZQpAQCAtMzUzMiwxNyArMzk2MSwxOSBAQAogIyBBQ19DQUNIRV9WQUwKIGNhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCiAgIHgpCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH1ub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CiAgIHhubykKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKICAgKikKICAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7CiBlc2FjCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgogCitmaQogCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKQEAgLTM1NTcsNDQgKzM5ODgsNDQgQEAKIGFtX21ha2U9JHtNQUtFLW1ha2V9CiBjYXQgPiBjb25maW5jIDw8ICdFTkQnCiBhbV9fZG9pdDoKLQlAZWNobyBkb25lCisJQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0CiAuUEhPTlk6IGFtX19kb2l0CiBFTkQKICMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICRFQ0hPX0MiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UuLi4gIiA+JjY7IH0KIGFtX19pbmNsdWRlPSIjIgogYW1fX3F1b3RlPQogX2FtX3Jlc3VsdD1ub25lCiAjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgogZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgotIyBXZSBncmVwIG91dCBgRW50ZXJpbmcgZGlyZWN0b3J5JyBhbmQgYExlYXZpbmcgZGlyZWN0b3J5JwotIyBtZXNzYWdlcyB3aGljaCBjYW4gb2NjdXIgaWYgYHcnIGVuZHMgdXAgaW4gTUFLRUZMQUdTLgotIyBJbiBwYXJ0aWN1bGFyIHdlIGRvbid0IGxvb2sgYXQgYF5tYWtlOicgYmVjYXVzZSBHTlUgbWFrZSBtaWdodAotIyBiZSBpbnZva2VkIHVuZGVyIHNvbWUgb3RoZXIgbmFtZSAodXN1YWxseSAiZ21ha2UiKSwgaW4gd2hpY2gKLSMgY2FzZSBpdCBwcmludHMgaXRzIG5ldyBuYW1lIGluc3RlYWQgb2YgYG1ha2UnLgotaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGwgfCBncmVwIC12ICdpbmcgZGlyZWN0b3J5J2AiID0gImRvbmUiOyB0aGVuCi0gICBhbV9faW5jbHVkZT1pbmNsdWRlCi0gICBhbV9fcXVvdGU9Ci0gICBfYW1fcmVzdWx0PUdOVQotZmkKKyMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tIGBtYWtlJy4KK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgYW1fX2luY2x1ZGU9aW5jbHVkZQorICBhbV9fcXVvdGU9CisgIF9hbV9yZXN1bHQ9R05VCisgIDs7Citlc2FjCiAjIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KIGlmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KICAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKLSAgIGlmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCIgPSAiZG9uZSI7IHRoZW4KLSAgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCi0gICAgICBhbV9fcXVvdGU9IlwiIgotICAgICAgX2FtX3Jlc3VsdD1CU0QKLSAgIGZpCisgICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorICAgKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCisgICAgIGFtX19xdW90ZT0iXCIiCisgICAgIF9hbV9yZXN1bHQ9QlNECisgICAgIDs7CisgICBlc2FjCiBmaQogCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJF9hbV9yZXN1bHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JF9hbV9yZXN1bHQiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkX2FtX3Jlc3VsdCIgPiY2OyB9CiBybSAtZiBjb25maW5jIGNvbmZtZgogCiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nK3NldH0iID0gc2V0OyB0aGVuCitpZiB0ZXN0ICIke2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nK3NldH0iID0gc2V0OyB0aGVuIDoKICAgZW5hYmxldmFsPSRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZzsKIGZpCiAKQEAgLTM2MTQsMTAgKzQwNDUsMTAgQEAKIAogZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KICAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cApAQCAtMzY0Miw2ICs0MDczLDExIEBACiAgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCiAgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCiAgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWMKKwogICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KICAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKICAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCkBAIC0zNjU5LDcgKzQwOTUsMTcgQEAKICAgICBkb25lCiAgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgogCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMKKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgogICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CiAgICAgbm9zaWRlZWZmZWN0KQogICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCiAgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCkBAIC0zNjY5LDE5ICs0MTE1LDIzIEBACiAJYnJlYWsKICAgICAgIGZpCiAgICAgICA7OworICAgIG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CiAgICAgbm9uZSkgYnJlYWsgOzsKICAgICBlc2FjCi0gICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KICAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCiAgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKICAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKICAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCiAgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgogICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgogICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwogICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKQEAgLTM3MDUsOCArNDE1NSw4IEBACiBmaQogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CiBDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKIAogIGlmCkBAIC0zNzI0LDYgKzQxNzQsNyBAQAogCiAKIAorCiAjIEJ5IGRlZmF1bHQgd2Ugc2ltcGx5IHVzZSB0aGUgQyBjb21waWxlciB0byBidWlsZCBhc3NlbWJseSBjb2RlLgogCiB0ZXN0ICIke0NDQVMrc2V0fSIgPSBzZXQgfHwgQ0NBUz0kQ0MKQEAgLTM3MzMsMTAgKzQxODQsMTAgQEAKIAogZGVwY2M9IiRDQ0FTIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KICAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cApAQCAtMzc2MSw2ICs0MjEyLDkgQEAKICAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KICAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKICAgZmkKKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorCisKICAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCiAgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCiAgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZApAQCAtMzc3OCw3ICs0MjMyLDE3IEBACiAgICAgZG9uZQogICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKIAorICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKICAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OwogICAgIG5vc2lkZWVmZmVjdCkKICAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAogICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZApAQCAtMzc4OCwxOSArNDI1MiwyMyBAQAogCWJyZWFrCiAgICAgICBmaQogICAgICAgOzsKKyAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OwogICAgIG5vbmUpIGJyZWFrIDs7CiAgICAgZXNhYwotICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCiAgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAogICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCiAgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCiAgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgogICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKICAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKICAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCkBAIC0zODI0LDggKzQyOTIsOCBAQAogZmkKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CiBDQ0FTREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCiAKICBpZgpAQCAtMzg0MCwyMiArNDMwOCwxOCBAQAogCiAKIGlmIHRlc3QgIngkQ0MiICE9IHhjYzsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhbmQgY2MgdW5kZXJzdGFuZCAtYyBhbmQgLW8gdG9nZXRoZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhbmQgY2MgdW5kZXJzdGFuZCAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gJEVDSE9fQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYW5kIGNjIHVuZGVyc3RhbmQgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlci4uLiAiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgY2MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICRFQ0hPX0MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgY2MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgY2MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICIgPiY2OyB9CiBmaQotc2V0IGR1bW15ICRDQzsgYWNfY2M9YGVjaG8gJDIgfAorc2V0IGR1bW15ICRDQzsgYWNfY2M9YCRhc19lY2hvICIkMiIgfAogCQkgICAgICBzZWQgJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nYAotaWYgeyBhc192YXI9YWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX287IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2lmIHsgYXNfdmFyPWFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0zODcxLDU4ICs0MzM1LDYzIEBACiAjIGV4aXN0aW5nIC5vIGZpbGUgd2l0aCAtbywgdGhvdWdoIHRoZXkgd2lsbCBjcmVhdGUgb25lLgogYWNfdHJ5PSckQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCA+JjUnCiBybSAtZiBjb25mdGVzdDIuKgotaWYgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgoraWYgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKICAgKGV2YWwgIiRhY190cnkiKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0gICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYKKyAgIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQgJiYgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKICAgKGV2YWwgIiRhY190cnkiKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsKIHRoZW4KICAgZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz15ZXMKICAgaWYgdGVzdCAieCRDQyIgIT0geGNjOyB0aGVuCiAgICAgIyBUZXN0IGZpcnN0IHRoYXQgY2MgZXhpc3RzIGF0IGFsbC4KICAgICBpZiB7IGFjX3RyeT0nY2MgLWMgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKICAgKGV2YWwgIiRhY190cnkiKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCiAgICAgICBhY190cnk9J2NjIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiY1JwogICAgICAgcm0gLWYgY29uZnRlc3QyLioKLSAgICAgIGlmIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgICAgIGlmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfdHJ5IikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYKKwkgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgogICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CiBlc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQogICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OwogICAgICAgdGhlbgogCSMgY2Mgd29ya3MgdG9vLgogCToKQEAgLTM5MzksMjMgKzQ0MDgsMjIgQEAKIAogZmkKIGlmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vID0geWVzOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTk9fTUlOVVNfQ19NSU5VU19PIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgTk9fTUlOVVNfQ19NSU5VU19PIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCiAjIEZJWE1FOiB3ZSByZWx5IG9uIHRoZSBjYWNoZSB2YXJpYWJsZSBuYW1lIGJlY2F1c2UKICMgdGhlcmUgaXMgbm8gb3RoZXIgd2F5Lgogc2V0IGR1bW15ICRDQwotYWNfY2M9YGVjaG8gJDIgfCBzZWQgJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nYAotaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfcHJvZ19jY18nJHthY19jY31fY19vYFwiICE9IHllcyI7IHRoZW4KK2FtX2NjPWBlY2hvICQyIHwgc2VkICdzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2AKK2V2YWwgYW1fdD1cJGFjX2N2X3Byb2dfY2NfJHthbV9jY31fY19vCitpZiB0ZXN0ICIkYW1fdCIgIT0geWVzOyB0aGVuCiAgICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgogICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KICAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgpAQCAtMzk2NSwxNzYgKzQ0MzMsMTQ3IEBACiBmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0kZW5hYmxlX3NoYXJlZDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zaGFyZWQ9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjCitjYXNlIGBwd2RgIGluCisgICpcICogfCAqXAkqKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIFxgcHdkXGAiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIFxgcHdkXGAiID4mMjt9IDs7Citlc2FjCisKKworCittYWNyb192ZXJzaW9uPScyLjIuNicKK21hY3JvX3JldmlzaW9uPScxLjMwMTInCisKKworCisKKworCisKKworCisKKworCisKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9TRUQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBlbmFibGVfc2hhcmVkPXllcwotZmkKLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9JGVuYWJsZV9zdGF0aWM7IHA9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OwotICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7Ci0gICAgKikKLSAgICAgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zdGF0aWM9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjCi1lbHNlCi0gIGVuYWJsZV9zdGF0aWM9eWVzCi1maQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjCi1lbHNlCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi1maQotCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9TRUQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCi0jIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgICAgICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKKyAgICAgZG9uZQorICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorICAgICB7IGFjX3NjcmlwdD07IHVuc2V0IGFjX3NjcmlwdDt9CisgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIGZpCisgICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfU0VEIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9TRUQiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX1NFRAorY2FzZSBgIiRhY19wYXRoX1NFRCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIgYWNfcGF0aF9TRURfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJycgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9TRUQiIC1mIGNvbmZ0ZXN0LnNlZCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfU0VEX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIgorICAgICAgYWNfcGF0aF9TRURfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9TRURfZm91bmQgJiYgYnJlYWsgMwogICAgIGRvbmUKICAgZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotbHRfYWNfbWF4PTAKLWx0X2FjX2NvdW50PTAKLSMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCi0jIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgotZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCi0gIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCi0gIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgotICBsdF9hY19jb3VudD0wCi0gIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgotICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCi0gIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCi0gICAgYnJlYWsKLSAgZmkKLSAgd2hpbGUgdHJ1ZTsgZG8KLSAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAotICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgotICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCi0gICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCi0gICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKLSAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCi0gICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKLSAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgotICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAotICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAotICAgIGZpCiAgIGRvbmUKLWRvbmUKLQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAogZmkKIAotU0VEPSRsdF9jdl9wYXRoX1NFRAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9TRUQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX1NFRCIgPiY2OyB9CisgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTRUQiID4mNQotZWNobyAiJHtFQ0hPX1R9JFNFRCIgPiY2OyB9Cit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdyZXAgZ2dyZXAiIHRvIHVzZSBpbiBtc2cgb3V0cHV0Ci1pZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KLXNldCBkdW1teSBncmVwIGdncmVwOyBhY19wcm9nX25hbWU9JDIKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgogICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKLSMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgIGFjX3BhdGhfR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0dSRVAiOyB9IHx8IGNvbnRpbnVlCi0gICAgIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0dSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCiAgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCiBjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCiAqR05VKikKICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CiAqKQogICBhY19jb3VudD0wCi0gIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID4iY29uZnRlc3QuaW4iCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgogICB3aGlsZSA6CiAgIGRvCiAgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKICAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCiAgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCiAgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKICAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCi0gICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKICAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCiAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKICAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKQEAgLTQxNDYsNzcgKzQ1ODUsNjEgQEAKICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7CiBlc2FjCiAKLQotICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQogICBkb25lCi1kb25lCi0KLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwotCi0KLWZpCi0KLUdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCi1pZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCiBlbHNlCiAgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAogZmkKIAotCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0dSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQogIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0VHUkVQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCiAgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgogICAgZWxzZQotICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImVncmVwIiB0byB1c2UgaW4gbXNnIG91dHB1dAotaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgotc2V0IGR1bW15IGVncmVwOyBhY19wcm9nX25hbWU9JDIKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCiAgIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKLSMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19wcm9nIGluIGVncmVwOyBkbwotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgotICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRUdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0VHUkVQIjsgfSB8fCBjb250aW51ZQotICAgICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgogICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKIGNhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCiAqR05VKikKICAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CiAqKQogICBhY19jb3VudD0wCi0gIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID4iY29uZnRlc3QuaW4iCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgogICB3aGlsZSA6CiAgIGRvCiAgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKICAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCiAgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKICAgICAiJGFjX3BhdGhfRUdSRVAiICdFR1JFUCQnIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKICAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCi0gICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKICAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgogICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCiAgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKQEAgLTQyMjgsMzkgKzQ2NTEsMTE0IEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OwogZXNhYwogCi0KLSAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQogICBkb25lCi1kb25lCi0KLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwotCi0KLWZpCi0KLUVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKLWlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0VHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIGVncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKIGVsc2UKICAgYWNfY3ZfcGF0aF9FR1JFUD0kRUdSRVAKIGZpCiAKKyAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9FR1JFUCIgPiY2OyB9CisgRUdSRVA9IiRhY19jdl9wYXRoX0VHUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmZ3JlcC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0ZHUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRkdSRVA9IiRHUkVQIC1GIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRkdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRkdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBmZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRkdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0ZHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9GR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0ZHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9GR1JFUAorY2FzZSBgIiRhY19wYXRoX0ZHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIgYWNfcGF0aF9GR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRkdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRkdSRVAiIEZHUkVQIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9GR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiCisgICAgICBhY19wYXRoX0ZHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfRkdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0ZHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIGZncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9GR1JFUD0kRkdSRVAKK2ZpCiAKICAgIGZpCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9FR1JFUCIgPiY2OyB9Ci0gRUdSRVA9IiRhY19jdl9wYXRoX0VHUkVQIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0ZHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9GR1JFUCIgPiY2OyB9CisgRkdSRVA9IiRhY19jdl9wYXRoX0ZHUkVQIgorCisKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKKworCisKKworCisKKworCisKKworCisKKworCisKKwogCiAKIAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKIGVsc2UKICAgd2l0aF9nbnVfbGQ9bm8KQEAgLTQyNjksOCArNDc2Nyw4IEBACiBhY19wcm9nPWxkCiBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICRFQ0hPX0MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KICAgY2FzZSAkaG9zdCBpbgogICAqLSotbWluZ3cqKQogICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKQEAgLTQyODMsOSArNDc4MSw5IEBACiAgICAgW1xcL10qIHwgPzpbXFwvXSopCiAgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCiAgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKLSAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCi0JYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAogICAgICAgZG9uZQogICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCiAgICAgICA7OwpAQCAtNDI5OSwxNCArNDc5NywxNCBAQAogICAgIDs7CiAgIGVzYWMKIGVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQogZmkKLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9MRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgogICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKQEAgLTQzMzYsMTkgKzQ4MzQsMTcgQEAKIAogTEQ9IiRsdF9jdl9wYXRoX0xEIgogaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRMRCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTEQiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQotdGVzdCAteiAiJExEIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3Rlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgIm5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KIGNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCkBAIC00MzYwLDQwICs0ODU2LDIyIEBACiAgIDs7CiBlc2FjCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9CiB3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJwotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9Ci1yZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKLWNhc2UgJHJlbG9hZF9mbGFnIGluCi0iIiB8ICIgIiopIDs7Ci0qKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKLWVzYWMKLXJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgZGFyd2luKikKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGVsc2UKLSAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBmaQotICAgIDs7Ci1lc2FjCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBCU0QtY29tcGF0aWJsZSBubSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBCU0QtY29tcGF0aWJsZSBubS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9OTStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTk0rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCiAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtNDQzNiwyOCArNDkxNCw0OTMgQEAKICAgICBkb25lCiAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCiAgIGRvbmUKLSAgdGVzdCAteiAiJGx0X2N2X3BhdGhfTk0iICYmIGx0X2N2X3BhdGhfTk09bm0KKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CiBmaQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3BhdGhfTk0iID4mNjsgfQotTk09IiRsdF9jdl9wYXRoX05NIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9OTSIgPiY2OyB9CitpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICBOTT0iJGx0X2N2X3BhdGhfTk0iCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluICJkdW1wYmluIC1zeW1ib2xzIiAibGluayAtZHVtcCAtc3ltYm9scyIKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRFVNUEJJTitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX0RVTVBCSU49IiREVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQorZmkKK2ZpCitEVU1QQklOPSRhY19jdl9wcm9nX0RVTVBCSU4KK2lmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERVTVBCSU4iID4mNQorJGFzX2VjaG8gIiREVU1QQklOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkRFVNUEJJTiIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiREVU1QQklOIjsgdGhlbgorICBhY19jdF9EVU1QQklOPSREVU1QQklOCisgIGZvciBhY19wcm9nIGluICJkdW1wYmluIC1zeW1ib2xzIiAibGluayAtZHVtcCAtc3ltYm9scyIKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX2N0X0RVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9EVU1QQklOPSRhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4KK2lmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RVTVBCSU4iID4mNQorJGFzX2VjaG8gIiRhY19jdF9EVU1QQklOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9EVU1QQklOIiA9IHg7IHRoZW4KKyAgICBEVU1QQklOPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERVTVBCSU49JGFjX2N0X0RVTVBCSU4KKyAgZmkKK2ZpCisKKworICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCisgICAgTk09IiREVU1QQklOIgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X25tX2ludGVyZmFjZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjUwNDU6ICRhY19jb21waWxlXCIiID4mNSkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjUwNDg6ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiY1KQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjUwNTE6IG91dHB1dFwiIiA+JjUpCisgIGNhdCBjb25mdGVzdC5vdXQgPiY1CisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X25tX2ludGVyZmFjZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X25tX2ludGVyZmFjZSIgPiY2OyB9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICIgPiY2OyB9CiBMTl9TPSRhc19sbl9zCiBpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorJGFzX2VjaG8gIm5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CiBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX21heF9jbWRfbGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICBpPTAKKyAgdGVzdHN0cmluZz0iQUJDRCIKKworICBjYXNlICRidWlsZF9vcyBpbgorICBtc2Rvc2RqZ3BwKikKKyAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCisgICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCisgICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorICAgIDs7CisKKyAgZ251KikKKyAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKKyAgICA7OworCisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKyAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCisgICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKyAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKKyAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYW1pZ2FvcyopCisgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbCSBdLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYCRTSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlhYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCisJICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgICBkbworICAgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKyAgICAgIHRlc3RzdHJpbmc9CisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworCitmaQorCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUiID4mNQorJGFzX2VjaG8gIm5vbmUiID4mNjsgfQorZmkKK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KKworCisKKworCisKKzogJHtDUD0iY3AgLWYifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7IH0KKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkeHNpX3NoZWxsIiA+JjUKKyRhc19lY2hvICIkeHNpX3NoZWxsIiA+JjY7IH0KKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIuLi4gIiA+JjY7IH0KK2x0X3NoZWxsX2FwcGVuZD1ubworKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJDErPVwkMiIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9zaGVsbF9hcHBlbmQiID4mNQorJGFzX2VjaG8gIiRsdF9zaGVsbF9hcHBlbmQiID4mNjsgfQorCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKKworCisKKworCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjY7IH0KK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAoraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJE9CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAoraWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKyAgICBPQkpEVU1QPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisgIGZpCitlbHNlCisgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCitmaQorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQpAQCAtNDQ3NCw3ICs1NDE3LDcgQEAKICMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCiAKIGNhc2UgJGhvc3Rfb3MgaW4KLWFpeDQqIHwgYWl4NSopCithaXhbNC05XSopCiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CiAKQEAgLTQ1MDcsMTIgKzU0NTAsMTggQEAKICAgZmkKICAgOzsKIAorY2VnY2MpCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKwogZGFyd2luKiB8IHJoYXBzb2R5KikKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIAogZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KICAgICBjYXNlICRob3N0X2NwdSBpbgogICAgIGkqODYgKQogICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KQEAgLTQ1NzAsNyArNTUxOSw3IEBACiAgIDs7CiAKIG5ldGJzZCopCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCiAgIGVsc2UKICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCkBAIC00NTgzLDEyICs1NTMyLDEyIEBACiAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbwogICA7OwogCi1udG8tcW54KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorKm50byogfCAqcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIAogb3BlbmJzZCopCi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCiAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfFwuc298X3BpY1wuYSkkJwogICBlbHNlCiAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKQEAgLTQ2MDcsNiArNTU1NiwxMCBAQAogICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAogICA7OwogCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKwogc3lzdjQgfCBzeXN2NC4zKikKICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KICAgbW90b3JvbGEpCkBAIC00NjM0LDE0ICs1NTg3LDE0IEBACiAgIGVzYWMKICAgOzsKIAotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCit0cGYqKQogICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAogICA7OwogZXNhYwogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CiBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAogdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCkBAIC00NjQ5LDYgKzU2MDIsMzY3IEBACiAKIAogCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBUj0kYWNfY3ZfcHJvZ19BUgoraWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFSIiA+JjUKKyRhc19lY2hvICIkQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorICBhY19jdF9BUj0kQVIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgIEFSPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUj0kYWNfY3RfQVIKKyAgZmkKK2Vsc2UKKyAgQVI9IiRhY19jdl9wcm9nX0FSIgorZmkKKwordGVzdCAteiAiJEFSIiAmJiBBUj1hcgordGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUkFOTElCIiA+JjUKKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CisKKworCisKKworCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwogIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KIExUQ0M9JHtMVENDLSIkQ0MifQogCkBAIC00NjU5LDggKzU5NzMsMjU4IEBACiBjb21waWxlcj0kQ0MKIAogCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW0JDREVHUlNUXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW0JDRFRdJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbQUJDREdJU1RXXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbQkNERUdSU1RdJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW0JDREVHUVJTVF0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW0JEUlRdJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbQUJEVF0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW0RGTlNUVV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCisgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAorIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKyIgICAgIC8gMCsgVU5ERUYgL3tuZXh0fTsgLyBVTkRFRiBcKFtefF1cKSooKS97bmV4dH07IlwKKyIgICAgIHtpZihoaWRlW3NlY3Rpb25dKSBuZXh0fTsiXAorIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCwgYSwgL1x8fFxyLyk7IHNwbGl0KGFbMl0sIHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IHNbMV0sIHNbMV07IG5leHR9OyJcCisiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKyIgICAgICcgcHJmeD1eJGFjX3N5bXByZngiCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorCisgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICBwaXBlX3dvcmtzPW5vCisKKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK19MVF9FT0YKKworICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3RcIiI7IH0gPiY1CisgIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX0xUX0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK2NvbnN0IHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQoreworICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCitfTFRfRU9GCisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitfTFRfRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisJICAgIHBpcGVfd29ya3M9eWVzCisJICBmaQorCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKwkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorCWVsc2UKKwkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JjUKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiY1CisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKKworICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCisgIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgorICAgIGJyZWFrCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQorICBmaQorZG9uZQorCitmaQorCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CitmaQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmYWlsZWQiID4mNQorJGFzX2VjaG8gImZhaWxlZCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBvayIgPiY1CiskYXNfZWNobyAib2siID4mNjsgfQorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKICAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOwogZmkKIApAQCAtNDY3MiwxMDggKzYyMzYsMTA3IEBACiBpYTY0LSotaHB1eCopCiAgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KICAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgogICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqRUxGLTMyKikKLSAgICAgIEhQVVhfSUE2NF9NT0RFPSIzMiIKLSAgICAgIDs7Ci0gICAgKkVMRi02NCopCi0gICAgICBIUFVYX0lBNjRfTU9ERT0iNjQiCi0gICAgICA7OworICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9IjMyIgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT0iNjQiCisJOzsKICAgICBlc2FjCiAgIGZpCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgOzsKICotKi1pcml4NiopCiAgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnI2xpbmUgNDY5MyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICBlY2hvICcjbGluZSA2MjU3ICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgotICAgICAgOzsKLSAgICBlc2FjCi0gICBlbHNlCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC0zMiIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW4zMiIKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLTY0IgotICAgICAgOzsKLSAgICBlc2FjCi0gICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKICAgZmkKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICA7OwogCiB4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKLXMzOTAqLSpsaW51eCp8c3BhcmMqLSpsaW51eCopCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQogICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0gICAgKjMyLWJpdCopCi0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKLSAgICAgICAgICA7OwotICAgICAgICB4ODZfNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCi0gICAgICAgICAgOzsKLSAgICAgICAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKLSAgICAgICAgICA7OwotICAgICAgICBzMzkweC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKLSAgICAgICAgICA7OwotICAgICAgICBzcGFyYzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgbGlic3VmZj02NAotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKLSAgICAgICAgICA7OwotICAgICAgICB4ODZfNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKLSAgICAgICAgICA7OwotICAgICAgICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCi0gICAgICAgICAgOzsKLSAgICAgICAgczM5MCotKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKLSAgICAgICAgICA7OwotICAgICAgICBzcGFyYyotKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7CisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OwogICAgIGVzYWMKICAgZmkKICAgcm0gLXJmIGNvbmZ0ZXN0KgpAQCAtNDc4MywxMCArNjM0NiwxMCBAQAogICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCiAgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgogICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9jY19uZWVkc19iZWxmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2NjX25lZWRzX2JlbGYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKQEAgLTQ3OTQsMTEgKzYzNTcsNyBAQAogYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKIAotICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTQ4MDksMzQgKzYzNjgsMTMgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBsdF9jdl9jY19uZWVkc19iZWxmPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JbHRfY3ZfY2NfbmVlZHNfYmVsZj1ubworICBsdF9jdl9jY19uZWVkc19iZWxmPW5vCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiAgICAgIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwogYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwpAQCAtNDg0NCw4ICs2MzgyLDggQEAKIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY2OyB9CiAgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCiAgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCiAgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCkBAIC00ODU0LDQzICs2MzkyLDYyOSBAQAogc3BhcmMqLSpzb2xhcmlzKikKICAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgogICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCiAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgogICAgICo2NC1iaXQqKQogICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KICAgICAgIHllcyopIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIgOzsKLSAgICAgICopICAgIExEPSIke0xELWxkfSAtNjQiIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CiAgICAgICBlc2FjCiAgICAgICA7OwogICAgIGVzYWMKICAgZmkKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICA7OwotCi0KIGVzYWMKIAogbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCiAKIAorICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kc3ltdXRpbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRFNZTVVUSUwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiREU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0RTWU1VVElMPSIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RTWU1VVElMPSRhY19jdl9wcm9nX0RTWU1VVElMCitpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiREU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N0X0RTWU1VVElMPSREU1lNVVRJTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkc3ltdXRpbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9IiRhY19jdF9EU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSJkc3ltdXRpbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9EU1lNVVRJTD0kYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RTWU1VVElMIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFNZTVVUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9EU1lNVVRJTCIgPSB4OyB0aGVuCisgICAgRFNZTVVUSUw9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFNZTVVUSUw9JGFjX2N0X0RTWU1VVElMCisgIGZpCitlbHNlCisgIERTWU1VVElMPSIkYWNfY3ZfcHJvZ19EU1lNVVRJTCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1ubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19OTUVESVQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX05NRURJVD0iJE5NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX05NRURJVD0iJHthY190b29sX3ByZWZpeH1ubWVkaXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTk1FRElUPSRhY19jdl9wcm9nX05NRURJVAoraWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICROTUVESVQiID4mNQorJGFzX2VjaG8gIiROTUVESVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX05NRURJVCI7IHRoZW4KKyAgYWNfY3RfTk1FRElUPSROTUVESVQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG5tZWRpdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTk1FRElUK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9IiRhY19jdF9OTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9Im5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9OTUVESVQ9JGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUCitpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X05NRURJVCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X05NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X05NRURJVCIgPSB4OyB0aGVuCisgICAgTk1FRElUPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE5NRURJVD0kYWNfY3RfTk1FRElUCisgIGZpCitlbHNlCisgIE5NRURJVD0iJGFjX2N2X3Byb2dfTk1FRElUIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bGlwbzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTElQTytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgorICBhY19jdl9wcm9nX0xJUE89IiRMSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfTElQTz0iJHthY190b29sX3ByZWZpeH1saXBvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0xJUE89JGFjX2N2X3Byb2dfTElQTworaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElQTyIgPiY1CiskYXNfZWNobyAiJExJUE8iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0xJUE8iOyB0aGVuCisgIGFjX2N0X0xJUE89JExJUE8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsaXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsaXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9MSVBPK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0iJGFjX2N0X0xJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSJsaXBvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0xJUE89JGFjX2N2X3Byb2dfYWNfY3RfTElQTworaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTElQTyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0xJUE8iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9MSVBPIiA9IHg7IHRoZW4KKyAgICBMSVBPPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIExJUE89JGFjX2N0X0xJUE8KKyAgZmkKK2Vsc2UKKyAgTElQTz0iJGFjX2N2X3Byb2dfTElQTyIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfT1RPT0w9IiRPVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09UT09MPSIke2FjX3Rvb2xfcHJlZml4fW90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MPSRhY19jdl9wcm9nX09UT09MCitpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0wiID4mNQorJGFzX2VjaG8gIiRPVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0wiOyB0aGVuCisgIGFjX2N0X09UT09MPSRPVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9IiRhY19jdF9PVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSJvdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09UT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTCIgPSB4OyB0aGVuCisgICAgT1RPT0w9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT1RPT0w9JGFjX2N0X09UT09MCisgIGZpCitlbHNlCisgIE9UT09MPSIkYWNfY3ZfcHJvZ19PVE9PTCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sNjQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX09UT09MNjQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIkT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09UT09MNjQ9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPVE9PTDY0PSRhY19jdl9wcm9nX09UT09MNjQKK2lmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MNjQiID4mNQorJGFzX2VjaG8gIiRPVE9PTDY0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTDY0IjsgdGhlbgorICBhY19jdF9PVE9PTDY0PSRPVE9PTDY0CisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9IiRhY19jdF9PVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0ib3Rvb2w2NCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PVE9PTDY0PSRhY19jdl9wcm9nX2FjX2N0X09UT09MNjQKK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09UT09MNjQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTDY0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0w2NCIgPSB4OyB0aGVuCisgICAgT1RPT0w2ND0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTDY0PSRhY19jdF9PVE9PTDY0CisgIGZpCitlbHNlCisgIE9UT09MNjQ9IiRhY19jdl9wcm9nX09UT09MNjQiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JjUKKwkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKyAgICAgICAgX2x0X3Jlc3VsdD0kPworCWlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyciAmJiB0ZXN0ICRfbHRfcmVzdWx0ID0gMDsgdGhlbgorCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyID4mNQorCWZpCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCXJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY2OyB9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllcworZWxzZQorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2OyB9CisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luMS4qKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luWzkxXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuWzAxMl0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworCTEwLiopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisgICAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworICAgIGZpCisgICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworICAgIGVsc2UKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgIGZpCisgICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQogIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KIGlmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCiAgIENQUD0KIGZpCiBpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgotICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1BQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCiAgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKQEAgLTQ5MDQsMTEgKzcwMjgsNyBAQAogICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaWZkZWYgX19TVERDX18KICMgaW5jbHVkZSA8bGltaXRzLmg+CkBAIC00OTE3LDc2ICs3MDM3LDM0IEBACiAjZW5kaWYKIAkJICAgICBTeW50YXggZXJyb3IKIF9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogCitlbHNlCiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBmaQotCiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAogCiAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCiAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KIF9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KICAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KIGFjX3ByZXByb2Nfb2s9OgogYnJlYWsKIGZpCi0KIHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CiAKIGRvbmUKICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgogcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CiAgIGJyZWFrCiBmaQogCkBAIC00OTk4LDggKzcwNzYsOCBAQAogZWxzZQogICBhY19jdl9wcm9nX0NQUD0kQ1BQCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1BQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDUFAiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQogYWNfcHJlcHJvY19vaz1mYWxzZQogZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCiBkbwpAQCAtNTAwOSwxMSArNzA4Nyw3IEBACiAgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgogICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAogICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpZmRlZiBfX1NURENfXwogIyBpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTUwMjIsODMgKzcwOTYsNDAgQEAKICNlbmRpZgogCQkgICAgIFN5bnRheCBlcnJvcgogX0FDRU9GCi1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CiAKK2Vsc2UKICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgogY29udGludWUKIGZpCi0KIHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CiAKICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgogX0FDRU9GCi1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgogY29udGludWUKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQogICAjIFBhc3NlcyBib3RoIHRlc3RzLgogYWNfcHJlcHJvY19vaz06CiBicmVhawogZmkKLQogcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKIAogZG9uZQogIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KLSAgOgoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCiBlbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQogZmkKIAogYWNfZXh0PWMKQEAgLTUxMDgsMTYgKzcxMzksMTIgQEAKIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CkBAIC01MTMyLDQ3ICs3MTU5LDIzIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2hlYWRlcl9zdGRjPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIDoKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKIGVsc2UKICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCkBAIC01MTgyLDE4ICs3MTg1LDE0IEBACiAKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIDoKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCiBlbHNlCiAgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQpAQCAtNTIwMywxNCArNzIwMiwxMCBAQAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgOgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC01MjM3LDExMyArNzIzMiwzNiBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2hlYWRlcl9zdGRjPW5vCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CiBmaQogCi0KIGZpCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBTVERDX0hFQURFUlMgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKICMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCi0KLQotCi0KLQotCi0KLQotCiBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKIAkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAotCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKIF9BQ0VPRgogCiBmaQpAQCAtNTM1MSwxNDYyICs3MjY5LDE5NiBAQAogZG9uZQogCiAKLQogZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCi0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWwgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiZGxmY24uaCIgImFjX2N2X2hlYWRlcl9kbGZjbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geCIieWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKIF9BQ0VPRgogCiBmaQogCiBkb25lCiAKLWFjX2V4dD1jcHAKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkQ0NDIjsgdGhlbgotICAgIENYWD0kQ0NDCi0gIGVsc2UKLSAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwogCi1maQotZmkKLUNYWD0kYWNfY3ZfcHJvZ19DWFgKLWlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ1hYIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQogCisjIFNldCBvcHRpb25zCiAKLSAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhawotICBkb25lCi1maQotaWYgdGVzdCAteiAiJENYWCI7IHRoZW4KLSAgYWNfY3RfQ1hYPSRDWFgKLSAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfY3RfQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKIAotZmkKLWZpCi1hY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NYWCIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKIAorICAgICAgICBlbmFibGVfZGxvcGVuPW5vCiAKLSAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKLWRvbmUKIAotICBpZiB0ZXN0ICJ4JGFjX2N0X0NYWCIgPSB4OyB0aGVuCi0gICAgQ1hYPSJnKysiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBDWFg9JGFjX2N0X0NYWAotICBmaQotZmkKKyAgZW5hYmxlX3dpbjMyX2RsbD1ubwogCi0gIGZpCi1maQotIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1hY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCi17IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLVYgPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyIC1WID4mNSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlci4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hva2UgbWUKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19jb21waWxlcl9nbnU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jb21waWxlcl9nbnU9bm8KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Ci0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjY7IH0KLUdYWD1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAotYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KLWFjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2N4eF9nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnPSRhY19jeHhfd2Vycm9yX2ZsYWcKLSAgIGFjX2N4eF93ZXJyb3JfZmxhZz15ZXMKLSAgIGFjX2N2X3Byb2dfY3h4X2c9bm8KLSAgIENYWEZMQUdTPSItZyIKLSAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCUNYWEZMQUdTPSIiCi0gICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKLQkgQ1hYRkxBR1M9Ii1nIgotCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2N2X3Byb2dfY3h4X2c9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZwotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQotaWYgdGVzdCAiJGFjX3Rlc3RfQ1hYRkxBR1MiID0gc2V0OyB0aGVuCi0gIENYWEZMQUdTPSRhY19zYXZlX0NYWEZMQUdTCi1lbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBDWFhGTEFHUz0iLWcgLU8yIgotICBlbHNlCi0gICAgQ1hYRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgIENYWEZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBDWFhGTEFHUz0KLSAgZmkKLWZpCi1hY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi1kZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9Ci0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCi0gICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKLSAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKLSAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKLSAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAotICAjIGluIEQnLgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgotICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAotICBmaQotICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KLSAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKLSAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCi0gICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgotICAgICMKLSAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQotICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCi0gICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCi0gICAgOiA+IHN1Yi9jb25mdGVzdC5jCi0gICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCi0gICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCi0gICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAotICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KLSAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAotICAgIGRvbmUKLSAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCi0KLSAgICBjYXNlICRkZXBtb2RlIGluCi0gICAgbm9zaWRlZWZmZWN0KQotICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCi0gICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCi0gICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KLQljb250aW51ZQotICAgICAgZWxzZQotCWJyZWFrCi0gICAgICBmaQotICAgICAgOzsKLSAgICBub25lKSBicmVhayA7OwotICAgIGVzYWMKLSAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKLSAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQotICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgotICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAotICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKLSAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCi0gICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwotICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKLSAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgotICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKLSAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAotICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8Ci0gICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICAgICAgICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZmkKLSAgZG9uZQotCi0gIGNkIC4uCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLWVsc2UKLSAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKLWZpCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9Ci1DWFhERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQotCi0gaWYKLSAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKLSAgJiYgdGVzdCAiJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCi0gIGFtX19mYXN0ZGVwQ1hYX1RSVUU9Ci0gIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPScjJwotZWxzZQotICBhbV9fZmFzdGRlcENYWF9UUlVFPScjJwotICBhbV9fZmFzdGRlcENYWF9GQUxTRT0KLWZpCi0KLQotCi0KLWlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCi0gICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8Ci0gICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCi0gIGFjX2V4dD1jcHAKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCi0gIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFhDUFArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENYWENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAotICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKLSAgICBkbwotICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi0KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KLSAgYnJlYWsKLWZpCi0KLSAgICBkb25lCi0gICAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAotCi1maQotICBDWFhDUFA9JGFjX2N2X3Byb2dfQ1hYQ1BQCi1lbHNlCi0gIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFhDUFAiID4mNQotZWNobyAiJHtFQ0hPX1R9JENYWENQUCIgPiY2OyB9Ci1hY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwotZG8KLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYwotICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KLSAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgotICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAotICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKLQkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCi1jb250aW51ZQotZmkKLQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgotX0FDRU9GCi1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKLQkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuCi0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgUGFzc2VzIGJvdGggdGVzdHMuCi1hY19wcmVwcm9jX29rPToKLWJyZWFrCi1maQotCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgotICA6Ci1lbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMrKyBwcmVwcm9jZXNzb3IgXCIkQ1hYQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi0KLWFjX2V4dD1jcHAKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLWZpCi0KLQotYWNfZXh0PWYKLWFjX2NvbXBpbGU9JyRGNzcgLWMgJEZGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRGNzcgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2Y3N19jb21waWxlcl9nbnUKLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gZzc3IHhsZiBmNzcgZnJ0IHBnZjc3IGNmNzcgZm9ydDc3IGZsMzIgYWY3NyB4bGY5MCBmOTAgcGdmOTAgcGdocGYgZXBjZjkwIGdmb3J0cmFuIGc5NSB4bGY5NSBmOTUgZm9ydCBpZm9ydCBpZmMgZWZjIHBnZjk1IGxmOTUgZnRuCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJEY3NyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19GNzc9IiRGNzciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfRjc3PSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLUY3Nz0kYWNfY3ZfcHJvZ19GNzcKLWlmIHRlc3QgLW4gIiRGNzciOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEY3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kRjc3IiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0KLSAgICB0ZXN0IC1uICIkRjc3IiAmJiBicmVhawotICBkb25lCi1maQotaWYgdGVzdCAteiAiJEY3NyI7IHRoZW4KLSAgYWNfY3RfRjc3PSRGNzcKLSAgZm9yIGFjX3Byb2cgaW4gZzc3IHhsZiBmNzcgZnJ0IHBnZjc3IGNmNzcgZm9ydDc3IGZsMzIgYWY3NyB4bGY5MCBmOTAgcGdmOTAgcGdocGYgZXBjZjkwIGdmb3J0cmFuIGc5NSB4bGY5NSBmOTUgZm9ydCBpZm9ydCBpZmMgZWZjIHBnZjk1IGxmOTUgZnRuCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0Y3NytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfRjc3IjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0Y3Nz0iJGFjX2N0X0Y3NyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9GNzc9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfRjc3PSRhY19jdl9wcm9nX2FjX2N0X0Y3NwotaWYgdGVzdCAtbiAiJGFjX2N0X0Y3NyI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9GNzciID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCi0KLQotICB0ZXN0IC1uICIkYWNfY3RfRjc3IiAmJiBicmVhawotZG9uZQotCi0gIGlmIHRlc3QgIngkYWNfY3RfRjc3IiA9IHg7IHRoZW4KLSAgICBGNzc9IiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIEY3Nz0kYWNfY3RfRjc3Ci0gIGZpCi1maQotCi0KLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgRm9ydHJhbiA3NyBjb21waWxlciB2ZXJzaW9uIiA+JjUKLWFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC12ID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAtdiA+JjUiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChhY190cnk9IiRhY19jb21waWxlciAtViA+JjUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZXIgLVYgPiY1IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotcm0gLWYgYS5vdXQKLQotIyBJZiB3ZSBkb24ndCB1c2UgYC5GJyBhcyBleHRlbnNpb24sIHRoZSBwcmVwcm9jZXNzb3IgaXMgbm90IHJ1biBvbiB0aGUKLSMgaW5wdXQgZmlsZS4gIChOb3RlIHRoYXQgdGhpcyBvbmx5IG5lZWRzIHRvIHdvcmsgZm9yIEdOVSBjb21waWxlcnMuKQotYWNfc2F2ZV9leHQ9JGFjX2V4dAotYWNfZXh0PUYKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgRm9ydHJhbiA3NyBjb21waWxlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgRm9ydHJhbiA3NyBjb21waWxlci4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZjc3X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSAgICAgIHByb2dyYW0gbWFpbgotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICAgICAgZW5kCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19jb21waWxlcl9nbnU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jb21waWxlcl9nbnU9bm8KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfY3ZfZjc3X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Ci0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mNzdfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mNzdfY29tcGlsZXJfZ251IiA+JjY7IH0KLWFjX2V4dD0kYWNfc2F2ZV9leHQKLWFjX3Rlc3RfRkZMQUdTPSR7RkZMQUdTK3NldH0KLWFjX3NhdmVfRkZMQUdTPSRGRkxBR1MKLUZGTEFHUz0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJEY3NyBhY2NlcHRzIC1nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkRjc3IGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfZjc3X2crc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgRkZMQUdTPS1nCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSAgICAgIHByb2dyYW0gbWFpbgotCi0gICAgICBlbmQKLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Y3N193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2N2X3Byb2dfZjc3X2c9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9wcm9nX2Y3N19nPW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZjc3X2ciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZjc3X2ciID4mNjsgfQotaWYgdGVzdCAiJGFjX3Rlc3RfRkZMQUdTIiA9IHNldDsgdGhlbgotICBGRkxBR1M9JGFjX3NhdmVfRkZMQUdTCi1lbGlmIHRlc3QgJGFjX2N2X3Byb2dfZjc3X2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAieCRhY19jdl9mNzdfY29tcGlsZXJfZ251IiA9IHh5ZXM7IHRoZW4KLSAgICBGRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIEZGTEFHUz0iLWciCi0gIGZpCi1lbHNlCi0gIGlmIHRlc3QgIngkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPSB4eWVzOyB0aGVuCi0gICAgRkZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBGRkxBR1M9Ci0gIGZpCi1maQotCi1HNzc9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi0KLSMgQXV0b2NvbmYgMi4xMydzIEFDX09CSkVYVCBhbmQgQUNfRVhFRVhUIG1hY3JvcyBvbmx5IHdvcmtzIGZvciBDIGNvbXBpbGVycyEKLQotIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbWF4X2NtZF9sZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgICBpPTAKLSAgdGVzdHN0cmluZz0iQUJDRCIKLQotICBjYXNlICRidWlsZF9vcyBpbgotICBtc2Rvc2RqZ3BwKikKLSAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCi0gICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgotICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCi0gICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAotICAgIDs7Ci0KLSAgZ251KikKLSAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKLSAgICA7OwotCi0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKLSAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgotICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCi0gICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQotICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KLSAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKLSAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgYW1pZ2FvcyopCi0gICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgotICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7Ci0gICAgOzsKLQotICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQotICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgotICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKLSAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsc2UKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcwotICAgIGZpCi0gICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCi0gICAgOzsKLQotICBpbnRlcml4KikKLSAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4Ci0gICAgOzsKLQotICBvc2YqKQotICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQotICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90Ci0gICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KLSAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKLSAgICAjCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KLSAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCi0gICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICBzY28zLjJ2NSopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKLSAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbIAldLy8nYAotICAgIGVsc2UKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAotICAgIGZpCi0gICAgOzsKLSAgKikKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKLSAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCi0gICAgZWxzZQotICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KLSAgICAgIHdoaWxlICh0ZXN0ICJYImAkU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCi0JICAgICAgID0gIlhYJHRlc3RzdHJpbmciKSA+L2Rldi9udWxsIDI+JjEgJiYKLQkgICAgICBuZXdfcmVzdWx0PWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYCAmJgotCSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0kbmV3X3Jlc3VsdCAmJgotCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAotICAgICAgZG8KLSAgICAgICAgaT1gZXhwciAkaSArIDFgCi0gICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZwotICAgICAgZG9uZQotICAgICAgdGVzdHN0cmluZz0KLSAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24gbWFzc2l2ZQotICAgICAgIyBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGxpbmtlci4KLSAgICAgICMgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLQotZmkKLQotaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSIgPiY1Ci1lY2hvICIke0VDSE9fVH1ub25lIiA+JjY7IH0KLWZpCi0KLQotCi0KLQotIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLSMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgotIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KLQotIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgotc3ltY29kZT0nW0JDREVHUlNUXScKLQotIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCi1zeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJwotCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL14uIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMTsvcCciCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotCi0jIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4KikKLSAgc3ltY29kZT0nW0JDRFRdJwotICA7OwotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICBzeW1jb2RlPSdbQUJDREdJU1RXXScKLSAgOzsKLWhwdXgqKSAjIEl0cyBsaW5rZXIgZGlzdGluZ3Vpc2hlcyBkYXRhIGZyb20gY29kZSBzeW1ib2xzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgc3ltY29kZT0nW0FCQ0RFR1JTVF0nCi0gIGZpCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0gIDs7Ci1saW51eCogfCBrKmJzZCotZ251KQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgIHN5bWNvZGU9J1tBQkNER0lSU1RXXScKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0gIGZpCi0gIDs7Ci1pcml4KiB8IG5vbnN0b3B1eCopCi0gIHN5bWNvZGU9J1tCQ0RFR1JTVF0nCi0gIDs7Ci1vc2YqKQotICBzeW1jb2RlPSdbQkNERUdRUlNUXScKLSAgOzsKLXNvbGFyaXMqKQotICBzeW1jb2RlPSdbQkRSVF0nCi0gIDs7Ci1zY28zLjJ2NSopCi0gIHN5bWNvZGU9J1tEVF0nCi0gIDs7Ci1zeXN2NC4ydXcyKikKLSAgc3ltY29kZT0nW0RUXScKLSAgOzsKLXN5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gIHN5bWNvZGU9J1tBQkRUXScKLSAgOzsKLXN5c3Y0KQotICBzeW1jb2RlPSdbREZOU1RVXScKLSAgOzsKLWVzYWMKLQotIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCi1vcHRfY3I9Ci1jYXNlICRidWlsZF9vcyBpbgotbWluZ3cqKQotICBvcHRfY3I9YGVjaG8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKLSAgOzsKLWVzYWMKLQotIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCi1jYXNlIGAkTk0gLVYgMj4mMWAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBzeW1jb2RlPSdbQUJDREdJUlNUV10nIDs7Ci1lc2FjCi0KLSMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJjb3JlLCB0aGVuIHdpdGggaXQuCi1mb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCi0KLSAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KLSAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKLQotICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbIAldXCgkc3ltY29kZSRzeW1jb2RlKlwpWyAJXVsgCV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCi0KLSAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCi0gIHBpcGVfd29ya3M9bm8KLQotICBybSAtZiBjb25mdGVzdCoKLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotY2hhciBubV90ZXN0X3ZhcjsKLXZvaWQgbm1fdGVzdF9mdW5jKCl7fQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLWludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9Ci1FT0YKLQotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KLSAgICBubGlzdD1jb25mdGVzdC5ubQotICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0XCIiKSA+JjUKLSAgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KLSAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCi0gICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgotCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgotICAgICAgZWxzZQotCXJtIC1mICIkbmxpc3QiVAotICAgICAgZmkKLQotICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgotICAgICAgaWYgZ3JlcCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCWlmIGdyZXAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JICBjYXQgPDxFT0YgPiBjb25mdGVzdC4kYWNfZXh0Ci0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLUVPRgotCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgotCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8IGdyZXAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JwotCi0JICBjYXQgPDxFT0YgPj4gY29uZnRlc3QuJGFjX2V4dAotI2lmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXwotIyBkZWZpbmUgbHRfcHRyX3Qgdm9pZCAqCi0jZWxzZQotIyBkZWZpbmUgbHRfcHRyX3QgY2hhciAqCi0jIGRlZmluZSBjb25zdAotI2VuZGlmCi0KLS8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAqLwotY29uc3Qgc3RydWN0IHsKLSAgY29uc3QgY2hhciAqbmFtZTsKLSAgbHRfcHRyX3QgYWRkcmVzczsKLX0KLWx0X3ByZWxvYWRlZF9zeW1ib2xzW10gPQotewotRU9GCi0JICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsIChsdF9wdHJfdCkgXCZcMn0sLyIgPCAiJG5saXN0IiB8IGdyZXAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0JICBjYXQgPDxcRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSAgezAsIChsdF9wdHJfdCkgMH0KLX07Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi1FT0YKLQkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCi0JICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCi0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLQkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCi0JICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCi0JICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgotCSAgICBwaXBlX3dvcmtzPXllcwotCSAgZmkKLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCi0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKLQllbHNlCi0JICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKIAlmaQotICAgICAgZWxzZQotCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiY1Ci0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mNQotICAgIGZpCi0gIGVsc2UKLSAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQotICBmaQotICBybSAtZiBjb25mdGVzdCogY29uZnRzdCoKLQotICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCi0gIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgotICAgIGJyZWFrCi0gIGVsc2UKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQotICBmaQotZG9uZQotCi1maQotCi1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9Ci1maQotaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZmFpbGVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfWZhaWxlZCIgPiY2OyB9CisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYwogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG9rIiA+JjUKLWVjaG8gIiR7RUNIT19UfW9rIiA+JjY7IH0KKyAgZW5hYmxlX3NoYXJlZD15ZXMKIGZpCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9vYmpkaXIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3RhdGljOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OworICAgICopCisgICAgIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc3RhdGljPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc3RhdGljPXllcworZmkKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGljOyBwaWNfbW9kZT0iJHdpdGh2YWwiCitlbHNlCisgIHBpY19tb2RlPWRlZmF1bHQKK2ZpCisKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0CisKKworCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9mYXN0X2luc3RhbGw7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmkKKworCisKKworCisKKworCisKKworCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRsdG1haW4iCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfb2JqZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKIG1rZGlyIC5saWJzIDI+L2Rldi9udWxsCkBAIC02ODE4LDE0ICs3NDcwLDM0IEBACiBmaQogcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9vYmpkaXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X29iamRpciIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CiskYXNfZWNobyAiJGx0X2N2X29iamRpciIgPiY2OyB9CiBvYmpkaXI9JGx0X2N2X29iamRpcgogCiAKIAogCiAKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFRfT0JKRElSICIkbHRfY3Zfb2JqZGlyLyIKK19BQ0VPRgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKIGNhc2UgJGhvc3Rfb3MgaW4KIGFpeDMqKQogICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKQEAgLTY4NDAsMzYwICs3NTEyLDQxIEBACiAKICMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKICMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCi1Yc2VkPSdzZWQgLWUgMXMvXlgvLycKLXNlZF9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGAkXFxcXF1cKS9cXFwxL2cnCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJwogCiAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLWRvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGBcXFxcXVwpL1xcXDEvZycKK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKIAogIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKICMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KIGRlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCiAKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCiAjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKIG5vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJwogCi0jIENvbnN0YW50czoKLXJtPSJybSAtZiIKLQogIyBHbG9iYWwgdmFyaWFibGVzOgotZGVmYXVsdF9vZmlsZT1saWJ0b29sCitvZmlsZT1saWJ0b29sCiBjYW5fYnVpbGRfc2hhcmVkPXllcwogCiAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKICMgd2hpY2ggbmVlZHMgJy5saWInKS4KIGxpYmV4dD1hCi1sdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKLW9maWxlPSIkZGVmYXVsdF9vZmlsZSIKKwogd2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKIAotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLUFSPSRhY19jdl9wcm9nX0FSCi1pZiB0ZXN0IC1uICIkQVIiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFSIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRBUiIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCi0gIGFjX2N0X0FSPSRBUgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCi1pZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9BUiIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KLSAgICBBUj0iZmFsc2UiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBBUj0kYWNfY3RfQVIKLSAgZmkKLWVsc2UKLSAgQVI9IiRhY19jdl9wcm9nX0FSIgotZmkKLQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgotaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkFOTElCIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRSQU5MSUIiID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KLSAgYWNfY3RfUkFOTElCPSRSQU5MSUIKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKLWlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfUkFOTElCIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KLSAgICBSQU5MSUI9IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgotICBmaQotZWxzZQotICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKLWZpCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1TVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAotaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kU1RSSVAiID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgotICBhY19jdF9TVFJJUD0kU1RSSVAKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAotaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfU1RSSVAiID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCi0gICAgU1RSSVA9IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBTVFJJUD0kYWNfY3RfU1RSSVAKLSAgZmkKLWVsc2UKLSAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgotZmkKLQotCiBvbGRfQ0M9IiRDQyIKIG9sZF9DRkxBR1M9IiRDRkxBR1MiCiAKICMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCi10ZXN0IC16ICIkQVIiICYmIEFSPWFyCi10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQotdGVzdCAteiAiJEFTIiAmJiBBUz1hcwogdGVzdCAteiAiJENDIiAmJiBDQz1jYwogdGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCiB0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKIHRlc3QgLXogIiRMRCIgJiYgTEQ9bGQKLXRlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKLXRlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCi10ZXN0IC16ICIkTk0iICYmIE5NPW5tCi10ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCi10ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCi10ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgotdGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CiB0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bwogCi0jIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KLW9sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KLQotaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBvcGVuYnNkKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgotICAgIDs7Ci0gICopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKLSAgICA7OwotICBlc2FjCi0gIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgotZmkKLQogZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCiAgIGNhc2UgJGNjX3RlbXAgaW4KICAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CkBAIC03MjAyLDE3ICs3NTU1LDE4IEBACiAgICAgKikgYnJlYWs7OwogICBlc2FjCiBkb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKK2NjX2Jhc2VuYW1lPWAkRUNITyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAogCiAKICMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCiBmaWxlX21hZ2ljKikKICAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2FzZSAkTUFHSUNfQ01EIGluCiBbXFwvKl0gfCAgPzpbXFwvXSopCkBAIC03MjM2LDcgKzc1OTAsNyBAQAogCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgogCSAgICA6CiAJICBlbHNlCi0JICAgIGNhdCA8PEVPRiAxPiYyCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgogCiAqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAogKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgpAQCAtNzI0Nyw3ICs3NjAxLDcgQEAKICoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KICoqKiBidWctbGlidG9vbEBnbnUub3JnCiAKLUVPRgorX0xUX0VPRgogCSAgZmkgOzsKIAllc2FjCiAgICAgICBmaQpAQCAtNzI2MiwxOSArNzYxNiwyMyBAQAogCiBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKIGlmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTUFHSUNfQ01EIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKKworCisKIGlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmlsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhc2UgJE1BR0lDX0NNRCBpbgogW1xcLypdIHwgID86W1xcL10qKQpAQCAtNzI5OCw3ICs3NjU2LDcgQEAKIAkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgOgogCSAgZWxzZQotCSAgICBjYXQgPDxFT0YgMT4mMgorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKIAogKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKICoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KQEAgLTczMDksNyArNzY2Nyw3IEBACiAqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCiAqKiogYnVnLWxpYnRvb2xAZ251Lm9yZwogCi1FT0YKK19MVF9FT0YKIAkgIGZpIDs7CiAJZXNhYwogICAgICAgZmkKQEAgLTczMjQsMTMgKzc2ODIsMTQgQEAKIAogTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCiBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQotZWNobyAiJHtFQ0hPX1R9JE1BR0lDX0NNRCIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCiAgIGVsc2UKICAgICBNQUdJQ19DTUQ9OgogICBmaQpAQCAtNzM0MCwyOCArNzY5OSw4IEBACiAgIDs7CiBlc2FjCiAKLWVuYWJsZV9kbG9wZW49bm8KLWVuYWJsZV93aW4zMl9kbGw9bm8KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOwotZmkKLQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcGljK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9JHdpdGhfcGljOyBwaWNfbW9kZT0iJHdpdGh2YWwiCi1lbHNlCi0gIHBpY19tb2RlPWRlZmF1bHQKLWZpCi0KLXRlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAotCiAjIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAotdGFnbmFtZT0KKwogbHRfc2F2ZV9DQz0iJENDIgogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCkBAIC03Mzg0LDYgKzc3MjMsMTEgQEAKIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKIAogCisKKworCisKKwogIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KIExUQ0M9JHtMVENDLSIkQ0MifQogCkBAIC03MzkzLDM1ICs3NzM3LDQyIEBACiAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgogY29tcGlsZXI9JENDCiAKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQwogCiAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQogYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CiBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAogZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCiBfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCiskUk0gY29uZnRlc3QqCiAKIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAogZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKIGV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgogX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKKyRSTSAtciBjb25mdGVzdCoKIAogCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KIAogbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9CiAKIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJwogCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAogICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKQEAgLTc0MzMsMjUgKzc3ODQsMjUgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NzQzNjogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc3ODc6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6NzQ0MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6Nzc5MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCiAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgogICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCiAgICAgIGZpCiAgICBmaQotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIGNvbmZ0ZXN0KgogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9CiAKIGlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgogICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKQEAgLTc0NjEsMTIgKzc4MTIsMTcgQEAKIAogZmkKIAotbHRfcHJvZ19jb21waWxlcl93bD0KKworCisKKworCisgIGx0X3Byb2dfY29tcGlsZXJfd2w9CiBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQogCiAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKQEAgLTc0ODIsMTcgKzc4MzgsMjUgQEAKICAgICAgIDs7CiAKICAgICBhbWlnYW9zKikKLSAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYwogICAgICAgOzsKIAogICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgogICAgICAgOzsKIAotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKICAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKICAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCiAgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCkBAIC03NTA2LDYgKzc4NzAsMjAgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZm5vLWNvbW1vbicKICAgICAgIDs7CiAKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKICAgICBpbnRlcml4WzMtOV0qKQogICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KICAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgpAQCAtNzUxOCwyNSArNzg5NiwxOCBAQAogICAgICAgZW5hYmxlX3NoYXJlZD1ubwogICAgICAgOzsKIAorICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCiAgICAgc3lzdjQqTVAqKQogICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgogCWx0X3Byb2dfY29tcGlsZXJfcGljPS1LY29uZm9ybV9waWMKICAgICAgIGZpCiAgICAgICA7OwogCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCiAgICAgKikKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKICAgICAgIDs7CkBAIC03NTUzLDE4ICs3OTI0LDggQEAKIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwogICAgICAgZmkKICAgICAgIDs7Ci0gICAgICBkYXJ3aW4qKQotICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgeGxjKikKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctcW5vY29tbW9uJwotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLSAgICAgICAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7CiAKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQorICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCiAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCiAgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgogICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKQEAgLTc1OTIsMTggKzc5NTMsMjcgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKICAgICAgIDs7CiAKLSAgICBuZXdzb3M2KQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgOzsKLQogICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCiAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCiAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCiAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCiAgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisJOzsKICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQogICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAogCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCkBAIC03NjE2LDggKzc5ODYsMTQgQEAKICAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCiAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKICAgICAgICAgOzsKKyAgICAgIHhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEgb24gUFBDCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXFwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1xc3RhdGljbGluaycKKwk7OwogICAgICAgKikKLSAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCiAJKlN1blwgQyopCiAJICAjIFN1biBDIDUuOQogCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwpAQCAtNzYzNSw2ICs4MDExLDE3IEBACiAgICAgICBlc2FjCiAgICAgICA7OwogCisgICAgbmV3c29zNikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKwogICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCiAgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KQEAgLTc2OTcsMjEgKzgwODQsMzQgQEAKICAgICBlc2FjCiAgIGZpCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQorICAgIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CiskYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKworCisKKworCiAKICMKICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KICMKIGlmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyI7IHRoZW4KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKQEAgLTc3MjMsMjcgKzgxMjMsMjcgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NzcyNjogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjgxMjY6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6NzczMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6ODEzMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCiAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgogICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3M9eWVzCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9eWVzCiAgICAgIGZpCiAgICBmaQotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIGNvbmZ0ZXN0KgogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2OyB9CiAKLWlmIHRlc3QgeCIkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID0geHllczsgdGhlbgoraWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPSB4eWVzOyB0aGVuCiAgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWMgaW4KICAgICAgIiIgfCAiICIqKSA7OwogICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgOzsKQEAgLTc3NTQsMjYgKzgxNTQsMjIgQEAKIGZpCiAKIGZpCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKLSAgICA7OwotZXNhYworCisKKworCisKIAogIwogIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgogIwogd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz1ubworICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz1ubwogICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKICAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCiAgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKQEAgLTc3ODMsMzYgKzgxNzksNDEgQEAKICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KICAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgogICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRFQ0hPICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAogICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgogICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKKyAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcwogICAgICAgIGZpCiAgICAgIGVsc2UKLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKICAgICAgZmkKICAgIGZpCi0gICAkcm0gY29uZnRlc3QqCisgICAkUk0gLXIgY29uZnRlc3QqCiAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9CiAKLWlmIHRlc3QgeCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgoraWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPSB4eWVzOyB0aGVuCiAgICAgOgogZWxzZQogICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQogZmkKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCiAgICBta2RpciBjb25mdGVzdAogICAgY2QgY29uZnRlc3QKICAgIG1rZGlyIG91dApAQCAtNzgyNyw4MyArODIyOCwxNDggQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NzgzMDogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjgyMzE6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTo3ODM0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGVjaG8gIiRhc19tZTo4MjM1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CiAgICB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCiAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCiAgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKICAgICAgZmkKICAgIGZpCiAgICBjaG1vZCB1K3cgLiAyPiY1Ci0gICAkcm0gY29uZnRlc3QqCisgICAkUk0gY29uZnRlc3QqCiAgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCiAgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRybSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRybSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKICAgIGNkIC4uCi0gICBybWRpciBjb25mdGVzdAotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCiAKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4Mjg2OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6ODI5MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKwogCiAKIGhhcmRfbGlua3M9Im5vdHRlc3RlZCIKIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KICAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9CiAgIGhhcmRfbGlua3M9eWVzCi0gICRybSBjb25mdGVzdCoKKyAgJFJNIGNvbmZ0ZXN0KgogICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwogICB0b3VjaCBjb25mdGVzdC5hCiAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CiskYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQogICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQogICAgIG5lZWRfbG9ja3M9d2FybgogICBmaQogZWxzZQogICBuZWVkX2xvY2tzPW5vCiBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KIAogICBydW5wYXRoX3Zhcj0KICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ci0gIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KKyAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCiAgIGFyY2hpdmVfY21kcz0KICAgYXJjaGl2ZV9leHBzeW1fY21kcz0KLSAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0KLSAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9CisgIGNvbXBpbGVyX25lZWRzX29iamVjdD1ubworICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCiAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KLSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ci0gIHRocmVhZF9zYWZlX2ZsYWdfc3BlYz0KKyAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBoYXJkY29kZV9hdXRvbWF0aWM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT1ubwogICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQogICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPQogICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQotICBoYXJkY29kZV9kaXJlY3Q9bm8KICAgaGFyZGNvZGVfbWludXNfTD1ubwogICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGluaGVyaXRfcnBhdGg9bm8KICAgbGlua19hbGxfZGVwbGlicz11bmtub3duCi0gIGhhcmRjb2RlX2F1dG9tYXRpYz1ubwogICBtb2R1bGVfY21kcz0KICAgbW9kdWxlX2V4cHN5bV9jbWRzPQotICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KLSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0KKyAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjPQorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KICAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgogICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAogICBpbmNsdWRlX2V4cHN5bXM9CkBAIC03OTExLDI2ICs4Mzc3LDE3IEBACiAgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKICAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAogICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KLSAgZXhjbHVkZV9leHBzeW1zPSJfR0xPQkFMX09GRlNFVF9UQUJMRV8iCisgIGV4Y2x1ZGVfZXhwc3ltcz0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJwogICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKICAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCiAgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAogICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KICAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgogICBleHRyYWN0X2V4cHN5bXNfY21kcz0KLSAgIyBKdXN0IGJlaW5nIHBhcmFub2lkIGFib3V0IGVuc3VyaW5nIHRoYXQgY2NfYmFzZW5hbWUgaXMgc2V0LgotICBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAogCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQogICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCiAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KQEAgLTc5NTYsMTYgKzg0MTMsMTYgQEAKICAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KICAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCiAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGVsc2UKLSAgCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CiAgICAgZmkKICAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgMj4vZGV2L251bGxgIGluCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCiAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCiAgICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgogICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgpAQCAtNzk3NSwxMSArODQzMiwxMSBAQAogCiAgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCiAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKKyAgICBhaXhbMy05XSopCiAgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCiAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KIAlsZF9zaGxpYnM9bm8KLQljYXQgPDxFT0YgMT4mMgorCWNhdCA8PF9MVF9FT0YgMT4mMgogCiAqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCiAqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KQEAgLTc5ODcsMjYgKzg0NDQsMjcgQEAKICoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKICoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCiAKLUVPRgorX0xUX0VPRgogICAgICAgZmkKICAgICAgIDs7CiAKICAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kcz0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICA7OworICAgICAgZXNhYwogICAgICAgOzsKIAogICAgIGJlb3MqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKIAkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCiAJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQpAQCAtODAxNiwxNiArODQ3NCwxNiBAQAogICAgICAgZmkKICAgICAgIDs7CiAKLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCiAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAogICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCiAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCiAKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwogCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKIAkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgpAQCAtODA1Niw0OCArODUxNCw3OCBAQAogICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKICAgICAgIDs7CiAKLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KIAl0bXBfYWRkZmxhZz0KKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KLQlwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwogCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCiAJICA7OwogCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwogCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAogCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwogCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CiAJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CiAJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKIAkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworCXhsW2NDXSopCQkJIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKIAllc2FjCiAJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCiAJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKIAkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKIAkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMwogCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSopCi0JICB0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcgOzsKIAllc2FjCiAJYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCWZpCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICBmaQorCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCiAgICAgICBlbHNlCi0JbGRfc2hsaWJzPW5vCisgICAgICAgIGxkX3NobGlicz1ubwogICAgICAgZmkKICAgICAgIDs7CiAKICAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCiAJd2xhcmM9CiAgICAgICBlbHNlCkBAIC04MTA3LDkgKzg1OTUsOSBAQAogICAgICAgOzsKIAogICAgIHNvbGFyaXMqKQotICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgogCWxkX3NobGlicz1ubwotCWNhdCA8PEVPRiAxPiYyCisJY2F0IDw8X0xUX0VPRiAxPiYyCiAKICoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CiAqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCkBAIC04MTE4LDggKzg2MDYsOCBAQAogKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKICoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgogCi1FT0YKLSAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZWxzZQpAQCAtODE0MywxMCArODYzMSwxNCBAQAogX0xUX0VPRgogCTs7CiAJKikKLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCi0JICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lLC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCSAgZWxzZQogCSAgICBsZF9zaGxpYnM9bm8KIAkgIGZpCkBAIC04MTYyLDcgKzg2NTQsNyBAQAogICAgICAgOzsKIAogICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZWxzZQpAQCAtODE5NCw3ICs4Njg2LDcgQEAKICAgICAgIGZpCiAgICAgICA7OwogCi0gICAgYWl4NCogfCBhaXg1KikKKyAgICBhaXhbNC05XSopCiAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgogCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKIAkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KQEAgLTgyMDQsMjIgKzg2OTYsMjIgQEAKICAgICAgIGVsc2UKIAkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KIAkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0JaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0JICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwogCWVsc2UKLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwogCWZpCiAJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwogCiAJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCiAJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCiAJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLQljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXg1KikKKwljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCiAJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KLSAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotICAJICAgIGJyZWFrCi0gIAkgIGZpCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKIAkgIGRvbmUKIAkgIDs7CiAJZXNhYwpAQCAtODIzNiwyOCArODcyOCwzMCBAQAogCiAgICAgICBhcmNoaXZlX2NtZHM9JycKICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCiAgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgZmlsZV9saXN0X3NwZWM9JyR7d2x9LWYsJwogCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCiAJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCiAJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCiAJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0gIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCiAJICB0aGVuCi0gIAkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotICAJICA6CisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKIAkgIGVsc2UKLSAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAJICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKLSAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLSAgCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KIAkgIGZpCiAJICA7OwogCWVzYWMKQEAgLTgyNjgsOCArODc2Miw4IEBACiAgICAgICBlbHNlCiAJIyBub3QgdXNpbmcgZ2NjCiAJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0gIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKIAkgIHNoYXJlZF9mbGFnPSctRycKIAllbHNlCiAJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KQEAgLTgyODAsNiArODc3NCw3IEBACiAJZmkKICAgICAgIGZpCiAKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tYmV4cGFsbCcKICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAogICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKQEAgLTgyODcsMTIgKzg3ODIsOSBAQAogCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAogCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJwotICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtODMwMywyNCArODc5NSw3IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKIAogbHRfYWl4X2xpYnBhdGhfc2VkPScKICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CkBAIC04MzM0LDMxICs4ODA5LDIyIEBACiBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCiAgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAogZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKIAotICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgICBlbHNlCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuICRFQ0hPICJYJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgfCAkWHNlZDsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgZWxzZQogCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCiAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKIAkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIteiBub2RlZnMiCiAJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgogCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtODM2OSwyNCArODgzNSw3IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKIAogbHRfYWl4X2xpYnBhdGhfc2VkPScKICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CkBAIC04NDAwLDE1ICs4ODQ5LDkgQEAKIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KICAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCiBmaQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0KIGZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogCiAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCkBAIC04NDI2LDE4ICs4ODY5LDI1IEBACiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKICAgICAgIDs7CiAKICAgICBic2RpWzQ1XSopCiAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9LXJkeW5hbWljCiAgICAgICA7OwogCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCiAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgogICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwpAQCAtODQ0OSw5ICs4ODk5LDkgQEAKICAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgogICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCiAgICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYCRFQ0hPICJYJGRlcGxpYnMiIHwgJFhzZWQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKICAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzPSd0cnVlJworICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKICAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCiAgICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCiAgICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKQEAgLTg0NTksNTMgKzg5MDksMzAgQEAKICAgICAgIDs7CiAKICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQotICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCi0gICAgICAgICAgICAgMTAuWzAxMl0pCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIDEwLiopCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KLSAgICAgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScnCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgotICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKLSAgICAgIG1vZHVsZV9jbWRzPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgIG1vZHVsZV9leHBzeW1fY21kcz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgbW9kdWxlX2NtZHM9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHM9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCisKKworICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfYXV0b21hdGljPXllcworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScnCisgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCisgICAgYXJjaGl2ZV9jbWRzPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgorICAgIG1vZHVsZV9jbWRzPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCisgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIG1vZHVsZV9leHBzeW1fY21kcz0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorCisgIGVsc2UKKyAgbGRfc2hsaWJzPW5vCisgIGZpCisKICAgICAgIDs7CiAKICAgICBkZ3V4KikKQEAgLTg1NDcsOSArODk3NCw5IEBACiAKICAgICBocHV4OSopCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kcz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgZmkKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CkBAIC04NTY5LDExICs4OTk2LDExIEBACiAgICAgICBmaQogICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCiAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nK2IgJGxpYmRpcicKIAloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLQogCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCiAJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJwotCiAJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKIAkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KIAloYXJkY29kZV9taW51c19MPXllcwpAQCAtODU4Nyw3ICs5MDE0LDcgQEAKIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCSopCiAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCkBAIC04NjEyLDEyICs5MDM5LDEyIEBACiAKIAljYXNlICRob3N0X2NwdSBpbgogCWhwcGEqNjQqfGlhNjQqKQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nK2IgJGxpYmRpcicKIAkgIGhhcmRjb2RlX2RpcmVjdD1ubwogCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwogCSAgOzsKIAkqKQogCSAgaGFyZGNvZGVfZGlyZWN0PXllcworCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwogCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJwogCiAJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILApAQCAtODYzMCwxOCArOTA1NywzNiBAQAogCiAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKwkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKyAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitpbnQgZm9vKHZvaWQpIHt9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGluaGVyaXRfcnBhdGg9eWVzCiAgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwogICAgICAgOzsKIAogICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgogCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKICAgICAgIGVsc2UKIAlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgpAQCAtODY1OSwxMSArOTEwNCwxNSBAQAogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwogICAgICAgOzsKIAorICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCiAgICAgb3BlbmJzZCopCiAgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgogCWhhcmRjb2RlX2RpcmVjdD15ZXMKIAloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwogCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKQEAgLTg2NzksNyArOTEyOCw3IEBACiAJICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwogCSAgICAgOzsKIAkgIGVzYWMKLSAgICAgICAgZmkKKwlmaQogICAgICAgZWxzZQogCWxkX3NobGlicz1ubwogICAgICAgZmkKQEAgLTg2ODksMTggKzkxMzgsMTkgQEAKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCiAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotICAgICAgYXJjaGl2ZV9jbWRzPSckZWNobyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKICAgICAgIDs7CiAKICAgICBvc2YzKikKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAgICAgIGVsc2UKIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwogICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogICAgICAgOzsKQEAgLTg3MDgsMzIgKzkxNTgsNDMgQEAKICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCiAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICAgICAgZWxzZQogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCiAKIAkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CiAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCiAgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CiAgICAgICA7OwogCiAgICAgc29sYXJpcyopCi0gICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IHRleHQnCisgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCXdsYXJjPScke3dsfScKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAgICAgICBlbHNlCi0Jd2xhcmM9JycKLQlhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHt3bH0nCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJZXNhYwogICAgICAgZmkKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KQEAgLTg3NDMsNyArOTIwNCw3IEBACiAJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKIAkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCiAJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0gCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKIAlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKIAllbHNlCkBAIC04ODMyLDE4ICs5MjkzLDE4IEBACiAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0teixub2RlZnMnCiAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SLCRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmV4cG9ydCcKICAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKIAogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGZpCiAgICAgICA7OwogCkBAIC04ODU3LDEyICs5MzE4LDM2IEBACiAgICAgICBsZF9zaGxpYnM9bm8KICAgICAgIDs7CiAgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJworCTs7CisgICAgICBlc2FjCisgICAgZmkKICAgZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnMiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnMiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnMiID4mNjsgfQogdGVzdCAiJGxkX3NobGlicyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCiAKK3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorCisKKworCisKKworCisKKworCisKKworCisKKwogIwogIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwogIwpAQCAtODg4MCwxNiArOTM2NSwxNiBAQAogICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQogICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCiAgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjY7IH0KLSAgICAgICRybSBjb25mdGVzdCoKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQorICAgICAgJFJNIGNvbmZ0ZXN0KgogICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAKLSAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCiAgICAgICAgIHNvbmFtZT1jb25mdGVzdAogICAgICAgICBsaWI9Y29uZnRlc3QKICAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CkBAIC04OTAzLDExICs5Mzg4LDExIEBACiAgICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKICAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ci0gICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgICAgICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KICAgICAgICAgdGhlbgogCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KICAgICAgICAgZWxzZQpAQCAtODkxNywzMCArOTQwMiwxNzMgQEAKICAgICAgIGVsc2UKICAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CiAgICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjY7IH0KKyAgICAgICRSTSBjb25mdGVzdCoKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQorJGFzX2VjaG8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2OyB9CiAgICAgICA7OwogICAgIGVzYWMKICAgZmkKICAgOzsKIGVzYWMKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICRFQ0hPX0MiID4mNjsgfQotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQogCiBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICBjYXNlICRob3N0X29zIGluCkBAIC04OTQ4LDE0ICs5NTc2LDE0IEBACiAgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKICAgZXNhYwogICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICBpZiBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7JyA+L2Rldi9udWxsIDsgdGhlbgorICBpZiAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJzsnID4vZGV2L251bGwgOyB0aGVuCiAgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgogICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcwogICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAogICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKICAgZWxzZQotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKICAgZmkKICAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKICAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCkBAIC04OTY5LDcgKzk1OTcsNyBAQAogCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgogICAgIGZpCiAgIGRvbmUKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgfCBhd2sgJworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgfCBhd2sgJwogQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30gewogICBsdF9mb289IiI7CiAgIGx0X2NvdW50PTA7CkBAIC04OTg5LDEwICs5NjE3LDIzIEBACiAgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtsdF9mb29dKys7IH0KICAgaWYgKGx0X2ZyZXFbbHRfZm9vXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQogfSdgCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAkbHRfc2VhcmNoX3BhdGhfc3BlY2AKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAkbHRfc2VhcmNoX3BhdGhfc3BlY2AKIGVsc2UKICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgogZmkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgogbmVlZF9saWJfcHJlZml4PXVua25vd24KIGhhcmRjb2RlX2ludG9fbGlicz1ubwogCkBAIC05MDEwLDcgKzk2NTEsNyBAQAogICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwogICA7OwogCi1haXg0KiB8IGFpeDUqKQorYWl4WzQtOV0qKQogICB2ZXJzaW9uX3R5cGU9bGludXgKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwpAQCAtOTAyOSw3ICs5NjcwLDcgQEAKICAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKICAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCiAJICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCiAJOgogICAgICAgZWxzZQogCWNhbl9idWlsZF9zaGFyZWQ9bm8KQEAgLTkwNTUsOSArOTY5NiwxOCBAQAogICA7OwogCiBhbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRFQ0hPICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCiAgIDs7CiAKIGJlb3MqKQpAQCAtOTA4MCwyNSArOTczMCwyOCBAQAogICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKICAgOzsKIAotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICB2ZXJzaW9uX3R5cGU9d2luZG93cwogICBzaHJleHRfY21kcz0iLmRsbCIKICAgbmVlZF92ZXJzaW9uPW5vCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogCiAgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCisgIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCiAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCiAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgogICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgogICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CiAgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJworICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCiAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KICAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJworICAgICAgICRSTSBcJGRscGF0aCcKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAKICAgICBjYXNlICRob3N0X29zIGluCkBAIC05MTA3LDIwICs5NzYwLDIwIEBACiAgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCiAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCiAgICAgICA7OwotICAgIG1pbmd3KikKKyAgICBtaW5ndyogfCBjZWdjYyopCiAgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAogICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgJEdSRVAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKICAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAogICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCiAgICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKICAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAogICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKICAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAogICAgICAgZmkKICAgICAgIDs7CiAgICAgcHczMiopCkBAIC05MTQ0LDcgKzk3OTcsNyBAQAogICB2ZXJzaW9uX3R5cGU9ZGFyd2luCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fSRzaGFyZWRfZXh0ICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICkBAIC05MjQzLDE4ICs5ODk2LDE4IEBACiAgICAgZmkKICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCiAgICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQogICAgIHNocmV4dF9jbWRzPScuc2wnCiAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKICAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKQEAgLTkzMzEsMTYgKzk5ODQsNDMgQEAKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCisgICAgICAgTERGTEFHUz1cIlwkTERGTEFHUyAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6CisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKwogICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KICAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCiAgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorCisgICMgQWRkIEFCSS1zcGVjaWZpYyBkaXJlY3RvcmllcyB0byB0aGUgc3lzdGVtIGxpYnJhcnkgcGF0aC4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWI2NCAvdXNyL2xpYjY0IC9saWIgL3Vzci9saWIiCiAKICAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsgCV0qaHdjYXBbIAldL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAogICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgJGx0X2xkX2V4dHJhIgogICBmaQogCkBAIC05MzU3LDcgKzEwMDM3LDcgQEAKICAgdmVyc2lvbl90eXBlPXN1bm9zCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgogICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCiAgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKICAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCkBAIC05Mzc4LDE0ICsxMDA1OCwxNiBAQAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIDs7CiAKLW50by1xbngqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwogICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCiAgIDs7CiAKIG9wZW5ic2QqKQpAQCAtOTM5NCwxMyArMTAwNzYsMTMgQEAKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopIG5lZWRfdmVyc2lvbj15ZXMgOzsKLSAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3ZlcnNpb249bm8gIDs7CisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKICAgZXNhYwogICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCiAJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCkBAIC05NDcyLDcgKzEwMTU0LDYgQEAKICAgICBzbmkpCiAgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KICAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCiAgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAogICAgICAgOzsKICAgICBzaWVtZW5zKQpAQCAtOTUwMywxMyArMTAxODQsMTIgQEAKICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCiAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgIGVsc2UKICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgc2NvMy4ydjUqKQogICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKQEAgLTk1MTksNiArMTAxOTksMTcgQEAKICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwogICA7OwogCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCiB1dHM0KikKICAgdmVyc2lvbl90eXBlPWxpbnV4CiAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwpAQCAtOTUzMCw4ICsxMDIyMSw4IEBACiAgIGR5bmFtaWNfbGlua2VyPW5vCiAgIDs7CiBlc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CiskYXNfZWNobyAiJGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KIHRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCiAKIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKQEAgLTk1MzksMTEgKzEwMjMwLDEwNCBAQAogICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKIGZpCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CiBoYXJkY29kZV9hY3Rpb249Ci1pZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwgXAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiB8fCBcCitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwKKyAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwKICAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9ICJYeWVzIiA7IHRoZW4KIAogICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCkBAIC05NTUxLDcgKzEwMzM1LDcgQEAKICAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQogICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CiAgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgIT0gbm8gJiYKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgIT0gbm8gJiYKICAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCiAgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KICAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCkBAIC05NTY0LDEwICsxMDM0OCwxMSBAQAogICAjIGRpcmVjdG9yaWVzLgogICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CiAKLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluayB8fAorICAgdGVzdCAiJGluaGVyaXRfcnBhdGgiID0geWVzOyB0aGVuCiAgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAogICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCiBlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CkBAIC05NTc2LDM3ICsxMDM2MSwxMiBAQAogICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCiBmaQogCi1zdHJpcGxpYj0KLW9sZF9zdHJpcGxpYj0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCBncmVwICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KLSAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKLSAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9Ci1lbHNlCi0jIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgZGFyd2luKikKLSAgICAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgotICAgICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKLSAgICAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgotICAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KLSAgICAgICBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLSAgICAgICA7OwotICAgKikKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci0gICAgOzsKLSAgZXNhYwotZmkKIAotaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisKKworCisKKyAgaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCiAgIGVuYWJsZV9kbG9wZW49dW5rbm93bgogICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgogICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KQEAgLTk2MjEsMzAgKzEwMzgxLDI2IEBACiAgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCiAgICAgOzsKIAotICBtaW5ndyogfCBwdzMyKikKKyAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKICAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgIDs7CisgICAgOzsKIAogICBjeWd3aW4qKQogICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgOzsKKyAgICA7OwogCiAgIGRhcndpbiopCiAgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGRsICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KQEAgLTk2NjIsMzkgKzEwNDE4LDE4IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2xpYl9kbF9kbG9wZW49bm8KKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfbGliX2RsX2Rsb3BlbiA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geCIieWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgogZWxzZQogCkBAIC05NzA0LDEwNSArMTA0MzksMjEgQEAKIAogZmkKIAotICAgOzsKKyAgICA7OwogCiAgICopCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNobF9sb2FkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIHNobF9sb2FkIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgc2hsX2xvYWQuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgc2hsX2xvYWQgaW5ub2N1b3VzX3NobF9sb2FkCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHNobF9sb2FkICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIHNobF9sb2FkCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgc2hsX2xvYWQgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIF9fc3R1Yl9zaGxfbG9hZCB8fCBkZWZpbmVkIF9fc3R1Yl9fX3NobF9sb2FkCi1jaG9rZSBtZQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIHNobF9sb2FkICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLSAgYWNfY3ZfZnVuY19zaGxfbG9hZD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2Z1bmNfc2hsX2xvYWQ9bm8KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc2hsX2xvYWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfZnVuY19zaGxfbG9hZCA9IHllczsgdGhlbgorICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNobF9sb2FkIiAiYWNfY3ZfZnVuY19zaGxfbG9hZCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zaGxfbG9hZCIgPSB4IiJ5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49InNobF9sb2FkIgogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGRsZCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCkBAIC05ODIwLDEzNyArMTA0NzEsMzIgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZGxkX3NobF9sb2FkPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD1ubworICBhY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGxkX3NobF9sb2FkID0geWVzOyB0aGVuCi0gIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItZGxkIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3Blbi4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgZGxvcGVuIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgZGxvcGVuLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGRsb3BlbiBpbm5vY3VvdXNfZGxvcGVuCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGRsb3BlbiAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBkbG9wZW4KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBkbG9wZW4gKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIF9fc3R1Yl9kbG9wZW4gfHwgZGVmaW5lZCBfX3N0dWJfX19kbG9wZW4KLWNob2tlIG1lCi0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZGxvcGVuICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLSAgYWNfY3ZfZnVuY19kbG9wZW49eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9mdW5jX2Rsb3Blbj1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19kbG9wZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2Z1bmNfZGxvcGVuID0geWVzOyB0aGVuCisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsb3BlbiIgImFjX2N2X2Z1bmNfZGxvcGVuIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCkBAIC05OTY4LDUzICsxMDUxNCwyOCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9saWJfZGxfZGxvcGVuPW5vCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KIGZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxzdmxkICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KQEAgLTEwMDMyLDUzICsxMDU1MywyOCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubworICBhY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KIGZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4gPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIgogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGRsZCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCkBAIC0xMDA5Niw0MCArMTA1OTIsMTkgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZGxkX2RsZF9saW5rPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubworICBhY19jdl9saWJfZGxkX2RsZF9saW5rPW5vCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGxkX2RsZF9saW5rID0geWVzOyB0aGVuCi0gIGx0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItZGxkIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgogZmkKIAogCkBAIC0xMDE2NywxOCArMTA2NDIsMTggQEAKICAgICBzYXZlX0xJQlM9IiRMSUJTIgogICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKIAotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MKIGVsc2UKICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgogICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMDE4MSAiY29uZmlndXJlIgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgMTA2NTYgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaWYgSEFWRV9ETEZDTl9ICkBAIC0xMDIxOSwxMCArMTA2OTQsNiBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOwotI2VuZGlmCi0KIHZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KIGludCBtYWluICgpCiB7CkBAIC0xMDIzOCwxNCArMTA3MDksMTQgQEAKICAgZWxzZQogICAgIHB1dHMgKGRsZXJyb3IgKCkpOwogCi0gICAgZXhpdCAoc3RhdHVzKTsKKyAgcmV0dXJuIHN0YXR1czsKIH0KLUVPRgotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKK19MVF9FT0YKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CiAgIChldmFsICRhY19saW5rKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgogICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAogICAgIGx0X3N0YXR1cz0kPwogICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KQEAgLTEwMjYyLDIzICsxMDczMywyMyBAQAogCiAKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfZGxvcGVuX3NlbGYiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KIAogICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgogICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MKIGVsc2UKICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgogICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMDI4MSAiY29uZmlndXJlIgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgMTA3NTIgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaWYgSEFWRV9ETEZDTl9ICkBAIC0xMDMxOSwxMCArMTA3OTAsNiBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOwotI2VuZGlmCi0KIHZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KIGludCBtYWluICgpCiB7CkBAIC0xMDMzOCwxNCArMTA4MDUsMTQgQEAKICAgZWxzZQogICAgIHB1dHMgKGRsZXJyb3IgKCkpOwogCi0gICAgZXhpdCAoc3RhdHVzKTsKKyAgcmV0dXJuIHN0YXR1czsKIH0KLUVPRgotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKK19MVF9FT0YKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CiAgIChldmFsICRhY19saW5rKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgogICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAogICAgIGx0X3N0YXR1cz0kPwogICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KQEAgLTEwMzYyLDggKzEwODI5LDggQEAKIAogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNjsgfQogICAgIGZpCiAKICAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCkBAIC0xMDM4NCw2MTc5ICsxMDg1MSwxMDMgQEAKIGZpCiAKIAotIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRjYW5fYnVpbGRfc2hhcmVkIiA+JjY7IH0KIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCiAKLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgZmkKLSAgOzsKIAotYWl4NCogfCBhaXg1KikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGZpCisKKworCisKKworCisKKworCisKKworCitzdHJpcGxpYj0KK29sZF9zdHJpcGxpYj0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCiAgICAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zaGFyZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zaGFyZWQiID4mNjsgfQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci0jIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLXRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3N0YXRpYyIgPiY2OyB9Ci0KLSMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBjb21waWxlciBcCi0gICAgQ0MgXAotICAgIExEIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWMgXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlYyBcCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgXAotICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMgXAotICAgIG9sZF9hcmNoaXZlX2NtZHMgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgXAotICAgIHByZWRlcF9vYmplY3RzIFwKLSAgICBwb3N0ZGVwX29iamVjdHMgXAotICAgIHByZWRlcHMgXAotICAgIHBvc3RkZXBzIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGggXAotICAgIGFyY2hpdmVfY21kcyBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kcyBcCi0gICAgcG9zdGluc3RhbGxfY21kcyBcCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAotICAgIG5vX3VuZGVmaW5lZF9mbGFnIFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWMgXAotICAgIG1vZHVsZV9jbWRzIFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHMgXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKLSAgICBmaXhfc3JjZmlsZV9wYXRoIFwKLSAgICBleGNsdWRlX2V4cHN5bXMgXAotICAgIGluY2x1ZGVfZXhwc3ltczsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIG9sZF9hcmNoaXZlX2NtZHMgfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyB8IFwKLSAgICBhcmNoaXZlX2NtZHMgfCBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kcyB8IFwKLSAgICBtb2R1bGVfY21kcyB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHMgfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgfCBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kcyB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKKyAgKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KICAgICA7OwogICBlc2FjCitmaQogCi1jZmdmaWxlPSIke29maWxlfVQiCi0gIHRyYXAgIiRybSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1Ci0gICRybSAtZiAiJGNmZ2ZpbGUiCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRvZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRvZmlsZSIgPiY2O30KIAotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMhICRTSEVMTAogCi0jIGAkZWNobyAiJGNmZ2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QKQotIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0jCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNwotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2w6Ci0jIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2Ci0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiAKLSMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KLVNFRD0kbHRfU0VECiAKLSMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCi1Yc2VkPSIkU0VEIC1lIDFzL15YLy8iCiAKLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICiAKLSMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgotYXZhaWxhYmxlX3RhZ3M9CiAKLSMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCiAKLSMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKIAotIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgotU0hFTEw9JGx0X1NIRUxMCiAKLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAogCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCi1idWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYworICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGNhbl9idWlsZF9zaGFyZWQiID4mNjsgfQogCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KIAotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBUaGUgaG9zdCBzeXN0ZW0uCi1ob3N0X2FsaWFzPSRob3N0X2FsaWFzCi1ob3N0PSRob3N0Ci1ob3N0X29zPSRob3N0X29zCi0KLSMgVGhlIGJ1aWxkIHN5c3RlbS4KLWJ1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwotYnVpbGQ9JGJ1aWxkCi1idWlsZF9vcz0kYnVpbGRfb3MKLQotIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCi1lY2hvPSRsdF9lY2hvCi0KLSMgVGhlIGFyY2hpdmVyLgotQVI9JGx0X0FSCi1BUl9GTEFHUz0kbHRfQVJfRkxBR1MKLQotIyBBIEMgY29tcGlsZXIuCi1MVENDPSRsdF9MVENDCi0KLSMgTFRDQyBjb21waWxlciBmbGFncy4KLUxUQ0ZMQUdTPSRsdF9MVENGTEFHUwotCi0jIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCi1DQz0kbHRfY29tcGlsZXIKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQwotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9MRAotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbwotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWMKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCi1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcwotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kcwotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHMKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHMKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHMKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X3ByZWRlcHMKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X3Bvc3RkZXBzCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZwotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCi0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYwotCi0jIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KLSMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcwotIyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0wKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKLQotIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKLSMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCi1oYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpYwotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicwotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKLQotIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgotZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcwotCi0jIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1leHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXMKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcwotCi0jICMjIyBFTkQgTElCVE9PTCBDT05GSUcKLQotX19FT0ZfXwotCi0KKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KICAgY2FzZSAkaG9zdF9vcyBpbgogICBhaXgzKikKLSAgICBjYXQgPDxcRU9GID4+ICIkY2ZnZmlsZSIKLQotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICBDT0xMRUNUX05BTUVTPQotICBleHBvcnQgQ09MTEVDVF9OQU1FUwotZmkKLUVPRgotICAgIDs7Ci0gIGVzYWMKLQotICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKLSAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQotICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwotICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotCi0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwgXAotICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gIGNobW9kICt4ICIkb2ZpbGUiCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotQ0M9IiRsdF9zYXZlX0NDIgotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGFncyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfdGFncytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSR3aXRoX3RhZ3M7IHRhZ25hbWVzPSIkd2l0aHZhbCIKLWZpCi0KLQotaWYgdGVzdCAtZiAiJGx0bWFpbiIgJiYgdGVzdCAtbiAiJHRhZ25hbWVzIjsgdGhlbgotICBpZiB0ZXN0ICEgLWYgIiR7b2ZpbGV9IjsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG91dHB1dCBmaWxlIFxgJG9maWxlJyBkb2VzIG5vdCBleGlzdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG91dHB1dCBmaWxlIFxgJG9maWxlJyBkb2VzIG5vdCBleGlzdCIgPiYyO30KLSAgZmkKLQotICBpZiB0ZXN0IC16ICIkTFRDQyI7IHRoZW4KLSAgICBldmFsICJgJFNIRUxMICR7b2ZpbGV9IC0tY29uZmlnIHwgZ3JlcCAnXkxUQ0M9J2AiCi0gICAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgbG9vayBsaWtlIGEgbGlidG9vbCBzY3JpcHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgbG9vayBsaWtlIGEgbGlidG9vbCBzY3JpcHQiID4mMjt9Ci0gICAgZWxzZQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgXGBMVENDPSRMVENDJywgZXh0cmFjdGVkIGZyb20gXGAkb2ZpbGUnIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgXGBMVENDPSRMVENDJywgZXh0cmFjdGVkIGZyb20gXGAkb2ZpbGUnIiA+JjI7fQotICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgLXogIiRMVENGTEFHUyI7IHRoZW4KLSAgICBldmFsICJgJFNIRUxMICR7b2ZpbGV9IC0tY29uZmlnIHwgZ3JlcCAnXkxUQ0ZMQUdTPSdgIgotICBmaQotCi0gICMgRXh0cmFjdCBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgaW4gJG9maWxlLgotICAjIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhlIGVudGlyZSBsaXN0IGlzIG9uIG9uZSBsaW5lLgotICBhdmFpbGFibGVfdGFncz1gZ3JlcCAiXmF2YWlsYWJsZV90YWdzPSIgIiR7b2ZpbGV9IiB8ICRTRUQgLWUgJ3MvYXZhaWxhYmxlX3RhZ3M9XCguKiRcKS9cMS8nIC1lICdzL1wiLy9nJ2AKLQotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgZm9yIHRhZ25hbWUgaW4gJHRhZ25hbWVzOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICMgQ2hlY2sgd2hldGhlciB0YWduYW1lIGNvbnRhaW5zIG9ubHkgdmFsaWQgY2hhcmFjdGVycwotICAgIGNhc2UgYCRlY2hvICJYJHRhZ25hbWUiIHwgJFhzZWQgLWUgJ3M6Wy1fQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAsL106OmcnYCBpbgotICAgICIiKSA7OwotICAgICopICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCTs7Ci0gICAgZXNhYwotCi0gICAgaWYgZ3JlcCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkIiA8ICIke29maWxlfSIgPiAvZGV2L251bGwKLSAgICB0aGVuCi0gICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB0YWcgbmFtZSBcIiR0YWduYW1lXCIgYWxyZWFkeSBleGlzdHMiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgZmkKLQotICAgICMgVXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdzLgotICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIjsgdGhlbgotICAgICAgZWNobyBhcHBlbmRpbmcgY29uZmlndXJhdGlvbiB0YWcgXCIkdGFnbmFtZVwiIHRvICRvZmlsZQotCi0gICAgICBjYXNlICR0YWduYW1lIGluCi0gICAgICBDWFgpCi0JaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLQkgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8Ci0JICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgotCSAgYWNfZXh0PWNwcAotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCi0KLQotYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi1hbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ci1hbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCi1hcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9Ci1oYXJkY29kZV9kaXJlY3RfQ1hYPW5vCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYPQotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9Ci1oYXJkY29kZV9taW51c19MX0NYWD1ubwotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKLWhhcmRjb2RlX2F1dG9tYXRpY19DWFg9bm8KLW1vZHVsZV9jbWRzX0NYWD0KLW1vZHVsZV9leHBzeW1fY21kc19DWFg9Ci1saW5rX2FsbF9kZXBsaWJzX0NYWD11bmtub3duCi1vbGRfYXJjaGl2ZV9jbWRzX0NYWD0kb2xkX2FyY2hpdmVfY21kcwotbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPQotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQotZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9bm8KLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKLXByZWRlcF9vYmplY3RzX0NYWD0KLXBvc3RkZXBfb2JqZWN0c19DWFg9Ci1wcmVkZXBzX0NYWD0KLXBvc3RkZXBzX0NYWD0KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9Ci0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWNwcAotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHRfQ1hYPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbXSkgeyByZXR1cm4oMCk7IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSRDQwotbHRfc2F2ZV9MRD0kTEQKLWx0X3NhdmVfR0NDPSRHQ0MKLUdDQz0kR1hYCi1sdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAotbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECi1pZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCi0gIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAotZWxzZQotICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKLWZpCi1pZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KLSAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAotZWxzZQotICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAotZmkKLXRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCi1DQz0ke0NYWC0iYysrIn0KLWNvbXBpbGVyPSRDQwotY29tcGlsZXJfQ1hYPSRDQwotZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLQotCi0jIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2VuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQotIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPScgLWZuby1idWlsdGluJwotZWxzZQotICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9Ci1maQotCi1pZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcwotZWxzZQotICB3aXRoX2dudV9sZD1ubwotZmkKLQotYWNfcHJvZz1sZAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAkRUNIT19DIiA+JjY7IH0KLSAgY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7Ci0gICopCi0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OwotICBlc2FjCi0gIGNhc2UgJGFjX3Byb2cgaW4KLSAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KLSAgICBbXFwvXSogfCA/OltcXC9dKikKLSAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKLSAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAotICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAncyVcXFxcJS8lZydgCi0gICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCi0gICAgICA7OwotICAiIikKLSAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KLSAgICBhY19wcm9nPWxkCi0gICAgOzsKLSAgKikKLSAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCi0gICAgd2l0aF9nbnVfbGQ9dW5rbm93bgotICAgIDs7Ci0gIGVzYWMKLWVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KLWZpCi1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKLSAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKLSAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCi0gICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KLSAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhawotCTs7Ci0gICAgICAqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCi0JOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotZWxzZQotICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotZmkKLWZpCi0KLUxEPSIkbHRfY3ZfcGF0aF9MRCIKLWlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTEQiID4mNQotZWNobyAiJHtFQ0hPX1R9JExEIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotdGVzdCAteiAiJExEIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgotY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKLSAgOzsKLSopCi0gIGx0X2N2X3Byb2dfZ251X2xkPW5vCi0gIDs7Ci1lc2FjCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KLXdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAotCi0KLQotICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKLSAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bwotICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCi0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwgXAotCWdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgZWxzZQotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQotICAgIGZpCi0gIGVsc2UKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIHdsYXJjPQotCi0gICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KLSAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQotICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCi0gICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCi0gICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KLSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gIGZpCi0KLSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLWVsc2UKLSAgR1hYPW5vCi0gIHdpdGhfZ251X2xkPW5vCi0gIHdsYXJjPQotZmkKLQotIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQotbGRfc2hsaWJzX0NYWD15ZXMKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gIGFpeDQqIHwgYWl4NSopCi0gICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLSAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLSAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKLSAgICBlbHNlCi0gICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLSAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCi0gICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCi0JZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICBjYXNlICRsZF9mbGFnIGluCi0JICAqLWJydGwqKQotCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotCSAgICBicmVhawotCSAgICA7OwotCSAgZXNhYwotCWRvbmUKLQk7OwotICAgICAgZXNhYwotCi0gICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgIGZpCi0KLSAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgYXJjaGl2ZV9jbWRzX0NYWD0nJwotICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCi0gICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0KLSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLSAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCWlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLQkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JdGhlbgotCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0JICA6Ci0JZWxzZQotCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD11bnN1cHBvcnRlZAotCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLQkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotCSAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJwotCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9Ci0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQlzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgIyBub3QgdXNpbmcgZ2NjCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0JIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQlzaGFyZWRfZmxhZz0nLUcnCi0gICAgICBlbHNlCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQllbHNlCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCWZpCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLSAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm9rJwotICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLQotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi1maQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgZWxzZQotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIteiBub2RlZnMiCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0gICAgICBlbHNlCi0JIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0Jbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tYmVybm90b2snCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tYmVyb2snCi0JIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckY29udmVuaWVuY2UnCi0JYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotCSMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgIGZpCi0gICAgZmkKLSAgICA7OwotCi0gIGJlb3MqKQotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCi0gICAgICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0gICAgICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgZWxzZQotICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIGZpCi0gICAgOzsKLQotICBjaG9ydXMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCi0gICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubwotICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcwotCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0gICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgZWxzZQotCWVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICBmaX4KLSAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICBlbHNlCi0gICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgZmkKLSAgOzsKLSAgICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKLSAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICA7OwotICAgICAgICopICMgRGFyd2luIDEuMyBvbgotICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCi0gICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCi0gICAgICAgICAgICAgMTAuWzAxMl0pCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAxMC4qKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgIGVzYWMKLSAgICAgICAgIGZpCi0gICAgICAgICA7OwotICAgICAgICBlc2FjCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgICAgIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD11bnN1cHBvcnRlZAotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScnCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLQotICAgIGlmIHRlc3QgIiRHWFgiID0geWVzIDsgdGhlbgotICAgICAgbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgaWYgJENDIC1kdW1wc3BlY3MgMj4mMSB8ICRFR1JFUCAnc2luZ2xlX21vZHVsZScgPi9kZXYvbnVsbCA7IHRoZW4KLSAgICAgICBsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICJYJGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kIiA9IFh5ZXMgOyB0aGVuCi0gICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1keW5hbWljbGliIC1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCi0gICAgICBlbHNlCi0gICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gJHtsaWJ9LW1hc3Rlci5vICRsaWJvYmpzfiRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAke2xpYn0tbWFzdGVyLm8gJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKLSAgICAgICAgZmkKLSAgICAgICAgbW9kdWxlX2NtZHNfQ1hYPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgICBpZiB0ZXN0ICJYJGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kIiA9IFh5ZXMgOyB0aGVuCi0gICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLWR5bmFtaWNsaWIgLXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gJHtsaWJ9LW1hc3Rlci5vICRsaWJvYmpzfiRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAke2xpYn0tbWFzdGVyLm8gJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgZmkKLSAgICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgICBtb2R1bGVfY21kc19DWFg9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgZmkKLSAgICAgICAgOzsKLQotICBkZ3V4KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZWMrKyopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICBnaGN4KikKLQkjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZnJlZWJzZFsxMl0qKQotICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUgc3dpdGNoIHRvIEVMRgotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBmcmVlYnNkLWVsZiopCi0gICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgOzsKLSAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCi0gICAgIyBjb252ZW50aW9ucwotICAgIGxkX3NobGlic19DWFg9eWVzCi0gICAgOzsKLSAgZ251KikKLSAgICA7OwotICBocHV4OSopCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJwotICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkjIGJ1dCBhcyB0aGUgZGVmYXVsdAotCQkJCSMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgIENDKikKLSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgICAgOzsKLSAgICBhQ0MqKQotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0gICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICAgICAgIwotICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLSAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLSAgICAgICMgZGVwZW5kZW5jaWVzLgotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIlstXUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0gICAgICA7OwotICAgICopCi0gICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICBocHV4MTAqfGhwdXgxMSopCi0gICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopIDs7Ci0gICAgICAqKQotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGhwcGEqNjQqfGlhNjQqKQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAotCQkJCQkgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAotCQkJCQkgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgYUNDKikKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotCSAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotCSAgICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBocHBhKjY0KikKLQkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgaWE2NCopCi0JICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgZmkKLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIGxkX3NobGlic19DWFg9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGludGVyaXhbMy05XSopCi0gICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubwotICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKLSAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQotICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawotICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgOzsKLSAgaXJpeDUqIHwgaXJpeDYqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTR0kgQysrCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JIyBpbiB0aGUgYXJjaGl2ZS4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JICBlbHNlCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgIC1vICRsaWInCi0JICBmaQotCWZpCi0JbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0JOzsKLSAgICBlc2FjCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0gICAgOzsKLSAgbGludXgqIHwgaypic2QqLWdudSkKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgZ3JlcCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoLCRsaWJkaXInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgaWNwYyopCi0JIyBJbnRlbCBDKysKLQl3aXRoX2dudV9sZD15ZXMKLQkjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scwotCSMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCi0JIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KLQljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KLQkqIlZlcnNpb24gNy4iKikKLSAgCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIDs7Ci0JKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKLQkgIHRtcF9pZHluPQotCSAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OwotCSAgZXNhYwotICAJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgOzsKLQllc2FjCi0JYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JOzsKLSAgICAgIHBnQ0MqKQotICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJwotICAJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICAgIDs7Ci0gICAgICBjeHgqKQotCSMgQ29tcGFxIEMrKwotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCi0KLQlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQysrIDUuOQotCSAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJwotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0KLQkgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KLQkgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKLQkgICMgd291bGQgYmUgYmV0dGVyLgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0KLQkgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICMgaW4gdGhlIGFyY2hpdmUuCi0JICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGx5bnhvcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gIG04OGsqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBtdnMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBjeHgqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgbmV0YnNkKikKLSAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKLSAgICAgIHdsYXJjPQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgIGZpCi0gICAgIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucwotICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJwotICAgIDs7Ci0gIG9wZW5ic2QyKikKLSAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCi0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJwotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGZpCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICBlbHNlCi0gICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgZmkKLSAgICA7OwotICBvc2YzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCi0KLQk7OwotICAgICAgUkNDKikKLQkjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgY3h4KikKLQlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKLQotCWVsc2UKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgbGRfc2hsaWJzX0NYWD1ubwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgb3NmNCogfCBvc2Y1KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICBSQ0MqKQotCSMgUmF0aW9uYWwgQysrIDIuNC4xCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICBjeHgqKQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgotCSAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgLVdsLC1pbnB1dCAtV2wsJGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbgkkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+Ci0JICAkcm0gJGxpYi5leHAnCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIGxkX3NobGlic19DWFg9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHBzb3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBzdW5vczQqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTdW4gQysrIDQueAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgbGNjKikKLQkjIEx1Y2lkCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzb2xhcmlzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLSAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0JY2FzZSAkaG9zdF9vcyBpbgotCSAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotCSAgKikKLQkgICAgIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkgICAgIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KLQkgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCSAgICA7OwotCWVzYWMKLQlsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLQotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JIyBpbiB0aGUgYXJjaGl2ZS4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgZ2N4KikKLQkjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLQotCSMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgotCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgKikKLQkjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgotCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0teiAke3dsfWRlZnMnCi0JICBpZiAkQ0MgLS12ZXJzaW9uIHwgZ3JlcCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCi0JICBlbHNlCi0JICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKLQkgICAgIyBwbGF0Zm9ybS4KLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKLQkgIGZpCi0KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1SICR3bCRsaWJkaXInCi0JICBjYXNlICRob3N0X29zIGluCi0JICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7Ci0JICAqKQotCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQkgICAgOzsKLQkgIGVzYWMKLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS16LHRleHQnCi0gICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICAgICopCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KLSAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCi0gICAgIyBhcyAteiBkZWZzLgotICAgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKLSAgICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQotICAgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCi0gICAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KLSAgICAjIFNvIHRoYXQgYmVoYXZpb3VyIGlzIG9ubHkgZW5hYmxlZCBpZiBTQ09BQlNQQVRIIGlzIHNldCB0byBhCi0gICAgIyBub24tZW1wdHkgdmFsdWUgaW4gdGhlIGVudmlyb25tZW50LiAgTW9zdCBsaWtlbHkgb25seSB1c2VmdWwgZm9yCi0gICAgIyBjcmVhdGluZyBvZmZpY2lhbCBkaXN0cmlidXRpb25zIG9mIHBhY2thZ2VzLgotICAgICMgVGhpcyBpcyBhIGhhY2sgdW50aWwgbGlidG9vbCBvZmZpY2lhbGx5IHN1cHBvcnRzIGFic29sdXRlIHBhdGgKLSAgICAjIG5hbWVzIGZvciBzaGFyZWQgbGlicmFyaWVzLgotICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JwotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teixub2RlZnMnCi0gICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCi0gICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tQmV4cG9ydCcKLSAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgICAgKikKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHRhbmRlbSopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIE5DQyopCi0JIyBOb25TdG9wLVVYIE5DQyAzLjIwCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICB2eHdvcmtzKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlic19DWFgiID4mNjsgfQotdGVzdCAiJGxkX3NobGlic19DWFgiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi1HQ0NfQ1hYPSIkR1hYIgotTERfQ1hYPSIkTEQiCi0KLQotY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotY2xhc3MgRm9vCi17Ci1wdWJsaWM6Ci0gIEZvbyAodm9pZCkgeyBhID0gMDsgfQotcHJpdmF0ZToKLSAgaW50IGE7Ci19OwotRU9GCi0KLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLQotICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCi0gICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgotICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCi0KLSAgIyBUaGUgYConIGluIHRoZSBjYXNlIG1hdGNoZXMgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCB1c2UgYGNhc2UnIGluCi0gICMgJG91dHB1dF92ZXJib3NlX2NtZCBjYW4gdHJpZ2dlciBnbG9iIGV4cGFuc2lvbiBkdXJpbmcgdGhlIGxvb3AKLSAgIyBldmFsIHdpdGhvdXQgdGhpcyBzdWJzdGl0dXRpb24uCi0gIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWAkZWNobyAiWCRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCIgfCAkWHNlZCAtZSAiJG5vX2dsb2Jfc3Vic3QiYAotCi0gIGZvciBwIGluIGBldmFsICRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZGA7IGRvCi0gICAgY2FzZSAkcCBpbgotCi0gICAgLUwqIHwgLVIqIHwgLWwqKQotICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCi0gICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgotICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIFwKLQkgIHx8IHRlc3QgJHAgPSAiLVIiOyB0aGVuCi0JIHByZXY9JHAKLQkgY29udGludWUKLSAgICAgICBlbHNlCi0JIHByZXY9Ci0gICAgICAgZmkKLQotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0JIGNhc2UgJHAgaW4KLQkgLUwqIHwgLVIqKQotCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQotCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQotCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgotCSAgIGlmIHRlc3QgLXogIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIjsgdGhlbgotCSAgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0iJHtwcmV2fSR7cH0iCi0JICAgZWxzZQotCSAgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0iJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSAke3ByZXZ9JHtwfSIKLQkgICBmaQotCSAgIDs7Ci0JICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCi0JICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgotCSBlc2FjCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkcG9zdGRlcHNfQ1hYIjsgdGhlbgotCSAgIHBvc3RkZXBzX0NYWD0iJHtwcmV2fSR7cH0iCi0JIGVsc2UKLQkgICBwb3N0ZGVwc19DWFg9IiR7cG9zdGRlcHNfQ1hYfSAke3ByZXZ9JHtwfSIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIDs7Ci0KLSAgICAqLiRvYmpleHQpCi0gICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCi0gICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCi0gICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCi0JIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCi0JIGNvbnRpbnVlCi0gICAgICAgZmkKLQotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0JIGlmIHRlc3QgLXogIiRwcmVkZXBfb2JqZWN0c19DWFgiOyB0aGVuCi0JICAgcHJlZGVwX29iamVjdHNfQ1hYPSIkcCIKLQkgZWxzZQotCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHByZWRlcF9vYmplY3RzX0NYWCAkcCIKLQkgZmkKLSAgICAgICBlbHNlCi0JIGlmIHRlc3QgLXogIiRwb3N0ZGVwX29iamVjdHNfQ1hYIjsgdGhlbgotCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwIgotCSBlbHNlCi0JICAgcG9zdGRlcF9vYmplY3RzX0NYWD0iJHBvc3RkZXBfb2JqZWN0c19DWFggJHAiCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICA7OwotCi0gICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCi0KLSAgICBlc2FjCi0gIGRvbmUKLQotICAjIENsZWFuIHVwLgotICBybSAtZiBhLm91dCBhLmV4ZQotZWxzZQotICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgQ1hYIHRlc3QgcHJvZ3JhbSIKLWZpCi0KLSRybSAtZiBjb25mZXN0LiRvYmpleHQKLQotIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KLWNhc2UgJGhvc3Rfb3MgaW4KLWludGVyaXhbMy05XSopCi0gICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KLSAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KLSAgcHJlZGVwX29iamVjdHNfQ1hYPQotICBwb3N0ZGVwX29iamVjdHNfQ1hYPQotICBwb3N0ZGVwc19DWFg9Ci0gIDs7Ci0KLWxpbnV4KikKLSAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0gICpTdW5cIEMqKQotICAgICMgU3VuIEMrKyA1LjkKLSAgICAjCi0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCi0gICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCi0gICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KLSAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgotICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQotICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgotICAgICAgcG9zdGRlcHNfQ1hYPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXNvbGFyaXMqKQotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICBDQyopCi0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCi0gICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCi0gICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KLSAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgotICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQotICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCi0gICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAotICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotICA7OwotZXNhYwotCi0KLWNhc2UgIiAkcG9zdGRlcHNfQ1hYICIgaW4KLSoiIC1sYyAiKikgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vIDs7Ci1lc2FjCi0KLWx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPQotbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQotCi0gICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQotICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJwotICAgICAgOzsKLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0gICAgKmRqZ3BwKikKLSAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotICAgICAgOzsKLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgotICAgICAgOzsKLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPS1LY29uZm9ybV9waWMKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4NCogfCBhaXg1KikKLQkjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCWVsc2UKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotCWZpCi0JOzsKLSAgICAgIGNob3J1cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQljeGNoNjgqKQotCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICMgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgQ1hYKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgICBkYXJ3aW4qKQotICAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICAgeGxjKikKLSAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcW5vY29tbW9uJwotICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLSAgICAgICAgICAgOzsKLSAgICAgICAgIGVzYWMKLSAgICAgICA7OwotICAgICAgZGd1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGVjKysqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICA7OwotCSAgZ2hjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0JIyBGcmVlQlNEIHVzZXMgR05VIEMrKwotCTs7Ci0gICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKLQkgICAgZmkKLQkgICAgOzsKLQkgIGFDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotCSAgICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBocHBhKjY0KnxpYTY0KikKLQkgICAgICAjICtaIHRoZSBkZWZhdWx0Ci0JICAgICAgOzsKLQkgICAgKikKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBpbnRlcml4KikKLQkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKLQkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/Ci0JOzsKLSAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCi0JICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbGludXgqIHwgaypic2QqLWdudSkKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgIyBLQUkgQysrIENvbXBpbGVyCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLQkgICAgOzsKLQkgIGljcGMqIHwgZWNwYyopCi0JICAgICMgSW50ZWwgQysrCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCi0JICAgIDs7Ci0JICBwZ0NDKikKLQkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIuCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mcGljJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBDb21wYXEgQysrCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICAqKQotCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkgICAgKlN1blwgQyopCi0JICAgICAgIyBTdW4gQysrIDUuOQotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVFvcHRpb24gbGQgJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGx5bnhvcyopCi0JOzsKLSAgICAgIG04OGsqKQotCTs7Ci0gICAgICBtdnMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBjeHgqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1XIGMsZXhwb3J0YWxsJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIG5ldGJzZCopCi0JOzsKLSAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJwotCSAgICA7OwotCSAgUkNDKikKLQkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgcHNvcyopCi0JOzsKLSAgICAgIHNvbGFyaXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKLQkgICAgOzsKLQkgIGdjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVBJQycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBzdW5vczQqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgICMgU3VuIEMrKyA0LngKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgbGNjKikKLQkgICAgIyBMdWNpZAotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgdGFuZGVtKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgTkNDKikKLQkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHZ4d29ya3MqKQotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIjsgdGhlbgotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxMjcwMTogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxMjcwNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY2OyB9Ci0KLWlmIHRlc3QgeCIkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA9IHh5ZXM7IHRoZW4KLSAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA7OwotICAgICBlc2FjCi1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCi1maQotCi1maQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKLSAgKmRqZ3BwKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0gICAgOzsKLSAgKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCi0gICAgOzsKLWVzYWMKLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWFwiCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKLSAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgotICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCi0gICAgICAgZmkKLSAgICAgZWxzZQotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPSB4eWVzOyB0aGVuCi0gICAgOgotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KLWZpCi0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTI4MDU6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxMjgwOTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mNQotICAgJHJtIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgcm1kaXIgY29uZnRlc3QKLSAgICRybSBjb25mdGVzdCoKLQotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjY7IH0KLQotCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNjsgfQotICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjY7IH0KLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KLSAgICBuZWVkX2xvY2tzPXdhcm4KLSAgZmkKLWVsc2UKLSAgbmVlZF9sb2Nrcz1ubwotZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQotCi0gIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4NCogfCBhaXg1KikKLSAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLSAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0gICAgaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgZWxzZQotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBmaQotICAgIDs7Ci0gIHB3MzIqKQotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSIkbHRkbGxfY21kcyIKLSAgOzsKLSAgY3lnd2luKiB8IG1pbmd3KikKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87L14uKlsgXV9fbm1fXy9zL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgOzsKLSAgKikKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICA7OwotICBlc2FjCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlic19DWFgiID4mNjsgfQotdGVzdCAiJGxkX3NobGlic19DWFgiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi0jCi0jIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/Ci0jCi1jYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCi0KLSAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0NYWCBpbgotICAgIConficqKQotICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgotICAgICAgOzsKLSAgICAnJENDICcqKQotICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQotICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCi0gICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjY7IH0KLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAgc29uYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYj1jb25mdGVzdAotICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgICAgICAgZGVwbGlicz0KLSAgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCi0JcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWAotICAgICAgICBjb21waWxlcl9mbGFncz0tdgotICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKLSAgICAgICAgdmVyc3RyaW5nPQotICAgICAgICBvdXRwdXRfb2JqZGlyPS4KLSAgICAgICAgbGlibmFtZT1jb25mdGVzdAotICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZ19DWFgKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQotICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiIpID4mNQotICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci0gICAgICAgIHRoZW4KLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgICAgICBlbHNlCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCi0gICAgICAgIGZpCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotICAgICAgZWxzZQotICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgIGZpCi0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY2OyB9Ci0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgOzsKLWVzYWMKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICRFQ0hPX0MiID4mNjsgfQotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi0KLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgOzsKLQotYWl4NCogfCBhaXg1KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGVsc2UKLSAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCi0gICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAotICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KLSAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgotICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQotICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKLQkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8IGdyZXAgeWVzID4gL2Rldi9udWxsOyB0aGVuCi0JOgotICAgICAgZWxzZQotCWNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0Ci0gICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bwotICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBlbHNlCi0gICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgotICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZmkKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJwotICA7OwotCi1iZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICA7OwotCi1ic2RpWzQ1XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gICAgICA7OwotICAgIG1pbmd3KikKLSAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4Ci0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gICAgICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQotICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCi0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKLSAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAotICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCi0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLQotICAqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJwotICAgIDs7Ci0gIGVzYWMKLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCi0gIHNobGlicGF0aF92YXI9UEFUSAotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKLSAgdmVyc2lvbl90eXBlPWRhcndpbgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKLSAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCi0KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLWZyZWVic2QxKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7Ci0gICAgKikgb2JqZm9ybWF0PWVsZiA7OwotICAgIGVzYWMKLSAgZmkKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAotICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KLSAgICBmcmVlYnNkLWVsZiopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgICAgbmVlZF92ZXJzaW9uPXllcwotICAgICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X29zIGluCi0gIGZyZWVic2QyKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKLSAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1nbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KLSAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIHNocmV4dF9jbWRzPScuc28nCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgotICAgIGVsc2UKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKLSAgICBmaQotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICA7OwotICAgaHBwYSo2NCopCi0gICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICi0gICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKLSAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgICA7OwotICAgKikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIDs7Ci0gIGVzYWMKLSAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJwotICA7OwotCi1pbnRlcml4WzMtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKLSAgICAqKQotCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkJdmVyc2lvbl90eXBlPWxpbnV4Ci0JZWxzZQotCQl2ZXJzaW9uX3R5cGU9aXJpeAotCWZpIDs7Ci0gIGVzYWMKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgaXJpeDUqIHwgbm9uc3RvcHV4KikKLSAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9Ci0gICAgOzsKLSAgKikKLSAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECi0gICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKLSAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKLSAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQotICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7Ci0gICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCi0gICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OwotICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgotbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotCi0gICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCi0gIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgJGx0X2xkX2V4dHJhIgotICBmaQotCi0gICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgotICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCi0gICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAotICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAotICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKLSAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCi0gIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCi0gIDs7Ci0KLW5ldGJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwotICBlbHNlCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICBmaQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotbmV3c29zNikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW50by1xbngqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1vcGVuYnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopIG5lZWRfdmVyc2lvbj15ZXMgOzsKLSAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3ZlcnNpb249bm8gIDs7Ci0gIGVzYWMKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQk7OwotICAgICAgKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgZWxzZQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgZmkKLSAgOzsKLQotb3MyKikKLSAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi0gIDs7Ci0KLXJkb3MqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1zb2xhcmlzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJwotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICAgIHNuaSkKLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc2NvMy4ydjUqKQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwotICA7OwotCi11dHM0KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci1oYXJkY29kZV9hY3Rpb25fQ1hYPQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIiB8fCBcCi0gICB0ZXN0IC1uICIkcnVucGF0aF92YXJfQ1hYIiB8fCBcCi0gICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiID0gIlh5ZXMiIDsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiICE9IG5vICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIENYWCkiICE9IG5vICYmCi0gICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MX0NYWCIgIT0gbm87IHRoZW4KLSAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgotICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9cmVsaW5rCi0gIGVsc2UKLSAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgotICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9aW1tZWRpYXRlCi0gIGZpCi1lbHNlCi0gICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCi0gICMgZGlyZWN0b3JpZXMuCi0gIGhhcmRjb2RlX2FjdGlvbl9DWFg9dW5zdXBwb3J0ZWQKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb25fQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkY29kZV9hY3Rpb25fQ1hYIiA+JjY7IH0KLQotaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiID0gcmVsaW5rOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotCi0KLSMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBjb21waWxlcl9DWFggXAotICAgIENDX0NYWCBcCi0gICAgTERfQ1hYIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFggXAotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCBcCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCBcCi0gICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0NYWCBcCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYIFwKLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWCBcCi0gICAgb2xkX2FyY2hpdmVfY21kc19DWFggXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIFwKLSAgICBwcmVkZXBfb2JqZWN0c19DWFggXAotICAgIHBvc3RkZXBfb2JqZWN0c19DWFggXAotICAgIHByZWRlcHNfQ1hYIFwKLSAgICBwb3N0ZGVwc19DWFggXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFggXAotICAgIGFyY2hpdmVfY21kc19DWFggXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzX0NYWCBcCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzX0NYWCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIFwKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFggXAotICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWCBcCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFggXAotICAgIGhhcmRjb2RlX2F1dG9tYXRpY19DWFggXAotICAgIG1vZHVsZV9jbWRzX0NYWCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKLSAgICBmaXhfc3JjZmlsZV9wYXRoX0NYWCBcCi0gICAgZXhjbHVkZV9leHBzeW1zX0NYWCBcCi0gICAgaW5jbHVkZV9leHBzeW1zX0NYWDsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIHwgXAotICAgIGFyY2hpdmVfY21kc19DWFggfCBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggfCBcCi0gICAgbW9kdWxlX2NtZHNfQ1hYIHwgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFggfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIHwgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCi0gICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAotICAgIDs7Ci0gIGVzYWMKLQotY2ZnZmlsZT0iJG9maWxlIgotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyX0NYWAotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kR0NDX0NYWAotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9MRF9DWFgKLQotIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KLU5NPSRsdF9OTQotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgotTUFHSUNfQ01EPSRNQUdJQ19DTUQKLQotIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCi1ETExUT09MPSIkRExMVE9PTCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KLU9CSkRVTVA9IiRPQkpEVU1QIgotCi0jIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCi1BUz0iJEFTIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgKLQotIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLW5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLQotIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19DWFgKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0NYWAotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWAotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0NYWAotYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19DWFgKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX0NYWAotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0NYWAotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19DWFgKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X3ByZWRlcHNfQ1hYCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBzPSRsdF9wb3N0ZGVwc19DWFgKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19DWFgKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0NYWAotCi0jIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KLWZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKLQotIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgotZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fQ1hYCi0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFgKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfQ1hYCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0NYWAotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCi0jIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgKLQotIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKLSMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCi1oYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19DWFgKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfQ1hYCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotCi0jIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotCi0jIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi1hbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKLQotIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgotZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19DWFgKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0NYWAotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAotCi0jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi1fX0VPRl9fCi0KLQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1DQz0kbHRfc2F2ZV9DQwotTERDWFg9JExECi1MRD0kbHRfc2F2ZV9MRAotR0NDPSRsdF9zYXZlX0dDQwotd2l0aF9nbnVfbGRjeHg9JHdpdGhfZ251X2xkCi13aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAotbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECi1sdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKLWx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi0KLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBGNzcpCi0JaWYgdGVzdCAtbiAiJEY3NyIgJiYgdGVzdCAiWCRGNzciICE9ICJYbm8iOyB0aGVuCi0KLWFjX2V4dD1mCi1hY19jb21waWxlPSckRjc3IC1jICRGRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckRjc3IC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9mNzdfY29tcGlsZXJfZ251Ci0KLQotYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi1hbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Ci1hbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3PW5vCi1hcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9Ci1oYXJkY29kZV9kaXJlY3RfRjc3PW5vCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3PQotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9Ci1oYXJkY29kZV9taW51c19MX0Y3Nz1ubwotaGFyZGNvZGVfYXV0b21hdGljX0Y3Nz1ubwotbW9kdWxlX2NtZHNfRjc3PQotbW9kdWxlX2V4cHN5bV9jbWRzX0Y3Nz0KLWxpbmtfYWxsX2RlcGxpYnNfRjc3PXVua25vd24KLW9sZF9hcmNoaXZlX2NtZHNfRjc3PSRvbGRfYXJjaGl2ZV9jbWRzCi1ub191bmRlZmluZWRfZmxhZ19GNzc9Ci13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9Ci1lbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz1ubwotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KLWFjX2V4dD1mCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLW9iamV4dF9GNzc9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCi0gICAgICBzdWJyb3V0aW5lIHQKLSAgICAgIHJldHVybgotICAgICAgZW5kCi0iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKLSAgICAgIHByb2dyYW0gdAotICAgICAgZW5kCi0iCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke0Y3Ny0iZjc3In0KLWNvbXBpbGVyPSRDQwotY29tcGlsZXJfRjc3PSRDQwotZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRjYW5fYnVpbGRfc2hhcmVkIiA+JjY7IH0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgZmkKLSAgOzsKLWFpeDQqIHwgYWl4NSopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBmaQotICA7OwotZXNhYwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3NoYXJlZCIgPiY2OyB9Ci0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLSMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRlbmFibGVfc3RhdGljIiA+JjY7IH0KLQotR0NDX0Y3Nz0iJEc3NyIKLUxEX0Y3Nz0iJExEIgotCi1sdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0KLWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0KLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KLQotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgotICAgICAgOzsKLQotICAgIG1zZG9zZGpncHAqKQotICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKLSAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9GNzc9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PS1LY29uZm9ybV9waWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgZWxzZQotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgICBkYXJ3aW4qKQotICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgeGxjKikKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLXFub2NvbW1vbicKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgICAgOzsKLSAgICAgICBlc2FjCi0gICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctRERMTF9FWFBPUlQnCi0gICAgICA7OwotCi0gICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9JytaJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBpY2MqIHwgZWNjKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLXN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQotICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAotCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi0JbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZnBpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgICA7OwotICAgICAgY2NjKikKLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgotICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ub25fc2hhcmVkJwotICAgICAgICA7OwotICAgICAgKikKLSAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCi0JICAjIFN1biBDIDUuOQotCSAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLQkgIDs7Ci0JKlN1blwgRiopCi0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCi0JICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PScnCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHJkb3MqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVFvcHRpb24gbGQgJzs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJzs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctUW9wdGlvbiBsZCAnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1QSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtjb25mb3JtX3BpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICB1bmljb3MqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1waWMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciID4mNjsgfQotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IjsgdGhlbgotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3PW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNDM2OTogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNDM3MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3Nz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3NyIgPiY2OyB9Ci0KLWlmIHRlc3QgeCIkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3IiA9IHh5ZXM7IHRoZW4KLSAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9IiAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IiA7OwotICAgICBlc2FjCi1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PQotICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCi1maQotCi1maQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKLSAgKmRqZ3BwKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Ci0gICAgOzsKLSAgKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciCi0gICAgOzsKLWVzYWMKLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3IGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3N1wiCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3PW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKLSAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgotICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzc9eWVzCi0gICAgICAgZmkKLSAgICAgZWxzZQotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3Nz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzciID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3NyIgPSB4eWVzOyB0aGVuCi0gICAgOgotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0KLWZpCi0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzc9bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTQ0NzM6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNDQ3NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzc9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mNQotICAgJHJtIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgcm1kaXIgY29uZnRlc3QKLSAgICRybSBjb25mdGVzdCoKLQotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3IiA+JjY7IH0KLQotCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3IiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNjsgfQotICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjY7IH0KLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KLSAgICBuZWVkX2xvY2tzPXdhcm4KLSAgZmkKLWVsc2UKLSAgbmVlZF9sb2Nrcz1ubwotZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQotCi0gIHJ1bnBhdGhfdmFyPQotICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Ci0gIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PW5vCi0gIGFyY2hpdmVfY21kc19GNzc9Ci0gIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PQotICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0Y3Nz0KLSAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfRjc3PQotICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PQotICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9Ci0gIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19GNzc9Ci0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PQotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0KLSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9Ci0gIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLSAgaGFyZGNvZGVfbWludXNfTF9GNzc9bm8KLSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9dW5zdXBwb3J0ZWQKLSAgbGlua19hbGxfZGVwbGlic19GNzc9dW5rbm93bgotICBoYXJkY29kZV9hdXRvbWF0aWNfRjc3PW5vCi0gIG1vZHVsZV9jbWRzX0Y3Nz0KLSAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3Nz0KLSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz1ubwotICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIGluY2x1ZGVfZXhwc3ltc19GNzc9Ci0gICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KLSAgZXhjbHVkZV9leHBzeW1zX0Y3Nz0iX0dMT0JBTF9PRkZTRVRfVEFCTEVfIgotICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKLSAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCi0gICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAotICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KLSAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0gICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KLSAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLQotICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCi0gICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwogICAgIGZpCiAgICAgOzsKLSAgaW50ZXJpeCopCi0gICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKLSAgICB3aXRoX2dudV9sZD15ZXMKLSAgICA7OwotICBvcGVuYnNkKikKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIDs7Ci0gIGVzYWMKIAotICBsZF9zaGxpYnNfRjc3PXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHt3bH0nCi0KLSAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQotICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQotICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KLSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLSAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBlbHNlCi0gIAl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9CisgIGFpeFs0LTldKikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwogICAgIGZpCi0gICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgotICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQotICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KLSAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KLSAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCi0gICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7Ci0gICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9CiAKLSAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4MyogfCBhaXg0KiB8IGFpeDUqKQotICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCi0JbGRfc2hsaWJzX0Y3Nz1ubwotCWNhdCA8PEVPRiAxPiYyCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zdGF0aWMiID4mNjsgfQogCi0qKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCi0qKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KLSoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQotKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAotKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KIAotRU9GCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLQotICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKLSAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCi0gICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKLSAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCi0gICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKLSAgICAgICMgdGhlbS4KLSAgICAgIGxkX3NobGlic19GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBiZW9zKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLQkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIEY3NykgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz1ubwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzc9eWVzCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0KLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0JIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQllbHNlCi0JICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZml+Ci0JJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLSAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgOzsKLQotICAgIGdudSogfCBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JdG1wX2FkZGZsYWc9Ci0JY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0JcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKLQkgIDs7Ci0JcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKLQllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7Ci0JZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKLQlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgotCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKLQllc2FjCi0JY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqKQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnIDs7Ci0JZXNhYwotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0KLQlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCWZpCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCi0Jd2xhcmM9Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCi0JbGRfc2hsaWJzX0Y3Nz1ubwotCWNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5Ci0qKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1FT0YKLSAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgotICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQotCWxkX3NobGlic19GNzc9bm8KLQljYXQgPDxfTFRfRU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKLSoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotX0xUX0VPRgotCTs7Ci0JKikKLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJwotCSAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lLC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBsZF9zaGxpYnNfRjc3PW5vCi0JICBmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCAiJGxkX3NobGlic19GNzciID0gbm87IHRoZW4KLSAgICAgIHJ1bnBhdGhfdmFyPQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Ci0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PQotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQotICAgIGZpCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqKQotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3PXllcwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKLSAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgotCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotCSMgYnJva2VuIGNvbGxlY3QyLgotCWhhcmRjb2RlX2RpcmVjdF9GNzc9dW5zdXBwb3J0ZWQKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYWl4NCogfCBhaXg1KikKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9IiIKLSAgICAgIGVsc2UKLQkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLQkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0JaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0JICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZWxzZQotCSAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQlmaQotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCi0JICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KLSAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotICAJICAgIGJyZWFrCi0gIAkgIGZpCi0JICBkb25lCi0JICA7OwotCWVzYWMKLQotCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgICAgZmkKLQotICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PScnCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQotCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgOgotCSAgZWxzZQotICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0gIAkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9dW5zdXBwb3J0ZWQKLSAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLSAgCSAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCXNoYXJlZF9mbGFnPSctc2hhcmVkJwotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0JZmkKLSAgICAgIGVsc2UKLQkjIG5vdCB1c2luZyBnY2MKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLSAgCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0JZWxzZQotCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJwotCSAgZWxzZQotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCSAgZmkKLQlmaQotICAgICAgZmkKLQotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz15ZXMKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Jy1iZXJvaycKLSAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSAgICAgIHByb2dyYW0gbWFpbgotCi0gICAgICBlbmQKLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLQotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi1maQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCiAKIGZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0KLSAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgICBlbHNlCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0iLXogbm9kZWZzIgotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0JZWxzZQotCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLQkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLQotICAgICAgZW5kCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0JIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWJlcm5vdG9rJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgJHt3bH0tYmVyb2snCi0JICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJGNvbnZlbmllbmNlJwotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PXllcwotCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIGJzZGlbNDVdKikKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyAnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0gICAgICBsaWJleHQ9bGliCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCAkU0VEIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19GNzc9J3RydWUnCi0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotICAgICAgb2xkX2FyY2hpdmVfY21kc19GNzc9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLSAgICAgIGZpeF9zcmNmaWxlX3BhdGhfRjc3PSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PXllcwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCi0gICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLlswMTJdKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfYXV0b21hdGljX0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PXVuc3VwcG9ydGVkCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JycKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcwotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgotICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCi0gICAgICBtb2R1bGVfY21kc19GNzc9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICBtb2R1bGVfY21kc19GNzc9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIGxkX3NobGlic19GNzc9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgICA7OwotCi0gICAgZGd1eCopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBmcmVlYnNkMSopCi0gICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgICBmcmVlYnNkMiopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgaHB1eDkqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0KLSAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0gICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLSAgICAgIDs7Ci0KLSAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotCi0JaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJwotCi0JIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQloYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eDExKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfStiICR7d2x9JGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzc9JytiICRsaWJkaXInCi0JICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCi0JICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotCSAgOzsKLQkqKQotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3PSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIG9wZW5ic2QqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLQloYXJkY29kZV9kaXJlY3RfRjc3PXllcwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJwotCWVsc2UKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotCSAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCi0JICAgICA7OwotCSAgICopCi0JICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgIDs7Ci0JICBlc2FjCi0gICAgICAgIGZpCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckZWNobyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0Y3Nz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgOzsKLQotICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLSAgICAgIDs7Ci0KLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBlbHNlCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBub191bmRlZmluZWRfZmxhZ19GNzc9JyAteiB0ZXh0JwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQl3bGFyYz0nJHt3bH0nCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGVsc2UKLQl3bGFyYz0nJwotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKLSAgICAgICopCi0JIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCi0JIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0gCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCWVsc2UKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgotCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KLQkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIHJlbG9hZF9jbWRzX0Y3Nz0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlsZF9zaGxpYnNfRjc3PXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS16LHRleHQnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS16LHRleHQnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXosbm9kZWZzJwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUJleHBvcnQnCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGxkX3NobGlic19GNzc9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfRjc3IiA+JjY7IH0KLXRlc3QgIiRsZF9zaGxpYnNfRjc3IiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzciIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJGFyY2hpdmVfY21kc19GNzcgaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3NwotCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3Ci0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0KLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzX0Y3NyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kc19GNzcgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgICAgICB0aGVuCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KLSAgICAgICAgZWxzZQotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PXllcwotICAgICAgICBmaQotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzciID4mNjsgfQotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjY7IH0KLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeDQqIHwgYWl4NSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKLSAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCi0JICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgZWxzZQotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGZpCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVs0NV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgotICAgICAgOzsKLSAgICBtaW5ndyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKLSAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAotICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCi0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKLSAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAotICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgcHczMiopCi0gICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwotICA7OwotCi1kZ3V4KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkMSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwotICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KLSAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KLSAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMiopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCi0gIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0JOzsKLSAgICAgICopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCTs7Ci0gICAgICBlc2FjCi0gIGVsc2UKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGZpCi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKLSAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICB2ZXJzaW9uX3R5cGU9b3NmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotICA7OwotCi1yZG9zKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotc29sYXJpcyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBmaQotICBuZWVkX3ZlcnNpb249eWVzCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICBzbmkpCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCi0gICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgICAgOzsKLSAgICBzaWVtZW5zKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIG1vdG9yb2xhKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKLSAgICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0gICAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBmaQotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2OyB9Ci10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNjsgfQotaGFyZGNvZGVfYWN0aW9uX0Y3Nz0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3NyIgfHwgXAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0Y3NyIgfHwgXAotICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfRjc3IiA9ICJYeWVzIiA7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfRjc3IiAhPSBubyAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBGNzcpIiAhPSBubyAmJgotICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9GNzciICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb25fRjc3PXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBoYXJkY29kZV9hY3Rpb25fRjc3PWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBoYXJkY29kZV9hY3Rpb25fRjc3PXVuc3VwcG9ydGVkCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0Y3NyIgPiY2OyB9Ci0KLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fRjc3IiA9IHJlbGluazsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwotZmkKLQotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXJfRjc3IFwKLSAgICBDQ19GNzcgXAotICAgIExEX0Y3NyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzcgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3IFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19GNzcgXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzcgXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19GNzcgXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3NyBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzcgXAotICAgIG9sZF9hcmNoaXZlX2NtZHNfRjc3IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0Y3NyBcCi0gICAgcHJlZGVwX29iamVjdHNfRjc3IFwKLSAgICBwb3N0ZGVwX29iamVjdHNfRjc3IFwKLSAgICBwcmVkZXBzX0Y3NyBcCi0gICAgcG9zdGRlcHNfRjc3IFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfRjc3IFwKLSAgICBhcmNoaXZlX2NtZHNfRjc3IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3NyBcCi0gICAgcG9zdGluc3RhbGxfY21kc19GNzcgXAotICAgIHBvc3R1bmluc3RhbGxfY21kc19GNzcgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3NyBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3IFwKLSAgICBub191bmRlZmluZWRfZmxhZ19GNzcgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3IFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3NyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzcgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3IFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWNfRjc3IFwKLSAgICBtb2R1bGVfY21kc19GNzcgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzcgXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aF9GNzcgXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19GNzcgXAotICAgIGluY2x1ZGVfZXhwc3ltc19GNzc7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0Y3NyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0Y3NyB8IFwKLSAgICBhcmNoaXZlX2NtZHNfRjc3IHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3IHwgXAotICAgIG1vZHVsZV9jbWRzX0Y3NyB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3IHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3NyB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3NyB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWNmZ2ZpbGU9IiRvZmlsZSIKLQotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3Ci0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3NwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9GNzcKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQ19GNzcKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTERfRjc3Ci0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9GNzcKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0Y3NwotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3Ci0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3NwotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0Y3NwotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzcKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3Ci0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3Ci0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19GNzcKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0Y3NwotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzcKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19GNzcKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfRjc3Ci1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19GNzcKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0Y3NwotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19GNzcKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfRjc3Ci0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzX0Y3NwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfRjc3Ci0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0Y3NwotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3Ci0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19GNzcKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0Y3NwotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3Ci0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3Ci0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3NwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0Y3NwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9GNzcKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3Ci0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfRjc3Ci0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0Y3NwotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3Ci0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfRjc3Ci0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19GNzcKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19GNzcKLQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotX19FT0ZfXwotCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwogYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwpAQCAtMTY1NjUsMzE2MCArMTA5NTYsNDAgQEAKIAogQ0M9IiRsdF9zYXZlX0NDIgogCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKIAotICAgICAgR0NKKQotCWlmIHRlc3QgLW4gIiRHQ0oiICYmIHRlc3QgIlgkR0NKIiAhPSAiWG5vIjsgdGhlbgogCiAKLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1qYXZhCiAKLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHRfR0NKPSRvYmpleHQKIAotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iY2xhc3MgZm9vIHt9IgogCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwdWJsaWMgY2xhc3MgY29uZnRlc3QgeyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmd2KSB7fTsgfScKIAotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgogCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9CiAKLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQogCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCiAKIAotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgorICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgbGlidG9vbCIKIAotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgogCiAKLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke0dDSi0iZ2NqIn0KLWNvbXBpbGVyPSRDQwotY29tcGlsZXJfR0NKPSRDQwotZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKIAorIyBPbmx5IGV4cGFuZCBvbmNlOgogCi0jIEdDSiBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCi1hcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KIAotb2xkX2FyY2hpdmVfY21kc19HQ0o9JG9sZF9hcmNoaXZlX2NtZHMKIAogCi1sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0o9CiAKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSj0nIC1mbm8tYnVpbHRpbicKLQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY2NjI6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTY2NjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA9IHh5ZXM7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0o9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0ogLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKLWVsc2UKLSAgICA6Ci1maQotCi1maQotCi1sdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0KLWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0KLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KLQotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgotICAgICAgOzsKLQotICAgIG1zZG9zZGpncHAqKQotICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKLSAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9HQ0o9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPS1LY29uZm9ybV9waWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgZWxzZQotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgICBkYXJ3aW4qKQotICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgeGxjKikKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLXFub2NvbW1vbicKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgICAgOzsKLSAgICAgICBlc2FjCi0gICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctRERMTF9FWFBPUlQnCi0gICAgICA7OwotCi0gICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9JytaJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBpY2MqIHwgZWNjKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLXN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQotICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAotCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi0JbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZnBpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgICA7OwotICAgICAgY2NjKikKLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgotICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ub25fc2hhcmVkJwotICAgICAgICA7OwotICAgICAgKikKLSAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCi0JICAjIFN1biBDIDUuOQotCSAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLQkgIDs7Ci0JKlN1blwgRiopCi0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCi0JICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPScnCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHJkb3MqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVFvcHRpb24gbGQgJzs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJzs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctUW9wdGlvbiBsZCAnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1QSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtjb25mb3JtX3BpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICB1bmljb3MqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1waWMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiID4mNjsgfQotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIjsgdGhlbgotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKPW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNjk1MjogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNjk1NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSiIgPiY2OyB9Ci0KLWlmIHRlc3QgeCIkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKIiA9IHh5ZXM7IHRoZW4KLSAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0ogaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9IiAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIiA7OwotICAgICBlc2FjCi1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPQotICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCi1maQotCi1maQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKLSAgKmRqZ3BwKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Ci0gICAgOzsKLSAgKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiCi0gICAgOzsKLWVzYWMKLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSlwiCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKLSAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgotICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0o9eWVzCi0gICAgICAgZmkKLSAgICAgZWxzZQotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0oiID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSiIgPSB4eWVzOyB0aGVuCi0gICAgOgotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0KLWZpCi0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0o9bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTcwNTY6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNzA2MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0o9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mNQotICAgJHJtIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgcm1kaXIgY29uZnRlc3QKLSAgICRybSBjb25mdGVzdCoKLQotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKIiA+JjY7IH0KLQotCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNjsgfQotICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjY7IH0KLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KLSAgICBuZWVkX2xvY2tzPXdhcm4KLSAgZmkKLWVsc2UKLSAgbmVlZF9sb2Nrcz1ubwotZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQotCi0gIHJ1bnBhdGhfdmFyPQotICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9Ci0gIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPW5vCi0gIGFyY2hpdmVfY21kc19HQ0o9Ci0gIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPQotICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0dDSj0KLSAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKPQotICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPQotICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9Ci0gIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19HQ0o9Ci0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPQotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSj0KLSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9Ci0gIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KLSAgaGFyZGNvZGVfbWludXNfTF9HQ0o9bm8KLSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9dW5zdXBwb3J0ZWQKLSAgbGlua19hbGxfZGVwbGlic19HQ0o9dW5rbm93bgotICBoYXJkY29kZV9hdXRvbWF0aWNfR0NKPW5vCi0gIG1vZHVsZV9jbWRzX0dDSj0KLSAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSj0KLSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj1ubwotICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIGluY2x1ZGVfZXhwc3ltc19HQ0o9Ci0gICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KLSAgZXhjbHVkZV9leHBzeW1zX0dDSj0iX0dMT0JBTF9PRkZTRVRfVEFCTEVfIgotICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKLSAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCi0gICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAotICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KLSAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0gICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KLSAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLQotICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCi0gICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotICAgICAgd2l0aF9nbnVfbGQ9bm8KLSAgICBmaQotICAgIDs7Ci0gIGludGVyaXgqKQotICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCi0gICAgd2l0aF9nbnVfbGQ9eWVzCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICA7OwotICBlc2FjCi0KLSAgbGRfc2hsaWJzX0dDSj15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZWxzZQotICAJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPQotICAgIGZpCi0gICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgotICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQotICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KLSAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KLSAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCi0gICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7Ci0gICAgZXNhYwotCi0gICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKLSAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCWxkX3NobGlic19HQ0o9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCi0qKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KLSoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQotKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAotKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLQotICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKLSAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCi0gICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKLSAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCi0gICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKLSAgICAgICMgdGhlbS4KLSAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBiZW9zKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAotCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLQkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIEdDSikgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj1ubwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0o9eWVzCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0KLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0JIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQllbHNlCi0JICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZml+Ci0JJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKLSAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgOzsKLQotICAgIGdudSogfCBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JdG1wX2FkZGZsYWc9Ci0JY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0JcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKLQkgIDs7Ci0JcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKLQllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7Ci0JZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKLQlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgotCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKLQllc2FjCi0JY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqKQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnIDs7Ci0JZXNhYwotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0KLQlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCWZpCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCi0Jd2xhcmM9Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCi0JbGRfc2hsaWJzX0dDSj1ubwotCWNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5Ci0qKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1FT0YKLSAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgotICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQotCWxkX3NobGlic19HQ0o9bm8KLQljYXQgPDxfTFRfRU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKLSoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotX0xUX0VPRgotCTs7Ci0JKikKLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJwotCSAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lLC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBsZF9zaGxpYnNfR0NKPW5vCi0JICBmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCAiJGxkX3NobGlic19HQ0oiID0gbm87IHRoZW4KLSAgICAgIHJ1bnBhdGhfdmFyPQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Ci0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPQotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPQotICAgIGZpCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqKQotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfR0NKPXllcwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKLSAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgotCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotCSMgYnJva2VuIGNvbGxlY3QyLgotCWhhcmRjb2RlX2RpcmVjdF9HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYWl4NCogfCBhaXg1KikKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9IiIKLSAgICAgIGVsc2UKLQkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLQkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0JaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0JICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZWxzZQotCSAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQlmaQotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCi0JICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KLSAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotICAJICAgIGJyZWFrCi0gIAkgIGZpCi0JICBkb25lCi0JICA7OwotCWVzYWMKLQotCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgICAgZmkKLQotICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPScnCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQotCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgOgotCSAgZWxzZQotICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0gIAkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9dW5zdXBwb3J0ZWQKLSAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLSAgCSAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPQotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCXNoYXJlZF9mbGFnPSctc2hhcmVkJwotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0JZmkKLSAgICAgIGVsc2UKLQkjIG5vdCB1c2luZyBnY2MKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLSAgCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0JZWxzZQotCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJwotCSAgZWxzZQotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCSAgZmkKLQlmaQotICAgICAgZmkKLQotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj15ZXMKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9Jy1iZXJvaycKLSAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0gICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgICAgZWxzZQotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9Ii16IG5vZGVmcyIKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLQotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi1maQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0KLQkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tYmVybm90b2snCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAke3dsfS1iZXJvaycKLQkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPSckY29udmVuaWVuY2UnCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9eWVzCi0JICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLQlmaQotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCi0gICAgICBsZF9zaGxpYnNfR0NKPW5vCi0gICAgICA7OwotCi0gICAgYnNkaVs0NV0qKQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0tcmR5bmFtaWMKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLSAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nICcKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSAgICAgIGxpYmV4dD1saWIKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0dDSj0ndHJ1ZScKLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0gICAgICBvbGRfYXJjaGl2ZV9jbWRzX0dDSj0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotICAgICAgZml4X3NyY2ZpbGVfcGF0aF9HQ0o9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0o9eWVzCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKLSAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICA7OwotICAgICAgICopICMgRGFyd2luIDEuMyBvbgotICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCi0gICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCi0gICAgICAgICAgICAgMTAuWzAxMl0pCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAxMC4qKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgIGVzYWMKLSAgICAgICAgIGZpCi0gICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0gICAgICBoYXJkY29kZV9hdXRvbWF0aWNfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJwotICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCi0gICAgCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKLSAgICAgIG1vZHVsZV9jbWRzX0dDSj0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSj0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgIG1vZHVsZV9jbWRzX0dDSj0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfR0NKPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgbGRfc2hsaWJzX0dDSj1ubwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICAgIDs7Ci0KLSAgICBkZ3V4KikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIGZyZWVic2QxKikKLSAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKLSAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KLSAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKLSAgICAjIGV4dHJhIHNwYWNlKS4KLSAgICBmcmVlYnNkMi4yKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgotICAgIGZyZWVic2QyKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KLSAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLQotICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJwotICAgICAgOzsKLQotICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfStiICR7d2x9JGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0KLQloYXJkY29kZV9kaXJlY3RfR0NKPXllcwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0KLQkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCWhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCp8aWE2NCopCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSj0nK2IgJGxpYmRpcicKLQkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KLQkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0JICA7OwotCSopCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKLQotCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCSAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0o9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgb3BlbmJzZCopCi0gICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotCWhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0JZWxzZQotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCi0JICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKLQkgICAgIDs7Ci0JICAgKikKLQkgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICAgOzsKLQkgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG9zMiopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRlY2hvICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfR0NKPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICA7OwotCi0gICAgb3NmMyopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotICAgICAgOzsKLQotICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGVsc2UKLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCi0KLQkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5Ci0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSj0nIC16IHRleHQnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCXdsYXJjPScke3dsfScKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotICAgICAgZWxzZQotCXdsYXJjPScnCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotICAgICAgKikKLQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKLQkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KLSAJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JZWxzZQotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCi0JIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubwotCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCkKLSAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0Jc25pKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/Ci0JOzsKLQlzaWVtZW5zKQotCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCi0JICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgcmVsb2FkX2NtZHNfR0NKPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLQkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KLSAgICAgICAgOzsKLQltb3Rvcm9sYSkKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0LjMqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9Jy1CZXhwb3J0JwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLQlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcwotCWxkX3NobGlic19HQ0o9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCi0gICAgICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXosdGV4dCcKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KLSAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCi0gICAgICAjIGFzIC16IGRlZnMuCi0gICAgICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXosdGV4dCcKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0teixub2RlZnMnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj0nOicKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tQmV4cG9ydCcKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbGRfc2hsaWJzX0dDSj1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlic19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlic19HQ0oiID4mNjsgfQotdGVzdCAiJGxkX3NobGlic19HQ0oiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi0jCi0jIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/Ci0jCi1jYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSiIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9eWVzCi0KLSAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0dDSiBpbgotICAgIConficqKQotICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgotICAgICAgOzsKLSAgICAnJENDICcqKQotICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQotICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCi0gICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjY7IH0KLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAgc29uYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYj1jb25mdGVzdAotICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgICAgICAgZGVwbGlicz0KLSAgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKCi0JcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSgotICAgICAgICBjb21waWxlcl9mbGFncz0tdgotICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKLSAgICAgICAgdmVyc3RyaW5nPQotICAgICAgICBvdXRwdXRfb2JqZGlyPS4KLSAgICAgICAgbGlibmFtZT1jb25mdGVzdAotICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZ19HQ0oKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPQotICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHNfR0NKIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiIpID4mNQotICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0dDSiAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci0gICAgICAgIHRoZW4KLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubwotICAgICAgICBlbHNlCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9eWVzCi0gICAgICAgIGZpCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotICAgICAgZWxzZQotICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgIGZpCi0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSiIgPiY2OyB9Ci0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgOzsKLWVzYWMKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICRFQ0hPX0MiID4mNjsgfQotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi0KLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgOzsKLQotYWl4NCogfCBhaXg1KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGVsc2UKLSAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCi0gICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAotICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KLSAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgotICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQotICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKLQkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8IGdyZXAgeWVzID4gL2Rldi9udWxsOyB0aGVuCi0JOgotICAgICAgZWxzZQotCWNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0Ci0gICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bwotICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBlbHNlCi0gICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgotICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZmkKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJwotICA7OwotCi1iZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICA7OwotCi1ic2RpWzQ1XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gICAgICA7OwotICAgIG1pbmd3KikKLSAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4Ci0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gICAgICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQotICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCi0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKLSAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAotICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCi0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLQotICAqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJwotICAgIDs7Ci0gIGVzYWMKLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCi0gIHNobGlicGF0aF92YXI9UEFUSAotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKLSAgdmVyc2lvbl90eXBlPWRhcndpbgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKLSAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCi0KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLWZyZWVic2QxKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7Ci0gICAgKikgb2JqZm9ybWF0PWVsZiA7OwotICAgIGVzYWMKLSAgZmkKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAotICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KLSAgICBmcmVlYnNkLWVsZiopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgICAgbmVlZF92ZXJzaW9uPXllcwotICAgICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X29zIGluCi0gIGZyZWVic2QyKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKLSAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1nbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KLSAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIHNocmV4dF9jbWRzPScuc28nCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgotICAgIGVsc2UKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKLSAgICBmaQotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICA7OwotICAgaHBwYSo2NCopCi0gICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICi0gICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKLSAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgICA7OwotICAgKikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIDs7Ci0gIGVzYWMKLSAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJwotICA7OwotCi1pbnRlcml4WzMtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKLSAgICAqKQotCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkJdmVyc2lvbl90eXBlPWxpbnV4Ci0JZWxzZQotCQl2ZXJzaW9uX3R5cGU9aXJpeAotCWZpIDs7Ci0gIGVzYWMKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgaXJpeDUqIHwgbm9uc3RvcHV4KikKLSAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9Ci0gICAgOzsKLSAgKikKLSAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECi0gICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKLSAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKLSAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQotICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7Ci0gICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCi0gICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OwotICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgotbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotCi0gICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCi0gIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgJGx0X2xkX2V4dHJhIgotICBmaQotCi0gICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgotICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCi0gICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAotICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAotICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKLSAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCi0gIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCi0gIDs7Ci0KLW5ldGJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwotICBlbHNlCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICBmaQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotbmV3c29zNikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW50by1xbngqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1vcGVuYnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopIG5lZWRfdmVyc2lvbj15ZXMgOzsKLSAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3ZlcnNpb249bm8gIDs7Ci0gIGVzYWMKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQk7OwotICAgICAgKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgZWxzZQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgZmkKLSAgOzsKLQotb3MyKikKLSAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi0gIDs7Ci0KLXJkb3MqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1zb2xhcmlzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJwotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICAgIHNuaSkKLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc2NvMy4ydjUqKQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwotICA7OwotCi11dHM0KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci1oYXJkY29kZV9hY3Rpb25fR0NKPQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKIiB8fCBcCi0gICB0ZXN0IC1uICIkcnVucGF0aF92YXJfR0NKIiB8fCBcCi0gICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19HQ0oiID0gIlh5ZXMiIDsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9HQ0oiICE9IG5vICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIEdDSikiICE9IG5vICYmCi0gICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MX0dDSiIgIT0gbm87IHRoZW4KLSAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgotICAgIGhhcmRjb2RlX2FjdGlvbl9HQ0o9cmVsaW5rCi0gIGVsc2UKLSAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgotICAgIGhhcmRjb2RlX2FjdGlvbl9HQ0o9aW1tZWRpYXRlCi0gIGZpCi1lbHNlCi0gICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCi0gICMgZGlyZWN0b3JpZXMuCi0gIGhhcmRjb2RlX2FjdGlvbl9HQ0o9dW5zdXBwb3J0ZWQKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb25fR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkY29kZV9hY3Rpb25fR0NKIiA+JjY7IH0KLQotaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbl9HQ0oiID0gcmVsaW5rOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotCi0KLSMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBjb21waWxlcl9HQ0ogXAotICAgIENDX0dDSiBcCi0gICAgTERfR0NKIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSiBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0ogXAotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSiBcCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSiBcCi0gICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0dDSiBcCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKIFwKLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSiBcCi0gICAgb2xkX2FyY2hpdmVfY21kc19HQ0ogXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfR0NKIFwKLSAgICBwcmVkZXBfb2JqZWN0c19HQ0ogXAotICAgIHBvc3RkZXBfb2JqZWN0c19HQ0ogXAotICAgIHByZWRlcHNfR0NKIFwKLSAgICBwb3N0ZGVwc19HQ0ogXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9HQ0ogXAotICAgIGFyY2hpdmVfY21kc19HQ0ogXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKIFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzX0dDSiBcCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzX0dDSiBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKIFwKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0ogXAotICAgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSiBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0ogXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSiBcCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0ogXAotICAgIGhhcmRjb2RlX2F1dG9tYXRpY19HQ0ogXAotICAgIG1vZHVsZV9jbWRzX0dDSiBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSiBcCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKIFwKLSAgICBmaXhfc3JjZmlsZV9wYXRoX0dDSiBcCi0gICAgZXhjbHVkZV9leHBzeW1zX0dDSiBcCi0gICAgaW5jbHVkZV9leHBzeW1zX0dDSjsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIG9sZF9hcmNoaXZlX2NtZHNfR0NKIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfR0NKIHwgXAotICAgIGFyY2hpdmVfY21kc19HQ0ogfCBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0ogfCBcCi0gICAgbW9kdWxlX2NtZHNfR0NKIHwgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0ogfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKIHwgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCi0gICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAotICAgIDs7Ci0gIGVzYWMKLQotY2ZnZmlsZT0iJG9maWxlIgotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyX0dDSgotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kR0NDX0dDSgotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9MRF9HQ0oKLQotIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KLU5NPSRsdF9OTQotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgotTUFHSUNfQ01EPSRNQUdJQ19DTUQKLQotIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCi1ETExUT09MPSIkRExMVE9PTCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KLU9CSkRVTVA9IiRPQkpEVU1QIgotCi0jIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCi1BUz0iJEFTIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0dDSgotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfR0NKCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0oKLQotIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLW5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLQotIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSgotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0oKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19HQ0oKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0dDSgotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfR0NKCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSgotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0dDSgotYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19HQ0oKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX0dDSgotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfR0NKCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0dDSgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19HQ0oKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X3ByZWRlcHNfR0NKCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBzPSRsdF9wb3N0ZGVwc19HQ0oKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfR0NKCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19HQ0oKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0dDSgotCi0jIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KLWZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKLQotIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgotZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fR0NKCi0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0oKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0oKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfR0NKCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0dDSgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCi0jIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0oKLQotIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKLSMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCi1oYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19HQ0oKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfR0NKCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotCi0jIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotCi0jIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi1hbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0oKLQotIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgotZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19HQ0oKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0dDSgotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0dDSgotCi0jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi1fX0VPRl9fCi0KLQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1DQz0iJGx0X3NhdmVfQ0MiCi0KLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBSQykKLQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgotYWNfZXh0PXJjCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotb2JqZXh0X1JDPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi0KLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9IiRDQyIKLUNDPSR7UkMtIndpbmRyZXMifQotY29tcGlsZXI9JENDCi1jb21waWxlcl9SQz0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLWx0X2N2X3Byb2dfY29tcGlsZXJfY19vX1JDPXllcwotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXJfUkMgXAotICAgIENDX1JDIFwKLSAgICBMRF9SQyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9SQyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfUkMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX1JDIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19SQyBcCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX1JDIFwKLSAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfUkMgXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX1JDIFwKLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX1JDIFwKLSAgICBvbGRfYXJjaGl2ZV9jbWRzX1JDIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX1JDIFwKLSAgICBwcmVkZXBfb2JqZWN0c19SQyBcCi0gICAgcG9zdGRlcF9vYmplY3RzX1JDIFwKLSAgICBwcmVkZXBzX1JDIFwKLSAgICBwb3N0ZGVwc19SQyBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX1JDIFwKLSAgICBhcmNoaXZlX2NtZHNfUkMgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfUkMgXAotICAgIHBvc3RpbnN0YWxsX2NtZHNfUkMgXAotICAgIHBvc3R1bmluc3RhbGxfY21kc19SQyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfUkMgXAotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX1JDIFwKLSAgICBub191bmRlZmluZWRfZmxhZ19SQyBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19SQyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19SQyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9SQyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9SQyBcCi0gICAgaGFyZGNvZGVfYXV0b21hdGljX1JDIFwKLSAgICBtb2R1bGVfY21kc19SQyBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX1JDIFwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19SQyBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aF9SQyBcCi0gICAgZXhjbHVkZV9leHBzeW1zX1JDIFwKLSAgICBpbmNsdWRlX2V4cHN5bXNfUkM7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzX1JDIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfUkMgfCBcCi0gICAgYXJjaGl2ZV9jbWRzX1JDIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfUkMgfCBcCi0gICAgbW9kdWxlX2NtZHNfUkMgfCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX1JDIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX1JDIHwgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfUkMgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCi0gICAgOzsKLSAgZXNhYwotCi1jZmdmaWxlPSIkb2ZpbGUiCi0KLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi0jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLSMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKLQotIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgotU0hFTEw9JGx0X1NIRUxMCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCi1idWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjX1JDCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX1JDCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyX1JDCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0NfUkMKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTERfUkMKLQotIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KLU5NPSRsdF9OTQotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgotTUFHSUNfQ01EPSRNQUdJQ19DTUQKLQotIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCi1ETExUT09MPSIkRExMVE9PTCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KLU9CSkRVTVA9IiRPQkpEVU1QIgotCi0jIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCi1BUz0iJEFTIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX1JDCi0KLSMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgotb2JqZXh0PSIkYWNfb2JqZXh0IgotCi0jIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCi0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSIkZXhlZXh0IgotCi0jIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLXBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19SQwotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fUkMKLQotIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLW5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLQotIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19SQwotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19SQwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19SQwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KLXRocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjX1JDCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19SQwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfUkMKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfUkMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19SQwotYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19SQwotcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcwotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfUkMKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX1JDCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX1JDCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX1JDCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzX1JDCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBzPSRsdF9wb3N0ZGVwc19SQwotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9SQwotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfUkMKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX1JDCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9SQwotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfUkMKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9SQwotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9SQwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X1JDCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX1JDCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX1JDCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfUkMKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfUkMKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX1JDCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfUkMKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX1JDCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfUkMKLQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotX19FT0ZfXwotCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotQ0M9IiRsdF9zYXZlX0NDIgotCi0JOzsKLQotICAgICAgKikKLQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBVbnN1cHBvcnRlZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogVW5zdXBwb3J0ZWQgdGFnIG5hbWU6ICR0YWduYW1lIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBBcHBlbmQgdGhlIG5ldyB0YWcgbmFtZSB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIiA7IHRoZW4KLSAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgJHRhZ25hbWUiCi0gICAgZmkKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotCi0gICMgTm93IHN1YnN0aXR1dGUgdGhlIHVwZGF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgaWYgZXZhbCAic2VkIC1lICdzL15hdmFpbGFibGVfdGFncz0uKlwkL2F2YWlsYWJsZV90YWdzPVwiJGF2YWlsYWJsZV90YWdzXCIvJyBcIiRvZmlsZVwiID4gXCIke29maWxlfVRcIiI7IHRoZW4KLSAgICBtdiAiJHtvZmlsZX1UIiAiJG9maWxlIgotICAgIGNobW9kICt4ICIkb2ZpbGUiCi0gIGVsc2UKLSAgICBybSAtZiAiJHtvZmlsZX1UIgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVuYWJsZSB0byB1cGRhdGUgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiB1bmFibGUgdG8gdXBkYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLWZpCi0KLQotCi0jIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCi1MSUJUT09MX0RFUFM9IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKLQotIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJwotCi0jIFByZXZlbnQgbXVsdGlwbGUgZXhwYW5zaW9uCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4uLiAiID4mNjsgfQogICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWFpbnRhaW5lcl9tb2RlK3NldH0iID0gc2V0OyB0aGVuCitpZiB0ZXN0ICIke2VuYWJsZV9tYWludGFpbmVyX21vZGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICBlbmFibGV2YWw9JGVuYWJsZV9tYWludGFpbmVyX21vZGU7IFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbAogZWxzZQogICBVU0VfTUFJTlRBSU5FUl9NT0RFPW5vCiBmaQogCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNQotZWNobyAiJHtFQ0hPX1R9JFVTRV9NQUlOVEFJTkVSX01PREUiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNQorJGFzX2VjaG8gIiRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjY7IH0KICAgIGlmIHRlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXM7IHRoZW4KICAgTUFJTlRBSU5FUl9NT0RFX1RSVUU9CiAgIE1BSU5UQUlORVJfTU9ERV9GQUxTRT0nIycKQEAgLTE5NzMxLDQ2NSArMTEwMDIsNDAgQEAKIAogCiAKLQogZm9yIGFjX2hlYWRlciBpbiBzeXMvbW1hbi5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCi0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWwgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL21tYW4uaCIgImFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiA9IHgiInllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfU1lTX01NQU5fSCAxCiBfQUNFT0YKIAogZmkKIAogZG9uZQogCi0KIGZvciBhY19mdW5jIGluIG1tYXAKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYwotY2hva2UgbWUKLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiAkYWNfZnVuYyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAotCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIm1tYXAiICJhY19jdl9mdW5jX21tYXAiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbW1hcCIgPSB4IiJ5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyNkZWZpbmUgSEFWRV9NTUFQIDEKIF9BQ0VPRgogCiBmaQogZG9uZQogCiAKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N5c19tbWFuX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN5cy9tbWFuLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3lzL21tYW4uaC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N5c19tbWFuX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N5c19tbWFuX2giID4mNjsgfQotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHN5cy9tbWFuLmggdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc3lzL21tYW4uaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHN5cy9tbWFuLmggcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBzeXMvbW1hbi5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLV9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9tbWFuLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvbW1hbi5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9tbWFuLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvbW1hbi5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvbW1hbi5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvbW1hbi5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc3lzL21tYW4uaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHN5cy9tbWFuLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc3lzL21tYW4uaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9tbWFuLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvbW1hbi5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9tbWFuLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc3lzL21tYW4uaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICggY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gaHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN5cy9tbWFuLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3lzL21tYW4uaC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N5c19tbWFuX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N5c19tbWFuX2g9JGFjX2hlYWRlcl9wcmVwcm9jCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N5c19tbWFuX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiA+JjY7IH0KLQotZmkKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oID0geWVzOyB0aGVuCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL21tYW4uaCIgImFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiA9IHgiInllczsgdGhlbiA6CiAgIGxpYmZmaV9oZWFkZXJfc3lzX21tYW5faD15ZXMKIGVsc2UKICAgbGliZmZpX2hlYWRlcl9zeXNfbW1hbl9oPW5vCiBmaQogCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtbWFwIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1tYXAuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfbW1hcCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBtbWFwIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgbW1hcC4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBtbWFwIGlubm9jdW91c19tbWFwCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIG1tYXAgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgbW1hcAotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIG1tYXAgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIF9fc3R1Yl9tbWFwIHx8IGRlZmluZWQgX19zdHViX19fbW1hcAotY2hva2UgbWUKLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBtbWFwICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLSAgYWNfY3ZfZnVuY19tbWFwPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfZnVuY19tbWFwPW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfbW1hcCIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX21tYXAgPSB5ZXM7IHRoZW4KK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIm1tYXAiICJhY19jdl9mdW5jX21tYXAiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbW1hcCIgPSB4IiJ5ZXM7IHRoZW4gOgogICBsaWJmZmlfZnVuY19tbWFwPXllcwogZWxzZQogICBsaWJmZmlfZnVuY19tbWFwPW5vCkBAIC0yMDIwMSwxMCArMTEwNDcsMTAgQEAKICAgIGFjX2N2X2Z1bmNfbW1hcF9kZXZfemVybz1ubwogICAgYWNfY3ZfZnVuY19tbWFwX2Fub249bm8KIGVsc2UKLSAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgcmVhZC1vbmx5IG1tYXAgb2YgYSBwbGFpbiBmaWxlIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciByZWFkLW9ubHkgbW1hcCBvZiBhIHBsYWluIGZpbGUgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfbW1hcF9maWxlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcmVhZC1vbmx5IG1tYXAgb2YgYSBwbGFpbiBmaWxlIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcmVhZC1vbmx5IG1tYXAgb2YgYSBwbGFpbiBmaWxlIHdvcmtzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfbW1hcF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgIyBBZGQgYSBzeXN0ZW0gdG8gdGhpcyBibGFja2xpc3QgaWYKICAgICMgbW1hcCgwLCBzdGF0X3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKSBkb2Vzbid0IHJldHVybiBhCkBAIC0yMDIxOCwxMiArMTEwNjQsMTIgQEAKIAlhY19jdl9mdW5jX21tYXBfZmlsZT15ZXM7OwogICAgZXNhYwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfbW1hcF9maWxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21tYXBfZmlsZSIgPiY2OyB9Ci0gICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIG1tYXAgZnJvbSAvZGV2L3plcm8gd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIG1tYXAgZnJvbSAvZGV2L3plcm8gd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfbW1hcF9kZXZfemVybytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfbW1hcF9maWxlIiA+JjY7IH0KKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtbWFwIGZyb20gL2Rldi96ZXJvIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbW1hcCBmcm9tIC9kZXYvemVybyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfZGV2X3plcm8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAjIEFkZCBhIHN5c3RlbSB0byB0aGlzIGJsYWNrbGlzdCBpZiBpdCBoYXMgbW1hcCgpIGJ1dCAvZGV2L3plcm8KICAgICMgZG9lcyBub3QgZXhpc3QsIG9yIGlmIG1tYXBwaW5nIC9kZXYvemVybyBkb2VzIG5vdCBnaXZlIGFub255bW91cwpAQCAtMjAyNDIsMjAgKzExMDg4LDE2IEBACiAJYWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvPXllczs7CiAgICBlc2FjCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21tYXBfZGV2X3plcm8iID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfZGV2X3plcm8iID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX21tYXBfZGV2X3plcm8iID4mNjsgfQogCiAgICAjIFVubGlrZSAvZGV2L3plcm8sIHRoZSBNQVBfQU5PTihZTU9VUykgZGVmaW5lcyBjYW4gYmUgcHJvYmVkIGZvci4KLSAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBNQVBfQU5PTihZTU9VUykiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgTUFQX0FOT04oWU1PVVMpLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9kZWNsX21hcF9hbm9uK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBNQVBfQU5PTihZTU9VUykiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE1BUF9BTk9OKFlNT1VTKS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9kZWNsX21hcF9hbm9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgpAQCAtMjAyNzMsNDMgKzExMTE1LDIzIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2RlY2xfbWFwX2Fub249eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9kZWNsX21hcF9hbm9uPW5vCisgIGFjX2N2X2RlY2xfbWFwX2Fub249bm8KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2RlY2xfbWFwX2Fub24iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2RlY2xfbWFwX2Fub24iID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9kZWNsX21hcF9hbm9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZGVjbF9tYXBfYW5vbiIgPiY2OyB9CiAKICAgIGlmIHRlc3QgJGFjX2N2X2RlY2xfbWFwX2Fub24gPSBubzsgdGhlbgogICAgICBhY19jdl9mdW5jX21tYXBfYW5vbj1ubwogICAgZWxzZQotICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIG1tYXAgd2l0aCBNQVBfQU5PTihZTU9VUykgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIG1tYXAgd2l0aCBNQVBfQU5PTihZTU9VUykgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfbW1hcF9hbm9uK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtbWFwIHdpdGggTUFQX0FOT04oWU1PVVMpIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbW1hcCB3aXRoIE1BUF9BTk9OKFlNT1VTKSB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfYW5vbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICMgQWRkIGEgc3lzdGVtIHRvIHRoaXMgYmxhY2tsaXN0IGlmIGl0IGhhcyBtbWFwKCkgYW5kIE1BUF9BTk9OIG9yCiAgICAjIE1BUF9BTk9OWU1PVVMsIGJ1dCB1c2luZyBtbWFwKC4uLiwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApCkBAIC0yMDMyMywzMCArMTExNDUsMjQgQEAKIAlhY19jdl9mdW5jX21tYXBfYW5vbj15ZXM7OwogICAgZXNhYwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfbW1hcF9hbm9uIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21tYXBfYW5vbiIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfbW1hcF9hbm9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19tbWFwX2Fub24iID4mNjsgfQogICAgZmkKIGZpCiAKIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbW1hcF9maWxlID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTU1BUF9GSUxFIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NTUFQX0ZJTEUgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiBpZiB0ZXN0ICRhY19jdl9mdW5jX21tYXBfZGV2X3plcm8gPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9NTUFQX0RFVl9aRVJPIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NTUFQX0RFVl9aRVJPIDEiID4+Y29uZmRlZnMuaAogCiBmaQogaWYgdGVzdCAkYWNfY3ZfZnVuY19tbWFwX2Fub24gPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9NTUFQX0FOT04gMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX01NQVBfQU5PTiAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIApAQCAtMjAzNzIsMTAgKzExMTg4LDE4IEBACiAJVEFSR0VUPUFSTTsgVEFSR0VURElSPWFybQogCTs7CiAKLSAgYW1kNjQtKi1mcmVlYnNkKikKKyAgYW1kNjQtKi1mcmVlYnNkKiB8IGFtZDY0LSotb3BlbmJzZCopCiAJVEFSR0VUPVg4Nl82NDsgVEFSR0VURElSPXg4NgogICAJOzsKIAorICBhbWQ2NC0qLWZyZWVic2QqKQorCVRBUkdFVD1YODZfNjQ7IFRBUkdFVERJUj14ODYKKwk7OworCisgIGF2cjMyKi0qLSopCisJVEFSR0VUPUFWUjMyOyBUQVJHRVRESVI9YXZyMzIKKwk7OworCiAgIGNyaXMtKi0qKQogCVRBUkdFVD1MSUJGRklfQ1JJUzsgVEFSR0VURElSPWNyaXMKIAk7OwpAQCAtMjAzOTQsMTEgKzExMjE4LDEzIEBACiAJVEFSR0VUPVBBX0hQVVg7IFRBUkdFVERJUj1wYQogCTs7CiAKLSAgaTM4Ni0qLWZyZWVic2QqIHwgaTM4Ni0qLW9wZW5ic2QqKQorICBpPzg2LSotZnJlZWJzZCogfCBpPzg2LSotb3BlbmJzZCopCiAJVEFSR0VUPVg4Nl9GUkVFQlNEOyBUQVJHRVRESVI9eDg2CiAJOzsKICAgaT84Ni13aW4zMiogfCBpPzg2LSotY3lnd2luKiB8IGk/ODYtKi1taW5ndyopCiAJVEFSR0VUPVg4Nl9XSU4zMjsgVEFSR0VURElSPXg4NgorCSMgQWxsIG1pbmd3L2N5Z3dpbi93aW4zMiBidWlsZHMgcmVxdWlyZSB0aGlzIGZvciBzaGFyZWRsaWIKKwlBTV9MVExERkxBR1M9Ii1uby11bmRlZmluZWQiCiAJOzsKICAgaT84Ni0qLWRhcndpbiopCiAJVEFSR0VUPVg4Nl9EQVJXSU47IFRBUkdFVERJUj14ODYKQEAgLTIwNDI5LDcgKzExMjU1LDkgQEAKIAlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcwogCTs7CiAgIG1pcHMqLSotbGludXgqKQotCVRBUkdFVD1NSVBTX0xJTlVYOyBUQVJHRVRESVI9bWlwcworCSMgU3VwcG9ydCAxMjgtYml0IGxvbmcgZG91YmxlIGZvciBOZXdBQkkuCisJSEFWRV9MT05HX0RPVUJMRT0nZGVmaW5lZChfX21pcHM2NCknCisJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKIAk7OwogCiAgIHBvd2VycGMqLSotbGludXgqIHwgcG93ZXJwYy0qLXN5c3YqKQpAQCAtMjA0NjksOCArMTEyOTcsMTEgQEAKICAgeDg2XzY0LSotZGFyd2luKikKIAlUQVJHRVQ9WDg2X0RBUldJTjsgVEFSR0VURElSPXg4NgogCTs7CisKICAgeDg2XzY0LSotY3lnd2luKiB8IHg4Nl82NC0qLW1pbmd3KikKKwlUQVJHRVQ9WDg2X1dJTjY0OyBUQVJHRVRESVI9eDg2CiAJOzsKKwogICB4ODZfNjQtKi0qKQogCVRBUkdFVD1YODZfNjQ7IFRBUkdFVERJUj14ODYKIAk7OwpAQCAtMjA0NzgsMTAgKzExMzA5LDkgQEAKIAogCiAKKwogaWYgdGVzdCAkVEFSR0VURElSID0gdW5rbm93bjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LlwiIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFwibGliZmZpIGhhcyBub3QgYmVlbiBwb3J0ZWQgdG8gJGhvc3QuXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgIlwibGliZmZpIGhhcyBub3QgYmVlbiBwb3J0ZWQgdG8gJGhvc3QuXCIiICIkTElORU5PIiA1CiBmaQogCiAgaWYgZXhwciB4JFRBUkdFVCA6ICd4TUlQUycgPiAvZGV2L251bGw7IHRoZW4KQEAgLTIwNTI0LDYgKzExMzU0LDE0IEBACiAgIFg4Nl9XSU4zMl9GQUxTRT0KIGZpCiAKKyBpZiB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU42NDsgdGhlbgorICBYODZfV0lONjRfVFJVRT0KKyAgWDg2X1dJTjY0X0ZBTFNFPScjJworZWxzZQorICBYODZfV0lONjRfVFJVRT0nIycKKyAgWDg2X1dJTjY0X0ZBTFNFPQorZmkKKwogIGlmIHRlc3QgeCRUQVJHRVQgPSB4WDg2X0RBUldJTjsgdGhlbgogICBYODZfREFSV0lOX1RSVUU9CiAgIFg4Nl9EQVJXSU5fRkFMU0U9JyMnCkBAIC0yMDYwNCw2ICsxMTQ0MiwxNCBAQAogICBBUk1fRkFMU0U9CiBmaQogCisgaWYgdGVzdCB4JFRBUkdFVCA9IHhBVlIzMjsgdGhlbgorICBBVlIzMl9UUlVFPQorICBBVlIzMl9GQUxTRT0nIycKK2Vsc2UKKyAgQVZSMzJfVFJVRT0nIycKKyAgQVZSMzJfRkFMU0U9CitmaQorCiAgaWYgdGVzdCB4JFRBUkdFVCA9IHhMSUJGRklfQ1JJUzsgdGhlbgogICBMSUJGRklfQ1JJU19UUlVFPQogICBMSUJGRklfQ1JJU19GQUxTRT0nIycKQEAgLTIwNjc3LDE2ICsxMTUyMywxMiBAQAogZmkKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CkBAIC0yMDcwMSw0NyArMTE1NDMsMjMgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9oZWFkZXJfc3RkYz1ubworICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKLQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKwogZWxzZQogICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKQEAgLTIwNzUxLDE4ICsxMTU2OSwxNCBAQAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICA6CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKwogZWxzZQogICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKQEAgLTIwNzcyLDE0ICsxMTU4NiwxMCBAQAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgOgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0yMDgwNiwxNDAgKzExNjE2LDMxIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICA6CitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKwogZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKLQogZmkKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFNURENfSEVBREVSUyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAotCiBmb3IgYWNfZnVuYyBpbiBtZW1jcHkKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYwotY2hva2UgbWUKLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiAkYWNfZnVuYyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAotCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIm1lbWNweSIgImFjX2N2X2Z1bmNfbWVtY3B5IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX21lbWNweSIgPSB4IiJ5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyNkZWZpbmUgSEFWRV9NRU1DUFkgMQogX0FDRU9GCiAKIGZpCkBAIC0yMDk0NywxNiArMTE2NDgsMTIgQEAKIAogIyBUaGUgVWx0cml4IDQuMiBtaXBzIGJ1aWx0aW4gYWxsb2NhIGRlY2xhcmVkIGJ5IGFsbG9jYS5oIG9ubHkgd29ya3MKICMgZm9yIGNvbnN0YW50IGFyZ3VtZW50cy4gIFVzZWxlc3MhCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl93b3JraW5nX2FsbG9jYV9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3dvcmtpbmdfYWxsb2NhX2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGFsbG9jYS5oPgogaW50CkBAIC0yMDk2OCw1NSArMTE2NjUsMjggQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl93b3JraW5nX2FsbG9jYV9oPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3Zfd29ya2luZ19hbGxvY2FfaD1ubworICBhY19jdl93b3JraW5nX2FsbG9jYV9oPW5vCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjY7IH0KIGlmIHRlc3QgJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2ggPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUxMT0NBX0ggMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhbGxvY2EiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYWxsb2NhLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX2FsbG9jYV93b3JrcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYWxsb2NhIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbGxvY2EuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19hbGxvY2Ffd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2lmZGVmIF9fR05VQ19fCiAjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQpAQCAtMjEwNDgsNDMgKzExNzE4LDIwIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9mdW5jX2FsbG9jYV93b3Jrcz1ubworICBhY19jdl9mdW5jX2FsbG9jYV93b3Jrcz1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNjsgfQogCiBpZiB0ZXN0ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0FMTE9DQSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUxMT0NBIDEiID4+Y29uZmRlZnMuaAogCiBlbHNlCiAgICMgVGhlIFNWUjMgbGliUFcgYW5kIFNWUjQgbGlidWNiIGJvdGggY29udGFpbiBpbmNvbXBhdGlibGUgZnVuY3Rpb25zCkBAIC0yMTA5NCwyMSArMTE3NDEsMTUgQEAKIAogQUxMT0NBPVwke0xJQk9CSkRJUn1hbGxvY2EuJGFjX29iamV4dAogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBDX0FMTE9DQSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIENfQUxMT0NBIDEiID4+Y29uZmRlZnMuaAogCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfb3NfY3JheStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X29zX2NyYXkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2lmIGRlZmluZWQgQ1JBWSAmJiAhIGRlZmluZWQgQ1JBWTIKIHdlYmVjcmF5CkBAIC0yMTExOCw3ICsxMTc1OSw3IEBACiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIndlYmVjcmF5IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICJ3ZWJlY3JheSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgYWNfY3Zfb3NfY3JheT15ZXMKIGVsc2UKICAgYWNfY3Zfb3NfY3JheT1ubwpAQCAtMjExMjYsOTQgKzExNzY3LDE0IEBACiBybSAtZiBjb25mdGVzdCoKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29zX2NyYXkiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X29zX2NyYXkiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vc19jcmF5IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb3NfY3JheSIgPiY2OyB9CiBpZiB0ZXN0ICRhY19jdl9vc19jcmF5ID0geWVzOyB0aGVuCiAgIGZvciBhY19mdW5jIGluIF9nZXRiNjcgR0VUQjY3IGdldGI2NzsgZG8KLSAgICBhc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYwotY2hva2UgbWUKLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiAkYWNfZnVuYyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAotCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgICAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitldmFsIGFzX3ZhbD1cJCRhc19hY192YXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgQ1JBWV9TVEFDS1NFR19FTkQgJGFjX2Z1bmMKQEAgLTIxMjI1LDE5ICsxMTc4NiwxNSBAQAogICBkb25lCiBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfY19zdGFja19kaXJlY3Rpb24rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0wCiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAogaW50CkBAIC0yMTI2MCw0MyArMTE4MTcsMTggQEAKICAgcmV0dXJuIGZpbmRfc3RhY2tfZGlyZWN0aW9uICgpIDwgMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0xCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0tMQorICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0tMQogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAotCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjY7IH0KLQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjY7IH0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU1RBQ0tfRElSRUNUSU9OICRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbgogX0FDRU9GCkBAIC0yMTMwNSw0MDMgKzExODM3LDMyIEBACiBmaQogCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkb3VibGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZG91YmxlLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl90eXBlX2RvdWJsZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci10eXBlZGVmIGRvdWJsZSBhY19fdHlwZV9uZXdfOwotaW50Ci1tYWluICgpCi17Ci1pZiAoKGFjX190eXBlX25ld18gKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfY3ZfdHlwZV9kb3VibGU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl90eXBlX2RvdWJsZT1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9kb3VibGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfZG91YmxlIiA+JjY7IH0KLQogIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgogIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgZG91YmxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBkb3VibGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBkb3VibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBkb3VibGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2RvdWJsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpID49IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChkb3VibGUpKSIgImFjX2N2X3NpemVvZl9kb3VibGUiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKIAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2xvPTAgYWNfbWlkPTAKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGk9JGFjX21pZDsgYnJlYWsKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2xvPWBleHByICRhY19taWQgKyAxYAotCQkJaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KLQkJCSAgYWNfbG89IGFjX2hpPQotCQkJICBicmVhawotCQkJZmkKLQkJCWFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDwgMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19oaT0tMSBhY19taWQ9LTEKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpID49ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfbG89JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCi0JCQlpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgotCQkJICBhY19sbz0gYWNfaGk9Ci0JCQkgIGJyZWFrCi0JCQlmaQotCQkJYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfbG89IGFjX2hpPQotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCi13aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCi0gIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSAgIHR5cGVkZWYgZG91YmxlIGFjX190eXBlX3NpemVvZl87Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19oaT0kYWNfbWlkCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1jYXNlICRhY19sbyBpbgotPyopIGFjX2N2X3NpemVvZl9kb3VibGU9JGFjX2xvOzsKLScnKSBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9kb3VibGUiID0geWVzOyB0aGVuCi0gICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChkb3VibGUpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9Ci0gICBlbHNlCi0gICAgIGFjX2N2X3NpemVvZl9kb3VibGU9MAotICAgZmkgOzsKLWVzYWMKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLXN0YXRpYyBsb25nIGludCBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSk7IH0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci0KLSAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKLSAgaWYgKCEgZikKLSAgICByZXR1cm4gMTsKLSAgaWYgKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPCAwKQotICAgIHsKLSAgICAgIGxvbmcgaW50IGkgPSBsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSkKLQlyZXR1cm4gMTsKLSAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkpCi0JcmV0dXJuIDE7Ci0gICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKLSAgICB9Ci0gIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zaXplb2ZfZG91YmxlPWBjYXQgY29uZnRlc3QudmFsYAotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotaWYgdGVzdCAiJGFjX2N2X3R5cGVfZG91YmxlIiA9IHllczsgdGhlbgotICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGRvdWJsZSkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9kb3VibGUiID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoreyBhc19mbl9zZXRfc3RhdHVzIDc3Cithc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChkb3VibGUpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KICAgIGVsc2UKICAgICAgYWNfY3Zfc2l6ZW9mX2RvdWJsZT0wCiAgICBmaQogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCiBmaQotcm0gLWYgY29uZnRlc3QudmFsCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2RvdWJsZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX2RvdWJsZSIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9kb3VibGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfZG91YmxlIiA+JjY7IH0KIAogCiAKQEAgLTIxNzEwLDQwMyArMTE4NzEsMzIgQEAKIF9BQ0VPRgogCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsb25nIGRvdWJsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsb25nIGRvdWJsZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9sb25nX2RvdWJsZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci10eXBlZGVmIGxvbmcgZG91YmxlIGFjX190eXBlX25ld187Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgoYWNfX3R5cGVfbmV3XyAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGFjX190eXBlX25ld18pKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19jdl90eXBlX2xvbmdfZG91YmxlPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfdHlwZV9sb25nX2RvdWJsZT1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9sb25nX2RvdWJsZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9sb25nX2RvdWJsZSIgPiY2OyB9Ci0KICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCiAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCiAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGxvbmcgZG91YmxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGRvdWJsZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgbG9uZyBkb3VibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGRvdWJsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBsb25nIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpID49IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChsb25nIGRvdWJsZSkpIiAiYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CiAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19sbz0wIGFjX21pZD0wCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBsb25nIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGk9JGFjX21pZDsgYnJlYWsKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2xvPWBleHByICRhY19taWQgKyAxYAotCQkJaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KLQkJCSAgYWNfbG89IGFjX2hpPQotCQkJICBicmVhawotCQkJZmkKLQkJCWFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGxvbmcgZG91YmxlIGFjX190eXBlX3NpemVvZl87Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPCAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2hpPS0xIGFjX21pZD0tMQotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSAgIHR5cGVkZWYgbG9uZyBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA+PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2xvPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAotCQkJaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KLQkJCSAgYWNfbG89IGFjX2hpPQotCQkJICBicmVhawotCQkJZmkKLQkJCWFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2xvPSBhY19oaT0KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0jIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgotd2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbwotICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGxvbmcgZG91YmxlIGFjX190eXBlX3NpemVvZl87Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19oaT0kYWNfbWlkCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1jYXNlICRhY19sbyBpbgotPyopIGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0kYWNfbG87OwotJycpIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmdfZG91YmxlIiA9IHllczsgdGhlbgotICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgZG91YmxlKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGRvdWJsZSkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KLSAgIGVsc2UKLSAgICAgYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTAKLSAgIGZpIDs7Ci1lc2FjCi1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSAgIHR5cGVkZWYgbG9uZyBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLXN0YXRpYyBsb25nIGludCBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSk7IH0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci0KLSAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKLSAgaWYgKCEgZikKLSAgICByZXR1cm4gMTsKLSAgaWYgKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPCAwKQotICAgIHsKLSAgICAgIGxvbmcgaW50IGkgPSBsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSkKLQlyZXR1cm4gMTsKLSAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkpCi0JcmV0dXJuIDE7Ci0gICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKLSAgICB9Ci0gIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9YGNhdCBjb25mdGVzdC52YWxgCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1pZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nX2RvdWJsZSIgPSB5ZXM7IHRoZW4KLSAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGRvdWJsZSkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBkb3VibGUpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9CisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmdfZG91YmxlIiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK3sgYXNfZm5fc2V0X3N0YXR1cyA3NworYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBkb3VibGUpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KICAgIGVsc2UKICAgICAgYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTAKICAgIGZpCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKIGZpCi1ybSAtZiBjb25mdGVzdC52YWwKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSIgPiY2OyB9CiAKIAogCkBAIC0yMjEyMywyNjQgKzExOTEzLDI0NiBAQAogICAgIGlmIHRlc3QgJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSAhPSAwOyB0aGVuCiAgICAgICBIQVZFX0xPTkdfRE9VQkxFPTEKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MT05HX0RPVUJMRSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCiAKICAgICBmaQogICBmaQogZmkKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jX2JpZ2VuZGlhbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gICMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLworICBhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisgICAgIyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgdW5pdmVyc2FsIGNvbXBpbGVyLgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZm5kZWYgX19BUFBMRV9DQ19fCisJICAgICAgIG5vdCBhIHVuaXZlcnNhbCBjYXBhYmxlIGNvbXBpbGVyCisJICAgICAjZW5kaWYKKwkgICAgIHR5cGVkZWYgaW50IGR1bW15OworCiBfQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJIyBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMgbm90IHVuaXZlcnNhbCB1bmxlc3MKKwkjIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxhZ3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCWFjX2FyY2g9CisJYWNfcHJldj0KKwlmb3IgYWNfd29yZCBpbiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1M7IGRvCisJIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorCSAgIGNhc2UgJGFjX3dvcmQgaW4KKwkgICAgIGk/ODYgfCB4ODZfNjQgfCBwcGMgfCBwcGM2NCkKKwkgICAgICAgaWYgdGVzdCAteiAiJGFjX2FyY2giIHx8IHRlc3QgIiRhY19hcmNoIiA9ICIkYWNfd29yZCI7IHRoZW4KKwkJIGFjX2FyY2g9JGFjX3dvcmQKKwkgICAgICAgZWxzZQorCQkgYWNfY3ZfY19iaWdlbmRpYW49dW5pdmVyc2FsCisJCSBicmVhaworCSAgICAgICBmaQorCSAgICAgICA7OworCSAgIGVzYWMKKwkgICBhY19wcmV2PQorCSBlbGlmIHRlc3QgIngkYWNfd29yZCIgPSAieC1hcmNoIjsgdGhlbgorCSAgIGFjX3ByZXY9YXJjaAorCSBmaQorICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisJICAgICAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAKIGludAogbWFpbiAoKQogewotI2lmICAhIChkZWZpbmVkIEJZVEVfT1JERVIgJiYgZGVmaW5lZCBCSUdfRU5ESUFOICYmIGRlZmluZWQgTElUVExFX0VORElBTiBcCi0JJiYgQllURV9PUkRFUiAmJiBCSUdfRU5ESUFOICYmIExJVFRMRV9FTkRJQU4pCi0gYm9ndXMgZW5kaWFuIG1hY3JvcwotI2VuZGlmCisjaWYgISAoZGVmaW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VORElBTiBcCisJCSAgICAgJiYgZGVmaW5lZCBMSVRUTEVfRU5ESUFOICYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiBcCisJCSAgICAgJiYgTElUVExFX0VORElBTikKKwkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCisJICAgICAjZW5kaWYKIAogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gQklHX0VORElBTiBvciBub3QuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCQkjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAKIGludAogbWFpbiAoKQogewogI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTgotIG5vdCBiaWcgZW5kaWFuCi0jZW5kaWYKKwkJIG5vdCBiaWcgZW5kaWFuCisJCSNlbmRpZgogCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9jX2JpZ2VuZGlhbj1ubworICBhY19jdl9jX2JpZ2VuZGlhbj1ubwogZmkKLQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQkjIEl0IGRvZXMgbm90OyBjb21waWxlIGEgdGVzdCBwcm9ncmFtLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgIyB0cnkgdG8gZ3Vlc3MgdGhlIGVuZGlhbm5lc3MgYnkgZ3JlcHBpbmcgdmFsdWVzIGludG8gYW4gb2JqZWN0IGZpbGUKLSAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBTZWUgaWYgPGxpbWl0cy5oPiBkZWZpbmVzIF9MSVRUTEVfRU5ESUFOIG9yIF9CSUdfRU5ESUFOIChlLmcuLCBTb2xhcmlzKS4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXNob3J0IGludCBhc2NpaV9tbVtdID0geyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07Ci1zaG9ydCBpbnQgYXNjaWlfaWlbXSA9IHsgMHg2OTRDLCAweDU0NTQsIDB4NjU2QywgMHg2RTQ1LCAweDY5NDQsIDB4NkU2MSwgMCB9Owotdm9pZCBfYXNjaWkgKCkgeyBjaGFyICpzID0gKGNoYXIgKikgYXNjaWlfbW07IHMgPSAoY2hhciAqKSBhc2NpaV9paTsgfQotc2hvcnQgaW50IGViY2RpY19paVtdID0geyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07Ci1zaG9ydCBpbnQgZWJjZGljX21tW10gPSB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKLXZvaWQgX2ViY2RpYyAoKSB7IGNoYXIgKnMgPSAoY2hhciAqKSBlYmNkaWNfbW07IHMgPSAoY2hhciAqKSBlYmNkaWNfaWk7IH0KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwogaW50CiBtYWluICgpCiB7Ci0gX2FzY2lpICgpOyBfZWJjZGljICgpOworI2lmICEgKGRlZmluZWQgX0xJVFRMRV9FTkRJQU4gfHwgZGVmaW5lZCBfQklHX0VORElBTikKKwkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCisJICAgICAjZW5kaWYKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGlmIGdyZXAgQklHZW5EaWFuU3lTIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBfQklHX0VORElBTiBvciBub3QuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9CSUdfRU5ESUFOCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcwotZmkKLWlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KLSAgaWYgdGVzdCAiJGFjX2N2X2NfYmlnZW5kaWFuIiA9IHVua25vd247IHRoZW4KLSAgICBhY19jdl9jX2JpZ2VuZGlhbj1ubwotICBlbHNlCi0gICAgIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/Ci0gICAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgotICBmaQotZmkKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCiBmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgQ29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgIyBUcnkgdG8gZ3Vlc3MgYnkgZ3JlcHBpbmcgdmFsdWVzIGZyb20gYW4gb2JqZWN0IGZpbGUuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK3Nob3J0IGludCBhc2NpaV9tbVtdID0KKwkJICB7IDB4NDI0OSwgMHg0NzY1LCAweDZFNDQsIDB4Njk2MSwgMHg2RTUzLCAweDc5NTMsIDAgfTsKKwkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQorCQkgIHsgMHg2OTRDLCAweDU0NTQsIDB4NjU2QywgMHg2RTQ1LCAweDY5NDQsIDB4NkU2MSwgMCB9OworCQlpbnQgdXNlX2FzY2lpIChpbnQgaSkgeworCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lpW2ldOworCQl9CisJCXNob3J0IGludCBlYmNkaWNfaWlbXSA9CisJCSAgeyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07CisJCXNob3J0IGludCBlYmNkaWNfbW1bXSA9CisJCSAgeyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwgMHhBOEUyLCAwIH07CisJCWludCB1c2VfZWJjZGljIChpbnQgaSkgeworCQkgIHJldHVybiBlYmNkaWNfbW1baV0gKyBlYmNkaWNfaWlbaV07CisJCX0KKwkJZXh0ZXJuIGludCBmb287CiAKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHVzZV9hc2NpaSAoZm9vKSA9PSB1c2VfZWJjZGljIChmb28pOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGlmIGdyZXAgQklHZW5EaWFuU3lTIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbDsgdGhlbgorCSAgICAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworCSAgICBmaQorCSAgICBpZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJGFjX2N2X2NfYmlnZW5kaWFuIiA9IHVua25vd247IHRoZW4KKwkJYWNfY3ZfY19iaWdlbmRpYW49bm8KKwkgICAgICBlbHNlCisJCSMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPworCQlhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisJICAgICAgZmkKKwkgICAgZmkKK2ZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0CiBpbnQKIG1haW4gKCkKIHsKIAotICAvKiBBcmUgd2UgbGl0dGxlIG9yIGJpZyBlbmRpYW4/ICBGcm9tIEhhcmJpc29uJlN0ZWVsZS4gICovCi0gIHVuaW9uCi0gIHsKLSAgICBsb25nIGludCBsOwotICAgIGNoYXIgY1tzaXplb2YgKGxvbmcgaW50KV07Ci0gIH0gdTsKLSAgdS5sID0gMTsKLSAgcmV0dXJuIHUuY1tzaXplb2YgKGxvbmcgaW50KSAtIDFdID09IDE7CisJICAgICAvKiBBcmUgd2UgbGl0dGxlIG9yIGJpZyBlbmRpYW4/ICBGcm9tIEhhcmJpc29uJlN0ZWVsZS4gICovCisJICAgICB1bmlvbgorCSAgICAgeworCSAgICAgICBsb25nIGludCBsOworCSAgICAgICBjaGFyIGNbc2l6ZW9mIChsb25nIGludCldOworCSAgICAgfSB1OworCSAgICAgdS5sID0gMTsKKwkgICAgIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOwogCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KIGVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2NfYmlnZW5kaWFuPXllcworICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKIGZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKLQorICAgIGZpCiBmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2JpZ2VuZGlhbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjY7IH0KKyBjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbiAjKAorICAgeWVzKQorICAgICAkYXNfZWNobyAiI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMSIgPj5jb25mZGVmcy5oCis7OyAjKAorICAgbm8pCisgICAgICA7OyAjKAorICAgdW5pdmVyc2FsKQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2JpZ2VuZGlhbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY19iaWdlbmRpYW4iID4mNjsgfQotY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4KLSAgeWVzKQorJGFzX2VjaG8gIiNkZWZpbmUgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEIDEiID4+Y29uZmRlZnMuaAogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMQotX0FDRU9GCi0gOzsKLSAgbm8pCi0gICAgIDs7Ci0gICopCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCi1wcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiB1bmtub3duIGVuZGlhbm5lc3MKLXByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Ci1lc2FjCisgICAgIDs7ICMoCisgICAqKQorICAgICBhc19mbl9lcnJvciAidW5rbm93biBlbmRpYW5uZXNzCisgcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiICIkTElORU5PIiA1IDs7CisgZXNhYwogCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGFzc2VtYmxlciAuY2ZpIHBzZXVkby1vcCBzdXBwb3J0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYXNzZW1ibGVyIC5jZmkgcHNldWRvLW9wIHN1cHBvcnQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2xpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFzc2VtYmxlciAuY2ZpIHBzZXVkby1vcCBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxlciAuY2ZpIHBzZXVkby1vcCBzdXBwb3J0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2xpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIAogICAgIGxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wPXVua25vd24KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiBhc20gKCIuY2ZpX3N0YXJ0cHJvY1xuXHQuY2ZpX2VuZHByb2MiKTsKIGludApAQCAtMjIzOTEsNjAgKzEyMTYzLDM0IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JbGliZmZpX2N2X2FzX2NmaV9wc2V1ZG9fb3A9bm8KKyAgbGliZmZpX2N2X2FzX2NmaV9wc2V1ZG9fb3A9bm8KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliZmZpX2N2X2FzX2NmaV9wc2V1ZG9fb3AiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGliZmZpX2N2X2FzX2NmaV9wc2V1ZG9fb3AiID4mNQorJGFzX2VjaG8gIiRsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcCIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wIiA9IHh5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9BU19DRklfUFNFVURPX09QIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BU19DRklfUFNFVURPX09QIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCiBpZiB0ZXN0IHgkVEFSR0VUID0geFNQQVJDOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgcGMgcmVsYXRlZCByZWxvY3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBzdXBwb3J0IHVuYWxpZ25lZCBwYyByZWxhdGVkIHJlbG9jcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBzdXBwb3J0IHVuYWxpZ25lZCBwYyByZWxhdGVkIHJlbG9jcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBzdXBwb3J0IHVuYWxpZ25lZCBwYyByZWxhdGVkIHJlbG9jcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsaWJmZmlfY3ZfYXNfc3BhcmNfdWFfcGNyZWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCiAJc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCiAJc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKIAlDRkxBR1M9IiRDRkxBR1MgLWZwaWMiCiAJTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCIKLQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiBhc20gKCIudGV4dDsgZm9vOiBub3A7IC5kYXRhOyAuYWxpZ24gNDsgLmJ5dGUgMDsgLnVhd29yZCAlcl9kaXNwMzIoZm9vKTsgLnRleHQiKTsKIGludApAQCAtMjI0NTUsNjAgKzEyMjAxLDMzIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgbGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JbGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsPW5vCisgIGxpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbD1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgogCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsaWJmZmlfY3ZfYXNfc3BhcmNfdWFfcGNyZWwiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsaWJmZmlfY3ZfYXNfc3BhcmNfdWFfcGNyZWwiID4mNQorJGFzX2VjaG8gIiRsaWJmZmlfY3ZfYXNfc3BhcmNfdWFfcGNyZWwiID4mNjsgfQogICAgIGlmIHRlc3QgIngkbGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsIiA9IHh5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9BU19TUEFSQ19VQV9QQ1JFTCAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVNfU1BBUkNfVUFfUENSRUwgMSIgPj5jb25mZGVmcy5oCiAKICAgICBmaQogCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYXNzZW1ibGVyIC5yZWdpc3RlciBwc2V1ZG8tb3Agc3VwcG9ydCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGFzc2VtYmxlciAucmVnaXN0ZXIgcHNldWRvLW9wIHN1cHBvcnQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2xpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3Arc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFzc2VtYmxlciAucmVnaXN0ZXIgcHNldWRvLW9wIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIC5yZWdpc3RlciBwc2V1ZG8tb3Agc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIAogICAgICAgIGxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3A9dW5rbm93bgogICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSAucmVnaXN0ZXIKLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiBhc20gKCIucmVnaXN0ZXIgJWcyLCAjc2NyYXRjaCIpOwogaW50CkBAIC0yMjUxOSw0OSArMTIyMzgsNTggQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgbGliZmZpX2N2X2FzX3JlZ2lzdGVyX3BzZXVkb19vcD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3A9bm8KKyAgbGliZmZpX2N2X2FzX3JlZ2lzdGVyX3BzZXVkb19vcD1ubwogZmkKLQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGliZmZpX2N2X2FzX3JlZ2lzdGVyX3BzZXVkb19vcCIgPiY1CiskYXNfZWNobyAiJGxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3AiID4mNjsgfQogICAgIGlmIHRlc3QgIngkbGliZmZpX2N2X2FzX3JlZ2lzdGVyX3BzZXVkb19vcCIgPSB4eWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQVNfUkVHSVNURVJfUFNFVURPX09QIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BU19SRUdJU1RFUl9QU0VVRE9fT1AgMSIgPj5jb25mZGVmcy5oCiAKICAgICBmaQogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAuZWhfZnJhbWUgc2VjdGlvbiBzaG91bGQgYmUgcmVhZC1vbmx5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAuZWhfZnJhbWUgc2VjdGlvbiBzaG91bGQgYmUgcmVhZC1vbmx5Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsaWJmZmlfY3Zfcm9fZWhfZnJhbWUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2lmIHRlc3QgeCRUQVJHRVQgPSB4WDg2IHx8IHRlc3QgeCRUQVJHRVQgPSB4WDg2X1dJTjMyIHx8IHRlc3QgeCRUQVJHRVQgPSB4WDg2XzY0OyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhc3NlbWJsZXIgc3VwcG9ydHMgcGMgcmVsYXRlZCByZWxvY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIHN1cHBvcnRzIHBjIHJlbGF0ZWQgcmVsb2NzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2xpYmZmaV9jdl9hc194ODZfcGNyZWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisJbGliZmZpX2N2X2FzX3g4Nl9wY3JlbD15ZXMKKwllY2hvICcudGV4dDsgZm9vOiBub3A7IC5kYXRhOyAubG9uZyBmb28tLjsgLnRleHQnID4gY29uZnRlc3QucworCWlmICRDQyAkQ0ZMQUdTIC1jIGNvbmZ0ZXN0LnMgMj4mMSB8IGdyZXAgLWkgd2FybmluZyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsPW5vCisJZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGliZmZpX2N2X2FzX3g4Nl9wY3JlbCIgPiY1CiskYXNfZWNobyAiJGxpYmZmaV9jdl9hc194ODZfcGNyZWwiID4mNjsgfQorICAgIGlmIHRlc3QgIngkbGliZmZpX2N2X2FzX3g4Nl9wY3JlbCIgPSB4eWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVNfWDg2X1BDUkVMIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKK2ZpCisKK2Nhc2UgIiR0YXJnZXQiIGluCisgICAgICotYXBwbGUtZGFyd2luMTAqIHwgKi0qLWZyZWVic2QqIHwgKi0qLW9wZW5ic2QqIHwgKi1wYy1zb2xhcmlzKikKKworJGFzX2VjaG8gIiNkZWZpbmUgRkZJX01NQVBfRVhFQ19XUklUIDEiID4+Y29uZmRlZnMuaAorCisgICAgIDs7Citlc2FjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAuZWhfZnJhbWUgc2VjdGlvbiBzaG91bGQgYmUgcmVhZC1vbmx5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24gc2hvdWxkIGJlIHJlYWQtb25seS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsaWJmZmlfY3Zfcm9fZWhfZnJhbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCiAJbGliZmZpX2N2X3JvX2VoX2ZyYW1lPW5vCkBAIC0yMjU3Nyw0MSArMTIzMDUsMzUgQEAKIAlybSAtZiBjb25mdGVzdC4qCiAKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsaWJmZmlfY3Zfcm9fZWhfZnJhbWUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxpYmZmaV9jdl9yb19laF9mcmFtZSIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxpYmZmaV9jdl9yb19laF9mcmFtZSIgPiY1CiskYXNfZWNobyAiJGxpYmZmaV9jdl9yb19laF9mcmFtZSIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGxpYmZmaV9jdl9yb19laF9mcmFtZSIgPSB4eWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfUk9fRUhfRlJBTUUgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1JPX0VIX0ZSQU1FIDEiID4+Y29uZmRlZnMuaAogCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEVIX0ZSQU1FX0ZMQUdTICJhIgotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBFSF9GUkFNRV9GTEFHUyBcImFcIiIgPj5jb25mZGVmcy5oCiAKIGVsc2UKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgRUhfRlJBTUVfRkxBR1MgImF3IgotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBFSF9GUkFNRV9GTEFHUyBcImF3XCIiID4+Y29uZmRlZnMuaAogCiBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eShcImhpZGRlblwiKSkpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoXCJoaWRkZW5cIikpKS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bGliZmZpX2N2X2hpZGRlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eShcImhpZGRlblwiKSkpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KFwiaGlkZGVuXCIpKSkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bGliZmZpX2N2X2hpZGRlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKIAllY2hvICdpbnQgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpIGZvbyAodm9pZCkgeyByZXR1cm4gMTsgfScgPiBjb25mdGVzdC5jCiAJbGliZmZpX2N2X2hpZGRlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZT1ubwogCWlmIHsgYWNfdHJ5PScke0NDLWNjfSAtV2Vycm9yIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfdHJ5XCIiOyB9ID4mNQogICAoZXZhbCAkYWNfdHJ5KSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCiAJICAgIGlmIGdyZXAgJ1wuaGlkZGVuLipmb28nIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbDsgdGhlbgogCQlsaWJmZmlfY3ZfaGlkZGVuX3Zpc2liaWxpdHlfYXR0cmlidXRlPXllcwogCSAgICBmaQpAQCAtMjI2MTksMTMgKzEyMzQxLDExIEBACiAJcm0gLWYgY29uZnRlc3QuKgogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliZmZpX2N2X2hpZGRlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGliZmZpX2N2X2hpZGRlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZSIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUiID4mNQorJGFzX2VjaG8gIiRsaWJmZmlfY3ZfaGlkZGVuX3Zpc2liaWxpdHlfYXR0cmlidXRlIiA+JjY7IH0KIGlmIHRlc3QgJGxpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUgPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ISURERU5fVklTSUJJTElUWV9BVFRSSUJVVEUgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURSAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIApAQCAtMjI2MzYsNTAgKzEyMzU2LDQxIEBACiAKIAogCi0KICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWJ1ZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCAiJHtlbmFibGVfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICBlbmFibGV2YWw9JGVuYWJsZV9kZWJ1ZzsgaWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAieWVzIjsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBGRklfREVCVUcgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBGRklfREVCVUcgMSIgPj5jb25mZGVmcy5oCiAKICAgZmkKIGZpCiAKIAogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0cnVjdHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc3RydWN0cytzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCAiJHtlbmFibGVfc3RydWN0cytzZXR9IiA9IHNldDsgdGhlbiA6CiAgIGVuYWJsZXZhbD0kZW5hYmxlX3N0cnVjdHM7IGlmIHRlc3QgIiRlbmFibGVfc3RydWN0cyIgPSAibm8iOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEZGSV9OT19TVFJVQ1RTIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgRkZJX05PX1NUUlVDVFMgMSIgPj5jb25mZGVmcy5oCiAKICAgZmkKIGZpCiAKIAogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJhdy1hcGkgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcmF3X2FwaStzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCAiJHtlbmFibGVfcmF3X2FwaStzZXR9IiA9IHNldDsgdGhlbiA6CiAgIGVuYWJsZXZhbD0kZW5hYmxlX3Jhd19hcGk7IGlmIHRlc3QgIiRlbmFibGVfcmF3X2FwaSIgPSAibm8iOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEZGSV9OT19SQVdfQVBJIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgRkZJX05PX1JBV19BUEkgMSIgPj5jb25mZGVmcy5oCiAKICAgZmkKIGZpCiAKIAogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXB1cmlmeS1zYWZldHkgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcHVyaWZ5X3NhZmV0eStzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCAiJHtlbmFibGVfcHVyaWZ5X3NhZmV0eStzZXR9IiA9IHNldDsgdGhlbiA6CiAgIGVuYWJsZXZhbD0kZW5hYmxlX3B1cmlmeV9zYWZldHk7IGlmIHRlc3QgIiRlbmFibGVfcHVyaWZ5X3NhZmV0eSIgPSAieWVzIjsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBVU0lOR19QVVJJRlkgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBVU0lOR19QVVJJRlkgMSIgPj5jb25mZGVmcy5oCiAKICAgZmkKIGZpCkBAIC0yMjcxNSw3ICsxMjQyNiw3IEBACiBhY19jb25maWdfbGlua3M9IiRhY19jb25maWdfbGlua3MgaW5jbHVkZS9mZml0YXJnZXQuaDpzcmMvJFRBUkdFVERJUi9mZml0YXJnZXQuaCIKIAogCi1hY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgaW5jbHVkZS9mZmkuaCIKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvZmZpLmggTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlIG1hbi9NYWtlZmlsZSBsaWJmZmkucGMiCiAKIAogYWNfY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzIGluY2x1ZGUvZmZpX2NvbW1vbi5oOmluY2x1ZGUvZmZpX2NvbW1vbi5oIgpAQCAtMjI3NTEsMTIgKzEyNDYyLDEzIEBACiAgICAgY2FzZSAkYWNfdmFsIGluICMoCiAgICAgKiR7YXNfbmx9KikKICAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAotICAgICAgKl9jdl8qKSB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mMjt9IDs7CisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CiAgICAgICBlc2FjCiAgICAgICBjYXNlICRhY192YXIgaW4gIygKICAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKLSAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKICAgICAgIGVzYWMgOzsKICAgICBlc2FjCiAgIGRvbmUKQEAgLTIyNzY0LDggKzEyNDc2LDggQEAKICAgKHNldCkgMj4mMSB8CiAgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAogICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKLSAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUKLSAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KICAgICAgIHNlZCAtbiBcCiAJInMvJy8nXFxcXCcnL2c7CiAJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCkBAIC0yMjc4OCwxMiArMTI1MDAsMTIgQEAKIGlmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKICAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCiAgICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQogICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCiAgIGVsc2UKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgIGZpCiBmaQogcm0gLWYgY29uZmNhY2hlCkBAIC0yMjgwOSwyMzQgKzEyNTIxLDE1OSBAQAogZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCiAgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KICAgYWNfc2NyaXB0PSdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nCi0gIGFjX2k9YGVjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgIGFjX2k9YCRhc19lY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAogICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCiAgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgotICBhY19saWJvYmpzPSIkYWNfbGlib2JqcyBcJHtMSUJPQkpESVJ9JGFjX2lcJFUuJGFjX29iamV4dCIKLSAgYWNfbHRsaWJvYmpzPSIkYWNfbHRsaWJvYmpzIFwke0xJQk9CSkRJUn0kYWNfaSInJFUubG8nCisgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJwogZG9uZQogTElCT0JKUz0kYWNfbGlib2JqcwogCiBMVExJQk9CSlM9JGFjX2x0bGlib2JqcwogCiAKLWlmIHRlc3QgLXogIiR7QU1ERVBfVFJVRX0iICYmIHRlc3QgLXogIiR7QU1ERVBfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ0FTX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ0FTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDQVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ1hYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtNQUlOVEFJTkVSX01PREVfVFJVRX0iICYmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJNQUlOVEFJTkVSX01PREVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIk1BSU5UQUlORVJfTU9ERVwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtURVNUU1VCRElSX1RSVUV9IiAmJiB0ZXN0IC16ICIke1RFU1RTVUJESVJfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlRFU1RTVUJESVJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlRFU1RTVUJESVJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7TUlQU19UUlVFfSIgJiYgdGVzdCAteiAiJHtNSVBTX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJNSVBTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJNSVBTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1NQQVJDX1RSVUV9IiAmJiB0ZXN0IC16ICIke1NQQVJDX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJTUEFSQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiU1BBUkNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7WDg2X1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiWDg2XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7WDg2X0ZSRUVCU0RfVFJVRX0iICYmIHRlc3QgLXogIiR7WDg2X0ZSRUVCU0RfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlg4Nl9GUkVFQlNEXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfRlJFRUJTRFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtYODZfV0lOMzJfVFJVRX0iICYmIHRlc3QgLXogIiR7WDg2X1dJTjMyX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfV0lOMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlg4Nl9XSU4zMlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtYODZfREFSV0lOX1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9EQVJXSU5fRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlg4Nl9EQVJXSU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlg4Nl9EQVJXSU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7QUxQSEFfVFJVRX0iICYmIHRlc3QgLXogIiR7QUxQSEFfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkFMUEhBXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJBTFBIQVwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtJQTY0X1RSVUV9IiAmJiB0ZXN0IC16ICIke0lBNjRfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIklBNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIklBNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7TTMyUl9UUlVFfSIgJiYgdGVzdCAteiAiJHtNMzJSX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJNMzJSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJNMzJSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke002OEtfVFJVRX0iICYmIHRlc3QgLXogIiR7TTY4S19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTTY4S1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTTY4S1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtQT1dFUlBDX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BPV0VSUENfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlBPV0VSUENcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlBPV0VSUENcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7UE9XRVJQQ19BSVhfVFJVRX0iICYmIHRlc3QgLXogIiR7UE9XRVJQQ19BSVhfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlBPV0VSUENfQUlYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDX0FJWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtQT1dFUlBDX0RBUldJTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtQT1dFUlBDX0RBUldJTl9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUE9XRVJQQ19EQVJXSU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlBPV0VSUENfREFSV0lOXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1BPV0VSUENfRlJFRUJTRF9UUlVFfSIgJiYgdGVzdCAteiAiJHtQT1dFUlBDX0ZSRUVCU0RfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlBPV0VSUENfRlJFRUJTRFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUE9XRVJQQ19GUkVFQlNEXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke0FSTV9UUlVFfSIgJiYgdGVzdCAteiAiJHtBUk1fRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkFSTVwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiQVJNXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke0xJQkZGSV9DUklTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0xJQkZGSV9DUklTX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJMSUJGRklfQ1JJU1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTElCRkZJX0NSSVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7RlJWX1RSVUV9IiAmJiB0ZXN0IC16ICIke0ZSVl9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiRlJWXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJGUlZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7UzM5MF9UUlVFfSIgJiYgdGVzdCAteiAiJHtTMzkwX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJTMzkwXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJTMzkwXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1g4Nl82NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfNjRfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlg4Nl82NFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiWDg2XzY0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1NIX1RSVUV9IiAmJiB0ZXN0IC16ICIke1NIX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJTSFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiU0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7U0g2NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtTSDY0X0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJTSDY0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJTSDY0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1BBX0xJTlVYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BBX0xJTlVYX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJQQV9MSU5VWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUEFfTElOVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7UEFfSFBVWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtQQV9IUFVYX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJQQV9IUFVYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJQQV9IUFVYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1BBNjRfSFBVWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtQQTY0X0hQVVhfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlBBNjRfSFBVWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUEE2NF9IUFVYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBpZiB0ZXN0IC1uICIkRVhFRVhUIjsgdGhlbgorICBhbV9fRVhFRVhUX1RSVUU9CisgIGFtX19FWEVFWFRfRkFMU0U9JyMnCitlbHNlCisgIGFtX19FWEVFWFRfVFJVRT0nIycKKyAgYW1fX0VYRUVYVF9GQUxTRT0KIGZpCiAKK2lmIHRlc3QgLXogIiR7QU1ERVBfVFJVRX0iICYmIHRlc3QgLXogIiR7QU1ERVBfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ0FTX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NBU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX1RSVUV9IiAmJiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIk1BSU5UQUlORVJfTU9ERVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEVTVFNVQkRJUl9UUlVFfSIgJiYgdGVzdCAteiAiJHtURVNUU1VCRElSX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiVEVTVFNVQkRJUlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7TUlQU19UUlVFfSIgJiYgdGVzdCAteiAiJHtNSVBTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiTUlQU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7U1BBUkNfVFJVRX0iICYmIHRlc3QgLXogIiR7U1BBUkNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJTUEFSQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7WDg2X1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlg4NlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7WDg2X0ZSRUVCU0RfVFJVRX0iICYmIHRlc3QgLXogIiR7WDg2X0ZSRUVCU0RfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJYODZfRlJFRUJTRFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7WDg2X1dJTjMyX1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9XSU4zMl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlg4Nl9XSU4zMlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7WDg2X1dJTjY0X1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9XSU42NF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlg4Nl9XSU42NFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7WDg2X0RBUldJTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfREFSV0lOX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiWDg2X0RBUldJTlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7QUxQSEFfVFJVRX0iICYmIHRlc3QgLXogIiR7QUxQSEFfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJBTFBIQVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SUE2NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtJQTY0X0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiSUE2NFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7TTMyUl9UUlVFfSIgJiYgdGVzdCAteiAiJHtNMzJSX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiTTMyUlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7TTY4S19UUlVFfSIgJiYgdGVzdCAteiAiJHtNNjhLX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiTTY4S1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7UE9XRVJQQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtQT1dFUlBDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiUE9XRVJQQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7UE9XRVJQQ19BSVhfVFJVRX0iICYmIHRlc3QgLXogIiR7UE9XRVJQQ19BSVhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJQT1dFUlBDX0FJWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7UE9XRVJQQ19EQVJXSU5fVFJVRX0iICYmIHRlc3QgLXogIiR7UE9XRVJQQ19EQVJXSU5fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJQT1dFUlBDX0RBUldJTlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7UE9XRVJQQ19GUkVFQlNEX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BPV0VSUENfRlJFRUJTRF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlBPV0VSUENfRlJFRUJTRFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7QVJNX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FSTV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIkFSTVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7QVZSMzJfVFJVRX0iICYmIHRlc3QgLXogIiR7QVZSMzJfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJBVlIzMlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7TElCRkZJX0NSSVNfVFJVRX0iICYmIHRlc3QgLXogIiR7TElCRkZJX0NSSVNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJMSUJGRklfQ1JJU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RlJWX1RSVUV9IiAmJiB0ZXN0IC16ICIke0ZSVl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIkZSVlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7UzM5MF9UUlVFfSIgJiYgdGVzdCAteiAiJHtTMzkwX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiUzM5MFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7WDg2XzY0X1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl82NF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlg4Nl82NFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7U0hfVFJVRX0iICYmIHRlc3QgLXogIiR7U0hfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJTSFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7U0g2NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtTSDY0X0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiU0g2NFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7UEFfTElOVVhfVFJVRX0iICYmIHRlc3QgLXogIiR7UEFfTElOVVhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJQQV9MSU5VWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7UEFfSFBVWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtQQV9IUFVYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiUEFfSFBVWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7UEE2NF9IUFVYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BBNjRfSFBVWF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlBBNjRfSFBVWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKKworCiA6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CithY193cml0ZV9mYWlsPTAKIGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCiBhY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KLWNhdCA+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Cithc193cml0ZV9mYWlsPTAKK2NhdCA+JENPTkZJR19TVEFUVVMgPDxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCiAjISAkU0hFTEwKICMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KICMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgpAQCAtMjMwNDYsNTkgKzEyNjgzLDc5IEBACiBkZWJ1Zz1mYWxzZQogYWNfY3NfcmVjaGVjaz1mYWxzZQogYWNfY3Nfc2lsZW50PWZhbHNlCi1TSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQotX0FDRU9GCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKICMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQogRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBlbXVsYXRlIHNoCiAgIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAogICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgogICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGVsc2UKLSAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCi0gICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7CiBlc2FjCi0KIGZpCiAKIAotCi0KLSMgUEFUSCBuZWVkcyBDUgotIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgotYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCi1hc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKLWFzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUwotYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JwotYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCiAKICMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgogaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCi0KLSMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgotaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX3Vuc2V0PXVuc2V0Ci1lbHNlCi0gIGFzX3Vuc2V0PWZhbHNlCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQogZmkKIAogCkBAIC0yMzEwNywyMCArMTI3NjQsMTggQEAKICMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgogIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCiAjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCi1hc19ubD0nCi0nCiBJRlM9IiAiIgkkYXNfbmwiCiAKICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCi1jYXNlICQwIGluCitjYXNlICQwIGluICMoKAogICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CiAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKLWRvbmUKKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKICAgICAgOzsKQEAgLTIzMTMxLDMyICsxMjc4NiwxMTEgQEAKICAgYXNfbXlzZWxmPSQwCiBmaQogaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgotICBlY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCi0gIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKIGZpCiAKLSMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgotZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAotZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKIGRvbmUKIFBTMT0nJCAnCiBQUzI9Jz4gJwogUFM0PScrICcKIAogIyBOTFMgbnVpc2FuY2VzLgotZm9yIGFzX3ZhciBpbiBcCi0gIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCi0gIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCi0gIExDX1RFTEVQSE9ORSBMQ19USU1FCi1kbwotICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgotICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgotICBlbHNlCi0gICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKLSAgZmkKLWRvbmUKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKIAotIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworCisjIGFzX2ZuX2Vycm9yIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggc3RhdHVzICQ/LCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JD87IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkMyI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQyIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQxIiA+JiQzCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMSIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKIGlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCiAgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgogICBhc19leHByPWV4cHIKQEAgLTIzMTcwLDEzICsxMjkwNCwxNyBAQAogICBhc19iYXNlbmFtZT1mYWxzZQogZmkKIAoraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQogCi0jIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCiBhc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKICRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCiAJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCiAJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotZWNobyBYLyIkMCIgfAorJGFzX2VjaG8gWC8iJDAiIHwKICAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKIAkgICAgcy8vXDEvCiAJICAgIHEKQEAgLTIzMTkxLDEwNCArMTI5MjksMTAzIEBACiAJICB9CiAJICBzLy4qLy4vOyBxJ2AKIAotIyBDRFBBVEguCi0kYXNfdW5zZXQgQ0RQQVRICi0KLQotCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7Ci0KLSAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTwotICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCi0gICMgbGluZS1udW1iZXIgbGluZSBhZnRlciBlYWNoIGxpbmUgdXNpbmcgJExJTkVOTzsgdGhlIHNlY29uZCAnc2VkJwotICAjIGRvZXMgdGhlIHJlYWwgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaAotICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCi0gICMgdHJhaWxpbmcgJy0nIGR1cmluZyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwKLSAgIyBjYXNlIGF0IGxpbmUgZW5kLgotICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKLSAgIyBzY3JpcHRzIHdpdGggb3B0aW1pemF0aW9uIGhlbHAgZnJvbSBQYW9sbyBCb256aW5pLiAgQmxhbWUgTGVlCi0gICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCi0gIHNlZCAtbiAnCi0gICAgcAotICAgIC9bJF1MSU5FTk8vPQotICAnIDwkYXNfbXlzZWxmIHwKLSAgICBzZWQgJwotICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KLSAgICAgIHQgbGluZW5vCi0gICAgICBiCi0gICAgICA6bGluZW5vCi0gICAgICBOCi0gICAgICA6bG9vcAotICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCi0gICAgICB0IGxvb3AKLSAgICAgIHMvLVxuLiovLwotICAgICcgPiRhc19tZS5saW5lbm8gJiYKLSAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8Ci0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQotICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwotICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KLSAgLiAiLi8kYXNfbWUubGluZW5vIgotICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KLSAgZXhpdAotfQotCi0KLWlmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19kaXJuYW1lPWRpcm5hbWUKLWVsc2UKLSAgYXNfZGlybmFtZT1mYWxzZQotZmkKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cwogCiBFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQotY2FzZSBgZWNobyAtbiB4YCBpbgorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKIC1uKikKLSAgY2FzZSBgZWNobyAneFxjJ2AgaW4KKyAgY2FzZSBgZWNobyAneHlcYydgIGluCiAgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgotICAqKSAgIEVDSE9fQz0nXGMnOzsKKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKICAgZXNhYzs7CiAqKQogICBFQ0hPX049Jy1uJzs7CiBlc2FjCiAKLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCi0gICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgotICBhc19leHByPWV4cHIKLWVsc2UKLSAgYXNfZXhwcj1mYWxzZQotZmkKLQogcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKIGlmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgogICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCiBlbHNlCiAgIHJtIC1mIGNvbmYkJC5kaXIKLSAgbWtkaXIgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCiBmaQotZWNobyA+Y29uZiQkLmZpbGUKLWlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19sbl9zPSdsbiAtcycKLSAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKLSAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KLSAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCi0gICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCi0gIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCiAgICAgYXNfbG5fcz0nY3AgLXAnCi1lbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19sbl9zPWxuCisgIGZpCiBlbHNlCiAgIGFzX2xuX3M9J2NwIC1wJwogZmkKIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKIHJtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKIAorCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbWtkaXJfcD06CisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKIGVsc2UKICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKICAgYXNfbWtkaXJfcD1mYWxzZQpAQCAtMjMzMDUsMTIgKzEzMDQyLDEyIEBACiAgIGFzX3Rlc3RfeD0nCiAgICAgZXZhbCBzaCAtYyAnXCcnCiAgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KLSAgICAgICAgdGVzdCAtZCAiJDEvLiI7CisJdGVzdCAtZCAiJDEvLiI7CiAgICAgICBlbHNlCi0JY2FzZSAkMSBpbgotICAgICAgICAtKilzZXQgIi4vJDEiOzsKKwljYXNlICQxIGluICMoCisJLSopc2V0ICIuLyQxIjs7CiAJZXNhYzsKLQljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbgorCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluICMoKAogCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKICAgICAnXCcnIHNoCiAgICcKQEAgLTIzMzI1LDEzICsxMzA2MiwxOSBAQAogCiAKIGV4ZWMgNj4mMQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiAkQ09ORklHX1NUQVRVUyBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTRU9GCit0ZXN0ICRhc193cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKIAotIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bwogIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCiAjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgogYWNfbG9nPSIKLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgbGliZmZpICRhc19tZSAzLjAuNSwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgbGliZmZpICRhc19tZSAzLjAuMTByYzAsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwogICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKQEAgLTIzMzQ0LDcgKzEzMDg3LDE2IEBACiAKIF9BQ0VPRgogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorY2FzZSAkYWNfY29uZmlnX2ZpbGVzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFjX2NvbmZpZ19maWxlcz0kKjs7Citlc2FjCisKK2Nhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19oZWFkZXJzOyBzaGlmdDsgYWNfY29uZmlnX2hlYWRlcnM9JCo7OworZXNhYworCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgogY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIgogY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyIKQEAgLTIzMzUzLDIyICsxMzEwNSwyNSBAQAogCiBfQUNFT0YKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBhY19jc191c2FnZT0iXAotXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCi1jdXJyZW50IGNvbmZpZ3VyYXRpb24uCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGFjdGlvbnMKK2Zyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiAgVW5sZXNzIHRoZSBmaWxlcworYW5kIGFjdGlvbnMgYXJlIHNwZWNpZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3RhbnRpYXRlZCBieSBkZWZhdWx0LgogCi1Vc2FnZTogJDAgW09QVElPTlNdIFtGSUxFXS4uLgorVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtUQUddLi4uCiAKICAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAogICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKLSAgLXEsIC0tcXVpZXQgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgICAgIC0tY29uZmlnICAgICBwcmludCBjb25maWd1cmF0aW9uLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQsIC0tc2lsZW50CisgICAgICAgICAgICAgICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCiAgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcwogICAgICAgLS1yZWNoZWNrICAgIHVwZGF0ZSAkYXNfbWUgYnkgcmVjb25maWd1cmluZyBpbiB0aGUgc2FtZSBjb25kaXRpb25zCi0gIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KLQkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCi0gIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQotCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKIAogQ29uZmlndXJhdGlvbiBmaWxlczoKICRjb25maWdfZmlsZXMKQEAgLTIzMzgyLDE2ICsxMzEzNywxNyBAQAogQ29uZmlndXJhdGlvbiBjb21tYW5kczoKICRjb25maWdfY29tbWFuZHMKIAotUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvY29uZkBnbnUub3JnPi4iCitSZXBvcnQgYnVncyB0byA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbD4uIgogCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCiBhY19jc192ZXJzaW9uPSJcXAotbGliZmZpIGNvbmZpZy5zdGF0dXMgMy4wLjUKLWNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSwKLSAgd2l0aCBvcHRpb25zIFxcImBlY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKK2xpYmZmaSBjb25maWcuc3RhdHVzIDMuMC4xMHJjMAorY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1LAorICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKIAotQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgogCkBAIC0yMzM5OSwxMSArMTMxNTUsMTIgQEAKIHNyY2Rpcj0nJHNyY2RpcicKIElOU1RBTEw9JyRJTlNUQUxMJwogTUtESVJfUD0nJE1LRElSX1AnCitBV0s9JyRBV0snCit0ZXN0IC1uICJcJEFXSyIgfHwgQVdLPWF3awogX0FDRU9GCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotIyBJZiBubyBmaWxlIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIsIHRoZW4gd2UgbmVlZCB0byBwcm92aWRlIGRlZmF1bHQKLSMgdmFsdWUuICBCeSB3ZSBuZWVkIHRvIGtub3cgaWYgZmlsZXMgd2VyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCiBhY19uZWVkX2RlZmF1bHRzPToKIHdoaWxlIHRlc3QgJCMgIT0gMAogZG8KQEAgLTIzNDI1LDM0ICsxMzE4Miw0MCBAQAogICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKICAgICBhY19jc19yZWNoZWNrPTogOzsKICAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQotICAgIGVjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworICAgICRhc19lY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKKyAgLS1jb25maWcgfCAtLWNvbmZpIHwgLS1jb25mIHwgLS1jb24gfCAtLWNvIHwgLS1jICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX2NvbmZpZyI7IGV4aXQgOzsKICAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKICAgICBkZWJ1Zz06IDs7CiAgIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCiAgICAgJGFjX3NoaWZ0Ci0gICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRhY19vcHRhcmciCisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIKICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKICAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQogICAgICRhY19zaGlmdAotICAgIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgJGFjX29wdGFyZyIKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0hFQURFUlMgIiAnJGFjX29wdGFyZyciCiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CiAgIC0taGUgfCAtLWgpCiAgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICAgIGFzX2ZuX2Vycm9yICJhbWJpZ3VvdXMgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iOzsKICAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCi0gICAgZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OworICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7CiAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCiAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKICAgICBhY19jc19zaWxlbnQ9OiA7OwogCiAgICMgVGhpcyBpcyBhbiBlcnJvci4KLSAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworICAtKikgYXNfZm5fZXJyb3IgInVucmVjb2duaXplZCBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKIAotICAqKSBhY19jb25maWdfdGFyZ2V0cz0iJGFjX2NvbmZpZ190YXJnZXRzICQxIgorICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlnX3RhcmdldHMgIiAkMSIKICAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OwogCiAgIGVzYWMKQEAgLTIzNDY3LDM2ICsxMzIzMCwyOTMgQEAKIGZpCiAKIF9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogaWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCi0gIGVjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCAkU0hFTEwgJDAgIiRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzICIgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iID4mNgotICBDT05GSUdfU0hFTEw9JFNIRUxMCisgIHNldCBYICckU0hFTEwnICckMCcgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKyAgc2hpZnQKKyAgXCRhc19lY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgXCQqIiA+JjYKKyAgQ09ORklHX1NIRUxMPSckU0hFTEwnCiAgIGV4cG9ydCBDT05GSUdfU0hFTEwKLSAgZXhlYyAkU0hFTEwgIiQwIiRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisgIGV4ZWMgIlwkQCIKIGZpCiAKIF9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBleGVjIDU+PmNvbmZpZy5sb2cKIHsKICAgZWNobwogICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAogIyMgUnVubmluZyAkYXNfbWUuICMjCiBfQVNCT1gKLSAgZWNobyAiJGFjX2xvZyIKKyAgJGFzX2VjaG8gIiRhY19sb2ciCiB9ID4mNQogCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKICMKICMgSU5JVC1DT01NQU5EUwogIwogQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIgorCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCittYWNyb192ZXJzaW9uPSdgJEVDSE8gIlgkbWFjcm9fdmVyc2lvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWFjcm9fcmV2aXNpb249J2AkRUNITyAiWCRtYWNyb19yZXZpc2lvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZD0nYCRFQ0hPICJYJGVuYWJsZV9zaGFyZWQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zdGF0aWM9J2AkRUNITyAiWCRlbmFibGVfc3RhdGljIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwaWNfbW9kZT0nYCRFQ0hPICJYJHBpY19tb2RlIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZmFzdF9pbnN0YWxsPSdgJEVDSE8gIlgkZW5hYmxlX2Zhc3RfaW5zdGFsbCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9hbGlhcz0nYCRFQ0hPICJYJGhvc3RfYWxpYXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Q9J2AkRUNITyAiWCRob3N0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0X29zPSdgJEVDSE8gIlgkaG9zdF9vcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfYWxpYXM9J2AkRUNITyAiWCRidWlsZF9hbGlhcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGQ9J2AkRUNITyAiWCRidWlsZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfb3M9J2AkRUNITyAiWCRidWlsZF9vcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0VEPSdgJEVDSE8gIlgkU0VEIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitYc2VkPSdgJEVDSE8gIlgkWHNlZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR1JFUD0nYCRFQ0hPICJYJEdSRVAiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VHUkVQPSdgJEVDSE8gIlgkRUdSRVAiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0ZHUkVQPSdgJEVDSE8gIlgkRkdSRVAiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xEPSdgJEVDSE8gIlgkTEQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NPSdgJEVDSE8gIlgkTk0iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xOX1M9J2AkRUNITyAiWCRMTl9TIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYXhfY21kX2xlbj0nYCRFQ0hPICJYJG1heF9jbWRfbGVuIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithY19vYmpleHQ9J2AkRUNITyAiWCRhY19vYmpleHQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4ZWV4dD0nYCRFQ0hPICJYJGV4ZWV4dCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfdW5zZXQ9J2AkRUNITyAiWCRsdF91bnNldCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfU1AyTkw9J2AkRUNITyAiWCRsdF9TUDJOTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfTkwyU1A9J2AkRUNITyAiWCRsdF9OTDJTUCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2ZsYWc9J2AkRUNITyAiWCRyZWxvYWRfZmxhZyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2NtZHM9J2AkRUNITyAiWCRyZWxvYWRfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT0JKRFVNUD0nYCRFQ0hPICJYJE9CSkRVTVAiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIlgkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIlgkZmlsZV9tYWdpY19jbWQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FSPSdgJEVDSE8gIlgkQVIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FSX0ZMQUdTPSdgJEVDSE8gIlgkQVJfRkxBR1MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NUUklQPSdgJEVDSE8gIlgkU1RSSVAiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1JBTkxJQj0nYCRFQ0hPICJYJFJBTkxJQiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiWCRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICJYJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2NtZHM9J2AkRUNITyAiWCRvbGRfYXJjaGl2ZV9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDQz0nYCRFQ0hPICJYJENDIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDRkxBR1M9J2AkRUNITyAiWCRDRkxBR1MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyPSdgJEVDSE8gIlgkY29tcGlsZXIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dDQz0nYCRFQ0hPICJYJEdDQyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICJYJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIlgkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIlgkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiWCRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvYmpkaXI9J2AkRUNITyAiWCRvYmpkaXIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NIRUxMPSdgJEVDSE8gIlgkU0hFTEwiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VDSE89J2AkRUNITyAiWCRFQ0hPIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitNQUdJQ19DTUQ9J2AkRUNITyAiWCRNQUdJQ19DTUQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICJYJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICJYJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICJYJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX2xvY2tzPSdgJEVDSE8gIlgkbmVlZF9sb2NrcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRFNZTVVUSUw9J2AkRUNITyAiWCREU1lNVVRJTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTk1FRElUPSdgJEVDSE8gIlgkTk1FRElUIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMSVBPPSdgJEVDSE8gIlgkTElQTyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT1RPT0w9J2AkRUNITyAiWCRPVE9PTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT1RPT0w2ND0nYCRFQ0hPICJYJE9UT09MNjQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYmV4dD0nYCRFQ0hPICJYJGxpYmV4dCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hyZXh0X2NtZHM9J2AkRUNITyAiWCRzaHJleHRfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXh0cmFjdF9leHBzeW1zX2NtZHM9J2AkRUNITyAiWCRleHRyYWN0X2V4cHN5bXNfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGM9J2AkRUNITyAiWCRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz0nYCRFQ0hPICJYJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nYCRFQ0hPICJYJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2AkRUNITyAiWCR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbmVlZHNfb2JqZWN0PSdgJEVDSE8gIlgkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9J2AkRUNITyAiWCRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIlgkYXJjaGl2ZV9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIlgkYXJjaGl2ZV9leHBzeW1fY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHM9J2AkRUNITyAiWCRtb2R1bGVfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIlgkbW9kdWxlX2V4cHN5bV9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZD0nYCRFQ0hPICJYJHdpdGhfZ251X2xkIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICJYJGFsbG93X3VuZGVmaW5lZF9mbGFnIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitub191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICJYJG5vX3VuZGVmaW5lZF9mbGFnIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgJEVDSE8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nYCRFQ0hPICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3Q9J2AkRUNITyAiWCRoYXJkY29kZV9kaXJlY3QiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0nYCRFQ0hPICJYJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbWludXNfTD0nYCRFQ0hPICJYJGhhcmRjb2RlX21pbnVzX0wiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiWCRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiWCRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luaGVyaXRfcnBhdGg9J2AkRUNITyAiWCRpbmhlcml0X3JwYXRoIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIlgkbGlua19hbGxfZGVwbGlicyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICJYJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2Fsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICJYJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICJYJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICJYJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIlgkaW5jbHVkZV9leHBzeW1zIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVsaW5rX2NtZHM9J2AkRUNITyAiWCRwcmVsaW5rX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIlgkZmlsZV9saXN0X3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIlgkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICJYJG5lZWRfbGliX3ByZWZpeCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF92ZXJzaW9uPSdgJEVDSE8gIlgkbmVlZF92ZXJzaW9uIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2ZXJzaW9uX3R5cGU9J2AkRUNITyAiWCR2ZXJzaW9uX3R5cGUiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3J1bnBhdGhfdmFyPSdgJEVDSE8gIlgkcnVucGF0aF92YXIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF92YXI9J2AkRUNITyAiWCRzaGxpYnBhdGhfdmFyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9J2AkRUNITyAiWCRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYm5hbWVfc3BlYz0nYCRFQ0hPICJYJGxpYm5hbWVfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlicmFyeV9uYW1lc19zcGVjPSdgJEVDSE8gIlgkbGlicmFyeV9uYW1lc19zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzb25hbWVfc3BlYz0nYCRFQ0hPICJYJHNvbmFtZV9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIlgkcG9zdGluc3RhbGxfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIlgkcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaW5pc2hfY21kcz0nYCRFQ0hPICJYJGZpbmlzaF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaW5pc2hfZXZhbD0nYCRFQ0hPICJYJGZpbmlzaF9ldmFsIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9pbnRvX2xpYnM9J2AkRUNITyAiWCRoYXJkY29kZV9pbnRvX2xpYnMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICJYJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiWCRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uPSdgJEVDSE8gIlgkaGFyZGNvZGVfYWN0aW9uIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuPSdgJEVDSE8gIlgkZW5hYmxlX2Rsb3BlbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbl9zZWxmPSdgJEVDSE8gIlgkZW5hYmxlX2Rsb3Blbl9zZWxmIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSdgJEVDSE8gIlgkZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3N0cmlwbGliPSdgJEVDSE8gIlgkb2xkX3N0cmlwbGliIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzdHJpcGxpYj0nYCRFQ0hPICJYJHN0cmlwbGliIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gU0VEIFwKK0dSRVAgXAorRUdSRVAgXAorRkdSRVAgXAorTEQgXAorTk0gXAorTE5fUyBcCitsdF9TUDJOTCBcCitsdF9OTDJTUCBcCityZWxvYWRfZmxhZyBcCitPQkpEVU1QIFwKK2RlcGxpYnNfY2hlY2tfbWV0aG9kIFwKK2ZpbGVfbWFnaWNfY21kIFwKK0FSIFwKK0FSX0ZMQUdTIFwKK1NUUklQIFwKK1JBTkxJQiBcCitDQyBcCitDRkxBR1MgXAorY29tcGlsZXIgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKK1NIRUxMIFwKK0VDSE8gXAorbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorbHRfcHJvZ19jb21waWxlcl93bCBcCitsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCitsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCituZWVkX2xvY2tzIFwKK0RTWU1VVElMIFwKK05NRURJVCBcCitMSVBPIFwKK09UT09MIFwKK09UT09MNjQgXAorc2hyZXh0X2NtZHMgXAorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdCBcCit3aXRoX2dudV9sZCBcCithbGxvd191bmRlZmluZWRfZmxhZyBcCitub191bmRlZmluZWRfZmxhZyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCitmaXhfc3JjZmlsZV9wYXRoIFwKK2V4Y2x1ZGVfZXhwc3ltcyBcCitpbmNsdWRlX2V4cHN5bXMgXAorZmlsZV9saXN0X3NwZWMgXAordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgXAorbGlibmFtZV9zcGVjIFwKK2xpYnJhcnlfbmFtZXNfc3BlYyBcCitzb25hbWVfc3BlYyBcCitmaW5pc2hfZXZhbCBcCitvbGRfc3RyaXBsaWIgXAorc3RyaXBsaWI7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyAiWFxcXFxcJFwkdmFyIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiWFxcXCRcJHZhclxcIiB8IFxcXCRYc2VkIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gcmVsb2FkX2NtZHMgXAorb2xkX3Bvc3RpbnN0YWxsX2NtZHMgXAorb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCitvbGRfYXJjaGl2ZV9jbWRzIFwKK2V4dHJhY3RfZXhwc3ltc19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgXAorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAorYXJjaGl2ZV9jbWRzIFwKK2FyY2hpdmVfZXhwc3ltX2NtZHMgXAorbW9kdWxlX2NtZHMgXAorbW9kdWxlX2V4cHN5bV9jbWRzIFwKK2V4cG9ydF9zeW1ib2xzX2NtZHMgXAorcHJlbGlua19jbWRzIFwKK3Bvc3RpbnN0YWxsX2NtZHMgXAorcG9zdHVuaW5zdGFsbF9jbWRzIFwKK2ZpbmlzaF9jbWRzIFwKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBcCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPICJYXFxcXFwkXCR2YXIiXGAgaW4KKyAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJYXFxcJFwkdmFyXFwiIHwgXFxcJFhzZWQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBGaXgtdXAgZmFsbGJhY2sgZWNobyBpZiBpdCB3YXMgbWFuZ2xlZCBieSB0aGUgYWJvdmUgcXVvdGluZyBydWxlcy4KK2Nhc2UgXCRsdF9FQ0hPIGluCisqJ1xcXCQwIC0tZmFsbGJhY2stZWNobyInKSAgbHRfRUNITz1cYFwkRUNITyAiWFwkbHRfRUNITyIgfCBcJFhzZWQgLWUgJ3MvXFxcXFxcXFxcXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIlwkL1wkMCAtLWZhbGxiYWNrLWVjaG8iLydcYAorICA7OworZXNhYworCithY19hdXhfZGlyPSckYWNfYXV4X2RpcicKK3hzaV9zaGVsbD0nJHhzaV9zaGVsbCcKK2x0X3NoZWxsX2FwcGVuZD0nJGx0X3NoZWxsX2FwcGVuZCcKKworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKKworICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworICAgIFZFUlNJT049JyRWRVJTSU9OJworICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnCisKKworCiBUQVJHRVRESVI9IiRUQVJHRVRESVIiCiAKIF9BQ0VPRgogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIAogIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCiBmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKQEAgLTIzNTA0LDE2ICsxMzUyNCwyMCBAQAogICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCiAgICAgImZmaWNvbmZpZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBmZmljb25maWcuaCIgOzsKICAgICAiZGVwZmlsZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7CisgICAgImxpYnRvb2wiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgbGlidG9vbCIgOzsKICAgICAiaW5jbHVkZSIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBpbmNsdWRlIiA7OwogICAgICJzcmMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgc3JjIiA7OwogICAgICJpbmNsdWRlL2ZmaXRhcmdldC5oIikgQ09ORklHX0xJTktTPSIkQ09ORklHX0xJTktTIGluY2x1ZGUvZmZpdGFyZ2V0Lmg6c3JjLyRUQVJHRVRESVIvZmZpdGFyZ2V0LmgiIDs7CisgICAgImluY2x1ZGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5jbHVkZS9NYWtlZmlsZSIgOzsKICAgICAiaW5jbHVkZS9mZmkuaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbmNsdWRlL2ZmaS5oIiA7OworICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKyAgICAidGVzdHN1aXRlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzdWl0ZS9NYWtlZmlsZSIgOzsKKyAgICAibWFuL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG1hbi9NYWtlZmlsZSIgOzsKKyAgICAibGliZmZpLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYmZmaS5wYyIgOzsKICAgICAiaW5jbHVkZS9mZmlfY29tbW9uLmgiKSBDT05GSUdfTElOS1M9IiRDT05GSUdfTElOS1MgaW5jbHVkZS9mZmlfY29tbW9uLmg6aW5jbHVkZS9mZmlfY29tbW9uLmgiIDs7CiAgICAgImZmaWNvbmZpZy5weSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBmZmljb25maWcucHkiIDs7CiAKLSAgKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICAqKSBhc19mbl9lcnJvciAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKICAgZXNhYwogZG9uZQogCkBAIC0yMzU0MSw3ICsxMzU2NSw3IEBACiAgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CiAgIHsgdGVzdCAteiAiJHRtcCIgfHwgdGVzdCAhIC1kICIkdG1wIiB8fCBybSAtZnIgIiR0bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCiAnIDAKLSAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKKyAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKIH0KICMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgogCkBAIC0yMzU1MiwyODEgKzEzNTc2LDE0MCBAQAogewogICB0bXA9Li9jb25mJCQtJFJBTkRPTQogICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKLX0gfHwKLXsKLSAgIGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH0KLX0KK30gfHwgYXNfZm5fZXJyb3IgImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iICIkTElORU5PIiA1CiAKLSMKLSMgU2V0IHVwIHRoZSBzZWQgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCi0jCi0KLSMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGUgc2NyaXB0cyBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgotIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdoZW4gLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBjb25maWcuaCcuCiBpZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgogCisKK2FjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKKyMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KKyMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcworIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KK2lmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgorICBldmFsIGFjX2NyPVwkXCdcXHJcJworZmkKK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKK2lmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCisgIGFjX2NzX2F3a19jcj0nXHInCitlbHNlCisgIGFjX2NzX2F3a19jcj0kYWNfY3IKK2ZpCisKK2VjaG8gJ0JFR0lOIHsnID4iJHRtcC9zdWJzMS5hd2siICYmCiBfQUNFT0YKIAogCi0KK3sKKyAgZWNobyAiY2F0ID5jb25mJCRzdWJzLmF3ayA8PF9BQ0VPRiIgJiYKKyAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorICBlY2hvICJfQUNFT0YiCit9ID5jb25mJCRzdWJzLnNoIHx8CisgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnJCdgCiBhY19kZWxpbT0nJSFfISMgJwogZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCi0gIGNhdCA+Y29uZiQkc3Vicy5zZWQgPDxfQUNFT0YKLVNIRUxMISRTSEVMTCRhY19kZWxpbQotUEFUSF9TRVBBUkFUT1IhJFBBVEhfU0VQQVJBVE9SJGFjX2RlbGltCi1QQUNLQUdFX05BTUUhJFBBQ0tBR0VfTkFNRSRhY19kZWxpbQotUEFDS0FHRV9UQVJOQU1FISRQQUNLQUdFX1RBUk5BTUUkYWNfZGVsaW0KLVBBQ0tBR0VfVkVSU0lPTiEkUEFDS0FHRV9WRVJTSU9OJGFjX2RlbGltCi1QQUNLQUdFX1NUUklORyEkUEFDS0FHRV9TVFJJTkckYWNfZGVsaW0KLVBBQ0tBR0VfQlVHUkVQT1JUISRQQUNLQUdFX0JVR1JFUE9SVCRhY19kZWxpbQotZXhlY19wcmVmaXghJGV4ZWNfcHJlZml4JGFjX2RlbGltCi1wcmVmaXghJHByZWZpeCRhY19kZWxpbQotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSEkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSRhY19kZWxpbQotYmluZGlyISRiaW5kaXIkYWNfZGVsaW0KLXNiaW5kaXIhJHNiaW5kaXIkYWNfZGVsaW0KLWxpYmV4ZWNkaXIhJGxpYmV4ZWNkaXIkYWNfZGVsaW0KLWRhdGFyb290ZGlyISRkYXRhcm9vdGRpciRhY19kZWxpbQotZGF0YWRpciEkZGF0YWRpciRhY19kZWxpbQotc3lzY29uZmRpciEkc3lzY29uZmRpciRhY19kZWxpbQotc2hhcmVkc3RhdGVkaXIhJHNoYXJlZHN0YXRlZGlyJGFjX2RlbGltCi1sb2NhbHN0YXRlZGlyISRsb2NhbHN0YXRlZGlyJGFjX2RlbGltCi1pbmNsdWRlZGlyISRpbmNsdWRlZGlyJGFjX2RlbGltCi1vbGRpbmNsdWRlZGlyISRvbGRpbmNsdWRlZGlyJGFjX2RlbGltCi1kb2NkaXIhJGRvY2RpciRhY19kZWxpbQotaW5mb2RpciEkaW5mb2RpciRhY19kZWxpbQotaHRtbGRpciEkaHRtbGRpciRhY19kZWxpbQotZHZpZGlyISRkdmlkaXIkYWNfZGVsaW0KLXBkZmRpciEkcGRmZGlyJGFjX2RlbGltCi1wc2RpciEkcHNkaXIkYWNfZGVsaW0KLWxpYmRpciEkbGliZGlyJGFjX2RlbGltCi1sb2NhbGVkaXIhJGxvY2FsZWRpciRhY19kZWxpbQotbWFuZGlyISRtYW5kaXIkYWNfZGVsaW0KLURFRlMhJERFRlMkYWNfZGVsaW0KLUVDSE9fQyEkRUNIT19DJGFjX2RlbGltCi1FQ0hPX04hJEVDSE9fTiRhY19kZWxpbQotRUNIT19UISRFQ0hPX1QkYWNfZGVsaW0KLUxJQlMhJExJQlMkYWNfZGVsaW0KLWJ1aWxkX2FsaWFzISRidWlsZF9hbGlhcyRhY19kZWxpbQotaG9zdF9hbGlhcyEkaG9zdF9hbGlhcyRhY19kZWxpbQotdGFyZ2V0X2FsaWFzISR0YXJnZXRfYWxpYXMkYWNfZGVsaW0KLWJ1aWxkISRidWlsZCRhY19kZWxpbQotYnVpbGRfY3B1ISRidWlsZF9jcHUkYWNfZGVsaW0KLWJ1aWxkX3ZlbmRvciEkYnVpbGRfdmVuZG9yJGFjX2RlbGltCi1idWlsZF9vcyEkYnVpbGRfb3MkYWNfZGVsaW0KLWhvc3QhJGhvc3QkYWNfZGVsaW0KLWhvc3RfY3B1ISRob3N0X2NwdSRhY19kZWxpbQotaG9zdF92ZW5kb3IhJGhvc3RfdmVuZG9yJGFjX2RlbGltCi1ob3N0X29zISRob3N0X29zJGFjX2RlbGltCi10YXJnZXQhJHRhcmdldCRhY19kZWxpbQotdGFyZ2V0X2NwdSEkdGFyZ2V0X2NwdSRhY19kZWxpbQotdGFyZ2V0X3ZlbmRvciEkdGFyZ2V0X3ZlbmRvciRhY19kZWxpbQotdGFyZ2V0X29zISR0YXJnZXRfb3MkYWNfZGVsaW0KLUlOU1RBTExfUFJPR1JBTSEkSU5TVEFMTF9QUk9HUkFNJGFjX2RlbGltCi1JTlNUQUxMX1NDUklQVCEkSU5TVEFMTF9TQ1JJUFQkYWNfZGVsaW0KLUlOU1RBTExfREFUQSEkSU5TVEFMTF9EQVRBJGFjX2RlbGltCi1hbV9faXNyYyEkYW1fX2lzcmMkYWNfZGVsaW0KLUNZR1BBVEhfVyEkQ1lHUEFUSF9XJGFjX2RlbGltCi1QQUNLQUdFISRQQUNLQUdFJGFjX2RlbGltCi1WRVJTSU9OISRWRVJTSU9OJGFjX2RlbGltCi1BQ0xPQ0FMISRBQ0xPQ0FMJGFjX2RlbGltCi1BVVRPQ09ORiEkQVVUT0NPTkYkYWNfZGVsaW0KLUFVVE9NQUtFISRBVVRPTUFLRSRhY19kZWxpbQotQVVUT0hFQURFUiEkQVVUT0hFQURFUiRhY19kZWxpbQotTUFLRUlORk8hJE1BS0VJTkZPJGFjX2RlbGltCi1pbnN0YWxsX3NoISRpbnN0YWxsX3NoJGFjX2RlbGltCi1TVFJJUCEkU1RSSVAkYWNfZGVsaW0KLUlOU1RBTExfU1RSSVBfUFJPR1JBTSEkSU5TVEFMTF9TVFJJUF9QUk9HUkFNJGFjX2RlbGltCi1ta2Rpcl9wISRta2Rpcl9wJGFjX2RlbGltCi1BV0shJEFXSyRhY19kZWxpbQotU0VUX01BS0UhJFNFVF9NQUtFJGFjX2RlbGltCi1hbV9fbGVhZGluZ19kb3QhJGFtX19sZWFkaW5nX2RvdCRhY19kZWxpbQotQU1UQVIhJEFNVEFSJGFjX2RlbGltCi1hbV9fdGFyISRhbV9fdGFyJGFjX2RlbGltCi1hbV9fdW50YXIhJGFtX191bnRhciRhY19kZWxpbQotQ0MhJENDJGFjX2RlbGltCi1DRkxBR1MhJENGTEFHUyRhY19kZWxpbQotTERGTEFHUyEkTERGTEFHUyRhY19kZWxpbQotQ1BQRkxBR1MhJENQUEZMQUdTJGFjX2RlbGltCi1hY19jdF9DQyEkYWNfY3RfQ0MkYWNfZGVsaW0KLUVYRUVYVCEkRVhFRVhUJGFjX2RlbGltCi1PQkpFWFQhJE9CSkVYVCRhY19kZWxpbQotREVQRElSISRERVBESVIkYWNfZGVsaW0KLWFtX19pbmNsdWRlISRhbV9faW5jbHVkZSRhY19kZWxpbQotYW1fX3F1b3RlISRhbV9fcXVvdGUkYWNfZGVsaW0KLUFNREVQX1RSVUUhJEFNREVQX1RSVUUkYWNfZGVsaW0KLUFNREVQX0ZBTFNFISRBTURFUF9GQUxTRSRhY19kZWxpbQotQU1ERVBCQUNLU0xBU0ghJEFNREVQQkFDS1NMQVNIJGFjX2RlbGltCi1DQ0RFUE1PREUhJENDREVQTU9ERSRhY19kZWxpbQotYW1fX2Zhc3RkZXBDQ19UUlVFISRhbV9fZmFzdGRlcENDX1RSVUUkYWNfZGVsaW0KLWFtX19mYXN0ZGVwQ0NfRkFMU0UhJGFtX19mYXN0ZGVwQ0NfRkFMU0UkYWNfZGVsaW0KLUNDQVMhJENDQVMkYWNfZGVsaW0KLUNDQVNGTEFHUyEkQ0NBU0ZMQUdTJGFjX2RlbGltCi1DQ0FTREVQTU9ERSEkQ0NBU0RFUE1PREUkYWNfZGVsaW0KLWFtX19mYXN0ZGVwQ0NBU19UUlVFISRhbV9fZmFzdGRlcENDQVNfVFJVRSRhY19kZWxpbQotYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFISRhbV9fZmFzdGRlcENDQVNfRkFMU0UkYWNfZGVsaW0KLVNFRCEkU0VEJGFjX2RlbGltCi1HUkVQISRHUkVQJGFjX2RlbGltCi1FR1JFUCEkRUdSRVAkYWNfZGVsaW0KLUxOX1MhJExOX1MkYWNfZGVsaW0KLUVDSE8hJEVDSE8kYWNfZGVsaW0KLV9BQ0VPRgorICAuIC4vY29uZiQkc3Vicy5zaCB8fAorICAgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKIAotICBpZiB0ZXN0IGBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuc2VkIHwgZ3JlcCAtYyBYYCA9IDk3OyB0aGVuCisgIGFjX2RlbGltX249YHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5hd2sgfCBncmVwIC1jIFhgCisgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCiAgICAgYnJlYWsKICAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKICAgZWxzZQogICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCiAgIGZpCiBkb25lCitybSAtZiBjb25mJCRzdWJzLnNoCiAKLWFjX2VvZj1gc2VkIC1uICcvXkNFT0ZbMC05XSokL3MvQ0VPRi8wL3AnIGNvbmYkJHN1YnMuc2VkYAotaWYgdGVzdCAtbiAiJGFjX2VvZiI7IHRoZW4KLSAgYWNfZW9mPWBlY2hvICIkYWNfZW9mIiB8IHNvcnQgLW5ydSB8IHNlZCAxcWAKLSAgYWNfZW9mPWBleHByICRhY19lb2YgKyAxYAotZmkKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKLWNhdCA+IlwkdG1wL3N1YnMtMS5zZWQiIDw8XENFT0YkYWNfZW9mCi0vQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2NhdCA+PiJcJHRtcC9zdWJzMS5hd2siIDw8XFxfQUNBV0sgJiYKIF9BQ0VPRgotc2VkICcKLXMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2cKLXMvXi9zLEAvOyBzLyEvQCx8I18hIV8jfC8KLTpuCi10IG4KLXMvJyIkYWNfZGVsaW0iJyQvLGcvOyB0Ci1zLyQvXFwvOyBwCi1OOyBzL14uKlxuLy87IHMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2c7IGIgbgotJyA+PiRDT05GSUdfU1RBVFVTIDxjb25mJCRzdWJzLnNlZAotcm0gLWYgY29uZiQkc3Vicy5zZWQKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi1DRU9GJGFjX2VvZgorc2VkIC1uICcKK2gKK3MvXi9TWyIvOyBzLyEuKi8iXT0vCitwCitnCitzL15bXiFdKiEvLworOnJlcGwKK3QgcmVwbAorcy8nIiRhY19kZWxpbSInJC8vCit0IGRlbGltCis6bmwKK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxuIlxcLworcAorbgorYiByZXBsCis6bW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBubAorOmRlbGltCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvCitwCitiCis6bW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBkZWxpbQorJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworL15bXiIiXS97CisgIE4KKyAgcy9cbi8vCit9CisnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCitybSAtZiBjb25mJCRzdWJzLmF3aworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitfQUNBV0sKK2NhdCA+PiJcJHRtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCisgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCisKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisKKyAgcHJpbnQgbGluZQorfQorCitfQUNBV0sKIF9BQ0VPRgotCi0KLWFjX2RlbGltPSclIV8hIyAnCi1mb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KLSAgY2F0ID5jb25mJCRzdWJzLnNlZCA8PF9BQ0VPRgotQVIhJEFSJGFjX2RlbGltCi1SQU5MSUIhJFJBTkxJQiRhY19kZWxpbQotQ1BQISRDUFAkYWNfZGVsaW0KLUNYWCEkQ1hYJGFjX2RlbGltCi1DWFhGTEFHUyEkQ1hYRkxBR1MkYWNfZGVsaW0KLWFjX2N0X0NYWCEkYWNfY3RfQ1hYJGFjX2RlbGltCi1DWFhERVBNT0RFISRDWFhERVBNT0RFJGFjX2RlbGltCi1hbV9fZmFzdGRlcENYWF9UUlVFISRhbV9fZmFzdGRlcENYWF9UUlVFJGFjX2RlbGltCi1hbV9fZmFzdGRlcENYWF9GQUxTRSEkYW1fX2Zhc3RkZXBDWFhfRkFMU0UkYWNfZGVsaW0KLUNYWENQUCEkQ1hYQ1BQJGFjX2RlbGltCi1GNzchJEY3NyRhY19kZWxpbQotRkZMQUdTISRGRkxBR1MkYWNfZGVsaW0KLWFjX2N0X0Y3NyEkYWNfY3RfRjc3JGFjX2RlbGltCi1MSUJUT09MISRMSUJUT09MJGFjX2RlbGltCi1NQUlOVEFJTkVSX01PREVfVFJVRSEkTUFJTlRBSU5FUl9NT0RFX1RSVUUkYWNfZGVsaW0KLU1BSU5UQUlORVJfTU9ERV9GQUxTRSEkTUFJTlRBSU5FUl9NT0RFX0ZBTFNFJGFjX2RlbGltCi1NQUlOVCEkTUFJTlQkYWNfZGVsaW0KLVRFU1RTVUJESVJfVFJVRSEkVEVTVFNVQkRJUl9UUlVFJGFjX2RlbGltCi1URVNUU1VCRElSX0ZBTFNFISRURVNUU1VCRElSX0ZBTFNFJGFjX2RlbGltCi1BTV9SVU5URVNURkxBR1MhJEFNX1JVTlRFU1RGTEFHUyRhY19kZWxpbQotTUlQU19UUlVFISRNSVBTX1RSVUUkYWNfZGVsaW0KLU1JUFNfRkFMU0UhJE1JUFNfRkFMU0UkYWNfZGVsaW0KLVNQQVJDX1RSVUUhJFNQQVJDX1RSVUUkYWNfZGVsaW0KLVNQQVJDX0ZBTFNFISRTUEFSQ19GQUxTRSRhY19kZWxpbQotWDg2X1RSVUUhJFg4Nl9UUlVFJGFjX2RlbGltCi1YODZfRkFMU0UhJFg4Nl9GQUxTRSRhY19kZWxpbQotWDg2X0ZSRUVCU0RfVFJVRSEkWDg2X0ZSRUVCU0RfVFJVRSRhY19kZWxpbQotWDg2X0ZSRUVCU0RfRkFMU0UhJFg4Nl9GUkVFQlNEX0ZBTFNFJGFjX2RlbGltCi1YODZfV0lOMzJfVFJVRSEkWDg2X1dJTjMyX1RSVUUkYWNfZGVsaW0KLVg4Nl9XSU4zMl9GQUxTRSEkWDg2X1dJTjMyX0ZBTFNFJGFjX2RlbGltCi1YODZfREFSV0lOX1RSVUUhJFg4Nl9EQVJXSU5fVFJVRSRhY19kZWxpbQotWDg2X0RBUldJTl9GQUxTRSEkWDg2X0RBUldJTl9GQUxTRSRhY19kZWxpbQotQUxQSEFfVFJVRSEkQUxQSEFfVFJVRSRhY19kZWxpbQotQUxQSEFfRkFMU0UhJEFMUEhBX0ZBTFNFJGFjX2RlbGltCi1JQTY0X1RSVUUhJElBNjRfVFJVRSRhY19kZWxpbQotSUE2NF9GQUxTRSEkSUE2NF9GQUxTRSRhY19kZWxpbQotTTMyUl9UUlVFISRNMzJSX1RSVUUkYWNfZGVsaW0KLU0zMlJfRkFMU0UhJE0zMlJfRkFMU0UkYWNfZGVsaW0KLU02OEtfVFJVRSEkTTY4S19UUlVFJGFjX2RlbGltCi1NNjhLX0ZBTFNFISRNNjhLX0ZBTFNFJGFjX2RlbGltCi1QT1dFUlBDX1RSVUUhJFBPV0VSUENfVFJVRSRhY19kZWxpbQotUE9XRVJQQ19GQUxTRSEkUE9XRVJQQ19GQUxTRSRhY19kZWxpbQotUE9XRVJQQ19BSVhfVFJVRSEkUE9XRVJQQ19BSVhfVFJVRSRhY19kZWxpbQotUE9XRVJQQ19BSVhfRkFMU0UhJFBPV0VSUENfQUlYX0ZBTFNFJGFjX2RlbGltCi1QT1dFUlBDX0RBUldJTl9UUlVFISRQT1dFUlBDX0RBUldJTl9UUlVFJGFjX2RlbGltCi1QT1dFUlBDX0RBUldJTl9GQUxTRSEkUE9XRVJQQ19EQVJXSU5fRkFMU0UkYWNfZGVsaW0KLVBPV0VSUENfRlJFRUJTRF9UUlVFISRQT1dFUlBDX0ZSRUVCU0RfVFJVRSRhY19kZWxpbQotUE9XRVJQQ19GUkVFQlNEX0ZBTFNFISRQT1dFUlBDX0ZSRUVCU0RfRkFMU0UkYWNfZGVsaW0KLUFSTV9UUlVFISRBUk1fVFJVRSRhY19kZWxpbQotQVJNX0ZBTFNFISRBUk1fRkFMU0UkYWNfZGVsaW0KLUxJQkZGSV9DUklTX1RSVUUhJExJQkZGSV9DUklTX1RSVUUkYWNfZGVsaW0KLUxJQkZGSV9DUklTX0ZBTFNFISRMSUJGRklfQ1JJU19GQUxTRSRhY19kZWxpbQotRlJWX1RSVUUhJEZSVl9UUlVFJGFjX2RlbGltCi1GUlZfRkFMU0UhJEZSVl9GQUxTRSRhY19kZWxpbQotUzM5MF9UUlVFISRTMzkwX1RSVUUkYWNfZGVsaW0KLVMzOTBfRkFMU0UhJFMzOTBfRkFMU0UkYWNfZGVsaW0KLVg4Nl82NF9UUlVFISRYODZfNjRfVFJVRSRhY19kZWxpbQotWDg2XzY0X0ZBTFNFISRYODZfNjRfRkFMU0UkYWNfZGVsaW0KLVNIX1RSVUUhJFNIX1RSVUUkYWNfZGVsaW0KLVNIX0ZBTFNFISRTSF9GQUxTRSRhY19kZWxpbQotU0g2NF9UUlVFISRTSDY0X1RSVUUkYWNfZGVsaW0KLVNINjRfRkFMU0UhJFNINjRfRkFMU0UkYWNfZGVsaW0KLVBBX0xJTlVYX1RSVUUhJFBBX0xJTlVYX1RSVUUkYWNfZGVsaW0KLVBBX0xJTlVYX0ZBTFNFISRQQV9MSU5VWF9GQUxTRSRhY19kZWxpbQotUEFfSFBVWF9UUlVFISRQQV9IUFVYX1RSVUUkYWNfZGVsaW0KLVBBX0hQVVhfRkFMU0UhJFBBX0hQVVhfRkFMU0UkYWNfZGVsaW0KLVBBNjRfSFBVWF9UUlVFISRQQTY0X0hQVVhfVFJVRSRhY19kZWxpbQotUEE2NF9IUFVYX0ZBTFNFISRQQTY0X0hQVVhfRkFMU0UkYWNfZGVsaW0KLUFMTE9DQSEkQUxMT0NBJGFjX2RlbGltCi1IQVZFX0xPTkdfRE9VQkxFISRIQVZFX0xPTkdfRE9VQkxFJGFjX2RlbGltCi1UQVJHRVQhJFRBUkdFVCRhY19kZWxpbQotVEFSR0VURElSISRUQVJHRVRESVIkYWNfZGVsaW0KLXRvb2xleGVjZGlyISR0b29sZXhlY2RpciRhY19kZWxpbQotdG9vbGV4ZWNsaWJkaXIhJHRvb2xleGVjbGliZGlyJGFjX2RlbGltCi1MSUJPQkpTISRMSUJPQkpTJGFjX2RlbGltCi1MVExJQk9CSlMhJExUTElCT0JKUyRhY19kZWxpbQorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNlZCAicy8kYWNfY3JcJC8vOyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCitlbHNlCisgIGNhdAorZmkgPCAiJHRtcC9zdWJzMS5hd2siID4gIiR0bXAvc3Vicy5hd2siIFwKKyAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQogX0FDRU9GCiAKLSAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA3NjsgdGhlbgotICAgIGJyZWFrCi0gIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZWxzZQotICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCi0gIGZpCi1kb25lCi0KLWFjX2VvZj1gc2VkIC1uICcvXkNFT0ZbMC05XSokL3MvQ0VPRi8wL3AnIGNvbmYkJHN1YnMuc2VkYAotaWYgdGVzdCAtbiAiJGFjX2VvZiI7IHRoZW4KLSAgYWNfZW9mPWBlY2hvICIkYWNfZW9mIiB8IHNvcnQgLW5ydSB8IHNlZCAxcWAKLSAgYWNfZW9mPWBleHByICRhY19lb2YgKyAxYAotZmkKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKLWNhdCA+IlwkdG1wL3N1YnMtMi5zZWQiIDw8XENFT0YkYWNfZW9mCi0vQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiIGVuZAotX0FDRU9GCi1zZWQgJwotcy9bLFxcJl0vXFwmL2c7IHMvQC9AfCNfISFfI3wvZwotcy9eL3MsQC87IHMvIS9ALHwjXyEhXyN8LwotOm4KLXQgbgotcy8nIiRhY19kZWxpbSInJC8sZy87IHQKLXMvJC9cXC87IHAKLU47IHMvXi4qXG4vLzsgcy9bLFxcJl0vXFwmL2c7IHMvQC9AfCNfISFfI3wvZzsgYiBuCi0nID4+JENPTkZJR19TVEFUVVMgPGNvbmYkJHN1YnMuc2VkCi1ybSAtZiBjb25mJCRzdWJzLnNlZAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKLTplbmQKLXMvfCNfISFfI3wvL2cKLUNFT0YkYWNfZW9mCi1fQUNFT0YKLQotCiAjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKICMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCiAjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQpAQCAtMjM4NDIsMjAgKzEzNzI1LDEyOCBAQAogfScKIGZpCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgogCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0hFQURFUlMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgoraWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgorY2F0ID4iJHRtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8CitCRUdJTiB7CitfQUNFT0YKIAotZm9yIGFjX3RhZyBpbiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICA6TCAkQ09ORklHX0xJTktTICA6QyAkQ09ORklHX0NPTU1BTkRTCisjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYW4gYXdrIHNjcmlwdCBgZGVmaW5lcy5hd2snLCBlbWJlZGRlZCBhcworIyBoZXJlLWRvY3VtZW50IGluIGNvbmZpZy5zdGF0dXMsIHRoYXQgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50bworIyBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgorCisjIENyZWF0ZSBhIGRlbGltaXRlciBzdHJpbmcgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiBjb25mZGVmcy5oLCB0byBlYXNlCisjIGhhbmRsaW5nIG9mIGxvbmcgbGluZXMuCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIDo7IGRvCisgIGFjX3Q9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorICBpZiB0ZXN0IC16ICIkYWNfdCI7IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX0hFQURFUlMiICIkTElORU5PIiA1CisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorCisjIEZvciB0aGUgYXdrIHNjcmlwdCwgRCBpcyBhbiBhcnJheSBvZiBtYWNybyB2YWx1ZXMga2V5ZWQgYnkgbmFtZSwKKyMgbGlrZXdpc2UgUCBjb250YWlucyBtYWNybyBwYXJhbWV0ZXJzIGlmIGFueS4gIFByZXNlcnZlIGJhY2tzbGFzaAorIyBuZXdsaW5lIHNlcXVlbmNlcy4KKworYWNfd29yZF9yZT1bXyRhc19jcl9MZXR0ZXJzXVtfJGFzX2NyX2FsbnVtXSoKK3NlZCAtbiAnCitzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKK3QgcnNldAorOnJzZXQKK3MvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qLyAvCit0IGRlZgorZAorOmRlZgorcy9cXCQvLwordCBic25sCitzL1siXFxdL1xcJi9nCitzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKK0RbIlwxIl09IiBcMyIvcAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDIiL3AKK2QKKzpic25sCitzL1siXFxdL1xcJi9nCitzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKK0RbIlwxIl09IiBcM1xcXFxcXG4iXFwvcAordCBjb250CitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMlxcXFxcXG4iXFwvcAordCBjb250CitkCis6Y29udAorbgorcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IGNsZWFyCis6Y2xlYXIKK3MvXFwkLy8KK3QgYnNubGMKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvcAorZAorOmJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXFxcXFxuIlxcL3AKK2IgY29udAorJyA8Y29uZmRlZnMuaCB8IHNlZCAnCitzLyciJGFjX2RlbGltIicvIlxcXAorIi9nJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgZm9yIChrZXkgaW4gRCkgRF9pc19zZXRba2V5XSA9IDEKKyAgRlMgPSAiByIKK30KKy9eW1x0IF0qI1tcdCBdKihkZWZpbmV8dW5kZWYpW1x0IF0rJGFjX3dvcmRfcmUoW1x0IChdfFwkKS8geworICBsaW5lID0gXCQgMAorICBzcGxpdChsaW5lLCBhcmcsICIgIikKKyAgaWYgKGFyZ1sxXSA9PSAiIyIpIHsKKyAgICBkZWZ1bmRlZiA9IGFyZ1syXQorICAgIG1hYzEgPSBhcmdbM10KKyAgfSBlbHNlIHsKKyAgICBkZWZ1bmRlZiA9IHN1YnN0cihhcmdbMV0sIDIpCisgICAgbWFjMSA9IGFyZ1syXQorICB9CisgIHNwbGl0KG1hYzEsIG1hYzIsICIoIikgIykKKyAgbWFjcm8gPSBtYWMyWzFdCisgIHByZWZpeCA9IHN1YnN0cihsaW5lLCAxLCBpbmRleChsaW5lLCBkZWZ1bmRlZikgLSAxKQorICBpZiAoRF9pc19zZXRbbWFjcm9dKSB7CisgICAgIyBQcmVzZXJ2ZSB0aGUgd2hpdGUgc3BhY2Ugc3Vycm91bmRpbmcgdGhlICIjIi4KKyAgICBwcmludCBwcmVmaXggImRlZmluZSIsIG1hY3JvIFBbbWFjcm9dIERbbWFjcm9dCisgICAgbmV4dAorICB9IGVsc2UgeworICAgICMgUmVwbGFjZSAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IgZXhhbXBsZSwKKyAgICAjIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisgICAgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCisgICAgaWYgKGRlZnVuZGVmID09ICJ1bmRlZiIpIHsKKyAgICAgIHByaW50ICIvKiIsIHByZWZpeCBkZWZ1bmRlZiwgbWFjcm8sICIqLyIKKyAgICAgIG5leHQKKyAgICB9CisgIH0KK30KK3sgcHJpbnQgfQorX0FDQVdLCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBzZXR1cCBjb25maWcgaGVhZGVycyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitmaSAjIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyIKKworCitldmFsIHNldCBYICIgIDpGICRDT05GSUdfRklMRVMgIDpIICRDT05GSUdfSEVBREVSUyAgOkwgJENPTkZJR19MSU5LUyAgOkMgJENPTkZJR19DT01NQU5EUyIKK3NoaWZ0Citmb3IgYWNfdGFnCiBkbwogICBjYXNlICRhY190YWcgaW4KICAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CiAgIGVzYWMKICAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KICAgOltGSExdKjoqKTs7Ci0gIDpMKiB8IDpDKjoqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJbnZhbGlkIHRhZyAkYWNfdGFnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBJbnZhbGlkIHRhZyAkYWNfdGFnLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OwogICA6W0ZIXS0pIGFjX3RhZz0tOi07OwogICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OwogICBlc2FjCkBAIC0yMzg4MywyNiArMTM4NzQsMzQgQEAKIAkgICBbXFwvJF0qKSBmYWxzZTs7CiAJICAgKikgdGVzdCAtZiAiJHNyY2Rpci8kYWNfZiIgJiYgYWNfZj0iJHNyY2Rpci8kYWNfZiI7OwogCSAgIGVzYWMgfHwKLQkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkYWNfZiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkYWNfZiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisJICAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7CiAgICAgICBlc2FjCi0gICAgICBhY19maWxlX2lucHV0cz0iJGFjX2ZpbGVfaW5wdXRzICRhY19mIgorICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworICAgICAgYXNfZm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKICAgICBkb25lCiAKICAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAogICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKICAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLwotICAgIGNvbmZpZ3VyZV9pbnB1dD0iR2VuZXJhdGVkIGZyb20gImBJRlM9OgotCSAgZWNobyAkKiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnYCIgYnkgY29uZmlndXJlLiIKKyAgICBjb25maWd1cmVfaW5wdXQ9J0dlbmVyYXRlZCBmcm9tICdgCisJICAkYXNfZWNobyAiJCoiIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZycKKwlgJyBieSBjb25maWd1cmUuJwogICAgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KICAgICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAkY29uZmlndXJlX2lucHV0IgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CiAgICAgZmkKKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorICAgICpcJiogfCAqXHwqIHwgKlxcKiApCisgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8CisgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisgICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CisgICAgZXNhYwogCiAgICAgY2FzZSAkYWNfdGFnIGluCi0gICAgKjotOiogfCAqOi0pIGNhdCA+IiR0bXAvc3RkaW4iOzsKKyAgICAqOi06KiB8ICo6LSkgY2F0ID4iJHRtcC9zdGRpbiIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1IDs7CiAgICAgZXNhYwogICAgIDs7CiAgIGVzYWMKQEAgLTIzOTEyLDcgKzEzOTExLDcgQEAKIAkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKIAkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKIAkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFjX2ZpbGUiIHwKKyRhc19lY2hvIFgiJGFjX2ZpbGUiIHwKICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewogCSAgICBzLy9cMS8KIAkgICAgcQpAQCAtMjM5MzAsNTUgKzEzOTI5LDE1IEBACiAJICAgIHEKIAkgIH0KIAkgIHMvLiovLi87IHEnYAotICB7IGFzX2Rpcj0iJGFjX2RpciIKLSAgY2FzZSAkYXNfZGlyIGluICMoCi0gIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKLSAgZXNhYwotICB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7ICRhc19ta2Rpcl9wICYmIG1rZGlyIC1wICIkYXNfZGlyIjsgfSB8fCB7Ci0gICAgYXNfZGlycz0KLSAgICB3aGlsZSA6OyBkbwotICAgICAgY2FzZSAkYXNfZGlyIGluICMoCi0gICAgICAqXCcqKSBhc19xZGlyPWBlY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMoCi0gICAgICAqKSBhc19xZGlyPSRhc19kaXI7OwotICAgICAgZXNhYwotICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKLSAgICBkb25lCi0gICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgotICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCiAgIGFjX2J1aWxkZGlyPS4KIAogY2FzZSAiJGFjX2RpciIgaW4KIC4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OwogKikKLSAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAogICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcl9zdWI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwvLi4sZztzLC8sLCdgCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAogICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCiAgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKICAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CkBAIC0yNDAyMywxMiArMTM5ODIsMTIgQEAKICAgZXNhYwogX0FDRU9GCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogIyBJZiB0aGUgdGVtcGxhdGUgZG9lcyBub3Qga25vdyBhYm91dCBkYXRhcm9vdGRpciwgZXhwYW5kIGl0LgogIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCiBhY19kYXRhcm9vdGRpcl9oYWNrPTsgYWNfZGF0YXJvb3RkaXJfc2Vlbj0KLQotY2FzZSBgc2VkIC1uICcvZGF0YXJvb3RkaXIvIHsKK2FjX3NlZF9kYXRhcm9vdD0nCisvZGF0YXJvb3RkaXIvIHsKICAgcAogICBxCiB9CkBAIC0yNDAzNiwzNiArMTM5OTUsMzcgQEAKIC9AZG9jZGlyQC9wCiAvQGluZm9kaXJAL3AKIC9AbG9jYWxlZGlyQC9wCi0vQG1hbmRpckAvcAotJyAkYWNfZmlsZV9pbnB1dHNgIGluCisvQG1hbmRpckAvcCcKK2Nhc2UgYGV2YWwgInNlZCAtbiBcIlwkYWNfc2VkX2RhdGFyb290XCIgJGFjX2ZpbGVfaW5wdXRzImAgaW4KICpkYXRhcm9vdGRpciopIGFjX2RhdGFyb290ZGlyX3NlZW49eWVzOzsKICpAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJAKnwqQG1hbmRpckAqKQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KIF9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogICBhY19kYXRhcm9vdGRpcl9oYWNrPScKICAgcyZAZGF0YWRpckAmJGRhdGFkaXImZwogICBzJkBkb2NkaXJAJiRkb2NkaXImZwogICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCiAgIHMmQGxvY2FsZWRpckAmJGxvY2FsZWRpciZnCiAgIHMmQG1hbmRpckAmJG1hbmRpciZnCi0gICAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKIGVzYWMKIF9BQ0VPRgogCiAjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCiAjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KICMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi0gIHNlZCAiJGFjX3Zwc3ViCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX3NlZF9leHRyYT0iJGFjX3Zwc3ViCiAkZXh0cmFzdWIKIF9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiA6dAogL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgotcyZAY29uZmlndXJlX2lucHV0QCYkY29uZmlndXJlX2lucHV0Jjt0IHQKK3N8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKIHMmQHRvcF9idWlsZGRpckAmJGFjX3RvcF9idWlsZGRpcl9zdWImO3QgdAorcyZAdG9wX2J1aWxkX3ByZWZpeEAmJGFjX3RvcF9idWlsZF9wcmVmaXgmO3QgdAogcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKIHMmQGFic19zcmNkaXJAJiRhY19hYnNfc3JjZGlyJjt0IHQKIHMmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKQEAgLTI0MDc2LDEzNSArMTQwMzYsNjUgQEAKIHMmQElOU1RBTExAJiRhY19JTlNUQUxMJjt0IHQKIHMmQE1LRElSX1BAJiRhY19NS0RJUl9QJjt0IHQKICRhY19kYXRhcm9vdGRpcl9oYWNrCi0iICRhY19maWxlX2lucHV0cyB8IHNlZCAtZiAiJHRtcC9zdWJzLTEuc2VkIiB8IHNlZCAtZiAiJHRtcC9zdWJzLTIuc2VkIiA+JHRtcC9vdXQKKyIKK2V2YWwgc2VkIFwiXCRhY19zZWRfZXh0cmFcIiAiJGFjX2ZpbGVfaW5wdXRzIiB8ICRBV0sgLWYgIiR0bXAvc3Vicy5hd2siID4kdG1wL291dCBcCisgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogCiB0ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgogICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIkdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgogICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCiB3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKIHdoaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mMjt9CiAKICAgcm0gLWYgIiR0bXAvc3RkaW4iCiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgLSkgY2F0ICIkdG1wL291dCI7IHJtIC1mICIkdG1wL291dCI7OwotICAqKSBybSAtZiAiJGFjX2ZpbGUiOyBtdiAiJHRtcC9vdXQiICRhY19maWxlOzsKLSAgZXNhYworICAtKSBjYXQgIiR0bXAvb3V0IiAmJiBybSAtZiAiJHRtcC9vdXQiOzsKKyAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJHRtcC9vdXQiICIkYWNfZmlsZSI7OworICBlc2FjIFwKKyAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CiAgOzsKICAgOkgpCiAgICMKICAgIyBDT05GSUdfSEVBREVSCiAgICMKLV9BQ0VPRgotCi0jIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYSBzZWQgc2NyaXB0IGBjb25mdGVzdC5kZWZpbmVzJywgdGhhdAotIyBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCi1ybSAtZiBjb25mdGVzdC5kZWZpbmVzIGNvbmZ0ZXN0LnRhaWwKLSMgRmlyc3QsIGFwcGVuZCBhIHNwYWNlIHRvIGV2ZXJ5IHVuZGVmL2RlZmluZSBsaW5lLCB0byBlYXNlIG1hdGNoaW5nLgotZWNobyAncy8kLyAvJyA+Y29uZnRlc3QuZGVmaW5lcwotIyBUaGVuLCBwcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QsIG9yIGluCi0jIGFuIHVucXVvdGVkIGhlcmUgZG9jdW1lbnQsIGluIGNvbmZpZy5zdGF0dXMuICBJZiBzb21lIG1hY3JvcyB3ZXJlCi0jIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgI2RlZmluZXMgZm9yIHRoZSBzYW1lCi0jIHN5bWJvbCwgd2hpY2ggaXMgdXNlbGVzcy4gIEJ1dCBkbyBub3Qgc29ydCB0aGVtLCBzaW5jZSB0aGUgbGFzdAotIyBBQ19ERUZJTkUgbXVzdCBiZSBob25vcmVkLgotYWNfd29yZF9yZT1bXyRhc19jcl9MZXR0ZXJzXVtfJGFzX2NyX2FsbnVtXSoKLSMgVGhlc2Ugc2VkIGNvbW1hbmRzIGFyZSBwYXNzZWQgdG8gc2VkIGFzICJBIE5BTUUgQiBQQVJBTVMgQyBWQUxVRSBEIiwgd2hlcmUKLSMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQsIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KLSMgUEFSQU1TIGlzIHRoZSBwYXJhbWV0ZXIgbGlzdCBpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi0taW4gbW9zdCBjYXNlcywgaXQncwotIyBqdXN0IGFuIGVtcHR5IHN0cmluZy4KLWFjX2RBPSdzLF5cXChbCSAjXSpcXClbXgkgXSpcXChbCSBdKicKLWFjX2RCPSdcXClbCSAoXS4qLFxcMWRlZmluZVxcMicKLWFjX2RDPScgJwotYWNfZEQ9JyAsJwotCi11bmlxIGNvbmZkZWZzLmggfAotICBzZWQgLW4gJwotCXQgcnNldAotCTpyc2V0Ci0Jcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovLwotCXQgb2sKLQlkCi0JOm9rCi0Jcy9bXFwmLF0vXFwmL2cKLQlzL15cKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvICciJGFjX2RBIidcMSciJGFjX2RCIidcMiciJHthY19kQ30iJ1wzJyIkYWNfZEQiJy9wCi0Jcy9eXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpLyciJGFjX2RBIidcMSciJGFjX2RCJGFjX2RDIidcMiciJGFjX2REIicvcAotICAnID4+Y29uZnRlc3QuZGVmaW5lcwotCi0jIFJlbW92ZSB0aGUgc3BhY2UgdGhhdCB3YXMgYXBwZW5kZWQgdG8gZWFzZSBtYXRjaGluZy4KLSMgVGhlbiByZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgotIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAotIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCi0jIChUaGUgcmVnZXhwIGNhbiBiZSBzaG9ydCwgc2luY2UgdGhlIGxpbmUgY29udGFpbnMgZWl0aGVyICNkZWZpbmUgb3IgI3VuZGVmLikKLWVjaG8gJ3MvICQvLwotcyxeWwkgI10qdS4qLC8qICYgKi8sJyA+PmNvbmZ0ZXN0LmRlZmluZXMKLQotIyBCcmVhayB1cCBjb25mdGVzdC5kZWZpbmVzOgotYWNfbWF4X3NlZF9saW5lcz01MAotCi0jIEZpcnN0IHNlZCBjb21tYW5kIGlzOgkgc2VkIC1mIGRlZmluZXMuc2VkICRhY19maWxlX2lucHV0cyA+IiR0bXAvb3V0MSIKLSMgU2Vjb25kIG9uZSBpczoJIHNlZCAtZiBkZWZpbmVzLnNlZCAiJHRtcC9vdXQxIiA+IiR0bXAvb3V0MiIKLSMgVGhpcmQgb25lIHdpbGwgYmU6CSBzZWQgLWYgZGVmaW5lcy5zZWQgIiR0bXAvb3V0MiIgPiIkdG1wL291dDEiCi0jIGV0IGNldGVyYS4KLWFjX2luPSckYWNfZmlsZV9pbnB1dHMnCi1hY19vdXQ9JyIkdG1wL291dDEiJwotYWNfbnh0PSciJHRtcC9vdXQyIicKLQotd2hpbGUgOgotZG8KLSAgIyBXcml0ZSBhIGhlcmUgZG9jdW1lbnQ6Ci0gICAgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKLSAgICAjIEZpcnN0LCBjaGVjayB0aGUgZm9ybWF0IG9mIHRoZSBsaW5lOgotICAgIGNhdCA+IlwkdG1wL2RlZmluZXMuc2VkIiA8PFxcQ0VPRgotL15bCSBdKiNbCSBdKnVuZGVmWwkgXVsJIF0qJGFjX3dvcmRfcmVbCSBdKlwkL2IgZGVmCi0vXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qJGFjX3dvcmRfcmVbKAkgXS9iIGRlZgotYgotOmRlZgotX0FDRU9GCi0gIHNlZCAke2FjX21heF9zZWRfbGluZXN9cSBjb25mdGVzdC5kZWZpbmVzID4+JENPTkZJR19TVEFUVVMKLSAgZWNobyAnQ0VPRgotICAgIHNlZCAtZiAiJHRtcC9kZWZpbmVzLnNlZCInICIkYWNfaW4gPiRhY19vdXQiID4+JENPTkZJR19TVEFUVVMKLSAgYWNfaW49JGFjX291dDsgYWNfb3V0PSRhY19ueHQ7IGFjX254dD0kYWNfaW4KLSAgc2VkIDEsJHthY19tYXhfc2VkX2xpbmVzfWQgY29uZnRlc3QuZGVmaW5lcyA+Y29uZnRlc3QudGFpbAotICBncmVwIC4gY29uZnRlc3QudGFpbCA+L2Rldi9udWxsIHx8IGJyZWFrCi0gIHJtIC1mIGNvbmZ0ZXN0LmRlZmluZXMKLSAgbXYgY29uZnRlc3QudGFpbCBjb25mdGVzdC5kZWZpbmVzCi1kb25lCi1ybSAtZiBjb25mdGVzdC5kZWZpbmVzIGNvbmZ0ZXN0LnRhaWwKLQotZWNobyAiYWNfcmVzdWx0PSRhY19pbiIgPj4kQ09ORklHX1NUQVRVUwotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCiAgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICBlY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgPiIkdG1wL2NvbmZpZy5oIgotICAgIGNhdCAiJGFjX3Jlc3VsdCIgPj4iJHRtcC9jb25maWcuaCIKLSAgICBpZiBkaWZmICRhY19maWxlICIkdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1Ci1lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICB7CisgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiR0bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgorICAgIH0gPiIkdG1wL2NvbmZpZy5oIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiR0bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQogICAgIGVsc2UKLSAgICAgIHJtIC1mICRhY19maWxlCi0gICAgICBtdiAiJHRtcC9jb25maWcuaCIgJGFjX2ZpbGUKKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgICAgIG12ICIkdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKKwl8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKICAgICBmaQogICBlbHNlCi0gICAgZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iCi0gICAgY2F0ICIkYWNfcmVzdWx0IgorICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJHRtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CiAgIGZpCi0gIHJtIC1mICIkdG1wL291dDEyIgotIyBDb21wdXRlICRhY19maWxlJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorIyBDb21wdXRlICIkYWNfZmlsZSIncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fYXJnPSIkYWNfZmlsZSIKIF9hbV9zdGFtcF9jb3VudD0xCiBmb3IgX2FtX2hlYWRlciBpbiAkY29uZmlnX2hlYWRlcnMgOjsgZG8KICAgY2FzZSAkX2FtX2hlYWRlciBpbgotICAgICRhY19maWxlIHwgJGFjX2ZpbGU6KiApCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKICAgICAgIGJyZWFrIDs7CiAgICAgKiApCiAgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CiAgIGVzYWMKIGRvbmUKLWVjaG8gInRpbWVzdGFtcCBmb3IgJGFjX2ZpbGUiID5gJGFzX2Rpcm5hbWUgLS0gJGFjX2ZpbGUgfHwKLSRhc19leHByIFgkYWNfZmlsZSA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYJGFjX2ZpbGUgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCRhY19maWxlIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgkYWNfZmlsZSA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLWVjaG8gWCRhY19maWxlIHwKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gJGFzX2Rpcm5hbWUgLS0gIiRfYW1fYXJnIiB8fAorJGFzX2V4cHIgWCIkX2FtX2FyZyIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRfYW1fYXJnIiB8CiAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKIAkgICAgcy8vXDEvCiAJICAgIHEKQEAgLTI0MjI4LDUyICsxNDExOCw2NyBAQAogICAjIENPTkZJR19MSU5LCiAgICMKIAotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsaW5raW5nICRzcmNkaXIvJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGxpbmtpbmcgJHNyY2Rpci8kYWNfc291cmNlIHRvICRhY19maWxlIiA+JjY7fQorICBpZiB0ZXN0ICIkYWNfc291cmNlIiA9ICIkYWNfZmlsZSIgJiYgdGVzdCAiJHNyY2RpciIgPSAnLic7IHRoZW4KKyAgICA6CisgIGVsc2UKKyAgICAjIFByZWZlciB0aGUgZmlsZSBmcm9tIHRoZSBzb3VyY2UgdHJlZSBpZiBuYW1lcyBhcmUgaWRlbnRpY2FsLgorICAgIGlmIHRlc3QgIiRhY19zb3VyY2UiID0gIiRhY19maWxlIiB8fCB0ZXN0ICEgLXIgIiRhY19zb3VyY2UiOyB0aGVuCisgICAgICBhY19zb3VyY2U9JHNyY2Rpci8kYWNfc291cmNlCisgICAgZmkKIAotICBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3NvdXJjZSI7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkc3JjZGlyLyRhY19zb3VyY2U6IGZpbGUgbm90IGZvdW5kIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRzcmNkaXIvJGFjX3NvdXJjZTogZmlsZSBub3QgZm91bmQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxpbmtpbmcgJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsaW5raW5nICRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mNjt9CisKKyAgICBpZiB0ZXN0ICEgLXIgIiRhY19zb3VyY2UiOyB0aGVuCisgICAgICBhc19mbl9lcnJvciAiJGFjX3NvdXJjZTogZmlsZSBub3QgZm91bmQiICIkTElORU5PIiA1CisgICAgZmkKKyAgICBybSAtZiAiJGFjX2ZpbGUiCisKKyAgICAjIFRyeSBhIHJlbGF0aXZlIHN5bWxpbmssIHRoZW4gYSBoYXJkIGxpbmssIHRoZW4gYSBjb3B5LgorICAgIGNhc2UgJHNyY2RpciBpbgorICAgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX3JlbF9zb3VyY2U9JGFjX3NvdXJjZSA7OworCSopIGFjX3JlbF9zb3VyY2U9JGFjX3RvcF9idWlsZF9wcmVmaXgkYWNfc291cmNlIDs7CisgICAgZXNhYworICAgIGxuIC1zICIkYWNfcmVsX3NvdXJjZSIgIiRhY19maWxlIiAyPi9kZXYvbnVsbCB8fAorICAgICAgbG4gIiRhY19zb3VyY2UiICIkYWNfZmlsZSIgMj4vZGV2L251bGwgfHwKKyAgICAgIGNwIC1wICIkYWNfc291cmNlIiAiJGFjX2ZpbGUiIHx8CisgICAgICBhc19mbl9lcnJvciAiY2Fubm90IGxpbmsgb3IgY29weSAkYWNfc291cmNlIHRvICRhY19maWxlIiAiJExJTkVOTyIgNQogICBmaQotICBybSAtZiAiJGFjX2ZpbGUiCi0KLSAgIyBUcnkgYSByZWxhdGl2ZSBzeW1saW5rLCB0aGVuIGEgaGFyZCBsaW5rLCB0aGVuIGEgY29weS4KLSAgY2FzZSAkc3JjZGlyIGluCi0gIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX3JlbF9zb3VyY2U9JHNyY2Rpci8kYWNfc291cmNlIDs7Ci0gICAgICAqKSBhY19yZWxfc291cmNlPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2Rpci8kYWNfc291cmNlIDs7Ci0gIGVzYWMKLSAgbG4gLXMgIiRhY19yZWxfc291cmNlIiAiJGFjX2ZpbGUiIDI+L2Rldi9udWxsIHx8Ci0gICAgbG4gIiRzcmNkaXIvJGFjX3NvdXJjZSIgIiRhY19maWxlIiAyPi9kZXYvbnVsbCB8fAotICAgIGNwIC1wICIkc3JjZGlyLyRhY19zb3VyY2UiICIkYWNfZmlsZSIgfHwKLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgbGluayBvciBjb3B5ICRzcmNkaXIvJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgbGluayBvciBjb3B5ICRzcmNkaXIvJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQogIDs7Ci0gIDpDKSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjUKLWVjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjY7fQorICA6QykgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KICA7OwogICBlc2FjCiAKIAogICBjYXNlICRhY19maWxlJGFjX21vZGUgaW4KLSAgICAiZGVwZmlsZXMiOkMpIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IGZvciBtZiBpbiAkQ09ORklHX0ZJTEVTOyBkbwotICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgotICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAotICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgotICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0Ci0gICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgotICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcwotICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgotICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQotICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KLSAgaWYgc2VkIDEwcSAiJG1mIiB8IGdyZXAgJ14jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UnID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBkaXJwYXJ0PWAkYXNfZGlybmFtZSAtLSAiJG1mIiB8fAorICAgICJkZXBmaWxlcyI6QykgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgeworICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCisgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorICBjYXNlICRDT05GSUdfRklMRVMgaW4KKyAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisgIGVzYWMKKyAgc2hpZnQKKyAgZm9yIG1mCisgIGRvCisgICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGRpcnBhcnQ9YCRhc19kaXJuYW1lIC0tICIkbWYiIHx8CiAkYXNfZXhwciBYIiRtZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKIAkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCiAJIFgiJG1mIiA6ICdYXCgvL1wpJCcgXHwgXAogCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJG1mIiB8CiskYXNfZWNobyBYIiRtZiIgfAogICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CiAJICAgIHMvL1wxLwogCSAgICBxCkBAIC0yNDI5MSwzMyArMTQxOTYsMzMgQEAKIAkgICAgcQogCSAgfQogCSAgcy8uKi8uLzsgcSdgCi0gIGVsc2UKLSAgICBjb250aW51ZQotICBmaQotICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQotICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCi0gIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCi0gIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCi0gIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAotICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKLSAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKLSAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKLSAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAotICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCi0gICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQotICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQotICAjIGV4cGFuc2lvbi4KLSAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCi0gICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCi0gICAgICAgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCi0gICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCi0gICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCi0gICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRmaWxlIiB8fAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAorICAgIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCisgICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKyAgICAjIGV4cGFuc2lvbi4KKyAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKyAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgICBmZGlyPWAkYXNfZGlybmFtZSAtLSAiJGZpbGUiIHx8CiAkYXNfZXhwciBYIiRmaWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAogCSBYIiRmaWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAogCSBYIiRmaWxlIiA6ICdYXCgvL1wpJCcgXHwgXAogCSBYIiRmaWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkZmlsZSIgfAorJGFzX2VjaG8gWCIkZmlsZSIgfAogICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CiAJICAgIHMvL1wxLwogCSAgICBxCkBAIC0yNDMzNSw1MSArMTQyNDAsNjQ3IEBACiAJICAgIHEKIAkgIH0KIAkgIHMvLiovLi87IHEnYAotICAgIHsgYXNfZGlyPSRkaXJwYXJ0LyRmZGlyCi0gIGNhc2UgJGFzX2RpciBpbiAjKAotICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7Ci0gIGVzYWMKLSAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgewotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgOjsgZG8KLSAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAotICAgICAgKlwnKikgYXNfcWRpcj1gZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjKAotICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKLSAgICAgIGVzYWMKLSAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpW14vXS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXCkuKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICBzLy4qLy4vOyBxJ2AKLSAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXI7IGFzX2ZuX21rZGlyX3AKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKICAgICBkb25lCi0gICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgotICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQotICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCi0gICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCiAgIGRvbmUKLWRvbmUKK30KKyA7OworICAgICJsaWJ0b29sIjpDKQorCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICAgIGZpCisKKyAgICBjZmdmaWxlPSIke29maWxlfVQiCisgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKKyAgICAkUk0gIiRjZmdmaWxlIgorCisgICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjISAkU0hFTEwKKworIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPSIiCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCisKKyMgV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkPworbWFjcm9fdmVyc2lvbj0kbWFjcm9fdmVyc2lvbgorbWFjcm9fcmV2aXNpb249JG1hY3JvX3JldmlzaW9uCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCitidWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYworCisjIFdoYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkLgorcGljX21vZGU9JHBpY19tb2RlCisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAoraG9zdF9vcz0kaG9zdF9vcworCisjIFRoZSBidWlsZCBzeXN0ZW0uCitidWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK2J1aWxkPSRidWlsZAorYnVpbGRfb3M9JGJ1aWxkX29zCisKKyMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KK1NFRD0kbHRfU0VECisKKyMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCitYc2VkPSJcJFNFRCAtZSAxcy9eWC8vIgorCisjIEEgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzLgorR1JFUD0kbHRfR1JFUAorCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9JGx0X0VHUkVQCisKKyMgQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyLgorRkdSRVA9JGx0X0ZHUkVQCisKKyMgQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIuCitOTT0kbHRfTk0KKworIyBXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KK21heF9jbWRfbGVuPSRtYXhfY21kX2xlbgorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0kYWNfb2JqZXh0CisKKyMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgorZXhlZXh0PSRleGVleHQKKworIyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiLgorbHRfdW5zZXQ9JGx0X3Vuc2V0CisKKyMgdHVybiBzcGFjZXMgaW50byBuZXdsaW5lcy4KK1NQMk5MPSRsdF9sdF9TUDJOTAorCisjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCitOTDJTUD0kbHRfbHRfTkwyU1AKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKKworIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KK09CSkRVTVA9JGx0X09CSkRVTVAKKworIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorCisjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisKKyMgVGhlIGFyY2hpdmVyLgorQVI9JGx0X0FSCitBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKworIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KK1NUUklQPSRsdF9TVFJJUAorCisjIENvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBBIEMgY29tcGlsZXIuCitMVENDPSRsdF9DQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfQ0ZMQUdTCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCitnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCitTSEVMTD0kbHRfU0hFTEwKKworIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCitFQ0hPPSRsdF9FQ0hPCisKKyMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIi4KK01BR0lDX0NNRD0kTUFHSUNfQ01ECisKKyMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CituZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KK0RTWU1VVElMPSRsdF9EU1lNVVRJTAorCisjIFRvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYLgorTk1FRElUPSRsdF9OTUVESVQKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYLgorTElQTz0kbHRfTElQTworCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYLgorT1RPT0w9JGx0X09UT09MCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjQuCitPVE9PTDY0PSRsdF9PVE9PTDY0CisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSRsaWJleHQKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KK3NocmV4dF9jbWRzPSRsdF9zaHJleHRfY21kcworCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9JGx0X3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rCisKKyMgRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgorZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCisKKyMgQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisjIG5vdCBzaG93bi4KK2ZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAorCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicworCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCitvbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgorc3RyaXBsaWI9JGx0X3N0cmlwbGliCisKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X0xECisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHMKKworIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgorYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjCisKKyMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCitjb21waWxlcl9uZWVkc19vYmplY3Q9JGx0X2NvbXBpbGVyX25lZWRzX29iamVjdAorCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHMKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHMKK21vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzCisKKyMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgord2l0aF9nbnVfbGQ9JGx0X3dpdGhfZ251X2xkCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5CisjIGR1cmluZyBsaW5raW5nLiAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0CisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0wKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3ZhcgorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWMKKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKworIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCitsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisKKyMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KK2ZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KK3ByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgorCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKworbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgY2FzZSAkeHNpX3NoZWxsIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICBlc2FjCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKK30KKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Cit9CisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorfQorCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworICBlc2FjCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKK30KKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorfQorCitfTFRfRU9GCisgICAgOzsKKyAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KK2Z1bmNfZGlybmFtZSAoKQoreworICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRkaXJuYW1lImAKKyAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICBlbHNlCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICBmaQorfQorCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorfQorCisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgY2FzZSAkezJ9IGluCisgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezN9IiBcCisgICAgICAgICAgIHwgJFhzZWQgLWUgInMlXiR7MX0lJSIgLWUgInMlXFxcXCR7Mn1cJCUlImA7OworICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHszfSIgXAorICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJSR7Mn1cJCUlImA7OworICBlc2FjCit9CisKKyMgc2VkIHNjcmlwdHM6CitteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworCisjIGZ1bmNfb3B0X3NwbGl0CitmdW5jX29wdF9zcGxpdCAoKQoreworICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX29wdCJgCisgIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbXlfc2VkX2xvbmdfYXJnImAKK30KKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbG8ybyJgCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgJ3MvXC5bXi5dKiQvLmxvLydgCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKK30KKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKK30KKworX0xUX0VPRgorZXNhYworCitjYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKyAgeWVzKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiQxKz1cJDIiCit9CitfTFRfRU9GCisgICAgOzsKKyAgKikKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICBldmFsICIkMT1cJCQxXCQyIgorfQorCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisKKyAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCisKICA7OwogICAgICJpbmNsdWRlIjpDKSB0ZXN0IC1kIGluY2x1ZGUgfHwgbWtkaXIgaW5jbHVkZSA7OwogICAgICJzcmMiOkMpCkBAIC0yNDM5MSwxMSArMTQ4OTIsMTMgQEAKIGRvbmUgIyBmb3IgYWNfdGFnCiAKIAoteyAoZXhpdCAwKTsgZXhpdCAwOyB9Cithc19mbl9leGl0IDAKIF9BQ0VPRgotY2htb2QgK3ggJENPTkZJR19TVEFUVVMKIGFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCiAKK3Rlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8CisgIGFzX2ZuX2Vycm9yICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCiAKICMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KICMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgpAQCAtMjQ0MTUsNiArMTQ5MTgsMTAgQEAKICAgZXhlYyA1Pj5jb25maWcubG9nCiAgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCiAgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgotICAkYWNfY3Nfc3VjY2VzcyB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgYXNfZm5fZXhpdCAkPworZmkKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyIgJiYgdGVzdCAiJGVuYWJsZV9vcHRpb25fY2hlY2tpbmciICE9IG5vOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjI7fQogZmkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZS5hYwppbmRleCA5NDcwNTM2Li44N2M2M2UxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZS5hYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZS5hYwpAQCAtMyw5ICszLDkgQEAKICMgZmlsZSBmcm9tIGxpYmZmaSAtIHNsaWdodGx5IHBhdGNoZWQgZm9yIGN0eXBlcwogIwogCi1BQ19QUkVSRVEoMi41OSkKK0FDX1BSRVJFUSgyLjYzKQogCi1BQ19JTklUKFtsaWJmZmldLCBbMy4wLjVdLCBbaHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbF0pCitBQ19JTklUKFtsaWJmZmldLCBbMy4wLjEwcmMwXSwgW2h0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWxdKQogQUNfQ09ORklHX0hFQURFUlMoW2ZmaWNvbmZpZy5oXSkKIAogQUNfQ0FOT05JQ0FMX1NZU1RFTQpAQCAtMjMsNiArMjMsNyBAQAogbTRfcmVuYW1lKFtfQUNfQVJHX1ZBUl9QUkVDSU9VU10sW3JlYWxfUFJFQ0lPVVNdKQogbTRfZGVmaW5lKFtfQUNfQVJHX1ZBUl9QUkVDSU9VU10sW10pCiBBQ19QUk9HX0NDCittNF91bmRlZmluZShbX0FDX0FSR19WQVJfUFJFQ0lPVVNdKQogbTRfcmVuYW1lKFtyZWFsX1BSRUNJT1VTXSxbX0FDX0FSR19WQVJfUFJFQ0lPVVNdKQogCiBBQ19TVUJTVChDRkxBR1MpCkBAIC0zMCw2ICszMSw3IEBACiBBTV9QUk9HX0FTCiBBTV9QUk9HX0NDX0NfTwogQUNfUFJPR19MSUJUT09MCitBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCiAKIEFNX01BSU5UQUlORVJfTU9ERQogCkBAIC01MiwxMCArNTQsMTggQEAKIAlUQVJHRVQ9QVJNOyBUQVJHRVRESVI9YXJtCiAJOzsKIAotICBhbWQ2NC0qLWZyZWVic2QqKQorICBhbWQ2NC0qLWZyZWVic2QqIHwgYW1kNjQtKi1vcGVuYnNkKikKIAlUQVJHRVQ9WDg2XzY0OyBUQVJHRVRESVI9eDg2CiAgIAk7OwogCisgIGFtZDY0LSotZnJlZWJzZCopCisJVEFSR0VUPVg4Nl82NDsgVEFSR0VURElSPXg4NgorCTs7CisKKyAgYXZyMzIqLSotKikKKwlUQVJHRVQ9QVZSMzI7IFRBUkdFVERJUj1hdnIzMgorCTs7CisKICAgY3Jpcy0qLSopCiAJVEFSR0VUPUxJQkZGSV9DUklTOyBUQVJHRVRESVI9Y3JpcwogCTs7CkBAIC03NCwxMSArODQsMTMgQEAKIAlUQVJHRVQ9UEFfSFBVWDsgVEFSR0VURElSPXBhCiAJOzsKIAotICBpMzg2LSotZnJlZWJzZCogfCBpMzg2LSotb3BlbmJzZCopCisgIGk/ODYtKi1mcmVlYnNkKiB8IGk/ODYtKi1vcGVuYnNkKikKIAlUQVJHRVQ9WDg2X0ZSRUVCU0Q7IFRBUkdFVERJUj14ODYKIAk7OwogICBpPzg2LXdpbjMyKiB8IGk/ODYtKi1jeWd3aW4qIHwgaT84Ni0qLW1pbmd3KikKIAlUQVJHRVQ9WDg2X1dJTjMyOyBUQVJHRVRESVI9eDg2CisJIyBBbGwgbWluZ3cvY3lnd2luL3dpbjMyIGJ1aWxkcyByZXF1aXJlIHRoaXMgZm9yIHNoYXJlZGxpYgorCUFNX0xUTERGTEFHUz0iLW5vLXVuZGVmaW5lZCIKIAk7OwogICBpPzg2LSotZGFyd2luKikKIAlUQVJHRVQ9WDg2X0RBUldJTjsgVEFSR0VURElSPXg4NgpAQCAtMTA5LDcgKzEyMSw5IEBACiAJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKIAk7OwogICBtaXBzKi0qLWxpbnV4KikKLQlUQVJHRVQ9TUlQU19MSU5VWDsgVEFSR0VURElSPW1pcHMKKwkjIFN1cHBvcnQgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3IgTmV3QUJJLgorCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19taXBzNjQpJworCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCiAJOzsKIAogICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKQEAgLTE0OSwxNCArMTYzLDE4IEBACiAgIHg4Nl82NC0qLWRhcndpbiopCiAJVEFSR0VUPVg4Nl9EQVJXSU47IFRBUkdFVERJUj14ODYKIAk7OworCiAgIHg4Nl82NC0qLWN5Z3dpbiogfCB4ODZfNjQtKi1taW5ndyopCisJVEFSR0VUPVg4Nl9XSU42NDsgVEFSR0VURElSPXg4NgogCTs7CisKICAgeDg2XzY0LSotKikKIAlUQVJHRVQ9WDg2XzY0OyBUQVJHRVRESVI9eDg2CiAJOzsKIGVzYWMKIAogQUNfU1VCU1QoQU1fUlVOVEVTVEZMQUdTKQorQUNfU1VCU1QoQU1fTFRMREZMQUdTKQogCiBpZiB0ZXN0ICRUQVJHRVRESVIgPSB1bmtub3duOyB0aGVuCiAgIEFDX01TR19FUlJPUihbImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LiJdKQpAQCAtMTY3LDYgKzE4NSw3IEBACiBBTV9DT05ESVRJT05BTChYODYsIHRlc3QgeCRUQVJHRVQgPSB4WDg2KQogQU1fQ09ORElUSU9OQUwoWDg2X0ZSRUVCU0QsIHRlc3QgeCRUQVJHRVQgPSB4WDg2X0ZSRUVCU0QpCiBBTV9DT05ESVRJT05BTChYODZfV0lOMzIsIHRlc3QgeCRUQVJHRVQgPSB4WDg2X1dJTjMyKQorQU1fQ09ORElUSU9OQUwoWDg2X1dJTjY0LCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU42NCkKIEFNX0NPTkRJVElPTkFMKFg4Nl9EQVJXSU4sIHRlc3QgeCRUQVJHRVQgPSB4WDg2X0RBUldJTikKIEFNX0NPTkRJVElPTkFMKEFMUEhBLCB0ZXN0IHgkVEFSR0VUID0geEFMUEhBKQogQU1fQ09ORElUSU9OQUwoSUE2NCwgdGVzdCB4JFRBUkdFVCA9IHhJQTY0KQpAQCAtMTc3LDYgKzE5Niw3IEBACiBBTV9DT05ESVRJT05BTChQT1dFUlBDX0RBUldJTiwgdGVzdCB4JFRBUkdFVCA9IHhQT1dFUlBDX0RBUldJTikKIEFNX0NPTkRJVElPTkFMKFBPV0VSUENfRlJFRUJTRCwgdGVzdCB4JFRBUkdFVCA9IHhQT1dFUlBDX0ZSRUVCU0QpCiBBTV9DT05ESVRJT05BTChBUk0sIHRlc3QgeCRUQVJHRVQgPSB4QVJNKQorQU1fQ09ORElUSU9OQUwoQVZSMzIsIHRlc3QgeCRUQVJHRVQgPSB4QVZSMzIpCiBBTV9DT05ESVRJT05BTChMSUJGRklfQ1JJUywgdGVzdCB4JFRBUkdFVCA9IHhMSUJGRklfQ1JJUykKIEFNX0NPTkRJVElPTkFMKEZSViwgdGVzdCB4JFRBUkdFVCA9IHhGUlYpCiBBTV9DT05ESVRJT05BTChTMzkwLCB0ZXN0IHgkVEFSR0VUID0geFMzOTApCkBAIC0yNTEsNiArMjcxLDI5IEBACiAgICAgZmkKIGZpCiAKK2lmIHRlc3QgeCRUQVJHRVQgPSB4WDg2IHx8IHRlc3QgeCRUQVJHRVQgPSB4WDg2X1dJTjMyIHx8IHRlc3QgeCRUQVJHRVQgPSB4WDg2XzY0OyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2Fzc2VtYmxlciBzdXBwb3J0cyBwYyByZWxhdGVkIHJlbG9jc10sCisJbGliZmZpX2N2X2FzX3g4Nl9wY3JlbCwgWworCWxpYmZmaV9jdl9hc194ODZfcGNyZWw9eWVzCisJZWNobyAnLnRleHQ7IGZvbzogbm9wOyAuZGF0YTsgLmxvbmcgZm9vLS47IC50ZXh0JyA+IGNvbmZ0ZXN0LnMKKwlpZiAkQ0MgJENGTEFHUyAtYyBjb25mdGVzdC5zIDI+JjEgfCBncmVwIC1pIHdhcm5pbmcgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgbGliZmZpX2N2X2FzX3g4Nl9wY3JlbD1ubworCWZpCisJXSkKKyAgICBpZiB0ZXN0ICJ4JGxpYmZmaV9jdl9hc194ODZfcGNyZWwiID0geHllczsgdGhlbgorCUFDX0RFRklORShIQVZFX0FTX1g4Nl9QQ1JFTCwgMSwKKwkJICBbRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIFBDIHJlbGF0aXZlIHJlbG9jcy5dKQorICAgIGZpCitmaQorCitjYXNlICIkdGFyZ2V0IiBpbgorICAgICAqLWFwcGxlLWRhcndpbjEwKiB8ICotKi1mcmVlYnNkKiB8ICotKi1vcGVuYnNkKiB8ICotcGMtc29sYXJpcyopCisgICAgICAgQUNfREVGSU5FKEZGSV9NTUFQX0VYRUNfV1JJVCwgMSwKKyAgICAgICAgICAgICAgICAgW0Nhbm5vdCB1c2UgbWFsbG9jIG9uIHRoaXMgdGFyZ2V0LCBzbywgd2UgcmV2ZXJ0IHRvCisgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgbWVhbnNdKQorICAgICA7OworZXNhYworCiBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAuZWhfZnJhbWUgc2VjdGlvbiBzaG91bGQgYmUgcmVhZC1vbmx5XSwKICAgICBsaWJmZmlfY3Zfcm9fZWhfZnJhbWUsIFsKIAlsaWJmZmlfY3Zfcm9fZWhfZnJhbWU9bm8KQEAgLTM2Niw3ICs0MDksNyBAQAogCiBBQ19DT05GSUdfTElOS1MoaW5jbHVkZS9mZml0YXJnZXQuaDpzcmMvJFRBUkdFVERJUi9mZml0YXJnZXQuaCkKIAotQUNfQ09ORklHX0ZJTEVTKGluY2x1ZGUvZmZpLmgpCitBQ19DT05GSUdfRklMRVMoaW5jbHVkZS9NYWtlZmlsZSBpbmNsdWRlL2ZmaS5oIE1ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSBtYW4vTWFrZWZpbGUgbGliZmZpLnBjKQogCiBBQ19DT05GSUdfTElOS1MoaW5jbHVkZS9mZmlfY29tbW9uLmg6aW5jbHVkZS9mZmlfY29tbW9uLmgpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZGVwY29tcCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZGVwY29tcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYTVlYTRlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kZXBjb21wCkBAIC0wLDAgKzEsNTg0IEBACisjISAvYmluL3NoCisjIGRlcGNvbXAgLSBjb21waWxlIGEgcHJvZ3JhbSBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcyBhcyBzaWRlLWVmZmVjdHMKKworc2NyaXB0dmVyc2lvbj0yMDA2LTEwLTE1LjE4CisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEFsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBkZXBjb21wIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1J1biBQUk9HUkFNUyBBUkdTIHRvIGNvbXBpbGUgYSBmaWxlLCBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcworYXMgc2lkZS1lZmZlY3RzLgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KKyAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSBgUFJPR1JBTVMgQVJHUycuCisgIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSBgUFJPR1JBTVMgQVJHUycuCisgIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCisgIGRlcGZpbGUgICAgIERlcGVuZGVuY3kgZmlsZSB0byBvdXRwdXQuCisgIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dGluZyBkZXBlbmRlbmNpZXMuCisgIGxpYnRvb2wgICAgIFdoZXRoZXIgbGlidG9vbCBpcyB1c2VkICh5ZXMvbm8pLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJkZXBjb21wICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitpZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KKyAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCisgIGV4aXQgMQorZmkKKworIyBEZXBlbmRlbmNpZXMgZm9yIHN1Yi9iYXIubyBvciBzdWIvYmFyLm9iaiBnbyBpbnRvIHN1Yi8uZGVwcy9iYXIuUG8uCitkZXBmaWxlPSR7ZGVwZmlsZS1gZWNobyAiJG9iamVjdCIgfAorICBzZWQgJ3N8W15cXC9dKiR8JyR7REVQRElSLS5kZXBzfScvJnw7c3xcLlwoW14uXSpcKSR8LlBcMXw7c3xQb2JqJHxQb3wnYH0KK3RtcGRlcGZpbGU9JHt0bXBkZXBmaWxlLWBlY2hvICIkZGVwZmlsZSIgfCBzZWQgJ3MvXC5cKFteLl0qXCkkLy5UXDEvJ2B9CisKK3JtIC1mICIkdG1wZGVwZmlsZSIKKworIyBTb21lIG1vZGVzIHdvcmsganVzdCBsaWtlIG90aGVyIG1vZGVzLCBidXQgdXNlIGRpZmZlcmVudCBmbGFncy4gIFdlCisjIHBhcmFtZXRlcml6ZSBoZXJlLCBidXQgc3RpbGwgbGlzdCB0aGUgbW9kZXMgaW4gdGhlIGJpZyBjYXNlIGJlbG93LAorIyB0byBtYWtlIGRlcGVuZC5tNCBlYXNpZXIgdG8gd3JpdGUuICBOb3RlIHRoYXQgd2UgKmNhbm5vdCogdXNlIGEgY2FzZQorIyBoZXJlLCBiZWNhdXNlIHRoaXMgZmlsZSBjYW4gb25seSBjb250YWluIG9uZSBjYXNlIHN0YXRlbWVudC4KK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGhwOyB0aGVuCisgICMgSFAgY29tcGlsZXIgdXNlcyAtTSBhbmQgbm8gZXh0cmEgYXJnLgorICBnY2NmbGFnPS1NCisgIGRlcG1vZGU9Z2NjCitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBkYXNoWG1zdGRvdXQ7IHRoZW4KKyAgICMgVGhpcyBpcyBqdXN0IGxpa2UgZGFzaG1zdGRvdXQgd2l0aCBhIGRpZmZlcmVudCBhcmd1bWVudC4KKyAgIGRhc2htZmxhZz0teE0KKyAgIGRlcG1vZGU9ZGFzaG1zdGRvdXQKK2ZpCisKK2Nhc2UgIiRkZXBtb2RlIiBpbgorZ2NjMykKKyMjIGdjYyAzIGltcGxlbWVudHMgZGVwZW5kZW5jeSB0cmFja2luZyB0aGF0IGRvZXMgZXhhY3RseSB3aGF0CisjIyB3ZSB3YW50LiAgWWF5ISAgTm90ZTogZm9yIHNvbWUgcmVhc29uIGxpYnRvb2wgMS40IGRvZXNuJ3QgbGlrZQorIyMgaXQgaWYgLU1EIC1NUCBjb21lcyBhZnRlciB0aGUgLU1GIHN0dWZmLiAgSG1tLgorIyMgVW5mb3J0dW5hdGVseSwgRnJlZUJTRCBjODkgYWNjZXB0YW5jZSBvZiBmbGFncyBkZXBlbmRzIHVwb24KKyMjIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgb3JkZXI7IHNvIGFkZCB0aGUgZmxhZ3Mgd2hlcmUgdGhleQorIyMgYXBwZWFyIGluIGRlcGVuZDIuYW0uICBOb3RlIHRoYXQgdGhlIHNsb3dkb3duIGluY3VycmVkIGhlcmUKKyMjIGFmZmVjdHMgb25seSBjb25maWd1cmU6IGluIG1ha2VmaWxlcywgJUZBU1RERVAlIHNob3J0Y3V0cyB0aGlzLgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLWMpIHNldCBmbm9yZCAiJEAiIC1NVCAiJG9iamVjdCIgLU1EIC1NUCAtTUYgIiR0bXBkZXBmaWxlIiAiJGFyZyIgOzsKKyAgICAqKSAgc2V0IGZub3JkICIkQCIgIiRhcmciIDs7CisgICAgZXNhYworICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBzaGlmdCAjICRhcmcKKyAgZG9uZQorICAiJEAiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBtdiAiJHRtcGRlcGZpbGUiICIkZGVwZmlsZSIKKyAgOzsKKworZ2NjKQorIyMgVGhlcmUgYXJlIHZhcmlvdXMgd2F5cyB0byBnZXQgZGVwZW5kZW5jeSBvdXRwdXQgZnJvbSBnY2MuICBIZXJlJ3MKKyMjIHdoeSB3ZSBwaWNrIHRoaXMgcmF0aGVyIG9ic2N1cmUgbWV0aG9kOgorIyMgLSBEb24ndCB3YW50IHRvIHVzZSAtTUQgYmVjYXVzZSB3ZSdkIGxpa2UgdGhlIGRlcGVuZGVuY2llcyB0byBlbmQKKyMjICAgdXAgaW4gYSBzdWJkaXIuICBIYXZpbmcgdG8gcmVuYW1lIGJ5IGhhbmQgaXMgdWdseS4KKyMjICAgKFdlIG1pZ2h0IGVuZCB1cCBkb2luZyB0aGlzIGFueXdheSB0byBzdXBwb3J0IG90aGVyIGNvbXBpbGVycy4pCisjIyAtIFRoZSBERVBFTkRFTkNJRVNfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlIG1ha2VzIGdjYyBhY3QgbGlrZQorIyMgICAtTU0sIG5vdCAtTSAoZGVzcGl0ZSB3aGF0IHRoZSBkb2NzIHNheSkuCisjIyAtIFVzaW5nIC1NIGRpcmVjdGx5IG1lYW5zIHJ1bm5pbmcgdGhlIGNvbXBpbGVyIHR3aWNlIChldmVuIHdvcnNlCisjIyAgIHRoYW4gcmVuYW1pbmcpLgorICBpZiB0ZXN0IC16ICIkZ2NjZmxhZyI7IHRoZW4KKyAgICBnY2NmbGFnPS1NRCwKKyAgZmkKKyAgIiRAIiAtV3AsIiRnY2NmbGFnJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIGFscGhhPUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKyMjIFRoZSBzZWNvbmQgLWUgZXhwcmVzc2lvbiBoYW5kbGVzIERPUy1zdHlsZSBmaWxlIG5hbWVzIHdpdGggZHJpdmUgbGV0dGVycy4KKyAgc2VkIC1lICdzL15bXjpdKjogLyAvJyBcCisgICAgICAtZSAncy9eWyckYWxwaGEnXTpcL1teOl0qOiAvIC8nIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisjIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSBgZGVsZXRlZCBoZWFkZXIgZmlsZScgcHJvYmxlbS4KKyMjIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBhIGhlYWRlciBmaWxlIHdoaWNoIGFwcGVhcnMgaW4gYSAuUCBmaWxlCisjIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKKyMjIHR5cGljYWxseSBubyB3YXkgdG8gcmVidWlsZCB0aGUgaGVhZGVyKS4gIFdlIGF2b2lkIHRoaXMgYnkgYWRkaW5nCisjIyBkdW1teSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaGVhZGVyIGZpbGUuICBUb28gYmFkIGdjYyBkb2Vzbid0IGRvCisjIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KKyAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIHwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgYDonLiAgT24gdGhlIHRoZW9yeQorIyMgdGhhdCB0aGUgc3BhY2UgbWVhbnMgc29tZXRoaW5nLCB3ZSBhZGQgYSBzcGFjZSB0byB0aGUgb3V0cHV0IGFzCisjIyB3ZWxsLgorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaHApCisgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCisgICMgc2luY2UgaXQgaXMgY2hlY2tlZCBmb3IgYWJvdmUuCisgIGV4aXQgMQorICA7OworCitzZ2kpCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICIkQCIgIi1XcCwtTUR1cGRhdGUsJHRtcGRlcGZpbGUiCisgIGVsc2UKKyAgICAiJEAiIC1NRHVwZGF0ZSAiJHRtcGRlcGZpbGUiCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuICAjIHllcywgdGhlIHNvdXJjZWZpbGUgZGVwZW5kIG9uIG90aGVyIGZpbGVzCisgICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKworICAgICMgQ2xpcCBvZmYgdGhlIGluaXRpYWwgZWxlbWVudCAodGhlIGRlcGVuZGVudCkuICBEb24ndCB0cnkgdG8gYmUKKyAgICAjIGNsZXZlciBhbmQgcmVwbGFjZSB0aGlzIHdpdGggc2VkIGNvZGUsIGFzIElSSVggc2VkIHdvbid0IGhhbmRsZQorICAgICMgbGluZXMgd2l0aCBtb3JlIHRoYW4gYSBmaXhlZCBudW1iZXIgb2YgY2hhcmFjdGVycyAoNDA5NiBpbgorICAgICMgSVJJWCA2LjIgc2VkLCA4MTkyIGluIElSSVggNi41KS4gIFdlIGFsc28gcmVtb3ZlIGNvbW1lbnQgbGluZXM7CisgICAgIyB0aGUgSVJJWCBjYyBhZGRzIGNvbW1lbnRzIGxpa2UgYCM6ZmVjJyB0byB0aGUgZW5kIG9mIHRoZQorICAgICMgZGVwZW5kZW5jeSBsaW5lLgorICAgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIHwgXAorICAgIHRyICcKKycgJyAnID4+ICRkZXBmaWxlCisgICAgZWNobyA+PiAkZGVwZmlsZQorCisgICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCisgICAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIFwKKyAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyAtZSAncy8kLzovJyBcCisgICA+PiAkZGVwZmlsZQorICBlbHNlCisgICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKKyAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKKyAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworYWl4KQorICAjIFRoZSBDIGZvciBBSVggQ29tcGlsZXIgdXNlcyAtTSBhbmQgb3V0cHV0cyB0aGUgZGVwZW5kZW5jaWVzCisgICMgaW4gYSAudSBmaWxlLiAgSW4gb2xkZXIgdmVyc2lvbnMsIHRoaXMgZmlsZSBhbHdheXMgbGl2ZXMgaW4gdGhlCisgICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgYCRvYmplY3Q6JyBhdCB0aGUKKyAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KKyAgIyBWZXJzaW9uIDYgdXNlcyB0aGUgZGlyZWN0b3J5IGluIGJvdGggY2FzZXMuCisgIHN0cmlwcGVkPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAncy9cKC4qXClcLi4qJC9cMS8nYAorICB0bXBkZXBmaWxlPSIkc3RyaXBwZWQudSIKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIiRAIiAtV2MsLU0KKyAgZWxzZQorICAgICIkQCIgLU0KKyAgZmkKKyAgc3RhdD0kPworCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiA6CisgIGVsc2UKKyAgICBzdHJpcHBlZD1gZWNobyAiJHN0cmlwcGVkIiB8IHNlZCAncyxeLiovLCwnYAorICAgIHRtcGRlcGZpbGU9IiRzdHJpcHBlZC51IgorICBmaQorCisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICBvdXRuYW1lPSIkc3RyaXBwZWQubyIKKyAgICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJy4KKyAgICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAgICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KKyAgICBzZWQgLWUgInMsXiRvdXRuYW1lOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgc2VkIC1lICJzLF4kb3V0bmFtZTogXCguKlwpJCxcMTosIiA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKKyAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKKyAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaWNjKQorICAjIEludGVsJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyBgLU1EIC1NRiBmaWxlJy4gIEhvd2V2ZXIgb24KKyAgIyAgICBpY2MgLU1EIC1NRiBmb28uZCAtYyAtbyBzdWIvZm9vLm8gc3ViL2Zvby5jCisgICMgSUNDIDcuMCB3aWxsIGZpbGwgZm9vLmQgd2l0aCBzb21ldGhpbmcgbGlrZQorICAjICAgIGZvby5vOiBzdWIvZm9vLmMKKyAgIyAgICBmb28ubzogc3ViL2Zvby5oCisgICMgd2hpY2ggaXMgd3JvbmcuICBXZSB3YW50OgorICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5jCisgICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmgKKyAgIyAgICBzdWIvZm9vLmM6CisgICMgICAgc3ViL2Zvby5oOgorICAjIElDQyA3LjEgd2lsbCBvdXRwdXQKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIHN1Yi9mb28uaAorICAjIGFuZCB3aWxsIHdyYXAgbG9uZyBsaW5lcyB1c2luZyBcIDoKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCisgICMgICAgIHN1Yi9mb28uaCAuLi4gXAorICAjICAgICAuLi4KKworICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJywKKyAgIyBvciBgZm9vLm86IGRlcDEuaCBkZXAyLmggXCcsIG9yIGAgZGVwMy5oIGRlcDQuaCBcJy4KKyAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICBzZWQgInMsXlteOl0qOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIHwKKyAgICBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocDIpCisgICMgVGhlICJocCIgc3RhbnphIGFib3ZlIGRvZXMgbm90IHdvcmsgd2l0aCBhQ0MgKEMrKykgYW5kIEhQJ3MgaWE2NAorICAjIGNvbXBpbGVycywgd2hpY2ggaGF2ZSBpbnRlZ3JhdGVkIHByZXByb2Nlc3NvcnMuICBUaGUgY29ycmVjdCBvcHRpb24KKyAgIyB0byB1c2Ugd2l0aCB0aGVzZSBpcyArTWFrZWQ7IGl0IHdyaXRlcyBkZXBlbmRlbmNpZXMgdG8gYSBmaWxlIG5hbWVkCisgICMgJ2Zvby5kJywgd2hpY2ggbGFuZHMgbmV4dCB0byB0aGUgb2JqZWN0IGZpbGUsIHdoZXJldmVyIHRoYXQKKyAgIyBoYXBwZW5zIHRvIGJlLgorICAjIE11Y2ggb2YgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB0cnU2NCBjYXNlOyBzZWUgY29tbWVudHMgdGhlcmUuCisgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLmQKKyAgICAiJEAiIC1XYywrTWFrZWQKKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICAiJEAiICtNYWtlZAorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCisgICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICMgQWRkIGBkZXBlbmRlbnQuaDonIGxpbmVzLgorICAgIHNlZCAtbmUgJzIsJHs7IHMvXiAqLy87IHMvIFxcKiQvLzsgcy8kLzovOyBwO30nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUyIgorICA7OworCit0cnU2NCkKKyAgICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKKyAgICMgZWZmZWN0LiAgYGNjIC1NRCAtbyBmb28ubyAuLi4nIHB1dHMgdGhlIGRlcGVuZGVuY2llcyBpbnRvIGBmb28uby5kJy4KKyAgICMgQXQgbGVhc3Qgb24gQWxwaGEvUmVkaGF0IDYuMSwgQ29tcGFxIENDQyBWNi4yLTUwNCBzZWVtcyB0byBwdXQKKyAgICMgZGVwZW5kZW5jaWVzIGluIGBmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgorICAgIyBTdWJkaXJlY3RvcmllcyBhcmUgcmVzcGVjdGVkLgorICAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorCisgICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aCBUcnU2NCBjYywgc2hhcmVkIG9iamVjdHMgY2FuIGFsc28gYmUgdXNlZCB0byBtYWtlIGEKKyAgICAgICMgc3RhdGljIGxpYnJhcnkuICBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGluIGxpYnRvb2wgMS40IHNlcmllcyB0bworICAgICAgIyBoYW5kbGUgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMgaW4gYSBzaW5nbGUgY29tcGlsYXRpb24uCisgICAgICAjIFdpdGggbGlidG9vbCAxLjQsIGRlcGVuZGVuY2llcyB3ZXJlIG91dHB1dCBpbiAkZGlyLmxpYnMvJGJhc2UubG8uZC4KKyAgICAgICMKKyAgICAgICMgV2l0aCBsaWJ0b29sIDEuNSB0aGlzIGV4Y2VwdGlvbiB3YXMgcmVtb3ZlZCwgYW5kIGxpYnRvb2wgbm93CisgICAgICAjIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlIHR3bworICAgICAgIyBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAorICAgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQorICAgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgorICAgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKKyAgICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCisgICAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KKyAgICAgIHRtcGRlcGZpbGUxPSRkaXIubGlicy8kYmFzZS5sby5kICAgIyBsaWJ0b29sIDEuNAorICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41CisgICAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgbGlidG9vbCAxLjUKKyAgICAgIHRtcGRlcGZpbGU0PSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0CisgICAgICAiJEAiIC1XYywtTUQKKyAgIGVsc2UKKyAgICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQKKyAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAorICAgICAgdG1wZGVwZmlsZTQ9JGRpciRiYXNlLmQKKyAgICAgICIkQCIgLU1ECisgICBmaQorCisgICBzdGF0PSQ/CisgICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgIGVsc2UKKyAgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCisgICAgICBleGl0ICRzdGF0CisgICBmaQorCisgICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorICAgZG8KKyAgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgICBkb25lCisgICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCisgICAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgIGVsc2UKKyAgICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgICBmaQorICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgOzsKKworI25vc2lkZWVmZmVjdCkKKyAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0CisgICMgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc21zIGZyb20gc2xvd2VyIG9uZXMuCisKK2Rhc2htc3Rkb3V0KQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtby4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICB0ZXN0IC16ICIkZGFzaG1mbGFnIiAmJiBkYXNobWZsYWc9LU0KKyAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yIGA6JworICAjIGluIHRoZSB0YXJnZXQgbmFtZS4gIFRoaXMgaXMgdG8gY29wZSB3aXRoIERPUy1zdHlsZSBmaWxlbmFtZXM6CisgICMgYSBkZXBlbmRlbmN5IHN1Y2ggYXMgYGM6L2Zvby9iYXInIGNvdWxkIGJlIHNlZW4gYXMgdGFyZ2V0IGBjJyBvdGhlcndpc2UuCisgICIkQCIgJGRhc2htZmxhZyB8CisgICAgc2VkICdzOl5bICBdKlteOiBdW146XVteOl0qXDpbICAgIF0qOiciJG9iamVjdCInXDogOicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworZGFzaFhtc3Rkb3V0KQorICAjIFRoaXMgY2FzZSBvbmx5IGV4aXN0cyB0byBzYXRpc2Z5IGRlcGVuZC5tNC4gIEl0IGlzIG5ldmVyIGFjdHVhbGx5CisgICMgcnVuLCBhcyB0aGlzIG1vZGUgaXMgc3BlY2lhbGx5IHJlY29nbml6ZWQgaW4gdGhlIHByZWFtYmxlLgorICBleGl0IDEKKyAgOzsKKworbWFrZWRlcGVuZCkKKyAgIiRAIiB8fCBleGl0ICQ/CisgICMgUmVtb3ZlIGFueSBMaWJ0b29sIGNhbGwKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKyAgIyBYIG1ha2VkZXBlbmQKKyAgc2hpZnQKKyAgY2xlYXJlZD1ubworICBmb3IgYXJnIGluICIkQCI7IGRvCisgICAgY2FzZSAkY2xlYXJlZCBpbgorICAgIG5vKQorICAgICAgc2V0ICIiOyBzaGlmdAorICAgICAgY2xlYXJlZD15ZXMgOzsKKyAgICBlc2FjCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtRCp8LUkqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCisgICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgorICAgIC0qfCRvYmplY3QpCisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgZXNhYworICBkb25lCisgIG9ial9zdWZmaXg9ImBlY2hvICRvYmplY3QgfCBzZWQgJ3MvXi4qXC4vLi8nYCIKKyAgdG91Y2ggIiR0bXBkZXBmaWxlIgorICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgc2VkICcxLDJkJyAiJHRtcGRlcGZpbGUiIHwgdHIgJyAnICcKKycgfCBcCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhaworICA7OworCitjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICQxICE9ICctLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgICAgc2hpZnQgIyAkYXJnCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICIkQCIgLUUgfAorICAgIHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIHwKKyAgICBzZWQgJyQgczogXFwkOjonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiICcvXiQvZDtzL14gLy87cy8gXFwkLy87cy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmlzdWFsY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtbywKKyAgIyBiZWNhdXNlIHdlIG11c3QgdXNlIC1vIHdoZW4gcnVubmluZyBsaWJ0b29sLgorICAiJEAiIHx8IGV4aXQgJD8KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAiLUdtInwiL0dtInwiLUdpInwiL0dpInwiLVpJInwiL1pJIikKKwlzZXQgZm5vcmQgIiRAIgorCXNoaWZ0CisJc2hpZnQKKwk7OworICAgICopCisJc2V0IGZub3JkICIkQCIgIiRhcmciCisJc2hpZnQKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBkb25lCisgICIkQCIgLUUgfAorICBzZWQgLW4gJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIvIHM6OmVjaG8gImBjeWdwYXRoIC11IFxcIlwxXFwiYCI6cCcgfCBzb3J0IHwgdW5pcSA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICAuICIkdG1wZGVwZmlsZSIgfCBzZWQgJ3MlICVcXCAlZycgfCBzZWQgLW4gJy9eXCguKlwpJC8gczo6CVwxIFxcOnAnID4+ICIkZGVwZmlsZSIKKyAgZWNobyAiCSIgPj4gIiRkZXBmaWxlIgorICAuICIkdG1wZGVwZmlsZSIgfCBzZWQgJ3MlICVcXCAlZycgfCBzZWQgLW4gJy9eXCguKlwpJC8gczo6XDFcOjpwJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbm9uZSkKKyAgZXhlYyAiJEAiCisgIDs7CisKKyopCisgIGVjaG8gIlVua25vd24gZGVwbW9kZSAkZGVwbW9kZSIgMT4mMgorICBleGl0IDEKKyAgOzsKK2VzYWMKKworZXhpdCAwCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS5pbmZvIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvbGliZmZpLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk2YTVlYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS50ZXhpIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvbGliZmZpLnRleGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZhNWIxNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS50ZXhpCkBAIC0wLDAgKzEsNTk4IEBACitcaW5wdXQgdGV4aW5mbyAgIEBjIC0qLXRleGluZm8tKi0KK0BjICUqKnN0YXJ0IG9mIGhlYWRlcgorQHNldGZpbGVuYW1lIGxpYmZmaS5pbmZvCitAc2V0dGl0bGUgbGliZmZpCitAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2ZmCitAYyAlKiplbmQgb2YgaGVhZGVyCisKK0BjIE1lcmdlIHRoZSBzdGFuZGFyZCBpbmRleGVzIGludG8gYSBzaW5nbGUgb25lLgorQHN5bmNvZGVpbmRleCBmbiBjcAorQHN5bmNvZGVpbmRleCB2ciBjcAorQHN5bmNvZGVpbmRleCBreSBjcAorQHN5bmNvZGVpbmRleCBwZyBjcAorQHN5bmNvZGVpbmRleCB0cCBjcAorCitAaW5jbHVkZSB2ZXJzaW9uLnRleGkKKworQGNvcHlpbmcKKworVGhpcyBtYW51YWwgaXMgZm9yIExpYmZmaSwgYSBwb3J0YWJsZSBmb3JlaWduLWZ1bmN0aW9uIGludGVyZmFjZQorbGlicmFyeS4KKworQ29weXJpZ2h0IEBjb3B5cmlnaHR7fSAyMDA4LCAyMDEwIFJlZCBIYXQsIEluYy4KKworQHF1b3RhdGlvbgorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2xhdGVyIHZlcnNpb24uICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UnJy4KKworQGVuZCBxdW90YXRpb24KK0BlbmQgY29weWluZworCitAZGlyY2F0ZWdvcnkgRGV2ZWxvcG1lbnQKK0BkaXJlbnRyeQorKiBsaWJmZmk6IChsaWJmZmkpLiAgICAgICAgICAgICBQb3J0YWJsZSBmb3JlaWduLWZ1bmN0aW9uIGludGVyZmFjZSBsaWJyYXJ5LgorQGVuZCBkaXJlbnRyeQorCitAdGl0bGVwYWdlCitAdGl0bGUgTGliZmZpCitAcGFnZQorQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorQGluc2VydGNvcHlpbmcKK0BlbmQgdGl0bGVwYWdlCisKKworQGlmbm90dGV4CitAbm9kZSBUb3AKK0B0b3AgbGliZmZpCisKK0BpbnNlcnRjb3B5aW5nCisKK0BtZW51CisqIEludHJvZHVjdGlvbjo6ICAgICAgICAgICAgICAgIFdoYXQgaXMgbGliZmZpPworKiBVc2luZyBsaWJmZmk6OiAgICAgICAgICAgICAgICBIb3cgdG8gdXNlIGxpYmZmaS4KKyogTWlzc2luZyBGZWF0dXJlczo6ICAgICAgICAgICAgVGhpbmdzIGxpYmZmaSBjYW4ndCBkby4KKyogSW5kZXg6OiAgICAgICAgICAgICAgICAgICAgICAgSW5kZXguCitAZW5kIG1lbnUKKworQGVuZCBpZm5vdHRleAorCisKK0Bub2RlIEludHJvZHVjdGlvbgorQGNoYXB0ZXIgV2hhdCBpcyBsaWJmZmk/CisKK0NvbXBpbGVycyBmb3IgaGlnaCBsZXZlbCBsYW5ndWFnZXMgZ2VuZXJhdGUgY29kZSB0aGF0IGZvbGxvdyBjZXJ0YWluCitjb252ZW50aW9ucy4gIFRoZXNlIGNvbnZlbnRpb25zIGFyZSBuZWNlc3NhcnksIGluIHBhcnQsIGZvciBzZXBhcmF0ZQorY29tcGlsYXRpb24gdG8gd29yay4gIE9uZSBzdWNoIGNvbnZlbnRpb24gaXMgdGhlIEBkZm57Y2FsbGluZworY29udmVudGlvbn0uICBUaGUgY2FsbGluZyBjb252ZW50aW9uIGlzIGEgc2V0IG9mIGFzc3VtcHRpb25zIG1hZGUgYnkKK3RoZSBjb21waWxlciBhYm91dCB3aGVyZSBmdW5jdGlvbiBhcmd1bWVudHMgd2lsbCBiZSBmb3VuZCBvbiBlbnRyeSB0bworYSBmdW5jdGlvbi4gIEEgY2FsbGluZyBjb252ZW50aW9uIGFsc28gc3BlY2lmaWVzIHdoZXJlIHRoZSByZXR1cm4KK3ZhbHVlIGZvciBhIGZ1bmN0aW9uIGlzIGZvdW5kLiAgVGhlIGNhbGxpbmcgY29udmVudGlvbiBpcyBhbHNvCitzb21ldGltZXMgY2FsbGVkIHRoZSBAZGZue0FCSX0gb3IgQGRmbntBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlfS4KK0BjaW5kZXggY2FsbGluZyBjb252ZW50aW9uCitAY2luZGV4IEFCSQorQGNpbmRleCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlCisKK1NvbWUgcHJvZ3JhbXMgbWF5IG5vdCBrbm93IGF0IHRoZSB0aW1lIG9mIGNvbXBpbGF0aW9uIHdoYXQgYXJndW1lbnRzCithcmUgdG8gYmUgcGFzc2VkIHRvIGEgZnVuY3Rpb24uICBGb3IgaW5zdGFuY2UsIGFuIGludGVycHJldGVyIG1heSBiZQordG9sZCBhdCBydW4tdGltZSBhYm91dCB0aGUgbnVtYmVyIGFuZCB0eXBlcyBvZiBhcmd1bWVudHMgdXNlZCB0byBjYWxsCithIGdpdmVuIGZ1bmN0aW9uLiAgQHNhbXB7TGliZmZpfSBjYW4gYmUgdXNlZCBpbiBzdWNoIHByb2dyYW1zIHRvCitwcm92aWRlIGEgYnJpZGdlIGZyb20gdGhlIGludGVycHJldGVyIHByb2dyYW0gdG8gY29tcGlsZWQgY29kZS4KKworVGhlIEBzYW1we2xpYmZmaX0gbGlicmFyeSBwcm92aWRlcyBhIHBvcnRhYmxlLCBoaWdoIGxldmVsIHByb2dyYW1taW5nCitpbnRlcmZhY2UgdG8gdmFyaW91cyBjYWxsaW5nIGNvbnZlbnRpb25zLiAgVGhpcyBhbGxvd3MgYSBwcm9ncmFtbWVyIHRvCitjYWxsIGFueSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkgYSBjYWxsIGludGVyZmFjZSBkZXNjcmlwdGlvbiBhdCBydW4KK3RpbWUuCisKK0BhY3Jvbnlte0ZGSX0gc3RhbmRzIGZvciBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZS4gIEEgZm9yZWlnbgorZnVuY3Rpb24gaW50ZXJmYWNlIGlzIHRoZSBwb3B1bGFyIG5hbWUgZm9yIHRoZSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MKK2NvZGUgd3JpdHRlbiBpbiBvbmUgbGFuZ3VhZ2UgdG8gY2FsbCBjb2RlIHdyaXR0ZW4gaW4gYW5vdGhlciBsYW5ndWFnZS4KK1RoZSBAc2FtcHtsaWJmZml9IGxpYnJhcnkgcmVhbGx5IG9ubHkgcHJvdmlkZXMgdGhlIGxvd2VzdCwgbWFjaGluZQorZGVwZW5kZW50IGxheWVyIG9mIGEgZnVsbHkgZmVhdHVyZWQgZm9yZWlnbiBmdW5jdGlvbiBpbnRlcmZhY2UuICBBCitsYXllciBtdXN0IGV4aXN0IGFib3ZlIEBzYW1we2xpYmZmaX0gdGhhdCBoYW5kbGVzIHR5cGUgY29udmVyc2lvbnMgZm9yCit2YWx1ZXMgcGFzc2VkIGJldHdlZW4gdGhlIHR3byBsYW5ndWFnZXMuCitAY2luZGV4IEZGSQorQGNpbmRleCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorCisKK0Bub2RlIFVzaW5nIGxpYmZmaQorQGNoYXB0ZXIgVXNpbmcgbGliZmZpCisKK0BtZW51CisqIFRoZSBCYXNpY3M6OiAgICAgICAgICAgICAgICAgIFRoZSBiYXNpYyBsaWJmZmkgQVBJLgorKiBTaW1wbGUgRXhhbXBsZTo6ICAgICAgICAgICAgICBBIHNpbXBsZSBleGFtcGxlLgorKiBUeXBlczo6ICAgICAgICAgICAgICAgICAgICAgICBsaWJmZmkgdHlwZSBkZXNjcmlwdGlvbnMuCisqIE11bHRpcGxlIEFCSXM6OiAgICAgICAgICAgICAgIERpZmZlcmVudCBwYXNzaW5nIHN0eWxlcyBvbiBvbmUgcGxhdGZvcm0uCisqIFRoZSBDbG9zdXJlIEFQSTo6ICAgICAgICAgICAgIFdyaXRpbmcgYSBnZW5lcmljIGZ1bmN0aW9uLgorKiBDbG9zdXJlIEV4YW1wbGU6OiAgICAgICAgICAgICBBIGNsb3N1cmUgZXhhbXBsZS4KK0BlbmQgbWVudQorCisKK0Bub2RlIFRoZSBCYXNpY3MKK0BzZWN0aW9uIFRoZSBCYXNpY3MKKworQHNhbXB7TGliZmZpfSBhc3N1bWVzIHRoYXQgeW91IGhhdmUgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB5b3Ugd2lzaAordG8gY2FsbCBhbmQgdGhhdCB5b3Uga25vdyB0aGUgbnVtYmVyIGFuZCB0eXBlcyBvZiBhcmd1bWVudHMgdG8gcGFzcworaXQsIGFzIHdlbGwgYXMgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbi4KKworVGhlIGZpcnN0IHRoaW5nIHlvdSBtdXN0IGRvIGlzIGNyZWF0ZSBhbiBAY29kZXtmZmlfY2lmfSBvYmplY3QgdGhhdAorbWF0Y2hlcyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiB5b3Ugd2lzaCB0byBjYWxsLiAgVGhpcyBpcyBhCitzZXBhcmF0ZSBzdGVwIGJlY2F1c2UgaXQgaXMgY29tbW9uIHRvIG1ha2UgbXVsdGlwbGUgY2FsbHMgdXNpbmcgYQorc2luZ2xlIEBjb2Rle2ZmaV9jaWZ9LiAgVGhlIEBkZm57Y2lmfSBpbiBAY29kZXtmZmlfY2lmfSBzdGFuZHMgZm9yCitDYWxsIEludGVyRmFjZS4gIFRvIHByZXBhcmUgYSBjYWxsIGludGVyZmFjZSBvYmplY3QsIHVzZSB0aGUgZnVuY3Rpb24KK0Bjb2Rle2ZmaV9wcmVwX2NpZn0uCitAY2luZGV4IGNpZgorCitAZmluZGV4IGZmaV9wcmVwX2NpZgorQGRlZnVuIGZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmIChmZmlfY2lmICpAdmFye2NpZn0sIGZmaV9hYmkgQHZhcnthYml9LCB1bnNpZ25lZCBpbnQgQHZhcntuYXJnc30sIGZmaV90eXBlICpAdmFye3J0eXBlfSwgZmZpX3R5cGUgKipAdmFye2FyZ3R5cGVzfSkKK1RoaXMgaW5pdGlhbGl6ZXMgQHZhcntjaWZ9IGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKworQHZhcnthYml9IGlzIHRoZSBBQkkgdG8gdXNlOyBub3JtYWxseSBAY29kZXtGRklfREVGQVVMVF9BQkl9IGlzIHdoYXQKK3lvdSB3YW50LiAgQHJlZntNdWx0aXBsZSBBQklzfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworQHZhcntuYXJnc30gaXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCB0aGlzIGZ1bmN0aW9uIGFjY2VwdHMuCitAc2FtcHtsaWJmZml9IGRvZXMgbm90IHlldCBoYW5kbGUgdmFyYXJncyBmdW5jdGlvbnM7IHNlZSBAcmVme01pc3NpbmcKK0ZlYXR1cmVzfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworQHZhcntydHlwZX0gaXMgYSBwb2ludGVyIHRvIGFuIEBjb2Rle2ZmaV90eXBlfSBzdHJ1Y3R1cmUgdGhhdAorZGVzY3JpYmVzIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24uICBAeHJlZntUeXBlc30uCisKK0B2YXJ7YXJndHlwZXN9IGlzIGEgdmVjdG9yIG9mIEBjb2Rle2ZmaV90eXBlfSBwb2ludGVycy4KK0B2YXJ7YXJndHlwZXN9IG11c3QgaGF2ZSBAdmFye25hcmdzfSBlbGVtZW50cy4gIElmIEB2YXJ7bmFyZ3N9IGlzIDAsCit0aGlzIGFyZ3VtZW50IGlzIGlnbm9yZWQuCisKK0Bjb2Rle2ZmaV9wcmVwX2NpZn0gcmV0dXJucyBhIEBjb2Rle2xpYmZmaX0gc3RhdHVzIGNvZGUsIG9mIHR5cGUKK0Bjb2Rle2ZmaV9zdGF0dXN9LiAgVGhpcyB3aWxsIGJlIGVpdGhlciBAY29kZXtGRklfT0t9IGlmIGV2ZXJ5dGhpbmcKK3dvcmtlZCBwcm9wZXJseTsgQGNvZGV7RkZJX0JBRF9UWVBFREVGfSBpZiBvbmUgb2YgdGhlIEBjb2Rle2ZmaV90eXBlfQorb2JqZWN0cyBpcyBpbmNvcnJlY3Q7IG9yIEBjb2Rle0ZGSV9CQURfQUJJfSBpZiB0aGUgQHZhcnthYml9IHBhcmFtZXRlcgoraXMgaW52YWxpZC4KK0BlbmQgZGVmdW4KKworCitUbyBjYWxsIGEgZnVuY3Rpb24gdXNpbmcgYW4gaW5pdGlhbGl6ZWQgQGNvZGV7ZmZpX2NpZn0sIHVzZSB0aGUKK0Bjb2Rle2ZmaV9jYWxsfSBmdW5jdGlvbjoKKworQGZpbmRleCBmZmlfY2FsbAorQGRlZnVuIHZvaWQgZmZpX2NhbGwgKGZmaV9jaWYgKkB2YXJ7Y2lmfSwgdm9pZCAqQHZhcntmbn0sIHZvaWQgKkB2YXJ7cnZhbHVlfSwgdm9pZCAqKkB2YXJ7YXZhbHVlc30pCitUaGlzIGNhbGxzIHRoZSBmdW5jdGlvbiBAdmFye2ZufSBhY2NvcmRpbmcgdG8gdGhlIGRlc2NyaXB0aW9uIGdpdmVuIGluCitAdmFye2NpZn0uICBAdmFye2NpZn0gbXVzdCBoYXZlIGFscmVhZHkgYmVlbiBwcmVwYXJlZCB1c2luZworQGNvZGV7ZmZpX3ByZXBfY2lmfS4KKworQHZhcntydmFsdWV9IGlzIGEgcG9pbnRlciB0byBhIGNodW5rIG9mIG1lbW9yeSB0aGF0IHdpbGwgaG9sZCB0aGUKK3Jlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4gIFRoaXMgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUKK3Jlc3VsdCBhbmQgbXVzdCBiZSBzdWl0YWJseSBhbGlnbmVkOyBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkKK3RvIGVuc3VyZSB0aGlzLiAgSWYgQHZhcntjaWZ9IGRlY2xhcmVzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMKK0Bjb2Rle3ZvaWR9ICh1c2luZyBAY29kZXtmZmlfdHlwZV92b2lkfSksIHRoZW4gQHZhcntydmFsdWV9IGlzCitpZ25vcmVkLiAgSWYgQHZhcntydmFsdWV9IGlzIEBzYW1we05VTEx9LCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMKK2Rpc2NhcmRlZC4KKworQHZhcnthdmFsdWVzfSBpcyBhIHZlY3RvciBvZiBAY29kZXt2b2lkICp9IHBvaW50ZXJzIHRoYXQgcG9pbnQgdG8gdGhlCittZW1vcnkgbG9jYXRpb25zIGhvbGRpbmcgdGhlIGFyZ3VtZW50IHZhbHVlcyBmb3IgYSBjYWxsLiAgSWYgQHZhcntjaWZ9CitkZWNsYXJlcyB0aGF0IHRoZSBmdW5jdGlvbiBoYXMgbm8gYXJndW1lbnRzIChpLmUuLCBAdmFye25hcmdzfSB3YXMgMCksCit0aGVuIEB2YXJ7YXZhbHVlc30gaXMgaWdub3JlZC4KK0BlbmQgZGVmdW4KKworCitAbm9kZSBTaW1wbGUgRXhhbXBsZQorQHNlY3Rpb24gU2ltcGxlIEV4YW1wbGUKKworSGVyZSBpcyBhIHRyaXZpYWwgZXhhbXBsZSB0aGF0IGNhbGxzIEBjb2Rle3B1dHN9IGEgZmV3IHRpbWVzLgorCitAZXhhbXBsZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisKK2ludCBtYWluKCkKK0B7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1sxXTsKKyAgdm9pZCAqdmFsdWVzWzFdOworICBjaGFyICpzOworICBpbnQgcmM7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBhcmd1bWVudCBpbmZvIHZlY3RvcnMgKi8gICAgCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKyAgdmFsdWVzWzBdID0gJnM7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgaWYgKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsIAorCQkgICAgICAgJmZmaV90eXBlX3VpbnQsIGFyZ3MpID09IEZGSV9PSykKKyAgICBAeworICAgICAgcyA9ICJIZWxsbyBXb3JsZCEiOworICAgICAgZmZpX2NhbGwoJmNpZiwgcHV0cywgJnJjLCB2YWx1ZXMpOworICAgICAgLyogcmMgbm93IGhvbGRzIHRoZSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gcHV0cyAqLworICAgICAgCisgICAgICAvKiB2YWx1ZXMgaG9sZHMgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbidzIGFyZywgc28gdG8gCisgICAgICAgICBjYWxsIHB1dHMoKSBhZ2FpbiBhbGwgd2UgbmVlZCB0byBkbyBpcyBjaGFuZ2UgdGhlIAorICAgICAgICAgdmFsdWUgb2YgcyAqLworICAgICAgcyA9ICJUaGlzIGlzIGNvb2whIjsKKyAgICAgIGZmaV9jYWxsKCZjaWYsIHB1dHMsICZyYywgdmFsdWVzKTsKKyAgICBAfQorICAKKyAgcmV0dXJuIDA7CitAfQorQGVuZCBleGFtcGxlCisKKworQG5vZGUgVHlwZXMKK0BzZWN0aW9uIFR5cGVzCisKK0BtZW51CisqIFByaW1pdGl2ZSBUeXBlczo6ICAgICAgICAgICAgIEJ1aWx0LWluIHR5cGVzLgorKiBTdHJ1Y3R1cmVzOjogICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUgdHlwZXMuCisqIFR5cGUgRXhhbXBsZTo6ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSB0eXBlIGV4YW1wbGUuCitAZW5kIG1lbnUKKworQG5vZGUgUHJpbWl0aXZlIFR5cGVzCitAc3Vic2VjdGlvbiBQcmltaXRpdmUgVHlwZXMKKworQGNvZGV7TGliZmZpfSBwcm92aWRlcyBhIG51bWJlciBvZiBidWlsdC1pbiB0eXBlIGRlc2NyaXB0b3JzIHRoYXQgY2FuCitiZSB1c2VkIHRvIGRlc2NyaWJlIGFyZ3VtZW50IGFuZCByZXR1cm4gdHlwZXM6CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gZmZpX3R5cGVfdm9pZAorQHRpbmRleCBmZmlfdHlwZV92b2lkCitUaGUgdHlwZSBAY29kZXt2b2lkfS4gIFRoaXMgY2Fubm90IGJlIHVzZWQgZm9yIGFyZ3VtZW50IHR5cGVzLCBvbmx5Citmb3IgcmV0dXJuIHZhbHVlcy4KKworQGl0ZW0gZmZpX3R5cGVfdWludDgKK0B0aW5kZXggZmZpX3R5cGVfdWludDgKK0FuIHVuc2lnbmVkLCA4LWJpdCBpbnRlZ2VyIHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3NpbnQ4CitAdGluZGV4IGZmaV90eXBlX3NpbnQ4CitBIHNpZ25lZCwgOC1iaXQgaW50ZWdlciB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV91aW50MTYKK0B0aW5kZXggZmZpX3R5cGVfdWludDE2CitBbiB1bnNpZ25lZCwgMTYtYml0IGludGVnZXIgdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfc2ludDE2CitAdGluZGV4IGZmaV90eXBlX3NpbnQxNgorQSBzaWduZWQsIDE2LWJpdCBpbnRlZ2VyIHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3VpbnQzMgorQHRpbmRleCBmZmlfdHlwZV91aW50MzIKK0FuIHVuc2lnbmVkLCAzMi1iaXQgaW50ZWdlciB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9zaW50MzIKK0B0aW5kZXggZmZpX3R5cGVfc2ludDMyCitBIHNpZ25lZCwgMzItYml0IGludGVnZXIgdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfdWludDY0CitAdGluZGV4IGZmaV90eXBlX3VpbnQ2NAorQW4gdW5zaWduZWQsIDY0LWJpdCBpbnRlZ2VyIHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3NpbnQ2NAorQHRpbmRleCBmZmlfdHlwZV9zaW50NjQKK0Egc2lnbmVkLCA2NC1iaXQgaW50ZWdlciB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9mbG9hdAorQHRpbmRleCBmZmlfdHlwZV9mbG9hdAorVGhlIEMgQGNvZGV7ZmxvYXR9IHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX2RvdWJsZQorQHRpbmRleCBmZmlfdHlwZV9kb3VibGUKK1RoZSBDIEBjb2Rle2RvdWJsZX0gdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfdWNoYXIKK0B0aW5kZXggZmZpX3R5cGVfdWNoYXIKK1RoZSBDIEBjb2Rle3Vuc2lnbmVkIGNoYXJ9IHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3NjaGFyCitAdGluZGV4IGZmaV90eXBlX3NjaGFyCitUaGUgQyBAY29kZXtzaWduZWQgY2hhcn0gdHlwZS4gIChOb3RlIHRoYXQgdGhlcmUgaXMgbm90IGFuIGV4YWN0CitlcXVpdmFsZW50IHRvIHRoZSBDIEBjb2Rle2NoYXJ9IHR5cGUgaW4gQGNvZGV7bGliZmZpfTsgb3JkaW5hcmlseSB5b3UKK3Nob3VsZCBlaXRoZXIgdXNlIEBjb2Rle2ZmaV90eXBlX3NjaGFyfSBvciBAY29kZXtmZmlfdHlwZV91Y2hhcn0KK2RlcGVuZGluZyBvbiB3aGV0aGVyIEBjb2Rle2NoYXJ9IGlzIHNpZ25lZC4pCisKK0BpdGVtIGZmaV90eXBlX3VzaG9ydAorQHRpbmRleCBmZmlfdHlwZV91c2hvcnQKK1RoZSBDIEBjb2Rle3Vuc2lnbmVkIHNob3J0fSB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9zc2hvcnQKK0B0aW5kZXggZmZpX3R5cGVfc3Nob3J0CitUaGUgQyBAY29kZXtzaG9ydH0gdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfdWludAorQHRpbmRleCBmZmlfdHlwZV91aW50CitUaGUgQyBAY29kZXt1bnNpZ25lZCBpbnR9IHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3NpbnQKK0B0aW5kZXggZmZpX3R5cGVfc2ludAorVGhlIEMgQGNvZGV7aW50fSB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV91bG9uZworQHRpbmRleCBmZmlfdHlwZV91bG9uZworVGhlIEMgQGNvZGV7dW5zaWduZWQgbG9uZ30gdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfc2xvbmcKK0B0aW5kZXggZmZpX3R5cGVfc2xvbmcKK1RoZSBDIEBjb2Rle2xvbmd9IHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX2xvbmdkb3VibGUKK0B0aW5kZXggZmZpX3R5cGVfbG9uZ2RvdWJsZQorT24gcGxhdGZvcm1zIHRoYXQgaGF2ZSBhIEMgQGNvZGV7bG9uZyBkb3VibGV9IHR5cGUsIHRoaXMgaXMgZGVmaW5lZC4KK09uIG90aGVyIHBsYXRmb3JtcywgaXQgaXMgbm90LgorCitAaXRlbSBmZmlfdHlwZV9wb2ludGVyCitAdGluZGV4IGZmaV90eXBlX3BvaW50ZXIKK0EgZ2VuZXJpYyBAY29kZXt2b2lkICp9IHBvaW50ZXIuICBZb3Ugc2hvdWxkIHVzZSB0aGlzIGZvciBhbGwKK3BvaW50ZXJzLCByZWdhcmRsZXNzIG9mIHRoZWlyIHJlYWwgdHlwZS4KK0BlbmQgdGFibGUKKworRWFjaCBvZiB0aGVzZSBpcyBvZiB0eXBlIEBjb2Rle2ZmaV90eXBlfSwgc28geW91IG11c3QgdGFrZSB0aGUgYWRkcmVzcword2hlbiBwYXNzaW5nIHRvIEBjb2Rle2ZmaV9wcmVwX2NpZn0uCisKKworQG5vZGUgU3RydWN0dXJlcworQHN1YnNlY3Rpb24gU3RydWN0dXJlcworCitBbHRob3VnaCBAc2FtcHtsaWJmZml9IGhhcyBubyBzcGVjaWFsIHN1cHBvcnQgZm9yIHVuaW9ucyBvcgorYml0LWZpZWxkcywgaXQgaXMgcGVyZmVjdGx5IGhhcHB5IHBhc3Npbmcgc3RydWN0dXJlcyBiYWNrIGFuZCBmb3J0aC4KK1lvdSBtdXN0IGZpcnN0IGRlc2NyaWJlIHRoZSBzdHJ1Y3R1cmUgdG8gQHNhbXB7bGliZmZpfSBieSBjcmVhdGluZyBhCituZXcgQGNvZGV7ZmZpX3R5cGV9IG9iamVjdCBmb3IgaXQuCisKK0B0aW5kZXggZmZpX3R5cGUKK0BkZWZ0cCBmZmlfdHlwZQorVGhlIEBjb2Rle2ZmaV90eXBlfSBoYXMgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgorQHRhYmxlIEBjb2RlCitAaXRlbSBzaXplX3Qgc2l6ZQorVGhpcyBpcyBzZXQgYnkgQGNvZGV7bGliZmZpfTsgeW91IHNob3VsZCBpbml0aWFsaXplIGl0IHRvIHplcm8uCisKK0BpdGVtIHVuc2lnbmVkIHNob3J0IGFsaWdubWVudAorVGhpcyBpcyBzZXQgYnkgQGNvZGV7bGliZmZpfTsgeW91IHNob3VsZCBpbml0aWFsaXplIGl0IHRvIHplcm8uCisKK0BpdGVtIHVuc2lnbmVkIHNob3J0IHR5cGUKK0ZvciBhIHN0cnVjdHVyZSwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIEBjb2Rle0ZGSV9UWVBFX1NUUlVDVH0uCisKK0BpdGVtIGZmaV90eXBlICoqZWxlbWVudHMKK1RoaXMgaXMgYSBAc2FtcHtOVUxMfS10ZXJtaW5hdGVkIGFycmF5IG9mIHBvaW50ZXJzIHRvIEBjb2Rle2ZmaV90eXBlfQorb2JqZWN0cy4gIFRoZXJlIGlzIG9uZSBlbGVtZW50IHBlciBmaWVsZCBvZiB0aGUgc3RydWN0LgorQGVuZCB0YWJsZQorQGVuZCBkZWZ0cAorCisKK0Bub2RlIFR5cGUgRXhhbXBsZQorQHN1YnNlY3Rpb24gVHlwZSBFeGFtcGxlCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBpbml0aWFsaXplcyBhIEBjb2Rle2ZmaV90eXBlfSBvYmplY3QKK3JlcHJlc2VudGluZyB0aGUgQGNvZGV7dG19IHN0cnVjdCBmcm9tIExpbnV4J3MgQGZpbGV7dGltZS5ofS4KKworSGVyZSBpcyBob3cgdGhlIHN0cnVjdCBpcyBkZWZpbmVkOgorCitAZXhhbXBsZQorc3RydWN0IHRtIEB7CisgICAgaW50IHRtX3NlYzsKKyAgICBpbnQgdG1fbWluOworICAgIGludCB0bV9ob3VyOworICAgIGludCB0bV9tZGF5OworICAgIGludCB0bV9tb247CisgICAgaW50IHRtX3llYXI7CisgICAgaW50IHRtX3dkYXk7CisgICAgaW50IHRtX3lkYXk7CisgICAgaW50IHRtX2lzZHN0OworICAgIC8qIFRob3NlIGFyZSBmb3IgZnV0dXJlIHVzZS4gKi8KKyAgICBsb25nIGludCBfX3RtX2dtdG9mZl9fOworICAgIF9fY29uc3QgY2hhciAqX190bV96b25lX187CitAfTsKK0BlbmQgZXhhbXBsZQorCitIZXJlIGlzIHRoZSBjb3JyZXNwb25kaW5nIGNvZGUgdG8gZGVzY3JpYmUgdGhpcyBzdHJ1Y3QgdG8KK0Bjb2Rle2xpYmZmaX06CisKK0BleGFtcGxlCisgICAgQHsKKyAgICAgIGZmaV90eXBlIHRtX3R5cGU7CisgICAgICBmZmlfdHlwZSAqdG1fdHlwZV9lbGVtZW50c1sxMl07CisgICAgICBpbnQgaTsKKworICAgICAgdG1fdHlwZS5zaXplID0gdG1fdHlwZS5hbGlnbm1lbnQgPSAwOworICAgICAgdG1fdHlwZS5lbGVtZW50cyA9ICZ0bV90eXBlX2VsZW1lbnRzOworICAgIAorICAgICAgZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKyAgICAgICAgICB0bV90eXBlX2VsZW1lbnRzW2ldID0gJmZmaV90eXBlX3NpbnQ7CisKKyAgICAgIHRtX3R5cGVfZWxlbWVudHNbOV0gPSAmZmZpX3R5cGVfc2xvbmc7CisgICAgICB0bV90eXBlX2VsZW1lbnRzWzEwXSA9ICZmZmlfdHlwZV9wb2ludGVyOworICAgICAgdG1fdHlwZV9lbGVtZW50c1sxMV0gPSBOVUxMOworCisgICAgICAvKiB0bV90eXBlIGNhbiBub3cgYmUgdXNlZCB0byByZXByZXNlbnQgdG0gYXJndW1lbnQgdHlwZXMgYW5kCisJIHJldHVybiB0eXBlcyBmb3IgZmZpX3ByZXBfY2lmKCkgKi8KKyAgICBAfQorQGVuZCBleGFtcGxlCisKKworQG5vZGUgTXVsdGlwbGUgQUJJcworQHNlY3Rpb24gTXVsdGlwbGUgQUJJcworCitBIGdpdmVuIHBsYXRmb3JtIG1heSBwcm92aWRlIG11bHRpcGxlIGRpZmZlcmVudCBBQklzIGF0IG9uY2UuICBGb3IKK2luc3RhbmNlLCB0aGUgeDg2IHBsYXRmb3JtIGhhcyBib3RoIEBzYW1we3N0ZGNhbGx9IGFuZCBAc2FtcHtmYXN0Y2FsbH0KK2Z1bmN0aW9ucy4KKworQGNvZGV7bGliZmZpfSBwcm92aWRlcyBzb21lIHN1cHBvcnQgZm9yIHRoaXMuICBIb3dldmVyLCB0aGlzIGlzCituZWNlc3NhcmlseSBwbGF0Zm9ybS1zcGVjaWZpYy4KKworQGMgRklYTUU6IGRvY3VtZW50IHRoZSBwbGF0Zm9ybXMKKworQG5vZGUgVGhlIENsb3N1cmUgQVBJCitAc2VjdGlvbiBUaGUgQ2xvc3VyZSBBUEkKKworQGNvZGV7bGliZmZpfSBhbHNvIHByb3ZpZGVzIGEgd2F5IHRvIHdyaXRlIGEgZ2VuZXJpYyBmdW5jdGlvbiAtLSBhCitmdW5jdGlvbiB0aGF0IGNhbiBhY2NlcHQgYW5kIGRlY29kZSBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzLgorVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gd3JpdGluZyBhbiBpbnRlcnByZXRlciwgb3IgdG8gcHJvdmlkZSB3cmFwcGVycworZm9yIGFyYml0cmFyeSBmdW5jdGlvbnMuCisKK1RoaXMgZmFjaWxpdHkgaXMgY2FsbGVkIHRoZSBAZGZue2Nsb3N1cmUgQVBJfS4gIENsb3N1cmVzIGFyZSBub3QKK3N1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zOyB5b3UgY2FuIGNoZWNrIHRoZSBAY29kZXtGRklfQ0xPU1VSRVN9CitkZWZpbmUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkIG9uIHRoZSBjdXJyZW50CitwbGF0Zm9ybS4KK0BjaW5kZXggY2xvc3VyZXMKK0BjaW5kZXggY2xvc3VyZSBBUEkKK0BmaW5kZXggRkZJX0NMT1NVUkVTCisKK0JlY2F1c2UgY2xvc3VyZXMgd29yayBieSBhc3NlbWJsaW5nIGEgdGlueSBmdW5jdGlvbiBhdCBydW50aW1lLCB0aGV5CityZXF1aXJlIHNwZWNpYWwgYWxsb2NhdGlvbiBvbiBwbGF0Zm9ybXMgdGhhdCBoYXZlIGEgbm9uLWV4ZWN1dGFibGUKK2hlYXAuICBNZW1vcnkgbWFuYWdlbWVudCBmb3IgY2xvc3VyZXMgaXMgaGFuZGxlZCBieSBhIHBhaXIgb2YKK2Z1bmN0aW9uczoKKworQGZpbmRleCBmZmlfY2xvc3VyZV9hbGxvY2EKK0BkZWZ1biB2b2lkICpmZmlfY2xvc3VyZV9hbGxvYyAoc2l6ZV90IEB2YXJ7c2l6ZX0sIHZvaWQgKipAdmFye2NvZGV9KQorQWxsb2NhdGUgYSBjaHVuayBvZiBtZW1vcnkgaG9sZGluZyBAdmFye3NpemV9IGJ5dGVzLiAgVGhpcyByZXR1cm5zIGEKK3BvaW50ZXIgdG8gdGhlIHdyaXRhYmxlIGFkZHJlc3MsIGFuZCBzZXRzICpAdmFye2NvZGV9IHRvIHRoZQorY29ycmVzcG9uZGluZyBleGVjdXRhYmxlIGFkZHJlc3MuCisKK0B2YXJ7c2l6ZX0gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gaG9sZCBhIEBjb2Rle2ZmaV9jbG9zdXJlfSBvYmplY3QuCitAZW5kIGRlZnVuCisKK0BmaW5kZXggZmZpX2Nsb3N1cmVfZnJlZQorQGRlZnVuIHZvaWQgZmZpX2Nsb3N1cmVfZnJlZSAodm9pZCAqQHZhcnt3cml0YWJsZX0pCitGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgdXNpbmcgQGNvZGV7ZmZpX2Nsb3N1cmVfYWxsb2N9LiAgVGhlIGFyZ3VtZW50IGlzCit0aGUgd3JpdGFibGUgYWRkcmVzcyB0aGF0IHdhcyByZXR1cm5lZC4KK0BlbmQgZGVmdW4KKworCitPbmNlIHlvdSBoYXZlIGFsbG9jYXRlZCB0aGUgbWVtb3J5IGZvciBhIGNsb3N1cmUsIHlvdSBtdXN0IGNvbnN0cnVjdCBhCitAY29kZXtmZmlfY2lmfSBkZXNjcmliaW5nIHRoZSBmdW5jdGlvbiBjYWxsLiAgRmluYWxseSB5b3UgY2FuIHByZXBhcmUKK3RoZSBjbG9zdXJlIGZ1bmN0aW9uOgorCitAZmluZGV4IGZmaV9wcmVwX2Nsb3N1cmVfbG9jCitAZGVmdW4gZmZpX3N0YXR1cyBmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUgKkB2YXJ7Y2xvc3VyZX0sIGZmaV9jaWYgKkB2YXJ7Y2lmfSwgdm9pZCAoKkB2YXJ7ZnVufSkgKGZmaV9jaWYgKkB2YXJ7Y2lmfSwgdm9pZCAqQHZhcntyZXR9LCB2b2lkICoqQHZhcnthcmdzfSwgdm9pZCAqQHZhcnt1c2VyX2RhdGF9KSwgdm9pZCAqQHZhcnt1c2VyX2RhdGF9LCB2b2lkICpAdmFye2NvZGVsb2N9KQorUHJlcGFyZSBhIGNsb3N1cmUgZnVuY3Rpb24uCisKK0B2YXJ7Y2xvc3VyZX0gaXMgdGhlIGFkZHJlc3Mgb2YgYSBAY29kZXtmZmlfY2xvc3VyZX0gb2JqZWN0OyB0aGlzIGlzCit0aGUgd3JpdGFibGUgYWRkcmVzcyByZXR1cm5lZCBieSBAY29kZXtmZmlfY2xvc3VyZV9hbGxvY30uCisKK0B2YXJ7Y2lmfSBpcyB0aGUgQGNvZGV7ZmZpX2NpZn0gZGVzY3JpYmluZyB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4KKworQHZhcnt1c2VyX2RhdGF9IGlzIGFuIGFyYml0cmFyeSBkYXR1bSB0aGF0IGlzIHBhc3NlZCwgdW5pbnRlcnByZXRlZCwKK3RvIHlvdXIgY2xvc3VyZSBmdW5jdGlvbi4KKworQHZhcntjb2RlbG9jfSBpcyB0aGUgZXhlY3V0YWJsZSBhZGRyZXNzIHJldHVybmVkIGJ5CitAY29kZXtmZmlfY2xvc3VyZV9hbGxvY30uCisKK0B2YXJ7ZnVufSBpcyB0aGUgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgY2xvc3VyZSBpcworaW52b2tlZC4gIEl0IGlzIGNhbGxlZCB3aXRoIHRoZSBhcmd1bWVudHM6CitAdGFibGUgQHZhcgorQGl0ZW0gY2lmCitUaGUgQGNvZGV7ZmZpX2NpZn0gcGFzc2VkIHRvIEBjb2Rle2ZmaV9wcmVwX2Nsb3N1cmVfbG9jfS4KKworQGl0ZW0gcmV0CitBIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSB1c2VkIGZvciB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuCitAdmFye2Z1bn0gbXVzdCBmaWxsIHRoaXMsIHVubGVzcyB0aGUgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgcmV0dXJuaW5nCitAY29kZXt2b2lkfS4KK0BjIEZJWE1FOiBpcyB0aGlzIE5VTEwgZm9yIHZvaWQtcmV0dXJuaW5nIGZ1bmN0aW9ucz8KKworQGl0ZW0gYXJncworQSB2ZWN0b3Igb2YgcG9pbnRlcnMgdG8gbWVtb3J5IGhvbGRpbmcgdGhlIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24uCisKK0BpdGVtIHVzZXJfZGF0YQorVGhlIHNhbWUgQHZhcnt1c2VyX2RhdGF9IHRoYXQgd2FzIHBhc3NlZCB0bworQGNvZGV7ZmZpX3ByZXBfY2xvc3VyZV9sb2N9LgorQGVuZCB0YWJsZQorCitAY29kZXtmZmlfcHJlcF9jbG9zdXJlX2xvY30gd2lsbCByZXR1cm4gQGNvZGV7RkZJX09LfSBpZiBldmVyeXRoaW5nCit3ZW50IG9rLCBhbmQgc29tZXRoaW5nIGVsc2Ugb24gZXJyb3IuCitAYyBGSVhNRTogd2hhdD8KKworQWZ0ZXIgY2FsbGluZyBAY29kZXtmZmlfcHJlcF9jbG9zdXJlX2xvY30sIHlvdSBjYW4gY2FzdCBAdmFye2NvZGVsb2N9Cit0byB0aGUgYXBwcm9wcmlhdGUgcG9pbnRlci10by1mdW5jdGlvbiB0eXBlLgorQGVuZCBkZWZ1bgorCitZb3UgbWF5IHNlZSBvbGQgY29kZSByZWZlcnJpbmcgdG8gQGNvZGV7ZmZpX3ByZXBfY2xvc3VyZX0uICBUaGlzCitmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCBhcyBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuZWVkIGZvciBzZXBhcmF0ZQord3JpdGFibGUgYW5kIGV4ZWN1dGFibGUgYWRkcmVzc2VzLgorCitAbm9kZSBDbG9zdXJlIEV4YW1wbGUKK0BzZWN0aW9uIENsb3N1cmUgRXhhbXBsZQorCitBIHRyaXZpYWwgZXhhbXBsZSB0aGF0IGNyZWF0ZXMgYSBuZXcgQGNvZGV7cHV0c30gYnkgYmluZGluZyAKK0Bjb2Rle2ZwdXRzfSB3aXRoIEBjb2Rle3N0ZGlufS4KKworQGV4YW1wbGUKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGZmaS5oPgorCisvKiBBY3RzIGxpa2UgcHV0cyB3aXRoIHRoZSBmaWxlIGdpdmVuIGF0IHRpbWUgb2YgZW5jbG9zdXJlLiAqLwordm9pZCBwdXRzX2JpbmRpbmcoZmZpX2NpZiAqY2lmLCB1bnNpZ25lZCBpbnQgKnJldCwgdm9pZCogYXJnc1tdLCAKKyAgICAgICAgICAgICAgICAgIEZJTEUgKnN0cmVhbSkKK0B7CisgICpyZXQgPSBmcHV0cygqKGNoYXIgKiopYXJnc1swXSwgc3RyZWFtKTsKK0B9CisKK2ludCBtYWluKCkKK0B7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1sxXTsKKyAgZmZpX2Nsb3N1cmUgKmNsb3N1cmU7CisKKyAgaW50ICgqYm91bmRfcHV0cykoY2hhciAqKTsKKyAgaW50IHJjOworICAKKyAgLyogQWxsb2NhdGUgY2xvc3VyZSBhbmQgYm91bmRfcHV0cyAqLworICBjbG9zdXJlID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmJvdW5kX3B1dHMpOworCisgIGlmIChjbG9zdXJlKQorICAgIEB7CisgICAgICAvKiBJbml0aWFsaXplIHRoZSBhcmd1bWVudCBpbmZvIHZlY3RvcnMgKi8KKyAgICAgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKworICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgICAgICBpZiAoZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmZmaV90eXBlX3VpbnQsIGFyZ3MpID09IEZGSV9PSykKKyAgICAgICAgQHsKKyAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBjbG9zdXJlLCBzZXR0aW5nIHN0cmVhbSB0byBzdGRvdXQgKi8KKyAgICAgICAgICBpZiAoZmZpX3ByZXBfY2xvc3VyZV9sb2MoY2xvc3VyZSwgJmNpZiwgcHV0c19iaW5kaW5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBib3VuZF9wdXRzKSA9PSBGRklfT0spCisgICAgICAgICAgICBAeworICAgICAgICAgICAgICByYyA9IGJvdW5kX3B1dHMoIkhlbGxvIFdvcmxkISIpOworICAgICAgICAgICAgICAvKiByYyBub3cgaG9sZHMgdGhlIHJlc3VsdCBvZiB0aGUgY2FsbCB0byBmcHV0cyAqLworICAgICAgICAgICAgQH0KKyAgICAgICAgQH0KKyAgICBAfQorCisgIC8qIERlYWxsb2NhdGUgYm90aCBjbG9zdXJlLCBhbmQgYm91bmRfcHV0cyAqLworICBmZmlfY2xvc3VyZV9mcmVlKGNsb3N1cmUpOworCisgIHJldHVybiAwOworQH0KKworQGVuZCBleGFtcGxlCisKKworQG5vZGUgTWlzc2luZyBGZWF0dXJlcworQGNoYXB0ZXIgTWlzc2luZyBGZWF0dXJlcworCitAY29kZXtsaWJmZml9IGlzIG1pc3NpbmcgYSBmZXcgZmVhdHVyZXMuICBXZSB3ZWxjb21lIHBhdGNoZXMgdG8gYWRkCitzdXBwb3J0IGZvciB0aGVzZS4KKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK1RoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGNhbGxpbmcgdmFyYXJncyBmdW5jdGlvbnMuICBUaGlzIG1heSB3b3JrIG9uCitzb21lIHBsYXRmb3JtcywgZGVwZW5kaW5nIG9uIGhvdyB0aGUgQUJJIGlzIGRlZmluZWQsIGJ1dCBpdCBpcyBub3QKK3JlbGlhYmxlLgorCitAaXRlbQorVGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgYml0IGZpZWxkcyBpbiBzdHJ1Y3R1cmVzLgorCitAaXRlbQorVGhlIGNsb3N1cmUgQVBJIGlzCisKK0BjIEZJWE1FOiAuLi4KKworQGl0ZW0KK1RoZSBgYHJhdycnIEFQSSBpcyB1bmRvY3VtZW50ZWQuCitAYyBhcmd1bWVudCBwcm9tb3Rpb24/CitAYyB1bmlvbnM/CitAYyBhbnl0aGluZyBlbHNlPworQGVuZCBpdGVtaXplCisKKworQG5vZGUgSW5kZXgKK0B1bm51bWJlcmVkIEluZGV4CisKK0BwcmludGluZGV4IGNwCisKK0BieWUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3N0YW1wLXZ0aSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3N0YW1wLXZ0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWQwYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2Mvc3RhbXAtdnRpCkBAIC0wLDAgKzEsNCBAQAorQHNldCBVUERBVEVEIDE0IEZlYnJ1YXJ5IDIwMDgKK0BzZXQgVVBEQVRFRC1NT05USCBGZWJydWFyeSAyMDA4CitAc2V0IEVESVRJT04gMy4wLjgKK0BzZXQgVkVSU0lPTiAzLjAuOApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvdmVyc2lvbi50ZXhpIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvdmVyc2lvbi50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZDBiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy92ZXJzaW9uLnRleGkKQEAgLTAsMCArMSw0IEBACitAc2V0IFVQREFURUQgMTQgRmVicnVhcnkgMjAwOAorQHNldCBVUERBVEVELU1PTlRIIEZlYnJ1YXJ5IDIwMDgKK0BzZXQgRURJVElPTiAzLjAuOAorQHNldCBWRVJTSU9OIDMuMC44CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5oLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcuaC5pbgppbmRleCAwN2ZhNTM3Li5lMDNiYmY5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5oLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLmguaW4KQEAgLTEsNSArMSw4IEBACiAvKiBmZmljb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KIAorLyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAqLworI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorCiAvKiBEZWZpbmUgdG8gb25lIG9mIGBfZ2V0YjY3JywgYEdFVEI2NycsIGBnZXRiNjcnIGZvciBDcmF5LTIgYW5kIENyYXktWU1QCiAgICBzeXN0ZW1zLiBUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZvciBgYWxsb2NhLmMnIHN1cHBvcnQgb24gdGhvc2Ugc3lzdGVtcy4KICAgICovCkBAIC0xNCw2ICsxNyw5IEBACiAvKiBEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCBleHRyYSBkZWJ1Z2dpbmcuICovCiAjdW5kZWYgRkZJX0RFQlVHCiAKKy8qIENhbm5vdCB1c2UgbWFsbG9jIG9uIHRoaXMgdGFyZ2V0LCBzbywgd2UgcmV2ZXJ0IHRvIGFsdGVybmF0aXZlIG1lYW5zICovCisjdW5kZWYgRkZJX01NQVBfRVhFQ19XUklUCisKIC8qIERlZmluZSB0aGlzIGlzIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciB0aGUgcmF3IEFQSS4gKi8KICN1bmRlZiBGRklfTk9fUkFXX0FQSQogCkBAIC0zNyw2ICs0Myw5IEBACiAgICAqLwogI3VuZGVmIEhBVkVfQVNfU1BBUkNfVUFfUENSRUwKIAorLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIFBDIHJlbGF0aXZlIHJlbG9jcy4gKi8KKyN1bmRlZiBIQVZFX0FTX1g4Nl9QQ1JFTAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfRExGQ05fSAogCkBAIC05NCw2ICsxMDMsMTAgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfVU5JU1REX0gKIAorLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4KKyAgICovCisjdW5kZWYgTFRfT0JKRElSCisKIC8qIERlZmluZSB0byAxIGlmIHlvdXIgQyBjb21waWxlciBkb2Vzbid0IGFjY2VwdCAtYyBhbmQgLW8gdG9nZXRoZXIuICovCiAjdW5kZWYgTk9fTUlOVVNfQ19NSU5VU19PCiAKQEAgLTExMiw2ICsxMjUsOSBAQAogLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwogI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQogCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVVJMCisKIC8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCiAjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCiAKQEAgLTEzOSw5ICsxNTUsMTcgQEAKIC8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KICN1bmRlZiBWRVJTSU9OCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUKLSAgIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsIGFuZCBWQVgpLiAqLwotI3VuZGVmIFdPUkRTX0JJR0VORElBTgorLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBlbmRpZgorI2VuZGlmCiAKIAogI2lmZGVmIEhBVkVfSElEREVOX1ZJU0lCSUxJVFlfQVRUUklCVVRFCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLnB5LmluCmluZGV4IDA0NWQ3YzMuLjI3Yzk3MWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLnB5LmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLnB5LmluCkBAIC0xLDEyICsxLDE0IEBACiBmZmlfc291cmNlcyA9ICIiIgogc3JjL3ByZXBfY2lmLmMKK3NyYy9jbG9zdXJlcy5jCitzcmMvZGxtYWxsb2MuYwogIiIiLnNwbGl0KCkKIAogZmZpX3BsYXRmb3JtcyA9IHsKICAgICAnTUlQU19JUklYJzogWydzcmMvbWlwcy9mZmkuYycsICdzcmMvbWlwcy9vMzIuUycsICdzcmMvbWlwcy9uMzIuUyddLAogICAgICdNSVBTX0xJTlVYJzogWydzcmMvbWlwcy9mZmkuYycsICdzcmMvbWlwcy9vMzIuUyddLAogICAgICdYODYnOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni9zeXN2LlMnXSwKLSAgICAnWDg2X0ZSRUVCU0QnOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni9zeXN2LlMnXSwKKyAgICAnWDg2X0ZSRUVCU0QnOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni9mcmVlYnNkLlMnXSwKICAgICAnWDg2X1dJTjMyJzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvd2luMzIuUyddLAogICAgICdTUEFSQyc6IFsnc3JjL3NwYXJjL2ZmaS5jJywgJ3NyYy9zcGFyYy92OC5TJywgJ3NyYy9zcGFyYy92OS5TJ10sCiAgICAgJ0FMUEhBJzogWydzcmMvYWxwaGEvZmZpLmMnLCAnc3JjL2FscGhhL29zZi5TJ10sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuYW0gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuYW0KaW5kZXggNmI3MTMxOC4uZmQyODAyNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmFtCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9NYWtlZmlsZS5hbQpAQCAtNiw0ICs2LDQgQEAKIEVYVFJBX0RJU1Q9ZmZpLmguaW4gZmZpX2NvbW1vbi5oCiAKIGluY2x1ZGVzZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFX05BTUVALUBQQUNLQUdFX1ZFUlNJT05AL2luY2x1ZGUKLW5vZGlzdF9pbmNsdWRlc19IRUFERVJTID0gZmZpLmggZmZpdGFyZ2V0LmggCitub2Rpc3RfaW5jbHVkZXNfSEVBREVSUyA9IGZmaS5oIGZmaXRhcmdldC5oCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuaW4KaW5kZXggZjBjOWZlMi4uMTM2ZjM2YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9NYWtlZmlsZS5pbgpAQCAtMSw4ICsxLDkgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEgZnJvbSBNYWtlZmlsZS5hbS4KICMgQGNvbmZpZ3VyZV9pbnB1dEAKIAogIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTE2LDggKzE3LDkgQEAKIAogVlBBVEggPSBAc3JjZGlyQAogcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACiBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAogYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAogaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKQEAgLTQxLDkgKzQzLDEwIEBACiAJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKIGFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCiAJJChBQ0xPQ0FMX000KQotbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKIENPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvZmZpY29uZmlnLmgKIENPTkZJR19DTEVBTl9GSUxFUyA9IGZmaS5oIGZmaXRhcmdldC5oCitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQogU09VUkNFUyA9CiBESVNUX1NPVVJDRVMgPQogYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CkBAIC01MSw5ICs1NCwyMyBAQAogICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCiAgICAgKikgZj0kJHA7OyBcCiAgIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChpbmNsdWRlc2RpcikiCi1ub2Rpc3RfaW5jbHVkZXNIRUFERVJTX0lOU1RBTEwgPSAkKElOU1RBTExfSEVBREVSKQogSEVBREVSUyA9ICQobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpCiBFVEFHUyA9IGV0YWdzCiBDVEFHUyA9IGN0YWdzCkBAIC03NSwyMSArOTIsMTcgQEAKIENGTEFHUyA9IEBDRkxBR1NACiBDUFAgPSBAQ1BQQAogQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKIERFRlMgPSBAREVGU0AKIERFUERJUiA9IEBERVBESVJACi1FQ0hPID0gQEVDSE9ACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKIEVDSE9fQyA9IEBFQ0hPX0NACiBFQ0hPX04gPSBARUNIT19OQAogRUNIT19UID0gQEVDSE9fVEAKIEVHUkVQID0gQEVHUkVQQAogRVhFRVhUID0gQEVYRUVYVEAKLUY3NyA9IEBGNzdACi1GRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACiBHUkVQID0gQEdSRVBACiBIQVZFX0xPTkdfRE9VQkxFID0gQEhBVkVfTE9OR19ET1VCTEVACiBJTlNUQUxMID0gQElOU1RBTExACkBAIC05NywxNiArMTEwLDIzIEBACiBJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAogSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACiBJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEQgPSBATERACiBMREZMQUdTID0gQExERkxBR1NACiBMSUJPQkpTID0gQExJQk9CSlNACiBMSUJTID0gQExJQlNACiBMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACiBMTl9TID0gQExOX1NACiBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAogTUFJTlQgPSBATUFJTlRACiBNQUtFSU5GTyA9IEBNQUtFSU5GT0AKIE1LRElSX1AgPSBATUtESVJfUEAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKIE9CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKIFBBQ0tBR0UgPSBAUEFDS0FHRUAKIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAogUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKQEAgLTEyNyw4ICsxNDcsNyBAQAogYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAogYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACiBhY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAogYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKQEAgLTE1OSw2ICsxNzgsNyBAQAogbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAogbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKIGxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKIG1hbmRpciA9IEBtYW5kaXJACiBta2Rpcl9wID0gQG1rZGlyX3BACiBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACkBAIC0xNzcsMTMgKzE5NywxNCBAQAogdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAogdG9vbGV4ZWNkaXIgPSBAdG9vbGV4ZWNkaXJACiB0b29sZXhlY2xpYmRpciA9IEB0b29sZXhlY2xpYmRpckAKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACiB0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACiBBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbgogRElTVENMRUFORklMRVMgPSBmZml0YXJnZXQuaAogRVhUUkFfRElTVCA9IGZmaS5oLmluIGZmaV9jb21tb24uaAogaW5jbHVkZXNkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VfTkFNRUAtQFBBQ0tBR0VfVkVSU0lPTkAvaW5jbHVkZQotbm9kaXN0X2luY2x1ZGVzX0hFQURFUlMgPSBmZmkuaCBmZml0YXJnZXQuaCAKK25vZGlzdF9pbmNsdWRlc19IRUFERVJTID0gZmZpLmggZmZpdGFyZ2V0LmgKIGFsbDogYWxsLWFtCiAKIC5TVUZGSVhFUzoKQEAgLTE5MSwxNCArMjEyLDE0IEBACiAJQGZvciBkZXAgaW4gJD87IGRvIFwKIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAogCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAogCSAgICAgIGV4aXQgMTs7IFwKIAkgIGVzYWM7IFwKIAlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBpbmNsdWRlL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBpbmNsdWRlL01ha2VmaWxlCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGluY2x1ZGUvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGluY2x1ZGUvTWFrZWZpbGUKIC5QUkVDSU9VUzogTWFrZWZpbGUKIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKIAlAY2FzZSAnJD8nIGluIFwKQEAgLTIxNiw2ICsyMzcsNyBAQAogCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAogJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgogZmZpLmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9mZmkuaC5pbgogCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACiAKQEAgLTIyNyw2NSArMjQ5LDcyIEBACiBpbnN0YWxsLW5vZGlzdF9pbmNsdWRlc0hFQURFUlM6ICQobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpCiAJQCQoTk9STUFMX0lOU1RBTEwpCiAJdGVzdCAteiAiJChpbmNsdWRlc2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGluY2x1ZGVzZGlyKSIKLQlAbGlzdD0nJChub2Rpc3RfaW5jbHVkZXNfSEVBREVSUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChub2Rpc3RfaW5jbHVkZXNfSEVBREVSUyknOyB0ZXN0IC1uICIkKGluY2x1ZGVzZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQobm9kaXN0X2luY2x1ZGVzSEVBREVSU19JTlNUQUxMKSAnJCRkJCRwJyAnJChERVNURElSKSQoaW5jbHVkZXNkaXIpLyQkZiciOyBcCi0JICAkKG5vZGlzdF9pbmNsdWRlc0hFQURFUlNfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKGluY2x1ZGVzZGlyKS8kJGYiOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGluY2x1ZGVzZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChpbmNsdWRlc2RpcikiIHx8IGV4aXQgJCQ/OyBcCiAJZG9uZQogCiB1bmluc3RhbGwtbm9kaXN0X2luY2x1ZGVzSEVBREVSUzoKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKG5vZGlzdF9pbmNsdWRlc19IRUFERVJTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQoaW5jbHVkZXNkaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoaW5jbHVkZXNkaXIpLyQkZiI7IFwKLQlkb25lCisJQGxpc3Q9JyQobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpJzsgdGVzdCAtbiAiJChpbmNsdWRlc2RpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoaW5jbHVkZXNkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoaW5jbHVkZXNkaXIpIiAmJiBybSAtZiAkJGZpbGVzCiAKIElEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCiAJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKIAl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAogCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKIAkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKIAlta2lkIC1mSUQgJCR1bmlxdWUKIHRhZ3M6IFRBR1MKIAogVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAogCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAorCXNldCB4OyBcCiAJaGVyZT1gcHdkYDsgXAogCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAogCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAogCWZpCiBjdGFnczogQ1RBR1MKIENUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCiAJCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAogCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAogCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCisJICAgICAkJHVuaXF1ZQogCiBHVEFHUzoKIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgogCiBkaXN0Y2xlYW4tdGFnczoKIAktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwpAQCAtMzA2LDEzICszMzUsMTcgQEAKIAkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCiAJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKIAkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKIAkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCiAJICAgIHx8IGV4aXQgMTsgXAogCSAgZmk7IFwKIAlkb25lCkBAIC0zNDMsNiArMzc2LDcgQEAKIAogZGlzdGNsZWFuLWdlbmVyaWM6CiAJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCiAJLXRlc3QgLXogIiQoRElTVENMRUFORklMRVMpIiB8fCBybSAtZiAkKERJU1RDTEVBTkZJTEVTKQogCiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CkBAIC0zNjIsNiArMzk2LDggQEAKIAogaHRtbDogaHRtbC1hbQogCitodG1sLWFtOgorCiBpbmZvOiBpbmZvLWFtCiAKIGluZm8tYW06CkBAIC0zNzAsMTggKzQwNiwyOCBAQAogCiBpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KIAoraW5zdGFsbC1kdmktYW06CisKIGluc3RhbGwtZXhlYy1hbToKIAogaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KIAoraW5zdGFsbC1odG1sLWFtOgorCiBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQogCitpbnN0YWxsLWluZm8tYW06CisKIGluc3RhbGwtbWFuOgogCiBpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KIAoraW5zdGFsbC1wZGYtYW06CisKIGluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KIAoraW5zdGFsbC1wcy1hbToKKwogaW5zdGFsbGNoZWNrLWFtOgogCiBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCkBAIC00MTcsNiArNDYzLDcgQEAKIAltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCiAJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1ub2Rpc3RfaW5jbHVkZXNIRUFERVJTCiAKKwogIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgogLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaS5oLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaS5oLmluCmluZGV4IDdkZjNiMDYuLmRmN2QyY2QgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmkuaC5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpLmguaW4KQEAgLTU3LDkgKzU3LDcgQEAKICNlbmRpZgogCiAvKiBTcGVjaWZ5IHdoaWNoIGFyY2hpdGVjdHVyZSBsaWJmZmkgaXMgY29uZmlndXJlZCBmb3IuICovCi0jaWZuZGVmIEBUQVJHRVRACiAjZGVmaW5lIEBUQVJHRVRACi0jZW5kaWYKIAogLyogLS0tLSBTeXN0ZW0gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNjcsNiArNjUsMTAgQEAKIAogI2lmbmRlZiBMSUJGRklfQVNNCiAKKyNpZmRlZiBfTVNDX1ZFUgorI2RlZmluZSBfX2F0dHJpYnV0ZV9fKFgpCisjZW5kaWYKKwogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCkBAIC0yNDksMTIgKzI1MSwxOSBAQAogCiAjaWYgRkZJX0NMT1NVUkVTCiAKKyNpZmRlZiBfTVNDX1ZFUgorX19kZWNsc3BlYyhhbGlnbig4KSkKKyNlbmRpZgogdHlwZWRlZiBzdHJ1Y3QgewogICBjaGFyIHRyYW1wW0ZGSV9UUkFNUE9MSU5FX1NJWkVdOwogICBmZmlfY2lmICAgKmNpZjsKICAgdm9pZCAgICAgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKik7CiAgIHZvaWQgICAgICAqdXNlcl9kYXRhOworI2lmZGVmIF9fR05VQ19fCiB9IGZmaV9jbG9zdXJlIF9fYXR0cmlidXRlX18oKGFsaWduZWQgKDgpKSk7CisjZWxzZQorfSBmZmlfY2xvc3VyZTsKKyNlbmRpZgogCiB2b2lkICpmZmlfY2xvc3VyZV9hbGxvYyAoc2l6ZV90IHNpemUsIHZvaWQgKipjb2RlKTsKIHZvaWQgZmZpX2Nsb3N1cmVfZnJlZSAodm9pZCAqKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmlfY29tbW9uLmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpX2NvbW1vbi5oCmluZGV4IDZhZjRiNWYuLjQyY2FjZTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmlfY29tbW9uLmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaV9jb21tb24uaApAQCAtMTgsNyArMTgsMTAgQEAKIC8qIERvIG5vdCBtb3ZlIHRoaXMuIFNvbWUgdmVyc2lvbnMgb2YgQUlYIGFyZSB2ZXJ5IHBpY2t5IGFib3V0IHdoZXJlCiAgICB0aGlzIGlzIHBvc2l0aW9uZWQuICovCiAjaWZkZWYgX19HTlVDX18KKy8qIG1pbmd3NjQgZGVmaW5lcyB0aGlzIGFscmVhZHkgaW4gbWFsbG9jLmguICovCisjaWZuZGVmIGFsbG9jYQogIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyNlbmRpZgogIyBkZWZpbmUgTUFZQkVfVU5VU0VEIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQogI2Vsc2UKICMgZGVmaW5lIE1BWUJFX1VOVVNFRApAQCAtMjksNyArMzIsMTEgQEAKICAjcHJhZ21hIGFsbG9jYQogIyAgZWxzZQogIyAgIGlmbmRlZiBhbGxvY2EgLyogcHJlZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovCisjICAgIGlmZGVmIF9NU0NfVkVSCisjICAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICAgZWxzZQogY2hhciAqYWxsb2NhICgpOworIyAgICBlbmRpZgogIyAgIGVuZGlmCiAjICBlbmRpZgogIyBlbmRpZgpAQCAtNzcsNiArODQsMjIgQEAKIH0gZXh0ZW5kZWRfY2lmOwogCiAvKiBUZXJzZSBzaXplZCB0eXBlIGRlZmluaXRpb25zLiAgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fc2dpKQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJTlQ4OwordHlwZWRlZiBzaWduZWQgY2hhciAgIFNJTlQ4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSU5UMTY7Cit0eXBlZGVmIHNpZ25lZCBzaG9ydCAgIFNJTlQxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQzMjsKK3R5cGVkZWYgc2lnbmVkIGludCAgIFNJTlQzMjsKKyMgaWZkZWYgX01TQ19WRVIKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBVSU5UNjQ7Cit0eXBlZGVmIHNpZ25lZCBfX2ludDY0ICAgU0lOVDY0OworIyBlbHNlCisjIGluY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIHVpbnQ2NF90IFVJTlQ2NDsKK3R5cGVkZWYgaW50NjRfdCAgU0lOVDY0OworIyBlbmRpZgorI2Vsc2UKIHR5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQ4ICBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7CiB0eXBlZGVmIHNpZ25lZCBpbnQgICBTSU5UOCAgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDE2IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElfXykpKTsKQEAgLTg1LDYgKzEwOCw3IEBACiB0eXBlZGVmIHNpZ25lZCBpbnQgICBTSU5UMzIgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDY0IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKIHR5cGVkZWYgc2lnbmVkIGludCAgIFNJTlQ2NCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7CisjZW5kaWYKIAogdHlwZWRlZiBmbG9hdCBGTE9BVDMyOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS5wYy5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGliZmZpLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTFjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS5wYy5pbgpAQCAtMCwwICsxLDEwIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj0ke2xpYmRpcn0vQFBBQ0tBR0VfTkFNRUAtQFBBQ0tBR0VfVkVSU0lPTkAvaW5jbHVkZQorCitOYW1lOiBAUEFDS0FHRV9OQU1FQAorRGVzY3JpcHRpb246IExpYnJhcnkgc3VwcG9ydGluZyBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZXMKK1ZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACitMaWJzOiAtTCR7bGliZGlyfSAtbGZmaQorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGlidG9vbC12ZXJzaW9uIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJ0b29sLXZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiODBlMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGlidG9vbC12ZXJzaW9uCkBAIC0wLDAgKzEsMjkgQEAKKyMgVGhpcyBmaWxlIGlzIHVzZWQgdG8gbWFpbnRhaW4gbGlidG9vbCB2ZXJzaW9uIGluZm8gZm9yIGxpYmZmaS4gIFNlZQorIyB0aGUgbGlidG9vbCBtYW51YWwgdG8gdW5kZXJzdGFuZCB0aGUgbWVhbmluZyBvZiB0aGUgZmllbGRzLiAgVGhpcyBpcworIyBhIHNlcGFyYXRlIGZpbGUgc28gdGhhdCB2ZXJzaW9uIHVwZGF0ZXMgZG9uJ3QgaW52b2x2ZSByZS1ydW5uaW5nCisjIGF1dG9tYWtlLgorIworIyBIZXJlIGFyZSBhIHNldCBvZiBydWxlcyB0byBoZWxwIHlvdSB1cGRhdGUgeW91ciBsaWJyYXJ5IHZlcnNpb24KKyMgaW5mb3JtYXRpb246CisjIAorIyAxLiBTdGFydCB3aXRoIHZlcnNpb24gaW5mb3JtYXRpb24gb2YgYDA6MDowJyBmb3IgZWFjaCBsaWJ0b29sIGxpYnJhcnkuCisjCisjIDIuIFVwZGF0ZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBvbmx5IGltbWVkaWF0ZWx5IGJlZm9yZSBhIHB1YmxpYworIyAgICByZWxlYXNlIG9mIHlvdXIgc29mdHdhcmUuIE1vcmUgZnJlcXVlbnQgdXBkYXRlcyBhcmUgdW5uZWNlc3NhcnksCisjICAgIGFuZCBvbmx5IGd1YXJhbnRlZSB0aGF0IHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgZ2V0cyBsYXJnZXIKKyMgICAgZmFzdGVyLgorIworIyAzLiBJZiB0aGUgbGlicmFyeSBzb3VyY2UgY29kZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlIGxhc3QKKyMgICAgdXBkYXRlLCB0aGVuIGluY3JlbWVudCByZXZpc2lvbiAoYGM6cjphJyBiZWNvbWVzIGBjOnIrMTphJykuCisjCisjIDQuIElmIGFueSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZCwgcmVtb3ZlZCwgb3IgY2hhbmdlZCBzaW5jZSB0aGUKKyMgICAgbGFzdCB1cGRhdGUsIGluY3JlbWVudCBjdXJyZW50LCBhbmQgc2V0IHJldmlzaW9uIHRvIDAuCisjCisjIDUuIElmIGFueSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUgbGFzdCBwdWJsaWMgcmVsZWFzZSwKKyMgICAgdGhlbiBpbmNyZW1lbnQgYWdlLgorIworIyA2LiBJZiBhbnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSB0aGUgbGFzdCBwdWJsaWMKKyMgICAgcmVsZWFzZSwgdGhlbiBzZXQgYWdlIHRvIDAuCisjCisjIENVUlJFTlQ6UkVWSVNJT046QUdFCis1OjEwOjAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbHRtYWluLnNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9sdG1haW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjkzOWRjYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbHRtYWluLnNoCkBAIC0wLDAgKzEsODQwNiBAQAorIyBHZW5lcmF0ZWQgZnJvbSBsdG1haW4ubTRzaC4KKworIyBsdG1haW4uc2ggKEdOVSBsaWJ0b29sKSAyLjIuNgorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLAorIyBvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIFVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorIworIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMKKyMgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisjIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworIyAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisjICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQorIyAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworIyAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworIyAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAoZGVmYXVsdCkKKyMgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKyMgLWgsIC0taGVscCAgICAgICAgICAgICAgIHByaW50IHNob3J0IG9yIGxvbmcgaGVscCBtZXNzYWdlCisjCisjIE1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyMgICAgICAgY29tcGlsZSAgICAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyMgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCisjICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisjICAgICAgIGluc3RhbGwgICAgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworIyAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCisjICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorIworIyBNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuCisjIFRyeSBgJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgorIworIyBXaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKKyMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorIworIyAgICAgICBob3N0LXRyaXBsZXQ6CSRob3N0CisjICAgICAgIHNoZWxsOgkJJFNIRUxMCisjICAgICAgIGNvbXBpbGVyOgkJJExUQ0MKKyMgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyMgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyMgICAgICAgJHByb2duYW1lOgkJKEdOVSBsaWJ0b29sKSAyLjIuNgorIyAgICAgICBhdXRvbWFrZToJCSRhdXRvbWFrZV92ZXJzaW9uCisjICAgICAgIGF1dG9jb25mOgkJJGF1dG9jb25mX3ZlcnNpb24KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorCitQUk9HUkFNPWx0bWFpbi5zaAorUEFDS0FHRT1saWJ0b29sCitWRVJTSU9OPTIuMi42CitUSU1FU1RBTVA9IiIKK3BhY2thZ2VfcmV2aXNpb249MS4zMDEyCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCisjIE9ubHkgc2V0IExBTkcgYW5kIExDX0FMTCB0byBDIGlmIGFscmVhZHkgc2V0LgorIyBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGJlY2F1c2Ugbm90IGFsbCBzeXN0ZW1zIHVuZGVyc3RhbmQKKyMgZS5nLiBMQU5HPUMgKG5vdGFibHkgU0NPKS4KK2x0X3VzZXJfbG9jYWxlPQorbHRfc2FmZV9sb2NhbGU9Citmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKK2RvCisgIGV2YWwgImlmIHRlc3QgXCJcJHskbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgIHNhdmVfJGx0X3Zhcj1cJCRsdF92YXIKKyAgICAgICAgICAkbHRfdmFyPUMKKwkgIGV4cG9ydCAkbHRfdmFyCisJICBsdF91c2VyX2xvY2FsZT1cIiRsdF92YXI9XFxcJHNhdmVfXCRsdF92YXI7IFwkbHRfdXNlcl9sb2NhbGVcIgorCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgorCWZpIgorZG9uZQorCiskbHRfdW5zZXQgQ0RQQVRICisKKworCisKKworOiAke0NQPSJjcCAtZiJ9Cis6ICR7RUNITz0iZWNobyJ9Cis6ICR7RUdSRVA9Ii9iaW4vZ3JlcCAtRSJ9Cis6ICR7RkdSRVA9Ii9iaW4vZ3JlcCAtRiJ9Cis6ICR7R1JFUD0iL2Jpbi9ncmVwIn0KKzogJHtMTl9TPSJsbiAtcyJ9Cis6ICR7TUFLRT0ibWFrZSJ9Cis6ICR7TUtESVI9Im1rZGlyIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9Cis6ICR7U0VEPSIvYmluL3NlZCJ9Cis6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKzogJHtYc2VkPSIkU0VEIC1lIDFzL15YLy8ifQorCisjIEdsb2JhbCB2YXJpYWJsZXM6CitFWElUX1NVQ0NFU1M9MAorRVhJVF9GQUlMVVJFPTEKK0VYSVRfTUlTTUFUQ0g9NjMgICMgJD8gPSA2MyBpcyB1c2VkIHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2ggdG8gbWlzc2luZy4KK0VYSVRfU0tJUD03NwkgICMgJD8gPSA3NyBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2tpcHBlZCB0ZXN0IHRvIGF1dG9tYWtlLgorCitleGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCisKKyMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0CitsdF9ubD0nCisnCitJRlM9IiAJJGx0X25sIgorCitkaXJuYW1lPSJzLC9bXi9dKiQsLCIKK2Jhc2VuYW1lPSJzLF4uKi8sLCIKKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRkaXJuYW1lImAKKyAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICBlbHNlCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICBmaQorICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorfQorCisjIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS4KKworIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCisjIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgorIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQorIyBmdW5jdGlvbi4KK3Byb2dwYXRoPSIkMCIKKworIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW06CisjIEluIHRoZSB1bmxpa2VseSBldmVudCAkcHJvZ25hbWUgYmVnYW4gd2l0aCBhICctJywgaXQgd291bGQgcGxheSBoYXZvYyB3aXRoCisjIGZ1bmNfZWNobyAoaW1hZ2luZSBwcm9nbmFtZT0tbiksIHNvIHdlIHByZXBlbmQgLi8gaW4gdGhhdCBjYXNlOgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJHByb2dwYXRoIgorcHJvZ25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CitjYXNlICRwcm9nbmFtZSBpbgorICAtKikgcHJvZ25hbWU9Li8kcHJvZ25hbWUgOzsKK2VzYWMKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIGZvciByZWV4ZWN1dGlvbjoKK2Nhc2UgJHByb2dwYXRoIGluCisgIFtcXC9dKnxbQS1aYS16XTpcXCopIDs7CisgICpbXFwvXSopCisgICAgIHByb2dkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgcHJvZ2Rpcj1gY2QgIiRwcm9nZGlyIiAmJiBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7CisgICopCisgICAgIHNhdmVfSUZTPSIkSUZTIgorICAgICBJRlM9OgorICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KKyAgICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgUmUtYFwnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBkb3VibGVfcXVvdGVfc3Vic3QgdGhhdCB3ZXJlCisjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KKyMgU2luY2UgZWFjaCBpbnB1dCBgXCcgaXMgbm93IHR3byBgXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyIG9mIHJ1bnMgb2YKKyMgZm91ciBgXCdzIGZvbGxvd2VkIGJ5IHR3byBgXCdzIGFuZCB0aGVuIGEgJyQnLiAgYFwnIHRoYXQgJyQnLgorYnM9J1xcJworYnMyPSdcXFxcJworYnM0PSdcXFxcXFxcXCcKK2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRiczQvJlxcCisvZworICBzL14kYnMyJGRvbGxhci8kYnMmLworICBzL1xcKFteJGJzXVxcKSRiczIkZG9sbGFyL1xcMSRiczIkYnMkZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworIyBTdGFuZGFyZCBvcHRpb25zOgorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9oZWxwPWZhbHNlCitvcHRfcXVpZXQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCitvcHRfd2FybmluZz06CisKKyMgZnVuY19lY2hvIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IG1vZGUKKyMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorZnVuY19lY2hvICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogJCoiCit9CisKKyMgZnVuY192ZXJib3NlIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgorZnVuY192ZXJib3NlICgpCit7CisgICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworIyBmdW5jX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY19lcnJvciAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICIkezErIiRAIn0gMT4mMgorfQorCisjIGZ1bmNfd2FybmluZyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6IHdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorCisgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICA6Cit9CisKKyMgZnVuY19mYXRhbF9lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworIyBmdW5jX2ZhdGFsX2hlbHAgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfaGVscCAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19mYXRhbF9lcnJvciAiJGhlbHAiCit9CitoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICAjIyBkZWZhdWx0CisKKworIyBmdW5jX2dyZXAgZXhwcmVzc2lvbiBmaWxlbmFtZQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX21rZGlyX3AgZGlyZWN0b3J5LXBhdGgKKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICBteV9kaXJlY3RvcnlfcGF0aD0iJDEiCisgICAgbXlfZGlyX2xpc3Q9CisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgIiRvcHRfZHJ5X3J1biIgIT0gIjoiOyB0aGVuCisKKyAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScKKyAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluCisgICAgICAgIC0qKSBteV9kaXJlY3RvcnlfcGF0aD0iLi8kbXlfZGlyZWN0b3J5X3BhdGgiIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBteV9kaXJfbGlzdD0iJG15X2RpcmVjdG9yeV9wYXRoOiRteV9kaXJfbGlzdCIKKworICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCisgICAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYworCisgICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAorICAgICAgICBteV9kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIlgkbXlfZGlyZWN0b3J5X3BhdGgiIHwgJFhzZWQgLWUgIiRkaXJuYW1lImAKKyAgICAgIGRvbmUKKyAgICAgIG15X2Rpcl9saXN0PWAkRUNITyAiWCRteV9kaXJfbGlzdCIgfCAkWHNlZCAtZSAncyw6KiQsLCdgCisKKyAgICAgIHNhdmVfbWtkaXJfcF9JRlM9IiRJRlMiOyBJRlM9JzonCisgICAgICBmb3IgbXlfZGlyIGluICRteV9kaXJfbGlzdDsgZG8KKwlJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSBgRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcworICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAorICAgICAgICAjIHN0b3AgaW4gdGhhdCBjYXNlIQorICAgICAgICAkTUtESVIgIiRteV9kaXIiIDI+L2Rldi9udWxsIHx8IDoKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisKKyAgICAgICMgQmFpbCBvdXQgaWYgd2UgKG9yIHNvbWUgb3RoZXIgcHJvY2VzcykgZmFpbGVkIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeS4KKyAgICAgIHRlc3QgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlIFxgJDEnIgorICAgIGZpCit9CisKKworIyBmdW5jX21rdGVtcGRpciBbc3RyaW5nXQorIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZworIyBsaWJ0b29sIHByb2Nlc3NlcywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgcG9zc2libGUuICBJZgorIyBnaXZlbiwgU1RSSU5HIGlzIHRoZSBiYXNlbmFtZSBmb3IgdGhhdCBkaXJlY3RvcnkuCitmdW5jX21rdGVtcGRpciAoKQoreworICAgIG15X3RlbXBsYXRlPSIke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfSIKKworICAgIGlmIHRlc3QgIiRvcHRfZHJ5X3J1biIgPSAiOiI7IHRoZW4KKyAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCisgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSQkIgorICAgIGVsc2UKKworICAgICAgIyBJZiBta3RlbXAgd29ya3MsIHVzZSB0aGF0IGZpcnN0IGFuZCBmb3JlbW9zdAorICAgICAgbXlfdG1wZGlyPWBta3RlbXAgLWQgIiR7bXlfdGVtcGxhdGV9LVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKKworICAgICAgaWYgdGVzdCAhIC1kICIkbXlfdG1wZGlyIjsgdGhlbgorICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKKyAgICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgorCisgICAgICAgIHNhdmVfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKKyAgICAgICAgdW1hc2sgMDA3NworICAgICAgICAkTUtESVIgIiRteV90bXBkaXIiCisgICAgICAgIHVtYXNrICRzYXZlX21rdGVtcGRpcl91bWFzaworICAgICAgZmkKKworICAgICAgIyBJZiB3ZSdyZSBub3QgaW4gZHJ5LXJ1biBtb2RlLCBib21iIG91dCBvbiBmYWlsdXJlCisgICAgICB0ZXN0IC1kICIkbXlfdG1wZGlyIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIgorICAgIGZpCisKKyAgICAkRUNITyAiWCRteV90bXBkaXIiIHwgJFhzZWQKK30KKworCisjIGZ1bmNfcXVvdGVfZm9yX2V2YWwgYXJnCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlci4KKyMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6IEZVTkNfUVVPVEVfRk9SX0VWQUxfUkVTVUxUCisjIGlzIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbCwgd2hlcmVhcworIyBGVU5DX1FVT1RFX0ZPUl9FVkFMX1VOUVVPVEVEX1JFU1VMVCBoYXMgbWVyZWx5IGFsbCBjaGFyYWN0ZXJzCisjIHdoaWNoIGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZSBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCitmdW5jX3F1b3RlX2Zvcl9ldmFsICgpCit7CisgICAgY2FzZSAkMSBpbgorICAgICAgKltcXFxgXCJcJF0qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PWAkRUNITyAiWCQxIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgYW5kIHZhcmlhYmxlCisgICAgICAjIGV4cGFuc2lvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iXCIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHRcIiIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiCisgICAgZXNhYworfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXI7IHNhbWUgYXMgYWJvdmUsCisjIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2Z1bmNfcXVvdGVfZm9yX2V4cGFuZCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXSopCisJbXlfYXJnPWAkRUNITyAiWCQxIiB8ICRYc2VkIFwKKwkgICAgLWUgIiRkb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworICAgICAgKikKKyAgICAgICAgbXlfYXJnPSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRteV9hcmcgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZyBhbmQgY29tbWFuZCBzdWJzdGl0dXRpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgbXlfYXJnPSJcIiRteV9hcmdcIiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0PSIkbXlfYXJnIgorfQorCisKKyMgZnVuY19zaG93X2V2YWwgY21kIFtmYWlsX2V4cF0KKyMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCitmdW5jX3Nob3dfZXZhbCAoKQoreworICAgIG15X2NtZD0iJDEiCisgICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKworICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKyAgICAgIGV2YWwgIiRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKyMgZnVuY19zaG93X2V2YWxfbG9jYWxlIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LiAgVXNlIHRoZSBzYXZlZCBsb2NhbGUgZm9yIGV2YWx1YXRpb24uCitmdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbHRfdXNlcl9sb2NhbGUKKwkgICAgJG15X2NtZCIKKyAgICAgIG15X3N0YXR1cz0kPworICAgICAgZXZhbCAiJGx0X3NhZmVfbG9jYWxlIgorICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQorCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgICBmaQorICAgIGZpCit9CisKKworCisKKworIyBmdW5jX3ZlcnNpb24KKyMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY192ZXJzaW9uICgpCit7CisgICAgJFNFRCAtbiAnL14jICckUFJPR1JBTScgKEdOVSAvLC8jIHdhcnJhbnR5OyAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworICAgICAgICBzL1woKEMpXClbIDAtOSwtXSpcKCBbMS05XVswLTldKlwpL1wxXDIvCisgICAgICAgIHAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorICAgICBleGl0ICQ/Cit9CisKKyMgZnVuY191c2FnZQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3VzYWdlICgpCit7CisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgLWgvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMvXCRwcm9nbmFtZS8nJHByb2duYW1lJy8KKwlwCisgICAgfScgPCAiJHByb2dwYXRoIgorICAgICRFQ0hPCisgICAgJEVDSE8gInJ1biBcYCRwcm9nbmFtZSAtLWhlbHAgfCBtb3JlJyBmb3IgZnVsbCB1c2FnZSIKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19oZWxwCisjIEVjaG8gbG9uZyBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY19oZWxwICgpCit7CisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgUmVwb3J0IGJ1Z3MgdG8vIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMqXCRwcm9nbmFtZSonJHByb2duYW1lJyoKKwlzKlwkaG9zdConIiRob3N0IicqCisJcypcJFNIRUxMKiciJFNIRUxMIicqCisJcypcJExUQ0MqJyIkTFRDQyInKgorCXMqXCRMVENGTEFHUyonIiRMVENGTEFHUyInKgorCXMqXCRMRConIiRMRCInKgorCXMvXCR3aXRoX2dudV9sZC8nIiR3aXRoX2dudV9sZCInLworCXMvXCRhdXRvbWFrZV92ZXJzaW9uLyciYChhdXRvbWFrZSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYChhdXRvY29uZiAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorICAgIGV4aXQgJD8KK30KKworIyBmdW5jX21pc3NpbmdfYXJnIGFyZ25hbWUKKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgc2V0IGdsb2JhbAorIyBleGl0X2NtZC4KK2Z1bmNfbWlzc2luZ19hcmcgKCkKK3sKKyAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMSIKKyAgICBleGl0X2NtZD1leGl0Cit9CisKK2V4aXRfY21kPToKKworCisKKworCisjIENoZWNrIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgJEVDSE8uCitpZiB0ZXN0ICJYJDEiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICBzaGlmdAorZWxpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCisgIDoKK2VsaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisgICMgWWlwcGVlLCAkRUNITyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwsIGFuZCB0aGVuIG1heWJlICRFQ0hPIHdpbGwgd29yay4KKyAgZXhlYyAkU0hFTEwgIiRwcm9ncGF0aCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CitmaQorCitpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxFT0YKKyQqCitFT0YKKyAgZXhpdCAkRVhJVF9TVUNDRVNTCitmaQorCittYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCittYWdpY19leGU9IiUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJSIKKworIyBHbG9iYWwgdmFyaWFibGVzLgorIyAkbW9kZSBpcyB1bnNldAorbm9ub3B0PQorZXhlY3V0ZV9kbGZpbGVzPQorcHJlc2VydmVfYXJncz0KK2xvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKK28ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKK2V4dHJhY3RlZF9hcmNoaXZlcz0KK2V4dHJhY3RlZF9zZXJpYWw9MAorCitvcHRfZHJ5X3J1bj1mYWxzZQorb3B0X2R1cGxpY2F0ZV9kZXBzPWZhbHNlCitvcHRfc2lsZW50PWZhbHNlCitvcHRfZGVidWc9OgorCisjIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKKyMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZworIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgorZXhlY19jbWQ9CisKKyMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19lcnJvciAiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiIKK30KKworCisjIGZ1bmNfY29uZmlnCisjIERpc3BsYXkgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCB0aGUgdGFncyBpbiB0aGlzIHNjcmlwdC4KK2Z1bmNfY29uZmlnICgpCit7CisgICAgcmVfYmVnaW5jZj0nXiMgIyMjIEJFR0lOIExJQlRPT0wnCisgICAgcmVfZW5kY2Y9J14jICMjIyBFTkQgTElCVE9PTCcKKworICAgICMgRGVmYXVsdCBjb25maWd1cmF0aW9uLgorICAgICRTRUQgIjEsLyRyZV9iZWdpbmNmIENPTkZJRy9kOy8kcmVfZW5kY2YgQ09ORklHLyxcJGQiIDwgIiRwcm9ncGF0aCIKKworICAgICMgTm93IHByaW50IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRhZ3MuCisgICAgZm9yIHRhZ25hbWUgaW4gJHRhZ2xpc3Q7IGRvCisgICAgICAkU0VEIC1uICIvJHJlX2JlZ2luY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC8sLyRyZV9lbmRjZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkL3AiIDwgIiRwcm9ncGF0aCIKKyAgICBkb25lCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19mZWF0dXJlcworIyBEaXNwbGF5IHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCitmdW5jX2ZlYXR1cmVzICgpCit7CisgICAgJEVDSE8gImhvc3Q6ICRob3N0IgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAkRUNITyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgJEVDSE8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICRFQ0hPICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICAkRUNITyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGZpCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19lbmFibGVfdGFnIHRhZ25hbWUKKyMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgorIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0CisjIHZhcmlhYmxlIGhlcmUuCitmdW5jX2VuYWJsZV90YWcgKCkKK3sKKyAgIyBHbG9iYWwgdmFyaWFibGU6CisgIHRhZ25hbWU9IiQxIgorCisgIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgc2VkX2V4dHJhY3RjZj0iLyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AiCisKKyAgIyBWYWxpZGF0ZSB0YWduYW1lLgorICBjYXNlICR0YWduYW1lIGluCisgICAgKlshLV9BLVphLXowLTksL10qKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCisgICAgICA7OworICBlc2FjCisKKyAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKKyAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICBDQykgOzsKKyAgICAqKQorICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwl0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKKworCSMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCisJIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKKwkjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCisJIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgorCWV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKKwlldmFsICIkZXh0cmFjdGVkY2YiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworfQorCisjIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbgorIyB0aGUgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYGxpYnRvb2wgLS12ZXJzaW9uJyBoYXBwZW4gcXVpY2tseS4KK3sKKworICAjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgY2FzZSAkMSBpbgorICBjbGVhbnxjbGVhfGNsZXxjbCkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBsaW5rfGxpbnxsaXxsKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgICMgUGFyc2Ugbm9uLW1vZGUgc3BlY2lmaWMgYXJndW1lbnRzOgorICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgb3B0PSIkMSIKKyAgICBzaGlmdAorCisgICAgY2FzZSAkb3B0IGluCisgICAgICAtLWNvbmZpZykJCWZ1bmNfY29uZmlnCQkJCQk7OworCisgICAgICAtLWRlYnVnKQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKwkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKwkJCW9wdF9kZWJ1Zz0nc2V0IC14JworCQkJJG9wdF9kZWJ1ZworCQkJOzsKKworICAgICAgLWRsb3BlbikJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworCQkJZXhlY3V0ZV9kbGZpbGVzPSIkZXhlY3V0ZV9kbGZpbGVzICQxIgorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC0tZHJ5LXJ1biB8IC1uKQlvcHRfZHJ5X3J1bj06CQkJCQk7OworICAgICAgLS1mZWF0dXJlcykgICAgICAgZnVuY19mZWF0dXJlcwkJCQkJOzsKKyAgICAgIC0tZmluaXNoKQkJbW9kZT0iZmluaXNoIgkJCQkJOzsKKworICAgICAgLS1tb2RlKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCisJCQljYXNlICQxIGluCisJCQkgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CisJCQkgIGNsZWFuKQk7OworCQkJICBjb21waWxlKQk7OworCQkJICBleGVjdXRlKQk7OworCQkJICBmaW5pc2gpCTs7CisJCQkgIGluc3RhbGwpCTs7CisJCQkgIGxpbmspCQk7OworCQkJICByZWxpbmspCTs7CisJCQkgIHVuaW5zdGFsbCkJOzsKKworCQkJICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKwkJCSAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKwkJCSAgICAgZXhpdF9jbWQ9ZXhpdAorCQkJICAgICBicmVhaworCQkJICAgICA7OworCQkgICAgICAgIGVzYWMKKworCQkJbW9kZT0iJDEiCisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKwkJCW9wdF9kdXBsaWNhdGVfZGVwcz06CQkJCTs7CisKKyAgICAgIC0tcXVpZXR8LS1zaWxlbnQpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlvcHRfc2lsZW50PToKKwkJCTs7CisKKyAgICAgIC0tdmVyYm9zZXwgLXYpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlvcHRfc2lsZW50PWZhbHNlCisJCQk7OworCisgICAgICAtLXRhZykJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCAkMSIKKwkJCWZ1bmNfZW5hYmxlX3RhZyAiJDEiCSMgdGFnbmFtZSBpcyBzZXQgaGVyZQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CisgICAgICAtZGxvcGVuPSp8LS1tb2RlPSp8LS10YWc9KikKKwkJCWZ1bmNfb3B0X3NwbGl0ICIkb3B0IgorCQkJc2V0IGR1bW15ICIkZnVuY19vcHRfc3BsaXRfb3B0IiAiJGZ1bmNfb3B0X3NwbGl0X2FyZyIgJHsxKyIkQCJ9CisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQkJOzsKKyAgICAgIC0taGVscCkJCW9wdF9oZWxwPToJCQkJCTs7CisgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQkJOzsKKworICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIJOzsKKworICAgICAgKikJCW5vbm9wdD0iJG9wdCIKKwkJCWJyZWFrCisJCQk7OworICAgIGVzYWMKKyAgZG9uZQorCisKKyAgY2FzZSAkaG9zdCBpbgorICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyopCisgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICA7OworICAgICopCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfZHVwbGljYXRlX2RlcHMKKyAgICAgIDs7CisgIGVzYWMKKworICAjIEhhdmluZyB3YXJuZWQgYWJvdXQgYWxsIG1pcy1zcGVjaWZpZWQgb3B0aW9ucywgYmFpbCBvdXQgaWYKKyAgIyBhbnl0aGluZyB3YXMgd3JvbmcuCisgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCit9CisKKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisjIHJlbGVhc2Ugb2YgbGlidG9vbC4KK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQoreworICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgIGZpCisKKyAgICBleGl0ICRFWElUX01JU01BVENICisgIGZpCit9CisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjICAgIE1haW4uICAgICMjCisjIyAtLS0tLS0tLS0tLSAjIworCiskb3B0X2hlbHAgfHwgeworICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorCisgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKyAgZmkKKworICB0ZXN0IC16ICIkbW9kZSIgJiYgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFLiIKKworCisgICMgRGFyd2luIHN1Y2tzCisgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisKKworICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKKyAgICAkRUNITyAiJGhlbHAiIDE+JjIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgZmkKKworICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisgIGdlbmVyaWNfaGVscD0iJGhlbHAiCisgIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRtb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCit9CisKKworIyBmdW5jX2xhbGliX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbGFsaWJfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJFNFRCAtZSA0cSAiJDEiIDI+L2Rldi9udWxsIFwKKyAgICAgICAgfCAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIGNoZWNrIGFzIGZ1bmNfbGFsaWJfcCB3aXRob3V0CisjIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCisjIGNsb3NlcyBpdCBhZnRlcndhcmRzLCB3aXRob3V0IHNhdmluZyB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLgorIyBBcyBhIHNhZmV0eSBtZWFzdXJlLCB1c2UgaXQgb25seSB3aGVyZSBhIG5lZ2F0aXZlIHJlc3VsdCB3b3VsZCBiZQorIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiBgZmlsZScgZG9lcyBub3QgZXhpc3QuCitmdW5jX2xhbGliX3Vuc2FmZV9wICgpCit7CisgICAgbGFsaWJfcD1ubworICAgIGlmIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCisJZm9yIGxhbGliX3BfbCBpbiAxIDIgMyA0CisJZG8KKwkgICAgcmVhZCBsYWxpYl9wX2xpbmUKKwkgICAgY2FzZSAiJGxhbGliX3BfbGluZSIgaW4KKwkJXCNcIEdlbmVyYXRlZFwgYnlcICokUEFDS0FHRSogKSBsYWxpYl9wPXllczsgYnJlYWs7OworCSAgICBlc2FjCisJZG9uZQorCWV4ZWMgMDwmNSA1PCYtCisgICAgZmkKKyAgICB0ZXN0ICIkbGFsaWJfcCIgPSB5ZXMKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0CisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgKCkKK3sKKyAgICBmdW5jX2xhbGliX3AgIiQxIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PQorICAgIGNhc2UgJDEgaW4KKyAgICAqLmV4ZSkgOzsKKyAgICAqKSBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0uZXhlIDs7CisgICAgZXNhYworICAgICRHUkVQICIkbWFnaWNfZXhlIiAiJDEkZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXgiID4vZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgZmlsZQorIyBBc3N1bWVzIGZpbGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1dGFibGUKKyMgdXNlcyAkZmlsZSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVuYW1lIGZvciBhCisjIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgorZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIiCisgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSI7IHRoZW4KKwlmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisJZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorICAgIGZpCit9CisKKyMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9yIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJDEiIHx8IGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiCit9CisKKworIyBmdW5jX2V4ZWN1dGVfY21kcyBjb21tYW5kcyBmYWlsX2NtZAorIyBFeGVjdXRlIHRpbGRlLWRlbGltaXRlZCBDT01NQU5EUy4KKyMgSWYgRkFJTF9DTUQgaXMgZ2l2ZW4sIGV2YWwgdGhhdCB1cG9uIGZhaWx1cmUuCisjIEZBSUxfQ01EIG1heSByZWFkLWFjY2VzcyB0aGUgY3VycmVudCBjb21tYW5kIGluIHZhcmlhYmxlIENNRCEKK2Z1bmNfZXhlY3V0ZV9jbWRzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKyAgICBmb3IgY21kIGluICQxOyBkbworICAgICAgSUZTPSRzYXZlX2lmcworICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgIGRvbmUKKyAgICBJRlM9JHNhdmVfaWZzCit9CisKKworIyBmdW5jX3NvdXJjZSBmaWxlCisjIFNvdXJjZSBGSUxFLCBhZGRpbmcgZGlyZWN0b3J5IGNvbXBvbmVudCBpZiBuZWNlc3NhcnkuCisjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKyMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQorIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCisjIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCitmdW5jX3NvdXJjZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICQxIGluCisgICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CisgICAgKikJCS4gIi4vJDEiIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19pbmZlcl90YWcgYXJnCisjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKKyMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCisjIE9ubHkgYXR0ZW1wdCB0aGlzIGlmIHRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlCisjIGNvbW1hbmQgZG9lc24ndCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4KKyMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCitmdW5jX2luZmVyX3RhZyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorICAgICAgQ0NfcXVvdGVkPQorICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGRvbmUKKyAgICAgIGNhc2UgJEAgaW4KKyAgICAgICMgQmxhbmtzIGluIHRoZSBjb21tYW5kIG1heSBoYXZlIGJlZW4gc3RyaXBwZWQgYnkgdGhlIGNhbGxpbmcgc2hlbGwsCisgICAgICAjIGJ1dCBub3QgZnJvbSB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBjb25maWd1cmUgd2FzIHJ1bi4KKyAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRFQ0hPICRDQ2AgIiogfCAiYCRFQ0hPICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJEVDSE8gJENDX3F1b3RlZGAgIiogfCAiYCRFQ0hPICRDQ19xdW90ZWRgICIqKSA7OworICAgICAgIyBCbGFua3MgYXQgdGhlIHN0YXJ0IG9mICRiYXNlX2NvbXBpbGUgd2lsbCBjYXVzZSB0aGlzIHRvIGZhaWwKKyAgICAgICMgaWYgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0gYXMgd2VsbC4KKyAgICAgICopCisJZm9yIHogaW4gJGF2YWlsYWJsZV90YWdzOyBkbworCSAgaWYgJEdSRVAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgorCSAgICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgorCSAgICBDQ19xdW90ZWQ9CisJICAgIGZvciBhcmcgaW4gJENDOyBkbworCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKwkgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCSAgICAgIENDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICAgIGRvbmUKKwkgICAgY2FzZSAiJEAgIiBpbgorCSAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRFQ0hPICRDQ2AgIiogfCAiYCRFQ0hPICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJEVDSE8gJENDX3F1b3RlZGAgIiogfCAiYCRFQ0hPICRDQ19xdW90ZWRgICIqKQorCSAgICAgICMgVGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRjaGVzCisJICAgICAgIyB0aGUgb25lIGluIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbi4KKwkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgorCSAgICAgIHRhZ25hbWU9JHoKKwkgICAgICBicmVhaworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisJZG9uZQorCSMgSWYgJHRhZ25hbWUgc3RpbGwgaXNuJ3Qgc2V0LCB0aGVuIG5vIHRhZ2dlZCBjb25maWd1cmF0aW9uCisJIyB3YXMgZm91bmQgYW5kIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlICItLXRhZyIgY29tbWFuZAorCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgorCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorCSAgZnVuY19lY2hvICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggXGAtLXRhZyciCisjCWVsc2UKKyMJICBmdW5jX3ZlcmJvc2UgInVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorfQorCisKKworIyBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0IG91dHB1dF9uYW1lIHBpY19uYW1lIG5vbnBpY19uYW1lCisjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KK2Z1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKK3sKKyAgICB3cml0ZV9saWJvYmo9JHsxfQorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9sb2JqPVwnJHsyfVwnCisgICAgZWxzZQorICAgICAgd3JpdGVfbG9iaj1ub25lCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHdyaXRlX29sZG9iaj1cJyR7M31cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX29sZG9iaj1ub25lCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKyMgJHdyaXRlX2xpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIE5hbWUgb2YgdGhlIFBJQyBvYmplY3QuCitwaWNfb2JqZWN0PSR3cml0ZV9sb2JqCisKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QKK25vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKKworRU9GCisgICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIke3dyaXRlX2xpYm9ian0iCisgICAgfQorfQorCisjIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgorZnVuY19tb2RlX2NvbXBpbGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KKyAgICBiYXNlX2NvbXBpbGU9CisgICAgc3JjZmlsZT0iJG5vbm9wdCIgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgorICAgIHN1cHByZXNzX29wdD15ZXMKKyAgICBzdXBwcmVzc19vdXRwdXQ9CisgICAgYXJnX21vZGU9bm9ybWFsCisgICAgbGlib2JqPQorICAgIGxhdGVyPQorICAgIHBpZV9mbGFnPQorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgICAgYXJnICApCisJIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQorCWxhc3Rhcmc9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJOzsKKworICAgICAgdGFyZ2V0ICkKKwlsaWJvYmo9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJY29udGludWUKKwk7OworCisgICAgICBub3JtYWwgKQorCSMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKwljYXNlICRhcmcgaW4KKwktbykKKwkgIHRlc3QgLW4gIiRsaWJvYmoiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5IFxgLW8nIG1vcmUgdGhhbiBvbmNlIgorCSAgYXJnX21vZGU9dGFyZ2V0CisJICBjb250aW51ZQorCSAgOzsKKworCS1waWUgfCAtZnBpZSB8IC1mUElFKQorICAgICAgICAgIHBpZV9mbGFnPSIkcGllX2ZsYWcgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKwkgIGxhdGVyPSIkbGF0ZXIgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLW5vLXN1cHByZXNzKQorCSAgc3VwcHJlc3Nfb3B0PW5vCisJICBjb250aW51ZQorCSAgOzsKKworCS1YY29tcGlsZXIpCisJICBhcmdfbW9kZT1hcmcgICMgIHRoZSBuZXh0IG9uZSBnb2VzIGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBsaXN0CisJICBjb250aW51ZSAgICAgICMgIFRoZSBjdXJyZW50ICJzcmNmaWxlIiB3aWxsIGVpdGhlciBiZSByZXRhaW5lZCBvcgorCSAgOzsgICAgICAgICAgICAjICByZXBsYWNlZCBsYXRlci4gIEkgd291bGQgZ3Vlc3MgdGhhdCB3b3VsZCBiZSBhIGJ1Zy4KKworCS1XYywqKQorCSAgZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBsYXN0YXJnPQorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJICBmb3IgYXJnIGluICRhcmdzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwkgICAgbGFzdGFyZz0iJGxhc3RhcmcgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZG9uZQorCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorCSAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRsYXN0YXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwkqKQorCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgorCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisJICAjCisJICBsYXN0YXJnPSIkc3JjZmlsZSIKKwkgIHNyY2ZpbGU9IiRhcmciCisJICA7OworCWVzYWMgICMgIGNhc2UgJGFyZworCTs7CisgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGFzdGFyZyIKKyAgICAgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZSAjIGZvciBhcmcKKworICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgYXJnKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgorICAgICAgOzsKKyAgICB0YXJnZXQpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggXGAtbyciCisgICAgICA7OworICAgICopCisgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCisgICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7CisJZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCisJbGlib2JqPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB9CisgICAgICA7OworICAgIGVzYWMKKworICAgICMgUmVjb2duaXplIHNldmVyYWwgZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMuCisgICAgIyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgLW8gZmlsZS5vLCBpdCBpcyByZXBsYWNlZCB3aXRoIGZpbGUubG8KKyAgICBjYXNlICRsaWJvYmogaW4KKyAgICAqLltjQ0ZTaWZtc29dIHwgXAorICAgICouYWRhIHwgKi5hZGIgfCAqLmFkcyB8ICouYXNtIHwgXAorICAgICouYysrIHwgKi5jYyB8ICouaWkgfCAqLmNsYXNzIHwgKi5jcHAgfCAqLmN4eCB8IFwKKyAgICAqLltmRl1bMDldPyB8ICouZm9yIHwgKi5qYXZhIHwgKi5vYmogfCAqLnN4KQorICAgICAgZnVuY194Zm9ybSAiJGxpYm9iaiIKKyAgICAgIGxpYm9iaj0kZnVuY194Zm9ybV9yZXN1bHQKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CisgICAgKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciCisgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKworICAgIGZvciBhcmcgaW4gJGxhdGVyOyBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYykKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsaWJvYmoiCisgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCisgICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKKyAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIgIiIKKyAgICBvYmpuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgbG9iaj0ke3hkaXJ9JG9iamRpci8kb2JqbmFtZQorCisgICAgdGVzdCAteiAiJGJhc2VfY29tcGlsZSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIKKworICAgICMgRGVsZXRlIGFueSBsZWZ0b3ZlciBsaWJyYXJ5IG9iamVjdHMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgcmVtb3ZlbGlzdD0iJG9iaiAkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisgICAgZWxzZQorICAgICAgcmVtb3ZlbGlzdD0iJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGZpCisKKyAgICAjIE9uIEN5Z3dpbiB0aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxhZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0IHR5cGVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICIkcGljX21vZGUiID0gbm8gJiYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorICAgICAgIyBub24tUElDIGNvZGUgaW4gc2hhcmVkIGxpYnJhcmllcyBpcyBub3Qgc3VwcG9ydGVkCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgZmkKKworICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCisgICAgIyBub3Qgc3VwcG9ydCAtbyB3aXRoIC1jCisgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubzsgdGhlbgorICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIlgkc3JjZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnIC1lICdzJVwuW14uXSokJSUnYC4ke29iamV4dH0KKyAgICAgIGxvY2tmaWxlPSIkb3V0cHV0X29iai5sb2NrIgorICAgIGVsc2UKKyAgICAgIG91dHB1dF9vYmo9CisgICAgICBuZWVkX2xvY2tzPW5vCisgICAgICBsb2NrZmlsZT0KKyAgICBmaQorCisgICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKKyAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCisgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0geWVzOyB0aGVuCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZWxpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuOyB0aGVuCisgICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkb3V0cHV0X29iaiIKKyAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJGxvY2tmaWxlIgorICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1CisKKyAgICBpZiB0ZXN0IC1uICIkZml4X3NyY2ZpbGVfcGF0aCI7IHRoZW4KKyAgICAgIGV2YWwgc3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIKKyAgICBmaQorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCisgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCisgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKKworICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSBubzsgdGhlbgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGVsc2UKKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisgICAgICBmaQorCisgICAgICBmdW5jX21rZGlyX3AgIiR4ZGlyJG9iamRpciIKKworICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisJIyBQbGFjZSBQSUMgb2JqZWN0cyBpbiAkb2JqZGlyCisJY29tbWFuZD0iJGNvbW1hbmQgLW8gJGxvYmoiCisgICAgICBmaQorCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCisgICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKworICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQsIHRoZW4gZ28gb24gdG8gY29tcGlsZSB0aGUgbmV4dCBvbmUKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJGxvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkbG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorCisgICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCisgICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgorCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgT25seSBidWlsZCBhIHBvc2l0aW9uLWRlcGVuZGVudCBvYmplY3QgaWYgd2UgYnVpbGQgb2xkIGxpYnJhcmllcy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IHllczsgdGhlbgorCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKKyAgICAgIGVsc2UKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KKwljb21tYW5kPSIkY29tbWFuZCAtbyAkb2JqIgorICAgICAgZmkKKworICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCisgICAgICBjb21tYW5kPSIkY29tbWFuZCRzdXBwcmVzc19vdXRwdXQiCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCisgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkCisgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKKyAgICAgIGZpCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICIkbGlib2JqIiAiJG9iamRpci8kb2JqbmFtZSIgIiRvYmpuYW1lIgorCisgICAgICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKwlyZW1vdmVsaXN0PSRsb2NrZmlsZQorICAgICAgICAkUk0gIiRsb2NrZmlsZSIKKyAgICAgIGZpCisgICAgfQorCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKKyRvcHRfaGVscCB8fCB7Cit0ZXN0ICIkbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorfQorCitmdW5jX21vZGVfaGVscCAoKQoreworICAgICMgV2UgbmVlZCB0byBkaXNwbGF5IGhlbHAgZm9yIGVhY2ggb2YgdGhlIG1vZGVzLgorICAgIGNhc2UgJG1vZGUgaW4KKyAgICAgICIiKQorICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKyAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorICAgICAgICBmdW5jX2hlbHAKKyAgICAgICAgOzsKKworICAgICAgY2xlYW4pCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKK3dpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgY29tcGlsZSkKKyAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCisKK0NvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGRpbmcgUElDIG9iamVjdHMgb25seQorICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGRpbmcgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisKK0NPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhIFxgc3RhbmRhcmQnIG9iamVjdCBmaWxlCitmcm9tIHRoZSBnaXZlbiBTT1VSQ0VGSUxFLgorCitUaGUgb3V0cHV0IGZpbGUgbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IGZyb20KK1NPVVJDRUZJTEUsIHRoZW4gc3Vic3RpdHV0aW5nIHRoZSBDIHNvdXJjZSBjb2RlIHN1ZmZpeCBcYC5jJyB3aXRoIHRoZQorbGlicmFyeSBvYmplY3Qgc3VmZml4LCBcYC5sbycuIgorICAgICAgICA7OworCisgICAgICBleGVjdXRlKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZXhlY3V0ZSBDT01NQU5EIFtBUkdTXS4uLgorCitBdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbS4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLWRsb3BlbiBGSUxFICAgICAgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFIHRvIHRoZSBsaWJyYXJ5IHBhdGgKKworVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gXGAtZGxvcGVuJworZmxhZ3MuCisKK0lmIGFueSBvZiB0aGUgQVJHUyBhcmUgbGlidG9vbCBleGVjdXRhYmxlIHdyYXBwZXJzLCB0aGVuIHRoZXkgYXJlIHRyYW5zbGF0ZWQKK2ludG8gdGhlaXIgY29ycmVzcG9uZGluZyB1bmluc3RhbGxlZCBiaW5hcnksIGFuZCBhbnkgb2YgdGhlaXIgcmVxdWlyZWQgbGlicmFyeQorZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGguCisKK1RoZW4sIENPTU1BTkQgaXMgZXhlY3V0ZWQsIHdpdGggQVJHUyBhcyBhcmd1bWVudHMuIgorICAgICAgICA7OworCisgICAgICBmaW5pc2gpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1maW5pc2ggW0xJQkRJUl0uLi4KKworQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcy4KKworRWFjaCBMSUJESVIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBsaWJ0b29sIGxpYnJhcmllcy4KKworVGhlIGNvbW1hbmRzIHRoYXQgdGhpcyBtb2RlIGV4ZWN1dGVzIG1heSByZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiAgVXNlCit0aGUgXGAtLWRyeS1ydW4nIG9wdGlvbiBpZiB5b3UganVzdCB3YW50IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLiIKKyAgICAgICAgOzsKKworICAgICAgaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWluc3RhbGwgSU5TVEFMTC1DT01NQU5ELi4uCisKK0luc3RhbGwgZXhlY3V0YWJsZXMgb3IgbGlicmFyaWVzLgorCitJTlNUQUxMLUNPTU1BTkQgaXMgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kLiAgVGhlIGZpcnN0IGNvbXBvbmVudCBzaG91bGQgYmUKK2VpdGhlciB0aGUgXGBpbnN0YWxsJyBvciBcYGNwJyBwcm9ncmFtLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgSU5TVEFMTC1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtaW5zdC1wcmVmaXggUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgorCitUaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQorQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCisgICAgICAgIDs7CisKKyAgICAgIGxpbmspCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgorCitMaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCitjcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgorCitMSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKK2EgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKKyAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCisgIC1kbG9wZW4gRklMRSAgICAgIFxgLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQorICAtZGxwcmVvcGVuIEZJTEUgICBsaW5rIGluIEZJTEUgYW5kIGFkZCBpdHMgc3ltYm9scyB0byBsdF9wcmVsb2FkZWRfc3ltYm9scworICAtZXhwb3J0LWR5bmFtaWMgICBhbGxvdyBzeW1ib2xzIGZyb20gT1VUUFVULUZJTEUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBkbHN5bSgzKQorICAtZXhwb3J0LXN5bWJvbHMgU1lNRklMRQorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbGlzdGVkIGluIFNZTUZJTEUKKyAgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBtYXRjaGluZyBSRUdFWAorICAtTExJQkRJUiAgICAgICAgICBzZWFyY2ggTElCRElSIGZvciByZXF1aXJlZCBpbnN0YWxsZWQgbGlicmFyaWVzCisgIC1sTkFNRSAgICAgICAgICAgIE9VVFBVVC1GSUxFIHJlcXVpcmVzIHRoZSBpbnN0YWxsZWQgbGlicmFyeSBsaWJOQU1FCisgIC1tb2R1bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0aGF0IGNhbiBkbG9wZW5lZAorICAtbm8tZmFzdC1pbnN0YWxsICBkaXNhYmxlIHRoZSBmYXN0LWluc3RhbGwgbW9kZQorICAtbm8taW5zdGFsbCAgICAgICBsaW5rIGEgbm90LWluc3RhbGxhYmxlIGV4ZWN1dGFibGUKKyAgLW5vLXVuZGVmaW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFyeSBkb2VzIG5vdCByZWZlciB0byBleHRlcm5hbCBzeW1ib2xzCisgIC1vIE9VVFBVVC1GSUxFICAgIGNyZWF0ZSBPVVRQVVQtRklMRSBmcm9tIHRoZSBzcGVjaWZpZWQgb2JqZWN0cworICAtb2JqZWN0bGlzdCBGSUxFICBVc2UgYSBsaXN0IG9mIG9iamVjdCBmaWxlcyBmb3VuZCBpbiBGSUxFIHRvIHNwZWNpZnkgb2JqZWN0cworICAtcHJlY2lvdXMtZmlsZXMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgZG9uJ3QgcmVtb3ZlIG91dHB1dCBmaWxlcyBtYXRjaGluZyBSRUdFWAorICAtcmVsZWFzZSBSRUxFQVNFICBzcGVjaWZ5IHBhY2thZ2UgcmVsZWFzZSBpbmZvcm1hdGlvbgorICAtcnBhdGggTElCRElSICAgICB0aGUgY3JlYXRlZCBsaWJyYXJ5IHdpbGwgZXZlbnR1YWxseSBiZSBpbnN0YWxsZWQgaW4gTElCRElSCisgIC1SWyBdTElCRElSICAgICAgIGFkZCBMSUJESVIgdG8gdGhlIHJ1bnRpbWUgcGF0aCBvZiBwcm9ncmFtcyBhbmQgbGlicmFyaWVzCisgIC1zaGFyZWQgICAgICAgICAgIG9ubHkgZG8gZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zaHJleHQgU1VGRklYICAgIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBzaGFyZWQgbGlicmFyeSBmaWxlIGV4dGVuc2lvbgorICAtc3RhdGljICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAtc3RhdGljLWxpYnRvb2wtbGlicworICAgICAgICAgICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtdmVyc2lvbi1pbmZvIENVUlJFTlRbOlJFVklTSU9OWzpBR0VdXQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGxpYnJhcnkgdmVyc2lvbiBpbmZvIFtlYWNoIHZhcmlhYmxlIGRlZmF1bHRzIHRvIDBdCisgIC13ZWFrIExJQk5BTUUgICAgIGRlY2xhcmUgdGhhdCB0aGUgdGFyZ2V0IHByb3ZpZGVzIHRoZSBMSUJOQU1FIGludGVyZmFjZQorCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQordHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKK29iamVjdCBmaWxlcy4KKworSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCityZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQoraXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKKyAgICAgICAgOzsKKworICAgICAgdW5pbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgJEVDSE8KKyAgICAkRUNITyAiVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgorCisgICAgZXhpdCAkPworfQorCisgICMgTm93IHRoYXQgd2UndmUgY29sbGVjdGVkIGEgcG9zc2libGUgLS1tb2RlIGFyZywgc2hvdyBoZWxwIGlmIG5lY2Vzc2FyeQorICAkb3B0X2hlbHAgJiYgZnVuY19tb2RlX2hlbHAKKworCisjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgorZnVuY19tb2RlX2V4ZWN1dGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KKyAgICBjbWQ9IiRub25vcHQiCisgICAgdGVzdCAteiAiJGNtZCIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKworICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCisgICAgZm9yIGZpbGUgaW4gJGV4ZWN1dGVfZGxmaWxlczsgZG8KKyAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCisJfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSBmaWxlIgorCisgICAgICBkaXI9CisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLmxhKQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwkjIFJlYWQgdGhlIGxpYnRvb2wgbGlicmFyeS4KKwlkbG5hbWU9CisJbGlicmFyeV9uYW1lcz0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIFNraXAgdGhpcyBsaWJyYXJ5IGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZC4KKwlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgorCSAgIyBXYXJuIGlmIGl0IHdhcyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmIFwKKwkgICAgZnVuY193YXJuaW5nICJcYCRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoIFxgLWV4cG9ydC1keW5hbWljJyIKKwkgIGNvbnRpbnVlCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKwkgIGRpcj0iJGRpci8kb2JqZGlyIgorCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgorCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJOzsKKworICAgICAgKikKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgorICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgorCisgICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgorICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisgICAgICBlbHNlCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCisgICAgICBmaQorICAgIGRvbmUKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgorICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9IiRtYWdpYyIKKworICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KKyAgICBhcmdzPQorICAgIGZvciBmaWxlCisgICAgZG8KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgIC0qKSA7OworICAgICAgKikKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgIiRmaWxlIgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWVsaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgZnVuY19zb3VyY2UgIiRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZpbGUiCisgICAgICBhcmdzPSIkYXJncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiWCRvcHRfZHJ5X3J1biIgPSBYZmFsc2U7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgorCWV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisKKyAgICAgICMgUmVzdG9yZSBzYXZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworICAgICAgZG8KKwlldmFsICJpZiB0ZXN0IFwiXCR7c2F2ZV8kbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgICAgICAgICRsdF92YXI9XCRzYXZlXyRsdF92YXI7IGV4cG9ydCAkbHRfdmFyCisJICAgICAgZWxzZQorCQkkbHRfdW5zZXQgJGx0X3ZhcgorCSAgICAgIGZpIgorICAgICAgZG9uZQorCisgICAgICAjIE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCisgICAgICBleGVjX2NtZD0iXCRjbWQkYXJncyIKKyAgICBlbHNlCisgICAgICAjIERpc3BsYXkgd2hhdCB3b3VsZCBiZSBkb25lLgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKKwkkRUNITyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKyAgICAgICRFQ0hPICIkY21kJGFyZ3MiCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KK2Z1bmNfbW9kZV9maW5pc2ggKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbGliZGlycz0iJG5vbm9wdCIKKyAgICBhZG1pbmNtZHM9CisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZm9yIGRpcgorICAgICAgZG8KKwlsaWJkaXJzPSIkbGliZGlycyAkZGlyIgorICAgICAgZG9uZQorCisgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJGZpbmlzaF9jbWRzIiAnYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisnIiRjbWQiJyInCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCisJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCisJICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyAgICAgICAkY21kcyIKKwlmaQorICAgICAgZG9uZQorICAgIGZpCisKKyAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAkb3B0X3NpbGVudCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKworICAgICRFQ0hPICJYLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgfCAkWHNlZAorICAgICRFQ0hPICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKyAgICAgICRFQ0hPICIgICAkbGliZGlyIgorICAgIGRvbmUKKyAgICAkRUNITworICAgICRFQ0hPICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKyAgICAkRUNITyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisgICAgJEVDSE8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisgICAgJEVDSE8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKyAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorICAgICAgJEVDSE8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKyAgICAgICRFQ0hPICIgICAgIGR1cmluZyBsaW5raW5nIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisgICAgICBsaWJkaXI9TElCRElSCisgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisKKyAgICAgICRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisgICAgZmkKKyAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorICAgICAgJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorICAgIGZpCisgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKyAgICBmaQorICAgICRFQ0hPCisKKyAgICAkRUNITyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKyAgICAgICAgJEVDSE8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCisJJEVDSE8gInBhZ2VzLiIKKwk7OworICAgICAgKikKKyAgICAgICAgJEVDSE8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICAkRUNITyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKwordGVzdCAiJG1vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV9pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KKyAgICBpZiB0ZXN0ICIkbm9ub3B0IiA9ICIkU0hFTEwiIHx8IHRlc3QgIiRub25vcHQiID0gL2Jpbi9zaCB8fAorICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorICAgICAgICRFQ0hPICJYJG5vbm9wdCIgfCAkR1JFUCBzaHRvb2wgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIKKyAgICAgIGFyZz0kMQorICAgICAgc2hpZnQKKyAgICBlbHNlCisgICAgICBpbnN0YWxsX3Byb2c9CisgICAgICBhcmc9JG5vbm9wdAorICAgIGZpCisKKyAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCisgICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgorICAgIGRlc3Q9CisgICAgZmlsZXM9CisgICAgb3B0cz0KKyAgICBwcmV2PQorICAgIGluc3RhbGxfdHlwZT0KKyAgICBpc2Rpcj1ubworICAgIHN0cmlwbWU9CisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KKwlmaWxlcz0iJGZpbGVzICRkZXN0IgorCWRlc3Q9JGFyZworCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1kKSBpc2Rpcj15ZXMgOzsKKyAgICAgIC1mKQorCWNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKwkqW1xcXCAvXWNwXCAqKSA7OworCSopIHByZXY9JGFyZyA7OworCWVzYWMKKwk7OworICAgICAgLWcgfCAtbSB8IC1vKQorCXByZXY9JGFyZworCTs7CisgICAgICAtcykKKwlzdHJpcG1lPSIgLXMiCisJY29udGludWUKKwk7OworICAgICAgLSopCisJOzsKKyAgICAgICopCisJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgorCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCSAgcHJldj0KKwllbHNlCisJICBkZXN0PSRhcmcKKwkgIGNvbnRpbnVlCisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KKwlmdW5jX2ZhdGFsX2hlbHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIgorICAgICAgZWxzZQorCWZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdCIKKyAgICBkZXN0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgorICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj15ZXMKKyAgICBpZiB0ZXN0ICIkaXNkaXIiID0geWVzOyB0aGVuCisgICAgICBkZXN0ZGlyPSIkZGVzdCIKKyAgICAgIGRlc3RuYW1lPQorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKKyAgICAgIGRlc3RkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgZGVzdG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgorICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCisgICAgZmkKKyAgICBjYXNlICRkZXN0ZGlyIGluCisgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworICAgICopCisgICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisJY2FzZSAkZmlsZSBpbgorCSoubG8pIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKworICAgIHN0YXRpY2xpYnM9CisgICAgZnV0dXJlX2xpYmRpcnM9CisgICAgY3VycmVudF9saWJkaXJzPQorICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKworICAgICAgIyBEbyBlYWNoIGluc3RhbGxhdGlvbi4KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICouJGxpYmV4dCkKKwkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgorCXN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRmaWxlIgorCTs7CisKKyAgICAgICoubGEpCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCXJlbGlua19jb21tYW5kPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKwlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgorCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgY3VycmVudF9saWJkaXJzPSIkY3VycmVudF9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZWxzZQorCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJZGlyPSIkZGlyJG9iamRpciIKKworCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCisJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICJYJGRlc3RkaXIiIHwgJFhzZWQgLWUgInMlJGxpYmRpclwkJSUiYAorCisJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgorCSAgIyBBdCBwcmVzZW50LCB0aGlzIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IHdpbmRvd3MgLmRsbCdzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKKwkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgorCSAgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKKworCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCisJICBlbHNlCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAaW5zdF9wcmVmaXhfZGlyQCUlImAKKwkgIGZpCisKKwkgIGZ1bmNfd2FybmluZyAicmVsaW5raW5nIFxgJGZpbGUnIgorCSAgZnVuY19zaG93X2V2YWwgIiRyZWxpbmtfY29tbWFuZCIgXAorCSAgICAnZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJ1wnJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IicKKwlmaQorCisJIyBTZWUgdGhlIG5hbWVzIG9mIHRoZSBzaGFyZWQgbGlicmFyeS4KKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXM7IHNoaWZ0CisJaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisJICByZWFsbmFtZT0iJDEiCisJICBzaGlmdAorCisJICBzcmNuYW1lPSIkcmVhbG5hbWUiCisJICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9IiRyZWFsbmFtZSJUCisKKwkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCisJICAgICAgJ2V4aXQgJD8nCisJICB0c3RyaXBtZT0iJHN0cmlwbWUiCisJICBjYXNlICRob3N0X29zIGluCisJICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJICAgIGNhc2UgJHJlYWxuYW1lIGluCisJICAgICouZGxsLmEpCisJICAgICAgdHN0cmlwbWU9IiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0IC1uICIkdHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiICdleGl0ICQ/JworCSAgZmkKKworCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCisJICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KKwkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCisJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KKwkgICAgZm9yIGxpbmtuYW1lCisJICAgIGRvCisJICAgICAgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIiBcCisJCSYmIGZ1bmNfc2hvd19ldmFsICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJFJNICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKKwkgICAgZG9uZQorCSAgZmkKKworCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorCSAgbGliPSIkZGVzdGRpci8kcmVhbG5hbWUiCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KKwlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJaW5zdG5hbWU9IiRkaXIvJG5hbWUiaQorCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisKKwkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCisJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKwk7OworCisgICAgICAqLmxvKQorCSMgSW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxpYnRvb2wgb2JqZWN0LgorCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwljYXNlICRkZXN0ZmlsZSBpbgorCSoubG8pCisJICBmdW5jX2xvMm8gIiRkZXN0ZmlsZSIKKwkgIHN0YXRpY2Rlc3Q9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIDs7CisJKi4kb2JqZXh0KQorCSAgc3RhdGljZGVzdD0iJGRlc3RmaWxlIgorCSAgZGVzdGZpbGU9CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gXGAkZGVzdGZpbGUnIgorCSAgOzsKKwllc2FjCisKKwkjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KKwl0ZXN0IC1uICIkZGVzdGZpbGUiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisKKwkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KKwlpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCSAgZnVuY19sbzJvICIkZmlsZSIKKwkgIHN0YXRpY29iaj0kZnVuY19sbzJvX3Jlc3VsdAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRzdGF0aWNvYmogXCRzdGF0aWNkZXN0IiAnZXhpdCAkPycKKwlmaQorCWV4aXQgJEVYSVRfU1VDQ0VTUworCTs7CisKKyAgICAgICopCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CisJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bworCSMgaW5zdGFsbAorCXN0cmlwcGVkX2V4dD0iIgorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgc3RyaXBwZWRfZXh0PSIuZXhlIgorCSAgICBmaQorCSAgICA7OworCWVzYWMKKworCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqKQorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmaQorCSAgICA7OworCSopCisJICAgIHdyYXBwZXI9JGZpbGUKKwkgICAgOzsKKwllc2FjCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiR3cmFwcGVyIjsgdGhlbgorCSAgbm90aW5zdF9kZXBsaWJzPQorCSAgcmVsaW5rX2NvbW1hbmQ9CisKKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCisJICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciCisKKwkgIGZpbmFsaXplPXllcworCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbworCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCisJICAgIGxpYmRpcj0KKwkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKKwkgICAgZmkKKwkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRFQ0hPICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSVnJ2AgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisJICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCisJICAgICAgZnVuY193YXJuaW5nICJcYCRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gXGAkbGliZGlyJyIKKwkgICAgICBmaW5hbGl6ZT1ubworCSAgICBmaQorCSAgZG9uZQorCisJICByZWxpbmtfY29tbWFuZD0KKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgb3V0cHV0bmFtZT0KKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisJCWZ1bmNfYmFzZW5hbWUgIiRmaWxlJHN0cmlwcGVkX2V4dCIKKwkJZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICAgICAgb3V0cHV0bmFtZT0iJHRtcGRpci8kZmlsZSIKKwkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwkgICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZydgCisKKwkgICAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkcmVsaW5rX2NvbW1hbmQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgICAgfQorCSAgICAgICAgaWYgZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICAgICAgICAgIGVsc2UKKwkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCisJCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKKwkJICBjb250aW51ZQorCSAgICAgICAgZmkKKwkgICAgICAgIGZpbGU9IiRvdXRwdXRuYW1lIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayBcYCRmaWxlJyIKKwkgICAgICBmaQorCSAgICB9CisJICBlbHNlCisJICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KKwkgICAgZmlsZT1gJEVDSE8gIlgkZmlsZSRzdHJpcHBlZF9leHQiIHwgJFhzZWQgLWUgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCisJICBmaQorCWZpCisKKwkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKKwkjIG9uZSBhbnl3YXkKKwljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KKwkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCisJICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgorCSAgKi5leGU6Ki5leGUpCisJICAgICMgdGhpcyBpcyBvaworCSAgICA7OworCSAgKi5leGU6KikKKwkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQorCSAgICA7OworCSAgKjoqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZGVzdGZpbGUiCisJICAgIGRlc3RmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiAnZXhpdCAkPycKKwkkb3B0X2RyeV9ydW4gfHwgaWYgdGVzdCAtbiAiJG91dHB1dG5hbWUiOyB0aGVuCisJICAke1JNfXIgIiR0bXBkaXIiCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbworICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KKyAgICAgIG9sZGxpYj0iJGRlc3RkaXIvJG5hbWUiCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgJ2V4aXQgJD8nCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkb2xkX3N0cmlwbGliIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICIkb2xkX3N0cmlwbGliICRvbGRsaWIiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisgICAgZG9uZQorCisgICAgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIiAmJiBcCisgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisKKyAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgorICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICBleGVjX2NtZD0nJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCisgICAgZWxzZQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG1vZGUiID0gaW5zdGFsbCAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKworCisjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorIyBFeHRyYWN0IHN5bWJvbHMgZnJvbSBkbHByZWZpbGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMubyB3aXRoCisjIGEgZGxwcmVvcGVuIHN5bWJvbCB0YWJsZS4KK2Z1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X291dHB1dG5hbWU9IiQxIgorICAgIG15X29yaWdpbmF0b3I9IiQyIgorICAgIG15X3BpY19wPSIkezMtbm99IgorICAgIG15X3ByZWZpeD1gJEVDSE8gIiRteV9vcmlnaW5hdG9yIiB8IHNlZCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKKyAgICBteV9kbHN5bXM9CisKKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCW15X2Rsc3ltcz0iJHtteV9vdXRwdXRuYW1lfVMuYyIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGxzeW1zIjsgdGhlbgorICAgICAgY2FzZSAkbXlfZGxzeW1zIGluCisgICAgICAiIikgOzsKKyAgICAgICouYykKKwkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgorCW5saXN0PSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Lm5tIgorCisJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKworCSMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCisJJG9wdF9kcnlfcnVuIHx8ICRFQ0hPID4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yIFxgJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KKy8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gXCJDXCIgeworI2VuZGlmCisKKy8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCisiCisKKwlpZiB0ZXN0ICIkZGxzZWxmIiA9IHllczsgdGhlbgorCSAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRvdXRwdXQnIgorCisJICAkb3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCisKKwkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKwkgIHByb2dmaWxlcz1gJEVDSE8gIlgkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCisJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkcHJvZ2ZpbGUnIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRwcm9nZmlsZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICBkb25lCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAgICAgICAgICAgICAgICBldmFsICdjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZWxzZQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgIiR7U0VEfSAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJworCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICAqY3lnd2luIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBmaQorCWZpCisKKwlmb3IgZGxwcmVmaWxlIGluICRkbHByZWZpbGVzOyBkbworCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKwkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgIGV2YWwgIiROTSAkZGxwcmVmaWxlIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgIH0KKwlkb25lCisKKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBhbiBlbXB0eSBmaWxlLgorCSAgdGVzdCAtZiAiJG5saXN0IiB8fCA6ID4gIiRubGlzdCIKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKwkgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorCSAgZmkKKworCSAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKwkgIGlmICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgfAorCSAgICAgIGlmIHNvcnQgLWsgMyA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlzb3J0IC1rIDMKKwkgICAgICBlbHNlCisJCXNvcnQgKzIKKwkgICAgICBmaSB8CisJICAgICAgdW5pcSA+ICIkbmxpc3QiUzsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IlMgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiJworCSAgZWxzZQorCSAgICAkRUNITyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICBmaQorCisJICAkRUNITyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICphZGRyZXNzOworfSBsdF9kbHN5bWxpc3Q7CisiCisJICBjYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlCisgICBydW50aW1lIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbgorICAgb24gcHNldWRvLXJlbG9jcy4gICovIgorCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKwkgICpvc2Y1KikKKwkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEgKi8iCisJICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworCSAgKikKKwkgICAgbHRfZGxzeW1fY29uc3Q9Y29uc3QgOzsKKwkgIGVzYWMKKworCSAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCitleHRlcm4gJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdOworJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3tcCisgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgorCisJICBjYXNlICRuZWVkX2xpYl9wcmVmaXggaW4KKwkgIG5vKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgICopCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICBlc2FjCisJICAkRUNITyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmXAorIgorCX0gIyAhJG9wdF9kcnlfcnVuCisKKwlwaWNfZmxhZ19mb3Jfc3ltdGFibGU9CisJY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCisJKiIgLXN0YXRpYyAiKikgOzsKKwkqKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgIyBjb21waWxpbmcgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIHdpdGggcGljX2ZsYWcgd29ya3MgYXJvdW5kCisJICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKKwkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKKwkgICMgcGljX2ZsYWcgd2hlbiBsaW5raW5nIHdpdGggLXN0YXRpYy4gIFRoZSBwcm9ibGVtIGV4aXN0cyBpbgorCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KKwkgICotKi1mcmVlYnNkMip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIC1ERlJFRUJTRF9XT1JLQVJPVU5EIiA7OworCSAgKi0qLWhwdXgqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiWCRteV9waWNfcCIgIT0gWG5vOyB0aGVuCisJICAgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJc3ltdGFiX2NmbGFncz0KKwlmb3IgYXJnIGluICRMVENGTEFHUzsgZG8KKwkgIGNhc2UgJGFyZyBpbgorCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CisJICAqKSBzeW10YWJfY2ZsYWdzPSIkc3ltdGFiX2NmbGFncyAkYXJnIiA7OworCSAgZXNhYworCWRvbmUKKworCSMgTm93IGNvbXBpbGUgdGhlIGR5bmFtaWMgc3ltYm9sIGZpbGUuCisJZnVuY19zaG93X2V2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyRzeW10YWJfY2ZsYWdzIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRteV9kbHN5bXMiKScgJ2V4aXQgJD8nCisKKwkjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCInCisKKwkjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgorCXN5bWZpbGVvYmo9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQiCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmIjsgdGhlbgorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgZWxzZQorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpCisJICA7OworCSopCisJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlmdW5jX2ZhdGFsX2Vycm9yICJ1bmtub3duIHN1ZmZpeCBmb3IgXGAkbXlfZGxzeW1zJyIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCisgICAgICAjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCisgICAgICAjIHJlYWxseSB3YXMgcmVxdWlyZWQuCisKKyAgICAgICMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCisgICAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAorICAgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAorICAgIGZpCit9CisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCitmdW5jX3dpbjMyX2xpYmlkICgpCit7CisgICRvcHRfZGVidWcKKyAgd2luMzJfbGliaWRfdHlwZT0idW5rbm93biIKKyAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKKyAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAqYXJcIGFyY2hpdmVcIGltcG9ydFwgbGlicmFyeSopICMgZGVmaW5pdGVseSBpbXBvcnQKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisgICAgOzsKKyAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYworICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKyAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IHBlLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSAkMSB8CisJJFNFRCAtbiAtZSAnCisJICAgIDEsMTAweworCQkvIEkgL3sKKwkJICAgIHMsLiosaW1wb3J0LAorCQkgICAgcAorCQkgICAgcQorCQl9CisJICAgIH0nYAorICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KKyAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKKyAgICAgICopICAgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBzdGF0aWMiOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgICpETEwqKQorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgOzsKKyAgKmV4ZWN1dGFibGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRzIGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCisgICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAgICpNU1wgV2luZG93c1wgUEVcIEludGVsKikKKyAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKK30KKworCisKKyMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgZl9leF9hbl9hcl9kaXI9IiQxIjsgc2hpZnQKKyAgICBmX2V4X2FuX2FyX29sZGxpYj0iJDEiCisgICAgZnVuY19zaG93X2V2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwiXCRmX2V4X2FuX2FyX29sZGxpYlwiKSIgJ2V4aXQgJD8nCisgICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgOgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9iamVjdCBuYW1lIGNvbmZsaWN0cyBpbiBhcmNoaXZlOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIgorICAgIGZpCit9CisKKworIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KK2Z1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9nZW50b3A9IiQxIjsgc2hpZnQKKyAgICBteV9vbGRsaWJzPSR7MSsiJEAifQorICAgIG15X29sZG9ianM9IiIKKyAgICBteV94bGliPSIiCisgICAgbXlfeGFicz0iIgorICAgIG15X3hkaXI9IiIKKworICAgIGZvciBteV94bGliIGluICRteV9vbGRsaWJzOyBkbworICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgorICAgICAgY2FzZSAkbXlfeGxpYiBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0iJG15X3hsaWIiIDs7CisJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CisgICAgICBlc2FjCisgICAgICBmdW5jX2Jhc2VuYW1lICIkbXlfeGxpYiIKKyAgICAgIG15X3hsaWI9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgorICAgICAgd2hpbGUgOjsgZG8KKyAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgorCSoiICRteV94bGliX3UgIiopCisJICBmdW5jX2FyaXRoICRleHRyYWN0ZWRfc2VyaWFsICsgMQorCSAgZXh0cmFjdGVkX3NlcmlhbD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7CisJKikgYnJlYWsgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKKyAgICAgIG15X3hkaXI9IiRteV9nZW50b3AvJG15X3hsaWJfdSIKKworICAgICAgZnVuY19ta2Rpcl9wICIkbXlfeGRpciIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi1kYXJ3aW4qKQorCWZ1bmNfdmVyYm9zZSAiRXh0cmFjdGluZyAkbXlfeGFicyIKKwkjIERvIG5vdCBib3RoZXIgZG9pbmcgYW55dGhpbmcgaWYganVzdCBhIGRyeSBydW4KKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgZGFyd2luX29yaWdfZGlyPWBwd2RgCisJICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/CisJICBkYXJ3aW5fYXJjaGl2ZT0kbXlfeGFicworCSAgZGFyd2luX2N1cmRpcj1gcHdkYAorCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT1gYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSJgCisJICBkYXJ3aW5fYXJjaGVzPWAkTElQTyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGwgfHwgdHJ1ZWAKKwkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbgorCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCisJICAgIGRhcndpbl9hcmNoPQorCSAgICBmdW5jX3ZlcmJvc2UgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KKwkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgJExJUE8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIgIiR7ZGFyd2luX2FyY2hpdmV9IgorCSAgICAgIGNkICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgorCSAgICAgICRSTSAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKKyAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkU0VEIC1lICIkYmFzZW5hbWUiIHwgc29ydCAtdWAKKwkgICAgZGFyd2luX2ZpbGU9CisJICAgIGRhcndpbl9maWxlcz0KKwkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCisJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCAkTkwyU1BgCisJICAgICAgJExJUE8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKKwkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKKwkgICAgJFJNIC1yZiB1bmZhdC0kJAorCSAgICBjZCAiJGRhcndpbl9vcmlnX2RpciIKKwkgIGVsc2UKKwkgICAgY2QgJGRhcndpbl9vcmlnX2RpcgorCSAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwkgIGZpICMgJGRhcndpbl9hcmNoZXMKKwl9ICMgISRvcHRfZHJ5X3J1bgorCTs7CisgICAgICAqKQorICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwk7OworICAgICAgZXNhYworICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICROTDJTUGAKKyAgICBkb25lCisKKyAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKK30KKworCisKKyMgZnVuY19lbWl0X3dyYXBwZXJfcGFydDEgW2FyZz1ub10KKyMKKyMgRW1pdCB0aGUgZmlyc3QgcGFydCBvZiBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBkZXNjcmlwdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyMgZnVuY19lbWl0X3dyYXBwZXIoKSwgYmVsb3cuCitmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MSAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxX2FyZzE9bm8KKwlpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisJICBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MV9hcmcxPSQxCisJZmkKKworCSRFQ0hPICJcCisjISAkU0hFTEwKKworIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisjIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKyMKKyMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisjIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK1hzZWQ9JyR7U0VEfSAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIgorCisjIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9uIG1vZGUuCitpZiB0ZXN0IFwiXCRsaWJ0b29sX2luc3RhbGxfbWFnaWNcIiA9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgIyBpbnN0YWxsIG1vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisgIGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb249JyRtYWNyb192ZXJzaW9uJworICBub3RpbnN0X2RlcGxpYnM9JyRub3RpbnN0X2RlcGxpYnMnCitlbHNlCisgICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRFQ0hPIGFyZSBhbHJlYWR5IHNldC4KKyAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgIEVDSE89XCIkcWVjaG9cIgorICAgIGZpbGU9XCJcJDBcIgorICAgICMgTWFrZSBzdXJlIGVjaG8gd29ya3MuCisgICAgaWYgdGVzdCBcIlhcJDFcIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorICAgICAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgICAgICBzaGlmdAorICAgIGVsaWYgdGVzdCBcIlhcYHsgXCRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxcYFwiID0gJ1hcdCc7IHRoZW4KKyAgICAgICMgWWlwcGVlLCBcJEVDSE8gd29ya3MhCisgICAgICA6CisgICAgZWxzZQorICAgICAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLCBhbmQgdGhlbiBtYXliZSBcJEVDSE8gd2lsbCB3b3JrLgorICAgICAgZXhlYyAkU0hFTEwgXCJcJDBcIiAtLW5vLXJlZXhlYyBcJHsxK1wiXCRAXCJ9CisgICAgZmkKKyAgZmlcCisiCisJJEVDSE8gIlwKKworICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgorICB0aGlzZGlyPVxgXCRFQ0hPIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJS9bXi9dKiQlJSdcYAorICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCisKKyAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCisgIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAorICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCisgICAgZGVzdGRpcj1cYFwkRUNITyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyUvW14vXSpcJCUlJ1xgCisKKyAgICAjIElmIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gY2hhbmdlIHRoaXNkaXIuCisgICAgaWYgdGVzdCBcInhcJGRlc3RkaXJcIiAhPSBcInhcJGZpbGVcIjsgdGhlbgorICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCisgICAgICBbXFxcXC9dKiB8IFtBLVphLXpdOltcXFxcL10qKSB0aGlzZGlyPVwiXCRkZXN0ZGlyXCIgOzsKKyAgICAgICopIHRoaXNkaXI9XCJcJHRoaXNkaXIvXCRkZXN0ZGlyXCIgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorCisgICAgZmlsZT1cYFwkRUNITyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyVeLiovJSUnXGAKKyAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJHtTRUR9IC1uICdzLy4qLT4gLy9wJ1xgCisgIGRvbmUKKyIKK30KKyMgZW5kOiBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MQorCisjIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyIFthcmc9bm9dCisjCisjIEVtaXQgdGhlIHNlY29uZCBwYXJ0IG9mIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisjIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGRlc2NyaXB0aW9uIGFzc29jaWF0ZWQgd2l0aAorIyBmdW5jX2VtaXRfd3JhcHBlcigpLCBiZWxvdy4KK2Z1bmNfZW1pdF93cmFwcGVyX3BhcnQyICgpCit7CisJZnVuY19lbWl0X3dyYXBwZXJfcGFydDJfYXJnMT1ubworCWlmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKwkgIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyX2FyZzE9JDEKKwlmaQorCisJJEVDSE8gIlwKKworICAjIFVzdWFsbHkgJ25vJywgZXhjZXB0IG9uIGN5Z3dpbi9taW5ndyB3aGVuIGVtYmVkZGVkIGludG8KKyAgIyB0aGUgY3dyYXBwZXIuCisgIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSPSRmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0Ml9hcmcxCisgIGlmIHRlc3QgXCJcJFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSXCIgPSBcInllc1wiOyB0aGVuCisgICAgIyBzcGVjaWFsIGNhc2UgZm9yICcuJworICAgIGlmIHRlc3QgXCJcJHRoaXNkaXJcIiA9IFwiLlwiOyB0aGVuCisgICAgICB0aGlzZGlyPVxgcHdkXGAKKyAgICBmaQorICAgICMgcmVtb3ZlIC5saWJzIGZyb20gdGhpc2RpcgorICAgIGNhc2UgXCJcJHRoaXNkaXJcIiBpbgorICAgICpbXFxcXC9dJG9iamRpciApIHRoaXNkaXI9XGBcJEVDSE8gXCJYXCR0aGlzZGlyXCIgfCBcJFhzZWQgLWUgJ3MlW1xcXFwvXVteXFxcXC9dKiQlJSdcYCA7OworICAgICRvYmpkaXIgKSAgIHRoaXNkaXI9LiA7OworICAgIGVzYWMKKyAgZmkKKworICAjIFRyeSB0byBnZXQgdGhlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lLgorICBhYnNkaXI9XGBjZCBcIlwkdGhpc2RpclwiICYmIHB3ZFxgCisgIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCisiCisKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAorICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorCisgIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fAorICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJE1LRElSIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgJEVDSE8gIlwKKworICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5CisgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcJHJlbGlua19jb21tYW5kIDI+JjFcYDsgdGhlbiA6CisgICAgICBlbHNlCisJJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorCSRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorCWV4aXQgMQorICAgICAgZmkKKyAgICBmaQorCisgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8CisgICAgeyAkUk0gXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7CisgICAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH0KKyAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgZmkiCisJZWxzZQorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT0nJG91dHB1dG5hbWUnCisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisiCisJZmkKKworCSRFQ0hPICJcCisKKyAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKworCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKKyAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCisKKyAgICAjIFNvbWUgc3lzdGVtcyBjYW5ub3QgY29wZSB3aXRoIGNvbG9uLXRlcm1pbmF0ZWQgJHNobGlicGF0aF92YXIKKyAgICAjIFRoZSBzZWNvbmQgY29sb24gaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBCZU9TIFI0IHNlZAorICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiWFwkJHNobGlicGF0aF92YXJcIiB8IFwkWHNlZCAtZSAncy86OipcJC8vJ1xgCisKKyAgICBleHBvcnQgJHNobGlicGF0aF92YXIKKyIKKwlmaQorCisJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorIgorCWZpCisKKwkkRUNITyAiXAorICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCisiCisJY2FzZSAkaG9zdCBpbgorCSMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworCSotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICAkRUNITyAiXAorICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisJICA7OworCisJKikKKwkgICRFQ0hPICJcCisgICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKwkgIDs7CisJZXNhYworCSRFQ0hPICJcCisgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorICBlbHNlCisgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgIFwkRUNITyBcIlwkMDogZXJyb3I6IFxcXGBcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKyAgICAkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisgICAgZXhpdCAxCisgIGZpCitmaVwKKyIKK30KKyMgZW5kOiBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MgorCisKKyMgZnVuY19lbWl0X3dyYXBwZXIgW2FyZz1ub10KKyMKKyMgRW1pdCBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBEb24ndCBkaXJlY3RseSBvcGVuIGEgZmlsZSBiZWNhdXNlIHdlIG1heSB3YW50IHRvCisjIGluY29ycG9yYXRlIHRoZSBzY3JpcHQgY29udGVudHMgd2l0aGluIGEgY3lnd2luL21pbmd3CisjIHdyYXBwZXIgZXhlY3V0YWJsZS4gIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4KKyMgZnVuY19tb2RlX2xpbmsgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlcworIyBzZXQgdGhlcmVpbi4KKyMKKyMgQVJHIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUgorIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKKyMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzIHN0b3JlZCBpcworIyB0aGUgJG9iamRpciBkaXJlY3RvcnkuICBUaGlzIGlzIGEgY3lnd2luL21pbmd3LXNwZWNpZmljCisjIGJlaGF2aW9yLgorZnVuY19lbWl0X3dyYXBwZXIgKCkKK3sKKwlmdW5jX2VtaXRfd3JhcHBlcl9hcmcxPW5vCisJaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorCSAgZnVuY19lbWl0X3dyYXBwZXJfYXJnMT0kMQorCWZpCisKKwkjIHNwbGl0IHRoaXMgdXAgc28gdGhhdCBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisJIyBjYW4gY2FsbCBlYWNoIHBhcnQgaW5kZXBlbmRlbnRseS4KKwlmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MSAiJHtmdW5jX2VtaXRfd3JhcHBlcl9hcmcxfSIKKwlmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MiAiJHtmdW5jX2VtaXRfd3JhcHBlcl9hcmcxfSIKK30KKworCisjIGZ1bmNfdG9faG9zdF9wYXRoIGFyZworIworIyBDb252ZXJ0IHBhdGhzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorIyBJbnRlbmRlZCBmb3IgdXNlIHdpdGggIm5hdGl2ZSIgbWluZ3cgKHdoZXJlIGxpYnRvb2wgaXRzZWxmCisjIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIG1zeXMgc2hlbGwpLCBvciBpbiB0aGUgZm9sbG93aW5nIGNyb3NzLQorIyBidWlsZCBlbnZpcm9ubWVudHM6CisjICAgICRidWlsZCAgICAgICAgICAkaG9zdAorIyAgICBtaW5ndyAobXN5cykgICAgbWluZ3cgIFtlLmcuIG5hdGl2ZV0KKyMgICAgY3lnd2luICAgICAgICAgIG1pbmd3CisjICAgICpuaXggKyB3aW5lICAgICBtaW5ndworIyB3aGVyZSB3aW5lIGlzIGVxdWlwcGVkIHdpdGggdGhlIGB3aW5lcGF0aCcgZXhlY3V0YWJsZS4KKyMgSW4gdGhlIG5hdGl2ZSBtaW5ndyBjYXNlLCB0aGUgKG1zeXMpIHNoZWxsIGF1dG9tYXRpY2FsbHkKKyMgY29udmVydHMgcGF0aHMgZm9yIGFueSBub24tbXN5cyBhcHBsaWNhdGlvbnMgaXQgbGF1bmNoZXMsCisjIGJ1dCB0aGF0IGZhY2lsaXR5IGlzbid0IGF2YWlsYWJsZSBmcm9tIGluc2lkZSB0aGUgY3dyYXBwZXIuCisjIFNpbWlsYXIgYWNjb21tb2RhdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgJGhvc3QgbWluZ3cgYW5kCisjICRidWlsZCBjeWd3aW4uICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBubyBoYXJtIGZvciBvdGhlcgorIyAkaG9zdC8kYnVpbGQgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgYWJvdmUuCisjCisjIEFSRyBpcyB0aGUgcGF0aCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKyMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBmb3IgJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCisjIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aCAoKQoreworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKm1pbmd3KiApCisgICAgICAgIGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKyAgICAgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICAgICAqbWluZ3cqICkgIyBhY3R1YWxseSwgbXN5cworICAgICAgICAgICAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0CisgICAgICAgICAgICBsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzPSJzL1sgXSpcJC8vIgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gKCBjbWQgLy9jIGVjaG8gIiQxIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX3N0cmlwX3RyYWlsaW5nX3NwYWNlcyIgKSAyPi9kZXYvbnVsbCB8fCBlY2hvICIiYAorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgfFwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqY3lnd2luKiApCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPWBjeWdwYXRoIC13ICIkMSJgCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICAgICA7OworICAgICAgICAgICogKQorICAgICAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybworICAgICAgICAgICAgIyBlcnJvciBjb2RlLCBzbyB3ZSBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZgorICAgICAgICAgICAgIyBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgY29tbWFuZCBpcyBub3QKKyAgICAgICAgICAgICMgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorICAgICAgICAgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoCisgICAgICAgICAgICAjIGVycm9yIGNvZGUgb2YgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMKKyAgICAgICAgICAgICMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY190b19ob3N0X3BhdGhfdG1wMX0iOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiIHxcCisgICAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEFsbG93IHdhcm5pbmcgYmVsb3cuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKyAgICAgICAgICBmdW5jX2Vycm9yICIgICckMSciCisgICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgICAgICAgIyBGYWxsYmFjazoKKyAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICAgICAgICBmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK30KKyMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aAorCisjIGZ1bmNfdG9faG9zdF9wYXRobGlzdCBhcmcKKyMKKyMgQ29udmVydCBwYXRobGlzdHMgdG8gaG9zdCBmb3JtYXQgd2hlbiB1c2VkIHdpdGggYnVpbGQgdG9vbHMuCisjIFNlZSBmdW5jX3RvX2hvc3RfcGF0aCgpLCBhYm92ZS4gVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyB0aGUKKyMgZm9sbG93aW5nICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMgKGJ1dCBkb2VzIG5vIGhhcm0gZm9yCisjIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGhlcmUpOgorIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKKyMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCisjICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKKyMKKyMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8KKyMgJGhvc3QgZm9ybWF0LiBJZiBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yCisjIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkKKyMgb24gb3V0cHV0LgorIworIyBBUkcgaXMgYSBwYXRobGlzdCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKyMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBvbiAkaG9zdC4gVGhlIHJlc3VsdCBpcyBzdG9yZWQKKyMgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aGxpc3QgKCkKK3sKKyAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgICBjYXNlICRob3N0IGluCisgICAgICAqbWluZ3cqICkKKyAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworICAgICAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKyAgICAgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorICAgICAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMj0iJDEiCisgICAgICAgICMgT25jZSBzZXQgZm9yIHRoaXMgY2FsbCwgdGhpcyB2YXJpYWJsZSBzaG91bGQgbm90IGJlCisgICAgICAgICMgcmVhc3NpZ25lZC4gSXQgaXMgdXNlZCBpbiB0aGEgZmFsbGJhY2sgY2FzZS4KKyAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDE9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMiIgfFwKKyAgICAgICAgICAkU0VEIC1lICdzfF46Knx8JyAtZSAnc3w6KiR8fCdgCisgICAgICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAgICAgKm1pbmd3KiApICMgQWN0dWFsbHksIG1zeXMuCisgICAgICAgICAgICAjIEF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQuCisgICAgICAgICAgICBsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzPSJzL1sgXSpcJC8vIgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDI9YCggY21kIC8vYyBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzIiApIDI+L2Rldi9udWxsIHx8IGVjaG8gIiJgCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDIiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKmN5Z3dpbiogKQorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDI9YGN5Z3BhdGggLXcgLXAgIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSJgCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDIiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKiApCisgICAgICAgICAgICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRobGlzdHMKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiIKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlM9JElGUworICAgICAgICAgICAgSUZTPToKKyAgICAgICAgICAgIGZvciBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEgOyBkbworICAgICAgICAgICAgICBJRlM9JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlMKKyAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIiA7IHRoZW4KKyAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIgorICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdDskZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBJRlM9OgorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGgocykgY29ycmVzcG9uZGluZyB0byIKKyAgICAgICAgICBmdW5jX2Vycm9yICIgICckMSciCisgICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgICAgICAgIyBGYWxsYmFjay4gVGhpcyBtYXkgYnJlYWsgaWYgJDEgY29udGFpbnMgRE9TLXN0eWxlIGRyaXZlCisgICAgICAgICAgIyBzcGVjaWZpY2F0aW9ucy4gVGhlIGZpeCBpcyBub3QgdG8gY29tcGxpY2F0ZSB0aGUgZXhwcmVzc2lvbgorICAgICAgICAgICMgYmVsb3csIGJ1dCBmb3IgdGhlIHVzZXIgdG8gcHJvdmlkZSBhIHdvcmtpbmcgd2luZSBpbnN0YWxsYXRpb24KKyAgICAgICAgICAjIHdpdGggd2luZXBhdGggc28gdGhhdCBwYXRoIHRyYW5zbGF0aW9uIGluIHRoZSBjcm9zcy10by1taW5ndworICAgICAgICAgICMgY2FzZSB3b3JrcyBwcm9wZXJseS4KKyAgICAgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2Rvcz0ic3w6fDt8ZyIKKyAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHxcCisgICAgICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX25peF90b19kb3MiYAorICAgICAgICBmaQorICAgICAgICAjIE5vdywgYWRkIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMgYmFjaworICAgICAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgICA6KiApIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IjskZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgY2FzZSAiJDEiIGluCisgICAgICAgICAgKjogKSBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdDsiCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorfQorIyBlbmQ6IGZ1bmNfdG9faG9zdF9wYXRobGlzdAorCisjIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKyMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAorIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKKyMgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZSBzZXQgdGhlcmVpbi4KK2Z1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKK3sKKwljYXQgPDxFT0YKKworLyogJGN3cmFwcGVyc291cmNlIC0gdGVtcG9yYXJ5IHdyYXBwZXIgZXhlY3V0YWJsZSBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorCisgICBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKworICAgVGhpcyB3cmFwcGVyIGV4ZWN1dGFibGUgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorCisgICBDdXJyZW50bHksIGl0IHNpbXBseSBleGVjcyB0aGUgd3JhcHBlciAqc2NyaXB0KiAiJFNIRUxMICRvdXRwdXQiLAorICAgYnV0IGNvdWxkIGV2ZW50dWFsbHkgYWJzb3JiIGFsbCBvZiB0aGUgc2NyaXB0cyBmdW5jdGlvbmFsaXR5IGFuZAorICAgZXhlYyAkb2JqZGlyLyRvdXRwdXRuYW1lIGRpcmVjdGx5LgorKi8KK0VPRgorCSAgICBjYXQgPDwiRU9GIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgX01TQ19WRVIKKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjIGluY2x1ZGUgPHByb2Nlc3MuaD4KKyMgaW5jbHVkZSA8aW8uaD4KKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyNlbHNlCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgaWZkZWYgX19DWUdXSU5fXworIyAgaW5jbHVkZSA8aW8uaD4KKyMgIGRlZmluZSBIQVZFX1NFVEVOVgorIyAgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitjaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOworaW50IHB1dGVudiAoY2hhciAqKTsKK2ludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZiBkZWZpbmVkKFBBVEhfTUFYKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCisjZWxzZQorIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CisjZW5kaWYKKworI2lmbmRlZiBTX0lYT1RICisjIGRlZmluZSBTX0lYT1RIIDAKKyNlbmRpZgorI2lmbmRlZiBTX0lYR1JQCisjIGRlZmluZSBTX0lYR1JQIDAKKyNlbmRpZgorCisjaWZkZWYgX01TQ19WRVIKKyMgZGVmaW5lIFNfSVhVU1IgX1NfSUVYRUMKKyMgZGVmaW5lIHN0YXQgX3N0YXQKKyMgaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECisjICBkZWZpbmUgaW50cHRyX3QgaW50CisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKKyAgZGVmaW5lZCAoX19PUzJfXykKKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKwkoKChjaCkgPT0gRElSX1NFUEFSQVRPUikgfHwgKChjaCkgPT0gRElSX1NFUEFSQVRPUl8yKSkKKyNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCisjZWxzZSAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1JfMikKKyNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisKKyNpZmRlZiBfX0NZR1dJTl9fCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjZW5kaWYKKworI2lmbmRlZiBGT1BFTl9XQgorIyBkZWZpbmUgRk9QRU5fV0IgInciCisjZW5kaWYKKyNpZm5kZWYgX09fQklOQVJZCisjIGRlZmluZSBfT19CSU5BUlkgMAorI2VuZGlmCisKKyNkZWZpbmUgWE1BTExPQyh0eXBlLCBudW0pICAgICAgKCh0eXBlICopIHhtYWxsb2MgKChudW0pICogc2l6ZW9mKHR5cGUpKSkKKyNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAorICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorfSB3aGlsZSAoMCkKKworI3VuZGVmIExUV1JBUFBFUl9ERUJVR1BSSU5URgorI2lmIGRlZmluZWQgREVCVUdXUkFQUEVSCisjIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykgbHR3cmFwcGVyX2RlYnVncHJpbnRmIGFyZ3MKK3N0YXRpYyB2b2lkCitsdHdyYXBwZXJfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydCAoYXJncywgZm10KTsKKyAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKyAgICB2YV9lbmQgKGFyZ3MpOworfQorI2Vsc2UKKyMgZGVmaW5lIExUV1JBUFBFUl9ERUJVR1BSSU5URihhcmdzKQorI2VuZGlmCisKK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9IE5VTEw7CisKK3ZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOworY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK2NvbnN0IGNoYXIgKmJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CitjaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpOworY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKK2ludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cit2b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOwordm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCk7Cit2b2lkIGx0X29wdF9wcm9jZXNzX2Vudl9zZXQgKGNvbnN0IGNoYXIgKmFyZyk7Cit2b2lkIGx0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChjb25zdCBjaGFyICphcmcpOwordm9pZCBsdF9vcHRfcHJvY2Vzc19lbnZfYXBwZW5kIChjb25zdCBjaGFyICphcmcpOworaW50IGx0X3NwbGl0X25hbWVfdmFsdWUgKGNvbnN0IGNoYXIgKmFyZywgY2hhcioqIG5hbWUsIGNoYXIqKiB2YWx1ZSk7Cit2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNjcmlwdF90ZXh0X3BhcnQxID0KK0VPRgorCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxIHllcyB8CisJICAgICAgICAkU0VEIC1lICdzL1woW1xcIl1cKS9cXFwxL2cnIFwKKwkgICAgICAgICAgICAgLWUgJ3MvXi8gICIvJyAtZSAncy8kL1xcbiIvJworCSAgICBlY2hvICI7IgorCSAgICBjYXQgPDxFT0YKKworc3RhdGljIGNvbnN0IGNoYXIgKnNjcmlwdF90ZXh0X3BhcnQyID0KK0VPRgorCSAgICBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MiB5ZXMgfAorCSAgICAgICAgJFNFRCAtZSAncy9cKFtcXCJdXCkvXFxcMS9nJyBcCisJICAgICAgICAgICAgIC1lICdzL14vICAiLycgLWUgJ3MvJC9cXG4iLycKKwkgICAgZWNobyAiOyIKKworCSAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Citjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CitFT0YKKworCSAgICBpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdCAiJHRlbXBfcnBhdGgiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdCAiJGRsbHNlYXJjaHBhdGg6IgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICIiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gIiRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZmkKKworCisJICAgIGNhdCA8PCJFT0YiCisKKyNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCisjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSCAgNQorCitzdGF0aWMgY29uc3Qgc2l6ZV90IG9wdF9wcmVmaXhfbGVuICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEg7CitzdGF0aWMgY29uc3QgY2hhciAqbHR3cmFwcGVyX29wdGlvbl9wcmVmaXggPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWDsKKworc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKKworc3RhdGljIGNvbnN0IHNpemVfdCBlbnZfc2V0X29wdF9sZW4gICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICsgNzsKK3N0YXRpYyBjb25zdCBjaGFyICplbnZfc2V0X29wdCAgICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJlbnYtc2V0IjsKKyAgLyogYXJndW1lbnQgaXMgcHV0ZW52LXN0eWxlICJmb289YmFyIiwgdmFsdWUgb2YgZm9vIGlzIHNldCB0byBiYXIgKi8KKworc3RhdGljIGNvbnN0IHNpemVfdCBlbnZfcHJlcGVuZF9vcHRfbGVuID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICsgMTE7CitzdGF0aWMgY29uc3QgY2hhciAqZW52X3ByZXBlbmRfb3B0ICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZW52LXByZXBlbmQiOworICAvKiBhcmd1bWVudCBpcyBwdXRlbnYtc3R5bGUgImZvbz1iYXIiLCBuZXcgdmFsdWUgb2YgZm9vIGlzIGJhciR7Zm9vfSAqLworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGVudl9hcHBlbmRfb3B0X2xlbiAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEggKyAxMDsKK3N0YXRpYyBjb25zdCBjaGFyICplbnZfYXBwZW5kX29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJlbnYtYXBwZW5kIjsKKyAgLyogYXJndW1lbnQgaXMgcHV0ZW52LXN0eWxlICJmb289YmFyIiwgbmV3IHZhbHVlIG9mIGZvbyBpcyAke2Zvb31iYXIgKi8KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyICoqbmV3YXJnejsKKyAgaW50ICBuZXdhcmdjOworICBjaGFyICp0bXBfcGF0aHNwZWM7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9wYXRoOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfbmFtZTsKKyAgY2hhciAqdGFyZ2V0X25hbWU7CisgIGNoYXIgKmx0X2FyZ3ZfemVybzsKKyAgaW50cHRyX3QgcnZhbCA9IDEyNzsKKworICBpbnQgaTsKKworICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBhcmd2WzBdICAgICAgOiAlc1xuIiwgYXJndlswXSkpOworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIHByb2dyYW1fbmFtZSA6ICVzXG4iLCBwcm9ncmFtX25hbWUpKTsKKworICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdCAqLworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSA9PSAwKQorCXsKK0VPRgorCSAgICBjYXNlICIkaG9zdCIgaW4KKwkgICAgICAqbWluZ3cqIHwgKmN5Z3dpbiogKQorCQkjIG1ha2Ugc3Rkb3V0IHVzZSAidW5peCIgbGluZSBlbmRpbmdzCisJCWVjaG8gIiAgICAgICAgICBzZXRtb2RlKDEsX09fQklOQVJZKTsiCisJCTs7CisJICAgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisJICBwcmludGYgKCIlcyIsIHNjcmlwdF90ZXh0X3BhcnQxKTsKKwkgIHByaW50ZiAoIiVzIiwgc2NyaXB0X3RleHRfcGFydDIpOworCSAgcmV0dXJuIDA7CisJfQorICAgIH0KKworICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisgIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoIkNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdCA6ICVzXG4iLAorCQkJICB0bXBfcGF0aHNwZWMpKTsKKworICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKwkJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwKCBiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgLyogdGFyZ2V0X25hbWUgdHJhbnNmb3JtcyAtLSB1c2UgYWN0dWFsIHRhcmdldCBwcm9ncmFtIG5hbWU7IG1pZ2h0IGhhdmUgbHQtIHByZWZpeCAqLworICB0YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkpOworICBzdHJlbmR6YXAgKHRhcmdldF9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyICh0YXJnZXRfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKwkJCSAgdGFyZ2V0X25hbWUpKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgorICBuZXdhcmd6WzBdID0KKyAgICBYTUFMTE9DIChjaGFyLCAoc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkgKworCQkgICAgc3RybGVuICgiJG9iamRpciIpICsgMSArIHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX25hbWUpICsgMSkpOworICBzdHJjcHkgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiJG9iamRpciIpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIvIik7CitFT0YKKworCSAgICBjYXQgPDwiRU9GIgorICAvKiBzdG9wIGhlcmUsIGFuZCBjb3B5IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcyB0d2ljZSAqLworICB0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChuZXdhcmd6WzBdKTsKKworICAvKiBkbyBOT1Qgd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlLCBzbyB1c2UgYWN0dWFsX2N3cmFwcGVyX25hbWUgKi8KKyAgc3RyY2F0IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogRE8gd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlIGlmIGl0IGV4aXN0cywgc28gdXNlIHRhcmdldF9uYW1lICovCisgIGx0X2FyZ3ZfemVybyA9IGx0X2V4dGVuZF9zdHIgKHRtcF9wYXRoc3BlYywgdGFyZ2V0X25hbWUsIDEpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKyAgdG1wX3BhdGhzcGVjID0gTlVMTDsKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJICAgIGNhdCA8PCJFT0YiCisgIHsKKyAgICBjaGFyKiBwOworICAgIHdoaWxlICgocCA9IHN0cmNociAobmV3YXJnelswXSwgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChsdF9hcmd2X3plcm8sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICB9CitFT0YKKwkgICAgOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCisgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKyAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7CisgIGx0X3VwZGF0ZV9leGVfcGF0aCAoRVhFX1BBVEhfVkFSTkFNRSwgRVhFX1BBVEhfVkFMVUUpOworCisgIG5ld2FyZ2M9MDsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBpZiAoc3RybmNtcCAoYXJndltpXSwgZW52X3NldF9vcHQsIGVudl9zZXRfb3B0X2xlbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChhcmd2W2ldW2Vudl9zZXRfb3B0X2xlbl0gPT0gJz0nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBjaGFyICpwID0gYXJndltpXSArIGVudl9zZXRfb3B0X2xlbiArIDE7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9zZXQgKHApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV1bZW52X3NldF9vcHRfbGVuXSA9PSAnXDAnICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X3NldCAoYXJndlsrK2ldKTsgLyogZG9uJ3QgY29weSAqLworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGx0X2ZhdGFsICgiJXMgbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCIsIGVudl9zZXRfb3B0KTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgaWYgKHN0cm5jbXAgKGFyZ3ZbaV0sIGVudl9wcmVwZW5kX29wdCwgZW52X3ByZXBlbmRfb3B0X2xlbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChhcmd2W2ldW2Vudl9wcmVwZW5kX29wdF9sZW5dID09ICc9JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IGFyZ3ZbaV0gKyBlbnZfcHJlcGVuZF9vcHRfbGVuICsgMTsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X3ByZXBlbmQgKHApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV1bZW52X3ByZXBlbmRfb3B0X2xlbl0gPT0gJ1wwJyAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChhcmd2WysraV0pOyAvKiBkb24ndCBjb3B5ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbHRfZmF0YWwgKCIlcyBtaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50IiwgZW52X3ByZXBlbmRfb3B0KTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgaWYgKHN0cm5jbXAgKGFyZ3ZbaV0sIGVudl9hcHBlbmRfb3B0LCBlbnZfYXBwZW5kX29wdF9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYXJndltpXVtlbnZfYXBwZW5kX29wdF9sZW5dID09ICc9JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IGFyZ3ZbaV0gKyBlbnZfYXBwZW5kX29wdF9sZW4gKyAxOworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfYXBwZW5kIChwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldW2Vudl9hcHBlbmRfb3B0X2xlbl0gPT0gJ1wwJyAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9hcHBlbmQgKGFyZ3ZbKytpXSk7IC8qIGRvbid0IGNvcHkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsdF9mYXRhbCAoIiVzIG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQiLCBlbnZfYXBwZW5kX29wdCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgb3B0X3ByZWZpeF9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBsdF9mYXRhbCAoIlVucmVjb2duaXplZCBvcHRpb24gaW4gJXMgbmFtZXNwYWNlOiAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworICAgICAgICB9CisgICAgICAvKiBvdGhlcndpc2UgLi4uICovCisgICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKyAgICB9CisgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICAgICAoKCIobWFpbikgbHRfYXJndl96ZXJvIDogJXNcbiIsIChsdF9hcmd2X3plcm8gPyBsdF9hcmd2X3plcm8gOiAiPE5VTEw+IikpKTsKKyAgZm9yIChpID0gMDsgaSA8IG5ld2FyZ2M7IGkrKykKKyAgICB7CisgICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIG5ld2FyZ3pbJWRdICAgOiAlc1xuIiwgaSwgKG5ld2FyZ3pbaV0gPyBuZXdhcmd6W2ldIDogIjxOVUxMPiIpKSk7CisgICAgfQorCitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorICAvKiBleGVjdiBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgb24gbWluZ3cgYXMgZXhwZWN0ZWQgb24gdW5peCAqLworICBydmFsID0gX3NwYXdudiAoX1BfV0FJVCwgbHRfYXJndl96ZXJvLCAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5ld2FyZ3opOworICBpZiAocnZhbCA9PSAtMSkKKyAgICB7CisgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLworICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6IGVycm5vID0gJWRcbiIsIGx0X2FyZ3ZfemVybywgZXJybm8pKTsKKyAgICAgIHJldHVybiAxMjc7CisgICAgfQorICByZXR1cm4gcnZhbDsKK0VPRgorCQk7OworCSAgICAgICopCisJCWNhdCA8PCJFT0YiCisgIGV4ZWN2IChsdF9hcmd2X3plcm8sIG5ld2FyZ3opOworICByZXR1cm4gcnZhbDsgLyogPTEyNywgYnV0IGF2b2lkcyB1bnVzZWQgdmFyaWFibGUgd2FybmluZyAqLworRU9GCisJCTs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorfQorCit2b2lkICoKK3htYWxsb2MgKHNpemVfdCBudW0pCit7CisgIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7CisgIGlmICghcCkKKyAgICBsdF9mYXRhbCAoIk1lbW9yeSBleGhhdXN0ZWQiKTsKKworICByZXR1cm4gcDsKK30KKworY2hhciAqCit4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLAorCQkJICBzdHJpbmcpIDogTlVMTDsKK30KKworY29uc3QgY2hhciAqCitiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQorICAgIG5hbWUgKz0gMjsKKyNlbmRpZgorCisgIGZvciAoYmFzZSA9IG5hbWU7ICpuYW1lOyBuYW1lKyspCisgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKCpuYW1lKSkKKyAgICAgIGJhc2UgPSBuYW1lICsgMTsKKyAgcmV0dXJuIGJhc2U7Cit9CisKK2ludAorY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihjaGVja19leGVjdXRhYmxlKSAgOiAlc1xuIiwKKwkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmICgoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgICAgJiYgKHN0LnN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkpCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworaW50CittYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIGludCBydmFsID0gMDsKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWtlX2V4ZWN1dGFibGUpICAgOiAlc1xuIiwKKwkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmIChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgeworICAgICAgcnZhbCA9IGNobW9kIChwYXRoLCBzdC5zdF9tb2RlIHwgU19JWE9USCB8IFNfSVhHUlAgfCBTX0lYVVNSKTsKKyAgICB9CisgIHJldHVybiBydmFsOworfQorCisvKiBTZWFyY2hlcyBmb3IgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgd3JhcHBlci4gIFJldHVybnMKKyAgIG5ld2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UKKyAgIERvZXMgbm90IGNoYXNlIHN5bWxpbmtzLCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyovCitjaGFyICoKK2ZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKK3sKKyAgaW50IGhhc19zbGFzaCA9IDA7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnBfbmV4dDsKKyAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCisgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKKyAgaW50IHRtcF9sZW47CisgIGNoYXIgKmNvbmNhdF9uYW1lOworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoZmluZF9leGVjdXRhYmxlKSAgIDogJXNcbiIsCisJCQkgIHdyYXBwZXIgPyAoKndyYXBwZXIgPyB3cmFwcGVyIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworCisgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogQWJzb2x1dGUgcGF0aD8gKi8KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKKyAgICB7CisgICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwlyZXR1cm4gY29uY2F0X25hbWU7CisgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyNlbmRpZgorICAgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKHdyYXBwZXJbMF0pKQorCXsKKwkgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisJICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCSAgICByZXR1cm4gY29uY2F0X25hbWU7CisJICBYRlJFRSAoY29uY2F0X25hbWUpOworCX0KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgICB9CisjZW5kaWYKKworICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQorICAgIGlmICgqcCA9PSAnLycpCisgICAgICB7CisJaGFzX3NsYXNoID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgaWYgKCFoYXNfc2xhc2gpCisgICAgeworICAgICAgLyogbm8gc2xhc2hlczsgc2VhcmNoIFBBVEggKi8KKyAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBnZXRlbnYgKCJQQVRIIik7CisgICAgICBpZiAocGF0aCAhPSBOVUxMKQorCXsKKwkgIGZvciAocCA9IHBhdGg7ICpwOyBwID0gcF9uZXh0KQorCSAgICB7CisJICAgICAgY29uc3QgY2hhciAqcTsKKwkgICAgICBzaXplX3QgcF9sZW47CisJICAgICAgZm9yIChxID0gcDsgKnE7IHErKykKKwkJaWYgKElTX1BBVEhfU0VQQVJBVE9SICgqcSkpCisJCSAgYnJlYWs7CisJICAgICAgcF9sZW4gPSBxIC0gcDsKKwkgICAgICBwX25leHQgPSAoKnEgPT0gJ1wwJyA/IHEgOiBxICsgMSk7CisJICAgICAgaWYgKHBfbGVuID09IDApCisJCXsKKwkJICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLworCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKwkJICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworCQkgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCQlyZXR1cm4gY29uY2F0X25hbWU7CisJICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgICAgfQorICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKKyAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgY29uY2F0X25hbWUgPSBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKyAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKyAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisKKyAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKyAgICByZXR1cm4gY29uY2F0X25hbWU7CisgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgIHJldHVybiBOVUxMOworfQorCitjaGFyICoKK2NoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKK3sKKyNpZm5kZWYgU19JU0xOSworICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworI2Vsc2UKKyAgY2hhciBidWZbTFRfUEFUSE1BWF07CisgIHN0cnVjdCBzdGF0IHM7CisgIGNoYXIgKnRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgY2hhciAqcDsKKyAgaW50IGhhc19zeW1saW5rcyA9IDA7CisgIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKKwkJCSAgICAgIHRtcF9wYXRoc3BlYykpOworICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQorCXsKKwkgIGlmIChTX0lTTE5LIChzLnN0X21vZGUpICE9IDApCisJICAgIHsKKwkgICAgICBoYXNfc3ltbGlua3MgPSAxOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkgIC8qIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGxhc3QgRElSX1NFUEFSQVRPUiAqLworCSAgcCA9IHRtcF9wYXRoc3BlYyArIHN0cmxlbiAodG1wX3BhdGhzcGVjKSAtIDE7CisJICB3aGlsZSAoKHAgPiB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgcC0tOworCSAgaWYgKChwID09IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICB7CisJICAgICAgLyogbm8gbW9yZSBESVJfU0VQQVJBVE9SUyBsZWZ0ICovCisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKwl9CisgICAgICBlbHNlCisJeworCSAgY2hhciAqZXJyc3RyID0gc3RyZXJyb3IgKGVycm5vKTsKKwkgIGx0X2ZhdGFsICgiRXJyb3IgYWNjZXNzaW5nIGZpbGUgJXMgKCVzKSIsIHRtcF9wYXRoc3BlYywgZXJyc3RyKTsKKwl9CisgICAgfQorICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBpZiAoIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworICAgIH0KKworICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICB7CisgICAgICBsdF9mYXRhbCAoIkNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworICAgIH0KKyAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisjZW5kaWYKK30KKworY2hhciAqCitzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0IChzdHIgIT0gTlVMTCk7CisgIGFzc2VydCAocGF0ICE9IE5VTEwpOworCisgIGxlbiA9IHN0cmxlbiAoc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuIChwYXQpOworCisgIGlmIChwYXRsZW4gPD0gbGVuKQorICAgIHsKKyAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47CisgICAgICBpZiAoc3RyY21wIChzdHIsIHBhdCkgPT0gMCkKKwkqc3RyID0gJ1wwJzsKKyAgICB9CisgIHJldHVybiBzdHI7Cit9CisKK3N0YXRpYyB2b2lkCitsdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXApCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBtb2RlKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOworICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKworICBpZiAoZXhpdF9zdGF0dXMgPj0gMCkKKyAgICBleGl0IChleGl0X3N0YXR1cyk7Cit9CisKK3ZvaWQKK2x0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CisgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworICB2YV9lbmQgKGFwKTsKK30KKwordm9pZAorbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisgIHsKKyNpZmRlZiBIQVZFX1NFVEVOVgorICAgIC8qIGFsd2F5cyBtYWtlIGEgY29weSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCisgICAgY2hhciAqc3RyID0geHN0cmR1cCAodmFsdWUpOworICAgIHNldGVudiAobmFtZSwgc3RyLCAxKTsKKyNlbHNlCisgICAgaW50IGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxICsgc3RybGVuICh2YWx1ZSkgKyAxOworICAgIGNoYXIgKnN0ciA9IFhNQUxMT0MgKGNoYXIsIGxlbik7CisgICAgc3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBuYW1lLCB2YWx1ZSk7CisgICAgaWYgKHB1dGVudiAoc3RyKSAhPSBFWElUX1NVQ0NFU1MpCisgICAgICB7CisgICAgICAgIFhGUkVFIChzdHIpOworICAgICAgfQorI2VuZGlmCisgIH0KK30KKworY2hhciAqCitsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCit7CisgIGNoYXIgKm5ld192YWx1ZTsKKyAgaWYgKG9yaWdfdmFsdWUgJiYgKm9yaWdfdmFsdWUpCisgICAgeworICAgICAgaW50IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKKyAgICAgIGludCBhZGRfbGVuID0gc3RybGVuIChhZGQpOworICAgICAgbmV3X3ZhbHVlID0gWE1BTExPQyAoY2hhciwgYWRkX2xlbiArIG9yaWdfdmFsdWVfbGVuICsgMSk7CisgICAgICBpZiAodG9fZW5kKQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIG9yaWdfdmFsdWUpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgb3JpZ192YWx1ZV9sZW4sIGFkZCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBhZGQpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgYWRkX2xlbiwgb3JpZ192YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBuZXdfdmFsdWUgPSB4c3RyZHVwIChhZGQpOworICAgIH0KKyAgcmV0dXJuIG5ld192YWx1ZTsKK30KKworaW50CitsdF9zcGxpdF9uYW1lX3ZhbHVlIChjb25zdCBjaGFyICphcmcsIGNoYXIqKiBuYW1lLCBjaGFyKiogdmFsdWUpCit7CisgIGNvbnN0IGNoYXIgKnA7CisgIGludCBsZW47CisgIGlmICghYXJnIHx8ICEqYXJnKQorICAgIHJldHVybiAxOworCisgIHAgPSBzdHJjaHIgKGFyZywgKGludCknPScpOworCisgIGlmICghcCkKKyAgICByZXR1cm4gMTsKKworICAqdmFsdWUgPSB4c3RyZHVwICgrK3ApOworCisgIGxlbiA9IHN0cmxlbiAoYXJnKSAtIHN0cmxlbiAoKnZhbHVlKTsKKyAgKm5hbWUgPSBYTUFMTE9DIChjaGFyLCBsZW4pOworICBzdHJuY3B5ICgqbmFtZSwgYXJnLCBsZW4tMSk7CisgICgqbmFtZSlbbGVuIC0gMV0gPSAnXDAnOworCisgIHJldHVybiAwOworfQorCit2b2lkCitsdF9vcHRfcHJvY2Vzc19lbnZfc2V0IChjb25zdCBjaGFyICphcmcpCit7CisgIGNoYXIgKm5hbWUgPSBOVUxMOworICBjaGFyICp2YWx1ZSA9IE5VTEw7CisKKyAgaWYgKGx0X3NwbGl0X25hbWVfdmFsdWUgKGFyZywgJm5hbWUsICZ2YWx1ZSkgIT0gMCkKKyAgICB7CisgICAgICBYRlJFRSAobmFtZSk7CisgICAgICBYRlJFRSAodmFsdWUpOworICAgICAgbHRfZmF0YWwgKCJiYWQgYXJndW1lbnQgZm9yICVzOiAnJXMnIiwgZW52X3NldF9vcHQsIGFyZyk7CisgICAgfQorCisgIGx0X3NldGVudiAobmFtZSwgdmFsdWUpOworICBYRlJFRSAobmFtZSk7CisgIFhGUkVFICh2YWx1ZSk7Cit9CisKK3ZvaWQKK2x0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChjb25zdCBjaGFyICphcmcpCit7CisgIGNoYXIgKm5hbWUgPSBOVUxMOworICBjaGFyICp2YWx1ZSA9IE5VTEw7CisgIGNoYXIgKm5ld192YWx1ZSA9IE5VTEw7CisKKyAgaWYgKGx0X3NwbGl0X25hbWVfdmFsdWUgKGFyZywgJm5hbWUsICZ2YWx1ZSkgIT0gMCkKKyAgICB7CisgICAgICBYRlJFRSAobmFtZSk7CisgICAgICBYRlJFRSAodmFsdWUpOworICAgICAgbHRfZmF0YWwgKCJiYWQgYXJndW1lbnQgZm9yICVzOiAnJXMnIiwgZW52X3ByZXBlbmRfb3B0LCBhcmcpOworICAgIH0KKworICBuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgWEZSRUUgKG5ld192YWx1ZSk7CisgIFhGUkVFIChuYW1lKTsKKyAgWEZSRUUgKHZhbHVlKTsKK30KKwordm9pZAorbHRfb3B0X3Byb2Nlc3NfZW52X2FwcGVuZCAoY29uc3QgY2hhciAqYXJnKQoreworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgY2hhciAqdmFsdWUgPSBOVUxMOworICBjaGFyICpuZXdfdmFsdWUgPSBOVUxMOworCisgIGlmIChsdF9zcGxpdF9uYW1lX3ZhbHVlIChhcmcsICZuYW1lLCAmdmFsdWUpICE9IDApCisgICAgeworICAgICAgWEZSRUUgKG5hbWUpOworICAgICAgWEZSRUUgKHZhbHVlKTsKKyAgICAgIGx0X2ZhdGFsICgiYmFkIGFyZ3VtZW50IGZvciAlczogJyVzJyIsIGVudl9hcHBlbmRfb3B0LCBhcmcpOworICAgIH0KKworICBuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMSk7CisgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgWEZSRUUgKG5ld192YWx1ZSk7CisgIFhGUkVFIChuYW1lKTsKKyAgWEZSRUUgKHZhbHVlKTsKK30KKwordm9pZAorbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgY29wZSB3aXRoIGEgJzonLXRlcm1pbmF0ZWQgcGF0aCAjJyAqLworICAgICAgaW50IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKKyAgICAgIHdoaWxlICgoKGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKSkgPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCisgICAgICAgIHsKKyAgICAgICAgICBuZXdfdmFsdWVbbGVuLTFdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CisgICAgfQorfQorCit2b2lkCitsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKworCitFT0YKK30KKyMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisKKyMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCitmdW5jX21vZGVfbGluayAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICRob3N0IGluCisgICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKKyAgICAgICMgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBtYWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBvdXQKKyAgICAgICMgd2hpY2ggc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKKyAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgorICAgICAgIyBhbGxvd191bmRlZmluZWQ9bm8KKworICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCisgICAgICAjIHRvIG1ha2UgYSBkbGwgd2hpY2ggaGFzIHVuZGVmaW5lZCBzeW1ib2xzLCBpbiB3aGljaCBjYXNlIG5vdAorICAgICAgIyBldmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQuICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNwZWNpZnkKKyAgICAgICMgLW5vLXVuZGVmaW5lZCBvbiB0aGUgbGlidG9vbCBsaW5rIGxpbmUgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbgorICAgICAgIyB0aGF0IGFsbCBzeW1ib2xzIGFyZSBzYXRpc2ZpZWQsIG90aGVyd2lzZSB3ZSBnZXQgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnRvb2xfYXJncz0kbm9ub3B0CisgICAgYmFzZV9jb21waWxlPSIkbm9ub3B0ICRAIgorICAgIGNvbXBpbGVfY29tbWFuZD0kbm9ub3B0CisgICAgZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CisKKyAgICBjb21waWxlX3JwYXRoPQorICAgIGZpbmFsaXplX3JwYXRoPQorICAgIGNvbXBpbGVfc2hsaWJwYXRoPQorICAgIGZpbmFsaXplX3NobGlicGF0aD0KKyAgICBjb252ZW5pZW5jZT0KKyAgICBvbGRfY29udmVuaWVuY2U9CisgICAgZGVwbGlicz0KKyAgICBvbGRfZGVwbGlicz0KKyAgICBjb21waWxlcl9mbGFncz0KKyAgICBsaW5rZXJfZmxhZ3M9CisgICAgZGxsc2VhcmNocGF0aD0KKyAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKKyAgICBpbnN0X3ByZWZpeF9kaXI9CisgICAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisKKyAgICBhdm9pZF92ZXJzaW9uPW5vCisgICAgZGxmaWxlcz0KKyAgICBkbHByZWZpbGVzPQorICAgIGRsc2VsZj1ubworICAgIGV4cG9ydF9keW5hbWljPW5vCisgICAgZXhwb3J0X3N5bWJvbHM9CisgICAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9CisgICAgZ2VuZXJhdGVkPQorICAgIGxpYm9ianM9CisgICAgbHRsaWJzPQorICAgIG1vZHVsZT1ubworICAgIG5vX2luc3RhbGw9bm8KKyAgICBvYmpzPQorICAgIG5vbl9waWNfb2JqZWN0cz0KKyAgICBwcmVjaW91c19maWxlc19yZWdleD0KKyAgICBwcmVmZXJfc3RhdGljX2xpYnM9bm8KKyAgICBwcmVsb2FkPW5vCisgICAgcHJldj0KKyAgICBwcmV2YXJnPQorICAgIHJlbGVhc2U9CisgICAgcnBhdGg9CisgICAgeHJwYXRoPQorICAgIHBlcm1fcnBhdGg9CisgICAgdGVtcF9ycGF0aD0KKyAgICB0aHJlYWRfc2FmZT1ubworICAgIHZpbmZvPQorICAgIHZpbmZvX251bWJlcj1ubworICAgIHdlYWtfbGlicz0KKyAgICBzaW5nbGVfbW9kdWxlPSIke3dsfS1zaW5nbGVfbW9kdWxlIgorICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKworICAgICMgV2UgbmVlZCB0byBrbm93IC1zdGF0aWMsIHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IGZpbGVuYW1lcy4KKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwlicmVhaworCTs7CisgICAgICAtYWxsLXN0YXRpYyB8IC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwljYXNlICRhcmcgaW4KKwktYWxsLXN0YXRpYykKKwkgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIgorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwktc3RhdGljKQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz1idWlsdAorCSAgOzsKKwktc3RhdGljLWxpYnRvb2wtbGlicykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJICA7OworCWVzYWMKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwlicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyBTZWUgaWYgb3VyIHNoYXJlZCBhcmNoaXZlcyBkZXBlbmQgb24gc3RhdGljIGFyY2hpdmVzLgorICAgIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiBidWlsZF9vbGRfbGlicz15ZXMKKworICAgICMgR28gdGhyb3VnaCB0aGUgYXJndW1lbnRzLCB0cmFuc2Zvcm1pbmcgdGhlbSBvbiB0aGUgd2F5LgorICAgIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KKyAgICAgIGFyZz0iJDEiCisgICAgICBzaGlmdAorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIHFhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0CisgICAgICBmdW5jX2FwcGVuZCBsaWJ0b29sX2FyZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisKKyAgICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJY2FzZSAkcHJldiBpbgorCW91dHB1dCkKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBPVVRQVVRAIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBPVVRQVVRAIgorCSAgOzsKKwllc2FjCisKKwljYXNlICRwcmV2IGluCisJZGxmaWxlc3xkbHByZWZpbGVzKQorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBwcmVsb2FkPXllcworCSAgZmkKKwkgIGNhc2UgJGFyZyBpbgorCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KKwkgIGZvcmNlKQorCSAgICBpZiB0ZXN0ICIkZGxzZWxmIiA9IG5vOyB0aGVuCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBzZWxmKQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXMgJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsc2UKKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorCSAgICBlbHNlCisJICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXhwc3ltcykKKwkgIGV4cG9ydF9zeW1ib2xzPSIkYXJnIgorCSAgdGVzdCAtZiAiJGFyZyIgXAorCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWV4cHN5bXNfcmVnZXgpCisJICBleHBvcnRfc3ltYm9sc19yZWdleD0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlmcmFtZXdvcmspCisJICBjYXNlICRob3N0IGluCisJICAgICotKi1kYXJ3aW4qKQorCSAgICAgIGNhc2UgIiRkZXBsaWJzICIgaW4KKwkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CisJCSopIGRlcGxpYnM9IiRkZXBsaWJzICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKwkJICAgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgIGVzYWMKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlpbnN0X3ByZWZpeCkKKwkgIGluc3RfcHJlZml4X2Rpcj0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlvYmplY3RsaXN0KQorCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KKwkgICAgc2F2ZV9hcmc9JGFyZworCSAgICBtb3JlYXJncz0KKwkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorCSAgICBkbworIwkgICAgICBtb3JlYXJncz0iJG1vcmVhcmdzICRmaWwiCisJICAgICAgYXJnPSRmaWwKKwkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCQlwaWNfb2JqZWN0PQorCQlub25fcGljX29iamVjdD0KKworCQkjIFJlYWQgdGhlIC5sbyBmaWxlCisJCWZ1bmNfc291cmNlICIkYXJnIgorCisJCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKwkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkJZmkKKworCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQl4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisJCSAgICAgIHByZXY9CisJCSAgICAgIGNvbnRpbnVlCisJCSAgICBlbHNlCisJCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCSAgICAgIHByZXY9ZGxwcmVmaWxlcworCQkgICAgZmkKKwkJICBmaQorCisJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKwkJICAgIHByZXY9CisJCSAgZmkKKworCQkgICMgQSBQSUMgb2JqZWN0LgorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBhcmc9IiRwaWNfb2JqZWN0IgorCQlmaQorCisJCSMgTm9uLVBJQyBvYmplY3QuCisJCWlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgorCQkgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJCSAgZmkKKwkJZWxzZQorCQkgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJCSAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJZmkKKwkgICAgICBlbHNlCisJCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCQlpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkJICBmdW5jX2xvMm8gIiRhcmciCisJCSAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgICAgIGVsc2UKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCQlmaQorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibGluayBpbnB1dCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBmaQorCSAgYXJnPSRzYXZlX2FyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXByZWNpb3VzX3JlZ2V4KQorCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcmVsZWFzZSkKKwkgIHJlbGVhc2U9Ii0kYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJwYXRoIHwgeHJwYXRoKQorCSAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJICBjYXNlICRhcmcgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJHByZXYiID0gcnBhdGg7IHRoZW4KKwkgICAgY2FzZSAiJHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgcnBhdGg9IiRycGF0aCAkYXJnIiA7OworCSAgICBlc2FjCisJICBlbHNlCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlzaHJleHQpCisJICBzaHJleHRfY21kcz0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl3ZWFrKQorCSAgd2Vha19saWJzPSIkd2Vha19saWJzICRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJeGNjbGlua2VyKQorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhjb21waWxlcikKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4bGlua2VyKQorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCSopCisJICBldmFsICIkcHJldj1cIlwkYXJnXCIiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXNhYworICAgICAgZmkgIyB0ZXN0IC1uICIkcHJldiIKKworICAgICAgcHJldmFyZz0iJGFyZyIKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtYWxsLXN0YXRpYykKKwlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICMgU2VlIGNvbW1lbnQgZm9yIC1zdGF0aWMgZmxhZyBiZWxvdywgZm9yIG1vcmUgZGV0YWlscy4KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtYWxsb3ctdW5kZWZpbmVkKQorCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KKwlmdW5jX2ZhdGFsX2Vycm9yICJcYC1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKKwk7OworCisgICAgICAtYXZvaWQtdmVyc2lvbikKKwlhdm9pZF92ZXJzaW9uPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRsb3BlbikKKwlwcmV2PWRsZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbHByZW9wZW4pCisJcHJldj1kbHByZWZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LWR5bmFtaWMpCisJZXhwb3J0X2R5bmFtaWM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgorCWZpCisJaWYgdGVzdCAiWCRhcmciID0gIlgtZXhwb3J0LXN5bWJvbHMiOyB0aGVuCisJICBwcmV2PWV4cHN5bXMKKwllbHNlCisJICBwcmV2PWV4cHN5bXNfcmVnZXgKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWZyYW1ld29yaykKKwlwcmV2PWZyYW1ld29yaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWluc3QtcHJlZml4LWRpcikKKwlwcmV2PWluc3RfcHJlZml4CisJY29udGludWUKKwk7OworCisgICAgICAjIFRoZSBuYXRpdmUgSVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMgLUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCisgICAgICAjIHNvLCBpZiB3ZSBzZWUgdGhlc2UgZmxhZ3MgYmUgY2FyZWZ1bCBub3QgdG8gdHJlYXQgdGhlbSBsaWtlIC1MCisgICAgICAtTFtBLVpdW0EtWl0qOiopCisJY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KKwluby8qLSotaXJpeCogfCAvKi0qLWlyaXgqKQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtTCopCisJZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWlmIHRlc3QgLXogIiRkaXIiOyB0aGVuCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuIFxgLUwnIGFuZCBcYCQxJyIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciBcYC1MJyBvcHRpb24iCisJICBmaQorCWZpCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJICB0ZXN0IC16ICIkYWJzZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKKwkgIGRpcj0iJGFic2RpciIKKwkgIDs7CisJZXNhYworCWNhc2UgIiRkZXBsaWJzICIgaW4KKwkqIiAtTCRkaXIgIiopIDs7CisJKikKKwkgIGRlcGxpYnM9IiRkZXBsaWJzIC1MJGRpciIKKwkgIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAkRUNITyAiWCRkaXIiIHwgJFhzZWQgLWUgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWwqKQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9zMiopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQorCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCWVsaWYgdGVzdCAiWCRhcmciID0gIlgtbGNfciI7IHRoZW4KKwkgY2FzZSAkaG9zdCBpbgorCSAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAjIERvIG5vdCBpbmNsdWRlIGxpYmNfciBkaXJlY3RseSwgdXNlIC1wdGhyZWFkIGZsYWcuCisJICAgY29udGludWUKKwkgICA7OworCSBlc2FjCisJZmkKKwlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW1vZHVsZSkKKwltb2R1bGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdCkKKwljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKKwljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkYXJnIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdWx0aV9tb2R1bGUpCisJc2luZ2xlX21vZHVsZT0iJHt3bH0tbXVsdGlfbW9kdWxlIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWZhc3QtaW5zdGFsbCkKKwlmYXN0X2luc3RhbGw9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1pbnN0YWxsKQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1kYXJ3aW4qIHwgKi1jZWdjYyopCisJICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKKwkgICMgYW5kIERhcndpbiBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgorCSAgZnVuY193YXJuaW5nICJcYC1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKKwkgIGZ1bmNfd2FybmluZyAiYXNzdW1pbmcgXGAtbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIgorCSAgZmFzdF9pbnN0YWxsPW5vCisJICA7OworCSopIG5vX2luc3RhbGw9eWVzIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLXVuZGVmaW5lZCkKKwlhbGxvd191bmRlZmluZWQ9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vYmplY3RsaXN0KQorCXByZXY9b2JqZWN0bGlzdAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW8pIHByZXY9b3V0cHV0IDs7CisKKyAgICAgIC1wcmVjaW91cy1maWxlcy1yZWdleCkKKwlwcmV2PXByZWNpb3VzX3JlZ2V4CisJY29udGludWUKKwk7OworCisgICAgICAtcmVsZWFzZSkKKwlwcmV2PXJlbGVhc2UKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1ycGF0aCkKKwlwcmV2PXJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUikKKwlwcmV2PXhycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIqKQorCWZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRhcmciCisJZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJHhycGF0aCAiIGluCisJKiIgJGRpciAiKikgOzsKKwkqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtc2hhcmVkKQorCSMgVGhlIGVmZmVjdHMgb2YgLXNoYXJlZCBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJY29udGludWUKKwk7OworCisgICAgICAtc2hyZXh0KQorCXByZXY9c2hyZXh0CisJY29udGludWUKKwk7OworCisgICAgICAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJIyBUaGUgZWZmZWN0cyBvZiAtc3RhdGljIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwkjIFdlIHVzZWQgdG8gZG8gdGhlIHNhbWUgYXMgLWFsbC1zdGF0aWMgb24gcGxhdGZvcm1zIHRoYXQKKwkjIGRpZG4ndCBoYXZlIGEgUElDIGZsYWcsIGJ1dCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBlZmZlY3RzCisJIyB3b3VsZCBiZSBlcXVpdmFsZW50IHdhcyB3cm9uZy4gIEl0IHdvdWxkIGJyZWFrIG9uIGF0IGxlYXN0CisJIyBEaWdpdGFsIFVuaXggYW5kIEFJWC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC10aHJlYWQtc2FmZSkKKwl0aHJlYWRfc2FmZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLWluZm8pCisJcHJldj12aW5mbworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24tbnVtYmVyKQorCXByZXY9dmluZm8KKwl2aW5mb19udW1iZXI9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtd2VhaykKKyAgICAgICAgcHJldj13ZWFrCisJY29udGludWUKKwk7OworCisgICAgICAtV2MsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBhcmc9IiRhcmcgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgIC1XbCwqKQorCWZ1bmNfc3RyaXBuYW1lICctV2wsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlhcmc9CisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgIC1YY29tcGlsZXIpCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YbGlua2VyKQorCXByZXY9eGxpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhDQ2xpbmtlcikKKwlwcmV2PXhjY2xpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyAtbXNnXyogZm9yIG9zZiBjYworICAgICAgLW1zZ18qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKworICAgICAgIyAtNjQsIC1taXBzWzAtOV0gZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXJbMC05XVswLTldKiBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBvbiB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU3VuIGNvbXBpbGVyCisgICAgICAjICtEQSosICtERCogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBIUCBjb21waWxlcgorICAgICAgIyAtcSogcGFzcyB0aHJvdWdoIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKyAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogcGFzcyB0aHJvdWdoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworICAgICAgIyBjb21waWxlciBhcmdzIGZvciBHQ0MKKyAgICAgICMgLUYvcGF0aCBnaXZlcyBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKyAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogcGFzcyB0aHJvdWdoIHByb2ZpbGluZyBmbGFnIGZvciBHQ0MKKyAgICAgICMgQGZpbGUgR0NDIHJlc3BvbnNlIGZpbGVzCisgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKyAgICAgICAgY29udGludWUKKyAgICAgICAgOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcuCisgICAgICAtKiB8ICsqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICouJG9iamV4dCkKKwkjIEEgc3RhbmRhcmQgb2JqZWN0LgorCW9ianM9IiRvYmpzICRhcmciCisJOzsKKworICAgICAgKi5sbykKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCSAgcGljX29iamVjdD0KKwkgIG5vbl9waWNfb2JqZWN0PQorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAiJGFyZyIKKworCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJICAgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkgIGZpCisKKwkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgIGlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisJCXByZXY9CisJCWNvbnRpbnVlCisJICAgICAgZWxzZQorCQkjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQlwcmV2PWRscHJlZmlsZXMKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisJICAgICAgcHJldj0KKwkgICAgZmkKKworCSAgICAjIEEgUElDIG9iamVjdC4KKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBhcmc9IiRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBOb24tUElDIG9iamVjdC4KKwkgIGlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJICAgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJICAgIGZpCisJICBlbHNlCisJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkgICAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCSAgICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgIGZpCisJZWxzZQorCSAgIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkgICAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgICAgZnVuY19sbzJvICIkYXJnIgorCSAgICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICouJGxpYmV4dCkKKwkjIEFuIGFyY2hpdmUuCisJZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAqLmxhKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKworCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCSAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxzZQorCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgorICAgICAgKikKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKyAgICAgIGVzYWMgIyBhcmcKKworICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkYXJnIjsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICBmaQorICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCisgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgIGZpCisKKyAgICBvbGRsaWJzPQorICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKKyAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorICAgIG91dHB1dG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICBsaWJvYmpzX3NhdmU9IiRsaWJvYmpzIgorCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCisgICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiWFwkeyRzaGxpYnBhdGhfdmFyfVwiIFx8IFwkWHNlZCAtZSBcJ3MvOi8gL2dcJ1xgCisgICAgZWxzZQorICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CisgICAgZmkKKyAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKKyAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCisKKyAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKKyAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KKyAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgorCisgICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0CisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgIiIpCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiCisgICAgICA7OworICAgICouJGxpYmV4dCkgbGlua21vZGU9b2xkbGliIDs7CisgICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7CisgICAgKi5sYSkgbGlua21vZGU9bGliIDs7CisgICAgKikgbGlua21vZGU9cHJvZyA7OyAjIEFueXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGEgcHJvZ3JhbS4KKyAgICBlc2FjCisKKyAgICBzcGVjaWFsZGVwbGlicz0KKworICAgIGxpYnM9CisgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCisgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisJY2FzZSAiJGxpYnMgIiBpbgorCSoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgbGlicz0iJGxpYnMgJGRlcGxpYiIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisgICAgICBsaWJzPSIkcHJlZGVwcyAkbGlicyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICRwb3N0ZGVwcyIKKworICAgICAgIyBDb21wdXRlIGxpYnJhcmllcyB0aGF0IGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UgaW4gJHByZWRlcHMKKyAgICAgICMgJHBvc3RkZXBzIGFuZCBtYXJrIHRoZW0gYXMgc3BlY2lhbCAoaS5lLiwgd2hvc2UgZHVwbGljYXRlcyBhcmUKKyAgICAgICMgbm90IHRvIGJlIGVsaW1pbmF0ZWQpLgorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCisJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCisJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRwcmVfcG9zdF9kZXBzIiA7OworCSAgZXNhYworCSAgcHJlX3Bvc3RfZGVwcz0iJHByZV9wb3N0X2RlcHMgJHByZV9wb3N0X2RlcCIKKwlkb25lCisgICAgICBmaQorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICBmaQorCisgICAgZGVwbGlicz0KKyAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisgICAgbmV3bGliX3NlYXJjaF9wYXRoPQorICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfZGVwbGlicz0gIyBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIGxpYikKKwlwYXNzZXM9ImNvbnYgZGxwcmVvcGVuIGxpbmsiCisJZm9yIGZpbGUgaW4gJGRsZmlsZXMgJGRscHJlZmlsZXM7IGRvCisJICBjYXNlICRmaWxlIGluCisJICAqLmxhKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCTs7CisgICAgcHJvZykKKwljb21waWxlX2RlcGxpYnM9CisJZmluYWxpemVfZGVwbGlicz0KKwlhbGxkZXBsaWJzPW5vCisJbmV3ZGxmaWxlcz0KKwluZXdkbHByZWZpbGVzPQorCXBhc3Nlcz0iY29udiBzY2FuIGRsb3BlbiBkbHByZW9wZW4gbGluayIKKwk7OworICAgICopICBwYXNzZXM9ImNvbnYiCisJOzsKKyAgICBlc2FjCisKKyAgICBmb3IgcGFzcyBpbiAkcGFzc2VzOyBkbworICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCisgICAgICAjIHNvIHRoYXQgLUwgY29tZXMgYmVmb3JlIGxpYnMgdGhhdCBuZWVkIGl0IGZvciBpbnN0YW5jZS4uLgorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayI7IHRoZW4KKwkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKKwkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKKyAgICAgICAgdG1wX2RlcGxpYnM9CisJZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKwkgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iOyB0aGVuCisJbGlicz0iJGRlcGxpYnMiCisJZGVwbGlicz0KKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCWNhc2UgJHBhc3MgaW4KKwlkbG9wZW4pIGxpYnM9IiRkbGZpbGVzIiA7OworCWRscHJlb3BlbikgbGlicz0iJGRscHJlZmlsZXMiIDs7CisJbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGRscHJlb3BlbiI7IHRoZW4KKwkjIENvbGxlY3QgYW5kIGZvcndhcmQgZGVwbGlicyBvZiBwcmVvcGVuZWQgbGlidG9vbCBsaWJzCisJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKKwkgIGRlcGVuZGVuY3lfbGlicz0KKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRsaWIiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgICAgICAgICAgICBkZXBsaWJfYmFzZT1gJEVDSE8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorCSAgICBjYXNlICIgJHdlYWtfbGlicyAiIGluCisJICAgICoiICRkZXBsaWJfYmFzZSAiKikgOzsKKwkgICAgKikgZGVwbGlicz0iJGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWRvbmUKKwlsaWJzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJc2F2ZV9kZXBsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKworICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KKwlsaWI9CisJZm91bmQ9bm8KKwljYXNlICRkZXBsaWIgaW4KKwktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWIiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1sKikKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZzsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgIlxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgZnVuY19zdHJpcG5hbWUgJy1sJyAnJyAiJGRlcGxpYiIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBlbHNlCisJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBmaQorCSAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNoZGlyczsgZG8KKwkgICAgZm9yIHNlYXJjaF9leHQgaW4gLmxhICRzdGRfc2hyZXh0IC5zbyAuYTsgZG8KKwkgICAgICAjIFNlYXJjaCB0aGUgbGlidG9vbCBsaWJyYXJ5CisJICAgICAgbGliPSIkc2VhcmNoZGlyL2xpYiR7bmFtZX0ke3NlYXJjaF9leHR9IgorCSAgICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJCWlmIHRlc3QgIiRzZWFyY2hfZXh0IiA9ICIubGEiOyB0aGVuCisJCSAgZm91bmQ9eWVzCisJCWVsc2UKKwkJICBmb3VuZD1ubworCQlmaQorCQlicmVhayAyCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZG9uZQorCSAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KKwkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICBlbHNlICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAorCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgorCSAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikKKwkJaWYgZnVuY19sYWxpYl9wICIkbGliIjsgdGhlbgorCQkgIGxpYnJhcnlfbmFtZXM9CisJCSAgb2xkX2xpYnJhcnk9CisJCSAgZnVuY19zb3VyY2UgIiRsaWIiCisJCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCQkgICAgbGw9IiRsIgorCQkgIGRvbmUKKwkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9sZF9saWJyYXJ5IiA7IHRoZW4gIyBvbmx5IHN0YXRpYyB2ZXJzaW9uIGF2YWlsYWJsZQorCQkgICAgZm91bmQ9bm8KKwkJICAgIGZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJCSAgICBsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSAgICBsaWI9JGxhZGlyLyRvbGRfbGlicmFyeQorCQkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCQkgICAgZWxzZQorCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgZmkKKwkJICAgIGNvbnRpbnVlCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKSA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGZpCisJICA7OyAjIC1sCisJKi5sdGZyYW1ld29yaykKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLUwqKQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgdGVzdCAiJHBhc3MiID0gY29udiAmJiBjb250aW51ZQorCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBjb250aW51ZQorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBzY2FuOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICA7OworCSAgKikKKwkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICBjb250aW51ZQorCSAgOzsgIyAtTAorCS1SKikKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKKwkgICAgZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyBNYWtlIHN1cmUgdGhlIHhycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRkaXIgIiopIDs7CisJICAgICopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGNvbnRpbnVlCisJICA7OworCSoubGEpIGxpYj0iJGRlcGxpYiIgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPW5vCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiWCRkZXBsaWJcIiIgMj4vZGV2L251bGwgfCAkWHNlZCAtZSAxMHEgXAorCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgdmFsaWRfYV9saWI9eWVzCisJCSAgZmkKKwkJOzsKKwkJcGFzc19hbGwpCisJCSAgdmFsaWRfYV9saWI9eWVzCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCSRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJJEVDSE8gIioqKiBiZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRsaWJleHQgb2YgdGhpcyBhcmd1bWVudCBtYWtlcyBtZSBiZWxpZXZlIgorCQkkRUNITyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKKwkgICAgICBlbHNlCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRlcGxpYiIKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGRlcGxpYiIKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwklREVQTElCUyUpCisJICBhbGxkZXBsaWJzPXllcworCSAgY29udGludWUKKwkgIDs7CisJZXNhYyAjIGNhc2UgJGRlcGxpYgorCisJaWYgdGVzdCAiJGZvdW5kIiA9IHllcyB8fCB0ZXN0IC1mICIkbGliIjsgdGhlbiA6CisJZWxzZQorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgdGhlIGxpYnJhcnkgXGAkbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgXGAkZGVwbGliJyIKKwlmaQorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCisJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCWZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJZGxuYW1lPQorCWRsb3Blbj0KKwlkbHByZW9wZW49CisJbGliZGlyPQorCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKwkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAorCSMgaXQgd2lsbCBub3QgcmVkZWZpbmUgdmFyaWFibGVzIGluc3RhbGxlZCwgb3Igc2hvdWxkbm90bGluaworCWluc3RhbGxlZD15ZXMKKwlzaG91bGRub3RsaW5rPW5vCisJYXZvaWR0ZW1wcnBhdGg9CisKKworCSMgUmVhZCB0aGUgLmxhIGZpbGUKKwlmdW5jX3NvdXJjZSAiJGxpYiIKKworCSMgQ29udmVydCAiLWZyYW1ld29yayBmb28iIHRvICJmb28ubHRmcmFtZXdvcmsiCisJaWYgdGVzdCAtbiAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCisJICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIlgkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworCSAgICAgICopIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiWCAkZGVwZW5kZW5jeV9saWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CisJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKwkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGRsZmlsZXM9IiRkbGZpbGVzICRkbG9wZW4iCisJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwkgICAgZmkKKwkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorCSAgICBjb252ZW5pZW5jZT0iJGNvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKwkgIGZpCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgIGRvbmUKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGNvbnYKKworCisJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgorCWxpbmtsaWI9CisJZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCSAgbGlua2xpYj0iJGwiCisJZG9uZQorCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisJZmkKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCWlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorCSAgZmkKKwkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8CisJICAgICB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZworCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQorCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCisJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBkbG9wZW4KKworCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGxhZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNfbGFkaXI9IiRsYWRpciIgOzsKKwkqKQorCSAgYWJzX2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCisJICBpZiB0ZXN0IC16ICIkYWJzX2xhZGlyIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkbGFkaXInIgorCSAgICBmdW5jX3dhcm5pbmcgInBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiCisJICAgIGFic19sYWRpcj0iJGxhZGlyIgorCSAgZmkKKwkgIDs7CisJZXNhYworCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJbGFuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKwkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KKwlpZiB0ZXN0ICJYJGluc3RhbGxlZCIgPSBYeWVzOyB0aGVuCisJICBpZiB0ZXN0ICEgLWYgIiRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCisJICAgIGRpcj0iJGxhZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbGliZGlyIgorCSAgICBhYnNkaXI9IiRsaWJkaXIiCisJICBmaQorCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRsYWRpci8kb2JqZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwkgIGZpCisJZmkgIyAkaW5zdGFsbGVkID0geWVzCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwkgIGZpCisJICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKwkgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorCSAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCWRscHJlY29udmVuaWVuY2VsaWJzPSIkZGxwcmVjb252ZW5pZW5jZWxpYnMgJGRpci8kb2xkX2xpYnJhcnkiCisJICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorCSAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRkbG5hbWUiCisJICBlbHNlCisJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCisJICBmaQorCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KKworCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAjIExpbmsgdGhlIGNvbnZlbmllbmNlIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIiAjIHVzZWQgZm9yIHByb2csc2NhbiBwYXNzCisJICBmaQorCSAgY29udGludWUKKwlmaQorCisKKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsYWRpciIKKwkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisKKwkgIGxpbmthbGxkZXBsaWJzPW5vCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm8gfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgIGxpbmthbGxkZXBsaWJzPXllcworCSAgZmkKKworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgICAgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCSA7OworCSAgICBlc2FjCisJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KKwkgICAgaWYgdGVzdCAiJGxpbmthbGxkZXBsaWJzIiA9IHllczsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICAjIE5lZWQgdG8gaGFyZGNvZGUgc2hhcmVkIGxpYnJhcnkgcGF0aHMKKwkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcworCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgZG9uZSAjIGZvciBkZXBsaWIKKwkgIGNvbnRpbnVlCisJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCisKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgICAgeyB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0gbm8gfHwKKwkgICAgICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LHllcyI7IH0gfHwKKwkgICAgICAgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgICAjIFdlIG5lZWQgdG8gaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aAorCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIiA7IHRoZW4KKwkgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgICAgY2FzZSAiJHRlbXBfcnBhdGg6IiBpbgorCSAgICAgICoiJGFic2RpcjoiKikgOzsKKwkgICAgICAqKSB0ZW1wX3JwYXRoPSIkdGVtcF9ycGF0aCRhYnNkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKworCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpICMgJGxpbmttb2RlLCRwYXNzID0gcHJvZyxsaW5rLi4uCisKKwkgIGlmIHRlc3QgIiRhbGxkZXBsaWJzIiA9IHllcyAmJgorCSAgICAgeyB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiID0gcGFzc19hbGwgfHwKKwkgICAgICAgeyB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJgorCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCisJICAgICMgV2Ugb25seSBuZWVkIHRvIHNlYXJjaCBmb3Igc3RhdGljIGxpYnJhcmllcworCSAgICBjb250aW51ZQorCSAgZmkKKwlmaQorCisJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQorCXVzZV9zdGF0aWNfbGlicz0kcHJlZmVyX3N0YXRpY19saWJzCisJaWYgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBidWlsdCAmJiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgdXNlX3N0YXRpY19saWJzPW5vCisJZmkKKwlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICB7IHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gbm8gfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCisJICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9bm8KKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KKwkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz15ZXMKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5CisKKwkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbiBzb21lCisJICAjIHN5c3RlbXMgKGRhcndpbikuICBEb24ndCBibGVhdCBhYm91dCBkbG9wZW5lZCBtb2R1bGVzIHRob3VnaCEKKwkgIGRsb3Blbm1vZHVsZT0iIgorCSAgZm9yIGRscHJlbW9kdWxldGVzdCBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgaWYgdGVzdCAiWCRkbHByZW1vZHVsZXRlc3QiID0gIlgkbGliIjsgdGhlbgorCSAgICAgIGRsb3Blbm1vZHVsZT0iJGRscHJlbW9kdWxldGVzdCIKKwkgICAgICBicmVhaworCSAgICBmaQorCSAgZG9uZQorCSAgaWYgdGVzdCAteiAiJGRsb3Blbm1vZHVsZSIgJiYgdGVzdCAiJHNob3VsZG5vdGxpbmsiID0geWVzICYmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgJEVDSE8KKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGVsc2UKKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmaQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJgorCSAgICAgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiOyB0aGVuCisJICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCisJICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCSAgICBzaGlmdAorCSAgICByZWFsbmFtZT0iJDEiCisJICAgIHNoaWZ0CisJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KKwkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICBzb25hbWU9IiRkbG5hbWUiCisJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgICAgICMgYmxlaCB3aW5kb3dzCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJCW1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwkgICAgZWxzZQorCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgorCSAgICBmaQorCisJICAgICMgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUgZXh0cmFjdF9leHBzeW1zX2NtZHMgdG8gdXNlCisJICAgIHNvcm9vdD0iJHNvbmFtZSIKKwkgICAgZnVuY19iYXNlbmFtZSAiJHNvcm9vdCIKKwkgICAgc29uYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfc3RyaXBuYW1lICdsaWInICcuZGxsJyAiJHNvbmFtZSIKKwkgICAgbmV3bGliPWxpYmltcC0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmEKKworCSAgICAjIElmIHRoZSBsaWJyYXJ5IGhhcyBubyBleHBvcnQgbGlzdCwgdGhlbiBjcmVhdGUgb25lIG5vdworCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiI7IHRoZW4gOgorCSAgICBlbHNlCisJICAgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKworCSAgICAjIENyZWF0ZSAkbmV3bGliCisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCisJICAgIGZpCisJICAgICMgbWFrZSBzdXJlIHRoZSBsaWJyYXJ5IHZhcmlhYmxlcyBhcmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBsaWJyYXJ5CisJICAgIGRpcj0kb3V0cHV0X29iamRpcgorCSAgICBsaW5rbGliPSRuZXdsaWIKKwkgIGZpICMgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIgorCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgbGliX2xpbmtlZD15ZXMKKwkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCisJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0gbm87IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCQljYXNlICRob3N0IGluCisJCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y0KnV3MiopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKKwkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLWRhcndpbiogKQorCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdAorCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKKwkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAorCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKwkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KKwkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKKwkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisJCQkgICRFQ0hPCisJCQkgICRFQ0hPICIqKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKKwkJCSAgJEVDSE8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgorCQkJZWxzZQorCQkJICBhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkJZmkKKwkJICAgICAgZWxpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJCQlhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkgICAgICBmaQorCQkgICAgZmkKKwkJZXNhYworCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSIkZGlyIiA7OworCQllc2FjCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgcmVsaW5rKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KKwkJYWRkX2Rpcj0iLUwkZGlyIgorCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCSAgY2FzZSAkbGliZGlyIGluCisJCSAgICBbXFwvXSopCisJCSAgICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikgbGliX2xpbmtlZD1ubyA7OworCSAgICBlc2FjCisKKwkgICAgaWYgdGVzdCAiJGxpYl9saW5rZWQiICE9IHllczsgdGhlbgorCSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKwkgICAgICBjYXNlIDokY29tcGlsZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CisJICAgICAgKikgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRhZGRfc2hsaWJwYXRoOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZF9kaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGQgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJCSoiOiRsaWJkaXI6IiopIDs7CisJCSopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCisJICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KKwkgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CisJICAgICAgKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisJICAgICAgZXNhYworCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiICYmCisJCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIgOyB0aGVuCisJCWFkZD0iJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZWxzZQorCQlhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQljYXNlICRsaWJkaXIgaW4KKwkJICBbXFwvXSopCisJCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAorCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCisJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisJICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9IiRvbGRfbGlicmFyeSIKKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBmaQorCWVsaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCisJICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgorCisJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKwkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCisJICAgICRFQ0hPCisJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKwkgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJICAgICRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICAkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKwkgICAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgorCSAgICAgICRFQ0hPICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICAkRUNITyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgorCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJJEVDSE8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJCSRFQ0hPICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJCSRFQ0hPICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICAgIGxpbmtfc3RhdGljPXllcworCSAgZmkKKwlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKKwkgICAgIHsgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8CisJICAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IHllczsgfTsgdGhlbgorCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKwkgICAgdGVtcF9kZXBsaWJzPQorCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkbGliZGlyIGluCisJICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkbGliZGlyIgorCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisJCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKKwkJICAgKikgeHJwYXRoPSIkeHJwYXRoICR0ZW1wX3hycGF0aCI7OworCQkgICBlc2FjOzsKKwkgICAgICAqKSB0ZW1wX2RlcGxpYnM9IiR0ZW1wX2RlcGxpYnMgJGxpYmRpciI7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCisJICBmaQorCisJICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGFic2RpciIKKwkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQorCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAjIC4uLiBhbmQgaXRzIGRlcGVuZGVuY3lfbGlicworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgZG9uZQorCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19kaXJuYW1lICIkZGVwbGliIiAiIiAiLiIKKwkJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJCWNhc2UgJGRpciBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKKwkJKikKKwkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KKwkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorCQkgICAgYWJzZGlyPSIkZGlyIgorCQkgIGZpCisJCSAgOzsKKwkJZXNhYworCQlpZiAkR1JFUCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1kYXJ3aW4qKQorCQkgIGRlcGRlcGw9CisJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKwkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbworCQkgICAgICBkZXBkZXBsPSR0bXAKKwkJICAgIGRvbmUKKwkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIgOyB0aGVuCisJCSAgICAgIGRlcGRlcGw9IiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIKKwkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTH0gLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGZpCisJCSAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgcGF0aD0KKwkJICAgIGZpCisJCSAgZmkKKwkJICA7OworCQkqKQorCQkgIHBhdGg9Ii1MJGFic2Rpci8kb2JqZGlyIgorCQkgIDs7CisJCWVzYWMKKwkJZWxzZQorCQkgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfd2FybmluZyAiXGAkZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKworCQkgIHBhdGg9Ii1MJGFic2RpciIKKwkJZmkKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkcGF0aCAiKikgOzsKKwkgICAgICAqKSBkZXBsaWJzPSIkcGF0aCAkZGVwbGlicyIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpICMgbGlua19hbGxfZGVwbGlicyAhPSBubworCWZpICMgbGlua21vZGUgPSBsaWIKKyAgICAgIGRvbmUgIyBmb3IgZGVwbGliIGluICRsaWJzCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9ICJwcm9nIjsgdGhlbgorCSAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGNvbXBpbGVfZGVwbGlicyIKKwkgIGZpbmFsaXplX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZmluYWxpemVfZGVwbGlicyIKKwllbHNlCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIlggJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpCisgICAgICBmaQorICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KKwlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgorCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwlmaQorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiAhPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgdmFycz0iZGVwbGlicyIKKwllbHNlCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorCSAgICAjICAgICAgICBicm9rZW46CisJICAgICNuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCisJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorCSAgICAjIHByYWN0aWNlOgorCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgIC1SKikgOzsKKwkgICAgKikKKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorCSAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgorCSAgICAgICMgaXMgaW1wbGljaXRseSBsaW5rZWQgaW4gbW9yZSB0aGFuIG9uY2UgYnkgdGhlCisJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKwkgICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCisJICAgICAgIyB3aXRoIGhhdmluZyB0aGUgc2FtZSBsaWJyYXJ5IGJlaW5nIGxpc3RlZCBhcyBhCisJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorCSAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisJICAgICAgIyBuZWVkIHRvIGJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgc28gd2Uga2VlcCBvbmx5IHRoZQorCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorCSAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKKwkgICAgICAjIHN1Y2ggdW5wb3J0YWJsZSBsaW5raW5nIHRyaWNrcyB0byBsaW5rIHRoZSBsaWJyYXJ5CisJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKwkgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4KKwkgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgKikKKwkJY2FzZSAiICRuZXdfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIDs7CisJCSopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkJZXNhYworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKQorCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisJZG9uZSAjIGZvciB2YXIKKyAgICAgIGZpCisgICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicworICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCisgICAgICB0bXBfbGlicz0KKyAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnMgOyBkbworCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCisJKiIgJGkgIiopCisJICBpPSIiCisJICA7OworCWVzYWMKKwlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorCWZpCisgICAgICBkb25lCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCisgICAgZG9uZSAjIGZvciBwYXNzCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBvbGRsaWJzPSIkb3V0cHV0IgorICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKKworCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCisJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwllbHNlCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgorCWVsc2UKKwkgICRFQ0hPCisJICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCisJICAkRUNITyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKKwkgIGxpYm9ianM9IiRsaWJvYmpzICRvYmpzIgorCWZpCisgICAgICBmaQorCisgICAgICB0ZXN0ICIkZGxzZWxmIiAhPSBubyAmJiBcCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCisKKyAgICAgIHNldCBkdW1teSAkcnBhdGgKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisKKyAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKworICAgICAgb2xkbGlicz0KKyAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KKwkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgYC5hbCcgZXh0ZW5zaW9uIHNvCisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBleHRlbnNpb24gYW4KKwkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KKwkgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQgJG9sZGxpYnMiCisJICBidWlsZF9saWJ0b29sX2xpYnM9Y29udmVuaWVuY2UKKwkgIGJ1aWxkX29sZF9saWJzPXllcworCWZpCisKKwl0ZXN0IC1uICIkdmluZm8iICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorCisJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorICAgICAgZWxzZQorCisJIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nOicKKwlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCisJc2hpZnQKKwlJRlM9IiRzYXZlX2lmcyIKKworCXRlc3QgLW4gIiQ3IiAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gXGAtdmVyc2lvbi1pbmZvJyIKKworCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCisJIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKKwkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQorCisJY2FzZSAkdmluZm9fbnVtYmVyIGluCisJeWVzKQorCSAgbnVtYmVyX21ham9yPSIkMSIKKwkgIG51bWJlcl9taW5vcj0iJDIiCisJICBudW1iZXJfcmV2aXNpb249IiQzIgorCSAgIworCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKKwkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCisJICAjIGFuZCB0aG9zZSB0aGF0IHN1YnRyYWN0IGFnZSBhbmQgdXNlIGFnZSBhcworCSAgIyBhIG1pbm9yIHZlcnNpb24uICBCdXQsIHRoZW4gdGhlcmUgaXMgaXJpeAorCSAgIyB3aGljaCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKwkgICMKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgZGFyd2lufGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9yZXZpc2lvbiIKKwkgICAgOzsKKwkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxzdW5vcykKKwkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGFnZT0iMCIKKwkgICAgOzsKKwkgIGlyaXh8bm9uc3RvcHV4KQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCisJICAgIDs7CisJICBlc2FjCisJICA7OworCW5vKQorCSAgY3VycmVudD0iJDEiCisJICByZXZpc2lvbj0iJDIiCisJICBhZ2U9IiQzIgorCSAgOzsKKwllc2FjCisKKwkjIENoZWNrIHRoYXQgZWFjaCBvZiB0aGUgdGhpbmdzIGFyZSB2YWxpZCBudW1iZXJzLgorCWNhc2UgJGN1cnJlbnQgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgXGAkY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJHJldmlzaW9uIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJGFnZSBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciBcYCRjdXJyZW50JyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwlmaQorCisJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgorCW1ham9yPQorCXZlcnN1ZmZpeD0KKwl2ZXJzdHJpbmc9CisJY2FzZSAkdmVyc2lvbl90eXBlIGluCisJbm9uZSkgOzsKKworCWRhcndpbikKKwkgICMgTGlrZSBMaW51eCwgYnV0IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUgaW4KKwkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCisJICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQorCSAgbWlub3JfY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHhsY3ZlcnN0cmluZz0iJHt3bH0tY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQgJHt3bH0tY3VycmVudF92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCWZyZWVic2QtYW91dCkKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iOworCSAgOzsKKworCWZyZWVic2QtZWxmKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCWlyaXggfCBub25zdG9wdXgpCisJICBpZiB0ZXN0ICJYJGx0X2lyaXhfaW5jcmVtZW50IiA9ICJYbm8iOyB0aGVuCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBlbHNlCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQorCSAgZmkKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JHJldmlzaW9uCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmciCisJICBkb25lCisKKwkgICMgQmVmb3JlIHRoaXMgcG9pbnQsICRtYWpvciBtdXN0IG5vdCBjb250YWluIGAuJy4KKwkgIG1ham9yPS4kbWFqb3IKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlsaW51eCkKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlvc2YpCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9IiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kYWdlCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCisJICBkb25lCisKKwkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCisJICA7OworCisJcW54KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCXN1bm9zKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwl3aW5kb3dzKQorCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKwkgIDs7CisKKwkqKQorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCisJICA7OworCWVzYWMKKworCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCisJaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgIG1ham9yPQorCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICBkYXJ3aW4pCisJICAgICMgd2UgY2FuJ3QgY2hlY2sgZm9yICIwLjAiIGluIGFyY2hpdmVfY21kcyBkdWUgdG8gcXVvdGluZworCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5CisJICAgIHZlcnN0cmluZz0KKwkgICAgOzsKKwkgICopCisJICAgIHZlcnN0cmluZz0iMC4wIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgICB2ZXJzdWZmaXg9CisJICBlbHNlCisJICAgIHZlcnN1ZmZpeD0iLjAuMCIKKwkgIGZpCisJZmkKKworCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAorCWlmIHRlc3QgIiRhdm9pZF92ZXJzaW9uIiA9IHllcyAmJiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICBtYWpvcj0KKwkgIHZlcnN1ZmZpeD0KKwkgIHZlcnN0cmluZz0iIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCisJaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiCisJICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgIGZpCisJZWxzZQorCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCisJZmkKKworICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCisgICAgICBsaWJvYmpzPSIkbGlib2JqcyAkc3ltZmlsZW9iaiIKKyAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKyAgICAgIGlmIHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKwkjIFJlbW92ZSBvdXIgb3V0cHV0cywgYnV0IGRvbid0IHJlbW92ZSBvYmplY3QgZmlsZXMgc2luY2UgdGhleQorCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgorCXJlbW92ZWxpc3Q9CisJdGVtcHJlbW92ZWxpc3Q9YCRFQ0hPICIkb3V0cHV0X29iamRpci8qImAKKwlmb3IgcCBpbiAkdGVtcHJlbW92ZWxpc3Q7IGRvCisJICBjYXNlICRwIGluCisJICAgICouJG9iamV4dCB8ICouZ2NubykKKwkgICAgICAgOzsKKwkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfSR7cmVsZWFzZX0uKikKKwkgICAgICAgaWYgdGVzdCAiWCRwcmVjaW91c19maWxlc19yZWdleCIgIT0gIlgiOyB0aGVuCisJCSBpZiAkRUNITyAiJHAiIHwgJEVHUkVQIC1lICIkcHJlY2lvdXNfZmlsZXNfcmVnZXgiID4vZGV2L251bGwgMj4mMQorCQkgdGhlbgorCQkgICBjb250aW51ZQorCQkgZmkKKwkgICAgICAgZmkKKwkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCisJICAgICAgIDs7CisJICAgICopIDs7CisJICBlc2FjCisJZG9uZQorCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKwlvbGRsaWJzPSIkb2xkbGlicyAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCisJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSckL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgorICAgICAgI2ZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisgICAgICAjCWxpYl9zZWFyY2hfcGF0aD1gJEVDSE8gIlgkbGliX3NlYXJjaF9wYXRoICIgfCAkWHNlZCAtZSAicyUgJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGxpYnM9YCRFQ0hPICJYJGRlcGxpYnMgIiB8ICRYc2VkIC1lICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICJYJGRlcGVuZGVuY3lfbGlicyAiIHwgJFhzZWQgLWUgInMlIC1MJHBhdGggJSAlZyJgCisgICAgICAjZG9uZQorCisgICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgorCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKwl0ZW1wX3hycGF0aD0KKwlmb3IgbGliZGlyIGluICR4cnBhdGg7IGRvCisJICB0ZW1wX3hycGF0aD0iJHRlbXBfeHJwYXRoIC1SJGxpYmRpciIKKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF94cnBhdGggJGRlcGVuZGVuY3lfbGlicyIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCisgICAgICBvbGRfZGxmaWxlcz0iJGRsZmlsZXMiCisgICAgICBkbGZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGRsZmlsZXM9IiRkbGZpbGVzICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICAjIE1ha2Ugc3VyZSBkbHByZWZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzCisgICAgICBvbGRfZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMiCisgICAgICBkbHByZWZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCisJY2FzZSAiJGRscHJlZmlsZXMgIiBpbgorCSoiICRsaWIgIiopIDs7CisJKikgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKikKKwkgICAgIyB0aGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBjIGxpYnJhcnkgKGFzIHN1Y2gpIQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgbGlicmFyeSBpcyBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCisJICAgIDs7CisJICAqLSotbmV0YnNkKikKKwkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICA7OworCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQorCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisJICAgIDs7CisJICAqKQorCSAgICAjIEFkZCBsaWJjIHRvIGRlcGxpYnMgb24gYWxsIG90aGVyIHN5c3RlbXMgaWYgbmVjZXNzYXJ5LgorCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIiA9ICJ5ZXMiOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYnMgLWxjIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpCisKKwkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCisJbmFtZV9zYXZlPSRuYW1lCisJbGlibmFtZV9zYXZlPSRsaWJuYW1lCisJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCisJdmVyc3VmZml4X3NhdmU9JHZlcnN1ZmZpeAorCW1ham9yX3NhdmU9JG1ham9yCisJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKKwkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KKwkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KKwlyZWxlYXNlPSIiCisJdmVyc3VmZml4PSIiCisJbWFqb3I9IiIKKwluZXdkZXBsaWJzPQorCWRyb3BwZWRkZXBzPW5vCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwlwYXNzX2FsbCkKKwkgICMgRG9uJ3QgY2hlY2sgZm9yIHNoYXJlZC9zdGF0aWMuICBFdmVyeXRoaW5nIHdvcmtzLgorCSAgIyBUaGlzIG1pZ2h0IGJlIGEgbGl0dGxlIG5haXZlLiAgV2UgbWlnaHQgd2FudCB0byBjaGVjaworCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgorCSAgIyBvc2YzICYgb3NmNCBhbmQgSSdtIG5vdCByZWFsbHkgc3VyZS4uLiBKdXN0CisJICAjIGltcGxlbWVudGluZyB3aGF0IHdhcyBhbHJlYWR5IHRoZSBiZWhhdmlvci4KKwkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKKwkgIDs7CisJdGVzdF9jb21waWxlKQorCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKKwkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0CisJICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjaworCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0LmMKKwkgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKwkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQorRU9GCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgorCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAqIiAkaSAiKikKKwkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgaT0iIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICBkZXBsaWJfbWF0Y2g9JDEKKwkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICBlbHNlCisJCSAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICRFQ0hPCisJCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgICRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkgICAgJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKwkJICAgICRFQ0hPICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisJCSAgICAkRUNITyAiKioqIGl0cyBkeW5hbWljIGRlcGVuZGVuY3kgbGlzdCB0aGF0IHByb2dyYW1zIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgIGZpCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBlbHNlCisJICAgICMgRXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpcnN0IGNvbXBpbGUuICBMZXQncyB0cnkgdG8gc2FsdmFnZQorCSAgICAjIHRoZSBzaXR1YXRpb246IENvbXBpbGUgYSBzZXBhcmF0ZSBwcm9ncmFtIGZvciBlYWNoIGxpYnJhcnkuCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KKwkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgICAqIiAkaSAiKikKKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICAgIGk9IiIKKwkJICAgICAgOzsKKwkJICAgIGVzYWMKKwkJICBmaQorCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICAgIGRlcGxpYl9tYXRjaD0kMQorCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgIGVsc2UKKwkJICAgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICAgICRFQ0hPCisJCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKKwkJICAgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAgICRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkgICAgICAkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkgICAgICAkRUNITyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCisJCSAgICAgICRFQ0hPICIqKiogYXMgYSBkeW5hbWljIGRlcGVuZGVuY3kgdGhhdCBwcm9ncmFtcyBjYW4gZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgICBmaQorCQkgIGZpCisJCWVsc2UKKwkJICBkcm9wcGVkZGVwcz15ZXMKKwkJICAkRUNITworCQkgICRFQ0hPICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCisJCSAgJEVDSE8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKwkJICAkRUNITyAiKioqIGxpYnJhcnkgdGhhdCBpdCBkZXBlbmRzIG9uIGJlZm9yZSB0aGlzIGxpYnJhcnkgd2lsbCBiZSBmdWxseSIKKwkJICAkRUNITyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpCisJICA7OworCWZpbGVfbWFnaWMqKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KKwkJCWNvbnRpbnVlCisJCSAgICAgIGZpCisJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgorCQkgICAgICAjIGVuZGxlc3MgbG9vcCBiZWxvdywgaW4gY2FzZSBvZiBjeWNsaWMgbGlua3MuCisJCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKKwkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAorCQkgICAgICAjIGJ1dCBzbyB3aGF0PworCQkgICAgICBwb3RsaWI9IiRwb3RlbnRfbGliIgorCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KKwkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJHtTRUR9ICdzLy4qIC0+IC8vJ2AKKwkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OworCQkJKikgcG90bGliPWAkRUNITyAiWCRwb3RsaWIiIHwgJFhzZWQgLWUgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OworCQkJZXNhYworCQkgICAgICBkb25lCisJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CisJCQkgJFNFRCAtZSAxMHEgfAorCQkJICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCQlhX2RlcGxpYj0iIgorCQkJYnJlYWsgMgorCQkgICAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkkRUNITyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbWF0Y2hfcGF0dGVybiopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPSIiCisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKwkJICAgIHBvdGxpYj0iJHBvdGVudF9saWIiICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0CisJCSAgICBpZiBldmFsICJcJEVDSE8gXCJYJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkWHNlZCAtZSAxMHEgfCBcCisJCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgICAgIGFfZGVwbGliPSIiCisJCSAgICAgIGJyZWFrIDIKKwkJICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJJEVDSE8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQkkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCSRFQ0hPICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciByZWdleCBwYXR0ZXJuIHRlc3QpIgorCQllbHNlCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIHJlZ2V4IHBhdHRlcm4uIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwlub25lIHwgdW5rbm93biB8ICopCisJICBuZXdkZXBsaWJzPSIiCisJICB0bXBfZGVwbGlicz1gJEVDSE8gIlggJGRlcGxpYnMiIHwgJFhzZWQgXAorCSAgICAgIC1lICdzLyAtbGMkLy8nIC1lICdzLyAtW0xSXVteIF0qLy9nJ2AKKwkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgZm9yIGkgaW4gJHByZWRlcHMgJHBvc3RkZXBzIDsgZG8KKwkgICAgICAjIGNhbid0IHVzZSBYc2VkIGJlbG93LCBiZWNhdXNlICRpIG1pZ2h0IGNvbnRhaW4gJy8nCisJICAgICAgdG1wX2RlcGxpYnM9YCRFQ0hPICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAicywkaSwsImAKKwkgICAgZG9uZQorCSAgZmkKKwkgIGlmICRFQ0hPICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAncy9bCSBdLy9nJyB8CisJICAgICAkR1JFUCAuID4vZGV2L251bGw7IHRoZW4KKwkgICAgJEVDSE8KKwkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKKwkgICAgZWxzZQorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisJICAgIGRyb3BwZWRkZXBzPXllcworCSAgZmkKKwkgIDs7CisJZXNhYworCXZlcnN1ZmZpeD0kdmVyc3VmZml4X3NhdmUKKwltYWpvcj0kbWFqb3Jfc2F2ZQorCXJlbGVhc2U9JHJlbGVhc2Vfc2F2ZQorCWxpYm5hbWU9JGxpYm5hbWVfc2F2ZQorCW5hbWU9JG5hbWVfc2F2ZQorCisJY2FzZSAkaG9zdCBpbgorCSotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IHdpdGggdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICJYICRuZXdkZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgICRFQ0hPCisJICAgICRFQ0hPICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKwkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorCSAgICAkRUNITyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCisJICAgICRFQ0hPICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCisJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJICAgICAgJEVDSE8KKwkgICAgICAkRUNITyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJICAgICAgJEVDSE8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJICAgICAgJEVDSE8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkgICAgICAkRUNITyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgICBlbHNlCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGZpCisJICBlbHNlCisJICAgICRFQ0hPICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgorCSAgICAkRUNITyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKKwkgICAgJEVDSE8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKworCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCisJICAgICAgJEVDSE8KKwkgICAgICAkRUNITyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICAkRUNITyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgJEVDSE8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKKwkgICAgICAkRUNITyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCWZpCisJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCisJZGVwbGlicz0kbmV3ZGVwbGlicworICAgICAgZmkKKyAgICAgICMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqLSotZGFyd2luKikKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICJYICRuZXdkZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICJYICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIGRlcGxpYnM9YCRFQ0hPICJYICRkZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZGVwbGlicz0iJG5ld19saWJzIgorCisgICAgICAjIEFsbCB0aGUgbGlicmFyeS1zcGVjaWZpYyB2YXJpYWJsZXMgKGluc3RhbGxfbGliZGlyIGlzIHNldCBhYm92ZSkuCisgICAgICBsaWJyYXJ5X25hbWVzPQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICBkbG5hbWU9CisKKyAgICAgICMgVGVzdCBhZ2Fpbiwgd2UgbWF5IGhhdmUgZGVjaWRlZCBub3QgdG8gYnVpbGQgaXQgYW55IG1vcmUKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKwkgIGhhcmRjb2RlX2xpYmRpcnM9CisJICBkZXBfcnBhdGg9CisJICBycGF0aD0iJGZpbmFsaXplX3JwYXRoIgorCSAgdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJCWVsc2UKKwkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJCSAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCSAgICA7OworCQkgICopCisJCSAgICBoYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCSAgICAgIGVsc2UKKwkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCQlkZXBfcnBhdGg9IiRkZXBfcnBhdGggJGZsYWciCisJICAgICAgZmkKKwkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBkb25lCisJICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiOyB0aGVuCisJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiCisJICAgIGVsc2UKKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgICAgZmkKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgICBycGF0aD0KKwkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgIGRvbmUKKwkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCisJICBmaQorCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKKwlmaQorCisJc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgorCXRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCisJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisJZmkKKworCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJc2hpZnQKKwlyZWFsbmFtZT0iJDEiCisJc2hpZnQKKworCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwllbHNlCisJICBzb25hbWU9IiRyZWFsbmFtZSIKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKKwlsaW5rbmFtZXM9CisJZm9yIGxpbmsKKwlkbworCSAgbGlua25hbWVzPSIkbGlua25hbWVzICRsaW5rIgorCWRvbmUKKworCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCisJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworCWRlbGZpbGVzPQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMiCisJZmkKKworCW9yaWdfZXhwb3J0X3N5bWJvbHM9CisJY2FzZSAkaG9zdF9vcyBpbgorCWN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCisJICAgIGlmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiAhPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAorCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCisJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKKwkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCisJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPQorCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwkgICAgZmkKKwkgIGZpCisJICA7OworCWVzYWMKKworCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgaWYgdGVzdCAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgPSB5ZXMgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBmb3IgY21kIGluICRjbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisJICAgICAgZnVuY19sZW4gIiAkY21kIgorCSAgICAgIGxlbj0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbHNlCisJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorCQlmdW5jX3ZlcmJvc2UgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgorCQlza2lwcGVkX2V4cG9ydD06CisJCSMgQnJlYWsgb3V0IGVhcmx5LCBvdGhlcndpc2Ugc2tpcHBlZF9leHBvcnQgbWF5IGJlCisJCSMgc2V0IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0ZXIgY21kLgorCQlicmVhaworCSAgICAgIGZpCisJICAgIGRvbmUKKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCWZpCisKKwl0bXBfZGVwbGlicz0KKwlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KKwkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKKwkgICopCisJICAgIHRtcF9kZXBsaWJzPSIkdG1wX2RlcGxpYnMgJHRlc3RfZGVwbGliIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisKKwlpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCisJICAgIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzICYmCisJICAgIHRlc3QgLXogIiRsaWJvYmpzIjsgdGhlbgorCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KKwkgICAgIyBUT0RPOiBjb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIGp1c3QgZXh0cmFjdCBvbmUgYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBlbHNlCisJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICAgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorCWZpCisKKwkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKwlmaQorCisJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiCisJICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICBmaQorCWVsc2UKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgZmkKKwlmaQorCisJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJgorCSAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIgJiYKKwkgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdCAmJgorCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgOgorCWVsc2UKKwkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZQorCSAgIyBvciwgaWYgdXNpbmcgR05VIGxkIGFuZCBza2lwcGVkX2V4cG9ydCBpcyBub3QgOiwgdXNlIGEgbGlua2VyCisJICAjIHNjcmlwdC4KKworCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KKwkgICMgdXNlIHRoZW0gbGF0ZXIuICBJZiB3ZSBoYXZlIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCB3ZQorCSAgIyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMgaXQgd2FzIGJlZm9yZQorCSAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyB3YXMgZXhwYW5kZWQsIGJlY2F1c2Ugd2UgY2FuJ3QKKwkgICMgYXNzdW1lIHRoZSBsaW5rZXIgdW5kZXJzdGFuZHMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMuCisJICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55CisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBnZXQgbGlua2VkIGluIGFuZCBlbmQgdXAgZXhjZWVkaW5nCisJICAjIHRoZSBzcGVjLgorCSAgaWYgdGVzdCAteiAiJGNvbnZlbmllbmNlIiB8fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgZmkKKwkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKKwkgIG91dHB1dF9sYT1gJEVDSE8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorCisJICAjIENsZWFyIHRoZSByZWxvYWRhYmxlIG9iamVjdCBjcmVhdGlvbiBjb21tYW5kIHF1ZXVlIGFuZAorCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgorCSAgdGVzdF9jbWRzPQorCSAgY29uY2F0X2NtZHM9CisJICBvYmpsaXN0PQorCSAgbGFzdF9yb2JqPQorCSAgaz0xCisKKwkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rc2NyaXB0CisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgR05VIGxkIHNjcmlwdDogJG91dHB1dCIKKwkgICAgJEVDSE8gJ0lOUFVUICgnID4gJG91dHB1dAorCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgZG8KKwkgICAgICAkRUNITyAiJG9iaiIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgICRFQ0hPICcpJyA+PiAkb3V0cHV0CisJICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICJYJGZpbGVfbGlzdF9zcGVjIiAhPSBYOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCSAgICA6ID4gJG91dHB1dAorCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCisJICAgIHNoaWZ0CisJICAgIGZpcnN0b2JqPQorCSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllczsgdGhlbgorCSAgICAgIGZpcnN0b2JqPSIkMSAiCisJICAgICAgc2hpZnQKKwkgICAgZmkKKwkgICAgZm9yIG9iagorCSAgICBkbworCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkb3V0cHV0XCIKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgorCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCSAgICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgbGVuPSRsZW4wCisKKwkgICAgICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KKwkgICAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgICBkbworCQlmdW5jX2xlbiAiICRvYmoiCisJCWZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkJbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlpZiB0ZXN0ICJYJG9iamxpc3QiID0gWCB8fAorCQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkJICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkJZWxzZQorCQkgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCisJCSAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KKwkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqXCIKKwkJICBlbHNlCisJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqflwkUk0gJGxhc3Rfcm9ialwiCisJCSAgZmkKKwkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBmdW5jX2FyaXRoICRrICsgMQorCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgb2JqbGlzdD0kb2JqCisJCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgorCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CisJCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlmaQorCSAgICAgIGRvbmUKKwkgICAgICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKKwkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKworCSAgICBlbHNlCisJICAgICAgb3V0cHV0PQorCSAgICBmaQorCisJICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgbGlib2Jqcz0kb3V0cHV0CisJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYKKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlbG9hZGFibGUgb2JqZWN0IGZpbGU6ICRvdXRwdXQiCisKKwkgICAgIyBMb29wIHRocm91Z2ggdGhlIGNvbW1hbmRzIGdlbmVyYXRlZCBhYm92ZSBhbmQgZXhlY3V0ZSB0aGVtLgorCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisJICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgJG9wdF9zaWxlbnQgfHwgeworCQkgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgfQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJCWx0X2V4aXQ9JD8KKworCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKwkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCQlmaQorCisJCWV4aXQgJGx0X2V4aXQKKwkgICAgICB9CisJICAgIGRvbmUKKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKworICAgICAgICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIlgkaW5jbHVkZV9leHBzeW1zIiB8ICRYc2VkIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICAgICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgICAgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCSAgICBmaQorCSAgZmkKKworCSAgbGlib2Jqcz0kb3V0cHV0CisJICAjIFJlc3RvcmUgdGhlIHZhbHVlIG9mIG91dHB1dC4KKwkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZmkKKwkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCisJICAjIHZhbHVlIG9mICRsaWJvYmpzIGZvciBwaWVjZXdpc2UgbGlua2luZy4KKworCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgICAgZmkKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRkZWxmaWxlcyI7IHRoZW4KKwkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCisJICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgorCWZpCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwlmaQorCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICB9CisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCSAgICBsdF9leGl0PSQ/CisKKwkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCSAgICBmaQorCisJICAgIGV4aXQgJGx0X2V4aXQKKwkgIH0KKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisKKwkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJICAgIGZpCisJICBmaQorCisJICBleGl0ICRFWElUX1NVQ0NFU1MKKwlmaQorCisJIyBDcmVhdGUgbGlua3MgdG8gdGhlIHJlYWwgbGlicmFyeS4KKwlmb3IgbGlua25hbWUgaW4gJGxpbmtuYW1lczsgZG8KKwkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgJyhjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJGxpbmtuYW1lIiAmJiAkTE5fUyAiJHJlYWxuYW1lIiAiJGxpbmtuYW1lIiknICdleGl0ICQ/JworCSAgZmkKKwlkb25lCisKKwkjIElmIC1tb2R1bGUgb3IgLWV4cG9ydC1keW5hbWljIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgZGxuYW1lLgorCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzIHx8IHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXM7IHRoZW4KKwkgICMgT24gYWxsIGtub3duIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVzZSBhcmUgaWRlbnRpY2FsLgorCSAgZGxuYW1lPSIkc29uYW1lIgorCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9iaikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDs7CisgICAgICBlc2FjCisKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgY2FzZSAkb3V0cHV0IGluCisgICAgICAqLmxvKQorCXRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIiAmJiBcCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiCisKKwlsaWJvYmo9JG91dHB1dAorCWZ1bmNfbG8ybyAiJGxpYm9iaiIKKwlvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwk7OworICAgICAgKikKKwlsaWJvYmo9CisJb2JqPSIkb3V0cHV0IgorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb2JqZWN0cy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG9iaiAkbGlib2JqCisKKyAgICAgICMgT2JqZWN0cyBmcm9tIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoaXMgYXNzdW1lcworICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKKyAgICAgICMgZGlmZmVyZW50IG9uZXMgZm9yIFBJQy9ub24tUElDLCB0aGlzIHdlJ2xsIGhhdmUgdG8gZHVwbGljYXRlCisgICAgICAjIHRoZSBleHRyYWN0aW9uLgorICAgICAgcmVsb2FkX2NvbnZfb2Jqcz0KKyAgICAgIGdlbnRvcD0KKyAgICAgICMgcmVsb2FkX2NtZHMgcnVucyAkTEQgZGlyZWN0bHksIHNvIGxldCB1cyBnZXQgcmlkIG9mCisgICAgICAjIC1XbCBmcm9tIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIGFuZCBob3BlIHdlIGNhbiBnZXQgYnkgd2l0aAorICAgICAgIyB0dXJuaW5nIGNvbW1hIGludG8gc3BhY2UuLgorICAgICAgd2w9CisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIlgkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFhzZWQgLWUgJ3N8LHwgfGcnYAorCWVsc2UKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvYmp9eCIKKwkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICcvXC4nJHtsaWJleHR9JCcvZCcgLWUgJy9cLmxpYiQvZCcgLWUgIiRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKworICAgICAgb3V0cHV0PSIkb2JqIgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisKKyAgICAgICMgRXhpdCBpZiB3ZSBhcmVuJ3QgZG9pbmcgYSBsaWJyYXJ5IG9iamVjdCBmaWxlLgorICAgICAgaWYgdGVzdCAteiAiJGxpYm9iaiI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJHBpY19mbGFnIiB8fCB0ZXN0ICIkcGljX21vZGUiICE9IGRlZmF1bHQ7IHRoZW4KKwkjIE9ubHkgZG8gY29tbWFuZHMgaWYgd2UgcmVhbGx5IGhhdmUgZGlmZmVyZW50IFBJQyBvYmplY3RzLgorCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKKwlvdXRwdXQ9IiRsaWJvYmoiCisJZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworICAgICAgZmkKKworICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworCisgICAgcHJvZykKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKikgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OworICAgICAgZXNhYworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisKKyAgICAgIHRlc3QgIiRwcmVsb2FkIiA9IHllcyBcCisgICAgICAgICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmX3N0YXRpYyIgPSB1bmtub3duICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGBMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiWCAkY29tcGlsZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwk7OworICAgICAgZXNhYworCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLSotZGFyd2luKikKKwkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisJIyBCdXQgaXMgc3VwcG9zZWRseSBmaXhlZCBvbiAxMC40IG9yIGxhdGVyICh5YXkhKS4KKwlpZiB0ZXN0ICIkdGFnbmFtZSIgPSBDWFggOyB0aGVuCisJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCisJICAgIDEwLlswMTIzXSkKKwkgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCSMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICJYICRjb21waWxlX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJOzsKKyAgICAgIGVzYWMKKworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRjb21waWxlX2RlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2xpYnMiCisKKworICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRjb21waWxlX2RlcGxpYnMiCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkZmluYWxpemVfZGVwbGlicyIKKworICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJZm9yIGxpYmRpciBpbiAkcnBhdGggJHhycGF0aDsgZG8KKwkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKyAgICAgIGZpCisKKyAgICAgICMgTm93IGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQk7OworCSAgICAgICopCisJCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAke0VDSE99ICIkbGliZGlyIiB8ICR7U0VEfSAtZSAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRsaWJkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRsaWJkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgY29tcGlsZV9ycGF0aD0iJHJwYXRoIgorCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQk7OworCSAgICAgICopCisJCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9wZXJtX3JwYXRoPSIkZmluYWxpemVfcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgZmluYWxpemVfcnBhdGg9IiRycGF0aCIKKworICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiICJubyIKKworICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCisJZnVuY19leGVjdXRlX2NtZHMgIiRwcmVsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9eWVzCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQorICAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKmNlZ2NjKQorICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjLCB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGFueXdheS4KKyAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAiJHdyYXBwZXJzX3JlcXVpcmVkIiA9IG5vOyB0aGVuCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCisJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCisJZXhpdF9zdGF0dXM9MAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisKKwkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCisJZmkKKworCWV4aXQgJGV4aXRfc3RhdHVzCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWNvbXBpbGVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRjb21waWxlX2NvbW1hbmQiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwlmaW5hbGl6ZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGZpbmFsaXplX2NvbW1hbmQiCisgICAgICBmaQorCisgICAgICBjb21waWxlX3Zhcj0KKyAgICAgIGZpbmFsaXplX3Zhcj0KKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgIGRvbmUKKwkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9wZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkZmluYWxpemVfcGVybV9ycGF0aDsgZG8KKwkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgZG9uZQorCSAgZmluYWxpemVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJG5vX2luc3RhbGwiID0geWVzOyB0aGVuCisJIyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0LgorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwlsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJGxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKwkjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlLgorCSRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dAorCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCisJIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKworCWZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCisJZnVuY193YXJuaW5nICJcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgorCSAgbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorCSAgZWxzZQorCSAgICAjIGZhc3RfaW5zdGFsbCBpcyBzZXQgdG8gbmVlZGxlc3MKKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisJICBmaQorCWVsc2UKKwkgIGxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiWCRsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnYAorCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlcy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dCAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSAkb3V0cHV0X29iamRpci9sdC0kb3V0cHV0bmFtZQorCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisKKyAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUXVvdGUgdGhlIHJlbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisJZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJICBpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbHNlCisJICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGZpCisJZG9uZQorCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCisJcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgUXVvdGUgJEVDSE8gZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAiWCRFQ0hPIiA9ICJYJFNIRUxMICRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisJY2FzZSAkcHJvZ3BhdGggaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHFlY2hvPSIkU0hFTEwgJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworCSopIHFlY2hvPSIkU0hFTEwgYHB3ZGAvJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworCWVzYWMKKwlxZWNobz1gJEVDSE8gIlgkcWVjaG8iIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgZWxzZQorCXFlY2hvPWAkRUNITyAiWCRFQ0hPIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgbm90IGluIGRyeSBydW4gbW9kZS4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCisJIyBhIC5leGUgc3VmZml4LCBzbyB3ZSBzdHJpcCBpdCBvZmYgaGVyZS4KKwljYXNlICRvdXRwdXQgaW4KKwkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwllc2FjCisJIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiopCisJICAgIGV4ZWV4dD0uZXhlCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dG5hbWUiCisJICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCSAgKikgZXhlZXh0PSA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogKQorCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKKwkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKKwkgICAgY3dyYXBwZXI9IiRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlIgorCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjID4gJGN3cmFwcGVyc291cmNlCisKKwkgICAgIyBUaGUgd3JhcHBlciBleGVjdXRhYmxlIGlzIGJ1aWx0IHVzaW5nIHRoZSAkaG9zdCBjb21waWxlciwKKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKKwkgICAgIyBleGVjdXRlZCBvbiB0aGUgJGhvc3Qgb3IgdW5kZXIgYW4gZW11bGF0aW9uIGVudmlyb25tZW50LgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisJICAgICAgJFNUUklQICRjd3JhcHBlcgorCSAgICB9CisKKwkgICAgIyBOb3csIGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQgZm9yIGZ1bmNfc291cmNlIHVzZToKKwkgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAkY3dyYXBwZXIKKwkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiIDsgdGhlbgorCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGVsc2UKKwkJZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmaQorCSAgICB9CisJICA7OworCSAgKiApCisJICAgICRSTSAkb3V0cHV0CisJICAgIHRyYXAgIiRSTSAkb3V0cHV0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJG91dHB1dAorCSAgICBjaG1vZCAreCAkb3V0cHV0CisJICA7OworCWVzYWMKKyAgICAgIH0KKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIG9sZC1mYXNoaW9uZWQgYXJjaGl2ZS4KKyAgICBmb3Igb2xkbGliIGluICRvbGRsaWJzOyBkbworCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IGNvbnZlbmllbmNlOyB0aGVuCisJb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKKwlhZGRsaWJzPSIkY29udmVuaWVuY2UiCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBtb2R1bGU7IHRoZW4KKwkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUiCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwllbHNlCisJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllcyAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiI7IHRoZW4KKwkgICAgb2xkb2Jqcz0iJG9sZG9ianMgJHN5bWZpbGVvYmoiCisJICBmaQorCWZpCisJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgorCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworCW9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwljbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisgICAgICBlbHNlCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIG9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisKKwkjIFBPU0lYIGRlbWFuZHMgbm8gcGF0aHMgdG8gYmUgZW5jb2RlZCBpbiBhcmNoaXZlcy4gIFdlIGhhdmUKKwkjIHRvIGF2b2lkIGNyZWF0aW5nIGFyY2hpdmVzIHdpdGggZHVwbGljYXRlIGJhc2VuYW1lcyBpZiB3ZQorCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCisJIyBzdGF0aWMgYXJjaGl2ZSBvdXQgb2YgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LCBvciB3aGVuIGxpbmtpbmcKKwkjIHRoZSBlbnRpcmV0eSBvZiBhIGxpYnRvb2wgYXJjaGl2ZSBpbnRvIGFub3RoZXIgKGN1cnJlbnRseQorCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KKwlpZiAoZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgICBkbworCSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZG9uZSB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisJICA6CisJZWxzZQorCSAgJEVDSE8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKwkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgIGNvdW50ZXI9MQorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICBvYmpiYXNlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGNhc2UgIiAkb2xkb2JqcyAiIGluCisJICAgICIgIikgb2xkb2Jqcz0kb2JqIDs7CisJICAgICpbXCAvXSIkb2JqYmFzZSAiKikKKwkgICAgICB3aGlsZSA6OyBkbworCQkjIE1ha2Ugc3VyZSB3ZSBkb24ndCBwaWNrIGFuIGFsdGVybmF0ZSBuYW1lIHRoYXQgYWxzbworCQkjIG92ZXJsYXBzLgorCQluZXdvYmo9bHQkY291bnRlci0kb2JqYmFzZQorCQlmdW5jX2FyaXRoICRjb3VudGVyICsgMQorCQljb3VudGVyPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQljYXNlICIgJG9sZG9ianMgIiBpbgorCQkqW1wgL10iJG5ld29iaiAiKikgOzsKKwkJKikgaWYgdGVzdCAhIC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJyZWFrOyBmaSA7OworCQllc2FjCisJICAgICAgZG9uZQorCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKKwkgICAgICBvbGRvYmpzPSIkb2xkb2JqcyAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgOzsKKwkgICAgKikgb2xkb2Jqcz0iJG9sZG9ianMgJG9iaiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCisJZnVuY19sZW4gIiAkY21kcyIKKwlsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCWlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworCWVsc2UKKwkgICMgdGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIGluIHBhcnRzCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBzYXZlX1JBTkxJQj0kUkFOTElCCisJICBSQU5MSUI9OgorCSAgb2JqbGlzdD0KKwkgIGNvbmNhdF9jbWRzPQorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgIyBJcyB0aGVyZSBhIGJldHRlciB3YXkgb2YgZmluZGluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGxpc3Q/CisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGxhc3Rfb2xkb2JqPSRvYmoKKwkgIGRvbmUKKwkgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICBsZW49JGxlbjAKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY19sZW4gIiAkb2JqIgorCSAgICBmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJICAgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgorCSAgICAgIDoKKwkgICAgZWxzZQorCSAgICAgICMgdGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKKwkgICAgICBvbGRvYmpzPSRvYmpsaXN0CisJICAgICAgaWYgdGVzdCAiJG9iaiIgPSAiJGxhc3Rfb2xkb2JqIiA7IHRoZW4KKwkJUkFOTElCPSRzYXZlX1JBTkxJQgorCSAgICAgIGZpCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgICAgICBvYmpsaXN0PQorCSAgICAgIGxlbj0kbGVuMAorCSAgICBmaQorCSAgZG9uZQorCSAgUkFOTElCPSRzYXZlX1JBTkxJQgorCSAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgaWYgdGVzdCAiWCRvbGRvYmpzIiA9ICJYIiA7IHRoZW4KKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCisJICBlbHNlCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZpCisJZmkKKyAgICAgIGZpCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGNtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRnZW5lcmF0ZWQiICYmIFwKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIkZ2VuZXJhdGVkIgorCisgICAgIyBOb3cgY3JlYXRlIHRoZSBsaWJ0b29sIGFyY2hpdmUuCisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgKi5sYSkKKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiBvbGRfbGlicmFyeT0iJGxpYm5hbWUuJGxpYmV4dCIKKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgorICAgICAgZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCWVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWVsc2UKKwkgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgUXVvdGUgdGhlIGxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICByZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tbW9kZT1yZWxpbmsgJGxpYnRvb2xfYXJncyBAaW5zdF9wcmVmaXhfZGlyQCkiCisgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXMgOyB0aGVuCisJcmVsaW5rX2NvbW1hbmQ9CisgICAgICBmaQorCisgICAgICAjIE9ubHkgY3JlYXRlIHRoZSBvdXRwdXQgaWYgbm90IGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJZm9yIGluc3RhbGxlZCBpbiBubyB5ZXM7IGRvCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgb3V0cHV0PSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSJpCisJICAgICMgUmVwbGFjZSBhbGwgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMgd2l0aCB0aGUgaW5zdGFsbGVkIG9uZXMKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgKi5sYSkKKwkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCW5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgICopIG5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIG5ld2RsZmlsZXM9CisKKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCW5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkJIyBPbmx5IHBhc3MgcHJlb3BlbmVkIGZpbGVzIHRvIHRoZSBwc2V1ZG8tYXJjaGl2ZSAoZm9yCisJCSMgZXZlbnR1YWwgbGlua2luZyB3aXRoIHRoZSBhcHAuIHRoYXQgbGlua3MgaXQpIGlmIHdlCisJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bworCQkjIHRoZSBsaWJyYXJ5OgorCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICBmaQorCSAgJFJNICRvdXRwdXQKKwkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgorCSAgdGRsbmFtZT0kZGxuYW1lCisJICBjYXNlICRob3N0LCRvdXRwdXQsJGluc3RhbGxlZCwkbW9kdWxlLCRkbG5hbWUgaW4KKwkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNlZ2NjKiwqbGFpLHllcyxubywqLmRsbCkgdGRsbmFtZT0uLi9iaW4vJGRsbmFtZSA7OworCSAgZXNhYworCSAgJEVDSE8gPiAkb3V0cHV0ICJcCisjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIFRoZSBuYW1lIHRoYXQgd2UgY2FuIGRsb3BlbigzKS4KK2RsbmFtZT0nJHRkbG5hbWUnCisKKyMgTmFtZXMgb2YgdGhpcyBsaWJyYXJ5LgorbGlicmFyeV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMnCisKKyMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgorb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKKworIyBMaW5rZXIgZmxhZ3MgdGhhdCBjYW4gbm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KK2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKKworIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCitkZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCisKKyMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKK3dlYWtfbGlicmFyeV9uYW1lcz0nJHdlYWtfbGlicycKKworIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciAkbGlibmFtZS4KK2N1cnJlbnQ9JGN1cnJlbnQKK2FnZT0kYWdlCityZXZpc2lvbj0kcmV2aXNpb24KKworIyBJcyB0aGlzIGFuIGFscmVhZHkgaW5zdGFsbGVkIGxpYnJhcnk/CitpbnN0YWxsZWQ9JGluc3RhbGxlZAorCisjIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPworc2hvdWxkbm90bGluaz0kbW9kdWxlCisKKyMgRmlsZXMgdG8gZGxvcGVuL2RscHJlb3BlbgorZGxvcGVuPSckZGxmaWxlcycKK2RscHJlb3Blbj0nJGRscHJlZmlsZXMnCisKKyMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKK2xpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm8gJiYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IHllczsgdGhlbgorCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorCSAgZmkKKwlkb25lCisgICAgICB9CisKKyAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KKyAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCisgICAgICBmdW5jX3Nob3dfZXZhbCAnKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJG91dHB1dG5hbWUiICYmICRMTl9TICIuLi8kb3V0cHV0bmFtZSIgIiRvdXRwdXRuYW1lIiApJyAnZXhpdCAkPycKKyAgICAgIDs7CisgICAgZXNhYworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit7IHRlc3QgIiRtb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB9ICYmCisgICAgZnVuY19tb2RlX2xpbmsgJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfdW5pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX3VuaW5zdGFsbCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBSTT0iJG5vbm9wdCIKKyAgICBmaWxlcz0KKyAgICBybWZvcmNlPQorICAgIGV4aXRfc3RhdHVzPTAKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgorICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1mKSBSTT0iJFJNICRhcmciOyBybWZvcmNlPXllcyA7OworICAgICAgLSopIFJNPSIkUk0gJGFyZyIgOzsKKyAgICAgICopIGZpbGVzPSIkZmlsZXMgJGFyZyIgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICB0ZXN0IC16ICIkUk0iICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBSTSBwcm9ncmFtIgorCisgICAgcm1kaXJzPQorCisgICAgb3JpZ29iamRpcj0iJG9iamRpciIKKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgIGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorCW9iamRpcj0iJG9yaWdvYmpkaXIiCisgICAgICBlbHNlCisJb2JqZGlyPSIkZGlyLyRvcmlnb2JqZGlyIgorICAgICAgZmkKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsICYmIG9iamRpcj0iJGRpciIKKworICAgICAgIyBSZW1lbWJlciBvYmpkaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworICAgICAgaWYgdGVzdCAiJG1vZGUiID0gY2xlYW47IHRoZW4KKwljYXNlICIgJHJtZGlycyAiIGluCisJICAqIiAkb2JqZGlyICIqKSA7OworCSAgKikgcm1kaXJzPSIkcm1kaXJzICRvYmpkaXIiIDs7CisJZXNhYworICAgICAgZmkKKworICAgICAgIyBEb24ndCBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBybSAtZiB3YXMgdXNlZC4KKyAgICAgIGlmIHsgdGVzdCAtTCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB7IHRlc3QgLWggIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisJOgorICAgICAgZWxpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KKwlleGl0X3N0YXR1cz0xCisJY29udGludWUKKyAgICAgIGVsaWYgdGVzdCAiJHJtZm9yY2UiID0geWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIHJtZmlsZXM9IiRmaWxlIgorCisgICAgICBjYXNlICRuYW1lIGluCisgICAgICAqLmxhKQorCSMgUG9zc2libHkgYSBsaWJ0b29sIGFyY2hpdmUsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQorCisJICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgorCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisJICBkb25lCisJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCisJICBjYXNlICIkbW9kZSIgaW4KKwkgIGNsZWFuKQorCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KKwkgICAgIyAiICAiIGluIHRoZSBiZWdpbm5pbmcgY2F0Y2hlcyBlbXB0eSAkZGxuYW1lCisJICAgICoiICRkbG5hbWUgIiopIDs7CisJICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKwkgICAgZXNhYworCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfWkiCisJICAgIDs7CisJICB1bmluc3RhbGwpCisJICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBvbGRfcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKKwkgICAgZmkKKwkgICAgIyBGSVhNRTogc2hvdWxkIHJlaW5zdGFsbCB0aGUgYmVzdCByZW1haW5pbmcgc2hhcmVkIGxpYnJhcnkuCisJICAgIDs7CisJICBlc2FjCisJZmkKKwk7OworCisgICAgICAqLmxvKQorCSMgUG9zc2libHkgYSBsaWJ0b29sIG9iamVjdCwgc28gdmVyaWZ5IGl0LgorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCisKKwkgICMgUmVhZCB0aGUgLmxvIGZpbGUKKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKKworCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJHBpY19vYmplY3QiCisJICBmaQorCisJICAjIEFkZCBub24tUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kbm9uX3BpY19vYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKikKKwlpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbiA7IHRoZW4KKwkgIG5vZXhlbmFtZT0kbmFtZQorCSAgY2FzZSAkZmlsZSBpbgorCSAgKi5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRuYW1lIgorCSAgICBub2V4ZW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCisJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIGEgbGlidG9vbCBwcm9ncmFtLgorCSAgaWYgZnVuY19sdHdyYXBwZXJfcCAiJGZpbGUiOyB0aGVuCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgICBlbHNlCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCisJICAgIGZpCisKKwkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKwkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCisJICAgIGZpCisJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorCSAgICBmaQorCSAgZmkKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKKyAgICBkb25lCisgICAgb2JqZGlyPSIkb3JpZ29iamRpciIKKworICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRkaXIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgInJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0ICRleGl0X3N0YXR1cworfQorCit7IHRlc3QgIiRtb2RlIiA9IHVuaW5zdGFsbCB8fCB0ZXN0ICIkbW9kZSIgPSBjbGVhbjsgfSAmJgorICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CisKK3Rlc3QgLXogIiRtb2RlIiAmJiB7CisgIGhlbHA9IiRnZW5lcmljX2hlbHAiCisgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIE1PREUiCit9CisKK3Rlc3QgLXogIiRleGVjX2NtZCIgJiYgXAorICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisKK2lmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KKyAgZXZhbCBleGVjICIkZXhlY19jbWQiCisgIGV4aXQgJEVYSVRfRkFJTFVSRQorZmkKKworZXhpdCAkZXhpdF9zdGF0dXMKKworCisjIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgorIyBpbiB3aGljaCB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKKyMgY2hvaWNlcywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnksIHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFibGUsCisjIHNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIHdlcmUgZGlzYWJsZWQgYmVjYXVzZQorIyB0aGUgdXNlciBhc2tlZCBmb3IgdGhhdCBvciBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQKKyMgdGhlbS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBBSVgsIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgc3VwcG9ydCBoYXZpbmcgYm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBhdCB0aGUgc2FtZQorIyB0aW1lIG9uIHRoYXQgcGxhdGZvcm0sIHNvIHdlIGRlZmF1bHQgdG8gYSBzaGFyZWQtb25seSBjb25maWd1cmF0aW9uLgorIyBJZiBhIGRpc2FibGUtc2hhcmVkIHRhZyBpcyBnaXZlbiwgd2UnbGwgZmFsbGJhY2sgdG8gYSBzdGF0aWMtb25seQorIyBjb25maWd1cmF0aW9uLiAgQnV0IHdlJ2xsIG5ldmVyIGdvIGZyb20gc3RhdGljLW9ubHkgdG8gc2hhcmVkLW9ubHkuCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKK2J1aWxkX2xpYnRvb2xfbGlicz1ubworYnVpbGRfb2xkX2xpYnM9eWVzCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCitidWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOnNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjoyCisjIEVuZDoKKyMgdmk6c3c9MgorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2xpYnRvb2wubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2xpYnRvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxY2RlMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbGlidG9vbC5tNApAQCAtMCwwICsxLDczNjAgQEAKKyMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KK10pCisKKyMgc2VyaWFsIDU2IExUX0lOSVQKKworCisjIExUX1BSRVJFUShWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhpcyBsaWJ0b29sIHZlcnNpb24gaXMgbGVzcyB0aGF0IFZFUlNJT04uCittNF9kZWZ1bihbTFRfUFJFUkVRXSwKK1ttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbTFRfUEFDS0FHRV9WRVJTSU9OXSksIFskMV0pLCAtMSwKKyAgICAgICBbbTRfZGVmYXVsdChbJDNdLAorCQkgICBbbTRfZmF0YWwoW0xpYnRvb2wgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWRdLAorCQkgICAgICAgICAgICAgNjMpXSldLAorICAgICAgIFskMl0pXSkKKworCisjIF9MVF9DSEVDS19CVUlMRERJUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gaWYgdGhlIGFic29sdXRlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycworbTRfZGVmdW4oW19MVF9DSEVDS19CVUlMRERJUl0sCitbY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICBBQ19NU0dfV0FSTihbTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIGBwd2RgXSkgOzsKK2VzYWMKK10pCisKKworIyBMVF9JTklUKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfSU5JVF0sCitbQUNfUFJFUkVRKFsyLjU4XSlkbmwgV2UgdXNlIEFDX0lOQ0xVREVTX0RFRkFVTFQKK0FDX0JFRk9SRShbJDBdLCBbTFRfTEFOR10pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xURExfSU5JVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfQlVJTERESVJdKWRubAorCitkbmwgQXV0b2NvbmYgZG9lc24ndCBjYXRjaCB1bmV4cGFuZGVkIExUXyBtYWNyb3MgYnkgZGVmYXVsdDoKK200X3BhdHRlcm5fZm9yYmlkKFteXz9MVF9bQS1aX10rJF0pZG5sCittNF9wYXR0ZXJuX2FsbG93KFteKF9MVF9FT0Z8TFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PV3xMVF9NVUxUSV9NT0RVTEUpJF0pZG5sCitkbmwgYWNsb2NhbCBkb2Vzbid0IHB1bGwgbHRvcHRpb25zLm00LCBsdHN1Z2FyLm00LCBvciBsdHZlcnNpb24ubTQKK2RubCB1bmxlc3Mgd2UgcmVxdWlyZSBhbiBBQ19ERUZVTmVkIG1hY3JvOgorQUNfUkVRVUlSRShbTFRPUFRJT05TX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRTVUdBUl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUVkVSU0lPTl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUT0JTT0xFVEVfVkVSU0lPTl0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19MVE1BSU5dKWRubAorCitkbmwgUGFyc2UgT1BUSU9OUworX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0iJGx0bWFpbiIKKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworQUNfU1VCU1QoTElCVE9PTClkbmwKKworX0xUX1NFVFVQCisKKyMgT25seSBleHBhbmQgb25jZToKK200X2RlZmluZShbTFRfSU5JVF0pCitdKSMgTFRfSU5JVAorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBQ19QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitBVV9BTElBUyhbQU1fUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgW10pCisKKworIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorbTRfZGVmdW4oW19MVF9DQ19CQVNFTkFNRV0sCitbZm9yIGNjX3RlbXAgaW4gJDEiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRFQ0hPICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCitdKQorCisKKyMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEl0IGlzIG9rYXkgdG8gdXNlIHRoZXNlIGZpbGUgY29tbWFuZHMgYW5kIGFzc3VtZSB0aGV5IGhhdmUgYmVlbiBzZXQKKyMgc2Vuc2libHkgYWZ0ZXIgYG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKScuCittNF9kZWZ1bihbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10sCitbOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorXSkjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKworCisjIF9MVF9TRVRVUAorIyAtLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfU0VUVVBdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitfTFRfREVDTChbXSwgW2hvc3RfYWxpYXNdLCBbMF0sIFtUaGUgaG9zdCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtob3N0XSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtob3N0X29zXSwgWzBdKWRubAorZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX2FsaWFzXSwgWzBdLCBbVGhlIGJ1aWxkIHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkXSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF9vc10sIFswXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorX0xUX0RFQ0woW10sIFtMTl9TXSwgWzFdLCBbV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rc10pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0xUX0NNRF9NQVhfTEVOXSlkbmwKK19MVF9ERUNMKFtvYmpleHRdLCBbYWNfb2JqZXh0XSwgWzBdLCBbT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpXSlkbmwKK19MVF9ERUNMKFtdLCBbZXhlZXh0XSwgWzBdLCBbRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpXSlkbmwKK2RubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9SRUxPQURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX09MRF9BUkNISVZFXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKK10pCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK19MVF9DSEVDS19PQkpESVIKKworbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtbImAkXFxdXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbWyJgXFxdXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIF9MVF9QQVRIX01BR0lDCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CitMVF9TVVBQT1JURURfVEFHKFtDQ10pCitfTFRfTEFOR19DX0NPTkZJRworX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKK19MVF9DT05GSUdfQ09NTUFORFMKK10pIyBfTFRfU0VUVVAKKworCisjIF9MVF9QUk9HX0xUTUFJTgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCisjIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCisjIGBjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKKyMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KK200X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAorW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQorbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitdKSMgX0xUX1BST0dfTFRNQUlOCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQWNjdW11bGF0ZSBjb2RlIGZvciBjcmVhdGluZyBsaWJ0b29sLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAorIyB0YWdzLCB3ZSBhY2N1bXVsYXRlIHRoZSBjaHVua3Mgb2YgY29kZSB0byBzZW5kIHRvIEFDX0NPTkZJR19DT01NQU5EUworIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlIGBsaWJ0b29sJworIyBsYWJlbC4KKworCisjIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBJTklULUNPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdKQorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MKFtDT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSkKKworCisjIF9MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbQ09NTUFORFNdLCBbSU5JVF9DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTXSwKK1tfTFRfQ09ORklHX0xJQlRPT0woWyQxXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCitdKQorCisKKyMgX0xUX0ZPUk1BVF9DT01NRU5UKFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZworIyBmdWxsLXN0b3AgdG8gdGhlIHdob2xlIGNvbW1lbnQgaWYgb25lIGlzIG5vdCBwcmVzZW50IGFscmVhZHkuCittNF9kZWZpbmUoW19MVF9GT1JNQVRfQ09NTUVOVF0sCitbbTRfaWZ2YWwoWyQxXSwgWworbTRfYnBhdHN1YnN0KFttNF9icGF0c3Vic3QoWyQxXSwgW14gKl0sIFsjIF0pXSwKKyAgICAgICAgICAgICAgW1snYCRcXV0sIFtcXFwmXSldbTRfYm1hdGNoKFskMV0sIFtbIT8uXSRdLCBbXSwgWy5dKQorKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZJWE1FOiBFbGltaW5hdGUgVkFSTkFNRSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ09ORklHTkFNRSBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgdmFsdWUgaW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorIyBWQUxVRSBtYXkgYmUgMCwgMSBvciAyIGZvciBhIGNvbXB1dGVkIHF1b3RlIGVzY2FwZWQgdmFsdWUgYmFzZWQgb24KKyMgVkFSTkFNRS4gIEFueSBvdGhlciB2YWx1ZSB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCittNF9kZWZpbmUoW19MVF9ERUNMXSwKK1tsdF9pZl9hcHBlbmRfdW5pcShbbHRfZGVjbF92YXJuYW1lc10sIFskMl0sIFssIF0sCisgICAgW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2xpYnRvb2xfbmFtZV0sCisJW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFt2YWx1ZV0sIFskM10pCisgICAgbTRfaWZ2YWwoWyQ0XSwKKwlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLAorCVt0YWdnZWQ/XSwgW200X2lmdmFsKFskNV0sIFt5ZXNdLCBbbm9dKV0pXSkKK10pCisKKworIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHREVDTF0sIFtfTFRfREVDTChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbeWVzXSldKQorCisKKyMgbHRfZGVjbF90YWdfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3RhZ192YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW3llc10sICRAKV0pCisKKworIyBfbHRfZGVjbF9maWx0ZXIoU1VCS0VZLCBWQUxVRSwgW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19sdF9kZWNsX2ZpbHRlcl0sCitbbTRfY2FzZShbJCNdLAorICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgWzFdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAorICBbMl0sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCAkQCldKVtdZG5sCitdKQorCisKKyMgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9xdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsxXSwgJEApXSkKKworCisjIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9kcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMl0sICRAKV0pCisKKworIyBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9hc3NlcnQoWyQjIDw9IDJdKWRubAorXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgbTRfaWZ2YWwoWyQyXSwgW1skMl1dLCBbbTRfZHF1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKV0pLAorICAgIG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9xdW90ZShfTFRfVEFHUykpLCBbIF0pKV0pCittNF9kZWZpbmUoW19sdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfaWZ2YWwoWyQzXSwgW2x0X2NvbWJpbmUoWyQxXSwgWyQyXSwgW19dLCAkMyldKV0pCisKKworIyBsdF9kZWNsX2FsbF92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICAgbTRfaWYoWyQyXSwgW10sCisJICAgbTRfcXVvdGUobHRfZGVjbF92YXJuYW1lcyksCisJbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpW11kbmwKK10pCittNF9kZWZpbmUoW19sdF9kZWNsX2FsbF92YXJuYW1lc10sCitbbHRfam9pbigkQCwgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoWyQxXSwKKwkJCWx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtbLCBdXSwgbTRfc2hpZnQoJEApKSkpZG5sCitdKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byBgY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKKyMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluIGBjb25maWd1cmUnLiAgVkFSTkFNRQorIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCittNF9kZWZpbmUoW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkVdLAorWyQxPSdgJEVDSE8gIlgkXVskMSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJ10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdlIGRlbGltaXQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIHdpdGggc2luZ2xlIHF1b3Rlcywgc28gd2hlbgorIyB3ZSB3cml0ZSB0aGVtIHRvIGNvbmZpZy5zdGF0dXMsIHdlIGhhdmUgdG8gYmUgc3VyZSB0byBxdW90ZSBhbGwKKyMgZW1iZWRkZWQgc2luZ2xlIHF1b3RlcyBwcm9wZXJseS4gIEluIGNvbmZpZ3VyZSwgdGhpcyBtYWNybyBleHBhbmRzCisjIGVhY2ggdmFyaWFibGUgZGVjbGFyZWQgd2l0aCBfTFRfREVDTCAoYW5kIF9MVF9UQUdERUNMKSBpbnRvOgorIworIyAgICA8dmFyPj0nYCRFQ0hPICJYJDx2YXI+IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittNF9kZWZ1bihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF9hbGxfdmFybmFtZXMpLAorICAgIFttNF9uKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdTCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IGNvbW1lbnQgYW5kIGxpc3Qgb2YgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIHNjcmlwdAorbTRfZGVmdW4oW19MVF9MSUJUT09MX1RBR1NdLAorW19MVF9GT1JNQVRfQ09NTUVOVChbVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0XSlkbmwKK2F2YWlsYWJsZV90YWdzPSJfTFRfVEFHUyJkbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9ERUNMQVJFKFZBUk5BTUUsIFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHRyYWN0IHRoZSBkaWN0aW9uYXJ5IHZhbHVlcyBmb3IgVkFSTkFNRSAob3B0aW9uYWxseSB3aXRoIFRBRykgYW5kCisjIGV4cGFuZCB0byBhIGNvbW1lbnRlZCBzaGVsbCB2YXJpYWJsZSBzZXR0aW5nOgorIworIyAgICAjIFNvbWUgY29tbWVudCBhYm91dCB3aGF0IFZBUiBpcyBmb3IuCisjICAgIHZpc2libGVfbmFtZT0kbHRfaW50ZXJuYWxfbmFtZQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9ERUNMQVJFXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwKKwkJCQkJICAgW2Rlc2NyaXB0aW9uXSkpKVtdZG5sCittNF9wdXNoZGVmKFtfbGlidG9vbF9uYW1lXSwKKyAgICBtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbbGlidG9vbF9uYW1lXSkpKVtdZG5sCittNF9jYXNlKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pKSwKKyAgICBbMF0sIFtfbGlidG9vbF9uYW1lPVskXSQxXSwKKyAgICBbMV0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKyAgICBbMl0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKyAgICBbX2xpYnRvb2xfbmFtZT1sdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKV0pW11kbmwKK200X2lmdmFsKFskMl0sIFtfJDJdKVtdbTRfcG9wZGVmKFtfbGlidG9vbF9uYW1lXSlbXWRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0NPTkZJR19WQVJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgY29tbWVudGVkIGRlY2xhcmF0aW9ucyBvZiBub24tdGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcworIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSBgbGlidG9vbCcKKyMgc2NyaXB0LiAgVGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyAoZXZlbiBmb3IgdGhlIExJQlRPT0wgQ09ORklHCisjIHNlY3Rpb24pIGFyZSBwcm9kdWNlZCBieSBfTFRfTElCVE9PTF9UQUdfVkFSUy4KK200X2RlZnVuKFtfTFRfTElCVE9PTF9DT05GSUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sCisgICAgbTRfcXVvdGUoX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW25vXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHX1ZBUlMoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9MSUJUT09MX1RBR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIsIFskMV0pXSldKV0pCisKKworIyBfTFRfVEFHVkFSKFZBUk5BTUUsIFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdWQVJdLCBbbTRfaWZ2YWwoWyQyXSwgWyQxXyQyXSwgWyQxXSldKQorCisKKyMgX0xUX0NPTkZJR19DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlbmQgYWNjdW11bGF0ZWQgb3V0cHV0IHRvICRDT05GSUdfU1RBVFVTLiAgVGhhbmtzIHRvIHRoZSBsaXN0cyBvZgorIyB2YXJpYWJsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlIGVzY2FwaW5nIHdlIHNhdmVkIGZyb20gY2FsbHMKKyMgdG8gX0xUX0RFQ0wsIHdlIGNhbiBwdXQgcXVvdGUgZXNjYXBlZCB2YXJpYWJsZXMgZGVjbGFyYXRpb25zCisjIGludG8gYGNvbmZpZy5zdGF0dXMnLCBhbmQgdGhlbiB0aGUgc2hlbGwgY29kZSB0byBxdW90ZSBlc2NhcGUgdGhlbSBpbgorIyBmb3IgbG9vcHMgaW4gYGNvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAorIyBmcm9tIGNhbGxzIHRvIF9MVF9DT05GSUdfTElCVE9PTF9JTklUIGlzIGV4cGFuZGVkLgorbTRfZGVmdW4oW19MVF9DT05GSUdfQ09NTUFORFNdLAorW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9PVVRQVVRdLAorCWRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaGFzIGJlZW4gcGxhY2VkIGluICRDT05GSUdfTFQsCisJZG5sIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgYWxsIG92ZXIgYWdhaW4gaW50byBjb25maWcuc3RhdHVzLAorCWRubCB0aGVuIHdlIHdpbGwgaGF2ZSBjb25maWcuc3RhdHVzIHJ1biAkQ09ORklHX0xUIGxhdGVyLCBzbyBpdAorCWRubCBuZWVkcyB0byBrbm93IHdoYXQgbmFtZSBpcyBzdG9yZWQgdGhlcmU6CisgICAgICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorICAgICAgICAgICAgWyRTSEVMTCAkQ09ORklHX0xUIHx8IEFTX0VYSVQoMSldLCBbQ09ORklHX0xUPSckQ09ORklHX0xUJ10pXSwKKyAgICBkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGlzIGRlc3RpbmVkIGZvciBjb25maWcuc3RhdHVzLAorICAgIGRubCBleHBhbmQgdGhlIGFjY3VtdWxhdGVkIGNvbW1hbmRzIGFuZCBpbml0IGNvZGUgbm93OgorICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorICAgICAgICBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSldKQorXSkjX0xUX0NPTkZJR19DT01NQU5EUworCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdLAorWworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPICJYXFxcXFwkXCR2YXIiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlhcXFwkXCR2YXJcXCIgfCBcXFwkWHNlZCAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyAiWFxcXFxcJFwkdmFyIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJYXFxcJFwkdmFyXFwiIHwgXFxcJFhzZWQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBGaXgtdXAgZmFsbGJhY2sgZWNobyBpZiBpdCB3YXMgbWFuZ2xlZCBieSB0aGUgYWJvdmUgcXVvdGluZyBydWxlcy4KK2Nhc2UgXCRsdF9FQ0hPIGluCisqJ1xcXFskXTAgLS1mYWxsYmFjay1lY2hvIicpZG5sICIKKyAgbHRfRUNITz1cYFwkRUNITyAiWFwkbHRfRUNITyIgfCBcJFhzZWQgLWUgJ3MvXFxcXFxcXFxcXFxcXFxcWyRdMCAtLWZhbGxiYWNrLWVjaG8iXFskXS9cWyRdMCAtLWZhbGxiYWNrLWVjaG8iLydcYAorICA7OworZXNhYworCitfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVAorXSkKKworCisjIExUX09VVFBVVAorIyAtLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBhbGxvd3MgZWFybHkgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQgKGJlZm9yZQorIyBBQ19PVVRQVVQgaXMgY2FsbGVkKSwgaW5jYXNlIGl0IGlzIHVzZWQgaW4gY29uZmlndXJlIGZvciBjb21waWxhdGlvbgorIyB0ZXN0cy4KK0FDX0RFRlVOKFtMVF9PVVRQVVRdLAorWzogJHtDT05GSUdfTFQ9Li9jb25maWcubHR9CitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkQ09ORklHX0xUXSkKK2NhdCA+IiRDT05GSUdfTFQiIDw8X0xURU9GCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSBhIGxpYnRvb2wgc3R1YiB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisKK2x0X2NsX3NpbGVudD1mYWxzZQorU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitBU19TSEVMTF9TQU5JVElaRQorX0FTX1BSRVBBUkUKKworZXhlYyBBU19NRVNTQUdFX0ZEPiYxCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgQVNfQk9YKFtSdW5uaW5nICRhc19tZS5dKQorfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKK2x0X2NsX2hlbHA9IlwKK1xgJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKK2ZvciB1c2UgaW4gZnVydGhlciBjb25maWd1cmUgdGltZSB0ZXN0cyBiZWZvcmUgdGhlIHJlYWwgbGlidG9vbCBpcworZ2VuZXJhdGVkLgorCitVc2FnZTogJFswXSBbW09QVElPTlNdXQorCisgIC1oLCAtLWhlbHAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1kLCAtLWRlYnVnICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisKK1JlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCisKK2x0X2NsX3ZlcnNpb249IlwKK200X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLmx0W11kbmwKK200X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCitjb25maWd1cmVkIGJ5ICRbMF0sIGdlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4KKworQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKword2hpbGUgdGVzdCAkWyNdICE9IDAKK2RvCisgIGNhc2UgJFsxXSBpbgorICAgIC0tdmVyc2lvbiB8IC0tdiogfCAtViApCisgICAgICBlY2hvICIkbHRfY2xfdmVyc2lvbiI7IGV4aXQgMCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICBlY2hvICIkbHRfY2xfaGVscCI7IGV4aXQgMCA7OworICAgIC0tZGVidWcgfCAtLWQqIHwgLWQgKQorICAgICAgZGVidWc9OiA7OworICAgIC0tcXVpZXQgfCAtLXEqIHwgLS1zaWxlbnQgfCAtLXMqIHwgLXEgKQorICAgICAgbHRfY2xfc2lsZW50PTogOzsKKworICAgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworCisgICAgKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmICRsdF9jbF9zaWxlbnQ7IHRoZW4KKyAgZXhlYyBBU19NRVNTQUdFX0ZEPi9kZXYvbnVsbAorZmkKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxfTFRFT0YKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSkKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EUworQVNfRVhJVCgwKQorX0xURU9GCitjaG1vZCAreCAiJENPTkZJR19MVCIKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBidXQgY29uZmlnLmx0IGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwKKyMgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2csIHdoaWNoIGZhaWxzIG9uIERPUywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0CisjIG9wZW4gYnkgY29uZmlndXJlLiAgSGVyZSB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsIGVmZmVjdGl2ZWx5IGNsb3NpbmcKKyMgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5sdC4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBsdF9jbF9zdWNjZXNzPToKKyAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgICBsdF9jb25maWdfbHRfYXJncz0iJGx0X2NvbmZpZ19sdF9hcmdzIC0tcXVpZXQiCisgIGV4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCisgICRTSEVMTCAiJENPTkZJR19MVCIgJGx0X2NvbmZpZ19sdF9hcmdzIHx8IGx0X2NsX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworICAkbHRfY2xfc3VjY2VzcyB8fCBBU19FWElUKDEpCitmaQorXSkjIExUX09VVFBVVAorCisKKyMgX0xUX0NPTkZJRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBJZiBUQUcgaXMgdGhlIGJ1aWx0LWluIHRhZywgY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQgd2l0aCBhCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZSBhZGQgY29kZQorIyB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkgVEFHIGZyb20gdGhlCisjIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KK200X2RlZnVuKFtfTFRfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbCisgIG00X2RlZmluZShbX0xUX1RBR10sIG00X2lmKFskMV0sIFtdLCBbQ10sIFskMV0pKWRubAorICBtNF9pZihfTFRfVEFHLCBbQ10sIFsKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgICAgZmkKKworICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorCisjIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKyMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorIworX0xUX0NPUFlJTkcKK19MVF9MSUJUT09MX1RBR1MKKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKK19MVF9MSUJUT09MX0NPTkZJR19WQVJTCitfTFRfTElCVE9PTF9UQUdfVkFSUworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9QUk9HX0xUTUFJTgorCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBfTFRfUFJPR19YU0lfU0hFTExGTlMKKworICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKK10sCitbY2F0IDw8X0xUX0VPRiA+PiAiJG9maWxlIgorCitkbmwgVW5mb3J0dW5hdGVseSB3ZSBoYXZlIHRvIHVzZSAkMSBoZXJlLCBzaW5jZSBfTFRfVEFHIGlzIG5vdCBleHBhbmRlZAorZG5sIGluIGEgY29tbWVudCAoaWUgYWZ0ZXIgYSAjKS4KKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9MSUJUT09MX1RBR19WQVJTKF9MVF9UQUcpCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0VPRgorXSlkbmwgL200X2lmCitdLAorW200X2lmKFskMV0sIFtdLCBbCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZSddLCBbXSkKK10pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKK10pIyBfTFRfQ09ORklHCisKKworIyBMVF9TVVBQT1JURURfVEFHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyYWNlIHRoaXMgbWFjcm8gdG8gZGlzY292ZXIgd2hhdCB0YWdzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnRvb2wKKyMgLS10YWcgb3B0aW9uLCB1c2luZzoKKyMgICAgYXV0b2NvbmYgLS10cmFjZSAnTFRfU1VQUE9SVEVEX1RBRzokMScKK0FDX0RFRlVOKFtMVF9TVVBQT1JURURfVEFHXSwgW10pCisKKworIyBDIHN1cHBvcnQgaXMgYnVpbHQtaW4gZm9yIG5vdworbTRfZGVmaW5lKFtfTFRfTEFOR19DX2VuYWJsZWRdLCBbXSkKK200X2RlZmluZShbX0xUX1RBR1NdLCBbXSkKKworCisjIExUX0xBTkcoTEFORykKKyMgLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWYgbm90IGFscmVhZHkgZW5hYmxlZC4KK0FDX0RFRlVOKFtMVF9MQU5HXSwKK1tBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCittNF9jYXNlKFskMV0sCisgIFtDXSwJCQlbX0xUX0xBTkcoQyldLAorICBbQysrXSwJCVtfTFRfTEFORyhDWFgpXSwKKyAgW0phdmFdLAkJW19MVF9MQU5HKEdDSildLAorICBbRm9ydHJhbiA3N10sCQlbX0xUX0xBTkcoRjc3KV0sCisgIFtGb3J0cmFuXSwJCVtfTFRfTEFORyhGQyldLAorICBbV2luZG93cyBSZXNvdXJjZV0sCVtfTFRfTEFORyhSQyldLAorICBbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfQ09ORklHXSwKKyAgICBbX0xUX0xBTkcoJDEpXSwKKyAgICBbbTRfZmF0YWwoWyQwOiB1bnN1cHBvcnRlZCBsYW5ndWFnZTogIiQxIl0pXSldKWRubAorXSkjIExUX0xBTkcKKworCisjIF9MVF9MQU5HKExBTkdOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR10sCitbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdLAorICBbTFRfU1VQUE9SVEVEX1RBRyhbJDFdKWRubAorICBtNF9hcHBlbmQoW19MVF9UQUdTXSwgWyQxIF0pZG5sCisgIG00X2RlZmluZShbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10pZG5sCisgIF9MVF9MQU5HXyQxX0NPTkZJRygkMSldKWRubAorXSkjIF9MVF9MQU5HCisKKworIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HX0RFRkFVTFRfQ09ORklHXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorICBbTFRfTEFORyhDWFgpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19DWFhdLCBkZWZuKFtBQ19QUk9HX0NYWF0pW0xUX0xBTkcoQ1hYKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRjc3XSwKKyAgW0xUX0xBTkcoRjc3KV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRjc3XSwgZGVmbihbQUNfUFJPR19GNzddKVtMVF9MQU5HKEY3NyldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0ZDXSwKKyAgW0xUX0xBTkcoRkMpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GQ10sIGRlZm4oW0FDX1BST0dfRkNdKVtMVF9MQU5HKEZDKV0pXSkKKworZG5sIFRoZSBjYWxsIHRvIFtBXVtNX1BST0dfR0NKXSBpcyBxdW90ZWQgbGlrZSB0aGF0IHRvIHN0b3AgYWNsb2NhbAorZG5sIHB1bGxpbmcgdGhpbmdzIGluIG5lZWRsZXNzbHkuCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAorICBbTFRfTEFORyhHQ0opXSwKKyAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSwKKyAgICBbTFRfTEFORyhHQ0opXSwKKyAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfR0NKXSwKKyAgICAgIFtMVF9MQU5HKEdDSildLAorICAgICAgW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sCisJW200X2RlZmluZShbQUNfUFJPR19HQ0pdLCBkZWZuKFtBQ19QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sCisJW200X2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0xUX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtMVF9QUk9HX0dDSl0sIGRlZm4oW0xUX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKV0pXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19SQ10sCisgIFtMVF9MQU5HKFJDKV0sCisgIFttNF9kZWZpbmUoW0xUX1BST0dfUkNdLCBkZWZuKFtMVF9QUk9HX1JDXSlbTFRfTEFORyhSQyldKV0pCitdKSMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKworIyBPYnNvbGV0ZSBtYWNyb3M6CitBVV9ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbTFRfTEFORyhDKyspXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtMVF9MQU5HKEZvcnRyYW4gNzcpXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW0xUX0xBTkcoRm9ydHJhbildKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW0xUX0xBTkcoSmF2YSldKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW10pCisKKworIyBfTFRfVEFHX0NPTVBJTEVSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVEFHX0NPTVBJTEVSXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKworX0xUX0RFQ0woW0xUQ0NdLCBbQ0NdLCBbMV0sIFtBIEMgY29tcGlsZXJdKWRubAorX0xUX0RFQ0woW0xUQ0ZMQUdTXSwgW0NGTEFHU10sIFsxXSwgW0xUQ0MgY29tcGlsZXIgZmxhZ3NdKWRubAorX0xUX1RBR0RFQ0woW0NDXSwgW2NvbXBpbGVyXSwgWzFdLCBbQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlcl0pZG5sCitfTFRfVEFHREVDTChbd2l0aF9nY2NdLCBbR0NDXSwgWzBdLCBbSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/XSlkbmwKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworXSkjIF9MVF9UQUdfQ09NUElMRVIKKworCisjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGNvbXBpbGVyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgY29tcGlsZXIgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorCisKKyMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorXSkjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bl9vbmNlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sWworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBBQ19DSEVDS19UT09MKFtEU1lNVVRJTF0sIFtkc3ltdXRpbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW0xJUE9dLCBbbGlwb10sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTF0sIFtvdG9vbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTDY0XSwgW290b29sNjRdLCBbOl0pCisgICAgX0xUX0RFQ0woW10sIFtEU1lNVVRJTF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW05NRURJVF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtMSVBPXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0xdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0w2NF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNF0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnXSxbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZF0sCisgICAgICBbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmldKQorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZ10sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0XSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXNdLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgXSkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuW1swMTJdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IjsgdGhlbgorICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKyAgICBlbHNlCisgICAgICBfbHRfZHN5bXV0aWw9CisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQorCisKKyMgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2tzIGZvciBsaW5rZXIgYW5kIGNvbXBpbGVyIGZlYXR1cmVzIG9uIGRhcndpbgorbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKK1sKKyAgbTRfcmVxdWlyZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKQorICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZWNobworICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgbTRfaWYoWyQxXSwgW0NYWF0sCitbICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiICE9ICJ5ZXMiOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZHN5bXV0aWx9IgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgZmkKK10sW10pCisgIGVsc2UKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICBmaQorXSkKKworIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaW5rcyBhIG1pbmltYWwgcHJvZ3JhbSBhbmQgY2hlY2tzIHRoZSBleGVjdXRhYmxlCisjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyMgdGhpcyBpcyAvdXNyL2xpYjovbGliLCBidXQgd2hlbiB0aGUgTVBJIGNvbXBpbGVycyBhcmUgdXNlZAorIyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW11bmljYXRpb24gYW5kIE1QSSBsaWJzIGFyZSBpbmNsdWRlZCB0b28uCisjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisjIHRvIHRoZSBhaXggbGQgbWFudWFsLgorbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNLFsKK2x0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCS9eMC8geworCSAgICBzL14wICAqXCguKlwpJC9cMS8KKwkgICAgcAorCX0KKyAgICB9JworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorZmldLFtdKQoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKworCisjIF9MVF9TSEVMTF9JTklUKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfU0hFTExfSU5JVF0sCitbaWZkZWYoW0FDX0RJVkVSU0lPTl9OT1RJQ0VdLAorCSAgICAgW0FDX0RJVkVSVF9QVVNIKEFDX0RJVkVSU0lPTl9OT1RJQ0UpXSwKKwkgW0FDX0RJVkVSVF9QVVNIKE5PVElDRSldKQorJDEKK0FDX0RJVkVSVF9QT1AKK10pIyBfTFRfU0hFTExfSU5JVAorCisKKyMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoCisjIHdpbGwgZmluZCBhbiBlY2hvIGNvbW1hbmQgd2hpY2ggZG9lc24ndCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCittNF9kZWZ1bihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAorW19MVF9TSEVMTF9JTklUKFsKKyMgQ2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CisKK2Nhc2UgWCRsdF9FQ0hPIGluCitYKi0tZmFsbGJhY2stZWNobykKKyAgIyBSZW1vdmUgb25lIGxldmVsIG9mIHF1b3RhdGlvbiAod2hpY2ggd2FzIHJlcXVpcmVkIGZvciBNYWtlKS4KKyAgRUNITz1gZWNobyAiJGx0X0VDSE8iIHwgc2VkICdzLFxcXFxcWyRdXFxbJF0wLCdbJF0wJywnYAorICA7OworZXNhYworCitFQ0hPPSR7bHRfRUNITy1lY2hvfQoraWYgdGVzdCAiWFskXTEiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICBzaGlmdAorZWxpZiB0ZXN0ICJYWyRdMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKyAgOgorZWxpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCisgICMgWWlwcGVlLCAkRUNITyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCisgIGV4ZWMgJFNIRUxMICJbJF0wIiAtLW5vLXJlZXhlYyAkezErIlskXUAifQorZmkKKworaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxfTFRfRU9GCitbJF0qCitfTFRfRU9GCisgIGV4aXQgMAorZmkKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAteiAiJGx0X0VDSE8iOyB0aGVuCisgIGlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgICMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAorICAgIGZvciBjbWQgaW4gJ3NlZCA1MHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAycSAiWyRdMCInICdlY2hvIHRlc3QnOyBkbworICAgICAgIyBleHBlY3RlZCBzaXplczogbGVzcyB0aGFuIDJLYiwgMUtiLCA1MTIgYnl0ZXMsIDE2IGJ5dGVzLCAuLi4KKyAgICAgIGlmIHsgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYDsgfSAyPi9kZXYvbnVsbCAmJgorCSB7IHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbAorICAgICAgdGhlbgorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgIGZpCisKKyAgaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgIyBUaGUgU29sYXJpcywgQUlYLCBhbmQgRGlnaXRhbCBVbml4IGRlZmF1bHQgZWNobyBwcm9ncmFtcyB1bnF1b3RlCisgICAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZworICAgICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCisgICAgIworICAgICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KKworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBkaXIgaW4gJFBBVEggL3Vzci91Y2I7IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCisgICAgICAgICB0ZXN0ICJYYCgkZGlyL2VjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICAgIEVDSE89IiRkaXIvZWNobyIKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorCisgICAgaWYgdGVzdCAiWCRFQ0hPIiA9IFhlY2hvOyB0aGVuCisgICAgICAjIFdlIGRpZG4ndCBmaW5kIGEgYmV0dGVyIGVjaG8sIHNvIGxvb2sgZm9yIGFsdGVybmF0aXZlcy4KKyAgICAgIGlmIHRlc3QgIlhgeyBwcmludCAtciAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyBwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorICAgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCisgICAgICAgIEVDSE89J3ByaW50IC1yJworICAgICAgZWxpZiB7IHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQ7IH0gJiYKKwkgICB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCisgICAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgorICAgICAgICBPUklHSU5BTF9DT05GSUdfU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKyAgICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAorICAgICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKKyAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICBleGVjICRDT05GSUdfU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9CisgICAgICBlbHNlCisgICAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KKyAgICAgICAgRUNITz0ncHJpbnRmICVzXG4nCisgICAgICAgIGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgICMgQ29vbCwgcHJpbnRmIHdvcmtzCisJICA6CisgICAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKKwkgIGV4cG9ydCBDT05GSUdfU0hFTEwKKwkgIFNIRUxMPSIkQ09ORklHX1NIRUxMIgorCSAgZXhwb3J0IFNIRUxMCisJICBFQ0hPPSIkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKwkgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgIEVDSE89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICAgIGVsc2UKKwkgICMgbWF5YmUgd2l0aCBhIHNtYWxsZXIgc3RyaW5nLi4uCisJICBwcmV2PToKKworCSAgZm9yIGNtZCBpbiAnZWNobyB0ZXN0JyAnc2VkIDJxICJbJF0wIicgJ3NlZCAxMHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgNTBxICJbJF0wIic7IGRvCisJICAgIGlmIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYYGV2YWwgJGNtZGAiOyB9IDI+L2Rldi9udWxsCisJICAgIHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBwcmV2PSIkY21kIgorCSAgZG9uZQorCisJICBpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIlskXTAiJzsgdGhlbgorCSAgICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAorCSAgICBleHBvcnQgZWNob190ZXN0X3N0cmluZworCSAgICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiWyRdMCIgJHsxKyJbJF1AIn0KKwkgIGVsc2UKKwkgICAgIyBPb3BzLiAgV2UgbG9zdCBjb21wbGV0ZWx5LCBzbyBqdXN0IHN0aWNrIHdpdGggZWNoby4KKwkgICAgRUNITz1lY2hvCisJICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorZmkKKworIyBDb3B5IGVjaG8gYW5kIHF1b3RlIHRoZSBjb3B5IHN1aXRhYmx5IGZvciBwYXNzaW5nIHRvIGxpYnRvb2wgZnJvbQorIyB0aGUgTWFrZWZpbGUsIGluc3RlYWQgb2YgcXVvdGluZyB0aGUgb3JpZ2luYWwsIHdoaWNoIGlzIHVzZWQgbGF0ZXIuCitsdF9FQ0hPPSRFQ0hPCitpZiB0ZXN0ICJYJGx0X0VDSE8iID0gIlgkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorICAgbHRfRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXFskXTAgLS1mYWxsYmFjay1lY2hvIgorZmkKKworQUNfU1VCU1QobHRfRUNITykKK10pCitfTFRfREVDTChbXSwgW1NIRUxMXSwgWzFdLCBbU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0c10pCitfTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sCisgICAgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlc10pCitdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKworCisjIF9MVF9FTkFCTEVfTE9DSworIyAtLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAorW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCisgICAgW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9IjMyIgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT0iNjQiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK3MzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKKyAgICBbQUNfTEFOR19QVVNIKEMpCisgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCisgICAgIEFDX0xBTkdfUE9QXSkKKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKK3NwYXJjKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCitdKSMgX0xUX0VOQUJMRV9MT0NLCisKKworIyBfTFRfQ01EX09MRF9BUkNISVZFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX09MRF9BUkNISVZFXSwKK1tBQ19DSEVDS19UT09MKEFSLCBhciwgZmFsc2UpCit0ZXN0IC16ICIkQVIiICYmIEFSPWFyCit0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCitfTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdKQorCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorX0xUX0RFQ0woW10sIFtTVFJJUF0sIFsxXSwgW0Egc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtXSkKKworQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CitfTFRfREVDTChbXSwgW1JBTkxJQl0sIFsxXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCitfTFRfREVDTChbXSwgW29sZF9wb3N0aW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKK10pIyBfTFRfQ01EX09MRF9BUkNISVZFCisKKworIyBfTFRfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIwkJW09VVFBVVC1GSUxFXSwgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIG00X2lmKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZWxzZQorICAgIG00X2lmKFskNl0sICwgOiwgWyQ2XSkKK2ZpCitdKSMgX0xUX0NPTVBJTEVSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW19MVF9DT01QSUxFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtdKQorCisKKyMgX0xUX0xJTktFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0xJTktFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICQzIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICRFQ0hPICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAkMj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ0XSwgLCA6LCBbJDRdKQorZWxzZQorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2ZpCitdKSMgX0xUX0xJTktFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbX0xUX0xJTktFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbXSkKKworCisjIExUX0NNRF9NQVhfTEVOCisjLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfQ01EX01BWF9MRU5dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworQUNfTVNHX0NIRUNLSU5HKFt0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50c10pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19tYXhfY21kX2xlbl0sIFtkbmwKKyAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qW1sJIF1dLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYCRTSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWFgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgIGRvCisgICAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorICAgICAgdGVzdHN0cmluZz0KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQoraWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCitlbHNlCisgIEFDX01TR19SRVNVTFQobm9uZSkKK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCitfTFRfREVDTChbXSwgW21heF9jbWRfbGVuXSwgWzBdLAorICAgIFtXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/XSkKK10pIyBMVF9DTURfTUFYX0xFTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW0xUX0NNRF9NQVhfTEVOXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbXSkKKworCisjIF9MVF9IRUFERVJfRExGQ04KKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9IRUFERVJfRExGQ05dLAorW0FDX0NIRUNLX0hFQURFUlMoW2RsZmNuLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSlkbmwKK10pIyBfTFRfSEVBREVSX0RMRkNOCisKKworIyBfTFRfVFJZX0RMT1BFTl9TRUxGIChBQ1RJT04tSUYtVFJVRSwgQUNUSU9OLUlGLVRSVUUtVy1VU0NPUkUsCisjICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UUllfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBbJDRdCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK1sjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKK3ZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfV0KK19MVF9FT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgICQzCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorXSkjIF9MVF9UUllfRExPUEVOX1NFTEYKKworCisjIExUX1NZU19ETE9QRU5fU0VMRgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9TWVNfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIF0pCisgICAgOzsKKworICAqKQorICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKKwkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCisgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAorCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCisJW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCisJICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCisJICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCisJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKKwkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKKwkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAorCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQorCSAgICAgIF0pCisJICAgIF0pCisJICBdKQorCV0pCisgICAgICBdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8sICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MpCisgICAgICBdKQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtkbG9wZW5fc3VwcG9ydF0sIFtlbmFibGVfZGxvcGVuXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl0sIFtlbmFibGVfZGxvcGVuX3NlbGZdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmX3N0YXRpY10sIFtlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK10pIyBMVF9TWVNfRExPUEVOX1NFTEYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW0xUX1NZU19ETE9QRU5fU0VMRl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9DX08oW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIuCisjIFRoaXMgbWFjcm8gZG9lcyBub3QgaGFyZCBjb2RlIHRoZSBjb21waWxlciBsaWtlIEFDX1BST0dfQ0NfQ19PLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9DX09dLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorXSkKK19MVF9UQUdERUNMKFtjb21waWxlcl9jX29dLCBbbHRfY3ZfcHJvZ19jb21waWxlcl9jX29dLCBbMV0sCisJW0RvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz9dKQorXSkjIF9MVF9DT01QSUxFUl9DX08KKworCisjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9GSUxFX0xPQ0tTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRU5BQkxFX0xPQ0tdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09NUElMRVJfQ19PKFskMV0pCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCitfTFRfREVDTChbXSwgW25lZWRfbG9ja3NdLCBbMV0sIFtNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj9dKQorXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCisKKworIyBfTFRfQ0hFQ0tfT0JKRElSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ0hFQ0tfT0JKRElSXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAorW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQorb2JqZGlyPSRsdF9jdl9vYmpkaXIKK19MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAorICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCittNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKExUX09CSkRJUiwgIiRsdF9jdl9vYmpkaXIvIiwKKyAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKK10pIyBfTFRfQ0hFQ0tfT0JKRElSCisKKworIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXNdKQorX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwKKyAgIHRlc3QgLW4gIiRfTFRfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8CisgICB0ZXN0ICJYJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAorZmkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKKworaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiID0geWVzOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCisgICAgW0hvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlXSkKK10pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKKworCisjIF9MVF9DTURfU1RSSVBMSUIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfU1RSSVBMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbXSwgW29sZF9zdHJpcGxpYl0sIFsxXSwgW0NvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N0cmlwbGliXSwgWzFdKQorXSkjIF9MVF9DTURfU1RSSVBMSUIKKworCisjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBPUlRNRSBGaWxsIGluIHlvdXIgbGQuc28gY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX1NZU19EWU5BTUlDX0xJTktFUl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCittNF9pZihbJDFdLAorCVtdLCBbCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OworICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgaWYgJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgIGVsc2UKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgIGZpCisgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKyAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKKyAgICBlbHNlCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyB8IGF3ayAnCitCRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7CisgIGx0X2Zvbz0iIjsKKyAgbHRfY291bnQ9MDsKKyAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKKyAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CisgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgeworICAgICAgICBsdF9jb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKKyAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsdF9jb3VudC0tOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQorICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KK30nYAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICRsdF9zZWFyY2hfcGF0aF9zcGVjYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaV0pCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgOzsKKworYWl4W1s0LTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRFQ0hPICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgJEdSRVAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQorICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCisgICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAorICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCisgICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisKKyAgKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworbTRfaWYoWyQxXSwgW10sWworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QxKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbWzEyM11dKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIqKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCisgIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eAorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICisgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICBzYXZlX2xpYmRpcj0kbGliZGlyCisgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKVwiOyBcCisgICAgICAgTERGTEFHUz1cIlwkTERGTEFHUyAkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSlcIiIKKyAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorICAgIFtBU19JRihbICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbF0sCisgICAgICAgW3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXNdKV0pCisgIExERkxBR1M9JHNhdmVfTERGTEFHUworICBsaWJkaXI9JHNhdmVfbGliZGlyCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBBZGQgQUJJLXNwZWNpZmljIGRpcmVjdG9yaWVzIHRvIHRoZSBzeXN0ZW0gbGlicmFyeSBwYXRoLgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYjY0IC91c3IvbGliNjQgL2xpYiAvdXNyL2xpYiIKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFxbJF0yKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcWyRdMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRkeW5hbWljX2xpbmtlcl0pCit0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCitfTFRfREVDTChbXSwgW3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rXSwgWzFdLAorICAgIFtWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyAgICByZXN0b3JlZCBhdCBsaW5rIHRpbWVdKQorX0xUX0RFQ0woW10sIFtuZWVkX2xpYl9wcmVmaXhdLCBbMF0sCisgICAgW0RvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz9dKQorX0xUX0RFQ0woW10sIFtuZWVkX3ZlcnNpb25dLCBbMF0sIFtEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzP10pCitfTFRfREVDTChbXSwgW3ZlcnNpb25fdHlwZV0sIFswXSwgW0xpYnJhcnkgdmVyc2lvbmluZyB0eXBlXSkKK19MVF9ERUNMKFtdLCBbcnVucGF0aF92YXJdLCBbMF0sICBbU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX3Zhcl0sIFswXSxbU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sIFswXSwKKyAgICBbSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoP10pCitfTFRfREVDTChbXSwgW2xpYm5hbWVfc3BlY10sIFsxXSwgW0Zvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4XSkKK19MVF9ERUNMKFtdLCBbbGlicmFyeV9uYW1lc19zcGVjXSwgWzFdLAorICAgIFtbTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyAgICBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FXV0pCitfTFRfREVDTChbXSwgW3NvbmFtZV9zcGVjXSwgWzFdLAorICAgIFtbVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWVdXSkKK19MVF9ERUNMKFtdLCBbcG9zdGluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtwb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5XSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2V2YWxdLCBbMV0sCisgICAgW1tBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyAgICBub3Qgc2hvd25dXSkKK19MVF9ERUNMKFtdLCBbaGFyZGNvZGVfaW50b19saWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorXSkjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIKKworCisjIF9MVF9QQVRIX1RPT0xfUFJFRklYKFRPT0wpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQorQUNfREVGVU4oW19MVF9QQVRIX1RPT0xfUFJFRklYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9NQUdJQ19DTUQsCitbY2FzZSAkTUFHSUNfQ01EIGluCitbW1xcLypdIHwgID86W1xcL10qXSkKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCitkbmwgUE9TSVguMiB3b3JkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIG91dHB1dCBvZiB3b3JkIGV4cGFuc2lvbnMsCitkbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgorICBhY19kdW1teT0ibTRfaWYoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyQxOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjXSkKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK19MVF9ERUNMKFtdLCBbTUFHSUNfQ01EXSwgWzBdLAorCSBbVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIl0pZG5sCitdKSMgX0xUX1BBVEhfVE9PTF9QUkVGSVgKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW19MVF9QQVRIX1RPT0xfUFJFRklYXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTUFHSUMKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKK200X2RlZnVuKFtfTFRfUEFUSF9NQUdJQ10sCitbX0xUX1BBVEhfVE9PTF9QUkVGSVgoJHthY190b29sX3ByZWZpeH1maWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQoraWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgX0xUX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorXSkjIF9MVF9QQVRIX01BR0lDCisKKworIyBMVF9QQVRIX0xECisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgorQUNfREVGVU4oW0xUX1BBVEhfTERdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCisKK0FDX0FSR19XSVRIKFtnbnUtbGRdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCisJW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCisgICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCisgICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKK2Vsc2UKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCitmaQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTEQsCitbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmldKQorTEQ9IiRsdF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRMRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCit0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorX0xUX1BBVEhfTERfR05VCitBQ19TVUJTVChbTERdKQorCitfTFRfVEFHREVDTChbXSwgW0xEXSwgWzFdLCBbVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllc10pCitdKSMgTFRfUEFUSF9MRAorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorQVVfQUxJQVMoW0FDX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTERdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MRF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTERfR05VCisjLSAtLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9QQVRIX0xEX0dOVV0sCitbQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCitbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjXSkKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorXSkjIF9MVF9QQVRIX0xEX0dOVQorCisKKyMgX0xUX0NNRF9SRUxPQUQKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCisjICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KK200X2RlZnVuKFtfTFRfQ01EX1JFTE9BRF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXNdLAorICBsdF9jdl9sZF9yZWxvYWRfZmxhZywKKyAgW2x0X2N2X2xkX3JlbG9hZF9mbGFnPSctciddKQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworX0xUX0RFQ0woW10sIFtyZWxvYWRfZmxhZ10sIFsxXSwgW0hvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXNdKWRubAorX0xUX0RFQ0woW10sIFtyZWxvYWRfY21kc10sIFsyXSlkbmwKK10pIyBfTFRfQ01EX1JFTE9BRAorCisKKyMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBjaGVjayBmb3IgbGlicmFyeSBkZXBlbmRlbmNpZXMKKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCitbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4W1s0LTldXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpW1s0NV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbWzMtOV1dODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gUEEtUklTQyBbMC05XS5bMC05XSddCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXS5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4W1szLTldXSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSkKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVtbMC05XV1bWzAtOV1dKiBWZXJzaW9uIFtbMC05XV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworXSkKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworX0xUX0RFQ0woW10sIFtkZXBsaWJzX2NoZWNrX21ldGhvZF0sIFsxXSwKKyAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2NtZF0sIFsxXSwKKyAgICBbQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyJdKQorXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKworCisjIExUX1BBVEhfTk0KKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byBhIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKV0sIGx0X2N2X3BhdGhfTk0sCitbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgbHRfY3ZfcGF0aF9OTT0iJE5NIgorZWxzZQorICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgorCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAorCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhaworCSAgOzsKKwkqKQorCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJICAqL2Rldi9udWxsKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKwkgICAgYnJlYWsKKwkgICAgOzsKKwkgICopCisJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CisJICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICBkb25lCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorZmldKQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgQUNfQ0hFQ0tfVE9PTFMoRFVNUEJJTiwgWyJkdW1wYmluIC1zeW1ib2xzIiAibGluayAtZHVtcCAtc3ltYm9scyJdLCA6KQorICBBQ19TVUJTVChbRFVNUEJJTl0pCisgIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KKyAgICBOTT0iJERVTVBCSU4iCisgIGZpCitmaQordGVzdCAteiAiJE5NIiAmJiBOTT1ubQorQUNfU1VCU1QoW05NXSkKK19MVF9ERUNMKFtdLCBbTk1dLCBbMV0sIFtBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlcl0pZG5sCisKK0FDX0NBQ0hFX0NIRUNLKFt0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlXSwgW2x0X2N2X25tX2ludGVyZmFjZV0sCisgIFtsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogb3V0cHV0XCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIGNhdCBjb25mdGVzdC5vdXQgPiZBU19NRVNTQUdFX0xPR19GRAorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqXSkKK10pIyBMVF9QQVRIX05NCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitBVV9BTElBUyhbQUNfUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX05NXSwgW10pCisKKworIyBMVF9MSUJfTQorIyAtLS0tLS0tLQorIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CitBQ19ERUZVTihbTFRfTElCX01dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0xJQk09CitjYXNlICRob3N0IGluCisqLSotYmVvcyogfCAqLSotY3lnd2luKiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQorICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKKyAgOzsKKyotbmNyLXN5c3Y0LjMqKQorICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKKyAgOzsKKyopCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCisgIDs7Citlc2FjCitBQ19TVUJTVChbTElCTV0pCitdKSMgTFRfTElCX00KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19DSEVDS19MSUJNXSwgW0xUX0xJQl9NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfQ0hFQ0tfTElCTV0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX05PX1JUVEkoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX05PX1JUVEldLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKworICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCisgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCisgICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKK2ZpCitfTFRfVEFHREVDTChbbm9fYnVpbHRpbl9mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zXSkKK10pIyBfTFRfQ09NUElMRVJfTk9fUlRUSQorCisKKyMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCitbCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tbQkNERUdSU1RdXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tbQkNEVF1dJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJworICA7OworaHB1eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbW0JEUlRdXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tbQUJEVF1dJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tbREZOU1RVXV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Citlc2FjCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCisgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgWyciXAorIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4XSIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWwkgXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWwkgXV1bWwkgXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX0xUX0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK2NvbnN0IHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X3NhdmVfTElCUz0iJExJQlMiCisJICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCisJICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChvaykKK2ZpCisKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKyAgICBbVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lc10pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbl0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKK10pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworCisKKyMgX0xUX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9QSUNdLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisKK0FDX01TR19DSEVDS0lORyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdKQorbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgICA7OworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbWzQtOV1dKikKKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworCWZpCisJOzsKKyAgICAgIGNob3J1cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwljeGNoNjgqKQorCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSkKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgOzsKKwkgIGVjcGMqICkKKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgaWNwYyogKQorCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisJICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyogfCBwZ2NwcCopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICB4bGMqIHwgeGxDKikKKwkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGx5bnhvcyopCisJOzsKKyAgICAgIG04OGsqKQorCTs7CisgICAgICBtdnMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBjeHgqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1XIGMsZXhwb3J0YWxsJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIG5ldGJzZCopCisJOzsKKyAgICAgICpxbngqIHwgKm50byopCisgICAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgICA7OworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIDs7CisJICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBwc29zKikKKwk7OworICAgICAgc29sYXJpcyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgICA7OworCSAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN1bm9zNCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdGFuZGVtKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdnh3b3JrcyopCisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworCTs7CisgICAgZXNhYworICBmaQorXSwKK1sKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy0tc2hhcmVkJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLS1zdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSBvbiBQUEMKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCTs7CisgICAgICAqKQorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICA7OworCSpTdW5cIEYqKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgcmRvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCisJW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCisgICAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKV0sCisgICAgWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAorICAgIFtjYXNlICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OworICAgICBlc2FjXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKK2ZpCitfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisJW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgorX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKKyAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcywgJDEpLAorICAkbHRfdG1wX3N0YXRpY19mbGFnLAorICBbXSwKKyAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT1dKQorX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQorXSkjIF9MVF9DT01QSUxFUl9QSUMKKworCisjIF9MVF9MSU5LRVJfU0hMSUJTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKK1tBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKK200X2lmKFskMV0sIFtDWFhdLCBbCisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4W1s0LTldXSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZmkKKyAgICA7OworICBwdzMyKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCisgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87L14uKltbIF1dX19ubV9fL3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICA7OworICAqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIDs7CisgIGVzYWMKKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCitdLCBbCisgIHJ1bnBhdGhfdmFyPQorICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBfTFRfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGVzYWMKKworICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCisgICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgorICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgorICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKKyAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4W1szLTldXSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjkuMSwgaXMgcmVwb3J0ZWQKKyoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91CisqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBtb2RpZnkgeW91ciBQQVRICisqKiogc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZWxzZQorCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWZpfgorCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgOzsKKworICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0KKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwkgIDs7CisJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisJeGxbW2NDXV0qKQkJCSMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCWVzYWMKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xW1swLTVdXS4qKQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgd2xhcmM9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXhbWzQtOV1dKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICBmaQorCWZpCisgICAgICBmaQorCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiAkRUNITyAiWCR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iIHwgJFhzZWQ7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwllbHNlCisJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAjIGVtcHR5IGV4ZWN1dGFibGUuCisJIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisJIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCisJICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbWzQ1XV0qKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKyAgICAgIGxpYmV4dD1saWIKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYCRFQ0hPICJYJGRlcGxpYnMiIHwgJFhzZWQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKyAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworICAgICAgX0xUX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSk9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgZnJlZWJzZDEqKQorICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPScrYiAkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCisJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKwkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKyAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorICAgICAgICBBQ19MSU5LX0lGRUxTRShpbnQgZm9vKHZvaWQpIHt9LAorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgICApCisgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwllbHNlCisJICBjYXNlICRob3N0X29zIGluCisJICAgb3BlbmJzZFtbMDFdXS4qIHwgb3BlbmJzZDIuW1swLTddXSB8IG9wZW5ic2QyLltbMC03XV0uKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICAgOzsKKwkgICAqKQorCSAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgICA7OworCSAgZXNhYworCWZpCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPScke3dsfScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCitdKQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQordGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCitfTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCisKK19MVF9ERUNMKFtdLCBbbGliZXh0XSwgWzBdLCBbT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpXSlkbmwKK19MVF9ERUNMKFtdLCBbc2hyZXh0X2NtZHNdLCBbMV0sIFtTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4dHJhY3RfZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0pCisgICAgICAkUk0gY29uZnRlc3QqCisgICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAgc29uYW1lPWNvbmZ0ZXN0CisgICAgICAgIGxpYj1jb25mdGVzdAorICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgICAgZGVwbGlicz0KKyAgICAgICAgd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCisJcGljX2ZsYWc9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQorICAgICAgICBjb21waWxlcl9mbGFncz0tdgorICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKKyAgICAgICAgdmVyc3RyaW5nPQorICAgICAgICBvdXRwdXRfb2JqZGlyPS4KKyAgICAgICAgbGlibmFtZT1jb25mdGVzdAorICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKKyAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorICAgICAgICBpZiBBQ19UUllfRVZBTChfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQorICAgICAgICB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgZWxzZQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworICAgICAgICBmaQorICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICBmaQorICAgICAgJFJNIGNvbmZ0ZXN0KgorICAgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKV0pCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworX0xUX1RBR0RFQ0woW2J1aWxkX2xpYnRvb2xfbmVlZF9sY10sIFthcmNoaXZlX2NtZHNfbmVlZF9sY10sIFswXSwKKyAgICBbV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllc10pCitfTFRfVEFHREVDTChbYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwKKyAgICBbZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc10sIFswXSwKKyAgICBbV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpY10pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVuc10pCitfTFRfVEFHREVDTChbXSwgW3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9uZWVkc19vYmplY3RdLCBbMV0sCisgICAgW1doZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5XSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2NtZHNdLCBbMl0sIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2V4cHN5bV9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworICAgIGEgc2hhcmVkIGFyY2hpdmUuXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2V4cHN5bV9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFt3aXRoX2dudV9sZF0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90XSkKK19MVF9UQUdERUNMKFtdLCBbYWxsb3dfdW5kZWZpbmVkX2ZsYWddLCBbMV0sCisgICAgW0ZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0XSkKK19MVF9UQUdERUNMKFtdLCBbbm9fdW5kZWZpbmVkX2ZsYWddLCBbMV0sCisgICAgW0ZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0ZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorICAgIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRdLCBbMV0sCisgICAgW1tJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkKKyAgICBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF1dKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0XSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisgICAgbGlicmFyeSBpcyByZWxvY2F0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9taW51c19MXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9zaGxpYnBhdGhfdmFyXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hdXRvbWF0aWNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisgICAgYWdhaW5zdCBpdF0pCitfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgW1NldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisgICAgdG8gcnVudGltZSBwYXRoIGxpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtsaW5rX2FsbF9kZXBsaWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW10sIFtmaXhfc3JjZmlsZV9wYXRoXSwgWzFdLAorICAgIFtGaXggdGhlIHNoZWxsIHZhcmlhYmxlICRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXJdKQorX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZF0pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9zeW1ib2xzX2NtZHNdLCBbMl0sCisgICAgW1RoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtleGNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtpbmNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCitfTFRfVEFHREVDTChbXSwgW3ByZWxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKKyAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzXSkKK2RubCBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorZG5sIF9MVF9UQUdERUNMKFtdLCBbdGhyZWFkX3NhZmVfZmxhZ19zcGVjXSwgWzFdLAorZG5sICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZCBzYWZlIG9iamVjdHNdKQorXSkjIF9MVF9MSU5LRVJfU0hMSUJTCisKKworIyBfTFRfTEFOR19DX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDIGNvbXBpbGVyIGFyZSBzdWl0YWJseQorIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19DX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbHRfc2F2ZV9DQz0iJENDIgorQUNfTEFOR19QVVNIKEMpCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworX0xUX1RBR19DT01QSUxFUgorIyBTYXZlIHRoZSBkZWZhdWx0IGNvbXBpbGVyLCBzaW5jZSBpdCBnZXRzIG92ZXJ3cml0dGVuIHdoZW4gdGhlIG90aGVyCisjIHRhZ3MgYXJlIGJlaW5nIHRlc3RlZCwgYW5kIF9MVF9UQUdWQVIoY29tcGlsZXIsIFtdKSBpcyBhIE5PUC4KK2NvbXBpbGVyX0RFRkFVTFQ9JENDCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKyAgTFRfU1lTX0RMT1BFTl9TRUxGCisgIF9MVF9DTURfU1RSSVBMSUIKKworICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgYWl4W1s0LTldXSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCitBQ19MQU5HX1BPUAorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX0NfQ09ORklHCisKKworIyBfTFRfUFJPR19DWFgKKyMgLS0tLS0tLS0tLS0tCisjIFNpbmNlIEFDX1BST0dfQ1hYIGlzIGJyb2tlbiwgaW4gdGhhdCBpdCByZXR1cm5zIGcrKyBpZiB0aGVyZSBpcyBubyBjKysKKyMgY29tcGlsZXIsIHdlIGhhdmUgb3VyIG93biB2ZXJzaW9uIGhlcmUuCittNF9kZWZ1bihbX0xUX1BST0dfQ1hYXSwKK1sKK3B1c2hkZWYoW0FDX01TR19FUlJPUl0sIFtfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXNdKQorQUNfUFJPR19DWFgKK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisgIEFDX1BST0dfQ1hYQ1BQCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKK3BvcGRlZihbQUNfTVNHX0VSUk9SXSkKK10pIyBfTFRfUFJPR19DWFgKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtfTFRfUFJPR19DWFhdLCBbXSkKKworCisjIF9MVF9MQU5HX0NYWF9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDKysgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NYWF9DT05GSUddLAorW0FDX1JFUVVJUkUoW19MVF9QUk9HX0NYWF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKworQUNfTEFOR19QVVNIKEMrKykKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9JENDCisgIGx0X3NhdmVfTEQ9JExECisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgR0NDPSRHWFgKKyAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKyAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorICBmaQorICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorICBmaQorICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICBDQz0ke0NYWC0iYysrIn0KKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKyAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisgICAgZmkKKworICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisgICAgICBMVF9QQVRIX0xECisKKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKyAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQorICAgICAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgICAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8CisJICAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICAgIHdsYXJjPQorCisgICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCisgICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCisgICAgICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCisgICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgorICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgICAgICBmaQorCisgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisKKyAgICBlbHNlCisgICAgICBHWFg9bm8KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICB3bGFyYz0KKyAgICBmaQorCisgICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgICAgICBjYXNlICRsZF9mbGFnIGluCisJICAgICAgKi1icnRsKikKKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgICBicmVhaworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisKKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgICAgZmkKKworICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwkgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisgICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKyAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiAkRUNITyAiWCR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iIHwgJFhzZWQ7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorICAgICAgICAgIGVsc2UKKwkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkCisJICAgICMgbGlicmFyaWVzLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICAgIGJlb3MqKQorCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIGNob3J1cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgKikKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCisgICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorICAgICAgICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICBlbHNlCisJICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGZpfgorICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgICAgZWxzZQorICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorCTs7CisKKyAgICAgIGRndXgqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGVjKysqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZFtbMTJdXSopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgZ251KikKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGFDQyopCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgaHBwYSo2NCopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbWzMtOV1dKikKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTR0kgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKwkgIGljcGMqIHwgZWNwYyogKQorCSAgICAjIEludGVsIEMrKworCSAgICB3aXRoX2dudV9sZD15ZXMKKwkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKKwkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKwkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCisJICAgICAgKiJWZXJzaW9uIDcuIiopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCisJICAgICAgICB0bXBfaWR5bj0KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCQllc2FjCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIDs7CisgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCisgICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBjYXNlIGAkQ0MgLVZgIGluCisJICAgICpwZ0NDXCBbWzEtNV1dKiB8ICpwZ2NwcFwgW1sxLTVdXSopCisJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYH4KKwkJJFJBTkxJQiAkb2xkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgKikgIyBWZXJzaW9uIDYgd2lsbCB1c2Ugd2VhayBzeW1ib2xzCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YCRFQ0hPICJYJHRlbXBsaXN0IiB8ICRYc2VkIC1lICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisJICB4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQllY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAgIGZpCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCisJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgorCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKwkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKworCSAgICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBseW54b3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbTg4ayopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbXZzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBjeHgqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCSAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbmV0YnNkKikKKyAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJworCSAgd2xhcmM9CisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJZmkKKwkjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworCTs7CisKKyAgICAgICpudG8qIHwgKnFueCopCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisJOzsKKworICAgICAgb3BlbmJzZDIqKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG9wZW5ic2QqKQorCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisJICBmaQorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZWNobworCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICAgICopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgZXNhYworCSAgICA7OworICAgICAgICAgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgY3h4KikKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJCTs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKwkgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgorCSAgICAgICAgICAkUk0gJGxpYi5leHAnCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJCTs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YCRFQ0hPICJYJHRlbXBsaXN0IiB8ICRYc2VkIC1lICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgb3NmMyopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICAgICopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgZXNhYworCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBwc29zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgc3Vub3M0KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBzb2xhcmlzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsJDEpPXllcworCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJICAgICAgKikKKwkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KKwkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCisJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCSAgICAgIGVsc2UKKwkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKwkgICAgICAgICMgcGxhdGZvcm0uCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAiXC1MIicKKwkgICAgICBmaQorCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJHdsJGxpYmRpcicKKwkgICAgICBjYXNlICRob3N0X29zIGluCisJCXNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJCSopCisJCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgQ0MqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorCSMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisJIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKwkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKwkjIGFzIC16IGRlZnMuCisJX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKwlydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJICAqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJZXNhYworICAgICAgOzsKKworICAgICAgdGFuZGVtKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHZ4d29ya3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgIGVzYWMKKworICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKKyAgICB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkR1hYIgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBDQz0kbHRfc2F2ZV9DQworICBMRENYWD0kTEQKKyAgTEQ9JGx0X3NhdmVfTEQKKyAgR0NDPSRsdF9zYXZlX0dDQworICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorICBsdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECisgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2ZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19DWFhfQ09ORklHCisKKworIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCisjIGNvbXBpbGVyIG91dHB1dCB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK200X2RlZnVuKFtfTFRfU1lTX0hJRERFTl9MSUJERVBTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwcmVkZXBzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQorCitkbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKK2RubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCitkbmwgbm90IGEgbGlicmFyeS4gIEl0J3MgcG9zc2libGUgd2Ugc2hvdWxkIGxldCBlYWNoCitkbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAorZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCittNF9pZihbJDFdLCBbXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitpbnQgYTsKK3ZvaWQgZm9vICh2b2lkKSB7IGEgPSAwOyB9CitfTFRfRU9GCitdLCBbJDFdLCBbQ1hYXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCitdLCBbJDFdLCBbRjc3XSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlcio0IGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtGQ10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0dDSl0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcHVibGljIGNsYXNzIGZvbyB7CisgIHByaXZhdGUgaW50IGE7CisgIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgeworICAgIGEgPSAwOworICB9Cit9OworX0xUX0VPRgorXSkKK2RubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKK2RubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCitpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKworICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCisgICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgorICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisKKyAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworICAgIGNhc2UgJHAgaW4KKworICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKyAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiB8fAorICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisJIHByZXY9JHAKKwkgY29udGludWUKKyAgICAgICBlbHNlCisJIHByZXY9CisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGNhc2UgJHAgaW4KKwkgLUwqIHwgLVIqKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCisJICAgZWxzZQorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKKwkgICBmaQorCSAgIDs7CisJICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCisJICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgorCSBlc2FjCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtwcmV2fSR7cH0iCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqLiRvYmpleHQpCisgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCisgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisJIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCisKKyAgICBlc2FjCisgIGRvbmUKKworICAjIENsZWFuIHVwLgorICBybSAtZiBhLm91dCBhLmV4ZQorZWxzZQorICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgJDEgdGVzdCBwcm9ncmFtIgorZmkKKworJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorCisjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorbTRfaWYoWyQxXSwgW0NYWF0sCitbY2FzZSAkaG9zdF9vcyBpbgoraW50ZXJpeFtbMy05XV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPQorICA7OworCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7CisKK3NvbGFyaXMqKQorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBDQyopCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCisgICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAorICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7Citlc2FjCitdKQorCitjYXNlICIgJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCisqIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OworZXNhYworIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9CitpZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgorIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc10sIFsxXSwKKyAgICBbVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwX29iamVjdHNdLCBbMV0sCisgICAgW0RlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworICAgIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcF9vYmplY3RzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoXSwgWzFdLAorICAgIFtUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworICAgIGEgc2hhcmVkIGxpYnJhcnldKQorXSkjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMKKworCisjIF9MVF9QUk9HX0Y3NworIyAtLS0tLS0tLS0tLS0KKyMgU2luY2UgQUNfUFJPR19GNzcgaXMgYnJva2VuLCBpbiB0aGF0IGl0IHJldHVybnMgdGhlIGVtcHR5IHN0cmluZworIyBpZiB0aGVyZSBpcyBubyBmb3J0cmFuIGNvbXBpbGVyLCB3ZSBoYXZlIG91ciBvd24gdmVyc2lvbiBoZXJlLgorbTRfZGVmdW4oW19MVF9QUk9HX0Y3N10sCitbCitwdXNoZGVmKFtBQ19NU0dfRVJST1JdLCBbX2x0X2Rpc2FibGVfRjc3PXllc10pCitBQ19QUk9HX0Y3NworaWYgdGVzdCAteiAiJEY3NyIgfHwgdGVzdCAiWCRGNzciID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRjc3PXllcworZmkKK3BvcGRlZihbQUNfTVNHX0VSUk9SXSkKK10pIyBfTFRfUFJPR19GNzcKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtfTFRfUFJPR19GNzddLCBbXSkKKworCisjIF9MVF9MQU5HX0Y3N19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIDc3IGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GNzdfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtfTFRfUFJPR19GNzddKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWYKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEY3NyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBDQz0ke0Y3Ny0iZjc3In0KKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorICBHQ0M9JEc3NworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEc3NyIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9IiRsdF9zYXZlX0NDIgorZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GNzdfQ09ORklHCisKKworIyBfTFRfUFJPR19GQworIyAtLS0tLS0tLS0tLQorIyBTaW5jZSBBQ19QUk9HX0ZDIGlzIGJyb2tlbiwgaW4gdGhhdCBpdCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcKKyMgaWYgdGhlcmUgaXMgbm8gZm9ydHJhbiBjb21waWxlciwgd2UgaGF2ZSBvdXIgb3duIHZlcnNpb24gaGVyZS4KK200X2RlZnVuKFtfTFRfUFJPR19GQ10sCitbCitwdXNoZGVmKFtBQ19NU0dfRVJST1JdLCBbX2x0X2Rpc2FibGVfRkM9eWVzXSkKK0FDX1BST0dfRkMKK2lmIHRlc3QgLXogIiRGQyIgfHwgdGVzdCAiWCRGQyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GQz15ZXMKK2ZpCitwb3BkZWYoW0FDX01TR19FUlJPUl0pCitdKSMgX0xUX1BST0dfRkMKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtfTFRfUFJPR19GQ10sIFtdKQorCisKKyMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAorW0FDX1JFUVVJUkUoW19MVF9QUk9HX0ZDXSlkbmwKK0FDX0xBTkdfUFVTSChGb3J0cmFuKQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgQ0M9JHtGQy0iZjk1In0KKyAgY29tcGlsZXI9JENDCisgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRhY19jdl9mY19jb21waWxlcl9nbnUiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9IiRsdF9zYXZlX0NDIgorZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0ZDX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR0NKX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEphdmEgQ29tcGlsZXIgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dDSl9DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR0NKXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCithY19leHQ9amF2YQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW1tdXSBhcmd2KSB7fTsgfScKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9eWVzCitDQz0ke0dDSi0iZ2NqIn0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorCitBQ19MQU5HX1JFU1RPUkUKKworR0NDPSRsdF9zYXZlX0dDQworQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX0dDSl9DT05GSUcKKworCisjIF9MVF9MQU5HX1JDX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19SQ19DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfUkNdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9cmMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9CitDQz0ke1JDLSJ3aW5kcmVzIn0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIDoKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0FDX0xBTkdfUkVTVE9SRQorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX1JDX0NPTkZJRworCisKKyMgTFRfUFJPR19HQ0oKKyMgLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX0dDSl0sCitbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwgW0FDX1BST0dfR0NKXSwKKyAgW200X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwgW0FdW01fUFJPR19HQ0pdLAorICAgIFtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCkKKyAgICAgIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgorICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKKworCisjIExUX1BST0dfUkMKKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfUkNdLAorW0FDX0NIRUNLX1RPT0woUkMsIHdpbmRyZXMsKQorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1JDXSwgW0xUX1BST0dfUkNdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwgW10pCisKKworIyBfTFRfREVDTF9FR1JFUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3QgZ3JlcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9FR1JFUF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0ZHUkVQXSlkbmwKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKK19MVF9ERUNMKFtdLCBbR1JFUF0sIFsxXSwgW0EgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzXSkKK19MVF9ERUNMKFtdLCBbRUdSRVBdLCBbMV0sIFtBbiBFUkUgbWF0Y2hlcl0pCitfTFRfREVDTChbXSwgW0ZHUkVQXSwgWzFdLCBbQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyXSkKK2RubCBOb24tYmxlZWRpbmctZWRnZSBhdXRvY29uZiBkb2Vzbid0IHN1YnN0IEdSRVAsIHNvIGRvIGl0IGhlcmUgdG9vCitBQ19TVUJTVChbR1JFUF0pCitdKQorCisKKyMgX0xUX0RFQ0xfT0JKRFVNUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3Qgb2JqZHVtcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9PQkpEVU1QXSwKK1tBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQorQUNfU1VCU1QoW09CSkRVTVBdKQorXSkKKworCisjIF9MVF9ERUNMX1NFRAorIyAtLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKKyMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KK200X2RlZnVuKFtfTFRfREVDTF9TRURdLAorW0FDX1BST0dfU0VECit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCitfTFRfREVDTChbXSwgW1NFRF0sIFsxXSwgW0Egc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorX0xUX0RFQ0woW10sIFtYc2VkXSwgWyJcJFNFRCAtZSAxcy9eWC8vIl0sCisgICAgW1NlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uXSkKK10pIyBfTFRfREVDTF9TRUQKKworbTRfaWZuZGVmKFtBQ19QUk9HX1NFRF0sIFsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbTRfZGVmdW4oW0FDX1BST0dfU0VEXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCitbIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCisjIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKK2x0X2FjX21heD0wCitsdF9hY19jb3VudD0wCisjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKyAgbHRfYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKyAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGJyZWFrCisgIGZpCisgIHdoaWxlIHRydWU7IGRvCisgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKyAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKyAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgIGVjaG8gPj5jb25mdGVzdC5ubAorICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKyAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBmaQorICBkb25lCitkb25lCitdKQorU0VEPSRsdF9jdl9wYXRoX1NFRAorQUNfU1VCU1QoW1NFRF0pCitBQ19NU0dfUkVTVUxUKFskU0VEXSkKK10pI0FDX1BST0dfU0VECitdKSNtNF9pZm5kZWYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1NFRF0sIFtBQ19QUk9HX1NFRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwgW10pCisKKworIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHNoZWxsIGlzIEJvdXJuZSBvciBYU0kgY29tcGF0aWJsZSwKKyMgb3IgaGFzIHNvbWUgb3RoZXIgdXNlZnVsIGZlYXR1cmVzLgorbTRfZGVmdW4oW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzXSkKKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK0FDX01TR19SRVNVTFQoWyR4c2lfc2hlbGxdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW3hzaV9zaGVsbD0nJHhzaV9zaGVsbCddKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICIrPSJdKQorbHRfc2hlbGxfYXBwZW5kPW5vCisoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkWzFdKz1cJFsyXSIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworQUNfTVNHX1JFU1VMVChbJGx0X3NoZWxsX2FwcGVuZF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJ10pCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKK19MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKK19MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAorX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCitdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisKKworIyBfTFRfUFJPR19YU0lfU0hFTExGTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJvdXJuZSBhbmQgWFNJIGNvbXBhdGlibGUgdmFyaWFudHMgb2Ygc29tZSB1c2VmdWwgc2hlbGwgZnVuY3Rpb25zLgorbTRfZGVmdW4oW19MVF9QUk9HX1hTSV9TSEVMTEZOU10sCitbY2FzZSAkeHNpX3NoZWxsIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICBlc2FjCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKK30KKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Cit9CisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorfQorCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworICBlc2FjCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKQorfQorCisjIGZ1bmNfbGVuIHN0cmluZworIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorZnVuY19sZW4gKCkKK3sKKyAgZnVuY19sZW5fcmVzdWx0PSR7IzF9Cit9CisKK19MVF9FT0YKKyAgICA7OworICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGRpcm5hbWUiYAorICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgIGVsc2UKKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisgIGZpCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRiYXNlbmFtZSJgCit9CisKK2RubCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lCitkbmwgQSBwb3J0YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWZpbmVkIGluIGdlbmVyYWwubTRzaAorZG5sIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IGhlcmUuCisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgY2FzZSAkezJ9IGluCisgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezN9IiBcCisgICAgICAgICAgIHwgJFhzZWQgLWUgInMlXiR7MX0lJSIgLWUgInMlXFxcXCR7Mn1cJCUlImA7OworICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHszfSIgXAorICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJSR7Mn1cJCUlImA7OworICBlc2FjCit9CisKKyMgc2VkIHNjcmlwdHM6CitteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bW149XV0qXCk9LiovXDEvO3EnCitteV9zZWRfbG9uZ19hcmc9JzFzL14tW1tePV1dKj0vLycKKworIyBmdW5jX29wdF9zcGxpdAorZnVuY19vcHRfc3BsaXQgKCkKK3sKKyAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRteV9zZWRfbG9uZ19vcHQiYAorICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX2FyZyJgCit9CisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorfQorCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICdzL1wuW1teLl1dKiQvLmxvLydgCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRbQF0iYAorfQorCisjIGZ1bmNfbGVuIHN0cmluZworIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorZnVuY19sZW4gKCkKK3sKKyAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkWzFdIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCit9CisKK19MVF9FT0YKK2VzYWMKKworY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICBldmFsICIkWzFdKz1cJFsyXSIKK30KK19MVF9FT0YKKyAgICA7OworICAqKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiRbMV09XCQkWzFdXCRbMl0iCit9CisKK19MVF9FT0YKKyAgICA7OworICBlc2FjCitdKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdG9wdGlvbnMubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0b3B0aW9ucy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDE1MWEzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdG9wdGlvbnMubTQKQEAgLTAsMCArMSwzNjggQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYgbHRvcHRpb25zLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKKworIyBfTFRfTUFOR0xFX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfT1BUSU9OXSwKK1tbX0xUX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxX18kMiwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworCisjIF9MVF9TRVRfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IG9wdGlvbiBPUFRJT04tTkFNRSBmb3IgbWFjcm8gTUFDUk8tTkFNRSwgYW5kIGlmIHRoZXJlIGlzIGEKKyMgbWF0Y2hpbmcgaGFuZGxlciBkZWZpbmVkLCBkaXNwYXRjaCB0byBpdC4gIE90aGVyIE9QVElPTi1OQU1FcyBhcmUKKyMgc2F2ZWQgYXMgYSBmbGFnLgorbTRfZGVmaW5lKFtfTFRfU0VUX09QVElPTl0sCitbbTRfZGVmaW5lKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pKWRubAorbTRfaWZkZWYoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKyAgICAgICAgX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKyAgICBbbTRfd2FybmluZyhbVW5rbm93biAkMSBvcHRpb24gYCQyJ10pXSlbXWRubAorXSkKKworCisjIF9MVF9JRl9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIElGLVNFVCwgW0lGLU5PVC1TRVRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCittNF9kZWZpbmUoW19MVF9JRl9PUFRJT05dLAorW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pLCBbJDNdLCBbJDRdKV0pCisKKworIyBfTFRfVU5MRVNTX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QsIElGLU5PVC1TRVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1OT1QtU0VUIHVubGVzcyBhbGwgb3B0aW9ucyBpbiBPUFRJT04tTElTVCBmb3IgTUFDUk8tTkFNRQorIyBhcmUgc2V0LgorbTRfZGVmaW5lKFtfTFRfVU5MRVNTX09QVElPTlNdLAorW200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorCSAgICBbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgX0xUX09wdGlvbiksCisJCSAgICAgIFttNF9kZWZpbmUoWyQwX2ZvdW5kXSldKV0pW11kbmwKK200X2lmZGVmKFskMF9mb3VuZF0sIFttNF91bmRlZmluZShbJDBfZm91bmRdKV0sIFskMworXSlbXWRubAorXSkKKworCisjIF9MVF9TRVRfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT04tTElTVCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIExpYnRvb2wgb3B0aW9ucyBhc3NvY2lhdGVkCisjIHdpdGggTUFDUk8tTkFNRS4gIElmIGFueSBPUFRJT04gaGFzIGEgbWF0Y2hpbmcgaGFuZGxlciBkZWNsYXJlZCB3aXRoCisjIExUX09QVElPTl9ERUZJTkUsIGRpc3BhdGNoIHRvIHRoYXQgbWFjcm87IG90aGVyd2lzZSBjb21wbGFpbiBhYm91dAorIyB0aGUgdW5rbm93biBvcHRpb24gYW5kIGV4aXQuCittNF9kZWZ1bihbX0xUX1NFVF9PUFRJT05TXSwKK1sjIFNldCBvcHRpb25zCittNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKyAgICBbX0xUX1NFVF9PUFRJT04oWyQxXSwgX0xUX09wdGlvbildKQorCittNF9pZihbJDFdLFtMVF9JTklUXSxbCisgIGRubAorICBkbmwgU2ltcGx5IHNldCBzb21lIGRlZmF1bHQgdmFsdWVzIChpLmUgb2ZmKSBpZiBib29sZWFuIG9wdGlvbnMgd2VyZSBub3QKKyAgZG5sIHNwZWNpZmllZDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPW5vCisgIF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLCBbZW5hYmxlX3dpbjMyX2RsbD1ubworICBdKQorICBkbmwKKyAgZG5sIElmIG5vIHJlZmVyZW5jZSB3YXMgbWFkZSB0byB2YXJpb3VzIHBhaXJzIG9mIG9wcG9zaW5nIG9wdGlvbnMsIHRoZW4KKyAgZG5sIHdlIHJ1biB0aGUgZGVmYXVsdCBtb2RlIGhhbmRsZXIgZm9yIHRoZSBwYWlyLiAgRm9yIGV4YW1wbGUsIGlmIG5laXRoZXIKKyAgZG5sIGBzaGFyZWQnIG5vciBgZGlzYWJsZS1zaGFyZWQnIHdhcyBwYXNzZWQsIHdlIGVuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQKKyAgZG5sIGFyY2hpdmVzIGJ5IGRlZmF1bHQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzaGFyZWQgZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRURdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc3RhdGljIGRpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3BpYy1vbmx5IG5vLXBpY10sIFtfTFRfV0lUSF9QSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsIGRpc2FibGUtZmFzdC1pbnN0YWxsXSwKKyAgCQkgICBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdKQorICBdKQorXSkjIF9MVF9TRVRfT1BUSU9OUworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFjcm9zIHRvIGhhbmRsZSBMVF9JTklUIG9wdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBfTFRfTUFOR0xFX0RFRlVOKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX0RFRlVOXSwKK1tbX0xUX09QVElPTl9ERUZVTl9dbTRfYnBhdHN1YnN0KG00X3RvdXBwZXIoWyQxX18kMl0pLCBbW15BLVowLTlfXV0sIFtfXSldKQorCisKKyMgTFRfT1BUSU9OX0RFRklORShNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgQ09ERSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbTFRfT1BUSU9OX0RFRklORV0sCitbbTRfZGVmaW5lKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksIFskM10pW11kbmwKK10pIyBMVF9PUFRJT05fREVGSU5FCisKKworIyBkbG9wZW4KKyMgLS0tLS0tCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPXllcworXSkKKworQVVfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkbG9wZW5dKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYGRsb3Blbicgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sIFtdKQorCisKKyMgd2luMzItZGxsCisjIC0tLS0tLS0tLQorIyBEZWNsYXJlIHBhY2thZ2Ugc3VwcG9ydCBmb3IgYnVpbGRpbmcgd2luMzIgZGxsJ3MuCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sCitbZW5hYmxlX3dpbjMyX2RsbD15ZXMKKworY2FzZSAkaG9zdCBpbgorKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi1jZWdjYyopCisgIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzBdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMF0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFswXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCitdKSMgd2luMzItZGxsCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGB3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKworCisjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlIGBzaGFyZWQnIGFuZAorIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfbGlidG9vbF9saWJzXSwgW2VuYWJsZV9zaGFyZWRdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU0hBUkVECisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzaGFyZWRdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHN0YXRpYycgYW5kCisjIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU1RBVElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGZhc3QtaW5zdGFsbCcKKyMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCisgICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorCitfTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCisJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorCisKKyMgX0xUX1dJVEhfUElDKFtNT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgcGljLW9ubHknIGFuZCBgbm8tcGljJworIyBMVF9JTklUIG9wdGlvbnMuCisjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCittNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCitbQUNfQVJHX1dJVEgoW3BpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKKwlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAorICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKKyAgICBbcGljX21vZGU9ZGVmYXVsdF0pCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pCisKK19MVF9ERUNMKFtdLCBbcGljX21vZGVdLCBbMF0sIFtXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZF0pZG5sCitdKSMgX0xUX1dJVEhfUElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbcGljLW9ubHldLCBbX0xUX1dJVEhfUElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW25vLXBpY10sIFtfTFRfV0lUSF9QSUMoW25vXSldKQorCisjIE9sZCBuYW1lOgorQVVfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYHBpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sIFtdKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTFRETF9JTklUIE9wdGlvbnMgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKK200X2RlZmluZShbX0xURExfTU9ERV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW25vbnJlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW25vbnJlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtyZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtyZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbc3VicHJvamVjdF0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3N1YnByb2plY3RdKV0pCisKK200X2RlZmluZShbX0xURExfVFlQRV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2luc3RhbGxhYmxlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbaW5zdGFsbGFibGVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbY29udmVuaWVuY2VdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtjb252ZW5pZW5jZV0pXSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRzdWdhci5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRzdWdhci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDAwYTA1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHN1Z2FyLm00CkBAIC0wLDAgKzEsMTIzIEBACisjIGx0c3VnYXIubTQgLS0gbGlidG9vbCBtNCBiYXNlIGxheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAtKi1BdXRvY29uZi0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNiBsdHN1Z2FyLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRTVUdBUl9WRVJTSU9OXSwgW200X2lmKFswLjFdKV0pCisKKworIyBsdF9qb2luKFNFUCwgQVJHMSwgW0FSRzIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIEFSRzFTRVBBUkcyLi4uU0VQQVJHbiwgb21pdHRpbmcgW10gYXJndW1lbnRzIGFuZCB0aGVpcgorIyBhc3NvY2lhdGVkIHNlcGFyYXRvci4KKyMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2pvaW4gZnJvbSBBdXRvY29uZiAyLjYyLCBzaW5jZSBhbGwgZWFybGllcgorIyB2ZXJzaW9ucyBpbiBtNHN1Z2FyIGhhZCBidWdzLgorbTRfZGVmaW5lKFtsdF9qb2luXSwKK1ttNF9pZihbJCNdLCBbMV0sIFtdLAorICAgICAgIFskI10sIFsyXSwgW1skMl1dLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDJdX10pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCittNF9kZWZpbmUoW19sdF9qb2luXSwKK1ttNF9pZihbJCMkMl0sIFsyXSwgW10sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMSQyXV0pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCisKKworIyBsdF9jYXIoTElTVCkKKyMgbHRfY2RyKExJU1QpCisjIC0tLS0tLS0tLS0tLQorIyBNYW5pcHVsYXRlIG00IGxpc3RzLgorIyBUaGVzZSBtYWNyb3MgYXJlIG5lY2Vzc2FyeSBhcyBsb25nIGFzIHdpbGwgc3RpbGwgbmVlZCB0byBzdXBwb3J0CisjIEF1dG9jb25mLTIuNTkgd2hpY2ggcXVvdGVzIGRpZmZlcmVudGx5LgorbTRfZGVmaW5lKFtsdF9jYXJdLCBbWyQxXV0pCittNF9kZWZpbmUoW2x0X2Nkcl0sCitbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKKyAgICAgICBbJCNdLCAxLCBbXSwKKyAgICAgICBbbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSldKV0pCittNF9kZWZpbmUoW2x0X3VucXVvdGVdLCAkMSkKKworCisjIGx0X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzIGBTRVBBUkFUT1InYFNUUklORycuCisjIE5vdGUgdGhhdCBuZWl0aGVyIFNFUEFSQVRPUiBub3IgU1RSSU5HIGFyZSBleHBhbmRlZDsgdGhleSBhcmUgYXBwZW5kZWQKKyMgdG8gTUFDUk8tTkFNRSBhcyBpcyAobGVhdmluZyB0aGUgZXhwYW5zaW9uIGZvciB3aGVuIE1BQ1JPLU5BTUUgaXMgaW52b2tlZCkuCisjIE5vIFNFUEFSQVRPUiBpcyBvdXRwdXQgaWYgTUFDUk8tTkFNRSB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQgKGRpZmZlcmVudAorIyB0aGFuIGRlZmluZWQgYW5kIGVtcHR5KS4KKyMKKyMgVGhpcyBtYWNybyBpcyBuZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gQXV0b2NvbmYgMi42Miwgc2luY2UgZWFybGllcgorIyB2ZXJzaW9ucyBvZiBtNHN1Z2FyIG1pc3Rha2VubHkgZXhwYW5kZWQgU0VQQVJBVE9SIGJ1dCBub3QgU1RSSU5HLgorbTRfZGVmaW5lKFtsdF9hcHBlbmRdLAorW200X2RlZmluZShbJDFdLAorCSAgIG00X2lmZGVmKFskMV0sIFttNF9kZWZuKFskMV0pWyQzXV0pWyQyXSldKQorCisKKworIyBsdF9jb21iaW5lKFNFUCwgUFJFRklYLUxJU1QsIElORklYLCBTVUZGSVgxLCBbU1VGRklYMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIFNFUCBkZWxpbWl0ZWQgbGlzdCBvZiBhbGwgcGFpcmVkIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBvZgorIyBQUkVGSVgtTElTVCB3aXRoIFNVRkZJWDEgdGhyb3VnaCBTVUZGSVhuLiAgRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0CisjIGhhcyB0aGUgZm9ybSBQUkVGSVhtSU5GSVhTVUZGSVhuLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfY29tYmluZSBhZGRlZCBpbiBBdXRvY29uZiAyLjYyLgorbTRfZGVmaW5lKFtsdF9jb21iaW5lXSwKK1ttNF9pZihtNF9ldmFsKFskIyA+IDNdKSwgWzFdLAorICAgICAgIFttNF9wdXNoZGVmKFtfTHRfc2VwXSwgW200X2RlZmluZShbX0x0X3NlcF0sIG00X2RlZm4oW2x0X2Nhcl0pKV0pXV1kbmwKK1tbbTRfZm9yZWFjaChbX0x0X3ByZWZpeF0sIFskMl0sCisJICAgICBbbTRfZm9yZWFjaChbX0x0X3N1ZmZpeF0sCisJCV1tNF9kcXVvdGUobTRfZHF1b3RlKG00X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpKSlbLAorCVtfTHRfc2VwKFskMV0pW11tNF9kZWZuKFtfTHRfcHJlZml4XSlbJDNdbTRfZGVmbihbX0x0X3N1ZmZpeF0pXSldKV0pXSkKKworCisjIGx0X2lmX2FwcGVuZF91bmlxKE1BQ1JPLU5BTUUsIFZBUk5BTUUsIFtTRVBBUkFUT1JdLCBbVU5JUV0sIFtOT1QtVU5JUV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmZiBNQUNSTy1OQU1FIGRvZXMgbm90IHlldCBjb250YWluIFZBUk5BTUUsIHRoZW4gYXBwZW5kIGl0IChkZWxpbWl0ZWQKKyMgYnkgU0VQQVJBVE9SIGlmIHN1cHBsaWVkKSBhbmQgZXhwYW5kIFVOSVEsIGVsc2UgTk9ULVVOSVEuCittNF9kZWZpbmUoW2x0X2lmX2FwcGVuZF91bmlxXSwKK1ttNF9pZmRlZihbJDFdLAorCSAgW200X2lmKG00X2luZGV4KFskM11tNF9kZWZuKFskMV0pWyQzXSwgWyQzJDIkM10pLCBbLTFdLAorCQkgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSwKKwkJIFskNV0pXSwKKwkgIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0pXSkKKworCisjIGx0X2RpY3RfYWRkKERJQ1QsIEtFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkXSwKK1ttNF9kZWZpbmUoWyQxKCQyKV0sIFskM10pXSkKKworCisjIGx0X2RpY3RfYWRkX3N1YmtleShESUNULCBLRVksIFNVQktFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkX3N1YmtleV0sCitbbTRfZGVmaW5lKFskMSgkMjokMyldLCBbJDRdKV0pCisKKworIyBsdF9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9mZXRjaF0sCitbbTRfaWZ2YWwoWyQzXSwKKwltNF9pZmRlZihbJDEoJDI6JDMpXSwgW200X2RlZm4oWyQxKCQyOiQzKV0pXSksCisgICAgbTRfaWZkZWYoWyQxKCQyKV0sIFttNF9kZWZuKFskMSgkMildKV0pKV0pCisKKworIyBsdF9pZl9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0sIFZBTFVFLCBJRi1UUlVFLCBbSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9pZl9kaWN0X2ZldGNoXSwKK1ttNF9pZihsdF9kaWN0X2ZldGNoKFskMV0sIFskMl0sIFskM10pLCBbJDRdLAorCVskNV0sCisgICAgWyQ2XSldKQorCisKKyMgbHRfZGljdF9maWx0ZXIoRElDVCwgW1NVQktFWV0sIFZBTFVFLCBbU0VQQVJBVE9SXSwgS0VZLCBbLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9maWx0ZXJdLAorW200X2lmKFskNV0sIFtdLCBbXSwKKyAgW2x0X2pvaW4obTRfcXVvdGUobTRfZGVmYXVsdChbJDRdLCBbWywgXV0pKSwKKyAgICAgICAgICAgbHRfdW5xdW90ZShtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfZm9yZWFjaChfTHRfa2V5LCBsdF9jYXIoW200X3NoaWZ0big0LCAkQCldKSwKKwkJICAgICAgW2x0X2lmX2RpY3RfZmV0Y2goWyQxXSwgX0x0X2tleSwgWyQyXSwgWyQzXSwgW19MdF9rZXkgXSldKSkpKSldKVtdZG5sCitdKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHZlcnNpb24ubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0dmVyc2lvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGUxNTRmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHZlcnNpb24ubTQKQEAgLTAsMCArMSwyMyBAQAorIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEdlbmVyYXRlZCBmcm9tIGx0dmVyc2lvbi5pbi4KKworIyBzZXJpYWwgMzAxMiBsdHZlcnNpb24ubTQKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKworbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi4yLjZdKQorbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzAxMl0pCisKK0FDX0RFRlVOKFtMVFZFUlNJT05fVkVSU0lPTl0sCitbbWFjcm9fdmVyc2lvbj0nMi4yLjYnCittYWNyb19yZXZpc2lvbj0nMS4zMDEyJworX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCitfTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQorXSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR+b2Jzb2xldGUubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0fm9ic29sZXRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzN2JiMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0fm9ic29sZXRlLm00CkBAIC0wLDAgKzEsOTIgQEAKKyMgbHR+b2Jzb2xldGUubTQgLS0gYWNsb2NhbCBzYXRpc2Z5aW5nIG9ic29sZXRlIGRlZmluaXRpb25zLiAgICAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNCBsdH5vYnNvbGV0ZS5tNAorCisjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KKyMKKyMgSW4gdGhlIHBhc3QgbGlidG9vbC5tNCBoYXMgcHJvdmlkZWQgbWFjcm9zIHZpYSBBQ19ERUZVTiAob3IgQVVfREVGVU4pCisjIHdoaWNoIGhhdmUgbGF0ZXIgYmVlbiBjaGFuZ2VkIHRvIG00X2RlZmluZSBhcyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZQorIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgorIworIyBUaGUgdHJvdWJsZSBpcywgYWNsb2NhbCBpcyBhIGJpdCB0aGljay4gIEl0J2xsIHNlZSB0aGUgb2xkIEFDX0RFRlVOCisjIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKKyMgdXNpbmcgYSBtYWNybyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gb3VyIGxvY2FsIG00L2xpYnRvb2wubTQgaXQnbGwKKyMgcHVsbCB0aGUgb2xkIGxpYnRvb2wubTQgaW4gKGl0IGRvZXNuJ3Qgc2VlIG91ciBzaGlueSBuZXcgbTRfZGVmaW5lCisjIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCisjCisjIFNvIHdlIHByb3ZpZGUgdGhpcyBmaWxlLCB3aGljaCBoYXMgYSBzaWxseSBmaWxlbmFtZSBzbyBpdCdzIGFsd2F5cworIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKKyMgQUNfREVGVU5zIGl0IHdhbnRzLCBidXQgd2hlbiBtNCBwcm9jZXNzZXMgaXQsIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcKKyMgYmVjYXVzZSB0aG9zZSBtYWNyb3MgYWxyZWFkeSBleGlzdCwgb3Igd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4gCisjCisjIEFueXRpbWUgd2Ugd2l0aGRyYXcgYW4gQUNfREVGVU4gb3IgQVVfREVGVU4sIHJlbWVtYmVyIHRvIGFkZCBpdCBoZXJlLgorIyBZZXMsIHRoYXQgbWVhbnMgZXZlcnkgbmFtZSBvbmNlIHRha2VuIHdpbGwgbmVlZCB0byByZW1haW4gaGVyZSB1bnRpbAorIyB3ZSBnaXZlIHVwIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyBiZWZvcmUgMS43LCBhdCB3aGljaCBwb2ludAorIyB3ZSBuZWVkIHRvIGtlZXAgb25seSB0aG9zZSBuYW1lcyB3aGljaCB3ZSBzdGlsbCByZWZlciB0by4KKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9CU09MRVRFX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKK200X2lmbmRlZihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dKV0pCittNF9pZm5kZWYoW0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0VHUkVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TSEVMTF9JTklUXSwJCVtBQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0xUTUFJTl0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0xUTUFJTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR1ZBUl0sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdWQVJdKV0pCittNF9pZm5kZWYoW0FDX0xURExfRU5BQkxFX0lOU1RBTExdLAlbQUNfREVGVU4oW0FDX0xURExfRU5BQkxFX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW0FDX0xURExfUFJFT1BFTl0sCQlbQUNfREVGVU4oW0FDX0xURExfUFJFT1BFTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19DT01QSUxFUl0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xPQ0tdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTE9DS10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSwJW0FDX0RFRlVOKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MVERMX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0pXSkKK200X2lmbmRlZihbQUNfUEFUSF9NQUdJQ10sCQlbQUNfREVGVU4oW0FDX1BBVEhfTUFHSUNdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfR05VXSwJCVtBQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAlbQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKV0pCittNF9pZm5kZWYoW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSwJW0FDX0RFRlVOKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0xUX0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW0xUX0FDX1BST0dfU0VEXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdKV0pCittNF9pZm5kZWYoW19MVF9DQ19CQVNFTkFNRV0sCQlbQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0pXSkKK200X2lmbmRlZihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwJW0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19BQ19QUk9HX0xJQlRPT0xdLAkJW0FDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NFVFVQXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TRVRVUF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0NIRUNLX0RMRkNOXSwJCVtBQ19ERUZVTihbX0xUX0FDX0NIRUNLX0RMRkNOXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UQUdDT05GSUddLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3XSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUkNdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1JDXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX1JDX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9DT05GSUddLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0ZJTEVfTFRETExfQ10sCVtBQ19ERUZVTihbX0xUX0FDX0ZJTEVfTFRETExfQ10pXSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmFtIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxOTI3NwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOCBAQAorIyMgUHJvY2VzcyB0aGlzIHdpdGggYXV0b21ha2UgdG8gY3JlYXRlIE1ha2VmaWxlLmluCisKK0FVVE9NQUtFX09QVElPTlM9Zm9yZWlnbgorCitFWFRSQV9ESVNUID0gZmZpLjMgZmZpX2NhbGwuMyBmZmlfcHJlcF9jaWYuMworCittYW5fTUFOUyA9IGZmaS4zIGZmaV9jYWxsLjMgZmZpX3ByZXBfY2lmLjMKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQwYmUyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0NDggQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAordGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAorc3ViZGlyID0gbWFuCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvZmZpY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworbWFuM2RpciA9ICQobWFuZGlyKS9tYW4zCithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobWFuM2RpcikiCitOUk9GRiA9IG5yb2ZmCitNQU5TID0gJChtYW5fTUFOUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQU1UQVIgPSBAQU1UQVJACitBTV9SVU5URVNURkxBR1MgPSBAQU1fUlVOVEVTVEZMQUdTQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0xPTkdfRE9VQkxFID0gQEhBVkVfTE9OR19ET1VCTEVACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1RBUkdFVCA9IEBUQVJHRVRACitUQVJHRVRESVIgPSBAVEFSR0VURElSQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXQgPSBAdGFyZ2V0QAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKK3RhcmdldF9vcyA9IEB0YXJnZXRfb3NACit0YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACit0b29sZXhlY2RpciA9IEB0b29sZXhlY2RpckAKK3Rvb2xleGVjbGliZGlyID0gQHRvb2xleGVjbGliZGlyQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCitFWFRSQV9ESVNUID0gZmZpLjMgZmZpX2NhbGwuMyBmZmlfcHJlcF9jaWYuMworbWFuX01BTlMgPSBmZmkuMyBmZmlfY2FsbC4zIGZmaV9wcmVwX2NpZi4zCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbWFuL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBtYW4vTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLW1hbjM6ICQobWFuX01BTlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChtYW4zZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobWFuM2RpcikiCisJQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuM2RpcikiIHx8IGV4aXQgMDsgXAorCXsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCisJbDI9JyQobWFuX01BTlMpJzsgZm9yIGkgaW4gJCRsMjsgZG8gZWNobyAiJCRpIjsgZG9uZSB8IFwKKwkgIHNlZCAtbiAnL1wuM1thLXpdKiQkL3AnOyBcCisJfSB8IHdoaWxlIHJlYWQgcDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ247cywuKi8sLDtwO2g7cywuKlwuLCw7cyxeW14zXVswLTlhLXpdKiQkLDMsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCcgfCBcCisJc2VkICdOO047cyxcbiwgLGcnIHwgeyBcCisJbGlzdD07IHdoaWxlIHJlYWQgZmlsZSBiYXNlIGluc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkYmFzZSIgPSAiJCRpbnN0IjsgdGhlbiBsaXN0PSIkJGxpc3QgJCRmaWxlIjsgZWxzZSBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZmlsZScgJyQoREVTVERJUikkKG1hbjNkaXIpLyQkaW5zdCciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAiJCRmaWxlIiAiJChERVNURElSKSQobWFuM2RpcikvJCRpbnN0IiB8fCBleGl0ICQkPzsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChtYW4zZGlyKSciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChtYW4zZGlyKSIgfHwgZXhpdCAkJD87IH07IFwKKwlkb25lOyB9CisKK3VuaW5zdGFsbC1tYW4zOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuM2RpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWB7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAorCWwyPSckKG1hbl9NQU5TKSc7IGZvciBpIGluICQkbDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCBcCisJICBzZWQgLW4gJy9cLjNbYS16XSokJC9wJzsgXAorCX0gfCBzZWQgLWUgJ3MsLiovLCw7aDtzLC4qXC4sLDtzLF5bXjNdWzAtOWEtel0qJCQsMyw7eCcgXAorCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJ2A7IFwKKwl0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgIGVjaG8gIiAoIGNkICckKERFU1RESVIpJChtYW4zZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJICBjZCAiJChERVNURElSKSQobWFuM2RpcikiICYmIHJtIC1mICQkZmlsZXM7IH0KK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQGxpc3Q9JyQoTUFOUyknOyBpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgICAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlbHNlIDo7IGZpOyBkb25lYDsgXAorCSAgaWYgdGVzdCAtbiAiJCRsaXN0IiAmJiBcCisJICAgIGdyZXAgJ2FiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZScgJCRsaXN0ID4vZGV2L251bGw7IHRoZW4gXAorCSAgICBlY2hvICJlcnJvcjogZm91bmQgbWFuIHBhZ2VzIGNvbnRhaW5pbmcgdGhlIFxgbWlzc2luZyBoZWxwMm1hbicgcmVwbGFjZW1lbnQgdGV4dDoiID4mMjsgXAorCSAgICBncmVwIC1sICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCB8IHNlZCAncy9eLyAgICAgICAgIC8nID4mMjsgXAorCSAgICBlY2hvICIgICAgICAgdG8gZml4IHRoZW0sIGluc3RhbGwgaGVscDJtYW4sIHJlbW92ZSBhbmQgcmVnZW5lcmF0ZSB0aGUgbWFuIHBhZ2VzOyIgPiYyOyBcCisJICAgIGVjaG8gIiAgICAgICB0eXBpY2FsbHkgXGBtYWtlIG1haW50YWluZXItY2xlYW4nIHdpbGwgcmVtb3ZlIHRoZW0iID4mMjsgXAorCSAgICBleGl0IDE7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwllbHNlIDo7IGZpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChNQU5TKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobWFuM2RpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1tYW4KKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4zCisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLW1hbgorCit1bmluc3RhbGwtbWFuOiB1bmluc3RhbGwtbWFuMworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1tYW4zIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1tYW4gdW5pbnN0YWxsLW1hbjMKKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9mZmkuMyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YjVkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9mZmkuMwpAQCAtMCwwICsxLDMxIEBACisuRGQgRmVicnVhcnkgMTUsIDIwMDgKKy5EdCBGRkkgMworLlNoIE5BTUUKKy5ObSBGRkkKKy5OZCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorLlNoIExJQlJBUlkKK2xpYmZmaSwgLWxmZmkKKy5TaCBTWU5PUFNJUworLkluIGZmaS5oCisuRnQgZmZpX3N0YXR1cworLkZvIGZmaV9wcmVwX2NpZgorLkZhICJmZmlfY2lmICpjaWYiCisuRmEgImZmaV9hYmkgYWJpIgorLkZhICJ1bnNpZ25lZCBpbnQgbmFyZ3MiCisuRmEgImZmaV90eXBlICpydHlwZSIKKy5GYSAiZmZpX3R5cGUgKiphdHlwZXMiCisuRmMKKy5GdCB2b2lkCisuRm8gZmZpX2NhbGwKKy5GYSAiZmZpX2NpZiAqY2lmIgorLkZhICJ2b2lkICgqZm4pKHZvaWQpIgorLkZhICJ2b2lkICpydmFsdWUiCisuRmEgInZvaWQgKiphdmFsdWUiCisuRmMKKy5TaCBERVNDUklQVElPTgorVGhlIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGJ5IHdoaWNoIGEgZnVuY3Rpb24gY2FuCitnZW5lcmF0ZSBhIGNhbGwgdG8gYW5vdGhlciBmdW5jdGlvbiBhdCBydW50aW1lIHdpdGhvdXQgcmVxdWlyaW5nIGtub3dsZWRnZSBvZgordGhlIGNhbGxlZCBmdW5jdGlvbidzIGludGVyZmFjZSBhdCBjb21waWxlIHRpbWUuCisuU2ggU0VFIEFMU08KKy5YciBmZmlfcHJlcF9jaWYgMyAsCisuWHIgZmZpX2NhbGwgMwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vZmZpX2NhbGwuMyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaV9jYWxsLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MTUxMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaV9jYWxsLjMKQEAgLTAsMCArMSwxMDMgQEAKKy5EZCBGZWJydWFyeSAxNSwgMjAwOAorLkR0IGZmaV9jYWxsIDMKKy5TaCBOQU1FCisuTm0gZmZpX2NhbGwKKy5OZCBJbnZva2UgYSBmb3JlaWduIGZ1bmN0aW9uLgorLlNoIFNZTk9QU0lTCisuSW4gZmZpLmgKKy5GdCB2b2lkCisuRm8gZmZpX2NhbGwKKy5GYSAiZmZpX2NpZiAqY2lmIgorLkZhICJ2b2lkICgqZm4pKHZvaWQpIgorLkZhICJ2b2lkICpydmFsdWUiCisuRmEgInZvaWQgKiphdmFsdWUiCisuRmMKKy5TaCBERVNDUklQVElPTgorVGhlCisuTm0gZmZpX2NhbGwKK2Z1bmN0aW9uIHByb3ZpZGVzIGEgc2ltcGxlIG1lY2hhbmlzbSBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiB3aXRob3V0CityZXF1aXJpbmcga25vd2xlZGdlIG9mIHRoZSBmdW5jdGlvbidzIGludGVyZmFjZSBhdCBjb21waWxlIHRpbWUuCisuRmEgZm4KK2lzIGNhbGxlZCB3aXRoIHRoZSB2YWx1ZXMgcmV0cmlldmVkIGZyb20gdGhlIHBvaW50ZXJzIGluIHRoZQorLkZhIGF2YWx1ZQorYXJyYXkuIFRoZSByZXR1cm4gdmFsdWUgZnJvbQorLkZhIGZuCitpcyBwbGFjZWQgaW4gc3RvcmFnZSBwb2ludGVkIHRvIGJ5CisuRmEgcnZhbHVlIC4KKy5GYSBjaWYKK2NvbnRhaW5zIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIGRhdGEgdHlwZXMsIHNpemVzIGFuZCBhbGlnbm1lbnRzIG9mIHRoZQorYXJndW1lbnRzIHRvIGFuZCByZXR1cm4gdmFsdWUgZnJvbQorLkZhIGZuICwKK2FuZCBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGgKKy5ObSBmZmlfcHJlcF9jaWYKK2JlZm9yZSBpdCBpcyB1c2VkIHdpdGgKKy5ObSBmZmlfY2FsbCAuCisuUHAKKy5GYSBydmFsdWUKK211c3QgcG9pbnQgdG8gc3RvcmFnZSB0aGF0IGlzIHNpemVvZihmZmlfYXJnKSBvciBsYXJnZXIgZm9yIG5vbi1mbG9hdGluZyBwb2ludAordHlwZXMuIEZvciBzbWFsbGVyLXNpemVkIHJldHVybiB2YWx1ZSB0eXBlcywgdGhlCisuTm0gZmZpX2FyZworb3IKKy5ObSBmZmlfc2FyZworaW50ZWdyYWwgdHlwZSBtdXN0IGJlIHVzZWQgdG8gaG9sZAordGhlIHJldHVybiB2YWx1ZS4KKy5TaCBFWEFNUExFUworLkJkIC1saXRlcmFsCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKwordW5zaWduZWQgY2hhcgorZm9vKHVuc2lnbmVkIGludCwgZmxvYXQpOworCitpbnQKK21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICAgIGZmaV9jaWYgY2lmOworICAgIGZmaV90eXBlICphcmdfdHlwZXNbMl07CisgICAgdm9pZCAqYXJnX3ZhbHVlc1syXTsKKyAgICBmZmlfc3RhdHVzIHN0YXR1czsKKworICAgIC8vIEJlY2F1c2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGZvbygpIGlzIHNtYWxsZXIgdGhhbiBzaXplb2YobG9uZyksIGl0CisgICAgLy8gbXVzdCBiZSBwYXNzZWQgYXMgZmZpX2FyZyBvciBmZmlfc2FyZy4KKyAgICBmZmlfYXJnIHJlc3VsdDsKKworICAgIC8vIFNwZWNpZnkgdGhlIGRhdGEgdHlwZSBvZiBlYWNoIGFyZ3VtZW50LiBBdmFpbGFibGUgdHlwZXMgYXJlIGRlZmluZWQKKyAgICAvLyBpbiA8ZmZpL2ZmaS5oPi4KKyAgICBhcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDsKKyAgICBhcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisKKyAgICAvLyBQcmVwYXJlIHRoZSBmZmlfY2lmIHN0cnVjdHVyZS4KKyAgICBpZiAoKHN0YXR1cyA9IGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksCisgICAgICAgIDIsICZmZmlfdHlwZV91aW50OCwgYXJnX3R5cGVzKSkgIT0gRkZJX09LKQorICAgIHsKKyAgICAgICAgLy8gSGFuZGxlIHRoZSBmZmlfc3RhdHVzIGVycm9yLgorICAgIH0KKworICAgIC8vIFNwZWNpZnkgdGhlIHZhbHVlcyBvZiBlYWNoIGFyZ3VtZW50LgorICAgIHVuc2lnbmVkIGludCBhcmcxID0gNDI7CisgICAgZmxvYXQgYXJnMiA9IDUuMTsKKworICAgIGFyZ192YWx1ZXNbMF0gPSAmYXJnMTsKKyAgICBhcmdfdmFsdWVzWzFdID0gJmFyZzI7CisKKyAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uLgorICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihmb28pLCAmcmVzdWx0LCBhcmdfdmFsdWVzKTsKKworICAgIC8vIFRoZSBmZmlfYXJnICdyZXN1bHQnIG5vdyBjb250YWlucyB0aGUgdW5zaWduZWQgY2hhciByZXR1cm5lZCBmcm9tIGZvbygpLAorICAgIC8vIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZCBieSBhIHR5cGVjYXN0LgorICAgIHByaW50ZigicmVzdWx0IGlzICVoaHUiLCAodW5zaWduZWQgY2hhcilyZXN1bHQpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIFRoZSB0YXJnZXQgZnVuY3Rpb24uCit1bnNpZ25lZCBjaGFyCitmb28odW5zaWduZWQgaW50IHgsIGZsb2F0IHkpCit7CisgICAgdW5zaWduZWQgY2hhciByZXN1bHQgPSB4IC0geTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorLkVkCisuU2ggU0VFIEFMU08KKy5YciBmZmkgMyAsCisuWHIgZmZpX3ByZXBfY2lmIDMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaV9wcmVwX2NpZi4zIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vZmZpX3ByZXBfY2lmLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzNmIzMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaV9wcmVwX2NpZi4zCkBAIC0wLDAgKzEsNjYgQEAKKy5EZCBGZWJydWFyeSAxNSwgMjAwOAorLkR0IGZmaV9wcmVwX2NpZiAzCisuU2ggTkFNRQorLk5tIGZmaV9wcmVwX2NpZgorLk5kIFByZXBhcmUgYQorLk5tIGZmaV9jaWYKK3N0cnVjdHVyZSBmb3IgdXNlIHdpdGgKKy5ObSBmZmlfY2FsbCAKKy4KKy5TaCBTWU5PUFNJUworLkluIGZmaS5oCisuRnQgZmZpX3N0YXR1cworLkZvIGZmaV9wcmVwX2NpZgorLkZhICJmZmlfY2lmICpjaWYiCisuRmEgImZmaV9hYmkgYWJpIgorLkZhICJ1bnNpZ25lZCBpbnQgbmFyZ3MiCisuRmEgImZmaV90eXBlICpydHlwZSIKKy5GYSAiZmZpX3R5cGUgKiphdHlwZXMiCisuRmMKKy5TaCBERVNDUklQVElPTgorVGhlCisuTm0gZmZpX3ByZXBfY2lmCitmdW5jdGlvbiBwcmVwYXJlcyBhCisuTm0gZmZpX2NpZgorc3RydWN0dXJlIGZvciB1c2Ugd2l0aCAKKy5ObSBmZmlfY2FsbAorLgorLkZhIGFiaQorc3BlY2lmaWVzIGEgc2V0IG9mIGNhbGxpbmcgY29udmVudGlvbnMgdG8gdXNlLgorLkZhIGF0eXBlcworaXMgYW4gYXJyYXkgb2YKKy5GYSBuYXJncworcG9pbnRlcnMgdG8KKy5ObSBmZmlfdHlwZQorc3RydWN0cyB0aGF0IGRlc2NyaWJlIHRoZSBkYXRhIHR5cGUsIHNpemUgYW5kIGFsaWdubWVudCBvZiBlYWNoIGFyZ3VtZW50LgorLkZhIHJ0eXBlCitwb2ludHMgdG8gYW4KKy5ObSBmZmlfdHlwZQordGhhdCBkZXNjcmliZXMgdGhlIGRhdGEgdHlwZSwgc2l6ZSBhbmQgYWxpZ25tZW50IG9mIHRoZQorcmV0dXJuIHZhbHVlLgorLlNoIFJFVFVSTiBWQUxVRVMKK1Vwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLAorLk5tIGZmaV9wcmVwX2NpZgorcmV0dXJucworLk5tIEZGSV9PSyAuCitJdCB3aWxsIHJldHVybgorLk5tIEZGSV9CQURfVFlQRURFRgoraWYKKy5GYSBjaWYKK2lzCisuTm0gTlVMTAorb3IKKy5GYSBhdHlwZXMKK29yCisuRmEgcnR5cGUKK2lzIG1hbGZvcm1lZC4gSWYKKy5GYSBhYmkKK2RvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgQUJJLAorLk5tIEZGSV9CQURfQUJJCit3aWxsIGJlIHJldHVybmVkLiBBdmFpbGFibGUgQUJJcyBhcmUKK2RlZmluZWQgaW4KKy5ObSA8ZmZpdGFyZ2V0Lmg+CisuCisuU2ggU0VFIEFMU08KKy5YciBmZmkgMyAsCisuWHIgZmZpX2NhbGwgMyAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWRhdGUtc2ggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21kYXRlLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkOTE2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21kYXRlLXNoCkBAIC0wLDAgKzEsMjAxIEBACisjIS9iaW4vc2gKKyMgR2V0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSBvciBkaXJlY3RvcnkgYW5kIHByZXR0eS1wcmludCBpdC4KKworc2NyaXB0dmVyc2lvbj0yMDA1LTA2LTI5LjIyCisKKyMgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyB3cml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgSnVuZSAxOTk1CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gZmlsZS4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBtZGF0ZS1zaCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBGSUxFCisKK1ByZXR0eS1wcmludCB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgRklMRS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAibWRhdGUtc2ggJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKKyMgUHJldmVudCBkYXRlIGdpdmluZyByZXNwb25zZSBpbiBhbm90aGVyIGxhbmd1YWdlLgorTEFORz1DCitleHBvcnQgTEFORworTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xDX1RJTUU9QworZXhwb3J0IExDX1RJTUUKKworIyBHTlUgbHMgY2hhbmdlcyBpdHMgdGltZSBmb3JtYXQgaW4gcmVzcG9uc2UgdG8gdGhlIFRJTUVfU1RZTEUKKyMgdmFyaWFibGUuICBTaW5jZSB3ZSBjYW5ub3QgYXNzdW1lIGB1bnNldCcgd29ya3MsIHJldmVydCB0aGlzCisjIHZhcmlhYmxlIHRvIGl0cyBkb2N1bWVudGVkIGRlZmF1bHQuCitpZiB0ZXN0ICIke1RJTUVfU1RZTEUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgVElNRV9TVFlMRT1wb3NpeC1sb25nLWlzbworICBleHBvcnQgVElNRV9TVFlMRQorZmkKKworc2F2ZV9hcmcxPSQxCisKKyMgRmluZCBvdXQgaG93IHRvIGdldCB0aGUgZXh0ZW5kZWQgbHMgb3V0cHV0IG9mIGEgZmlsZSBvciBkaXJlY3RvcnkuCitpZiBscyAtTCAvZGV2L251bGwgMT4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsc19jb21tYW5kPSdscyAtTCAtbCAtZCcKK2Vsc2UKKyAgbHNfY29tbWFuZD0nbHMgLWwgLWQnCitmaQorCisjIEEgYGxzIC1sJyBsaW5lIGxvb2tzIGFzIGZvbGxvd3Mgb24gT1MvMi4KKyMgIGRyd3hyd3gtLS0gICAgICAgIDAgQXVnIDExICAyMDAxIGZvbworIyBUaGlzIGRpZmZlcnMgZnJvbSBVbml4LCB3aGljaCBhZGRzIG93bmVyc2hpcCBpbmZvcm1hdGlvbi4KKyMgIGRyd3hyd3gtLS0gICAyIHJvb3QgIHJvb3QgICAgICA0MDk2IEF1ZyAxMSAgMjAwMSBmb28KKyMKKyMgVG8gZmluZCB0aGUgZGF0ZSwgd2Ugc3BsaXQgdGhlIGxpbmUgb24gc3BhY2VzIGFuZCBpdGVyYXRlIG9uIHdvcmRzCisjIHVudGlsIHdlIGZpbmQgYSBtb250aC4gIFRoaXMgY2Fubm90IHdvcmsgd2l0aCBmaWxlcyB3aG9zZSBvd25lciBpcyBhCisjIHVzZXIgbmFtZWQgYEphbicsIG9yIGBGZWInLCBldGMuICBIb3dldmVyLCBpdCdzIHVubGlrZWx5IHRoYXQgYC8nCisjIHdpbGwgYmUgb3duZWQgYnkgYSB1c2VyIHdob3NlIG5hbWUgaXMgYSBtb250aC4gIFNvIHdlIGZpcnN0IGxvb2sgYXQKKyMgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gZGVjaWRlIGhvdyBtYW55CisjIHdvcmRzIHNob3VsZCBiZSBza2lwcGVkIHRvIGdldCB0aGUgZGF0ZS4KKworIyBPbiBIUFVYIC9iaW4vc2gsICJzZXQiIGludGVycHJldHMgIi1ydy1yLS1yLS0iIGFzIG9wdGlvbnMsIHNvIHRoZSAieCIgYmVsb3cuCitzZXQgeGBscyAtbCAtZCAvYAorCisjIEZpbmQgd2hpY2ggYXJndW1lbnQgaXMgdGhlIG1vbnRoLgorbW9udGg9Citjb21tYW5kPQordW50aWwgdGVzdCAkbW9udGgKK2RvCisgIHNoaWZ0CisgICMgQWRkIGFub3RoZXIgc2hpZnQgdG8gdGhlIGNvbW1hbmQuCisgIGNvbW1hbmQ9IiRjb21tYW5kIHNoaWZ0OyIKKyAgY2FzZSAkMSBpbgorICAgIEphbikgbW9udGg9SmFudWFyeTsgbnVtbW9udGg9MTs7CisgICAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgICAgTWFyKSBtb250aD1NYXJjaDsgbnVtbW9udGg9Mzs7CisgICAgQXByKSBtb250aD1BcHJpbDsgbnVtbW9udGg9NDs7CisgICAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICAgIEp1bikgbW9udGg9SnVuZTsgbnVtbW9udGg9Njs7CisgICAgSnVsKSBtb250aD1KdWx5OyBudW1tb250aD03OzsKKyAgICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgICAgU2VwKSBtb250aD1TZXB0ZW1iZXI7IG51bW1vbnRoPTk7OworICAgIE9jdCkgbW9udGg9T2N0b2JlcjsgbnVtbW9udGg9MTA7OworICAgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgICBEZWMpIG1vbnRoPURlY2VtYmVyOyBudW1tb250aD0xMjs7CisgIGVzYWMKK2RvbmUKKworIyBHZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuCitzZXQgZHVtbXkgeGBldmFsICIkbHNfY29tbWFuZCBcIlwkc2F2ZV9hcmcxXCIiYAorCisjIFJlbW92ZSBhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cworZXZhbCAkY29tbWFuZAorCisjIEJlY2F1c2Ugb2YgdGhlIGR1bW15IGFyZ3VtZW50IGFib3ZlLCBtb250aCBpcyBpbiAkMi4KKyMKKyMgT24gYSBQT1NJWCBzeXN0ZW0sIHdlIHNob3VsZCBoYXZlCisjCisjICQjID0gNQorIyAkMSA9IGZpbGUgc2l6ZQorIyAkMiA9IG1vbnRoCisjICQzID0gZGF5CisjICQ0ID0geWVhciBvciB0aW1lCisjICQ1ID0gZmlsZW5hbWUKKyMKKyMgT24gRGFyd2luIDcuNy4wIGFuZCA3LjYuMCwgd2UgaGF2ZQorIworIyAkIyA9IDQKKyMgJDEgPSBkYXkKKyMgJDIgPSBtb250aAorIyAkMyA9IHllYXIgb3IgdGltZQorIyAkNCA9IGZpbGVuYW1lCisKKyMgR2V0IHRoZSBtb250aC4KK2Nhc2UgJDIgaW4KKyAgSmFuKSBtb250aD1KYW51YXJ5OyBudW1tb250aD0xOzsKKyAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgIE1hcikgbW9udGg9TWFyY2g7IG51bW1vbnRoPTM7OworICBBcHIpIG1vbnRoPUFwcmlsOyBudW1tb250aD00OzsKKyAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICBKdW4pIG1vbnRoPUp1bmU7IG51bW1vbnRoPTY7OworICBKdWwpIG1vbnRoPUp1bHk7IG51bW1vbnRoPTc7OworICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgIFNlcCkgbW9udGg9U2VwdGVtYmVyOyBudW1tb250aD05OzsKKyAgT2N0KSBtb250aD1PY3RvYmVyOyBudW1tb250aD0xMDs7CisgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgRGVjKSBtb250aD1EZWNlbWJlcjsgbnVtbW9udGg9MTI7OworZXNhYworCitjYXNlICQzIGluCisgID8/PyopIGRheT0kMTs7CisgICopIGRheT0kMzsgc2hpZnQ7OworZXNhYworCisjIEhlcmUgd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhlIHByb2JsZW0gdGhhdCB0aGUgbHMgb3V0cHV0IGdpdmVzIGVpdGhlcgorIyB0aGUgdGltZSBvZiBkYXkgb3IgdGhlIHllYXIuCitjYXNlICQzIGluCisgICo6Kikgc2V0IGBkYXRlYDsgZXZhbCB5ZWFyPVwkJCMKKyAgICAgICBjYXNlICQyIGluCisJIEphbikgbnVtbW9udGh0b2Q9MTs7CisJIEZlYikgbnVtbW9udGh0b2Q9Mjs7CisJIE1hcikgbnVtbW9udGh0b2Q9Mzs7CisJIEFwcikgbnVtbW9udGh0b2Q9NDs7CisJIE1heSkgbnVtbW9udGh0b2Q9NTs7CisJIEp1bikgbnVtbW9udGh0b2Q9Njs7CisJIEp1bCkgbnVtbW9udGh0b2Q9Nzs7CisJIEF1ZykgbnVtbW9udGh0b2Q9ODs7CisJIFNlcCkgbnVtbW9udGh0b2Q9OTs7CisJIE9jdCkgbnVtbW9udGh0b2Q9MTA7OworCSBOb3YpIG51bW1vbnRodG9kPTExOzsKKwkgRGVjKSBudW1tb250aHRvZD0xMjs7CisgICAgICAgZXNhYworICAgICAgICMgRm9yIHRoZSBmaXJzdCBzaXggbW9udGggb2YgdGhlIHllYXIgdGhlIHRpbWUgbm90YXRpb24gY2FuIGFsc28KKyAgICAgICAjIGJlIHVzZWQgZm9yIGZpbGVzIG1vZGlmaWVkIGluIHRoZSBsYXN0IHllYXIuCisgICAgICAgaWYgKGV4cHIgJG51bW1vbnRoIFw+ICRudW1tb250aHRvZCkgPiAvZGV2L251bGw7CisgICAgICAgdGhlbgorCSB5ZWFyPWBleHByICR5ZWFyIC0gMWAKKyAgICAgICBmaTs7CisgICopIHllYXI9JDM7OworZXNhYworCisjIFRoZSByZXN1bHQuCitlY2hvICRkYXkgJG1vbnRoICR5ZWFyCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWlzc2luZyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWlzc2luZwppbmRleCA2NGI1ZjkwLi44OTRlNzg2IDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21pc3NpbmcKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9taXNzaW5nCkBAIC0xLDkgKzEsOSBAQAogIyEgL2Jpbi9zaAogIyBDb21tb24gc3R1YiBmb3IgYSBmZXcgbWlzc2luZyBHTlUgcHJvZ3JhbXMgd2hpbGUgaW5zdGFsbGluZy4KIAotc2NyaXB0dmVyc2lvbj0yMDA0LTA5LTA3LjA4CitzY3JpcHR2ZXJzaW9uPTIwMDUtMDYtMDguMjEKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CiAjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjIE9yaWdpbmFsbHkgYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgogCkBAIC0xOSw4ICsxOSw4IEBACiAKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCi0jIDAyMTExLTEzMDcsIFVTQS4KKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCiAKICMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQogIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKQEAgLTg3LDEyICs4NywxMiBAQAogICB5YWNjICAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCiAKIFNlbmQgYnVnIHJlcG9ydHMgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCi0gICAgZXhpdCAwCisgICAgZXhpdCAkPwogICAgIDs7CiAKICAgLXZ8LS12fC0tdmV8LS12ZXJ8LS12ZXJzfC0tdmVyc2l8LS12ZXJzaW98LS12ZXJzaW9uKQogICAgIGVjaG8gIm1pc3NpbmcgJHNjcmlwdHZlcnNpb24gKEdOVSBBdXRvbWFrZSkiCi0gICAgZXhpdCAwCisgICAgZXhpdCAkPwogICAgIDs7CiAKICAgLSopCkBAIC0yODgsMTEgKzI4OCwxOCBAQAogICAgICAgICAgY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiB1c2luZyBhIGJ1Z2d5IFxgbWFrZScgKEFJWCwKICAgICAgICAgIERVLCBJUklYKS4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgVGV4aW5mbycgcGFja2FnZSBvcgogICAgICAgICAgdGhlIFxgR05VIG1ha2UnIHBhY2thZ2UuICBHcmFiIGVpdGhlciBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICAjIFRoZSBmaWxlIHRvIHRvdWNoIGlzIHRoYXQgc3BlY2lmaWVkIHdpdGggLW8gLi4uCiAgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICdzLy4qLW8gXChbXiBdKlwpLiovXDEvcCdgCiAgICAgaWYgdGVzdCAteiAiJGZpbGUiOyB0aGVuCi0gICAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgJ3MvLiogXChbXiBdKlwpICokL1wxLydgCi0gICAgICBmaWxlPWBzZWQgLW4gJy9eQHNldGZpbGVuYW1lLyB7IHMvLiogXChbXiBdKlwpICokL1wxLzsgcDsgcTsgfScgJGZpbGVgCisgICAgICAjIC4uLiBvciBpdCBpcyB0aGUgb25lIHNwZWNpZmllZCB3aXRoIEBzZXRmaWxlbmFtZSAuLi4KKyAgICAgIGluZmlsZT1gZWNobyAiJCoiIHwgc2VkICdzLy4qIFwoW14gXSpcKSAqJC9cMS8nYAorICAgICAgZmlsZT1gc2VkIC1uICcvXkBzZXRmaWxlbmFtZS8geyBzLy4qIFwoW14gXSpcKSAqJC9cMS87IHA7IHE7IH0nICRpbmZpbGVgCisgICAgICAjIC4uLiBvciBpdCBpcyBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBuYW1lIChkaXIvZi50ZXhpIGJlY29tZXMgZi5pbmZvKQorICAgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiRpbmZpbGUiIHwgc2VkICdzLC4qLywsO3MsLlteLl0qJCwsJ2AuaW5mbwogICAgIGZpCisgICAgIyBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlIHVzZXIgcmVhbGx5IG5lZWRzIG1ha2VpbmZvOworICAgICMgbGV0J3MgZmFpbCB3aXRob3V0IHRvdWNoaW5nIGFueXRoaW5nLgorICAgIHRlc3QgLWYgJGZpbGUgfHwgZXhpdCAxCiAgICAgdG91Y2ggJGZpbGUKICAgICA7OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21zdmNjLnNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tc3ZjYy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzAxODM5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tc3ZjYy5zaApAQCAtMCwwICsxLDE4NSBAQAorIyEvYmluL3NoCisKKyMgKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorIyBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyMKKyMgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisjIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworIworIyBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorIyBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyMgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyMgTGljZW5zZS4KKyMKKyMgVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE1TVkMgd3JhcHBpZmljYXRvci4KKyMKKyMgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisjIFRpbW90aHkgV2FsbCA8dHdhbGxqYXZhQGRldi5qYXZhLm5ldD4uCisjIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDkKKyMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBDb250cmlidXRvcihzKToKKyMgICBEYW5pZWwgV2l0dGUgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKyMKKyMgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyMgZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisjIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorIyBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorIyBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorIyB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisjIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisjIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisjIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisjIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyMgdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyMKKyMgKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKioKKworIworIyBHQ0MtY29tcGF0aWJsZSB3cmFwcGVyIGZvciBjbC5leGUgYW5kIG1sLmV4ZS4gQXJndW1lbnRzIGFyZSBnaXZlbiBpbiBHQ0MKKyMgZm9ybWF0IGFuZCB0cmFuc2xhdGVkIGludG8gc29tZXRoaW5nIHNlbnNpYmxlIGZvciBjbCBvciBtbC4KKyMKKworIyBEaXNhYmxlIHNwZWNpZmljIHdhcm5pbmdzLCBhbmQgZW5hYmxlIHdhcm5pbmdzLWFzLWVycm9ycyBzbyB3ZSBjYXRjaCBhbnkKKyMgbWlzdHJhbnNsYXRlZCBhcmdzLgorbm93YXJuPSItd2Q0MTI3IC13ZDQ4MjAgLXdkNDcwNiAtd2Q0MTAwIC13ZDQyNTUgLXdkNDY2OCAtd2Q0MDUzIC13ZDQzMjQiCithcmdzPSItbm9sb2dvIC1XMyAtV1ggJG5vd2FybiIKK21kPS1NRAorY2w9ImNsIgorbWw9Im1sIgorb3V0cHV0PQorCit3aGlsZSBbICQjIC1ndCAwIF0KK2RvCisgIGNhc2UgJDEKKyAgaW4KKyAgICAtZmV4Y2VwdGlvbnMpCisgICAgICAjIERvbid0IGVuYWJsZSBleGNlcHRpb25zIGZvciBub3cuCisgICAgICAjYXJncz0iJGFyZ3MgLUVIYWMiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtbTMyKQorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLW02NCkKKyAgICAgIGNsPSJjbCIgICAjICIkTVNWQy94ODZfYW1kNjQvY2wiCisgICAgICBtbD0ibWw2NCIgIyAiJE1TVkMveDg2X2FtZDY0L21sNjQiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtTyopCisgICAgICBhcmdzPSIkYXJncyAkMSIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1nKQorICAgICAgIyBDYW4ndCBzcGVjaWZ5IC1SVEMxIG9yIC1aaSBpbiBvcHQuIC1HeSBpcyBvay4gVXNlIC1PUFQ6UkVGPworICAgICAgYXJncz0iJGFyZ3MgLURfREVCVUcgLVJUQzEgLVppIgorICAgICAgbWQ9LU1EZAorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLWMpCisgICAgICBhcmdzPSIkYXJncyAtYyIKKyAgICAgIGFyZ3M9IiQoZWNobyAkYXJncyB8IHNlZCAncyUvRmUlL0ZvJWcnKSIKKyAgICAgIHNpbmdsZT0iLWMiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtRCo9KikKKyAgICAgIG5hbWU9IiQoZWNobyAkMXxzZWQgJ3MvLURcKFtePV1bXj1dKlwpPS4qL1wxL2cnKSIKKyAgICAgIHZhbHVlPSIkKGVjaG8gJDF8c2VkICdzLy1EW149XVtePV0qPS8vZycpIgorICAgICAgYXJncz0iJGFyZ3MgLUQke25hbWV9PSckdmFsdWUnIgorICAgICAgZGVmaW5lcz0iJGRlZmluZXMgLUQke25hbWV9PSckdmFsdWUnIgorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLUQqKQorICAgICAgYXJncz0iJGFyZ3MgJDEiCisgICAgICBkZWZpbmVzPSIkZGVmaW5lcyAkMSIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1JKQorICAgICAgYXJncz0iJGFyZ3MgLUkkMiIKKyAgICAgIGluY2x1ZGVzPSIkaW5jbHVkZXMgLUkkMiIKKyAgICAgIHNoaWZ0IDIKKyAgICA7OworICAgIC1JKikKKyAgICAgIGFyZ3M9IiRhcmdzICQxIgorICAgICAgaW5jbHVkZXM9IiRpbmNsdWRlcyAkMSIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1XfC1XZXh0cmEpCisgICAgICAjIFRPRE8gbWFwIGV4dHJhIHdhcm5pbmdzCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtV2FsbCkKKyAgICAgIGFyZ3M9IiRhcmdzIC1XYWxsIgorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLVdlcnJvcikKKyAgICAgIGFyZ3M9IiRhcmdzIC1XWCIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1XKikKKyAgICAgICMgVE9ETyBtYXAgc3BlY2lmaWMgd2FybmluZ3MKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1TKQorICAgICAgYXJncz0iJGFyZ3MgLUZBcyIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1vKQorICAgICAgb3V0ZGlyPSIkKGRpcm5hbWUgJDIpIgorICAgICAgYmFzZT0iJChiYXNlbmFtZSAkMnxzZWQgJ3MvXC5bXi5dKi8vZycpIgorICAgICAgaWYgWyAtbiAiJHNpbmdsZSIgXTsgdGhlbiAKKyAgICAgICAgb3V0cHV0PSItRm8kMiIKKyAgICAgIGVsc2UKKyAgICAgICAgb3V0cHV0PSItRmUkMiIKKyAgICAgIGZpCisgICAgICBpZiBbIC1uICIkYXNzZW1ibHkiIF07IHRoZW4KKyAgICAgICAgYXJncz0iJGFyZ3MgJG91dHB1dCIKKyAgICAgIGVsc2UKKyAgICAgICAgYXJncz0iJGFyZ3MgJG91dHB1dCAtRmQkb3V0ZGlyLyRiYXNlIC1GcCRvdXRkaXIvJGJhc2UgLUZhJG91dGRpci8kYmFzZSIKKyAgICAgIGZpCisgICAgICBzaGlmdCAyCisgICAgOzsKKyAgICAqLlMpCisgICAgICBzcmM9JDEKKyAgICAgIGFzc2VtYmx5PSJ0cnVlIgorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgKi5jKQorICAgICAgYXJncz0iJGFyZ3MgJDEiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAqKQorICAgICAgIyBBc3N1bWUgaXQncyBhbiBNU1ZDIGFyZ3VtZW50LCBhbmQgcGFzcyBpdCB0aHJvdWdoLgorICAgICAgYXJncz0iJGFyZ3MgJDEiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgZXNhYworZG9uZQorCitpZiBbIC1uICIkYXNzZW1ibHkiIF07IHRoZW4KKyAgICBpZiBbIC16ICIkb3V0ZGlyIiBdOyB0aGVuCisgICAgICBvdXRkaXI9Ii4iCisgICAgZmkKKyAgICBwcHNyYz0iJG91dGRpci8kKGJhc2VuYW1lICRzcmN8c2VkICdzLy5TJC8uYXNtL2cnKSIKKyAgICBlY2hvICIkY2wgLW5vbG9nbyAtRVAgJGluY2x1ZGVzICRkZWZpbmVzICRzcmMgPiAkcHBzcmMiCisgICAgIiRjbCIgLW5vbG9nbyAtRVAgJGluY2x1ZGVzICRkZWZpbmVzICRzcmMgPiAkcHBzcmMgfHwgZXhpdCAkPworICAgIG91dHB1dD0iJChlY2hvICRvdXRwdXQgfCBzZWQgJ3MlL0ZbZHBhXVteIF0qJSVnJykiCisgICAgYXJncz0iLW5vbG9nbyAtc2FmZXNlaCAkc2luZ2xlICRvdXRwdXQgJHBwc3JjIgorCisgICAgZWNobyAiJG1sICRhcmdzIgorICAgIGV2YWwgIlwiJG1sXCIgJGFyZ3MiCisgICAgcmVzdWx0PSQ/CisKKyAgICAjIHJlcXVpcmVkIHRvIGZpeCBtbDY0IGJyb2tlbiBvdXRwdXQ/CisgICAgI212ICoub2JqICRvdXRkaXIKK2Vsc2UKKyAgICBhcmdzPSIkbWQgJGFyZ3MiCisgICAgZWNobyAiJGNsICRhcmdzIgorICAgIGV2YWwgIlwiJGNsXCIgJGFyZ3MiCisgICAgcmVzdWx0PSQ/CitmaQorCitleGl0ICRyZXN1bHQKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9zeXN2LlMKaW5kZXggNGMyODljNi4uOTA2NDMxOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vc3lzdi5TCkBAIC03NCw3ICs3NCw4IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX19BUk1fQVJDSF83X18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF83QV9fKSBcCi0gICAgICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF83Ul9fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN01fXykKKyAgICAgICAgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdSX18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF83TV9fKSBcCisJfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdFTV9fKQogIyB1bmRlZiBfX0FSTV9BUkNIX18KICMgZGVmaW5lIF9fQVJNX0FSQ0hfXyA3CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2F2cjMyL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXZyMzIvZmZpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmYmEyYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2F2cjMyL2ZmaS5jCkBAIC0wLDAgKzEsNDIxIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZmZpLmMgLSBDb3B5cmlnaHQgKGMpIDIwMDkgIEJyYWRsZXkgU21pdGggPGJyYWRAYnJhZC1zbWl0aC5jby51az4KKworICAgQVZSMzIgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCisvKiAjZGVmaW5lIERFQlVHICovCisKK2V4dGVybiB2b2lkIGZmaV9jYWxsX1NZU1Yodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIGV4dGVuZGVkX2NpZiAqLAorICAgIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQqLCB1bnNpZ25lZCBpbnQsCisgICAgdm9pZCAoKmZuKSh2b2lkKSk7CitleHRlcm4gdm9pZCBmZmlfY2xvc3VyZV9TWVNWIChmZmlfY2xvc3VyZSAqKTsKKwordW5zaWduZWQgaW50IHBhc3Nfc3RydWN0X29uX3N0YWNrKGZmaV90eXBlICp0eXBlKQoreworICAgIGlmKHR5cGUtPnR5cGUgIT0gRkZJX1RZUEVfU1RSVUNUKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmKHR5cGUtPmFsaWdubWVudCA8IHR5cGUtPnNpemUgJiYKKyAgICAgICAgISh0eXBlLT5zaXplID09IDQgfHwgdHlwZS0+c2l6ZSA9PSA4KSAmJgorICAgICAgICAhKHR5cGUtPnNpemUgPT0gOCAmJiB0eXBlLT5hbGlnbm1lbnQgPj0gNCkpCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYodHlwZS0+c2l6ZSA9PSAzIHx8IHR5cGUtPnNpemUgPT0gNSB8fCB0eXBlLT5zaXplID09IDYgfHwKKyAgICAgICAgdHlwZS0+c2l6ZSA9PSA3KQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorCisvKiBmZmlfcHJlcF9hcmdzIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCisgKiBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cworICoKKyAqIFRoaXMgaXMgYW5ub3lpbmdseSBjb21wbGV4IHNpbmNlIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB1c2VkCisgKiByZWdpc3RlcnMuCisgKi8KKwordm9pZCBmZmlfcHJlcF9hcmdzKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdm9pZCAqKnBfYXJndjsKKyAgICBmZmlfdHlwZSAqKnBfYXJnOworICAgIGNoYXIgKnJlZ19iYXNlID0gc3RhY2s7CisgICAgY2hhciAqc3RhY2tfYmFzZSA9IHN0YWNrICsgMjA7CisgICAgdW5zaWduZWQgaW50IHN0YWNrX29mZnNldCA9IDA7CisgICAgdW5zaWduZWQgaW50IHJlZ19tYXNrID0gMDsKKworICAgIHBfYXJndiA9IGVjaWYtPmF2YWx1ZTsKKworICAgIC8qIElmIGNpZi0+ZmxhZ3MgaXMgc3RydWN0IHRoZW4gd2Uga25vdyBpdCdzIG5vdCBwYXNzZWQgaW4gcmVnaXN0ZXJzICovCisgICAgaWYoZWNpZi0+Y2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QpCisgICAgeworICAgICAgICAqKHZvaWQqKilyZWdfYmFzZSA9IGVjaWYtPnJ2YWx1ZTsKKyAgICAgICAgcmVnX21hc2sgfD0gMTsKKyAgICB9CisKKyAgICBmb3IoaSA9IDAsIHBfYXJnID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXM7IGkgPCBlY2lmLT5jaWYtPm5hcmdzOworICAgICAgICBpKyssIHBfYXJnKyspCisgICAgeworICAgICAgICBzaXplX3QgeiA9ICgqcF9hcmcpLT5zaXplOworICAgICAgICBpbnQgYWxpZ25tZW50ID0gKCpwX2FyZyktPmFsaWdubWVudDsKKyAgICAgICAgaW50IHR5cGUgPSAoKnBfYXJnKS0+dHlwZTsKKyAgICAgICAgY2hhciAqYWRkciA9IDA7CisKKyAgICAgICAgaWYoeiAlIDQgIT0gMCkKKyAgICAgICAgICAgIHogKz0gKDQgLSB6ICUgNCk7CisKKyAgICAgICAgaWYocmVnX21hc2sgIT0gMHgxZikKKyAgICAgICAgeworICAgICAgICAgICAgaWYocGFzc19zdHJ1Y3Rfb25fc3RhY2soKnBfYXJnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhZGRyID0gc3RhY2tfYmFzZSArIHN0YWNrX29mZnNldDsKKyAgICAgICAgICAgICAgICBzdGFja19vZmZzZXQgKz0gejsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoeiA9PSBzaXplb2YoaW50KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGFyIGluZGV4ID0gMDsKKworICAgICAgICAgICAgICAgIHdoaWxlKChyZWdfbWFzayA+PiBpbmRleCkgJiAxKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworCisgICAgICAgICAgICAgICAgYWRkciA9IHJlZ19iYXNlICsgKGluZGV4ICogNCk7CisgICAgICAgICAgICAgICAgcmVnX21hc2sgfD0gKDEgPDwgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZih6ID09IDIgKiBzaXplb2YoaW50KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZighKChyZWdfbWFzayA+PiAxKSAmIDEpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkciA9IHJlZ19iYXNlICsgNDsKKyAgICAgICAgICAgICAgICAgICAgcmVnX21hc2sgfD0gKDMgPDwgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoISgocmVnX21hc2sgPj4gMykgJiAxKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFkZHIgPSByZWdfYmFzZSArIDEyOworICAgICAgICAgICAgICAgICAgICByZWdfbWFzayB8PSAoMyA8PCAzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZighYWRkcikKKyAgICAgICAgeworICAgICAgICAgICAgYWRkciA9IHN0YWNrX2Jhc2UgKyBzdGFja19vZmZzZXQ7CisgICAgICAgICAgICBzdGFja19vZmZzZXQgKz0gejsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUICYmICgqcF9hcmcpLT5lbGVtZW50c1sxXSA9PSBOVUxMKQorICAgICAgICAgICAgdHlwZSA9ICgqcF9hcmcpLT5lbGVtZW50c1swXS0+dHlwZTsKKworICAgICAgICBzd2l0Y2godHlwZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQgKilhZGRyID0gKHVuc2lnbmVkIGludCkqKFVJTlQ4ICopKCpwX2FyZ3YpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisgICAgICAgICAgICAqKHNpZ25lZCBpbnQgKilhZGRyID0gKHNpZ25lZCBpbnQpKihTSU5UOCAqKSgqcF9hcmd2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyAgICAgICAgICAgICoodW5zaWduZWQgaW50ICopYWRkciA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMTYgKikoKnBfYXJndik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisgICAgICAgICAgICAqKHNpZ25lZCBpbnQgKilhZGRyID0gKHNpZ25lZCBpbnQpKihTSU5UMTYgKikoKnBfYXJndik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1lbWNweShhZGRyLCAqcF9hcmd2LCB6KTsKKyAgICAgICAgfQorCisgICAgICAgIHBfYXJndisrOworICAgIH0KKworI2lmZGVmIERFQlVHCisgICAgLyogRGVidWdnaW5nICovCisgICAgZm9yKGkgPSAwOyBpIDwgNTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYoKHJlZ19tYXNrICYgKDEgPDwgaSkpID09IDApCisgICAgICAgICAgICBwcmludGYoInIlZDogKHVudXNlZClcbiIsIDEyIC0gaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiciVkOiAweCUwOHhcbiIsIDEyIC0gaSwgKCh1bnNpZ25lZCBpbnQqKXJlZ19iYXNlKVtpXSk7CisgICAgfQorCisgICAgZm9yKGkgPSAwOyBpIDwgc3RhY2tfb2Zmc2V0IC8gNDsgaSsrKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJzcCslZDogMHglMDh4XG4iLCBpKjQsICgodW5zaWduZWQgaW50KilzdGFja19iYXNlKVtpXSk7CisgICAgfQorI2VuZGlmCit9CisKKy8qIFBlcmZvcm0gbWFjaGluZSBkZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcgKi8KK2ZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmX21hY2hkZXAoZmZpX2NpZiAqY2lmKQoreworICAgIC8qIFJvdW5kIHRoZSBzdGFjayB1cCB0byBhIG11bHRpcGxlIG9mIDggYnl0ZXMuICBUaGlzIGlzbid0IG5lZWRlZAorICAgICAqIGV2ZXJ5d2hlcmUsIGJ1dCBpdCBpcyBvbiBzb21lIHBsYXRmb3JtcywgYW5kIGl0IGRvZXNuJ3QgaGFybQorICAgICAqIGFueXRoaW5nIHdoZW4gaXQgaXNuJ3QgbmVlZGVkLiAqLworICAgIGNpZi0+Ynl0ZXMgPSAoY2lmLT5ieXRlcyArIDcpICYgfjc7CisKKyAgICAvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgaGUgcmV0dXJuIHZhbHVlIGlzIGluIGZhY3QgYSBzdHJ1Y3QgKi8KKyAgICBjaWYtPnJzdHJ1Y3RfZmxhZyA9IDA7CisKKyAgICAvKiBTZXQgdGhlIHJldHVybiB0eXBlIGZsYWcgKi8KKyAgICBzd2l0Y2goY2lmLT5ydHlwZS0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKUZGSV9UWVBFX1VJTlQ4OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZClGRklfVFlQRV9VSU5UMTY7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UMzI6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UMzI6CisgICAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKUZGSV9UWVBFX1VJTlQzMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpRkZJX1RZUEVfVUlOVDY0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyAgICAgICAgY2lmLT5yc3RydWN0X2ZsYWcgPSAxOworICAgICAgICBpZighcGFzc19zdHJ1Y3Rfb25fc3RhY2soY2lmLT5ydHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGNpZi0+cnR5cGUtPnNpemUgPD0gMSkKKyAgICAgICAgICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKUZGSV9UWVBFX1VJTlQ4OworICAgICAgICAgICAgZWxzZSBpZihjaWYtPnJ0eXBlLT5zaXplIDw9IDIpCisgICAgICAgICAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZClGRklfVFlQRV9VSU5UMTY7CisgICAgICAgICAgICBlbHNlIGlmKGNpZi0+cnR5cGUtPnNpemUgPD0gNCkKKyAgICAgICAgICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKUZGSV9UWVBFX1VJTlQzMjsKKyAgICAgICAgICAgIGVsc2UgaWYoY2lmLT5ydHlwZS0+c2l6ZSA8PSA4KQorICAgICAgICAgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpRkZJX1RZUEVfVUlOVDY0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpY2lmLT5ydHlwZS0+dHlwZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKWNpZi0+cnR5cGUtPnR5cGU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpY2lmLT5ydHlwZS0+dHlwZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIEZGSV9PSzsKK30KKwordm9pZCBmZmlfY2FsbChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSkKK3sKKyAgICBleHRlbmRlZF9jaWYgZWNpZjsKKworICAgIHVuc2lnbmVkIGludCBzaXplID0gMCwgaSA9IDA7CisgICAgZmZpX3R5cGUgKipwX2FyZzsKKworICAgIGVjaWYuY2lmID0gY2lmOworICAgIGVjaWYuYXZhbHVlID0gYXZhbHVlOworCisgICAgZm9yKGkgPSAwLCBwX2FyZyA9IGNpZi0+YXJnX3R5cGVzOyBpIDwgY2lmLT5uYXJnczsgaSsrLCBwX2FyZysrKQorICAgICAgICBzaXplICs9ICgqcF9hcmcpLT5zaXplICsgKDQgLSAoKnBfYXJnKS0+c2l6ZSAlIDQpOworCisgICAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHJldHVybiB2YWx1ZQorICAgICAqIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lICovCisKKyAgICAvKiBJZiBjaWYtPmZsYWdzIGlzIHN0cnVjdCB0aGVuIGl0J3Mgbm90IHN1aXRhYmxlIGZvciByZWdpc3RlcnMgKi8KKyAgICBpZigocnZhbHVlID09IE5VTEwpICYmIChjaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCkpCisgICAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhKGNpZi0+cnR5cGUtPnNpemUpOworICAgIGVsc2UKKyAgICAgICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7CisKKyAgICBzd2l0Y2goY2lmLT5hYmkpCisgICAgeworICAgIGNhc2UgRkZJX1NZU1Y6CisgICAgICAgIGZmaV9jYWxsX1NZU1YoZmZpX3ByZXBfYXJncywgJmVjaWYsIHNpemUsIGNpZi0+ZmxhZ3MsCisgICAgICAgICAgICBlY2lmLnJ2YWx1ZSwgY2lmLT5yc3RydWN0X2ZsYWcsIGZuKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgRkZJX0FTU0VSVCgwKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YoY2hhciAqc3RhY2ssIHZvaWQgKipydmFsdWUsCisgICAgdm9pZCAqKmF2YWx1ZSwgZmZpX2NpZiAqY2lmKQoreworICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpLCByZWdfbWFzayA9IDA7CisgICAgcmVnaXN0ZXIgdm9pZCAqKnBfYXJndjsKKyAgICByZWdpc3RlciBmZmlfdHlwZSAqKnBfYXJnOworICAgIHJlZ2lzdGVyIGNoYXIgKnJlZ19iYXNlID0gc3RhY2s7CisgICAgcmVnaXN0ZXIgY2hhciAqc3RhY2tfYmFzZSA9IHN0YWNrICsgMjA7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHN0YWNrX29mZnNldCA9IDA7CisKKyNpZmRlZiBERUJVRworICAgIC8qIERlYnVnZ2luZyAqLworICAgIGZvcihpID0gMDsgaSA8IGNpZi0+bmFyZ3MgKyA3OyBpKyspCisgICAgeworICAgICAgICBwcmludGYoInNwKyVkOiAweCUwOHhcbiIsIGkqNCwgKCh1bnNpZ25lZCBpbnQqKXN0YWNrKVtpXSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBJZiBjaWYtPmZsYWdzIGlzIHN0cnVjdCB0aGVuIHdlIGtub3cgaXQncyBub3QgcGFzc2VkIGluIHJlZ2lzdGVycyAqLworICAgIGlmKGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUKQorICAgIHsKKyAgICAgICAgKnJ2YWx1ZSA9ICoodm9pZCAqKilyZWdfYmFzZTsKKyAgICAgICAgcmVnX21hc2sgfD0gMTsKKyAgICB9CisKKyAgICBwX2FyZ3YgPSBhdmFsdWU7CisKKyAgICBmb3IoaSA9IDAsIHBfYXJnID0gY2lmLT5hcmdfdHlwZXM7IGkgPCBjaWYtPm5hcmdzOyBpKyssIHBfYXJnKyspCisgICAgeworICAgICAgICBzaXplX3QgeiA9ICgqcF9hcmcpLT5zaXplOworICAgICAgICBpbnQgYWxpZ25tZW50ID0gKCpwX2FyZyktPmFsaWdubWVudDsKKworICAgICAgICAqcF9hcmd2ID0gMDsKKworICAgICAgICBpZih6ICUgNCAhPSAwKQorICAgICAgICAgICAgeiArPSAoNCAtIHogJSA0KTsKKworICAgICAgICBpZihyZWdfbWFzayAhPSAweDFmKQorICAgICAgICB7CisgICAgICAgICAgICBpZihwYXNzX3N0cnVjdF9vbl9zdGFjaygqcF9hcmcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwX2FyZ3YgPSAodm9pZCopc3RhY2tfYmFzZSArIHN0YWNrX29mZnNldDsKKyAgICAgICAgICAgICAgICBzdGFja19vZmZzZXQgKz0gejsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoeiA8PSBzaXplb2YoaW50KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGFyIGluZGV4ID0gMDsKKworICAgICAgICAgICAgICAgIHdoaWxlKChyZWdfbWFzayA+PiBpbmRleCkgJiAxKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworCisgICAgICAgICAgICAgICAgKnBfYXJndiA9ICh2b2lkKilyZWdfYmFzZSArIChpbmRleCAqIDQpOworICAgICAgICAgICAgICAgIHJlZ19tYXNrIHw9ICgxIDw8IGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoeiA9PSAyICogc2l6ZW9mKGludCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoISgocmVnX21hc2sgPj4gMSkgJiAxKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwX2FyZ3YgPSAodm9pZCopcmVnX2Jhc2UgKyA0OworICAgICAgICAgICAgICAgICAgICByZWdfbWFzayB8PSAoMyA8PCAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZighKChyZWdfbWFzayA+PiAzKSAmIDEpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBfYXJndiA9ICh2b2lkKilyZWdfYmFzZSArIDEyOworICAgICAgICAgICAgICAgICAgICByZWdfbWFzayB8PSAoMyA8PCAzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZighKnBfYXJndikKKyAgICAgICAgeworICAgICAgICAgICAgKnBfYXJndiA9ICh2b2lkKilzdGFja19iYXNlICsgc3RhY2tfb2Zmc2V0OworICAgICAgICAgICAgc3RhY2tfb2Zmc2V0ICs9IHo7CisgICAgICAgIH0KKworICAgICAgICBpZigoKnBfYXJnKS0+dHlwZSAhPSBGRklfVFlQRV9TVFJVQ1QgfHwKKyAgICAgICAgICAgICgqcF9hcmcpLT5lbGVtZW50c1sxXSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBpZihhbGlnbm1lbnQgPT0gMSkKKyAgICAgICAgICAgICAgICAqKih1bnNpZ25lZCBpbnQqKilwX2FyZ3YgPDw9IDI0OworICAgICAgICAgICAgZWxzZSBpZihhbGlnbm1lbnQgPT0gMikKKyAgICAgICAgICAgICAgICAqKih1bnNpZ25lZCBpbnQqKilwX2FyZ3YgPDw9IDE2OworICAgICAgICB9CisKKyAgICAgICAgcF9hcmd2Kys7CisgICAgfQorCisjaWZkZWYgREVCVUcKKyAgICAvKiBEZWJ1Z2dpbmcgKi8KKyAgICBmb3IoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyspCisgICAgeworICAgICAgICBwcmludGYoInNwKyVkOiAweCUwOHhcbiIsIGkqNCwgKigoKHVuc2lnbmVkIGludCoqKWF2YWx1ZSlbaV0pKTsKKyAgICB9CisjZW5kaWYKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBqdW1wZWQgdG8gYnkgdGhlIHRyYW1wb2xpbmUgKi8KKwordW5zaWduZWQgaW50IGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHZvaWQgKipyZXNwcCwKKyAgICB2b2lkICphcmdzKQoreworICAgIGZmaV9jaWYgKmNpZjsKKyAgICB2b2lkICoqYXJnX2FyZWE7CisgICAgdW5zaWduZWQgaW50IGksIHNpemUgPSAwOworICAgIGZmaV90eXBlICoqcF9hcmc7CisKKyAgICBjaWYgPSBjbG9zdXJlLT5jaWY7CisKKyAgICBmb3IoaSA9IDAsIHBfYXJnID0gY2lmLT5hcmdfdHlwZXM7IGkgPCBjaWYtPm5hcmdzOyBpKyssIHBfYXJnKyspCisgICAgICAgIHNpemUgKz0gKCpwX2FyZyktPnNpemUgKyAoNCAtICgqcF9hcmcpLT5zaXplICUgNCk7CisKKyAgICBhcmdfYXJlYSA9ICh2b2lkICoqKWFsbG9jYShzaXplKTsKKworICAgIC8qIHRoaXMgY2FsbCB3aWxsIGluaXRpYWxpemUgQVJHX0FSRUEsIHN1Y2ggdGhhdCBlYWNoIGVsZW1lbnQgaW4gdGhhdAorICAgICAqIGFycmF5IHBvaW50cyB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvbiB0aGUgc3RhY2s7IGFuZCBpZiB0aGUKKyAgICAgKiBmdW5jdGlvbiByZXR1cm5zIGEgc3RydWN0dXJlLCBpdCB3aWxsIHJlLXNldCBSRVNQIHRvIHBvaW50IHRvIHRoZQorICAgICAqIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcy4gKi8KKworICAgIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVihhcmdzLCByZXNwcCwgYXJnX2FyZWEsIGNpZik7CisKKyAgICAoY2xvc3VyZS0+ZnVuKShjaWYsICpyZXNwcCwgYXJnX2FyZWEsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CisKKyAgICByZXR1cm4gY2lmLT5mbGFnczsKK30KKworZmZpX3N0YXR1cyBmZmlfcHJlcF9jbG9zdXJlX2xvYyhmZmlfY2xvc3VyZSogY2xvc3VyZSwgZmZpX2NpZiogY2lmLAorICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLCB2b2lkKiwgdm9pZCoqLCB2b2lkKiksIHZvaWQgKnVzZXJfZGF0YSwKKyAgICB2b2lkICpjb2RlbG9jKQoreworICAgIEZGSV9BU1NFUlQoY2lmLT5hYmkgPT0gRkZJX1NZU1YpOworCisgICAgdW5zaWduZWQgY2hhciAqX190cmFtcCA9ICh1bnNpZ25lZCBjaGFyKikoJmNsb3N1cmUtPnRyYW1wWzBdKTsKKyAgICB1bnNpZ25lZCBpbnQgIF9fZnVuID0gKHVuc2lnbmVkIGludCkoJmZmaV9jbG9zdXJlX1NZU1YpOworICAgIHVuc2lnbmVkIGludCAgX19jdHggPSAodW5zaWduZWQgaW50KShjb2RlbG9jKTsKKyAgICB1bnNpZ25lZCBpbnQgIF9fcnN0cnVjdF9mbGFnID0gKHVuc2lnbmVkIGludCkoY2lmLT5yc3RydWN0X2ZsYWcpOworICAgIHVuc2lnbmVkIGludCAgX19pbm5lciA9ICh1bnNpZ25lZCBpbnQpKCZmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTsKKyAgICAqKHVuc2lnbmVkIGludCopICZfX3RyYW1wWzBdID0gMHhlYmNkMWYwMDsgICAgLyogcHVzaG0gIHI4LXIxMiAqLworICAgICoodW5zaWduZWQgaW50KikgJl9fdHJhbXBbNF0gPSAweGZlZmMwMDEwOyAgICAvKiBsZC53ICAgcjEyLCBwY1sxNl0gKi8KKyAgICAqKHVuc2lnbmVkIGludCopICZfX3RyYW1wWzhdID0gMHhmZWZiMDAxMDsgICAgLyogbGQudyAgIHIxMSwgcGNbMTZdICovCisgICAgKih1bnNpZ25lZCBpbnQqKSAmX190cmFtcFsxMl0gPSAweGZlZmEwMDEwOyAgIC8qIGxkLncgICByMTAsIHBjWzE2XSAqLworICAgICoodW5zaWduZWQgaW50KikgJl9fdHJhbXBbMTZdID0gMHhmZWZmMDAxMDsgICAvKiBsZC53ICAgcGMsIHBjWzE2XSAqLworICAgICoodW5zaWduZWQgaW50KikgJl9fdHJhbXBbMjBdID0gX19jdHg7CisgICAgKih1bnNpZ25lZCBpbnQqKSAmX190cmFtcFsyNF0gPSBfX3JzdHJ1Y3RfZmxhZzsKKyAgICAqKHVuc2lnbmVkIGludCopICZfX3RyYW1wWzI4XSA9IF9faW5uZXI7CisgICAgKih1bnNpZ25lZCBpbnQqKSAmX190cmFtcFszMl0gPSBfX2Z1bjsKKyAgICBzeXNjYWxsKF9fTlJfY2FjaGVmbHVzaCwgMCwgKCZfX3RyYW1wWzBdKSwgMzYpOworCisgICAgY2xvc3VyZS0+Y2lmID0gY2lmOworICAgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKyAgICBjbG9zdXJlLT5mdW4gID0gZnVuOworCisgICAgcmV0dXJuIEZGSV9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXZyMzIvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hdnIzMi9mZml0YXJnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzc5OWIxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXZyMzIvZmZpdGFyZ2V0LmgKQEAgLTAsMCArMSw1MCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLUMtKi0KKyAgIGZmaXRhcmdldC5oIC0gQ29weXJpZ2h0IChjKSAyMDA5ICBCcmFkbGV5IFNtaXRoIDxicmFkQGJyYWQtc21pdGguY28udWs+CisgICBUYXJnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MgZm9yIEFWUjMyLgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgTElCRkZJX1RBUkdFVF9ICisjZGVmaW5lIExJQkZGSV9UQVJHRVRfSAorCisjaWZuZGVmIExJQkZGSV9BU00KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICBmZmlfYXJnOwordHlwZWRlZiBzaWduZWQgbG9uZyAgICAgICAgICAgIGZmaV9zYXJnOworCit0eXBlZGVmIGVudW0gZmZpX2FiaSB7CisgIEZGSV9GSVJTVF9BQkkgPSAwLAorICBGRklfU1lTViwKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1NZU1YsCisgIEZGSV9MQVNUX0FCSSA9IEZGSV9ERUZBVUxUX0FCSSArIDEKK30gZmZpX2FiaTsKKyNlbmRpZgorCisjZGVmaW5lIEZGSV9FWFRSQV9DSUZfRklFTERTIHVuc2lnbmVkIGludCByc3RydWN0X2ZsYWcKKworLyogRGVmaW5pdGlvbnMgZm9yIGNsb3N1cmVzICovCisKKyNkZWZpbmUgRkZJX0NMT1NVUkVTIDEKKyNkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAzNgorI2RlZmluZSBGRklfTkFUSVZFX1JBV19BUEkgMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2F2cjMyL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2F2cjMyL3N5c3YuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTg0YjNjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXZyMzIvc3lzdi5TCkBAIC0wLDAgKzEsMjA4IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgc3lzdi5TIC0gQ29weXJpZ2h0IChjKSAyMDA5ICBCcmFkbGV5IFNtaXRoIDxicmFkQGJyYWQtc21pdGguY28udWs+CisKKyAgIEFWUjMyIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAgIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgICBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICAgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBMSUJGRklfQVNNCisjaW5jbHVkZSA8ZmZpY29uZmlnLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisKKyAgICAvKiByMTI6ICBmZmlfcHJlcF9hcmdzCisgICAgICogcjExOiAgJmVjaWYKKyAgICAgKiByMTA6ICBzaXplCisgICAgICogcjk6ICAgY2lmLT5mbGFncworICAgICAqIHI4OiAgIGVjaWYucnZhbHVlCisgICAgICogc3ArMDogY2lmLT5yc3RydWN0X2ZsYWcKKyAgICAgKiBzcCs0OiBmbiAqLworCisgICAgLnRleHQKKyAgICAuYWxpZ24gIDEKKyAgICAuZ2xvYmwgIGZmaV9jYWxsX1NZU1YKKyAgICAudHlwZSAgIGZmaV9jYWxsX1NZU1YsIEBmdW5jdGlvbgorZmZpX2NhbGxfU1lTVjoKKyAgICBzdG0gICAgIC0tc3AsIHIwLHIxLGxyCisgICAgc3RtICAgICAtLXNwLCByOC1yMTIKKyAgICBtb3YgICAgIHIwLCBzcAorCisgICAgLyogTWFrZSByb29tIGZvciBhbGwgb2YgdGhlIG5ldyBhcmdzLiAqLworICAgIHN1YiAgICAgc3AsIHIxMAorICAgIC8qIFBhZCB0byBtYWtlIHdheSBmb3IgcG90ZW50aWFsIHNraXBwZWQgcmVnaXN0ZXJzICovCisgICAgc3ViICAgICBzcCwgMjAKKworICAgIC8qIENhbGwgZmZpX3ByZXBfYXJncyhzdGFjaywgJmVjaWYpLiAqLworICAgIC8qIHIxMSBhbHJlYWR5IHNldCAqLworICAgIG1vdiAgICAgcjEsIHIxMgorICAgIG1vdiAgICAgcjEyLCBzcAorICAgIGljYWxsICAgcjEKKworICAgIC8qIFNhdmUgbmV3IGFyZ3VtZW50IHNpemUgKi8KKyAgICBtb3YgICAgIHIxLCByMTIKKworICAgIC8qIE1vdmUgZmlyc3QgNSBwYXJhbWV0ZXJzIGluIHJlZ2lzdGVycy4gKi8KKyAgICBsZG0gICAgIHNwKyssIHI4LXIxMgorCisgICAgLyogY2FsbCAoZm4pICguLi4pLiAqLworICAgIGxkLncgICAgcjEsIHIwWzM2XQorICAgIGljYWxsICAgcjEKKworICAgIC8qIFJlbW92ZSB0aGUgc3BhY2Ugd2UgcHVzaGVkIGZvciB0aGUgYXJncy4gKi8KKyAgICBtb3YgICAgIHNwLCByMAorCisgICAgLyogTG9hZCByMSB3aXRoIHRoZSByc3RydWN0IGZsYWcuICovCisgICAgbGQudyAgICByMSwgc3BbMzJdCisKKyAgICAvKiBMb2FkIHI5IHdpdGggdGhlIHJldHVybiB0eXBlIGNvZGUuICovCisgICAgbGQudyAgICByOSwgc3BbMTJdCisKKyAgICAvKiBMb2FkIHI4IHdpdGggdGhlIHJldHVybiB2YWx1ZSBwb2ludGVyLiAqLworICAgIGxkLncgICAgcjgsIHNwWzE2XQorCisgICAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBwb2ludGVyIGlzIE5VTEwsIGFzc3VtZSBubyByZXR1cm4gdmFsdWUuICovCisgICAgY3AudyAgICByOCwgMAorICAgIGJyZXEgICAgLkxlbmQKKworICAgIC8qIENoZWNrIGlmIHJldHVybiB0eXBlIGlzIGFjdHVhbGx5IGEgc3RydWN0ICovCisgICAgY3AudyAgICByMSwgMAorICAgIGJyZXEgICAgMWYKKworICAgIC8qIFJldHVybiA4Yml0ICovCisgICAgY3AudyAgICByOSwgRkZJX1RZUEVfVUlOVDgKKyAgICBicmVxICAgIC5Mc3RvcmU4CisKKyAgICAvKiBSZXR1cm4gMTZiaXQgKi8KKyAgICBjcC53ICAgIHI5LCBGRklfVFlQRV9VSU5UMTYKKyAgICBicmVxICAgIC5Mc3RvcmUxNgorCisxOgorICAgIC8qIFJldHVybiAzMmJpdCAqLworICAgIGNwLncgICAgcjksIEZGSV9UWVBFX1VJTlQzMgorICAgIGJyZXEgICAgLkxzdG9yZTMyCisgICAgY3AudyAgICByOSwgRkZJX1RZUEVfVUlOVDE2CisgICAgYnJlcSAgICAuTHN0b3JlMzIKKyAgICBjcC53ICAgIHI5LCBGRklfVFlQRV9VSU5UOAorICAgIGJyZXEgICAgLkxzdG9yZTMyCisKKyAgICAvKiBSZXR1cm4gNjRiaXQgKi8KKyAgICBjcC53ICAgIHI5LCBGRklfVFlQRV9VSU5UNjQKKyAgICBicmVxICAgIC5Mc3RvcmU2NAorCisgICAgLyogRGlkbid0IG1hdGNoIGFueXRoaW5nICovCisgICAgYnJhbCAgICAuTGVuZAorCisuTHN0b3JlNjQ6CisgICAgc3QudyAgICByOFswXSwgcjExCisgICAgc3QudyAgICByOFs0XSwgcjEwCisgICAgYnJhbCAgICAuTGVuZAorCisuTHN0b3JlMzI6CisgICAgc3QudyAgICByOFswXSwgcjEyCisgICAgYnJhbCAgICAuTGVuZAorCisuTHN0b3JlMTY6CisgICAgc3QuaCAgICByOFswXSwgcjEyCisgICAgYnJhbCAgICAuTGVuZAorCisuTHN0b3JlODoKKyAgICBzdC5iICAgIHI4WzBdLCByMTIKKyAgICBicmFsICAgIC5MZW5kCisKKy5MZW5kOgorICAgIHN1YiAgICAgc3AsIC0yMAorICAgIGxkbSAgICAgc3ArKywgcjAscjEscGMKKworICAgIC5zaXplICAgZmZpX2NhbGxfU1lTViwgLiAtIGZmaV9jYWxsX1NZU1YKKworCisgICAgLyogcjEyOiAgX19jdHgKKyAgICAgKiByMTE6ICBfX3JzdHJ1Y3RfZmxhZworICAgICAqIHIxMDogIF9faW5uZXIgKi8KKworICAgIC5hbGlnbiAgMQorICAgIC5nbG9ibCAgZmZpX2Nsb3N1cmVfU1lTVgorICAgIC50eXBlICAgZmZpX2Nsb3N1cmVfU1lTViwgQGZ1bmN0aW9uCitmZmlfY2xvc3VyZV9TWVNWOgorICAgIHN0bSAgICAgLS1zcCwgcjAsbHIKKyAgICBtb3YgICAgIHIwLCByMTEKKyAgICBtb3YgICAgIHI4LCByMTAKKyAgICBzdWIgICAgIHIxMCwgc3AsIC04CisgICAgc3ViICAgICBzcCwgMTIKKyAgICBzdC53ICAgIHNwWzhdLCBzcAorICAgIHN1YiAgICAgcjExLCBzcCwgLTgKKyAgICBpY2FsbCAgIHI4CisKKyAgICAvKiBDaGVjayBpZiByZXR1cm4gdHlwZSBpcyBhY3R1YWxseSBhIHN0cnVjdCAqLworICAgIGNwLncgICAgcjAsIDAKKyAgICBicmVxICAgIDFmCisKKyAgICAvKiBSZXR1cm4gOGJpdCAqLworICAgIGNwLncgICAgcjEyLCBGRklfVFlQRV9VSU5UOAorICAgIGJyZXEgICAgLkxnZXQ4CisKKyAgICAvKiBSZXR1cm4gMTZiaXQgKi8KKyAgICBjcC53ICAgIHIxMiwgRkZJX1RZUEVfVUlOVDE2CisgICAgYnJlcSAgICAuTGdldDE2CisKKzE6CisgICAgLyogUmV0dXJuIDMyYml0ICovCisgICAgY3AudyAgICByMTIsIEZGSV9UWVBFX1VJTlQzMgorICAgIGJyZXEgICAgLkxnZXQzMgorICAgIGNwLncgICAgcjEyLCBGRklfVFlQRV9VSU5UMTYKKyAgICBicmVxICAgIC5MZ2V0MzIKKyAgICBjcC53ICAgIHIxMiwgRkZJX1RZUEVfVUlOVDgKKyAgICBicmVxICAgIC5MZ2V0MzIKKworICAgIC8qIFJldHVybiA2NGJpdCAqLworICAgIGNwLncgICAgcjEyLCBGRklfVFlQRV9VSU5UNjQKKyAgICBicmVxICAgIC5MZ2V0NjQKKworICAgIC8qIERpZG4ndCBtYXRjaCBhbnl0aGluZyAqLworICAgIGJyYWwgICAgLkxjbGVuZAorCisuTGdldDY0OgorICAgIGxkLncgICAgcjExLCBzcFswXQorICAgIGxkLncgICAgcjEwLCBzcFs0XQorICAgIGJyYWwgICAgLkxjbGVuZAorCisuTGdldDMyOgorICAgIGxkLncgICAgcjEyLCBzcFswXQorICAgIGJyYWwgICAgLkxjbGVuZAorCisuTGdldDE2OgorICAgIGxkLnVoICAgcjEyLCBzcFswXQorICAgIGJyYWwgICAgLkxjbGVuZAorCisuTGdldDg6CisgICAgbGQudWIgICByMTIsIHNwWzBdCisgICAgYnJhbCAgICAuTGNsZW5kCisKKy5MY2xlbmQ6CisgICAgc3ViICAgICBzcCwgLTEyCisgICAgbGRtICAgICBzcCsrLCByMCxscgorICAgIHN1YiAgICAgc3AsIC0yMAorICAgIG1vdiAgICAgcGMsIGxyCisKKyAgICAuc2l6ZSAgIGZmaV9jbG9zdXJlX1NZU1YsIC4gLSBmZmlfY2xvc3VyZV9TWVNWCisKKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKyAgICAuc2VjdGlvbiAgICAubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Nsb3N1cmVzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9jbG9zdXJlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMTU2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9jbG9zdXJlcy5jCkBAIC0wLDAgKzEsNjEwIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgY2xvc3VyZXMuYyAtIENvcHlyaWdodCAoYykgMjAwNyAgUmVkIEhhdCwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCisKKyAgIENvZGUgdG8gYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUgbWVtb3J5IGZvciBjbG9zdXJlcy4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQgX19saW51eF9fICYmICFkZWZpbmVkIF9HTlVfU09VUkNFCisjZGVmaW5lIF9HTlVfU09VUkNFIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorCisjaWZuZGVmIEZGSV9NTUFQX0VYRUNfV1JJVAorIyBpZiBfX2dudV9saW51eF9fCisvKiBUaGlzIG1hY3JvIGluZGljYXRlcyBpdCBtYXkgYmUgZm9yYmlkZGVuIHRvIG1hcCBhbm9ueW1vdXMgbWVtb3J5CisgICB3aXRoIGJvdGggd3JpdGUgYW5kIGV4ZWN1dGUgcGVybWlzc2lvbi4gIENvZGUgY29tcGlsZWQgd2hlbiB0aGlzCisgICBvcHRpb24gaXMgZGVmaW5lZCB3aWxsIGF0dGVtcHQgdG8gbWFwIHN1Y2ggcGFnZXMgb25jZSwgYnV0IGlmIGl0CisgICBmYWlscywgaXQgZmFsbHMgYmFjayB0byBjcmVhdGluZyBhIHRlbXBvcmFyeSBmaWxlIGluIGEgd3JpdGFibGUgYW5kCisgICBleGVjdXRhYmxlIGZpbGVzeXN0ZW0gYW5kIG1hcHBpbmcgcGFnZXMgZnJvbSBpdCBpbnRvIHNlcGFyYXRlCisgICBsb2NhdGlvbnMgaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHNwYWNlLCBvbmUgbG9jYXRpb24gd3JpdGFibGUgYW5kCisgICBhbm90aGVyIGV4ZWN1dGFibGUuICAqLworIyAgZGVmaW5lIEZGSV9NTUFQX0VYRUNfV1JJVCAxCisjICBkZWZpbmUgSEFWRV9NTlRFTlQgMQorIyBlbmRpZgorIyBpZiBkZWZpbmVkKFg4Nl9XSU4zMikgfHwgZGVmaW5lZChYODZfV0lONjQpCisvKiBXaW5kb3dzIHN5c3RlbXMgbWF5IGhhdmUgRGF0YSBFeGVjdXRpb24gUHJvdGVjdGlvbiAoREVQKSBlbmFibGVkLCAKKyAgIHdoaWNoIHJlcXVpcmVzIHRoZSB1c2Ugb2YgVmlydHVhbE1hbGxvYy9WaXJ0dWFsRnJlZSB0byBhbGxvYy9mcmVlCisgICBleGVjdXRhYmxlIG1lbW9yeS4gKi8KKyMgIGRlZmluZSBGRklfTU1BUF9FWEVDX1dSSVQgMQorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBGRklfTU1BUF9FWEVDX1dSSVQgJiYgIWRlZmluZWQgRkZJX01NQVBfRVhFQ19TRUxJTlVYCisjIGlmZGVmIF9fbGludXhfXworLyogV2hlbiBkZWZpbmVkIHRvIDEgY2hlY2sgZm9yIFNFTGludXggYW5kIGlmIFNFTGludXggaXMgYWN0aXZlLAorICAgZG9uJ3QgYXR0ZW1wdCBQUk9UX0VYRUN8UFJPVF9XUklURSBtYXBwaW5nIGF0IGFsbCwgYXMgdGhhdAorICAgbWlnaHQgY2F1c2UgYXVkaXQgbWVzc2FnZXMuICAqLworIyAgZGVmaW5lIEZGSV9NTUFQX0VYRUNfU0VMSU5VWCAxCisjIGVuZGlmCisjZW5kaWYKKworI2lmIEZGSV9DTE9TVVJFUworCisjIGlmIEZGSV9NTUFQX0VYRUNfV1JJVAorCisjZGVmaW5lIFVTRV9MT0NLUyAxCisjZGVmaW5lIFVTRV9ETF9QUkVGSVggMQorI2lmZGVmIF9fR05VQ19fCisjaWZuZGVmIFVTRV9CVUlMVElOX0ZGUworI2RlZmluZSBVU0VfQlVJTFRJTl9GRlMgMQorI2VuZGlmCisjZW5kaWYKKworLyogV2UgbmVlZCB0byB1c2UgbW1hcCwgbm90IHNicmsuICAqLworI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKworLyogV2UgY291bGQsIGluIHRoZW9yeSwgc3VwcG9ydCBtcmVtYXAsIGJ1dCBpdCB3b3VsZG4ndCBidXkgdXMgYW55dGhpbmcuICAqLworI2RlZmluZSBIQVZFX01SRU1BUCAwCisKKy8qIFdlIGhhdmUgbm8gdXNlIGZvciB0aGlzLCBzbyBzYXZlIHNvbWUgY29kZSBhbmQgZGF0YS4gICovCisjZGVmaW5lIE5PX01BTExJTkZPIDEKKworLyogV2UgbmVlZCBhbGwgYWxsb2NhdGlvbnMgdG8gYmUgaW4gcmVndWxhciBzZWdtZW50cywgb3RoZXJ3aXNlIHdlCisgICBsb3NlIHRyYWNrIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvZGUgYWRkcmVzcy4gICovCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgTUFYX1NJWkVfVAorCisvKiBEb24ndCBhbGxvY2F0ZSBtb3JlIHRoYW4gYSBwYWdlIHVubGVzcyBuZWVkZWQuICAqLworI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgoc2l6ZV90KW1hbGxvY19nZXRwYWdlc2l6ZSkKKworI2lmIEZGSV9DTE9TVVJFX1RFU1QKKy8qIERvbid0IHJlbGVhc2Ugc2luZ2xlIHBhZ2VzLCB0byBhdm9pZCBhIHdvcnN0LWNhc2Ugc2NlbmFyaW8gb2YKKyAgIGNvbnRpbnVvdXNseSBhbGxvY2F0aW5nIGFuZCByZWxlYXNpbmcgc2luZ2xlIHBhZ2VzLCBidXQgcmVsZWFzZQorICAgcGFpcnMgb2YgcGFnZXMsIHdoaWNoIHNob3VsZCBkbyBqdXN0IGFzIHdlbGwgZ2l2ZW4gdGhhdCBhbGxvY2F0aW9ucworICAgYXJlIGxpa2VseSB0byBiZSBzbWFsbC4gICovCisjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKChzaXplX3QpbWFsbG9jX2dldHBhZ2VzaXplKQorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgIWRlZmluZWQoWDg2X1dJTjMyKSAmJiAhZGVmaW5lZChYODZfV0lONjQpCisjaWZkZWYgSEFWRV9NTlRFTlQKKyNpbmNsdWRlIDxtbnRlbnQuaD4KKyNlbmRpZiAvKiBIQVZFX01OVEVOVCAqLworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworLyogV2UgZG9uJ3Qgd2FudCBzeXMvbW1hbi5oIHRvIGJlIGluY2x1ZGVkIGFmdGVyIHdlIHJlZGVmaW5lIG1tYXAgYW5kCisgICBkbG11bm1hcC4gICovCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSCAxCisKKyNpZiBGRklfTU1BUF9FWEVDX1NFTElOVVgKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyBpbnQgc2VsaW51eF9lbmFibGVkID0gLTE7CisKK3N0YXRpYyBpbnQKK3NlbGludXhfZW5hYmxlZF9jaGVjayAodm9pZCkKK3sKKyAgc3RydWN0IHN0YXRmcyBzZnM7CisgIEZJTEUgKmY7CisgIGNoYXIgKmJ1ZiA9IE5VTEw7CisgIHNpemVfdCBsZW4gPSAwOworCisgIGlmIChzdGF0ZnMgKCIvc2VsaW51eCIsICZzZnMpID49IDAKKyAgICAgICYmICh1bnNpZ25lZCBpbnQpIHNmcy5mX3R5cGUgPT0gMHhmOTdjZmY4Y1UpCisgICAgcmV0dXJuIDE7CisgIGYgPSBmb3BlbiAoIi9wcm9jL21vdW50cyIsICJyIik7CisgIGlmIChmID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisgIHdoaWxlIChnZXRsaW5lICgmYnVmLCAmbGVuLCBmKSA+PSAwKQorICAgIHsKKyAgICAgIGNoYXIgKnAgPSBzdHJjaHIgKGJ1ZiwgJyAnKTsKKyAgICAgIGlmIChwID09IE5VTEwpCisgICAgICAgIGJyZWFrOworICAgICAgcCA9IHN0cmNociAocCArIDEsICcgJyk7CisgICAgICBpZiAocCA9PSBOVUxMKQorICAgICAgICBicmVhazsKKyAgICAgIGlmIChzdHJuY21wIChwICsgMSwgInNlbGludXhmcyAiLCAxMCkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGZyZWUgKGJ1Zik7CisgICAgICAgICAgZmNsb3NlIChmKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgZnJlZSAoYnVmKTsKKyAgZmNsb3NlIChmKTsKKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgaXNfc2VsaW51eF9lbmFibGVkKCkgKHNlbGludXhfZW5hYmxlZCA+PSAwID8gc2VsaW51eF9lbmFibGVkIFwKKwkJCSAgICAgIDogKHNlbGludXhfZW5hYmxlZCA9IHNlbGludXhfZW5hYmxlZF9jaGVjayAoKSkpCisKKyNlbHNlCisKKyNkZWZpbmUgaXNfc2VsaW51eF9lbmFibGVkKCkgMAorCisjZW5kaWYgLyogIUZGSV9NTUFQX0VYRUNfU0VMSU5VWCAqLworCisjZWxpZiBkZWZpbmVkIChfX0NZR1dJTl9fKQorCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworLyogQ3lnd2luIGlzIExpbnV4LWxpa2UsIGJ1dCBub3QgcXVpdGUgdGhhdCBMaW51eC1saWtlLiAgKi8KKyNkZWZpbmUgaXNfc2VsaW51eF9lbmFibGVkKCkgMAorCisjZW5kaWYgLyogIWRlZmluZWQoWDg2X1dJTjMyKSAmJiAhZGVmaW5lZChYODZfV0lONjQpICovCisKKy8qIERlY2xhcmUgYWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGRsbWFsbG9jLmMgYXMgc3RhdGljLiAgKi8KK3N0YXRpYyB2b2lkICpkbG1hbGxvYyhzaXplX3QpOworc3RhdGljIHZvaWQgZGxmcmVlKHZvaWQqKTsKK3N0YXRpYyB2b2lkICpkbGNhbGxvYyhzaXplX3QsIHNpemVfdCkgTUFZQkVfVU5VU0VEOworc3RhdGljIHZvaWQgKmRscmVhbGxvYyh2b2lkICosIHNpemVfdCkgTUFZQkVfVU5VU0VEOworc3RhdGljIHZvaWQgKmRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyB2b2lkICpkbHZhbGxvYyhzaXplX3QpIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyBpbnQgZGxtYWxsb3B0KGludCwgaW50KSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCkgTUFZQkVfVU5VU0VEOworc3RhdGljIHZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QsIHNpemVfdCwgdm9pZCoqKSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgdm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90LCBzaXplX3QqLCB2b2lkKiopIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyB2b2lkICpkbHB2YWxsb2Moc2l6ZV90KSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgaW50IGRsbWFsbG9jX3RyaW0oc2l6ZV90KSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqKSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgdm9pZCBkbG1hbGxvY19zdGF0cyh2b2lkKSBNQVlCRV9VTlVTRUQ7CisKKyNpZiAhKGRlZmluZWQoWDg2X1dJTjMyKSB8fCBkZWZpbmVkKFg4Nl9XSU42NCkpIHx8IGRlZmluZWQgKF9fQ1lHV0lOX18pCisvKiBVc2UgdGhlc2UgZm9yIG1tYXAgYW5kIG11bm1hcCB3aXRoaW4gZGxtYWxsb2MuYy4gICovCitzdGF0aWMgdm9pZCAqZGxtbWFwKHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBvZmZfdCk7CitzdGF0aWMgaW50IGRsbXVubWFwKHZvaWQgKiwgc2l6ZV90KTsKKyNlbmRpZiAvKiAhKGRlZmluZWQoWDg2X1dJTjMyKSB8fCBkZWZpbmVkKFg4Nl9XSU42NCkpIHx8IGRlZmluZWQgKF9fQ1lHV0lOX18pICovCisKKyNkZWZpbmUgbW1hcCBkbG1tYXAKKyNkZWZpbmUgbXVubWFwIGRsbXVubWFwCisKKyNpbmNsdWRlICJkbG1hbGxvYy5jIgorCisjdW5kZWYgbW1hcAorI3VuZGVmIG11bm1hcAorCisjaWYgIShkZWZpbmVkKFg4Nl9XSU4zMikgfHwgZGVmaW5lZChYODZfV0lONjQpKSB8fCBkZWZpbmVkIChfX0NZR1dJTl9fKQorCisvKiBBIG11dGV4IHVzZWQgdG8gc3luY2hyb25pemUgYWNjZXNzIHRvICpleGVjKiB2YXJpYWJsZXMgaW4gdGhpcyBmaWxlLiAgKi8KK3N0YXRpYyBwdGhyZWFkX211dGV4X3Qgb3Blbl90ZW1wX2V4ZWNfZmlsZV9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKKy8qIEEgZmlsZSBkZXNjcmlwdG9yIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZnJvbSB3aGljaCB3ZSdsbCBtYXAKKyAgIGV4ZWN1dGFibGUgcGFnZXMuICAqLworc3RhdGljIGludCBleGVjZmQgPSAtMTsKKworLyogVGhlIGFtb3VudCBvZiBzcGFjZSBhbHJlYWR5IGFsbG9jYXRlZCBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZS4gICovCitzdGF0aWMgc2l6ZV90IGV4ZWNzaXplID0gMDsKKworLyogT3BlbiBhIHRlbXBvcmFyeSBmaWxlIG5hbWUsIGFuZCBpbW1lZGlhdGVseSB1bmxpbmsgaXQuICAqLworc3RhdGljIGludAorb3Blbl90ZW1wX2V4ZWNfZmlsZV9uYW1lIChjaGFyICpuYW1lKQoreworICBpbnQgZmQgPSBta3N0ZW1wIChuYW1lKTsKKworICBpZiAoZmQgIT0gLTEpCisgICAgdW5saW5rIChuYW1lKTsKKworICByZXR1cm4gZmQ7Cit9CisKKy8qIE9wZW4gYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgbmFtZWQgZGlyZWN0b3J5LiAgKi8KK3N0YXRpYyBpbnQKK29wZW5fdGVtcF9leGVjX2ZpbGVfZGlyIChjb25zdCBjaGFyICpkaXIpCit7CisgIHN0YXRpYyBjb25zdCBjaGFyIHN1ZmZpeFtdID0gIi9mZmlYWFhYWFgiOworICBpbnQgbGVuZGlyID0gc3RybGVuIChkaXIpOworICBjaGFyICp0ZW1wbmFtZSA9IF9fYnVpbHRpbl9hbGxvY2EgKGxlbmRpciArIHNpemVvZiAoc3VmZml4KSk7CisKKyAgaWYgKCF0ZW1wbmFtZSkKKyAgICByZXR1cm4gLTE7CisKKyAgbWVtY3B5ICh0ZW1wbmFtZSwgZGlyLCBsZW5kaXIpOworICBtZW1jcHkgKHRlbXBuYW1lICsgbGVuZGlyLCBzdWZmaXgsIHNpemVvZiAoc3VmZml4KSk7CisKKyAgcmV0dXJuIG9wZW5fdGVtcF9leGVjX2ZpbGVfbmFtZSAodGVtcG5hbWUpOworfQorCisvKiBPcGVuIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBpbiB0aGUgbmFtZWQgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlLiAgKi8KK3N0YXRpYyBpbnQKK29wZW5fdGVtcF9leGVjX2ZpbGVfZW52IChjb25zdCBjaGFyICplbnZ2YXIpCit7CisgIGNvbnN0IGNoYXIgKnZhbHVlID0gZ2V0ZW52IChlbnZ2YXIpOworCisgIGlmICghdmFsdWUpCisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiBvcGVuX3RlbXBfZXhlY19maWxlX2RpciAodmFsdWUpOworfQorCisjaWZkZWYgSEFWRV9NTlRFTlQKKy8qIE9wZW4gYSB0ZW1wb3JhcnkgZmlsZSBpbiBhbiBleGVjdXRhYmxlIGFuZCB3cml0YWJsZSBtb3VudCBwb2ludAorICAgbGlzdGVkIGluIHRoZSBtb3VudHMgZmlsZS4gIFN1YnNlcXVlbnQgY2FsbHMgd2l0aCB0aGUgc2FtZSBtb3VudHMKKyAgIGtlZXAgc2VhcmNoaW5nIGZvciBtb3VudCBwb2ludHMgaW4gdGhlIHNhbWUgZmlsZS4gIFByb3ZpZGluZyBOVUxMCisgICBhcyB0aGUgbW91bnRzIGZpbGUgY2xvc2VzIHRoZSBmaWxlLiAgKi8KK3N0YXRpYyBpbnQKK29wZW5fdGVtcF9leGVjX2ZpbGVfbW50IChjb25zdCBjaGFyICptb3VudHMpCit7CisgIHN0YXRpYyBjb25zdCBjaGFyICpsYXN0X21vdW50czsKKyAgc3RhdGljIEZJTEUgKmxhc3RfbW50ZW50OworCisgIGlmIChtb3VudHMgIT0gbGFzdF9tb3VudHMpCisgICAgeworICAgICAgaWYgKGxhc3RfbW50ZW50KQorCWVuZG1udGVudCAobGFzdF9tbnRlbnQpOworCisgICAgICBsYXN0X21vdW50cyA9IG1vdW50czsKKworICAgICAgaWYgKG1vdW50cykKKwlsYXN0X21udGVudCA9IHNldG1udGVudCAobW91bnRzLCAiciIpOworICAgICAgZWxzZQorCWxhc3RfbW50ZW50ID0gTlVMTDsKKyAgICB9CisKKyAgaWYgKCFsYXN0X21udGVudCkKKyAgICByZXR1cm4gLTE7CisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBpbnQgZmQ7CisgICAgICBzdHJ1Y3QgbW50ZW50IG1udDsKKyAgICAgIGNoYXIgYnVmW01BWFBBVEhMRU4gKiAzXTsKKworICAgICAgaWYgKGdldG1udGVudF9yIChsYXN0X21udGVudCwgJm1udCwgYnVmLCBzaXplb2YgKGJ1ZikpKQorCXJldHVybiAtMTsKKworICAgICAgaWYgKGhhc21udG9wdCAoJm1udCwgInJvIikKKwkgIHx8IGhhc21udG9wdCAoJm1udCwgIm5vZXhlYyIpCisJICB8fCBhY2Nlc3MgKG1udC5tbnRfZGlyLCBXX09LKSkKKwljb250aW51ZTsKKworICAgICAgZmQgPSBvcGVuX3RlbXBfZXhlY19maWxlX2RpciAobW50Lm1udF9kaXIpOworCisgICAgICBpZiAoZmQgIT0gLTEpCisJcmV0dXJuIGZkOworICAgIH0KK30KKyNlbmRpZiAvKiBIQVZFX01OVEVOVCAqLworCisvKiBJbnN0cnVjdGlvbnMgdG8gbG9vayBmb3IgYSBsb2NhdGlvbiB0byBob2xkIGEgdGVtcG9yYXJ5IGZpbGUgdGhhdAorICAgY2FuIGJlIG1hcHBlZCBpbiBmb3IgZXhlY3V0aW9uLiAgKi8KK3N0YXRpYyBzdHJ1Y3QKK3sKKyAgaW50ICgqZnVuYykoY29uc3QgY2hhciAqKTsKKyAgY29uc3QgY2hhciAqYXJnOworICBpbnQgcmVwZWF0OworfSBvcGVuX3RlbXBfZXhlY19maWxlX29wdHNbXSA9IHsKKyAgeyBvcGVuX3RlbXBfZXhlY19maWxlX2VudiwgIlRNUERJUiIsIDAgfSwKKyAgeyBvcGVuX3RlbXBfZXhlY19maWxlX2RpciwgIi90bXAiLCAwIH0sCisgIHsgb3Blbl90ZW1wX2V4ZWNfZmlsZV9kaXIsICIvdmFyL3RtcCIsIDAgfSwKKyAgeyBvcGVuX3RlbXBfZXhlY19maWxlX2RpciwgIi9kZXYvc2htIiwgMCB9LAorICB7IG9wZW5fdGVtcF9leGVjX2ZpbGVfZW52LCAiSE9NRSIsIDAgfSwKKyNpZmRlZiBIQVZFX01OVEVOVAorICB7IG9wZW5fdGVtcF9leGVjX2ZpbGVfbW50LCAiL2V0Yy9tdGFiIiwgMSB9LAorICB7IG9wZW5fdGVtcF9leGVjX2ZpbGVfbW50LCAiL3Byb2MvbW91bnRzIiwgMSB9LAorI2VuZGlmIC8qIEhBVkVfTU5URU5UICovCit9OworCisvKiBDdXJyZW50IGluZGV4IGludG8gb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzLiAgKi8KK3N0YXRpYyBpbnQgb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeCA9IDA7CisKKy8qIFJlc2V0IGEgY3VycmVudCBtdWx0aS1jYWxsIGZ1bmMsIHRoZW4gYWR2YW5jZXMgdG8gdGhlIG5leHQgZW50cnkuCisgICBJZiB3ZSdyZSBhdCB0aGUgbGFzdCwgZ28gYmFjayB0byB0aGUgZmlyc3QgYW5kIHJldHVybiBub256ZXJvLAorICAgb3RoZXJ3aXNlIHJldHVybiB6ZXJvLiAgKi8KK3N0YXRpYyBpbnQKK29wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19uZXh0ICh2b2lkKQoreworICBpZiAob3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzW29wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHhdLnJlcGVhdCkKKyAgICBvcGVuX3RlbXBfZXhlY19maWxlX29wdHNbb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeF0uZnVuYyAoTlVMTCk7CisKKyAgb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeCsrOworICBpZiAob3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeAorICAgICAgPT0gKHNpemVvZiAob3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzKQorCSAgLyBzaXplb2YgKCpvcGVuX3RlbXBfZXhlY19maWxlX29wdHMpKSkKKyAgICB7CisgICAgICBvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4ID0gMDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworLyogUmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yIG9mIGEgdGVtcG9yYXJ5IHplcm8tc2l6ZWQgZmlsZSBpbiBhCisgICB3cml0YWJsZSBhbmQgZXhleHV0YWJsZSBmaWxlc3lzdGVtLiAgKi8KK3N0YXRpYyBpbnQKK29wZW5fdGVtcF9leGVjX2ZpbGUgKHZvaWQpCit7CisgIGludCBmZDsKKworICBkbworICAgIHsKKyAgICAgIGZkID0gb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzW29wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHhdLmZ1bmMKKwkob3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzW29wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHhdLmFyZyk7CisKKyAgICAgIGlmICghb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzW29wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHhdLnJlcGVhdAorCSAgfHwgZmQgPT0gLTEpCisJeworCSAgaWYgKG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19uZXh0ICgpKQorCSAgICBicmVhazsKKwl9CisgICAgfQorICB3aGlsZSAoZmQgPT0gLTEpOworCisgIHJldHVybiBmZDsKK30KKworLyogTWFwIGluIGEgY2h1bmsgb2YgbWVtb3J5IGZyb20gdGhlIHRlbXBvcmFyeSBleGVjIGZpbGUgaW50byBzZXBhcmF0ZQorICAgbG9jYXRpb25zIGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIHNwYWNlLCBvbmUgd3JpdGFibGUgYW5kIG9uZQorICAgZXhlY3V0YWJsZS4gIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHdyaXRhYmxlIHBvcnRpb24sIGFmdGVyCisgICBzdG9yaW5nIGFuIG9mZnNldCB0byB0aGUgY29ycmVzcG9uZGluZyBleGVjdXRhYmxlIHBvcnRpb24gYXQgdGhlCisgICBsYXN0IHdvcmQgb2YgdGhlIHJlcXVlc3RlZCBjaHVuay4gICovCitzdGF0aWMgdm9pZCAqCitkbG1tYXBfbG9ja2VkICh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwgaW50IHByb3QsIGludCBmbGFncywgb2ZmX3Qgb2Zmc2V0KQoreworICB2b2lkICpwdHI7CisKKyAgaWYgKGV4ZWNmZCA9PSAtMSkKKyAgICB7CisgICAgICBvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4ID0gMDsKKyAgICByZXRyeV9vcGVuOgorICAgICAgZXhlY2ZkID0gb3Blbl90ZW1wX2V4ZWNfZmlsZSAoKTsKKyAgICAgIGlmIChleGVjZmQgPT0gLTEpCisJcmV0dXJuIE1GQUlMOworICAgIH0KKworICBvZmZzZXQgPSBleGVjc2l6ZTsKKworICBpZiAoZnRydW5jYXRlIChleGVjZmQsIG9mZnNldCArIGxlbmd0aCkpCisgICAgcmV0dXJuIE1GQUlMOworCisgIGZsYWdzICY9IH4oTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTKTsKKyAgZmxhZ3MgfD0gTUFQX1NIQVJFRDsKKworICBwdHIgPSBtbWFwIChOVUxMLCBsZW5ndGgsIChwcm90ICYgflBST1RfV1JJVEUpIHwgUFJPVF9FWEVDLAorCSAgICAgIGZsYWdzLCBleGVjZmQsIG9mZnNldCk7CisgIGlmIChwdHIgPT0gTUZBSUwpCisgICAgeworICAgICAgaWYgKCFvZmZzZXQpCisJeworCSAgY2xvc2UgKGV4ZWNmZCk7CisJICBnb3RvIHJldHJ5X29wZW47CisJfQorICAgICAgZnRydW5jYXRlIChleGVjZmQsIG9mZnNldCk7CisgICAgICByZXR1cm4gTUZBSUw7CisgICAgfQorICBlbHNlIGlmICghb2Zmc2V0CisJICAgJiYgb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzW29wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHhdLnJlcGVhdCkKKyAgICBvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfbmV4dCAoKTsKKworICBzdGFydCA9IG1tYXAgKHN0YXJ0LCBsZW5ndGgsIHByb3QsIGZsYWdzLCBleGVjZmQsIG9mZnNldCk7CisKKyAgaWYgKHN0YXJ0ID09IE1GQUlMKQorICAgIHsKKyAgICAgIG11bm1hcCAocHRyLCBsZW5ndGgpOworICAgICAgZnRydW5jYXRlIChleGVjZmQsIG9mZnNldCk7CisgICAgICByZXR1cm4gc3RhcnQ7CisgICAgfQorCisgIG1tYXBfZXhlY19vZmZzZXQgKChjaGFyICopc3RhcnQsIGxlbmd0aCkgPSAoY2hhciopcHRyIC0gKGNoYXIqKXN0YXJ0OworCisgIGV4ZWNzaXplICs9IGxlbmd0aDsKKworICByZXR1cm4gc3RhcnQ7Cit9CisKKy8qIE1hcCBpbiBhIHdyaXRhYmxlIGFuZCBleGVjdXRhYmxlIGNodW5rIG9mIG1lbW9yeSBpZiBwb3NzaWJsZS4KKyAgIEZhaWxpbmcgdGhhdCwgZmFsbCBiYWNrIHRvIGRsbW1hcF9sb2NrZWQuICAqLworc3RhdGljIHZvaWQgKgorZGxtbWFwICh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwgaW50IHByb3QsCisJaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCkKK3sKKyAgdm9pZCAqcHRyOworCisgIGFzc2VydCAoc3RhcnQgPT0gTlVMTCAmJiBsZW5ndGggJSBtYWxsb2NfZ2V0cGFnZXNpemUgPT0gMAorCSAgJiYgcHJvdCA9PSAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSkKKwkgICYmIGZsYWdzID09IChNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMpCisJICAmJiBmZCA9PSAtMSAmJiBvZmZzZXQgPT0gMCk7CisKKyNpZiBGRklfQ0xPU1VSRV9URVNUCisgIHByaW50ZiAoIm1hcHBpbmcgaW4gJXppXG4iLCBsZW5ndGgpOworI2VuZGlmCisKKyAgaWYgKGV4ZWNmZCA9PSAtMSAmJiAhaXNfc2VsaW51eF9lbmFibGVkICgpKQorICAgIHsKKyAgICAgIHB0ciA9IG1tYXAgKHN0YXJ0LCBsZW5ndGgsIHByb3QgfCBQUk9UX0VYRUMsIGZsYWdzLCBmZCwgb2Zmc2V0KTsKKworICAgICAgaWYgKHB0ciAhPSBNRkFJTCB8fCAoZXJybm8gIT0gRVBFUk0gJiYgZXJybm8gIT0gRUFDQ0VTKSkKKwkvKiBDb29sLCBubyBuZWVkIHRvIG1lc3Mgd2l0aCBzZXBhcmF0ZSBzZWdtZW50cy4gICovCisJcmV0dXJuIHB0cjsKKworICAgICAgLyogSWYgTVJFTUFQX0RVUCBpcyBldmVyIGludHJvZHVjZWQgYW5kIGltcGxlbWVudGVkLCB0cnkgbW1hcAorCSB3aXRoICgocHJvdCAmIH5QUk9UX1dSSVRFKSB8IFBST1RfRVhFQykgYW5kIG1yZW1hcCB3aXRoCisJIE1SRU1BUF9EVVAgYW5kIHByb3QgYXQgdGhpcyBwb2ludC4gICovCisgICAgfQorCisgIGlmIChleGVjc2l6ZSA9PSAwIHx8IGV4ZWNmZCA9PSAtMSkKKyAgICB7CisgICAgICBwdGhyZWFkX211dGV4X2xvY2sgKCZvcGVuX3RlbXBfZXhlY19maWxlX211dGV4KTsKKyAgICAgIHB0ciA9IGRsbW1hcF9sb2NrZWQgKHN0YXJ0LCBsZW5ndGgsIHByb3QsIGZsYWdzLCBvZmZzZXQpOworICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZvcGVuX3RlbXBfZXhlY19maWxlX211dGV4KTsKKworICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgcmV0dXJuIGRsbW1hcF9sb2NrZWQgKHN0YXJ0LCBsZW5ndGgsIHByb3QsIGZsYWdzLCBvZmZzZXQpOworfQorCisvKiBSZWxlYXNlIG1lbW9yeSBhdCB0aGUgZ2l2ZW4gYWRkcmVzcywgYXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZworICAgZXhlY3V0YWJsZSBwYWdlIGlmIGl0J3Mgc2VwYXJhdGUuICAqLworc3RhdGljIGludAorZGxtdW5tYXAgKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKQoreworICAvKiBXZSBkb24ndCBib3RoZXIgZGVjcmVhc2luZyBleGVjc2l6ZSBvciB0cnVuY2F0aW5nIHRoZSBmaWxlLCBzaW5jZQorICAgICB3ZSBjYW4ndCBxdWl0ZSB0ZWxsIHdoZXRoZXIgd2UncmUgdW5tYXBwaW5nIHRoZSBlbmQgb2YgdGhlIGZpbGUuCisgICAgIFdlIGRvbid0IGV4cGVjdCBmcmVxdWVudCBkZWFsbG9jYXRpb24gYW55d2F5LiAgSWYgd2UgZGlkLCB3ZQorICAgICBjb3VsZCBsb2NhdGUgcGFnZXMgaW4gdGhlIGZpbGUgYnkgd3JpdGluZyB0byB0aGUgcGFnZXMgYmVpbmcKKyAgICAgZGVhbGxvY2F0ZWQgYW5kIGNoZWNraW5nIHRoYXQgdGhlIGZpbGUgY29udGVudHMgY2hhbmdlLgorICAgICBZdWNrLiAgKi8KKyAgbXNlZ21lbnRwdHIgc2VnID0gc2VnbWVudF9ob2xkaW5nIChnbSwgc3RhcnQpOworICB2b2lkICpjb2RlOworCisjaWYgRkZJX0NMT1NVUkVfVEVTVAorICBwcmludGYgKCJ1bm1hcHBpbmcgJXppXG4iLCBsZW5ndGgpOworI2VuZGlmCisKKyAgaWYgKHNlZyAmJiAoY29kZSA9IGFkZF9zZWdtZW50X2V4ZWNfb2Zmc2V0IChzdGFydCwgc2VnKSkgIT0gc3RhcnQpCisgICAgeworICAgICAgaW50IHJldCA9IG11bm1hcCAoY29kZSwgbGVuZ3RoKTsKKyAgICAgIGlmIChyZXQpCisJcmV0dXJuIHJldDsKKyAgICB9CisKKyAgcmV0dXJuIG11bm1hcCAoc3RhcnQsIGxlbmd0aCk7Cit9CisKKyNpZiBGRklfQ0xPU1VSRV9GUkVFX0NPREUKKy8qIFJldHVybiBzZWdtZW50IGhvbGRpbmcgZ2l2ZW4gY29kZSBhZGRyZXNzLiAgKi8KK3N0YXRpYyBtc2VnbWVudHB0cgorc2VnbWVudF9ob2xkaW5nX2NvZGUgKG1zdGF0ZSBtLCBjaGFyKiBhZGRyKQoreworICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgIGZvciAoOzspIHsKKyAgICBpZiAoYWRkciA+PSBhZGRfc2VnbWVudF9leGVjX29mZnNldCAoc3AtPmJhc2UsIHNwKQorCSYmIGFkZHIgPCBhZGRfc2VnbWVudF9leGVjX29mZnNldCAoc3AtPmJhc2UsIHNwKSArIHNwLT5zaXplKQorICAgICAgcmV0dXJuIHNwOworICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkKKyAgICAgIHJldHVybiAwOworICB9Cit9CisjZW5kaWYKKworI2VuZGlmIC8qICEoZGVmaW5lZChYODZfV0lOMzIpIHx8IGRlZmluZWQoWDg2X1dJTjY0KSkgfHwgZGVmaW5lZCAoX19DWUdXSU5fXykgKi8KKworLyogQWxsb2NhdGUgYSBjaHVuayBvZiBtZW1vcnkgd2l0aCB0aGUgZ2l2ZW4gc2l6ZS4gIFJldHVybnMgYSBwb2ludGVyCisgICB0byB0aGUgd3JpdGFibGUgYWRkcmVzcywgYW5kIHNldHMgKkNPREUgdG8gdGhlIGV4ZWN1dGFibGUKKyAgIGNvcnJlc3BvbmRpbmcgdmlydHVhbCBhZGRyZXNzLiAgKi8KK3ZvaWQgKgorZmZpX2Nsb3N1cmVfYWxsb2MgKHNpemVfdCBzaXplLCB2b2lkICoqY29kZSkKK3sKKyAgdm9pZCAqcHRyOworCisgIGlmICghY29kZSkKKyAgICByZXR1cm4gTlVMTDsKKworICBwdHIgPSBkbG1hbGxvYyAoc2l6ZSk7CisKKyAgaWYgKHB0cikKKyAgICB7CisgICAgICBtc2VnbWVudHB0ciBzZWcgPSBzZWdtZW50X2hvbGRpbmcgKGdtLCBwdHIpOworCisgICAgICAqY29kZSA9IGFkZF9zZWdtZW50X2V4ZWNfb2Zmc2V0IChwdHIsIHNlZyk7CisgICAgfQorCisgIHJldHVybiBwdHI7Cit9CisKKy8qIFJlbGVhc2UgYSBjaHVuayBvZiBtZW1vcnkgYWxsb2NhdGVkIHdpdGggZmZpX2Nsb3N1cmVfYWxsb2MuICBJZgorICAgRkZJX0NMT1NVUkVfRlJFRV9DT0RFIGlzIG5vbnplcm8sIHRoZSBnaXZlbiBhZGRyZXNzIGNhbiBiZSB0aGUKKyAgIHdyaXRhYmxlIG9yIHRoZSBleGVjdXRhYmxlIGFkZHJlc3MgZ2l2ZW4uICBPdGhlcndpc2UsIG9ubHkgdGhlCisgICB3cml0YWJsZSBhZGRyZXNzIGNhbiBiZSBwcm92aWRlZCBoZXJlLiAgKi8KK3ZvaWQKK2ZmaV9jbG9zdXJlX2ZyZWUgKHZvaWQgKnB0cikKK3sKKyNpZiBGRklfQ0xPU1VSRV9GUkVFX0NPREUKKyAgbXNlZ21lbnRwdHIgc2VnID0gc2VnbWVudF9ob2xkaW5nX2NvZGUgKGdtLCBwdHIpOworCisgIGlmIChzZWcpCisgICAgcHRyID0gc3ViX3NlZ21lbnRfZXhlY19vZmZzZXQgKHB0ciwgc2VnKTsKKyNlbmRpZgorCisgIGRsZnJlZSAocHRyKTsKK30KKworCisjaWYgRkZJX0NMT1NVUkVfVEVTVAorLyogRG8gc29tZSBpbnRlcm5hbCBzYW5pdHkgdGVzdGluZyB0byBtYWtlIHN1cmUgYWxsb2NhdGlvbiBhbmQKKyAgIGRlYWxsb2NhdGlvbiBvZiBwYWdlcyBhcmUgd29ya2luZyBhcyBpbnRlbmRlZC4gICovCitpbnQgbWFpbiAoKQoreworICB2b2lkICpwWzNdOworI2RlZmluZSBHRVQoaWR4LCBsZW4pIGRvIHsgcFtpZHhdID0gZGxtYWxsb2MgKGxlbik7IHByaW50ZiAoImFsbG9jYXRlZCAlemkgZm9yIHBbJWldXG4iLCAobGVuKSwgKGlkeCkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBQVVQoaWR4KSBkbyB7IHByaW50ZiAoImZyZWVpbmcgcFslaV1cbiIsIChpZHgpKTsgZGxmcmVlIChwW2lkeF0pOyB9IHdoaWxlICgwKQorICBHRVQgKDAsIG1hbGxvY19nZXRwYWdlc2l6ZSAvIDIpOworICBHRVQgKDEsIDIgKiBtYWxsb2NfZ2V0cGFnZXNpemUgLSA2NCAqIHNpemVvZiAodm9pZCopKTsKKyAgUFVUICgxKTsKKyAgR0VUICgxLCAyICogbWFsbG9jX2dldHBhZ2VzaXplKTsKKyAgR0VUICgyLCBtYWxsb2NfZ2V0cGFnZXNpemUgLyAyKTsKKyAgUFVUICgxKTsKKyAgUFVUICgwKTsKKyAgUFVUICgyKTsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogRkZJX0NMT1NVUkVfVEVTVCAqLworIyBlbHNlIC8qICEgRkZJX01NQVBfRVhFQ19XUklUICovCisKKy8qIE9uIG1hbnkgc3lzdGVtcywgbWVtb3J5IHJldHVybmVkIGJ5IG1hbGxvYyBpcyB3cml0YWJsZSBhbmQKKyAgIGV4ZWN1dGFibGUsIHNvIGp1c3QgdXNlIGl0LiAgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCit2b2lkICoKK2ZmaV9jbG9zdXJlX2FsbG9jIChzaXplX3Qgc2l6ZSwgdm9pZCAqKmNvZGUpCit7CisgIGlmICghY29kZSkKKyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gKmNvZGUgPSBtYWxsb2MgKHNpemUpOworfQorCit2b2lkCitmZmlfY2xvc3VyZV9mcmVlICh2b2lkICpwdHIpCit7CisgIGZyZWUgKHB0cik7Cit9CisKKyMgZW5kaWYgLyogISBGRklfTU1BUF9FWEVDX1dSSVQgKi8KKyNlbmRpZiAvKiBGRklfQ0xPU1VSRVMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Rhcndpbi9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Rhcndpbi9mZml0YXJnZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjMzA4YS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kYXJ3aW4vZmZpdGFyZ2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIGZvciBNYWNPU1ggb25seS4gRGlzcGF0Y2ggdG8gdGhlIHJpZ2h0IGFyY2hpdGVjdHVyZSBpbmNsdWRlCi0gKiBmaWxlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGFyY2hpY3RlY3R1cmUgKGluc3RlYWQgb2YgcmVseWluZyBvbiBhIHN5bWxpbmsKLSAqIGNyZWF0ZWQgYnkgY29uZmlndXJlKS4gVGhpcyBtYWtlcyBpcyBwb3NzaWJsZSB0byBidWlsZCBhIHVuaXZlcmFsIGJpbmFyeQotICogb2YgY3R5cGVzIGluIG9uZSBnby4KLSAqLwotI2lmIGRlZmluZWQoX19pMzg2X18pCi0KLSNpZm5kZWYgWDg2X0RBUldJTgotI2RlZmluZSBYODZfREFSV0lOCi0jZW5kaWYKLSN1bmRlZiBQT1dFUlBDX0RBUldJTgotCi0jaW5jbHVkZSAiLi4vc3JjL3g4Ni9mZml0YXJnZXQuaCIKLQotI2VsaWYgZGVmaW5lZChfX3BwY19fKQotCi0jaWZuZGVmIFBPV0VSUENfREFSV0lOCi0jZGVmaW5lIFBPV0VSUENfREFSV0lOCi0jZW5kaWYKLSN1bmRlZiBYODZfREFSV0lOCi0KLSNpbmNsdWRlICIuLi9zcmMvcG93ZXJwYy9mZml0YXJnZXQuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kZWJ1Zy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWRjZmNmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGVidWcuYwpAQCAtMCwwICsxLDU5IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZGVidWcuYyAtIENvcHlyaWdodCAoYykgMTk5NiBSZWQgSGF0LCBJbmMuCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyogR2VuZXJhbCBkZWJ1Z2dpbmcgcm91dGluZXMgKi8KKwordm9pZCBmZmlfc3RvcF9oZXJlKHZvaWQpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAgUGxhY2UgYSBicmVha3BvaW50IG9uIGZmaV9zdG9wX2hlcmUgdG8gYmUgbm90aWZpZWQgb2YKKyAgICAgc2lnbmlmaWNhbnQgZXZlbnRzLiAqLworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB2aWEgdGhlIEZGSV9BU1NFUlQoKSBtYWNybyAqLworCit2b2lkIGZmaV9hc3NlcnQoY2hhciAqZXhwciwgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisgIGZwcmludGYoc3RkZXJyLCAiQVNTRVJUSU9OIEZBSUxVUkU6ICVzIGF0ICVzOiVkXG4iLCBleHByLCBmaWxlLCBsaW5lKTsKKyAgZmZpX3N0b3BfaGVyZSgpOworICBhYm9ydCgpOworfQorCisvKiBQZXJmb3JtIGEgc2FuaXR5IGNoZWNrIG9uIGFuIGZmaV90eXBlIHN0cnVjdHVyZSAqLworCit2b2lkIGZmaV90eXBlX3Rlc3QoZmZpX3R5cGUgKmEsIGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworICBGRklfQVNTRVJUX0FUKGEgIT0gTlVMTCwgZmlsZSwgbGluZSk7CisKKyAgRkZJX0FTU0VSVF9BVChhLT50eXBlIDw9IEZGSV9UWVBFX0xBU1QsIGZpbGUsIGxpbmUpOworICBGRklfQVNTRVJUX0FUKGEtPnR5cGUgPT0gRkZJX1RZUEVfVk9JRCB8fCBhLT5zaXplID4gMCwgZmlsZSwgbGluZSk7CisgIEZGSV9BU1NFUlRfQVQoYS0+dHlwZSA9PSBGRklfVFlQRV9WT0lEIHx8IGEtPmFsaWdubWVudCA+IDAsIGZpbGUsIGxpbmUpOworICBGRklfQVNTRVJUX0FUKGEtPnR5cGUgIT0gRkZJX1RZUEVfU1RSVUNUIHx8IGEtPmVsZW1lbnRzICE9IE5VTEwsIGZpbGUsIGxpbmUpOworCit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGxtYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODNjNWMyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGxtYWxsb2MuYwpAQCAtMCwwICsxLDUwOTkgQEAKKy8qCisgIFRoaXMgaXMgYSB2ZXJzaW9uIChha2EgZGxtYWxsb2MpIG9mIG1hbGxvYy9mcmVlL3JlYWxsb2Mgd3JpdHRlbiBieQorICBEb3VnIExlYSBhbmQgcmVsZWFzZWQgdG8gdGhlIHB1YmxpYyBkb21haW4sIGFzIGV4cGxhaW5lZCBhdAorICBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9wdWJsaWNkb21haW4uICBTZW5kIHF1ZXN0aW9ucywKKyAgY29tbWVudHMsIGNvbXBsYWludHMsIHBlcmZvcm1hbmNlIGRhdGEsIGV0YyB0byBkbEBjcy5vc3dlZ28uZWR1CisKKyogVmVyc2lvbiAyLjguMyBUaHUgU2VwIDIyIDExOjE2OjE1IDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorCisgICBOb3RlOiBUaGVyZSBtYXkgYmUgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jIG9idGFpbmFibGUgYXQKKyAgICAgICAgICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLmMKKyAgICAgICAgIENoZWNrIGJlZm9yZSBpbnN0YWxsaW5nIQorCisqIFF1aWNrc3RhcnQKKworICBUaGlzIGxpYnJhcnkgaXMgYWxsIGluIG9uZSBmaWxlIHRvIHNpbXBsaWZ5IHRoZSBtb3N0IGNvbW1vbiB1c2FnZToKKyAgZnRwIGl0LCBjb21waWxlIGl0ICgtTzMpLCBhbmQgbGluayBpdCBpbnRvIGFub3RoZXIgcHJvZ3JhbS4gQWxsIG9mCisgIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBkZWZhdWx0IHRvIHJlYXNvbmFibGUgdmFsdWVzIGZvciB1c2Ugb24KKyAgbW9zdCBwbGF0Zm9ybXMuICBZb3UgbWlnaHQgbGF0ZXIgd2FudCB0byBzdGVwIHRocm91Z2ggdmFyaW91cworICBjb21waWxlLXRpbWUgYW5kIGR5bmFtaWMgdHVuaW5nIG9wdGlvbnMuCisKKyAgRm9yIGNvbnZlbmllbmNlLCBhbiBpbmNsdWRlIGZpbGUgZm9yIGNvZGUgdXNpbmcgdGhpcyBtYWxsb2MgaXMgYXQ6CisgICAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy0yLjguMy5oCisgIFlvdSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIC5oIGZpbGUgdW5sZXNzIHlvdSBjYWxsIGZ1bmN0aW9ucyBub3QKKyAgZGVmaW5lZCBpbiB5b3VyIHN5c3RlbSBpbmNsdWRlIGZpbGVzLiAgVGhlIC5oIGZpbGUgY29udGFpbnMgb25seSB0aGUKKyAgZXhjZXJwdHMgZnJvbSB0aGlzIGZpbGUgbmVlZGVkIGZvciB1c2luZyB0aGlzIG1hbGxvYyBvbiBBTlNJIEMvQysrCisgIHN5c3RlbXMsIHNvIGxvbmcgYXMgeW91IGhhdmVuJ3QgY2hhbmdlZCBjb21waWxlLXRpbWUgb3B0aW9ucyBhYm91dAorICBuYW1pbmcgYW5kIHR1bmluZyBwYXJhbWV0ZXJzLiAgSWYgeW91IGRvLCB0aGVuIHlvdSBjYW4gY3JlYXRlIHlvdXIKKyAgb3duIG1hbGxvYy5oIHRoYXQgZG9lcyBpbmNsdWRlIGFsbCBzZXR0aW5ncyBieSBjdXR0aW5nIGF0IHRoZSBwb2ludAorICBpbmRpY2F0ZWQgYmVsb3cuIE5vdGUgdGhhdCB5b3UgbWF5IGFscmVhZHkgYnkgZGVmYXVsdCBiZSB1c2luZyBhIEMKKyAgbGlicmFyeSBjb250YWluaW5nIGEgbWFsbG9jIHRoYXQgaXMgYmFzZWQgb24gc29tZSB2ZXJzaW9uIG9mIHRoaXMKKyAgbWFsbG9jIChmb3IgZXhhbXBsZSBpbiBsaW51eCkuIFlvdSBtaWdodCBzdGlsbCB3YW50IHRvIHVzZSB0aGUgb25lCisgIGluIHRoaXMgZmlsZSB0byBjdXN0b21pemUgc2V0dGluZ3Mgb3IgdG8gYXZvaWQgb3ZlcmhlYWRzIGFzc29jaWF0ZWQKKyAgd2l0aCBsaWJyYXJ5IHZlcnNpb25zLgorCisqIFZpdGFsIHN0YXRpc3RpY3M6CisKKyAgU3VwcG9ydGVkIHBvaW50ZXIvc2l6ZV90IHJlcHJlc2VudGF0aW9uOiAgICAgICA0IG9yIDggYnl0ZXMKKyAgICAgICBzaXplX3QgTVVTVCBiZSBhbiB1bnNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCisgICAgICAgcG9pbnRlcnMuIChJZiB5b3UgYXJlIHVzaW5nIGFuIGFuY2llbnQgc3lzdGVtIHRoYXQgZGVjbGFyZXMKKyAgICAgICBzaXplX3QgYXMgYSBzaWduZWQgdHlwZSwgb3IgbmVlZCBpdCB0byBiZSBhIGRpZmZlcmVudCB3aWR0aAorICAgICAgIHRoYW4gcG9pbnRlcnMsIHlvdSBjYW4gdXNlIGEgcHJldmlvdXMgcmVsZWFzZSBvZiB0aGlzIG1hbGxvYworICAgICAgIChlLmcuIDIuNy4yKSBzdXBwb3J0aW5nIHRoZXNlLikKKworICBBbGlnbm1lbnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgKGRlZmF1bHQpCisgICAgICAgVGhpcyBzdWZmaWNlcyBmb3IgbmVhcmx5IGFsbCBjdXJyZW50IG1hY2hpbmVzIGFuZCBDIGNvbXBpbGVycy4KKyAgICAgICBIb3dldmVyLCB5b3UgY2FuIGRlZmluZSBNQUxMT0NfQUxJR05NRU5UIHRvIGJlIHdpZGVyIHRoYW4gdGhpcworICAgICAgIGlmIG5lY2Vzc2FyeSAodXAgdG8gMTI4Ynl0ZXMpLCBhdCB0aGUgZXhwZW5zZSBvZiB1c2luZyBtb3JlIHNwYWNlLgorCisgIE1pbmltdW0gb3ZlcmhlYWQgcGVyIGFsbG9jYXRlZCBjaHVuazogICA0IG9yICA4IGJ5dGVzIChpZiA0Ynl0ZSBzaXplcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggb3IgMTYgYnl0ZXMgKGlmIDhieXRlIHNpemVzKQorICAgICAgIEVhY2ggbWFsbG9jZWQgY2h1bmsgaGFzIGEgaGlkZGVuIHdvcmQgb2Ygb3ZlcmhlYWQgaG9sZGluZyBzaXplCisgICAgICAgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiwgYW5kIGFkZGl0aW9uYWwgY3Jvc3MtY2hlY2sgd29yZAorICAgICAgIGlmIEZPT1RFUlMgaXMgZGVmaW5lZC4KKworICBNaW5pbXVtIGFsbG9jYXRlZCBzaXplOiA0LWJ5dGUgcHRyczogIDE2IGJ5dGVzICAgIChpbmNsdWRpbmcgb3ZlcmhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDgtYnl0ZSBwdHJzOiAgMzIgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKKworICAgICAgIEV2ZW4gYSByZXF1ZXN0IGZvciB6ZXJvIGJ5dGVzIChpLmUuLCBtYWxsb2MoMCkpIHJldHVybnMgYQorICAgICAgIHBvaW50ZXIgdG8gc29tZXRoaW5nIG9mIHRoZSBtaW5pbXVtIGFsbG9jYXRhYmxlIHNpemUuCisgICAgICAgVGhlIG1heGltdW0gb3ZlcmhlYWQgd2FzdGFnZSAoaS5lLiwgbnVtYmVyIG9mIGV4dHJhIGJ5dGVzCisgICAgICAgYWxsb2NhdGVkIHRoYW4gd2VyZSByZXF1ZXN0ZWQgaW4gbWFsbG9jKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwKKyAgICAgICB0byB0aGUgbWluaW11bSBzaXplLCBleGNlcHQgZm9yIHJlcXVlc3RzID49IG1tYXBfdGhyZXNob2xkIHRoYXQKKyAgICAgICBhcmUgc2VydmljZWQgdmlhIG1tYXAoKSwgd2hlcmUgdGhlIHdvcnN0IGNhc2Ugd2FzdGFnZSBpcyBhYm91dAorICAgICAgIDMyIGJ5dGVzIHBsdXMgdGhlIHJlbWFpbmRlciBmcm9tIGEgc3lzdGVtIHBhZ2UgKHRoZSBtaW5pbWFsCisgICAgICAgbW1hcCB1bml0KTsgdHlwaWNhbGx5IDQwOTYgb3IgODE5MiBieXRlcy4KKworICBTZWN1cml0eTogc3RhdGljLXNhZmU7IG9wdGlvbmFsbHkgbW9yZSBvciBsZXNzCisgICAgICAgVGhlICJzZWN1cml0eSIgb2YgbWFsbG9jIHJlZmVycyB0byB0aGUgYWJpbGl0eSBvZiBtYWxpY2lvdXMKKyAgICAgICBjb2RlIHRvIGFjY2VudHVhdGUgdGhlIGVmZmVjdHMgb2YgZXJyb3JzIChmb3IgZXhhbXBsZSwgZnJlZWluZworICAgICAgIHNwYWNlIHRoYXQgaXMgbm90IGN1cnJlbnRseSBtYWxsb2MnZWQgb3Igb3ZlcndyaXRpbmcgcGFzdCB0aGUKKyAgICAgICBlbmRzIG9mIGNodW5rcykgaW4gY29kZSB0aGF0IGNhbGxzIG1hbGxvYy4gIFRoaXMgbWFsbG9jCisgICAgICAgZ3VhcmFudGVlcyBub3QgdG8gbW9kaWZ5IGFueSBtZW1vcnkgbG9jYXRpb25zIGJlbG93IHRoZSBiYXNlIG9mCisgICAgICAgaGVhcCwgaS5lLiwgc3RhdGljIHZhcmlhYmxlcywgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgdXNhZ2UKKyAgICAgICBlcnJvcnMuICBUaGUgcm91dGluZXMgYWRkaXRpb25hbGx5IGRldGVjdCBtb3N0IGltcHJvcGVyIGZyZWVzCisgICAgICAgYW5kIHJlYWxsb2NzLiAgQWxsIHRoaXMgaG9sZHMgYXMgbG9uZyBhcyB0aGUgc3RhdGljIGJvb2trZWVwaW5nCisgICAgICAgZm9yIG1hbGxvYyBpdHNlbGYgaXMgbm90IGNvcnJ1cHRlZCBieSBzb21lIG90aGVyIG1lYW5zLiAgVGhpcworICAgICAgIGlzIG9ubHkgb25lIGFzcGVjdCBvZiBzZWN1cml0eSAtLSB0aGVzZSBjaGVja3MgZG8gbm90LCBhbmQKKyAgICAgICBjYW5ub3QsIGRldGVjdCBhbGwgcG9zc2libGUgcHJvZ3JhbW1pbmcgZXJyb3JzLgorCisgICAgICAgSWYgRk9PVEVSUyBpcyBkZWZpbmVkIG5vbnplcm8sIHRoZW4gZWFjaCBhbGxvY2F0ZWQgY2h1bmsKKyAgICAgICBjYXJyaWVzIGFuIGFkZGl0aW9uYWwgY2hlY2sgd29yZCB0byB2ZXJpZnkgdGhhdCBpdCB3YXMgbWFsbG9jZWQKKyAgICAgICBmcm9tIGl0cyBzcGFjZS4gIFRoZXNlIGNoZWNrIHdvcmRzIGFyZSB0aGUgc2FtZSB3aXRoaW4gZWFjaAorICAgICAgIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0gdXNpbmcgbWFsbG9jLCBidXQgZGlmZmVyIGFjcm9zcworICAgICAgIGV4ZWN1dGlvbnMsIHNvIGV4dGVybmFsbHkgY3JhZnRlZCBmYWtlIGNodW5rcyBjYW5ub3QgYmUKKyAgICAgICBmcmVlZC4gVGhpcyBpbXByb3ZlcyBzZWN1cml0eSBieSByZWplY3RpbmcgZnJlZXMvcmVhbGxvY3MgdGhhdAorICAgICAgIGNvdWxkIGNvcnJ1cHQgaGVhcCBtZW1vcnksIGluIGFkZGl0aW9uIHRvIHRoZSBjaGVja3MgcHJldmVudGluZworICAgICAgIHdyaXRlcyB0byBzdGF0aWNzIHRoYXQgYXJlIGFsd2F5cyBvbi4gIFRoaXMgbWF5IGZ1cnRoZXIgaW1wcm92ZQorICAgICAgIHNlY3VyaXR5IGF0IHRoZSBleHBlbnNlIG9mIHRpbWUgYW5kIHNwYWNlIG92ZXJoZWFkLiAgKE5vdGUgdGhhdAorICAgICAgIEZPT1RFUlMgbWF5IGFsc28gYmUgd29ydGggdXNpbmcgd2l0aCBNU1BBQ0VTLikKKworICAgICAgIEJ5IGRlZmF1bHQgZGV0ZWN0ZWQgZXJyb3JzIGNhdXNlIHRoZSBwcm9ncmFtIHRvIGFib3J0IChjYWxsaW5nCisgICAgICAgImFib3J0KCkiKS4gWW91IGNhbiBvdmVycmlkZSB0aGlzIHRvIGluc3RlYWQgcHJvY2VlZCBwYXN0CisgICAgICAgZXJyb3JzIGJ5IGRlZmluaW5nIFBST0NFRURfT05fRVJST1IuICBJbiB0aGlzIGNhc2UsIGEgYmFkIGZyZWUKKyAgICAgICBoYXMgbm8gZWZmZWN0LCBhbmQgYSBtYWxsb2MgdGhhdCBlbmNvdW50ZXJzIGEgYmFkIGFkZHJlc3MKKyAgICAgICBjYXVzZWQgYnkgdXNlciBvdmVyd3JpdGVzIHdpbGwgaWdub3JlIHRoZSBiYWQgYWRkcmVzcyBieQorICAgICAgIGRyb3BwaW5nIHBvaW50ZXJzIGFuZCBpbmRpY2VzIHRvIGFsbCBrbm93biBtZW1vcnkuIFRoaXMgbWF5CisgICAgICAgYmUgYXBwcm9wcmlhdGUgZm9yIHByb2dyYW1zIHRoYXQgc2hvdWxkIGNvbnRpbnVlIGlmIGF0IGFsbAorICAgICAgIHBvc3NpYmxlIGluIHRoZSBmYWNlIG9mIHByb2dyYW1taW5nIGVycm9ycywgYWx0aG91Z2ggdGhleSBtYXkKKyAgICAgICBydW4gb3V0IG9mIG1lbW9yeSBiZWNhdXNlIGRyb3BwZWQgbWVtb3J5IGlzIG5ldmVyIHJlY2xhaW1lZC4KKworICAgICAgIElmIHlvdSBkb24ndCBsaWtlIGVpdGhlciBvZiB0aGVzZSBvcHRpb25zLCB5b3UgY2FuIGRlZmluZQorICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGFuZCBVU0FHRV9FUlJPUl9BQ1RJT04gdG8gZG8gYW55dGhpbmcKKyAgICAgICBlbHNlLiBBbmQgaWYgaWYgeW91IGFyZSBzdXJlIHRoYXQgeW91ciBwcm9ncmFtIHVzaW5nIG1hbGxvYyBoYXMKKyAgICAgICBubyBlcnJvcnMgb3IgdnVsbmVyYWJpbGl0aWVzLCB5b3UgY2FuIGRlZmluZSBJTlNFQ1VSRSB0byAxLAorICAgICAgIHdoaWNoIG1pZ2h0IChvciBtaWdodCBub3QpIHByb3ZpZGUgYSBzbWFsbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKworICBUaHJlYWQtc2FmZXR5OiBOT1QgdGhyZWFkLXNhZmUgdW5sZXNzIFVTRV9MT0NLUyBkZWZpbmVkCisgICAgICAgV2hlbiBVU0VfTE9DS1MgaXMgZGVmaW5lZCwgZWFjaCBwdWJsaWMgY2FsbCB0byBtYWxsb2MsIGZyZWUsCisgICAgICAgZXRjIGlzIHN1cnJvdW5kZWQgd2l0aCBlaXRoZXIgYSBwdGhyZWFkIG11dGV4IG9yIGEgd2luMzIKKyAgICAgICBzcGlubG9jayAoZGVwZW5kaW5nIG9uIFdJTjMyKS4gVGhpcyBpcyBub3QgZXNwZWNpYWxseSBmYXN0LCBhbmQKKyAgICAgICBjYW4gYmUgYSBtYWpvciBib3R0bGVuZWNrLiAgSXQgaXMgZGVzaWduZWQgb25seSB0byBwcm92aWRlCisgICAgICAgbWluaW1hbCBwcm90ZWN0aW9uIGluIGNvbmN1cnJlbnQgZW52aXJvbm1lbnRzLCBhbmQgdG8gcHJvdmlkZSBhCisgICAgICAgYmFzaXMgZm9yIGV4dGVuc2lvbnMuICBJZiB5b3UgYXJlIHVzaW5nIG1hbGxvYyBpbiBhIGNvbmN1cnJlbnQKKyAgICAgICBwcm9ncmFtLCBjb25zaWRlciBpbnN0ZWFkIHVzaW5nIHB0bWFsbG9jLCB3aGljaCBpcyBkZXJpdmVkIGZyb20KKyAgICAgICBhIHZlcnNpb24gb2YgdGhpcyBtYWxsb2MuIChTZWUgaHR0cDovL3d3dy5tYWxsb2MuZGUpLgorCisgIFN5c3RlbSByZXF1aXJlbWVudHM6IEFueSBjb21iaW5hdGlvbiBvZiBNT1JFQ09SRSBhbmQvb3IgTU1BUC9NVU5NQVAKKyAgICAgICBUaGlzIG1hbGxvYyBjYW4gdXNlIHVuaXggc2JyayBvciBhbnkgZW11bGF0aW9uIChpbnZva2VkIHVzaW5nCisgICAgICAgdGhlIENBTExfTU9SRUNPUkUgbWFjcm8pIGFuZC9vciBtbWFwL211bm1hcCBvciBhbnkgZW11bGF0aW9uCisgICAgICAgKGludm9rZWQgdXNpbmcgQ0FMTF9NTUFQL0NBTExfTVVOTUFQKSB0byBnZXQgYW5kIHJlbGVhc2Ugc3lzdGVtCisgICAgICAgbWVtb3J5LiAgT24gbW9zdCB1bml4IHN5c3RlbXMsIGl0IHRlbmRzIHRvIHdvcmsgYmVzdCBpZiBib3RoCisgICAgICAgTU9SRUNPUkUgYW5kIE1NQVAgYXJlIGVuYWJsZWQuICBPbiBXaW4zMiwgaXQgdXNlcyBlbXVsYXRpb25zCisgICAgICAgYmFzZWQgb24gVmlydHVhbEFsbG9jLiBJdCBhbHNvIHVzZXMgY29tbW9uIEMgbGlicmFyeSBmdW5jdGlvbnMKKyAgICAgICBsaWtlIG1lbXNldC4KKworICBDb21wbGlhbmNlOiBJIGJlbGlldmUgaXQgaXMgY29tcGxpYW50IHdpdGggdGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24KKyAgICAgICAoU2VlIGh0dHA6Ly93d3cudW5peC5vcmcpLiBBbHNvIFNWSUQvWFBHLCBBTlNJIEMsIGFuZCBwcm9iYWJseQorICAgICAgIG90aGVycyBhcyB3ZWxsLgorCisqIE92ZXJ2aWV3IG9mIGFsZ29yaXRobXMKKworICBUaGlzIGlzIG5vdCB0aGUgZmFzdGVzdCwgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBtb3N0IHBvcnRhYmxlLCBvcgorICBtb3N0IHR1bmFibGUgbWFsbG9jIGV2ZXIgd3JpdHRlbi4gSG93ZXZlciBpdCBpcyBhbW9uZyB0aGUgZmFzdGVzdAorICB3aGlsZSBhbHNvIGJlaW5nIGFtb25nIHRoZSBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIHBvcnRhYmxlIGFuZAorICB0dW5hYmxlLiAgQ29uc2lzdGVudCBiYWxhbmNlIGFjcm9zcyB0aGVzZSBmYWN0b3JzIHJlc3VsdHMgaW4gYSBnb29kCisgIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0b3IgZm9yIG1hbGxvYy1pbnRlbnNpdmUgcHJvZ3JhbXMuCisKKyAgSW4gbW9zdCB3YXlzLCB0aGlzIG1hbGxvYyBpcyBhIGJlc3QtZml0IGFsbG9jYXRvci4gR2VuZXJhbGx5LCBpdAorICBjaG9vc2VzIHRoZSBiZXN0LWZpdHRpbmcgZXhpc3RpbmcgY2h1bmsgZm9yIGEgcmVxdWVzdCwgd2l0aCB0aWVzCisgIGJyb2tlbiBpbiBhcHByb3hpbWF0ZWx5IGxlYXN0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGlzIHN0cmF0ZWd5CisgIG5vcm1hbGx5IG1haW50YWlucyBsb3cgZnJhZ21lbnRhdGlvbi4pIEhvd2V2ZXIsIGZvciByZXF1ZXN0cyBsZXNzCisgIHRoYW4gMjU2Ynl0ZXMsIGl0IGRldmlhdGVzIGZyb20gYmVzdC1maXQgd2hlbiB0aGVyZSBpcyBub3QgYW4KKyAgZXhhY3RseSBmaXR0aW5nIGF2YWlsYWJsZSBjaHVuayBieSBwcmVmZXJyaW5nIHRvIHVzZSBzcGFjZSBhZGphY2VudAorICB0byB0aGF0IHVzZWQgZm9yIHRoZSBwcmV2aW91cyBzbWFsbCByZXF1ZXN0LCBhcyB3ZWxsIGFzIGJ5IGJyZWFraW5nCisgIHRpZXMgaW4gYXBwcm94aW1hdGVseSBtb3N0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGVzZSBlbmhhbmNlCisgIGxvY2FsaXR5IG9mIHNlcmllcyBvZiBzbWFsbCBhbGxvY2F0aW9ucy4pICBBbmQgZm9yIHZlcnkgbGFyZ2UgcmVxdWVzdHMKKyAgKD49IDI1NktiIGJ5IGRlZmF1bHQpLCBpdCByZWxpZXMgb24gc3lzdGVtIG1lbW9yeSBtYXBwaW5nCisgIGZhY2lsaXRpZXMsIGlmIHN1cHBvcnRlZC4gIChUaGlzIGhlbHBzIGF2b2lkIGNhcnJ5aW5nIGFyb3VuZCBhbmQKKyAgcG9zc2libHkgZnJhZ21lbnRpbmcgbWVtb3J5IHVzZWQgb25seSBmb3IgbGFyZ2UgY2h1bmtzLikKKworICBBbGwgb3BlcmF0aW9ucyAoZXhjZXB0IG1hbGxvY19zdGF0cyBhbmQgbWFsbGluZm8pIGhhdmUgZXhlY3V0aW9uCisgIHRpbWVzIHRoYXQgYXJlIGJvdW5kZWQgYnkgYSBjb25zdGFudCBmYWN0b3Igb2YgdGhlIG51bWJlciBvZiBiaXRzIGluCisgIGEgc2l6ZV90LCBub3QgY291bnRpbmcgYW55IGNsZWFyaW5nIGluIGNhbGxvYyBvciBjb3B5aW5nIGluIHJlYWxsb2MsCisgIG9yIGFjdGlvbnMgc3Vycm91bmRpbmcgTU9SRUNPUkUgYW5kIE1NQVAgdGhhdCBoYXZlIHRpbWVzCisgIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIG5vbi1jb250aWd1b3VzIHJlZ2lvbnMgcmV0dXJuZWQgYnkKKyAgc3lzdGVtIGFsbG9jYXRpb24gcm91dGluZXMsIHdoaWNoIGlzIG9mdGVuIGp1c3QgMS4KKworICBUaGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHZlcnkgbW9kdWxhciBhbmQgc2VyaW91c2x5IG92ZXJ1c2VzCisgIG1hY3Jvcy4gUGVyaGFwcyBzb21lZGF5IGFsbCBDIGNvbXBpbGVycyB3aWxsIGRvIGFzIGdvb2QgYSBqb2IKKyAgaW5saW5pbmcgbW9kdWxhciBjb2RlIGFzIGNhbiBub3cgYmUgZG9uZSBieSBicnV0ZS1mb3JjZSBleHBhbnNpb24sCisgIGJ1dCBub3csIGVub3VnaCBvZiB0aGVtIHNlZW0gbm90IHRvLgorCisgIFNvbWUgY29tcGlsZXJzIGlzc3VlIGEgbG90IG9mIHdhcm5pbmdzIGFib3V0IGNvZGUgdGhhdCBpcworICBkZWFkL3VucmVhY2hhYmxlIG9ubHkgb24gc29tZSBwbGF0Zm9ybXMsIGFuZCBhbHNvIGFib3V0IGludGVudGlvbmFsCisgIHVzZXMgb2YgbmVnYXRpb24gb24gdW5zaWduZWQgdHlwZXMuIEFsbCBrbm93biBjYXNlcyBvZiBlYWNoIGNhbiBiZQorICBpZ25vcmVkLgorCisgIEZvciBhIGxvbmdlciBidXQgb3V0IG9mIGRhdGUgaGlnaC1sZXZlbCBkZXNjcmlwdGlvbiwgc2VlCisgICAgIGh0dHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9kbC9odG1sL21hbGxvYy5odG1sCisKKyogTVNQQUNFUworICBJZiBNU1BBQ0VTIGlzIGRlZmluZWQsIHRoZW4gaW4gYWRkaXRpb24gdG8gbWFsbG9jLCBmcmVlLCBldGMuLAorICB0aGlzIGZpbGUgYWxzbyBkZWZpbmVzIG1zcGFjZV9tYWxsb2MsIG1zcGFjZV9mcmVlLCBldGMuIFRoZXNlCisgIGFyZSB2ZXJzaW9ucyBvZiBtYWxsb2Mgcm91dGluZXMgdGhhdCB0YWtlIGFuICJtc3BhY2UiIGFyZ3VtZW50CisgIG9idGFpbmVkIHVzaW5nIGNyZWF0ZV9tc3BhY2UsIHRvIGNvbnRyb2wgYWxsIGludGVybmFsIGJvb2trZWVwaW5nLgorICBJZiBPTkxZX01TUEFDRVMgaXMgZGVmaW5lZCwgb25seSB0aGVzZSB2ZXJzaW9ucyBhcmUgY29tcGlsZWQuCisgIFNvIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGlzIGFsbG9jYXRvciBmb3Igb25seSBzb21lIGFsbG9jYXRpb25zLAorICBhbmQgeW91ciBzeXN0ZW0gbWFsbG9jIGZvciBvdGhlcnMsIHlvdSBjYW4gY29tcGlsZSB3aXRoCisgIE9OTFlfTVNQQUNFUyBhbmQgdGhlbiBkbyBzb21ldGhpbmcgbGlrZS4uLgorICAgIHN0YXRpYyBtc3BhY2UgbXltc3BhY2UgPSBjcmVhdGVfbXNwYWNlKDAsMCk7IC8vIGZvciBleGFtcGxlCisgICAgI2RlZmluZSBteW1hbGxvYyhieXRlcykgIG1zcGFjZV9tYWxsb2MobXltc3BhY2UsIGJ5dGVzKQorCisgIChOb3RlOiBJZiB5b3Ugb25seSBuZWVkIG9uZSBpbnN0YW5jZSBvZiBhbiBtc3BhY2UsIHlvdSBjYW4gaW5zdGVhZAorICB1c2UgIlVTRV9ETF9QUkVGSVgiIHRvIHJlbGFiZWwgdGhlIGdsb2JhbCBtYWxsb2MuKQorCisgIFlvdSBjYW4gc2ltaWxhcmx5IGNyZWF0ZSB0aHJlYWQtbG9jYWwgYWxsb2NhdG9ycyBieSBzdG9yaW5nCisgIG1zcGFjZXMgYXMgdGhyZWFkLWxvY2Fscy4gRm9yIGV4YW1wbGU6CisgICAgc3RhdGljIF9fdGhyZWFkIG1zcGFjZSB0bG1zID0gMDsKKyAgICB2b2lkKiAgdGxtYWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgICAgICBpZiAodGxtcyA9PSAwKSB0bG1zID0gY3JlYXRlX21zcGFjZSgwLCAwKTsKKyAgICAgIHJldHVybiBtc3BhY2VfbWFsbG9jKHRsbXMsIGJ5dGVzKTsKKyAgICB9CisgICAgdm9pZCAgdGxmcmVlKHZvaWQqIG1lbSkgeyBtc3BhY2VfZnJlZSh0bG1zLCBtZW0pOyB9CisKKyAgVW5sZXNzIEZPT1RFUlMgaXMgZGVmaW5lZCwgZWFjaCBtc3BhY2UgaXMgY29tcGxldGVseSBpbmRlcGVuZGVudC4KKyAgWW91IGNhbm5vdCBhbGxvY2F0ZSBmcm9tIG9uZSBhbmQgZnJlZSB0byBhbm90aGVyIChhbHRob3VnaAorICBjb25mb3JtYW5jZSBpcyBvbmx5IHdlYWtseSBjaGVja2VkLCBzbyB1c2FnZSBlcnJvcnMgYXJlIG5vdCBhbHdheXMKKyAgY2F1Z2h0KS4gSWYgRk9PVEVSUyBpcyBkZWZpbmVkLCB0aGVuIGVhY2ggY2h1bmsgY2FycmllcyBhcm91bmQgYSB0YWcKKyAgaW5kaWNhdGluZyBpdHMgb3JpZ2luYXRpbmcgbXNwYWNlLCBhbmQgZnJlZXMgYXJlIGRpcmVjdGVkIHRvIHRoZWlyCisgIG9yaWdpbmF0aW5nIHNwYWNlcy4KKworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENvbXBpbGUtdGltZSBvcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZSBjYXJlZnVsIGluIHNldHRpbmcgI2RlZmluZSB2YWx1ZXMgZm9yIG51bWVyaWNhbCBjb25zdGFudHMgb2YgdHlwZQorc2l6ZV90LiBPbiBzb21lIHN5c3RlbXMsIGxpdGVyYWwgdmFsdWVzIGFyZSBub3QgYXV0b21hdGljYWxseSBleHRlbmRlZAordG8gc2l6ZV90IHByZWNpc2lvbiB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBjYXN0ZWQuCisKK1dJTjMyICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGlmIF9XSU4zMiBkZWZpbmVkCisgIERlZmluaW5nIFdJTjMyIHNldHMgdXAgZGVmYXVsdHMgZm9yIE1TIGVudmlyb25tZW50IGFuZCBjb21waWxlcnMuCisgIE90aGVyd2lzZSBkZWZhdWx0cyBhcmUgZm9yIHVuaXguCisKK01BTExPQ19BTElHTk1FTlQgICAgICAgICBkZWZhdWx0OiAoc2l6ZV90KTgKKyAgQ29udHJvbHMgdGhlIG1pbmltdW0gYWxpZ25tZW50IGZvciBtYWxsb2MnZWQgY2h1bmtzLiAgSXQgbXVzdCBiZSBhCisgIHBvd2VyIG9mIHR3byBhbmQgYXQgbGVhc3QgOCwgZXZlbiBvbiBtYWNoaW5lcyBmb3Igd2hpY2ggc21hbGxlcgorICBhbGlnbm1lbnRzIHdvdWxkIHN1ZmZpY2UuIEl0IG1heSBiZSBkZWZpbmVkIGFzIGxhcmdlciB0aGFuIHRoaXMKKyAgdGhvdWdoLiBOb3RlIGhvd2V2ZXIgdGhhdCBjb2RlIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIG9wdGltaXplZCBmb3IKKyAgdGhlIGNhc2Ugb2YgOC1ieXRlIGFsaWdubWVudC4KKworTVNQQUNFUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQorICBJZiB0cnVlLCBjb21waWxlIGluIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50IGFsbG9jYXRpb24gc3BhY2VzLgorICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGlmIEhBVkVfTU1BUCBpcyB0cnVlLgorCitPTkxZX01TUEFDRVMgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIElmIHRydWUsIG9ubHkgY29tcGlsZSBpbiBtc3BhY2UgdmVyc2lvbnMsIG5vdCByZWd1bGFyIHZlcnNpb25zLgorCitVU0VfTE9DS1MgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIENhdXNlcyBlYWNoIGNhbGwgdG8gZWFjaCBwdWJsaWMgcm91dGluZSB0byBiZSBzdXJyb3VuZGVkIHdpdGgKKyAgcHRocmVhZCBvciBXSU4zMiBtdXRleCBsb2NrL3VubG9jay4gKElmIHNldCB0cnVlLCB0aGlzIGNhbiBiZQorICBvdmVycmlkZGVuIG9uIGEgcGVyLW1zcGFjZSBiYXNpcyBmb3IgbXNwYWNlIHZlcnNpb25zLikKKworRk9PVEVSUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgdHJ1ZSwgcHJvdmlkZSBleHRyYSBjaGVja2luZyBhbmQgZGlzcGF0Y2hpbmcgYnkgcGxhY2luZworICBpbmZvcm1hdGlvbiBpbiB0aGUgZm9vdGVycyBvZiBhbGxvY2F0ZWQgY2h1bmtzLiBUaGlzIGFkZHMKKyAgc3BhY2UgYW5kIHRpbWUgb3ZlcmhlYWQuCisKK0lOU0VDVVJFICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIHRydWUsIG9taXQgY2hlY2tzIGZvciB1c2FnZSBlcnJvcnMgYW5kIGhlYXAgc3BhY2Ugb3ZlcndyaXRlcy4KKworVVNFX0RMX1BSRUZJWCAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIENhdXNlcyBjb21waWxlciB0byBwcmVmaXggYWxsIHB1YmxpYyByb3V0aW5lcyB3aXRoIHRoZSBzdHJpbmcgJ2RsJy4KKyAgVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4geW91IG9ubHkgd2FudCB0byB1c2UgdGhpcyBtYWxsb2MgaW4gb25lIHBhcnQKKyAgb2YgYSBwcm9ncmFtLCB1c2luZyB5b3VyIHJlZ3VsYXIgc3lzdGVtIG1hbGxvYyBlbHNld2hlcmUuCisKK0FCT1JUICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIGFib3J0KCkKKyAgRGVmaW5lcyBob3cgdG8gYWJvcnQgb24gZmFpbGVkIGNoZWNrcy4gIE9uIG1vc3Qgc3lzdGVtcywgYSBmYWlsZWQKKyAgY2hlY2sgY2Fubm90IGRpZSB3aXRoIGFuICJhc3NlcnQiIG9yIGV2ZW4gcHJpbnQgYW4gaW5mb3JtYXRpdmUKKyAgbWVzc2FnZSwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBwcmludCByb3V0aW5lcyBpbiB0dXJuIGNhbGwgbWFsbG9jLAorICB3aGljaCB3aWxsIGZhaWwgYWdhaW4uICBHZW5lcmFsbHksIHRoZSBiZXN0IHBvbGljeSBpcyB0byBzaW1wbHkgY2FsbAorICBhYm9ydCgpLiBJdCdzIG5vdCB2ZXJ5IHVzZWZ1bCB0byBkbyBtb3JlIHRoYW4gdGhpcyBiZWNhdXNlIG1hbnkKKyAgZXJyb3JzIGR1ZSB0byBvdmVyd3JpdGluZyB3aWxsIHNob3cgdXAgYXMgYWRkcmVzcyBmYXVsdHMgKG51bGwsIG9kZAorICBhZGRyZXNzZXMgZXRjKSByYXRoZXIgdGhhbiBtYWxsb2MtdHJpZ2dlcmVkIGNoZWNrcywgc28gd2lsbCBhbHNvCisgIGFib3J0LiAgQWxzbywgbW9zdCBjb21waWxlcnMga25vdyB0aGF0IGFib3J0KCkgZG9lcyBub3QgcmV0dXJuLCBzbworICBjYW4gYmV0dGVyIG9wdGltaXplIGNvZGUgY29uZGl0aW9uYWxseSBjYWxsaW5nIGl0LgorCitQUk9DRUVEX09OX0VSUk9SICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDAgKGZhbHNlKQorICBDb250cm9scyB3aGV0aGVyIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMgY2F1c2UgdGhlbSB0byBieXBhc3NlZAorICByYXRoZXIgdGhhbiBhYm9ydGluZy4gSWYgc2V0LCBkZXRlY3RlZCBiYWQgYXJndW1lbnRzIHRvIGZyZWUgYW5kCisgIHJlYWxsb2MgYXJlIGlnbm9yZWQuIEFuZCBhbGwgYm9va2tlZXBpbmcgaW5mb3JtYXRpb24gaXMgemVyb2VkIG91dAorICB1cG9uIGEgZGV0ZWN0ZWQgb3ZlcndyaXRlIG9mIGZyZWVkIGhlYXAgc3BhY2UsIHRodXMgbG9zaW5nIHRoZQorICBhYmlsaXR5IHRvIGV2ZXIgcmV0dXJuIGl0IGZyb20gbWFsbG9jIGFnYWluLCBidXQgZW5hYmxpbmcgdGhlCisgIGFwcGxpY2F0aW9uIHRvIHByb2NlZWQuIElmIFBST0NFRURfT05fRVJST1IgaXMgZGVmaW5lZCwgdGhlCisgIHN0YXRpYyB2YXJpYWJsZSBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudCBpcyBjb21waWxlZCBpbgorICBhbmQgY2FuIGJlIGV4YW1pbmVkIHRvIHNlZSBpZiBlcnJvcnMgaGF2ZSBvY2N1cnJlZC4gVGhpcyBvcHRpb24KKyAgZ2VuZXJhdGVzIHNsb3dlciBjb2RlIHRoYW4gdGhlIGRlZmF1bHQgYWJvcnQgcG9saWN5LgorCitERUJVRyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgVGhlIERFQlVHIHNldHRpbmcgaXMgbWFpbmx5IGludGVuZGVkIGZvciBwZW9wbGUgdHJ5aW5nIHRvIG1vZGlmeQorICB0aGlzIGNvZGUgb3IgZGlhZ25vc2UgcHJvYmxlbXMgd2hlbiBwb3J0aW5nIHRvIG5ldyBwbGF0Zm9ybXMuCisgIEhvd2V2ZXIsIGl0IG1heSBhbHNvIGJlIGFibGUgdG8gYmV0dGVyIGlzb2xhdGUgdXNlciBlcnJvcnMgdGhhbiBqdXN0CisgIHVzaW5nIHJ1bnRpbWUgY2hlY2tzLiAgVGhlIGFzc2VydGlvbnMgaW4gdGhlIGNoZWNrIHJvdXRpbmVzIHNwZWxsCisgIG91dCBpbiBtb3JlIGRldGFpbCB0aGUgYXNzdW1wdGlvbnMgYW5kIGludmFyaWFudHMgdW5kZXJseWluZyB0aGUKKyAgYWxnb3JpdGhtcy4gIFRoZSBjaGVja2luZyBpcyBmYWlybHkgZXh0ZW5zaXZlLCBhbmQgd2lsbCBzbG93IGRvd24KKyAgZXhlY3V0aW9uIG5vdGljZWFibHkuIENhbGxpbmcgbWFsbG9jX3N0YXRzIG9yIG1hbGxpbmZvIHdpdGggREVCVUcKKyAgc2V0IHdpbGwgYXR0ZW1wdCB0byBjaGVjayBldmVyeSBub24tbW1hcHBlZCBhbGxvY2F0ZWQgYW5kIGZyZWUgY2h1bmsKKyAgaW4gdGhlIGNvdXJzZSBvZiBjb21wdXRpbmcgdGhlIHN1bW1hcmllcy4KKworQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDEgKHRydWUpCisgIERlYnVnZ2luZyBhc3NlcnRpb24gZmFpbHVyZXMgY2FuIGJlIG5lYXJseSBpbXBvc3NpYmxlIGlmIHlvdXIKKyAgdmVyc2lvbiBvZiB0aGUgYXNzZXJ0IG1hY3JvIGNhdXNlcyBtYWxsb2MgdG8gYmUgY2FsbGVkLCB3aGljaCB3aWxsCisgIGxlYWQgdG8gYSBjYXNjYWRlIG9mIGZ1cnRoZXIgZmFpbHVyZXMsIGJsb3dpbmcgdGhlIHJ1bnRpbWUgc3RhY2suCisgIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFIGNhdXNlIGFzc2VydGlvbnMgZmFpbHVyZXMgdG8gY2FsbCBhYm9ydCgpLAorICB3aGljaCB3aWxsIHVzdWFsbHkgbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgorCitNQUxMT0NfRkFJTFVSRV9BQ1RJT04gICAgIGRlZmF1bHQ6IHNldHMgZXJybm8gdG8gRU5PTUVNLCBvciBuby1vcCBvbiB3aW4zMgorICBUaGUgYWN0aW9uIHRvIHRha2UgYmVmb3JlICJyZXR1cm4gMCIgd2hlbiBtYWxsb2MgZmFpbHMgdG8gYmUgYWJsZSB0bworICByZXR1cm4gbWVtb3J5IGJlY2F1c2UgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUuCisKK0hBVkVfTU9SRUNPUkUgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkgdW5sZXNzIHdpbjMyIG9yIE9OTFlfTVNQQUNFUworICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIHNicmsgb3IgYW4gZW11bGF0aW9uIG9mIGl0LgorCitNT1JFQ09SRSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHNicmsKKyAgVGhlIG5hbWUgb2YgdGhlIHNicmstc3R5bGUgc3lzdGVtIHJvdXRpbmUgdG8gY2FsbCB0byBvYnRhaW4gbW9yZQorICBtZW1vcnkuICBTZWUgYmVsb3cgZm9yIGd1aWRhbmNlIG9uIHdyaXRpbmcgY3VzdG9tIE1PUkVDT1JFCisgIGZ1bmN0aW9ucy4gVGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHRvIHNicmsvTU9SRUNPUkUgdmFyaWVzIGFjcm9zcworICBzeXN0ZW1zLiAgSXQgY2Fubm90IGJlIHNpemVfdCwgYmVjYXVzZSBpdCBzdXBwb3J0cyBuZWdhdGl2ZQorICBhcmd1bWVudHMsIHNvIGl0IGlzIG5vcm1hbGx5IHRoZSBzaWduZWQgdHlwZSBvZiB0aGUgc2FtZSB3aWR0aCBhcworICBzaXplX3QgKHNvbWV0aW1lcyBkZWNsYXJlZCBhcyAiaW50cHRyX3QiKS4gIEl0IGRvZXNuJ3QgbXVjaCBtYXR0ZXIKKyAgdGhvdWdoLiBJbnRlcm5hbGx5LCB3ZSBvbmx5IGNhbGwgaXQgd2l0aCBhcmd1bWVudHMgbGVzcyB0aGFuIGhhbGYKKyAgdGhlIG1heCB2YWx1ZSBvZiBhIHNpemVfdCwgd2hpY2ggc2hvdWxkIHdvcmsgYWNyb3NzIGFsbCByZWFzb25hYmxlCisgIHBvc3NpYmlsaXRpZXMsIGFsdGhvdWdoIHNvbWV0aW1lcyBnZW5lcmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzLiAgU2VlCisgIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGZpbGUgZm9yIGd1aWRlbGluZXMgZm9yIGNyZWF0aW5nIGEgY3VzdG9tCisgIHZlcnNpb24gb2YgTU9SRUNPUkUuCisKK01PUkVDT1JFX0NPTlRJR1VPVVMgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkKKyAgSWYgdHJ1ZSwgdGFrZSBhZHZhbnRhZ2Ugb2YgZmFjdCB0aGF0IGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFCisgIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzIGFsd2F5cyByZXR1cm4gY29udGlndW91cyBpbmNyZWFzaW5nCisgIGFkZHJlc3Nlcy4gIFRoaXMgaXMgdHJ1ZSBvZiB1bml4IHNicmsuIEl0IGRvZXMgbm90IGh1cnQgdG9vIG11Y2ggdG8KKyAgc2V0IGl0IHRydWUgYW55d2F5LCBzaW5jZSBtYWxsb2MgY29wZXMgd2l0aCBub24tY29udGlndWl0aWVzLgorICBTZXR0aW5nIGl0IGZhbHNlIHdoZW4gZGVmaW5pdGVseSBub24tY29udGlndW91cyBzYXZlcyB0aW1lCisgIGFuZCBwb3NzaWJseSB3YXN0ZWQgc3BhY2UgaXQgd291bGQgdGFrZSB0byBkaXNjb3ZlciB0aGlzIHRob3VnaC4KKworTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBUcnVlIGlmIE1PUkVDT1JFIGNhbm5vdCByZWxlYXNlIHNwYWNlIGJhY2sgdG8gdGhlIHN5c3RlbSB3aGVuIGdpdmVuCisgIG5lZ2F0aXZlIGFyZ3VtZW50cy4gVGhpcyBpcyBnZW5lcmFsbHkgbmVjZXNzYXJ5IG9ubHkgaWYgeW91IGFyZQorICB1c2luZyBhIGhhbmQtY3JhZnRlZCBNT1JFQ09SRSBmdW5jdGlvbiB0aGF0IGNhbm5vdCBoYW5kbGUgbmVnYXRpdmUKKyAgYXJndW1lbnRzLgorCitIQVZFX01NQVAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpCisgIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgbW1hcCBvciBhbiBlbXVsYXRpb24gb2YgaXQuICBJZiBzbywgYW5kCisgIEhBVkVfTU9SRUNPUkUgaXMgbm90IHRydWUsIE1NQVAgaXMgdXNlZCBmb3IgYWxsIHN5c3RlbQorICBhbGxvY2F0aW9uLiBJZiBzZXQgYW5kIEhBVkVfTU9SRUNPUkUgaXMgdHJ1ZSBhcyB3ZWxsLCBNTUFQIGlzCisgIHByaW1hcmlseSB1c2VkIHRvIGRpcmVjdGx5IGFsbG9jYXRlIHZlcnkgbGFyZ2UgYmxvY2tzLiBJdCBpcyBhbHNvCisgIHVzZWQgYXMgYSBiYWNrdXAgc3RyYXRlZ3kgaW4gY2FzZXMgd2hlcmUgTU9SRUNPUkUgZmFpbHMgdG8gcHJvdmlkZQorICBzcGFjZSBmcm9tIHN5c3RlbS4gTm90ZTogQSBzaW5nbGUgY2FsbCB0byBNVU5NQVAgaXMgYXNzdW1lZCB0byBiZQorICBhYmxlIHRvIHVubWFwIG1lbW9yeSB0aGF0IG1heSBoYXZlIGJlIGFsbG9jYXRlZCB1c2luZyBtdWx0aXBsZSBjYWxscworICB0byBNTUFQLCBzbyBsb25nIGFzIHRoZXkgYXJlIGFkamFjZW50LgorCitIQVZFX01SRU1BUCAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgb24gbGludXgsIGVsc2UgMAorICBJZiB0cnVlIHJlYWxsb2MoKSB1c2VzIG1yZW1hcCgpIHRvIHJlLWFsbG9jYXRlIGxhcmdlIGJsb2NrcyBhbmQKKyAgZXh0ZW5kIG9yIHNocmluayBhbGxvY2F0aW9uIHNwYWNlcy4KKworTU1BUF9DTEVBUlMgICAgICAgICAgICAgICBkZWZhdWx0OiAxIG9uIHVuaXgKKyAgVHJ1ZSBpZiBtbWFwIGNsZWFycyBtZW1vcnkgc28gY2FsbG9jIGRvZXNuJ3QgbmVlZCB0by4gVGhpcyBpcyB0cnVlCisgIGZvciBzdGFuZGFyZCB1bml4IG1tYXAgdXNpbmcgL2Rldi96ZXJvLgorCitVU0VfQlVJTFRJTl9GRlMgICAgICAgICAgICBkZWZhdWx0OiAwIChpLmUuLCBub3QgdXNlZCkKKyAgQ2F1c2VzIG1hbGxvYyB0byB1c2UgdGhlIGJ1aWx0aW4gZmZzKCkgZnVuY3Rpb24gdG8gY29tcHV0ZSBpbmRpY2VzLgorICBTb21lIGNvbXBpbGVycyBtYXkgcmVjb2duaXplIGFuZCBpbnRyaW5zaWZ5IGZmcyB0byBiZSBmYXN0ZXIgdGhhbiB0aGUKKyAgc3VwcGxpZWQgQyB2ZXJzaW9uLiBBbHNvLCB0aGUgY2FzZSBvZiB4ODYgdXNpbmcgZ2NjIGlzIHNwZWNpYWwtY2FzZWQKKyAgdG8gYW4gYXNtIGluc3RydWN0aW9uLCBzbyBpcyBhbHJlYWR5IGFzIGZhc3QgYXMgaXQgY2FuIGJlLCBhbmQgc28KKyAgdGhpcyBzZXR0aW5nIGhhcyBubyBlZmZlY3QuIChPbiBtb3N0IHg4NnMsIHRoZSBhc20gdmVyc2lvbiBpcyBvbmx5CisgIHNsaWdodGx5IGZhc3RlciB0aGFuIHRoZSBDIHZlcnNpb24uKQorCittYWxsb2NfZ2V0cGFnZXNpemUgICAgICAgICBkZWZhdWx0OiBkZXJpdmUgZnJvbSBzeXN0ZW0gaW5jbHVkZXMsIG9yIDQwOTYuCisgIFRoZSBzeXN0ZW0gcGFnZSBzaXplLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGlzIG1hbGxvYyBtYW5hZ2VzCisgIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0gaW4gcGFnZS1zaXplIHVuaXRzLiAgVGhpcyBtYXkgYmUgKGFuZAorICB1c3VhbGx5IGlzKSBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGEgY29uc3RhbnQuIFRoaXMgaXMgaWdub3JlZAorICBpZiBXSU4zMiwgd2hlcmUgcGFnZSBzaXplIGlzIGRldGVybWluZWQgdXNpbmcgZ2V0U3lzdGVtSW5mbyBkdXJpbmcKKyAgaW5pdGlhbGl6YXRpb24uCisKK1VTRV9ERVZfUkFORE9NICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSAvZGV2L3JhbmRvbSB0byBpbml0aWFsaXplIHNlY3VyZSBtYWdpYyBzZWVkIGZvcgorICBzdGFtcGluZyBmb290ZXJzLiBPdGhlcndpc2UsIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZC4KKworTk9fTUFMTElORk8gICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiBkZWZpbmVkLCBkb24ndCBjb21waWxlICJtYWxsaW5mbyIuIFRoaXMgY2FuIGJlIGEgc2ltcGxlIHdheQorICBvZiBkZWFsaW5nIHdpdGggbWlzbWF0Y2hlcyBiZXR3ZWVuIHN5c3RlbSBkZWNsYXJhdGlvbnMgYW5kCisgIHRob3NlIGluIHRoaXMgZmlsZS4KKworTUFMTElORk9fRklFTERfVFlQRSAgICAgICAgZGVmYXVsdDogc2l6ZV90CisgIFRoZSB0eXBlIG9mIHRoZSBmaWVsZHMgaW4gdGhlIG1hbGxpbmZvIHN0cnVjdC4gVGhpcyB3YXMgb3JpZ2luYWxseQorICBkZWZpbmVkIGFzICJpbnQiIGluIFNWSUQgZXRjLCBidXQgaXMgbW9yZSB1c2VmdWxseSBkZWZpbmVkIGFzCisgIHNpemVfdC4gVGhlIHZhbHVlIGlzIHVzZWQgb25seSBpZiAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBpcyBub3Qgc2V0CisKK1JFQUxMT0NfWkVST19CWVRFU19GUkVFUyAgICBkZWZhdWx0OiBub3QgZGVmaW5lZAorICBUaGlzIHNob3VsZCBiZSBzZXQgaWYgYSBjYWxsIHRvIHJlYWxsb2Mgd2l0aCB6ZXJvIGJ5dGVzIHNob3VsZCAKKyAgYmUgdGhlIHNhbWUgYXMgYSBjYWxsIHRvIGZyZWUuIFNvbWUgcGVvcGxlIHRoaW5rIGl0IHNob3VsZC4gT3RoZXJ3aXNlLCAKKyAgc2luY2UgdGhpcyBtYWxsb2MgcmV0dXJucyBhIHVuaXF1ZSBwb2ludGVyIGZvciBtYWxsb2MoMCksIHNvIGRvZXMgCisgIHJlYWxsb2MocCwgMCkuCisKK0xBQ0tTX1VOSVNURF9ILCBMQUNLU19GQ05UTF9ILCBMQUNLU19TWVNfUEFSQU1fSCwgTEFDS1NfU1lTX01NQU5fSAorTEFDS1NfU1RSSU5HU19ILCBMQUNLU19TVFJJTkdfSCwgTEFDS1NfU1lTX1RZUEVTX0gsICBMQUNLU19FUlJOT19ICitMQUNLU19TVERMSUJfSCAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZCB1bmxlc3Mgb24gV0lOMzIKKyAgRGVmaW5lIHRoZXNlIGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlc2UgaGVhZGVyIGZpbGVzLgorICBZb3UgbWlnaHQgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgc29tZSBvZiB0aGUgZGVjbGFyYXRpb25zIHRoZXkgcHJvdmlkZS4KKworREVGQVVMVF9HUkFOVUxBUklUWSAgICAgICAgZGVmYXVsdDogcGFnZSBzaXplIGlmIE1PUkVDT1JFX0NPTlRJR1VPVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5IGluIFdJTjMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgNjRLLgorICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHgpCisgIFRoZSB1bml0IGZvciBhbGxvY2F0aW5nIGFuZCBkZWFsbG9jYXRpbmcgbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4gIE9uCisgIG1vc3Qgc3lzdGVtcyB3aXRoIGNvbnRpZ3VvdXMgTU9SRUNPUkUsIHRoZXJlIGlzIG5vIHJlYXNvbiB0bworICBtYWtlIHRoaXMgbW9yZSB0aGFuIGEgcGFnZS4gSG93ZXZlciwgc3lzdGVtcyB3aXRoIE1NQVAgdGVuZCB0bworICBlaXRoZXIgcmVxdWlyZSBvciBlbmNvdXJhZ2UgbGFyZ2VyIGdyYW51bGFyaXRpZXMuICBZb3UgY2FuIGluY3JlYXNlCisgIHRoaXMgdmFsdWUgdG8gcHJldmVudCBzeXN0ZW0gYWxsb2NhdGlvbiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHNvCisgIG9mdGVuLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIHNsb3cuICBUaGUgdmFsdWUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAgcGFnZSBhbmQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4gIFNldHRpbmcgdG8gMCBjYXVzZXMgaW5pdGlhbGl6YXRpb24KKyAgdG8gZWl0aGVyIHBhZ2Ugc2l6ZSBvciB3aW4zMiByZWdpb24gc2l6ZS4gIChOb3RlOiBJbiBwcmV2aW91cworICB2ZXJzaW9ucyBvZiBtYWxsb2MsIHRoZSBlcXVpdmFsZW50IG9mIHRoaXMgb3B0aW9uIHdhcyBjYWxsZWQKKyAgIlRPUF9QQUQiKQorCitERUZBVUxUX1RSSU1fVEhSRVNIT0xEICAgIGRlZmF1bHQ6IDJNQgorICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fVFJJTV9USFJFU0hPTEQsIHgpCisgIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB1bnVzZWQgdG9wLW1vc3QgbWVtb3J5IHRvIGtlZXAgYmVmb3JlCisgIHJlbGVhc2luZyB2aWEgbWFsbG9jX3RyaW0gaW4gZnJlZSgpLiAgQXV0b21hdGljIHRyaW1taW5nIGlzIG1haW5seQorICB1c2VmdWwgaW4gbG9uZy1saXZlZCBwcm9ncmFtcyB1c2luZyBjb250aWd1b3VzIE1PUkVDT1JFLiAgQmVjYXVzZQorICB0cmltbWluZyB2aWEgc2JyayBjYW4gYmUgc2xvdyBvbiBzb21lIHN5c3RlbXMsIGFuZCBjYW4gc29tZXRpbWVzIGJlCisgIHdhc3RlZnVsIChpbiBjYXNlcyB3aGVyZSBwcm9ncmFtcyBpbW1lZGlhdGVseSBhZnRlcndhcmQgYWxsb2NhdGUKKyAgbW9yZSBsYXJnZSBjaHVua3MpIHRoZSB2YWx1ZSBzaG91bGQgYmUgaGlnaCBlbm91Z2ggc28gdGhhdCB5b3VyCisgIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIHdvdWxkIGltcHJvdmUgYnkgcmVsZWFzaW5nIHRoaXMgbXVjaAorICBtZW1vcnkuICBBcyBhIHJvdWdoIGd1aWRlLCB5b3UgbWlnaHQgc2V0IHRvIGEgdmFsdWUgY2xvc2UgdG8gdGhlCisgIGF2ZXJhZ2Ugc2l6ZSBvZiBhIHByb2Nlc3MgKHByb2dyYW0pIHJ1bm5pbmcgb24geW91ciBzeXN0ZW0uCisgIFJlbGVhc2luZyB0aGlzIG11Y2ggbWVtb3J5IHdvdWxkIGFsbG93IHN1Y2ggYSBwcm9jZXNzIHRvIHJ1biBpbgorICBtZW1vcnkuICBHZW5lcmFsbHksIGl0IGlzIHdvcnRoIHR1bmluZyB0cmltIHRocmVzaG9sZHMgd2hlbiBhCisgIHByb2dyYW0gdW5kZXJnb2VzIHBoYXNlcyB3aGVyZSBzZXZlcmFsIGxhcmdlIGNodW5rcyBhcmUgYWxsb2NhdGVkCisgIGFuZCByZWxlYXNlZCBpbiB3YXlzIHRoYXQgY2FuIHJldXNlIGVhY2ggb3RoZXIncyBzdG9yYWdlLCBwZXJoYXBzCisgIG1peGVkIHdpdGggcGhhc2VzIHdoZXJlIHRoZXJlIGFyZSBubyBzdWNoIGNodW5rcyBhdCBhbGwuIFRoZSB0cmltCisgIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHBhZ2Ugc2l6ZSB0byBoYXZlIGFueSB1c2VmdWwgZWZmZWN0LiAgVG8KKyAgZGlzYWJsZSB0cmltbWluZyBjb21wbGV0ZWx5LCB5b3UgY2FuIHNldCB0byBNQVhfU0laRV9ULiBOb3RlIHRoYXQgdGhlIHRyaWNrCisgIHNvbWUgcGVvcGxlIHVzZSBvZiBtYWxsb2NpbmcgYSBodWdlIHNwYWNlIGFuZCB0aGVuIGZyZWVpbmcgaXQgYXQKKyAgcHJvZ3JhbSBzdGFydHVwLCBpbiBhbiBhdHRlbXB0IHRvIHJlc2VydmUgc3lzdGVtIG1lbW9yeSwgZG9lc24ndAorICBoYXZlIHRoZSBpbnRlbmRlZCBlZmZlY3QgdW5kZXIgYXV0b21hdGljIHRyaW1taW5nLCBzaW5jZSB0aGF0IG1lbW9yeQorICB3aWxsIGltbWVkaWF0ZWx5IGJlIHJldHVybmVkIHRvIHRoZSBzeXN0ZW0uCisKK0RFRkFVTFRfTU1BUF9USFJFU0hPTEQgICAgICAgZGVmYXVsdDogMjU2SworICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fTU1BUF9USFJFU0hPTEQsIHgpCisgIFRoZSByZXF1ZXN0IHNpemUgdGhyZXNob2xkIGZvciB1c2luZyBNTUFQIHRvIGRpcmVjdGx5IHNlcnZpY2UgYQorICByZXF1ZXN0LiBSZXF1ZXN0cyBvZiBhdCBsZWFzdCB0aGlzIHNpemUgdGhhdCBjYW5ub3QgYmUgYWxsb2NhdGVkCisgIHVzaW5nIGFscmVhZHktZXhpc3Rpbmcgc3BhY2Ugd2lsbCBiZSBzZXJ2aWNlZCB2aWEgbW1hcC4gIChJZiBlbm91Z2gKKyAgbm9ybWFsIGZyZWVkIHNwYWNlIGFscmVhZHkgZXhpc3RzIGl0IGlzIHVzZWQgaW5zdGVhZC4pICBVc2luZyBtbWFwCisgIHNlZ3JlZ2F0ZXMgcmVsYXRpdmVseSBsYXJnZSBjaHVua3Mgb2YgbWVtb3J5IHNvIHRoYXQgdGhleSBjYW4gYmUKKyAgaW5kaXZpZHVhbGx5IG9idGFpbmVkIGFuZCByZWxlYXNlZCBmcm9tIHRoZSBob3N0IHN5c3RlbS4gQSByZXF1ZXN0CisgIHNlcnZpY2VkIHRocm91Z2ggbW1hcCBpcyBuZXZlciByZXVzZWQgYnkgYW55IG90aGVyIHJlcXVlc3QgKGF0IGxlYXN0CisgIG5vdCBkaXJlY3RseTsgdGhlIHN5c3RlbSBtYXkganVzdCBzbyBoYXBwZW4gdG8gcmVtYXAgc3VjY2Vzc2l2ZQorICByZXF1ZXN0cyB0byB0aGUgc2FtZSBsb2NhdGlvbnMpLiAgU2VncmVnYXRpbmcgc3BhY2UgaW4gdGhpcyB3YXkgaGFzCisgIHRoZSBiZW5lZml0cyB0aGF0OiBNbWFwcGVkIHNwYWNlIGNhbiBhbHdheXMgYmUgaW5kaXZpZHVhbGx5IHJlbGVhc2VkCisgIGJhY2sgdG8gdGhlIHN5c3RlbSwgd2hpY2ggaGVscHMga2VlcCB0aGUgc3lzdGVtIGxldmVsIG1lbW9yeSBkZW1hbmRzCisgIG9mIGEgbG9uZy1saXZlZCBwcm9ncmFtIGxvdy4gIEFsc28sIG1hcHBlZCBtZW1vcnkgZG9lc24ndCBiZWNvbWUKKyAgYGxvY2tlZCcgYmV0d2VlbiBvdGhlciBjaHVua3MsIGFzIGNhbiBoYXBwZW4gd2l0aCBub3JtYWxseSBhbGxvY2F0ZWQKKyAgY2h1bmtzLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gdHJpbW1pbmcgdmlhIG1hbGxvY190cmltIHdvdWxkIG5vdAorICByZWxlYXNlIHRoZW0uICBIb3dldmVyLCBpdCBoYXMgdGhlIGRpc2FkdmFudGFnZSB0aGF0IHRoZSBzcGFjZQorICBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuIHVzZWQgdG8gc2VydmljZSBsYXRlcgorICByZXF1ZXN0cywgYXMgaGFwcGVucyB3aXRoIG5vcm1hbCBjaHVua3MuICBUaGUgYWR2YW50YWdlcyBvZiBtbWFwCisgIG5lYXJseSBhbHdheXMgb3V0d2VpZ2ggZGlzYWR2YW50YWdlcyBmb3IgImxhcmdlIiBjaHVua3MsIGJ1dCB0aGUKKyAgdmFsdWUgb2YgImxhcmdlIiBtYXkgdmFyeSBhY3Jvc3Mgc3lzdGVtcy4gIFRoZSBkZWZhdWx0IGlzIGFuCisgIGVtcGlyaWNhbGx5IGRlcml2ZWQgdmFsdWUgdGhhdCB3b3JrcyB3ZWxsIGluIG1vc3Qgc3lzdGVtcy4gWW91IGNhbgorICBkaXNhYmxlIG1tYXAgYnkgc2V0dGluZyB0byBNQVhfU0laRV9ULgorCisqLworCisjaWZuZGVmIFdJTjMyCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIFdJTjMyIDEKKyNlbmRpZiAgLyogX1dJTjMyICovCisjZW5kaWYgIC8qIFdJTjMyICovCisjaWZkZWYgV0lOMzIKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisjZGVmaW5lIExBQ0tTX1VOSVNURF9ICisjZGVmaW5lIExBQ0tTX1NZU19QQVJBTV9ICisjZGVmaW5lIExBQ0tTX1NZU19NTUFOX0gKKyNkZWZpbmUgTEFDS1NfU1RSSU5HX0gKKyNkZWZpbmUgTEFDS1NfU1RSSU5HU19ICisjZGVmaW5lIExBQ0tTX1NZU19UWVBFU19ICisjZGVmaW5lIExBQ0tTX0VSUk5PX0gKKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDAgLyogV0lOQ0UgYW5kIHNvbWUgb3RoZXJzIGFwcGFyZW50bHkgZG9uJ3QgY2xlYXIgKi8KKyNlbmRpZiAgLyogV0lOMzIgKi8KKworI2lmIGRlZmluZWQoREFSV0lOKSB8fCBkZWZpbmVkKF9EQVJXSU4pCisvKiBNYWMgT1NYIGRvY3MgYWR2aXNlIG5vdCB0byB1c2Ugc2JyazsgaXQgc2VlbXMgYmV0dGVyIHRvIHVzZSBtbWFwICovCisjaWZuZGVmIEhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisjZGVmaW5lIEhBVkVfTU1BUCAxCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNlbmRpZiAgLyogREFSV0lOICovCisKKyNpZm5kZWYgTEFDS1NfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gIC8qIEZvciBzaXplX3QgKi8KKyNlbmRpZiAgLyogTEFDS1NfU1lTX1RZUEVTX0ggKi8KKworLyogVGhlIG1heGltdW0gcG9zc2libGUgc2l6ZV90IHZhbHVlIGhhcyBhbGwgYml0cyBzZXQgKi8KKyNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCisKKyNpZm5kZWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAwCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2lmbmRlZiBNU1BBQ0VTCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE1TUEFDRVMgMQorI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KKyNkZWZpbmUgTVNQQUNFUyAwCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2VuZGlmICAvKiBNU1BBQ0VTICovCisjaWZuZGVmIE1BTExPQ19BTElHTk1FTlQKKyNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCAoKHNpemVfdCk4VSkKKyNlbmRpZiAgLyogTUFMTE9DX0FMSUdOTUVOVCAqLworI2lmbmRlZiBGT09URVJTCisjZGVmaW5lIEZPT1RFUlMgMAorI2VuZGlmICAvKiBGT09URVJTICovCisjaWZuZGVmIEFCT1JUCisjZGVmaW5lIEFCT1JUICBhYm9ydCgpCisjZW5kaWYgIC8qIEFCT1JUICovCisjaWZuZGVmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCisjZGVmaW5lIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFIDEKKyNlbmRpZiAgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNpZm5kZWYgUFJPQ0VFRF9PTl9FUlJPUgorI2RlZmluZSBQUk9DRUVEX09OX0VSUk9SIDAKKyNlbmRpZiAgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworI2lmbmRlZiBVU0VfTE9DS1MKKyNkZWZpbmUgVVNFX0xPQ0tTIDAKKyNlbmRpZiAgLyogVVNFX0xPQ0tTICovCisjaWZuZGVmIElOU0VDVVJFCisjZGVmaW5lIElOU0VDVVJFIDAKKyNlbmRpZiAgLyogSU5TRUNVUkUgKi8KKyNpZm5kZWYgSEFWRV9NTUFQCisjZGVmaW5lIEhBVkVfTU1BUCAxCisjZW5kaWYgIC8qIEhBVkVfTU1BUCAqLworI2lmbmRlZiBNTUFQX0NMRUFSUworI2RlZmluZSBNTUFQX0NMRUFSUyAxCisjZW5kaWYgIC8qIE1NQVBfQ0xFQVJTICovCisjaWZuZGVmIEhBVkVfTVJFTUFQCisjaWZkZWYgbGludXgKKyNkZWZpbmUgSEFWRV9NUkVNQVAgMQorI2Vsc2UgICAvKiBsaW51eCAqLworI2RlZmluZSBIQVZFX01SRU1BUCAwCisjZW5kaWYgIC8qIGxpbnV4ICovCisjZW5kaWYgIC8qIEhBVkVfTVJFTUFQICovCisjaWZuZGVmIE1BTExPQ19GQUlMVVJFX0FDVElPTgorI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gIGVycm5vID0gRU5PTUVNOworI2VuZGlmICAvKiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8KKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQorI2lmIE9OTFlfTVNQQUNFUworI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNlbHNlICAgLyogT05MWV9NU1BBQ0VTICovCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMQorI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8KKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworI2lmICFIQVZFX01PUkVDT1JFCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMAorI2Vsc2UgICAvKiAhSEFWRV9NT1JFQ09SRSAqLworI2lmbmRlZiBNT1JFQ09SRQorI2RlZmluZSBNT1JFQ09SRSBzYnJrCisjZW5kaWYgIC8qIE1PUkVDT1JFICovCisjaWZuZGVmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAxCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworI2lmbmRlZiBERUZBVUxUX0dSQU5VTEFSSVRZCisjaWYgTU9SRUNPUkVfQ09OVElHVU9VUworI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgwKSAgLyogMCBtZWFucyB0byBjb21wdXRlIGluIGluaXRfbXBhcmFtcyAqLworI2Vsc2UgICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKChzaXplX3QpNjRVICogKHNpemVfdCkxMDI0VSkKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2VuZGlmICAvKiBERUZBVUxUX0dSQU5VTEFSSVRZICovCisjaWZuZGVmIERFRkFVTFRfVFJJTV9USFJFU0hPTEQKKyNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoKHNpemVfdCkyVSAqIChzaXplX3QpMTAyNFUgKiAoc2l6ZV90KTEwMjRVKQorI2Vsc2UgICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNlbmRpZiAgLyogREVGQVVMVF9UUklNX1RIUkVTSE9MRCAqLworI2lmbmRlZiBERUZBVUxUX01NQVBfVEhSRVNIT0xECisjaWYgSEFWRV9NTUFQCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKChzaXplX3QpMjU2VSAqIChzaXplX3QpMTAyNFUpCisjZWxzZSAgIC8qIEhBVkVfTU1BUCAqLworI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjZW5kaWYgIC8qIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKi8KKyNpZm5kZWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAwCisjZW5kaWYgIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmbmRlZiBVU0VfREVWX1JBTkRPTQorI2RlZmluZSBVU0VfREVWX1JBTkRPTSAwCisjZW5kaWYgIC8qIFVTRV9ERVZfUkFORE9NICovCisjaWZuZGVmIE5PX01BTExJTkZPCisjZGVmaW5lIE5PX01BTExJTkZPIDAKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKyNpZm5kZWYgTUFMTElORk9fRklFTERfVFlQRQorI2RlZmluZSBNQUxMSU5GT19GSUVMRF9UWVBFIHNpemVfdAorI2VuZGlmICAvKiBNQUxMSU5GT19GSUVMRF9UWVBFICovCisKKy8qCisgIG1hbGxvcHQgdHVuaW5nIG9wdGlvbnMuICBTVklEL1hQRyBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW1ldGVyCisgIG51bWJlcnMgZm9yIG1hbGxvcHQsIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlCisgIGFyZSB1c2VkIGluIHRoaXMgbWFsbG9jLCBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMKKyAgbWFsbG9jIGRvZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wdGlvbnMuCisqLworCisjZGVmaW5lIE1fVFJJTV9USFJFU0hPTEQgICAgICgtMSkKKyNkZWZpbmUgTV9HUkFOVUxBUklUWSAgICAgICAgKC0yKQorI2RlZmluZSBNX01NQVBfVEhSRVNIT0xEICAgICAoLTMpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWxsaW5mbyBkZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIFRoaXMgdmVyc2lvbiBvZiBtYWxsb2Mgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIFNWSUQvWFBHIG1hbGxpbmZvCisgIHJvdXRpbmUgdGhhdCByZXR1cm5zIGEgc3RydWN0IGNvbnRhaW5pbmcgdXNhZ2UgcHJvcGVydGllcyBhbmQKKyAgc3RhdGlzdGljcy4gSXQgc2hvdWxkIHdvcmsgb24gYW55IHN5c3RlbSB0aGF0IGhhcyBhCisgIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBkZWZpbmluZyBzdHJ1Y3QgbWFsbGluZm8uICBUaGUgbWFpbgorICBkZWNsYXJhdGlvbiBuZWVkZWQgaXMgdGhlIG1hbGxpbmZvIHN0cnVjdCB0aGF0IGlzIHJldHVybmVkIChieS1jb3B5KQorICBieSBtYWxsaW5mbygpLiAgVGhlIG1hbGxvaW5mbyBzdHJ1Y3QgY29udGFpbnMgYSBidW5jaCBvZiBmaWVsZHMgdGhhdAorICBhcmUgbm90IGV2ZW4gbWVhbmluZ2Z1bCBpbiB0aGlzIHZlcnNpb24gb2YgbWFsbG9jLiAgVGhlc2UgZmllbGRzIGFyZQorICBhcmUgaW5zdGVhZCBmaWxsZWQgYnkgbWFsbGluZm8oKSB3aXRoIG90aGVyIG51bWJlcnMgdGhhdCBtaWdodCBiZSBvZgorICBpbnRlcmVzdC4KKworICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIHNob3VsZCBiZSBzZXQgaWYgeW91IGhhdmUgYQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZmlsZSB0aGF0IGluY2x1ZGVzIGEgZGVjbGFyYXRpb24gb2Ygc3RydWN0CisgIG1hbGxpbmZvLiAgSWYgc28sIGl0IGlzIGluY2x1ZGVkOyBlbHNlIGEgY29tcGxpYW50IHZlcnNpb24gaXMKKyAgZGVjbGFyZWQgYmVsb3cuICBUaGVzZSBtdXN0IGJlIHByZWNpc2VseSB0aGUgc2FtZSBmb3IgbWFsbGluZm8oKSB0bworICB3b3JrLiAgVGhlIG9yaWdpbmFsIFNWSUQgdmVyc2lvbiBvZiB0aGlzIHN0cnVjdCwgZGVmaW5lZCBvbiBtb3N0CisgIHN5c3RlbXMgd2l0aCBtYWxsaW5mbywgZGVjbGFyZXMgYWxsIGZpZWxkcyBhcyBpbnRzLiBCdXQgc29tZSBvdGhlcnMKKyAgZGVmaW5lIGFzIHVuc2lnbmVkIGxvbmcuIElmIHlvdXIgc3lzdGVtIGRlZmluZXMgdGhlIGZpZWxkcyB1c2luZyBhCisgIHR5cGUgb2YgZGlmZmVyZW50IHdpZHRoIHRoYW4gbGlzdGVkIGhlcmUsIHlvdSBNVVNUICNpbmNsdWRlIHlvdXIKKyAgc3lzdGVtIHZlcnNpb24gYW5kICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSC4KKyovCisKKy8qICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworCisjaWZkZWYgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSAorI2luY2x1ZGUgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIKKyNlbHNlIC8qIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKworc3RydWN0IG1hbGxpbmZvIHsKKyAgTUFMTElORk9fRklFTERfVFlQRSBhcmVuYTsgICAgLyogbm9uLW1tYXBwZWQgc3BhY2UgYWxsb2NhdGVkIGZyb20gc3lzdGVtICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHNtYmxrczsgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtzOyAgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1c21ibGtzOyAgLyogbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmc21ibGtzOyAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZm9yZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBrZWVwY29zdDsgLyogcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFjZSAqLworfTsKKworI2VuZGlmIC8qIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRGVjbGFyYXRpb25zIG9mIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgVVNFX0RMX1BSRUZJWAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyNkZWZpbmUgZGx2YWxsb2MgICAgICAgICAgICAgICB2YWxsb2MKKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyNkZWZpbmUgZGxtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyNkZWZpbmUgZGxtYWxsb2Nfc3RhdHMgICAgICAgICBtYWxsb2Nfc3RhdHMKKyNkZWZpbmUgZGxtYWxsb2NfdXNhYmxlX3NpemUgICBtYWxsb2NfdXNhYmxlX3NpemUKKyNkZWZpbmUgZGxtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworI2VuZGlmIC8qIFVTRV9ETF9QUkVGSVggKi8KKworCisvKgorICBtYWxsb2Moc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0KKyAgb24gQU5TSSBDIHN5c3RlbXMuCisKKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQorICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3QgMzJiaXQgc3lzdGVtcywgYW5kIDMyIGJ5dGVzIG9uIDY0Yml0CisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgcmVxdWVzdHMgZm9yIGh1Z2UgYW1vdW50cyBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUKKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90LgorKi8KK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCk7CisKKy8qCisgIGZyZWUodm9pZCogcCkKKyAgUmVsZWFzZXMgdGhlIGNodW5rIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHAsIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4KKyAgSXQgaGFzIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuIElmIHAgd2FzIG5vdCBtYWxsb2NlZCBvciBhbHJlYWR5CisgIGZyZWVkLCBmcmVlKHApIHdpbGwgYnkgZGVmYXVsdCBjYXVzZSB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGFib3J0LgorKi8KK3ZvaWQgIGRsZnJlZSh2b2lkKik7CisKKy8qCisgIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxvY2F0aW9ucworICBzZXQgdG8gemVyby4KKyovCit2b2lkKiBkbGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbAorICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuCisKKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQorICBwcmVmZXJzIGV4dGVuZGluZyBwIGluIG1vc3QgY2FzZXMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0CisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgorCisgIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBpcyBlcXVpdmFsZW50IHRvIG1hbGxvYy4KKworICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbgorICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCisKKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAorICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIHJlYWxsb2Mgd2l0aCBhIHNpemUKKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KKworICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuaworICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KKyovCisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKKworLyoKKyAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkCisgIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJndW1lbnQuCisKKyAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uIElmIHRoZSBhcmd1bWVudCBpcworICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KKyAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0CisgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgorCisgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgorKi8KK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworCisvKgorICB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UKKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLgorKi8KK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpCisgIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBhCisgIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRoZW4gc2V0cyB0aGUKKyAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZhbHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KKyAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCisgIDAuICBTVklEL1hQRy9BTlNJIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LAorICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZSBhcmUgdXNlIGluIHRoaXMgbWFsbG9jLAorICBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMgbWFsbG9jIGFsc28gc3VwcG9ydHMgb3RoZXIKKyAgb3B0aW9ucyBpbiBtYWxsb3B0LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuICBCcmllZmx5LCBzdXBwb3J0ZWQKKyAgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93cyAobGlzdGVkIGRlZmF1bHRzIGFyZSBmb3IgInR5cGljYWwiCisgIGNvbmZpZ3VyYXRpb25zKS4KKworICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICBkZWZhdWx0ICAgIGFsbG93ZWQgcGFyYW0gdmFsdWVzCisgIE1fVFJJTV9USFJFU0hPTEQgICAgIC0xICAgMioxMDI0KjEwMjQgICBhbnkgICAoTUFYX1NJWkVfVCBkaXNhYmxlcykKKyAgTV9HUkFOVUxBUklUWSAgICAgICAgLTIgICAgIHBhZ2Ugc2l6ZSAgIGFueSBwb3dlciBvZiAyID49IHBhZ2Ugc2l6ZQorICBNX01NQVBfVEhSRVNIT0xEICAgICAtMyAgICAgIDI1NioxMDI0ICAgYW55ICAgKG9yIDAgaWYgbm8gTU1BUCBzdXBwb3J0KQorKi8KK2ludCBkbG1hbGxvcHQoaW50LCBpbnQpOworCisvKgorICBtYWxsb2NfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgdG90YWwKKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMKKyAgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZAorICByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgRXZlbiBpZiBsb2NrcyBhcmUgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sCisgIHNvIHJlc3VsdHMgbWlnaHQgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKTsKKworLyoKKyAgbWFsbG9jX21heF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzCisgIHZhbHVlIHdpbGwgYmUgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZm9vdHByaW50IGlmIGRlYWxsb2NhdGVkIHNwYWNlCisgIGhhcyBiZWVuIHJlY2xhaW1lZCBieSB0aGUgc3lzdGVtLiBUaGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkCisgIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLAorICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZAorICBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLiAgRXZlbiBpZiBsb2NrcyBhcmUKKyAgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sIHNvIHJlc3VsdHMgbWlnaHQKKyAgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7CisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIG1hbGxpbmZvKCkKKyAgUmV0dXJucyAoYnkgY29weSkgYSBzdHJ1Y3QgY29udGFpbmluZyB2YXJpb3VzIHN1bW1hcnkgc3RhdGlzdGljczoKKworICBhcmVuYTogICAgIGN1cnJlbnQgdG90YWwgbm9uLW1tYXBwZWQgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCisgIG9yZGJsa3M6ICAgdGhlIG51bWJlciBvZiBmcmVlIGNodW5rcworICBzbWJsa3M6ICAgIGFsd2F5cyB6ZXJvLgorICBoYmxrczogICAgIGN1cnJlbnQgbnVtYmVyIG9mIG1tYXBwZWQgcmVnaW9ucworICBoYmxraGQ6ICAgIHRvdGFsIGJ5dGVzIGhlbGQgaW4gbW1hcHBlZCByZWdpb25zCisgIHVzbWJsa3M6ICAgdGhlIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlLiBUaGlzIHdpbGwgYmUgZ3JlYXRlcgorICAgICAgICAgICAgICAgIHRoYW4gY3VycmVudCB0b3RhbCBpZiB0cmltbWluZyBoYXMgb2NjdXJyZWQuCisgIGZzbWJsa3M6ICAgYWx3YXlzIHplcm8KKyAgdW9yZGJsa3M6ICBjdXJyZW50IHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAobm9ybWFsIG9yIG1tYXBwZWQpCisgIGZvcmRibGtzOiAgdG90YWwgZnJlZSBzcGFjZQorICBrZWVwY29zdDogIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIGlkZWFsbHkgYmUgcmVsZWFzZWQKKyAgICAgICAgICAgICAgIGJhY2sgdG8gc3lzdGVtIHZpYSBtYWxsb2NfdHJpbS4gKCJpZGVhbGx5IiBtZWFucyB0aGF0CisgICAgICAgICAgICAgICBpdCBpZ25vcmVzIHBhZ2UgcmVzdHJpY3Rpb25zIGV0Yy4pCisKKyAgQmVjYXVzZSB0aGVzZSBmaWVsZHMgYXJlIGludHMsIGJ1dCBpbnRlcm5hbCBib29ra2VlcGluZyBtYXkKKyAgYmUga2VwdCBhcyBsb25ncywgdGhlIHJlcG9ydGVkIHZhbHVlcyBtYXkgd3JhcCBhcm91bmQgemVybyBhbmQKKyAgdGh1cyBiZSBpbmFjY3VyYXRlLgorKi8KK3N0cnVjdCBtYWxsaW5mbyBkbG1hbGxpbmZvKHZvaWQpOworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKy8qCisgIGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NhbGxvYyBpcyBzaW1pbGFyIHRvIGNhbGxvYywgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEKKyAgc2luZ2xlIGNsZWFyZWQgc3BhY2UsIGl0IHJldHVybnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gbl9lbGVtZW50cworICBpbmRlcGVuZGVudCBlbGVtZW50cyB0aGF0IGNhbiBob2xkIGNvbnRlbnRzIG9mIHNpemUgZWxlbV9zaXplLCBlYWNoCisgIG9mIHdoaWNoIHN0YXJ0cyBvdXQgY2xlYXJlZCwgYW5kIGNhbiBiZSBpbmRlcGVuZGVudGx5IGZyZWVkLAorICByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFkamFjZW50bHkKKyAgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGggbXVsdGlwbGUgY2FsbG9jcyBvcgorICBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eSBpbiBzb21lCisgIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsLCB3aGljaCBpcworICBwcm9iYWJseSB0aGUgbW9zdCB0eXBpY2FsIHVzYWdlKS4gSWYgaXQgaXMgbnVsbCwgdGhlIHJldHVybmVkIGFycmF5CisgIGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvIGJlIGZyZWVkIHdoZW4gaXQgaXMKKyAgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5IG11c3QgYmUgb2YgYXQgbGVhc3QKKyAgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBwb2ludGVycyB0byB0aGUKKyAgY2h1bmtzLgorCisgIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yCisgIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCAiY2h1bmtzIgorICBpcyBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cworICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgorCisgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGluZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgorICBuZWVkZWQuIElmIHlvdSdkIGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9uY2UsIHlvdQorICBzaG91bGQgaW5zdGVhZCB1c2UgcmVndWxhciBjYWxsb2MgYW5kIGFzc2lnbiBwb2ludGVycyBpbnRvIHRoaXMKKyAgc3BhY2UgdG8gcmVwcmVzZW50IGVsZW1lbnRzLiAgKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdSBjYW5ub3QKKyAgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKKworICBpbmRlcGVuZGVudF9jYWxsb2Mgc2ltcGxpZmllcyBhbmQgc3BlZWRzIHVwIGltcGxlbWVudGF0aW9ucyBvZiBtYW55CisgIGtpbmRzIG9mIHBvb2xzLiAgSXQgbWF5IGFsc28gYmUgdXNlZnVsIHdoZW4gY29uc3RydWN0aW5nIGxhcmdlIGRhdGEKKyAgc3RydWN0dXJlcyB0aGF0IGluaXRpYWxseSBoYXZlIGEgZml4ZWQgbnVtYmVyIG9mIGZpeGVkLXNpemVkIG5vZGVzLAorICBidXQgdGhlIG51bWJlciBpcyBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLCBhbmQgc29tZSBvZiB0aGUgbm9kZXMKKyAgbWF5IGxhdGVyIG5lZWQgdG8gYmUgZnJlZWQuIEZvciBleGFtcGxlOgorCisgIHN0cnVjdCBOb2RlIHsgaW50IGl0ZW07IHN0cnVjdCBOb2RlKiBuZXh0OyB9OworCisgIHN0cnVjdCBOb2RlKiBidWlsZF9saXN0KCkgeworICAgIHN0cnVjdCBOb2RlKiogcG9vbDsKKyAgICBpbnQgbiA9IHJlYWRfbnVtYmVyX29mX25vZGVzX25lZWRlZCgpOworICAgIGlmIChuIDw9IDApIHJldHVybiAwOworICAgIHBvb2wgPSAoc3RydWN0IE5vZGUqKikoaW5kZXBlbmRlbnRfY2FsbG9jKG4sIHNpemVvZihzdHJ1Y3QgTm9kZSksIDApOworICAgIGlmIChwb29sID09IDApIGRpZSgpOworICAgIC8vIG9yZ2FuaXplIGludG8gYSBsaW5rZWQgbGlzdC4uLgorICAgIHN0cnVjdCBOb2RlKiBmaXJzdCA9IHBvb2xbMF07CisgICAgZm9yIChpID0gMDsgaSA8IG4tMTsgKytpKQorICAgICAgcG9vbFtpXS0+bmV4dCA9IHBvb2xbaSsxXTsKKyAgICBmcmVlKHBvb2wpOyAgICAgLy8gQ2FuIG5vdyBmcmVlIHRoZSBhcnJheSAob3Igbm90LCBpZiBpdCBpcyBuZWVkZWQgbGF0ZXIpCisgICAgcmV0dXJuIGZpcnN0OworICB9CisqLwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCwgc2l6ZV90LCB2b2lkKiopOworCisvKgorICBpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKTsKKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBhbGxvY2F0ZXMsIGFsbCBhdCBvbmNlLCBhIHNldCBvZiBuX2VsZW1lbnRzCisgIGNodW5rcyB3aXRoIHNpemVzIGluZGljYXRlZCBpbiB0aGUgInNpemVzIiBhcnJheS4gICAgSXQgcmV0dXJucworICBhbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGVzZSBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gYmUKKyAgaW5kZXBlbmRlbnRseSBmcmVlZCwgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVlZCB0bworICBiZSBhZGphY2VudGx5IGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoCisgIG11bHRpcGxlIGNhbGxvY3Mgb3IgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkKKyAgaW4gc29tZSBhcHBsaWNhdGlvbnMuCisKKyAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCkuIElmIGl0IGlzIG51bGwKKyAgdGhlIHJldHVybmVkIGFycmF5IGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvCisgIGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5CisgIG11c3QgYmUgb2YgYXQgbGVhc3Qgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZQorICBwb2ludGVycyB0byB0aGUgY2h1bmtzLgorCisgIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jb21hbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kIGNodW5rcyBpcworICBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cworICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgorCisgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGluZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgorICBuZWVkZWQuIElmIHlvdSdkIGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9uY2UsIHlvdQorICBzaG91bGQgaW5zdGVhZCB1c2UgYSBzaW5nbGUgcmVndWxhciBtYWxsb2MsIGFuZCBhc3NpZ24gcG9pbnRlcnMgYXQKKyAgcGFydGljdWxhciBvZmZzZXRzIGluIHRoZSBhZ2dyZWdhdGUgc3BhY2UuIChJbiB0aGlzIGNhc2UgdGhvdWdoLCB5b3UKKyAgY2Fubm90IGluZGVwZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCisKKyAgaW5kZXBlbmRlbnRfY29tYWxsYWMgZGlmZmVycyBmcm9tIGluZGVwZW5kZW50X2NhbGxvYyBpbiB0aGF0IGVhY2gKKyAgZWxlbWVudCBtYXkgaGF2ZSBhIGRpZmZlcmVudCBzaXplLCBhbmQgYWxzbyB0aGF0IGl0IGRvZXMgbm90CisgIGF1dG9tYXRpY2FsbHkgY2xlYXIgZWxlbWVudHMuCisKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGJlIHVzZWQgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBpbiBjYXNlcworICB3aGVyZSBzZXZlcmFsIHN0cnVjdHMgb3Igb2JqZWN0cyBtdXN0IGFsd2F5cyBiZSBhbGxvY2F0ZWQgYXQgdGhlCisgIHNhbWUgdGltZS4gIEZvciBleGFtcGxlOgorCisgIHN0cnVjdCBIZWFkIHsgLi4uIH0KKyAgc3RydWN0IEZvb3QgeyAuLi4gfQorCisgIHZvaWQgc2VuZF9tZXNzYWdlKGNoYXIqIG1zZykgeworICAgIGludCBtc2dsZW4gPSBzdHJsZW4obXNnKTsKKyAgICBzaXplX3Qgc2l6ZXNbM10gPSB7IHNpemVvZihzdHJ1Y3QgSGVhZCksIG1zZ2xlbiwgc2l6ZW9mKHN0cnVjdCBGb290KSB9OworICAgIHZvaWQqIGNodW5rc1szXTsKKyAgICBpZiAoaW5kZXBlbmRlbnRfY29tYWxsb2MoMywgc2l6ZXMsIGNodW5rcykgPT0gMCkKKyAgICAgIGRpZSgpOworICAgIHN0cnVjdCBIZWFkKiBoZWFkID0gKHN0cnVjdCBIZWFkKikoY2h1bmtzWzBdKTsKKyAgICBjaGFyKiAgICAgICAgYm9keSA9IChjaGFyKikoY2h1bmtzWzFdKTsKKyAgICBzdHJ1Y3QgRm9vdCogZm9vdCA9IChzdHJ1Y3QgRm9vdCopKGNodW5rc1syXSk7CisgICAgLy8gLi4uCisgIH0KKworICBJbiBnZW5lcmFsIHRob3VnaCwgaW5kZXBlbmRlbnRfY29tYWxsb2MgaXMgd29ydGggdXNpbmcgb25seSBmb3IKKyAgbGFyZ2VyIHZhbHVlcyBvZiBuX2VsZW1lbnRzLiBGb3Igc21hbGwgdmFsdWVzLCB5b3UgcHJvYmFibHkgd29uJ3QKKyAgZGV0ZWN0IGVub3VnaCBkaWZmZXJlbmNlIGZyb20gc2VyaWVzIG9mIG1hbGxvYyBjYWxscyB0byBib3RoZXIuCisKKyAgT3ZlcnVzZSBvZiBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gaW5jcmVhc2Ugb3ZlcmFsbCBtZW1vcnkgdXNhZ2UsCisgIHNpbmNlIGl0IGNhbm5vdCByZXVzZSBleGlzdGluZyBub25jb250aWd1b3VzIHNtYWxsIGNodW5rcyB0aGF0CisgIG1pZ2h0IGJlIGF2YWlsYWJsZSBmb3Igc29tZSBvZiB0aGUgZWxlbWVudHMuCisqLwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90LCBzaXplX3QqLCB2b2lkKiopOworCisKKy8qCisgIHB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIHZhbGxvYyhtaW5pbXVtLXBhZ2UtdGhhdC1ob2xkcyhuKSksIHRoYXQgaXMsCisgIHJvdW5kIHVwIG4gdG8gbmVhcmVzdCBwYWdlc2l6ZS4KKyAqLwordm9pZCogIGRscHZhbGxvYyhzaXplX3QpOworCisvKgorICBtYWxsb2NfdHJpbShzaXplX3QgcGFkKTsKKworICBJZiBwb3NzaWJsZSwgZ2l2ZXMgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbSAodmlhIG5lZ2F0aXZlIGFyZ3VtZW50cworICB0byBzYnJrKSBpZiB0aGVyZSBpcyB1bnVzZWQgbWVtb3J5IGF0IHRoZSBgaGlnaCcgZW5kIG9mIHRoZSBtYWxsb2MKKyAgcG9vbCBvciBpbiB1bnVzZWQgTU1BUCBzZWdtZW50cy4gWW91IGNhbiBjYWxsIHRoaXMgYWZ0ZXIgZnJlZWluZworICBsYXJnZSBibG9ja3Mgb2YgbWVtb3J5IHRvIHBvdGVudGlhbGx5IHJlZHVjZSB0aGUgc3lzdGVtLWxldmVsIG1lbW9yeQorICByZXF1aXJlbWVudHMgb2YgYSBwcm9ncmFtLiBIb3dldmVyLCBpdCBjYW5ub3QgZ3VhcmFudGVlIHRvIHJlZHVjZQorICBtZW1vcnkuIFVuZGVyIHNvbWUgYWxsb2NhdGlvbiBwYXR0ZXJucywgc29tZSBsYXJnZSBmcmVlIGJsb2NrcyBvZgorICBtZW1vcnkgd2lsbCBiZSBsb2NrZWQgYmV0d2VlbiB0d28gdXNlZCBjaHVua3MsIHNvIHRoZXkgY2Fubm90IGJlCisgIGdpdmVuIGJhY2sgdG8gdGhlIHN5c3RlbS4KKworICBUaGUgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIGZyZWUKKyAgdHJhaWxpbmcgc3BhY2UgdG8gbGVhdmUgdW50cmltbWVkLiBJZiB0aGlzIGFyZ3VtZW50IGlzIHplcm8sIG9ubHkKKyAgdGhlIG1pbmltdW0gYW1vdW50IG9mIG1lbW9yeSB0byBtYWludGFpbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMKKyAgd2lsbCBiZSBsZWZ0LiBOb24temVybyBhcmd1bWVudHMgY2FuIGJlIHN1cHBsaWVkIHRvIG1haW50YWluIGVub3VnaAorICB0cmFpbGluZyBzcGFjZSB0byBzZXJ2aWNlIGZ1dHVyZSBleHBlY3RlZCBhbGxvY2F0aW9ucyB3aXRob3V0IGhhdmluZworICB0byByZS1vYnRhaW4gbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4KKworICBNYWxsb2NfdHJpbSByZXR1cm5zIDEgaWYgaXQgYWN0dWFsbHkgcmVsZWFzZWQgYW55IG1lbW9yeSwgZWxzZSAwLgorKi8KK2ludCAgZGxtYWxsb2NfdHJpbShzaXplX3QpOworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7CisKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAorICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0CisgIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6CisKKyAgcCA9IG1hbGxvYyhuKTsKKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOworKi8KK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKik7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLwordm9pZCAgZGxtYWxsb2Nfc3RhdHModm9pZCk7CisKKyNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KKworI2lmIE1TUEFDRVMKKworLyoKKyAgbXNwYWNlIGlzIGFuIG9wYXF1ZSB0eXBlIHJlcHJlc2VudGluZyBhbiBpbmRlcGVuZGVudAorICByZWdpb24gb2Ygc3BhY2UgdGhhdCBzdXBwb3J0cyBtc3BhY2VfbWFsbG9jLCBldGMuCisqLwordHlwZWRlZiB2b2lkKiBtc3BhY2U7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2UgY3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBpbmRlcGVuZGVudCBzcGFjZSB3aXRoIHRoZQorICBnaXZlbiBpbml0aWFsIGNhcGFjaXR5LCBvciwgaWYgMCwgdGhlIGRlZmF1bHQgZ3JhbnVsYXJpdHkgc2l6ZS4gIEl0CisgIHJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBubyBzeXN0ZW0gbWVtb3J5IGF2YWlsYWJsZSB0byBjcmVhdGUgdGhlCisgIHNwYWNlLiAgSWYgYXJndW1lbnQgbG9ja2VkIGlzIG5vbi16ZXJvLCB0aGUgc3BhY2UgdXNlcyBhIHNlcGFyYXRlCisgIGxvY2sgdG8gY29udHJvbCBhY2Nlc3MuIFRoZSBjYXBhY2l0eSBvZiB0aGUgc3BhY2Ugd2lsbCBncm93CisgIGR5bmFtaWNhbGx5IGFzIG5lZWRlZCB0byBzZXJ2aWNlIG1zcGFjZV9tYWxsb2MgcmVxdWVzdHMuICBZb3UgY2FuCisgIGNvbnRyb2wgdGhlIHNpemVzIG9mIGluY3JlbWVudGFsIGluY3JlYXNlcyBvZiB0aGlzIHNwYWNlIGJ5CisgIGNvbXBpbGluZyB3aXRoIGEgZGlmZmVyZW50IERFRkFVTFRfR1JBTlVMQVJJVFkgb3IgZHluYW1pY2FsbHkKKyAgc2V0dGluZyB3aXRoIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgdmFsdWUpLgorKi8KK21zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIGRlc3Ryb3lfbXNwYWNlIGRlc3Ryb3lzIHRoZSBnaXZlbiBzcGFjZSwgYW5kIGF0dGVtcHRzIHRvIHJldHVybiBhbGwKKyAgb2YgaXRzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIHJldHVybmluZyB0aGUgdG90YWwgbnVtYmVyIG9mCisgIGJ5dGVzIGZyZWVkLiBBZnRlciBkZXN0cnVjdGlvbiwgdGhlIHJlc3VsdHMgb2YgYWNjZXNzIHRvIGFsbCBtZW1vcnkKKyAgdXNlZCBieSB0aGUgc3BhY2UgYmVjb21lIHVuZGVmaW5lZC4KKyovCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCk7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlIHVzZXMgdGhlIG1lbW9yeSBzdXBwbGllZCBhcyB0aGUgaW5pdGlhbCBiYXNlCisgIG9mIGEgbmV3IG1zcGFjZS4gUGFydCAobGVzcyB0aGFuIDEyOCpzaXplb2Yoc2l6ZV90KSBieXRlcykgb2YgdGhpcworICBzcGFjZSBpcyB1c2VkIGZvciBib29ra2VlcGluZywgc28gdGhlIGNhcGFjaXR5IG11c3QgYmUgYXQgbGVhc3QgdGhpcworICBsYXJnZS4gKE90aGVyd2lzZSAwIGlzIHJldHVybmVkLikgV2hlbiB0aGlzIGluaXRpYWwgc3BhY2UgaXMKKyAgZXhoYXVzdGVkLCBhZGRpdGlvbmFsIG1lbW9yeSB3aWxsIGJlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4KKyAgRGVzdHJveWluZyB0aGlzIHNwYWNlIHdpbGwgZGVhbGxvY2F0ZSBhbGwgYWRkaXRpb25hbGx5IGFsbG9jYXRlZAorICBzcGFjZSAoaWYgcG9zc2libGUpIGJ1dCBub3QgdGhlIGluaXRpYWwgYmFzZS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsKKworLyoKKyAgbXNwYWNlX21hbGxvYyBiZWhhdmVzIGFzIG1hbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfZnJlZSBiZWhhdmVzIGFzIGZyZWUsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX2ZyZWUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZC4KKyAgZnJlZSBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX2ZyZWUgYmVjYXVzZSBmcmVlZCBjaHVua3MgZnJvbQorICBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcgc3BhY2VzLgorKi8KK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKTsKKworLyoKKyAgbXNwYWNlX3JlYWxsb2MgYmVoYXZlcyBhcyByZWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKworICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9yZWFsbG9jIGlzIG5vdCBhY3R1YWxseQorICBuZWVkZWQuICByZWFsbG9jIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfcmVhbGxvYyBiZWNhdXNlCisgIHJlYWxsb2NlZCBjaHVua3MgZnJvbSBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcKKyAgc3BhY2VzLgorKi8KK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSwgc2l6ZV90IG5ld3NpemUpOworCisvKgorICBtc3BhY2VfY2FsbG9jIGJlaGF2ZXMgYXMgY2FsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsKKworLyoKKyAgbXNwYWNlX21lbWFsaWduIGJlaGF2ZXMgYXMgbWVtYWxpZ24sIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY2FsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtX3NpemUsIHZvaWQqIGNodW5rc1tdKTsKKworLyoKKyAgbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY29tYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfbWF4X2Zvb3RwcmludCgpIHJldHVybnMgdGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KKyovCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbXNwYWNlX21hbGxpbmZvIGJlaGF2ZXMgYXMgbWFsbGluZm8sIGJ1dCByZXBvcnRzIHByb3BlcnRpZXMgb2YKKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3N0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgbXNwYWNlX21hbGxvY19zdGF0cyBiZWhhdmVzIGFzIG1hbGxvY19zdGF0cywgYnV0IHJlcG9ydHMKKyAgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfdHJpbSBiZWhhdmVzIGFzIG1hbGxvY190cmltLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCk7CisKKy8qCisgIEFuIGFsaWFzIGZvciBtYWxsb3B0LgorKi8KK2ludCBtc3BhY2VfbWFsbG9wdChpbnQsIGludCk7CisKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsgIC8qIGVuZCBvZiBleHRlcm4gIkMiICovCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyoKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFRvIG1ha2UgYSBmdWxseSBjdXN0b21pemFibGUgbWFsbG9jLmggaGVhZGVyIGZpbGUsIGN1dCBldmVyeXRoaW5nCisgIGFib3ZlIHRoaXMgbGluZSwgcHV0IGludG8gZmlsZSBtYWxsb2MuaCwgZWRpdCB0byBzdWl0LCBhbmQgI2luY2x1ZGUgaXQKKyAgb24gdGhlIG5leHQgbGluZSwgYXMgd2VsbCBhcyBpbiBwcm9ncmFtcyB0aGF0IHVzZSB0aGlzIG1hbGxvYy4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCisvKiAjaW5jbHVkZSAibWFsbG9jLmgiICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGludGVybmFsICNpbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDE0NiApIC8qIG5vICJ1bnNpZ25lZCIgd2FybmluZ3MgKi8KKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgLyogZm9yIHByaW50aW5nIGluIG1hbGxvY19zdGF0cyAqLworCisjaWZuZGVmIExBQ0tTX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPiAgICAgICAvKiBmb3IgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjZW5kaWYgLyogTEFDS1NfRVJSTk9fSCAqLworI2lmIEZPT1RFUlMKKyNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAvKiBmb3IgbWFnaWMgaW5pdGlhbGl6YXRpb24gKi8KKyNlbmRpZiAvKiBGT09URVJTICovCisjaWZuZGVmIExBQ0tTX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+ICAgICAgLyogZm9yIGFib3J0KCkgKi8KKyNlbmRpZiAvKiBMQUNLU19TVERMSUJfSCAqLworI2lmZGVmIERFQlVHCisjaWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKKyNkZWZpbmUgYXNzZXJ0KHgpIGlmKCEoeCkpIEFCT1JUCisjZWxzZSAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjZWxzZSAgLyogREVCVUcgKi8KKyNkZWZpbmUgYXNzZXJ0KHgpCisjZW5kaWYgLyogREVCVUcgKi8KKyNpZm5kZWYgTEFDS1NfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAvKiBmb3IgbWVtc2V0IGV0YyAqLworI2VuZGlmICAvKiBMQUNLU19TVFJJTkdfSCAqLworI2lmIFVTRV9CVUlMVElOX0ZGUworI2lmbmRlZiBMQUNLU19TVFJJTkdTX0gKKyNpbmNsdWRlIDxzdHJpbmdzLmg+ICAgICAvKiBmb3IgZmZzICovCisjZW5kaWYgLyogTEFDS1NfU1RSSU5HU19IICovCisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisjaWYgSEFWRV9NTUFQCisjaWZuZGVmIExBQ0tTX1NZU19NTUFOX0gKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPiAgICAvKiBmb3IgbW1hcCAqLworI2VuZGlmIC8qIExBQ0tTX1NZU19NTUFOX0ggKi8KKyNpZm5kZWYgTEFDS1NfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogTEFDS1NfRkNOVExfSCAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2lmIEhBVkVfTU9SRUNPUkUKKyNpZm5kZWYgTEFDS1NfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4gICAgIC8qIGZvciBzYnJrICovCisjZWxzZSAvKiBMQUNLU19VTklTVERfSCAqLworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykKK2V4dGVybiB2b2lkKiAgICAgc2JyayhwdHJkaWZmX3QpOworI2VuZGlmIC8qIEZyZWVCU0QgZXRjICovCisjZW5kaWYgLyogTEFDS1NfVU5JU1REX0ggKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKworI2lmbmRlZiBXSU4zMgorI2lmbmRlZiBtYWxsb2NfZ2V0cGFnZXNpemUKKyMgIGlmZGVmIF9TQ19QQUdFU0laRSAgICAgICAgIC8qIHNvbWUgU1ZSNCBzeXN0ZW1zIG9taXQgYW4gdW5kZXJzY29yZSAqLworIyAgICBpZm5kZWYgX1NDX1BBR0VfU0laRQorIyAgICAgIGRlZmluZSBfU0NfUEFHRV9TSVpFIF9TQ19QQUdFU0laRQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9TQ19QQUdFX1NJWkUKKyMgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpCisjICBlbHNlCisjICAgIGlmIGRlZmluZWQoQlNEKSB8fCBkZWZpbmVkKERHVVgpIHx8IGRlZmluZWQoSEFWRV9HRVRQQUdFU0laRSkKKyAgICAgICBleHRlcm4gc2l6ZV90IGdldHBhZ2VzaXplKCk7CisjICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBXSU4zMiAvKiB1c2Ugc3VwcGxpZWQgZW11bGF0aW9uIG9mIGdldHBhZ2VzaXplICovCisjICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKKyMgICAgICBlbHNlCisjICAgICAgICBpZm5kZWYgTEFDS1NfU1lTX1BBUkFNX0gKKyMgICAgICAgICAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICAgICAgICBlbmRpZgorIyAgICAgICAgaWZkZWYgRVhFQ19QQUdFU0laRQorIyAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIEVYRUNfUEFHRVNJWkUKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgaWZkZWYgTkJQRworIyAgICAgICAgICAgIGlmbmRlZiBDTFNJWkUKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQRworIyAgICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKE5CUEcgKiBDTFNJWkUpCisjICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgIGlmZGVmIE5CUEMKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQQworIyAgICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICAgIGlmZGVmIFBBR0VTSVpFCisjICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgUEFHRVNJWkUKKyMgICAgICAgICAgICAgIGVsc2UgLyoganVzdCBndWVzcyAqLworIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplICgoc2l6ZV90KTQwOTZVKQorIyAgICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICBlbmRpZgorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gc2l6ZV90IGFuZCBhbGlnbm1lbnQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGUgYnl0ZSBhbmQgYml0IHNpemUgb2YgYSBzaXplX3QgKi8KKyNkZWZpbmUgU0laRV9UX1NJWkUgICAgICAgICAoc2l6ZW9mKHNpemVfdCkpCisjZGVmaW5lIFNJWkVfVF9CSVRTSVpFICAgICAgKHNpemVvZihzaXplX3QpIDw8IDMpCisKKy8qIFNvbWUgY29uc3RhbnRzIGNvZXJjZWQgdG8gc2l6ZV90ICovCisvKiBBbm5veWluZyBidXQgbmVjZXNzYXJ5IHRvIGF2b2lkIGVycm9ycyBvbiBzb21lIHBsYWZ0b3JtcyAqLworI2RlZmluZSBTSVpFX1RfWkVSTyAgICAgICAgICgoc2l6ZV90KTApCisjZGVmaW5lIFNJWkVfVF9PTkUgICAgICAgICAgKChzaXplX3QpMSkKKyNkZWZpbmUgU0laRV9UX1RXTyAgICAgICAgICAoKHNpemVfdCkyKQorI2RlZmluZSBUV09fU0laRV9UX1NJWkVTICAgIChTSVpFX1RfU0laRTw8MSkKKyNkZWZpbmUgRk9VUl9TSVpFX1RfU0laRVMgICAoU0laRV9UX1NJWkU8PDIpCisjZGVmaW5lIFNJWF9TSVpFX1RfU0laRVMgICAgKEZPVVJfU0laRV9UX1NJWkVTK1RXT19TSVpFX1RfU0laRVMpCisjZGVmaW5lIEhBTEZfTUFYX1NJWkVfVCAgICAgKE1BWF9TSVpFX1QgLyAyVSkKKworLyogVGhlIGJpdCBtYXNrIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gTUFMTE9DX0FMSUdOTUVOVCAqLworI2RlZmluZSBDSFVOS19BTElHTl9NQVNLICAgIChNQUxMT0NfQUxJR05NRU5UIC0gU0laRV9UX09ORSkKKworLyogVHJ1ZSBpZiBhZGRyZXNzIGEgaGFzIGFjY2VwdGFibGUgYWxpZ25tZW50ICovCisjZGVmaW5lIGlzX2FsaWduZWQoQSkgICAgICAgKCgoc2l6ZV90KSgoQSkpICYgKENIVU5LX0FMSUdOX01BU0spKSA9PSAwKQorCisvKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG9mZnNldCBhbiBhZGRyZXNzIHRvIGFsaWduIGl0ICovCisjZGVmaW5lIGFsaWduX29mZnNldChBKVwKKyAoKCgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0spID09IDApPyAwIDpcCisgICgoTUFMTE9DX0FMSUdOTUVOVCAtICgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0spKSAmIENIVU5LX0FMSUdOX01BU0spKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNTUFQIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICAgSWYgSEFWRV9NT1JFQ09SRSBvciBIQVZFX01NQVAgYXJlIGZhbHNlLCB3ZSBqdXN0IGRlZmluZSBjYWxscyBhbmQKKyAgIGNoZWNrcyB0byBmYWlsIHNvIGNvbXBpbGVyIG9wdGltaXplciBjYW4gZGVsZXRlIGNvZGUgcmF0aGVyIHRoYW4KKyAgIHVzaW5nIHNvIG1hbnkgIiNpZiJzLgorKi8KKworCisvKiBNT1JFQ09SRSBhbmQgTU1BUCBtdXN0IHJldHVybiBNRkFJTCBvbiBmYWlsdXJlICovCisjZGVmaW5lIE1GQUlMICAgICAgICAgICAgICAgICgodm9pZCopKE1BWF9TSVpFX1QpKQorI2RlZmluZSBDTUZBSUwgICAgICAgICAgICAgICAoKGNoYXIqKShNRkFJTCkpIC8qIGRlZmluZWQgZm9yIGNvbnZlbmllbmNlICovCisKKyNpZiAhSEFWRV9NTUFQCisjZGVmaW5lIElTX01NQVBQRURfQklUICAgICAgIChTSVpFX1RfWkVSTykKKyNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgKFNJWkVfVF9aRVJPKQorI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICBNRkFJTAorI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICAoLTEpCisjZGVmaW5lIERJUkVDVF9NTUFQKHMpICAgICAgIE1GQUlMCisKKyNlbHNlIC8qIEhBVkVfTU1BUCAqLworI2RlZmluZSBJU19NTUFQUEVEX0JJVCAgICAgICAoU0laRV9UX09ORSkKKyNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgKFNJWkVfVF9PTkUpCisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICAgbXVubWFwKChhKSwgKHMpKQorI2RlZmluZSBNTUFQX1BST1QgICAgICAgICAgICAoUFJPVF9SRUFEfFBST1RfV1JJVEUpCisjaWYgIWRlZmluZWQoTUFQX0FOT05ZTU9VUykgJiYgZGVmaW5lZChNQVBfQU5PTikKKyNkZWZpbmUgTUFQX0FOT05ZTU9VUyAgICAgICAgTUFQX0FOT04KKyNlbmRpZiAvKiBNQVBfQU5PTiAqLworI2lmZGVmIE1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMpCisjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIC0xLCAwKQorI2Vsc2UgLyogTUFQX0FOT05ZTU9VUyAqLworLyoKKyAgIE5lYXJseSBhbGwgdmVyc2lvbnMgb2YgbW1hcCBzdXBwb3J0IE1BUF9BTk9OWU1PVVMsIHNvIHRoZSBmb2xsb3dpbmcKKyAgIGlzIHVubGlrZWx5IHRvIGJlIG5lZWRlZCwgYnV0IGlzIHN1cHBsaWVkIGp1c3QgaW4gY2FzZS4KKyovCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURSkKK3N0YXRpYyBpbnQgZGV2X3plcm9fZmQgPSAtMTsgLyogQ2FjaGVkIGZpbGUgZGVzY3JpcHRvciBmb3IgL2Rldi96ZXJvLiAqLworI2RlZmluZSBDQUxMX01NQVAocykgKChkZXZfemVyb19mZCA8IDApID8gXAorICAgICAgICAgICAoZGV2X3plcm9fZmQgPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpLCBcCisgICAgICAgICAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpIDogXAorICAgICAgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgZGV2X3plcm9fZmQsIDApKQorI2VuZGlmIC8qIE1BUF9BTk9OWU1PVVMgKi8KKworI2RlZmluZSBESVJFQ1RfTU1BUChzKSAgICAgICBDQUxMX01NQVAocykKKyNlbHNlIC8qIFdJTjMyICovCisKKy8qIFdpbjMyIE1NQVAgdmlhIFZpcnR1YWxBbGxvYyAqLworc3RhdGljIHZvaWQqIHdpbjMybW1hcChzaXplX3Qgc2l6ZSkgeworICB2b2lkKiBwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVCwgUEFHRV9FWEVDVVRFX1JFQURXUklURSk7CisgIHJldHVybiAocHRyICE9IDApPyBwdHI6IE1GQUlMOworfQorCisvKiBGb3IgZGlyZWN0IE1NQVAsIHVzZSBNRU1fVE9QX0RPV04gdG8gbWluaW1pemUgaW50ZXJmZXJlbmNlICovCitzdGF0aWMgdm9pZCogd2luMzJkaXJlY3RfbW1hcChzaXplX3Qgc2l6ZSkgeworICB2b2lkKiBwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVHxNRU1fVE9QX0RPV04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFKTsKKyAgcmV0dXJuIChwdHIgIT0gMCk/IHB0cjogTUZBSUw7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgcmVsZWFzaW5nIGNvYWxlc2VkIHNlZ21lbnRzICovCitzdGF0aWMgaW50IHdpbjMybXVubWFwKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpIHsKKyAgTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIG1pbmZvOworICBjaGFyKiBjcHRyID0gcHRyOworICB3aGlsZSAoc2l6ZSkgeworICAgIGlmIChWaXJ0dWFsUXVlcnkoY3B0ciwgJm1pbmZvLCBzaXplb2YobWluZm8pKSA9PSAwKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtaW5mby5CYXNlQWRkcmVzcyAhPSBjcHRyIHx8IG1pbmZvLkFsbG9jYXRpb25CYXNlICE9IGNwdHIgfHwKKyAgICAgICAgbWluZm8uU3RhdGUgIT0gTUVNX0NPTU1JVCB8fCBtaW5mby5SZWdpb25TaXplID4gc2l6ZSkKKyAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoVmlydHVhbEZyZWUoY3B0ciwgMCwgTUVNX1JFTEVBU0UpID09IDApCisgICAgICByZXR1cm4gLTE7CisgICAgY3B0ciArPSBtaW5mby5SZWdpb25TaXplOworICAgIHNpemUgLT0gbWluZm8uUmVnaW9uU2l6ZTsKKyAgfQorICByZXR1cm4gMDsKK30KKworI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICB3aW4zMm1tYXAocykKKyNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICAgd2luMzJtdW5tYXAoKGEpLCAocykpCisjZGVmaW5lIERJUkVDVF9NTUFQKHMpICAgICAgIHdpbjMyZGlyZWN0X21tYXAocykKKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworCisjaWYgSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQCisjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgbXJlbWFwKChhZGRyKSwgKG9zeiksIChuc3opLCAobXYpKQorI2Vsc2UgIC8qIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUCAqLworI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIE1GQUlMCisjZW5kaWYgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCisKKyNpZiBIQVZFX01PUkVDT1JFCisjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgIE1PUkVDT1JFKFMpCisjZWxzZSAgLyogSEFWRV9NT1JFQ09SRSAqLworI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgICBNRkFJTAorI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8KKworLyogbXN0YXRlIGJpdCBzZXQgaWYgY29udGluZ3VvdXMgbW9yZWNvcmUgZGlzYWJsZWQgb3IgZmFpbGVkICovCisjZGVmaW5lIFVTRV9OT05DT05USUdVT1VTX0JJVCAoNFUpCisKKy8qIHNlZ21lbnQgYml0IHNldCBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSAqLworI2RlZmluZSBFWFRFUk5fQklUICAgICAgICAgICAgKDhVKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2NrIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBVU0VfTE9DS1MKKworLyoKKyAgV2hlbiBsb2NrcyBhcmUgZGVmaW5lZCwgdGhlcmUgYXJlIHVwIHRvIHR3byBnbG9iYWwgbG9ja3M6CisKKyAgKiBJZiBIQVZFX01PUkVDT1JFLCBtb3JlY29yZV9tdXRleCBwcm90ZWN0cyBzZXF1ZW5jZXMgb2YgY2FsbHMgdG8KKyAgICBNT1JFQ09SRS4gIEluIG1hbnkgY2FzZXMgc3lzX2FsbG9jIHJlcXVpcmVzIHR3byBjYWxscywgdGhhdCBzaG91bGQKKyAgICBub3QgYmUgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyBieSBvdGhlciB0aHJlYWRzLiAgVGhpcyBkb2VzIG5vdAorICAgIHByb3RlY3QgYWdhaW5zdCBkaXJlY3QgY2FsbHMgdG8gTU9SRUNPUkUgYnkgb3RoZXIgdGhyZWFkcyBub3QKKyAgICB1c2luZyB0aGlzIGxvY2ssIHNvIHRoZXJlIGlzIHN0aWxsIGNvZGUgdG8gY29wZSB0aGUgYmVzdCB3ZSBjYW4gb24KKyAgICBpbnRlcmZlcmVuY2UuCisKKyAgKiBtYWdpY19pbml0X211dGV4IGVuc3VyZXMgdGhhdCBtcGFyYW1zLm1hZ2ljIGFuZCBvdGhlcgorICAgIHVuaXF1ZSBtcGFyYW1zIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlLgorKi8KKworI2lmbmRlZiBXSU4zMgorLyogQnkgZGVmYXVsdCB1c2UgcG9zaXggbG9ja3MgKi8KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZGVmaW5lIE1MT0NLX1QgcHRocmVhZF9tdXRleF90CisjZGVmaW5lIElOSVRJQUxfTE9DSyhsKSAgICAgIHB0aHJlYWRfbXV0ZXhfaW5pdChsLCBOVUxMKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0sobCkgICAgICBwdGhyZWFkX211dGV4X2xvY2sobCkKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKGwpICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sobCkKKworI2lmIEhBVkVfTU9SRUNPUkUKK3N0YXRpYyBNTE9DS19UIG1vcmVjb3JlX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovCisKK3N0YXRpYyBNTE9DS19UIG1hZ2ljX2luaXRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCisjZWxzZSAvKiBXSU4zMiAqLworLyoKKyAgIEJlY2F1c2UgbG9jay1wcm90ZWN0ZWQgcmVnaW9ucyBoYXZlIGJvdW5kZWQgdGltZXMsIGFuZCB0aGVyZQorICAgYXJlIG5vIHJlY3Vyc2l2ZSBsb2NrIGNhbGxzLCB3ZSBjYW4gdXNlIHNpbXBsZSBzcGlubG9ja3MuCisqLworCisjZGVmaW5lIE1MT0NLX1QgbG9uZworc3RhdGljIGludCB3aW4zMl9hY3F1aXJlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGZvciAoOzspIHsKKyNpZmRlZiBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZVBvaW50ZXIKKyAgICBpZiAoIUludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKHNsLCAxLCAwKSkKKyAgICAgIHJldHVybiAwOworI2Vsc2UgIC8qIFVzZSBvbGRlciB2b2lkKiB2ZXJzaW9uICovCisgICAgaWYgKCFJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgodm9pZCoqKXNsLCAodm9pZCopMSwgKHZvaWQqKTApKQorICAgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyICovCisgICAgU2xlZXAgKDApOworICB9Cit9CisKK3N0YXRpYyB2b2lkIHdpbjMyX3JlbGVhc2VfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgSW50ZXJsb2NrZWRFeGNoYW5nZSAoc2wsIDApOworfQorCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsKSAgICAgICoobCk9MAorI2RlZmluZSBBQ1FVSVJFX0xPQ0sobCkgICAgICB3aW4zMl9hY3F1aXJlX2xvY2sobCkKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKGwpICAgICAgd2luMzJfcmVsZWFzZV9sb2NrKGwpCisjaWYgSEFWRV9NT1JFQ09SRQorc3RhdGljIE1MT0NLX1QgbW9yZWNvcmVfbXV0ZXg7CisjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLworc3RhdGljIE1MT0NLX1QgbWFnaWNfaW5pdF9tdXRleDsKKyNlbmRpZiAvKiBXSU4zMiAqLworCisjZGVmaW5lIFVTRV9MT0NLX0JJVCAgICAgICAgICAgICAgICgyVSkKKyNlbHNlICAvKiBVU0VfTE9DS1MgKi8KKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBJTklUSUFMX0xPQ0sobCkKKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworI2lmIFVTRV9MT0NLUyAmJiBIQVZFX01PUkVDT1JFCisjZGVmaW5lIEFDUVVJUkVfTU9SRUNPUkVfTE9DSygpICAgIEFDUVVJUkVfTE9DSygmbW9yZWNvcmVfbXV0ZXgpOworI2RlZmluZSBSRUxFQVNFX01PUkVDT1JFX0xPQ0soKSAgICBSRUxFQVNFX0xPQ0soJm1vcmVjb3JlX211dGV4KTsKKyNlbHNlIC8qIFVTRV9MT0NLUyAmJiBIQVZFX01PUkVDT1JFICovCisjZGVmaW5lIEFDUVVJUkVfTU9SRUNPUkVfTE9DSygpCisjZGVmaW5lIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpCisjZW5kaWYgLyogVVNFX0xPQ0tTICYmIEhBVkVfTU9SRUNPUkUgKi8KKworI2lmIFVTRV9MT0NLUworI2RlZmluZSBBQ1FVSVJFX01BR0lDX0lOSVRfTE9DSygpICBBQ1FVSVJFX0xPQ0soJm1hZ2ljX2luaXRfbXV0ZXgpOworI2RlZmluZSBSRUxFQVNFX01BR0lDX0lOSVRfTE9DSygpICBSRUxFQVNFX0xPQ0soJm1hZ2ljX2luaXRfbXV0ZXgpOworI2Vsc2UgIC8qIFVTRV9MT0NLUyAqLworI2RlZmluZSBBQ1FVSVJFX01BR0lDX0lOSVRfTE9DSygpCisjZGVmaW5lIFJFTEVBU0VfTUFHSUNfSU5JVF9MT0NLKCkKKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ2h1bmsgcmVwcmVzZW50YXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICAoVGhlIGZvbGxvd2luZyBpbmNsdWRlcyBsaWdodGx5IGVkaXRlZCBleHBsYW5hdGlvbnMgYnkgQ29saW4gUGx1bWIuKQorCisgIFRoZSBtYWxsb2NfY2h1bmsgZGVjbGFyYXRpb24gYmVsb3cgaXMgbWlzbGVhZGluZyAoYnV0IGFjY3VyYXRlIGFuZAorICBuZWNlc3NhcnkpLiAgSXQgZGVjbGFyZXMgYSAidmlldyIgaW50byBtZW1vcnkgYWxsb3dpbmcgYWNjZXNzIHRvCisgIG5lY2Vzc2FyeSBmaWVsZHMgYXQga25vd24gb2Zmc2V0cyBmcm9tIGEgZ2l2ZW4gYmFzZS4KKworICBDaHVua3Mgb2YgbWVtb3J5IGFyZSBtYWludGFpbmVkIHVzaW5nIGEgYGJvdW5kYXJ5IHRhZycgbWV0aG9kIGFzCisgIG9yaWdpbmFsbHkgZGVzY3JpYmVkIGJ5IEtudXRoLiAgKFNlZSB0aGUgcGFwZXIgYnkgUGF1bCBXaWxzb24KKyAgZnRwOi8vZnRwLmNzLnV0ZXhhcy5lZHUvcHViL2dhcmJhZ2UvYWxsb2NzcnYucHMgZm9yIGEgc3VydmV5IG9mIHN1Y2gKKyAgdGVjaG5pcXVlcy4pICBTaXplcyBvZiBmcmVlIGNodW5rcyBhcmUgc3RvcmVkIGJvdGggaW4gdGhlIGZyb250IG9mCisgIGVhY2ggY2h1bmsgYW5kIGF0IHRoZSBlbmQuICBUaGlzIG1ha2VzIGNvbnNvbGlkYXRpbmcgZnJhZ21lbnRlZAorICBjaHVua3MgaW50byBiaWdnZXIgY2h1bmtzIGZhc3QuICBUaGUgaGVhZCBmaWVsZHMgYWxzbyBob2xkIGJpdHMKKyAgcmVwcmVzZW50aW5nIHdoZXRoZXIgY2h1bmtzIGFyZSBmcmVlIG9yIGluIHVzZS4KKworICBIZXJlIGFyZSBzb21lIHBpY3R1cmVzIHRvIG1ha2UgaXQgY2xlYXJlci4gIFRoZXkgYXJlICJleHBsb2RlZCIgdG8KKyAgc2hvdyB0aGF0IHRoZSBzdGF0ZSBvZiBhIGNodW5rIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGV4dGVuZGluZyBmcm9tCisgIHRoZSBoaWdoIDMxIGJpdHMgb2YgdGhlIGhlYWQgZmllbGQgb2YgaXRzIGhlYWRlciB0aHJvdWdoIHRoZQorICBwcmV2X2Zvb3QgYW5kIFBJTlVTRV9CSVQgYml0IG9mIHRoZSBmb2xsb3dpbmcgY2h1bmsgaGVhZGVyLgorCisgIEEgY2h1bmsgdGhhdCdzIGluIHVzZSBsb29rcyBsaWtlOgorCisgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgIHwgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgUCA9IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfFB8CisgICAgICAgICB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMXwgKy0rCisgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICArLSAgICAgIHNpemUgLSBzaXplb2Yoc2l6ZV90KSBhdmFpbGFibGUgcGF5bG9hZCBieXRlcyAgICAgICAgICAtKworICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyBjaHVuay0+ICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfDF8CisgICAgICAgfCBTaXplIG9mIG5leHQgY2h1bmsgKG1heSBvciBtYXkgbm90IGJlIGluIHVzZSkgICAgICAgICAgICAgICB8ICstKworIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgICBBbmQgaWYgaXQncyBmcmVlLCBpdCBsb29rcyBsaWtlIHRoaXM6CisKKyAgIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICAgICAgfCBVc2VyIHBheWxvYWQgKG11c3QgYmUgaW4gdXNlLCBvciB3ZSB3b3VsZCBoYXZlIG1lcmdlZCEpICAgICAgIHwKKyAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKKyAgICAgICAgIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwfCArLSsKKyAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8IE5leHQgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgIHwgUHJldiBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICstICAgICAgc2l6ZSAtIHNpemVvZihzdHJ1Y3QgY2h1bmspIHVudXNlZCBieXRlcyAgICAgICAgICAgICAgIC0rCisgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MHwKKyAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkKXwgKy0rCisgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICstIFVzZXIgcGF5bG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfDB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLSsKKyAgTm90ZSB0aGF0IHNpbmNlIHdlIGFsd2F5cyBtZXJnZSBhZGphY2VudCBmcmVlIGNodW5rcywgdGhlIGNodW5rcworICBhZGphY2VudCB0byBhIGZyZWUgY2h1bmsgbXVzdCBiZSBpbiB1c2UuCisKKyAgR2l2ZW4gYSBwb2ludGVyIHRvIGEgY2h1bmsgKHdoaWNoIGNhbiBiZSBkZXJpdmVkIHRyaXZpYWxseSBmcm9tIHRoZQorICBwYXlsb2FkIHBvaW50ZXIpIHdlIGNhbiwgaW4gTygxKSB0aW1lLCBmaW5kIG91dCB3aGV0aGVyIHRoZSBhZGphY2VudAorICBjaHVua3MgYXJlIGZyZWUsIGFuZCBpZiBzbywgdW5saW5rIHRoZW0gZnJvbSB0aGUgbGlzdHMgdGhhdCB0aGV5CisgIGFyZSBvbiBhbmQgbWVyZ2UgdGhlbSB3aXRoIHRoZSBjdXJyZW50IGNodW5rLgorCisgIENodW5rcyBhbHdheXMgYmVnaW4gb24gZXZlbiB3b3JkIGJvdW5kYXJpZXMsIHNvIHRoZSBtZW0gcG9ydGlvbgorICAod2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIpIGlzIGFsc28gb24gYW4gZXZlbiB3b3JkIGJvdW5kYXJ5LCBhbmQKKyAgdGh1cyBhdCBsZWFzdCBkb3VibGUtd29yZCBhbGlnbmVkLgorCisgIFRoZSBQIChQSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIGxvdy1vcmRlciBiaXQgb2YgdGhlCisgIGNodW5rIHNpemUgKHdoaWNoIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIHR3byB3b3JkcyksIGlzIGFuIGluLXVzZQorICBiaXQgZm9yIHRoZSAqcHJldmlvdXMqIGNodW5rLiAgSWYgdGhhdCBiaXQgaXMgKmNsZWFyKiwgdGhlbiB0aGUKKyAgd29yZCBiZWZvcmUgdGhlIGN1cnJlbnQgY2h1bmsgc2l6ZSBjb250YWlucyB0aGUgcHJldmlvdXMgY2h1bmsKKyAgc2l6ZSwgYW5kIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIGZyb250IG9mIHRoZSBwcmV2aW91cyBjaHVuay4KKyAgVGhlIHZlcnkgZmlyc3QgY2h1bmsgYWxsb2NhdGVkIGFsd2F5cyBoYXMgdGhpcyBiaXQgc2V0LCBwcmV2ZW50aW5nCisgIGFjY2VzcyB0byBub24tZXhpc3RlbnQgKG9yIG5vbi1vd25lZCkgbWVtb3J5LiBJZiBwaW51c2UgaXMgc2V0IGZvcgorICBhbnkgZ2l2ZW4gY2h1bmssIHRoZW4geW91IENBTk5PVCBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlCisgIHByZXZpb3VzIGNodW5rLCBhbmQgbWlnaHQgZXZlbiBnZXQgYSBtZW1vcnkgYWRkcmVzc2luZyBmYXVsdCB3aGVuCisgIHRyeWluZyB0byBkbyBzby4KKworICBUaGUgQyAoQ0lOVVNFX0JJVCkgYml0LCBzdG9yZWQgaW4gdGhlIHVudXNlZCBzZWNvbmQtbG93ZXN0IGJpdCBvZgorICB0aGUgY2h1bmsgc2l6ZSByZWR1bmRhbnRseSByZWNvcmRzIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2h1bmsgaXMKKyAgaW51c2UuIFRoaXMgcmVkdW5kYW5jeSBlbmFibGVzIHVzYWdlIGNoZWNrcyB3aXRoaW4gZnJlZSBhbmQgcmVhbGxvYywKKyAgYW5kIHJlZHVjZXMgaW5kaXJlY3Rpb24gd2hlbiBmcmVlaW5nIGFuZCBjb25zb2xpZGF0aW5nIGNodW5rcy4KKworICBFYWNoIGZyZXNobHkgYWxsb2NhdGVkIGNodW5rIG11c3QgaGF2ZSBib3RoIGNpbnVzZSBhbmQgcGludXNlIHNldC4KKyAgVGhhdCBpcywgZWFjaCBhbGxvY2F0ZWQgY2h1bmsgYm9yZGVycyBlaXRoZXIgYSBwcmV2aW91c2x5IGFsbG9jYXRlZAorICBhbmQgc3RpbGwgaW4tdXNlIGNodW5rLCBvciB0aGUgYmFzZSBvZiBpdHMgbWVtb3J5IGFyZW5hLiBUaGlzIGlzCisgIGVuc3VyZWQgYnkgbWFraW5nIGFsbCBhbGxvY2F0aW9ucyBmcm9tIHRoZSB0aGUgYGxvd2VzdCcgcGFydCBvZiBhbnkKKyAgZm91bmQgY2h1bmsuICBGdXJ0aGVyLCBubyBmcmVlIGNodW5rIHBoeXNpY2FsbHkgYm9yZGVycyBhbm90aGVyIG9uZSwKKyAgc28gZWFjaCBmcmVlIGNodW5rIGlzIGtub3duIHRvIGJlIHByZWNlZGVkIGFuZCBmb2xsb3dlZCBieSBlaXRoZXIKKyAgaW51c2UgY2h1bmtzIG9yIHRoZSBlbmRzIG9mIG1lbW9yeS4KKworICBOb3RlIHRoYXQgdGhlIGBmb290JyBvZiB0aGUgY3VycmVudCBjaHVuayBpcyBhY3R1YWxseSByZXByZXNlbnRlZAorICBhcyB0aGUgcHJldl9mb290IG9mIHRoZSBORVhUIGNodW5rLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0bworICBkZWFsIHdpdGggYWxpZ25tZW50cyBldGMgYnV0IGNhbiBiZSB2ZXJ5IGNvbmZ1c2luZyB3aGVuIHRyeWluZworICB0byBleHRlbmQgb3IgYWRhcHQgdGhpcyBjb2RlLgorCisgIFRoZSBleGNlcHRpb25zIHRvIGFsbCB0aGlzIGFyZQorCisgICAgIDEuIFRoZSBzcGVjaWFsIGNodW5rIGB0b3AnIGlzIHRoZSB0b3AtbW9zdCBhdmFpbGFibGUgY2h1bmsgKGkuZS4sCisgICAgICAgIHRoZSBvbmUgYm9yZGVyaW5nIHRoZSBlbmQgb2YgYXZhaWxhYmxlIG1lbW9yeSkuIEl0IGlzIHRyZWF0ZWQKKyAgICAgICAgc3BlY2lhbGx5LiAgVG9wIGlzIG5ldmVyIGluY2x1ZGVkIGluIGFueSBiaW4sIGlzIHVzZWQgb25seSBpZgorICAgICAgICBubyBvdGhlciBjaHVuayBpcyBhdmFpbGFibGUsIGFuZCBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZQorICAgICAgICBzeXN0ZW0gaWYgaXQgaXMgdmVyeSBsYXJnZSAoc2VlIE1fVFJJTV9USFJFU0hPTEQpLiAgSW4gZWZmZWN0LAorICAgICAgICB0aGUgdG9wIGNodW5rIGlzIHRyZWF0ZWQgYXMgbGFyZ2VyIChhbmQgdGh1cyBsZXNzIHdlbGwKKyAgICAgICAgZml0dGluZykgdGhhbiBhbnkgb3RoZXIgYXZhaWxhYmxlIGNodW5rLiAgVGhlIHRvcCBjaHVuaworICAgICAgICBkb2Vzbid0IHVwZGF0ZSBpdHMgdHJhaWxpbmcgc2l6ZSBmaWVsZCBzaW5jZSB0aGVyZSBpcyBubyBuZXh0CisgICAgICAgIGNvbnRpZ3VvdXMgY2h1bmsgdGhhdCB3b3VsZCBoYXZlIHRvIGluZGV4IG9mZiBpdC4gSG93ZXZlciwKKyAgICAgICAgc3BhY2UgaXMgc3RpbGwgYWxsb2NhdGVkIGZvciBpdCAoVE9QX0ZPT1RfU0laRSkgdG8gZW5hYmxlCisgICAgICAgIHNlcGFyYXRpb24gb3IgbWVyZ2luZyB3aGVuIHNwYWNlIGlzIGV4dGVuZGVkLgorCisgICAgIDMuIENodW5rcyBhbGxvY2F0ZWQgdmlhIG1tYXAsIHdoaWNoIGhhdmUgdGhlIGxvd2VzdC1vcmRlciBiaXQKKyAgICAgICAgKElTX01NQVBQRURfQklUKSBzZXQgaW4gdGhlaXIgcHJldl9mb290IGZpZWxkcywgYW5kIGRvIG5vdCBzZXQKKyAgICAgICAgUElOVVNFX0JJVCBpbiB0aGVpciBoZWFkIGZpZWxkcy4gIEJlY2F1c2UgdGhleSBhcmUgYWxsb2NhdGVkCisgICAgICAgIG9uZS1ieS1vbmUsIGVhY2ggbXVzdCBjYXJyeSBpdHMgb3duIHByZXZfZm9vdCBmaWVsZCwgd2hpY2ggaXMKKyAgICAgICAgYWxzbyB1c2VkIHRvIGhvbGQgdGhlIG9mZnNldCB0aGlzIGNodW5rIGhhcyB3aXRoaW4gaXRzIG1tYXBwZWQKKyAgICAgICAgcmVnaW9uLCB3aGljaCBpcyBuZWVkZWQgdG8gcHJlc2VydmUgYWxpZ25tZW50LiBFYWNoIG1tYXBwZWQKKyAgICAgICAgY2h1bmsgaXMgdHJhaWxlZCBieSB0aGUgZmlyc3QgdHdvIGZpZWxkcyBvZiBhIGZha2UgbmV4dC1jaHVuaworICAgICAgICBmb3Igc2FrZSBvZiB1c2FnZSBjaGVja3MuCisKKyovCisKK3N0cnVjdCBtYWxsb2NfY2h1bmsgeworICBzaXplX3QgICAgICAgICAgICAgICBwcmV2X2Zvb3Q7ICAvKiBTaXplIG9mIHByZXZpb3VzIGNodW5rIChpZiBmcmVlKS4gICovCisgIHNpemVfdCAgICAgICAgICAgICAgIGhlYWQ7ICAgICAgIC8qIFNpemUgYW5kIGludXNlIGJpdHMuICovCisgIHN0cnVjdCBtYWxsb2NfY2h1bmsqIGZkOyAgICAgICAgIC8qIGRvdWJsZSBsaW5rcyAtLSB1c2VkIG9ubHkgaWYgZnJlZS4gKi8KKyAgc3RydWN0IG1hbGxvY19jaHVuayogYms7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsgIG1jaHVuazsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogbWNodW5rcHRyOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBzYmlucHRyOyAgLyogVGhlIHR5cGUgb2YgYmlucyBvZiBjaHVua3MgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGJpbmRleF90OyAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgYmlubWFwX3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGFnX3Q7ICAgICAgICAgICAvKiBUaGUgdHlwZSBvZiB2YXJpb3VzIGJpdCBmbGFnIHNldHMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBDaHVua3Mgc2l6ZXMgYW5kIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBNQ0hVTktfU0laRSAgICAgICAgIChzaXplb2YobWNodW5rKSkKKworI2lmIEZPT1RFUlMKKyNkZWZpbmUgQ0hVTktfT1ZFUkhFQUQgICAgICAoVFdPX1NJWkVfVF9TSVpFUykKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyNkZWZpbmUgQ0hVTktfT1ZFUkhFQUQgICAgICAoU0laRV9UX1NJWkUpCisjZW5kaWYgLyogRk9PVEVSUyAqLworCisvKiBNTWFwcGVkIGNodW5rcyBuZWVkIGEgc2Vjb25kIHdvcmQgb2Ygb3ZlcmhlYWQgLi4uICovCisjZGVmaW5lIE1NQVBfQ0hVTktfT1ZFUkhFQUQgKFRXT19TSVpFX1RfU0laRVMpCisvKiAuLi4gYW5kIGFkZGl0aW9uYWwgcGFkZGluZyBmb3IgZmFrZSBuZXh0LWNodW5rIGF0IGZvb3QgKi8KKyNkZWZpbmUgTU1BUF9GT09UX1BBRCAgICAgICAoRk9VUl9TSVpFX1RfU0laRVMpCisKKy8qIFRoZSBzbWFsbGVzdCBzaXplIHdlIGNhbiBtYWxsb2MgaXMgYW4gYWxpZ25lZCBtaW5pbWFsIGNodW5rICovCisjZGVmaW5lIE1JTl9DSFVOS19TSVpFXAorICAoKE1DSFVOS19TSVpFICsgQ0hVTktfQUxJR05fTUFTSykgJiB+Q0hVTktfQUxJR05fTUFTSykKKworLyogY29udmVyc2lvbiBmcm9tIG1hbGxvYyBoZWFkZXJzIHRvIHVzZXIgcG9pbnRlcnMsIGFuZCBiYWNrICovCisjZGVmaW5lIGNodW5rMm1lbShwKSAgICAgICAgKCh2b2lkKikoKGNoYXIqKShwKSAgICAgICArIFRXT19TSVpFX1RfU0laRVMpKQorI2RlZmluZSBtZW0yY2h1bmsobWVtKSAgICAgICgobWNodW5rcHRyKSgoY2hhciopKG1lbSkgLSBUV09fU0laRV9UX1NJWkVTKSkKKy8qIGNodW5rIGFzc29jaWF0ZWQgd2l0aCBhbGlnbmVkIGFkZHJlc3MgQSAqLworI2RlZmluZSBhbGlnbl9hc19jaHVuayhBKSAgIChtY2h1bmtwdHIpKChBKSArIGFsaWduX29mZnNldChjaHVuazJtZW0oQSkpKQorCisvKiBCb3VuZHMgb24gcmVxdWVzdCAobm90IGNodW5rKSBzaXplcy4gKi8KKyNkZWZpbmUgTUFYX1JFUVVFU1QgICAgICAgICAoKC1NSU5fQ0hVTktfU0laRSkgPDwgMikKKyNkZWZpbmUgTUlOX1JFUVVFU1QgICAgICAgICAoTUlOX0NIVU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRCAtIFNJWkVfVF9PTkUpCisKKy8qIHBhZCByZXF1ZXN0IGJ5dGVzIGludG8gYSB1c2FibGUgc2l6ZSAqLworI2RlZmluZSBwYWRfcmVxdWVzdChyZXEpIFwKKyAgICgoKHJlcSkgKyBDSFVOS19PVkVSSEVBRCArIENIVU5LX0FMSUdOX01BU0spICYgfkNIVU5LX0FMSUdOX01BU0spCisKKy8qIHBhZCByZXF1ZXN0LCBjaGVja2luZyBmb3IgbWluaW11bSAoYnV0IG5vdCBtYXhpbXVtKSAqLworI2RlZmluZSByZXF1ZXN0MnNpemUocmVxKSBcCisgICgoKHJlcSkgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QocmVxKSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBoZWFkIGFuZCBmb290IGZpZWxkcyAtLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBUaGUgaGVhZCBmaWVsZCBvZiBhIGNodW5rIGlzIG9yJ2VkIHdpdGggUElOVVNFX0JJVCB3aGVuIHByZXZpb3VzCisgIGFkamFjZW50IGNodW5rIGluIHVzZSwgYW5kIG9yJ2VkIHdpdGggQ0lOVVNFX0JJVCBpZiB0aGlzIGNodW5rIGlzIGluCisgIHVzZS4gSWYgdGhlIGNodW5rIHdhcyBvYnRhaW5lZCB3aXRoIG1tYXAsIHRoZSBwcmV2X2Zvb3QgZmllbGQgaGFzCisgIElTX01NQVBQRURfQklUIHNldCwgb3RoZXJ3aXNlIGhvbGRpbmcgdGhlIG9mZnNldCBvZiB0aGUgYmFzZSBvZiB0aGUKKyAgbW1hcHBlZCByZWdpb24gdG8gdGhlIGJhc2Ugb2YgdGhlIGNodW5rLgorKi8KKworI2RlZmluZSBQSU5VU0VfQklUICAgICAgICAgIChTSVpFX1RfT05FKQorI2RlZmluZSBDSU5VU0VfQklUICAgICAgICAgIChTSVpFX1RfVFdPKQorI2RlZmluZSBJTlVTRV9CSVRTICAgICAgICAgIChQSU5VU0VfQklUfENJTlVTRV9CSVQpCisKKy8qIEhlYWQgdmFsdWUgZm9yIGZlbmNlcG9zdHMgKi8KKyNkZWZpbmUgRkVOQ0VQT1NUX0hFQUQgICAgICAoSU5VU0VfQklUU3xTSVpFX1RfU0laRSkKKworLyogZXh0cmFjdGlvbiBvZiBmaWVsZHMgZnJvbSBoZWFkIHdvcmRzICovCisjZGVmaW5lIGNpbnVzZShwKSAgICAgICAgICAgKChwKS0+aGVhZCAmIENJTlVTRV9CSVQpCisjZGVmaW5lIHBpbnVzZShwKSAgICAgICAgICAgKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpCisjZGVmaW5lIGNodW5rc2l6ZShwKSAgICAgICAgKChwKS0+aGVhZCAmIH4oSU5VU0VfQklUUykpCisKKyNkZWZpbmUgY2xlYXJfcGludXNlKHApICAgICAoKHApLT5oZWFkICY9IH5QSU5VU0VfQklUKQorI2RlZmluZSBjbGVhcl9jaW51c2UocCkgICAgICgocCktPmhlYWQgJj0gfkNJTlVTRV9CSVQpCisKKy8qIFRyZWF0IHNwYWNlIGF0IHB0ciArLy0gb2Zmc2V0IGFzIGEgY2h1bmsgKi8KKyNkZWZpbmUgY2h1bmtfcGx1c19vZmZzZXQocCwgcykgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKQorI2RlZmluZSBjaHVua19taW51c19vZmZzZXQocCwgcykgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSAtIChzKSkpCisKKy8qIFB0ciB0byBuZXh0IG9yIHByZXZpb3VzIHBoeXNpY2FsIG1hbGxvY19jaHVuay4gKi8KKyNkZWZpbmUgbmV4dF9jaHVuayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSArICgocCktPmhlYWQgJiB+SU5VU0VfQklUUykpKQorI2RlZmluZSBwcmV2X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpIC0gKChwKS0+cHJldl9mb290KSApKQorCisvKiBleHRyYWN0IG5leHQgY2h1bmsncyBwaW51c2UgYml0ICovCisjZGVmaW5lIG5leHRfcGludXNlKHApICAoKG5leHRfY2h1bmsocCktPmhlYWQpICYgUElOVVNFX0JJVCkKKworLyogR2V0L3NldCBzaXplIGF0IGZvb3RlciAqLworI2RlZmluZSBnZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCkKKyNkZWZpbmUgc2V0X2Zvb3QocCwgcykgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAocykpCisKKy8qIFNldCBzaXplLCBwaW51c2UgYml0LCBhbmQgZm9vdCAqLworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUKSwgc2V0X2Zvb3QocCwgcykpCisKKy8qIFNldCBzaXplLCBwaW51c2UgYml0LCBmb290LCBhbmQgY2xlYXIgbmV4dCBwaW51c2UgKi8KKyNkZWZpbmUgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcywgbilcCisgIChjbGVhcl9waW51c2UobiksIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKSkKKworI2RlZmluZSBpc19tbWFwcGVkKHApXAorICAoISgocCktPmhlYWQgJiBQSU5VU0VfQklUKSAmJiAoKHApLT5wcmV2X2Zvb3QgJiBJU19NTUFQUEVEX0JJVCkpCisKKy8qIEdldCB0aGUgaW50ZXJuYWwgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGNodW5rIHAgKi8KKyNkZWZpbmUgb3ZlcmhlYWRfZm9yKHApXAorIChpc19tbWFwcGVkKHApPyBNTUFQX0NIVU5LX09WRVJIRUFEIDogQ0hVTktfT1ZFUkhFQUQpCisKKy8qIFJldHVybiB0cnVlIGlmIG1hbGxvY2VkIHNwYWNlIGlzIG5vdCBuZWNlc3NhcmlseSBjbGVhcmVkICovCisjaWYgTU1BUF9DTEVBUlMKKyNkZWZpbmUgY2FsbG9jX211c3RfY2xlYXIocCkgKCFpc19tbWFwcGVkKHApKQorI2Vsc2UgLyogTU1BUF9DTEVBUlMgKi8KKyNkZWZpbmUgY2FsbG9jX211c3RfY2xlYXIocCkgKDEpCisjZW5kaWYgLyogTU1BUF9DTEVBUlMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPdmVybGFpZCBkYXRhIHN0cnVjdHVyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgV2hlbiBjaHVua3MgYXJlIG5vdCBpbiB1c2UsIHRoZXkgYXJlIHRyZWF0ZWQgYXMgbm9kZXMgb2YgZWl0aGVyCisgIGxpc3RzIG9yIHRyZWVzLgorCisgICJTbWFsbCIgIGNodW5rcyBhcmUgc3RvcmVkIGluIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdHMsIGFuZCBsb29rCisgIGxpa2UgdGhpczoKKworICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBoZWFkOicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICB8UHwKKyAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIGluIGxpc3QgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgQmFjayBwb2ludGVyIHRvIHByZXZpb3VzIGNodW5rIGluIGxpc3QgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBVbnVzZWQgc3BhY2UgKG1heSBiZSAwIGJ5dGVzIGxvbmcpICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgIExhcmdlciBjaHVua3MgYXJlIGtlcHQgaW4gYSBmb3JtIG9mIGJpdHdpc2UgZGlnaXRhbCB0cmVlcyAoYWthCisgIHRyaWVzKSBrZXllZCBvbiBjaHVua3NpemVzLiAgQmVjYXVzZSBtYWxsb2NfdHJlZV9jaHVua3MgYXJlIG9ubHkgZm9yCisgIGZyZWUgY2h1bmtzIGdyZWF0ZXIgdGhhbiAyNTYgYnl0ZXMsIHRoZWlyIHNpemUgZG9lc24ndCBpbXBvc2UgYW55CisgIGNvbnN0cmFpbnRzIG9uIHVzZXIgY2h1bmsgc2l6ZXMuICBFYWNoIG5vZGUgbG9va3MgbGlrZToKKworICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBoZWFkOicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICB8UHwKKyAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIG9mIHNhbWUgc2l6ZSAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgQmFjayBwb2ludGVyIHRvIHByZXZpb3VzIGNodW5rIG9mIHNhbWUgc2l6ZSAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIGxlZnQgY2hpbGQgKGNoaWxkWzBdKSAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gcmlnaHQgY2hpbGQgKGNoaWxkWzFdKSAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBwYXJlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBiaW4gaW5kZXggb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK25leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGZvb3Q6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICBFYWNoIHRyZWUgaG9sZGluZyB0cmVlbm9kZXMgaXMgYSB0cmVlIG9mIHVuaXF1ZSBjaHVuayBzaXplcy4gIENodW5rcworICBvZiB0aGUgc2FtZSBzaXplIGFyZSBhcnJhbmdlZCBpbiBhIGNpcmN1bGFybHktbGlua2VkIGxpc3QsIHdpdGggb25seQorICB0aGUgb2xkZXN0IGNodW5rICh0aGUgbmV4dCB0byBiZSB1c2VkLCBpbiBvdXIgRklGTyBvcmRlcmluZykKKyAgYWN0dWFsbHkgaW4gdGhlIHRyZWUuICAoVHJlZSBtZW1iZXJzIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IGEgbm9uLW51bGwKKyAgcGFyZW50IHBvaW50ZXIuKSAgSWYgYSBjaHVuayB3aXRoIHRoZSBzYW1lIHNpemUgYW4gYW4gZXhpc3Rpbmcgbm9kZQorICBpcyBpbnNlcnRlZCwgaXQgaXMgbGlua2VkIG9mZiB0aGUgZXhpc3Rpbmcgbm9kZSB1c2luZyBwb2ludGVycyB0aGF0CisgIHdvcmsgaW4gdGhlIHNhbWUgd2F5IGFzIGZkL2JrIHBvaW50ZXJzIG9mIHNtYWxsIGNodW5rcy4KKworICBFYWNoIHRyZWUgY29udGFpbnMgYSBwb3dlciBvZiAyIHNpemVkIHJhbmdlIG9mIGNodW5rIHNpemVzICh0aGUKKyAgc21hbGxlc3QgaXMgMHgxMDAgPD0geCA8IDB4MTgwKSwgd2hpY2ggaXMgaXMgZGl2aWRlZCBpbiBoYWxmIGF0IGVhY2gKKyAgdHJlZSBsZXZlbCwgd2l0aCB0aGUgY2h1bmtzIGluIHRoZSBzbWFsbGVyIGhhbGYgb2YgdGhlIHJhbmdlICgweDEwMAorICA8PSB4IDwgMHgxNDAgZm9yIHRoZSB0b3Agbm9zZSkgaW4gdGhlIGxlZnQgc3VidHJlZSBhbmQgdGhlIGxhcmdlcgorICBoYWxmICgweDE0MCA8PSB4IDwgMHgxODApIGluIHRoZSByaWdodCBzdWJ0cmVlLiAgVGhpcyBpcywgb2YgY291cnNlLAorICBkb25lIGJ5IGluc3BlY3RpbmcgaW5kaXZpZHVhbCBiaXRzLgorCisgIFVzaW5nIHRoZXNlIHJ1bGVzLCBlYWNoIG5vZGUncyBsZWZ0IHN1YnRyZWUgY29udGFpbnMgYWxsIHNtYWxsZXIKKyAgc2l6ZXMgdGhhbiBpdHMgcmlnaHQgc3VidHJlZS4gIEhvd2V2ZXIsIHRoZSBub2RlIGF0IHRoZSByb290IG9mIGVhY2gKKyAgc3VidHJlZSBoYXMgbm8gcGFydGljdWxhciBvcmRlcmluZyByZWxhdGlvbnNoaXAgdG8gZWl0aGVyLiAgKFRoZQorICBkaXZpZGluZyBsaW5lIGJldHdlZW4gdGhlIHN1YnRyZWUgc2l6ZXMgaXMgYmFzZWQgb24gdHJpZSByZWxhdGlvbi4pCisgIElmIHdlIHJlbW92ZSB0aGUgbGFzdCBjaHVuayBvZiBhIGdpdmVuIHNpemUgZnJvbSB0aGUgaW50ZXJpb3Igb2YgdGhlCisgIHRyZWUsIHdlIG5lZWQgdG8gcmVwbGFjZSBpdCB3aXRoIGEgbGVhZiBub2RlLiAgVGhlIHRyZWUgb3JkZXJpbmcKKyAgcnVsZXMgcGVybWl0IGEgbm9kZSB0byBiZSByZXBsYWNlZCBieSBhbnkgbGVhZiBiZWxvdyBpdC4KKworICBUaGUgc21hbGxlc3QgY2h1bmsgaW4gYSB0cmVlIChhIGNvbW1vbiBvcGVyYXRpb24gaW4gYSBiZXN0LWZpdAorICBhbGxvY2F0b3IpIGNhbiBiZSBmb3VuZCBieSB3YWxraW5nIGEgcGF0aCB0byB0aGUgbGVmdG1vc3QgbGVhZiBpbgorICB0aGUgdHJlZS4gIFVubGlrZSBhIHVzdWFsIGJpbmFyeSB0cmVlLCB3aGVyZSB3ZSBmb2xsb3cgbGVmdCBjaGlsZAorICBwb2ludGVycyB1bnRpbCB3ZSByZWFjaCBhIG51bGwsIGhlcmUgd2UgZm9sbG93IHRoZSByaWdodCBjaGlsZAorICBwb2ludGVyIGFueSB0aW1lIHRoZSBsZWZ0IG9uZSBpcyBudWxsLCB1bnRpbCB3ZSByZWFjaCBhIGxlYWYgd2l0aAorICBib3RoIGNoaWxkIHBvaW50ZXJzIG51bGwuIFRoZSBzbWFsbGVzdCBjaHVuayBpbiB0aGUgdHJlZSB3aWxsIGJlCisgIHNvbWV3aGVyZSBhbG9uZyB0aGF0IHBhdGguCisKKyAgVGhlIHdvcnN0IGNhc2UgbnVtYmVyIG9mIHN0ZXBzIHRvIGFkZCwgZmluZCwgb3IgcmVtb3ZlIGEgbm9kZSBpcworICBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgYml0cyBkaWZmZXJlbnRpYXRpbmcgY2h1bmtzIHdpdGhpbgorICBiaW5zLiBVbmRlciBjdXJyZW50IGJpbiBjYWxjdWxhdGlvbnMsIHRoaXMgcmFuZ2VzIGZyb20gNiB1cCB0byAyMQorICAoZm9yIDMyIGJpdCBzaXplcykgb3IgdXAgdG8gNTMgKGZvciA2NCBiaXQgc2l6ZXMpLiBUaGUgdHlwaWNhbCBjYXNlCisgIGlzIG9mIGNvdXJzZSBtdWNoIGJldHRlci4KKyovCisKK3N0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayB7CisgIC8qIFRoZSBmaXJzdCBmb3VyIGZpZWxkcyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBtYWxsb2NfY2h1bmsgKi8KKyAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBwcmV2X2Zvb3Q7CisgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgaGVhZDsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBmZDsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBiazsKKworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGNoaWxkWzJdOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHBhcmVudDsKKyAgYmluZGV4X3QgICAgICAgICAgICAgICAgICBpbmRleDsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rICB0Y2h1bms7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogdGNodW5rcHRyOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHRiaW5wdHI7IC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgdHJlZXMgKi8KKworLyogQSBsaXR0bGUgaGVscGVyIG1hY3JvIGZvciB0cmVlcyAqLworI2RlZmluZSBsZWZ0bW9zdF9jaGlsZCh0KSAoKHQpLT5jaGlsZFswXSAhPSAwPyAodCktPmNoaWxkWzBdIDogKHQpLT5jaGlsZFsxXSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2VnbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRWFjaCBtYWxsb2Mgc3BhY2UgbWF5IGluY2x1ZGUgbm9uLWNvbnRpZ3VvdXMgc2VnbWVudHMsIGhlbGQgaW4gYQorICBsaXN0IGhlYWRlZCBieSBhbiBlbWJlZGRlZCBtYWxsb2Nfc2VnbWVudCByZWNvcmQgcmVwcmVzZW50aW5nIHRoZQorICB0b3AtbW9zdCBzcGFjZS4gU2VnbWVudHMgYWxzbyBpbmNsdWRlIGZsYWdzIGhvbGRpbmcgcHJvcGVydGllcyBvZgorICB0aGUgc3BhY2UuIExhcmdlIGNodW5rcyB0aGF0IGFyZSBkaXJlY3RseSBhbGxvY2F0ZWQgYnkgbW1hcCBhcmUgbm90CisgIGluY2x1ZGVkIGluIHRoaXMgbGlzdC4gVGhleSBhcmUgaW5zdGVhZCBpbmRlcGVuZGVudGx5IGNyZWF0ZWQgYW5kCisgIGRlc3Ryb3llZCB3aXRob3V0IG90aGVyd2lzZSBrZWVwaW5nIHRyYWNrIG9mIHRoZW0uCisKKyAgU2VnbWVudCBtYW5hZ2VtZW50IG1haW5seSBjb21lcyBpbnRvIHBsYXkgZm9yIHNwYWNlcyBhbGxvY2F0ZWQgYnkKKyAgTU1BUC4gIEFueSBjYWxsIHRvIE1NQVAgbWlnaHQgb3IgbWlnaHQgbm90IHJldHVybiBtZW1vcnkgdGhhdCBpcworICBhZGphY2VudCB0byBhbiBleGlzdGluZyBzZWdtZW50LiAgTU9SRUNPUkUgbm9ybWFsbHkgY29udGlndW91c2x5CisgIGV4dGVuZHMgdGhlIGN1cnJlbnQgc3BhY2UsIHNvIHRoaXMgc3BhY2UgaXMgYWxtb3N0IGFsd2F5cyBhZGphY2VudCwKKyAgd2hpY2ggaXMgc2ltcGxlciBhbmQgZmFzdGVyIHRvIGRlYWwgd2l0aC4gKFRoaXMgaXMgd2h5IE1PUkVDT1JFIGlzCisgIHVzZWQgcHJlZmVyZW50aWFsbHkgdG8gTU1BUCB3aGVuIGJvdGggYXJlIGF2YWlsYWJsZSAtLSBzZWUKKyAgc3lzX2FsbG9jLikgIFdoZW4gYWxsb2NhdGluZyB1c2luZyBNTUFQLCB3ZSBkb24ndCB1c2UgYW55IG9mIHRoZQorICBoaW50aW5nIG1lY2hhbmlzbXMgKGluY29uc2lzdGVudGx5KSBzdXBwb3J0ZWQgaW4gdmFyaW91cworICBpbXBsZW1lbnRhdGlvbnMgb2YgdW5peCBtbWFwLCBvciBkaXN0aW5ndWlzaCByZXNlcnZpbmcgZnJvbQorICBjb21taXR0aW5nIG1lbW9yeS4gSW5zdGVhZCwgd2UganVzdCBhc2sgZm9yIHNwYWNlLCBhbmQgZXhwbG9pdAorICBjb250aWd1aXR5IHdoZW4gd2UgZ2V0IGl0LiAgSXQgaXMgcHJvYmFibHkgcG9zc2libGUgdG8gZG8KKyAgYmV0dGVyIHRoYW4gdGhpcyBvbiBzb21lIHN5c3RlbXMsIGJ1dCBubyBnZW5lcmFsIHNjaGVtZSBzZWVtcworICB0byBiZSBzaWduaWZpY2FudGx5IGJldHRlci4KKworICBNYW5hZ2VtZW50IGVudGFpbHMgYSBzaW1wbGVyIHZhcmlhbnQgb2YgdGhlIGNvbnNvbGlkYXRpb24gc2NoZW1lCisgIHVzZWQgZm9yIGNodW5rcyB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbiAtLSBuZXcgYWRqYWNlbnQgbWVtb3J5IGlzCisgIG5vcm1hbGx5IHByZXBlbmRlZCBvciBhcHBlbmRlZCB0byBhbiBleGlzdGluZyBzZWdtZW50LiBIb3dldmVyLAorICB0aGVyZSBhcmUgbGltaXRhdGlvbnMgY29tcGFyZWQgdG8gY2h1bmsgY29uc29saWRhdGlvbiB0aGF0IG1vc3RseQorICByZWZsZWN0IHRoZSBmYWN0IHRoYXQgc2VnbWVudCBwcm9jZXNzaW5nIGlzIHJlbGF0aXZlbHkgaW5mcmVxdWVudAorICAob2NjdXJyaW5nIG9ubHkgd2hlbiBnZXR0aW5nIG1lbW9yeSBmcm9tIHN5c3RlbSkgYW5kIHRoYXQgd2UKKyAgZG9uJ3QgZXhwZWN0IHRvIGhhdmUgaHVnZSBudW1iZXJzIG9mIHNlZ21lbnRzOgorCisgICogU2VnbWVudHMgYXJlIG5vdCBpbmRleGVkLCBzbyB0cmF2ZXJzYWwgcmVxdWlyZXMgbGluZWFyIHNjYW5zLiAgKEl0CisgICAgd291bGQgYmUgcG9zc2libGUgdG8gaW5kZXggdGhlc2UsIGJ1dCBpcyBub3Qgd29ydGggdGhlIGV4dHJhCisgICAgb3ZlcmhlYWQgYW5kIGNvbXBsZXhpdHkgZm9yIG1vc3QgcHJvZ3JhbXMgb24gbW9zdCBwbGF0Zm9ybXMuKQorICAqIE5ldyBzZWdtZW50cyBhcmUgb25seSBhcHBlbmRlZCB0byBvbGQgb25lcyB3aGVuIGhvbGRpbmcgdG9wLW1vc3QKKyAgICBtZW1vcnk7IGlmIHRoZXkgY2Fubm90IGJlIHByZXBlbmRlZCB0byBvdGhlcnMsIHRoZXkgYXJlIGhlbGQgaW4KKyAgICBkaWZmZXJlbnQgc2VnbWVudHMuCisKKyAgRXhjZXB0IGZvciB0aGUgdG9wLW1vc3Qgc2VnbWVudCBvZiBhbiBtc3RhdGUsIGVhY2ggc2VnbWVudCByZWNvcmQKKyAgaXMga2VwdCBhdCB0aGUgdGFpbCBvZiBpdHMgc2VnbWVudC4gU2VnbWVudHMgYXJlIGFkZGVkIGJ5IHB1c2hpbmcKKyAgc2VnbWVudCByZWNvcmRzIG9udG8gdGhlIGxpc3QgaGVhZGVkIGJ5ICZtc3RhdGUuc2VnIGZvciB0aGUKKyAgY29udGFpbmluZyBtc3RhdGUuCisKKyAgU2VnbWVudCBmbGFncyBjb250cm9sIGFsbG9jYXRpb24vbWVyZ2UvZGVhbGxvY2F0aW9uIHBvbGljaWVzOgorICAqIElmIEVYVEVSTl9CSVQgc2V0LCB0aGVuIHdlIGRpZCBub3QgYWxsb2NhdGUgdGhpcyBzZWdtZW50LAorICAgIGFuZCBzbyBzaG91bGQgbm90IHRyeSB0byBkZWFsbG9jYXRlIG9yIG1lcmdlIHdpdGggb3RoZXJzLgorICAgIChUaGlzIGN1cnJlbnRseSBob2xkcyBvbmx5IGZvciB0aGUgaW5pdGlhbCBzZWdtZW50IHBhc3NlZAorICAgIGludG8gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UuKQorICAqIElmIElTX01NQVBQRURfQklUIHNldCwgdGhlIHNlZ21lbnQgbWF5IGJlIG1lcmdlZCB3aXRoCisgICAgb3RoZXIgc3Vycm91bmRpbmcgbW1hcHBlZCBzZWdtZW50cyBhbmQgdHJpbW1lZC9kZS1hbGxvY2F0ZWQKKyAgICB1c2luZyBtdW5tYXAuCisgICogSWYgbmVpdGhlciBiaXQgaXMgc2V0LCB0aGVuIHRoZSBzZWdtZW50IHdhcyBvYnRhaW5lZCB1c2luZworICAgIE1PUkVDT1JFIHNvIGNhbiBiZSBtZXJnZWQgd2l0aCBzdXJyb3VuZGluZyBNT1JFQ09SRSdkIHNlZ21lbnRzCisgICAgYW5kIGRlYWxsb2NhdGVkL3RyaW1tZWQgdXNpbmcgTU9SRUNPUkUgd2l0aCBuZWdhdGl2ZSBhcmd1bWVudHMuCisqLworCitzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgeworICBjaGFyKiAgICAgICAgYmFzZTsgICAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzICovCisgIHNpemVfdCAgICAgICBzaXplOyAgICAgICAgICAgICAvKiBhbGxvY2F0ZWQgc2l6ZSAqLworICBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQqIG5leHQ7ICAgLyogcHRyIHRvIG5leHQgc2VnbWVudCAqLworI2lmIEZGSV9NTUFQX0VYRUNfV1JJVAorICAvKiBUaGUgbW1hcCBtYWdpYyBpcyBzdXBwb3NlZCB0byBzdG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUgZXhlY3V0YWJsZQorICAgICBzZWdtZW50IGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgcmVxdWVzdGVkIGJsb2NrLiAgKi8KKworIyBkZWZpbmUgbW1hcF9leGVjX29mZnNldChiLHMpICgqKHB0cmRpZmZfdCopKChiKSsocyktc2l6ZW9mKHB0cmRpZmZfdCkpKQorCisgIC8qIFdlIGNhbiBvbmx5IG1lcmdlIHNlZ21lbnRzIGlmIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXhlY3V0YWJsZQorICAgICBzZWdtZW50cyBhcmUgYXQgaWRlbnRpY2FsIG9mZnNldHMuICAqLworIyBkZWZpbmUgY2hlY2tfc2VnbWVudF9tZXJnZShTLGIscykgXAorICAobW1hcF9leGVjX29mZnNldCgoYiksKHMpKSA9PSAoUyktPmV4ZWNfb2Zmc2V0KQorCisjIGRlZmluZSBhZGRfc2VnbWVudF9leGVjX29mZnNldChwLFMpICgoY2hhciopKHApICsgKFMpLT5leGVjX29mZnNldCkKKyMgZGVmaW5lIHN1Yl9zZWdtZW50X2V4ZWNfb2Zmc2V0KHAsUykgKChjaGFyKikocCkgLSAoUyktPmV4ZWNfb2Zmc2V0KQorCisgIC8qIFRoZSByZW1vdmFsIG9mIHNmbGFncyBvbmx5IHdvcmtzIHdpdGggSEFWRV9NT1JFQ09SRSA9PSAwLiAgKi8KKworIyBkZWZpbmUgZ2V0X3NlZ21lbnRfZmxhZ3MoUykgICAoSVNfTU1BUFBFRF9CSVQpCisjIGRlZmluZSBzZXRfc2VnbWVudF9mbGFncyhTLHYpIFwKKyAgKCgodikgIT0gSVNfTU1BUFBFRF9CSVQpID8gKEFCT1JULCAodikpIDoJCQkJXAorICAgKCgoUyktPmV4ZWNfb2Zmc2V0ID0JCQkJCQkJXAorICAgICBtbWFwX2V4ZWNfb2Zmc2V0KChTKS0+YmFzZSwgKFMpLT5zaXplKSksCQkJCVwKKyAgICAobW1hcF9leGVjX29mZnNldCgoUyktPmJhc2UgKyAoUyktPmV4ZWNfb2Zmc2V0LCAoUyktPnNpemUpICE9CVwKKyAgICAgKFMpLT5leGVjX29mZnNldCkgPyAoQUJPUlQsICh2KSkgOgkJCQkJXAorICAgKG1tYXBfZXhlY19vZmZzZXQoKFMpLT5iYXNlLCAoUyktPnNpemUpID0gMCksICh2KSkpCisKKyAgLyogV2UgdXNlIGFuIG9mZnNldCBoZXJlLCBpbnN0ZWFkIG9mIGEgcG9pbnRlciwgYmVjYXVzZSB0aGVuLCB3aGVuCisgICAgIGJhc2UgY2hhbmdlcywgd2UgZG9uJ3QgaGF2ZSB0byBtb2RpZnkgdGhpcy4gIE9uIGFyY2hpdGVjdHVyZXMKKyAgICAgd2l0aCBzZWdtZW50ZWQgYWRkcmVzc2VzLCB0aGlzIG1pZ2h0IG5vdCB3b3JrLiAgKi8KKyAgcHRyZGlmZl90ICAgIGV4ZWNfb2Zmc2V0OworI2Vsc2UKKworIyBkZWZpbmUgZ2V0X3NlZ21lbnRfZmxhZ3MoUykgICAoKFMpLT5zZmxhZ3MpCisjIGRlZmluZSBzZXRfc2VnbWVudF9mbGFncyhTLHYpICgoUyktPnNmbGFncyA9ICh2KSkKKyMgZGVmaW5lIGNoZWNrX3NlZ21lbnRfbWVyZ2UoUyxiLHMpICgxKQorCisgIGZsYWdfdCAgICAgICBzZmxhZ3M7ICAgICAgICAgICAvKiBtbWFwIGFuZCBleHRlcm4gZmxhZyAqLworI2VuZGlmCit9OworCisjZGVmaW5lIGlzX21tYXBwZWRfc2VnbWVudChTKSAgKGdldF9zZWdtZW50X2ZsYWdzKFMpICYgSVNfTU1BUFBFRF9CSVQpCisjZGVmaW5lIGlzX2V4dGVybl9zZWdtZW50KFMpICAgKGdldF9zZWdtZW50X2ZsYWdzKFMpICYgRVhURVJOX0JJVCkKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgIG1zZWdtZW50OwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQqIG1zZWdtZW50cHRyOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvY19zdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICAgQSBtYWxsb2Nfc3RhdGUgaG9sZHMgYWxsIG9mIHRoZSBib29ra2VlcGluZyBmb3IgYSBzcGFjZS4KKyAgIFRoZSBtYWluIGZpZWxkcyBhcmU6CisKKyAgVG9wCisgICAgVGhlIHRvcG1vc3QgY2h1bmsgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudC4gSXRzIHNpemUgaXMKKyAgICBjYWNoZWQgaW4gdG9wc2l6ZS4gIFRoZSBhY3R1YWwgc2l6ZSBvZiB0b3Btb3N0IHNwYWNlIGlzCisgICAgdG9wc2l6ZStUT1BfRk9PVF9TSVpFLCB3aGljaCBpbmNsdWRlcyBzcGFjZSByZXNlcnZlZCBmb3IgYWRkaW5nCisgICAgZmVuY2Vwb3N0cyBhbmQgc2VnbWVudCByZWNvcmRzIGlmIG5lY2Vzc2FyeSB3aGVuIGdldHRpbmcgbW9yZQorICAgIHNwYWNlIGZyb20gdGhlIHN5c3RlbS4gIFRoZSBzaXplIGF0IHdoaWNoIHRvIGF1dG90cmltIHRvcCBpcworICAgIGNhY2hlZCBmcm9tIG1wYXJhbXMgaW4gdHJpbV9jaGVjaywgZXhjZXB0IHRoYXQgaXQgaXMgZGlzYWJsZWQgaWYKKyAgICBhbiBhdXRvdHJpbSBmYWlscy4KKworICBEZXNpZ25hdGVkIHZpY3RpbSAoZHYpCisgICAgVGhpcyBpcyB0aGUgcHJlZmVycmVkIGNodW5rIGZvciBzZXJ2aWNpbmcgc21hbGwgcmVxdWVzdHMgdGhhdAorICAgIGRvbid0IGhhdmUgZXhhY3QgZml0cy4gIEl0IGlzIG5vcm1hbGx5IHRoZSBjaHVuayBzcGxpdCBvZmYgbW9zdAorICAgIHJlY2VudGx5IHRvIHNlcnZpY2UgYW5vdGhlciBzbWFsbCByZXF1ZXN0LiAgSXRzIHNpemUgaXMgY2FjaGVkIGluCisgICAgZHZzaXplLiBUaGUgbGluayBmaWVsZHMgb2YgdGhpcyBjaHVuayBhcmUgbm90IG1haW50YWluZWQgc2luY2UgaXQKKyAgICBpcyBub3Qga2VwdCBpbiBhIGJpbi4KKworICBTbWFsbEJpbnMKKyAgICBBbiBhcnJheSBvZiBiaW4gaGVhZGVycyBmb3IgZnJlZSBjaHVua3MuICBUaGVzZSBiaW5zIGhvbGQgY2h1bmtzCisgICAgd2l0aCBzaXplcyBsZXNzIHRoYW4gTUlOX0xBUkdFX1NJWkUgYnl0ZXMuIEVhY2ggYmluIGNvbnRhaW5zCisgICAgY2h1bmtzIG9mIGFsbCB0aGUgc2FtZSBzaXplLCBzcGFjZWQgOCBieXRlcyBhcGFydC4gIFRvIHNpbXBsaWZ5CisgICAgdXNlIGluIGRvdWJsZS1saW5rZWQgbGlzdHMsIGVhY2ggYmluIGhlYWRlciBhY3RzIGFzIGEgbWFsbG9jX2NodW5rCisgICAgcG9pbnRpbmcgdG8gdGhlIHJlYWwgZmlyc3Qgbm9kZSwgaWYgaXQgZXhpc3RzIChlbHNlIHBvaW50aW5nIHRvCisgICAgaXRzZWxmKS4gIFRoaXMgYXZvaWRzIHNwZWNpYWwtY2FzaW5nIGZvciBoZWFkZXJzLiAgQnV0IHRvIGF2b2lkCisgICAgd2FzdGUsIHdlIGFsbG9jYXRlIG9ubHkgdGhlIGZkL2JrIHBvaW50ZXJzIG9mIGJpbnMsIGFuZCB0aGVuIHVzZQorICAgIHJlcG9zaXRpb25pbmcgdHJpY2tzIHRvIHRyZWF0IHRoZXNlIGFzIHRoZSBmaWVsZHMgb2YgYSBjaHVuay4KKworICBUcmVlQmlucworICAgIFRyZWViaW5zIGFyZSBwb2ludGVycyB0byB0aGUgcm9vdHMgb2YgdHJlZXMgaG9sZGluZyBhIHJhbmdlIG9mCisgICAgc2l6ZXMuIFRoZXJlIGFyZSAyIGVxdWFsbHkgc3BhY2VkIHRyZWViaW5zIGZvciBlYWNoIHBvd2VyIG9mIHR3bworICAgIGZyb20gVFJFRV9TSElGVCB0byBUUkVFX1NISUZUKzE2LiBUaGUgbGFzdCBiaW4gaG9sZHMgYW55dGhpbmcKKyAgICBsYXJnZXIuCisKKyAgQmluIG1hcHMKKyAgICBUaGVyZSBpcyBvbmUgYml0IG1hcCBmb3Igc21hbGwgYmlucyAoInNtYWxsbWFwIikgYW5kIG9uZSBmb3IKKyAgICB0cmVlYmlucyAoInRyZWVtYXApLiAgRWFjaCBiaW4gc2V0cyBpdHMgYml0IHdoZW4gbm9uLWVtcHR5LCBhbmQKKyAgICBjbGVhcnMgdGhlIGJpdCB3aGVuIGVtcHR5LiAgQml0IG9wZXJhdGlvbnMgYXJlIHRoZW4gdXNlZCB0byBhdm9pZAorICAgIGJpbi1ieS1iaW4gc2VhcmNoaW5nIC0tIG5lYXJseSBhbGwgInNlYXJjaCIgaXMgZG9uZSB3aXRob3V0IGV2ZXIKKyAgICBsb29raW5nIGF0IGJpbnMgdGhhdCB3b24ndCBiZSBzZWxlY3RlZC4gIFRoZSBiaXQgbWFwcworICAgIGNvbnNlcnZhdGl2ZWx5IHVzZSAzMiBiaXRzIHBlciBtYXAgd29yZCwgZXZlbiBpZiBvbiA2NGJpdCBzeXN0ZW0uCisgICAgRm9yIGEgZ29vZCBkZXNjcmlwdGlvbiBvZiBzb21lIG9mIHRoZSBiaXQtYmFzZWQgdGVjaG5pcXVlcyB1c2VkCisgICAgaGVyZSwgc2VlIEhlbnJ5IFMuIFdhcnJlbiBKcidzIGJvb2sgIkhhY2tlcidzIERlbGlnaHQiIChhbmQKKyAgICBzdXBwbGVtZW50IGF0IGh0dHA6Ly9oYWNrZXJzZGVsaWdodC5vcmcvKS4gTWFueSBvZiB0aGVzZSBhcmUKKyAgICBpbnRlbmRlZCB0byByZWR1Y2UgdGhlIGJyYW5jaGluZXNzIG9mIHBhdGhzIHRocm91Z2ggbWFsbG9jIGV0YywgYXMKKyAgICB3ZWxsIGFzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG1lbW9yeSBsb2NhdGlvbnMgcmVhZCBvciB3cml0dGVuLgorCisgIFNlZ21lbnRzCisgICAgQSBsaXN0IG9mIHNlZ21lbnRzIGhlYWRlZCBieSBhbiBlbWJlZGRlZCBtYWxsb2Nfc2VnbWVudCByZWNvcmQKKyAgICByZXByZXNlbnRpbmcgdGhlIGluaXRpYWwgc3BhY2UuCisKKyAgQWRkcmVzcyBjaGVjayBzdXBwb3J0CisgICAgVGhlIGxlYXN0X2FkZHIgZmllbGQgaXMgdGhlIGxlYXN0IGFkZHJlc3MgZXZlciBvYnRhaW5lZCBmcm9tCisgICAgTU9SRUNPUkUgb3IgTU1BUC4gQXR0ZW1wdGVkIGZyZWVzIGFuZCByZWFsbG9jcyBvZiBhbnkgYWRkcmVzcyBsZXNzCisgICAgdGhhbiB0aGlzIGFyZSB0cmFwcGVkICh1bmxlc3MgSU5TRUNVUkUgaXMgZGVmaW5lZCkuCisKKyAgTWFnaWMgdGFnCisgICAgQSBjcm9zcy1jaGVjayBmaWVsZCB0aGF0IHNob3VsZCBhbHdheXMgaG9sZCBzYW1lIHZhbHVlIGFzIG1wYXJhbXMubWFnaWMuCisKKyAgRmxhZ3MKKyAgICBCaXRzIHJlY29yZGluZyB3aGV0aGVyIHRvIHVzZSBNTUFQLCBsb2Nrcywgb3IgY29udGlndW91cyBNT1JFQ09SRQorCisgIFN0YXRpc3RpY3MKKyAgICBFYWNoIHNwYWNlIGtlZXBzIHRyYWNrIG9mIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeQorICAgIG9idGFpbmVkIHZpYSBNT1JFQ09SRSBvciBNTUFQLgorCisgIExvY2tpbmcKKyAgICBJZiBVU0VfTE9DS1MgaXMgZGVmaW5lZCwgdGhlICJtdXRleCIgbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQKKyAgICBhcm91bmQgZXZlcnkgcHVibGljIGNhbGwgdXNpbmcgdGhpcyBtc3BhY2UuCisqLworCisvKiBCaW4gdHlwZXMsIHdpZHRocyBhbmQgc2l6ZXMgKi8KKyNkZWZpbmUgTlNNQUxMQklOUyAgICAgICAgKDMyVSkKKyNkZWZpbmUgTlRSRUVCSU5TICAgICAgICAgKDMyVSkKKyNkZWZpbmUgU01BTExCSU5fU0hJRlQgICAgKDNVKQorI2RlZmluZSBTTUFMTEJJTl9XSURUSCAgICAoU0laRV9UX09ORSA8PCBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgVFJFRUJJTl9TSElGVCAgICAgKDhVKQorI2RlZmluZSBNSU5fTEFSR0VfU0laRSAgICAoU0laRV9UX09ORSA8PCBUUkVFQklOX1NISUZUKQorI2RlZmluZSBNQVhfU01BTExfU0laRSAgICAoTUlOX0xBUkdFX1NJWkUgLSBTSVpFX1RfT05FKQorI2RlZmluZSBNQVhfU01BTExfUkVRVUVTVCAoTUFYX1NNQUxMX1NJWkUgLSBDSFVOS19BTElHTl9NQVNLIC0gQ0hVTktfT1ZFUkhFQUQpCisKK3N0cnVjdCBtYWxsb2Nfc3RhdGUgeworICBiaW5tYXBfdCAgIHNtYWxsbWFwOworICBiaW5tYXBfdCAgIHRyZWVtYXA7CisgIHNpemVfdCAgICAgZHZzaXplOworICBzaXplX3QgICAgIHRvcHNpemU7CisgIGNoYXIqICAgICAgbGVhc3RfYWRkcjsKKyAgbWNodW5rcHRyICBkdjsKKyAgbWNodW5rcHRyICB0b3A7CisgIHNpemVfdCAgICAgdHJpbV9jaGVjazsKKyAgc2l6ZV90ICAgICBtYWdpYzsKKyAgbWNodW5rcHRyICBzbWFsbGJpbnNbKE5TTUFMTEJJTlMrMSkqMl07CisgIHRiaW5wdHIgICAgdHJlZWJpbnNbTlRSRUVCSU5TXTsKKyAgc2l6ZV90ICAgICBmb290cHJpbnQ7CisgIHNpemVfdCAgICAgbWF4X2Zvb3RwcmludDsKKyAgZmxhZ190ICAgICBtZmxhZ3M7CisjaWYgVVNFX0xPQ0tTCisgIE1MT0NLX1QgICAgbXV0ZXg7ICAgICAvKiBsb2NhdGUgbG9jayBhbW9uZyBmaWVsZHMgdGhhdCByYXJlbHkgY2hhbmdlICovCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisgIG1zZWdtZW50ICAgc2VnOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3N0YXRlKiAgICBtc3RhdGU7CisKKy8qIC0tLS0tLS0tLS0tLS0gR2xvYmFsIG1hbGxvY19zdGF0ZSBhbmQgbWFsbG9jX3BhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIG1hbGxvY19wYXJhbXMgaG9sZHMgZ2xvYmFsIHByb3BlcnRpZXMsIGluY2x1ZGluZyB0aG9zZSB0aGF0IGNhbiBiZQorICBkeW5hbWljYWxseSBzZXQgdXNpbmcgbWFsbG9wdC4gVGhlcmUgaXMgYSBzaW5nbGUgaW5zdGFuY2UsIG1wYXJhbXMsCisgIGluaXRpYWxpemVkIGluIGluaXRfbXBhcmFtcy4KKyovCisKK3N0cnVjdCBtYWxsb2NfcGFyYW1zIHsKKyAgc2l6ZV90IG1hZ2ljOworICBzaXplX3QgcGFnZV9zaXplOworICBzaXplX3QgZ3JhbnVsYXJpdHk7CisgIHNpemVfdCBtbWFwX3RocmVzaG9sZDsKKyAgc2l6ZV90IHRyaW1fdGhyZXNob2xkOworICBmbGFnX3QgZGVmYXVsdF9tZmxhZ3M7Cit9OworCitzdGF0aWMgc3RydWN0IG1hbGxvY19wYXJhbXMgbXBhcmFtczsKKworLyogVGhlIGdsb2JhbCBtYWxsb2Nfc3RhdGUgdXNlZCBmb3IgYWxsIG5vbi0ibXNwYWNlIiBjYWxscyAqLworc3RhdGljIHN0cnVjdCBtYWxsb2Nfc3RhdGUgX2dtXzsKKyNkZWZpbmUgZ20gICAgICAgICAgICAgICAgICgmX2dtXykKKyNkZWZpbmUgaXNfZ2xvYmFsKE0pICAgICAgICgoTSkgPT0gJl9nbV8pCisjZGVmaW5lIGlzX2luaXRpYWxpemVkKE0pICAoKE0pLT50b3AgIT0gMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3lzdGVtIGFsbG9jIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogT3BlcmF0aW9ucyBvbiBtZmxhZ3MgKi8KKworI2RlZmluZSB1c2VfbG9jayhNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTE9DS19CSVQpCisjZGVmaW5lIGVuYWJsZV9sb2NrKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9MT0NLX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9sb2NrKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX0xPQ0tfQklUKQorCisjZGVmaW5lIHVzZV9tbWFwKE0pICAgICAgICAgICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9NTUFQX0JJVCkKKyNkZWZpbmUgZW5hYmxlX21tYXAoTSkgICAgICAgICgoTSktPm1mbGFncyB8PSAgVVNFX01NQVBfQklUKQorI2RlZmluZSBkaXNhYmxlX21tYXAoTSkgICAgICAgKChNKS0+bWZsYWdzICY9IH5VU0VfTU1BUF9CSVQpCisKKyNkZWZpbmUgdXNlX25vbmNvbnRpZ3VvdXMoTSkgICgoTSktPm1mbGFncyAmICAgVVNFX05PTkNPTlRJR1VPVVNfQklUKQorI2RlZmluZSBkaXNhYmxlX2NvbnRpZ3VvdXMoTSkgKChNKS0+bWZsYWdzIHw9ICBVU0VfTk9OQ09OVElHVU9VU19CSVQpCisKKyNkZWZpbmUgc2V0X2xvY2soTSxMKVwKKyAoKE0pLT5tZmxhZ3MgPSAoTCk/XAorICAoKE0pLT5tZmxhZ3MgfCBVU0VfTE9DS19CSVQpIDpcCisgICgoTSktPm1mbGFncyAmIH5VU0VfTE9DS19CSVQpKQorCisvKiBwYWdlLWFsaWduIGEgc2l6ZSAqLworI2RlZmluZSBwYWdlX2FsaWduKFMpXAorICgoKFMpICsgKG1wYXJhbXMucGFnZV9zaXplKSkgJiB+KG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpCisKKy8qIGdyYW51bGFyaXR5LWFsaWduIGEgc2l6ZSAqLworI2RlZmluZSBncmFudWxhcml0eV9hbGlnbihTKVwKKyAgKCgoUykgKyAobXBhcmFtcy5ncmFudWxhcml0eSkpICYgfihtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpCisKKyNkZWZpbmUgaXNfcGFnZV9hbGlnbmVkKFMpXAorICAgKCgoc2l6ZV90KShTKSAmIChtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKSA9PSAwKQorI2RlZmluZSBpc19ncmFudWxhcml0eV9hbGlnbmVkKFMpXAorICAgKCgoc2l6ZV90KShTKSAmIChtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpID09IDApCisKKy8qICBUcnVlIGlmIHNlZ21lbnQgUyBob2xkcyBhZGRyZXNzIEEgKi8KKyNkZWZpbmUgc2VnbWVudF9ob2xkcyhTLCBBKVwKKyAgKChjaGFyKikoQSkgPj0gUy0+YmFzZSAmJiAoY2hhciopKEEpIDwgUy0+YmFzZSArIFMtPnNpemUpCisKKy8qIFJldHVybiBzZWdtZW50IGhvbGRpbmcgZ2l2ZW4gYWRkcmVzcyAqLworc3RhdGljIG1zZWdtZW50cHRyIHNlZ21lbnRfaG9sZGluZyhtc3RhdGUgbSwgY2hhciogYWRkcikgeworICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgIGZvciAoOzspIHsKKyAgICBpZiAoYWRkciA+PSBzcC0+YmFzZSAmJiBhZGRyIDwgc3AtPmJhc2UgKyBzcC0+c2l6ZSkKKyAgICAgIHJldHVybiBzcDsKKyAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBzZWdtZW50IGNvbnRhaW5zIGEgc2VnbWVudCBsaW5rICovCitzdGF0aWMgaW50IGhhc19zZWdtZW50X2xpbmsobXN0YXRlIG0sIG1zZWdtZW50cHRyIHNzKSB7CisgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgZm9yICg7OykgeworICAgIGlmICgoY2hhciopc3AgPj0gc3MtPmJhc2UgJiYgKGNoYXIqKXNwIDwgc3MtPmJhc2UgKyBzcy0+c2l6ZSkKKyAgICAgIHJldHVybiAxOworICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKKyNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0KKyNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKChzKSA+IChNKS0+dHJpbV9jaGVjaykKKyNlbHNlICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2RlZmluZSBzaG91bGRfdHJpbShNLHMpICAoMCkKKyNlbmRpZiAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworCisvKgorICBUT1BfRk9PVF9TSVpFIGlzIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiBhIHNlZ21lbnQsIGluY2x1ZGluZyBzcGFjZQorICB0aGF0IG1heSBiZSBuZWVkZWQgdG8gcGxhY2Ugc2VnbWVudCByZWNvcmRzIGFuZCBmZW5jZXBvc3RzIHdoZW4gbmV3CisgIG5vbmNvbnRpZ3VvdXMgc2VnbWVudHMgYXJlIGFkZGVkLgorKi8KKyNkZWZpbmUgVE9QX0ZPT1RfU0laRVwKKyAgKGFsaWduX29mZnNldChjaHVuazJtZW0oMCkpK3BhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpKStNSU5fQ0hVTktfU0laRSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBIb29rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBQUkVBQ1RJT04gc2hvdWxkIGJlIGRlZmluZWQgdG8gcmV0dXJuIDAgb24gc3VjY2VzcywgYW5kIG5vbnplcm8gb24KKyAgZmFpbHVyZS4gSWYgeW91IGFyZSBub3QgdXNpbmcgbG9ja2luZywgeW91IGNhbiByZWRlZmluZSB0aGVzZSB0byBkbworICBhbnl0aGluZyB5b3UgbGlrZS4KKyovCisKKyNpZiBVU0VfTE9DS1MKKworLyogRW5zdXJlIGxvY2tzIGFyZSBpbml0aWFsaXplZCAqLworI2RlZmluZSBHTE9CQUxMWV9JTklUSUFMSVpFKCkgKG1wYXJhbXMucGFnZV9zaXplID09IDAgJiYgaW5pdF9tcGFyYW1zKCkpCisKKyNkZWZpbmUgUFJFQUNUSU9OKE0pICAoKEdMT0JBTExZX0lOSVRJQUxJWkUoKSB8fCB1c2VfbG9jayhNKSk/IEFDUVVJUkVfTE9DSygmKE0pLT5tdXRleCkgOiAwKQorI2RlZmluZSBQT1NUQUNUSU9OKE0pIHsgaWYgKHVzZV9sb2NrKE0pKSBSRUxFQVNFX0xPQ0soJihNKS0+bXV0ZXgpOyB9CisjZWxzZSAvKiBVU0VfTE9DS1MgKi8KKworI2lmbmRlZiBQUkVBQ1RJT04KKyNkZWZpbmUgUFJFQUNUSU9OKE0pICgwKQorI2VuZGlmICAvKiBQUkVBQ1RJT04gKi8KKworI2lmbmRlZiBQT1NUQUNUSU9OCisjZGVmaW5lIFBPU1RBQ1RJT04oTSkKKyNlbmRpZiAgLyogUE9TVEFDVElPTiAqLworCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKy8qCisgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGlzIHRyaWdnZXJlZCB1cG9uIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMuCisgIFVTQUdFX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgb24gZGV0ZWN0ZWQgYmFkIGZyZWVzIGFuZAorICByZWFsbG9jcy4gVGhlIGFyZ3VtZW50IHAgaXMgYW4gYWRkcmVzcyB0aGF0IG1pZ2h0IGhhdmUgdHJpZ2dlcmVkIHRoZQorICBmYXVsdC4gSXQgaXMgaWdub3JlZCBieSB0aGUgdHdvIHByZWRlZmluZWQgYWN0aW9ucywgYnV0IG1pZ2h0IGJlCisgIHVzZWZ1bCBpbiBjdXN0b20gYWN0aW9ucyB0aGF0IHRyeSB0byBoZWxwIGRpYWdub3NlIGVycm9ycy4KKyovCisKKyNpZiBQUk9DRUVEX09OX0VSUk9SCisKKy8qIEEgY291bnQgb2YgdGhlIG51bWJlciBvZiBjb3JydXB0aW9uIGVycm9ycyBjYXVzaW5nIHJlc2V0cyAqLworaW50IG1hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50OworCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovCitzdGF0aWMgdm9pZCByZXNldF9vbl9lcnJvcihtc3RhdGUgbSk7CisKKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgIHJlc2V0X29uX2Vycm9yKG0pCisjZGVmaW5lIFVTQUdFX0VSUk9SX0FDVElPTihtLCBwKQorCisjZWxzZSAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKyNpZm5kZWYgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04KKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgQUJPUlQKKyNlbmRpZiAvKiBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiAqLworCisjaWZuZGVmIFVTQUdFX0VSUk9SX0FDVElPTgorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSxwKSBBQk9SVAorI2VuZGlmIC8qIFVTQUdFX0VSUk9SX0FDVElPTiAqLworCisjZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgISBERUJVRworCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQorI2RlZmluZSBjaGVja19tbWFwcGVkX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApCisKKyNlbHNlIC8qIERFQlVHICovCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKSAgICAgICBkb19jaGVja19mcmVlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKSAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfdG9wX2NodW5rKE0sUCkgICAgICAgIGRvX2NoZWNrX3RvcF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKSBkb19jaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkgICAgICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKE0pCisKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQqIG1lbSwgc2l6ZV90IHMpOworc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOworc3RhdGljIHZvaWQgICBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSk7CitzdGF0aWMgaW50ICAgIGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCk7CitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSk7CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbmRleGluZyBCaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBpc19zbWFsbChzKSAgICAgICAgICgoKHMpID4+IFNNQUxMQklOX1NISUZUKSA8IE5TTUFMTEJJTlMpCisjZGVmaW5lIHNtYWxsX2luZGV4KHMpICAgICAgKChzKSAgPj4gU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIHNtYWxsX2luZGV4MnNpemUoaSkgKChpKSAgPDwgU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIE1JTl9TTUFMTF9JTkRFWCAgICAgKHNtYWxsX2luZGV4KE1JTl9DSFVOS19TSVpFKSkKKworLyogYWRkcmVzc2luZyBieSBpbmRleC4gU2VlIGFib3ZlIGFib3V0IHNtYWxsYmluIHJlcG9zaXRpb25pbmcgKi8KKyNkZWZpbmUgc21hbGxiaW5fYXQoTSwgaSkgICAoKHNiaW5wdHIpKChjaGFyKikmKChNKS0+c21hbGxiaW5zWyhpKTw8MV0pKSkKKyNkZWZpbmUgdHJlZWJpbl9hdChNLGkpICAgICAoJigoTSktPnRyZWViaW5zW2ldKSkKKworLyogYXNzaWduIHRyZWUgaW5kZXggZm9yIHNpemUgUyB0byB2YXJpYWJsZSBJICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChpMzg2KQorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBLO1wKKyAgICBfX2FzbV9fKCJic3JsICUxLCUwXG5cdCIgOiAiPXIiIChLKSA6ICJybSIgIChYKSk7XAorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XAorICB9XAorfQorI2Vsc2UgLyogR05VQyAqLworI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBZID0gKHVuc2lnbmVkIGludClYO1wKKyAgICB1bnNpZ25lZCBpbnQgTiA9ICgoWSAtIDB4MTAwKSA+PiAxNikgJiA4O1wKKyAgICB1bnNpZ25lZCBpbnQgSyA9ICgoKFkgPDw9IE4pIC0gMHgxMDAwKSA+PiAxNikgJiA0O1wKKyAgICBOICs9IEs7XAorICAgIE4gKz0gSyA9ICgoKFkgPDw9IEspIC0gMHg0MDAwKSA+PiAxNikgJiAyO1wKKyAgICBLID0gMTQgLSBOICsgKChZIDw8PSBLKSA+PiAxNSk7XAorICAgIEkgPSAoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKTtcCisgIH1cCit9CisjZW5kaWYgLyogR05VQyAqLworCisvKiBCaXQgcmVwcmVzZW50aW5nIG1heGltdW0gcmVzb2x2ZWQgc2l6ZSBpbiBhIHRyZWViaW4gYXQgaSAqLworI2RlZmluZSBiaXRfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKGkgPT0gTlRSRUVCSU5TLTEpPyAoU0laRV9UX0JJVFNJWkUtMSkgOiAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKQorCisvKiBTaGlmdCBwbGFjaW5nIG1heGltdW0gcmVzb2x2ZWQgYml0IGluIGEgdHJlZWJpbiBhdCBpIGFzIHNpZ24gYml0ICovCisjZGVmaW5lIGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoKGkgPT0gTlRSRUVCSU5TLTEpPyAwIDogXAorICAgICgoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkgLSAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKSkpCisKKy8qIFRoZSBzaXplIG9mIHRoZSBzbWFsbGVzdCBjaHVuayBoZWxkIGluIGJpbiB3aXRoIGluZGV4IGkgKi8KKyNkZWZpbmUgbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoKFNJWkVfVF9PTkUgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUKSkgfCAgXAorICAgKCgoc2l6ZV90KSgoaSkgJiBTSVpFX1RfT05FKSkgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMSkpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGJpbiBtYXBzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGJpdCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGluZGV4ICovCisjZGVmaW5lIGlkeDJiaXQoaSkgICAgICAgICAgICAgICgoYmlubWFwX3QpKDEpIDw8IChpKSkKKworLyogTWFyay9DbGVhciBiaXRzIHdpdGggZ2l2ZW4gaW5kZXggKi8KKyNkZWZpbmUgbWFya19zbWFsbG1hcChNLGkpICAgICAgKChNKS0+c21hbGxtYXAgfD0gIGlkeDJiaXQoaSkpCisjZGVmaW5lIGNsZWFyX3NtYWxsbWFwKE0saSkgICAgICgoTSktPnNtYWxsbWFwICY9IH5pZHgyYml0KGkpKQorI2RlZmluZSBzbWFsbG1hcF9pc19tYXJrZWQoTSxpKSAoKE0pLT5zbWFsbG1hcCAmICAgaWR4MmJpdChpKSkKKworI2RlZmluZSBtYXJrX3RyZWVtYXAoTSxpKSAgICAgICAoKE0pLT50cmVlbWFwICB8PSAgaWR4MmJpdChpKSkKKyNkZWZpbmUgY2xlYXJfdHJlZW1hcChNLGkpICAgICAgKChNKS0+dHJlZW1hcCAgJj0gfmlkeDJiaXQoaSkpCisjZGVmaW5lIHRyZWVtYXBfaXNfbWFya2VkKE0saSkgICgoTSktPnRyZWVtYXAgICYgICBpZHgyYml0KGkpKQorCisvKiBpbmRleCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGJpdCAqLworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChpMzg2KQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgSjtcCisgIF9fYXNtX18oImJzZmwgJTEsJTBcblx0IiA6ICI9ciIgKEopIDogInJtIiAoWCkpO1wKKyAgSSA9IChiaW5kZXhfdClKO1wKK30KKworI2Vsc2UgLyogR05VQyAqLworI2lmICBVU0VfQlVJTFRJTl9GRlMKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpIEkgPSBmZnMoWCktMQorCisjZWxzZSAvKiBVU0VfQlVJTFRJTl9GRlMgKi8KKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IFkgPSBYIC0gMTtcCisgIHVuc2lnbmVkIGludCBLID0gWSA+PiAoMTYtNCkgJiAxNjtcCisgIHVuc2lnbmVkIGludCBOID0gSzsgICAgICAgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICg4LTMpICYgIDg7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoNC0yKSAmICA0OyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDItMSkgJiAgMjsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICgxLTApICYgIDE7ICBZID4+PSBLO1wKKyAgSSA9IChiaW5kZXhfdCkoTiArIFkpO1wKK30KKyNlbmRpZiAvKiBVU0VfQlVJTFRJTl9GRlMgKi8KKyNlbmRpZiAvKiBHTlVDICovCisKKy8qIGlzb2xhdGUgdGhlIGxlYXN0IHNldCBiaXQgb2YgYSBiaXRtYXAgKi8KKyNkZWZpbmUgbGVhc3RfYml0KHgpICAgICAgICAgKCh4KSAmIC0oeCkpCisKKy8qIG1hc2sgd2l0aCBhbGwgYml0cyB0byBsZWZ0IG9mIGxlYXN0IGJpdCBvZiB4IG9uICovCisjZGVmaW5lIGxlZnRfYml0cyh4KSAgICAgICAgICgoeDw8MSkgfCAtKHg8PDEpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBvciBlcXVhbCB0byBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBzYW1lX29yX2xlZnRfYml0cyh4KSAoKHgpIHwgLSh4KSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSdW50aW1lIENoZWNrIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBGb3Igc2VjdXJpdHksIHRoZSBtYWluIGludmFyaWFudCBpcyB0aGF0IG1hbGxvYy9mcmVlL2V0YyBuZXZlcgorICB3cml0ZXMgdG8gYSBzdGF0aWMgYWRkcmVzcyBvdGhlciB0aGFuIG1hbGxvY19zdGF0ZSwgdW5sZXNzIHN0YXRpYworICBtYWxsb2Nfc3RhdGUgaXRzZWxmIGhhcyBiZWVuIGNvcnJ1cHRlZCwgd2hpY2ggY2Fubm90IG9jY3VyIHZpYQorICBtYWxsb2MgKGJlY2F1c2Ugb2YgdGhlc2UgY2hlY2tzKS4gSW4gZXNzZW5jZSB0aGlzIG1lYW5zIHRoYXQgd2UKKyAgYmVsaWV2ZSBhbGwgcG9pbnRlcnMsIHNpemVzLCBtYXBzIGV0YyBoZWxkIGluIG1hbGxvY19zdGF0ZSwgYnV0CisgIGNoZWNrIGFsbCBvZiB0aG9zZSBsaW5rZWQgb3Igb2Zmc2V0dGVkIGZyb20gb3RoZXIgZW1iZWRkZWQgZGF0YQorICBzdHJ1Y3R1cmVzLiAgVGhlc2UgY2hlY2tzIGFyZSBpbnRlcnNwZXJzZWQgd2l0aCBtYWluIGNvZGUgaW4gYSB3YXkKKyAgdGhhdCB0ZW5kcyB0byBtaW5pbWl6ZSB0aGVpciBydW4tdGltZSBjb3N0LgorCisgIFdoZW4gRk9PVEVSUyBpcyBkZWZpbmVkLCBpbiBhZGRpdGlvbiB0byByYW5nZSBjaGVja2luZywgd2UgYWxzbworICB2ZXJpZnkgZm9vdGVyIGZpZWxkcyBvZiBpbnVzZSBjaHVua3MsIHdoaWNoIGNhbiBiZSB1c2VkIGd1YXJhbnRlZQorICB0aGF0IHRoZSBtc3RhdGUgY29udHJvbGxpbmcgbWFsbG9jL2ZyZWUgaXMgaW50YWN0LiAgVGhpcyBpcyBhCisgIHN0cmVhbWxpbmVkIHZlcnNpb24gb2YgdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBieSBXaWxsaWFtIFJvYmVydHNvbgorICBldCBhbCBpbiAiUnVuLXRpbWUgRGV0ZWN0aW9uIG9mIEhlYXAtYmFzZWQgT3ZlcmZsb3dzIiBMSVNBJzAzCisgIGh0dHA6Ly93d3cudXNlbml4Lm9yZy9ldmVudHMvbGlzYTAzL3RlY2gvcm9iZXJ0c29uLmh0bWwgVGhlIGZvb3RlcgorICBvZiBhbiBpbnVzZSBjaHVuayBob2xkcyB0aGUgeG9yIG9mIGl0cyBtc3RhdGUgYW5kIGEgcmFuZG9tIHNlZWQsCisgIHRoYXQgaXMgY2hlY2tlZCB1cG9uIGNhbGxzIHRvIGZyZWUoKSBhbmQgcmVhbGxvYygpLiAgVGhpcyBpcworICAocHJvYmFibGlzdGljYWxseSkgdW5ndWVzc2FibGUgZnJvbSBvdXRzaWRlIHRoZSBwcm9ncmFtLCBidXQgY2FuIGJlCisgIGNvbXB1dGVkIGJ5IGFueSBjb2RlIHN1Y2Nlc3NmdWxseSBtYWxsb2MnaW5nIGFueSBjaHVuaywgc28gZG9lcyBub3QKKyAgaXRzZWxmIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGNvZGUgdGhhdCBoYXMgYWxyZWFkeSBicm9rZW4KKyAgc2VjdXJpdHkgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLiAgVW5saWtlIFJvYmVydHNvbiBldCBhbCwgd2UKKyAgYWx3YXlzIGR5bmFtaWNhbGx5IGNoZWNrIGFkZHJlc3NlcyBvZiBhbGwgb2Zmc2V0IGNodW5rcyAocHJldmlvdXMsCisgIG5leHQsIGV0YykuIFRoaXMgdHVybnMgb3V0IHRvIGJlIGNoZWFwZXIgdGhhbiByZWx5aW5nIG9uIGhhc2hlcy4KKyovCisKKyNpZiAhSU5TRUNVUkUKKy8qIENoZWNrIGlmIGFkZHJlc3MgYSBpcyBhdCBsZWFzdCBhcyBoaWdoIGFzIGFueSBmcm9tIE1PUkVDT1JFIG9yIE1NQVAgKi8KKyNkZWZpbmUgb2tfYWRkcmVzcyhNLCBhKSAoKGNoYXIqKShhKSA+PSAoTSktPmxlYXN0X2FkZHIpCisvKiBDaGVjayBpZiBhZGRyZXNzIG9mIG5leHQgY2h1bmsgbiBpcyBoaWdoZXIgdGhhbiBiYXNlIGNodW5rIHAgKi8KKyNkZWZpbmUgb2tfbmV4dChwLCBuKSAgICAoKGNoYXIqKShwKSA8IChjaGFyKikobikpCisvKiBDaGVjayBpZiBwIGhhcyBpdHMgY2ludXNlIGJpdCBvbiAqLworI2RlZmluZSBva19jaW51c2UocCkgICAgIGNpbnVzZShwKQorLyogQ2hlY2sgaWYgcCBoYXMgaXRzIHBpbnVzZSBiaXQgb24gKi8KKyNkZWZpbmUgb2tfcGludXNlKHApICAgICBwaW51c2UocCkKKworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKDEpCisjZGVmaW5lIG9rX25leHQoYiwgbikgICAgKDEpCisjZGVmaW5lIG9rX2NpbnVzZShwKSAgICAgKDEpCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgKDEpCisjZW5kaWYgLyogIUlOU0VDVVJFICovCisKKyNpZiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpCisvKiBDaGVjayBpZiAoYWxsZWdlZCkgbXN0YXRlIG0gaGFzIGV4cGVjdGVkIG1hZ2ljIGZpZWxkICovCisjZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKChNKS0+bWFnaWMgPT0gbXBhcmFtcy5tYWdpYykKKyNlbHNlICAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisjZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKDEpCisjZW5kaWYgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworCisKKy8qIEluIGdjYywgdXNlIF9fYnVpbHRpbl9leHBlY3QgdG8gbWluaW1pemUgaW1wYWN0IG9mIGNoZWNrcyAqLworI2lmICFJTlNFQ1VSRQorI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMKKyNkZWZpbmUgUlRDSEVDSyhlKSAgX19idWlsdGluX2V4cGVjdChlLCAxKQorI2Vsc2UgLyogR05VQyAqLworI2RlZmluZSBSVENIRUNLKGUpICAoZSkKKyNlbmRpZiAvKiBHTlVDICovCisjZWxzZSAvKiAhSU5TRUNVUkUgKi8KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKDEpCisjZW5kaWYgLyogIUlOU0VDVVJFICovCisKKy8qIG1hY3JvcyB0byBzZXQgdXAgaW51c2UgY2h1bmtzIHdpdGggb3Igd2l0aG91dCBmb290ZXJzICovCisKKyNpZiAhRk9PVEVSUworCisjZGVmaW5lIG1hcmtfaW51c2VfZm9vdChNLHAscykKKworLyogU2V0IGNpbnVzZSBiaXQgYW5kIHBpbnVzZSBiaXQgb2YgbmV4dCBjaHVuayAqLworI2RlZmluZSBzZXRfaW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKCgocCktPmhlYWQgJiBQSU5VU0VfQklUKXxzfENJTlVTRV9CSVQpLFwKKyAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpCisKKy8qIFNldCBjaW51c2UgYW5kIHBpbnVzZSBvZiB0aGlzIGNodW5rIGFuZCBwaW51c2Ugb2YgbmV4dCBjaHVuayAqLworI2RlZmluZSBzZXRfaW51c2VfYW5kX3BpbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKKyAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpCisKKy8qIFNldCBzaXplLCBjaW51c2UgYW5kIHBpbnVzZSBiaXQgb2YgdGhpcyBjaHVuayAqLworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKE0sIHAsIHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSkKKworI2Vsc2UgLyogRk9PVEVSUyAqLworCisvKiBTZXQgZm9vdCBvZiBpbnVzZSBjaHVuayB0byBiZSB4b3Igb2YgbXN0YXRlIGFuZCBzZWVkICovCisjZGVmaW5lIG1hcmtfaW51c2VfZm9vdChNLHAscylcCisgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAoKHNpemVfdCkoTSkgXiBtcGFyYW1zLm1hZ2ljKSkKKworI2RlZmluZSBnZXRfbXN0YXRlX2ZvcihwKVwKKyAgKChtc3RhdGUpKCgobWNodW5rcHRyKSgoY2hhciopKHApICtcCisgICAgKGNodW5rc2l6ZShwKSkpKS0+cHJldl9mb290IF4gbXBhcmFtcy5tYWdpYykpCisKKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksIFwKKyAgbWFya19pbnVzZV9mb290KE0scCxzKSkKKworI2RlZmluZSBzZXRfaW51c2VfYW5kX3BpbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKKyAgKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKSxcCisgbWFya19pbnVzZV9mb290KE0scCxzKSkKKworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKE0sIHAsIHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgIG1hcmtfaW51c2VfZm9vdChNLCBwLCBzKSkKKworI2VuZGlmIC8qICFGT09URVJTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2V0dGluZyBtcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluaXRpYWxpemUgbXBhcmFtcyAqLworc3RhdGljIGludCBpbml0X21wYXJhbXModm9pZCkgeworICBpZiAobXBhcmFtcy5wYWdlX3NpemUgPT0gMCkgeworICAgIHNpemVfdCBzOworCisgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IERFRkFVTFRfTU1BUF9USFJFU0hPTEQ7CisgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IERFRkFVTFRfVFJJTV9USFJFU0hPTEQ7CisjaWYgTU9SRUNPUkVfQ09OVElHVU9VUworICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVR8VVNFX01NQVBfQklUOworI2Vsc2UgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVHxVU0VfTk9OQ09OVElHVU9VU19CSVQ7CisjZW5kaWYgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworCisjaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQorICAgIHsKKyNpZiBVU0VfREVWX1JBTkRPTQorICAgICAgaW50IGZkOworICAgICAgdW5zaWduZWQgY2hhciBidWZbc2l6ZW9mKHNpemVfdCldOworICAgICAgLyogVHJ5IHRvIHVzZSAvZGV2L3VyYW5kb20sIGVsc2UgZmFsbCBiYWNrIG9uIHVzaW5nIHRpbWUgKi8KKyAgICAgIGlmICgoZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSkpID49IDAgJiYKKyAgICAgICAgICByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSA9PSBzaXplb2YoYnVmKSkgeworICAgICAgICBzID0gKigoc2l6ZV90ICopIGJ1Zik7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBVU0VfREVWX1JBTkRPTSAqLworICAgICAgICBzID0gKHNpemVfdCkodGltZSgwKSBeIChzaXplX3QpMHg1NTU1NTU1NVUpOworCisgICAgICBzIHw9IChzaXplX3QpOFU7ICAgIC8qIGVuc3VyZSBub256ZXJvICovCisgICAgICBzICY9IH4oc2l6ZV90KTdVOyAgIC8qIGltcHJvdmUgY2hhbmNlcyBvZiBmYXVsdCBmb3IgYmFkIHZhbHVlcyAqLworCisgICAgfQorI2Vsc2UgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworICAgIHMgPSAoc2l6ZV90KTB4NTg1ODU4NThVOworI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKyAgICBBQ1FVSVJFX01BR0lDX0lOSVRfTE9DSygpOworICAgIGlmIChtcGFyYW1zLm1hZ2ljID09IDApIHsKKyAgICAgIG1wYXJhbXMubWFnaWMgPSBzOworICAgICAgLyogU2V0IHVwIGxvY2sgZm9yIG1haW4gbWFsbG9jIGFyZWEgKi8KKyAgICAgIElOSVRJQUxfTE9DSygmZ20tPm11dGV4KTsKKyAgICAgIGdtLT5tZmxhZ3MgPSBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzOworICAgIH0KKyAgICBSRUxFQVNFX01BR0lDX0lOSVRfTE9DSygpOworCisjaWZuZGVmIFdJTjMyCisgICAgbXBhcmFtcy5wYWdlX3NpemUgPSBtYWxsb2NfZ2V0cGFnZXNpemU7CisgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfR1JBTlVMQVJJVFkgOiBtcGFyYW1zLnBhZ2Vfc2l6ZSk7CisjZWxzZSAvKiBXSU4zMiAqLworICAgIHsKKyAgICAgIFNZU1RFTV9JTkZPIHN5c3RlbV9pbmZvOworICAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtX2luZm8pOworICAgICAgbXBhcmFtcy5wYWdlX3NpemUgPSBzeXN0ZW1faW5mby5kd1BhZ2VTaXplOworICAgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IHN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5OworICAgIH0KKyNlbmRpZiAvKiBXSU4zMiAqLworCisgICAgLyogU2FuaXR5LWNoZWNrIGNvbmZpZ3VyYXRpb246CisgICAgICAgc2l6ZV90IG11c3QgYmUgdW5zaWduZWQgYW5kIGFzIHdpZGUgYXMgcG9pbnRlciB0eXBlLgorICAgICAgIGludHMgbXVzdCBiZSBhdCBsZWFzdCA0IGJ5dGVzLgorICAgICAgIGFsaWdubWVudCBtdXN0IGJlIGF0IGxlYXN0IDguCisgICAgICAgQWxpZ25tZW50LCBtaW4gY2h1bmsgc2l6ZSwgYW5kIHBhZ2Ugc2l6ZSBtdXN0IGFsbCBiZSBwb3dlcnMgb2YgMi4KKyAgICAqLworICAgIGlmICgoc2l6ZW9mKHNpemVfdCkgIT0gc2l6ZW9mKGNoYXIqKSkgfHwKKyAgICAgICAgKE1BWF9TSVpFX1QgPCBNSU5fQ0hVTktfU0laRSkgIHx8CisgICAgICAgIChzaXplb2YoaW50KSA8IDQpICB8fAorICAgICAgICAoTUFMTE9DX0FMSUdOTUVOVCA8IChzaXplX3QpOFUpIHx8CisgICAgICAgICgoTUFMTE9DX0FMSUdOTUVOVCAgICAmIChNQUxMT0NfQUxJR05NRU5ULVNJWkVfVF9PTkUpKSAgICAhPSAwKSB8fAorICAgICAgICAoKE1DSFVOS19TSVpFICAgICAgICAgJiAoTUNIVU5LX1NJWkUtU0laRV9UX09ORSkpICAgICAgICAgIT0gMCkgfHwKKyAgICAgICAgKChtcGFyYW1zLmdyYW51bGFyaXR5ICYgKG1wYXJhbXMuZ3JhbnVsYXJpdHktU0laRV9UX09ORSkpICE9IDApIHx8CisgICAgICAgICgobXBhcmFtcy5wYWdlX3NpemUgICAmIChtcGFyYW1zLnBhZ2Vfc2l6ZS1TSVpFX1RfT05FKSkgICAhPSAwKSkKKyAgICAgIEFCT1JUOworICB9CisgIHJldHVybiAwOworfQorCisvKiBzdXBwb3J0IGZvciBtYWxsb3B0ICovCitzdGF0aWMgaW50IGNoYW5nZV9tcGFyYW0oaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHNpemVfdCB2YWwgPSAoc2l6ZV90KXZhbHVlOworICBpbml0X21wYXJhbXMoKTsKKyAgc3dpdGNoKHBhcmFtX251bWJlcikgeworICBjYXNlIE1fVFJJTV9USFJFU0hPTEQ6CisgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IHZhbDsKKyAgICByZXR1cm4gMTsKKyAgY2FzZSBNX0dSQU5VTEFSSVRZOgorICAgIGlmICh2YWwgPj0gbXBhcmFtcy5wYWdlX3NpemUgJiYgKCh2YWwgJiAodmFsLTEpKSA9PSAwKSkgeworICAgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IHZhbDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlCisgICAgICByZXR1cm4gMDsKKyAgY2FzZSBNX01NQVBfVEhSRVNIT0xEOgorICAgIG1wYXJhbXMubW1hcF90aHJlc2hvbGQgPSB2YWw7CisgICAgcmV0dXJuIDE7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworI2lmIERFQlVHCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlYnVnZ2luZyBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGFueSBjaHVuaywgd2hldGhlciBmcmVlLCBpbnVzZSwgbW1hcHBlZCBldGMgICovCitzdGF0aWMgdm9pZCBkb19jaGVja19hbnlfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgdG9wIGNodW5rICovCitzdGF0aWMgdm9pZCBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIG1zZWdtZW50cHRyIHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKilwKTsKKyAgc2l6ZV90ICBzeiA9IGNodW5rc2l6ZShwKTsKKyAgYXNzZXJ0KHNwICE9IDApOworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworICBhc3NlcnQoc3ogPT0gbS0+dG9wc2l6ZSk7CisgIGFzc2VydChzeiA+IDApOworICBhc3NlcnQoc3ogPT0gKChzcC0+YmFzZSArIHNwLT5zaXplKSAtIChjaGFyKilwKSAtIFRPUF9GT09UX1NJWkUpOworICBhc3NlcnQocGludXNlKHApKTsKKyAgYXNzZXJ0KCFuZXh0X3BpbnVzZShwKSk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgKGludXNlKSBtbWFwcGVkIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgc2l6ZV90ICBzeiA9IGNodW5rc2l6ZShwKTsKKyAgc2l6ZV90IGxlbiA9IChzeiArIChwLT5wcmV2X2Zvb3QgJiB+SVNfTU1BUFBFRF9CSVQpICsgTU1BUF9GT09UX1BBRCk7CisgIGFzc2VydChpc19tbWFwcGVkKHApKTsKKyAgYXNzZXJ0KHVzZV9tbWFwKG0pKTsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKKyAgYXNzZXJ0KCFpc19zbWFsbChzeikpOworICBhc3NlcnQoKGxlbiAmIChtcGFyYW1zLnBhZ2Vfc2l6ZS1TSVpFX1RfT05FKSkgPT0gMCk7CisgIGFzc2VydChjaHVua19wbHVzX29mZnNldChwLCBzeiktPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpOworICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3orU0laRV9UX1NJWkUpLT5oZWFkID09IDApOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGludXNlIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBwKTsKKyAgYXNzZXJ0KGNpbnVzZShwKSk7CisgIGFzc2VydChuZXh0X3BpbnVzZShwKSk7CisgIC8qIElmIG5vdCBwaW51c2UgYW5kIG5vdCBtbWFwcGVkLCBwcmV2aW91cyBjaHVuayBoYXMgT0sgb2Zmc2V0ICovCisgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHBpbnVzZShwKSB8fCBuZXh0X2NodW5rKHByZXZfY2h1bmsocCkpID09IHApOworICBpZiAoaXNfbW1hcHBlZChwKSkKKyAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG0sIHApOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGZyZWUgY2h1bmtzICovCitzdGF0aWMgdm9pZCBkb19jaGVja19mcmVlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBzaXplX3Qgc3ogPSBwLT5oZWFkICYgfihQSU5VU0VfQklUfENJTlVTRV9CSVQpOworICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KTsKKyAgZG9fY2hlY2tfYW55X2NodW5rKG0sIHApOworICBhc3NlcnQoIWNpbnVzZShwKSk7CisgIGFzc2VydCghbmV4dF9waW51c2UocCkpOworICBhc3NlcnQgKCFpc19tbWFwcGVkKHApKTsKKyAgaWYgKHAgIT0gbS0+ZHYgJiYgcCAhPSBtLT50b3ApIHsKKyAgICBpZiAoc3ogPj0gTUlOX0NIVU5LX1NJWkUpIHsKKyAgICAgIGFzc2VydCgoc3ogJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKTsKKyAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOworICAgICAgYXNzZXJ0KG5leHQtPnByZXZfZm9vdCA9PSBzeik7CisgICAgICBhc3NlcnQocGludXNlKHApKTsKKyAgICAgIGFzc2VydCAobmV4dCA9PSBtLT50b3AgfHwgY2ludXNlKG5leHQpKTsKKyAgICAgIGFzc2VydChwLT5mZC0+YmsgPT0gcCk7CisgICAgICBhc3NlcnQocC0+YmstPmZkID09IHApOworICAgIH0KKyAgICBlbHNlICAvKiBtYXJrZXJzIGFyZSBhbHdheXMgb2Ygc2l6ZSBTSVpFX1RfU0laRSAqLworICAgICAgYXNzZXJ0KHN6ID09IFNJWkVfVF9TSVpFKTsKKyAgfQorfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIG1hbGxvY2VkIGNodW5rcyBhdCB0aGUgcG9pbnQgdGhleSBhcmUgbWFsbG9jZWQgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgc2l6ZV90IHN6ID0gcC0+aGVhZCAmIH4oUElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBwKTsKKyAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7CisgICAgYXNzZXJ0KHN6ID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoc3ogPj0gcyk7CisgICAgLyogdW5sZXNzIG1tYXBwZWQsIHNpemUgaXMgbGVzcyB0aGFuIE1JTl9DSFVOS19TSVpFIG1vcmUgdGhhbiByZXF1ZXN0ICovCisgICAgYXNzZXJ0KGlzX21tYXBwZWQocCkgfHwgc3ogPCAocyArIE1JTl9DSFVOS19TSVpFKSk7CisgIH0KK30KKworLyogQ2hlY2sgYSB0cmVlIGFuZCBpdHMgc3VidHJlZXMuICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpIHsKKyAgdGNodW5rcHRyIGhlYWQgPSAwOworICB0Y2h1bmtwdHIgdSA9IHQ7CisgIGJpbmRleF90IHRpbmRleCA9IHQtPmluZGV4OworICBzaXplX3QgdHNpemUgPSBjaHVua3NpemUodCk7CisgIGJpbmRleF90IGlkeDsKKyAgY29tcHV0ZV90cmVlX2luZGV4KHRzaXplLCBpZHgpOworICBhc3NlcnQodGluZGV4ID09IGlkeCk7CisgIGFzc2VydCh0c2l6ZSA+PSBNSU5fTEFSR0VfU0laRSk7CisgIGFzc2VydCh0c2l6ZSA+PSBtaW5zaXplX2Zvcl90cmVlX2luZGV4KGlkeCkpOworICBhc3NlcnQoKGlkeCA9PSBOVFJFRUJJTlMtMSkgfHwgKHRzaXplIDwgbWluc2l6ZV9mb3JfdHJlZV9pbmRleCgoaWR4KzEpKSkpOworCisgIGRvIHsgLyogdHJhdmVyc2UgdGhyb3VnaCBjaGFpbiBvZiBzYW1lLXNpemVkIG5vZGVzICovCisgICAgZG9fY2hlY2tfYW55X2NodW5rKG0sICgobWNodW5rcHRyKXUpKTsKKyAgICBhc3NlcnQodS0+aW5kZXggPT0gdGluZGV4KTsKKyAgICBhc3NlcnQoY2h1bmtzaXplKHUpID09IHRzaXplKTsKKyAgICBhc3NlcnQoIWNpbnVzZSh1KSk7CisgICAgYXNzZXJ0KCFuZXh0X3BpbnVzZSh1KSk7CisgICAgYXNzZXJ0KHUtPmZkLT5iayA9PSB1KTsKKyAgICBhc3NlcnQodS0+YmstPmZkID09IHUpOworICAgIGlmICh1LT5wYXJlbnQgPT0gMCkgeworICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdID09IDApOworICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdID09IDApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGFzc2VydChoZWFkID09IDApOyAvKiBvbmx5IG9uZSBub2RlIG9uIGNoYWluIGhhcyBwYXJlbnQgKi8KKyAgICAgIGhlYWQgPSB1OworICAgICAgYXNzZXJ0KHUtPnBhcmVudCAhPSB1KTsKKyAgICAgIGFzc2VydCAodS0+cGFyZW50LT5jaGlsZFswXSA9PSB1IHx8CisgICAgICAgICAgICAgIHUtPnBhcmVudC0+Y2hpbGRbMV0gPT0gdSB8fAorICAgICAgICAgICAgICAqKCh0YmlucHRyKikodS0+cGFyZW50KSkgPT0gdSk7CisgICAgICBpZiAodS0+Y2hpbGRbMF0gIT0gMCkgeworICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMF0tPnBhcmVudCA9PSB1KTsKKyAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdICE9IHUpOworICAgICAgICBkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzBdKTsKKyAgICAgIH0KKyAgICAgIGlmICh1LT5jaGlsZFsxXSAhPSAwKSB7CisgICAgICAgIGFzc2VydCh1LT5jaGlsZFsxXS0+cGFyZW50ID09IHUpOworICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0gIT0gdSk7CisgICAgICAgIGRvX2NoZWNrX3RyZWUobSwgdS0+Y2hpbGRbMV0pOworICAgICAgfQorICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDAgJiYgdS0+Y2hpbGRbMV0gIT0gMCkgeworICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHUtPmNoaWxkWzBdKSA8IGNodW5rc2l6ZSh1LT5jaGlsZFsxXSkpOworICAgICAgfQorICAgIH0KKyAgICB1ID0gdS0+ZmQ7CisgIH0gd2hpbGUgKHUgIT0gdCk7CisgIGFzc2VydChoZWFkICE9IDApOworfQorCisvKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSB0cmVlYmluLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKKyAgdGJpbnB0ciogdGIgPSB0cmVlYmluX2F0KG0sIGkpOworICB0Y2h1bmtwdHIgdCA9ICp0YjsKKyAgaW50IGVtcHR5ID0gKG0tPnRyZWVtYXAgJiAoMVUgPDwgaSkpID09IDA7CisgIGlmICh0ID09IDApCisgICAgYXNzZXJ0KGVtcHR5KTsKKyAgaWYgKCFlbXB0eSkKKyAgICBkb19jaGVja190cmVlKG0sIHQpOworfQorCisvKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSBzbWFsbGJpbi4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSkgeworICBzYmlucHRyIGIgPSBzbWFsbGJpbl9hdChtLCBpKTsKKyAgbWNodW5rcHRyIHAgPSBiLT5iazsKKyAgdW5zaWduZWQgaW50IGVtcHR5ID0gKG0tPnNtYWxsbWFwICYgKDFVIDw8IGkpKSA9PSAwOworICBpZiAocCA9PSBiKQorICAgIGFzc2VydChlbXB0eSk7CisgIGlmICghZW1wdHkpIHsKKyAgICBmb3IgKDsgcCAhPSBiOyBwID0gcC0+YmspIHsKKyAgICAgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgbWNodW5rcHRyIHE7CisgICAgICAvKiBlYWNoIGNodW5rIGNsYWltcyB0byBiZSBmcmVlICovCisgICAgICBkb19jaGVja19mcmVlX2NodW5rKG0sIHApOworICAgICAgLyogY2h1bmsgYmVsb25ncyBpbiBiaW4gKi8KKyAgICAgIGFzc2VydChzbWFsbF9pbmRleChzaXplKSA9PSBpKTsKKyAgICAgIGFzc2VydChwLT5iayA9PSBiIHx8IGNodW5rc2l6ZShwLT5iaykgPT0gY2h1bmtzaXplKHApKTsKKyAgICAgIC8qIGNodW5rIGlzIGZvbGxvd2VkIGJ5IGFuIGludXNlIGNodW5rICovCisgICAgICBxID0gbmV4dF9jaHVuayhwKTsKKyAgICAgIGlmIChxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKQorICAgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBxKTsKKyAgICB9CisgIH0KK30KKworLyogRmluZCB4IGluIGEgYmluLiBVc2VkIGluIG90aGVyIGNoZWNrIGZ1bmN0aW9ucy4gKi8KK3N0YXRpYyBpbnQgYmluX2ZpbmQobXN0YXRlIG0sIG1jaHVua3B0ciB4KSB7CisgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHgpOworICBpZiAoaXNfc21hbGwoc2l6ZSkpIHsKKyAgICBiaW5kZXhfdCBzaWR4ID0gc21hbGxfaW5kZXgoc2l6ZSk7CisgICAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgc2lkeCk7CisgICAgaWYgKHNtYWxsbWFwX2lzX21hcmtlZChtLCBzaWR4KSkgeworICAgICAgbWNodW5rcHRyIHAgPSBiOworICAgICAgZG8geworICAgICAgICBpZiAocCA9PSB4KQorICAgICAgICAgIHJldHVybiAxOworICAgICAgfSB3aGlsZSAoKHAgPSBwLT5mZCkgIT0gYik7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGJpbmRleF90IHRpZHg7CisgICAgY29tcHV0ZV90cmVlX2luZGV4KHNpemUsIHRpZHgpOworICAgIGlmICh0cmVlbWFwX2lzX21hcmtlZChtLCB0aWR4KSkgeworICAgICAgdGNodW5rcHRyIHQgPSAqdHJlZWJpbl9hdChtLCB0aWR4KTsKKyAgICAgIHNpemVfdCBzaXplYml0cyA9IHNpemUgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KHRpZHgpOworICAgICAgd2hpbGUgKHQgIT0gMCAmJiBjaHVua3NpemUodCkgIT0gc2l6ZSkgeworICAgICAgICB0ID0gdC0+Y2hpbGRbKHNpemViaXRzID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXTsKKyAgICAgICAgc2l6ZWJpdHMgPDw9IDE7CisgICAgICB9CisgICAgICBpZiAodCAhPSAwKSB7CisgICAgICAgIHRjaHVua3B0ciB1ID0gdDsKKyAgICAgICAgZG8geworICAgICAgICAgIGlmICh1ID09ICh0Y2h1bmtwdHIpeCkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IHdoaWxlICgodSA9IHUtPmZkKSAhPSB0KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFRyYXZlcnNlIGVhY2ggY2h1bmsgYW5kIGNoZWNrIGl0OyByZXR1cm4gdG90YWwgKi8KK3N0YXRpYyBzaXplX3QgdHJhdmVyc2VfYW5kX2NoZWNrKG1zdGF0ZSBtKSB7CisgIHNpemVfdCBzdW0gPSAwOworICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKKyAgICBzdW0gKz0gbS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkU7CisgICAgd2hpbGUgKHMgIT0gMCkgeworICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKyAgICAgIG1jaHVua3B0ciBsYXN0cSA9IDA7CisgICAgICBhc3NlcnQocGludXNlKHEpKTsKKyAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCisgICAgICAgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworICAgICAgICBzdW0gKz0gY2h1bmtzaXplKHEpOworICAgICAgICBpZiAoY2ludXNlKHEpKSB7CisgICAgICAgICAgYXNzZXJ0KCFiaW5fZmluZChtLCBxKSk7CisgICAgICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgYXNzZXJ0KHEgPT0gbS0+ZHYgfHwgYmluX2ZpbmQobSwgcSkpOworICAgICAgICAgIGFzc2VydChsYXN0cSA9PSAwIHx8IGNpbnVzZShsYXN0cSkpOyAvKiBOb3QgMiBjb25zZWN1dGl2ZSBmcmVlICovCisgICAgICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBxKTsKKyAgICAgICAgfQorICAgICAgICBsYXN0cSA9IHE7CisgICAgICAgIHEgPSBuZXh0X2NodW5rKHEpOworICAgICAgfQorICAgICAgcyA9IHMtPm5leHQ7CisgICAgfQorICB9CisgIHJldHVybiBzdW07Cit9CisKKy8qIENoZWNrIGFsbCBwcm9wZXJ0aWVzIG9mIG1hbGxvY19zdGF0ZS4gKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSkgeworICBiaW5kZXhfdCBpOworICBzaXplX3QgdG90YWw7CisgIC8qIGNoZWNrIGJpbnMgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkKKyAgICBkb19jaGVja19zbWFsbGJpbihtLCBpKTsKKyAgZm9yIChpID0gMDsgaSA8IE5UUkVFQklOUzsgKytpKQorICAgIGRvX2NoZWNrX3RyZWViaW4obSwgaSk7CisKKyAgaWYgKG0tPmR2c2l6ZSAhPSAwKSB7IC8qIGNoZWNrIGR2IGNodW5rICovCisgICAgZG9fY2hlY2tfYW55X2NodW5rKG0sIG0tPmR2KTsKKyAgICBhc3NlcnQobS0+ZHZzaXplID09IGNodW5rc2l6ZShtLT5kdikpOworICAgIGFzc2VydChtLT5kdnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOworICAgIGFzc2VydChiaW5fZmluZChtLCBtLT5kdikgPT0gMCk7CisgIH0KKworICBpZiAobS0+dG9wICE9IDApIHsgICAvKiBjaGVjayB0b3AgY2h1bmsgKi8KKyAgICBkb19jaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICBhc3NlcnQobS0+dG9wc2l6ZSA9PSBjaHVua3NpemUobS0+dG9wKSk7CisgICAgYXNzZXJ0KG0tPnRvcHNpemUgPiAwKTsKKyAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+dG9wKSA9PSAwKTsKKyAgfQorCisgIHRvdGFsID0gdHJhdmVyc2VfYW5kX2NoZWNrKG0pOworICBhc3NlcnQodG90YWwgPD0gbS0+Zm9vdHByaW50KTsKKyAgYXNzZXJ0KG0tPmZvb3RwcmludCA8PSBtLT5tYXhfZm9vdHByaW50KTsKK30KKyNlbmRpZiAvKiBERUJVRyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdGF0aXN0aWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU5PX01BTExJTkZPCitzdGF0aWMgc3RydWN0IG1hbGxpbmZvIGludGVybmFsX21hbGxpbmZvKG1zdGF0ZSBtKSB7CisgIHN0cnVjdCBtYWxsaW5mbyBubSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIGNoZWNrX21hbGxvY19zdGF0ZShtKTsKKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICAgIHNpemVfdCBuZnJlZSA9IFNJWkVfVF9PTkU7IC8qIHRvcCBhbHdheXMgZnJlZSAqLworICAgICAgc2l6ZV90IG1mcmVlID0gbS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkU7CisgICAgICBzaXplX3Qgc3VtID0gbWZyZWU7CisgICAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKKyAgICAgIHdoaWxlIChzICE9IDApIHsKKyAgICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKyAgICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKyAgICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgICAgICBzaXplX3Qgc3ogPSBjaHVua3NpemUocSk7CisgICAgICAgICAgc3VtICs9IHN6OworICAgICAgICAgIGlmICghY2ludXNlKHEpKSB7CisgICAgICAgICAgICBtZnJlZSArPSBzejsKKyAgICAgICAgICAgICsrbmZyZWU7CisgICAgICAgICAgfQorICAgICAgICAgIHEgPSBuZXh0X2NodW5rKHEpOworICAgICAgICB9CisgICAgICAgIHMgPSBzLT5uZXh0OworICAgICAgfQorCisgICAgICBubS5hcmVuYSAgICA9IHN1bTsKKyAgICAgIG5tLm9yZGJsa3MgID0gbmZyZWU7CisgICAgICBubS5oYmxraGQgICA9IG0tPmZvb3RwcmludCAtIHN1bTsKKyAgICAgIG5tLnVzbWJsa3MgID0gbS0+bWF4X2Zvb3RwcmludDsKKyAgICAgIG5tLnVvcmRibGtzID0gbS0+Zm9vdHByaW50IC0gbWZyZWU7CisgICAgICBubS5mb3JkYmxrcyA9IG1mcmVlOworICAgICAgbm0ua2VlcGNvc3QgPSBtLT50b3BzaXplOworICAgIH0KKworICAgIFBPU1RBQ1RJT04obSk7CisgIH0KKyAgcmV0dXJuIG5tOworfQorI2VuZGlmIC8qICFOT19NQUxMSU5GTyAqLworCitzdGF0aWMgdm9pZCBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXN0YXRlIG0pIHsKKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBzaXplX3QgbWF4ZnAgPSAwOworICAgIHNpemVfdCBmcCA9IDA7CisgICAgc2l6ZV90IHVzZWQgPSAwOworICAgIGNoZWNrX21hbGxvY19zdGF0ZShtKTsKKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgbWF4ZnAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgZnAgPSBtLT5mb290cHJpbnQ7CisgICAgICB1c2VkID0gZnAgLSAobS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkUpOworCisgICAgICB3aGlsZSAocyAhPSAwKSB7CisgICAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCisgICAgICAgICAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisgICAgICAgICAgaWYgKCFjaW51c2UocSkpCisgICAgICAgICAgICB1c2VkIC09IGNodW5rc2l6ZShxKTsKKyAgICAgICAgICBxID0gbmV4dF9jaHVuayhxKTsKKyAgICAgICAgfQorICAgICAgICBzID0gcy0+bmV4dDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIm1heCBzeXN0ZW0gYnl0ZXMgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKG1heGZwKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJzeXN0ZW0gYnl0ZXMgICAgID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKShmcCkpOworICAgIGZwcmludGYoc3RkZXJyLCAiaW4gdXNlIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykodXNlZCkpOworCisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIHNtYWxsYmlucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBWYXJpb3VzIGZvcm1zIG9mIGxpbmtpbmcgYW5kIHVubGlua2luZyBhcmUgZGVmaW5lZCBhcyBtYWNyb3MuICBFdmVuCisgIHRoZSBvbmVzIGZvciB0cmVlcywgd2hpY2ggYXJlIHZlcnkgbG9uZyBidXQgaGF2ZSB2ZXJ5IHNob3J0IHR5cGljYWwKKyAgcGF0aHMuICBUaGlzIGlzIHVnbHkgYnV0IHJlZHVjZXMgcmVsaWFuY2Ugb24gaW5saW5pbmcgc3VwcG9ydCBvZgorICBjb21waWxlcnMuCisqLworCisvKiBMaW5rIGEgZnJlZSBjaHVuayBpbnRvIGEgc21hbGxiaW4gICovCisjZGVmaW5lIGluc2VydF9zbWFsbF9jaHVuayhNLCBQLCBTKSB7XAorICBiaW5kZXhfdCBJICA9IHNtYWxsX2luZGV4KFMpO1wKKyAgbWNodW5rcHRyIEIgPSBzbWFsbGJpbl9hdChNLCBJKTtcCisgIG1jaHVua3B0ciBGID0gQjtcCisgIGFzc2VydChTID49IE1JTl9DSFVOS19TSVpFKTtcCisgIGlmICghc21hbGxtYXBfaXNfbWFya2VkKE0sIEkpKVwKKyAgICBtYXJrX3NtYWxsbWFwKE0sIEkpO1wKKyAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEItPmZkKSkpXAorICAgIEYgPSBCLT5mZDtcCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCisgIEItPmZkID0gUDtcCisgIEYtPmJrID0gUDtcCisgIFAtPmZkID0gRjtcCisgIFAtPmJrID0gQjtcCit9CisKKy8qIFVubGluayBhIGNodW5rIGZyb20gYSBzbWFsbGJpbiAgKi8KKyNkZWZpbmUgdW5saW5rX3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcCisgIG1jaHVua3B0ciBGID0gUC0+ZmQ7XAorICBtY2h1bmtwdHIgQiA9IFAtPmJrO1wKKyAgYmluZGV4X3QgSSA9IHNtYWxsX2luZGV4KFMpO1wKKyAgYXNzZXJ0KFAgIT0gQik7XAorICBhc3NlcnQoUCAhPSBGKTtcCisgIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XAorICBpZiAoRiA9PSBCKVwKKyAgICBjbGVhcl9zbWFsbG1hcChNLCBJKTtcCisgIGVsc2UgaWYgKFJUQ0hFQ0soKEYgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCBva19hZGRyZXNzKE0sIEYpKSAmJlwKKyAgICAgICAgICAgICAgICAgICAoQiA9PSBzbWFsbGJpbl9hdChNLEkpIHx8IG9rX2FkZHJlc3MoTSwgQikpKSkge1wKKyAgICBGLT5iayA9IEI7XAorICAgIEItPmZkID0gRjtcCisgIH1cCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCit9CisKKy8qIFVubGluayB0aGUgZmlyc3QgY2h1bmsgZnJvbSBhIHNtYWxsYmluICovCisjZGVmaW5lIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhNLCBCLCBQLCBJKSB7XAorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKKyAgYXNzZXJ0KFAgIT0gQik7XAorICBhc3NlcnQoUCAhPSBGKTtcCisgIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XAorICBpZiAoQiA9PSBGKVwKKyAgICBjbGVhcl9zbWFsbG1hcChNLCBJKTtcCisgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgQi0+ZmQgPSBGO1wKKyAgICBGLT5iayA9IEI7XAorICB9XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorfQorCisvKiBSZXBsYWNlIGR2IG5vZGUsIGJpbm5pbmcgdGhlIG9sZCBvbmUgKi8KKy8qIFVzZWQgb25seSB3aGVuIGR2c2l6ZSBrbm93biB0byBiZSBzbWFsbCAqLworI2RlZmluZSByZXBsYWNlX2R2KE0sIFAsIFMpIHtcCisgIHNpemVfdCBEVlMgPSBNLT5kdnNpemU7XAorICBpZiAoRFZTICE9IDApIHtcCisgICAgbWNodW5rcHRyIERWID0gTS0+ZHY7XAorICAgIGFzc2VydChpc19zbWFsbChEVlMpKTtcCisgICAgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIERWLCBEVlMpO1wKKyAgfVwKKyAgTS0+ZHZzaXplID0gUztcCisgIE0tPmR2ID0gUDtcCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiB0cmVlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluc2VydCBjaHVuayBpbnRvIHRyZWUgKi8KKyNkZWZpbmUgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFgsIFMpIHtcCisgIHRiaW5wdHIqIEg7XAorICBiaW5kZXhfdCBJO1wKKyAgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpO1wKKyAgSCA9IHRyZWViaW5fYXQoTSwgSSk7XAorICBYLT5pbmRleCA9IEk7XAorICBYLT5jaGlsZFswXSA9IFgtPmNoaWxkWzFdID0gMDtcCisgIGlmICghdHJlZW1hcF9pc19tYXJrZWQoTSwgSSkpIHtcCisgICAgbWFya190cmVlbWFwKE0sIEkpO1wKKyAgICAqSCA9IFg7XAorICAgIFgtPnBhcmVudCA9ICh0Y2h1bmtwdHIpSDtcCisgICAgWC0+ZmQgPSBYLT5iayA9IFg7XAorICB9XAorICBlbHNlIHtcCisgICAgdGNodW5rcHRyIFQgPSAqSDtcCisgICAgc2l6ZV90IEsgPSBTIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChJKTtcCisgICAgZm9yICg7Oykge1wKKyAgICAgIGlmIChjaHVua3NpemUoVCkgIT0gUykge1wKKyAgICAgICAgdGNodW5rcHRyKiBDID0gJihULT5jaGlsZFsoSyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV0pO1wKKyAgICAgICAgSyA8PD0gMTtcCisgICAgICAgIGlmICgqQyAhPSAwKVwKKyAgICAgICAgICBUID0gKkM7XAorICAgICAgICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQykpKSB7XAorICAgICAgICAgICpDID0gWDtcCisgICAgICAgICAgWC0+cGFyZW50ID0gVDtcCisgICAgICAgICAgWC0+ZmQgPSBYLT5iayA9IFg7XAorICAgICAgICAgIGJyZWFrO1wKKyAgICAgICAgfVwKKyAgICAgICAgZWxzZSB7XAorICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICAgICAgICBicmVhaztcCisgICAgICAgIH1cCisgICAgICB9XAorICAgICAgZWxzZSB7XAorICAgICAgICB0Y2h1bmtwdHIgRiA9IFQtPmZkO1wKKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBUKSAmJiBva19hZGRyZXNzKE0sIEYpKSkge1wKKyAgICAgICAgICBULT5mZCA9IEYtPmJrID0gWDtcCisgICAgICAgICAgWC0+ZmQgPSBGO1wKKyAgICAgICAgICBYLT5iayA9IFQ7XAorICAgICAgICAgIFgtPnBhcmVudCA9IDA7XAorICAgICAgICAgIGJyZWFrO1wKKyAgICAgICAgfVwKKyAgICAgICAgZWxzZSB7XAorICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICAgICAgICBicmVhaztcCisgICAgICAgIH1cCisgICAgICB9XAorICAgIH1cCisgIH1cCit9CisKKy8qCisgIFVubGluayBzdGVwczoKKworICAxLiBJZiB4IGlzIGEgY2hhaW5lZCBub2RlLCB1bmxpbmsgaXQgZnJvbSBpdHMgc2FtZS1zaXplZCBmZC9iayBsaW5rcworICAgICBhbmQgY2hvb3NlIGl0cyBiayBub2RlIGFzIGl0cyByZXBsYWNlbWVudC4KKyAgMi4gSWYgeCB3YXMgdGhlIGxhc3Qgbm9kZSBvZiBpdHMgc2l6ZSwgYnV0IG5vdCBhIGxlYWYgbm9kZSwgaXQgbXVzdAorICAgICBiZSByZXBsYWNlZCB3aXRoIGEgbGVhZiBub2RlIChub3QgbWVyZWx5IG9uZSB3aXRoIGFuIG9wZW4gbGVmdCBvcgorICAgICByaWdodCksIHRvIG1ha2Ugc3VyZSB0aGF0IGxlZnRzIGFuZCByaWdodHMgb2YgZGVzY2VuZGVudHMKKyAgICAgY29ycmVzcG9uZCBwcm9wZXJseSB0byBiaXQgbWFza3MuICBXZSB1c2UgdGhlIHJpZ2h0bW9zdCBkZXNjZW5kZW50CisgICAgIG9mIHguICBXZSBjb3VsZCB1c2UgYW55IG90aGVyIGxlYWYsIGJ1dCB0aGlzIGlzIGVhc3kgdG8gbG9jYXRlIGFuZAorICAgICB0ZW5kcyB0byBjb3VudGVyYWN0IHJlbW92YWwgb2YgbGVmdG1vc3RzIGVsc2V3aGVyZSwgYW5kIHNvIGtlZXBzCisgICAgIHBhdGhzIHNob3J0ZXIgdGhhbiBtaW5pbWFsbHkgZ3VhcmFudGVlZC4gIFRoaXMgZG9lc24ndCBsb29wIG11Y2gKKyAgICAgYmVjYXVzZSBvbiBhdmVyYWdlIGEgbm9kZSBpbiBhIHRyZWUgaXMgbmVhciB0aGUgYm90dG9tLgorICAzLiBJZiB4IGlzIHRoZSBiYXNlIG9mIGEgY2hhaW4gKGkuZS4sIGhhcyBwYXJlbnQgbGlua3MpIHJlbGluaworICAgICB4J3MgcGFyZW50IGFuZCBjaGlsZHJlbiB0byB4J3MgcmVwbGFjZW1lbnQgKG9yIG51bGwgaWYgbm9uZSkuCisqLworCisjZGVmaW5lIHVubGlua19sYXJnZV9jaHVuayhNLCBYKSB7XAorICB0Y2h1bmtwdHIgWFAgPSBYLT5wYXJlbnQ7XAorICB0Y2h1bmtwdHIgUjtcCisgIGlmIChYLT5iayAhPSBYKSB7XAorICAgIHRjaHVua3B0ciBGID0gWC0+ZmQ7XAorICAgIFIgPSBYLT5iaztcCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgICBGLT5iayA9IFI7XAorICAgICAgUi0+ZmQgPSBGO1wKKyAgICB9XAorICAgIGVsc2Uge1wKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICB9XAorICB9XAorICBlbHNlIHtcCisgICAgdGNodW5rcHRyKiBSUDtcCisgICAgaWYgKCgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzFdKSkpICE9IDApIHx8XAorICAgICAgICAoKFIgPSAqKFJQID0gJihYLT5jaGlsZFswXSkpKSAhPSAwKSkge1wKKyAgICAgIHRjaHVua3B0ciogQ1A7XAorICAgICAgd2hpbGUgKCgqKENQID0gJihSLT5jaGlsZFsxXSkpICE9IDApIHx8XAorICAgICAgICAgICAgICgqKENQID0gJihSLT5jaGlsZFswXSkpICE9IDApKSB7XAorICAgICAgICBSID0gKihSUCA9IENQKTtcCisgICAgICB9XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSUCkpKVwKKyAgICAgICAgKlJQID0gMDtcCisgICAgICBlbHNlIHtcCisgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICAgIH1cCisgICAgfVwKKyAgfVwKKyAgaWYgKFhQICE9IDApIHtcCisgICAgdGJpbnB0ciogSCA9IHRyZWViaW5fYXQoTSwgWC0+aW5kZXgpO1wKKyAgICBpZiAoWCA9PSAqSCkge1wKKyAgICAgIGlmICgoKkggPSBSKSA9PSAwKSBcCisgICAgICAgIGNsZWFyX3RyZWVtYXAoTSwgWC0+aW5kZXgpO1wKKyAgICB9XAorICAgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBYUCkpKSB7XAorICAgICAgaWYgKFhQLT5jaGlsZFswXSA9PSBYKSBcCisgICAgICAgIFhQLT5jaGlsZFswXSA9IFI7XAorICAgICAgZWxzZSBcCisgICAgICAgIFhQLT5jaGlsZFsxXSA9IFI7XAorICAgIH1cCisgICAgZWxzZVwKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICBpZiAoUiAhPSAwKSB7XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSKSkpIHtcCisgICAgICAgIHRjaHVua3B0ciBDMCwgQzE7XAorICAgICAgICBSLT5wYXJlbnQgPSBYUDtcCisgICAgICAgIGlmICgoQzAgPSBYLT5jaGlsZFswXSkgIT0gMCkge1wKKyAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMwKSkpIHtcCisgICAgICAgICAgICBSLT5jaGlsZFswXSA9IEMwO1wKKyAgICAgICAgICAgIEMwLT5wYXJlbnQgPSBSO1wKKyAgICAgICAgICB9XAorICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgIH1cCisgICAgICAgIGlmICgoQzEgPSBYLT5jaGlsZFsxXSkgIT0gMCkge1wKKyAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMxKSkpIHtcCisgICAgICAgICAgICBSLT5jaGlsZFsxXSA9IEMxO1wKKyAgICAgICAgICAgIEMxLT5wYXJlbnQgPSBSO1wKKyAgICAgICAgICB9XAorICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgIH1cCisgICAgICB9XAorICAgICAgZWxzZVwKKyAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIH1cCisgIH1cCit9CisKKy8qIFJlbGF5cyB0byBsYXJnZSB2cyBzbWFsbCBiaW4gb3BlcmF0aW9ucyAqLworCisjZGVmaW5lIGluc2VydF9jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFRQLCBTKTsgfQorCisjZGVmaW5lIHVubGlua19jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgdW5saW5rX2xhcmdlX2NodW5rKE0sIFRQKTsgfQorCisKKy8qIFJlbGF5cyB0byBpbnRlcm5hbCBjYWxscyB0byBtYWxsb2MvZnJlZSBmcm9tIHJlYWxsb2MsIG1lbWFsaWduIGV0YyAqLworCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBPTkxZX01TUEFDRVMgKi8KKyNpZiBNU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKVwKKyAgIChtID09IGdtKT8gZGxtYWxsb2MoYikgOiBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKVwKKyAgIGlmIChtID09IGdtKSBkbGZyZWUobWVtKTsgZWxzZSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBNU1BBQ0VTICovCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBkbG1hbGxvYyhiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkgZGxmcmVlKG1lbSkKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisjZW5kaWYgLyogT05MWV9NU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEaXJlY3QtbW1hcHBpbmcgY2h1bmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIERpcmVjdGx5IG1tYXBwZWQgY2h1bmtzIGFyZSBzZXQgdXAgd2l0aCBhbiBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mCisgIHRoZSBtbWFwcGVkIHJlZ2lvbiBzdG9yZWQgaW4gdGhlIHByZXZfZm9vdCBmaWVsZCBvZiB0aGUgY2h1bmsuIFRoaXMKKyAgYWxsb3dzIHJlY29uc3RydWN0aW9uIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudCB0byBNVU5NQVAgd2hlbiBmcmVlZCwKKyAgYW5kIGFsc28gYWxsb3dzIGFkanVzdG1lbnQgb2YgdGhlIHJldHVybmVkIGNodW5rIHRvIG1lZXQgYWxpZ25tZW50CisgIHJlcXVpcmVtZW50cyAoZXNwZWNpYWxseSBpbiBtZW1hbGlnbikuICBUaGVyZSBpcyBhbHNvIGVub3VnaCBzcGFjZQorICBhbGxvY2F0ZWQgdG8gaG9sZCBhIGZha2UgbmV4dCBjaHVuayBvZiBzaXplIFNJWkVfVF9TSVpFIHRvIG1haW50YWluCisgIHRoZSBQSU5VU0UgYml0IHNvIGZyZWVzIGNhbiBiZSBjaGVja2VkLgorKi8KKworLyogTWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyB2b2lkKiBtbWFwX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG1tc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICBpZiAobW1zaXplID4gbmIpIHsgICAgIC8qIENoZWNrIGZvciB3cmFwIGFyb3VuZCAwICovCisgICAgY2hhciogbW0gPSAoY2hhciopKERJUkVDVF9NTUFQKG1tc2l6ZSkpOworICAgIGlmIChtbSAhPSBDTUZBSUwpIHsKKyAgICAgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKG1tKSk7CisgICAgICBzaXplX3QgcHNpemUgPSBtbXNpemUgLSBvZmZzZXQgLSBNTUFQX0ZPT1RfUEFEOworICAgICAgbWNodW5rcHRyIHAgPSAobWNodW5rcHRyKShtbSArIG9mZnNldCk7CisgICAgICBwLT5wcmV2X2Zvb3QgPSBvZmZzZXQgfCBJU19NTUFQUEVEX0JJVDsKKyAgICAgIChwKS0+aGVhZCA9IChwc2l6ZXxDSU5VU0VfQklUKTsKKyAgICAgIG1hcmtfaW51c2VfZm9vdChtLCBwLCBwc2l6ZSk7CisgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSktPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplK1NJWkVfVF9TSVpFKS0+aGVhZCA9IDA7CisKKyAgICAgIGlmIChtbSA8IG0tPmxlYXN0X2FkZHIpCisgICAgICAgIG0tPmxlYXN0X2FkZHIgPSBtbTsKKyAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IG1tc2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQorICAgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworICAgICAgYXNzZXJ0KGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSk7CisgICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIHApOworICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFJlYWxsb2MgdXNpbmcgbW1hcCAqLworc3RhdGljIG1jaHVua3B0ciBtbWFwX3Jlc2l6ZShtc3RhdGUgbSwgbWNodW5rcHRyIG9sZHAsIHNpemVfdCBuYikgeworICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKKyAgaWYgKGlzX3NtYWxsKG5iKSkgLyogQ2FuJ3Qgc2hyaW5rIG1tYXAgcmVnaW9ucyBiZWxvdyBzbWFsbCBzaXplICovCisgICAgcmV0dXJuIDA7CisgIC8qIEtlZXAgb2xkIGNodW5rIGlmIGJpZyBlbm91Z2ggYnV0IG5vdCB0b28gYmlnICovCisgIGlmIChvbGRzaXplID49IG5iICsgU0laRV9UX1NJWkUgJiYKKyAgICAgIChvbGRzaXplIC0gbmIpIDw9IChtcGFyYW1zLmdyYW51bGFyaXR5IDw8IDEpKQorICAgIHJldHVybiBvbGRwOworICBlbHNlIHsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gb2xkcC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUOworICAgIHNpemVfdCBvbGRtbXNpemUgPSBvbGRzaXplICsgb2Zmc2V0ICsgTU1BUF9GT09UX1BBRDsKKyAgICBzaXplX3QgbmV3bW1zaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hVTktfQUxJR05fTUFTSyk7CisgICAgY2hhciogY3AgPSAoY2hhciopQ0FMTF9NUkVNQVAoKGNoYXIqKW9sZHAgLSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkbW1zaXplLCBuZXdtbXNpemUsIDEpOworICAgIGlmIChjcCAhPSBDTUZBSUwpIHsKKyAgICAgIG1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cikoY3AgKyBvZmZzZXQpOworICAgICAgc2l6ZV90IHBzaXplID0gbmV3bW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsKKyAgICAgIG5ld3AtPmhlYWQgPSAocHNpemV8Q0lOVVNFX0JJVCk7CisgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgbmV3cCwgcHNpemUpOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgICBjaHVua19wbHVzX29mZnNldChuZXdwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAwOworCisgICAgICBpZiAoY3AgPCBtLT5sZWFzdF9hZGRyKQorICAgICAgICBtLT5sZWFzdF9hZGRyID0gY3A7CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBuZXdtbXNpemUgLSBvbGRtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKyAgICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKyAgICAgIGNoZWNrX21tYXBwZWRfY2h1bmsobSwgbmV3cCk7CisgICAgICByZXR1cm4gbmV3cDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1zcGFjZSBtYW5hZ2VtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluaXRpYWxpemUgdG9wIGNodW5rIGFuZCBpdHMgc2l6ZSAqLworc3RhdGljIHZvaWQgaW5pdF90b3AobXN0YXRlIG0sIG1jaHVua3B0ciBwLCBzaXplX3QgcHNpemUpIHsKKyAgLyogRW5zdXJlIGFsaWdubWVudCAqLworICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShwKSk7CisgIHAgPSAobWNodW5rcHRyKSgoY2hhciopcCArIG9mZnNldCk7CisgIHBzaXplIC09IG9mZnNldDsKKworICBtLT50b3AgPSBwOworICBtLT50b3BzaXplID0gcHNpemU7CisgIHAtPmhlYWQgPSBwc2l6ZSB8IFBJTlVTRV9CSVQ7CisgIC8qIHNldCBzaXplIG9mIGZha2UgdHJhaWxpbmcgY2h1bmsgaG9sZGluZyBvdmVyaGVhZCBzcGFjZSBvbmx5IG9uY2UgKi8KKyAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gVE9QX0ZPT1RfU0laRTsKKyAgbS0+dHJpbV9jaGVjayA9IG1wYXJhbXMudHJpbV90aHJlc2hvbGQ7IC8qIHJlc2V0IG9uIGVhY2ggdXBkYXRlICovCit9CisKKy8qIEluaXRpYWxpemUgYmlucyBmb3IgYSBuZXcgbXN0YXRlIHRoYXQgaXMgb3RoZXJ3aXNlIHplcm9lZCBvdXQgKi8KK3N0YXRpYyB2b2lkIGluaXRfYmlucyhtc3RhdGUgbSkgeworICAvKiBFc3RhYmxpc2ggY2lyY3VsYXIgbGlua3MgZm9yIHNtYWxsYmlucyAqLworICBiaW5kZXhfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgTlNNQUxMQklOUzsgKytpKSB7CisgICAgc2JpbnB0ciBiaW4gPSBzbWFsbGJpbl9hdChtLGkpOworICAgIGJpbi0+ZmQgPSBiaW4tPmJrID0gYmluOworICB9Cit9CisKKyNpZiBQUk9DRUVEX09OX0VSUk9SCisKKy8qIGRlZmF1bHQgY29ycnVwdGlvbiBhY3Rpb24gKi8KK3N0YXRpYyB2b2lkIHJlc2V0X29uX2Vycm9yKG1zdGF0ZSBtKSB7CisgIGludCBpOworICArK21hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50OworICAvKiBSZWluaXRpYWxpemUgZmllbGRzIHRvIGZvcmdldCBhYm91dCBhbGwgbWVtb3J5ICovCisgIG0tPnNtYWxsYmlucyA9IG0tPnRyZWViaW5zID0gMDsKKyAgbS0+ZHZzaXplID0gbS0+dG9wc2l6ZSA9IDA7CisgIG0tPnNlZy5iYXNlID0gMDsKKyAgbS0+c2VnLnNpemUgPSAwOworICBtLT5zZWcubmV4dCA9IDA7CisgIG0tPnRvcCA9IG0tPmR2ID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IE5UUkVFQklOUzsgKytpKQorICAgICp0cmVlYmluX2F0KG0sIGkpID0gMDsKKyAgaW5pdF9iaW5zKG0pOworfQorI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworLyogQWxsb2NhdGUgY2h1bmsgYW5kIHByZXBlbmQgcmVtYWluZGVyIHdpdGggY2h1bmsgaW4gc3VjY2Vzc29yIGJhc2UuICovCitzdGF0aWMgdm9pZCogcHJlcGVuZF9hbGxvYyhtc3RhdGUgbSwgY2hhciogbmV3YmFzZSwgY2hhciogb2xkYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYikgeworICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKG5ld2Jhc2UpOworICBtY2h1bmtwdHIgb2xkZmlyc3QgPSBhbGlnbl9hc19jaHVuayhvbGRiYXNlKTsKKyAgc2l6ZV90IHBzaXplID0gKGNoYXIqKW9sZGZpcnN0IC0gKGNoYXIqKXA7CisgIG1jaHVua3B0ciBxID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICBzaXplX3QgcXNpemUgPSBwc2l6ZSAtIG5iOworICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsKKworICBhc3NlcnQoKGNoYXIqKW9sZGZpcnN0ID4gKGNoYXIqKXEpOworICBhc3NlcnQocGludXNlKG9sZGZpcnN0KSk7CisgIGFzc2VydChxc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSk7CisKKyAgLyogY29uc29saWRhdGUgcmVtYWluZGVyIHdpdGggZmlyc3QgY2h1bmsgb2Ygb2xkIGJhc2UgKi8KKyAgaWYgKG9sZGZpcnN0ID09IG0tPnRvcCkgeworICAgIHNpemVfdCB0c2l6ZSA9IG0tPnRvcHNpemUgKz0gcXNpemU7CisgICAgbS0+dG9wID0gcTsKKyAgICBxLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworICAgIGNoZWNrX3RvcF9jaHVuayhtLCBxKTsKKyAgfQorICBlbHNlIGlmIChvbGRmaXJzdCA9PSBtLT5kdikgeworICAgIHNpemVfdCBkc2l6ZSA9IG0tPmR2c2l6ZSArPSBxc2l6ZTsKKyAgICBtLT5kdiA9IHE7CisgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHEsIGRzaXplKTsKKyAgfQorICBlbHNlIHsKKyAgICBpZiAoIWNpbnVzZShvbGRmaXJzdCkpIHsKKyAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShvbGRmaXJzdCk7CisgICAgICB1bmxpbmtfY2h1bmsobSwgb2xkZmlyc3QsIG5zaXplKTsKKyAgICAgIG9sZGZpcnN0ID0gY2h1bmtfcGx1c19vZmZzZXQob2xkZmlyc3QsIG5zaXplKTsKKyAgICAgIHFzaXplICs9IG5zaXplOworICAgIH0KKyAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBxc2l6ZSwgb2xkZmlyc3QpOworICAgIGluc2VydF9jaHVuayhtLCBxLCBxc2l6ZSk7CisgICAgY2hlY2tfZnJlZV9jaHVuayhtLCBxKTsKKyAgfQorCisgIGNoZWNrX21hbGxvY2VkX2NodW5rKG0sIGNodW5rMm1lbShwKSwgbmIpOworICByZXR1cm4gY2h1bmsybWVtKHApOworfQorCisKKy8qIEFkZCBhIHNlZ21lbnQgdG8gaG9sZCBhIG5ldyBub25jb250aWd1b3VzIHJlZ2lvbiAqLworc3RhdGljIHZvaWQgYWRkX3NlZ21lbnQobXN0YXRlIG0sIGNoYXIqIHRiYXNlLCBzaXplX3QgdHNpemUsIGZsYWdfdCBtbWFwcGVkKSB7CisgIC8qIERldGVybWluZSBsb2NhdGlvbnMgYW5kIHNpemVzIG9mIHNlZ21lbnQsIGZlbmNlcG9zdHMsIG9sZCB0b3AgKi8KKyAgY2hhciogb2xkX3RvcCA9IChjaGFyKiltLT50b3A7CisgIG1zZWdtZW50cHRyIG9sZHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIG9sZF90b3ApOworICBjaGFyKiBvbGRfZW5kID0gb2xkc3AtPmJhc2UgKyBvbGRzcC0+c2l6ZTsKKyAgc2l6ZV90IHNzaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpOworICBjaGFyKiByYXdzcCA9IG9sZF9lbmQgLSAoc3NpemUgKyBGT1VSX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShyYXdzcCkpOworICBjaGFyKiBhc3AgPSByYXdzcCArIG9mZnNldDsKKyAgY2hhciogY3NwID0gKGFzcCA8IChvbGRfdG9wICsgTUlOX0NIVU5LX1NJWkUpKT8gb2xkX3RvcCA6IGFzcDsKKyAgbWNodW5rcHRyIHNwID0gKG1jaHVua3B0ciljc3A7CisgIG1zZWdtZW50cHRyIHNzID0gKG1zZWdtZW50cHRyKShjaHVuazJtZW0oc3ApKTsKKyAgbWNodW5rcHRyIHRuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQoc3AsIHNzaXplKTsKKyAgbWNodW5rcHRyIHAgPSB0bmV4dDsKKyAgaW50IG5mZW5jZXMgPSAwOworCisgIC8qIHJlc2V0IHRvcCB0byBuZXcgc3BhY2UgKi8KKyAgaW5pdF90b3AobSwgKG1jaHVua3B0cil0YmFzZSwgdHNpemUgLSBUT1BfRk9PVF9TSVpFKTsKKworICAvKiBTZXQgdXAgc2VnbWVudCByZWNvcmQgKi8KKyAgYXNzZXJ0KGlzX2FsaWduZWQoc3MpKTsKKyAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBzcCwgc3NpemUpOworICAqc3MgPSBtLT5zZWc7IC8qIFB1c2ggY3VycmVudCByZWNvcmQgKi8KKyAgbS0+c2VnLmJhc2UgPSB0YmFzZTsKKyAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKyAgc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgbW1hcHBlZCk7CisgIG0tPnNlZy5uZXh0ID0gc3M7CisKKyAgLyogSW5zZXJ0IHRyYWlsaW5nIGZlbmNlcG9zdHMgKi8KKyAgZm9yICg7OykgeworICAgIG1jaHVua3B0ciBuZXh0cCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIFNJWkVfVF9TSVpFKTsKKyAgICBwLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgKytuZmVuY2VzOworICAgIGlmICgoY2hhciopKCYobmV4dHAtPmhlYWQpKSA8IG9sZF9lbmQpCisgICAgICBwID0gbmV4dHA7CisgICAgZWxzZQorICAgICAgYnJlYWs7CisgIH0KKyAgYXNzZXJ0KG5mZW5jZXMgPj0gMik7CisKKyAgLyogSW5zZXJ0IHRoZSByZXN0IG9mIG9sZCB0b3AgaW50byBhIGJpbiBhcyBhbiBvcmRpbmFyeSBmcmVlIGNodW5rICovCisgIGlmIChjc3AgIT0gb2xkX3RvcCkgeworICAgIG1jaHVua3B0ciBxID0gKG1jaHVua3B0cilvbGRfdG9wOworICAgIHNpemVfdCBwc2l6ZSA9IGNzcCAtIG9sZF90b3A7CisgICAgbWNodW5rcHRyIHRuID0gY2h1bmtfcGx1c19vZmZzZXQocSwgcHNpemUpOworICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHEsIHBzaXplLCB0bik7CisgICAgaW5zZXJ0X2NodW5rKG0sIHEsIHBzaXplKTsKKyAgfQorCisgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTeXN0ZW0gYWxsb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBHZXQgbWVtb3J5IGZyb20gc3lzdGVtIHVzaW5nIE1PUkVDT1JFIG9yIE1NQVAgKi8KK3N0YXRpYyB2b2lkKiBzeXNfYWxsb2MobXN0YXRlIG0sIHNpemVfdCBuYikgeworICBjaGFyKiB0YmFzZSA9IENNRkFJTDsKKyAgc2l6ZV90IHRzaXplID0gMDsKKyAgZmxhZ190IG1tYXBfZmxhZyA9IDA7CisKKyAgaW5pdF9tcGFyYW1zKCk7CisKKyAgLyogRGlyZWN0bHkgbWFwIGxhcmdlIGNodW5rcyAqLworICBpZiAodXNlX21tYXAobSkgJiYgbmIgPj0gbXBhcmFtcy5tbWFwX3RocmVzaG9sZCkgeworICAgIHZvaWQqIG1lbSA9IG1tYXBfYWxsb2MobSwgbmIpOworICAgIGlmIChtZW0gIT0gMCkKKyAgICAgIHJldHVybiBtZW07CisgIH0KKworICAvKgorICAgIFRyeSBnZXR0aW5nIG1lbW9yeSBpbiBhbnkgb2YgdGhyZWUgd2F5cyAoaW4gbW9zdC1wcmVmZXJyZWQgdG8KKyAgICBsZWFzdC1wcmVmZXJyZWQgb3JkZXIpOgorICAgIDEuIEEgY2FsbCB0byBNT1JFQ09SRSB0aGF0IGNhbiBub3JtYWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4KKyAgICAgICAoZGlzYWJsZWQgaWYgbm90IE1PUkVDT1JFX0NPTlRJR1VPVVMgb3Igbm90IEhBVkVfTU9SRUNPUkUgb3IKKyAgICAgICBvciBtYWluIHNwYWNlIGlzIG1tYXBwZWQgb3IgYSBwcmV2aW91cyBjb250aWd1b3VzIGNhbGwgZmFpbGVkKQorICAgIDIuIEEgY2FsbCB0byBNTUFQIG5ldyBzcGFjZSAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU1BUCkuCisgICAgICAgTm90ZSB0aGF0IHVuZGVyIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBpZiBNT1JFQ09SRSBpcyB1bmFibGUgdG8KKyAgICAgICBmdWxmaWxsIGEgcmVxdWVzdCwgYW5kIEhBVkVfTU1BUCBpcyB0cnVlLCB0aGVuIG1tYXAgaXMKKyAgICAgICB1c2VkIGFzIGEgbm9uY29udGlndW91cyBzeXN0ZW0gYWxsb2NhdG9yLiBUaGlzIGlzIGEgdXNlZnVsIGJhY2t1cAorICAgICAgIHN0cmF0ZWd5IGZvciBzeXN0ZW1zIHdpdGggaG9sZXMgaW4gYWRkcmVzcyBzcGFjZXMgLS0gaW4gdGhpcyBjYXNlCisgICAgICAgc2JyayBjYW5ub3QgY29udGlndW91c2x5IGV4cGFuZCB0aGUgaGVhcCwgYnV0IG1tYXAgbWF5IGJlIGFibGUgdG8KKyAgICAgICBmaW5kIHNwYWNlLgorICAgIDMuIEEgY2FsbCB0byBNT1JFQ09SRSB0aGF0IGNhbm5vdCB1c3VhbGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5LgorICAgICAgIChkaXNhYmxlZCBpZiBub3QgSEFWRV9NT1JFQ09SRSkKKyAgKi8KKworICBpZiAoTU9SRUNPUkVfQ09OVElHVU9VUyAmJiAhdXNlX25vbmNvbnRpZ3VvdXMobSkpIHsKKyAgICBjaGFyKiBiciA9IENNRkFJTDsKKyAgICBtc2VnbWVudHB0ciBzcyA9IChtLT50b3AgPT0gMCk/IDAgOiBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKW0tPnRvcCk7CisgICAgc2l6ZV90IGFzaXplID0gMDsKKyAgICBBQ1FVSVJFX01PUkVDT1JFX0xPQ0soKTsKKworICAgIGlmIChzcyA9PSAwKSB7ICAvKiBGaXJzdCB0aW1lIHRocm91Z2ggb3IgcmVjb3ZlcnkgKi8KKyAgICAgIGNoYXIqIGJhc2UgPSAoY2hhciopQ0FMTF9NT1JFQ09SRSgwKTsKKyAgICAgIGlmIChiYXNlICE9IENNRkFJTCkgeworICAgICAgICBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUpOworICAgICAgICAvKiBBZGp1c3QgdG8gZW5kIG9uIGEgcGFnZSBib3VuZGFyeSAqLworICAgICAgICBpZiAoIWlzX3BhZ2VfYWxpZ25lZChiYXNlKSkKKyAgICAgICAgICBhc2l6ZSArPSAocGFnZV9hbGlnbigoc2l6ZV90KWJhc2UpIC0gKHNpemVfdCliYXNlKTsKKyAgICAgICAgLyogQ2FuJ3QgY2FsbCBNT1JFQ09SRSBpZiBzaXplIGlzIG5lZ2F0aXZlIHdoZW4gdHJlYXRlZCBhcyBzaWduZWQgKi8KKyAgICAgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisgICAgICAgICAgICAoYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKSkgPT0gYmFzZSkgeworICAgICAgICAgIHRiYXNlID0gYmFzZTsKKyAgICAgICAgICB0c2l6ZSA9IGFzaXplOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogU3VidHJhY3Qgb3V0IGV4aXN0aW5nIGF2YWlsYWJsZSB0b3Agc3BhY2UgZnJvbSBNT1JFQ09SRSByZXF1ZXN0LiAqLworICAgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiAtIG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSk7CisgICAgICAvKiBVc2UgbWVtIGhlcmUgb25seSBpZiBpdCBkaWQgY29udGludW91c2x5IGV4dGVuZCBvbGQgc3BhY2UgKi8KKyAgICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorICAgICAgICAgIChiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpKSA9PSBzcy0+YmFzZStzcy0+c2l6ZSkgeworICAgICAgICB0YmFzZSA9IGJyOworICAgICAgICB0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgIH0KKworICAgIGlmICh0YmFzZSA9PSBDTUZBSUwpIHsgICAgLyogQ29wZSB3aXRoIHBhcnRpYWwgZmFpbHVyZSAqLworICAgICAgaWYgKGJyICE9IENNRkFJTCkgeyAgICAvKiBUcnkgdG8gdXNlL2V4dGVuZCB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworICAgICAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKyAgICAgICAgICAgIGFzaXplIDwgbmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSkgeworICAgICAgICAgIHNpemVfdCBlc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUgLSBhc2l6ZSk7CisgICAgICAgICAgaWYgKGVzaXplIDwgSEFMRl9NQVhfU0laRV9UKSB7CisgICAgICAgICAgICBjaGFyKiBlbmQgPSAoY2hhciopQ0FMTF9NT1JFQ09SRShlc2l6ZSk7CisgICAgICAgICAgICBpZiAoZW5kICE9IENNRkFJTCkKKyAgICAgICAgICAgICAgYXNpemUgKz0gZXNpemU7CisgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAvKiBDYW4ndCB1c2U7IHRyeSB0byByZWxlYXNlICovCisgICAgICAgICAgICAgICh2b2lkKUNBTExfTU9SRUNPUkUoLWFzaXplKTsKKyAgICAgICAgICAgICAgYnIgPSBDTUZBSUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFVzZSB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworICAgICAgICB0YmFzZSA9IGJyOworICAgICAgICB0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBkaXNhYmxlX2NvbnRpZ3VvdXMobSk7IC8qIERvbid0IHRyeSBjb250aWd1b3VzIHBhdGggaW4gdGhlIGZ1dHVyZSAqLworICAgIH0KKworICAgIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpOworICB9CisKKyAgaWYgKEhBVkVfTU1BUCAmJiB0YmFzZSA9PSBDTUZBSUwpIHsgIC8qIFRyeSBNTUFQICovCisgICAgc2l6ZV90IHJlcSA9IG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkU7CisgICAgc2l6ZV90IHJzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24ocmVxKTsKKyAgICBpZiAocnNpemUgPiBuYikgeyAvKiBGYWlsIGlmIHdyYXBzIGFyb3VuZCB6ZXJvICovCisgICAgICBjaGFyKiBtcCA9IChjaGFyKikoQ0FMTF9NTUFQKHJzaXplKSk7CisgICAgICBpZiAobXAgIT0gQ01GQUlMKSB7CisgICAgICAgIHRiYXNlID0gbXA7CisgICAgICAgIHRzaXplID0gcnNpemU7CisgICAgICAgIG1tYXBfZmxhZyA9IElTX01NQVBQRURfQklUOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChIQVZFX01PUkVDT1JFICYmIHRiYXNlID09IENNRkFJTCkgeyAvKiBUcnkgbm9uY29udGlndW91cyBNT1JFQ09SRSAqLworICAgIHNpemVfdCBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUpOworICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkgeworICAgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgICBjaGFyKiBlbmQgPSBDTUZBSUw7CisgICAgICBBQ1FVSVJFX01PUkVDT1JFX0xPQ0soKTsKKyAgICAgIGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSk7CisgICAgICBlbmQgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworICAgICAgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCk7CisgICAgICBpZiAoYnIgIT0gQ01GQUlMICYmIGVuZCAhPSBDTUZBSUwgJiYgYnIgPCBlbmQpIHsKKyAgICAgICAgc2l6ZV90IHNzaXplID0gZW5kIC0gYnI7CisgICAgICAgIGlmIChzc2l6ZSA+IG5iICsgVE9QX0ZPT1RfU0laRSkgeworICAgICAgICAgIHRiYXNlID0gYnI7CisgICAgICAgICAgdHNpemUgPSBzc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKworICAgIGlmICgobS0+Zm9vdHByaW50ICs9IHRzaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworCisgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovCisgICAgICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgICAgIG0tPnNlZy5zaXplID0gdHNpemU7CisgICAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwX2ZsYWcpOworICAgICAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICAgICAgaW5pdF9iaW5zKG0pOworICAgICAgaWYgKGlzX2dsb2JhbChtKSkgCisgICAgICAgIGluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogT2Zmc2V0IHRvcCBieSBlbWJlZGRlZCBtYWxsb2Nfc3RhdGUgKi8KKyAgICAgICAgbWNodW5rcHRyIG1uID0gbmV4dF9jaHVuayhtZW0yY2h1bmsobSkpOworICAgICAgICBpbml0X3RvcChtLCBtbiwgKHNpemVfdCkoKHRiYXNlICsgdHNpemUpIC0gKGNoYXIqKW1uKSAtVE9QX0ZPT1RfU0laRSk7CisgICAgICB9CisgICAgfQorCisgICAgZWxzZSB7CisgICAgICAvKiBUcnkgdG8gbWVyZ2Ugd2l0aCBhbiBleGlzdGluZyBzZWdtZW50ICovCisgICAgICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgICAgICB3aGlsZSAoc3AgIT0gMCAmJiB0YmFzZSAhPSBzcC0+YmFzZSArIHNwLT5zaXplKQorICAgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgaWYgKHNwICE9IDAgJiYKKyAgICAgICAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisJICBjaGVja19zZWdtZW50X21lcmdlKHNwLCB0YmFzZSwgdHNpemUpICYmCisgICAgICAgICAgKGdldF9zZWdtZW50X2ZsYWdzKHNwKSAmIElTX01NQVBQRURfQklUKSA9PSBtbWFwX2ZsYWcgJiYKKyAgICAgICAgICBzZWdtZW50X2hvbGRzKHNwLCBtLT50b3ApKSB7IC8qIGFwcGVuZCAqLworICAgICAgICBzcC0+c2l6ZSArPSB0c2l6ZTsKKyAgICAgICAgaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplICsgdHNpemUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGlmICh0YmFzZSA8IG0tPmxlYXN0X2FkZHIpCisgICAgICAgICAgbS0+bGVhc3RfYWRkciA9IHRiYXNlOworICAgICAgICBzcCA9ICZtLT5zZWc7CisgICAgICAgIHdoaWxlIChzcCAhPSAwICYmIHNwLT5iYXNlICE9IHRiYXNlICsgdHNpemUpCisgICAgICAgICAgc3AgPSBzcC0+bmV4dDsKKyAgICAgICAgaWYgKHNwICE9IDAgJiYKKyAgICAgICAgICAgICFpc19leHRlcm5fc2VnbWVudChzcCkgJiYKKwkgICAgY2hlY2tfc2VnbWVudF9tZXJnZShzcCwgdGJhc2UsIHRzaXplKSAmJgorICAgICAgICAgICAgKGdldF9zZWdtZW50X2ZsYWdzKHNwKSAmIElTX01NQVBQRURfQklUKSA9PSBtbWFwX2ZsYWcpIHsKKyAgICAgICAgICBjaGFyKiBvbGRiYXNlID0gc3AtPmJhc2U7CisgICAgICAgICAgc3AtPmJhc2UgPSB0YmFzZTsKKyAgICAgICAgICBzcC0+c2l6ZSArPSB0c2l6ZTsKKyAgICAgICAgICByZXR1cm4gcHJlcGVuZF9hbGxvYyhtLCB0YmFzZSwgb2xkYmFzZSwgbmIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBhZGRfc2VnbWVudChtLCB0YmFzZSwgdHNpemUsIG1tYXBfZmxhZyk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDwgbS0+dG9wc2l6ZSkgeyAvKiBBbGxvY2F0ZSBmcm9tIG5ldyBvciBleHRlbmRlZCB0b3Agc3BhY2UgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG0tPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG0tPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgbmIpOworICAgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisKKyAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIHN5c3RlbSBkZWFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVW5tYXAgYW5kIHVubGluayBhbnkgbW1hcHBlZCBzZWdtZW50cyB0aGF0IGRvbid0IGNvbnRhaW4gdXNlZCBjaHVua3MgKi8KK3N0YXRpYyBzaXplX3QgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMobXN0YXRlIG0pIHsKKyAgc2l6ZV90IHJlbGVhc2VkID0gMDsKKyAgbXNlZ21lbnRwdHIgcHJlZCA9ICZtLT5zZWc7CisgIG1zZWdtZW50cHRyIHNwID0gcHJlZC0+bmV4dDsKKyAgd2hpbGUgKHNwICE9IDApIHsKKyAgICBjaGFyKiBiYXNlID0gc3AtPmJhc2U7CisgICAgc2l6ZV90IHNpemUgPSBzcC0+c2l6ZTsKKyAgICBtc2VnbWVudHB0ciBuZXh0ID0gc3AtPm5leHQ7CisgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkgJiYgIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworICAgICAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhiYXNlKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIC8qIENhbiB1bm1hcCBpZiBmaXJzdCBjaHVuayBob2xkcyBlbnRpcmUgc2VnbWVudCBhbmQgbm90IHBpbm5lZCAqLworICAgICAgaWYgKCFjaW51c2UocCkgJiYgKGNoYXIqKXAgKyBwc2l6ZSA+PSBiYXNlICsgc2l6ZSAtIFRPUF9GT09UX1NJWkUpIHsKKyAgICAgICAgdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOworICAgICAgICBhc3NlcnQoc2VnbWVudF9ob2xkcyhzcCwgKGNoYXIqKXNwKSk7CisgICAgICAgIGlmIChwID09IG0tPmR2KSB7CisgICAgICAgICAgbS0+ZHYgPSAwOworICAgICAgICAgIG0tPmR2c2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHRwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkgeworICAgICAgICAgIHJlbGVhc2VkICs9IHNpemU7CisgICAgICAgICAgbS0+Zm9vdHByaW50IC09IHNpemU7CisgICAgICAgICAgLyogdW5saW5rIG9ic29sZXRlZCByZWNvcmQgKi8KKyAgICAgICAgICBzcCA9IHByZWQ7CisgICAgICAgICAgc3AtPm5leHQgPSBuZXh0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvKiBiYWNrIG91dCBpZiBjYW5ub3QgdW5tYXAgKi8KKyAgICAgICAgICBpbnNlcnRfbGFyZ2VfY2h1bmsobSwgdHAsIHBzaXplKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBwcmVkID0gc3A7CisgICAgc3AgPSBuZXh0OworICB9CisgIHJldHVybiByZWxlYXNlZDsKK30KKworc3RhdGljIGludCBzeXNfdHJpbShtc3RhdGUgbSwgc2l6ZV90IHBhZCkgeworICBzaXplX3QgcmVsZWFzZWQgPSAwOworICBpZiAocGFkIDwgTUFYX1JFUVVFU1QgJiYgaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICBwYWQgKz0gVE9QX0ZPT1RfU0laRTsgLyogZW5zdXJlIGVub3VnaCByb29tIGZvciBzZWdtZW50IG92ZXJoZWFkICovCisKKyAgICBpZiAobS0+dG9wc2l6ZSA+IHBhZCkgeworICAgICAgLyogU2hyaW5rIHRvcCBzcGFjZSBpbiBncmFudWxhcml0eS1zaXplIHVuaXRzLCBrZWVwaW5nIGF0IGxlYXN0IG9uZSAqLworICAgICAgc2l6ZV90IHVuaXQgPSBtcGFyYW1zLmdyYW51bGFyaXR5OworICAgICAgc2l6ZV90IGV4dHJhID0gKChtLT50b3BzaXplIC0gcGFkICsgKHVuaXQgLSBTSVpFX1RfT05FKSkgLyB1bml0IC0KKyAgICAgICAgICAgICAgICAgICAgICBTSVpFX1RfT05FKSAqIHVuaXQ7CisgICAgICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopbS0+dG9wKTsKKworICAgICAgaWYgKCFpc19leHRlcm5fc2VnbWVudChzcCkpIHsKKyAgICAgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkpIHsKKyAgICAgICAgICBpZiAoSEFWRV9NTUFQICYmCisgICAgICAgICAgICAgIHNwLT5zaXplID49IGV4dHJhICYmCisgICAgICAgICAgICAgICFoYXNfc2VnbWVudF9saW5rKG0sIHNwKSkgeyAvKiBjYW4ndCBzaHJpbmsgaWYgcGlubmVkICovCisgICAgICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IHNwLT5zaXplIC0gZXh0cmE7CisgICAgICAgICAgICAvKiBQcmVmZXIgbXJlbWFwLCBmYWxsIGJhY2sgdG8gbXVubWFwICovCisgICAgICAgICAgICBpZiAoKENBTExfTVJFTUFQKHNwLT5iYXNlLCBzcC0+c2l6ZSwgbmV3c2l6ZSwgMCkgIT0gTUZBSUwpIHx8CisgICAgICAgICAgICAgICAgKENBTExfTVVOTUFQKHNwLT5iYXNlICsgbmV3c2l6ZSwgZXh0cmEpID09IDApKSB7CisgICAgICAgICAgICAgIHJlbGVhc2VkID0gZXh0cmE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEhBVkVfTU9SRUNPUkUpIHsKKyAgICAgICAgICBpZiAoZXh0cmEgPj0gSEFMRl9NQVhfU0laRV9UKSAvKiBBdm9pZCB3cmFwcGluZyBuZWdhdGl2ZSAqLworICAgICAgICAgICAgZXh0cmEgPSAoSEFMRl9NQVhfU0laRV9UKSArIFNJWkVfVF9PTkUgLSB1bml0OworICAgICAgICAgIEFDUVVJUkVfTU9SRUNPUkVfTE9DSygpOworICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBlbmQgb2YgbWVtb3J5IGlzIHdoZXJlIHdlIGxhc3Qgc2V0IGl0LiAqLworICAgICAgICAgICAgY2hhciogb2xkX2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKyAgICAgICAgICAgIGlmIChvbGRfYnIgPT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkgeworICAgICAgICAgICAgICBjaGFyKiByZWxfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoLWV4dHJhKSk7CisgICAgICAgICAgICAgIGNoYXIqIG5ld19iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisgICAgICAgICAgICAgIGlmIChyZWxfYnIgIT0gQ01GQUlMICYmIG5ld19iciA8IG9sZF9icikKKyAgICAgICAgICAgICAgICByZWxlYXNlZCA9IG9sZF9iciAtIG5ld19icjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHJlbGVhc2VkICE9IDApIHsKKyAgICAgICAgc3AtPnNpemUgLT0gcmVsZWFzZWQ7CisgICAgICAgIG0tPmZvb3RwcmludCAtPSByZWxlYXNlZDsKKyAgICAgICAgaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplIC0gcmVsZWFzZWQpOworICAgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBVbm1hcCBhbnkgdW51c2VkIG1tYXBwZWQgc2VnbWVudHMgKi8KKyAgICBpZiAoSEFWRV9NTUFQKSAKKyAgICAgIHJlbGVhc2VkICs9IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG0pOworCisgICAgLyogT24gZmFpbHVyZSwgZGlzYWJsZSBhdXRvdHJpbSB0byBhdm9pZCByZXBlYXRlZCBmYWlsZWQgZnV0dXJlIGNhbGxzICovCisgICAgaWYgKHJlbGVhc2VkID09IDApCisgICAgICBtLT50cmltX2NoZWNrID0gTUFYX1NJWkVfVDsKKyAgfQorCisgIHJldHVybiAocmVsZWFzZWQgIT0gMCk/IDEgOiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBhbGxvY2F0ZSBhIGxhcmdlIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLworc3RhdGljIHZvaWQqIHRtYWxsb2NfbGFyZ2UobXN0YXRlIG0sIHNpemVfdCBuYikgeworICB0Y2h1bmtwdHIgdiA9IDA7CisgIHNpemVfdCByc2l6ZSA9IC1uYjsgLyogVW5zaWduZWQgbmVnYXRpb24gKi8KKyAgdGNodW5rcHRyIHQ7CisgIGJpbmRleF90IGlkeDsKKyAgY29tcHV0ZV90cmVlX2luZGV4KG5iLCBpZHgpOworCisgIGlmICgodCA9ICp0cmVlYmluX2F0KG0sIGlkeCkpICE9IDApIHsKKyAgICAvKiBUcmF2ZXJzZSB0cmVlIGZvciB0aGlzIGJpbiBsb29raW5nIGZvciBub2RlIHdpdGggc2l6ZSA9PSBuYiAqLworICAgIHNpemVfdCBzaXplYml0cyA9IG5iIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpZHgpOworICAgIHRjaHVua3B0ciByc3QgPSAwOyAgLyogVGhlIGRlZXBlc3QgdW50YWtlbiByaWdodCBzdWJ0cmVlICovCisgICAgZm9yICg7OykgeworICAgICAgdGNodW5rcHRyIHJ0OworICAgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgICAgdiA9IHQ7CisgICAgICAgIGlmICgocnNpemUgPSB0cmVtKSA9PSAwKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgcnQgPSB0LT5jaGlsZFsxXTsKKyAgICAgIHQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdOworICAgICAgaWYgKHJ0ICE9IDAgJiYgcnQgIT0gdCkKKyAgICAgICAgcnN0ID0gcnQ7CisgICAgICBpZiAodCA9PSAwKSB7CisgICAgICAgIHQgPSByc3Q7IC8qIHNldCB0IHRvIGxlYXN0IHN1YnRyZWUgaG9sZGluZyBzaXplcyA+IG5iICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc2l6ZWJpdHMgPDw9IDE7CisgICAgfQorICB9CisKKyAgaWYgKHQgPT0gMCAmJiB2ID09IDApIHsgLyogc2V0IHQgdG8gcm9vdCBvZiBuZXh0IG5vbi1lbXB0eSB0cmVlYmluICovCisgICAgYmlubWFwX3QgbGVmdGJpdHMgPSBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKSAmIG0tPnRyZWVtYXA7CisgICAgaWYgKGxlZnRiaXRzICE9IDApIHsKKyAgICAgIGJpbmRleF90IGk7CisgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgdCA9ICp0cmVlYmluX2F0KG0sIGkpOworICAgIH0KKyAgfQorCisgIHdoaWxlICh0ICE9IDApIHsgLyogZmluZCBzbWFsbGVzdCBvZiB0cmVlIG9yIHN1YnRyZWUgKi8KKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgICB0ID0gbGVmdG1vc3RfY2hpbGQodCk7CisgIH0KKworICAvKiAgSWYgZHYgaXMgYSBiZXR0ZXIgZml0LCByZXR1cm4gMCBzbyBtYWxsb2Mgd2lsbCB1c2UgaXQgKi8KKyAgaWYgKHYgIT0gMCAmJiByc2l6ZSA8IChzaXplX3QpKG0tPmR2c2l6ZSAtIG5iKSkgeworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7IC8qIHNwbGl0ICovCisgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7CisgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworICAgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisgICAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOworICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgICAgaW5zZXJ0X2NodW5rKG0sIHIsIHJzaXplKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOworICAgICAgfQorICAgIH0KKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogYWxsb2NhdGUgYSBzbWFsbCByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KK3N0YXRpYyB2b2lkKiB0bWFsbG9jX3NtYWxsKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHQsIHY7CisgIHNpemVfdCByc2l6ZTsKKyAgYmluZGV4X3QgaTsKKyAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobS0+dHJlZW1hcCk7CisgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisKKyAgdiA9IHQgPSAqdHJlZWJpbl9hdChtLCBpKTsKKyAgcnNpemUgPSBjaHVua3NpemUodCkgLSBuYjsKKworICB3aGlsZSAoKHQgPSBsZWZ0bW9zdF9jaGlsZCh0KSkgIT0gMCkgeworICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgcnNpemUgPSB0cmVtOworICAgICAgdiA9IHQ7CisgICAgfQorICB9CisKKyAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsKKyAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOworICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7CisgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKKyAgICAgIGVsc2UgeworICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHYsIG5iKTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgcmVwbGFjZV9kdihtLCByLCByc2l6ZSk7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOworICAgIH0KKyAgfQorCisgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqIGludGVybmFsX3JlYWxsb2MobXN0YXRlIG0sIHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkgeworICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIG1jaHVua3B0ciBvbGRwID0gbWVtMmNodW5rKG9sZG1lbSk7CisgICAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChvbGRwLCBvbGRzaXplKTsKKyAgICBtY2h1bmtwdHIgbmV3cCA9IDA7CisgICAgdm9pZCogZXh0cmEgPSAwOworCisgICAgLyogVHJ5IHRvIGVpdGhlciBzaHJpbmsgb3IgZXh0ZW5kIGludG8gdG9wLiBFbHNlIG1hbGxvYy1jb3B5LWZyZWUgKi8KKworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgb2xkcCkgJiYgb2tfY2ludXNlKG9sZHApICYmCisgICAgICAgICAgICAgICAgb2tfbmV4dChvbGRwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOworICAgICAgaWYgKGlzX21tYXBwZWQob2xkcCkpCisgICAgICAgIG5ld3AgPSBtbWFwX3Jlc2l6ZShtLCBvbGRwLCBuYik7CisgICAgICBlbHNlIGlmIChvbGRzaXplID49IG5iKSB7IC8qIGFscmVhZHkgYmlnIGVub3VnaCAqLworICAgICAgICBzaXplX3QgcnNpemUgPSBvbGRzaXplIC0gbmI7CisgICAgICAgIG5ld3AgPSBvbGRwOworICAgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsKKyAgICAgICAgICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgbmIpOworICAgICAgICAgIHNldF9pbnVzZShtLCBuZXdwLCBuYik7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcnNpemUpOworICAgICAgICAgIGV4dHJhID0gY2h1bmsybWVtKHJlbWFpbmRlcik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG5leHQgPT0gbS0+dG9wICYmIG9sZHNpemUgKyBtLT50b3BzaXplID4gbmIpIHsKKyAgICAgICAgLyogRXhwYW5kIGludG8gdG9wICovCisgICAgICAgIHNpemVfdCBuZXdzaXplID0gb2xkc2l6ZSArIG0tPnRvcHNpemU7CisgICAgICAgIHNpemVfdCBuZXd0b3BzaXplID0gbmV3c2l6ZSAtIG5iOworICAgICAgICBtY2h1bmtwdHIgbmV3dG9wID0gY2h1bmtfcGx1c19vZmZzZXQob2xkcCwgbmIpOworICAgICAgICBzZXRfaW51c2UobSwgb2xkcCwgbmIpOworICAgICAgICBuZXd0b3AtPmhlYWQgPSBuZXd0b3BzaXplIHxQSU5VU0VfQklUOworICAgICAgICBtLT50b3AgPSBuZXd0b3A7CisgICAgICAgIG0tPnRvcHNpemUgPSBuZXd0b3BzaXplOworICAgICAgICBuZXdwID0gb2xkcDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQT1NUQUNUSU9OKG0pOworCisgICAgaWYgKG5ld3AgIT0gMCkgeworICAgICAgaWYgKGV4dHJhICE9IDApIHsKKyAgICAgICAgaW50ZXJuYWxfZnJlZShtLCBleHRyYSk7CisgICAgICB9CisgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBuZXdwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0obmV3cCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdm9pZCogbmV3bWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgICAgIGlmIChuZXdtZW0gIT0gMCkgeworICAgICAgICBzaXplX3Qgb2MgPSBvbGRzaXplIC0gb3ZlcmhlYWRfZm9yKG9sZHApOworICAgICAgICBtZW1jcHkobmV3bWVtLCBvbGRtZW0sIChvYyA8IGJ5dGVzKT8gb2MgOiBieXRlcyk7CisgICAgICAgIGludGVybmFsX2ZyZWUobSwgb2xkbWVtKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBuZXdtZW07CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtYWxpZ24gc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCogaW50ZXJuYWxfbWVtYWxpZ24obXN0YXRlIG0sIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpICAgIC8qIENhbiBqdXN0IHVzZSBtYWxsb2MgKi8KKyAgICByZXR1cm4gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgaWYgKGFsaWdubWVudCA8ICBNSU5fQ0hVTktfU0laRSkgLyogbXVzdCBiZSBhdCBsZWFzdCBhIG1pbmltdW0gY2h1bmsgc2l6ZSAqLworICAgIGFsaWdubWVudCA9IE1JTl9DSFVOS19TSVpFOworICBpZiAoKGFsaWdubWVudCAmIChhbGlnbm1lbnQtU0laRV9UX09ORSkpICE9IDApIHsvKiBFbnN1cmUgYSBwb3dlciBvZiAyICovCisgICAgc2l6ZV90IGEgPSBNQUxMT0NfQUxJR05NRU5UIDw8IDE7CisgICAgd2hpbGUgKGEgPCBhbGlnbm1lbnQpIGEgPDw9IDE7CisgICAgYWxpZ25tZW50ID0gYTsKKyAgfQorICAKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUIC0gYWxpZ25tZW50KSB7CisgICAgaWYgKG0gIT0gMCkgIHsgLyogVGVzdCBpc24ndCBuZWVkZWQgYnV0IGF2b2lkcyBjb21waWxlciB3YXJuaW5nICovCisgICAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgc2l6ZV90IHJlcSA9IG5iICsgYWxpZ25tZW50ICsgTUlOX0NIVU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRDsKKyAgICBjaGFyKiBtZW0gPSAoY2hhciopaW50ZXJuYWxfbWFsbG9jKG0sIHJlcSk7CisgICAgaWYgKG1lbSAhPSAwKSB7CisgICAgICB2b2lkKiBsZWFkZXIgPSAwOworICAgICAgdm9pZCogdHJhaWxlciA9IDA7CisgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworCisgICAgICBpZiAoUFJFQUNUSU9OKG0pKSByZXR1cm4gMDsKKyAgICAgIGlmICgoKChzaXplX3QpKG1lbSkpICUgYWxpZ25tZW50KSAhPSAwKSB7IC8qIG1pc2FsaWduZWQgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICBGaW5kIGFuIGFsaWduZWQgc3BvdCBpbnNpZGUgY2h1bmsuICBTaW5jZSB3ZSBuZWVkIHRvIGdpdmUKKyAgICAgICAgICBiYWNrIGxlYWRpbmcgc3BhY2UgaW4gYSBjaHVuayBvZiBhdCBsZWFzdCBNSU5fQ0hVTktfU0laRSwgaWYKKyAgICAgICAgICB0aGUgZmlyc3QgY2FsY3VsYXRpb24gcGxhY2VzIHVzIGF0IGEgc3BvdCB3aXRoIGxlc3MgdGhhbgorICAgICAgICAgIE1JTl9DSFVOS19TSVpFIGxlYWRlciwgd2UgY2FuIG1vdmUgdG8gdGhlIG5leHQgYWxpZ25lZCBzcG90LgorICAgICAgICAgIFdlJ3ZlIGFsbG9jYXRlZCBlbm91Z2ggdG90YWwgcm9vbSBzbyB0aGF0IHRoaXMgaXMgYWx3YXlzCisgICAgICAgICAgcG9zc2libGUuCisgICAgICAgICovCisgICAgICAgIGNoYXIqIGJyID0gKGNoYXIqKW1lbTJjaHVuaygoc2l6ZV90KSgoKHNpemVfdCkobWVtICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVfVF9PTkUpKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYWxpZ25tZW50KSk7CisgICAgICAgIGNoYXIqIHBvcyA9ICgoc2l6ZV90KShiciAtIChjaGFyKikocCkpID49IE1JTl9DSFVOS19TSVpFKT8KKyAgICAgICAgICBiciA6IGJyK2FsaWdubWVudDsKKyAgICAgICAgbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKXBvczsKKyAgICAgICAgc2l6ZV90IGxlYWRzaXplID0gcG9zIC0gKGNoYXIqKShwKTsKKyAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBjaHVua3NpemUocCkgLSBsZWFkc2l6ZTsKKworICAgICAgICBpZiAoaXNfbW1hcHBlZChwKSkgeyAvKiBGb3IgbW1hcHBlZCBjaHVua3MsIGp1c3QgYWRqdXN0IG9mZnNldCAqLworICAgICAgICAgIG5ld3AtPnByZXZfZm9vdCA9IHAtPnByZXZfZm9vdCArIGxlYWRzaXplOworICAgICAgICAgIG5ld3AtPmhlYWQgPSAobmV3c2l6ZXxDSU5VU0VfQklUKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsgLyogT3RoZXJ3aXNlLCBnaXZlIGJhY2sgbGVhZGVyLCB1c2UgdGhlIHJlc3QgKi8KKyAgICAgICAgICBzZXRfaW51c2UobSwgbmV3cCwgbmV3c2l6ZSk7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIGxlYWRzaXplKTsKKyAgICAgICAgICBsZWFkZXIgPSBjaHVuazJtZW0ocCk7CisgICAgICAgIH0KKyAgICAgICAgcCA9IG5ld3A7CisgICAgICB9CisKKyAgICAgIC8qIEdpdmUgYmFjayBzcGFyZSByb29tIGF0IHRoZSBlbmQgKi8KKyAgICAgIGlmICghaXNfbW1hcHBlZChwKSkgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgICAgaWYgKHNpemUgPiBuYiArIE1JTl9DSFVOS19TSVpFKSB7CisgICAgICAgICAgc2l6ZV90IHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOworICAgICAgICAgIG1jaHVua3B0ciByZW1haW5kZXIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIG5iKTsKKyAgICAgICAgICBzZXRfaW51c2UobSwgcmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7CisgICAgICAgICAgdHJhaWxlciA9IGNodW5rMm1lbShyZW1haW5kZXIpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGFzc2VydCAoY2h1bmtzaXplKHApID49IG5iKTsKKyAgICAgIGFzc2VydCgoKChzaXplX3QpKGNodW5rMm1lbShwKSkpICUgYWxpZ25tZW50KSA9PSAwKTsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIHApOworICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgIGlmIChsZWFkZXIgIT0gMCkgeworICAgICAgICBpbnRlcm5hbF9mcmVlKG0sIGxlYWRlcik7CisgICAgICB9CisgICAgICBpZiAodHJhaWxlciAhPSAwKSB7CisgICAgICAgIGludGVybmFsX2ZyZWUobSwgdHJhaWxlcik7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbWFsbG9jL2NvYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqKiBpYWxsb2MobXN0YXRlIG0sCisgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogc2l6ZXMsCisgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0cywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNodW5rc1tdKSB7CisgIC8qCisgICAgVGhpcyBwcm92aWRlcyBjb21tb24gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnRfWCByb3V0aW5lcywgaGFuZGxpbmcKKyAgICBhbGwgb2YgdGhlIGNvbWJpbmF0aW9ucyB0aGF0IGNhbiByZXN1bHQuCisKKyAgICBUaGUgb3B0cyBhcmcgaGFzOgorICAgIGJpdCAwIHNldCBpZiBhbGwgZWxlbWVudHMgYXJlIHNhbWUgc2l6ZSAodXNpbmcgc2l6ZXNbMF0pCisgICAgYml0IDEgc2V0IGlmIGVsZW1lbnRzIHNob3VsZCBiZSB6ZXJvZWQKKyAgKi8KKworICBzaXplX3QgICAgZWxlbWVudF9zaXplOyAgIC8qIGNodW5rc2l6ZSBvZiBlYWNoIGVsZW1lbnQsIGlmIGFsbCBzYW1lICovCisgIHNpemVfdCAgICBjb250ZW50c19zaXplOyAgLyogdG90YWwgc2l6ZSBvZiBlbGVtZW50cyAqLworICBzaXplX3QgICAgYXJyYXlfc2l6ZTsgICAgIC8qIHJlcXVlc3Qgc2l6ZSBvZiBwb2ludGVyIGFycmF5ICovCisgIHZvaWQqICAgICBtZW07ICAgICAgICAgICAgLyogbWFsbG9jZWQgYWdncmVnYXRlIHNwYWNlICovCisgIG1jaHVua3B0ciBwOyAgICAgICAgICAgICAgLyogY29ycmVzcG9uZGluZyBjaHVuayAqLworICBzaXplX3QgICAgcmVtYWluZGVyX3NpemU7IC8qIHJlbWFpbmluZyBieXRlcyB3aGlsZSBzcGxpdHRpbmcgKi8KKyAgdm9pZCoqICAgIG1hcnJheTsgICAgICAgICAvKiBlaXRoZXIgImNodW5rcyIgb3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCisgIG1jaHVua3B0ciBhcnJheV9jaHVuazsgICAgLyogY2h1bmsgZm9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLworICBmbGFnX3QgICAgd2FzX2VuYWJsZWQ7ICAgIC8qIHRvIGRpc2FibGUgbW1hcCAqLworICBzaXplX3QgICAgc2l6ZTsKKyAgc2l6ZV90ICAgIGk7CisKKyAgLyogY29tcHV0ZSBhcnJheSBsZW5ndGgsIGlmIG5lZWRlZCAqLworICBpZiAoY2h1bmtzICE9IDApIHsKKyAgICBpZiAobl9lbGVtZW50cyA9PSAwKQorICAgICAgcmV0dXJuIGNodW5rczsgLyogbm90aGluZyB0byBkbyAqLworICAgIG1hcnJheSA9IGNodW5rczsKKyAgICBhcnJheV9zaXplID0gMDsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBpZiBlbXB0eSByZXEsIG11c3Qgc3RpbGwgcmV0dXJuIGNodW5rIHJlcHJlc2VudGluZyBlbXB0eSBhcnJheSAqLworICAgIGlmIChuX2VsZW1lbnRzID09IDApCisgICAgICByZXR1cm4gKHZvaWQqKilpbnRlcm5hbF9tYWxsb2MobSwgMCk7CisgICAgbWFycmF5ID0gMDsKKyAgICBhcnJheV9zaXplID0gcmVxdWVzdDJzaXplKG5fZWxlbWVudHMgKiAoc2l6ZW9mKHZvaWQqKSkpOworICB9CisKKyAgLyogY29tcHV0ZSB0b3RhbCBlbGVtZW50IHNpemUgKi8KKyAgaWYgKG9wdHMgJiAweDEpIHsgLyogYWxsLXNhbWUtc2l6ZSAqLworICAgIGVsZW1lbnRfc2l6ZSA9IHJlcXVlc3Qyc2l6ZSgqc2l6ZXMpOworICAgIGNvbnRlbnRzX3NpemUgPSBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplOworICB9CisgIGVsc2UgeyAvKiBhZGQgdXAgYWxsIHRoZSBzaXplcyAqLworICAgIGVsZW1lbnRfc2l6ZSA9IDA7CisgICAgY29udGVudHNfc2l6ZSA9IDA7CisgICAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpCisgICAgICBjb250ZW50c19zaXplICs9IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSk7CisgIH0KKworICBzaXplID0gY29udGVudHNfc2l6ZSArIGFycmF5X3NpemU7CisKKyAgLyoKKyAgICAgQWxsb2NhdGUgdGhlIGFnZ3JlZ2F0ZSBjaHVuay4gIEZpcnN0IGRpc2FibGUgZGlyZWN0LW1tYXBwaW5nIHNvCisgICAgIG1hbGxvYyB3b24ndCB1c2UgaXQsIHNpbmNlIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGxhdGVyCisgICAgIGZyZWUvcmVhbGxvYyBzcGFjZSBpbnRlcm5hbCB0byBhIHNlZ3JlZ2F0ZWQgbW1hcCByZWdpb24uCisgICovCisgIHdhc19lbmFibGVkID0gdXNlX21tYXAobSk7CisgIGRpc2FibGVfbW1hcChtKTsKKyAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIHNpemUgLSBDSFVOS19PVkVSSEVBRCk7CisgIGlmICh3YXNfZW5hYmxlZCkKKyAgICBlbmFibGVfbW1hcChtKTsKKyAgaWYgKG1lbSA9PSAwKQorICAgIHJldHVybiAwOworCisgIGlmIChQUkVBQ1RJT04obSkpIHJldHVybiAwOworICBwID0gbWVtMmNodW5rKG1lbSk7CisgIHJlbWFpbmRlcl9zaXplID0gY2h1bmtzaXplKHApOworCisgIGFzc2VydCghaXNfbW1hcHBlZChwKSk7CisKKyAgaWYgKG9wdHMgJiAweDIpIHsgICAgICAgLyogb3B0aW9uYWxseSBjbGVhciB0aGUgZWxlbWVudHMgKi8KKyAgICBtZW1zZXQoKHNpemVfdCopbWVtLCAwLCByZW1haW5kZXJfc2l6ZSAtIFNJWkVfVF9TSVpFIC0gYXJyYXlfc2l6ZSk7CisgIH0KKworICAvKiBJZiBub3QgcHJvdmlkZWQsIGFsbG9jYXRlIHRoZSBwb2ludGVyIGFycmF5IGFzIGZpbmFsIHBhcnQgb2YgY2h1bmsgKi8KKyAgaWYgKG1hcnJheSA9PSAwKSB7CisgICAgc2l6ZV90ICBhcnJheV9jaHVua19zaXplOworICAgIGFycmF5X2NodW5rID0gY2h1bmtfcGx1c19vZmZzZXQocCwgY29udGVudHNfc2l6ZSk7CisgICAgYXJyYXlfY2h1bmtfc2l6ZSA9IHJlbWFpbmRlcl9zaXplIC0gY29udGVudHNfc2l6ZTsKKyAgICBtYXJyYXkgPSAodm9pZCoqKSAoY2h1bmsybWVtKGFycmF5X2NodW5rKSk7CisgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBhcnJheV9jaHVuaywgYXJyYXlfY2h1bmtfc2l6ZSk7CisgICAgcmVtYWluZGVyX3NpemUgPSBjb250ZW50c19zaXplOworICB9CisKKyAgLyogc3BsaXQgb3V0IGVsZW1lbnRzICovCisgIGZvciAoaSA9IDA7IDsgKytpKSB7CisgICAgbWFycmF5W2ldID0gY2h1bmsybWVtKHApOworICAgIGlmIChpICE9IG5fZWxlbWVudHMtMSkgeworICAgICAgaWYgKGVsZW1lbnRfc2l6ZSAhPSAwKQorICAgICAgICBzaXplID0gZWxlbWVudF9zaXplOworICAgICAgZWxzZQorICAgICAgICBzaXplID0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgICAgIHJlbWFpbmRlcl9zaXplIC09IHNpemU7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHNpemUpOworICAgICAgcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHNpemUpOworICAgIH0KKyAgICBlbHNlIHsgLyogdGhlIGZpbmFsIGVsZW1lbnQgYWJzb3JicyBhbnkgb3ZlcmFsbG9jYXRpb24gc2xvcCAqLworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCByZW1haW5kZXJfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworI2lmIERFQlVHCisgIGlmIChtYXJyYXkgIT0gY2h1bmtzKSB7CisgICAgLyogZmluYWwgZWxlbWVudCBtdXN0IGhhdmUgZXhhY3RseSBleGhhdXN0ZWQgY2h1bmsgKi8KKyAgICBpZiAoZWxlbWVudF9zaXplICE9IDApIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSBlbGVtZW50X3NpemUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pKTsKKyAgICB9CisgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheSkpOworICB9CisgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQorICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXlbaV0pKTsKKworI2VuZGlmIC8qIERFQlVHICovCisKKyAgUE9TVEFDVElPTihtKTsKKyAgcmV0dXJuIG1hcnJheTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU9OTFlfTVNQQUNFUworCit2b2lkKiBkbG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgLyoKKyAgICAgQmFzaWMgYWxnb3JpdGhtOgorICAgICBJZiBhIHNtYWxsIHJlcXVlc3QgKDwgMjU2IGJ5dGVzIG1pbnVzIHBlci1jaHVuayBvdmVyaGVhZCk6CisgICAgICAgMS4gSWYgb25lIGV4aXN0cywgdXNlIGEgcmVtYWluZGVybGVzcyBjaHVuayBpbiBhc3NvY2lhdGVkIHNtYWxsYmluLgorICAgICAgICAgIChSZW1haW5kZXJsZXNzIG1lYW5zIHRoYXQgdGhlcmUgYXJlIHRvbyBmZXcgZXhjZXNzIGJ5dGVzIHRvCisgICAgICAgICAgcmVwcmVzZW50IGFzIGEgY2h1bmsuKQorICAgICAgIDIuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgZHYgY2h1bmssIHdoaWNoIGlzIG5vcm1hbGx5IHRoZQorICAgICAgICAgIGNodW5rIGFkamFjZW50IHRvIHRoZSBvbmUgdXNlZCBmb3IgdGhlIG1vc3QgcmVjZW50IHNtYWxsIHJlcXVlc3QuCisgICAgICAgMy4gSWYgb25lIGV4aXN0cywgc3BsaXQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBjaHVuayBpbiBhIGJpbiwKKyAgICAgICAgICBzYXZpbmcgcmVtYWluZGVyIGluIGR2LgorICAgICAgIDQuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0CisgICAgIE90aGVyd2lzZSwgZm9yIGEgbGFyZ2UgcmVxdWVzdDoKKyAgICAgICAxLiBGaW5kIHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgYmlubmVkIGNodW5rIHRoYXQgZml0cywgYW5kIHVzZSBpdAorICAgICAgICAgIGlmIGl0IGlzIGJldHRlciBmaXR0aW5nIHRoYW4gZHYgY2h1bmssIHNwbGl0dGluZyBpZiBuZWNlc3NhcnkuCisgICAgICAgMi4gSWYgYmV0dGVyIGZpdHRpbmcgdGhhbiBhbnkgYmlubmVkIGNodW5rLCB1c2UgdGhlIGR2IGNodW5rLgorICAgICAgIDMuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDQuIElmIHJlcXVlc3Qgc2l6ZSA+PSBtbWFwIHRocmVzaG9sZCwgdHJ5IHRvIGRpcmVjdGx5IG1tYXAgdGhpcyBjaHVuay4KKyAgICAgICA1LiBJZiBhdmFpbGFibGUsIGdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gYW5kIHVzZSBpdAorCisgICAgIFRoZSB1Z2x5IGdvdG8ncyBoZXJlIGVuc3VyZSB0aGF0IHBvc3RhY3Rpb24gb2NjdXJzIGFsb25nIGFsbCBwYXRocy4KKyAgKi8KKworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICB2b2lkKiBtZW07CisgICAgc2l6ZV90IG5iOworICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkgeworICAgICAgYmluZGV4X3QgaWR4OworICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOworICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOworICAgICAgc21hbGxiaXRzID0gZ20tPnNtYWxsbWFwID4+IGlkeDsKKworICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSB7IC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovCisgICAgICAgIG1jaHVua3B0ciBiLCBwOworICAgICAgICBpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovCisgICAgICAgIGIgPSBzbWFsbGJpbl9hdChnbSwgaWR4KTsKKyAgICAgICAgcCA9IGItPmZkOworICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaWR4KTsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gZ20tPmR2c2l6ZSkgeworICAgICAgICBpZiAoc21hbGxiaXRzICE9IDApIHsgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8KKyAgICAgICAgICBtY2h1bmtwdHIgYiwgcCwgcjsKKyAgICAgICAgICBzaXplX3QgcnNpemU7CisgICAgICAgICAgYmluZGV4X3QgaTsKKyAgICAgICAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOworICAgICAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKyAgICAgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgICAgIGIgPSBzbWFsbGJpbl9hdChnbSwgaSk7CisgICAgICAgICAgcCA9IGItPmZkOworICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpKTsKKyAgICAgICAgICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKyAgICAgICAgICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLworICAgICAgICAgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICAgICAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgICAgIHJlcGxhY2VfZHYoZ20sIHIsIHJzaXplKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKworICAgICAgICBlbHNlIGlmIChnbS0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKGdtLCBuYikpICE9IDApIHsKKyAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQorICAgICAgbmIgPSBNQVhfU0laRV9UOyAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovCisgICAgZWxzZSB7CisgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlmIChnbS0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKGdtLCBuYikpICE9IDApIHsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDw9IGdtLT5kdnNpemUpIHsKKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT5kdnNpemUgLSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gZ20tPmR2OworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7IC8qIHNwbGl0IGR2ICovCisgICAgICAgIG1jaHVua3B0ciByID0gZ20tPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICBnbS0+ZHZzaXplID0gcnNpemU7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeyAvKiBleGhhdXN0IGR2ICovCisgICAgICAgIHNpemVfdCBkdnMgPSBnbS0+ZHZzaXplOworICAgICAgICBnbS0+ZHZzaXplID0gMDsKKyAgICAgICAgZ20tPmR2ID0gMDsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBnbS0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBnbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhnbSwgZ20tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKGdtLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGxmcmVlKHZvaWQqIG1lbSkgeworICAvKgorICAgICBDb25zb2xpZGF0ZSBmcmVlZCBjaHVua3Mgd2l0aCBwcmVjZWVkaW5nIG9yIHN1Y2NlZWRpbmcgYm9yZGVyaW5nCisgICAgIGZyZWUgY2h1bmtzLCBpZiB0aGV5IGV4aXN0LCBhbmQgdGhlbiBwbGFjZSBpbiBhIGJpbi4gIEludGVybWl4ZWQKKyAgICAgd2l0aCBzcGVjaWFsIGNhc2VzIGZvciB0b3AsIGR2LCBtbWFwcGVkIGNodW5rcywgYW5kIHVzYWdlIGVycm9ycy4KKyAgKi8KKworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKyNpZiBGT09URVJTCisgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBmbSBnbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIVBSRUFDVElPTihmbSkpIHsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2NpbnVzZShwKSkpIHsKKyAgICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKyAgICAgICAgaWYgKCFwaW51c2UocCkpIHsKKyAgICAgICAgICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7CisgICAgICAgICAgaWYgKChwcmV2c2l6ZSAmIElTX01NQVBQRURfQklUKSAhPSAwKSB7CisgICAgICAgICAgICBwcmV2c2l6ZSAmPSB+SVNfTU1BUFBFRF9CSVQ7CisgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7CisgICAgICAgICAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApCisgICAgICAgICAgICAgIGZtLT5mb290cHJpbnQgLT0gcHNpemU7CisgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWNodW5rcHRyIHByZXYgPSBjaHVua19taW51c19vZmZzZXQocCwgcHJldnNpemUpOworICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemU7CisgICAgICAgICAgICBwID0gcHJldjsKKyAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHByZXYpKSkgeyAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLworICAgICAgICAgICAgICBpZiAocCAhPSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIHAsIHByZXZzaXplKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7CisgICAgICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBnb3RvIGVycm9yYWN0aW9uOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChSVENIRUNLKG9rX25leHQocCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworICAgICAgICAgIGlmICghY2ludXNlKG5leHQpKSB7ICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovCisgICAgICAgICAgICBpZiAobmV4dCA9PSBmbS0+dG9wKSB7CisgICAgICAgICAgICAgIHNpemVfdCB0c2l6ZSA9IGZtLT50b3BzaXplICs9IHBzaXplOworICAgICAgICAgICAgICBmbS0+dG9wID0gcDsKKyAgICAgICAgICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgZm0tPmR2ID0gMDsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gMDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoc2hvdWxkX3RyaW0oZm0sIHRzaXplKSkKKyAgICAgICAgICAgICAgICBzeXNfdHJpbShmbSwgMCk7CisgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgIHNpemVfdCBkc2l6ZSA9IGZtLT5kdnNpemUgKz0gcHNpemU7CisgICAgICAgICAgICAgIGZtLT5kdiA9IHA7CisgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7CisgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7CisgICAgICAgICAgICAgIHBzaXplICs9IG5zaXplOworICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsKKyAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsKKyAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOworICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisgICAgICAgICAgaW5zZXJ0X2NodW5rKGZtLCBwLCBwc2l6ZSk7CisgICAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgZXJyb3JhY3Rpb246CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgIHBvc3RhY3Rpb246CisgICAgICBQT1NUQUNUSU9OKGZtKTsKKyAgICB9CisgIH0KKyNpZiAhRk9PVEVSUworI3VuZGVmIGZtCisjZW5kaWYgLyogRk9PVEVSUyAqLworfQorCit2b2lkKiBkbGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICB2b2lkKiBtZW07CisgIHNpemVfdCByZXEgPSAwOworICBpZiAobl9lbGVtZW50cyAhPSAwKSB7CisgICAgcmVxID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKKyAgICBpZiAoKChuX2VsZW1lbnRzIHwgZWxlbV9zaXplKSAmIH4oc2l6ZV90KTB4ZmZmZikgJiYKKyAgICAgICAgKHJlcSAvIG5fZWxlbWVudHMgIT0gZWxlbV9zaXplKSkKKyAgICAgIHJlcSA9IE1BWF9TSVpFX1Q7IC8qIGZvcmNlIGRvd25zdHJlYW0gZmFpbHVyZSBvbiBvdmVyZmxvdyAqLworICB9CisgIG1lbSA9IGRsbWFsbG9jKHJlcSk7CisgIGlmIChtZW0gIT0gMCAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpCisgICAgbWVtc2V0KG1lbSwgMCwgcmVxKTsKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogZGxyZWFsbG9jKHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChvbGRtZW0gPT0gMCkKKyAgICByZXR1cm4gZGxtYWxsb2MoYnl0ZXMpOworI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIGRsZnJlZShvbGRtZW0pOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCisgIGVsc2UgeworI2lmICEgRk9PVEVSUworICAgIG1zdGF0ZSBtID0gZ207CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihtZW0yY2h1bmsob2xkbWVtKSk7CisgICAgaWYgKCFva19tYWdpYyhtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG0sIG9sZG1lbSwgYnl0ZXMpOworICB9Cit9CisKK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihnbSwgYWxpZ25tZW50LCBieXRlcyk7Cit9CisKK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNodW5rc1tdKSB7CisgIHNpemVfdCBzeiA9IGVsZW1fc2l6ZTsgLyogc2VydmVzIGFzIDEtZWxlbWVudCBhcnJheSAqLworICByZXR1cm4gaWFsbG9jKGdtLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2h1bmtzW10pIHsKKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Cit9CisKK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCBieXRlcykgeworICBzaXplX3QgcGFnZXN6OworICBpbml0X21wYXJhbXMoKTsKKyAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7CisgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgYnl0ZXMpOworfQorCit2b2lkKiBkbHB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc3o7CisgIGluaXRfbXBhcmFtcygpOworICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKKyAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCAoYnl0ZXMgKyBwYWdlc3ogLSBTSVpFX1RfT05FKSAmIH4ocGFnZXN6IC0gU0laRV9UX09ORSkpOworfQorCitpbnQgZGxtYWxsb2NfdHJpbShzaXplX3QgcGFkKSB7CisgIGludCByZXN1bHQgPSAwOworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICByZXN1bHQgPSBzeXNfdHJpbShnbSwgcGFkKTsKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpIHsKKyAgcmV0dXJuIGdtLT5mb290cHJpbnQ7Cit9CisKK3NpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpIHsKKyAgcmV0dXJuIGdtLT5tYXhfZm9vdHByaW50OworfQorCisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKSB7CisgIHJldHVybiBpbnRlcm5hbF9tYWxsaW5mbyhnbSk7Cit9CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKwordm9pZCBkbG1hbGxvY19zdGF0cygpIHsKKyAgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKGdtKTsKK30KKworc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIG1lbSkgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIGlmIChjaW51c2UocCkpCisgICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gb3ZlcmhlYWRfZm9yKHApOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgZGxtYWxsb3B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICByZXR1cm4gY2hhbmdlX21wYXJhbShwYXJhbV9udW1iZXIsIHZhbHVlKTsKK30KKworI2VuZGlmIC8qICFPTkxZX01TUEFDRVMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdXNlciBtc3BhY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIE1TUEFDRVMKKworc3RhdGljIG1zdGF0ZSBpbml0X3VzZXJfbXN0YXRlKGNoYXIqIHRiYXNlLCBzaXplX3QgdHNpemUpIHsKKyAgc2l6ZV90IG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKKyAgbWNodW5rcHRyIG1uOworICBtY2h1bmtwdHIgbXNwID0gYWxpZ25fYXNfY2h1bmsodGJhc2UpOworICBtc3RhdGUgbSA9IChtc3RhdGUpKGNodW5rMm1lbShtc3ApKTsKKyAgbWVtc2V0KG0sIDAsIG1zaXplKTsKKyAgSU5JVElBTF9MT0NLKCZtLT5tdXRleCk7CisgIG1zcC0+aGVhZCA9IChtc2l6ZXxQSU5VU0VfQklUfENJTlVTRV9CSVQpOworICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgbS0+c2VnLnNpemUgPSBtLT5mb290cHJpbnQgPSBtLT5tYXhfZm9vdHByaW50ID0gdHNpemU7CisgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKKyAgbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKKyAgZGlzYWJsZV9jb250aWd1b3VzKG0pOworICBpbml0X2JpbnMobSk7CisgIG1uID0gbmV4dF9jaHVuayhtZW0yY2h1bmsobSkpOworICBpbml0X3RvcChtLCBtbiwgKHNpemVfdCkoKHRiYXNlICsgdHNpemUpIC0gKGNoYXIqKW1uKSAtIFRPUF9GT09UX1NJWkUpOworICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgcmV0dXJuIG07Cit9CisKK21zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkgeworICBtc3RhdGUgbSA9IDA7CisgIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIGluaXRfbXBhcmFtcygpOyAvKiBFbnN1cmUgcGFnZXNpemUgZXRjIGluaXRpYWxpemVkICovCisKKyAgaWYgKGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKKyAgICBzaXplX3QgcnMgPSAoKGNhcGFjaXR5ID09IDApPyBtcGFyYW1zLmdyYW51bGFyaXR5IDoKKyAgICAgICAgICAgICAgICAgKGNhcGFjaXR5ICsgVE9QX0ZPT1RfU0laRSArIG1zaXplKSk7CisgICAgc2l6ZV90IHRzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24ocnMpOworICAgIGNoYXIqIHRiYXNlID0gKGNoYXIqKShDQUxMX01NQVAodHNpemUpKTsKKyAgICBpZiAodGJhc2UgIT0gQ01GQUlMKSB7CisgICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSh0YmFzZSwgdHNpemUpOworICAgICAgc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgSVNfTU1BUFBFRF9CSVQpOworICAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIChtc3BhY2UpbTsKK30KKworbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkgeworICBtc3RhdGUgbSA9IDA7CisgIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIGluaXRfbXBhcmFtcygpOyAvKiBFbnN1cmUgcGFnZXNpemUgZXRjIGluaXRpYWxpemVkICovCisKKyAgaWYgKGNhcGFjaXR5ID4gbXNpemUgKyBUT1BfRk9PVF9TSVpFICYmCisgICAgICBjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUoKGNoYXIqKWJhc2UsIGNhcGFjaXR5KTsKKyAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBFWFRFUk5fQklUKTsKKyAgICBzZXRfbG9jayhtLCBsb2NrZWQpOworICB9CisgIHJldHVybiAobXNwYWNlKW07Cit9CisKK3NpemVfdCBkZXN0cm95X21zcGFjZShtc3BhY2UgbXNwKSB7CisgIHNpemVfdCBmcmVlZCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgbXNlZ21lbnRwdHIgc3AgPSAmbXMtPnNlZzsKKyAgICB3aGlsZSAoc3AgIT0gMCkgeworICAgICAgY2hhciogYmFzZSA9IHNwLT5iYXNlOworICAgICAgc2l6ZV90IHNpemUgPSBzcC0+c2l6ZTsKKyAgICAgIGZsYWdfdCBmbGFnID0gZ2V0X3NlZ21lbnRfZmxhZ3Moc3ApOworICAgICAgc3AgPSBzcC0+bmV4dDsKKyAgICAgIGlmICgoZmxhZyAmIElTX01NQVBQRURfQklUKSAmJiAhKGZsYWcgJiBFWFRFUk5fQklUKSAmJgorICAgICAgICAgIENBTExfTVVOTUFQKGJhc2UsIHNpemUpID09IDApCisgICAgICAgIGZyZWVkICs9IHNpemU7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGZyZWVkOworfQorCisvKgorICBtc3BhY2UgdmVyc2lvbnMgb2Ygcm91dGluZXMgYXJlIG5lYXItY2xvbmVzIG9mIHRoZSBnbG9iYWwKKyAgdmVyc2lvbnMuIFRoaXMgaXMgbm90IHNvIG5pY2UgYnV0IGJldHRlciB0aGFuIHRoZSBhbHRlcm5hdGl2ZXMuCisqLworCisKK3ZvaWQqIG1zcGFjZV9tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IGJ5dGVzKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKCFQUkVBQ1RJT04obXMpKSB7CisgICAgdm9pZCogbWVtOworICAgIHNpemVfdCBuYjsKKyAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpIHsKKyAgICAgIGJpbmRleF90IGlkeDsKKyAgICAgIGJpbm1hcF90IHNtYWxsYml0czsKKyAgICAgIG5iID0gKGJ5dGVzIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsKKyAgICAgIHNtYWxsYml0cyA9IG1zLT5zbWFsbG1hcCA+PiBpZHg7CisKKyAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgeyAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLworICAgICAgICBtY2h1bmtwdHIgYiwgcDsKKyAgICAgICAgaWR4ICs9IH5zbWFsbGJpdHMgJiAxOyAgICAgICAvKiBVc2VzIG5leHQgYmluIGlmIGlkeCBlbXB0eSAqLworICAgICAgICBiID0gc21hbGxiaW5fYXQobXMsIGlkeCk7CisgICAgICAgIHAgPSBiLT5mZDsKKyAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGlkeCk7CisgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgfQorCisgICAgICBlbHNlIGlmIChuYiA+IG1zLT5kdnNpemUpIHsKKyAgICAgICAgaWYgKHNtYWxsYml0cyAhPSAwKSB7IC8qIFVzZSBjaHVuayBpbiBuZXh0IG5vbmVtcHR5IHNtYWxsYmluICovCisgICAgICAgICAgbWNodW5rcHRyIGIsIHAsIHI7CisgICAgICAgICAgc2l6ZV90IHJzaXplOworICAgICAgICAgIGJpbmRleF90IGk7CisgICAgICAgICAgYmlubWFwX3QgbGVmdGJpdHMgPSAoc21hbGxiaXRzIDw8IGlkeCkgJiBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKTsKKyAgICAgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisgICAgICAgICAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKyAgICAgICAgICBiID0gc21hbGxiaW5fYXQobXMsIGkpOworICAgICAgICAgIHAgPSBiLT5mZDsKKyAgICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaSkpOworICAgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhtcywgYiwgcCwgaSk7CisgICAgICAgICAgcnNpemUgPSBzbWFsbF9pbmRleDJzaXplKGkpIC0gbmI7CisgICAgICAgICAgLyogRml0IGhlcmUgY2Fubm90IGJlIHJlbWFpbmRlcmxlc3MgaWYgNGJ5dGUgc2l6ZXMgKi8KKyAgICAgICAgICBpZiAoU0laRV9UX1NJWkUgIT0gNCAmJiByc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorICAgICAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIHNtYWxsX2luZGV4MnNpemUoaSkpOworICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworICAgICAgICAgICAgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgICAgICByZXBsYWNlX2R2KG1zLCByLCByc2l6ZSk7CisgICAgICAgICAgfQorICAgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisKKyAgICAgICAgZWxzZSBpZiAobXMtPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChtcywgbmIpKSAhPSAwKSB7CisgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkKKyAgICAgIG5iID0gTUFYX1NJWkVfVDsgLyogVG9vIGJpZyB0byBhbGxvY2F0ZS4gRm9yY2UgZmFpbHVyZSAoaW4gc3lzIGFsbG9jKSAqLworICAgIGVsc2UgeworICAgICAgbmIgPSBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZiAobXMtPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShtcywgbmIpKSAhPSAwKSB7CisgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8PSBtcy0+ZHZzaXplKSB7CisgICAgICBzaXplX3QgcnNpemUgPSBtcy0+ZHZzaXplIC0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG1zLT5kdjsKKyAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeyAvKiBzcGxpdCBkdiAqLworICAgICAgICBtY2h1bmtwdHIgciA9IG1zLT5kdiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgICAgbXMtPmR2c2l6ZSA9IHJzaXplOworICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisgICAgICB9CisgICAgICBlbHNlIHsgLyogZXhoYXVzdCBkdiAqLworICAgICAgICBzaXplX3QgZHZzID0gbXMtPmR2c2l6ZTsKKyAgICAgICAgbXMtPmR2c2l6ZSA9IDA7CisgICAgICAgIG1zLT5kdiA9IDA7CisgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBkdnMpOworICAgICAgfQorICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIGVsc2UgaWYgKG5iIDwgbXMtPnRvcHNpemUpIHsgLyogU3BsaXQgdG9wICovCisgICAgICBzaXplX3QgcnNpemUgPSBtcy0+dG9wc2l6ZSAtPSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbXMtPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gbXMtPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja190b3BfY2h1bmsobXMsIG1zLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIG1lbSA9IHN5c19hbGxvYyhtcywgbmIpOworCisgIHBvc3RhY3Rpb246CisgICAgUE9TVEFDVElPTihtcyk7CisgICAgcmV0dXJuIG1lbTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkIG1zcGFjZV9mcmVlKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSkgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKyNpZiBGT09URVJTCisgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIGZtID0gKG1zdGF0ZSltc3A7CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghb2tfbWFnaWMoZm0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIVBSRUFDVElPTihmbSkpIHsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2NpbnVzZShwKSkpIHsKKyAgICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKyAgICAgICAgaWYgKCFwaW51c2UocCkpIHsKKyAgICAgICAgICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7CisgICAgICAgICAgaWYgKChwcmV2c2l6ZSAmIElTX01NQVBQRURfQklUKSAhPSAwKSB7CisgICAgICAgICAgICBwcmV2c2l6ZSAmPSB+SVNfTU1BUFBFRF9CSVQ7CisgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7CisgICAgICAgICAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApCisgICAgICAgICAgICAgIGZtLT5mb290cHJpbnQgLT0gcHNpemU7CisgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWNodW5rcHRyIHByZXYgPSBjaHVua19taW51c19vZmZzZXQocCwgcHJldnNpemUpOworICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemU7CisgICAgICAgICAgICBwID0gcHJldjsKKyAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHByZXYpKSkgeyAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLworICAgICAgICAgICAgICBpZiAocCAhPSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIHAsIHByZXZzaXplKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7CisgICAgICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBnb3RvIGVycm9yYWN0aW9uOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChSVENIRUNLKG9rX25leHQocCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworICAgICAgICAgIGlmICghY2ludXNlKG5leHQpKSB7ICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovCisgICAgICAgICAgICBpZiAobmV4dCA9PSBmbS0+dG9wKSB7CisgICAgICAgICAgICAgIHNpemVfdCB0c2l6ZSA9IGZtLT50b3BzaXplICs9IHBzaXplOworICAgICAgICAgICAgICBmbS0+dG9wID0gcDsKKyAgICAgICAgICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgZm0tPmR2ID0gMDsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gMDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoc2hvdWxkX3RyaW0oZm0sIHRzaXplKSkKKyAgICAgICAgICAgICAgICBzeXNfdHJpbShmbSwgMCk7CisgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgIHNpemVfdCBkc2l6ZSA9IGZtLT5kdnNpemUgKz0gcHNpemU7CisgICAgICAgICAgICAgIGZtLT5kdiA9IHA7CisgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7CisgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7CisgICAgICAgICAgICAgIHBzaXplICs9IG5zaXplOworICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsKKyAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsKKyAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOworICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisgICAgICAgICAgaW5zZXJ0X2NodW5rKGZtLCBwLCBwc2l6ZSk7CisgICAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgZXJyb3JhY3Rpb246CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgIHBvc3RhY3Rpb246CisgICAgICBQT1NUQUNUSU9OKGZtKTsKKyAgICB9CisgIH0KK30KKwordm9pZCogbXNwYWNlX2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICB2b2lkKiBtZW07CisgIHNpemVfdCByZXEgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIGlmIChuX2VsZW1lbnRzICE9IDApIHsKKyAgICByZXEgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIGlmICgoKG5fZWxlbWVudHMgfCBlbGVtX3NpemUpICYgfihzaXplX3QpMHhmZmZmKSAmJgorICAgICAgICAocmVxIC8gbl9lbGVtZW50cyAhPSBlbGVtX3NpemUpKQorICAgICAgcmVxID0gTUFYX1NJWkVfVDsgLyogZm9yY2UgZG93bnN0cmVhbSBmYWlsdXJlIG9uIG92ZXJmbG93ICovCisgIH0KKyAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG1zLCByZXEpOworICBpZiAobWVtICE9IDAgJiYgY2FsbG9jX211c3RfY2xlYXIobWVtMmNodW5rKG1lbSkpKQorICAgIG1lbXNldChtZW0sIDAsIHJlcSk7CisgIHJldHVybiBtZW07Cit9CisKK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChvbGRtZW0gPT0gMCkKKyAgICByZXR1cm4gbXNwYWNlX21hbGxvYyhtc3AsIGJ5dGVzKTsKKyNpZmRlZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMKKyAgaWYgKGJ5dGVzID09IDApIHsKKyAgICBtc3BhY2VfZnJlZShtc3AsIG9sZG1lbSk7CisgICAgcmV0dXJuIDA7CisgIH0KKyNlbmRpZiAvKiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8KKyAgZWxzZSB7CisjaWYgRk9PVEVSUworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhvbGRtZW0pOworICAgIG1zdGF0ZSBtcyA9IGdldF9tc3RhdGVfZm9yKHApOworI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gaW50ZXJuYWxfcmVhbGxvYyhtcywgb2xkbWVtLCBieXRlcyk7CisgIH0KK30KKwordm9pZCogbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihtcywgYWxpZ25tZW50LCBieXRlcyk7Cit9CisKK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwgdm9pZCogY2h1bmtzW10pIHsKKyAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovCisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGlhbGxvYyhtcywgbl9lbGVtZW50cywgJnN6LCAzLCBjaHVua3MpOworfQorCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCBzaXplcywgMCwgY2h1bmtzKTsKK30KKworaW50IG1zcGFjZV90cmltKG1zcGFjZSBtc3AsIHNpemVfdCBwYWQpIHsKKyAgaW50IHJlc3VsdCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgaWYgKCFQUkVBQ1RJT04obXMpKSB7CisgICAgICByZXN1bHQgPSBzeXNfdHJpbShtcywgcGFkKTsKKyAgICAgIFBPU1RBQ1RJT04obXMpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgbXNwYWNlX21hbGxvY19zdGF0cyhtc3BhY2UgbXNwKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKG1zKTsKKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9Cit9CisKK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IHJlc3VsdDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+Zm9vdHByaW50OworICB9CisgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IHJlc3VsdDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+bWF4X2Zvb3RwcmludDsKKyAgfQorICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICByZXR1cm4gcmVzdWx0OworfQorCisKKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiBpbnRlcm5hbF9tYWxsaW5mbyhtcyk7Cit9CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworaW50IG1zcGFjZV9tYWxsb3B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICByZXR1cm4gY2hhbmdlX21wYXJhbShwYXJhbV9udW1iZXIsIHZhbHVlKTsKK30KKworI2VuZGlmIC8qIE1TUEFDRVMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWx0ZXJuYXRpdmUgTU9SRUNPUkUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgR3VpZGVsaW5lcyBmb3IgY3JlYXRpbmcgYSBjdXN0b20gdmVyc2lvbiBvZiBNT1JFQ09SRToKKworICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBNT1JFQ09SRSBzaG91bGQgYWxsb2NhdGUgaW4gbXVsdGlwbGVzIG9mIHBhZ2VzaXplLgorICAqIE1PUkVDT1JFIG1heSBhbGxvY2F0ZSBtb3JlIG1lbW9yeSB0aGFuIHJlcXVlc3RlZC4gKE9yIGV2ZW4gbGVzcywKKyAgICAgIGJ1dCB0aGlzIHdpbGwgdXN1YWxseSByZXN1bHQgaW4gYSBtYWxsb2MgZmFpbHVyZS4pCisgICogTU9SRUNPUkUgbXVzdCBub3QgYWxsb2NhdGUgbWVtb3J5IHdoZW4gZ2l2ZW4gYXJndW1lbnQgemVybywgYnV0CisgICAgICBpbnN0ZWFkIHJldHVybiBvbmUgcGFzdCB0aGUgZW5kIGFkZHJlc3Mgb2YgbWVtb3J5IGZyb20gcHJldmlvdXMKKyAgICAgIG5vbnplcm8gY2FsbC4KKyAgKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgd2l0aCBwb3NpdGl2ZQorICAgICAgYXJndW1lbnRzIHNob3VsZCByZXR1cm4gaW5jcmVhc2luZyBhZGRyZXNzZXMsIGluZGljYXRpbmcgdGhhdAorICAgICAgc3BhY2UgaGFzIGJlZW4gY29udGlndW91c2x5IGV4dGVuZGVkLgorICAqIEV2ZW4gdGhvdWdoIGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIG5lZWQgbm90IHJldHVybiBjb250aWd1b3VzCisgICAgICBhZGRyZXNzZXMsIGl0IG11c3QgYmUgT0sgZm9yIG1hbGxvYydlZCBjaHVua3MgdG8gc3BhbiBtdWx0aXBsZQorICAgICAgcmVnaW9ucyBpbiB0aG9zZSBjYXNlcyB3aGVyZSB0aGV5IGRvIGhhcHBlbiB0byBiZSBjb250aWd1b3VzLgorICAqIE1PUkVDT1JFIG5lZWQgbm90IGhhbmRsZSBuZWdhdGl2ZSBhcmd1bWVudHMgLS0gaXQgbWF5IGluc3RlYWQKKyAgICAgIGp1c3QgcmV0dXJuIE1GQUlMIHdoZW4gZ2l2ZW4gbmVnYXRpdmUgYXJndW1lbnRzLgorICAgICAgTmVnYXRpdmUgYXJndW1lbnRzIGFyZSBhbHdheXMgbXVsdGlwbGVzIG9mIHBhZ2VzaXplLiBNT1JFQ09SRQorICAgICAgbXVzdCBub3QgbWlzaW50ZXJwcmV0IG5lZ2F0aXZlIGFyZ3MgYXMgbGFyZ2UgcG9zaXRpdmUgdW5zaWduZWQKKyAgICAgIGFyZ3MuIFlvdSBjYW4gc3VwcHJlc3MgYWxsIHN1Y2ggY2FsbHMgZnJvbSBldmVuIG9jY3VycmluZyBieSBkZWZpbmluZworICAgICAgTU9SRUNPUkVfQ0FOTk9UX1RSSU0sCisKKyAgQXMgYW4gZXhhbXBsZSBhbHRlcm5hdGl2ZSBNT1JFQ09SRSwgaGVyZSBpcyBhIGN1c3RvbSBhbGxvY2F0b3IKKyAga2luZGx5IGNvbnRyaWJ1dGVkIGZvciBwcmUtT1NYIG1hY09TLiAgSXQgdXNlcyB2aXJ0dWFsbHkgYnV0IG5vdAorICBuZWNlc3NhcmlseSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbm9uLXBhZ2VkIG1lbW9yeSAobG9ja2VkIGluLAorICBwcmVzZW50IGFuZCB3b24ndCBnZXQgc3dhcHBlZCBvdXQpLiAgWW91IGNhbiB1c2UgaXQgYnkgdW5jb21tZW50aW5nCisgIHRoaXMgc2VjdGlvbiwgYWRkaW5nIHNvbWUgI2luY2x1ZGVzLCBhbmQgc2V0dGluZyB1cCB0aGUgYXBwcm9wcmlhdGUKKyAgZGVmaW5lcyBhYm92ZToKKworICAgICAgI2RlZmluZSBNT1JFQ09SRSBvc01vcmVDb3JlCisKKyAgVGhlcmUgaXMgYWxzbyBhIHNodXRkb3duIHJvdXRpbmUgdGhhdCBzaG91bGQgc29tZWhvdyBiZSBjYWxsZWQgZm9yCisgIGNsZWFudXAgdXBvbiBwcm9ncmFtIGV4aXQuCisKKyAgI2RlZmluZSBNQVhfUE9PTF9FTlRSSUVTIDEwMAorICAjZGVmaW5lIE1JTklNVU1fTU9SRUNPUkVfU0laRSAgKDY0ICogMTAyNFUpCisgIHN0YXRpYyBpbnQgbmV4dF9vc19wb29sOworICB2b2lkICpvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107CisKKyAgdm9pZCAqb3NNb3JlQ29yZShpbnQgc2l6ZSkKKyAgeworICAgIHZvaWQgKnB0ciA9IDA7CisgICAgc3RhdGljIHZvaWQgKnNicmtfdG9wID0gMDsKKworICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICBpZiAoc2l6ZSA8IE1JTklNVU1fTU9SRUNPUkVfU0laRSkKKyAgICAgICAgIHNpemUgPSBNSU5JTVVNX01PUkVDT1JFX1NJWkU7CisgICAgICBpZiAoQ3VycmVudEV4ZWN1dGlvbkxldmVsKCkgPT0ga1Rhc2tMZXZlbCkKKyAgICAgICAgIHB0ciA9IFBvb2xBbGxvY2F0ZVJlc2lkZW50KHNpemUgKyBSTV9QQUdFX1NJWkUsIDApOworICAgICAgaWYgKHB0ciA9PSAwKQorICAgICAgeworICAgICAgICByZXR1cm4gKHZvaWQgKikgTUZBSUw7CisgICAgICB9CisgICAgICAvLyBzYXZlIHB0cnMgc28gdGhleSBjYW4gYmUgZnJlZWQgZHVyaW5nIGNsZWFudXAKKyAgICAgIG91cl9vc19wb29sc1tuZXh0X29zX3Bvb2xdID0gcHRyOworICAgICAgbmV4dF9vc19wb29sKys7CisgICAgICBwdHIgPSAodm9pZCAqKSAoKCgoc2l6ZV90KSBwdHIpICsgUk1fUEFHRV9NQVNLKSAmIH5STV9QQUdFX01BU0spOworICAgICAgc2Jya190b3AgPSAoY2hhciAqKSBwdHIgKyBzaXplOworICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisgICAgZWxzZSBpZiAoc2l6ZSA8IDApCisgICAgeworICAgICAgLy8gd2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgc2hyaW5rIGJlaGF2aW9yCisgICAgICByZXR1cm4gKHZvaWQgKikgTUZBSUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gc2Jya190b3A7CisgICAgfQorICB9CisKKyAgLy8gY2xlYW51cCBhbnkgYWxsb2NhdGVkIG1lbW9yeSBwb29scworICAvLyBjYWxsZWQgYXMgbGFzdCB0aGluZyBiZWZvcmUgc2h1dHRpbmcgZG93biBkcml2ZXIKKworICB2b2lkIG9zQ2xlYW51cE1lbSh2b2lkKQorICB7CisgICAgdm9pZCAqKnB0cjsKKworICAgIGZvciAocHRyID0gb3VyX29zX3Bvb2xzOyBwdHIgPCAmb3VyX29zX3Bvb2xzW01BWF9QT09MX0VOVFJJRVNdOyBwdHIrKykKKyAgICAgIGlmICgqcHRyKQorICAgICAgeworICAgICAgICAgUG9vbERlYWxsb2NhdGUoKnB0cik7CisgICAgICAgICAqcHRyID0gMDsKKyAgICAgIH0KKyAgfQorCisqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIaXN0b3J5OgorICAgIFYyLjguMyBUaHUgU2VwIDIyIDExOjE2OjMyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGQgbWF4X2Zvb3RwcmludCBmdW5jdGlvbnMKKyAgICAgICogRW5zdXJlIGFsbCBhcHByb3ByaWF0ZSBsaXRlcmFscyBhcmUgc2l6ZV90CisgICAgICAqIEZpeCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwcm9ibGVtIGZvciBzb21lICNkZWZpbmUgc2V0dGluZ3MKKyAgICAgICogQXZvaWQgY29uY2F0ZW5hdGluZyBzZWdtZW50cyB3aXRoIHRoZSBvbmUgcHJvdmlkZWQKKyAgICAgICAgaW4gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UKKyAgICAgICogUmVuYW1lIHNvbWUgdmFyaWFibGVzIHRvIGF2b2lkIGNvbXBpbGVyIHNoYWRvd2luZyB3YXJuaW5ncworICAgICAgKiBVc2UgZXhwbGljaXQgbG9jayBpbml0aWFsaXphdGlvbi4KKyAgICAgICogQmV0dGVyIGhhbmRsaW5nIG9mIHNicmsgaW50ZXJmZXJlbmNlLgorICAgICAgKiBTaW1wbGlmeSBhbmQgZml4IHNlZ21lbnQgaW5zZXJ0aW9uLCB0cmltbWluZyBhbmQgbXNwYWNlX2Rlc3Ryb3kKKyAgICAgICogUmVpbnN0YXRlIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyBvcHRpb24gZnJvbSAyLjcueAorICAgICAgKiBUaGFua3MgZXNwZWNpYWxseSB0byBEZW5uaXMgRmxhbmFnYW4gZm9yIGhlbHAgb24gdGhlc2UuCisKKyAgICBWMi44LjIgU3VuIEp1biAxMiAxNjowMToxMCAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IG1lbWFsaWduIGJyYWNlIGVycm9yLgorCisgICAgVjIuOC4xIFdlZCBKdW4gIDggMTY6MTE6NDYgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBpbXByb3BlciAjZW5kaWYgbmVzdGluZyBpbiBDKysKKyAgICAgICogQWRkIGV4cGxpY2l0IGNhc3RzIG5lZWRlZCBmb3IgQysrCisKKyAgICBWMi44LjAgTW9uIE1heSAzMCAxNDowOTowMiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogVXNlIHRyZWVzIGZvciBsYXJnZSBiaW5zCisgICAgICAqIFN1cHBvcnQgbXNwYWNlcworICAgICAgKiBVc2Ugc2VnbWVudHMgdG8gdW5pZnkgc2Jyay1iYXNlZCBhbmQgbW1hcC1iYXNlZCBzeXN0ZW0gYWxsb2NhdGlvbiwKKyAgICAgICAgcmVtb3ZpbmcgbmVlZCBmb3IgZW11bGF0aW9uIG9uIG1vc3QgcGxhdGZvcm1zIHdpdGhvdXQgc2Jyay4KKyAgICAgICogRGVmYXVsdCBzYWZldHkgY2hlY2tzCisgICAgICAqIE9wdGlvbmFsIGZvb3RlciBjaGVja3MuIFRoYW5rcyB0byBXaWxsaWFtIFJvYmVydHNvbiBmb3IgdGhlIGlkZWEuCisgICAgICAqIEludGVybmFsIGNvZGUgcmVmYWN0b3JpbmcKKyAgICAgICogSW5jb3Jwb3JhdGUgc3VnZ2VzdGlvbnMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgIFRoYW5rcyB0byBEZW5uaXMgRmxhbmFnYW4sIENvbGluIFBsdW1iLCBOaWFsbCBEb3VnbGFzLAorICAgICAgICBBYXJvbiBCYWNobWFubiwgIEVtZXJ5IEJlcmdlciwgYW5kIG90aGVycy4KKyAgICAgICogU3BlZWQgdXAgbm9uLWZhc3RiaW4gcHJvY2Vzc2luZyBlbm91Z2ggdG8gcmVtb3ZlIGZhc3RiaW5zLgorICAgICAgKiBSZW1vdmUgdXNlbGVzcyBjZnJlZSgpIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIGFwcHMuCisgICAgICAqIFJlbW92ZSBpbnRlcm5hbCBtZW1jcHksIG1lbXNldC4gQ29tcGlsZXJzIGhhbmRsZSBidWlsdGlucyBiZXR0ZXIuCisgICAgICAqIFJlbW92ZSBzb21lIG9wdGlvbnMgdGhhdCBubyBvbmUgZXZlciB1c2VkIGFuZCByZW5hbWUgb3RoZXJzLgorCisgICAgVjIuNy4yIFNhdCBBdWcgMTcgMDk6MDc6MzAgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBtYWxsb2Nfc3RhdGUgYml0bWFwIGFycmF5IG1pc2RlY2xhcmF0aW9uCisKKyAgICBWMi43LjEgVGh1IEp1bCAyNSAxMDo1ODowMyAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWxsb3cgdHVuaW5nIG9mIEZJUlNUX1NPUlRFRF9CSU5fU0laRQorICAgICAgKiBVc2UgUFRSX1VJTlQgYXMgdHlwZSBmb3IgYWxsIHB0ci0+aW50IGNhc3RzLiBUaGFua3MgdG8gSm9obiBCZWxtb250ZS4KKyAgICAgICogQmV0dGVyIGRldGVjdGlvbiBhbmQgc3VwcG9ydCBmb3Igbm9uLWNvbnRpZ3VvdXNuZXNzIG9mIE1PUkVDT1JFLgorICAgICAgICBUaGFua3MgdG8gQW5kcmVhcyBNdWVsbGVyLCBDb25hbCBXYWxzaCwgYW5kIFdvbGZyYW0gR2xvZ2VyCisgICAgICAqIEJ5cGFzcyBtb3N0IG9mIG1hbGxvYyBpZiBubyBmcmVlcy4gVGhhbmtzIFRvIEVtZXJ5IEJlcmdlci4KKyAgICAgICogRml4IGZyZWVpbmcgb2Ygb2xkIHRvcCBub24tY29udGlndW91cyBjaHVuayBpbSBzeXNtYWxsb2MuCisgICAgICAqIFJhaXNlZCBkZWZhdWx0IHRyaW0gYW5kIG1hcCB0aHJlc2hvbGRzIHRvIDI1NksuCisgICAgICAqIEZpeCBtbWFwLXJlbGF0ZWQgI2RlZmluZXMuIFRoYW5rcyB0byBMdWJvcyBMdW5hay4KKyAgICAgICogRml4IGNvcHkgbWFjcm9zOyBhZGRlZCBMQUNLU19GQ05UTF9ILiBUaGFua3MgdG8gTmVhbCBXYWxmaWVsZC4KKyAgICAgICogQnJhbmNoLWZyZWUgYmluIGNhbGN1bGF0aW9uCisgICAgICAqIERlZmF1bHQgdHJpbSBhbmQgbW1hcCB0aHJlc2hvbGRzIG5vdyAyNTZLLgorCisgICAgVjIuNy4wIFN1biBNYXIgMTEgMTQ6MTQ6MDYgMjAwMSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEludHJvZHVjZSBpbmRlcGVuZGVudF9jb21hbGxvYyBhbmQgaW5kZXBlbmRlbnRfY2FsbG9jLgorICAgICAgICBUaGFua3MgdG8gTWljaGFlbCBQYWNob3MgZm9yIG1vdGl2YXRpb24gYW5kIGhlbHAuCisgICAgICAqIE1ha2Ugb3B0aW9uYWwgLmggZmlsZSBhdmFpbGFibGUKKyAgICAgICogQWxsb3cgPiAyR0IgcmVxdWVzdHMgb24gMzJiaXQgc3lzdGVtcy4KKyAgICAgICogbmV3IFdJTjMyIHNicmssIG1tYXAsIG11bm1hcCwgbG9jayBjb2RlIGZyb20gPFdhbHRlckBHZU5lU3lzLWUuZGU+LgorICAgICAgICBUaGFua3MgYWxzbyB0byBBbmRyZWFzIE11ZWxsZXIgPGEubXVlbGxlciBhdCBwYXJhZGF0ZWMuZGU+LAorICAgICAgICBhbmQgQW5vbnltb3VzLgorICAgICAgKiBBbGxvdyBvdmVycmlkZSBvZiBNQUxMT0NfQUxJR05NRU5UIChUaGFua3MgdG8gUnV1ZCBXYWlqIGZvcgorICAgICAgICBoZWxwaW5nIHRlc3QgdGhpcy4pCisgICAgICAqIG1lbWFsaWduOiBjaGVjayBhbGlnbm1lbnQgYXJnCisgICAgICAqIHJlYWxsb2M6IGRvbid0IHRyeSB0byBzaGlmdCBjaHVua3MgYmFja3dhcmRzLCBzaW5jZSB0aGlzCisgICAgICAgIGxlYWRzIHRvICBtb3JlIGZyYWdtZW50YXRpb24gaW4gc29tZSBwcm9ncmFtcyBhbmQgZG9lc24ndAorICAgICAgICBzZWVtIHRvIGhlbHAgaW4gYW55IG90aGVycy4KKyAgICAgICogQ29sbGVjdCBhbGwgY2FzZXMgaW4gbWFsbG9jIHJlcXVpcmluZyBzeXN0ZW0gbWVtb3J5IGludG8gc3lzbWFsbG9jCisgICAgICAqIFVzZSBtbWFwIGFzIGJhY2t1cCB0byBzYnJrCisgICAgICAqIFBsYWNlIGFsbCBpbnRlcm5hbCBzdGF0ZSBpbiBtYWxsb2Nfc3RhdGUKKyAgICAgICogSW50cm9kdWNlIGZhc3RiaW5zIChhbHRob3VnaCBzaW1pbGFyIHRvIDIuNS4xKQorICAgICAgKiBNYW55IG1pbm9yIHR1bmluZ3MgYW5kIGNvc21ldGljIGltcHJvdmVtZW50cworICAgICAgKiBJbnRyb2R1Y2UgVVNFX1BVQkxJQ19NQUxMT0NfV1JBUFBFUlMsIFVTRV9NQUxMT0NfTE9DSworICAgICAgKiBJbnRyb2R1Y2UgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OLCBNT1JFQ09SRV9DT05USUdVT1VTCisgICAgICAgIFRoYW5rcyB0byBUb255IEUuIEJlbm5ldHQgPHRiZW5uZXR0QG52aWRpYS5jb20+IGFuZCBvdGhlcnMuCisgICAgICAqIEluY2x1ZGUgZXJybm8uaCB0byBzdXBwb3J0IGRlZmF1bHQgZmFpbHVyZSBhY3Rpb24uCisKKyAgICBWMi42LjYgU3VuIERlYyAgNSAwNzo0MjoxOSAxOTk5ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogcmV0dXJuIG51bGwgZm9yIG5lZ2F0aXZlIGFyZ3VtZW50cworICAgICAgKiBBZGRlZCBTZXZlcmFsIFdJTjMyIGNsZWFudXBzIGZyb20gTWFydGluIEMuIEZvbmcgPG1jZm9uZyBhdCB5YWhvby5jb20+CisgICAgICAgICAqIEFkZCAnTEFDS1NfU1lTX1BBUkFNX0gnIGZvciB0aG9zZSBzeXN0ZW1zIHdpdGhvdXQgJ3N5cy9wYXJhbS5oJworICAgICAgICAgIChlLmcuIFdJTjMyIHBsYXRmb3JtcykKKyAgICAgICAgICogQ2xlYW51cCBoZWFkZXIgZmlsZSBpbmNsdXNpb24gZm9yIFdJTjMyIHBsYXRmb3JtcworICAgICAgICAgKiBDbGVhbnVwIGNvZGUgdG8gYXZvaWQgTWljcm9zb2Z0IFZpc3VhbCBDKysgY29tcGlsZXIgY29tcGxhaW50cworICAgICAgICAgKiBBZGQgJ1VTRV9ETF9QUkVGSVgnIHRvIHF1aWNrbHkgYWxsb3cgY28tZXhpc3RlbmNlIHdpdGggZXhpc3RpbmcKKyAgICAgICAgICAgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMKKyAgICAgICAgICogU2V0ICdtYWxsb2NfZ2V0cGFnZXNpemUnIGZvciBXSU4zMiBwbGF0Zm9ybXMgKG5lZWRzIG1vcmUgd29yaykKKyAgICAgICAgICogVXNlICdhc3NlcnQnIHJhdGhlciB0aGFuICdBU1NFUlQnIGluIFdJTjMyIGNvZGUgdG8gY29uZm9ybSB0bworICAgICAgICAgICB1c2FnZSBvZiAnYXNzZXJ0JyBpbiBub24tV0lOMzIgY29kZQorICAgICAgICAgKiBJbXByb3ZlIFdJTjMyICdzYnJrKCknIGVtdWxhdGlvbidzICdmaW5kUmVnaW9uKCknIHJvdXRpbmUgdG8KKyAgICAgICAgICAgYXZvaWQgaW5maW5pdGUgbG9vcAorICAgICAgKiBBbHdheXMgY2FsbCAnZlJFZSgpJyByYXRoZXIgdGhhbiAnZnJlZSgpJworCisgICAgVjIuNi41IFdlZCBKdW4gMTcgMTU6NTc6MzEgMTk5OCAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeGVkIG9yZGVyaW5nIHByb2JsZW0gd2l0aCBib3VuZGFyeS1zdGFtcGluZworCisgICAgVjIuNi4zIFN1biBNYXkgMTkgMDg6MTc6NTggMTk5NiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZGVkIHB2YWxsb2MsIGFzIHJlY29tbWVuZGVkIGJ5IEguSi4gTGl1CisgICAgICAqIEFkZGVkIDY0Yml0IHBvaW50ZXIgc3VwcG9ydCBtYWlubHkgZnJvbSBXb2xmcmFtIEdsb2dlcgorICAgICAgKiBBZGRlZCBhbm9ueW1vdXNseSBkb25hdGVkIFdJTjMyIHNicmsgZW11bGF0aW9uCisgICAgICAqIE1hbGxvYywgY2FsbG9jLCBnZXRwYWdlc2l6ZTogYWRkIG9wdGltaXphdGlvbnMgZnJvbSBSYXltb25kIE5panNzZW4KKyAgICAgICogbWFsbG9jX2V4dGVuZF90b3A6IGZpeCBtYXNrIGVycm9yIHRoYXQgY2F1c2VkIHdhc3RhZ2UgYWZ0ZXIKKyAgICAgICAgZm9yZWlnbiBzYnJrcworICAgICAgKiBBZGQgbGludXggbXJlbWFwIHN1cHBvcnQgY29kZSBmcm9tIEhKIExpdQorCisgICAgVjIuNi4yIFR1ZSBEZWMgIDUgMDY6NTI6NTUgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEludGVncmF0ZWQgbW9zdCBkb2N1bWVudGF0aW9uIHdpdGggdGhlIGNvZGUuCisgICAgICAqIEFkZCBzdXBwb3J0IGZvciBtbWFwLCB3aXRoIGhlbHAgZnJvbQorICAgICAgICBXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgorICAgICAgKiBVc2UgbGFzdF9yZW1haW5kZXIgaW4gbW9yZSBjYXNlcy4KKyAgICAgICogUGFjayBiaW5zIHVzaW5nIGlkZWEgZnJvbSAgY29saW5Abnl4MTAuY3MuZHUuZWR1CisgICAgICAqIFVzZSBvcmRlcmVkIGJpbnMgaW5zdGVhZCBvZiBiZXN0LWZpdCB0aHJlc2hob2xkCisgICAgICAqIEVsaW1pbmF0ZSBibG9jay1sb2NhbCBkZWNscyB0byBzaW1wbGlmeSB0cmFjaW5nIGFuZCBkZWJ1Z2dpbmcuCisgICAgICAqIFN1cHBvcnQgYW5vdGhlciBjYXNlIG9mIHJlYWxsb2MgdmlhIG1vdmUgaW50byB0b3AKKyAgICAgICogRml4IGVycm9yIG9jY3VyaW5nIHdoZW4gaW5pdGlhbCBzYnJrX2Jhc2Ugbm90IHdvcmQtYWxpZ25lZC4KKyAgICAgICogUmVseSBvbiBwYWdlIHNpemUgZm9yIHVuaXRzIGluc3RlYWQgb2YgU0JSS19VTklUIHRvCisgICAgICAgIGF2b2lkIHN1cnByaXNlcyBhYm91dCBzYnJrIGFsaWdubWVudCBjb252ZW50aW9ucy4KKyAgICAgICogQWRkIG1hbGxpbmZvLCBtYWxsb3B0LiBUaGFua3MgdG8gUmF5bW9uZCBOaWpzc2VuCisgICAgICAgIChyYXltb25kQGVzLmVsZS50dWUubmwpIGZvciB0aGUgc3VnZ2VzdGlvbi4KKyAgICAgICogQWRkIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIGFuZCB0b3BfcGFkIG1hbGxvcHQgcGFyYW1ldGVyLgorICAgICAgKiBNb3JlIHByZWNhdXRpb25zIGZvciBjYXNlcyB3aGVyZSBvdGhlciByb3V0aW5lcyBjYWxsIHNicmssCisgICAgICAgIGNvdXJ0ZXN5IG9mIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCisgICAgICAqIEFkZGVkIG1hY3JvcyBldGMuLCBhbGxvd2luZyB1c2UgaW4gbGludXggbGliYyBmcm9tCisgICAgICAgIEguSi4gTHUgKGhqbEBnbnUuYWkubWl0LmVkdSkKKyAgICAgICogSW52ZXJ0ZWQgdGhpcyBoaXN0b3J5IGxpc3QKKworICAgIFYyLjYuMSBTYXQgRGVjICAyIDE0OjEwOjU3IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBSZS10dW5lZCBhbmQgZml4ZWQgdG8gYmVoYXZlIG1vcmUgbmljZWx5IHdpdGggVjIuNi4wIGNoYW5nZXMuCisgICAgICAqIFJlbW92ZWQgYWxsIHByZWFsbG9jYXRpb24gY29kZSBzaW5jZSB1bmRlciBjdXJyZW50IHNjaGVtZQorICAgICAgICB0aGUgd29yayByZXF1aXJlZCB0byB1bmRvIGJhZCBwcmVhbGxvY2F0aW9ucyBleGNlZWRzCisgICAgICAgIHRoZSB3b3JrIHNhdmVkIGluIGdvb2QgY2FzZXMgZm9yIG1vc3QgdGVzdCBwcm9ncmFtcy4KKyAgICAgICogTm8gbG9uZ2VyIHVzZSByZXR1cm4gbGlzdCBvciB1bmNvbnNvbGlkYXRlZCBiaW5zIHNpbmNlCisgICAgICAgIG5vIHNjaGVtZSB1c2luZyB0aGVtIGNvbnNpc3RlbnRseSBvdXRwZXJmb3JtcyB0aG9zZSB0aGF0IGRvbid0CisgICAgICAgIGdpdmVuIGFib3ZlIGNoYW5nZXMuCisgICAgICAqIFVzZSBiZXN0IGZpdCBmb3IgdmVyeSBsYXJnZSBjaHVua3MgdG8gcHJldmVudCBzb21lIHdvcnN0LWNhc2VzLgorICAgICAgKiBBZGRlZCBzb21lIHN1cHBvcnQgZm9yIGRlYnVnZ2luZworCisgICAgVjIuNi4wIFNhdCBOb3YgIDQgMDc6MDU6MjMgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFJlbW92ZWQgZm9vdGVycyB3aGVuIGNodW5rcyBhcmUgaW4gdXNlLiBUaGFua3MgdG8KKyAgICAgICAgUGF1bCBXaWxzb24gKHdpbHNvbkBjcy50ZXhhcy5lZHUpIGZvciB0aGUgc3VnZ2VzdGlvbi4KKworICAgIFYyLjUuNCBXZWQgTm92ICAxIDA3OjU0OjUxIDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGRlZCBtYWxsb2NfdHJpbSwgd2l0aCBoZWxwIGZyb20gV29sZnJhbSBHbG9nZXIKKyAgICAgICAgKHdtZ2xvQERlbnQuTUVELlVuaS1NdWVuY2hlbi5ERSkuCisKKyAgICBWMi41LjMgVHVlIEFwciAyNiAxMDoxNjowMSAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCisKKyAgICBWMi41LjIgVHVlIEFwciAgNSAxNjoyMDo0MCAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCisgICAgICAqIHJlYWxsb2M6IHRyeSB0byBleHBhbmQgaW4gYm90aCBkaXJlY3Rpb25zCisgICAgICAqIG1hbGxvYzogc3dhcCBvcmRlciBvZiBjbGVhbi1iaW4gc3RyYXRlZ3k7CisgICAgICAqIHJlYWxsb2M6IG9ubHkgY29uZGl0aW9uYWxseSBleHBhbmQgYmFja3dhcmRzCisgICAgICAqIFRyeSBub3QgdG8gc2NhdmVuZ2UgdXNlZCBiaW5zCisgICAgICAqIFVzZSBiaW4gY291bnRzIGFzIGEgZ3VpZGUgdG8gcHJlYWxsb2NhdGlvbgorICAgICAgKiBPY2Nhc2lvbmFsbHkgYmluIHJldHVybiBsaXN0IGNodW5rcyBpbiBmaXJzdCBzY2FuCisgICAgICAqIEFkZCBhIGZldyBvcHRpbWl6YXRpb25zIGZyb20gY29saW5Abnl4MTAuY3MuZHUuZWR1CisKKyAgICBWMi41LjEgU2F0IEF1ZyAxNCAxNTo0MDo0MyAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcpCisgICAgICAqIGZhc3RlciBiaW4gY29tcHV0YXRpb24gJiBzbGlnaHRseSBkaWZmZXJlbnQgYmlubmluZworICAgICAgKiBtZXJnZWQgYWxsIGNvbnNvbGlkYXRpb25zIHRvIG9uZSBwYXJ0IG9mIG1hbGxvYyBwcm9wZXIKKyAgICAgICAgIChlbGltaW5hdGluZyBvbGQgbWFsbG9jX2ZpbmRfc3BhY2UgJiBtYWxsb2NfY2xlYW5fYmluKQorICAgICAgKiBTY2FuIDIgcmV0dXJucyBjaHVua3MgKG5vdCBqdXN0IDEpCisgICAgICAqIFByb3BhZ2F0ZSBmYWlsdXJlIGluIHJlYWxsb2MgaWYgbWFsbG9jIHJldHVybnMgMAorICAgICAgKiBBZGQgc3R1ZmYgdG8gYWxsb3cgY29tcGlsYXRpb24gb24gbm9uLUFOU0kgY29tcGlsZXJzCisgICAgICAgICAgZnJvbSBrcHZAcmVzZWFyY2guYXR0LmNvbQorCisgICAgVjIuNSBTYXQgQXVnICA3IDA3OjQxOjU5IDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQorICAgICAgKiByZW1vdmVkIHBvdGVudGlhbCBmb3Igb2RkIGFkZHJlc3MgYWNjZXNzIGluIHByZXZfY2h1bmsKKyAgICAgICogcmVtb3ZlZCBkZXBlbmRlbmN5IG9uIGdldHBhZ2VzaXplLmgKKyAgICAgICogbWlzYyBjb3NtZXRpY3MgYW5kIGEgYml0IG1vcmUgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbgorICAgICAgKiBhbnRpY29zbWV0aWNzOiBtYW5nbGVkIG5hbWVzIGluIG1hY3JvcyB0byBldmFkZSBkZWJ1Z2dlciBzdHJhbmdlbmVzcworICAgICAgKiB0ZXN0ZWQgb24gc3BhcmMsIGhwLTcwMCwgZGVjLW1pcHMsIHJzNjAwMAorICAgICAgICAgIHdpdGggZ2NjICYgbmF0aXZlIGNjIChocCwgZGVjIG9ubHkpIGFsbG93aW5nCisgICAgICAgICAgRGV0bGVmcyAmIFpvcm4gY29tcGFyaXNvbiBzdHVkeSAoaW4gU0lHUExBTiBOb3RpY2VzLikKKworICAgIFRyaWFsIHZlcnNpb24gRnJpIEF1ZyAyOCAxMzoxNDoyOSAxOTkyICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVkdSkKKyAgICAgICogQmFzZWQgbG9vc2VseSBvbiBsaWJnKystMS4yWCBtYWxsb2MuIChJdCByZXRhaW5zIHNvbWUgb2YgdGhlIG92ZXJhbGwKKyAgICAgICAgIHN0cnVjdHVyZSBvZiBvbGQgdmVyc2lvbiwgIGJ1dCBtb3N0IGRldGFpbHMgZGlmZmVyLikKKyAKKyovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9mcnYvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9mcnYvZmZpLmMKaW5kZXggY2VjNTc4MS4uNTY5OGM4OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZnJ2L2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Zydi9mZmkuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmZmkuYyAtIENvcHlyaWdodCAoQykgMjAwNCAgQW50aG9ueSBHcmVlbgotICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDA3ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAkgICBDb3B5cmlnaHQgKEMpIDIwMDggIFJlZCBIYXQsIEluYy4KICAgIAogICAgRlItViBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2phdmFfcmF3X2FwaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvamF2YV9yYXdfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM1MzgzZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2phdmFfcmF3X2FwaS5jCkBAIC0wLDAgKzEsMzU2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgamF2YV9yYXdfYXBpLmMgLSBDb3B5cmlnaHQgKGMpIDE5OTksIDIwMDcsIDIwMDggIFJlZCBIYXQsIEluYy4KKworICAgQ2xvbmVkIGZyb20gcmF3X2FwaS5jCisKKyAgIFJhd19hcGkuYyBhdXRob3I6IEtyZXN0ZW4gS3JhYiBUaG9ydXAgPGtyYWJAZ251Lm9yZz4KKyAgIEphdmFfcmF3X2FwaS5jIGF1dGhvcjogSGFucy1KLiBCb2VobSA8aGJvZWhtQGhwbC5ocC5jb20+CisKKyAgICRJZCAkCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoaXMgZGVmaW5lcyBhIEphdmEtIGFuZCA2NC1iaXQgc3BlY2lmaWMgdmFyaWFudCBvZiB0aGUgcmF3IEFQSS4JKi8KKy8qIEl0IGFzc3VtZXMgdGhhdCAicmF3IiBhcmd1bWVudCBibG9ja3MgbG9vayBsaWtlIEphdmEgc3RhY2tzIG9uIGEJKi8KKy8qIDY0LWJpdCBtYWNoaW5lLiAgQXJndW1lbnRzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiBhIHNpbmdsZSBzdGFjawkqLworLyogc3RhY2sgc2xvdHMgKGxvbmdzLCBkb3VibGVzKSBvY2N1cHkgMTI4IGJpdHMsIGJ1dCBvbmx5IHRoZSBmaXJzdAkqLworLyogNjQgYml0cyBhcmUgYWN0dWFsbHkgdXNlZC4JCQkJCQkqLworCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaWYgIWRlZmluZWQoTk9fSkFWQV9SQVdfQVBJKSAmJiAhZGVmaW5lZChGRklfTk9fUkFXX0FQSSkKKworc2l6ZV90CitmZmlfamF2YV9yYXdfc2l6ZSAoZmZpX2NpZiAqY2lmKQoreworICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgaW50IGk7CisKKyAgZmZpX3R5cGUgKiphdCA9IGNpZi0+YXJnX3R5cGVzOworCisgIGZvciAoaSA9IGNpZi0+bmFyZ3MtMTsgaSA+PSAwOyBpLS0sIGF0KyspCisgICAgeworICAgICAgc3dpdGNoKCgqYXQpIC0+IHR5cGUpIHsKKwljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX0RPVUJMRToKKwkgIHJlc3VsdCArPSAyICogRkZJX1NJWkVPRl9KQVZBX1JBVzsKKwkgIGJyZWFrOworCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgLyogTm8gc3RydWN0dXJlIHBhcmFtZXRlcnMgaW4gSmF2YS4JKi8KKwkgIGFib3J0KCk7CisJZGVmYXVsdDoKKwkgIHJlc3VsdCArPSBGRklfU0laRU9GX0pBVkFfUkFXOworICAgICAgfQorICAgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisKK3ZvaWQKK2ZmaV9qYXZhX3Jhd190b19wdHJhcnJheSAoZmZpX2NpZiAqY2lmLCBmZmlfamF2YV9yYXcgKnJhdywgdm9pZCAqKmFyZ3MpCit7CisgIHVuc2lnbmVkIGk7CisgIGZmaV90eXBlICoqdHAgPSBjaWYtPmFyZ190eXBlczsKKworI2lmIFdPUkRTX0JJR0VORElBTgorCisgIGZvciAoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyssIHRwKyssIGFyZ3MrKykKKyAgICB7CisgICAgICBzd2l0Y2ggKCgqdHApLT50eXBlKQorCXsKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICAqYXJncyA9ICh2b2lkKikgKChjaGFyKikocmF3KyspICsgMyk7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCSAgKmFyZ3MgPSAodm9pZCopICgoY2hhciopKHJhdysrKSArIDIpOworCSAgYnJlYWs7CisKKyNpZiBGRklfU0laRU9GX0pBVkFfUkFXID09IDgKKwljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX0RPVUJMRToKKwkgICphcmdzID0gKHZvaWQgKilyYXc7CisJICByYXcgKz0gMjsKKwkgIGJyZWFrOworI2VuZGlmCisKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJICAqYXJncyA9ICh2b2lkKikgJihyYXcrKyktPnB0cjsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgICphcmdzID0gcmF3OworCSAgcmF3ICs9CisJICAgIEFMSUdOICgoKnRwKS0+c2l6ZSwgc2l6ZW9mKGZmaV9qYXZhX3JhdykpIC8gc2l6ZW9mKGZmaV9qYXZhX3Jhdyk7CisJfQorICAgIH0KKworI2Vsc2UgLyogV09SRFNfQklHRU5ESUFOICovCisKKyNpZiAhUERQCisKKyAgLyogdGhlbiBhc3N1bWUgbGl0dGxlIGVuZGlhbiAqLworICBmb3IgKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrLCB0cCsrLCBhcmdzKyspCisgICAgeworI2lmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gOAorICAgICAgc3dpdGNoKCgqdHApLT50eXBlKSB7CisJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJICAqYXJncyA9ICh2b2lkKikgcmF3OworCSAgcmF3ICs9IDI7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgKmFyZ3MgPSAodm9pZCopIHJhdysrOworICAgICAgfQorI2Vsc2UgLyogRkZJX1NJWkVPRl9KQVZBX1JBVyAhPSA4ICovCisJKmFyZ3MgPSAodm9pZCopIHJhdzsKKwlyYXcgKz0KKwkgIEFMSUdOICgoKnRwKS0+c2l6ZSwgc2l6ZW9mKGZmaV9qYXZhX3JhdykpIC8gc2l6ZW9mKGZmaV9qYXZhX3Jhdyk7CisjZW5kaWYgLyogRkZJX1NJWkVPRl9KQVZBX1JBVyA9PSA4ICovCisgICAgfQorCisjZWxzZQorI2Vycm9yICJwZHAgZW5kaWFuIG5vdCBzdXBwb3J0ZWQiCisjZW5kaWYgLyogISBQRFAgKi8KKworI2VuZGlmIC8qIFdPUkRTX0JJR0VORElBTiAqLworfQorCit2b2lkCitmZmlfamF2YV9wdHJhcnJheV90b19yYXcgKGZmaV9jaWYgKmNpZiwgdm9pZCAqKmFyZ3MsIGZmaV9qYXZhX3JhdyAqcmF3KQoreworICB1bnNpZ25lZCBpOworICBmZmlfdHlwZSAqKnRwID0gY2lmLT5hcmdfdHlwZXM7CisKKyAgZm9yIChpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKywgdHArKywgYXJncysrKQorICAgIHsKKyAgICAgIHN3aXRjaCAoKCp0cCktPnR5cGUpCisJeworCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisjaWYgV09SRFNfQklHRU5ESUFOCisJICAqKFVJTlQzMiopKHJhdysrKSA9ICooVUlOVDgqKSAoKmFyZ3MpOworI2Vsc2UKKwkgIChyYXcrKyktPnVpbnQgPSAqKFVJTlQ4KikgKCphcmdzKTsKKyNlbmRpZgorCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorI2lmIFdPUkRTX0JJR0VORElBTgorCSAgKihTSU5UMzIqKShyYXcrKykgPSAqKFNJTlQ4KikgKCphcmdzKTsKKyNlbHNlCisJICAocmF3KyspLT5zaW50ID0gKihTSU5UOCopICgqYXJncyk7CisjZW5kaWYKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisjaWYgV09SRFNfQklHRU5ESUFOCisJICAqKFVJTlQzMiopKHJhdysrKSA9ICooVUlOVDE2KikgKCphcmdzKTsKKyNlbHNlCisJICAocmF3KyspLT51aW50ID0gKihVSU5UMTYqKSAoKmFyZ3MpOworI2VuZGlmCisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorI2lmIFdPUkRTX0JJR0VORElBTgorCSAgKihTSU5UMzIqKShyYXcrKykgPSAqKFNJTlQxNiopICgqYXJncyk7CisjZWxzZQorCSAgKHJhdysrKS0+c2ludCA9ICooU0lOVDE2KikgKCphcmdzKTsKKyNlbmRpZgorCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKyNpZiBXT1JEU19CSUdFTkRJQU4KKwkgICooVUlOVDMyKikocmF3KyspID0gKihVSU5UMzIqKSAoKmFyZ3MpOworI2Vsc2UKKwkgIChyYXcrKyktPnVpbnQgPSAqKFVJTlQzMiopICgqYXJncyk7CisjZW5kaWYKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TSU5UMzI6CisjaWYgV09SRFNfQklHRU5ESUFOCisJICAqKFNJTlQzMiopKHJhdysrKSA9ICooU0lOVDMyKikgKCphcmdzKTsKKyNlbHNlCisJICAocmF3KyspLT5zaW50ID0gKihTSU5UMzIqKSAoKmFyZ3MpOworI2VuZGlmCisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJICAocmF3KyspLT5mbHQgPSAqKEZMT0FUMzIqKSAoKmFyZ3MpOworCSAgYnJlYWs7CisKKyNpZiBGRklfU0laRU9GX0pBVkFfUkFXID09IDgKKwljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX0RPVUJMRToKKwkgIHJhdy0+dWludCA9ICooVUlOVDY0KikgKCphcmdzKTsKKwkgIHJhdyArPSAyOworCSAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwkgIChyYXcrKyktPnB0ciA9ICoqKHZvaWQqKiopIGFyZ3M7CisJICBicmVhazsKKworCWRlZmF1bHQ6CisjaWYgRkZJX1NJWkVPRl9KQVZBX1JBVyA9PSA4CisJICBGRklfQVNTRVJUKDApOwkvKiBTaG91bGQgaGF2ZSBjb3ZlcmVkIGFsbCBjYXNlcyAqLworI2Vsc2UKKwkgIG1lbWNweSAoKHZvaWQqKSByYXctPmRhdGEsICh2b2lkKikqYXJncywgKCp0cCktPnNpemUpOworCSAgcmF3ICs9CisJICAgIEFMSUdOICgoKnRwKS0+c2l6ZSwgc2l6ZW9mKGZmaV9qYXZhX3JhdykpIC8gc2l6ZW9mKGZmaV9qYXZhX3Jhdyk7CisjZW5kaWYKKwl9CisgICAgfQorfQorCisjaWYgIUZGSV9OQVRJVkVfUkFXX0FQSQorCitzdGF0aWMgdm9pZAorZmZpX2phdmFfcnZhbHVlX3RvX3JhdyAoZmZpX2NpZiAqY2lmLCB2b2lkICpydmFsdWUpCit7CisjaWYgV09SRFNfQklHRU5ESUFOICYmIEZGSV9TSVpFT0ZfQVJHID09IDgKKyAgc3dpdGNoIChjaWYtPnJ0eXBlLT50eXBlKQorICAgIHsKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgorICAgICAgKihVSU5UNjQgKilydmFsdWUgPDw9IDMyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDMyOgorICAgIGNhc2UgRkZJX1RZUEVfSU5UOgorI2lmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gNAorICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKyNlbmRpZgorICAgICAgKihTSU5UNjQgKilydmFsdWUgPDw9IDMyOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCitmZmlfamF2YV9yYXdfdG9fcnZhbHVlIChmZmlfY2lmICpjaWYsIHZvaWQgKnJ2YWx1ZSkKK3sKKyNpZiBXT1JEU19CSUdFTkRJQU4gJiYgRkZJX1NJWkVPRl9BUkcgPT0gOAorICBzd2l0Y2ggKGNpZi0+cnR5cGUtPnR5cGUpCisgICAgeworICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UMzI6CisgICAgICAqKFVJTlQ2NCAqKXJ2YWx1ZSA+Pj0gMzI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UMzI6CisgICAgY2FzZSBGRklfVFlQRV9JTlQ6CisgICAgICAqKFNJTlQ2NCAqKXJ2YWx1ZSA+Pj0gMzI7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKK30KKworLyogVGhpcyBpcyBhIGdlbmVyaWMgZGVmaW5pdGlvbiBvZiBmZmlfcmF3X2NhbGwsIHRvIGJlIHVzZWQgaWYgdGhlCisgKiBuYXRpdmUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgYSBtYWNoaW5lLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLgorICogSGF2aW5nIHRoaXMsIGFsbG93cyBjb2RlIHRvIGJlIHdyaXR0ZW4gZm9yIHRoZSByYXcgQVBJLCB3aXRob3V0CisgKiB0aGUgbmVlZCBmb3Igc3lzdGVtLXNwZWNpZmljIGNvZGUgdG8gaGFuZGxlIGlucHV0IGluIHRoYXQgZm9ybWF0OworICogdGhlc2UgZm9sbG93aW5nIGNvdXBsZSBvZiBmdW5jdGlvbnMgd2lsbCBoYW5kbGUgdGhlIHRyYW5zbGF0aW9uIGZvcnRoCisgKiBhbmQgYmFjayBhdXRvbWF0aWNhbGx5LiAqLworCit2b2lkIGZmaV9qYXZhX3Jhd19jYWxsIChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKnJ2YWx1ZSwKKwkJCWZmaV9qYXZhX3JhdyAqcmF3KQoreworICB2b2lkICoqYXZhbHVlID0gKHZvaWQqKikgYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkKikpOworICBmZmlfamF2YV9yYXdfdG9fcHRyYXJyYXkgKGNpZiwgcmF3LCBhdmFsdWUpOworICBmZmlfY2FsbCAoY2lmLCBmbiwgcnZhbHVlLCBhdmFsdWUpOworICBmZmlfamF2YV9ydmFsdWVfdG9fcmF3IChjaWYsIHJ2YWx1ZSk7Cit9CisKKyNpZiBGRklfQ0xPU1VSRVMJCS8qIGJhc2Ugc3lzdGVtIHByb3ZpZGVzIGNsb3N1cmVzICovCisKK3N0YXRpYyB2b2lkCitmZmlfamF2YV90cmFuc2xhdGVfYXJncyAoZmZpX2NpZiAqY2lmLCB2b2lkICpydmFsdWUsCisJCSAgICB2b2lkICoqYXZhbHVlLCB2b2lkICp1c2VyX2RhdGEpCit7CisgIGZmaV9qYXZhX3JhdyAqcmF3ID0gKGZmaV9qYXZhX3JhdyopYWxsb2NhIChmZmlfamF2YV9yYXdfc2l6ZSAoY2lmKSk7CisgIGZmaV9yYXdfY2xvc3VyZSAqY2wgPSAoZmZpX3Jhd19jbG9zdXJlKil1c2VyX2RhdGE7CisKKyAgZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3IChjaWYsIGF2YWx1ZSwgcmF3KTsKKyAgKCpjbC0+ZnVuKSAoY2lmLCBydmFsdWUsIHJhdywgY2wtPnVzZXJfZGF0YSk7CisgIGZmaV9qYXZhX3Jhd190b19ydmFsdWUgKGNpZiwgcnZhbHVlKTsKK30KKworZmZpX3N0YXR1cworZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MgKGZmaV9qYXZhX3Jhd19jbG9zdXJlKiBjbCwKKwkJCSAgICAgICBmZmlfY2lmICpjaWYsCisJCQkgICAgICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosZmZpX2phdmFfcmF3Kix2b2lkKiksCisJCQkgICAgICAgdm9pZCAqdXNlcl9kYXRhLAorCQkJICAgICAgIHZvaWQgKmNvZGVsb2MpCit7CisgIGZmaV9zdGF0dXMgc3RhdHVzOworCisgIHN0YXR1cyA9IGZmaV9wcmVwX2Nsb3N1cmVfbG9jICgoZmZpX2Nsb3N1cmUqKSBjbCwKKwkJCQkgY2lmLAorCQkJCSAmZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MsCisJCQkJIGNvZGVsb2MsCisJCQkJIGNvZGVsb2MpOworICBpZiAoc3RhdHVzID09IEZGSV9PSykKKyAgICB7CisgICAgICBjbC0+ZnVuICAgICAgID0gZnVuOworICAgICAgY2wtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKyAgICB9CisKKyAgcmV0dXJuIHN0YXR1czsKK30KKworLyogQWdhaW4sIGhlcmUgaXMgdGhlIGdlbmVyaWMgdmVyc2lvbiBvZiBmZmlfcHJlcF9yYXdfY2xvc3VyZSwgd2hpY2gKKyAqIHdpbGwgaW5zdGFsbCBhbiBpbnRlcm1lZGlhdGUgImh1YiIgZm9yIHRyYW5zbGF0aW9uIG9mIGFyZ3VtZW50cyBmcm9tCisgKiB0aGUgcG9pbnRlci1hcnJheSBmb3JtYXQsIHRvIHRoZSByYXcgZm9ybWF0ICovCisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmUgKGZmaV9qYXZhX3Jhd19jbG9zdXJlKiBjbCwKKwkJCSAgIGZmaV9jaWYgKmNpZiwKKwkJCSAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9qYXZhX3Jhdyosdm9pZCopLAorCQkJICAgdm9pZCAqdXNlcl9kYXRhKQoreworICByZXR1cm4gZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MgKGNsLCBjaWYsIGZ1biwgdXNlcl9kYXRhLCBjbCk7Cit9CisKKyNlbmRpZiAvKiBGRklfQ0xPU1VSRVMgKi8KKyNlbmRpZiAvKiAhRkZJX05BVElWRV9SQVdfQVBJICovCisjZW5kaWYgLyogIUZGSV9OT19SQVdfQVBJICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZmkuYwppbmRleCBiNjg4N2JlLi5kNzE0Y2M5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAogICBwX2FyZ3YgPSBlY2lmLT5hdmFsdWU7CiAKLSAgZm9yIChpID0gZWNpZi0+Y2lmLT5uYXJncywgcF9hcmcgPSBlY2lmLT5jaWYtPmFyZ190eXBlczsgaTsgaS0tLCBwX2FyZysrKQorICBmb3IgKGkgPSAwLCBwX2FyZyA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzOyBpIDwgZWNpZi0+Y2lmLT5uYXJnczsgaSsrLCBwX2FyZysrKQogICAgIHsKICAgICAgIHNpemVfdCB6OwogICAgICAgdW5zaWduZWQgaW50IGE7CkBAIC0xMjMsOSArMTIzLDI1IEBACiAKICAgICAgICAgICAvKiBUaGUgc2l6ZSBvZiBhIHBvaW50ZXIgZGVwZW5kcyBvbiB0aGUgQUJJICovCiAgICAgICAgICAgaWYgKHR5cGUgPT0gRkZJX1RZUEVfUE9JTlRFUikKLSAgICAgICAgICAgIHR5cGUgPQotICAgICAgICAgICAgICAoZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX042NCkgPyBGRklfVFlQRV9TSU5UNjQgOiBGRklfVFlQRV9TSU5UMzI7CisgICAgICAgICAgICB0eXBlID0gKGVjaWYtPmNpZi0+YWJpID09IEZGSV9ONjQKKwkJICAgIHx8IGVjaWYtPmNpZi0+YWJpID09IEZGSV9ONjRfU09GVF9GTE9BVCkKKwkgICAgICA/IEZGSV9UWVBFX1NJTlQ2NCA6IEZGSV9UWVBFX1NJTlQzMjsKIAorCWlmIChpIDwgOCAmJiAoZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX04zMl9TT0ZUX0ZMT0FUCisJCSAgICAgIHx8IGVjaWYtPmNpZi0+YWJpID09IEZGSV9ONjRfU09GVF9GTE9BVCkpCisJICB7CisJICAgIHN3aXRjaCAodHlwZSkKKwkgICAgICB7CisJICAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkJdHlwZSA9IEZGSV9UWVBFX1VJTlQzMjsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJCXR5cGUgPSBGRklfVFlQRV9VSU5UNjQ7CisJCWJyZWFrOworCSAgICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCSAgICAgIH0KKwkgIH0KIAkgIHN3aXRjaCAodHlwZSkKIAkgICAgewogCSAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CkBAIC0yMDUsMTMgKzIyMSwxNyBAQAogICAgZGVmaW5pdGlvbnMgYW5kIGdlbmVyYXRlcyB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MuICovCiAKIHN0YXRpYyB1bnNpZ25lZAotY2FsY19uMzJfc3RydWN0X2ZsYWdzKGZmaV90eXBlICphcmcsIHVuc2lnbmVkICpsb2MsIHVuc2lnbmVkICphcmdfcmVnKQorY2FsY19uMzJfc3RydWN0X2ZsYWdzKGludCBzb2Z0X2Zsb2F0LCBmZmlfdHlwZSAqYXJnLAorCQkgICAgICB1bnNpZ25lZCAqbG9jLCB1bnNpZ25lZCAqYXJnX3JlZykKIHsKICAgdW5zaWduZWQgZmxhZ3MgPSAwOwogICB1bnNpZ25lZCBpbmRleCA9IDA7CiAKICAgZmZpX3R5cGUgKmU7CiAKKyAgaWYgKHNvZnRfZmxvYXQpCisgICAgcmV0dXJuIDA7CisKICAgd2hpbGUgKChlID0gYXJnLT5lbGVtZW50c1tpbmRleF0pKQogICAgIHsKICAgICAgIC8qIEFsaWduIHRoaXMgb2JqZWN0LiAgKi8KQEAgLTIzNiw3ICsyNTYsNyBAQAogfQogCiBzdGF0aWMgdW5zaWduZWQKLWNhbGNfbjMyX3JldHVybl9zdHJ1Y3RfZmxhZ3MoZmZpX3R5cGUgKmFyZykKK2NhbGNfbjMyX3JldHVybl9zdHJ1Y3RfZmxhZ3MoaW50IHNvZnRfZmxvYXQsIGZmaV90eXBlICphcmcpCiB7CiAgIHVuc2lnbmVkIGZsYWdzID0gMDsKICAgdW5zaWduZWQgc21hbGwgPSBGRklfVFlQRV9TTUFMTFNUUlVDVDsKQEAgLTI1Niw2ICsyNzYsNyBAQAogICAgIHNtYWxsID0gRkZJX1RZUEVfU01BTExTVFJVQ1QyOwogCiAgIGUgPSBhcmctPmVsZW1lbnRzWzBdOworCiAgIGlmIChlLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKICAgICBmbGFncyA9IEZGSV9UWVBFX0RPVUJMRTsKICAgZWxzZSBpZiAoZS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCkKQEAgLTI3Niw2ICsyOTcsOCBAQAogCSAgICAgZmxvYXRzISBUaGlzIG11c3QgYmUgcGFzc2VkIHRoZSBvbGQgd2F5LiAqLwogCSAgcmV0dXJuIHNtYWxsOwogCX0KKyAgICAgIGlmIChzb2Z0X2Zsb2F0KQorCWZsYWdzICs9IEZGSV9UWVBFX1NUUlVDVF9TT0ZUOwogICAgIH0KICAgZWxzZQogICAgIGlmICghZmxhZ3MpCkBAIC0zODIsMTYgKzQwNSwxOSBAQAogI2lmZGVmIEZGSV9NSVBTX04zMgogICAvKiBTZXQgdGhlIGZsYWdzIG5lY2Vzc2FyeSBmb3IgTjMyIHByb2Nlc3NpbmcgKi8KICAgeworICAgIGludCB0eXBlOwogICAgIHVuc2lnbmVkIGFyZ19yZWcgPSAwOwogICAgIHVuc2lnbmVkIGxvYyA9IDA7CiAgICAgdW5zaWduZWQgY291bnQgPSAoY2lmLT5uYXJncyA8IDgpID8gY2lmLT5uYXJncyA6IDg7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogCiAgICAgdW5zaWduZWQgc3RydWN0X2ZsYWdzID0gMDsKKyAgICBpbnQgc29mdF9mbG9hdCA9IChjaWYtPmFiaSA9PSBGRklfTjMyX1NPRlRfRkxPQVQKKwkJICAgICAgfHwgY2lmLT5hYmkgPT0gRkZJX042NF9TT0ZUX0ZMT0FUKTsKIAogICAgIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKICAgICAgIHsKLQlzdHJ1Y3RfZmxhZ3MgPSBjYWxjX24zMl9yZXR1cm5fc3RydWN0X2ZsYWdzKGNpZi0+cnR5cGUpOworCXN0cnVjdF9mbGFncyA9IGNhbGNfbjMyX3JldHVybl9zdHJ1Y3RfZmxhZ3Moc29mdF9mbG9hdCwgY2lmLT5ydHlwZSk7CiAKIAlpZiAoc3RydWN0X2ZsYWdzID09IDApCiAJICB7CkBAIC00MTEsNyArNDM3LDIyIEBACiAKICAgICB3aGlsZSAoY291bnQtLSA+IDAgJiYgYXJnX3JlZyA8IDgpCiAgICAgICB7Ci0Jc3dpdGNoICgoY2lmLT5hcmdfdHlwZXMpW2luZGV4XS0+dHlwZSkKKwl0eXBlID0gKGNpZi0+YXJnX3R5cGVzKVtpbmRleF0tPnR5cGU7CisJaWYgKHNvZnRfZmxvYXQpCisJICB7CisJICAgIHN3aXRjaCAodHlwZSkKKwkgICAgICB7CisJICAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkJdHlwZSA9IEZGSV9UWVBFX1VJTlQzMjsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJCXR5cGUgPSBGRklfVFlQRV9VSU5UNjQ7CisJCWJyZWFrOworCSAgICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCSAgICAgIH0KKwkgIH0KKwlzd2l0Y2ggKHR5cGUpCiAJICB7CiAJICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgogCSAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CkBAIC00MjMsMTcgKzQ2NCwyNSBAQAogICAgICAgICAgICAgLyogQWxpZ24gaXQuICAqLwogICAgICAgICAgICAgYXJnX3JlZyA9IEFMSUdOKGFyZ19yZWcsIDIpOwogICAgICAgICAgICAgLyogVHJlYXQgaXQgYXMgdHdvIGFkamFjZW50IGRvdWJsZXMuICAqLwotCSAgICBjaWYtPmZsYWdzICs9Ci0gICAgICAgICAgICAgIChGRklfVFlQRV9ET1VCTEUgPDwgKGFyZ19yZWcgKiBGRklfRkxBR19CSVRTKSk7Ci0gICAgICAgICAgICBhcmdfcmVnKys7Ci0JICAgIGNpZi0+ZmxhZ3MgKz0KLSAgICAgICAgICAgICAgKEZGSV9UWVBFX0RPVUJMRSA8PCAoYXJnX3JlZyAqIEZGSV9GTEFHX0JJVFMpKTsKLSAgICAgICAgICAgIGFyZ19yZWcrKzsKKwkgICAgaWYgKHNvZnRfZmxvYXQpIAorCSAgICAgIHsKKwkJYXJnX3JlZyArPSAyOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJY2lmLT5mbGFncyArPQorCQkgIChGRklfVFlQRV9ET1VCTEUgPDwgKGFyZ19yZWcgKiBGRklfRkxBR19CSVRTKSk7CisJCWFyZ19yZWcrKzsKKwkJY2lmLT5mbGFncyArPQorCQkgIChGRklfVFlQRV9ET1VCTEUgPDwgKGFyZ19yZWcgKiBGRklfRkxBR19CSVRTKSk7CisJCWFyZ19yZWcrKzsKKwkgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogCSAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CiAgICAgICAgICAgICBsb2MgPSBhcmdfcmVnICogRkZJX1NJWkVPRl9BUkc7Ci0JICAgIGNpZi0+ZmxhZ3MgKz0gY2FsY19uMzJfc3RydWN0X2ZsYWdzKChjaWYtPmFyZ190eXBlcylbaW5kZXhdLAorCSAgICBjaWYtPmZsYWdzICs9IGNhbGNfbjMyX3N0cnVjdF9mbGFncyhzb2Z0X2Zsb2F0LAorCQkJCQkJKGNpZi0+YXJnX3R5cGVzKVtpbmRleF0sCiAJCQkJCQkmbG9jLCAmYXJnX3JlZyk7CiAJICAgIGJyZWFrOwogCkBAIC00NjksMTcgKzUxOCw0MyBAQAogICAgICAgY2FzZSBGRklfVFlQRV9WT0lEOgogCS8qIERvIG5vdGhpbmcsICdjYXVzZSBGRklfVFlQRV9WT0lEIGlzIDAgKi8KIAlicmVhazsKLQkKLSAgICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6Ci0gICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKLQljaWYtPmZsYWdzICs9IGNpZi0+cnR5cGUtPnR5cGUgPDwgKEZGSV9GTEFHX0JJVFMgKiA4KTsKKworICAgICAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCWlmIChjaWYtPmFiaSA9PSBGRklfTjMyX1NPRlRfRkxPQVQgfHwgY2lmLT5hYmkgPT0gRkZJX04zMikKKwkgIGNpZi0+ZmxhZ3MgKz0gRkZJX1RZUEVfU0lOVDMyIDw8IChGRklfRkxBR19CSVRTICogOCk7CisJZWxzZQorCSAgY2lmLT5mbGFncyArPSBGRklfVFlQRV9JTlQgPDwgKEZGSV9GTEFHX0JJVFMgKiA4KTsKIAlicmVhazsKKworICAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKKwlpZiAoc29mdF9mbG9hdCkKKwkgIHsKKwkgICAgY2lmLT5mbGFncyArPSBGRklfVFlQRV9TSU5UMzIgPDwgKEZGSV9GTEFHX0JJVFMgKiA4KTsKKwkgICAgYnJlYWs7CisJICB9CisJLyogZWxzZSBmYWxsIHRocm91Z2ggKi8KKyAgICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCWlmIChzb2Z0X2Zsb2F0KQorCSAgY2lmLT5mbGFncyArPSBGRklfVFlQRV9JTlQgPDwgKEZGSV9GTEFHX0JJVFMgKiA4KTsKKwllbHNlCisJICBjaWYtPmZsYWdzICs9IGNpZi0+cnR5cGUtPnR5cGUgPDwgKEZGSV9GTEFHX0JJVFMgKiA4KTsKKwlicmVhazsKKwogICAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgogCS8qIExvbmcgZG91YmxlIGlzIHJldHVybmVkIGFzIGlmIGl0IHdlcmUgYSBzdHJ1Y3QgY29udGFpbmluZwogCSAgIHR3byBkb3VibGVzLiAgKi8KLQljaWYtPmZsYWdzICs9IEZGSV9UWVBFX1NUUlVDVCA8PCAoRkZJX0ZMQUdfQklUUyAqIDgpOwotCWNpZi0+ZmxhZ3MgKz0gKEZGSV9UWVBFX0RPVUJMRSArIChGRklfVFlQRV9ET1VCTEUgPDwgRkZJX0ZMQUdfQklUUykpCi0JCSAgICAgIDw8ICg0ICsgKEZGSV9GTEFHX0JJVFMgKiA4KSk7CisJaWYgKHNvZnRfZmxvYXQpCisJICB7CisJICAgIGNpZi0+ZmxhZ3MgKz0gRkZJX1RZUEVfU1RSVUNUIDw8IChGRklfRkxBR19CSVRTICogOCk7CisJICAgIGNpZi0+ZmxhZ3MgKz0gRkZJX1RZUEVfU01BTExTVFJVQ1QyIDw8ICg0ICsgKEZGSV9GTEFHX0JJVFMgKiA4KSk7CisgCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgY2lmLT5mbGFncyArPSBGRklfVFlQRV9TVFJVQ1QgPDwgKEZGSV9GTEFHX0JJVFMgKiA4KTsKKwkgICAgY2lmLT5mbGFncyArPSAoRkZJX1RZUEVfRE9VQkxFCisJCQkgICArIChGRklfVFlQRV9ET1VCTEUgPDwgRkZJX0ZMQUdfQklUUykpCisJCQkJCSAgICAgIDw8ICg0ICsgKEZGSV9GTEFHX0JJVFMgKiA4KSk7CisJICB9CiAJYnJlYWs7CiAgICAgICBkZWZhdWx0OgogCWNpZi0+ZmxhZ3MgKz0gRkZJX1RZUEVfSU5UIDw8IChGRklfRkxBR19CSVRTICogOCk7CkBAIC00OTksNyArNTc0LDcgQEAKIC8qIExvdyBsZXZlbCByb3V0aW5lIGZvciBjYWxsaW5nIE4zMiBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgZmZpX2NhbGxfTjMyKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICosIGludCwgaW50KSwgCiAJCQlleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQsIAotCQkJdW5zaWduZWQsIHVuc2lnbmVkICosIHZvaWQgKCopKHZvaWQpKTsKKwkJCXVuc2lnbmVkLCB2b2lkICosIHZvaWQgKCopKHZvaWQpKTsKIAogdm9pZCBmZmlfY2FsbChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSkKIHsKQEAgLTUyOSwxMCArNjA0LDEzIEBACiAKICNpZmRlZiBGRklfTUlQU19OMzIKICAgICBjYXNlIEZGSV9OMzI6CisgICAgY2FzZSBGRklfTjMyX1NPRlRfRkxPQVQ6CiAgICAgY2FzZSBGRklfTjY0OgorICAgIGNhc2UgRkZJX042NF9TT0ZUX0ZMT0FUOgogICAgICAgewogICAgICAgICBpbnQgY29weV9ydmFsdWUgPSAwOwotICAgICAgICB2b2lkICpydmFsdWVfY29weSA9IGVjaWYucnZhbHVlOworCWludCBjb3B5X29mZnNldCA9IDA7CisgICAgICAgIGNoYXIgKnJ2YWx1ZV9jb3B5ID0gZWNpZi5ydmFsdWU7CiAgICAgICAgIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCAmJiBjaWYtPnJ0eXBlLT5zaXplIDwgMTYpCiAgICAgICAgICAgewogICAgICAgICAgICAgLyogRm9yIHN0cnVjdHVyZXMgc21hbGxlciB0aGFuIDE2IGJ5dGVzIHdlIGNsb2JiZXIgbWVtb3J5CkBAIC01NDEsMTAgKzYxOSwyMCBAQAogICAgICAgICAgICAgcnZhbHVlX2NvcHkgPSBhbGxvY2EoMTYpOwogICAgICAgICAgICAgY29weV9ydmFsdWUgPSAxOwogICAgICAgICAgIH0KKwllbHNlIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUCisJCSAmJiAoY2lmLT5hYmkgPT0gRkZJX042NF9TT0ZUX0ZMT0FUCisJCSAgICAgfHwgY2lmLT5hYmkgPT0gRkZJX04zMl9TT0ZUX0ZMT0FUKSkKKwkgIHsKKwkgICAgcnZhbHVlX2NvcHkgPSBhbGxvY2EgKDgpOworCSAgICBjb3B5X3J2YWx1ZSA9IDE7CisjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9NSVBTRUIpCisJICAgIGNvcHlfb2Zmc2V0ID0gNDsKKyNlbmRpZgorCSAgfQogICAgICAgICBmZmlfY2FsbF9OMzIoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICBjaWYtPmZsYWdzLCBydmFsdWVfY29weSwgZm4pOwogICAgICAgICBpZiAoY29weV9ydmFsdWUpCi0gICAgICAgICAgbWVtY3B5KGVjaWYucnZhbHVlLCBydmFsdWVfY29weSwgY2lmLT5ydHlwZS0+c2l6ZSk7CisgICAgICAgICAgbWVtY3B5KGVjaWYucnZhbHVlLCBydmFsdWVfY29weSArIGNvcHlfb2Zmc2V0LCBjaWYtPnJ0eXBlLT5zaXplKTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogI2VuZGlmCkBAIC02ODQsOSArNzcyLDEwIEBACiAgICAgewogICAgICAgaWYgKGkgPCAyICYmICFzZWVuX2ludCAmJgogCSAgKGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCB8fAotCSAgIGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpKQorCSAgIGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUgfHwKKwkgICBhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkpCiAJewotI2lmZGVmIF9fTUlQU0VCX18KKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX01JUFNFQikKIAkgIGlmIChhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQpCiAJICAgIGF2YWx1ZXBbaV0gPSAoKGNoYXIgKikgJmZwcltpXSkgKyBzaXplb2YgKGZsb2F0KTsKIAkgIGVsc2UKQEAgLTc1NSw3ICs4NDQsNyBAQAogc3RhdGljIHZvaWQKIGNvcHlfc3RydWN0X04zMihjaGFyICp0YXJnZXQsIHVuc2lnbmVkIG9mZnNldCwgZmZpX2FiaSBhYmksIGZmaV90eXBlICp0eXBlLAogICAgICAgICAgICAgICAgIGludCBhcmduLCB1bnNpZ25lZCBhcmdfb2Zmc2V0LCBmZmlfYXJnICphciwKLSAgICAgICAgICAgICAgICBmZmlfYXJnICpmcHIpCisgICAgICAgICAgICAgICAgZmZpX2FyZyAqZnByLCBpbnQgc29mdF9mbG9hdCkKIHsKICAgZmZpX3R5cGUgKiplbHRfdHlwZXAgPSB0eXBlLT5lbGVtZW50czsKICAgd2hpbGUoKmVsdF90eXBlcCkKQEAgLTc3Nyw3ICs4NjYsNyBAQAogCiAgICAgICB0cCA9IHRhcmdldCArIG9mZnNldDsKIAotICAgICAgaWYgKGVsdF90eXBlLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKKyAgICAgIGlmIChlbHRfdHlwZS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUgJiYgIXNvZnRfZmxvYXQpCiAgICAgICAgICooZG91YmxlICopdHAgPSAqKGRvdWJsZSAqKWZwcDsKICAgICAgIGVsc2UKICAgICAgICAgbWVtY3B5KHRwLCBhcmdwICsgYXJnX29mZnNldCwgZWx0X3R5cGUtPnNpemUpOwpAQCAtODE1LDggKzkwNCwxMiBAQAogICBmZmlfYXJnICphdmFsdWU7CiAgIGZmaV90eXBlICoqYXJnX3R5cGVzOwogICBpbnQgaSwgYXZuLCBhcmduOworICBpbnQgc29mdF9mbG9hdDsKKyAgZmZpX2FyZyAqYXJncDsKIAogICBjaWYgPSBjbG9zdXJlLT5jaWY7CisgIHNvZnRfZmxvYXQgPSBjaWYtPmFiaSA9PSBGRklfTjY0X1NPRlRfRkxPQVQKKyAgICB8fCBjaWYtPmFiaSA9PSBGRklfTjMyX1NPRlRfRkxPQVQ7CiAgIGF2YWx1ZSA9IGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAoZmZpX2FyZykpOwogICBhdmFsdWVwID0gYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mIChmZmlfYXJnKSk7CiAKQEAgLTgzOSwxMCArOTMyLDE2IEBACiAgIHdoaWxlIChpIDwgYXZuKQogICAgIHsKICAgICAgIGlmIChhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQKLSAgICAgICAgICB8fCBhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQorCSAgfHwgYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRQorCSAgfHwgYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCiAgICAgICAgIHsKLSAgICAgICAgICBmZmlfYXJnICphcmdwID0gYXJnbiA+PSA4ID8gYXIgKyBhcmduIDogZnByICsgYXJnbjsKLSNpZmRlZiBfX01JUFNFQl9fCisgICAgICAgICAgYXJncCA9IChhcmduID49IDggfHwgc29mdF9mbG9hdCkgPyBhciArIGFyZ24gOiBmcHIgKyBhcmduOworICAgICAgICAgIGlmICgoYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUpICYmICgodW5zaWduZWQpYXJncCAmIChhcmdfdHlwZXNbaV0tPmFsaWdubWVudC0xKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGFyZ3A9KGZmaV9hcmcqKUFMSUdOKGFyZ3AsYXJnX3R5cGVzW2ldLT5hbGlnbm1lbnQpOworICAgICAgICAgICAgICBhcmduKys7CisgICAgICAgICAgICB9CisjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9NSVBTRUIpCiAgICAgICAgICAgaWYgKGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCAmJiBhcmduIDwgOCkKICAgICAgICAgICAgIGF2YWx1ZXBbaV0gPSAoKGNoYXIgKikgYXJncCkgKyBzaXplb2YgKGZsb2F0KTsKICAgICAgICAgICBlbHNlCkBAIC04NTYsMTEgKzk1NSwxNSBAQAogICAgICAgICAgIGlmIChhcmdfdHlwZXNbaV0tPmFsaWdubWVudCA+IHNpemVvZihmZmlfYXJnKSkKICAgICAgICAgICAgIGFyZ24gPSBBTElHTihhcmduLCBhcmdfdHlwZXNbaV0tPmFsaWdubWVudCAvIHNpemVvZihmZmlfYXJnKSk7CiAKLSAgICAgICAgICBmZmlfYXJnICphcmdwID0gYXIgKyBhcmduOworICAgICAgICAgIGFyZ3AgPSBhciArIGFyZ247CiAKICAgICAgICAgICAvKiBUaGUgc2l6ZSBvZiBhIHBvaW50ZXIgZGVwZW5kcyBvbiB0aGUgQUJJICovCiAgICAgICAgICAgaWYgKHR5cGUgPT0gRkZJX1RZUEVfUE9JTlRFUikKLSAgICAgICAgICAgIHR5cGUgPSAoY2lmLT5hYmkgPT0gRkZJX042NCkgPyBGRklfVFlQRV9TSU5UNjQgOiBGRklfVFlQRV9TSU5UMzI7CisgICAgICAgICAgICB0eXBlID0gKGNpZi0+YWJpID09IEZGSV9ONjQgfHwgY2lmLT5hYmkgPT0gRkZJX042NF9TT0ZUX0ZMT0FUKQorCSAgICAgID8gRkZJX1RZUEVfU0lOVDY0IDogRkZJX1RZUEVfU0lOVDMyOworCisJICBpZiAoc29mdF9mbG9hdCAmJiB0eXBlID09ICBGRklfVFlQRV9GTE9BVCkKKwkgICAgdHlwZSA9IEZGSV9UWVBFX1VJTlQzMjsKIAogICAgICAgICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgICAgIHsKQEAgLTkwMSw3ICsxMDA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGl0IHdhcyBwYXNzZWQgaW4gcmVnaXN0ZXJzLiAgKi8KICAgICAgICAgICAgICAgICAgIGF2YWx1ZXBbaV0gPSBhbGxvY2EoYXJnX3R5cGVzW2ldLT5zaXplKTsKICAgICAgICAgICAgICAgICAgIGNvcHlfc3RydWN0X04zMihhdmFsdWVwW2ldLCAwLCBjaWYtPmFiaSwgYXJnX3R5cGVzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ24sIDAsIGFyLCBmcHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ24sIDAsIGFyLCBmcHIsIHNvZnRfZmxvYXQpOwogCiAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZml0YXJnZXQuaAppbmRleCAyMTRhZmU0Li5jNWY0ZTA1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaXRhcmdldC5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpdGFyZ2V0LmgKQEAgLTI4LDcgKzI4LDEwIEBACiAjZGVmaW5lIExJQkZGSV9UQVJHRVRfSAogCiAjaWZkZWYgbGludXgKLSNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgorIyBpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8c2dpZGVmcy5oPgorI2VuZGlmCiAjICBpZm5kZWYgX0FCSU4zMgogIyAgICBkZWZpbmUgX0FCSU4zMiBfTUlQU19TSU1fTkFCSTMyCiAjICBlbmRpZgpAQCAtMzgsNyArNDEsNiBAQAogIyAgaWZuZGVmIF9BQklPMzIKICMgICAgZGVmaW5lIF9BQklPMzIgX01JUFNfU0lNX0FCSTMyCiAjICBlbmRpZgotI2VuZGlmCiAKICNpZiAhZGVmaW5lZChfTUlQU19TSU0pCiAtLSBzb21ldGhpbmcgaXMgdmVyeSB3cm9uZyAtLQpAQCAtOTUsNiArOTcsMTUgQEAKICNkZWZpbmUgRkZJX1RZUEVfU1RSVUNUX0RGICAgICAxODkKICNkZWZpbmUgRkZJX1RZUEVfU1RSVUNUX1NNQUxMICA5MwogI2RlZmluZSBGRklfVFlQRV9TVFJVQ1RfU01BTEwyIDEwOQorCisvKiBhbmQgZm9yIG4zMiBzb2Z0IGZsb2F0LCBhZGQgMTYgKiAyXjQgKi8KKyNkZWZpbmUgRkZJX1RZUEVfU1RSVUNUX0RfU09GVCAgICAgIDMxNworI2RlZmluZSBGRklfVFlQRV9TVFJVQ1RfRl9TT0ZUICAgICAgMzAxCisjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVF9ERF9TT0ZUICAgICA1MDkKKyNkZWZpbmUgRkZJX1RZUEVfU1RSVUNUX0ZGX1NPRlQgICAgIDQyOQorI2RlZmluZSBGRklfVFlQRV9TVFJVQ1RfRkRfU09GVCAgICAgNDkzCisjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVF9ERl9TT0ZUICAgICA0NDUKKyNkZWZpbmUgRkZJX1RZUEVfU1RSVUNUX1NPRlQgICAgICAgIDE2CiAjZW5kaWYKIAogI2lmZGVmIExJQkZGSV9BU00KQEAgLTE0NSw3ICsxNTYsOCBAQAogIyBlbmRpZiAvKiBfTUlQU19TSU09PV9BQkk2NCAqLwogI2VuZGlmIC8qICFGRklfTUlQU19PMzIgKi8KICNlbHNlIC8qICFMSUJGRklfQVNNICovCi0jaWZkZWYgRkZJX01JUFNfTzMyCisjIGlmZGVmIF9fR05VQ19fCisjICBpZmRlZiBGRklfTUlQU19PMzIKIC8qIE8zMiBzdGFjayBmcmFtZXMgaGF2ZSAzMmJpdCBpbnRlZ2VyIGFyZ3MgKi8KIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICBmZmlfYXJnIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKIHR5cGVkZWYgc2lnbmVkICAgaW50ICAgICBmZmlfc2FyZyBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CkBAIC0xNTMsNyArMTY1LDE4IEBACiAvKiBOMzIgYW5kIE42NCBmcmFtZXMgaGF2ZSA2NGJpdCBpbnRlZ2VyIGFyZ3MgKi8KIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICBmZmlfYXJnIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKIHR5cGVkZWYgc2lnbmVkICAgaW50ICAgICBmZmlfc2FyZyBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7Ci0jZW5kaWYKKyMgIGVuZGlmCisjIGVsc2UKKyMgIGlmZGVmIEZGSV9NSVBTX08zMgorLyogTzMyIHN0YWNrIGZyYW1lcyBoYXZlIDMyYml0IGludGVnZXIgYXJncyAqLwordHlwZWRlZiBfX3VpbnQzMl90IGZmaV9hcmc7Cit0eXBlZGVmIF9faW50MzJfdCBmZmlfc2FyZzsKKyMgIGVsc2UKKy8qIE4zMiBhbmQgTjY0IGZyYW1lcyBoYXZlIDY0Yml0IGludGVnZXIgYXJncyAqLwordHlwZWRlZiBfX3VpbnQ2NF90IGZmaV9hcmc7Cit0eXBlZGVmIF9faW50NjRfdCBmZmlfc2FyZzsKKyMgIGVuZGlmCisjIGVuZGlmIC8qIF9fR05VQ19fICovCiAKIHR5cGVkZWYgZW51bSBmZmlfYWJpIHsKICAgRkZJX0ZJUlNUX0FCSSA9IDAsCkBAIC0xNjEsNiArMTg0LDggQEAKICAgRkZJX04zMiwKICAgRkZJX042NCwKICAgRkZJX08zMl9TT0ZUX0ZMT0FULAorICBGRklfTjMyX1NPRlRfRkxPQVQsCisgIEZGSV9ONjRfU09GVF9GTE9BVCwKIAogI2lmZGVmIEZGSV9NSVBTX08zMgogI2lmZGVmIF9fbWlwc19zb2Z0X2Zsb2F0CkBAIC0xNzAsOSArMTk1LDE3IEBACiAjZW5kaWYKICNlbHNlCiAjIGlmIF9NSVBTX1NJTT09X0FCSTY0CisjICBpZmRlZiBfX21pcHNfc29mdF9mbG9hdAorICBGRklfREVGQVVMVF9BQkkgPSBGRklfTjY0X1NPRlRfRkxPQVQsCisjICBlbHNlCiAgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9ONjQsCisjICBlbmRpZgogIyBlbHNlCisjICBpZmRlZiBfX21pcHNfc29mdF9mbG9hdAorICBGRklfREVGQVVMVF9BQkkgPSBGRklfTjMyX1NPRlRfRkxPQVQsCisjICBlbHNlCiAgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9OMzIsCisjICBlbmRpZgogIyBlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbjMyLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL24zMi5TCmluZGV4IDI4NjA3YjAuLmFlMjMwOTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbjMyLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9uMzIuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBuMzIuUyAtIENvcHlyaWdodCAoYykgMTk5NiwgMTk5OCwgMjAwNSAgUmVkIEhhdCwgSW5jLgorICAgbjMyLlMgLSBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTgsIDIwMDUsIDIwMDcsIDIwMDksIDIwMTAgIFJlZCBIYXQsIEluYy4KICAgIAogICAgTUlQUyBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKIApAQCAtMTQsMTQgKzE0LDE0IEBACiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAogICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAKLSAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKLSAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLSAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IKLQlBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBMSUJGRklfQVNNCQpAQCAtNDAsNyArNDAsOSBAQAogCiAjZGVmaW5lIFNJWkVPRl9GUkFNRQkoIDggKiBGRklfU0laRU9GX0FSRyApCiAKKyNpZmRlZiBfX0dOVUNfXwogCS5hYmljYWxscworI2VuZGlmCiAJLnRleHQKIAkuYWxpZ24JMgogCS5nbG9ibAlmZmlfY2FsbF9OMzIKQEAgLTIxNyw4ICsyMTksMTAgQEAKIAogCSMgU2hpZnQgdGhlIHJldHVybiB0eXBlIGZsYWcgb3ZlcgogCVNSTAl0NiwgOCpGRklfRkxBR19CSVRTCi0JCisKKwliZXEJdDYsIEZGSV9UWVBFX1NJTlQzMiwgcmV0aW50CQogCWJuZSAgICAgdDYsIEZGSV9UWVBFX0lOVCwgcmV0ZmxvYXQKK3JldGludDoKIAlqYWwJdDkKIAlSRUdfTAl0NCwgNCpGRklfU0laRU9GX0FSRygkZnApCiAJUkVHX1MJdjAsIDAodDQpCkBAIC0yNzcsMTIgKzI4MSw1OCBAQAogCWIJZXBpbG9ndWUKIAkKIHJldHN0cnVjdF9mX2Q6CQotCWJuZQl0NiwgRkZJX1RZUEVfU1RSVUNUX0ZELCByZXRzdHJ1Y3Rfc21hbGwKKwlibmUJdDYsIEZGSV9UWVBFX1NUUlVDVF9GRCwgcmV0c3RydWN0X2Rfc29mdAogCWphbAl0OQogCVJFR19MCXQ0LCA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKIAlzLnMJJGYwLCAwKHQ0KQogCXMuZAkkZjIsIDgodDQpCiAJYgllcGlsb2d1ZQorCityZXRzdHJ1Y3RfZF9zb2Z0OgorCWJuZQl0NiwgRkZJX1RZUEVfU1RSVUNUX0RfU09GVCwgcmV0c3RydWN0X2Zfc29mdAorCWphbAl0OQorCVJFR19MCXQ0LCA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKKwlzZAl2MCwgMCh0NCkKKwliCWVwaWxvZ3VlCisJCityZXRzdHJ1Y3RfZl9zb2Z0OgkKKwlibmUJdDYsIEZGSV9UWVBFX1NUUlVDVF9GX1NPRlQsIHJldHN0cnVjdF9kX2Rfc29mdAorCWphbAl0OQorCVJFR19MCXQ0LCA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKKwlzdwl2MCwgMCh0NCkKKwliCWVwaWxvZ3VlCisJCityZXRzdHJ1Y3RfZF9kX3NvZnQ6CQorCWJuZQl0NiwgRkZJX1RZUEVfU1RSVUNUX0REX1NPRlQsIHJldHN0cnVjdF9mX2Zfc29mdAorCWphbAl0OQorCVJFR19MCXQ0LCA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKKwlzZAl2MCwgMCh0NCkKKwlzZAl2MSwgOCh0NCkKKwliCWVwaWxvZ3VlCisJCityZXRzdHJ1Y3RfZl9mX3NvZnQ6CQorCWJuZQl0NiwgRkZJX1RZUEVfU1RSVUNUX0ZGX1NPRlQsIHJldHN0cnVjdF9kX2Zfc29mdAorCWphbAl0OQorCVJFR19MCXQ0LCA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKKwlzdwl2MCwgMCh0NCkKKwlzdwl2MSwgNCh0NCkKKwliCWVwaWxvZ3VlCisJCityZXRzdHJ1Y3RfZF9mX3NvZnQ6CQorCWJuZQl0NiwgRkZJX1RZUEVfU1RSVUNUX0RGX1NPRlQsIHJldHN0cnVjdF9mX2Rfc29mdAorCWphbAl0OQorCVJFR19MCXQ0LCA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKKwlzZAl2MCwgMCh0NCkKKwlzdwl2MSwgOCh0NCkKKwliCWVwaWxvZ3VlCisJCityZXRzdHJ1Y3RfZl9kX3NvZnQ6CQorCWJuZQl0NiwgRkZJX1RZUEVfU1RSVUNUX0ZEX1NPRlQsIHJldHN0cnVjdF9zbWFsbAorCWphbAl0OQorCVJFR19MCXQ0LCA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKKwlzdwl2MCwgMCh0NCkKKwlzZAl2MSwgOCh0NCkKKwliCWVwaWxvZ3VlCiAJCiByZXRzdHJ1Y3Rfc21hbGw6CQogCWJuZQl0NiwgRkZJX1RZUEVfU1RSVUNUX1NNQUxMLCByZXRzdHJ1Y3Rfc21hbGwyCkBAIC00MTMsNiArNDYzLDExIEBACiAJamFscgl0OQogCiAJIyBSZXR1cm4gZmxhZ3MgYXJlIGluIHYwCisJYm5lICAgICB2MCwgRkZJX1RZUEVfU0lOVDMyLCBjbHNfcmV0aW50CisJbHcJdjAsIFYwX09GRjIoJHNwKQorCWIJY2xzX2VwaWxvZ3VlCisKK2Nsc19yZXRpbnQ6CiAJYm5lICAgICB2MCwgRkZJX1RZUEVfSU5ULCBjbHNfcmV0ZmxvYXQKIAlSRUdfTAl2MCwgVjBfT0ZGMigkc3ApCiAJYgljbHNfZXBpbG9ndWUKQEAgLTQ3NCw2ICs1MjksNyBAQAogLkxGRTI6CQogCS5lbmQJZmZpX2Nsb3N1cmVfTjMyCiAKKyNpZmRlZiBfX0dOVUNfXwogICAgICAgICAuc2VjdGlvbiAgICAgICAgLmVoX2ZyYW1lLCJhdyIsQHByb2diaXRzCiAuTGZyYW1lMToKICAgICAgICAgLjRieXRlICAuTEVDSUUxLS5MU0NJRTEJCSMgbGVuZ3RoCkBAIC01MzAsNSArNTg2LDYgQEAKIAkudWxlYjEyOCAoU0laRU9GX0ZSQU1FMiAtIFJBX09GRjIpLzQKIAkuYWxpZ24JRUhfRlJBTUVfQUxJR04KIC5MRUZERTM6CisjZW5kaWYgLyogX19HTlVDX18gKi8JCiAJCiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbzMyLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL28zMi5TCmluZGV4IDJlODBlOWMuLmViMjc5ODEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbzMyLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9vMzIuUwpAQCAtMTQsMTQgKzE0LDE0IEBACiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAogICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAKLSAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKLSAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLSAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IKLQlBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBMSUJGRklfQVNNCQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbW94aWUvZWFiaS5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbW94aWUvZWFiaS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OWVhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tb3hpZS9lYWJpLlMKQEAgLTAsMCArMSwxMjggQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBlYWJpLlMgLSBDb3B5cmlnaHQgKGMpIDIwMDQgIEFudGhvbnkgR3JlZW4KKyAgIAorICAgRlItViBBc3NlbWJseSBnbHVlLgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIExJQkZGSV9BU00JCisjaW5jbHVkZSA8ZmZpY29uZmlnLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisKKwkuZ2xvYmwgZmZpX3ByZXBfYXJnc19FQUJJCisKKwkudGV4dAorCS5wMmFsaWduIDQKKwkuZ2xvYmwgZmZpX2NhbGxfRUFCSQorCS50eXBlIGZmaV9jYWxsX0VBQkksIEBmdW5jdGlvbgorCisJIyBncjggOiAgIGZmaV9wcmVwX2FyZ3MKKwkjIGdyOSA6ICAgJmVjaWYKKwkjIGdyMTA6ICAgY2lmLT5ieXRlcworCSMgZ3IxMTogICBmaWctPmZsYWdzCisJIyBncjEyOiAgIGVjaWYucnZhbHVlCisJIyBncjEzOiAgIGZuCisJCitmZmlfY2FsbF9FQUJJOgkKKwlhZGRpCXNwLCAjLTgwLCBzcAorCXN0aQlmcCwgQChzcCwgIzI0KQorCWFkZGkJc3AsICMyNCwgZnAKKwltb3ZzZwlsciwgZ3I1CisKKwkvKiBNYWtlIHJvb20gZm9yIHRoZSBuZXcgYXJndW1lbnRzLiAgKi8KKwkvKiBzdWJpCXNwLCBmcCwgZ3IxMCAqLworCQorCS8qIFN0b3JlIHJldHVybiBhZGRyZXNzIGFuZCBpbmNvbWluZyBhcmdzIG9uIHN0YWNrLiAgKi8KKwlzdGkJZ3I1LCBAKGZwLCAjOCkKKwlzdGkJZ3I4LCBAKGZwLCAjLTQpCisJc3RpCWdyOSwgQChmcCwgIy04KQorCXN0aQlncjEwLCBAKGZwLCAjLTEyKQorCXN0aQlncjExLCBAKGZwLCAjLTE2KQorCXN0aQlncjEyLCBAKGZwLCAjLTIwKQorCXN0aQlncjEzLCBAKGZwLCAjLTI0KQorCisJc3ViICAgICBzcCwgZ3IxMCwgc3AKKwkKKwkvKiBDYWxsIGZmaV9wcmVwX2FyZ3MuICAqLworCWxkaQlAKGZwLCAjLTQpLCBncjQKKwlhZGRpCXNwLCAjMCwgZ3I4CisJbGRpCUAoZnAsICMtOCksIGdyOQorI2lmZGVmIF9fRlJWX0ZEUElDX18KKwlsZGQJQChncjQsIGdyMCksIGdyMTQKKwljYWxsbAlAKGdyMTQsIGdyMCkKKyNlbHNlCisJY2FsbGwJQChncjQsIGdyMCkKKyNlbmRpZgkKKworCS8qIGZmaV9wcmVwX2FyZ3MgcmV0dXJucyB0aGUgbmV3IHN0YWNrIHBvaW50ZXIuICAqLworCW1vdglncjgsIGdyNAorCQkKKwlsZGkJQChzcCwgIzApLCBncjgKKwlsZGkJQChzcCwgIzQpLCBncjkKKwlsZGkJQChzcCwgIzgpLCBncjEwCisJbGRpCUAoc3AsICMxMiksIGdyMTEKKwlsZGkJQChzcCwgIzE2KSwgZ3IxMgorCWxkaQlAKHNwLCAjMjApLCBncjEzCisKKwkvKiBBbHdheXMgY29weSB0aGUgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaW50byB0aGUgaGlkZGVuCisJICAgcGFyYW1ldGVyIHJlZ2lzdGVyLiAgVGhpcyBpcyBvbmx5IHN0cmljdGx5IG5lY2Vzc2FyeQorCSAgIHdoZW4gd2UncmUgcmV0dXJuaW5nIGFuIGFnZ3JlZ2F0ZSB0eXBlLCBidXQgaXQgZG9lc24ndAorCSAgIGh1cnQgdG8gZG8gdGhpcyBhbGwgdGhlIHRpbWUsIGFuZCBpdCBzYXZlcyBhIGJyYW5jaC4gICovCisJbGRpCUAoZnAsICMtMjApLCBncjMKKworCS8qIFVzZSB0aGUgZmZpX3ByZXBfYXJncyByZXR1cm4gdmFsdWUgZm9yIHRoZSBuZXcgc3AuICAqLworCW1vdglncjQsIHNwCisJCisJLyogQ2FsbCB0aGUgdGFyZ2V0IGZ1bmN0aW9uLiAgKi8KKwlsZGkJQChmcCwgLTI0KSwgZ3I0CisjaWZkZWYgX19GUlZfRkRQSUNfXworCWxkZAlAKGdyNCwgZ3IwKSwgZ3IxNAorCWNhbGxsCUAoZ3IxNCwgZ3IwKQorI2Vsc2UKKwljYWxsbAlAKGdyNCwgZ3IwKQorI2VuZGlmCQorCisJLyogU3RvcmUgdGhlIHJlc3VsdC4gKi8KKwlsZGkJQChmcCwgIy0xNiksIGdyMTAgIC8qIGZpZy0+ZmxhZ3MgKi8KKwlsZGkJQChmcCwgIy0yMCksIGdyNCAgIC8qIGVjaWYucnZhbHVlICovCisKKwkvKiBJcyB0aGUgcmV0dXJuIHZhbHVlIHN0b3JlZCBpbiB0d28gcmVnaXN0ZXJzPyAgKi8KKwljbXBpCWdyMTAsICM4LCBpY2MwCisJYm5lCWljYzAsIDAsIC5MMgorCS8qICAgWWVzLCBzYXZlIHRoZW0uICAqLworCXN0aQlncjgsIEAoZ3I0LCAjMCkKKwlzdGkJZ3I5LCBAKGdyNCwgIzQpCisJYnJhCS5MMworLkwyOgorCS8qIElzIHRoZSByZXR1cm4gdmFsdWUgYSBzdHJ1Y3R1cmU/ICAqLworCWNtcGkJZ3IxMCwgIy0xLCBpY2MwCisJYmVxCWljYzAsIDAsIC5MMworCS8qICAgTm8sIHNhdmUgYSA0IGJ5dGUgcmV0dXJuIHZhbHVlLiAgKi8KKwlzdGkJZ3I4LCBAKGdyNCwgIzApCisuTDM6CQorCisJLyogUmVzdG9yZSB0aGUgc3RhY2ssIGFuZCByZXR1cm4uICAqLworCWxkaQlAKGZwLCA4KSwgZ3I1CisJbGQJQChmcCwgZ3IwKSwgZnAKKwlhZGRpCXNwLCM4MCxzcAorCWptcGwJQChncjUsZ3IwKQorCS5zaXplIGZmaV9jYWxsX0VBQkksIC4tZmZpX2NhbGxfRUFCSQorCQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbW94aWUvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tb3hpZS9mZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGNiYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbW94aWUvZmZpLmMKQEAgLTAsMCArMSwyNzYgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmZmkuYyAtIENvcHlyaWdodCAoQykgMjAwOSAgQW50aG9ueSBHcmVlbgorICAgCisgICBNb3hpZSBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBmZmlfcHJlcF9hcmdzIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCisgICBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cyAqLworCit2b2lkICpmZmlfcHJlcF9hcmdzKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYpCit7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpOworICByZWdpc3RlciB2b2lkICoqcF9hcmd2OworICByZWdpc3RlciBjaGFyICphcmdwOworICByZWdpc3RlciBmZmlfdHlwZSAqKnBfYXJnOworICByZWdpc3RlciBpbnQgY291bnQgPSAwOworCisgIHBfYXJndiA9IGVjaWYtPmF2YWx1ZTsKKyAgYXJncCA9IHN0YWNrOworCisgIGZvciAoaSA9IGVjaWYtPmNpZi0+bmFyZ3MsIHBfYXJnID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXM7CisgICAgICAgKGkgIT0gMCk7CisgICAgICAgaS0tLCBwX2FyZysrKQorICAgIHsKKyAgICAgIHNpemVfdCB6OworICAgICAgCisgICAgICB6ID0gKCpwX2FyZyktPnNpemU7CisKKyAgICAgIGlmICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCisJeworCSAgeiA9IHNpemVvZih2b2lkKik7CisJICAqKHZvaWQgKiopIGFyZ3AgPSAqcF9hcmd2OworCX0gCisgICAgICAvKiAgICAgIGlmICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCkKKwl7CisJICBpZiAoY291bnQgPiAyNCkKKwkgICAgeworCSAgICAgIC8vIFRoaXMgaXMgZ29pbmcgb24gdGhlIHN0YWNrLiAgVHVybiBpdCBpbnRvIGEgZG91YmxlLiAgCisJICAgICAgKihkb3VibGUgKikgYXJncCA9IChkb3VibGUpICooZmxvYXQqKSgqIHBfYXJndik7CisJICAgICAgeiA9IHNpemVvZihkb3VibGUpOworCSAgICB9CisJICBlbHNlCisJICAgICoodm9pZCAqKikgYXJncCA9ICoodm9pZCAqKikoKiBwX2FyZ3YpOworCX0gICovCisgICAgICBlbHNlIGlmICh6IDwgc2l6ZW9mKGludCkpCisJeworCSAgeiA9IHNpemVvZihpbnQpOworCSAgc3dpdGNoICgoKnBfYXJnKS0+dHlwZSkKKwkgICAgeworCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpKihTSU5UOCAqKSgqIHBfYXJndik7CisJICAgICAgYnJlYWs7CisJICAgICAgCisJICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisJICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UOCAqKSgqIHBfYXJndik7CisJICAgICAgYnJlYWs7CisJICAgICAgCisJICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpKihTSU5UMTYgKikoKiBwX2FyZ3YpOworCSAgICAgIGJyZWFrOworCQkgIAorCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQxNiAqKSgqIHBfYXJndik7CisJICAgICAgYnJlYWs7CisJCSAgCisJICAgIGRlZmF1bHQ6CisJICAgICAgRkZJX0FTU0VSVCgwKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHogPT0gc2l6ZW9mKGludCkpCisJeworCSAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMzIgKikoKiBwX2FyZ3YpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtZW1jcHkoYXJncCwgKnBfYXJndiwgeik7CisJfQorICAgICAgcF9hcmd2Kys7CisgICAgICBhcmdwICs9IHo7CisgICAgICBjb3VudCArPSB6OworICAgIH0KKworICByZXR1cm4gKHN0YWNrICsgKChjb3VudCA+IDI0KSA/IDI0IDogQUxJR05fRE9XTihjb3VudCwgOCkpKTsKK30KKworLyogUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZyAqLworZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfbWFjaGRlcChmZmlfY2lmICpjaWYpCit7CisgIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKKyAgICBjaWYtPmZsYWdzID0gLTE7CisgIGVsc2UKKyAgICBjaWYtPmZsYWdzID0gY2lmLT5ydHlwZS0+c2l6ZTsKKworICBjaWYtPmJ5dGVzID0gQUxJR04gKGNpZi0+Ynl0ZXMsIDgpOworCisgIHJldHVybiBGRklfT0s7Cit9CisKK2V4dGVybiB2b2lkIGZmaV9jYWxsX0VBQkkodm9pZCAqKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCAKKwkJCSAgZXh0ZW5kZWRfY2lmICosIAorCQkJICB1bnNpZ25lZCwgdW5zaWduZWQsIAorCQkJICB1bnNpZ25lZCAqLCAKKwkJCSAgdm9pZCAoKmZuKSh2b2lkKSk7CisKK3ZvaWQgZmZpX2NhbGwoZmZpX2NpZiAqY2lmLCAKKwkgICAgICB2b2lkICgqZm4pKHZvaWQpLCAKKwkgICAgICB2b2lkICpydmFsdWUsIAorCSAgICAgIHZvaWQgKiphdmFsdWUpCit7CisgIGV4dGVuZGVkX2NpZiBlY2lmOworCisgIGVjaWYuY2lmID0gY2lmOworICBlY2lmLmF2YWx1ZSA9IGF2YWx1ZTsKKyAgCisgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUgYSByZXR1cm4JKi8KKyAgLyogdmFsdWUgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUJCSAgICAgICAgKi8KKworICBpZiAoKHJ2YWx1ZSA9PSBOVUxMKSAmJiAKKyAgICAgIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkpCisgICAgeworICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EoY2lmLT5ydHlwZS0+c2l6ZSk7CisgICAgfQorICBlbHNlCisgICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7CisgICAgCisgIAorICBzd2l0Y2ggKGNpZi0+YWJpKSAKKyAgICB7CisgICAgY2FzZSBGRklfRUFCSToKKyAgICAgIGZmaV9jYWxsX0VBQkkoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsIAorCQkgICAgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBGRklfQVNTRVJUKDApOworICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIGZmaV9jbG9zdXJlX2VhYmkgKHVuc2lnbmVkIGFyZzEsIHVuc2lnbmVkIGFyZzIsIHVuc2lnbmVkIGFyZzMsCisJCSAgICAgICB1bnNpZ25lZCBhcmc0LCB1bnNpZ25lZCBhcmc1LCB1bnNpZ25lZCBhcmc2KQoreworICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBhIHRyYW1wb2xpbmUuICBUaGUgdHJhbXBvbGluZSBzdG93cyBhCisgICAgIHBvaW50ZXIgdG8gdGhlIGZmaV9jbG9zdXJlIG9iamVjdCBpbiBncjcuICBXZSBtdXN0IHNhdmUgdGhpcworICAgICBwb2ludGVyIGluIGEgcGxhY2UgdGhhdCB3aWxsIHBlcnNpc3Qgd2hpbGUgd2UgZG8gb3VyIHdvcmsuICAqLworICByZWdpc3RlciBmZmlfY2xvc3VyZSAqY3JlZyBfX2FzbV9fICgiZ3I3Iik7CisgIGZmaV9jbG9zdXJlICpjbG9zdXJlID0gY3JlZzsKKworICAvKiBBcmd1bWVudHMgdGhhdCBkb24ndCBmaXQgaW4gcmVnaXN0ZXJzIGFyZSBmb3VuZCBvbiB0aGUgc3RhY2sKKyAgICAgYXQgYSBmaXhlZCBvZmZzZXQgYWJvdmUgdGhlIGN1cnJlbnQgZnJhbWUgcG9pbnRlci4gICovCisgIHJlZ2lzdGVyIGNoYXIgKmZyYW1lX3BvaW50ZXIgX19hc21fXyAoImZwIik7CisgIGNoYXIgKnN0YWNrX2FyZ3MgPSBmcmFtZV9wb2ludGVyICsgMTY7CisKKyAgLyogTGF5IHRoZSByZWdpc3RlciBhcmd1bWVudHMgZG93biBpbiBhIGNvbnRpbnVvdXMgY2h1bmsgb2YgbWVtb3J5LiAgKi8KKyAgdW5zaWduZWQgcmVnaXN0ZXJfYXJnc1s2XSA9CisgICAgeyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2IH07CisKKyAgZmZpX2NpZiAqY2lmID0gY2xvc3VyZS0+Y2lmOworICBmZmlfdHlwZSAqKmFyZ190eXBlcyA9IGNpZi0+YXJnX3R5cGVzOworICB2b2lkICoqYXZhbHVlID0gYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mKHZvaWQgKikpOworICBjaGFyICpwdHIgPSAoY2hhciAqKSByZWdpc3Rlcl9hcmdzOworICBpbnQgaTsKKworICAvKiBGaW5kIHRoZSBhZGRyZXNzIG9mIGVhY2ggYXJndW1lbnQuICAqLworICBmb3IgKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrKQorICAgIHsKKyAgICAgIHN3aXRjaCAoYXJnX3R5cGVzW2ldLT50eXBlKQorCXsKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisJICBhdmFsdWVbaV0gPSBwdHIgKyAzOworCSAgYnJlYWs7CisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJICBhdmFsdWVbaV0gPSBwdHIgKyAyOworCSAgYnJlYWs7CisJY2FzZSBGRklfVFlQRV9TSU5UMzI6CisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisJY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkgIGF2YWx1ZVtpXSA9IHB0cjsKKwkgIGJyZWFrOworCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgYXZhbHVlW2ldID0gKih2b2lkKiopcHRyOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIC8qIFRoaXMgaXMgYW4gOC1ieXRlIHZhbHVlLiAgKi8KKwkgIGF2YWx1ZVtpXSA9IHB0cjsKKwkgIHB0ciArPSA0OworCSAgYnJlYWs7CisJfQorICAgICAgcHRyICs9IDQ7CisKKyAgICAgIC8qIElmIHdlJ3ZlIGhhbmRsZWQgbW9yZSBhcmd1bWVudHMgdGhhbiBmaXQgaW4gcmVnaXN0ZXJzLAorCSBzdGFydCBsb29raW5nIGF0IHRoZSB0aG9zZSBwYXNzZWQgb24gdGhlIHN0YWNrLiAgKi8KKyAgICAgIGlmIChwdHIgPT0gKChjaGFyICopcmVnaXN0ZXJfYXJncyArICg2KjQpKSkKKwlwdHIgPSBzdGFja19hcmdzOworICAgIH0KKworICAvKiBJbnZva2UgdGhlIGNsb3N1cmUuICAqLworICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCisgICAgeworICAgICAgLyogVGhlIGNhbGxlciBhbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSByZXR1cm4gc3RydWN0dXJlLCBhbmQKKyAgICAgICBwYXNzZXMgYSBwb2ludGVyIHRvIHRoaXMgc3BhY2UgaW4gZ3IzLiAgVXNlIHRoaXMgdmFsdWUgZGlyZWN0bHkKKyAgICAgICBhcyB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKyAgICAgIHJlZ2lzdGVyIHZvaWQgKnJldHVybl9zdHJ1Y3RfcHRyIF9fYXNtX18oImdyMyIpOworICAgICAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgcmV0dXJuX3N0cnVjdF9wdHIsIGF2YWx1ZSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgY2FsbCB0aGUgZnVuY3Rpb24uICAqLworICAgICAgbG9uZyBsb25nIHJ2YWx1ZTsKKyAgICAgIChjbG9zdXJlLT5mdW4pIChjaWYsICZydmFsdWUsIGF2YWx1ZSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKKworICAgICAgLyogRnVuY3Rpb25zIHJldHVybiA0LWJ5dGUgb3Igc21hbGxlciByZXN1bHRzIGluIGdyOC4gIDgtYnl0ZQorCSB2YWx1ZXMgYWxzbyB1c2UgZ3I5LiAgV2UgZmlsbCB0aGUgYm90aCwgZXZlbiBmb3Igc21hbGwgcmV0dXJuCisJIHZhbHVlcywganVzdCB0byBhdm9pZCBhIGJyYW5jaC4gICovIAorICAgICAgYXNtICgibGRpICBAKCUwLCAjMCksIGdyOCIgOiA6ICJyIiAoJnJ2YWx1ZSkpOworICAgICAgYXNtICgibGRpICBAKCUwLCAjMCksIGdyOSIgOiA6ICJyIiAoJigoaW50ICopICZydmFsdWUpWzFdKSk7CisgICAgfQorfQorCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUqIGNsb3N1cmUsCisJCSAgICAgIGZmaV9jaWYqIGNpZiwKKwkJICAgICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosIHZvaWQqLCB2b2lkKiosIHZvaWQqKSwKKwkJICAgICAgdm9pZCAqdXNlcl9kYXRhLAorCQkgICAgICB2b2lkICpjb2RlbG9jKQoreworICB1bnNpZ25lZCBpbnQgKnRyYW1wID0gKHVuc2lnbmVkIGludCAqKSAmY2xvc3VyZS0+dHJhbXBbMF07CisgIHVuc2lnbmVkIGxvbmcgZm4gPSAobG9uZykgZmZpX2Nsb3N1cmVfZWFiaTsKKyAgdW5zaWduZWQgbG9uZyBjbHMgPSAobG9uZykgY29kZWxvYzsKKyAgaW50IGk7CisKKyAgZm4gPSAodW5zaWduZWQgbG9uZykgZmZpX2Nsb3N1cmVfZWFiaTsKKworICB0cmFtcFswXSA9IDB4OGNmYzAwMDAgKyAoZm4gICYgMHhmZmZmKTsgLyogc2V0bG9zIGxvKGZuKSwgZ3I2ICAgICovCisgIHRyYW1wWzFdID0gMHg4ZWZjMDAwMCArIChjbHMgJiAweGZmZmYpOyAvKiBzZXRsb3MgbG8oY2xzKSwgZ3I3ICAgKi8KKyAgdHJhbXBbMl0gPSAweDhjZjgwMDAwICsgKGZuICA+PiAxNik7CSAgLyogc2V0aGkgaGkoZm4pLCBncjYgICAgICovCisgIHRyYW1wWzNdID0gMHg4ZWY4MDAwMCArIChjbHMgPj4gMTYpOyAgICAvKiBzZXRoaSBoaShjbHMpLCBncjcgICAgKi8KKyAgdHJhbXBbNF0gPSAweDgwMzAwMDA2OyAgICAgICAgICAgICAgICAgIC8qIGptcGwgQChncjAsIGdyNikgICAgICAqLworCisgIGNsb3N1cmUtPmNpZiA9IGNpZjsKKyAgY2xvc3VyZS0+ZnVuID0gZnVuOworICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisKKyAgLyogQ2FjaGUgZmx1c2hpbmcuICAqLworICBmb3IgKGkgPSAwOyBpIDwgRkZJX1RSQU1QT0xJTkVfU0laRTsgaSsrKQorICAgIF9fYXNtX18gdm9sYXRpbGUgKCJkY2YgQCglMCwlMSlcblx0aWNpIEAoJTIsJTEpIiA6OiAiciIgKHRyYW1wKSwgInIiIChpKSwKKwkJICAgICAgInIiIChjb2RlbG9jKSk7CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21veGllL2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbW94aWUvZmZpdGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzMDVkMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21veGllL2ZmaXRhcmdldC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi1DLSotCisgICBmZml0YXJnZXQuaCAtIENvcHlyaWdodCAoYykgMjAwOSBBbnRob255IEdyZWVuCisgICBUYXJnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MgZm9yIE1veGllCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBMSUJGRklfVEFSR0VUX0gKKyNkZWZpbmUgTElCRkZJX1RBUkdFVF9ICisKKy8qIC0tLS0gU3lzdGVtIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgTElCRkZJX0FTTQordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgICAgIGZmaV9hcmc7Cit0eXBlZGVmIHNpZ25lZCBsb25nICAgICAgICAgICAgZmZpX3Nhcmc7CisKK3R5cGVkZWYgZW51bSBmZmlfYWJpIHsKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisKKyNpZmRlZiBNT1hJRQorICBGRklfRUFCSSwKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX0VBQkksCisjZW5kaWYKKworICBGRklfTEFTVF9BQkkgPSBGRklfREVGQVVMVF9BQkkgKyAxCit9IGZmaV9hYmk7CisjZW5kaWYKKworLyogLS0tLSBEZWZpbml0aW9ucyBmb3IgY2xvc3VyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBGRklfQ0xPU1VSRVMgMAorI2RlZmluZSBGRklfTkFUSVZFX1JBV19BUEkgMAorCisvKiBUcmFtcG9saW5lcyBhcmUgNSA0LWJ5dGUgaW5zdHJ1Y3Rpb25zIGxvbmcuICAqLworI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFICg1KjQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcGEvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wYS9mZmkuYwppbmRleCBjN2ExNDM1Li42ZDc2MDZmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wYS9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wYS9mZmkuYwpAQCAtNDkyLDYgKzQ5MiwxMyBAQAogCSAgYXZhbHVlW2ldID0gKHZvaWQgKikoc3RhY2sgLSBzbG90KTsKIAkgIGJyZWFrOwogCisjaWZkZWYgUEFfSFBVWAorCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKwkgIC8qIExvbmcgZG91YmxlcyBhcmUgdHJlYXRlZCBsaWtlIGEgYmlnIHN0cnVjdHVyZS4gICovCisJICBhdmFsdWVbaV0gPSAodm9pZCAqKSAqKHN0YWNrIC0gc2xvdCk7CisJICBicmVhazsKKyNlbmRpZgorCiAJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CiAJICAvKiBTdHJ1Y3RzIHNtYWxsZXIgb3IgZXF1YWwgdGhhbiA0IGJ5dGVzIGFyZSBwYXNzZWQgaW4gb25lCiAJICAgICByZWdpc3Rlci4gU3RydWN0cyBzbWFsbGVyIG9yIGVxdWFsIDggYnl0ZXMgYXJlIHBhc3NlZCBpbiB0d28KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvYWl4LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2FpeC5TCmluZGV4IDQ1NTAyZjcuLmM2Zjg3NjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvYWl4LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9haXguUwpAQCAtMSw1ICsxLDUgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBhaXguUyAtIENvcHlyaWdodCAoYykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIGFpeC5TIC0gQ29weXJpZ2h0IChjKSAyMDAyLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICBiYXNlZCBvbiBkYXJ3aW4uUyBieSBKb2huIEhvcm5rdmlzdAogCiAgICBQb3dlclBDIEFzc2VtYmx5IGdsdWUuCkBAIC04Niw5ICs4NiwxMyBAQAogI2RlZmluZSBMKHgpIHgKIAkuZmlsZSAiYWl4LlMiCiAJLnRvYwotCS5jc2VjdCAudGV4dFtQUl0KLQkuYWxpZ24gMgotLmdsb2JsIGZmaV9wcmVwX2FyZ3MKKworCS8qIHZvaWQgZmZpX2NhbGxfQUlYKGV4dGVuZGVkX2NpZiAqZWNpZiwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkgKgkJICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCAqcnZhbHVlLAorCSAqCQkgICAgIHZvaWQgKCpmbikoKSwKKwkgKgkJICAgICB2b2lkICgqcHJlcF9hcmdzKShleHRlbmRlZF9jaWYqLCB1bnNpZ25lZCAqY29uc3QpKTsKKwkgKiByMz1lY2lmLCByND1ieXRlcywgcjU9ZmxhZ3MsIHI2PXJ2YWx1ZSwgcjc9Zm4sIHI4PXByZXBfYXJncworCSAqLwogCiAuY3NlY3QgLnRleHRbUFJdCiAJLmFsaWduIDIKQEAgLTk2LDYxICsxMDAsMTUxIEBACiAJLmdsb2JsIC5mZmlfY2FsbF9BSVgKIC5jc2VjdCBmZmlfY2FsbF9BSVhbRFNdCiBmZmlfY2FsbF9BSVg6CisjaWZkZWYgX182NEJJVF9fCisJLmxsb25nIC5mZmlfY2FsbF9BSVgsIFRPQ1t0YzBdLCAwCisJLmNzZWN0IC50ZXh0W1BSXQorLmZmaV9jYWxsX0FJWDoKKwkvKiBTYXZlIHJlZ2lzdGVycyB3ZSB1c2UuICAqLworCW1mbHIJcjAKKworCXN0ZAlyMjgsLTMyKHIxKQorCXN0ZAlyMjksLTI0KHIxKQorCXN0ZAlyMzAsLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCisJc3RkCXIwLCAxNihyMSkKKwltcglyMjgsIHIxCQkvKiBvdXIgQVAuICAqLworCXN0ZHV4CXIxLCByMSwgcjQKKworCS8qIFNhdmUgYXJndW1lbnRzIG92ZXIgY2FsbC4uLiAgKi8KKwltcglyMzEsIHI1CS8qIGZsYWdzLCAqLworCW1yCXIzMCwgcjYJLyogcnZhbHVlLCAqLworCW1yCXIyOSwgcjcJLyogZnVuY3Rpb24gYWRkcmVzcy4gICovCisJc3RkCXIyLCA0MChyMSkKKworCS8qIENhbGwgZmZpX3ByZXBfYXJncy4gICovCisJbXIJcjQsIHIxCisJYmwJLmZmaV9wcmVwX2FyZ3MKKworCS8qIE5vdyBkbyB0aGUgY2FsbC4gICovCisJbGQJcjAsIDAocjI5KQorCWxkCXIyLCA4KHIyOSkKKwlsZAlyMTEsIDE2KHIyOSkKKwkvKiBTZXQgdXAgY3IxIHdpdGggYml0cyA0LTcgb2YgdGhlIGZsYWdzLiAgKi8KKwltdGNyZgkweDQwLCByMzEKKwltdGN0cglyMAorCS8qIExvYWQgYWxsIHRob3NlIGFyZ3VtZW50IHJlZ2lzdGVycy4gICovCisJLy8gV2UgaGF2ZSBzZXQgdXAgYSBuaWNlIHN0YWNrIGZyYW1lLCBqdXN0IGxvYWQgaXQgaW50byByZWdpc3RlcnMuCisJbGQJcjMsIDQwKygxKjgpKHIxKQorCWxkCXI0LCA0MCsoMio4KShyMSkKKwlsZAlyNSwgNDArKDMqOCkocjEpCisJbGQJcjYsIDQwKyg0KjgpKHIxKQorCW5vcAorCWxkCXI3LCA0MCsoNSo4KShyMSkKKwlsZAlyOCwgNDArKDYqOCkocjEpCisJbGQJcjksIDQwKyg3KjgpKHIxKQorCWxkCXIxMCw0MCsoOCo4KShyMSkKKworTDE6CisJLyogTG9hZCBhbGwgdGhlIEZQIHJlZ2lzdGVycy4gICovCisJYmYJNixMMiAvLyAyZiArIDB4MTgKKwlsZmQJZjEsLTMyLSgxMyo4KShyMjgpCisJbGZkCWYyLC0zMi0oMTIqOCkocjI4KQorCWxmZAlmMywtMzItKDExKjgpKHIyOCkKKwlsZmQJZjQsLTMyLSgxMCo4KShyMjgpCisJbm9wCisJbGZkCWY1LC0zMi0oOSo4KShyMjgpCisJbGZkCWY2LC0zMi0oOCo4KShyMjgpCisJbGZkCWY3LC0zMi0oNyo4KShyMjgpCisJbGZkCWY4LC0zMi0oNio4KShyMjgpCisJbm9wCisJbGZkCWY5LC0zMi0oNSo4KShyMjgpCisJbGZkCWYxMCwtMzItKDQqOCkocjI4KQorCWxmZAlmMTEsLTMyLSgzKjgpKHIyOCkKKwlsZmQJZjEyLC0zMi0oMio4KShyMjgpCisJbm9wCisJbGZkCWYxMywtMzItKDEqOCkocjI4KQorCitMMjoKKwkvKiBNYWtlIHRoZSBjYWxsLiAgKi8KKwliY3RybAorCWxkCXIyLCA0MChyMSkKKworCS8qIE5vdywgZGVhbCB3aXRoIHRoZSByZXR1cm4gdmFsdWUuICAqLworCW10Y3JmCTB4MDEsIHIzMQorCisJYnQJMzAsIEwoZG9uZV9yZXR1cm5fdmFsdWUpCisJYnQJMjksIEwoZnBfcmV0dXJuX3ZhbHVlKQorCXN0ZAlyMywgMChyMzApCisKKwkvKiBGYWxsIHRocm91Z2guLi4gICovCisKK0woZG9uZV9yZXR1cm5fdmFsdWUpOgorCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyB3ZSB1c2VkIGFuZCByZXR1cm4uICAqLworCW1yCXIxLCByMjgKKwlsZAlyMCwgMTYocjI4KQorCWxkCXIyOCwgLTMyKHIxKQorCW10bHIJcjAKKwlsZAlyMjksIC0yNChyMSkKKwlsZAlyMzAsIC0xNihyMSkKKwlsZAlyMzEsIC04KHIxKQorCWJscgorCitMKGZwX3JldHVybl92YWx1ZSk6CisJYmYJMjgsIEwoZmxvYXRfcmV0dXJuX3ZhbHVlKQorCXN0ZmQJZjEsIDAocjMwKQorCWJmCTMxLCBMKGRvbmVfcmV0dXJuX3ZhbHVlKQorCXN0ZmQJZjIsIDgocjMwKQorCWIJTChkb25lX3JldHVybl92YWx1ZSkKK0woZmxvYXRfcmV0dXJuX3ZhbHVlKToKKwlzdGZzCWYxLCAwKHIzMCkKKwliCUwoZG9uZV9yZXR1cm5fdmFsdWUpCisKKyNlbHNlIC8qICEgX182NEJJVF9fICovCisJCiAJLmxvbmcgLmZmaV9jYWxsX0FJWCwgVE9DW3RjMF0sIDAKIAkuY3NlY3QgLnRleHRbUFJdCiAuZmZpX2NhbGxfQUlYOgotCW1yICAgICAgcjEyLHI4IC8vIFdlIG9ubHkgbmVlZCByMTIgdW50aWwgdGhlIGNhbGwsIHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBzYXZlZC4uLgotCS8qIFNhdmUgdGhlIG9sZCBzdGFjayBwb2ludGVyIGFzIEFQLiAgKi8KLQltcglyOCxyMQotCi0JLyogQWxsb2NhdGUgdGhlIHN0YWNrIHNwYWNlIHdlIG5lZWQuICAqLwotCXN0d3V4CXIxLHIxLHI0Ci0KIAkvKiBTYXZlIHJlZ2lzdGVycyB3ZSB1c2UuICAqLwotCW1mbHIJcjkKKwltZmxyCXIwCiAKLQlzdHcJcjI4LC0xNihyOCkKLQlzdHcJcjI5LC0xMihyOCkKLQlzdHcJcjMwLCAtOChyOCkKLQlzdHcJcjMxLCAtNChyOCkKKwlzdHcJcjI4LC0xNihyMSkKKwlzdHcJcjI5LC0xMihyMSkKKwlzdHcJcjMwLCAtOChyMSkKKwlzdHcJcjMxLCAtNChyMSkKIAotCXN0dwlyOSwgIDgocjgpCi0Jc3R3CXIyLCAyMChyMSkKKwlzdHcJcjAsIDgocjEpCisJbXIJcjI4LCByMQkJLyogb3V0IEFQLiAgKi8KKwlzdHd1eAlyMSwgcjEsIHI0CiAKIAkvKiBTYXZlIGFyZ3VtZW50cyBvdmVyIGNhbGwuLi4gICovCi0JbXIJcjMxLHI1CS8qIGZsYWdzLCAqLwotCW1yCXIzMCxyNgkvKiBydmFsdWUsICovCi0JbXIJcjI5LHI3CS8qIGZ1bmN0aW9uIGFkZHJlc3MsICovCi0JbXIJcjI4LHI4CS8qIG91ciBBUC4gKi8KKwltcglyMzEsIHI1CS8qIGZsYWdzLCAqLworCW1yCXIzMCwgcjYJLyogcnZhbHVlLCAqLworCW1yCXIyOSwgcjcJLyogZnVuY3Rpb24gYWRkcmVzcywgKi8KKwlzdHcJcjIsIDIwKHIxKQogCiAJLyogQ2FsbCBmZmlfcHJlcF9hcmdzLiAgKi8KLQltcglyNCxyMQotCWxpCXI5LDAKLQotCWx3eglyMiw0KHIxMikKLQlsd3oJcjEyLDAocjEyKQotCW10Y3RyCXIxMiAvLyByMTIgaG9sZHMgYWRkcmVzcyBvZiBfZmZpX3ByZXBfYXJncwotCWJjdHJsCi0JbHd6ICAgICByMiwyMChyMSkKKwltcglyNCwgcjEKKwlibAkuZmZpX3ByZXBfYXJncwogCiAJLyogTm93IGRvIHRoZSBjYWxsLiAgKi8KLQlsd3oJcjEyLDAocjI5KQorCWx3eglyMCwgMChyMjkpCisJbHd6CXIyLCA0KHIyOSkKKwlsd3oJcjExLCA4KHIyOSkKIAkvKiBTZXQgdXAgY3IxIHdpdGggYml0cyA0LTcgb2YgdGhlIGZsYWdzLiAgKi8KLQltdGNyZgkweDQwLHIzMQotCXN0dwlyMiwyMChyMSkKLQltdGN0cglyMTIKLQlsd3oJcjIsNChyMjkpCisJbXRjcmYJMHg0MCwgcjMxCisJbXRjdHIJcjAKIAkvKiBMb2FkIGFsbCB0aG9zZSBhcmd1bWVudCByZWdpc3RlcnMuICAqLwogCS8vIFdlIGhhdmUgc2V0IHVwIGEgbmljZSBzdGFjayBmcmFtZSwganVzdCBsb2FkIGl0IGludG8gcmVnaXN0ZXJzLgotCWx3eiAgICAgcjMsIDIwKygxKjQpKHIxKQotCWx3eiAgICAgcjQsIDIwKygyKjQpKHIxKQotCWx3eiAgICAgcjUsIDIwKygzKjQpKHIxKQotCWx3eiAgICAgcjYsIDIwKyg0KjQpKHIxKQorCWx3eglyMywgMjArKDEqNCkocjEpCisJbHd6CXI0LCAyMCsoMio0KShyMSkKKwlsd3oJcjUsIDIwKygzKjQpKHIxKQorCWx3eglyNiwgMjArKDQqNCkocjEpCiAJbm9wCi0JbHd6ICAgICByNywgMjArKDUqNCkocjEpCi0JbHd6ICAgICByOCwgMjArKDYqNCkocjEpCi0JbHd6ICAgICByOSwgMjArKDcqNCkocjEpCi0JbHd6ICAgICByMTAsMjArKDgqNCkocjEpCisJbHd6CXI3LCAyMCsoNSo0KShyMSkKKwlsd3oJcjgsIDIwKyg2KjQpKHIxKQorCWx3eglyOSwgMjArKDcqNCkocjEpCisJbHd6CXIxMCwyMCsoOCo0KShyMSkKIAogTDE6CiAJLyogTG9hZCBhbGwgdGhlIEZQIHJlZ2lzdGVycy4gICovCkBAIC0xNjUsNDcgKzI1OSw0OCBAQAogCWxmZAlmNywtMTYtKDcqOCkocjI4KQogCWxmZAlmOCwtMTYtKDYqOCkocjI4KQogCW5vcAotCWxmZCAgICAgZjksLTE2LSg1KjgpKHIyOCkKLQlsZmQgICAgIGYxMCwtMTYtKDQqOCkocjI4KQotCWxmZCAgICAgZjExLC0xNi0oMyo4KShyMjgpCi0JbGZkICAgICBmMTIsLTE2LSgyKjgpKHIyOCkKKwlsZmQJZjksLTE2LSg1KjgpKHIyOCkKKwlsZmQJZjEwLC0xNi0oNCo4KShyMjgpCisJbGZkCWYxMSwtMTYtKDMqOCkocjI4KQorCWxmZAlmMTIsLTE2LSgyKjgpKHIyOCkKIAlub3AKLQlsZmQgICAgIGYxMywtMTYtKDEqOCkocjI4KQorCWxmZAlmMTMsLTE2LSgxKjgpKHIyOCkKIAogTDI6CiAJLyogTWFrZSB0aGUgY2FsbC4gICovCiAJYmN0cmwKLQlsd3ogcjIsMjAocjEpCisJbHd6CXIyLCAyMChyMSkKIAogCS8qIE5vdywgZGVhbCB3aXRoIHRoZSByZXR1cm4gdmFsdWUuICAqLwotCW10Y3JmCTB4MDEscjMxCisJbXRjcmYJMHgwMSwgcjMxCiAKLQlidAkzMCxMKGRvbmVfcmV0dXJuX3ZhbHVlKQotCWJ0CTI5LEwoZnBfcmV0dXJuX3ZhbHVlKQotCXN0dwlyMywwKHIzMCkKLQliZgkyOCxMKGRvbmVfcmV0dXJuX3ZhbHVlKQotCXN0dwlyNCw0KHIzMCkKKwlidAkzMCwgTChkb25lX3JldHVybl92YWx1ZSkKKwlidAkyOSwgTChmcF9yZXR1cm5fdmFsdWUpCisJc3R3CXIzLCAwKHIzMCkKKwliZgkyOCwgTChkb25lX3JldHVybl92YWx1ZSkKKwlzdHcJcjQsIDQocjMwKQogCiAJLyogRmFsbCB0aHJvdWdoLi4uICAqLwogCiBMKGRvbmVfcmV0dXJuX3ZhbHVlKToKIAkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgd2UgdXNlZCBhbmQgcmV0dXJuLiAgKi8KLQlsd3oJcjksICAgOChyMjgpCi0JbHd6CXIzMSwgIC00KHIyOCkKLQltdGxyCXI5Ci0JbHd6CXIzMCwgLTgocjI4KQotCWx3eglyMjksLTEyKHIyOCkKLQlsd3oJcjI4LC0xNihyMjgpCi0JbHd6CXIxLDAocjEpCisJbXIJcjEsIHIyOAorCWx3eglyMCwgOChyMjgpCisJbHd6CXIyOCwtMTYocjEpCisJbXRscglyMAorCWx3eglyMjksLTEyKHIxKQorCWx3eglyMzAsIC04KHIxKQorCWx3eglyMzEsIC00KHIxKQogCWJscgogCiBMKGZwX3JldHVybl92YWx1ZSk6Ci0JYmYJMjgsTChmbG9hdF9yZXR1cm5fdmFsdWUpCi0Jc3RmZAlmMSwwKHIzMCkKKwliZgkyOCwgTChmbG9hdF9yZXR1cm5fdmFsdWUpCisJc3RmZAlmMSwgMChyMzApCiAJYglMKGRvbmVfcmV0dXJuX3ZhbHVlKQogTChmbG9hdF9yZXR1cm5fdmFsdWUpOgotCXN0ZnMJZjEsMChyMzApCisJc3RmcwlmMSwgMChyMzApCiAJYglMKGRvbmVfcmV0dXJuX3ZhbHVlKQorI2VuZGlmCiAJLmxvbmcgMAogCS5ieXRlIDAsMCwwLDEsMTI4LDQsMCwwCiAvL0VORChmZmlfY2FsbF9BSVgpCkBAIC0yMTYsNyArMzExLDExIEBACiAJLmdsb2JsIC5mZmlfY2FsbF9EQVJXSU4KIC5jc2VjdCBmZmlfY2FsbF9EQVJXSU5bRFNdCiBmZmlfY2FsbF9EQVJXSU46CisjaWZkZWYgX182NEJJVF9fCisJLmxsb25nIC5mZmlfY2FsbF9EQVJXSU4sIFRPQ1t0YzBdLCAwCisjZWxzZQogCS5sb25nIC5mZmlfY2FsbF9EQVJXSU4sIFRPQ1t0YzBdLCAwCisjZW5kaWYKIAkuY3NlY3QgLnRleHRbUFJdCiAuZmZpX2NhbGxfREFSV0lOOgogCWJscgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TCmluZGV4IDdiZjVjNjUuLjVjNzQ0NDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMKQEAgLTEsNSArMSw1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgYWl4X2Nsb3N1cmUuUyAtIENvcHlyaWdodCAoYykgMjAwMiAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgYWl4X2Nsb3N1cmUuUyAtIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgIGJhc2VkIG9uIGRhcndpbl9jbG9zdXJlLlMKIAogICAgUG93ZXJQQyBBc3NlbWJseSBnbHVlLgpAQCAtOTQsNjUgKzk0LDY2IEBACiAJLmdsb2JsIGZmaV9jbG9zdXJlX0FTTQogCS5nbG9ibCAuZmZpX2Nsb3N1cmVfQVNNCiAuY3NlY3QgZmZpX2Nsb3N1cmVfQVNNW0RTXQotCiBmZmlfY2xvc3VyZV9BU006Ci0JLmxvbmcgLmZmaV9jbG9zdXJlX0FTTSwgVE9DW3RjMF0sIDAKKyNpZmRlZiBfXzY0QklUX18KKwkubGxvbmcgLmZmaV9jbG9zdXJlX0FTTSwgVE9DW3RjMF0sIDAKIAkuY3NlY3QgLnRleHRbUFJdCiAuZmZpX2Nsb3N1cmVfQVNNOgotCi0JbWZsciByMAkJCS8qIGV4dHJhY3QgcmV0dXJuIGFkZHJlc3MgKi8KLQlzdHcgcjAsIDgocjEpCQkvKiBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyAqLwotCi0JLyogMjQgQnl0ZXMgKExpbmthZ2UgQXJlYSkgKi8KLQkvKiAzMiBCeXRlcyAocGFyYW1zKSAqLwotCS8qIDEwNCBCeXRlcyAoMTMqOCBmcm9tIEZQUikgKi8KLQkvKiA4IEJ5dGVzIChyZXN1bHQpICovCi0JLyogMTY4IEJ5dGVzICovCi0KLQlzdHd1IHIxLC0xNzYocjEpCS8qIHNraXAgb3ZlciBjYWxsZXIgc2F2ZSBhcmVhCi0JCQkJa2VlcCBzdGFjayBhbGlnbmVkIHRvIDE2ICAqLwotCiAvKiB3ZSB3YW50IHRvIGJ1aWxkIHVwIGFuIGFyZWEgZm9yIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCAqLwogLyogaW4gcmVnaXN0ZXJzIChib3RoIGZsb2F0aW5nIHBvaW50IGFuZCBpbnRlZ2VyKSAqLwogCiAJLyogd2Ugc3RvcmUgZ3ByIDMgdG8gZ3ByIDEwIChhbGlnbmVkIHRvIDQpCiAJaW4gdGhlIHBhcmVudHMgb3V0Z29pbmcgYXJlYSAgKi8KLQlzdHcgICByMywgMjAwKHIxKQotCXN0dyAgIHI0LCAyMDQocjEpCi0Jc3R3ICAgcjUsIDIwOChyMSkKLQlzdHcgICByNiwgMjEyKHIxKQotCXN0dyAgIHI3LCAyMTYocjEpCi0Jc3R3ICAgcjgsIDIyMChyMSkKLQlzdHcgICByOSwgMjI0KHIxKQotCXN0dyAgIHIxMCwgMjI4KHIxKQorCXN0ZCAgIHIzLCA0OCsoMCo4KShyMSkKKwlzdGQgICByNCwgNDgrKDEqOCkocjEpCisJc3RkICAgcjUsIDQ4KygyKjgpKHIxKQorCXN0ZCAgIHI2LCA0OCsoMyo4KShyMSkKKwltZmxyICByMAorCisJc3RkICAgcjcsIDQ4Kyg0KjgpKHIxKQorCXN0ZCAgIHI4LCA0OCsoNSo4KShyMSkKKwlzdGQgICByOSwgNDgrKDYqOCkocjEpCisJc3RkICAgcjEwLCA0OCsoNyo4KShyMSkKKwlzdGQgICByMCwgMTYocjEpCS8qIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzICovCisKKworCS8qIDQ4ICBCeXRlcyAoTGlua2FnZSBBcmVhKSAqLworCS8qIDY0ICBCeXRlcyAocGFyYW1zKSAqLworCS8qIDE2ICBCeXRlcyAocmVzdWx0KSAqLworCS8qIDEwNCBCeXRlcyAoMTMqOCBmcm9tIEZQUikgKi8KKwkvKiA4ICAgQnl0ZXMgKGFsaWdubWVudCkgKi8KKwkvKiAyNDAgQnl0ZXMgKi8KKworCXN0ZHUgIHIxLCAtMjQwKHIxKQkvKiBza2lwIG92ZXIgY2FsbGVyIHNhdmUgYXJlYQorCQkJCSAgIGtlZXAgc3RhY2sgYWxpZ25lZCB0byAxNiAgKi8KIAogCS8qIG5leHQgc2F2ZSBmcHIgMSB0byBmcHIgMTMgKGFsaWduZWQgdG8gOCkgKi8KLQlzdGZkICBmMSwgNTYocjEpCi0Jc3RmZCAgZjIsIDY0KHIxKQotCXN0ZmQgIGYzLCA3MihyMSkKLQlzdGZkICBmNCwgODAocjEpCi0Jc3RmZCAgZjUsIDg4KHIxKQotCXN0ZmQgIGY2LCA5NihyMSkKLQlzdGZkICBmNywgMTA0KHIxKQotCXN0ZmQgIGY4LCAxMTIocjEpCi0Jc3RmZCAgZjksIDEyMChyMSkKLQlzdGZkICBmMTAsIDEyOChyMSkKLQlzdGZkICBmMTEsIDEzNihyMSkKLQlzdGZkICBmMTIsIDE0NChyMSkKLQlzdGZkICBmMTMsIDE1MihyMSkKKwlzdGZkICBmMSwgMTI4KygwKjgpKHIxKQorCXN0ZmQgIGYyLCAxMjgrKDEqOCkocjEpCisJc3RmZCAgZjMsIDEyOCsoMio4KShyMSkKKwlzdGZkICBmNCwgMTI4KygzKjgpKHIxKQorCXN0ZmQgIGY1LCAxMjgrKDQqOCkocjEpCisJc3RmZCAgZjYsIDEyOCsoNSo4KShyMSkKKwlzdGZkICBmNywgMTI4Kyg2KjgpKHIxKQorCXN0ZmQgIGY4LCAxMjgrKDcqOCkocjEpCisJc3RmZCAgZjksIDEyOCsoOCo4KShyMSkKKwlzdGZkICBmMTAsIDEyOCsoOSo4KShyMSkKKwlzdGZkICBmMTEsIDEyOCsoMTAqOCkocjEpCisJc3RmZCAgZjEyLCAxMjgrKDExKjgpKHIxKQorCXN0ZmQgIGYxMywgMTI4KygxMio4KShyMSkKIAogCS8qIHNldCB1cCByZWdpc3RlcnMgZm9yIHRoZSByb3V0aW5lIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgd29yayAqLwogCS8qIGdldCB0aGUgY29udGV4dCBwb2ludGVyIGZyb20gdGhlIHRyYW1wb2xpbmUgKi8KLQltciByMyxyMTEKKwltciByMywgcjExCiAKIAkvKiBub3cgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgcmVzdWx0IHN0b3JhZ2UgKi8KLQlhZGRpIHI0LHIxLDE2MAorCWFkZGkgcjQsIHIxLCAxMTIKIAogCS8qIG5vdyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSBzYXZlZCBncHIgcmVnaXN0ZXJzICovCi0JYWRkaSByNSxyMSwyMDAKKwlhZGRpIHI1LCByMSwgMjg4CiAKIAkvKiBub3cgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgc2F2ZWQgZnByIHJlZ2lzdGVycyAqLwotCWFkZGkgcjYscjEsNTYKKwlhZGRpIHI2LCByMSwgMTI4CiAKIAkvKiBtYWtlIHRoZSBjYWxsICovCiAJYmwgLmZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4KQEAgLTE2NCw4NCArMTY1LDI3OSBAQAogCiAJLyogbG9vayB1cCB0aGUgcHJvcGVyIHN0YXJ0aW5nIHBvaW50IGluIHRhYmxlICAqLwogCS8qIGJ5IHVzaW5nIHJldHVybiB0eXBlIGFzIG9mZnNldCAqLwotCWFkZGkgcjUscjEsMTYwCQkvKiBnZXQgcG9pbnRlciB0byByZXN1bHRzIGFyZWEgKi8KLQlsd3ogcjQsTEMuLjYwKDIpCS8qIGdldCBhZGRyZXNzIG9mIGp1bXAgdGFibGUgKi8KLQlzbHdpIHIzLHIzLDIJCS8qIG5vdyBtdWx0aXBseSByZXR1cm4gdHlwZSBieSA0ICovCi0JbHd6eCByMyxyNCxyMwkJLyogZ2V0IHRoZSBjb250ZW50cyBvZiB0aGF0IHRhYmxlIHZhbHVlICovCi0JYWRkIHIzLHIzLHI0CQkvKiBhZGQgY29udGVudHMgb2YgdGFibGUgdG8gdGFibGUgYWRkcmVzcyAqLwotCW10Y3RyIHIzCisJbGQJcjQsIExDLi42MCgyKQkvKiBnZXQgYWRkcmVzcyBvZiBqdW1wIHRhYmxlICovCisJc2xkaQlyMywgcjMsIDQJLyogbm93IG11bHRpcGx5IHJldHVybiB0eXBlIGJ5IDE2ICovCisJbGQJcjAsIDI0MCsxNihyMSkJLyogbG9hZCByZXR1cm4gYWRkcmVzcyAqLworCWFkZAlyMywgcjMsIHI0CS8qIGFkZCBjb250ZW50cyBvZiB0YWJsZSB0byB0YWJsZSBhZGRyZXNzICovCisJbXRjdHIJcjMKIAliY3RyCQkJLyoganVtcCB0byBpdCAqLwogCisvKiBFYWNoIGZyYWdtZW50IG11c3QgYmUgZXhhY3RseSAxNiBieXRlcyBsb25nICg0IGluc3RydWN0aW9ucykuCisgICBBbGlnbiB0byAxNiBieXRlIGJvdW5kYXJ5IGZvciBjYWNoZSBhbmQgZGlzcGF0Y2ggZWZmaWNpZW5jeS4gICovCisJLmFsaWduIDQKKwogTC4uNjA6Ci0JLmxvbmcgTC4uNDQtTC4uNjAgICAgLyogRkZJX1RZUEVfVk9JRCAqLwotCS5sb25nIEwuLjUwLUwuLjYwICAgIC8qIEZGSV9UWVBFX0lOVCAqLwotCS5sb25nIEwuLjQ3LUwuLjYwICAgIC8qIEZGSV9UWVBFX0ZMT0FUICovCi0JLmxvbmcgTC4uNDYtTC4uNjAgICAgLyogRkZJX1RZUEVfRE9VQkxFICovCi0JLmxvbmcgTC4uNDYtTC4uNjAgICAgLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLwotCS5sb25nIEwuLjU2LUwuLjYwICAgIC8qIEZGSV9UWVBFX1VJTlQ4ICovCi0JLmxvbmcgTC4uNTUtTC4uNjAgICAgLyogRkZJX1RZUEVfU0lOVDggKi8KLQkubG9uZyBMLi41OC1MLi42MCAgICAvKiBGRklfVFlQRV9VSU5UMTYgKi8KLQkubG9uZyBMLi41Ny1MLi42MCAgICAvKiBGRklfVFlQRV9TSU5UMTYgKi8KLQkubG9uZyBMLi41MC1MLi42MCAgICAvKiBGRklfVFlQRV9VSU5UMzIgKi8KLQkubG9uZyBMLi41MC1MLi42MCAgICAvKiBGRklfVFlQRV9TSU5UMzIgKi8KLQkubG9uZyBMLi40OC1MLi42MCAgICAvKiBGRklfVFlQRV9VSU5UNjQgKi8KLQkubG9uZyBMLi40OC1MLi42MCAgICAvKiBGRklfVFlQRV9TSU5UNjQgKi8KLQkubG9uZyBMLi40NC1MLi42MCAgICAvKiBGRklfVFlQRV9TVFJVQ1QgKi8KLQkubG9uZyBMLi41MC1MLi42MCAgICAvKiBGRklfVFlQRV9QT0lOVEVSICovCisvKiBjYXNlIEZGSV9UWVBFX1ZPSUQgKi8KKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCW5vcAogCi0KLS8qIGNhc2UgZG91YmxlICovCi1MLi40NjoKLQlsZmQgZjEsMChyNSkKLQliIEwuLjQ0Ci0KLS8qIGNhc2UgZmxvYXQgKi8KLUwuLjQ3OgotCWxmcyBmMSwwKHI1KQotCWIgTC4uNDQKLQotLyogY2FzZSBsb25nIGxvbmcgKi8KLUwuLjQ4OgotCWx3eiByMywwKHI1KQotCWx3eiByNCw0KHI1KQotCWIgTC4uNDQKLQotLyogY2FzZSBkZWZhdWx0IC8gaW50MzIgLyBwb2ludGVyICovCi1MLi41MDoKLQlsd3ogcjMsMChyNSkKLQliIEwuLjQ0Ci0KLS8qIGNhc2Ugc2lnbmVkIGludDgJICovCi1MLi41NToKLQlhZGRpIHI1LHI1LDMKLQlsYnogcjMsMChyNSkKLQlzbHdpIHIzLHIzLDI0Ci0Jc3Jhd2kgcjMscjMsMjQKLQliIEwuLjQ0Ci0KLS8qIGNhc2UgdW5zaWduZWQgaW50OAkgKi8KLUwuLjU2OgotCWFkZGkgcjUscjUsMwotCWxieiByMywwKHI1KQotCWIgTC4uNDQKLQotLyogY2FzZSBzaWduZWQgaW50MTYgKi8KLUwuLjU3OgotCWFkZGkgcjUscjUsMgotCWxoeiByMywwKHI1KQotCWV4dHNoIHIzLHIzCi0JYiBMLi40NAotCi0vKiBjYXNlIHVuc2lnbmVkIGludDE2ICovCi1MLi41ODoKLQlhZGRpIHI1LHI1LDIKLQlsaHogcjMsMChyNSkKLQotLyogY2FzZSB2b2lkIC8gZG9uZQkgKi8KLUwuLjQ0OgotCWFkZGkgcjEscjEsMTc2CQkvKiByZXN0b3JlIHN0YWNrIHBvaW50ZXIgKi8KLQlsd3ogcjAsOChyMSkJCS8qIGdldCByZXR1cm4gYWRkcmVzcyAqLwotCW10bHIgcjAJCQkvKiByZXNldCBsaW5rIHJlZ2lzdGVyICovCisvKiBjYXNlIEZGSV9UWVBFX0lOVCAqLworCWx3YSByMywgMTEyKzQocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKIAlibHIKIAorLyogY2FzZSBGRklfVFlQRV9GTE9BVCAqLworCWxmcyBmMSwgMTEyKzAocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9ET1VCTEUgKi8KKwlsZmQgZjEsIDExMiswKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRSAqLworCWxmZCBmMSwgMTEyKzAocjEpCisJbXRsciByMAorCWxmZCBmMiwgMTEyKzgocjEpCisJYiBMLi5maW5pc2gKKworLyogY2FzZSBGRklfVFlQRV9VSU5UOCAqLworCWxieiByMywgMTEyKzcocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9TSU5UOCAqLworCWxieiByMywgMTEyKzcocjEpCisJbXRsciByMAorCWV4dHNiIHIzLCByMworCWIgTC4uZmluaXNoCisKKy8qIGNhc2UgRkZJX1RZUEVfVUlOVDE2ICovCisJbGh6IHIzLCAxMTIrNihyMSkKKwltdGxyIHIwCitMLi5maW5pc2g6CisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1NJTlQxNiAqLworCWxoYSByMywgMTEyKzYocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9VSU5UMzIgKi8KKwlsd3ogcjMsIDExMis0KHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfU0lOVDMyICovCisJbHdhIHIzLCAxMTIrNChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1VJTlQ2NCAqLworCWxkIHIzLCAxMTIrMChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1NJTlQ2NCAqLworCWxkIHIzLCAxMTIrMChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1NUUlVDVCAqLworCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisJbm9wCisKKy8qIGNhc2UgRkZJX1RZUEVfUE9JTlRFUiAqLworCWxkIHIzLCAxMTIrMChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCisjZWxzZSAvKiAhIF9fNjRCSVRfXyAqLworCQorCS5sb25nIC5mZmlfY2xvc3VyZV9BU00sIFRPQ1t0YzBdLCAwCisJLmNzZWN0IC50ZXh0W1BSXQorLmZmaV9jbG9zdXJlX0FTTToKKy8qIHdlIHdhbnQgdG8gYnVpbGQgdXAgYW4gYXJlYSBmb3IgdGhlIHBhcmFtZXRlcnMgcGFzc2VkICovCisvKiBpbiByZWdpc3RlcnMgKGJvdGggZmxvYXRpbmcgcG9pbnQgYW5kIGludGVnZXIpICovCisKKwkvKiB3ZSBzdG9yZSBncHIgMyB0byBncHIgMTAgKGFsaWduZWQgdG8gNCkKKwlpbiB0aGUgcGFyZW50cyBvdXRnb2luZyBhcmVhICAqLworCXN0dyAgIHIzLCAyNCsoMCo0KShyMSkKKwlzdHcgICByNCwgMjQrKDEqNCkocjEpCisJc3R3ICAgcjUsIDI0KygyKjQpKHIxKQorCXN0dyAgIHI2LCAyNCsoMyo0KShyMSkKKwltZmxyICByMAorCisJc3R3ICAgcjcsIDI0Kyg0KjQpKHIxKQorCXN0dyAgIHI4LCAyNCsoNSo0KShyMSkKKwlzdHcgICByOSwgMjQrKDYqNCkocjEpCisJc3R3ICAgcjEwLCAyNCsoNyo0KShyMSkKKwlzdHcgICByMCwgOChyMSkKKworCS8qIDI0IEJ5dGVzIChMaW5rYWdlIEFyZWEpICovCisJLyogMzIgQnl0ZXMgKHBhcmFtcykgKi8KKwkvKiAxNiAgQnl0ZXMgKHJlc3VsdCkgKi8KKwkvKiAxMDQgQnl0ZXMgKDEzKjggZnJvbSBGUFIpICovCisJLyogMTc2IEJ5dGVzICovCisKKwlzdHd1ICByMSwgLTE3NihyMSkJLyogc2tpcCBvdmVyIGNhbGxlciBzYXZlIGFyZWEKKwkJCQkgICBrZWVwIHN0YWNrIGFsaWduZWQgdG8gMTYgICovCisKKwkvKiBuZXh0IHNhdmUgZnByIDEgdG8gZnByIDEzIChhbGlnbmVkIHRvIDgpICovCisJc3RmZCAgZjEsIDcyKygwKjgpKHIxKQorCXN0ZmQgIGYyLCA3MisoMSo4KShyMSkKKwlzdGZkICBmMywgNzIrKDIqOCkocjEpCisJc3RmZCAgZjQsIDcyKygzKjgpKHIxKQorCXN0ZmQgIGY1LCA3MisoNCo4KShyMSkKKwlzdGZkICBmNiwgNzIrKDUqOCkocjEpCisJc3RmZCAgZjcsIDcyKyg2KjgpKHIxKQorCXN0ZmQgIGY4LCA3MisoNyo4KShyMSkKKwlzdGZkICBmOSwgNzIrKDgqOCkocjEpCisJc3RmZCAgZjEwLCA3MisoOSo4KShyMSkKKwlzdGZkICBmMTEsIDcyKygxMCo4KShyMSkKKwlzdGZkICBmMTIsIDcyKygxMSo4KShyMSkKKwlzdGZkICBmMTMsIDcyKygxMio4KShyMSkKKworCS8qIHNldCB1cCByZWdpc3RlcnMgZm9yIHRoZSByb3V0aW5lIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgd29yayAqLworCS8qIGdldCB0aGUgY29udGV4dCBwb2ludGVyIGZyb20gdGhlIHRyYW1wb2xpbmUgKi8KKwltciByMywgcjExCisKKwkvKiBub3cgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgcmVzdWx0IHN0b3JhZ2UgKi8KKwlhZGRpIHI0LCByMSwgNTYKKworCS8qIG5vdyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSBzYXZlZCBncHIgcmVnaXN0ZXJzICovCisJYWRkaSByNSwgcjEsIDIwMAorCisJLyogbm93IGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHNhdmVkIGZwciByZWdpc3RlcnMgKi8KKwlhZGRpIHI2LCByMSwgNzIKKworCS8qIG1ha2UgdGhlIGNhbGwgKi8KKwlibCAuZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTgorCW5vcAorCisJLyogbm93IHIzIGNvbnRhaW5zIHRoZSByZXR1cm4gdHlwZSAqLworCS8qIHNvIHVzZSBpdCB0byBsb29rIHVwIGluIGEgdGFibGUgKi8KKwkvKiBzbyB3ZSBrbm93IGhvdyB0byBkZWFsIHdpdGggZWFjaCB0eXBlICovCisKKwkvKiBsb29rIHVwIHRoZSBwcm9wZXIgc3RhcnRpbmcgcG9pbnQgaW4gdGFibGUgICovCisJLyogYnkgdXNpbmcgcmV0dXJuIHR5cGUgYXMgb2Zmc2V0ICovCisJbHd6CXI0LCBMQy4uNjAoMikJLyogZ2V0IGFkZHJlc3Mgb2YganVtcCB0YWJsZSAqLworCXNsd2kJcjMsIHIzLCA0CS8qIG5vdyBtdWx0aXBseSByZXR1cm4gdHlwZSBieSA0ICovCisJbHd6CXIwLCAxNzYrOChyMSkJLyogbG9hZCByZXR1cm4gYWRkcmVzcyAqLworCWFkZAlyMywgcjMsIHI0CS8qIGFkZCBjb250ZW50cyBvZiB0YWJsZSB0byB0YWJsZSBhZGRyZXNzICovCisJbXRjdHIJcjMKKwliY3RyCQkJLyoganVtcCB0byBpdCAqLworCisvKiBFYWNoIGZyYWdtZW50IG11c3QgYmUgZXhhY3RseSAxNiBieXRlcyBsb25nICg0IGluc3RydWN0aW9ucykuCisgICBBbGlnbiB0byAxNiBieXRlIGJvdW5kYXJ5IGZvciBjYWNoZSBhbmQgZGlzcGF0Y2ggZWZmaWNpZW5jeS4gICovCisJLmFsaWduIDQKKworTC4uNjA6CisvKiBjYXNlIEZGSV9UWVBFX1ZPSUQgKi8KKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorCW5vcAorCisvKiBjYXNlIEZGSV9UWVBFX0lOVCAqLworCWx3eiByMywgNTYrMChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX0ZMT0FUICovCisJbGZzIGYxLCA1NiswKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfRE9VQkxFICovCisJbGZkIGYxLCA1NiswKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRSAqLworCWxmZCBmMSwgNTYrMChyMSkKKwltdGxyIHIwCisJbGZkIGYyLCA1Nis4KHIxKQorCWIgTC4uZmluaXNoCisKKy8qIGNhc2UgRkZJX1RZUEVfVUlOVDggKi8KKwlsYnogcjMsIDU2KzMocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9TSU5UOCAqLworCWxieiByMywgNTYrMyhyMSkKKwltdGxyIHIwCisJZXh0c2IgcjMsIHIzCisJYiBMLi5maW5pc2gKKworLyogY2FzZSBGRklfVFlQRV9VSU5UMTYgKi8KKwlsaHogcjMsIDU2KzIocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9TSU5UMTYgKi8KKwlsaGEgcjMsIDU2KzIocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9VSU5UMzIgKi8KKwlsd3ogcjMsIDU2KzAocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9TSU5UMzIgKi8KKwlsd3ogcjMsIDU2KzAocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9VSU5UNjQgKi8KKwlsd3ogcjMsIDU2KzAocjEpCisJbXRsciByMAorCWx3eiByNCwgNTYrNChyMSkKKwliIEwuLmZpbmlzaAorCisvKiBjYXNlIEZGSV9UWVBFX1NJTlQ2NCAqLworCWx3eiByMywgNTYrMChyMSkKKwltdGxyIHIwCisJbHd6IHI0LCA1Nis0KHIxKQorCWIgTC4uZmluaXNoCisKKy8qIGNhc2UgRkZJX1RZUEVfU1RSVUNUICovCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKwlub3AKKworLyogY2FzZSBGRklfVFlQRV9QT0lOVEVSICovCisJbHd6IHIzLCA1NiswKHIxKQorCW10bHIgcjAKK0wuLmZpbmlzaDoKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisjZW5kaWYKIC8qIEVORChmZmlfY2xvc3VyZV9BU00pICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYwppbmRleCBjMmQyNTMwLi43NTc4NGE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpLmMKQEAgLTEsNiArMSw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZmZpLmMgLSBDb3B5cmlnaHQgKGMpIDE5OTggR2VvZmZyZXkgS2VhdGluZwotICAgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCisgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKICAgIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMKIAogICAgUG93ZXJQQyBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQpAQCAtNDMsNiArNDMsMTEgQEAKICAgRkxBR19SRVRVUk5TXzY0QklUUyAgID0gMSA8PCAoMzEtMjgpLAogCiAgIEZMQUdfUkVUVVJOU18xMjhCSVRTICA9IDEgPDwgKDMxLTI3KSwgLyogY3I2ICAqLworICBGTEFHX1NZU1ZfU01TVF9SNCAgICAgPSAxIDw8ICgzMS0yNiksIC8qIHVzZSByNCBmb3IgRkZJX1NZU1YgOCBieXRlCisJCQkJCSAgIHN0cnVjdHMuICAqLworICBGTEFHX1NZU1ZfU01TVF9SMyAgICAgPSAxIDw8ICgzMS0yNSksIC8qIHVzZSByMyBmb3IgRkZJX1NZU1YgNCBieXRlCisJCQkJCSAgIHN0cnVjdHMuICAqLworICAvKiBCaXRzICgzMS0yNCkgdGhyb3VnaCAoMzEtMTkpIHN0b3JlIHNoaWZ0IHZhbHVlIGZvciBTTVNUICovCiAKICAgRkxBR19BUkdfTkVFRFNfQ09QWSAgID0gMSA8PCAoMzEtIDcpLAogICBGTEFHX0ZQX0FSR1VNRU5UUyAgICAgPSAxIDw8ICgzMS0gNiksIC8qIGNyMS5lcTsgc3BlY2lmaWVkIGJ5IEFCSSAqLwpAQCAtMTgwLDYgKzE4NSw3IEBACiAJICAgIHsKIAkgICAgICAqbmV4dF9hcmcuZiA9IChmbG9hdCkgZG91YmxlX3RtcDsKIAkgICAgICBuZXh0X2FyZy51ICs9IDE7CisJICAgICAgaW50YXJnX2NvdW50Kys7CiAJICAgIH0KIAkgIGVsc2UKIAkgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CkBAIC02ODAsMTUgKzY4NiwxNSBAQAogCQkgVGhlIHNhbWUgYXBwbGllcyBmb3IgdGhlIHN0cnVjdHMgcmV0dXJuZWQgaW4gcjMvcjQuICAqLwogCSAgICAgIGlmIChzaXplIDw9IDQpCiAJCXsKLQkJICBmbGFncyB8PSAxIDw8ICgzMSAtIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUIC0gMSk7Ci0JCSAgZmxhZ3MgfD0gOCAqICg0IC0gc2l6ZSkgPDwgNDsKKwkJICBmbGFncyB8PSBGTEFHX1NZU1ZfU01TVF9SMzsKKwkJICBmbGFncyB8PSA4ICogKDQgLSBzaXplKSA8PCA4OwogCQkgIGJyZWFrOwogCQl9CiAJICAgICAgLyogVGhlc2Ugc3RydWN0cyBhcmUgcmV0dXJuZWQgaW4gcjMgYW5kIHI0LiBTZWUgYWJvdmUuICAgKi8KIAkgICAgICBpZiAgKHNpemUgPD0gOCkKIAkJewotCQkgIGZsYWdzIHw9IDEgPDwgKDMxIC0gRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgLSAyKTsKLQkJICBmbGFncyB8PSA4ICogKDggLSBzaXplKSA8PCA0OworCQkgIGZsYWdzIHw9IEZMQUdfU1lTVl9TTVNUX1IzIHwgRkxBR19TWVNWX1NNU1RfUjQ7CisJCSAgZmxhZ3MgfD0gOCAqICg4IC0gc2l6ZSkgPDwgODsKIAkJICBicmVhazsKIAkJfQogCSAgICB9CkBAIC0xMTQ0LDYgKzExNTAsNyBAQAogCQlwc3QrKzsKIAkgICAgICBhdmFsdWVbaV0gPSBwc3Q7CiAJICAgICAgcHN0ICs9IDI7CisJICAgICAgbmcgPSA4OwogCSAgICB9CiAJICBicmVhazsKIApAQCAtMTIxNyw2ICsxMjI0LDcgQEAKIAkJewogCQkgIGF2YWx1ZVtpXSA9IHBzdDsKIAkJICBwc3QgKz0gNDsKKwkJICBuZyA9IDg7CiAJCX0KIAkgICAgICBicmVhazsKIAkgICAgfQpAQCAtMTI0OSwxMCArMTI1NywxNSBAQAogCiAgIC8qIFRlbGwgZmZpX2Nsb3N1cmVfU1lTViBob3cgdG8gcGVyZm9ybSByZXR1cm4gdHlwZSBwcm9tb3Rpb25zLgogICAgICBCZWNhdXNlIHRoZSBGRklfU1lTViBBQkkgcmV0dXJucyB0aGUgc3RydWN0dXJlcyA8PSA4IGJ5dGVzIGluIHIzL3I0Ci0gICAgIHdlIGhhdmUgdG8gdGVsbCBmZmlfY2xvc3VyZV9TWVNWIGhvdyB0byB0cmVhdCB0aGVtLiAgKi8KKyAgICAgd2UgaGF2ZSB0byB0ZWxsIGZmaV9jbG9zdXJlX1NZU1YgaG93IHRvIHRyZWF0IHRoZW0uIFdlIGNvbWJpbmUgdGhlIGJhc2UKKyAgICAgdHlwZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCAtIDEgIHdpdGggdGhlIHNpemUgb2YgdGhlIHN0cnVjdC4KKyAgICAgU28gYSBvbmUgYnl0ZSBzdHJ1Y3QgZ2V0cyB0aGUgcmV0dXJuIHR5cGUgMTYuIFJldHVybiB0eXBlIDEgdG8gMTUgYXJlCisgICAgIGFscmVhZHkgdXNlZCBhbmQgd2UgbmV2ZXIgaGF2ZSBhIHN0cnVjdCB3aXRoIHNpemUgemVyby4gVGhhdCBpcyB0aGUgcmVhc29uCisgICAgIGZvciB0aGUgc3VidHJhY3Rpb24gb2YgMS4gU2VlIHRoZSBjb21tZW50IGluIGZmaXRhcmdldC5oIGFib3V0IG9yZGVyaW5nLgorICAqLwogICBpZiAoY2lmLT5hYmkgPT0gRkZJX1NZU1YgJiYgY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKICAgICAgICYmIHNpemUgPD0gOCkKLSAgICByZXR1cm4gRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgKyBzaXplOworICAgIHJldHVybiAoRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgLSAxKSArIHNpemU7CiAjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKICAgZWxzZSBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFCiAJICAgJiYgY2lmLT5hYmkgIT0gRkZJX0xJTlVYICYmIGNpZi0+YWJpICE9IEZGSV9MSU5VWF9TT0ZUX0ZMT0FUKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYwppbmRleCA1MDEwMzVkLi5kODRmMWMzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYwpAQCAtMyw3ICszLDcgQEAKIAogICAgQ29weXJpZ2h0IChDKSAxOTk4IEdlb2ZmcmV5IEtlYXRpbmcKICAgIENvcHlyaWdodCAoQykgMjAwMSBKb2huIEhvcm5rdmlzdAotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBGRkkgc3VwcG9ydCBmb3IgRGFyd2luIGFuZCBBSVguCiAgICAKQEAgLTMyLDcgKzMyLDcgQEAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi1leHRlcm4gdm9pZCBmZmlfY2xvc3VyZV9BU00odm9pZCk7CitleHRlcm4gdm9pZCBmZmlfY2xvc3VyZV9BU00gKHZvaWQpOwogCiBlbnVtIHsKICAgLyogVGhlIGFzc2VtYmx5IGRlcGVuZHMgb24gdGhlc2UgZXhhY3QgZmxhZ3MuICAqLwpAQCAtODAsMzQgKzgwLDM3IEBACiAKICAgICovCiAKLXZvaWQgZmZpX3ByZXBfYXJncyhleHRlbmRlZF9jaWYgKmVjaWYsIHVuc2lnbmVkICpjb25zdCBzdGFjaykKK3ZvaWQKK2ZmaV9wcmVwX2FyZ3MgKGV4dGVuZGVkX2NpZiAqZWNpZiwgdW5zaWduZWQgbG9uZyAqY29uc3Qgc3RhY2spCiB7CiAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzID0gZWNpZi0+Y2lmLT5ieXRlczsKICAgY29uc3QgdW5zaWduZWQgZmxhZ3MgPSBlY2lmLT5jaWYtPmZsYWdzOworICBjb25zdCB1bnNpZ25lZCBuYXJncyA9IGVjaWYtPmNpZi0+bmFyZ3M7CisgIGNvbnN0IGZmaV9hYmkgYWJpID0gZWNpZi0+Y2lmLT5hYmk7CiAKICAgLyogJ3N0YWNrdG9wJyBwb2ludHMgYXQgdGhlIHByZXZpb3VzIGJhY2tjaGFpbiBwb2ludGVyLiAgKi8KLSAgdW5zaWduZWQgKmNvbnN0IHN0YWNrdG9wID0gc3RhY2sgKyAoYnl0ZXMgLyBzaXplb2YodW5zaWduZWQpKTsKKyAgdW5zaWduZWQgbG9uZyAqY29uc3Qgc3RhY2t0b3AgPSBzdGFjayArIChieXRlcyAvIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiAKICAgLyogJ2Zwcl9iYXNlJyBwb2ludHMgYXQgdGhlIHNwYWNlIGZvciBmcHIxLCBhbmQgZ3Jvd3MgdXB3YXJkcyBhcwogICAgICB3ZSB1c2UgRlBSIHJlZ2lzdGVycy4gICovCi0gIGRvdWJsZSAqZnByX2Jhc2UgPSAoZG91YmxlKikgKHN0YWNrdG9wIC0gQVNNX05FRURTX1JFR0lTVEVSUykgLSBOVU1fRlBSX0FSR19SRUdJU1RFUlM7CisgIGRvdWJsZSAqZnByX2Jhc2UgPSAoZG91YmxlICopIChzdGFja3RvcCAtIEFTTV9ORUVEU19SRUdJU1RFUlMpIC0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTOwogICBpbnQgZnBhcmdfY291bnQgPSAwOwogCiAKICAgLyogJ25leHRfYXJnJyBncm93cyB1cCBhcyB3ZSBwdXQgcGFyYW1ldGVycyBpbiBpdC4gICovCi0gIHVuc2lnbmVkICpuZXh0X2FyZyA9IHN0YWNrICsgNjsgLyogNiByZXNlcnZlZCBwb3NpdGlvbnMuICAqLworICB1bnNpZ25lZCBsb25nICpuZXh0X2FyZyA9IHN0YWNrICsgNjsgLyogNiByZXNlcnZlZCBwb3NpdGlvbnMuICAqLwogCi0gIGludCBpID0gZWNpZi0+Y2lmLT5uYXJnczsKKyAgaW50IGk7CiAgIGRvdWJsZSBkb3VibGVfdG1wOwogICB2b2lkICoqcF9hcmd2ID0gZWNpZi0+YXZhbHVlOwotICB1bnNpZ25lZCBncHJ2YWx1ZTsKKyAgdW5zaWduZWQgbG9uZyBncHJ2YWx1ZTsKICAgZmZpX3R5cGUqKiBwdHIgPSBlY2lmLT5jaWYtPmFyZ190eXBlczsKICAgY2hhciAqZGVzdF9jcHk7CiAgIHVuc2lnbmVkIHNpemVfYWwgPSAwOwogCiAgIC8qIENoZWNrIHRoYXQgZXZlcnl0aGluZyBzdGFydHMgYWxpZ25lZCBwcm9wZXJseS4gICovCi0gIEZGSV9BU1NFUlQoKCh1bnNpZ25lZCkoY2hhciAqKXN0YWNrICYgMHhGKSA9PSAwKTsKLSAgRkZJX0FTU0VSVCgoKHVuc2lnbmVkKShjaGFyICopc3RhY2t0b3AgJiAweEYpID09IDApOworICBGRklfQVNTRVJUKCgodW5zaWduZWQpIChjaGFyICopIHN0YWNrICYgMHhGKSA9PSAwKTsKKyAgRkZJX0FTU0VSVCgoKHVuc2lnbmVkKSAoY2hhciAqKSBzdGFja3RvcCAmIDB4RikgPT0gMCk7CiAgIEZGSV9BU1NFUlQoKGJ5dGVzICYgMHhGKSA9PSAwKTsKIAogICAvKiBEZWFsIHdpdGggcmV0dXJuIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxseSBwYXNzLWJ5LXJlZmVyZW5jZS4KQEAgLTExNSwxMiArMTE4LDEwIEBACiAgICAgIFJldHVybiB2YWx1ZXMgYXJlIHJlZmVyZW5jZWQgYnkgcjMsIHNvIHI0IGlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuICAqLwogCiAgIGlmIChmbGFncyAmIEZMQUdfUkVUVkFMX1JFRkVSRU5DRSkKLSAgICAqbmV4dF9hcmcrKyA9ICh1bnNpZ25lZCkoY2hhciAqKWVjaWYtPnJ2YWx1ZTsKKyAgICAqbmV4dF9hcmcrKyA9ICh1bnNpZ25lZCBsb25nKSAoY2hhciAqKSBlY2lmLT5ydmFsdWU7CiAKICAgLyogTm93IGZvciB0aGUgYXJndW1lbnRzLiAgKi8KLSAgZm9yICg7Ci0gICAgICAgaSA+IDA7Ci0gICAgICAgaS0tLCBwdHIrKywgcF9hcmd2KyspCisgIGZvciAoaSA9IG5hcmdzOyBpID4gMDsgaS0tLCBwdHIrKywgcF9hcmd2KyspCiAgICAgewogICAgICAgc3dpdGNoICgoKnB0ciktPnR5cGUpCiAJewpAQCAtMTI4LDcgKzEyOSw3IEBACiAJICAgcHVycG9zZSByZWdpc3RlcnMgYXJlIGZpbGxlZCwgdGhlIGNvcnJlc3BvbmRpbmcgR1BScyB0aGF0IG1hdGNoCiAJICAgdGhlIHNpemUgb2YgdGhlIGZsb2F0aW5nLXBvaW50IHBhcmFtZXRlciBhcmUgc2tpcHBlZC4gICovCiAJY2FzZSBGRklfVFlQRV9GTE9BVDoKLQkgIGRvdWJsZV90bXAgPSAqKGZsb2F0ICopKnBfYXJndjsKKwkgIGRvdWJsZV90bXAgPSAqKGZsb2F0ICopICpwX2FyZ3Y7CiAJICBpZiAoZnBhcmdfY291bnQgPj0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQogCSAgICAqKGRvdWJsZSAqKW5leHRfYXJnID0gZG91YmxlX3RtcDsKIAkgIGVsc2UKQEAgLTEzOSwxMiArMTQwLDE2IEBACiAJICBicmVhazsKIAogCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgotCSAgZG91YmxlX3RtcCA9ICooZG91YmxlICopKnBfYXJndjsKKwkgIGRvdWJsZV90bXAgPSAqKGRvdWJsZSAqKSAqcF9hcmd2OwogCSAgaWYgKGZwYXJnX2NvdW50ID49IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKIAkgICAgKihkb3VibGUgKiluZXh0X2FyZyA9IGRvdWJsZV90bXA7CiAJICBlbHNlCiAJICAgICpmcHJfYmFzZSsrID0gZG91YmxlX3RtcDsKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIG5leHRfYXJnKys7CisjZWxzZQogCSAgbmV4dF9hcmcgKz0gMjsKKyNlbmRpZgogCSAgZnBhcmdfY291bnQrKzsKIAkgIEZGSV9BU1NFUlQoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7CiAJICBicmVhazsKQEAgLTE1Miw0MiArMTU3LDcxIEBACiAjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKIAogCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKLQkgIGRvdWJsZV90bXAgPSAoKGRvdWJsZSAqKSpwX2FyZ3YpWzBdOwotCSAgaWYgKGZwYXJnX2NvdW50ID49IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKLQkgICAgKihkb3VibGUgKiluZXh0X2FyZyA9IGRvdWJsZV90bXA7CisjaWZkZWYgUE9XRVJQQzY0CisJICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCisJICAgICoobG9uZyBkb3VibGUgKikgZnByX2Jhc2UrKyA9ICoobG9uZyBkb3VibGUgKikgKnBfYXJndjsKIAkgIGVsc2UKKwkgICAgKihsb25nIGRvdWJsZSAqKSBuZXh0X2FyZyA9ICoobG9uZyBkb3VibGUgKikgKnBfYXJndjsKKwkgIG5leHRfYXJnICs9IDI7CisJICBmcGFyZ19jb3VudCArPSAyOworI2Vsc2UKKwkgIGRvdWJsZV90bXAgPSAoKGRvdWJsZSAqKSAqcF9hcmd2KVswXTsKKwkgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKIAkgICAgKmZwcl9iYXNlKysgPSBkb3VibGVfdG1wOworCSAgZWxzZQorCSAgICAqKGRvdWJsZSAqKSBuZXh0X2FyZyA9IGRvdWJsZV90bXA7CiAJICBuZXh0X2FyZyArPSAyOwogCSAgZnBhcmdfY291bnQrKzsKLQkgIGRvdWJsZV90bXAgPSAoKGRvdWJsZSAqKSpwX2FyZ3YpWzFdOwotCSAgaWYgKGZwYXJnX2NvdW50ID49IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKLQkgICAgKihkb3VibGUgKiluZXh0X2FyZyA9IGRvdWJsZV90bXA7Ci0JICBlbHNlCisKKwkgIGRvdWJsZV90bXAgPSAoKGRvdWJsZSAqKSAqcF9hcmd2KVsxXTsKKwkgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKIAkgICAgKmZwcl9iYXNlKysgPSBkb3VibGVfdG1wOworCSAgZWxzZQorCSAgICAqKGRvdWJsZSAqKSBuZXh0X2FyZyA9IGRvdWJsZV90bXA7CiAJICBuZXh0X2FyZyArPSAyOwogCSAgZnBhcmdfY291bnQrKzsKKyNlbmRpZgogCSAgRkZJX0FTU0VSVChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKIAkgIGJyZWFrOwogI2VuZGlmCiAJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CiAJY2FzZSBGRklfVFlQRV9TSU5UNjQ6Ci0JICAqKGxvbmcgbG9uZyAqKW5leHRfYXJnID0gKihsb25nIGxvbmcgKikqcF9hcmd2OwotCSAgbmV4dF9hcmcrPTI7CisjaWZkZWYgUE9XRVJQQzY0CisJICBncHJ2YWx1ZSA9ICoobG9uZyBsb25nICopICpwX2FyZ3Y7CisJICBnb3RvIHB1dGdwcjsKKyNlbHNlCisJICAqKGxvbmcgbG9uZyAqKSBuZXh0X2FyZyA9ICoobG9uZyBsb25nICopICpwX2FyZ3Y7CisJICBuZXh0X2FyZyArPSAyOworI2VuZGlmCiAJICBicmVhazsKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJICBncHJ2YWx1ZSA9ICoodW5zaWduZWQgbG9uZyAqKSAqcF9hcmd2OworCSAgZ290byBwdXRncHI7CiAJY2FzZSBGRklfVFlQRV9VSU5UODoKLQkgIGdwcnZhbHVlID0gKih1bnNpZ25lZCBjaGFyICopKnBfYXJndjsKKwkgIGdwcnZhbHVlID0gKih1bnNpZ25lZCBjaGFyICopICpwX2FyZ3Y7CiAJICBnb3RvIHB1dGdwcjsKIAljYXNlIEZGSV9UWVBFX1NJTlQ4OgotCSAgZ3BydmFsdWUgPSAqKHNpZ25lZCBjaGFyICopKnBfYXJndjsKKwkgIGdwcnZhbHVlID0gKihzaWduZWQgY2hhciAqKSAqcF9hcmd2OwogCSAgZ290byBwdXRncHI7CiAJY2FzZSBGRklfVFlQRV9VSU5UMTY6Ci0JICBncHJ2YWx1ZSA9ICoodW5zaWduZWQgc2hvcnQgKikqcF9hcmd2OworCSAgZ3BydmFsdWUgPSAqKHVuc2lnbmVkIHNob3J0ICopICpwX2FyZ3Y7CiAJICBnb3RvIHB1dGdwcjsKIAljYXNlIEZGSV9UWVBFX1NJTlQxNjoKLQkgIGdwcnZhbHVlID0gKihzaWduZWQgc2hvcnQgKikqcF9hcmd2OworCSAgZ3BydmFsdWUgPSAqKHNpZ25lZCBzaG9ydCAqKSAqcF9hcmd2OwogCSAgZ290byBwdXRncHI7CiAKIAljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIGRlc3RfY3B5ID0gKGNoYXIgKikgbmV4dF9hcmc7CisJICBzaXplX2FsID0gKCpwdHIpLT5zaXplOworCSAgaWYgKCgqcHRyKS0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gMykKKwkgICAgc2l6ZV9hbCA9IEFMSUdOKCgqcHRyKS0+c2l6ZSwgOCk7CisJICBpZiAoc2l6ZV9hbCA8IDMgJiYgYWJpID09IEZGSV9EQVJXSU4pCisJICAgIGRlc3RfY3B5ICs9IDQgLSBzaXplX2FsOworCisJICBtZW1jcHkgKChjaGFyICopIGRlc3RfY3B5LCAoY2hhciAqKSAqcF9hcmd2LCBzaXplX2FsKTsKKwkgIG5leHRfYXJnICs9IChzaXplX2FsICsgNykgLyA4OworI2Vsc2UKIAkgIGRlc3RfY3B5ID0gKGNoYXIgKikgbmV4dF9hcmc7CiAKIAkgIC8qIFN0cnVjdHVyZXMgdGhhdCBtYXRjaCB0aGUgYmFzaWMgbW9kZXMgKFFJIDEgYnl0ZSwgSEkgMiBieXRlcywKQEAgLTE5NSwyMiArMjI5LDI0IEBACiAJICAgICBTdHJ1Y3R1cmVzIHdpdGggMyBieXRlIGluIHNpemUgYXJlIHBhZGRlZCB1cHdhcmRzLiAgKi8KIAkgIHNpemVfYWwgPSAoKnB0ciktPnNpemU7CiAJICAvKiBJZiB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3QgaXMgYSBkb3VibGUsIHRoZW4gYWxpZ24KLQkgICAgIHRoZSBzdHJ1Y3QgdG8gZG91YmxlLXdvcmQuCi0JICAgICBUeXBlIDMgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL2ZmaS5oLiAjZGVmaW5lIEZGSV9UWVBFX0RPVUJMRSAzLiAgKi8KLQkgIGlmICgoKnB0ciktPmVsZW1lbnRzWzBdLT50eXBlID09IDMpCisJICAgICB0aGUgc3RydWN0IHRvIGRvdWJsZS13b3JkLiAgKi8KKwkgIGlmICgoKnB0ciktPmVsZW1lbnRzWzBdLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKIAkgICAgc2l6ZV9hbCA9IEFMSUdOKCgqcHRyKS0+c2l6ZSwgOCk7Ci0JICBpZiAoc2l6ZV9hbCA8IDMgJiYgZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX0RBUldJTikKKwkgIGlmIChzaXplX2FsIDwgMyAmJiBhYmkgPT0gRkZJX0RBUldJTikKIAkgICAgZGVzdF9jcHkgKz0gNCAtIHNpemVfYWw7CiAKLQkgIG1lbWNweSgoY2hhciAqKWRlc3RfY3B5LCAoY2hhciAqKSpwX2FyZ3YsIHNpemVfYWwpOworCSAgbWVtY3B5KChjaGFyICopIGRlc3RfY3B5LCAoY2hhciAqKSAqcF9hcmd2LCBzaXplX2FsKTsKIAkgIG5leHRfYXJnICs9IChzaXplX2FsICsgMykgLyA0OworI2VuZGlmCiAJICBicmVhazsKIAogCWNhc2UgRkZJX1RZUEVfSU5UOgotCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgogCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgotCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKLQkgIGdwcnZhbHVlID0gKih1bnNpZ25lZCAqKSpwX2FyZ3Y7CisJICBncHJ2YWx1ZSA9ICooc2lnbmVkIGludCAqKSAqcF9hcmd2OworCSAgZ290byBwdXRncHI7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKwkgIGdwcnZhbHVlID0gKih1bnNpZ25lZCBpbnQgKikgKnBfYXJndjsKIAlwdXRncHI6CiAJICAqbmV4dF9hcmcrKyA9IGdwcnZhbHVlOwogCSAgYnJlYWs7CkBAIC0yNjgsOCArMzA0LDQ0IEBACiAgIC8qIERvIG5vdCBhZGQgYWRkaXRpb25hbCB0YWlsIHBhZGRpbmcuICAqLwogfQogCisvKiBBZGp1c3QgdGhlIHNpemUgb2YgUyB0byBiZSBjb3JyZWN0IGZvciBBSVguCisgICBXb3JkLWFsaWduIGRvdWJsZSB1bmxlc3MgaXQgaXMgdGhlIGZpcnN0IG1lbWJlciBvZiBhIHN0cnVjdHVyZS4gICovCisKK3N0YXRpYyB2b2lkCithaXhfYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyAoZmZpX3R5cGUgKnMpCit7CisgIGludCBpOworCisgIGlmIChzLT50eXBlICE9IEZGSV9UWVBFX1NUUlVDVCkKKyAgICByZXR1cm47CisKKyAgcy0+c2l6ZSA9IDA7CisgIGZvciAoaSA9IDA7IHMtPmVsZW1lbnRzW2ldICE9IE5VTEw7IGkrKykKKyAgICB7CisgICAgICBmZmlfdHlwZSAqcDsKKyAgICAgIGludCBhbGlnbjsKKyAgICAgIAorICAgICAgcCA9IHMtPmVsZW1lbnRzW2ldOworICAgICAgYWl4X2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMgKHApOworICAgICAgYWxpZ24gPSBwLT5hbGlnbm1lbnQ7CisgICAgICBpZiAoaSAhPSAwICYmIHAtPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQorCWFsaWduID0gNDsKKyAgICAgIHMtPnNpemUgPSBBTElHTihzLT5zaXplLCBhbGlnbikgKyBwLT5zaXplOworICAgIH0KKyAgCisgIHMtPnNpemUgPSBBTElHTihzLT5zaXplLCBzLT5hbGlnbm1lbnQpOworICAKKyAgaWYgKHMtPmVsZW1lbnRzWzBdLT50eXBlID09IEZGSV9UWVBFX1VJTlQ2NAorICAgICAgfHwgcy0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gRkZJX1RZUEVfU0lOVDY0CisgICAgICB8fCBzLT5lbGVtZW50c1swXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUKKyAgICAgIHx8IHMtPmVsZW1lbnRzWzBdLT5hbGlnbm1lbnQgPT0gOCkKKyAgICBzLT5hbGlnbm1lbnQgPSBzLT5hbGlnbm1lbnQgPiA4ID8gcy0+YWxpZ25tZW50IDogODsKKyAgLyogRG8gbm90IGFkZCBhZGRpdGlvbmFsIHRhaWwgcGFkZGluZy4gICovCit9CisKIC8qIFBlcmZvcm0gbWFjaGluZSBkZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcuICAqLwotZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfbWFjaGRlcChmZmlfY2lmICpjaWYpCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jaWZfbWFjaGRlcCAoZmZpX2NpZiAqY2lmKQogewogICAvKiBBbGwgdGhpcyBpcyBmb3IgdGhlIERBUldJTiBBQkkuICAqLwogICBpbnQgaTsKQEAgLTI5MCw2ICszNjIsMTMgQEAKIAlkYXJ3aW5fYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyAoY2lmLT5hcmdfdHlwZXNbaV0pOwogICAgIH0KIAorICBpZiAoY2lmLT5hYmkgPT0gRkZJX0FJWCkKKyAgICB7CisgICAgICBhaXhfYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyAoY2lmLT5ydHlwZSk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrKQorCWFpeF9hZGp1c3RfYWdncmVnYXRlX3NpemVzIChjaWYtPmFyZ190eXBlc1tpXSk7CisgICAgfQorCiAgIC8qIFNwYWNlIGZvciB0aGUgZnJhbWUgcG9pbnRlciwgY2FsbGVlJ3MgTFIsIENSLCBldGMsIGFuZCBmb3IKICAgICAgdGhlIGFzbSdzIHRlbXAgcmVncy4gICovCiAKQEAgLTMyNCw2ICs0MDMsOSBAQAogCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisjaWZkZWYgUE9XRVJQQzY0CisgICAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorI2VuZGlmCiAgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfNjRCSVRTOwogICAgICAgYnJlYWs7CiAKQEAgLTM4NywxMSArNDY5LDE0IEBACiAJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CiAJICBzaXplX2FsID0gKCpwdHIpLT5zaXplOwogCSAgLyogSWYgdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgc3RydWN0IGlzIGEgZG91YmxlLCB0aGVuIGFsaWduCi0JICAgICB0aGUgc3RydWN0IHRvIGRvdWJsZS13b3JkLgotCSAgICAgVHlwZSAzIGlzIGRlZmluZWQgaW4gaW5jbHVkZS9mZmkuaC4gI2RlZmluZSBGRklfVFlQRV9ET1VCTEUgMy4gICovCi0JICBpZiAoKCpwdHIpLT5lbGVtZW50c1swXS0+dHlwZSA9PSAzKQorCSAgICAgdGhlIHN0cnVjdCB0byBkb3VibGUtd29yZC4gICovCisJICBpZiAoKCpwdHIpLT5lbGVtZW50c1swXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCiAJICAgIHNpemVfYWwgPSBBTElHTigoKnB0ciktPnNpemUsIDgpOworI2lmZGVmIFBPV0VSUEM2NAorCSAgaW50YXJnX2NvdW50ICs9IChzaXplX2FsICsgNykgLyA4OworI2Vsc2UKIAkgIGludGFyZ19jb3VudCArPSAoc2l6ZV9hbCArIDMpIC8gNDsKKyNlbmRpZgogCSAgYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDEwLDggKzQ5NSwxMyBAQAogICAgIGJ5dGVzICs9IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyAqIHNpemVvZihkb3VibGUpOwogCiAgIC8qIFN0YWNrIHNwYWNlLiAgKi8KKyNpZmRlZiBQT1dFUlBDNjQKKyAgaWYgKChpbnRhcmdfY291bnQgKyBmcGFyZ19jb3VudCkgPiBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCisgICAgYnl0ZXMgKz0gKGludGFyZ19jb3VudCArIGZwYXJnX2NvdW50KSAqIHNpemVvZihsb25nKTsKKyNlbHNlCiAgIGlmICgoaW50YXJnX2NvdW50ICsgMiAqIGZwYXJnX2NvdW50KSA+IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKICAgICBieXRlcyArPSAoaW50YXJnX2NvdW50ICsgMiAqIGZwYXJnX2NvdW50KSAqIHNpemVvZihsb25nKTsKKyNlbmRpZgogICBlbHNlCiAgICAgYnl0ZXMgKz0gTlVNX0dQUl9BUkdfUkVHSVNURVJTICogc2l6ZW9mKGxvbmcpOwogCkBAIC00MjQsMTIgKzUxNCwxMyBAQAogICByZXR1cm4gRkZJX09LOwogfQogCi1leHRlcm4gdm9pZCBmZmlfY2FsbF9BSVgoZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwKK2V4dGVybiB2b2lkIGZmaV9jYWxsX0FJWChleHRlbmRlZF9jaWYgKiwgbG9uZywgdW5zaWduZWQsIHVuc2lnbmVkICosCiAJCQkgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAoKmZuMikodm9pZCkpOwotZXh0ZXJuIHZvaWQgZmZpX2NhbGxfREFSV0lOKGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkICosCitleHRlcm4gdm9pZCBmZmlfY2FsbF9EQVJXSU4oZXh0ZW5kZWRfY2lmICosIGxvbmcsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLAogCQkJICAgIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKCpmbjIpKHZvaWQpKTsKIAotdm9pZCBmZmlfY2FsbChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSkKK3ZvaWQKK2ZmaV9jYWxsIChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSkKIHsKICAgZXh0ZW5kZWRfY2lmIGVjaWY7CiAKQEAgLTQ0Miw3ICs1MzMsNyBAQAogICBpZiAoKHJ2YWx1ZSA9PSBOVUxMKSAmJgogICAgICAgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKSkKICAgICB7Ci0gICAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYShjaWYtPnJ0eXBlLT5zaXplKTsKKyAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhIChjaWYtPnJ0eXBlLT5zaXplKTsKICAgICB9CiAgIGVsc2UKICAgICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKQEAgLTQ1MCwxMSArNTQxLDExIEBACiAgIHN3aXRjaCAoY2lmLT5hYmkpCiAgICAgewogICAgIGNhc2UgRkZJX0FJWDoKLSAgICAgIGZmaV9jYWxsX0FJWCgmZWNpZiwgLWNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbiwKKyAgICAgIGZmaV9jYWxsX0FJWCgmZWNpZiwgLShsb25nKWNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbiwKIAkJICAgZmZpX3ByZXBfYXJncyk7CiAgICAgICBicmVhazsKICAgICBjYXNlIEZGSV9EQVJXSU46Ci0gICAgICBmZmlfY2FsbF9EQVJXSU4oJmVjaWYsIC1jaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4sCisgICAgICBmZmlfY2FsbF9EQVJXSU4oJmVjaWYsIC0obG9uZyljaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4sCiAJCSAgICAgIGZmaV9wcmVwX2FyZ3MpOwogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTYxNyw4ICs3MDgsOSBAQAogICBkb3VibGUgZDsKIH0gZmZpX2RibGZsOwogCi1pbnQgZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiAoZmZpX2Nsb3N1cmUqLCB2b2lkKiwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nKiwgZmZpX2RibGZsKik7CitpbnQKK2ZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4gKGZmaV9jbG9zdXJlICosIHZvaWQgKiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKiwgZmZpX2RibGZsICopOwogCiAvKiBCYXNpY2FsbHkgdGhlIHRyYW1wb2xpbmUgaW52b2tlcyBmZmlfY2xvc3VyZV9BU00sIGFuZCBvbgogICAgZW50cnksIHIxMSBob2xkcyB0aGUgYWRkcmVzcyBvZiB0aGUgY2xvc3VyZS4KQEAgLTYyNyw4ICs3MTksOSBAQAogICAgdXAgc3BhY2UgZm9yIGEgcmV0dXJuIHZhbHVlLCBmZmlfY2xvc3VyZV9BU00gaW52b2tlcyB0aGUKICAgIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb24gdG8gZG8gbW9zdCBvZiB0aGUgd29yay4gICovCiAKLWludCBmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOIChmZmlfY2xvc3VyZSogY2xvc3VyZSwgdm9pZCAqIHJ2YWx1ZSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nICogcGdyLCBmZmlfZGJsZmwgKiBwZnIpCitpbnQKK2ZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4gKGZmaV9jbG9zdXJlICpjbG9zdXJlLCB2b2lkICpydmFsdWUsCisJCQkgICB1bnNpZ25lZCBsb25nICpwZ3IsIGZmaV9kYmxmbCAqcGZyKQogewogICAvKiBydmFsdWUgaXMgdGhlIHBvaW50ZXIgdG8gc3BhY2UgZm9yIHJldHVybiB2YWx1ZSBpbiBjbG9zdXJlIGFzc2VtYmx5CiAgICAgIHBnciBpcyB0aGUgcG9pbnRlciB0byB3aGVyZSByMy1yMTAgYXJlIHN0b3JlZCBpbiBmZmlfY2xvc3VyZV9BU00KQEAgLTY0NSwxOCArNzM4LDEyIEBACiAgIHZvaWQgKiogICAgICAgICAgYXZhbHVlOwogICBmZmlfdHlwZSAqKiAgICAgIGFyZ190eXBlczsKICAgbG9uZyAgICAgICAgICAgICBpLCBhdm47Ci0gIGxvbmcgICAgICAgICAgICAgbmY7ICAgLyogbnVtYmVyIG9mIGZsb2F0aW5nIHJlZ2lzdGVycyBhbHJlYWR5IHVzZWQuICAqLwotICBsb25nICAgICAgICAgICAgIG5nOyAgIC8qIG51bWJlciBvZiBnZW5lcmFsIHJlZ2lzdGVycyBhbHJlYWR5IHVzZWQuICAqLwogICBmZmlfY2lmICogICAgICAgIGNpZjsKLSAgZG91YmxlICAgICAgICAgICB0ZW1wOworICBmZmlfZGJsZmwgKiAgICAgIGVuZF9wZnIgPSBwZnIgKyBOVU1fRlBSX0FSR19SRUdJU1RFUlM7CiAgIHVuc2lnbmVkICAgICAgICAgc2l6ZV9hbDsKLSAgdW5pb24gbGR1ICAgICAgICB0ZW1wX2xkOwogCiAgIGNpZiA9IGNsb3N1cmUtPmNpZjsKLSAgYXZhbHVlID0gYWxsb2NhKGNpZi0+bmFyZ3MgKiBzaXplb2Yodm9pZCAqKSk7Ci0KLSAgbmYgPSAwOwotICBuZyA9IDA7CisgIGF2YWx1ZSA9IGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZih2b2lkICopKTsKIAogICAvKiBDb3B5IHRoZSBjYWxsZXIncyBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlIGFkZHJlc3Mgc28gdGhhdCB0aGUgY2xvc3VyZQogICAgICByZXR1cm5zIHRoZSBkYXRhIGRpcmVjdGx5IHRvIHRoZSBjYWxsZXIuICAqLwpAQCAtNjY0LDcgKzc1MSw2IEBACiAgICAgewogICAgICAgcnZhbHVlID0gKHZvaWQgKikgKnBncjsKICAgICAgIHBncisrOwotICAgICAgbmcrKzsKICAgICB9CiAKICAgaSA9IDA7CkBAIC02NzgsNTggKzc2NCw4MiBAQAogCXsKIAljYXNlIEZGSV9UWVBFX1NJTlQ4OgogCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisjaWZkZWYgUE9XRVJQQzY0CisJICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwZ3IgKyA3OworI2Vsc2UKIAkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBnciArIDM7Ci0JICBuZysrOworI2VuZGlmCiAJICBwZ3IrKzsKIAkgIGJyZWFrOwogCiAJY2FzZSBGRklfVFlQRV9TSU5UMTY6CiAJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisjaWZkZWYgUE9XRVJQQzY0CisJICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwZ3IgKyA2OworI2Vsc2UKIAkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBnciArIDI7Ci0JICBuZysrOworI2VuZGlmCiAJICBwZ3IrKzsKIAkgIGJyZWFrOwogCiAJY2FzZSBGRklfVFlQRV9TSU5UMzI6CiAJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisjaWZkZWYgUE9XRVJQQzY0CisJICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwZ3IgKyA0OworI2Vsc2UKIAljYXNlIEZGSV9UWVBFX1BPSU5URVI6CiAJICBhdmFsdWVbaV0gPSBwZ3I7Ci0JICBuZysrOworI2VuZGlmCiAJICBwZ3IrKzsKIAkgIGJyZWFrOwogCiAJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisjaWZkZWYgUE9XRVJQQzY0CisJICBzaXplX2FsID0gYXJnX3R5cGVzW2ldLT5zaXplOworCSAgaWYgKGFyZ190eXBlc1tpXS0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQorCSAgICBzaXplX2FsID0gQUxJR04gKGFyZ190eXBlc1tpXS0+c2l6ZSwgOCk7CisJICBpZiAoc2l6ZV9hbCA8IDMgJiYgY2lmLT5hYmkgPT0gRkZJX0RBUldJTikKKwkgICAgYXZhbHVlW2ldID0gKHZvaWQgKikgcGdyICsgOCAtIHNpemVfYWw7CisJICBlbHNlCisJICAgIGF2YWx1ZVtpXSA9ICh2b2lkICopIHBncjsKKwkgIHBnciArPSAoc2l6ZV9hbCArIDcpIC8gODsKKyNlbHNlCiAJICAvKiBTdHJ1Y3R1cmVzIHRoYXQgbWF0Y2ggdGhlIGJhc2ljIG1vZGVzIChRSSAxIGJ5dGUsIEhJIDIgYnl0ZXMsCiAJICAgICBTSSA0IGJ5dGVzKSBhcmUgYWxpZ25lZCBhcyBpZiB0aGV5IHdlcmUgdGhvc2UgbW9kZXMuICAqLwogCSAgc2l6ZV9hbCA9IGFyZ190eXBlc1tpXS0+c2l6ZTsKIAkgIC8qIElmIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdCBpcyBhIGRvdWJsZSwgdGhlbiBhbGlnbgotCSAgICAgdGhlIHN0cnVjdCB0byBkb3VibGUtd29yZC4KLQkgICAgIFR5cGUgMyBpcyBkZWZpbmVkIGluIGluY2x1ZGUvZmZpLmguICNkZWZpbmUgRkZJX1RZUEVfRE9VQkxFIDMuICAqLwotCSAgaWYgKGFyZ190eXBlc1tpXS0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gMykKKwkgICAgIHRoZSBzdHJ1Y3QgdG8gZG91YmxlLXdvcmQuICAqLworCSAgaWYgKGFyZ190eXBlc1tpXS0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQogCSAgICBzaXplX2FsID0gQUxJR04oYXJnX3R5cGVzW2ldLT5zaXplLCA4KTsKIAkgIGlmIChzaXplX2FsIDwgMyAmJiBjaWYtPmFiaSA9PSBGRklfREFSV0lOKQogCSAgICBhdmFsdWVbaV0gPSAodm9pZCopIHBnciArIDQgLSBzaXplX2FsOwogCSAgZWxzZQogCSAgICBhdmFsdWVbaV0gPSAodm9pZCopIHBncjsKLQkgIG5nICs9IChzaXplX2FsICsgMykgLyA0OwogCSAgcGdyICs9IChzaXplX2FsICsgMykgLyA0OworI2VuZGlmCiAJICBicmVhazsKIAogCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgogCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorI2lmZGVmIFBPV0VSUEM2NAorCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwkgIGF2YWx1ZVtpXSA9IHBncjsKKwkgIHBncisrOworCSAgYnJlYWs7CisjZWxzZQogCSAgLyogTG9uZyBsb25nIGludHMgYXJlIHBhc3NlZCBpbiB0d28gZ3ByJ3MuICAqLwogCSAgYXZhbHVlW2ldID0gcGdyOwotCSAgbmcgKz0gMjsKIAkgIHBnciArPSAyOwogCSAgYnJlYWs7CisjZW5kaWYKIAogCWNhc2UgRkZJX1RZUEVfRkxPQVQ6CiAJICAvKiBBIGZsb2F0IHZhbHVlIGNvbnN1bWVzIGEgR1BSLgogCSAgICAgVGhlcmUgYXJlIDEzIDY0Yml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4gICovCi0JICBpZiAobmYgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCisJICBpZiAocGZyIDwgZW5kX3BmcikKIAkgICAgewotCSAgICAgIHRlbXAgPSBwZnItPmQ7Ci0JICAgICAgcGZyLT5mID0gKGZsb2F0KXRlbXA7CisJICAgICAgZG91YmxlIHRlbXAgPSBwZnItPmQ7CisJICAgICAgcGZyLT5mID0gKGZsb2F0KSB0ZW1wOwogCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKIAkgICAgICBwZnIrKzsKIAkgICAgfQpAQCAtNzM3LDE1ICs4NDcsMTMgQEAKIAkgICAgewogCSAgICAgIGF2YWx1ZVtpXSA9IHBncjsKIAkgICAgfQotCSAgbmYrKzsKLQkgIG5nKys7CiAJICBwZ3IrKzsKIAkgIGJyZWFrOwogCiAJY2FzZSBGRklfVFlQRV9ET1VCTEU6CiAJICAvKiBBIGRvdWJsZSB2YWx1ZSBjb25zdW1lcyB0d28gR1BScy4KIAkgICAgIFRoZXJlIGFyZSAxMyA2NGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuICAqLwotCSAgaWYgKG5mIDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQorCSAgaWYgKHBmciA8IGVuZF9wZnIpCiAJICAgIHsKIAkgICAgICBhdmFsdWVbaV0gPSBwZnI7CiAJICAgICAgcGZyKys7CkBAIC03NTQsMTcgKzg2MiwzNiBAQAogCSAgICB7CiAJICAgICAgYXZhbHVlW2ldID0gcGdyOwogCSAgICB9Ci0JICBuZisrOwotCSAgbmcgKz0gMjsKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIHBncisrOworI2Vsc2UKIAkgIHBnciArPSAyOworI2VuZGlmCiAJICBicmVhazsKIAogI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCiAKIAljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisjaWZkZWYgUE9XRVJQQzY0CisJICBpZiAocGZyICsgMSA8IGVuZF9wZnIpCisJICAgIHsKKwkgICAgICBhdmFsdWVbaV0gPSBwZnI7CisJICAgICAgcGZyICs9IDI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChwZnIgPCBlbmRfcGZyKQorCQl7CisJCSAgKnBnciA9ICoodW5zaWduZWQgbG9uZyAqKSBwZnI7CisJCSAgcGZyKys7CisJCX0KKwkgICAgICBhdmFsdWVbaV0gPSBwZ3I7CisJICAgIH0KKwkgIHBnciArPSAyOworI2Vsc2UgIC8qIFBPV0VSUEM2NCAqLwogCSAgLyogQSBsb25nIGRvdWJsZSB2YWx1ZSBjb25zdW1lcyBmb3VyIEdQUnMgYW5kIHR3byBGUFJzLgogCSAgICAgVGhlcmUgYXJlIDEzIDY0Yml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4gICovCi0JICBpZiAobmYgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlMgLSAxKQorCSAgaWYgKHBmciArIDEgPCBlbmRfcGZyKQogCSAgICB7CiAJICAgICAgYXZhbHVlW2ldID0gcGZyOwogCSAgICAgIHBmciArPSAyOwpAQCAtNzcyLDE5ICs4OTksMjAgQEAKIAkgIC8qIEhlcmUgd2UgaGF2ZSB0aGUgc2l0dWF0aW9uIHdoZXJlIG9uZSBwYXJ0IG9mIHRoZSBsb25nIGRvdWJsZQogCSAgICAgaXMgc3RvcmVkIGluIGZwcjEzIGFuZCB0aGUgb3RoZXIgcGFydCBpcyBhbHJlYWR5IG9uIHRoZSBzdGFjay4KIAkgICAgIFdlIHVzZSBhIHVuaW9uIHRvIHBhc3MgdGhlIGxvbmcgZG91YmxlIHRvIGF2YWx1ZVtpXS4gICovCi0JICBlbHNlIGlmIChuZiA9PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgLSAxKQorCSAgZWxzZSBpZiAocGZyICsgMSA9PSBlbmRfcGZyKQogCSAgICB7CisJICAgICAgdW5pb24gbGR1IHRlbXBfbGQ7CiAJICAgICAgbWVtY3B5ICgmdGVtcF9sZC5sYlswXSwgcGZyLCBzaXplb2YobGRiaXRzKSk7CiAJICAgICAgbWVtY3B5ICgmdGVtcF9sZC5sYlsxXSwgcGdyICsgMiwgc2l6ZW9mKGxkYml0cykpOwogCSAgICAgIGF2YWx1ZVtpXSA9ICZ0ZW1wX2xkLmxkOworCSAgICAgIHBmcisrOwogCSAgICB9CiAJICBlbHNlCiAJICAgIHsKIAkgICAgICBhdmFsdWVbaV0gPSBwZ3I7CiAJICAgIH0KLQkgIG5mICs9IDI7Ci0JICBuZyArPSA0OwogCSAgcGdyICs9IDQ7CisjZW5kaWYgIC8qIFBPV0VSUEM2NCAqLwogCSAgYnJlYWs7CiAjZW5kaWYKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgKaW5kZXggZjQ5OWFjMy4uYjRmOTkyZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZml0YXJnZXQuaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaXRhcmdldC5oCkBAIC0xLDYgKzEsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLUMtKi0KICAgIGZmaXRhcmdldC5oIC0gQ29weXJpZ2h0IChjKSAxOTk2LTIwMDMgIFJlZCBIYXQsIEluYy4KLSAgIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYworICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCiAgICBUYXJnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MgZm9yIFBvd2VyUEMuCiAKICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwpAQCAtMzAsNyArMzAsMTEgQEAKIAogLyogLS0tLSBTeXN0ZW0gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmIGRlZmluZWQgKFBPV0VSUEMpICYmIGRlZmluZWQgKF9fcG93ZXJwYzY0X18pCisjaWYgZGVmaW5lZCAoUE9XRVJQQykgJiYgZGVmaW5lZCAoX19wb3dlcnBjNjRfXykJLyogbGludXg2NCAqLworI2RlZmluZSBQT1dFUlBDNjQKKyNlbGlmIGRlZmluZWQgKFBPV0VSUENfREFSV0lOKSAmJiBkZWZpbmVkIChfX3BwYzY0X18pCS8qIERhcndpbiAqLworI2RlZmluZSBQT1dFUlBDNjQKKyNlbGlmIGRlZmluZWQgKFBPV0VSUENfQUlYKSAmJiBkZWZpbmVkIChfXzY0QklUX18pCS8qIEFJWDY0ICovCiAjZGVmaW5lIFBPV0VSUEM2NAogI2VuZGlmCiAKQEAgLTc4LDYgKzgyLDggQEAKICAgRkZJX1NZU1YsCiAgIEZGSV9HQ0NfU1lTViwKICAgRkZJX0xJTlVYNjQsCisgIEZGSV9MSU5VWCwKKyAgRkZJX0xJTlVYX1NPRlRfRkxPQVQsCiAgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9TWVNWLAogI2VuZGlmCiAKQEAgLTk2LDcgKzEwMiw5IEBACiAvKiBOZWVkZWQgZm9yIHNvZnQtZmxvYXQgbG9uZy1kb3VibGUtMTI4IHN1cHBvcnQuICAqLwogI2RlZmluZSBGRklfVFlQRV9VSU5UMTI4IChGRklfVFlQRV9MQVNUICsgMSkKIAotLyogTmVlZGVkIGZvciBGRklfU1lTViBzbWFsbCBzdHJ1Y3R1cmUgcmV0dXJucy4gICovCisvKiBOZWVkZWQgZm9yIEZGSV9TWVNWIHNtYWxsIHN0cnVjdHVyZSByZXR1cm5zLgorICAgV2UgdXNlIHR3byBmbGFnIGJpdHMsIChGTEFHX1NZU1ZfU01TVF9SMywgRkxBR19TWVNWX1NNU1RfUjQpIHdoaWNoIGFyZQorICAgZGVmaW5lZCBpbiBmZmkuYywgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCByZXR1cm4gdHlwZSBhbmQgaXRzIHNpemUuICAqLwogI2RlZmluZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCAoRkZJX1RZUEVfTEFTVCArIDIpCiAKICNpZiBkZWZpbmVkKFBPV0VSUEM2NCkgfHwgZGVmaW5lZChQT1dFUlBDX0FJWCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMKaW5kZXggYzA2MzExZi4uOTZlYTIyYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMKQEAgLTEzNiwyOSArMTM2LDE4IEBACiAJYglMKGRvbmVfcmV0dXJuX3ZhbHVlKQogCiBMKHNtYWxsX3N0cnVjdF9yZXR1cm5fdmFsdWUpOgotCW10Y3JmCTB4MTAsJXIzMQkvKiBjcjMgICovCi0JYnQtCTE1LEwoc21zdF9vbmVfcmVnaXN0ZXIpCi0JbXRjcmYJMHgwOCwlcjMxCS8qIGNyNCAgKi8KLQlidC0JMTYsTChzbXN0X3R3b19yZWdpc3RlcikKLQliICAgICAgIEwoZG9uZV9yZXR1cm5fdmFsdWUpCi0KLUwoc21zdF9vbmVfcmVnaXN0ZXIpOgotCXJsd2lubSAgJXI1LCVyMzEsNSsyMywzMi01LDMxIC8qIEV4dHJhY3QgdGhlIHZhbHVlIHRvIHNoaWZ0LiAgKi8KLQlzbHcJJXIzLCVyMywlcjUKLQlzdHcJJXIzLDAoJXIzMCkKLQliCUwoZG9uZV9yZXR1cm5fdmFsdWUpCi1MKHNtc3RfdHdvX3JlZ2lzdGVyKToKLQlybHdpbm0gICVyNSwlcjMxLDUrMjMsMzItNSwzMSAvKiBFeHRyYWN0IHRoZSB2YWx1ZSB0byBzaGlmdC4gICovCi0JY21wd2kJJXI1LDAKLQlzdWJmaWMJJXI5LCVyNSwzMgotCXNsdwklcjI5LCVyMywlcjUKLQlzcncJJXI5LCVyNCwlcjkKLQliZXEtCUwoc21zdF84Ynl0ZSkKLQlvcgklcjMsJXI5LCVyMjkKLQlzbHcJJXI0LCVyNCwlcjUKLUwoc21zdF84Ynl0ZSk6Ci0Jc3R3CSVyMywwKCVyMzApCi0Jc3R3CSVyNCw0KCVyMzApCisJZXh0cndpCSVyNiwlcjMxLDIsMTkgICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgcGFkZGluZyA9IHNoaWZ0LzggKi8KKwltdGNyZgkweDAyLCVyMzEJICAgICAgLyogY29weSBmbGFncyB0byBjclsyNDoyN10gKGNyNikgKi8KKwlleHRyd2kJJXI1LCVyMzEsNSwxOSAgICAgICAgIC8qIHI1IDwtIG51bWJlciBvZiBiaXRzIG9mIHBhZGRpbmcgKi8KKwlzdWJmaWMgICVyNiwlcjYsNCAgICAgICAgICAgICAvKiByNiA8LSBudW1iZXIgb2YgdXNlZnVsIGJ5dGVzIGluIHIzICovCisJYmYtCTI1LEwoZG9uZV9yZXR1cm5fdmFsdWUpIC8qIHN0cnVjdCBpbiByMyA/IGlmIG5vdCwgZG9uZS4gKi8KKy8qIHNtc3Rfb25lX3JlZ2lzdGVyOiAqLworCXNsdwklcjMsJXIzLCVyNSAgICAgICAgICAgLyogTGVmdC1qdXN0aWZ5IHZhbHVlIGluIHIzICovCisJbXR4ZXIJJXI2ICAgICAgICAgICAgICAgICAgIC8qIG1vdmUgYnl0ZSBjb3VudCB0byBYRVIgLi4uICovCisJc3Rzd3gJJXIzLDAsJXIzMCAgICAgICAgICAgIC8qIC4uLiBhbmQgc3RvcmUgdGhhdCBtYW55IGJ5dGVzICovCisJYmYrCTI2LEwoZG9uZV9yZXR1cm5fdmFsdWUpICAvKiBzdHJ1Y3QgaW4gcjM6cjQgPyAqLworCWFkZAklcjYsJXI2LCVyMzAgICAgICAgICAgLyogYWRqdXN0IHBvaW50ZXIgKi8KKwlzdHN3aQklcjQsJXI2LDQgICAgICAgICAgICAgLyogc3RvcmUgbGFzdCBmb3VyIGJ5dGVzICovCiAJYglMKGRvbmVfcmV0dXJuX3ZhbHVlKQogCiAuTEZFMToKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ByZXBfY2lmLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wcmVwX2NpZi5jCmluZGV4IGViNzhmOWEuLmMxYzNiOWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ByZXBfY2lmLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcHJlcF9jaWYuYwpAQCAtMTA5LDE2ICsxMDksMTMgQEAKICAgLyogUGVyZm9ybSBhIHNhbml0eSBjaGVjayBvbiB0aGUgcmV0dXJuIHR5cGUgKi8KICAgRkZJX0FTU0VSVF9WQUxJRF9UWVBFKGNpZi0+cnR5cGUpOwogCi0gIC8qIHg4Ni02NCBhbmQgczM5MCBzdGFjayBzcGFjZSBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgaW4gcHJlcF9tYWNoZGVwLiAgKi8KLSNpZiAhZGVmaW5lZCBNNjhLICYmICFkZWZpbmVkIF9feDg2XzY0X18gJiYgIWRlZmluZWQgUzM5MCAmJiAhZGVmaW5lZCBQQQorICAvKiB4ODYsIHg4Ni02NCBhbmQgczM5MCBzdGFjayBzcGFjZSBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgaW4gcHJlcF9tYWNoZGVwLiAqLworI2lmICFkZWZpbmVkIE02OEsgJiYgIWRlZmluZWQgX19pMzg2X18gJiYgIWRlZmluZWQgX194ODZfNjRfXyAmJiAhZGVmaW5lZCBTMzkwICYmICFkZWZpbmVkIFBBCiAgIC8qIE1ha2Ugc3BhY2UgZm9yIHRoZSByZXR1cm4gc3RydWN0dXJlIHBvaW50ZXIgKi8KICAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCiAjaWZkZWYgU1BBUkMKICAgICAgICYmIChjaWYtPmFiaSAhPSBGRklfVjkgfHwgY2lmLT5ydHlwZS0+c2l6ZSA+IDMyKQogI2VuZGlmCi0jaWZkZWYgWDg2X0RBUldJTgotICAgICAgJiYgKGNpZi0+cnR5cGUtPnNpemUgPiA4KQotI2VuZGlmCiAgICAgICkKICAgICBieXRlcyA9IFNUQUNLX0FSR19TSVpFKHNpemVvZih2b2lkKikpOwogI2VuZGlmCkBAIC0xMzQsNyArMTMxLDcgQEAKIAkgY2hlY2sgYWZ0ZXIgdGhlIGluaXRpYWxpemF0aW9uLiAgKi8KICAgICAgIEZGSV9BU1NFUlRfVkFMSURfVFlQRSgqcHRyKTsKIAotI2lmICFkZWZpbmVkIF9feDg2XzY0X18gJiYgIWRlZmluZWQgUzM5MCAmJiAhZGVmaW5lZCBQQQorI2lmICFkZWZpbmVkIF9faTM4Nl9fICYmICFkZWZpbmVkIF9feDg2XzY0X18gJiYgIWRlZmluZWQgUzM5MCAmJiAhZGVmaW5lZCBQQQogI2lmZGVmIFNQQVJDCiAgICAgICBpZiAoKCgqcHRyKS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKIAkgICAmJiAoKCpwdHIpLT5zaXplID4gMTYgfHwgY2lmLT5hYmkgIT0gRkZJX1Y5KSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Jhd19hcGkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Jhd19hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTIxMzcyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcmF3X2FwaS5jCkBAIC0wLDAgKzEsMjU0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcmF3X2FwaS5jIC0gQ29weXJpZ2h0IChjKSAxOTk5LCAyMDA4ICBSZWQgSGF0LCBJbmMuCisKKyAgIEF1dGhvcjogS3Jlc3RlbiBLcmFiIFRob3J1cCA8a3JhYkBnbnUub3JnPgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGlzIGZpbGUgZGVmaW5lcyBnZW5lcmljIGZ1bmN0aW9ucyBmb3IgdXNlIHdpdGggdGhlIHJhdyBhcGkuICovCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisKKyNpZiAhRkZJX05PX1JBV19BUEkKKworc2l6ZV90CitmZmlfcmF3X3NpemUgKGZmaV9jaWYgKmNpZikKK3sKKyAgc2l6ZV90IHJlc3VsdCA9IDA7CisgIGludCBpOworCisgIGZmaV90eXBlICoqYXQgPSBjaWYtPmFyZ190eXBlczsKKworICBmb3IgKGkgPSBjaWYtPm5hcmdzLTE7IGkgPj0gMDsgaS0tLCBhdCsrKQorICAgIHsKKyNpZiAhRkZJX05PX1NUUlVDVFMKKyAgICAgIGlmICgoKmF0KS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCisJcmVzdWx0ICs9IEFMSUdOIChzaXplb2YgKHZvaWQqKSwgRkZJX1NJWkVPRl9BUkcpOworICAgICAgZWxzZQorI2VuZGlmCisJcmVzdWx0ICs9IEFMSUdOICgoKmF0KS0+c2l6ZSwgRkZJX1NJWkVPRl9BUkcpOworICAgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisKK3ZvaWQKK2ZmaV9yYXdfdG9fcHRyYXJyYXkgKGZmaV9jaWYgKmNpZiwgZmZpX3JhdyAqcmF3LCB2b2lkICoqYXJncykKK3sKKyAgdW5zaWduZWQgaTsKKyAgZmZpX3R5cGUgKip0cCA9IGNpZi0+YXJnX3R5cGVzOworCisjaWYgV09SRFNfQklHRU5ESUFOCisKKyAgZm9yIChpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKywgdHArKywgYXJncysrKQorICAgIHsJICAKKyAgICAgIHN3aXRjaCAoKCp0cCktPnR5cGUpCisJeworCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisJY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgICphcmdzID0gKHZvaWQqKSAoKGNoYXIqKShyYXcrKykgKyBGRklfU0laRU9GX0FSRyAtIDEpOworCSAgYnJlYWs7CisJICAKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwkgICphcmdzID0gKHZvaWQqKSAoKGNoYXIqKShyYXcrKykgKyBGRklfU0laRU9GX0FSRyAtIDIpOworCSAgYnJlYWs7CisKKyNpZiBGRklfU0laRU9GX0FSRyA+PSA0CSAgCisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisJY2FzZSBGRklfVFlQRV9TSU5UMzI6CisJICAqYXJncyA9ICh2b2lkKikgKChjaGFyKikocmF3KyspICsgRkZJX1NJWkVPRl9BUkcgLSA0KTsKKwkgIGJyZWFrOworI2VuZGlmCisJCisjaWYgIUZGSV9OT19TVFJVQ1RTICAKKwljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgICphcmdzID0gKHJhdysrKS0+cHRyOworCSAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwkgICphcmdzID0gKHZvaWQqKSAmKHJhdysrKS0+cHRyOworCSAgYnJlYWs7CisJICAKKwlkZWZhdWx0OgorCSAgKmFyZ3MgPSByYXc7CisJICByYXcgKz0gQUxJR04gKCgqdHApLT5zaXplLCBGRklfU0laRU9GX0FSRykgLyBGRklfU0laRU9GX0FSRzsKKwl9CisgICAgfQorCisjZWxzZSAvKiBXT1JEU19CSUdFTkRJQU4gKi8KKworI2lmICFQRFAKKworICAvKiB0aGVuIGFzc3VtZSBsaXR0bGUgZW5kaWFuICovCisgIGZvciAoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyssIHRwKyssIGFyZ3MrKykKKyAgICB7CSAgCisjaWYgIUZGSV9OT19TVFJVQ1RTCisgICAgICBpZiAoKCp0cCktPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQorCXsKKwkgICphcmdzID0gKHJhdysrKS0+cHRyOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZgorCXsKKwkgICphcmdzID0gKHZvaWQqKSByYXc7CisJICByYXcgKz0gQUxJR04gKCgqdHApLT5zaXplLCBzaXplb2YgKHZvaWQqKSkgLyBzaXplb2YgKHZvaWQqKTsKKwl9CisgICAgfQorCisjZWxzZQorI2Vycm9yICJwZHAgZW5kaWFuIG5vdCBzdXBwb3J0ZWQiCisjZW5kaWYgLyogISBQRFAgKi8KKworI2VuZGlmIC8qIFdPUkRTX0JJR0VORElBTiAqLworfQorCit2b2lkCitmZmlfcHRyYXJyYXlfdG9fcmF3IChmZmlfY2lmICpjaWYsIHZvaWQgKiphcmdzLCBmZmlfcmF3ICpyYXcpCit7CisgIHVuc2lnbmVkIGk7CisgIGZmaV90eXBlICoqdHAgPSBjaWYtPmFyZ190eXBlczsKKworICBmb3IgKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrLCB0cCsrLCBhcmdzKyspCisgICAgewkgIAorICAgICAgc3dpdGNoICgoKnRwKS0+dHlwZSkKKwl7CisJY2FzZSBGRklfVFlQRV9VSU5UODoKKwkgIChyYXcrKyktPnVpbnQgPSAqKFVJTlQ4KikgKCphcmdzKTsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgIChyYXcrKyktPnNpbnQgPSAqKFNJTlQ4KikgKCphcmdzKTsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJICAocmF3KyspLT51aW50ID0gKihVSU5UMTYqKSAoKmFyZ3MpOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwkgIChyYXcrKyktPnNpbnQgPSAqKFNJTlQxNiopICgqYXJncyk7CisJICBicmVhazsKKworI2lmIEZGSV9TSVpFT0ZfQVJHID49IDQKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKwkgIChyYXcrKyktPnVpbnQgPSAqKFVJTlQzMiopICgqYXJncyk7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgorCSAgKHJhdysrKS0+c2ludCA9ICooU0lOVDMyKikgKCphcmdzKTsKKwkgIGJyZWFrOworI2VuZGlmCisKKyNpZiAhRkZJX05PX1NUUlVDVFMKKwljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgIChyYXcrKyktPnB0ciA9ICphcmdzOworCSAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwkgIChyYXcrKyktPnB0ciA9ICoqKHZvaWQqKiopIGFyZ3M7CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICBtZW1jcHkgKCh2b2lkKikgcmF3LT5kYXRhLCAodm9pZCopKmFyZ3MsICgqdHApLT5zaXplKTsKKwkgIHJhdyArPSBBTElHTiAoKCp0cCktPnNpemUsIEZGSV9TSVpFT0ZfQVJHKSAvIEZGSV9TSVpFT0ZfQVJHOworCX0KKyAgICB9Cit9CisKKyNpZiAhRkZJX05BVElWRV9SQVdfQVBJCisKKworLyogVGhpcyBpcyBhIGdlbmVyaWMgZGVmaW5pdGlvbiBvZiBmZmlfcmF3X2NhbGwsIHRvIGJlIHVzZWQgaWYgdGhlCisgKiBuYXRpdmUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgYSBtYWNoaW5lLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLgorICogSGF2aW5nIHRoaXMsIGFsbG93cyBjb2RlIHRvIGJlIHdyaXR0ZW4gZm9yIHRoZSByYXcgQVBJLCB3aXRob3V0CisgKiB0aGUgbmVlZCBmb3Igc3lzdGVtLXNwZWNpZmljIGNvZGUgdG8gaGFuZGxlIGlucHV0IGluIHRoYXQgZm9ybWF0OworICogdGhlc2UgZm9sbG93aW5nIGNvdXBsZSBvZiBmdW5jdGlvbnMgd2lsbCBoYW5kbGUgdGhlIHRyYW5zbGF0aW9uIGZvcnRoCisgKiBhbmQgYmFjayBhdXRvbWF0aWNhbGx5LiAqLworCit2b2lkIGZmaV9yYXdfY2FsbCAoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICpydmFsdWUsIGZmaV9yYXcgKnJhdykKK3sKKyAgdm9pZCAqKmF2YWx1ZSA9ICh2b2lkKiopIGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCopKTsKKyAgZmZpX3Jhd190b19wdHJhcnJheSAoY2lmLCByYXcsIGF2YWx1ZSk7CisgIGZmaV9jYWxsIChjaWYsIGZuLCBydmFsdWUsIGF2YWx1ZSk7Cit9CisKKyNpZiBGRklfQ0xPU1VSRVMJCS8qIGJhc2Ugc3lzdGVtIHByb3ZpZGVzIGNsb3N1cmVzICovCisKK3N0YXRpYyB2b2lkCitmZmlfdHJhbnNsYXRlX2FyZ3MgKGZmaV9jaWYgKmNpZiwgdm9pZCAqcnZhbHVlLAorCQkgICAgdm9pZCAqKmF2YWx1ZSwgdm9pZCAqdXNlcl9kYXRhKQoreworICBmZmlfcmF3ICpyYXcgPSAoZmZpX3JhdyopYWxsb2NhIChmZmlfcmF3X3NpemUgKGNpZikpOworICBmZmlfcmF3X2Nsb3N1cmUgKmNsID0gKGZmaV9yYXdfY2xvc3VyZSopdXNlcl9kYXRhOworCisgIGZmaV9wdHJhcnJheV90b19yYXcgKGNpZiwgYXZhbHVlLCByYXcpOworICAoKmNsLT5mdW4pIChjaWYsIHJ2YWx1ZSwgcmF3LCBjbC0+dXNlcl9kYXRhKTsKK30KKworZmZpX3N0YXR1cworZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jIChmZmlfcmF3X2Nsb3N1cmUqIGNsLAorCQkJICBmZmlfY2lmICpjaWYsCisJCQkgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKSwKKwkJCSAgdm9pZCAqdXNlcl9kYXRhLAorCQkJICB2b2lkICpjb2RlbG9jKQoreworICBmZmlfc3RhdHVzIHN0YXR1czsKKworICBzdGF0dXMgPSBmZmlfcHJlcF9jbG9zdXJlX2xvYyAoKGZmaV9jbG9zdXJlKikgY2wsCisJCQkJIGNpZiwKKwkJCQkgJmZmaV90cmFuc2xhdGVfYXJncywKKwkJCQkgY29kZWxvYywKKwkJCQkgY29kZWxvYyk7CisgIGlmIChzdGF0dXMgPT0gRkZJX09LKQorICAgIHsKKyAgICAgIGNsLT5mdW4gICAgICAgPSBmdW47CisgICAgICBjbC0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworICAgIH0KKworICByZXR1cm4gc3RhdHVzOworfQorCisjZW5kaWYgLyogRkZJX0NMT1NVUkVTICovCisjZW5kaWYgLyogIUZGSV9OQVRJVkVfUkFXX0FQSSAqLworCisjaWYgRkZJX0NMT1NVUkVTCisKKy8qIEFnYWluLCBoZXJlIGlzIHRoZSBnZW5lcmljIHZlcnNpb24gb2YgZmZpX3ByZXBfcmF3X2Nsb3N1cmUsIHdoaWNoCisgKiB3aWxsIGluc3RhbGwgYW4gaW50ZXJtZWRpYXRlICJodWIiIGZvciB0cmFuc2xhdGlvbiBvZiBhcmd1bWVudHMgZnJvbQorICogdGhlIHBvaW50ZXItYXJyYXkgZm9ybWF0LCB0byB0aGUgcmF3IGZvcm1hdCAqLworCitmZmlfc3RhdHVzCitmZmlfcHJlcF9yYXdfY2xvc3VyZSAoZmZpX3Jhd19jbG9zdXJlKiBjbCwKKwkJICAgICAgZmZpX2NpZiAqY2lmLAorCQkgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfcmF3Kix2b2lkKiksCisJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgcmV0dXJuIGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyAoY2wsIGNpZiwgZnVuLCB1c2VyX2RhdGEsIGNsKTsKK30KKworI2VuZGlmIC8qIEZGSV9DTE9TVVJFUyAqLworCisjZW5kaWYgLyogIUZGSV9OT19SQVdfQVBJICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zMzkwL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TCmluZGV4IGI0YzFkZDUuLjQ3MzFhMzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TCkBAIC0xLDcgKzEsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHN5c3YuUyAtIENvcHlyaWdodCAoYykgMjAwMCBTb2Z0d2FyZSBBRwogICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA4IFJlZCBIYXQsIEluYy4KLQkKKyAKICAgIFMzOTAgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKICAKICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9mZmkuYwppbmRleCBkN2ZhMWQ0Li42OWJkMDI1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9mZmkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBmZmkuYyAtIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBLYXogS29qaW1hCisgICBmZmkuYyAtIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBLYXogS29qaW1hCiAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwOCBSZWQgSGF0LCBJbmMuCiAgICAKICAgIFN1cGVySCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCQkgICAgICB2b2lkICpjb2RlbG9jKQogewogICB1bnNpZ25lZCBpbnQgKnRyYW1wOwotICB1bnNpZ25lZCBzaG9ydCBpbnNuOworICB1bnNpZ25lZCBpbnQgaW5zbjsKIAogICBGRklfQVNTRVJUIChjaWYtPmFiaSA9PSBGRklfR0NDX1NZU1YpOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9zeXN2LlMKaW5kZXggZWE3OThmNy4uNWJlNzUxNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvc3lzdi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL3N5c3YuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBzeXN2LlMgLSBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDYgS2F6IEtvamltYQorICAgc3lzdi5TIC0gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA4IEtheiBLb2ppbWEKICAgIAogICAgU3VwZXJIIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIAogCkBAIC0xNCwxNCArMTQsMTQgQEAKICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCiAgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KIAotICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwotICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgotICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUgotCUFOWSBDTEFJTSwgREFNQUdFUyBPUgotICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIExJQkZGSV9BU00JCkBAIC03MDIsNiArNzAyLDEwIEBACiAuZmZpX2Nsb3N1cmVfU1lTVl9lbmQ6CiAgICAgICAgIC5zaXplICAgIENOQU1FKGZmaV9jbG9zdXJlX1NZU1YpLC5mZmlfY2xvc3VyZV9TWVNWX2VuZC1DTkFNRShmZmlfY2xvc3VyZV9TWVNWKQogCisjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworI2VuZGlmCisKIAkuc2VjdGlvbgkiLmVoX2ZyYW1lIiwiYXciLEBwcm9nYml0cwogX19GUkFNRV9CRUdJTl9fOgogCS40Ynl0ZQkuTEVDSUUxLS5MU0NJRTEJLyogTGVuZ3RoIG9mIENvbW1vbiBJbmZvcm1hdGlvbiBFbnRyeSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2g2NC9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoNjQvZmZpLmMKaW5kZXggYjE3Y2YyYy4uOGZiYzA1YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2g2NC9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaDY0L2ZmaS5jCkBAIC0xLDUgKzEsNSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGZmaS5jIC0gQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IEtheiBLb2ppbWEKKyAgIGZmaS5jIC0gQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA2LCAyMDA3IEtheiBLb2ppbWEKICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA4IEFudGhvbnkgR3JlZW4KICAgIAogICAgU3VwZXJIIFNIbWVkaWEgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCkBAIC01Niw5ICs1Niw3IEBACiAvKiBmZmlfcHJlcF9hcmdzIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCiAgICBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cyAqLwogCi0vKkAtZXhwb3J0aGVhZGVyQCovCiB2b2lkIGZmaV9wcmVwX2FyZ3MoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZikKLS8qQD1leHBvcnRoZWFkZXJAKi8KIHsKICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGk7CiAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBhdm47CkBAIC0xNjIsNiArMTYwLDcgQEAKICAgaW50IG4sIG07CiAgIGludCBncmVnOwogICBpbnQgZnJlZzsKKyAgaW50IGZwYWlyID0gLTE7CiAKICAgZ3JlZyA9IChyZXR1cm5fdHlwZSAoY2lmLT5ydHlwZSkgPT0gRkZJX1RZUEVfU1RSVUNUID8gMSA6IDApOwogICBmcmVnID0gMDsKQEAgLTE3Nyw3ICsxNzYsMTMgQEAKIAkgIGNpZi0+Ynl0ZXMgKz0gc2l6ZW9mIChVSU5UNjQpIC0gc2l6ZW9mIChmbG9hdCk7CiAJICBpZiAoZnJlZyA+PSBORlJFR0FSRyAtIDEpCiAJICAgIGNvbnRpbnVlOwotCSAgZnJlZysrOworCSAgaWYgKGZwYWlyIDwgMCkKKwkgICAgeworCSAgICAgIGZwYWlyID0gZnJlZzsKKwkgICAgICBmcmVnICs9IDI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgZnBhaXIgPSAtMTsKIAkgIGNpZi0+ZmxhZ3MyICs9ICgoY2lmLT5hcmdfdHlwZXMpW2ldLT50eXBlKSA8PCAoMiAqIGorKyk7CiAJICBicmVhazsKIApAQCAtMTg2LDcgKzE5MSw2IEBACiAJICAgIGNvbnRpbnVlOwogCSAgaWYgKChmcmVnICsgMSkgPCBORlJFR0FSRykKIAkgICAgewotCSAgICAgIGZyZWcgPSAoZnJlZyArIDEpICYgfjE7CiAJICAgICAgZnJlZyArPSAyOwogCSAgICAgIGNpZi0+ZmxhZ3MyICs9ICgoY2lmLT5hcmdfdHlwZXMpW2ldLT50eXBlKSA8PCAoMiAqIGorKyk7CiAJICAgIH0KQEAgLTI2NCw5ICsyNjgsNyBAQAogICBlbHNlIGlmICgocnZhbHVlID09IE5VTEwpICYmIAogICAgICAgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKSkKICAgICB7Ci0gICAgICAvKkAtc3lzdW5yZWNvZ0AqLwogICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EoY2lmLT5ydHlwZS0+c2l6ZSk7Ci0gICAgICAvKkA9c3lzdW5yZWNvZ0AqLwogICAgIH0KICAgZWxzZQogICAgIGVjaWYucnZhbHVlID0gcnZhbHVlOwpAQCAtMjc0LDEwICsyNzYsOCBAQAogICBzd2l0Y2ggKGNpZi0+YWJpKSAKICAgICB7CiAgICAgY2FzZSBGRklfU1lTVjoKLSAgICAgIC8qQC11c2VkZWZAKi8KLSAgICAgIGZmaV9jYWxsX1NZU1YoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsIAotCQkgICAgY2lmLT5mbGFncywgY2lmLT5mbGFnczIsIGVjaWYucnZhbHVlLCBmbik7Ci0gICAgICAvKkA9dXNlZGVmQCovCisgICAgICBmZmlfY2FsbF9TWVNWKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBjaWYtPmZsYWdzMiwKKwkJICAgIGVjaWYucnZhbHVlLCBmbik7CiAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgRkZJX0FTU0VSVCgwKTsKQEAgLTI5NCwxMCArMjk0LDExIEBACiBleHRlcm4gdm9pZCBfX2ljX2ludmFsaWRhdGUgKHZvaWQgKmxpbmUpOwogCiBmZmlfc3RhdHVzCi1mZmlfcHJlcF9jbG9zdXJlIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwKLQkJICBmZmlfY2lmICpjaWYsCi0JCSAgdm9pZCAoKmZ1bikoZmZpX2NpZiosIHZvaWQqLCB2b2lkKiosIHZvaWQqKSwKLQkJICB2b2lkICp1c2VyX2RhdGEpCitmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsCisJCSAgICAgIGZmaV9jaWYgKmNpZiwKKwkJICAgICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosIHZvaWQqLCB2b2lkKiosIHZvaWQqKSwKKwkJICAgICAgdm9pZCAqdXNlcl9kYXRhLAorCQkgICAgICB2b2lkICpjb2RlbG9jKQogewogICB1bnNpZ25lZCBpbnQgKnRyYW1wOwogCkBAIC0zMjEsOCArMzIyLDggQEAKICAgdHJhbXBbMl0gPSAweGNjMDAwMDEwIHwgKCgoVUlOVDMyKSBmZmlfY2xvc3VyZV9TWVNWKSA+PiAxNikgPDwgMTA7CiAgIHRyYW1wWzNdID0gMHhjODAwMDAxMCB8ICgoKFVJTlQzMikgZmZpX2Nsb3N1cmVfU1lTVikgJiAweGZmZmYpIDw8IDEwOwogICB0cmFtcFs0XSA9IDB4NmJmMTA2MDA7Ci0gIHRyYW1wWzVdID0gMHhjYzAwMDAxMCB8ICgoKFVJTlQzMikgY2xvc3VyZSkgPj4gMTYpIDw8IDEwOwotICB0cmFtcFs2XSA9IDB4YzgwMDAwMTAgfCAoKChVSU5UMzIpIGNsb3N1cmUpICYgMHhmZmZmKSA8PCAxMDsKKyAgdHJhbXBbNV0gPSAweGNjMDAwMDEwIHwgKCgoVUlOVDMyKSBjb2RlbG9jKSA+PiAxNikgPDwgMTA7CisgIHRyYW1wWzZdID0gMHhjODAwMDAxMCB8ICgoKFVJTlQzMikgY29kZWxvYykgJiAweGZmZmYpIDw8IDEwOwogICB0cmFtcFs3XSA9IDB4NDQwMWZmZjA7CiAKICAgY2xvc3VyZS0+Y2lmID0gY2lmOwpAQCAtMzMwLDcgKzMzMSw4IEBACiAgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKIAogICAvKiBGbHVzaCB0aGUgaWNhY2hlLiAgKi8KLSAgYXNtIHZvbGF0aWxlICgib2Nid2IgJTAsMDsgc3luY287IGljYmkgJTAsMDsgc3luY2kiIDogOiAiciIgKHRyYW1wKSk7CisgIGFzbSB2b2xhdGlsZSAoIm9jYndiICUwLDA7IHN5bmNvOyBpY2JpICUxLDA7IHN5bmNpIiA6IDogInIiICh0cmFtcCksCisJCSJyIihjb2RlbG9jKSk7CiAKICAgcmV0dXJuIEZGSV9PSzsKIH0KQEAgLTM1Miw2ICszNTQsNyBAQAogICBpbnQgaSwgYXZuOwogICBpbnQgZ3JlZywgZnJlZzsKICAgZmZpX2NpZiAqY2lmOworICBpbnQgZnBhaXIgPSAtMTsKIAogICBjaWYgPSBjbG9zdXJlLT5jaWY7CiAgIGF2YWx1ZSA9IGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCAqKSk7CkBAIC0zNjAsNyArMzYzLDcgQEAKICAgICAgcmV0dXJucyB0aGUgZGF0YSBkaXJlY3RseSB0byB0aGUgY2FsbGVyLiAgKi8KICAgaWYgKHJldHVybl90eXBlIChjaWYtPnJ0eXBlKSA9PSBGRklfVFlQRV9TVFJVQ1QpCiAgICAgewotICAgICAgcnZhbHVlID0gKnBncjsKKyAgICAgIHJ2YWx1ZSA9IChVSU5UNjQgKikgKnBncjsKICAgICAgIGdyZWcgPSAxOwogICAgIH0KICAgZWxzZQpAQCAtNDA0LDExICs0MDcsMjQgQEAKIAkgIGlmICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCkKIAkgICAgewogCSAgICAgIGlmIChmcmVnIDwgTkZSRUdBUkcgLSAxKQorCQl7CisJCSAgaWYgKGZwYWlyID49IDApCisJCSAgICB7CisJCSAgICAgIGF2YWx1ZVtpXSA9IChVSU5UMzIgKikgcGZyICsgZnBhaXI7CisJCSAgICAgIGZwYWlyID0gLTE7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgewogI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0JCWF2YWx1ZVtpXSA9IChVSU5UMzIgKikgcGZyICsgKDEgXiBmcmVnKyspOworCQkgICAgICBmcGFpciA9IGZyZWc7CisJCSAgICAgIGF2YWx1ZVtpXSA9IChVSU5UMzIgKikgcGZyICsgKDEgXiBmcmVnKTsKICNlbHNlCi0JCWF2YWx1ZVtpXSA9IChVSU5UMzIgKikgcGZyICsgZnJlZysrOworCQkgICAgICBmcGFpciA9IDEgXiBmcmVnOworCQkgICAgICBhdmFsdWVbaV0gPSAoVUlOVDMyICopIHBmciArIGZyZWc7CiAjZW5kaWYKKwkJICAgICAgZnJlZyArPSAyOworCQkgICAgfQorCQl9CiAJICAgICAgZWxzZQogI2lmZGVmIF9fTElUVExFX0VORElBTl9fCiAJCWF2YWx1ZVtpXSA9IHBnciArIGdyZWc7CkBAIC00MzAsNyArNDQ2LDYgQEAKIAkgICAgYXZhbHVlW2ldID0gcGdyICsgZ3JlZzsKIAkgIGVsc2UKIAkgICAgewotCSAgICAgIGZyZWcgPSAoZnJlZyArIDEpICYgfjE7CiAJICAgICAgYXZhbHVlW2ldID0gcGZyICsgKGZyZWcgPj4gMSk7CiAJICAgICAgZnJlZyArPSAyOwogCSAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaDY0L3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoNjQvc3lzdi5TCmluZGV4IGI2YTI0OGQuLmM0NTg3ZDUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoNjQvc3lzdi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoNjQvc3lzdi5TCkBAIC0xLDUgKzEsNSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHN5c3YuUyAtIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBLYXogS29qaW1hCisgICBzeXN2LlMgLSBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDggS2F6IEtvamltYQogICAgCiAgICBTdXBlckggU0htZWRpYSBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKIApAQCAtMTQsMTQgKzE0LDE1IEBACiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAogICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAKLSAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKLSAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLSAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IKLQlBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBMSUJGRklfQVNNCQpAQCAtODUsNiArODYsNyBAQAogCWFkZGkJcjE1LCA2NCwgcjIyCiAJbW92aQkwLCByMAogCW1vdmkJMCwgcjEKKwltb3ZpCS0xLCByMjMKIAogCXB0L2wJMWYsIHRyMQogCWJuZWkvbAlyMjksIEZGSV9UWVBFX1NUUlVDVCwgdHIxCkBAIC0xMDcsOSArMTA5LDYgQEAKIAogLkxfcGFzc19kOgogCWFkZGkJcjAsIDEsIHIwCi0JYWRkaQlyMSwgMSwgcjEKLQlhbmRpCXIxLCB+MSwgcjEKLQogCXB0L2wJM2YsIHRyMAogCW1vdmkJMTIsIHIyMAogCWJnZS9sCXIxLCByMjAsIHRyMApAQCAtMTU5LDEzICsxNTgsMjMgQEAKIAlhZGRpLmwJcjE1LCA4LCByMTUKIDM6CiAJcHQvbAkuTF9wYXNzLCB0cjAKLQlhZGRpCXIxLCAxLCByMQogCWJsaW5rCXRyMCwgcjYzCiAKIC5MX3BvcF9mOgogCXB0L2wJLkxfcG9wX2ZfdGJsLCB0cjEKKwlwdC9sCTVmLCB0cjIKIAlnZXR0cgl0cjEsIHIyMAorCWJnZS9sCXIyMywgcjYzLCB0cjIKKwlhZGQJcjEsIHI2MywgcjIzIAogCXNobGxpCXIxLCAzLCByMjEKKwlhZGRpCXIxLCAyLCByMQorCWFkZAlyMjAsIHIyMSwgcjIwCisJcHRhYnMvbAlyMjAsIHRyMQorCWJsaW5rCXRyMSwgcjYzCis1OgorCWFkZGkJcjIzLCAxLCByMjEKKwltb3ZpCS0xLCByMjMKKwlzaGxsaQlyMjEsIDMsIHIyMQogCWFkZAlyMjAsIHIyMSwgcjIwCiAJcHRhYnMvbAlyMjAsIHRyMQogCWJsaW5rCXRyMSwgcjYzCkBAIC00MzAsNiArNDM5LDEwIEBACiAuZmZpX2Nsb3N1cmVfU1lTVl9lbmQ6CiAJLnNpemUJIENOQU1FKGZmaV9jbG9zdXJlX1NZU1YpLC5mZmlfY2xvc3VyZV9TWVNWX2VuZC1DTkFNRShmZmlfY2xvc3VyZV9TWVNWKQogCisjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworI2VuZGlmCisKIAkuc2VjdGlvbgkiLmVoX2ZyYW1lIiwiYXciLEBwcm9nYml0cwogX19GUkFNRV9CRUdJTl9fOgogCS40Ynl0ZQkuTEVDSUUxLS5MU0NJRTEJLyogTGVuZ3RoIG9mIENvbW1vbiBJbmZvcm1hdGlvbiBFbnRyeSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc3BhcmMvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zcGFyYy9mZmkuYwppbmRleCA0Y2RkMWI5Li4xZDAxZjU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zcGFyYy9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zcGFyYy9mZmkuYwpAQCAtMzA4LDE0ICszMDgsMjQgQEAKIAljaWYtPmZsYWdzID0gRkZJX1RZUEVfU1RSVUNUOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisgICAgICBpZiAoY2lmLT5hYmkgPT0gRkZJX1Y5KQorCWNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9JTlQ7CisgICAgICBlbHNlCisJY2lmLT5mbGFncyA9IGNpZi0+cnR5cGUtPnR5cGU7CisgICAgICBicmVhazsKKwogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgotICAgICAgaWYgKGNpZi0+YWJpICE9IEZGSV9WOSkKLQl7Ci0JICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU0lOVDY0OwotCSAgYnJlYWs7Ci0JfQotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICAgIGlmIChjaWYtPmFiaSA9PSBGRklfVjkpCisJY2lmLT5mbGFncyA9IEZGSV9UWVBFX0lOVDsKKyAgICAgIGVsc2UKKwljaWYtPmZsYWdzID0gRkZJX1RZUEVfU0lOVDY0OworICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX0lOVDsKICAgICAgIGJyZWFrOwpAQCAtNTg5LDYgKzU5OSwxMSBAQAogCSAgLyogUmlnaHQtanVzdGlmeS4gICovCiAJICBhcmduICs9IEFMSUdOKGFyZ190eXBlc1tpXS0+c2l6ZSwgRkZJX1NJWkVPRl9BUkcpIC8gRkZJX1NJWkVPRl9BUkc7CiAKKwkgIC8qIEFsaWduIG9uIGEgMTYtYnl0ZSBib3VuZGFyeS4gICovCisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKwkgIGlmIChhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSAmJiAoYXJnbiAlIDIpICE9IDApCisJICAgIGFyZ24rKzsKKyNlbmRpZgogCSAgaWYgKGkgPCBmcF9zbG90X21heAogCSAgICAgICYmIChhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQKIAkJICB8fCBhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zcGFyYy92OC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc3BhcmMvdjguUwppbmRleCA5ZWI1NDY3Li5iZWYxYjY4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zcGFyYy92OC5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NwYXJjL3Y4LlMKQEAgLTczLDIxICs3Myw2MyBAQAogCWJlLGEJZG9uZQogCXN0CSVmMCwgWyVpNCswXQkhIChkZWxheSkKIAotCWNtcAklaTMsIEZGSV9UWVBFX1NJTlQ2NAotCWJlCWxvbmdsb25nCi0KIAljbXAJJWkzLCBGRklfVFlQRV9ET1VCTEUKLQlibmUJZG9uZQotCW5vcAotCXN0CSVmMCwgWyVpNCswXQotCXN0CSVmMSwgWyVpNCs0XQotCQorCWJlLGEJZG91YmxlCisJc3QJJWYwLCBbJWk0KzBdCSEgKGRlbGF5KQorCisJY21wCSVpMywgRkZJX1RZUEVfU0lOVDgKKwliZSxhCXNpbnQ4CisJc2xsCSVvMCwgMjQsICVvMAkhIChkZWxheSkKKworCWNtcAklaTMsIEZGSV9UWVBFX1VJTlQ4CisJYmUsYQl1aW50OAorCXNsbAklbzAsIDI0LCAlbzAJISAoZGVsYXkpCisKKwljbXAJJWkzLCBGRklfVFlQRV9TSU5UMTYKKwliZSxhCXNpbnQxNgorCXNsbAklbzAsIDE2LCAlbzAJISAoZGVsYXkpCisKKwljbXAJJWkzLCBGRklfVFlQRV9VSU5UMTYKKwliZSxhCXVpbnQxNgorCXNsbAklbzAsIDE2LCAlbzAJISAoZGVsYXkpCisKKwljbXAJJWkzLCBGRklfVFlQRV9TSU5UNjQKKwliZSxhCWxvbmdsb25nCisJc3QJJW8wLCBbJWk0KzBdCSEgKGRlbGF5KQogZG9uZToKIAlyZXQKIAlyZXN0b3JlCiAKLWxvbmdsb25nOgorZG91YmxlOgorCXN0CSVmMSwgWyVpNCs0XQorCXJldAorCXJlc3RvcmUKKworc2ludDg6CisJc3JhCSVvMCwgMjQsICVvMAogCXN0CSVvMCwgWyVpNCswXQorCXJldAorCXJlc3RvcmUKKwordWludDg6CisJc3JsCSVvMCwgMjQsICVvMAorCXN0CSVvMCwgWyVpNCswXQorCXJldAorCXJlc3RvcmUKKworc2ludDE2OgorCXNyYQklbzAsIDE2LCAlbzAKKwlzdAklbzAsIFslaTQrMF0KKwlyZXQKKwlyZXN0b3JlCisKK3VpbnQxNjoKKwlzcmwJJW8wLCAxNiwgJW8wCisJc3QJJW8wLCBbJWk0KzBdCisJcmV0CisJcmVzdG9yZQorCitsb25nbG9uZzoKIAlzdAklbzEsIFslaTQrNF0KIAlyZXQKIAlyZXN0b3JlCkBAIC0xNDgsNyArMTkwLDggQEAKIAliZQlkb25lMQogCiAJY21wCSVvMCwgRkZJX1RZUEVfSU5UCi0JYmUJaW50ZWdlcgorCWJlCWRvbmUxCisJIGxkCVslZnAtOF0sICVpMAogCiAJY21wCSVvMCwgRkZJX1RZUEVfRkxPQVQKIAliZSxhCWRvbmUxCkBAIC0xNjYsMTMgKzIwOSwxNSBAQAogCWNtcAklbzAsIEZGSV9UWVBFX1NUUlVDVAogCWJlCWRvbmUyCiAKLQkhIEZGSV9UWVBFX1NJTlQ2NAotCSEgRkZJX1RZUEVfVUlOVDY0Ci0JbGQJWyVmcC00XSwgJWkxCisJY21wCSVvMCwgRkZJX1RZUEVfU0lOVDY0CisJYmUsYQlkb25lMQorCSBsZGQJWyVmcC04XSwgJWkwCiAKLWludGVnZXI6CisJY21wCSVvMCwgRkZJX1RZUEVfVUlOVDY0CisJYmUsYQlkb25lMQorCSBsZGQJWyVmcC04XSwgJWkwCisKIAlsZAlbJWZwLThdLCAlaTAKLQogZG9uZTE6CiAJam1wCSVpNys4CiAJIHJlc3RvcmUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3R5cGVzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90eXBlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMTFlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90eXBlcy5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICB0eXBlcy5jIC0gQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk4ICBSZWQgSGF0LCBJbmMuCisgICAKKyAgIFByZWRlZmluZWQgZmZpX3R5cGVzIG5lZWRlZCBieSBsaWJmZmkuCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEhpZGUgdGhlIGJhc2ljIHR5cGUgZGVmaW5pdGlvbnMgZnJvbSB0aGUgaGVhZGVyIGZpbGUsIHNvIHRoYXQgd2UKKyAgIGNhbiByZWRlZmluZSB0aGVtIGhlcmUgYXMgImNvbnN0Ii4gICovCisjZGVmaW5lIExJQkZGSV9ISURFX0JBU0lDX1RZUEVTCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisKKy8qIFR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBGRklfVFlQRURFRihuYW1lLCB0eXBlLCBpZCkJCVwKK3N0cnVjdCBzdHJ1Y3RfYWxpZ25fIyNuYW1lIHsJCQlcCisgIGNoYXIgYzsJCQkJCVwKKyAgdHlwZSB4OwkJCQkJXAorfTsJCQkJCQlcCitjb25zdCBmZmlfdHlwZSBmZmlfdHlwZV8jI25hbWUgPSB7CQlcCisgIHNpemVvZih0eXBlKSwJCQkJCVwKKyAgb2Zmc2V0b2Yoc3RydWN0IHN0cnVjdF9hbGlnbl8jI25hbWUsIHgpLAlcCisgIGlkLCBOVUxMCQkJCQlcCit9CisKKy8qIFNpemUgYW5kIGFsaWdubWVudCBhcmUgZmFrZSBoZXJlLiBUaGV5IG11c3Qgbm90IGJlIDAuICovCitjb25zdCBmZmlfdHlwZSBmZmlfdHlwZV92b2lkID0geworICAxLCAxLCBGRklfVFlQRV9WT0lELCBOVUxMCit9OworCitGRklfVFlQRURFRih1aW50OCwgVUlOVDgsIEZGSV9UWVBFX1VJTlQ4KTsKK0ZGSV9UWVBFREVGKHNpbnQ4LCBTSU5UOCwgRkZJX1RZUEVfU0lOVDgpOworRkZJX1RZUEVERUYodWludDE2LCBVSU5UMTYsIEZGSV9UWVBFX1VJTlQxNik7CitGRklfVFlQRURFRihzaW50MTYsIFNJTlQxNiwgRkZJX1RZUEVfU0lOVDE2KTsKK0ZGSV9UWVBFREVGKHVpbnQzMiwgVUlOVDMyLCBGRklfVFlQRV9VSU5UMzIpOworRkZJX1RZUEVERUYoc2ludDMyLCBTSU5UMzIsIEZGSV9UWVBFX1NJTlQzMik7CitGRklfVFlQRURFRih1aW50NjQsIFVJTlQ2NCwgRkZJX1RZUEVfVUlOVDY0KTsKK0ZGSV9UWVBFREVGKHNpbnQ2NCwgU0lOVDY0LCBGRklfVFlQRV9TSU5UNjQpOworCitGRklfVFlQRURFRihwb2ludGVyLCB2b2lkKiwgRkZJX1RZUEVfUE9JTlRFUik7CisKK0ZGSV9UWVBFREVGKGZsb2F0LCBmbG9hdCwgRkZJX1RZUEVfRkxPQVQpOworRkZJX1RZUEVERUYoZG91YmxlLCBkb3VibGUsIEZGSV9UWVBFX0RPVUJMRSk7CisKKyNpZmRlZiBfX2FscGhhX18KKy8qIEV2ZW4gaWYgd2UncmUgbm90IGNvbmZpZ3VyZWQgdG8gZGVmYXVsdCB0byAxMjgtYml0IGxvbmcgZG91YmxlLCAKKyAgIG1haW50YWluIGJpbmFyeSBjb21wYXRpYmlsaXR5LCBhcyAtbWxvbmctZG91YmxlLTEyOCBjYW4gYmUgdXNlZAorICAgYXQgYW55IHRpbWUuICAqLworLyogVmFsaWRhdGUgdGhlIGhhcmQtY29kZWQgbnVtYmVyIGJlbG93LiAgKi8KKyMgaWYgZGVmaW5lZChfX0xPTkdfRE9VQkxFXzEyOF9fKSAmJiBGRklfVFlQRV9MT05HRE9VQkxFICE9IDQKKyMgIGVycm9yIEZGSV9UWVBFX0xPTkdET1VCTEUgb3V0IG9mIGRhdGUKKyMgZW5kaWYKK2NvbnN0IGZmaV90eXBlIGZmaV90eXBlX2xvbmdkb3VibGUgPSB7IDE2LCAxNiwgNCwgTlVMTCB9OworI2VsaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKK0ZGSV9UWVBFREVGKGxvbmdkb3VibGUsIGxvbmcgZG91YmxlLCBGRklfVFlQRV9MT05HRE9VQkxFKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2Rhcndpbi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2Rhcndpbi5TCmluZGV4IGIwYjhjZGYuLjhmMGYwNzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9kYXJ3aW4uUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZGFyd2luLlMKQEAgLTE1LDE1ICsxNSwxNiBAQAogICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogCi0gICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCi0gICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCi0gICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SCi0JQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKi8KIAogI2lmbmRlZiBfX3g4Nl82NF9fCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmkuYwppbmRleCA2MGQ3ZjQ3Li44MDQ5NjUzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaS5jCkBAIC0zLDcgKzMsNyBAQAogICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgIFJhbmppdCBNYXRoZXcKICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyICBCbyBUaG9yc2VuCiAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMiAgUm9nZXIgU2F5bGUKLQkgICBDb3B5cmlnaHQgKEMpIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICB4ODYgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKIApAQCAtMjgsNyArMjgsMTEgQEAKICAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZm5kZWYgX194ODZfNjRfXworI2lmICFkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX1dJTjY0KQorCisjaWZkZWYgX1dJTjY0CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxmZmkuaD4KICNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CkBAIC00NywxMCArNTEsMTUgQEAKIAogICBhcmdwID0gc3RhY2s7CiAKLSAgaWYgKGVjaWYtPmNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUKQorICBpZiAoZWNpZi0+Y2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QKKyNpZmRlZiBYODZfV0lONjQKKyAgICAgICYmIChlY2lmLT5jaWYtPnJ0eXBlLT5zaXplICE9IDEgJiYgZWNpZi0+Y2lmLT5ydHlwZS0+c2l6ZSAhPSAyCisgICAgICAgICAgJiYgZWNpZi0+Y2lmLT5ydHlwZS0+c2l6ZSAhPSA0ICYmIGVjaWYtPmNpZi0+cnR5cGUtPnNpemUgIT0gOCkKKyNlbmRpZgorICAgICAgKQogICAgIHsKICAgICAgICoodm9pZCAqKikgYXJncCA9IGVjaWYtPnJ2YWx1ZTsKLSAgICAgIGFyZ3AgKz0gNDsKKyAgICAgIGFyZ3AgKz0gc2l6ZW9mKHZvaWQqKTsKICAgICB9CiAKICAgcF9hcmd2ID0gZWNpZi0+YXZhbHVlOwpAQCAtNjIsNTMgKzcxLDc1IEBACiAgICAgICBzaXplX3QgejsKIAogICAgICAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5ICovCi0gICAgICBpZiAoKHNpemVvZihpbnQpIC0gMSkgJiAodW5zaWduZWQpIGFyZ3ApCi0JYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIHNpemVvZihpbnQpKTsKKyAgICAgIGlmICgoc2l6ZW9mKHZvaWQqKSAtIDEpICYgKHNpemVfdCkgYXJncCkKKyAgICAgICAgYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIHNpemVvZih2b2lkKikpOwogCiAgICAgICB6ID0gKCpwX2FyZyktPnNpemU7Ci0gICAgICBpZiAoeiA8IHNpemVvZihpbnQpKQotCXsKLQkgIHogPSBzaXplb2YoaW50KTsKLQkgIHN3aXRjaCAoKCpwX2FyZyktPnR5cGUpCi0JICAgIHsKLQkgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKLQkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDggKikoKiBwX2FyZ3YpOwotCSAgICAgIGJyZWFrOwotCi0JICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6Ci0JICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UOCAqKSgqIHBfYXJndik7Ci0JICAgICAgYnJlYWs7Ci0KLQkgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6Ci0JICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkqKFNJTlQxNiAqKSgqIHBfYXJndik7Ci0JICAgICAgYnJlYWs7Ci0KLQkgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6Ci0JICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMTYgKikoKiBwX2FyZ3YpOwotCSAgICAgIGJyZWFrOwotCi0JICAgIGNhc2UgRkZJX1RZUEVfU0lOVDMyOgotCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpKihTSU5UMzIgKikoKiBwX2FyZ3YpOwotCSAgICAgIGJyZWFrOwotCi0JICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgotCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDMyICopKCogcF9hcmd2KTsKLQkgICAgICBicmVhazsKLQotCSAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKLQkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQzMiAqKSgqIHBfYXJndik7Ci0JICAgICAgYnJlYWs7Ci0KLQkgICAgZGVmYXVsdDoKLQkgICAgICBGRklfQVNTRVJUKDApOwotCSAgICB9Ci0JfQorI2lmZGVmIFg4Nl9XSU42NAorICAgICAgaWYgKHogPiBzaXplb2YoZmZpX2FyZykKKyAgICAgICAgICB8fCAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAgICAgICAgICYmICh6ICE9IDEgJiYgeiAhPSAyICYmIHogIT0gNCAmJiB6ICE9IDgpKQorI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCisgICAgICAgICAgfHwgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCisjZW5kaWYKKyAgICAgICAgICApCisgICAgICAgIHsKKyAgICAgICAgICB6ID0gc2l6ZW9mKGZmaV9hcmcpOworICAgICAgICAgICoodm9pZCAqKilhcmdwID0gKnBfYXJndjsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQpCisgICAgICAgIHsKKyAgICAgICAgICBtZW1jcHkoYXJncCwgKnBfYXJndiwgeik7CisgICAgICAgIH0KICAgICAgIGVsc2UKLQl7Ci0JICBtZW1jcHkoYXJncCwgKnBfYXJndiwgeik7Ci0JfQorI2VuZGlmCisgICAgICBpZiAoeiA8IHNpemVvZihmZmlfYXJnKSkKKyAgICAgICAgeworICAgICAgICAgIHogPSBzaXplb2YoZmZpX2FyZyk7CisgICAgICAgICAgc3dpdGNoICgoKnBfYXJnKS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisgICAgICAgICAgICAgICooZmZpX3NhcmcgKikgYXJncCA9IChmZmlfc2FyZykqKFNJTlQ4ICopKCogcF9hcmd2KTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisgICAgICAgICAgICAgICooZmZpX2FyZyAqKSBhcmdwID0gKGZmaV9hcmcpKihVSU5UOCAqKSgqIHBfYXJndik7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKyAgICAgICAgICAgICAgKihmZmlfc2FyZyAqKSBhcmdwID0gKGZmaV9zYXJnKSooU0lOVDE2ICopKCogcF9hcmd2KTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorICAgICAgICAgICAgICAqKGZmaV9hcmcgKikgYXJncCA9IChmZmlfYXJnKSooVUlOVDE2ICopKCogcF9hcmd2KTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDMyOgorICAgICAgICAgICAgICAqKGZmaV9zYXJnICopIGFyZ3AgPSAoZmZpX3NhcmcpKihTSU5UMzIgKikoKiBwX2FyZ3YpOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9VSU5UMzI6CisgICAgICAgICAgICAgICooZmZpX2FyZyAqKSBhcmdwID0gKGZmaV9hcmcpKihVSU5UMzIgKikoKiBwX2FyZ3YpOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisgICAgICAgICAgICAgICooZmZpX2FyZyAqKSBhcmdwID0gKihmZmlfYXJnICopKCogcF9hcmd2KTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIEZGSV9BU1NFUlQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIG1lbWNweShhcmdwLCAqcF9hcmd2LCB6KTsKKyAgICAgICAgfQogICAgICAgcF9hcmd2Kys7CisjaWZkZWYgWDg2X1dJTjY0CisgICAgICBhcmdwICs9ICh6ICsgc2l6ZW9mKHZvaWQqKSAtIDEpICYgfihzaXplb2Yodm9pZCopIC0gMSk7CisjZWxzZQogICAgICAgYXJncCArPSB6OworI2VuZGlmCiAgICAgfQogICAKICAgcmV0dXJuOwpAQCAtMTE3LDMzICsxNDgsNDMgQEAKIC8qIFBlcmZvcm0gbWFjaGluZSBkZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcgKi8KIGZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmX21hY2hkZXAoZmZpX2NpZiAqY2lmKQogeworICB1bnNpZ25lZCBpbnQgaTsKKyAgZmZpX3R5cGUgKipwdHI7CisKICAgLyogU2V0IHRoZSByZXR1cm4gdHlwZSBmbGFnICovCiAgIHN3aXRjaCAoY2lmLT5ydHlwZS0+dHlwZSkKICAgICB7CiAgICAgY2FzZSBGRklfVFlQRV9WT0lEOgotI2lmZGVmIFg4NgotICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgotI2VuZGlmCi0jaWYgZGVmaW5lZChYODYpIHx8IGRlZmluZWQoWDg2X0RBUldJTikKKyNpZiBkZWZpbmVkKFg4NikgfHwgZGVmaW5lZCAoWDg2X1dJTjMyKSB8fCBkZWZpbmVkKFg4Nl9GUkVFQlNEKSB8fCBkZWZpbmVkKFg4Nl9EQVJXSU4pIHx8IGRlZmluZWQoWDg2X1dJTjY0KQogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CiAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKICNlbmRpZgotCisjaWZkZWYgWDg2X1dJTjY0CisgICAgY2FzZSBGRklfVFlQRV9VSU5UMzI6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UMzI6CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgogICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorI2lmbmRlZiBYODZfV0lONjQKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKyNlbmRpZgorI2VuZGlmCiAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKSBjaWYtPnJ0eXBlLT50eXBlOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKyNpZmRlZiBYODZfV0lONjQKKyAgICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6CisjZW5kaWYKICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TSU5UNjQ7CiAgICAgICBicmVhazsKIAotI2lmbmRlZiBYODYKICAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyNpZm5kZWYgWDg2CiAgICAgICBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA9PSAxKQogICAgICAgICB7CiAgICAgICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQjsgLyogc2FtZSBhcyBjaGFyIHNpemUgKi8KQEAgLTE1NCwyNCArMTk1LDQ5IEBACiAgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKGNpZi0+cnR5cGUtPnNpemUgPT0gNCkKICAgICAgICAgeworI2lmZGVmIFg4Nl9XSU42NAorICAgICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEI7CisjZWxzZQogICAgICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9JTlQ7IC8qIHNhbWUgYXMgaW50IHR5cGUgKi8KKyNlbmRpZgogICAgICAgICB9CiAgICAgICBlbHNlIGlmIChjaWYtPnJ0eXBlLT5zaXplID09IDgpCiAgICAgICAgIHsKICAgICAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU0lOVDY0OyAvKiBzYW1lIGFzIGludDY0IHR5cGUgKi8KICAgICAgICAgfQogICAgICAgZWxzZQorI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU1RSVUNUOworICAgICAgICAgIC8vIGFsbG9jYXRlIHNwYWNlIGZvciByZXR1cm4gdmFsdWUgcG9pbnRlcgorICAgICAgICAgIGNpZi0+Ynl0ZXMgKz0gQUxJR04oc2l6ZW9mKHZvaWQqKSwgRkZJX1NJWkVPRl9BUkcpOwogICAgICAgICB9CiAgICAgICBicmVhazsKLSNlbmRpZgogCiAgICAgZGVmYXVsdDoKKyNpZmRlZiBYODZfV0lONjQKKyAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TSU5UNjQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZGSV9UWVBFX0lOVDoKKyAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TSU5UMzI7CisjZWxzZQogICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX0lOVDsKKyNlbmRpZgogICAgICAgYnJlYWs7CiAgICAgfQogCisgIGZvciAocHRyID0gY2lmLT5hcmdfdHlwZXMsIGkgPSBjaWYtPm5hcmdzOyBpID4gMDsgaS0tLCBwdHIrKykKKyAgICB7CisgICAgICBpZiAoKCgqcHRyKS0+YWxpZ25tZW50IC0gMSkgJiBjaWYtPmJ5dGVzKQorICAgICAgICBjaWYtPmJ5dGVzID0gQUxJR04oY2lmLT5ieXRlcywgKCpwdHIpLT5hbGlnbm1lbnQpOworICAgICAgY2lmLT5ieXRlcyArPSBBTElHTigoKnB0ciktPnNpemUsIEZGSV9TSVpFT0ZfQVJHKTsKKyAgICB9CisKKyNpZmRlZiBYODZfV0lONjQKKyAgLy8gZW5zdXJlIHNwYWNlIGZvciBzdG9yaW5nIGZvdXIgcmVnaXN0ZXJzCisgIGNpZi0+Ynl0ZXMgKz0gNCAqIHNpemVvZihmZmlfYXJnKTsKKyNlbmRpZgorCiAjaWZkZWYgWDg2X0RBUldJTgogICBjaWYtPmJ5dGVzID0gKGNpZi0+Ynl0ZXMgKyAxNSkgJiB+MHhGOwogI2VuZGlmCkBAIC0xNzksMTQgKzI0NSwxOCBAQAogICByZXR1cm4gRkZJX09LOwogfQogCisjaWZkZWYgWDg2X1dJTjY0CitleHRlcm4gaW50CitmZmlfY2FsbF93aW42NCh2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgZXh0ZW5kZWRfY2lmICosCisgICAgICAgICAgICAgICB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkICosIHZvaWQgKCpmbikodm9pZCkpOworI2VsaWYgZGVmaW5lZChYODZfV0lOMzIpCitleHRlcm4gdm9pZAorZmZpX2NhbGxfd2luMzIodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIGV4dGVuZGVkX2NpZiAqLAorICAgICAgICAgICAgICAgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqZm4pKHZvaWQpKTsKKyNlbHNlCiBleHRlcm4gdm9pZCBmZmlfY2FsbF9TWVNWKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCBleHRlbmRlZF9jaWYgKiwKLQkJCSAgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqZm4pKHZvaWQpKTsKLQotI2lmZGVmIFg4Nl9XSU4zMgotZXh0ZXJuIHZvaWQgZmZpX2NhbGxfU1REQ0FMTCh2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgZXh0ZW5kZWRfY2lmICosCi0JCQkgIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwgdm9pZCAoKmZuKSh2b2lkKSk7Ci0KLSNlbmRpZiAvKiBYODZfV0lOMzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqZm4pKHZvaWQpKTsKKyNlbmRpZgogCiB2b2lkIGZmaV9jYWxsKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLCB2b2lkICoqYXZhbHVlKQogewpAQCAtMTk1LDMwICsyNjUsNjYgQEAKICAgZWNpZi5jaWYgPSBjaWY7CiAgIGVjaWYuYXZhbHVlID0gYXZhbHVlOwogICAKLSAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHJldHVybgkqLwotICAvKiB2YWx1ZSBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZQkJICAgICAgICAqLworICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuICovCisgIC8qIHZhbHVlIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lICAgICAgICAgICAgICAgICAgICAgKi8KIAotICBpZiAoKHJ2YWx1ZSA9PSBOVUxMKSAmJiAKLSAgICAgIChjaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCkpCisjaWZkZWYgWDg2X1dJTjY0CisgIGlmIChydmFsdWUgPT0gTlVMTAorICAgICAgJiYgY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmIGNpZi0+cnR5cGUtPnNpemUgIT0gMSAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDIKKyAgICAgICYmIGNpZi0+cnR5cGUtPnNpemUgIT0gNCAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDgpCisgICAgeworICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EoKGNpZi0+cnR5cGUtPnNpemUgKyAweEYpICYgfjB4Rik7CisgICAgfQorI2Vsc2UKKyAgaWYgKHJ2YWx1ZSA9PSBOVUxMCisgICAgICAmJiBjaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCkKICAgICB7CiAgICAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYShjaWYtPnJ0eXBlLT5zaXplKTsKICAgICB9CisjZW5kaWYKICAgZWxzZQogICAgIGVjaWYucnZhbHVlID0gcnZhbHVlOwogICAgIAogICAKICAgc3dpdGNoIChjaWYtPmFiaSkgCiAgICAgeworI2lmZGVmIFg4Nl9XSU42NAorICAgIGNhc2UgRkZJX1dJTjY0OgorICAgICAgeworICAgICAgICAvLyBNYWtlIGNvcGllcyBvZiBhbGwgc3RydWN0IGFyZ3VtZW50cworICAgICAgICAvLyBOT1RFOiBub3Qgc3VyZSBpZiByZXNwb25zaWJpbGl0eSBzaG91bGQgYmUgaGVyZSBvciBpbiBjYWxsZXIKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgIGZvciAoaT0wOyBpIDwgY2lmLT5uYXJncztpKyspIHsKKyAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGNpZi0+YXJnX3R5cGVzW2ldLT5zaXplOworICAgICAgICAgIGlmICgoY2lmLT5hcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAgICAgICAgICAmJiAoc2l6ZSAhPSAxICYmIHNpemUgIT0gMiAmJiBzaXplICE9IDQgJiYgc2l6ZSAhPSA4KSkKKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorICAgICAgICAgICAgICB8fCBjaWYtPmFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFCisjZW5kaWYKKyAgICAgICAgICAgICAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2b2lkICpsb2NhbCA9IGFsbG9jYShzaXplKTsKKyAgICAgICAgICAgICAgbWVtY3B5KGxvY2FsLCBhdmFsdWVbaV0sIHNpemUpOworICAgICAgICAgICAgICBhdmFsdWVbaV0gPSBsb2NhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmZmlfY2FsbF93aW42NChmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworI2VsaWYgZGVmaW5lZChYODZfV0lOMzIpCisgICAgY2FzZSBGRklfU1lTVjoKKyAgICBjYXNlIEZGSV9TVERDQUxMOgorICAgICAgZmZpX2NhbGxfd2luMzIoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgYnJlYWs7CisjZWxzZQogICAgIGNhc2UgRkZJX1NZU1Y6CiAgICAgICBmZmlfY2FsbF9TWVNWKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwKLQkJICAgIGZuKTsKKyAgICAgICAgICAgICAgICAgICAgZm4pOwogICAgICAgYnJlYWs7Ci0jaWZkZWYgWDg2X1dJTjMyCi0gICAgY2FzZSBGRklfU1REQ0FMTDoKLSAgICAgIGZmaV9jYWxsX1NURENBTEwoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsCi0JCSAgICAgICBlY2lmLnJ2YWx1ZSwgZm4pOwotICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogWDg2X1dJTjMyICovCisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgRkZJX0FTU0VSVCgwKTsKICAgICAgIGJyZWFrOwpAQCAtMjI4LDggKzMzNCwxMCBAQAogCiAvKiogcHJpdmF0ZSBtZW1iZXJzICoqLwogCisvKiBUaGUgZm9sbG93aW5nIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMSkpKSBkZWNvcmF0aW9ucyB3aWxsIGhhdmUgbm8gZWZmZWN0CisgICBvbiBNU1ZDIC0gc3RhbmRhcmQgY2RlY2wgY29udmVudGlvbiBhcHBsaWVzLiAqLwogc3RhdGljIHZvaWQgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWIChjaGFyICpzdGFjaywgdm9pZCAqKnJldCwKLQkJCQkJIHZvaWQqKiBhcmdzLCBmZmlfY2lmKiBjaWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogYXJncywgZmZpX2NpZiogY2lmKTsKIHZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9TWVNWIChmZmlfY2xvc3VyZSAqKQogICAgICBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgxKSkpOwogdW5zaWduZWQgaW50IEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciAoZmZpX2Nsb3N1cmUgKiwgdm9pZCAqKiwgdm9pZCAqKQpAQCAtMjQwLDE0ICszNDgsNDQgQEAKIHZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9TVERDQUxMIChmZmlfY2xvc3VyZSAqKQogICAgICBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgxKSkpOwogI2VuZGlmCisjaWZkZWYgWDg2X1dJTjY0Cit2b2lkIEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfd2luNjQgKGZmaV9jbG9zdXJlICopOworI2VuZGlmCiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMganVtcGVkIHRvIGJ5IHRoZSB0cmFtcG9saW5lICovCiAKLXVuc2lnbmVkIGludCBGRklfSElEREVOCi1mZmlfY2xvc3VyZV9TWVNWX2lubmVyIChjbG9zdXJlLCByZXNwcCwgYXJncykKLSAgICAgZmZpX2Nsb3N1cmUgKmNsb3N1cmU7Ci0gICAgIHZvaWQgKipyZXNwcDsKLSAgICAgdm9pZCAqYXJnczsKKyNpZmRlZiBYODZfV0lONjQKK3ZvaWQgKiBGRklfSElEREVOCitmZmlfY2xvc3VyZV93aW42NF9pbm5lciAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHZvaWQgKmFyZ3MpIHsKKyAgZmZpX2NpZiAgICAgICAqY2lmOworICB2b2lkICAgICAgICAgKiphcmdfYXJlYTsKKyAgdm9pZCAgICAgICAgICAqcmVzdWx0OworICB2b2lkICAgICAgICAgICpyZXNwID0gJnJlc3VsdDsKKworICBjaWYgICAgICAgICA9IGNsb3N1cmUtPmNpZjsKKyAgYXJnX2FyZWEgICAgPSAodm9pZCoqKSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQqKSk7ICAKKworICAvKiB0aGlzIGNhbGwgd2lsbCBpbml0aWFsaXplIEFSR19BUkVBLCBzdWNoIHRoYXQgZWFjaAorICAgKiBlbGVtZW50IGluIHRoYXQgYXJyYXkgcG9pbnRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIAorICAgKiB2YWx1ZSBvbiB0aGUgc3RhY2s7IGFuZCBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucworICAgKiBhIHN0cnVjdHVyZSwgaXQgd2lsbCBjaGFuZ2UgUkVTUCB0byBwb2ludCB0byB0aGUKKyAgICogc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAgKi8KKworICBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YoYXJncywgJnJlc3AsIGFyZ19hcmVhLCBjaWYpOworICAKKyAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgcmVzcCwgYXJnX2FyZWEsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CisKKyAgLyogVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBpbiByYXguICBUaGlzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGZvcgorICAgICByZXN1bHQgdHlwZXMgZXhjZXB0IGZvciBmbG9hdHM7IHdlIGhhdmUgdG8gJ21vdiB4bW0wLCByYXgnIGluIHRoZQorICAgICBjYWxsZXIgdG8gY29ycmVjdCB0aGlzLgorICAgICBUT0RPOiBzdHJ1Y3R1cmUgc2l6ZXMgb2YgMyA1IDYgNyBhcmUgcmV0dXJuZWQgYnkgcmVmZXJlbmNlLCB0b28hISEKKyAgKi8KKyAgcmV0dXJuIGNpZi0+cnR5cGUtPnNpemUgPiBzaXplb2Yodm9pZCAqKSA/IHJlc3AgOiAqKHZvaWQgKiopcmVzcDsKK30KKworI2Vsc2UKK3Vuc2lnbmVkIGludCBGRklfSElEREVOIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDEpKSkKK2ZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCB2b2lkICoqcmVzcHAsIHZvaWQgKmFyZ3MpCiB7CiAgIC8qIG91ciB2YXJpb3VzIHRoaW5ncy4uLiAgKi8KICAgZmZpX2NpZiAgICAgICAqY2lmOwpAQCAtMjU5LDcgKzM5Nyw3IEBACiAgIC8qIHRoaXMgY2FsbCB3aWxsIGluaXRpYWxpemUgQVJHX0FSRUEsIHN1Y2ggdGhhdCBlYWNoCiAgICAqIGVsZW1lbnQgaW4gdGhhdCBhcnJheSBwb2ludHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgCiAgICAqIHZhbHVlIG9uIHRoZSBzdGFjazsgYW5kIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zCi0gICAqIGEgc3RydWN0dXJlLCBpdCB3aWxsIHJlLXNldCBSRVNQIHRvIHBvaW50IHRvIHRoZQorICAgKiBhIHN0cnVjdHVyZSwgaXQgd2lsbCBjaGFuZ2UgUkVTUCB0byBwb2ludCB0byB0aGUKICAgICogc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAgKi8KIAogICBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YoYXJncywgcmVzcHAsIGFyZ19hcmVhLCBjaWYpOwpAQCAtMjY4LDEwICs0MDYsMTEgQEAKIAogICByZXR1cm4gY2lmLT5mbGFnczsKIH0KKyNlbmRpZiAvKiAhWDg2X1dJTjY0ICovCiAKIHN0YXRpYyB2b2lkCiBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YoY2hhciAqc3RhY2ssIHZvaWQgKipydmFsdWUsIHZvaWQgKiphdmFsdWUsCi0JCQkgICAgZmZpX2NpZiAqY2lmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZmaV9jaWYgKmNpZikKIHsKICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGk7CiAgIHJlZ2lzdGVyIHZvaWQgKipwX2FyZ3Y7CkBAIC0yODAsMTAgKzQxOSwyMCBAQAogCiAgIGFyZ3AgPSBzdGFjazsKIAorI2lmZGVmIFg4Nl9XSU42NAorICBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA+IHNpemVvZihmZmlfYXJnKQorICAgICAgfHwgKGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAgICAgJiYgKGNpZi0+cnR5cGUtPnNpemUgIT0gMSAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDIKKyAgICAgICAgICAgICAgJiYgY2lmLT5ydHlwZS0+c2l6ZSAhPSA0ICYmIGNpZi0+cnR5cGUtPnNpemUgIT0gOCkpKSB7CisgICAgKnJ2YWx1ZSA9ICoodm9pZCAqKikgYXJncDsKKyAgICBhcmdwICs9IHNpemVvZih2b2lkICopOworICB9CisjZWxzZQogICBpZiAoIGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUICkgewogICAgICpydmFsdWUgPSAqKHZvaWQgKiopIGFyZ3A7Ci0gICAgYXJncCArPSA0OworICAgIGFyZ3AgKz0gc2l6ZW9mKHZvaWQgKik7CiAgIH0KKyNlbmRpZgogCiAgIHBfYXJndiA9IGF2YWx1ZTsKIApAQCAtMjkyLDM4ICs0NDEsNzMgQEAKICAgICAgIHNpemVfdCB6OwogCiAgICAgICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkgKi8KLSAgICAgIGlmICgoc2l6ZW9mKGludCkgLSAxKSAmICh1bnNpZ25lZCkgYXJncCkgewotCWFyZ3AgPSAoY2hhciAqKSBBTElHTihhcmdwLCBzaXplb2YoaW50KSk7CisgICAgICBpZiAoKHNpemVvZih2b2lkKikgLSAxKSAmIChzaXplX3QpIGFyZ3ApIHsKKyAgICAgICAgYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIHNpemVvZih2b2lkKikpOwogICAgICAgfQogCi0gICAgICB6ID0gKCpwX2FyZyktPnNpemU7Ci0KLSAgICAgIC8qIGJlY2F1c2Ugd2UncmUgbGl0dGxlIGVuZGlhbiwgdGhpcyBpcyB3aGF0IGl0IHR1cm5zIGludG8uICAgKi8KLQotICAgICAgKnBfYXJndiA9ICh2b2lkKikgYXJncDsKLQorI2lmZGVmIFg4Nl9XSU42NAorICAgICAgaWYgKCgqcF9hcmcpLT5zaXplID4gc2l6ZW9mKGZmaV9hcmcpCisgICAgICAgICAgfHwgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgICAgICAgICAmJiAoKCpwX2FyZyktPnNpemUgIT0gMSAmJiAoKnBfYXJnKS0+c2l6ZSAhPSAyCisgICAgICAgICAgICAgICAgICAmJiAoKnBfYXJnKS0+c2l6ZSAhPSA0ICYmICgqcF9hcmcpLT5zaXplICE9IDgpKSkKKyAgICAgICAgeworICAgICAgICAgIHogPSBzaXplb2Yodm9pZCAqKTsKKyAgICAgICAgICAqcF9hcmd2ID0gKih2b2lkICoqKWFyZ3A7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOworICAgICAgICAgIAorICAgICAgICAgIC8qIGJlY2F1c2Ugd2UncmUgbGl0dGxlIGVuZGlhbiwgdGhpcyBpcyB3aGF0IGl0IHR1cm5zIGludG8uICAgKi8KKyAgICAgICAgICAKKyAgICAgICAgICAqcF9hcmd2ID0gKHZvaWQqKSBhcmdwOworICAgICAgICB9CisgICAgICAgICAgCiAgICAgICBwX2FyZ3YrKzsKKyNpZmRlZiBYODZfV0lONjQKKyAgICAgIGFyZ3AgKz0gKHogKyBzaXplb2Yodm9pZCopIC0gMSkgJiB+KHNpemVvZih2b2lkKikgLSAxKTsKKyNlbHNlCiAgICAgICBhcmdwICs9IHo7CisjZW5kaWYKICAgICB9CiAgIAogICByZXR1cm47CiB9CiAKKyNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORV9XSU42NChUUkFNUCxGVU4sQ1RYLE1BU0spIFwKK3sgdW5zaWduZWQgY2hhciAqX190cmFtcCA9ICh1bnNpZ25lZCBjaGFyKikoVFJBTVApOyBcCisgICB2b2lkKiAgX19mdW4gPSAodm9pZCopKEZVTik7IFwKKyAgIHZvaWQqICBfX2N0eCA9ICh2b2lkKikoQ1RYKTsgXAorICAgKih1bnNpZ25lZCBjaGFyKikgJl9fdHJhbXBbMF0gPSAweDQxOyBcCisgICAqKHVuc2lnbmVkIGNoYXIqKSAmX190cmFtcFsxXSA9IDB4YmI7IFwKKyAgICoodW5zaWduZWQgaW50KikgJl9fdHJhbXBbMl0gPSBNQVNLOyAvKiBtb3YgJG1hc2ssICVyMTEgKi8gXAorICAgKih1bnNpZ25lZCBjaGFyKikgJl9fdHJhbXBbNl0gPSAweDQ4OyBcCisgICAqKHVuc2lnbmVkIGNoYXIqKSAmX190cmFtcFs3XSA9IDB4Yjg7IFwKKyAgICoodm9pZCoqKSAmX190cmFtcFs4XSA9IF9fY3R4OyAvKiBtb3YgX19jdHgsICVyYXggKi8gXAorICAgKih1bnNpZ25lZCBjaGFyICopICAmX190cmFtcFsxNl0gPSAweDQ5OyBcCisgICAqKHVuc2lnbmVkIGNoYXIgKikgICZfX3RyYW1wWzE3XSA9IDB4YmE7IFwKKyAgICoodm9pZCoqKSAmX190cmFtcFsxOF0gPSBfX2Z1bjsgLyogbW92IF9fZnVuLCAlcjEwICovIFwKKyAgICoodW5zaWduZWQgY2hhciAqKSAgJl9fdHJhbXBbMjZdID0gMHg0MTsgXAorICAgKih1bnNpZ25lZCBjaGFyICopICAmX190cmFtcFsyN10gPSAweGZmOyBcCisgICAqKHVuc2lnbmVkIGNoYXIgKikgICZfX3RyYW1wWzI4XSA9IDB4ZTI7IC8qIGptcCAlcjEwICovIFwKKyB9CisKIC8qIEhvdyB0byBtYWtlIGEgdHJhbXBvbGluZS4gIERlcml2ZWQgZnJvbSBnY2MvY29uZmlnL2kzODYvaTM4Ni5jLiAqLwogCiAjZGVmaW5lIEZGSV9JTklUX1RSQU1QT0xJTkUoVFJBTVAsRlVOLENUWCkgXAotKHsgdW5zaWduZWQgY2hhciAqX190cmFtcCA9ICh1bnNpZ25lZCBjaGFyKikoVFJBTVApOyBcCit7IHVuc2lnbmVkIGNoYXIgKl9fdHJhbXAgPSAodW5zaWduZWQgY2hhciopKFRSQU1QKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2Z1biA9ICh1bnNpZ25lZCBpbnQpKEZVTik7IFwKICAgIHVuc2lnbmVkIGludCAgX19jdHggPSAodW5zaWduZWQgaW50KShDVFgpOyBcCi0gICB1bnNpZ25lZCBpbnQgIF9fZGlzID0gX19mdW4gLSAoX19jdHggKyAxMCk7CVwKKyAgIHVuc2lnbmVkIGludCAgX19kaXMgPSBfX2Z1biAtIChfX2N0eCArIDEwKTsgIFwKICAgICoodW5zaWduZWQgY2hhciopICZfX3RyYW1wWzBdID0gMHhiODsgXAogICAgKih1bnNpZ25lZCBpbnQqKSAgJl9fdHJhbXBbMV0gPSBfX2N0eDsgLyogbW92bCBfX2N0eCwgJWVheCAqLyBcCiAgICAqKHVuc2lnbmVkIGNoYXIgKikgICZfX3RyYW1wWzVdID0gMHhlOTsgXAogICAgKih1bnNpZ25lZCBpbnQqKSAgJl9fdHJhbXBbNl0gPSBfX2RpczsgLyogam1wIF9fZnVuICAqLyBcCi0gfSkKKyB9CiAKICNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMKFRSQU1QLEZVTixDVFgsU0laRSkgIFwKLSh7IHVuc2lnbmVkIGNoYXIgKl9fdHJhbXAgPSAodW5zaWduZWQgY2hhciopKFRSQU1QKTsgXAoreyB1bnNpZ25lZCBjaGFyICpfX3RyYW1wID0gKHVuc2lnbmVkIGNoYXIqKShUUkFNUCk7IFwKICAgIHVuc2lnbmVkIGludCAgX19mdW4gPSAodW5zaWduZWQgaW50KShGVU4pOyBcCiAgICB1bnNpZ25lZCBpbnQgIF9fY3R4ID0gKHVuc2lnbmVkIGludCkoQ1RYKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2RpcyA9IF9fZnVuIC0gKF9fY3R4ICsgMTApOyBcCkBAIC0zMzQsMTcgKzUxOCwyOSBAQAogICAgKih1bnNpZ25lZCBpbnQqKSAgJl9fdHJhbXBbNl0gPSBfX2RpczsgLyogY2FsbCBfX2Z1biAgKi8gXAogICAgKih1bnNpZ25lZCBjaGFyICopICAmX190cmFtcFsxMF0gPSAweGMyOyBcCiAgICAqKHVuc2lnbmVkIHNob3J0KikgICZfX3RyYW1wWzExXSA9IF9fc2l6ZTsgLyogcmV0IF9fc2l6ZSAgKi8gXAotIH0pCisgfQogCiAvKiB0aGUgY2lmIG11c3QgYWxyZWFkeSBiZSBwcmVwJ2VkICovCiAKIGZmaV9zdGF0dXMKIGZmaV9wcmVwX2Nsb3N1cmVfbG9jIChmZmlfY2xvc3VyZSogY2xvc3VyZSwKLQkJICAgICAgZmZpX2NpZiogY2lmLAotCQkgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopLAotCQkgICAgICB2b2lkICp1c2VyX2RhdGEsCi0JCSAgICAgIHZvaWQgKmNvZGVsb2MpCisgICAgICAgICAgICAgICAgICAgICAgZmZpX2NpZiogY2lmLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvZGVsb2MpCiB7CisjaWZkZWYgWDg2X1dJTjY0CisjZGVmaW5lIElTRkxPQVQoSURYKSAoY2lmLT5hcmdfdHlwZXNbSURYXS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCB8fCBjaWYtPmFyZ190eXBlc1tJRFhdLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKKyNkZWZpbmUgRkxBRyhJRFgpIChjaWYtPm5hcmdzPihJRFgpJiZJU0ZMT0FUKElEWCk/KDE8PChJRFgpKTowKQorICBpZiAoY2lmLT5hYmkgPT0gRkZJX1dJTjY0KSAKKyAgICB7CisgICAgICBpbnQgbWFzayA9IEZMQUcoMCl8RkxBRygxKXxGTEFHKDIpfEZMQUcoMyk7CisgICAgICBGRklfSU5JVF9UUkFNUE9MSU5FX1dJTjY0ICgmY2xvc3VyZS0+dHJhbXBbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmZpX2Nsb3N1cmVfd2luNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlbG9jLCBtYXNrKTsKKyAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBjYW4gZXhlY3V0ZSBoZXJlICovCisgICAgfQorI2Vsc2UKICAgaWYgKGNpZi0+YWJpID09IEZGSV9TWVNWKQogICAgIHsKICAgICAgIEZGSV9JTklUX1RSQU1QT0xJTkUgKCZjbG9zdXJlLT50cmFtcFswXSwKQEAgLTM1OCw3ICs1NTQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmZpX2Nsb3N1cmVfU1REQ0FMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWNvZGVsb2MsIGNpZi0+Ynl0ZXMpOwogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFg4Nl9XSU4zMiAqLworI2VuZGlmIC8qICFYODZfV0lONjQgKi8KICAgZWxzZQogICAgIHsKICAgICAgIHJldHVybiBGRklfQkFEX0FCSTsKQEAgLTM3NywxMCArNTc0LDEwIEBACiAKIGZmaV9zdGF0dXMKIGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyAoZmZpX3Jhd19jbG9zdXJlKiBjbG9zdXJlLAotCQkJICBmZmlfY2lmKiBjaWYsCi0JCQkgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKSwKLQkJCSAgdm9pZCAqdXNlcl9kYXRhLAotCQkJICB2b2lkICpjb2RlbG9jKQorICAgICAgICAgICAgICAgICAgICAgICAgICBmZmlfY2lmKiBjaWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb2RlbG9jKQogewogICBpbnQgaTsKIApAQCAtMzg5LDkgKzU4Niw5IEBACiAgIH0KIAogICAvKiB3ZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBjZXJ0YWluIGtpbmRzIG9mIGFyZ3VtZW50cyBmb3IgcmF3Ci0gIC8vIGNsb3N1cmVzLiAgVGhpcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYSBzZXBhcmF0ZSBhc3NlbWJseSBsYW5ndWFnZQotICAvLyByb3V0aW5lLCBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIGFyZ3VtZW50IHByb2Nlc3NpbmcsIHNvbWV0aGluZyB3ZQotICAvLyBkb24ndCBkbyBub3cgZm9yIHBlcmZvcm1hbmNlLiAqLworICAgICBjbG9zdXJlcy4gIFRoaXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IGEgc2VwYXJhdGUgYXNzZW1ibHkKKyAgICAgbGFuZ3VhZ2Ugcm91dGluZSwgc2luY2UgaXQgd291bGQgcmVxdWlyZSBhcmd1bWVudCBwcm9jZXNzaW5nLAorICAgICBzb21ldGhpbmcgd2UgZG9uJ3QgZG8gbm93IGZvciBwZXJmb3JtYW5jZS4gICovCiAKICAgZm9yIChpID0gY2lmLT5uYXJncy0xOyBpID49IDA7IGktLSkKICAgICB7CkBAIC00MDEsNyArNTk4LDcgQEAKICAgCiAKICAgRkZJX0lOSVRfVFJBTVBPTElORSAoJmNsb3N1cmUtPnRyYW1wWzBdLCAmZmZpX2Nsb3N1cmVfcmF3X1NZU1YsCi0JCSAgICAgICBjb2RlbG9jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgY29kZWxvYyk7CiAgICAgCiAgIGNsb3N1cmUtPmNpZiAgPSBjaWY7CiAgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKQEAgLTQyMSwxNiArNjE4LDYgQEAKICAqIGxpYmZmaS0xLjIwLCB0aGlzIGlzIG5vdCB0aGUgY2FzZS4pCiAgKi8KIAotZXh0ZXJuIHZvaWQKLWZmaV9jYWxsX1NZU1Yodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCwgCi0JICAgICAgdW5zaWduZWQsIHVuc2lnbmVkICosIHZvaWQgKCpmbikodm9pZCkpOwotCi0jaWZkZWYgWDg2X1dJTjMyCi1leHRlcm4gdm9pZAotZmZpX2NhbGxfU1REQ0FMTCh2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkLAotCQkgdW5zaWduZWQsIHVuc2lnbmVkICosIHZvaWQgKCpmbikodm9pZCkpOwotI2VuZGlmIC8qIFg4Nl9XSU4zMiAqLwotCiB2b2lkCiBmZmlfcmF3X2NhbGwoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICpydmFsdWUsIGZmaV9yYXcgKmZha2VfYXZhbHVlKQogewpAQCAtNDQwLDggKzYyNyw4IEBACiAgIGVjaWYuY2lmID0gY2lmOwogICBlY2lmLmF2YWx1ZSA9IGF2YWx1ZTsKICAgCi0gIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUgYSByZXR1cm4JKi8KLSAgLyogdmFsdWUgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUJCSAgICAgICAgKi8KKyAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHJldHVybiAqLworICAvKiB2YWx1ZSBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZSAgICAgICAgICAgICAgICAgICAgICovCiAKICAgaWYgKChydmFsdWUgPT0gTlVMTCkgJiYgCiAgICAgICAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpKQpAQCAtNDU0LDE2ICs2NDEsMTggQEAKICAgCiAgIHN3aXRjaCAoY2lmLT5hYmkpIAogICAgIHsKKyNpZmRlZiBYODZfV0lOMzIKKyAgICBjYXNlIEZGSV9TWVNWOgorICAgIGNhc2UgRkZJX1NURENBTEw6CisgICAgICBmZmlfY2FsbF93aW4zMihmZmlfcHJlcF9hcmdzX3JhdywgJmVjaWYsIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgYnJlYWs7CisjZWxzZQogICAgIGNhc2UgRkZJX1NZU1Y6CiAgICAgICBmZmlfY2FsbF9TWVNWKGZmaV9wcmVwX2FyZ3NfcmF3LCAmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywKLQkJICAgIGVjaWYucnZhbHVlLCBmbik7CisgICAgICAgICAgICAgICAgICAgIGVjaWYucnZhbHVlLCBmbik7CiAgICAgICBicmVhazsKLSNpZmRlZiBYODZfV0lOMzIKLSAgICBjYXNlIEZGSV9TVERDQUxMOgotICAgICAgZmZpX2NhbGxfU1REQ0FMTChmZmlfcHJlcF9hcmdzX3JhdywgJmVjaWYsIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsCi0JCSAgICAgICBlY2lmLnJ2YWx1ZSwgZm4pOwotICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogWDg2X1dJTjMyICovCisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgRkZJX0FTU0VSVCgwKTsKICAgICAgIGJyZWFrOwpAQCAtNDcyLDQgKzY2MSw1IEBACiAKICNlbmRpZgogCi0jZW5kaWYgLyogX194ODZfNjRfXyAgKi8KKyNlbmRpZiAvKiAhX194ODZfNjRfXyAgfHwgWDg2X1dJTjY0ICovCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmk2NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaTY0LmMKaW5kZXggZmE5OTI1NS4uMDdhMjYyNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaTY0LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaTY0LmMKQEAgLTEsNiArMSw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgZmZpLmMgLSBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgIEJvIFRob3JzZW4gPGJvQHN1c2UuZGU+Ci0gICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwOCAgUmVkIEhhdCwgSW5jLgorICAgZmZpNjQuYyAtIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyAgQm8gVGhvcnNlbiA8Ym9Ac3VzZS5kZT4KKyAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDggIFJlZCBIYXQsIEluYy4KICAgIAogICAgeDg2LTY0IEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIAogCkBAIC01MCw5ICs1MCwxMCBAQAogICAgZ2NjL2NvbmZpZy9pMzg2L2kzODYuYy4gRG8gKm5vdCogY2hhbmdlIG9uZSB3aXRob3V0IHRoZSBvdGhlci4gICovCiAKIC8qIFJlZ2lzdGVyIGNsYXNzIHVzZWQgZm9yIHBhc3NpbmcgZ2l2ZW4gNjRiaXQgcGFydCBvZiB0aGUgYXJndW1lbnQuCi0gICBUaGVzZSByZXByZXNlbnQgY2xhc3NlcyBhcyBkb2N1bWVudGVkIGJ5IHRoZSBQUyBBQkksIHdpdGggdGhlIGV4Y2VwdGlvbgotICAgb2YgU1NFU0YsIFNTRURGIGNsYXNzZXMsIHRoYXQgYXJlIGJhc2ljYWxseSBTU0UgY2xhc3MsIGp1c3QgZ2NjIHdpbGwKLSAgIHVzZSBTRiBvciBERm1vZGUgbW92ZSBpbnN0ZWFkIG9mIERJbW9kZSB0byBhdm9pZCByZWZvcm1hdHRpbmcgcGVuYWx0aWVzLgorICAgVGhlc2UgcmVwcmVzZW50IGNsYXNzZXMgYXMgZG9jdW1lbnRlZCBieSB0aGUgUFMgQUJJLCB3aXRoIHRoZQorICAgZXhjZXB0aW9uIG9mIFNTRVNGLCBTU0VERiBjbGFzc2VzLCB0aGF0IGFyZSBiYXNpY2FsbHkgU1NFIGNsYXNzLAorICAganVzdCBnY2Mgd2lsbCB1c2UgU0Ygb3IgREZtb2RlIG1vdmUgaW5zdGVhZCBvZiBESW1vZGUgdG8gYXZvaWQKKyAgIHJlZm9ybWF0dGluZyBwZW5hbHRpZXMuCiAKICAgIFNpbWlsYXJ5IHdlIHBsYXkgZ2FtZXMgd2l0aCBJTlRFR0VSU0lfQ0xBU1MgdG8gdXNlIGNoZWFwZXIgU0ltb2RlIG1vdmVzCiAgICB3aGVuZXZlciBwb3NzaWJsZSAodXBwZXIgaGFsZiBkb2VzIGNvbnRhaW4gcGFkZGluZykuICAqLwpAQCAtMTQ1LDEzICsxNDYsMzUgQEAKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKICAgICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6Ci0gICAgICBpZiAoYnl0ZV9vZmZzZXQgKyB0eXBlLT5zaXplIDw9IDQpCi0JY2xhc3Nlc1swXSA9IFg4Nl82NF9JTlRFR0VSU0lfQ0xBU1M7Ci0gICAgICBlbHNlCi0JY2xhc3Nlc1swXSA9IFg4Nl82NF9JTlRFR0VSX0NMQVNTOwotICAgICAgcmV0dXJuIDE7CisgICAgICB7CisJaW50IHNpemUgPSBieXRlX29mZnNldCArIHR5cGUtPnNpemU7CisKKwlpZiAoc2l6ZSA8PSA0KQorCSAgeworCSAgICBjbGFzc2VzWzBdID0gWDg2XzY0X0lOVEVHRVJTSV9DTEFTUzsKKwkgICAgcmV0dXJuIDE7CisJICB9CisJZWxzZSBpZiAoc2l6ZSA8PSA4KQorCSAgeworCSAgICBjbGFzc2VzWzBdID0gWDg2XzY0X0lOVEVHRVJfQ0xBU1M7CisJICAgIHJldHVybiAxOworCSAgfQorCWVsc2UgaWYgKHNpemUgPD0gMTIpCisJICB7CisJICAgIGNsYXNzZXNbMF0gPSBYODZfNjRfSU5URUdFUl9DTEFTUzsKKwkgICAgY2xhc3Nlc1sxXSA9IFg4Nl82NF9JTlRFR0VSU0lfQ0xBU1M7CisJICAgIHJldHVybiAyOworCSAgfQorCWVsc2UgaWYgKHNpemUgPD0gMTYpCisJICB7CisJICAgIGNsYXNzZXNbMF0gPSBjbGFzc2VzWzFdID0gWDg2XzY0X0lOVEVHRVJTSV9DTEFTUzsKKwkgICAgcmV0dXJuIDI7CisJICB9CisJZWxzZQorCSAgRkZJX0FTU0VSVCAoMCk7CisgICAgICB9CiAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKLSAgICAgIGlmIChieXRlX29mZnNldCA9PSAwKQorICAgICAgaWYgKCEoYnl0ZV9vZmZzZXQgJSA4KSkKIAljbGFzc2VzWzBdID0gWDg2XzY0X1NTRVNGX0NMQVNTOwogICAgICAgZWxzZQogCWNsYXNzZXNbMF0gPSBYODZfNjRfU1NFX0NMQVNTOwpAQCAtMTcxLDEzICsxOTQsMjEgQEAKIAlpbnQgaTsKIAllbnVtIHg4Nl82NF9yZWdfY2xhc3Mgc3ViY2xhc3Nlc1tNQVhfQ0xBU1NFU107CiAKLQkvKiBJZiB0aGUgc3RydWN0IGlzIGxhcmdlciB0aGFuIDE2IGJ5dGVzLCBwYXNzIGl0IG9uIHRoZSBzdGFjay4gICovCi0JaWYgKHR5cGUtPnNpemUgPiAxNikKKwkvKiBJZiB0aGUgc3RydWN0IGlzIGxhcmdlciB0aGFuIDMyIGJ5dGVzLCBwYXNzIGl0IG9uIHRoZSBzdGFjay4gICovCisJaWYgKHR5cGUtPnNpemUgPiAzMikKIAkgIHJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspCiAJICBjbGFzc2VzW2ldID0gWDg2XzY0X05PX0NMQVNTOwogCisJLyogWmVybyBzaXplZCBhcnJheXMgb3Igc3RydWN0dXJlcyBhcmUgTk9fQ0xBU1MuICBXZSByZXR1cm4gMCB0bworCSAgIHNpZ25hbGl6ZSBtZW1vcnkgY2xhc3MsIHNvIGhhbmRsZSBpdCBhcyBzcGVjaWFsIGNhc2UuICAqLworCWlmICghd29yZHMpCisJICB7CisJICAgIGNsYXNzZXNbMF0gPSBYODZfNjRfTk9fQ0xBU1M7CisJICAgIHJldHVybiAxOworCSAgfQorCiAJLyogTWVyZ2UgdGhlIGZpZWxkcyBvZiBzdHJ1Y3R1cmUuICAqLwogCWZvciAocHRyID0gdHlwZS0+ZWxlbWVudHM7ICpwdHIgIT0gTlVMTDsgcHRyKyspCiAJICB7CkBAIC0xOTgsNiArMjI5LDIwIEBACiAJICAgIGJ5dGVfb2Zmc2V0ICs9ICgqcHRyKS0+c2l6ZTsKIAkgIH0KIAorCWlmICh3b3JkcyA+IDIpCisJICB7CisJICAgIC8qIFdoZW4gc2l6ZSA+IDE2IGJ5dGVzLCBpZiB0aGUgZmlyc3Qgb25lIGlzbid0CisJICAgICAgIFg4Nl82NF9TU0VfQ0xBU1Mgb3IgYW55IG90aGVyIG9uZXMgYXJlbid0CisJICAgICAgIFg4Nl82NF9TU0VVUF9DTEFTUywgZXZlcnl0aGluZyBzaG91bGQgYmUgcGFzc2VkIGluCisJICAgICAgIG1lbW9yeS4gICovCisJICAgIGlmIChjbGFzc2VzWzBdICE9IFg4Nl82NF9TU0VfQ0xBU1MpCisJICAgICAgcmV0dXJuIDA7CisKKwkgICAgZm9yIChpID0gMTsgaSA8IHdvcmRzOyBpKyspCisJICAgICAgaWYgKGNsYXNzZXNbaV0gIT0gWDg2XzY0X1NTRVVQX0NMQVNTKQorCQlyZXR1cm4gMDsKKwkgIH0KKwogCS8qIEZpbmFsIG1lcmdlciBjbGVhbnVwLiAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykKIAkgIHsKQEAgLTIwNywxNSArMjUyLDI1IEBACiAJICAgICAgcmV0dXJuIDA7CiAKIAkgICAgLyogVGhlIFg4Nl82NF9TU0VVUF9DTEFTUyBzaG91bGQgYmUgYWx3YXlzIHByZWNlZGVkIGJ5Ci0JICAgICAgIFg4Nl82NF9TU0VfQ0xBU1MuICAqLworCSAgICAgICBYODZfNjRfU1NFX0NMQVNTIG9yIFg4Nl82NF9TU0VVUF9DTEFTUy4gICovCiAJICAgIGlmIChjbGFzc2VzW2ldID09IFg4Nl82NF9TU0VVUF9DTEFTUwotCQkmJiAoaSA9PSAwIHx8IGNsYXNzZXNbaSAtIDFdICE9IFg4Nl82NF9TU0VfQ0xBU1MpKQotCSAgICAgIGNsYXNzZXNbaV0gPSBYODZfNjRfU1NFX0NMQVNTOworCQkmJiBjbGFzc2VzW2kgLSAxXSAhPSBYODZfNjRfU1NFX0NMQVNTCisJCSYmIGNsYXNzZXNbaSAtIDFdICE9IFg4Nl82NF9TU0VVUF9DTEFTUykKKwkgICAgICB7CisJCS8qIFRoZSBmaXJzdCBvbmUgc2hvdWxkIG5ldmVyIGJlIFg4Nl82NF9TU0VVUF9DTEFTUy4gICovCisJCUZGSV9BU1NFUlQgKGkgIT0gMCk7CisJCWNsYXNzZXNbaV0gPSBYODZfNjRfU1NFX0NMQVNTOworCSAgICAgIH0KIAotCSAgICAvKiAgWDg2XzY0X1g4N1VQX0NMQVNTIHNob3VsZCBiZSBwcmVjZWRlZCBieSBYODZfNjRfWDg3X0NMQVNTLiAgKi8KKwkgICAgLyogIElmIFg4Nl82NF9YODdVUF9DTEFTUyBpc24ndCBwcmVjZWRlZCBieSBYODZfNjRfWDg3X0NMQVNTLAorCQlldmVyeXRoaW5nIHNob3VsZCBiZSBwYXNzZWQgaW4gbWVtb3J5LiAgKi8KIAkgICAgaWYgKGNsYXNzZXNbaV0gPT0gWDg2XzY0X1g4N1VQX0NMQVNTCi0JCSYmIChpID09IDAgfHwgY2xhc3Nlc1tpIC0gMV0gIT0gWDg2XzY0X1g4N19DTEFTUykpCi0JICAgICAgY2xhc3Nlc1tpXSA9IFg4Nl82NF9TU0VfQ0xBU1M7CisJCSYmIChjbGFzc2VzW2kgLSAxXSAhPSBYODZfNjRfWDg3X0NMQVNTKSkKKwkgICAgICB7CisJCS8qIFRoZSBmaXJzdCBvbmUgc2hvdWxkIG5ldmVyIGJlIFg4Nl82NF9YODdVUF9DTEFTUy4gICovCisJCUZGSV9BU1NFUlQgKGkgIT0gMCk7CisJCXJldHVybiAwOworCSAgICAgIH0KIAkgIH0KIAlyZXR1cm4gd29yZHM7CiAgICAgICB9CkBAIC01MjgsMTAgKzU4MywxMCBAQAogCSAgYXJncCArPSBhcmdfdHlwZXNbaV0tPnNpemU7CiAJfQogICAgICAgLyogSWYgdGhlIGFyZ3VtZW50IGlzIGluIGEgc2luZ2xlIHJlZ2lzdGVyLCBvciB0d28gY29uc2VjdXRpdmUKLQkgcmVnaXN0ZXJzLCB0aGVuIHdlIGNhbiB1c2UgdGhhdCBhZGRyZXNzIGRpcmVjdGx5LiAgKi8KKwkgaW50ZWdlciByZWdpc3RlcnMsIHRoZW4gd2UgY2FuIHVzZSB0aGF0IGFkZHJlc3MgZGlyZWN0bHkuICAqLwogICAgICAgZWxzZSBpZiAobiA9PSAxCi0JICAgICAgIHx8IChuID09IDIKLQkJICAgJiYgU1NFX0NMQVNTX1AgKGNsYXNzZXNbMF0pID09IFNTRV9DTEFTU19QIChjbGFzc2VzWzFdKSkpCisJICAgICAgIHx8IChuID09IDIgJiYgIShTU0VfQ0xBU1NfUCAoY2xhc3Nlc1swXSkKKwkJCSAgICAgICB8fCBTU0VfQ0xBU1NfUCAoY2xhc3Nlc1sxXSkpKSkKIAl7CiAJICAvKiBUaGUgYXJndW1lbnQgaXMgaW4gYSBzaW5nbGUgcmVnaXN0ZXIuICAqLwogCSAgaWYgKFNTRV9DTEFTU19QIChjbGFzc2VzWzBdKSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZml0YXJnZXQuaAppbmRleCA4MTc4ZDA2Li44OWE4OTgzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpdGFyZ2V0LmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaXRhcmdldC5oCkBAIC0xLDUgKzEsNSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLUMtKi0KLSAgIGZmaXRhcmdldC5oIC0gQ29weXJpZ2h0IChjKSAxOTk2LTIwMDMgIFJlZCBIYXQsIEluYy4KKyAgIGZmaXRhcmdldC5oIC0gQ29weXJpZ2h0IChjKSAxOTk2LTIwMDMsIDIwMTAgIFJlZCBIYXQsIEluYy4KICAgIENvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRhcmdldCBjb25maWd1cmF0aW9uIG1hY3JvcyBmb3IgeDg2IGFuZCB4ODYtNjQuCkBAIC0zNiwxMSArMzYsMjYgQEAKICNkZWZpbmUgWDg2CiAjZW5kaWYKIAorI2lmZGVmIFg4Nl9XSU42NAorI2RlZmluZSBGRklfU0laRU9GX0FSRyA4CisjZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAwIC8vIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWluZ3ctNjQgCisjZW5kaWYKKwogLyogLS0tLSBHZW5lcmljIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2lmbmRlZiBMSUJGRklfQVNNCisjaWZkZWYgWDg2X1dJTjY0CisjaWZkZWYgX01TQ19WRVIKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCAgICAgICBmZmlfYXJnOwordHlwZWRlZiBfX2ludDY0ICAgICAgICAgICAgICAgIGZmaV9zYXJnOworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nICAgICBmZmlfYXJnOwordHlwZWRlZiBsb25nIGxvbmcgICAgICAgICAgICAgIGZmaV9zYXJnOworI2VuZGlmCisjZWxzZQogdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgICAgIGZmaV9hcmc7CiB0eXBlZGVmIHNpZ25lZCBsb25nICAgICAgICAgICAgZmZpX3Nhcmc7CisjZW5kaWYKIAogdHlwZWRlZiBlbnVtIGZmaV9hYmkgewogICBGRklfRklSU1RfQUJJID0gMCwKQEAgLTUzLDE2ICs2OCwyMiBAQAogICBGRklfREVGQVVMVF9BQkkgPSBGRklfU1lTViwKICNlbmRpZgogCisjaWZkZWYgWDg2X1dJTjY0CisgIEZGSV9XSU42NCwKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1dJTjY0LAorI2Vsc2UKKwogICAvKiAtLS0tIEludGVsIHg4NiBhbmQgQU1EIHg4Ni02NCAtICovCi0jaWYgIWRlZmluZWQoWDg2X1dJTjMyKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyNpZiAhZGVmaW5lZChYODZfV0lOMzIpICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9fYW1kNjQpKQogICBGRklfU1lTViwKICAgRkZJX1VOSVg2NCwgICAvKiBVbml4IHZhcmlhbnRzIGFsbCB1c2UgdGhlIHNhbWUgQUJJIGZvciB4ODYtNjQgICovCi0jaWZkZWYgX19pMzg2X18KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTM4NikKICAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1NZU1YsCiAjZWxzZQogICBGRklfREVGQVVMVF9BQkkgPSBGRklfVU5JWDY0LAogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZiAvKiBYODZfV0lONjQgKi8KIAogICBGRklfTEFTVF9BQkkgPSBGRklfREVGQVVMVF9BQkkgKyAxCiB9IGZmaV9hYmk7CkBAIC03Myw2ICs5NCw3IEBACiAjZGVmaW5lIEZGSV9DTE9TVVJFUyAxCiAjZGVmaW5lIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAoRkZJX1RZUEVfTEFTVCArIDEpCiAjZGVmaW5lIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAoRkZJX1RZUEVfTEFTVCArIDIpCisjZGVmaW5lIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAoRkZJX1RZUEVfTEFTVCArIDMpCiAKICNpZiBkZWZpbmVkIChYODZfNjQpIHx8IChkZWZpbmVkIChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkIChYODZfREFSV0lOKSkKICNkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAyNApAQCAtODEsMTAgKzEwMywxOCBAQAogI2lmZGVmIFg4Nl9XSU4zMgogI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDEzCiAjZWxzZQorI2lmZGVmIFg4Nl9XSU42NAorI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDI5CisjZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAwCisjZGVmaW5lIEZGSV9OT19SQVdfQVBJIDEKKyNlbHNlCiAjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMTAKICNlbmRpZgorI2VuZGlmCisjaWZuZGVmIFg4Nl9XSU42NAogI2RlZmluZSBGRklfTkFUSVZFX1JBV19BUEkgMQkvKiB4ODYgaGFzIG5hdGl2ZSByYXcgYXBpIHN1cHBvcnQgKi8KICNlbmRpZgorI2VuZGlmCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3N5c3YuUwppbmRleCAyNzExZmRlLi5mNGI2YzFlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvc3lzdi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMKQEAgLTI0Miw5ICsyNDIsMjAgQEAKIAogI2lmICFGRklfTk9fUkFXX0FQSQogCisvKiBQcmVjYWxjdWxhdGUgZm9yIGUuZy4gdGhlIFNvbGFyaXMgMTAveDg2IGFzc2VtYmxlci4gICovCisjaWYgRkZJX1RSQU1QT0xJTkVfU0laRSA9PSAxMAorI2RlZmluZSBSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VUIDEyCisjZGVmaW5lIFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQgMTYKKyNkZWZpbmUgUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVCAyMAorI2VsaWYgRkZJX1RSQU1QT0xJTkVfU0laRSA9PSAyNAorI2RlZmluZSBSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VUIDI0CisjZGVmaW5lIFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQgMjgKKyNkZWZpbmUgUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVCAzMgorI2Vsc2UKICNkZWZpbmUgUkFXX0NMT1NVUkVfQ0lGX09GRlNFVCAoKEZGSV9UUkFNUE9MSU5FX1NJWkUgKyAzKSAmIH4zKQogI2RlZmluZSBSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUIChSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VUICsgNCkKICNkZWZpbmUgUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVCAoUkFXX0NMT1NVUkVfRlVOX09GRlNFVCArIDQpCisjZW5kaWYKICNkZWZpbmUgQ0lGX0ZMQUdTX09GRlNFVCAyMAogCiAJLmFsaWduCTQKQEAgLTM0MywxMCArMzU0LDEyIEBACiAJLmxvbmcJLkxFRkRFMS0uTEFTRkRFMQkvKiBGREUgTGVuZ3RoICovCiAuTEFTRkRFMToKIAkubG9uZwkuTEFTRkRFMS0uTGZyYW1lMQkvKiBGREUgQ0lFIG9mZnNldCAqLwotI2lmZGVmIF9fUElDX18KKyNpZiBkZWZpbmVkIF9fUElDX18gJiYgZGVmaW5lZCBIQVZFX0FTX1g4Nl9QQ1JFTAogCS5sb25nCS5MRkIxLS4JLyogRkRFIGluaXRpYWwgbG9jYXRpb24gKi8KKyNlbGlmIGRlZmluZWQgX19QSUNfXworCS5sb25nCS5MRkIxQHJlbAogI2Vsc2UKLQkubG9uZwkuTEZCMQkvKiBGREUgaW5pdGlhbCBsb2NhdGlvbiAqLworCS5sb25nCS5MRkIxCiAjZW5kaWYKIAkubG9uZwkuTEZFMS0uTEZCMQkvKiBGREUgYWRkcmVzcyByYW5nZSAqLwogI2lmZGVmIF9fUElDX18KQEAgLTM2OCw4ICszODEsMTAgQEAKIAkubG9uZwkuTEVGREUyLS5MQVNGREUyCS8qIEZERSBMZW5ndGggKi8KIC5MQVNGREUyOgogCS5sb25nCS5MQVNGREUyLS5MZnJhbWUxCS8qIEZERSBDSUUgb2Zmc2V0ICovCi0jaWZkZWYgX19QSUNfXworI2lmIGRlZmluZWQgX19QSUNfXyAmJiBkZWZpbmVkIEhBVkVfQVNfWDg2X1BDUkVMCiAJLmxvbmcJLkxGQjItLgkvKiBGREUgaW5pdGlhbCBsb2NhdGlvbiAqLworI2VsaWYgZGVmaW5lZCBfX1BJQ19fCisJLmxvbmcJLkxGQjJAcmVsCiAjZWxzZQogCS5sb25nCS5MRkIyCiAjZW5kaWYKQEAgLTQwMiw4ICs0MTcsMTAgQEAKIAkubG9uZwkuTEVGREUzLS5MQVNGREUzCS8qIEZERSBMZW5ndGggKi8KIC5MQVNGREUzOgogCS5sb25nCS5MQVNGREUzLS5MZnJhbWUxCS8qIEZERSBDSUUgb2Zmc2V0ICovCi0jaWZkZWYgX19QSUNfXworI2lmIGRlZmluZWQgX19QSUNfXyAmJiBkZWZpbmVkIEhBVkVfQVNfWDg2X1BDUkVMCiAJLmxvbmcJLkxGQjMtLgkvKiBGREUgaW5pdGlhbCBsb2NhdGlvbiAqLworI2VsaWYgZGVmaW5lZCBfX1BJQ19fCisJLmxvbmcJLkxGQjNAcmVsCiAjZWxzZQogCS5sb25nCS5MRkIzCiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUwppbmRleCAwNDY1NjRkLi5mZTNmNGZkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvdW5peDY0LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TCkBAIC04OSw3ICs4OSw2IEBACiAJYWRkcQklcjExLCAlcjEwCiAJam1wCSolcjEwCiAKLQkuc2VjdGlvbiAucm9kYXRhCiAuTHN0b3JlX3RhYmxlOgogCS5sb25nCS5Mc3Rfdm9pZC0uTHN0b3JlX3RhYmxlCQkvKiBGRklfVFlQRV9WT0lEICovCiAJLmxvbmcJLkxzdF9zaW50MzItLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9JTlQgKi8KQEAgLTEwNyw3ICsxMDYsNiBAQAogCS5sb25nCS5Mc3Rfc3RydWN0LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU1RSVUNUICovCiAJLmxvbmcJLkxzdF9pbnQ2NC0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KIAotCS50ZXh0CiAJLmFsaWduIDIKIC5Mc3Rfdm9pZDoKIAlyZXQKQEAgLTI0MCw3ICsyMzgsNiBAQAogCWFkZHEJJXIxMSwgJXIxMAogCWptcAkqJXIxMAogCi0JLnNlY3Rpb24gLnJvZGF0YQogLkxsb2FkX3RhYmxlOgogCS5sb25nCS5MbGRfdm9pZC0uTGxvYWRfdGFibGUJCS8qIEZGSV9UWVBFX1ZPSUQgKi8KIAkubG9uZwkuTGxkX2ludDMyLS5MbG9hZF90YWJsZQkJLyogRkZJX1RZUEVfSU5UICovCkBAIC0yNTgsNyArMjU1LDYgQEAKIAkubG9uZwkuTGxkX3N0cnVjdC0uTGxvYWRfdGFibGUJLyogRkZJX1RZUEVfU1RSVUNUICovCiAJLmxvbmcJLkxsZF9pbnQ2NC0uTGxvYWRfdGFibGUJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KIAotCS50ZXh0CiAJLmFsaWduIDIKIC5MbGRfdm9pZDoKIAlyZXQKQEAgLTM1MSw3ICszNDcsMTEgQEAKIAkubG9uZwkuTEVGREUxLS5MQVNGREUxCS8qIEZERSBMZW5ndGggKi8KIC5MQVNGREUxOgogCS5sb25nCS5MQVNGREUxLS5MZnJhbWUxCS8qIEZERSBDSUUgb2Zmc2V0ICovCisjaWYgSEFWRV9BU19YODZfUENSRUwKIAkubG9uZwkuTFVXMC0uCQkJLyogRkRFIGluaXRpYWwgbG9jYXRpb24gKi8KKyNlbHNlCisJLmxvbmcJLkxVVzBAcmVsCisjZW5kaWYKIAkubG9uZwkuTFVXNC0uTFVXMAkJLyogRkRFIGFkZHJlc3MgcmFuZ2UgKi8KIAkudWxlYjEyOCAweDAJCQkvKiBBdWdtZW50YXRpb24gc2l6ZSAqLwogCkBAIC0zODksNyArMzg5LDExIEBACiAJLmxvbmcJLkxFRkRFMy0uTEFTRkRFMwkvKiBGREUgTGVuZ3RoICovCiAuTEFTRkRFMzoKIAkubG9uZwkuTEFTRkRFMy0uTGZyYW1lMQkvKiBGREUgQ0lFIG9mZnNldCAqLworI2lmIEhBVkVfQVNfWDg2X1BDUkVMCiAJLmxvbmcJLkxVVzUtLgkJCS8qIEZERSBpbml0aWFsIGxvY2F0aW9uICovCisjZWxzZQorCS5sb25nCS5MVVc1QHJlbAorI2VuZGlmCiAJLmxvbmcJLkxVVzktLkxVVzUJCS8qIEZERSBhZGRyZXNzIHJhbmdlICovCiAJLnVsZWIxMjggMHgwCQkJLyogQXVnbWVudGF0aW9uIHNpemUgKi8KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjMyLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luMzIuUwppbmRleCBlYmExMWMxLi5hYzFlZDZmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luMzIuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luMzIuUwpAQCAtMSw3ICsxLDggQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICB3aW4zMi5TIC0gQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk4LCAyMDAxLCAyMDAyICBSZWQgSGF0LCBJbmMuCisgICB3aW4zMi5TIC0gQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk4LCAyMDAxLCAyMDAyLCAyMDA5ICBSZWQgSGF0LCBJbmMuCiAJICAgICBDb3B5cmlnaHQgKGMpIDIwMDEgIEpvaG4gQmVuaXRvbgogCSAgICAgQ29weXJpZ2h0IChjKSAyMDAyICBSYW5qaXQgTWF0aGV3CisJICAgICBDb3B5cmlnaHQgKGMpIDIwMDkgIERhbmllbCBXaXR0ZQogCQkJCiAgCiAgICBYODYgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKQEAgLTE3LDMyICsxOCwzOTAgQEAKICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCiAgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICAKLSAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKLSAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLSAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IKLQlBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqLwogIAogI2RlZmluZSBMSUJGRklfQVNNCiAjaW5jbHVkZSA8ZmZpY29uZmlnLmg+CiAjaW5jbHVkZSA8ZmZpLmg+Ci0gCi0udGV4dAotIAotLmdsb2JsIGZmaV9wcmVwX2FyZ3MKKworI2lmZGVmIF9NU0NfVkVSCisKKy4zODYKKy5NT0RFTCBGTEFULCBDCisKK0VYVFJOIGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXI6TkVBUgorCitfVEVYVCBTRUdNRU5UCisKK2ZmaV9jYWxsX3dpbjMyIFBST0MgTkVBUiwKKyAgICBmZmlfcHJlcF9hcmdzIDogTkVBUiBQVFIgRFdPUkQsCisgICAgZWNpZiAgICAgICAgICA6IE5FQVIgUFRSIERXT1JELAorICAgIGNpZl9ieXRlcyAgICAgOiBEV09SRCwKKyAgICBjaWZfZmxhZ3MgICAgIDogRFdPUkQsCisgICAgcnZhbHVlICAgICAgICA6IE5FQVIgUFRSIERXT1JELAorICAgIGZuICAgICAgICAgICAgOiBORUFSIFBUUiBEV09SRAorCisgICAgICAgIDs7IE1ha2Ugcm9vbSBmb3IgYWxsIG9mIHRoZSBuZXcgYXJncy4KKyAgICAgICAgbW92ICBlY3gsIGNpZl9ieXRlcworICAgICAgICBzdWIgIGVzcCwgZWN4CisKKyAgICAgICAgbW92ICBlYXgsIGVzcAorCisgICAgICAgIDs7IFBsYWNlIGFsbCBvZiB0aGUgZmZpX3ByZXBfYXJncyBpbiBwb3NpdGlvbgorICAgICAgICBwdXNoIGVjaWYKKyAgICAgICAgcHVzaCBlYXgKKyAgICAgICAgY2FsbCBmZmlfcHJlcF9hcmdzCisKKyAgICAgICAgOzsgUmV0dXJuIHN0YWNrIHRvIHByZXZpb3VzIHN0YXRlIGFuZCBjYWxsIHRoZSBmdW5jdGlvbgorICAgICAgICBhZGQgIGVzcCwgOAorCisgICAgICAgIGNhbGwgZm4KKworICAgICAgICA7OyBjZGVjbDogICB3ZSByZXN0b3JlIGVzcCBpbiB0aGUgZXBpbG9ndWUsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0bworICAgICAgICA7OyAgICAgICAgICByZW1vdmUgdGhlIHNwYWNlIHdlIHB1c2hlZCBmb3IgdGhlIGFyZ3MuCisgICAgICAgIDs7IHN0ZGNhbGw6IHRoZSBjYWxsZWUgaGFzIGFscmVhZHkgY2xlYW5lZCB0aGUgc3RhY2suCisKKyAgICAgICAgOzsgTG9hZCBlY3ggd2l0aCB0aGUgcmV0dXJuIHR5cGUgY29kZQorICAgICAgICBtb3YgIGVjeCwgY2lmX2ZsYWdzCisKKyAgICAgICAgOzsgSWYgdGhlIHJldHVybiB2YWx1ZSBwb2ludGVyIGlzIE5VTEwsIGFzc3VtZSBubyByZXR1cm4gdmFsdWUuCisgICAgICAgIGNtcCAgcnZhbHVlLCAwCisgICAgICAgIGpuZSAgY2FfanVtcHRhYmxlCisKKyAgICAgICAgOzsgRXZlbiBpZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIHJldHVybiB2YWx1ZSwgd2UgYXJlCisgICAgICAgIDs7IG9ibGlnZWQgdG8gaGFuZGxlIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKyAgICAgICAgY21wICBlY3gsIEZGSV9UWVBFX0ZMT0FUCisgICAgICAgIGpuZSAgY2FfZXBpbG9ndWUKKyAgICAgICAgZnN0cCBzdCgwKQorCisgICAgICAgIGptcCAgY2FfZXBpbG9ndWUKKworY2FfanVtcHRhYmxlOgorICAgICAgICBqbXAgIFtjYV9qdW1wZGF0YSArIDQgKiBlY3hdCitjYV9qdW1wZGF0YToKKyAgICAgICAgOzsgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gbGFiZWwgYW5kIGp1bXAgdGFibGUuCisgICAgICAgIGRkIG9mZnNldCBjYV9lcGlsb2d1ZSAgICAgICA7OyBGRklfVFlQRV9WT0lECisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9JTlQKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGZsb2F0ICAgICAgIDs7IEZGSV9UWVBFX0ZMT0FUCisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRkb3VibGUgICAgICA7OyBGRklfVFlQRV9ET1VCTEUKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGxvbmdkb3VibGUgIDs7IEZGSV9UWVBFX0xPTkdET1VCTEUKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1VJTlQ4CisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9TSU5UOAorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfVUlOVDE2CisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9TSU5UMTYKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1VJTlQzMgorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfU0lOVDMyCisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQ2NCAgICAgICA7OyBGRklfVFlQRV9VSU5UNjQKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludDY0ICAgICAgIDs7IEZGSV9UWVBFX1NJTlQ2NAorICAgICAgICBkZCBvZmZzZXQgY2FfZXBpbG9ndWUgICAgICAgOzsgRkZJX1RZUEVfU1RSVUNUCisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9QT0lOVEVSCisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQgorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCCisKK2NhX3JldGludDg6CisgICAgICAgIDs7IExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgbW92ICAgZWN4LCBydmFsdWUKKyAgICAgICAgbW92ICAgW2VjeCArIDBdLCBhbAorICAgICAgICBqbXAgICBjYV9lcGlsb2d1ZQorCitjYV9yZXRpbnQxNjoKKyAgICAgICAgOzsgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQorICAgICAgICBtb3YgICBlY3gsIHJ2YWx1ZQorICAgICAgICBtb3YgICBbZWN4ICsgMF0sIGF4CisgICAgICAgIGptcCAgIGNhX2VwaWxvZ3VlCisKK2NhX3JldGludDoKKyAgICAgICAgOzsgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQorICAgICAgICBtb3YgICBlY3gsIHJ2YWx1ZQorICAgICAgICBtb3YgICBbZWN4ICsgMF0sIGVheAorICAgICAgICBqbXAgICBjYV9lcGlsb2d1ZQorCitjYV9yZXRpbnQ2NDoKKyAgICAgICAgOzsgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQorICAgICAgICBtb3YgICBlY3gsIHJ2YWx1ZQorICAgICAgICBtb3YgICBbZWN4ICsgMF0sIGVheAorICAgICAgICBtb3YgICBbZWN4ICsgNF0sIGVkeAorICAgICAgICBqbXAgICBjYV9lcGlsb2d1ZQorCitjYV9yZXRmbG9hdDoKKyAgICAgICAgOzsgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQorICAgICAgICBtb3YgICBlY3gsIHJ2YWx1ZQorICAgICAgICBmc3RwICBEV09SRCBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY2FfZXBpbG9ndWUKKworY2FfcmV0ZG91YmxlOgorICAgICAgICA7OyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAgIG1vdiAgIGVjeCwgcnZhbHVlCisgICAgICAgIGZzdHAgIFFXT1JEIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjYV9lcGlsb2d1ZQorCitjYV9yZXRsb25nZG91YmxlOgorICAgICAgICA7OyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAgIG1vdiAgIGVjeCwgcnZhbHVlCisgICAgICAgIGZzdHAgIFRCWVRFIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjYV9lcGlsb2d1ZQorCitjYV9lcGlsb2d1ZToKKyAgICAgICAgOzsgRXBpbG9ndWUgY29kZSBpcyBhdXRvZ2VuZXJhdGVkLgorICAgICAgICByZXQKK2ZmaV9jYWxsX3dpbjMyIEVORFAKKworZmZpX2Nsb3N1cmVfU1lTViBQUk9DIE5FQVIgRk9SQ0VGUkFNRQorICAgIDs7IHRoZSBmZmlfY2xvc3VyZSBjdHggaXMgcGFzc2VkIGluIGVheCBieSB0aGUgdHJhbXBvbGluZS4KKworICAgICAgICBzdWIgIGVzcCwgNDAKKyAgICAgICAgbGVhICBlZHgsIFtlYnAgLSAyNF0KKyAgICAgICAgbW92ICBbZWJwIC0gMTJdLCBlZHggICAgICAgICA7OyByZXNwCisgICAgICAgIGxlYSAgZWR4LCBbZWJwICsgOF0KKyAgICAgICAgbW92ICBbZXNwICsgOF0sIGVkeCAgICAgICAgICA7OyBhcmdzCisgICAgICAgIGxlYSAgZWR4LCBbZWJwIC0gMTJdCisgICAgICAgIG1vdiAgW2VzcCArIDRdLCBlZHggICAgICAgICAgOzsgJnJlc3AKKyAgICAgICAgbW92ICBbZXNwXSwgZWF4ICAgICAgICAgICAgICA7OyBjbG9zdXJlCisgICAgICAgIGNhbGwgZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcgorICAgICAgICBtb3YgIGVjeCwgW2VicCAtIDEyXQorCitjc19qdW1wdGFibGU6CisgICAgICAgIGptcCAgW2NzX2p1bXBkYXRhICsgNCAqIGVheF0KK2NzX2p1bXBkYXRhOgorICAgICAgICA7OyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgbGFiZWwgYW5kIGp1bXAgdGFibGUuCisgICAgICAgIGRkIG9mZnNldCBjc19lcGlsb2d1ZSAgICAgICA7OyBGRklfVFlQRV9WT0lECisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9JTlQKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGZsb2F0ICAgICAgIDs7IEZGSV9UWVBFX0ZMT0FUCisgICAgICAgIGRkIG9mZnNldCBjc19yZXRkb3VibGUgICAgICA7OyBGRklfVFlQRV9ET1VCTEUKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGxvbmdkb3VibGUgIDs7IEZGSV9UWVBFX0xPTkdET1VCTEUKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1VJTlQ4CisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9TSU5UOAorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfVUlOVDE2CisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9TSU5UMTYKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1VJTlQzMgorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfU0lOVDMyCisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQ2NCAgICAgICA7OyBGRklfVFlQRV9VSU5UNjQKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludDY0ICAgICAgIDs7IEZGSV9UWVBFX1NJTlQ2NAorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0c3RydWN0ICAgICAgOzsgRkZJX1RZUEVfU1RSVUNUCisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9QT0lOVEVSCisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQgorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCCisKK2NzX3JldGludDg6CisgICAgICAgIG1vdiAgIGFsLCBbZWN4XQorICAgICAgICBqbXAgICBjc19lcGlsb2d1ZQorCitjc19yZXRpbnQxNjoKKyAgICAgICAgbW92ICAgYXgsIFtlY3hdCisgICAgICAgIGptcCAgIGNzX2VwaWxvZ3VlCisKK2NzX3JldGludDoKKyAgICAgICAgbW92ICAgZWF4LCBbZWN4XQorICAgICAgICBqbXAgICBjc19lcGlsb2d1ZQorCitjc19yZXRpbnQ2NDoKKyAgICAgICAgbW92ICAgZWF4LCBbZWN4ICsgMF0KKyAgICAgICAgbW92ICAgZWR4LCBbZWN4ICsgNF0KKyAgICAgICAgam1wICAgY3NfZXBpbG9ndWUKKworY3NfcmV0ZmxvYXQ6CisgICAgICAgIGZsZCAgIERXT1JEIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjc19lcGlsb2d1ZQorCitjc19yZXRkb3VibGU6CisgICAgICAgIGZsZCAgIFFXT1JEIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjc19lcGlsb2d1ZQorCitjc19yZXRsb25nZG91YmxlOgorICAgICAgICBmbGQgICBUQllURSBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY3NfZXBpbG9ndWUKKworY3NfcmV0c3RydWN0OgorICAgICAgICA7OyBDYWxsZXIgZXhwZWN0cyB1cyB0byBwb3Agc3RydWN0IHJldHVybiB2YWx1ZSBwb2ludGVyIGhpZGRlbiBhcmcuCisgICAgICAgIDs7IEVwaWxvZ3VlIGNvZGUgaXMgYXV0b2dlbmVyYXRlZC4KKyAgICAgICAgcmV0CTQKKworY3NfZXBpbG9ndWU6CisgICAgICAgIDs7IEVwaWxvZ3VlIGNvZGUgaXMgYXV0b2dlbmVyYXRlZC4KKyAgICAgICAgcmV0CitmZmlfY2xvc3VyZV9TWVNWIEVORFAKKworI2lmICFGRklfTk9fUkFXX0FQSQorCisjZGVmaW5lIFJBV19DTE9TVVJFX0NJRl9PRkZTRVQgKChGRklfVFJBTVBPTElORV9TSVpFICsgMykgQU5EIE5PVCAzKQorI2RlZmluZSBSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUIChSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VUICsgNCkKKyNkZWZpbmUgUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVCAoUkFXX0NMT1NVUkVfRlVOX09GRlNFVCArIDQpCisjZGVmaW5lIENJRl9GTEFHU19PRkZTRVQgMjAKKworZmZpX2Nsb3N1cmVfcmF3X1NZU1YgUFJPQyBORUFSIFVTRVMgZXNpCisgICAgOzsgdGhlIGZmaV9jbG9zdXJlIGN0eCBpcyBwYXNzZWQgaW4gZWF4IGJ5IHRoZSB0cmFtcG9saW5lLgorCisgICAgICAgIHN1YiAgZXNwLCA0MAorICAgICAgICBtb3YgIGVzaSwgW2VheCArIFJBV19DTE9TVVJFX0NJRl9PRkZTRVRdICAgICAgICA7OyBjbG9zdXJlLT5jaWYKKyAgICAgICAgbW92ICBlZHgsIFtlYXggKyBSQVdfQ0xPU1VSRV9VU0VSX0RBVEFfT0ZGU0VUXSAgOzsgY2xvc3VyZS0+dXNlcl9kYXRhCisgICAgICAgIG1vdiAgW2VzcCArIDEyXSwgZWR4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHVzZXJfZGF0YQorICAgICAgICBsZWEgIGVkeCwgW2VicCArIDhdCisgICAgICAgIG1vdiAgW2VzcCArIDhdLCBlZHggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHJhd19hcmdzCisgICAgICAgIGxlYSAgZWR4LCBbZWJwIC0gMjRdCisgICAgICAgIG1vdiAgW2VzcCArIDRdLCBlZHggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7ICZyZXMKKyAgICAgICAgbW92ICBbZXNwXSwgZXNpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgY2lmCisgICAgICAgIGNhbGwgRFdPUkQgUFRSIFtlYXggKyBSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUXSAgIDs7IGNsb3N1cmUtPmZ1bgorICAgICAgICBtb3YgIGVheCwgW2VzaSArIENJRl9GTEFHU19PRkZTRVRdICAgICAgICAgICAgICA7OyBjaWYtPmZsYWdzCisgICAgICAgIGxlYSAgZWN4LCBbZWJwIC0gMjRdCisKK2NyX2p1bXB0YWJsZToKKyAgICAgICAgam1wICBbY3JfanVtcGRhdGEgKyA0ICogZWF4XQorY3JfanVtcGRhdGE6CisgICAgICAgIDs7IERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBsYWJlbCBhbmQganVtcCB0YWJsZS4KKyAgICAgICAgZGQgb2Zmc2V0IGNyX2VwaWxvZ3VlICAgICAgIDs7IEZGSV9UWVBFX1ZPSUQKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX0lOVAorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0ZmxvYXQgICAgICAgOzsgRkZJX1RZUEVfRkxPQVQKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGRvdWJsZSAgICAgIDs7IEZGSV9UWVBFX0RPVUJMRQorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0bG9uZ2RvdWJsZSAgOzsgRkZJX1RZUEVfTE9OR0RPVUJMRQorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfVUlOVDgKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1NJTlQ4CisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9VSU5UMTYKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1NJTlQxNgorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfVUlOVDMyCisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9TSU5UMzIKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludDY0ICAgICAgIDs7IEZGSV9UWVBFX1VJTlQ2NAorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50NjQgICAgICAgOzsgRkZJX1RZUEVfU0lOVDY0CisgICAgICAgIGRkIG9mZnNldCBjcl9lcGlsb2d1ZSAgICAgICA7OyBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1BPSU5URVIKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQgorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCCisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIKKworY3JfcmV0aW50ODoKKyAgICAgICAgbW92ICAgYWwsIFtlY3hdCisgICAgICAgIGptcCAgIGNyX2VwaWxvZ3VlCisKK2NyX3JldGludDE2OgorICAgICAgICBtb3YgICBheCwgW2VjeF0KKyAgICAgICAgam1wICAgY3JfZXBpbG9ndWUKKworY3JfcmV0aW50OgorICAgICAgICBtb3YgICBlYXgsIFtlY3hdCisgICAgICAgIGptcCAgIGNyX2VwaWxvZ3VlCisKK2NyX3JldGludDY0OgorICAgICAgICBtb3YgICBlYXgsIFtlY3ggKyAwXQorICAgICAgICBtb3YgICBlZHgsIFtlY3ggKyA0XQorICAgICAgICBqbXAgICBjcl9lcGlsb2d1ZQorCitjcl9yZXRmbG9hdDoKKyAgICAgICAgZmxkICAgRFdPUkQgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNyX2VwaWxvZ3VlCisKK2NyX3JldGRvdWJsZToKKyAgICAgICAgZmxkICAgUVdPUkQgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNyX2VwaWxvZ3VlCisKK2NyX3JldGxvbmdkb3VibGU6CisgICAgICAgIGZsZCAgIFRCWVRFIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjcl9lcGlsb2d1ZQorCitjcl9lcGlsb2d1ZToKKyAgICAgICAgOzsgRXBpbG9ndWUgY29kZSBpcyBhdXRvZ2VuZXJhdGVkLgorICAgICAgICByZXQKK2ZmaV9jbG9zdXJlX3Jhd19TWVNWIEVORFAKKworI2VuZGlmIC8qICFGRklfTk9fUkFXX0FQSSAqLworCitmZmlfY2xvc3VyZV9TVERDQUxMIFBST0MgTkVBUiBGT1JDRUZSQU1FCisgICAgOzsgdGhlIGZmaV9jbG9zdXJlIGN0eCBpcyBwYXNzZWQgaW4gZWF4IGJ5IHRoZSB0cmFtcG9saW5lLgorCisgICAgICAgIHN1YiAgZXNwLCA0MAorICAgICAgICBsZWEgIGVkeCwgW2VicCAtIDI0XQorICAgICAgICBtb3YgIFtlYnAgLSAxMl0sIGVkeCAgICAgICAgIDs7IHJlc3AKKyAgICAgICAgbGVhICBlZHgsIFtlYnAgKyAxMl0gICAgICAgICA7OyBhY2NvdW50IGZvciBzdHViIHJldHVybiBhZGRyZXNzIG9uIHN0YWNrCisgICAgICAgIG1vdiAgW2VzcCArIDhdLCBlZHggICAgICAgICAgOzsgYXJncworICAgICAgICBsZWEgIGVkeCwgW2VicCAtIDEyXQorICAgICAgICBtb3YgIFtlc3AgKyA0XSwgZWR4ICAgICAgICAgIDs7ICZyZXNwCisgICAgICAgIG1vdiAgW2VzcF0sIGVheCAgICAgICAgICAgICAgOzsgY2xvc3VyZQorICAgICAgICBjYWxsIGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIKKyAgICAgICAgbW92ICBlY3gsIFtlYnAgLSAxMl0KKworY2RfanVtcHRhYmxlOgorICAgICAgICBqbXAgIFtjZF9qdW1wZGF0YSArIDQgKiBlYXhdCitjZF9qdW1wZGF0YToKKyAgICAgICAgOzsgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGxhYmVsIGFuZCBqdW1wIHRhYmxlLgorICAgICAgICBkZCBvZmZzZXQgY2RfZXBpbG9ndWUgICAgICAgOzsgRkZJX1RZUEVfVk9JRAorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfSU5UCisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRmbG9hdCAgICAgICA7OyBGRklfVFlQRV9GTE9BVAorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0ZG91YmxlICAgICAgOzsgRkZJX1RZUEVfRE9VQkxFCisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRsb25nZG91YmxlICA7OyBGRklfVFlQRV9MT05HRE9VQkxFCisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9VSU5UOAorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfU0lOVDgKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1VJTlQxNgorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfU0lOVDE2CisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9VSU5UMzIKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1NJTlQzMgorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50NjQgICAgICAgOzsgRkZJX1RZUEVfVUlOVDY0CisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQ2NCAgICAgICA7OyBGRklfVFlQRV9TSU5UNjQKKyAgICAgICAgZGQgb2Zmc2V0IGNkX2VwaWxvZ3VlICAgICAgIDs7IEZGSV9UWVBFX1NUUlVDVAorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfUE9JTlRFUgorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCCisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QgorCitjZF9yZXRpbnQ4OgorICAgICAgICBtb3YgICBhbCwgW2VjeF0KKyAgICAgICAgam1wICAgY2RfZXBpbG9ndWUKKworY2RfcmV0aW50MTY6CisgICAgICAgIG1vdiAgIGF4LCBbZWN4XQorICAgICAgICBqbXAgICBjZF9lcGlsb2d1ZQorCitjZF9yZXRpbnQ6CisgICAgICAgIG1vdiAgIGVheCwgW2VjeF0KKyAgICAgICAgam1wICAgY2RfZXBpbG9ndWUKKworY2RfcmV0aW50NjQ6CisgICAgICAgIG1vdiAgIGVheCwgW2VjeCArIDBdCisgICAgICAgIG1vdiAgIGVkeCwgW2VjeCArIDRdCisgICAgICAgIGptcCAgIGNkX2VwaWxvZ3VlCisKK2NkX3JldGZsb2F0OgorICAgICAgICBmbGQgICBEV09SRCBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY2RfZXBpbG9ndWUKKworY2RfcmV0ZG91YmxlOgorICAgICAgICBmbGQgICBRV09SRCBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY2RfZXBpbG9ndWUKKworY2RfcmV0bG9uZ2RvdWJsZToKKyAgICAgICAgZmxkICAgVEJZVEUgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNkX2VwaWxvZ3VlCisKK2NkX2VwaWxvZ3VlOgorICAgICAgICA7OyBFcGlsb2d1ZSBjb2RlIGlzIGF1dG9nZW5lcmF0ZWQuCisgICAgICAgIHJldAorZmZpX2Nsb3N1cmVfU1REQ0FMTCBFTkRQCisKK19URVhUIEVORFMKK0VORAorCisjZWxzZQorCisJLnRleHQKICAKICAgICAgICAgIyBUaGlzIGFzc3VtZXMgd2UgYXJlIHVzaW5nIGdhcy4KICAgICAgICAgLmJhbGlnbiAxNgotLmdsb2JsIF9mZmlfY2FsbF9TWVNWCi0gCi1fZmZpX2NhbGxfU1lTVjoKKwkuZ2xvYmwJX2ZmaV9jYWxsX3dpbjMyCisJLmRlZglfZmZpX2NhbGxfd2luMzI7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgorX2ZmaV9jYWxsX3dpbjMyOgorLkxGQjE6CiAgICAgICAgIHB1c2hsICVlYnAKKy5MQ0ZJMDoKICAgICAgICAgbW92bCAgJWVzcCwlZWJwCi0gCisuTENGSTE6CiAgICAgICAgICMgTWFrZSByb29tIGZvciBhbGwgb2YgdGhlIG5ldyBhcmdzLgogICAgICAgICBtb3ZsICAxNiglZWJwKSwlZWN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgc3VibCAgJWVjeCwlZXNwCkBAIC02MCwyMjUgKzQxOSwxNDEgQEAKICAgICAgICAgIyBGSVhNRTogQWxpZ24gdGhlIHN0YWNrIHRvIGEgMTI4LWJpdCBib3VuZGFyeSB0byBhdm9pZAogICAgICAgICAjIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBoaXRzLgogCi0JY2FsbCAgKjI4KCVlYnApCi0gCi0gICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZSB3ZSBwdXNoZWQgZm9yIHRoZSBhcmdzCi0gICAgICAgIG1vdmwgIDE2KCVlYnApLCVlY3gKLSAgICAgICAgYWRkbCAgJWVjeCwlZXNwCi0gCi0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHJldHVybiB0eXBlIGNvZGUKLSAgICAgICAgbW92bCAgMjAoJWVicCksJWVjeAotIAotICAgICAgICAjIElmIHRoZSByZXR1cm4gdmFsdWUgcG9pbnRlciBpcyBOVUxMLCBhc3N1bWUgbm8gcmV0dXJuIHZhbHVlLgotICAgICAgICBjbXBsICAkMCwyNCglZWJwKQotICAgICAgICBqbmUgICByZXRpbnQKLSAKLSAgICAgICAgIyBFdmVuIGlmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBhcmUKLSAgICAgICAgIyBvYmxpZ2VkIHRvIGhhbmRsZSBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCi0gICAgICAgIGNtcGwgICRGRklfVFlQRV9GTE9BVCwlZWN4Ci0gICAgICAgIGpuZSAgIG5vcmV0dmFsCi0gICAgICAgIGZzdHAgICVzdCgwKQotIAotICAgICAgICBqbXAgICBlcGlsb2d1ZQotIAotcmV0aW50OgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfSU5ULCVlY3gKLSAgICAgICAgam5lICAgcmV0ZmxvYXQKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgbW92bCAgJWVheCwwKCVlY3gpCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRmbG9hdDoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0ZMT0FULCVlY3gKLSAgICAgICAgam5lICAgcmV0ZG91YmxlICAgCi0gICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBmc3RwcyAoJWVjeCkKLSAgICAgICAgam1wICAgZXBpbG9ndWUKLSAKLXJldGRvdWJsZToKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0RPVUJMRSwlZWN4Ci0gICAgICAgIGpuZSAgIHJldGxvbmdkb3VibGUKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgZnN0cGwgKCVlY3gpCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRsb25nZG91YmxlOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfTE9OR0RPVUJMRSwlZWN4Ci0gICAgICAgIGpuZSAgIHJldGludDY0Ci0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIGZzdHB0ICglZWN4KQotICAgICAgICBqbXAgICBlcGlsb2d1ZQotIAotcmV0aW50NjQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9TSU5UNjQsJWVjeAotICAgICAgICBqbmUgICByZXRzdHJ1Y3QxYgotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBtb3ZsICAlZWF4LDAoJWVjeCkKLSAgICAgICAgbW92bCAgJWVkeCw0KCVlY3gpCi0gCi1yZXRzdHJ1Y3QxYjoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX1NJTlQ4LCVlY3gKLSAgICAgICAgam5lICAgcmV0c3RydWN0MmIKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgbW92YiAgJWFsLDAoJWVjeCkKLSAgICAgICAgam1wICAgZXBpbG9ndWUKLSAKLXJldHN0cnVjdDJiOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfU0lOVDE2LCVlY3gKLSAgICAgICAgam5lICAgcmV0c3RydWN0Ci0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIG1vdncgICVheCwwKCVlY3gpCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRzdHJ1Y3Q6Ci0gICAgICAgICMgTm90aGluZyB0byBkbyEKLSAKLW5vcmV0dmFsOgotZXBpbG9ndWU6Ci0gICAgICAgIG1vdmwgJWVicCwlZXNwCi0gICAgICAgIHBvcGwgJWVicAotICAgICAgICByZXQKLSAKLS5mZmlfY2FsbF9TWVNWX2VuZDoKLQotICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgotICAgICAgICAuYmFsaWduIDE2Ci0uZ2xvYmwgX2ZmaV9jYWxsX1NURENBTEwKLQotX2ZmaV9jYWxsX1NURENBTEw6Ci0gICAgICAgIHB1c2hsICVlYnAKLSAgICAgICAgbW92bCAgJWVzcCwlZWJwCi0KLSAgICAgICAgIyBNYWtlIHJvb20gZm9yIGFsbCBvZiB0aGUgbmV3IGFyZ3MuCi0gICAgICAgIG1vdmwgIDE2KCVlYnApLCVlY3ggCi0gICAgICAgIHN1YmwgICVlY3gsJWVzcAotCi0gICAgICAgIG1vdmwgICVlc3AsJWVheAotCi0gICAgICAgICMgUGxhY2UgYWxsIG9mIHRoZSBmZmlfcHJlcF9hcmdzIGluIHBvc2l0aW9uCi0gICAgICAgIHB1c2hsIDEyKCVlYnApCi0gICAgICAgIHB1c2hsICVlYXgKLSAgICAgICAgY2FsbCAgKjgoJWVicCkKLQotICAgICAgICAjIFJldHVybiBzdGFjayB0byBwcmV2aW91cyBzdGF0ZSBhbmQgY2FsbCB0aGUgZnVuY3Rpb24KLSAgICAgICAgYWRkbCAgJDgsJWVzcAotCi0gICAgICAgICMgRklYTUU6IEFsaWduIHRoZSBzdGFjayB0byBhIDEyOC1iaXQgYm91bmRhcnkgdG8gYXZvaWQKLSAgICAgICAgIyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaGl0cy4KLQogICAgICAgICBjYWxsICAqMjgoJWVicCkKLQorIAogICAgICAgICAjIHN0ZGNhbGwgZnVuY3Rpb25zIHBvcCBhcmd1bWVudHMgb2ZmIHRoZSBzdGFjayB0aGVtc2VsdmVzCiAKICAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcmV0dXJuIHR5cGUgY29kZQogICAgICAgICBtb3ZsICAyMCglZWJwKSwlZWN4Ci0KKyAKICAgICAgICAgIyBJZiB0aGUgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaXMgTlVMTCwgYXNzdW1lIG5vIHJldHVybiB2YWx1ZS4KICAgICAgICAgY21wbCAgJDAsMjQoJWVicCkKLSAgICAgICAgam5lICAgc2NfcmV0aW50Ci0KKyAgICAgICAgam5lICAgMGYKKyAKICAgICAgICAgIyBFdmVuIGlmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBhcmUKICAgICAgICAgIyBvYmxpZ2VkIHRvIGhhbmRsZSBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCiAgICAgICAgIGNtcGwgICRGRklfVFlQRV9GTE9BVCwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX25vcmV0dmFsCisgICAgICAgIGpuZSAgIC5Mbm9yZXR2YWwKICAgICAgICAgZnN0cCAgJXN0KDApCisgCisgICAgICAgIGptcCAgIC5MZXBpbG9ndWUKIAotICAgICAgICBqbXAgICBzY19lcGlsb2d1ZQorMDoKKwljYWxsCTFmCisJIyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgY2FsbCBhbmQgdGhlIGp1bXAgdGFibGUuCisuTHN0b3JlX3RhYmxlOgorCS5sb25nCS5Mbm9yZXR2YWwJCS8qIEZGSV9UWVBFX1ZPSUQgKi8KKwkubG9uZwkuTHJldGludAkJLyogRkZJX1RZUEVfSU5UICovCisJLmxvbmcJLkxyZXRmbG9hdAkJLyogRkZJX1RZUEVfRkxPQVQgKi8KKwkubG9uZwkuTHJldGRvdWJsZQkJLyogRkZJX1RZUEVfRE9VQkxFICovCisJLmxvbmcJLkxyZXRsb25nZG91YmxlCQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCisJLmxvbmcJLkxyZXR1aW50OAkJLyogRkZJX1RZUEVfVUlOVDggKi8KKwkubG9uZwkuTHJldHNpbnQ4CQkvKiBGRklfVFlQRV9TSU5UOCAqLworCS5sb25nCS5McmV0dWludDE2CQkvKiBGRklfVFlQRV9VSU5UMTYgKi8KKwkubG9uZwkuTHJldHNpbnQxNgkJLyogRkZJX1RZUEVfU0lOVDE2ICovCisJLmxvbmcJLkxyZXRpbnQJCS8qIEZGSV9UWVBFX1VJTlQzMiAqLworCS5sb25nCS5McmV0aW50CQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KKwkubG9uZwkuTHJldGludDY0CQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KKwkubG9uZwkuTHJldGludDY0CQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KKwkubG9uZwkuTHJldHN0cnVjdAkJLyogRkZJX1RZUEVfU1RSVUNUICovCisJLmxvbmcJLkxyZXRpbnQJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KKwkubG9uZwkuTHJldHN0cnVjdDFiCQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KKwkubG9uZwkuTHJldHN0cnVjdDJiCQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KKwkubG9uZwkuTHJldHN0cnVjdDRiCQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KKzE6CisJYWRkCSVlY3gsICVlY3gKKwlhZGQJJWVjeCwgJWVjeAorCWFkZAkoJWVzcCksJWVjeAorCWFkZAkkNCwgJWVzcAorCWptcAkqKCVlY3gpCiAKLXNjX3JldGludDoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0lOVCwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX3JldGZsb2F0CisJLyogU2lnbi96ZXJvIGV4dGVuZCBhcyBhcHByb3ByaWF0ZS4gICovCisuTHJldHNpbnQ4OgorCW1vdnNibAklYWwsICVlYXgKKwlqbXAJLkxyZXRpbnQKKworLkxyZXRzaW50MTY6CisJbW92c3dsCSVheCwgJWVheAorCWptcAkuTHJldGludAorCisuTHJldHVpbnQ4OgorCW1vdnpibAklYWwsICVlYXgKKwlqbXAJLkxyZXRpbnQKKworLkxyZXR1aW50MTY6CisJbW92endsCSVheCwgJWVheAorCWptcAkuTHJldGludAorCisuTHJldGludDoKICAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCiAgICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKICAgICAgICAgbW92bCAgJWVheCwwKCVlY3gpCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGZsb2F0OgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfRkxPQVQsJWVjeAotICAgICAgICBqbmUgICBzY19yZXRkb3VibGUKKyAgICAgICAgam1wICAgLkxlcGlsb2d1ZQorIAorLkxyZXRmbG9hdDoKICAgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQogICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4CiAgICAgICAgIGZzdHBzICglZWN4KQotICAgICAgICBqbXAgICBzY19lcGlsb2d1ZQotCi1zY19yZXRkb3VibGU6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9ET1VCTEUsJWVjeAotICAgICAgICBqbmUgICBzY19yZXRsb25nZG91YmxlCisgICAgICAgIGptcCAgIC5MZXBpbG9ndWUKKyAKKy5McmV0ZG91YmxlOgogICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKICAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAogICAgICAgICBmc3RwbCAoJWVjeCkKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKLQotc2NfcmV0bG9uZ2RvdWJsZToKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0xPTkdET1VCTEUsJWVjeAotICAgICAgICBqbmUgICBzY19yZXRpbnQ2NAorICAgICAgICBqbXAgICAuTGVwaWxvZ3VlCisgCisuTHJldGxvbmdkb3VibGU6CiAgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQogICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4CiAgICAgICAgIGZzdHB0ICglZWN4KQotICAgICAgICBqbXAgICBzY19lcGlsb2d1ZQotCi1zY19yZXRpbnQ2NDoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX1NJTlQ2NCwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX3JldHN0cnVjdDFiCisgICAgICAgIGptcCAgIC5MZXBpbG9ndWUKKyAKKy5McmV0aW50NjQ6CiAgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQogICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4CiAgICAgICAgIG1vdmwgICVlYXgsMCglZWN4KQogICAgICAgICBtb3ZsICAlZWR4LDQoJWVjeCkKKwlqbXAgICAuTGVwaWxvZ3VlCiAKLXNjX3JldHN0cnVjdDFiOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfU0lOVDgsJWVjeAotICAgICAgICBqbmUgICBzY19yZXRzdHJ1Y3QyYgorLkxyZXRzdHJ1Y3QxYjoKICAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCiAgICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKICAgICAgICAgbW92YiAgJWFsLDAoJWVjeCkKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKLQotc2NfcmV0c3RydWN0MmI6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9TSU5UMTYsJWVjeAotICAgICAgICBqbmUgICBzY19yZXRzdHJ1Y3QKKyAgICAgICAgam1wICAgLkxlcGlsb2d1ZQorIAorLkxyZXRzdHJ1Y3QyYjoKICAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCiAgICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKICAgICAgICAgbW92dyAgJWF4LDAoJWVjeCkKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKKyAgICAgICAgam1wICAgLkxlcGlsb2d1ZQogCi1zY19yZXRzdHJ1Y3Q6CisuTHJldHN0cnVjdDRiOgorICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAorICAgICAgICBtb3ZsICAlZWF4LDAoJWVjeCkKKyAgICAgICAgam1wICAgLkxlcGlsb2d1ZQorCisuTHJldHN0cnVjdDoKICAgICAgICAgIyBOb3RoaW5nIHRvIGRvIQotCi1zY19ub3JldHZhbDoKLXNjX2VwaWxvZ3VlOgorIAorLkxub3JldHZhbDoKKy5MZXBpbG9ndWU6CiAgICAgICAgIG1vdmwgJWVicCwlZXNwCiAgICAgICAgIHBvcGwgJWVicAogICAgICAgICByZXQKKy5mZmlfY2FsbF93aW4zMl9lbmQ6CisuTEZFMToKIAotLmZmaV9jYWxsX1NURENBTExfZW5kOgotCi0JLmdsb2JsIF9mZmlfY2xvc3VyZV9TVERDQUxMCi1fZmZpX2Nsb3N1cmVfU1REQ0FMTDoKLQlwdXNobAklZWJwCi0JbW92bAklZXNwLCAlZWJwCi0Jc3VibAkkNDAsICVlc3AKLQlsZWFsCS0yNCglZWJwKSwgJWVkeAotCW1vdmwJJWVkeCwgLTEyKCVlYnApCS8qIHJlc3AgKi8KLQlsZWFsCTEyKCVlYnApLCAlZWR4ICAvKiBhY2NvdW50IGZvciBzdHViIHJldHVybiBhZGRyZXNzIG9uIHN0YWNrICovCi0JbW92bAklZWR4LCA0KCVlc3ApCS8qIGFyZ3MgKi8KLQlsZWFsCS0xMiglZWJwKSwgJWVkeAotCW1vdmwJJWVkeCwgKCVlc3ApCS8qICZyZXNwICovCi0JY2FsbAlfZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcgotCW1vdmwJLTEyKCVlYnApLCAlZWN4Ci0Jam1wICAgICAuTGNsc19yZXR1cm5fcmVzdWx0Ci0uZmZpX2Nsb3N1cmVfU1REQ0FMTF9lbmQ6Ci0KLQkuZ2xvYmwgX2ZmaV9jbG9zdXJlX1NZU1YKKyAgICAgICAgIyBUaGlzIGFzc3VtZXMgd2UgYXJlIHVzaW5nIGdhcy4KKyAgICAgICAgLmJhbGlnbiAxNgorCS5nbG9ibAlfZmZpX2Nsb3N1cmVfU1lTVgorCS5kZWYJX2ZmaV9jbG9zdXJlX1NZU1Y7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgogX2ZmaV9jbG9zdXJlX1NZU1Y6CisuTEZCMzoKIAlwdXNobAklZWJwCisuTENGSTQ6CiAJbW92bAklZXNwLCAlZWJwCisuTENGSTU6CiAJc3VibAkkNDAsICVlc3AKIAlsZWFsCS0yNCglZWJwKSwgJWVkeAogCW1vdmwJJWVkeCwgLTEyKCVlYnApCS8qIHJlc3AgKi8KQEAgLTI4OCw0OCArNTYzLDEwMCBAQAogCW1vdmwJJWVkeCwgKCVlc3ApCS8qICZyZXNwICovCiAJY2FsbAlfZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcgogCW1vdmwJLTEyKCVlYnApLCAlZWN4Ci0uTGNsc19yZXR1cm5fcmVzdWx0OgotCWNtcGwJJEZGSV9UWVBFX0lOVCwgJWVheAotCWplCS5MY2xzX3JldGludAotCWNtcGwJJEZGSV9UWVBFX0ZMT0FULCAlZWF4Ci0JamUJLkxjbHNfcmV0ZmxvYXQKLQljbXBsCSRGRklfVFlQRV9ET1VCTEUsICVlYXgKLQlqZQkuTGNsc19yZXRkb3VibGUKLQljbXBsCSRGRklfVFlQRV9MT05HRE9VQkxFLCAlZWF4Ci0JamUJLkxjbHNfcmV0bGRvdWJsZQotCWNtcGwJJEZGSV9UWVBFX1NJTlQ2NCwgJWVheAotCWplCS5MY2xzX3JldGxsb25nCi0JY21wbAkkRkZJX1RZUEVfU0lOVDgsICVlYXgJLyogMS1ieXRlIHN0cnVjdCAqLwotCWplCS5MY2xzX3JldHN0cnVjdDEKLQljbXBsCSRGRklfVFlQRV9TSU5UMTYsICVlYXgJLyogMi1ieXRlcyBzdHJ1Y3QgKi8KLQlqZQkuTGNsc19yZXRzdHJ1Y3QyCi0uTGNsc19lcGlsb2d1ZToKLQltb3ZsCSVlYnAsICVlc3AKLQlwb3BsCSVlYnAKLQlyZXQKKworMDoKKwljYWxsCTFmCisJIyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgY2FsbCBhbmQgdGhlIGp1bXAgdGFibGUuCisuTGNsc19zdG9yZV90YWJsZToKKwkubG9uZwkuTGNsc19ub3JldHZhbAkJLyogRkZJX1RZUEVfVk9JRCAqLworCS5sb25nCS5MY2xzX3JldGludAkJLyogRkZJX1RZUEVfSU5UICovCisJLmxvbmcJLkxjbHNfcmV0ZmxvYXQJCS8qIEZGSV9UWVBFX0ZMT0FUICovCisJLmxvbmcJLkxjbHNfcmV0ZG91YmxlCQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KKwkubG9uZwkuTGNsc19yZXRsZG91YmxlCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KKwkubG9uZwkuTGNsc19yZXR1aW50OAkJLyogRkZJX1RZUEVfVUlOVDggKi8KKwkubG9uZwkuTGNsc19yZXRzaW50OAkJLyogRkZJX1RZUEVfU0lOVDggKi8KKwkubG9uZwkuTGNsc19yZXR1aW50MTYJCS8qIEZGSV9UWVBFX1VJTlQxNiAqLworCS5sb25nCS5MY2xzX3JldHNpbnQxNgkJLyogRkZJX1RZUEVfU0lOVDE2ICovCisJLmxvbmcJLkxjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KKwkubG9uZwkuTGNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1NJTlQzMiAqLworCS5sb25nCS5MY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KKwkubG9uZwkuTGNsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfU0lOVDY0ICovCisJLmxvbmcJLkxjbHNfcmV0c3RydWN0CQkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KKwkubG9uZwkuTGNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KKwkubG9uZwkuTGNsc19yZXRzdHJ1Y3QxCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLworCS5sb25nCS5MY2xzX3JldHN0cnVjdDIJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCisJLmxvbmcJLkxjbHNfcmV0c3RydWN0NAkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KKworMToKKwlhZGQJJWVheCwgJWVheAorCWFkZAklZWF4LCAlZWF4CisJYWRkCSglZXNwKSwlZWF4CisJYWRkCSQ0LCAlZXNwCisJam1wCSooJWVheCkKKworCS8qIFNpZ24vemVybyBleHRlbmQgYXMgYXBwcm9wcmlhdGUuICAqLworLkxjbHNfcmV0c2ludDg6CisJbW92c2JsCSglZWN4KSwgJWVheAorCWptcAkuTGNsc19lcGlsb2d1ZQorCisuTGNsc19yZXRzaW50MTY6CisJbW92c3dsCSglZWN4KSwgJWVheAorCWptcAkuTGNsc19lcGlsb2d1ZQorCisuTGNsc19yZXR1aW50ODoKKwltb3Z6YmwJKCVlY3gpLCAlZWF4CisJam1wCS5MY2xzX2VwaWxvZ3VlCisKKy5MY2xzX3JldHVpbnQxNjoKKwltb3Z6d2wJKCVlY3gpLCAlZWF4CisJam1wCS5MY2xzX2VwaWxvZ3VlCisKIC5MY2xzX3JldGludDoKIAltb3ZsCSglZWN4KSwgJWVheAogCWptcAkuTGNsc19lcGlsb2d1ZQorCiAuTGNsc19yZXRmbG9hdDoKIAlmbGRzCSglZWN4KQogCWptcAkuTGNsc19lcGlsb2d1ZQorCiAuTGNsc19yZXRkb3VibGU6CiAJZmxkbAkoJWVjeCkKIAlqbXAJLkxjbHNfZXBpbG9ndWUKKwogLkxjbHNfcmV0bGRvdWJsZToKIAlmbGR0CSglZWN4KQogCWptcAkuTGNsc19lcGlsb2d1ZQorCiAuTGNsc19yZXRsbG9uZzoKIAltb3ZsCSglZWN4KSwgJWVheAogCW1vdmwJNCglZWN4KSwgJWVkeAogCWptcAkuTGNsc19lcGlsb2d1ZQorCiAuTGNsc19yZXRzdHJ1Y3QxOgogCW1vdnNibAkoJWVjeCksICVlYXgKIAlqbXAJLkxjbHNfZXBpbG9ndWUKKwogLkxjbHNfcmV0c3RydWN0MjoKIAltb3Zzd2wJKCVlY3gpLCAlZWF4CiAJam1wCS5MY2xzX2VwaWxvZ3VlCisKKy5MY2xzX3JldHN0cnVjdDQ6CisJbW92bAkoJWVjeCksICVlYXgKKwlqbXAJLkxjbHNfZXBpbG9ndWUKKworLkxjbHNfcmV0c3RydWN0OgorICAgICAgICAjIENhbGxlciBleHBlY3RzIHVzIHRvIHBvcCBzdHJ1Y3QgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaGlkZGVuIGFyZy4KKwltb3ZsCSVlYnAsICVlc3AKKwlwb3BsCSVlYnAKKwlyZXQJJDB4NAorCisuTGNsc19ub3JldHZhbDoKKy5MY2xzX2VwaWxvZ3VlOgorCW1vdmwJJWVicCwgJWVzcAorCXBvcGwJJWVicAorCXJldAogLmZmaV9jbG9zdXJlX1NZU1ZfZW5kOgorLkxGRTM6CiAKICNpZiAhRkZJX05PX1JBV19BUEkKIApAQCAtMzM4LDEyICs2NjUsMTggQEAKICNkZWZpbmUgUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVCAoUkFXX0NMT1NVUkVfRlVOX09GRlNFVCArIDQpCiAjZGVmaW5lIENJRl9GTEFHU19PRkZTRVQgMjAKIAotCS5iYWxpZ24JMTYKLQkuZ2xvYmwgX2ZmaV9jbG9zdXJlX3Jhd19TWVNWCisgICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCisgICAgICAgIC5iYWxpZ24gMTYKKwkuZ2xvYmwJX2ZmaV9jbG9zdXJlX3Jhd19TWVNWCisJLmRlZglfZmZpX2Nsb3N1cmVfcmF3X1NZU1Y7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgogX2ZmaV9jbG9zdXJlX3Jhd19TWVNWOgorLkxGQjQ6CiAJcHVzaGwJJWVicAorLkxDRkk2OgogCW1vdmwJJWVzcCwgJWVicAorLkxDRkk3OgogCXB1c2hsCSVlc2kKKy5MQ0ZJODoKIAlzdWJsCSQzNiwgJWVzcAogCW1vdmwJUkFXX0NMT1NVUkVfQ0lGX09GRlNFVCglZWF4KSwgJWVzaQkgLyogY2xvc3VyZS0+Y2lmICovCiAJbW92bAlSQVdfQ0xPU1VSRV9VU0VSX0RBVEFfT0ZGU0VUKCVlYXgpLCAlZWR4IC8qIGNsb3N1cmUtPnVzZXJfZGF0YSAqLwpAQCAtMzU1LDM3ICs2ODgsMzY4IEBACiAJbW92bAklZXNpLCAoJWVzcCkJLyogY2lmICovCiAJY2FsbAkqUkFXX0NMT1NVUkVfRlVOX09GRlNFVCglZWF4KQkJIC8qIGNsb3N1cmUtPmZ1biAqLwogCW1vdmwJQ0lGX0ZMQUdTX09GRlNFVCglZXNpKSwgJWVheAkJIC8qIHJ0eXBlICovCi0JY21wbAkkRkZJX1RZUEVfSU5ULCAlZWF4Ci0JamUJLkxyY2xzX3JldGludAotCWNtcGwJJEZGSV9UWVBFX0ZMT0FULCAlZWF4Ci0JamUJLkxyY2xzX3JldGZsb2F0Ci0JY21wbAkkRkZJX1RZUEVfRE9VQkxFLCAlZWF4Ci0JamUJLkxyY2xzX3JldGRvdWJsZQotCWNtcGwJJEZGSV9UWVBFX0xPTkdET1VCTEUsICVlYXgKLQlqZQkuTHJjbHNfcmV0bGRvdWJsZQotCWNtcGwJJEZGSV9UWVBFX1NJTlQ2NCwgJWVheAotCWplCS5McmNsc19yZXRsbG9uZworMDoKKwljYWxsCTFmCisJIyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgY2FsbCBhbmQgdGhlIGp1bXAgdGFibGUuCisuTHJjbHNfc3RvcmVfdGFibGU6CisJLmxvbmcJLkxyY2xzX25vcmV0dmFsCQkvKiBGRklfVFlQRV9WT0lEICovCisJLmxvbmcJLkxyY2xzX3JldGludAkJLyogRkZJX1RZUEVfSU5UICovCisJLmxvbmcJLkxyY2xzX3JldGZsb2F0CQkvKiBGRklfVFlQRV9GTE9BVCAqLworCS5sb25nCS5McmNsc19yZXRkb3VibGUJLyogRkZJX1RZUEVfRE9VQkxFICovCisJLmxvbmcJLkxyY2xzX3JldGxkb3VibGUJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLworCS5sb25nCS5McmNsc19yZXR1aW50OAkJLyogRkZJX1RZUEVfVUlOVDggKi8KKwkubG9uZwkuTHJjbHNfcmV0c2ludDgJCS8qIEZGSV9UWVBFX1NJTlQ4ICovCisJLmxvbmcJLkxyY2xzX3JldHVpbnQxNgkvKiBGRklfVFlQRV9VSU5UMTYgKi8KKwkubG9uZwkuTHJjbHNfcmV0c2ludDE2CS8qIEZGSV9UWVBFX1NJTlQxNiAqLworCS5sb25nCS5McmNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1VJTlQzMiAqLworCS5sb25nCS5McmNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1NJTlQzMiAqLworCS5sb25nCS5McmNsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfVUlOVDY0ICovCisJLmxvbmcJLkxyY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KKwkubG9uZwkuTHJjbHNfcmV0c3RydWN0CS8qIEZGSV9UWVBFX1NUUlVDVCAqLworCS5sb25nCS5McmNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KKwkubG9uZwkuTHJjbHNfcmV0c3RydWN0MQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KKwkubG9uZwkuTHJjbHNfcmV0c3RydWN0MgkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KKwkubG9uZwkuTHJjbHNfcmV0c3RydWN0NAkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KKzE6CisJYWRkCSVlYXgsICVlYXgKKwlhZGQJJWVheCwgJWVheAorCWFkZAkoJWVzcCksJWVheAorCWFkZAkkNCwgJWVzcAorCWptcAkqKCVlYXgpCisKKwkvKiBTaWduL3plcm8gZXh0ZW5kIGFzIGFwcHJvcHJpYXRlLiAgKi8KKy5McmNsc19yZXRzaW50ODoKKwltb3ZzYmwJLTI0KCVlYnApLCAlZWF4CisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0c2ludDE2OgorCW1vdnN3bAktMjQoJWVicCksICVlYXgKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXR1aW50ODoKKwltb3Z6YmwJLTI0KCVlYnApLCAlZWF4CisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0dWludDE2OgorCW1vdnp3bAktMjQoJWVicCksICVlYXgKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXRpbnQ6CisJbW92bAktMjQoJWVicCksICVlYXgKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXRmbG9hdDoKKwlmbGRzCS0yNCglZWJwKQorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldGRvdWJsZToKKwlmbGRsCS0yNCglZWJwKQorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldGxkb3VibGU6CisJZmxkdAktMjQoJWVicCkKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXRsbG9uZzoKKwltb3ZsCS0yNCglZWJwKSwgJWVheAorCW1vdmwJLTIwKCVlYnApLCAlZWR4CisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0c3RydWN0MToKKwltb3ZzYmwJLTI0KCVlYnApLCAlZWF4CisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0c3RydWN0MjoKKwltb3Zzd2wJLTI0KCVlYnApLCAlZWF4CisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0c3RydWN0NDoKKwltb3ZsCS0yNCglZWJwKSwgJWVheAorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldHN0cnVjdDoKKwkjIE5vdGhpbmcgdG8gZG8hCisKKy5McmNsc19ub3JldHZhbDoKIC5McmNsc19lcGlsb2d1ZToKIAlhZGRsCSQzNiwgJWVzcAogCXBvcGwJJWVzaQogCXBvcGwJJWVicAogCXJldAotLkxyY2xzX3JldGludDoKLQltb3ZsCS0yNCglZWJwKSwgJWVheAotCWptcAkuTHJjbHNfZXBpbG9ndWUKLS5McmNsc19yZXRmbG9hdDoKLQlmbGRzCS0yNCglZWJwKQotCWptcAkuTHJjbHNfZXBpbG9ndWUKLS5McmNsc19yZXRkb3VibGU6Ci0JZmxkbAktMjQoJWVicCkKLQlqbXAJLkxyY2xzX2VwaWxvZ3VlCi0uTHJjbHNfcmV0bGRvdWJsZToKLQlmbGR0CS0yNCglZWJwKQotCWptcAkuTHJjbHNfZXBpbG9ndWUKLS5McmNsc19yZXRsbG9uZzoKLQltb3ZsCS0yNCglZWJwKSwgJWVheAotCW1vdmwJLTIwKCVlYnApLCAlZWR4Ci0Jam1wCS5McmNsc19lcGlsb2d1ZQogLmZmaV9jbG9zdXJlX3Jhd19TWVNWX2VuZDoKKy5MRkU0OgogCisjZW5kaWYgLyogIUZGSV9OT19SQVdfQVBJICovCisKKyAgICAgICAgIyBUaGlzIGFzc3VtZXMgd2UgYXJlIHVzaW5nIGdhcy4KKwkuYmFsaWduCTE2CisJLmdsb2JsCV9mZmlfY2xvc3VyZV9TVERDQUxMCisJLmRlZglfZmZpX2Nsb3N1cmVfU1REQ0FMTDsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCitfZmZpX2Nsb3N1cmVfU1REQ0FMTDoKKy5MRkI1OgorCXB1c2hsCSVlYnAKKy5MQ0ZJOToKKwltb3ZsCSVlc3AsICVlYnAKKy5MQ0ZJMTA6CisJc3VibAkkNDAsICVlc3AKKwlsZWFsCS0yNCglZWJwKSwgJWVkeAorCW1vdmwJJWVkeCwgLTEyKCVlYnApCS8qIHJlc3AgKi8KKwlsZWFsCTEyKCVlYnApLCAlZWR4ICAvKiBhY2NvdW50IGZvciBzdHViIHJldHVybiBhZGRyZXNzIG9uIHN0YWNrICovCisJbW92bAklZWR4LCA0KCVlc3ApCS8qIGFyZ3MgKi8KKwlsZWFsCS0xMiglZWJwKSwgJWVkeAorCW1vdmwJJWVkeCwgKCVlc3ApCS8qICZyZXNwICovCisJY2FsbAlfZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcgorCW1vdmwJLTEyKCVlYnApLCAlZWN4CiswOgorCWNhbGwJMWYKKwkjIERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBjYWxsIGFuZCB0aGUganVtcCB0YWJsZS4KKy5Mc2Nsc19zdG9yZV90YWJsZToKKwkubG9uZwkuTHNjbHNfbm9yZXR2YWwJCS8qIEZGSV9UWVBFX1ZPSUQgKi8KKwkubG9uZwkuTHNjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9JTlQgKi8KKwkubG9uZwkuTHNjbHNfcmV0ZmxvYXQJCS8qIEZGSV9UWVBFX0ZMT0FUICovCisJLmxvbmcJLkxzY2xzX3JldGRvdWJsZQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KKwkubG9uZwkuTHNjbHNfcmV0bGRvdWJsZQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCisJLmxvbmcJLkxzY2xzX3JldHVpbnQ4CQkvKiBGRklfVFlQRV9VSU5UOCAqLworCS5sb25nCS5Mc2Nsc19yZXRzaW50OAkJLyogRkZJX1RZUEVfU0lOVDggKi8KKwkubG9uZwkuTHNjbHNfcmV0dWludDE2CS8qIEZGSV9UWVBFX1VJTlQxNiAqLworCS5sb25nCS5Mc2Nsc19yZXRzaW50MTYJLyogRkZJX1RZUEVfU0lOVDE2ICovCisJLmxvbmcJLkxzY2xzX3JldGludAkJLyogRkZJX1RZUEVfVUlOVDMyICovCisJLmxvbmcJLkxzY2xzX3JldGludAkJLyogRkZJX1RZUEVfU0lOVDMyICovCisJLmxvbmcJLkxzY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KKwkubG9uZwkuTHNjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLworCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3QJLyogRkZJX1RZUEVfU1RSVUNUICovCisJLmxvbmcJLkxzY2xzX3JldGludAkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLworCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3QxCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLworCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3QyCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLworCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3Q0CS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLworMToKKwlhZGQJJWVheCwgJWVheAorCWFkZAklZWF4LCAlZWF4CisJYWRkCSglZXNwKSwlZWF4CisJYWRkCSQ0LCAlZXNwCisJam1wCSooJWVheCkKKworCS8qIFNpZ24vemVybyBleHRlbmQgYXMgYXBwcm9wcmlhdGUuICAqLworLkxzY2xzX3JldHNpbnQ4OgorCW1vdnNibAkoJWVjeCksICVlYXgKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXRzaW50MTY6CisJbW92c3dsCSglZWN4KSwgJWVheAorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldHVpbnQ4OgorCW1vdnpibAkoJWVjeCksICVlYXgKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXR1aW50MTY6CisJbW92endsCSglZWN4KSwgJWVheAorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldGludDoKKwltb3ZsCSglZWN4KSwgJWVheAorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldGZsb2F0OgorCWZsZHMJKCVlY3gpCisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0ZG91YmxlOgorCWZsZGwJKCVlY3gpCisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0bGRvdWJsZToKKwlmbGR0CSglZWN4KQorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldGxsb25nOgorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAk0KCVlY3gpLCAlZWR4CisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0c3RydWN0MToKKwltb3ZzYmwJKCVlY3gpLCAlZWF4CisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0c3RydWN0MjoKKwltb3Zzd2wJKCVlY3gpLCAlZWF4CisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0c3RydWN0NDoKKwltb3ZsCSglZWN4KSwgJWVheAorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldHN0cnVjdDoKKwkjIE5vdGhpbmcgdG8gZG8hCisKKy5Mc2Nsc19ub3JldHZhbDoKKy5Mc2Nsc19lcGlsb2d1ZToKKwltb3ZsCSVlYnAsICVlc3AKKwlwb3BsCSVlYnAKKwlyZXQKKy5mZmlfY2xvc3VyZV9TVERDQUxMX2VuZDoKKy5MRkU1OgorCisJLnNlY3Rpb24JLmVoX2ZyYW1lLCJ3IgorLkxmcmFtZTE6CisuTFNDSUUxOgorCS5sb25nCS5MRUNJRTEtLkxBU0NJRTEgIC8qIExlbmd0aCBvZiBDb21tb24gSW5mb3JtYXRpb24gRW50cnkgKi8KKy5MQVNDSUUxOgorCS5sb25nCTB4MAkvKiBDSUUgSWRlbnRpZmllciBUYWcgKi8KKwkuYnl0ZQkweDEJLyogQ0lFIFZlcnNpb24gKi8KKyNpZmRlZiBfX1BJQ19fCisJLmFzY2lpICJ6UlwwIgkvKiBDSUUgQXVnbWVudGF0aW9uICovCisjZWxzZQorCS5hc2NpaSAiXDAiCS8qIENJRSBBdWdtZW50YXRpb24gKi8KICNlbmRpZgorCS5ieXRlCTB4MQkvKiAudWxlYjEyOCAweDE7IENJRSBDb2RlIEFsaWdubWVudCBGYWN0b3IgKi8KKwkuYnl0ZQkweDdjCS8qIC5zbGViMTI4IC00OyBDSUUgRGF0YSBBbGlnbm1lbnQgRmFjdG9yICovCisJLmJ5dGUJMHg4CS8qIENJRSBSQSBDb2x1bW4gKi8KKyNpZmRlZiBfX1BJQ19fCisJLmJ5dGUJMHgxCS8qIC51bGViMTI4IDB4MTsgQXVnbWVudGF0aW9uIHNpemUgKi8KKwkuYnl0ZQkweDFiCS8qIEZERSBFbmNvZGluZyAocGNyZWwgc2RhdGE0KSAqLworI2VuZGlmCisJLmJ5dGUJMHhjCS8qIERXX0NGQV9kZWZfY2ZhIENGQSA9IHI0ICsgNCA9IDQoJWVzcCkgKi8KKwkuYnl0ZQkweDQJLyogLnVsZWIxMjggMHg0ICovCisJLmJ5dGUJMHg0CS8qIC51bGViMTI4IDB4NCAqLworCS5ieXRlCTB4ODgJLyogRFdfQ0ZBX29mZnNldCwgY29sdW1uIDB4OCAlZWlwIGF0IENGQSArIDEgKiAtNCAqLworCS5ieXRlCTB4MQkvKiAudWxlYjEyOCAweDEgKi8KKwkuYWxpZ24gNAorLkxFQ0lFMToKKworLkxTRkRFMToKKwkubG9uZwkuTEVGREUxLS5MQVNGREUxCS8qIEZERSBMZW5ndGggKi8KKy5MQVNGREUxOgorCS5sb25nCS5MQVNGREUxLS5MZnJhbWUxCS8qIEZERSBDSUUgb2Zmc2V0ICovCisjaWYgZGVmaW5lZCBfX1BJQ19fICYmIGRlZmluZWQgSEFWRV9BU19YODZfUENSRUwKKwkubG9uZwkuTEZCMS0uCS8qIEZERSBpbml0aWFsIGxvY2F0aW9uICovCisjZWxzZQorCS5sb25nCS5MRkIxCisjZW5kaWYKKwkubG9uZwkuTEZFMS0uTEZCMQkvKiBGREUgYWRkcmVzcyByYW5nZSAqLworI2lmZGVmIF9fUElDX18KKwkuYnl0ZQkweDAJLyogLnVsZWIxMjggMHgwOyBBdWdtZW50YXRpb24gc2l6ZSAqLworI2VuZGlmCisJLyogRFdfQ0ZBX3h4eCBDRkkgaW5zdHJ1Y3Rpb25zIGdvIGhlcmUuICAqLworCisJLmJ5dGUJMHg0CS8qIERXX0NGQV9hZHZhbmNlX2xvYzQgKi8KKwkubG9uZwkuTENGSTAtLkxGQjEKKwkuYnl0ZQkweGUJLyogRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0IENGQSA9IHI0ICsgOCA9IDgoJWVzcCkgKi8KKwkuYnl0ZQkweDgJLyogLnVsZWIxMjggMHg4ICovCisJLmJ5dGUJMHg4NQkvKiBEV19DRkFfb2Zmc2V0LCBjb2x1bW4gMHg1ICVlYnAgYXQgQ0ZBICsgMiAqIC00ICovCisJLmJ5dGUJMHgyCS8qIC51bGViMTI4IDB4MiAqLworCisJLmJ5dGUJMHg0CS8qIERXX0NGQV9hZHZhbmNlX2xvYzQgKi8KKwkubG9uZwkuTENGSTEtLkxDRkkwCisJLmJ5dGUJMHhkCS8qIERXX0NGQV9kZWZfY2ZhX3JlZ2lzdGVyIENGQSA9IHI1ID0gJWVicCAqLworCS5ieXRlCTB4NQkvKiAudWxlYjEyOCAweDUgKi8KKworCS8qIEVuZCBvZiBEV19DRkFfeHh4IENGSSBpbnN0cnVjdGlvbnMuICAqLworCS5hbGlnbiA0CisuTEVGREUxOgorCisKKy5MU0ZERTM6CisJLmxvbmcJLkxFRkRFMy0uTEFTRkRFMwkvKiBGREUgTGVuZ3RoICovCisuTEFTRkRFMzoKKwkubG9uZwkuTEFTRkRFMy0uTGZyYW1lMQkvKiBGREUgQ0lFIG9mZnNldCAqLworI2lmIGRlZmluZWQgX19QSUNfXyAmJiBkZWZpbmVkIEhBVkVfQVNfWDg2X1BDUkVMCisJLmxvbmcJLkxGQjMtLgkvKiBGREUgaW5pdGlhbCBsb2NhdGlvbiAqLworI2Vsc2UKKwkubG9uZwkuTEZCMworI2VuZGlmCisJLmxvbmcJLkxGRTMtLkxGQjMJLyogRkRFIGFkZHJlc3MgcmFuZ2UgKi8KKyNpZmRlZiBfX1BJQ19fCisJLmJ5dGUJMHgwCS8qIC51bGViMTI4IDB4MDsgQXVnbWVudGF0aW9uIHNpemUgKi8KKyNlbmRpZgorCS8qIERXX0NGQV94eHggQ0ZJIGluc3RydWN0aW9ucyBnbyBoZXJlLiAgKi8KKworCS5ieXRlCTB4NAkvKiBEV19DRkFfYWR2YW5jZV9sb2M0ICovCisJLmxvbmcJLkxDRkk0LS5MRkIzCisJLmJ5dGUJMHhlCS8qIERXX0NGQV9kZWZfY2ZhX29mZnNldCBDRkEgPSByNCArIDggPSA4KCVlc3ApICovCisJLmJ5dGUJMHg4CS8qIC51bGViMTI4IDB4OCAqLworCS5ieXRlCTB4ODUJLyogRFdfQ0ZBX29mZnNldCwgY29sdW1uIDB4NSAlZWJwIGF0IENGQSArIDIgKiAtNCAqLworCS5ieXRlCTB4MgkvKiAudWxlYjEyOCAweDIgKi8KKworCS5ieXRlCTB4NAkvKiBEV19DRkFfYWR2YW5jZV9sb2M0ICovCisJLmxvbmcJLkxDRkk1LS5MQ0ZJNAorCS5ieXRlCTB4ZAkvKiBEV19DRkFfZGVmX2NmYV9yZWdpc3RlciBDRkEgPSByNSA9ICVlYnAgKi8KKwkuYnl0ZQkweDUJLyogLnVsZWIxMjggMHg1ICovCisKKwkvKiBFbmQgb2YgRFdfQ0ZBX3h4eCBDRkkgaW5zdHJ1Y3Rpb25zLiAgKi8KKwkuYWxpZ24gNAorLkxFRkRFMzoKKworI2lmICFGRklfTk9fUkFXX0FQSQorCisuTFNGREU0OgorCS5sb25nCS5MRUZERTQtLkxBU0ZERTQJLyogRkRFIExlbmd0aCAqLworLkxBU0ZERTQ6CisJLmxvbmcJLkxBU0ZERTQtLkxmcmFtZTEJLyogRkRFIENJRSBvZmZzZXQgKi8KKyNpZiBkZWZpbmVkIF9fUElDX18gJiYgZGVmaW5lZCBIQVZFX0FTX1g4Nl9QQ1JFTAorCS5sb25nCS5MRkI0LS4JLyogRkRFIGluaXRpYWwgbG9jYXRpb24gKi8KKyNlbHNlCisJLmxvbmcJLkxGQjQKKyNlbmRpZgorCS5sb25nCS5MRkU0LS5MRkI0CS8qIEZERSBhZGRyZXNzIHJhbmdlICovCisjaWZkZWYgX19QSUNfXworCS5ieXRlCTB4MAkvKiAudWxlYjEyOCAweDA7IEF1Z21lbnRhdGlvbiBzaXplICovCisjZW5kaWYKKwkvKiBEV19DRkFfeHh4IENGSSBpbnN0cnVjdGlvbnMgZ28gaGVyZS4gICovCisKKwkuYnl0ZQkweDQJLyogRFdfQ0ZBX2FkdmFuY2VfbG9jNCAqLworCS5sb25nCS5MQ0ZJNi0uTEZCNAorCS5ieXRlCTB4ZQkvKiBEV19DRkFfZGVmX2NmYV9vZmZzZXQgQ0ZBID0gcjQgKyA4ID0gOCglZXNwKSAqLworCS5ieXRlCTB4OAkvKiAudWxlYjEyOCAweDggKi8KKwkuYnl0ZQkweDg1CS8qIERXX0NGQV9vZmZzZXQsIGNvbHVtbiAweDUgJWVicCBhdCBDRkEgKyAyICogLTQgKi8KKwkuYnl0ZQkweDIJLyogLnVsZWIxMjggMHgyICovCisKKwkuYnl0ZQkweDQJLyogRFdfQ0ZBX2FkdmFuY2VfbG9jNCAqLworCS5sb25nCS5MQ0ZJNy0uTENGSTYKKwkuYnl0ZQkweGQJLyogRFdfQ0ZBX2RlZl9jZmFfcmVnaXN0ZXIgQ0ZBID0gcjUgPSAlZWJwICovCisJLmJ5dGUJMHg1CS8qIC51bGViMTI4IDB4NSAqLworCisJLmJ5dGUJMHg0CS8qIERXX0NGQV9hZHZhbmNlX2xvYzQgKi8KKwkubG9uZwkuTENGSTgtLkxDRkk3CisJLmJ5dGUJMHg4NgkvKiBEV19DRkFfb2Zmc2V0LCBjb2x1bW4gMHg2ICVlc2kgYXQgQ0ZBICsgMyAqIC00ICovCisJLmJ5dGUJMHgzCS8qIC51bGViMTI4IDB4MyAqLworCisJLyogRW5kIG9mIERXX0NGQV94eHggQ0ZJIGluc3RydWN0aW9ucy4gICovCisJLmFsaWduIDQKKy5MRUZERTQ6CisKKyNlbmRpZiAvKiAhRkZJX05PX1JBV19BUEkgKi8KKworLkxTRkRFNToKKwkubG9uZwkuTEVGREU1LS5MQVNGREU1CS8qIEZERSBMZW5ndGggKi8KKy5MQVNGREU1OgorCS5sb25nCS5MQVNGREU1LS5MZnJhbWUxCS8qIEZERSBDSUUgb2Zmc2V0ICovCisjaWYgZGVmaW5lZCBfX1BJQ19fICYmIGRlZmluZWQgSEFWRV9BU19YODZfUENSRUwKKwkubG9uZwkuTEZCNS0uCS8qIEZERSBpbml0aWFsIGxvY2F0aW9uICovCisjZWxzZQorCS5sb25nCS5MRkI1CisjZW5kaWYKKwkubG9uZwkuTEZFNS0uTEZCNQkvKiBGREUgYWRkcmVzcyByYW5nZSAqLworI2lmZGVmIF9fUElDX18KKwkuYnl0ZQkweDAJLyogLnVsZWIxMjggMHgwOyBBdWdtZW50YXRpb24gc2l6ZSAqLworI2VuZGlmCisJLyogRFdfQ0ZBX3h4eCBDRkkgaW5zdHJ1Y3Rpb25zIGdvIGhlcmUuICAqLworCisJLmJ5dGUJMHg0CS8qIERXX0NGQV9hZHZhbmNlX2xvYzQgKi8KKwkubG9uZwkuTENGSTktLkxGQjUKKwkuYnl0ZQkweGUJLyogRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0IENGQSA9IHI0ICsgOCA9IDgoJWVzcCkgKi8KKwkuYnl0ZQkweDgJLyogLnVsZWIxMjggMHg4ICovCisJLmJ5dGUJMHg4NQkvKiBEV19DRkFfb2Zmc2V0LCBjb2x1bW4gMHg1ICVlYnAgYXQgQ0ZBICsgMiAqIC00ICovCisJLmJ5dGUJMHgyCS8qIC51bGViMTI4IDB4MiAqLworCisJLmJ5dGUJMHg0CS8qIERXX0NGQV9hZHZhbmNlX2xvYzQgKi8KKwkubG9uZwkuTENGSTEwLS5MQ0ZJOQorCS5ieXRlCTB4ZAkvKiBEV19DRkFfZGVmX2NmYV9yZWdpc3RlciBDRkEgPSByNSA9ICVlYnAgKi8KKwkuYnl0ZQkweDUJLyogLnVsZWIxMjggMHg1ICovCisKKwkvKiBFbmQgb2YgRFdfQ0ZBX3h4eCBDRkkgaW5zdHJ1Y3Rpb25zLiAgKi8KKwkuYWxpZ24gNAorLkxFRkRFNToKKworI2VuZGlmIC8qICFfTVNDX1ZFUiAqLworCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luNjQuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW42NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOTE4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luNjQuUwpAQCAtMCwwICsxLDQ2MCBAQAorI2RlZmluZSBMSUJGRklfQVNNCisjaW5jbHVkZSA8ZmZpY29uZmlnLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisJCisvKiBDb25zdGFudHMgZm9yIGZmaV9jYWxsX3dpbjY0ICovCQorI2RlZmluZSBTVEFDSyAwCisjZGVmaW5lIFBSRVBfQVJHU19GTiAzMgorI2RlZmluZSBFQ0lGIDQwCisjZGVmaW5lIENJRl9CWVRFUyA0OAorI2RlZmluZSBDSUZfRkxBR1MgNTYKKyNkZWZpbmUgUlZBTFVFIDY0CisjZGVmaW5lIEZOIDcyCisKKy8qIGZmaV9jYWxsX3dpbjY0ICh2b2lkICgqcHJlcF9hcmdzX2ZuKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwKKyAgICAgICAgICAgICAgICAgICBleHRlbmRlZF9jaWYgKmVjaWYsIHVuc2lnbmVkIGJ5dGVzLCB1bnNpZ25lZCBmbGFncywKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqcnZhbHVlLCB2b2lkICgqZm4pKCkpOworICovCisKKyNpZmRlZiBfTVNDX1ZFUgorUFVCTElDCWZmaV9jYWxsX3dpbjY0CisKK0VYVFJOCV9fY2hrc3RrOk5FQVIKK0VYVFJOCWZmaV9jbG9zdXJlX3dpbjY0X2lubmVyOk5FQVIKKworX1RFWFQJU0VHTUVOVAorCis7OzsgZmZpX2Nsb3N1cmVfd2luNjQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGVzZSByZWdpc3RlcnMgc2V0OgorOzs7ICAgIHJheCBwb2ludHMgdG8gJ2Nsb3N1cmUnCis7OzsgICAgcjExIGNvbnRhaW5zIGEgYml0IG1hc2sgdGhhdCBzcGVjaWZpZXMgd2hpY2ggb2YgdGhlCis7OzsgICAgZmlyc3QgZm91ciBwYXJhbWV0ZXJzIGFyZSBmbG9hdCBvciBkb3VibGUKKzs7OworOzs7IEl0IG11c3QgbW92ZSB0aGUgcGFyYW1ldGVycyBwYXNzZWQgaW4gcmVnaXN0ZXJzIHRvIHRoZWlyIHN0YWNrIGxvY2F0aW9uLAorOzs7IGNhbGwgZmZpX2Nsb3N1cmVfd2luNjRfaW5uZXIgZm9yIHRoZSBhY3R1YWwgd29yaywgdGhlbiByZXR1cm4gdGhlIHJlc3VsdC4KKzs7OyAKK2ZmaV9jbG9zdXJlX3dpbjY0IFBST0MgRlJBTUUKKwk7OyBjb3B5IHJlZ2lzdGVyIGFyZ3VtZW50cyBvbnRvIHN0YWNrCisJdGVzdAlyMTEsIDEKKwlqbmUJZmlyc3RfaXNfZmxvYXQJCisJbW92CVFXT1JEIFBUUiBbcnNwKzhdLCByY3gKKwlqbXAJc2Vjb25kCitmaXJzdF9pc19mbG9hdDoKKwltb3ZscGQJUVdPUkQgUFRSIFtyc3ArOF0sIHhtbTAKKworc2Vjb25kOgorCXRlc3QJcjExLCAyCisJam5lCXNlY29uZF9pc19mbG9hdAkKKwltb3YJUVdPUkQgUFRSIFtyc3ArMTZdLCByZHgKKwlqbXAJdGhpcmQKK3NlY29uZF9pc19mbG9hdDoKKwltb3ZscGQJUVdPUkQgUFRSIFtyc3ArMTZdLCB4bW0xCisKK3RoaXJkOgorCXRlc3QJcjExLCA0CisJam5lCXRoaXJkX2lzX2Zsb2F0CQorCW1vdglRV09SRCBQVFIgW3JzcCsyNF0sIHI4CisJam1wCWZvdXJ0aAordGhpcmRfaXNfZmxvYXQ6CisJbW92bHBkCVFXT1JEIFBUUiBbcnNwKzI0XSwgeG1tMgorCitmb3VydGg6CisJdGVzdAlyMTEsIDgKKwlqbmUJZm91cnRoX2lzX2Zsb2F0CQorCW1vdglRV09SRCBQVFIgW3JzcCszMl0sIHI5CisJam1wCWRvbmUKK2ZvdXJ0aF9pc19mbG9hdDoKKwltb3ZscGQJUVdPUkQgUFRSIFtyc3ArMzJdLCB4bW0zCisKK2RvbmU6CisgICAgICAgIC5BTExPQ1NUQUNLIDQwCisJc3ViCXJzcCwgNDAKKyAgICAgICAgLkVORFBST0xPRworCW1vdglyY3gsIHJheAk7IGNvbnRleHQgaXMgZmlyc3QgcGFyYW1ldGVyCisJbW92CXJkeCwgcnNwCTsgc3RhY2sgaXMgc2Vjb25kIHBhcmFtZXRlcgorCWFkZAlyZHgsIDQ4CQk7IHBvaW50IHRvIHN0YXJ0IG9mIGFyZ3VtZW50cworCW1vdglyYXgsIGZmaV9jbG9zdXJlX3dpbjY0X2lubmVyCisJY2FsbAlyYXgJCTsgY2FsbCB0aGUgcmVhbCBjbG9zdXJlIGZ1bmN0aW9uCisJYWRkCXJzcCwgNDAKKwltb3ZkCXhtbTAsIHJheAk7IElmIHRoZSBjbG9zdXJlIHJldHVybmVkIGEgZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZmZpX2Nsb3N1cmVfd2luNjRfaW5uZXIgd3JvdGUgaXQgdG8gcmF4CisJcmV0CTAKK2ZmaV9jbG9zdXJlX3dpbjY0IEVORFAKKworZmZpX2NhbGxfd2luNjQgUFJPQyBGUkFNRQorICAgICAgICA7OyBjb3B5IHJlZ2lzdGVycyBvbnRvIHN0YWNrCisJbW92CVFXT1JEIFBUUiBbcnNwKzMyXSwgcjkKKwltb3YJUVdPUkQgUFRSIFtyc3ArMjRdLCByOAorCW1vdglRV09SRCBQVFIgW3JzcCsxNl0sIHJkeAorCW1vdglRV09SRCBQVFIgW3JzcCs4XSwgcmN4CisgICAgICAgIC5QVVNIUkVHIHJicAorCXB1c2gJcmJwCisgICAgICAgIC5BTExPQ1NUQUNLIDQ4CisJc3ViCXJzcCwgNDgJCQkJCTsgMDAwMDAwMzBICisgICAgICAgIC5TRVRGUkFNRSByYnAsIDMyCisJbGVhCXJicCwgUVdPUkQgUFRSIFtyc3ArMzJdCisgICAgICAgIC5FTkRQUk9MT0cKKworCW1vdgllYXgsIERXT1JEIFBUUiBDSUZfQllURVNbcmJwXQorCWFkZAlyYXgsIDE1CisJYW5kCXJheCwgLTE2CisJY2FsbAlfX2Noa3N0aworCXN1Yglyc3AsIHJheAorCWxlYQlyYXgsIFFXT1JEIFBUUiBbcnNwKzMyXQorCW1vdglRV09SRCBQVFIgU1RBQ0tbcmJwXSwgcmF4CisKKwltb3YJcmR4LCBRV09SRCBQVFIgRUNJRltyYnBdCisJbW92CXJjeCwgUVdPUkQgUFRSIFNUQUNLW3JicF0KKwljYWxsCVFXT1JEIFBUUiBQUkVQX0FSR1NfRk5bcmJwXQorCisJbW92CXJzcCwgUVdPUkQgUFRSIFNUQUNLW3JicF0KKworCW1vdmxwZAl4bW0zLCBRV09SRCBQVFIgW3JzcCsyNF0KKwltb3ZkCXI5LCB4bW0zCisKKwltb3ZscGQJeG1tMiwgUVdPUkQgUFRSIFtyc3ArMTZdCisJbW92ZAlyOCwgeG1tMgorCisJbW92bHBkCXhtbTEsIFFXT1JEIFBUUiBbcnNwKzhdCisJbW92ZAlyZHgsIHhtbTEKKworCW1vdmxwZAl4bW0wLCBRV09SRCBQVFIgW3JzcF0KKwltb3ZkCXJjeCwgeG1tMAorCisJY2FsbAlRV09SRCBQVFIgRk5bcmJwXQorcmV0X3N0cnVjdDRiJDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCCisgCWpuZQlyZXRfc3RydWN0MmIkCisKKwltb3YJcmN4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKwltb3YJRFdPUkQgUFRSIFtyY3hdLCBlYXgKKwlqbXAJcmV0X3ZvaWQkCisKK3JldF9zdHJ1Y3QyYiQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQgorIAlqbmUJcmV0X3N0cnVjdDFiJAorCisJbW92CXJjeCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisJbW92CVdPUkQgUFRSIFtyY3hdLCBheAorCWptcAlyZXRfdm9pZCQKKworcmV0X3N0cnVjdDFiJDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCCisgCWpuZQlyZXRfdWludDgkCisKKwltb3YJcmN4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKwltb3YJQllURSBQVFIgW3JjeF0sIGFsCisJam1wCXJldF92b2lkJAorCityZXRfdWludDgkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9VSU5UOAorIAlqbmUJcmV0X3NpbnQ4JAorCisJbW92CXJjeCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisJbW92enggICByYXgsIGFsCisJbW92CVFXT1JEIFBUUiBbcmN4XSwgcmF4CisJam1wCXJldF92b2lkJAorCityZXRfc2ludDgkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9TSU5UOAorIAlqbmUJcmV0X3VpbnQxNiQKKworCW1vdglyY3gsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorCW1vdnN4ICAgcmF4LCBhbAorCW1vdglRV09SRCBQVFIgW3JjeF0sIHJheAorCWptcAlyZXRfdm9pZCQKKworcmV0X3VpbnQxNiQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX1VJTlQxNgorIAlqbmUJcmV0X3NpbnQxNiQKKworCW1vdglyY3gsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorCW1vdnp4ICAgcmF4LCBheAorCW1vdglRV09SRCBQVFIgW3JjeF0sIHJheAorCWptcAlTSE9SVCByZXRfdm9pZCQKKworcmV0X3NpbnQxNiQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX1NJTlQxNgorIAlqbmUJcmV0X3VpbnQzMiQKKworCW1vdglyY3gsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorCW1vdnN4ICAgcmF4LCBheAorCW1vdglRV09SRCBQVFIgW3JjeF0sIHJheAorCWptcAlTSE9SVCByZXRfdm9pZCQKKworcmV0X3VpbnQzMiQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX1VJTlQzMgorIAlqbmUJcmV0X3NpbnQzMiQKKworCW1vdglyY3gsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorCW1vdiAgICAgZWF4LCBlYXgKKwltb3YJUVdPUkQgUFRSIFtyY3hdLCByYXgKKwlqbXAJU0hPUlQgcmV0X3ZvaWQkCisKK3JldF9zaW50MzIkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9TSU5UMzIKKyAJam5lCXJldF9mbG9hdCQKKworCW1vdglyY3gsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorCWNkcWUKKwltb3YJUVdPUkQgUFRSIFtyY3hdLCByYXgKKwlqbXAJU0hPUlQgcmV0X3ZvaWQkCisKK3JldF9mbG9hdCQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX0ZMT0FUCisgCWpuZQlTSE9SVCByZXRfZG91YmxlJAorCisgCW1vdglyYXgsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorIAltb3ZzcwlEV09SRCBQVFIgW3JheF0sIHhtbTAKKyAJam1wCVNIT1JUIHJldF92b2lkJAorCityZXRfZG91YmxlJDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfRE9VQkxFCisgCWpuZQlTSE9SVCByZXRfc2ludDY0JAorCisgCW1vdglyYXgsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorIAltb3ZscGQJUVdPUkQgUFRSIFtyYXhdLCB4bW0wCisgCWptcAlTSE9SVCByZXRfdm9pZCQKKworcmV0X3NpbnQ2NCQ6CisgIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9TSU5UNjQKKyAgCWpuZQlyZXRfdm9pZCQKKworIAltb3YJcmN4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKyAJbW92CVFXT1JEIFBUUiBbcmN4XSwgcmF4CisgCWptcAlTSE9SVCByZXRfdm9pZCQKKwkKK3JldF92b2lkJDoKKwl4b3IJcmF4LCByYXgKKworCWxlYQlyc3AsIFFXT1JEIFBUUiBbcmJwKzE2XQorCXBvcAlyYnAKKwlyZXQJMAorZmZpX2NhbGxfd2luNjQgRU5EUAorX1RFWFQJRU5EUworRU5ECisjZWxzZSAgICAgICAgCisudGV4dAorCisuZXh0ZXJuIF9mZmlfY2xvc3VyZV93aW42NF9pbm5lcgorCisjIGZmaV9jbG9zdXJlX3dpbjY0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlc2UgcmVnaXN0ZXJzIHNldDoKKyMgICAgcmF4IHBvaW50cyB0byAnY2xvc3VyZScKKyMgICAgcjExIGNvbnRhaW5zIGEgYml0IG1hc2sgdGhhdCBzcGVjaWZpZXMgd2hpY2ggb2YgdGhlCisjICAgIGZpcnN0IGZvdXIgcGFyYW1ldGVycyBhcmUgZmxvYXQgb3IgZG91YmxlCisjCisjIEl0IG11c3QgbW92ZSB0aGUgcGFyYW1ldGVycyBwYXNzZWQgaW4gcmVnaXN0ZXJzIHRvIHRoZWlyIHN0YWNrIGxvY2F0aW9uLAorIyBjYWxsIGZmaV9jbG9zdXJlX3dpbjY0X2lubmVyIGZvciB0aGUgYWN0dWFsIHdvcmssIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQuCisjIAorCS5iYWxpZ24gMTYKKyAgICAgICAgLmdsb2JsIF9mZmlfY2xvc3VyZV93aW42NAkKK19mZmlfY2xvc3VyZV93aW42NDogICAgIAorCSMgY29weSByZWdpc3RlciBhcmd1bWVudHMgb250byBzdGFjaworCXRlc3QJJDEsJXIxMQorCWpuZQkuTGZpcnN0X2lzX2Zsb2F0CQorCW1vdgklcmN4LCA4KCVyc3ApCisJam1wCS5Mc2Vjb25kCisuTGZpcnN0X2lzX2Zsb2F0OgorCW1vdmxwZAkleG1tMCwgOCglcnNwKQorCisuTHNlY29uZDoKKwl0ZXN0CSQyLCAlcjExCisJam5lCS5Mc2Vjb25kX2lzX2Zsb2F0CQorCW1vdgklcmR4LCAxNiglcnNwKQorCWptcAkuTHRoaXJkCisuTHNlY29uZF9pc19mbG9hdDoKKwltb3ZscGQJJXhtbTEsIDE2KCVyc3ApCisKKy5MdGhpcmQ6CisJdGVzdAkkNCwgJXIxMQorCWpuZQkuTHRoaXJkX2lzX2Zsb2F0CQorCW1vdgklcjgsMjQoJXJzcCkKKwlqbXAJLkxmb3VydGgKKy5MdGhpcmRfaXNfZmxvYXQ6CisJbW92bHBkCSV4bW0yLCAyNCglcnNwKQorCisuTGZvdXJ0aDoKKwl0ZXN0CSQ4LCAlcjExCisJam5lCS5MZm91cnRoX2lzX2Zsb2F0CQorCW1vdgklcjksIDMyKCVyc3ApCisJam1wCS5MZG9uZQorLkxmb3VydGhfaXNfZmxvYXQ6CisJbW92bHBkCSV4bW0zLCAzMiglcnNwKQorCisuTGRvbmU6CisjLkFMTE9DU1RBQ0sgNDAKKwlzdWIJJDQwLCAlcnNwCisjLkVORFBST0xPRworCW1vdgklcmF4LCAlcmN4CSMgY29udGV4dCBpcyBmaXJzdCBwYXJhbWV0ZXIKKwltb3YJJXJzcCwgJXJkeAkjIHN0YWNrIGlzIHNlY29uZCBwYXJhbWV0ZXIKKwlhZGQJJDQ4LCAlcmR4CSMgcG9pbnQgdG8gc3RhcnQgb2YgYXJndW1lbnRzCisJbW92CSRfZmZpX2Nsb3N1cmVfd2luNjRfaW5uZXIsICVyYXgKKwljYWxscQkqJXJheAkJIyBjYWxsIHRoZSByZWFsIGNsb3N1cmUgZnVuY3Rpb24KKwlhZGQJJDQwLCAlcnNwCisJbW92cQklcmF4LCAleG1tMAkjIElmIHRoZSBjbG9zdXJlIHJldHVybmVkIGEgZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmZpX2Nsb3N1cmVfd2luNjRfaW5uZXIgd3JvdGUgaXQgdG8gcmF4CisJcmV0cQorLmZmaV9jbG9zdXJlX3dpbjY0X2VuZDoKKworCS5iYWxpZ24gMTYKKyAgICAgICAgLmdsb2JsCV9mZmlfY2FsbF93aW42NAorX2ZmaV9jYWxsX3dpbjY0OiAgICAgICAgCisgICAgICAgICMgY29weSByZWdpc3RlcnMgb250byBzdGFjaworCW1vdgklcjksMzIoJXJzcCkKKwltb3YJJXI4LDI0KCVyc3ApCisJbW92CSVyZHgsMTYoJXJzcCkKKwltb3YJJXJjeCw4KCVyc3ApCisgICAgICAgICMuUFVTSFJFRyByYnAKKwlwdXNoCSVyYnAKKyAgICAgICAgIy5BTExPQ1NUQUNLIDQ4CisJc3ViCSQ0OCwlcnNwCisgICAgICAgICMuU0VURlJBTUUgcmJwLCAzMgorCWxlYQkzMiglcnNwKSwlcmJwCisgICAgICAgICMuRU5EUFJPTE9HCisKKwltb3YJQ0lGX0JZVEVTKCVyYnApLCVlYXgKKwlhZGQJJDE1LCAlcmF4CisJYW5kCSQtMTYsICVyYXgKKwljbXBxCSQweDEwMDAsICVyYXgKKwlqYglMY2hfZG9uZQorTGNoX3Byb2JlOgorCXN1YnEJJDB4MTAwMCwlcnNwCisJb3JsCSQweDAsICglcnNwKQorCXN1YnEJJDB4MTAwMCwlcmF4CisJY21wcQkkMHgxMDAwLCVyYXgKKwlqYQlMY2hfcHJvYmUKK0xjaF9kb25lOgorCXN1YnEJJXJheCwgJXJzcAorCW9ybAkkMHgwLCAoJXJzcCkKKwlsZWEJMzIoJXJzcCksICVyYXgKKwltb3YJJXJheCwgU1RBQ0soJXJicCkKKworCW1vdglFQ0lGKCVyYnApLCAlcmR4CisJbW92CVNUQUNLKCVyYnApLCAlcmN4CisJY2FsbHEJKlBSRVBfQVJHU19GTiglcmJwKQorCisJbW92CVNUQUNLKCVyYnApLCAlcnNwCisKKwltb3ZscGQJMjQoJXJzcCksICV4bW0zCisJbW92ZAkleG1tMywgJXI5CisKKwltb3ZscGQJMTYoJXJzcCksICV4bW0yCisJbW92ZAkleG1tMiwgJXI4CisKKwltb3ZscGQJOCglcnNwKSwgJXhtbTEKKwltb3ZkCSV4bW0xLCAlcmR4CisKKwltb3ZscGQJKCVyc3ApLCAleG1tMAorCW1vdmQJJXhtbTAsICVyY3gKKworCWNhbGxxCSpGTiglcmJwKQorLkxyZXRfc3RydWN0NGI6CisgCWNtcGwJJEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiwgQ0lGX0ZMQUdTKCVyYnApCisgCWpuZSAuTHJldF9zdHJ1Y3QyYgorCisJbW92CVJWQUxVRSglcmJwKSwgJXJjeAorCW1vdgklZWF4LCAoJXJjeCkKKwlqbXAJLkxyZXRfdm9pZAorCisuTHJldF9zdHJ1Y3QyYjoKKwljbXBsCSRGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIsIENJRl9GTEFHUyglcmJwKQorCWpuZSAuTHJldF9zdHJ1Y3QxYgorCQorCW1vdglSVkFMVUUoJXJicCksICVyY3gKKwltb3YJJWF4LCAoJXJjeCkKKwlqbXAgLkxyZXRfdm9pZAorCQorLkxyZXRfc3RydWN0MWI6CisJY21wbAkkRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCLCBDSUZfRkxBR1MoJXJicCkKKwlqbmUgLkxyZXRfdWludDgKKwkKKwltb3YJUlZBTFVFKCVyYnApLCAlcmN4CisJbW92CSVhbCwgKCVyY3gpCisJam1wIC5McmV0X3ZvaWQKKworLkxyZXRfdWludDg6CisJY21wbAkkRkZJX1RZUEVfVUlOVDgsIENJRl9GTEFHUyglcmJwKQorCWpuZSAuTHJldF9zaW50OAorCQorICAgICAgICBtb3YgICAgIFJWQUxVRSglcmJwKSwgJXJjeAorICAgICAgICBtb3Z6YnEgICVhbCwgJXJheAorCW1vdnEgICAgJXJheCwgKCVyY3gpCisJam1wIC5McmV0X3ZvaWQKKworLkxyZXRfc2ludDg6CisJY21wbAkkRkZJX1RZUEVfU0lOVDgsIENJRl9GTEFHUyglcmJwKQorCWpuZSAuTHJldF91aW50MTYKKwkKKyAgICAgICAgbW92ICAgICBSVkFMVUUoJXJicCksICVyY3gKKyAgICAgICAgbW92c2JxICAlYWwsICVyYXgKKwltb3ZxICAgICVyYXgsICglcmN4KQorCWptcCAuTHJldF92b2lkCisKKy5McmV0X3VpbnQxNjoKKwljbXBsCSRGRklfVFlQRV9VSU5UMTYsIENJRl9GTEFHUyglcmJwKQorCWpuZSAuTHJldF9zaW50MTYKKwkKKyAgICAgICAgbW92ICAgICBSVkFMVUUoJXJicCksICVyY3gKKyAgICAgICAgbW92endxICAlYXgsICVyYXgKKwltb3ZxICAgICVyYXgsICglcmN4KQorCWptcCAuTHJldF92b2lkCisKKy5McmV0X3NpbnQxNjoKKwljbXBsCSRGRklfVFlQRV9TSU5UMTYsIENJRl9GTEFHUyglcmJwKQorCWpuZSAuTHJldF91aW50MzIKKwkKKyAgICAgICAgbW92ICAgICBSVkFMVUUoJXJicCksICVyY3gKKyAgICAgICAgbW92c3dxICAlYXgsICVyYXgKKwltb3ZxICAgICVyYXgsICglcmN4KQorCWptcCAuTHJldF92b2lkCisKKy5McmV0X3VpbnQzMjoKKwljbXBsCSRGRklfVFlQRV9VSU5UMzIsIENJRl9GTEFHUyglcmJwKQorCWpuZSAuTHJldF9zaW50MzIKKwkKKyAgICAgICAgbW92ICAgICBSVkFMVUUoJXJicCksICVyY3gKKyAgICAgICAgbW92bCAgICAlZWF4LCAlZWF4CisJbW92cSAgICAlcmF4LCAoJXJjeCkKKwlqbXAgLkxyZXRfdm9pZAorCisuTHJldF9zaW50MzI6CisgCWNtcGwJJEZGSV9UWVBFX1NJTlQzMiwgQ0lGX0ZMQUdTKCVyYnApCisgCWpuZQkuTHJldF9mbG9hdAorCisJbW92CVJWQUxVRSglcmJwKSwgJXJjeAorCWNsdHEKKwltb3ZxCSVyYXgsICglcmN4KQorCWptcAkuTHJldF92b2lkCisKKy5McmV0X2Zsb2F0OgorIAljbXBsCSRGRklfVFlQRV9GTE9BVCwgQ0lGX0ZMQUdTKCVyYnApCisgCWpuZQkuTHJldF9kb3VibGUKKworIAltb3YJUlZBTFVFKCVyYnApLCAlcmF4CisgCW1vdnNzCSV4bW0wLCAoJXJheCkKKyAJam1wCS5McmV0X3ZvaWQKKworLkxyZXRfZG91YmxlOgorIAljbXBsCSRGRklfVFlQRV9ET1VCTEUsIENJRl9GTEFHUyglcmJwKQorIAlqbmUJLkxyZXRfc2ludDY0CisKKyAJbW92CVJWQUxVRSglcmJwKSwgJXJheAorIAltb3ZscGQJJXhtbTAsICglcmF4KQorIAlqbXAJLkxyZXRfdm9pZAorCisuTHJldF9zaW50NjQ6CisgIAljbXBsCSRGRklfVFlQRV9TSU5UNjQsIENJRl9GTEFHUyglcmJwKQorICAJam5lCS5McmV0X3ZvaWQKKworIAltb3YJUlZBTFVFKCVyYnApLCAlcmN4CisgCW1vdgklcmF4LCAoJXJjeCkKKyAJam1wCS5McmV0X3ZvaWQKKwkKKy5McmV0X3ZvaWQ6CisJeG9yCSVyYXgsICVyYXgKKworCWxlYQkxNiglcmJwKSwgJXJzcAorCXBvcAklcmJwCisJcmV0cQorLmZmaV9jYWxsX3dpbjY0X2VuZDoKKyNlbmRpZiAvKiAhX01TQ19WRVIgKi8KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWUzZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw4MCBAQAorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluLgorCitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBkZWphZ251CisKKyMgU2V0dXAgdGhlIHRlc3RpbmcgZnJhbWV3b3JrLCBpZiB5b3UgaGF2ZSBvbmUKK0VYUEVDVCA9IGBpZiBbIC1mICQodG9wX2J1aWxkZGlyKS8uLi9leHBlY3QvZXhwZWN0IF0gOyB0aGVuIFwKKyAgICAgICAgICAgIGVjaG8gJCh0b3BfYnVpbGRkaXIpLy4uL2V4cGVjdC9leHBlY3QgOyBcCisgICAgICAgICAgZWxzZSBlY2hvIGV4cGVjdCA7IGZpYAorCitSVU5URVNUID0gYGlmIFsgLWYgJCh0b3Bfc3JjZGlyKS8uLi9kZWphZ251L3J1bnRlc3QgXSA7IHRoZW4gXAorCSAgICAgICBlY2hvICQodG9wX3NyY2RpcikvLi4vZGVqYWdudS9ydW50ZXN0IDsgXAorCSAgICBlbHNlIGVjaG8gcnVudGVzdDsgZmlgCisKK0FNX1JVTlRFU1RGTEFHUyA9CisKK0NMRUFORklMRVMgPSAqLmV4ZSBjb3JlKiAqLmxvZyAqLnN1bQorCitFWFRSQV9ESVNUID0gbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAJXAorbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYyBsaWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjIFwKK2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCBjb25maWcvZGVmYXVsdC5leHAgbGliL3RhcmdldC1saWJwYXRoLmV4cCBcCitsaWIvbGliZmZpLWRnLmV4cCBsaWIvd3JhcHBlci5leHAgbGliZmZpLmNhbGwvZmxvYXQuYyBcCitsaWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYyBsaWJmZmkuY2FsbC9mbG9hdDMuYyBcCitsaWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jIGxpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jIFwKK2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jIGxpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jIFwKK2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jIGxpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIFwKK2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMgbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMgXAorbGliZmZpLmNhbGwvY2xzXzJieXRlLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYyBcCitsaWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYyBcCitsaWJmZmkuY2FsbC9jbHNfdWludC5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYyBcCitsaWJmZmkuY2FsbC9mbG9hdDEuYyBsaWJmZmkuY2FsbC9jbHNfMTlieXRlLmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyBsaWJmZmkuY2FsbC9jbHNfNGJ5dGUuYyBcCitsaWJmZmkuY2FsbC9yZXR1cm5fZmwxLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMgXAorbGliZmZpLmNhbGwvc3RydWN0Ny5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMgXAorbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIGxpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYyBcCitsaWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jIFwKK2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmMgbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jIFwKK2xpYmZmaS5jYWxsL3N0cnVjdDYuYyBsaWJmZmkuY2FsbC9yZXR1cm5fdWMuYyBsaWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMgXAorbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jIGxpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYyBcCitsaWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jIGxpYmZmaS5jYWxsL3JldHVybl9kYmwyLmMgXAorbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMgbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYyBsaWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYwlcCitsaWJmZmkuY2FsbC9yZXR1cm5fbGwuYyBsaWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jIFwKK2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMgbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYyBcCitsaWJmZmkuY2FsbC9jYWxsLmV4cCBsaWJmZmkuY2FsbC9mZml0ZXN0LmggbGliZmZpLmNhbGwvc3RybGVuLmMJXAorbGliZmZpLmNhbGwvcmV0dXJuX3NsLmMgbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYyBcCitsaWJmZmkuY2FsbC9zdHJ1Y3QxLmMgbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jIGxpYmZmaS5jYWxsL3JldHVybl91bC5jIFwKK2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYyBsaWJmZmkuY2FsbC9tYW55X3dpbjMyLmMgXAorbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYwlcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jCVwKK2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jIFwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jIGxpYmZmaS5jYWxsL3JldHVybl9mbC5jIFwKK2xpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jIGxpYmZmaS5jYWxsL3JldHVybl9sZGwuYyBcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYyBsaWJmZmkuY2FsbC9zdHJ1Y3QzLmMgXAorbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMgbGliZmZpLmNhbGwvY2xzX3NpbnQuYyBsaWJmZmkuY2FsbC9mbG9hdDIuYyBcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jIFwKK2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jIFwKK2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMgbGliZmZpLmNhbGwvY2xzXzVieXRlLmMgXAorbGliZmZpLmNhbGwvcmV0dXJuX2RibC5jIGxpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYyBcCitsaWJmZmkuY2FsbC9jbHNfOGJ5dGUuYyBsaWJmZmkuY2FsbC9weW9iamMtdGMuYwlcCitsaWJmZmkuY2FsbC9jbHNfMjRieXRlLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMgXAorbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMgbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMgXAorbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMgXAorbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYwlcCitsaWJmZmkuY2FsbC9zdHJ1Y3QyLmMgbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jIFwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMgbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYyBcCitsaWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jCVwKK2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMgbGliZmZpLmNhbGwvZmxvYXQ0LmMgXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jIGxpYmZmaS5jYWxsL3N0cnVjdDkuYyBcCitsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyBcCitsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMgXAorbGliZmZpLmNhbGwvc3RydWN0NC5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMgXAorbGliZmZpLmNhbGwvY2xzXzZieXRlLmMgbGliZmZpLmNhbGwvY2xzXzdieXRlLmMgbGliZmZpLmNhbGwvbWFueS5jIFwKK2xpYmZmaS5jYWxsL3N0cnVjdDguYyBsaWJmZmkuY2FsbC9uZWdpbnQuYyBsaWJmZmkuY2FsbC9zdHJ1Y3Q1LmMgXAorbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jIGxpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYyBcCitsaWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jIGxpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jIFwKK2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4YzQ2MQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNDgyIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3RhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKK3N1YmRpciA9IHRlc3RzdWl0ZQorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2ZmaWNvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK0RFSkFUT09MID0gJChQQUNLQUdFKQorUlVOVEVTVERFRkFVTFRGTEFHUyA9IC0tdG9vbCAkJHRvb2wgLS1zcmNkaXIgJCRzcmNkaXIKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQU1UQVIgPSBAQU1UQVJACitBTV9SVU5URVNURkxBR1MgPSAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSEFWRV9MT05HX0RPVUJMRSA9IEBIQVZFX0xPTkdfRE9VQkxFQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitUQVJHRVQgPSBAVEFSR0VUQAorVEFSR0VURElSID0gQFRBUkdFVERJUkAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0ID0gQHRhcmdldEAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACit0YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAordGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAordG9vbGV4ZWNkaXIgPSBAdG9vbGV4ZWNkaXJACit0b29sZXhlY2xpYmRpciA9IEB0b29sZXhlY2xpYmRpckAKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBkZWphZ251CisKKyMgU2V0dXAgdGhlIHRlc3RpbmcgZnJhbWV3b3JrLCBpZiB5b3UgaGF2ZSBvbmUKK0VYUEVDVCA9IGBpZiBbIC1mICQodG9wX2J1aWxkZGlyKS8uLi9leHBlY3QvZXhwZWN0IF0gOyB0aGVuIFwKKyAgICAgICAgICAgIGVjaG8gJCh0b3BfYnVpbGRkaXIpLy4uL2V4cGVjdC9leHBlY3QgOyBcCisgICAgICAgICAgZWxzZSBlY2hvIGV4cGVjdCA7IGZpYAorCitSVU5URVNUID0gYGlmIFsgLWYgJCh0b3Bfc3JjZGlyKS8uLi9kZWphZ251L3J1bnRlc3QgXSA7IHRoZW4gXAorCSAgICAgICBlY2hvICQodG9wX3NyY2RpcikvLi4vZGVqYWdudS9ydW50ZXN0IDsgXAorCSAgICBlbHNlIGVjaG8gcnVudGVzdDsgZmlgCisKK0NMRUFORklMRVMgPSAqLmV4ZSBjb3JlKiAqLmxvZyAqLnN1bQorRVhUUkFfRElTVCA9IGxpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwCVwKK2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MgbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYyBcCitsaWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggY29uZmlnL2RlZmF1bHQuZXhwIGxpYi90YXJnZXQtbGlicGF0aC5leHAgXAorbGliL2xpYmZmaS1kZy5leHAgbGliL3dyYXBwZXIuZXhwIGxpYmZmaS5jYWxsL2Zsb2F0LmMgXAorbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMgbGliZmZpLmNhbGwvZmxvYXQzLmMgXAorbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYyBsaWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYyBcCitsaWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYyBsaWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYyBcCitsaWJmZmkuY2FsbC9wcm9tb3Rpb24uYyBsaWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyBcCitsaWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jIGxpYmZmaS5jYWxsL2Nsc19mbG9hdC5jIFwKK2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMgXAorbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMgXAorbGliZmZpLmNhbGwvY2xzX3VpbnQuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMgXAorbGliZmZpLmNhbGwvZmxvYXQxLmMgbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgbGliZmZpLmNhbGwvY2xzXzRieXRlLmMgXAorbGliZmZpLmNhbGwvcmV0dXJuX2ZsMS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jIFwKK2xpYmZmaS5jYWxsL3N0cnVjdDcuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jIFwKK2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyBsaWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMgXAorbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYyBcCitsaWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jIGxpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYyBcCitsaWJmZmkuY2FsbC9zdHJ1Y3Q2LmMgbGliZmZpLmNhbGwvcmV0dXJuX3VjLmMgbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jIFwKK2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYyBsaWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMgXAorbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYyBsaWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jIFwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jIGxpYmZmaS5jYWxsL3JldHVybl9zYy5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMgbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMJXAorbGliZmZpLmNhbGwvcmV0dXJuX2xsLmMgbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYyBcCitsaWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jIGxpYmZmaS5jYWxsL3JldHVybl9kYmwxLmMgXAorbGliZmZpLmNhbGwvY2FsbC5leHAgbGliZmZpLmNhbGwvZmZpdGVzdC5oIGxpYmZmaS5jYWxsL3N0cmxlbi5jCVwKK2xpYmZmaS5jYWxsL3JldHVybl9zbC5jIGxpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMgXAorbGliZmZpLmNhbGwvc3RydWN0MS5jIGxpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYyBsaWJmZmkuY2FsbC9yZXR1cm5fdWwuYyBcCitsaWJmZmkuY2FsbC9jbHNfZG91YmxlLmMgbGliZmZpLmNhbGwvbWFueV93aW4zMi5jIFwKK2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMJXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jIGxpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYwlcCitsaWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYyBcCitsaWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYyBsaWJmZmkuY2FsbC9yZXR1cm5fZmwuYyBcCitsaWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYyBsaWJmZmkuY2FsbC9yZXR1cm5fbGRsLmMgXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMgbGliZmZpLmNhbGwvc3RydWN0My5jIFwKK2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jIGxpYmZmaS5jYWxsL2Nsc19zaW50LmMgbGliZmZpLmNhbGwvZmxvYXQyLmMgXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYyBcCitsaWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyBcCitsaWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jIGxpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jIFwKK2xpYmZmaS5jYWxsL3JldHVybl9kYmwuYyBsaWJmZmkuY2FsbC9jbHNfMjBieXRlLmMgXAorbGliZmZpLmNhbGwvY2xzXzhieXRlLmMgbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMJXAorbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jIFwKK2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jIGxpYmZmaS5jYWxsL2Nsc19zY2hhci5jIFwKK2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jIFwKK2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMJXAorbGliZmZpLmNhbGwvc3RydWN0Mi5jIGxpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYyBcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jIGxpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMgXAorbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYwlcCitsaWJmZmkuY2FsbC9wcm9ibGVtMS5jIGxpYmZmaS5jYWxsL2Zsb2F0NC5jIFwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYyBsaWJmZmkuY2FsbC9zdHJ1Y3Q5LmMgXAorbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMgXAorbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jIFwKK2xpYmZmaS5jYWxsL3N0cnVjdDQuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIFwKK2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jIGxpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jIGxpYmZmaS5jYWxsL21hbnkuYyBcCitsaWJmZmkuY2FsbC9zdHJ1Y3Q4LmMgbGliZmZpLmNhbGwvbmVnaW50LmMgbGliZmZpLmNhbGwvc3RydWN0NS5jIFwKK2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMgXAorbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYyBsaWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYyBcCitsaWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiB0ZXN0c3VpdGUvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIHRlc3RzdWl0ZS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworY2hlY2stREVKQUdOVTogc2l0ZS5leHAKKwlzcmNkaXI9YCQoYW1fX2NkKSAkKHNyY2RpcikgJiYgcHdkYDsgZXhwb3J0IHNyY2RpcjsgXAorCUVYUEVDVD0kKEVYUEVDVCk7IGV4cG9ydCBFWFBFQ1Q7IFwKKwlydW50ZXN0PSQoUlVOVEVTVCk7IFwKKwlpZiAkKFNIRUxMKSAtYyAiJCRydW50ZXN0IC0tdmVyc2lvbiIgPiAvZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBleGl0X3N0YXR1cz0wOyBsPSckKERFSkFUT09MKSc7IGZvciB0b29sIGluICQkbDsgZG8gXAorCSAgICBpZiAkJHJ1bnRlc3QgJChBTV9SVU5URVNURkxBR1MpICQoUlVOVEVTVERFRkFVTFRGTEFHUykgJChSVU5URVNURkxBR1MpOyBcCisJICAgIHRoZW4gOjsgZWxzZSBleGl0X3N0YXR1cz0xOyBmaTsgXAorCSAgZG9uZTsgXAorCWVsc2UgZWNobyAiV0FSTklORzogY291bGQgbm90IGZpbmQgXGBydW50ZXN0JyIgMT4mMjsgOjtcCisJZmk7IFwKKwlleGl0ICQkZXhpdF9zdGF0dXMKK3NpdGUuZXhwOiBNYWtlZmlsZQorCUBlY2hvICdNYWtpbmcgYSBuZXcgc2l0ZS5leHAgZmlsZS4uLicKKwlAZWNobyAnIyMgdGhlc2UgdmFyaWFibGVzIGFyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBtYWtlICMjJyA+c2l0ZS50bXAKKwlAZWNobyAnIyBEbyBub3QgZWRpdCBoZXJlLiAgSWYgeW91IHdpc2ggdG8gb3ZlcnJpZGUgdGhlc2UgdmFsdWVzJyA+PnNpdGUudG1wCisJQGVjaG8gJyMgZWRpdCB0aGUgbGFzdCBzZWN0aW9uJyA+PnNpdGUudG1wCisJQGVjaG8gJ3NldCBzcmNkaXIgJChzcmNkaXIpJyA+PnNpdGUudG1wCisJQGVjaG8gInNldCBvYmpkaXIgYHB3ZGAiID4+c2l0ZS50bXAKKwlAZWNobyAnc2V0IGJ1aWxkX2FsaWFzICIkKGJ1aWxkX2FsaWFzKSInID4+c2l0ZS50bXAKKwlAZWNobyAnc2V0IGJ1aWxkX3RyaXBsZXQgJChidWlsZF90cmlwbGV0KScgPj5zaXRlLnRtcAorCUBlY2hvICdzZXQgaG9zdF9hbGlhcyAiJChob3N0X2FsaWFzKSInID4+c2l0ZS50bXAKKwlAZWNobyAnc2V0IGhvc3RfdHJpcGxldCAkKGhvc3RfdHJpcGxldCknID4+c2l0ZS50bXAKKwlAZWNobyAnc2V0IHRhcmdldF9hbGlhcyAiJCh0YXJnZXRfYWxpYXMpIicgPj5zaXRlLnRtcAorCUBlY2hvICdzZXQgdGFyZ2V0X3RyaXBsZXQgJCh0YXJnZXRfdHJpcGxldCknID4+c2l0ZS50bXAKKwlAZWNobyAnIyMgQWxsIHZhcmlhYmxlcyBhYm92ZSBhcmUgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gRG8gTm90IEVkaXQgIyMnID4+c2l0ZS50bXAKKwlAdGVzdCAhIC1mIHNpdGUuZXhwIHx8IFwKKwkgIHNlZCAnMSwvXiMjIEFsbCB2YXJpYWJsZXMgYWJvdmUgYXJlLiojIy8gZCcgc2l0ZS5leHAgPj4gc2l0ZS50bXAKKwlALXJtIC1mIHNpdGUuYmFrCisJQHRlc3QgISAtZiBzaXRlLmV4cCB8fCBtdiBzaXRlLmV4cCBzaXRlLmJhaworCUBtdiBzaXRlLnRtcCBzaXRlLmV4cAorCitkaXN0Y2xlYW4tREVKQUdOVToKKwktcm0gLWYgc2l0ZS5leHAgc2l0ZS5iYWsKKwktbD0nJChERUpBVE9PTCknOyBmb3IgdG9vbCBpbiAkJGw7IGRvIFwKKwkgIHJtIC1mICQkdG9vbC5zdW0gJCR0b29sLmxvZzsgXAorCWRvbmUKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stREVKQUdOVQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1ERUpBR05VIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1ERUpBR05VIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuIGRpc3RjbGVhbi1ERUpBR05VIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2NvbmZpZy9kZWZhdWx0LmV4cCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2NvbmZpZy9kZWZhdWx0LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDk2N2NjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvY29uZmlnL2RlZmF1bHQuZXhwCkBAIC0wLDAgKzEgQEAKK2xvYWRfbGliICJzdGFuZGFyZC5leHAiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOGEzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cApAQCAtMCwwICsxLDMwMCBAQAorIyAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitwcm9jIGxvYWRfZ2NjX2xpYiB7IGZpbGVuYW1lIH0geworICAgIGdsb2JhbCBzcmNkaXIKKyAgICBsb2FkX2ZpbGUgJHNyY2Rpci9saWIvJGZpbGVuYW1lCit9CisKK2xvYWRfbGliIGRnLmV4cAorbG9hZF9saWIgbGliZ2xvc3MuZXhwCitsb2FkX2djY19saWIgdGFyZ2V0LWxpYnBhdGguZXhwCitsb2FkX2djY19saWIgd3JhcHBlci5leHAKKworCisjIERlZmluZSBsaWJmZmkgY2FsbGJhY2tzIGZvciBkZy5leHAuCisKK3Byb2MgbGliZmZpLWRnLXRlc3QtMSB7IHRhcmdldF9jb21waWxlIHByb2cgZG9fd2hhdCBleHRyYV90b29sX2ZsYWdzIH0geworCisgICAgIyBUbyBnZXQgYWxsIFxuIGluIGRnLW91dHB1dCB0ZXN0IHN0cmluZ3MgdG8gbWF0Y2ggcHJpbnRmIG91dHB1dAorICAgICMgaW4gYSBzeXN0ZW0gdGhhdCBvdXRwdXRzIGl0IGFzIFwwMTVcMDEyIChpLmUuIG5vdCBqdXN0IFwwMTIpLCB3ZQorICAgICMgbmVlZCB0byBjaGFuZ2UgYWxsIFxuIGludG8gXHI/XG4uICBBcyB0aGVyZSBpcyBubyBkZWphZ251IGZsYWcKKyAgICAjIG9yIGhvb2sgdG8gZG8gdGhhdCwgd2Ugc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCBiZWluZyB0ZXN0ZWQuCisgICAgIyBVbmZvcnR1bmF0ZWx5LCB3ZSBoYXZlIHRvIGtub3cgdGhhdCB0aGUgdmFyaWFibGUgaXMgY2FsbGVkCisgICAgIyBkZy1vdXRwdXQtdGV4dCBhbmQgbGl2ZXMgaW4gdGhlIGNhbGxlciBvZiBsaWJmZmktZGctdGVzdCwgd2hpY2gKKyAgICAjIGlzIHR3byBjYWxscyB1cC4gIE92ZXJyaWRpbmcgcHJvYyBkZy1vdXRwdXQgd291bGQgYmUgbG9uZ2VyIGFuZAorICAgICMgd291bGQgbmVjZXNzYXJpbHkgaGF2ZSB0aGUgc2FtZSBhc3N1bXB0aW9uLgorICAgIHVwdmFyIDIgZGctb3V0cHV0LXRleHQgb3V0cHV0X21hdGNoCisKKyAgICBpZiB7IFtsbGVuZ3RoICRvdXRwdXRfbWF0Y2hdID4gMSB9IHsKKwlyZWdzdWIgLWFsbCAiXG4iIFtsaW5kZXggJG91dHB1dF9tYXRjaCAxXSAiXHI/XG4iIHgKKwlzZXQgb3V0cHV0X21hdGNoIFtscmVwbGFjZSAkb3V0cHV0X21hdGNoIDEgMSAkeF0KKyAgICB9CisKKyAgICAjIFNldCB1cCB0aGUgY29tcGlsZXIgZmxhZ3MsIGJhc2VkIG9uIHdoYXQgd2UncmUgZ29pbmcgdG8gZG8uCisKKyAgICBzZXQgb3B0aW9ucyBbbGlzdF0KKyAgICBzd2l0Y2ggJGRvX3doYXQgeworCSJjb21waWxlIiB7CisJICAgIHNldCBjb21waWxlX3R5cGUgImFzc2VtYmx5IgorCSAgICBzZXQgb3V0cHV0X2ZpbGUgIltmaWxlIHJvb3RuYW1lIFtmaWxlIHRhaWwgJHByb2ddXS5zIgorCX0KKwkibGluayIgeworCSAgICBzZXQgY29tcGlsZV90eXBlICJleGVjdXRhYmxlIgorCSAgICBzZXQgb3V0cHV0X2ZpbGUgIltmaWxlIHJvb3RuYW1lIFtmaWxlIHRhaWwgJHByb2ddXS5leGUiCisJICAgICMgVGhlIGZvbGxvd2luZyBsaW5lIGlzIG5lZWRlZCBmb3IgdGFyZ2V0cyBsaWtlIHRoZSBpOTYwIHdoZXJlCisJICAgICMgdGhlIGRlZmF1bHQgb3V0cHV0IGZpbGUgaXMgYi5vdXQuICBTaWdoLgorCX0KKwkicnVuIiB7CisJICAgIHNldCBjb21waWxlX3R5cGUgImV4ZWN1dGFibGUiCisJICAgICMgRklYTUU6ICIuLyIgaXMgdG8gY29wZSB3aXRoICIuIiBub3QgYmVpbmcgaW4gJFBBVEguCisJICAgICMgU2hvdWxkIHRoaXMgYmUgaGFuZGxlZCBlbHNld2hlcmU/CisJICAgICMgWUVTLgorCSAgICBzZXQgb3V0cHV0X2ZpbGUgIi4vW2ZpbGUgcm9vdG5hbWUgW2ZpbGUgdGFpbCAkcHJvZ11dLmV4ZSIKKwkgICAgIyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIHdlIGNhcmUgaWYgYW4gZXhlY3V0YWJsZSB3YXMKKwkgICAgIyBjcmVhdGVkIG9yIG5vdC4gIElmIGl0IHdhcywgZGcuZXhwIHdpbGwgdHJ5IHRvIHJ1biBpdC4KKwkgICAgcmVtb3RlX2ZpbGUgYnVpbGQgZGVsZXRlICRvdXRwdXRfZmlsZTsKKwl9CisJZGVmYXVsdCB7CisJICAgIHBlcnJvciAiJGRvX3doYXQ6IG5vdCBhIHZhbGlkIGRnLWRvIGtleXdvcmQiCisJICAgIHJldHVybiAiIgorCX0KKyAgICB9CisKKyAgICBpZiB7ICRleHRyYV90b29sX2ZsYWdzICE9ICIiIH0geworCWxhcHBlbmQgb3B0aW9ucyAiYWRkaXRpb25hbF9mbGFncz0kZXh0cmFfdG9vbF9mbGFncyIKKyAgICB9CisKKyAgICBzZXQgY29tcF9vdXRwdXQgW2xpYmZmaV90YXJnZXRfY29tcGlsZSAiJHByb2ciICIkb3V0cHV0X2ZpbGUiICIkY29tcGlsZV90eXBlIiAkb3B0aW9uc107CisKKworICAgIHJldHVybiBbbGlzdCAkY29tcF9vdXRwdXQgJG91dHB1dF9maWxlXQorfQorCisKK3Byb2MgbGliZmZpLWRnLXRlc3QgeyBwcm9nIGRvX3doYXQgZXh0cmFfdG9vbF9mbGFncyB9IHsKKyAgICByZXR1cm4gW2xpYmZmaS1kZy10ZXN0LTEgdGFyZ2V0X2NvbXBpbGUgJHByb2cgJGRvX3doYXQgJGV4dHJhX3Rvb2xfZmxhZ3NdCit9CisKK3Byb2MgbGliZmZpLWluaXQgeyBhcmdzIH0geworICAgIGdsb2JhbCBnbHVlZmlsZSB3cmFwX2ZsYWdzOworICAgIGdsb2JhbCBzcmNkaXIKKyAgICBnbG9iYWwgYmxkZGlyZmZpCisgICAgZ2xvYmFsIG9iamRpcgorICAgIGdsb2JhbCBUT09MX09QVElPTlMKKyAgICBnbG9iYWwgdG9vbAorICAgIGdsb2JhbCBsaWJmZmlfaW5jbHVkZQorICAgIGdsb2JhbCBsaWJmZmlfbGlua19mbGFncworICAgIGdsb2JhbCB0b29sX3Jvb3RfZGlyCisgICAgZ2xvYmFsIGxkX2xpYnJhcnlfcGF0aAorCisgICAgc2V0IGJsZGRpcmZmaSBbcHdkXS8uLgorICAgIHZlcmJvc2UgImxpYmZmaSAkYmxkZGlyZmZpIgorCisgICAgc2V0IGdjY2RpciBbbG9va2Zvcl9maWxlICR0b29sX3Jvb3RfZGlyIGdjYy9saWJnY2MuYV0KKyAgICBpZiB7JGdjY2RpciAhPSAiIn0geworCXNldCBnY2NkaXIgW2ZpbGUgZGlybmFtZSAkZ2NjZGlyXQorICAgIH0KKyAgICB2ZXJib3NlICJnY2NkaXIgJGdjY2RpciIKKworICAgIHNldCBsZF9saWJyYXJ5X3BhdGggIi4iCisgICAgYXBwZW5kIGxkX2xpYnJhcnlfcGF0aCAiOiR7Z2NjZGlyfSIKKworICAgIHNldCBjb21waWxlciAiJHtnY2NkaXJ9L3hnY2MiCisgICAgaWYgeyBbaXNfcmVtb3RlIGhvc3RdID09IDAgJiYgW3doaWNoICRjb21waWxlcl0gIT0gMCB9IHsKKwlmb3JlYWNoIGkgIltleGVjICRjb21waWxlciAtLXByaW50LW11bHRpLWxpYl0iIHsKKwkgICAgc2V0IG1sZGlyICIiCisJICAgIHJlZ2V4cCAtLSAiXFthLXowLTk9Xy9cLi1cXSo7IiAkaSBtbGRpcgorCSAgICBzZXQgbWxkaXIgW3N0cmluZyB0cmltcmlnaHQgJG1sZGlyICJcO0AiXQorCSAgICBpZiB7ICIkbWxkaXIiID09ICIuIiB9IHsKKwkJY29udGludWUKKwkgICAgfQorCSAgICBpZiB7IFtsbGVuZ3RoIFtnbG9iIC1ub2NvbXBsYWluICR7Z2NjZGlyfS8ke21sZGlyfS9saWJnY2Nfcyouc28uKl1dID49IDEgfSB7CisJCWFwcGVuZCBsZF9saWJyYXJ5X3BhdGggIjoke2djY2Rpcn0vJHttbGRpcn0iCisJICAgIH0KKwl9CisgICAgfQorICAgICMgYWRkIHRoZSBsaWJyYXJ5IHBhdGggZm9yIGxpYmZmaS4KKyAgICBhcHBlbmQgbGRfbGlicmFyeV9wYXRoICI6JHtibGRkaXJmZml9Ly5saWJzIgorCisgICAgdmVyYm9zZSAibGRfbGlicmFyeV9wYXRoOiAkbGRfbGlicmFyeV9wYXRoIgorCisgICAgIyBQb2ludCB0byB0aGUgTGliZmZpIGhlYWRlcnMgaW4gbGliZmZpLgorICAgIHNldCBsaWJmZmlfaW5jbHVkZSAiJHtibGRkaXJmZml9L2luY2x1ZGUiCisgICAgdmVyYm9zZSAibGliZmZpX2luY2x1ZGUgJGxpYmZmaV9pbmNsdWRlIgorCisgICAgc2V0IGxpYmZmaV9kaXIgICIke2JsZGRpcmZmaX0vLmxpYnMiCisgICAgdmVyYm9zZSAibGliZmZpX2RpciAkbGliZmZpX2RpciIKKyAgICBpZiB7ICRsaWJmZmlfZGlyICE9ICIiIH0geworCXNldCBsaWJmZmlfZGlyIFtmaWxlIGRpcm5hbWUgJHtsaWJmZmlfZGlyfV0KKwlzZXQgbGliZmZpX2xpbmtfZmxhZ3MgIi1MJHtsaWJmZmlfZGlyfS8ubGlicyIKKyAgICB9CisKKyAgICBzZXRfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzCisgICAgbGliZmZpX21heWJlX2J1aWxkX3dyYXBwZXIgIiR7b2JqZGlyfS90ZXN0Z2x1ZS5vIgorfQorCitwcm9jIGxpYmZmaV9leGl0IHsgfSB7CisgICAgZ2xvYmFsIGdsdWVmaWxlOworCisgICAgaWYgW2luZm8gZXhpc3RzIGdsdWVmaWxlXSB7CisJZmlsZV9vbl9idWlsZCBkZWxldGUgJGdsdWVmaWxlOworCXVuc2V0IGdsdWVmaWxlOworICAgIH0KK30KKworcHJvYyBsaWJmZmlfdGFyZ2V0X2NvbXBpbGUgeyBzb3VyY2UgZGVzdCB0eXBlIG9wdGlvbnMgfSB7CisgICAgZ2xvYmFsIGdsdWVmaWxlIHdyYXBfZmxhZ3M7CisgICAgZ2xvYmFsIHNyY2RpcgorICAgIGdsb2JhbCBibGRkaXJmZmkKKyAgICBnbG9iYWwgVE9PTF9PUFRJT05TCisgICAgZ2xvYmFsIGxpYmZmaV9saW5rX2ZsYWdzCisgICAgZ2xvYmFsIGxpYmZmaV9pbmNsdWRlCisgICAgZ2xvYmFsIHRhcmdldF90cmlwbGV0CisKKworICAgIGlmIHsgW3RhcmdldF9pbmZvIG5lZWRzX3N0YXR1c193cmFwcGVyXSE9IiIgJiYgW2luZm8gZXhpc3RzIGdsdWVmaWxlXSB9IHsKKwlsYXBwZW5kIG9wdGlvbnMgImxpYnM9JHtnbHVlZmlsZX0iCisJbGFwcGVuZCBvcHRpb25zICJsZGZsYWdzPSR3cmFwX2ZsYWdzIgorICAgIH0KKworICAgICMgVE9PTF9PUFRJT05TIG11c3QgY29tZSBmaXJzdCwgc28gdGhhdCBpdCBkb2Vzbid0IG92ZXJyaWRlIHRlc3RjYXNlCisgICAgIyBzcGVjaWZpYyBvcHRpb25zLgorICAgIGlmIFtpbmZvIGV4aXN0cyBUT09MX09QVElPTlNdIHsKKwlsYXBwZW5kICBvcHRpb25zIFtjb25jYXQgImFkZGl0aW9uYWxfZmxhZ3M9JFRPT0xfT1BUSU9OUyIgJG9wdGlvbnNdOworICAgIH0KKworICAgICMgc2VhcmNoIGZvciBmZmlfbWlwcy5oIGluIHNyY2RpciwgdG9vCisgICAgbGFwcGVuZCBvcHRpb25zICJhZGRpdGlvbmFsX2ZsYWdzPS1JJHtsaWJmZmlfaW5jbHVkZX0gLUkke3NyY2Rpcn0vLi4vaW5jbHVkZSAgLUkke2xpYmZmaV9pbmNsdWRlfS8uLiIKKyAgICBsYXBwZW5kIG9wdGlvbnMgImFkZGl0aW9uYWxfZmxhZ3M9JHtsaWJmZmlfbGlua19mbGFnc30iCisKKyAgICAjIERhcndpbiBuZWVkcyBhIHN0YWNrIGV4ZWN1dGlvbiBhbGxvd2VkIGZsYWcuCisKKyAgICBpZiB7IFtpc3RhcmdldCAiKi0qLWRhcndpbjkqIl0gfHwgW2lzdGFyZ2V0ICIqLSotZGFyd2luMSoiXQorCSB8fCBbaXN0YXJnZXQgIiotKi1kYXJ3aW4yKiJdIH0geworCWxhcHBlbmQgb3B0aW9ucyAiYWRkaXRpb25hbF9mbGFncz0tV2wsLWFsbG93X3N0YWNrX2V4ZWN1dGUiCisgICAgfQorCisgICAgIyBJZiB5b3UncmUgYnVpbGRpbmcgdGhlIGNvbXBpbGVyIHdpdGggLS1wcmVmaXggc2V0IHRvIGEgcGxhY2UKKyAgICAjIHdoZXJlIGl0J3Mgbm90IHlldCBpbnN0YWxsZWQsIHRoZW4gdGhlIGxpbmtlciB3b24ndCBiZSBhYmxlIHRvCisgICAgIyBmaW5kIHRoZSBsaWJnY2MgdXNlZCBieSBsaWJmZmkuZHlsaWIuICBXZSBjb3VsZCBwYXNzIHRoZQorICAgICMgLWR5bGliX2ZpbGUgb3B0aW9uLCBidXQgdGhhdCdzIGNvbXBsaWNhdGVkLCBhbmQgaXQncyBtdWNoIGVhc2llcgorICAgICMgdG8ganVzdCBtYWtlIHRoZSBsaW5rZXIgZmluZCBsaWJnY2MgdXNpbmcgLUwgb3B0aW9ucy4KKyAgICBpZiB7IFtzdHJpbmcgbWF0Y2ggIiotKi1kYXJ3aW4qIiAkdGFyZ2V0X3RyaXBsZXRdIH0geworCWxhcHBlbmQgb3B0aW9ucyAibGlicz0gLXNoYXJlZC1saWJnY2MiCisgICAgfQorCisgICAgaWYgeyBbc3RyaW5nIG1hdGNoICIqLSotb3BlbmJzZCoiICR0YXJnZXRfdHJpcGxldF0gfSB7CisJbGFwcGVuZCBvcHRpb25zICJsaWJzPSAtbHB0aHJlYWQiCisgICAgfQorCisgICAgbGFwcGVuZCBvcHRpb25zICJsaWJzPSAtbGZmaSIKKworICAgIHZlcmJvc2UgIm9wdGlvbnM6ICRvcHRpb25zIgorICAgIHJldHVybiBbdGFyZ2V0X2NvbXBpbGUgJHNvdXJjZSAkZGVzdCAkdHlwZSAkb3B0aW9uc10KK30KKworIyBVdGlsaXR5IHJvdXRpbmVzLgorCisjCisjIHNlYXJjaF9mb3IgLS0gbG9va3MgZm9yIGEgc3RyaW5nIG1hdGNoIGluIGEgZmlsZQorIworcHJvYyBzZWFyY2hfZm9yIHsgZmlsZSBwYXR0ZXJuIH0geworICAgIHNldCBmZCBbb3BlbiAkZmlsZSByXQorICAgIHdoaWxlIHsgW2dldHMgJGZkIGN1cl9saW5lXT49MCB9IHsKKwlpZiBbc3RyaW5nIG1hdGNoICIqJHBhdHRlcm4qIiAkY3VyX2xpbmVdIHRoZW4geworCSAgICBjbG9zZSAkZmQKKwkgICAgcmV0dXJuIDEKKwl9CisgICAgfQorICAgIGNsb3NlICRmZAorICAgIHJldHVybiAwCit9CisKKyMgTW9kaWZpZWQgZGctcnVudGVzdCB0aGF0IGNhbiBjeWNsZSB0aHJvdWdoIGEgbGlzdCBvZiBvcHRpbWl6YXRpb24gb3B0aW9ucworIyBhcyBjLXRvcnR1cmUgZG9lcy4KK3Byb2MgbGliZmZpLWRnLXJ1bnRlc3QgeyB0ZXN0Y2FzZXMgZGVmYXVsdC1leHRyYS1mbGFncyB9IHsKKyAgICBnbG9iYWwgcnVudGVzdHMKKworICAgIGZvcmVhY2ggdGVzdCAkdGVzdGNhc2VzIHsKKwkjIElmIHdlJ3JlIG9ubHkgdGVzdGluZyBzcGVjaWZpYyBmaWxlcyBhbmQgdGhpcyBpc24ndCBvbmUgb2YKKwkjIHRoZW0sIHNraXAgaXQuCisJaWYgIVtydW50ZXN0X2ZpbGVfcCAkcnVudGVzdHMgJHRlc3RdIHsKKwkgICAgY29udGludWUKKwl9CisKKwkjIExvb2sgZm9yIGEgbG9vcCB3aXRoaW4gdGhlIHNvdXJjZSBjb2RlIC0gaWYgd2UgZG9uJ3QgZmluZCBvbmUsCisJIyBkb24ndCBwYXNzIC1mdW5yb2xsWy1hbGxdLWxvb3BzLgorCWdsb2JhbCB0b3J0dXJlX3dpdGhfbG9vcHMgdG9ydHVyZV93aXRob3V0X2xvb3BzCisJaWYgW2V4cHIgW3NlYXJjaF9mb3IgJHRlc3QgImZvciooIl0rW3NlYXJjaF9mb3IgJHRlc3QgIndoaWxlKigiXV0geworCSAgICBzZXQgb3B0aW9uX2xpc3QgJHRvcnR1cmVfd2l0aF9sb29wcworCX0gZWxzZSB7CisJICAgIHNldCBvcHRpb25fbGlzdCAkdG9ydHVyZV93aXRob3V0X2xvb3BzCisJfQorCisJc2V0IG5zaG9ydCBbZmlsZSB0YWlsIFtmaWxlIGRpcm5hbWUgJHRlc3RdXS9bZmlsZSB0YWlsICR0ZXN0XQorCisJZm9yZWFjaCBmbGFncyAkb3B0aW9uX2xpc3QgeworCSAgICB2ZXJib3NlICJUZXN0aW5nICRuc2hvcnQsICRmbGFncyIgMQorCSAgICBkZy10ZXN0ICR0ZXN0ICRmbGFncyAke2RlZmF1bHQtZXh0cmEtZmxhZ3N9CisJfQorICAgIH0KK30KKworCisjIExpa2UgY2hlY2tfY29uZGl0aW9uYWxfeGZhaWwsIGJ1dCBjYWxsYWJsZSBmcm9tIGEgZGcgdGVzdC4KKworcHJvYyBkZy14ZmFpbC1pZiB7IGFyZ3MgfSB7CisgICAgc2V0IGFyZ3MgW2xyZXBsYWNlICRhcmdzIDAgMF0KKyAgICBzZXQgc2VsZWN0b3IgInRhcmdldCBbam9pbiBbbGluZGV4ICRhcmdzIDFdXSIKKyAgICBpZiB7IFtkZy1wcm9jZXNzLXRhcmdldCAkc2VsZWN0b3JdID09ICJTIiB9IHsKKwlnbG9iYWwgY29tcGlsZXJfY29uZGl0aW9uYWxfeGZhaWxfZGF0YQorCXNldCBjb21waWxlcl9jb25kaXRpb25hbF94ZmFpbF9kYXRhICRhcmdzCisgICAgfQorfQorCisKKyMgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhZGRpdGlvbmFsX2ZpbGVzIGFuZCBhZGRpdGlvbmFsX3NvdXJjZXMKKyMgYXJlIGJvdGggY2xlYXJlZCBvdXQgYWZ0ZXIgZXZlcnkgdGVzdC4gIEl0IGlzIG5vdCBlbm91Z2ggdG8gY2xlYXIKKyMgdGhlbSBvdXQgKmJlZm9yZSogdGhlIG5leHQgdGVzdCBydW4gYmVjYXVzZSBnY2MtdGFyZ2V0LWNvbXBpbGUgZ2V0cworIyBydW4gZGlyZWN0bHkgZnJvbSBzb21lIC5leHAgZmlsZXMgKG91dHNpZGUgb2YgYW55IHRlc3QpLiAgKFRob3NlCisjIHVzZXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgZWxpbWluYXRlZC4pCisKKyMgQmVjYXVzZSB0aGUgREcgZnJhbWV3b3JrIGRvZXNuJ3QgcHJvdmlkZSBhIGhvb2sgdGhhdCBpcyBydW4gYXQgdGhlCisjIGVuZCBvZiBhIHRlc3QsIHdlIG11c3QgcmVwbGFjZSBkZy10ZXN0IHdpdGggYSB3cmFwcGVyLgorCitpZiB7IFtpbmZvIHByb2NzIHNhdmVkLWRnLXRlc3RdID09IFtsaXN0XSB9IHsKKyAgICByZW5hbWUgZGctdGVzdCBzYXZlZC1kZy10ZXN0CisKKyAgICBwcm9jIGRnLXRlc3QgeyBhcmdzIH0geworCWdsb2JhbCBhZGRpdGlvbmFsX2ZpbGVzCisJZ2xvYmFsIGFkZGl0aW9uYWxfc291cmNlcworCWdsb2JhbCBlcnJvckluZm8KKworCWlmIHsgWyBjYXRjaCB7IGV2YWwgc2F2ZWQtZGctdGVzdCAkYXJncyB9IGVycm1zZyBdIH0geworCSAgICBzZXQgc2F2ZWRfaW5mbyAkZXJyb3JJbmZvCisJICAgIHNldCBhZGRpdGlvbmFsX2ZpbGVzICIiCisJICAgIHNldCBhZGRpdGlvbmFsX3NvdXJjZXMgIiIKKwkgICAgZXJyb3IgJGVycm1zZyAkc2F2ZWRfaW5mbworCX0KKwlzZXQgYWRkaXRpb25hbF9maWxlcyAiIgorCXNldCBhZGRpdGlvbmFsX3NvdXJjZXMgIiIKKyAgICB9Cit9CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyB0Y2wtaW5kZW50LWxldmVsOjQKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL3RhcmdldC1saWJwYXRoLmV4cCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi90YXJnZXQtbGlicGF0aC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5OWFhNAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi90YXJnZXQtbGlicGF0aC5leHAKQEAgLTAsMCArMSwyNjMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgd2FzIGNvbnRyaWJ1dGVkIGJ5IEpvaG4gRGF2aWQgQW5nbGluIChkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYSkKKworc2V0IG9yaWdfZW52aXJvbm1lbnRfc2F2ZWQgMAorc2V0IG9yaWdfbGRfbGlicmFyeV9wYXRoX3NhdmVkIDAKK3NldCBvcmlnX2xkX3J1bl9wYXRoX3NhdmVkIDAKK3NldCBvcmlnX3NobGliX3BhdGhfc2F2ZWQgMAorc2V0IG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoX3NhdmVkIDAKK3NldCBvcmlnX2xkX2xpYnJhcnk2NF9wYXRoX3NhdmVkIDAKK3NldCBvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMl9zYXZlZCAwCitzZXQgb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjRfc2F2ZWQgMAorc2V0IG9yaWdfZHlsZF9saWJyYXJ5X3BhdGhfc2F2ZWQgMAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBwcm9jIHNldF9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMgeyB9CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcHJvYyBzZXRfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzIHsgfSB7CisgIGdsb2JhbCBsZF9saWJyYXJ5X3BhdGgKKyAgZ2xvYmFsIG9yaWdfZW52aXJvbm1lbnRfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX3J1bl9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX3NobGliX3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnk2NF9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMl9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjRfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfZHlsZF9saWJyYXJ5X3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoCisgIGdsb2JhbCBvcmlnX2xkX3J1bl9wYXRoCisgIGdsb2JhbCBvcmlnX3NobGliX3BhdGgKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnk2NF9wYXRoCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMgorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjQKKyAgZ2xvYmFsIG9yaWdfZHlsZF9saWJyYXJ5X3BhdGgKKyAgZ2xvYmFsIEdDQ19FWEVDX1BSRUZJWAorCisgICMgU2V0IHRoZSByZWxvY2F0ZWQgY29tcGlsZXIgcHJlZml4LCBidXQgb25seSBpZiB0aGUgdXNlciBoYXNuJ3Qgc3BlY2lmaWVkIG9uZS4KKyAgaWYgeyBbaW5mbyBleGlzdHMgR0NDX0VYRUNfUFJFRklYXSAmJiAhW2luZm8gZXhpc3RzIGVudihHQ0NfRVhFQ19QUkVGSVgpXSB9IHsKKyAgICBzZXRlbnYgR0NDX0VYRUNfUFJFRklYICIkR0NDX0VYRUNfUFJFRklYIgorICB9CisKKyAgIyBTZXR0aW5nIHRoZSBsZCBsaWJyYXJ5IHBhdGggY2F1c2VzIHRyb3VibGUgd2hlbiB0ZXN0aW5nIGNyb3NzLWNvbXBpbGVycy4KKyAgaWYgeyBbaXNfcmVtb3RlIHRhcmdldF0gfSB7CisgICAgcmV0dXJuCisgIH0KKworICBpZiB7ICRvcmlnX2Vudmlyb25tZW50X3NhdmVkID09IDAgfSB7CisgICAgZ2xvYmFsIGVudgorCisgICAgc2V0IG9yaWdfZW52aXJvbm1lbnRfc2F2ZWQgMQorCisgICAgIyBTYXZlIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudC4KKyAgICBpZiBbaW5mbyBleGlzdHMgZW52KExEX0xJQlJBUllfUEFUSCldIHsKKyAgICAgIHNldCBvcmlnX2xkX2xpYnJhcnlfcGF0aCAiJGVudihMRF9MSUJSQVJZX1BBVEgpIgorICAgICAgc2V0IG9yaWdfbGRfbGlicmFyeV9wYXRoX3NhdmVkIDEKKyAgICB9CisgICAgaWYgW2luZm8gZXhpc3RzIGVudihMRF9SVU5fUEFUSCldIHsKKyAgICAgIHNldCBvcmlnX2xkX3J1bl9wYXRoICIkZW52KExEX1JVTl9QQVRIKSIKKyAgICAgIHNldCBvcmlnX2xkX3J1bl9wYXRoX3NhdmVkIDEKKyAgICB9CisgICAgaWYgW2luZm8gZXhpc3RzIGVudihTSExJQl9QQVRIKV0geworICAgICAgc2V0IG9yaWdfc2hsaWJfcGF0aCAiJGVudihTSExJQl9QQVRIKSIKKyAgICAgIHNldCBvcmlnX3NobGliX3BhdGhfc2F2ZWQgMQorICAgIH0KKyAgICBpZiBbaW5mbyBleGlzdHMgZW52KExEX0xJQlJBUllOMzJfUEFUSCldIHsKKyAgICAgIHNldCBvcmlnX2xkX2xpYnJhcnluMzJfcGF0aCAiJGVudihMRF9MSUJSQVJZTjMyX1BBVEgpIgorICAgICAgc2V0IG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoX3NhdmVkIDEKKyAgICB9CisgICAgaWYgW2luZm8gZXhpc3RzIGVudihMRF9MSUJSQVJZNjRfUEFUSCldIHsKKyAgICAgIHNldCBvcmlnX2xkX2xpYnJhcnk2NF9wYXRoICIkZW52KExEX0xJQlJBUlk2NF9QQVRIKSIKKyAgICAgIHNldCBvcmlnX2xkX2xpYnJhcnk2NF9wYXRoX3NhdmVkIDEKKyAgICB9CisgICAgaWYgW2luZm8gZXhpc3RzIGVudihMRF9MSUJSQVJZX1BBVEhfMzIpXSB7CisgICAgICBzZXQgb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzIgIiRlbnYoTERfTElCUkFSWV9QQVRIXzMyKSIKKyAgICAgIHNldCBvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMl9zYXZlZCAxCisgICAgfQorICAgIGlmIFtpbmZvIGV4aXN0cyBlbnYoTERfTElCUkFSWV9QQVRIXzY0KV0geworICAgICAgc2V0IG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0ICIkZW52KExEX0xJQlJBUllfUEFUSF82NCkiCisgICAgICBzZXQgb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjRfc2F2ZWQgMQorICAgIH0KKyAgICBpZiBbaW5mbyBleGlzdHMgZW52KERZTERfTElCUkFSWV9QQVRIKV0geworICAgICAgc2V0IG9yaWdfZHlsZF9saWJyYXJ5X3BhdGggIiRlbnYoRFlMRF9MSUJSQVJZX1BBVEgpIgorICAgICAgc2V0IG9yaWdfZHlsZF9saWJyYXJ5X3BhdGhfc2F2ZWQgMQorICAgIH0KKyAgfQorCisgICMgV2UgbmVlZCB0byBzZXQgbGQgbGlicmFyeSBwYXRoIGluIHRoZSBlbnZpcm9ubWVudC4gIEN1cnJlbnRseSwKKyAgIyB1bml4LmV4cCBkb2Vzbid0IHNldCB0aGUgZW52aXJvbm1lbnQgY29ycmVjdGx5IGZvciBhbGwgc3lzdGVtcy4KKyAgIyBJdCBvbmx5IHNldHMgU0hMSUJfUEFUSCBhbmQgTERfTElCUkFSWV9QQVRIIHdoZW4gaXQgZXhlY3V0ZXMgYQorICAjIHByb2dyYW0uICBXZSBhbHNvIG5lZWQgdGhlIGVudmlyb25tZW50IHNldCBmb3IgY29tcGlsYXRpb25zLCBldGMuCisgICMKKyAgIyBPbiBJUklYIDYsIHdlIGhhdmUgdG8gc2V0IHZhcmlhYmxlcyBha2luIHRvIExEX0xJQlJBUllfUEFUSCwgYnV0CisgICMgY2FsbGVkIExEX0xJQlJBUllOMzJfUEFUSCAoZm9yIHRoZSBOMzIgQUJJKSBhbmQgTERfTElCUkFSWTY0X1BBVEgKKyAgIyAoZm9yIHRoZSA2NC1iaXQgQUJJKS4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gRGFyd2luIChEWUxEX0xJQlJBUllfUEFUSCksCisgICMgU29sYXJpcyAzMiBiaXQgKExEX0xJQlJBUllfUEFUSF8zMiksIFNvbGFyaXMgNjQgYml0IChMRF9MSUJSQVJZX1BBVEhfNjQpLAorICAjIGFuZCBIUC1VWCAoU0hMSUJfUEFUSCkuICBJbiBzb21lIGNhc2VzLCB0aGUgdmFyaWFibGVzIGFyZSBpbmRlcGVuZGVudAorICAjIG9mIExEX0xJQlJBUllfUEFUSCwgYW5kIGluIG90aGVyIGNhc2VzIExEX0xJQlJBUllfUEFUSCBpcyB1c2VkIGlmIHRoZQorICAjIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkLgorICAjCisgICMgRG9pbmcgdGhpcyBpcyBzb21ld2hhdCBvZiBhIGhhY2sgYXMgbGRfbGlicmFyeV9wYXRoIGdldHMgcmVwZWF0ZWQgaW4KKyAgIyBTSExJQl9QQVRIIGFuZCBMRF9MSUJSQVJZX1BBVEggd2hlbiB1bml4X2xvYWQgc2V0cyB0aGVzZSB2YXJpYWJsZXMuCisgIGlmIHsgJG9yaWdfbGRfbGlicmFyeV9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEggIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfbGRfbGlicmFyeV9wYXRoIgorICB9IGVsc2UgeworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEggIiRsZF9saWJyYXJ5X3BhdGgiCisgIH0KKyAgaWYgeyAkb3JpZ19sZF9ydW5fcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfUlVOX1BBVEggIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfbGRfcnVuX3BhdGgiCisgIH0gZWxzZSB7CisgICAgc2V0ZW52IExEX1JVTl9QQVRIICIkbGRfbGlicmFyeV9wYXRoIgorICB9CisgICMgVGhlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgZHluYW1pYyBwYXRoIHNlYXJjaCBmb3IgNjQtYml0CisgICMgSFAtVVggZXhlY3V0YWJsZXMgc2VhcmNoZXMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSBTSExJQl9QQVRILgorICAjIExEX0xJQlJBUllfUEFUSCBpc24ndCB1c2VkIGZvciAzMi1iaXQgZXhlY3V0YWJsZXMuICBUaHVzLCB3ZQorICAjIHNldCBMRF9MSUJSQVJZX1BBVEggYW5kIFNITElCX1BBVEggYXMgaWYgdGhleSB3ZXJlIGluZGVwZW5kZW50LgorICBpZiB7ICRvcmlnX3NobGliX3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IFNITElCX1BBVEggIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfc2hsaWJfcGF0aCIKKyAgfSBlbHNlIHsKKyAgICBzZXRlbnYgU0hMSUJfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aCIKKyAgfQorICBpZiB7ICRvcmlnX2xkX2xpYnJhcnluMzJfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWU4zMl9QQVRIICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2xkX2xpYnJhcnluMzJfcGF0aCIKKyAgfSBlbHNlaWYgeyAkb3JpZ19sZF9saWJyYXJ5X3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllOMzJfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19sZF9saWJyYXJ5X3BhdGgiCisgIH0gZWxzZSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllOMzJfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aCIKKyAgfQorICBpZiB7ICRvcmlnX2xkX2xpYnJhcnk2NF9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZNjRfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19sZF9saWJyYXJ5NjRfcGF0aCIKKyAgfSBlbHNlaWYgeyAkb3JpZ19sZF9saWJyYXJ5X3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUlk2NF9QQVRIICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2xkX2xpYnJhcnlfcGF0aCIKKyAgfSBlbHNlIHsKKyAgICBzZXRlbnYgTERfTElCUkFSWTY0X1BBVEggIiRsZF9saWJyYXJ5X3BhdGgiCisgIH0KKyAgaWYgeyAkb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzJfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSF8zMiAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzIiCisgIH0gZWxzZWlmIHsgJG9yaWdfbGRfbGlicmFyeV9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEhfMzIgIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfbGRfbGlicmFyeV9wYXRoIgorICB9IGVsc2UgeworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEhfMzIgIiRsZF9saWJyYXJ5X3BhdGgiCisgIH0KKyAgaWYgeyAkb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjRfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSF82NCAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjQiCisgIH0gZWxzZWlmIHsgJG9yaWdfbGRfbGlicmFyeV9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEhfNjQgIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfbGRfbGlicmFyeV9wYXRoIgorICB9IGVsc2UgeworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEhfNjQgIiRsZF9saWJyYXJ5X3BhdGgiCisgIH0KKyAgaWYgeyAkb3JpZ19keWxkX2xpYnJhcnlfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgRFlMRF9MSUJSQVJZX1BBVEggIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfZHlsZF9saWJyYXJ5X3BhdGgiCisgIH0gZWxzZSB7CisgICAgc2V0ZW52IERZTERfTElCUkFSWV9QQVRIICIkbGRfbGlicmFyeV9wYXRoIgorICB9CisKKyAgdmVyYm9zZSAtbG9nICJzZXRfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzOiBsZF9saWJyYXJ5X3BhdGg9JGxkX2xpYnJhcnlfcGF0aCIKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHByb2MgcmVzdG9yZV9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMgeyB9CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcHJvYyByZXN0b3JlX2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyB7IH0geworICBnbG9iYWwgb3JpZ19lbnZpcm9ubWVudF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfcnVuX3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfc2hsaWJfcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeTY0X3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aF82NF9zYXZlZAorICBnbG9iYWwgb3JpZ19keWxkX2xpYnJhcnlfcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGgKKyAgZ2xvYmFsIG9yaWdfbGRfcnVuX3BhdGgKKyAgZ2xvYmFsIG9yaWdfc2hsaWJfcGF0aAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGgKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeTY0X3BhdGgKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aF82NAorICBnbG9iYWwgb3JpZ19keWxkX2xpYnJhcnlfcGF0aAorCisgIGlmIHsgJG9yaWdfZW52aXJvbm1lbnRfc2F2ZWQgPT0gMCB9IHsKKyAgICByZXR1cm4KKyAgfQorCisgIGlmIHsgJG9yaWdfbGRfbGlicmFyeV9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEggIiRvcmlnX2xkX2xpYnJhcnlfcGF0aCIKKyAgfSBlbHNlaWYgW2luZm8gZXhpc3RzIGVudihMRF9MSUJSQVJZX1BBVEgpXSB7CisgICAgdW5zZXRlbnYgTERfTElCUkFSWV9QQVRICisgIH0KKyAgaWYgeyAkb3JpZ19sZF9ydW5fcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfUlVOX1BBVEggIiRvcmlnX2xkX3J1bl9wYXRoIgorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMgZW52KExEX1JVTl9QQVRIKV0geworICAgIHVuc2V0ZW52IExEX1JVTl9QQVRICisgIH0KKyAgaWYgeyAkb3JpZ19zaGxpYl9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBTSExJQl9QQVRIICIkb3JpZ19zaGxpYl9wYXRoIgorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMgZW52KFNITElCX1BBVEgpXSB7CisgICAgdW5zZXRlbnYgU0hMSUJfUEFUSAorICB9CisgIGlmIHsgJG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZTjMyX1BBVEggIiRvcmlnX2xkX2xpYnJhcnluMzJfcGF0aCIKKyAgfSBlbHNlaWYgW2luZm8gZXhpc3RzIGVudihMRF9MSUJSQVJZTjMyX1BBVEgpXSB7CisgICAgdW5zZXRlbnYgTERfTElCUkFSWU4zMl9QQVRICisgIH0KKyAgaWYgeyAkb3JpZ19sZF9saWJyYXJ5NjRfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWTY0X1BBVEggIiRvcmlnX2xkX2xpYnJhcnk2NF9wYXRoIgorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMgZW52KExEX0xJQlJBUlk2NF9QQVRIKV0geworICAgIHVuc2V0ZW52IExEX0xJQlJBUlk2NF9QQVRICisgIH0KKyAgaWYgeyAkb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzJfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSF8zMiAiJG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyIgorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMgZW52KExEX0xJQlJBUllfUEFUSF8zMildIHsKKyAgICB1bnNldGVudiBMRF9MSUJSQVJZX1BBVEhfMzIKKyAgfQorICBpZiB7ICRvcmlnX2xkX2xpYnJhcnlfcGF0aF82NF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIXzY0ICIkb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjQiCisgIH0gZWxzZWlmIFtpbmZvIGV4aXN0cyBlbnYoTERfTElCUkFSWV9QQVRIXzY0KV0geworICAgIHVuc2V0ZW52IExEX0xJQlJBUllfUEFUSF82NAorICB9CisgIGlmIHsgJG9yaWdfZHlsZF9saWJyYXJ5X3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IERZTERfTElCUkFSWV9QQVRIICIkb3JpZ19keWxkX2xpYnJhcnlfcGF0aCIKKyAgfSBlbHNlaWYgW2luZm8gZXhpc3RzIGVudihEWUxEX0xJQlJBUllfUEFUSCldIHsKKyAgICB1bnNldGVudiBEWUxEX0xJQlJBUllfUEFUSAorICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBwcm9jIGdldF9zaGxpYl9leHRlbnNpb24geyB9CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcHJvYyBnZXRfc2hsaWJfZXh0ZW5zaW9uIHsgfSB7CisgICAgZ2xvYmFsIHNobGliX2V4dAorCisgICAgaWYgeyBbIGlzdGFyZ2V0ICotKi1kYXJ3aW4qIF0gfSB7CisJc2V0IHNobGliX2V4dCAiZHlsaWIiCisgICAgfSBlbHNlaWYgeyBbIGlzdGFyZ2V0ICotKi1jeWd3aW4qIF0gfHwgWyBpc3RhcmdldCAqLSotbWluZ3cqIF0gfSB7CisJc2V0IHNobGliX2V4dCAiZGxsIgorICAgIH0gZWxzZWlmIHsgWyBpc3RhcmdldCBocHBhKi0qLWhwdXgqIF0gfSB7CisJc2V0IHNobGliX2V4dCAic2wiCisgICAgfSBlbHNlIHsKKwlzZXQgc2hsaWJfZXh0ICJzbyIKKyAgICB9CisgICAgcmV0dXJuICRzaGxpYl9leHQKK30KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL3dyYXBwZXIuZXhwIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL3dyYXBwZXIuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNWFlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvd3JhcHBlci5leHAKQEAgLTAsMCArMSw0NSBAQAorIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyAKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMgCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgY29udGFpbnMgR0NDLXNwZWNpZmljcyBmb3Igc3RhdHVzIHdyYXBwZXJzIGZvciB0ZXN0IHByb2dyYW1zLgorCisjICR7dG9vbH1fbWF5YmVfYnVpbGRfd3JhcHBlciAtLSBCdWlsZCB3cmFwcGVyIG9iamVjdCBpZiB0aGUgdGFyZ2V0CisjIG5lZWRzIGl0LiAgRklMRU5BTUUgaXMgdGhlIHBhdGggdG8gdGhlIHdyYXBwZXIgZmlsZS4gIElmIHRoZXJlIGFyZQorIyBhZGRpdGlvbmFsIGFyZ3VtZW50cywgdGhleSBhcmUgY29tbWFuZC1saW5lIG9wdGlvbnMgdG8gcHJvdmlkZSB0bworIyB0aGUgY29tcGlsZXIgd2hlbiBjb21waWxpbmcgRklMRU5BTUUuCisKK3Byb2MgJHt0b29sfV9tYXliZV9idWlsZF93cmFwcGVyIHsgZmlsZW5hbWUgYXJncyB9IHsKKyAgICBnbG9iYWwgZ2x1ZWZpbGUgd3JhcF9mbGFncworCisgICAgaWYgeyBbdGFyZ2V0X2luZm8gbmVlZHNfc3RhdHVzX3dyYXBwZXJdICE9ICIiIFwKKyAJICYmIFt0YXJnZXRfaW5mbyBuZWVkc19zdGF0dXNfd3JhcHBlcl0gIT0gIjAiIFwKKwkgJiYgIVtpbmZvIGV4aXN0cyBnbHVlZmlsZV0gfSB7CisJc2V0IHNhdmVkX3dyYXBfY29tcGlsZV9mbGFncyBbdGFyZ2V0X2luZm8gd3JhcF9jb21waWxlX2ZsYWdzXQorCXNldCBmbGFncyBbam9pbiAkYXJncyAiICJdCisJIyBUaGUgd3JhcHBlciBjb2RlIG1heSBjb250YWluIGNvZGUgdGhhdCBnY2Mgb2JqZWN0cyBvbi4gIFRoaXMKKwkjIGJlY2FtZSB0cnVlIGZvciBkZWphZ251LTEuNC40LiAgVGhlIHNldCBvZiB3YXJuaW5ncyBhbmQgY29kZQorCSMgdGhhdCBnY2Mgb2JqZWN0cyBvbiBtYXkgY2hhbmdlLCBzbyBqdXN0IG1ha2Ugc3VyZSAtdyBpcyBhbHdheXMKKwkjIHBhc3NlZCB0byB0dXJuIG9mZiBhbGwgd2FybmluZ3MuCisJc2V0X2N1cnJ0YXJnZXRfaW5mbyB3cmFwX2NvbXBpbGVfZmxhZ3MgXAorCSAgICAiJHNhdmVkX3dyYXBfY29tcGlsZV9mbGFncyAtdyAkZmxhZ3MiCisJc2V0IHJlc3VsdCBbYnVpbGRfd3JhcHBlciAkZmlsZW5hbWVdCisJc2V0X2N1cnJ0YXJnZXRfaW5mbyB3cmFwX2NvbXBpbGVfZmxhZ3MgIiRzYXZlZF93cmFwX2NvbXBpbGVfZmxhZ3MiCisJaWYgeyAkcmVzdWx0ICE9ICIiIH0geworCSAgICBzZXQgZ2x1ZWZpbGUgW2xpbmRleCAkcmVzdWx0IDBdCisJICAgIHNldCB3cmFwX2ZsYWdzIFtsaW5kZXggJHJlc3VsdCAxXQorCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTk4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cApAQCAtMCwwICsxLDM2IEBACisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgbGliZmZpIHRlc3RzdWl0ZSB0aGF0IHVzZXMgdGhlICdkZy5leHAnIGRyaXZlci4KKworbG9hZF9saWIgbGliZmZpLWRnLmV4cAorCitkZy1pbml0CitsaWJmZmktaW5pdAorCitnbG9iYWwgc3JjZGlyIHN1YmRpcgorCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiLU8wIC1XIC1XYWxsIiAiIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIi1PMiIgIiIKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICItTzMiICIiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiLU9zIiAiIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIi1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciIgIiIKKworZGctZmluaXNoCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyB0Y2wtaW5kZW50LWxldmVsOjQKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3OWZmNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMKQEAgLTAsMCArMSw4OSBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBtdWx0aXBsZSB2YWx1ZXMgcGFzc2luZyBmcm9tIGRpZmZlcmVudCB0eXBlLgorCQlBbHNvLCBleGNlZWQgdGhlIGxpbWl0IG9mIGdwciBhbmQgZnByIHJlZ2lzdGVycyBvbiBQb3dlclBDCisJCURhcndpbi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworCisKKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQKK2Nsb3N1cmVfdGVzdF9mbjAoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgdm9pZCogdXNlcmRhdGEpCit7CisgICooZmZpX2FyZyopcmVzcCA9CisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMF0gKyAoaW50KSgqKGludCAqKWFyZ3NbMV0pICsKKyAgICAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMl0pICsgKGludCkqKGludCAqKWFyZ3NbM10gKworICAgIChpbnQpKCooc2lnbmVkIHNob3J0ICopYXJnc1s0XSkgKworICAgIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s1XSkgKworICAgIChpbnQpKihpbnQgKilhcmdzWzZdICsgKGludCkoKihpbnQgKilhcmdzWzddKSArCisgICAgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSArIChpbnQpKihpbnQgKilhcmdzWzldICsKKyAgICAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSArIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSkgKworICAgIChpbnQpKihpbnQgKilhcmdzWzEyXSArIChpbnQpKCooaW50ICopYXJnc1sxM10pICsKKyAgICAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSArICAqKGludCAqKWFyZ3NbMTVdICsgKGludHB0cl90KXVzZXJkYXRhOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSwgKGludCkoKihpbnQgKilhcmdzWzFdKSwKKwkgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzJdKSwKKwkgKGludCkqKGludCAqKWFyZ3NbM10sIChpbnQpKCooc2lnbmVkIHNob3J0ICopYXJnc1s0XSksCisJIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s1XSksCisJIChpbnQpKihpbnQgKilhcmdzWzZdLCAoaW50KSgqKGludCAqKWFyZ3NbN10pLAorCSAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pLCAoaW50KSooaW50ICopYXJnc1s5XSwKKwkgKGludCkoKihpbnQgKilhcmdzWzEwXSksIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSksCisJIChpbnQpKihpbnQgKilhcmdzWzEyXSwgKGludCkoKihpbnQgKilhcmdzWzEzXSksCisJIChpbnQpKCooaW50ICopYXJnc1sxNF0pLCooaW50ICopYXJnc1sxNV0sCisJIChpbnQpKGludHB0cl90KXVzZXJkYXRhLCAoaW50KSooZmZpX2FyZyAqKXJlc3ApOworCit9CisKK3R5cGVkZWYgaW50ICgqY2xvc3VyZV90ZXN0X3R5cGUwKSh1bnNpZ25lZCBsb25nIGxvbmcsIGludCwgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgaW50LCBzaWduZWQgc2hvcnQsIHVuc2lnbmVkIGxvbmcgbG9uZywgaW50LAorCQkJCSAgaW50LCBkb3VibGUsIGludCwgaW50LCBmbG9hdCwgaW50LCBpbnQsCisJCQkJICBpbnQsIGludCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqIGNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKyAgaW50IHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xfYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1s0XSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgIGNsX2FyZ190eXBlc1s1XSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1s2XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbN10gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzhdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzldID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzExXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzEyXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTNdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE1XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTZdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTYsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9mbjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsb3N1cmVfdGVzdF90eXBlMCljb2RlKSkKKyAgICAoMUxMLCAyLCAzTEwsIDQsIDEyNywgNDI5TEwsIDcsIDgsIDkuNSwgMTAsIDExLCAxMiwgMTMsCisgICAgIDE5LCAyMSwgMSk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDEyNyA0MjkgNyA4IDkgMTAgMTEgMTIgMTMgMTkgMjEgMSAzOiA2ODAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNjgwIiB9ICovCisgICAgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTIzMTczCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYwpAQCAtMCwwICsxLDgxIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwuCisgICBQdXJwb3NlOglDaGVjayBtdWx0aXBsZSB2YWx1ZXMgcGFzc2luZyBmcm9tIGRpZmZlcmVudCB0eXBlLgorCQlBbHNvLCBleGNlZWQgdGhlIGxpbWl0IG9mIGdwciBhbmQgZnByIHJlZ2lzdGVycyBvbiBQb3dlclBDCisJCURhcndpbi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworCitzdGF0aWMgdm9pZCBjbG9zdXJlX3Rlc3RfZm4xKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgdm9pZCogdXNlcmRhdGEpCit7CisgICooZmZpX2FyZyopcmVzcCA9CisgICAgKGludCkqKGZsb2F0ICopYXJnc1swXSArKGludCkoKihmbG9hdCAqKWFyZ3NbMV0pICsKKyAgICAoaW50KSgqKGZsb2F0ICopYXJnc1syXSkgKyAoaW50KSooZmxvYXQgKilhcmdzWzNdICsKKyAgICAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbNV0pICsKKyAgICAoaW50KSooZmxvYXQgKilhcmdzWzZdICsgKGludCkoKihpbnQgKilhcmdzWzddKSArCisgICAgKGludCkoKihkb3VibGUqKWFyZ3NbOF0pICsgKGludCkqKGludCAqKWFyZ3NbOV0gKworICAgIChpbnQpKCooaW50ICopYXJnc1sxMF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSArCisgICAgKGludCkqKGludCAqKWFyZ3NbMTJdICsgKGludCkoKihpbnQgKilhcmdzWzEzXSkgKworICAgIChpbnQpKCooaW50ICopYXJnc1sxNF0pICsgKihpbnQgKilhcmdzWzE1XSArIChpbnRwdHJfdCl1c2VyZGF0YTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkOiAlZFxuIiwKKwkgKGludCkqKGZsb2F0ICopYXJnc1swXSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMV0pLAorCSAoaW50KSgqKGZsb2F0ICopYXJnc1syXSksIChpbnQpKihmbG9hdCAqKWFyZ3NbM10sCisJIChpbnQpKCooc2lnbmVkIHNob3J0ICopYXJnc1s0XSksIChpbnQpKCooZmxvYXQgKilhcmdzWzVdKSwKKwkgKGludCkqKGZsb2F0ICopYXJnc1s2XSwgKGludCkoKihpbnQgKilhcmdzWzddKSwKKwkgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSwgKGludCkqKGludCAqKWFyZ3NbOV0sCisJIChpbnQpKCooaW50ICopYXJnc1sxMF0pLCAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pLAorCSAoaW50KSooaW50ICopYXJnc1sxMl0sIChpbnQpKCooaW50ICopYXJnc1sxM10pLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSwgKihpbnQgKilhcmdzWzE1XSwKKwkgKGludCkoaW50cHRyX3QpdXNlcmRhdGEsIChpbnQpKihmZmlfYXJnICopcmVzcCk7Cit9CisKK3R5cGVkZWYgaW50ICgqY2xvc3VyZV90ZXN0X3R5cGUxKShmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgc2lnbmVkIHNob3J0LAorCQkJCSAgZmxvYXQsIGZsb2F0LCBpbnQsIGRvdWJsZSwgaW50LCBpbnQsIGZsb2F0LAorCQkJCSAgaW50LCBpbnQsIGludCwgaW50KTsKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOworICBpbnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzRdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzVdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbNl0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1s3XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbOF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbOV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEwXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMTJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxM10gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE0XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTVdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxNiwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X2ZuMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsb3N1cmVfdGVzdF90eXBlMSljb2RlKSkKKyAgICAoMS4xLCAyLjIsIDMuMywgNC40LCAxMjcsIDUuNSwgNi42LCA4LCA5LCAxMCwgMTEsIDEyLjAsIDEzLAorICAgICAxOSwgMjEsIDEpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCAxMjcgNSA2IDggOSAxMCAxMSAxMiAxMyAxOSAyMSAxIDM6IDI1NSIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyNTUiIH0gKi8KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZmY5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jCkBAIC0wLDAgKzEsODEgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgbXVsdGlwbGUgdmFsdWVzIHBhc3NpbmcgZnJvbSBkaWZmZXJlbnQgdHlwZS4KKwkJQWxzbywgZXhjZWVkIHRoZSBsaW1pdCBvZiBncHIgYW5kIGZwciByZWdpc3RlcnMgb24gUG93ZXJQQworCQlEYXJ3aW4uCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsb3N1cmVfdGVzdF9mbjIoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgICB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgKihmZmlfYXJnKilyZXNwID0KKyAgICAoaW50KSooZG91YmxlICopYXJnc1swXSArKGludCkoKihkb3VibGUgKilhcmdzWzFdKSArCisgICAgKGludCkoKihkb3VibGUgKilhcmdzWzJdKSArIChpbnQpKihkb3VibGUgKilhcmdzWzNdICsKKyAgICAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pICsgKGludCkoKihkb3VibGUgKilhcmdzWzVdKSArCisgICAgKGludCkqKGRvdWJsZSAqKWFyZ3NbNl0gKyAoaW50KSgqKGludCAqKWFyZ3NbN10pICsKKyAgICAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pICsgKGludCkqKGludCAqKWFyZ3NbOV0gKworICAgIChpbnQpKCooaW50ICopYXJnc1sxMF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSArCisgICAgKGludCkqKGludCAqKWFyZ3NbMTJdICsgKGludCkoKihmbG9hdCAqKWFyZ3NbMTNdKSArCisgICAgKGludCkoKihpbnQgKilhcmdzWzE0XSkgKyAqKGludCAqKWFyZ3NbMTVdICsgKGludHB0cl90KXVzZXJkYXRhOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAoaW50KSooZG91YmxlICopYXJnc1swXSwgKGludCkoKihkb3VibGUgKilhcmdzWzFdKSwKKwkgKGludCkoKihkb3VibGUgKilhcmdzWzJdKSwgKGludCkqKGRvdWJsZSAqKWFyZ3NbM10sCisJIChpbnQpKCooc2lnbmVkIHNob3J0ICopYXJnc1s0XSksIChpbnQpKCooZG91YmxlICopYXJnc1s1XSksCisJIChpbnQpKihkb3VibGUgKilhcmdzWzZdLCAoaW50KSgqKGludCAqKWFyZ3NbN10pLAorCSAoaW50KSgqKGRvdWJsZSopYXJnc1s4XSksIChpbnQpKihpbnQgKilhcmdzWzldLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSwKKwkgKGludCkqKGludCAqKWFyZ3NbMTJdLCAoaW50KSgqKGZsb2F0ICopYXJnc1sxM10pLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSwgKihpbnQgKilhcmdzWzE1XSwgKGludCkoaW50cHRyX3QpdXNlcmRhdGEsCisJIChpbnQpKihmZmlfYXJnICopcmVzcCk7Cit9CisKK3R5cGVkZWYgaW50ICgqY2xvc3VyZV90ZXN0X3R5cGUyKShkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIHNpZ25lZCBzaG9ydCwKKwkJCQkgIGRvdWJsZSwgZG91YmxlLCBpbnQsIGRvdWJsZSwgaW50LCBpbnQsIGZsb2F0LAorCQkJCSAgaW50LCBmbG9hdCwgaW50LCBpbnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKyAgaW50IHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbNF0gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbF9hcmdfdHlwZXNbNV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbNl0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbN10gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzhdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzldID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzExXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzEyXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTNdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMTRdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE2XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDE2LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfZm4yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbG9zdXJlX3Rlc3RfdHlwZTIpY29kZSkpCisgICAgKDEsIDIsIDMsIDQsIDEyNywgNSwgNiwgOCwgOSwgMTAsIDExLCAxMi4wLCAxMywKKyAgICAgMTkuMCwgMjEsIDEpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCAxMjcgNSA2IDggOSAxMCAxMSAxMiAxMyAxOSAyMSAxIDM6IDI1NSIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyNTUiIH0gKi8KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNTRkODAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jCkBAIC0wLDAgKzEsODIgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgbXVsdGlwbGUgdmFsdWVzIHBhc3NpbmcgZnJvbSBkaWZmZXJlbnQgdHlwZS4KKwkJQWxzbywgZXhjZWVkIHRoZSBsaW1pdCBvZiBncHIgYW5kIGZwciByZWdpc3RlcnMgb24gUG93ZXJQQworCQlEYXJ3aW4uCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsb3N1cmVfdGVzdF9mbjMoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgICB2b2lkKiB1c2VyZGF0YSkKKyB7CisgICAqKGZmaV9hcmcqKXJlc3AgPQorICAgICAoaW50KSooZmxvYXQgKilhcmdzWzBdICsoaW50KSgqKGZsb2F0ICopYXJnc1sxXSkgKworICAgICAoaW50KSgqKGZsb2F0ICopYXJnc1syXSkgKyAoaW50KSooZmxvYXQgKilhcmdzWzNdICsKKyAgICAgKGludCkoKihmbG9hdCAqKWFyZ3NbNF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbNV0pICsKKyAgICAgKGludCkqKGZsb2F0ICopYXJnc1s2XSArIChpbnQpKCooZmxvYXQgKilhcmdzWzddKSArCisgICAgIChpbnQpKCooZG91YmxlICopYXJnc1s4XSkgKyAoaW50KSooaW50ICopYXJnc1s5XSArCisgICAgIChpbnQpKCooZmxvYXQgKilhcmdzWzEwXSkgKyAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pICsKKyAgICAgKGludCkqKGludCAqKWFyZ3NbMTJdICsgKGludCkoKihmbG9hdCAqKWFyZ3NbMTNdKSArCisgICAgIChpbnQpKCooZmxvYXQgKilhcmdzWzE0XSkgKyAgKihpbnQgKilhcmdzWzE1XSArIChpbnRwdHJfdCl1c2VyZGF0YTsKKworICAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWRcbiIsCisJICAoaW50KSooZmxvYXQgKilhcmdzWzBdLCAoaW50KSgqKGZsb2F0ICopYXJnc1sxXSksCisJICAoaW50KSgqKGZsb2F0ICopYXJnc1syXSksIChpbnQpKihmbG9hdCAqKWFyZ3NbM10sCisJICAoaW50KSgqKGZsb2F0ICopYXJnc1s0XSksIChpbnQpKCooZmxvYXQgKilhcmdzWzVdKSwKKwkgIChpbnQpKihmbG9hdCAqKWFyZ3NbNl0sIChpbnQpKCooZmxvYXQgKilhcmdzWzddKSwKKwkgIChpbnQpKCooZG91YmxlICopYXJnc1s4XSksIChpbnQpKihpbnQgKilhcmdzWzldLAorCSAgKGludCkoKihmbG9hdCAqKWFyZ3NbMTBdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSwKKwkgIChpbnQpKihpbnQgKilhcmdzWzEyXSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMTNdKSwKKwkgIChpbnQpKCooZmxvYXQgKilhcmdzWzE0XSksICooaW50ICopYXJnc1sxNV0sIChpbnQpKGludHB0cl90KXVzZXJkYXRhLAorCSAgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKKworIH0KKwordHlwZWRlZiBpbnQgKCpjbG9zdXJlX3Rlc3RfdHlwZTMpKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsCisJCQkJICBmbG9hdCwgZmxvYXQsIGRvdWJsZSwgaW50LCBmbG9hdCwgZmxvYXQsIGludCwKKwkJCQkgIGZsb2F0LCBmbG9hdCwgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisgIGludCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbNF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1s1XSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzZdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbN10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s5XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTBdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMTFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMTJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxM10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxNF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxNV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE2XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDE2LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfZm4zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xvc3VyZV90ZXN0X3R5cGUzKWNvZGUpKQorICAgICgxLjEsIDIuMiwgMy4zLCA0LjQsIDUuNSwgNi42LCA3LjcsIDguOCwgOSwgMTAsIDExLjExLCAxMi4wLCAxMywKKyAgICAgMTkuMTksIDIxLjIxLCAxKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE5IDIxIDEgMzogMTM1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzNSIgfSAqLworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhMTUzMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMKQEAgLTAsMCArMSw4OSBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBtdWx0aXBsZSBsb25nIGxvbmcgdmFsdWVzIHBhc3NpbmcuCisJCUFsc28sIGV4Y2VlZCB0aGUgbGltaXQgb2YgZ3ByIGFuZCBmcHIgcmVnaXN0ZXJzIG9uIFBvd2VyUEMKKwkJRGFyd2luLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMxMDI2CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkCitjbG9zdXJlX3Rlc3RfZm4wKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJIHZvaWQqIHVzZXJkYXRhKQoreworICAqKGZmaV9hcmcqKXJlc3AgPQorICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdICsgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMV0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzJdICsgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbM10gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzRdICsgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNV0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzZdICsgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbN10gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzhdICsgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbOV0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzEwXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTFdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxMl0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzEzXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTRdICsKKyAgICAqKGludCAqKWFyZ3NbMTVdICsgKGludHB0cl90KXVzZXJkYXRhOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMV0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzJdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1szXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNF0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzVdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s2XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbN10sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzhdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s5XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTBdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxMV0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzEyXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTNdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxNF0sCisJICooaW50ICopYXJnc1sxNV0sCisJIChpbnQpKGludHB0cl90KXVzZXJkYXRhLCAoaW50KSooZmZpX2FyZyAqKXJlc3ApOworCit9CisKK3R5cGVkZWYgaW50ICgqY2xvc3VyZV90ZXN0X3R5cGUwKSh1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisgIGludCBpLCByZXM7CisKKyAgZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKyAgICBjbF9hcmdfdHlwZXNbaV0gPSAmZmZpX3R5cGVfdWludDY0OworICB9CisgIGNsX2FyZ190eXBlc1sxNV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE2XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDE2LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfZm4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbG9zdXJlX3Rlc3RfdHlwZTApY29kZSkpCisgICAgKDFMTCwgMkxMLCAzTEwsIDRMTCwgMTI3TEwsIDQyOUxMLCA3TEwsIDhMTCwgOUxMLCAxMExMLCAxMUxMLCAxMkxMLAorICAgICAxM0xMLCAxOUxMLCAyMUxMLCAxKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgMTI3IDQyOSA3IDggOSAxMCAxMSAxMiAxMyAxOSAyMSAxIDM6IDY4MCIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA2ODAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwNzQ0MgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMKQEAgLTAsMCArMSw5MiBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBtdWx0aXBsZSBsb25nIGxvbmcgdmFsdWVzIHBhc3NpbmcuCisJCUV4Y2VlZCB0aGUgbGltaXQgb2YgZ3ByIHJlZ2lzdGVycyBvbiBQb3dlclBDCisJCURhcndpbi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTAyNgkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQKK2Nsb3N1cmVfdGVzdF9mbjUoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgdm9pZCogdXNlcmRhdGEpCit7CisgICooZmZpX2FyZyopcmVzcCA9CisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMF0gKyAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMl0gKyAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1szXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNF0gKyAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s1XSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNl0gKyAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s3XSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbOF0gKyAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s5XSArCisgICAgKGludCkqKGludCAqKWFyZ3NbMTBdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxMV0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzEyXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTNdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxNF0gKworICAgICooaW50ICopYXJnc1sxNV0gKyAoaW50cHRyX3QpdXNlcmRhdGE7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWRcbiIsCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMl0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzNdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s0XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNV0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzZdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s3XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbOF0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzldLAorCSAoaW50KSooaW50ICopYXJnc1sxMF0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzExXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTJdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxM10sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzE0XSwKKwkgKihpbnQgKilhcmdzWzE1XSwKKwkgKGludCkoaW50cHRyX3QpdXNlcmRhdGEsIChpbnQpKihmZmlfYXJnICopcmVzcCk7CisKK30KKwordHlwZWRlZiBpbnQgKCpjbG9zdXJlX3Rlc3RfdHlwZTApKHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICBpbnQsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCBpbnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKyAgaW50IGksIHJlczsKKworICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgIGNsX2FyZ190eXBlc1tpXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIH0KKyAgY2xfYXJnX3R5cGVzWzEwXSA9ICZmZmlfdHlwZV9zaW50OworICBmb3IgKGkgPSAxMTsgaSA8IDE1OyBpKyspIHsKKyAgICBjbF9hcmdfdHlwZXNbaV0gPSAmZmZpX3R5cGVfdWludDY0OworICB9CisgIGNsX2FyZ190eXBlc1sxNV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE2XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDE2LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfZm41LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbG9zdXJlX3Rlc3RfdHlwZTApY29kZSkpCisgICAgKDFMTCwgMkxMLCAzTEwsIDRMTCwgMTI3TEwsIDQyOUxMLCA3TEwsIDhMTCwgOUxMLCAxMExMLCAxMSwgMTJMTCwKKyAgICAgMTNMTCwgMTlMTCwgMjFMTCwgMSk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDEyNyA0MjkgNyA4IDkgMTAgMTEgMTIgMTMgMTkgMjEgMSAzOiA2ODAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNjgwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYzU0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgbXVsdGlwbGUgdmFsdWVzIHBhc3NpbmcgZnJvbSBkaWZmZXJlbnQgdHlwZS4KKwkJQWxzbywgZXhjZWVkIHRoZSBsaW1pdCBvZiBncHIgYW5kIGZwciByZWdpc3RlcnMgb24gUG93ZXJQQy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlQUjIzNDA0CisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwODMwCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xvc3VyZV90ZXN0X2ZuMChmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgKihmZmlfYXJnKilyZXNwID0KKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSArCisgICAgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzFdKSArCisgICAgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzJdKSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbM10gKworICAgIChpbnQpKCooaW50ICopYXJnc1s0XSkgKyAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbNV0pICsKKyAgICAoaW50KSooZG91YmxlICopYXJnc1s2XSArIChpbnQpKCooZmxvYXQgKilhcmdzWzddKSArCisgICAgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSArIChpbnQpKihkb3VibGUgKilhcmdzWzldICsKKyAgICAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSArIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSkgKworICAgIChpbnQpKihpbnQgKilhcmdzWzEyXSArIChpbnQpKCooaW50ICopYXJnc1sxM10pICsKKyAgICAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbMTRdKSArICAoaW50KSooZG91YmxlICopYXJnc1sxNV0gKworICAgIChpbnRwdHJfdCl1c2VyZGF0YTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkOiAlZFxuIiwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAgKilhcmdzWzBdLAorCSAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAgKilhcmdzWzFdKSwKKwkgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgICopYXJnc1syXSksCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgICopYXJnc1szXSwKKwkgKGludCkoKihpbnQgKilhcmdzWzRdKSwgKGludCkoKihkb3VibGUgKilhcmdzWzVdKSwKKwkgKGludCkqKGRvdWJsZSAqKWFyZ3NbNl0sIChpbnQpKCooZmxvYXQgKilhcmdzWzddKSwKKwkgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSwgKGludCkqKGRvdWJsZSAqKWFyZ3NbOV0sCisJIChpbnQpKCooaW50ICopYXJnc1sxMF0pLCAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pLAorCSAoaW50KSooaW50ICopYXJnc1sxMl0sIChpbnQpKCooaW50ICopYXJnc1sxM10pLAorCSAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbMTRdKSwgKGludCkoKihkb3VibGUgKilhcmdzWzE1XSksCisJIChpbnQpKGludHB0cl90KXVzZXJkYXRhLCAoaW50KSooZmZpX2FyZyAqKXJlc3ApOworCit9CisKK3R5cGVkZWYgaW50ICgqY2xvc3VyZV90ZXN0X3R5cGUwKSh1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICBpbnQsIGRvdWJsZSwgZG91YmxlLCBmbG9hdCwgZG91YmxlLCBkb3VibGUsCisJCQkJICBpbnQsIGZsb2F0LCBpbnQsIGludCwgZG91YmxlLCBkb3VibGUpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKyAgaW50IHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbNF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzVdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzZdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzddID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbOF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbOV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbMTBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEzXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTRdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzE1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1sxNl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxNiwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X2ZuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xvc3VyZV90ZXN0X3R5cGUwKWNvZGUpKQorICAgICgxLCAyLCAzLCA0LCAxMjcsIDQyOS4sIDcuLCA4LiwgOS41LCAxMC4sIDExLCAxMi4sIDEzLAorICAgICAxOSwgMjEuLCAxLik7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDEyNyA0MjkgNyA4IDkgMTAgMTEgMTIgMTMgMTkgMjEgMSAzOiA2ODAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNjgwIiB9ICovCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWZhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYwpAQCAtMCwwICsxLDk1IEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIG11bHRpcGxlIHZhbHVlcyBwYXNzaW5nIGZyb20gZGlmZmVyZW50IHR5cGUuCisJCUFsc28sIGV4Y2VlZCB0aGUgbGltaXQgb2YgZ3ByIGFuZCBmcHIgcmVnaXN0ZXJzIG9uIFBvd2VyUEMKKwkJRGFyd2luLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisKKworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xvc3VyZV9sb2NfdGVzdF9mbjAoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgdm9pZCogdXNlcmRhdGEpCit7CisgICooZmZpX2FyZyopcmVzcCA9CisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMF0gKyAoaW50KSgqKGludCAqKWFyZ3NbMV0pICsKKyAgICAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMl0pICsgKGludCkqKGludCAqKWFyZ3NbM10gKworICAgIChpbnQpKCooc2lnbmVkIHNob3J0ICopYXJnc1s0XSkgKworICAgIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s1XSkgKworICAgIChpbnQpKihpbnQgKilhcmdzWzZdICsgKGludCkoKihpbnQgKilhcmdzWzddKSArCisgICAgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSArIChpbnQpKihpbnQgKilhcmdzWzldICsKKyAgICAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSArIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSkgKworICAgIChpbnQpKihpbnQgKilhcmdzWzEyXSArIChpbnQpKCooaW50ICopYXJnc1sxM10pICsKKyAgICAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSArICAqKGludCAqKWFyZ3NbMTVdICsgKGludHB0cl90KXVzZXJkYXRhOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSwgKGludCkoKihpbnQgKilhcmdzWzFdKSwKKwkgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzJdKSwKKwkgKGludCkqKGludCAqKWFyZ3NbM10sIChpbnQpKCooc2lnbmVkIHNob3J0ICopYXJnc1s0XSksCisJIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s1XSksCisJIChpbnQpKihpbnQgKilhcmdzWzZdLCAoaW50KSgqKGludCAqKWFyZ3NbN10pLAorCSAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pLCAoaW50KSooaW50ICopYXJnc1s5XSwKKwkgKGludCkoKihpbnQgKilhcmdzWzEwXSksIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSksCisJIChpbnQpKihpbnQgKilhcmdzWzEyXSwgKGludCkoKihpbnQgKilhcmdzWzEzXSksCisJIChpbnQpKCooaW50ICopYXJnc1sxNF0pLCooaW50ICopYXJnc1sxNV0sCisJIChpbnQpKGludHB0cl90KXVzZXJkYXRhLCAoaW50KSooZmZpX2FyZyAqKXJlc3ApOworCit9CisKK3R5cGVkZWYgaW50ICgqY2xvc3VyZV9sb2NfdGVzdF90eXBlMCkodW5zaWduZWQgbG9uZyBsb25nLCBpbnQsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIGludCwgc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBsb25nIGxvbmcsIGludCwKKwkJCQkgIGludCwgZG91YmxlLCBpbnQsIGludCwgZmxvYXQsIGludCwgaW50LAorCQkJCSAgaW50LCBpbnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV9jbG9zdXJlICpwY2w7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKyAgaW50IHJlczsKKyAgdm9pZCAqY29kZWxvYzsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xfYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1s0XSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgIGNsX2FyZ190eXBlc1s1XSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1s2XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbN10gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzhdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzldID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzExXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzEyXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTNdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE1XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTZdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTYsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZWxvYyk7CisgIENIRUNLKHBjbCAhPSBOVUxMKTsKKyAgQ0hFQ0soY29kZWxvYyAhPSBOVUxMKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfbG9jX3Rlc3RfZm4wLAorCQkJICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGVsb2MpID09IEZGSV9PSyk7CisgIAorICBDSEVDSyhtZW1jbXAocGNsLCBjb2RlbG9jLCBzaXplb2YoKnBjbCkpID09IDApOworCisgIHJlcyA9ICgqKChjbG9zdXJlX2xvY190ZXN0X3R5cGUwKWNvZGVsb2MpKQorICAgICgxTEwsIDIsIDNMTCwgNCwgMTI3LCA0MjlMTCwgNywgOCwgOS41LCAxMCwgMTEsIDEyLCAxMywKKyAgICAgMTksIDIxLCAxKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgMTI3IDQyOSA3IDggOSAxMCAxMSAxMiAxMyAxOSAyMSAxIDM6IDY4MCIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA2ODAiIH0gKi8KKyAgICAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmY2MxZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbCAoc3RkY2FsbCBjb252ZW50aW9uKQorICAgUHVycG9zZToJQ2hlY2sgaGFuZGxpbmcgd2hlbiBjYWxsZXIgZXhwZWN0cyBzdGRjYWxsIGNhbGxlZQorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8dHdhbGxqYXZhQGRldi5qYXZhLm5ldD4gKi8KKworLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkCitjbG9zdXJlX3Rlc3Rfc3RkY2FsbChmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgKihmZmlfYXJnKilyZXNwID0KKyAgICAoaW50KSooaW50ICopYXJnc1swXSArIChpbnQpKCooaW50ICopYXJnc1sxXSkKKyAgICArIChpbnQpKCooaW50ICopYXJnc1syXSkgICsgKGludCkoKihpbnQgKilhcmdzWzNdKQorICAgICsgKGludCkoaW50cHRyX3QpdXNlcmRhdGE7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWRcbiIsCisJIChpbnQpKihpbnQgKilhcmdzWzBdLCAoaW50KSgqKGludCAqKWFyZ3NbMV0pLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMl0pLCAoaW50KSgqKGludCAqKWFyZ3NbM10pLAorICAgICAgICAgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKKworfQorCit0eXBlZGVmIGludCAoX19zdGRjYWxsICpjbG9zdXJlX3Rlc3RfdHlwZTApKGludCwgaW50LCBpbnQsIGludCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOworICBpbnQgcmVzOworICB2b2lkKiBzcF9wcmU7CisgIHZvaWQqIHNwX3Bvc3Q7CisgIGNoYXIgYnVmWzEwMjRdOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91aW50OworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfdWludDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VpbnQ7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV91aW50OworICBjbF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX1NURENBTEwsIDQsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9zdGRjYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSA9PSBGRklfT0spOworCisgIGFzbSB2b2xhdGlsZSAoIiBtb3ZsICUlZXNwLCUwIiA6ICI9ZyIgKHNwX3ByZSkpOworICByZXMgPSAoKihjbG9zdXJlX3Rlc3RfdHlwZTApY29kZSkoMCwgMSwgMiwgMyk7CisgIGFzbSB2b2xhdGlsZSAoIiBtb3ZsICUlZXNwLCUwIiA6ICI9ZyIgKHNwX3Bvc3QpKTsKKyAgLyogeyBkZy1vdXRwdXQgIjAgMSAyIDM6IDkiIH0gKi8KKworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA5IiB9ICovCisKKyAgc3ByaW50ZihidWYsICJtaXNtYXRjaDogcHJlPSVwIHZzIHBvc3Q9JXAiLCBzcF9wcmUsIHNwX3Bvc3QpOworICBwcmludGYoInN0YWNrIHBvaW50ZXIgJXNcbiIsIChzcF9wcmUgPT0gc3BfcG9zdCA/ICJtYXRjaCIgOiBidWYpKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuc3RhY2sgcG9pbnRlciBtYXRjaCIgfSAqLworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYTMzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMKQEAgLTAsMCArMSw5NCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMTJieXRlIHsKKyAgaW50IGE7CisgIGludCBiOworICBpbnQgYzsKK30gY2xzX3N0cnVjdF8xMmJ5dGU7CisKK2Nsc19zdHJ1Y3RfMTJieXRlIGNsc19zdHJ1Y3RfMTJieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzEyYnl0ZSBiMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8xMmJ5dGUgYjIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzEyYnl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBiMS5hICsgYjIuYTsKKyAgcmVzdWx0LmIgPSBiMS5iICsgYjIuYjsKKyAgcmVzdWx0LmMgPSBiMS5jICsgYjIuYzsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgYjEuYSwgYjEuYiwgYjEuYywgYjIuYSwgYjIuYiwgYjIuYywKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY2xzX3N0cnVjdF8xMmJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsCisJCQkJIHZvaWQqKiBhcmdzICwgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTJieXRlIGIxLCBiMjsKKworICBiMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMTJieXRlKikoYXJnc1swXSk7CisgIGIyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xMmJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfMTJieXRlKilyZXNwID0gY2xzX3N0cnVjdF8xMmJ5dGVfZm4oYjEsIGIyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xMmJ5dGUgaF9kYmwgPSB7IDcsIDQsIDkgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTJieXRlIGpfZGJsID0geyAxLCA1LCAzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzEyYnl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZoX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmal9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8xMmJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiNyA0IDkgMSA1IDM6IDggOSAxMiIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDggOSAxMiIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8xMmJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibC5hID0gMDsKKyAgcmVzX2RibC5iID0gMDsKKyAgcmVzX2RibC5jID0gMDsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzEyYnl0ZSgqKShjbHNfc3RydWN0XzEyYnl0ZSwgY2xzX3N0cnVjdF8xMmJ5dGUpKShjb2RlKSkoaF9kYmwsIGpfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuNyA0IDkgMSA1IDM6IDggOSAxMiIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDggOSAxMiIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI5MjkyYQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYwpAQCAtMCwwICsxLDk1IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZSB7CisgIGludCBhOworICBkb3VibGUgYjsKKyAgaW50IGM7Cit9IGNsc19zdHJ1Y3RfMTZieXRlOworCitjbHNfc3RydWN0XzE2Ynl0ZSBjbHNfc3RydWN0XzE2Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUgYjEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlIGIyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYjEuYSArIGIyLmE7CisgIHJlc3VsdC5iID0gYjEuYiArIGIyLmI7CisgIHJlc3VsdC5jID0gYjEuYyArIGIyLmM7CisKKyAgcHJpbnRmKCIlZCAlZyAlZCAlZCAlZyAlZDogJWQgJWcgJWRcbiIsIGIxLmEsIGIxLmIsIGIxLmMsIGIyLmEsIGIyLmIsIGIyLmMsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsc19zdHJ1Y3RfMTZieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLAorCQkJCSB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlIGIxLCBiMjsKKworICBiMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlKikoYXJnc1swXSk7CisgIGIyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfMTZieXRlKilyZXNwID0gY2xzX3N0cnVjdF8xNmJ5dGVfZm4oYjEsIGIyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUgaF9kYmwgPSB7IDcsIDguMCwgOSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUgal9kYmwgPSB7IDEsIDkuMCwgMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZoX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmal9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8xNmJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiNyA4IDkgMSA5IDM6IDggMTcgMTIiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA4IDE3IDEyIiB9ICovCisKKyAgcmVzX2RibC5hID0gMDsKKyAgcmVzX2RibC5iID0gMC4wOworICByZXNfZGJsLmMgPSAwOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8xNmJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8xNmJ5dGUoKikoY2xzX3N0cnVjdF8xNmJ5dGUsIGNsc19zdHJ1Y3RfMTZieXRlKSkoY29kZSkpKGhfZGJsLCBqX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjcgOCA5IDEgOSAzOiA4IDE3IDEyIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOCAxNyAxMiIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjOGM2ZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYwpAQCAtMCwwICsxLDk2IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIERvdWJsZSBhbGlnbm1lbnQgY2hlY2sgb24gZGFyd2luLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwOTE1CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzE4Ynl0ZSB7CisgIGRvdWJsZSBhOworICB1bnNpZ25lZCBjaGFyIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgZG91YmxlIGQ7Cit9IGNsc19zdHJ1Y3RfMThieXRlOworCitjbHNfc3RydWN0XzE4Ynl0ZSBjbHNfc3RydWN0XzE4Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8xOGJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMThieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOGJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisgIHJlc3VsdC5kID0gYTEuZCArIGEyLmQ7CisKKworICBwcmludGYoIiVnICVkICVkICVnICVnICVkICVkICVnOiAlZyAlZCAlZCAlZ1xuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwKKwkgYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywgcmVzdWx0LmQpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8xOGJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE4Ynl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE4Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMThieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzE4Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMThieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s1XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMThieXRlIGdfZGJsID0geyAxLjAsIDEyNywgMTI2LCAzLjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMThieXRlIGZfZGJsID0geyA0LjAsIDEyNSwgMTI0LCA1LjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMThieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzE4Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDEyNyAxMjYgMyA0IDEyNSAxMjQgNTogNSAyNTIgMjUwIDgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVkICVkICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLCByZXNfZGJsLmQpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgMjUyIDI1MCA4IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzE4Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzE4Ynl0ZSgqKShjbHNfc3RydWN0XzE4Ynl0ZSwgY2xzX3N0cnVjdF8xOGJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSAxMjcgMTI2IDMgNCAxMjUgMTI0IDU6IDUgMjUyIDI1MCA4IiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZCAlZCAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA1IDI1MiAyNTAgOCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2NDI0OAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYwpAQCAtMCwwICsxLDEwMiBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBEb3VibGUgYWxpZ25tZW50IGNoZWNrIG9uIGRhcndpbi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDkxNQkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8xOWJ5dGUgeworICBkb3VibGUgYTsKKyAgdW5zaWduZWQgY2hhciBiOworICB1bnNpZ25lZCBjaGFyIGM7CisgIGRvdWJsZSBkOworICB1bnNpZ25lZCBjaGFyIGU7Cit9IGNsc19zdHJ1Y3RfMTlieXRlOworCitjbHNfc3RydWN0XzE5Ynl0ZSBjbHNfc3RydWN0XzE5Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8xOWJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMTlieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOWJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisgIHJlc3VsdC5kID0gYTEuZCArIGEyLmQ7CisgIHJlc3VsdC5lID0gYTEuZSArIGEyLmU7CisKKworICBwcmludGYoIiVnICVkICVkICVnICVkICVnICVkICVkICVnICVkOiAlZyAlZCAlZCAlZyAlZFxuIiwKKwkgYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwgYTEuZSwKKwkgYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwgYTIuZSwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywgcmVzdWx0LmQsIHJlc3VsdC5lKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfMTlieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOWJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xOWJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE5Ynl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8xOWJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzE5Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNl07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzE5Ynl0ZSBnX2RibCA9IHsgMS4wLCAxMjcsIDEyNiwgMy4wLCAxMjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTlieXRlIGZfZGJsID0geyA0LjAsIDEyNSwgMTI0LCA1LjAsIDExOSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOWJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNV0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzE5Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDEyNyAxMjYgMyAxMjAgNCAxMjUgMTI0IDUgMTE5OiA1IDI1MiAyNTAgOCAyMzkiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVkICVkICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCSByZXNfZGJsLmQsIHJlc19kYmwuZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNSAyNTIgMjUwIDggMjM5IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzE5Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzE5Ynl0ZSgqKShjbHNfc3RydWN0XzE5Ynl0ZSwgY2xzX3N0cnVjdF8xOWJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSAxMjcgMTI2IDMgMTIwIDQgMTI1IDEyNCA1IDExOTogNSAyNTIgMjUwIDggMjM5IiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZCAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgMjUyIDI1MCA4IDIzOSIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTQwMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYwpAQCAtMCwwICsxLDg5IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRXNwZWNpYWxseSB3aXRoIHNtYWxsIHN0cnVjdHVyZXMgd2hpY2ggbWF5IGZpdCBpbiBvbmUKKwkJcmVnaXN0ZXIuIERlcGVuZGluZyBvbiB0aGUgQUJJLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwOTAyCSAqLworCisKKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8xXzFieXRlIHsKKyAgdW5zaWduZWQgY2hhciBhOworfSBjbHNfc3RydWN0XzFfMWJ5dGU7CisKK2Nsc19zdHJ1Y3RfMV8xYnl0ZSBjbHNfc3RydWN0XzFfMWJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMV8xYnl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8xXzFieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xXzFieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworCisgIHByaW50ZigiJWQgJWQ6ICVkXG4iLCBhMS5hLCBhMi5hLCByZXN1bHQuYSk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzFfMWJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzFfMWJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xXzFieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xXzFieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzFfMWJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzFfMWJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzJdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xXzFieXRlIGdfZGJsID0geyAxMiB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xXzFieXRlIGZfZGJsID0geyAxNzggfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMV8xYnl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMV8xYnl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiAxNzg6IDE5MCIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIHJlc19kYmwuYSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTkwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzFfMWJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8xXzFieXRlKCopKGNsc19zdHJ1Y3RfMV8xYnl0ZSwgY2xzX3N0cnVjdF8xXzFieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDE3ODogMTkwIiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgcmVzX2RibC5hKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxOTAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZGQ3YWMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMKQEAgLTAsMCArMSw5MSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgeworICBkb3VibGUgYTsKKyAgZG91YmxlIGI7CisgIGludCBjOworfSBjbHNfc3RydWN0XzIwYnl0ZTsKKworY2xzX3N0cnVjdF8yMGJ5dGUgY2xzX3N0cnVjdF8yMGJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisgIHByaW50ZigiJWcgJWcgJWQgJWcgJWcgJWQ6ICVnICVnICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMi5hLCBhMi5iLCBhMi5jLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfMjBieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8yMGJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzIwYnl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSBnX2RibCA9IHsgMS4wLCAyLjAsIDMgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIGZfZGJsID0geyA0LjAsIDUuMCwgNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzIwYnl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDUgNzogNSA3IDEwIiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNSA3IDEwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzIwYnl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzIwYnl0ZSgqKShjbHNfc3RydWN0XzIwYnl0ZSwgY2xzX3N0cnVjdF8yMGJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSAyIDMgNCA1IDc6IDUgNyAxMCIgfSAqLworICBwcmludGYoInJlczogJWcgJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgNyAxMCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGJjYmJmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYwpAQCAtMCwwICsxLDkzIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisKKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgeworICBpbnQgYTsKKyAgZG91YmxlIGI7CisgIGRvdWJsZSBjOworfSBjbHNfc3RydWN0XzIwYnl0ZTsKKworY2xzX3N0cnVjdF8yMGJ5dGUgY2xzX3N0cnVjdF8yMGJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisgIHByaW50ZigiJWQgJWcgJWcgJWQgJWcgJWc6ICVkICVnICVnXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMi5hLCBhMi5iLCBhMi5jLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfMjBieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8yMGJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzIwYnl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSBnX2RibCA9IHsgMSwgMi4wLCAzLjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIGZfZGJsID0geyA0LCA1LjAsIDcuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzIwYnl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDUgNzogNSA3IDEwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNSA3IDEwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzIwYnl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzIwYnl0ZSgqKShjbHNfc3RydWN0XzIwYnl0ZSwgY2xzX3N0cnVjdF8yMGJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSAyIDMgNCA1IDc6IDUgNyAxMCIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgNyAxMCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhNmViNAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYwpAQCAtMCwwICsxLDExMyBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgeworICBkb3VibGUgYTsKKyAgZG91YmxlIGI7CisgIGludCBjOworICBmbG9hdCBkOworfSBjbHNfc3RydWN0XzI0Ynl0ZTsKKworY2xzX3N0cnVjdF8yNGJ5dGUgY2xzX3N0cnVjdF8yNGJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIGIwLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSBiMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgYjIsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIGIzKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYjAuYSArIGIxLmEgKyBiMi5hICsgYjMuYTsKKyAgcmVzdWx0LmIgPSBiMC5iICsgYjEuYiArIGIyLmIgKyBiMy5iOworICByZXN1bHQuYyA9IGIwLmMgKyBiMS5jICsgYjIuYyArIGIzLmM7CisgIHJlc3VsdC5kID0gYjAuZCArIGIxLmQgKyBiMi5kICsgYjMuZDsKKworICBwcmludGYoIiVnICVnICVkICVnICVnICVnICVkICVnICVnICVnICVkICVnICVnICVnICVkICVnOiAlZyAlZyAlZCAlZ1xuIiwKKwkgYjAuYSwgYjAuYiwgYjAuYywgYjAuZCwKKwkgYjEuYSwgYjEuYiwgYjEuYywgYjEuZCwKKwkgYjIuYSwgYjIuYiwgYjIuYywgYjIuZCwKKwkgYjMuYSwgYjMuYiwgYjMuYywgYjIuZCwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywgcmVzdWx0LmQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzI0Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIGIwLCBiMSwgYjIsIGIzOworCisgIGIwID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSopKGFyZ3NbMV0pOworICBiMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlKikoYXJnc1syXSk7CisgIGIzID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUqKShhcmdzWzNdKTsKKworICAqKGNsc19zdHJ1Y3RfMjRieXRlKilyZXNwID0gY2xzX3N0cnVjdF8yNGJ5dGVfZm4oYjAsIGIxLCBiMiwgYjMpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSBlX2RibCA9IHsgOS4wLCAyLjAsIDYsIDUuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgZl9kYmwgPSB7IDEuMCwgMi4wLCAzLCA3LjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIGdfZGJsID0geyA0LjAsIDUuMCwgNywgOS4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSBoX2RibCA9IHsgOC4wLCA2LjAsIDEsIDQuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzRdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzNdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzNdID0gJmhfZGJsOworICBhcmdzX2RibFs0XSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMjRieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjkgMiA2IDUgMSAyIDMgNyA0IDUgNyA5IDggNiAxIDk6IDIyIDE1IDE3IDI1IiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZyAlZCAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8yNGJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8yNGJ5dGUoKikoY2xzX3N0cnVjdF8yNGJ5dGUsCisJCQkJICAgY2xzX3N0cnVjdF8yNGJ5dGUsCisJCQkJICAgY2xzX3N0cnVjdF8yNGJ5dGUsCisJCQkJICAgY2xzX3N0cnVjdF8yNGJ5dGUpKQorCSAgICAgKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsLCBoX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjkgMiA2IDUgMSAyIDMgNyA0IDUgNyA5IDggNiAxIDk6IDIyIDE1IDE3IDI1IiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZyAlZCAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMWUxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYwpAQCAtMCwwICsxLDkwIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRXNwZWNpYWxseSB3aXRoIHNtYWxsIHN0cnVjdHVyZXMgd2hpY2ggbWF5IGZpdCBpbiBvbmUKKwkJcmVnaXN0ZXIuIERlcGVuZGluZyBvbiB0aGUgQUJJLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzJieXRlIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IGNsc19zdHJ1Y3RfMmJ5dGU7CisKK2Nsc19zdHJ1Y3RfMmJ5dGUgY2xzX3N0cnVjdF8yYnl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8yYnl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8yYnl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMmJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWQgJWRcbiIsIGExLmEsIGExLmIsIGEyLmEsIGEyLmIsIHJlc3VsdC5hLCByZXN1bHQuYik7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzJieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMmJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8yYnl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMmJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfMmJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzJieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMmJ5dGUgZ19kYmwgPSB7IDEyLCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMmJ5dGUgZl9kYmwgPSB7IDEsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzJieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMmJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgMTI3IDEgMTM6IDEzIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfMmJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8yYnl0ZSgqKShjbHNfc3RydWN0XzJieXRlLCBjbHNfc3RydWN0XzJieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDEyNyAxIDEzOiAxMyAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNzgwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlFc3BlY2lhbGx5IHdpdGggc21hbGwgc3RydWN0dXJlcyB3aGljaCBtYXkgZml0IGluIG9uZQorCQlyZWdpc3Rlci4gRGVwZW5kaW5nIG9uIHRoZSBBQkkuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA5MDIJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfM18xYnl0ZSB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdW5zaWduZWQgY2hhciBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfM18xYnl0ZTsKKworY2xzX3N0cnVjdF8zXzFieXRlIGNsc19zdHJ1Y3RfM18xYnl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8zXzFieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzNfMWJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzNfMWJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsCisJIGEyLmEsIGEyLmIsIGEyLmMsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8zXzFieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zXzFieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfM18xYnl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfM18xYnl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8zXzFieXRlKilyZXNwID0gY2xzX3N0cnVjdF8zXzFieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM18xYnl0ZSBnX2RibCA9IHsgMTIsIDEzLCAxNCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zXzFieXRlIGZfZGJsID0geyAxNzgsIDE3OSwgMTgwIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzNfMWJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfM18xYnl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiAxMyAxNCAxNzggMTc5IDE4MDogMTkwIDE5MiAxOTQiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxOTAgMTkyIDE5NCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8zXzFieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfM18xYnl0ZSgqKShjbHNfc3RydWN0XzNfMWJ5dGUsIGNsc19zdHJ1Y3RfM18xYnl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiAxMyAxNCAxNzggMTc5IDE4MDogMTkwIDE5MiAxOTQiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxOTAgMTkyIDE5NCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwNWNlMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYwpAQCAtMCwwICsxLDkwIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRXNwZWNpYWxseSB3aXRoIHNtYWxsIHN0cnVjdHVyZXMgd2hpY2ggbWF5IGZpdCBpbiBvbmUKKwkJcmVnaXN0ZXIuIERlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZSB7CisgIHVuc2lnbmVkIHNob3J0IGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKK30gY2xzX3N0cnVjdF8zYnl0ZTsKKworY2xzX3N0cnVjdF8zYnl0ZSBjbHNfc3RydWN0XzNieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzNieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKworICBwcmludGYoIiVkICVkICVkICVkOiAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTIuYSwgYTIuYiwgcmVzdWx0LmEsIHJlc3VsdC5iKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfM2J5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzNieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8zYnl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfM2J5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZSBnX2RibCA9IHsgMTIsIDExOSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZSBmX2RibCA9IHsgMSwgMTUgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfM2J5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgMTE5IDEgMTU6IDEzIDEzNCIgfSAqLworICBwcmludGYoInJlczogJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxMzQiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfM2J5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8zYnl0ZSgqKShjbHNfc3RydWN0XzNieXRlLCBjbHNfc3RydWN0XzNieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDExOSAxIDE1OiAxMyAxMzQiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTM0IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTc3MGEwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlFc3BlY2lhbGx5IHdpdGggc21hbGwgc3RydWN0dXJlcyB3aGljaCBtYXkgZml0IGluIG9uZQorCQlyZWdpc3Rlci4gRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlXzEgeworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIHNob3J0IGI7Cit9IGNsc19zdHJ1Y3RfM2J5dGVfMTsKKworY2xzX3N0cnVjdF8zYnl0ZV8xIGNsc19zdHJ1Y3RfM2J5dGVfZm4xKHN0cnVjdCBjbHNfc3RydWN0XzNieXRlXzEgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGVfMSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGVfMSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKworICBwcmludGYoIiVkICVkICVkICVkOiAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTIuYSwgYTIuYiwgcmVzdWx0LmEsIHJlc3VsdC5iKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfM2J5dGVfZ24xKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlXzEgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZV8xKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZV8xKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzNieXRlXzEqKXJlc3AgPSBjbHNfc3RydWN0XzNieXRlX2ZuMShhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlXzEgZ19kYmwgPSB7IDE1LCAxMjUgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGVfMSBmX2RibCA9IHsgOSwgMTkgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGVfMSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8zYnl0ZV9mbjEpLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTUgMTI1IDkgMTk6IDI0IDE0NCIgfSAqLworICBwcmludGYoInJlczogJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyNCAxNDQiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfM2J5dGVfZ24xLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfM2J5dGVfMSgqKShjbHNfc3RydWN0XzNieXRlXzEsIGNsc19zdHJ1Y3RfM2J5dGVfMSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xNSAxMjUgOSAxOTogMjQgMTQ0IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDI0IDE0NCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzgwNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYwpAQCAtMCwwICsxLDk4IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRXNwZWNpYWxseSB3aXRoIHNtYWxsIHN0cnVjdHVyZXMgd2hpY2ggbWF5IGZpdCBpbiBvbmUKKwkJcmVnaXN0ZXIuIERlcGVuZGluZyBvbiB0aGUgQUJJLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwOTAyCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzRfMWJ5dGUgeworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKKyAgdW5zaWduZWQgY2hhciBjOworICB1bnNpZ25lZCBjaGFyIGQ7Cit9IGNsc19zdHJ1Y3RfNF8xYnl0ZTsKKworY2xzX3N0cnVjdF80XzFieXRlIGNsc19zdHJ1Y3RfNF8xYnl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF80XzFieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzRfMWJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzRfMWJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisgIHJlc3VsdC5kID0gYTEuZCArIGEyLmQ7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWQgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsIGExLmQsCisJIGEyLmEsIGEyLmIsIGEyLmMsIGEyLmQsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsIHJlc3VsdC5kKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfNF8xYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNF8xYnl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzRfMWJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzRfMWJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfNF8xYnl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfNF8xYnl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzRfMWJ5dGUgZ19kYmwgPSB7IDEyLCAxMywgMTQsIDE1IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzRfMWJ5dGUgZl9kYmwgPSB7IDE3OCwgMTc5LCAxODAsIDE4MSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF80XzFieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzRdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF80XzFieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDEzIDE0IDE1IDE3OCAxNzkgMTgwIDE4MTogMTkwIDE5MiAxOTQgMTk2IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxOTAgMTkyIDE5NCAxOTYiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfNF8xYnl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzRfMWJ5dGUoKikoY2xzX3N0cnVjdF80XzFieXRlLCBjbHNfc3RydWN0XzRfMWJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgMTMgMTQgMTUgMTc4IDE3OSAxODAgMTgxOiAxOTAgMTkyIDE5NCAxOTYiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLCByZXNfZGJsLmQpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDE5MCAxOTIgMTk0IDE5NiIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYWJhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYwpAQCAtMCwwICsxLDkwIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfNGJ5dGUgeworICB1bnNpZ25lZCBzaG9ydCBhOworICB1bnNpZ25lZCBzaG9ydCBiOworfSBjbHNfc3RydWN0XzRieXRlOworCitjbHNfc3RydWN0XzRieXRlIGNsc19zdHJ1Y3RfNGJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfNGJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfNGJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzRieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMi5hLCBhMi5iLCByZXN1bHQuYSwgcmVzdWx0LmIpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF80Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzRieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNGJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzRieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzRieXRlKilyZXNwID0gY2xzX3N0cnVjdF80Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzRieXRlIGdfZGJsID0geyAxMjcsIDEyMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF80Ynl0ZSBmX2RibCA9IHsgMTIsIDEyOCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF80Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNGJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTI3IDEyMCAxMiAxMjg6IDEzOSAyNDgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF80Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzRieXRlKCopKGNsc19zdHJ1Y3RfNGJ5dGUsIGNsc19zdHJ1Y3RfNGJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTI3IDEyMCAxMiAxMjg6IDEzOSAyNDgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZWJhM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYwpAQCAtMCwwICsxLDEwOSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDcwOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdW5zaWduZWQgY2hhciBiOworICB1bnNpZ25lZCBjaGFyIGM7CisgIHVuc2lnbmVkIGNoYXIgZDsKKyAgdW5zaWduZWQgY2hhciBlOworfSBjbHNfc3RydWN0XzVieXRlOworCitjbHNfc3RydWN0XzVieXRlIGNsc19zdHJ1Y3RfNWJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworICByZXN1bHQuZCA9IGExLmQgKyBhMi5kOworICByZXN1bHQuZSA9IGExLmUgKyBhMi5lOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkICVkICVkXG4iLAorCSBhMS5hLCBhMS5iLCBhMS5jLCBhMS5kLCBhMS5lLAorCSBhMi5hLCBhMi5iLCBhMi5jLCBhMi5kLCBhMi5lLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLCByZXN1bHQuZCwgcmVzdWx0LmUpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF81Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzVieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzVieXRlKilyZXNwID0gY2xzX3N0cnVjdF81Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNl07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIGdfZGJsID0geyAxMjcsIDEyMCwgMSwgMywgNCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSBmX2RibCA9IHsgMTIsIDEyOCwgOSwgMywgNCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSByZXNfZGJsID0geyAwLCAwLCAwLCAwLCAwIH07CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s1XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNWJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTI3IDEyMCAxIDMgNCAxMiAxMjggOSAzIDQ6IDEzOSAyNDggMTAgNiA4IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDggMTAgNiA4IiB9ICovCisKKyAgcmVzX2RibC5hID0gMDsKKyAgcmVzX2RibC5iID0gMDsKKyAgcmVzX2RibC5jID0gMDsKKyAgcmVzX2RibC5kID0gMDsKKyAgcmVzX2RibC5lID0gMDsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfNWJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF81Ynl0ZSgqKShjbHNfc3RydWN0XzVieXRlLCBjbHNfc3RydWN0XzVieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyNyAxMjAgMSAzIDQgMTIgMTI4IDkgMyA0OiAxMzkgMjQ4IDEwIDYgOCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJIHJlc19kYmwuZCwgcmVzX2RibC5lKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDYgOCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZDU5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYwpAQCAtMCwwICsxLDk4IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIHsKKyAgdW5zaWduZWQgc2hvcnQgYTsKKyAgdW5zaWduZWQgc2hvcnQgYjsKKyAgdW5zaWduZWQgY2hhciBjOworfSBjbHNfc3RydWN0XzVieXRlOworCitjbHNfc3RydWN0XzVieXRlIGNsc19zdHJ1Y3RfNWJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLAorCSBhMi5hLCBhMi5iLCBhMi5jLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfNWJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzVieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF81Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfNWJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSBnX2RibCA9IHsgMTI3LCAxMjAsIDEgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgZl9kYmwgPSB7IDEyLCAxMjgsIDkgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgcmVzX2RibCA9IHsgMCwgMCwgMCB9OworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzVieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNyAxMjAgMSAxMiAxMjggOTogMTM5IDI0OCAxMCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDggMTAiIH0gKi8KKworICByZXNfZGJsLmEgPSAwOworICByZXNfZGJsLmIgPSAwOworICByZXNfZGJsLmMgPSAwOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF81Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzVieXRlKCopKGNsc19zdHJ1Y3RfNWJ5dGUsIGNsc19zdHJ1Y3RfNWJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTI3IDEyMCAxIDEyIDEyOCA5OiAxMzkgMjQ4IDEwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2ZWJlMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYwpAQCAtMCwwICsxLDEyNCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBiaWdnZXIgc3RydWN0IHdoaWNoIG92ZXJsYXBzCisJCXRoZSBncCBhbmQgZnAgcmVnaXN0ZXIgY291bnQgb24gRGFyd2luL0FJWC9wcGM2NC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgeworICBkb3VibGUgYTsKKyAgZG91YmxlIGI7CisgIGRvdWJsZSBjOworICBkb3VibGUgZDsKKyAgZG91YmxlIGU7CisgIGRvdWJsZSBmOworICBkb3VibGUgZzsKKyAgZG91YmxlIGg7Cit9IGNsc19zdHJ1Y3RfNjRieXRlOworCitjbHNfc3RydWN0XzY0Ynl0ZSBjbHNfc3RydWN0XzY0Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgYjAsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIGIxLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSBiMiwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgYjMpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBiMC5hICsgYjEuYSArIGIyLmEgKyBiMy5hOworICByZXN1bHQuYiA9IGIwLmIgKyBiMS5iICsgYjIuYiArIGIzLmI7CisgIHJlc3VsdC5jID0gYjAuYyArIGIxLmMgKyBiMi5jICsgYjMuYzsKKyAgcmVzdWx0LmQgPSBiMC5kICsgYjEuZCArIGIyLmQgKyBiMy5kOworICByZXN1bHQuZSA9IGIwLmUgKyBiMS5lICsgYjIuZSArIGIzLmU7CisgIHJlc3VsdC5mID0gYjAuZiArIGIxLmYgKyBiMi5mICsgYjMuZjsKKyAgcmVzdWx0LmcgPSBiMC5nICsgYjEuZyArIGIyLmcgKyBiMy5nOworICByZXN1bHQuaCA9IGIwLmggKyBiMS5oICsgYjIuaCArIGIzLmg7CisKKyAgcHJpbnRmKCIlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZ1xuIiwgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywKKwkgcmVzdWx0LmQsIHJlc3VsdC5lLCByZXN1bHQuZiwgcmVzdWx0LmcsIHJlc3VsdC5oKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF82NGJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSBiMCwgYjEsIGIyLCBiMzsKKworICBiMCA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUqKShhcmdzWzFdKTsKKyAgYjIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSopKGFyZ3NbMl0pOworICBiMyA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlKikoYXJnc1szXSk7CisKKyAgKihjbHNfc3RydWN0XzY0Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfNjRieXRlX2ZuKGIwLCBiMSwgYjIsIGIzKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzldOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgZV9kYmwgPSB7IDkuMCwgMi4wLCA2LjAsIDUuMCwgMy4wLCA0LjAsIDguMCwgMS4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSBmX2RibCA9IHsgMS4wLCAyLjAsIDMuMCwgNy4wLCAyLjAsIDUuMCwgNi4wLCA3LjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIGdfZGJsID0geyA0LjAsIDUuMCwgNy4wLCA5LjAsIDEuMCwgMS4wLCAyLjAsIDkuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgaF9kYmwgPSB7IDguMCwgNi4wLCAxLjAsIDQuMCwgMC4wLCAzLjAsIDMuMCwgMS4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1s1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzZdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbN10gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1s4XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1szXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9ICZoX2RibDsKKyAgYXJnc19kYmxbNF0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzY0Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IDYgMTMgMTkgMTgiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfNjRieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfNjRieXRlKCopKGNsc19zdHJ1Y3RfNjRieXRlLAorCQkJCSAgIGNsc19zdHJ1Y3RfNjRieXRlLAorCQkJCSAgIGNsc19zdHJ1Y3RfNjRieXRlLAorCQkJCSAgIGNsc19zdHJ1Y3RfNjRieXRlKSkKKwkgICAgIChjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCwgaF9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4yMiAxNSAxNyAyNSA2IDEzIDE5IDE4IiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IDYgMTMgMTkgMTgiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjJlZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTA3MDgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgeworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKKyAgdW5zaWduZWQgY2hhciBjOworICB1bnNpZ25lZCBjaGFyIGQ7CisgIHVuc2lnbmVkIGNoYXIgZTsKKyAgdW5zaWduZWQgY2hhciBmOworfSBjbHNfc3RydWN0XzZieXRlOworCitjbHNfc3RydWN0XzZieXRlIGNsc19zdHJ1Y3RfNmJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworICByZXN1bHQuZCA9IGExLmQgKyBhMi5kOworICByZXN1bHQuZSA9IGExLmUgKyBhMi5lOworICByZXN1bHQuZiA9IGExLmYgKyBhMi5mOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkICVkICVkICVkXG4iLAorCSBhMS5hLCBhMS5iLCBhMS5jLCBhMS5kLCBhMS5lLCBhMS5mLAorCSBhMi5hLCBhMi5iLCBhMi5jLCBhMi5kLCBhMi5lLCBhMi5mLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLCByZXN1bHQuZCwgcmVzdWx0LmUsIHJlc3VsdC5mKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfNmJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzZieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF82Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfNmJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzddOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSBnX2RibCA9IHsgMTI3LCAxMjAsIDEsIDMsIDQsIDUgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgZl9kYmwgPSB7IDEyLCAxMjgsIDksIDMsIDQsIDUgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgcmVzX2RibCA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzZdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF82Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMjcgMTIwIDEgMyA0IDUgMTIgMTI4IDkgMyA0IDU6IDEzOSAyNDggMTAgNiA4IDEwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCA2IDggMTAiIH0gKi8KKworICByZXNfZGJsLmEgPSAwOworICByZXNfZGJsLmIgPSAwOworICByZXNfZGJsLmMgPSAwOworICByZXNfZGJsLmQgPSAwOworICByZXNfZGJsLmUgPSAwOworICByZXNfZGJsLmYgPSAwOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF82Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzZieXRlKCopKGNsc19zdHJ1Y3RfNmJ5dGUsIGNsc19zdHJ1Y3RfNmJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTI3IDEyMCAxIDMgNCA1IDEyIDEyOCA5IDMgNCA1OiAxMzkgMjQ4IDEwIDYgOCAxMCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJIHJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDggMTAgNiA4IDEwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyNTdiMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSB7CisgIHVuc2lnbmVkIHNob3J0IGE7CisgIHVuc2lnbmVkIHNob3J0IGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgdW5zaWduZWQgY2hhciBkOworfSBjbHNfc3RydWN0XzZieXRlOworCitjbHNfc3RydWN0XzZieXRlIGNsc19zdHJ1Y3RfNmJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworICByZXN1bHQuZCA9IGExLmQgKyBhMi5kOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMS5kLAorCSBhMi5hLCBhMi5iLCBhMi5jLCBhMi5kLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLCByZXN1bHQuZCk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzZieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfNmJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzZieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s1XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgZ19kYmwgPSB7IDEyNywgMTIwLCAxLCAxMjggfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgZl9kYmwgPSB7IDEyLCAxMjgsIDksIDEyNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzRdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF82Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMjcgMTIwIDEgMTI4IDEyIDEyOCA5IDEyNzogMTM5IDI0OCAxMCAyNTUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLCByZXNfZGJsLmQpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDggMTAgMjU1IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzZieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfNmJ5dGUoKikoY2xzX3N0cnVjdF82Ynl0ZSwgY2xzX3N0cnVjdF82Ynl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMjcgMTIwIDEgMTI4IDEyIDEyOCA5IDEyNzogMTM5IDI0OCAxMCAyNTUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLCByZXNfZGJsLmQpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDggMTAgMjU1IiB9ICovCisKKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQwOWM5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTA3MDgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgeworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKKyAgdW5zaWduZWQgY2hhciBjOworICB1bnNpZ25lZCBjaGFyIGQ7CisgIHVuc2lnbmVkIGNoYXIgZTsKKyAgdW5zaWduZWQgY2hhciBmOworICB1bnNpZ25lZCBjaGFyIGc7Cit9IGNsc19zdHJ1Y3RfN2J5dGU7CisKK2Nsc19zdHJ1Y3RfN2J5dGUgY2xzX3N0cnVjdF83Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisgIHJlc3VsdC5kID0gYTEuZCArIGEyLmQ7CisgIHJlc3VsdC5lID0gYTEuZSArIGEyLmU7CisgIHJlc3VsdC5mID0gYTEuZiArIGEyLmY7CisgIHJlc3VsdC5nID0gYTEuZyArIGEyLmc7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsCisJIGExLmEsIGExLmIsIGExLmMsIGExLmQsIGExLmUsIGExLmYsIGExLmcsCisJIGEyLmEsIGEyLmIsIGEyLmMsIGEyLmQsIGEyLmUsIGEyLmYsIGEyLmcsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsIHJlc3VsdC5kLCByZXN1bHQuZSwgcmVzdWx0LmYsIHJlc3VsdC5nKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfN2J5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzdieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF83Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfN2J5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzhdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSBnX2RibCA9IHsgMTI3LCAxMjAsIDEsIDMsIDQsIDUsIDYgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgZl9kYmwgPSB7IDEyLCAxMjgsIDksIDMsIDQsIDUsIDYgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgcmVzX2RibCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzZdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s3XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfN2J5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTI3IDEyMCAxIDMgNCA1IDYgMTIgMTI4IDkgMyA0IDUgNjogMTM5IDI0OCAxMCA2IDggMTAgMTIiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkICVkICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCSByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDggMTAgNiA4IDEwIDEyIiB9ICovCisKKyAgcmVzX2RibC5hID0gMDsKKyAgcmVzX2RibC5iID0gMDsKKyAgcmVzX2RibC5jID0gMDsKKyAgcmVzX2RibC5kID0gMDsKKyAgcmVzX2RibC5lID0gMDsKKyAgcmVzX2RibC5mID0gMDsKKyAgcmVzX2RibC5nID0gMDsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfN2J5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF83Ynl0ZSgqKShjbHNfc3RydWN0XzdieXRlLCBjbHNfc3RydWN0XzdieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyNyAxMjAgMSAzIDQgNSA2IDEyIDEyOCA5IDMgNCA1IDY6IDEzOSAyNDggMTAgNiA4IDEwIDEyIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDYgOCAxMCAxMiIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YzAwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYwpAQCAtMCwwICsxLDk3IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIHsKKyAgdW5zaWduZWQgc2hvcnQgYTsKKyAgdW5zaWduZWQgc2hvcnQgYjsKKyAgdW5zaWduZWQgY2hhciBjOworICB1bnNpZ25lZCBzaG9ydCBkOworfSBjbHNfc3RydWN0XzdieXRlOworCitjbHNfc3RydWN0XzdieXRlIGNsc19zdHJ1Y3RfN2J5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworICByZXN1bHQuZCA9IGExLmQgKyBhMi5kOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMS5kLAorCSBhMi5hLCBhMi5iLCBhMi5jLCBhMi5kLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLCByZXN1bHQuZCk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzdieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfN2J5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzdieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s1XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgZ19kYmwgPSB7IDEyNywgMTIwLCAxLCAyNTQgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgZl9kYmwgPSB7IDEyLCAxMjgsIDksIDI1NSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfN2J5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTI3IDEyMCAxIDI1NCAxMiAxMjggOSAyNTU6IDEzOSAyNDggMTAgNTA5IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDUwOSIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF83Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzdieXRlKCopKGNsc19zdHJ1Y3RfN2J5dGUsIGNsc19zdHJ1Y3RfN2J5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTI3IDEyMCAxIDI1NCAxMiAxMjggOSAyNTU6IDEzOSAyNDggMTAgNTA5IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDUwOSIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYTk5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYwpAQCAtMCwwICsxLDg4IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzhieXRlIHsKKyAgaW50IGE7CisgIGZsb2F0IGI7Cit9IGNsc19zdHJ1Y3RfOGJ5dGU7CisKK2Nsc19zdHJ1Y3RfOGJ5dGUgY2xzX3N0cnVjdF84Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF84Ynl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF84Ynl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisKKyAgcHJpbnRmKCIlZCAlZyAlZCAlZzogJWQgJWdcbiIsIGExLmEsIGExLmIsIGEyLmEsIGEyLmIsIHJlc3VsdC5hLCByZXN1bHQuYik7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzhieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF84Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfOGJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzhieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUgZ19kYmwgPSB7IDEsIDIuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF84Ynl0ZSBmX2RibCA9IHsgNCwgNS4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzhieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF84Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgNCA1OiA1IDciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNSA3IiB9ICovCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF84Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzhieXRlKCopKGNsc19zdHJ1Y3RfOGJ5dGUsIGNsc19zdHJ1Y3RfOGJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSAyIDQgNTogNSA3IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgNyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M1ZTlkNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYwpAQCAtMCwwICsxLDkwIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIERhcndpbi9BSVggZG8gZG91YmxlLXdvcmQKKwkJYWxpZ25tZW50IG9mIHRoZSBzdHJ1Y3QgaWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBkb3VibGUuCisJCUNoZWNrIHRoYXQgaXQgZG9lcyBub3QgaGVyZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDkxNAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSB7CisgIGludCBhOworICBkb3VibGUgYjsKK30gY2xzX3N0cnVjdF85Ynl0ZTsKKworY2xzX3N0cnVjdF85Ynl0ZSBjbHNfc3RydWN0XzlieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIGIxLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIGIyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBiMS5hICsgYjIuYTsKKyAgcmVzdWx0LmIgPSBiMS5iICsgYjIuYjsKKworICBwcmludGYoIiVkICVnICVkICVnOiAlZCAlZ1xuIiwgYjEuYSwgYjEuYiwgIGIyLmEsIGIyLmIsCisJIHJlc3VsdC5hLCByZXN1bHQuYik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY2xzX3N0cnVjdF85Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwKKwkJCQl2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgYjEsIGIyOworCisgIGIxID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSopKGFyZ3NbMF0pOworICBiMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfOWJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzlieXRlX2ZuKGIxLCBiMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1szXTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgaF9kYmwgPSB7IDcsIDguMH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIGpfZGJsID0geyAxLCA5LjB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmhfZGJsOworICBhcmdzX2RibFsxXSA9ICZqX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzlieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjcgOCAxIDk6IDggMTciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOCAxNyIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF85Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzlieXRlKCopKGNsc19zdHJ1Y3RfOWJ5dGUsIGNsc19zdHJ1Y3RfOWJ5dGUpKShjb2RlKSkoaF9kYmwsIGpfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuNyA4IDEgOTogOCAxNyIgfSAqLworICBwcmludGYoInJlczogJWQgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA4IDE3IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzBiYTBkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gRGFyd2luL0FJWCBkbyBkb3VibGUtd29yZAorCQlhbGlnbm1lbnQgb2YgdGhlIHN0cnVjdCBpZiB0aGUgZmlyc3QgZWxlbWVudCBpcyBhIGRvdWJsZS4KKwkJQ2hlY2sgdGhhdCBpdCBkb2VzIGhlcmUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA5MTQJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgeworICBkb3VibGUgYTsKKyAgaW50IGI7Cit9IGNsc19zdHJ1Y3RfOWJ5dGU7CisKK2Nsc19zdHJ1Y3RfOWJ5dGUgY2xzX3N0cnVjdF85Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBiMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBiMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYjEuYSArIGIyLmE7CisgIHJlc3VsdC5iID0gYjEuYiArIGIyLmI7CisKKyAgcHJpbnRmKCIlZyAlZCAlZyAlZDogJWcgJWRcbiIsIGIxLmEsIGIxLmIsICBiMi5hLCBiMi5iLAorCSByZXN1bHQuYSwgcmVzdWx0LmIpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsc19zdHJ1Y3RfOWJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsCisJCQkJdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIGIxLCBiMjsKKworICBiMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUqKShhcmdzWzBdKTsKKyAgYjIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzlieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzlieXRlKilyZXNwID0gY2xzX3N0cnVjdF85Ynl0ZV9mbihiMSwgYjIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIGhfZGJsID0geyA3LjAsIDh9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBqX2RibCA9IHsgMS4wLCA5fTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZoX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmal9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF85Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICI3IDggMSA5OiA4IDE3IiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDggMTciIH0gKi8KKworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF85Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzlieXRlKCopKGNsc19zdHJ1Y3RfOWJ5dGUsIGNsc19zdHJ1Y3RfOWJ5dGUpKShjb2RlKSkoaF9kYmwsIGpfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuNyA4IDEgOTogOCAxNyIgfSAqLworICBwcmludGYoInJlczogJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA4IDE3IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmI5NGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgZG91YmxlLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzEyMDMJICovCisKKworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICBkb3VibGUgYjsKKyAgdW5zaWduZWQgY2hhciBjOworfSBjbHNfc3RydWN0X2FsaWduOworCitjbHNfc3RydWN0X2FsaWduIGNsc19zdHJ1Y3RfYWxpZ25fZm4oc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisgIHByaW50ZigiJWQgJWcgJWQgJWQgJWcgJWQ6ICVkICVnICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMi5hLCBhMi5iLCBhMi5jLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF9hbGlnbiopcmVzcCA9IGNsc19zdHJ1Y3RfYWxpZ25fZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBnX2RibCA9IHsgMTIsIDQ5NTEsIDEyNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBmX2RibCA9IHsgMSwgOTMyMCwgMTMgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjM3ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYwpAQCAtMCwwICsxLDkxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIGZsb2F0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzEyMDMJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIGZsb2F0IGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVnICVkICVkICVnICVkOiAlZCAlZyAlZFxuIiwgYTEuYSwgKGRvdWJsZSlhMS5iLCBhMS5jLCBhMi5hLCAoZG91YmxlKWEyLmIsIGEyLmMsIHJlc3VsdC5hLCAoZG91YmxlKXJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCA0OTUxLCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDEsIDkzMjAsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCAoZG91YmxlKXJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCAoZG91YmxlKXJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzODA2MAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMKQEAgLTAsMCArMSw5MiBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIGFsaWdubWVudCBvZiBsb25nIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIGxvbmcgZG91YmxlIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVnICVkICVkICVnICVkOiAlZCAlZyAlZFxuIiwgYTEuYSwgKGRvdWJsZSlhMS5iLCBhMS5jLCBhMi5hLCAoZG91YmxlKWEyLmIsIGEyLmMsIHJlc3VsdC5hLCAoZG91YmxlKXJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCA0OTUxLCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDEsIDkzMjAsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnICVkXG4iLCByZXNfZGJsLmEsIChkb3VibGUpcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9hbGlnbl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0X2FsaWduKCopKGNsc19zdHJ1Y3RfYWxpZ24sIGNsc19zdHJ1Y3RfYWxpZ24pKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnICVkXG4iLCByZXNfZGJsLmEsIChkb3VibGUpcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjc0YWYxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYwpAQCAtMCwwICsxLDEzNCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIGFsaWdubWVudCBvZiBsb25nIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWV4Y2Vzcy1lcnJvcnMgIm5vIGxvbmcgZG91YmxlIGZvcm1hdCIgeyB4ZmFpbCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogeHNjYWxlKi0qLSogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgLW1sb25nLWRvdWJsZS0xMjggeyB0YXJnZXQgcG93ZXJwYzY0Ki0qLSogfSB9ICovCisvKiB7IGRnLW91dHB1dCAiIiB7IHhmYWlsIHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgbG9uZyBkb3VibGUgYTsKKyAgbG9uZyBkb3VibGUgYjsKKyAgbG9uZyBkb3VibGUgYzsKKyAgbG9uZyBkb3VibGUgZDsKKyAgbG9uZyBkb3VibGUgZTsKKyAgbG9uZyBkb3VibGUgZjsKKyAgbG9uZyBkb3VibGUgZzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKAorCWNsc19zdHJ1Y3RfYWxpZ24JYTEsCisJY2xzX3N0cnVjdF9hbGlnbglhMikKK3sKKwlzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByOworCisJci5hID0gYTEuYSArIGEyLmE7CisJci5iID0gYTEuYiArIGEyLmI7CisJci5jID0gYTEuYyArIGEyLmM7CisJci5kID0gYTEuZCArIGEyLmQ7CisJci5lID0gYTEuZSArIGEyLmU7CisJci5mID0gYTEuZiArIGEyLmY7CisJci5nID0gYTEuZyArIGEyLmc7CisKKwlwcmludGYoIiVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGc6ICIKKwkJIiVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVMZ1xuIiwKKwkJYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwgYTEuZSwgYTEuZiwgYTEuZywKKwkJYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwgYTIuZSwgYTIuZiwgYTIuZywKKwkJci5hLCByLmIsIHIuYywgci5kLCByLmUsIHIuZiwgci5nKTsKKworCXJldHVybiByOworfQorCitjbHNfc3RydWN0X2FsaWduIGNsc19zdHJ1Y3RfYWxpZ25fZm4yKAorCWNsc19zdHJ1Y3RfYWxpZ24JYTEpCit7CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcjsKKworCXIuYSA9IGExLmEgKyAxOworCXIuYiA9IGExLmIgKyAxOworCXIuYyA9IGExLmMgKyAxOworCXIuZCA9IGExLmQgKyAxOworCXIuZSA9IGExLmUgKyAxOworCXIuZiA9IGExLmYgKyAxOworCXIuZyA9IGExLmcgKyAxOworCisJcHJpbnRmKCIlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGc6ICIKKwkJIiVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVMZ1xuIiwKKwkJYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwgYTEuZSwgYTEuZiwgYTEuZywKKwkJci5hLCByLmIsIHIuYywgci5kLCByLmUsIHIuZiwgci5nKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsIAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwlzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwgYTI7CisKKwlhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKwlhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworCSooY2xzX3N0cnVjdF9hbGlnbiopcmVzcCA9IGNsc19zdHJ1Y3RfYWxpZ25fZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzX2RibFszXTsKKwlmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbOF07CisJZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworCWZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisJY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworCWNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworCWNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworCWNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcgfTsKKwlzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBmX2RibCA9IHsgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0IH07CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzX2RibDsKKworCWNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNF0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s1XSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzZdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbN10gPSBOVUxMOworCisJZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQlkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc19kYmxbMF0gPSAmZ19kYmw7CisJYXJnc19kYmxbMV0gPSAmZl9kYmw7CisJYXJnc19kYmxbMl0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworCS8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNDogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCXByaW50ZigicmVzOiAlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLAorCQlyZXNfZGJsLmMsIHJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiA5IDExIDEzIDE1IDE3IDE5IDIxIiB9ICovCisKKwlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKwlyZXNfZGJsID0gKChjbHNfc3RydWN0X2FsaWduKCopKGNsc19zdHJ1Y3RfYWxpZ24sIGNsc19zdHJ1Y3RfYWxpZ24pKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiXG4xIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNDogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCXByaW50ZigicmVzOiAlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLAorCQlyZXNfZGJsLmMsIHJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiA5IDExIDEzIDE1IDE3IDE5IDIxIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg4ZjBkMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jCkBAIC0wLDAgKzEsMTE3IEBACisvKglBcmVhOgkJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKwlQdXJwb3NlOgkJQ2hlY2sgc3RydWN0dXJlIGFsaWdubWVudCBvZiBsb25nIGRvdWJsZS4KKwlMaW1pdGF0aW9uczoJbm9uZS4KKwlQUjoJCQkJbm9uZS4KKwlPcmlnaW5hdG9yOgkJQmxha2UgQ2hhZmZpbgk2LzE4LzIwMDcKKyovCisKKy8qIHsgZGctZXhjZXNzLWVycm9ycyAibm8gbG9uZyBkb3VibGUgZm9ybWF0IiB7IHhmYWlsIHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAtbWxvbmctZG91YmxlLTEyOCB7IHRhcmdldCBwb3dlcnBjNjQqLSotKiB9IH0gKi8KKy8qIHsgZGctb3V0cHV0ICIiIHsgeGZhaWwgeDg2XzY0LSotbWluZ3cqIHg4Nl82NC0qLWN5Z3dpbiogfSB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICBsb25nIGRvdWJsZSBhOworICBsb25nIGRvdWJsZSBiOworICBsb25nIGRvdWJsZSBjOworICBsb25nIGRvdWJsZSBkOworICBsb25nIGRvdWJsZSBlOworICBkb3VibGUgZjsKKyAgbG9uZyBkb3VibGUgZzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKAorCWNsc19zdHJ1Y3RfYWxpZ24JYTEsCisJY2xzX3N0cnVjdF9hbGlnbglhMikKK3sKKwlzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByOworCisJci5hID0gYTEuYSArIGEyLmE7CisJci5iID0gYTEuYiArIGEyLmI7CisJci5jID0gYTEuYyArIGEyLmM7CisJci5kID0gYTEuZCArIGEyLmQ7CisJci5lID0gYTEuZSArIGEyLmU7CisJci5mID0gYTEuZiArIGEyLmY7CisJci5nID0gYTEuZyArIGEyLmc7CisKKwlwcmludGYoIiVMZyAlTGcgJUxnICVMZyAlTGcgJWcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJWcgJUxnOiAiCisJCSIlTGcgJUxnICVMZyAlTGcgJUxnICVnICVMZ1xuIiwKKwkJYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwgYTEuZSwgYTEuZiwgYTEuZywKKwkJYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwgYTIuZSwgYTIuZiwgYTIuZywKKwkJci5hLCByLmIsIHIuYywgci5kLCByLmUsIHIuZiwgci5nKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsIAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwlzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwgYTI7CisKKwlhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKwlhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworCSooY2xzX3N0cnVjdF9hbGlnbiopcmVzcCA9IGNsc19zdHJ1Y3RfYWxpZ25fZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzX2RibFszXTsKKwlmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbOF07CisJZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworCWZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisJY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworCWNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworCWNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworCWNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcgfTsKKwlzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBmX2RibCA9IHsgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0IH07CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzX2RibDsKKworCWNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNF0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNl0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s3XSA9IE5VTEw7CisKKwlkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCWRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKwlhcmdzX2RibFswXSA9ICZnX2RibDsKKwlhcmdzX2RibFsxXSA9ICZmX2RibDsKKwlhcmdzX2RibFsyXSA9IE5VTEw7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF9hbGlnbl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0OiA5IDExIDEzIDE1IDE3IDE5IDIxIiB9ICovCisJcHJpbnRmKCJyZXM6ICVMZyAlTGcgJUxnICVMZyAlTGcgJWcgJUxnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIlxuMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQ6IDkgMTEgMTMgMTUgMTcgMTkgMjEiIH0gKi8KKwlwcmludGYoInJlczogJUxnICVMZyAlTGcgJUxnICVMZyAlZyAlTGdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLAorCQlyZXNfZGJsLmMsIHJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiA5IDExIDEzIDE1IDE3IDE5IDIxIiB9ICovCisKKyAgZXhpdCgwKTsKK30KKworCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYzRmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgcG9pbnRlci4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB2b2lkICpiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gKHZvaWQgKikoKHVpbnRwdHJfdClhMS5iICsgKHVpbnRwdHJfdClhMi5iKTsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICUiIFBSSXVQVFIgIiAlZCAlZCAlIiBQUkl1UFRSICIgJWQ6ICVkICUiIFBSSXVQVFIgIiAlZFxuIiwgCisgICAgICAgICBhMS5hLCAodWludHB0cl90KWExLmIsIGExLmMsCisJIGEyLmEsICh1aW50cHRyX3QpYTIuYiwgYTIuYywKKyAgICAgICAgIHJlc3VsdC5hLCAodWludHB0cl90KXJlc3VsdC5iLAorCSByZXN1bHQuYyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF9hbGlnbiopcmVzcCA9IGNsc19zdHJ1Y3RfYWxpZ25fZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBnX2RibCA9IHsgMTIsICh2b2lkICopNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCAodm9pZCAqKTkzMjAsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3BvaW50ZXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICUiIFBSSXVQVFIgIiAlZFxuIiwgcmVzX2RibC5hLCAodWludHB0cl90KXJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlIiBQUkl1UFRSICIgJWRcbiIsIHJlc19kYmwuYSwgKHVpbnRwdHJfdClyZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODNlYTQxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2Ygc2ludDE2LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzEyMDMJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIHNpZ25lZCBzaG9ydCBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsIGEyLmEsIGEyLmIsIGEyLmMsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDVkNzhjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2Ygc2ludDMyLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzEyMDMJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIHNpZ25lZCBpbnQgYjsKKyAgdW5zaWduZWQgY2hhciBjOworfSBjbHNfc3RydWN0X2FsaWduOworCitjbHNfc3RydWN0X2FsaWduIGNsc19zdHJ1Y3RfYWxpZ25fZm4oc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMi5hLCBhMi5iLCBhMi5jLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF9hbGlnbiopcmVzcCA9IGNsc19zdHJ1Y3RfYWxpZ25fZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBnX2RibCA9IHsgMTIsIDQ5NTEsIDEyNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBmX2RibCA9IHsgMSwgOTMyMCwgMTMgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF9hbGlnbl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9hbGlnbl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0X2FsaWduKCopKGNsc19zdHJ1Y3RfYWxpZ24sIGNsc19zdHJ1Y3RfYWxpZ24pKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZDUzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMKQEAgLTAsMCArMSw5MiBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIGFsaWdubWVudCBvZiBzaW50NjQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxob3NAdGFtYW5lZ2kub3JnPiAyMDAzMTIwMwkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRpb25zICItV25vLWZvcm1hdCIgeyB0YXJnZXQgYWxwaGEqLWRlYy1vc2YqIH0gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgc2lnbmVkIGxvbmcgbG9uZyBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlIiBQUklkTEwgIiAlZCAlZCAlIiBQUklkTEwgIiAlZDogJWQgJSIgUFJJZExMICIgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsIGEyLmEsIGEyLmIsIGEyLmMsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9zaW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICUiIFBSSWRMTCAiICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlIiBQUklkTEwgIiAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiNzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgdWludDE2LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzEyMDMJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIHNob3J0IGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTIuYSwgYTIuYiwgYTIuYywgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCA0OTUxLCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDEsIDkzMjAsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF9hbGlnbl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9hbGlnbl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0X2FsaWduKCopKGNsc19zdHJ1Y3RfYWxpZ24sIGNsc19zdHJ1Y3RfYWxpZ24pKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTNkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMKQEAgLTAsMCArMSw5MSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIGFsaWdubWVudCBvZiB1aW50MzIuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxob3NAdGFtYW5lZ2kub3JnPiAyMDAzMTIwMwkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdW5zaWduZWQgaW50IGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTIuYSwgYTIuYiwgYTIuYywgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCA0OTUxLCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDEsIDkzMjAsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTVjNzlmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgdWludDY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzEyMDMJICovCisKKworLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRpb25zICItV25vLWZvcm1hdCIgeyB0YXJnZXQgYWxwaGEqLWRlYy1vc2YqIH0gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICUiIFBSSWRMTCAiICVkICVkICUiIFBSSWRMTCAiICVkOiAlZCAlIiBQUklkTEwgIiAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTIuYSwgYTIuYiwgYTIuYywgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCA0OTUxLCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDEsIDkzMjAsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF9hbGlnbl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJSIgUFJJZExMICIgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9hbGlnbl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0X2FsaWduKCopKGNsc19zdHJ1Y3RfYWxpZ24sIGNsc19zdHJ1Y3RfYWxpZ24pKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICUiIFBSSWRMTCAiICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjBkYWJiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMKQEAgLTAsMCArMSw2NiBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBkb3VibGUgYXJndW1lbnRzIGluIHN0cnVjdHMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluIDYvMjMvMjAwNwkqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IERibHMgeworCWRvdWJsZSB4OworCWRvdWJsZSB5OworfSBEYmxzOworCit2b2lkCitjbG9zdXJlX3Rlc3RfZm4oRGJscyBwKQoreworCXByaW50ZigiJS4xZiAlLjFmXG4iLCBwLngsIHAueSk7Cit9CisKK3ZvaWQKK2Nsb3N1cmVfdGVzdF9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCBfX1VOVVNFRF9fLAorCQl2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwljbG9zdXJlX3Rlc3RfZm4oKihEYmxzKilhcmdzWzBdKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MgX19VTlVTRURfXywgY2hhcioqIGFyZ3YgX19VTlVTRURfXykKK3sKKwlmZmlfY2lmIGNpZjsKKworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlKglwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJZmZpX3R5cGUqCQljbF9hcmdfdHlwZXNbMV07CisKKwlmZmlfdHlwZQl0czFfdHlwZTsKKwlmZmlfdHlwZSoJdHMxX3R5cGVfZWxlbWVudHNbNF07CisKKwl0czFfdHlwZS5zaXplID0gMDsKKwl0czFfdHlwZS5hbGlnbm1lbnQgPSAwOworCXRzMV90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJdHMxX3R5cGUuZWxlbWVudHMgPSB0czFfdHlwZV9lbGVtZW50czsKKworCXRzMV90eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKwl0czFfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJdHMxX3R5cGVfZWxlbWVudHNbMl0gPSBOVUxMOworCisJY2xfYXJnX3R5cGVzWzBdID0gJnRzMV90eXBlOworCisJRGJscyBhcmcgPSB7IDEuMCwgMi4wIH07CisKKwkvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkJCSAmZmZpX3R5cGVfdm9pZCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKwkoKHZvaWQqKCopKERibHMpKShjb2RlKSkoYXJnKTsKKwkvKiB7IGRnLW91dHB1dCAiMS4wIDIuMFxuIiB9ICovCisKKwljbG9zdXJlX3Rlc3RfZm4oYXJnKTsKKwkvKiB7IGRnLW91dHB1dCAiMS4wIDIuMFxuIiB9ICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGFkNGNiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xzX3JldF9kb3VibGVfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKKyB7CisgICAqKGRvdWJsZSAqKXJlc3AgPSAqKGRvdWJsZSAqKWFyZ3NbMF07CisKKyAgIHByaW50ZigiJWY6ICVmXG4iLCooZG91YmxlICopYXJnc1swXSwKKwkgICooZG91YmxlICopcmVzcCk7CisgfQordHlwZWRlZiBkb3VibGUgKCpjbHNfcmV0X2RvdWJsZSkoZG91YmxlKTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1syXTsKKyAgZG91YmxlIHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbMV0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9kb3VibGUsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19yZXRfZG91YmxlX2ZuLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xzX3JldF9kb3VibGUpY29kZSkpKDIxNDc0Ljc4OSk7CisgIC8qIHsgZGctb3V0cHV0ICIyMTQ3NC43ODkwMDA6IDIxNDc0Ljc4OTAwMCIgfSAqLworICBwcmludGYoInJlczogJS42ZlxuIiwgcmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMTQ3NC43ODkwMDAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OTU4NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMKQEAgLTAsMCArMSw1NyBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlUZXN0IGRvdWJsZXMgcGFzc2VkIGluIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbiA2LzYvMjAwNwkgKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiB9IH0gKi8KKy8qIHsgZGctb3V0cHV0ICIiIHsgeGZhaWwgYXZyMzIqLSotKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkCitjbHNfZG91YmxlX3ZhX2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCAKKwkJIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCWNoYXIqCWZvcm1hdAkJPSAqKGNoYXIqKilhcmdzWzBdOworCWRvdWJsZQlkb3VibGVWYWx1ZQk9ICooZG91YmxlKilhcmdzWzFdOworCisJKihmZmlfYXJnKilyZXNwID0gcHJpbnRmKGZvcm1hdCwgZG91YmxlVmFsdWUpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKwlmZmlfY2lmIGNpZjsKKyAgICAgICAgdm9pZCAqY29kZTsKKwlmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworCXZvaWQqIGFyZ3NbM107CisJZmZpX3R5cGUqIGFyZ190eXBlc1szXTsKKworCWNoYXIqCWZvcm1hdAkJPSAiJS4xZlxuIjsKKwlkb3VibGUJZG91YmxlQXJnCT0gNzsKKwlmZmlfYXJnCXJlcwkJCT0gMDsKKworCWFyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJYXJnX3R5cGVzWzJdID0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZmZmlfdHlwZV9zaW50LAorCQlhcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKwlhcmdzWzBdID0gJmZvcm1hdDsKKwlhcmdzWzFdID0gJmRvdWJsZUFyZzsKKwlhcmdzWzJdID0gTlVMTDsKKworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTihwcmludGYpLCAmcmVzLCBhcmdzKTsKKwkvLyB7IGRnLW91dHB1dCAiNy4wIiB9CisJcHJpbnRmKCJyZXM6ICVkXG4iLCAoaW50KSByZXMpOworCS8vIHsgZGctb3V0cHV0ICJcbnJlczogNCIgfQorCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfZG91YmxlX3ZhX2ZuLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzCT0gKChpbnQoKikoY2hhciosIGRvdWJsZSkpKGNvZGUpKShmb3JtYXQsIGRvdWJsZUFyZyk7CisJLy8geyBkZy1vdXRwdXQgIlxuNy4wIiB9CisJcHJpbnRmKCJyZXM6ICVkXG4iLCAoaW50KSByZXMpOworCS8vIHsgZGctb3V0cHV0ICJcbnJlczogNCIgfQorCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5MGZlZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZCBjbHNfcmV0X2Zsb2F0X2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKKyB7CisgICAqKGZsb2F0ICopcmVzcCA9ICooZmxvYXQgKilhcmdzWzBdOworCisgICBwcmludGYoIiVnOiAlZ1xuIiwqKGZsb2F0ICopYXJnc1swXSwKKwkgICooZmxvYXQgKilyZXNwKTsKKyB9CisKK3R5cGVkZWYgZmxvYXQgKCpjbHNfcmV0X2Zsb2F0KShmbG9hdCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMl07CisgIGZsb2F0IHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX2Zsb2F0LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X2Zsb2F0X2ZuLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKyAgcmVzID0gKCgoKGNsc19yZXRfZmxvYXQpY29kZSkoLTIxMjIuMTIpKSk7CisgIC8qIHsgZGctb3V0cHV0ICJcXC0yMTIyLjEyOiBcXC0yMTIyLjEyIiB9ICovCisgIHByaW50ZigicmVzOiAlLjZmXG4iLCByZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IFwtMjEyMi4xMjAxMTciIH0gKi8KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYWY2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jCkBAIC0wLDAgKzEsMTA1IEBACisvKiBBcmVhOgkJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJCUNoZWNrIGxvbmcgZG91YmxlIGFyZ3VtZW50cy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUJsYWtlIENoYWZmaW4JKi8KKworLyogeyBkZy1leGNlc3MtZXJyb3JzICJubyBsb25nIGRvdWJsZSBmb3JtYXQiIHsgeGZhaWwgeDg2XzY0LSotbWluZ3cqIHg4Nl82NC0qLWN5Z3dpbiogfSB9ICovCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsIGFybSotKi0qIHN0cm9uZ2FybSotKi0qIHhzY2FsZSotKi0qIH0gfSAqLworLyogeyBkZy1vcHRpb25zIC1tbG9uZy1kb3VibGUtMTI4IHsgdGFyZ2V0IHBvd2VycGM2NCotKi0qIH0gfSAqLworLyogeyBkZy1vdXRwdXQgIiIgeyB4ZmFpbCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworbG9uZyBkb3VibGUgY2xzX2xkb3VibGVfZm4oCisJbG9uZyBkb3VibGUJYTEsCisJbG9uZyBkb3VibGUJYTIsCisJbG9uZyBkb3VibGUJYTMsCisJbG9uZyBkb3VibGUJYTQsCisJbG9uZyBkb3VibGUJYTUsCisJbG9uZyBkb3VibGUJYTYsCisJbG9uZyBkb3VibGUJYTcsCisJbG9uZyBkb3VibGUJYTgpCit7CisJbG9uZyBkb3VibGUJciA9IGExICsgYTIgKyBhMyArIGE0ICsgYTUgKyBhNiArIGE3ICsgYTg7CisKKwlwcmludGYoIiVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGc6ICVMZ1xuIiwKKwkJYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCByKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZAorY2xzX2xkb3VibGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIAorCSAgICAgICB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwlsb25nIGRvdWJsZQlhMQk9ICoobG9uZyBkb3VibGUqKWFyZ3NbMF07CisJbG9uZyBkb3VibGUJYTIJPSAqKGxvbmcgZG91YmxlKilhcmdzWzFdOworCWxvbmcgZG91YmxlCWEzCT0gKihsb25nIGRvdWJsZSopYXJnc1syXTsKKwlsb25nIGRvdWJsZQlhNAk9ICoobG9uZyBkb3VibGUqKWFyZ3NbM107CisJbG9uZyBkb3VibGUJYTUJPSAqKGxvbmcgZG91YmxlKilhcmdzWzRdOworCWxvbmcgZG91YmxlCWE2CT0gKihsb25nIGRvdWJsZSopYXJnc1s1XTsKKwlsb25nIGRvdWJsZQlhNwk9ICoobG9uZyBkb3VibGUqKWFyZ3NbNl07CisJbG9uZyBkb3VibGUJYTgJPSAqKGxvbmcgZG91YmxlKilhcmdzWzddOworCisJKihsb25nIGRvdWJsZSopcmVzcCA9IGNsc19sZG91YmxlX2ZuKAorCQlhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOworfQorCitpbnQgbWFpbih2b2lkKQoreworCWZmaV9jaWYJY2lmOworICAgICAgICB2b2lkKiBjb2RlOworCWZmaV9jbG9zdXJlKglwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCoJCQlhcmdzWzldOworCWZmaV90eXBlKgkJYXJnX3R5cGVzWzldOworCWxvbmcgZG91YmxlCQlyZXMJPSAwOworCisJbG9uZyBkb3VibGUJYXJnMQk9IDE7CisJbG9uZyBkb3VibGUJYXJnMgk9IDI7CisJbG9uZyBkb3VibGUJYXJnMwk9IDM7CisJbG9uZyBkb3VibGUJYXJnNAk9IDQ7CisJbG9uZyBkb3VibGUJYXJnNQk9IDU7CisJbG9uZyBkb3VibGUJYXJnNgk9IDY7CisJbG9uZyBkb3VibGUJYXJnNwk9IDc7CisJbG9uZyBkb3VibGUJYXJnOAk9IDg7CisKKwlhcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdfdHlwZXNbNF0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdfdHlwZXNbNV0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdfdHlwZXNbNl0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdfdHlwZXNbN10gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdfdHlwZXNbOF0gPSBOVUxMOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgOCwgJmZmaV90eXBlX2xvbmdkb3VibGUsCisJCWFyZ190eXBlcykgPT0gRkZJX09LKTsKKworCWFyZ3NbMF0gPSAmYXJnMTsKKwlhcmdzWzFdID0gJmFyZzI7CisJYXJnc1syXSA9ICZhcmczOworCWFyZ3NbM10gPSAmYXJnNDsKKwlhcmdzWzRdID0gJmFyZzU7CisJYXJnc1s1XSA9ICZhcmc2OworCWFyZ3NbNl0gPSAmYXJnNzsKKwlhcmdzWzddID0gJmFyZzg7CisJYXJnc1s4XSA9IE5VTEw7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX2xkb3VibGVfZm4pLCAmcmVzLCBhcmdzKTsKKwkvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCA1IDYgNyA4OiAzNiIgfSAqLworCXByaW50ZigicmVzOiAlTGdcbiIsIHJlcyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAzNiIgfSAqLworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfbGRvdWJsZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlcyA9ICgobG9uZyBkb3VibGUoKikobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsCisJCWxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKSkoY29kZSkpKGFyZzEsIGFyZzIsCisJCWFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzgpOworCS8qIHsgZGctb3V0cHV0ICJcbjEgMiAzIDQgNSA2IDcgODogMzYiIH0gKi8KKwlwcmludGYoInJlczogJUxnXG4iLCByZXMpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogMzYiIH0gKi8KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1NjRjYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMKQEAgLTAsMCArMSw1NyBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlUZXN0IGxvbmcgZG91YmxlcyBwYXNzZWQgaW4gdmFyaWFibGUgYXJndW1lbnQgbGlzdHMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluIDYvNi8yMDA3CSAqLworCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsIHN0cm9uZ2FybSotKi0qIHhzY2FsZSotKi0qIH0gfSAqLworLyogeyBkZy1vdXRwdXQgIiIgeyB4ZmFpbCBhdnIzMiotKi0qIHg4Nl82NC0qLW1pbmd3KiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkCitjbHNfbG9uZ2RvdWJsZV92YV9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgCisJCSAgICAgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJY2hhcioJCWZvcm1hdAk9ICooY2hhcioqKWFyZ3NbMF07CisJbG9uZyBkb3VibGUJbGRWYWx1ZQk9ICoobG9uZyBkb3VibGUqKWFyZ3NbMV07CisKKwkqKGZmaV9hcmcqKXJlc3AgPSBwcmludGYoZm9ybWF0LCBsZFZhbHVlKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzWzNdOworCWZmaV90eXBlKiBhcmdfdHlwZXNbM107CisKKwljaGFyKgkJZm9ybWF0CT0gIiUuMUxmXG4iOworCWxvbmcgZG91YmxlCWxkQXJnCT0gNzsKKwlmZmlfYXJnCQlyZXMJCT0gMDsKKworCWFyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWFyZ190eXBlc1syXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmZmZpX3R5cGVfc2ludCwKKwkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc1swXSA9ICZmb3JtYXQ7CisJYXJnc1sxXSA9ICZsZEFyZzsKKwlhcmdzWzJdID0gTlVMTDsKKworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTihwcmludGYpLCAmcmVzLCBhcmdzKTsKKwkvLyB7IGRnLW91dHB1dCAiNy4wIiB9CisJcHJpbnRmKCJyZXM6ICVkXG4iLCAoaW50KSByZXMpOworCS8vIHsgZGctb3V0cHV0ICJcbnJlczogNCIgfQorCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfbG9uZ2RvdWJsZV92YV9mbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlcwk9ICgoaW50KCopKGNoYXIqLCBsb25nIGRvdWJsZSkpKGNvZGUpKShmb3JtYXQsIGxkQXJnKTsKKwkvLyB7IGRnLW91dHB1dCAiXG43LjAiIH0KKwlwcmludGYoInJlczogJWRcbiIsIChpbnQpIHJlcyk7CisJLy8geyBkZy1vdXRwdXQgIlxucmVzOiA0IiB9CisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWRmN2I2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMKQEAgLTAsMCArMSw3NCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcGFzc2luZyBvZiBtdWx0aXBsZSBzaWduZWQgY2hhciB2YWx1ZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJUFIxMzIyMS4KKyAgIE9yaWdpbmF0b3I6CTxob3NAdGFtYW5lZ2kub3JnPiAyMDAzMTEyOSAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc2lnbmVkIGNoYXIgdGVzdF9mdW5jX2ZuKHNpZ25lZCBjaGFyIGExLCBzaWduZWQgY2hhciBhMikKK3sKKyAgc2lnbmVkIGNoYXIgcmVzdWx0OworCisgIHJlc3VsdCA9IGExICsgYTI7CisKKyAgcHJpbnRmKCIlZCAlZDogJWRcbiIsIGExLCBhMiwgcmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworCit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZnVuY19nbihmZmlfY2lmICpjaWYgX19VTlVTRURfXywgdm9pZCAqcnZhbCwgdm9pZCAqKmF2YWxzLAorCQkJIHZvaWQgKmRhdGEgX19VTlVTRURfXykKK3sKKyAgc2lnbmVkIGNoYXIgYTEsIGEyOworCisgIGExID0gKihzaWduZWQgY2hhciAqKWF2YWxzWzBdOworICBhMiA9ICooc2lnbmVkIGNoYXIgKilhdmFsc1sxXTsKKworICAqKGZmaV9hcmcgKilydmFsID0gdGVzdF9mdW5jX2ZuKGExLCBhMik7CisKK30KKwordHlwZWRlZiBzaWduZWQgY2hhciAoKnRlc3RfdHlwZSkoc2lnbmVkIGNoYXIsIHNpZ25lZCBjaGFyKTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkICogYXJnc19kYmxbM107CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzNdOworICBmZmlfYXJnIHJlc19jYWxsOworICBzaWduZWQgY2hhciBhLCBiLCByZXNfY2xvc3VyZTsKKworICBhID0gMjsKKyAgYiA9IDEyNTsKKworICBhcmdzX2RibFswXSA9ICZhOworICBhcmdzX2RibFsxXSA9ICZiOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3NjaGFyOworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfc2NoYXI7CisgIGNsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsCisJCSAgICAgJmZmaV90eXBlX3NjaGFyLCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHRlc3RfZnVuY19mbiksICZyZXNfY2FsbCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMiAxMjU6IDEyNyIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIChzaWduZWQgY2hhcilyZXNfY2FsbCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTI3IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCB0ZXN0X2Z1bmNfZ24sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlc19jbG9zdXJlID0gKCooKHRlc3RfdHlwZSljb2RlKSkoMiwgMTI1KTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMiAxMjU6IDEyNyIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIHJlc19jbG9zdXJlKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMjciIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzkxNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMKQEAgLTAsMCArMSw3NCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcGFzc2luZyBvZiBtdWx0aXBsZSBzaWduZWQgc2hvcnQgdmFsdWVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSMTMyMjEuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMxMTI5ICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzaWduZWQgc2hvcnQgdGVzdF9mdW5jX2ZuKHNpZ25lZCBzaG9ydCBhMSwgc2lnbmVkIHNob3J0IGEyKQoreworICBzaWduZWQgc2hvcnQgcmVzdWx0OworCisgIHJlc3VsdCA9IGExICsgYTI7CisKKyAgcHJpbnRmKCIlZCAlZDogJWRcbiIsIGExLCBhMiwgcmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworCit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZnVuY19nbihmZmlfY2lmICpjaWYgX19VTlVTRURfXywgdm9pZCAqcnZhbCwgdm9pZCAqKmF2YWxzLAorCQkJIHZvaWQgKmRhdGEgX19VTlVTRURfXykKK3sKKyAgc2lnbmVkIHNob3J0IGExLCBhMjsKKworICBhMSA9ICooc2lnbmVkIHNob3J0ICopYXZhbHNbMF07CisgIGEyID0gKihzaWduZWQgc2hvcnQgKilhdmFsc1sxXTsKKworICAqKGZmaV9hcmcgKilydmFsID0gdGVzdF9mdW5jX2ZuKGExLCBhMik7CisKK30KKwordHlwZWRlZiBzaWduZWQgc2hvcnQgKCp0ZXN0X3R5cGUpKHNpZ25lZCBzaG9ydCwgc2lnbmVkIHNob3J0KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkICogYXJnc19kYmxbM107CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzNdOworICBmZmlfYXJnIHJlc19jYWxsOworICB1bnNpZ25lZCBzaG9ydCBhLCBiLCByZXNfY2xvc3VyZTsKKworICBhID0gMjsKKyAgYiA9IDMyNzY1OworCisgIGFyZ3NfZGJsWzBdID0gJmE7CisgIGFyZ3NfZGJsWzFdID0gJmI7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLAorCQkgICAgICZmZmlfdHlwZV9zc2hvcnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4odGVzdF9mdW5jX2ZuKSwgJnJlc19jYWxsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIyIDMyNzY1OiAzMjc2NyIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsICh1bnNpZ25lZCBzaG9ydClyZXNfY2FsbCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMzI3NjciIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIHRlc3RfZnVuY19nbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzX2Nsb3N1cmUgPSAoKigodGVzdF90eXBlKWNvZGUpKSgyLCAzMjc2NSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjIgMzI3NjU6IDMyNzY3IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgcmVzX2Nsb3N1cmUpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDMyNzY3IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjM2FlYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jCkBAIC0wLDAgKzEsODYgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHBhc3Npbmcgb2YgbXVsdGlwbGUgc2lnbmVkIHNob3J0L2NoYXIgdmFsdWVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSMTMyMjEuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMxMTI5ICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzaWduZWQgc2hvcnQgdGVzdF9mdW5jX2ZuKHNpZ25lZCBjaGFyIGExLCBzaWduZWQgc2hvcnQgYTIsCisJCQkgIHNpZ25lZCBjaGFyIGEzLCBzaWduZWQgc2hvcnQgYTQpCit7CisgIHNpZ25lZCBzaG9ydCByZXN1bHQ7CisKKyAgcmVzdWx0ID0gYTEgKyBhMiArIGEzICsgYTQ7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWRcbiIsIGExLCBhMiwgYTMsIGE0LCByZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIHZvaWQgdGVzdF9mdW5jX2duKGZmaV9jaWYgKmNpZiBfX1VOVVNFRF9fLCB2b2lkICpydmFsLCB2b2lkICoqYXZhbHMsCisJCQkgdm9pZCAqZGF0YSBfX1VOVVNFRF9fKQoreworICBzaWduZWQgY2hhciBhMSwgYTM7CisgIHNpZ25lZCBzaG9ydCBhMiwgYTQ7CisKKyAgYTEgPSAqKHNpZ25lZCBjaGFyICopYXZhbHNbMF07CisgIGEyID0gKihzaWduZWQgc2hvcnQgKilhdmFsc1sxXTsKKyAgYTMgPSAqKHNpZ25lZCBjaGFyICopYXZhbHNbMl07CisgIGE0ID0gKihzaWduZWQgc2hvcnQgKilhdmFsc1szXTsKKworICAqKGZmaV9hcmcgKilydmFsID0gdGVzdF9mdW5jX2ZuKGExLCBhMiwgYTMsIGE0KTsKKworfQorCit0eXBlZGVmIHNpZ25lZCBzaG9ydCAoKnRlc3RfdHlwZSkoc2lnbmVkIGNoYXIsIHNpZ25lZCBzaG9ydCwKKwkJCQkgIHNpZ25lZCBjaGFyLCBzaWduZWQgc2hvcnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQgKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbNV07CisgIGZmaV9hcmcgcmVzX2NhbGw7CisgIHNpZ25lZCBjaGFyIGEsIGM7CisgIHNpZ25lZCBzaG9ydCBiLCBkLCByZXNfY2xvc3VyZTsKKworICBhID0gMTsKKyAgYiA9IDMyNzY1OworICBjID0gMTI3OworICBkID0gLTEyODsKKworICBhcmdzX2RibFswXSA9ICZhOworICBhcmdzX2RibFsxXSA9ICZiOworICBhcmdzX2RibFsyXSA9ICZjOworICBhcmdzX2RibFszXSA9ICZkOworICBhcmdzX2RibFs0XSA9IE5VTEw7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3NjaGFyOworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfc2NoYXI7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgIGNsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsCisJCSAgICAgJmZmaV90eXBlX3NzaG9ydCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTih0ZXN0X2Z1bmNfZm4pLCAmcmVzX2NhbGwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMzI3NjUgMTI3IC0xMjg6IDMyNzY1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgKHNpZ25lZCBzaG9ydClyZXNfY2FsbCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMzI3NjUiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIHRlc3RfZnVuY19nbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzX2Nsb3N1cmUgPSAoKigodGVzdF90eXBlKWNvZGUpKSgxLCAzMjc2NSwgMTI3LCAtMTI4KTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSAzMjc2NSAxMjcgLTEyODogMzI3NjUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfY2xvc3VyZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMzI3NjUiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDljMDJjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMKQEAgLTAsMCArMSw5MSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcGFzc2luZyBvZiBtdWx0aXBsZSB1bnNpZ25lZCBjaGFyIHZhbHVlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlQUjEzMjIxLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTEyOSAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordW5zaWduZWQgY2hhciB0ZXN0X2Z1bmNfZm4odW5zaWduZWQgY2hhciBhMSwgdW5zaWduZWQgY2hhciBhMiwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgYTMsIHVuc2lnbmVkIGNoYXIgYTQpCit7CisgIHVuc2lnbmVkIGNoYXIgcmVzdWx0OworCisgIHJlc3VsdCA9IGExICsgYTIgKyBhMyArIGE0OworCisgIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkXG4iLCBhMSwgYTIsIGEzLCBhNCwgcmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworCit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZnVuY19nbihmZmlfY2lmICpjaWYgX19VTlVTRURfXywgdm9pZCAqcnZhbCwgdm9pZCAqKmF2YWxzLAorCQkJIHZvaWQgKmRhdGEgX19VTlVTRURfXykKK3sKKyAgdW5zaWduZWQgY2hhciBhMSwgYTIsIGEzLCBhNDsKKworICBhMSA9ICoodW5zaWduZWQgY2hhciAqKWF2YWxzWzBdOworICBhMiA9ICoodW5zaWduZWQgY2hhciAqKWF2YWxzWzFdOworICBhMyA9ICoodW5zaWduZWQgY2hhciAqKWF2YWxzWzJdOworICBhNCA9ICoodW5zaWduZWQgY2hhciAqKWF2YWxzWzNdOworCisgICooZmZpX2FyZyAqKXJ2YWwgPSB0ZXN0X2Z1bmNfZm4oYTEsIGEyLCBhMywgYTQpOworCit9CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAoKnRlc3RfdHlwZSkodW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwKKwkJCQkgICB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKTsKKwordm9pZCB0ZXN0X2Z1bmMoZmZpX2NpZiAqY2lmIF9fVU5VU0VEX18sIHZvaWQgKnJ2YWwgX19VTlVTRURfXywgdm9pZCAqKmF2YWxzLAorCSAgICAgICB2b2lkICpkYXRhIF9fVU5VU0VEX18pCit7CisgIHByaW50ZigiJWQgJWQgJWQgJWRcbiIsICoodW5zaWduZWQgY2hhciAqKWF2YWxzWzBdLAorCSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1sxXSwgKih1bnNpZ25lZCBjaGFyICopYXZhbHNbMl0sCisJICoodW5zaWduZWQgY2hhciAqKWF2YWxzWzNdKTsKK30KK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCAqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1s1XTsKKyAgZmZpX2FyZyByZXNfY2FsbDsKKyAgdW5zaWduZWQgY2hhciBhLCBiLCBjLCBkLCByZXNfY2xvc3VyZTsKKworICBhID0gMTsKKyAgYiA9IDI7CisgIGMgPSAxMjc7CisgIGQgPSAxMjU7CisKKyAgYXJnc19kYmxbMF0gPSAmYTsKKyAgYXJnc19kYmxbMV0gPSAmYjsKKyAgYXJnc19kYmxbMl0gPSAmYzsKKyAgYXJnc19kYmxbM10gPSAmZDsKKyAgYXJnc19kYmxbNF0gPSBOVUxMOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xfYXJnX3R5cGVzWzRdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwKKwkJICAgICAmZmZpX3R5cGVfdWNoYXIsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4odGVzdF9mdW5jX2ZuKSwgJnJlc19jYWxsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMTI3IDEyNTogMjU1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgKHVuc2lnbmVkIGNoYXIpcmVzX2NhbGwpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDI1NSIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgdGVzdF9mdW5jX2duLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXNfY2xvc3VyZSA9ICgqKCh0ZXN0X3R5cGUpY29kZSkpKDEsIDIsIDEyNywgMTI1KTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSAyIDEyNyAxMjU6IDI1NSIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIHJlc19jbG9zdXJlKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyNTUiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTBjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMKQEAgLTAsMCArMSw3NCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcGFzc2luZyBvZiBtdWx0aXBsZSB1bnNpZ25lZCBzaG9ydCB2YWx1ZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJUFIxMzIyMS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzExMjkgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3Vuc2lnbmVkIHNob3J0IHRlc3RfZnVuY19mbih1bnNpZ25lZCBzaG9ydCBhMSwgdW5zaWduZWQgc2hvcnQgYTIpCit7CisgIHVuc2lnbmVkIHNob3J0IHJlc3VsdDsKKworICByZXN1bHQgPSBhMSArIGEyOworCisgIHByaW50ZigiJWQgJWQ6ICVkXG4iLCBhMSwgYTIsIHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfZ24oZmZpX2NpZiAqY2lmIF9fVU5VU0VEX18sIHZvaWQgKnJ2YWwsIHZvaWQgKiphdmFscywKKwkJCSB2b2lkICpkYXRhIF9fVU5VU0VEX18pCit7CisgIHVuc2lnbmVkIHNob3J0IGExLCBhMjsKKworICBhMSA9ICoodW5zaWduZWQgc2hvcnQgKilhdmFsc1swXTsKKyAgYTIgPSAqKHVuc2lnbmVkIHNob3J0ICopYXZhbHNbMV07CisKKyAgKihmZmlfYXJnICopcnZhbCA9IHRlc3RfZnVuY19mbihhMSwgYTIpOworCit9CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgKCp0ZXN0X3R5cGUpKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCAqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1szXTsKKyAgZmZpX2FyZyByZXNfY2FsbDsKKyAgdW5zaWduZWQgc2hvcnQgYSwgYiwgcmVzX2Nsb3N1cmU7CisKKyAgYSA9IDI7CisgIGIgPSAzMjc2NTsKKworICBhcmdzX2RibFswXSA9ICZhOworICBhcmdzX2RibFsxXSA9ICZiOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwKKwkJICAgICAmZmZpX3R5cGVfdXNob3J0LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHRlc3RfZnVuY19mbiksICZyZXNfY2FsbCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMiAzMjc2NTogMzI3NjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCAodW5zaWduZWQgc2hvcnQpcmVzX2NhbGwpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDMyNzY3IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCB0ZXN0X2Z1bmNfZ24sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlc19jbG9zdXJlID0gKCooKHRlc3RfdHlwZSljb2RlKSkoMiwgMzI3NjUpOworICAvKiB7IGRnLW91dHB1dCAiXG4yIDMyNzY1OiAzMjc2NyIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIHJlc19jbG9zdXJlKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAzMjc2NyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg4ZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYwpAQCAtMCwwICsxLDg2IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBwYXNzaW5nIG9mIG11bHRpcGxlIHVuc2lnbmVkIHNob3J0L2NoYXIgdmFsdWVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSMTMyMjEuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMxMTI5ICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit1bnNpZ25lZCBzaG9ydCB0ZXN0X2Z1bmNfZm4odW5zaWduZWQgY2hhciBhMSwgdW5zaWduZWQgc2hvcnQgYTIsCisJCQkgICAgdW5zaWduZWQgY2hhciBhMywgdW5zaWduZWQgc2hvcnQgYTQpCit7CisgIHVuc2lnbmVkIHNob3J0IHJlc3VsdDsKKworICByZXN1bHQgPSBhMSArIGEyICsgYTMgKyBhNDsKKworICBwcmludGYoIiVkICVkICVkICVkOiAlZFxuIiwgYTEsIGEyLCBhMywgYTQsIHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfZ24oZmZpX2NpZiAqY2lmIF9fVU5VU0VEX18sIHZvaWQgKnJ2YWwsIHZvaWQgKiphdmFscywKKwkJCSB2b2lkICpkYXRhIF9fVU5VU0VEX18pCit7CisgIHVuc2lnbmVkIGNoYXIgYTEsIGEzOworICB1bnNpZ25lZCBzaG9ydCBhMiwgYTQ7CisKKyAgYTEgPSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1swXTsKKyAgYTIgPSAqKHVuc2lnbmVkIHNob3J0ICopYXZhbHNbMV07CisgIGEzID0gKih1bnNpZ25lZCBjaGFyICopYXZhbHNbMl07CisgIGE0ID0gKih1bnNpZ25lZCBzaG9ydCAqKWF2YWxzWzNdOworCisgICooZmZpX2FyZyAqKXJ2YWwgPSB0ZXN0X2Z1bmNfZm4oYTEsIGEyLCBhMywgYTQpOworCit9CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgKCp0ZXN0X3R5cGUpKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIHNob3J0LAorCQkJCSAgIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIHNob3J0KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkICogYXJnc19kYmxbNV07CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzVdOworICBmZmlfYXJnIHJlc19jYWxsOworICB1bnNpZ25lZCBjaGFyIGEsIGM7CisgIHVuc2lnbmVkIHNob3J0IGIsIGQsIHJlc19jbG9zdXJlOworCisgIGEgPSAxOworICBiID0gMjsKKyAgYyA9IDEyNzsKKyAgZCA9IDEyODsKKworICBhcmdzX2RibFswXSA9ICZhOworICBhcmdzX2RibFsxXSA9ICZiOworICBhcmdzX2RibFsyXSA9ICZjOworICBhcmdzX2RibFszXSA9ICZkOworICBhcmdzX2RibFs0XSA9IE5VTEw7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsCisJCSAgICAgJmZmaV90eXBlX3VzaG9ydCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTih0ZXN0X2Z1bmNfZm4pLCAmcmVzX2NhbGwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAxMjcgMTI4OiAyNTgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCAodW5zaWduZWQgc2hvcnQpcmVzX2NhbGwpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDI1OCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgdGVzdF9mdW5jX2duLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXNfY2xvc3VyZSA9ICgqKCh0ZXN0X3R5cGUpY29kZSkpKDEsIDIsIDEyNywgMTI4KTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSAyIDEyNyAxMjg6IDI1OCIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIHJlc19jbG9zdXJlKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyNTgiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkZDM1MwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMKQEAgLTAsMCArMSw3NCBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBwb2ludGVyIGFyZ3VtZW50cy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUJsYWtlIENoYWZmaW4gNi82LzIwMDcJKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3ZvaWQqIGNsc19wb2ludGVyX2ZuKHZvaWQqIGExLCB2b2lkKiBhMikKK3sKKwl2b2lkKglyZXN1bHQJPSAodm9pZCopKChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMik7CisKKwlwcmludGYoIjB4JTA4eCAweCUwOHg6IDB4JTA4eFxuIiwgCisJICAgICAgICh1bnNpZ25lZCBpbnQpKHVpbnRwdHJfdCkgYTEsCisgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSh1aW50cHRyX3QpIGEyLAorICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkodWludHB0cl90KSByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19wb2ludGVyX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCAKKwkgICAgICAgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJdm9pZCoJYTEJPSAqKHZvaWQqKikoYXJnc1swXSk7CisJdm9pZCoJYTIJPSAqKHZvaWQqKikoYXJnc1sxXSk7CisKKwkqKHZvaWQqKilyZXNwID0gY2xzX3BvaW50ZXJfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZgljaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUqCXBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKgkJCWFyZ3NbM107CisvLwlmZmlfdHlwZQkJY2xzX3BvaW50ZXJfdHlwZTsKKwlmZmlfdHlwZSoJCWFyZ190eXBlc1szXTsKKworLyoJY2xzX3BvaW50ZXJfdHlwZS5zaXplID0gc2l6ZW9mKHZvaWQqKTsKKwljbHNfcG9pbnRlcl90eXBlLmFsaWdubWVudCA9IDA7CisJY2xzX3BvaW50ZXJfdHlwZS50eXBlID0gRkZJX1RZUEVfUE9JTlRFUjsKKwljbHNfcG9pbnRlcl90eXBlLmVsZW1lbnRzID0gTlVMTDsqLworCisJdm9pZCoJYXJnMQk9ICh2b2lkKikweDEyMzQ1Njc4OworCXZvaWQqCWFyZzIJPSAodm9pZCopMHg4OWFiY2RlZjsKKwlmZmlfYXJnCXJlcwkJPSAwOworCisJYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CisJYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3BvaW50ZXI7CisJYXJnX3R5cGVzWzJdID0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZmZmlfdHlwZV9wb2ludGVyLAorCQlhcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKwlhcmdzWzBdID0gJmFyZzE7CisJYXJnc1sxXSA9ICZhcmcyOworCWFyZ3NbMl0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19wb2ludGVyX2ZuKSwgJnJlcywgYXJncyk7CisJLyogeyBkZy1vdXRwdXQgIjB4MTIzNDU2NzggMHg4OWFiY2RlZjogMHg5YmUwMjQ2NyIgfSAqLworCXByaW50ZigicmVzOiAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIHJlcyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAweDliZTAyNDY3IiB9ICovCisKKwlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19wb2ludGVyX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzID0gKGZmaV9hcmcpKCh2b2lkKigqKSh2b2lkKiwgdm9pZCopKShjb2RlKSkoYXJnMSwgYXJnMik7CisJLyogeyBkZy1vdXRwdXQgIlxuMHgxMjM0NTY3OCAweDg5YWJjZGVmOiAweDliZTAyNDY3IiB9ICovCisJcHJpbnRmKCJyZXM6IDB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCkgcmVzKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDB4OWJlMDI0NjciIH0gKi8KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTdmMjcxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYwpAQCAtMCwwICsxLDE0MCBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBwb2ludGVyIGFyZ3VtZW50cyBhY3Jvc3MgbXVsdGlwbGUgaGlkZW91cyBzdGFjayBmcmFtZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluIDYvNy8yMDA3CSovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogeHNjYWxlKi0qLSogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMJbG9uZyBkdW1teVZhcjsKKworbG9uZyBkdW1teV9mdW5jKAorCWxvbmcgZG91YmxlIGExLCBjaGFyIGIxLAorCWxvbmcgZG91YmxlIGEyLCBjaGFyIGIyLAorCWxvbmcgZG91YmxlIGEzLCBjaGFyIGIzLAorCWxvbmcgZG91YmxlIGE0LCBjaGFyIGI0KQoreworCXJldHVybiBhMSArIGIxICsgYTIgKyBiMiArIGEzICsgYjMgKyBhNCArIGI0OworfQorCit2b2lkKiBjbHNfcG9pbnRlcl9mbjIodm9pZCogYTEsIHZvaWQqIGEyKQoreworCWxvbmcgZG91YmxlCXRyYW1wbGUxCT0gKGludHB0cl90KWExICsgKGludHB0cl90KWEyOworCWNoYXIJCXRyYW1wbGUyCT0gKChjaGFyKikmYTEpWzBdICsgKChjaGFyKikmYTIpWzBdOworCWxvbmcgZG91YmxlCXRyYW1wbGUzCT0gKGludHB0cl90KXRyYW1wbGUxICsgKGludHB0cl90KWExOworCWNoYXIJCXRyYW1wbGU0CT0gdHJhbXBsZTIgKyAoKGNoYXIqKSZhMSlbMV07CisJbG9uZyBkb3VibGUJdHJhbXBsZTUJPSAoaW50cHRyX3QpdHJhbXBsZTMgKyAoaW50cHRyX3QpYTI7CisJY2hhcgkJdHJhbXBsZTYJPSB0cmFtcGxlNCArICgoY2hhciopJmEyKVsxXTsKKwlsb25nIGRvdWJsZQl0cmFtcGxlNwk9IChpbnRwdHJfdCl0cmFtcGxlNSArIChpbnRwdHJfdCl0cmFtcGxlMTsKKwljaGFyCQl0cmFtcGxlOAk9IHRyYW1wbGU2ICsgdHJhbXBsZTI7CisKKwlkdW1teVZhcgk9IGR1bW15X2Z1bmModHJhbXBsZTEsIHRyYW1wbGUyLCB0cmFtcGxlMywgdHJhbXBsZTQsCisJCXRyYW1wbGU1LCB0cmFtcGxlNiwgdHJhbXBsZTcsIHRyYW1wbGU4KTsKKworCXZvaWQqCXJlc3VsdAk9ICh2b2lkKikoKGludHB0cl90KWExICsgKGludHB0cl90KWEyKTsKKworCXByaW50ZigiMHglMDh4IDB4JTA4eDogMHglMDh4XG4iLCAKKwkgICAgICAgKHVuc2lnbmVkIGludCkodWludHB0cl90KSBhMSwKKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKHVpbnRwdHJfdCkgYTIsCisgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSh1aW50cHRyX3QpIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBjbHNfcG9pbnRlcl9mbjEodm9pZCogYTEsIHZvaWQqIGEyKQoreworCWxvbmcgZG91YmxlCXRyYW1wbGUxCT0gKGludHB0cl90KWExICsgKGludHB0cl90KWEyOworCWNoYXIJCXRyYW1wbGUyCT0gKChjaGFyKikmYTEpWzBdICsgKChjaGFyKikmYTIpWzBdOworCWxvbmcgZG91YmxlCXRyYW1wbGUzCT0gKGludHB0cl90KXRyYW1wbGUxICsgKGludHB0cl90KWExOworCWNoYXIJCXRyYW1wbGU0CT0gdHJhbXBsZTIgKyAoKGNoYXIqKSZhMSlbMV07CisJbG9uZyBkb3VibGUJdHJhbXBsZTUJPSAoaW50cHRyX3QpdHJhbXBsZTMgKyAoaW50cHRyX3QpYTI7CisJY2hhcgkJdHJhbXBsZTYJPSB0cmFtcGxlNCArICgoY2hhciopJmEyKVsxXTsKKwlsb25nIGRvdWJsZQl0cmFtcGxlNwk9IChpbnRwdHJfdCl0cmFtcGxlNSArIChpbnRwdHJfdCl0cmFtcGxlMTsKKwljaGFyCQl0cmFtcGxlOAk9IHRyYW1wbGU2ICsgdHJhbXBsZTI7CisKKwlkdW1teVZhcgk9IGR1bW15X2Z1bmModHJhbXBsZTEsIHRyYW1wbGUyLCB0cmFtcGxlMywgdHJhbXBsZTQsCisJCXRyYW1wbGU1LCB0cmFtcGxlNiwgdHJhbXBsZTcsIHRyYW1wbGU4KTsKKworCXZvaWQqCXJlc3VsdAk9ICh2b2lkKikoKGludHB0cl90KWExICsgKGludHB0cl90KWEyKTsKKworCXByaW50ZigiMHglMDh4IDB4JTA4eDogMHglMDh4XG4iLAorICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoaW50cHRyX3QpIGExLAorICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoaW50cHRyX3QpIGEyLAorICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoaW50cHRyX3QpIHJlc3VsdCk7CisKKwlyZXN1bHQJPSBjbHNfcG9pbnRlcl9mbjIocmVzdWx0LCBhMSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3BvaW50ZXJfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIAorCSAgICAgICB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwl2b2lkKglhMQk9ICoodm9pZCoqKShhcmdzWzBdKTsKKwl2b2lkKglhMgk9ICoodm9pZCoqKShhcmdzWzFdKTsKKworCWxvbmcgZG91YmxlCXRyYW1wbGUxCT0gKGludHB0cl90KWExICsgKGludHB0cl90KWEyOworCWNoYXIJCXRyYW1wbGUyCT0gKChjaGFyKikmYTEpWzBdICsgKChjaGFyKikmYTIpWzBdOworCWxvbmcgZG91YmxlCXRyYW1wbGUzCT0gKGludHB0cl90KXRyYW1wbGUxICsgKGludHB0cl90KWExOworCWNoYXIJCXRyYW1wbGU0CT0gdHJhbXBsZTIgKyAoKGNoYXIqKSZhMSlbMV07CisJbG9uZyBkb3VibGUJdHJhbXBsZTUJPSAoaW50cHRyX3QpdHJhbXBsZTMgKyAoaW50cHRyX3QpYTI7CisJY2hhcgkJdHJhbXBsZTYJPSB0cmFtcGxlNCArICgoY2hhciopJmEyKVsxXTsKKwlsb25nIGRvdWJsZQl0cmFtcGxlNwk9IChpbnRwdHJfdCl0cmFtcGxlNSArIChpbnRwdHJfdCl0cmFtcGxlMTsKKwljaGFyCQl0cmFtcGxlOAk9IHRyYW1wbGU2ICsgdHJhbXBsZTI7CisKKwlkdW1teVZhcgk9IGR1bW15X2Z1bmModHJhbXBsZTEsIHRyYW1wbGUyLCB0cmFtcGxlMywgdHJhbXBsZTQsCisJCXRyYW1wbGU1LCB0cmFtcGxlNiwgdHJhbXBsZTcsIHRyYW1wbGU4KTsKKworCSoodm9pZCoqKXJlc3AgPSBjbHNfcG9pbnRlcl9mbjEoYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZgljaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUqCXBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKgkJCWFyZ3NbM107CisvLwlmZmlfdHlwZQkJY2xzX3BvaW50ZXJfdHlwZTsKKwlmZmlfdHlwZSoJCWFyZ190eXBlc1szXTsKKworLyoJY2xzX3BvaW50ZXJfdHlwZS5zaXplID0gc2l6ZW9mKHZvaWQqKTsKKwljbHNfcG9pbnRlcl90eXBlLmFsaWdubWVudCA9IDA7CisJY2xzX3BvaW50ZXJfdHlwZS50eXBlID0gRkZJX1RZUEVfUE9JTlRFUjsKKwljbHNfcG9pbnRlcl90eXBlLmVsZW1lbnRzID0gTlVMTDsqLworCisJdm9pZCoJYXJnMQk9ICh2b2lkKikweDAxMjM0NTY3OworCXZvaWQqCWFyZzIJPSAodm9pZCopMHg4OWFiY2RlZjsKKwlmZmlfYXJnCXJlcwkJPSAwOworCisJYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CisJYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3BvaW50ZXI7CisJYXJnX3R5cGVzWzJdID0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZmZmlfdHlwZV9wb2ludGVyLAorCQlhcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKwlhcmdzWzBdID0gJmFyZzE7CisJYXJnc1sxXSA9ICZhcmcyOworCWFyZ3NbMl0gPSBOVUxMOworCisJcHJpbnRmKCJcbiIpOworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfcG9pbnRlcl9mbjEpLCAmcmVzLCBhcmdzKTsKKworCXByaW50ZigicmVzOiAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIHJlcyk7CisJLy8geyBkZy1vdXRwdXQgIlxuMHgwMTIzNDU2NyAweDg5YWJjZGVmOiAweDhhY2YxMzU2IiB9CisJLy8geyBkZy1vdXRwdXQgIlxuMHg4YWNmMTM1NiAweDAxMjM0NTY3OiAweDhiZjI1OGJkIiB9CisJLy8geyBkZy1vdXRwdXQgIlxucmVzOiAweDhiZjI1OGJkIiB9CisKKwlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19wb2ludGVyX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzID0gKGZmaV9hcmcpKCh2b2lkKigqKSh2b2lkKiwgdm9pZCopKShjb2RlKSkoYXJnMSwgYXJnMik7CisKKwlwcmludGYoInJlczogMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSByZXMpOworCS8vIHsgZGctb3V0cHV0ICJcbjB4MDEyMzQ1NjcgMHg4OWFiY2RlZjogMHg4YWNmMTM1NiIgfQorCS8vIHsgZGctb3V0cHV0ICJcbjB4OGFjZjEzNTYgMHgwMTIzNDU2NzogMHg4YmYyNThiZCIgfQorCS8vIHsgZGctb3V0cHV0ICJcbnJlczogMHg4YmYyNThiZCIgfQorCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5ODZiMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIHNjaGFyLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMxMTA4CSAqLworCisKKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xzX3JldF9zY2hhcl9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyopcmVzcCA9ICooc2lnbmVkIGNoYXIgKilhcmdzWzBdOworICBwcmludGYoIiVkOiAlZFxuIiwqKHNpZ25lZCBjaGFyICopYXJnc1swXSwKKwkgKGludCkqKGZmaV9hcmcgKikocmVzcCkpOworfQordHlwZWRlZiBzaWduZWQgY2hhciAoKmNsc19yZXRfc2NoYXIpKHNpZ25lZCBjaGFyKTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1syXTsKKyAgc2lnbmVkIGNoYXIgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9zY2hhcjsKKyAgY2xfYXJnX3R5cGVzWzFdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfc2NoYXIsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19yZXRfc2NoYXJfZm4sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbHNfcmV0X3NjaGFyKWNvZGUpKSgxMjcpOworICAvKiB7IGRnLW91dHB1dCAiMTI3OiAxMjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEyNyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2UxM2I3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYwpAQCAtMCwwICsxLDQyIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBzaW50MzIuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzExMDgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfc2ludF9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgKihmZmlfYXJnKilyZXNwID0gKihzaWduZWQgaW50ICopYXJnc1swXTsKKyAgcHJpbnRmKCIlZDogJWRcbiIsKihzaWduZWQgaW50ICopYXJnc1swXSwKKwkgKGludCkqKGZmaV9hcmcgKikocmVzcCkpOworfQordHlwZWRlZiBzaWduZWQgaW50ICgqY2xzX3JldF9zaW50KShzaWduZWQgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1syXTsKKyAgc2lnbmVkIGludCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19yZXRfc2ludF9mbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsc19yZXRfc2ludCljb2RlKSkoNjU1MzQpOworICAvKiB7IGRnLW91dHB1dCAiNjU1MzQ6IDY1NTM0IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDY1NTM0IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDZkNTdlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIHNzaG9ydC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTEwOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xzX3JldF9zc2hvcnRfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgKihmZmlfYXJnKilyZXNwID0gKihzaWduZWQgc2hvcnQgKilhcmdzWzBdOworICBwcmludGYoIiVkOiAlZFxuIiwqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbMF0sCisJIChpbnQpKihmZmlfYXJnICopKHJlc3ApKTsKK30KK3R5cGVkZWYgc2lnbmVkIHNob3J0ICgqY2xzX3JldF9zc2hvcnQpKHNpZ25lZCBzaG9ydCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMl07CisgIHNpZ25lZCBzaG9ydCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfc3Nob3J0LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3NzaG9ydF9mbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsc19yZXRfc3Nob3J0KWNvZGUpKSgyNTUpOworICAvKiB7IGRnLW91dHB1dCAiMjU1OiAyNTUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjU1IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzMTdlNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIHVjaGFyLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZCBjbHNfcmV0X3VjaGFyX2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgKihmZmlfYXJnKilyZXNwID0gKih1bnNpZ25lZCBjaGFyICopYXJnc1swXTsKKyAgcHJpbnRmKCIlZDogJWRcbiIsKih1bnNpZ25lZCBjaGFyICopYXJnc1swXSwKKwkgKGludCkqKGZmaV9hcmcgKikocmVzcCkpOworfQordHlwZWRlZiB1bnNpZ25lZCBjaGFyICgqY2xzX3JldF91Y2hhcikodW5zaWduZWQgY2hhcik7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMl07CisgIHVuc2lnbmVkIGNoYXIgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xfYXJnX3R5cGVzWzFdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfdWNoYXIsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19yZXRfdWNoYXJfZm4sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbHNfcmV0X3VjaGFyKWNvZGUpKSgxMjcpOworICAvKiB7IGRnLW91dHB1dCAiMTI3OiAxMjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTI3IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NWNmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIHVpbnQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfdWludF9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgKihmZmlfYXJnICopcmVzcCA9ICoodW5zaWduZWQgaW50ICopYXJnc1swXTsKKworICBwcmludGYoIiVkOiAlZFxuIiwqKHVuc2lnbmVkIGludCAqKWFyZ3NbMF0sCisJIChpbnQpKihmZmlfYXJnICopKHJlc3ApKTsKK30KK3R5cGVkZWYgdW5zaWduZWQgaW50ICgqY2xzX3JldF91aW50KSh1bnNpZ25lZCBpbnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzJdOworICB1bnNpZ25lZCBpbnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91aW50OworICBjbF9hcmdfdHlwZXNbMV0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV91aW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3VpbnRfZm4sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbHNfcmV0X3VpbnQpY29kZSkpKDIxNDc0ODM2NDcpOworICAvKiB7IGRnLW91dHB1dCAiMjE0NzQ4MzY0NzogMjE0NzQ4MzY0NyIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMTQ3NDgzNjQ3IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzVhYjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGxvbmcgbG9uZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRpb25zICItV25vLWZvcm1hdCIgeyB0YXJnZXQgYWxwaGEqLWRlYy1vc2YqIH0gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xzX3JldF91bG9uZ2xvbmdfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsCisJCQkJIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKXJlc3A9ICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMF07CisKKyAgcHJpbnRmKCIlIiBQUkl1TEwgIjogJSIgUFJJdUxMICJcbiIsKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdLAorCSAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShyZXNwKSk7Cit9Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAoKmNsc19yZXRfdWxvbmdsb25nKSh1bnNpZ25lZCBsb25nIGxvbmcpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzJdOworICB1bnNpZ25lZCBsb25nIGxvbmcgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3VpbnQ2NCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19yZXRfdWxvbmdsb25nX2ZuLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKyAgcmVzID0gKCooKGNsc19yZXRfdWxvbmdsb25nKWNvZGUpKSgyMTRMTCk7CisgIC8qIHsgZGctb3V0cHV0ICIyMTQ6IDIxNCIgfSAqLworICBwcmludGYoInJlczogJSIgUFJJZExMICJcbiIsIHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjE0IiB9ICovCisKKyAgcmVzID0gKCooKGNsc19yZXRfdWxvbmdsb25nKWNvZGUpKSg5MjIzMzcyMDM1ODU0Nzc1ODA4TEwpOworICAvKiB7IGRnLW91dHB1dCAiXG45MjIzMzcyMDM1ODU0Nzc1ODA4OiA5MjIzMzcyMDM1ODU0Nzc1ODA4IiB9ICovCisgIHByaW50ZigicmVzOiAlIiBQUklkTEwgIlxuIiwgcmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA5MjIzMzcyMDM1ODU0Nzc1ODA4IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDAxMDBlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIHVzaG9ydC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xzX3JldF91c2hvcnRfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgKihmZmlfYXJnKilyZXNwID0gKih1bnNpZ25lZCBzaG9ydCAqKWFyZ3NbMF07CisKKyAgcHJpbnRmKCIlZDogJWRcbiIsKih1bnNpZ25lZCBzaG9ydCAqKWFyZ3NbMF0sCisJIChpbnQpKihmZmlfYXJnICopKHJlc3ApKTsKK30KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgKCpjbHNfcmV0X3VzaG9ydCkodW5zaWduZWQgc2hvcnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzJdOworICB1bnNpZ25lZCBzaG9ydCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfdXNob3J0LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3VzaG9ydF9mbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsc19yZXRfdXNob3J0KWNvZGUpKSg2NTUzNSk7CisgIC8qIHsgZGctb3V0cHV0ICI2NTUzNTogNjU1MzUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNjU1MzUiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxYTNmZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMKQEAgLTAsMCArMSwzNyBAQAorLyogQXJlYToJCWZmaV9wcmVwX2NpZiwgZmZpX3ByZXBfY2xvc3VyZQorICAgUHVycG9zZToJCVRlc3QgZXJyb3IgcmV0dXJuIGZvciBiYWQgQUJJcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUJsYWtlIENoYWZmaW4gNi82LzIwMDcJICovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgKi0qLSogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorZHVtbXlfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AgX19VTlVTRURfXywgCisJIHZvaWQqKiBhcmdzIF9fVU5VU0VEX18sIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7fQorCitpbnQgbWFpbiAodm9pZCkKK3sKKwlmZmlfY2lmIGNpZjsKKyAgICAgICAgdm9pZCAqY29kZTsKKwlmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworCXZvaWQqIGFyZ3NbMV07CisJZmZpX3R5cGUqIGFyZ190eXBlc1sxXTsKKworCWFyZ190eXBlc1swXSA9IE5VTEw7CisJYXJnc1swXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgMjU1LCAwLCAmZmZpX3R5cGVfdm9pZCwKKwkJYXJnX3R5cGVzKSA9PSBGRklfQkFEX0FCSSk7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAwLCAmZmZpX3R5cGVfdm9pZCwKKwkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJY2lmLmFiaT0gMjU1OworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBkdW1teV9mbiwgTlVMTCwgY29kZSkgPT0gRkZJX0JBRF9BQkkpOworCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyZmM1NAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEFyZWE6CQlmZmlfcHJlcF9jaWYKKyAgIFB1cnBvc2U6CQlUZXN0IGVycm9yIHJldHVybiBmb3IgYmFkIHR5cGVkZWZzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbiA2LzYvMjAwNwkgKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCAqLSotKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworCWZmaV90eXBlKiBhcmdfdHlwZXNbMV07CisKKwlhcmdfdHlwZXNbMF0gPSBOVUxMOworCisJZmZpX3R5cGUJYmFkVHlwZQk9IGZmaV90eXBlX3ZvaWQ7CisKKwliYWRUeXBlLnNpemUgPSAwOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMCwgJmJhZFR5cGUsCisJCWFyZ190eXBlcykgPT0gRkZJX0JBRF9UWVBFREVGKTsKKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNiOTg0OQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaApAQCAtMCwwICsxLDEyOSBAQAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlICJmZmljb25maWcuaCIKKworI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIEhBVkVfSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworI2RlZmluZSBNQVhfQVJHUyAyNTYKKworI2RlZmluZSBDSEVDSyh4KSAhKHgpID8gYWJvcnQoKSA6IDAKKworLyogRGVmaW5lIF9fVU5VU0VEX18gdGhhdCBhbHNvIG90aGVyIGNvbXBpbGVycyB0aGFuIGdjYyBjYW4gcnVuIHRoZSB0ZXN0cy4gICovCisjdW5kZWYgX19VTlVTRURfXworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIF9fVU5VU0VEX18gX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisjZWxzZQorI2RlZmluZSBfX1VOVVNFRF9fCisjZW5kaWYKKworLyogUHJlZmVyIE1BUF9BTk9OKFlNT1VTKSB0byAvZGV2L3plcm8sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8ga2VlcCBhCisgICBmaWxlIG9wZW4uICAqLworI2lmZGVmIEhBVkVfTU1BUF9BTk9OCisjIHVuZGVmIEhBVkVfTU1BUF9ERVZfWkVSTworCisjIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisjIGlmbmRlZiBNQVBfRkFJTEVECisjICBkZWZpbmUgTUFQX0ZBSUxFRCAtMQorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCAoTUFQX0FOT05ZTU9VUykgJiYgZGVmaW5lZCAoTUFQX0FOT04pCisjICBkZWZpbmUgTUFQX0FOT05ZTU9VUyBNQVBfQU5PTgorIyBlbmRpZgorIyBkZWZpbmUgVVNJTkdfTU1BUAorCisjZW5kaWYKKworI2lmZGVmIEhBVkVfTU1BUF9ERVZfWkVSTworCisjIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisjIGlmbmRlZiBNQVBfRkFJTEVECisjICBkZWZpbmUgTUFQX0ZBSUxFRCAtMQorIyBlbmRpZgorIyBkZWZpbmUgVVNJTkdfTU1BUAorCisjZW5kaWYKKworLyogTWluR1cga2x1ZGdlLiAgKi8KKyNpZmRlZiBfV0lONjQKKyNkZWZpbmUgUFJJZExMICJJNjRkIgorI2RlZmluZSBQUkl1TEwgIkk2NHUiCisjZWxzZQorI2RlZmluZSBQUklkTEwgImxsZCIKKyNkZWZpbmUgUFJJdUxMICJsbHUiCisjZW5kaWYKKworLyogVHJ1NjQgVU5JWCBrbHVkZ2UuICAqLworI2lmIGRlZmluZWQoX19hbHBoYV9fKSAmJiBkZWZpbmVkKF9fb3NmX18pCisvKiBUcnU2NCBVTklYIFY0LjAgZG9lc24ndCBzdXBwb3J0ICVsbGQvJWxsZCwgYnV0IGxvbmcgaXMgNjQtYml0LiAgKi8KKyN1bmRlZiBQUklkTEwKKyNkZWZpbmUgUFJJZExMICJsZCIKKyN1bmRlZiBQUkl1TEwKKyNkZWZpbmUgUFJJdUxMICJsdSIKKyNkZWZpbmUgUFJJZDY0ICJsZCIKKyNkZWZpbmUgUFJJdTY0ICJsdSIKKyNkZWZpbmUgUFJJdVBUUiAibHUiCisjZW5kaWYKKworLyogUEEgSFAtVVgga2x1ZGdlLiAgKi8KKyNpZiBkZWZpbmVkKF9faHBwYV9fKSAmJiBkZWZpbmVkKF9faHB1eF9fKSAmJiAhZGVmaW5lZChQUkl1UFRSKQorI2RlZmluZSBQUkl1UFRSICJsdSIKKyNlbmRpZgorCisvKiBTb2xhcmlzIDwgMTAga2x1ZGdlLiAgKi8KKyNpZiBkZWZpbmVkKF9fc3VuX18pICYmIGRlZmluZWQoX19zdnI0X18pICYmICFkZWZpbmVkKFBSSXVQVFIpCisjaWYgZGVmaW5lZChfX2FyY2g2NF9fKSB8fCBkZWZpbmVkIChfX3g4Nl82NF9fKQorI2RlZmluZSBQUkl1UFRSICJsdSIKKyNlbHNlCisjZGVmaW5lIFBSSXVQVFIgInUiCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgVVNJTkdfTU1BUAorc3RhdGljIGlubGluZSB2b2lkICoKK2FsbG9jYXRlX21tYXAgKHNpemVfdCBzaXplKQoreworICB2b2lkICpwYWdlOworI2lmIGRlZmluZWQgKEhBVkVfTU1BUF9ERVZfWkVSTykKKyAgc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX01NQVBfREVWX1pFUk8KKyAgaWYgKGRldl96ZXJvX2ZkID09IC0xKQorICAgIHsKKyAgICAgIGRldl96ZXJvX2ZkID0gb3BlbiAoIi9kZXYvemVybyIsIE9fUkRPTkxZKTsKKyAgICAgIGlmIChkZXZfemVyb19mZCA9PSAtMSkKKwl7CisJICBwZXJyb3IgKCJvcGVuIC9kZXYvemVybzogJW0iKTsKKwkgIGV4aXQgKDEpOworCX0KKyAgICB9CisjZW5kaWYKKworCisjaWZkZWYgSEFWRV9NTUFQX0FOT04KKyAgcGFnZSA9IG1tYXAgKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsCisJICAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOworI2VuZGlmCisjaWZkZWYgSEFWRV9NTUFQX0RFVl9aRVJPCisgIHBhZ2UgPSBtbWFwIChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLAorCSAgICAgICBNQVBfUFJJVkFURSwgZGV2X3plcm9fZmQsIDApOworI2VuZGlmCisKKyAgaWYgKHBhZ2UgPT0gKHZvaWQgKikgTUFQX0ZBSUxFRCkKKyAgICB7CisgICAgICBwZXJyb3IgKCJ2aXJ0dWFsIG1lbW9yeSBleGhhdXN0ZWQiKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICByZXR1cm4gcGFnZTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmMyNzJkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYwpAQCAtMCwwICsxLDU5IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGludCBmbG9hdGluZyhpbnQgYSwgZmxvYXQgYiwgZG91YmxlIGMsIGxvbmcgZG91YmxlIGQpCit7CisgIGludCBpOworCisgIGkgPSAoaW50KSAoKGZsb2F0KWEvYiArICgoZmxvYXQpYy8oZmxvYXQpZCkpOworCisgIHJldHVybiBpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByaW50OworCisgIGZsb2F0IGY7CisgIHNpZ25lZCBpbnQgc2kxOworICBkb3VibGUgZDsKKyAgbG9uZyBkb3VibGUgbGQ7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9zaW50OworICB2YWx1ZXNbMF0gPSAmc2kxOworICBhcmdzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMV0gPSAmZjsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHZhbHVlc1syXSA9ICZkOworICBhcmdzWzNdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisgIHZhbHVlc1szXSA9ICZsZDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKKworICBzaTEgPSA2OworICBmID0gMy4xNDE1OTsKKyAgZCA9IChkb3VibGUpMS4wLyhkb3VibGUpMy4wOworICBsZCA9IDIuNzE4MjgxODI4NDZMOworCisgIGZsb2F0aW5nIChzaTEsIGYsIGQsIGxkKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oZmxvYXRpbmcpLCAmcmludCwgdmFsdWVzKTsKKworICBwcmludGYgKCIlZCB2cyAlZFxuIiwgKGludClyaW50LCBmbG9hdGluZyAoc2kxLCBmLCBkLCBsZCkpOworCisgIENIRUNLKChpbnQpcmludCA9PSBmbG9hdGluZyhzaTEsIGYsIGQsIGxkKSk7CisKKyAgZXhpdCAoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MWQwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYwpAQCAtMCwwICsxLDU4IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorI2luY2x1ZGUgImZsb2F0LmgiCisKK3R5cGVkZWYgdW5pb24KK3sKKyAgZG91YmxlIGQ7CisgIHVuc2lnbmVkIGNoYXIgY1tzaXplb2YgKGRvdWJsZSldOworfSB2YWx1ZV90eXBlOworCisjZGVmaW5lIENBTkFSWSAweGJhCisKK3N0YXRpYyBkb3VibGUgZGJsaXQoZmxvYXQgZikKK3sKKyAgcmV0dXJuIGYvMy4wOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmxvYXQgZjsKKyAgdmFsdWVfdHlwZSByZXN1bHRbMl07CisgIHVuc2lnbmVkIGludCBpOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIHZhbHVlc1swXSA9ICZmOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9kb3VibGUsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgZiA9IDMuMTQxNTk7CisKKyAgLyogUHV0IGEgY2FuYXJ5IGluIHRoZSByZXR1cm4gYXJyYXkuICBUaGlzIGlzIGEgcmVncmVzc2lvbiB0ZXN0IGZvcgorICAgICBhIGJ1ZmZlciBvdmVycnVuLiAgKi8KKyAgbWVtc2V0KHJlc3VsdFsxXS5jLCBDQU5BUlksIHNpemVvZiAoZG91YmxlKSk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGRibGl0KSwgJnJlc3VsdFswXS5kLCB2YWx1ZXMpOworCisgIC8qIFRoZXNlIGFyZSBub3QgYWx3YXlzIHRoZSBzYW1lISEgQ2hlY2sgZm9yIGEgcmVhc29uYWJsZSBkZWx0YSAqLworCisgIENIRUNLKHJlc3VsdFswXS5kIC0gZGJsaXQoZikgPCBEQkxfRVBTSUxPTik7CisKKyAgLyogQ2hlY2sgdGhlIGNhbmFyeS4gICovCisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKGRvdWJsZSk7ICsraSkKKyAgICBDSEVDSyhyZXN1bHRbMV0uY1tpXSA9PSBDQU5BUlkpOworCisgIGV4aXQoMCk7CisKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBiMjk2YwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jCkBAIC0wLDAgKzEsNTggQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgbG9uZyBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1leGNlc3MtZXJyb3JzICJmYWlscyIgeyB0YXJnZXQgeDg2XzY0LSotbWluZ3cqIHg4Nl82NC0qLWN5Z3dpbiogfSB9ICovCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsIHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorI2luY2x1ZGUgImZsb2F0LmgiCisKK3N0YXRpYyBsb25nIGRvdWJsZSBsZGJsaXQoZmxvYXQgZikKK3sKKyAgcmV0dXJuIChsb25nIGRvdWJsZSkgKCgobG9uZyBkb3VibGUpIGYpLyAobG9uZyBkb3VibGUpIDMuMCk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmbG9hdCBmOworICBsb25nIGRvdWJsZSBsZDsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZjsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfbG9uZ2RvdWJsZSwgYXJncykgPT0gRkZJX09LKTsKKworICBmID0gMy4xNDE1OTsKKworI2lmIDEKKyAgLyogVGhpcyBpcyBpZmRlZidkIG91dCBmb3Igbm93LiBsb25nIGRvdWJsZSBzdXBwb3J0IHVuZGVyIFN1bk9TL2djYworICAgICBpcyBwcmV0dHkgbXVjaCBub24tZXhpc3RlbnQuICBZb3UnbGwgZ2V0IHRoZSBvZGQgYnVzIGVycm9yIGluIGxpYnJhcnkKKyAgICAgcm91dGluZXMgbGlrZSBwcmludGYoKS4gICovCisgIHByaW50ZiAoIiVMZlxuIiwgbGRibGl0KGYpKTsKKyNlbmRpZgorICBsZCA9IDY2NjsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGxkYmxpdCksICZsZCwgdmFsdWVzKTsKKworI2lmIDEKKyAgLyogVGhpcyBpcyBpZmRlZidkIG91dCBmb3Igbm93LiBsb25nIGRvdWJsZSBzdXBwb3J0IHVuZGVyIFN1bk9TL2djYworICAgICBpcyBwcmV0dHkgbXVjaCBub24tZXhpc3RlbnQuICBZb3UnbGwgZ2V0IHRoZSBvZGQgYnVzIGVycm9yIGluIGxpYnJhcnkKKyAgICAgcm91dGluZXMgbGlrZSBwcmludGYoKS4gICovCisgIHByaW50ZiAoIiVMZiwgJUxmLCAlTGYsICVMZlxuIiwgbGQsIGxkYmxpdChmKSwgbGQgLSBsZGJsaXQoZiksIExEQkxfRVBTSUxPTik7CisjZW5kaWYKKworICAvKiBUaGVzZSBhcmUgbm90IGFsd2F5cyB0aGUgc2FtZSEhIENoZWNrIGZvciBhIHJlYXNvbmFibGUgZGVsdGEgKi8KKyAgaWYgKGxkIC0gbGRibGl0KGYpIDwgTERCTF9FUFNJTE9OKQorICAgIHB1dHMoImxvbmcgZG91YmxlIHJldHVybiB2YWx1ZSB0ZXN0cyBvayEiKTsKKyAgZWxzZQorICAgIENIRUNLKDApOworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmQ1ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDMuYwpAQCAtMCwwICsxLDcyIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgZmxvYXQgYXJndW1lbnRzIHdpdGggZGlmZmVyZW50IG9yZGVycy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisjaW5jbHVkZSAiZmxvYXQuaCIKKworc3RhdGljIGRvdWJsZSBmbG9hdGluZ18xKGZsb2F0IGEsIGRvdWJsZSBiLCBsb25nIGRvdWJsZSBjKQoreworICByZXR1cm4gKGRvdWJsZSkgYSArIGIgKyAoZG91YmxlKSBjOworfQorCitzdGF0aWMgZG91YmxlIGZsb2F0aW5nXzIobG9uZyBkb3VibGUgYSwgZG91YmxlIGIsIGZsb2F0IGMpCit7CisgIHJldHVybiAoZG91YmxlKSBhICsgYiArIChkb3VibGUpIGM7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBkb3VibGUgcmQ7CisKKyAgZmxvYXQgZjsKKyAgZG91YmxlIGQ7CisgIGxvbmcgZG91YmxlIGxkOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIHZhbHVlc1swXSA9ICZmOworICBhcmdzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgdmFsdWVzWzFdID0gJmQ7CisgIGFyZ3NbMl0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKyAgdmFsdWVzWzJdID0gJmxkOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAzLAorCQkgICAgICZmZmlfdHlwZV9kb3VibGUsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgZiA9IDMuMTQxNTk7CisgIGQgPSAoZG91YmxlKTEuMC8oZG91YmxlKTMuMDsKKyAgbGQgPSAyLjcxODI4MTgyODQ2TDsKKworICBmbG9hdGluZ18xIChmLCBkLCBsZCk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGZsb2F0aW5nXzEpLCAmcmQsIHZhbHVlcyk7CisKKyAgQ0hFQ0socmQgLSBmbG9hdGluZ18xKGYsIGQsIGxkKSA8IERCTF9FUFNJTE9OKTsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisgIHZhbHVlc1swXSA9ICZsZDsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHZhbHVlc1sxXSA9ICZkOworICBhcmdzWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMl0gPSAmZjsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworCisgIGZsb2F0aW5nXzIgKGxkLCBkLCBmKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oZmxvYXRpbmdfMiksICZyZCwgdmFsdWVzKTsKKworICBDSEVDSyhyZCAtIGZsb2F0aW5nXzIobGQsIGQsIGYpIDwgREJMX0VQU0lMT04pOworCisgIGV4aXQgKDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGQ2ZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmMKQEAgLTAsMCArMSw2MiBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIGRlbm9ybSBkb3VibGUgdmFsdWUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJUFIyNjQ4My4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRpb25zICItbWllZWUiIHsgdGFyZ2V0IGFscGhhKi0qLSogfSB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisjaW5jbHVkZSAiZmxvYXQuaCIKKwordHlwZWRlZiB1bmlvbgoreworICBkb3VibGUgZDsKKyAgdW5zaWduZWQgY2hhciBjW3NpemVvZiAoZG91YmxlKV07Cit9IHZhbHVlX3R5cGU7CisKKyNkZWZpbmUgQ0FOQVJZIDB4YmEKKworc3RhdGljIGRvdWJsZSBkYmxpdChkb3VibGUgZCkKK3sKKyAgcmV0dXJuIGQ7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBkb3VibGUgZDsKKyAgdmFsdWVfdHlwZSByZXN1bHRbMl07CisgIHVuc2lnbmVkIGludCBpOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICB2YWx1ZXNbMF0gPSAmZDsKKyAgCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9kb3VibGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICBkID0gREJMX01JTiAvIDI7CisgIAorICAvKiBQdXQgYSBjYW5hcnkgaW4gdGhlIHJldHVybiBhcnJheS4gIFRoaXMgaXMgYSByZWdyZXNzaW9uIHRlc3QgZm9yCisgICAgIGEgYnVmZmVyIG92ZXJydW4uICAqLworICBtZW1zZXQocmVzdWx0WzFdLmMsIENBTkFSWSwgc2l6ZW9mIChkb3VibGUpKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oZGJsaXQpLCAmcmVzdWx0WzBdLmQsIHZhbHVlcyk7CisgIAorICAvKiBUaGUgc3RhbmRhcmQgZGVsdGEgY2hlY2sgZG9lc24ndCB3b3JrIGZvciBkZW5vcm1zLiAgU2luY2Ugd2UgZGlkbid0IGRvCisgICAgIGFueSBhcml0aG1ldGljLCB3ZSBzaG91bGQgZ2V0IHRoZSBvcmlnaW5hbCByZXN1bHQgYmFjaywgYW5kIGhlbmNlIGFuCisgICAgIGV4YWN0IGNoZWNrIHNob3VsZCBiZSBPSyBoZXJlLiAgKi8KKyAKKyAgQ0hFQ0socmVzdWx0WzBdLmQgPT0gZGJsaXQoZCkpOworCisgIC8qIENoZWNrIHRoZSBjYW5hcnkuICAqLworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIChkb3VibGUpOyArK2kpCisgICAgQ0hFQ0socmVzdWx0WzFdLmNbaV0gPT0gQ0FOQVJZKTsKKworICBleGl0KDApOworCit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2ZmYjcxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYwpAQCAtMCwwICsxLDM0MiBAQAorLyoJQXJlYToJCQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisJUHVycG9zZToJCUNoZWNrIGxhcmdlIHN0cnVjdHVyZSByZXR1cm5zLgorCUxpbWl0YXRpb25zOglub25lLgorCVBSOgkJCQlub25lLgorCU9yaWdpbmF0b3I6CQlCbGFrZSBDaGFmZmluCTYvMTgvMjAwNworKi8KKworLyogeyBkZy1leGNlc3MtZXJyb3JzICIiIHsgdGFyZ2V0IHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAtbWxvbmctZG91YmxlLTEyOCB7IHRhcmdldCBwb3dlcnBjNjQqLSotKiB9IH0gKi8KKy8qIHsgZGctb3V0cHV0ICIiIHsgeGZhaWwgeDg2XzY0LSotbWluZ3cqIHg4Nl82NC0qLWN5Z3dpbiogfSB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYJc3RydWN0IEJpZ1N0cnVjdHsKKwl1aW50OF90CQlhOworCWludDhfdAkJYjsKKwl1aW50MTZfdAljOworCWludDE2X3QJCWQ7CisJdWludDMyX3QJZTsKKwlpbnQzMl90CQlmOworCXVpbnQ2NF90CWc7CisJaW50NjRfdAkJaDsKKwlmbG9hdAkJaTsKKwlkb3VibGUJCWo7CisJbG9uZyBkb3VibGUJazsKKwljaGFyKgkJbDsKKwl1aW50OF90CQltOworCWludDhfdAkJbjsKKwl1aW50MTZfdAlvOworCWludDE2X3QJCXA7CisJdWludDMyX3QJcTsKKwlpbnQzMl90CQlyOworCXVpbnQ2NF90CXM7CisJaW50NjRfdAkJdDsKKwlmbG9hdAkJdTsKKwlkb3VibGUJCXY7CisJbG9uZyBkb3VibGUJdzsKKwljaGFyKgkJeDsKKwl1aW50OF90CQl5OworCWludDhfdAkJejsKKwl1aW50MTZfdAlhYTsKKwlpbnQxNl90CQliYjsKKwl1aW50MzJfdAljYzsKKwlpbnQzMl90CQlkZDsKKwl1aW50NjRfdAllZTsKKwlpbnQ2NF90CQlmZjsKKwlmbG9hdAkJZ2c7CisJZG91YmxlCQloaDsKKwlsb25nIGRvdWJsZQlpaTsKKwljaGFyKgkJamo7CisJdWludDhfdAkJa2s7CisJaW50OF90CQlsbDsKKwl1aW50MTZfdAltbTsKKwlpbnQxNl90CQlubjsKKwl1aW50MzJfdAlvbzsKKwlpbnQzMl90CQlwcDsKKwl1aW50NjRfdAlxcTsKKwlpbnQ2NF90CQlycjsKKwlmbG9hdAkJc3M7CisJZG91YmxlCQl0dDsKKwlsb25nIGRvdWJsZQl1dTsKKwljaGFyKgkJdnY7CisJdWludDhfdAkJd3c7CisJaW50OF90CQl4eDsKK30gQmlnU3RydWN0OworCitCaWdTdHJ1Y3QKK3Rlc3RfbGFyZ2VfZm4oCisJdWludDhfdAkJdWk4XzEsCisJaW50OF90CQlzaThfMSwKKwl1aW50MTZfdAl1aTE2XzEsCisJaW50MTZfdAkJc2kxNl8xLAorCXVpbnQzMl90CXVpMzJfMSwKKwlpbnQzMl90CQlzaTMyXzEsCisJdWludDY0X3QJdWk2NF8xLAorCWludDY0X3QJCXNpNjRfMSwKKwlmbG9hdAkJZl8xLAorCWRvdWJsZQkJZF8xLAorCWxvbmcgZG91YmxlCWxkXzEsCisJY2hhcioJCXBfMSwKKwl1aW50OF90CQl1aThfMiwKKwlpbnQ4X3QJCXNpOF8yLAorCXVpbnQxNl90CXVpMTZfMiwKKwlpbnQxNl90CQlzaTE2XzIsCisJdWludDMyX3QJdWkzMl8yLAorCWludDMyX3QJCXNpMzJfMiwKKwl1aW50NjRfdAl1aTY0XzIsCisJaW50NjRfdAkJc2k2NF8yLAorCWZsb2F0CQlmXzIsCisJZG91YmxlCQlkXzIsCisJbG9uZyBkb3VibGUJbGRfMiwKKwljaGFyKgkJcF8yLAorCXVpbnQ4X3QJCXVpOF8zLAorCWludDhfdAkJc2k4XzMsCisJdWludDE2X3QJdWkxNl8zLAorCWludDE2X3QJCXNpMTZfMywKKwl1aW50MzJfdAl1aTMyXzMsCisJaW50MzJfdAkJc2kzMl8zLAorCXVpbnQ2NF90CXVpNjRfMywKKwlpbnQ2NF90CQlzaTY0XzMsCisJZmxvYXQJCWZfMywKKwlkb3VibGUJCWRfMywKKwlsb25nIGRvdWJsZQlsZF8zLAorCWNoYXIqCQlwXzMsCisJdWludDhfdAkJdWk4XzQsCisJaW50OF90CQlzaThfNCwKKwl1aW50MTZfdAl1aTE2XzQsCisJaW50MTZfdAkJc2kxNl80LAorCXVpbnQzMl90CXVpMzJfNCwKKwlpbnQzMl90CQlzaTMyXzQsCisJdWludDY0X3QJdWk2NF80LAorCWludDY0X3QJCXNpNjRfNCwKKwlmbG9hdAkJZl80LAorCWRvdWJsZQkJZF80LAorCWxvbmcgZG91YmxlCWxkXzQsCisJY2hhcioJCXBfNCwKKwl1aW50OF90CQl1aThfNSwKKwlpbnQ4X3QJCXNpOF81KQoreworCUJpZ1N0cnVjdAlyZXRWYWwJPSB7CisJCXVpOF8xICsgMSwgc2k4XzEgKyAxLCB1aTE2XzEgKyAxLCBzaTE2XzEgKyAxLCB1aTMyXzEgKyAxLCBzaTMyXzEgKyAxLAorCQkJdWk2NF8xICsgMSwgc2k2NF8xICsgMSwgZl8xICsgMSwgZF8xICsgMSwgbGRfMSArIDEsIChjaGFyKikoKGludHB0cl90KXBfMSArIDEpLCAKKwkJdWk4XzIgKyAyLCBzaThfMiArIDIsIHVpMTZfMiArIDIsIHNpMTZfMiArIDIsIHVpMzJfMiArIDIsIHNpMzJfMiArIDIsCisJCQl1aTY0XzIgKyAyLCBzaTY0XzIgKyAyLCBmXzIgKyAyLCBkXzIgKyAyLCBsZF8yICsgMiwgKGNoYXIqKSgoaW50cHRyX3QpcF8yICsgMiksIAorCQl1aThfMyArIDMsIHNpOF8zICsgMywgdWkxNl8zICsgMywgc2kxNl8zICsgMywgdWkzMl8zICsgMywgc2kzMl8zICsgMywKKwkJCXVpNjRfMyArIDMsIHNpNjRfMyArIDMsIGZfMyArIDMsIGRfMyArIDMsIGxkXzMgKyAzLCAoY2hhciopKChpbnRwdHJfdClwXzMgKyAzKSwgCisJCXVpOF80ICsgNCwgc2k4XzQgKyA0LCB1aTE2XzQgKyA0LCBzaTE2XzQgKyA0LCB1aTMyXzQgKyA0LCBzaTMyXzQgKyA0LAorCQkJdWk2NF80ICsgNCwgc2k2NF80ICsgNCwgZl80ICsgNCwgZF80ICsgNCwgbGRfNCArIDQsIChjaGFyKikoKGludHB0cl90KXBfNCArIDQpLCAKKwkJdWk4XzUgKyA1LCBzaThfNSArIDV9OworCisJcHJpbnRmKCIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAlaGh1ICVoaGQ6ICIKKwkJIiVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICIKKwkJIiVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICIKKwkJIiVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICIKKwkJIiVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICVoaHUgJWhoZFxuIiwKKwkgICAgICAgdWk4XzEsIHNpOF8xLCB1aTE2XzEsIHNpMTZfMSwgdWkzMl8xLCBzaTMyXzEsIHVpNjRfMSwgc2k2NF8xLCBmXzEsIGRfMSwgbGRfMSwgKHVuc2lnbmVkIGxvbmcpcF8xLAorCQl1aThfMiwgc2k4XzIsIHVpMTZfMiwgc2kxNl8yLCB1aTMyXzIsIHNpMzJfMiwgdWk2NF8yLCBzaTY0XzIsIGZfMiwgZF8yLCBsZF8yLCAodW5zaWduZWQgbG9uZylwXzIsCisJCXVpOF8zLCBzaThfMywgdWkxNl8zLCBzaTE2XzMsIHVpMzJfMywgc2kzMl8zLCB1aTY0XzMsIHNpNjRfMywgZl8zLCBkXzMsIGxkXzMsICh1bnNpZ25lZCBsb25nKXBfMywKKwkJdWk4XzQsIHNpOF80LCB1aTE2XzQsIHNpMTZfNCwgdWkzMl80LCBzaTMyXzQsIHVpNjRfNCwgc2k2NF80LCBmXzQsIGRfNCwgbGRfNCwgKHVuc2lnbmVkIGxvbmcpcF80LCB1aThfNSwgc2k4XzUsCisJCXJldFZhbC5hLCByZXRWYWwuYiwgcmV0VmFsLmMsIHJldFZhbC5kLCByZXRWYWwuZSwgcmV0VmFsLmYsCisJICAgICAgIHJldFZhbC5nLCByZXRWYWwuaCwgcmV0VmFsLmksIHJldFZhbC5qLCByZXRWYWwuaywgKHVuc2lnbmVkIGxvbmcpcmV0VmFsLmwsCisJCXJldFZhbC5tLCByZXRWYWwubiwgcmV0VmFsLm8sIHJldFZhbC5wLCByZXRWYWwucSwgcmV0VmFsLnIsCisJICAgICAgIHJldFZhbC5zLCByZXRWYWwudCwgcmV0VmFsLnUsIHJldFZhbC52LCByZXRWYWwudywgKHVuc2lnbmVkIGxvbmcpcmV0VmFsLngsCisJCXJldFZhbC55LCByZXRWYWwueiwgcmV0VmFsLmFhLCByZXRWYWwuYmIsIHJldFZhbC5jYywgcmV0VmFsLmRkLAorCSAgICAgICByZXRWYWwuZWUsIHJldFZhbC5mZiwgcmV0VmFsLmdnLCByZXRWYWwuaGgsIHJldFZhbC5paSwgKHVuc2lnbmVkIGxvbmcpcmV0VmFsLmpqLAorCQlyZXRWYWwua2ssIHJldFZhbC5sbCwgcmV0VmFsLm1tLCByZXRWYWwubm4sIHJldFZhbC5vbywgcmV0VmFsLnBwLAorCSAgICAgICByZXRWYWwucXEsIHJldFZhbC5yciwgcmV0VmFsLnNzLCByZXRWYWwudHQsIHJldFZhbC51dSwgKHVuc2lnbmVkIGxvbmcpcmV0VmFsLnZ2LCByZXRWYWwud3csIHJldFZhbC54eCk7CisKKwlyZXR1cm4JcmV0VmFsOworfQorCitzdGF0aWMgdm9pZAorY2xzX2xhcmdlX2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwl1aW50OF90CQl1aThfMQk9ICoodWludDhfdCopYXJnc1swXTsKKwlpbnQ4X3QJCXNpOF8xCT0gKihpbnQ4X3QqKWFyZ3NbMV07CisJdWludDE2X3QJdWkxNl8xCT0gKih1aW50MTZfdCopYXJnc1syXTsKKwlpbnQxNl90CQlzaTE2XzEJPSAqKGludDE2X3QqKWFyZ3NbM107CisJdWludDMyX3QJdWkzMl8xCT0gKih1aW50MzJfdCopYXJnc1s0XTsKKwlpbnQzMl90CQlzaTMyXzEJPSAqKGludDMyX3QqKWFyZ3NbNV07CisJdWludDY0X3QJdWk2NF8xCT0gKih1aW50NjRfdCopYXJnc1s2XTsKKwlpbnQ2NF90CQlzaTY0XzEJPSAqKGludDY0X3QqKWFyZ3NbN107CisJZmxvYXQJCWZfMQkJPSAqKGZsb2F0KilhcmdzWzhdOworCWRvdWJsZQkJZF8xCQk9ICooZG91YmxlKilhcmdzWzldOworCWxvbmcgZG91YmxlCWxkXzEJPSAqKGxvbmcgZG91YmxlKilhcmdzWzEwXTsKKwljaGFyKgkJcF8xCQk9ICooY2hhcioqKWFyZ3NbMTFdOworCXVpbnQ4X3QJCXVpOF8yCT0gKih1aW50OF90KilhcmdzWzEyXTsKKwlpbnQ4X3QJCXNpOF8yCT0gKihpbnQ4X3QqKWFyZ3NbMTNdOworCXVpbnQxNl90CXVpMTZfMgk9ICoodWludDE2X3QqKWFyZ3NbMTRdOworCWludDE2X3QJCXNpMTZfMgk9ICooaW50MTZfdCopYXJnc1sxNV07CisJdWludDMyX3QJdWkzMl8yCT0gKih1aW50MzJfdCopYXJnc1sxNl07CisJaW50MzJfdAkJc2kzMl8yCT0gKihpbnQzMl90KilhcmdzWzE3XTsKKwl1aW50NjRfdAl1aTY0XzIJPSAqKHVpbnQ2NF90KilhcmdzWzE4XTsKKwlpbnQ2NF90CQlzaTY0XzIJPSAqKGludDY0X3QqKWFyZ3NbMTldOworCWZsb2F0CQlmXzIJCT0gKihmbG9hdCopYXJnc1syMF07CisJZG91YmxlCQlkXzIJCT0gKihkb3VibGUqKWFyZ3NbMjFdOworCWxvbmcgZG91YmxlCWxkXzIJPSAqKGxvbmcgZG91YmxlKilhcmdzWzIyXTsKKwljaGFyKgkJcF8yCQk9ICooY2hhcioqKWFyZ3NbMjNdOworCXVpbnQ4X3QJCXVpOF8zCT0gKih1aW50OF90KilhcmdzWzI0XTsKKwlpbnQ4X3QJCXNpOF8zCT0gKihpbnQ4X3QqKWFyZ3NbMjVdOworCXVpbnQxNl90CXVpMTZfMwk9ICoodWludDE2X3QqKWFyZ3NbMjZdOworCWludDE2X3QJCXNpMTZfMwk9ICooaW50MTZfdCopYXJnc1syN107CisJdWludDMyX3QJdWkzMl8zCT0gKih1aW50MzJfdCopYXJnc1syOF07CisJaW50MzJfdAkJc2kzMl8zCT0gKihpbnQzMl90KilhcmdzWzI5XTsKKwl1aW50NjRfdAl1aTY0XzMJPSAqKHVpbnQ2NF90KilhcmdzWzMwXTsKKwlpbnQ2NF90CQlzaTY0XzMJPSAqKGludDY0X3QqKWFyZ3NbMzFdOworCWZsb2F0CQlmXzMJCT0gKihmbG9hdCopYXJnc1szMl07CisJZG91YmxlCQlkXzMJCT0gKihkb3VibGUqKWFyZ3NbMzNdOworCWxvbmcgZG91YmxlCWxkXzMJPSAqKGxvbmcgZG91YmxlKilhcmdzWzM0XTsKKwljaGFyKgkJcF8zCQk9ICooY2hhcioqKWFyZ3NbMzVdOworCXVpbnQ4X3QJCXVpOF80CT0gKih1aW50OF90KilhcmdzWzM2XTsKKwlpbnQ4X3QJCXNpOF80CT0gKihpbnQ4X3QqKWFyZ3NbMzddOworCXVpbnQxNl90CXVpMTZfNAk9ICoodWludDE2X3QqKWFyZ3NbMzhdOworCWludDE2X3QJCXNpMTZfNAk9ICooaW50MTZfdCopYXJnc1szOV07CisJdWludDMyX3QJdWkzMl80CT0gKih1aW50MzJfdCopYXJnc1s0MF07CisJaW50MzJfdAkJc2kzMl80CT0gKihpbnQzMl90KilhcmdzWzQxXTsKKwl1aW50NjRfdAl1aTY0XzQJPSAqKHVpbnQ2NF90KilhcmdzWzQyXTsKKwlpbnQ2NF90CQlzaTY0XzQJPSAqKGludDY0X3QqKWFyZ3NbNDNdOworCWZsb2F0CQlmXzQJCT0gKihmbG9hdCopYXJnc1s0NF07CisJZG91YmxlCQlkXzQJCT0gKihkb3VibGUqKWFyZ3NbNDVdOworCWxvbmcgZG91YmxlCWxkXzQJPSAqKGxvbmcgZG91YmxlKilhcmdzWzQ2XTsKKwljaGFyKgkJcF80CQk9ICooY2hhcioqKWFyZ3NbNDddOworCXVpbnQ4X3QJCXVpOF81CT0gKih1aW50OF90KilhcmdzWzQ4XTsKKwlpbnQ4X3QJCXNpOF81CT0gKihpbnQ4X3QqKWFyZ3NbNDldOworCisJKihCaWdTdHJ1Y3QqKXJlc3AgPSB0ZXN0X2xhcmdlX2ZuKAorCQl1aThfMSwgc2k4XzEsIHVpMTZfMSwgc2kxNl8xLCB1aTMyXzEsIHNpMzJfMSwgdWk2NF8xLCBzaTY0XzEsIGZfMSwgZF8xLCBsZF8xLCBwXzEsCisJCXVpOF8yLCBzaThfMiwgdWkxNl8yLCBzaTE2XzIsIHVpMzJfMiwgc2kzMl8yLCB1aTY0XzIsIHNpNjRfMiwgZl8yLCBkXzIsIGxkXzIsIHBfMiwKKwkJdWk4XzMsIHNpOF8zLCB1aTE2XzMsIHNpMTZfMywgdWkzMl8zLCBzaTMyXzMsIHVpNjRfMywgc2k2NF8zLCBmXzMsIGRfMywgbGRfMywgcF8zLAorCQl1aThfNCwgc2k4XzQsIHVpMTZfNCwgc2kxNl80LCB1aTMyXzQsIHNpMzJfNCwgdWk2NF80LCBzaTY0XzQsIGZfNCwgZF80LCBsZF80LCBwXzQsCisJCXVpOF81LCBzaThfNSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBfX1VOVVNFRF9fLCBjb25zdCBjaGFyKiogYXJndiBfX1VOVVNFRF9fKQoreworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisKKwlmZmlfY2lmCQljaWY7CisJZmZpX3R5cGUqCWFyZ1R5cGVzWzUxXTsKKwl2b2lkKgkJYXJnVmFsdWVzWzUxXTsKKworCWZmaV90eXBlCXJldF9zdHJ1Y3RfdHlwZTsKKwlmZmlfdHlwZSoJc3RfZmllbGRzWzUxXTsKKwlCaWdTdHJ1Y3QJcmV0VmFsOworCisJbWVtc2V0ICgmcmV0VmFsLCAwLCBzaXplb2YocmV0VmFsKSk7CisKKwlyZXRfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisJcmV0X3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisJcmV0X3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJcmV0X3N0cnVjdF90eXBlLmVsZW1lbnRzID0gc3RfZmllbGRzOworCisJc3RfZmllbGRzWzBdCT0gc3RfZmllbGRzWzEyXQk9IHN0X2ZpZWxkc1syNF0JPSBzdF9maWVsZHNbMzZdCT0gc3RfZmllbGRzWzQ4XQk9ICZmZmlfdHlwZV91aW50ODsKKwlzdF9maWVsZHNbMV0JPSBzdF9maWVsZHNbMTNdCT0gc3RfZmllbGRzWzI1XQk9IHN0X2ZpZWxkc1szN10JPSBzdF9maWVsZHNbNDldCT0gJmZmaV90eXBlX3NpbnQ4OworCXN0X2ZpZWxkc1syXQk9IHN0X2ZpZWxkc1sxNF0JPSBzdF9maWVsZHNbMjZdCT0gc3RfZmllbGRzWzM4XQk9ICZmZmlfdHlwZV91aW50MTY7CisJc3RfZmllbGRzWzNdCT0gc3RfZmllbGRzWzE1XQk9IHN0X2ZpZWxkc1syN10JPSBzdF9maWVsZHNbMzldCT0gJmZmaV90eXBlX3NpbnQxNjsKKwlzdF9maWVsZHNbNF0JPSBzdF9maWVsZHNbMTZdCT0gc3RfZmllbGRzWzI4XQk9IHN0X2ZpZWxkc1s0MF0JPSAmZmZpX3R5cGVfdWludDMyOworCXN0X2ZpZWxkc1s1XQk9IHN0X2ZpZWxkc1sxN10JPSBzdF9maWVsZHNbMjldCT0gc3RfZmllbGRzWzQxXQk9ICZmZmlfdHlwZV9zaW50MzI7CisJc3RfZmllbGRzWzZdCT0gc3RfZmllbGRzWzE4XQk9IHN0X2ZpZWxkc1szMF0JPSBzdF9maWVsZHNbNDJdCT0gJmZmaV90eXBlX3VpbnQ2NDsKKwlzdF9maWVsZHNbN10JPSBzdF9maWVsZHNbMTldCT0gc3RfZmllbGRzWzMxXQk9IHN0X2ZpZWxkc1s0M10JPSAmZmZpX3R5cGVfc2ludDY0OworCXN0X2ZpZWxkc1s4XQk9IHN0X2ZpZWxkc1syMF0JPSBzdF9maWVsZHNbMzJdCT0gc3RfZmllbGRzWzQ0XQk9ICZmZmlfdHlwZV9mbG9hdDsKKwlzdF9maWVsZHNbOV0JPSBzdF9maWVsZHNbMjFdCT0gc3RfZmllbGRzWzMzXQk9IHN0X2ZpZWxkc1s0NV0JPSAmZmZpX3R5cGVfZG91YmxlOworCXN0X2ZpZWxkc1sxMF0JPSBzdF9maWVsZHNbMjJdCT0gc3RfZmllbGRzWzM0XQk9IHN0X2ZpZWxkc1s0Nl0JPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlzdF9maWVsZHNbMTFdCT0gc3RfZmllbGRzWzIzXQk9IHN0X2ZpZWxkc1szNV0JPSBzdF9maWVsZHNbNDddCT0gJmZmaV90eXBlX3BvaW50ZXI7CisKKwlzdF9maWVsZHNbNTBdID0gTlVMTDsKKworCXVpbnQ4X3QJCXVpOAkJPSAxOworCWludDhfdAkJc2k4CQk9IDI7CisJdWludDE2X3QJdWkxNgk9IDM7CisJaW50MTZfdAkJc2kxNgk9IDQ7CisJdWludDMyX3QJdWkzMgk9IDU7CisJaW50MzJfdAkJc2kzMgk9IDY7CisJdWludDY0X3QJdWk2NAk9IDc7CisJaW50NjRfdAkJc2k2NAk9IDg7CisJZmxvYXQJCWYJCT0gOTsKKwlkb3VibGUJCWQJCT0gMTA7CisJbG9uZyBkb3VibGUJbGQJCT0gMTE7CisJY2hhcioJCXAJCT0gKGNoYXIqKTB4MTIzNDU2Nzg7CisKKwlhcmdUeXBlc1swXQkJPSBhcmdUeXBlc1sxMl0JPSBhcmdUeXBlc1syNF0JPSBhcmdUeXBlc1szNl0JPSBhcmdUeXBlc1s0OF0JPSAmZmZpX3R5cGVfdWludDg7CisJYXJnVmFsdWVzWzBdCT0gYXJnVmFsdWVzWzEyXQk9IGFyZ1ZhbHVlc1syNF0JPSBhcmdWYWx1ZXNbMzZdCT0gYXJnVmFsdWVzWzQ4XQk9ICZ1aTg7CisJYXJnVHlwZXNbMV0JCT0gYXJnVHlwZXNbMTNdCT0gYXJnVHlwZXNbMjVdCT0gYXJnVHlwZXNbMzddCT0gYXJnVHlwZXNbNDldCT0gJmZmaV90eXBlX3NpbnQ4OworCWFyZ1ZhbHVlc1sxXQk9IGFyZ1ZhbHVlc1sxM10JPSBhcmdWYWx1ZXNbMjVdCT0gYXJnVmFsdWVzWzM3XQk9IGFyZ1ZhbHVlc1s0OV0JPSAmc2k4OworCWFyZ1R5cGVzWzJdCQk9IGFyZ1R5cGVzWzE0XQk9IGFyZ1R5cGVzWzI2XQk9IGFyZ1R5cGVzWzM4XQk9ICZmZmlfdHlwZV91aW50MTY7CisJYXJnVmFsdWVzWzJdCT0gYXJnVmFsdWVzWzE0XQk9IGFyZ1ZhbHVlc1syNl0JPSBhcmdWYWx1ZXNbMzhdCT0gJnVpMTY7CisJYXJnVHlwZXNbM10JCT0gYXJnVHlwZXNbMTVdCT0gYXJnVHlwZXNbMjddCT0gYXJnVHlwZXNbMzldCT0gJmZmaV90eXBlX3NpbnQxNjsKKwlhcmdWYWx1ZXNbM10JPSBhcmdWYWx1ZXNbMTVdCT0gYXJnVmFsdWVzWzI3XQk9IGFyZ1ZhbHVlc1szOV0JPSAmc2kxNjsKKwlhcmdUeXBlc1s0XQkJPSBhcmdUeXBlc1sxNl0JPSBhcmdUeXBlc1syOF0JPSBhcmdUeXBlc1s0MF0JPSAmZmZpX3R5cGVfdWludDMyOworCWFyZ1ZhbHVlc1s0XQk9IGFyZ1ZhbHVlc1sxNl0JPSBhcmdWYWx1ZXNbMjhdCT0gYXJnVmFsdWVzWzQwXQk9ICZ1aTMyOworCWFyZ1R5cGVzWzVdCQk9IGFyZ1R5cGVzWzE3XQk9IGFyZ1R5cGVzWzI5XQk9IGFyZ1R5cGVzWzQxXQk9ICZmZmlfdHlwZV9zaW50MzI7CisJYXJnVmFsdWVzWzVdCT0gYXJnVmFsdWVzWzE3XQk9IGFyZ1ZhbHVlc1syOV0JPSBhcmdWYWx1ZXNbNDFdCT0gJnNpMzI7CisJYXJnVHlwZXNbNl0JCT0gYXJnVHlwZXNbMThdCT0gYXJnVHlwZXNbMzBdCT0gYXJnVHlwZXNbNDJdCT0gJmZmaV90eXBlX3VpbnQ2NDsKKwlhcmdWYWx1ZXNbNl0JPSBhcmdWYWx1ZXNbMThdCT0gYXJnVmFsdWVzWzMwXQk9IGFyZ1ZhbHVlc1s0Ml0JPSAmdWk2NDsKKwlhcmdUeXBlc1s3XQkJPSBhcmdUeXBlc1sxOV0JPSBhcmdUeXBlc1szMV0JPSBhcmdUeXBlc1s0M10JPSAmZmZpX3R5cGVfc2ludDY0OworCWFyZ1ZhbHVlc1s3XQk9IGFyZ1ZhbHVlc1sxOV0JPSBhcmdWYWx1ZXNbMzFdCT0gYXJnVmFsdWVzWzQzXQk9ICZzaTY0OworCWFyZ1R5cGVzWzhdCQk9IGFyZ1R5cGVzWzIwXQk9IGFyZ1R5cGVzWzMyXQk9IGFyZ1R5cGVzWzQ0XQk9ICZmZmlfdHlwZV9mbG9hdDsKKwlhcmdWYWx1ZXNbOF0JPSBhcmdWYWx1ZXNbMjBdCT0gYXJnVmFsdWVzWzMyXQk9IGFyZ1ZhbHVlc1s0NF0JPSAmZjsKKwlhcmdUeXBlc1s5XQkJPSBhcmdUeXBlc1syMV0JPSBhcmdUeXBlc1szM10JPSBhcmdUeXBlc1s0NV0JPSAmZmZpX3R5cGVfZG91YmxlOworCWFyZ1ZhbHVlc1s5XQk9IGFyZ1ZhbHVlc1syMV0JPSBhcmdWYWx1ZXNbMzNdCT0gYXJnVmFsdWVzWzQ1XQk9ICZkOworCWFyZ1R5cGVzWzEwXQk9IGFyZ1R5cGVzWzIyXQk9IGFyZ1R5cGVzWzM0XQk9IGFyZ1R5cGVzWzQ2XQk9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWFyZ1ZhbHVlc1sxMF0JPSBhcmdWYWx1ZXNbMjJdCT0gYXJnVmFsdWVzWzM0XQk9IGFyZ1ZhbHVlc1s0Nl0JPSAmbGQ7CisJYXJnVHlwZXNbMTFdCT0gYXJnVHlwZXNbMjNdCT0gYXJnVHlwZXNbMzVdCT0gYXJnVHlwZXNbNDddCT0gJmZmaV90eXBlX3BvaW50ZXI7CisJYXJnVmFsdWVzWzExXQk9IGFyZ1ZhbHVlc1syM10JPSBhcmdWYWx1ZXNbMzVdCT0gYXJnVmFsdWVzWzQ3XQk9ICZwOworCisJYXJnVHlwZXNbNTBdCT0gTlVMTDsKKwlhcmdWYWx1ZXNbNTBdCT0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDUwLCAmcmV0X3N0cnVjdF90eXBlLCBhcmdUeXBlcykgPT0gRkZJX09LKTsKKworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTih0ZXN0X2xhcmdlX2ZuKSwgJnJldFZhbCwgYXJnVmFsdWVzKTsKKwkvLyB7IGRnLW91dHB1dCAiMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMHgxMjM0NTY3OCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAweDEyMzQ1Njc4IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDB4MTIzNDU2NzggMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMHgxMjM0NTY3OCAxIDI6IDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAweDEyMzQ1Njc5IDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMHgxMjM0NTY3YSA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAweDEyMzQ1NjdiIDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAweDEyMzQ1NjdjIDYgNyIgfQorCXByaW50ZigicmVzOiAlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAlaGh1ICVoaGRcbiIsCisJCXJldFZhbC5hLCByZXRWYWwuYiwgcmV0VmFsLmMsIHJldFZhbC5kLCByZXRWYWwuZSwgcmV0VmFsLmYsCisJICAgICAgIHJldFZhbC5nLCByZXRWYWwuaCwgcmV0VmFsLmksIHJldFZhbC5qLCByZXRWYWwuaywgKHVuc2lnbmVkIGxvbmcpcmV0VmFsLmwsCisJCXJldFZhbC5tLCByZXRWYWwubiwgcmV0VmFsLm8sIHJldFZhbC5wLCByZXRWYWwucSwgcmV0VmFsLnIsCisJICAgICAgIHJldFZhbC5zLCByZXRWYWwudCwgcmV0VmFsLnUsIHJldFZhbC52LCByZXRWYWwudywgKHVuc2lnbmVkIGxvbmcpcmV0VmFsLngsCisJCXJldFZhbC55LCByZXRWYWwueiwgcmV0VmFsLmFhLCByZXRWYWwuYmIsIHJldFZhbC5jYywgcmV0VmFsLmRkLAorCSAgICAgICByZXRWYWwuZWUsIHJldFZhbC5mZiwgcmV0VmFsLmdnLCByZXRWYWwuaGgsIHJldFZhbC5paSwgKHVuc2lnbmVkIGxvbmcpcmV0VmFsLmpqLAorCQlyZXRWYWwua2ssIHJldFZhbC5sbCwgcmV0VmFsLm1tLCByZXRWYWwubm4sIHJldFZhbC5vbywgcmV0VmFsLnBwLAorCSAgICAgICByZXRWYWwucXEsIHJldFZhbC5yciwgcmV0VmFsLnNzLCByZXRWYWwudHQsIHJldFZhbC51dSwgKHVuc2lnbmVkIGxvbmcpcmV0VmFsLnZ2LCByZXRWYWwud3csIHJldFZhbC54eCk7CisJLy8geyBkZy1vdXRwdXQgIlxucmVzOiAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMHgxMjM0NTY3OSAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDB4MTIzNDU2N2EgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMHgxMjM0NTY3YiA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMHgxMjM0NTY3YyA2IDciIH0KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2xhcmdlX2ZuLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmV0VmFsCT0gKChCaWdTdHJ1Y3QoKikoCisJCXVpbnQ4X3QsIGludDhfdCwgdWludDE2X3QsIGludDE2X3QsIHVpbnQzMl90LCBpbnQzMl90LCB1aW50NjRfdCwgaW50NjRfdCwgZmxvYXQsIGRvdWJsZSwgbG9uZyBkb3VibGUsIGNoYXIqLAorCQl1aW50OF90LCBpbnQ4X3QsIHVpbnQxNl90LCBpbnQxNl90LCB1aW50MzJfdCwgaW50MzJfdCwgdWludDY0X3QsIGludDY0X3QsIGZsb2F0LCBkb3VibGUsIGxvbmcgZG91YmxlLCBjaGFyKiwKKwkJdWludDhfdCwgaW50OF90LCB1aW50MTZfdCwgaW50MTZfdCwgdWludDMyX3QsIGludDMyX3QsIHVpbnQ2NF90LCBpbnQ2NF90LCBmbG9hdCwgZG91YmxlLCBsb25nIGRvdWJsZSwgY2hhciosCisJCXVpbnQ4X3QsIGludDhfdCwgdWludDE2X3QsIGludDE2X3QsIHVpbnQzMl90LCBpbnQzMl90LCB1aW50NjRfdCwgaW50NjRfdCwgZmxvYXQsIGRvdWJsZSwgbG9uZyBkb3VibGUsIGNoYXIqLAorCQl1aW50OF90LCBpbnQ4X3QpKShjb2RlKSkoCisJCXVpOCwgc2k4LCB1aTE2LCBzaTE2LCB1aTMyLCBzaTMyLCB1aTY0LCBzaTY0LCBmLCBkLCBsZCwgcCwKKwkJdWk4LCBzaTgsIHVpMTYsIHNpMTYsIHVpMzIsIHNpMzIsIHVpNjQsIHNpNjQsIGYsIGQsIGxkLCBwLAorCQl1aTgsIHNpOCwgdWkxNiwgc2kxNiwgdWkzMiwgc2kzMiwgdWk2NCwgc2k2NCwgZiwgZCwgbGQsIHAsCisJCXVpOCwgc2k4LCB1aTE2LCBzaTE2LCB1aTMyLCBzaTMyLCB1aTY0LCBzaTY0LCBmLCBkLCBsZCwgcCwKKwkJdWk4LCBzaTgpOworCS8vIHsgZGctb3V0cHV0ICJcbjEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDB4MTIzNDU2NzggMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMHgxMjM0NTY3OCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAweDEyMzQ1Njc4IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDB4MTIzNDU2NzggMSAyOiAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMHgxMjM0NTY3OSAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDB4MTIzNDU2N2EgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMHgxMjM0NTY3YiA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMHgxMjM0NTY3YyA2IDciIH0KKwlwcmludGYoInJlczogJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggJWhodSAlaGhkXG4iLAorCQlyZXRWYWwuYSwgcmV0VmFsLmIsIHJldFZhbC5jLCByZXRWYWwuZCwgcmV0VmFsLmUsIHJldFZhbC5mLAorCSAgICAgICByZXRWYWwuZywgcmV0VmFsLmgsIHJldFZhbC5pLCByZXRWYWwuaiwgcmV0VmFsLmssICh1bnNpZ25lZCBsb25nKXJldFZhbC5sLAorCQlyZXRWYWwubSwgcmV0VmFsLm4sIHJldFZhbC5vLCByZXRWYWwucCwgcmV0VmFsLnEsIHJldFZhbC5yLAorCSAgICAgICByZXRWYWwucywgcmV0VmFsLnQsIHJldFZhbC51LCByZXRWYWwudiwgcmV0VmFsLncsICh1bnNpZ25lZCBsb25nKXJldFZhbC54LAorCQlyZXRWYWwueSwgcmV0VmFsLnosIHJldFZhbC5hYSwgcmV0VmFsLmJiLCByZXRWYWwuY2MsIHJldFZhbC5kZCwKKwkgICAgICAgcmV0VmFsLmVlLCByZXRWYWwuZmYsIHJldFZhbC5nZywgcmV0VmFsLmhoLCByZXRWYWwuaWksICh1bnNpZ25lZCBsb25nKXJldFZhbC5qaiwKKwkJcmV0VmFsLmtrLCByZXRWYWwubGwsIHJldFZhbC5tbSwgcmV0VmFsLm5uLCByZXRWYWwub28sIHJldFZhbC5wcCwKKwkgICAgICAgcmV0VmFsLnFxLCByZXRWYWwucnIsIHJldFZhbC5zcywgcmV0VmFsLnR0LCByZXRWYWwudXUsICh1bnNpZ25lZCBsb25nKXJldFZhbC52diwgcmV0VmFsLnd3LCByZXRWYWwueHgpOworCS8vIHsgZGctb3V0cHV0ICJcbnJlczogMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDB4MTIzNDU2NzkgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAweDEyMzQ1NjdhIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDB4MTIzNDU2N2IgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDB4MTIzNDU2N2MgNiA3IiB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODY5YmE5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgZmxvYXQsIHdpdGggbWFueSBhcmd1bWVudHMKKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworc3RhdGljIGZsb2F0IG1hbnkoZmxvYXQgZjEsCisJCSAgZmxvYXQgZjIsCisJCSAgZmxvYXQgZjMsCisJCSAgZmxvYXQgZjQsCisJCSAgZmxvYXQgZjUsCisJCSAgZmxvYXQgZjYsCisJCSAgZmxvYXQgZjcsCisJCSAgZmxvYXQgZjgsCisJCSAgZmxvYXQgZjksCisJCSAgZmxvYXQgZjEwLAorCQkgIGZsb2F0IGYxMSwKKwkJICBmbG9hdCBmMTIsCisJCSAgZmxvYXQgZjEzKQoreworI2lmIDAKKyAgcHJpbnRmKCIlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZlxuIiwKKwkgKGRvdWJsZSkgZjEsIChkb3VibGUpIGYyLCAoZG91YmxlKSBmMywgKGRvdWJsZSkgZjQsIChkb3VibGUpIGY1LCAKKwkgKGRvdWJsZSkgZjYsIChkb3VibGUpIGY3LCAoZG91YmxlKSBmOCwgKGRvdWJsZSkgZjksIChkb3VibGUpIGYxMCwKKwkgKGRvdWJsZSkgZjExLCAoZG91YmxlKSBmMTIsIChkb3VibGUpIGYxMyk7CisjZW5kaWYKKworICByZXR1cm4gKChmMS9mMitmMy9mNCtmNS9mNitmNy9mOCtmOS9mMTArZjExL2YxMikgKiBmMTMpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzWzEzXTsKKyAgdm9pZCAqdmFsdWVzWzEzXTsKKyAgZmxvYXQgZmFbMTNdOworICBmbG9hdCBmLCBmZjsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IDEzOyBpKyspCisgICAgeworICAgICAgYXJnc1tpXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgICAgIHZhbHVlc1tpXSA9ICZmYVtpXTsKKyAgICAgIGZhW2ldID0gKGZsb2F0KSBpOworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICAgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEzLCAKKwkJICAgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKKworICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihtYW55KSwgJmYsIHZhbHVlcyk7CisKKyAgICBmZiA9ICBtYW55KGZhWzBdLCBmYVsxXSwKKwkgICAgICAgZmFbMl0sIGZhWzNdLAorCSAgICAgICBmYVs0XSwgZmFbNV0sCisJICAgICAgIGZhWzZdLCBmYVs3XSwKKwkgICAgICAgZmFbOF0sIGZhWzldLAorCSAgICAgICBmYVsxMF0sZmFbMTFdLGZhWzEyXSk7CisKKyAgICBpZiAoZiAtIGZmIDwgRkxUX0VQU0lMT04pCisgICAgICBleGl0KDApOworICAgIGVsc2UKKyAgICAgIGFib3J0KCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyNjMzMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYwpAQCAtMCwwICsxLDYzIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RkY2FsbCBtYW55IGNhbGwgb24gWDg2X1dJTjMyIHN5c3RlbXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKyNpbmNsdWRlIDxmbG9hdC5oPgorCitzdGF0aWMgZmxvYXQgX19hdHRyaWJ1dGVfXygoc3RkY2FsbCkpIHN0ZGNhbGxfbWFueShmbG9hdCBmMSwKKwkJCQkJCSAgIGZsb2F0IGYyLAorCQkJCQkJICAgZmxvYXQgZjMsCisJCQkJCQkgICBmbG9hdCBmNCwKKwkJCQkJCSAgIGZsb2F0IGY1LAorCQkJCQkJICAgZmxvYXQgZjYsCisJCQkJCQkgICBmbG9hdCBmNywKKwkJCQkJCSAgIGZsb2F0IGY4LAorCQkJCQkJICAgZmxvYXQgZjksCisJCQkJCQkgICBmbG9hdCBmMTAsCisJCQkJCQkgICBmbG9hdCBmMTEsCisJCQkJCQkgICBmbG9hdCBmMTIsCisJCQkJCQkgICBmbG9hdCBmMTMpCit7CisgIHJldHVybiAoKGYxL2YyK2YzL2Y0K2Y1L2Y2K2Y3L2Y4K2Y5L2YxMCtmMTEvZjEyKSAqIGYxMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbMTNdOworICB2b2lkICp2YWx1ZXNbMTNdOworICBmbG9hdCBmYVsxM107CisgIGZsb2F0IGYsIGZmOworICB1bnNpZ25lZCBsb25nIHVsOworCisgIGZvciAodWwgPSAwOyB1bCA8IDEzOyB1bCsrKQorICAgIHsKKyAgICAgIGFyZ3NbdWxdID0gJmZmaV90eXBlX2Zsb2F0OworICAgICAgdmFsdWVzW3VsXSA9ICZmYVt1bF07CisJZmFbdWxdID0gKGZsb2F0KSB1bDsKKyAgICB9CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfU1REQ0FMTCwgMTMsCisJCSAgICAgJmZmaV90eXBlX2Zsb2F0LCBhcmdzKSA9PSBGRklfT0spOworCisgIGZmID0gIHN0ZGNhbGxfbWFueShmYVswXSwgZmFbMV0sCisJCSAgICAgZmFbMl0sIGZhWzNdLAorCQkgICAgIGZhWzRdLCBmYVs1XSwKKwkJICAgICBmYVs2XSwgZmFbN10sCisJCSAgICAgZmFbOF0sIGZhWzldLAorCQkgICAgIGZhWzEwXSwgZmFbMTFdLCBmYVsxMl0pOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdGRjYWxsX21hbnkpLCAmZiwgdmFsdWVzKTsKKworICBpZiAoZiAtIGZmIDwgRkxUX0VQU0lMT04pCisgICAgcHJpbnRmKCJzdGRjYWxsIG1hbnkgYXJnIHRlc3RzIG9rIVxuIik7CisgIGVsc2UKKyAgICBDSEVDSygwKTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVnaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2ODExMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayB0aGF0IG5lZ2F0aXZlIGludGVnZXJzIGFyZSBwYXNzZWQgY29ycmVjdGx5LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAtTzIgfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgaW50IGNoZWNraW5nKGludCBhLCBzaG9ydCBiLCBzaWduZWQgY2hhciBjKQoreworCisgIHJldHVybiAoYSA8IDAgJiYgYiA8IDAgJiYgYyA8IDApOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByaW50OworCisgIHNpZ25lZCBpbnQgc2k7CisgIHNpZ25lZCBzaG9ydCBzczsKKyAgc2lnbmVkIGNoYXIgc2M7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9zaW50OworICB2YWx1ZXNbMF0gPSAmc2k7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfc3Nob3J0OworICB2YWx1ZXNbMV0gPSAmc3M7CisgIGFyZ3NbMl0gPSAmZmZpX3R5cGVfc2NoYXI7CisgIHZhbHVlc1syXSA9ICZzYzsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKKworICBzaSA9IC02OworICBzcyA9IC0xMjsKKyAgc2MgPSAtMTsKKworICBjaGVja2luZyAoc2ksIHNzLCBzYyk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNoZWNraW5nKSwgJnJpbnQsIHZhbHVlcyk7CisKKyAgcHJpbnRmICgiJWQgdnMgJWRcbiIsIChpbnQpcmludCwgY2hlY2tpbmcgKHNpLCBzcywgc2MpKTsKKworICBDSEVDSyhyaW50ICE9IDApOworCisgIGV4aXQgKDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYTUyN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMKQEAgLTAsMCArMSwxNTIgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlDb250YWlucyBzdHJ1Y3RzIGFzIHBhcmFtZXRlciBvZiB0aGUgc3RydWN0IGl0c2VsZi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxIHsKKyAgZG91YmxlIGE7CisgIGZsb2F0IGI7CisgIGludCBjOworfSBjbHNfc3RydWN0XzE2Ynl0ZTE7CisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiB7CisgIGludCBpaTsKKyAgZG91YmxlIGRkOworICBmbG9hdCBmZjsKK30gY2xzX3N0cnVjdF8xNmJ5dGUyOworCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIHsKKyAgY2xzX3N0cnVjdF8xNmJ5dGUxIGQ7CisgIGNsc19zdHJ1Y3RfMTZieXRlMiBlOworfSBjbHNfc3RydWN0X2NvbWJpbmVkOworCitjbHNfc3RydWN0X2NvbWJpbmVkIGNsc19zdHJ1Y3RfY29tYmluZWRfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSBiMCwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUyIGIxLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIGIyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCByZXN1bHQ7CisKKyAgcmVzdWx0LmQuYSA9IGIwLmEgKyBiMS5kZCArIGIyLmQuYTsKKyAgcmVzdWx0LmQuYiA9IGIwLmIgKyBiMS5mZiArIGIyLmQuYjsKKyAgcmVzdWx0LmQuYyA9IGIwLmMgKyBiMS5paSArIGIyLmQuYzsKKyAgcmVzdWx0LmUuaWkgPSBiMC5jICsgYjEuaWkgKyBiMi5lLmlpOworICByZXN1bHQuZS5kZCA9IGIwLmEgKyBiMS5kZCArIGIyLmUuZGQ7CisgIHJlc3VsdC5lLmZmID0gYjAuYiArIGIxLmZmICsgYjIuZS5mZjsKKworICBwcmludGYoIiVnICVnICVkICVkICVnICVnICVnICVnICVkICVkICVnICVnOiAlZyAlZyAlZCAlZCAlZyAlZ1xuIiwKKwkgYjAuYSwgYjAuYiwgYjAuYywKKwkgYjEuaWksIGIxLmRkLCBiMS5mZiwKKwkgYjIuZC5hLCBiMi5kLmIsIGIyLmQuYywKKwkgYjIuZS5paSwgYjIuZS5kZCwgYjIuZS5mZiwKKwkgcmVzdWx0LmQuYSwgcmVzdWx0LmQuYiwgcmVzdWx0LmQuYywKKwkgcmVzdWx0LmUuaWksIHJlc3VsdC5lLmRkLCByZXN1bHQuZS5mZik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfY29tYmluZWRfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSBiMDsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiBiMTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgYjI7CisKKyAgYjAgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIqKShhcmdzWzFdKTsKKyAgYjIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkKikoYXJnc1syXSk7CisKKworICAqKGNsc19zdHJ1Y3RfY29tYmluZWQqKXJlc3AgPSBjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKGIwLCBiMSwgYjIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczJbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMSwgY2xzX3N0cnVjdF90eXBlMjsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIGNsc19zdHJ1Y3RfdHlwZTIuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMi50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUyLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMyOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgZV9kYmwgPSB7IDkuMCwgMi4wLCA2fTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiBmX2RibCA9IHsgMSwgMi4wLCAzLjB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCBnX2RibCA9IHt7NC4wLCA1LjAsIDZ9LAorCQkJCSAgICAgIHszLCAxLjAsIDguMH19OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkczFbM10gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMlswXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBjbHNfc3RydWN0X2ZpZWxkczJbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGUyOworICBkYmxfYXJnX3R5cGVzWzNdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAzLCAmY2xzX3N0cnVjdF90eXBlMiwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzNdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF9jb21iaW5lZF9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICI5IDIgNiAxIDIgMyA0IDUgNiAzIDEgODogMTUgMTAgMTMgMTAgMTIgMTMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwuZC5hID09IChlX2RibC5hICsgZl9kYmwuZGQgKyBnX2RibC5kLmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZC5iID09IChlX2RibC5iICsgZl9kYmwuZmYgKyBnX2RibC5kLmIpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZC5jID09IChlX2RibC5jICsgZl9kYmwuaWkgKyBnX2RibC5kLmMpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5paSA9PSAoZV9kYmwuYyArIGZfZGJsLmlpICsgZ19kYmwuZS5paSkpOworICBDSEVDSyggcmVzX2RibC5lLmRkID09IChlX2RibC5hICsgZl9kYmwuZGQgKyBnX2RibC5lLmRkKSk7CisgIENIRUNLKCByZXNfZGJsLmUuZmYgPT0gKGVfZGJsLmIgKyBmX2RibC5mZiArIGdfZGJsLmUuZmYpKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfY29tYmluZWRfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9jb21iaW5lZCgqKShjbHNfc3RydWN0XzE2Ynl0ZTEsCisJCQkJICAgICBjbHNfc3RydWN0XzE2Ynl0ZTIsCisJCQkJICAgICBjbHNfc3RydWN0X2NvbWJpbmVkKSkKKwkgICAgIChjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjkgMiA2IDEgMiAzIDQgNSA2IDMgMSA4OiAxNSAxMCAxMyAxMCAxMiAxMyIgfSAqLworICBDSEVDSyggcmVzX2RibC5kLmEgPT0gKGVfZGJsLmEgKyBmX2RibC5kZCArIGdfZGJsLmQuYSkpOworICBDSEVDSyggcmVzX2RibC5kLmIgPT0gKGVfZGJsLmIgKyBmX2RibC5mZiArIGdfZGJsLmQuYikpOworICBDSEVDSyggcmVzX2RibC5kLmMgPT0gKGVfZGJsLmMgKyBmX2RibC5paSArIGdfZGJsLmQuYykpOworICBDSEVDSyggcmVzX2RibC5lLmlpID09IChlX2RibC5jICsgZl9kYmwuaWkgKyBnX2RibC5lLmlpKSk7CisgIENIRUNLKCByZXNfZGJsLmUuZGQgPT0gKGVfZGJsLmEgKyBmX2RibC5kZCArIGdfZGJsLmUuZGQpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5mZiA9PSAoZV9kYmwuYiArIGZfZGJsLmZmICsgZ19kYmwuZS5mZikpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5ZjUxNQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMKQEAgLTAsMCArMSwxNjEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlDb250YWlucyBzdHJ1Y3RzIGFzIHBhcmFtZXRlciBvZiB0aGUgc3RydWN0IGl0c2VsZi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxIHsKKyAgZG91YmxlIGE7CisgIGZsb2F0IGI7CisgIGludCBjOworfSBjbHNfc3RydWN0XzE2Ynl0ZTE7CisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiB7CisgIGludCBpaTsKKyAgZG91YmxlIGRkOworICBmbG9hdCBmZjsKK30gY2xzX3N0cnVjdF8xNmJ5dGUyOworCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIHsKKyAgY2xzX3N0cnVjdF8xNmJ5dGUxIGQ7CisgIGNsc19zdHJ1Y3RfMTZieXRlMiBlOworfSBjbHNfc3RydWN0X2NvbWJpbmVkOworCitjbHNfc3RydWN0X2NvbWJpbmVkIGNsc19zdHJ1Y3RfY29tYmluZWRfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSBiMCwKKwkJCQkJICAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiBiMSwKKwkJCQkJICAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgYjIsCisJCQkJCSAgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgYjMpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIHJlc3VsdDsKKworICByZXN1bHQuZC5hID0gYjAuYSArIGIxLmRkICsgYjIuZC5hOworICByZXN1bHQuZC5iID0gYjAuYiArIGIxLmZmICsgYjIuZC5iOworICByZXN1bHQuZC5jID0gYjAuYyArIGIxLmlpICsgYjIuZC5jOworICByZXN1bHQuZS5paSA9IGIwLmMgKyBiMS5paSArIGIyLmUuaWk7CisgIHJlc3VsdC5lLmRkID0gYjAuYSArIGIxLmRkICsgYjIuZS5kZDsKKyAgcmVzdWx0LmUuZmYgPSBiMC5iICsgYjEuZmYgKyBiMi5lLmZmOworCisgIHByaW50ZigiJWcgJWcgJWQgJWQgJWcgJWcgJWcgJWcgJWQgJWQgJWcgJWcgJWcgJWcgJWQ6ICVnICVnICVkICVkICVnICVnXG4iLAorCSBiMC5hLCBiMC5iLCBiMC5jLAorCSBiMS5paSwgYjEuZGQsIGIxLmZmLAorCSBiMi5kLmEsIGIyLmQuYiwgYjIuZC5jLAorCSBiMi5lLmlpLCBiMi5lLmRkLCBiMi5lLmZmLAorCSBiMy5hLCBiMy5iLCBiMy5jLAorCSByZXN1bHQuZC5hLCByZXN1bHQuZC5iLCByZXN1bHQuZC5jLAorCSByZXN1bHQuZS5paSwgcmVzdWx0LmUuZGQsIHJlc3VsdC5lLmZmKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9jb21iaW5lZF9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxIGIwOworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUyIGIxOworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCBiMjsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSBiMzsKKworICBiMCA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSopKGFyZ3NbMF0pOworICBiMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiopKGFyZ3NbMV0pOworICBiMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQqKShhcmdzWzJdKTsKKyAgYjMgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEqKShhcmdzWzNdKTsKKworCisgICooY2xzX3N0cnVjdF9jb21iaW5lZCopcmVzcCA9IGNsc19zdHJ1Y3RfY29tYmluZWRfZm4oYjAsIGIxLCBiMiwgYjMpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczJbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMSwgY2xzX3N0cnVjdF90eXBlMjsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIGNsc19zdHJ1Y3RfdHlwZTIuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMi50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUyLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMyOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgZV9kYmwgPSB7IDkuMCwgMi4wLCA2fTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiBmX2RibCA9IHsgMSwgMi4wLCAzLjB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCBnX2RibCA9IHt7NC4wLCA1LjAsIDZ9LAorCQkJCSAgICAgIHszLCAxLjAsIDguMH19OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxIGhfZGJsID0geyAzLjAsIDIuMCwgNH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMVswXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVszXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTE7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsyXSA9IE5VTEw7CisKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBkYmxfYXJnX3R5cGVzWzJdID0gJmNsc19zdHJ1Y3RfdHlwZTI7CisgIGRibF9hcmdfdHlwZXNbM10gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzRdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LCAmY2xzX3N0cnVjdF90eXBlMiwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzNdID0gJmhfZGJsOworICBhcmdzX2RibFs0XSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfY29tYmluZWRfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiOSAyIDYgMSAyIDMgNCA1IDYgMyAxIDggMyAyIDQ6IDE1IDEwIDEzIDEwIDEyIDEzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLmQuYSA9PSAoZV9kYmwuYSArIGZfZGJsLmRkICsgZ19kYmwuZC5hKSk7CisgIENIRUNLKCByZXNfZGJsLmQuYiA9PSAoZV9kYmwuYiArIGZfZGJsLmZmICsgZ19kYmwuZC5iKSk7CisgIENIRUNLKCByZXNfZGJsLmQuYyA9PSAoZV9kYmwuYyArIGZfZGJsLmlpICsgZ19kYmwuZC5jKSk7CisgIENIRUNLKCByZXNfZGJsLmUuaWkgPT0gKGVfZGJsLmMgKyBmX2RibC5paSArIGdfZGJsLmUuaWkpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5kZCA9PSAoZV9kYmwuYSArIGZfZGJsLmRkICsgZ19kYmwuZS5kZCkpOworICBDSEVDSyggcmVzX2RibC5lLmZmID09IChlX2RibC5iICsgZl9kYmwuZmYgKyBnX2RibC5lLmZmKSk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2NvbWJpbmVkX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfY29tYmluZWQoKikoY2xzX3N0cnVjdF8xNmJ5dGUxLAorCQkJCSAgICAgY2xzX3N0cnVjdF8xNmJ5dGUyLAorCQkJCSAgICAgY2xzX3N0cnVjdF9jb21iaW5lZCwKKwkJCQkgICAgIGNsc19zdHJ1Y3RfMTZieXRlMSkpCisJICAgICAoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwsIGhfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuOSAyIDYgMSAyIDMgNCA1IDYgMyAxIDggMyAyIDQ6IDE1IDEwIDEzIDEwIDEyIDEzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLmQuYSA9PSAoZV9kYmwuYSArIGZfZGJsLmRkICsgZ19kYmwuZC5hKSk7CisgIENIRUNLKCByZXNfZGJsLmQuYiA9PSAoZV9kYmwuYiArIGZfZGJsLmZmICsgZ19kYmwuZC5iKSk7CisgIENIRUNLKCByZXNfZGJsLmQuYyA9PSAoZV9kYmwuYyArIGZfZGJsLmlpICsgZ19kYmwuZC5jKSk7CisgIENIRUNLKCByZXNfZGJsLmUuaWkgPT0gKGVfZGJsLmMgKyBmX2RibC5paSArIGdfZGJsLmUuaWkpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5kZCA9PSAoZV9kYmwuYSArIGZfZGJsLmRkICsgZ19kYmwuZS5kZCkpOworICBDSEVDSyggcmVzX2RibC5lLmZmID09IChlX2RibC5iICsgZl9kYmwuZmYgKyBnX2RibC5lLmZmKSk7CisgIC8vICBDSEVDSyggMSA9PSAwKTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhNzE4YgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jCkBAIC0wLDAgKzEsMTMzIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisJCVNhbXBsZSB0YWtlbiBmcm9tIEFsYW4gTW9kcmFzIHBhdGNoIHRvIHNyYy9wcmVwX2NpZi5jLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUxMDEwCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBBIHsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKK30gQTsKKwordHlwZWRlZiBzdHJ1Y3QgQiB7CisgIHVuc2lnbmVkIGNoYXIgeTsKKyAgc3RydWN0IEEgeDsKKyAgdW5zaWduZWQgaW50IHo7Cit9IEI7CisKK3R5cGVkZWYgc3RydWN0IEMgeworICB1bnNpZ25lZCBsb25nIGxvbmcgZDsKKyAgdW5zaWduZWQgY2hhciBlOworfSBDOworCitzdGF0aWMgQiBCX2ZuKHN0cnVjdCBBIGIyLCBzdHJ1Y3QgQiBiMywgc3RydWN0IEMgYjQpCit7CisgIHN0cnVjdCBCIHJlc3VsdDsKKworICByZXN1bHQueC5hID0gYjIuYSArIGIzLnguYSArIGIzLnogKyBiNC5kOworICByZXN1bHQueC5iID0gYjIuYiArIGIzLnguYiArIGIzLnkgKyBiNC5lOworICByZXN1bHQueSA9IGIyLmIgKyBiMy54LmIgKyBiNC5lOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCAoaW50KWIyLmEsIGIyLmIsCisJIChpbnQpYjMueC5hLCBiMy54LmIsIGIzLnksIGIzLnosIChpbnQpYjQuZCwgYjQuZSwKKwkgKGludClyZXN1bHQueC5hLCByZXN1bHQueC5iLCByZXN1bHQueSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK0JfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgQSBiMDsKKyAgc3RydWN0IEIgYjE7CisgIHN0cnVjdCBDIGIyOworCisgIGIwID0gKihzdHJ1Y3QgQSopKGFyZ3NbMF0pOworICBiMSA9ICooc3RydWN0IEIqKShhcmdzWzFdKTsKKyAgYjIgPSAqKHN0cnVjdCBDKikoYXJnc1syXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEsIGIyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs0XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzRdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMyWzNdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTEsIGNsc19zdHJ1Y3RfdHlwZTI7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzRdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBjbHNfc3RydWN0X3R5cGUyLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMi5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMjsKKworICBzdHJ1Y3QgQSBlX2RibCA9IHsgMUxMLCA3fTsKKyAgc3RydWN0IEIgZl9kYmwgPSB7IDk5LCB7MTJMTCAsIDEyN30sIDI1NX07CisgIHN0cnVjdCBDIGdfZGJsID0geyAyTEwsIDl9OworCisgIHN0cnVjdCBCIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMVswXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzJdID0gJmZmaV90eXBlX3VpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVszXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzBdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczJbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGUyOworICBkYmxfYXJnX3R5cGVzWzNdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAzLCAmY2xzX3N0cnVjdF90eXBlMSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzNdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5IDI1NSAyIDk6IDI3MCAyNDIgMTQzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSArIGZfZGJsLnogKyBnX2RibC5kKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkgKyBnX2RibC5lKSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBnX2RibC5lKSk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBCX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKEIoKikoQSwgQiwgQykpKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OSAyNTUgMiA5OiAyNzAgMjQyIDE0MyIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEgKyBmX2RibC56ICsgZ19kYmwuZCkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55ICsgZ19kYmwuZSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZ19kYmwuZSkpOworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTE1ODRjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYwpAQCAtMCwwICsxLDExMCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUNvbnRhaW5zIHN0cnVjdHMgYXMgcGFyYW1ldGVyIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLgorCQlTYW1wbGUgdGFrZW4gZnJvbSBBbGFuIE1vZHJhcyBwYXRjaCB0byBzcmMvcHJlcF9jaWYuYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDkxMQkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIHVuc2lnbmVkIGxvbmcgYTsKKyAgdW5zaWduZWQgY2hhciBiOworfSBBOworCit0eXBlZGVmIHN0cnVjdCBCIHsKKyAgc3RydWN0IEEgeDsKKyAgdW5zaWduZWQgY2hhciB5OworfSBCOworCitCIEJfZm4oc3RydWN0IEEgYjAsIHN0cnVjdCBCIGIxKQoreworICBzdHJ1Y3QgQiByZXN1bHQ7CisKKyAgcmVzdWx0LnguYSA9IGIwLmEgKyBiMS54LmE7CisgIHJlc3VsdC54LmIgPSBiMC5iICsgYjEueC5iICsgYjEueTsKKyAgcmVzdWx0LnkgPSBiMC5iICsgYjEueC5iOworCisgIHByaW50ZigiJWx1ICVkICVsdSAlZCAlZDogJWx1ICVkICVkXG4iLCBiMC5hLCBiMC5iLCBiMS54LmEsIGIxLnguYiwgYjEueSwKKwkgcmVzdWx0LnguYSwgcmVzdWx0LnguYiwgcmVzdWx0LnkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitCX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKyAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IEEgYjA7CisgIHN0cnVjdCBCIGIxOworCisgIGIwID0gKihzdHJ1Y3QgQSopKGFyZ3NbMF0pOworICBiMSA9ICooc3RydWN0IEIqKShhcmdzWzFdKTsKKworICAqKEIqKXJlc3AgPSBCX2ZuKGIwLCBiMSk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1szXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMVszXTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlLCBjbHNfc3RydWN0X3R5cGUxOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgY2xzX3N0cnVjdF90eXBlMS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTEuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczE7CisKKyAgc3RydWN0IEEgZV9kYmwgPSB7IDEsIDd9OworICBzdHJ1Y3QgQiBmX2RibCA9IHt7MTIgLCAxMjd9LCA5OX07CisKKyAgc3RydWN0IEIgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91bG9uZzsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9IE5VTEw7CisKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlMSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihCX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgNyAxMiAxMjcgOTk6IDEzIDIzMyAxMzQiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYikpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIpKShjb2RlKSkoZV9kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OTogMTMgMjMzIDEzNCIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iKSk7CisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YWE4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jCkBAIC0wLDAgKzEsMTExIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisJCVNhbXBsZSB0YWtlbiBmcm9tIEFsYW4gTW9kcmFzIHBhdGNoIHRvIHNyYy9wcmVwX2NpZi5jLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwOTExCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBBIHsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKK30gQTsKKwordHlwZWRlZiBzdHJ1Y3QgQiB7CisgIHN0cnVjdCBBIHg7CisgIHVuc2lnbmVkIGNoYXIgeTsKK30gQjsKKworQiBCX2ZuKHN0cnVjdCBBIGIwLCBzdHJ1Y3QgQiBiMSkKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMC5hICsgYjEueC5hOworICByZXN1bHQueC5iID0gYjAuYiArIGIxLnguYiArIGIxLnk7CisgIHJlc3VsdC55ID0gYjAuYiArIGIxLnguYjsKKworICBwcmludGYoIiVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgKGludCliMC5hLCBiMC5iLAorCSAoaW50KWIxLnguYSwgYjEueC5iLCBiMS55LAorCSAoaW50KXJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxTEwsIDd9OworICBzdHJ1Y3QgQiBmX2RibCA9IHt7MTJMTCAsIDEyN30sIDk5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9IE5VTEw7CisKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlMSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihCX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgNyAxMiAxMjcgOTk6IDEzIDIzMyAxMzQiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYikpOworCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBCX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKEIoKikoQSwgQikpKGNvZGUpKShlX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTQ5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jCkBAIC0wLDAgKzEsMTExIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisJCVNhbXBsZSB0YWtlbiBmcm9tIEFsYW4gTW9kcmFzIHBhdGNoIHRvIHNyYy9wcmVwX2NpZi5jLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSIDI1NjMwLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MTAxMAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIGRvdWJsZSBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICBzdHJ1Y3QgQSB4OworICB1bnNpZ25lZCBjaGFyIHk7Cit9IEI7CisKK3N0YXRpYyBCIEJfZm4oc3RydWN0IEEgYjIsIHN0cnVjdCBCIGIzKQoreworICBzdHJ1Y3QgQiByZXN1bHQ7CisKKyAgcmVzdWx0LnguYSA9IGIyLmEgKyBiMy54LmE7CisgIHJlc3VsdC54LmIgPSBiMi5iICsgYjMueC5iICsgYjMueTsKKyAgcmVzdWx0LnkgPSBiMi5iICsgYjMueC5iOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCAoaW50KWIyLmEsIGIyLmIsCisJIChpbnQpYjMueC5hLCBiMy54LmIsIGIzLnksCisJIChpbnQpcmVzdWx0LnguYSwgcmVzdWx0LnguYiwgcmVzdWx0LnkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitCX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKyAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IEEgYjA7CisgIHN0cnVjdCBCIGIxOworCisgIGIwID0gKihzdHJ1Y3QgQSopKGFyZ3NbMF0pOworICBiMSA9ICooc3RydWN0IEIqKShhcmdzWzFdKTsKKworICAqKEIqKXJlc3AgPSBCX2ZuKGIwLCBiMSk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1szXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMVszXTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlLCBjbHNfc3RydWN0X3R5cGUxOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgY2xzX3N0cnVjdF90eXBlMS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTEuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczE7CisKKyAgc3RydWN0IEEgZV9kYmwgPSB7IDEuMCwgN307CisgIHN0cnVjdCBCIGZfZGJsID0ge3sxMi4wICwgMTI3fSwgOTl9OworCisgIHN0cnVjdCBCIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMVswXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzJdID0gTlVMTDsKKworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTE7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUxLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZV9kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKEJfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSA3IDEyIDEyNyA5OTogMTMgMjMzIDEzNCIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iKSk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBCX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKEIoKikoQSwgQikpKGNvZGUpKShlX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlMzUzNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlDb250YWlucyBzdHJ1Y3RzIGFzIHBhcmFtZXRlciBvZiB0aGUgc3RydWN0IGl0c2VsZi4KKwkJU2FtcGxlIHRha2VuIGZyb20gQWxhbiBNb2RyYXMgcGF0Y2ggdG8gc3JjL3ByZXBfY2lmLmMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTEwMTAJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IEEgeworICBsb25nIGRvdWJsZSBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICBzdHJ1Y3QgQSB4OworICB1bnNpZ25lZCBjaGFyIHk7Cit9IEI7CisKK3N0YXRpYyBCIEJfZm4oc3RydWN0IEEgYjIsIHN0cnVjdCBCIGIzKQoreworICBzdHJ1Y3QgQiByZXN1bHQ7CisKKyAgcmVzdWx0LnguYSA9IGIyLmEgKyBiMy54LmE7CisgIHJlc3VsdC54LmIgPSBiMi5iICsgYjMueC5iICsgYjMueTsKKyAgcmVzdWx0LnkgPSBiMi5iICsgYjMueC5iOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCAoaW50KWIyLmEsIGIyLmIsCisJIChpbnQpYjMueC5hLCBiMy54LmIsIGIzLnksCisJIChpbnQpcmVzdWx0LnguYSwgcmVzdWx0LnguYiwgcmVzdWx0LnkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitCX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKyAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IEEgYjA7CisgIHN0cnVjdCBCIGIxOworCisgIGIwID0gKihzdHJ1Y3QgQSopKGFyZ3NbMF0pOworICBiMSA9ICooc3RydWN0IEIqKShhcmdzWzFdKTsKKworICAqKEIqKXJlc3AgPSBCX2ZuKGIwLCBiMSk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1szXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMVszXTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlLCBjbHNfc3RydWN0X3R5cGUxOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgY2xzX3N0cnVjdF90eXBlMS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTEuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczE7CisKKyAgc3RydWN0IEEgZV9kYmwgPSB7IDEuMCwgN307CisgIHN0cnVjdCBCIGZfZGJsID0ge3sxMi4wICwgMTI3fSwgOTl9OworCisgIHN0cnVjdCBCIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9IE5VTEw7CisKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlMSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihCX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgNyAxMiAxMjcgOTk6IDEzIDIzMyAxMzQiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYikpOworCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBCX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKEIoKikoQSwgQikpKGNvZGUpKShlX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYyYjI1YQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlDb250YWlucyBzdHJ1Y3RzIGFzIHBhcmFtZXRlciBvZiB0aGUgc3RydWN0IGl0c2VsZi4KKwkJU2FtcGxlIHRha2VuIGZyb20gQWxhbiBNb2RyYXMgcGF0Y2ggdG8gc3JjL3ByZXBfY2lmLmMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJUFIgMjU2MzAuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUxMDEwCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBBIHsKKyAgZG91YmxlIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKK30gQTsKKwordHlwZWRlZiBzdHJ1Y3QgQiB7CisgIHN0cnVjdCBBIHg7CisgIHVuc2lnbmVkIGNoYXIgeTsKK30gQjsKKwordHlwZWRlZiBzdHJ1Y3QgQyB7CisgIGxvbmcgZDsKKyAgdW5zaWduZWQgY2hhciBlOworfSBDOworCitzdGF0aWMgQiBCX2ZuKHN0cnVjdCBBIGIyLCBzdHJ1Y3QgQiBiMywgc3RydWN0IEMgYjQpCit7CisgIHN0cnVjdCBCIHJlc3VsdDsKKworICByZXN1bHQueC5hID0gYjIuYSArIGIzLnguYSArIGI0LmQ7CisgIHJlc3VsdC54LmIgPSBiMi5iICsgYjMueC5iICsgYjMueSArIGI0LmU7CisgIHJlc3VsdC55ID0gYjIuYiArIGIzLnguYiArIGI0LmU7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIChpbnQpYjIuYSwgYjIuYiwKKwkgKGludCliMy54LmEsIGIzLnguYiwgYjMueSwgKGludCliNC5kLCBiNC5lLAorCSAoaW50KXJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKyAgc3RydWN0IEMgYjI7CisKKyAgYjAgPSAqKHN0cnVjdCBBKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgQiopKGFyZ3NbMV0pOworICBiMiA9ICooc3RydWN0IEMqKShhcmdzWzJdKTsKKworICAqKEIqKXJlc3AgPSBCX2ZuKGIwLCBiMSwgYjIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzRdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczJbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMSwgY2xzX3N0cnVjdF90eXBlMjsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNF07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIGNsc19zdHJ1Y3RfdHlwZTIuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMi50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUyLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMyOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxLjAsIDd9OworICBzdHJ1Y3QgQiBmX2RibCA9IHt7MTIuMCAsIDEyN30sIDk5fTsKKyAgc3RydWN0IEMgZ19kYmwgPSB7IDIsIDl9OworCisgIHN0cnVjdCBCIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMVswXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczJbMF0gPSAmZmZpX3R5cGVfc2xvbmc7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzJdID0gTlVMTDsKKworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTE7CisgIGRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlMjsKKyAgZGJsX2FyZ190eXBlc1szXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKEJfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSA3IDEyIDEyNyA5OSAyIDk6IDE1IDI0MiAxNDMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hICsgZ19kYmwuZCkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55ICsgZ19kYmwuZSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZ19kYmwuZSkpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIsIEMpKShjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgNyAxMiAxMjcgOTkgMiA5OiAxNSAyNDIgMTQzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSArIGdfZGJsLmQpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSArIGdfZGJsLmUpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGdfZGJsLmUpKTsKKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjNzAyMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlDb250YWlucyBzdHJ1Y3RzIGFzIHBhcmFtZXRlciBvZiB0aGUgc3RydWN0IGl0c2VsZi4KKwkJU2FtcGxlIHRha2VuIGZyb20gQWxhbiBNb2RyYXMgcGF0Y2ggdG8gc3JjL3ByZXBfY2lmLmMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTEwMTAJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IEEgeworICB1bnNpZ25lZCBsb25nIGxvbmcgYTsKKyAgdW5zaWduZWQgY2hhciBiOworfSBBOworCit0eXBlZGVmIHN0cnVjdCBCIHsKKyAgc3RydWN0IEEgeDsKKyAgdW5zaWduZWQgY2hhciB5OworfSBCOworCitzdGF0aWMgQiBCX2ZuKHN0cnVjdCBBIGIyLCBzdHJ1Y3QgQiBiMykKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMi5hICsgYjMueC5hOworICByZXN1bHQueC5iID0gYjIuYiArIGIzLnguYiArIGIzLnk7CisgIHJlc3VsdC55ID0gYjIuYiArIGIzLnguYjsKKworICBwcmludGYoIiVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgKGludCliMi5hLCBiMi5iLAorCSAoaW50KWIzLnguYSwgYjMueC5iLCBiMy55LAorCSAoaW50KXJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxTEwsIDd9OworICBzdHJ1Y3QgQiBmX2RibCA9IHt7MTIuMCAsIDEyN30sIDk5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9IE5VTEw7CisKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlMSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihCX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgNyAxMiAxMjcgOTk6IDEzIDIzMyAxMzQiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYikpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIpKShjb2RlKSkoZV9kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OTogMTMgMjMzIDEzNCIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iKSk7CisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNzdlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jCkBAIC0wLDAgKzEsMTMxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisJCVNhbXBsZSB0YWtlbiBmcm9tIEFsYW4gTW9kcmFzIHBhdGNoIHRvIHNyYy9wcmVwX2NpZi5jLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUxMDEwCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBBIHsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKK30gQTsKKwordHlwZWRlZiBzdHJ1Y3QgQiB7CisgIHN0cnVjdCBBIHg7CisgIHVuc2lnbmVkIGNoYXIgeTsKK30gQjsKKwordHlwZWRlZiBzdHJ1Y3QgQyB7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBkOworICB1bnNpZ25lZCBjaGFyIGU7Cit9IEM7CisKK3N0YXRpYyBCIEJfZm4oc3RydWN0IEEgYjIsIHN0cnVjdCBCIGIzLCBzdHJ1Y3QgQyBiNCkKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMi5hICsgYjMueC5hICsgYjQuZDsKKyAgcmVzdWx0LnguYiA9IGIyLmIgKyBiMy54LmIgKyBiMy55ICsgYjQuZTsKKyAgcmVzdWx0LnkgPSBiMi5iICsgYjMueC5iICsgYjQuZTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgKGludCliMi5hLCBiMi5iLAorCSAoaW50KWIzLnguYSwgYjMueC5iLCBiMy55LCAoaW50KWI0LmQsIGI0LmUsCisJIChpbnQpcmVzdWx0LnguYSwgcmVzdWx0LnguYiwgcmVzdWx0LnkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitCX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKyAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IEEgYjA7CisgIHN0cnVjdCBCIGIxOworICBzdHJ1Y3QgQyBiMjsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisgIGIyID0gKihzdHJ1Y3QgQyopKGFyZ3NbMl0pOworCisgICooQiopcmVzcCA9IEJfZm4oYjAsIGIxLCBiMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNF07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1szXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMVszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMlszXTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlLCBjbHNfc3RydWN0X3R5cGUxLCBjbHNfc3RydWN0X3R5cGUyOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s0XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgY2xzX3N0cnVjdF90eXBlMS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTEuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczE7CisKKyAgY2xzX3N0cnVjdF90eXBlMi5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMi5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTIuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczI7CisKKyAgc3RydWN0IEEgZV9kYmwgPSB7IDFMTCwgN307CisgIHN0cnVjdCBCIGZfZGJsID0ge3sxMkxMICwgMTI3fSwgOTl9OworICBzdHJ1Y3QgQyBnX2RibCA9IHsgMkxMLCA5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzBdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczJbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGUyOworICBkYmxfYXJnX3R5cGVzWzNdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAzLCAmY2xzX3N0cnVjdF90eXBlMSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzNdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5IDIgOTogMTUgMjQyIDE0MyIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEgKyBnX2RibC5kKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkgKyBnX2RibC5lKSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBnX2RibC5lKSk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBCX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKEIoKikoQSwgQiwgQykpKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OSAyIDk6IDE1IDI0MiAxNDMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hICsgZ19kYmwuZCkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55ICsgZ19kYmwuZSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZ19kYmwuZSkpOworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWY1NDFjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYwpAQCAtMCwwICsxLDEzMSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUNvbnRhaW5zIHN0cnVjdHMgYXMgcGFyYW1ldGVyIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLgorCQlTYW1wbGUgdGFrZW4gZnJvbSBBbGFuIE1vZHJhcyBwYXRjaCB0byBzcmMvcHJlcF9jaWYuYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MTAxMAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICBzdHJ1Y3QgQSB4OworICB1bnNpZ25lZCBjaGFyIHk7Cit9IEI7CisKK3R5cGVkZWYgc3RydWN0IEMgeworICB1bnNpZ25lZCBsb25nIGQ7CisgIHVuc2lnbmVkIGNoYXIgZTsKK30gQzsKKworc3RhdGljIEIgQl9mbihzdHJ1Y3QgQSBiMiwgc3RydWN0IEIgYjMsIHN0cnVjdCBDIGI0KQoreworICBzdHJ1Y3QgQiByZXN1bHQ7CisKKyAgcmVzdWx0LnguYSA9IGIyLmEgKyBiMy54LmEgKyBiNC5kOworICByZXN1bHQueC5iID0gYjIuYiArIGIzLnguYiArIGIzLnkgKyBiNC5lOworICByZXN1bHQueSA9IGIyLmIgKyBiMy54LmIgKyBiNC5lOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCBiMi5hLCAoaW50KWIyLmIsCisJIGIzLnguYSwgKGludCliMy54LmIsIGIzLnksIChpbnQpYjQuZCwgYjQuZSwKKwkgcmVzdWx0LnguYSwgKGludClyZXN1bHQueC5iLCByZXN1bHQueSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK0JfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgQSBiMDsKKyAgc3RydWN0IEIgYjE7CisgIHN0cnVjdCBDIGIyOworCisgIGIwID0gKihzdHJ1Y3QgQSopKGFyZ3NbMF0pOworICBiMSA9ICooc3RydWN0IEIqKShhcmdzWzFdKTsKKyAgYjIgPSAqKHN0cnVjdCBDKikoYXJnc1syXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEsIGIyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs0XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMyWzNdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTEsIGNsc19zdHJ1Y3RfdHlwZTI7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzRdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBjbHNfc3RydWN0X3R5cGUyLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMi5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMjsKKworICBzdHJ1Y3QgQSBlX2RibCA9IHsgMSwgN0xMfTsKKyAgc3RydWN0IEIgZl9kYmwgPSB7ezEyLjAgLCAxMjd9LCA5OX07CisgIHN0cnVjdCBDIGdfZGJsID0geyAyLCA5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzBdID0gJmZmaV90eXBlX3Vsb25nOworICBjbHNfc3RydWN0X2ZpZWxkczJbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsyXSA9IE5VTEw7CisKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBkYmxfYXJnX3R5cGVzWzJdID0gJmNsc19zdHJ1Y3RfdHlwZTI7CisgIGRibF9hcmdfdHlwZXNbM10gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDMsICZjbHNfc3RydWN0X3R5cGUxLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZV9kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbM10gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihCX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgNyAxMiAxMjcgOTkgMiA5OiAxNSAyNDIgMTQzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSArIGdfZGJsLmQpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSArIGdfZGJsLmUpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGdfZGJsLmUpKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIEJfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoQigqKShBLCBCLCBDKSkoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDcgMTIgMTI3IDk5IDIgOTogMTUgMjQyIDE0MyIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEgKyBnX2RibC5kKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkgKyBnX2RibC5lKSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBnX2RibC5lKSk7CisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTE1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBteV9mZmlfc3RydWN0IHsKKyAgZG91YmxlIGE7CisgIGRvdWJsZSBiOworICBkb3VibGUgYzsKK30gbXlfZmZpX3N0cnVjdDsKKworbXlfZmZpX3N0cnVjdCBjYWxsZWUoc3RydWN0IG15X2ZmaV9zdHJ1Y3QgYTEsIHN0cnVjdCBteV9mZmlfc3RydWN0IGEyKQoreworICBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCByZXN1bHQ7CisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKworICBwcmludGYoIiVnICVnICVnICVnICVnICVnOiAlZyAlZyAlZ1xuIiwgYTEuYSwgYTEuYiwgYTEuYywKKwkgYTIuYSwgYTIuYiwgYTIuYywgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBzdHViKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBteV9mZmlfc3RydWN0IGExOworICBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCBhMjsKKworICBhMSA9ICooc3RydWN0IG15X2ZmaV9zdHJ1Y3QqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBteV9mZmlfc3RydWN0KikoYXJnc1sxXSk7CisKKyAgKihteV9mZmlfc3RydWN0ICopcmVzcCA9IGNhbGxlZShhMSwgYTIpOworfQorCisKK2ludCBtYWluKHZvaWQpCit7CisgIGZmaV90eXBlKiBteV9mZmlfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgbXlfZmZpX3N0cnVjdF90eXBlOworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc1s0XTsKKyAgZmZpX3R5cGUqIGFyZ190eXBlc1szXTsKKworICBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCBnID0geyAxLjAsIDIuMCwgMy4wIH07CisgIHN0cnVjdCBteV9mZmlfc3RydWN0IGYgPSB7IDEuMCwgMi4wLCAzLjAgfTsKKyAgc3RydWN0IG15X2ZmaV9zdHJ1Y3QgcmVzOworCisgIG15X2ZmaV9zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgbXlfZmZpX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIG15X2ZmaV9zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBteV9mZmlfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBteV9mZmlfc3RydWN0X2ZpZWxkczsKKworICBteV9mZmlfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIG15X2ZmaV9zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgbXlfZmZpX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworICBteV9mZmlfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgYXJnX3R5cGVzWzBdID0gJm15X2ZmaV9zdHJ1Y3RfdHlwZTsKKyAgYXJnX3R5cGVzWzFdID0gJm15X2ZmaV9zdHJ1Y3RfdHlwZTsKKyAgYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmbXlfZmZpX3N0cnVjdF90eXBlLAorCQkgICAgIGFyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzWzBdID0gJmc7CisgIGFyZ3NbMV0gPSAmZjsKKyAgYXJnc1syXSA9IE5VTEw7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjYWxsZWUpLCAmcmVzLCBhcmdzKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDEgMiAzOiAyIDQgNiIgfSAqLworICBwcmludGYoInJlczogJWcgJWcgJWdcbiIsIHJlcy5hLCByZXMuYiwgcmVzLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIgNCA2IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBzdHViLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlcyA9ICgobXlfZmZpX3N0cnVjdCgqKShzdHJ1Y3QgbXlfZmZpX3N0cnVjdCwgc3RydWN0IG15X2ZmaV9zdHJ1Y3QpKShjb2RlKSkoZywgZik7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiAzIDEgMiAzOiAyIDQgNiIgfSAqLworICBwcmludGYoInJlczogJWcgJWcgJWdcbiIsIHJlcy5hLCByZXMuYiwgcmVzLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIgNCA2IiB9ICovCisKKyAgZXhpdCgwKTs7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTYxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYwpAQCAtMCwwICsxLDU5IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJUHJvbW90aW9uIHRlc3QuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKK3N0YXRpYyBpbnQgcHJvbW90aW9uKHNpZ25lZCBjaGFyIHNjLCBzaWduZWQgc2hvcnQgc3MsCisJCSAgICAgdW5zaWduZWQgY2hhciB1YywgdW5zaWduZWQgc2hvcnQgdXMpCit7CisgIGludCByID0gKGludCkgc2MgKyAoaW50KSBzcyArIChpbnQpIHVjICsgKGludCkgdXM7CisKKyAgcmV0dXJuIHI7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmZmlfYXJnIHJpbnQ7CisgIHNpZ25lZCBjaGFyIHNjOworICB1bnNpZ25lZCBjaGFyIHVjOworICBzaWduZWQgc2hvcnQgc3M7CisgIHVuc2lnbmVkIHNob3J0IHVzOworICB1bnNpZ25lZCBsb25nIHVsOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfc2NoYXI7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfc3Nob3J0OworICBhcmdzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBhcmdzWzNdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgdmFsdWVzWzBdID0gJnNjOworICB2YWx1ZXNbMV0gPSAmc3M7CisgIHZhbHVlc1syXSA9ICZ1YzsKKyAgdmFsdWVzWzNdID0gJnVzOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spOworCisgIHVzID0gMDsKKyAgdWwgPSAwOworCisgIGZvciAoc2MgPSAoc2lnbmVkIGNoYXIpIC0xMjc7CisgICAgICAgc2MgPD0gKHNpZ25lZCBjaGFyKSAxMjA7IHNjICs9IDEpCisgICAgZm9yIChzcyA9IC0zMDAwMDsgc3MgPD0gMzAwMDA7IHNzICs9IDEwMDAwKQorICAgICAgZm9yICh1YyA9ICh1bnNpZ25lZCBjaGFyKSAwOworCSAgIHVjIDw9ICh1bnNpZ25lZCBjaGFyKSAyMDA7IHVjICs9IDIwKQorCWZvciAodXMgPSAwOyB1cyA8PSA2MDAwMDsgdXMgKz0gMTAwMDApCisJICB7CisJICAgIHVsKys7CisJICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihwcm9tb3Rpb24pLCAmcmludCwgdmFsdWVzKTsKKwkgICAgQ0hFQ0soKGludClyaW50ID09IChzaWduZWQgY2hhcikgc2MgKyAoc2lnbmVkIHNob3J0KSBzcyArCisJCSAgKHVuc2lnbmVkIGNoYXIpIHVjICsgKHVuc2lnbmVkIHNob3J0KSB1cyk7CisJICB9CisgIHByaW50ZigiJWx1IHByb21vdGlvbiB0ZXN0cyBydW5cbiIsIHVsKTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI5YmQ2YwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jCkBAIC0wLDAgKzEsMTE0IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgZGlmZmVyZW50IHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CVJvbmFsZCBPdXNzb3JlbiA8b3Vzc29yZW5AY2lzdHJvbi5ubD4gMjAwMzA4MjQJKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgUG9pbnQgeworCWZsb2F0IHg7CisJZmxvYXQgeTsKK30gUG9pbnQ7CisKK3R5cGVkZWYgc3RydWN0IFNpemUgeworCWZsb2F0IGg7CisJZmxvYXQgdzsKK30gU2l6ZTsKKwordHlwZWRlZiBzdHJ1Y3QgUmVjdCB7CisJUG9pbnQgbzsKKwlTaXplICBzOworfSBSZWN0OworCitpbnQgZG9pdChpbnQgbywgY2hhciogcywgUG9pbnQgcCwgUmVjdCByLCBpbnQgbGFzdCkKK3sKKwlwcmludGYoIkNBTExFRCBXSVRIICVkICVzIHslZiAlZn0ge3slZiAlZn0geyVmICVmfX0gJWRcbiIsCisJCW8sIHMsIHAueCwgcC55LCByLm8ueCwgci5vLnksIHIucy5oLCByLnMudywgbGFzdCk7CisJcmV0dXJuIDQyOworfQorCisKK2ludCBtYWluKHZvaWQpCit7CisJZmZpX3R5cGUgcG9pbnRfdHlwZTsKKwlmZmlfdHlwZSBzaXplX3R5cGU7CisJZmZpX3R5cGUgcmVjdF90eXBlOworCWZmaV9jaWYgY2lmOworCWZmaV90eXBlKiBhcmdsaXN0WzZdOworCXZvaWQqIHZhbHVlc1s2XTsKKwlpbnQgcjsKKworCS8qCisJICogIEZpcnN0IHNldCB1cCBGRkkgdHlwZXMgZm9yIHRoZSAzIHN0cnVjdCB0eXBlcworCSAqLworCisJcG9pbnRfdHlwZS5zaXplID0gMDsgLypzaXplb2YoUG9pbnQpOyovCisJcG9pbnRfdHlwZS5hbGlnbm1lbnQgPSAwOyAvKl9fYWxpZ25vZl9fKFBvaW50KTsqLworCXBvaW50X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwlwb2ludF90eXBlLmVsZW1lbnRzID0gbWFsbG9jKDMgKiBzaXplb2YoZmZpX3R5cGUqKSk7CisJcG9pbnRfdHlwZS5lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKwlwb2ludF90eXBlLmVsZW1lbnRzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworCXBvaW50X3R5cGUuZWxlbWVudHNbMl0gPSBOVUxMOworCisJc2l6ZV90eXBlLnNpemUgPSAwOy8qIHNpemVvZihTaXplKTsqLworCXNpemVfdHlwZS5hbGlnbm1lbnQgPSAwOy8qIF9fYWxpZ25vZl9fKFNpemUpOyovCisJc2l6ZV90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJc2l6ZV90eXBlLmVsZW1lbnRzID0gbWFsbG9jKDMgKiBzaXplb2YoZmZpX3R5cGUqKSk7CisJc2l6ZV90eXBlLmVsZW1lbnRzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworCXNpemVfdHlwZS5lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKwlzaXplX3R5cGUuZWxlbWVudHNbMl0gPSBOVUxMOworCisJcmVjdF90eXBlLnNpemUgPSAwOy8qc2l6ZW9mKFJlY3QpOyovCisJcmVjdF90eXBlLmFsaWdubWVudCA9MDsvKiBfX2FsaWdub2ZfXyhSZWN0KTsqLworCXJlY3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworCXJlY3RfdHlwZS5lbGVtZW50cyA9IG1hbGxvYygzICogc2l6ZW9mKGZmaV90eXBlKikpOworCXJlY3RfdHlwZS5lbGVtZW50c1swXSA9ICZwb2ludF90eXBlOworCXJlY3RfdHlwZS5lbGVtZW50c1sxXSA9ICZzaXplX3R5cGU7CisJcmVjdF90eXBlLmVsZW1lbnRzWzJdID0gTlVMTDsKKworCS8qCisJICogQ3JlYXRlIGEgQ0lGCisJICovCisJYXJnbGlzdFswXSA9ICZmZmlfdHlwZV9zaW50OworCWFyZ2xpc3RbMV0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKwlhcmdsaXN0WzJdID0gJnBvaW50X3R5cGU7CisJYXJnbGlzdFszXSA9ICZyZWN0X3R5cGU7CisJYXJnbGlzdFs0XSA9ICZmZmlfdHlwZV9zaW50OworCWFyZ2xpc3RbNV0gPSBOVUxMOworCisJciA9IGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksCisJCQk1LCAmZmZpX3R5cGVfc2ludCwgYXJnbGlzdCk7CisJaWYgKHIgIT0gRkZJX09LKSB7CisJCWFib3J0KCk7CisJfQorCisKKwkvKiBBbmQgY2FsbCB0aGUgZnVuY3Rpb24gdGhyb3VnaCB0aGUgQ0lGICovCisKKwl7CisJUG9pbnQgcCA9IHsgMS4wLCAyLjAgfTsKKwlSZWN0ICByID0geyB7IDkuMCwgMTAuMH0sIHsgLTEuMCwgLTIuMCB9IH07CisJaW50ICAgbyA9IDA7CisJaW50ICAgbCA9IDQyOworCWNoYXIqIG0gPSAibXlNZXRob2QiOworCWZmaV9hcmcgcmVzdWx0OworCisJdmFsdWVzWzBdID0gJm87CisJdmFsdWVzWzFdID0gJm07CisJdmFsdWVzWzJdID0gJnA7CisJdmFsdWVzWzNdID0gJnI7CisJdmFsdWVzWzRdID0gJmw7CisJdmFsdWVzWzVdID0gTlVMTDsKKworCXByaW50ZigiQ0FMTElORyBXSVRIICVkICVzIHslZiAlZn0ge3slZiAlZn0geyVmICVmfX0gJWRcbiIsCisJCW8sIG0sIHAueCwgcC55LCByLm8ueCwgci5vLnksIHIucy5oLCByLnMudywgbCk7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4oZG9pdCksICZyZXN1bHQsIHZhbHVlcyk7CisKKwlwcmludGYgKCJUaGUgcmVzdWx0IGlzICVkXG4iLCAoaW50KXJlc3VsdCk7CisKKwl9CisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWFiNDAzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibC5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgZG91YmxlLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwMjEyICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgZG91YmxlIHJldHVybl9kYmwoZG91YmxlIGRibCkKK3sKKyAgcmV0dXJuIDIgKiBkYmw7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZG91YmxlIGRibCwgcmRibDsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgdmFsdWVzWzBdID0gJmRibDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworCisgIGZvciAoZGJsID0gLTEyNy4zOyBkYmwgPCAgMTI3OyBkYmwrKykKKyAgICB7CisgICAgICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2RibCksICZyZGJsLCB2YWx1ZXMpOworICAgICAgcHJpbnRmICgiJWYgdnMgJWZcbiIsIHJkYmwsIHJldHVybl9kYmwoZGJsKSk7CisgICAgICBDSEVDSyhyZGJsID09IDIgKiBkYmwpOworICAgIH0KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYTVkNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgZG91YmxlLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwMjEyICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgZG91YmxlIHJldHVybl9kYmwoZG91YmxlIGRibDEsIGZsb2F0IGZsMiwgdW5zaWduZWQgaW50IGluMywgZG91YmxlIGRibDQpCit7CisgIHJldHVybiBkYmwxICsgZmwyICsgaW4zICsgZGJsNDsKK30KK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBkb3VibGUgZGJsMSwgZGJsNCwgcmRibDsKKyAgZmxvYXQgZmwyOworICB1bnNpZ25lZCBpbnQgaW4zOworICBhcmdzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV91aW50OworICBhcmdzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgdmFsdWVzWzBdID0gJmRibDE7CisgIHZhbHVlc1sxXSA9ICZmbDI7CisgIHZhbHVlc1syXSA9ICZpbjM7CisgIHZhbHVlc1szXSA9ICZkYmw0OworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV9kb3VibGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIGRibDEgPSAxMjcuMDsKKyAgZmwyID0gMTI4LjA7CisgIGluMyA9IDI1NTsKKyAgZGJsNCA9IDUxMi43OworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fZGJsKSwgJnJkYmwsIHZhbHVlcyk7CisgIHByaW50ZiAoIiVmIHZzICVmXG4iLCByZGJsLCByZXR1cm5fZGJsKGRibDEsIGZsMiwgaW4zLCBkYmw0KSk7CisgIENIRUNLKHJkYmwgPT0gIGRibDEgKyBmbDIgKyBpbjMgKyBkYmw0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODE4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgZG91YmxlLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwMjEyICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgZG91YmxlIHJldHVybl9kYmwoZG91YmxlIGRibDEsIGRvdWJsZSBkYmwyLCB1bnNpZ25lZCBpbnQgaW4zLCBkb3VibGUgZGJsNCkKK3sKKyAgcmV0dXJuIGRibDEgKyBkYmwyICsgaW4zICsgZGJsNDsKK30KK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBkb3VibGUgZGJsMSwgZGJsMiwgZGJsNCwgcmRibDsKKyAgdW5zaWduZWQgaW50IGluMzsKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBhcmdzWzJdID0gJmZmaV90eXBlX3VpbnQ7CisgIGFyZ3NbM10gPSAmZmZpX3R5cGVfZG91YmxlOworICB2YWx1ZXNbMF0gPSAmZGJsMTsKKyAgdmFsdWVzWzFdID0gJmRibDI7CisgIHZhbHVlc1syXSA9ICZpbjM7CisgIHZhbHVlc1szXSA9ICZkYmw0OworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV9kb3VibGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIGRibDEgPSAxMjcuMDsKKyAgZGJsMiA9IDEyOC4wOworICBpbjMgPSAyNTU7CisgIGRibDQgPSA1MTIuNzsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2RibCksICZyZGJsLCB2YWx1ZXMpOworICBwcmludGYgKCIlZiB2cyAlZlxuIiwgcmRibCwgcmV0dXJuX2RibChkYmwxLCBkYmwyLCBpbjMsIGRibDQpKTsKKyAgQ0hFQ0socmRibCA9PSAgZGJsMSArIGRibDIgKyBpbjMgKyBkYmw0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4YTA5ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbC5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgZmxvYXQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTAyMTIgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyBmbG9hdCByZXR1cm5fZmwoZmxvYXQgZmwpCit7CisgIHJldHVybiAyICogZmw7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmxvYXQgZmwsIHJmbDsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZmw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX2Zsb2F0LCBhcmdzKSA9PSBGRklfT0spOworCisgIGZvciAoZmwgPSAtMTI3LjA7IGZsIDwgIDEyNzsgZmwrKykKKyAgICB7CisgICAgICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2ZsKSwgJnJmbCwgdmFsdWVzKTsKKyAgICAgIHByaW50ZiAoIiVmIHZzICVmXG4iLCByZmwsIHJldHVybl9mbChmbCkpOworICAgICAgQ0hFQ0socmZsID09ICAyICogZmwpOworICAgIH0KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Q5MmMyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMS5jCkBAIC0wLDAgKzEsMzYgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgZmxvYXQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTAyMTIgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyBmbG9hdCByZXR1cm5fZmwoZmxvYXQgZmwxLCBmbG9hdCBmbDIpCit7CisgIHJldHVybiBmbDEgKyBmbDI7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmxvYXQgZmwxLCBmbDIsIHJmbDsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICBhcmdzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZmwxOworICB2YWx1ZXNbMV0gPSAmZmwyOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKKyAgZmwxID0gMTI3LjA7CisgIGZsMiA9IDEyOC4wOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fZmwpLCAmcmZsLCB2YWx1ZXMpOworICBwcmludGYgKCIlZiB2cyAlZlxuIiwgcmZsLCByZXR1cm5fZmwoZmwxLCBmbDIpKTsKKyAgQ0hFQ0socmZsID09ICBmbDEgKyBmbDIpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYjk3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMKQEAgLTAsMCArMSw0OSBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBmbG9hdC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDIxMiAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworLyogVXNlIHZvbGF0aWxlIGZsb2F0IHRvIGF2b2lkIGZhbHNlIG5lZ2F0aXZlIG9uIGl4ODYuICBTZWUgUFIgdGFyZ2V0LzMyMy4gICovCitzdGF0aWMgZmxvYXQgcmV0dXJuX2ZsKGZsb2F0IGZsMSwgZmxvYXQgZmwyLCBmbG9hdCBmbDMsIGZsb2F0IGZsNCkKK3sKKyAgdm9sYXRpbGUgZmxvYXQgc3VtOworCisgIHN1bSA9IGZsMSArIGZsMiArIGZsMyArIGZsNDsKKyAgcmV0dXJuIHN1bTsKK30KK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmbG9hdCBmbDEsIGZsMiwgZmwzLCBmbDQsIHJmbDsKKyAgdm9sYXRpbGUgZmxvYXQgc3VtOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGFyZ3NbMl0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGFyZ3NbM10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIHZhbHVlc1swXSA9ICZmbDE7CisgIHZhbHVlc1sxXSA9ICZmbDI7CisgIHZhbHVlc1syXSA9ICZmbDM7CisgIHZhbHVlc1szXSA9ICZmbDQ7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsCisJCSAgICAgJmZmaV90eXBlX2Zsb2F0LCBhcmdzKSA9PSBGRklfT0spOworICBmbDEgPSAxMjcuMDsKKyAgZmwyID0gMTI4LjA7CisgIGZsMyA9IDI1NS4xOworICBmbDQgPSA1MTIuNzsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2ZsKSwgJnJmbCwgdmFsdWVzKTsKKyAgcHJpbnRmICgiJWYgdnMgJWZcbiIsIHJmbCwgcmV0dXJuX2ZsKGZsMSwgZmwyLCBmbDMsIGZsNCkpOworCisgIHN1bSA9IGZsMSArIGZsMiArIGZsMyArIGZsNDsKKyAgQ0hFQ0socmZsID09IHN1bSk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3ODc3YgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDMuYwpAQCAtMCwwICsxLDQyIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwMjEyICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgZmxvYXQgcmV0dXJuX2ZsKGZsb2F0IGZsMSwgZmxvYXQgZmwyLCB1bnNpZ25lZCBpbnQgaW4zLCBmbG9hdCBmbDQpCit7CisgIHJldHVybiBmbDEgKyBmbDIgKyBpbjMgKyBmbDQ7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmxvYXQgZmwxLCBmbDIsIGZsNCwgcmZsOworICB1bnNpZ25lZCBpbnQgaW4zOworICBhcmdzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICBhcmdzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICBhcmdzWzJdID0gJmZmaV90eXBlX3VpbnQ7CisgIGFyZ3NbM10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIHZhbHVlc1swXSA9ICZmbDE7CisgIHZhbHVlc1sxXSA9ICZmbDI7CisgIHZhbHVlc1syXSA9ICZpbjM7CisgIHZhbHVlc1szXSA9ICZmbDQ7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsCisJCSAgICAgJmZmaV90eXBlX2Zsb2F0LCBhcmdzKSA9PSBGRklfT0spOworICBmbDEgPSAxMjcuMDsKKyAgZmwyID0gMTI4LjA7CisgIGluMyA9IDI1NTsKKyAgZmw0ID0gNTEyLjc7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9mbCksICZyZmwsIHZhbHVlcyk7CisgIHByaW50ZiAoIiVmIHZzICVmXG4iLCByZmwsIHJldHVybl9mbChmbDEsIGZsMiwgaW4zLCBmbDQpKTsKKyAgQ0hFQ0socmZsID09ICBmbDEgKyBmbDIgKyBpbjMgKyBmbDQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMmZlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGRsLmMKQEAgLTAsMCArMSwzNCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBsb25nIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA3MTExMyAgKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyBsb25nIGRvdWJsZSByZXR1cm5fbGRsKGxvbmcgZG91YmxlIGxkbCkKK3sKKyAgcmV0dXJuIDIqbGRsOworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGxvbmcgZG91YmxlIGxkbCwgcmxkbDsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisgIHZhbHVlc1swXSA9ICZsZGw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX2xvbmdkb3VibGUsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgZm9yIChsZGwgPSAtMTI3LjA7IGxkbCA8ICAxMjcuMDsgbGRsKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9sZGwpLCAmcmxkbCwgdmFsdWVzKTsKKyAgICAgIENIRUNLKHJsZGwgPT0gIDIgKiBsZGwpOworICAgIH0KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0YTFlNAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbC5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgbG9uZyBsb25nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCitzdGF0aWMgbG9uZyBsb25nIHJldHVybl9sbChsb25nIGxvbmcgbGwpCit7CisgIHJldHVybiBsbDsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGxvbmcgbG9uZyBybG9uZ2xvbmc7CisgIGxvbmcgbG9uZyBsbDsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX3NpbnQ2NDsKKyAgdmFsdWVzWzBdID0gJmxsOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9zaW50NjQsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgZm9yIChsbCA9IDBMTDsgbGwgPCAxMDBMTDsgbGwrKykKKyAgICB7CisgICAgICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2xsKSwgJnJsb25nbG9uZywgdmFsdWVzKTsKKyAgICAgIENIRUNLKHJsb25nbG9uZyA9PSBsbCk7CisgICAgfQorCisgIGZvciAobGwgPSA1NTU1NTU1NTU1NTAwMExMOyBsbCA8IDU1NTU1NTU1NTU1MTAwTEw7IGxsKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9sbCksICZybG9uZ2xvbmcsIHZhbHVlcyk7CisgICAgICBDSEVDSyhybG9uZ2xvbmcgPT0gbGwpOworICAgIH0KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTNlOGEzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBpZiBsb25nIGxvbmcgYXJlIHBhc3NlZCBpbiB0aGUgY29ycmVzcG9uZGluZyByZWdzIG9uIHBwYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQkyMDEwNC4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTAyMjIgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLVduby1mb3JtYXQiIHsgdGFyZ2V0IGFscGhhKi1kZWMtb3NmKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCitzdGF0aWMgbG9uZyBsb25nIHJldHVybl9sbChpbnQgbGwwLCBsb25nIGxvbmcgbGwxLCBpbnQgbGwyKQoreworICByZXR1cm4gbGwwICsgbGwxICsgbGwyOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgbG9uZyBsb25nIHJsb25nbG9uZzsKKyAgbG9uZyBsb25nIGxsMTsKKyAgdW5zaWduZWQgbGwwLCBsbDI7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9zaW50OworICBhcmdzWzFdID0gJmZmaV90eXBlX3NpbnQ2NDsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV9zaW50OworICB2YWx1ZXNbMF0gPSAmbGwwOworICB2YWx1ZXNbMV0gPSAmbGwxOworICB2YWx1ZXNbMl0gPSAmbGwyOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAzLAorCQkgICAgICZmZmlfdHlwZV9zaW50NjQsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgbGwwID0gMTExMTExMTE7CisgIGxsMSA9IDExMTExMTExMTExMDAwTEw7CisgIGxsMiA9IDExMTExMTExOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fbGwpLCAmcmxvbmdsb25nLCB2YWx1ZXMpOworICBwcmludGYoInJlczogJSIgUFJJZExMICIsICUiIFBSSWRMTCAiXG4iLCBybG9uZ2xvbmcsIGxsMCArIGxsMSArIGxsMik7CisgIC8qIHsgZGctb3V0cHV0ICJyZXM6IDExMTExMTMzMzMzMjIyLCAxMTExMTEzMzMzMzIyMiIgfSAqLworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTYwOGVlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMKQEAgLTAsMCArMSwzNiBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBzaWduZWQgY2hhci4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgc2lnbmVkIGNoYXIgcmV0dXJuX3NjKHNpZ25lZCBjaGFyIHNjKQoreworICByZXR1cm4gc2M7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByaW50OworICBzaWduZWQgY2hhciBzYzsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX3NjaGFyOworICB2YWx1ZXNbMF0gPSAmc2M7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3NjaGFyLCBhcmdzKSA9PSBGRklfT0spOworCisgIGZvciAoc2MgPSAoc2lnbmVkIGNoYXIpIC0xMjc7CisgICAgICAgc2MgPCAoc2lnbmVkIGNoYXIpIDEyNzsgc2MrKykKKyAgICB7CisgICAgICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX3NjKSwgJnJpbnQsIHZhbHVlcyk7CisgICAgICBDSEVDSyhyaW50ID09IChmZmlfYXJnKSBzYyk7CisgICAgfQorICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NsLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGZkMzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NsLmMKQEAgLTAsMCArMSwzOCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIGlmIGxvbmcgYXMgcmV0dXJuIHR5cGUgaXMgaGFuZGxlZCBjb3JyZWN0bHkuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorc3RhdGljIGxvbmcgcmV0dXJuX3NsKGxvbmcgbDEsIGxvbmcgbDIpCit7CisgIHJldHVybiBsMSAtIGwyOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByZXM7CisgIHVuc2lnbmVkIGxvbmcgbDEsIGwyOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfc2xvbmc7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfc2xvbmc7CisgIHZhbHVlc1swXSA9ICZsMTsKKyAgdmFsdWVzWzFdID0gJmwyOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsCisJCSAgICAgJmZmaV90eXBlX3Nsb25nLCBhcmdzKSA9PSBGRklfT0spOworCisgIGwxID0gMTA3Mzc0MTgyM0w7CisgIGwyID0gMTA3Mzc0MTgyNEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9zbCksICZyZXMsIHZhbHVlcyk7CisgIHByaW50ZigicmVzOiAlbGQsICVsZFxuIiwgKGxvbmcpcmVzLCBsMSAtIGwyKTsKKyAgLyogeyBkZy1vdXRwdXQgInJlczogLTEsIC0xIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjNDVkZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jCkBAIC0wLDAgKzEsMzggQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgdW5zaWduZWQgY2hhci4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdW5zaWduZWQgY2hhciByZXR1cm5fdWModW5zaWduZWQgY2hhciB1YykKK3sKKyAgcmV0dXJuIHVjOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByaW50OworCisgIHVuc2lnbmVkIGNoYXIgdWM7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgdmFsdWVzWzBdID0gJnVjOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV91Y2hhciwgYXJncykgPT0gRkZJX09LKTsKKworICBmb3IgKHVjID0gKHVuc2lnbmVkIGNoYXIpICdceDAwJzsKKyAgICAgICB1YyA8ICh1bnNpZ25lZCBjaGFyKSAnXHhmZic7IHVjKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl91YyksICZyaW50LCB2YWx1ZXMpOworICAgICAgQ0hFQ0socmludCA9PSAoc2lnbmVkIGludCkgdWMpOworICAgIH0KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiMjY2ZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBpZiB1bnNpZ25lZCBsb25nIGFzIHJldHVybiB0eXBlIGlzIGhhbmRsZWQgY29ycmVjdGx5LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8a2FmZmVldGlzY2ggYXQgZ214IGRvdCBkZT4gMjAwNjA3MjQgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZXR1cm5fdWwodW5zaWduZWQgbG9uZyB1bDEsIHVuc2lnbmVkIGxvbmcgdWwyKQoreworICByZXR1cm4gdWwxICsgdWwyOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByZXM7CisgIHVuc2lnbmVkIGxvbmcgdWwxLCB1bDI7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV91bG9uZzsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV91bG9uZzsKKyAgdmFsdWVzWzBdID0gJnVsMTsKKyAgdmFsdWVzWzFdID0gJnVsMjsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLAorCQkgICAgICZmZmlfdHlwZV91bG9uZywgYXJncykgPT0gRkZJX09LKTsKKworICB1bDEgPSAxMDczNzQxODIzTDsKKyAgdWwyID0gMTA3Mzc0MTgyNEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl91bCksICZyZXMsIHZhbHVlcyk7CisgIHByaW50ZigicmVzOiAlbHUsICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpcmVzLCB1bDEgKyB1bDIpOworICAvKiB7IGRnLW91dHB1dCAicmVzOiAyMTQ3NDgzNjQ3LCAyMTQ3NDgzNjQ3IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYTkzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKiBBcmVhOgkJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJCUNoZWNrIHN0cnVjdHVyZSByZXR1cm5pbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCQkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIGJpZ2dlciBzdHJ1Y3Qgd2hpY2ggb3ZlcmxhcHMKKwkJCQl0aGUgZ3AgYW5kIGZwIHJlZ2lzdGVyIGNvdW50IG9uIERhcndpbi9BSVgvcHBjNjQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluCTYvMjEvMjAwNwkqLworCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsIHN0cm9uZ2FybSotKi0qIHhzY2FsZSotKi0qICB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKKy8vIDEzIEZQUnM6IDEwNCBieXRlcworLy8gMTQgRlBSczogMTEyIGJ5dGVzCisKK3R5cGVkZWYgc3RydWN0IHN0cnVjdF8xMDhieXRlIHsKKwlkb3VibGUgYTsKKwlkb3VibGUgYjsKKwlkb3VibGUgYzsKKwlkb3VibGUgZDsKKwlkb3VibGUgZTsKKwlkb3VibGUgZjsKKwlkb3VibGUgZzsKKwlkb3VibGUgaDsKKwlkb3VibGUgaTsKKwlkb3VibGUgajsKKwlkb3VibGUgazsKKwlkb3VibGUgbDsKKwlkb3VibGUgbTsKKwlpbnQgbjsKK30gc3RydWN0XzEwOGJ5dGU7CisKK3N0cnVjdF8xMDhieXRlIGNsc19zdHJ1Y3RfMTA4Ynl0ZV9mbigKKwlzdHJ1Y3RfMTA4Ynl0ZSBiMCwKKwlzdHJ1Y3RfMTA4Ynl0ZSBiMSwKKwlzdHJ1Y3RfMTA4Ynl0ZSBiMiwKKwlzdHJ1Y3RfMTA4Ynl0ZSBiMykKK3sKKwlzdHJ1Y3RfMTA4Ynl0ZQlyZXN1bHQ7CisKKwlyZXN1bHQuYSA9IGIwLmEgKyBiMS5hICsgYjIuYSArIGIzLmE7CisJcmVzdWx0LmIgPSBiMC5iICsgYjEuYiArIGIyLmIgKyBiMy5iOworCXJlc3VsdC5jID0gYjAuYyArIGIxLmMgKyBiMi5jICsgYjMuYzsKKwlyZXN1bHQuZCA9IGIwLmQgKyBiMS5kICsgYjIuZCArIGIzLmQ7CisJcmVzdWx0LmUgPSBiMC5lICsgYjEuZSArIGIyLmUgKyBiMy5lOworCXJlc3VsdC5mID0gYjAuZiArIGIxLmYgKyBiMi5mICsgYjMuZjsKKwlyZXN1bHQuZyA9IGIwLmcgKyBiMS5nICsgYjIuZyArIGIzLmc7CisJcmVzdWx0LmggPSBiMC5oICsgYjEuaCArIGIyLmggKyBiMy5oOworCXJlc3VsdC5pID0gYjAuaSArIGIxLmkgKyBiMi5pICsgYjMuaTsKKwlyZXN1bHQuaiA9IGIwLmogKyBiMS5qICsgYjIuaiArIGIzLmo7CisJcmVzdWx0LmsgPSBiMC5rICsgYjEuayArIGIyLmsgKyBiMy5rOworCXJlc3VsdC5sID0gYjAubCArIGIxLmwgKyBiMi5sICsgYjMubDsKKwlyZXN1bHQubSA9IGIwLm0gKyBiMS5tICsgYjIubSArIGIzLm07CisJcmVzdWx0Lm4gPSBiMC5uICsgYjEubiArIGIyLm4gKyBiMy5uOworCisJcHJpbnRmKCIlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZFxuIiwgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywKKwkJcmVzdWx0LmQsIHJlc3VsdC5lLCByZXN1bHQuZiwgcmVzdWx0LmcsIHJlc3VsdC5oLCByZXN1bHQuaSwKKwkJcmVzdWx0LmosIHJlc3VsdC5rLCByZXN1bHQubCwgcmVzdWx0Lm0sIHJlc3VsdC5uKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzEwOGJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCXN0cnVjdF8xMDhieXRlCWIwLCBiMSwgYjIsIGIzOworCisJYjAgPSAqKHN0cnVjdF8xMDhieXRlKikoYXJnc1swXSk7CisJYjEgPSAqKHN0cnVjdF8xMDhieXRlKikoYXJnc1sxXSk7CisJYjIgPSAqKHN0cnVjdF8xMDhieXRlKikoYXJnc1syXSk7CisJYjMgPSAqKHN0cnVjdF8xMDhieXRlKikoYXJnc1szXSk7CisKKwkqKHN0cnVjdF8xMDhieXRlKilyZXNwID0gY2xzX3N0cnVjdF8xMDhieXRlX2ZuKGIwLCBiMSwgYjIsIGIzKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzX2RibFs1XTsKKwlmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbMTVdOworCWZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKwlmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworCWNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKwljbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKwljbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwljbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworCXN0cnVjdF8xMDhieXRlIGVfZGJsID0geyA5LjAsIDIuMCwgNi4wLCA1LjAsIDMuMCwgNC4wLCA4LjAsIDEuMCwgMS4wLCAyLjAsIDMuMCwgNy4wLCAyLjAsIDcgfTsKKwlzdHJ1Y3RfMTA4Ynl0ZSBmX2RibCA9IHsgMS4wLCAyLjAsIDMuMCwgNy4wLCAyLjAsIDUuMCwgNi4wLCA3LjAsIDQuMCwgNS4wLCA3LjAsIDkuMCwgMS4wLCA0IH07CisJc3RydWN0XzEwOGJ5dGUgZ19kYmwgPSB7IDQuMCwgNS4wLCA3LjAsIDkuMCwgMS4wLCAxLjAsIDIuMCwgOS4wLCA4LjAsIDYuMCwgMS4wLCA0LjAsIDAuMCwgMyB9OworCXN0cnVjdF8xMDhieXRlIGhfZGJsID0geyA4LjAsIDYuMCwgMS4wLCA0LjAsIDAuMCwgMy4wLCAzLjAsIDEuMCwgOS4wLCAyLjAsIDYuMCwgNS4wLCAzLjAsIDIgfTsKKwlzdHJ1Y3RfMTA4Ynl0ZSByZXNfZGJsOworCisJY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzddID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbOV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzEwXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMTFdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxMl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzEzXSA9ICZmZmlfdHlwZV9zaW50MzI7CisJY2xzX3N0cnVjdF9maWVsZHNbMTRdID0gTlVMTDsKKworCWRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbM10gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworCWFyZ3NfZGJsWzBdID0gJmVfZGJsOworCWFyZ3NfZGJsWzFdID0gJmZfZGJsOworCWFyZ3NfZGJsWzJdID0gJmdfZGJsOworCWFyZ3NfZGJsWzNdID0gJmhfZGJsOworCWFyZ3NfZGJsWzRdID0gTlVMTDsKKworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzEwOGJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworCS8qIHsgZGctb3V0cHV0ICIyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDIyIDE1IDE3IDI1IDYgMTYiIH0gKi8KKwlwcmludGYoInJlczogJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLAorCQlyZXNfZGJsLmMsIHJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZywgcmVzX2RibC5oLCByZXNfZGJsLmksCisJCXJlc19kYmwuaiwgcmVzX2RibC5rLCByZXNfZGJsLmwsIHJlc19kYmwubSwgcmVzX2RibC5uKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMjIgMTUgMTcgMjUgNiAxNiIgfSAqLworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzEwOGJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKwlyZXNfZGJsID0gKChzdHJ1Y3RfMTA4Ynl0ZSgqKShzdHJ1Y3RfMTA4Ynl0ZSwgc3RydWN0XzEwOGJ5dGUsCisJCXN0cnVjdF8xMDhieXRlLCBzdHJ1Y3RfMTA4Ynl0ZSkpKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsLCBoX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIlxuMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAyMiAxNSAxNyAyNSA2IDE2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCwgcmVzX2RibC5pLAorCQlyZXNfZGJsLmosIHJlc19kYmwuaywgcmVzX2RibC5sLCByZXNfZGJsLm0sIHJlc19kYmwubik7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDIyIDE1IDE3IDI1IDYgMTYiIH0gKi8KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNTk5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYwpAQCAtMCwwICsxLDE0OCBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBzdHJ1Y3R1cmUgcmV0dXJuaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQkJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBiaWdnZXIgc3RydWN0IHdoaWNoIG92ZXJsYXBzCisJCQkJdGhlIGdwIGFuZCBmcCByZWdpc3RlciBjb3VudCBvbiBEYXJ3aW4vQUlYL3BwYzY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbgk2LzIxLzIwMDcJKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiAgfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCisvLyAxMyBGUFJzOiAxMDQgYnl0ZXMKKy8vIDE0IEZQUnM6IDExMiBieXRlcworCit0eXBlZGVmIHN0cnVjdCBzdHJ1Y3RfMTE2Ynl0ZSB7CisJZG91YmxlIGE7CisJZG91YmxlIGI7CisJZG91YmxlIGM7CisJZG91YmxlIGQ7CisJZG91YmxlIGU7CisJZG91YmxlIGY7CisJZG91YmxlIGc7CisJZG91YmxlIGg7CisJZG91YmxlIGk7CisJZG91YmxlIGo7CisJZG91YmxlIGs7CisJZG91YmxlIGw7CisJZG91YmxlIG07CisJZG91YmxlIG47CisJaW50IG87Cit9IHN0cnVjdF8xMTZieXRlOworCitzdHJ1Y3RfMTE2Ynl0ZSBjbHNfc3RydWN0XzExNmJ5dGVfZm4oCisJc3RydWN0XzExNmJ5dGUgYjAsCisJc3RydWN0XzExNmJ5dGUgYjEsCisJc3RydWN0XzExNmJ5dGUgYjIsCisJc3RydWN0XzExNmJ5dGUgYjMpCit7CisJc3RydWN0XzExNmJ5dGUJcmVzdWx0OworCisJcmVzdWx0LmEgPSBiMC5hICsgYjEuYSArIGIyLmEgKyBiMy5hOworCXJlc3VsdC5iID0gYjAuYiArIGIxLmIgKyBiMi5iICsgYjMuYjsKKwlyZXN1bHQuYyA9IGIwLmMgKyBiMS5jICsgYjIuYyArIGIzLmM7CisJcmVzdWx0LmQgPSBiMC5kICsgYjEuZCArIGIyLmQgKyBiMy5kOworCXJlc3VsdC5lID0gYjAuZSArIGIxLmUgKyBiMi5lICsgYjMuZTsKKwlyZXN1bHQuZiA9IGIwLmYgKyBiMS5mICsgYjIuZiArIGIzLmY7CisJcmVzdWx0LmcgPSBiMC5nICsgYjEuZyArIGIyLmcgKyBiMy5nOworCXJlc3VsdC5oID0gYjAuaCArIGIxLmggKyBiMi5oICsgYjMuaDsKKwlyZXN1bHQuaSA9IGIwLmkgKyBiMS5pICsgYjIuaSArIGIzLmk7CisJcmVzdWx0LmogPSBiMC5qICsgYjEuaiArIGIyLmogKyBiMy5qOworCXJlc3VsdC5rID0gYjAuayArIGIxLmsgKyBiMi5rICsgYjMuazsKKwlyZXN1bHQubCA9IGIwLmwgKyBiMS5sICsgYjIubCArIGIzLmw7CisJcmVzdWx0Lm0gPSBiMC5tICsgYjEubSArIGIyLm0gKyBiMy5tOworCXJlc3VsdC5uID0gYjAubiArIGIxLm4gKyBiMi5uICsgYjMubjsKKwlyZXN1bHQubyA9IGIwLm8gKyBiMS5vICsgYjIubyArIGIzLm87CisKKwlwcmludGYoIiVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVkXG4iLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLAorCQlyZXN1bHQuZCwgcmVzdWx0LmUsIHJlc3VsdC5mLCByZXN1bHQuZywgcmVzdWx0LmgsIHJlc3VsdC5pLAorCQlyZXN1bHQuaiwgcmVzdWx0LmssIHJlc3VsdC5sLCByZXN1bHQubSwgcmVzdWx0Lm4sIHJlc3VsdC5vKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzExNmJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCXN0cnVjdF8xMTZieXRlCWIwLCBiMSwgYjIsIGIzOworCisJYjAgPSAqKHN0cnVjdF8xMTZieXRlKikoYXJnc1swXSk7CisJYjEgPSAqKHN0cnVjdF8xMTZieXRlKikoYXJnc1sxXSk7CisJYjIgPSAqKHN0cnVjdF8xMTZieXRlKikoYXJnc1syXSk7CisJYjMgPSAqKHN0cnVjdF8xMTZieXRlKikoYXJnc1szXSk7CisKKwkqKHN0cnVjdF8xMTZieXRlKilyZXNwID0gY2xzX3N0cnVjdF8xMTZieXRlX2ZuKGIwLCBiMSwgYjIsIGIzKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzX2RibFs1XTsKKwlmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbMTZdOworCWZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKwlmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworCWNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKwljbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKwljbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwljbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworCXN0cnVjdF8xMTZieXRlIGVfZGJsID0geyA5LjAsIDIuMCwgNi4wLCA1LjAsIDMuMCwgNC4wLCA4LjAsIDEuMCwgMS4wLCAyLjAsIDMuMCwgNy4wLCAyLjAsIDUuMCwgNyB9OworCXN0cnVjdF8xMTZieXRlIGZfZGJsID0geyAxLjAsIDIuMCwgMy4wLCA3LjAsIDIuMCwgNS4wLCA2LjAsIDcuMCwgNC4wLCA1LjAsIDcuMCwgOS4wLCAxLjAsIDYuMCwgNCB9OworCXN0cnVjdF8xMTZieXRlIGdfZGJsID0geyA0LjAsIDUuMCwgNy4wLCA5LjAsIDEuMCwgMS4wLCAyLjAsIDkuMCwgOC4wLCA2LjAsIDEuMCwgNC4wLCAwLjAsIDcuMCwgMyB9OworCXN0cnVjdF8xMTZieXRlIGhfZGJsID0geyA4LjAsIDYuMCwgMS4wLCA0LjAsIDAuMCwgMy4wLCAzLjAsIDEuMCwgOS4wLCAyLjAsIDYuMCwgNS4wLCAzLjAsIDguMCwgMiB9OworCXN0cnVjdF8xMTZieXRlIHJlc19kYmw7CisKKwljbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzVdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s2XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbN10gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzhdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s5XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMTBdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxMV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzEyXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMTNdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxNF0gPSAmZmZpX3R5cGVfc2ludDMyOworCWNsc19zdHJ1Y3RfZmllbGRzWzE1XSA9IE5VTEw7CisKKwlkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzJdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzNdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzRdID0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsICZjbHNfc3RydWN0X3R5cGUsCisJCWRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKwlhcmdzX2RibFswXSA9ICZlX2RibDsKKwlhcmdzX2RibFsxXSA9ICZmX2RibDsKKwlhcmdzX2RibFsyXSA9ICZnX2RibDsKKwlhcmdzX2RibFszXSA9ICZoX2RibDsKKwlhcmdzX2RibFs0XSA9IE5VTEw7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8xMTZieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAyMiAxNSAxNyAyNSA2IDI2IDE2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCwgcmVzX2RibC5pLAorCQlyZXNfZGJsLmosIHJlc19kYmwuaywgcmVzX2RibC5sLCByZXNfZGJsLm0sIHJlc19kYmwubiwgcmVzX2RibC5vKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMjIgMTUgMTcgMjUgNiAyNiAxNiIgfSAqLworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzExNmJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKwlyZXNfZGJsID0gKChzdHJ1Y3RfMTE2Ynl0ZSgqKShzdHJ1Y3RfMTE2Ynl0ZSwgc3RydWN0XzExNmJ5dGUsCisJCXN0cnVjdF8xMTZieXRlLCBzdHJ1Y3RfMTE2Ynl0ZSkpKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsLCBoX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIlxuMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAyMiAxNSAxNyAyNSA2IDI2IDE2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCwgcmVzX2RibC5pLAorCQlyZXNfZGJsLmosIHJlc19kYmwuaywgcmVzX2RibC5sLCByZXNfZGJsLm0sIHJlc19kYmwubiwgcmVzX2RibC5vKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMjIgMTUgMTcgMjUgNiAyNiAxNiIgfSAqLworCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjNmE5ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jCkBAIC0wLDAgKzEsMTI0IEBACisvKiBBcmVhOgkJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJCUNoZWNrIHN0cnVjdHVyZSByZXR1cm5pbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCQkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIGJpZ2dlciBzdHJ1Y3Qgd2hpY2ggb3ZlcmxhcHMKKwkJCQl0aGUgZ3AgYW5kIGZwIHJlZ2lzdGVyIGNvdW50IG9uIERhcndpbi9BSVgvcHBjNjQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluCTYvMjEvMjAwNwkqLworCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsIHN0cm9uZ2FybSotKi0qIHhzY2FsZSotKi0qICB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IHN0cnVjdF83MmJ5dGUgeworCWRvdWJsZSBhOworCWRvdWJsZSBiOworCWRvdWJsZSBjOworCWRvdWJsZSBkOworCWRvdWJsZSBlOworCWRvdWJsZSBmOworCWRvdWJsZSBnOworCWRvdWJsZSBoOworCWRvdWJsZSBpOworfSBzdHJ1Y3RfNzJieXRlOworCitzdHJ1Y3RfNzJieXRlIGNsc19zdHJ1Y3RfNzJieXRlX2ZuKAorCXN0cnVjdF83MmJ5dGUgYjAsCisJc3RydWN0XzcyYnl0ZSBiMSwKKwlzdHJ1Y3RfNzJieXRlIGIyLAorCXN0cnVjdF83MmJ5dGUgYjMpCit7CisJc3RydWN0XzcyYnl0ZQlyZXN1bHQ7CisKKwlyZXN1bHQuYSA9IGIwLmEgKyBiMS5hICsgYjIuYSArIGIzLmE7CisJcmVzdWx0LmIgPSBiMC5iICsgYjEuYiArIGIyLmIgKyBiMy5iOworCXJlc3VsdC5jID0gYjAuYyArIGIxLmMgKyBiMi5jICsgYjMuYzsKKwlyZXN1bHQuZCA9IGIwLmQgKyBiMS5kICsgYjIuZCArIGIzLmQ7CisJcmVzdWx0LmUgPSBiMC5lICsgYjEuZSArIGIyLmUgKyBiMy5lOworCXJlc3VsdC5mID0gYjAuZiArIGIxLmYgKyBiMi5mICsgYjMuZjsKKwlyZXN1bHQuZyA9IGIwLmcgKyBiMS5nICsgYjIuZyArIGIzLmc7CisJcmVzdWx0LmggPSBiMC5oICsgYjEuaCArIGIyLmggKyBiMy5oOworCXJlc3VsdC5pID0gYjAuaSArIGIxLmkgKyBiMi5pICsgYjMuaTsKKworCXByaW50ZigiJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWdcbiIsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsCisJCXJlc3VsdC5kLCByZXN1bHQuZSwgcmVzdWx0LmYsIHJlc3VsdC5nLCByZXN1bHQuaCwgcmVzdWx0LmkpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfNzJieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwlzdHJ1Y3RfNzJieXRlCWIwLCBiMSwgYjIsIGIzOworCisJYjAgPSAqKHN0cnVjdF83MmJ5dGUqKShhcmdzWzBdKTsKKwliMSA9ICooc3RydWN0XzcyYnl0ZSopKGFyZ3NbMV0pOworCWIyID0gKihzdHJ1Y3RfNzJieXRlKikoYXJnc1syXSk7CisJYjMgPSAqKHN0cnVjdF83MmJ5dGUqKShhcmdzWzNdKTsKKworCSooc3RydWN0XzcyYnl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfNzJieXRlX2ZuKGIwLCBiMSwgYjIsIGIzKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzX2RibFs1XTsKKwlmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbMTBdOworCWZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKwlmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworCWNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKwljbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKwljbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwljbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworCXN0cnVjdF83MmJ5dGUgZV9kYmwgPSB7IDkuMCwgMi4wLCA2LjAsIDUuMCwgMy4wLCA0LjAsIDguMCwgMS4wLCA3LjAgfTsKKwlzdHJ1Y3RfNzJieXRlIGZfZGJsID0geyAxLjAsIDIuMCwgMy4wLCA3LjAsIDIuMCwgNS4wLCA2LjAsIDcuMCwgNC4wIH07CisJc3RydWN0XzcyYnl0ZSBnX2RibCA9IHsgNC4wLCA1LjAsIDcuMCwgOS4wLCAxLjAsIDEuMCwgMi4wLCA5LjAsIDMuMCB9OworCXN0cnVjdF83MmJ5dGUgaF9kYmwgPSB7IDguMCwgNi4wLCAxLjAsIDQuMCwgMC4wLCAzLjAsIDMuMCwgMS4wLCAyLjAgfTsKKwlzdHJ1Y3RfNzJieXRlIHJlc19kYmw7CisKKwljbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzVdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s2XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbN10gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzhdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s5XSA9IE5VTEw7CisKKwlkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzJdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzNdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzRdID0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsICZjbHNfc3RydWN0X3R5cGUsCisJCWRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKwlhcmdzX2RibFswXSA9ICZlX2RibDsKKwlhcmdzX2RibFsxXSA9ICZmX2RibDsKKwlhcmdzX2RibFsyXSA9ICZnX2RibDsKKwlhcmdzX2RibFszXSA9ICZoX2RibDsKKwlhcmdzX2RibFs0XSA9IE5VTEw7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF83MmJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworCS8qIHsgZGctb3V0cHV0ICIyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDE2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCQlyZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCwgcmVzX2RibC5pKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMTYiIH0gKi8KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF83MmJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKwlyZXNfZGJsID0gKChzdHJ1Y3RfNzJieXRlKCopKHN0cnVjdF83MmJ5dGUsIHN0cnVjdF83MmJ5dGUsCisJCXN0cnVjdF83MmJ5dGUsIHN0cnVjdF83MmJ5dGUpKShjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCwgaF9kYmwpOworCS8qIHsgZGctb3V0cHV0ICJcbjIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMTYiIH0gKi8KKwlwcmludGYoInJlczogJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJCXJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZywgcmVzX2RibC5oLCByZXNfZGJsLmkpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAxNiIgfSAqLworCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjJmMmZiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jCkBAIC0wLDAgKzEsMTI1IEBACisvKiBBcmVhOgkJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJCUNoZWNrIHN0cnVjdHVyZSByZXR1cm5pbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCQkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIGJpZ2dlciBzdHJ1Y3Qgd2hpY2ggb3ZlcmxhcHMKKwkJCQl0aGUgZ3AgYW5kIGZwIHJlZ2lzdGVyIGNvdW50IG9uIERhcndpbi9BSVgvcHBjNjQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluCTYvMjEvMjAwNwkqLworCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsIHN0cm9uZ2FybSotKi0qIHhzY2FsZSotKi0qICB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLVduby1mb3JtYXQiIHsgdGFyZ2V0IGFscGhhKi1kZWMtb3NmKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IHN0cnVjdF83MmJ5dGUgeworCWRvdWJsZSBhOworCWRvdWJsZSBiOworCWRvdWJsZSBjOworCWRvdWJsZSBkOworCWRvdWJsZSBlOworCWRvdWJsZSBmOworCWRvdWJsZSBnOworCWRvdWJsZSBoOworCWxvbmcgbG9uZyBpOworfSBzdHJ1Y3RfNzJieXRlOworCitzdHJ1Y3RfNzJieXRlIGNsc19zdHJ1Y3RfNzJieXRlX2ZuKAorCXN0cnVjdF83MmJ5dGUgYjAsCisJc3RydWN0XzcyYnl0ZSBiMSwKKwlzdHJ1Y3RfNzJieXRlIGIyLAorCXN0cnVjdF83MmJ5dGUgYjMpCit7CisJc3RydWN0XzcyYnl0ZQlyZXN1bHQ7CisKKwlyZXN1bHQuYSA9IGIwLmEgKyBiMS5hICsgYjIuYSArIGIzLmE7CisJcmVzdWx0LmIgPSBiMC5iICsgYjEuYiArIGIyLmIgKyBiMy5iOworCXJlc3VsdC5jID0gYjAuYyArIGIxLmMgKyBiMi5jICsgYjMuYzsKKwlyZXN1bHQuZCA9IGIwLmQgKyBiMS5kICsgYjIuZCArIGIzLmQ7CisJcmVzdWx0LmUgPSBiMC5lICsgYjEuZSArIGIyLmUgKyBiMy5lOworCXJlc3VsdC5mID0gYjAuZiArIGIxLmYgKyBiMi5mICsgYjMuZjsKKwlyZXN1bHQuZyA9IGIwLmcgKyBiMS5nICsgYjIuZyArIGIzLmc7CisJcmVzdWx0LmggPSBiMC5oICsgYjEuaCArIGIyLmggKyBiMy5oOworCXJlc3VsdC5pID0gYjAuaSArIGIxLmkgKyBiMi5pICsgYjMuaTsKKworCXByaW50ZigiJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJSIgUFJJZExMICJcbiIsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsCisJCXJlc3VsdC5kLCByZXN1bHQuZSwgcmVzdWx0LmYsIHJlc3VsdC5nLCByZXN1bHQuaCwgcmVzdWx0LmkpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfNzJieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwlzdHJ1Y3RfNzJieXRlCWIwLCBiMSwgYjIsIGIzOworCisJYjAgPSAqKHN0cnVjdF83MmJ5dGUqKShhcmdzWzBdKTsKKwliMSA9ICooc3RydWN0XzcyYnl0ZSopKGFyZ3NbMV0pOworCWIyID0gKihzdHJ1Y3RfNzJieXRlKikoYXJnc1syXSk7CisJYjMgPSAqKHN0cnVjdF83MmJ5dGUqKShhcmdzWzNdKTsKKworCSooc3RydWN0XzcyYnl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfNzJieXRlX2ZuKGIwLCBiMSwgYjIsIGIzKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzX2RibFs1XTsKKwlmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbMTBdOworCWZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKwlmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworCWNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKwljbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKwljbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwljbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworCXN0cnVjdF83MmJ5dGUgZV9kYmwgPSB7IDkuMCwgMi4wLCA2LjAsIDUuMCwgMy4wLCA0LjAsIDguMCwgMS4wLCA3IH07CisJc3RydWN0XzcyYnl0ZSBmX2RibCA9IHsgMS4wLCAyLjAsIDMuMCwgNy4wLCAyLjAsIDUuMCwgNi4wLCA3LjAsIDQgfTsKKwlzdHJ1Y3RfNzJieXRlIGdfZGJsID0geyA0LjAsIDUuMCwgNy4wLCA5LjAsIDEuMCwgMS4wLCAyLjAsIDkuMCwgMyB9OworCXN0cnVjdF83MmJ5dGUgaF9kYmwgPSB7IDguMCwgNi4wLCAxLjAsIDQuMCwgMC4wLCAzLjAsIDMuMCwgMS4wLCAyIH07CisJc3RydWN0XzcyYnl0ZSByZXNfZGJsOworCisJY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzddID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s4XSA9ICZmZmlfdHlwZV9zaW50NjQ7CisJY2xzX3N0cnVjdF9maWVsZHNbOV0gPSBOVUxMOworCisJZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1szXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LCAmY2xzX3N0cnVjdF90eXBlLAorCQlkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc19kYmxbMF0gPSAmZV9kYmw7CisJYXJnc19kYmxbMV0gPSAmZl9kYmw7CisJYXJnc19kYmxbMl0gPSAmZ19kYmw7CisJYXJnc19kYmxbM10gPSAmaF9kYmw7CisJYXJnc19kYmxbNF0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNzJieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlIiBQUklkTEwgIlxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkJcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDE2IiB9ICovCisKKwlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfNzJieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzX2RibCA9ICgoc3RydWN0XzcyYnl0ZSgqKShzdHJ1Y3RfNzJieXRlLCBzdHJ1Y3RfNzJieXRlLAorCQlzdHJ1Y3RfNzJieXRlLCBzdHJ1Y3RfNzJieXRlKSkoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwsIGhfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiXG4yMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDE2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnICUiIFBSSWRMTCAiXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCQlyZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCwgcmVzX2RibC5pKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMTYiIH0gKi8KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTQ1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYwpAQCAtMCwwICsxLDQ0IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RybGVuIGZ1bmN0aW9uIGNhbGwuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHNpemVfdCBteV9zdHJsZW4oY2hhciAqcykKK3sKKyAgcmV0dXJuIChzdHJsZW4ocykpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByaW50OworICBjaGFyICpzOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKyAgdmFsdWVzWzBdID0gKHZvaWQqKSAmczsKKyAgCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHMgPSAiYSI7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKKyAgQ0hFQ0socmludCA9PSAxKTsKKyAgCisgIHMgPSAiMTIzNDU2NyI7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKKyAgQ0hFQ0socmludCA9PSA3KTsKKyAgCisgIHMgPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSI7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKKyAgQ0hFQ0socmludCA9PSAyNSk7CisgIAorICBleGl0ICgwKTsKK30KKyAgCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYmNjODcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYwpAQCAtMCwwICsxLDQ0IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RkY2FsbCBzdHJsZW4gY2FsbCBvbiBYODZfV0lOMzIgc3lzdGVtcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgc2l6ZV90IF9fYXR0cmlidXRlX18oKHN0ZGNhbGwpKSBteV9zdGRjYWxsX3N0cmxlbihjaGFyICpzKQoreworICByZXR1cm4gKHN0cmxlbihzKSk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmZmlfYXJnIHJpbnQ7CisgIGNoYXIgKnM7CisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKyAgdmFsdWVzWzBdID0gKHZvaWQqKSAmczsKKyAgCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX1NURENBTEwsIDEsCisJCSAgICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHMgPSAiYSI7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9zdGRjYWxsX3N0cmxlbiksICZyaW50LCB2YWx1ZXMpOworICBDSEVDSyhyaW50ID09IDEpOworICAKKyAgcyA9ICIxMjM0NTY3IjsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X3N0ZGNhbGxfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7CisgIENIRUNLKHJpbnQgPT0gNyk7CisgIAorICBzID0gIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUiOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RkY2FsbF9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKKyAgQ0hFQ0socmludCA9PSAyNSk7CisgIAorICBwcmludGYoInN0ZGNhbGwgc3RybGVuIHRlc3RzIHBhc3NlZFxuIik7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3NmM4NQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYwpAQCAtMCwwICsxLDY1IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdAoreworICB1bnNpZ25lZCBjaGFyIHVjOworICBkb3VibGUgZDsKKyAgdW5zaWduZWQgaW50IHVpOworfSB0ZXN0X3N0cnVjdHVyZV8xOworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMSBzdHJ1Y3QxKHRlc3Rfc3RydWN0dXJlXzEgdHMpCit7CisgIHRzLnVjKys7CisgIHRzLmQtLTsKKyAgdHMudWkrKzsKKworICByZXR1cm4gdHM7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmZmlfdHlwZSB0czFfdHlwZTsKKyAgZmZpX3R5cGUgKnRzMV90eXBlX2VsZW1lbnRzWzRdOworICB0czFfdHlwZS5zaXplID0gMDsKKyAgdHMxX3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgdHMxX3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgdHMxX3R5cGUuZWxlbWVudHMgPSB0czFfdHlwZV9lbGVtZW50czsKKyAgdHMxX3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIHRzMV90eXBlX2VsZW1lbnRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgdHMxX3R5cGVfZWxlbWVudHNbMl0gPSAmZmZpX3R5cGVfdWludDsKKyAgdHMxX3R5cGVfZWxlbWVudHNbM10gPSBOVUxMOworICAKKyAgdGVzdF9zdHJ1Y3R1cmVfMSB0czFfYXJnOworICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfMSAqdHMxX3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV8xICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzEpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHMxX3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czFfYXJnOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsIAorCQkgICAgICZ0czFfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzMV9hcmcudWMgPSAnXHgwMSc7CisgIHRzMV9hcmcuZCA9IDMuMTQxNTk7CisgIHRzMV9hcmcudWkgPSA1NTU7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDEpLCB0czFfcmVzdWx0LCB2YWx1ZXMpOworICAKKyAgQ0hFQ0sodHMxX3Jlc3VsdC0+dWkgPT0gNTU2KTsKKyAgQ0hFQ0sodHMxX3Jlc3VsdC0+ZCA9PSAzLjE0MTU5IC0gMSk7CisgCisgIGZyZWUgKHRzMV9yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YmM5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyLmMKQEAgLTAsMCArMSw2NyBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZG91YmxlIGQxOworICBkb3VibGUgZDI7Cit9IHRlc3Rfc3RydWN0dXJlXzI7CisKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV8yIHN0cnVjdDIodGVzdF9zdHJ1Y3R1cmVfMiB0cykKK3sKKyAgdHMuZDEtLTsKKyAgdHMuZDItLTsKKworICByZXR1cm4gdHM7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICB0ZXN0X3N0cnVjdHVyZV8yIHRzMl9hcmc7CisgIGZmaV90eXBlIHRzMl90eXBlOworICBmZmlfdHlwZSAqdHMyX3R5cGVfZWxlbWVudHNbM107CisgIHRzMl90eXBlLnNpemUgPSAwOworICB0czJfdHlwZS5hbGlnbm1lbnQgPSAwOworICB0czJfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICB0czJfdHlwZS5lbGVtZW50cyA9IHRzMl90eXBlX2VsZW1lbnRzOworICB0czJfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHRzMl90eXBlX2VsZW1lbnRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgdHMyX3R5cGVfZWxlbWVudHNbMl0gPSBOVUxMOworCisgIAorICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfMiAqdHMyX3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV8yICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzIpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHMyX3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czJfYXJnOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czJfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzMl9hcmcuZDEgPSA1LjU1OworICB0czJfYXJnLmQyID0gNi42NjsKKyAgCisgIHByaW50ZiAoIiVnXG4iLCB0czJfYXJnLmQxKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzMl9hcmcuZDIpOworICAKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDIpLCB0czJfcmVzdWx0LCB2YWx1ZXMpOworICAKKyAgcHJpbnRmICgiJWdcbiIsIHRzMl9yZXN1bHQtPmQxKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzMl9yZXN1bHQtPmQyKTsKKyAgCisgIENIRUNLKHRzMl9yZXN1bHQtPmQxID09IDUuNTUgLSAxKTsKKyAgQ0hFQ0sodHMyX3Jlc3VsdC0+ZDIgPT0gNi42NiAtIDEpOworICAKKyAgZnJlZSAodHMyX3Jlc3VsdCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiYjA5YgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYwpAQCAtMCwwICsxLDU5IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgc2k7Cit9IHRlc3Rfc3RydWN0dXJlXzM7CisKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV8zIHN0cnVjdDModGVzdF9zdHJ1Y3R1cmVfMyB0cykKK3sKKyAgdHMuc2kgPSAtKHRzLnNpKjIpOworCisgIHJldHVybiB0czsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGludCBjb21wYXJlX3ZhbHVlOworICBmZmlfdHlwZSB0czNfdHlwZTsKKyAgZmZpX3R5cGUgKnRzM190eXBlX2VsZW1lbnRzWzJdOworICB0czNfdHlwZS5zaXplID0gMDsKKyAgdHMzX3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgdHMzX3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgdHMzX3R5cGUuZWxlbWVudHMgPSB0czNfdHlwZV9lbGVtZW50czsKKyAgdHMzX3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgdHMzX3R5cGVfZWxlbWVudHNbMV0gPSBOVUxMOworCisgIHRlc3Rfc3RydWN0dXJlXzMgdHMzX2FyZzsKKyAgdGVzdF9zdHJ1Y3R1cmVfMyAqdHMzX3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV8zICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzMpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHMzX3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czNfYXJnOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsIAorCQkgICAgICZ0czNfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzM19hcmcuc2kgPSAtMTIzOworICBjb21wYXJlX3ZhbHVlID0gdHMzX2FyZy5zaTsKKyAgCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdHJ1Y3QzKSwgdHMzX3Jlc3VsdCwgdmFsdWVzKTsKKyAgCisgIHByaW50ZiAoIiVkICVkXG4iLCB0czNfcmVzdWx0LT5zaSwgLShjb21wYXJlX3ZhbHVlKjIpKTsKKyAgCisgIENIRUNLKHRzM19yZXN1bHQtPnNpID09IC0oY29tcGFyZV92YWx1ZSoyKSk7CisgCisgIGZyZWUgKHRzM19yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZDBhODMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q0LmMKQEAgLTAsMCArMSw2MyBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdW5zaWduZWQgdWkxOworICB1bnNpZ25lZCB1aTI7CisgIHVuc2lnbmVkIHVpMzsKK30gdGVzdF9zdHJ1Y3R1cmVfNDsKKworc3RhdGljIHRlc3Rfc3RydWN0dXJlXzQgc3RydWN0NCh0ZXN0X3N0cnVjdHVyZV80IHRzKQoreworICB0cy51aTMgPSB0cy51aTEgKiB0cy51aTIgKiB0cy51aTM7CisKKyAgcmV0dXJuIHRzOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX3R5cGUgdHM0X3R5cGU7CisgIGZmaV90eXBlICp0czRfdHlwZV9lbGVtZW50c1s0XTsgIAorICB0czRfdHlwZS5zaXplID0gMDsKKyAgdHM0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgdHM0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgdGVzdF9zdHJ1Y3R1cmVfNCB0czRfYXJnOworICB0czRfdHlwZS5lbGVtZW50cyA9IHRzNF90eXBlX2VsZW1lbnRzOworICB0czRfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV91aW50OworICB0czRfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV91aW50OworICB0czRfdHlwZV9lbGVtZW50c1syXSA9ICZmZmlfdHlwZV91aW50OworICB0czRfdHlwZV9lbGVtZW50c1szXSA9IE5VTEw7CisKKyAgCisgIC8qIFRoaXMgaXMgYSBoYWNrIHRvIGdldCBhIHByb3Blcmx5IGFsaWduZWQgcmVzdWx0IGJ1ZmZlciAqLworICB0ZXN0X3N0cnVjdHVyZV80ICp0czRfcmVzdWx0ID0gCisgICAgKHRlc3Rfc3RydWN0dXJlXzQgKikgbWFsbG9jIChzaXplb2YodGVzdF9zdHJ1Y3R1cmVfNCkpOworICAKKyAgYXJnc1swXSA9ICZ0czRfdHlwZTsKKyAgdmFsdWVzWzBdID0gJnRzNF9hcmc7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzNF90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICAKKyAgdHM0X2FyZy51aTEgPSAyOworICB0czRfYXJnLnVpMiA9IDM7CisgIHRzNF9hcmcudWkzID0gNDsKKyAgCisgIGZmaV9jYWxsICgmY2lmLCBGRklfRk4oc3RydWN0NCksIHRzNF9yZXN1bHQsIHZhbHVlcyk7CisgIAorICBDSEVDSyh0czRfcmVzdWx0LT51aTMgPT0gMlUgKiAzVSAqIDRVKTsKKyAKKyAgCisgIGZyZWUgKHRzNF9yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwM2NjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q1LmMKQEAgLTAsMCArMSw2NSBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKK3R5cGVkZWYgc3RydWN0Cit7CisgIGNoYXIgYzE7CisgIGNoYXIgYzI7Cit9IHRlc3Rfc3RydWN0dXJlXzU7CisKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV81IHN0cnVjdDUodGVzdF9zdHJ1Y3R1cmVfNSB0czEsIHRlc3Rfc3RydWN0dXJlXzUgdHMyKQoreworICB0czEuYzEgKz0gdHMyLmMxOworICB0czEuYzIgLT0gdHMyLmMyOworICAKKyAgcmV0dXJuIHRzMTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV90eXBlIHRzNV90eXBlOworICBmZmlfdHlwZSAqdHM1X3R5cGVfZWxlbWVudHNbM107CisgIHRzNV90eXBlLnNpemUgPSAwOworICB0czVfdHlwZS5hbGlnbm1lbnQgPSAwOworICB0czVfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICB0czVfdHlwZS5lbGVtZW50cyA9IHRzNV90eXBlX2VsZW1lbnRzOworICB0czVfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9zY2hhcjsKKyAgdHM1X3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfc2NoYXI7CisgIHRzNV90eXBlX2VsZW1lbnRzWzJdID0gTlVMTDsKKworICB0ZXN0X3N0cnVjdHVyZV81IHRzNV9hcmcxLCB0czVfYXJnMjsKKyAgCisgIC8qIFRoaXMgaXMgYSBoYWNrIHRvIGdldCBhIHByb3Blcmx5IGFsaWduZWQgcmVzdWx0IGJ1ZmZlciAqLworICB0ZXN0X3N0cnVjdHVyZV81ICp0czVfcmVzdWx0ID0gCisgICAgKHRlc3Rfc3RydWN0dXJlXzUgKikgbWFsbG9jIChzaXplb2YodGVzdF9zdHJ1Y3R1cmVfNSkpOworICAKKyAgYXJnc1swXSA9ICZ0czVfdHlwZTsKKyAgYXJnc1sxXSA9ICZ0czVfdHlwZTsKKyAgdmFsdWVzWzBdID0gJnRzNV9hcmcxOworICB2YWx1ZXNbMV0gPSAmdHM1X2FyZzI7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJnRzNV90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICAKKyAgdHM1X2FyZzEuYzEgPSAyOworICB0czVfYXJnMS5jMiA9IDY7CisgIHRzNV9hcmcyLmMxID0gNTsKKyAgdHM1X2FyZzIuYzIgPSAzOworICAKKyAgZmZpX2NhbGwgKCZjaWYsIEZGSV9GTihzdHJ1Y3Q1KSwgdHM1X3Jlc3VsdCwgdmFsdWVzKTsKKyAgCisgIENIRUNLKHRzNV9yZXN1bHQtPmMxID09IDcpOyAKKyAgQ0hFQ0sodHM1X3Jlc3VsdC0+YzIgPT0gMyk7CisgIAorICAKKyAgZnJlZSAodHM1X3Jlc3VsdCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkYjlhZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDYuYwpAQCAtMCwwICsxLDY0IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZmxvYXQgZjsKKyAgZG91YmxlIGQ7Cit9IHRlc3Rfc3RydWN0dXJlXzY7CisKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV82IHN0cnVjdDYgKHRlc3Rfc3RydWN0dXJlXzYgdHMpCit7CisgIHRzLmYgKz0gMTsKKyAgdHMuZCArPSAxOworICAKKyAgcmV0dXJuIHRzOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX3R5cGUgdHM2X3R5cGU7CisgIGZmaV90eXBlICp0czZfdHlwZV9lbGVtZW50c1szXTsKKyAgdHM2X3R5cGUuc2l6ZSA9IDA7CisgIHRzNl90eXBlLmFsaWdubWVudCA9IDA7CisgIHRzNl90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIHRzNl90eXBlLmVsZW1lbnRzID0gdHM2X3R5cGVfZWxlbWVudHM7CisgIHRzNl90eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICB0czZfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHRzNl90eXBlX2VsZW1lbnRzWzJdID0gTlVMTDsKKworCisgIHRlc3Rfc3RydWN0dXJlXzYgdHM2X2FyZzsKKworICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfNiAqdHM2X3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV82ICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzYpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHM2X3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czZfYXJnOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmdHM2X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICB0czZfYXJnLmYgPSA1LjU1ZjsKKyAgdHM2X2FyZy5kID0gNi42NjsKKyAgCisgIHByaW50ZiAoIiVnXG4iLCB0czZfYXJnLmYpOworICBwcmludGYgKCIlZ1xuIiwgdHM2X2FyZy5kKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oc3RydWN0NiksIHRzNl9yZXN1bHQsIHZhbHVlcyk7CisgICAgCisgIENIRUNLKHRzNl9yZXN1bHQtPmYgPT0gNS41NWYgKyAxKTsKKyAgQ0hFQ0sodHM2X3Jlc3VsdC0+ZCA9PSA2LjY2ICsgMSk7CisgICAgCisgIGZyZWUgKHRzNl9yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YWFjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q3LmMKQEAgLTAsMCArMSw3NCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKK3R5cGVkZWYgc3RydWN0Cit7CisgIGZsb2F0IGYxOworICBmbG9hdCBmMjsKKyAgZG91YmxlIGQ7Cit9IHRlc3Rfc3RydWN0dXJlXzc7CisKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV83IHN0cnVjdDcgKHRlc3Rfc3RydWN0dXJlXzcgdHMpCit7CisgIHRzLmYxICs9IDE7CisgIHRzLmYyICs9IDE7CisgIHRzLmQgKz0gMTsKKworICByZXR1cm4gdHM7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmZmlfdHlwZSB0czdfdHlwZTsKKyAgZmZpX3R5cGUgKnRzN190eXBlX2VsZW1lbnRzWzRdOworICB0czdfdHlwZS5zaXplID0gMDsKKyAgdHM3X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgdHM3X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgdHM3X3R5cGUuZWxlbWVudHMgPSB0czdfdHlwZV9lbGVtZW50czsKKyAgdHM3X3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIHRzN190eXBlX2VsZW1lbnRzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICB0czdfdHlwZV9lbGVtZW50c1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHRzN190eXBlX2VsZW1lbnRzWzNdID0gTlVMTDsKKworCisgIHRlc3Rfc3RydWN0dXJlXzcgdHM3X2FyZzsKKyAgCisgIC8qIFRoaXMgaXMgYSBoYWNrIHRvIGdldCBhIHByb3Blcmx5IGFsaWduZWQgcmVzdWx0IGJ1ZmZlciAqLworICB0ZXN0X3N0cnVjdHVyZV83ICp0czdfcmVzdWx0ID0gCisgICAgKHRlc3Rfc3RydWN0dXJlXzcgKikgbWFsbG9jIChzaXplb2YodGVzdF9zdHJ1Y3R1cmVfNykpOworICAKKyAgYXJnc1swXSA9ICZ0czdfdHlwZTsKKyAgdmFsdWVzWzBdID0gJnRzN19hcmc7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzN190eXBlLCBhcmdzKSA9PSBGRklfT0spOworICAKKyAgdHM3X2FyZy5mMSA9IDUuNTVmOworICB0czdfYXJnLmYyID0gNTUuNWY7CisgIHRzN19hcmcuZCA9IDYuNjY7CisKKyAgcHJpbnRmICgiJWdcbiIsIHRzN19hcmcuZjEpOworICBwcmludGYgKCIlZ1xuIiwgdHM3X2FyZy5mMik7CisgIHByaW50ZiAoIiVnXG4iLCB0czdfYXJnLmQpOworICAKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDcpLCB0czdfcmVzdWx0LCB2YWx1ZXMpOworCisgIHByaW50ZiAoIiVnXG4iLCB0czdfcmVzdWx0LT5mMSk7CisgIHByaW50ZiAoIiVnXG4iLCB0czdfcmVzdWx0LT5mMik7CisgIHByaW50ZiAoIiVnXG4iLCB0czdfcmVzdWx0LT5kKTsKKyAgCisgIENIRUNLKHRzN19yZXN1bHQtPmYxID09IDUuNTVmICsgMSk7CisgIENIRUNLKHRzN19yZXN1bHQtPmYyID09IDU1LjVmICsgMSk7CisgIENIRUNLKHRzN19yZXN1bHQtPmQgPT0gNi42NiArIDEpOworICAKKyAgZnJlZSAodHM3X3Jlc3VsdCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3M2FjNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDguYwpAQCAtMCwwICsxLDgwIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZmxvYXQgZjE7CisgIGZsb2F0IGYyOworICBmbG9hdCBmMzsKKyAgZmxvYXQgZjQ7Cit9IHRlc3Rfc3RydWN0dXJlXzg7CisKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV84IHN0cnVjdDggKHRlc3Rfc3RydWN0dXJlXzggdHMpCit7CisgIHRzLmYxICs9IDE7CisgIHRzLmYyICs9IDE7CisgIHRzLmYzICs9IDE7CisgIHRzLmY0ICs9IDE7CisKKyAgcmV0dXJuIHRzOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX3R5cGUgdHM4X3R5cGU7CisgIGZmaV90eXBlICp0czhfdHlwZV9lbGVtZW50c1s1XTsKKyAgdHM4X3R5cGUuc2l6ZSA9IDA7CisgIHRzOF90eXBlLmFsaWdubWVudCA9IDA7CisgIHRzOF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIHRzOF90eXBlLmVsZW1lbnRzID0gdHM4X3R5cGVfZWxlbWVudHM7CisgIHRzOF90eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICB0czhfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdHM4X3R5cGVfZWxlbWVudHNbMl0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIHRzOF90eXBlX2VsZW1lbnRzWzNdID0gJmZmaV90eXBlX2Zsb2F0OworICB0czhfdHlwZV9lbGVtZW50c1s0XSA9IE5VTEw7CisKKyAgdGVzdF9zdHJ1Y3R1cmVfOCB0czhfYXJnOworICAKKyAgLyogVGhpcyBpcyBhIGhhY2sgdG8gZ2V0IGEgcHJvcGVybHkgYWxpZ25lZCByZXN1bHQgYnVmZmVyICovCisgIHRlc3Rfc3RydWN0dXJlXzggKnRzOF9yZXN1bHQgPSAKKyAgICAodGVzdF9zdHJ1Y3R1cmVfOCAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV84KSk7CisgIAorICBhcmdzWzBdID0gJnRzOF90eXBlOworICB2YWx1ZXNbMF0gPSAmdHM4X2FyZzsKKyAgCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmdHM4X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICB0czhfYXJnLmYxID0gNS41NWY7CisgIHRzOF9hcmcuZjIgPSA1NS41ZjsKKyAgdHM4X2FyZy5mMyA9IC01LjU1ZjsKKyAgdHM4X2FyZy5mNCA9IC01NS41ZjsKKworICBwcmludGYgKCIlZ1xuIiwgdHM4X2FyZy5mMSk7CisgIHByaW50ZiAoIiVnXG4iLCB0czhfYXJnLmYyKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzOF9hcmcuZjMpOworICBwcmludGYgKCIlZ1xuIiwgdHM4X2FyZy5mNCk7CisgIAorICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oc3RydWN0OCksIHRzOF9yZXN1bHQsIHZhbHVlcyk7CisKKyAgcHJpbnRmICgiJWdcbiIsIHRzOF9yZXN1bHQtPmYxKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzOF9yZXN1bHQtPmYyKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzOF9yZXN1bHQtPmYzKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzOF9yZXN1bHQtPmY0KTsKKyAgCisgIENIRUNLKHRzOF9yZXN1bHQtPmYxID09IDUuNTVmICsgMSk7CisgIENIRUNLKHRzOF9yZXN1bHQtPmYyID09IDU1LjVmICsgMSk7CisgIENIRUNLKHRzOF9yZXN1bHQtPmYzID09IC01LjU1ZiArIDEpOworICBDSEVDSyh0czhfcmVzdWx0LT5mNCA9PSAtNTUuNWYgKyAxKTsKKyAgCisgIGZyZWUgKHRzOF9yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMDA5MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmMKQEAgLTAsMCArMSw2NyBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZmxvYXQgZjsKKyAgaW50IGk7Cit9IHRlc3Rfc3RydWN0dXJlXzk7CisKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV85IHN0cnVjdDkgKHRlc3Rfc3RydWN0dXJlXzkgdHMpCit7CisgIHRzLmYgKz0gMTsKKyAgdHMuaSArPSAxOworCisgIHJldHVybiB0czsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV90eXBlIHRzOV90eXBlOworICBmZmlfdHlwZSAqdHM5X3R5cGVfZWxlbWVudHNbM107CisgIHRzOV90eXBlLnNpemUgPSAwOworICB0czlfdHlwZS5hbGlnbm1lbnQgPSAwOworICB0czlfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICB0czlfdHlwZS5lbGVtZW50cyA9IHRzOV90eXBlX2VsZW1lbnRzOworICB0czlfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdHM5X3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgdHM5X3R5cGVfZWxlbWVudHNbMl0gPSBOVUxMOworCisgIHRlc3Rfc3RydWN0dXJlXzkgdHM5X2FyZzsKKyAgCisgIC8qIFRoaXMgaXMgYSBoYWNrIHRvIGdldCBhIHByb3Blcmx5IGFsaWduZWQgcmVzdWx0IGJ1ZmZlciAqLworICB0ZXN0X3N0cnVjdHVyZV85ICp0czlfcmVzdWx0ID0gCisgICAgKHRlc3Rfc3RydWN0dXJlXzkgKikgbWFsbG9jIChzaXplb2YodGVzdF9zdHJ1Y3R1cmVfOSkpOworICAKKyAgYXJnc1swXSA9ICZ0czlfdHlwZTsKKyAgdmFsdWVzWzBdID0gJnRzOV9hcmc7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzOV90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICAKKyAgdHM5X2FyZy5mID0gNS41NWY7CisgIHRzOV9hcmcuaSA9IDU7CisgIAorICBwcmludGYgKCIlZ1xuIiwgdHM5X2FyZy5mKTsKKyAgcHJpbnRmICgiJWRcbiIsIHRzOV9hcmcuaSk7CisgIAorICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oc3RydWN0OSksIHRzOV9yZXN1bHQsIHZhbHVlcyk7CisKKyAgcHJpbnRmICgiJWdcbiIsIHRzOV9yZXN1bHQtPmYpOworICBwcmludGYgKCIlZFxuIiwgdHM5X3Jlc3VsdC0+aSk7CisgIAorICBDSEVDSyh0czlfcmVzdWx0LT5mID09IDUuNTVmICsgMSk7CisgIENIRUNLKHRzOV9yZXN1bHQtPmkgPT0gNSArIDEpOworCisgIGZyZWUgKHRzOV9yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdGVzdGNsb3N1cmUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxY2M4OQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmMKQEAgLTAsMCArMSw3MCBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgZmxvYXQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJNDE5MDguCisgICBPcmlnaW5hdG9yOgk8cmZtQGdudS5vcmc+IDIwMDkxMTAyCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIHsKKyAgZmxvYXQgYTsKKyAgZmxvYXQgYjsKKyAgZmxvYXQgYzsKKyAgZmxvYXQgZDsKK30gY2xzX3N0cnVjdF9jb21iaW5lZDsKKwordm9pZCBjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIGFyZykKK3sKKyAgcHJpbnRmKCIlZyAlZyAlZyAlZ1xuIiwKKwkgYXJnLmEsIGFyZy5iLAorCSBhcmcuYywgYXJnLmQpOworICBmZmx1c2goc3Rkb3V0KTsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfY29tYmluZWRfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AgX19VTlVTRURfXywKKyAgICAgICAgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIGEwOworCisgIGEwID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCopKGFyZ3NbMF0pOworCisgIGNsc19zdHJ1Y3RfY29tYmluZWRfZm4oYTApOworfQorCisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMFs1XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlMDsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlMC5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMC5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUwLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTAuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczA7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgZ19kYmwgPSB7NC4wLCA1LjAsIDEuMCwgOC4wfTsKKworICBjbHNfc3RydWN0X2ZpZWxkczBbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMFsxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xzX3N0cnVjdF9maWVsZHMwWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkczBbM10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMFs0XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGUwOworICBkYmxfYXJnX3R5cGVzWzFdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmZmZpX3R5cGVfdm9pZCwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9jb21iaW5lZF9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICAoKHZvaWQoKikoY2xzX3N0cnVjdF9jb21iaW5lZCkpIChjb2RlKSkoZ19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiNCA1IDEgOCIgfSAqLworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZjU0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmgKQEAgLTAsMCArMSw5NiBAQAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlICJmZmljb25maWcuaCIKKworI2RlZmluZSBNQVhfQVJHUyAyNTYKKworCisvKiBEZWZpbmUgX19VTlVTRURfXyB0aGF0IGFsc28gb3RoZXIgY29tcGlsZXJzIHRoYW4gZ2NjIGNhbiBydW4gdGhlIHRlc3RzLiAgKi8KKyN1bmRlZiBfX1VOVVNFRF9fCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgX19VTlVTRURfXyBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKKyNlbHNlCisjZGVmaW5lIF9fVU5VU0VEX18KKyNlbmRpZgorCisjZGVmaW5lIENIRUNLKHgpICghKHgpID8gYWJvcnQoKSA6ICh2b2lkKTApCisKKy8qIFByZWZlciBNQVBfQU5PTihZTU9VUykgdG8gL2Rldi96ZXJvLCBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgYQorICAgZmlsZSBvcGVuLiAgKi8KKyNpZmRlZiBIQVZFX01NQVBfQU5PTgorIyB1bmRlZiBIQVZFX01NQVBfREVWX1pFUk8KKworIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyBpZm5kZWYgTUFQX0ZBSUxFRAorIyAgZGVmaW5lIE1BUF9GQUlMRUQgLTEKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQgKE1BUF9BTk9OKQorIyAgZGVmaW5lIE1BUF9BTk9OWU1PVVMgTUFQX0FOT04KKyMgZW5kaWYKKyMgZGVmaW5lIFVTSU5HX01NQVAKKworI2VuZGlmCisKKyNpZmRlZiBIQVZFX01NQVBfREVWX1pFUk8KKworIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyBpZm5kZWYgTUFQX0ZBSUxFRAorIyAgZGVmaW5lIE1BUF9GQUlMRUQgLTEKKyMgZW5kaWYKKyMgZGVmaW5lIFVTSU5HX01NQVAKKworI2VuZGlmCisKKworLyogTWluR1cga2x1ZGdlLiAgKi8KKyNpZmRlZiBfV0lONjQKKyNkZWZpbmUgUFJJZExMICJJNjRkIgorI2RlZmluZSBQUkl1TEwgIkk2NHUiCisjZWxzZQorI2RlZmluZSBQUklkTEwgImxsZCIKKyNkZWZpbmUgUFJJdUxMICJsbHUiCisjZW5kaWYKKworI2lmZGVmIFVTSU5HX01NQVAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCithbGxvY2F0ZV9tbWFwIChzaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqcGFnZTsKKyNpZiBkZWZpbmVkIChIQVZFX01NQVBfREVWX1pFUk8pCisgIHN0YXRpYyBpbnQgZGV2X3plcm9fZmQgPSAtMTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9NTUFQX0RFVl9aRVJPCisgIGlmIChkZXZfemVyb19mZCA9PSAtMSkKKyAgICB7CisgICAgICBkZXZfemVyb19mZCA9IG9wZW4gKCIvZGV2L3plcm8iLCBPX1JET05MWSk7CisgICAgICBpZiAoZGV2X3plcm9fZmQgPT0gLTEpCisJeworCSAgcGVycm9yICgib3BlbiAvZGV2L3plcm86ICVtIik7CisJICBleGl0ICgxKTsKKwl9CisgICAgfQorI2VuZGlmCisKKworI2lmZGVmIEhBVkVfTU1BUF9BTk9OCisgIHBhZ2UgPSBtbWFwIChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLAorCSAgICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTU1BUF9ERVZfWkVSTworICBwYWdlID0gbW1hcCAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQywKKwkgICAgICAgTUFQX1BSSVZBVEUsIGRldl96ZXJvX2ZkLCAwKTsKKyNlbmRpZgorCisgIGlmIChwYWdlID09IChjaGFyICopIE1BUF9GQUlMRUQpCisgICAgeworICAgICAgcGVycm9yICgidmlydHVhbCBtZW1vcnkgZXhoYXVzdGVkIik7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgcmV0dXJuIHBhZ2U7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTY3ZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAKQEAgLTAsMCArMSwzNyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitsb2FkX2xpYiBsaWJmZmktZGcuZXhwCisKK2RnLWluaXQKK2xpYmZmaS1pbml0CisKK2dsb2JhbCBzcmNkaXIgc3ViZGlyCisKK2dsb2JhbCBjeHhfb3B0aW9ucworCitzZXQgY3h4X29wdGlvbnMgIiAtc2hhcmVkLWxpYmdjYyAtbHN0ZGMrKyIKKworZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY2NdXSAkY3h4X29wdGlvbnMgIi1PMCAtVyAtV2FsbCIKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNjXV0gJGN4eF9vcHRpb25zICItTzIiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jY11dICRjeHhfb3B0aW9ucyAiLU8zIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY2NdXSAkY3h4X29wdGlvbnMgIi1PcyIKKworZGctZmluaXNoCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyB0Y2wtaW5kZW50LWxldmVsOjQKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmZmQ0YQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MKQEAgLTAsMCArMSwxMjQgQEAKKy8qIEFyZWE6CWZmaV9jbG9zdXJlLCB1bndpbmQgaW5mbworICAgUHVycG9zZToJQ2hlY2sgaWYgdGhlIHVud2luZCBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgY29ycmVjdGx5LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglKZWZmIFN0dXJtIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4gICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0Y3h4LmgiCisKKyNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisKK3ZvaWQKK2Nsb3N1cmVfdGVzdF9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCBfX1VOVVNFRF9fLAorCQl2b2lkKiogYXJncyBfX1VOVVNFRF9fLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICB0aHJvdyA5OworfQorCit0eXBlZGVmIHZvaWQgKCpjbG9zdXJlX3Rlc3RfdHlwZSkoKTsKKwordm9pZCBjbG9zdXJlX3Rlc3RfZm4xKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLAorCQkgICAgICB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKKyB7CisgICAgKihmZmlfYXJnKilyZXNwID0KKyAgICAgIChpbnQpKihmbG9hdCAqKWFyZ3NbMF0gKyhpbnQpKCooZmxvYXQgKilhcmdzWzFdKSArCisgICAgICAoaW50KSgqKGZsb2F0ICopYXJnc1syXSkgKyAoaW50KSooZmxvYXQgKilhcmdzWzNdICsKKyAgICAgIChpbnQpKCooc2lnbmVkIHNob3J0ICopYXJnc1s0XSkgKyAoaW50KSgqKGZsb2F0ICopYXJnc1s1XSkgKworICAgICAgKGludCkqKGZsb2F0ICopYXJnc1s2XSArIChpbnQpKCooaW50ICopYXJnc1s3XSkgKworICAgICAgKGludCkoKihkb3VibGUqKWFyZ3NbOF0pICsgKGludCkqKGludCAqKWFyZ3NbOV0gKworICAgICAgKGludCkoKihpbnQgKilhcmdzWzEwXSkgKyAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pICsKKyAgICAgIChpbnQpKihpbnQgKilhcmdzWzEyXSArIChpbnQpKCooaW50ICopYXJnc1sxM10pICsKKyAgICAgIChpbnQpKCooaW50ICopYXJnc1sxNF0pICsgKihpbnQgKilhcmdzWzE1XSArIChpbnQpKGludHB0cl90KXVzZXJkYXRhOworCisgICAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWRcbiIsCisJICAgKGludCkqKGZsb2F0ICopYXJnc1swXSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMV0pLAorCSAgIChpbnQpKCooZmxvYXQgKilhcmdzWzJdKSwgKGludCkqKGZsb2F0ICopYXJnc1szXSwKKwkgICAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pLCAoaW50KSgqKGZsb2F0ICopYXJnc1s1XSksCisJICAgKGludCkqKGZsb2F0ICopYXJnc1s2XSwgKGludCkoKihpbnQgKilhcmdzWzddKSwKKwkgICAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pLCAoaW50KSooaW50ICopYXJnc1s5XSwKKwkgICAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSwKKwkgICAoaW50KSooaW50ICopYXJnc1sxMl0sIChpbnQpKCooaW50ICopYXJnc1sxM10pLAorCSAgIChpbnQpKCooaW50ICopYXJnc1sxNF0pLCAqKGludCAqKWFyZ3NbMTVdLAorCSAgIChpbnQpKGludHB0cl90KXVzZXJkYXRhLCAoaW50KSooZmZpX2FyZyopcmVzcCk7CisKKyAgICB0aHJvdyAoaW50KSooZmZpX2FyZyopcmVzcDsKK30KKwordHlwZWRlZiBpbnQgKCpjbG9zdXJlX3Rlc3RfdHlwZTEpKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBzaWduZWQgc2hvcnQsCisJCQkJICBmbG9hdCwgZmxvYXQsIGludCwgZG91YmxlLCBpbnQsIGludCwgZmxvYXQsCisJCQkJICBpbnQsIGludCwgaW50LCBpbnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSAoZmZpX2Nsb3N1cmUgKilmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKworICB7CisgICAgY2xfYXJnX3R5cGVzWzFdID0gTlVMTDsKKworICAgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDAsCisJCSAgICAgICAmZmZpX3R5cGVfdm9pZCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworICAgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X2ZuLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgICAgdHJ5CisgICAgICB7CisJKCooKGNsb3N1cmVfdGVzdF90eXBlKShjb2RlKSkpKCk7CisgICAgICB9IGNhdGNoIChpbnQgZXhjZXB0aW9uX2NvZGUpCisgICAgICB7CisJQ0hFQ0soZXhjZXB0aW9uX2NvZGUgPT0gOSk7CisgICAgICB9CisKKyAgICBwcmludGYoInBhcnQgb25lIE9LXG4iKTsKKyAgICAvKiB7IGRnLW91dHB1dCAicGFydCBvbmUgT0siIH0gKi8KKyAgICB9CisKKyAgICB7CisKKyAgICAgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgICAgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgICAgIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgICAgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgICAgIGNsX2FyZ190eXBlc1s0XSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgICAgICBjbF9hcmdfdHlwZXNbNV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbNl0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbN10gPSAmZmZpX3R5cGVfdWludDsKKyAgICAgIGNsX2FyZ190eXBlc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgICAgICBjbF9hcmdfdHlwZXNbOV0gPSAmZmZpX3R5cGVfdWludDsKKyAgICAgIGNsX2FyZ190eXBlc1sxMF0gPSAmZmZpX3R5cGVfdWludDsKKyAgICAgIGNsX2FyZ190eXBlc1sxMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbMTJdID0gJmZmaV90eXBlX3VpbnQ7CisgICAgICBjbF9hcmdfdHlwZXNbMTNdID0gJmZmaV90eXBlX3VpbnQ7CisgICAgICBjbF9hcmdfdHlwZXNbMTRdID0gJmZmaV90eXBlX3VpbnQ7CisgICAgICBjbF9hcmdfdHlwZXNbMTVdID0gJmZmaV90eXBlX3VpbnQ7CisgICAgICBjbF9hcmdfdHlwZXNbMTZdID0gTlVMTDsKKworICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgICAgICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxNiwKKwkJCSAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgICAgICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9mbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSAgPT0gRkZJX09LKTsKKyAgICAgIHRyeQorCXsKKwkgICgqKChjbG9zdXJlX3Rlc3RfdHlwZTEpY29kZSkpCisJICAgICgxLjEsIDIuMiwgMy4zLCA0LjQsIDEyNywgNS41LCA2LjYsIDgsIDksIDEwLCAxMSwgMTIuMCwgMTMsCisJICAgICAxOSwgMjEsIDEpOworCSAgLyogeyBkZy1vdXRwdXQgIlxuMSAyIDMgNCAxMjcgNSA2IDggOSAxMCAxMSAxMiAxMyAxOSAyMSAxIDM6IDI1NSIgfSAqLworCX0gY2F0Y2ggKGludCBleGNlcHRpb25fY29kZSkKKwl7CisJICBDSEVDSyhleGNlcHRpb25fY29kZSA9PSAyNTUpOworCX0KKyAgICAgIHByaW50ZigicGFydCB0d28gT0tcbiIpOworICAgICAgLyogeyBkZy1vdXRwdXQgIlxucGFydCB0d28gT0siIH0gKi8KKyAgICB9CisgICAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NzM5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCkBAIC0wLDAgKzEsNTMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCB1bndpbmQgaW5mbworICAgUHVycG9zZToJQ2hlY2sgaWYgdGhlIHVud2luZCBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgY29ycmVjdGx5LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglBbmRyZWFzIFRvYmxlciA8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDYxMjEzICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdGN4eC5oIgorCitzdGF0aWMgaW50IGNoZWNraW5nKGludCBhIF9fVU5VU0VEX18sIHNob3J0IGIgX19VTlVTRURfXywKKwkJICAgIHNpZ25lZCBjaGFyIGMgX19VTlVTRURfXykKK3sKKyAgdGhyb3cgOTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKworICBzaWduZWQgaW50IHNpOworICBzaWduZWQgc2hvcnQgc3M7CisgIHNpZ25lZCBjaGFyIHNjOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgdmFsdWVzWzBdID0gJnNpOworICBhcmdzWzFdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgdmFsdWVzWzFdID0gJnNzOworICBhcmdzWzJdID0gJmZmaV90eXBlX3NjaGFyOworICB2YWx1ZXNbMl0gPSAmc2M7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDMsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgc2kgPSAtNjsKKyAgc3MgPSAtMTI7CisgIHNjID0gLTE7CisgIHsKKyAgICB0cnkKKyAgICAgIHsKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2hlY2tpbmcpLCAmcmludCwgdmFsdWVzKTsKKyAgICAgIH0gY2F0Y2ggKGludCBleGNlcHRpb25fY29kZSkKKyAgICAgIHsKKwlDSEVDSyhleGNlcHRpb25fY29kZSA9PSA5KTsKKyAgICAgIH0KKyAgICBwcmludGYoInBhcnQgb25lIE9LXG4iKTsKKyAgICAvKiB7IGRnLW91dHB1dCAicGFydCBvbmUgT0siIH0gKi8KKyAgfQorICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXhpbmZvLnRleCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGV4aW5mby50ZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyYzQwNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGV4aW5mby50ZXgKQEAgLTAsMCArMSw3MjEwIEBACislIHRleGluZm8udGV4IC0tIFRlWCBtYWNyb3MgdG8gaGFuZGxlIFRleGluZm8gZmlsZXMuCislCislIExvYWQgcGxhaW4gaWYgbmVjZXNzYXJ5LCBpLmUuLCBpZiBydW5uaW5nIHVuZGVyIGluaXRleC4KK1xleHBhbmRhZnRlclxpZnhcY3NuYW1lIGZtdG5hbWVcZW5kY3NuYW1lXHJlbGF4XGlucHV0IHBsYWluXGZpCislCitcZGVmXHRleGluZm92ZXJzaW9uezIwMDUtMDctMDUuMTl9CislCislIENvcHlyaWdodCAoQykgMTk4NSwgMTk4NiwgMTk4OCwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwKKyUgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlCislIEZvdW5kYXRpb24sIEluYy4KKyUKKyUgVGhpcyB0ZXhpbmZvLnRleCBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorJSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworJSBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0CislIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyUKKyUgVGhpcyB0ZXhpbmZvLnRleCBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorJSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CislIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCislIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyUKKyUgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyUgYWxvbmcgd2l0aCB0aGlzIHRleGluZm8udGV4IGZpbGU7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZQorJSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorJSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyUKKyUgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgcmVhZCBieSBUZVggd2hlbiBwcm9jZXNzaW5nCislIGEgVGV4aW5mbyBzb3VyY2UgZG9jdW1lbnQsIHlvdSBtYXkgdXNlIHRoZSByZXN1bHQgd2l0aG91dAorJSByZXN0cmljdGlvbi4gIChUaGlzIGhhcyBiZWVuIG91ciBpbnRlbnQgc2luY2UgVGV4aW5mbyB3YXMgaW52ZW50ZWQuKQorJQorJSBQbGVhc2UgdHJ5IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0ZXhpbmZvLnRleCBiZWZvcmUgc3VibWl0dGluZyBidWcKKyUgcmVwb3J0czsgeW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb206CislICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vICh0aGUgVGV4aW5mbyBob21lIHBhZ2UpLCBvcgorJSAgIGZ0cDovL3R1Zy5vcmcvdGV4L3RleGluZm8udGV4CislICAgICAoYW5kIGFsbCBDVEFOIG1pcnJvcnMsIHNlZSBodHRwOi8vd3d3LmN0YW4ub3JnKS4KKyUgVGhlIHRleGluZm8udGV4IGluIGFueSBnaXZlbiBkaXN0cmlidXRpb24gY291bGQgd2VsbCBiZSBvdXQKKyUgb2YgZGF0ZSwgc28gaWYgdGhhdCdzIHdoYXQgeW91J3JlIHVzaW5nLCBwbGVhc2UgY2hlY2suCislCislIFNlbmQgYnVnIHJlcG9ydHMgdG8gYnVnLXRleGluZm9AZ251Lm9yZy4gIFBsZWFzZSBpbmNsdWRlIGluY2x1ZGluZyBhCislIGNvbXBsZXRlIGRvY3VtZW50IGluIGVhY2ggYnVnIHJlcG9ydCB3aXRoIHdoaWNoIHdlIGNhbiByZXByb2R1Y2UgdGhlCislIHByb2JsZW0uICBQYXRjaGVzIGFyZSwgb2YgY291cnNlLCBncmVhdGx5IGFwcHJlY2lhdGVkLgorJQorJSBUbyBwcm9jZXNzIGEgVGV4aW5mbyBtYW51YWwgd2l0aCBUZVgsIGl0J3MgbW9zdCByZWxpYWJsZSB0byB1c2UgdGhlCislIHRleGkyZHZpIHNoZWxsIHNjcmlwdCB0aGF0IGNvbWVzIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gIEZvciBhIHNpbXBsZQorJSBtYW51YWwgZm9vLnRleGksIGhvd2V2ZXIsIHlvdSBjYW4gZ2V0IGF3YXkgd2l0aCB0aGlzOgorJSAgIHRleCBmb28udGV4aQorJSAgIHRleGluZGV4IGZvby4/PworJSAgIHRleCBmb28udGV4aQorJSAgIHRleCBmb28udGV4aQorJSAgIGR2aXBzIGZvby5kdmkgLW8gICMgb3Igd2hhdGV2ZXI7IHRoaXMgbWFrZXMgZm9vLnBzLgorJSBUaGUgZXh0cmEgVGVYIHJ1bnMgZ2V0IHRoZSBjcm9zcy1yZWZlcmVuY2UgaW5mb3JtYXRpb24gY29ycmVjdC4KKyUgU29tZXRpbWVzIG9uZSBydW4gYWZ0ZXIgdGV4aW5kZXggc3VmZmljZXMsIGFuZCBzb21ldGltZXMgeW91IG5lZWQgbW9yZQorJSB0aGFuIHR3bzsgdGV4aTJkdmkgZG9lcyBpdCBhcyBtYW55IHRpbWVzIGFzIG5lY2Vzc2FyeS4KKyUKKyUgSXQgaXMgcG9zc2libGUgdG8gYWRhcHQgdGV4aW5mby50ZXggZm9yIG90aGVyIGxhbmd1YWdlcywgdG8gc29tZQorJSBleHRlbnQuICBZb3UgY2FuIGdldCB0aGUgZXhpc3RpbmcgbGFuZ3VhZ2Utc3BlY2lmaWMgZmlsZXMgZnJvbSB0aGUKKyUgZnVsbCBUZXhpbmZvIGRpc3RyaWJ1dGlvbi4KKyUKKyUgVGhlIEdOVSBUZXhpbmZvIGhvbWUgcGFnZSBpcyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby4KKworCitcbWVzc2FnZXtMb2FkaW5nIHRleGluZm8gW3ZlcnNpb24gXHRleGluZm92ZXJzaW9uXTp9CisKKyUgSWYgaW4gYSAuZm10IGZpbGUsIHByaW50IHRoZSB2ZXJzaW9uIG51bWJlcgorJSBhbmQgdHVybiBvbiBhY3RpdmUgY2hhcmFjdGVycyB0aGF0IHdlIGNvdWxkbid0IGRvIGVhcmxpZXIgYmVjYXVzZQorJSB0aGV5IG1pZ2h0IGhhdmUgYXBwZWFyZWQgaW4gdGhlIGlucHV0IGZpbGUgbmFtZS4KK1xldmVyeWpvYntcbWVzc2FnZXtbVGV4aW5mbyB2ZXJzaW9uIFx0ZXhpbmZvdmVyc2lvbl19JQorICBcY2F0Y29kZWArPVxhY3RpdmUgXGNhdGNvZGVgXF89XGFjdGl2ZX0KKworXG1lc3NhZ2V7QmFzaWNzLH0KK1xjaGFyZGVmXG90aGVyPTEyCisKKyUgV2UgbmV2ZXIgd2FudCBwbGFpbidzIFxvdXRlciBkZWZpbml0aW9uIG9mIFwrIGluIFRleGluZm8uCislIEZvciBAdGV4LCB3ZSBjYW4gdXNlIFx0YWJhbGlnbi4KK1xsZXRcKyA9IFxyZWxheAorCislIFNhdmUgc29tZSBwbGFpbiB0ZXggbWFjcm9zIHdob3NlIG5hbWVzIHdlIHdpbGwgcmVkZWZpbmUuCitcbGV0XHB0ZXhiPVxiCitcbGV0XHB0ZXhidWxsZXQ9XGJ1bGxldAorXGxldFxwdGV4Yz1cYworXGxldFxwdGV4Y29tbWE9XCwKK1xsZXRccHRleGRvdD1cLgorXGxldFxwdGV4ZG90cz1cZG90cworXGxldFxwdGV4ZW5kPVxlbmQKK1xsZXRccHRleGVxdWl2PVxlcXVpdgorXGxldFxwdGV4ZXhjbGFtPVwhCitcbGV0XHB0ZXhmb290bm90ZT1cZm9vdG5vdGUKK1xsZXRccHRleGd0cj0+CitcbGV0XHB0ZXhoYXQ9XgorXGxldFxwdGV4aT1caQorXGxldFxwdGV4aW5kZW50PVxpbmRlbnQKK1xsZXRccHRleGluc2VydD1caW5zZXJ0CitcbGV0XHB0ZXhsYnJhY2U9XHsKK1xsZXRccHRleGxlc3M9PAorXGxldFxwdGV4bmV3d3JpdGVcbmV3d3JpdGUKK1xsZXRccHRleG5vaW5kZW50PVxub2luZGVudAorXGxldFxwdGV4cGx1cz0rCitcbGV0XHB0ZXhyYnJhY2U9XH0KK1xsZXRccHRleHNsYXNoPVwvCitcbGV0XHB0ZXhzdGFyPVwqCitcbGV0XHB0ZXh0PVx0CisKKyUgSWYgdGhpcyBjaGFyYWN0ZXIgYXBwZWFycyBpbiBhbiBlcnJvciBtZXNzYWdlIG9yIGhlbHAgc3RyaW5nLCBpdAorJSBzdGFydHMgYSBuZXcgbGluZSBpbiB0aGUgb3V0cHV0LgorXG5ld2xpbmVjaGFyID0gYF5eSgorCislIFVzZSBUZVggMy4wJ3MgXGlucHV0bGluZW5vIHRvIGdldCB0aGUgbGluZSBudW1iZXIsIGZvciBiZXR0ZXIgZXJyb3IKKyUgbWVzc2FnZXMsIGJ1dCBpZiB3ZSdyZSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBUZVgsIGRvbid0IGRvIGFueXRoaW5nLgorJQorXGlmeFxpbnB1dGxpbmVub1x0aGlzaXN1bmRlZmluZWQKKyAgXGxldFxsaW5lbnVtYmVyID0gXGVtcHR5ICUgUHJlLTMuMC4KK1xlbHNlCisgIFxkZWZcbGluZW51bWJlcntsLlx0aGVcaW5wdXRsaW5lbm86XHNwYWNlfQorXGZpCisKKyUgU2V0IHVwIGZpeGVkIHdvcmRzIGZvciBFbmdsaXNoIGlmIG5vdCBhbHJlYWR5IHNldC4KK1xpZnhccHV0d29yZEFwcGVuZGl4XHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZEFwcGVuZGl4e0FwcGVuZGl4fVxmaQorXGlmeFxwdXR3b3JkQ2hhcHRlclx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkQ2hhcHRlcntDaGFwdGVyfVxmaQorXGlmeFxwdXR3b3JkZmlsZVx1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkZmlsZXtmaWxlfVxmaQorXGlmeFxwdXR3b3JkaW5cdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3JkaW57aW59XGZpCitcaWZ4XHB1dHdvcmRJbmRleElzRW1wdHlcdW5kZWZpbmVkICAgICBcZ2RlZlxwdXR3b3JkSW5kZXhJc0VtcHR5eyhJbmRleCBpcyBlbXB0eSl9XGZpCitcaWZ4XHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkSW5kZXhOb25leGlzdGVudHsoSW5kZXggaXMgbm9uZXhpc3RlbnQpfVxmaQorXGlmeFxwdXR3b3JkSW5mb1x1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkSW5mb3tJbmZvfVxmaQorXGlmeFxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9mXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9me0luc3RhbmNlIFZhcmlhYmxlIG9mfVxmaQorXGlmeFxwdXR3b3JkTWV0aG9kb25cdW5kZWZpbmVkICBcZ2RlZlxwdXR3b3JkTWV0aG9kb257TWV0aG9kIG9ufVxmaQorXGlmeFxwdXR3b3JkTm9UaXRsZVx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkTm9UaXRsZXtObyBUaXRsZX1cZmkKK1xpZnhccHV0d29yZG9mXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZG9me29mfVxmaQorXGlmeFxwdXR3b3Jkb25cdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3Jkb257b259XGZpCitcaWZ4XHB1dHdvcmRwYWdlXHVuZGVmaW5lZCAgICAgIFxnZGVmXHB1dHdvcmRwYWdle3BhZ2V9XGZpCitcaWZ4XHB1dHdvcmRzZWN0aW9uXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRzZWN0aW9ue3NlY3Rpb259XGZpCitcaWZ4XHB1dHdvcmRTZWN0aW9uXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRTZWN0aW9ue1NlY3Rpb259XGZpCitcaWZ4XHB1dHdvcmRzZWVcdW5kZWZpbmVkICAgICAgIFxnZGVmXHB1dHdvcmRzZWV7c2VlfVxmaQorXGlmeFxwdXR3b3JkU2VlXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3JkU2Vle1NlZX1cZmkKK1xpZnhccHV0d29yZFNob3J0VE9DXHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZFNob3J0VE9De1Nob3J0IENvbnRlbnRzfVxmaQorXGlmeFxwdXR3b3JkVE9DXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3JkVE9De1RhYmxlIG9mIENvbnRlbnRzfVxmaQorJQorXGlmeFxwdXR3b3JkTUphblx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KYW57SmFudWFyeX1cZmkKK1xpZnhccHV0d29yZE1GZWJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNRmVie0ZlYnJ1YXJ5fVxmaQorXGlmeFxwdXR3b3JkTU1hclx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1NYXJ7TWFyY2h9XGZpCitcaWZ4XHB1dHdvcmRNQXByXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUFwcntBcHJpbH1cZmkKK1xpZnhccHV0d29yZE1NYXlcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTWF5e01heX1cZmkKK1xpZnhccHV0d29yZE1KdW5cdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSnVue0p1bmV9XGZpCitcaWZ4XHB1dHdvcmRNSnVsXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUp1bHtKdWx5fVxmaQorXGlmeFxwdXR3b3JkTUF1Z1x1bmRlZmluZWQgXGdkZWZccHV0d29yZE1BdWd7QXVndXN0fVxmaQorXGlmeFxwdXR3b3JkTVNlcFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1TZXB7U2VwdGVtYmVyfVxmaQorXGlmeFxwdXR3b3JkTU9jdFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1PY3R7T2N0b2Jlcn1cZmkKK1xpZnhccHV0d29yZE1Ob3ZcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTm92e05vdmVtYmVyfVxmaQorXGlmeFxwdXR3b3JkTURlY1x1bmRlZmluZWQgXGdkZWZccHV0d29yZE1EZWN7RGVjZW1iZXJ9XGZpCislCitcaWZ4XHB1dHdvcmREZWZtYWNcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZtYWN7TWFjcm99XGZpCitcaWZ4XHB1dHdvcmREZWZzcGVjXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmREZWZzcGVje1NwZWNpYWwgRm9ybX1cZmkKK1xpZnhccHV0d29yZERlZnZhclx1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZnZhcntWYXJpYWJsZX1cZmkKK1xpZnhccHV0d29yZERlZm9wdFx1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZm9wdHtVc2VyIE9wdGlvbn1cZmkKK1xpZnhccHV0d29yZERlZmZ1bmNcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZERlZmZ1bmN7RnVuY3Rpb259XGZpCisKKyUgSW4gc29tZSBtYWNyb3MsIHdlIGNhbm5vdCB1c2UgdGhlIGBcPyBub3RhdGlvbi0tLXRoZSBsZWZ0IHF1b3RlIGlzCislIGluIHNvbWUgY2FzZXMgdGhlIGVzY2FwZSBjaGFyLgorXGNoYXJkZWZcYmFja0NoYXIgID0gYFxcCitcY2hhcmRlZlxjb2xvbkNoYXIgPSBgXDoKK1xjaGFyZGVmXGNvbW1hQ2hhciA9IGBcLAorXGNoYXJkZWZcZG90Q2hhciAgID0gYFwuCitcY2hhcmRlZlxleGNsYW1DaGFyPSBgXCEKK1xjaGFyZGVmXHBsdXNDaGFyICA9IGBcKworXGNoYXJkZWZccXVlc3RDaGFyID0gYFw/CitcY2hhcmRlZlxzZW1pQ2hhciAgPSBgXDsKK1xjaGFyZGVmXHVuZGVyQ2hhciA9IGBcXworCitcY2hhcmRlZlxzcGFjZUNoYXIgPSBgXCAlCitcY2hhcmRlZlxzcGFjZWNhdCA9IDEwCitcZGVmXHNwYWNlaXNzcGFjZXtcY2F0Y29kZVxzcGFjZUNoYXI9XHNwYWNlY2F0fQorCit7JSBmb3IgaGVscCB3aXRoIGRlYnVnZ2luZy4KKyAlIGV4YW1wbGUgdXNhZ2U6IFxleHBhbmRhZnRlclxzaG93XGFjdGl2ZWJhY2tzbGFzaAorIFxjYXRjb2RlYFwhID0gMCBcY2F0Y29kZWBcXCA9IFxhY3RpdmUKKyAhZ2xvYmFsIWRlZiFhY3RpdmViYWNrc2xhc2h7XH0KK30KKworJSBJZ25vcmUgYSB0b2tlbi4KKyUKK1xkZWZcZ29iYmxlIzF7fQorCislIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBpbnNpZGUgc2V2ZXJhbCBcZWRlZidzLgorXGRlZlxtYWtlY3NuYW1lIzF7XGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZSMxXGVuZGNzbmFtZX0KKworJSBIeXBoZW5hdGlvbiBmaXhlcy4KK1xoeXBoZW5hdGlvbnsKKyAgRmxvci1pLWRhIEdob3N0LXNjcmlwdCBHaG9zdC12aWV3IE1hYy1PUyBQb3N0LVNjcmlwdAorICBhcC1wZW4tZGl4IGJpdC1tYXAgYml0LW1hcHMKKyAgZGF0YS1iYXNlIGRhdGEtYmFzZXMgZXNoZWxsIGZhbGwtaW5nIGhhbGYtd2F5IGxvbmctZXN0IG1hbi11LXNjcmlwdAorICBtYW4tdS1zY3JpcHRzIG1pbmktYnVmLWZlciBtaW5pLWJ1Zi1mZXJzIG92ZXItdmlldyBwYXItYS1kaWdtCisgIHBhci1hLWRpZ21zIHJhdGgtZXIgcmVjLXRhbi1ndS1sYXIgcm8tYm90LWljcyBzZS12ZXJlLWx5IHNldC11cCBzcGEtY2VzCisgIHNwZWxsLWluZyBzcGVsbC1pbmdzCisgIHN0YW5kLWFsb25lIHN0cm9uZy1lc3QgdGltZS1zdGFtcCB0aW1lLXN0YW1wcyB3aGljaC1ldmVyIHdoaXRlLXNwYWNlCisgIHdpZGUtc3ByZWFkIHdyYXAtYXJvdW5kCit9CisKKyUgTWFyZ2luIHRvIGFkZCB0byByaWdodCBvZiBldmVuIHBhZ2VzLCB0byBsZWZ0IG9mIG9kZCBwYWdlcy4KK1xuZXdkaW1lblxiaW5kaW5nb2Zmc2V0CitcbmV3ZGltZW5cbm9ybWFsb2Zmc2V0CitcbmV3ZGltZW5ccGFnZXdpZHRoIFxuZXdkaW1lblxwYWdlaGVpZ2h0CisKKyUgRm9yIGEgZmluYWwgY29weSwgdGFrZSBvdXQgdGhlIHJlY3RhbmdsZXMKKyUgdGhhdCBtYXJrIG92ZXJmdWxsIGJveGVzIChpbiBjYXNlIHlvdSBoYXZlIGRlY2lkZWQKKyUgdGhhdCB0aGUgdGV4dCBsb29rcyBvayBldmVuIHRob3VnaCBpdCBwYXNzZXMgdGhlIG1hcmdpbikuCislCitcZGVmXGZpbmFsb3V0e1xvdmVyZnVsbHJ1bGU9MHB0fQorCislIEB8IGluc2VydHMgYSBjaGFuZ2ViYXIgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIEl0IHNob3VsZAorJSBzdXJyb3VuZCBhbnkgY2hhbmdlZCB0ZXh0LiAgVGhpcyBhcHByb2FjaCBkb2VzICpub3QqIHdvcmsgaWYgdGhlCislIGNoYW5nZSBzcGFucyBtb3JlIHRoYW4gdHdvIGxpbmVzIG9mIG91dHB1dC4gIFRvIGhhbmRsZSB0aGF0LCB3ZSB3b3VsZAorJSBoYXZlIGFkb3B0IGEgbXVjaCBtb3JlIGRpZmZpY3VsdCBhcHByb2FjaCAocHV0dGluZyBtYXJrcyBpbnRvIHRoZSBtYWluCislIHZlcnRpY2FsIGxpc3QgZm9yIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBlYWNoIGNoYW5nZSkuCislCitcZGVmXHx7JQorICAlIFx2YWRqdXN0IGNhbiBvbmx5IGJlIHVzZWQgaW4gaG9yaXpvbnRhbCBtb2RlLgorICBcbGVhdmV2bW9kZQorICAlCisgICUgQXBwZW5kIHRoaXMgdmVydGljYWwgbW9kZSBtYXRlcmlhbCBhZnRlciB0aGUgY3VycmVudCBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx2YWRqdXN0eyUKKyAgICAlIFdlIHdhbnQgdG8gaW5zZXJ0IGEgcnVsZSB3aXRoIHRoZSBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSBjdXJyZW50CisgICAgJSBsZWFkaW5nOyB0aGF0IGlzIGV4YWN0bHkgd2hhdCBcc3RydXRib3ggaXMgc3VwcG9zZWQgdG8gcmVjb3JkLgorICAgIFx2c2tpcC1cYmFzZWxpbmVza2lwCisgICAgJQorICAgICUgXHZhZGp1c3QtaXRlbXMgYXJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHR5cGUuICBTbworICAgICUgdGhlIFxsbGFwIGhlcmUgbW92ZXMgb3V0IGludG8gdGhlIGxlZnQtaGFuZCBtYXJnaW4uCisgICAgXGxsYXB7JQorICAgICAgJQorICAgICAgJSBGb3IgYSB0aGlja2VyIG9yIHRoaW5uZXIgYmFyLCBjaGFuZ2UgdGhlIGAxcHQnLgorICAgICAgXHZydWxlIGhlaWdodFxiYXNlbGluZXNraXAgd2lkdGgxcHQKKyAgICAgICUKKyAgICAgICUgVGhpcyBpcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgYmFyIGFuZCB0aGUgdGV4dC4KKyAgICAgIFxoc2tpcCAxMnB0CisgICAgfSUKKyAgfSUKK30KKworJSBTb21ldGltZXMgaXQgaXMgY29udmVuaWVudCB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gdGhlIHRyYW5zY3JpcHQgZmlsZQorJSBhbmQgbm90aGluZyBvbiB0aGUgdGVybWluYWwuICBXZSBkb24ndCBqdXN0IGNhbGwgXHRyYWNpbmdhbGwgaGVyZSwKKyUgc2luY2UgdGhhdCBwcm9kdWNlcyBzb21lIHVzZWxlc3Mgb3V0cHV0IG9uIHRoZSB0ZXJtaW5hbC4gIFdlIGFsc28gbWFrZQorJSBzb21lIGVmZm9ydCB0byBvcmRlciB0aGUgdHJhY2luZyBjb21tYW5kcyB0byByZWR1Y2Ugb3V0cHV0IGluIHRoZSBsb2cKKyUgZmlsZTsgY2YuIHRyYWNlLnN0eSBpbiBMYVRlWC4KKyUKK1xkZWZcZ2xvZ2dpbmdhbGx7XGJlZ2luZ3JvdXAgXGdsb2JhbGRlZnMgPSAxIFxsb2dnaW5nYWxsIFxlbmRncm91cH0lCitcZGVmXGxvZ2dpbmdhbGx7JQorICBcdHJhY2luZ3N0YXRzMgorICBcdHJhY2luZ3BhZ2VzMQorICBcdHJhY2luZ2xvc3RjaGFyczIgICUgMiBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXHRyYWNpbmdwYXJhZ3JhcGhzMQorICBcdHJhY2luZ291dHB1dDEKKyAgXHRyYWNpbmdtYWNyb3MyCisgIFx0cmFjaW5ncmVzdG9yZXMxCisgIFxzaG93Ym94YnJlYWR0aFxtYXhkaW1lbiBcc2hvd2JveGRlcHRoXG1heGRpbWVuCisgIFxpZnhcZVRlWHZlcnNpb25cdW5kZWZpbmVkXGVsc2UgJSBldGV4IGdpdmVzIHVzIG1vcmUgbG9nZ2luZworICAgIFx0cmFjaW5nc2NhbnRva2VuczEKKyAgICBcdHJhY2luZ2lmczEKKyAgICBcdHJhY2luZ2dyb3VwczEKKyAgICBcdHJhY2luZ25lc3RpbmcyCisgICAgXHRyYWNpbmdhc3NpZ25zMQorICBcZmkKKyAgXHRyYWNpbmdjb21tYW5kczMgICUgMyBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXGVycm9yY29udGV4dGxpbmVzMTYKK30lCisKKyUgYWRkIGNoZWNrIGZvciBcbGFzdHBlbmFsdHkgdG8gcGxhaW4ncyBkZWZpbml0aW9ucy4gIElmIHRoZSBsYXN0IHRoaW5nCislIHdlIGRpZCB3YXMgYSBcbm9icmVhaywgd2UgZG9uJ3Qgd2FudCB0byBpbnNlcnQgbW9yZSBzcGFjZS4KKyUKK1xkZWZcc21hbGxicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxzbWFsbHNraXBhbW91bnQKKyAgXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHktNTBcc21hbGxza2lwXGZpXGZpfQorXGRlZlxtZWRicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxtZWRza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTEwMFxtZWRza2lwXGZpXGZpfQorXGRlZlxiaWdicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxiaWdza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTIwMFxiaWdza2lwXGZpXGZpfQorCislIEZvciBAY3JvcG1hcmtzIGNvbW1hbmQuCislIERvIEBjcm9wbWFya3MgdG8gZ2V0IGNyb3AgbWFya3MuCislCitcbmV3aWZcaWZjcm9wbWFya3MKK1xsZXRcY3JvcG1hcmtzID0gXGNyb3BtYXJrc3RydWUKKyUKKyUgRGltZW5zaW9ucyB0byBhZGQgY3JvcG1hcmtzIGF0IGNvcm5lcnMuCislIEFkZGVkIGJ5IFAuIEEuIE1hY0theSwgMTIgTm92LiAxOTg2CislCitcbmV3ZGltZW5cb3V0ZXJoc2l6ZSBcbmV3ZGltZW5cb3V0ZXJ2c2l6ZSAlIHNldCBieSB0aGUgcGFwZXIgc2l6ZSByb3V0aW5lcworXG5ld2RpbWVuXGNvcm5lcmxvbmcgIFxjb3JuZXJsb25nPTFwYworXG5ld2RpbWVuXGNvcm5lcnRoaWNrIFxjb3JuZXJ0aGljaz0uM3B0CitcbmV3ZGltZW5cdG9wYW5kYm90dG9tbWFyZ2luIFx0b3BhbmRib3R0b21tYXJnaW49Ljc1aW4KKworJSBNYWluIG91dHB1dCByb3V0aW5lLgorXGNoYXJkZWZcUEFHRSA9IDI1NQorXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fQorCitcbmV3Ym94XGhlYWRsaW5lYm94CitcbmV3Ym94XGZvb3RsaW5lYm94CisKKyUgXG9uZXBhZ2VvdXQgdGFrZXMgYSB2Ym94IGFzIGFuIGFyZ3VtZW50LiAgTm90ZSB0aGF0IFxwYWdlY29udGVudHMKKyUgZG9lcyBpbnNlcnRpb25zLCBidXQgeW91IGhhdmUgdG8gY2FsbCBpdCB5b3Vyc2VsZi4KK1xkZWZcb25lcGFnZW91dCMxeyUKKyAgXGlmY3JvcG1hcmtzIFxob2Zmc2V0PTBwdCBcZWxzZSBcaG9mZnNldD1cbm9ybWFsb2Zmc2V0IFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8gIFxhZHZhbmNlXGhvZmZzZXQgYnkgXGJpbmRpbmdvZmZzZXQKKyAgXGVsc2UgXGFkdmFuY2VcaG9mZnNldCBieSAtXGJpbmRpbmdvZmZzZXRcZmkKKyAgJQorICAlIERvIHRoaXMgb3V0c2lkZSBvZiB0aGUgXHNoaXBvdXQgc28gQGNvZGUgZXRjLiB3aWxsIGJlIGV4cGFuZGVkIGluCisgICUgdGhlIGhlYWRsaW5lIGFzIHRoZXkgc2hvdWxkIGJlLCBub3QgdGFrZW4gbGl0ZXJhbGx5IChvdXRwdXR0aW5nICcnY29kZSkuCisgIFxzZXRib3hcaGVhZGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2VoZWFkbGluZX0lCisgIFxzZXRib3hcZm9vdGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2Vmb290bGluZX0lCisgICUKKyAgeyUKKyAgICAlIEhhdmUgdG8gZG8gdGhpcyBzdHVmZiBvdXRzaWRlIHRoZSBcc2hpcG91dCBiZWNhdXNlIHdlIHdhbnQgaXQgdG8KKyAgICAlIHRha2UgZWZmZWN0IGluIFx3cml0ZSdzLCB5ZXQgdGhlIGdyb3VwIGRlZmluZWQgYnkgdGhlIFx2Ym94IGVuZHMKKyAgICAlIGJlZm9yZSB0aGUgXHNoaXBvdXQgcnVucy4KKyAgICAlCisgICAgXGluZGV4ZHVtbWllcyAgICAgICAgICUgZG9uJ3QgZXhwYW5kIGNvbW1hbmRzIGluIHRoZSBvdXRwdXQuCisgICAgXHNoaXBvdXRcdmJveHslCisgICAgICAlIERvIHRoaXMgZWFybHkgc28gcGRmIHJlZmVyZW5jZXMgZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZS4KKyAgICAgIFxpZnBkZm1ha2VwYWdlZGVzdCBccGRmZGVzdCBuYW1le1x0aGVccGFnZW5vfSB4eXpcZmkKKyAgICAgICUKKyAgICAgIFxpZmNyb3BtYXJrcyBcdmJveCB0byBcb3V0ZXJ2c2l6ZVxiZ3JvdXAKKyAgICAgICAgXGhzaXplID0gXG91dGVyaHNpemUKKyAgICAgICAgXHZza2lwLVx0b3BhbmRib3R0b21tYXJnaW4KKyAgICAgICAgXHZ0b3AgdG8wcHR7JQorICAgICAgICAgIFxsaW5le1xld3RvcFxoZmlsXGV3dG9wfSUKKyAgICAgICAgICBcbm9pbnRlcmxpbmVza2lwCisgICAgICAgICAgXGxpbmV7JQorICAgICAgICAgICAgXHZib3h7XG1vdmVsZWZ0XGNvcm5lcnRoaWNrXG5zdG9wfSUKKyAgICAgICAgICAgIFxoZmlsbAorICAgICAgICAgICAgXHZib3h7XG1vdmVyaWdodFxjb3JuZXJ0aGlja1xuc3RvcH0lCisgICAgICAgICAgfSUKKyAgICAgICAgICBcdnNzfSUKKyAgICAgICAgXHZza2lwXHRvcGFuZGJvdHRvbW1hcmdpbgorICAgICAgICBcbGluZVxiZ3JvdXAKKyAgICAgICAgICBcaGZpbCAlIGNlbnRlciB0aGUgcGFnZSB3aXRoaW4gdGhlIG91dGVyIChwYWdlKSBoc2l6ZS4KKyAgICAgICAgICBcaWZvZGRccGFnZW5vXGhza2lwXGJpbmRpbmdvZmZzZXRcZmkKKyAgICAgICAgICBcdmJveFxiZ3JvdXAKKyAgICAgIFxmaQorICAgICAgJQorICAgICAgXHVudmJveFxoZWFkbGluZWJveAorICAgICAgXHBhZ2Vib2R5eyMxfSUKKyAgICAgIFxpZmRpbVxodFxmb290bGluZWJveCA+IDBwdAorICAgICAgICAlIE9ubHkgbGVhdmUgdGhpcyBzcGFjZSBpZiB0aGUgZm9vdGxpbmUgaXMgbm9uZW1wdHkuCisgICAgICAgICUgKFdlIGxlc3NlbmVkIFx2c2l6ZSBmb3IgaXQgaW4gXG9kZGZvb3Rpbmd4eHguKQorICAgICAgICAlIFRoZSBcYmFzZWxpbmVza2lwPTI0cHQgaW4gcGxhaW4ncyBcbWFrZWZvb3RsaW5lIGhhcyBubyBlZmZlY3QuCisgICAgICAgIFx2c2tpcCAyXGJhc2VsaW5lc2tpcAorICAgICAgICBcdW52Ym94XGZvb3RsaW5lYm94CisgICAgICBcZmkKKyAgICAgICUKKyAgICAgIFxpZmNyb3BtYXJrcworICAgICAgICAgIFxlZ3JvdXAgJSBlbmQgb2YgXHZib3hcYmdyb3VwCisgICAgICAgIFxoZmlsXGVncm91cCAlIGVuZCBvZiAoY2VudGVyaW5nKSBcbGluZVxiZ3JvdXAKKyAgICAgICAgXHZza2lwXHRvcGFuZGJvdHRvbW1hcmdpbiBwbHVzMWZpbGwgbWludXMxZmlsbAorICAgICAgICBcYm94bWF4ZGVwdGggPSBcY29ybmVydGhpY2sKKyAgICAgICAgXHZib3ggdG8wcHR7XHZzcworICAgICAgICAgIFxsaW5leyUKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlbGVmdFxjb3JuZXJ0aGlja1xuc2JvdH0lCisgICAgICAgICAgICBcaGZpbGwKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlcmlnaHRcY29ybmVydGhpY2tcbnNib3R9JQorICAgICAgICAgIH0lCisgICAgICAgICAgXG5vaW50ZXJsaW5lc2tpcAorICAgICAgICAgIFxsaW5le1xld2JvdFxoZmlsXGV3Ym90fSUKKyAgICAgICAgfSUKKyAgICAgIFxlZ3JvdXAgJSBcdmJveCBmcm9tIGZpcnN0IGNyb3BtYXJrcyBjbGF1c2UKKyAgICAgIFxmaQorICAgIH0lIGVuZCBvZiBcc2hpcG91dFx2Ym94CisgIH0lIGVuZCBvZiBncm91cCB3aXRoIFxpbmRleGR1bW1pZXMKKyAgXGFkdmFuY2VwYWdlbm8KKyAgXGlmbnVtXG91dHB1dHBlbmFsdHk+LTIwMDAwIFxlbHNlXGRvc3VwZXJlamVjdFxmaQorfQorCitcbmV3aW5zZXJ0XG1hcmdpbiBcZGltZW5cbWFyZ2luPVxtYXhkaW1lbgorCitcZGVmXHBhZ2Vib2R5IzF7XHZib3ggdG9ccGFnZWhlaWdodHtcYm94bWF4ZGVwdGg9XG1heGRlcHRoICMxfX0KK3tcY2F0Y29kZWBcQCA9MTEKK1xnZGVmXHBhZ2Vjb250ZW50cyMxe1xpZnZvaWRcdG9waW5zXGVsc2VcdW52Ym94XHRvcGluc1xmaQorJSBtYXJnaW5hbCBoYWNrcywganVoYUB2aWlzYS51dWNwIChKdWhhIFRha2FsYSkKK1xpZnZvaWRcbWFyZ2luXGVsc2UgJSBtYXJnaW5hbCBpbmZvIGlzIHByZXNlbnQKKyAgXHJsYXB7XGtlcm5caHNpemVcdmJveCB0b1x6QHtca2VybjFwdFxib3hcbWFyZ2luIFx2c3N9fVxmaQorXGRpbWVuQD1cZHAjMSBcdW52Ym94IzEKK1xpZnZvaWRcZm9vdGluc1xlbHNlXHZza2lwXHNraXBcZm9vdGluc1xmb290bm90ZXJ1bGUgXHVudmJveFxmb290aW5zXGZpCitcaWZyQGdnZWRib3R0b20gXGtlcm4tXGRpbWVuQCBcdmZpbCBcZml9Cit9CisKKyUgSGVyZSBhcmUgdGhlIHJ1bGVzIGZvciB0aGUgY3JvcG1hcmtzLiAgTm90ZSB0aGF0IHRoZXkgYXJlCislIG9mZnNldCBzbyB0aGF0IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZW0gaXMgdHJ1bHkgXG91dGVyaHNpemUgb3IgXG91dGVydnNpemUKKyUgKFAuIEEuIE1hY0theSwgMTIgTm92ZW1iZXIsIDE5ODYpCislCitcZGVmXGV3dG9we1x2cnVsZSBoZWlnaHRcY29ybmVydGhpY2sgZGVwdGgwcHQgd2lkdGhcY29ybmVybG9uZ30KK1xkZWZcbnN0b3B7XHZib3gKKyAge1xocnVsZSBoZWlnaHRcY29ybmVydGhpY2sgZGVwdGhcY29ybmVybG9uZyB3aWR0aFxjb3JuZXJ0aGlja319CitcZGVmXGV3Ym90e1x2cnVsZSBoZWlnaHQwcHQgZGVwdGhcY29ybmVydGhpY2sgd2lkdGhcY29ybmVybG9uZ30KK1xkZWZcbnNib3R7XHZib3gKKyAge1xocnVsZSBoZWlnaHRcY29ybmVybG9uZyBkZXB0aFxjb3JuZXJ0aGljayB3aWR0aFxjb3JuZXJ0aGlja319CisKKyUgUGFyc2UgYW4gYXJndW1lbnQsIHRoZW4gcGFzcyBpdCB0byAjMS4gIFRoZSBhcmd1bWVudCBpcyB0aGUgcmVzdCBvZgorJSB0aGUgaW5wdXQgbGluZSAoZXhjZXB0IHdlIHJlbW92ZSBhIHRyYWlsaW5nIGNvbW1lbnQpLiAgIzEgc2hvdWxkIGJlIGEKKyUgbWFjcm8gd2hpY2ggZXhwZWN0cyBhbiBvcmRpbmFyeSB1bmRlbGltaXRlZCBUZVggYXJndW1lbnQuCislCitcZGVmXHBhcnNlYXJne1xwYXJzZWFyZ3VzaW5ne319CitcZGVmXHBhcnNlYXJndXNpbmcjMSMyeyUKKyAgXGRlZlxuZXh0eyMyfSUKKyAgXGJlZ2luZ3JvdXAKKyAgICBcb2JleWxpbmVzCisgICAgXHNwYWNlaXNzcGFjZQorICAgICMxJQorICAgIFxwYXJzZWFyZ2xpbmVcZW1wdHklIEluc2VydCB0aGUgXGVtcHR5IHRva2VuLCBzZWUgXGZpbmlzaHBhcnNlYXJnIGJlbG93LgorfQorCit7XG9iZXlsaW5lcyAlCisgIFxnZGVmXHBhcnNlYXJnbGluZSMxXl5NeyUKKyAgICBcZW5kZ3JvdXAgJSBFbmQgb2YgdGhlIGdyb3VwIHN0YXJ0ZWQgaW4gXHBhcnNlYXJnLgorICAgIFxhcmdyZW1vdmVjb21tZW50ICMxXGNvbW1lbnRcQXJnVGVybSUKKyAgfSUKK30KKworJSBGaXJzdCByZW1vdmUgYW55IEBjb21tZW50LCB0aGVuIGFueSBAYyBjb21tZW50LgorXGRlZlxhcmdyZW1vdmVjb21tZW50IzFcY29tbWVudCMyXEFyZ1Rlcm17XGFyZ3JlbW92ZWMgIzFcY1xBcmdUZXJtfQorXGRlZlxhcmdyZW1vdmVjIzFcYyMyXEFyZ1Rlcm17XGFyZ2NoZWNrc3BhY2VzIzFcXl5NXEFyZ1Rlcm19CisKKyUgRWFjaCBvY2N1cmVuY2Ugb2YgYFxeXk0nIG9yIGA8c3BhY2U+XF5eTScgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuCislCislIFxhcmdyZW1vdmVjIG1pZ2h0IGxlYXZlIHVzIHdpdGggdHJhaWxpbmcgc3BhY2UsIGUuZy4sCislICAgIEBlbmQgaXRlbWl6ZSAgQGMgZm9vCislIFRoaXMgc3BhY2UgdG9rZW4gdW5kZXJnb2VzIHRoZSBzYW1lIHByb2NlZHVyZSBhbmQgaXMgZXZlbnR1YWxseSByZW1vdmVkCislIGJ5IFxmaW5pc2hwYXJzZWFyZy4KKyUKK1xkZWZcYXJnY2hlY2tzcGFjZXMjMVxeXk17XGFyZ2NoZWNrc3BhY2VzWCMxXF5eTSBcXl5NfQorXGRlZlxhcmdjaGVja3NwYWNlc1gjMSBcXl5Ne1xhcmdjaGVja3NwYWNlc1kjMVxeXk19CitcZGVmXGFyZ2NoZWNrc3BhY2VzWSMxXF5eTSMyXF5eTSMzXEFyZ1Rlcm17JQorICBcZGVmXHRlbXB7IzN9JQorICBcaWZ4XHRlbXBcZW1wdHkKKyAgICAlIFdlIGNhbm5vdCB1c2UgXG5leHQgaGVyZSwgYXMgaXQgaG9sZHMgdGhlIG1hY3JvIHRvIHJ1bjsKKyAgICAlIHRodXMgd2UgcmV1c2UgXHRlbXAuCisgICAgXGxldFx0ZW1wXGZpbmlzaHBhcnNlYXJnCisgIFxlbHNlCisgICAgXGxldFx0ZW1wXGFyZ2NoZWNrc3BhY2VzCisgIFxmaQorICAlIFB1dCB0aGUgc3BhY2UgdG9rZW4gaW46CisgIFx0ZW1wIzEgIzNcQXJnVGVybQorfQorCislIElmIGEgX2RlbGltaXRlZF8gYXJndW1lbnQgaXMgZW5jbG9zZWQgaW4gYnJhY2VzLCB0aGV5IGdldCBzdHJpcHBlZDsgc28KKyUgdG8gZ2V0IF9leGFjdGx5XyB0aGUgcmVzdCBvZiB0aGUgbGluZSwgd2UgaGFkIHRvIHByZXZlbnQgc3VjaCBzaXR1YXRpb24uCislIFdlIHByZXBlbmRlZCBhbiBcZW1wdHkgdG9rZW4gYXQgdGhlIHZlcnkgYmVnaW5uaW5nIGFuZCB3ZSBleHBhbmQgaXQgbm93LAorJSBqdXN0IGJlZm9yZSBwYXNzaW5nIHRoZSBjb250cm9sIHRvIFxuZXh0LgorJSAoU2ltaWxhcmlseSwgd2UgaGF2ZSB0byB0aGluayBhYm91dCAjMyBvZiBcYXJnY2hlY2tzcGFjZXNZIGFib3ZlOiBpdCBpcworJSBlaXRoZXIgdGhlIG51bGwgc3RyaW5nLCBvciBpdCBlbmRzIHdpdGggXF5eTS0tLXRodXMgdGhlcmUgaXMgbm8gZGFuZ2VyCislIHRoYXQgYSBwYWlyIG9mIGJyYWNlcyB3b3VsZCBiZSBzdHJpcHBlZC4KKyUKKyUgQnV0IGZpcnN0LCB3ZSBoYXZlIHRvIHJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2UgdG9rZW4uCislCitcZGVmXGZpbmlzaHBhcnNlYXJnIzEgXEFyZ1Rlcm17XGV4cGFuZGFmdGVyXG5leHRcZXhwYW5kYWZ0ZXJ7IzF9fQorCislIFxwYXJzZWFyZ2RlZlxmb297Li4ufQorJQlpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8KKyUgXGRlZlxmb297XHBhcnNlYXJnXFhmb299CislIFxkZWZcWGZvbyMxey4uLn0KKyUKKyUgQWN0dWFsbHksIEkgdXNlIFxjc25hbWVcc3RyaW5nXGZvb1xlbmRjc25hbWUsIGllLiBcXGZvbywgYXMgaXQgaXMgbXkKKyUgZmF2b3VyaXRlIFRlWCB0cmljay4gIC0ta2FzYWwsIDE2bm92MDMKKworXGRlZlxwYXJzZWFyZ2RlZiMxeyUKKyAgXGV4cGFuZGFmdGVyIFxkb3BhcnNlYXJnZGVmIFxjc25hbWVcc3RyaW5nIzFcZW5kY3NuYW1lICMxJQorfQorXGRlZlxkb3BhcnNlYXJnZGVmIzEjMnslCisgIFxkZWYjMntccGFyc2VhcmcjMX0lCisgIFxkZWYjMSMjMSUKK30KKworJSBTZXZlcmFsIHV0aWxpdHkgZGVmaW5pdGlvbnMgd2l0aCBhY3RpdmUgc3BhY2U6Cit7CisgIFxvYmV5c3BhY2VzCisgIFxnZGVmXG9iZXllZHNwYWNleyB9CisKKyAgJSBNYWtlIGVhY2ggc3BhY2UgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCBwcm9kdWNlIGEgbm9ybWFsIGludGVyd29yZAorICAlIHNwYWNlIGluIHRoZSBvdXRwdXQuICBEb24ndCBhbGxvdyBhIGxpbmUgYnJlYWsgYXQgdGhpcyBzcGFjZSwgYXMgdGhpcworICAlIGlzIHVzZWQgb25seSBpbiBlbnZpcm9ubWVudHMgbGlrZSBAZXhhbXBsZSwgd2hlcmUgZWFjaCBsaW5lIG9mIGlucHV0CisgICUgc2hvdWxkIHByb2R1Y2UgYSBsaW5lIG9mIG91dHB1dCBhbnl3YXkuCisgICUKKyAgXGdkZWZcc2Vwc3BhY2Vze1xvYmV5c3BhY2VzXGxldCA9XHRpZX0KKworICAlIElmIGFuIGluZGV4IGNvbW1hbmQgaXMgdXNlZCBpbiBhbiBAZXhhbXBsZSBlbnZpcm9ubWVudCwgYW55IHNwYWNlcworICAlIHRoZXJlaW4gc2hvdWxkIGJlY29tZSByZWd1bGFyIHNwYWNlcyBpbiB0aGUgcmF3IGluZGV4IGZpbGUsIG5vdCB0aGUKKyAgJSBleHBhbnNpb24gb2YgXHRpZSAoXGxlYXZldm1vZGUgXHBlbmFsdHkgXEBNIFwgKS4KKyAgXGdkZWZcdW5zZXBzcGFjZXN7XGxldCA9XHNwYWNlfQorfQorCisKK1xkZWZcZmx1c2hjcntcaWZ4XHBhclxsaXNwcGFyIFxkZWZcbmV4dCMjMXt9XGVsc2UgXGxldFxuZXh0PVxyZWxheCBcZmkgXG5leHR9CisKKyUgRGVmaW5lIHRoZSBmcmFtZXdvcmsgZm9yIGVudmlyb25tZW50cyBpbiB0ZXhpbmZvLnRleC4gIEl0J3MgdXNlZCBsaWtlIHRoaXM6CislCislICAgXGVudmRlZlxmb297Li4ufQorJSAgIFxkZWZcRWZvb3suLi59CislCislIEl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIFxlbnZkZWYgdG8gaW5zZXJ0IFxiZWdpbmdyb3VwIGJlZm9yZSB0aGUKKyUgYWN0dWFsIGJvZHk7IEBlbmQgY2xvc2VzIHRoZSBncm91cCBhZnRlciBjYWxsaW5nIFxFZm9vLiAgXGVudmRlZiBhbHNvCislIGRlZmluZXMgXHRoaXNlbnYsIHNvIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIGtub3duOyBAZW5kIGNoZWNrcworJSB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCBuYW1lIG1hdGNoZXMuICBUaGUgXGNoZWNrZW52IG1hY3JvIGNhbiBhbHNvIGJlCislIHVzZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyB0aGUgb25lIGV4cGVjdGVkLgorJQorJSBOb24tZmFsc2UgY29uZGl0aW9uYWxzIChAaWZ0ZXgsIEBpZnNldCkgZG9uJ3QgZml0IGludG8gdGhpcywgc28gdGhleQorJSBhcmUgbm90IHRyZWF0ZWQgYXMgZW52aXJvbWVudHM7IHRoZXkgZG9uJ3Qgb3BlbiBhIGdyb3VwLiAgKFRoZQorJSBpbXBsZW1lbnRhdGlvbiBvZiBAZW5kIHRha2VzIGNhcmUgbm90IHRvIGNhbGwgXGVuZGdyb3VwIGluIHRoaXMKKyUgc3BlY2lhbCBjYXNlLikKKworCislIEF0IHJ1bnRpbWUsIGVudmlyb25tZW50cyBzdGFydCB3aXRoIHRoaXM6CitcZGVmXHN0YXJ0ZW52aXJvbm1lbnQjMXtcYmVnaW5ncm91cFxkZWZcdGhpc2VudnsjMX19CislIGluaXRpYWxpemUKK1xsZXRcdGhpc2VudlxlbXB0eQorCislIC4uLiBidXQgdGhleSBnZXQgZGVmaW5lZCB2aWEgYGBcZW52ZGVmXGZvb3suLi59Jyc6CitcbG9uZ1xkZWZcZW52ZGVmIzEjMntcZGVmIzF7XHN0YXJ0ZW52aXJvbm1lbnQjMSMyfX0KK1xkZWZcZW52cGFyc2VhcmdkZWYjMSMye1xwYXJzZWFyZ2RlZiMxe1xzdGFydGVudmlyb25tZW50IzEjMn19CisKKyUgQ2hlY2sgd2hldGhlciB3ZSdyZSBpbiB0aGUgcmlnaHQgZW52aXJvbm1lbnQ6CitcZGVmXGNoZWNrZW52IzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRoaXNlbnZcdGVtcAorICBcZWxzZQorICAgIFxiYWRlbnZlcnIKKyAgXGZpCit9CisKKyUgRXZpcm9ubWVudCBtaXNtYXRjaCwgIzEgZXhwZWN0ZWQ6CitcZGVmXGJhZGVudmVycnslCisgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgIFxlcnJtZXNzYWdle1RoaXMgY29tbWFuZCBjYW4gYXBwZWFyIG9ubHkgXGluZW52aXJvbm1lbnRcdGVtcCwKKyAgICBub3QgXGluZW52aXJvbm1lbnRcdGhpc2Vudn0lCit9CitcZGVmXGluZW52aXJvbm1lbnQjMXslCisgIFxpZngjMVxlbXB0eQorICAgIG91dCBvZiBhbnkgZW52aXJvbm1lbnQlCisgIFxlbHNlCisgICAgaW4gZW52aXJvbm1lbnQgXGV4cGFuZGFmdGVyXHN0cmluZyMxJQorICBcZmkKK30KKworJSBAZW5kIGZvbyBleGVjdXRlcyB0aGUgZGVmaW5pdGlvbiBvZiBcRWZvby4KKyUgQnV0IGZpcnN0LCBpdCBleGVjdXRlcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgXGNoZWNrZW52CislCitccGFyc2VhcmdkZWZcZW5keyUKKyAgXGlmIDFcY3NuYW1lIGlzY29uZC4jMVxlbmRjc25hbWUKKyAgXGVsc2UKKyAgICAlIFRoZSBnZW5lcmFsIHdvcmRpbmcgb2YgXGJhZGVudmVyciBtYXkgbm90IGJlIGlkZWFsLCBidXQuLi4gLS1rYXNhbCwgMDZub3YwMworICAgIFxleHBhbmRhZnRlclxjaGVja2Vudlxjc25hbWUjMVxlbmRjc25hbWUKKyAgICBcY3NuYW1lIEUjMVxlbmRjc25hbWUKKyAgICBcZW5kZ3JvdXAKKyAgXGZpCit9CisKK1xuZXdoZWxwXEVNc2ltcGxle1ByZXNzIFJFVFVSTiB0byBjb250aW51ZS59CisKKworJSUgU2ltcGxlIHNpbmdsZS1jaGFyYWN0ZXIgQCBjb21tYW5kcworCislIEBAIHByaW50cyBhbiBACislIEtsdWRnZSB0aGlzIHVudGlsIHRoZSBmb250cyBhcmUgcmlnaHQgKGdycikuCitcZGVmXEB7e1x0dFxjaGFyNjR9fQorCislIFRoaXMgaXMgdHVybmVkIG9mZiBiZWNhdXNlIGl0IHdhcyBuZXZlciBkb2N1bWVudGVkCislIGFuZCB5b3UgY2FuIHVzZSBAd3suLi59IGFyb3VuZCBhIHF1b3RlIHRvIHN1cHByZXNzIGxpZ2F0dXJlcy4KKyUlIERlZmluZSBAYCBhbmQgQCcgdG8gYmUgdGhlIHNhbWUgYXMgYCBhbmQgJworJSUgYnV0IHN1cHByZXNzaW5nIGxpZ2F0dXJlcy4KKyVcZGVmXGB7e2B9fQorJVxkZWZcJ3t7J319CisKKyUgVXNlZCB0byBnZW5lcmF0ZSBxdW90ZWQgYnJhY2VzLgorXGRlZlxteWxicmFjZSB7e1x0dFxjaGFyMTIzfX0KK1xkZWZcbXlyYnJhY2Uge3tcdHRcY2hhcjEyNX19CitcbGV0XHs9XG15bGJyYWNlCitcbGV0XH09XG15cmJyYWNlCitcYmVnaW5ncm91cAorICAlIERlZmluaXRpb25zIHRvIHByb2R1Y2UgXHsgYW5kIFx9IGNvbW1hbmRzIGZvciBpbmRpY2VzLAorICAlIGFuZCBAeyBhbmQgQH0gZm9yIHRoZSBhdXgvdG9jIGZpbGVzLgorICBcY2F0Y29kZWBceyA9IFxvdGhlciBcY2F0Y29kZWBcfSA9IFxvdGhlcgorICBcY2F0Y29kZWBcWyA9IDEgXGNhdGNvZGVgXF0gPSAyCisgIFxjYXRjb2RlYFwhID0gMCBcY2F0Y29kZWBcXCA9IFxvdGhlcgorICAhZ2RlZiFsYnJhY2VjbWRbXHtdJQorICAhZ2RlZiFyYnJhY2VjbWRbXH1dJQorICAhZ2RlZiFsYnJhY2VhdGNtZFtAe10lCisgICFnZGVmIXJicmFjZWF0Y21kW0B9XSUKKyFlbmRncm91cAorCislIEBjb21tYXt9IHRvIGF2b2lkICwgcGFyc2luZyBwcm9ibGVtcy4KK1xsZXRcY29tbWEgPSAsCisKKyUgQWNjZW50czogQCwgQGRvdGFjY2VudCBAcmluZ2FjY2VudCBAdWJhcmFjY2VudCBAdWRvdGFjY2VudAorJSBPdGhlcnMgYXJlIGRlZmluZWQgYnkgcGxhaW4gVGVYOiBAYCBAJyBAIiBAXiBAfiBAPSBAdSBAdiBASC4KK1xsZXRcLCA9IFxjCitcbGV0XGRvdGFjY2VudCA9IFwuCitcZGVmXHJpbmdhY2NlbnQjMXt7XGFjY2VudDIzICMxfX0KK1xsZXRcdGllYWNjZW50ID0gXHQKK1xsZXRcdWJhcmFjY2VudCA9IFxiCitcbGV0XHVkb3RhY2NlbnQgPSBcZAorCislIE90aGVyIHNwZWNpYWwgY2hhcmFjdGVyczogQHF1ZXN0aW9uZG93biBAZXhjbGFtZG93biBAb3JkZiBAb3JkbQorJSBQbGFpbiBUZVggZGVmaW5lczogQEFBIEBBRSBATyBAT0UgQEwgKHBsdXMgbG93ZXJjYXNlIHZlcnNpb25zKSBAc3MuCitcZGVmXHF1ZXN0aW9uZG93bns/YH0KK1xkZWZcZXhjbGFtZG93bnshYH0KK1xkZWZcb3JkZntcbGVhdmV2bW9kZVxyYWlzZTFleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFx1bmRlcmJhcnthfX19CitcZGVmXG9yZG17XGxlYXZldm1vZGVccmFpc2UxZXhcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBcdW5kZXJiYXJ7b319fQorCislIERvdGxlc3MgaSBhbmQgZG90bGVzcyBqLCB1c2VkIGZvciBhY2NlbnRzLgorXGRlZlxpbWFjcm97aX0KK1xkZWZcam1hY3Jve2p9CitcZGVmXGRvdGxlc3MjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxpbWFjcm8gXHB0ZXhpCisgIFxlbHNlXGlmeFx0ZW1wXGptYWNybyBcagorICBcZWxzZSBcZXJybWVzc2FnZXtAZG90bGVzcyBjYW4gYmUgdXNlZCBvbmx5IHdpdGggaSBvciBqfSUKKyAgXGZpXGZpCit9CisKKyUgVGhlIFxUZVh7fSBsb2dvLCBhcyBpbiBwbGFpbiwgYnV0IHJlc2V0dGluZyB0aGUgc3BhY2luZyBzbyB0aGF0IGEKKyUgcGVyaW9kIGZvbGxvd2luZyBjb3VudHMgYXMgZW5kaW5nIGEgc2VudGVuY2UuICAoSWRlYSBmb3VuZCBpbiBsYXRleC4pCislCitcZWRlZlxUZVh7XFRlWCBcc3BhY2VmYWN0b3I9MTAwMCB9CisKKyUgQExhVGVYe30gbG9nby4gIE5vdCBxdWl0ZSB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSBkZWZpbml0aW9uIGluCislIGxhdGV4Lmx0eCwgc2luY2Ugd2UgdXNlIGEgZGlmZmVyZW50IGZvbnQgZm9yIHRoZSByYWlzZWQgQTsgaXQncyBtb3N0CislIGNvbnZlbmllbnQgZm9yIHVzIHRvIHVzZSBhbiBleHBsaWNpdGx5IHNtYWxsZXIgZm9udCwgcmF0aGVyIHRoYW4gdXNpbmcKKyUgdGhlIFxzY3JpcHRzdHlsZSBmb250IChzaW5jZSB3ZSBkb24ndCByZXNldCBcc2NyaXB0c3R5bGUgYW5kCislIFxzY3JpcHRzY3JpcHRzdHlsZSkuCislCitcZGVmXExhVGVYeyUKKyAgTFxrZXJuLS4zNmVtCisgIHtcc2V0Ym94MD1caGJveHtUfSUKKyAgIFx2Ym94IHRvIFxodDB7XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgQX1cdnNzfX0lCisgIFxrZXJuLS4xNWVtCisgIFxUZVgKK30KKworJSBCZSBzdXJlIHdlJ3JlIGluIGhvcml6b250YWwgbW9kZSB3aGVuIGRvaW5nIGEgdGllLCBzaW5jZSB3ZSBtYWtlIHNwYWNlCislIGVxdWl2YWxlbnQgdG8gdGhpcyBpbiBAZXhhbXBsZS1saWtlIGVudmlyb25tZW50cy4gT3RoZXJ3aXNlLCBhIHNwYWNlCislIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIHdpbGwgc3RhcnQgd2l0aCBccGVuYWx0eSAtLSBhbmQKKyUgc2luY2UgXHBlbmFsdHkgaXMgdmFsaWQgaW4gdmVydGljYWwgbW9kZSwgd2UnZCBlbmQgdXAgcHV0dGluZyB0aGUKKyUgcGVuYWx0eSBvbiB0aGUgdmVydGljYWwgbGlzdCBpbnN0ZWFkIG9mIGluIHRoZSBuZXcgcGFyYWdyYXBoLgore1xjYXRjb2RlYEAgPSAxMQorICUgQXZvaWQgdXNpbmcgXEBNIGRpcmVjdGx5LCBiZWNhdXNlIHRoYXQgY2F1c2VzIHRyb3VibGUKKyAlIGlmIHRoZSBkZWZpbml0aW9uIGlzIHdyaXR0ZW4gaW50byBhbiBpbmRleCBmaWxlLgorIFxnbG9iYWxcbGV0XHRpZXBlbmFsdHkgPSBcQE0KKyBcZ2RlZlx0aWV7XGxlYXZldm1vZGVccGVuYWx0eVx0aWVwZW5hbHR5XCB9Cit9CisKKyUgQDogZm9yY2VzIG5vcm1hbCBzaXplIHdoaXRlc3BhY2UgZm9sbG93aW5nLgorXGRlZlw6e1xzcGFjZWZhY3Rvcj0xMDAwIH0KKworJSBAKiBmb3JjZXMgYSBsaW5lIGJyZWFrLgorXGRlZlwqe1xoZmlsXGJyZWFrXGhib3h7fVxpZ25vcmVzcGFjZXN9CisKKyUgQC8gYWxsb3dzIGEgbGluZSBicmVhay4KK1xsZXRcLz1cYWxsb3dicmVhaworCislIEAuIGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBwZXJpb2QuCitcZGVmXC57LlxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yXHNwYWNlfQorCislIEAhIGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBiYW5nLgorXGRlZlwheyFcc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAPyBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgcXVlcnkuCitcZGVmXD97P1xzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yXHNwYWNlfQorCislIEBmcmVuY2hzcGFjaW5nIG9ufG9mZiAgc2F5cyB3aGV0aGVyIHRvIHB1dCBleHRyYSBzcGFjZSBhZnRlciBwdW5jdHVhdGlvbi4KKyUgCitcZGVmXG9ud29yZHtvbn0KK1xkZWZcb2Zmd29yZHtvZmZ9CislCitccGFyc2VhcmdkZWZcZnJlbmNoc3BhY2luZ3slCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxvbndvcmQgXHBsYWluZnJlbmNoc3BhY2luZworICBcZWxzZVxpZnhcdGVtcFxvZmZ3b3JkIFxwbGFpbm5vbmZyZW5jaHNwYWNpbmcKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGZyZW5jaHNwYWNpbmcgb3B0aW9uIGBcdGVtcCcsIG11c3QgYmUgb24vb2ZmfSUKKyAgXGZpXGZpCit9CisKKyUgQHcgcHJldmVudHMgYSB3b3JkIGJyZWFrLiAgV2l0aG91dCB0aGUgXGxlYXZldm1vZGUsIEB3IGF0IHRoZQorJSBiZWdpbm5pbmcgb2YgYSBwYXJhZ3JhcGgsIHdoZW4gVGVYIGlzIHN0aWxsIGluIHZlcnRpY2FsIG1vZGUsIHdvdWxkCislIHByb2R1Y2UgYSB3aG9sZSBsaW5lIG9mIG91dHB1dCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIHRoZSBwYXJhZ3JhcGguCitcZGVmXHcjMXtcbGVhdmV2bW9kZVxoYm94eyMxfX0KKworJSBAZ3JvdXAgLi4uIEBlbmQgZ3JvdXAgZm9yY2VzIC4uLiB0byBiZSBhbGwgb24gb25lIHBhZ2UsIGJ5IGVuY2xvc2luZworJSBpdCBpbiBhIFRlWCB2Ym94LiAgV2UgdXNlIFx2dG9wIGluc3RlYWQgb2YgXHZib3ggdG8gY29uc3RydWN0IHRoZSBib3gKKyUgdG8ga2VlcCBpdHMgaGVpZ2h0IHRoYXQgb2YgYSBub3JtYWwgbGluZS4gIEFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yCislIFx0b3Bza2lwIChwLjExNCBvZiB0aGUgVGVYYm9vayksIHRoZSBnbHVlIGluc2VydGVkIGlzCislIG1heCAoXHRvcHNraXAgLSBcaHQgKGZpcnN0IGl0ZW0pLCAwKS4gIElmIHRoYXQgaGVpZ2h0IGlzIGxhcmdlLAorJSB0aGVyZWZvcmUsIG5vIGdsdWUgaXMgaW5zZXJ0ZWQsIGFuZCB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgaGVhZGxpbmUgYW5kCislIHRoZSB0ZXh0IGlzIHNtYWxsLCB3aGljaCBsb29rcyBiYWQuCislCislIEFub3RoZXIgY29tcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGdyb3VwIG1pZ2h0IGJlIHZlcnkgbGFyZ2UuICBUaGlzIGNhbgorJSBjYXVzZSB0aGUgZ2x1ZSBvbiB0aGUgcHJldmlvdXMgcGFnZSB0byBiZSB1bmR1bHkgc3RyZXRjaGVkLCBiZWNhdXNlIGl0CislIGRvZXMgbm90IGhhdmUgbXVjaCBtYXRlcmlhbC4gIEluIHRoaXMgY2FzZSwgaXQncyBiZXR0ZXIgdG8gYWRkIGFuCislIGV4cGxpY2l0IFx2ZmlsbCBzbyB0aGF0IHRoZSBleHRyYSBzcGFjZSBpcyBhdCB0aGUgYm90dG9tLiAgVGhlCislIHRocmVzaG9sZCBmb3IgZG9pbmcgdGhpcyBpcyBpZiB0aGUgZ3JvdXAgaXMgbW9yZSB0aGFuIFx2ZmlsbGxpbWl0CislIHBlcmNlbnQgb2YgYSBwYWdlIChcdmZpbGxsaW1pdCBjYW4gYmUgY2hhbmdlZCBpbnNpZGUgb2YgQHRleCkuCislCitcbmV3Ym94XGdyb3VwYm94CitcZGVmXHZmaWxsbGltaXR7MC43fQorJQorXGVudmRlZlxncm91cHslCisgIFxpZm51bVxjYXRjb2RlYFxeXk09XGFjdGl2ZSBcZWxzZQorICAgIFxlcnJoZWxwID0gXGdyb3VwaW52YWxpZGhlbHAKKyAgICBcZXJybWVzc2FnZXtAZ3JvdXAgaW52YWxpZCBpbiBjb250ZXh0IHdoZXJlIGZpbGxpbmcgaXMgZW5hYmxlZH0lCisgIFxmaQorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgXHNldGJveFxncm91cGJveCA9IFx2dG9wXGJncm91cAorICAgICUgRG8gQGNvbW1lbnQgc2luY2Ugd2UgYXJlIGNhbGxlZCBpbnNpZGUgYW4gZW52aXJvbm1lbnQgc3VjaCBhcworICAgICUgQGV4YW1wbGUsIHdoZXJlIGVhY2ggZW5kLW9mLWxpbmUgaW4gdGhlIGlucHV0IGNhdXNlcyBhbgorICAgICUgZW5kLW9mLWxpbmUgaW4gdGhlIG91dHB1dC4gIFdlIGRvbid0IHdhbnQgdGhlIGVuZC1vZi1saW5lIGFmdGVyCisgICAgJSB0aGUgYEBncm91cCcgdG8gcHV0IGV4dHJhIHNwYWNlIGluIHRoZSBvdXRwdXQuICBTaW5jZSBAZ3JvdXAKKyAgICAlIHNob3VsZCBhcHBlYXIgb24gYSBsaW5lIGJ5IGl0c2VsZiAoYWNjb3JkaW5nIHRvIHRoZSBUZXhpbmZvCisgICAgJSBtYW51YWwpLCB3ZSBkb24ndCB3b3JyeSBhYm91dCBlYXRpbmcgYW55IHVzZXIgdGV4dC4KKyAgICBcY29tbWVudAorfQorJQorJSBUaGUgXHZ0b3AgcHJvZHVjZXMgYSBib3ggd2l0aCBub3JtYWwgaGVpZ2h0IGFuZCBsYXJnZSBkZXB0aDsgdGh1cywgVGVYIHB1dHMKKyUgXGJhc2VsaW5lc2tpcCBnbHVlIGJlZm9yZSBpdCwgYW5kICh3aGVuIHRoZSBuZXh0IGxpbmUgb2YgdGV4dCBpcyBkb25lKQorJSBcbGluZXNraXAgZ2x1ZSBhZnRlciBpdC4gIFRodXMsIHNwYWNlIGJlbG93IGlzIG5vdCBxdWl0ZSBlcXVhbCB0byBzcGFjZQorJSBhYm92ZS4gIEJ1dCBpdCdzIHByZXR0eSBjbG9zZS4KK1xkZWZcRWdyb3VweyUKKyAgICAlIFRvIGdldCBjb3JyZWN0IGludGVybGluZSBzcGFjZSBiZXR3ZWVuIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGdyb3VwCisgICAgJSBhbmQgdGhlIGZpcnN0IGxpbmUgYWZ0ZXJ3YXJkcywgd2UgaGF2ZSB0byBwcm9wYWdhdGUgXHByZXZkZXB0aC4KKyAgICBcZW5kZ3JhZiAlIE5vdCBccGFyLCBhcyBpdCBtYXkgaGF2ZSBiZWVuIHNldCB0byBcbGlzcHBhci4KKyAgICBcZ2xvYmFsXGRpbWVuMSA9IFxwcmV2ZGVwdGgKKyAgXGVncm91cCAgICAgICAgICAgJSBFbmQgdGhlIFx2dG9wLgorICAlIFxkaW1lbjAgaXMgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIGdyb3VwJ3MgYm94LgorICBcZGltZW4wID0gXGh0XGdyb3VwYm94ICBcYWR2YW5jZVxkaW1lbjAgYnkgXGRwXGdyb3VwYm94CisgICUgXGRpbWVuMiBpcyBob3cgbXVjaCBzcGFjZSBpcyBsZWZ0IG9uIHRoZSBwYWdlIChtb3JlIG9yIGxlc3MpLgorICBcZGltZW4yID0gXHBhZ2VoZWlnaHQgICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxwYWdldG90YWwKKyAgJSBpZiB0aGUgZ3JvdXAgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJlbnQgcGFnZSwgYW5kIGl0J3MgYSBiaWcgYmlnCisgICUgZ3JvdXAsIGZvcmNlIGEgcGFnZSBicmVhay4KKyAgXGlmZGltIFxkaW1lbjAgPiBcZGltZW4yCisgICAgXGlmZGltIFxwYWdldG90YWwgPCBcdmZpbGxsaW1pdFxwYWdlaGVpZ2h0CisgICAgICBccGFnZQorICAgIFxmaQorICBcZmkKKyAgXGJveFxncm91cGJveAorICBccHJldmRlcHRoID0gXGRpbWVuMQorICBcY2hlY2tpbnNlcnRzCit9CislCislIFRlWCBwdXRzIGluIGFuIFxlc2NhcGVjaGFyIChpLmUuLCBgQCcpIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGhlbHAKKyUgbWVzc2FnZSwgc28gdGhpcyBlbmRzIHVwIHByaW50aW5nIGBAZ3JvdXAgY2FuIG9ubHkgLi4uJy4KKyUKK1xuZXdoZWxwXGdyb3VwaW52YWxpZGhlbHB7JQorZ3JvdXAgY2FuIG9ubHkgYmUgdXNlZCBpbiBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZXhhbXBsZSxeXkolCit3aGVyZSBlYWNoIGxpbmUgb2YgaW5wdXQgcHJvZHVjZXMgYSBsaW5lIG9mIG91dHB1dC59CisKKyUgQG5lZWQgc3BhY2UtaW4tbWlscworJSBmb3JjZXMgYSBwYWdlIGJyZWFrIGlmIHRoZXJlIGlzIG5vdCBzcGFjZS1pbi1taWxzIHJlbWFpbmluZy4KKworXG5ld2RpbWVuXG1pbCAgXG1pbD0wLjAwMWluCisKKyUgT2xkIGRlZmluaXRpb24tLWRpZG4ndCB3b3JrLgorJVxwYXJzZWFyZ2RlZlxuZWVke1xwYXIgJQorJSUgVGhpcyBtZXRob2QgdHJpZXMgdG8gbWFrZSBUZVggYnJlYWsgdGhlIHBhZ2UgbmF0dXJhbGx5CislJSBpZiB0aGUgZGVwdGggb2YgdGhlIGJveCBkb2VzIG5vdCBmaXQuCisle1xiYXNlbGluZXNraXA9MHB0JQorJVx2dG9wIHRvICMxXG1pbHtcdmZpbH1ca2VybiAtIzFcbWlsXG5vYnJlYWsKKyVccHJldmRlcHRoPS0xMDAwcHQKKyV9fQorCitccGFyc2VhcmdkZWZcbmVlZHslCisgICUgRW5zdXJlIHZlcnRpY2FsIG1vZGUsIHNvIHdlIGRvbid0IG1ha2UgYSBiaWcgYm94IGluIHRoZSBtaWRkbGUgb2YgYQorICAlIHBhcmFncmFwaC4KKyAgXHBhcgorICAlCisgICUgSWYgdGhlIEBuZWVkIHZhbHVlIGlzIGxlc3MgdGhhbiBvbmUgbGluZSBzcGFjZSwgaXQncyB1c2VsZXNzLgorICBcZGltZW4wID0gIzFcbWlsCisgIFxkaW1lbjIgPSBcaHRcc3RydXRib3gKKyAgXGFkdmFuY2VcZGltZW4yIGJ5IFxkcFxzdHJ1dGJveAorICBcaWZkaW1cZGltZW4wID4gXGRpbWVuMgorICAgICUKKyAgICAlIERvIGEgXHN0cnV0IGp1c3QgdG8gbWFrZSB0aGUgaGVpZ2h0IG9mIHRoaXMgYm94IGJlIG5vcm1hbCwgc28gdGhlCisgICAgJSBub3JtYWwgbGVhZGluZyBpcyBpbnNlcnRlZCByZWxhdGl2ZSB0byB0aGUgcHJlY2VkaW5nIGxpbmUuCisgICAgJSBBbmQgYSBwYWdlIGJyZWFrIGhlcmUgaXMgZmluZS4KKyAgICBcdnRvcCB0byAjMVxtaWx7XHN0cnV0XHZmaWx9JQorICAgICUKKyAgICAlIFRlWCBkb2VzIG5vdCBldmVuIGNvbnNpZGVyIHBhZ2UgYnJlYWtzIGlmIGEgcGVuYWx0eSBhZGRlZCB0byB0aGUKKyAgICAlIG1haW4gdmVydGljYWwgbGlzdCBpcyAxMDAwMCBvciBtb3JlLiAgQnV0IGluIG9yZGVyIHRvIHNlZSBpZiB0aGUKKyAgICAlIGVtcHR5IGJveCB3ZSBqdXN0IGFkZGVkIGZpdHMgb24gdGhlIHBhZ2UsIHdlIG11c3QgbWFrZSBpdCBjb25zaWRlcgorICAgICUgcGFnZSBicmVha3MuICBPbiB0aGUgb3RoZXIgaGFuZCwgd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBicmVhayB0aGUKKyAgICAlIHBhZ2UgYWZ0ZXIgdGhlIGVtcHR5IGJveC4gIFNvIHdlIHVzZSBhIHBlbmFsdHkgb2YgOTk5OS4KKyAgICAlCisgICAgJSBUaGVyZSBpcyBhbiBleHRyZW1lbHkgc21hbGwgY2hhbmNlIHRoYXQgVGVYIHdpbGwgYWN0dWFsbHkgYnJlYWsgdGhlCisgICAgJSBwYWdlIGF0IHRoaXMgXHBlbmFsdHksIGlmIHRoZXJlIGFyZSBubyBvdGhlciBmZWFzaWJsZSBicmVha3BvaW50cyBpbgorICAgICUgc2lnaHQuICAoSWYgdGhlIHVzZXIgaXMgdXNpbmcgbG90cyBvZiBiaWcgQGdyb3VwIGNvbW1hbmRzLCB3aGljaAorICAgICUgYWxtb3N0LWJ1dC1ub3QtcXVpdGUgZmlsbCB1cCBhIHBhZ2UsIFRlWCB3aWxsIGhhdmUgYSBoYXJkIHRpbWUgZG9pbmcKKyAgICAlIGdvb2QgcGFnZSBicmVha2luZywgZm9yIGV4YW1wbGUuKSAgSG93ZXZlciwgSSBjb3VsZCBub3QgY29uc3RydWN0IGFuCisgICAgJSBleGFtcGxlIHdoZXJlIGEgcGFnZSBicm9rZSBhdCB0aGlzIFxwZW5hbHR5OyBpZiBpdCBoYXBwZW5zIGluIGEgcmVhbAorICAgICUgZG9jdW1lbnQsIHRoZW4gd2UgY2FuIHJlY29uc2lkZXIgb3VyIHN0cmF0ZWd5LgorICAgIFxwZW5hbHR5OTk5OQorICAgICUKKyAgICAlIEJhY2sgdXAgYnkgdGhlIHNpemUgb2YgdGhlIGJveCwgd2hldGhlciB3ZSBkaWQgYSBwYWdlIGJyZWFrIG9yIG5vdC4KKyAgICBca2VybiAtIzFcbWlsCisgICAgJQorICAgICUgRG8gbm90IGFsbG93IGEgcGFnZSBicmVhayByaWdodCBhZnRlciB0aGlzIGtlcm4uCisgICAgXG5vYnJlYWsKKyAgXGZpCit9CisKKyUgQGJyICAgZm9yY2VzIHBhcmFncmFwaCBicmVhayAoYW5kIGlzIHVuZG9jdW1lbnRlZCkuCisKK1xsZXRcYnIgPSBccGFyCisKKyUgQHBhZ2UgZm9yY2VzIHRoZSBzdGFydCBvZiBhIG5ldyBwYWdlLgorJQorXGRlZlxwYWdle1xwYXJcdmZpbGxcc3VwZXJlamVjdH0KKworJSBAZXhkZW50IHRleHQuLi4uCislIG91dHB1dHMgdGV4dCBvbiBzZXBhcmF0ZSBsaW5lIGluIHJvbWFuIGZvbnQsIHN0YXJ0aW5nIGF0IHN0YW5kYXJkIHBhZ2UgbWFyZ2luCisKKyUgVGhpcyByZWNvcmRzIHRoZSBhbW91bnQgb2YgaW5kZW50IGluIHRoZSBpbm5lcm1vc3QgZW52aXJvbm1lbnQuCislIFRoYXQncyBob3cgbXVjaCBcZXhkZW50IHNob3VsZCB0YWtlIG91dC4KK1xuZXdza2lwXGV4ZGVudGFtb3VudAorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBmaWxsIGVudmlyb25tZW50cyBzdWNoIGFzIEBkZWZ1bi4KK1xwYXJzZWFyZ2RlZlxleGRlbnR7XGhmaWxcYnJlYWtcaGJveHtca2VybiAtXGV4ZGVudGFtb3VudHtccm0jMX19XGhmaWxcYnJlYWt9CisKKyUgVGhpcyBkZWZuIGlzIHVzZWQgaW5zaWRlIG5vZmlsbCBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZXhhbXBsZS4KK1xwYXJzZWFyZ2RlZlxub2ZpbGxleGRlbnR7e1xhZHZhbmNlIFxsZWZ0c2tpcCBieSAtXGV4ZGVudGFtb3VudAorICBcbGVmdGxpbmV7XGhza2lwXGxlZnRza2lwe1xybSMxfX19fQorCislIEBpbm1hcmdpbntXSElDSH17VEVYVH0gcHV0cyBURVhUIGluIHRoZSBXSElDSCBtYXJnaW4gbmV4dCB0byB0aGUgY3VycmVudAorJSBwYXJhZ3JhcGguICBGb3IgbW9yZSBnZW5lcmFsIHB1cnBvc2VzLCB1c2UgdGhlIFxtYXJnaW4gaW5zZXJ0aW9uCislIGNsYXNzLiAgV0hJQ0ggaXMgYGwnIG9yIGByJy4KKyUKK1xuZXdza2lwXGlubWFyZ2luc3BhY2luZyBcaW5tYXJnaW5zcGFjaW5nPTFjbQorXGRlZlxzdHJ1dGRlcHRoe1xkcFxzdHJ1dGJveH0KKyUKK1xkZWZcZG9pbm1hcmdpbiMxIzJ7XHN0cnV0XHZhZGp1c3R7JQorICBcbm9icmVhaworICBca2Vybi1cc3RydXRkZXB0aAorICBcdnRvcCB0byBcc3RydXRkZXB0aHslCisgICAgXGJhc2VsaW5lc2tpcD1cc3RydXRkZXB0aAorICAgIFx2c3MKKyAgICAlIGlmIHlvdSBoYXZlIG11bHRpcGxlIGxpbmVzIG9mIHN0dWZmIHRvIHB1dCBoZXJlLCB5b3UnbGwgbmVlZCB0bworICAgICUgbWFrZSB0aGUgdmJveCB5b3Vyc2VsZiBvZiB0aGUgYXBwcm9wcmlhdGUgc2l6ZS4KKyAgICBcaWZ4IzFsJQorICAgICAgXGxsYXB7XGlnbm9yZXNwYWNlcyAjMlxoc2tpcFxpbm1hcmdpbnNwYWNpbmd9JQorICAgIFxlbHNlCisgICAgICBccmxhcHtcaHNraXBcaHNpemUgXGhza2lwXGlubWFyZ2luc3BhY2luZyBcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcZmkKKyAgICBcbnVsbAorICB9JQorfX0KK1xkZWZcaW5sZWZ0bWFyZ2lue1xkb2lubWFyZ2luIGx9CitcZGVmXGlucmlnaHRtYXJnaW57XGRvaW5tYXJnaW4gcn0KKyUKKyUgQGlubWFyZ2lue1RFWFQgWywgUklHSFQtVEVYVF19CislIChpZiBSSUdIVC1URVhUIGlzIGdpdmVuLCB1c2UgVEVYVCBmb3IgbGVmdCBwYWdlLCBSSUdIVC1URVhUIGZvciByaWdodDsKKyUgZWxzZSB1c2UgVEVYVCBmb3IgYm90aCkuCislCitcZGVmXGlubWFyZ2luIzF7XHBhcnNlaW5tYXJnaW4gIzEsLFxmaW5pc2h9CitcZGVmXHBhcnNlaW5tYXJnaW4jMSwjMiwjM1xmaW5pc2h7JSBub3QgcGVyZmVjdCwgYnV0IGJldHRlciB0aGFuIG5vdGhpbmcuCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICBcZGVmXGxlZnR0ZXh0eyMxfSUgIGhhdmUgYm90aCB0ZXh0cworICAgIFxkZWZccmlnaHR0ZXh0eyMyfSUKKyAgXGVsc2UKKyAgICBcZGVmXGxlZnR0ZXh0eyMxfSUgIGhhdmUgb25seSBvbmUgdGV4dAorICAgIFxkZWZccmlnaHR0ZXh0eyMxfSUKKyAgXGZpCisgICUKKyAgXGlmb2RkXHBhZ2VubworICAgIFxkZWZcdGVtcHtcaW5yaWdodG1hcmdpblxyaWdodHRleHR9JSBvZGQgcGFnZSAtPiBvdXRzaWRlIGlzIHJpZ2h0IG1hcmdpbgorICBcZWxzZQorICAgIFxkZWZcdGVtcHtcaW5sZWZ0bWFyZ2luXGxlZnR0ZXh0fSUKKyAgXGZpCisgIFx0ZW1wCit9CisKKyUgQGluY2x1ZGUgZmlsZSAgICBpbnNlcnQgdGV4dCBvZiB0aGF0IGZpbGUgYXMgaW5wdXQuCislCitcZGVmXGluY2x1ZGV7XHBhcnNlYXJndXNpbmdcZmlsZW5hbWVjYXRjb2Rlc1xpbmNsdWRlenp6fQorXGRlZlxpbmNsdWRlenp6IzF7JQorICBccHVzaHRoaXNmaWxlc3RhY2sKKyAgXGRlZlx0aGlzZmlsZXsjMX0lCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZGVmXHRlbXB7XGlucHV0ICMxIH0lCisgICAgXGV4cGFuZGFmdGVyCisgIH1cdGVtcAorICBccG9wdGhpc2ZpbGVzdGFjaworfQorXGRlZlxmaWxlbmFtZWNhdGNvZGVzeyUKKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgIFxjYXRjb2RlYH49XG90aGVyCisgIFxjYXRjb2RlYF49XG90aGVyCisgIFxjYXRjb2RlYF89XG90aGVyCisgIFxjYXRjb2RlYHw9XG90aGVyCisgIFxjYXRjb2RlYDw9XG90aGVyCisgIFxjYXRjb2RlYD49XG90aGVyCisgIFxjYXRjb2RlYCs9XG90aGVyCisgIFxjYXRjb2RlYC09XG90aGVyCit9CisKK1xkZWZccHVzaHRoaXNmaWxlc3RhY2t7JQorICBcZXhwYW5kYWZ0ZXJccHVzaHRoaXNmaWxlc3RhY2tYXHBvcHRoaXNmaWxlc3RhY2tcU3RhY2tUZXJtCit9CitcZGVmXHB1c2h0aGlzZmlsZXN0YWNrWHslCisgIFxleHBhbmRhZnRlclxwdXNodGhpc2ZpbGVzdGFja1lcdGhpc2ZpbGVcU3RhY2tUZXJtCit9CitcZGVmXHB1c2h0aGlzZmlsZXN0YWNrWSAjMVxTdGFja1Rlcm0gIzJcU3RhY2tUZXJtIHslCisgIFxnZGVmXHBvcHRoaXNmaWxlc3RhY2t7XGdkZWZcdGhpc2ZpbGV7IzF9XGdkZWZccG9wdGhpc2ZpbGVzdGFja3sjMn19JQorfQorCitcZGVmXHBvcHRoaXNmaWxlc3RhY2t7XGVycnRoaXNmaWxlc3RhY2tlbXB0eX0KK1xkZWZcZXJydGhpc2ZpbGVzdGFja2VtcHR5e1xlcnJtZXNzYWdle0ludGVybmFsIGVycm9yOgorICB0aGUgc3RhY2sgb2YgZmlsZW5hbWVzIGlzIGVtcHR5Ln19CisKK1xkZWZcdGhpc2ZpbGV7fQorCislIEBjZW50ZXIgbGluZQorJSBvdXRwdXRzIHRoYXQgbGluZSwgY2VudGVyZWQuCislCitccGFyc2VhcmdkZWZcY2VudGVyeyUKKyAgXGlmaG1vZGUKKyAgICBcbGV0XG5leHRcY2VudGVySAorICBcZWxzZQorICAgIFxsZXRcbmV4dFxjZW50ZXJWCisgIFxmaQorICBcbmV4dHtcaGZpbCBcaWdub3Jlc3BhY2VzIzFcdW5za2lwIFxoZmlsfSUKK30KK1xkZWZcY2VudGVySCMxeyUKKyAgeyUKKyAgICBcaGZpbFxicmVhaworICAgIFxhZHZhbmNlXGhzaXplIGJ5IC1cbGVmdHNraXAKKyAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXHJpZ2h0c2tpcAorICAgIFxsaW5leyMxfSUKKyAgICBcYnJlYWsKKyAgfSUKK30KK1xkZWZcY2VudGVyViMxe1xsaW5le1xrZXJuXGxlZnRza2lwICMxXGtlcm5ccmlnaHRza2lwfX0KKworJSBAc3AgbiAgIG91dHB1dHMgbiBsaW5lcyBvZiB2ZXJ0aWNhbCBzcGFjZQorCitccGFyc2VhcmdkZWZcc3B7XHZza2lwICMxXGJhc2VsaW5lc2tpcH0KKworJSBAY29tbWVudCAuLi5saW5lIHdoaWNoIGlzIGlnbm9yZWQuLi4KKyUgQGMgaXMgdGhlIHNhbWUgYXMgQGNvbW1lbnQKKyUgQGlnbm9yZSAuLi4gQGVuZCBpZ25vcmUgIGlzIGFub3RoZXIgd2F5IHRvIHdyaXRlIGEgY29tbWVudAorCitcZGVmXGNvbW1lbnR7XGJlZ2luZ3JvdXAgXGNhdGNvZGVgXF5eTT1cb3RoZXIlCitcY2F0Y29kZWBcQD1cb3RoZXIgXGNhdGNvZGVgXHs9XG90aGVyIFxjYXRjb2RlYFx9PVxvdGhlciUKK1xjb21tZW50eHh4fQore1xjYXRjb2RlYFxeXk09XG90aGVyIFxnZGVmXGNvbW1lbnR4eHgjMV5eTXtcZW5kZ3JvdXB9fQorCitcbGV0XGM9XGNvbW1lbnQKKworJSBAcGFyYWdyYXBoaW5kZW50IE5DSEFSUworJSBXZSdsbCB1c2UgZW1zIGZvciBOQ0hBUlMsIGNsb3NlIGVub3VnaC4KKyUgTkNIQVJTIGNhbiBhbHNvIGJlIHRoZSB3b3JkIGBhc2lzJyBvciBgbm9uZScuCislIFdlIGNhbm5vdCBmZWFzaWJseSBpbXBsZW1lbnQgQHBhcmFncmFwaGluZGVudCBhc2lzLCB0aG91Z2guCislCitcZGVmXGFzaXN3b3Jke2FzaXN9ICUgbm8gdHJhbnNsYXRpb24sIHRoZXNlIGFyZSBrZXl3b3JkcworXGRlZlxub25ld29yZHtub25lfQorJQorXHBhcnNlYXJnZGVmXHBhcmFncmFwaGluZGVudHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxhc2lzd29yZAorICBcZWxzZQorICAgIFxpZnhcdGVtcFxub25ld29yZAorICAgICAgXGRlZmF1bHRwYXJpbmRlbnQgPSAwcHQKKyAgICBcZWxzZQorICAgICAgXGRlZmF1bHRwYXJpbmRlbnQgPSAjMWVtCisgICAgXGZpCisgIFxmaQorICBccGFyaW5kZW50ID0gXGRlZmF1bHRwYXJpbmRlbnQKK30KKworJSBAZXhhbXBsZWluZGVudCBOQ0hBUlMKKyUgV2UnbGwgdXNlIGVtcyBmb3IgTkNIQVJTIGxpa2UgQHBhcmFncmFwaGluZGVudC4KKyUgSXQgc2VlbXMgQGV4YW1wbGVpbmRlbnQgYXNpcyBpc24ndCBuZWNlc3NhcnksIGJ1dAorJSBJIHByZXNlcnZlIGl0IHRvIG1ha2UgaXQgc2ltaWxhciB0byBAcGFyYWdyYXBoaW5kZW50LgorXHBhcnNlYXJnZGVmXGV4YW1wbGVpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcYXNpc3dvcmQKKyAgXGVsc2UKKyAgICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICAgIFxsaXNwbmFycm93aW5nID0gMHB0CisgICAgXGVsc2UKKyAgICAgIFxsaXNwbmFycm93aW5nID0gIzFlbQorICAgIFxmaQorICBcZmkKK30KKworJSBAZmlyc3RwYXJhZ3JhcGhpbmRlbnQgV09SRAorJSBJZiBXT1JEIGlzIGBub25lJywgdGhlbiBzdXBwcmVzcyBpbmRlbnRhdGlvbiBvZiB0aGUgZmlyc3QgcGFyYWdyYXBoCislIGFmdGVyIGEgc2VjdGlvbiBoZWFkaW5nLiAgSWYgV09SRCBpcyBgaW5zZXJ0JywgdGhlbiBkbyBpbmRlbnQgYXQgc3VjaAorJSBwYXJhZ3JhcGhzLgorJQorJSBUaGUgcGFyYWdyYXBoIGluZGVudGF0aW9uIGlzIHN1cHByZXNzZWQgb3Igbm90IGJ5IGNhbGxpbmcKKyUgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQsIHdoaWNoIHRoZSBzZWN0aW9uaW5nIGNvbW1hbmRzIGRvLgorJSBXZSBzd2l0Y2ggdGhlIGRlZmluaXRpb24gb2YgdGhpcyBiYWNrIGFuZCBmb3J0aCBhY2NvcmRpbmcgdG8gV09SRC4KKyUgQnkgZGVmYXVsdCwgd2Ugc3VwcHJlc3MgaW5kZW50YXRpb24uCislCitcZGVmXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR7XGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xkZWZcaW5zZXJ0d29yZHtpbnNlcnR9CislCitccGFyc2VhcmdkZWZcZmlyc3RwYXJhZ3JhcGhpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICBcbGV0XHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQgPSBcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50CisgIFxlbHNlXGlmeFx0ZW1wXGluc2VydHdvcmQKKyAgICBcbGV0XHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQgPSBccmVsYXgKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGZpcnN0cGFyYWdyYXBoaW5kZW50IG9wdGlvbiBgXHRlbXAnfSUKKyAgXGZpXGZpCit9CisKKyUgSGVyZSBpcyBob3cgd2UgYWN0dWFsbHkgc3VwcHJlc3MgaW5kZW50YXRpb24uICBSZWRlZmluZSBcZXZlcnlwYXIgdG8KKyUgXGtlcm4gYmFja3dhcmRzIGJ5IFxwYXJpbmRlbnQsIGFuZCB0aGVuIHJlc2V0IGl0c2VsZiB0byBlbXB0eS4KKyUKKyUgV2UgYWxzbyBtYWtlIFxpbmRlbnQgaXRzZWxmIG5vdCBhY3R1YWxseSBkbyBhbnl0aGluZyB1bnRpbCB0aGUgbmV4dAorJSBwYXJhZ3JhcGguCislCitcZ2RlZlxkb3N1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR7JQorICBcZ2RlZlxpbmRlbnR7JQorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgICBcaW5kZW50CisgIH0lCisgIFxnZGVmXG5vaW5kZW50eyUKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgICAgXG5vaW5kZW50CisgIH0lCisgIFxnbG9iYWxcZXZlcnlwYXIgPSB7JQorICAgIFxrZXJuIC1ccGFyaW5kZW50CisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICB9JQorfQorCitcZ2RlZlxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnR7JQorICBcZ2xvYmFsIFxsZXQgXGluZGVudCA9IFxwdGV4aW5kZW50CisgIFxnbG9iYWwgXGxldCBcbm9pbmRlbnQgPSBccHRleG5vaW5kZW50CisgIFxnbG9iYWwgXGV2ZXJ5cGFyID0ge30lCit9CisKKworJSBAYXNpcyBqdXN0IHlpZWxkcyBpdHMgYXJndW1lbnQuICBVc2VkIHdpdGggQHRhYmxlLCBmb3IgZXhhbXBsZS4KKyUKK1xkZWZcYXNpcyMxeyMxfQorCislIEBtYXRoIG91dHB1dHMgaXRzIGFyZ3VtZW50IGluIG1hdGggbW9kZS4KKyUKKyUgT25lIGNvbXBsaWNhdGlvbjogXyB1c3VhbGx5IG1lYW5zIHN1YnNjcmlwdHMsIGJ1dCBpdCBjb3VsZCBhbHNvIG1lYW4KKyUgYW4gYWN0dWFsIF8gY2hhcmFjdGVyLCBhcyBpbiBAbWF0aHtAdmFye3NvbWVfdmFyaWFibGV9ICsgMX0uICBTbyBtYWtlCislIF8gYWN0aXZlLCBhbmQgZGlzdGluZ3Vpc2ggYnkgc2VlaW5nIGlmIHRoZSBjdXJyZW50IGZhbWlseSBpcyBcc2xmYW0sCislIHdoaWNoIGlzIHdoYXQgQHZhciB1c2VzLgoreworICBcY2F0Y29kZVx1bmRlckNoYXIgPSBcYWN0aXZlCisgIFxnZGVmXG1hdGh1bmRlcnNjb3JleyUKKyAgICBcY2F0Y29kZVx1bmRlckNoYXI9XGFjdGl2ZQorICAgIFxkZWZfe1xpZm51bVxmYW09XHNsZmFtIFxfXGVsc2Vcc2JcZml9JQorICB9Cit9CislIEFub3RoZXIgY29tcGxpY2F0aW9uOiB3ZSB3YW50IFxcIChhbmQgQFwpIHRvIG91dHB1dCBhIFwgY2hhcmFjdGVyLgorJSBGWUksIHBsYWluLnRleCB1c2VzIFxcIGFzIGEgdGVtcG9yYXJ5IGNvbnRyb2wgc2VxdWVuY2UgKHdoeT8pLCBidXQKKyUgdGhpcyBpcyBub3QgYWR2ZXJ0aXNlZCBhbmQgd2UgZG9uJ3QgY2FyZS4gIFRleGluZm8gZG9lcyBub3QKKyUgb3RoZXJ3aXNlIGRlZmluZSBAXC4KKyUKKyUgVGhlIFxtYXRoY2hhciBpcyBjbGFzcz0wPW9yZGluYXJ5LCBmYW1pbHk9Nz10dGZhbSwgcG9zaXRpb249NUM9XC4KK1xkZWZcbWF0aGJhY2tzbGFzaHtcaWZudW1cZmFtPVx0dGZhbSBcbWF0aGNoYXIiMDc1QyBcZWxzZVxiYWNrc2xhc2ggXGZpfQorJQorXGRlZlxtYXRoeyUKKyAgXHRleAorICBcbWF0aHVuZGVyc2NvcmUKKyAgXGxldFxcID0gXG1hdGhiYWNrc2xhc2gKKyAgXG1hdGhhY3RpdmUKKyAgJFxmaW5pc2htYXRoCit9CitcZGVmXGZpbmlzaG1hdGgjMXsjMSRcZW5kZ3JvdXB9ICAlIENsb3NlIHRoZSBncm91cCBvcGVuZWQgYnkgXHRleC4KKworJSBTb21lIGFjdGl2ZSBjaGFyYWN0ZXJzIChzdWNoIGFzIDwpIGFyZSBzcGFjZWQgZGlmZmVyZW50bHkgaW4gbWF0aC4KKyUgV2UgaGF2ZSB0byByZXNldCB0aGVpciBkZWZpbml0aW9ucyBpbiBjYXNlIHRoZSBAbWF0aCB3YXMgYW4gYXJndW1lbnQKKyUgdG8gYSBjb21tYW5kIHdoaWNoIHNldHMgdGhlIGNhdGNvZGVzIChzdWNoIGFzIEBpdGVtIG9yIEBzZWN0aW9uKS4KKyUKK3sKKyAgXGNhdGNvZGVgXiA9IFxhY3RpdmUKKyAgXGNhdGNvZGVgPCA9IFxhY3RpdmUKKyAgXGNhdGNvZGVgPiA9IFxhY3RpdmUKKyAgXGNhdGNvZGVgKyA9IFxhY3RpdmUKKyAgXGdkZWZcbWF0aGFjdGl2ZXslCisgICAgXGxldF4gPSBccHRleGhhdAorICAgIFxsZXQ8ID0gXHB0ZXhsZXNzCisgICAgXGxldD4gPSBccHRleGd0cgorICAgIFxsZXQrID0gXHB0ZXhwbHVzCisgIH0KK30KKworJSBAYnVsbGV0IGFuZCBAbWludXMgbmVlZCB0aGUgc2FtZSB0cmVhdG1lbnQgYXMgQG1hdGgsIGp1c3QgYWJvdmUuCitcZGVmXGJ1bGxldHskXHB0ZXhidWxsZXQkfQorXGRlZlxtaW51c3skLSR9CisKKyUgQGRvdHN7fSBvdXRwdXRzIGFuIGVsbGlwc2lzIHVzaW5nIHRoZSBjdXJyZW50IGZvbnQuCislIFdlIGRvIC41ZW0gcGVyIHBlcmlvZCBzbyB0aGF0IGl0IGhhcyB0aGUgc2FtZSBzcGFjaW5nIGluIGEgdHlwZXdyaXRlcgorJSBmb250IGFzIHRocmVlIGFjdHVhbCBwZXJpb2QgY2hhcmFjdGVycy4KKyUKK1xkZWZcZG90c3slCisgIFxsZWF2ZXZtb2RlCisgIFxoYm94IHRvIDEuNWVteyUKKyAgICBcaHNraXAgMHB0IHBsdXMgMC4yNWZpbAorICAgIC5caGZpbC5caGZpbC4lCisgICAgXGhza2lwIDBwdCBwbHVzIDAuNWZpbAorICB9JQorfQorCislIEBlbmRkb3Rze30gaXMgYW4gZW5kLW9mLXNlbnRlbmNlIGVsbGlwc2lzLgorJQorXGRlZlxlbmRkb3RzeyUKKyAgXGRvdHMKKyAgXHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3IKK30KKworJSBAY29tbWF7fSBpcyBzbyBjb21tYXMgY2FuIGJlIGluc2VydGVkIGludG8gdGV4dCB3aXRob3V0IG1lc3NpbmcgdXAKKyUgVGV4aW5mbydzIHBhcnNpbmcuCislCitcbGV0XGNvbW1hID0gLAorCislIEByZWZpbGwgaXMgYSBuby1vcC4KK1xsZXRccmVmaWxsPVxyZWxheAorCislIElmIHdvcmtpbmcgb24gYSBsYXJnZSBkb2N1bWVudCBpbiBjaGFwdGVycywgaXQgaXMgY29udmVuaWVudCB0bworJSBiZSBhYmxlIHRvIGRpc2FibGUgaW5kZXhpbmcsIGNyb3NzLXJlZmVyZW5jaW5nLCBhbmQgY29udGVudHMsIGZvciB0ZXN0IHJ1bnMuCislIFRoaXMgaXMgZG9uZSB3aXRoIEBub3ZhbGlkYXRlIChiZWZvcmUgQHNldGZpbGVuYW1lKS4KKyUKK1xuZXdpZlxpZmxpbmtzIFxsaW5rc3RydWUgJSBieSBkZWZhdWx0IHdlIHdhbnQgdGhlIGF1eCBmaWxlcy4KK1xsZXRcbm92YWxpZGF0ZSA9IFxsaW5rc2ZhbHNlCisKKyUgQHNldGZpbGVuYW1lIGlzIGRvbmUgYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSB0ZXhpbmZvIGZpbGUuCislIFNvIG9wZW4gaGVyZSB0aGUgZmlsZXMgd2UgbmVlZCB0byBoYXZlIG9wZW4gd2hpbGUgcmVhZGluZyB0aGUgaW5wdXQuCislIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gbWFrZSBhIC5mbXQgZmlsZSBmb3IgdGV4aW5mby4KK1xkZWZcc2V0ZmlsZW5hbWV7JQorICAgXGZpeGJhY2tzbGFzaCAgJSBUdXJuIG9mZiBoYWNrIHRvIHN3YWxsb3cgYFxpbnB1dCB0ZXhpbmZvJy4KKyAgIFxpZmxpbmtzCisgICAgIFx0cnlhdXhmaWxlCisgICAgICUgT3BlbiB0aGUgbmV3IGF1eCBmaWxlLiAgVGVYIHdpbGwgY2xvc2UgaXQgYXV0b21hdGljYWxseSBhdCBleGl0LgorICAgICBcaW1tZWRpYXRlXG9wZW5vdXRcYXV4ZmlsZT1cam9ibmFtZS5hdXgKKyAgIFxmaSAlIFxvcGVuaW5kaWNlcyBuZWVkcyB0byBkbyBzb21lIHdvcmsgaW4gYW55IGNhc2UuCisgICBcb3BlbmluZGljZXMKKyAgIFxsZXRcc2V0ZmlsZW5hbWU9XGNvbW1lbnQgJSBJZ25vcmUgZXh0cmEgQHNldGZpbGVuYW1lIGNtZHMuCisgICAlCisgICAlIElmIHRleGluZm8uY25mIGlzIHByZXNlbnQgb24gdGhlIHN5c3RlbSwgcmVhZCBpdC4KKyAgICUgVXNlZnVsIGZvciBzaXRlLXdpZGUgQGFmb3VycGFwZXIsIGV0Yy4KKyAgIFxvcGVuaW4gMSB0ZXhpbmZvLmNuZgorICAgXGlmZW9mIDEgXGVsc2UgXGlucHV0IHRleGluZm8uY25mIFxmaQorICAgXGNsb3NlaW4gMQorICAgJQorICAgXGNvbW1lbnQgJSBJZ25vcmUgdGhlIGFjdHVhbCBmaWxlbmFtZS4KK30KKworJSBDYWxsZWQgZnJvbSBcc2V0ZmlsZW5hbWUuCislCitcZGVmXG9wZW5pbmRpY2VzeyUKKyAgXG5ld2luZGV4e2NwfSUKKyAgXG5ld2NvZGVpbmRleHtmbn0lCisgIFxuZXdjb2RlaW5kZXh7dnJ9JQorICBcbmV3Y29kZWluZGV4e3RwfSUKKyAgXG5ld2NvZGVpbmRleHtreX0lCisgIFxuZXdjb2RlaW5kZXh7cGd9JQorfQorCislIEBieWUuCitcb3V0ZXJcZGVmXGJ5ZXtccGFnZWFsaWdubWFjcm9cdHJhY2luZ3N0YXRzPTFccHRleGVuZH0KKworCitcbWVzc2FnZXtwZGYsfQorJSBhZG9iZSBgcG9ydGFibGUnIGRvY3VtZW50IGZvcm1hdAorXG5ld2NvdW50XHRlbXBudW0KK1xuZXdjb3VudFxsbmtjb3VudAorXG5ld3Rva3NcZmlsZW5hbWUKK1xuZXdjb3VudFxmaWxlbmFtZWxlbmd0aAorXG5ld2NvdW50XHBnbgorXG5ld3Rva3NcdG9rc0EKK1xuZXd0b2tzXHRva3NCCitcbmV3dG9rc1x0b2tzQworXG5ld3Rva3NcdG9rc0QKK1xuZXdib3hcYm94QQorXG5ld2NvdW50XGNvdW50QQorXG5ld2lmXGlmcGRmCitcbmV3aWZcaWZwZGZtYWtlcGFnZWRlc3QKKworJSB3aGVuIHBkZnRleCBpcyBydW4gaW4gZHZpIG1vZGUsIFxwZGZvdXRwdXQgaXMgZGVmaW5lZCAoc28gXHBkZm91dHB1dD0xCislIGNhbiBiZSBzZXQpLiAgU28gd2UgdGVzdCBmb3IgXHJlbGF4IGFuZCAwIGFzIHdlbGwgYXMgXHVuZGVmaW5lZCwKKyUgYm9ycm93ZWQgZnJvbSBpZnBkZi5zdHkuCitcaWZ4XHBkZm91dHB1dFx1bmRlZmluZWQKK1xlbHNlCisgIFxpZnhccGRmb3V0cHV0XHJlbGF4CisgIFxlbHNlCisgICAgXGlmY2FzZVxwZGZvdXRwdXQKKyAgICBcZWxzZQorICAgICAgXHBkZnRydWUKKyAgICBcZmkKKyAgXGZpCitcZmkKKworJSBQREYgdXNlcyBQb3N0U2NyaXB0IHN0cmluZyBjb25zdGFudHMgZm9yIHRoZSBuYW1lcyBvZiB4cmVmIHRhcmdldHMsIHRvCislIGZvciBkaXNwbGF5IGluIHRoZSBvdXRsaW5lcywgYW5kIGluIG90aGVyIHBsYWNlcy4gIFRodXMsIHdlIGhhdmUgdG8KKyUgZG91YmxlIGFueSBiYWNrc2xhc2hlcy4gIE90aGVyd2lzZSwgYSBuYW1lIGxpa2UgIlxub2RlIiB3aWxsIGJlCislIGludGVycHJldGVkIGFzIGEgbmV3bGluZSAoXG4pLCBmb2xsb3dlZCBieSBvLCBkLCBlLiAgTm90IGdvb2QuCislIGh0dHA6Ly93d3cubnRnLm5sL3BpcGVybWFpbC9udGctcGRmdGV4LzIwMDQtSnVseS8wMDA2NTQuaHRtbAorJSAoYW5kIHJlbGF0ZWQgbWVzc2FnZXMsIHRoZSBmaW5hbCBvdXRjb21lIGlzIHRoYXQgaXQgaXMgdXAgdG8gdGhlIFRlWAorJSB1c2VyIHRvIGRvdWJsZSB0aGUgYmFja3NsYXNoZXMgYW5kIG90aGVyd2lzZSBtYWtlIHRoZSBzdHJpbmcgdmFsaWQsIHNvCislIHRoYXQncyB3ZSBkbykuCisKKyUgZG91YmxlIGFjdGl2ZSBiYWNrc2xhc2hlcy4KKyUgCit7XGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlCisgQGdkZWZAYWN0aXZlYmFja3NsYXNoe0BjYXRjb2RlYEBcPUBhY3RpdmUgQG90aGVyYmFja3NsYXNofQorIEBnZGVmQGFjdGl2ZWJhY2tzbGFzaGRvdWJsZXslCisgICBAY2F0Y29kZUBiYWNrQ2hhcj1AYWN0aXZlCisgICBAbGV0XD1AZG91YmxlYmFja3NsYXNofQorfQorCislIFRvIGhhbmRsZSBwYXJlbnMsIHdlIG11c3QgYWRvcHQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsIHNpbmNlIHBhcmVucyBhcmUKKyUgbm90IGFjdGl2ZSBjaGFyYWN0ZXJzLiAgaHlwZXJyZWYuZHR4ICh3aGljaCBoYXMgdGhlIHNhbWUgcHJvYmxlbSBhcworJSB1cykgaGFuZGxlcyBpdCB3aXRoIHRoaXMgYW1hemluZyBtYWNybyB0byByZXBsYWNlIHRva2Vucy4gIEkndmUKKyUgdGlua2VyZWQgd2l0aCBpdCBhIGxpdHRsZSBmb3IgdGV4aW5mbywgYnV0IGl0J3MgZGVmaW5pdGVseSBmcm9tIHRoZXJlLgorJSAKKyUgIzEgaXMgdGhlIHRva2VucyB0byByZXBsYWNlLgorJSAjMiBpcyB0aGUgcmVwbGFjZW1lbnQuCislICMzIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIHdpdGggdGhlIHN0cmluZy4KKyUgCitcZGVmXEh5UHNkU3Vic3QjMSMyIzN7JQorICBcZGVmXEh5UHNkUmVwbGFjZSMjMSMxIyMyXEVORHslCisgICAgIyMxJQorICAgIFxpZnhcXCMjMlxcJQorICAgIFxlbHNlCisgICAgICAjMiUKKyAgICAgIFxIeVJldHVybkFmdGVyRml7JQorICAgICAgICBcSHlQc2RSZXBsYWNlIyMyXEVORAorICAgICAgfSUKKyAgICBcZmkKKyAgfSUKKyAgXHhkZWYjM3tcZXhwYW5kYWZ0ZXJcSHlQc2RSZXBsYWNlIzMjMVxFTkR9JQorfQorXGxvbmdcZGVmXEh5UmV0dXJuQWZ0ZXJGaSMxXGZpe1xmaSMxfQorCislICMxIGlzIGEgY29udHJvbCBzZXF1ZW5jZSBpbiB3aGljaCB0byBkbyB0aGUgcmVwbGFjZW1lbnRzLgorXGRlZlxiYWNrc2xhc2hwYXJlbnMjMXslCisgIFx4ZGVmIzF7IzF9JSByZWRlZmluZSBpdCBhcyBpdHMgZXhwYW5zaW9uOyB0aGUgZGVmaW5pdGlvbiBpcyBzaW1wbHkKKyAgICAgICAgICAgICAlIFxsYXN0bm9kZSB3aGVuIGNhbGxlZCBmcm9tIFxzZXRyZWYgLT4gXHBkZm1rZGVzdC4KKyAgXEh5UHNkU3Vic3R7KH17XGJhY2tzbGFzaGxwYXJlbn17IzF9JQorICBcSHlQc2RTdWJzdHspfXtcYmFja3NsYXNocnBhcmVufXsjMX0lCit9CisKK3tcY2F0Y29kZVxleGNsYW1DaGFyID0gMCBcY2F0Y29kZVxiYWNrQ2hhciA9IFxvdGhlcgorICFnZGVmIWJhY2tzbGFzaGxwYXJlbntcKH0lCisgIWdkZWYhYmFja3NsYXNocnBhcmVue1wpfSUKK30KKworXGlmcGRmCisgIFxpbnB1dCBwZGZjb2xvcgorICBccGRmY2F0YWxvZ3svUGFnZU1vZGUgL1VzZU91dGxpbmVzfSUKKyAgXGRlZlxkb3BkZmltYWdlIzEjMiMzeyUKKyAgICBcZGVmXGltYWdld2lkdGh7IzJ9JQorICAgIFxkZWZcaW1hZ2VoZWlnaHR7IzN9JQorICAgICUgd2l0aG91dCBcaW1tZWRpYXRlLCBwZGZ0ZXggc2VnIGZhdWx0cyB3aGVuIHRoZSBzYW1lIGltYWdlIGlzCisgICAgJSBpbmNsdWRlZCB0d2ljZS4gIChWZXJzaW9uIDMuMTQxNTktcHJlLTEuMC11bm9mZmljaWFsLTIwMDEwNzA0LikKKyAgICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0CisgICAgICBcaW1tZWRpYXRlXHBkZmltYWdlCisgICAgXGVsc2UKKyAgICAgIFxpbW1lZGlhdGVccGRmeGltYWdlCisgICAgXGZpCisgICAgICBcaWZ4XGVtcHR5XGltYWdld2lkdGhcZWxzZSB3aWR0aCBcaW1hZ2V3aWR0aCBcZmkKKyAgICAgIFxpZnhcZW1wdHlcaW1hZ2VoZWlnaHRcZWxzZSBoZWlnaHQgXGltYWdlaGVpZ2h0IFxmaQorICAgICAgXGlmbnVtXHBkZnRleHZlcnNpb248MTMKKyAgICAgICAgICMxLnBkZiUKKyAgICAgICBcZWxzZQorICAgICAgICAgeyMxLnBkZn0lCisgICAgICAgXGZpCisgICAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNCBcZWxzZQorICAgICAgXHBkZnJlZnhpbWFnZSBccGRmbGFzdHhpbWFnZQorICAgIFxmaX0KKyAgXGRlZlxwZGZta2Rlc3QjMXt7JQorICAgICUgV2UgaGF2ZSB0byBzZXQgZHVtbWllcyBzbyBjb21tYW5kcyBzdWNoIGFzIEBjb2RlLCBhbmQgY2hhcmFjdGVycworICAgICUgc3VjaCBhcyBcLCBhcmVuJ3QgZXhwYW5kZWQgd2hlbiBwcmVzZW50IGluIGEgc2VjdGlvbiB0aXRsZS4KKyAgICBcYXRkdW1taWVzCisgICAgXGFjdGl2ZWJhY2tzbGFzaGRvdWJsZQorICAgIFxkZWZccGRmZGVzdG5hbWV7IzF9JQorICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmZGVzdG5hbWUKKyAgICBccGRmZGVzdCBuYW1le1xwZGZkZXN0bmFtZX0geHl6JQorICB9fSUKKyAgJQorICAlIHVzZWQgdG8gbWFyayB0YXJnZXQgbmFtZXM7IG11c3QgYmUgZXhwYW5kYWJsZS4KKyAgXGRlZlxwZGZta3BnbiMxeyMxfSUKKyAgJQorICBcbGV0XGxpbmtjb2xvciA9IFxCbHVlICAlIHdhcyBDeWFuLCBidXQgdGhhdCBzZWVtcyBsaWdodD8KKyAgXGRlZlxlbmRsaW5re1xCbGFja1xwZGZlbmRsaW5rfQorICAlIEFkZGluZyBvdXRsaW5lcyB0byBQREY7IG1hY3JvcyBmb3IgY2FsY3VsYXRpbmcgc3RydWN0dXJlIG9mIG91dGxpbmVzCisgICUgY29tZSBmcm9tIFBldHIgT2xzYWsKKyAgXGRlZlxleHBudW1iZXIjMXtcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSMxXGVuZGNzbmFtZVxyZWxheCAwJQorICAgIFxlbHNlIFxjc25hbWUjMVxlbmRjc25hbWUgXGZpfQorICBcZGVmXGFkdmFuY2VudW1iZXIjMXtcdGVtcG51bT1cZXhwbnVtYmVyeyMxfVxyZWxheAorICAgIFxhZHZhbmNlXHRlbXBudW0gYnkgMQorICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxXGVuZGNzbmFtZXtcdGhlXHRlbXBudW19fQorICAlCisgICUgIzEgaXMgdGhlIHNlY3Rpb24gdGV4dCwgd2hpY2ggaXMgd2hhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUKKyAgJSBvdXRsaW5lIGJ5IHRoZSBwZGYgdmlld2VyLiAgIzIgaXMgdGhlIHBkZiBleHByZXNzaW9uIGZvciB0aGUgbnVtYmVyCisgICUgb2Ygc3ViZW50cmllcyAob3IgZW1wdHksIGZvciBzdWJzdWJzZWN0aW9ucykuICAjMyBpcyB0aGUgbm9kZSB0ZXh0LAorICAlIHdoaWNoIG1pZ2h0IGJlIGVtcHR5IGlmIHRoaXMgdG9jIGVudHJ5IGhhZCBubyBjb3JyZXNwb25kaW5nIG5vZGUuCisgICUgIzQgaXMgdGhlIHBhZ2UgbnVtYmVyCisgICUKKyAgXGRlZlxkb3BkZm91dGxpbmUjMSMyIzMjNHslCisgICAgJSBHZW5lcmF0ZSBhIGxpbmsgdG8gdGhlIG5vZGUgdGV4dCBpZiB0aGF0IGV4aXN0czsgZWxzZSwgdXNlIHRoZQorICAgICUgcGFnZSBudW1iZXIuICBXZSBjb3VsZCBnZW5lcmF0ZSBhIGRlc3RpbmF0aW9uIGZvciB0aGUgc2VjdGlvbgorICAgICUgdGV4dCBpbiB0aGUgY2FzZSB3aGVyZSBhIHNlY3Rpb24gaGFzIG5vIG5vZGUsIGJ1dCBpdCBkb2Vzbid0CisgICAgJSBzZWVtIHdvcnRoIHRoZSB0cm91YmxlLCBzaW5jZSBtb3N0IGRvY3VtZW50cyBhcmUgbm9ybWFsbHkgc3RydWN0dXJlZC4KKyAgICBcZGVmXHBkZm91dGxpbmVkZXN0eyMzfSUKKyAgICBcaWZ4XHBkZm91dGxpbmVkZXN0XGVtcHR5CisgICAgICBcZGVmXHBkZm91dGxpbmVkZXN0eyM0fSUKKyAgICBcZWxzZQorICAgICAgJSBEb3VibGVkIGJhY2tzbGFzaGVzIGluIHRoZSBuYW1lLgorICAgICAge1xhY3RpdmViYWNrc2xhc2hkb3VibGUgXHhkZWZccGRmb3V0bGluZWRlc3R7IzN9JQorICAgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmb3V0bGluZWRlc3R9JQorICAgIFxmaQorICAgICUKKyAgICAlIEFsc28gZG91YmxlIHRoZSBiYWNrc2xhc2hlcyBpbiB0aGUgZGlzcGxheSBzdHJpbmcuCisgICAge1xhY3RpdmViYWNrc2xhc2hkb3VibGUgXHhkZWZccGRmb3V0bGluZXRleHR7IzF9JQorICAgICBcYmFja3NsYXNocGFyZW5zXHBkZm91dGxpbmV0ZXh0fSUKKyAgICAlCisgICAgXHBkZm91dGxpbmUgZ290byBuYW1le1xwZGZta3BnbntccGRmb3V0bGluZWRlc3R9fSMye1xwZGZvdXRsaW5ldGV4dH0lCisgIH0KKyAgJQorICBcZGVmXHBkZm1ha2VvdXRsaW5lc3slCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgICUgVGhhbmgncyBoYWNrIC8gcHJvcGVyIGJyYWNlcyBpbiBib29rbWFya3MKKyAgICAgIFxlZGVmXG15bGJyYWNle1xpZnRydWUgXHN0cmluZ3tcZWxzZX1cZml9XGxldFx7PVxteWxicmFjZQorICAgICAgXGVkZWZcbXlyYnJhY2V7XGlmZmFsc2V7XGVsc2Vcc3RyaW5nfVxmaX1cbGV0XH09XG15cmJyYWNlCisgICAgICAlCisgICAgICAlIFJlYWQgdG9jIHNpbGVudGx5LCB0byBnZXQgY291bnRzIG9mIHN1YmVudHJpZXMgZm9yIFxwZGZvdXRsaW5lLgorICAgICAgXGRlZlxudW1jaGFwZW50cnkjIzEjIzIjIzMjIzR7JQorCVxkZWZcdGhpc2NoYXBudW17IyMyfSUKKwlcZGVmXHRoaXNzZWNudW17MH0lCisJXGRlZlx0aGlzc3Vic2VjbnVtezB9JQorICAgICAgfSUKKyAgICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7JQorCVxhZHZhbmNlbnVtYmVye2NoYXBcdGhpc2NoYXBudW19JQorCVxkZWZcdGhpc3NlY251bXsjIzJ9JQorCVxkZWZcdGhpc3N1YnNlY251bXswfSUKKyAgICAgIH0lCisgICAgICBcZGVmXG51bXN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKwlcYWR2YW5jZW51bWJlcntzZWNcdGhpc3NlY251bX0lCisJXGRlZlx0aGlzc3Vic2VjbnVteyMjMn0lCisgICAgICB9JQorICAgICAgXGRlZlxudW1zdWJzdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslCisJXGFkdmFuY2VudW1iZXJ7c3Vic2VjXHRoaXNzdWJzZWNudW19JQorICAgICAgfSUKKyAgICAgIFxkZWZcdGhpc2NoYXBudW17MH0lCisgICAgICBcZGVmXHRoaXNzZWNudW17MH0lCisgICAgICBcZGVmXHRoaXNzdWJzZWNudW17MH0lCisgICAgICAlCisgICAgICAlIHVzZSBcZGVmIHJhdGhlciB0aGFuIFxsZXQgaGVyZSBiZWNhdXNlIHdlIHJlZGVmaW5lIFxjaGFwZW50cnkgZXQKKyAgICAgICUgYWwuIGEgc2Vjb25kIHRpbWUsIGJlbG93LgorICAgICAgXGRlZlxhcHBlbnRyeXtcbnVtY2hhcGVudHJ5fSUKKyAgICAgIFxkZWZcYXBwc2VjZW50cnl7XG51bXNlY2VudHJ5fSUKKyAgICAgIFxkZWZcYXBwc3Vic2VjZW50cnl7XG51bXN1YnNlY2VudHJ5fSUKKyAgICAgIFxkZWZcYXBwc3Vic3Vic2VjZW50cnl7XG51bXN1YnN1YnNlY2VudHJ5fSUKKyAgICAgIFxkZWZcdW5uY2hhcGVudHJ5e1xudW1jaGFwZW50cnl9JQorICAgICAgXGRlZlx1bm5zZWNlbnRyeXtcbnVtc2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5zdWJzZWNlbnRyeXtcbnVtc3Vic2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5zdWJzdWJzZWNlbnRyeXtcbnVtc3Vic3Vic2VjZW50cnl9JQorICAgICAgXHJlYWRkYXRhZmlsZXt0b2N9JQorICAgICAgJQorICAgICAgJSBSZWFkIHRvYyBzZWNvbmQgdGltZSwgdGhpcyB0aW1lIGFjdHVhbGx5IHByb2R1Y2luZyB0aGUgb3V0bGluZXMuCisgICAgICAlIFRoZSBgLScgbWVhbnMgdGFrZSB0aGUgXGV4cG51bWJlciBhcyB0aGUgYWJzb2x1dGUgbnVtYmVyIG9mCisgICAgICAlIHN1YmVudHJpZXMsIHdoaWNoIHdlIGNhbGN1bGF0ZWQgb24gb3VyIGZpcnN0IHJlYWQgb2YgdGhlIC50b2MgYWJvdmUuCisgICAgICAlCisgICAgICAlIFdlIHVzZSB0aGUgbm9kZSBuYW1lcyBhcyB0aGUgZGVzdGluYXRpb25zLgorICAgICAgXGRlZlxudW1jaGFwZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntjaGFwIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntzZWMjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye3N1YnNlYyMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXN1YnN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUgY291bnQgaXMgYWx3YXlzIHplcm8KKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e317IyMzfXsjIzR9fSUKKyAgICAgICUKKyAgICAgICUgUERGIG91dGxpbmVzIGFyZSBkaXNwbGF5ZWQgdXNpbmcgc3lzdGVtIGZvbnRzLCBpbnN0ZWFkIG9mCisgICAgICAlIGRvY3VtZW50IGZvbnRzLiAgVGhlcmVmb3JlIHdlIGNhbm5vdCB1c2Ugc3BlY2lhbCBjaGFyYWN0ZXJzLAorICAgICAgJSBzaW5jZSB0aGUgZW5jb2RpbmcgaXMgdW5rbm93bi4gIEZvciBleGFtcGxlLCB0aGUgZW9nb25layBmcm9tCisgICAgICAlIExhdGluIDIgKDB4ZWEpIGdldHMgdHJhbnNsYXRlZCB0byBhIHwgY2hhcmFjdGVyLiAgSW5mbyBmcm9tCisgICAgICAlIFN0YXN6ZWsgV2F3cnlraWV3aWN6LCAxOSBKYW4gMjAwNCAwNDowOToyNCArMDEwMC4KKyAgICAgICUKKyAgICAgICUgeHggdG8gZG8gdGhpcyByaWdodCwgd2UgaGF2ZSB0byB0cmFuc2xhdGUgOC1iaXQgY2hhcmFjdGVycyB0bworICAgICAgJSB0aGVpciAiYmVzdCIgZXF1aXZhbGVudCwgYmFzZWQgb24gdGhlIEBkb2N1bWVudGVuY29kaW5nLiAgUmlnaHQKKyAgICAgICUgbm93LCBJIGd1ZXNzIHdlJ2xsIGp1c3QgbGV0IHRoZSBwZGYgcmVhZGVyIGhhdmUgaXRzIHdheS4KKyAgICAgIFxpbmRleG5vZm9udHMKKyAgICAgIFxzZXR1cGRhdGFmaWxlCisgICAgICBcYWN0aXZlYmFja3NsYXNoCisgICAgICBcaW5wdXQgXGpvYm5hbWUudG9jCisgICAgXGVuZGdyb3VwCisgIH0KKyAgJQorICBcZGVmXHNraXBzcGFjZXMjMXtcZGVmXFBQeyMxfVxkZWZcRHt8fSUKKyAgICBcaWZ4XFBQXERcbGV0XG5leHRzcFxyZWxheAorICAgIFxlbHNlXGxldFxuZXh0c3Bcc2tpcHNwYWNlcworICAgICAgXGlmeFxwXHNwYWNlXGVsc2VcYWRkdG9rZW5ze1xmaWxlbmFtZX17XFBQfSUKKyAgICAgICAgXGFkdmFuY2VcZmlsZW5hbWVsZW5ndGggYnkgMQorICAgICAgXGZpCisgICAgXGZpCisgICAgXG5leHRzcH0KKyAgXGRlZlxnZXRmaWxlbmFtZSMxe1xmaWxlbmFtZWxlbmd0aD0wXGV4cGFuZGFmdGVyXHNraXBzcGFjZXMjMXxccmVsYXh9CisgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQKKyAgICBcbGV0IFxzdGFydGxpbmsgXHBkZmFubm90bGluaworICBcZWxzZQorICAgIFxsZXQgXHN0YXJ0bGluayBccGRmc3RhcnRsaW5rCisgIFxmaQorICBcZGVmXHBkZnVybCMxeyUKKyAgICBcYmVnaW5ncm91cAorICAgICAgXG5vcm1hbHR1cm5vZmZhY3RpdmVcZGVmXEB7QH0lCisgICAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgICAgXGxlYXZldm1vZGVcUmVkCisgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgdXNlcnsvU3VidHlwZSAvTGluayAvQSA8PCAvUyAvVVJJIC9VUkkgKCMxKSA+Pn0lCisgICAgXGVuZGdyb3VwfQorICBcZGVmXHBkZmdldHRva3MjMS57XHNldGJveFxib3hBPVxoYm94e1x0b2tzQT17IzEufVx0b2tzQj17fVxtYWtldG9rc319CisgIFxkZWZcYWRkdG9rZW5zIzEjMntcZWRlZlxhZGR0b2tze1xub2V4cGFuZCMxPXtcdGhlIzEjMn19XGFkZHRva3N9CisgIFxkZWZcYWRuIzF7XGFkZHRva2Vuc3tcdG9rc0N9eyMxfVxnbG9iYWxcY291bnRBPTFcbGV0XG5leHQ9XG1ha2V0b2tzfQorICBcZGVmXHBvcHRva3MjMSMyfEVORFRPS1N8e1xsZXRcZmlyc3Q9IzFcdG9rc0Q9eyMxfVx0b2tzQT17IzJ9fQorICBcZGVmXG1ha2V0b2tzeyUKKyAgICBcZXhwYW5kYWZ0ZXJccG9wdG9rc1x0aGVcdG9rc0F8RU5EVE9LU3xccmVsYXgKKyAgICBcaWZ4XGZpcnN0MFxhZG4wCisgICAgXGVsc2VcaWZ4XGZpcnN0MVxhZG4xIFxlbHNlXGlmeFxmaXJzdDJcYWRuMiBcZWxzZVxpZnhcZmlyc3QzXGFkbjMKKyAgICBcZWxzZVxpZnhcZmlyc3Q0XGFkbjQgXGVsc2VcaWZ4XGZpcnN0NVxhZG41IFxlbHNlXGlmeFxmaXJzdDZcYWRuNgorICAgIFxlbHNlXGlmeFxmaXJzdDdcYWRuNyBcZWxzZVxpZnhcZmlyc3Q4XGFkbjggXGVsc2VcaWZ4XGZpcnN0OVxhZG45CisgICAgXGVsc2UKKyAgICAgIFxpZm51bTA9XGNvdW50QVxlbHNlXG1ha2VsaW5rXGZpCisgICAgICBcaWZ4XGZpcnN0LlxsZXRcbmV4dD1cZG9uZVxlbHNlCisgICAgICAgIFxsZXRcbmV4dD1cbWFrZXRva3MKKyAgICAgICAgXGFkZHRva2Vuc3tcdG9rc0J9e1x0aGVcdG9rc0R9CisgICAgICAgIFxpZnhcZmlyc3QsXGFkZHRva2Vuc3tcdG9rc0J9e1xzcGFjZX1cZmkKKyAgICAgIFxmaQorICAgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaQorICAgIFxuZXh0fQorICBcZGVmXG1ha2VsaW5re1xhZGR0b2tlbnN7XHRva3NCfSUKKyAgICB7XG5vZXhwYW5kXHBkZmxpbmt7XHRoZVx0b2tzQ319XHRva3NDPXt9XGdsb2JhbFxjb3VudEE9MH0KKyAgXGRlZlxwZGZsaW5rIzF7JQorICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19IGdvdG8gbmFtZXtccGRmbWtwZ257IzF9fQorICAgIFxsaW5rY29sb3IgIzFcZW5kbGlua30KKyAgXGRlZlxkb25le1xlZGVmXHN0e1xnbG9iYWxcbm9leHBhbmRcdG9rc0E9e1x0aGVcdG9rc0J9fVxzdH0KK1xlbHNlCisgIFxsZXRccGRmbWtkZXN0ID0gXGdvYmJsZQorICBcbGV0XHBkZnVybCA9IFxnb2JibGUKKyAgXGxldFxlbmRsaW5rID0gXHJlbGF4CisgIFxsZXRcbGlua2NvbG9yID0gXHJlbGF4CisgIFxsZXRccGRmbWFrZW91dGxpbmVzID0gXHJlbGF4CitcZmkgICUgXGlmeFxwZGZvdXRwdXQKKworCitcbWVzc2FnZXtmb250cyx9CisKKyUgQ2hhbmdlIHRoZSBjdXJyZW50IGZvbnQgc3R5bGUgdG8gIzEsIHJlbWVtYmVyaW5nIGl0IGluIFxjdXJmb250c3R5bGUuCislIEZvciBub3csIHdlIGRvIG5vdCBhY2N1bXVsYXRlIGZvbnQgc3R5bGVzOiBAYntAaXtmb299fSBwcmludHMgZm9vIGluCislIGl0YWxpY3MsIG5vdCBib2xkIGl0YWxpY3MuCislCitcZGVmXHNldGZvbnRzdHlsZSMxeyUKKyAgXGRlZlxjdXJmb250c3R5bGV7IzF9JSBub3QgYXMgYSBjb250cm9sIHNlcXVlbmNlLCBiZWNhdXNlIHdlIGFyZSBcZWRlZidkLgorICBcY3NuYW1lIHRlbiMxXGVuZGNzbmFtZSAgJSBjaGFuZ2UgdGhlIGN1cnJlbnQgZm9udAorfQorCislIFNlbGVjdCAjMSBmb250cyB3aXRoIHRoZSBjdXJyZW50IHN0eWxlLgorJQorXGRlZlxzZWxlY3Rmb250cyMxe1xjc25hbWUgIzFmb250c1xlbmRjc25hbWUgXGNzbmFtZVxjdXJmb250c3R5bGVcZW5kY3NuYW1lfQorCitcZGVmXHJte1xmYW09MCBcc2V0Zm9udHN0eWxle3JtfX0KK1xkZWZcaXR7XGZhbT1caXRmYW0gXHNldGZvbnRzdHlsZXtpdH19CitcZGVmXHNse1xmYW09XHNsZmFtIFxzZXRmb250c3R5bGV7c2x9fQorXGRlZlxiZntcZmFtPVxiZmZhbSBcc2V0Zm9udHN0eWxle2JmfX1cZGVmXGJmc3R5bGVuYW1le2JmfQorXGRlZlx0dHtcZmFtPVx0dGZhbSBcc2V0Zm9udHN0eWxle3R0fX0KKworJSBUZXhpbmZvIHNvcnQgb2Ygc3VwcG9ydHMgdGhlIHNhbnMgc2VyaWYgZm9udCBzdHlsZSwgd2hpY2ggcGxhaW4gVGVYIGRvZXMgbm90LgorJSBTbyB3ZSBzZXQgdXAgYSBcc2YuCitcbmV3ZmFtXHNmZmFtCitcZGVmXHNme1xmYW09XHNmZmFtIFxzZXRmb250c3R5bGV7c2Z9fQorXGxldFxsaSA9IFxzZiAlIFNvbWV0aW1lcyB3ZSBjYWxsIGl0IFxsaSwgbm90IFxzZi4KKworJSBXZSBkb24ndCBuZWVkIG1hdGggZm9yIHRoaXMgZm9udCBzdHlsZS4KK1xkZWZcdHRzbHtcc2V0Zm9udHN0eWxle3R0c2x9fQorCislIERlZmF1bHQgbGVhZGluZy4KK1xuZXdkaW1lblx0ZXh0bGVhZGluZyAgXHRleHRsZWFkaW5nID0gMTMuMnB0CisKKyUgU2V0IHRoZSBiYXNlbGluZXNraXAgdG8gIzEsIGFuZCB0aGUgbGluZXNraXAgYW5kIHN0cnV0IHNpemUKKyUgY29ycmVzcG9uZGluZ2x5LiAgVGhlcmUgaXMgbm8gZGVlcCBtZWFuaW5nIGJlaGluZCB0aGVzZSBtYWdpYyBudW1iZXJzCislIHVzZWQgYXMgZmFjdG9yczsgdGhleSBqdXN0IG1hdGNoIChjbG9zZWx5IGVub3VnaCkgd2hhdCBLbnV0aCBkZWZpbmVkLgorJQorXGRlZlxsaW5lc2tpcGZhY3RvcnsuMDgzMzN9CitcZGVmXHN0cnV0aGVpZ2h0cGVyY2VudHsuNzA4MzN9CitcZGVmXHN0cnV0ZGVwdGhwZXJjZW50IHsuMjkxNjd9CislCitcZGVmXHNldGxlYWRpbmcjMXslCisgIFxub3JtYWxiYXNlbGluZXNraXAgPSAjMVxyZWxheAorICBcbm9ybWFsbGluZXNraXAgPSBcbGluZXNraXBmYWN0b3Jcbm9ybWFsYmFzZWxpbmVza2lwCisgIFxub3JtYWxiYXNlbGluZXMKKyAgXHNldGJveFxzdHJ1dGJveCA9XGhib3h7JQorICAgIFx2cnVsZSB3aWR0aDBwdCBoZWlnaHRcc3RydXRoZWlnaHRwZXJjZW50XGJhc2VsaW5lc2tpcAorICAgICAgICAgICAgICAgICAgICBkZXB0aCBcc3RydXRkZXB0aHBlcmNlbnQgXGJhc2VsaW5lc2tpcAorICB9JQorfQorCislIFNldCB0aGUgZm9udCBtYWNybyAjMSB0byB0aGUgZm9udCBuYW1lZCAjMiwgYWRkaW5nIG9uIHRoZQorJSBzcGVjaWZpZWQgZm9udCBwcmVmaXggKG5vcm1hbGx5IGBjbScpLgorJSAjMyBpcyB0aGUgZm9udCdzIGRlc2lnbiBzaXplLCAjNCBpcyBhIHNjYWxlIGZhY3RvcgorXGRlZlxzZXRmb250IzEjMiMzIzR7XGZvbnQjMT1cZm9udHByZWZpeCMyIzMgc2NhbGVkICM0fQorCislIFVzZSBjbSBhcyB0aGUgZGVmYXVsdCBmb250IHByZWZpeC4KKyUgVG8gc3BlY2lmeSB0aGUgZm9udCBwcmVmaXgsIHlvdSBtdXN0IGRlZmluZSBcZm9udHByZWZpeAorJSBiZWZvcmUgeW91IHJlYWQgaW4gdGV4aW5mby50ZXguCitcaWZ4XGZvbnRwcmVmaXhcdW5kZWZpbmVkCitcZGVmXGZvbnRwcmVmaXh7Y219CitcZmkKKyUgU3VwcG9ydCBmb250IGZhbWlsaWVzIHRoYXQgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWluZyBzY2hlbWUgYXMgQ00uCitcZGVmXHJtc2hhcGV7cn0KK1xkZWZccm1ic2hhcGV7Ynh9ICAgICAgICAgICAgICAgJXdoZXJlIHRoZSBub3JtYWwgZmFjZSBpcyBib2xkCitcZGVmXGJmc2hhcGV7Yn0KK1xkZWZcYnhzaGFwZXtieH0KK1xkZWZcdHRzaGFwZXt0dH0KK1xkZWZcdHRic2hhcGV7dHR9CitcZGVmXHR0c2xzaGFwZXtzbHR0fQorXGRlZlxpdHNoYXBle3RpfQorXGRlZlxpdGJzaGFwZXtieHRpfQorXGRlZlxzbHNoYXBle3NsfQorXGRlZlxzbGJzaGFwZXtieHNsfQorXGRlZlxzZnNoYXBle3NzfQorXGRlZlxzZmJzaGFwZXtzc30KK1xkZWZcc2NzaGFwZXtjc2N9CitcZGVmXHNjYnNoYXBle2NzY30KKworJSBUZXh0IGZvbnRzICgxMS4ycHQsIG1hZ3N0ZXAxKS4KK1xkZWZcdGV4dG5vbWluYWxzaXplezExcHR9CitcZWRlZlxtYWlubWFnc3RlcHtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFx0ZXh0cm1ccm1zaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHR0XHR0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRiZlxiZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0aXRcaXRzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHNsXHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRzZlxzZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0c2Ncc2NzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHR0c2xcdHRzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9CitcZm9udFx0ZXh0aT1jbW1pMTAgc2NhbGVkIFxtYWlubWFnc3RlcAorXGZvbnRcdGV4dHN5PWNtc3kxMCBzY2FsZWQgXG1haW5tYWdzdGVwCisKKyUgQSBmZXcgZm9udHMgZm9yIEBkZWZ1biBuYW1lcyBhbmQgYXJncy4KK1xzZXRmb250XGRlZmJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwMX0KK1xzZXRmb250XGRlZnR0XHR0c2hhcGV7MTB9e1xtYWdzdGVwMX0KK1xzZXRmb250XGRlZnR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDF9CitcZGVmXGRme1xsZXRcdGVudHQ9XGRlZnR0IFxsZXRcdGVuYmYgPSBcZGVmYmYgXGxldFx0ZW50dHNsPVxkZWZ0dHNsIFxiZn0KKworJSBGb250cyBmb3IgaW5kaWNlcywgZm9vdG5vdGVzLCBzbWFsbCBleGFtcGxlcyAoOXB0KS4KK1xkZWZcc21hbGxub21pbmFsc2l6ZXs5cHR9Citcc2V0Zm9udFxzbWFsbHJtXHJtc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsdHRcdHRzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxiZlxiZnNoYXBlezEwfXs5MDB9Citcc2V0Zm9udFxzbWFsbGl0XGl0c2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsc2xcc2xzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxzZlxzZnNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHNjXHNjc2hhcGV7MTB9ezkwMH0KK1xzZXRmb250XHNtYWxsdHRzbFx0dHNsc2hhcGV7MTB9ezkwMH0KK1xmb250XHNtYWxsaT1jbW1pOQorXGZvbnRcc21hbGxzeT1jbXN5OQorCislIEZvbnRzIGZvciBzbWFsbCBleGFtcGxlcyAoOHB0KS4KK1xkZWZcc21hbGxlcm5vbWluYWxzaXplezhwdH0KK1xzZXRmb250XHNtYWxsZXJybVxybXNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVydHRcdHRzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcmJmXGJmc2hhcGV7MTB9ezgwMH0KK1xzZXRmb250XHNtYWxsZXJpdFxpdHNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyc2xcc2xzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnNmXHNmc2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJzY1xzY3NoYXBlezEwfXs4MDB9Citcc2V0Zm9udFxzbWFsbGVydHRzbFx0dHNsc2hhcGV7MTB9ezgwMH0KK1xmb250XHNtYWxsZXJpPWNtbWk4CitcZm9udFxzbWFsbGVyc3k9Y21zeTgKKworJSBGb250cyBmb3IgdGl0bGUgcGFnZSAoMjAuNHB0KToKK1xkZWZcdGl0bGVub21pbmFsc2l6ZXsyMHB0fQorXHNldGZvbnRcdGl0bGVybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAzfQorXHNldGZvbnRcdGl0bGVpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXHNldGZvbnRcdGl0bGVzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXHNldGZvbnRcdGl0bGV0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAzfQorXHNldGZvbnRcdGl0bGV0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXHNldGZvbnRcdGl0bGVzZlxzZmJzaGFwZXsxN317XG1hZ3N0ZXAxfQorXGxldFx0aXRsZWJmPVx0aXRsZXJtCitcc2V0Zm9udFx0aXRsZXNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDR9CitcZm9udFx0aXRsZWk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDMKK1xmb250XHRpdGxlc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDQKK1xkZWZcYXV0aG9ycm17XHNlY3JtfQorXGRlZlxhdXRob3J0dHtcc2VjdHR9CisKKyUgQ2hhcHRlciAoYW5kIHVubnVtYmVyZWQpIGZvbnRzICgxNy4yOHB0KS4KK1xkZWZcY2hhcG5vbWluYWxzaXplezE3cHR9Citcc2V0Zm9udFxjaGFwcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwMn0KK1xzZXRmb250XGNoYXBpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHNsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDN9Citcc2V0Zm9udFxjaGFwdHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwMn0KK1xzZXRmb250XGNoYXB0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHNmXHNmYnNoYXBlezE3fXsxMDAwfQorXGxldFxjaGFwYmY9XGNoYXBybQorXHNldGZvbnRcY2hhcHNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDN9CitcZm9udFxjaGFwaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMgorXGZvbnRcY2hhcHN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXAzCisKKyUgU2VjdGlvbiBmb250cyAoMTQuNHB0KS4KK1xkZWZcc2Vjbm9taW5hbHNpemV7MTRwdH0KK1xzZXRmb250XHNlY3JtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxzZWNpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXHNldGZvbnRcc2Vjc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxzZWN0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXHNldGZvbnRcc2Vjc2Zcc2Zic2hhcGV7MTJ9e1xtYWdzdGVwMX0KK1xsZXRcc2VjYmZcc2Vjcm0KK1xzZXRmb250XHNlY3NjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDJ9CitcZm9udFxzZWNpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAxCitcZm9udFxzZWNzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwMgorCislIFN1YnNlY3Rpb24gZm9udHMgKDEzLjE1cHQpLgorXGRlZlxzc2Vjbm9taW5hbHNpemV7MTNwdH0KK1xzZXRmb250XHNzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcc3NlY2l0XGl0YnNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3NsXHNsYnNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFxzc2VjdHRzbFx0dHNsc2hhcGV7MTB9ezEzMTV9Citcc2V0Zm9udFxzc2Vjc2Zcc2Zic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn0KK1xsZXRcc3NlY2JmXHNzZWNybQorXHNldGZvbnRcc3NlY3NjXHNjYnNoYXBlezEwfXsxMzE1fQorXGZvbnRcc3NlY2k9Y21taTEyIHNjYWxlZCBcbWFnc3RlcGhhbGYKK1xmb250XHNzZWNzeT1jbXN5MTAgc2NhbGVkIDEzMTUKKworJSBSZWR1Y2VkIGZvbnRzIGZvciBAYWNybyBpbiB0ZXh0ICgxMHB0KS4KK1xkZWZccmVkdWNlZG5vbWluYWxzaXplezEwcHR9Citcc2V0Zm9udFxyZWR1Y2Vkcm1ccm1zaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWR0dFx0dHNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZGJmXGJmc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkaXRcaXRzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRzbFxzbHNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHNmXHNmc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2Vkc2Ncc2NzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWR0dHNsXHR0c2xzaGFwZXsxMH17MTAwMH0KK1xmb250XHJlZHVjZWRpPWNtbWkxMAorXGZvbnRccmVkdWNlZHN5PWNtc3kxMAorCislIEluIG9yZGVyIGZvciB0aGUgZm9udCBjaGFuZ2VzIHRvIGFmZmVjdCBtb3N0IG1hdGggc3ltYm9scyBhbmQgbGV0dGVycywKKyUgd2UgaGF2ZSB0byBkZWZpbmUgdGhlIFx0ZXh0Zm9udCBvZiB0aGUgc3RhbmRhcmQgZmFtaWxpZXMuICBTaW5jZQorJSB0ZXhpbmZvIGRvZXNuJ3QgYWxsb3cgZm9yIHByb2R1Y2luZyBzdWJzY3JpcHRzIGFuZCBzdXBlcnNjcmlwdHMgZXhjZXB0CislIGluIHRoZSBtYWluIHRleHQsIHdlIGRvbid0IGJvdGhlciB0byByZXNldCBcc2NyaXB0Zm9udCBhbmQKKyUgXHNjcmlwdHNjcmlwdGZvbnQgKHdoaWNoIHdvdWxkIGFsc28gcmVxdWlyZSBsb2FkaW5nIGEgbG90IG1vcmUgZm9udHMpLgorJQorXGRlZlxyZXNldG1hdGhmb250c3slCisgIFx0ZXh0Zm9udDA9XHRlbnJtIFx0ZXh0Zm9udDE9XHRlbmkgXHRleHRmb250Mj1cdGVuc3kKKyAgXHRleHRmb250XGl0ZmFtPVx0ZW5pdCBcdGV4dGZvbnRcc2xmYW09XHRlbnNsIFx0ZXh0Zm9udFxiZmZhbT1cdGVuYmYKKyAgXHRleHRmb250XHR0ZmFtPVx0ZW50dCBcdGV4dGZvbnRcc2ZmYW09XHRlbnNmCit9CisKKyUgVGhlIGZvbnQtY2hhbmdpbmcgY29tbWFuZHMgcmVkZWZpbmUgdGhlIG1lYW5pbmdzIG9mIFx0ZW5TVFlMRSwgaW5zdGVhZAorJSBvZiBqdXN0IFxTVFlMRS4gIFdlIGRvIHRoaXMgYmVjYXVzZSBcU1RZTEUgbmVlZHMgdG8gYWxzbyBzZXQgdGhlCislIGN1cnJlbnQgXGZhbSBmb3IgbWF0aCBtb2RlLiAgT3VyIFxTVFlMRSAoZS5nLiwgXHJtKSBjb21tYW5kcyBoYXJkd2lyZQorJSBcdGVuU1RZTEUgdG8gc2V0IHRoZSBjdXJyZW50IGZvbnQuCislCislIEVhY2ggZm9udC1jaGFuZ2luZyBjb21tYW5kIGFsc28gc2V0cyB0aGUgbmFtZXMgXGxzaXplIChvbmUgc2l6ZSBsb3dlcikKKyUgYW5kIFxsbGxzaXplICh0aHJlZSBzaXplcyBsb3dlcikuICBUaGVzZSByZWxhdGl2ZSBjb21tYW5kcyBhcmUgdXNlZCBpbgorJSB0aGUgTGFUZVggbG9nbyBhbmQgYWNyb255bXMuCislCislIFRoaXMgYWxsIG5lZWRzIGdlbmVyYWxpemluZywgYmFkbHkuCislCitcZGVmXHRleHRmb250c3slCisgIFxsZXRcdGVucm09XHRleHRybSBcbGV0XHRlbml0PVx0ZXh0aXQgXGxldFx0ZW5zbD1cdGV4dHNsCisgIFxsZXRcdGVuYmY9XHRleHRiZiBcbGV0XHRlbnR0PVx0ZXh0dHQgXGxldFxzbWFsbGNhcHM9XHRleHRzYworICBcbGV0XHRlbnNmPVx0ZXh0c2YgXGxldFx0ZW5pPVx0ZXh0aSBcbGV0XHRlbnN5PVx0ZXh0c3kKKyAgXGxldFx0ZW50dHNsPVx0ZXh0dHRzbAorICBcZGVmXGN1cmZvbnRzaXple3RleHR9JQorICBcZGVmXGxzaXple3JlZHVjZWR9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfX0KK1xkZWZcdGl0bGVmb250c3slCisgIFxsZXRcdGVucm09XHRpdGxlcm0gXGxldFx0ZW5pdD1cdGl0bGVpdCBcbGV0XHRlbnNsPVx0aXRsZXNsCisgIFxsZXRcdGVuYmY9XHRpdGxlYmYgXGxldFx0ZW50dD1cdGl0bGV0dCBcbGV0XHNtYWxsY2Fwcz1cdGl0bGVzYworICBcbGV0XHRlbnNmPVx0aXRsZXNmIFxsZXRcdGVuaT1cdGl0bGVpIFxsZXRcdGVuc3k9XHRpdGxlc3kKKyAgXGxldFx0ZW50dHNsPVx0aXRsZXR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXt0aXRsZX0lCisgIFxkZWZcbHNpemV7Y2hhcH1cZGVmXGxsbHNpemV7c3Vic2VjfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezI1cHR9fQorXGRlZlx0aXRsZWZvbnQjMXt7XHRpdGxlZm9udHNccm0gIzF9fQorXGRlZlxjaGFwZm9udHN7JQorICBcbGV0XHRlbnJtPVxjaGFwcm0gXGxldFx0ZW5pdD1cY2hhcGl0IFxsZXRcdGVuc2w9XGNoYXBzbAorICBcbGV0XHRlbmJmPVxjaGFwYmYgXGxldFx0ZW50dD1cY2hhcHR0IFxsZXRcc21hbGxjYXBzPVxjaGFwc2MKKyAgXGxldFx0ZW5zZj1cY2hhcHNmIFxsZXRcdGVuaT1cY2hhcGkgXGxldFx0ZW5zeT1cY2hhcHN5CisgIFxsZXRcdGVudHRzbD1cY2hhcHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtjaGFwfSUKKyAgXGRlZlxsc2l6ZXtzZWN9XGRlZlxsbGxzaXple3RleHR9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTlwdH19CitcZGVmXHNlY2ZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc2Vjcm0gXGxldFx0ZW5pdD1cc2VjaXQgXGxldFx0ZW5zbD1cc2Vjc2wKKyAgXGxldFx0ZW5iZj1cc2VjYmYgXGxldFx0ZW50dD1cc2VjdHQgXGxldFxzbWFsbGNhcHM9XHNlY3NjCisgIFxsZXRcdGVuc2Y9XHNlY3NmIFxsZXRcdGVuaT1cc2VjaSBcbGV0XHRlbnN5PVxzZWNzeQorICBcbGV0XHRlbnR0c2w9XHNlY3R0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzZWN9JQorICBcZGVmXGxzaXple3N1YnNlY31cZGVmXGxsbHNpemV7cmVkdWNlZH0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxNnB0fX0KK1xkZWZcc3Vic2VjZm9udHN7JQorICBcbGV0XHRlbnJtPVxzc2Vjcm0gXGxldFx0ZW5pdD1cc3NlY2l0IFxsZXRcdGVuc2w9XHNzZWNzbAorICBcbGV0XHRlbmJmPVxzc2VjYmYgXGxldFx0ZW50dD1cc3NlY3R0IFxsZXRcc21hbGxjYXBzPVxzc2Vjc2MKKyAgXGxldFx0ZW5zZj1cc3NlY3NmIFxsZXRcdGVuaT1cc3NlY2kgXGxldFx0ZW5zeT1cc3NlY3N5CisgIFxsZXRcdGVudHRzbD1cc3NlY3R0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzc2VjfSUKKyAgXGRlZlxsc2l6ZXt0ZXh0fVxkZWZcbGxsc2l6ZXtzbWFsbH0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxNXB0fX0KK1xsZXRcc3Vic3Vic2VjZm9udHMgPSBcc3Vic2VjZm9udHMKK1xkZWZccmVkdWNlZGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1ccmVkdWNlZHJtIFxsZXRcdGVuaXQ9XHJlZHVjZWRpdCBcbGV0XHRlbnNsPVxyZWR1Y2Vkc2wKKyAgXGxldFx0ZW5iZj1ccmVkdWNlZGJmIFxsZXRcdGVudHQ9XHJlZHVjZWR0dCBcbGV0XHJlZHVjZWRjYXBzPVxyZWR1Y2Vkc2MKKyAgXGxldFx0ZW5zZj1ccmVkdWNlZHNmIFxsZXRcdGVuaT1ccmVkdWNlZGkgXGxldFx0ZW5zeT1ccmVkdWNlZHN5CisgIFxsZXRcdGVudHRzbD1ccmVkdWNlZHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtyZWR1Y2VkfSUKKyAgXGRlZlxsc2l6ZXtzbWFsbH1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxMC41cHR9fQorXGRlZlxzbWFsbGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc21hbGxybSBcbGV0XHRlbml0PVxzbWFsbGl0IFxsZXRcdGVuc2w9XHNtYWxsc2wKKyAgXGxldFx0ZW5iZj1cc21hbGxiZiBcbGV0XHRlbnR0PVxzbWFsbHR0IFxsZXRcc21hbGxjYXBzPVxzbWFsbHNjCisgIFxsZXRcdGVuc2Y9XHNtYWxsc2YgXGxldFx0ZW5pPVxzbWFsbGkgXGxldFx0ZW5zeT1cc21hbGxzeQorICBcbGV0XHRlbnR0c2w9XHNtYWxsdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NtYWxsfSUKKyAgXGRlZlxsc2l6ZXtzbWFsbGVyfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezEwLjVwdH19CitcZGVmXHNtYWxsZXJmb250c3slCisgIFxsZXRcdGVucm09XHNtYWxsZXJybSBcbGV0XHRlbml0PVxzbWFsbGVyaXQgXGxldFx0ZW5zbD1cc21hbGxlcnNsCisgIFxsZXRcdGVuYmY9XHNtYWxsZXJiZiBcbGV0XHRlbnR0PVxzbWFsbGVydHQgXGxldFxzbWFsbGNhcHM9XHNtYWxsZXJzYworICBcbGV0XHRlbnNmPVxzbWFsbGVyc2YgXGxldFx0ZW5pPVxzbWFsbGVyaSBcbGV0XHRlbnN5PVxzbWFsbGVyc3kKKyAgXGxldFx0ZW50dHNsPVxzbWFsbGVydHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NtYWxsZXJ9JQorICBcZGVmXGxzaXple3NtYWxsZXJ9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7OS41cHR9fQorCislIFNldCB0aGUgZm9udHMgdG8gdXNlIHdpdGggdGhlIEBzbWFsbC4uLiBlbnZpcm9ubWVudHMuCitcbGV0XHNtYWxsZXhhbXBsZWZvbnRzID0gXHNtYWxsZm9udHMKKworJSBBYm91dCBcc21hbGxleGFtcGxlZm9udHMuICBJZiB3ZSB1c2UgXHNtYWxsZm9udHMgKDlwdCksIEBzbWFsbGV4YW1wbGUKKyUgY2FuIGZpdCB0aGlzIG1hbnkgY2hhcmFjdGVyczoKKyUgICA4LjV4MTE9ODYgICBzbWFsbGJvb2s9NzIgIGE0PTkwICBhNT02OQorJSBJZiB3ZSB1c2UgXHNjcmlwdGZvbnRzICg4cHQpLCB0aGVuIHdlIGNhbiBmaXQgdGhpcyBtYW55IGNoYXJhY3RlcnM6CislICAgOC41eDExPTkwKyAgc21hbGxib29rPTgwICBhND05MCsgIGE1PTc3CislIEZvciBtZSwgc3ViamVjdGl2ZWx5LCB0aGUgZmV3IGV4dHJhIGNoYXJhY3RlcnMgdGhhdCBmaXQgYXJlbid0IHdvcnRoCislIHRoZSBhZGRpdGlvbmFsIHNtYWxsbmVzcyBvZiA4cHQuICBTbyBJJ20gbWFraW5nIHRoZSBkZWZhdWx0IDlwdC4KKyUKKyUgQnkgdGhlIHdheSwgZm9yIGNvbXBhcmlzb24sIGhlcmUncyB3aGF0IGZpdHMgd2l0aCBAZXhhbXBsZSAoMTBwdCk6CislICAgOC41eDExPTcxICBzbWFsbGJvb2s9NjAgIGE0PTc1ICBhNT01OAorJQorJSBJIHdpc2ggdGhlIFVTQSB1c2VkIEE0IHBhcGVyLgorJSAtLWthcmwsIDI0amFuMDMuCisKKworJSBTZXQgdXAgdGhlIGRlZmF1bHQgZm9udHMsIHNvIHdlIGNhbiB1c2UgdGhlbSBmb3IgY3JlYXRpbmcgYm94ZXMuCislCitcdGV4dGZvbnRzIFxybQorCislIERlZmluZSB0aGVzZSBzbyB0aGV5IGNhbiBiZSBlYXNpbHkgY2hhbmdlZCBmb3Igb3RoZXIgZm9udHMuCitcZGVmXGFuZ2xlbGVmdHskXGxhbmdsZSR9CitcZGVmXGFuZ2xlcmlnaHR7JFxyYW5nbGUkfQorCislIENvdW50IGRlcHRoIGluIGZvbnQtY2hhbmdlcywgZm9yIGVycm9yIGNoZWNrcworXG5ld2NvdW50XGZvbnRkZXB0aCBcZm9udGRlcHRoPTAKKworJSBGb250cyBmb3Igc2hvcnQgdGFibGUgb2YgY29udGVudHMuCitcc2V0Zm9udFxzaG9ydGNvbnRybVxybXNoYXBlezEyfXsxMDAwfQorXHNldGZvbnRcc2hvcnRjb250YmZcYmZzaGFwZXsxMH17XG1hZ3N0ZXAxfSAgJSBubyBjbWIxMgorXHNldGZvbnRcc2hvcnRjb250c2xcc2xzaGFwZXsxMn17MTAwMH0KK1xzZXRmb250XHNob3J0Y29udHR0XHR0c2hhcGV7MTJ9ezEwMDB9CisKKyUlIEFkZCBzY3JpYmUtbGlrZSBmb250IGVudmlyb25tZW50cywgcGx1cyBAbCBmb3IgaW5saW5lIGxpc3AgKHVzdWFsbHkgc2FucworJSUgc2VyaWYpIGFuZCBAaWkgZm9yIFRlWCBpdGFsaWMKKworJSBcc21hcnRpdGFsaWN7QVJHfSBvdXRwdXRzIGFyZyBpbiBpdGFsaWNzLCBmb2xsb3dlZCBieSBhbiBpdGFsaWMgY29ycmVjdGlvbgorJSB1bmxlc3MgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgc3VjaCBhcyBub3QgdG8gbmVlZCBvbmUuCitcZGVmXHNtYXJ0aXRhbGljeHtcaWZ4XG5leHQsXGVsc2VcaWZ4XG5leHQtXGVsc2VcaWZ4XG5leHQuXGVsc2UKKyAgICAgICAgICAgICAgICAgICAgXHB0ZXhzbGFzaFxmaVxmaVxmaX0KK1xkZWZcc21hcnRzbGFudGVkIzF7e1xpZnVzaW5ndHRcdHRzbFxzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorXGRlZlxzbWFydGl0YWxpYyMxe3tcaWZ1c2luZ3R0XHR0c2xcaXQgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworJSBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2VzIFx0dHNsLgorJSBAdmFyIGlzIHNldCB0byB0aGlzIGZvciBkZWZ1biBhcmd1bWVudHMuCitcZGVmXHR0c2xhbnRlZCMxe3tcdHRzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorCislIGxpa2UgXHNtYXJ0c2xhbnRlZCBleGNlcHQgdW5jb25kaXRpb25hbGx5IHVzZSBcc2wuICBXZSBuZXZlciB3YW50CislIHR0c2wgZm9yIGJvb2sgdGl0bGVzLCBkbyB3ZT8KK1xkZWZcY2l0ZSMxe3tcc2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworXGxldFxpPVxzbWFydGl0YWxpYworXGxldFxzbGFudGVkPVxzbWFydHNsYW50ZWQKK1xsZXRcdmFyPVxzbWFydHNsYW50ZWQKK1xsZXRcZGZuPVxzbWFydHNsYW50ZWQKK1xsZXRcZW1waD1cc21hcnRpdGFsaWMKKworJSBAYiwgZXhwbGljaXQgYm9sZC4KK1xkZWZcYiMxe3tcYmYgIzF9fQorXGxldFxzdHJvbmc9XGIKKworJSBAc2Fuc3NlcmlmLCBleHBsaWNpdCBzYW5zLgorXGRlZlxzYW5zc2VyaWYjMXt7XHNmICMxfX0KKworJSBXZSBjYW4ndCBqdXN0IHVzZSBcZXhoeXBoZW5wZW5hbHR5LCBiZWNhdXNlIHRoYXQgb25seSBoYXMgZWZmZWN0IGF0CislIHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGguICBSZXN0b3JlIG5vcm1hbCBoeXBoZW5hdGlvbiBhdCB0aGUgZW5kIG9mIHRoZQorJSBncm91cCB3aXRoaW4gd2hpY2ggXG5vaHlwaGVuYXRpb24gaXMgcHJlc3VtYWJseSBjYWxsZWQuCislCitcZGVmXG5vaHlwaGVuYXRpb257XGh5cGhlbmNoYXJcZm9udCA9IC0xICBcYWZ0ZXJncm91cFxyZXN0b3JlaHlwaGVuYXRpb259CitcZGVmXHJlc3RvcmVoeXBoZW5hdGlvbntcaHlwaGVuY2hhclxmb250ID0gYC0gfQorCislIFNldCBzZmNvZGUgdG8gbm9ybWFsIGZvciB0aGUgY2hhcnMgdGhhdCB1c3VhbGx5IGhhdmUgYW5vdGhlciB2YWx1ZS4KKyUgQ2FuJ3QgdXNlIHBsYWluJ3MgXGZyZW5jaHNwYWNpbmcgYmVjYXVzZSBpdCB1c2VzIHRoZSBgXHggbm90YXRpb24sIGFuZAorJSBzb21ldGltZXMgXHggaGFzIGFuIGFjdGl2ZSBkZWZpbml0aW9uIHRoYXQgbWVzc2VzIHRoaW5ncyB1cC4KKyUKK1xjYXRjb2RlYEA9MTEKKyAgXGRlZlxwbGFpbmZyZW5jaHNwYWNpbmd7JQorICAgIFxzZmNvZGVcZG90Q2hhciAgPVxAbSBcc2Zjb2RlXHF1ZXN0Q2hhcj1cQG0gXHNmY29kZVxleGNsYW1DaGFyPVxAbQorICAgIFxzZmNvZGVcY29sb25DaGFyPVxAbSBcc2Zjb2RlXHNlbWlDaGFyID1cQG0gXHNmY29kZVxjb21tYUNoYXIgPVxAbQorICAgIFxkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezEwMDB9JSBmb3IgQC4gYW5kIGZyaWVuZHMKKyAgfQorICBcZGVmXHBsYWlubm9uZnJlbmNoc3BhY2luZ3slCisgICAgXHNmY29kZWBcLjMwMDBcc2Zjb2RlYFw/MzAwMFxzZmNvZGVgXCEzMDAwCisgICAgXHNmY29kZWBcOjIwMDBcc2Zjb2RlYFw7MTUwMFxzZmNvZGVgXCwxMjUwCisgICAgXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGZvciBALiBhbmQgZnJpZW5kcworICB9CitcY2F0Y29kZWBAPVxvdGhlcgorXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGRlZmF1bHQKKworXGRlZlx0IzF7JQorICB7XHR0IFxyYXdiYWNrc2xhc2ggXHBsYWluZnJlbmNoc3BhY2luZyAjMX0lCisgIFxudWxsCit9CitcZGVmXHNhbXAjMXtgXHRjbG9zZXsjMX0nXG51bGx9Citcc2V0Zm9udFxrZXlybVxybXNoYXBlezh9ezEwMDB9CitcZm9udFxrZXlzeT1jbXN5OQorXGRlZlxrZXkjMXt7XGtleXJtXHRleHRmb250Mj1ca2V5c3kgXGxlYXZldm1vZGVcaGJveHslCisgIFxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlbGVmdH1ca2Vybi0uMDhlbVx2dG9weyUKKyAgICBcdmJveHtcaHJ1bGVca2Vybi0wLjRwdAorICAgICBcaGJveHtccmFpc2UwLjRwdFxoYm94e1x2cGhhbnRvbXtcYW5nbGVsZWZ0fX0jMX19JQorICAgIFxrZXJuLTAuNHB0XGhydWxlfSUKKyAgXGtlcm4tLjA2ZW1ccmFpc2UwLjRwdFxoYm94e1xhbmdsZXJpZ2h0fX19fQorJSBUaGUgb2xkIGRlZmluaXRpb24sIHdpdGggbm8gbG96ZW5nZToKKyVcZGVmXGtleSAjMXt7XHR0c2wgXG5vaHlwaGVuYXRpb24gXHVwcGVyY2FzZXsjMX19XG51bGx9CitcZGVmXGN0cmwgIzF7e1x0dCBccmF3YmFja3NsYXNoIFxoYXR9IzF9CisKKyUgQGZpbGUsIEBvcHRpb24gYXJlIHRoZSBzYW1lIGFzIEBzYW1wLgorXGxldFxmaWxlPVxzYW1wCitcbGV0XG9wdGlvbj1cc2FtcAorCislIEBjb2RlIGlzIGEgbW9kaWZpY2F0aW9uIG9mIEB0LAorJSB3aGljaCBtYWtlcyBzcGFjZXMgdGhlIHNhbWUgc2l6ZSBhcyBub3JtYWwgaW4gdGhlIHN1cnJvdW5kaW5nIHRleHQuCitcZGVmXHRjbG9zZSMxeyUKKyAgeyUKKyAgICAlIENoYW5nZSBub3JtYWwgaW50ZXJ3b3JkIHNwYWNlIHRvIGJlIHNhbWUgYXMgZm9yIHRoZSBjdXJyZW50IGZvbnQuCisgICAgXHNwYWNlc2tpcCA9IFxmb250ZGltZW4yXGZvbnQKKyAgICAlCisgICAgJSBTd2l0Y2ggdG8gdHlwZXdyaXRlci4KKyAgICBcdHQKKyAgICAlCisgICAgJSBCdXQgYFwgJyBwcm9kdWNlcyB0aGUgbGFyZ2UgdHlwZXdyaXRlciBpbnRlcndvcmQgc3BhY2UuCisgICAgXGRlZlwge3tcc3BhY2Vza2lwID0gMHB0e30gfX0lCisgICAgJQorICAgICUgVHVybiBvZmYgaHlwaGVuYXRpb24uCisgICAgXG5vaHlwaGVuYXRpb24KKyAgICAlCisgICAgXHJhd2JhY2tzbGFzaAorICAgIFxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgICAjMSUKKyAgfSUKKyAgXG51bGwKK30KKworJSBXZSAqbXVzdCogdHVybiBvbiBoeXBoZW5hdGlvbiBhdCBgLScgYW5kIGBfJyBpbiBAY29kZS4KKyUgT3RoZXJ3aXNlLCBpdCBpcyB0b28gaGFyZCB0byBhdm9pZCBvdmVyZnVsbCBoYm94ZXMKKyUgaW4gdGhlIEVtYWNzIG1hbnVhbCwgdGhlIExpYnJhcnkgbWFudWFsLCBldGMuCisKKyUgVW5mb3J0dW5hdGVseSwgVGVYIHVzZXMgb25lIHBhcmFtZXRlciAoXGh5cGhlbmNoYXIpIHRvIGNvbnRyb2wKKyUgYm90aCBoeXBoZW5hdGlvbiBhdCAtIGFuZCBoeXBoZW5hdGlvbiB3aXRoaW4gd29yZHMuCislIFdlIG11c3QgdGhlcmVmb3JlIHR1cm4gdGhlbSBib3RoIG9mZiAoXHRjbG9zZSBkb2VzIHRoYXQpCislIGFuZCBhcnJhbmdlIGV4cGxpY2l0bHkgdG8gaHlwaGVuYXRlIGF0IGEgZGFzaC4KKyUgIC0tIHJtcy4KK3sKKyAgXGNhdGNvZGVgXC09XGFjdGl2ZQorICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICUKKyAgXGdsb2JhbFxkZWZcY29kZXtcYmVnaW5ncm91cAorICAgIFxjYXRjb2RlYFwtPVxhY3RpdmUgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgICBcaWZhbGxvd2NvZGVicmVha3MKKyAgICAgXGxldC1cY29kZWRhc2gKKyAgICAgXGxldF9cY29kZXVuZGVyCisgICAgXGVsc2UKKyAgICAgXGxldC1ccmVhbGRhc2gKKyAgICAgXGxldF9ccmVhbHVuZGVyCisgICAgXGZpCisgICAgXGNvZGV4CisgIH0KK30KKworXGRlZlxyZWFsZGFzaHstfQorXGRlZlxjb2RlZGFzaHstXGRpc2NyZXRpb25hcnl7fXt9e319CitcZGVmXGNvZGV1bmRlcnslCisgICUgdGhpcyBpcyBhbGwgc28gQG1hdGh7QGNvZGV7dmFyX25hbWV9KzF9IGNhbiB3b3JrLiAgSW4gbWF0aCBtb2RlLCBfCisgICUgaXMgImFjdGl2ZSIgKG1hdGhjb2RlIjgwMDApIGFuZCBcbm9ybWFsdW5kZXJzY29yZSAob3IgXGNoYXI5NSwgZXRjLikKKyAgJSB3aWxsIHRoZXJlZm9yZSBleHBhbmQgdGhlIGFjdGl2ZSBkZWZpbml0aW9uIG9mIF8sIHdoaWNoIGlzIHVzCisgICUgKGluc2lkZSBAY29kZSB0aGF0IGlzKSwgdGhlcmVmb3JlIGFuIGVuZGxlc3MgbG9vcC4KKyAgXGlmdXNpbmd0dHtcaWZtbW9kZQorICAgICAgICAgICAgICAgXG1hdGhjaGFyIjA3NUYgJSBjbGFzcyAwPW9yZGluYXJ5LCBmYW1pbHkgNz10dGZhbSwgcG9zIDB4NUY9Xy4KKyAgICAgICAgICAgICBcZWxzZVxub3JtYWx1bmRlcnNjb3JlIFxmaQorICAgICAgICAgICAgIFxkaXNjcmV0aW9uYXJ5e317fXt9fSUKKyAgICAgICAgICAgIHtcX30lCit9CitcZGVmXGNvZGV4ICMxe1x0Y2xvc2V7IzF9XGVuZGdyb3VwfQorCislIEFuIGFkZGl0aW9uYWwgY29tcGxpY2F0aW9uOiB0aGUgYWJvdmUgd2lsbCBhbGxvdyBicmVha3MgYWZ0ZXIsIGUuZy4sCislIGVhY2ggb2YgdGhlIGZvdXIgdW5kZXJzY29yZXMgaW4gX190eXBlb2ZfXy4gIFRoaXMgaXMgdW5kZXNpcmFibGUgaW4KKyUgc29tZSBtYW51YWxzLCBlc3BlY2lhbGx5IGlmIHRoZXkgZG9uJ3QgaGF2ZSBsb25nIGlkZW50aWZpZXJzIGluCislIGdlbmVyYWwuICBAYWxsb3djb2RlYnJlYWtzIHByb3ZpZGVzIGEgd2F5IHRvIGNvbnRyb2wgdGhpcy4KKyUgCitcbmV3aWZcaWZhbGxvd2NvZGVicmVha3MgIFxhbGxvd2NvZGVicmVha3N0cnVlCisKK1xkZWZca2V5d29yZHRydWV7dHJ1ZX0KK1xkZWZca2V5d29yZGZhbHNle2ZhbHNlfQorCitccGFyc2VhcmdkZWZcYWxsb3djb2RlYnJlYWtzeyUKKyAgXGRlZlx0eGlhcmd7IzF9JQorICBcaWZ4XHR4aWFyZ1xrZXl3b3JkdHJ1ZQorICAgIFxhbGxvd2NvZGVicmVha3N0cnVlCisgIFxlbHNlXGlmeFx0eGlhcmdca2V5d29yZGZhbHNlCisgICAgXGFsbG93Y29kZWJyZWFrc2ZhbHNlCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBhbGxvd2NvZGVicmVha3Mgb3B0aW9uIGBcdHhpYXJnJ30lCisgIFxmaVxmaQorfQorCislIEBrYmQgaXMgbGlrZSBAY29kZSwgZXhjZXB0IHRoYXQgaWYgdGhlIGFyZ3VtZW50IGlzIGp1c3Qgb25lIEBrZXkgY29tbWFuZCwKKyUgdGhlbiBAa2JkIGhhcyBubyBlZmZlY3QuCisKKyUgQGtiZGlucHV0c3R5bGUgLS0gYXJnIGlzIGBkaXN0aW5jdCcgKEBrYmQgdXNlcyBzbGFudGVkIHR0eSBmb250IGFsd2F5cyksCislICAgYGV4YW1wbGUnIChAa2JkIHVzZXMgdHRzbCBvbmx5IGluc2lkZSBvZiBAZXhhbXBsZSBhbmQgZnJpZW5kcyksCislICAgb3IgYGNvZGUnIChAa2JkIHVzZXMgbm9ybWFsIHR0eSBmb250IGFsd2F5cykuCitccGFyc2VhcmdkZWZca2JkaW5wdXRzdHlsZXslCisgIFxkZWZcdHhpYXJneyMxfSUKKyAgXGlmeFx0eGlhcmdcd29yZGRpc3RpbmN0CisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0c2x9XGdkZWZca2JkZm9udHtcdHRzbH0lCisgIFxlbHNlXGlmeFx0eGlhcmdcd29yZGV4YW1wbGUKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHRzbH1cZ2RlZlxrYmRmb250e1x0dH0lCisgIFxlbHNlXGlmeFx0eGlhcmdcd29yZGNvZGUKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHR9XGdkZWZca2JkZm9udHtcdHR9JQorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAa2JkaW5wdXRzdHlsZSBvcHRpb24gYFx0eGlhcmcnfSUKKyAgXGZpXGZpXGZpCit9CitcZGVmXHdvcmRkaXN0aW5jdHtkaXN0aW5jdH0KK1xkZWZcd29yZGV4YW1wbGV7ZXhhbXBsZX0KK1xkZWZcd29yZGNvZGV7Y29kZX0KKworJSBEZWZhdWx0IGlzIGBkaXN0aW5jdC4nCitca2JkaW5wdXRzdHlsZSBkaXN0aW5jdAorCitcZGVmXHhrZXl7XGtleX0KK1xkZWZca2JkZm9vIzEjMiMzXHBhcntcZGVmXG9uZXsjMX1cZGVmXHRocmVleyMzfVxkZWZcdGhyZWV4ez8/fSUKK1xpZnhcb25lXHhrZXlcaWZ4XHRocmVleFx0aHJlZSBca2V5eyMyfSUKK1xlbHNle1x0Y2xvc2V7XGtiZGZvbnRcbG9va319XGZpCitcZWxzZXtcdGNsb3Nle1xrYmRmb250XGxvb2t9fVxmaX0KKworJSBGb3IgQGluZGljYXRldXJsLCBAZW52LCBAY29tbWFuZCBxdW90ZXMgc2VlbSB1bm5lY2Vzc2FyeSwgc28gdXNlIFxjb2RlLgorXGxldFxpbmRpY2F0ZXVybD1cY29kZQorXGxldFxlbnY9XGNvZGUKK1xsZXRcY29tbWFuZD1cY29kZQorCislIEB1cmVmIChhYmJyZXZpYXRpb24gZm9yIGB1cmxyZWYnKSB0YWtlcyBhbiBvcHRpb25hbCAoY29tbWEtc2VwYXJhdGVkKQorJSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgdGV4dCB0byBkaXNwbGF5IGFuZCBhbiBvcHRpb25hbCB0aGlyZAorJSBhcmcgYXMgdGV4dCB0byBkaXNwbGF5IGluc3RlYWQgb2YgKHJhdGhlciB0aGFuIGluIGFkZGl0aW9uIHRvKSB0aGUgdXJsCislIGl0c2VsZi4gIEZpcnN0IChtYW5kYXRvcnkpIGFyZyBpcyB0aGUgdXJsLiAgUGVyaGFwcyBldmVudHVhbGx5IHB1dCBpbgorJSBhIGh5cGVydGV4IFxzcGVjaWFsIGhlcmUuCislCitcZGVmXHVyZWYjMXtcZG91cmVmICMxLCwsXGZpbmlzaH0KK1xkZWZcZG91cmVmIzEsIzIsIzMsIzRcZmluaXNoe1xiZWdpbmdyb3VwCisgIFx1bnNlcHNwYWNlcworICBccGRmdXJseyMxfSUKKyAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfSUKKyAgXGlmZGltXHdkMCA+IDBwdAorICAgIFx1bmhib3gwICUgdGhpcmQgYXJnIGdpdmVuLCBzaG93IG9ubHkgdGhhdAorICBcZWxzZQorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGlmZGltXHdkMCA+IDBwdAorICAgICAgXGlmcGRmCisgICAgICAgIFx1bmhib3gwICAgICAgICAgICAgICUgUERGOiAybmQgYXJnIGdpdmVuLCBzaG93IG9ubHkgaXQKKyAgICAgIFxlbHNlCisgICAgICAgIFx1bmhib3gwXCAoXGNvZGV7IzF9KSUgRFZJOiAybmQgYXJnIGdpdmVuLCBzaG93IGJvdGggaXQgYW5kIHVybAorICAgICAgXGZpCisgICAgXGVsc2UKKyAgICAgIFxjb2RleyMxfSUgb25seSB1cmwgZ2l2ZW4sIHNvIHNob3cgaXQKKyAgICBcZmkKKyAgXGZpCisgIFxlbmRsaW5rCitcZW5kZ3JvdXB9CisKKyUgQHVybCBzeW5vbnltIGZvciBAdXJlZiwgc2luY2UgdGhhdCdzIGhvdyBldmVyeW9uZSB1c2VzIGl0LgorJQorXGxldFx1cmw9XHVyZWYKKworJSBybXMgZG9lcyBub3QgbGlrZSBhbmdsZSBicmFja2V0cyAtLWthcmwsIDE3bWF5OTcuCislIFNvIG5vdyBAZW1haWwgaXMganVzdCBsaWtlIEB1cmVmLCB1bmxlc3Mgd2UgYXJlIHBkZi4KKyUKKyVcZGVmXGVtYWlsIzF7XGFuZ2xlbGVmdHtcdHQgIzF9XGFuZ2xlcmlnaHR9CitcaWZwZGYKKyAgXGRlZlxlbWFpbCMxe1xkb2VtYWlsIzEsLFxmaW5pc2h9CisgIFxkZWZcZG9lbWFpbCMxLCMyLCMzXGZpbmlzaHtcYmVnaW5ncm91cAorICAgIFx1bnNlcHNwYWNlcworICAgIFxwZGZ1cmx7bWFpbHRvOiMxfSUKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxpZmRpbVx3ZDA+MHB0XHVuaGJveDBcZWxzZVxjb2RleyMxfVxmaQorICAgIFxlbmRsaW5rCisgIFxlbmRncm91cH0KK1xlbHNlCisgIFxsZXRcZW1haWw9XHVyZWYKK1xmaQorCislIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSB0eXBld3JpdGVyIGZvbnQuICBTaW5jZSBhbGwgdGhlCislIENvbXB1dGVyIE1vZGVybiB0eXBld3JpdGVyIGZvbnRzIGhhdmUgemVybyBpbnRlcndvcmQgc3RyZXRjaCAoYW5kCislIHNocmluayksIGFuZCBpdCBpcyByZWFzb25hYmxlIHRvIGV4cGVjdCBhbGwgdHlwZXdyaXRlciBmb250cyB0byBoYXZlCislIHRoaXMgcHJvcGVydHksIHdlIGNhbiBjaGVjayB0aGF0IGZvbnQgcGFyYW1ldGVyLgorJQorXGRlZlxpZm1vbm9zcGFjZXtcaWZkaW1cZm9udGRpbWVuM1xmb250PTBwdCB9CisKKyUgVHlwZXNldCBhIGRpbWVuc2lvbiwgZS5nLiwgYGluJyBvciBgcHQnLiAgVGhlIG9ubHkgcmVhc29uIGZvciB0aGUKKyUgYXJndW1lbnQgaXMgdG8gbWFrZSB0aGUgaW5wdXQgbG9vayByaWdodDogQGRtbntwdH0gaW5zdGVhZCBvZiBAZG1ue31wdC4KKyUKK1xkZWZcZG1uIzF7XHRoaW5zcGFjZSAjMX0KKworXGRlZlxrYmQjMXtcZGVmXGxvb2t7IzF9XGV4cGFuZGFmdGVyXGtiZGZvb1xsb29rPz9ccGFyfQorCislIEBsIHdhcyBuZXZlciBkb2N1bWVudGVkIHRvIG1lYW4gYGBzd2l0Y2ggdG8gdGhlIExpc3AgZm9udCcnLAorJSBhbmQgaXQgaXMgbm90IHVzZWQgYXMgc3VjaCBpbiBhbnkgbWFudWFsIEkgY2FuIGZpbmQuICBXZSBuZWVkIGl0IGZvcgorJSBQb2xpc2ggc3VwcHJlc3NlZC1sLiAgLS1rYXJsLCAyMnNlcDk2LgorJVxkZWZcbCMxe3tcbGkgIzF9XG51bGx9CisKKyUgRXhwbGljaXQgZm9udCBjaGFuZ2VzOiBAciwgQHNjLCB1bmRvY3VtZW50ZWQgQGlpLgorXGRlZlxyIzF7e1xybSAjMX19ICAgICAgICAgICAgICAlIHJvbWFuIGZvbnQKK1xkZWZcc2MjMXt7XHNtYWxsY2FwcyMxfX0gICAgICAgJSBzbWFsbGNhcHMgZm9udAorXGRlZlxpaSMxe3tcaXQgIzF9fSAgICAgICAgICAgICAlIGl0YWxpYyBmb250CisKKyUgQGFjcm9ueW0gZm9yICJGQkkiLCAiTkFUTyIsIGFuZCB0aGUgbGlrZS4KKyUgV2UgcHJpbnQgdGhpcyBvbmUgcG9pbnQgc2l6ZSBzbWFsbGVyLCBzaW5jZSBpdCdzIGludGVuZGVkIGZvcgorJSBhbGwtdXBwZXJjYXNlLgorJSAKK1xkZWZcYWNyb255bSMxe1xkb2Fjcm9ueW0gIzEsLFxmaW5pc2h9CitcZGVmXGRvYWNyb255bSMxLCMyLCMzXGZpbmlzaHslCisgIHtcc2VsZWN0Zm9udHNcbHNpemUgIzF9JQorICBcZGVmXHRlbXB7IzJ9JQorICBcaWZ4XHRlbXBcZW1wdHkgXGVsc2UKKyAgICBcc3BhY2UgKHtcdW5zZXBzcGFjZXMgXGlnbm9yZXNwYWNlcyBcdGVtcCBcdW5za2lwfSklCisgIFxmaQorfQorCislIEBhYmJyIGZvciAiQ29tcHV0LiBKLiIgYW5kIHRoZSBsaWtlLgorJSBObyBmb250IGNoYW5nZSwgYnV0IGRvbid0IGRvIGVuZC1vZi1zZW50ZW5jZSBzcGFjaW5nLgorJSAKK1xkZWZcYWJiciMxe1xkb2FiYnIgIzEsLFxmaW5pc2h9CitcZGVmXGRvYWJiciMxLCMyLCMzXGZpbmlzaHslCisgIHtccGxhaW5mcmVuY2hzcGFjaW5nICMxfSUKKyAgXGRlZlx0ZW1weyMyfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAgXHNwYWNlICh7XHVuc2Vwc3BhY2VzIFxpZ25vcmVzcGFjZXMgXHRlbXAgXHVuc2tpcH0pJQorICBcZmkKK30KKworJSBAcG91bmRze30gaXMgYSBzdGVybGluZyBzaWduLCB3aGljaCBLbnV0aCBwdXQgaW4gdGhlIENNIGl0YWxpYyBmb250LgorJQorXGRlZlxwb3VuZHN7e1xpdFwkfX0KKworJSBAZXVyb3t9IGNvbWVzIGZyb20gYSBzZXBhcmF0ZSBmb250LCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3R5bGUuCislIFdlIHVzZSB0aGUgZnJlZSBmZXltKiBmb250cyBmcm9tIHRoZSBldXJvc3ltIHBhY2thZ2UgYnkgSGVucmlrCislIFRoZWlsaW5nLCB3aGljaCBzdXBwb3J0IHJlZ3VsYXIsIHNsYW50ZWQsIGJvbGQgYW5kIGJvbGQgc2xhbnRlZCAoYW5kCislICJvdXRsaW5lZCIgKGJsYWNrYm9hcmQgYm9hcmQsIHNvcnQgb2YpIHZlcnNpb25zLCB3aGljaCB3ZSBkb24ndCBuZWVkKS4KKyUgSXQgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5jdGFuLm9yZy90ZXgtYXJjaGl2ZS9mb250cy9ldXJvc3ltLgorJSAKKyUgQWx0aG91Z2ggb25seSByZWd1bGFyIGlzIHRoZSB0cnVseSBvZmZpY2lhbCBFdXJvIHN5bWJvbCwgd2UgaWdub3JlCislIHRoYXQuICBUaGUgRXVybyBpcyBkZXNpZ25lZCB0byBiZSBzbGlnaHRseSB0YWxsZXIgdGhhbiB0aGUgcmVndWxhcgorJSBmb250IGhlaWdodC4KKyUgCislIGZleW1yIC0gcmVndWxhcgorJSBmZXltbyAtIHNsYW50ZWQKKyUgZmV5YnIgLSBib2xkCislIGZleWJvIC0gYm9sZCBzbGFudGVkCislIAorJSBUaGVyZSBpcyBubyBnb29kIChmcmVlKSB0eXBld3JpdGVyIHZlcnNpb24sIHRvIG15IGtub3dsZWRnZS4KKyUgQSBmZXltcjEwIGV1cm8gaXMgfjcuM3B0IHdpZGUsIHdoaWxlIGEgbm9ybWFsIGNtdHQxMCBjaGFyIGlzIH41LjI1cHQgd2lkZS4KKyUgSG1tLgorJSAKKyUgQWxzbyBkb2Vzbid0IHdvcmsgaW4gbWF0aC4gIERvIHdlIG5lZWQgdG8gZG8gbWF0aCB3aXRoIGV1cm8gc3ltYm9scz8KKyUgSG9wZSBub3QuCislIAorJSAKK1xkZWZcZXVyb3t7XGV1cm9mb250IGV9fQorXGRlZlxldXJvZm9udHslCisgICUgV2Ugc2V0IHRoZSBmb250IGF0IGVhY2ggY29tbWFuZCwgcmF0aGVyIHRoYW4gcHJlZGVmaW5pbmcgaXQgaW4KKyAgJSBcdGV4dGZvbnRzIGFuZCB0aGUgb3RoZXIgZm9udC1zd2l0Y2hpbmcgY29tbWFuZHMsIHNvIHRoYXQKKyAgJSBpbnN0YWxsYXRpb25zIHdoaWNoIG5ldmVyIG5lZWQgdGhlIHN5bWJvbCBkb24ndCBoYXZlIHRvIGhhdmUgdGhlCisgICUgZm9udCBpbnN0YWxsZWQuCisgICUgCisgICUgVGhlcmUgaXMgb25seSBvbmUgZGVzaWduZWQgc2l6ZSAobm9taW5hbCAxMHB0KSwgc28gd2UgYWx3YXlzIHNjYWxlCisgICUgdGhhdCB0byB0aGUgY3VycmVudCBub21pbmFsIHNpemUuCisgICUgCisgICUgQnkgdGhlIHdheSwgc2ltcGx5IHVzaW5nICJhdCAxZW0iIHdvcmtzIGZvciBjbXIxMCBhbmQgdGhlIGxpa2UsIGJ1dAorICAlIGRvZXMgbm90IHdvcmsgZm9yIGNtYngxMCBhbmQgb3RoZXIgZXh0ZW5kZWQvc2hydW5rZW4gZm9udHMuCisgICUgCisgIFxkZWZcZXVyb3NpemV7XGNzbmFtZVxjdXJmb250c2l6ZSBub21pbmFsc2l6ZVxlbmRjc25hbWV9JQorICAlCisgIFxpZnhcY3VyZm9udHN0eWxlXGJmc3R5bGVuYW1lIAorICAgICUgYm9sZDoKKyAgICBcZm9udFx0aGlzZXVyb2ZvbnQgPSBcaWZ1c2luZ2l0e2ZleWJvMTB9e2ZleWJyMTB9IGF0IFxldXJvc2l6ZQorICBcZWxzZSAKKyAgICAlIHJlZ3VsYXI6CisgICAgXGZvbnRcdGhpc2V1cm9mb250ID0gXGlmdXNpbmdpdHtmZXltbzEwfXtmZXltcjEwfSBhdCBcZXVyb3NpemUKKyAgXGZpCisgIFx0aGlzZXVyb2ZvbnQKK30KKworJSBAcmVnaXN0ZXJlZHN5bWJvbCAtIFIgaW4gYSBjaXJjbGUuICBUaGUgZm9udCBmb3IgdGhlIFIgc2hvdWxkIHJlYWxseQorJSBiZSBzbWFsbGVyIHlldCwgYnV0IGxsbHNpemUgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCislIEFkYXB0ZWQgZnJvbSB0aGUgcGxhaW4udGV4IGRlZmluaXRpb24gb2YgXGNvcHlyaWdodC4KKyUKK1xkZWZccmVnaXN0ZXJlZHN5bWJvbHslCisgICRee3tcb29hbGlnbntcaGZpbFxyYWlzZS4wN2V4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgUn0lCisgICAgICAgICAgICAgICBcaGZpbFxjcmNyXE9yYn19JQorICAgIH0kJQorfQorCislIExhdXJlbnQgU2llYmVubWFubiByZXBvcnRzIFxPcmIgdW5kZWZpbmVkIHdpdGg6CislICBUZXh0dXJlcyAxLjcuNyAocHJlbG9hZGVkIGZvcm1hdD1wbGFpbiA5My4xMC4xNCkgICg2OEspICAxNiBBUFIgMjAwNCAwMjozOAorJSBzbyB3ZSdsbCBkZWZpbmUgaXQgaWYgbmVjZXNzYXJ5LgorJSAKK1xpZnhcT3JiXHVuZGVmaW5lZAorXGRlZlxPcmJ7XG1hdGhoZXhib3gyMER9CitcZmkKKworCitcbWVzc2FnZXtwYWdlIGhlYWRpbmdzLH0KKworXG5ld3NraXBcdGl0bGVwYWdldG9wZ2x1ZSBcdGl0bGVwYWdldG9wZ2x1ZSA9IDEuNWluCitcbmV3c2tpcFx0aXRsZXBhZ2Vib3R0b21nbHVlIFx0aXRsZXBhZ2Vib3R0b21nbHVlID0gMnBjCisKKyUgRmlyc3QgdGhlIHRpdGxlIHBhZ2UuICBNdXN0IGRvIEBzZXR0aXRsZSBiZWZvcmUgQHRpdGxlcGFnZS4KK1xuZXdpZlxpZnNlZW5hdXRob3IKK1xuZXdpZlxpZmZpbmlzaGVkdGl0bGVwYWdlCisKKyUgRG8gYW4gaW1wbGljaXQgQGNvbnRlbnRzIG9yIEBzaG9ydGNvbnRlbnRzIGFmdGVyIEBlbmQgdGl0bGVwYWdlIGlmIHRoZQorJSB1c2VyIHNheXMgQHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2Ugb3IgQHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZS4KKyUKK1xuZXdpZlxpZnNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyBcbGV0XHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UgPSBcc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZXRydWUKK1xuZXdpZlxpZnNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorIFxsZXRcc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlID0gXHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZXRydWUKKworXHBhcnNlYXJnZGVmXHNob3J0dGl0bGVwYWdle1xiZWdpbmdyb3VwXGhib3h7fVx2c2tpcCAxLjVpbiBcY2hhcHJtIFxjZW50ZXJsaW5leyMxfSUKKyAgICAgICAgXGVuZGdyb3VwXHBhZ2VcaGJveHt9XHBhZ2V9CisKK1xlbnZkZWZcdGl0bGVwYWdleyUKKyAgJSBPcGVuIG9uZSBleHRyYSBncm91cCwgYXMgd2Ugd2FudCB0byBjbG9zZSBpdCBpbiB0aGUgbWlkZGxlIG9mIFxFdGl0bGVwYWdlLgorICBcYmVnaW5ncm91cAorICAgIFxwYXJpbmRlbnQ9MHB0IFx0ZXh0Zm9udHMKKyAgICAlIExlYXZlIHNvbWUgc3BhY2UgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBwYWdlLgorICAgIFx2Z2x1ZVx0aXRsZXBhZ2V0b3BnbHVlCisgICAgJSBObyBydWxlIGF0IHBhZ2UgYm90dG9tIHVubGVzcyB3ZSBwcmludCBvbmUgYXQgdGhlIHRvcCB3aXRoIEB0aXRsZS4KKyAgICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCisgICAgJQorICAgICUgTW9zdCB0aXRsZSBgYHBhZ2VzJycgYXJlIGFjdHVhbGx5IHR3byBwYWdlcyBsb25nLCB3aXRoIHNwYWNlCisgICAgJSBhdCB0aGUgdG9wIG9mIHRoZSBzZWNvbmQuICBXZSBkb24ndCB3YW50IHRoZSByYWdnZWQgbGVmdCBvbiB0aGUgc2Vjb25kLgorICAgIFxsZXRcb2xkcGFnZSA9IFxwYWdlCisgICAgXGRlZlxwYWdleyUKKyAgICAgIFxpZmZpbmlzaGVkdGl0bGVwYWdlXGVsc2UKKwkgXGZpbmlzaHRpdGxlcGFnZQorICAgICAgXGZpCisgICAgICBcbGV0XHBhZ2UgPSBcb2xkcGFnZQorICAgICAgXHBhZ2UKKyAgICAgIFxudWxsCisgICAgfSUKK30KKworXGRlZlxFdGl0bGVwYWdleyUKKyAgICBcaWZmaW5pc2hlZHRpdGxlcGFnZVxlbHNlCisJXGZpbmlzaHRpdGxlcGFnZQorICAgIFxmaQorICAgICUgSXQgaXMgaW1wb3J0YW50IHRvIGRvIHRoZSBwYWdlIGJyZWFrIGJlZm9yZSBlbmRpbmcgdGhlIGdyb3VwLAorICAgICUgYmVjYXVzZSB0aGUgaGVhZGxpbmUgYW5kIGZvb3RsaW5lIGFyZSBvbmx5IGVtcHR5IGluc2lkZSB0aGUgZ3JvdXAuCisgICAgJSBJZiB3ZSB1c2UgdGhlIG5ldyBkZWZpbml0aW9uIG9mIFxwYWdlLCB3ZSBhbHdheXMgZ2V0IGEgYmxhbmsgcGFnZQorICAgICUgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2UsIHdoaWNoIHdlIGNlcnRhaW5seSBkb24ndCB3YW50LgorICAgIFxvbGRwYWdlCisgIFxlbmRncm91cAorICAlCisgICUgTmVlZCB0aGlzIGJlZm9yZSB0aGUgXC4uLmFmdGVydGl0bGVwYWdlIGNoZWNrcyBzbyB0aGF0IGlmIHRoZXkgYXJlCisgICUgaW4gZWZmZWN0IHRoZSB0b2MgcGFnZXMgd2lsbCBjb21lIG91dCB3aXRoIHBhZ2UgbnVtYmVycy4KKyAgXEhFQURJTkdTb24KKyAgJQorICAlIElmIHRoZXkgd2FudCBzaG9ydCwgdGhleSBjZXJ0YWlubHkgd2FudCBsb25nIHRvby4KKyAgXGlmc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgICAgXHNob3J0Y29udGVudHMKKyAgICBcY29udGVudHMKKyAgICBcZ2xvYmFsXGxldFxzaG9ydGNvbnRlbnRzID0gXHJlbGF4CisgICAgXGdsb2JhbFxsZXRcY29udGVudHMgPSBccmVsYXgKKyAgXGZpCisgICUKKyAgXGlmc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorICAgIFxjb250ZW50cworICAgIFxnbG9iYWxcbGV0XGNvbnRlbnRzID0gXHJlbGF4CisgICAgXGdsb2JhbFxsZXRcc2hvcnRjb250ZW50cyA9IFxyZWxheAorICBcZmkKK30KKworXGRlZlxmaW5pc2h0aXRsZXBhZ2V7JQorICBcdnNraXA0cHQgXGhydWxlIGhlaWdodCAycHQgd2lkdGggXGhzaXplCisgIFx2c2tpcFx0aXRsZXBhZ2Vib3R0b21nbHVlCisgIFxmaW5pc2hlZHRpdGxlcGFnZXRydWUKK30KKworJSUlIE1hY3JvcyB0byBiZSB1c2VkIHdpdGhpbiBAdGl0bGVwYWdlOgorCitcbGV0XHN1YnRpdGxlcm09XHRlbnJtCitcZGVmXHN1YnRpdGxlZm9udHtcc3VidGl0bGVybSBcbm9ybWFsYmFzZWxpbmVza2lwID0gMTNwdCBcbm9ybWFsYmFzZWxpbmVzfQorCitcZGVmXGF1dGhvcmZvbnR7XGF1dGhvcnJtIFxub3JtYWxiYXNlbGluZXNraXAgPSAxNnB0IFxub3JtYWxiYXNlbGluZXMKKwkJXGxldFx0dD1cYXV0aG9ydHR9CisKK1xwYXJzZWFyZ2RlZlx0aXRsZXslCisgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAgXGxlZnRsaW5le1x0aXRsZWZvbnRzXHJtICMxfQorICAlIHByaW50IGEgcnVsZSBhdCB0aGUgcGFnZSBib3R0b20gYWxzby4KKyAgXGZpbmlzaGVkdGl0bGVwYWdlZmFsc2UKKyAgXHZza2lwNHB0IFxocnVsZSBoZWlnaHQgNHB0IHdpZHRoIFxoc2l6ZSBcdnNraXA0cHQKK30KKworXHBhcnNlYXJnZGVmXHN1YnRpdGxleyUKKyAgXGNoZWNrZW52XHRpdGxlcGFnZQorICB7XHN1YnRpdGxlZm9udCBccmlnaHRsaW5leyMxfX0lCit9CisKKyUgQGF1dGhvciBzaG91bGQgY29tZSBsYXN0LCBidXQgbWF5IGNvbWUgbWFueSB0aW1lcy4KKyUgSXQgY2FuIGFsc28gYmUgdXNlZCBpbnNpZGUgQHF1b3RhdGlvbi4KKyUKK1xwYXJzZWFyZ2RlZlxhdXRob3J7JQorICBcZGVmXHRlbXB7XHF1b3RhdGlvbn0lCisgIFxpZnhcdGhpc2Vudlx0ZW1wCisgICAgXGRlZlxxdW90YXRpb25hdXRob3J7IzF9JSBwcmludGVkIGluIFxFcXVvdGF0aW9uLgorICBcZWxzZQorICAgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAgICBcaWZzZWVuYXV0aG9yXGVsc2UgXHZza2lwIDBwdCBwbHVzIDFmaWxsbCBcc2VlbmF1dGhvcnRydWUgXGZpCisgICAge1xhdXRob3Jmb250IFxsZWZ0bGluZXsjMX19JQorICBcZmkKK30KKworCislJSUgU2V0IHVwIHBhZ2UgaGVhZGluZ3MgYW5kIGZvb3RpbmdzLgorCitcbGV0XHRoaXNwYWdlPVxmb2xpbworCitcbmV3dG9rc1xldmVuaGVhZGxpbmUgICAgJSBoZWFkbGluZSBvbiBldmVuIHBhZ2VzCitcbmV3dG9rc1xvZGRoZWFkbGluZSAgICAgJSBoZWFkbGluZSBvbiBvZGQgcGFnZXMKK1xuZXd0b2tzXGV2ZW5mb290bGluZSAgICAlIGZvb3RsaW5lIG9uIGV2ZW4gcGFnZXMKK1xuZXd0b2tzXG9kZGZvb3RsaW5lICAgICAlIGZvb3RsaW5lIG9uIG9kZCBwYWdlcworCislIE5vdyBtYWtlIFRlWCB1c2UgdGhvc2UgdmFyaWFibGVzCitcaGVhZGxpbmU9e3tcdGV4dGZvbnRzXHJtIFxpZm9kZFxwYWdlbm8gXHRoZVxvZGRoZWFkbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbHNlIFx0aGVcZXZlbmhlYWRsaW5lIFxmaX19CitcZm9vdGxpbmU9e3tcdGV4dGZvbnRzXHJtIFxpZm9kZFxwYWdlbm8gXHRoZVxvZGRmb290bGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbHNlIFx0aGVcZXZlbmZvb3RsaW5lIFxmaX1cSEVBRElOR1Nob29rfQorXGxldFxIRUFESU5HU2hvb2s9XHJlbGF4CisKKyUgQ29tbWFuZHMgdG8gc2V0IHRob3NlIHZhcmlhYmxlcy4KKyUgRm9yIGV4YW1wbGUsIHRoaXMgaXMgd2hhdCAgQGhlYWRpbmdzIG9uICBkb2VzCislIEBldmVuaGVhZGluZyBAdGhpc3RpdGxlfEB0aGlzcGFnZXxAdGhpc2NoYXB0ZXIKKyUgQG9kZGhlYWRpbmcgQHRoaXNjaGFwdGVyfEB0aGlzcGFnZXxAdGhpc3RpdGxlCislIEBldmVuZm9vdGluZyBAdGhpc2ZpbGV8fAorJSBAb2RkZm9vdGluZyB8fEB0aGlzZmlsZQorCisKK1xkZWZcZXZlbmhlYWRpbmd7XHBhcnNlYXJnXGV2ZW5oZWFkaW5neHh4fQorXGRlZlxldmVuaGVhZGluZ3h4eCAjMXtcZXZlbmhlYWRpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXGV2ZW5oZWFkaW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZGVmXG9kZGhlYWRpbmd7XHBhcnNlYXJnXG9kZGhlYWRpbmd4eHh9CitcZGVmXG9kZGhlYWRpbmd4eHggIzF7XG9kZGhlYWRpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXG9kZGhlYWRpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fX0KKworXHBhcnNlYXJnZGVmXGV2ZXJ5aGVhZGluZ3tcb2RkaGVhZGluZ3h4eHsjMX1cZXZlbmhlYWRpbmd4eHh7IzF9fSUKKworXGRlZlxldmVuZm9vdGluZ3tccGFyc2VhcmdcZXZlbmZvb3Rpbmd4eHh9CitcZGVmXGV2ZW5mb290aW5neHh4ICMxe1xldmVuZm9vdGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcZXZlbmZvb3Rpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xkZWZcb2RkZm9vdGluZ3tccGFyc2Vhcmdcb2RkZm9vdGluZ3h4eH0KK1xkZWZcb2RkZm9vdGluZ3h4eCAjMXtcb2RkZm9vdGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcb2RkZm9vdGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorICBcZ2xvYmFsXG9kZGZvb3RsaW5lID0ge1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fSUKKyAgJQorICAlIExlYXZlIHNvbWUgc3BhY2UgZm9yIHRoZSBmb290bGluZS4gIEhvcGVmdWxseSBvayB0byBhc3N1bWUKKyAgJSBAZXZlbmZvb3Rpbmcgd2lsbCBub3QgYmUgdXNlZCBieSBpdHNlbGYuCisgIFxnbG9iYWxcYWR2YW5jZVxwYWdlaGVpZ2h0IGJ5IC1cYmFzZWxpbmVza2lwCisgIFxnbG9iYWxcYWR2YW5jZVx2c2l6ZSBieSAtXGJhc2VsaW5lc2tpcAorfQorCitccGFyc2VhcmdkZWZcZXZlcnlmb290aW5ne1xvZGRmb290aW5neHh4eyMxfVxldmVuZm9vdGluZ3h4eHsjMX19CisKKworJSBAaGVhZGluZ3MgZG91YmxlICAgICAgdHVybnMgaGVhZGluZ3Mgb24gZm9yIGRvdWJsZS1zaWRlZCBwcmludGluZy4KKyUgQGhlYWRpbmdzIHNpbmdsZSAgICAgIHR1cm5zIGhlYWRpbmdzIG9uIGZvciBzaW5nbGUtc2lkZWQgcHJpbnRpbmcuCislIEBoZWFkaW5ncyBvZmYgICAgICAgICB0dXJucyB0aGVtIG9mZi4KKyUgQGhlYWRpbmdzIG9uICAgICAgICAgIHNhbWUgYXMgQGhlYWRpbmdzIGRvdWJsZSwgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkuCislIEBoZWFkaW5ncyBhZnRlciAgICAgICB0dXJucyBvbiBkb3VibGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBAaGVhZGluZ3MgZG91YmxlYWZ0ZXIgdHVybnMgb24gZG91YmxlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQGhlYWRpbmdzIHNpbmdsZWFmdGVyIHR1cm5zIG9uIHNpbmdsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEJ5IGRlZmF1bHQsIHRoZXkgYXJlIG9mZiBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudCwKKyUgYW5kIHR1cm5lZCBgb24nIGFmdGVyIEBlbmQgdGl0bGVwYWdlLgorCitcZGVmXGhlYWRpbmdzICMxIHtcY3NuYW1lIEhFQURJTkdTIzFcZW5kY3NuYW1lfQorCitcZGVmXEhFQURJTkdTb2ZmeyUKK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcaGZpbH0gXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGhmaWx9IFxnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfX0KK1xIRUFESU5HU29mZgorJSBXaGVuIHdlIHR1cm4gaGVhZGluZ3Mgb24sIHNldCB0aGUgcGFnZSBudW1iZXIgdG8gMS4KKyUgRm9yIGRvdWJsZS1zaWRlZCBwcmludGluZywgcHV0IGN1cnJlbnQgZmlsZSBuYW1lIGluIGxvd2VyIGxlZnQgY29ybmVyLAorJSBjaGFwdGVyIG5hbWUgb24gaW5zaWRlIHRvcCBvZiByaWdodCBoYW5kIHBhZ2VzLCBkb2N1bWVudAorJSB0aXRsZSBvbiBpbnNpZGUgdG9wIG9mIGxlZnQgaGFuZCBwYWdlcywgYW5kIHBhZ2UgbnVtYmVycyBvbiBvdXRzaWRlIHRvcAorJSBlZGdlIG9mIGFsbCBwYWdlcy4KK1xkZWZcSEVBRElOR1Nkb3VibGV7JQorXGdsb2JhbFxwYWdlbm89MQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XGZvbGlvXGhmaWxcdGhpc3RpdGxlfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorfQorXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCisKKyUgRm9yIHNpbmdsZS1zaWRlZCBwcmludGluZywgY2hhcHRlciB0aXRsZSBnb2VzIGFjcm9zcyB0b3AgbGVmdCBvZiBwYWdlLAorJSBwYWdlIG51bWJlciBvbiB0b3AgcmlnaHQuCitcZGVmXEhFQURJTkdTc2luZ2xleyUKK1xnbG9iYWxccGFnZW5vPTEKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK30KK1xkZWZcSEVBRElOR1NvbntcSEVBRElOR1Nkb3VibGV9CisKK1xkZWZcSEVBRElOR1NhZnRlcntcbGV0XEhFQURJTkdTaG9vaz1cSEVBRElOR1Nkb3VibGV4fQorXGxldFxIRUFESU5HU2RvdWJsZWFmdGVyPVxIRUFESU5HU2FmdGVyCitcZGVmXEhFQURJTkdTZG91YmxleHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcZm9saW9caGZpbFx0aGlzdGl0bGV9fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCit9CisKK1xkZWZcSEVBRElOR1NzaW5nbGVhZnRlcntcbGV0XEhFQURJTkdTaG9vaz1cSEVBRElOR1NzaW5nbGV4fQorXGRlZlxIRUFESU5HU3NpbmdsZXh7JQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorfQorCislIFN1YnJvdXRpbmVzIHVzZWQgaW4gZ2VuZXJhdGluZyBoZWFkaW5ncworJSBUaGlzIHByb2R1Y2VzIERheSBNb250aCBZZWFyIHN0eWxlIG9mIG91dHB1dC4KKyUgT25seSBkZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZCwgaW4gY2FzZSBhIHR4aS0/Py50ZXggZmlsZSBoYXMgc2V0CislIHVwIGEgZGlmZmVyZW50IGZvcm1hdCAoZS5nLiwgdHhpLWNzLnRleCBkb2VzIHRoaXMpLgorXGlmeFx0b2RheVx1bmRlZmluZWQKK1xkZWZcdG9kYXl7JQorICBcbnVtYmVyXGRheVxzcGFjZQorICBcaWZjYXNlXG1vbnRoCisgIFxvclxwdXR3b3JkTUphblxvclxwdXR3b3JkTUZlYlxvclxwdXR3b3JkTU1hclxvclxwdXR3b3JkTUFwcgorICBcb3JccHV0d29yZE1NYXlcb3JccHV0d29yZE1KdW5cb3JccHV0d29yZE1KdWxcb3JccHV0d29yZE1BdWcKKyAgXG9yXHB1dHdvcmRNU2VwXG9yXHB1dHdvcmRNT2N0XG9yXHB1dHdvcmRNTm92XG9yXHB1dHdvcmRNRGVjCisgIFxmaQorICBcc3BhY2VcbnVtYmVyXHllYXJ9CitcZmkKKworJSBAc2V0dGl0bGUgbGluZS4uLiAgc3BlY2lmaWVzIHRoZSB0aXRsZSBvZiB0aGUgZG9jdW1lbnQsIGZvciBoZWFkaW5ncy4KKyUgSXQgZ2VuZXJhdGVzIG5vIG91dHB1dCBvZiBpdHMgb3duLgorXGRlZlx0aGlzdGl0bGV7XHB1dHdvcmROb1RpdGxlfQorXGRlZlxzZXR0aXRsZXtccGFyc2Vhcmd7XGdkZWZcdGhpc3RpdGxlfX0KKworCitcbWVzc2FnZXt0YWJsZXMsfQorJSBUYWJsZXMgLS0gQHRhYmxlLCBAZnRhYmxlLCBAdnRhYmxlLCBAaXRlbSh4KS4KKworJSBkZWZhdWx0IGluZGVudGF0aW9uIG9mIHRhYmxlIHRleHQKK1xuZXdkaW1lblx0YWJsZWluZGVudCBcdGFibGVpbmRlbnQ9LjhpbgorJSBkZWZhdWx0IGluZGVudGF0aW9uIG9mIEBpdGVtaXplIGFuZCBAZW51bWVyYXRlIHRleHQKK1xuZXdkaW1lblxpdGVtaW5kZW50ICBcaXRlbWluZGVudD0uM2luCislIG1hcmdpbiBiZXR3ZWVuIGVuZCBvZiB0YWJsZSBpdGVtIGFuZCBzdGFydCBvZiB0YWJsZSB0ZXh0LgorXG5ld2RpbWVuXGl0ZW1tYXJnaW4gIFxpdGVtbWFyZ2luPS4xaW4KKworJSB1c2VkIGludGVybmFsbHkgZm9yIFxpdGVtaW5kZW50IG1pbnVzIFxpdGVtbWFyZ2luCitcbmV3ZGltZW5caXRlbW1heAorCislIE5vdGUgQHRhYmxlLCBAZnRhYmxlLCBhbmQgQHZ0YWJsZSBkZWZpbmUgQGl0ZW0sIEBpdGVteCwgZXRjLiwgd2l0aAorJSB0aGVzZSBkZWZzLgorJSBUaGV5IGFsc28gZGVmaW5lIFxpdGVtaW5kZXgKKyUgdG8gaW5kZXggdGhlIGl0ZW0gbmFtZSBpbiB3aGF0ZXZlciBtYW5uZXIgaXMgZGVzaXJlZCAocGVyaGFwcyBub25lKS4KKworXG5ld2lmXGlmaXRlbXhuZWVkc25lZ2F0aXZldnNraXAKKworXGRlZlxpdGVteHBhcntccGFyXGlmaXRlbXhuZWVkc25lZ2F0aXZldnNraXBcbm9icmVha1x2c2tpcC1ccGFyc2tpcFxub2JyZWFrXGZpfQorCitcZGVmXGludGVybmFsQml0ZW17XHNtYWxsYnJlYWsgXHBhcnNlYXJnXGl0ZW16enp9CitcZGVmXGludGVybmFsQml0ZW14e1xpdGVteHBhciBccGFyc2VhcmdcaXRlbXp6en0KKworXGRlZlxpdGVtenp6ICMxe1xiZWdpbmdyb3VwICUKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVx0YWJsZWluZGVudAorICBcc2V0Ym94MD1caGJveHtcaXRlbWluZGljYXRleyMxfX0lCisgIFxpdGVtaW5kZXh7IzF9JQorICBcbm9icmVhayAlIFRoaXMgcHJldmVudHMgYSBicmVhayBiZWZvcmUgQGl0ZW14LgorICAlCisgICUgSWYgdGhlIGl0ZW0gdGV4dCBkb2VzIG5vdCBmaXQgaW4gdGhlIHNwYWNlIHdlIGhhdmUsIHB1dCBpdCBvbiBhIGxpbmUKKyAgJSBieSBpdHNlbGYsIGFuZCBkbyBub3QgYWxsb3cgYSBwYWdlIGJyZWFrIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhhdAorICAlIGxpbmUuICBXZSBkbyBub3Qgc3RhcnQgYSBwYXJhZ3JhcGggaGVyZSBiZWNhdXNlIHRoZW4gaWYgdGhlIG5leHQKKyAgJSBjb21tYW5kIGlzLCBlLmcuLCBAa2luZGV4LCB0aGUgd2hhdHNpdCB3b3VsZCBnZXQgcHV0IGludG8gdGhlCisgICUgaG9yaXpvbnRhbCBsaXN0IG9uIGEgbGluZSBieSBpdHNlbGYsIHJlc3VsdGluZyBpbiBleHRyYSBibGFuayBzcGFjZS4KKyAgXGlmZGltIFx3ZDA+XGl0ZW1tYXgKKyAgICAlCisgICAgJSBNYWtlIHRoaXMgYSBwYXJhZ3JhcGggc28gd2UgZ2V0IHRoZSBccGFyc2tpcCBnbHVlIGFuZCB3cmFwcGluZywKKyAgICAlIGJ1dCBsZWF2ZSBpdCByYWdnZWQtcmlnaHQuCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5LVx0YWJsZWluZGVudAorICAgICAgXGFkdmFuY2VcaHNpemUgYnlcdGFibGVpbmRlbnQKKyAgICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieTBwdCBwbHVzMWZpbAorICAgICAgXGxlYXZldm1vZGVcdW5oYm94MFxwYXIKKyAgICBcZW5kZ3JvdXAKKyAgICAlCisgICAgJSBXZSdyZSBnb2luZyB0byBiZSBzdGFydGluZyBhIHBhcmFncmFwaCwgYnV0IHdlIGRvbid0IHdhbnQgdGhlCisgICAgJSBccGFyc2tpcCBnbHVlIC0tIGxvZ2ljYWxseSBpdCdzIHBhcnQgb2YgdGhlIEBpdGVtIHdlIGp1c3Qgc3RhcnRlZC4KKyAgICBcbm9icmVhayBcdnNraXAtXHBhcnNraXAKKyAgICAlCisgICAgJSBTdG9wIGEgcGFnZSBicmVhayBhdCB0aGUgXHBhcnNraXAgZ2x1ZSBjb21pbmcgdXAuICBIb3dldmVyLCBpZgorICAgICUgd2hhdCBmb2xsb3dzIGlzIGFuIGVudmlyb25tZW50IHN1Y2ggYXMgQGV4YW1wbGUsIHRoZXJlIHdpbGwgYmUgbm8KKyAgICAlIFxwYXJza2lwIGdsdWU7IHRoZW4gdGhlIG5lZ2F0aXZlIHZza2lwIHdlIGp1c3QgaW5zZXJ0ZWQgd291bGQKKyAgICAlIGNhdXNlIHRoZSBleGFtcGxlIGFuZCB0aGUgaXRlbSB0byBjcmFzaCB0b2dldGhlci4gIFNvIHdlIHVzZSB0aGlzCisgICAgJSBiaXphcnJlIHZhbHVlIG9mIDEwMDAxIGFzIGEgc2lnbmFsIHRvIFxhYm92ZWVudmJyZWFrIHRvIGluc2VydAorICAgICUgXHBhcnNraXAgZ2x1ZSBhZnRlciBhbGwuICBTZWN0aW9uIHRpdGxlcyBhcmUgaGFuZGxlZCB0aGlzIHdheSBhbHNvLgorICAgICUgCisgICAgXHBlbmFsdHkgMTAwMDEKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXBmYWxzZQorICBcZWxzZQorICAgICUgVGhlIGl0ZW0gdGV4dCBmaXRzIGludG8gdGhlIHNwYWNlLiAgU3RhcnQgYSBwYXJhZ3JhcGgsIHNvIHRoYXQgdGhlCisgICAgJSBmb2xsb3dpbmcgdGV4dCAoaWYgYW55KSB3aWxsIGVuZCB1cCBvbiB0aGUgc2FtZSBsaW5lLgorICAgIFxub2luZGVudAorICAgICUgRG8gdGhpcyB3aXRoIGtlcm5zIGFuZCBcdW5oYm94IHNvIHRoYXQgaWYgdGhlcmUgaXMgYSBmb290bm90ZSBpbgorICAgICUgdGhlIGl0ZW0gdGV4dCwgaXQgY2FuIG1pZ3JhdGUgdG8gdGhlIG1haW4gdmVydGljYWwgbGlzdCBhbmQKKyAgICAlIGV2ZW50dWFsbHkgYmUgcHJpbnRlZC4KKyAgICBcbm9icmVha1xrZXJuLVx0YWJsZWluZGVudAorICAgIFxkaW1lbjAgPSBcaXRlbW1heCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxpdGVtbWFyZ2luIFxhZHZhbmNlXGRpbWVuMCBieSAtXHdkMAorICAgIFx1bmhib3gwCisgICAgXG5vYnJlYWtca2VyblxkaW1lbjAKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXB0cnVlCisgIFxmaQorfQorCitcZGVmXGl0ZW17XGVycm1lc3NhZ2V7QGl0ZW0gd2hpbGUgbm90IGluIGEgbGlzdCBlbnZpcm9ubWVudH19CitcZGVmXGl0ZW14e1xlcnJtZXNzYWdle0BpdGVteCB3aGlsZSBub3QgaW4gYSBsaXN0IGVudmlyb25tZW50fX0KKworJSBAdGFibGUsIEBmdGFibGUsIEB2dGFibGUuCitcZW52ZGVmXHRhYmxleyUKKyAgXGxldFxpdGVtaW5kZXhcZ29iYmxlCisgIFx0YWJsZWNoZWNre3RhYmxlfSUKK30KK1xlbnZkZWZcZnRhYmxleyUKKyAgXGRlZlxpdGVtaW5kZXggIyMxe1xkb2luZCB7Zm59e1xjb2RleyMjMX19fSUKKyAgXHRhYmxlY2hlY2t7ZnRhYmxlfSUKK30KK1xlbnZkZWZcdnRhYmxleyUKKyAgXGRlZlxpdGVtaW5kZXggIyMxe1xkb2luZCB7dnJ9e1xjb2RleyMjMX19fSUKKyAgXHRhYmxlY2hlY2t7dnRhYmxlfSUKK30KK1xkZWZcdGFibGVjaGVjayMxeyUKKyAgXGlmbnVtIFx0aGVcY2F0Y29kZWBcXl5NPVxhY3RpdmUKKyAgICBcZW5kZ3JvdXAKKyAgICBcZXJybWVzc2FnZXtUaGlzIGNvbW1hbmQgd29uJ3Qgd29yayBpbiB0aGlzIGNvbnRleHQ7IHBlcmhhcHMgdGhlIHByb2JsZW0gaXMKKyAgICAgIHRoYXQgd2UgYXJlIFxpbmVudmlyb25tZW50XHRoaXNlbnZ9JQorICAgIFxkZWZcbmV4dHtcZG9pZ25vcmV7IzF9fSUKKyAgXGVsc2UKKyAgICBcbGV0XG5leHRcdGFibGV4CisgIFxmaQorICBcbmV4dAorfQorXGRlZlx0YWJsZXgjMXslCisgIFxkZWZcaXRlbWluZGljYXRleyMxfSUKKyAgXHBhcnNlYXJnXHRhYmxleQorfQorXGRlZlx0YWJsZXkjMXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZWRlZlx0ZW1we1xub2V4cGFuZFx0YWJsZXogIzFcc3BhY2Vcc3BhY2Vcc3BhY2V9JQorICAgIFxleHBhbmRhZnRlcgorICB9XHRlbXAgXGVuZHRhYmxlegorfQorXGRlZlx0YWJsZXogIzEgIzIgIzMgIzRcZW5kdGFibGV6eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGlmbnVtIDAjMT4wIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSAjMVxtaWwgXGZpCisgIFxpZm51bSAwIzI+MCBcdGFibGVpbmRlbnQ9IzJcbWlsIFxmaQorICBcaWZudW0gMCMzPjAgXGFkdmFuY2UgXHJpZ2h0c2tpcCBieSAjM1xtaWwgXGZpCisgIFxpdGVtbWF4PVx0YWJsZWluZGVudAorICBcYWR2YW5jZSBcaXRlbW1heCBieSAtXGl0ZW1tYXJnaW4KKyAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5IFx0YWJsZWluZGVudAorICBcZXhkZW50YW1vdW50PVx0YWJsZWluZGVudAorICBccGFyaW5kZW50ID0gMHB0CisgIFxwYXJza2lwID0gXHNtYWxsc2tpcGFtb3VudAorICBcaWZkaW0gXHBhcnNraXA9MHB0IFxwYXJza2lwPTJwdCBcZmkKKyAgXGxldFxpdGVtID0gXGludGVybmFsQml0ZW0KKyAgXGxldFxpdGVteCA9IFxpbnRlcm5hbEJpdGVteAorfQorXGRlZlxFdGFibGV7XGVuZGdyYWZcYWZ0ZXJlbnZicmVha30KK1xsZXRcRWZ0YWJsZVxFdGFibGUKK1xsZXRcRXZ0YWJsZVxFdGFibGUKK1xsZXRcRWl0ZW1pemVcRXRhYmxlCitcbGV0XEVlbnVtZXJhdGVcRXRhYmxlCisKKyUgVGhpcyBpcyB0aGUgY291bnRlciB1c2VkIGJ5IEBlbnVtZXJhdGUsIHdoaWNoIGlzIHJlYWxseSBAaXRlbWl6ZQorCitcbmV3Y291bnQgXGl0ZW1ubworCitcZW52ZGVmXGl0ZW1pemV7XHBhcnNlYXJnXGRvaXRlbWl6ZX0KKworXGRlZlxkb2l0ZW1pemUjMXslCisgIFxhYm92ZWVudmJyZWFrCisgIFxpdGVtbWF4PVxpdGVtaW5kZW50CisgIFxhZHZhbmNlXGl0ZW1tYXggYnkgLVxpdGVtbWFyZ2luCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxpdGVtaW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGl0ZW1pbmRlbnQKKyAgXHBhcmluZGVudD0wcHQKKyAgXHBhcnNraXA9XHNtYWxsc2tpcGFtb3VudAorICBcaWZkaW1ccGFyc2tpcD0wcHQgXHBhcnNraXA9MnB0IFxmaQorICBcZGVmXGl0ZW1jb250ZW50c3sjMX0lCisgICUgQGl0ZW1pemUgd2l0aCBubyBhcmcgaXMgZXF1aXZhbGVudCB0byBAaXRlbWl6ZSBAYnVsbGV0LgorICBcaWZ4XGl0ZW1jb250ZW50c1xlbXB0eVxkZWZcaXRlbWNvbnRlbnRze1xidWxsZXR9XGZpCisgIFxsZXRcaXRlbT1caXRlbWl6ZWl0ZW0KK30KKworJSBEZWZpbml0aW9uIG9mIEBpdGVtIHdoaWxlIGluc2lkZSBAaXRlbWl6ZSBhbmQgQGVudW1lcmF0ZS4KKyUKK1xkZWZcaXRlbWl6ZWl0ZW17JQorICBcYWR2YW5jZVxpdGVtbm8gYnkgMSAgJSBmb3IgZW51bWVyYXRpb25zCisgIHtcbGV0XHBhcj1cZW5kZ3JhZiBcc21hbGxicmVha30lIHJlYXNvbmFibGUgcGxhY2UgdG8gYnJlYWsKKyAgeyUKKyAgICUgSWYgdGhlIGRvY3VtZW50IGhhcyBhbiBAaXRlbWl6ZSBkaXJlY3RseSBhZnRlciBhIHNlY3Rpb24gdGl0bGUsIGEKKyAgICUgXG5vYnJlYWsgd2lsbCBiZSBsYXN0IG9uIHRoZSBsaXN0LCBhbmQgXHNlY3Rpb25oZWFkaW5nIHdpbGwgaGF2ZQorICAgJSBkb25lIGEgXHZza2lwLVxwYXJza2lwLiAgSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHplcm8KKyAgICUgcGFyc2tpcCwgb3IgdGhlIGl0ZW0gdGV4dCB3aWxsIGNyYXNoIHdpdGggdGhlIGhlYWRpbmcuICBPbiB0aGUKKyAgICUgb3RoZXIgaGFuZCwgd2hlbiB0aGVyZSBpcyBub3JtYWwgdGV4dCBwcmVjZWRpbmcgdGhlIGl0ZW0gKGFzIHRoZXJlCisgICAlIHVzdWFsbHkgaXMpLCB3ZSBkbyB3YW50IHRvIHplcm8gcGFyc2tpcCwgb3IgdGhlcmUgd291bGQgYmUgdG9vIG11Y2gKKyAgICUgc3BhY2UuICBJbiB0aGF0IGNhc2UsIHdlIHdvbid0IGhhdmUgYSBcbm9icmVhayBiZWZvcmUuICBBdCBsZWFzdAorICAgJSB0aGF0J3MgdGhlIHRoZW9yeS4KKyAgIFxpZm51bVxsYXN0cGVuYWx0eTwxMDAwMCBccGFyc2tpcD0waW4gXGZpCisgICBcbm9pbmRlbnQKKyAgIFxoYm94IHRvIDBwdHtcaHNzIFxpdGVtY29udGVudHMgXGtlcm5caXRlbW1hcmdpbn0lCisgICBcdmFkanVzdHtccGVuYWx0eSAxMjAwfX0lIG5vdCBnb29kIHRvIGJyZWFrIGFmdGVyIGZpcnN0IGxpbmUgb2YgaXRlbS4KKyAgXGZsdXNoY3IKK30KKworJSBcc3BsaXRvZmYgVE9LRU5TXGVuZG1hcmsgZGVmaW5lcyBcZmlyc3QgdG8gYmUgdGhlIGZpcnN0IHRva2VuIGluCislIFRPS0VOUywgYW5kIFxyZXN0IHRvIGJlIHRoZSByZW1haW5kZXIuCislCitcZGVmXHNwbGl0b2ZmIzEjMlxlbmRtYXJre1xkZWZcZmlyc3R7IzF9XGRlZlxyZXN0eyMyfX0lCisKKyUgQWxsb3cgYW4gb3B0aW9uYWwgYXJndW1lbnQgb2YgYW4gdXBwZXJjYXNlIGxldHRlciwgbG93ZXJjYXNlIGxldHRlciwKKyUgb3IgbnVtYmVyLCB0byBzcGVjaWZ5IHRoZSBmaXJzdCBsYWJlbCBpbiB0aGUgZW51bWVyYXRlZCBsaXN0LiAgTm8KKyUgYXJndW1lbnQgaXMgdGhlIHNhbWUgYXMgYDEnLgorJQorXGVudnBhcnNlYXJnZGVmXGVudW1lcmF0ZXtcZW51bWVyYXRleSAjMSAgXGVuZGVudW1lcmF0ZXl9CitcZGVmXGVudW1lcmF0ZXkgIzEgIzJcZW5kZW51bWVyYXRleXslCisgICUgSWYgd2Ugd2VyZSBnaXZlbiBubyBhcmd1bWVudCwgcHJldGVuZCB3ZSB3ZXJlIGdpdmVuIGAxJy4KKyAgXGRlZlx0aGVhcmd7IzF9JQorICBcaWZ4XHRoZWFyZ1xlbXB0eSBcZGVmXHRoZWFyZ3sxfVxmaQorICAlCisgICUgRGV0ZWN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIHNpbmdsZSB0b2tlbi4gIElmIHNvLCBpdCBtaWdodCBiZSBhCisgICUgbGV0dGVyLiAgT3RoZXJ3aXNlLCB0aGUgb25seSB2YWxpZCB0aGluZyBpdCBjYW4gYmUgaXMgYSBudW1iZXIuCisgICUgKFdlIHdpbGwgYWx3YXlzIGhhdmUgb25lIHRva2VuLCBiZWNhdXNlIG9mIHRoZSB0ZXN0IHdlIGp1c3QgbWFkZS4KKyAgJSBUaGlzIGlzIGEgZ29vZCB0aGluZywgc2luY2UgXHNwbGl0b2ZmIGRvZXNuJ3Qgd29yayBnaXZlbiBub3RoaW5nIGF0CisgICUgYWxsIC0tIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdW5kZWxpbWl0ZWQuKQorICBcZXhwYW5kYWZ0ZXJcc3BsaXRvZmZcdGhlYXJnXGVuZG1hcmsKKyAgXGlmeFxyZXN0XGVtcHR5CisgICAgJSBPbmx5IG9uZSB0b2tlbiBpbiB0aGUgYXJndW1lbnQuICBJdCBjb3VsZCBzdGlsbCBiZSBhbnl0aGluZy4KKyAgICAlIEEgYGBsb3dlcmNhc2UgbGV0dGVyJycgaXMgb25lIHdob3NlIFxsY2NvZGUgaXMgbm9uemVyby4KKyAgICAlIEFuIGBgdXBwZXJjYXNlIGxldHRlcicnIGlzIG9uZSB3aG9zZSBcbGNjb2RlIGlzIGJvdGggbm9uemVybywgYW5kCisgICAgJSAgIG5vdCBlcXVhbCB0byBpdHNlbGYuCisgICAgJSBPdGhlcndpc2UsIHdlIGFzc3VtZSBpdCdzIGEgbnVtYmVyLgorICAgICUKKyAgICAlIFdlIG5lZWQgdGhlIFxyZWxheCBhdCB0aGUgZW5kIG9mIHRoZSBcaWZudW0gbGluZXMgdG8gc3RvcCBUZVggZnJvbQorICAgICUgY29udGludWluZyB0byBsb29rIGZvciBhIDxudW1iZXI+LgorICAgICUKKyAgICBcaWZudW1cbGNjb2RlXGV4cGFuZGFmdGVyYFx0aGVhcmc9MFxyZWxheAorICAgICAgXG51bWVyaWNlbnVtZXJhdGUgJSBhIG51bWJlciAod2UgaG9wZSkKKyAgICBcZWxzZQorICAgICAgJSBJdCdzIGEgbGV0dGVyLgorICAgICAgXGlmbnVtXGxjY29kZVxleHBhbmRhZnRlcmBcdGhlYXJnPVxleHBhbmRhZnRlcmBcdGhlYXJnXHJlbGF4CisgICAgICAgIFxsb3dlcmNhc2VlbnVtZXJhdGUgJSBsb3dlcmNhc2UgbGV0dGVyCisgICAgICBcZWxzZQorICAgICAgICBcdXBwZXJjYXNlZW51bWVyYXRlICUgdXBwZXJjYXNlIGxldHRlcgorICAgICAgXGZpCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBNdWx0aXBsZSB0b2tlbnMgaW4gdGhlIGFyZ3VtZW50LiAgV2UgaG9wZSBpdCdzIGEgbnVtYmVyLgorICAgIFxudW1lcmljZW51bWVyYXRlCisgIFxmaQorfQorCislIEFuIEBlbnVtZXJhdGUgd2hvc2UgbGFiZWxzIGFyZSBpbnRlZ2Vycy4gIFRoZSBzdGFydGluZyBpbnRlZ2VyIGlzCislIGdpdmVuIGluIFx0aGVhcmcuCislCitcZGVmXG51bWVyaWNlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXHRoZWFyZworICBcc3RhcnRlbnVtZXJhdGlvbntcdGhlXGl0ZW1ub30lCit9CisKKyUgVGhlIHN0YXJ0aW5nIChsb3dlcmNhc2UpIGxldHRlciBpcyBpbiBcdGhlYXJnLgorXGRlZlxsb3dlcmNhc2VlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXGV4cGFuZGFmdGVyYFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257JQorICAgICUgQmUgc3VyZSB3ZSdyZSBub3QgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFscGhhYmV0LgorICAgIFxpZm51bVxpdGVtbm89MAorICAgICAgXGVycm1lc3NhZ2V7Tm8gbW9yZSBsb3dlcmNhc2UgbGV0dGVycyBpbiBAZW51bWVyYXRlOyBnZXQgYSBiaWdnZXIKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0fSUKKyAgICBcZmkKKyAgICBcY2hhclxsY2NvZGVcaXRlbW5vCisgIH0lCit9CisKKyUgVGhlIHN0YXJ0aW5nICh1cHBlcmNhc2UpIGxldHRlciBpcyBpbiBcdGhlYXJnLgorXGRlZlx1cHBlcmNhc2VlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXGV4cGFuZGFmdGVyYFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257JQorICAgICUgQmUgc3VyZSB3ZSdyZSBub3QgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFscGhhYmV0LgorICAgIFxpZm51bVxpdGVtbm89MAorICAgICAgXGVycm1lc3NhZ2V7Tm8gbW9yZSB1cHBlcmNhc2UgbGV0dGVycyBpbiBAZW51bWVyYXRlOyBnZXQgYSBiaWdnZXIKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0fQorICAgIFxmaQorICAgIFxjaGFyXHVjY29kZVxpdGVtbm8KKyAgfSUKK30KKworJSBDYWxsIFxkb2l0ZW1pemUsIGFkZGluZyBhIHBlcmlvZCB0byB0aGUgZmlyc3QgYXJndW1lbnQgYW5kIHN1cHBseWluZyB0aGUKKyUgY29tbW9uIGxhc3QgdHdvIGFyZ3VtZW50cy4gIEFsc28gc3VidHJhY3Qgb25lIGZyb20gdGhlIGluaXRpYWwgdmFsdWUgaW4KKyUgXGl0ZW1ubywgc2luY2UgQGl0ZW0gaW5jcmVtZW50cyBcaXRlbW5vLgorJQorXGRlZlxzdGFydGVudW1lcmF0aW9uIzF7JQorICBcYWR2YW5jZVxpdGVtbm8gYnkgLTEKKyAgXGRvaXRlbWl6ZXsjMS59XGZsdXNoY3IKK30KKworJSBAYWxwaGFlbnVtZXJhdGUgYW5kIEBjYXBzZW51bWVyYXRlIGFyZSBhYmJyZXZpYXRpb25zIGZvciBnaXZpbmcgYW4gYXJnCislIHRvIEBlbnVtZXJhdGUuCislCitcZGVmXGFscGhhZW51bWVyYXRle1xlbnVtZXJhdGV7YX19CitcZGVmXGNhcHNlbnVtZXJhdGV7XGVudW1lcmF0ZXtBfX0KK1xkZWZcRWFscGhhZW51bWVyYXRle1xFZW51bWVyYXRlfQorXGRlZlxFY2Fwc2VudW1lcmF0ZXtcRWVudW1lcmF0ZX0KKworCislIEBtdWx0aXRhYmxlIG1hY3JvcworJSBBbXkgSGVuZHJpY2tzb24sIDgvMTgvOTQsIDMvNi85NgorJQorJSBAbXVsdGl0YWJsZSAuLi4gQGVuZCBtdWx0aXRhYmxlIHdpbGwgbWFrZSBhcyBtYW55IGNvbHVtbnMgYXMgZGVzaXJlZC4KKyUgQ29udGVudHMgb2YgZWFjaCBjb2x1bW4gd2lsbCB3cmFwIGF0IHdpZHRoIGdpdmVuIGluIHByZWFtYmxlLiAgV2lkdGgKKyUgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgd2l0aCBzYW1wbGUgdGV4dCBnaXZlbiBpbiBhIHRlbXBsYXRlIGxpbmUsCislIG9yIGluIHBlcmNlbnQgb2YgXGhzaXplLCB0aGUgY3VycmVudCB3aWR0aCBvZiB0ZXh0IG9uIHBhZ2UuCisKKyUgVGFibGUgY2FuIGNvbnRpbnVlIG92ZXIgcGFnZXMgYnV0IHdpbGwgb25seSBicmVhayBiZXR3ZWVuIGxpbmVzLgorCislIFRvIG1ha2UgcHJlYW1ibGU6CislCislIEVpdGhlciBkZWZpbmUgd2lkdGhzIG9mIGNvbHVtbnMgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemU6CislICAgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMjUgLjMgLjQ1CislICAgQGl0ZW0gLi4uCislCislICAgTnVtYmVycyBmb2xsb3dpbmcgQGNvbHVtbmZyYWN0aW9ucyBhcmUgdGhlIHBlcmNlbnQgb2YgdGhlIHRvdGFsCislICAgY3VycmVudCBoc2l6ZSB0byBiZSB1c2VkIGZvciBlYWNoIGNvbHVtbi4gWW91IG1heSB1c2UgYXMgbWFueQorJSAgIGNvbHVtbnMgYXMgZGVzaXJlZC4KKworCislIE9yIHVzZSBhIHRlbXBsYXRlOgorJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gLi4uCislICAgdXNpbmcgdGhlIHdpZGVzdCB0ZXJtIGRlc2lyZWQgaW4gZWFjaCBjb2x1bW4uCisKKyUgRWFjaCBuZXcgdGFibGUgbGluZSBzdGFydHMgd2l0aCBAaXRlbSwgZWFjaCBzdWJzZXF1ZW50IG5ldyBjb2x1bW4KKyUgc3RhcnRzIHdpdGggQHRhYi4gRW1wdHkgY29sdW1ucyBtYXkgYmUgcHJvZHVjZWQgYnkgc3VwcGx5aW5nIEB0YWIncworJSB3aXRoIG5vdGhpbmcgYmV0d2VlbiB0aGVtIGZvciBhcyBtYW55IHRpbWVzIGFzIGVtcHR5IGNvbHVtbnMgYXJlIG5lZWRlZCwKKyUgaWUsIEB0YWJAdGFiQHRhYiB3aWxsIHByb2R1Y2UgdHdvIGVtcHR5IGNvbHVtbnMuCisKKyUgQGl0ZW0sIEB0YWIgZG8gbm90IG5lZWQgdG8gYmUgb24gdGhlaXIgb3duIGxpbmVzLCBidXQgaXQgd2lsbCBub3QgaHVydAorJSBpZiB0aGV5IGFyZS4KKworJSBTYW1wbGUgbXVsdGl0YWJsZToKKworJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZiBAdGFiIHRoaXJkIGNvbAorJSAgIEBpdGVtCislICAgZmlyc3QgY29sIHN0dWZmCislICAgQHRhYgorJSAgIHNlY29uZCBjb2wgc3R1ZmYKKyUgICBAdGFiCislICAgdGhpcmQgY29sCislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZgorJSAgIEB0YWIgTWFueSBwYXJhZ3JhcGhzIG9mIHRleHQgbWF5IGJlIHVzZWQgaW4gYW55IGNvbHVtbi4KKyUKKyUgICAgICAgICBUaGV5IHdpbGwgd3JhcCBhdCB0aGUgd2lkdGggZGV0ZXJtaW5lZCBieSB0aGUgdGVtcGxhdGUuCislICAgQGl0ZW1AdGFiQHRhYiBUaGlzIHdpbGwgYmUgaW4gdGhpcmQgY29sdW1uLgorJSAgIEBlbmQgbXVsdGl0YWJsZQorCislIERlZmF1bHQgZGltZW5zaW9ucyBtYXkgYmUgcmVzZXQgYnkgdXNlci4KKyUgQG11bHRpdGFibGVwYXJza2lwIGlzIHZlcnRpY2FsIHNwYWNlIGJldHdlZW4gcGFyYWdyYXBocyBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVwYXJpbmRlbnQgaXMgcGFyYWdyYXBoIGluZGVudCBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVjb2xtYXJnaW4gaXMgaG9yaXpvbnRhbCBzcGFjZSB0byBiZSBsZWZ0IGJldHdlZW4gY29sdW1ucy4KKyUgQG11bHRpdGFibGVsaW5lc3BhY2UgaXMgc3BhY2UgdG8gbGVhdmUgYmV0d2VlbiB0YWJsZSBpdGVtcywgYmFzZWxpbmUKKyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiYXNlbGluZS4KKyUgICAwcHQgbWVhbnMgaXQgZGVwZW5kcyBvbiBjdXJyZW50IG5vcm1hbCBsaW5lIHNwYWNpbmcuCislCitcbmV3c2tpcFxtdWx0aXRhYmxlcGFyc2tpcAorXG5ld3NraXBcbXVsdGl0YWJsZXBhcmluZGVudAorXG5ld2RpbWVuXG11bHRpdGFibGVjb2xzcGFjZQorXG5ld3NraXBcbXVsdGl0YWJsZWxpbmVzcGFjZQorXG11bHRpdGFibGVwYXJza2lwPTBwdAorXG11bHRpdGFibGVwYXJpbmRlbnQ9NnB0CitcbXVsdGl0YWJsZWNvbHNwYWNlPTEycHQKK1xtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorCislIE1hY3JvcyB1c2VkIHRvIHNldCB1cCBoYWxpZ24gcHJlYW1ibGU6CislCitcbGV0XGVuZHNldHVwdGFibGVccmVsYXgKK1xkZWZceGVuZHNldHVwdGFibGV7XGVuZHNldHVwdGFibGV9CitcbGV0XGNvbHVtbmZyYWN0aW9uc1xyZWxheAorXGRlZlx4Y29sdW1uZnJhY3Rpb25ze1xjb2x1bW5mcmFjdGlvbnN9CitcbmV3aWZcaWZzZXRwZXJjZW50CisKKyUgIzEgaXMgdGhlIEBjb2x1bW5mcmFjdGlvbiwgdXN1YWxseSBhIGRlY2ltYWwgbnVtYmVyIGxpa2UgLjUsIGJ1dCBtaWdodAorJSBiZSBqdXN0IDEuICBXZSBqdXN0IHVzZSBpdCwgd2hhdGV2ZXIgaXQgaXMuCislCitcZGVmXHBpY2t1cHdob2xlZnJhY3Rpb24jMSB7JQorICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWV7IzFcaHNpemV9JQorICBcc2V0dXB0YWJsZQorfQorCitcbmV3Y291bnRcY29sY291bnQKK1xkZWZcc2V0dXB0YWJsZSMxeyUKKyAgXGRlZlxmaXJzdGFyZ3sjMX0lCisgIFxpZnhcZmlyc3RhcmdceGVuZHNldHVwdGFibGUKKyAgICBcbGV0XGdvID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGlmeFxmaXJzdGFyZ1x4Y29sdW1uZnJhY3Rpb25zCisgICAgICBcZ2xvYmFsXHNldHBlcmNlbnR0cnVlCisgICAgXGVsc2UKKyAgICAgIFxpZnNldHBlcmNlbnQKKyAgICAgICAgIFxsZXRcZ29ccGlja3Vwd2hvbGVmcmFjdGlvbgorICAgICAgXGVsc2UKKyAgICAgICAgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgICAgICAgICBcc2V0Ym94MD1caGJveHsjMVx1bnNraXBcc3BhY2V9JSBBZGQgYSBub3JtYWwgd29yZCBzcGFjZSBhcyBhCisgICAgICAgICAgICAgICAgICAgJSBzZXBhcmF0b3I7IHR5cGljYWxseSB0aGF0IGlzIGFsd2F5cyBpbiB0aGUgaW5wdXQsIGFueXdheS4KKyAgICAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZXtcdGhlXHdkMH0lCisgICAgICBcZmkKKyAgICBcZmkKKyAgICBcaWZ4XGdvXHBpY2t1cHdob2xlZnJhY3Rpb24KKyAgICAgICUgUHV0IHRoZSBhcmd1bWVudCBiYWNrIGZvciB0aGUgXHBpY2t1cHdob2xlZnJhY3Rpb24gY2FsbCwgc28KKyAgICAgICUgd2UnbGwgYWx3YXlzIGhhdmUgYSBwZXJpb2QgdGhlcmUgdG8gYmUgcGFyc2VkLgorICAgICAgXGRlZlxnb3tccGlja3Vwd2hvbGVmcmFjdGlvbiMxfSUKKyAgICBcZWxzZQorICAgICAgXGxldFxnbyA9IFxzZXR1cHRhYmxlCisgICAgXGZpJQorICBcZmkKKyAgXGdvCit9CisKKyUgbXVsdGl0YWJsZS1vbmx5IGNvbW1hbmRzLgorJQorJSBAaGVhZGl0ZW0gc3RhcnRzIGEgaGVhZGluZyByb3csIHdoaWNoIHdlIHR5cGVzZXQgaW4gYm9sZC4KKyUgQXNzaWdubWVudHMgaGF2ZSB0byBiZSBnbG9iYWwgc2luY2Ugd2UgYXJlIGluc2lkZSB0aGUgaW1wbGljaXQgZ3JvdXAKKyUgb2YgYW4gYWxpZ25tZW50IGVudHJ5LiAgTm90ZSB0aGF0IFxldmVyeWNyIHJlc2V0cyBcZXZlcnl0YWIuCitcZGVmXGhlYWRpdGVte1xjaGVja2VudlxtdWx0aXRhYmxlIFxjcmNyIFxnbG9iYWxcZXZlcnl0YWI9e1xiZn1cdGhlXGV2ZXJ5dGFifSUKKyUKKyUgQSBcdGFiIHVzZWQgdG8gaW5jbHVkZSBcaHNraXAxc3AuICBCdXQgdGhlbiB0aGUgc3BhY2UgaW4gYSB0ZW1wbGF0ZQorJSBsaW5lIGlzIG5vdCBlbm91Z2guICBUaGF0IGlzIGJhZC4gIFNvIGxldCdzIGdvIGJhY2sgdG8ganVzdCBgJicgdW50aWwKKyUgd2UgZW5jb3VudGVyIHRoZSBwcm9ibGVtIGl0IHdhcyBpbnRlbmRlZCB0byBzb2x2ZSBhZ2Fpbi4KKyUJCQkJCS0ta2FybCwgbmF0aGFuQGFjbS5vcmcsIDIwYXByOTkuCitcZGVmXHRhYntcY2hlY2tlbnZcbXVsdGl0YWJsZSAmXHRoZVxldmVyeXRhYn0lCisKKyUgQG11bHRpdGFibGUgLi4uIEBlbmQgbXVsdGl0YWJsZSBkZWZpbml0aW9uczoKKyUKK1xuZXd0b2tzXGV2ZXJ5dGFiICAlIGluc2VydCBhZnRlciBldmVyeSB0YWIuCislCitcZW52ZGVmXG11bHRpdGFibGV7JQorICBcdnNraXBccGFyc2tpcAorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgJSBAaXRlbSB3aXRoaW4gYSBtdWx0aXRhYmxlIHN0YXJ0cyBhIG5vcm1hbCByb3cuCisgICUgV2UgdXNlIFxkZWYgaW5zdGVhZCBvZiBcbGV0IHNvIHRoYXQgaWYgb25lIG9mIHRoZSBtdWx0aXRhYmxlIGVudHJpZXMKKyAgJSBjb250YWlucyBhbiBAaXRlbWl6ZSwgd2UgZG9uJ3QgY2hva2Ugb24gdGhlIFxpdGVtIChzZWVuIGFzIFxjcmNyIGFrYQorICAlIFxlbmR0ZW1wbGF0ZSkgZXhwYW5kaW5nIFxkb2l0ZW1pemUuCisgIFxkZWZcaXRlbXtcY3Jjcn0lCisgICUKKyAgXHRvbGVyYW5jZT05NTAwCisgIFxoYmFkbmVzcz05NTAwCisgIFxzZXRtdWx0aXRhYmxlc3BhY2luZworICBccGFyc2tpcD1cbXVsdGl0YWJsZXBhcnNraXAKKyAgXHBhcmluZGVudD1cbXVsdGl0YWJsZXBhcmluZGVudAorICBcb3ZlcmZ1bGxydWxlPTBwdAorICBcZ2xvYmFsXGNvbGNvdW50PTAKKyAgJQorICBcZXZlcnljciA9IHslCisgICAgXG5vYWxpZ257JQorICAgICAgXGdsb2JhbFxldmVyeXRhYj17fSUKKyAgICAgIFxnbG9iYWxcY29sY291bnQ9MCAlIFJlc2V0IHRoZSBjb2x1bW4gY291bnRlci4KKyAgICAgICUgQ2hlY2sgZm9yIHNhdmVkIGZvb3Rub3RlcywgZXRjLgorICAgICAgXGNoZWNraW5zZXJ0cworICAgICAgJSBLZWVwcyB1bmRlcmZ1bGwgYm94IG1lc3NhZ2VzIG9mZiB3aGVuIHRhYmxlIGJyZWFrcyBvdmVyIHBhZ2VzLgorICAgICAgJVxmaWxicmVhaworCSUgTWF5YmUgc28sIGJ1dCBpdCBhbHNvIGNyZWF0ZXMgcmVhbGx5IHdlaXJkIHBhZ2UgYnJlYWtzIHdoZW4gdGhlCisJJSB0YWJsZSBicmVha3Mgb3ZlciBwYWdlcy4gV291bGRuJ3QgXHZmaWwgYmUgYmV0dGVyPyAgV2FpdCB1bnRpbCB0aGUKKwklIHByb2JsZW0gbWFuaWZlc3RzIGl0c2VsZiwgc28gaXQgY2FuIGJlIGZpeGVkIGZvciByZWFsIC0ta2FybC4KKyAgICB9JQorICB9JQorICAlCisgIFxwYXJzZWFyZ1xkb211bHRpdGFibGUKK30KK1xkZWZcZG9tdWx0aXRhYmxlIzF7JQorICAlIFRvIHBhcnNlIGV2ZXJ5dGhpbmcgYmV0d2VlbiBAbXVsdGl0YWJsZSBhbmQgQGl0ZW06CisgIFxzZXR1cHRhYmxlIzEgXGVuZHNldHVwdGFibGUKKyAgJQorICAlIFRoaXMgcHJlYW1ibGUgc2V0cyB1cCBhIGdlbmVyaWMgY29sdW1uIGRlZmluaXRpb24sIHdoaWNoIHdpbGwKKyAgJSBiZSB1c2VkIGFzIG1hbnkgdGltZXMgYXMgdXNlciBjYWxscyBmb3IgY29sdW1ucy4KKyAgJSBcdnRvcCB3aWxsIHNldCBhIHNpbmdsZSBsaW5lIGFuZCB3aWxsIGFsc28gbGV0IHRleHQgd3JhcCBhbmQKKyAgJSBjb250aW51ZSBmb3IgbWFueSBwYXJhZ3JhcGhzIGlmIGRlc2lyZWQuCisgIFxoYWxpZ25cYmdyb3VwICYlCisgICAgXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDEKKyAgICBcbXVsdGlzdHJ1dAorICAgIFx2dG9weyUKKyAgICAgICUgVXNlIHRoZSBjdXJyZW50IFxjb2xjb3VudCB0byBmaW5kIHRoZSBjb3JyZWN0IGNvbHVtbiB3aWR0aDoKKyAgICAgIFxoc2l6ZT1cZXhwYW5kYWZ0ZXJcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1lCisgICAgICAlCisgICAgICAlIEluIG9yZGVyIHRvIGtlZXAgZW50cmllcyBmcm9tIGJ1bXBpbmcgaW50byBlYWNoIG90aGVyCisgICAgICAlIHdlIHdpbGwgYWRkIGEgXGxlZnRza2lwIG9mIFxtdWx0aXRhYmxlY29sc3BhY2UgdG8gYWxsIGNvbHVtbnMgYWZ0ZXIKKyAgICAgICUgdGhlIGZpcnN0IG9uZS4KKyAgICAgICUKKyAgICAgICUgSWYgYSB0ZW1wbGF0ZSBoYXMgYmVlbiB1c2VkLCB3ZSB3aWxsIGFkZCBcbXVsdGl0YWJsZWNvbHNwYWNlCisgICAgICAlIHRvIHRoZSB3aWR0aCBvZiBlYWNoIHRlbXBsYXRlIGVudHJ5LgorICAgICAgJQorICAgICAgJSBJZiB0aGUgdXNlciBoYXMgc2V0IHByZWFtYmxlIGluIHRlcm1zIG9mIHBlcmNlbnQgb2YgXGhzaXplIHdlIHdpbGwKKyAgICAgICUgdXNlIHRoYXQgZGltZW5zaW9uIGFzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uLCBhbmQgdGhlIFxsZWZ0c2tpcAorICAgICAgJSB3aWxsIGtlZXAgZW50cmllcyBmcm9tIGJ1bXBpbmcgaW50byBlYWNoIG90aGVyLiAgVGFibGUgd2lsbCBzdGFydCBhdAorICAgICAgJSBsZWZ0IG1hcmdpbiBhbmQgZmluYWwgY29sdW1uIHdpbGwganVzdGlmeSBhdCByaWdodCBtYXJnaW4uCisgICAgICAlCisgICAgICAlIE1ha2Ugc3VyZSB3ZSBkb24ndCBpbmhlcml0IFxyaWdodHNraXAgZnJvbSB0aGUgb3V0ZXIgZW52aXJvbm1lbnQuCisgICAgICBccmlnaHRza2lwPTBwdAorICAgICAgXGlmbnVtXGNvbGNvdW50PTEKKwklIFRoZSBmaXJzdCBjb2x1bW4gd2lsbCBiZSBpbmRlbnRlZCB3aXRoIHRoZSBzdXJyb3VuZGluZyB0ZXh0LgorCVxhZHZhbmNlXGhzaXplIGJ5XGxlZnRza2lwCisgICAgICBcZWxzZQorCVxpZnNldHBlcmNlbnQgXGVsc2UKKwkgICUgSWYgdXNlciBoYXMgbm90IHNldCBwcmVhbWJsZSBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZQorCSAgJSB3ZSB3aWxsIGFkdmFuY2UgXGhzaXplIGJ5IFxtdWx0aXRhYmxlY29sc3BhY2UuCisJICBcYWR2YW5jZVxoc2l6ZSBieSBcbXVsdGl0YWJsZWNvbHNwYWNlCisJXGZpCisgICAgICAgJSBJbiBlaXRoZXIgY2FzZSB3ZSB3aWxsIG1ha2UgXGxlZnRza2lwPVxtdWx0aXRhYmxlY29sc3BhY2U6CisgICAgICBcbGVmdHNraXA9XG11bHRpdGFibGVjb2xzcGFjZQorICAgICAgXGZpCisgICAgICAlIElnbm9yaW5nIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBhdm9pZHMgYW4gb2NjYXNpb25hbCBzcHVyaW91cworICAgICAgJSBibGFuayBsaW5lLCB3aGVuIFRlWCBkZWNpZGVzIHRvIGJyZWFrIHRoZSBsaW5lIGF0IHRoZSBzcGFjZSBiZWZvcmUgdGhlCisgICAgICAlIGJveCBmcm9tIHRoZSBtdWx0aXN0cnV0LCBzbyB0aGUgc3RydXQgZW5kcyB1cCBvbiBhIGxpbmUgYnkgaXRzZWxmLgorICAgICAgJSBGb3IgZXhhbXBsZToKKyAgICAgICUgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMTEgLjg5CisgICAgICAlIEBpdGVtIEBjb2RleyN9CisgICAgICAlIEB0YWIgTGVnYWwgaG9saWRheSB3aGljaCBpcyB2YWxpZCBpbiBtYWpvciBwYXJ0cyBvZiB0aGUgd2hvbGUgY291bnRyeS4KKyAgICAgICUgSXMgYXV0b21hdGljYWxseSBwcm92aWRlZCB3aXRoIGhpZ2hsaWdodGluZyBzZXF1ZW5jZXMgcmVzcGVjdGl2ZWx5CisgICAgICAlIG1hcmtpbmcgY2hhcmFjdGVycy4KKyAgICAgIFxub2luZGVudFxpZ25vcmVzcGFjZXMjI1x1bnNraXBcbXVsdGlzdHJ1dAorICAgIH1cY3IKK30KK1xkZWZcRW11bHRpdGFibGV7JQorICBcY3JjcgorICBcZWdyb3VwICUgZW5kIHRoZSBcaGFsaWduCisgIFxnbG9iYWxcc2V0cGVyY2VudGZhbHNlCit9CisKK1xkZWZcc2V0bXVsdGl0YWJsZXNwYWNpbmd7JQorICBcZGVmXG11bHRpc3RydXR7XHN0cnV0fSUganVzdCB1c2UgdGhlIHN0YW5kYXJkIGxpbmUgc3BhY2luZworICAlCisgICUgQ29tcHV0ZSBcbXVsdGl0YWJsZWxpbmVzcGFjZSAoaWYgbm90IGRlZmluZWQgYnkgdXNlcikgZm9yIHVzZSBpbgorICAlIFxtdWx0aXRhYmxlcGFyc2tpcCBjYWxjdWxhdGlvbi4gIFdlIHVzZWQgZGVmaW5lIFxtdWx0aXN0cnV0IGJhc2VkIG9uCisgICUgdGhpcywgYnV0IChpcm9uaWNhbGx5KSB0aGF0IGNhdXNlZCB0aGUgc3BhY2luZyB0byBiZSBvZmYuCisgICUgU2VlIGJ1Zy10ZXhpbmZvIHJlcG9ydCBmcm9tIFdlcm5lciBMZW1iZXJnLCAzMSBPY3QgMjAwNCAxMjo1MjoyMCArMDEwMC4KK1xpZmRpbVxtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorXHNldGJveDA9XHZib3h7WH1cZ2xvYmFsXG11bHRpdGFibGVsaW5lc3BhY2U9XHRoZVxiYXNlbGluZXNraXAKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlbGluZXNwYWNlIGJ5LVxodDAKK1xmaQorJSUgVGVzdCB0byBzZWUgaWYgcGFyc2tpcCBpcyBsYXJnZXIgdGhhbiBzcGFjZSBiZXR3ZWVuIGxpbmVzIG9mCislJSB0YWJsZS4gSWYgbm90LCBkbyBub3RoaW5nLgorJSUgICAgICAgIElmIHNvLCBzZXQgdG8gc2FtZSBkaW1lbnNpb24gYXMgbXVsdGl0YWJsZWxpbmVzcGFjZS4KK1xpZmRpbVxtdWx0aXRhYmxlcGFyc2tpcD5cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZmklCitcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA9MHB0CitcZ2xvYmFsXG11bHRpdGFibGVwYXJza2lwPVxtdWx0aXRhYmxlbGluZXNwYWNlCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZXBhcnNraXAtN3B0ICUlIHRvIGtlZXAgcGFyc2tpcCBzb21ld2hhdCBzbWFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIHRoYW4gc2tpcCBiZXR3ZWVuIGxpbmVzIGluIHRoZSB0YWJsZS4KK1xmaX0KKworCitcbWVzc2FnZXtjb25kaXRpb25hbHMsfQorCislIEBpZnRleCwgQGlmbm90ZG9jYm9vaywgQGlmbm90aHRtbCwgQGlmbm90aW5mbywgQGlmbm90cGxhaW50ZXh0LAorJSBAaWZub3R4bWwgYWx3YXlzIHN1Y2NlZWQuICBUaGV5IGN1cnJlbnRseSBkbyBub3RoaW5nOyB3ZSBkb24ndAorJSBhdHRlbXB0IHRvIGNoZWNrIHdoZXRoZXIgdGhlIGNvbmRpdGlvbmFscyBhcmUgcHJvcGVybHkgbmVzdGVkLiAgQnV0IHdlCislIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB0aGV5IGFyZSBjb25kaXRpb25hbHMsIHNvIHRoYXQgQGVuZCBkb2Vzbid0CislIGF0dGVtcHQgdG8gY2xvc2UgYW4gZW52aXJvbm1lbnQgZ3JvdXAuCislCitcZGVmXG1ha2Vjb25kIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSAjMVxlbmRjc25hbWUgPSBccmVsYXgKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgaXNjb25kLiMxXGVuZGNzbmFtZSA9IDEKK30KK1xtYWtlY29uZHtpZnRleH0KK1xtYWtlY29uZHtpZm5vdGRvY2Jvb2t9CitcbWFrZWNvbmR7aWZub3RodG1sfQorXG1ha2Vjb25ke2lmbm90aW5mb30KK1xtYWtlY29uZHtpZm5vdHBsYWludGV4dH0KK1xtYWtlY29uZHtpZm5vdHhtbH0KKworJSBJZ25vcmUgQGlnbm9yZSwgQGlmaHRtbCwgQGlmaW5mbywgYW5kIHRoZSBsaWtlLgorJQorXGRlZlxkaXJlbnRyeXtcZG9pZ25vcmV7ZGlyZW50cnl9fQorXGRlZlxkb2N1bWVudGRlc2NyaXB0aW9ue1xkb2lnbm9yZXtkb2N1bWVudGRlc2NyaXB0aW9ufX0KK1xkZWZcZG9jYm9va3tcZG9pZ25vcmV7ZG9jYm9va319CitcZGVmXGh0bWx7XGRvaWdub3Jle2h0bWx9fQorXGRlZlxpZmRvY2Jvb2t7XGRvaWdub3Jle2lmZG9jYm9va319CitcZGVmXGlmaHRtbHtcZG9pZ25vcmV7aWZodG1sfX0KK1xkZWZcaWZpbmZve1xkb2lnbm9yZXtpZmluZm99fQorXGRlZlxpZm5vdHRleHtcZG9pZ25vcmV7aWZub3R0ZXh9fQorXGRlZlxpZnBsYWludGV4dHtcZG9pZ25vcmV7aWZwbGFpbnRleHR9fQorXGRlZlxpZnhtbHtcZG9pZ25vcmV7aWZ4bWx9fQorXGRlZlxpZ25vcmV7XGRvaWdub3Jle2lnbm9yZX19CitcZGVmXG1lbnV7XGRvaWdub3Jle21lbnV9fQorXGRlZlx4bWx7XGRvaWdub3Jle3htbH19CisKKyUgSWdub3JlIHRleHQgdW50aWwgYSBsaW5lIGBAZW5kICMxJywga2VlcGluZyB0cmFjayBvZiBuZXN0ZWQgY29uZGl0aW9uYWxzLgorJQorJSBBIGNvdW50IHRvIHJlbWVtYmVyIHRoZSBkZXB0aCBvZiBuZXN0aW5nLgorXG5ld2NvdW50XGRvaWdub3JlY291bnQKKworXGRlZlxkb2lnbm9yZSMxe1xiZWdpbmdyb3VwCisgICUgU2NhbiBpbiBgYHZlcmJhdGltJycgbW9kZToKKyAgXGNhdGNvZGVgXEAgPSBcb3RoZXIKKyAgXGNhdGNvZGVgXHsgPSBcb3RoZXIKKyAgXGNhdGNvZGVgXH0gPSBcb3RoZXIKKyAgJQorICAlIE1ha2Ugc3VyZSB0aGF0IHNwYWNlcyB0dXJuIGludG8gdG9rZW5zIHRoYXQgbWF0Y2ggd2hhdCBcZG9pZ25vcmV0ZXh0IHdhbnRzLgorICBcc3BhY2Vpc3NwYWNlCisgICUKKyAgJSBDb3VudCBudW1iZXIgb2YgIzEncyB0aGF0IHdlJ3ZlIHNlZW4uCisgIFxkb2lnbm9yZWNvdW50ID0gMAorICAlCisgICUgU3dhbGxvdyB0ZXh0IHVudGlsIHdlIHJlYWNoIHRoZSBtYXRjaGluZyBgQGVuZCAjMScuCisgIFxkb2RvaWdub3JleyMxfSUKK30KKworeyBcY2F0Y29kZWBfPTExICUgV2Ugd2FudCB0byB1c2UgXF9TVE9QXyB3aGljaCBjYW5ub3QgYXBwZWFyIGluIHRleGluZm8gc291cmNlLgorICBcb2JleWxpbmVzICUKKyAgJQorICBcZ2RlZlxkb2RvaWdub3JlIzF7JQorICAgICUgIzEgY29udGFpbnMgdGhlIGNvbW1hbmQgbmFtZSBhcyBhIHN0cmluZywgZS5nLiwgYGlmaW5mbycuCisgICAgJQorICAgICUgRGVmaW5lIGEgY29tbWFuZCB0byBmaW5kIHRoZSBuZXh0IGBAZW5kICMxJywgd2hpY2ggbXVzdCBiZSBvbiBhIGxpbmUKKyAgICAlIGJ5IGl0c2VsZi4KKyAgICBcbG9uZ1xkZWZcZG9pZ25vcmV0ZXh0IyMxXl5NQGVuZCAjMXtcZG9pZ25vcmV0ZXh0eXl5IyMxXl5NQCMxXF9TVE9QX30lCisgICAgJSBBbmQgdGhpcyBjb21tYW5kIHRvIGZpbmQgYW5vdGhlciAjMSBjb21tYW5kLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKKyAgICAlIGxpbmUuICAoT3RoZXJ3aXNlLCB3ZSB3b3VsZCBjb25zaWRlciBhIGxpbmUgYEBjIEBpZnNldCcsIGZvcgorICAgICUgZXhhbXBsZSwgdG8gY291bnQgYXMgYW4gQGlmc2V0IGZvciBuZXN0aW5nLikKKyAgICBcbG9uZ1xkZWZcZG9pZ25vcmV0ZXh0eXl5IyMxXl5NQCMxIyMyXF9TVE9QX3tcZG9pZ25vcmV5eXl7IyMyfVxfU1RPUF99JQorICAgICUKKyAgICAlIEFuZCBub3cgZXhwYW5kIHRoYXQgY29tbWFuZC4KKyAgICBcb2JleWxpbmVzICUKKyAgICBcZG9pZ25vcmV0ZXh0IF5eTSUKKyAgfSUKK30KKworXGRlZlxkb2lnbm9yZXl5eSMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CQkJJSBOb3RoaW5nIGZvdW5kLgorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHR6enoKKyAgXGVsc2UJCQkJCSUgRm91bmQgYSBuZXN0ZWQgY29uZGl0aW9uLCAuLi4KKyAgICBcYWR2YW5jZVxkb2lnbm9yZWNvdW50IGJ5IDEKKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0eXl5CQklIC4uLiwgbG9vayBmb3IgYW5vdGhlci4KKyAgICAlIElmIHdlJ3JlIGhlcmUsICMxIGVuZHMgd2l0aCBeXk1caWZpbmZvIChmb3IgZXhhbXBsZSkuCisgIFxmaQorICBcbmV4dCAjMSUgdGhlIHRva2VuIFxfU1RPUF8gaXMgcHJlc2VudCBqdXN0IGFmdGVyIHRoaXMgbWFjcm8uCit9CisKKyUgV2UgaGF2ZSB0byBzd2FsbG93IHRoZSByZW1haW5pbmcgIlxfU1RPUF8iLgorJQorXGRlZlxkb2lnbm9yZXRleHR6enojMXslCisgIFxpZm51bVxkb2lnbm9yZWNvdW50ID0gMAklIFdlIGhhdmUganVzdCBmb3VuZCB0aGUgb3V0ZXJtb3N0IEBlbmQuCisgICAgXGxldFxuZXh0XGVuZGRvaWdub3JlCisgIFxlbHNlCQkJCSUgU3RpbGwgaW5zaWRlIGEgbmVzdGVkIGNvbmRpdGlvbi4KKyAgICBcYWR2YW5jZVxkb2lnbm9yZWNvdW50IGJ5IC0xCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dCAgICAgICUgTG9vayBmb3IgdGhlIG5leHQgQGVuZC4KKyAgXGZpCisgIFxuZXh0Cit9CisKKyUgRmluaXNoIG9mZiBpZ25vcmVkIHRleHQuCitcZGVmXGVuZGRvaWdub3Jle1xlbmRncm91cFxpZ25vcmVzcGFjZXN9CisKKworJSBAc2V0IFZBUiBzZXRzIHRoZSB2YXJpYWJsZSBWQVIgdG8gYW4gZW1wdHkgdmFsdWUuCislIEBzZXQgVkFSIFJFU1QtT0YtTElORSBzZXRzIFZBUiB0byB0aGUgdmFsdWUgUkVTVC1PRi1MSU5FLgorJQorJSBTaW5jZSB3ZSB3YW50IHRvIHNlcGFyYXRlIFZBUiBmcm9tIFJFU1QtT0YtTElORSAod2hpY2ggbWlnaHQgYmUKKyUgZW1wdHkpLCB3ZSBjYW4ndCBqdXN0IHVzZSBccGFyc2Vhcmc7IHdlIGhhdmUgdG8gaW5zZXJ0IGEgc3BhY2Ugb2Ygb3VyCislIG93biB0byBkZWxpbWl0IHRoZSByZXN0IG9mIHRoZSBsaW5lLCBhbmQgdGhlbiB0YWtlIGl0IG91dCBhZ2FpbiBpZiB3ZQorJSBkaWRuJ3QgbmVlZCBpdC4KKyUgV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IFxwYXJzZWFyZyBzZXRzIFxjYXRjb2RlYFwgPTEwLgorJQorXHBhcnNlYXJnZGVmXHNldHtcc2V0eXl5IzEgXGVuZHNldHl5eX0KK1xkZWZcc2V0eXl5IzEgIzJcZW5kc2V0eXl5eyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxkZWZcdGVtcHsjMn0lCisgICAgXGVkZWZcbmV4dHtcZ2RlZlxtYWtlY3NuYW1le1NFVCMxfX0lCisgICAgXGlmeFx0ZW1wXGVtcHR5CisgICAgICBcbmV4dHt9JQorICAgIFxlbHNlCisgICAgICBcc2V0enp6IzJcZW5kc2V0enp6CisgICAgXGZpCisgIH0lCit9CislIFJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2UgXHNldHh4eCBpbnNlcnRlZC4KK1xkZWZcc2V0enp6IzEgXGVuZHNldHp6entcbmV4dHsjMX19CisKKyUgQGNsZWFyIFZBUiBjbGVhcnMgKGkuZS4sIHVuc2V0cykgdGhlIHZhcmlhYmxlIFZBUi4KKyUKK1xwYXJzZWFyZ2RlZlxjbGVhcnslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lPVxyZWxheAorICB9JQorfQorCislIEB2YWx1ZXtmb299IGdldHMgdGhlIHRleHQgc2F2ZWQgaW4gdmFyaWFibGUgZm9vLgorXGRlZlx2YWx1ZXtcYmVnaW5ncm91cFxtYWtldmFsdWVleHBhbmRhYmxlXHZhbHVleHh4fQorXGRlZlx2YWx1ZXh4eCMxe1xleHBhbmRhYmxldmFsdWV7IzF9XGVuZGdyb3VwfQoreworICBcY2F0Y29kZWBcLSA9IFxhY3RpdmUgXGNhdGNvZGVgXF8gPSBcYWN0aXZlCisgICUKKyAgXGdkZWZcbWFrZXZhbHVlZXhwYW5kYWJsZXslCisgICAgXGxldFx2YWx1ZSA9IFxleHBhbmRhYmxldmFsdWUKKyAgICAlIFdlIGRvbid0IHdhbnQgdGhlc2UgY2hhcmFjdGVycyBhY3RpdmUsIC4uLgorICAgIFxjYXRjb2RlYFwtPVxvdGhlciBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgICAlIC4uLiwgYnV0IHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGFjdGl2ZSBvbmVzIGluIHRoZSBhcmd1bWVudCBpZgorICAgICUgd2UncmUgY2FsbGVkIGZyb20gQGNvZGUsIGFzIEBjb2Rle0B2YWx1ZXtmb28tYmFyX319LCB0aG91Z2guCisgICAgJSBTbyBcbGV0IHRoZW0gdG8gdGhlaXIgbm9ybWFsIGVxdWl2YWxlbnRzLgorICAgIFxsZXQtXHJlYWxkYXNoIFxsZXRfXG5vcm1hbHVuZGVyc2NvcmUKKyAgfQorfQorCislIFdlIGhhdmUgdGhpcyBzdWJyb3V0aW5lIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBhdCBsZWFzdCBzb21lIEB2YWx1ZSdzCislIHByb3Blcmx5IGluIGluZGV4ZXMgKHdlIGNhbGwgXG1ha2V2YWx1ZWV4cGFuZGFibGUgaW4gXGluZGV4ZHVtbWllcykuCislIFRoZSBjb21tYW5kIGhhcyB0byBiZSBmdWxseSBleHBhbmRhYmxlIChpZiB0aGUgdmFyaWFibGUgaXMgc2V0KSwgc2luY2UKKyUgdGhlIHJlc3VsdCB3aW5kcyB1cCBpbiB0aGUgaW5kZXggZmlsZS4gIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUKKyUgdmFyaWFibGUncyB2YWx1ZSBjb250YWlucyBvdGhlciBUZXhpbmZvIGNvbW1hbmRzLCBpdCdzIGFsbW9zdCBjZXJ0YWluCislIGl0IHdpbGwgZmFpbCAoYWx0aG91Z2ggcGVyaGFwcyB3ZSBjb3VsZCBmaXggdGhhdCB3aXRoIHN1ZmZpY2llbnQgd29yaworJSB0byBkbyBhIG9uZS1sZXZlbCBleHBhbnNpb24gb24gdGhlIHJlc3VsdCwgaW5zdGVhZCBvZiBjb21wbGV0ZSkuCislCitcZGVmXGV4cGFuZGFibGV2YWx1ZSMxeyUKKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lXHJlbGF4CisgICAge1tObyB2YWx1ZSBmb3IgYGAjMScnXX0lCisgICAgXG1lc3NhZ2V7VmFyaWFibGUgYCMxJywgdXNlZCBpbiBAdmFsdWUsIGlzIG5vdCBzZXQufSUKKyAgXGVsc2UKKyAgICBcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZQorICBcZmkKK30KKworJSBAaWZzZXQgVkFSIC4uLiBAZW5kIGlmc2V0IHJlYWRzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBiZWVuIGRlZmluZWQKKyUgd2l0aCBAc2V0LgorJQorJSBUbyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgb2YgYEBlbmQgaWZzZXQsJyBjYWxsIFxtYWtlb25kIGFuZCB0aGUgcmVkZWZpbmUuCislCitcbWFrZWNvbmR7aWZzZXR9CitcZGVmXGlmc2V0e1xwYXJzZWFyZ3tcZG9pZnNldHtcbGV0XG5leHQ9XGlmc2V0ZmFpbH19fQorXGRlZlxkb2lmc2V0IzEjMnslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcbGV0XG5leHQ9XGVtcHR5CisgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUIzJcZW5kY3NuYW1lXHJlbGF4CisgICAgICAjMSUgSWYgbm90IHNldCwgcmVkZWZpbmUgXG5leHQuCisgICAgXGZpCisgICAgXGV4cGFuZGFmdGVyCisgIH1cbmV4dAorfQorXGRlZlxpZnNldGZhaWx7XGRvaWdub3Jle2lmc2V0fX0KKworJSBAaWZjbGVhciBWQVIgLi4uIEBlbmQgaWZjbGVhciByZWFkcyB0aGUgYC4uLicgaWZmIFZBUiBoYXMgbmV2ZXIgYmVlbgorJSBkZWZpbmVkIHdpdGggQHNldCwgb3IgaGFzIGJlZW4gdW5kZWZpbmVkIHdpdGggQGNsZWFyLgorJQorJSBUaGUgYFxlbHNlJyBpbnNpZGUgdGhlIGBcZG9pZnNldCcgcGFyYW1ldGVyIGlzIGEgdHJpY2sgdG8gcmV1c2UgdGhlCislIGFib3ZlIGNvZGU6IGlmIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0LCBkbyBub3RoaW5nLCBpZiBpdCBpcyBzZXQsCislIHRoZW4gcmVkZWZpbmUgXG5leHQgdG8gXGlmY2xlYXJmYWlsLgorJQorXG1ha2Vjb25ke2lmY2xlYXJ9CitcZGVmXGlmY2xlYXJ7XHBhcnNlYXJne1xkb2lmc2V0e1xlbHNlIFxsZXRcbmV4dD1caWZjbGVhcmZhaWx9fX0KK1xkZWZcaWZjbGVhcmZhaWx7XGRvaWdub3Jle2lmY2xlYXJ9fQorCislIEBkaXJjYXRlZ29yeSBDQVRFR09SWSAgLS0gc3BlY2lmeSBhIGNhdGVnb3J5IG9mIHRoZSBkaXIgZmlsZQorJSB3aGljaCB0aGlzIGZpbGUgc2hvdWxkIGJlbG9uZyB0by4gIElnbm9yZSB0aGlzIGluIFRlWC4KK1xsZXRcZGlyY2F0ZWdvcnk9XGNvbW1lbnQKKworJSBAZGVmaW5pbmZvZW5jbG9zZS4KK1xsZXRcZGVmaW5mb2VuY2xvc2U9XGNvbW1lbnQKKworCitcbWVzc2FnZXtpbmRleGluZyx9CislIEluZGV4IGdlbmVyYXRpb24gZmFjaWxpdGllcworCislIERlZmluZSBcbmV3d3JpdGUgdG8gYmUgaWRlbnRpY2FsIHRvIHBsYWluIHRleCdzIFxuZXd3cml0ZQorJSBleGNlcHQgbm90IFxvdXRlciwgc28gaXQgY2FuIGJlIHVzZWQgd2l0aGluIG1hY3JvcyBhbmQgXGlmJ3MuCitcZWRlZlxuZXd3cml0ZXtcbWFrZWNzbmFtZXtwdGV4bmV3d3JpdGV9fQorCislIFxuZXdpbmRleCB7Zm9vfSBkZWZpbmVzIGFuIGluZGV4IG5hbWVkIGZvby4KKyUgSXQgYXV0b21hdGljYWxseSBkZWZpbmVzIFxmb29pbmRleCBzdWNoIHRoYXQKKyUgXGZvb2luZGV4IC4uLnJlc3Qgb2YgbGluZS4uLiBwdXRzIGFuIGVudHJ5IGluIHRoZSBpbmRleCBmb28uCislIEl0IGFsc28gZGVmaW5lcyBcZm9vaW5kZmlsZSB0byBiZSB0aGUgbnVtYmVyIG9mIHRoZSBvdXRwdXQgY2hhbm5lbCBmb3IKKyUgdGhlIGZpbGUgdGhhdCBhY2N1bXVsYXRlcyB0aGlzIGluZGV4LiAgVGhlIGZpbGUncyBleHRlbnNpb24gaXMgZm9vLgorJSBUaGUgbmFtZSBvZiBhbiBpbmRleCBzaG91bGQgYmUgbm8gbW9yZSB0aGFuIDIgY2hhcmFjdGVycyBsb25nCislIGZvciB0aGUgc2FrZSBvZiB2bXMuCislCitcZGVmXG5ld2luZGV4IzF7JQorICBcaWZsaW5rcworICAgIFxleHBhbmRhZnRlclxuZXd3cml0ZSBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxvcGVub3V0IFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lIFxqb2JuYW1lLiMxICUgT3BlbiB0aGUgZmlsZQorICBcZmkKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFpbmRleFxlbmRjc25hbWV7JSAgICAgJSBEZWZpbmUgQCMxaW5kZXgKKyAgICBcbm9leHBhbmRcZG9pbmRleHsjMX19Cit9CisKKyUgQGRlZmluZGV4IGZvbyAgPT0gIFxuZXdpbmRleHtmb299CislCitcZGVmXGRlZmluZGV4e1xwYXJzZWFyZ1xuZXdpbmRleH0KKworJSBEZWZpbmUgQGRlZmNvZGVpbmRleCwgbGlrZSBAZGVmaW5kZXggZXhjZXB0IHB1dCBhbGwgZW50cmllcyBpbiBAY29kZS4KKyUKK1xkZWZcZGVmY29kZWluZGV4e1xwYXJzZWFyZ1xuZXdjb2RlaW5kZXh9CislCitcZGVmXG5ld2NvZGVpbmRleCMxeyUKKyAgXGlmbGlua3MKKyAgICBcZXhwYW5kYWZ0ZXJcbmV3d3JpdGUgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcb3Blbm91dCBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZSBcam9ibmFtZS4jMQorICBcZmkKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFpbmRleFxlbmRjc25hbWV7JQorICAgIFxub2V4cGFuZFxkb2NvZGVpbmRleHsjMX19JQorfQorCisKKyUgQHN5bmluZGV4IGZvbyBiYXIgICAgbWFrZXMgaW5kZXggZm9vIGZlZWQgaW50byBpbmRleCBiYXIuCislIERvIHRoaXMgaW5zdGVhZCBvZiBAZGVmaW5kZXggZm9vIGlmIHlvdSBkb24ndCB3YW50IGl0IGFzIGEgc2VwYXJhdGUgaW5kZXguCislCislIEBzeW5jb2RlaW5kZXggZm9vIGJhciAgIHNpbWlsYXIsIGJ1dCBwdXQgYWxsIGVudHJpZXMgbWFkZSBmb3IgaW5kZXggZm9vCislIGluc2lkZSBAY29kZS4KKyUKK1xkZWZcc3luaW5kZXgjMSAjMiB7XGRvc3luaW5kZXhcZG9pbmRleHsjMX17IzJ9fQorXGRlZlxzeW5jb2RlaW5kZXgjMSAjMiB7XGRvc3luaW5kZXhcZG9jb2RlaW5kZXh7IzF9eyMyfX0KKworJSAjMSBpcyBcZG9pbmRleCBvciBcZG9jb2RlaW5kZXgsICMyIHRoZSBpbmRleCBnZXR0aW5nIHJlZGVmaW5lZCAoZm9vKSwKKyUgIzMgdGhlIHRhcmdldCBpbmRleCAoYmFyKS4KK1xkZWZcZG9zeW5pbmRleCMxIzIjM3slCisgICUgT25seSBkbyBcY2xvc2VvdXQgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgaXQsIGVsc2Ugd2UnbGwgZW5kIHVwCisgICUgY2xvc2luZyB0aGUgdGFyZ2V0IGluZGV4LgorICBcZXhwYW5kYWZ0ZXIgXGlmeFxjc25hbWUgZG9uZXN5bmluZGV4IzJcZW5kY3NuYW1lIFx1bmRlZmluZWQKKyAgICAlIFRoZSBcY2xvc2VvdXQgaGVscHMgcmVkdWNlIHVubmVjZXNzYXJ5IG9wZW4gZmlsZXM7IHRoZSBsaW1pdCBvbiB0aGUKKyAgICAlIEFjb3JuIFJJU0MgT1MgaXMgYSBtZXJlIDE2IGZpbGVzLgorICAgIFxleHBhbmRhZnRlclxjbG9zZW91dFxjc25hbWUjMmluZGZpbGVcZW5kY3NuYW1lCisgICAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWVcZG9uZXN5bmluZGV4IzJcZW5kY3NuYW1lID0gMQorICBcZmkKKyAgJSByZWRlZmluZSBcZm9vaW5kZmlsZToKKyAgXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclx0ZW1wXGV4cGFuZGFmdGVyPVxjc25hbWUjM2luZGZpbGVcZW5kY3NuYW1lCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIzJpbmRmaWxlXGVuZGNzbmFtZT1cdGVtcAorICAlIHJlZGVmaW5lIFxmb29pbmRleDoKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzJpbmRleFxlbmRjc25hbWV7XG5vZXhwYW5kIzF7IzN9fSUKK30KKworJSBEZWZpbmUgXGRvaW5kZXgsIHRoZSBkcml2ZXIgZm9yIGFsbCBcZm9vaW5kZXggbWFjcm9zLgorJSBBcmd1bWVudCAjMSBpcyBnZW5lcmF0ZWQgYnkgdGhlIGNhbGxpbmcgXGZvb2luZGV4IG1hY3JvLAorJSAgYW5kIGl0IGlzICJmb28iLCB0aGUgbmFtZSBvZiB0aGUgaW5kZXguCisKKyUgXGRvaW5kZXgganVzdCB1c2VzIFxwYXJzZWFyZzsgaXQgY2FsbHMgXGRvaW5kIGZvciB0aGUgYWN0dWFsIHdvcmsuCislIFRoaXMgaXMgYmVjYXVzZSBcZG9pbmQgaXMgbW9yZSB1c2VmdWwgdG8gY2FsbCBmcm9tIG90aGVyIG1hY3Jvcy4KKworJSBUaGVyZSBpcyBhbHNvIFxkb3N1YmluZCB7aW5kZXh9e3RvcGljfXtzdWJ0b3BpY30KKyUgd2hpY2ggbWFrZXMgYW4gZW50cnkgaW4gYSB0d28tbGV2ZWwgaW5kZXggc3VjaCBhcyB0aGUgb3BlcmF0aW9uIGluZGV4LgorCitcZGVmXGRvaW5kZXgjMXtcZWRlZlxpbmRleG5hbWV7IzF9XHBhcnNlYXJnXHNpbmdsZWluZGV4ZXJ9CitcZGVmXHNpbmdsZWluZGV4ZXIgIzF7XGRvaW5ke1xpbmRleG5hbWV9eyMxfX0KKworJSBsaWtlIHRoZSBwcmV2aW91cyB0d28sIGJ1dCB0aGV5IHB1dCBAY29kZSBhcm91bmQgdGhlIGFyZ3VtZW50LgorXGRlZlxkb2NvZGVpbmRleCMxe1xlZGVmXGluZGV4bmFtZXsjMX1ccGFyc2Vhcmdcc2luZ2xlY29kZWluZGV4ZXJ9CitcZGVmXHNpbmdsZWNvZGVpbmRleGVyICMxe1xkb2luZHtcaW5kZXhuYW1lfXtcY29kZXsjMX19fQorCislIFRha2UgY2FyZSBvZiBUZXhpbmZvIGNvbW1hbmRzIHRoYXQgY2FuIGFwcGVhciBpbiBhbiBpbmRleCBlbnRyeS4KKyUgU2luY2UgdGhlcmUgYXJlIHNvbWUgY29tbWFuZHMgd2Ugd2FudCB0byBleHBhbmQsIGFuZCBvdGhlcnMgd2UgZG9uJ3QsCislIHdlIGhhdmUgdG8gbGFib3Jpb3VzbHkgcHJldmVudCBleHBhbnNpb24gZm9yIHRob3NlIHRoYXQgd2UgZG9uJ3QuCislCitcZGVmXGluZGV4ZHVtbWllc3slCisgIFxlc2NhcGVjaGFyID0gYFxcICAgICAlIHVzZSBiYWNrc2xhc2ggaW4gb3V0cHV0IGZpbGVzLgorICBcZGVmXEB7QH0lIGNoYW5nZSB0byBAQCB3aGVuIHdlIHN3aXRjaCB0byBAIGFzIGVzY2FwZSBjaGFyIGluIGluZGV4IGZpbGVzLgorICBcZGVmXCB7XHJlYWxiYWNrc2xhc2hcc3BhY2UgfSUKKyAgJSBOZWVkIHRoZXNlIGluIGNhc2UgXHRleCBpcyBpbiBlZmZlY3QgYW5kIFx7IGlzIGEgXGRlbGltaXRlciBhZ2Fpbi4KKyAgJSBCdXQgY2FuJ3QgdXNlIFxsYnJhY2VjbWQgYW5kIFxyYnJhY2VjbWQgYmVjYXVzZSB0ZXhpbmRleCBhc3N1bWVzCisgICUgYnJhY2VzIGFuZCBiYWNrc2xhc2hlcyBhcmUgdXNlZCBvbmx5IGFzIGRlbGltaXRlcnMuCisgIFxsZXRceyA9IFxteWxicmFjZQorICBcbGV0XH0gPSBcbXlyYnJhY2UKKyAgJQorICAlIERvIHRoZSByZWRlZmluaXRpb25zLgorICBcY29tbW9uZHVtbWllcworfQorCislIEZvciB0aGUgYXV4IGFuZCB0b2MgZmlsZXMsIEAgaXMgdGhlIGVzY2FwZSBjaGFyYWN0ZXIuICBTbyB3ZSB3YW50IHRvCislIHJlZGVmaW5lIGV2ZXJ5dGhpbmcgdXNpbmcgQCBhcyB0aGUgZXNjYXBlIGNoYXJhY3RlciAoaW5zdGVhZCBvZgorJSBccmVhbGJhY2tzbGFzaCwgc3RpbGwgdXNlZCBmb3IgaW5kZXggZmlsZXMpLiAgV2hlbiBldmVyeXRoaW5nIHVzZXMgQCwKKyUgdGhpcyB3aWxsIGJlIHNpbXBsZXIuCislCitcZGVmXGF0ZHVtbWllc3slCisgIFxkZWZcQHtAQH0lCisgIFxkZWZcIHtAIH0lCisgIFxsZXRceyA9IFxsYnJhY2VhdGNtZAorICBcbGV0XH0gPSBccmJyYWNlYXRjbWQKKyAgJQorICAlIERvIHRoZSByZWRlZmluaXRpb25zLgorICBcY29tbW9uZHVtbWllcworfQorCislIENhbGxlZCBmcm9tIFxpbmRleGR1bW1pZXMgYW5kIFxhdGR1bW1pZXMuCislCitcZGVmXGNvbW1vbmR1bW1pZXN7JQorICAlCisgICUgXGRlZmluZWR1bW15d29yZCBkZWZpbmVzIFwjMSBhcyBcc3RyaW5nXCMxXHNwYWNlLCB0aHVzIGVmZmVjdGl2ZWx5CisgICUgcHJldmVudGluZyBpdHMgZXhwYW5zaW9uLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIGNvbnRyb2wlIHdvcmRzLAorICAlIG5vdCBjb250cm9sIGxldHRlcnMsIGJlY2F1c2UgdGhlIFxzcGFjZSB3b3VsZCBiZSBpbmNvcnJlY3QgZm9yCisgICUgY29udHJvbCBjaGFyYWN0ZXJzLCBidXQgaXMgbmVlZGVkIHRvIHNlcGFyYXRlIHRoZSBjb250cm9sIHdvcmQKKyAgJSBmcm9tIHdoYXRldmVyIGZvbGxvd3MuCisgICUKKyAgJSBGb3IgY29udHJvbCBsZXR0ZXJzLCB3ZSBoYXZlIFxkZWZpbmVkdW1teWxldHRlciwgd2hpY2ggb21pdHMgdGhlCisgICUgc3BhY2UuCisgICUKKyAgJSBUaGVzZSBjYW4gYmUgdXNlZCBib3RoIGZvciBjb250cm9sIHdvcmRzIHRoYXQgdGFrZSBhbiBhcmd1bWVudCBhbmQKKyAgJSB0aG9zZSB0aGF0IGRvIG5vdC4gIElmIGl0IGlzIGZvbGxvd2VkIGJ5IHthcmd9IGluIHRoZSBpbnB1dCwgdGhlbgorICAlIHRoYXQgd2lsbCBkdXRpZnVsbHkgZ2V0IHdyaXR0ZW4gdG8gdGhlIGluZGV4IChvciB3aGVyZXZlcikuCisgICUKKyAgXGRlZlxkZWZpbmVkdW1teXdvcmQgICMjMXtcZGVmIyMxe1xzdHJpbmcjIzFcc3BhY2V9fSUKKyAgXGRlZlxkZWZpbmVkdW1teWxldHRlciMjMXtcZGVmIyMxe1xzdHJpbmcjIzF9fSUKKyAgXGxldFxkZWZpbmVkdW1teWFjY2VudFxkZWZpbmVkdW1teWxldHRlcgorICAlCisgIFxjb21tb25kdW1taWVzbm9mb250cworICAlCisgIFxkZWZpbmVkdW1teWxldHRlclxfJQorICAlCisgICUgTm9uLUVuZ2xpc2ggbGV0dGVycy4KKyAgXGRlZmluZWR1bW15d29yZFxBQQorICBcZGVmaW5lZHVtbXl3b3JkXEFFCisgIFxkZWZpbmVkdW1teXdvcmRcTAorICBcZGVmaW5lZHVtbXl3b3JkXE9FCisgIFxkZWZpbmVkdW1teXdvcmRcTworICBcZGVmaW5lZHVtbXl3b3JkXGFhCisgIFxkZWZpbmVkdW1teXdvcmRcYWUKKyAgXGRlZmluZWR1bW15d29yZFxsCisgIFxkZWZpbmVkdW1teXdvcmRcb2UKKyAgXGRlZmluZWR1bW15d29yZFxvCisgIFxkZWZpbmVkdW1teXdvcmRcc3MKKyAgXGRlZmluZWR1bW15d29yZFxleGNsYW1kb3duCisgIFxkZWZpbmVkdW1teXdvcmRccXVlc3Rpb25kb3duCisgIFxkZWZpbmVkdW1teXdvcmRcb3JkZgorICBcZGVmaW5lZHVtbXl3b3JkXG9yZG0KKyAgJQorICAlIEFsdGhvdWdoIHRoZXNlIGludGVybmFsIGNvbW1hbmRzIHNob3VsZG4ndCBzaG93IHVwLCBzb21ldGltZXMgdGhleSBkby4KKyAgXGRlZmluZWR1bW15d29yZFxiZgorICBcZGVmaW5lZHVtbXl3b3JkXGd0cgorICBcZGVmaW5lZHVtbXl3b3JkXGhhdAorICBcZGVmaW5lZHVtbXl3b3JkXGxlc3MKKyAgXGRlZmluZWR1bW15d29yZFxzZgorICBcZGVmaW5lZHVtbXl3b3JkXHNsCisgIFxkZWZpbmVkdW1teXdvcmRcdGNsb3NlCisgIFxkZWZpbmVkdW1teXdvcmRcdHQKKyAgJQorICBcZGVmaW5lZHVtbXl3b3JkXExhVGVYCisgIFxkZWZpbmVkdW1teXdvcmRcVGVYCisgICUKKyAgJSBBc3NvcnRlZCBzcGVjaWFsIGNoYXJhY3RlcnMuCisgIFxkZWZpbmVkdW1teXdvcmRcYnVsbGV0CisgIFxkZWZpbmVkdW1teXdvcmRcY29tbWEKKyAgXGRlZmluZWR1bW15d29yZFxjb3B5cmlnaHQKKyAgXGRlZmluZWR1bW15d29yZFxyZWdpc3RlcmVkc3ltYm9sCisgIFxkZWZpbmVkdW1teXdvcmRcZG90cworICBcZGVmaW5lZHVtbXl3b3JkXGVuZGRvdHMKKyAgXGRlZmluZWR1bW15d29yZFxlcXVpdgorICBcZGVmaW5lZHVtbXl3b3JkXGVycm9yCisgIFxkZWZpbmVkdW1teXdvcmRcZXVybworICBcZGVmaW5lZHVtbXl3b3JkXGV4cGFuc2lvbgorICBcZGVmaW5lZHVtbXl3b3JkXG1pbnVzCisgIFxkZWZpbmVkdW1teXdvcmRccG91bmRzCisgIFxkZWZpbmVkdW1teXdvcmRccG9pbnQKKyAgXGRlZmluZWR1bW15d29yZFxwcmludAorICBcZGVmaW5lZHVtbXl3b3JkXHJlc3VsdAorICAlCisgICUgV2Ugd2FudCB0byBkaXNhYmxlIGFsbCBtYWNyb3Mgc28gdGhhdCB0aGV5IGFyZSBub3QgZXhwYW5kZWQgYnkgXHdyaXRlLgorICBcbWFjcm9saXN0CisgICUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUKKyAgJQorICAlIEhhbmRsZSBzb21lIGNhc2VzIG9mIEB2YWx1ZSAtLSB3aGVyZSBpdCBkb2VzIG5vdCBjb250YWluIGFueQorICAlIChub24tZnVsbHktZXhwYW5kYWJsZSkgY29tbWFuZHMuCisgIFxtYWtldmFsdWVleHBhbmRhYmxlCit9CisKKyUgXGNvbW1vbmR1bW1pZXNub2ZvbnRzOiBjb21tb24gdG8gXGNvbW1vbmR1bW1pZXMgYW5kIFxpbmRleG5vZm9udHMuCislCislIEJldHRlciBoYXZlIHRoaXMgd2l0aG91dCBhY3RpdmUgY2hhcnMuCit7CisgIFxjYXRjb2RlYFx+PVxvdGhlcgorICBcZ2RlZlxjb21tb25kdW1taWVzbm9mb250c3slCisgICAgJSBDb250cm9sIGxldHRlcnMgYW5kIGFjY2VudHMuCisgICAgXGRlZmluZWR1bW15bGV0dGVyXCElCisgICAgXGRlZmluZWR1bW15YWNjZW50XCIlCisgICAgXGRlZmluZWR1bW15YWNjZW50XCclCisgICAgXGRlZmluZWR1bW15bGV0dGVyXColCisgICAgXGRlZmluZWR1bW15YWNjZW50XCwlCisgICAgXGRlZmluZWR1bW15bGV0dGVyXC4lCisgICAgXGRlZmluZWR1bW15bGV0dGVyXC8lCisgICAgXGRlZmluZWR1bW15bGV0dGVyXDolCisgICAgXGRlZmluZWR1bW15YWNjZW50XD0lCisgICAgXGRlZmluZWR1bW15bGV0dGVyXD8lCisgICAgXGRlZmluZWR1bW15YWNjZW50XF4lCisgICAgXGRlZmluZWR1bW15YWNjZW50XGAlCisgICAgXGRlZmluZWR1bW15YWNjZW50XH4lCisgICAgXGRlZmluZWR1bW15d29yZFx1CisgICAgXGRlZmluZWR1bW15d29yZFx2CisgICAgXGRlZmluZWR1bW15d29yZFxICisgICAgXGRlZmluZWR1bW15d29yZFxkb3RhY2NlbnQKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHJpbmdhY2NlbnQKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHRpZWFjY2VudAorICAgIFxkZWZpbmVkdW1teXdvcmRcdWJhcmFjY2VudAorICAgIFxkZWZpbmVkdW1teXdvcmRcdWRvdGFjY2VudAorICAgIFxkZWZpbmVkdW1teXdvcmRcZG90bGVzcworICAgICUKKyAgICAlIFRleGluZm8gZm9udCBjb21tYW5kcy4KKyAgICBcZGVmaW5lZHVtbXl3b3JkXGIKKyAgICBcZGVmaW5lZHVtbXl3b3JkXGkKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHIKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHNjCisgICAgXGRlZmluZWR1bW15d29yZFx0CisgICAgJQorICAgICUgQ29tbWFuZHMgdGhhdCB0YWtlIGFyZ3VtZW50cy4KKyAgICBcZGVmaW5lZHVtbXl3b3JkXGFjcm9ueW0KKyAgICBcZGVmaW5lZHVtbXl3b3JkXGNpdGUKKyAgICBcZGVmaW5lZHVtbXl3b3JkXGNvZGUKKyAgICBcZGVmaW5lZHVtbXl3b3JkXGNvbW1hbmQKKyAgICBcZGVmaW5lZHVtbXl3b3JkXGRmbgorICAgIFxkZWZpbmVkdW1teXdvcmRcZW1waAorICAgIFxkZWZpbmVkdW1teXdvcmRcZW52CisgICAgXGRlZmluZWR1bW15d29yZFxmaWxlCisgICAgXGRlZmluZWR1bW15d29yZFxrYmQKKyAgICBcZGVmaW5lZHVtbXl3b3JkXGtleQorICAgIFxkZWZpbmVkdW1teXdvcmRcbWF0aAorICAgIFxkZWZpbmVkdW1teXdvcmRcb3B0aW9uCisgICAgXGRlZmluZWR1bW15d29yZFxzYW1wCisgICAgXGRlZmluZWR1bW15d29yZFxzdHJvbmcKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHRpZQorICAgIFxkZWZpbmVkdW1teXdvcmRcdXJlZgorICAgIFxkZWZpbmVkdW1teXdvcmRcdXJsCisgICAgXGRlZmluZWR1bW15d29yZFx2YXIKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHZlcmIKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHcKKyAgfQorfQorCislIFxpbmRleG5vZm9udHMgaXMgdXNlZCB3aGVuIG91dHB1dHRpbmcgdGhlIHN0cmluZ3MgdG8gc29ydCB0aGUgaW5kZXgKKyUgYnksIGFuZCB3aGVuIGNvbnN0cnVjdGluZyBjb250cm9sIHNlcXVlbmNlIG5hbWVzLiAgSXQgZWxpbWluYXRlcyBhbGwKKyUgY29udHJvbCBzZXF1ZW5jZXMgYW5kIGp1c3Qgd3JpdGVzIHdoYXRldmVyIHRoZSBiZXN0IEFTQ0lJIHNvcnQgc3RyaW5nCislIHdvdWxkIGJlIGZvciBhIGdpdmVuIGNvbW1hbmQgKHVzdWFsbHkgaXRzIGFyZ3VtZW50KS4KKyUKK1xkZWZcaW5kZXhub2ZvbnRzeyUKKyAgJSBBY2NlbnQgY29tbWFuZHMgc2hvdWxkIGJlY29tZSBAYXNpcy4KKyAgXGRlZlxkZWZpbmVkdW1teWFjY2VudCMjMXtcbGV0IyMxXGFzaXN9JQorICAlIFdlIGNhbiBqdXN0IGlnbm9yZSBvdGhlciBjb250cm9sIGxldHRlcnMuCisgIFxkZWZcZGVmaW5lZHVtbXlsZXR0ZXIjIzF7XGxldCMjMVxlbXB0eX0lCisgICUgSG9wZWZ1bGx5LCBhbGwgY29udHJvbCB3b3JkcyBjYW4gYmVjb21lIEBhc2lzLgorICBcbGV0XGRlZmluZWR1bW15d29yZFxkZWZpbmVkdW1teWFjY2VudAorICAlCisgIFxjb21tb25kdW1taWVzbm9mb250cworICAlCisgICUgRG9uJ3Qgbm8tb3AgXHR0LCBzaW5jZSBpdCBpc24ndCBhIHVzZXItbGV2ZWwgY29tbWFuZAorICAlIGFuZCBpcyB1c2VkIGluIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgYWN0aXZlIGNoYXJzIGxpa2UgPCwgPiwgfCwgZXRjLgorICAlIExpa2V3aXNlIHdpdGggdGhlIG90aGVyIHBsYWluIHRleCBmb250IGNvbW1hbmRzLgorICAlXGxldFx0dD1cYXNpcworICAlCisgIFxkZWZcIHsgfSUKKyAgXGRlZlxAe0B9JQorICAlIGhvdyB0byBoYW5kbGUgYnJhY2VzPworICBcZGVmXF97XG5vcm1hbHVuZGVyc2NvcmV9JQorICAlCisgICUgTm9uLUVuZ2xpc2ggbGV0dGVycy4KKyAgXGRlZlxBQXtBQX0lCisgIFxkZWZcQUV7QUV9JQorICBcZGVmXEx7TH0lCisgIFxkZWZcT0V7T0V9JQorICBcZGVmXE97T30lCisgIFxkZWZcYWF7YWF9JQorICBcZGVmXGFle2FlfSUKKyAgXGRlZlxse2x9JQorICBcZGVmXG9le29lfSUKKyAgXGRlZlxve299JQorICBcZGVmXHNze3NzfSUKKyAgXGRlZlxleGNsYW1kb3dueyF9JQorICBcZGVmXHF1ZXN0aW9uZG93bns/fSUKKyAgXGRlZlxvcmRme2F9JQorICBcZGVmXG9yZG17b30lCisgICUKKyAgXGRlZlxMYVRlWHtMYVRlWH0lCisgIFxkZWZcVGVYe1RlWH0lCisgICUKKyAgJSBBc3NvcnRlZCBzcGVjaWFsIGNoYXJhY3RlcnMuCisgICUgKFRoZSBmb2xsb3dpbmcge30gd2lsbCBlbmQgdXAgaW4gdGhlIHNvcnQgc3RyaW5nLCBidXQgdGhhdCdzIG9rLikKKyAgXGRlZlxidWxsZXR7YnVsbGV0fSUKKyAgXGRlZlxjb21tYXssfSUKKyAgXGRlZlxjb3B5cmlnaHR7Y29weXJpZ2h0fSUKKyAgXGRlZlxyZWdpc3RlcmVkc3ltYm9se1J9JQorICBcZGVmXGRvdHN7Li4ufSUKKyAgXGRlZlxlbmRkb3Rzey4uLn0lCisgIFxkZWZcZXF1aXZ7PT19JQorICBcZGVmXGVycm9ye2Vycm9yfSUKKyAgXGRlZlxldXJve2V1cm99JQorICBcZGVmXGV4cGFuc2lvbns9PT59JQorICBcZGVmXG1pbnVzey19JQorICBcZGVmXHBvdW5kc3twb3VuZHN9JQorICBcZGVmXHBvaW50ey59JQorICBcZGVmXHByaW50ey18fSUKKyAgXGRlZlxyZXN1bHR7PT59JQorICAlCisgICUgV2UgbmVlZCB0byBnZXQgcmlkIG9mIGFsbCBtYWNyb3MsIGxlYXZpbmcgb25seSB0aGUgYXJndW1lbnRzIChpZiBwcmVzZW50KS4KKyAgJSBPZiBjb3Vyc2UgdGhpcyBpcyBub3QgbmVhcmx5IGNvcnJlY3QsIGJ1dCBpdCBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8gZm9yIG5vdy4KKyAgJSBtYWtlaW5mbyBkb2VzIG5vdCBleHBhbmQgbWFjcm9zIGluIHRoZSBhcmd1bWVudCB0byBAZGVmZm4sIHdoaWNoIGVuZHMgdXAKKyAgJSB3cml0aW5nIGFuIGluZGV4IGVudHJ5LCBhbmQgdGV4aW5kZXggaXNuJ3QgcHJlcGFyZWQgZm9yIGFuIGluZGV4IHNvcnQgZW50cnkKKyAgJSB0aGF0IHN0YXJ0cyB3aXRoIFwuCisgICUgCisgICUgU2luY2UgbWFjcm8gaW52b2NhdGlvbnMgYXJlIGZvbGxvd2VkIGJ5IGJyYWNlcywgd2UgY2FuIGp1c3QgcmVkZWZpbmUgdGhlbQorICAlIHRvIHRha2UgYSBzaW5nbGUgVGVYIGFyZ3VtZW50LiAgVGhlIGNhc2Ugb2YgYSBtYWNybyBpbnZvY2F0aW9uIHRoYXQKKyAgJSBnb2VzIHRvIGVuZC1vZi1saW5lIGlzIG5vdCBoYW5kbGVkLgorICAlIAorICBcbWFjcm9saXN0Cit9CisKK1xsZXRcaW5kZXhiYWNrc2xhc2g9MCAgJW92ZXJyaWRkZW4gZHVyaW5nIFxwcmludGluZGV4LgorXGxldFxTRVRtYXJnaW5pbmRleD1ccmVsYXggJSBwdXQgaW5kZXggZW50cmllcyBpbiBtYXJnaW4gKHVuZG9jdW1lbnRlZCk/CisKKyUgTW9zdCBpbmRleCBlbnRyaWVzIGdvIHRocm91Z2ggaGVyZSwgYnV0IFxkb3N1YmluZCBpcyB0aGUgZ2VuZXJhbCBjYXNlLgorJSAjMSBpcyB0aGUgaW5kZXggbmFtZSwgIzIgaXMgdGhlIGVudHJ5IHRleHQuCitcZGVmXGRvaW5kIzEjMntcZG9zdWJpbmR7IzF9eyMyfXt9fQorCislIFdvcmtob3JzZSBmb3IgYWxsIFxmb29pbmRleGVzLgorJSAjMSBpcyBuYW1lIG9mIGluZGV4LCAjMiBpcyBzdHVmZiB0byBwdXQgdGhlcmUsICMzIGlzIHN1YmVudHJ5IC0tCislIGVtcHR5IGlmIGNhbGxlZCBmcm9tIFxkb2luZCwgYXMgd2UgdXN1YWxseSBhcmUgKHRoZSBtYWluIGV4Y2VwdGlvbgorJSBpcyB3aXRoIG1vc3QgZGVmdW5zLCB3aGljaCBjYWxsIHVzIGRpcmVjdGx5KS4KKyUKK1xkZWZcZG9zdWJpbmQjMSMyIzN7JQorICBcaWZsaW5rcworICB7JQorICAgICUgU3RvcmUgdGhlIG1haW4gaW5kZXggZW50cnkgdGV4dCAoaW5jbHVkaW5nIHRoZSB0aGlyZCBhcmcpLgorICAgIFx0b2tzMCA9IHsjMn0lCisgICAgJSBJZiB0aGlyZCBhcmcgaXMgcHJlc2VudCwgcHJlY2VkZSBpdCB3aXRoIGEgc3BhY2UuCisgICAgXGRlZlx0aGlyZGFyZ3sjM30lCisgICAgXGlmeFx0aGlyZGFyZ1xlbXB0eSBcZWxzZQorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1x0aGVcdG9rczAgXHNwYWNlICMzfSUKKyAgICBcZmkKKyAgICAlCisgICAgXGVkZWZcd3JpdGV0b3tcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZX0lCisgICAgJQorICAgIFxpZnZtb2RlCisgICAgICBcZG9zdWJpbmRzYW5pdGl6ZQorICAgIFxlbHNlCisgICAgICBcZG9zdWJpbmR3cml0ZQorICAgIFxmaQorICB9JQorICBcZmkKK30KKworJSBXcml0ZSB0aGUgZW50cnkgaW4gXHRva3MwIHRvIHRoZSBpbmRleCBmaWxlOgorJQorXGRlZlxkb3N1YmluZHdyaXRleyUKKyAgJSBQdXQgdGhlIGluZGV4IGVudHJ5IGluIHRoZSBtYXJnaW4gaWYgZGVzaXJlZC4KKyAgXGlmeFxTRVRtYXJnaW5pbmRleFxyZWxheFxlbHNlCisgICAgXGluc2VydFxtYXJnaW57XGhib3h7XHZydWxlIGhlaWdodDhwdCBkZXB0aDNwdCB3aWR0aDBwdCBcdGhlXHRva3MwfX0lCisgIFxmaQorICAlCisgICUgUmVtZW1iZXIsIHdlIGFyZSB3aXRoaW4gYSBncm91cC4KKyAgXGluZGV4ZHVtbWllcyAlIE11c3QgZG8gdGhpcyBoZXJlLCBzaW5jZSBcYmYsIGV0YyBleHBhbmQgYXQgdGhpcyBzdGFnZQorICBcZGVmXGJhY2tzbGFzaGN1cmZvbnR7XGluZGV4YmFja3NsYXNofSUgXGluZGV4YmFja3NsYXNoIGlzbid0IGRlZmluZWQgbm93CisgICAgICAlIHNvIGl0IHdpbGwgYmUgb3V0cHV0IGFzIGlzOyBhbmQgaXQgd2lsbCBwcmludCBhcyBiYWNrc2xhc2guCisgICUKKyAgJSBQcm9jZXNzIHRoZSBpbmRleCBlbnRyeSB3aXRoIGFsbCBmb250IGNvbW1hbmRzIHR1cm5lZCBvZmYsIHRvCisgICUgZ2V0IHRoZSBzdHJpbmcgdG8gc29ydCBieS4KKyAge1xpbmRleG5vZm9udHMKKyAgIFxlZGVmXHRlbXB7XHRoZVx0b2tzMH0lIG5lZWQgZnVsbCBleHBhbnNpb24KKyAgIFx4ZGVmXGluZGV4c29ydHRtcHtcdGVtcH0lCisgIH0lCisgICUKKyAgJSBTZXQgdXAgdGhlIGNvbXBsZXRlIGluZGV4IGVudHJ5LCB3aXRoIGJvdGggdGhlIHNvcnQga2V5IGFuZAorICAlIHRoZSBvcmlnaW5hbCB0ZXh0LCBpbmNsdWRpbmcgYW55IGZvbnQgY29tbWFuZHMuICBXZSB3cml0ZQorICAlIHRocmVlIGFyZ3VtZW50cyB0byBcZW50cnkgdG8gdGhlIC4/PyBmaWxlIChmb3VyIGluIHRoZQorICAlIHN1YmVudHJ5IGNhc2UpLCB0ZXhpbmRleCByZWR1Y2VzIHRvIHR3byB3aGVuIHdyaXRpbmcgdGhlIC4/P3MKKyAgJSBzb3J0ZWQgcmVzdWx0LgorICBcZWRlZlx0ZW1weyUKKyAgICBcd3JpdGVcd3JpdGV0b3slCisgICAgICBcc3RyaW5nXGVudHJ5e1xpbmRleHNvcnR0bXB9e1xub2V4cGFuZFxmb2xpb317XHRoZVx0b2tzMH19JQorICB9JQorICBcdGVtcAorfQorCislIFRha2UgY2FyZSBvZiB1bndhbnRlZCBwYWdlIGJyZWFrczoKKyUKKyUgSWYgYSBza2lwIGlzIHRoZSBsYXN0IHRoaW5nIG9uIHRoZSBsaXN0IG5vdywgcHJlc2VydmUgaXQKKyUgYnkgYmFja2luZyB1cCBieSBcbGFzdHNraXAsIGRvaW5nIHRoZSBcd3JpdGUsIHRoZW4gaW5zZXJ0aW5nCislIHRoZSBza2lwIGFnYWluLiAgT3RoZXJ3aXNlLCB0aGUgd2hhdHNpdCBnZW5lcmF0ZWQgYnkgdGhlCislIFx3cml0ZSB3aWxsIG1ha2UgXGxhc3Rza2lwIHplcm8uICBUaGUgcmVzdWx0IGlzIHRoYXQgc2VxdWVuY2VzCislIGxpa2UgdGhpczoKKyUgQGVuZCBkZWZ1bgorJSBAdGluZGV4IHdoYXRldmVyCislIEBkZWZ1biAuLi4KKyUgd2lsbCBoYXZlIGV4dHJhIHNwYWNlIGluc2VydGVkLCBiZWNhdXNlIHRoZSBcbWVkYnJlYWsgaW4gdGhlCislIHN0YXJ0IG9mIHRoZSBAZGVmdW4gd29uJ3Qgc2VlIHRoZSBza2lwIGluc2VydGVkIGJ5IHRoZSBAZW5kIG9mCislIHRoZSBwcmV2aW91cyBkZWZ1bi4KKyUKKyUgQnV0IGRvbid0IGRvIGFueSBvZiB0aGlzIGlmIHdlJ3JlIG5vdCBpbiB2ZXJ0aWNhbCBtb2RlLiAgV2UKKyUgZG9uJ3Qgd2FudCB0byBkbyBhIFx2c2tpcCBhbmQgcHJlbWF0dXJlbHkgZW5kIGEgcGFyYWdyYXBoLgorJQorJSBBdm9pZCBwYWdlIGJyZWFrcyBkdWUgdG8gdGhlc2UgZXh0cmEgc2tpcHMsIHRvby4KKyUKKyUgQnV0IHdhaXQsIHRoZXJlIGlzIGEgY2F0Y2ggdGhlcmU6CislIFdlJ2xsIGhhdmUgdG8gY2hlY2sgd2hldGhlciBcbGFzdHNraXAgaXMgemVybyBza2lwLiAgXGlmZGltIGlzIG5vdAorJSBzdWZmaWNpZW50IGZvciB0aGlzIHB1cnBvc2UsIGFzIGl0IGlnbm9yZXMgc3RyZXRjaCBhbmQgc2hyaW5rIHBhcnRzCislIG9mIHRoZSBza2lwLiAgVGhlIG9ubHkgd2F5IHNlZW1zIHRvIGJlIHRvIGNoZWNrIHRoZSB0ZXh0dWFsCislIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBza2lwLgorJQorJSBUaGUgZm9sbG93aW5nIGlzIGFsbW9zdCBsaWtlIFxkZWZcemVyb3NraXBtYWNyb3swLjBwdH0gZXhjZXB0IHRoYXQKKyUgdGhlIGBgcCcnIGFuZCBgYHQnJyBjaGFyYWN0ZXJzIGhhdmUgY2F0Y29kZSBcb3RoZXIsIG5vdCAxMSAobGV0dGVyKS4KKyUKK1xlZGVmXHplcm9za2lwbWFjcm97XGV4cGFuZGFmdGVyXHRoZVxjc25hbWUgekBza2lwXGVuZGNzbmFtZX0KKyUKKyUgLi4uLCByZWFkeSwgR086CislCitcZGVmXGRvc3ViaW5kc2FuaXRpemV7JQorICAlIFxsYXN0c2tpcCBhbmQgXGxhc3RwZW5hbHR5IGNhbm5vdCBib3RoIGJlIG5vbnplcm8gc2ltdWx0YW5lb3VzbHkuCisgIFxza2lwMCA9IFxsYXN0c2tpcAorICBcZWRlZlxsYXN0c2tpcG1hY3Jve1x0aGVcbGFzdHNraXB9JQorICBcY291bnQyNTUgPSBcbGFzdHBlbmFsdHkKKyAgJQorICAlIElmIFxsYXN0c2tpcCBpcyBub256ZXJvLCB0aGF0IG1lYW5zIHRoZSBsYXN0IGl0ZW0gd2FzIGEKKyAgJSBza2lwLiAgQW5kIHNpbmNlIGEgc2tpcCBpcyBkaXNjYXJkYWJsZSwgdGhhdCBtZWFucyB0aGlzCisgICUgLVxza2lwMCBnbHVlIHdlJ3JlIGluc2VydGluZyBpcyBwcmVjZWRlZCBieSBhCisgICUgbm9uLWRpc2NhcmRhYmxlIGl0ZW0sIHRoZXJlZm9yZSBpdCBpcyBub3QgYSBwb3RlbnRpYWwKKyAgJSBicmVha3BvaW50LCB0aGVyZWZvcmUgbm8gXG5vYnJlYWsgbmVlZGVkLgorICBcaWZ4XGxhc3Rza2lwbWFjcm9cemVyb3NraXBtYWNybworICBcZWxzZQorICAgIFx2c2tpcC1cc2tpcDAKKyAgXGZpCisgICUKKyAgXGRvc3ViaW5kd3JpdGUKKyAgJQorICBcaWZ4XGxhc3Rza2lwbWFjcm9cemVyb3NraXBtYWNybworICAgICUgSWYgXGxhc3Rza2lwIHdhcyB6ZXJvLCBwZXJoYXBzIHRoZSBsYXN0IGl0ZW0gd2FzIGEgcGVuYWx0eSwgYW5kCisgICAgJSBwZXJoYXBzIGl0IHdhcyA+PTEwMDAwLCBlLmcuLCBhIFxub2JyZWFrLiAgSW4gdGhhdCBjYXNlLCB3ZSB3YW50CisgICAgJSB0byByZS1pbnNlcnQgdGhlIHNhbWUgcGVuYWx0eSAodmFsdWVzID4xMDAwMCBhcmUgdXNlZCBmb3IgdmFyaW91cworICAgICUgc2lnbmFscyk7IHNpbmNlIHdlIGp1c3QgaW5zZXJ0ZWQgYSBub24tZGlzY2FyZGFibGUgaXRlbSwgYW55CisgICAgJSBmb2xsb3dpbmcgZ2x1ZSAoc3VjaCBhcyBhIFxwYXJza2lwKSB3b3VsZCBiZSBhIGJyZWFrcG9pbnQuICBGb3IgZXhhbXBsZToKKyAgICAlIAorICAgICUgICBAZGVmZm4gZGVmZm4td2hhdGV2ZXIKKyAgICAlICAgQHZpbmRleCBpbmRleC13aGF0ZXZlcgorICAgICUgICBEZXNjcmlwdGlvbi4KKyAgICAlIHdvdWxkIGFsbG93IGEgYnJlYWsgYmV0d2VlbiB0aGUgaW5kZXgtd2hhdGV2ZXIgd2hhdHNpdAorICAgICUgYW5kIHRoZSAiRGVzY3JpcHRpb24uIiBwYXJhZ3JhcGguCisgICAgXGlmbnVtXGNvdW50MjU1Pjk5OTkgXHBlbmFsdHlcY291bnQyNTUgXGZpCisgIFxlbHNlCisgICAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgd2UgaGFkIGEgbm9uemVybyBcbGFzdHNraXAsCisgICAgJSB0aGlzIG1ha2UtdXAgZ2x1ZSB3b3VsZCBiZSBwcmVjZWRlZCBieSBhIG5vbi1kaXNjYXJkYWJsZSBpdGVtCisgICAgJSAodGhlIHdoYXRzaXQgZnJvbSB0aGUgXHdyaXRlKSwgc28gd2UgbXVzdCBpbnNlcnQgYSBcbm9icmVhay4KKyAgICBcbm9icmVha1x2c2tpcFxza2lwMAorICBcZmkKK30KKworJSBUaGUgaW5kZXggZW50cnkgd3JpdHRlbiBpbiB0aGUgZmlsZSBhY3R1YWxseSBsb29rcyBsaWtlCislICBcZW50cnkge3NvcnRzdHJpbmd9e3BhZ2V9e3RvcGljfQorJSBvcgorJSAgXGVudHJ5IHtzb3J0c3RyaW5nfXtwYWdlfXt0b3BpY317c3VidG9waWN9CislIFRoZSB0ZXhpbmRleCBwcm9ncmFtIHJlYWRzIGluIHRoZXNlIGZpbGVzIGFuZCB3cml0ZXMgZmlsZXMKKyUgY29udGFpbmluZyB0aGVzZSBraW5kcyBvZiBsaW5lczoKKyUgIFxpbml0aWFsIHtjfQorJSAgICAgYmVmb3JlIHRoZSBmaXJzdCB0b3BpYyB3aG9zZSBpbml0aWFsIGlzIGMKKyUgIFxlbnRyeSB7dG9waWN9e3BhZ2VsaXN0fQorJSAgICAgZm9yIGEgdG9waWMgdGhhdCBpcyB1c2VkIHdpdGhvdXQgc3VidG9waWNzCislICBccHJpbWFyeSB7dG9waWN9CislICAgICBmb3IgdGhlIGJlZ2lubmluZyBvZiBhIHRvcGljIHRoYXQgaXMgdXNlZCB3aXRoIHN1YnRvcGljcworJSAgXHNlY29uZGFyeSB7c3VidG9waWN9e3BhZ2VsaXN0fQorJSAgICAgZm9yIGVhY2ggc3VidG9waWMuCisKKyUgRGVmaW5lIHRoZSB1c2VyLWFjY2Vzc2libGUgaW5kZXhpbmcgY29tbWFuZHMKKyUgQGZpbmRleCwgQHZpbmRleCwgQGtpbmRleCwgQGNpbmRleC4KKworXGRlZlxmaW5kZXgge1xmbmluZGV4fQorXGRlZlxraW5kZXgge1xreWluZGV4fQorXGRlZlxjaW5kZXgge1xjcGluZGV4fQorXGRlZlx2aW5kZXgge1x2cmluZGV4fQorXGRlZlx0aW5kZXgge1x0cGluZGV4fQorXGRlZlxwaW5kZXgge1xwZ2luZGV4fQorCitcZGVmXGNpbmRleHN1YiB7XGJlZ2luZ3JvdXBcb2JleWxpbmVzXGNpbmRleHN1Yn0KK3tcb2JleWxpbmVzICUKK1xnZGVmXGNpbmRleHN1YiAiIzEiICMyXl5Ne1xlbmRncm91cCAlCitcZG9zdWJpbmR7Y3B9eyMyfXsjMX19fQorCislIERlZmluZSB0aGUgbWFjcm9zIHVzZWQgaW4gZm9ybWF0dGluZyBvdXRwdXQgb2YgdGhlIHNvcnRlZCBpbmRleCBtYXRlcmlhbC4KKworJSBAcHJpbnRpbmRleCBjYXVzZXMgYSBwYXJ0aWN1bGFyIGluZGV4ICh0aGUgPz9zIGZpbGUpIHRvIGdldCBwcmludGVkLgorJSBJdCBkb2VzIG5vdCBwcmludCBhbnkgY2hhcHRlciBoZWFkaW5nICh1c3VhbGx5IGFuIEB1bm51bWJlcmVkKS4KKyUKK1xwYXJzZWFyZ2RlZlxwcmludGluZGV4e1xiZWdpbmdyb3VwCisgIFxkb2JyZWFrIFxjaGFwaGVhZGluZ3NraXB7MTAwMDB9JQorICAlCisgIFxzbWFsbGZvbnRzIFxybQorICBcdG9sZXJhbmNlID0gOTUwMAorICBcZXZlcnlwYXIgPSB7fSUgZG9uJ3Qgd2FudCB0aGUgXGtlcm5cLXBhcmluZGVudCBmcm9tIGluZGVudGF0aW9uIHN1cHByZXNzaW9uLgorICAlCisgICUgU2VlIGlmIHRoZSBpbmRleCBmaWxlIGV4aXN0cyBhbmQgaXMgbm9uZW1wdHkuCisgICUgQ2hhbmdlIGNhdGNvZGUgb2YgQCBoZXJlIHNvIHRoYXQgaWYgdGhlIGluZGV4IGZpbGUgY29udGFpbnMKKyAgJSBcaW5pdGlhbCB7QH0KKyAgJSBhcyBpdHMgZmlyc3QgbGluZSwgVGVYIGRvZXNuJ3QgY29tcGxhaW4gYWJvdXQgbWlzbWF0Y2hlZCBicmFjZXMKKyAgJSAoYmVjYXVzZSBpdCB0aGlua3MgQH0gaXMgYSBjb250cm9sIHNlcXVlbmNlKS4KKyAgXGNhdGNvZGVgXEAgPSAxMQorICBcb3BlbmluIDEgXGpvYm5hbWUuIzFzCisgIFxpZmVvZiAxCisgICAgJSBcZW5kZG91YmxlY29sdW1ucyBnZXRzIGNvbmZ1c2VkIGlmIHRoZXJlIGlzIG5vIHRleHQgaW4gdGhlIGluZGV4LAorICAgICUgYW5kIGl0IGxvc2VzIHRoZSBjaGFwdGVyIHRpdGxlIGFuZCB0aGUgYXV4IGZpbGUgZW50cmllcyBmb3IgdGhlCisgICAgJSBpbmRleC4gIFRoZSBlYXNpZXN0IHdheSB0byBwcmV2ZW50IHRoaXMgcHJvYmxlbSBpcyB0byBtYWtlIHN1cmUKKyAgICAlIHRoZXJlIGlzIHNvbWUgdGV4dC4KKyAgICBccHV0d29yZEluZGV4Tm9uZXhpc3RlbnQKKyAgXGVsc2UKKyAgICAlCisgICAgJSBJZiB0aGUgaW5kZXggZmlsZSBleGlzdHMgYnV0IGlzIGVtcHR5LCB0aGVuIFxvcGVuaW4gbGVhdmVzIFxpZmVvZgorICAgICUgZmFsc2UuICBXZSBoYXZlIHRvIG1ha2UgVGVYIHRyeSB0byByZWFkIHNvbWV0aGluZyBmcm9tIHRoZSBmaWxlLCBzbworICAgICUgaXQgY2FuIGRpc2NvdmVyIGlmIHRoZXJlIGlzIGFueXRoaW5nIGluIGl0LgorICAgIFxyZWFkIDEgdG8gXHRlbXAKKyAgICBcaWZlb2YgMQorICAgICAgXHB1dHdvcmRJbmRleElzRW1wdHkKKyAgICBcZWxzZQorICAgICAgJSBJbmRleCBmaWxlcyBhcmUgYWxtb3N0IFRleGluZm8gc291cmNlLCBidXQgd2UgdXNlIFwgYXMgdGhlIGVzY2FwZQorICAgICAgJSBjaGFyYWN0ZXIuICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIEAsIGJ1dCB0aGF0J3MgdG9vIGJpZyBhIGNoYW5nZQorICAgICAgJSB0byBtYWtlIHJpZ2h0IG5vdy4KKyAgICAgIFxkZWZcaW5kZXhiYWNrc2xhc2h7XGJhY2tzbGFzaGN1cmZvbnR9JQorICAgICAgXGNhdGNvZGVgXFwgPSAwCisgICAgICBcZXNjYXBlY2hhciA9IGBcXAorICAgICAgXGJlZ2luZG91YmxlY29sdW1ucworICAgICAgXGlucHV0IFxqb2JuYW1lLiMxcworICAgICAgXGVuZGRvdWJsZWNvbHVtbnMKKyAgICBcZmkKKyAgXGZpCisgIFxjbG9zZWluIDEKK1xlbmRncm91cH0KKworJSBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgYnkgdGhlIHNvcnRlZCBpbmRleCBmaWxlIGl0c2VsZi4KKyUgQ2hhbmdlIHRoZW0gdG8gY29udHJvbCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgaW5kZXguCisKK1xkZWZcaW5pdGlhbCMxe3slCisgICUgU29tZSBtaW5vciBmb250IGNoYW5nZXMgZm9yIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMuCisgIFxsZXRcdGVudHQ9XHNlY3R0IFxsZXRcdHQ9XHNlY3R0IFxsZXRcc2Y9XHNlY3R0CisgICUKKyAgJSBSZW1vdmUgYW55IGdsdWUgd2UgbWF5IGhhdmUsIHdlJ2xsIGJlIGluc2VydGluZyBvdXIgb3duLgorICBccmVtb3ZlbGFzdHNraXAKKyAgJQorICAlIFdlIGxpa2UgYnJlYWtzIGJlZm9yZSB0aGUgaW5kZXggaW5pdGlhbHMsIHNvIGluc2VydCBhIGJvbnVzLgorICBcbm9icmVhaworICBcdnNraXAgMHB0IHBsdXMgM1xiYXNlbGluZXNraXAKKyAgXHBlbmFsdHkgMAorICBcdnNraXAgMHB0IHBsdXMgLTNcYmFzZWxpbmVza2lwCisgICUKKyAgJSBUeXBlc2V0IHRoZSBpbml0aWFsLiAgTWFraW5nIHRoaXMgYWRkIHVwIHRvIGEgd2hvbGUgbnVtYmVyIG9mCisgICUgYmFzZWxpbmVza2lwcyBpbmNyZWFzZXMgdGhlIGNoYW5jZSBvZiB0aGUgZG90cyBsaW5pbmcgdXAgZnJvbSBjb2x1bW4KKyAgJSB0byBjb2x1bW4uICBJdCBzdGlsbCB3b24ndCBvZnRlbiBiZSBwZXJmZWN0LCBiZWNhdXNlIG9mIHRoZSBzdHJldGNoCisgICUgd2UgbmVlZCBiZWZvcmUgZWFjaCBlbnRyeSwgYnV0IGl0J3MgYmV0dGVyLgorICAlCisgICUgTm8gc2hyaW5rIGJlY2F1c2UgaXQgY29uZnVzZXMgXGJhbGFuY2Vjb2x1bW5zLgorICBcdnNraXAgMS42N1xiYXNlbGluZXNraXAgcGx1cyAuNVxiYXNlbGluZXNraXAKKyAgXGxlZnRsaW5le1xzZWNiZiAjMX0lCisgICUgRG8gb3VyIGJlc3Qgbm90IHRvIGJyZWFrIGFmdGVyIHRoZSBpbml0aWFsLgorICBcbm9icmVhaworICBcdnNraXAgLjMzXGJhc2VsaW5lc2tpcCBwbHVzIC4xXGJhc2VsaW5lc2tpcAorfX0KKworJSBcZW50cnkgdHlwZXNldHMgYSBwYXJhZ3JhcGggY29uc2lzdGluZyBvZiB0aGUgdGV4dCAoIzEpLCBkb3QgbGVhZGVycywgYW5kCislIHRoZW4gcGFnZSBudW1iZXIgKCMyKSBmbHVzaGVkIHRvIHRoZSByaWdodCBtYXJnaW4uICBJdCBpcyB1c2VkIGZvciBpbmRleAorJSBhbmQgdGFibGUgb2YgY29udGVudHMgZW50cmllcy4gIFRoZSBwYXJhZ3JhcGggaXMgaW5kZW50ZWQgYnkgXGxlZnRza2lwLgorJQorJSBBIHN0cmFpZ2h0Zm9yd2FyZCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBzdGFydCBsaWtlIHRoaXM6CislCVxkZWZcZW50cnkjMSMyey4uLgorJSBCdXQgdGhpcyBmcm96ZXMgdGhlIGNhdGNvZGVzIGluIHRoZSBhcmd1bWVudCwgYW5kIGNhbiBjYXVzZSBwcm9ibGVtcyB0bworJSBAY29kZSwgd2hpY2ggc2V0cyAtIGFjdGl2ZS4gIFRoaXMgcHJvYmxlbSB3YXMgZml4ZWQgYnkgYSBrbHVkZ2UtLS0KKyUgYGAtJycgd2FzIGFjdGl2ZSB0aHJvdWdob3V0IHdob2xlIGluZGV4LCBidXQgdGhpcyBpc24ndCByZWFsbHkgcmlnaHQuCislCislIFRoZSByaWdodCBzb2x1dGlvbiBpcyB0byBwcmV2ZW50IFxlbnRyeSBmcm9tIHN3YWxsb3dpbmcgdGhlIHdob2xlIHRleHQuCislICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1rYXNhbCwgMjFub3YwMworXGRlZlxlbnRyeXslCisgIFxiZWdpbmdyb3VwCisgICAgJQorICAgICUgU3RhcnQgYSBuZXcgcGFyYWdyYXBoIGlmIG5lY2Vzc2FyeSwgc28gb3VyIGFzc2lnbm1lbnRzIGJlbG93IGNhbid0CisgICAgJSBhZmZlY3QgcHJldmlvdXMgdGV4dC4KKyAgICBccGFyCisgICAgJQorICAgICUgRG8gbm90IGZpbGwgb3V0IHRoZSBsYXN0IGxpbmUgd2l0aCB3aGl0ZSBzcGFjZS4KKyAgICBccGFyZmlsbHNraXAgPSAwaW4KKyAgICAlCisgICAgJSBObyBleHRyYSBzcGFjZSBhYm92ZSB0aGlzIHBhcmFncmFwaC4KKyAgICBccGFyc2tpcCA9IDBpbgorICAgICUKKyAgICAlIERvIG5vdCBwcmVmZXIgYSBzZXBhcmF0ZSBsaW5lIGVuZGluZyB3aXRoIGEgaHlwaGVuIHRvIGZld2VyIGxpbmVzLgorICAgIFxmaW5hbGh5cGhlbmRlbWVyaXRzID0gMAorICAgICUKKyAgICAlIFxoYW5naW5kZW50IGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgZW50cnkgdGV4dCBhbmQgcGFnZSBudW1iZXIKKyAgICAlIGRvbid0IGJvdGggZml0IG9uIG9uZSBsaW5lLiAgSW4gdGhhdCBjYXNlLCBib2Igc3VnZ2VzdHMgc3RhcnRpbmcgdGhlCisgICAgJSBkb3RzIHByZXR0eSBmYXIgb3ZlciBvbiB0aGUgbGluZS4gIFVuZm9ydHVuYXRlbHksIGEgbGFyZ2UKKyAgICAlIGluZGVudGF0aW9uIGxvb2tzIHdyb25nIHdoZW4gdGhlIGVudHJ5IHRleHQgaXRzZWxmIGlzIGJyb2tlbiBhY3Jvc3MKKyAgICAlIGxpbmVzLiAgU28gd2UgdXNlIGEgc21hbGwgaW5kZW50YXRpb24gYW5kIHB1dCB1cCB3aXRoIGxvbmcgbGVhZGVycy4KKyAgICAlCisgICAgJSBcaGFuZ2FmdGVyIGlzIHJlc2V0IHRvIDEgKHdoaWNoIGlzIHRoZSB2YWx1ZSB3ZSB3YW50KSBhdCB0aGUgc3RhcnQKKyAgICAlIG9mIGVhY2ggcGFyYWdyYXBoLCBzbyB3ZSBuZWVkIG5vdCBkbyBhbnl0aGluZyB3aXRoIHRoYXQuCisgICAgXGhhbmdpbmRlbnQgPSAyZW0KKyAgICAlCisgICAgJSBXaGVuIHRoZSBlbnRyeSB0ZXh0IG5lZWRzIHRvIGJlIGJyb2tlbiwganVzdCBmaWxsIG91dCB0aGUgZmlyc3QgbGluZQorICAgICUgd2l0aCBibGFuayBzcGFjZS4KKyAgICBccmlnaHRza2lwID0gMHB0IHBsdXMxZmlsCisgICAgJQorICAgICUgQSBiaXQgb2Ygc3RyZXRjaCBiZWZvcmUgZWFjaCBlbnRyeSBmb3IgdGhlIGJlbmVmaXQgb2YgYmFsYW5jaW5nCisgICAgJSBjb2x1bW5zLgorICAgIFx2c2tpcCAwcHQgcGx1czFwdAorICAgICUKKyAgICAlIFN3YWxsb3cgdGhlIGxlZnQgYnJhY2Ugb2YgdGhlIHRleHQgKGZpcnN0IHBhcmFtZXRlcik6CisgICAgXGFmdGVyYXNzaWdubWVudFxkb2VudHJ5CisgICAgXGxldFx0ZW1wID0KK30KK1xkZWZcZG9lbnRyeXslCisgICAgXGJncm91cCAlIEluc3RlYWQgb2YgdGhlIHN3YWxsb3dlZCBicmFjZS4KKyAgICAgIFxub2luZGVudAorICAgICAgXGFmdGVyZ3JvdXBcZmluaXNoZW50cnkKKyAgICAgICUgQW5kIG5vdyBjb21lcyB0aGUgdGV4dCBvZiB0aGUgZW50cnkuCit9CitcZGVmXGZpbmlzaGVudHJ5IzF7JQorICAgICUgIzEgaXMgdGhlIHBhZ2UgbnVtYmVyLgorICAgICUKKyAgICAlIFRoZSBmb2xsb3dpbmcgaXMga2x1ZGdlZCB0byBub3Qgb3V0cHV0IGEgbGluZSBvZiBkb3RzIGluIHRoZSBpbmRleCBpZgorICAgICUgdGhlcmUgYXJlIG5vIHBhZ2UgbnVtYmVycy4gIFRoZSBuZXh0IHBlcnNvbiB3aG8gYnJlYWtzIHRoaXMgd2lsbCBiZQorICAgICUgY3Vyc2VkIGJ5IGEgVW5peCBkYWVtb24uCisgICAgXGRlZlx0ZW1wYXt7XHJtIH19JQorICAgIFxkZWZcdGVtcGJ7IzF9JQorICAgIFxlZGVmXHRlbXBje1x0ZW1wYX0lCisgICAgXGVkZWZcdGVtcGR7XHRlbXBifSUKKyAgICBcaWZ4XHRlbXBjXHRlbXBkCisgICAgICBcICUKKyAgICBcZWxzZQorICAgICAgJQorICAgICAgJSBJZiB3ZSBtdXN0LCBwdXQgdGhlIHBhZ2UgbnVtYmVyIG9uIGEgbGluZSBvZiBpdHMgb3duLCBhbmQgZmlsbCBvdXQKKyAgICAgICUgdGhpcyBsaW5lIHdpdGggYmxhbmsgc3BhY2UuICAoVGhlIFxoZmlsIGlzIG92ZXJ3aGVsbWVkIHdpdGggdGhlCisgICAgICAlIGZpbGwgbGVhZGVycyBnbHVlIGluIFxpbmRleGRvdGZpbGwgaWYgdGhlIHBhZ2UgbnVtYmVyIGRvZXMgZml0LikKKyAgICAgIFxoZmlsXHBlbmFsdHk1MAorICAgICAgXG51bGxcbm9icmVha1xpbmRleGRvdGZpbGwgJSBIYXZlIGxlYWRlcnMgYmVmb3JlIHRoZSBwYWdlIG51bWJlci4KKyAgICAgICUKKyAgICAgICUgVGhlIGBcICcgaGVyZSBpcyByZW1vdmVkIGJ5IHRoZSBpbXBsaWNpdCBcdW5za2lwIHRoYXQgVGVYIGRvZXMgYXMKKyAgICAgICUgcGFydCBvZiAodGhlIHByaW1pdGl2ZSkgXHBhci4gIFdpdGhvdXQgaXQsIGEgc3B1cmlvdXMgdW5kZXJmdWxsCisgICAgICAlIFxoYm94IGVuc3Vlcy4KKyAgICAgIFxpZnBkZgorCVxwZGZnZXR0b2tzIzEuJQorCVwgXHRoZVx0b2tzQQorICAgICAgXGVsc2UKKwlcICMxJQorICAgICAgXGZpCisgICAgXGZpCisgICAgXHBhcgorICBcZW5kZ3JvdXAKK30KKworJSBMaWtlIFxkb3RmaWxsIGV4Y2VwdCB0YWtlcyBhdCBsZWFzdCAxIGVtLgorXGRlZlxpbmRleGRvdGZpbGx7XGNsZWFkZXJzCisgIFxoYm94eyRcbWF0aHN1cnJvdW5kPTBwdCBcbWtlcm4xLjVtdSAke1xpdCAufSQgXG1rZXJuMS41bXUkfVxoc2tpcCAxZW0gcGx1cyAxZmlsbH0KKworXGRlZlxwcmltYXJ5ICMxe1xsaW5leyMxXGhmaWx9fQorCitcbmV3c2tpcFxzZWNvbmRhcnlpbmRlbnQgXHNlY29uZGFyeWluZGVudD0wLjVjbQorXGRlZlxzZWNvbmRhcnkjMSMye3slCisgIFxwYXJmaWxsc2tpcD0waW4KKyAgXHBhcnNraXA9MGluCisgIFxoYW5naW5kZW50PTFpbgorICBcaGFuZ2FmdGVyPTEKKyAgXG5vaW5kZW50XGhza2lwXHNlY29uZGFyeWluZGVudFxoYm94eyMxfVxpbmRleGRvdGZpbGwKKyAgXGlmcGRmCisgICAgXHBkZmdldHRva3MjMi5cIFx0aGVcdG9rc0EgJSBUaGUgcGFnZSBudW1iZXIgZW5kcyB0aGUgcGFyYWdyYXBoLgorICBcZWxzZQorICAgICMyCisgIFxmaQorICBccGFyCit9fQorCislIERlZmluZSB0d28tY29sdW1uIG1vZGUsIHdoaWNoIHdlIHVzZSB0byB0eXBlc2V0IGluZGV4ZXMuCislIEFkYXB0ZWQgZnJvbSB0aGUgVGVYYm9vaywgcGFnZSA0MTYsIHdoaWNoIGlzIHRvIHNheSwKKyUgdGhlIG1hbm1hYy50ZXggZm9ybWF0IHVzZWQgdG8gcHJpbnQgdGhlIFRlWGJvb2sgaXRzZWxmLgorXGNhdGNvZGVgXEA9MTEKKworXG5ld2JveFxwYXJ0aWFscGFnZQorXG5ld2RpbWVuXGRvdWJsZWNvbHVtbmhzaXplCisKK1xkZWZcYmVnaW5kb3VibGVjb2x1bW5ze1xiZWdpbmdyb3VwICUgZW5kZWQgYnkgXGVuZGRvdWJsZWNvbHVtbnMKKyAgJSBHcmFiIGFueSBzaW5nbGUtY29sdW1uIG1hdGVyaWFsIGFib3ZlIHVzLgorICBcb3V0cHV0ID0geyUKKyAgICAlCisgICAgJSBIZXJlIGlzIGEgcG9zc2liaWxpdHkgbm90IGZvcmVzZWVuIGluIG1hbm1hYzogaWYgd2UgYWNjdW11bGF0ZSBhCisgICAgJSB3aG9sZSBsb3Qgb2YgbWF0ZXJpYWwsIHdlIG1pZ2h0IGVuZCB1cCBjYWxsaW5nIHRoaXMgXG91dHB1dAorICAgICUgcm91dGluZSB0d2ljZSBpbiBhIHJvdyAoc2VlIHRoZSBkb3VibGVjb2wtbG9zZSB0ZXN0LCB3aGljaCBpcworICAgICUgZXNzZW50aWFsbHkgYSBjb3VwbGUgb2YgaW5kZXhlcyB3aXRoIEBzZXRjaGFwdGVybmV3cGFnZSBvZmYpLiAgSW4KKyAgICAlIHRoYXQgY2FzZSB3ZSBqdXN0IHNoaXAgb3V0IHdoYXQgaXMgaW4gXHBhcnRpYWxwYWdlIHdpdGggdGhlIG5vcm1hbAorICAgICUgb3V0cHV0IHJvdXRpbmUuICBHZW5lcmFsbHksIFxwYXJ0aWFscGFnZSB3aWxsIGJlIGVtcHR5IHdoZW4gdGhpcworICAgICUgcnVucyBhbmQgdGhpcyB3aWxsIGJlIGEgbm8tb3AuICBTZWUgdGhlIGluZGV4c3ByZWFkLnRleCB0ZXN0IGNhc2UuCisgICAgXGlmdm9pZFxwYXJ0aWFscGFnZSBcZWxzZQorICAgICAgXG9uZXBhZ2VvdXR7XHBhZ2Vjb250ZW50c1xwYXJ0aWFscGFnZX0lCisgICAgXGZpCisgICAgJQorICAgIFxnbG9iYWxcc2V0Ym94XHBhcnRpYWxwYWdlID0gXHZib3h7JQorICAgICAgJSBVbnZib3ggdGhlIG1haW4gb3V0cHV0IHBhZ2UuCisgICAgICBcdW52Ym94XFBBR0UKKyAgICAgIFxrZXJuLVx0b3Bza2lwIFxrZXJuXGJhc2VsaW5lc2tpcAorICAgIH0lCisgIH0lCisgIFxlamVjdCAlIHJ1biB0aGF0IG91dHB1dCByb3V0aW5lIHRvIHNldCBccGFydGlhbHBhZ2UKKyAgJQorICAlIFVzZSB0aGUgZG91YmxlLWNvbHVtbiBvdXRwdXQgcm91dGluZSBmb3Igc3Vic2VxdWVudCBwYWdlcy4KKyAgXG91dHB1dCA9IHtcZG91YmxlY29sdW1ub3V0fSUKKyAgJQorICAlIENoYW5nZSB0aGUgcGFnZSBzaXplIHBhcmFtZXRlcnMuICBXZSBjb3VsZCBkbyB0aGlzIG9uY2Ugb3V0c2lkZSB0aGlzCisgICUgcm91dGluZSwgaW4gZWFjaCBvZiBAc21hbGxib29rLCBAYWZvdXJwYXBlciwgYW5kIHRoZSBkZWZhdWx0IDguNXgxMQorICAlIGZvcm1hdCwgYnV0IHRoZW4gd2UgcmVwZWF0IHRoZSBzYW1lIGNvbXB1dGF0aW9uLiAgUmVwZWF0aW5nIGEgY291cGxlCisgICUgb2YgYXNzaWdubWVudHMgb25jZSBwZXIgaW5kZXggaXMgY2xlYXJseSBtZWFuaW5nbGVzcyBmb3IgdGhlCisgICUgZXhlY3V0aW9uIHRpbWUsIHNvIHdlIG1heSBhcyB3ZWxsIGRvIGl0IGluIG9uZSBwbGFjZS4KKyAgJQorICAlIEZpcnN0IHdlIGhhbHZlIHRoZSBsaW5lIGxlbmd0aCwgbGVzcyBhIGxpdHRsZSBmb3IgdGhlIGd1dHRlciBiZXR3ZWVuCisgICUgdGhlIGNvbHVtbnMuICBXZSBjb21wdXRlIHRoZSBndXR0ZXIgYmFzZWQgb24gdGhlIGxpbmUgbGVuZ3RoLCBzbyBpdAorICAlIGNoYW5nZXMgYXV0b21hdGljYWxseSB3aXRoIHRoZSBwYXBlciBmb3JtYXQuICBUaGUgbWFnaWMgY29uc3RhbnQKKyAgJSBiZWxvdyBpcyBjaG9zZW4gc28gdGhhdCB0aGUgZ3V0dGVyIGhhcyB0aGUgc2FtZSB2YWx1ZSAod2VsbCwgKy08MXB0KQorICAlIGFzIGl0IGRpZCB3aGVuIHdlIGhhcmQtY29kZWQgaXQuCisgICUKKyAgJSBXZSBwdXQgdGhlIHJlc3VsdCBpbiBhIHNlcGFyYXRlIHJlZ2lzdGVyLCBcZG91YmxlY29sdW1oc2l6ZSwgc28gd2UKKyAgJSBjYW4gcmVzdG9yZSBpdCBpbiBccGFnZXNvZmFyLCBhZnRlciBcaHNpemUgaXRzZWxmIGhhcyAocG90ZW50aWFsbHkpCisgICUgYmVlbiBjbG9iYmVyZWQuCisgICUKKyAgXGRvdWJsZWNvbHVtbmhzaXplID0gXGhzaXplCisgICAgXGFkdmFuY2VcZG91YmxlY29sdW1uaHNpemUgYnkgLS4wNDE1NFxoc2l6ZQorICAgIFxkaXZpZGVcZG91YmxlY29sdW1uaHNpemUgYnkgMgorICBcaHNpemUgPSBcZG91YmxlY29sdW1uaHNpemUKKyAgJQorICAlIERvdWJsZSB0aGUgXHZzaXplIGFzIHdlbGwuICAoV2UgZG9uJ3QgbmVlZCBhIHNlcGFyYXRlIHJlZ2lzdGVyIGhlcmUsCisgICUgc2luY2Ugbm9ib2R5IGNsb2JiZXJzIFx2c2l6ZS4pCisgIFx2c2l6ZSA9IDJcdnNpemUKK30KKworJSBUaGUgZG91YmxlLWNvbHVtbiBvdXRwdXQgcm91dGluZSBmb3IgYWxsIGRvdWJsZS1jb2x1bW4gcGFnZXMgZXhjZXB0CislIHRoZSBsYXN0LgorJQorXGRlZlxkb3VibGVjb2x1bW5vdXR7JQorICBcc3BsaXR0b3Bza2lwPVx0b3Bza2lwIFxzcGxpdG1heGRlcHRoPVxtYXhkZXB0aAorICAlIEdldCB0aGUgYXZhaWxhYmxlIHNwYWNlIGZvciB0aGUgZG91YmxlIGNvbHVtbnMgLS0gdGhlIG5vcm1hbAorICAlICh1bmRvdWJsZWQpIHBhZ2UgaGVpZ2h0IG1pbnVzIGFueSBtYXRlcmlhbCBsZWZ0IG92ZXIgZnJvbSB0aGUKKyAgJSBwcmV2aW91cyBwYWdlLgorICBcZGltZW5AID0gXHZzaXplCisgIFxkaXZpZGVcZGltZW5AIGJ5IDIKKyAgXGFkdmFuY2VcZGltZW5AIGJ5IC1caHRccGFydGlhbHBhZ2UKKyAgJQorICAlIGJveDAgd2lsbCBiZSB0aGUgbGVmdC1oYW5kIGNvbHVtbiwgYm94MiB0aGUgcmlnaHQuCisgIFxzZXRib3gwPVx2c3BsaXQyNTUgdG9cZGltZW5AIFxzZXRib3gyPVx2c3BsaXQyNTUgdG9cZGltZW5ACisgIFxvbmVwYWdlb3V0XHBhZ2Vzb2ZhcgorICBcdW52Ym94MjU1CisgIFxwZW5hbHR5XG91dHB1dHBlbmFsdHkKK30KKyUKKyUgUmUtb3V0cHV0IHRoZSBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHBhZ2UgLS0gYW55IHByZXZpb3VzIG1hdGVyaWFsLAorJSBmb2xsb3dlZCBieSB0aGUgdHdvIGJveGVzIHdlIGp1c3Qgc3BsaXQsIGluIGJveDAgYW5kIGJveDIuCitcZGVmXHBhZ2Vzb2ZhcnslCisgIFx1bnZib3hccGFydGlhbHBhZ2UKKyAgJQorICBcaHNpemUgPSBcZG91YmxlY29sdW1uaHNpemUKKyAgXHdkMD1caHNpemUgXHdkMj1caHNpemUKKyAgXGhib3ggdG9ccGFnZXdpZHRoe1xib3gwXGhmaWxcYm94Mn0lCit9CislCislIEFsbCBkb25lIHdpdGggZG91YmxlIGNvbHVtbnMuCitcZGVmXGVuZGRvdWJsZWNvbHVtbnN7JQorICBcb3V0cHV0ID0geyUKKyAgICAlIFNwbGl0IHRoZSBsYXN0IG9mIHRoZSBkb3VibGUtY29sdW1uIG1hdGVyaWFsLiAgTGVhdmUgaXQgb24gdGhlCisgICAgJSBjdXJyZW50IHBhZ2UsIG5vIGF1dG9tYXRpYyBwYWdlIGJyZWFrLgorICAgIFxiYWxhbmNlY29sdW1ucworICAgICUKKyAgICAlIElmIHdlIGVuZCB1cCBzcGxpdHRpbmcgdG9vIG11Y2ggbWF0ZXJpYWwgZm9yIHRoZSBjdXJyZW50IHBhZ2UsCisgICAgJSB0aG91Z2gsIHRoZXJlIHdpbGwgYmUgYW5vdGhlciBwYWdlIGJyZWFrIHJpZ2h0IGFmdGVyIHRoaXMgXG91dHB1dAorICAgICUgaW52b2NhdGlvbiBlbmRzLiAgSGF2aW5nIGNhbGxlZCBcYmFsYW5jZWNvbHVtbnMgb25jZSwgd2UgZG8gbm90CisgICAgJSB3YW50IHRvIGNhbGwgaXQgYWdhaW4uICBUaGVyZWZvcmUsIHJlc2V0IFxvdXRwdXQgdG8gaXRzIG5vcm1hbAorICAgICUgZGVmaW5pdGlvbiByaWdodCBhd2F5LiAgKFdlIGhvcGUgXGJhbGFuY2Vjb2x1bW5zIHdpbGwgbmV2ZXIgYmUKKyAgICAlIGNhbGxlZCBvbiB0byBiYWxhbmNlIHRvbyBtdWNoIG1hdGVyaWFsLCBidXQgaWYgaXQgaXMsIHRoaXMgbWFrZXMKKyAgICAlIHRoZSBvdXRwdXQgc29tZXdoYXQgbW9yZSBwYWxhdGFibGUuKQorICAgIFxnbG9iYWxcb3V0cHV0ID0ge1xvbmVwYWdlb3V0e1xwYWdlY29udGVudHNcUEFHRX19JQorICB9JQorICBcZWplY3QKKyAgXGVuZGdyb3VwICUgc3RhcnRlZCBpbiBcYmVnaW5kb3VibGVjb2x1bW5zCisgICUKKyAgJSBccGFnZWdvYWwgd2FzIHNldCB0byB0aGUgZG91YmxlZCBcdnNpemUgYWJvdmUsIHNpbmNlIHdlIHJlc3RhcnRlZAorICAlIHRoZSBjdXJyZW50IHBhZ2UuICBXZSdyZSBub3cgYmFjayB0byBub3JtYWwgc2luZ2xlLWNvbHVtbgorICAlIHR5cGVzZXR0aW5nLCBzbyByZXNldCBccGFnZWdvYWwgdG8gdGhlIG5vcm1hbCBcdnNpemUgKGFmdGVyIHRoZQorICAlIFxlbmRncm91cCB3aGVyZSBcdnNpemUgZ290IHJlc3RvcmVkKS4KKyAgXHBhZ2Vnb2FsID0gXHZzaXplCit9CislCislIENhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBkb3VibGUgY29sdW1uIG1hdGVyaWFsLgorXGRlZlxiYWxhbmNlY29sdW1uc3slCisgIFxzZXRib3gwID0gXHZib3h7XHVudmJveDI1NX0lIGxpa2UgXGJveDI1NSBidXQgbW9yZSBlZmZpY2llbnQsIHNlZSBwLjEyMC4KKyAgXGRpbWVuQCA9IFxodDAKKyAgXGFkdmFuY2VcZGltZW5AIGJ5IFx0b3Bza2lwCisgIFxhZHZhbmNlXGRpbWVuQCBieS1cYmFzZWxpbmVza2lwCisgIFxkaXZpZGVcZGltZW5AIGJ5IDIgJSB0YXJnZXQgdG8gc3BsaXQgdG8KKyAgJWRlYnVnXG1lc3NhZ2V7ZmluYWwgMi1jb2x1bW4gbWF0ZXJpYWwgaGVpZ2h0PVx0aGVcaHQwLCB0YXJnZXQ9XHRoZVxkaW1lbkAufSUKKyAgXHNwbGl0dG9wc2tpcCA9IFx0b3Bza2lwCisgICUgTG9vcCB1bnRpbCB3ZSBnZXQgYSBkZWNlbnQgYnJlYWtwb2ludC4KKyAgeyUKKyAgICBcdmJhZG5lc3MgPSAxMDAwMAorICAgIFxsb29wCisgICAgICBcZ2xvYmFsXHNldGJveDMgPSBcY29weTAKKyAgICAgIFxnbG9iYWxcc2V0Ym94MSA9IFx2c3BsaXQzIHRvIFxkaW1lbkAKKyAgICBcaWZkaW1caHQzPlxkaW1lbkAKKyAgICAgIFxnbG9iYWxcYWR2YW5jZVxkaW1lbkAgYnkgMXB0CisgICAgXHJlcGVhdAorICB9JQorICAlZGVidWdcbWVzc2FnZXtzcGxpdCB0byBcdGhlXGRpbWVuQCwgY29sdW1uIGhlaWdodHM6IFx0aGVcaHQxLCBcdGhlXGh0My59JQorICBcc2V0Ym94MD1cdmJveCB0b1xkaW1lbkB7XHVudmJveDF9JQorICBcc2V0Ym94Mj1cdmJveCB0b1xkaW1lbkB7XHVudmJveDN9JQorICAlCisgIFxwYWdlc29mYXIKK30KK1xjYXRjb2RlYFxAID0gXG90aGVyCisKKworXG1lc3NhZ2V7c2VjdGlvbmluZyx9CislIENoYXB0ZXJzLCBzZWN0aW9ucywgZXRjLgorCislIFx1bm51bWJlcmVkbm8gaXMgYW4gb3h5bW9yb24sIG9mIGNvdXJzZS4gIEJ1dCB3ZSBjb3VudCB0aGUgdW5udW1iZXJlZAorJSBzZWN0aW9ucyBzbyB0aGF0IHdlIGNhbiByZWZlciB0byB0aGVtIHVuYW1iaWd1b3VzbHkgaW4gdGhlIHBkZgorJSBvdXRsaW5lcyBieSB0aGVpciAic2VjdGlvbiBudW1iZXIiLiAgV2UgYXZvaWQgY29sbGlzaW9ucyB3aXRoIGNoYXB0ZXIKKyUgbnVtYmVycyBieSBzdGFydGluZyB0aGVtIGF0IDEwMDAwLiAgKElmIGEgZG9jdW1lbnQgZXZlciBoYXMgMTAwMDAKKyUgY2hhcHRlcnMsIHdlJ3JlIGluIHRyb3VibGUgYW55d2F5LCBJJ20gc3VyZS4pCitcbmV3Y291bnRcdW5udW1iZXJlZG5vIFx1bm51bWJlcmVkbm8gPSAxMDAwMAorXG5ld2NvdW50XGNoYXBubworXG5ld2NvdW50XHNlY25vICAgICAgICBcc2Vjbm89MAorXG5ld2NvdW50XHN1YnNlY25vICAgICBcc3Vic2Vjbm89MAorXG5ld2NvdW50XHN1YnN1YnNlY25vICBcc3Vic3Vic2Vjbm89MAorCislIFRoaXMgY291bnRlciBpcyBmdW5ueSBzaW5jZSBpdCBjb3VudHMgdGhyb3VnaCBjaGFyY29kZXMgb2YgbGV0dGVycyBBLCBCLCAuLi4KK1xuZXdjb3VudFxhcHBlbmRpeG5vICBcYXBwZW5kaXhubyA9IGBcQAorJQorJSBcZGVmXGFwcGVuZGl4bGV0dGVye1xjaGFyXHRoZVxhcHBlbmRpeG5vfQorJSBXZSBkbyB0aGUgZm9sbG93aW5nIHVnbHkgY29uZGl0aW9uYWwgaW5zdGVhZCBvZiB0aGUgYWJvdmUgc2ltcGxlCislIGNvbnN0cnVjdCBmb3IgdGhlIHNha2Ugb2YgcGRmdGV4LCB3aGljaCBuZWVkcyB0aGUgYWN0dWFsCislIGxldHRlciBpbiB0aGUgZXhwYW5zaW9uLCBub3QganVzdCB0eXBlc2V0LgorJQorXGRlZlxhcHBlbmRpeGxldHRlcnslCisgIFxpZm51bVxhcHBlbmRpeG5vPWBBIEElCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEIgQiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gQyBDJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBEIEQlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEUgRSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRiBGJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBHIEclCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEggSCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSSBJJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBKIEolCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEsgSyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTCBMJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBNIE0lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE4gTiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTyBPJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBQIFAlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFEgUSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUiBSJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBTIFMlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFQgVCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gVSBVJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBWIFYlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFcgVyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWCBYJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBZIFklCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFogWiUKKyAgJSBUaGUgXHRoZSBpcyBuZWNlc3NhcnksIGRlc3BpdGUgYXBwZWFyYW5jZXMsIGJlY2F1c2UgXGFwcGVuZGl4bGV0dGVyIGlzCisgICUgZXhwYW5kZWQgd2hpbGUgd3JpdGluZyB0aGUgLnRvYyBmaWxlLiAgXGNoYXJcYXBwZW5kaXhubyBpcyBub3QKKyAgJSBleHBhbmRhYmxlLCB0aHVzIGl0IGlzIHdyaXR0ZW4gbGl0ZXJhbGx5LCB0aHVzIGFsbCBhcHBlbmRpeGVzIGNvbWUgb3V0CisgICUgd2l0aCB0aGUgc2FtZSBsZXR0ZXIgKG9yIEApIGluIHRoZSB0b2Mgd2l0aG91dCBpdC4KKyAgXGVsc2VcY2hhclx0aGVcYXBwZW5kaXhubworICBcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmkKKyAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpfQorCislIEVhY2ggQGNoYXB0ZXIgZGVmaW5lcyB0aGlzIGFzIHRoZSBuYW1lIG9mIHRoZSBjaGFwdGVyLgorJSBwYWdlIGhlYWRpbmdzIGFuZCBmb290aW5ncyBjYW4gdXNlIGl0LiAgQHNlY3Rpb24gZG9lcyBsaWtld2lzZS4KKyUgSG93ZXZlciwgdGhleSBhcmUgbm90IHJlbGlhYmxlLCBiZWNhdXNlIHdlIGRvbid0IHVzZSBtYXJrcy4KK1xkZWZcdGhpc2NoYXB0ZXJ7fQorXGRlZlx0aGlzc2VjdGlvbnt9CisKK1xuZXdjb3VudFxhYnNzZWNsZXZlbCAlIHVzZWQgdG8gY2FsY3VsYXRlIHByb3BlciBoZWFkaW5nIGxldmVsCitcbmV3Y291bnRcc2VjYmFzZVxzZWNiYXNlPTAgJSBAcmFpc2VzZWN0aW9ucy9AbG93ZXJzZWN0aW9ucyBtb2RpZnkgdGhpcyBjb3VudAorCislIEByYWlzZXNlY3Rpb25zOiB0cmVhdCBAc2VjdGlvbiBhcyBjaGFwdGVyLCBAc3Vic2VjdGlvbiBhcyBzZWN0aW9uLCBldGMuCitcZGVmXHJhaXNlc2VjdGlvbnN7XGdsb2JhbFxhZHZhbmNlXHNlY2Jhc2UgYnkgLTF9CitcbGV0XHVwPVxyYWlzZXNlY3Rpb25zICUgb3JpZ2luYWwgQkZveCBuYW1lCisKKyUgQGxvd2Vyc2VjdGlvbnM6IHRyZWF0IEBjaGFwdGVyIGFzIHNlY3Rpb24sIEBzZWN0aW9uIGFzIHN1YnNlY3Rpb24sIGV0Yy4KK1xkZWZcbG93ZXJzZWN0aW9uc3tcZ2xvYmFsXGFkdmFuY2Vcc2VjYmFzZSBieSAxfQorXGxldFxkb3duPVxsb3dlcnNlY3Rpb25zICUgb3JpZ2luYWwgQkZveCBuYW1lCisKKyUgd2Ugb25seSBoYXZlIHN1YnN1Yi4KK1xjaGFyZGVmXG1heHNlY2xldmVsID0gMworJQorJSBBIG51bWJlcmVkIHNlY3Rpb24gd2l0aGluIGFuIHVubnVtYmVyZWQgY2hhbmdlcyB0byB1bm51bWJlcmVkIHRvby4KKyUgVG8gYWNoaXZlIHRoaXMsIHJlbWVtYmVyIHRoZSAiYmlnZ2VzdCIgdW5udW0uIHNlYy4gd2UgYXJlIGN1cnJlbnRseSBpbjoKK1xjaGFyZGVmXHVubWxldmVsID0gXG1heHNlY2xldmVsCislCislIFRyYWNlIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2hhcHRlciBpcyBhbiBhcHBlbmRpeCBvciBub3Q6CislIFxjaGFwaGVhZHR5cGUgaXMgIk4iIG9yICJBIiwgdW5udW1iZXJlZCBjaGFwdGVycyBhcmUgaWdub3JlZC4KK1xkZWZcY2hhcGhlYWR0eXBle059CisKKyUgQ2hvb3NlIGEgaGVhZGluZyBtYWNybworJSAjMSBpcyBoZWFkaW5nIHR5cGUKKyUgIzIgaXMgaGVhZGluZyBsZXZlbAorJSAjMyBpcyB0ZXh0IGZvciBoZWFkaW5nCitcZGVmXGdlbmhlYWQjMSMyIzN7JQorICAlIENvbXB1dGUgdGhlIGFicy4gc2VjLiBsZXZlbDoKKyAgXGFic3NlY2xldmVsPSMyCisgIFxhZHZhbmNlXGFic3NlY2xldmVsIGJ5IFxzZWNiYXNlCisgICUgTWFrZSBzdXJlIFxhYnNzZWNsZXZlbCBkb2Vzbid0IGZhbGwgb3V0c2lkZSB0aGUgcmFuZ2U6CisgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPCAwCisgICAgXGFic3NlY2xldmVsID0gMAorICBcZWxzZQorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPiAzCisgICAgICBcYWJzc2VjbGV2ZWwgPSAzCisgICAgXGZpCisgIFxmaQorICAlIFRoZSBoZWFkaW5nIHR5cGU6CisgIFxkZWZcaGVhZHR5cGV7IzF9JQorICBcaWYgXGhlYWR0eXBlIFUlCisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA8IFx1bm1sZXZlbAorICAgICAgXGNoYXJkZWZcdW5tbGV2ZWwgPSBcYWJzc2VjbGV2ZWwKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIENoZWNrIGZvciBhcHBlbmRpeCBzZWN0aW9uczoKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID0gMAorICAgICAgXGVkZWZcY2hhcGhlYWR0eXBle1xoZWFkdHlwZX0lCisgICAgXGVsc2UKKyAgICAgIFxpZiBcaGVhZHR5cGUgQVxpZiBcY2hhcGhlYWR0eXBlIE4lCisJXGVycm1lc3NhZ2V7QGFwcGVuZGl4Li4uIHdpdGhpbiBhIG5vbi1hcHBlbmRpeCBjaGFwdGVyfSUKKyAgICAgIFxmaVxmaQorICAgIFxmaQorICAgICUgQ2hlY2sgZm9yIG51bWJlcmVkIHdpdGhpbiB1bm51bWJlcmVkOgorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPiBcdW5tbGV2ZWwKKyAgICAgIFxkZWZcaGVhZHR5cGV7VX0lCisgICAgXGVsc2UKKyAgICAgIFxjaGFyZGVmXHVubWxldmVsID0gMworICAgIFxmaQorICBcZmkKKyAgJSBOb3cgcHJpbnQgdGhlIGhlYWRpbmc6CisgIFxpZiBcaGVhZHR5cGUgVSUKKyAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJXHVubnVtYmVyZWR6enp7IzN9JQorICAgIFxvciBcdW5udW1iZXJlZHNlY3p6ensjM30lCisgICAgXG9yIFx1bm51bWJlcmVkc3Vic2Vjenp6eyMzfSUKKyAgICBcb3IgXHVubnVtYmVyZWRzdWJzdWJzZWN6enp7IzN9JQorICAgIFxmaQorICBcZWxzZQorICAgIFxpZiBcaGVhZHR5cGUgQSUKKyAgICAgIFxpZmNhc2VcYWJzc2VjbGV2ZWwKKwkgIFxhcHBlbmRpeHp6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c2VjdGlvbnp6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c3Vic2Vjenp6eyMzfSUKKyAgICAgIFxvciBcYXBwZW5kaXhzdWJzdWJzZWN6enp7IzN9JQorICAgICAgXGZpCisgICAgXGVsc2UKKyAgICAgIFxpZmNhc2VcYWJzc2VjbGV2ZWwKKwkgIFxjaGFwdGVyenp6eyMzfSUKKyAgICAgIFxvciBcc2Vjenp6eyMzfSUKKyAgICAgIFxvciBcbnVtYmVyZWRzdWJzZWN6enp7IzN9JQorICAgICAgXG9yIFxudW1iZXJlZHN1YnN1YnNlY3p6ensjM30lCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGZpCisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50Cit9CisKKyUgYW4gaW50ZXJmYWNlOgorXGRlZlxudW1oZWFke1xnZW5oZWFkIE59CitcZGVmXGFwcGhlYWR7XGdlbmhlYWQgQX0KK1xkZWZcdW5ubWhlYWR7XGdlbmhlYWQgVX0KKworJSBAY2hhcHRlciwgQGFwcGVuZGl4LCBAdW5udW1iZXJlZC4gIEluY3JlbWVudCB0b3AtbGV2ZWwgY291bnRlciwgcmVzZXQKKyUgYWxsIGxvd2VyLWxldmVsIHNlY3Rpb25pbmcgY291bnRlcnMgdG8gemVyby4KKyUKKyUgQWxzbyBzZXQgXGNoYXBsZXZlbHByZWZpeCwgd2hpY2ggd2UgcHJlcGVuZCB0byBAZmxvYXQgc2VxdWVuY2UgbnVtYmVycworJSAoZS5nLiwgZmlndXJlcyksIHEudi4gIEJ5IGRlZmF1bHQgKGJlZm9yZSBhbnkgY2hhcHRlciksIHRoYXQgaXMgZW1wdHkuCitcbGV0XGNoYXBsZXZlbHByZWZpeCA9IFxlbXB0eQorJQorXG91dGVyXHBhcnNlYXJnZGVmXGNoYXB0ZXJ7XG51bWhlYWQweyMxfX0gJSBub3JtYWxseSBudW1oZWFkMCBjYWxscyBjaGFwdGVyenp6CitcZGVmXGNoYXB0ZXJ6enojMXslCisgICUgc2VjdGlvbiByZXNldHRpbmcgaXMgXGdsb2JhbCBpbiBjYXNlIHRoZSBjaGFwdGVyIGlzIGluIGEgZ3JvdXAsIHN1Y2gKKyAgJSBhcyBhbiBAaW5jbHVkZSBmaWxlLgorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVxjaGFwbm8gYnkgMQorICAlCisgICUgVXNlZCBmb3IgXGZsb2F0LgorICBcZ2RlZlxjaGFwbGV2ZWxwcmVmaXh7XHRoZVxjaGFwbm8ufSUKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICBcbWVzc2FnZXtccHV0d29yZENoYXB0ZXJcc3BhY2UgXHRoZVxjaGFwbm99JQorICAlCisgICUgV3JpdGUgdGhlIGFjdHVhbCBoZWFkaW5nLgorICBcY2hhcG1hY3JveyMxfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vfSUKKyAgJQorICAlIFNvIEBzZWN0aW9uIGFuZCB0aGUgbGlrZSBhcmUgbnVtYmVyZWQgdW5kZXJuZWF0aCB0aGlzIGNoYXB0ZXIuCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcbnVtYmVyZWRzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic3Vic2VjCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHtcYXBwaGVhZDB7IzF9fSAlIG5vcm1hbGx5IGFwcGhlYWQwIGNhbGxzIGFwcGVuZGl4enp6CitcZGVmXGFwcGVuZGl4enp6IzF7JQorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVxhcHBlbmRpeG5vIGJ5IDEKKyAgXGdkZWZcY2hhcGxldmVscHJlZml4e1xhcHBlbmRpeGxldHRlci59JQorICBccmVzZXRhbGxmbG9hdG5vcworICAlCisgIFxkZWZcYXBwZW5kaXhudW17XHB1dHdvcmRBcHBlbmRpeFxzcGFjZSBcYXBwZW5kaXhsZXR0ZXJ9JQorICBcbWVzc2FnZXtcYXBwZW5kaXhudW19JQorICAlCisgIFxjaGFwbWFjcm97IzF9e1lhcHBlbmRpeH17XGFwcGVuZGl4bGV0dGVyfSUKKyAgJQorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXGFwcGVuZGl4c2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcYXBwZW5kaXhzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFxhcHBlbmRpeHN1YnN1YnNlYworfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHtcdW5ubWhlYWQweyMxfX0gJSBub3JtYWxseSB1bm5taGVhZDAgY2FsbHMgdW5udW1iZXJlZHp6egorXGRlZlx1bm51bWJlcmVkenp6IzF7JQorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVx1bm51bWJlcmVkbm8gYnkgMQorICAlCisgICUgU2luY2UgYW4gdW5udW1iZXJlZCBoYXMgbm8gbnVtYmVyLCBubyBwcmVmaXggZm9yIGZpZ3VyZXMuCisgIFxnbG9iYWxcbGV0XGNoYXBsZXZlbHByZWZpeCA9IFxlbXB0eQorICBccmVzZXRhbGxmbG9hdG5vcworICAlCisgICUgVGhpcyB1c2VkIHRvIGJlIHNpbXBseSBcbWVzc2FnZXsjMX0sIGJ1dCBUZVggZnVsbHkgZXhwYW5kcyB0aGUKKyAgJSBhcmd1bWVudCB0byBcbWVzc2FnZS4gIFRoZXJlZm9yZSwgaWYgIzEgY29udGFpbmVkIEAtY29tbWFuZHMsIFRlWAorICAlIGV4cGFuZGVkIHRoZW0uICBGb3IgZXhhbXBsZSwgaW4gYEB1bm51bWJlcmVkIFRoZSBAY2l0ZXtCb29rfScsIFRlWAorICAlIGV4cGFuZGVkIEBjaXRlICh3aGljaCB0dXJucyBvdXQgdG8gY2F1c2UgZXJyb3JzIGJlY2F1c2UgXGNpdGUgaXMgbWVhbnQKKyAgJSB0byBiZSBleGVjdXRlZCwgbm90IGV4cGFuZGVkKS4KKyAgJQorICAlIEFueXdheSwgd2UgZG9uJ3Qgd2FudCB0aGUgZnVsbHktZXhwYW5kZWQgZGVmaW5pdGlvbiBvZiBAY2l0ZSB0byBhcHBlYXIKKyAgJSBhcyBhIHJlc3VsdCBvZiB0aGUgXG1lc3NhZ2UsIHdlIGp1c3Qgd2FudCBgQGNpdGUnIGl0c2VsZi4gIFdlIHVzZQorICAlIFx0aGU8dG9rcyByZWdpc3Rlcj4gdG8gYWNoaWV2ZSB0aGlzOiBUZVggZXhwYW5kcyBcdGhlPHRva3M+IG9ubHkgb25jZSwKKyAgJSBzaW1wbHkgeWllbGRpbmcgdGhlIGNvbnRlbnRzIG9mIDx0b2tzIHJlZ2lzdGVyPi4gIChXZSBhbHNvIGRvIHRoaXMgZm9yCisgICUgdGhlIHRvYyBlbnRyaWVzLikKKyAgXHRva3MwID0geyMxfSUKKyAgXG1lc3NhZ2V7KFx0aGVcdG9rczApfSUKKyAgJQorICBcY2hhcG1hY3JveyMxfXtZbm90aGluZ317XHRoZVx1bm51bWJlcmVkbm99JQorICAlCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcdW5udW1iZXJlZHNlYworICBcZ2xvYmFsXGxldFxzdWJzZWN0aW9uID0gXHVubnVtYmVyZWRzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFx1bm51bWJlcmVkc3Vic3Vic2VjCit9CisKKyUgQGNlbnRlcmNoYXAgaXMgbGlrZSBAdW5udW1iZXJlZCwgYnV0IHRoZSBoZWFkaW5nIGlzIGNlbnRlcmVkLgorXG91dGVyXHBhcnNlYXJnZGVmXGNlbnRlcmNoYXB7JQorICAlIFdlbGwsIHdlIGNvdWxkIGRvIHRoZSBmb2xsb3dpbmcgaW4gYSBncm91cCwgYnV0IHRoYXQgd291bGQgYnJlYWsKKyAgJSBhbiBhc3N1bXB0aW9uIHRoYXQgXGNoYXBtYWNybyBpcyBjYWxsZWQgYXQgdGhlIG91dGVybW9zdCBsZXZlbC4KKyAgJSBUaHVzIHdlIGFyZSBzYWZlciB0aGlzIHdheToJCS0ta2FzYWwsIDI0ZmViMDQKKyAgXGxldFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUgPSBcY2VudGVycGFyYW1ldGVycworICBcdW5ubWhlYWQweyMxfSUKKyAgXGxldFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUgPSBccmVsYXgKK30KKworJSBAdG9wIGlzIGxpa2UgQHVubnVtYmVyZWQuCitcbGV0XHRvcFx1bm51bWJlcmVkCisKKyUgU2VjdGlvbnMuCitcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzZWN7XG51bWhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyBzZWN6enoKK1xkZWZcc2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW51bWJlcmVkfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c2VjdGlvbntcYXBwaGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIGFwcGVuZGl4c2VjdGlvbnp6egorXGRlZlxhcHBlbmRpeHNlY3Rpb256enojMXslCisgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZYXBwZW5kaXh9e1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vfSUKK30KK1xsZXRcYXBwZW5kaXhzZWNcYXBwZW5kaXhzZWN0aW9uCisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVkc2Vje1x1bm5taGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIHVubnVtYmVyZWRzZWN6enoKK1xkZWZcdW5udW1iZXJlZHNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lub3RoaW5nfXtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vfSUKK30KKworJSBTdWJzZWN0aW9ucy4KK1xvdXRlclxwYXJzZWFyZ2RlZlxudW1iZXJlZHN1YnNlY3tcbnVtaGVhZDJ7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIG51bWJlcmVkc3Vic2Vjenp6CitcZGVmXG51bWJlcmVkc3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHN1YnNlY3tcYXBwaGVhZDJ7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIGFwcGVuZGl4c3Vic2Vjenp6CitcZGVmXGFwcGVuZGl4c3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZYXBwZW5kaXh9JQorICAgICAgICAgICAgICAgICB7XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVkc3Vic2Vje1x1bm5taGVhZDJ7IzF9fSAlbm9ybWFsbHkgY2FsbHMgdW5udW1iZXJlZHN1YnNlY3p6egorXGRlZlx1bm51bWJlcmVkc3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZbm90aGluZ30lCisgICAgICAgICAgICAgICAgIHtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCislIFN1YnN1YnNlY3Rpb25zLgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc3Vic3Vic2Vje1xudW1oZWFkM3sjMX19ICUgbm9ybWFsbHkgbnVtYmVyZWRzdWJzdWJzZWN6enoKK1xkZWZcbnVtYmVyZWRzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZbnVtYmVyZWR9JQorICAgICAgICAgICAgICAgICB7XHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzdWJzdWJzZWN7XGFwcGhlYWQzeyMxfX0gJSBub3JtYWxseSBhcHBlbmRpeHN1YnN1YnNlY3p6egorXGRlZlxhcHBlbmRpeHN1YnN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHN1YnN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1lhcHBlbmRpeH0lCisgICAgICAgICAgICAgICAgIHtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHN1YnN1YnNlY3tcdW5ubWhlYWQzeyMxfX0gJW5vcm1hbGx5IHVubnVtYmVyZWRzdWJzdWJzZWN6enoKK1xkZWZcdW5udW1iZXJlZHN1YnN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHN1YnN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1lub3RoaW5nfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcdW5udW1iZXJlZG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworJSBUaGVzZSBtYWNyb3MgY29udHJvbCB3aGF0IHRoZSBzZWN0aW9uIGNvbW1hbmRzIGRvLCBhY2NvcmRpbmcKKyUgdG8gd2hhdCBraW5kIG9mIGNoYXB0ZXIgd2UgYXJlIGluIChvcmRpbmFyeSwgYXBwZW5kaXgsIG9yIHVubnVtYmVyZWQpLgorJSBEZWZpbmUgdGhlbSBieSBkZWZhdWx0IGZvciBhIG51bWJlcmVkIGNoYXB0ZXIuCitcbGV0XHNlY3Rpb24gPSBcbnVtYmVyZWRzZWMKK1xsZXRcc3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnNlYworXGxldFxzdWJzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic3Vic2VjCisKKyUgRGVmaW5lIEBtYWpvcmhlYWRpbmcsIEBoZWFkaW5nIGFuZCBAc3ViaGVhZGluZworCislIE5PVEUgb24gdXNlIG9mIFx2Ym94IGZvciBjaGFwdGVyIGhlYWRpbmdzLCBzZWN0aW9uIGhlYWRpbmdzLCBhbmQgc3VjaDoKKyUgICAgICAgMSkgV2UgdXNlIFx2Ym94IHJhdGhlciB0aGFuIHRoZSBlYXJsaWVyIFxsaW5lIHRvIHBlcm1pdAorJSAgICAgICAgICBvdmVybG9uZyBoZWFkaW5ncyB0byBmb2xkLgorJSAgICAgICAyKSBcaHlwaGVucGVuYWx0eSBpcyBzZXQgdG8gMTAwMDAgYmVjYXVzZSBoeXBoZW5hdGlvbiBpbiBhCislICAgICAgICAgIGhlYWRpbmcgaXMgb2Jub3hpb3VzOyB0aGlzIGZvcmJpZHMgaXQuCislICAgICAgIDMpIExpa2V3aXNlLCBoZWFkaW5ncyBsb29rIGJlc3QgaWYgbm8gXHBhcmluZGVudCBpcyB1c2VkLCBhbmQKKyUgICAgICAgICAgaWYganVzdGlmaWNhdGlvbiBpcyBub3QgYXR0ZW1wdGVkLiAgSGVuY2UgXHJhZ2dlZHJpZ2h0LgorCisKK1xkZWZcbWFqb3JoZWFkaW5neyUKKyAge1xhZHZhbmNlXGNoYXBoZWFkaW5nc2tpcCBieSAxMHB0IFxjaGFwYnJlYWsgfSUKKyAgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6Cit9CisKK1xkZWZcY2hhcGhlYWRpbmd7XGNoYXBicmVhayBccGFyc2VhcmdcY2hhcGhlYWRpbmd6enp9CitcZGVmXGNoYXBoZWFkaW5nenp6IzF7JQorICB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxyYWdnZWRyaWdodAorICAgICAgICAgICAgICAgICAgICBccm0gIzFcaGZpbGx9fSUKKyAgXGJpZ3NraXAgXHBhclxwZW5hbHR5IDIwMFxyZWxheAorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorfQorCislIEBoZWFkaW5nLCBAc3ViaGVhZGluZywgQHN1YnN1YmhlYWRpbmcuCitccGFyc2VhcmdkZWZcaGVhZGluZ3tcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorXHBhcnNlYXJnZGVmXHN1YmhlYWRpbmd7XHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lvbWl0ZnJvbXRvY317fQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xwYXJzZWFyZ2RlZlxzdWJzdWJoZWFkaW5ne1xzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZb21pdGZyb210b2N9e30KKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CisKKyUgVGhlc2UgbWFjcm9zIGdlbmVyYXRlIGEgY2hhcHRlciwgc2VjdGlvbiwgZXRjLiBoZWFkaW5nIG9ubHkKKyUgKGluY2x1ZGluZyB3aGl0ZXNwYWNlLCBsaW5lYnJlYWtpbmcsIGV0Yy4gYXJvdW5kIGl0KSwKKyUgZ2l2ZW4gYWxsIHRoZSBpbmZvcm1hdGlvbiBpbiBjb252ZW5pZW50LCBwYXJzZWQgZm9ybS4KKworJSUlIEFyZ3MgYXJlIHRoZSBza2lwIGFuZCBwZW5hbHR5ICh1c3VhbGx5IG5lZ2F0aXZlKQorXGRlZlxkb2JyZWFrIzEjMntccGFyXGlmZGltXGxhc3Rza2lwPCMxXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHkjMlx2c2tpcCMxXGZpfQorCislJSUgRGVmaW5lIHBsYWluIGNoYXB0ZXIgc3RhcnRzLCBhbmQgcGFnZSBvbi9vZmYgc3dpdGNoaW5nIGZvciBpdAorJSBQYXJhbWV0ZXIgY29udHJvbGxpbmcgc2tpcCBiZWZvcmUgY2hhcHRlciBoZWFkaW5ncyAoaWYgbmVlZGVkKQorCitcbmV3c2tpcFxjaGFwaGVhZGluZ3NraXAKKworXGRlZlxjaGFwYnJlYWt7XGRvYnJlYWsgXGNoYXBoZWFkaW5nc2tpcCB7LTQwMDB9fQorXGRlZlxjaGFwcGFnZXJ7XHBhclx2ZmlsbFxzdXBlcmVqZWN0fQorXGRlZlxjaGFwb2RkcGFnZXtcY2hhcHBhZ2VyIFxpZm9kZFxwYWdlbm8gXGVsc2UgXGhib3ggdG8gMHB0e30gXGNoYXBwYWdlclxmaX0KKworXGRlZlxzZXRjaGFwdGVybmV3cGFnZSAjMSB7XGNzbmFtZSBDSEFQUEFHIzFcZW5kY3NuYW1lfQorCitcZGVmXENIQVBQQUdvZmZ7JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGNoYXBzZXBtYWNybz1cY2hhcGJyZWFrCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcHBhZ2VyfQorCitcZGVmXENIQVBQQUdvbnslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBhZ2VhbGlnbm1hY3JvPVxjaGFwcGFnZXIKK1xnbG9iYWxcZGVmXEhFQURJTkdTb257XEhFQURJTkdTc2luZ2xlfX0KKworXGRlZlxDSEFQUEFHb2RkeyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorXGdsb2JhbFxsZXRccGNoYXBzZXBtYWNybz1cY2hhcG9kZHBhZ2UKK1xnbG9iYWxcbGV0XHBhZ2VhbGlnbm1hY3JvPVxjaGFwb2RkcGFnZQorXGdsb2JhbFxkZWZcSEVBRElOR1NvbntcSEVBRElOR1Nkb3VibGV9fQorCitcQ0hBUFBBR29uCisKKyUgQ2hhcHRlciBvcGVuaW5nLgorJQorJSAjMSBpcyB0aGUgdGV4dCwgIzIgaXMgdGhlIHNlY3Rpb24gdHlwZSAoWW51bWJlcmVkLCBZbm90aGluZywKKyUgWWFwcGVuZGl4LCBZb21pdGZyb210b2MpLCAjMyB0aGUgY2hhcHRlciBudW1iZXIuCislCislIFRvIHRlc3QgYWdhaW5zdCBvdXIgYXJndW1lbnQuCitcZGVmXFlub3RoaW5na2V5d29yZHtZbm90aGluZ30KK1xkZWZcWW9taXRmcm9tdG9ja2V5d29yZHtZb21pdGZyb210b2N9CitcZGVmXFlhcHBlbmRpeGtleXdvcmR7WWFwcGVuZGl4fQorJQorXGRlZlxjaGFwbWFjcm8jMSMyIzN7JQorICBccGNoYXBzZXBtYWNybworICB7JQorICAgIFxjaGFwZm9udHMgXHJtCisgICAgJQorICAgICUgSGF2ZSB0byBkZWZpbmUgXHRoaXNzZWN0aW9uIGJlZm9yZSBjYWxsaW5nIFxkb25vZGVyZWYsIGJlY2F1c2UgdGhlCisgICAgJSB4cmVmIGNvZGUgZXZlbnR1YWxseSB1c2VzIGl0LiAgT24gdGhlIG90aGVyIGhhbmQsIGl0IGhhcyB0byBiZSBjYWxsZWQKKyAgICAlIGFmdGVyIFxwY2hhcHNlcG1hY3JvLCBvciB0aGUgaGVhZGxpbmUgd2lsbCBjaGFuZ2UgdG9vIHNvb24uCisgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxnZGVmXHRoaXNjaGFwdGVybmFtZXsjMX0lCisgICAgJQorICAgICUgT25seSBpbnNlcnQgdGhlIHNlcGFyYXRpbmcgc3BhY2UgaWYgd2UgaGF2ZSBhIGNoYXB0ZXIvYXBwZW5kaXgKKyAgICAlIG51bWJlciwgYW5kIGRvbid0IHByaW50IHRoZSB1bm51bWJlcmVkIGBgbnVtYmVyJycuCisgICAgXGRlZlx0ZW1wdHlwZXsjMn0lCisgICAgXGlmeFx0ZW1wdHlwZVxZbm90aGluZ2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKKyAgICAgIFxkZWZcdG9jdHlwZXt1bm5jaGFwfSUKKyAgICAgIFxnZGVmXHRoaXNjaGFwdGVyeyMxfSUKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWW9taXRmcm9tdG9ja2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JSBjb250ZW50cyBsaWtlIHVubnVtYmVyZWQsIGJ1dCBubyB0b2MgZW50cnkKKyAgICAgIFxkZWZcdG9jdHlwZXtvbWl0fSUKKyAgICAgIFxnZGVmXHRoaXNjaGFwdGVye30lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlhcHBlbmRpeGtleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7XHB1dHdvcmRBcHBlbmRpeHt9ICMzXGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle2FwcH0lCisgICAgICAlIFdlIGRvbid0IHN1YnN0aXR1dGUgdGhlIGFjdHVhbCBjaGFwdGVyIG5hbWUgaW50byBcdGhpc2NoYXB0ZXIKKyAgICAgICUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGl0cyBtYWNyb3MgZXZhbHVhdGVkIG5vdy4gIEFuZCB3ZSBkb24ndAorICAgICAgJSB1c2UgXHRoaXNzZWN0aW9uIGJlY2F1c2UgdGhhdCBjaGFuZ2VzIHdpdGggZWFjaCBzZWN0aW9uLgorICAgICAgJQorICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJ7XHB1dHdvcmRBcHBlbmRpeHt9IFxhcHBlbmRpeGxldHRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV9JQorICAgIFxlbHNlCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyMzXGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle251bWNoYXB9JQorICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJ7XHB1dHdvcmRDaGFwdGVye30gXHRoZVxjaGFwbm86CisgICAgICAgICAgICAgICAgICAgICAgICBcbm9leHBhbmRcdGhpc2NoYXB0ZXJuYW1lfSUKKyAgICBcZmlcZmlcZmkKKyAgICAlCisgICAgJSBXcml0ZSB0aGUgdG9jIGVudHJ5IGZvciB0aGlzIGNoYXB0ZXIuICBNdXN0IGNvbWUgYmVmb3JlIHRoZQorICAgICUgXGRvbm9kZXJlZiwgYmVjYXVzZSB3ZSBpbmNsdWRlIHRoZSBjdXJyZW50IG5vZGUgbmFtZSBpbiB0aGUgdG9jCisgICAgJSBlbnRyeSwgYW5kIFxkb25vZGVyZWYgcmVzZXRzIGl0IHRvIGVtcHR5LgorICAgIFx3cml0ZXRvY2VudHJ5e1x0b2N0eXBlfXsjMX17IzN9JQorICAgICUKKyAgICAlIEZvciBwZGZ0ZXgsIHdlIGhhdmUgdG8gd3JpdGUgb3V0IHRoZSBub2RlIGRlZmluaXRpb24gKGFrYSwgbWFrZQorICAgICUgdGhlIHBkZmRlc3QpIGFmdGVyIGFueSBwYWdlIGJyZWFrLCBidXQgYmVmb3JlIHRoZSBhY3R1YWwgdGV4dCBoYXMKKyAgICAlIGJlZW4gdHlwZXNldC4gIElmIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBkZiBvdXRsaW5lIGlzIGFmdGVyIHRoZQorICAgICUgdGV4dCwgdGhlbiBqdW1waW5nIGZyb20gdGhlIG91dGxpbmUgbWF5IHdpbmQgdXAgd2l0aCB0aGUgdGV4dCBub3QKKyAgICAlIGJlaW5nIHZpc2libGUsIGZvciBpbnN0YW5jZSB1bmRlciBoaWdoIG1hZ25pZmljYXRpb24uCisgICAgXGRvbm9kZXJlZnsjMn0lCisgICAgJQorICAgICUgVHlwZXNldCB0aGUgYWN0dWFsIGhlYWRpbmcuCisgICAgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDAgXHRvbGVyYW5jZT01MDAwIFxwYXJpbmRlbnQ9MHB0IFxyYWdnZWRyaWdodAorICAgICAgICAgIFxoYW5naW5kZW50PVx3ZDAgXGNlbnRlcnBhcmFtZXRlcnNtYXliZQorICAgICAgICAgIFx1bmhib3gwICMxXHBhcn0lCisgIH0lCisgIFxub2JyZWFrXGJpZ3NraXAgJSBubyBwYWdlIGJyZWFrIGFmdGVyIGEgY2hhcHRlciB0aXRsZQorICBcbm9icmVhaworfQorCislIEBjZW50ZXJjaGFwIC0tIGNlbnRlcmVkIGFuZCB1bm51bWJlcmVkLgorXGxldFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUgPSBccmVsYXgKK1xkZWZcY2VudGVycGFyYW1ldGVyc3slCisgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSAzXHJpZ2h0c2tpcAorICBcbGVmdHNraXAgPSBccmlnaHRza2lwCisgIFxwYXJmaWxsc2tpcCA9IDBwdAorfQorCisKKyUgSSBkb24ndCB0aGluayB0aGlzIGNoYXB0ZXIgc3R5bGUgaXMgc3VwcG9ydGVkIGFueSBtb3JlLCBzbyBJJ20gbm90CislIHVwZGF0aW5nIGl0IHdpdGggdGhlIG5ldyBub2RlcmVmIHN0dWZmLiAgV2UnbGwgc2VlLiAgLS1rYXJsLCAxMWF1ZzAzLgorJQorXGRlZlxzZXRjaGFwdGVyc3R5bGUgIzEge1xjc25hbWUgQ0hBUEYjMVxlbmRjc25hbWV9CislCitcZGVmXHVubmNoZm9wZW4gIzF7JQorXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCisgICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0XHJhZ2dlZHJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgIFxybSAjMVxoZmlsbH19XGJpZ3NraXAgXHBhclxub2JyZWFrCit9CitcZGVmXGNoZm9wZW4gIzEjMntcY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMKK1x2Ym94IHRvIDNpbntcdmZpbCBcaGJveCB0b1xoc2l6ZXtcaGZpbCAjMn0gXGhib3ggdG9caHNpemV7XGhmaWwgIzF9IFx2ZmlsfX0lCitccGFyXHBlbmFsdHkgNTAwMCAlCit9CitcZGVmXGNlbnRlcmNoZm9wZW4gIzF7JQorXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCisgICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0CisgICAgICAgICAgICAgICAgICAgICAgIFxoZmlsbCB7XHJtICMxfVxoZmlsbH19XGJpZ3NraXAgXHBhclxub2JyZWFrCit9CitcZGVmXENIQVBGb3BlbnslCisgIFxnbG9iYWxcbGV0XGNoYXBtYWNybz1cY2hmb3BlbgorICBcZ2xvYmFsXGxldFxjZW50ZXJjaGFwbWFjcm89XGNlbnRlcmNoZm9wZW59CisKKworJSBTZWN0aW9uIHRpdGxlcy4gIFRoZXNlIG1hY3JvcyBjb21iaW5lIHRoZSBzZWN0aW9uIG51bWJlciBwYXJ0cyBhbmQKKyUgY2FsbCB0aGUgZ2VuZXJpYyBcc2VjdGlvbmhlYWRpbmcgdG8gZG8gdGhlIHByaW50aW5nLgorJQorXG5ld3NraXBcc2VjaGVhZGluZ3NraXAKK1xkZWZcc2VjaGVhZGluZ2JyZWFre1xkb2JyZWFrIFxzZWNoZWFkaW5nc2tpcHstMTAwMH19CisKKyUgU3Vic2VjdGlvbiB0aXRsZXMuCitcbmV3c2tpcFxzdWJzZWNoZWFkaW5nc2tpcAorXGRlZlxzdWJzZWNoZWFkaW5nYnJlYWt7XGRvYnJlYWsgXHN1YnNlY2hlYWRpbmdza2lwey01MDB9fQorCislIFN1YnN1YnNlY3Rpb24gdGl0bGVzLgorXGRlZlxzdWJzdWJzZWNoZWFkaW5nc2tpcHtcc3Vic2VjaGVhZGluZ3NraXB9CitcZGVmXHN1YnN1YnNlY2hlYWRpbmdicmVha3tcc3Vic2VjaGVhZGluZ2JyZWFrfQorCisKKyUgUHJpbnQgYW55IHNpemUsIGFueSB0eXBlLCBzZWN0aW9uIHRpdGxlLgorJQorJSAjMSBpcyB0aGUgdGV4dCwgIzIgaXMgdGhlIHNlY3Rpb24gbGV2ZWwgKHNlYy9zdWJzZWMvc3Vic3Vic2VjKSwgIzMgaXMKKyUgdGhlIHNlY3Rpb24gdHlwZSBmb3IgeHJlZnMgKFludW1iZXJlZCwgWW5vdGhpbmcsIFlhcHBlbmRpeCksICM0IGlzIHRoZQorJSBzZWN0aW9uIG51bWJlci4KKyUKK1xkZWZcc2VjdGlvbmhlYWRpbmcjMSMyIzMjNHslCisgIHslCisgICAgJSBTd2l0Y2ggdG8gdGhlIHJpZ2h0IHNldCBvZiBmb250cy4KKyAgICBcY3NuYW1lICMyZm9udHNcZW5kY3NuYW1lIFxybQorICAgICUKKyAgICAlIEluc2VydCBzcGFjZSBhYm92ZSB0aGUgaGVhZGluZy4KKyAgICBcY3NuYW1lICMyaGVhZGluZ2JyZWFrXGVuZGNzbmFtZQorICAgICUKKyAgICAlIE9ubHkgaW5zZXJ0IHRoZSBzcGFjZSBhZnRlciB0aGUgbnVtYmVyIGlmIHdlIGhhdmUgYSBzZWN0aW9uIG51bWJlci4KKyAgICBcZGVmXHNlY3Rpb25sZXZlbHsjMn0lCisgICAgXGRlZlx0ZW1wdHlwZXsjM30lCisgICAgJQorICAgIFxpZnhcdGVtcHR5cGVcWW5vdGhpbmdrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7dW5ufSUKKyAgICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWW9taXRmcm9tdG9ja2V5d29yZAorICAgICAgJSBmb3IgQGhlYWRpbmdzIC0tIG5vIHNlY3Rpb24gbnVtYmVyLCBkb24ndCBpbmNsdWRlIGluIHRvYywKKyAgICAgICUgYW5kIGRvbid0IHJlZGVmaW5lIFx0aGlzc2VjdGlvbi4KKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKKyAgICAgIFxkZWZcdG9jdHlwZXtvbWl0fSUKKyAgICAgIFxsZXRcc2VjdGlvbmxldmVsPVxlbXB0eQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZYXBwZW5kaXhrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyM0XGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle2FwcH0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGVsc2UKKyAgICAgIFxzZXRib3gwID0gXGhib3h7IzRcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7bnVtfSUKKyAgICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZmlcZmlcZmkKKyAgICAlCisgICAgJSBXcml0ZSB0aGUgdG9jIGVudHJ5IChiZWZvcmUgXGRvbm9kZXJlZikuICBTZWUgY29tbWVudHMgaW4gXGNoZnBsYWluLgorICAgIFx3cml0ZXRvY2VudHJ5e1x0b2N0eXBlXHNlY3Rpb25sZXZlbH17IzF9eyM0fSUKKyAgICAlCisgICAgJSBXcml0ZSB0aGUgbm9kZSByZWZlcmVuY2UgKD0gcGRmIGRlc3RpbmF0aW9uIGZvciBwZGZ0ZXgpLgorICAgICUgQWdhaW4sIHNlZSBjb21tZW50cyBpbiBcY2hmcGxhaW4uCisgICAgXGRvbm9kZXJlZnsjM30lCisgICAgJQorICAgICUgT3V0cHV0IHRoZSBhY3R1YWwgc2VjdGlvbiBoZWFkaW5nLgorICAgIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwIFx0b2xlcmFuY2U9NTAwMCBccGFyaW5kZW50PTBwdCBccmFnZ2VkcmlnaHQKKyAgICAgICAgICBcaGFuZ2luZGVudD1cd2QwICAlIHplcm8gaWYgbm8gc2VjdGlvbiBudW1iZXIKKyAgICAgICAgICBcdW5oYm94MCAjMX0lCisgIH0lCisgICUgQWRkIGV4dHJhIHNwYWNlIGFmdGVyIHRoZSBoZWFkaW5nIC0tIGhhbGYgb2Ygd2hhdGV2ZXIgY2FtZSBhYm92ZSBpdC4KKyAgJSBEb24ndCBhbGxvdyBzdHJldGNoLCB0aG91Z2guCisgIFxrZXJuIC41IFxjc25hbWUgIzJoZWFkaW5nc2tpcFxlbmRjc25hbWUKKyAgJQorICAlIERvIG5vdCBsZXQgdGhlIGtlcm4gYmUgYSBwb3RlbnRpYWwgYnJlYWtwb2ludCwgYXMgaXQgd291bGQgYmUgaWYgaXQKKyAgJSB3YXMgZm9sbG93ZWQgYnkgZ2x1ZS4KKyAgXG5vYnJlYWsKKyAgJQorICAlIFdlJ2xsIGFsbW9zdCBjZXJ0YWlubHkgc3RhcnQgYSBwYXJhZ3JhcGggbmV4dCwgc28gZG9uJ3QgbGV0IHRoYXQKKyAgJSBnbHVlIGFjY3VtdWxhdGUuICAoTm90IGEgYnJlYWtwb2ludCBiZWNhdXNlIGl0J3MgcHJlY2VkZWQgYnkgYQorICAlIGRpc2NhcmRhYmxlIGl0ZW0uKQorICBcdnNraXAtXHBhcnNraXAKKyAgJSAKKyAgJSBUaGlzIGlzIHB1cmVseSBzbyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0IGlzIGEga25vd24gXHBlbmFsdHkgPgorICAlIDEwMDAwLiAgVGhpcyBpcyBzbyBcc3RhcnRkZWZ1biBjYW4gYXZvaWQgYWxsb3dpbmcgYnJlYWtwb2ludHMgYWZ0ZXIKKyAgJSBzZWN0aW9uIGhlYWRpbmdzLiAgT3RoZXJ3aXNlLCBpdCB3b3VsZCBpbnNlcnQgYSB2YWxpZCBicmVha3BvaW50IGJldHdlZW46CisgICUgCisgICUgICBAc2VjdGlvbiBzZWMtd2hhdGV2ZXIKKyAgJSAgIEBkZWZmbiBkZWYtd2hhdGV2ZXIKKyAgXHBlbmFsdHkgMTAwMDEKK30KKworCitcbWVzc2FnZXt0b2MsfQorJSBUYWJsZSBvZiBjb250ZW50cy4KK1xuZXd3cml0ZVx0b2NmaWxlCisKKyUgV3JpdGUgYW4gZW50cnkgdG8gdGhlIHRvYyBmaWxlLCBvcGVuaW5nIGl0IGlmIG5lY2Vzc2FyeS4KKyUgQ2FsbGVkIGZyb20gQGNoYXB0ZXIsIGV0Yy4KKyUKKyUgRXhhbXBsZSB1c2FnZTogXHdyaXRldG9jZW50cnl7c2VjfXtTZWN0aW9uIE5hbWV9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm99CislIFdlIGFwcGVuZCB0aGUgY3VycmVudCBub2RlIG5hbWUgKGlmIGFueSkgYW5kIHBhZ2UgbnVtYmVyIGFzIGFkZGl0aW9uYWwKKyUgYXJndW1lbnRzIGZvciB0aGUgXHtjaGFwLHNlYywuLi59ZW50cnkgbWFjcm9zIHdoaWNoIHdpbGwgZXZlbnR1YWxseQorJSByZWFkIHRoaXMuICBUaGUgbm9kZSBuYW1lIGlzIHVzZWQgaW4gdGhlIHBkZiBvdXRsaW5lcyBhcyB0aGUKKyUgZGVzdGluYXRpb24gdG8ganVtcCB0by4KKyUKKyUgV2Ugb3BlbiB0aGUgLnRvYyBmaWxlIGZvciB3cml0aW5nIGhlcmUgaW5zdGVhZCBvZiBhdCBAc2V0ZmlsZW5hbWUgKG9yCislIGFueSBvdGhlciBmaXhlZCB0aW1lKSBzbyB0aGF0IEBjb250ZW50cyBjYW4gYmUgYW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LgorJSBCdXQgaWYgIzEgaXMgYG9taXQnLCB0aGVuIHdlIGRvbid0IGRvIGFueXRoaW5nLiAgVGhpcyBpcyB1c2VkIGZvciB0aGUKKyUgdGFibGUgb2YgY29udGVudHMgY2hhcHRlciBvcGVuaW5ncyB0aGVtc2VsdmVzLgorJQorXG5ld2lmXGlmdG9jZmlsZW9wZW5lZAorXGRlZlxvbWl0a2V5d29yZHtvbWl0fSUKKyUKK1xkZWZcd3JpdGV0b2NlbnRyeSMxIzIjM3slCisgIFxlZGVmXHdyaXRldG9jdHlwZXsjMX0lCisgIFxpZnhcd3JpdGV0b2N0eXBlXG9taXRrZXl3b3JkIFxlbHNlCisgICAgXGlmdG9jZmlsZW9wZW5lZFxlbHNlCisgICAgICBcaW1tZWRpYXRlXG9wZW5vdXRcdG9jZmlsZSA9IFxqb2JuYW1lLnRvYworICAgICAgXGdsb2JhbFx0b2NmaWxlb3BlbmVkdHJ1ZQorICAgIFxmaQorICAgICUKKyAgICBcaWZsaW5rcworICAgICAge1xhdGR1bW1pZXMKKyAgICAgICBcZWRlZlx0ZW1weyUKKyAgICAgICAgIFx3cml0ZVx0b2NmaWxle0AjMWVudHJ5eyMyfXsjM317XGxhc3Rub2RlfXtcbm9leHBhbmRcZm9saW99fX0lCisgICAgICAgXHRlbXAKKyAgICAgIH0KKyAgICBcZmkKKyAgXGZpCisgICUKKyAgJSBUZWxsIFxzaGlwb3V0IHRvIGNyZWF0ZSBhIHBkZiBkZXN0aW5hdGlvbiBvbiBlYWNoIHBhZ2UsIGlmIHdlJ3JlCisgICUgd3JpdGluZyBwZGYuICBUaGVzZSBhcmUgdXNlZCBpbiB0aGUgdGFibGUgb2YgY29udGVudHMuICBXZSBjYW4ndAorICAlIGp1c3Qgd3JpdGUgb25lIG9uIGV2ZXJ5IHBhZ2UgYmVjYXVzZSB0aGUgdGl0bGUgcGFnZXMgYXJlIG51bWJlcmVkCisgICUgMSBhbmQgMiAodGhlIHBhZ2UgbnVtYmVycyBhcmVuJ3QgcHJpbnRlZCksIGFuZCBzbyBhcmUgdGhlIGZpcnN0CisgICUgdHdvIHBhZ2VzIG9mIHRoZSBkb2N1bWVudC4gIFRodXMsIHdlJ2QgaGF2ZSB0d28gZGVzdGluYXRpb25zIG5hbWVkCisgICUgYDEnLCBhbmQgdHdvIG5hbWVkIGAyJy4KKyAgXGlmcGRmIFxnbG9iYWxccGRmbWFrZXBhZ2VkZXN0dHJ1ZSBcZmkKK30KKworCislIFRoZXNlIGNoYXJhY3RlcnMgZG8gbm90IHByaW50IHByb3Blcmx5IGluIHRoZSBDb21wdXRlciBNb2Rlcm4gcm9tYW4KKyUgZm9udHMsIHNvIHdlIG11c3QgdGFrZSBzcGVjaWFsIGNhcmUuICBUaGlzIGlzIG1vcmUgb3IgbGVzcyByZWR1bmRhbnQKKyUgd2l0aCB0aGUgVGV4aW5mbyBpbnB1dCBmb3JtYXQgc2V0dXAgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCislIAorXGRlZlxhY3RpdmVjYXRjb2Rlc3slCisgIFxjYXRjb2RlYFwiPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCQ9XGFjdGl2ZQorICBcY2F0Y29kZWBcPD1cYWN0aXZlCisgIFxjYXRjb2RlYFw+PVxhY3RpdmUKKyAgXGNhdGNvZGVgXFw9XGFjdGl2ZQorICBcY2F0Y29kZWBcXj1cYWN0aXZlCisgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgXGNhdGNvZGVgXHw9XGFjdGl2ZQorICBcY2F0Y29kZWBcfj1cYWN0aXZlCit9CisKKworJSBSZWFkIHRoZSB0b2MgZmlsZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgVGV4aW5mbyBpbnB1dC4KK1xkZWZccmVhZHRvY2ZpbGV7JQorICBcc2V0dXBkYXRhZmlsZQorICBcYWN0aXZlY2F0Y29kZXMKKyAgXGlucHV0IFxqb2JuYW1lLnRvYworfQorCitcbmV3c2tpcFxjb250ZW50c3JpZ2h0bWFyZ2luIFxjb250ZW50c3JpZ2h0bWFyZ2luPTFpbgorXG5ld2NvdW50XHNhdmVwYWdlbm8KK1xuZXdjb3VudFxsYXN0bmVnYXRpdmVwYWdlbm8gXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IC0xCisKKyUgUHJlcGFyZSB0byByZWFkIHdoYXQgd2UndmUgd3JpdHRlbiB0byBcdG9jZmlsZS4KKyUKK1xkZWZcc3RhcnRjb250ZW50cyMxeyUKKyAgJSBJZiBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb24sIGFuZCBAaGVhZGluZ3MgZG91YmxlLCB0aGUgY29udGVudHMgc2hvdWxkCisgICUgc3RhcnQgb24gYW4gb2RkIHBhZ2UsIHVubGlrZSBjaGFwdGVycy4gIFRodXMsIHdlIG1haW50YWluCisgICUgXGNvbnRlbnRzYWxpZ25tYWNybyBpbiBwYXJhbGxlbCB3aXRoIFxwYWdlYWxpZ25tYWNyby4KKyAgJSBGcm9tOiBUb3Jiam9ybiBHcmFubHVuZCA8dGVnZUBtYXRlbWF0aWsuc3Uuc2U+CisgIFxjb250ZW50c2FsaWdubWFjcm8KKyAgXGltbWVkaWF0ZVxjbG9zZW91dFx0b2NmaWxlCisgICUKKyAgJSBEb24ndCBuZWVkIHRvIHB1dCBgQ29udGVudHMnIG9yIGBTaG9ydCBDb250ZW50cycgaW4gdGhlIGhlYWRsaW5lLgorICAlIEl0IGlzIGFidW5kYW50bHkgY2xlYXIgd2hhdCB0aGV5IGFyZS4KKyAgXGRlZlx0aGlzY2hhcHRlcnt9JQorICBcY2hhcG1hY3JveyMxfXtZb21pdGZyb210b2N9e30lCisgICUKKyAgXHNhdmVwYWdlbm8gPSBccGFnZW5vCisgIFxiZWdpbmdyb3VwICAgICAgICAgICAgICAgICAgJSBTZXQgdXAgdG8gaGFuZGxlIGNvbnRlbnRzIGZpbGVzIHByb3Blcmx5LgorICAgIFxyYWdnZWRib3R0b20gICAgICAgICAgICAgICUgV29ycnkgbW9yZSBhYm91dCBicmVha3BvaW50cyB0aGFuIHRoZSBib3R0b20uCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxjb250ZW50c3JpZ2h0bWFyZ2luICUgRG9uJ3QgdXNlIHRoZSBmdWxsIGxpbmUgbGVuZ3RoLgorICAgICUKKyAgICAlIFJvbWFuIG51bWVyYWxzIGZvciBwYWdlIG51bWJlcnMuCisgICAgXGlmbnVtIFxwYWdlbm8+MCBcZ2xvYmFsXHBhZ2VubyA9IFxsYXN0bmVnYXRpdmVwYWdlbm8gXGZpCit9CisKKworJSBOb3JtYWwgKGxvbmcpIHRvYy4KK1xkZWZcY29udGVudHN7JQorICBcc3RhcnRjb250ZW50c3tccHV0d29yZFRPQ30lCisgICAgXG9wZW5pbiAxIFxqb2JuYW1lLnRvYworICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICBccmVhZHRvY2ZpbGUKKyAgICBcZmkKKyAgICBcdmZpbGwgXGVqZWN0CisgICAgXGNvbnRlbnRzYWxpZ25tYWNybyAlIGluIGNhc2UgQHNldGNoYXB0ZXJuZXdwYWdlIG9kZCBpcyBpbiBlZmZlY3QKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHBkZm1ha2VvdXRsaW5lcworICAgIFxmaQorICAgIFxjbG9zZWluIDEKKyAgXGVuZGdyb3VwCisgIFxsYXN0bmVnYXRpdmVwYWdlbm8gPSBccGFnZW5vCisgIFxnbG9iYWxccGFnZW5vID0gXHNhdmVwYWdlbm8KK30KKworJSBBbmQganVzdCB0aGUgY2hhcHRlcnMuCitcZGVmXHN1bW1hcnljb250ZW50c3slCisgIFxzdGFydGNvbnRlbnRze1xwdXR3b3JkU2hvcnRUT0N9JQorICAgICUKKyAgICBcbGV0XG51bWNoYXBlbnRyeSA9IFxzaG9ydGNoYXBlbnRyeQorICAgIFxsZXRcYXBwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKKyAgICBcbGV0XHVubmNoYXBlbnRyeSA9IFxzaG9ydHVubmNoYXBlbnRyeQorICAgICUgV2Ugd2FudCBhIHRydWUgcm9tYW4gaGVyZSBmb3IgdGhlIHBhZ2UgbnVtYmVycy4KKyAgICBcc2VjZm9udHMKKyAgICBcbGV0XHJtPVxzaG9ydGNvbnRybSBcbGV0XGJmPVxzaG9ydGNvbnRiZgorICAgIFxsZXRcc2w9XHNob3J0Y29udHNsIFxsZXRcdHQ9XHNob3J0Y29udHR0CisgICAgXHJtCisgICAgXGh5cGhlbnBlbmFsdHkgPSAxMDAwMAorICAgIFxhZHZhbmNlXGJhc2VsaW5lc2tpcCBieSAxcHQgJSBPcGVuIGl0IHVwIGEgbGl0dGxlLgorICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7fQorICAgIFxsZXRcYXBwc2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxudW1zdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcYXBwc3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxudW1zdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcYXBwc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXG9wZW5pbiAxIFxqb2JuYW1lLnRvYworICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICBccmVhZHRvY2ZpbGUKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgICAgXHZmaWxsIFxlamVjdAorICAgIFxjb250ZW50c2FsaWdubWFjcm8gJSBpbiBjYXNlIEBzZXRjaGFwdGVybmV3cGFnZSBvZGQgaXMgaW4gZWZmZWN0CisgIFxlbmRncm91cAorICBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gXHBhZ2VubworICBcZ2xvYmFsXHBhZ2VubyA9IFxzYXZlcGFnZW5vCit9CitcbGV0XHNob3J0Y29udGVudHMgPSBcc3VtbWFyeWNvbnRlbnRzCisKKyUgVHlwZXNldCB0aGUgbGFiZWwgZm9yIGEgY2hhcHRlciBvciBhcHBlbmRpeCBmb3IgdGhlIHNob3J0IGNvbnRlbnRzLgorJSBUaGUgYXJnIGlzLCBlLmcuLCBgQScgZm9yIGFuIGFwcGVuZGl4LCBvciBgMycgZm9yIGEgY2hhcHRlci4KKyUKK1xkZWZcc2hvcnRjaGFwbGFiZWwjMXslCisgICUgVGhpcyBzcGFjZSBzaG91bGQgYmUgZW5vdWdoLCBzaW5jZSBhIHNpbmdsZSBudW1iZXIgaXMgLjVlbSwgYW5kIHRoZQorICAlIHdpZGVzdCBsZXR0ZXIgKE0pIGlzIDFlbSwgYXQgbGVhc3QgaW4gdGhlIENvbXB1dGVyIE1vZGVybiBmb250cy4KKyAgJSBCdXQgdXNlIFxoc3MganVzdCBpbiBjYXNlLgorICAlIChUaGlzIHNwYWNlIGRvZXNuJ3QgaW5jbHVkZSB0aGUgZXh0cmEgc3BhY2UgdGhhdCBnZXRzIGFkZGVkIGFmdGVyCisgICUgdGhlIGxhYmVsOyB0aGF0IGdldHMgcHV0IGluIGJ5IFxzaG9ydGNoYXBlbnRyeSBhYm92ZS4pCisgICUKKyAgJSBXZSdkIGxpa2UgdG8gcmlnaHQtanVzdGlmeSBjaGFwdGVyIG51bWJlcnMsIGJ1dCB0aGF0IGxvb2tzIHN0cmFuZ2UKKyAgJSB3aXRoIGFwcGVuZGl4IGxldHRlcnMuICBBbmQgcmlnaHQtanVzdGlmeWluZyBudW1iZXJzIGFuZAorICAlIGxlZnQtanVzdGlmeWluZyBsZXR0ZXJzIGxvb2tzIHN0cmFuZ2Ugd2hlbiB0aGVyZSBpcyBsZXNzIHRoYW4gMTAKKyAgJSBjaGFwdGVycy4gIEhhdmUgdG8gcmVhZCB0aGUgd2hvbGUgdG9jIG9uY2UgdG8ga25vdyBob3cgbWFueSBjaGFwdGVycworICAlIHRoZXJlIGFyZSBiZWZvcmUgZGVjaWRpbmcgLi4uCisgIFxoYm94IHRvIDFlbXsjMVxoc3N9JQorfQorCislIFRoZXNlIG1hY3JvcyBnZW5lcmF0ZSBpbmRpdmlkdWFsIGVudHJpZXMgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLgorJSBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNoYXB0ZXIgb3Igc2VjdGlvbiBuYW1lLgorJSBUaGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgcGFnZSBudW1iZXIuCislIFRoZSBhcmd1bWVudHMgaW4gYmV0d2VlbiBhcmUgdGhlIGNoYXB0ZXIgbnVtYmVyLCBzZWN0aW9uIG51bWJlciwgLi4uCisKKyUgQ2hhcHRlcnMsIGluIHRoZSBtYWluIGNvbnRlbnRzLgorXGRlZlxudW1jaGFwZW50cnkjMSMyIzMjNHtcZG9jaGFwZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CislCislIENoYXB0ZXJzLCBpbiB0aGUgc2hvcnQgdG9jLgorJSBTZWUgY29tbWVudHMgaW4gXGRvY2hhcGVudHJ5IHJlIHZib3ggYW5kIHJlbGF0ZWQgc2V0dGluZ3MuCitcZGVmXHNob3J0Y2hhcGVudHJ5IzEjMiMzIzR7JQorICBcdG9jZW50cnl7XHNob3J0Y2hhcGxhYmVseyMyfVxsYWJlbHNwYWNlICMxfXtcZG9zaG9ydHBhZ2Vub1xiZ3JvdXAjNFxlZ3JvdXB9JQorfQorCislIEFwcGVuZGljZXMsIGluIHRoZSBtYWluIGNvbnRlbnRzLgorJSBOZWVkIHRoZSB3b3JkIEFwcGVuZGl4LCBhbmQgYSBmaXhlZC1zaXplIGJveC4KKyUKK1xkZWZcYXBwZW5kaXhib3gjMXslCisgICUgV2UgdXNlIE0gc2luY2UgaXQncyBwcm9iYWJseSB0aGUgd2lkZXN0IGxldHRlci4KKyAgXHNldGJveDAgPSBcaGJveHtccHV0d29yZEFwcGVuZGl4e30gTX0lCisgIFxoYm94IHRvIFx3ZDB7XHB1dHdvcmRBcHBlbmRpeHt9ICMxXGhzc319CislCitcZGVmXGFwcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5e1xhcHBlbmRpeGJveHsjMn1cbGFiZWxzcGFjZSMxfXsjNH19CisKKyUgVW5udW1iZXJlZCBjaGFwdGVycy4KK1xkZWZcdW5uY2hhcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5eyMxfXsjNH19CitcZGVmXHNob3J0dW5uY2hhcGVudHJ5IzEjMiMzIzR7XHRvY2VudHJ5eyMxfXtcZG9zaG9ydHBhZ2Vub1xiZ3JvdXAjNFxlZ3JvdXB9fQorCislIFNlY3Rpb25zLgorXGRlZlxudW1zZWNlbnRyeSMxIzIjMyM0e1xkb3NlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzZWNlbnRyeT1cbnVtc2VjZW50cnkKK1xkZWZcdW5uc2VjZW50cnkjMSMyIzMjNHtcZG9zZWNlbnRyeXsjMX17IzR9fQorCislIFN1YnNlY3Rpb25zLgorXGRlZlxudW1zdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnNlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzdWJzZWNlbnRyeT1cbnVtc3Vic2VjZW50cnkKK1xkZWZcdW5uc3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzZWNlbnRyeXsjMX17IzR9fQorCislIEFuZCBzdWJzdWJzZWN0aW9ucy4KK1xkZWZcbnVtc3Vic3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzdWJzZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc3Vic3Vic2VjZW50cnk9XG51bXN1YnN1YnNlY2VudHJ5CitcZGVmXHVubnN1YnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic3Vic2VjZW50cnl7IzF9eyM0fX0KKworJSBUaGlzIHBhcmFtZXRlciBjb250cm9scyB0aGUgaW5kZW50YXRpb24gb2YgdGhlIHZhcmlvdXMgbGV2ZWxzLgorJSBTYW1lIGFzIFxkZWZhdWx0cGFyaW5kZW50LgorXG5ld2RpbWVuXHRvY2luZGVudCBcdG9jaW5kZW50ID0gMTVwdAorCislIE5vdyBmb3IgdGhlIGFjdHVhbCB0eXBlc2V0dGluZy4gSW4gYWxsIHRoZXNlLCAjMSBpcyB0aGUgdGV4dCBhbmQgIzIgaXMgdGhlCislIHBhZ2UgbnVtYmVyLgorJQorJSBJZiB0aGUgdG9jIGhhcyB0byBiZSBicm9rZW4gb3ZlciBwYWdlcywgd2Ugd2FudCBpdCB0byBiZSBhdCBjaGFwdGVycworJSBpZiBhdCBhbGwgcG9zc2libGU7IGhlbmNlIHRoZSBccGVuYWx0eS4KK1xkZWZcZG9jaGFwZW50cnkjMSMyeyUKKyAgIFxwZW5hbHR5LTMwMCBcdnNraXAxXGJhc2VsaW5lc2tpcCBwbHVzLjMzXGJhc2VsaW5lc2tpcCBtaW51cy4yNVxiYXNlbGluZXNraXAKKyAgIFxiZWdpbmdyb3VwCisgICAgIFxjaGFwZW50cnlmb250cworICAgICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorICAgXGVuZGdyb3VwCisgICBcbm9icmVha1x2c2tpcCAuMjVcYmFzZWxpbmVza2lwIHBsdXMuMVxiYXNlbGluZXNraXAKK30KKworXGRlZlxkb3NlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc2VjZW50cnlmb250cyBcbGVmdHNraXA9XHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCitcZGVmXGRvc3Vic2VjZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFxzdWJzZWNlbnRyeWZvbnRzIFxsZWZ0c2tpcD0yXHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCitcZGVmXGRvc3Vic3Vic2VjZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFxzdWJzdWJzZWNlbnRyeWZvbnRzIFxsZWZ0c2tpcD0zXHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCislIFdlIHVzZSB0aGUgc2FtZSBcZW50cnkgbWFjcm8gYXMgZm9yIHRoZSBpbmRleCBlbnRyaWVzLgorXGxldFx0b2NlbnRyeSA9IFxlbnRyeQorCislIFNwYWNlIGJldHdlZW4gY2hhcHRlciAob3Igd2hhdGV2ZXIpIG51bWJlciBhbmQgdGhlIHRpdGxlLgorXGRlZlxsYWJlbHNwYWNle1xoc2tpcDFlbSBccmVsYXh9CisKK1xkZWZcZG9wYWdlbm8jMXt7XHJtICMxfX0KK1xkZWZcZG9zaG9ydHBhZ2VubyMxe3tccm0gIzF9fQorCitcZGVmXGNoYXBlbnRyeWZvbnRze1xzZWNmb250cyBccm19CitcZGVmXHNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KK1xkZWZcc3Vic2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorXGRlZlxzdWJzdWJzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CisKKworXG1lc3NhZ2V7ZW52aXJvbm1lbnRzLH0KKyUgQGZvbyAuLi4gQGVuZCBmb28uCisKKyUgQHBvaW50e30sIEByZXN1bHR7fSwgQGV4cGFuc2lvbnt9LCBAcHJpbnR7fSwgQGVxdWl2e30uCislCislIFNpbmNlIHRoZXNlIGNoYXJhY3RlcnMgYXJlIHVzZWQgaW4gZXhhbXBsZXMsIGl0IHNob3VsZCBiZSBhbiBldmVuIG51bWJlciBvZgorJSBcdHQgd2lkdGhzLiBFYWNoIFx0dCBjaGFyYWN0ZXIgaXMgMWVuLCBzbyB0d28gbWFrZXMgaXQgMWVtLgorJQorXGRlZlxwb2ludHskXHN0YXIkfQorXGRlZlxyZXN1bHR7XGxlYXZldm1vZGVccmFpc2UuMTVleFxoYm94IHRvIDFlbXtcaGZpbCRcUmlnaHRhcnJvdyRcaGZpbH19CitcZGVmXGV4cGFuc2lvbntcbGVhdmV2bW9kZVxyYWlzZS4xZXhcaGJveCB0byAxZW17XGhmaWwkXG1hcHN0byRcaGZpbH19CitcZGVmXHByaW50e1xsZWF2ZXZtb2RlXGxvd2VyLjFleFxoYm94IHRvIDFlbXtcaGZpbCRcZGFzaHYkXGhmaWx9fQorXGRlZlxlcXVpdntcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXHB0ZXhlcXVpdiRcaGZpbH19CisKKyUgVGhlIEBlcnJvcnt9IGNvbW1hbmQuCislIEFkYXB0ZWQgZnJvbSB0aGUgVGVYYm9vaydzIFxib3hpdC4KKyUKK1xuZXdib3hcZXJyb3Jib3gKKyUKK3tcdGVudHQgXGdsb2JhbFxkaW1lbjAgPSAzZW19JSBXaWR0aCBvZiB0aGUgYm94LgorXGRpbWVuMiA9IC41NXB0ICUgVGhpY2tuZXNzIG9mIHJ1bGVzCislIFRoZSB0ZXh0LiAoYHInIGlzIG9wZW4gb24gdGhlIHJpZ2h0LCBgZScgc29tZXdoYXQgbGVzcyBzbyBvbiB0aGUgbGVmdC4pCitcc2V0Ym94MCA9IFxoYm94e1xrZXJuLS43NXB0IFx0ZW5zZiBlcnJvclxrZXJuLTEuNXB0fQorJQorXHNldGJveFxlcnJvcmJveD1caGJveCB0byBcZGltZW4we1xoZmlsCisgICBcaHNpemUgPSBcZGltZW4wIFxhZHZhbmNlXGhzaXplIGJ5IC01LjhwdCAlIFNwYWNlIHRvIGxlZnQrcmlnaHQuCisgICBcYWR2YW5jZVxoc2l6ZSBieSAtMlxkaW1lbjIgJSBSdWxlcy4KKyAgIFx2Ym94eyUKKyAgICAgIFxocnVsZSBoZWlnaHRcZGltZW4yCisgICAgICBcaGJveHtcdnJ1bGUgd2lkdGhcZGltZW4yIFxrZXJuM3B0ICAgICAgICAgICUgU3BhY2UgdG8gbGVmdCBvZiB0ZXh0LgorICAgICAgICAgXHZ0b3B7XGtlcm4yLjRwdCBcYm94MCBca2VybjIuNHB0fSUgU3BhY2UgYWJvdmUvYmVsb3cuCisgICAgICAgICBca2VybjNwdFx2cnVsZSB3aWR0aFxkaW1lbjJ9JSBTcGFjZSB0byByaWdodC4KKyAgICAgIFxocnVsZSBoZWlnaHRcZGltZW4yfQorICAgIFxoZmlsfQorJQorXGRlZlxlcnJvcntcbGVhdmV2bW9kZVxsb3dlci43ZXhcY29weVxlcnJvcmJveH0KKworJSBAdGV4IC4uLiBAZW5kIHRleCAgICBlc2NhcGVzIGludG8gcmF3IFRleCB0ZW1wb3JhcmlseS4KKyUgT25lIGV4Y2VwdGlvbjogQCBpcyBzdGlsbCBhbiBlc2NhcGUgY2hhcmFjdGVyLCBzbyB0aGF0IEBlbmQgdGV4IHdvcmtzLgorJSBCdXQgXEAgb3IgQEAgd2lsbCBnZXQgYSBwbGFpbiB0ZXggQCBjaGFyYWN0ZXIuCisKK1xlbnZkZWZcdGV4eyUKKyAgXGNhdGNvZGUgYFxcPTAgXGNhdGNvZGUgYFx7PTEgXGNhdGNvZGUgYFx9PTIKKyAgXGNhdGNvZGUgYFwkPTMgXGNhdGNvZGUgYFwmPTQgXGNhdGNvZGUgYFwjPTYKKyAgXGNhdGNvZGUgYFxePTcgXGNhdGNvZGUgYFxfPTggXGNhdGNvZGUgYFx+PVxhY3RpdmUgXGxldH49XHRpZQorICBcY2F0Y29kZSBgXCU9MTQKKyAgXGNhdGNvZGUgYFwrPVxvdGhlcgorICBcY2F0Y29kZSBgXCI9XG90aGVyCisgIFxjYXRjb2RlIGBcfD1cb3RoZXIKKyAgXGNhdGNvZGUgYFw8PVxvdGhlcgorICBcY2F0Y29kZSBgXD49XG90aGVyCisgIFxlc2NhcGVjaGFyPWBcXAorICAlCisgIFxsZXRcYj1ccHRleGIKKyAgXGxldFxidWxsZXQ9XHB0ZXhidWxsZXQKKyAgXGxldFxjPVxwdGV4YworICBcbGV0XCw9XHB0ZXhjb21tYQorICBcbGV0XC49XHB0ZXhkb3QKKyAgXGxldFxkb3RzPVxwdGV4ZG90cworICBcbGV0XGVxdWl2PVxwdGV4ZXF1aXYKKyAgXGxldFwhPVxwdGV4ZXhjbGFtCisgIFxsZXRcaT1ccHRleGkKKyAgXGxldFxpbmRlbnQ9XHB0ZXhpbmRlbnQKKyAgXGxldFxub2luZGVudD1ccHRleG5vaW5kZW50CisgIFxsZXRcez1ccHRleGxicmFjZQorICBcbGV0XCs9XHRhYmFsaWduCisgIFxsZXRcfT1ccHRleHJicmFjZQorICBcbGV0XC89XHB0ZXhzbGFzaAorICBcbGV0XCo9XHB0ZXhzdGFyCisgIFxsZXRcdD1ccHRleHQKKyAgXGxldFxmcmVuY2hzcGFjaW5nPVxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgJQorICBcZGVmXGVuZGxkb3Rze1xtYXRoaW5uZXJ7XGxkb3RzXGxkb3RzXGxkb3RzXGxkb3RzfX0lCisgIFxkZWZcZW5kZG90c3tccmVsYXhcaWZtbW9kZVxlbmRsZG90c1xlbHNlJFxtYXRoc3Vycm91bmQ9MHB0IFxlbmRsZG90c1wsJFxmaX0lCisgIFxkZWZcQHtAfSUKK30KKyUgVGhlcmUgaXMgbm8gbmVlZCB0byBkZWZpbmUgXEV0ZXguCisKKyUgRGVmaW5lIEBsaXNwIC4uLiBAZW5kIGxpc3AuCislIEBsaXNwIGVudmlyb25tZW50IGZvcm1zIGEgZ3JvdXAgc28gaXQgY2FuIHJlYmluZCB0aGluZ3MsCislIGluY2x1ZGluZyB0aGUgZGVmaW5pdGlvbiBvZiBAZW5kIGxpc3AgKHdoaWNoIG5vcm1hbGx5IGlzIGVycm9uZW91cykuCisKKyUgQW1vdW50IHRvIG5hcnJvdyB0aGUgbWFyZ2lucyBieSBmb3IgQGxpc3AuCitcbmV3c2tpcFxsaXNwbmFycm93aW5nIFxsaXNwbmFycm93aW5nPTAuNGluCisKKyUgVGhpcyBpcyB0aGUgZGVmaW5pdGlvbiB0aGF0IF5eTSBnZXRzIGluc2lkZSBAbGlzcCwgQGV4YW1wbGUsIGFuZCBvdGhlcgorJSBzdWNoIGVudmlyb25tZW50cy4gIFxudWxsIGlzIGJldHRlciB0aGFuIGEgc3BhY2UsIHNpbmNlIGl0IGRvZXNuJ3QKKyUgaGF2ZSBhbnkgd2lkdGguCitcZGVmXGxpc3BwYXJ7XG51bGxcZW5kZ3JhZn0KKworJSBUaGlzIHNwYWNlIGlzIGFsd2F5cyBwcmVzZW50IGFib3ZlIGFuZCBiZWxvdyBlbnZpcm9ubWVudHMuCitcbmV3c2tpcFxlbnZza2lwYW1vdW50IFxlbnZza2lwYW1vdW50ID0gMHB0CisKKyUgTWFrZSBzcGFjaW5nIGFuZCBiZWxvdyBlbnZpcm9ubWVudCBzeW1tZXRyaWNhbC4gIFdlIHVzZSBccGFyc2tpcCBoZXJlCislIHRvIGhlbHAgaW4gZG9pbmcgdGhhdCwgc2luY2UgaW4gQGV4YW1wbGUtbGlrZSBlbnZpcm9ubWVudHMgXHBhcnNraXAKKyUgaXMgcmVzZXQgdG8gemVybzsgdGh1cyB0aGUgXGFmdGVyZW52YnJlYWsgaW5zZXJ0cyBubyBzcGFjZSAtLSBidXQgdGhlCislIHN0YXJ0IG9mIHRoZSBuZXh0IHBhcmFncmFwaCB3aWxsIGluc2VydCBccGFyc2tpcC4KKyUKK1xkZWZcYWJvdmVlbnZicmVha3t7JQorICAlID0xMDAwMCBpbnN0ZWFkIG9mIDwxMDAwMCBiZWNhdXNlIG9mIGEgc3BlY2lhbCBjYXNlIGluIFxpdGVtenp6IGFuZAorICAlIFxzZWN0aW9uaGVhZGluZywgcS52LgorICBcaWZudW0gXGxhc3RwZW5hbHR5PTEwMDAwIFxlbHNlCisgICAgXGFkdmFuY2VcZW52c2tpcGFtb3VudCBieSBccGFyc2tpcAorICAgIFxlbmRncmFmCisgICAgXGlmZGltXGxhc3Rza2lwPFxlbnZza2lwYW1vdW50CisgICAgICBccmVtb3ZlbGFzdHNraXAKKyAgICAgICUgaXQncyBub3QgYSBnb29kIHBsYWNlIHRvIGJyZWFrIGlmIHRoZSBsYXN0IHBlbmFsdHkgd2FzIFxub2JyZWFrCisgICAgICAlIG9yIGJldHRlciAuLi4KKyAgICAgIFxpZm51bVxsYXN0cGVuYWx0eTwxMDAwMCBccGVuYWx0eS01MCBcZmkKKyAgICAgIFx2c2tpcFxlbnZza2lwYW1vdW50CisgICAgXGZpCisgIFxmaQorfX0KKworXGxldFxhZnRlcmVudmJyZWFrID0gXGFib3ZlZW52YnJlYWsKKworJSBcbm9uYXJyb3dpbmcgaXMgYSBmbGFnLiAgSWYgInNldCIsIEBsaXNwIGV0YyBkb24ndCBuYXJyb3cgbWFyZ2luczsgaXQgd2lsbAorJSBhbHNvIGNsZWFyIGl0LCBzbyB0aGF0IGl0cyBlbWJlZGRlZCBlbnZpcm9ubWVudHMgZG8gdGhlIG5hcnJvd2luZyBhZ2Fpbi4KK1xsZXRcbm9uYXJyb3dpbmc9XHJlbGF4CisKKyUgQGNhcnRvdWNoZSAuLi4gQGVuZCBjYXJ0b3VjaGU6IGRyYXcgcmVjdGFuZ2xlIHcvcm91bmRlZCBjb3JuZXJzIGFyb3VuZAorJSBlbnZpcm9ubWVudCBjb250ZW50cy4KK1xmb250XGNpcmNsZT1sY2lyY2xlMTAKK1xuZXdkaW1lblxjaXJjdGhpY2sKK1xuZXdkaW1lblxjYXJ0b3V0ZXJcbmV3ZGltZW5cY2FydGlubmVyCitcbmV3c2tpcFxub3JtYnNraXBcbmV3c2tpcFxub3JtcHNraXBcbmV3c2tpcFxub3JtbHNraXAKK1xjaXJjdGhpY2s9XGZvbnRkaW1lbjhcY2lyY2xlCislCitcZGVmXGN0bHt7XGNpcmNsZVxjaGFyJzAxM1xoc2tpcCAtNnB0fX0lIDZwdCBmcm9tIHBsIGZpbGU6IDEvMmNoYXJ3aWR0aAorXGRlZlxjdHJ7e1xoc2tpcCA2cHRcY2lyY2xlXGNoYXInMDEwfX0KK1xkZWZcY2Jse3tcY2lyY2xlXGNoYXInMDEyXGhza2lwIC02cHR9fQorXGRlZlxjYnJ7e1xoc2tpcCA2cHRcY2lyY2xlXGNoYXInMDExfX0KK1xkZWZcY2FydHRvcHtcaGJveCB0byBcY2FydG91dGVye1xoc2tpcFxsc2tpcAorICAgICAgICBcY3RsXGxlYWRlcnNcaHJ1bGUgaGVpZ2h0XGNpcmN0aGlja1xoZmlsXGN0cgorICAgICAgICBcaHNraXBccnNraXB9fQorXGRlZlxjYXJ0Ym90e1xoYm94IHRvIFxjYXJ0b3V0ZXJ7XGhza2lwXGxza2lwCisgICAgICAgIFxjYmxcbGVhZGVyc1xocnVsZSBoZWlnaHRcY2lyY3RoaWNrXGhmaWxcY2JyCisgICAgICAgIFxoc2tpcFxyc2tpcH19CislCitcbmV3c2tpcFxsc2tpcFxuZXdza2lwXHJza2lwCisKK1xlbnZkZWZcY2FydG91Y2hleyUKKyAgXGlmaG1vZGVccGFyXGZpICAlIGNhbid0IGJlIGluIHRoZSBtaWRzdCBvZiBhIHBhcmFncmFwaC4KKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICBcbHNraXA9XGxlZnRza2lwIFxyc2tpcD1ccmlnaHRza2lwCisgIFxsZWZ0c2tpcD0wcHRccmlnaHRza2lwPTBwdCAlIHdlIHdhbnQgdGhlc2UgKm91dHNpZGUqLgorICBcY2FydGlubmVyPVxoc2l6ZSBcYWR2YW5jZVxjYXJ0aW5uZXIgYnktXGxza2lwCisgIFxhZHZhbmNlXGNhcnRpbm5lciBieS1ccnNraXAKKyAgXGNhcnRvdXRlcj1caHNpemUKKyAgXGFkdmFuY2VcY2FydG91dGVyIGJ5IDE4LjRwdAklIGFsbG93IGZvciAzcHQga2VybnMgb24gZWl0aGVyCisJCQkJJSBzaWRlLCBhbmQgZm9yIDZwdCB3YXN0ZSBmcm9tCisJCQkJJSBlYWNoIGNvcm5lciBjaGFyLCBhbmQgcnVsZSB0aGlja25lc3MKKyAgXG5vcm1ic2tpcD1cYmFzZWxpbmVza2lwIFxub3JtcHNraXA9XHBhcnNraXAgXG5vcm1sc2tpcD1cbGluZXNraXAKKyAgJSBGbGFnIHRvIHRlbGwgQGxpc3AsIGV0Yy4sIG5vdCB0byBuYXJyb3cgbWFyZ2luLgorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXHZib3hcYmdyb3VwCisgICAgICBcYmFzZWxpbmVza2lwPTBwdFxwYXJza2lwPTBwdFxsaW5lc2tpcD0wcHQKKyAgICAgIFxjYXJ0dG9wCisgICAgICBcaGJveFxiZ3JvdXAKKwkgIFxoc2tpcFxsc2tpcAorCSAgXHZydWxlXGtlcm4zcHQKKwkgIFx2Ym94XGJncm91cAorCSAgICAgIFxrZXJuM3B0CisJICAgICAgXGhzaXplPVxjYXJ0aW5uZXIKKwkgICAgICBcYmFzZWxpbmVza2lwPVxub3JtYnNraXAKKwkgICAgICBcbGluZXNraXA9XG5vcm1sc2tpcAorCSAgICAgIFxwYXJza2lwPVxub3JtcHNraXAKKwkgICAgICBcdnNraXAgLVxwYXJza2lwCisJICAgICAgXGNvbW1lbnQgJSBGb3IgZXhwbGFuYXRpb24sIHNlZSB0aGUgZW5kIG9mIFxkZWZcZ3JvdXAuCit9CitcZGVmXEVjYXJ0b3VjaGV7JQorICAgICAgICAgICAgICBcaWZobW9kZVxwYXJcZmkKKwkgICAgICBca2VybjNwdAorCSAgXGVncm91cAorCSAgXGtlcm4zcHRcdnJ1bGUKKwkgIFxoc2tpcFxyc2tpcAorICAgICAgXGVncm91cAorICAgICAgXGNhcnRib3QKKyAgXGVncm91cAorICBcY2hlY2tpbnNlcnRzCit9CisKKworJSBUaGlzIG1hY3JvIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFsbCB0aGUgQGV4YW1wbGUgdmFyaWFudHMsCislIGluc2lkZSBhIGdyb3VwLgorXGRlZlxub25maWxsc3RhcnR7JQorICBcYWJvdmVlbnZicmVhaworICBcaGZ1enogPSAxMnB0ICUgRG9uJ3QgYmUgZnVzc3kKKyAgXHNlcHNwYWNlcyAlIE1ha2Ugc3BhY2VzIGJlIHdvcmQtc2VwYXJhdG9ycyByYXRoZXIgdGhhbiBzcGFjZSB0b2tlbnMuCisgIFxsZXRccGFyID0gXGxpc3BwYXIgJSBkb24ndCBpZ25vcmUgYmxhbmsgbGluZXMKKyAgXG9iZXlsaW5lcyAlIGVhY2ggbGluZSBvZiBpbnB1dCBpcyBhIGxpbmUgb2Ygb3V0cHV0CisgIFxwYXJza2lwID0gMHB0CisgIFxwYXJpbmRlbnQgPSAwcHQKKyAgXGVtZXJnZW5jeXN0cmV0Y2ggPSAwcHQgJSBkb24ndCB0cnkgdG8gYXZvaWQgb3ZlcmZ1bGwgYm94ZXMKKyAgXGlmeFxub25hcnJvd2luZ1xyZWxheAorICAgIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxleGRlbnRhbW91bnQ9XGxpc3BuYXJyb3dpbmcKKyAgXGVsc2UKKyAgICBcbGV0XG5vbmFycm93aW5nID0gXHJlbGF4CisgIFxmaQorICBcbGV0XGV4ZGVudD1cbm9maWxsZXhkZW50Cit9CisKKyUgSWYgeW91IHdhbnQgYWxsIGV4YW1wbGVzIGV0Yy4gc21hbGw6IEBzZXQgZGlzcGVudnNpemUgc21hbGwuCislIElmIHlvdSB3YW50IGV2ZW4gc21hbGwgZXhhbXBsZXMgdGhlIGZ1bGwgc2l6ZTogQHNldCBkaXNwZW52c2l6ZSBub3NtYWxsLgorJSBUaGlzIGFmZmVjdHMgdGhlIGZvbGxvd2luZyBkaXNwbGF5ZWQgZW52aXJvbm1lbnRzOgorJSAgICBAZXhhbXBsZSwgQGRpc3BsYXksIEBmb3JtYXQsIEBsaXNwCislCitcZGVmXHNtYWxsd29yZHtzbWFsbH0KK1xkZWZcbm9zbWFsbHdvcmR7bm9zbWFsbH0KK1xsZXRcU0VUZGlzcGVudnNpemVccmVsYXgKK1xkZWZcc2V0bm9ybWFsZGlzcGVudnslCisgIFxpZnhcU0VUZGlzcGVudnNpemVcc21hbGx3b3JkCisgICAgXHNtYWxsZXhhbXBsZWZvbnRzIFxybQorICBcZmkKK30KK1xkZWZcc2V0c21hbGxkaXNwZW52eyUKKyAgXGlmeFxTRVRkaXNwZW52c2l6ZVxub3NtYWxsd29yZAorICBcZWxzZQorICAgIFxzbWFsbGV4YW1wbGVmb250cyBccm0KKyAgXGZpCit9CisKKyUgV2Ugb2Z0ZW4gZGVmaW5lIHR3byBlbnZpcm9ubWVudHMsIEBmb28gYW5kIEBzbWFsbGZvby4KKyUgTGV0J3MgZG8gaXQgYnkgb25lIGNvbW1hbmQ6CitcZGVmXG1ha2VkaXNwZW52ICMxIzJ7CisgIFxleHBhbmRhZnRlclxlbnZkZWZcY3NuYW1lIzFcZW5kY3NuYW1lIHtcc2V0bm9ybWFsZGlzcGVudiAjMn0KKyAgXGV4cGFuZGFmdGVyXGVudmRlZlxjc25hbWUgc21hbGwjMVxlbmRjc25hbWUge1xzZXRzbWFsbGRpc3BlbnYgIzJ9CisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEUjMVxlbmRjc25hbWUgXGFmdGVyZW52YnJlYWsKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgRXNtYWxsIzFcZW5kY3NuYW1lIFxhZnRlcmVudmJyZWFrCit9CisKKyUgRGVmaW5lIHR3byBzeW5vbnltczoKK1xkZWZcbWFrZXR3b2Rpc3BlbnZzICMxIzIjM3sKKyAgXG1ha2VkaXNwZW52eyMxfXsjM30KKyAgXG1ha2VkaXNwZW52eyMyfXsjM30KK30KKworJSBAbGlzcDogaW5kZW50ZWQsIG5hcnJvd2VkLCB0eXBld3JpdGVyIGZvbnQ7IEBleGFtcGxlOiBzYW1lIGFzIEBsaXNwLgorJQorJSBAc21hbGxleGFtcGxlIGFuZCBAc21hbGxsaXNwOiB1c2Ugc21hbGxlciBmb250cy4KKyUgT3JpZ2luYWxseSBjb250cmlidXRlZCBieSBQYXZlbEB4ZXJveC4KKyUKK1xtYWtldHdvZGlzcGVudnMge2xpc3B9e2V4YW1wbGV9eyUKKyAgXG5vbmZpbGxzdGFydAorICBcdHQKKyAgXGxldFxrYmRmb250ID0gXGtiZGV4YW1wbGVmb250ICUgQWxsb3cgQGtiZCB0byBkbyBzb21ldGhpbmcgc3BlY2lhbC4KKyAgXGdvYmJsZSAgICAgICAlIGVhdCByZXR1cm4KK30KKworJSBAZGlzcGxheS9Ac21hbGxkaXNwbGF5OiBzYW1lIGFzIEBsaXNwIGV4Y2VwdCBrZWVwIGN1cnJlbnQgZm9udC4KKyUKK1xtYWtlZGlzcGVudiB7ZGlzcGxheX17JQorICBcbm9uZmlsbHN0YXJ0CisgIFxnb2JibGUKK30KKworJSBAZm9ybWF0L0BzbWFsbGZvcm1hdDogc2FtZSBhcyBAZGlzcGxheSBleGNlcHQgZG9uJ3QgbmFycm93IG1hcmdpbnMuCislCitcbWFrZWRpc3BlbnZ7Zm9ybWF0fXslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgIFxnb2JibGUKK30KKworJSBAZmx1c2hsZWZ0OiBzYW1lIGFzIEBmb3JtYXQsIGJ1dCBkb2Vzbid0IG9iZXkgXFNFVGRpc3BlbnZzaXplLgorXGVudmRlZlxmbHVzaGxlZnR7JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CitcbGV0XEVmbHVzaGxlZnQgPSBcYWZ0ZXJlbnZicmVhaworCislIEBmbHVzaHJpZ2h0LgorJQorXGVudmRlZlxmbHVzaHJpZ2h0eyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgMHB0IHBsdXMgMWZpbGwKKyAgXGdvYmJsZQorfQorXGxldFxFZmx1c2hyaWdodCA9IFxhZnRlcmVudmJyZWFrCisKKworJSBAcXVvdGF0aW9uIGRvZXMgbm9ybWFsIGxpbmVicmVha2luZyAoaGVuY2Ugd2UgY2FuJ3QgdXNlIFxub25maWxsc3RhcnQpCislIGFuZCBuYXJyb3dzIHRoZSBtYXJnaW5zLiAgV2Uga2VlcCBccGFyc2tpcCBub256ZXJvIGluIGdlbmVyYWwsIHNpbmNlCislIHdlJ3JlIGRvaW5nIG5vcm1hbCBmaWxsaW5nLiAgU28sIHdoZW4gdXNpbmcgXGFib3ZlZW52YnJlYWsgYW5kCislIFxhZnRlcmVudmJyZWFrLCB0ZW1wb3JhcmlseSBtYWtlIFxwYXJza2lwIDAuCislCitcZW52ZGVmXHF1b3RhdGlvbnslCisgIHtccGFyc2tpcD0wcHQgXGFib3ZlZW52YnJlYWt9JSBiZWNhdXNlIFxhYm92ZWVudmJyZWFrIGluc2VydHMgXHBhcnNraXAKKyAgXHBhcmluZGVudD0wcHQKKyAgJQorICAlIEBjYXJ0b3VjaGUgZGVmaW5lcyBcbm9uYXJyb3dpbmcgdG8gaW5oaWJpdCBuYXJyb3dpbmcgYXQgbmV4dCBsZXZlbCBkb3duLgorICBcaWZ4XG5vbmFycm93aW5nXHJlbGF4CisgICAgXGFkdmFuY2VcbGVmdHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcZXhkZW50YW1vdW50ID0gXGxpc3BuYXJyb3dpbmcKKyAgXGVsc2UKKyAgICBcbGV0XG5vbmFycm93aW5nID0gXHJlbGF4CisgIFxmaQorICBccGFyc2VhcmdccXVvdGF0aW9ubGFiZWwKK30KKworJSBXZSBoYXZlIHJldGFpbmVkIGEgbm9uemVybyBwYXJza2lwIGZvciB0aGUgZW52aXJvbm1lbnQsIHNpbmNlIHdlJ3JlCislIGRvaW5nIG5vcm1hbCBmaWxsaW5nLgorJQorXGRlZlxFcXVvdGF0aW9ueyUKKyAgXHBhcgorICBcaWZ4XHF1b3RhdGlvbmF1dGhvclx1bmRlZmluZWRcZWxzZQorICAgICUgaW5kZW50IGEgYml0LgorICAgIFxsZWZ0bGluZXtca2VybiAyXGxlZnRza2lwIFxzbCAtLS1ccXVvdGF0aW9uYXV0aG9yfSUKKyAgXGZpCisgIHtccGFyc2tpcD0wcHQgXGFmdGVyZW52YnJlYWt9JQorfQorCislIElmIHdlJ3JlIGdpdmVuIGFuIGFyZ3VtZW50LCB0eXBlc2V0IGl0IGluIGJvbGQgd2l0aCBhIGNvbG9uIGFmdGVyLgorXGRlZlxxdW90YXRpb25sYWJlbCMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAge1xiZiAjMTogfSUKKyAgXGZpCit9CisKKworJSBMYVRlWC1saWtlIEB2ZXJiYXRpbS4uLkBlbmQgdmVyYmF0aW0gYW5kIEB2ZXJiezxjaGFyPi4uLjxjaGFyPn0KKyUgSWYgd2Ugd2FudCB0byBhbGxvdyBhbnkgPGNoYXI+IGFzIGRlbGltaXRlciwKKyUgd2UgbmVlZCB0aGUgY3VybHkgYnJhY2VzIHNvIHRoYXQgbWFrZWluZm8gc2VlcyB0aGUgQHZlcmIgY29tbWFuZCwgZWc6CislIGBAdmVyYnguLi54JyB3b3VsZCBsb29rIGxpa2UgdGhlICdAdmVyYngnIGNvbW1hbmQuICAtLWphbm5la2VAZ251Lm9yZworJQorJSBbS251dGhdOiBEb25hbGQgRXJ2aW4gS251dGgsIDE5OTYuICBUaGUgVGVYYm9vay4KKyUKKyUgW0tudXRoXSBwLjM0NDsgb25seSB3ZSBuZWVkIHRvIGRvIHRoZSBvdGhlciBjaGFyYWN0ZXJzIFRleGluZm8gc2V0cworJSBhY3RpdmUgdG9vLiAgT3RoZXJ3aXNlLCB0aGV5IGdldCBsb3N0IGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gYQorJSB2ZXJiYXRpbSBsaW5lLgorXGRlZlxkb3NwZWNpYWxzeyUKKyAgXGRvXCBcZG9cXFxkb1x7XGRvXH1cZG9cJFxkb1wmJQorICBcZG9cI1xkb1xeXGRvXF5eS1xkb1xfXGRvXF5eQVxkb1wlXGRvXH4lCisgIFxkb1w8XGRvXD5cZG9cfFxkb1xAXGRvK1xkb1wiJQorfQorJQorJSBbS251dGhdIHAuIDM4MAorXGRlZlx1bmNhdGNvZGVzcGVjaWFsc3slCisgIFxkZWZcZG8jIzF7XGNhdGNvZGVgIyMxPVxvdGhlcn1cZG9zcGVjaWFsc30KKyUKKyUgW0tudXRoXSBwcC4gMzgwLDM4MSwzOTEKKyUgRGlzYWJsZSBTcGFuaXNoIGxpZ2F0dXJlcyA/YCBhbmQgIWAgb2YgXHR0IGZvbnQKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxgPVxhY3RpdmVcZ2RlZmB7XHJlbGF4XGxxfQorXGVuZGdyb3VwCislCislIFNldHVwIGZvciB0aGUgQHZlcmIgY29tbWFuZC4KKyUKKyUgRWlnaHQgc3BhY2VzIGZvciBhIHRhYgorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgIFxnZGVmXHRhYmVpZ2h0c3BhY2Vze1xjYXRjb2RlYFxeXkk9XGFjdGl2ZVxkZWZeXkl7XCBcIFwgXCBcIFwgXCBcIH19CitcZW5kZ3JvdXAKKyUKK1xkZWZcc2V0dXB2ZXJieyUKKyAgXHR0ICAlIGVhc2llc3QgKGFuZCBjb252ZW50aW9uYWxseSB1c2VkKSBmb250IGZvciB2ZXJiYXRpbQorICBcZGVmXHBhcntcbGVhdmV2bW9kZVxlbmRncmFmfSUKKyAgXGNhdGNvZGVgXGA9XGFjdGl2ZQorICBcdGFiZWlnaHRzcGFjZXMKKyAgJSBSZXNwZWN0IGxpbmUgYnJlYWtzLAorICAlIHByaW50IHNwZWNpYWwgc3ltYm9scyBhcyB0aGVtc2VsdmVzLCBhbmQKKyAgJSBtYWtlIGVhY2ggc3BhY2UgY291bnQKKyAgJSBtdXN0IGRvIGluIHRoaXMgb3JkZXI6CisgIFxvYmV5bGluZXMgXHVuY2F0Y29kZXNwZWNpYWxzIFxzZXBzcGFjZXMKK30KKworJSBTZXR1cCBmb3IgdGhlIEB2ZXJiYXRpbSBlbnZpcm9ubWVudAorJQorJSBSZWFsIHRhYiBleHBhbnNpb24KK1xuZXdkaW1lblx0YWJ3IFxzZXRib3gwPVxoYm94e1x0dFxzcGFjZX0gXHRhYnc9OFx3ZDAgJSB0YWIgYW1vdW50CislCitcZGVmXHN0YXJ0dGFiYm94e1xzZXRib3gwPVxoYm94XGJncm91cH0KK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQorICBcZ2RlZlx0YWJleHBhbmR7JQorICAgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQorICAgIFxkZWZeXkl7XGxlYXZldm1vZGVcZWdyb3VwCisgICAgICBcZGltZW4wPVx3ZDAgJSB0aGUgd2lkdGggc28gZmFyLCBvciBzaW5jZSB0aGUgcHJldmlvdXMgdGFiCisgICAgICBcZGl2aWRlXGRpbWVuMCBieVx0YWJ3CisgICAgICBcbXVsdGlwbHlcZGltZW4wIGJ5XHRhYncgJSBjb21wdXRlIHByZXZpb3VzIG11bHRpcGxlIG9mIFx0YWJ3CisgICAgICBcYWR2YW5jZVxkaW1lbjAgYnlcdGFidyAgJSBhZHZhbmNlIHRvIG5leHQgbXVsdGlwbGUgb2YgXHRhYncKKyAgICAgIFx3ZDA9XGRpbWVuMCBcYm94MCBcc3RhcnR0YWJib3gKKyAgICB9JQorICB9CitcZW5kZ3JvdXAKK1xkZWZcc2V0dXB2ZXJiYXRpbXslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgICUgRWFzaWVzdCAoYW5kIGNvbnZlbnRpb25hbGx5IHVzZWQpIGZvbnQgZm9yIHZlcmJhdGltCisgIFx0dAorICBcZGVmXHBhcntcbGVhdmV2bW9kZVxlZ3JvdXBcYm94MFxlbmRncmFmfSUKKyAgXGNhdGNvZGVgXGA9XGFjdGl2ZQorICBcdGFiZXhwYW5kCisgICUgUmVzcGVjdCBsaW5lIGJyZWFrcywKKyAgJSBwcmludCBzcGVjaWFsIHN5bWJvbHMgYXMgdGhlbXNlbHZlcywgYW5kCisgICUgbWFrZSBlYWNoIHNwYWNlIGNvdW50CisgICUgbXVzdCBkbyBpbiB0aGlzIG9yZGVyOgorICBcb2JleWxpbmVzIFx1bmNhdGNvZGVzcGVjaWFscyBcc2Vwc3BhY2VzCisgIFxldmVyeXBhcntcc3RhcnR0YWJib3h9JQorfQorCislIERvIHRoZSBAdmVyYiBtYWdpYzogdmVyYmF0aW0gdGV4dCBpcyBxdW90ZWQgYnkgdW5pcXVlCislIGRlbGltaXRlciBjaGFyYWN0ZXJzLiAgQmVmb3JlIGZpcnN0IGRlbGltaXRlciBleHBlY3QgYQorJSByaWdodCBicmFjZSwgYWZ0ZXIgbGFzdCBkZWxpbWl0ZXIgZXhwZWN0IGNsb3NpbmcgYnJhY2U6CislCislICAgIFxkZWZcZG92ZXJiJ3snPGNoYXI+IzE8Y2hhcj4nfSd7IzF9CislCislIFtLbnV0aF0gcC4gMzgyOyBvbmx5IGVhdCBvdXRlciB7fQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgWz0xXGNhdGNvZGVgXT0yXGNhdGNvZGVgXHs9XG90aGVyXGNhdGNvZGVgXH09XG90aGVyCisgIFxnZGVmXGRvdmVyYnsjMVtcZGVmXG5leHQjIzEjMX1bIyMxXGVuZGdyb3VwXVxuZXh0XQorXGVuZGdyb3VwCislCitcZGVmXHZlcmJ7XGJlZ2luZ3JvdXBcc2V0dXB2ZXJiXGRvdmVyYn0KKyUKKyUKKyUgRG8gdGhlIEB2ZXJiYXRpbSBtYWdpYzogZGVmaW5lIHRoZSBtYWNybyBcZG92ZXJiYXRpbSBzbyB0aGF0CislIHRoZSAoZmlyc3QpIGFyZ3VtZW50IGVuZHMgd2hlbiAnQGVuZCB2ZXJiYXRpbScgaXMgcmVhY2hlZCwgaWU6CislCislICAgICBcZGVmXGRvdmVyYmF0aW0jMUBlbmQgdmVyYmF0aW17IzF9CislCislIEZvciBUZXhpbmZvIGl0J3MgYSBsb3QgZWFzaWVyIHRoYW4gZm9yIExhVGVYLAorJSBiZWNhdXNlIHRleGluZm8ncyBcdmVyYmF0aW0gZG9lc24ndCBzdG9wIGF0ICdcZW5ke3ZlcmJhdGltfSc6CislIHdlIG5lZWQgbm90IHJlZGVmaW5lICdcJywgJ3snIGFuZCAnfScuCislCislIEluc3BpcmVkIGJ5IExhVGVYJ3MgdmVyYmF0aW0gY29tbWFuZCBzZXQgW2xhdGV4Lmx0eF0KKyUKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFwgPVxhY3RpdmUKKyAgXG9iZXlsaW5lcyAlCisgICUgaWdub3JlIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGZpcnN0IF5eTSwgdGhhdCdzIHRoZSBuZXdsaW5lIGF0IHRoZSBlbmQKKyAgJSBvZiB0aGUgQHZlcmJhdGltIGlucHV0IGxpbmUgaXRzZWxmLiAgT3RoZXJ3aXNlIHdlIGdldCBhbiBleHRyYSBibGFuaworICAlIGxpbmUgaW4gdGhlIG91dHB1dC4KKyAgXHhkZWZcZG92ZXJiYXRpbSMxXl5NIzJAZW5kIHZlcmJhdGlteyMyXG5vZXhwYW5kXGVuZFxnb2JibGUgdmVyYmF0aW19JQorICAlIFdlIHJlYWxseSB3YW50IHsuLi5cZW5kIHZlcmJhdGltfSBpbiB0aGUgYm9keSBvZiB0aGUgbWFjcm8sIGJ1dAorICAlIHdpdGhvdXQgdGhlIGFjdGl2ZSBzcGFjZTsgdGh1cyB3ZSBoYXZlIHRvIHVzZSBceGRlZiBhbmQgXGdvYmJsZS4KK1xlbmRncm91cAorJQorXGVudmRlZlx2ZXJiYXRpbXslCisgICAgXHNldHVwdmVyYmF0aW1cZG92ZXJiYXRpbQorfQorXGxldFxFdmVyYmF0aW0gPSBcYWZ0ZXJlbnZicmVhaworCisKKyUgQHZlcmJhdGltaW5jbHVkZSBGSUxFIC0gaW5zZXJ0IHRleHQgb2YgZmlsZSBpbiB2ZXJiYXRpbSBlbnZpcm9ubWVudC4KKyUKK1xkZWZcdmVyYmF0aW1pbmNsdWRle1xwYXJzZWFyZ3VzaW5nXGZpbGVuYW1lY2F0Y29kZXNcZG92ZXJiYXRpbWluY2x1ZGV9CislCitcZGVmXGRvdmVyYmF0aW1pbmNsdWRlIzF7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXHNldHVwdmVyYmF0aW0KKyAgICBcaW5wdXQgIzEKKyAgICBcYWZ0ZXJlbnZicmVhaworICB9JQorfQorCislIEBjb3B5aW5nIC4uLiBAZW5kIGNvcHlpbmcuCislIFNhdmUgdGhlIHRleHQgYXdheSBmb3IgQGluc2VydGNvcHlpbmcgbGF0ZXIuCislCislIFdlIHNhdmUgdGhlIHVuaW50ZXJwcmV0ZWQgdG9rZW5zLCByYXRoZXIgdGhhbiBjcmVhdGluZyBhIGJveC4KKyUgU2F2aW5nIHRoZSB0ZXh0IGluIGEgYm94IHdvdWxkIGJlIG11Y2ggZWFzaWVyLCBidXQgdGhlbiBhbGwgdGhlCislIHR5cGVzZXR0aW5nIGNvbW1hbmRzIChAc21hbGxib29rLCBmb250IGNoYW5nZXMsIGV0Yy4pIGhhdmUgdG8gYmUgZG9uZQorJSBiZWZvcmVoYW5kIC0tIGFuZCBhKSB3ZSB3YW50IEBjb3B5aW5nIHRvIGJlIGRvbmUgZmlyc3QgaW4gdGhlIHNvdXJjZQorJSBmaWxlOyBiKSBsZXR0aW5nIHVzZXJzIGRlZmluZSB0aGUgZnJvbnRtYXR0ZXIgaW4gYXMgZmxleGlibGUgb3JkZXIgYXMKKyUgcG9zc2libGUgaXMgdmVyeSBkZXNpcmFibGUuCislCitcZGVmXGNvcHlpbmd7XGNoZWNrZW52e31cYmVnaW5ncm91cFxzY2FuYXJnY3R4dFxkb2NvcHlpbmd9CitcZGVmXGRvY29weWluZyMxQGVuZCBjb3B5aW5ne1xlbmRncm91cFxkZWZcY29weWluZ3RleHR7IzF9fQorJQorXGRlZlxpbnNlcnRjb3B5aW5neyUKKyAgXGJlZ2luZ3JvdXAKKyAgICBccGFyaW5kZW50ID0gMHB0ICAlIHBhcmFncmFwaCBpbmRlbnRhdGlvbiBsb29rcyB3cm9uZyBvbiB0aXRsZSBwYWdlCisgICAgXHNjYW5leHBcY29weWluZ3RleHQKKyAgXGVuZGdyb3VwCit9CisKK1xtZXNzYWdle2RlZnVucyx9CislIEBkZWZ1biBldGMuCisKK1xuZXdza2lwXGRlZmJvZHlpbmRlbnQgXGRlZmJvZHlpbmRlbnQ9LjRpbgorXG5ld3NraXBcZGVmYXJnc2luZGVudCBcZGVmYXJnc2luZGVudD01MHB0CitcbmV3c2tpcFxkZWZsYXN0YXJnbWFyZ2luIFxkZWZsYXN0YXJnbWFyZ2luPTE4cHQKKworJSBTdGFydCB0aGUgcHJvY2Vzc2luZyBvZiBAZGVmZm46CitcZGVmXHN0YXJ0ZGVmdW57JQorICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAKKyAgICBcbWVkYnJlYWsKKyAgXGVsc2UKKyAgICAlIElmIHRoZXJlIGFyZSB0d28gQGRlZiBjb21tYW5kcyBpbiBhIHJvdywgd2UnbGwgaGF2ZSBhIFxub2JyZWFrLAorICAgICUgd2hpY2ggaXMgdGhlcmUgdG8ga2VlcCB0aGUgZnVuY3Rpb24gZGVzY3JpcHRpb24gdG9nZXRoZXIgd2l0aCBpdHMKKyAgICAlIGhlYWRlci4gIEJ1dCBpZiB0aGVyZSdzIG5vdGhpbmcgYnV0IGhlYWRlcnMsIHdlIG5lZWQgdG8gYWxsb3cgYQorICAgICUgYnJlYWsgc29tZXdoZXJlLiAgQ2hlY2sgc3BlY2lmaWNhbGx5IGZvciBwZW5hbHR5IDEwMDAyLCBpbnNlcnRlZAorICAgICUgYnkgXGRlZmFyZ3Njb21tb25lbmRpbmcsIGluc3RlYWQgb2YgMTAwMDAsIHNpbmNlIHRoZSBzZWN0aW9uaW5nCisgICAgJSBjb21tYW5kcyBhbHNvIGluc2VydCBhIG5vYnJlYWsgcGVuYWx0eSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gYWxsb3cKKyAgICAlIGEgYnJlYWsgYmV0d2VlbiBhIHNlY3Rpb24gaGVhZGluZyBhbmQgYSBkZWZ1bi4KKyAgICAlIAorICAgIFxpZm51bVxsYXN0cGVuYWx0eT0xMDAwMiBccGVuYWx0eTIwMDAgXGZpCisgICAgJQorICAgICUgU2ltaWxhcmx5LCBhZnRlciBhIHNlY3Rpb24gaGVhZGluZywgZG8gbm90IGFsbG93IGEgYnJlYWsuCisgICAgJSBCdXQgZG8gaW5zZXJ0IHRoZSBnbHVlLgorICAgIFxtZWRza2lwICAlIHByZWNlZGVkIGJ5IGRpc2NhcmRhYmxlIHBlbmFsdHksIHNvIG5vdCBhIGJyZWFrcG9pbnQKKyAgXGZpCisgICUKKyAgXHBhcmluZGVudD0waW4KKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgXGRlZmJvZHlpbmRlbnQKKyAgXGV4ZGVudGFtb3VudD1cZGVmYm9keWluZGVudAorfQorCitcZGVmXGRvZGVmdW54IzF7JQorICAlIEZpcnN0LCBjaGVjayB3aGV0aGVyIHdlIGFyZSBpbiB0aGUgcmlnaHQgZW52aXJvbm1lbnQ6CisgIFxjaGVja2VudiMxJQorICAlCisgICUgQXMgYWJvdmUsIGFsbG93IGxpbmUgYnJlYWsgaWYgd2UgaGF2ZSBtdWx0aXBsZSB4IGhlYWRlcnMgaW4gYSByb3cuCisgICUgSXQncyBub3QgYSBncmVhdCBwbGFjZSwgdGhvdWdoLgorICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkzMDAwIFxmaQorICAlCisgICUgQW5kIG5vdywgaXQncyB0aW1lIHRvIHJldXNlIHRoZSBib2R5IG9mIHRoZSBvcmlnaW5hbCBkZWZ1bjoKKyAgXGV4cGFuZGFmdGVyXGdvYmJsZWRlZnVuIzElCit9CitcZGVmXGdvYmJsZWRlZnVuIzFcc3RhcnRkZWZ1bnt9CisKKyUgXHByaW50ZGVmdW5saW5lIFxkZWZmbmhlYWRlcnt0ZXh0fQorJQorXGRlZlxwcmludGRlZnVubGluZSMxIzJ7JQorICBcYmVnaW5ncm91cAorICAgICUgY2FsbCBcZGVmZm5oZWFkZXI6CisgICAgIzEjMiBcZW5kaGVhZGVyCisgICAgJSBjb21tb24gZW5kaW5nOgorICAgIFxpbnRlcmxpbmVwZW5hbHR5ID0gMTAwMDAKKyAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkgMHB0IHBsdXMgMWZpbAorICAgIFxlbmRncmFmCisgICAgXG5vYnJlYWtcdnNraXAgLVxwYXJza2lwCisgICAgXHBlbmFsdHkgMTAwMDIgICUgc2lnbmFsIHRvIFxzdGFydGRlZnVuIGFuZCBcZG9kZWZ1bngKKyAgICAlIFNvbWUgb2YgdGhlIEBkZWZ1bi10eXBlIHRhZ3MgZG8gbm90IGVuYWJsZSBtYWdpYyBwYXJlbnRoZXNlcywKKyAgICAlIHJlbmRlcmluZyB0aGUgZm9sbG93aW5nIGNoZWNrIHJlZHVuZGFudC4gIEJ1dCB3ZSBkb24ndCBvcHRpbWl6ZS4KKyAgICBcY2hlY2twYXJlbmNvdW50cworICBcZW5kZ3JvdXAKK30KKworXGRlZlxFZGVmdW57XGVuZGdyYWZcbWVkYnJlYWt9CisKKyUgXG1ha2VkZWZ1bntkZWZmbn0gY3JlYXRlcyBcZGVmZm4sIFxkZWZmbnggYW5kIFxFZGVmZm47CislIHRoZSBvbmx5IHRoaW5nIHJlbWFpbm5pZyBpcyB0byBkZWZpbmUgXGRlZmZuaGVhZGVyLgorJQorXGRlZlxtYWtlZGVmdW4jMXslCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEUjMVxlbmRjc25hbWUgPSBcRWRlZnVuCisgIFxlZGVmXHRlbXB7XG5vZXhwYW5kXGRvbWFrZWRlZnVuCisgICAgXG1ha2Vjc25hbWV7IzF9XG1ha2Vjc25hbWV7IzF4fVxtYWtlY3NuYW1leyMxaGVhZGVyfX0lCisgIFx0ZW1wCit9CisKKyUgXGRvbWFrZWRlZnVuIFxkZWZmbiBcZGVmZm54IFxkZWZmbmhlYWRlcgorJQorJSBEZWZpbmUgXGRlZmZuIGFuZCBcZGVmZm54LCB3aXRob3V0IHBhcmFtZXRlcnMuCislIFxkZWZmbmhlYWRlciBoYXMgdG8gYmUgZGVmaW5lZCBleHBsaWNpdGx5LgorJQorXGRlZlxkb21ha2VkZWZ1biMxIzIjM3slCisgIFxlbnZkZWYjMXslCisgICAgXHN0YXJ0ZGVmdW4KKyAgICBccGFyc2Vhcmd1c2luZ1xhY3RpdmVwYXJlbnN7XHByaW50ZGVmdW5saW5lIzN9JQorICB9JQorICBcZGVmIzJ7XGRvZGVmdW54IzF9JQorICBcZGVmIzMlCit9CisKKyUlJSBVbnR5cGVkIGZ1bmN0aW9uczoKKworJSBAZGVmZm4gY2F0ZWdvcnkgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZmZufXtcZGVmZm5nZW5lcmFse319CisKKyUgQGRlZmZuIGNhdGVnb3J5IGNsYXNzIG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZvcH0jMSB7XGRlZm9wb257IzFcIFxwdXR3b3Jkb259fQorCislIFxkZWZvcG9uIHtjYXRlZ29yeSBvbn1jbGFzcyBuYW1lIGFyZ3MKK1xkZWZcZGVmb3BvbiMxIzIge1xkZWZmbmdlbmVyYWx7XHB1dHdvcmRvblwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZmZuZ2VuZXJhbCB7c3ViaW5kfWNhdGVnb3J5IG5hbWUgYXJncworJQorXGRlZlxkZWZmbmdlbmVyYWwjMSMyICMzICM0XGVuZGhlYWRlcnslCisgICUgUmVtZW1iZXIgdGhhdCBcZG9zdWJpbmR7Zm59e2Zvb317fSBpcyBlcXVpdmFsZW50IHRvIFxkb2luZHtmbn17Zm9vfS4KKyAgXGRvc3ViaW5ke2ZufXtcY29kZXsjM319eyMxfSUKKyAgXGRlZm5hbWV7IzJ9e317IzN9XG1hZ2ljYW1wXGRlZnVuYXJnc3sjNFx1bnNraXB9JQorfQorCislJSUgVHlwZWQgZnVuY3Rpb25zOgorCislIEBkZWZ0eXBlZm4gY2F0ZWdvcnkgdHlwZSBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZWZufXtcZGVmdHlwZWZuZ2VuZXJhbHt9fQorCislIEBkZWZ0eXBlb3AgY2F0ZWdvcnkgY2xhc3MgdHlwZSBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZW9wfSMxIHtcZGVmdHlwZW9wb257IzFcIFxwdXR3b3Jkb259fQorCislIFxkZWZ0eXBlb3BvbiB7Y2F0ZWdvcnkgb259Y2xhc3MgdHlwZSBuYW1lIGFyZ3MKK1xkZWZcZGVmdHlwZW9wb24jMSMyIHtcZGVmdHlwZWZuZ2VuZXJhbHtccHV0d29yZG9uXCBcY29kZXsjMn19eyMxXCBcY29kZXsjMn19IH0KKworJSBcZGVmdHlwZWZuZ2VuZXJhbCB7c3ViaW5kfWNhdGVnb3J5IHR5cGUgbmFtZSBhcmdzCislCitcZGVmXGRlZnR5cGVmbmdlbmVyYWwjMSMyICMzICM0ICM1XGVuZGhlYWRlcnslCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzR9fXsjMX0lCisgIFxkZWZuYW1leyMyfXsjM317IzR9XGRlZnVuYXJnc3sjNVx1bnNraXB9JQorfQorCislJSUgVHlwZWQgdmFyaWFibGVzOgorCislIEBkZWZ0eXBldnIgY2F0ZWdvcnkgdHlwZSB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBldnJ9e1xkZWZ0eXBlY3ZnZW5lcmFse319CisKKyUgQGRlZnR5cGVjdiBjYXRlZ29yeSBjbGFzcyB0eXBlIHZhciBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVjdn0jMSB7XGRlZnR5cGVjdm9meyMxXCBccHV0d29yZG9mfX0KKworJSBcZGVmdHlwZWN2b2Yge2NhdGVnb3J5IG9mfWNsYXNzIHR5cGUgdmFyIGFyZ3MKK1xkZWZcZGVmdHlwZWN2b2YjMSMyIHtcZGVmdHlwZWN2Z2VuZXJhbHtccHV0d29yZG9mXCBcY29kZXsjMn19eyMxXCBcY29kZXsjMn19IH0KKworJSBcZGVmdHlwZWN2Z2VuZXJhbCB7c3ViaW5kfWNhdGVnb3J5IHR5cGUgdmFyIGFyZ3MKKyUKK1xkZWZcZGVmdHlwZWN2Z2VuZXJhbCMxIzIgIzMgIzQgIzVcZW5kaGVhZGVyeyUKKyAgXGRvc3ViaW5ke3ZyfXtcY29kZXsjNH19eyMxfSUKKyAgXGRlZm5hbWV7IzJ9eyMzfXsjNH1cZGVmdW5hcmdzeyM1XHVuc2tpcH0lCit9CisKKyUlJSBVbnR5cGVkIHZhcmlhYmxlczoKKworJSBAZGVmdnIgY2F0ZWdvcnkgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdnJ9IzEge1xkZWZ0eXBldnJoZWFkZXJ7IzF9IHt9IH0KKworJSBAZGVmY3YgY2F0ZWdvcnkgY2xhc3MgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmY3Z9IzEge1xkZWZjdm9meyMxXCBccHV0d29yZG9mfX0KKworJSBcZGVmY3ZvZiB7Y2F0ZWdvcnkgb2Z9Y2xhc3MgdmFyIGFyZ3MKK1xkZWZcZGVmY3ZvZiMxIzIge1xkZWZ0eXBlY3ZvZnsjMX0jMiB7fSB9CisKKyUlJSBUeXBlOgorJSBAZGVmdHAgY2F0ZWdvcnkgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnRwfSMxICMyICMzXGVuZGhlYWRlcnslCisgIFxkb2luZHt0cH17XGNvZGV7IzJ9fSUKKyAgXGRlZm5hbWV7IzF9e317IzJ9XGRlZnVuYXJnc3sjM1x1bnNraXB9JQorfQorCislIFJlbWFpbmluZyBAZGVmdW4tbGlrZSBzaG9ydGN1dHM6CitcbWFrZWRlZnVue2RlZnVufXtcZGVmZm5oZWFkZXJ7XHB1dHdvcmREZWZmdW5jfSB9CitcbWFrZWRlZnVue2RlZm1hY317XGRlZmZuaGVhZGVye1xwdXR3b3JkRGVmbWFjfSB9CitcbWFrZWRlZnVue2RlZnNwZWN9e1xkZWZmbmhlYWRlcntccHV0d29yZERlZnNwZWN9IH0KK1xtYWtlZGVmdW57ZGVmdHlwZWZ1bn17XGRlZnR5cGVmbmhlYWRlcntccHV0d29yZERlZmZ1bmN9IH0KK1xtYWtlZGVmdW57ZGVmdmFyfXtcZGVmdnJoZWFkZXJ7XHB1dHdvcmREZWZ2YXJ9IH0KK1xtYWtlZGVmdW57ZGVmb3B0fXtcZGVmdnJoZWFkZXJ7XHB1dHdvcmREZWZvcHR9IH0KK1xtYWtlZGVmdW57ZGVmdHlwZXZhcn17XGRlZnR5cGV2cmhlYWRlcntccHV0d29yZERlZnZhcn0gfQorXG1ha2VkZWZ1bntkZWZtZXRob2R9e1xkZWZvcG9uXHB1dHdvcmRNZXRob2Rvbn0KK1xtYWtlZGVmdW57ZGVmdHlwZW1ldGhvZH17XGRlZnR5cGVvcG9uXHB1dHdvcmRNZXRob2Rvbn0KK1xtYWtlZGVmdW57ZGVmaXZhcn17XGRlZmN2b2ZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZn0KK1xtYWtlZGVmdW57ZGVmdHlwZWl2YXJ9e1xkZWZ0eXBlY3ZvZlxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9mfQorCislIFxkZWZuYW1lLCB3aGljaCBmb3JtYXRzIHRoZSBuYW1lIG9mIHRoZSBAZGVmIChub3QgdGhlIGFyZ3MpLgorJSAjMSBpcyB0aGUgY2F0ZWdvcnksIHN1Y2ggYXMgIkZ1bmN0aW9uIi4KKyUgIzIgaXMgdGhlIHJldHVybiB0eXBlLCBpZiBhbnkuCislICMzIGlzIHRoZSBmdW5jdGlvbiBuYW1lLgorJQorJSBXZSBhcmUgZm9sbG93ZWQgYnkgKGJ1dCBub3QgcGFzc2VkKSB0aGUgYXJndW1lbnRzLCBpZiBhbnkuCislCitcZGVmXGRlZm5hbWUjMSMyIzN7JQorICAlIEdldCB0aGUgdmFsdWVzIG9mIFxsZWZ0c2tpcCBhbmQgXHJpZ2h0c2tpcCBhcyB0aGV5IHdlcmUgb3V0c2lkZSB0aGUgQGRlZi4uLgorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSAtXGRlZmJvZHlpbmRlbnQKKyAgJQorICAlIEhvdyB3ZSdsbCBmb3JtYXQgdGhlIHR5cGUgbmFtZS4gIFB1dHRpbmcgaXQgaW4gYnJhY2tldHMgaGVscHMKKyAgJSBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZSBib2R5IHRleHQgdGhhdCBtYXkgZW5kIHVwIG9uIHRoZSBuZXh0IGxpbmUKKyAgJSBqdXN0IGJlbG93IGl0LgorICBcZGVmXHRlbXB7IzF9JQorICBcc2V0Ym94MD1caGJveHtca2VyblxkZWZsYXN0YXJnbWFyZ2luIFxpZnhcdGVtcFxlbXB0eVxlbHNlIFtccm1cdGVtcF1cZml9CisgICUKKyAgJSBGaWd1cmUgb3V0IGxpbmUgc2l6ZXMgZm9yIHRoZSBwYXJhZ3JhcGggc2hhcGUuCisgICUgVGhlIGZpcnN0IGxpbmUgbmVlZHMgc3BhY2UgZm9yIFxib3gwOyBidXQgaWYgXHJpZ2h0c2tpcCBpcyBub256ZXJvLAorICAlIHdlIG5lZWQgb25seSBzcGFjZSBmb3IgdGhlIHBhcnQgb2YgXGJveDAgd2hpY2ggZXhjZWVkcyBpdDoKKyAgXGRpbWVuMD1caHNpemUgIFxhZHZhbmNlXGRpbWVuMCBieSAtXHdkMCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxyaWdodHNraXAKKyAgJSBUaGUgY29udGludWF0aW9uczoKKyAgXGRpbWVuMj1caHNpemUgIFxhZHZhbmNlXGRpbWVuMiBieSAtXGRlZmFyZ3NpbmRlbnQKKyAgJSAocGxhaW4udGV4IHNheXMgdGhhdCBcZGltZW4xIHNob3VsZCBiZSB1c2VkIG9ubHkgYXMgZ2xvYmFsLikKKyAgXHBhcnNoYXBlIDIgMGluIFxkaW1lbjAgXGRlZmFyZ3NpbmRlbnQgXGRpbWVuMgorICAlCisgICUgUHV0IHRoZSB0eXBlIG5hbWUgdG8gdGhlIHJpZ2h0IG1hcmdpbi4KKyAgXG5vaW5kZW50CisgIFxoYm94IHRvIDBwdHslCisgICAgXGhmaWxcYm94MCBca2Vybi1caHNpemUKKyAgICAlIFxoc2l6ZSBoYXMgdG8gYmUgc2hvcnRlbmVkIHRoaXMgd2F5OgorICAgIFxrZXJuXGxlZnRza2lwCisgICAgJSBJbnRlbnRpb25hbGx5IGRvIG5vdCByZXNwZWN0IFxyaWdodHNraXAsIHNpbmNlIHdlIG5lZWQgdGhlIHNwYWNlLgorICB9JQorICAlCisgICUgQWxsb3cgYWxsIGxpbmVzIHRvIGJlIHVuZGVyZnVsbCB3aXRob3V0IGNvbXBsYWludDoKKyAgXHRvbGVyYW5jZT0xMDAwMCBcaGJhZG5lc3M9MTAwMDAKKyAgXGV4ZGVudGFtb3VudD1cZGVmYm9keWluZGVudAorICB7JQorICAgICUgZGVmdW4gZm9udHMuIFdlIHVzZSB0eXBld3JpdGVyIGJ5IGRlZmF1bHQgKHVzZWQgdG8gYmUgYm9sZCkgYmVjYXVzZToKKyAgICAlIC4gd2UncmUgcHJpbnRpbmcgaWRlbnRpZmllcnMsIHRoZXkgc2hvdWxkIGJlIGluIHR0IGluIHByaW5jaXBsZS4KKyAgICAlIC4gaW4gbGFuZ3VhZ2VzIHdpdGggbWFueSBhY2NlbnRzLCBzdWNoIGFzIEN6ZWNoIG9yIEZyZW5jaCwgaXQncworICAgICUgICBjb21tb24gdG8gbGVhdmUgYWNjZW50cyBvZmYgaWRlbnRpZmllcnMuICBUaGUgcmVzdWx0IGxvb2tzIG9rIGluCisgICAgJSAgIHR0LCBidXQgZXhjZWVkaW5nbHkgc3RyYW5nZSBpbiBybS4KKyAgICAlIC4gd2UgZG9uJ3Qgd2FudCAtLSBhbmQgLS0tIHRvIGJlIHRyZWF0ZWQgYXMgbGlnYXR1cmVzLgorICAgICUgLiB0aGlzIHN0aWxsIGRvZXMgbm90IGZpeCB0aGUgP2AgYW5kICFgIGxpZ2F0dXJlcywgYnV0IHNvIGZhciBubworICAgICUgICBvbmUgaGFzIG1hZGUgaWRlbnRpZmllcnMgdXNpbmcgdGhlbSA6KS4KKyAgICBcZGYgXHR0CisgICAgXGRlZlx0ZW1weyMyfSUgcmV0dXJuIHZhbHVlIHR5cGUKKyAgICBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBcdGNsb3Nle1x0ZW1wfSBcZmkKKyAgICAjMyUgb3V0cHV0IGZ1bmN0aW9uIG5hbWUKKyAgfSUKKyAge1xybVxlbnNraXB9JSBoc2tpcCAwLjUgZW0gb2YgXHRlbnJtCisgICUKKyAgXGJvbGRicmF4CisgICUgYXJndW1lbnRzIHdpbGwgYmUgb3V0cHV0IG5leHQsIGlmIGFueS4KK30KKworJSBQcmludCBhcmd1bWVudHMgaW4gc2xhbnRlZCByb21hbiAobm90IHR0c2wpLCBpbmNvbnNpc3RlbnRseSB3aXRoIHVzaW5nCislIHR0IGZvciB0aGUgbmFtZS4gIFRoaXMgaXMgYmVjYXVzZSBsaXRlcmFsIHRleHQgaXMgc29tZXRpbWVzIG5lZWRlZCBpbgorJSB0aGUgYXJndW1lbnQgbGlzdCAoZ3JvZmYgbWFudWFsKSwgYW5kIHR0c2wgYW5kIHR0IGFyZSBub3QgdmVyeQorJSBkaXN0aW5ndWlzaGFibGUuICBQcmV2ZW50IGh5cGhlbmF0aW9uIGF0IGAtJyBjaGFycy4KKyUKK1xkZWZcZGVmdW5hcmdzIzF7JQorICAlIHVzZSBzbCBieSBkZWZhdWx0IChub3QgdHRzbCksCisgICUgdHQgZm9yIHRoZSBuYW1lcy4KKyAgXGRmIFxzbCBcaHlwaGVuY2hhclxmb250PTAKKyAgJQorICAlIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBhbiBhcmd1bWVudCBoYXMgdHdvIGRhc2hlcyAoZm9yIGluc3RhbmNlKSwgd2UKKyAgJSB3YW50IGEgd2F5IHRvIGdldCB0dHNsLiAgTGV0J3MgdHJ5IEB2YXIgZm9yIHRoYXQuCisgIFxsZXRcdmFyPVx0dHNsYW50ZWQKKyAgIzElCisgIFxzbFxoeXBoZW5jaGFyXGZvbnQ9NDUKK30KKworJSBXZSB3YW50ICgpJltdIHRvIHByaW50IHNwZWNpYWxseSBvbiB0aGUgZGVmdW4gbGluZS4KKyUKK1xkZWZcYWN0aXZlcGFyZW5zeyUKKyAgXGNhdGNvZGVgXCg9XGFjdGl2ZSBcY2F0Y29kZWBcKT1cYWN0aXZlCisgIFxjYXRjb2RlYFxbPVxhY3RpdmUgXGNhdGNvZGVgXF09XGFjdGl2ZQorICBcY2F0Y29kZWBcJj1cYWN0aXZlCit9CisKKyUgTWFrZSBjb250cm9sIHNlcXVlbmNlcyB3aGljaCBhY3QgbGlrZSBub3JtYWwgcGFyZW50aGVzaXMgY2hhcnMuCitcbGV0XGxwYXJlbiA9ICggXGxldFxycGFyZW4gPSApCisKKyUgQmUgc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGEgZGVmaW5pdGlvbiBmb3IgYCgnLCBldGMuICBGb3IgZXhhbXBsZSwKKyUgaWYgdGhlIGZuIG5hbWUgaGFzIHBhcmVucyBpbiBpdCwgXGJvbGRicmF4IHdpbGwgbm90IGJlIGluIGVmZmVjdCB5ZXQsCislIHNvIFRlWCB3b3VsZCBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQgdW5kZWZpbmVkIGNvbnRyb2wgc2VxdWVuY2UuCit7CisgIFxhY3RpdmVwYXJlbnMKKyAgXGdsb2JhbFxsZXQoPVxscGFyZW4gXGdsb2JhbFxsZXQpPVxycGFyZW4KKyAgXGdsb2JhbFxsZXRbPVxsYnJhY2sgXGdsb2JhbFxsZXRdPVxyYnJhY2sKKyAgXGdsb2JhbFxsZXQmID0gXCYKKworICBcZ2RlZlxib2xkYnJheHtcbGV0KD1cb3BuclxsZXQpPVxjbG5yXGxldFs9XGxicmJcbGV0XT1ccmJyYn0KKyAgXGdkZWZcbWFnaWNhbXB7XGxldCY9XGFtcHJtfQorfQorCitcbmV3Y291bnRccGFyZW5jb3VudAorCislIElmIHdlIGVuY291bnRlciAmZm9vLCB0aGVuIHR1cm4gb24gKCktaGFja2luZyBhZnRlcndhcmRzCitcbmV3aWZcaWZhbXBzZWVuCitcZGVmXGFtcHJtIzEge1xhbXBzZWVudHJ1ZXtcYmZcJiMxIH19CisKK1xkZWZccGFyZW5mb250eyUKKyAgXGlmYW1wc2VlbgorICAgICUgQXQgdGhlIGZpcnN0IGxldmVsLCBwcmludCBwYXJlbnMgaW4gcm9tYW4sCisgICAgJSBvdGhlcndpc2UgdXNlIHRoZSBkZWZhdWx0IGZvbnQuCisgICAgXGlmbnVtIFxwYXJlbmNvdW50PTEgXHJtIFxmaQorICBcZWxzZQorICAgICUgVGhlIFxzZiBwYXJlbnMgKGluIFxib2xkYnJheCkgYWN0dWFsbHkgYXJlIGEgbGl0dGxlIGJvbGRlciB0aGFuCisgICAgJSB0aGUgY29udGFpbmVkIHRleHQuICBUaGlzIGlzIGVzcGVjaWFsbHkgbmVlZGVkIGZvciBbIGFuZCBdIC4KKyAgICBcc2YKKyAgXGZpCit9CitcZGVmXGluZmlyc3RsZXZlbCMxeyUKKyAgXGlmYW1wc2VlbgorICAgIFxpZm51bVxwYXJlbmNvdW50PTEKKyAgICAgICMxJQorICAgIFxmaQorICBcZmkKK30KK1xkZWZcYmZhZnRlcndvcmQjMSB7IzEgXGJmfQorCitcZGVmXG9wbnJ7JQorICBcZ2xvYmFsXGFkdmFuY2VccGFyZW5jb3VudCBieSAxCisgIHtccGFyZW5mb250KH0lCisgIFxpbmZpcnN0bGV2ZWwgXGJmYWZ0ZXJ3b3JkCit9CitcZGVmXGNsbnJ7JQorICB7XHBhcmVuZm9udCl9JQorICBcaW5maXJzdGxldmVsIFxzbAorICBcZ2xvYmFsXGFkdmFuY2VccGFyZW5jb3VudCBieSAtMQorfQorCitcbmV3Y291bnRcYnJhY2tjb3VudAorXGRlZlxsYnJieyUKKyAgXGdsb2JhbFxhZHZhbmNlXGJyYWNrY291bnQgYnkgMQorICB7XGJmW30lCit9CitcZGVmXHJicmJ7JQorICB7XGJmXX0lCisgIFxnbG9iYWxcYWR2YW5jZVxicmFja2NvdW50IGJ5IC0xCit9CisKK1xkZWZcY2hlY2twYXJlbmNvdW50c3slCisgIFxpZm51bVxwYXJlbmNvdW50PTAgXGVsc2UgXGJhZHBhcmVuY291bnQgXGZpCisgIFxpZm51bVxicmFja2NvdW50PTAgXGVsc2UgXGJhZGJyYWNrY291bnQgXGZpCit9CitcZGVmXGJhZHBhcmVuY291bnR7JQorICBcZXJybWVzc2FnZXtVbmJhbGFuY2VkIHBhcmVudGhlc2VzIGluIEBkZWZ9JQorICBcZ2xvYmFsXHBhcmVuY291bnQ9MAorfQorXGRlZlxiYWRicmFja2NvdW50eyUKKyAgXGVycm1lc3NhZ2V7VW5iYWxhbmNlZCBzcXVhcmUgYnJhY2VzIGluIEBkZWZ9JQorICBcZ2xvYmFsXGJyYWNrY291bnQ9MAorfQorCisKK1xtZXNzYWdle21hY3Jvcyx9CislIEBtYWNyby4KKworJSBUbyBkbyB0aGlzIHJpZ2h0IHdlIG5lZWQgYSBmZWF0dXJlIG9mIGUtVGVYLCBcc2NhbnRva2VucywKKyUgd2hpY2ggd2UgYXJyYW5nZSB0byBlbXVsYXRlIHdpdGggYSB0ZW1wb3JhcnkgZmlsZSBpbiBvcmRpbmFyeSBUZVguCitcaWZ4XGVUZVh2ZXJzaW9uXHVuZGVmaW5lZAorICBcbmV3d3JpdGVcbWFjc2NyaWJibGUKKyAgXGRlZlxzY2FudG9rZW5zIzF7JQorICAgIFx0b2tzMD17IzF9JQorICAgIFxpbW1lZGlhdGVcb3Blbm91dFxtYWNzY3JpYmJsZT1cam9ibmFtZS50bXAKKyAgICBcaW1tZWRpYXRlXHdyaXRlXG1hY3NjcmliYmxle1x0aGVcdG9rczB9JQorICAgIFxpbW1lZGlhdGVcY2xvc2VvdXRcbWFjc2NyaWJibGUKKyAgICBcaW5wdXQgXGpvYm5hbWUudG1wCisgIH0KK1xmaQorCitcZGVmXHNjYW5tYWNybyMxeyUKKyAgXGJlZ2luZ3JvdXAKKyAgICBcbmV3bGluZWNoYXJgXF5eTQorICAgIFxsZXRceGVhdHNwYWNlc1xlYXRzcGFjZXMKKyAgICAlIFVuZG8gY2F0Y29kZSBjaGFuZ2VzIG9mIFxzdGFydGNvbnRlbnRzIGFuZCBcZG9wcmludGluZGV4CisgICAgJSBXaGVuIGNhbGxlZCBmcm9tIEBpbnNlcnRjb3B5aW5nIG9yIChzaG9ydCljYXB0aW9uLCB3ZSBuZWVkIGFjdGl2ZQorICAgICUgYmFja3NsYXNoIHRvIGdldCBpdCBwcmludGVkIGNvcnJlY3RseS4gIFByZXZpb3VzbHksIHdlIGhhZAorICAgICUgXGNhdGNvZGVgXFw9XG90aGVyIGluc3RlYWQuICBXZSdsbCBzZWUgd2hldGhlciBhIHByb2JsZW0gYXBwZWFycworICAgICUgd2l0aCBtYWNybyBleHBhbnNpb24uCQkJCS0ta2FzYWwsIDE5YXVnMDQKKyAgICBcY2F0Y29kZWBcQD0wIFxjYXRjb2RlYFxcPVxhY3RpdmUgXGVzY2FwZWNoYXI9YFxACisgICAgJSAuLi4gYW5kIFxleGFtcGxlCisgICAgXHNwYWNlaXNzcGFjZQorICAgICUKKyAgICAlIEFwcGVuZCBcZW5kaW5wdXQgdG8gbWFrZSBzdXJlIHRoYXQgVGVYIGRvZXMgbm90IHNlZSB0aGUgZW5kaW5nIG5ld2xpbmUuCisgICAgJQorICAgICUgSSd2ZSB2ZXJpZmllZCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSBib3RoIGZvciBlLVRlWCBhbmQgZm9yIG9yZGluYXJ5IFRlWAorICAgICUJCQkJCQkJLS1rYXNhbCwgMjlub3YwMworICAgIFxzY2FudG9rZW5zeyMxXGVuZGlucHV0fSUKKyAgXGVuZGdyb3VwCit9CisKK1xkZWZcc2NhbmV4cCMxeyUKKyAgXGVkZWZcdGVtcHtcbm9leHBhbmRcc2Nhbm1hY3JveyMxfX0lCisgIFx0ZW1wCit9CisKK1xuZXdjb3VudFxwYXJhbW5vICAgJSBDb3VudCBvZiBwYXJhbWV0ZXJzCitcbmV3dG9rc1xtYWNuYW1lICAgICUgTWFjcm8gbmFtZQorXG5ld2lmXGlmcmVjdXJzaXZlICAlIElzIGl0IHJlY3Vyc2l2ZT8KKworJSBMaXN0IG9mIGFsbCBkZWZpbmVkIG1hY3JvcyBpbiB0aGUgZm9ybQorJSAgICBcZGVmaW5lZHVtbXl3b3JkXG1hY3JvMVxkZWZpbmVkdW1teXdvcmRcbWFjcm8yLi4uCislIEN1cnJlbnRseSBpcyBhbHNvIGNvbnRhaW5zIGFsbCBAYWxpYXNlczsgdGhlIGxpc3QgY2FuIGJlIHNwbGl0CislIGlmIHRoZXJlIGlzIGEgbmVlZC4KK1xkZWZcbWFjcm9saXN0e30KKworJSBBZGQgdGhlIG1hY3JvIHRvIFxtYWNyb2xpc3QKK1xkZWZcYWRkdG9tYWNyb2xpc3QjMXtcZXhwYW5kYWZ0ZXIgXGFkZHRvbWFjcm9saXN0eHh4IFxjc25hbWUjMVxlbmRjc25hbWV9CitcZGVmXGFkZHRvbWFjcm9saXN0eHh4IzF7JQorICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XG1hY3JvbGlzdFxkZWZpbmVkdW1teXdvcmQjMX0lCisgICAgIFx4ZGVmXG1hY3JvbGlzdHtcdGhlXHRva3MwfSUKK30KKworJSBVdGlsaXR5IHJvdXRpbmVzLgorJSBUaGlzIGRvZXMgXGxldCAjMSA9ICMyLCB3aXRoIFxjc25hbWVzOyB0aGF0IGlzLAorJSAgIFxsZXQgXGNzbmFtZSMxXGVuZGNzbmFtZSA9IFxjc25hbWUjMlxlbmRjc25hbWUKKyUgKGV4Y2VwdCBvZiBjb3Vyc2Ugd2UgaGF2ZSB0byBwbGF5IGV4cGFuc2lvbiBnYW1lcykuCislIAorXGRlZlxjc2xldCMxIzJ7JQorICBcZXhwYW5kYWZ0ZXJcbGV0CisgIFxjc25hbWUjMVxleHBhbmRhZnRlclxlbmRjc25hbWUKKyAgXGNzbmFtZSMyXGVuZGNzbmFtZQorfQorCislIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIG9mZiBhIHN0cmluZy4KKyUgQ29uY2VwdHMgZnJvbSBhcm8tYmVuZCBwcm9ibGVtIDE1IChzZWUgQ1RBTikuCit7XGNhdGNvZGVgXEA9MTEKK1xnZGVmXGVhdHNwYWNlcyAjMXtcZXhwYW5kYWZ0ZXJcdHJpbUBcZXhwYW5kYWZ0ZXJ7IzEgfX0KK1xnZGVmXHRyaW1AICMxe1x0cmltQEAgQCMxIEAgIzEgQCBAQH0KK1xnZGVmXHRyaW1AQCAjMUAgIzJAICMzQEB7XHRyaW1AQEBcZW1wdHkgIzIgQH0KK1xkZWZcdW5icmFjZSMxeyMxfQorXHVuYnJhY2V7XGdkZWZcdHJpbUBAQCAjMSB9ICMyQHsjMX0KK30KKworJSBUcmltIGEgc2luZ2xlIHRyYWlsaW5nIF5eTSBvZmYgYSBzdHJpbmcuCit7XGNhdGNvZGVgXF5eTT1cb3RoZXIgXGNhdGNvZGVgXFE9MyUKK1xnZGVmXGVhdGNyICMxe1xlYXRjcmEgIzFRXl5NUX0lCitcZ2RlZlxlYXRjcmEjMV5eTVF7XGVhdGNyYiMxUX0lCitcZ2RlZlxlYXRjcmIjMVEjMlF7IzF9JQorfQorCislIE1hY3JvIGJvZGllcyBhcmUgYWJzb3JiZWQgYXMgYW4gYXJndW1lbnQgaW4gYSBjb250ZXh0IHdoZXJlCislIGFsbCBjaGFyYWN0ZXJzIGFyZSBjYXRjb2RlIDEwLCAxMSBvciAxMiwgZXhjZXB0IFwgd2hpY2ggaXMgYWN0aXZlCislIChhcyBpbiBub3JtYWwgdGV4aW5mbykuIEl0IGlzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgXC4KKworJSBJdCdzIG5lY2Vzc2FyeSB0byBoYXZlIGhhcmQgQ1JzIHdoZW4gdGhlIG1hY3JvIGlzIGV4ZWN1dGVkLiBUaGlzIGlzCislIGRvbmUgYnkgIG1ha2luZyBeXk0gKFxlbmRsaW5lY2hhcikgY2F0Y29kZSAxMiB3aGVuIHJlYWRpbmcgdGhlIG1hY3JvCislIGJvZHksIGFuZCB0aGVuIG1ha2luZyBpdCB0aGUgXG5ld2xpbmVjaGFyIGluIFxzY2FubWFjcm8uCisKK1xkZWZcc2NhbmN0eHR7JQorICBcY2F0Y29kZWBcIj1cb3RoZXIKKyAgXGNhdGNvZGVgXCs9XG90aGVyCisgIFxjYXRjb2RlYFw8PVxvdGhlcgorICBcY2F0Y29kZWBcPj1cb3RoZXIKKyAgXGNhdGNvZGVgXEA9XG90aGVyCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgXGNhdGNvZGVgXHw9XG90aGVyCisgIFxjYXRjb2RlYFx+PVxvdGhlcgorfQorCitcZGVmXHNjYW5hcmdjdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICBcY2F0Y29kZWBcXl5NPVxvdGhlcgorfQorCitcZGVmXG1hY3JvYm9keWN0eHR7JQorICBcc2NhbmN0eHQKKyAgXGNhdGNvZGVgXHs9XG90aGVyCisgIFxjYXRjb2RlYFx9PVxvdGhlcgorICBcY2F0Y29kZWBcXl5NPVxvdGhlcgorICBcdXNlbWJvZHliYWNrc2xhc2gKK30KKworXGRlZlxtYWNyb2FyZ2N0eHR7JQorICBcc2NhbmN0eHQKKyAgXGNhdGNvZGVgXFw9XG90aGVyCit9CisKKyUgXG1ib2R5YmFja3NsYXNoIGlzIHRoZSBkZWZpbml0aW9uIG9mIFwgaW4gQG1hY3JvIGJvZGllcy4KKyUgSXQgbWFwcyBcZm9vXCA9PiBcY3NuYW1lIG1hY2FyZy5mb29cZW5kY3NuYW1lID0+ICNOCislIHdoZXJlIE4gaXMgdGhlIG1hY3JvIHBhcmFtZXRlciBudW1iZXIuCislIFdlIGRlZmluZSBcY3NuYW1lIG1hY2FyZy5cZW5kY3NuYW1lIHRvIGJlIFxyZWFsYmFja3NsYXNoLCBzbworJSBcXCBpbiBtYWNybyByZXBsYWNlbWVudCB0ZXh0IGdldHMgeW91IGEgYmFja3NsYXNoLgorCit7XGNhdGNvZGVgQD0wIEBjYXRjb2RlYEBcPUBhY3RpdmUKKyBAZ2RlZkB1c2VtYm9keWJhY2tzbGFzaHtAbGV0XD1AbWJvZHliYWNrc2xhc2h9CisgQGdkZWZAbWJvZHliYWNrc2xhc2gjMVx7QGNzbmFtZSBtYWNhcmcuIzFAZW5kY3NuYW1lfQorfQorXGV4cGFuZGFmdGVyXGRlZlxjc25hbWUgbWFjYXJnLlxlbmRjc25hbWV7XHJlYWxiYWNrc2xhc2h9CisKK1xkZWZcbWFjcm97XHJlY3Vyc2l2ZWZhbHNlXHBhcnNlYXJnXG1hY3JveHh4fQorXGRlZlxybWFjcm97XHJlY3Vyc2l2ZXRydWVccGFyc2VhcmdcbWFjcm94eHh9CisKK1xkZWZcbWFjcm94eHgjMXslCisgIFxnZXRhcmdzeyMxfSUgICAgICAgICAgIG5vdyBcbWFjbmFtZSBpcyB0aGUgbWFjbmFtZSBhbmQgXGFyZ2wgdGhlIGFyZ2xpc3QKKyAgXGlmeFxhcmdsXGVtcHR5ICAgICAgICUgbm8gYXJndW1lbnRzCisgICAgIFxwYXJhbW5vPTAlCisgIFxlbHNlCisgICAgIFxleHBhbmRhZnRlclxwYXJzZW1hcmdkZWYgXGFyZ2w7JQorICBcZmkKKyAgXGlmMVxjc25hbWUgaXNtYWNyby5cdGhlXG1hY25hbWVcZW5kY3NuYW1lCisgICAgIFxtZXNzYWdle1dhcm5pbmc6IHJlZGVmaW5pbmcgXHRoZVxtYWNuYW1lfSUKKyAgXGVsc2UKKyAgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgXHRoZVxtYWNuYW1lXGVuZGNzbmFtZSBccmVsYXgKKyAgICAgXGVsc2UgXGVycm1lc3NhZ2V7TWFjcm8gbmFtZSBcdGhlXG1hY25hbWVcc3BhY2UgYWxyZWFkeSBkZWZpbmVkfVxmaQorICAgICBcZ2xvYmFsXGNzbGV0e21hY3NhdmUuXHRoZVxtYWNuYW1lfXtcdGhlXG1hY25hbWV9JQorICAgICBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgaXNtYWNyby5cdGhlXG1hY25hbWVcZW5kY3NuYW1lPTElCisgICAgIFxhZGR0b21hY3JvbGlzdHtcdGhlXG1hY25hbWV9JQorICBcZmkKKyAgXGJlZ2luZ3JvdXAgXG1hY3JvYm9keWN0eHQKKyAgXGlmcmVjdXJzaXZlIFxleHBhbmRhZnRlclxwYXJzZXJtYWNib2R5CisgIFxlbHNlIFxleHBhbmRhZnRlclxwYXJzZW1hY2JvZHkKKyAgXGZpfQorCitccGFyc2VhcmdkZWZcdW5tYWNyb3slCisgIFxpZjFcY3NuYW1lIGlzbWFjcm8uIzFcZW5kY3NuYW1lCisgICAgXGdsb2JhbFxjc2xldHsjMX17bWFjc2F2ZS4jMX0lCisgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXQgXGNzbmFtZSBpc21hY3JvLiMxXGVuZGNzbmFtZT0wJQorICAgICUgUmVtb3ZlIHRoZSBtYWNybyBuYW1lIGZyb20gXG1hY3JvbGlzdDoKKyAgICBcYmVnaW5ncm91cAorICAgICAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUjMVxlbmRjc25hbWUgXHJlbGF4CisgICAgICBcbGV0XGRlZmluZWR1bW15d29yZFx1bm1hY3JvZG8KKyAgICAgIFx4ZGVmXG1hY3JvbGlzdHtcbWFjcm9saXN0fSUKKyAgICBcZW5kZ3JvdXAKKyAgXGVsc2UKKyAgICBcZXJybWVzc2FnZXtNYWNybyAjMSBub3QgZGVmaW5lZH0lCisgIFxmaQorfQorCislIENhbGxlZCBieSBcZG8gZnJvbSBcZG91bm1hY3JvIG9uIGVhY2ggbWFjcm8uICBUaGUgaWRlYSBpcyB0byBvbWl0IGFueQorJSBtYWNybyBkZWZpbml0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHRvIFxyZWxheC4KKyUKK1xkZWZcdW5tYWNyb2RvIzF7JQorICBcaWZ4ICMxXHJlbGF4CisgICAgJSByZW1vdmUgdGhpcworICBcZWxzZQorICAgIFxub2V4cGFuZFxkZWZpbmVkdW1teXdvcmQgXG5vZXhwYW5kIzElCisgIFxmaQorfQorCislIFRoaXMgbWFrZXMgdXNlIG9mIHRoZSBvYnNjdXJlIGZlYXR1cmUgdGhhdCBpZiB0aGUgbGFzdCB0b2tlbiBvZiBhCislIDxwYXJhbWV0ZXIgbGlzdD4gaXMgIywgdGhlbiB0aGUgcHJlY2VkaW5nIGFyZ3VtZW50IGlzIGRlbGltaXRlZCBieQorJSBhbiBvcGVuaW5nIGJyYWNlLCBhbmQgdGhhdCBvcGVuaW5nIGJyYWNlIGlzIG5vdCBjb25zdW1lZC4KK1xkZWZcZ2V0YXJncyMxe1xnZXRhcmdzeHh4IzF7fX0KK1xkZWZcZ2V0YXJnc3h4eCMxI3tcZ2V0bWFjbmFtZSAjMSBccmVsYXhcZ2V0bWFjYXJnc30KK1xkZWZcZ2V0bWFjbmFtZSAjMSAjMlxyZWxheHtcbWFjbmFtZT17IzF9fQorXGRlZlxnZXRtYWNhcmdzIzF7XGRlZlxhcmdseyMxfX0KKworJSBQYXJzZSB0aGUgb3B0aW9uYWwge3BhcmFtc30gbGlzdC4gIFNldCB1cCBccGFyYW1ubyBhbmQgXHBhcmFtbGlzdAorJSBzbyBcZGVmbWFjcm8ga25vd3Mgd2hhdCB0byBkby4gIERlZmluZSBcbWFjYXJnLmJsYWggZm9yIGVhY2ggYmxhaAorJSBpbiB0aGUgcGFyYW1zIGxpc3QsIHRvIGJlICMjTiB3aGVyZSBOIGlzIHRoZSBwb3NpdGlvbiBpbiB0aGF0IGxpc3QuCislIFRoYXQgZ2V0cyB1c2VkIGJ5IFxtYm9keWJhY2tzbGFzaCAoYWJvdmUpLgorCislIFdlIG5lZWQgdG8gZ2V0IGBtYWNybyBwYXJhbWV0ZXIgY2hhciAjJyBpbnRvIHNldmVyYWwgZGVmaW5pdGlvbnMuCislIFRoZSB0ZWNobmlxdWUgdXNlZCBpcyBzdG9sZW4gZnJvbSBMYVRlWDogIGxldCBcaGFzaCBiZSBzb21ldGhpbmcKKyUgdW5leHBhbmRhYmxlLCBpbnNlcnQgdGhhdCB3aGVyZXZlciB5b3UgbmVlZCBhICMsIGFuZCB0aGVuIHJlZGVmaW5lCislIGl0IHRvICMganVzdCBiZWZvcmUgdXNpbmcgdGhlIHRva2VuIGxpc3QgcHJvZHVjZWQuCislCislIFRoZSBzYW1lIHRlY2huaXF1ZSBpcyB1c2VkIHRvIHByb3RlY3QgXGVhdHNwYWNlcyB0aWxsIGp1c3QgYmVmb3JlCislIHRoZSBtYWNybyBpcyB1c2VkLgorCitcZGVmXHBhcnNlbWFyZ2RlZiMxO3tccGFyYW1ubz0wXGRlZlxwYXJhbWxpc3R7fSUKKyAgICAgICAgXGxldFxoYXNoXHJlbGF4XGxldFx4ZWF0c3BhY2VzXHJlbGF4XHBhcnNlbWFyZ2RlZnh4eCMxLDssfQorXGRlZlxwYXJzZW1hcmdkZWZ4eHgjMSx7JQorICBcaWYjMTtcbGV0XG5leHQ9XHJlbGF4CisgIFxlbHNlIFxsZXRcbmV4dD1ccGFyc2VtYXJnZGVmeHh4CisgICAgXGFkdmFuY2VccGFyYW1ubyBieSAxJQorICAgIFxleHBhbmRhZnRlclxlZGVmXGNzbmFtZSBtYWNhcmcuXGVhdHNwYWNlc3sjMX1cZW5kY3NuYW1lCisgICAgICAgIHtceGVhdHNwYWNlc3tcaGFzaFx0aGVccGFyYW1ub319JQorICAgIFxlZGVmXHBhcmFtbGlzdHtccGFyYW1saXN0XGhhc2hcdGhlXHBhcmFtbm8sfSUKKyAgXGZpXG5leHR9CisKKyUgVGhlc2UgdHdvIGNvbW1hbmRzIHJlYWQgcmVjdXJzaXZlIGFuZCBub25yZWN1cnNpdmUgbWFjcm8gYm9kaWVzLgorJSAoVGhleSdyZSBkaWZmZXJlbnQgc2luY2UgcmVjIGFuZCBub25yZWMgbWFjcm9zIGVuZCBkaWZmZXJlbnRseS4pCisKK1xsb25nXGRlZlxwYXJzZW1hY2JvZHkjMUBlbmQgbWFjcm8lCit7XHhkZWZcdGVtcHtcZWF0Y3J7IzF9fVxlbmRncm91cFxkZWZtYWNyb30lCitcbG9uZ1xkZWZccGFyc2VybWFjYm9keSMxQGVuZCBybWFjcm8lCit7XHhkZWZcdGVtcHtcZWF0Y3J7IzF9fVxlbmRncm91cFxkZWZtYWNyb30lCisKKyUgVGhpcyBkZWZpbmVzIHRoZSBtYWNybyBpdHNlbGYuIFRoZXJlIGFyZSBzaXggY2FzZXM6IHJlY3Vyc2l2ZSBhbmQKKyUgbm9ucmVjdXJzaXZlIG1hY3JvcyBvZiB6ZXJvLCBvbmUsIGFuZCBtYW55IGFyZ3VtZW50cy4KKyUgTXVjaCBtYWdpYyB3aXRoIFxleHBhbmRhZnRlciBoZXJlLgorJSBceGRlZiBpcyB1c2VkIHNvIHRoYXQgbWFjcm8gZGVmaW5pdGlvbnMgd2lsbCBzdXJ2aXZlIHRoZSBmaWxlCislIHRoZXkncmUgZGVmaW5lZCBpbjsgQGluY2x1ZGUgcmVhZHMgdGhlIGZpbGUgaW5zaWRlIGEgZ3JvdXAuCitcZGVmXGRlZm1hY3JveyUKKyAgXGxldFxoYXNoPSMjJSBjb252ZXJ0IHBsYWNlaG9sZGVycyB0byBtYWNybyBwYXJhbWV0ZXIgY2hhcnMKKyAgXGlmcmVjdXJzaXZlCisgICAgXGlmY2FzZVxwYXJhbW5vCisgICAgJSAwCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxvciAlIDEKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxub2V4cGFuZFxicmFjZW9ybGluZQorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgIFxlZ3JvdXBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCisgICAgXGVsc2UgJSBtYW55CisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUgIyMxLH0lCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgICAgXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lCisgICAgICAgICAgXHBhcmFtbGlzdHtcZWdyb3VwXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxmaQorICBcZWxzZQorICAgIFxpZmNhc2VccGFyYW1ubworICAgICUgMAorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcb3IgJSAxCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcYnJhY2VvcmxpbmUKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgIFxlZ3JvdXAKKyAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfVxlZ3JvdXB9JQorICAgIFxlbHNlICUgbWFueQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lICMjMSx9JQorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZgorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUKKyAgICAgIFxwYXJhbWxpc3R7JQorICAgICAgICAgIFxlZ3JvdXAKKyAgICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcZmkKKyAgXGZpfQorCitcZGVmXG5vcmVjdXJzZSMxe1xiZ3JvdXBcY3NsZXR7IzF9e21hY3NhdmUuIzF9fQorCislIFxicmFjZW9ybGluZSBkZWNpZGVzIHdoZXRoZXIgdGhlIG5leHQgbm9ud2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgYQorJSB7LiAgSWYgc28gaXQgcmVhZHMgdXAgdG8gdGhlIGNsb3NpbmcgfSwgaWYgbm90LCBpdCByZWFkcyB0aGUgd2hvbGUKKyUgbGluZS4gIFdoYXRldmVyIHdhcyByZWFkIGlzIHRoZW4gZmVkIHRvIHRoZSBuZXh0IGNvbnRyb2wgc2VxdWVuY2UKKyUgYXMgYW4gYXJndW1lbnQgKGJ5IFxwYXJzZWJyYWNlIG9yIFxwYXJzZWFyZykKK1xkZWZcYnJhY2VvcmxpbmUjMXtcbGV0XG5leHQ9IzFcZnV0dXJlbGV0XG5jaGFyXGJyYWNlb3JsaW5leHh4fQorXGRlZlxicmFjZW9ybGluZXh4eHslCisgIFxpZnhcbmNoYXJcYmdyb3VwXGVsc2UKKyAgICBcZXhwYW5kYWZ0ZXJccGFyc2VhcmcKKyAgXGZpIFxuZXh0fQorCisKKyUgQGFsaWFzLgorJSBXZSBuZWVkIHNvbWUgdHJpY2tlcnkgdG8gcmVtb3ZlIHRoZSBvcHRpb25hbCBzcGFjZXMgYXJvdW5kIHRoZSBlcXVhbAorJSBzaWduLiAgSnVzdCBtYWtlIHRoZW0gYWN0aXZlIGFuZCB0aGVuIGV4cGFuZCB0aGVtIGFsbCB0byBub3RoaW5nLgorXGRlZlxhbGlhc3tccGFyc2Vhcmd1c2luZ1xvYmV5c3BhY2VzXGFsaWFzeHh4fQorXGRlZlxhbGlhc3h4eCAjMXtcYWxpYXN5eXkjMVxyZWxheH0KK1xkZWZcYWxpYXN5eXkgIzE9IzJccmVsYXh7JQorICB7JQorICAgIFxleHBhbmRhZnRlclxsZXRcb2JleWVkc3BhY2U9XGVtcHR5CisgICAgXGFkZHRvbWFjcm9saXN0eyMxfSUKKyAgICBceGRlZlxuZXh0e1xnbG9iYWxcbGV0XG1ha2Vjc25hbWV7IzF9PVxtYWtlY3NuYW1leyMyfX0lCisgIH0lCisgIFxuZXh0Cit9CisKKworXG1lc3NhZ2V7Y3Jvc3MgcmVmZXJlbmNlcyx9CisKK1xuZXd3cml0ZVxhdXhmaWxlCisKK1xuZXdpZlxpZmhhdmV4cmVmcyAgICAlIFRydWUgaWYgeHJlZiB2YWx1ZXMgYXJlIGtub3duLgorXG5ld2lmXGlmd2FybmVkeHJlZnMgICUgVHJ1ZSBpZiB3ZSB3YXJuZWQgb25jZSB0aGF0IHRoZXkgYXJlbid0IGtub3duLgorCislIEBpbmZvcmVmIGlzIHJlbGF0aXZlbHkgc2ltcGxlLgorXGRlZlxpbmZvcmVmICMxe1xpbmZvcmVmenp6ICMxLCwsLCoqfQorXGRlZlxpbmZvcmVmenp6ICMxLCMyLCMzLCM0Kip7XHB1dHdvcmRTZWV7fSBccHV0d29yZEluZm97fSBccHV0d29yZGZpbGV7fSBcZmlsZXtcaWdub3Jlc3BhY2VzICMze319LAorICBub2RlIFxzYW1we1xpZ25vcmVzcGFjZXMjMXt9fX0KKworJSBAbm9kZSdzIG9ubHkgam9iIGluIFRlWCBpcyB0byBkZWZpbmUgXGxhc3Rub2RlLCB3aGljaCBpcyB1c2VkIGluCislIGNyb3NzLXJlZmVyZW5jZXMuICBUaGUgQG5vZGUgbGluZSBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBjb21tYXMsIGFuZAorJSBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBzcGFjZXMgYmVmb3JlIHRoZSBmaXJzdCBjb21tYSwgbGlrZToKKyUgQG5vZGUgZm9vICwgYmFyICwgLi4uCislIFdlIGRvbid0IHdhbnQgc3VjaCB0cmFpbGluZyBzcGFjZXMgaW4gdGhlIG5vZGUgbmFtZS4KKyUKK1xwYXJzZWFyZ2RlZlxub2Rle1xjaGVja2Vudnt9XGRvbm9kZSAjMSAsXGZpbmlzaG5vZGVwYXJzZX0KKyUKKyUgYWxzbyByZW1vdmUgYSB0cmFpbGluZyBjb21tYSwgaW4gY2FzZSBvZiBzb21ldGhpbmcgbGlrZSB0aGlzOgorJSBAbm9kZSBIZWxwLUNyb3NzLCAgLCAgLCBDcm9zcy1yZWZzCitcZGVmXGRvbm9kZSMxICwjMlxmaW5pc2hub2RlcGFyc2V7XGRvZG9ub2RlICMxLFxmaW5pc2hub2RlcGFyc2V9CitcZGVmXGRvZG9ub2RlIzEsIzJcZmluaXNobm9kZXBhcnNle1xnZGVmXGxhc3Rub2RleyMxfX0KKworXGxldFxud25vZGU9XG5vZGUKK1xsZXRcbGFzdG5vZGU9XGVtcHR5CisKKyUgV3JpdGUgYSBjcm9zcy1yZWZlcmVuY2UgZGVmaW5pdGlvbiBmb3IgdGhlIGN1cnJlbnQgbm9kZS4gICMxIGlzIHRoZQorJSB0eXBlIChZbnVtYmVyZWQsIFlhcHBlbmRpeCwgWW5vdGhpbmcpLgorJQorXGRlZlxkb25vZGVyZWYjMXslCisgIFxpZnhcbGFzdG5vZGVcZW1wdHlcZWxzZQorICAgIFxzZXRyZWZ7XGxhc3Rub2RlfXsjMX0lCisgICAgXGdsb2JhbFxsZXRcbGFzdG5vZGU9XGVtcHR5CisgIFxmaQorfQorCislIEBhbmNob3J7TkFNRX0gLS0gZGVmaW5lIHhyZWYgdGFyZ2V0IGF0IGFyYml0cmFyeSBwb2ludC4KKyUKK1xuZXdjb3VudFxzYXZlc2ZyZWdpc3RlcgorJQorXGRlZlxzYXZlc2Z7XHJlbGF4IFxpZmhtb2RlIFxzYXZlc2ZyZWdpc3Rlcj1cc3BhY2VmYWN0b3IgXGZpfQorXGRlZlxyZXN0b3Jlc2Z7XHJlbGF4IFxpZmhtb2RlIFxzcGFjZWZhY3Rvcj1cc2F2ZXNmcmVnaXN0ZXIgXGZpfQorXGRlZlxhbmNob3IjMXtcc2F2ZXNmIFxzZXRyZWZ7IzF9e1lub3RoaW5nfVxyZXN0b3Jlc2YgXGlnbm9yZXNwYWNlc30KKworJSBcc2V0cmVme05BTUV9e1NOVH0gZGVmaW5lcyBhIGNyb3NzLXJlZmVyZW5jZSBwb2ludCBOQU1FIChhIG5vZGUgb3IgYW4KKyUgYW5jaG9yKSwgd2hpY2ggY29uc2lzdHMgb2YgdGhyZWUgcGFydHM6CislIDEpIE5BTUUtdGl0bGUgLSB0aGUgY3VycmVudCBzZWN0aW9uaW5nIG5hbWUgdGFrZW4gZnJvbSBcdGhpc3NlY3Rpb24sCislICAgICAgICAgICAgICAgICBvciB0aGUgYW5jaG9yIG5hbWUuCislIDIpIE5BTUUtc250ICAgLSBzZWN0aW9uIG51bWJlciBhbmQgdHlwZSwgcGFzc2VkIGFzIHRoZSBTTlQgYXJnLCBvcgorJSAgICAgICAgICAgICAgICAgZW1wdHkgZm9yIGFuY2hvcnMuCislIDMpIE5BTUUtcGcgICAgLSB0aGUgcGFnZSBudW1iZXIuCislCislIFRoaXMgaXMgY2FsbGVkIGZyb20gXGRvbm9kZXJlZiwgXGFuY2hvciwgYW5kIFxkb2Zsb2F0LiAgSW4gdGhlIGNhc2Ugb2YKKyUgZmxvYXRzLCB0aGVyZSBpcyBhbiBhZGRpdGlvbmFsIHBhcnQsIHdoaWNoIGlzIG5vdCB3cml0dGVuIGhlcmU6CislIDQpIE5BTUUtbG9mICAgLSB0aGUgdGV4dCBhcyBpdCBzaG91bGQgYXBwZWFyIGluIGEgQGxpc3RvZmZsb2F0cy4KKyUKK1xkZWZcc2V0cmVmIzEjMnslCisgIFxwZGZta2Rlc3R7IzF9JQorICBcaWZsaW5rcworICAgIHslCisgICAgICBcYXRkdW1taWVzICAlIHByZXNlcnZlIGNvbW1hbmRzLCBidXQgZG9uJ3QgZXhwYW5kIHRoZW0KKyAgICAgIFxlZGVmXHdyaXRleHJkZWYjIzEjIzJ7JQorCVx3cml0ZVxhdXhmaWxle0B4cmRlZnsjMS0lICMxIG9mIFxzZXRyZWYsIGV4cGFuZGVkIGJ5IHRoZSBcZWRlZgorCSAgIyMxfXsjIzJ9fSUgdGhlc2UgYXJlIHBhcmFtZXRlcnMgb2YgXHdyaXRleHJkZWYKKyAgICAgIH0lCisgICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XHRoaXNzZWN0aW9ufSUKKyAgICAgIFxpbW1lZGlhdGUgXHdyaXRleHJkZWZ7dGl0bGV9e1x0aGVcdG9rczAgfSUKKyAgICAgIFxpbW1lZGlhdGUgXHdyaXRleHJkZWZ7c250fXtcY3NuYW1lICMyXGVuZGNzbmFtZX0lIFxZbnVtYmVyZWQgZXRjLgorICAgICAgXHdyaXRleHJkZWZ7cGd9e1xmb2xpb30lIHdpbGwgYmUgd3JpdHRlbiBsYXRlciwgZHVyaW5nIFxzaGlwb3V0CisgICAgfSUKKyAgXGZpCit9CisKKyUgQHhyZWYsIEBweHJlZiwgYW5kIEByZWYgZ2VuZXJhdGUgY3Jvc3MtcmVmZXJlbmNlcy4gIEZvciBceHJlZlgsICMxIGlzCislIHRoZSBub2RlIG5hbWUsICMyIHRoZSBuYW1lIG9mIHRoZSBJbmZvIGNyb3NzLXJlZmVyZW5jZSwgIzMgdGhlIHByaW50ZWQKKyUgbm9kZSBuYW1lLCAjNCB0aGUgbmFtZSBvZiB0aGUgSW5mbyBmaWxlLCAjNSB0aGUgbmFtZSBvZiB0aGUgcHJpbnRlZAorJSBtYW51YWwuICBBbGwgYnV0IHRoZSBub2RlIG5hbWUgY2FuIGJlIG9taXR0ZWQuCislCitcZGVmXHB4cmVmIzF7XHB1dHdvcmRzZWV7fSBceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZceHJlZiMxe1xwdXR3b3JkU2Vle30gXHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHJlZiMxe1x4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlx4cmVmWFsjMSwjMiwjMywjNCwjNSwjNl17XGJlZ2luZ3JvdXAKKyAgXHVuc2Vwc3BhY2VzCisgIFxkZWZccHJpbnRlZG1hbnVhbHtcaWdub3Jlc3BhY2VzICM1fSUKKyAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMzfSUKKyAgXHNldGJveDE9XGhib3h7XHByaW50ZWRtYW51YWxcdW5za2lwfSUKKyAgXHNldGJveDA9XGhib3h7XHByaW50ZWRyZWZuYW1lXHVuc2tpcH0lCisgIFxpZmRpbSBcd2QwID0gMHB0CisgICAgJSBObyBwcmludGVkIG5vZGUgbmFtZSB3YXMgZXhwbGljaXRseSBnaXZlbi4KKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVR4cmVmLWF1dG9tYXRpYy1zZWN0aW9uLXRpdGxlXGVuZGNzbmFtZVxyZWxheAorICAgICAgJSBVc2UgdGhlIG5vZGUgbmFtZSBpbnNpZGUgdGhlIHNxdWFyZSBicmFja2V0cy4KKyAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgXGVsc2UKKyAgICAgICUgVXNlIHRoZSBhY3R1YWwgY2hhcHRlci9zZWN0aW9uIHRpdGxlIGFwcGVhciBpbnNpZGUKKyAgICAgICUgdGhlIHNxdWFyZSBicmFja2V0cy4gIFVzZSB0aGUgcmVhbCBzZWN0aW9uIHRpdGxlIGlmIHdlIGhhdmUgaXQuCisgICAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgICAlIEl0IGlzIGluIGFub3RoZXIgbWFudWFsLCBzbyB3ZSBkb24ndCBoYXZlIGl0LgorICAgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgICAgXGVsc2UKKyAgICAgICAgXGlmaGF2ZXhyZWZzCisgICAgICAgICAgJSBXZSBrbm93IHRoZSByZWFsIHRpdGxlIGlmIHdlIGhhdmUgdGhlIHhyZWYgdmFsdWVzLgorICAgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XHJlZnh7IzEtdGl0bGV9e319JQorICAgICAgICBcZWxzZQorICAgICAgICAgICUgT3RoZXJ3aXNlIGp1c3QgY29weSB0aGUgSW5mbyBub2RlIG5hbWUuCisgICAgICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKKyAgICAgICAgXGZpJQorICAgICAgXGZpCisgICAgXGZpCisgIFxmaQorICAlCisgICUgTWFrZSBsaW5rIGluIHBkZiBvdXRwdXQuCisgIFxpZnBkZgorICAgIFxsZWF2ZXZtb2RlCisgICAgXGdldGZpbGVuYW1leyM0fSUKKyAgICB7XHR1cm5vZmZhY3RpdmUKKyAgICAgJSBTZWUgY29tbWVudHMgYXQgXGFjdGl2ZWJhY2tzbGFzaGRvdWJsZS4KKyAgICAge1xhY3RpdmViYWNrc2xhc2hkb3VibGUgXHhkZWZccGRmeHJlZmRlc3R7IzF9JQorICAgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZ4cmVmZGVzdH0lCisgICAgICUKKyAgICAgXGlmbnVtXGZpbGVuYW1lbGVuZ3RoPjAKKyAgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgIGdvdG8gZmlsZXtcdGhlXGZpbGVuYW1lLnBkZn0gbmFtZXtccGRmeHJlZmRlc3R9JQorICAgICBcZWxzZQorICAgICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19JQorICAgICAgICAgZ290byBuYW1le1xwZGZta3BnbntccGRmeHJlZmRlc3R9fSUKKyAgICAgXGZpCisgICAgfSUKKyAgICBcbGlua2NvbG9yCisgIFxmaQorICAlCisgICUgRmxvYXQgcmVmZXJlbmNlcyBhcmUgcHJpbnRlZCBjb21wbGV0ZWx5IGRpZmZlcmVudGx5OiAiRmlndXJlIDEuMiIKKyAgJSBpbnN0ZWFkIG9mICJbc29tZW5vZGVdLCBwLjMiLiAgV2UgZGlzdGluZ3Vpc2ggdGhlbSBieSB0aGUKKyAgJSBMQUJFTC10aXRsZSBiZWluZyBzZXQgdG8gYSBtYWdpYyBzdHJpbmcuCisgIHslCisgICAgJSBIYXZlIHRvIG90aGVyaWZ5IGV2ZXJ5dGhpbmcgc3BlY2lhbCB0byBhbGxvdyB0aGUgXGNzbmFtZSB0bworICAgICUgaW5jbHVkZSBhbiBfIGluIHRoZSB4cmVmIG5hbWUsIGV0Yy4KKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBcZXhwYW5kYWZ0ZXJcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclxYdGhpc3JlZnRpdGxlCisgICAgICBcY3NuYW1lIFhSIzEtdGl0bGVcZW5kY3NuYW1lCisgIH0lCisgIFxpZmZsb2F0XFh0aGlzcmVmdGl0bGUKKyAgICAlIElmIHRoZSB1c2VyIHNwZWNpZmllZCB0aGUgcHJpbnQgbmFtZSAodGhpcmQgYXJnKSB0byB0aGUgcmVmLAorICAgICUgcHJpbnQgaXQgaW5zdGVhZCBvZiBvdXIgdXN1YWwgIkZpZ3VyZSAxLjIiLgorICAgIFxpZmRpbVx3ZDAgPSAwcHQKKyAgICAgIFxyZWZ4eyMxLXNudH0lCisgICAgXGVsc2UKKyAgICAgIFxwcmludGVkcmVmbmFtZQorICAgIFxmaQorICAgICUKKyAgICAlIGlmIHRoZSB1c2VyIGFsc28gZ2F2ZSB0aGUgcHJpbnRlZCBtYW51YWwgbmFtZSAoZmlmdGggYXJnKSwgYXBwZW5kCisgICAgJSAiaW4gTUFOVUFMTkFNRSIuCisgICAgXGlmZGltIFx3ZDEgPiAwcHQKKyAgICAgIFxzcGFjZSBccHV0d29yZGlue30gXGNpdGV7XHByaW50ZWRtYW51YWx9JQorICAgIFxmaQorICBcZWxzZQorICAgICUgbm9kZS9hbmNob3IgKG5vbi1mbG9hdCkgcmVmZXJlbmNlcy4KKyAgICAlCisgICAgJSBJZiB3ZSB1c2UgXHVuaGJveDAgYW5kIFx1bmhib3gxIHRvIHByaW50IHRoZSBub2RlIG5hbWVzLCBUZVggZG9lcyBub3QKKyAgICAlIGluc2VydCBlbXB0eSBkaXNjcmV0aW9uYXJpZXMgYWZ0ZXIgaHlwaGVucywgd2hpY2ggbWVhbnMgdGhhdCBpdCB3aWxsCisgICAgJSBub3QgZmluZCBhIGxpbmUgYnJlYWsgYXQgYSBoeXBoZW4gaW4gYSBub2RlIG5hbWVzLiAgU2luY2Ugc29tZSBtYW51YWxzCisgICAgJSBhcmUgYmVzdCB3cml0dGVuIHdpdGggZmFpcmx5IGxvbmcgbm9kZSBuYW1lcywgY29udGFpbmluZyBoeXBoZW5zLCB0aGlzCisgICAgJSBpcyBhIGxvc3MuICBUaGVyZWZvcmUsIHdlIGdpdmUgdGhlIHRleHQgb2YgdGhlIG5vZGUgbmFtZSBhZ2Fpbiwgc28gaXQKKyAgICAlIGlzIGFzIGlmIFRlWCBpcyBzZWVpbmcgaXQgZm9yIHRoZSBmaXJzdCB0aW1lLgorICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICBccHV0d29yZHNlY3Rpb257fSBgYFxwcmludGVkcmVmbmFtZScnIFxwdXR3b3JkaW57fSBcY2l0ZXtccHJpbnRlZG1hbnVhbH0lCisgICAgXGVsc2UKKyAgICAgICUgXyAoZm9yIGV4YW1wbGUpIGhhcyB0byBiZSB0aGUgY2hhcmFjdGVyIF8gZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUKKyAgICAgICUgY29udHJvbCBzZXF1ZW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBub2RlLCBidXQgaXQgaGFzIHRvIGV4cGFuZAorICAgICAgJSBpbnRvIHRoZSB1c3VhbCBcbGVhdmV2bW9kZS4uLlx2cnVsZSBzdHVmZiBmb3IgcHVycG9zZXMgb2YKKyAgICAgICUgcHJpbnRpbmcuIFNvIHdlIFx0dXJub2ZmYWN0aXZlIGZvciB0aGUgXHJlZngtc250LCBiYWNrIG9uIGZvciB0aGUKKyAgICAgICUgcHJpbnRpbmcsIGJhY2sgb2ZmIGZvciB0aGUgXHJlZngtcGcuCisgICAgICB7XHR1cm5vZmZhY3RpdmUKKyAgICAgICAlIE9ubHkgb3V0cHV0IGEgZm9sbG93aW5nIHNwYWNlIGlmIHRoZSAtc250IHJlZiBpcyBub25lbXB0eTsgZm9yCisgICAgICAgJSBAdW5udW1iZXJlZCBhbmQgQGFuY2hvciwgaXQgd29uJ3QgYmUuCisgICAgICAgXHNldGJveDIgPSBcaGJveHtcaWdub3Jlc3BhY2VzIFxyZWZ4eyMxLXNudH17fX0lCisgICAgICAgXGlmZGltIFx3ZDIgPiAwcHQgXHJlZnh7IzEtc250fVxzcGFjZVxmaQorICAgICAgfSUKKyAgICAgICUgb3V0cHV0IHRoZSBgW215bm9kZV0nIHZpYSBhIG1hY3JvIHNvIGl0IGNhbiBiZSBvdmVycmlkZGVuLgorICAgICAgXHhyZWZwcmludG5vZGVuYW1lXHByaW50ZWRyZWZuYW1lCisgICAgICAlCisgICAgICAlIEJ1dCB3ZSBhbHdheXMgd2FudCBhIGNvbW1hIGFuZCBhIHNwYWNlOgorICAgICAgLFxzcGFjZQorICAgICAgJQorICAgICAgJSBvdXRwdXQgdGhlIGBwYWdlIDMnLgorICAgICAgXHR1cm5vZmZhY3RpdmUgXHB1dHdvcmRwYWdlXHRpZVxyZWZ4eyMxLXBnfXt9JQorICAgIFxmaQorICBcZmkKKyAgXGVuZGxpbmsKK1xlbmRncm91cH0KKworJSBUaGlzIG1hY3JvIGlzIGNhbGxlZCBmcm9tIFx4cmVmWCBmb3IgdGhlIGBbbm9kZW5hbWVdJyBwYXJ0IG9mIHhyZWYKKyUgb3V0cHV0LiAgSXQncyBhIHNlcGFyYXRlIG1hY3JvIG9ubHkgc28gaXQgY2FuIGJlIGNoYW5nZWQgbW9yZSBlYXNpbHksCislIHNpbmNlIHNxdWFyZSBicmFja2V0cyBkb24ndCB3b3JrIHdlbGwgaW4gc29tZSBkb2N1bWVudHMuICBQYXJ0aWN1bGFybHkKKyUgb25lIHRoYXQgQm9iIGlzIHdvcmtpbmcgb24gOikuCislCitcZGVmXHhyZWZwcmludG5vZGVuYW1lIzF7WyMxXX0KKworJSBUaGluZ3MgcmVmZXJyZWQgdG8gYnkgXHNldHJlZi4KKyUKK1xkZWZcWW5vdGhpbmd7fQorXGRlZlxZb21pdGZyb210b2N7fQorXGRlZlxZbnVtYmVyZWR7JQorICBcaWZudW1cc2Vjbm89MAorICAgIFxwdXR3b3JkQ2hhcHRlckB0aWUgXHRoZVxjaGFwbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNubworICBcZWxzZQorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgXHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm8KKyAgXGZpXGZpXGZpCit9CitcZGVmXFlhcHBlbmRpeHslCisgIFxpZm51bVxzZWNubz0wCisgICAgIFxwdXR3b3JkQXBwZW5kaXhAdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5ve30lCisgIFxlbHNlIFxpZm51bVxzdWJzZWNubz0wCisgICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgQGNoYXJcdGhlXGFwcGVuZGl4bm8uXHRoZVxzZWNubworICBcZWxzZSBcaWZudW1cc3Vic3Vic2Vjbm89MAorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgQGNoYXJcdGhlXGFwcGVuZGl4bm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vCisgIFxlbHNlCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZQorICAgICAgQGNoYXJcdGhlXGFwcGVuZGl4bm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm8KKyAgXGZpXGZpXGZpCit9CisKKyUgRGVmaW5lIFxyZWZ4e05BTUV9e1NVRkZJWH0gdG8gcmVmZXJlbmNlIGEgY3Jvc3MtcmVmZXJlbmNlIHN0cmluZyBuYW1lZCBOQU1FLgorJSBJZiBpdHMgdmFsdWUgaXMgbm9uZW1wdHksIFNVRkZJWCBpcyBvdXRwdXQgYWZ0ZXJ3YXJkLgorJQorXGRlZlxyZWZ4IzEjMnslCisgIHslCisgICAgXGluZGV4bm9mb250cworICAgIFxvdGhlcmJhY2tzbGFzaAorICAgIFxleHBhbmRhZnRlclxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRoaXNyZWZYCisgICAgICBcY3NuYW1lIFhSIzFcZW5kY3NuYW1lCisgIH0lCisgIFxpZnhcdGhpc3JlZlhccmVsYXgKKyAgICAlIElmIG5vdCBkZWZpbmVkLCBzYXkgc29tZXRoaW5nIGF0IGxlYXN0LgorICAgIFxhbmdsZWxlZnQgdW5cLWRlXC1maW5lZFxhbmdsZXJpZ2h0CisgICAgXGlmbGlua3MKKyAgICAgIFxpZmhhdmV4cmVmcworICAgICAgICBcbWVzc2FnZXtcbGluZW51bWJlciBVbmRlZmluZWQgY3Jvc3MgcmVmZXJlbmNlIGAjMScufSUKKyAgICAgIFxlbHNlCisgICAgICAgIFxpZndhcm5lZHhyZWZzXGVsc2UKKyAgICAgICAgICBcZ2xvYmFsXHdhcm5lZHhyZWZzdHJ1ZQorICAgICAgICAgIFxtZXNzYWdle0Nyb3NzIHJlZmVyZW5jZSB2YWx1ZXMgdW5rbm93bjsgeW91IG11c3QgcnVuIFRlWCBhZ2Fpbi59JQorICAgICAgICBcZmkKKyAgICAgIFxmaQorICAgIFxmaQorICBcZWxzZQorICAgICUgSXQncyBkZWZpbmVkLCBzbyBqdXN0IHVzZSBpdC4KKyAgICBcdGhpc3JlZlgKKyAgXGZpCisgICMyJSBPdXRwdXQgdGhlIHN1ZmZpeCBpbiBhbnkgY2FzZS4KK30KKworJSBUaGlzIGlzIHRoZSBtYWNybyBpbnZva2VkIGJ5IGVudHJpZXMgaW4gdGhlIGF1eCBmaWxlLiAgVXN1YWxseSBpdCdzCislIGp1c3QgYSBcZGVmICh3ZSBwcmVwZW5kIFhSIHRvIHRoZSBjb250cm9sIHNlcXVlbmNlIG5hbWUgdG8gYXZvaWQKKyUgY29sbGlzaW9ucykuICBCdXQgaWYgdGhpcyBpcyBhIGZsb2F0IHR5cGUsIHdlIGhhdmUgbW9yZSB3b3JrIHRvIGRvLgorJQorXGRlZlx4cmRlZiMxIzJ7JQorICBcZXhwYW5kYWZ0ZXJcZ2RlZlxjc25hbWUgWFIjMVxlbmRjc25hbWV7IzJ9JSByZW1lbWJlciB0aGlzIHhyZWYgdmFsdWUuCisgICUKKyAgJSBXYXMgdGhhdCB4cmVmIGNvbnRyb2wgc2VxdWVuY2UgdGhhdCB3ZSBqdXN0IGRlZmluZWQgZm9yIGEgZmxvYXQ/CisgIFxleHBhbmRhZnRlclxpZmZsb2F0XGNzbmFtZSBYUiMxXGVuZGNzbmFtZQorICAgICUgaXQgd2FzIGEgZmxvYXQsIGFuZCB3ZSBoYXZlIHRoZSAoc2FmZSkgZmxvYXQgdHlwZSBpbiBcaWZmbG9hdHR5cGUuCisgICAgXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclxmbG9hdGxpc3QKKyAgICAgIFxjc25hbWUgZmxvYXRsaXN0XGlmZmxvYXR0eXBlXGVuZGNzbmFtZQorICAgICUKKyAgICAlIElzIHRoaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiB0aGlzIGZsb2F0IHR5cGU/CisgICAgXGV4cGFuZGFmdGVyXGlmeFxmbG9hdGxpc3RccmVsYXgKKyAgICAgIFx0b2tzMCA9IHtcZG99JSB5ZXMsIHNvIGp1c3QgXGRvCisgICAgXGVsc2UKKyAgICAgICUgaGFkIGl0IGJlZm9yZSwgc28gcHJlc2VydmUgcHJldmlvdXMgZWxlbWVudHMgaW4gbGlzdC4KKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcZmxvYXRsaXN0XGRvfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBSZW1lbWJlciB0aGlzIHhyZWYgaW4gdGhlIGNvbnRyb2wgc2VxdWVuY2UgXGZsb2F0bGlzdEZMT0FUVFlQRSwKKyAgICAlIGZvciBsYXRlciB1c2UgaW4gXGxpc3RvZmZsb2F0cy4KKyAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgZmxvYXRsaXN0XGlmZmxvYXR0eXBlXGVuZGNzbmFtZXtcdGhlXHRva3MweyMxfX0lCisgIFxmaQorfQorCislIFJlYWQgdGhlIGxhc3QgZXhpc3RpbmcgYXV4IGZpbGUsIGlmIGFueS4gIE5vIGVycm9yIGlmIG5vbmUgZXhpc3RzLgorJQorXGRlZlx0cnlhdXhmaWxleyUKKyAgXG9wZW5pbiAxIFxqb2JuYW1lLmF1eAorICBcaWZlb2YgMSBcZWxzZQorICAgIFxyZWFkZGF0YWZpbGV7YXV4fSUKKyAgICBcZ2xvYmFsXGhhdmV4cmVmc3RydWUKKyAgXGZpCisgIFxjbG9zZWluIDEKK30KKworXGRlZlxzZXR1cGRhdGFmaWxleyUKKyAgXGNhdGNvZGVgXF5eQD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXz1cb3RoZXIKKyAgJSBJdCB3YXMgc3VnZ2VzdGVkIHRvIHNldCB0aGUgY2F0Y29kZSBvZiBeIHRvIDcsIHdoaWNoIHdvdWxkIGFsbG93IF5eZTQgZXRjLgorICAlIGluIHhyZWYgdGFncywgaS5lLiwgbm9kZSBuYW1lcy4gIEJ1dCBzaW5jZSBeXmU0IG5vdGF0aW9uIGlzbid0CisgICUgc3VwcG9ydGVkIGluIHRoZSBtYWluIHRleHQsIGl0IGRvZXNuJ3Qgc2VlbSBkZXNpcmFibGUuICBGdXJ0aGVybW9yZSwKKyAgJSB0aGF0IGlzIG5vdCBlbm91Z2g6IGZvciBub2RlIG5hbWVzIHRoYXQgYWN0dWFsbHkgY29udGFpbiBhIF4KKyAgJSBjaGFyYWN0ZXIsIHdlIHdvdWxkIGVuZCB1cCB3cml0aW5nIGEgbGluZSBsaWtlIHRoaXM6ICd4cmRlZiB7J2hhdAorICAlIGItdGl0bGV9eydoYXQgYn0gYW5kIFx4cmRlZiBkb2VzIGEgXGNzbmFtZS4uLlxlbmRjc25hbWUgb24gdGhlIGZpcnN0CisgICUgYXJndW1lbnQsIGFuZCBcaGF0IGlzIG5vdCBhbiBleHBhbmRhYmxlIGNvbnRyb2wgc2VxdWVuY2UuICBJdCBjb3VsZAorICAlIGFsbCBiZSB3b3JrZWQgb3V0LCBidXQgd2h5PyAgRWl0aGVyIHdlIHN1cHBvcnQgXl4gb3Igd2UgZG9uJ3QuCisgICUKKyAgJSBUaGUgb3RoZXIgY2hhbmdlIG5lY2Vzc2FyeSBmb3IgdGhpcyB3YXMgdG8gZGVmaW5lIFxhdXhoYXQ6CisgICUgXGRlZlxhdXhoYXR7XGRlZl57J2hhdCB9fSUgZXh0cmEgc3BhY2Ugc28gb2sgaWYgZm9sbG93ZWQgYnkgbGV0dGVyCisgICUgYW5kIHRoZW4gdG8gY2FsbCBcYXV4aGF0IGluIFxzZXRxLgorICAlCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICAlCisgICUgU3BlY2lhbCBjaGFyYWN0ZXJzLiAgU2hvdWxkIGJlIHR1cm5lZCBvZmYgYW55d2F5LCBidXQuLi4KKyAgXGNhdGNvZGVgXH49XG90aGVyCisgIFxjYXRjb2RlYFxbPVxvdGhlcgorICBcY2F0Y29kZWBcXT1cb3RoZXIKKyAgXGNhdGNvZGVgXCI9XG90aGVyCisgIFxjYXRjb2RlYFxfPVxvdGhlcgorICBcY2F0Y29kZWBcfD1cb3RoZXIKKyAgXGNhdGNvZGVgXDw9XG90aGVyCisgIFxjYXRjb2RlYFw+PVxvdGhlcgorICBcY2F0Y29kZWBcJD1cb3RoZXIKKyAgXGNhdGNvZGVgXCM9XG90aGVyCisgIFxjYXRjb2RlYFwmPVxvdGhlcgorICBcY2F0Y29kZWBcJT1cb3RoZXIKKyAgXGNhdGNvZGVgKz1cb3RoZXIgJSBhdm9pZCBcKyBmb3IgcGFyYW5vaWEgZXZlbiB0aG91Z2ggd2UndmUgdHVybmVkIGl0IG9mZgorICAlCisgICUgVGhpcyBpcyB0byBzdXBwb3J0IFwgaW4gbm9kZSBuYW1lcyBhbmQgdGl0bGVzLCBzaW5jZSB0aGUgXAorICAlIGNoYXJhY3RlcnMgZW5kIHVwIGluIGEgXGNzbmFtZS4gIEl0J3MgZWFzaWVyIHRoYW4KKyAgJSBsZWF2aW5nIGl0IGFjdGl2ZSBhbmQgbWFraW5nIGl0cyBhY3RpdmUgZGVmaW5pdGlvbiBhbiBhY3R1YWwgXAorICAlIGNoYXJhY3Rlci4gIFdoYXQgSSBkb24ndCB1bmRlcnN0YW5kIGlzIHdoeSBpdCB3b3JrcyBpbiB0aGUgKnZhbHVlKgorICAlIG9mIHRoZSB4cmRlZi4gIFNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGEgY2F0Y29kZTEyIFwsIGFuZCB0aGF0CisgICUgc2hvdWxkIG5vdCB0eXBlc2V0IHByb3Blcmx5LiAgQnV0IGl0IHdvcmtzLCBzbyBJJ20gbW92aW5nIG9uIGZvcgorICAlIG5vdy4gIC0ta2FybCwgMTVqYW4wNC4KKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgICUKKyAgJSBNYWtlIHRoZSBjaGFyYWN0ZXJzIDEyOC0yNTUgYmUgcHJpbnRpbmcgY2hhcmFjdGVycy4KKyAgeyUKKyAgICBcY291bnQxPTEyOAorICAgIFxkZWZcbG9vcHslCisgICAgICBcY2F0Y29kZVxjb3VudDE9XG90aGVyCisgICAgICBcYWR2YW5jZVxjb3VudDEgYnkgMQorICAgICAgXGlmbnVtIFxjb3VudDE8MjU2IFxsb29wIFxmaQorICAgIH0lCisgIH0lCisgICUKKyAgJSBAIGlzIG91ciBlc2NhcGUgY2hhcmFjdGVyIGluIC5hdXggZmlsZXMsIGFuZCB3ZSBuZWVkIGJyYWNlcy4KKyAgXGNhdGNvZGVgXHs9MQorICBcY2F0Y29kZWBcfT0yCisgIFxjYXRjb2RlYFxAPTAKK30KKworXGRlZlxyZWFkZGF0YWZpbGUjMXslCitcYmVnaW5ncm91cAorICBcc2V0dXBkYXRhZmlsZQorICBcaW5wdXRcam9ibmFtZS4jMQorXGVuZGdyb3VwfQorCitcbWVzc2FnZXtpbnNlcnRpb25zLH0KKyUgaW5jbHVkaW5nIGZvb3Rub3Rlcy4KKworXG5ld2NvdW50IFxmb290bm90ZW5vCisKKyUgVGhlIHRyYWlsaW5nIHNwYWNlIGluIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBmb3Igc3VwZXJlamVjdCBpcworJSB2aXRhbCBmb3IgcHJvcGVyIGZpbGxpbmc7IHBhZ2VzIGNvbWUgb3V0IHVuYWxpZ25lZCB3aGVuIHlvdSBkbyBhCislIHBhZ2VhbGlnbm1hY3JvIGNhbGwgaWYgdGhhdCBzcGFjZSBiZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2UgaXMKKyUgcmVtb3ZlZC4gKEdlbmVyYWxseSwgbnVtZXJpYyBjb25zdGFudHMgc2hvdWxkIGFsd2F5cyBiZSBmb2xsb3dlZCBieSBhCislIHNwYWNlIHRvIHByZXZlbnQgc3RyYW5nZSBleHBhbnNpb24gZXJyb3JzLikKK1xkZWZcc3VwZXJlamVjdHtccGFyXHBlbmFsdHkgLTIwMDAwXGZvb3Rub3Rlbm8gPTAgfQorCislIEBmb290bm90ZXN0eWxlIGlzIG1lYW5pbmdmdWwgZm9yIGluZm8gb3V0cHV0IG9ubHkuCitcbGV0XGZvb3Rub3Rlc3R5bGU9XGNvbW1lbnQKKwore1xjYXRjb2RlIGBcQD0xMQorJQorJSBBdXRvLW51bWJlciBmb290bm90ZXMuICBPdGhlcndpc2UgbGlrZSBwbGFpbi4KK1xnZGVmXGZvb3Rub3RleyUKKyAgXGxldFxpbmRlbnQ9XHB0ZXhpbmRlbnQKKyAgXGxldFxub2luZGVudD1ccHRleG5vaW5kZW50CisgIFxnbG9iYWxcYWR2YW5jZVxmb290bm90ZW5vIGJ5IFxAbmUKKyAgXGVkZWZcdGhpc2Zvb3Rub3skXntcdGhlXGZvb3Rub3Rlbm99JH0lCisgICUKKyAgJSBJbiBjYXNlIHRoZSBmb290bm90ZSBjb21lcyBhdCB0aGUgZW5kIG9mIGEgc2VudGVuY2UsIHByZXNlcnZlIHRoZQorICAlIGV4dHJhIHNwYWNpbmcgYWZ0ZXIgd2UgZG8gdGhlIGZvb3Rub3RlIG51bWJlci4KKyAgXGxldFxAc2ZcZW1wdHkKKyAgXGlmaG1vZGVcZWRlZlxAc2Z7XHNwYWNlZmFjdG9yXHRoZVxzcGFjZWZhY3Rvcn1ccHRleHNsYXNoXGZpCisgICUKKyAgJSBSZW1vdmUgaW5hZHZlcnRlbnQgYmxhbmsgc3BhY2UgYmVmb3JlIHR5cGVzZXR0aW5nIHRoZSBmb290bm90ZSBudW1iZXIuCisgIFx1bnNraXAKKyAgXHRoaXNmb290bm9cQHNmCisgIFxkb2Zvb3Rub3RlCit9JQorCislIERvbid0IGJvdGhlciB3aXRoIHRoZSB0cmlja2VyeSBpbiBwbGFpbi50ZXggdG8gbm90IHJlcXVpcmUgdGhlCislIGZvb3Rub3RlIHRleHQgYXMgYSBwYXJhbWV0ZXIuICBPdXIgZm9vdG5vdGVzIGRvbid0IG5lZWQgdG8gYmUgc28gZ2VuZXJhbC4KKyUKKyUgT2ggeWVzLCB0aGV5IGRvOyBvdGhlcndpc2UsIEBpZnNldCAoYW5kIGFueXRoaW5nIGVsc2UgdGhhdCB1c2VzCislIFxwYXJzZWFyZ2xpbmUpIGZhaWxzIGluc2lkZSBmb290bm90ZXMgYmVjYXVzZSB0aGUgdG9rZW5zIGFyZSBmaXhlZCB3aGVuCislIHRoZSBmb290bm90ZSBpcyByZWFkLiAgLS1rYXJsLCAxNm5vdjk2LgorJQorXGdkZWZcZG9mb290bm90ZXslCisgIFxpbnNlcnRcZm9vdGluc1xiZ3JvdXAKKyAgJSBXZSB3YW50IHRvIHR5cGVzZXQgdGhpcyB0ZXh0IGFzIGEgbm9ybWFsIHBhcmFncmFwaCwgZXZlbiBpZiB0aGUKKyAgJSBmb290bm90ZSByZWZlcmVuY2Ugb2NjdXJzIGluIChmb3IgZXhhbXBsZSkgYSBkaXNwbGF5IGVudmlyb25tZW50LgorICAlIFNvIHJlc2V0IHNvbWUgcGFyYW1ldGVycy4KKyAgXGhzaXplPVxwYWdld2lkdGgKKyAgXGludGVybGluZXBlbmFsdHlcaW50ZXJmb290bm90ZWxpbmVwZW5hbHR5CisgIFxzcGxpdHRvcHNraXBcaHRcc3RydXRib3ggJSB0b3AgYmFzZWxpbmUgZm9yIGJyb2tlbiBmb290bm90ZXMKKyAgXHNwbGl0bWF4ZGVwdGhcZHBcc3RydXRib3gKKyAgXGZsb2F0aW5ncGVuYWx0eVxATU0KKyAgXGxlZnRza2lwXHpAc2tpcAorICBccmlnaHRza2lwXHpAc2tpcAorICBcc3BhY2Vza2lwXHpAc2tpcAorICBceHNwYWNlc2tpcFx6QHNraXAKKyAgXHBhcmluZGVudFxkZWZhdWx0cGFyaW5kZW50CisgICUKKyAgXHNtYWxsZm9udHMgXHJtCisgICUKKyAgJSBCZWNhdXNlIHdlIHVzZSBoYW5naW5nIGluZGVudGF0aW9uIGluIGZvb3Rub3RlcywgYSBAbm9pbmRlbnQgYXBwZWFycworICAlIHRvIGV4ZGVudCB0aGlzIHRleHQsIHNvIG1ha2UgaXQgYmUgYSBuby1vcC4gIG1ha2VpbmZvIGRvZXMgbm90IHVzZQorICAlIGhhbmdpbmcgaW5kZW50YXRpb24gc28gQG5vaW5kZW50IGNhbiBzdGlsbCBiZSBuZWVkZWQgd2l0aGluIGZvb3Rub3RlCisgICUgdGV4dCBhZnRlciBhbiBAZXhhbXBsZSBvciB0aGUgbGlrZSAobm90IHRoYXQgdGhpcyBpcyBnb29kIHN0eWxlKS4KKyAgXGxldFxub2luZGVudCA9IFxyZWxheAorICAlCisgICUgSGFuZyB0aGUgZm9vdG5vdGUgdGV4dCBvZmYgdGhlIG51bWJlci4gIFVzZSBcZXZlcnlwYXIgaW4gY2FzZSB0aGUKKyAgJSBmb290bm90ZSBleHRlbmRzIGZvciBtb3JlIHRoYW4gb25lIHBhcmFncmFwaC4KKyAgXGV2ZXJ5cGFyID0ge1xoYW5nfSUKKyAgXHRleHRpbmRlbnR7XHRoaXNmb290bm99JQorICAlCisgICUgRG9uJ3QgY3Jhc2ggaW50byB0aGUgbGluZSBhYm92ZSB0aGUgZm9vdG5vdGUgdGV4dC4gIFNpbmNlIHRoaXMKKyAgJSBleHBhbmRzIGludG8gYSBib3gsIGl0IG11c3QgY29tZSB3aXRoaW4gdGhlIHBhcmFncmFwaCwgbGVzdCBpdAorICAlIHByb3ZpZGUgYSBwbGFjZSB3aGVyZSBUZVggY2FuIHNwbGl0IHRoZSBmb290bm90ZS4KKyAgXGZvb3RzdHJ1dAorICBcZnV0dXJlbGV0XG5leHRcZm9AdAorfQorfSVlbmQgXGNhdGNvZGUgYFxAPTExCisKKyUgSW4gY2FzZSBhIEBmb290bm90ZSBhcHBlYXJzIGluIGEgdmJveCwgc2F2ZSB0aGUgZm9vdG5vdGUgdGV4dCBhbmQgY3JlYXRlCislIHRoZSByZWFsIFxpbnNlcnQganVzdCBhZnRlciB0aGUgdmJveCBmaW5pc2hlZC4gIE90aGVyd2lzZSwgdGhlIGluc2VydGlvbgorJSB3b3VsZCBiZSBsb3N0LgorJSBTaW1pbGFyaWx5LCBpZiBhIEBmb290bm90ZSBhcHBlYXJzIGluc2lkZSBhbiBhbGlnbm1lbnQsIHNhdmUgdGhlIGZvb3Rub3RlCislIHRleHQgdG8gYSBib3ggYW5kIG1ha2UgdGhlIFxpbnNlcnQgd2hlbiBhIHJvdyBvZiB0aGUgdGFibGUgaXMgZmluaXNoZWQuCislIEFuZCB0aGUgc2FtZSBjYW4gYmUgZG9uZSBmb3Igb3RoZXIgaW5zZXJ0IGNsYXNzZXMuICAtLWthc2FsLCAxNm5vdjAzLgorCislIFJlcGxhY2UgdGhlIFxpbnNlcnQgcHJpbWl0aXZlIGJ5IGEgY2hlYXRpbmcgbWFjcm8uCislIERlZXBlciBpbnNpZGUsIGp1c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHNhdmVkIGluc2VydGlvbnMgYXJlIG5vdCBzcGlsbGVkCislIG91dCBwcmVtYXR1cmVseS4KKyUKK1xkZWZcc3RhcnRzYXZpbmdpbnNlcnRzeyUKKyAgXGlmeCBcaW5zZXJ0XHB0ZXhpbnNlcnQKKyAgICBcbGV0XGluc2VydFxzYXZlaW5zZXJ0CisgIFxlbHNlCisgICAgXGxldFxjaGVja2luc2VydHNccmVsYXgKKyAgXGZpCit9CisKKyUgVGhpcyBcaW5zZXJ0IHJlcGxhY2VtZW50IHdvcmtzIGZvciBib3RoIFxpbnNlcnRcZm9vdGluc3tmb299IGFuZAorJSBcaW5zZXJ0XGZvb3RpbnNcYmdyb3VwIGZvb1xlZ3JvdXAsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgZm9yIFxpbnNlcnQyN3tmb299LgorJQorXGRlZlxzYXZlaW5zZXJ0IzF7JQorICBcZWRlZlxuZXh0e1xub2V4cGFuZFxzYXZldG9ib3ggXG1ha2VTQVZFbmFtZSMxfSUKKyAgXGFmdGVyYXNzaWdubWVudFxuZXh0CisgICUgc3dhbGxvdyB0aGUgbGVmdCBicmFjZQorICBcbGV0XHRlbXAgPQorfQorXGRlZlxtYWtlU0FWRW5hbWUjMXtcbWFrZWNzbmFtZXtTQVZFXGV4cGFuZGFmdGVyXGdvYmJsZVxzdHJpbmcjMX19CitcZGVmXHNhdmV0b2JveCMxe1xnbG9iYWxcc2V0Ym94IzEgPSBcdmJveFxiZ3JvdXAgXHVudmJveCMxfQorCitcZGVmXGNoZWNrc2F2ZWlucyMxe1xpZnZvaWQjMVxlbHNlIFxwbGFjZXNhdmVpbnMjMVxmaX0KKworXGRlZlxwbGFjZXNhdmVpbnMjMXslCisgIFxwdGV4aW5zZXJ0IFxjc25hbWVcZXhwYW5kYWZ0ZXJcZ29iYmxlc2F2ZVxzdHJpbmcjMVxlbmRjc25hbWUKKyAgICB7XGJveCMxfSUKK30KKworJSBlYXQgQFNBVkUgLS0gYmV3YXJlLCBhbGwgb2YgdGhlbSBoYXZlIGNhdGNvZGUgXG90aGVyOgoreworICBcZGVmXGRvc3BlY2lhbHN7XGRvIFNcZG8gQVxkbyBWXGRvIEV9IFx1bmNhdGNvZGVzcGVjaWFscyAgJSAgOy0pCisgIFxnZGVmXGdvYmJsZXNhdmUgQFNBVkV7fQorfQorCislIGluaXRpYWxpemF0aW9uOgorXGRlZlxuZXdzYXZlaW5zICMxeyUKKyAgXGVkZWZcbmV4dHtcbm9leHBhbmRcbmV3c2F2ZWluc1ggXG1ha2VTQVZFbmFtZSMxfSUKKyAgXG5leHQKK30KK1xkZWZcbmV3c2F2ZWluc1ggIzF7JQorICBcY3NuYW1lIG5ld2JveFxlbmRjc25hbWUgIzElCisgIFxleHBhbmRhZnRlclxkZWZcZXhwYW5kYWZ0ZXJcY2hlY2tpbnNlcnRzXGV4cGFuZGFmdGVye1xjaGVja2luc2VydHMKKyAgICBcY2hlY2tzYXZlaW5zICMxfSUKK30KKworJSBpbml0aWFsaXplOgorXGxldFxjaGVja2luc2VydHNcZW1wdHkKK1xuZXdzYXZlaW5zXGZvb3RpbnMKK1xuZXdzYXZlaW5zXG1hcmdpbgorCisKKyUgQGltYWdlLiAgV2UgdXNlIHRoZSBtYWNyb3MgZnJvbSBlcHNmLnRleCB0byBzdXBwb3J0IHRoaXMuCislIElmIGVwc2YudGV4IGlzIG5vdCBpbnN0YWxsZWQgYW5kIEBpbWFnZSBpcyB1c2VkLCB3ZSBjb21wbGFpbi4KKyUKKyUgQ2hlY2sgZm9yIGFuZCByZWFkIGVwc2YudGV4IHVwIGZyb250LiAgSWYgd2UgcmVhZCBpdCBvbmx5IGF0IEBpbWFnZQorJSB0aW1lLCB3ZSBtaWdodCBiZSBpbnNpZGUgYSBncm91cCwgYW5kIHRoZW4gaXRzIGRlZmluaXRpb25zIHdvdWxkIGdldAorJSB1bmRvbmUgYW5kIHRoZSBuZXh0IGltYWdlIHdvdWxkIGZhaWwuCitcb3BlbmluIDEgPSBlcHNmLnRleAorXGlmZW9mIDEgXGVsc2UKKyAgJSBEbyBub3QgYm90aGVyIHNob3dpbmcgYmFubmVyIHdpdGggZXBzZi50ZXggdjIuN2sgKGF2YWlsYWJsZSBpbgorICAlIGRvYy9lcHNmLnRleCBhbmQgb24gY3RhbikuCisgIFxkZWZcZXBzZmFubm91bmNle1x0b2tzMCA9IH0lCisgIFxpbnB1dCBlcHNmLnRleAorXGZpCitcY2xvc2VpbiAxCislCislIFdlIHdpbGwgb25seSBjb21wbGFpbiBvbmNlIGFib3V0IGxhY2sgb2YgZXBzZi50ZXguCitcbmV3aWZcaWZ3YXJuZWRub2Vwc2YKK1xuZXdoZWxwXG5vZXBzZmhlbHB7ZXBzZi50ZXggbXVzdCBiZSBpbnN0YWxsZWQgZm9yIGltYWdlcyB0bworICB3b3JrLiAgSXQgaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGUgVGV4aW5mbyBkaXN0cmlidXRpb24sIG9yIHlvdSBjYW4gZ2V0CisgIGl0IGZyb20gZnRwOi8vdHVnLm9yZy90ZXgvZXBzZi50ZXgufQorJQorXGRlZlxpbWFnZSMxeyUKKyAgXGlmeFxlcHNmYm94XHVuZGVmaW5lZAorICAgIFxpZndhcm5lZG5vZXBzZiBcZWxzZQorICAgICAgXGVycmhlbHAgPSBcbm9lcHNmaGVscAorICAgICAgXGVycm1lc3NhZ2V7ZXBzZi50ZXggbm90IGZvdW5kLCBpbWFnZXMgd2lsbCBiZSBpZ25vcmVkfSUKKyAgICAgIFxnbG9iYWxcd2FybmVkbm9lcHNmdHJ1ZQorICAgIFxmaQorICBcZWxzZQorICAgIFxpbWFnZXh4eCAjMSwsLCwsXGZpbmlzaAorICBcZmkKK30KKyUKKyUgQXJndW1lbnRzIHRvIEBpbWFnZToKKyUgIzEgaXMgKG1hbmRhdG9yeSkgaW1hZ2UgZmlsZW5hbWU7IHdlIHRhY2sgb24gLmVwcyBleHRlbnNpb24uCislICMyIGlzIChvcHRpb25hbCkgd2lkdGgsICMzIGlzIChvcHRpb25hbCkgaGVpZ2h0LgorJSAjNCBpcyAoaWdub3JlZCBvcHRpb25hbCkgaHRtbCBhbHQgdGV4dC4KKyUgIzUgaXMgKGlnbm9yZWQgb3B0aW9uYWwpIGV4dGVuc2lvbi4KKyUgIzYgaXMganVzdCB0aGUgdXN1YWwgZXh0cmEgaWdub3JlZCBhcmcgZm9yIHBhcnNpbmcgdGhpcyBzdHVmZi4KK1xuZXdpZlxpZmltYWdldm1vZGUKK1xkZWZcaW1hZ2V4eHgjMSwjMiwjMywjNCwjNSwjNlxmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eTSA9IDUgICAgICUgaW4gY2FzZSB3ZSdyZSBpbnNpZGUgYW4gZXhhbXBsZQorICBcbm9ybWFsdHVybm9mZmFjdGl2ZSAgJSBhbGxvdyBfIGV0IGFsLiBpbiBuYW1lcworICAlIElmIHRoZSBpbWFnZSBpcyBieSBpdHNlbGYsIGNlbnRlciBpdC4KKyAgXGlmdm1vZGUKKyAgICBcaW1hZ2V2bW9kZXRydWUKKyAgICBcbm9icmVha1xiaWdza2lwCisgICAgJSBVc3VhbGx5IHdlJ2xsIGhhdmUgdGV4dCBhZnRlciB0aGUgaW1hZ2Ugd2hpY2ggd2lsbCBpbnNlcnQKKyAgICAlIFxwYXJza2lwIGdsdWUsIHNvIGluc2VydCBpdCBoZXJlIHRvbyB0byBlcXVhbGl6ZSB0aGUgc3BhY2UKKyAgICAlIGFib3ZlIGFuZCBiZWxvdy4KKyAgICBcbm9icmVha1x2c2tpcFxwYXJza2lwCisgICAgXG5vYnJlYWsKKyAgICBcbGluZVxiZ3JvdXBcaHNzCisgIFxmaQorICAlCisgICUgT3V0cHV0IHRoZSBpbWFnZS4KKyAgXGlmcGRmCisgICAgXGRvcGRmaW1hZ2V7IzF9eyMyfXsjM30lCisgIFxlbHNlCisgICAgJSBcZXBzZmJveCBpdHNlbGYgcmVzZXRzIFxlcHNmP3NpemUgYXQgZWFjaCBmaWd1cmUuCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfVxpZmRpbVx3ZDAgPiAwcHQgXGVwc2Z4c2l6ZT0jMlxyZWxheCBcZmkKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzN9XGlmZGltXHdkMCA+IDBwdCBcZXBzZnlzaXplPSMzXHJlbGF4IFxmaQorICAgIFxlcHNmYm94eyMxLmVwc30lCisgIFxmaQorICAlCisgIFxpZmltYWdldm1vZGUgXGhzcyBcZWdyb3VwIFxiaWdicmVhayBcZmkgICUgc3BhY2UgYWZ0ZXIgdGhlIGltYWdlCitcZW5kZ3JvdXB9CisKKworJSBAZmxvYXQgRkxPQVRUWVBFLExBQkVMLExPQyAuLi4gQGVuZCBmbG9hdCBmb3IgZGlzcGxheWVkIGZpZ3VyZXMsIHRhYmxlcywKKyUgZXRjLiAgV2UgZG9uJ3QgYWN0dWFsbHkgaW1wbGVtZW50IGZsb2F0aW5nIHlldCwgd2UgYWx3YXlzIGluY2x1ZGUgdGhlCislIGZsb2F0ICJoZXJlIi4gIEJ1dCBpdCBzZWVtZWQgdGhlIGJlc3QgbmFtZSBmb3IgdGhlIGZ1dHVyZS4KKyUKK1xlbnZwYXJzZWFyZ2RlZlxmbG9hdHtcZWF0Y29tbWFzcGFjZVxlYXRjb21tYXNwYWNlXGRvZmxvYXQjMSwgLCAsXGZpbmlzaH0KKworJSBUaGVyZSBtYXkgYmUgYSBzcGFjZSBiZWZvcmUgc2Vjb25kIGFuZC9vciB0aGlyZCBwYXJhbWV0ZXI7IGRlbGV0ZSBpdC4KK1xkZWZcZWF0Y29tbWFzcGFjZSMxLCB7IzEsfQorCislICMxIGlzIHRoZSBvcHRpb25hbCBGTE9BVFRZUEUsIHRoZSB0ZXh0IGxhYmVsIGZvciB0aGlzIGZsb2F0LCB0eXBpY2FsbHkKKyUgIkZpZ3VyZSIsICJUYWJsZSIsICJFeGFtcGxlIiwgZXRjLiAgQ2FuJ3QgY29udGFpbiBjb21tYXMuICBJZiBvbWl0dGVkLAorJSB0aGlzIGZsb2F0IHdpbGwgbm90IGJlIG51bWJlcmVkIGFuZCBjYW5ub3QgYmUgcmVmZXJyZWQgdG8uCislCislICMyIGlzIHRoZSBvcHRpb25hbCB4cmVmIGxhYmVsLiAgQWxzbyBtdXN0IGJlIHByZXNlbnQgZm9yIHRoZSBmbG9hdCB0bworJSBiZSByZWZlcmFibGUuCislCislICMzIGlzIHRoZSBvcHRpb25hbCBwb3NpdGlvbmluZyBhcmd1bWVudDsgZm9yIG5vdywgaXQgaXMgaWdub3JlZC4gIEl0CislIHdpbGwgc29tZWhvdyBzcGVjaWZ5IHRoZSBwb3NpdGlvbnMgYWxsb3dlZCB0byBmbG9hdCB0byAoaGVyZSwgdG9wLCBib3R0b20pLgorJQorJSBXZSBrZWVwIGEgc2VwYXJhdGUgY291bnRlciBmb3IgZWFjaCBGTE9BVFRZUEUsIHdoaWNoIHdlIHJlc2V0IGF0IGVhY2gKKyUgY2hhcHRlci1sZXZlbCBjb21tYW5kLgorXGxldFxyZXNldGFsbGZsb2F0bm9zPVxlbXB0eQorJQorXGRlZlxkb2Zsb2F0IzEsIzIsIzMsIzRcZmluaXNoeyUKKyAgXGxldFx0aGlzY2FwdGlvbj1cZW1wdHkKKyAgXGxldFx0aGlzc2hvcnRjYXB0aW9uPVxlbXB0eQorICAlCisgICUgZG9uJ3QgbG9zZSBmb290bm90ZXMgaW5zaWRlIEBmbG9hdC4KKyAgJQorICAlIEJFV0FSRTogd2hlbiB0aGUgZmxvYXRzIHN0YXJ0IGZsb2F0LCB3ZSBoYXZlIHRvIGlzc3VlIHdhcm5pbmcgd2hlbmV2ZXIgYW4KKyAgJSBpbnNlcnQgYXBwZWFycyBpbnNpZGUgYSBmbG9hdCB3aGljaCBjb3VsZCBwb3NzaWJseSBmbG9hdC4gLS1rYXNhbCwgMjZtYXkwNAorICAlCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgJQorICAlIFdlIGNhbid0IGJlIHVzZWQgaW5zaWRlIGEgcGFyYWdyYXBoLgorICBccGFyCisgICUKKyAgXHZ0b3BcYmdyb3VwCisgICAgXGRlZlxmbG9hdHR5cGV7IzF9JQorICAgIFxkZWZcZmxvYXRsYWJlbHsjMn0lCisgICAgXGRlZlxmbG9hdGxvY3sjM30lIHdlIGRvIG5vdGhpbmcgd2l0aCB0aGlzIHlldC4KKyAgICAlCisgICAgXGlmeFxmbG9hdHR5cGVcZW1wdHkKKyAgICAgIFxsZXRcc2FmZWZsb2F0dHlwZT1cZW1wdHkKKyAgICBcZWxzZQorICAgICAgeyUKKyAgICAgICAgJSB0aGUgZmxvYXR0eXBlIG1pZ2h0IGhhdmUgYWNjZW50cyBvciBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgICAgICUgYnV0IHdlIG5lZWQgdG8gdXNlIGl0IGluIGEgY29udHJvbCBzZXF1ZW5jZSBuYW1lLgorICAgICAgICBcaW5kZXhub2ZvbnRzCisgICAgICAgIFx0dXJub2ZmYWN0aXZlCisgICAgICAgIFx4ZGVmXHNhZmVmbG9hdHR5cGV7XGZsb2F0dHlwZX0lCisgICAgICB9JQorICAgIFxmaQorICAgICUKKyAgICAlIElmIGxhYmVsIGlzIGdpdmVuIGJ1dCBubyB0eXBlLCB3ZSBoYW5kbGUgdGhhdCBhcyB0aGUgZW1wdHkgdHlwZS4KKyAgICBcaWZ4XGZsb2F0bGFiZWxcZW1wdHkgXGVsc2UKKyAgICAgICUgV2Ugd2FudCBlYWNoIEZMT0FUVFlQRSB0byBiZSBudW1iZXJlZCBzZXBhcmF0ZWx5IChGaWd1cmUgMSwKKyAgICAgICUgVGFibGUgMSwgRmlndXJlIDIsIC4uLikuICAoQW5kIGlmIG5vIGxhYmVsLCBubyBudW1iZXIuKQorICAgICAgJQorICAgICAgXGV4cGFuZGFmdGVyXGdldGZsb2F0bm9cY3NuYW1lXHNhZmVmbG9hdHR5cGUgZmxvYXRub1xlbmRjc25hbWUKKyAgICAgIFxnbG9iYWxcYWR2YW5jZVxmbG9hdG5vIGJ5IDEKKyAgICAgICUKKyAgICAgIHslCisgICAgICAgICUgVGhpcyBtYWdpYyB2YWx1ZSBmb3IgXHRoaXNzZWN0aW9uIGlzIG91dHB1dCBieSBcc2V0cmVmIGFzIHRoZQorICAgICAgICAlIFhSRUZMQUJFTC10aXRsZSB2YWx1ZS4gIFx4cmVmWCB1c2VzIGl0IHRvIGRpc3Rpbmd1aXNoIGZsb2F0CisgICAgICAgICUgbGFiZWxzICh3aGljaCBoYXZlIGEgY29tcGxldGVseSBkaWZmZXJlbnQgb3V0cHV0IGZvcm1hdCkgZnJvbQorICAgICAgICAlIG5vZGUgYW5kIGFuY2hvciBsYWJlbHMuICBBbmQgXHhyZGVmIHVzZXMgaXQgdG8gY29uc3RydWN0IHRoZQorICAgICAgICAlIGxpc3RzIG9mIGZsb2F0cy4KKyAgICAgICAgJQorICAgICAgICBcZWRlZlx0aGlzc2VjdGlvbntcZmxvYXRtYWdpYz1cc2FmZWZsb2F0dHlwZX0lCisgICAgICAgIFxzZXRyZWZ7XGZsb2F0bGFiZWx9e1lmbG9hdH0lCisgICAgICB9JQorICAgIFxmaQorICAgICUKKyAgICAlIHN0YXJ0IHdpdGggXHBhcnNraXAgZ2x1ZSwgSSBndWVzcy4KKyAgICBcdnNraXBccGFyc2tpcAorICAgICUKKyAgICAlIERvbid0IHN1cHByZXNzIGluZGVudGF0aW9uIGlmIGEgZmxvYXQgaGFwcGVucyB0byBzdGFydCBhIHNlY3Rpb24uCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorfQorCislIHdlIGhhdmUgdGhlc2UgcG9zc2liaWxpdGllczoKKyUgQGZsb2F0IEZvbyxsYmwgJiBAY2FwdGlvbntDYXB9OiBGb28gMS4xOiBDYXAKKyUgQGZsb2F0IEZvbyxsYmwgJiBubyBjYXB0aW9uOiAgICBGb28gMS4xCislIEBmbG9hdCBGb28gJiBAY2FwdGlvbntDYXB9OiAgICAgRm9vOiBDYXAKKyUgQGZsb2F0IEZvbyAmIG5vIGNhcHRpb246ICAgICAgICBGb28KKyUgQGZsb2F0ICxsYmwgJiBDYXB0aW9ue0NhcH06ICAgICAxLjE6IENhcAorJSBAZmxvYXQgLGxibCAmIG5vIGNhcHRpb246ICAgICAgIDEuMQorJSBAZmxvYXQgJiBAY2FwdGlvbntDYXB9OiAgICAgICAgIENhcAorJSBAZmxvYXQgJiBubyBjYXB0aW9uOgorJQorXGRlZlxFZmxvYXR7JQorICAgIFxsZXRcZmxvYXRpZGVudCA9IFxlbXB0eQorICAgICUKKyAgICAlIEluIGFsbCBjYXNlcywgaWYgd2UgaGF2ZSBhIGZsb2F0IHR5cGUsIGl0IGNvbWVzIGZpcnN0LgorICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5IFxlbHNlIFxkZWZcZmxvYXRpZGVudHtcZmxvYXR0eXBlfVxmaQorICAgICUKKyAgICAlIElmIHdlIGhhdmUgYW4geHJlZiBsYWJlbCwgdGhlIG51bWJlciBjb21lcyBuZXh0LgorICAgIFxpZnhcZmxvYXRsYWJlbFxlbXB0eSBcZWxzZQorICAgICAgXGlmeFxmbG9hdHR5cGVcZW1wdHkgXGVsc2UgJSBpZiBhbHNvIGhhZCBmbG9hdCB0eXBlLCBuZWVkIHRpZSBmaXJzdC4KKyAgICAgICAgXGFwcGVuZHRvbWFjcm9cZmxvYXRpZGVudHtcdGllfSUKKyAgICAgIFxmaQorICAgICAgJSB0aGUgbnVtYmVyLgorICAgICAgXGFwcGVuZHRvbWFjcm9cZmxvYXRpZGVudHtcY2hhcGxldmVscHJlZml4XHRoZVxmbG9hdG5vfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBTdGFydCB0aGUgcHJpbnRlZCBjYXB0aW9uIHdpdGggd2hhdCB3ZSd2ZSBjb25zdHJ1Y3RlZCBpbgorICAgICUgXGZsb2F0aWRlbnQsIGJ1dCBrZWVwIGl0IHNlcGFyYXRlOyB3ZSBuZWVkIFxmbG9hdGlkZW50IGFnYWluLgorICAgIFxsZXRcY2FwdGlvbmxpbmUgPSBcZmxvYXRpZGVudAorICAgICUKKyAgICBcaWZ4XHRoaXNjYXB0aW9uXGVtcHR5IFxlbHNlCisgICAgICBcaWZ4XGZsb2F0aWRlbnRcZW1wdHkgXGVsc2UKKwlcYXBwZW5kdG9tYWNyb1xjYXB0aW9ubGluZXs6IH0lIGhhZCBpZGVudCwgc28gbmVlZCBhIGNvbG9uIGJldHdlZW4KKyAgICAgIFxmaQorICAgICAgJQorICAgICAgJSBjYXB0aW9uIHRleHQuCisgICAgICBcYXBwZW5kdG9tYWNyb1xjYXB0aW9ubGluZXtcc2NhbmV4cFx0aGlzY2FwdGlvbn0lCisgICAgXGZpCisgICAgJQorICAgICUgSWYgd2UgaGF2ZSBhbnl0aGluZyB0byBwcmludCwgcHJpbnQgaXQsIHdpdGggc3BhY2UgYmVmb3JlLgorICAgICUgRXZlbnR1YWxseSB0aGlzIG5lZWRzIHRvIGJlY29tZSBhbiBcaW5zZXJ0LgorICAgIFxpZnhcY2FwdGlvbmxpbmVcZW1wdHkgXGVsc2UKKyAgICAgIFx2c2tpcC41XHBhcnNraXAKKyAgICAgIFxjYXB0aW9ubGluZQorICAgICAgJQorICAgICAgJSBTcGFjZSBiZWxvdyBjYXB0aW9uLgorICAgICAgXHZza2lwXHBhcnNraXAKKyAgICBcZmkKKyAgICAlCisgICAgJSBJZiBoYXZlIGFuIHhyZWYgbGFiZWwsIHdyaXRlIHRoZSBsaXN0IG9mIGZsb2F0cyBpbmZvLiAgRG8gdGhpcworICAgICUgYWZ0ZXIgdGhlIGNhcHRpb24sIHRvIGF2b2lkIGNoYW5jZSBvZiBpdCBiZWluZyBhIGJyZWFrcG9pbnQuCisgICAgXGlmeFxmbG9hdGxhYmVsXGVtcHR5IFxlbHNlCisgICAgICAlIFdyaXRlIHRoZSB0ZXh0IHRoYXQgZ29lcyBpbiB0aGUgbG9mIHRvIHRoZSBhdXggZmlsZSBhcworICAgICAgJSBcZmxvYXRsYWJlbC1sb2YuICBCZXNpZGVzIFxmbG9hdGlkZW50LCB3ZSBpbmNsdWRlIHRoZSBzaG9ydAorICAgICAgJSBjYXB0aW9uIGlmIHNwZWNpZmllZCwgZWxzZSB0aGUgZnVsbCBjYXB0aW9uIGlmIHNwZWNpZmllZCwgZWxzZSBub3RoaW5nLgorICAgICAgeyUKKyAgICAgICAgXGF0ZHVtbWllcworICAgICAgICAlIHNpbmNlIHdlIHJlYWQgdGhlIGNhcHRpb24gdGV4dCBpbiB0aGUgbWFjcm8gd29ybGQsIHdoZXJlIF5eTQorICAgICAgICAlIGlzIHR1cm5lZCBpbnRvIGEgbm9ybWFsIGNoYXJhY3Rlciwgd2UgaGF2ZSB0byBzY2FuIGl0IGJhY2ssIHNvCisgICAgICAgICUgd2UgZG9uJ3Qgd3JpdGUgdGhlIGxpdGVyYWwgdGhyZWUgY2hhcmFjdGVycyAiXl5NIiBpbnRvIHRoZSBhdXggZmlsZS4KKwlcc2NhbmV4cHslCisJICBceGRlZlxub2V4cGFuZFxndGVtcHslCisJICAgIFxpZnhcdGhpc3Nob3J0Y2FwdGlvblxlbXB0eQorCSAgICAgIFx0aGlzY2FwdGlvbgorCSAgICBcZWxzZQorCSAgICAgIFx0aGlzc2hvcnRjYXB0aW9uCisJICAgIFxmaQorCSAgfSUKKwl9JQorICAgICAgICBcaW1tZWRpYXRlXHdyaXRlXGF1eGZpbGV7QHhyZGVme1xmbG9hdGxhYmVsLWxvZn17XGZsb2F0aWRlbnQKKwkgIFxpZnhcZ3RlbXBcZW1wdHkgXGVsc2UgOiBcZ3RlbXAgXGZpfX0lCisgICAgICB9JQorICAgIFxmaQorICBcZWdyb3VwICAlIGVuZCBvZiBcdnRvcAorICAlCisgICUgcGxhY2UgdGhlIGNhcHR1cmVkIGluc2VydHMKKyAgJQorICAlIEJFV0FSRTogd2hlbiB0aGUgZmxvYXRzIHN0YXJ0IGZsb2F0LCB3ZSBoYXZlIHRvIGlzc3VlIHdhcm5pbmcgd2hlbmV2ZXIgYW4KKyAgJSBpbnNlcnQgYXBwZWFycyBpbnNpZGUgYSBmbG9hdCB3aGljaCBjb3VsZCBwb3NzaWJseSBmbG9hdC4gLS1rYXNhbCwgMjZtYXkwNAorICAlCisgIFxjaGVja2luc2VydHMKK30KKworJSBBcHBlbmQgdGhlIHRva2VucyAjMiB0byB0aGUgZGVmaW5pdGlvbiBvZiBtYWNybyAjMSwgbm90IGV4cGFuZGluZyBlaXRoZXIuCislCitcZGVmXGFwcGVuZHRvbWFjcm8jMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGRlZlxleHBhbmRhZnRlciMxXGV4cGFuZGFmdGVyeyMxIzJ9JQorfQorCislIEBjYXB0aW9uLCBAc2hvcnRjYXB0aW9uCislCitcZGVmXGNhcHRpb257XGRvY2FwdGlvblx0aGlzY2FwdGlvbn0KK1xkZWZcc2hvcnRjYXB0aW9ue1xkb2NhcHRpb25cdGhpc3Nob3J0Y2FwdGlvbn0KK1xkZWZcZG9jYXB0aW9ue1xjaGVja2VudlxmbG9hdCBcYmdyb3VwXHNjYW5hcmdjdHh0XGRlZmNhcHRpb259CitcZGVmXGRlZmNhcHRpb24jMSMye1xlZ3JvdXAgXGRlZiMxeyMyfX0KKworJSBUaGUgcGFyYW1ldGVyIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIGlkZW50aWZ5aW5nIHRoZSBjb3VudGVyIHdlIGFyZQorJSBnb2luZyB0byB1c2UuICBDcmVhdGUgaXQgaWYgaXQgZG9lc24ndCBleGlzdCBhbmQgYXNzaWduIGl0IHRvIFxmbG9hdG5vLgorXGRlZlxnZXRmbG9hdG5vIzF7JQorICBcaWZ4IzFccmVsYXgKKyAgICAgICUgSGF2ZW4ndCBzZWVuIHRoaXMgZmlndXJlIHR5cGUgYmVmb3JlLgorICAgICAgXGNzbmFtZSBuZXdjb3VudFxlbmRjc25hbWUgIzElCisgICAgICAlCisgICAgICAlIFJlbWVtYmVyIHRvIHJlc2V0IHRoaXMgZmxvYXRubyBhdCB0aGUgbmV4dCBjaGFwLgorICAgICAgXGV4cGFuZGFmdGVyXGdkZWZcZXhwYW5kYWZ0ZXJccmVzZXRhbGxmbG9hdG5vcworICAgICAgICBcZXhwYW5kYWZ0ZXJ7XHJlc2V0YWxsZmxvYXRub3MgIzE9MCB9JQorICBcZmkKKyAgXGxldFxmbG9hdG5vIzElCit9CisKKyUgXHNldHJlZiBjYWxscyB0aGlzIHRvIGdldCB0aGUgWFJFRkxBQkVMLXNudCB2YWx1ZS4gIFdlIHdhbnQgYW4gQHhyZWYKKyUgdG8gdGhlIEZMT0FUTEFCRUwgdG8gZXhwYW5kIHRvICJGaWd1cmUgMy4xIi4gIFdlIGNhbGwgXHNldHJlZiB3aGVuIHdlCislIGZpcnN0IHJlYWQgdGhlIEBmbG9hdCBjb21tYW5kLgorJQorXGRlZlxZZmxvYXR7XGZsb2F0dHlwZUB0aWUgXGNoYXBsZXZlbHByZWZpeFx0aGVcZmxvYXRub30lCisKKyUgTWFnaWMgc3RyaW5nIHVzZWQgZm9yIHRoZSBYUkVGTEFCRUwtdGl0bGUgdmFsdWUsIHNvIFx4cmVmWCBjYW4KKyUgZGlzdGluZ3Vpc2ggZmxvYXRzIGZyb20gb3RoZXIgeHJlZiB0eXBlcy4KK1xkZWZcZmxvYXRtYWdpY3shIWZsb2F0ISF9CisKKyUgIzEgaXMgdGhlIGNvbnRyb2wgc2VxdWVuY2Ugd2UgYXJlIHBhc3NlZDsgd2UgZXhwYW5kIGludG8gYSBjb25kaXRpb25hbAorJSB3aGljaCBpcyB0cnVlIGlmICMxIHJlcHJlc2VudHMgYSBmbG9hdCByZWYuICBUaGF0IGlzLCB0aGUgbWFnaWMKKyUgXHRoaXNzZWN0aW9uIHZhbHVlIHdoaWNoIHdlIFxzZXRyZWYgYWJvdmUuCislCitcZGVmXGlmZmxvYXQjMXtcZXhwYW5kYWZ0ZXJcZG9pZmZsb2F0IzE9PVxmaW5pc2h9CislCislICMxIGlzIChtYXliZSkgdGhlIFxmbG9hdG1hZ2ljIHN0cmluZy4gIElmIHNvLCAjMiB3aWxsIGJlIHRoZQorJSAoc2FmZSkgZmxvYXQgdHlwZSBmb3IgdGhpcyBmbG9hdC4gIFdlIHNldCBcaWZmbG9hdHR5cGUgdG8gIzIuCislCitcZGVmXGRvaWZmbG9hdCMxPSMyPSMzXGZpbmlzaHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxkZWZcaWZmbG9hdHR5cGV7IzJ9JQorICBcaWZ4XHRlbXBcZmxvYXRtYWdpYworfQorCislIEBsaXN0b2ZmbG9hdHMgRkxPQVRUWVBFIC0gcHJpbnQgYSBsaXN0IG9mIGZsb2F0cyBsaWtlIGEgdGFibGUgb2YgY29udGVudHMuCislCitccGFyc2VhcmdkZWZcbGlzdG9mZmxvYXRzeyUKKyAgXGRlZlxmbG9hdHR5cGV7IzF9JSBmbG9hdHR5cGUKKyAgeyUKKyAgICAlIHRoZSBmbG9hdHR5cGUgbWlnaHQgaGF2ZSBhY2NlbnRzIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycywKKyAgICAlIGJ1dCB3ZSBuZWVkIHRvIHVzZSBpdCBpbiBhIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBceGRlZlxzYWZlZmxvYXR0eXBle1xmbG9hdHR5cGV9JQorICB9JQorICAlCisgICUgXHhyZGVmIHNhdmVzIHRoZSBmbG9hdHMgYXMgYSBcZG8tbGlzdCBpbiBcZmxvYXRsaXN0U0FGRUZMT0FUVFlQRS4KKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgZmxvYXRsaXN0XHNhZmVmbG9hdHR5cGVcZW5kY3NuYW1lIFxyZWxheAorICAgIFxpZmhhdmV4cmVmcworICAgICAgJSBpZiB0aGUgdXNlciBzYWlkIEBsaXN0b2ZmbG9hdHMgZm9vIGJ1dCBuZXZlciBAZmxvYXQgZm9vLgorICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgTm8gYFxzYWZlZmxvYXR0eXBlJyBmbG9hdHMgdG8gbGlzdC59JQorICAgIFxmaQorICBcZWxzZQorICAgIFxiZWdpbmdyb3VwCisgICAgICBcbGVmdHNraXA9XHRvY2luZGVudCAgJSBpbmRlbnQgdGhlc2UgZW50cmllcyBsaWtlIGEgdG9jCisgICAgICBcbGV0XGRvPVxsaXN0b2ZmbG9hdHNkbworICAgICAgXGNzbmFtZSBmbG9hdGxpc3Rcc2FmZWZsb2F0dHlwZVxlbmRjc25hbWUKKyAgICBcZW5kZ3JvdXAKKyAgXGZpCit9CisKKyUgVGhpcyBpcyBjYWxsZWQgb24gZWFjaCBlbnRyeSBpbiBhIGxpc3Qgb2YgZmxvYXRzLiAgV2UncmUgcGFzc2VkIHRoZQorJSB4cmVmIGxhYmVsLCBpbiB0aGUgZm9ybSBMQUJFTC10aXRsZSwgd2hpY2ggaXMgaG93IHdlIHNhdmUgaXQgaW4gdGhlCislIGF1eCBmaWxlLiAgV2Ugc3RyaXAgb2ZmIHRoZSAtdGl0bGUgYW5kIGxvb2sgdXAgXFhSTEFCRUwtbG9mLCB3aGljaAorJSBoYXMgdGhlIHRleHQgd2UncmUgc3VwcG9zZWQgdG8gdHlwZXNldCBoZXJlLgorJQorJSBGaWd1cmVzIHdpdGhvdXQgeHJlZiBsYWJlbHMgd2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QgKHNpbmNlCislIHRoZXkgd29uJ3QgYXBwZWFyIGluIHRoZSBhdXggZmlsZSkuCislCitcZGVmXGxpc3RvZmZsb2F0c2RvIzF7XGxpc3RvZmZsb2F0c2RvZW50cnkjMVxmaW5pc2h9CitcZGVmXGxpc3RvZmZsb2F0c2RvZW50cnkjMS10aXRsZVxmaW5pc2h7eyUKKyAgJSBDYW4ndCBmdWxseSBleHBhbmQgWFIjMS1sb2YgYmVjYXVzZSBpdCBjYW4gY29udGFpbiBhbnl0aGluZy4gIEp1c3QKKyAgJSBwYXNzIHRoZSBjb250cm9sIHNlcXVlbmNlLiAgT24gdGhlIG90aGVyIGhhbmQsIFhSIzEtcGcgaXMganVzdCB0aGUKKyAgJSBwYWdlIG51bWJlciwgYW5kIHdlIHdhbnQgdG8gZnVsbHkgZXhwYW5kIHRoYXQgc28gd2UgY2FuIGdldCBhIGxpbmsKKyAgJSBpbiBwZGYgb3V0cHV0LgorICBcdG9rc0EgPSBcZXhwYW5kYWZ0ZXJ7XGNzbmFtZSBYUiMxLWxvZlxlbmRjc25hbWV9JQorICAlCisgICUgdXNlIHRoZSBzYW1lIFxlbnRyeSBtYWNybyB3ZSB1c2UgdG8gZ2VuZXJhdGUgdGhlIFRPQyBhbmQgaW5kZXguCisgIFxlZGVmXHdyaXRlZW50cnl7XG5vZXhwYW5kXGVudHJ5e1x0aGVcdG9rc0F9e1xjc25hbWUgWFIjMS1wZ1xlbmRjc25hbWV9fSUKKyAgXHdyaXRlZW50cnkKK319CisKK1xtZXNzYWdle2xvY2FsaXphdGlvbix9CislIGFuZCBpMThuLgorCislIEBkb2N1bWVudGxhbmd1YWdlIGlzIHVzdWFsbHkgZ2l2ZW4gdmVyeSBlYXJseSwganVzdCBhZnRlcgorJSBAc2V0ZmlsZW5hbWUuICBJZiBkb25lIHRvbyBsYXRlLCBpdCBtYXkgbm90IG92ZXJyaWRlIGV2ZXJ5dGhpbmcKKyUgcHJvcGVybHkuICBTaW5nbGUgYXJndW1lbnQgaXMgdGhlIGxhbmd1YWdlIGFiYnJldmlhdGlvbi4KKyUgSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBzZXQgdXAgYSBoeXBoZW5hdGlvbiBmaWxlIGhlcmUuCislCitccGFyc2VhcmdkZWZcZG9jdW1lbnRsYW5ndWFnZXslCisgIFx0ZXggJSByZWFkIHR4aS0/Py50ZXggZmlsZSBpbiBwbGFpbiBUZVguCisgICAgJSBSZWFkIHRoZSBmaWxlIGlmIGl0IGV4aXN0cy4KKyAgICBcb3BlbmluIDEgdHhpLSMxLnRleAorICAgIFxpZmVvZiAxCisgICAgICBcZXJyaGVscCA9IFxub2xhbmdoZWxwCisgICAgICBcZXJybWVzc2FnZXtDYW5ub3QgcmVhZCBsYW5ndWFnZSBmaWxlIHR4aS0jMS50ZXh9JQorICAgIFxlbHNlCisgICAgICBcaW5wdXQgdHhpLSMxLnRleAorICAgIFxmaQorICAgIFxjbG9zZWluIDEKKyAgXGVuZGdyb3VwCit9CitcbmV3aGVscFxub2xhbmdoZWxwe1RoZSBnaXZlbiBsYW5ndWFnZSBkZWZpbml0aW9uIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yCitpcyBlbXB0eS4gIE1heWJlIHlvdSBuZWVkIHRvIGluc3RhbGwgaXQ/ICBJbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKK3Nob3VsZCB3b3JrIGlmIG5vd2hlcmUgZWxzZSBkb2VzLn0KKworCislIEBkb2N1bWVudGVuY29kaW5nIHNob3VsZCBjaGFuZ2Ugc29tZXRoaW5nIGluIFRlWCBldmVudHVhbGx5LCBtb3N0CislIGxpa2VseSwgYnV0IGZvciBub3cganVzdCByZWNvZ25pemUgaXQuCitcbGV0XGRvY3VtZW50ZW5jb2RpbmcgPSBcY29tbWVudAorCisKKyUgUGFnZSBzaXplIHBhcmFtZXRlcnMuCislCitcbmV3ZGltZW5cZGVmYXVsdHBhcmluZGVudCBcZGVmYXVsdHBhcmluZGVudCA9IDE1cHQKKworXGNoYXBoZWFkaW5nc2tpcCA9IDE1cHQgcGx1cyA0cHQgbWludXMgMnB0Citcc2VjaGVhZGluZ3NraXAgPSAxMnB0IHBsdXMgM3B0IG1pbnVzIDJwdAorXHN1YnNlY2hlYWRpbmdza2lwID0gOXB0IHBsdXMgMnB0IG1pbnVzIDJwdAorCislIFByZXZlbnQgdW5kZXJmdWxsIHZib3ggZXJyb3IgbWVzc2FnZXMuCitcdmJhZG5lc3MgPSAxMDAwMAorCislIERvbid0IGJlIHNvIGZpbmlja3kgYWJvdXQgdW5kZXJmdWxsIGhib3hlcywgZWl0aGVyLgorXGhiYWRuZXNzID0gMjAwMAorCislIEZvbGxvd2luZyBHZW9yZ2UgQnVzaCwganVzdCBnZXQgcmlkIG9mIHdpZG93cyBhbmQgb3JwaGFucy4KK1x3aWRvd3BlbmFsdHk9MTAwMDAKK1xjbHVicGVuYWx0eT0xMDAwMAorCislIFVzZSBUZVggMy4wJ3MgXGVtZXJnZW5jeXN0cmV0Y2ggdG8gaGVscCBsaW5lIGJyZWFraW5nLCBidXQgaWYgd2UncmUKKyUgdXNpbmcgYW4gb2xkIHZlcnNpb24gb2YgVGVYLCBkb24ndCBkbyBhbnl0aGluZy4gIFdlIHdhbnQgdGhlIGFtb3VudCBvZgorJSBzdHJldGNoIGFkZGVkIHRvIGRlcGVuZCBvbiB0aGUgbGluZSBsZW5ndGgsIGhlbmNlIHRoZSBkZXBlbmRlbmNlIG9uCislIFxoc2l6ZS4gIFdlIGNhbGwgdGhpcyB3aGVuZXZlciB0aGUgcGFwZXIgc2l6ZSBpcyBzZXQuCislCitcZGVmXHNldGVtZXJnZW5jeXN0cmV0Y2h7JQorICBcaWZ4XGVtZXJnZW5jeXN0cmV0Y2hcdGhpc2lzdW5kZWZpbmVkCisgICAgJSBBbGxvdyB1cyB0byBhc3NpZ24gdG8gXGVtZXJnZW5jeXN0cmV0Y2ggYW55d2F5LgorICAgIFxkZWZcZW1lcmdlbmN5c3RyZXRjaHtcZGltZW4wfSUKKyAgXGVsc2UKKyAgICBcZW1lcmdlbmN5c3RyZXRjaCA9IC4xNVxoc2l6ZQorICBcZmkKK30KKworJSBQYXJhbWV0ZXJzIGluIG9yZGVyOiAxKSB0ZXh0aGVpZ2h0OyAyKSB0ZXh0d2lkdGg7CislIDMpIHZvZmZzZXQ7IDQpIGhvZmZzZXQ7IDUpIGJpbmRpbmcgb2Zmc2V0OyA2KSB0b3Bza2lwOworJSA3KSBwaHlzaWNhbCBwYWdlIGhlaWdodDsgOCkgcGh5c2ljYWwgcGFnZSB3aWR0aC4KKyUKKyUgV2UgYWxzbyBjYWxsIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ30sIHNvIHRoZSBjYWxsZXIgc2hvdWxkIGRlZmluZQorJSBcdGV4dGxlYWRpbmcuICBUaGUgY2FsbGVyIHNob3VsZCBhbHNvIHNldCBccGFyc2tpcC4KKyUKK1xkZWZcaW50ZXJuYWxwYWdlc2l6ZXMjMSMyIzMjNCM1IzYjNyM4eyUKKyAgXHZvZmZzZXQgPSAjM1xyZWxheAorICBcdG9wc2tpcCA9ICM2XHJlbGF4CisgIFxzcGxpdHRvcHNraXAgPSBcdG9wc2tpcAorICAlCisgIFx2c2l6ZSA9ICMxXHJlbGF4CisgIFxhZHZhbmNlXHZzaXplIGJ5IFx0b3Bza2lwCisgIFxvdXRlcnZzaXplID0gXHZzaXplCisgIFxhZHZhbmNlXG91dGVydnNpemUgYnkgMlx0b3BhbmRib3R0b21tYXJnaW4KKyAgXHBhZ2VoZWlnaHQgPSBcdnNpemUKKyAgJQorICBcaHNpemUgPSAjMlxyZWxheAorICBcb3V0ZXJoc2l6ZSA9IFxoc2l6ZQorICBcYWR2YW5jZVxvdXRlcmhzaXplIGJ5IDAuNWluCisgIFxwYWdld2lkdGggPSBcaHNpemUKKyAgJQorICBcbm9ybWFsb2Zmc2V0ID0gIzRccmVsYXgKKyAgXGJpbmRpbmdvZmZzZXQgPSAjNVxyZWxheAorICAlCisgIFxpZnBkZgorICAgIFxwZGZwYWdlaGVpZ2h0ICM3XHJlbGF4CisgICAgXHBkZnBhZ2V3aWR0aCAjOFxyZWxheAorICBcZmkKKyAgJQorICBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9CisgICUKKyAgXHBhcmluZGVudCA9IFxkZWZhdWx0cGFyaW5kZW50CisgIFxzZXRlbWVyZ2VuY3lzdHJldGNoCit9CisKKyUgQGxldHRlcnBhcGVyICh0aGUgZGVmYXVsdCkuCitcZGVmXGxldHRlcnBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEzLjJwdAorICAlCisgICUgSWYgcGFnZSBpcyBub3RoaW5nIGJ1dCB0ZXh0LCBtYWtlIGl0IGNvbWUgb3V0IGV2ZW4uCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s0NlxiYXNlbGluZXNraXB9ezZpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LjI1aW59JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezM2cHR9JQorICAgICAgICAgICAgICAgICAgICB7MTFpbn17OC41aW59JQorfX0KKworJSBVc2UgQHNtYWxsYm9vayB0byByZXNldCBwYXJhbWV0ZXJzIGZvciA3eDkuMjUgdHJpbSBzaXplLgorXGRlZlxzbWFsbGJvb2t7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDJwdCBwbHVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMnB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezcuNWlufXs1aW59JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ey4yNWlufSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXsxNnB0fSUKKyAgICAgICAgICAgICAgICAgICAgezkuMjVpbn17N2lufSUKKyAgJQorICBcbGlzcG5hcnJvd2luZyA9IDAuM2luCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gLjVjbQorfX0KKworJSBVc2UgQHNtYWxsZXJib29rIHRvIHJlc2V0IHBhcmFtZXRlcnMgZm9yIDZ4OSB0cmltIHNpemUuCislIChKdXN0IHRlc3RpbmcsIHBhcmFtZXRlcnMgc3RpbGwgaW4gZmx1eC4pCitcZGVmXHNtYWxsZXJib29re3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAxLjVwdCBwbHVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMnB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezcuNGlufXs0Ljhpbn0lCisgICAgICAgICAgICAgICAgICAgIHstLjJpbn17LS40aW59JQorICAgICAgICAgICAgICAgICAgICB7MHB0fXsxNHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezlpbn17NmlufSUKKyAgJQorICBcbGlzcG5hcnJvd2luZyA9IDAuMjVpbgorICBcdG9sZXJhbmNlID0gNzAwCisgIFxoZnV6eiA9IDFwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IC40Y20KK319CisKKyUgVXNlIEBhZm91cnBhcGVyIHRvIHByaW50IG9uIEV1cm9wZWFuIEE0IHBhcGVyLgorXGRlZlxhZm91cnBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEzLjJwdAorICAlCisgICUgRG91YmxlLXNpZGUgcHJpbnRpbmcgdmlhIHBvc3RzY3JpcHQgb24gTGFzZXJqZXQgNDA1MAorICAlIHByaW50cyBkb3VibGUtc2lkZWQgbmljZWx5IHdoZW4gXGJpbmRpbmdvZmZzZXQ9MTBtbSBhbmQgXGhvZmZzZXQ9LTZtbS4KKyAgJSBUbyBjaGFuZ2UgdGhlIHNldHRpbmdzIGZvciBhIGRpZmZlcmVudCBwcmludGVyIG9yIHNpdHVhdGlvbiwgYWRqdXN0CisgICUgXG5vcm1hbG9mZnNldCB1bnRpbCB0aGUgZnJvbnQtc2lkZSBhbmQgYmFjay1zaWRlIHRleHRzIGFsaWduLiAgVGhlbgorICAlIGRvIHRoZSBzYW1lIGZvciBcYmluZGluZ29mZnNldC4gIFlvdSBjYW4gc2V0IHRoZXNlIGZvciB0ZXN0aW5nIGluCisgICUgeW91ciB0ZXhpbmZvIHNvdXJjZSBmaWxlIGxpa2UgdGhpczoKKyAgJSBAdGV4CisgICUgXGdsb2JhbFxub3JtYWxvZmZzZXQgPSAtNm1tCisgICUgXGdsb2JhbFxiaW5kaW5nb2Zmc2V0ID0gMTBtbQorICAlIEBlbmQgdGV4CisgIFxpbnRlcm5hbHBhZ2VzaXplc3s1MVxiYXNlbGluZXNraXB9ezE2MG1tfQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9e1xob2Zmc2V0fSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs0NHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgICUKKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSA1bW0KK319CisKKyUgVXNlIEBhZml2ZXBhcGVyIHRvIHByaW50IG9uIEV1cm9wZWFuIEE1IHBhcGVyLgorJSBGcm9tIHJvbWlsZG9AdXJhbm8uaWNlYi51Zm9wLmJyLCAyIEp1bHkgMjAwMC4KKyUgSGUgYWxzbyByZWNvbW1lbmRzIG1ha2luZyBAZXhhbXBsZSBhbmQgQGxpc3AgYmUgc21hbGwuCitcZGVmXGFmaXZlcGFwZXJ7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDJwdCBwbHVzIDFwdCBtaW51cyAwLjFwdAorICBcdGV4dGxlYWRpbmcgPSAxMi41cHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MTYwbW19ezEyMG1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcaG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17OHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezIxMG1tfXsxNDhtbX0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjJpbgorICBcdG9sZXJhbmNlID0gODAwCisgIFxoZnV6eiA9IDEuMnB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gMm1tCisgIFx0YWJsZWluZGVudCA9IDEybW0KK319CisKKyUgQSBzcGVjaWZpYyB0ZXh0IGxheW91dCwgMjR4MTVjbSBvdmVyYWxsLCBpbnRlbmRlZCBmb3IgQTQgcGFwZXIuCitcZGVmXGFmb3VybGF0ZXh7e1xnbG9iYWxkZWZzID0gMQorICBcYWZvdXJwYXBlcgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MjM3bW19ezE1MG1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXs0LjZtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17N21tfSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgICUKKyAgJSBNdXN0IGV4cGxpY2l0bHkgcmVzZXQgdG8gMCBiZWNhdXNlIHdlIGNhbGwgXGFmb3VycGFwZXIuCisgIFxnbG9iYWxkZWZzID0gMAorfX0KKworJSBVc2UgQGFmb3Vyd2lkZSB0byBwcmludCBvbiBBNCBwYXBlciBpbiBsYW5kc2NhcGUgZm9ybWF0LgorXGRlZlxhZm91cndpZGV7e1xnbG9iYWxkZWZzID0gMQorICBcYWZvdXJwYXBlcgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MjQxbW19ezE2NW1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXstMi45NW1tfSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs3bW19JQorICAgICAgICAgICAgICAgICAgICB7Mjk3bW19ezIxMG1tfSUKKyAgXGdsb2JhbGRlZnMgPSAwCit9fQorCislIEBwYWdlc2l6ZXMgVEVYVEhFSUdIVFssVEVYVFdJRFRIXQorJSBQZXJoYXBzIHdlIHNob3VsZCBhbGxvdyBzZXR0aW5nIHRoZSBtYXJnaW5zLCBcdG9wc2tpcCwgXHBhcnNraXAsCislIGFuZC9vciBsZWFkaW5nLCBhbHNvLiBPciBwZXJoYXBzIHdlIHNob3VsZCBjb21wdXRlIHRoZW0gc29tZWhvdy4KKyUKK1xwYXJzZWFyZ2RlZlxwYWdlc2l6ZXN7XHBhZ2VzaXplc3l5eSAjMSwsXGZpbmlzaH0KK1xkZWZccGFnZXNpemVzeXl5IzEsIzIsIzNcZmluaXNoe3slCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn1caWZkaW1cd2QwID4gMHB0IFxoc2l6ZT0jMlxyZWxheCBcZmkKKyAgXGdsb2JhbGRlZnMgPSAxCisgICUKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ30lCisgICUKKyAgXGRpbWVuMCA9ICMxCisgIFxhZHZhbmNlXGRpbWVuMCBieSBcdm9mZnNldAorICAlCisgIFxkaW1lbjIgPSBcaHNpemUKKyAgXGFkdmFuY2VcZGltZW4yIGJ5IFxub3JtYWxvZmZzZXQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7IzF9e1xoc2l6ZX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XG5vcm1hbG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17NDRwdH0lCisgICAgICAgICAgICAgICAgICAgIHtcZGltZW4wfXtcZGltZW4yfSUKK319CisKKyUgU2V0IGRlZmF1bHQgdG8gbGV0dGVyLgorJQorXGxldHRlcnBhcGVyCisKKworXG1lc3NhZ2V7YW5kIHR1cm5pbmcgb24gdGV4aW5mbyBpbnB1dCBmb3JtYXQufQorCislIERlZmluZSBtYWNyb3MgdG8gb3V0cHV0IHZhcmlvdXMgY2hhcmFjdGVycyB3aXRoIGNhdGNvZGUgZm9yIG5vcm1hbCB0ZXh0LgorXGNhdGNvZGVgXCI9XG90aGVyCitcY2F0Y29kZWBcfj1cb3RoZXIKK1xjYXRjb2RlYFxePVxvdGhlcgorXGNhdGNvZGVgXF89XG90aGVyCitcY2F0Y29kZWBcfD1cb3RoZXIKK1xjYXRjb2RlYFw8PVxvdGhlcgorXGNhdGNvZGVgXD49XG90aGVyCitcY2F0Y29kZWBcKz1cb3RoZXIKK1xjYXRjb2RlYFwkPVxvdGhlcgorXGRlZlxub3JtYWxkb3VibGVxdW90ZXsifQorXGRlZlxub3JtYWx0aWxkZXt+fQorXGRlZlxub3JtYWxjYXJldHtefQorXGRlZlxub3JtYWx1bmRlcnNjb3Jle199CitcZGVmXG5vcm1hbHZlcnRpY2FsYmFye3x9CitcZGVmXG5vcm1hbGxlc3N7PH0KK1xkZWZcbm9ybWFsZ3JlYXRlcns+fQorXGRlZlxub3JtYWxwbHVzeyt9CitcZGVmXG5vcm1hbGRvbGxhcnskfSUkIGZvbnQtbG9jayBmaXgKKworJSBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gbWFrZSBhIGNoYXJhY3RlciBwcmludCBvbmUgd2F5IGluIFx0dAorJSAod2hlcmUgaXQgY2FuIHByb2JhYmx5IGJlIG91dHB1dCBhcy1pcyksIGFuZCBhbm90aGVyIHdheSBpbiBvdGhlciBmb250cywKKyUgd2hlcmUgc29tZXRoaW5nIGhhaXJpZXIgcHJvYmFibHkgbmVlZHMgdG8gYmUgZG9uZS4KKyUKKyUgIzEgaXMgd2hhdCB0byBwcmludCBpZiB3ZSBhcmUgaW5kZWVkIHVzaW5nIFx0dDsgIzIgaXMgd2hhdCB0byBwcmludAorJSBvdGhlcndpc2UuICBTaW5jZSBhbGwgdGhlIENvbXB1dGVyIE1vZGVybiB0eXBld3JpdGVyIGZvbnRzIGhhdmUgemVybworJSBpbnRlcndvcmQgc3RyZXRjaCAoYW5kIHNocmluayksIGFuZCBpdCBpcyByZWFzb25hYmxlIHRvIGV4cGVjdCBhbGwKKyUgdHlwZXdyaXRlciBmb250cyB0byBoYXZlIHRoaXMsIHdlIGNhbiBjaGVjayB0aGF0IGZvbnQgcGFyYW1ldGVyLgorJQorXGRlZlxpZnVzaW5ndHQjMSMye1xpZmRpbSBcZm9udGRpbWVuM1xmb250PTBwdCAjMVxlbHNlICMyXGZpfQorCislIFNhbWUgYXMgYWJvdmUsIGJ1dCBjaGVjayBmb3IgaXRhbGljIGZvbnQuICBBY3R1YWxseSB0aGlzIGFsc28gY2F0Y2hlcworJSBub24taXRhbGljIHNsYW50ZWQgZm9udHMgc2luY2UgaXQgaXMgaW1wb3NzaWJsZSB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20KKyUgaXRhbGljIGZvbnRzLiAgQnV0IHNpbmNlIHRoaXMgaXMgb25seSB1c2VkIGJ5ICQgYW5kIGl0IHVzZXMgXHNsIGFueXdheQorJSB0aGlzIGlzIG5vdCBhIHByb2JsZW0uCitcZGVmXGlmdXNpbmdpdCMxIzJ7XGlmZGltIFxmb250ZGltZW4xXGZvbnQ+MHB0ICMxXGVsc2UgIzJcZml9CisKKyUgVHVybiBvZmYgYWxsIHNwZWNpYWwgY2hhcmFjdGVycyBleGNlcHQgQAorJSAoYW5kIHRob3NlIHdoaWNoIHRoZSB1c2VyIGNhbiB1c2UgYXMgaWYgdGhleSB3ZXJlIG9yZGluYXJ5KS4KKyUgTW9zdCBvZiB0aGVzZSB3ZSBzaW1wbHkgcHJpbnQgZnJvbSB0aGUgXHR0IGZvbnQsIGJ1dCBmb3Igc29tZSwgd2UgY2FuCislIHVzZSBtYXRoIG9yIG90aGVyIHZhcmlhbnRzIHRoYXQgbG9vayBiZXR0ZXIgaW4gbm9ybWFsIHRleHQuCisKK1xjYXRjb2RlYFwiPVxhY3RpdmUKK1xkZWZcYWN0aXZlZG91YmxlcXVvdGV7e1x0dFxjaGFyMzR9fQorXGxldCI9XGFjdGl2ZWRvdWJsZXF1b3RlCitcY2F0Y29kZWBcfj1cYWN0aXZlCitcZGVmfnt7XHR0XGNoYXIxMjZ9fQorXGNoYXJkZWZcaGF0PWBcXgorXGNhdGNvZGVgXF49XGFjdGl2ZQorXGRlZl57e1x0dCBcaGF0fX0KKworXGNhdGNvZGVgXF89XGFjdGl2ZQorXGRlZl97XGlmdXNpbmd0dFxub3JtYWx1bmRlcnNjb3JlXF99CitcbGV0XHJlYWx1bmRlcj1fCislIFN1YnJvdXRpbmUgZm9yIHRoZSBwcmV2aW91cyBtYWNyby4KK1xkZWZcX3tcbGVhdmV2bW9kZSBca2Vybi4wN2VtIFx2Ym94e1xocnVsZSB3aWR0aC4zZW0gaGVpZ2h0LjFleH1ca2VybiAuMDdlbSB9CisKK1xjYXRjb2RlYFx8PVxhY3RpdmUKK1xkZWZ8e3tcdHRcY2hhcjEyNH19CitcY2hhcmRlZiBcbGVzcz1gXDwKK1xjYXRjb2RlYFw8PVxhY3RpdmUKK1xkZWY8e3tcdHQgXGxlc3N9fQorXGNoYXJkZWYgXGd0cj1gXD4KK1xjYXRjb2RlYFw+PVxhY3RpdmUKK1xkZWY+e3tcdHQgXGd0cn19CitcY2F0Y29kZWBcKz1cYWN0aXZlCitcZGVmK3t7XHR0IFxjaGFyIDQzfX0KK1xjYXRjb2RlYFwkPVxhY3RpdmUKK1xkZWYke1xpZnVzaW5naXR7e1xzbFwkfX1cbm9ybWFsZG9sbGFyfSUkIGZvbnQtbG9jayBmaXgKKworJSBJZiBhIC5mbXQgZmlsZSBpcyBiZWluZyB1c2VkLCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYXBwZWFyIGluIGEgZmlsZQorJSBuYW1lIGNhbm5vdCBiZSBhY3RpdmUgdW50aWwgd2UgaGF2ZSBwYXJzZWQgdGhlIGNvbW1hbmQgbGluZS4KKyUgU28gdHVybiB0aGVtIG9mZiBhZ2FpbiwgYW5kIGhhdmUgXGV2ZXJ5am9iIChvciBAc2V0ZmlsZW5hbWUpIHR1cm4gdGhlbSBvbi4KKyUgXG90aGVyaWZ5YWN0aXZlIGlzIGNhbGxlZCBuZWFyIHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorXGRlZlxvdGhlcmlmeWFjdGl2ZXtcY2F0Y29kZWArPVxvdGhlciBcY2F0Y29kZWBcXz1cb3RoZXJ9CisKK1xjYXRjb2RlYFxAPTAKKworJSBcYmFja3NsYXNoY3VyZm9udCBvdXRwdXRzIG9uZSBiYWNrc2xhc2ggY2hhcmFjdGVyIGluIGN1cnJlbnQgZm9udCwKKyUgYXMgaW4gXGNoYXJgXFwuCitcZ2xvYmFsXGNoYXJkZWZcYmFja3NsYXNoY3VyZm9udD1gXFwKK1xnbG9iYWxcbGV0XHJhd2JhY2tzbGFzaHh4PVxiYWNrc2xhc2hjdXJmb250ICAlIGxldCBleGlzdGluZyAuPz9zIGZpbGVzIHdvcmsKKworJSBccmF3YmFja3NsYXNoIGRlZmluZXMgYW4gYWN0aXZlIFwgdG8gZG8gXGJhY2tzbGFzaGN1cmZvbnQuCislIFxvdGhlcmJhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGJlIGEgbGl0ZXJhbCBgXCcgY2hhcmFjdGVyIHdpdGgKKyUgY2F0Y29kZSBvdGhlci4KK3tcY2F0Y29kZWBcXD1cYWN0aXZlCisgQGdkZWZAcmF3YmFja3NsYXNoe0BsZXRcPUBiYWNrc2xhc2hjdXJmb250fQorIEBnZGVmQG90aGVyYmFja3NsYXNoe0BsZXRcPUByZWFsYmFja3NsYXNofQorfQorCislIFxyZWFsYmFja3NsYXNoIGlzIGFuIGFjdHVhbCBjaGFyYWN0ZXIgYFwnIHdpdGggY2F0Y29kZSBvdGhlciwgYW5kCislIFxkb3VibGViYWNrc2xhc2ggaXMgdHdvIG9mIHRoZW0gKGZvciB0aGUgcGRmIG91dGxpbmVzKS4KK3tcY2F0Y29kZWBcXD1cb3RoZXIgQGdkZWZAcmVhbGJhY2tzbGFzaHtcfSBAZ2RlZkBkb3VibGViYWNrc2xhc2h7XFx9fQorCislIFxub3JtYWxiYWNrc2xhc2ggb3V0cHV0cyBvbmUgYmFja3NsYXNoIGluIGZpeGVkIHdpZHRoIGZvbnQuCitcZGVmXG5vcm1hbGJhY2tzbGFzaHt7XHR0XGJhY2tzbGFzaGN1cmZvbnR9fQorCitcY2F0Y29kZWBcXD1cYWN0aXZlCisKKyUgVXNlZCBzb21ldGltZXMgdG8gdHVybiBvZmYgKGVmZmVjdGl2ZWx5KSB0aGUgYWN0aXZlIGNoYXJhY3RlcnMKKyUgZXZlbiBhZnRlciBwYXJzaW5nIHRoZW0uCitAZGVmQHR1cm5vZmZhY3RpdmV7JQorICBAbGV0Ij1Abm9ybWFsZG91YmxlcXVvdGUKKyAgQGxldFw9QHJlYWxiYWNrc2xhc2gKKyAgQGxldH49QG5vcm1hbHRpbGRlCisgIEBsZXRePUBub3JtYWxjYXJldAorICBAbGV0Xz1Abm9ybWFsdW5kZXJzY29yZQorICBAbGV0fD1Abm9ybWFsdmVydGljYWxiYXIKKyAgQGxldDw9QG5vcm1hbGxlc3MKKyAgQGxldD49QG5vcm1hbGdyZWF0ZXIKKyAgQGxldCs9QG5vcm1hbHBsdXMKKyAgQGxldCQ9QG5vcm1hbGRvbGxhciAlJCBmb250LWxvY2sgZml4CisgIEB1bnNlcHNwYWNlcworfQorCislIFNhbWUgYXMgQHR1cm5vZmZhY3RpdmUgZXhjZXB0IG91dHB1dHMgXCBhcyB7XHR0XGNoYXJgXFx9IGluc3RlYWQgb2YKKyUgdGhlIGxpdGVyYWwgY2hhcmFjdGVyIGBcJy4gIChUaHVzLCBcIGlzIG5vdCBleHBhbmRhYmxlIHdoZW4gdGhpcyBpcyBpbgorJSBlZmZlY3QuKQorJQorQGRlZkBub3JtYWx0dXJub2ZmYWN0aXZle0B0dXJub2ZmYWN0aXZlIEBsZXRcPUBub3JtYWxiYWNrc2xhc2h9CisKKyUgTWFrZSBfIGFuZCArIFxvdGhlciBjaGFyYWN0ZXJzLCB0ZW1wb3JhcmlseS4KKyUgVGhpcyBpcyBjYW5jZWxlZCBieSBAZml4YmFja3NsYXNoLgorQG90aGVyaWZ5YWN0aXZlCisKKyUgSWYgYSAuZm10IGZpbGUgaXMgYmVpbmcgdXNlZCwgd2UgZG9uJ3Qgd2FudCB0aGUgYFxpbnB1dCB0ZXhpbmZvJyB0byBzaG93IHVwLgorJSBUaGF0IGlzIHdoYXQgXGVhdGlucHV0IGlzIGZvcjsgYWZ0ZXIgdGhhdCwgdGhlIGBcJyBzaG91bGQgcmV2ZXJ0IHRvIHByaW50aW5nCislIGEgYmFja3NsYXNoLgorJQorQGdkZWZAZWF0aW5wdXQgaW5wdXQgdGV4aW5mb3tAZml4YmFja3NsYXNofQorQGdsb2JhbEBsZXRcID0gQGVhdGlucHV0CisKKyUgT24gdGhlIG90aGVyIGhhbmQsIHBlcmhhcHMgdGhlIGZpbGUgZGlkIG5vdCBoYXZlIGEgYFxpbnB1dCB0ZXhpbmZvJy4gVGhlbgorJSB0aGUgZmlyc3QgYFx7IGluIHRoZSBmaWxlIHdvdWxkIGNhdXNlIGFuIGVycm9yLiBUaGlzIG1hY3JvIHRyaWVzIHRvIGZpeAorJSB0aGF0LCBhc3N1bWluZyBpdCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBgXCcgY291bGQgcGxhdXNpYmx5IG9jY3VyLgorJSBBbHNvIHR1cm4gYmFjayBvbiBhY3RpdmUgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGFwcGVhciBpbiB0aGUgaW5wdXQKKyUgZmlsZSBuYW1lLCBpbiBjYXNlIG5vdCB1c2luZyBhIHByZS1kdW1wZWQgZm9ybWF0LgorJQorQGdkZWZAZml4YmFja3NsYXNoeyUKKyAgQGlmeFxAZWF0aW5wdXQgQGxldFwgPSBAbm9ybWFsYmFja3NsYXNoIEBmaQorICBAY2F0Y29kZWArPUBhY3RpdmUKKyAgQGNhdGNvZGVgQF89QGFjdGl2ZQorfQorCislIFNheSBAZm9vLCBub3QgXGZvbywgaW4gZXJyb3IgbWVzc2FnZXMuCitAZXNjYXBlY2hhciA9IGBAQAorCislIFRoZXNlIGxvb2sgb2sgaW4gYWxsIGZvbnRzLCBzbyBqdXN0IG1ha2UgdGhlbSBub3Qgc3BlY2lhbC4KK0BjYXRjb2RlYEAmID0gQG90aGVyCitAY2F0Y29kZWBAIyA9IEBvdGhlcgorQGNhdGNvZGVgQCUgPSBAb3RoZXIKKworCitAYyBMb2NhbCB2YXJpYWJsZXM6CitAYyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCitAYyBwYWdlLWRlbGltaXRlcjogIl5cXFxcbWVzc2FnZSIKK0BjIHRpbWUtc3RhbXAtc3RhcnQ6ICJkZWZcXFxcdGV4aW5mb3ZlcnNpb257IgorQGMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCitAYyB0aW1lLXN0YW1wLWVuZDogIn0iCitAYyBFbmQ6CisKK0BjIHZpbTpzdz0yOgorCitAaWdub3JlCisgICBhcmNoLXRhZzogZTFiMzZlMzItYzk2ZS00MTM1LWE0MWEtMGIyZWZhMmVhMTE1CitAZW5kIGlnbm9yZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5jCmluZGV4IGUzZTIzNDQuLmZiMmU0NWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmMKQEAgLTM0LDcgKzM0LDcgQEAKIC8qIGZmaV9wcmVwX2FyZ3MgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UKICAgIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzICovCiAKLWV4dGVybiB2b2lkIFB5X0ZhdGFsRXJyb3IoY2hhciAqbXNnKTsKK2V4dGVybiB2b2lkIFB5X0ZhdGFsRXJyb3IoY29uc3QgY2hhciAqbXNnKTsKIAogLypALWV4cG9ydGhlYWRlckAqLwogdm9pZCBmZmlfcHJlcF9hcmdzKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYpCkBAIC0xNDgsMjcgKzE0OCwxMiBAQAogfQogCiAjaWZkZWYgX1dJTjMyCi0vKkAtZGVjbHVuZGVmQCovCi0vKkAtZXhwb3J0aGVhZGVyQCovCiBleHRlcm4gaW50Ci1mZmlfY2FsbF9TWVNWKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCAKLQkgICAgICAvKkBvdXRAKi8gZXh0ZW5kZWRfY2lmICosIAotCSAgICAgIHVuc2lnbmVkLCB1bnNpZ25lZCwgCi0JICAgICAgLypAb3V0QCovIHVuc2lnbmVkICosIAotCSAgICAgIHZvaWQgKCpmbikoKSk7Ci0vKkA9ZGVjbHVuZGVmQCovCi0vKkA9ZXhwb3J0aGVhZGVyQCovCi0KLS8qQC1kZWNsdW5kZWZAKi8KLS8qQC1leHBvcnRoZWFkZXJAKi8KLWV4dGVybiBpbnQKLWZmaV9jYWxsX1NURENBTEwodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksCi0JCSAvKkBvdXRAKi8gZXh0ZW5kZWRfY2lmICosCi0JCSB1bnNpZ25lZCwgdW5zaWduZWQsCi0JCSAvKkBvdXRAKi8gdW5zaWduZWQgKiwKLQkJIHZvaWQgKCpmbikoKSk7Ci0vKkA9ZGVjbHVuZGVmQCovCi0vKkA9ZXhwb3J0aGVhZGVyQCovCitmZmlfY2FsbF94ODYodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIAorCSAgICAgLypAb3V0QCovIGV4dGVuZGVkX2NpZiAqLCAKKwkgICAgIHVuc2lnbmVkLCB1bnNpZ25lZCwgCisJICAgICAvKkBvdXRAKi8gdW5zaWduZWQgKiwgCisJICAgICB2b2lkICgqZm4pKCkpOwogI2VuZGlmCiAKICNpZmRlZiBfV0lONjQKQEAgLTIwOSwxNyArMTk0LDkgQEAKICAgICB7CiAjaWYgIWRlZmluZWQoX1dJTjY0KQogICAgIGNhc2UgRkZJX1NZU1Y6Ci0gICAgICAvKkAtdXNlZGVmQCovCi0gICAgICByZXR1cm4gZmZpX2NhbGxfU1lTVihmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgCi0JCQkgICBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOwotICAgICAgLypAPXVzZWRlZkAqLwotICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIEZGSV9TVERDQUxMOgotICAgICAgLypALXVzZWRlZkAqLwotICAgICAgcmV0dXJuIGZmaV9jYWxsX1NURENBTEwoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsCi0JCQkgICAgICBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOwotICAgICAgLypAPXVzZWRlZkAqLworICAgICAgcmV0dXJuIGZmaV9jYWxsX3g4NihmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgCisJCQkgIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CiAgICAgICBicmVhazsKICNlbHNlCiAgICAgY2FzZSBGRklfU1lTVjoKQEAgLTM5NCwxNSArMzcxLDE2IEBACiBleHRlcm4gdm9pZCBmZmlfY2xvc3VyZV9PVVRFUigpOwogCiBmZmlfc3RhdHVzCi1mZmlfcHJlcF9jbG9zdXJlIChmZmlfY2xvc3VyZSogY2xvc3VyZSwKLQkJICBmZmlfY2lmKiBjaWYsCi0JCSAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSwKLQkJICB2b2lkICp1c2VyX2RhdGEpCitmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUqIGNsb3N1cmUsCisJCQkJCSAgZmZpX2NpZiogY2lmLAorCQkJCQkgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCisJCQkJCSAgdm9pZCAqdXNlcl9kYXRhLAorCQkJCQkgIHZvaWQgKmNvZGVsb2MpCiB7CiAgIHNob3J0IGJ5dGVzOwogICBjaGFyICp0cmFtcDsKICNpZmRlZiBfV0lONjQKLSAgaW50IG1hc2s7CisgIGludCBtYXNrID0gMDsKICNlbmRpZgogICBGRklfQVNTRVJUIChjaWYtPmFiaSA9PSBGRklfU1lTVik7CiAgIApAQCAtNDc1LDYgKzQ1Myw1IEBACiAgIGNsb3N1cmUtPmNpZiAgPSBjaWY7CiAgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKICAgY2xvc3VyZS0+ZnVuICA9IGZ1bjsKLQogICByZXR1cm4gRkZJX09LOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5oCmluZGV4IGE4OGQ4NzQuLmVmYjE0YzUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmgKQEAgLTIyMSwxMSArMjIxLDE1IEBACiAgIHZvaWQgICAgICAqdXNlcl9kYXRhOwogfSBmZmlfY2xvc3VyZTsKIAordm9pZCBmZmlfY2xvc3VyZV9mcmVlKHZvaWQgKik7Cit2b2lkICpmZmlfY2xvc3VyZV9hbGxvYyAoc2l6ZV90IHNpemUsIHZvaWQgKipjb2RlKTsKKwogZmZpX3N0YXR1cwotZmZpX3ByZXBfY2xvc3VyZSAoZmZpX2Nsb3N1cmUqLAorZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlKiwKIAkJICBmZmlfY2lmICosCiAJCSAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSwKLQkJICB2b2lkICp1c2VyX2RhdGEpOworCQkgIHZvaWQgKnVzZXJfZGF0YSwKKwkJICB2b2lkICpjb2RlbG9jKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBjaGFyIHRyYW1wW0ZGSV9UUkFNUE9MSU5FX1NJWkVdOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL3dpbjMyLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvd2luMzIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4MmFiOS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvd2luMzIuUworKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgd2luMzIuUyAtIENvcHlyaWdodCAoYykgMTk5NiwgMTk5OCwgMjAwMSwgMjAwMiAgUmVkIEhhdCwgSW5jLgotCSAgICAgQ29weXJpZ2h0IChjKSAyMDAxICBKb2huIEJlbml0b24KLQkgICAgIENvcHlyaWdodCAoYykgMjAwMiAgUmFuaml0IE1hdGhldwotCQkJCi0gCi0gICBYODYgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKLSAKLSAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0gICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLSAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0gICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gCi0gICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAotICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gCi0gICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCi0gICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCi0gICBJTiBOTyBFVkVOVCBTSEFMTCBDWUdOVVMgU09MVVRJT05TIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAKLSNkZWZpbmUgTElCRkZJX0FTTQotI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgotI2luY2x1ZGUgPGZmaS5oPgotIAotLnRleHQKLSAKLS5nbG9ibCBmZmlfcHJlcF9hcmdzCi0gCi0gICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCi0gICAgICAgIC5iYWxpZ24gMTYKLS5nbG9ibCBfZmZpX2NhbGxfU1lTVgotIAotX2ZmaV9jYWxsX1NZU1Y6Ci0gICAgICAgIHB1c2hsICVlYnAKLSAgICAgICAgbW92bCAgJWVzcCwlZWJwCi0KLQkjVEhlOiBzYXZlIHByZXZpb3VzICVlc2ksIGFuZCBzdG9yZSB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyIGluICVlc2kKLQlwdXNobCAlZXNpCi0JbW92bCAlZXNwLCVlc2kKLQotICAgICAgICAjIE1ha2Ugcm9vbSBmb3IgYWxsIG9mIHRoZSBuZXcgYXJncy4KLSAgICAgICAgbW92bCAgMTYoJWVicCksJWVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIHN1YmwgICVlY3gsJWVzcAotIAotICAgICAgICBtb3ZsICAlZXNwLCVlYXgKLSAKLSAgICAgICAgIyBQbGFjZSBhbGwgb2YgdGhlIGZmaV9wcmVwX2FyZ3MgaW4gcG9zaXRpb24KLSAgICAgICAgcHVzaGwgMTIoJWVicCkKLSAgICAgICAgcHVzaGwgJWVheAotICAgICAgICBjYWxsICAqOCglZWJwKQotIAotICAgICAgICAjIFJldHVybiBzdGFjayB0byBwcmV2aW91cyBzdGF0ZSBhbmQgY2FsbCB0aGUgZnVuY3Rpb24KLSAgICAgICAgYWRkbCAgJDgsJWVzcAotIAotICAgICAgICAjIEZJWE1FOiBBbGlnbiB0aGUgc3RhY2sgdG8gYSAxMjgtYml0IGJvdW5kYXJ5IHRvIGF2b2lkCi0gICAgICAgICMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGhpdHMuCi0KLQljYWxsICAqMjgoJWVicCkKLSAKLSAgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlIHdlIHB1c2hlZCBmb3IgdGhlIGFyZ3MKLSAgICAgICAgbW92bCAgMTYoJWVicCksJWVjeAotICAgICAgICBhZGRsICAlZWN4LCVlc3AKLQotCXN1YiAlZXNwLCVlc2kgIyBjYWxjdWxhdGUgc3RhY2sgcG9pbnRlciBkaWZmZXJlbmNlCi0KLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcmV0dXJuIHR5cGUgY29kZQotICAgICAgICBtb3ZsICAyMCglZWJwKSwlZWN4Ci0gCi0gICAgICAgICMgSWYgdGhlIHJldHVybiB2YWx1ZSBwb2ludGVyIGlzIE5VTEwsIGFzc3VtZSBubyByZXR1cm4gdmFsdWUuCi0gICAgICAgIGNtcGwgICQwLDI0KCVlYnApCi0gICAgICAgIGpuZSAgIHJldGludAotIAotICAgICAgICAjIEV2ZW4gaWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSByZXR1cm4gdmFsdWUsIHdlIGFyZQotICAgICAgICAjIG9ibGlnZWQgdG8gaGFuZGxlIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0ZMT0FULCVlY3gKLSAgICAgICAgam5lICAgbm9yZXR2YWwKLSAgICAgICAgZnN0cCAgJXN0KDApCi0gCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRpbnQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9JTlQsJWVjeAotICAgICAgICBqbmUgICByZXRmbG9hdAotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBtb3ZsICAlZWF4LDAoJWVjeCkKLSAgICAgICAgam1wICAgZXBpbG9ndWUKLSAKLXJldGZsb2F0OgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfRkxPQVQsJWVjeAotICAgICAgICBqbmUgICByZXRkb3VibGUgICAKLSAgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIGZzdHBzICglZWN4KQotICAgICAgICBqbXAgICBlcGlsb2d1ZQotIAotcmV0ZG91YmxlOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfRE9VQkxFLCVlY3gKLSAgICAgICAgam5lICAgcmV0bG9uZ2RvdWJsZQotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBmc3RwbCAoJWVjeCkKLSAgICAgICAgam1wICAgZXBpbG9ndWUKLSAKLXJldGxvbmdkb3VibGU6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9MT05HRE9VQkxFLCVlY3gKLSAgICAgICAgam5lICAgcmV0aW50NjQKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgZnN0cHQgKCVlY3gpCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRpbnQ2NDoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX1NJTlQ2NCwlZWN4Ci0gICAgICAgIGpuZSAgIHJldHN0cnVjdAotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBtb3ZsICAlZWF4LDAoJWVjeCkKLSAgICAgICAgbW92bCAgJWVkeCw0KCVlY3gpCi0gCi1yZXRzdHJ1Y3Q6Ci0gICAgICAgICMgTm90aGluZyB0byBkbyEKLSAKLW5vcmV0dmFsOgotZXBpbG9ndWU6Ci0JbW92bCAlZXNpLCVlYXggIyByZXR1cm4gdGhlIHN0YWNrIHBvaW50ZXIgZGV0bHRhIGluICVlYXgKLQlwb3BsICVlc2kgIyByZXN0b3JlIHByZXZpb3VzICVlc2kKLSAgICAgICAgbW92bCAlZWJwLCVlc3AKLSAgICAgICAgcG9wbCAlZWJwCi0gICAgICAgIHJldAotIAotLmZmaV9jYWxsX1NZU1ZfZW5kOgotCi0gICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCi0gICAgICAgIC5iYWxpZ24gMTYKLS5nbG9ibCBfZmZpX2NhbGxfU1REQ0FMTAotCi1fZmZpX2NhbGxfU1REQ0FMTDoKLSAgICAgICAgcHVzaGwgJWVicAotICAgICAgICBtb3ZsICAlZXNwLCVlYnAKLQotCSNUSGU6IHNhdmUgcHJldmlvdXMgJWVzaSwgYW5kIHN0b3JlIHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIgaW4gJWVzaQotCXB1c2hsICVlc2kKLQltb3ZsICVlc3AsJWVzaQotCQotICAgICAgICAjIE1ha2Ugcm9vbSBmb3IgYWxsIG9mIHRoZSBuZXcgYXJncy4KLSAgICAgICAgbW92bCAgMTYoJWVicCksJWVjeCAKLSAgICAgICAgc3VibCAgJWVjeCwlZXNwCi0KLSAgICAgICAgbW92bCAgJWVzcCwlZWF4Ci0KLSAgICAgICAgIyBQbGFjZSBhbGwgb2YgdGhlIGZmaV9wcmVwX2FyZ3MgaW4gcG9zaXRpb24KLSAgICAgICAgcHVzaGwgMTIoJWVicCkKLSAgICAgICAgcHVzaGwgJWVheAotICAgICAgICBjYWxsICAqOCglZWJwKQotCi0gICAgICAgICMgUmV0dXJuIHN0YWNrIHRvIHByZXZpb3VzIHN0YXRlIGFuZCBjYWxsIHRoZSBmdW5jdGlvbgotICAgICAgICBhZGRsICAkOCwlZXNwCi0KLSAgICAgICAgIyBGSVhNRTogQWxpZ24gdGhlIHN0YWNrIHRvIGEgMTI4LWJpdCBib3VuZGFyeSB0byBhdm9pZAotICAgICAgICAjIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBoaXRzLgotCi0gICAgICAgIGNhbGwgICoyOCglZWJwKQotCi0Jc3ViICVlc3AsJWVzaSAjIGRpZmZlcmVuY2UgaW4gc3RhY2sKLQotICAgICAgICAjIHN0ZGNhbGwgZnVuY3Rpb25zIHBvcCBhcmd1bWVudHMgb2ZmIHRoZSBzdGFjayB0aGVtc2VsdmVzCi0KLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcmV0dXJuIHR5cGUgY29kZQotICAgICAgICBtb3ZsICAyMCglZWJwKSwlZWN4Ci0KLSAgICAgICAgIyBJZiB0aGUgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaXMgTlVMTCwgYXNzdW1lIG5vIHJldHVybiB2YWx1ZS4KLSAgICAgICAgY21wbCAgJDAsMjQoJWVicCkKLSAgICAgICAgam5lICAgc2NfcmV0aW50Ci0KLSAgICAgICAgIyBFdmVuIGlmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBhcmUKLSAgICAgICAgIyBvYmxpZ2VkIHRvIGhhbmRsZSBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCi0gICAgICAgIGNtcGwgICRGRklfVFlQRV9GTE9BVCwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX25vcmV0dmFsCi0gICAgICAgIGZzdHAgICVzdCgwKQotCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGludDoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0lOVCwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX3JldGZsb2F0Ci0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIG1vdmwgICVlYXgsMCglZWN4KQotICAgICAgICBqbXAgICBzY19lcGlsb2d1ZQotCi1zY19yZXRmbG9hdDoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0ZMT0FULCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0ZG91YmxlCi0gICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBmc3RwcyAoJWVjeCkKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKLQotc2NfcmV0ZG91YmxlOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfRE9VQkxFLCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0bG9uZ2RvdWJsZQotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBmc3RwbCAoJWVjeCkKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKLQotc2NfcmV0bG9uZ2RvdWJsZToKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0xPTkdET1VCTEUsJWVjeAotICAgICAgICBqbmUgICBzY19yZXRpbnQ2NAotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBmc3RwdCAoJWVjeCkKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKLQotc2NfcmV0aW50NjQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9TSU5UNjQsJWVjeAotICAgICAgICBqbmUgICBzY19yZXRzdHJ1Y3QKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgbW92bCAgJWVheCwwKCVlY3gpCi0gICAgICAgIG1vdmwgICVlZHgsNCglZWN4KQotCi1zY19yZXRzdHJ1Y3Q6Ci0gICAgICAgICMgTm90aGluZyB0byBkbyEKLQotc2Nfbm9yZXR2YWw6Ci1zY19lcGlsb2d1ZToKLSAgICAgICAgbW92bCAlZXNpLCVlYXggIyByZXR1cm4gdGhlIHN0YWNrIGRpZmZlcmVuY2UKLQlwb3BsICVlc2kgIyByZXN0b3JlIHByZXZpb3VzICVlc2kgdmFsdWUKLSAgICAgICAgbW92bCAlZWJwLCVlc3AKLSAgICAgICAgcG9wbCAlZWJwCi0gICAgICAgIHJldAotCi0uZmZpX2NhbGxfU1REQ0FMTF9lbmQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy93aW4zMi5jCmluZGV4IDA2NzBjOGMuLmQxMTQ5YTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy93aW4zMi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy93aW4zMi5jCkBAIC0yOSwyMSArMjksMjEgQEAKIC8qIHRoZWxsZXI6IGFsbW9zdCB2ZXJiYXRpbSB0cmFuc2xhdGlvbiBmcm9tIGdhcyBzeW50YXggdG8gTVNWQyBpbmxpbmUKICAgIGFzc2VtYmxlciBjb2RlLiAqLwogCi0vKiB0aGVsbGVyOiBmZmlfY2FsbF9TWVNWIGFuZCBmZmlfY2FsbF9TVERDQUxMIG5vdyByZXR1cm4gYW4gaW50ZWdlciAtIHRoZQotICAgZGlmZmVyZW5jZSBvZiB0aGUgc3RhY2sgcG9pbnRlciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBmdW5jdGlvbiBjYWxsLiAgSWYKLSAgIGV2ZXJ5dGhpbmcgaXMgb2ssIHplcm8gaXMgcmV0dXJuZWQuICBJZiBzdGRjYWxsIGZ1bmN0aW9ucyBhcmUgcGFzc2VkIHRoZQotICAgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgdGhlIGRpZmZlcmVuY2Ugd2lsbCBiZSBub256ZXJvLiAqLworLyogdGhlbGxlcjogZmZpX2NhbGxfeDg2IG5vdyByZXR1cm5zIGFuIGludGVnZXIgLSB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgc3RhY2sKKyAgIHBvaW50ZXIgYmVmb3JlIGFuZCBhZnRlciB0aGUgZnVuY3Rpb24gY2FsbC4gIElmIGV2ZXJ5dGhpbmcgaXMgb2ssIHplcm8gaXMKKyAgIHJldHVybmVkLiAgSWYgc3RkY2FsbCBmdW5jdGlvbnMgYXJlIHBhc3NlZCB0aGUgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywKKyAgIHRoZSBkaWZmZXJlbmNlIHdpbGwgYmUgbm9uemVyby4gKi8KIAogI2luY2x1ZGUgPGZmaS5oPgogI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KIAogX19kZWNsc3BlYyhuYWtlZCkgaW50Ci1mZmlfY2FsbF9TWVNWKHZvaWQgKCogcHJlcGZ1bmMpKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCAvKiA4ICovCi0JCSBleHRlbmRlZF9jaWYgKmVjaWYsIC8qIDEyICovCi0JCSB1bnNpZ25lZCBieXRlcywgLyogMTYgKi8KLQkJIHVuc2lnbmVkIGZsYWdzLCAvKiAyMCAqLwotCQkgdW5zaWduZWQgKnJ2YWx1ZSwgLyogMjQgKi8KLQkJIHZvaWQgKCpmbikoKSkgLyogMjggKi8KK2ZmaV9jYWxsX3g4Nih2b2lkICgqIHByZXBmdW5jKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgLyogOCAqLworCSAgICAgZXh0ZW5kZWRfY2lmICplY2lmLCAvKiAxMiAqLworCSAgICAgdW5zaWduZWQgYnl0ZXMsIC8qIDE2ICovCisJICAgICB1bnNpZ25lZCBmbGFncywgLyogMjAgKi8KKwkgICAgIHVuc2lnbmVkICpydmFsdWUsIC8qIDI0ICovCisJICAgICB2b2lkICgqZm4pKCkpIC8qIDI4ICovCiB7CiAJX2FzbSB7CiAJCXB1c2ggZWJwCkBAIC02OSwxMjUgKzY5LDIwIEBACiAvLyBGSVhNRTogQWxpZ24gdGhlIHN0YWNrIHRvIGEgMTI4LWJpdCBib3VuZGFyeSB0byBhdm9pZAogLy8gcG90ZW50aWFsIHBlcmZvcm1hbmNlIGhpdHMuCiAJCWNhbGwgW2VicCArIDI4XQotLy8gUmVtb3ZlIHRoZSBzcGFjZSB3ZSBwdXNoZWQgZm9yIHRoZSBhcmdzCisKKy8vIExvYWQgZWNpZi0+Y2lmLT5hYmkKKwkJbW92IGVjeCwgW2VicCArIDEyXQorCQltb3YgZWN4LCBbZWN4XWVjaWYuY2lmCisJCW1vdiBlY3gsIFtlY3hdZWNpZi5jaWYuYWJpCisJCQorCQljbXAgZWN4LCBGRklfU1REQ0FMTAorCQlqZSBub2NsZWFuCisvLyBTVERDQUxMOiBSZW1vdmUgdGhlIHNwYWNlIHdlIHB1c2hlZCBmb3IgdGhlIGFyZ3MKIAkJbW92IGVjeCwgW2VicCArIDE2XQogCQlhZGQgZXNwLCBlY3gKLQotLy8gWFhYIEFTU0VSVCBUSEFUIEVTUCBJUyBUSEUgU0FNRSBOT1cgVEhBTiBCRUZPUkUhCi0JCXN1YiBlc2ksIGVzcAotCi0vLyBMb2FkICVlY3ggd2l0aCB0aGUgcmV0dXJuIHR5cGUgY29kZQotCQltb3YgZWN4LCBbZWJwICsgMjBdCi0KLS8vIElmIHRoZSByZXR1cm4gdmFsdWUgcG9pbnRlciBpcyBOVUxMLCBhc3N1bWUgbm8gcmV0dXJuIHZhbHVlLgotLyoKLSAgSW50ZWwgYXNtIGlzIHdlaXJkLiBXZSBoYXZlIHRvIGV4cGxpY2l0ZWx5IHNwZWNpZnkgJ0RXT1JEIFBUUicgaW4gdGhlIG5leHIgaW5zdHJ1Y3Rpb24sCi0gIG90aGVyd2lzZSBvbmx5IG9uZSBCWVRFIHdpbGwgYmUgY29tcGFyZWQgKGluc3RlYWQgb2YgYSBEV09SRCkhCi0gKi8KLQkJY21wIERXT1JEIFBUUiBbZWJwICsgMjRdLCAwCi0JCWpuZSBzY19yZXRpbnQKLQotLy8gRXZlbiBpZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIHJldHVybiB2YWx1ZSwgd2UgYXJlCi0vLyBvYmxpZ2VkIHRvIGhhbmRsZSBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCi0JCWNtcCBlY3gsIEZGSV9UWVBFX0ZMT0FUCi0JCWpuZSBzY19ub3JldHZhbAotLy8gICAgICAgIGZzdHAgICVzdCgwKQotCQlmc3RwIHN0KDApCi0KLQkJam1wIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGludDoKLQkJY21wIGVjeCwgRkZJX1RZUEVfSU5UCi0JCWpuZSBzY19yZXRmbG9hdAotLy8gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotCQltb3YgZWN4LCBbZWJwICsgMjRdCi0JCW1vdiBbZWN4ICsgMF0sIGVheAotCQlqbXAgc2NfZXBpbG9ndWUKLQotc2NfcmV0ZmxvYXQ6Ci0JCWNtcCBlY3gsIEZGSV9UWVBFX0ZMT0FUCi0JCWpuZSBzY19yZXRkb3VibGUKLS8vIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLQkJbW92IGVjeCwgW2VicCsyNF0KLS8vICAgICAgICBmc3RwcyAoJWVjeCkKLQkJZnN0cCBEV09SRCBQVFIgW2VjeF0KLQkJam1wIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGRvdWJsZToKLQkJY21wIGVjeCwgRkZJX1RZUEVfRE9VQkxFCi0JCWpuZSBzY19yZXRsb25nZG91YmxlCi0vLyAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotCQltb3YgZWN4LCBbZWJwKzI0XQotCQlmc3RwIFFXT1JEIFBUUiBbZWN4XQotCQlqbXAgc2NfZXBpbG9ndWUKLQotCQlqbXAgc2NfcmV0bG9uZ2RvdWJsZSAvLyBhdm9pZCB3YXJuaW5nIGFib3V0IHVudXNlZCBsYWJlbAotc2NfcmV0bG9uZ2RvdWJsZToKLQkJY21wIGVjeCwgRkZJX1RZUEVfTE9OR0RPVUJMRQotCQlqbmUgc2NfcmV0aW50NjQKLS8vIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLQkJbW92IGVjeCwgW2VicCsyNF0KLS8vICAgICAgICBmc3RwdCAoJWVjeCkKLQkJZnN0cCBRV09SRCBQVFIgW2VjeF0gLyogWFhYID8/PyAqLwotCQlqbXAgc2NfZXBpbG9ndWUKLQotc2NfcmV0aW50NjQ6Ci0JCWNtcCBlY3gsIEZGSV9UWVBFX1NJTlQ2NAotCQlqbmUgc2NfcmV0c3RydWN0Ci0vLyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0JCW1vdiBlY3gsIFtlYnArMjRdCi0JCW1vdiBbZWN4KzBdLCBlYXgKLQkJbW92IFtlY3grNF0sIGVkeAotCi1zY19yZXRzdHJ1Y3Q6Ci0vLyBOb3RoaW5nIHRvIGRvIQotCi1zY19ub3JldHZhbDoKLXNjX2VwaWxvZ3VlOgotCQltb3YgZWF4LCBlc2kKLQkJcG9wIGVzaSAvLyBORVcgcmVzdG9yZTogbXVzdCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzCi0JCW1vdiBlc3AsIGVicAotCQlwb3AgZWJwCi0JCXJldAotCX0KLX0KLQotX19kZWNsc3BlYyhuYWtlZCkgaW50Ci1mZmlfY2FsbF9TVERDQUxMKHZvaWQgKCogcHJlcGZ1bmMpKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCAvKiA4ICovCi0JCSBleHRlbmRlZF9jaWYgKmVjaWYsIC8qIDEyICovCi0JCSB1bnNpZ25lZCBieXRlcywgLyogMTYgKi8KLQkJIHVuc2lnbmVkIGZsYWdzLCAvKiAyMCAqLwotCQkgdW5zaWduZWQgKnJ2YWx1ZSwgLyogMjQgKi8KLQkJIHZvaWQgKCpmbikoKSkgLyogMjggKi8KLXsKLQlfYXNtIHsKLQkJcHVzaCBlYnAKLQkJbW92IGVicCwgZXNwCi0KLQkJcHVzaCBlc2kgLy8gTkVXOiB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgcHJlc2VydmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscwotCi0vLyBYWFggU0FWRSBFU1AgTk9XIQotCQltb3YgZXNpLCBlc3AKLQotLy8gTWFrZSByb29tIGZvciBhbGwgb2YgdGhlIG5ldyBhcmdzLgotCQltb3YgZWN4LCBbZWJwKzE2XQotCQlzdWIgZXNwLCBlY3gKLQkJCi0JCW1vdiBlYXgsIGVzcAotCi0vLyBQbGFjZSBhbGwgb2YgdGhlIGZmaV9wcmVwX2FyZ3MgaW4gcG9zaXRpb24KLQkJcHVzaCBbZWJwICsgMTJdIC8vIGVjaWYKLQkJcHVzaCBlYXgKLQkJY2FsbCBbZWJwICsgOF0gLy8gcHJlcGZ1bmMKLQotLy8gUmV0dXJuIHN0YWNrIHRvIHByZXZpb3VzIHN0YXRlIGFuZCBjYWxsIHRoZSBmdW5jdGlvbgotCQlhZGQgZXNwLCA4Ci0vLyBGSVhNRTogQWxpZ24gdGhlIHN0YWNrIHRvIGEgMTI4LWJpdCBib3VuZGFyeSB0byBhdm9pZAotLy8gcG90ZW50aWFsIHBlcmZvcm1hbmNlIGhpdHMuCi0JCWNhbGwgW2VicCArIDI4XQotLy8gc3RkY2FsbCBmdW5jdGlvbnMgcG9wIGFyZ3VtZW50cyBvZmYgdGhlIHN0YWNrIHRoZW1zZWx2ZXMKLQotLy8gWFhYIElTIEVTUCBOT1cgVEhFIFNBTUUgQVMgQkVGT1JFPworLy8gQ0RFQ0w6IENhbGxlciBoYXMgYWxyZWFkeSBjbGVhbmVkIHRoZSBzdGFjaworbm9jbGVhbjoKKy8vIENoZWNrIHRoYXQgZXNwIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyBiZWZvcmUhCiAJCXN1YiBlc2ksIGVzcAogCiAvLyBMb2FkICVlY3ggd2l0aCB0aGUgcmV0dXJuIHR5cGUgY29kZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvaW5jbHVkZS9mZmkuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2luY2x1ZGUvZmZpLmgKaW5kZXggM2QzOTA2NC4uYzEwNGE1YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvaW5jbHVkZS9mZmkuaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9pbmNsdWRlL2ZmaS5oCkBAIC0yNjQsNiArMjY0LDkgQEAKIAl2b2lkCQkJKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCiAJdm9pZCoJCQl1c2VyX2RhdGEpOwogCit2b2lkIGZmaV9jbG9zdXJlX2ZyZWUodm9pZCAqKTsKK3ZvaWQgKmZmaV9jbG9zdXJlX2FsbG9jIChzaXplX3Qgc2l6ZSwgdm9pZCAqKmNvZGUpOworCiB0eXBlZGVmIHN0cnVjdCBmZmlfcmF3X2Nsb3N1cmUgewogCWNoYXIJCXRyYW1wW0ZGSV9UUkFNUE9MSU5FX1NJWkVdOwogCWZmaV9jaWYqCWNpZjsKQEAgLTM0OSw0ICszNTIsNCBAQAogfQogI2VuZGlmCiAKLSNlbmRpZgkvLyAjaWZuZGVmIExJQkZGSV9IClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorI2VuZGlmCS8vICNpZm5kZWYgTElCRkZJX0gKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9tYWxsb2NfY2xvc3VyZS5jIGIvTW9kdWxlcy9fY3R5cGVzL21hbGxvY19jbG9zdXJlLmMKaW5kZXggYzUwZDUzZS4uYjk4ZDQzYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL21hbGxvY19jbG9zdXJlLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL21hbGxvY19jbG9zdXJlLmMKQEAgLTkzLDcgKzkzLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHB1dCB0aGUgaXRlbSBiYWNrIGludG8gdGhlIGZyZWUgbGlzdCAqLwotdm9pZCBGcmVlQ2xvc3VyZSh2b2lkICpwKQordm9pZCBmZmlfY2xvc3VyZV9mcmVlKHZvaWQgKnApCiB7CiAgICAgSVRFTSAqaXRlbSA9IChJVEVNICopcDsKICAgICBpdGVtLT5uZXh0ID0gZnJlZV9saXN0OwpAQCAtMTAxLDcgKzEwMSw3IEBACiB9CiAKIC8qIHJldHVybiBvbmUgaXRlbSBmcm9tIHRoZSBmcmVlIGxpc3QsIGFsbG9jYXRpbmcgbW9yZSBpZiBuZWVkZWQgKi8KLXZvaWQgKk1hbGxvY0Nsb3N1cmUodm9pZCkKK3ZvaWQgKmZmaV9jbG9zdXJlX2FsbG9jKHNpemVfdCBpZ25vcmVkLCB2b2lkKiogY29kZWxvYykKIHsKICAgICBJVEVNICppdGVtOwogICAgIGlmICghZnJlZV9saXN0KQpAQCAtMTEwLDUgKzExMCw2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGl0ZW0gPSBmcmVlX2xpc3Q7CiAgICAgZnJlZV9saXN0ID0gaXRlbS0+bmV4dDsKLSAgICByZXR1cm4gaXRlbTsKKyAgICAqY29kZWxvYyA9ICh2b2lkICopaXRlbTsKKyAgICByZXR1cm4gKHZvaWQgKilpdGVtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYyBiL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKaW5kZXggOGFlMDliZi4uNGU3ZWExMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCkBAIC0yMSw3ICsyMSw3IEBACiAgKiBQeURpY3RfU2V0SXRlbSgpIChtYV9sb29rdXAgaXMgTlVMTCkKICAqLwogc3RhdGljIGludAotU3RnRGljdF9pbml0KFN0Z0RpY3RPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK1B5Q1N0Z0RpY3RfaW5pdChTdGdEaWN0T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgaWYgKFB5RGljdF9UeXBlLnRwX2luaXQoKFB5T2JqZWN0ICopc2VsZiwgYXJncywga3dkcykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0zMiw3ICszMiw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLVN0Z0RpY3RfY2xlYXIoU3RnRGljdE9iamVjdCAqc2VsZikKK1B5Q1N0Z0RpY3RfY2xlYXIoU3RnRGljdE9iamVjdCAqc2VsZikKIHsKICAgICBQeV9DTEVBUihzZWxmLT5wcm90byk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+YXJndHlwZXMpOwpAQCAtNDMsOSArNDMsOSBAQAogfQogCiBzdGF0aWMgdm9pZAotU3RnRGljdF9kZWFsbG9jKFN0Z0RpY3RPYmplY3QgKnNlbGYpCitQeUNTdGdEaWN0X2RlYWxsb2MoU3RnRGljdE9iamVjdCAqc2VsZikKIHsKLSAgICBTdGdEaWN0X2NsZWFyKHNlbGYpOworICAgIFB5Q1N0Z0RpY3RfY2xlYXIoc2VsZik7CiAgICAgUHlNZW1fRnJlZShzZWxmLT5mb3JtYXQpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+c2hhcGUpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZmZpX3R5cGVfcG9pbnRlci5lbGVtZW50cyk7CkBAIC01MywxMiArNTMsMTIgQEAKIH0KIAogaW50Ci1TdGdEaWN0X2Nsb25lKFN0Z0RpY3RPYmplY3QgKmRzdCwgU3RnRGljdE9iamVjdCAqc3JjKQorUHlDU3RnRGljdF9jbG9uZShTdGdEaWN0T2JqZWN0ICpkc3QsIFN0Z0RpY3RPYmplY3QgKnNyYykKIHsKICAgICBjaGFyICpkLCAqczsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAKLSAgICBTdGdEaWN0X2NsZWFyKGRzdCk7CisgICAgUHlDU3RnRGljdF9jbGVhcihkc3QpOwogICAgIFB5TWVtX0ZyZWUoZHN0LT5mZmlfdHlwZV9wb2ludGVyLmVsZW1lbnRzKTsKICAgICBQeU1lbV9GcmVlKGRzdC0+Zm9ybWF0KTsKICAgICBkc3QtPmZvcm1hdCA9IE5VTEw7CkBAIC0xMDYsMTIgKzEwNiwxMiBAQAogICAgIHJldHVybiAwOwogfQogCi1QeVR5cGVPYmplY3QgU3RnRGljdF9UeXBlID0geworUHlUeXBlT2JqZWN0IFB5Q1N0Z0RpY3RfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiU3RnRGljdCIsCiAgICAgc2l6ZW9mKFN0Z0RpY3RPYmplY3QpLAogICAgIDAsCi0gICAgKGRlc3RydWN0b3IpU3RnRGljdF9kZWFsbG9jLCAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgKGRlc3RydWN0b3IpUHlDU3RnRGljdF9kZWFsbG9jLCAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgIChpbml0cHJvYylTdGdEaWN0X2luaXQsICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIChpbml0cHJvYylQeUNTdGdEaWN0X2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCkBAIC0xNTksNyArMTU5LDcgQEAKICAgICB0eXBlID0gKFB5VHlwZU9iamVjdCAqKW9iajsKICAgICBpZiAoIVB5VHlwZV9IYXNGZWF0dXJlKHR5cGUsIFB5X1RQRkxBR1NfSEFWRV9DTEFTUykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghdHlwZS0+dHBfZGljdCB8fCAhU3RnRGljdF9DaGVja0V4YWN0KHR5cGUtPnRwX2RpY3QpKQorICAgIGlmICghdHlwZS0+dHBfZGljdCB8fCAhUHlDU3RnRGljdF9DaGVja0V4YWN0KHR5cGUtPnRwX2RpY3QpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gKFN0Z0RpY3RPYmplY3QgKil0eXBlLT50cF9kaWN0OwogfQpAQCAtMTc1LDcgKzE3NSw3IEBACiAgICAgUHlUeXBlT2JqZWN0ICp0eXBlID0gc2VsZi0+b2JfdHlwZTsKICAgICBpZiAoIVB5VHlwZV9IYXNGZWF0dXJlKHR5cGUsIFB5X1RQRkxBR1NfSEFWRV9DTEFTUykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghdHlwZS0+dHBfZGljdCB8fCAhU3RnRGljdF9DaGVja0V4YWN0KHR5cGUtPnRwX2RpY3QpKQorICAgIGlmICghdHlwZS0+dHBfZGljdCB8fCAhUHlDU3RnRGljdF9DaGVja0V4YWN0KHR5cGUtPnRwX2RpY3QpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gKFN0Z0RpY3RPYmplY3QgKil0eXBlLT50cF9kaWN0OwogfQpAQCAtMjE1LDcgKzIxNSw3IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoZmllbGRsaXN0KTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBpZiAoUHlfVFlQRShmZGVzY3IpICE9ICZDRmllbGRfVHlwZSkgeworICAgICAgICBpZiAoUHlfVFlQRShmZGVzY3IpICE9ICZQeUNGaWVsZF9UeXBlKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAidW5leHBlY3RlZCB0eXBlIik7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZmRlc2NyKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihmaWVsZGxpc3QpOwpAQCAtMjMyLDEzICsyMzIsMTMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIG5ld19kZXNjciA9IChDRmllbGRPYmplY3QgKilQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKSZDRmllbGRfVHlwZSwgTlVMTCk7CisgICAgICAgIG5ld19kZXNjciA9IChDRmllbGRPYmplY3QgKilQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKSZQeUNGaWVsZF9UeXBlLCBOVUxMKTsKICAgICAgICAgaWYgKG5ld19kZXNjciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZmRlc2NyKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihmaWVsZGxpc3QpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydChQeV9UWVBFKG5ld19kZXNjcikgPT0gJkNGaWVsZF9UeXBlKTsKKyAgICAgICAgYXNzZXJ0KFB5X1RZUEUobmV3X2Rlc2NyKSA9PSAmUHlDRmllbGRfVHlwZSk7CiAgICAgICAgIG5ld19kZXNjci0+c2l6ZSA9IGZkZXNjci0+c2l6ZTsKICAgICAgICAgbmV3X2Rlc2NyLT5vZmZzZXQgPSBmZGVzY3ItPm9mZnNldCArIG9mZnNldDsKICAgICAgICAgbmV3X2Rlc2NyLT5pbmRleCA9IGZkZXNjci0+aW5kZXggKyBpbmRleDsKQEAgLTI4Niw3ICsyODYsNyBAQAogICAgICAgICAgICAgUHlfREVDUkVGKGFub25fbmFtZXMpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydChQeV9UWVBFKGRlc2NyKSA9PSAmQ0ZpZWxkX1R5cGUpOworICAgICAgICBhc3NlcnQoUHlfVFlQRShkZXNjcikgPT0gJlB5Q0ZpZWxkX1R5cGUpOwogICAgICAgICBkZXNjci0+YW5vbnltb3VzID0gMTsKIAogICAgICAgICAvKiBkZXNjciBpcyBpbiB0aGUgZmllbGQgZGVzY3JpcHRvci4gKi8KQEAgLTMwOSw3ICszMDksNyBAQAogICBhbmQgY3JlYXRlIGFuIFN0Z0RpY3RPYmplY3QuICBVc2VkIGZvciBTdHJ1Y3R1cmUgYW5kIFVuaW9uIHN1YmNsYXNzZXMuCiAqLwogaW50Ci1TdHJ1Y3RVbmlvblR5cGVfdXBkYXRlX3N0Z2RpY3QoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpmaWVsZHMsIGludCBpc1N0cnVjdCkKK1B5Q1N0cnVjdFVuaW9uVHlwZV91cGRhdGVfc3RnZGljdChQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmZpZWxkcywgaW50IGlzU3RydWN0KQogewogICAgIFN0Z0RpY3RPYmplY3QgKnN0Z2RpY3QsICpiYXNlZGljdDsKICAgICBQeV9zc2l6ZV90IGxlbiwgb2Zmc2V0LCBzaXplLCBhbGlnbiwgaTsKQEAgLTQxOCwxMiArNDE4LDEyIEBACiAKICAgICBhc3NlcnQoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpOwogICAgIGlmIChpc1N0cnVjdCAmJiAhaXNQYWNrZWQpIHsKLSAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCAiVHsiKTsKKyAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJUeyIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIFBFUDMxMTggZG9lc24ndCBzdXBwb3J0IHVuaW9uLCBvciBwYWNrZWQgc3RydWN0dXJlcyAod2VsbCwKICAgICAgICAgICAgb25seSBzdGFuZGFyZCBwYWNraW5nLCBidXQgd2UgZG9udCBzdXBwb3J0IHRoZSBwZXAgZm9yCiAgICAgICAgICAgIHRoYXQpLiBVc2UgJ0InIGZvciBieXRlcy4gKi8KLSAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCAiQiIpOworICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIkIiKTsKICAgICB9CiAKICNkZWZpbmUgcmVhbGRpY3QgKChQeU9iamVjdCAqKSZzdGdkaWN0LT5kaWN0KQpAQCAtNDY4LDkgKzQ2OCw5IEBACiAgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgogICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CiAgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKLSAgICAgICAgICAgICAgICBpZiAoZGljdC0+Z2V0ZnVuYyAhPSBnZXRlbnRyeSgiYyIpLT5nZXRmdW5jCisgICAgICAgICAgICAgICAgaWYgKGRpY3QtPmdldGZ1bmMgIT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJjIiktPmdldGZ1bmMKICNpZmRlZiBDVFlQRVNfVU5JQ09ERQotICAgICAgICAgICAgICAgICAgICAmJiBkaWN0LT5nZXRmdW5jICE9IGdldGVudHJ5KCJ1IiktPmdldGZ1bmMKKyAgICAgICAgICAgICAgICAgICAgJiYgZGljdC0+Z2V0ZnVuYyAhPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoInUiKS0+Z2V0ZnVuYwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MDAsNyArNTAwLDcgQEAKICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJXM6JXM6IiwgZmllbGRmbXQsIGZpZWxkbmFtZSk7CiAKICAgICAgICAgICAgIHB0ciA9IHN0Z2RpY3QtPmZvcm1hdDsKLSAgICAgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IGFsbG9jX2Zvcm1hdF9zdHJpbmcoc3RnZGljdC0+Zm9ybWF0LCBidWYpOworICAgICAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKHN0Z2RpY3QtPmZvcm1hdCwgYnVmKTsKICAgICAgICAgICAgIFB5TWVtX0ZyZWUocHRyKTsKIAogICAgICAgICAgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKSB7CkBAIC01MDksNyArNTA5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoaXNTdHJ1Y3QpIHsKLSAgICAgICAgICAgIHByb3AgPSBDRmllbGRfRnJvbURlc2MoZGVzYywgaSwKKyAgICAgICAgICAgIHByb3AgPSBQeUNGaWVsZF9Gcm9tRGVzYyhkZXNjLCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmllbGRfc2l6ZSwgYml0c2l6ZSwgJmJpdG9mcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpemUsICZvZmZzZXQsICZhbGlnbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFjaywgYmlnX2VuZGlhbik7CkBAIC01MTcsNyArNTE3LDcgQEAKICAgICAgICAgICAgIHNpemUgPSAwOwogICAgICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgICAgICAgIGFsaWduID0gMDsKLSAgICAgICAgICAgIHByb3AgPSBDRmllbGRfRnJvbURlc2MoZGVzYywgaSwKKyAgICAgICAgICAgIHByb3AgPSBQeUNGaWVsZF9Gcm9tRGVzYyhkZXNjLCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmllbGRfc2l6ZSwgYml0c2l6ZSwgJmJpdG9mcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpemUsICZvZmZzZXQsICZhbGlnbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFjaywgYmlnX2VuZGlhbik7CkBAIC01NDEsNyArNTQxLDcgQEAKIAogICAgIGlmIChpc1N0cnVjdCAmJiAhaXNQYWNrZWQpIHsKICAgICAgICAgY2hhciAqcHRyID0gc3RnZGljdC0+Zm9ybWF0OwotICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBhbGxvY19mb3JtYXRfc3RyaW5nKHN0Z2RpY3QtPmZvcm1hdCwgIn0iKTsKKyAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKHN0Z2RpY3QtPmZvcm1hdCwgIn0iKTsKICAgICAgICAgUHlNZW1fRnJlZShwdHIpOwogICAgICAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCmluZGV4IGZiODMzYmMuLjVmMjZjN2YgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCkBAIC0zMSw4ICszMSw2IEBACiAgKiAgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotLyogQ1ZTOiAkSWQkICovCi0KIC8qCiAKICAgQSBudW1iZXIgb2YgU3lzViBvciBuY3Vyc2VzIGZ1bmN0aW9ucyBkb24ndCBoYXZlIHdyYXBwZXJzIHlldDsgaWYgeW91CkBAIC0xNzQsNyArMTcyLDcgQEAKIC8qCiAgKiBDaGVjayB0aGUgcmV0dXJuIGNvZGUgZnJvbSBhIGN1cnNlcyBmdW5jdGlvbiBhbmQgcmV0dXJuIE5vbmUKICAqIG9yIHJhaXNlIGFuIGV4Y2VwdGlvbiBhcyBhcHByb3ByaWF0ZS4gIFRoZXNlIGFyZSBleHBvcnRlZCB1c2luZyB0aGUKLSAqIENPYmplY3QgQVBJLgorICogY2Fwc3VsZSBBUEkuCiAgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIwNyw3ICsyMDUsNyBAQAogICAgIHJldHVybiAxOwogfQogCi0vKiBGdW5jdGlvbiB2ZXJzaW9ucyBvZiB0aGUgMyBmdW5jdGlvbnMgZm9yIHRlc3RlZCB3aGV0aGVyIGN1cnNlcyBoYXMgYmVlbgorLyogRnVuY3Rpb24gdmVyc2lvbnMgb2YgdGhlIDMgZnVuY3Rpb25zIGZvciB0ZXN0aW5nIHdoZXRoZXIgY3Vyc2VzIGhhcyBiZWVuCiAgICBpbml0aWFsaXNlZCBvciBub3QuICovCiAKIHN0YXRpYyBpbnQgZnVuY19QeUN1cnNlc1NldHVwVGVybUNhbGxlZCh2b2lkKQpAQCAtMjQ0LDQzICsyNDIsNTAgQEAKICAgIFBBUlNFU1RSIC0gZm9ybWF0IHN0cmluZyBmb3IgYXJndW1lbnQgcGFyc2luZwogKi8KIAotI2RlZmluZSBXaW5kb3dfTm9BcmdOb1JldHVybkZ1bmN0aW9uKFgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBQeU9iamVjdCAqUHlDdXJzZXNXaW5kb3dfICMjIFggKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgXAorI2RlZmluZSBXaW5kb3dfTm9BcmdOb1JldHVybkZ1bmN0aW9uKFgpICAgICAgICAgICAgICAgICBcCisgICAgc3RhdGljIFB5T2JqZWN0ICpQeUN1cnNlc1dpbmRvd18gIyMgWCAgICAgICAgICAgICAgIFwKKyAgICAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSAgICAgICAgXAogICAgIHsgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoWChzZWxmLT53aW4pLCAjIFgpOyB9CiAKICNkZWZpbmUgV2luZG93X05vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oWCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYpIFwKKyAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKFggKHNlbGYtPndpbikgPT0gRkFMU0UpIHsgUHlfSU5DUkVGKFB5X0ZhbHNlKTsgcmV0dXJuIFB5X0ZhbHNlOyB9IFwKICAgICAgICAgZWxzZSB7IFB5X0lOQ1JFRihQeV9UcnVlKTsgcmV0dXJuIFB5X1RydWU7IH0gfQogCi0jZGVmaW5lIFdpbmRvd19Ob0FyZ05vUmV0dXJuVm9pZEZ1bmN0aW9uKFgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmKSBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFdpbmRvd19Ob0FyZ05vUmV0dXJuVm9pZEZ1bmN0aW9uKFgpICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBYKHNlbGYtPndpbik7IFB5X0lOQ1JFRihQeV9Ob25lKTsgcmV0dXJuIFB5X05vbmU7IH0KIAogI2RlZmluZSBXaW5kb3dfTm9BcmcyVHVwbGVSZXR1cm5GdW5jdGlvbihYLCBUWVBFLCBFUkdTVFIpICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZikgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBUWVBFIGFyZzEsIGFyZzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBYKHNlbGYtPndpbixhcmcxLGFyZzIpOyByZXR1cm4gUHlfQnVpbGRWYWx1ZShFUkdTVFIsIGFyZzEsIGFyZzIpOyB9CiAKICNkZWZpbmUgV2luZG93X09uZUFyZ05vUmV0dXJuVm9pZEZ1bmN0aW9uKFgsIFRZUEUsIFBBUlNFU1RSKSAgICAgICAgICAgIFwKLSAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSBcCisgICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFRZUEUgYXJnMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBQQVJTRVNUUiwgJmFyZzEpKSByZXR1cm4gTlVMTDsgICAgICBcCiAgICAgICAgIFgoc2VsZi0+d2luLGFyZzEpOyBQeV9JTkNSRUYoUHlfTm9uZSk7IHJldHVybiBQeV9Ob25lOyB9CiAKICNkZWZpbmUgV2luZG93X09uZUFyZ05vUmV0dXJuRnVuY3Rpb24oWCwgVFlQRSwgUEFSU0VTVFIpICAgICAgICAgICAgICAgIFwKLSAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSBcCisgICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFRZUEUgYXJnMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLFBBUlNFU1RSLCAmYXJnMSkpIHJldHVybiBOVUxMOyAgICAgICBcCiAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKFgoc2VsZi0+d2luLCBhcmcxKSwgIyBYKTsgfQogCiAjZGVmaW5lIFdpbmRvd19Ud29BcmdOb1JldHVybkZ1bmN0aW9uKFgsIFRZUEUsIFBBUlNFU1RSKSAgICAgICAgICAgICAgICBcCi0gICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBUWVBFIGFyZzEsIGFyZzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncyxQQVJTRVNUUiwgJmFyZzEsICZhcmcyKSkgcmV0dXJuIE5VTEw7IFwKQEAgLTEyMjgsMTAgKzEyMzMsMTEgQEAKICAgICBpbnQgcnRuOwogCiAjaWZuZGVmIFdJTkRPV19IQVNfRkxBR1MKLSAgICBpZiAoMCkgeworICAgIGlmICgwKQogI2Vsc2UKLSAgICAgICAgaWYgKHNlbGYtPndpbi0+X2ZsYWdzICYgX0lTUEFEKSB7CisgICAgICAgIGlmIChzZWxmLT53aW4tPl9mbGFncyAmIF9JU1BBRCkKICNlbmRpZgorICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7CiAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCkBAIC0xMjYxLDE2MjQgKzEyNjcsMTYyNiBAQAogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgIndub3V0cmVmcmVzaCIpOwogICAgICAgICB9Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19PdmVybGF5KFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeUN1cnNlc1dpbmRvd09iamVjdCAqdGVtcDsKKyAgICBpbnQgdXNlX2NvcHl3aW4gPSBGQUxTRTsKKyAgICBpbnQgc21pbnJvdywgc21pbmNvbCwgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbDsKKyAgICBpbnQgcnRuOworCisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyE7d2luZG93IG9iamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlDdXJzZXNXaW5kb3dfVHlwZSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNzoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIWlpaWlpaTt3aW5kb3cgb2JqZWN0LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUN1cnNlc1dpbmRvd19UeXBlLCAmdGVtcCwgJnNtaW5yb3csICZzbWluY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRtaW5yb3csICZkbWluY29sLCAmZG1heHJvdywgJmRtYXhjb2wpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHVzZV9jb3B5d2luID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJvdmVybGF5IHJlcXVpcmVzIG9uZSBvciBzZXZlbiBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgUHlDdXJzZXNXaW5kb3dfT3ZlcmxheShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgewotICAgICAgICBQeUN1cnNlc1dpbmRvd09iamVjdCAqdGVtcDsKLSAgICAgICAgaW50IHVzZV9jb3B5d2luID0gRkFMU0U7Ci0gICAgICAgIGludCBzbWlucm93LCBzbWluY29sLCBkbWlucm93LCBkbWluY29sLCBkbWF4cm93LCBkbWF4Y29sOwotICAgICAgICBpbnQgcnRuOworICAgIGlmICh1c2VfY29weXdpbiA9PSBUUlVFKSB7CisgICAgICAgIHJ0biA9IGNvcHl3aW4oc2VsZi0+d2luLCB0ZW1wLT53aW4sIHNtaW5yb3csIHNtaW5jb2wsCisgICAgICAgICAgICAgICAgICAgICAgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbCwgVFJVRSk7CisgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgImNvcHl3aW4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJ0biA9IG92ZXJsYXkoc2VsZi0+d2luLCB0ZW1wLT53aW4pOworICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJvdmVybGF5Iik7CisgICAgfQorfQogCi0gICAgICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyE7d2luZG93IG9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q3Vyc2VzV2luZG93X1R5cGUsICZ0ZW1wKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8haWlpaWlpO3dpbmRvdyBvYmplY3QsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUN1cnNlc1dpbmRvd19UeXBlLCAmdGVtcCwgJnNtaW5yb3csICZzbWluY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkbWlucm93LCAmZG1pbmNvbCwgJmRtYXhyb3csICZkbWF4Y29sKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIHVzZV9jb3B5d2luID0gVFJVRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3ZlcmxheSByZXF1aXJlcyBvbmUgb3Igc2V2ZW4gYXJndW1lbnRzIik7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfT3ZlcndyaXRlKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeUN1cnNlc1dpbmRvd09iamVjdCAqdGVtcDsKKyAgICBpbnQgdXNlX2NvcHl3aW4gPSBGQUxTRTsKKyAgICBpbnQgc21pbnJvdywgc21pbmNvbCwgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbDsKKyAgICBpbnQgcnRuOworCisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyE7d2luZG93IG9iamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlDdXJzZXNXaW5kb3dfVHlwZSwgJnRlbXApKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXNlX2NvcHl3aW4gPT0gVFJVRSkgewotICAgICAgICAgICAgcnRuID0gY29weXdpbihzZWxmLT53aW4sIHRlbXAtPndpbiwgc21pbnJvdywgc21pbmNvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbCwgVFJVRSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJjb3B5d2luIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBydG4gPSBvdmVybGF5KHNlbGYtPndpbiwgdGVtcC0+d2luKTsKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgIm92ZXJsYXkiKTsKLSAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDc6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyFpaWlpaWk7d2luZG93IG9iamVjdCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlDdXJzZXNXaW5kb3dfVHlwZSwgJnRlbXAsICZzbWlucm93LCAmc21pbmNvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkbWlucm93LCAmZG1pbmNvbCwgJmRtYXhyb3csICZkbWF4Y29sKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB1c2VfY29weXdpbiA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAib3ZlcndyaXRlIHJlcXVpcmVzIG9uZSBvciBzZXZlbiBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgUHlDdXJzZXNXaW5kb3dfT3ZlcndyaXRlKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICB7Ci0gICAgICAgIFB5Q3Vyc2VzV2luZG93T2JqZWN0ICp0ZW1wOwotICAgICAgICBpbnQgdXNlX2NvcHl3aW4gPSBGQUxTRTsKLSAgICAgICAgaW50IHNtaW5yb3csIHNtaW5jb2wsIGRtaW5yb3csIGRtaW5jb2wsIGRtYXhyb3csIGRtYXhjb2w7Ci0gICAgICAgIGludCBydG47Ci0KLSAgICAgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPITt3aW5kb3cgb2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlDdXJzZXNXaW5kb3dfVHlwZSwgJnRlbXApKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyFpaWlpaWk7d2luZG93IG9iamVjdCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q3Vyc2VzV2luZG93X1R5cGUsICZ0ZW1wLCAmc21pbnJvdywgJnNtaW5jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRtaW5yb3csICZkbWluY29sLCAmZG1heHJvdywgJmRtYXhjb2wpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgdXNlX2NvcHl3aW4gPSBUUlVFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdmVyd3JpdGUgcmVxdWlyZXMgb25lIG9yIHNldmVuIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXNlX2NvcHl3aW4gPT0gVFJVRSkgewotICAgICAgICAgICAgcnRuID0gY29weXdpbihzZWxmLT53aW4sIHRlbXAtPndpbiwgc21pbnJvdywgc21pbmNvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbCwgRkFMU0UpOwotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocnRuLCAiY29weXdpbiIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcnRuID0gb3ZlcndyaXRlKHNlbGYtPndpbiwgdGVtcC0+d2luKTsKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgIm92ZXJ3cml0ZSIpOwotICAgICAgICB9CisgICAgaWYgKHVzZV9jb3B5d2luID09IFRSVUUpIHsKKyAgICAgICAgcnRuID0gY29weXdpbihzZWxmLT53aW4sIHRlbXAtPndpbiwgc21pbnJvdywgc21pbmNvbCwKKyAgICAgICAgICAgICAgICAgICAgICBkbWlucm93LCBkbWluY29sLCBkbWF4cm93LCBkbWF4Y29sLCBGQUxTRSk7CisgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgImNvcHl3aW4iKTsKICAgICB9Ci0KLSAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICBQeUN1cnNlc1dpbmRvd19QdXRXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgIHsKLSAgICAgICAgUHlPYmplY3QgKnRlbXA7Ci0KLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPO2ZpbGVvYmoiLCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKCFQeUZpbGVfQ2hlY2sodGVtcCkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudCBtdXN0IGJlIGEgZmlsZSBvYmplY3QiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHB1dHdpbihzZWxmLT53aW4sIFB5RmlsZV9Bc0ZpbGUodGVtcCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHV0d2luIik7CisgICAgZWxzZSB7CisgICAgICAgIHJ0biA9IG92ZXJ3cml0ZShzZWxmLT53aW4sIHRlbXAtPndpbik7CisgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgIm92ZXJ3cml0ZSIpOwogICAgIH0KK30KIAotICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgIFB5Q3Vyc2VzV2luZG93X1JlZHJhd0xpbmUoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgIHsKLSAgICAgICAgaW50IGJlZywgbnVtOwotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpO2JlZyxudW0iLCAmYmVnLCAmbnVtKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih3cmVkcmF3bG4oc2VsZi0+d2luLGJlZyxudW0pLCAicmVkcmF3bG4iKTsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19QdXRXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICp0ZW1wOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPO2ZpbGVvYmoiLCAmdGVtcCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlGaWxlX0NoZWNrKHRlbXApKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudCBtdXN0IGJlIGEgZmlsZSBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHB1dHdpbihzZWxmLT53aW4sIFB5RmlsZV9Bc0ZpbGUodGVtcCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXR3aW4iKTsKK30KIAotICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgIFB5Q3Vyc2VzV2luZG93X1JlZnJlc2goUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgIHsKLSAgICAgICAgaW50IHBtaW5yb3cscG1pbmNvbCxzbWlucm93LHNtaW5jb2wsc21heHJvdyxzbWF4Y29sOwotICAgICAgICBpbnQgcnRuOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzV2luZG93X1JlZHJhd0xpbmUoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBiZWcsIG51bTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpO2JlZyxudW0iLCAmYmVnLCAmbnVtKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIod3JlZHJhd2xuKHNlbGYtPndpbixiZWcsbnVtKSwgInJlZHJhd2xuIik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19SZWZyZXNoKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgcG1pbnJvdyxwbWluY29sLHNtaW5yb3csc21pbmNvbCxzbWF4cm93LHNtYXhjb2w7CisgICAgaW50IHJ0bjsKIAogI2lmbmRlZiBXSU5ET1dfSEFTX0ZMQUdTCi0gICAgICAgIGlmICgwKSB7CisgICAgaWYgKDApCiAjZWxzZQotICAgICAgICAgICAgaWYgKHNlbGYtPndpbi0+X2ZsYWdzICYgX0lTUEFEKSB7CisgICAgICAgIGlmIChzZWxmLT53aW4tPl9mbGFncyAmIF9JU1BBRCkKICNlbmRpZgotICAgICAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlpaWlpaTsiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbWlucm93LHBtaW5jb2wsc21pbnJvdyxzbWluY29sLHNtYXhyb3csc21heGNvbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG1pbnJvdywgJnBtaW5jb2wsICZzbWlucm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNtaW5jb2wsICZzbWF4cm93LCAmc21heGNvbCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWlpaWlpOyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG1pbnJvdyxwbWluY29sLHNtaW5yb3csc21pbmNvbCxzbWF4cm93LHNtYXhjb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG1pbnJvdywgJnBtaW5jb2wsICZzbWlucm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc21pbmNvbCwgJnNtYXhyb3csICZzbWF4Y29sKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgICAgICAgICBydG4gPSBwcmVmcmVzaChzZWxmLT53aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtaW5yb3csIHBtaW5jb2wsIHNtaW5yb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtaW5jb2wsIHNtYXhyb3csIHNtYXhjb2wpOwotICAgICAgICAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJwcmVmcmVzaCIpOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZnJlc2goKSBmb3IgYSBwYWQgcmVxdWlyZXMgNiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjpyZWZyZXNoIikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgICAgICBydG4gPSB3cmVmcmVzaChzZWxmLT53aW4pOworICAgICAgICAgICAgICAgIHJ0biA9IHByZWZyZXNoKHNlbGYtPndpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbWlucm93LCBwbWluY29sLCBzbWlucm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtaW5jb2wsIHNtYXhyb3csIHNtYXhjb2wpOwogICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocnRuLCAicHJlZnJlc2giKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc1dpbmRvd19TZXRTY3JvbGxSZWdpb24oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCwgeTsKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTt0b3AsIGJvdHRvbSIsJnksJngpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIod3NldHNjcnJlZyhzZWxmLT53aW4seSx4KSwgIndzZXRzY3JyZWciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc1dpbmRvd19TdWJXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBXSU5ET1cgKndpbjsKLSAgICAgICAgICAgIGludCBubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94OwotCi0gICAgICAgICAgICBubGluZXMgPSAwOwotICAgICAgICAgICAgbmNvbHMgID0gMDsKLSAgICAgICAgICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO2JlZ2luX3ksYmVnaW5feCIsJmJlZ2luX3ksJmJlZ2luX3gpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpaWk7bmxpbmVzLG5jb2xzLGJlZ2luX3ksYmVnaW5feCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZubGluZXMsJm5jb2xzLCZiZWdpbl95LCZiZWdpbl94KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJzdWJ3aW4gcmVxdWlyZXMgMiBvciA0IGFyZ3VtZW50cyIpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmcmVzaCgpIGZvciBhIHBhZCByZXF1aXJlcyA2IGFyZ3VtZW50cyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6cmVmcmVzaCIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgcnRuID0gd3JlZnJlc2goc2VsZi0+d2luKTsKKyAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJwcmVmcmVzaCIpOworICAgICAgICB9Cit9CiAKLSAgICAgICAgICAgIC8qIHByaW50ZigiU3Vid2luOiAlaSAlaSAlaSAlaSAgIFxuIiwgbmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCk7ICovCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfU2V0U2Nyb2xsUmVnaW9uKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgeCwgeTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7dG9wLCBib3R0b20iLCZ5LCZ4KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIod3NldHNjcnJlZyhzZWxmLT53aW4seSx4KSwgIndzZXRzY3JyZWciKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzV2luZG93X1N1YldpbihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgV0lORE9XICp3aW47CisgICAgaW50IG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3g7CisKKyAgICBubGluZXMgPSAwOworICAgIG5jb2xzICA9IDA7CisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDI6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTtiZWdpbl95LGJlZ2luX3giLCZiZWdpbl95LCZiZWdpbl94KSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlpaTtubGluZXMsbmNvbHMsYmVnaW5feSxiZWdpbl94IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZubGluZXMsJm5jb2xzLCZiZWdpbl95LCZiZWdpbl94KSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic3Vid2luIHJlcXVpcmVzIDIgb3IgNCBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogcHJpbnRmKCJTdWJ3aW46ICVpICVpICVpICVpICAgXG4iLCBubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KTsgKi8KICNpZmRlZiBXSU5ET1dfSEFTX0ZMQUdTCi0gICAgICAgICAgICBpZiAoc2VsZi0+d2luLT5fZmxhZ3MgJiBfSVNQQUQpCi0gICAgICAgICAgICAgICAgd2luID0gc3VicGFkKHNlbGYtPndpbiwgbmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgaWYgKHNlbGYtPndpbi0+X2ZsYWdzICYgX0lTUEFEKQorICAgICAgICB3aW4gPSBzdWJwYWQoc2VsZi0+d2luLCBubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KTsKKyAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgICAgICB3aW4gPSBzdWJ3aW4oc2VsZi0+d2luLCBubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KTsKKyAgICAgICAgd2luID0gc3Vid2luKHNlbGYtPndpbiwgbmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCk7CiAKLSAgICAgICAgICAgIGlmICh3aW4gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICBpZiAod2luID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilQeUN1cnNlc1dpbmRvd19OZXcod2luKTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19TY3JvbGwoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBubGluZXM7CisgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMDoKKyAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoc2Nyb2xsKHNlbGYtPndpbiksICJzY3JvbGwiKTsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTtubGluZXMiLCAmbmxpbmVzKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih3c2NybChzZWxmLT53aW4sIG5saW5lcyksICJzY3JvbGwiKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic2Nyb2xsIHJlcXVpcmVzIDAgb3IgMSBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfVG91Y2hMaW5lKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgc3QsIGNudCwgdmFsOworICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAyOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7c3RhcnQsY291bnQiLCZzdCwmY250KSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih0b3VjaGxpbmUoc2VsZi0+d2luLHN0LGNudCksICJ0b3VjaGxpbmUiKTsKKyAgICBjYXNlIDM6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlpO3N0YXJ0LGNvdW50LHZhbCIsICZzdCwgJmNudCwgJnZhbCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIod3RvdWNobG4oc2VsZi0+d2luLCBzdCwgY250LCB2YWwpLCAidG91Y2hsaW5lIik7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInRvdWNobGluZSByZXF1aXJlcyAyIG9yIDMgYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzV2luZG93X1ZsaW5lKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqdGVtcDsKKyAgICBjaHR5cGUgY2g7CisgICAgaW50IG4sIHgsIHksIGNvZGUgPSBPSzsKKyAgICBhdHRyX3QgYXR0ciA9IEFfTk9STUFMOworICAgIGxvbmcgbGF0dHI7CisKKyAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMjoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaTtjaCBvciBpbnQsbiIsICZ0ZW1wLCAmbikpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9pbDtjaCBvciBpbnQsbixhdHRyIiwgJnRlbXAsICZuLCAmbGF0dHIpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGF0dHIgPSBsYXR0cjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpT2k7eSx4LGNoIG9yIGludCxuIiwgJnksICZ4LCAmdGVtcCwgJm4pKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNvZGUgPSB3bW92ZShzZWxmLT53aW4sIHksIHgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDU6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPaWw7IHkseCxjaCBvciBpbnQsbixhdHRyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5LCAmeCwgJnRlbXAsICZuLCAmbGF0dHIpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGF0dHIgPSBsYXR0cjsKKyAgICAgICAgY29kZSA9IHdtb3ZlKHNlbGYtPndpbiwgeSwgeCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ2bGluZSByZXF1aXJlcyAyIHRvIDUgYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChjb2RlICE9IEVSUikgeworICAgICAgICBpZiAoIVB5Q3Vyc2VzX0NvbnZlcnRUb0NodHlwZSh0ZW1wLCAmY2gpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAxIG9yIDMgbXVzdCBiZSBhIGNoIG9yIGFuIGludCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIod3ZsaW5lKHNlbGYtPndpbiwgY2ggfCBhdHRyLCBuKSwgInZsaW5lIik7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGNvZGUsICJ3bW92ZSIpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc1dpbmRvd19TY3JvbGwoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbmxpbmVzOwotICAgICAgICAgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHNjcm9sbChzZWxmLT53aW4pLCAic2Nyb2xsIik7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpO25saW5lcyIsICZubGluZXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih3c2NybChzZWxmLT53aW4sIG5saW5lcyksICJzY3JvbGwiKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInNjcm9sbCByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNXaW5kb3dfVG91Y2hMaW5lKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHN0LCBjbnQsIHZhbDsKLSAgICAgICAgICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO3N0YXJ0LGNvdW50Iiwmc3QsJmNudCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHRvdWNobGluZShzZWxmLT53aW4sc3QsY250KSwgInRvdWNobGluZSIpOwotICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlpO3N0YXJ0LGNvdW50LHZhbCIsICZzdCwgJmNudCwgJnZhbCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHd0b3VjaGxuKHNlbGYtPndpbiwgc3QsIGNudCwgdmFsKSwgInRvdWNobGluZSIpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAidG91Y2hsaW5lIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc1dpbmRvd19WbGluZShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp0ZW1wOwotICAgICAgICAgICAgY2h0eXBlIGNoOwotICAgICAgICAgICAgaW50IG4sIHgsIHksIGNvZGUgPSBPSzsKLSAgICAgICAgICAgIGF0dHJfdCBhdHRyID0gQV9OT1JNQUw7Ci0gICAgICAgICAgICBsb25nIGxhdHRyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2k7Y2ggb3IgaW50LG4iLCAmdGVtcCwgJm4pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9pbDtjaCBvciBpbnQsbixhdHRyIiwgJnRlbXAsICZuLCAmbGF0dHIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBhdHRyID0gbGF0dHI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU9pO3kseCxjaCBvciBpbnQsbiIsICZ5LCAmeCwgJnRlbXAsICZuKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgY29kZSA9IHdtb3ZlKHNlbGYtPndpbiwgeSwgeCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU9pbDsgeSx4LGNoIG9yIGludCxuLGF0dHIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeSwgJngsICZ0ZW1wLCAmbiwgJmxhdHRyKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYXR0ciA9IGxhdHRyOwotICAgICAgICAgICAgICAgIGNvZGUgPSB3bW92ZShzZWxmLT53aW4sIHksIHgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAidmxpbmUgcmVxdWlyZXMgMiB0byA1IGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29kZSAhPSBFUlIpIHsKLSAgICAgICAgICAgICAgICBpZiAoIVB5Q3Vyc2VzX0NvbnZlcnRUb0NodHlwZSh0ZW1wLCAmY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgMSBvciAzIG11c3QgYmUgYSBjaCBvciBhbiBpbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHd2bGluZShzZWxmLT53aW4sIGNoIHwgYXR0ciwgbiksICJ2bGluZSIpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoY29kZSwgIndtb3ZlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgUHlNZXRob2REZWYgUHlDdXJzZXNXaW5kb3dfTWV0aG9kc1tdID0gewotICAgICAgICAgICAgeyJhZGRjaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkQ2gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImFkZG5zdHIiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGROU3RyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJhZGRzdHIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkU3RyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJhdHRyb2ZmIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0ck9mZiwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiYXR0cm9uIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0F0dHJPbiwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiYXR0cnNldCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0F0dHJTZXQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImJrZ2QiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ca2dkLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJjaGdhdCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQ2hnQXQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImJrZ2RzZXQiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ca2dkU2V0LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJib3JkZXIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQm9yZGVyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJib3giLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQm94LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJjbGVhciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2NsZWFyLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImNsZWFyb2siLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19jbGVhcm9rLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJjbHJ0b2JvdCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2NscnRvYm90LCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImNscnRvZW9sIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193Y2xydG9lb2wsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiY3Vyc3luY3VwIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3djdXJzeW5jdXAsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZGVsY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0RlbENoLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJkZWxldGVsbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2RlbGV0ZWxuLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImRlcndpbiIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19EZXJXaW4sIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImVjaG9jaGFyIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19FY2hvQ2hhciwgTUVUSF9WQVJBUkdTfSwKK3N0YXRpYyBQeU1ldGhvZERlZiBQeUN1cnNlc1dpbmRvd19NZXRob2RzW10gPSB7CisgICAgeyJhZGRjaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkQ2gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJhZGRuc3RyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkTlN0ciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImFkZHN0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGRTdHIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJhdHRyb2ZmIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0ck9mZiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImF0dHJvbiIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BdHRyT24sIE1FVEhfVkFSQVJHU30sCisgICAgeyJhdHRyc2V0IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0clNldCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImJrZ2QiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ca2dkLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiY2hnYXQiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0NoZ0F0LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiYmtnZHNldCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0JrZ2RTZXQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJib3JkZXIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQm9yZGVyLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiYm94IiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0JveCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImNsZWFyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193Y2xlYXIsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImNsZWFyb2siLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19jbGVhcm9rLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiY2xydG9ib3QiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3djbHJ0b2JvdCwgTUVUSF9OT0FSR1N9LAorICAgIHsiY2xydG9lb2wiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3djbHJ0b2VvbCwgTUVUSF9OT0FSR1N9LAorICAgIHsiY3Vyc3luY3VwIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3djdXJzeW5jdXAsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImRlbGNoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19EZWxDaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImRlbGV0ZWxuIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193ZGVsZXRlbG4sIE1FVEhfTk9BUkdTfSwKKyAgICB7ImRlcndpbiIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19EZXJXaW4sIE1FVEhfVkFSQVJHU30sCisgICAgeyJlY2hvY2hhciIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfRWNob0NoYXIsIE1FVEhfVkFSQVJHU30sCiAjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCi0gICAgICAgICAgICB7ImVuY2xvc2UiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19FbmNsb3NlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZW5jbG9zZSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0VuY2xvc2UsIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKLSAgICAgICAgICAgIHsiZXJhc2UiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dlcmFzZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJnZXRiZWd5eCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfZ2V0YmVneXgsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZ2V0YmtnZCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0dldEJrZ2QsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZ2V0Y2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0dldENoLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJnZXRrZXkiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfR2V0S2V5LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJnZXRtYXh5eCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfZ2V0bWF4eXgsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZ2V0cGFyeXgiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2dldHBhcnl4LCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImdldHN0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19HZXRTdHIsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImdldHl4IiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19nZXR5eCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJobGluZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSGxpbmUsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImlkY29rIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19pZGNvaywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaWRsb2siLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2lkbG9rLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbW1lZG9rIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfaW1tZWRvaywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW5jaCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0luQ2gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Imluc2NoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19JbnNDaCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW5zZGVsbG4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dpbnNkZWxsbiwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW5zZXJ0bG4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dpbnNlcnRsbiwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJpbnNuc3RyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSW5zTlN0ciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW5zc3RyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0luc1N0ciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW5zdHIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0luU3RyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpc19saW5ldG91Y2hlZCIsICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSXNfTGluZVRvdWNoZWQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImlzX3dpbnRvdWNoZWQiLCAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19pc193aW50b3VjaGVkLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImtleXBhZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19rZXlwYWQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImxlYXZlb2siLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19sZWF2ZW9rLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJtb3ZlIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd21vdmUsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im12ZGVyd2luIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19tdmRlcndpbiwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibXZ3aW4iLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X212d2luLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJub2RlbGF5IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbm9kZWxheSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibm90aW1lb3V0IiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X25vdGltZW91dCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibm91dHJlZnJlc2giLCAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X05vT3V0UmVmcmVzaCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYWxpYXMgLS0gcmVtb3ZlIGluIFB5dGhvbiAyLjMgKi8KLSAgICAgICAgICAgIHsibm9vdXRyZWZyZXNoIiwgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X05vT3V0UmVmcmVzaCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsib3ZlcmxheSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X092ZXJsYXksIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im92ZXJ3cml0ZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19PdmVyd3JpdGUsCi0gICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsicHV0d2luIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1B1dFdpbiwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsicmVkcmF3bG4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1JlZHJhd0xpbmUsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InJlZHJhd3dpbiIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19yZWRyYXd3aW4sIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsicmVmcmVzaCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1JlZnJlc2gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJlcmFzZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2VyYXNlLCBNRVRIX05PQVJHU30sCisgICAgeyJnZXRiZWd5eCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfZ2V0YmVneXgsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImdldGJrZ2QiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19HZXRCa2dkLCBNRVRIX05PQVJHU30sCisgICAgeyJnZXRjaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfR2V0Q2gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRrZXkiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfR2V0S2V5LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0bWF4eXgiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2dldG1heHl4LCBNRVRIX05PQVJHU30sCisgICAgeyJnZXRwYXJ5eCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfZ2V0cGFyeXgsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImdldHN0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19HZXRTdHIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXR5eCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfZ2V0eXgsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImhsaW5lIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19IbGluZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImlkY29rIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19pZGNvaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImlkbG9rIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19pZGxvaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImltbWVkb2siLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19pbW1lZG9rLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5jaCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0luQ2gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpbnNjaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSW5zQ2gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpbnNkZWxsbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2luc2RlbGxuLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5zZXJ0bG4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dpbnNlcnRsbiwgTUVUSF9OT0FSR1N9LAorICAgIHsiaW5zbnN0ciIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0luc05TdHIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpbnNzdHIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSW5zU3RyLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5zdHIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0luU3RyLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaXNfbGluZXRvdWNoZWQiLCAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0lzX0xpbmVUb3VjaGVkLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaXNfd2ludG91Y2hlZCIsICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2lzX3dpbnRvdWNoZWQsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImtleXBhZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19rZXlwYWQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJsZWF2ZW9rIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbGVhdmVvaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im1vdmUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193bW92ZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im12ZGVyd2luIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19tdmRlcndpbiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im12d2luIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19tdndpbiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im5vZGVsYXkiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19ub2RlbGF5LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibm90aW1lb3V0IiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X25vdGltZW91dCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im5vdXRyZWZyZXNoIiwgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ob091dFJlZnJlc2gsIE1FVEhfVkFSQVJHU30sCisgICAgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbGlhcyAtLSByZW1vdmUgaW4gUHl0aG9uIDIuMyAqLworICAgIHsibm9vdXRyZWZyZXNoIiwgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X05vT3V0UmVmcmVzaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im92ZXJsYXkiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19PdmVybGF5LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsib3ZlcndyaXRlIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X092ZXJ3cml0ZSwKKyAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7InB1dHdpbiIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19QdXRXaW4sIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZWRyYXdsbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfUmVkcmF3TGluZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlZHJhd3dpbiIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19yZWRyYXd3aW4sIE1FVEhfTk9BUkdTfSwKKyAgICB7InJlZnJlc2giLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19SZWZyZXNoLCBNRVRIX1ZBUkFSR1N9LAogI2lmbmRlZiBTVFJJQ1RfU1lTVl9DVVJTRVMKLSAgICAgICAgICAgIHsicmVzaXplIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dyZXNpemUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZXNpemUiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3Jlc2l6ZSwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgotICAgICAgICAgICAgeyJzY3JvbGwiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfU2Nyb2xsLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJzY3JvbGxvayIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfc2Nyb2xsb2ssIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InNldHNjcnJlZyIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19TZXRTY3JvbGxSZWdpb24sIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InN0YW5kZW5kIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193c3RhbmRlbmQsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsic3RhbmRvdXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dzdGFuZG91dCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJzdWJwYWQiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfU3ViV2luLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJzdWJ3aW4iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfU3ViV2luLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJzeW5jZG93biIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3N5bmNkb3duLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InN5bmNvayIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19zeW5jb2ssIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InN5bmN1cCIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193c3luY3VwLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InRpbWVvdXQiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193dGltZW91dCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidG91Y2hsaW5lIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1RvdWNoTGluZSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidG91Y2h3aW4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3RvdWNod2luLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InVudG91Y2h3aW4iLCAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd191bnRvdWNod2luLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InZsaW5lIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19WbGluZSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KLSAgICAgICAgfTsKKyAgICB7InNjcm9sbCIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19TY3JvbGwsIE1FVEhfVkFSQVJHU30sCisgICAgeyJzY3JvbGxvayIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfc2Nyb2xsb2ssIE1FVEhfVkFSQVJHU30sCisgICAgeyJzZXRzY3JyZWciLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfU2V0U2Nyb2xsUmVnaW9uLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsic3RhbmRlbmQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dzdGFuZGVuZCwgTUVUSF9OT0FSR1N9LAorICAgIHsic3RhbmRvdXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dzdGFuZG91dCwgTUVUSF9OT0FSR1N9LAorICAgIHsic3VicGFkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1N1YldpbiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InN1YndpbiIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19TdWJXaW4sIE1FVEhfVkFSQVJHU30sCisgICAgeyJzeW5jZG93biIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3N5bmNkb3duLCBNRVRIX05PQVJHU30sCisgICAgeyJzeW5jb2siLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfc3luY29rLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsic3luY3VwIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dzeW5jdXAsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRpbWVvdXQiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193dGltZW91dCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRvdWNobGluZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ub3VjaExpbmUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0b3VjaHdpbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfdG91Y2h3aW4sIE1FVEhfTk9BUkdTfSwKKyAgICB7InVudG91Y2h3aW4iLCAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd191bnRvdWNod2luLCBNRVRIX05PQVJHU30sCisgICAgeyJ2bGluZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfVmxpbmUsIE1FVEhfVkFSQVJHU30sCisgICAge05VTEwsICAgICAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLworfTsKIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNXaW5kb3dfR2V0QXR0cihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgY2hhciAqbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFB5X0ZpbmRNZXRob2QoUHlDdXJzZXNXaW5kb3dfTWV0aG9kcywgKFB5T2JqZWN0ICopc2VsZiwgbmFtZSk7Ci0gICAgICAgIH0KK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19HZXRBdHRyKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBjaGFyICpuYW1lKQoreworICAgIHJldHVybiBQeV9GaW5kTWV0aG9kKFB5Q3Vyc2VzV2luZG93X01ldGhvZHMsIChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotICAgICAgICBQeVR5cGVPYmplY3QgUHlDdXJzZXNXaW5kb3dfVHlwZSA9IHsKLSAgICAgICAgICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICAgICAgICAgIl9jdXJzZXMuY3Vyc2VzIHdpbmRvdyIsICAgICAgICAgICAgLyp0cF9uYW1lKi8KLSAgICAgICAgICAgIHNpemVvZihQeUN1cnNlc1dpbmRvd09iamVjdCksICAgICAgIC8qdHBfYmFzaWNzaXplKi8KLSAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KLSAgICAgICAgICAgIC8qIG1ldGhvZHMgKi8KLSAgICAgICAgICAgIChkZXN0cnVjdG9yKVB5Q3Vyc2VzV2luZG93X0RlYWxsb2MsIC8qdHBfZGVhbGxvYyovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCi0gICAgICAgICAgICAoZ2V0YXR0cmZ1bmMpUHlDdXJzZXNXaW5kb3dfR2V0QXR0ciwgLyp0cF9nZXRhdHRyKi8KLSAgICAgICAgICAgIChzZXRhdHRyZnVuYykwLCAvKnRwX3NldGF0dHIqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KLSAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KLSAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2gqLwotICAgICAgICB9OworUHlUeXBlT2JqZWN0IFB5Q3Vyc2VzV2luZG93X1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIl9jdXJzZXMuY3Vyc2VzIHdpbmRvdyIsICAgICAgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoUHlDdXJzZXNXaW5kb3dPYmplY3QpLCAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIC8qIG1ldGhvZHMgKi8KKyAgICAoZGVzdHJ1Y3RvcilQeUN1cnNlc1dpbmRvd19EZWFsbG9jLCAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAoZ2V0YXR0cmZ1bmMpUHlDdXJzZXNXaW5kb3dfR2V0QXR0ciwgLyp0cF9nZXRhdHRyKi8KKyAgICAoc2V0YXR0cmZ1bmMpMCwgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoKi8KK307CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICBHbG9iYWwgRnVuY3Rpb25zCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihiZWVwKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKGRlZl9wcm9nX21vZGUpCi0gICAgICAgICAgICBOb0FyZ05vUmV0dXJuRnVuY3Rpb24oZGVmX3NoZWxsX21vZGUpCi0gICAgICAgICAgICBOb0FyZ05vUmV0dXJuRnVuY3Rpb24oZG91cGRhdGUpCi0gICAgICAgICAgICBOb0FyZ05vUmV0dXJuRnVuY3Rpb24oZW5kd2luKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKGZsYXNoKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKG5vY2JyZWFrKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKG5vZWNobykKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihub25sKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKG5vcmF3KQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKHJlc2V0X3Byb2dfbW9kZSkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihyZXNldF9zaGVsbF9tb2RlKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKHJlc2V0dHkpCi0gICAgICAgICAgICBOb0FyZ05vUmV0dXJuRnVuY3Rpb24oc2F2ZXR0eSkKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihiZWVwKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKGRlZl9wcm9nX21vZGUpCitOb0FyZ05vUmV0dXJuRnVuY3Rpb24oZGVmX3NoZWxsX21vZGUpCitOb0FyZ05vUmV0dXJuRnVuY3Rpb24oZG91cGRhdGUpCitOb0FyZ05vUmV0dXJuRnVuY3Rpb24oZW5kd2luKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKGZsYXNoKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKG5vY2JyZWFrKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKG5vZWNobykKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihub25sKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKG5vcmF3KQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKHJlc2V0X3Byb2dfbW9kZSkKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihyZXNldF9zaGVsbF9tb2RlKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKHJlc2V0dHkpCitOb0FyZ05vUmV0dXJuRnVuY3Rpb24oc2F2ZXR0eSkKIAotICAgICAgICAgICAgTm9BcmdPckZsYWdOb1JldHVybkZ1bmN0aW9uKGNicmVhaykKLSAgICAgICAgICAgIE5vQXJnT3JGbGFnTm9SZXR1cm5GdW5jdGlvbihlY2hvKQotICAgICAgICAgICAgTm9BcmdPckZsYWdOb1JldHVybkZ1bmN0aW9uKG5sKQotICAgICAgICAgICAgTm9BcmdPckZsYWdOb1JldHVybkZ1bmN0aW9uKHJhdykKK05vQXJnT3JGbGFnTm9SZXR1cm5GdW5jdGlvbihjYnJlYWspCitOb0FyZ09yRmxhZ05vUmV0dXJuRnVuY3Rpb24oZWNobykKK05vQXJnT3JGbGFnTm9SZXR1cm5GdW5jdGlvbihubCkKK05vQXJnT3JGbGFnTm9SZXR1cm5GdW5jdGlvbihyYXcpCiAKLSAgICAgICAgICAgIE5vQXJnUmV0dXJuSW50RnVuY3Rpb24oYmF1ZHJhdGUpCi0gICAgICAgICAgICBOb0FyZ1JldHVybkludEZ1bmN0aW9uKHRlcm1hdHRycykKK05vQXJnUmV0dXJuSW50RnVuY3Rpb24oYmF1ZHJhdGUpCitOb0FyZ1JldHVybkludEZ1bmN0aW9uKHRlcm1hdHRycykKIAotICAgICAgICAgICAgTm9BcmdSZXR1cm5TdHJpbmdGdW5jdGlvbih0ZXJtbmFtZSkKLSAgICAgICAgICAgIE5vQXJnUmV0dXJuU3RyaW5nRnVuY3Rpb24obG9uZ25hbWUpCitOb0FyZ1JldHVyblN0cmluZ0Z1bmN0aW9uKHRlcm1uYW1lKQorTm9BcmdSZXR1cm5TdHJpbmdGdW5jdGlvbihsb25nbmFtZSkKIAotICAgICAgICAgICAgTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihjYW5fY2hhbmdlX2NvbG9yKQotICAgICAgICAgICAgTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihoYXNfY29sb3JzKQotICAgICAgICAgICAgTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihoYXNfaWMpCi0gICAgICAgICAgICBOb0FyZ1RydWVGYWxzZUZ1bmN0aW9uKGhhc19pbCkKLSAgICAgICAgICAgIE5vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oaXNlbmR3aW4pCi0gICAgICAgICAgICBOb0FyZ05vUmV0dXJuVm9pZEZ1bmN0aW9uKGZsdXNoaW5wKQotICAgICAgICAgICAgTm9BcmdOb1JldHVyblZvaWRGdW5jdGlvbihub3FpZmx1c2gpCitOb0FyZ1RydWVGYWxzZUZ1bmN0aW9uKGNhbl9jaGFuZ2VfY29sb3IpCitOb0FyZ1RydWVGYWxzZUZ1bmN0aW9uKGhhc19jb2xvcnMpCitOb0FyZ1RydWVGYWxzZUZ1bmN0aW9uKGhhc19pYykKK05vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oaGFzX2lsKQorTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihpc2VuZHdpbikKK05vQXJnTm9SZXR1cm5Wb2lkRnVuY3Rpb24oZmx1c2hpbnApCitOb0FyZ05vUmV0dXJuVm9pZEZ1bmN0aW9uKG5vcWlmbHVzaCkKIAotICAgICAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX2ZpbHRlcihQeU9iamVjdCAqc2VsZikKLSAgICAgICAgewotICAgICAgICAgICAgLyogbm90IGNoZWNraW5nIGZvciBQeUN1cnNlc0luaXRpYWxpc2VkIGhlcmUgc2luY2UgZmlsdGVyKCkgbXVzdAotICAgICAgICAgICAgICAgYmUgY2FsbGVkIGJlZm9yZSBpbml0c2NyKCkgKi8KLSAgICAgICAgICAgIGZpbHRlcigpOwotICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgIH0KK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19maWx0ZXIoUHlPYmplY3QgKnNlbGYpCit7CisgICAgLyogbm90IGNoZWNraW5nIGZvciBQeUN1cnNlc0luaXRpYWxpc2VkIGhlcmUgc2luY2UgZmlsdGVyKCkgbXVzdAorICAgICAgIGJlIGNhbGxlZCBiZWZvcmUgaW5pdHNjcigpICovCisgICAgZmlsdGVyKCk7CisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19Db2xvcl9Db250ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgc2hvcnQgY29sb3IscixnLGI7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfQ29sb3JfQ29udGVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgc2hvcnQgY29sb3IscixnLGI7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKLSAgICAgICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3IKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcjsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaDpjb2xvcl9jb250ZW50IiwgJmNvbG9yKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJoOmNvbG9yX2NvbnRlbnQiLCAmY29sb3IpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgaWYgKGNvbG9yX2NvbnRlbnQoY29sb3IsICZyLCAmZywgJmIpICE9IEVSUikKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpaSkiLCByLCBnLCBiKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgMSB3YXMgb3V0IG9mIHJhbmdlLiBDaGVjayB2YWx1ZSBvZiBDT0xPUlMuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoY29sb3JfY29udGVudChjb2xvciwgJnIsICZnLCAmYikgIT0gRVJSKQorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpaSkiLCByLCBnLCBiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgMSB3YXMgb3V0IG9mIHJhbmdlLiBDaGVjayB2YWx1ZSBvZiBDT0xPUlMuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfY29sb3JfcGFpcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBuOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX2NvbG9yX3BhaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBuOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6Y29sb3JfcGFpciIsICZuKSkgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIChuIDw8IDgpKTsKLSAgICAgICAgfQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpjb2xvcl9wYWlyIiwgJm4pKSByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIChuIDw8IDgpKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfQ3Vyc19TZXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgdmlzLGVyZzsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19DdXJzX1NldChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IHZpcyxlcmc7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmN1cnNfc2V0IiwgJnZpcykpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpjdXJzX3NldCIsICZ2aXMpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgZXJnID0gY3Vyc19zZXQodmlzKTsKLSAgICAgICAgICAgIGlmIChlcmcgPT0gRVJSKSByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihlcmcsICJjdXJzX3NldCIpOworICAgIGVyZyA9IGN1cnNfc2V0KHZpcyk7CisgICAgaWYgKGVyZyA9PSBFUlIpIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGVyZywgImN1cnNfc2V0Iik7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgZXJnKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgZXJnKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfRGVsYXlfT3V0cHV0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG1zOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0RlbGF5X091dHB1dChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IG1zOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpkZWxheV9vdXRwdXQiLCAmbXMpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6ZGVsYXlfb3V0cHV0IiwgJm1zKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGRlbGF5X291dHB1dChtcyksICJkZWxheV9vdXRwdXQiKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGRlbGF5X291dHB1dChtcyksICJkZWxheV9vdXRwdXQiKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfRXJhc2VDaGFyKFB5T2JqZWN0ICpzZWxmKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGNoOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0VyYXNlQ2hhcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBjaGFyIGNoOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGNoID0gZXJhc2VjaGFyKCk7CisgICAgY2ggPSBlcmFzZWNoYXIoKTsKIAotICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCZjaCwgMSk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoJmNoLCAxKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfZ2V0c3l4KFB5T2JqZWN0ICpzZWxmKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCx5Oworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX2dldHN5eChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHkgPSAwOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGdldHN5eCh5LCB4KTsKKyAgICBnZXRzeXgoeSwgeCk7CiAKLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgeSwgeCk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIHksIHgpOworfQogCiAjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19HZXRNb3VzZShQeU9iamVjdCAqc2VsZikKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHJ0bjsKLSAgICAgICAgICAgIE1FVkVOVCBldmVudDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19HZXRNb3VzZShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgcnRuOworICAgIE1FVkVOVCBldmVudDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBydG4gPSBnZXRtb3VzZSggJmV2ZW50ICk7Ci0gICAgICAgICAgICBpZiAocnRuID09IEVSUikgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAiZ2V0bW91c2UoKSByZXR1cm5lZCBFUlIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaGlpaWwpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaG9ydClldmVudC5pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LngsIGV2ZW50LnksIGV2ZW50LnosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgZXZlbnQuYnN0YXRlKTsKLSAgICAgICAgfQorICAgIHJ0biA9IGdldG1vdXNlKCAmZXZlbnQgKTsKKyAgICBpZiAocnRuID09IEVSUikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgImdldG1vdXNlKCkgcmV0dXJuZWQgRVJSIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGhpaWlsKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHNob3J0KWV2ZW50LmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LngsIGV2ZW50LnksIGV2ZW50LnosCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGV2ZW50LmJzdGF0ZSk7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1VuZ2V0TW91c2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBNRVZFTlQgZXZlbnQ7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfVW5nZXRNb3VzZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgTUVWRU5UIGV2ZW50OwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJoaWlpbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudC5pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50LngsICZldmVudC55LCAmZXZlbnQueiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCAqKSAmZXZlbnQuYnN0YXRlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImhpaWlsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50LmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnQueCwgJmV2ZW50LnksICZldmVudC56LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ICopICZldmVudC5ic3RhdGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIodW5nZXRtb3VzZSgmZXZlbnQpLCAidW5nZXRtb3VzZSIpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIodW5nZXRtb3VzZSgmZXZlbnQpLCAidW5nZXRtb3VzZSIpOworfQogI2VuZGlmCiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0dldFdpbihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKnRlbXApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdJTkRPVyAqd2luOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0dldFdpbihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKnRlbXApCit7CisgICAgV0lORE9XICp3aW47CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUZpbGVfQ2hlY2sodGVtcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50IG11c3QgYmUgYSBmaWxlIG9iamVjdCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgaWYgKCFQeUZpbGVfQ2hlY2sodGVtcCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50IG11c3QgYmUgYSBmaWxlIG9iamVjdCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHdpbiA9IGdldHdpbihQeUZpbGVfQXNGaWxlKHRlbXApKTsKKyAgICB3aW4gPSBnZXR3aW4oUHlGaWxlX0FzRmlsZSh0ZW1wKSk7CiAKLSAgICAgICAgICAgIGlmICh3aW4gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICBpZiAod2luID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc1dpbmRvd19OZXcod2luKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeUN1cnNlc1dpbmRvd19OZXcod2luKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfSGFsZkRlbGF5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0ZW50aHM7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfSGFsZkRlbGF5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHRlbnRoczsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImI6aGFsZmRlbGF5IiwgJnRlbnRocykpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiYjpoYWxmZGVsYXkiLCAmdGVudGhzKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGhhbGZkZWxheSh0ZW50aHMpLCAiaGFsZmRlbGF5Iik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihoYWxmZGVsYXkodGVudGhzKSwgImhhbGZkZWxheSIpOworfQogCiAjaWZuZGVmIFNUUklDVF9TWVNWX0NVUlNFUwotICAgICAgICAvKiBObyBoYXNfa2V5ISAqLwotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc19oYXNfa2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNoOworLyogTm8gaGFzX2tleSEgKi8KK3N0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzX2hhc19rZXkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBjaDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaSIsJmNoKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImkiLCZjaCkpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZiAoaGFzX2tleShjaCkgPT0gRkFMU0UpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9GYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9UcnVlOwotICAgICAgICB9CisgICAgaWYgKGhhc19rZXkoY2gpID09IEZBTFNFKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9GYWxzZSk7CisgICAgICAgIHJldHVybiBQeV9GYWxzZTsKKyAgICB9CisgICAgUHlfSU5DUkVGKFB5X1RydWUpOworICAgIHJldHVybiBQeV9UcnVlOworfQogI2VuZGlmIC8qIFNUUklDVF9TWVNWX0NVUlNFUyAqLwogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19Jbml0X0NvbG9yKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgc2hvcnQgY29sb3IsIHIsIGcsIGI7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfSW5pdF9Db2xvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgc2hvcnQgY29sb3IsIHIsIGcsIGI7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKLSAgICAgICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3IKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcjsKIAotICAgICAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaGhoaDtjb2xvcixyLGcsYiIsICZjb2xvciwgJnIsICZnLCAmYikpIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiaW5pdF9jb2xvciByZXF1aXJlcyA0IGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgNDoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJoaGhoO2NvbG9yLHIsZyxiIiwgJmNvbG9yLCAmciwgJmcsICZiKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJpbml0X2NvbG9yIHJlcXVpcmVzIDQgYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoaW5pdF9jb2xvcihjb2xvciwgciwgZywgYiksICJpbml0X2NvbG9yIik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihpbml0X2NvbG9yKGNvbG9yLCByLCBnLCBiKSwgImluaXRfY29sb3IiKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfSW5pdF9QYWlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgc2hvcnQgcGFpciwgZiwgYjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19Jbml0X1BhaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHNob3J0IHBhaXIsIGYsIGI7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKLSAgICAgICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3IKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcjsKIAotICAgICAgICAgICAgICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykgIT0gMykgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiaW5pdF9wYWlyIHJlcXVpcmVzIDMgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICBpZiAoUHlUdXBsZV9TaXplKGFyZ3MpICE9IDMpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImluaXRfcGFpciByZXF1aXJlcyAzIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaGhoO3BhaXIsIGYsIGIiLCAmcGFpciwgJmYsICZiKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJoaGg7cGFpciwgZiwgYiIsICZwYWlyLCAmZiwgJmIpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoaW5pdF9wYWlyKHBhaXIsIGYsIGIpLCAiaW5pdF9wYWlyIik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihpbml0X3BhaXIocGFpciwgZiwgYiksICJpbml0X3BhaXIiKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKk1vZERpY3Q7CitzdGF0aWMgUHlPYmplY3QgKk1vZERpY3Q7CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0luaXRTY3IoUHlPYmplY3QgKnNlbGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdJTkRPVyAqd2luOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0luaXRTY3IoUHlPYmplY3QgKnNlbGYpCit7CisgICAgV0lORE9XICp3aW47CiAKLSAgICAgICAgICAgIGlmIChpbml0aWFsaXNlZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgd3JlZnJlc2goc3Rkc2NyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlDdXJzZXNXaW5kb3dfTmV3KHN0ZHNjcik7Ci0gICAgICAgICAgICB9CisgICAgaWYgKGluaXRpYWxpc2VkID09IFRSVUUpIHsKKyAgICAgICAgd3JlZnJlc2goc3Rkc2NyKTsKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyhzdGRzY3IpOworICAgIH0KIAotICAgICAgICAgICAgd2luID0gaW5pdHNjcigpOworICAgIHdpbiA9IGluaXRzY3IoKTsKIAotICAgICAgICAgICAgaWYgKHdpbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIGlmICh3aW4gPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgaW5pdGlhbGlzZWQgPSBpbml0aWFsaXNlZF9zZXR1cHRlcm0gPSBUUlVFOworICAgIGluaXRpYWxpc2VkID0gaW5pdGlhbGlzZWRfc2V0dXB0ZXJtID0gVFJVRTsKIAogLyogVGhpcyB3YXMgbW92ZWQgZnJvbSBpbml0Y3Vyc2VzKCkgYmVjYXVzZSBpdCBjb3JlIGR1bXBlZCBvbiBTR0ksCiAgICB3aGVyZSB0aGV5J3JlIG5vdCBkZWZpbmVkIHVudGlsIHlvdSd2ZSBjYWxsZWQgaW5pdHNjcigpICovCiAjZGVmaW5lIFNldERpY3RJbnQoc3RyaW5nLGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm8gPSBQeUludF9Gcm9tTG9uZygobG9uZykgKGNoKSk7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKG8gJiYgUHlEaWN0X1NldEl0ZW1TdHJpbmcoTW9kRGljdCwgc3RyaW5nLCBvKSA9PSAwKSAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9IHdoaWxlICgwKQorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqbyA9IFB5SW50X0Zyb21Mb25nKChsb25nKSAoY2gpKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAobyAmJiBQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCBzdHJpbmcsIG8pID09IDApICAgICB7ICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKLSAgICAgICAgICAgIC8qIEhlcmUgYXJlIHNvbWUgZ3JhcGhpYyBzeW1ib2xzIHlvdSBjYW4gdXNlICovCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfVUxDT1JORVIiLCAgICAgIChBQ1NfVUxDT1JORVIpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19MTENPUk5FUiIsICAgICAgKEFDU19MTENPUk5FUikpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1VSQ09STkVSIiwgICAgICAoQUNTX1VSQ09STkVSKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfTFJDT1JORVIiLCAgICAgIChBQ1NfTFJDT1JORVIpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19MVEVFIiwgICAgICAgICAgKEFDU19MVEVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfUlRFRSIsICAgICAgICAgIChBQ1NfUlRFRSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0JURUUiLCAgICAgICAgICAoQUNTX0JURUUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19UVEVFIiwgICAgICAgICAgKEFDU19UVEVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfSExJTkUiLCAgICAgICAgIChBQ1NfSExJTkUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19WTElORSIsICAgICAgICAgKEFDU19WTElORSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1BMVVMiLCAgICAgICAgICAoQUNTX1BMVVMpKTsKKyAgICAvKiBIZXJlIGFyZSBzb21lIGdyYXBoaWMgc3ltYm9scyB5b3UgY2FuIHVzZSAqLworICAgIFNldERpY3RJbnQoIkFDU19VTENPUk5FUiIsICAgICAgKEFDU19VTENPUk5FUikpOworICAgIFNldERpY3RJbnQoIkFDU19MTENPUk5FUiIsICAgICAgKEFDU19MTENPUk5FUikpOworICAgIFNldERpY3RJbnQoIkFDU19VUkNPUk5FUiIsICAgICAgKEFDU19VUkNPUk5FUikpOworICAgIFNldERpY3RJbnQoIkFDU19MUkNPUk5FUiIsICAgICAgKEFDU19MUkNPUk5FUikpOworICAgIFNldERpY3RJbnQoIkFDU19MVEVFIiwgICAgICAgICAgKEFDU19MVEVFKSk7CisgICAgU2V0RGljdEludCgiQUNTX1JURUUiLCAgICAgICAgICAoQUNTX1JURUUpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQlRFRSIsICAgICAgICAgIChBQ1NfQlRFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19UVEVFIiwgICAgICAgICAgKEFDU19UVEVFKSk7CisgICAgU2V0RGljdEludCgiQUNTX0hMSU5FIiwgICAgICAgICAoQUNTX0hMSU5FKSk7CisgICAgU2V0RGljdEludCgiQUNTX1ZMSU5FIiwgICAgICAgICAoQUNTX1ZMSU5FKSk7CisgICAgU2V0RGljdEludCgiQUNTX1BMVVMiLCAgICAgICAgICAoQUNTX1BMVVMpKTsKICNpZiAhZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoSEFWRV9OQ1VSU0VTX0gpCi0gICAgICAgICAgICAvKiBPbiBIUC9VWCAxMSwgdGhlc2UgYXJlIG9mIHR5cGUgY2NoYXJfdCwgd2hpY2ggaXMgbm90IGFuCi0gICAgICAgICAgICAgICBpbnRlZ3JhbCB0eXBlLiBJZiB0aGlzIGlzIGEgcHJvYmxlbSBvbiBtb3JlIHBsYXRmb3JtcywgYQotICAgICAgICAgICAgICAgY29uZmlndXJlIHRlc3Qgc2hvdWxkIGJlIGFkZGVkIHRvIGRldGVybWluZSB3aGV0aGVyIEFDU19TMQotICAgICAgICAgICAgICAgaXMgb2YgaW50ZWdyYWwgdHlwZS4gKi8KLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TMSIsICAgICAgICAgICAgKEFDU19TMSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1M5IiwgICAgICAgICAgICAoQUNTX1M5KSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfRElBTU9ORCIsICAgICAgIChBQ1NfRElBTU9ORCkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0NLQk9BUkQiLCAgICAgICAoQUNTX0NLQk9BUkQpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19ERUdSRUUiLCAgICAgICAgKEFDU19ERUdSRUUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19QTE1JTlVTIiwgICAgICAgKEFDU19QTE1JTlVTKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQlVMTEVUIiwgICAgICAgIChBQ1NfQlVMTEVUKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfTEFSUk9XIiwgICAgICAgIChBQ1NfTEFSUk9XKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfUkFSUk9XIiwgICAgICAgIChBQ1NfUkFSUk9XKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfREFSUk9XIiwgICAgICAgIChBQ1NfREFSUk9XKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfVUFSUk9XIiwgICAgICAgIChBQ1NfVUFSUk9XKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQk9BUkQiLCAgICAgICAgIChBQ1NfQk9BUkQpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19MQU5URVJOIiwgICAgICAgKEFDU19MQU5URVJOKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQkxPQ0siLCAgICAgICAgIChBQ1NfQkxPQ0spKTsKKyAgICAvKiBPbiBIUC9VWCAxMSwgdGhlc2UgYXJlIG9mIHR5cGUgY2NoYXJfdCwgd2hpY2ggaXMgbm90IGFuCisgICAgICAgaW50ZWdyYWwgdHlwZS4gSWYgdGhpcyBpcyBhIHByb2JsZW0gb24gbW9yZSBwbGF0Zm9ybXMsIGEKKyAgICAgICBjb25maWd1cmUgdGVzdCBzaG91bGQgYmUgYWRkZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgQUNTX1MxCisgICAgICAgaXMgb2YgaW50ZWdyYWwgdHlwZS4gKi8KKyAgICBTZXREaWN0SW50KCJBQ1NfUzEiLCAgICAgICAgICAgIChBQ1NfUzEpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfUzkiLCAgICAgICAgICAgIChBQ1NfUzkpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfRElBTU9ORCIsICAgICAgIChBQ1NfRElBTU9ORCkpOworICAgIFNldERpY3RJbnQoIkFDU19DS0JPQVJEIiwgICAgICAgKEFDU19DS0JPQVJEKSk7CisgICAgU2V0RGljdEludCgiQUNTX0RFR1JFRSIsICAgICAgICAoQUNTX0RFR1JFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19QTE1JTlVTIiwgICAgICAgKEFDU19QTE1JTlVTKSk7CisgICAgU2V0RGljdEludCgiQUNTX0JVTExFVCIsICAgICAgICAoQUNTX0JVTExFVCkpOworICAgIFNldERpY3RJbnQoIkFDU19MQVJST1ciLCAgICAgICAgKEFDU19MQVJST1cpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfUkFSUk9XIiwgICAgICAgIChBQ1NfUkFSUk9XKSk7CisgICAgU2V0RGljdEludCgiQUNTX0RBUlJPVyIsICAgICAgICAoQUNTX0RBUlJPVykpOworICAgIFNldERpY3RJbnQoIkFDU19VQVJST1ciLCAgICAgICAgKEFDU19VQVJST1cpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQk9BUkQiLCAgICAgICAgIChBQ1NfQk9BUkQpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfTEFOVEVSTiIsICAgICAgIChBQ1NfTEFOVEVSTikpOworICAgIFNldERpY3RJbnQoIkFDU19CTE9DSyIsICAgICAgICAgKEFDU19CTE9DSykpOwogI2VuZGlmCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQlNTQiIsICAgICAgICAgIChBQ1NfVUxDT1JORVIpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TU0JCIiwgICAgICAgICAgKEFDU19MTENPUk5FUikpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0JCU1MiLCAgICAgICAgICAoQUNTX1VSQ09STkVSKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfU0JCUyIsICAgICAgICAgIChBQ1NfTFJDT1JORVIpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TQlNTIiwgICAgICAgICAgKEFDU19SVEVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfU1NTQiIsICAgICAgICAgIChBQ1NfTFRFRSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1NTQlMiLCAgICAgICAgICAoQUNTX0JURUUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19CU1NTIiwgICAgICAgICAgKEFDU19UVEVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQlNCUyIsICAgICAgICAgIChBQ1NfSExJTkUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TQlNCIiwgICAgICAgICAgKEFDU19WTElORSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1NTU1MiLCAgICAgICAgICAoQUNTX1BMVVMpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQlNTQiIsICAgICAgICAgIChBQ1NfVUxDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfU1NCQiIsICAgICAgICAgIChBQ1NfTExDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQkJTUyIsICAgICAgICAgIChBQ1NfVVJDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfU0JCUyIsICAgICAgICAgIChBQ1NfTFJDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfU0JTUyIsICAgICAgICAgIChBQ1NfUlRFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19TU1NCIiwgICAgICAgICAgKEFDU19MVEVFKSk7CisgICAgU2V0RGljdEludCgiQUNTX1NTQlMiLCAgICAgICAgICAoQUNTX0JURUUpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQlNTUyIsICAgICAgICAgIChBQ1NfVFRFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19CU0JTIiwgICAgICAgICAgKEFDU19ITElORSkpOworICAgIFNldERpY3RJbnQoIkFDU19TQlNCIiwgICAgICAgICAgKEFDU19WTElORSkpOworICAgIFNldERpY3RJbnQoIkFDU19TU1NTIiwgICAgICAgICAgKEFDU19QTFVTKSk7CiAKLSAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG5ldmVyIGF2YWlsYWJsZSB3aXRoIHN0cmljdCBTWVNWIGN1cnNlcyAqLworICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG5ldmVyIGF2YWlsYWJsZSB3aXRoIHN0cmljdCBTWVNWIGN1cnNlcyAqLwogI2lmZGVmIEFDU19TMwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1MzIiwgICAgICAgICAgICAoQUNTX1MzKSk7CisgICAgU2V0RGljdEludCgiQUNTX1MzIiwgICAgICAgICAgICAoQUNTX1MzKSk7CiAjZW5kaWYKICNpZmRlZiBBQ1NfUzcKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TNyIsICAgICAgICAgICAgKEFDU19TNykpOworICAgIFNldERpY3RJbnQoIkFDU19TNyIsICAgICAgICAgICAgKEFDU19TNykpOwogI2VuZGlmCiAjaWZkZWYgQUNTX0xFUVVBTAotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0xFUVVBTCIsICAgICAgICAoQUNTX0xFUVVBTCkpOworICAgIFNldERpY3RJbnQoIkFDU19MRVFVQUwiLCAgICAgICAgKEFDU19MRVFVQUwpKTsKICNlbmRpZgogI2lmZGVmIEFDU19HRVFVQUwKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19HRVFVQUwiLCAgICAgICAgKEFDU19HRVFVQUwpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfR0VRVUFMIiwgICAgICAgIChBQ1NfR0VRVUFMKSk7CiAjZW5kaWYKICNpZmRlZiBBQ1NfUEkKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19QSSIsICAgICAgICAgICAgKEFDU19QSSkpOworICAgIFNldERpY3RJbnQoIkFDU19QSSIsICAgICAgICAgICAgKEFDU19QSSkpOwogI2VuZGlmCiAjaWZkZWYgQUNTX05FUVVBTAotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX05FUVVBTCIsICAgICAgICAoQUNTX05FUVVBTCkpOworICAgIFNldERpY3RJbnQoIkFDU19ORVFVQUwiLCAgICAgICAgKEFDU19ORVFVQUwpKTsKICNlbmRpZgogI2lmZGVmIEFDU19TVEVSTElORwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1NURVJMSU5HIiwgICAgICAoQUNTX1NURVJMSU5HKSk7CisgICAgU2V0RGljdEludCgiQUNTX1NURVJMSU5HIiwgICAgICAoQUNTX1NURVJMSU5HKSk7CiAjZW5kaWYKIAotICAgICAgICAgICAgU2V0RGljdEludCgiTElORVMiLCBMSU5FUyk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJDT0xTIiwgQ09MUyk7CisgICAgU2V0RGljdEludCgiTElORVMiLCBMSU5FUyk7CisgICAgU2V0RGljdEludCgiQ09MUyIsIENPTFMpOwogCi0gICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyh3aW4pOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfc2V0dXB0ZXJtKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QqIGtleXdkcykKK3sKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBpbnQgZXJyOworICAgIGNoYXIqIHRlcm1zdHIgPSBOVUxMOworCisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ0ZXJtIiwgImZkIiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcygKKyAgICAgICAgICAgIGFyZ3MsIGtleXdkcywgInx6aTpzZXR1cHRlcm0iLCBrd2xpc3QsICZ0ZXJtc3RyLCAmZmQpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBQeU9iamVjdCogc3lzX3N0ZG91dDsKKworICAgICAgICBzeXNfc3Rkb3V0ID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKKworICAgICAgICBpZiAoc3lzX3N0ZG91dCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgUHlDdXJzZXNFcnJvciwKKyAgICAgICAgICAgICAgICAibG9zdCBzeXMuc3Rkb3V0Iik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19zZXR1cHRlcm0oUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCoga2V5d2RzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgZmQgPSAtMTsKLSAgICAgICAgICAgIGludCBlcnI7Ci0gICAgICAgICAgICBjaGFyKiB0ZXJtc3RyID0gTlVMTDsKKyAgICAgICAgZmQgPSBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yKHN5c19zdGRvdXQpOwogCi0gICAgICAgICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InRlcm0iLCAiZmQiLCBOVUxMfTsKKyAgICAgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoCi0gICAgICAgICAgICAgICAgICAgIGFyZ3MsIGtleXdkcywgInx6aTpzZXR1cHRlcm0iLCBrd2xpc3QsICZ0ZXJtc3RyLCAmZmQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9CisgICAgaWYgKCFpbml0aWFsaXNlZF9zZXR1cHRlcm0gJiYgc2V0dXB0ZXJtKHRlcm1zdHIsZmQsJmVycikgPT0gRVJSKSB7CisgICAgICAgIGNoYXIqIHMgPSAic2V0dXB0ZXJtOiB1bmtub3duIGVycm9yIjsKIAotICAgICAgICAgICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QqIHN5c19zdGRvdXQ7Ci0KLSAgICAgICAgICAgICAgICBzeXNfc3Rkb3V0ID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKLQotICAgICAgICAgICAgICAgIGlmIChzeXNfc3Rkb3V0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgUHlDdXJzZXNFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb3N0IHN5cy5zdGRvdXQiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmQgPSBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yKHN5c19zdGRvdXQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFpbml0aWFsaXNlZF9zZXR1cHRlcm0gJiYgc2V0dXB0ZXJtKHRlcm1zdHIsZmQsJmVycikgPT0gRVJSKSB7Ci0gICAgICAgICAgICAgICAgY2hhciogcyA9ICJzZXR1cHRlcm06IHVua25vd24gZXJyb3IiOwotCi0gICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSAic2V0dXB0ZXJtOiBjb3VsZCBub3QgZmluZCB0ZXJtaW5hbCI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgcyA9ICJzZXR1cHRlcm06IGNvdWxkIG5vdCBmaW5kIHRlcm1pbmZvIGRhdGFiYXNlIjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvcixzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW5pdGlhbGlzZWRfc2V0dXB0ZXJtID0gVFJVRTsKLQotICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgICAgIGlmIChlcnIgPT0gMCkgeworICAgICAgICAgICAgcyA9ICJzZXR1cHRlcm06IGNvdWxkIG5vdCBmaW5kIHRlcm1pbmFsIjsKKyAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gLTEpIHsKKyAgICAgICAgICAgIHMgPSAic2V0dXB0ZXJtOiBjb3VsZCBub3QgZmluZCB0ZXJtaW5mbyBkYXRhYmFzZSI7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfSW50ckZsdXNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNoOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvcixzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgaW5pdGlhbGlzZWRfc2V0dXB0ZXJtID0gVFJVRTsKIAotICAgICAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO1RydWUoMSksIEZhbHNlKDApIiwmY2gpKSByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImludHJmbHVzaCByZXF1aXJlcyAxIGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGludHJmbHVzaChOVUxMLGNoKSwgImludHJmbHVzaCIpOwotICAgICAgICB9CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfSW50ckZsdXNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgY2g7CisKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworCisgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7VHJ1ZSgxKSwgRmFsc2UoMCkiLCZjaCkpIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiaW50cmZsdXNoIHJlcXVpcmVzIDEgYXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoaW50cmZsdXNoKE5VTEwsY2gpLCAiaW50cmZsdXNoIik7Cit9CiAKICNpZmRlZiBIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0lzX1Rlcm1fUmVzaXplZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsaW5lczsKLSAgICAgICAgICAgIGludCBjb2x1bW5zOwotICAgICAgICAgICAgaW50IHJlc3VsdDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19Jc19UZXJtX1Jlc2l6ZWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBsaW5lczsKKyAgICBpbnQgY29sdW1uczsKKyAgICBpbnQgcmVzdWx0OwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTppc190ZXJtX3Jlc2l6ZWQiLCAmbGluZXMsICZjb2x1bW5zKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICByZXN1bHQgPSBpc190ZXJtX3Jlc2l6ZWQobGluZXMsIGNvbHVtbnMpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9UcnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9GYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTppc190ZXJtX3Jlc2l6ZWQiLCAmbGluZXMsICZjb2x1bW5zKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gaXNfdGVybV9yZXNpemVkKGxpbmVzLCBjb2x1bW5zKTsKKyAgICBpZiAocmVzdWx0ID09IFRSVUUpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOworICAgICAgICByZXR1cm4gUHlfVHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOworICAgICAgICByZXR1cm4gUHlfRmFsc2U7CisgICAgfQorfQogI2VuZGlmIC8qIEhBVkVfQ1VSU0VTX0lTX1RFUk1fUkVTSVpFRCAqLwogCiAjaWYgIWRlZmluZWQoX19OZXRCU0RfXykKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0tleU5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICprbnA7Ci0gICAgICAgICAgICBpbnQgY2g7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfS2V5TmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY29uc3QgY2hhciAqa25wOworICAgIGludCBjaDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaSIsJmNoKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImkiLCZjaCkpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZiAoY2ggPCAwKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIGtleSBudW1iZXIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGtucCA9IGtleW5hbWUoY2gpOworICAgIGlmIChjaCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIGtleSBudW1iZXIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGtucCA9IGtleW5hbWUoY2gpOwogCi0gICAgICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZygoa25wID09IE5VTEwpID8gIiIgOiAoY2hhciAqKWtucCk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZygoa25wID09IE5VTEwpID8gIiIgOiAoY2hhciAqKWtucCk7Cit9CiAjZW5kaWYKIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfS2lsbENoYXIoUHlPYmplY3QgKnNlbGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgY2g7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfS2lsbENoYXIoUHlPYmplY3QgKnNlbGYpCit7CisgICAgY2hhciBjaDsKIAotICAgICAgICAgICAgY2ggPSBraWxsY2hhcigpOworICAgIGNoID0ga2lsbGNoYXIoKTsKIAotICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCZjaCwgMSk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoJmNoLCAxKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfTWV0YShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjaDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19NZXRhKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgY2g7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7VHJ1ZSgxKSwgRmFsc2UoMCkiLCZjaCkpIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibWV0YSByZXF1aXJlcyAxIGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAxOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtUcnVlKDEpLCBGYWxzZSgwKSIsJmNoKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJtZXRhIHJlcXVpcmVzIDEgYXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihtZXRhKHN0ZHNjciwgY2gpLCAibWV0YSIpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIobWV0YShzdGRzY3IsIGNoKSwgIm1ldGEiKTsKK30KIAogI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfTW91c2VJbnRlcnZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnRlcnZhbDsKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19Nb3VzZUludGVydmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgaW50ZXJ2YWw7CisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO2ludGVydmFsIiwmaW50ZXJ2YWwpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKG1vdXNlaW50ZXJ2YWwoaW50ZXJ2YWwpLCAibW91c2VpbnRlcnZhbCIpOwotICAgICAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7aW50ZXJ2YWwiLCZpbnRlcnZhbCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKG1vdXNlaW50ZXJ2YWwoaW50ZXJ2YWwpLCAibW91c2VpbnRlcnZhbCIpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19Nb3VzZU1hc2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbmV3bWFzazsKLSAgICAgICAgICAgIG1tYXNrX3Qgb2xkbWFzaywgYXZhaWxtYXNrOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX01vdXNlTWFzayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IG5ld21hc2s7CisgICAgbW1hc2tfdCBvbGRtYXNrLCBhdmFpbG1hc2s7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTttb3VzZW1hc2siLCZuZXdtYXNrKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBhdmFpbG1hc2sgPSBtb3VzZW1hc2sobmV3bWFzaywgJm9sZG1hc2spOwotICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihsbCkiLCAobG9uZylhdmFpbG1hc2ssIChsb25nKW9sZG1hc2spOwotICAgICAgICB9CisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTttb3VzZW1hc2siLCZuZXdtYXNrKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYXZhaWxtYXNrID0gbW91c2VtYXNrKG5ld21hc2ssICZvbGRtYXNrKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGxsKSIsIChsb25nKWF2YWlsbWFzaywgKGxvbmcpb2xkbWFzayk7Cit9CiAjZW5kaWYKIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfTmFwbXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbXM7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfTmFwbXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBtczsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTttcyIsICZtcykpIHJldHVybiBOVUxMOworICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpO21zIiwgJm1zKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgbmFwbXMobXMpKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgbmFwbXMobXMpKTsKK30KIAogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19OZXdQYWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBXSU5ET1cgKndpbjsKLSAgICAgICAgICAgIGludCBubGluZXMsIG5jb2xzOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX05ld1BhZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgV0lORE9XICp3aW47CisgICAgaW50IG5saW5lcywgbmNvbHM7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO25saW5lcyxuY29scyIsJm5saW5lcywmbmNvbHMpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7bmxpbmVzLG5jb2xzIiwmbmxpbmVzLCZuY29scykpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICB3aW4gPSBuZXdwYWQobmxpbmVzLCBuY29scyk7CisgICAgd2luID0gbmV3cGFkKG5saW5lcywgbmNvbHMpOwogCi0gICAgICAgICAgICBpZiAod2luID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9CisgICAgaWYgKHdpbiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX05ld1dpbmRvdyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdJTkRPVyAqd2luOwotICAgICAgICAgICAgaW50IG5saW5lcywgbmNvbHMsIGJlZ2luX3k9MCwgYmVnaW5feD0wOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX05ld1dpbmRvdyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgV0lORE9XICp3aW47CisgICAgaW50IG5saW5lcywgbmNvbHMsIGJlZ2luX3k9MCwgYmVnaW5feD0wOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7bmxpbmVzLG5jb2xzIiwmbmxpbmVzLCZuY29scykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpaWk7bmxpbmVzLG5jb2xzLGJlZ2luX3ksYmVnaW5feCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmxpbmVzLCZuY29scywmYmVnaW5feSwmYmVnaW5feCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5ld3dpbiByZXF1aXJlcyAyIG9yIDQgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMjoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO25saW5lcyxuY29scyIsJm5saW5lcywmbmNvbHMpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaWlpO25saW5lcyxuY29scyxiZWdpbl95LGJlZ2luX3giLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5saW5lcywmbmNvbHMsJmJlZ2luX3ksJmJlZ2luX3gpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJuZXd3aW4gcmVxdWlyZXMgMiBvciA0IGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHdpbiA9IG5ld3dpbihubGluZXMsbmNvbHMsYmVnaW5feSxiZWdpbl94KTsKLSAgICAgICAgICAgIGlmICh3aW4gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICB3aW4gPSBuZXd3aW4obmxpbmVzLG5jb2xzLGJlZ2luX3ksYmVnaW5feCk7CisgICAgaWYgKHdpbiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1BhaXJfQ29udGVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNob3J0IHBhaXIsZixiOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1BhaXJfQ29udGVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgc2hvcnQgcGFpcixmLGI7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKLSAgICAgICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3IKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcjsKIAotICAgICAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaDtwYWlyIiwgJnBhaXIpKSByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInBhaXJfY29udGVudCByZXF1aXJlcyAxIGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAxOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImg7cGFpciIsICZwYWlyKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJwYWlyX2NvbnRlbnQgcmVxdWlyZXMgMSBhcmd1bWVudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmIChwYWlyX2NvbnRlbnQocGFpciwgJmYsICZiKT09RVJSKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudCAxIHdhcyBvdXQgb2YgcmFuZ2UuICgxLi5DT0xPUl9QQUlSUy0xKSIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIGlmIChwYWlyX2NvbnRlbnQocGFpciwgJmYsICZiKT09RVJSKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IDEgd2FzIG91dCBvZiByYW5nZS4gKDEuLkNPTE9SX1BBSVJTLTEpIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmLCBiKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgZiwgYik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX3BhaXJfbnVtYmVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG47CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfcGFpcl9udW1iZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBuOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk7cGFpcnZhbHVlIiwgJm4pKSByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWlyX251bWJlciByZXF1aXJlcyAxIGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAxOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk7cGFpcnZhbHVlIiwgJm4pKSByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwYWlyX251bWJlciByZXF1aXJlcyAxIGFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSAoKG4gJiBBX0NPTE9SKSA+PiA4KSk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpICgobiAmIEFfQ09MT1IpID4+IDgpKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfUHV0cChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgKnN0cjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19QdXRwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpzdHI7CiAKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJzO3N0ciIsICZzdHIpKSByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHB1dHAoc3RyKSwgInB1dHAiKTsKLSAgICAgICAgfQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJzO3N0ciIsICZzdHIpKSByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihwdXRwKHN0ciksICJwdXRwIik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1FpRmx1c2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgZmxhZyA9IDA7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfUWlGbHVzaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZsYWcgPSAwOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgIHFpZmx1c2goKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTtUcnVlKDEpIG9yIEZhbHNlKDApIiwgJmZsYWcpKSByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWcpIHFpZmx1c2goKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBub3FpZmx1c2goKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicWlmbHVzaCByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHFpZmx1c2goKTsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTtUcnVlKDEpIG9yIEZhbHNlKDApIiwgJmZsYWcpKSByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKGZsYWcpIHFpZmx1c2goKTsKKyAgICAgICAgZWxzZSBub3FpZmx1c2goKTsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicWlmbHVzaCByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KIAogLyogSW50ZXJuYWwgaGVscGVyIHVzZWQgZm9yIHVwZGF0aW5nIGN1cnNlcy5MSU5FUywgY3Vyc2VzLkNPTFMsIF9jdXJzZXMuTElORVMKICAqIGFuZCBfY3Vyc2VzLkNPTFMgKi8KICNpZiBkZWZpbmVkKEhBVkVfQ1VSU0VTX1JFU0laRVRFUk0pIHx8IGRlZmluZWQoSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0pCi0gICAgICAgIHN0YXRpYyBpbnQKLSAgICAgICAgICAgIHVwZGF0ZV9saW5lc19jb2xzKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpvOwotICAgICAgICAgICAgUHlPYmplY3QgKm0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrKCJjdXJzZXMiKTsKK3N0YXRpYyBpbnQKK3VwZGF0ZV9saW5lc19jb2xzKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm87CisgICAgUHlPYmplY3QgKm0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrKCJjdXJzZXMiKTsKIAotICAgICAgICAgICAgaWYgKCFtKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgIGlmICghbSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIG8gPSBQeUludF9Gcm9tTG9uZyhMSU5FUyk7Ci0gICAgICAgICAgICBpZiAoIW8pIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhtLCAiTElORVMiLCBvKSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoTW9kRGljdCwgIkxJTkVTIiwgbykpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgICAgICAgICAgbyA9IFB5SW50X0Zyb21Mb25nKENPTFMpOwotICAgICAgICAgICAgaWYgKCFvKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG0pOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcobSwgIkNPTFMiLCBvKSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoTW9kRGljdCwgIkNPTFMiLCBvKSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQorICAgIG8gPSBQeUludF9Gcm9tTG9uZyhMSU5FUyk7CisgICAgaWYgKCFvKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKG0sICJMSU5FUyIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKE1vZERpY3QsICJMSU5FUyIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgUHlfREVDUkVGKG8pOworICAgIG8gPSBQeUludF9Gcm9tTG9uZyhDT0xTKTsKKyAgICBpZiAoIW8pIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcobSwgIkNPTFMiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCAiQ09MUyIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgUHlfREVDUkVGKG8pOworICAgIFB5X0RFQ1JFRihtKTsKKyAgICByZXR1cm4gMTsKK30KICNlbmRpZgogCiAjaWZkZWYgSEFWRV9DVVJTRVNfUkVTSVpFVEVSTQotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfUmVzaXplVGVybShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsaW5lczsKLSAgICAgICAgICAgIGludCBjb2x1bW5zOwotICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19SZXNpemVUZXJtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbGluZXM7CisgICAgaW50IGNvbHVtbnM7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk6cmVzaXpldGVybSIsICZsaW5lcywgJmNvbHVtbnMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk6cmVzaXpldGVybSIsICZsaW5lcywgJmNvbHVtbnMpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgcmVzdWx0ID0gUHlDdXJzZXNDaGVja0VSUihyZXNpemV0ZXJtKGxpbmVzLCBjb2x1bW5zKSwgInJlc2l6ZXRlcm0iKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVfbGluZXNfY29scygpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQorICAgIHJlc3VsdCA9IFB5Q3Vyc2VzQ2hlY2tFUlIocmVzaXpldGVybShsaW5lcywgY29sdW1ucyksICJyZXNpemV0ZXJtIik7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghdXBkYXRlX2xpbmVzX2NvbHMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0NVUlNFU19SRVNJWkVfVEVSTQotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfUmVzaXplX1Rlcm0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGluZXM7Ci0gICAgICAgICAgICBpbnQgY29sdW1uczsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19SZXNpemVfVGVybShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGxpbmVzOworICAgIGludCBjb2x1bW5zOwogCi0gICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpOnJlc2l6ZV90ZXJtIiwgJmxpbmVzLCAmY29sdW1ucykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTpyZXNpemVfdGVybSIsICZsaW5lcywgJmNvbHVtbnMpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgcmVzdWx0ID0gUHlDdXJzZXNDaGVja0VSUihyZXNpemVfdGVybShsaW5lcywgY29sdW1ucyksICJyZXNpemVfdGVybSIpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZV9saW5lc19jb2xzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9CisgICAgcmVzdWx0ID0gUHlDdXJzZXNDaGVja0VSUihyZXNpemVfdGVybShsaW5lcywgY29sdW1ucyksICJyZXNpemVfdGVybSIpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIXVwZGF0ZV9saW5lc19jb2xzKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAjZW5kaWYgLyogSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0gKi8KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfc2V0c3l4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkseDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19zZXRzeXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCB5LHg7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSE9MikgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic2V0c3l4IHJlcXVpcmVzIDIgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICBpZiAoUHlUdXBsZV9TaXplKGFyZ3MpIT0yKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJzZXRzeXggcmVxdWlyZXMgMiBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpO3ksIHgiLCAmeSwgJngpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpO3ksIHgiLCAmeSwgJngpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgc2V0c3l4KHkseCk7CisgICAgc2V0c3l4KHkseCk7CiAKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgICAgICB9CisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19TdGFydF9Db2xvcihQeU9iamVjdCAqc2VsZikKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNvZGU7Ci0gICAgICAgICAgICBQeU9iamVjdCAqYywgKmNwOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1N0YXJ0X0NvbG9yKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGludCBjb2RlOworICAgIFB5T2JqZWN0ICpjLCAqY3A7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgY29kZSA9IHN0YXJ0X2NvbG9yKCk7Ci0gICAgICAgICAgICBpZiAoY29kZSAhPSBFUlIpIHsKLSAgICAgICAgICAgICAgICBpbml0aWFsaXNlZGNvbG9ycyA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgYyA9IFB5SW50X0Zyb21Mb25nKChsb25nKSBDT0xPUlMpOwotICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKE1vZERpY3QsICJDT0xPUlMiLCBjKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYyk7Ci0gICAgICAgICAgICAgICAgY3AgPSBQeUludF9Gcm9tTG9uZygobG9uZykgQ09MT1JfUEFJUlMpOwotICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKE1vZERpY3QsICJDT0xPUl9QQUlSUyIsIGNwKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY3ApOwotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsICJzdGFydF9jb2xvcigpIHJldHVybmVkIEVSUiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgY29kZSA9IHN0YXJ0X2NvbG9yKCk7CisgICAgaWYgKGNvZGUgIT0gRVJSKSB7CisgICAgICAgIGluaXRpYWxpc2VkY29sb3JzID0gVFJVRTsKKyAgICAgICAgYyA9IFB5SW50X0Zyb21Mb25nKChsb25nKSBDT0xPUlMpOworICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCAiQ09MT1JTIiwgYyk7CisgICAgICAgIFB5X0RFQ1JFRihjKTsKKyAgICAgICAgY3AgPSBQeUludF9Gcm9tTG9uZygobG9uZykgQ09MT1JfUEFJUlMpOworICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCAiQ09MT1JfUEFJUlMiLCBjcCk7CisgICAgICAgIFB5X0RFQ1JFRihjcCk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsICJzdGFydF9jb2xvcigpIHJldHVybmVkIEVSUiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX3RpZ2V0ZmxhZyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgKmNhcG5hbWU7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfdGlnZXRmbGFnKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpjYXBuYW1lOwogCi0gICAgICAgICAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKKyAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKIAotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJmNhcG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZjYXBuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyggKGxvbmcpIHRpZ2V0ZmxhZyggY2FwbmFtZSApICk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoIChsb25nKSB0aWdldGZsYWcoIGNhcG5hbWUgKSApOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc190aWdldG51bShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgKmNhcG5hbWU7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfdGlnZXRudW0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKmNhcG5hbWU7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzU2V0dXBUZXJtQ2FsbGVkOworICAgIFB5Q3Vyc2VzU2V0dXBUZXJtQ2FsbGVkOwogCi0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMiLCAmY2FwbmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJmNhcG5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKCAobG9uZykgdGlnZXRudW0oIGNhcG5hbWUgKSApOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKCAobG9uZykgdGlnZXRudW0oIGNhcG5hbWUgKSApOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc190aWdldHN0cihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgKmNhcG5hbWU7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfdGlnZXRzdHIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKmNhcG5hbWU7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzU2V0dXBUZXJtQ2FsbGVkOworICAgIFB5Q3Vyc2VzU2V0dXBUZXJtQ2FsbGVkOwogCi0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMiLCAmY2FwbmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJmNhcG5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgY2FwbmFtZSA9IHRpZ2V0c3RyKCBjYXBuYW1lICk7Ci0gICAgICAgICAgICBpZiAoY2FwbmFtZSA9PSAwIHx8IGNhcG5hbWUgPT0gKGNoYXIqKSAtMSkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKCBjYXBuYW1lICk7Ci0gICAgICAgIH0KKyAgICBjYXBuYW1lID0gdGlnZXRzdHIoIGNhcG5hbWUgKTsKKyAgICBpZiAoY2FwbmFtZSA9PSAwIHx8IGNhcG5hbWUgPT0gKGNoYXIqKSAtMSkgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0KKyAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyggY2FwbmFtZSApOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc190cGFybShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIqIGZtdDsKLSAgICAgICAgICAgIGNoYXIqIHJlc3VsdCA9IE5VTEw7Ci0gICAgICAgICAgICBpbnQgaTE9MCxpMj0wLGkzPTAsaTQ9MCxpNT0wLGk2PTAsaTc9MCxpOD0wLGk5PTA7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfdHBhcm0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIqIGZtdDsKKyAgICBjaGFyKiByZXN1bHQgPSBOVUxMOworICAgIGludCBpMT0wLGkyPTAsaTM9MCxpND0wLGk1PTAsaTY9MCxpNz0wLGk4PTAsaTk9MDsKIAotICAgICAgICAgICAgUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQ7CisgICAgUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQ7CiAKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3xpaWlpaWlpaWk6dHBhcm0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbXQsICZpMSwgJmkyLCAmaTMsICZpNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaTUsICZpNiwgJmk3LCAmaTgsICZpOSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInN8aWlpaWlpaWlpOnRwYXJtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmZtdCwgJmkxLCAmaTIsICZpMywgJmk0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaTUsICZpNiwgJmk3LCAmaTgsICZpOSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXN1bHQgPSB0cGFybShmbXQsaTEsaTIsaTMsaTQsaTUsaTYsaTcsaTgsaTkpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgInRwYXJtKCkgcmV0dXJuZWQgTlVMTCIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIHJlc3VsdCA9IHRwYXJtKGZtdCxpMSxpMixpMyxpNCxpNSxpNixpNyxpOCxpOSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsICJ0cGFybSgpIHJldHVybmVkIE5VTEwiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhyZXN1bHQpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVzdWx0KTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfVHlwZUFoZWFkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZkOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1R5cGVBaGVhZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZkOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO2ZkIiwmZmQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtmZCIsJmZkKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHR5cGVhaGVhZCggZmQgKSwgInR5cGVhaGVhZCIpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIodHlwZWFoZWFkKCBmZCApLCAidHlwZWFoZWFkIik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1VuQ3RybChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp0ZW1wOwotICAgICAgICAgICAgY2h0eXBlIGNoOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1VuQ3RybChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnRlbXA7CisgICAgY2h0eXBlIGNoOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJPO2NoIG9yIGludCIsJnRlbXApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiTztjaCBvciBpbnQiLCZ0ZW1wKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGlmIChQeUludF9DaGVjayh0ZW1wKSkKLSAgICAgICAgICAgICAgICBjaCA9IChjaHR5cGUpIFB5SW50X0FzTG9uZyh0ZW1wKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFB5U3RyaW5nX0NoZWNrKHRlbXApKQotICAgICAgICAgICAgICAgIGNoID0gKGNodHlwZSkgKlB5U3RyaW5nX0FzU3RyaW5nKHRlbXApOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50IG11c3QgYmUgYSBjaCBvciBhbiBpbnQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoUHlJbnRfQ2hlY2sodGVtcCkpCisgICAgICAgIGNoID0gKGNodHlwZSkgUHlJbnRfQXNMb25nKHRlbXApOworICAgIGVsc2UgaWYgKFB5U3RyaW5nX0NoZWNrKHRlbXApKQorICAgICAgICBjaCA9IChjaHR5cGUpICpQeVN0cmluZ19Bc1N0cmluZyh0ZW1wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50IG11c3QgYmUgYSBjaCBvciBhbiBpbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyh1bmN0cmwoY2gpKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHVuY3RybChjaCkpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19VbmdldENoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgUHlPYmplY3QgKnRlbXA7Ci0gICAgICAgICAgICBpbnQgY2g7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfVW5nZXRDaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnRlbXA7CisgICAgaW50IGNoOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJPO2NoIG9yIGludCIsJnRlbXApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiTztjaCBvciBpbnQiLCZ0ZW1wKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGlmIChQeUludF9DaGVjayh0ZW1wKSkKLSAgICAgICAgICAgICAgICBjaCA9IChpbnQpIFB5SW50X0FzTG9uZyh0ZW1wKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFB5U3RyaW5nX0NoZWNrKHRlbXApKQotICAgICAgICAgICAgICAgIGNoID0gKGludCkgKlB5U3RyaW5nX0FzU3RyaW5nKHRlbXApOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50IG11c3QgYmUgYSBjaCBvciBhbiBpbnQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoUHlJbnRfQ2hlY2sodGVtcCkpCisgICAgICAgIGNoID0gKGludCkgUHlJbnRfQXNMb25nKHRlbXApOworICAgIGVsc2UgaWYgKFB5U3RyaW5nX0NoZWNrKHRlbXApKQorICAgICAgICBjaCA9IChpbnQpICpQeVN0cmluZ19Bc1N0cmluZyh0ZW1wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50IG11c3QgYmUgYSBjaCBvciBhbiBpbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih1bmdldGNoKGNoKSwgInVuZ2V0Y2giKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHVuZ2V0Y2goY2gpLCAidW5nZXRjaCIpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19Vc2VfRW52KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZsYWc7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfVXNlX0VudihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZsYWc7CiAKLSAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtUcnVlKDEpLCBGYWxzZSgwKSIsJmZsYWcpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInVzZV9lbnYgcmVxdWlyZXMgMSBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXNlX2VudihmbGFnKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgICAgICB9CisgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7VHJ1ZSgxKSwgRmFsc2UoMCkiLCZmbGFnKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAidXNlX2VudiByZXF1aXJlcyAxIGFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB1c2VfZW52KGZsYWcpOworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KIAogI2lmbmRlZiBTVFJJQ1RfU1lTVl9DVVJTRVMKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1VzZV9EZWZhdWx0X0NvbG9ycyhQeU9iamVjdCAqc2VsZikKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNvZGU7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfVXNlX0RlZmF1bHRfQ29sb3JzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGludCBjb2RlOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CiAKLSAgICAgICAgICAgICAgICBjb2RlID0gdXNlX2RlZmF1bHRfY29sb3JzKCk7Ci0gICAgICAgICAgICBpZiAoY29kZSAhPSBFUlIpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAidXNlX2RlZmF1bHRfY29sb3JzKCkgcmV0dXJuZWQgRVJSIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBjb2RlID0gdXNlX2RlZmF1bHRfY29sb3JzKCk7CisgICAgaWYgKGNvZGUgIT0gRVJSKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsICJ1c2VfZGVmYXVsdF9jb2xvcnMoKSByZXR1cm5lZCBFUlIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQogI2VuZGlmIC8qIFNUUklDVF9TWVNWX0NVUlNFUyAqLwogCiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBtb2R1bGUgKi8KIAotICAgICAgICBzdGF0aWMgUHlNZXRob2REZWYgUHlDdXJzZXNfbWV0aG9kc1tdID0gewotICAgICAgICAgICAgeyJiYXVkcmF0ZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2JhdWRyYXRlLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImJlZXAiLCAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfYmVlcCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJjYW5fY2hhbmdlX2NvbG9yIiwgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2Nhbl9jaGFuZ2VfY29sb3IsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiY2JyZWFrIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19jYnJlYWssIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImNvbG9yX2NvbnRlbnQiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfQ29sb3JfQ29udGVudCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiY29sb3JfcGFpciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19jb2xvcl9wYWlyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJjdXJzX3NldCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0N1cnNfU2V0LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJkZWZfcHJvZ19tb2RlIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2RlZl9wcm9nX21vZGUsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZGVmX3NoZWxsX21vZGUiLCAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19kZWZfc2hlbGxfbW9kZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJkZWxheV9vdXRwdXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0RlbGF5X091dHB1dCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiZG91cGRhdGUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19kb3VwZGF0ZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJlY2hvIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2VjaG8sIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImVuZHdpbiIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZW5kd2luLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImVyYXNlY2hhciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfRXJhc2VDaGFyLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImZpbHRlciIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZmlsdGVyLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImZsYXNoIiwgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZmxhc2gsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZmx1c2hpbnAiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19mbHVzaGlucCwgTUVUSF9OT0FSR1N9LAorc3RhdGljIFB5TWV0aG9kRGVmIFB5Q3Vyc2VzX21ldGhvZHNbXSA9IHsKKyAgICB7ImJhdWRyYXRlIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfYmF1ZHJhdGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImJlZXAiLCAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfYmVlcCwgTUVUSF9OT0FSR1N9LAorICAgIHsiY2FuX2NoYW5nZV9jb2xvciIsICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19jYW5fY2hhbmdlX2NvbG9yLCBNRVRIX05PQVJHU30sCisgICAgeyJjYnJlYWsiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2NicmVhaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImNvbG9yX2NvbnRlbnQiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfQ29sb3JfQ29udGVudCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImNvbG9yX3BhaXIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfY29sb3JfcGFpciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImN1cnNfc2V0IiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfQ3Vyc19TZXQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJkZWZfcHJvZ19tb2RlIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2RlZl9wcm9nX21vZGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImRlZl9zaGVsbF9tb2RlIiwgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZGVmX3NoZWxsX21vZGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImRlbGF5X291dHB1dCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfRGVsYXlfT3V0cHV0LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZG91cGRhdGUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19kb3VwZGF0ZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiZWNobyIsICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19lY2hvLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZW5kd2luIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19lbmR3aW4sIE1FVEhfTk9BUkdTfSwKKyAgICB7ImVyYXNlY2hhciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfRXJhc2VDaGFyLCBNRVRIX05PQVJHU30sCisgICAgeyJmaWx0ZXIiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2ZpbHRlciwgTUVUSF9OT0FSR1N9LAorICAgIHsiZmxhc2giLCAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19mbGFzaCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZmx1c2hpbnAiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19mbHVzaGlucCwgTUVUSF9OT0FSR1N9LAogI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgotICAgICAgICAgICAgeyJnZXRtb3VzZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0dldE1vdXNlLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InVuZ2V0bW91c2UiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVW5nZXRNb3VzZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldG1vdXNlIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfR2V0TW91c2UsIE1FVEhfTk9BUkdTfSwKKyAgICB7InVuZ2V0bW91c2UiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVW5nZXRNb3VzZSwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgotICAgICAgICAgICAgeyJnZXRzeXgiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2dldHN5eCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJnZXR3aW4iLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0dldFdpbiwgTUVUSF9PfSwKLSAgICAgICAgICAgIHsiaGFzX2NvbG9ycyIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19oYXNfY29sb3JzLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7Imhhc19pYyIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaGFzX2ljLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7Imhhc19pbCIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaGFzX2lsLCBNRVRIX05PQVJHU30sCisgICAgeyJnZXRzeXgiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2dldHN5eCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0d2luIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19HZXRXaW4sIE1FVEhfT30sCisgICAgeyJoYXNfY29sb3JzIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2hhc19jb2xvcnMsIE1FVEhfTk9BUkdTfSwKKyAgICB7Imhhc19pYyIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaGFzX2ljLCBNRVRIX05PQVJHU30sCisgICAgeyJoYXNfaWwiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2hhc19pbCwgTUVUSF9OT0FSR1N9LAogI2lmbmRlZiBTVFJJQ1RfU1lTVl9DVVJTRVMKLSAgICAgICAgICAgIHsiaGFzX2tleSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19oYXNfa2V5LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaGFzX2tleSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19oYXNfa2V5LCBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCi0gICAgICAgICAgICB7ImhhbGZkZWxheSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSGFsZkRlbGF5LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbml0X2NvbG9yIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0luaXRfQ29sb3IsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImluaXRfcGFpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSW5pdF9QYWlyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbml0c2NyIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0luaXRTY3IsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiaW50cmZsdXNoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19JbnRyRmx1c2gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImlzZW5kd2luIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaXNlbmR3aW4sIE1FVEhfTk9BUkdTfSwKKyAgICB7ImhhbGZkZWxheSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSGFsZkRlbGF5LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5pdF9jb2xvciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Jbml0X0NvbG9yLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5pdF9wYWlyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Jbml0X1BhaXIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpbml0c2NyIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0luaXRTY3IsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImludHJmbHVzaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSW50ckZsdXNoLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaXNlbmR3aW4iLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19pc2VuZHdpbiwgTUVUSF9OT0FSR1N9LAogI2lmZGVmIEhBVkVfQ1VSU0VTX0lTX1RFUk1fUkVTSVpFRAotICAgICAgICAgICAgeyJpc190ZXJtX3Jlc2l6ZWQiLCAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0lzX1Rlcm1fUmVzaXplZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImlzX3Rlcm1fcmVzaXplZCIsICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSXNfVGVybV9SZXNpemVkLCBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCiAjaWYgIWRlZmluZWQoX19OZXRCU0RfXykKLSAgICAgICAgICAgIHsia2V5bmFtZSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19LZXlOYW1lLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsia2V5bmFtZSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19LZXlOYW1lLCBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCi0gICAgICAgICAgICB7ImtpbGxjaGFyIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfS2lsbENoYXIsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsibG9uZ25hbWUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19sb25nbmFtZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJtZXRhIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX01ldGEsIE1FVEhfVkFSQVJHU30sCisgICAgeyJraWxsY2hhciIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0tpbGxDaGFyLCBNRVRIX05PQVJHU30sCisgICAgeyJsb25nbmFtZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2xvbmduYW1lLCBNRVRIX05PQVJHU30sCisgICAgeyJtZXRhIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX01ldGEsIE1FVEhfVkFSQVJHU30sCiAjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCi0gICAgICAgICAgICB7Im1vdXNlaW50ZXJ2YWwiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfTW91c2VJbnRlcnZhbCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibW91c2VtYXNrIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Nb3VzZU1hc2ssIE1FVEhfVkFSQVJHU30sCisgICAgeyJtb3VzZWludGVydmFsIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX01vdXNlSW50ZXJ2YWwsIE1FVEhfVkFSQVJHU30sCisgICAgeyJtb3VzZW1hc2siLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX01vdXNlTWFzaywgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgotICAgICAgICAgICAgeyJuYXBtcyIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX05hcG1zLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJuZXdwYWQiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX05ld1BhZCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibmV3d2luIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19OZXdXaW5kb3csIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im5sIiwgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbmwsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im5vY2JyZWFrIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9jYnJlYWssIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsibm9lY2hvIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19ub2VjaG8sIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsibm9ubCIsICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19ub25sLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7Im5vcWlmbHVzaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9xaWZsdXNoLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7Im5vcmF3IiwgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9yYXcsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsicGFpcl9jb250ZW50IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19QYWlyX0NvbnRlbnQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InBhaXJfbnVtYmVyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcGFpcl9udW1iZXIsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InB1dHAiLCAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfUHV0cCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsicWlmbHVzaCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19RaUZsdXNoLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJyYXciLCAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3JhdywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsicmVzZXRfcHJvZ19tb2RlIiwgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19yZXNldF9wcm9nX21vZGUsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsicmVzZXRfc2hlbGxfbW9kZSIsICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19yZXNldF9zaGVsbF9tb2RlLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InJlc2V0dHkiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmVzZXR0eSwgTUVUSF9OT0FSR1N9LAorICAgIHsibmFwbXMiLCAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19OYXBtcywgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im5ld3BhZCIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfTmV3UGFkLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibmV3d2luIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19OZXdXaW5kb3csIE1FVEhfVkFSQVJHU30sCisgICAgeyJubCIsICAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25sLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibm9jYnJlYWsiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19ub2NicmVhaywgTUVUSF9OT0FSR1N9LAorICAgIHsibm9lY2hvIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19ub2VjaG8sIE1FVEhfTk9BUkdTfSwKKyAgICB7Im5vbmwiLCAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9ubCwgTUVUSF9OT0FSR1N9LAorICAgIHsibm9xaWZsdXNoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19ub3FpZmx1c2gsIE1FVEhfTk9BUkdTfSwKKyAgICB7Im5vcmF3IiwgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9yYXcsIE1FVEhfTk9BUkdTfSwKKyAgICB7InBhaXJfY29udGVudCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfUGFpcl9Db250ZW50LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicGFpcl9udW1iZXIiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19wYWlyX251bWJlciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InB1dHAiLCAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfUHV0cCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InFpZmx1c2giLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfUWlGbHVzaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJhdyIsICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmF3LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVzZXRfcHJvZ19tb2RlIiwgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19yZXNldF9wcm9nX21vZGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InJlc2V0X3NoZWxsX21vZGUiLCAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmVzZXRfc2hlbGxfbW9kZSwgTUVUSF9OT0FSR1N9LAorICAgIHsicmVzZXR0eSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19yZXNldHR5LCBNRVRIX05PQVJHU30sCiAjaWZkZWYgSEFWRV9DVVJTRVNfUkVTSVpFVEVSTQotICAgICAgICAgICAgeyJyZXNpemV0ZXJtIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1Jlc2l6ZVRlcm0sIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZXNpemV0ZXJtIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1Jlc2l6ZVRlcm0sIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKICNpZmRlZiBIQVZFX0NVUlNFU19SRVNJWkVfVEVSTQotICAgICAgICAgICAgeyJyZXNpemVfdGVybSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1Jlc2l6ZV9UZXJtLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVzaXplX3Rlcm0iLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19SZXNpemVfVGVybSwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgotICAgICAgICAgICAgeyJzYXZldHR5IiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3NhdmV0dHksIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsic2V0c3l4IiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19zZXRzeXgsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InNldHVwdGVybSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfc2V0dXB0ZXJtLAotICAgICAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKLSAgICAgICAgICAgIHsic3RhcnRfY29sb3IiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19TdGFydF9Db2xvciwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJ0ZXJtYXR0cnMiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3Rlcm1hdHRycywgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJ0ZXJtbmFtZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3Rlcm1uYW1lLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InRpZ2V0ZmxhZyIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfdGlnZXRmbGFnLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJ0aWdldG51bSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3RpZ2V0bnVtLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJ0aWdldHN0ciIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3RpZ2V0c3RyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJ0cGFybSIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3RwYXJtLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJ0eXBlYWhlYWQiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1R5cGVBaGVhZCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidW5jdHJsIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19VbkN0cmwsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InVuZ2V0Y2giLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVW5nZXRDaCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidXNlX2VudiIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Vc2VfRW52LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsic2F2ZXR0eSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19zYXZldHR5LCBNRVRIX05PQVJHU30sCisgICAgeyJzZXRzeXgiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3NldHN5eCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InNldHVwdGVybSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfc2V0dXB0ZXJtLAorICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisgICAgeyJzdGFydF9jb2xvciIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1N0YXJ0X0NvbG9yLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXJtYXR0cnMiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3Rlcm1hdHRycywgTUVUSF9OT0FSR1N9LAorICAgIHsidGVybW5hbWUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190ZXJtbmFtZSwgTUVUSF9OT0FSR1N9LAorICAgIHsidGlnZXRmbGFnIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190aWdldGZsYWcsIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0aWdldG51bSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3RpZ2V0bnVtLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidGlnZXRzdHIiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190aWdldHN0ciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRwYXJtIiwgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfdHBhcm0sIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0eXBlYWhlYWQiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1R5cGVBaGVhZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InVuY3RybCIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVW5DdHJsLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidW5nZXRjaCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19VbmdldENoLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidXNlX2VudiIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Vc2VfRW52LCBNRVRIX1ZBUkFSR1N9LAogI2lmbmRlZiBTVFJJQ1RfU1lTVl9DVVJTRVMKLSAgICAgICAgICAgIHsidXNlX2RlZmF1bHRfY29sb3JzIiwgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Vc2VfRGVmYXVsdF9Db2xvcnMsIE1FVEhfTk9BUkdTfSwKKyAgICB7InVzZV9kZWZhdWx0X2NvbG9ycyIsICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVXNlX0RlZmF1bHRfQ29sb3JzLCBNRVRIX05PQVJHU30sCiAjZW5kaWYKLSAgICAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgLyogc2VudGluZWwgKi8KLSAgICAgICAgfTsKKyAgICB7TlVMTCwgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OwogCiAvKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZSAqLwogCi0gICAgICAgIFB5TU9ESU5JVF9GVU5DCi0gICAgICAgICAgICBpbml0X2N1cnNlcyh2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqbSwgKmQsICp2LCAqY19hcGlfb2JqZWN0OwotICAgICAgICAgICAgc3RhdGljIHZvaWQgKlB5Q3Vyc2VzX0FQSVtQeUN1cnNlc19BUElfcG9pbnRlcnNdOworUHlNT0RJTklUX0ZVTkMKK2luaXRfY3Vyc2VzKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm0sICpkLCAqdiwgKmNfYXBpX29iamVjdDsKKyAgICBzdGF0aWMgdm9pZCAqUHlDdXJzZXNfQVBJW1B5Q3Vyc2VzX0FQSV9wb2ludGVyc107CiAKLSAgICAgICAgICAgIC8qIEluaXRpYWxpemUgb2JqZWN0IHR5cGUgKi8KLSAgICAgICAgICAgIFB5X1RZUEUoJlB5Q3Vyc2VzV2luZG93X1R5cGUpID0gJlB5VHlwZV9UeXBlOworICAgIC8qIEluaXRpYWxpemUgb2JqZWN0IHR5cGUgKi8KKyAgICBQeV9UWVBFKCZQeUN1cnNlc1dpbmRvd19UeXBlKSA9ICZQeVR5cGVfVHlwZTsKIAotICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgQyBBUEkgcG9pbnRlciBhcnJheSAqLwotICAgICAgICAgICAgUHlDdXJzZXNfQVBJWzBdID0gKHZvaWQgKikmUHlDdXJzZXNXaW5kb3dfVHlwZTsKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0FQSVsxXSA9ICh2b2lkICopZnVuY19QeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0FQSVsyXSA9ICh2b2lkICopZnVuY19QeUN1cnNlc0luaXRpYWxpc2VkOwotICAgICAgICAgICAgUHlDdXJzZXNfQVBJWzNdID0gKHZvaWQgKilmdW5jX1B5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcjsKKyAgICAvKiBJbml0aWFsaXplIHRoZSBDIEFQSSBwb2ludGVyIGFycmF5ICovCisgICAgUHlDdXJzZXNfQVBJWzBdID0gKHZvaWQgKikmUHlDdXJzZXNXaW5kb3dfVHlwZTsKKyAgICBQeUN1cnNlc19BUElbMV0gPSAodm9pZCAqKWZ1bmNfUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQ7CisgICAgUHlDdXJzZXNfQVBJWzJdID0gKHZvaWQgKilmdW5jX1B5Q3Vyc2VzSW5pdGlhbGlzZWQ7CisgICAgUHlDdXJzZXNfQVBJWzNdID0gKHZvaWQgKilmdW5jX1B5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcjsKIAotICAgICAgICAgICAgLyogQ3JlYXRlIHRoZSBtb2R1bGUgYW5kIGFkZCB0aGUgZnVuY3Rpb25zICovCi0gICAgICAgICAgICBtID0gUHlfSW5pdE1vZHVsZSgiX2N1cnNlcyIsIFB5Q3Vyc2VzX21ldGhvZHMpOwotICAgICAgICAgICAgaWYgKG0gPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgLyogQ3JlYXRlIHRoZSBtb2R1bGUgYW5kIGFkZCB0aGUgZnVuY3Rpb25zICovCisgICAgbSA9IFB5X0luaXRNb2R1bGUoIl9jdXJzZXMiLCBQeUN1cnNlc19tZXRob2RzKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCi0gICAgICAgICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICAgICAgICAgIGlmIChkID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgTW9kRGljdCA9IGQ7IC8qIEZvciBQeUN1cnNlc19Jbml0U2NyIHRvIHVzZSBsYXRlciAqLworICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCisgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CisgICAgaWYgKGQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIE1vZERpY3QgPSBkOyAvKiBGb3IgUHlDdXJzZXNfSW5pdFNjciB0byB1c2UgbGF0ZXIgKi8KIAotICAgICAgICAgICAgLyogQWRkIGEgQ09iamVjdCBmb3IgdGhlIEMgQVBJICovCi0gICAgICAgICAgICBjX2FwaV9vYmplY3QgPSBQeUNPYmplY3RfRnJvbVZvaWRQdHIoKHZvaWQgKilQeUN1cnNlc19BUEksIE5VTEwpOwotICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9DX0FQSSIsIGNfYXBpX29iamVjdCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoY19hcGlfb2JqZWN0KTsKKyAgICAvKiBBZGQgYSBjYXBzdWxlIGZvciB0aGUgQyBBUEkgKi8KKyAgICBjX2FwaV9vYmplY3QgPSBQeUNhcHN1bGVfTmV3KFB5Q3Vyc2VzX0FQSSwgUHlDdXJzZXNfQ0FQU1VMRV9OQU1FLCBOVUxMKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX0NfQVBJIiwgY19hcGlfb2JqZWN0KTsKKyAgICBQeV9ERUNSRUYoY19hcGlfb2JqZWN0KTsKIAotICAgICAgICAgICAgLyogRm9yIGV4Y2VwdGlvbiBjdXJzZXMuZXJyb3IgKi8KLSAgICAgICAgICAgIFB5Q3Vyc2VzRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl9jdXJzZXMuZXJyb3IiLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJlcnJvciIsIFB5Q3Vyc2VzRXJyb3IpOworICAgIC8qIEZvciBleGNlcHRpb24gY3Vyc2VzLmVycm9yICovCisgICAgUHlDdXJzZXNFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX2N1cnNlcy5lcnJvciIsIE5VTEwsIE5VTEwpOworICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJlcnJvciIsIFB5Q3Vyc2VzRXJyb3IpOwogCi0gICAgICAgICAgICAvKiBNYWtlIHRoZSB2ZXJzaW9uIGF2YWlsYWJsZSAqLwotICAgICAgICAgICAgdiA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlDdXJzZXNWZXJzaW9uKTsKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJ2ZXJzaW9uIiwgdik7Ci0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX192ZXJzaW9uX18iLCB2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAvKiBNYWtlIHRoZSB2ZXJzaW9uIGF2YWlsYWJsZSAqLworICAgIHYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5Q3Vyc2VzVmVyc2lvbik7CisgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgInZlcnNpb24iLCB2KTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX192ZXJzaW9uX18iLCB2KTsKKyAgICBQeV9ERUNSRUYodik7CiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkVSUiIsIEVSUik7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJPSyIsIE9LKTsKKyAgICBTZXREaWN0SW50KCJFUlIiLCBFUlIpOworICAgIFNldERpY3RJbnQoIk9LIiwgT0spOwogCi0gICAgICAgICAgICAvKiBIZXJlIGFyZSBzb21lIGF0dHJpYnV0ZXMgeW91IGNhbiBhZGQgdG8gY2hhcnMgdG8gcHJpbnQgKi8KKyAgICAvKiBIZXJlIGFyZSBzb21lIGF0dHJpYnV0ZXMgeW91IGNhbiBhZGQgdG8gY2hhcnMgdG8gcHJpbnQgKi8KIAotICAgICAgICAgICAgU2V0RGljdEludCgiQV9BVFRSSUJVVEVTIiwgICAgICBBX0FUVFJJQlVURVMpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9OT1JNQUwiLCAgICAgICAgICAgICAgQV9OT1JNQUwpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9TVEFORE9VVCIsICAgICAgICAgICAgQV9TVEFORE9VVCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBX1VOREVSTElORSIsICAgICAgICAgICBBX1VOREVSTElORSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBX1JFVkVSU0UiLCAgICAgICAgICAgICBBX1JFVkVSU0UpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9CTElOSyIsICAgICAgICAgICAgICAgQV9CTElOSyk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBX0RJTSIsICAgICAgICAgICAgICAgICBBX0RJTSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBX0JPTEQiLCAgICAgICAgICAgICAgICBBX0JPTEQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9BTFRDSEFSU0VUIiwgICAgICAgICAgQV9BTFRDSEFSU0VUKTsKKyAgICBTZXREaWN0SW50KCJBX0FUVFJJQlVURVMiLCAgICAgIEFfQVRUUklCVVRFUyk7CisgICAgU2V0RGljdEludCgiQV9OT1JNQUwiLCAgICAgICAgICAgICAgQV9OT1JNQUwpOworICAgIFNldERpY3RJbnQoIkFfU1RBTkRPVVQiLCAgICAgICAgICAgIEFfU1RBTkRPVVQpOworICAgIFNldERpY3RJbnQoIkFfVU5ERVJMSU5FIiwgICAgICAgICAgIEFfVU5ERVJMSU5FKTsKKyAgICBTZXREaWN0SW50KCJBX1JFVkVSU0UiLCAgICAgICAgICAgICBBX1JFVkVSU0UpOworICAgIFNldERpY3RJbnQoIkFfQkxJTksiLCAgICAgICAgICAgICAgIEFfQkxJTkspOworICAgIFNldERpY3RJbnQoIkFfRElNIiwgICAgICAgICAgICAgICAgIEFfRElNKTsKKyAgICBTZXREaWN0SW50KCJBX0JPTEQiLCAgICAgICAgICAgICAgICBBX0JPTEQpOworICAgIFNldERpY3RJbnQoIkFfQUxUQ0hBUlNFVCIsICAgICAgICAgIEFfQUxUQ0hBUlNFVCk7CiAjaWYgIWRlZmluZWQoX19OZXRCU0RfXykKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfSU5WSVMiLCAgICAgICAgICAgQV9JTlZJUyk7CisgICAgU2V0RGljdEludCgiQV9JTlZJUyIsICAgICAgICAgICBBX0lOVklTKTsKICNlbmRpZgotICAgICAgICAgICAgU2V0RGljdEludCgiQV9QUk9URUNUIiwgICAgICAgICBBX1BST1RFQ1QpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9DSEFSVEVYVCIsICAgICAgICBBX0NIQVJURVhUKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfQ09MT1IiLCAgICAgICAgICAgQV9DT0xPUik7CisgICAgU2V0RGljdEludCgiQV9QUk9URUNUIiwgICAgICAgICBBX1BST1RFQ1QpOworICAgIFNldERpY3RJbnQoIkFfQ0hBUlRFWFQiLCAgICAgICAgQV9DSEFSVEVYVCk7CisgICAgU2V0RGljdEludCgiQV9DT0xPUiIsICAgICAgICAgICBBX0NPTE9SKTsKIAotICAgICAgICAgICAgLyogVGhlIGZvbGxvd2luZyBhcmUgbmV2ZXIgYXZhaWxhYmxlIHdpdGggc3RyaWN0IFNZU1YgY3Vyc2VzICovCisgICAgLyogVGhlIGZvbGxvd2luZyBhcmUgbmV2ZXIgYXZhaWxhYmxlIHdpdGggc3RyaWN0IFNZU1YgY3Vyc2VzICovCiAjaWZkZWYgQV9IT1JJWk9OVEFMCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBX0hPUklaT05UQUwiLCAgICAgIEFfSE9SSVpPTlRBTCk7CisgICAgU2V0RGljdEludCgiQV9IT1JJWk9OVEFMIiwgICAgICBBX0hPUklaT05UQUwpOwogI2VuZGlmCiAjaWZkZWYgQV9MRUZUCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBX0xFRlQiLCAgICAgICAgICAgIEFfTEVGVCk7CisgICAgU2V0RGljdEludCgiQV9MRUZUIiwgICAgICAgICAgICBBX0xFRlQpOwogI2VuZGlmCiAjaWZkZWYgQV9MT1cKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfTE9XIiwgICAgICAgICAgICAgQV9MT1cpOworICAgIFNldERpY3RJbnQoIkFfTE9XIiwgICAgICAgICAgICAgQV9MT1cpOwogI2VuZGlmCiAjaWZkZWYgQV9SSUdIVAotICAgICAgICAgICAgU2V0RGljdEludCgiQV9SSUdIVCIsICAgICAgICAgICBBX1JJR0hUKTsKKyAgICBTZXREaWN0SW50KCJBX1JJR0hUIiwgICAgICAgICAgIEFfUklHSFQpOwogI2VuZGlmCiAjaWZkZWYgQV9UT1AKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfVE9QIiwgICAgICAgICAgICAgQV9UT1ApOworICAgIFNldERpY3RJbnQoIkFfVE9QIiwgICAgICAgICAgICAgQV9UT1ApOwogI2VuZGlmCiAjaWZkZWYgQV9WRVJUSUNBTAotICAgICAgICAgICAgU2V0RGljdEludCgiQV9WRVJUSUNBTCIsICAgICAgICBBX1ZFUlRJQ0FMKTsKKyAgICBTZXREaWN0SW50KCJBX1ZFUlRJQ0FMIiwgICAgICAgIEFfVkVSVElDQUwpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkNPTE9SX0JMQUNLIiwgICAgICAgQ09MT1JfQkxBQ0spOwotICAgICAgICAgICAgU2V0RGljdEludCgiQ09MT1JfUkVEIiwgICAgICAgICBDT0xPUl9SRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQ09MT1JfR1JFRU4iLCAgICAgICBDT0xPUl9HUkVFTik7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJDT0xPUl9ZRUxMT1ciLCAgICAgIENPTE9SX1lFTExPVyk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJDT0xPUl9CTFVFIiwgICAgICAgIENPTE9SX0JMVUUpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQ09MT1JfTUFHRU5UQSIsICAgICBDT0xPUl9NQUdFTlRBKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkNPTE9SX0NZQU4iLCAgICAgICAgQ09MT1JfQ1lBTik7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJDT0xPUl9XSElURSIsICAgICAgIENPTE9SX1dISVRFKTsKKyAgICBTZXREaWN0SW50KCJDT0xPUl9CTEFDSyIsICAgICAgIENPTE9SX0JMQUNLKTsKKyAgICBTZXREaWN0SW50KCJDT0xPUl9SRUQiLCAgICAgICAgIENPTE9SX1JFRCk7CisgICAgU2V0RGljdEludCgiQ09MT1JfR1JFRU4iLCAgICAgICBDT0xPUl9HUkVFTik7CisgICAgU2V0RGljdEludCgiQ09MT1JfWUVMTE9XIiwgICAgICBDT0xPUl9ZRUxMT1cpOworICAgIFNldERpY3RJbnQoIkNPTE9SX0JMVUUiLCAgICAgICAgQ09MT1JfQkxVRSk7CisgICAgU2V0RGljdEludCgiQ09MT1JfTUFHRU5UQSIsICAgICBDT0xPUl9NQUdFTlRBKTsKKyAgICBTZXREaWN0SW50KCJDT0xPUl9DWUFOIiwgICAgICAgIENPTE9SX0NZQU4pOworICAgIFNldERpY3RJbnQoIkNPTE9SX1dISVRFIiwgICAgICAgQ09MT1JfV0hJVEUpOwogCiAjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCi0gICAgICAgICAgICAvKiBNb3VzZS1yZWxhdGVkIGNvbnN0YW50cyAqLwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OMV9QUkVTU0VEIiwgICAgICAgICAgQlVUVE9OMV9QUkVTU0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjFfUkVMRUFTRUQiLCAgICAgICAgIEJVVFRPTjFfUkVMRUFTRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OMV9DTElDS0VEIiwgICAgICAgICAgQlVUVE9OMV9DTElDS0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjFfRE9VQkxFX0NMSUNLRUQiLCAgIEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCIsICAgQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCk7CisgICAgLyogTW91c2UtcmVsYXRlZCBjb25zdGFudHMgKi8KKyAgICBTZXREaWN0SW50KCJCVVRUT04xX1BSRVNTRUQiLCAgICAgICAgICBCVVRUT04xX1BSRVNTRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjFfUkVMRUFTRUQiLCAgICAgICAgIEJVVFRPTjFfUkVMRUFTRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjFfQ0xJQ0tFRCIsICAgICAgICAgIEJVVFRPTjFfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCIsICAgQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCIsICAgQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCk7CiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjJfUFJFU1NFRCIsICAgICAgICAgIEJVVFRPTjJfUFJFU1NFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04yX1JFTEVBU0VEIiwgICAgICAgICBCVVRUT04yX1JFTEVBU0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjJfQ0xJQ0tFRCIsICAgICAgICAgIEJVVFRPTjJfQ0xJQ0tFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04yX0RPVUJMRV9DTElDS0VEIiwgICBCVVRUT04yX0RPVUJMRV9DTElDS0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjJfVFJJUExFX0NMSUNLRUQiLCAgIEJVVFRPTjJfVFJJUExFX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjJfUFJFU1NFRCIsICAgICAgICAgIEJVVFRPTjJfUFJFU1NFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OMl9SRUxFQVNFRCIsICAgICAgICAgQlVUVE9OMl9SRUxFQVNFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OMl9DTElDS0VEIiwgICAgICAgICAgQlVUVE9OMl9DTElDS0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04yX0RPVUJMRV9DTElDS0VEIiwgICBCVVRUT04yX0RPVUJMRV9DTElDS0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04yX1RSSVBMRV9DTElDS0VEIiwgICBCVVRUT04yX1RSSVBMRV9DTElDS0VEKTsKIAotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OM19QUkVTU0VEIiwgICAgICAgICAgQlVUVE9OM19QUkVTU0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjNfUkVMRUFTRUQiLCAgICAgICAgIEJVVFRPTjNfUkVMRUFTRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OM19DTElDS0VEIiwgICAgICAgICAgQlVUVE9OM19DTElDS0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjNfRE9VQkxFX0NMSUNLRUQiLCAgIEJVVFRPTjNfRE9VQkxFX0NMSUNLRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OM19UUklQTEVfQ0xJQ0tFRCIsICAgQlVUVE9OM19UUklQTEVfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OM19QUkVTU0VEIiwgICAgICAgICAgQlVUVE9OM19QUkVTU0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04zX1JFTEVBU0VEIiwgICAgICAgICBCVVRUT04zX1JFTEVBU0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04zX0NMSUNLRUQiLCAgICAgICAgICBCVVRUT04zX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjNfRE9VQkxFX0NMSUNLRUQiLCAgIEJVVFRPTjNfRE9VQkxFX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjNfVFJJUExFX0NMSUNLRUQiLCAgIEJVVFRPTjNfVFJJUExFX0NMSUNLRUQpOwogCi0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT040X1BSRVNTRUQiLCAgICAgICAgICBCVVRUT040X1BSRVNTRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9ONF9SRUxFQVNFRCIsICAgICAgICAgQlVUVE9ONF9SRUxFQVNFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT040X0NMSUNLRUQiLCAgICAgICAgICBCVVRUT040X0NMSUNLRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRCIsICAgQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT040X1RSSVBMRV9DTElDS0VEIiwgICBCVVRUT040X1RSSVBMRV9DTElDS0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT040X1BSRVNTRUQiLCAgICAgICAgICBCVVRUT040X1BSRVNTRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjRfUkVMRUFTRUQiLCAgICAgICAgIEJVVFRPTjRfUkVMRUFTRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjRfQ0xJQ0tFRCIsICAgICAgICAgIEJVVFRPTjRfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRCIsICAgQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRCIsICAgQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRCk7CiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTl9TSElGVCIsICAgICAgICAgICAgIEJVVFRPTl9TSElGVCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT05fQ1RSTCIsICAgICAgICAgICAgICBCVVRUT05fQ1RSTCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT05fQUxUIiwgICAgICAgICAgICAgICBCVVRUT05fQUxUKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT05fU0hJRlQiLCAgICAgICAgICAgICBCVVRUT05fU0hJRlQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTl9DVFJMIiwgICAgICAgICAgICAgIEJVVFRPTl9DVFJMKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT05fQUxUIiwgICAgICAgICAgICAgICBCVVRUT05fQUxUKTsKIAotICAgICAgICAgICAgU2V0RGljdEludCgiQUxMX01PVVNFX0VWRU5UUyIsICAgICAgICAgQUxMX01PVVNFX0VWRU5UUyk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJSRVBPUlRfTU9VU0VfUE9TSVRJT04iLCAgICBSRVBPUlRfTU9VU0VfUE9TSVRJT04pOworICAgIFNldERpY3RJbnQoIkFMTF9NT1VTRV9FVkVOVFMiLCAgICAgICAgIEFMTF9NT1VTRV9FVkVOVFMpOworICAgIFNldERpY3RJbnQoIlJFUE9SVF9NT1VTRV9QT1NJVElPTiIsICAgIFJFUE9SVF9NT1VTRV9QT1NJVElPTik7CiAjZW5kaWYKLSAgICAgICAgICAgIC8qIE5vdyBzZXQgZXZlcnl0aGluZyB1cCBmb3IgS0VZXyB2YXJpYWJsZXMgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQga2V5OwotICAgICAgICAgICAgICAgIGNoYXIgKmtleV9uOwotICAgICAgICAgICAgICAgIGNoYXIgKmtleV9uMjsKKyAgICAvKiBOb3cgc2V0IGV2ZXJ5dGhpbmcgdXAgZm9yIEtFWV8gdmFyaWFibGVzICovCisgICAgeworICAgICAgICBpbnQga2V5OworICAgICAgICBjaGFyICprZXlfbjsKKyAgICAgICAgY2hhciAqa2V5X24yOwogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pCi0gICAgICAgICAgICAgICAgZm9yIChrZXk9S0VZX01JTjtrZXkgPCBLRVlfTUFYOyBrZXkrKykgewotICAgICAgICAgICAgICAgICAgICBrZXlfbiA9IChjaGFyICopa2V5bmFtZShrZXkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoa2V5X24gPT0gTlVMTCB8fCBzdHJjbXAoa2V5X24sIlVOS05PV04gS0VZIik9PTApCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm5jbXAoa2V5X24sIktFWV9GKCIsNik9PTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnAxLCAqcDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXlfbjIgPSBtYWxsb2Moc3RybGVuKGtleV9uKSsxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgha2V5X24yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHAxID0ga2V5X247Ci0gICAgICAgICAgICAgICAgICAgICAgICBwMiA9IGtleV9uMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnAxICE9ICcoJyAmJiAqcDEgIT0gJyknKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwMiA9ICpwMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDErKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICpwMiA9IChjaGFyKTA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAga2V5X24yID0ga2V5X247Ci0gICAgICAgICAgICAgICAgICAgIFNldERpY3RJbnQoa2V5X24yLGtleSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrZXlfbjIgIT0ga2V5X24pCi0gICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGtleV9uMik7CisgICAgICAgIGZvciAoa2V5PUtFWV9NSU47a2V5IDwgS0VZX01BWDsga2V5KyspIHsKKyAgICAgICAgICAgIGtleV9uID0gKGNoYXIgKilrZXluYW1lKGtleSk7CisgICAgICAgICAgICBpZiAoa2V5X24gPT0gTlVMTCB8fCBzdHJjbXAoa2V5X24sIlVOS05PV04gS0VZIik9PTApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3RybmNtcChrZXlfbiwiS0VZX0YoIiw2KT09MCkgeworICAgICAgICAgICAgICAgIGNoYXIgKnAxLCAqcDI7CisgICAgICAgICAgICAgICAga2V5X24yID0gbWFsbG9jKHN0cmxlbihrZXlfbikrMSk7CisgICAgICAgICAgICAgICAgaWYgKCFrZXlfbjIpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICAgICAgU2V0RGljdEludCgiS0VZX01JTiIsIEtFWV9NSU4pOwotICAgICAgICAgICAgICAgIFNldERpY3RJbnQoIktFWV9NQVgiLCBLRVlfTUFYKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwMSA9IGtleV9uOworICAgICAgICAgICAgICAgIHAyID0ga2V5X24yOworICAgICAgICAgICAgICAgIHdoaWxlICgqcDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpwMSAhPSAnKCcgJiYgKnAxICE9ICcpJykgeworICAgICAgICAgICAgICAgICAgICAgICAgKnAyID0gKnAxOworICAgICAgICAgICAgICAgICAgICAgICAgcDIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwMSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcDIgPSAoY2hhcikwOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAga2V5X24yID0ga2V5X247CisgICAgICAgICAgICBTZXREaWN0SW50KGtleV9uMixrZXkpOworICAgICAgICAgICAgaWYgKGtleV9uMiAhPSBrZXlfbikKKyAgICAgICAgICAgICAgICBmcmVlKGtleV9uMik7CiAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBTZXREaWN0SW50KCJLRVlfTUlOIiwgS0VZX01JTik7CisgICAgICAgIFNldERpY3RJbnQoIktFWV9NQVgiLCBLRVlfTUFYKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19lbGVtZW50dHJlZS5jIGIvTW9kdWxlcy9fZWxlbWVudHRyZWUuYwppbmRleCA2ODQwODFjLi40MzExYmEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCisrKyBiL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKQEAgLTEsMjEgKzEsMTUgQEAKIC8qCiAgKiBFbGVtZW50VHJlZQotICogJElkOiBfZWxlbWVudHRyZWUuYyAyNjU3IDIwMDYtMDMtMTIgMjA6NTA6MzJaIGZyZWRyaWsgJAorICogJElkOiBfZWxlbWVudHRyZWUuYyAzNDczIDIwMDktMDEtMTEgMjI6NTM6NTVaIGZyZWRyaWsgJAogICoKICAqIGVsZW1lbnR0cmVlIGFjY2VsZXJhdG9yCiAgKgogICogSGlzdG9yeToKICAqIDE5OTktMDYtMjAgZmwgIGNyZWF0ZWQgKGFzIHBhcnQgb2Ygc2dtbG9wKQogICogMjAwMS0wNS0yOSBmbCAgZWZmZG9tIGVkaXRpb24KLSAqIDIwMDEtMDYtMDUgZmwgIGJhY2twb3J0ZWQgdG8gdW5peDsgZml4ZWQgYm9ndXMgZnJlZSBpbiBjbGVhcgotICogMjAwMS0wNy0xMCBmbCAgYWRkZWQgZmluZGFsbCBoZWxwZXIKICAqIDIwMDMtMDItMjcgZmwgIGVsZW1lbnR0cmVlIGVkaXRpb24gKGFscGhhKQogICogMjAwNC0wNi0wMyBmbCAgdXBkYXRlcyBmb3IgZWxlbWVudHRyZWUgMS4yCi0gKiAyMDA1LTAxLTA1IGZsICBhZGRlZCB1bml2ZXJzYWwgbmFtZSBjYWNoZSwgRWxlbWVudC9TdWJFbGVtZW50IGZhY3RvcmllcwotICogMjAwNS0wMS0wNiBmbCAgbW92ZWQgcHl0aG9uIGhlbHBlcnMgaW50byBDIG1vZHVsZTsgcmVtb3ZlZCAxLjUuMiBzdXBwb3J0Ci0gKiAyMDA1LTAxLTA3IGZsICBhZGRlZCAyLjEgc3VwcG9ydDsgd29yayBhcm91bmQgYnJva2VuIF9fY29weV9fIGluIDIuMwotICogMjAwNS0wMS0wOCBmbCAgYWRkZWQgbWFrZWVsZW1lbnQgbWV0aG9kOyBmaXhlZCBwYXRoIHN1cHBvcnQKLSAqIDIwMDUtMDEtMTAgZmwgIG9wdGltaXplZCBtZW1vcnkgdXNhZ2UKKyAqIDIwMDUtMDEtMDUgZmwgIG1ham9yIG9wdGltaXphdGlvbiBlZmZvcnQKICAqIDIwMDUtMDEtMTEgZmwgIGZpcnN0IHB1YmxpYyByZWxlYXNlIChjRWxlbWVudFRyZWUgMC44KQogICogMjAwNS0wMS0xMiBmbCAgc3BsaXQgZWxlbWVudCBvYmplY3QgaW50byBiYXNlIGFuZCBleHRyYXMKICAqIDIwMDUtMDEtMTMgZmwgIHVzZSB0YWdnZWQgcG9pbnRlcnMgZm9yIHRhaWwvdGV4dCAoY0VsZW1lbnRUcmVlIDAuOSkKQEAgLTM1LDE2ICsyOSwyMyBAQAogICogMjAwNS0xMi0xNiBmbCAgYWRkZWQgc3VwcG9ydCBmb3Igbm9uLXN0YW5kYXJkIGVuY29kaW5ncwogICogMjAwNi0wMy0wOCBmbCAgZml4ZWQgYSBjb3VwbGUgb2YgcG90ZW50aWFsIG51bGwtcmVmcyBhbmQgbGVha3MKICAqIDIwMDYtMDMtMTIgZmwgIG1lcmdlIGluIDIuNSBzc2l6ZV90IGNoYW5nZXMKKyAqIDIwMDctMDgtMjUgZmwgIGNhbGwgY3VzdG9tIGJ1aWxkZXIncyBjbG9zZSBtZXRob2QgZnJvbSBYTUxQYXJzZXIKKyAqIDIwMDctMDgtMzEgZmwgIGFkZGVkIGl0ZXIsIGV4dGVuZCBmcm9tIEVUIDEuMworICogMjAwNy0wOS0wMSBmbCAgZml4ZWQgUGFyc2VFcnJvciBleGNlcHRpb24sIHNldHNsaWNlIHNvdXJjZSB0eXBlLCBldGMKKyAqIDIwMDctMDktMDMgZmwgIGZpeGVkIGhhbmRsaW5nIG9mIG5lZ2F0aXZlIGluc2VydCBpbmRleGVzCisgKiAyMDA3LTA5LTA0IGZsICBhZGRlZCBpdGVydGV4dCBmcm9tIEVUIDEuMworICogMjAwNy0wOS0wNiBmbCAgYWRkZWQgcG9zaXRpb24gYXR0cmlidXRlIHRvIFBhcnNlRXJyb3IgZXhjZXB0aW9uCisgKiAyMDA4LTA2LTA2IGZsICBkZWxheSBlcnJvciByZXBvcnRpbmcgaW4gaXRlcnBhcnNlIChmcm9tIEhydm9qZSBOaWtzaWMpCiAgKgotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgYnkgRnJlZHJpayBMdW5kaC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IEZyZWRyaWsgTHVuZGguCiAgKgogICogaW5mb0BweXRob253YXJlLmNvbQogICogaHR0cDovL3d3dy5weXRob253YXJlLmNvbQogICovCiAKIC8qIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4gKi8KLS8qIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi40L2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLiAqLworLyogU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKIApAQCAtNTYsNyArNTcsNyBAQAogLyogTGVhdmUgZGVmaW5lZCB0byBpbmNsdWRlIHRoZSBleHBhdC1iYXNlZCBYTUxQYXJzZXIgdHlwZSAqLwogI2RlZmluZSBVU0VfRVhQQVQKIAotLyogRGVmaW5lIHRvIHRvIGFsbCBleHBhdCBjYWxscyB2aWEgcHlleHBhdCdzIGVtYmVkZGVkIGV4cGF0IGxpYnJhcnkgKi8KKy8qIERlZmluZSB0byBkbyBhbGwgZXhwYXQgY2FsbHMgdmlhIHB5ZXhwYXQncyBlbWJlZGRlZCBleHBhdCBsaWJyYXJ5ICovCiAvKiAjZGVmaW5lIFVTRV9QWUVYUEFUX0NBUEkgKi8KIAogLyogQW4gZWxlbWVudCBjYW4gaG9sZCB0aGlzIG1hbnkgY2hpbGRyZW4gd2l0aG91dCBleHRyYSBtZW1vcnkKQEAgLTk0LDYgKzk1LDExIEBACiAjZW5kaWYKIAogLyogY29tcGF0aWJpbGl0eSBtYWNyb3MgKi8KKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDYwMDAwKQorI2RlZmluZSBQeV9SRUZDTlQob2IpICgoKFB5T2JqZWN0Kikob2IpKS0+b2JfcmVmY250KQorI2RlZmluZSBQeV9UWVBFKG9iKSAoKChQeU9iamVjdCopKG9iKSktPm9iX3R5cGUpCisjZW5kaWYKKwogI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCiB0eXBlZGVmIGludCBQeV9zc2l6ZV90OwogI2RlZmluZSBsZW5mdW5jIGlucXVpcnkKQEAgLTEwMSwxOCArMTA3LDExIEBACiAKICNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDQwMDAwKQogI2RlZmluZSBQeURpY3RfQ2hlY2tFeGFjdCBQeURpY3RfQ2hlY2sKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDIwMDAwKQotI2RlZmluZSBQeUxpc3RfQ2hlY2tFeGFjdCBQeUxpc3RfQ2hlY2sKLSNkZWZpbmUgUHlTdHJpbmdfQ2hlY2tFeGFjdCBQeVN0cmluZ19DaGVjawotI2lmIChQWV9WRVJTSU9OX0hFWCA+PSAweDAxMDYwMDAwKQotI2RlZmluZSBQeV9VU0lOR19VTklDT0RFIC8qIGFsd2F5cyBlbmFibGVkIGZvciAyLjAgYW5kIDIuMSAqLwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgogCiAjaWYgIWRlZmluZWQoUHlfUkVUVVJOX05PTkUpCiAjZGVmaW5lIFB5X1JFVFVSTl9OT05FIHJldHVybiBQeV9JTkNSRUYoUHlfTm9uZSksIFB5X05vbmUKICNlbmRpZgorI2VuZGlmCiAKIC8qIG1hY3JvcyB1c2VkIHRvIHN0b3JlICdqb2luJyBmbGFncyBpbiBzdHJpbmcgb2JqZWN0IHBvaW50ZXJzLiAgbm90ZQogICAgdGhhdCBhbGwgdXNlIG9mIHRleHQgYW5kIHRhaWwgYXMgb2JqZWN0IHBvaW50ZXJzIG11c3QgYmUgd3JhcHBlZCBpbgpAQCAtMTIzLDkgKzEyMiwxMSBAQAogI2RlZmluZSBKT0lOX09CSihwKSAoKFB5T2JqZWN0KikgKChQeV91aW50cHRyX3QpIChwKSAmIH4xKSkKIAogLyogZ2x1ZSBmdW5jdGlvbnMgKHNlZSB0aGUgaW5pdCBmdW5jdGlvbiBmb3IgZGV0YWlscykgKi8KK3N0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmo7CiBzdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX2NvcHllbGVtZW50X29iajsKIHN0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqOwotc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9nZXRpdGVyYXRvcl9vYmo7CitzdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX2l0ZXJfb2JqOworc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9pdGVydGV4dF9vYmo7CiBzdGF0aWMgUHlPYmplY3QqIGVsZW1lbnRwYXRoX29iajsKIAogLyogaGVscGVycyAqLwpAQCAtMjA5LDIzICsyMTAsNiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDIwMDAwKQotTE9DQUwoaW50KQotUHlEaWN0X1VwZGF0ZShQeU9iamVjdCogZGljdCwgUHlPYmplY3QqIG90aGVyKQotewotICAgIC8qIFB5RGljdF9VcGRhdGUgZW11bGF0aW9uIGZvciAyLjEgYW5kIGVhcmxpZXIgKi8KLQotICAgIFB5T2JqZWN0KiByZXM7Ci0gICAgCi0gICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChkaWN0LCAidXBkYXRlIiwgIk8iLCBvdGhlcik7Ci0gICAgaWYgKCFyZXMpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFB5X0RFQ1JFRihyZXMpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiB0aGUgZWxlbWVudCB0eXBlICovCiAKQEAgLTMzMCw3ICszMTQsNyBAQAogICAgICAgICBpZiAoZWxlbWVudF9uZXdfZXh0cmEoc2VsZiwgYXR0cmliKSA8IDApIHsKICAgICAgICAgICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCX0KKyAgICAgICAgfQogCiAgICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGggPSAwOwogICAgICAgICBzZWxmLT5leHRyYS0+YWxsb2NhdGVkID0gU1RBVElDX0NISUxEUkVOOwpAQCAtNDI4LDYgKzQxMiw3IEBACiAgICAgUHlPYmplY3QqIHJlcyA9IHNlbGYtPmV4dHJhLT5hdHRyaWI7CiAKICAgICBpZiAocmVzID09IFB5X05vbmUpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIC8qIGNyZWF0ZSBtaXNzaW5nIGRpY3Rpb25hcnkgKi8KICAgICAgICAgcmVzID0gUHlEaWN0X05ldygpOwogICAgICAgICBpZiAoIXJlcykKQEAgLTcwOSw2ICs2OTQsOCBAQAogCiAgICAgLyogYWRkIG9iamVjdCB0byBtZW1vIGRpY3Rpb25hcnkgKHNvIGRlZXBjb3B5IHdvbid0IHZpc2l0IGl0IGFnYWluKSAqLwogICAgIGlkID0gUHlJbnRfRnJvbUxvbmcoKFB5X3VpbnRwdHJfdCkgc2VsZik7CisgICAgaWYgKCFpZCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGkgPSBQeURpY3RfU2V0SXRlbShtZW1vLCBpZCwgKFB5T2JqZWN0KikgZWxlbWVudCk7CiAKQEAgLTczMiw3ICs3MTksOCBAQAogCiAgICAgLyogY2hlY2sgaWYgYSB0YWcgY29udGFpbnMgYW4geHBhdGggY2hhcmFjdGVyICovCiAKLSNkZWZpbmUgUEFUSENIQVIoY2gpIChjaCA9PSAnLycgfHwgY2ggPT0gJyonIHx8IGNoID09ICdbJyB8fCBjaCA9PSAnQCcpCisjZGVmaW5lIFBBVEhDSEFSKGNoKSBcCisgICAgKGNoID09ICcvJyB8fCBjaCA9PSAnKicgfHwgY2ggPT0gJ1snIHx8IGNoID09ICdAJyB8fCBjaCA9PSAnLicpCiAKICNpZiBkZWZpbmVkKFB5X1VTSU5HX1VOSUNPREUpCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayh0YWcpKSB7CkBAIC03NjUsMTcgKzc1Myw1MSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QqCitlbGVtZW50X2V4dGVuZChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBQeU9iamVjdCogc2VxOworICAgIFB5X3NzaXplX3QgaSwgc2VxbGVuID0gMDsKKworICAgIFB5T2JqZWN0KiBzZXFfaW47CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmV4dGVuZCIsICZzZXFfaW4pKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChzZXFfaW4sICIiKTsKKyAgICBpZiAoIXNlcSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiZXhwZWN0ZWQgc2VxdWVuY2UsIG5vdCBcIiUuMjAwc1wiIiwgUHlfVFlQRShzZXFfaW4pLT50cF9uYW1lCisgICAgICAgICAgICApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZXFsZW4gPSBQeVNlcXVlbmNlX1NpemUoc2VxKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QqIGVsZW1lbnQgPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKKyAgICAgICAgaWYgKGVsZW1lbnRfYWRkX3N1YmVsZW1lbnQoc2VsZiwgZWxlbWVudCkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgUHlfREVDUkVGKHNlcSk7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9maW5kKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIGludCBpOwogCiAgICAgUHlPYmplY3QqIHRhZzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZmluZCIsICZ0YWcpKQorICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TzpmaW5kIiwgJnRhZywgJm5hbWVzcGFjZXMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChjaGVja3BhdGgodGFnKSkKKyAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZCgKLSAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgImZpbmQiLCAiT08iLCBzZWxmLCB0YWcKKyAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgImZpbmQiLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogCiAgICAgaWYgKCFzZWxmLT5leHRyYSkKQEAgLTgwMCwxMiArODIyLDEzIEBACiAKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiBkZWZhdWx0X3ZhbHVlID0gUHlfTm9uZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TzpmaW5kdGV4dCIsICZ0YWcsICZkZWZhdWx0X3ZhbHVlKSkKKyAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfE9POmZpbmR0ZXh0IiwgJnRhZywgJmRlZmF1bHRfdmFsdWUsICZuYW1lc3BhY2VzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoY2hlY2twYXRoKHRhZykpCisgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2QoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICJmaW5kdGV4dCIsICJPT08iLCBzZWxmLCB0YWcsIGRlZmF1bHRfdmFsdWUKKyAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgImZpbmR0ZXh0IiwgIk9PT08iLCBzZWxmLCB0YWcsIGRlZmF1bHRfdmFsdWUsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAKICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CkBAIC04MzUsMTIgKzg1OCwxMyBAQAogICAgIFB5T2JqZWN0KiBvdXQ7CiAKICAgICBQeU9iamVjdCogdGFnOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpmaW5kYWxsIiwgJnRhZykpCisgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xPOmZpbmRhbGwiLCAmdGFnLCAmbmFtZXNwYWNlcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGNoZWNrcGF0aCh0YWcpKQorICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpCiAgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAiZmluZGFsbCIsICJPTyIsIHNlbGYsIHRhZworICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAiZmluZGFsbCIsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAKICAgICBvdXQgPSBQeUxpc3RfTmV3KDApOwpAQCAtODY1LDYgKzg4OSwxOSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QqCitlbGVtZW50X2l0ZXJmaW5kKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIFB5T2JqZWN0KiB0YWc7CisgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xPOml0ZXJmaW5kIiwgJnRhZywgJm5hbWVzcGFjZXMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKAorICAgICAgICBlbGVtZW50cGF0aF9vYmosICJpdGVyZmluZCIsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKKyAgICAgICAgKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9nZXQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgUHlPYmplY3QqIHZhbHVlOwpAQCAtODkyLDYgKzkyOSw4IEBACiAgICAgaW50IGk7CiAgICAgUHlPYmplY3QqIGxpc3Q7CiAKKyAgICAvKiBGSVhNRTogcmVwb3J0IGFzIGRlcHJlY2F0ZWQ/ICovCisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjpnZXRjaGlsZHJlbiIpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtOTEyLDE4ICs5NTEsMTggQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgotZWxlbWVudF9nZXRpdGVyYXRvcihFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK2VsZW1lbnRfaXRlcihFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICBQeU9iamVjdCogcmVzdWx0OwogICAgIAogICAgIFB5T2JqZWN0KiB0YWcgPSBQeV9Ob25lOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86Z2V0aXRlcmF0b3IiLCAmdGFnKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOml0ZXIiLCAmdGFnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIWVsZW1lbnR0cmVlX2dldGl0ZXJhdG9yX29iaikgeworICAgIGlmICghZWxlbWVudHRyZWVfaXRlcl9vYmopIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgImdldGl0ZXJhdG9yIGhlbHBlciBub3QgZm91bmQiCisgICAgICAgICAgICAiaXRlciBoZWxwZXIgbm90IGZvdW5kIgogICAgICAgICAgICAgKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtOTM1LDcgKzk3NCwzNyBAQAogICAgIFB5X0lOQ1JFRihzZWxmKTsgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCAoUHlPYmplY3QqKSBzZWxmKTsKICAgICBQeV9JTkNSRUYodGFnKTsgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMSwgKFB5T2JqZWN0KikgdGFnKTsKIAotICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZWxlbWVudHRyZWVfZ2V0aXRlcmF0b3Jfb2JqLCBhcmdzKTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGVsZW1lbnR0cmVlX2l0ZXJfb2JqLCBhcmdzKTsKKworICAgIFB5X0RFQ1JFRihhcmdzKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIFB5T2JqZWN0KgorZWxlbWVudF9pdGVydGV4dChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBQeU9iamVjdCogcmVzdWx0OworICAgIAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOml0ZXJ0ZXh0IikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFlbGVtZW50dHJlZV9pdGVydGV4dF9vYmopIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgIml0ZXJ0ZXh0IGhlbHBlciBub3QgZm91bmQiCisgICAgICAgICAgICApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBhcmdzID0gUHlUdXBsZV9OZXcoMSk7CisgICAgaWYgKCFhcmdzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRihzZWxmKTsgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCAoUHlPYmplY3QqKSBzZWxmKTsKKworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZWxlbWVudHRyZWVfaXRlcnRleHRfb2JqLCBhcmdzKTsKIAogICAgIFB5X0RFQ1JFRihhcmdzKTsKIApAQCAtOTYwLDM5ICsxMDI5LDYgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgotZWxlbWVudF9nZXRzbGljZShQeU9iamVjdCogc2VsZl8sIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQotewotICAgIEVsZW1lbnRPYmplY3QqIHNlbGYgPSAoRWxlbWVudE9iamVjdCopIHNlbGZfOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCogbGlzdDsKLQotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIHJldHVybiBQeUxpc3RfTmV3KDApOwotCi0gICAgLyogc3RhbmRhcmQgY2xhbXBpbmcgKi8KLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBzdGFydCA9IDA7Ci0gICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCA9IDA7Ci0gICAgaWYgKGVuZCA+IHNlbGYtPmV4dHJhLT5sZW5ndGgpCi0gICAgICAgIGVuZCA9IHNlbGYtPmV4dHJhLT5sZW5ndGg7Ci0gICAgaWYgKHN0YXJ0ID4gZW5kKQotICAgICAgICBzdGFydCA9IGVuZDsKLQotICAgIGxpc3QgPSBQeUxpc3RfTmV3KGVuZCAtIHN0YXJ0KTsKLSAgICBpZiAoIWxpc3QpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotICAgICAgICBQeU9iamVjdCogaXRlbSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKLSAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSAtIHN0YXJ0LCBpdGVtKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLX0KLQotc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9pbnNlcnQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgaW50IGk7CkBAIC0xMDA2LDggKzEwNDIsMTEgQEAKICAgICBpZiAoIXNlbGYtPmV4dHJhKQogICAgICAgICBlbGVtZW50X25ld19leHRyYShzZWxmLCBOVUxMKTsKIAotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgIGluZGV4ID0gMDsKKyAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgIGluZGV4ICs9IHNlbGYtPmV4dHJhLT5sZW5ndGg7CisgICAgICAgIGlmIChpbmRleCA8IDApCisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgfQogICAgIGlmIChpbmRleCA+IHNlbGYtPmV4dHJhLT5sZW5ndGgpCiAgICAgICAgIGluZGV4ID0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKIApAQCAtMTE1MSwxNSArMTE5MCwxNiBAQAogc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9yZXByKEVsZW1lbnRPYmplY3QqIHNlbGYpCiB7Ci0gICAgUHlPYmplY3QqIHJlcHI7Ci0gICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICAKLSAgICByZXByID0gUHlTdHJpbmdfRnJvbVN0cmluZygiPEVsZW1lbnQgIik7CisgICAgUHlPYmplY3QgKnJlcHIsICp0YWc7CiAKLSAgICBQeVN0cmluZ19Db25jYXRBbmREZWwoJnJlcHIsIFB5T2JqZWN0X1JlcHIoc2VsZi0+dGFnKSk7CisgICAgdGFnID0gUHlPYmplY3RfUmVwcihzZWxmLT50YWcpOworICAgIGlmICghdGFnKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNwcmludGYoYnVmZmVyLCAiIGF0ICVwPiIsIHNlbGYpOwotICAgIFB5U3RyaW5nX0NvbmNhdEFuZERlbCgmcmVwciwgUHlTdHJpbmdfRnJvbVN0cmluZyhidWZmZXIpKTsKKyAgICByZXByID0gUHlTdHJpbmdfRnJvbUZvcm1hdCgiPEVsZW1lbnQgJXMgYXQgJXA+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcodGFnKSwgc2VsZik7CisKKyAgICBQeV9ERUNSRUYodGFnKTsKIAogICAgIHJldHVybiByZXByOwogfQpAQCAtMTE4OCw3NyArMTIyOCw2IEBACiB9CiAKIHN0YXRpYyBpbnQKLWVsZW1lbnRfc2V0c2xpY2UoUHlPYmplY3QqIHNlbGZfLCBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCwgUHlPYmplY3QqIGl0ZW0pCi17Ci0gICAgRWxlbWVudE9iamVjdCogc2VsZiA9IChFbGVtZW50T2JqZWN0Kikgc2VsZl87Ci0gICAgUHlfc3NpemVfdCBpLCBuZXcsIG9sZDsKLSAgICBQeU9iamVjdCogcmVjeWNsZSA9IE5VTEw7Ci0KLSAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICBlbGVtZW50X25ld19leHRyYShzZWxmLCBOVUxMKTsKLQotICAgIC8qIHN0YW5kYXJkIGNsYW1waW5nICovCi0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgPSAwOwotICAgIGlmIChlbmQgPCAwKQotICAgICAgICBlbmQgPSAwOwotICAgIGlmIChlbmQgPiBzZWxmLT5leHRyYS0+bGVuZ3RoKQotICAgICAgICBlbmQgPSBzZWxmLT5leHRyYS0+bGVuZ3RoOwotICAgIGlmIChzdGFydCA+IGVuZCkKLSAgICAgICAgc3RhcnQgPSBlbmQ7Ci0KLSAgICBvbGQgPSBlbmQgLSBzdGFydDsKLQotICAgIGlmIChpdGVtID09IE5VTEwpCi0gICAgICAgIG5ldyA9IDA7Ci0gICAgZWxzZSBpZiAoUHlMaXN0X0NoZWNrRXhhY3QoaXRlbSkpIHsKLSAgICAgICAgbmV3ID0gUHlMaXN0X0dFVF9TSVpFKGl0ZW0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIEZJWE1FOiBzdXBwb3J0IGFyYml0cmFyeSBzZXF1ZW5jZXM/ICovCi0gICAgICAgIFB5RXJyX0Zvcm1hdCgKLSAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJleHBlY3RlZCBsaXN0LCBub3QgXCIlLjIwMHNcIiIsIFB5X1RZUEUoaXRlbSktPnRwX25hbWUKLSAgICAgICAgICAgICk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAob2xkID4gMCkgewotICAgICAgICAvKiB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgdG8gdGhpcyBtZXRob2QgKHZpYSBkZWNyZWYpLCBtb3ZlCi0gICAgICAgICAgIG9sZCBpdGVtcyB0byB0aGUgcmVjeWNsZSBiaW4gaGVyZSwgYW5kIGdldCByaWQgb2YgdGhlbSB3aGVuCi0gICAgICAgICAgIHdlJ3JlIGRvbmUgbW9kaWZ5aW5nIHRoZSBlbGVtZW50ICovCi0gICAgICAgIHJlY3ljbGUgPSBQeUxpc3RfTmV3KG9sZCk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvbGQ7IGkrKykKLSAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShyZWN5Y2xlLCBpLCBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baSArIHN0YXJ0XSk7Ci0gICAgfQotCi0gICAgaWYgKG5ldyA8IG9sZCkgewotICAgICAgICAvKiBkZWxldGUgc2xpY2UgKi8KLSAgICAgICAgZm9yIChpID0gZW5kOyBpIDwgc2VsZi0+ZXh0cmEtPmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2kgKyBuZXcgLSBvbGRdID0gc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldOwotICAgIH0gZWxzZSBpZiAobmV3ID4gb2xkKSB7Ci0gICAgICAgIC8qIGluc2VydCBzbGljZSAqLwotICAgICAgICBpZiAoZWxlbWVudF9yZXNpemUoc2VsZiwgbmV3IC0gb2xkKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGZvciAoaSA9IHNlbGYtPmV4dHJhLT5sZW5ndGgtMTsgaSA+PSBlbmQ7IGktLSkKLSAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpICsgbmV3IC0gb2xkXSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKLSAgICB9Ci0KLSAgICAvKiByZXBsYWNlIHRoZSBzbGljZSAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBuZXc7IGkrKykgewotICAgICAgICBQeU9iamVjdCogZWxlbWVudCA9IFB5TGlzdF9HRVRfSVRFTShpdGVtLCBpKTsKLSAgICAgICAgUHlfSU5DUkVGKGVsZW1lbnQpOwotICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baSArIHN0YXJ0XSA9IGVsZW1lbnQ7Ci0gICAgfQotCi0gICAgc2VsZi0+ZXh0cmEtPmxlbmd0aCArPSBuZXcgLSBvbGQ7Ci0KLSAgICAvKiBkaXNjYXJkIHRoZSByZWN5Y2xlIGJpbiwgYW5kIGV2ZXJ5dGhpbmcgaW4gaXQgKi8KLSAgICBQeV9YREVDUkVGKHJlY3ljbGUpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKIGVsZW1lbnRfc2V0aXRlbShQeU9iamVjdCogc2VsZl8sIFB5X3NzaXplX3QgaW5kZXgsIFB5T2JqZWN0KiBpdGVtKQogewogICAgIEVsZW1lbnRPYmplY3QqIHNlbGYgPSAoRWxlbWVudE9iamVjdCopIHNlbGZfOwpAQCAtMTI4OCw2ICsxMjU3LDE5MCBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgUHlPYmplY3QqCitlbGVtZW50X3N1YnNjcihQeU9iamVjdCogc2VsZl8sIFB5T2JqZWN0KiBpdGVtKQoreworICAgIEVsZW1lbnRPYmplY3QqIHNlbGYgPSAoRWxlbWVudE9iamVjdCopIHNlbGZfOworCisjaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKKyAgICBpZiAoUHlJbnRfQ2hlY2soaXRlbSkgfHwgUHlMb25nX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgIGxvbmcgaSA9IFB5SW50X0FzTG9uZyhpdGVtKTsKKyNlbHNlCisgICAgaWYgKFB5SW5kZXhfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpID0gUHlOdW1iZXJfQXNTc2l6ZV90KGl0ZW0sIFB5RXhjX0luZGV4RXJyb3IpOworI2VuZGlmCisKKyAgICAgICAgaWYgKGkgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPCAwICYmIHNlbGYtPmV4dHJhKQorICAgICAgICAgICAgaSArPSBzZWxmLT5leHRyYS0+bGVuZ3RoOworICAgICAgICByZXR1cm4gZWxlbWVudF9nZXRpdGVtKHNlbGZfLCBpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpdGVtKSkgeworICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbiwgY3VyLCBpOworICAgICAgICBQeU9iamVjdCogbGlzdDsKKworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQorICAgICAgICAgICAgcmV0dXJuIFB5TGlzdF9OZXcoMCk7CisKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeVNsaWNlT2JqZWN0ICopaXRlbSwKKyAgICAgICAgICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoLAorICAgICAgICAgICAgICAgICZzdGFydCwgJnN0b3AsICZzdGVwLCAmc2xpY2VsZW4pIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2xpY2VsZW4gPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBQeUxpc3RfTmV3KDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxpc3QgPSBQeUxpc3RfTmV3KHNsaWNlbGVuKTsKKyAgICAgICAgICAgIGlmICghbGlzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgZm9yIChjdXIgPSBzdGFydCwgaSA9IDA7IGkgPCBzbGljZWxlbjsKKyAgICAgICAgICAgICAgICAgY3VyICs9IHN0ZXAsIGkrKykgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBpdGVtID0gc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2N1cl07CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBpLCBpdGVtKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgImVsZW1lbnQgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIGludAorZWxlbWVudF9hc3Nfc3Vic2NyKFB5T2JqZWN0KiBzZWxmXywgUHlPYmplY3QqIGl0ZW0sIFB5T2JqZWN0KiB2YWx1ZSkKK3sKKyAgICBFbGVtZW50T2JqZWN0KiBzZWxmID0gKEVsZW1lbnRPYmplY3QqKSBzZWxmXzsKKworI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCisgICAgaWYgKFB5SW50X0NoZWNrKGl0ZW0pIHx8IFB5TG9uZ19DaGVjayhpdGVtKSkgeworICAgICAgICBsb25nIGkgPSBQeUludF9Bc0xvbmcoaXRlbSk7CisjZWxzZQorICAgIGlmIChQeUluZGV4X0NoZWNrKGl0ZW0pKSB7CisgICAgICAgIFB5X3NzaXplX3QgaSA9IFB5TnVtYmVyX0FzU3NpemVfdChpdGVtLCBQeUV4Y19JbmRleEVycm9yKTsKKyNlbmRpZgorCisgICAgICAgIGlmIChpID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA8IDAgJiYgc2VsZi0+ZXh0cmEpCisgICAgICAgICAgICBpICs9IHNlbGYtPmV4dHJhLT5sZW5ndGg7CisgICAgICAgIHJldHVybiBlbGVtZW50X3NldGl0ZW0oc2VsZl8sIGksIHZhbHVlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpdGVtKSkgeworICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbiwgbmV3bGVuLCBjdXIsIGk7CisKKyAgICAgICAgUHlPYmplY3QqIHJlY3ljbGUgPSBOVUxMOworICAgICAgICBQeU9iamVjdCogc2VxID0gTlVMTDsKKworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQorICAgICAgICAgICAgZWxlbWVudF9uZXdfZXh0cmEoc2VsZiwgTlVMTCk7CisKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeVNsaWNlT2JqZWN0ICopaXRlbSwKKyAgICAgICAgICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoLAorICAgICAgICAgICAgICAgICZzdGFydCwgJnN0b3AsICZzdGVwLCAmc2xpY2VsZW4pIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgICAgICAgICBuZXdsZW4gPSAwOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdCh2YWx1ZSwgIiIpOworICAgICAgICAgICAgaWYgKCFzZXEpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHNlcXVlbmNlLCBub3QgXCIlLjIwMHNcIiIsIFB5X1RZUEUodmFsdWUpLT50cF9uYW1lCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3bGVuID0gUHlTZXF1ZW5jZV9TaXplKHNlcSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RlcCAhPSAgMSAmJiBuZXdsZW4gIT0gc2xpY2VsZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCisgICAgICAgICAgICAgICAgImF0dGVtcHQgdG8gYXNzaWduIHNlcXVlbmNlIG9mIHNpemUgJWQgIgorICAgICAgICAgICAgICAgICJ0byBleHRlbmRlZCBzbGljZSBvZiBzaXplICVkIiwKKyNlbHNlCisgICAgICAgICAgICAgICAgImF0dGVtcHQgdG8gYXNzaWduIHNlcXVlbmNlIG9mIHNpemUgJXpkICIKKyAgICAgICAgICAgICAgICAidG8gZXh0ZW5kZWQgc2xpY2Ugb2Ygc2l6ZSAlemQiLAorI2VuZGlmCisgICAgICAgICAgICAgICAgbmV3bGVuLCBzbGljZWxlbgorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworCisgICAgICAgIC8qIFJlc2l6ZSBiZWZvcmUgY3JlYXRpbmcgdGhlIHJlY3ljbGUgYmluLCB0byBwcmV2ZW50IHJlZmxlYWtzLiAqLworICAgICAgICBpZiAobmV3bGVuID4gc2xpY2VsZW4pIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50X3Jlc2l6ZShzZWxmLCBuZXdsZW4gLSBzbGljZWxlbikgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHNlcSkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNsaWNlbGVuID4gMCkgeworICAgICAgICAgICAgLyogdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIHRvIHRoaXMgbWV0aG9kICh2aWEgZGVjcmVmKSwgbW92ZQorICAgICAgICAgICAgICAgb2xkIGl0ZW1zIHRvIHRoZSByZWN5Y2xlIGJpbiBoZXJlLCBhbmQgZ2V0IHJpZCBvZiB0aGVtIHdoZW4KKyAgICAgICAgICAgICAgIHdlJ3JlIGRvbmUgbW9kaWZ5aW5nIHRoZSBlbGVtZW50ICovCisgICAgICAgICAgICByZWN5Y2xlID0gUHlMaXN0X05ldyhzbGljZWxlbik7CisgICAgICAgICAgICBpZiAoIXJlY3ljbGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VxKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOworICAgICAgICAgICAgICAgICBjdXIgKz0gc3RlcCwgaSsrKQorICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShyZWN5Y2xlLCBpLCBzZWxmLT5leHRyYS0+Y2hpbGRyZW5bY3VyXSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmV3bGVuIDwgc2xpY2VsZW4pIHsKKyAgICAgICAgICAgIC8qIGRlbGV0ZSBzbGljZSAqLworICAgICAgICAgICAgZm9yIChpID0gc3RvcDsgaSA8IHNlbGYtPmV4dHJhLT5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baSArIG5ld2xlbiAtIHNsaWNlbGVuXSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKKyAgICAgICAgfSBlbHNlIGlmIChuZXdsZW4gPiBzbGljZWxlbikgeworICAgICAgICAgICAgLyogaW5zZXJ0IHNsaWNlICovCisgICAgICAgICAgICBmb3IgKGkgPSBzZWxmLT5leHRyYS0+bGVuZ3RoLTE7IGkgPj0gc3RvcDsgaS0tKQorICAgICAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpICsgbmV3bGVuIC0gc2xpY2VsZW5dID0gc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldOworICAgICAgICB9CisKKyAgICAgICAgLyogcmVwbGFjZSB0aGUgc2xpY2UgKi8KKyAgICAgICAgZm9yIChjdXIgPSBzdGFydCwgaSA9IDA7IGkgPCBuZXdsZW47CisgICAgICAgICAgICAgY3VyICs9IHN0ZXAsIGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QqIGVsZW1lbnQgPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihlbGVtZW50KTsKKyAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltjdXJdID0gZWxlbWVudDsKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGggKz0gbmV3bGVuIC0gc2xpY2VsZW47CisKKyAgICAgICAgaWYgKHNlcSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBkaXNjYXJkIHRoZSByZWN5Y2xlIGJpbiwgYW5kIGV2ZXJ5dGhpbmcgaW4gaXQgKi8KKyAgICAgICAgUHlfWERFQ1JFRihyZWN5Y2xlKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgImVsZW1lbnQgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKIHN0YXRpYyBQeU1ldGhvZERlZiBlbGVtZW50X21ldGhvZHNbXSA9IHsKIAogICAgIHsiY2xlYXIiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfY2xlYXIsIE1FVEhfVkFSQVJHU30sCkBAIC0xMzAwLDEwICsxNDUzLDE1IEBACiAgICAgeyJmaW5kYWxsIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2ZpbmRhbGwsIE1FVEhfVkFSQVJHU30sCiAKICAgICB7ImFwcGVuZCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9hcHBlbmQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJleHRlbmQiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfZXh0ZW5kLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiaW5zZXJ0IiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2luc2VydCwgTUVUSF9WQVJBUkdTfSwKICAgICB7InJlbW92ZSIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9yZW1vdmUsIE1FVEhfVkFSQVJHU30sCiAKLSAgICB7ImdldGl0ZXJhdG9yIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2dldGl0ZXJhdG9yLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaXRlciIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9pdGVyLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaXRlcnRleHQiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfaXRlcnRleHQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpdGVyZmluZCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9pdGVyZmluZCwgTUVUSF9WQVJBUkdTfSwKKworICAgIHsiZ2V0aXRlcmF0b3IiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfaXRlciwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldGNoaWxkcmVuIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2dldGNoaWxkcmVuLCBNRVRIX1ZBUkFSR1N9LAogCiAgICAgeyJpdGVtcyIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9pdGVtcywgTUVUSF9WQVJBUkdTfSwKQEAgLTEzMzQsMjIgKzE0OTIsMzEgQEAKIHsKICAgICBQeU9iamVjdCogcmVzOwogCisgICAgLyogaGFuZGxlIGNvbW1vbiBhdHRyaWJ1dGVzIGZpcnN0ICovCisgICAgaWYgKHN0cmNtcChuYW1lLCAidGFnIikgPT0gMCkgeworICAgICAgICByZXMgPSBzZWxmLT50YWc7CisgICAgICAgIFB5X0lOQ1JFRihyZXMpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0ZXh0IikgPT0gMCkgeworICAgICAgICByZXMgPSBlbGVtZW50X2dldF90ZXh0KHNlbGYpOworICAgICAgICBQeV9JTkNSRUYocmVzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICAvKiBtZXRob2RzICovCiAgICAgcmVzID0gUHlfRmluZE1ldGhvZChlbGVtZW50X21ldGhvZHMsIChQeU9iamVjdCopIHNlbGYsIG5hbWUpOwogICAgIGlmIChyZXMpCi0JcmV0dXJuIHJlczsKKyAgICAgICAgcmV0dXJuIHJlczsKIAogICAgIFB5RXJyX0NsZWFyKCk7CiAKLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0YWciKSA9PSAwKQotCXJlcyA9IHNlbGYtPnRhZzsKLSAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRleHQiKSA9PSAwKQotICAgICAgICByZXMgPSBlbGVtZW50X2dldF90ZXh0KHNlbGYpOwotICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidGFpbCIpID09IDApIHsKKyAgICAvKiBsZXNzIGNvbW1vbiBhdHRyaWJ1dGVzICovCisgICAgaWYgKHN0cmNtcChuYW1lLCAidGFpbCIpID09IDApIHsKICAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfdGFpbChzZWxmKTsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiYXR0cmliIikgPT0gMCkgewogICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQogICAgICAgICAgICAgZWxlbWVudF9uZXdfZXh0cmEoc2VsZiwgTlVMTCk7Ci0JcmVzID0gZWxlbWVudF9nZXRfYXR0cmliKHNlbGYpOworICAgICAgICByZXMgPSBlbGVtZW50X2dldF9hdHRyaWIoc2VsZik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNDA0LDkgKzE1NzEsMTUgQEAKICAgICAwLCAvKiBzcV9jb25jYXQgKi8KICAgICAwLCAvKiBzcV9yZXBlYXQgKi8KICAgICBlbGVtZW50X2dldGl0ZW0sCi0gICAgZWxlbWVudF9nZXRzbGljZSwKKyAgICAwLAogICAgIGVsZW1lbnRfc2V0aXRlbSwKLSAgICBlbGVtZW50X3NldHNsaWNlLAorICAgIDAsCit9OworCitzdGF0aWMgUHlNYXBwaW5nTWV0aG9kcyBlbGVtZW50X2FzX21hcHBpbmcgPSB7CisgICAgKGxlbmZ1bmMpIGVsZW1lbnRfbGVuZ3RoLAorICAgIChiaW5hcnlmdW5jKSBlbGVtZW50X3N1YnNjciwKKyAgICAob2Jqb2JqYXJncHJvYykgZWxlbWVudF9hc3Nfc3Vic2NyLAogfTsKIAogc3RhdGljaGVyZSBQeVR5cGVPYmplY3QgRWxlbWVudF9UeXBlID0gewpAQCAtMTQyMSw2ICsxNTk0LDcgQEAKICAgICAocmVwcmZ1bmMpZWxlbWVudF9yZXByLCAvKiB0cF9yZXByICovCiAgICAgMCwgLyogdHBfYXNfbnVtYmVyICovCiAgICAgJmVsZW1lbnRfYXNfc2VxdWVuY2UsIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgJmVsZW1lbnRfYXNfbWFwcGluZywgLyogdHBfYXNfbWFwcGluZyAqLwogfTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTE1NTgsNyArMTczMiw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHNlbGYtPnJvb3QpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICBQeUV4Y19TeW50YXhFcnJvciwKKyAgICAgICAgICAgICAgICBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwKICAgICAgICAgICAgICAgICAibXVsdGlwbGUgZWxlbWVudHMgb24gdG9wIGxldmVsIgogICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTY5OSw3ICsxODczLDcgQEAKIAogTE9DQUwodm9pZCkKIHRyZWVidWlsZGVyX2hhbmRsZV9uYW1lc3BhY2UoVHJlZUJ1aWxkZXJPYmplY3QqIHNlbGYsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJlZml4LCBjb25zdCBjaGFyICp1cmkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwcmVmaXgsIFB5T2JqZWN0ICp1cmkpCiB7CiAgICAgUHlPYmplY3QqIHJlczsKICAgICBQeU9iamVjdCogYWN0aW9uOwpAQCAtMTcxMiw4ICsxODg2LDcgQEAKICAgICAgICAgaWYgKCFzZWxmLT5zdGFydF9uc19ldmVudF9vYmopCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGFjdGlvbiA9IHNlbGYtPnN0YXJ0X25zX2V2ZW50X29iajsKLSAgICAgICAgLyogRklYTUU6IHByZWZpeCBhbmQgdXJpIHVzZSB1dGYtOCBlbmNvZGluZyEgKi8KLSAgICAgICAgcGFyY2VsID0gUHlfQnVpbGRWYWx1ZSgic3MiLCAocHJlZml4KSA/IHByZWZpeCA6ICIiLCB1cmkpOworICAgICAgICBwYXJjZWwgPSBQeV9CdWlsZFZhbHVlKCJPTyIsIHByZWZpeCwgdXJpKTsKICAgICAgICAgaWYgKCFwYXJjZWwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFB5X0lOQ1JFRihhY3Rpb24pOwpAQCAtMTg1Nyw2ICsyMDMwLDcgQEAKICAgICBQeU9iamVjdCogbmFtZXM7CiAKICAgICBQeU9iamVjdCogaGFuZGxlX3htbDsKKwogICAgIFB5T2JqZWN0KiBoYW5kbGVfc3RhcnQ7CiAgICAgUHlPYmplY3QqIGhhbmRsZV9kYXRhOwogICAgIFB5T2JqZWN0KiBoYW5kbGVfZW5kOwpAQCAtMTg2NCw2ICsyMDM4LDggQEAKICAgICBQeU9iamVjdCogaGFuZGxlX2NvbW1lbnQ7CiAgICAgUHlPYmplY3QqIGhhbmRsZV9waTsKIAorICAgIFB5T2JqZWN0KiBoYW5kbGVfY2xvc2U7CisKIH0gWE1MUGFyc2VyT2JqZWN0OwogCiBzdGF0aWNmb3J3YXJkIFB5VHlwZU9iamVjdCBYTUxQYXJzZXJfVHlwZTsKQEAgLTE5NzEsNiArMjE0NywzNiBAQAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorc3RhdGljIHZvaWQKK2V4cGF0X3NldF9lcnJvcihjb25zdCBjaGFyKiBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbikKK3sKKyAgICBQeU9iamVjdCAqZXJyb3I7CisgICAgUHlPYmplY3QgKnBvc2l0aW9uOworICAgIGNoYXIgYnVmZmVyWzI1Nl07CisKKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzOiBsaW5lICVkLCBjb2x1bW4gJWQiLCBtZXNzYWdlLCBsaW5lLCBjb2x1bW4pOworCisgICAgZXJyb3IgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosICJzIiwgYnVmZmVyKTsKKyAgICBpZiAoIWVycm9yKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBhZGQgcG9zaXRpb24gYXR0cmlidXRlICovCisgICAgcG9zaXRpb24gPSBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgbGluZSwgY29sdW1uKTsKKyAgICBpZiAoIXBvc2l0aW9uKSB7CisgICAgICAgIFB5X0RFQ1JFRihlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoZXJyb3IsICJwb3NpdGlvbiIsIHBvc2l0aW9uKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoZXJyb3IpOworICAgICAgICBQeV9ERUNSRUYocG9zaXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFB5X0RFQ1JFRihwb3NpdGlvbik7CisKKyAgICBQeUVycl9TZXRPYmplY3QoZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosIGVycm9yKTsKKyAgICBQeV9ERUNSRUYoZXJyb3IpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogaGFuZGxlcnMgKi8KIApAQCAtMjAwMSwxMCArMjIwNywxMiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXMgPSBOVUxMOwogICAgICAgICBQeV9YREVDUkVGKHJlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KAotICAgICAgICAgICAgUHlFeGNfU3ludGF4RXJyb3IsICJ1bmRlZmluZWQgZW50aXR5ICYlczs6IGxpbmUgJWxkLCBjb2x1bW4gJWxkIiwKLSAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhrZXkpLAorICAgIH0gZWxzZSBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgLyogUmVwb3J0IHRoZSBmaXJzdCBlcnJvciwgbm90IHRoZSBsYXN0ICovCisgICAgICAgIGNoYXIgbWVzc2FnZVsxMjhdOworICAgICAgICBzcHJpbnRmKG1lc3NhZ2UsICJ1bmRlZmluZWQgZW50aXR5ICYlLjEwMHM7IiwgUHlTdHJpbmdfQVNfU1RSSU5HKGtleSkpOworICAgICAgICBleHBhdF9zZXRfZXJyb3IoCisgICAgICAgICAgICBtZXNzYWdlLAogICAgICAgICAgICAgRVhQQVQoR2V0RXJyb3JMaW5lTnVtYmVyKShzZWxmLT5wYXJzZXIpLAogICAgICAgICAgICAgRVhQQVQoR2V0RXJyb3JDb2x1bW5OdW1iZXIpKHNlbGYtPnBhcnNlcikKICAgICAgICAgICAgICk7CkBAIC0yMDU5LDkgKzIyNjcsMTUgQEAKICAgICAgICAgLyogc2hvcnRjdXQgKi8KICAgICAgICAgcmVzID0gdHJlZWJ1aWxkZXJfaGFuZGxlX3N0YXJ0KChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZywgYXR0cmliKTsKLSAgICBlbHNlIGlmIChzZWxmLT5oYW5kbGVfc3RhcnQpCisgICAgZWxzZSBpZiAoc2VsZi0+aGFuZGxlX3N0YXJ0KSB7CisgICAgICAgIGlmIChhdHRyaWIgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGF0dHJpYik7CisgICAgICAgICAgICBhdHRyaWIgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICBpZiAoIWF0dHJpYikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPmhhbmRsZV9zdGFydCwgIk9PIiwgdGFnLCBhdHRyaWIpOwotICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAgICAgcmVzID0gTlVMTDsKIAogICAgIFB5X0RFQ1JFRih0YWcpOwpAQCAtMjEyMSw5ICsyMzM1LDI4IEBACiBleHBhdF9zdGFydF9uc19oYW5kbGVyKFhNTFBhcnNlck9iamVjdCogc2VsZiwgY29uc3QgWE1MX0NoYXIqIHByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnVyaSkKIHsKKyAgICBQeU9iamVjdCogc3ByZWZpeCA9IE5VTEw7CisgICAgUHlPYmplY3QqIHN1cmkgPSBOVUxMOworCisgICAgc3VyaSA9IG1ha2VzdHJpbmcodXJpLCBzdHJsZW4odXJpKSk7CisgICAgaWYgKCFzdXJpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocHJlZml4KQorICAgICAgICBzcHJlZml4ID0gbWFrZXN0cmluZyhwcmVmaXgsIHN0cmxlbihwcmVmaXgpKTsKKyAgICBlbHNlCisgICAgICAgIHNwcmVmaXggPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7CisgICAgaWYgKCFzcHJlZml4KSB7CisgICAgICAgIFB5X0RFQ1JFRihzdXJpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHRyZWVidWlsZGVyX2hhbmRsZV9uYW1lc3BhY2UoCi0gICAgICAgIChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldCwgMSwgcHJlZml4LCB1cmkKKyAgICAgICAgKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0LCAxLCBzcHJlZml4LCBzdXJpCiAgICAgICAgICk7CisKKyAgICBQeV9ERUNSRUYoc3ByZWZpeCk7CisgICAgUHlfREVDUkVGKHN1cmkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjIwMCwxMCArMjQzMywxMCBAQAogICAgIHAgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh1KTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCWlmIChwW2ldICE9IFB5X1VOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKQotCSAgICBpbmZvLT5tYXBbaV0gPSBwW2ldOworICAgICAgICBpZiAocFtpXSAhPSBQeV9VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUikKKyAgICAgICAgICAgIGluZm8tPm1hcFtpXSA9IHBbaV07CiAgICAgICAgIGVsc2UKLQkgICAgaW5mby0+bWFwW2ldID0gLTE7CisgICAgICAgICAgICBpbmZvLT5tYXBbaV0gPSAtMTsKICAgICB9CiAKICAgICBQeV9ERUNSRUYodSk7CkBAIC0yMjg4LDYgKzI1MjEsNyBAQAogICAgIHNlbGYtPmhhbmRsZV9lbmQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRhcmdldCwgImVuZCIpOwogICAgIHNlbGYtPmhhbmRsZV9jb21tZW50ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0YXJnZXQsICJjb21tZW50Iik7CiAgICAgc2VsZi0+aGFuZGxlX3BpID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0YXJnZXQsICJwaSIpOworICAgIHNlbGYtPmhhbmRsZV9jbG9zZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAiY2xvc2UiKTsKIAogICAgIFB5RXJyX0NsZWFyKCk7CiAKQEAgLTIzMzMsNiArMjU2Nyw3IEBACiB7CiAgICAgRVhQQVQoUGFyc2VyRnJlZSkoc2VsZi0+cGFyc2VyKTsKIAorICAgIFB5X1hERUNSRUYoc2VsZi0+aGFuZGxlX2Nsb3NlKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmhhbmRsZV9waSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5oYW5kbGVfY29tbWVudCk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5oYW5kbGVfZW5kKTsKQEAgLTIzNjMsOCArMjU5OCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKCFvaykgewotICAgICAgICBQeUVycl9Gb3JtYXQoCi0gICAgICAgICAgICBQeUV4Y19TeW50YXhFcnJvciwgIiVzOiBsaW5lICVsZCwgY29sdW1uICVsZCIsCisgICAgICAgIGV4cGF0X3NldF9lcnJvcigKICAgICAgICAgICAgIEVYUEFUKEVycm9yU3RyaW5nKShFWFBBVChHZXRFcnJvckNvZGUpKHNlbGYtPnBhcnNlcikpLAogICAgICAgICAgICAgRVhQQVQoR2V0RXJyb3JMaW5lTnVtYmVyKShzZWxmLT5wYXJzZXIpLAogICAgICAgICAgICAgRVhQQVQoR2V0RXJyb3JDb2x1bW5OdW1iZXIpKHNlbGYtPnBhcnNlcikKQEAgLTIzODUsMTMgKzI2MTksMTcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXMgPSBleHBhdF9wYXJzZShzZWxmLCAiIiwgMCwgMSk7CisgICAgaWYgKCFyZXMpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKHJlcyAmJiBUcmVlQnVpbGRlcl9DaGVja0V4YWN0KHNlbGYtPnRhcmdldCkpIHsKKyAgICBpZiAoVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gdHJlZWJ1aWxkZXJfZG9uZSgoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQpOwotICAgIH0KLQotICAgIHJldHVybiByZXM7CisgICAgfSBpZiAoc2VsZi0+aGFuZGxlX2Nsb3NlKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPmhhbmRsZV9jbG9zZSwgIiIpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC0yNTc1LDE0ICsyODEzLDE0IEBACiAKICAgICByZXMgPSBQeV9GaW5kTWV0aG9kKHhtbHBhcnNlcl9tZXRob2RzLCAoUHlPYmplY3QqKSBzZWxmLCBuYW1lKTsKICAgICBpZiAocmVzKQotCXJldHVybiByZXM7CisgICAgICAgIHJldHVybiByZXM7CiAKICAgICBQeUVycl9DbGVhcigpOwogCiAgICAgaWYgKHN0cmNtcChuYW1lLCAiZW50aXR5IikgPT0gMCkKLQlyZXMgPSBzZWxmLT5lbnRpdHk7CisgICAgICAgIHJlcyA9IHNlbGYtPmVudGl0eTsKICAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRhcmdldCIpID09IDApCi0JcmVzID0gc2VsZi0+dGFyZ2V0OworICAgICAgICByZXMgPSBzZWxmLT50YXJnZXQ7CiAgICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ2ZXJzaW9uIikgPT0gMCkgewogICAgICAgICBjaGFyIGJ1ZmZlclsxMDBdOwogICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIkV4cGF0ICVkLiVkLiVkIiwgWE1MX01BSk9SX1ZFUlNJT04sCkBAIC0yNjI4LDkgKzI4NjYsNiBAQAogICAgIFB5T2JqZWN0KiBtOwogICAgIFB5T2JqZWN0KiBnOwogICAgIGNoYXIqIGJvb3RzdHJhcDsKLSNpZiBkZWZpbmVkKFVTRV9QWUVYUEFUX0NBUEkpCi0gICAgc3RydWN0IFB5RXhwYXRfQ0FQSSogY2FwaTsKLSNlbmRpZgogCiAgICAgLyogUGF0Y2ggb2JqZWN0IHR5cGUgKi8KICAgICBQeV9UWVBFKCZFbGVtZW50X1R5cGUpID0gUHlfVFlQRSgmVHJlZUJ1aWxkZXJfVHlwZSkgPSAmUHlUeXBlX1R5cGU7CkBAIC0yNjUyLDEwICsyODg3LDYgQEAKIAogICAgIGJvb3RzdHJhcCA9ICgKIAotI2lmIChQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDIwMDAwICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjAzMDAwMCkKLSAgICAgICAgImZyb20gX19mdXR1cmVfXyBpbXBvcnQgZ2VuZXJhdG9yc1xuIiAvKiBlbmFibGUgeWllbGQgdW5kZXIgMi4yICovCi0jZW5kaWYKLQogICAgICAgICAiZnJvbSBjb3B5IGltcG9ydCBjb3B5LCBkZWVwY29weVxuIgogCiAgICAgICAgICJ0cnk6XG4iCkBAIC0yNjczLDExICsyOTA0LDE0IEBACiAgICAgICAgICIgIGRlZiBjb3B5ZWxlbWVudChlbGVtKTpcbiIKICAgICAgICAgIiAgICByZXR1cm4gZWxlbVxuIgogCi0gICAgICAgICJkZWYgQ29tbWVudCh0ZXh0PU5vbmUpOlxuIiAvKiBwdWJsaWMgKi8KKyAgICAgICAgImNsYXNzIENvbW1lbnRQcm94eTpcbiIKKyAgICAgICAgIiBkZWYgX19jYWxsX18oc2VsZiwgdGV4dD1Ob25lKTpcbiIKICAgICAgICAgIiAgZWxlbWVudCA9IGNFbGVtZW50VHJlZS5FbGVtZW50KEVULkNvbW1lbnQpXG4iCiAgICAgICAgICIgIGVsZW1lbnQudGV4dCA9IHRleHRcbiIKICAgICAgICAgIiAgcmV0dXJuIGVsZW1lbnRcbiIKLSAgICAgICAgImNFbGVtZW50VHJlZS5Db21tZW50ID0gQ29tbWVudFxuIgorICAgICAgICAiIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKTpcbiIKKyAgICAgICAgIiAgcmV0dXJuIGNtcChFVC5Db21tZW50LCBvdGhlcilcbiIKKyAgICAgICAgImNFbGVtZW50VHJlZS5Db21tZW50ID0gQ29tbWVudFByb3h5KClcbiIKIAogICAgICAgICAiY2xhc3MgRWxlbWVudFRyZWUoRVQuRWxlbWVudFRyZWUpOlxuIiAvKiBwdWJsaWMgKi8KICAgICAgICAgIiAgZGVmIHBhcnNlKHNlbGYsIHNvdXJjZSwgcGFyc2VyPU5vbmUpOlxuIgpAQCAtMjY5NiwyMyArMjkzMCwyMyBAQAogICAgICAgICAiICAgIHJldHVybiBzZWxmLl9yb290XG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuRWxlbWVudFRyZWUgPSBFbGVtZW50VHJlZVxuIgogCi0gICAgICAgICJkZWYgZ2V0aXRlcmF0b3Iobm9kZSwgdGFnPU5vbmUpOlxuIiAvKiBoZWxwZXIgKi8KKyAgICAgICAgImRlZiBpdGVyKG5vZGUsIHRhZz1Ob25lKTpcbiIgLyogaGVscGVyICovCiAgICAgICAgICIgIGlmIHRhZyA9PSAnKic6XG4iCiAgICAgICAgICIgICAgdGFnID0gTm9uZVxuIgotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwMjAwMDApCi0gICAgICAgICIgIG5vZGVzID0gW11cbiIgLyogMi4xIGRvZXNuJ3QgaGF2ZSB5aWVsZCAqLwotICAgICAgICAiICBpZiB0YWcgaXMgTm9uZSBvciBub2RlLnRhZyA9PSB0YWc6XG4iCi0gICAgICAgICIgICAgbm9kZXMuYXBwZW5kKG5vZGUpXG4iCi0gICAgICAgICIgIGZvciBub2RlIGluIG5vZGU6XG4iCi0gICAgICAgICIgICAgbm9kZXMuZXh0ZW5kKGdldGl0ZXJhdG9yKG5vZGUsIHRhZykpXG4iCi0gICAgICAgICIgIHJldHVybiBub2Rlc1xuIgotI2Vsc2UKICAgICAgICAgIiAgaWYgdGFnIGlzIE5vbmUgb3Igbm9kZS50YWcgPT0gdGFnOlxuIgogICAgICAgICAiICAgIHlpZWxkIG5vZGVcbiIKICAgICAgICAgIiAgZm9yIG5vZGUgaW4gbm9kZTpcbiIKLSAgICAgICAgIiAgICBmb3Igbm9kZSBpbiBnZXRpdGVyYXRvcihub2RlLCB0YWcpOlxuIgorICAgICAgICAiICAgIGZvciBub2RlIGluIGl0ZXIobm9kZSwgdGFnKTpcbiIKICAgICAgICAgIiAgICAgIHlpZWxkIG5vZGVcbiIKLSNlbmRpZgorCisgICAgICAgICJkZWYgaXRlcnRleHQobm9kZSk6XG4iIC8qIGhlbHBlciAqLworICAgICAgICAiICBpZiBub2RlLnRleHQ6XG4iCisgICAgICAgICIgICAgeWllbGQgbm9kZS50ZXh0XG4iCisgICAgICAgICIgIGZvciBlIGluIG5vZGU6XG4iCisgICAgICAgICIgICAgZm9yIHMgaW4gZS5pdGVydGV4dCgpOlxuIgorICAgICAgICAiICAgICAgeWllbGQgc1xuIgorICAgICAgICAiICAgIGlmIGUudGFpbDpcbiIKKyAgICAgICAgIiAgICAgIHlpZWxkIGUudGFpbFxuIgogCiAgICAgICAgICJkZWYgcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSk6XG4iIC8qIHB1YmxpYyAqLwogICAgICAgICAiICB0cmVlID0gRWxlbWVudFRyZWUoKVxuIgpAQCAtMjcyMCw0OCArMjk1NCw1MiBAQAogICAgICAgICAiICByZXR1cm4gdHJlZVxuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLnBhcnNlID0gcGFyc2VcbiIKIAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwMjAwMDApCi0gICAgICAgICJpZiBoYXNhdHRyKEVULCAnaXRlcnBhcnNlJyk6XG4iCi0gICAgICAgICIgICAgY0VsZW1lbnRUcmVlLml0ZXJwYXJzZSA9IEVULml0ZXJwYXJzZVxuIiAvKiBkZWxlZ2F0ZSBvbiAyLjEgKi8KLSNlbHNlCiAgICAgICAgICJjbGFzcyBpdGVycGFyc2Uob2JqZWN0KTpcbiIKICAgICAgICAgIiByb290ID0gTm9uZVxuIgogICAgICAgICAiIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBldmVudHM9Tm9uZSk6XG4iCiAgICAgICAgICIgIGlmIG5vdCBoYXNhdHRyKGZpbGUsICdyZWFkJyk6XG4iCiAgICAgICAgICIgICAgZmlsZSA9IG9wZW4oZmlsZSwgJ3JiJylcbiIKICAgICAgICAgIiAgc2VsZi5fZmlsZSA9IGZpbGVcbiIKLSAgICAgICAgIiAgc2VsZi5fZXZlbnRzID0gZXZlbnRzXG4iCi0gICAgICAgICIgZGVmIF9faXRlcl9fKHNlbGYpOlxuIiAKLSAgICAgICAgIiAgZXZlbnRzID0gW11cbiIKKyAgICAgICAgIiAgc2VsZi5fZXZlbnRzID0gW11cbiIKKyAgICAgICAgIiAgc2VsZi5faW5kZXggPSAwXG4iCisgICAgICAgICIgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QgPSBOb25lXG4iCiAgICAgICAgICIgIGIgPSBjRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIoKVxuIgotICAgICAgICAiICBwID0gY0VsZW1lbnRUcmVlLlhNTFBhcnNlcihiKVxuIgotICAgICAgICAiICBwLl9zZXRldmVudHMoZXZlbnRzLCBzZWxmLl9ldmVudHMpXG4iCisgICAgICAgICIgIHNlbGYuX3BhcnNlciA9IGNFbGVtZW50VHJlZS5YTUxQYXJzZXIoYilcbiIKKyAgICAgICAgIiAgc2VsZi5fcGFyc2VyLl9zZXRldmVudHMoc2VsZi5fZXZlbnRzLCBldmVudHMpXG4iCisgICAgICAgICIgZGVmIG5leHQoc2VsZik6XG4iCiAgICAgICAgICIgIHdoaWxlIDE6XG4iCi0gICAgICAgICIgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZCgxNjM4NClcbiIKLSAgICAgICAgIiAgICBpZiBub3QgZGF0YTpcbiIKLSAgICAgICAgIiAgICAgIGJyZWFrXG4iCi0gICAgICAgICIgICAgcC5mZWVkKGRhdGEpXG4iCi0gICAgICAgICIgICAgZm9yIGV2ZW50IGluIGV2ZW50czpcbiIKLSAgICAgICAgIiAgICAgIHlpZWxkIGV2ZW50XG4iCi0gICAgICAgICIgICAgZGVsIGV2ZW50c1s6XVxuIgotICAgICAgICAiICByb290ID0gcC5jbG9zZSgpXG4iCi0gICAgICAgICIgIGZvciBldmVudCBpbiBldmVudHM6XG4iCi0gICAgICAgICIgICAgeWllbGQgZXZlbnRcbiIKLSAgICAgICAgIiAgc2VsZi5yb290ID0gcm9vdFxuIgorICAgICAgICAiICAgIHRyeTpcbiIKKyAgICAgICAgIiAgICAgIGl0ZW0gPSBzZWxmLl9ldmVudHNbc2VsZi5faW5kZXhdXG4iCisgICAgICAgICIgICAgZXhjZXB0IEluZGV4RXJyb3I6XG4iCisgICAgICAgICIgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZTpcbiIKKyAgICAgICAgIiAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdFxuIgorICAgICAgICAiICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uXG4iCisgICAgICAgICIgICAgICAjIGxvYWQgZXZlbnQgYnVmZmVyXG4iCisgICAgICAgICIgICAgICBkZWwgc2VsZi5fZXZlbnRzWzpdXG4iCisgICAgICAgICIgICAgICBzZWxmLl9pbmRleCA9IDBcbiIKKyAgICAgICAgIiAgICAgIGRhdGEgPSBzZWxmLl9maWxlLnJlYWQoMTYzODQpXG4iCisgICAgICAgICIgICAgICBpZiBkYXRhOlxuIgorICAgICAgICAiICAgICAgICBzZWxmLl9wYXJzZXIuZmVlZChkYXRhKVxuIgorICAgICAgICAiICAgICAgZWxzZTpcbiIKKyAgICAgICAgIiAgICAgICAgc2VsZi5fcm9vdCA9IHNlbGYuX3BhcnNlci5jbG9zZSgpXG4iCisgICAgICAgICIgICAgICAgIHNlbGYuX3BhcnNlciA9IE5vbmVcbiIKKyAgICAgICAgIiAgICBlbHNlOlxuIgorICAgICAgICAiICAgICAgc2VsZi5faW5kZXggPSBzZWxmLl9pbmRleCArIDFcbiIKKyAgICAgICAgIiAgICAgIHJldHVybiBpdGVtXG4iCisgICAgICAgICIgZGVmIF9faXRlcl9fKHNlbGYpOlxuIgorICAgICAgICAiICByZXR1cm4gc2VsZlxuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLml0ZXJwYXJzZSA9IGl0ZXJwYXJzZVxuIgotI2VuZGlmCiAKLSAgICAgICAgImRlZiBQSSh0YXJnZXQsIHRleHQ9Tm9uZSk6XG4iIC8qIHB1YmxpYyAqLwotICAgICAgICAiICBlbGVtZW50ID0gY0VsZW1lbnRUcmVlLkVsZW1lbnQoRVQuUHJvY2Vzc2luZ0luc3RydWN0aW9uKVxuIgorICAgICAgICAiY2xhc3MgUElQcm94eTpcbiIKKyAgICAgICAgIiBkZWYgX19jYWxsX18oc2VsZiwgdGFyZ2V0LCB0ZXh0PU5vbmUpOlxuIgorICAgICAgICAiICBlbGVtZW50ID0gY0VsZW1lbnRUcmVlLkVsZW1lbnQoRVQuUEkpXG4iCiAgICAgICAgICIgIGVsZW1lbnQudGV4dCA9IHRhcmdldFxuIgogICAgICAgICAiICBpZiB0ZXh0OlxuIgogICAgICAgICAiICAgIGVsZW1lbnQudGV4dCA9IGVsZW1lbnQudGV4dCArICcgJyArIHRleHRcbiIKICAgICAgICAgIiAgcmV0dXJuIGVsZW1lbnRcbiIKLQotICAgICAgICAiICBlbGVtID0gY0VsZW1lbnRUcmVlLkVsZW1lbnQoRVQuUEkpXG4iCi0gICAgICAgICIgIGVsZW0udGV4dCA9IHRleHRcbiIKLSAgICAgICAgIiAgcmV0dXJuIGVsZW1cbiIKLSAgICAgICAgImNFbGVtZW50VHJlZS5QSSA9IGNFbGVtZW50VHJlZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBQSVxuIgorICAgICAgICAiIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKTpcbiIKKyAgICAgICAgIiAgcmV0dXJuIGNtcChFVC5QSSwgb3RoZXIpXG4iCisgICAgICAgICJjRWxlbWVudFRyZWUuUEkgPSBjRWxlbWVudFRyZWUuUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gUElQcm94eSgpXG4iCiAKICAgICAgICAgImRlZiBYTUwodGV4dCk6XG4iIC8qIHB1YmxpYyAqLwogICAgICAgICAiICBwYXJzZXIgPSBjRWxlbWVudFRyZWUuWE1MUGFyc2VyKClcbiIKQEAgLTI3NzIsMjUgKzMwMTAsMzQgQEAKICAgICAgICAgImRlZiBYTUxJRCh0ZXh0KTpcbiIgLyogcHVibGljICovCiAgICAgICAgICIgIHRyZWUgPSBYTUwodGV4dClcbiIKICAgICAgICAgIiAgaWRzID0ge31cbiIKLSAgICAgICAgIiAgZm9yIGVsZW0gaW4gdHJlZS5nZXRpdGVyYXRvcigpOlxuIgorICAgICAgICAiICBmb3IgZWxlbSBpbiB0cmVlLml0ZXIoKTpcbiIKICAgICAgICAgIiAgICBpZCA9IGVsZW0uZ2V0KCdpZCcpXG4iCiAgICAgICAgICIgICAgaWYgaWQ6XG4iCiAgICAgICAgICIgICAgICBpZHNbaWRdID0gZWxlbVxuIgogICAgICAgICAiICByZXR1cm4gdHJlZSwgaWRzXG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuWE1MSUQgPSBYTUxJRFxuIgogCisgICAgICAgICJ0cnk6XG4iCisgICAgICAgICIgcmVnaXN0ZXJfbmFtZXNwYWNlID0gRVQucmVnaXN0ZXJfbmFtZXNwYWNlXG4iCisgICAgICAgICJleGNlcHQgQXR0cmlidXRlRXJyb3I6XG4iCisgICAgICAgICIgZGVmIHJlZ2lzdGVyX25hbWVzcGFjZShwcmVmaXgsIHVyaSk6XG4iCisgICAgICAgICIgIEVULl9uYW1lc3BhY2VfbWFwW3VyaV0gPSBwcmVmaXhcbiIKKyAgICAgICAgImNFbGVtZW50VHJlZS5yZWdpc3Rlcl9uYW1lc3BhY2UgPSByZWdpc3Rlcl9uYW1lc3BhY2VcbiIKKwogICAgICAgICAiY0VsZW1lbnRUcmVlLmR1bXAgPSBFVC5kdW1wXG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuRWxlbWVudFBhdGggPSBFbGVtZW50UGF0aCA9IEVULkVsZW1lbnRQYXRoXG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuaXNlbGVtZW50ID0gRVQuaXNlbGVtZW50XG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuUU5hbWUgPSBFVC5RTmFtZVxuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLnRvc3RyaW5nID0gRVQudG9zdHJpbmdcbiIKKyAgICAgICAgImNFbGVtZW50VHJlZS5mcm9tc3RyaW5nbGlzdCA9IEVULmZyb21zdHJpbmdsaXN0XG4iCisgICAgICAgICJjRWxlbWVudFRyZWUudG9zdHJpbmdsaXN0ID0gRVQudG9zdHJpbmdsaXN0XG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuVkVSU0lPTiA9ICciIFZFUlNJT04gIidcbiIKICAgICAgICAgImNFbGVtZW50VHJlZS5fX3ZlcnNpb25fXyA9ICciIFZFUlNJT04gIidcbiIKLSAgICAgICAgImNFbGVtZW50VHJlZS5YTUxQYXJzZXJFcnJvciA9IFN5bnRheEVycm9yXG4iCiAKICAgICAgICApOwogCi0gICAgUHlSdW5fU3RyaW5nKGJvb3RzdHJhcCwgUHlfZmlsZV9pbnB1dCwgZywgTlVMTCk7CisgICAgaWYgKCFQeVJ1bl9TdHJpbmcoYm9vdHN0cmFwLCBQeV9maWxlX2lucHV0LCBnLCBOVUxMKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgZWxlbWVudHBhdGhfb2JqID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZywgIkVsZW1lbnRQYXRoIik7CiAKQEAgLTI4MDUsMjEgKzMwNTIsMjggQEAKICAgICAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKwogICAgIGVsZW1lbnR0cmVlX2RlZXBjb3B5X29iaiA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGcsICJkZWVwY29weSIpOwotICAgIGVsZW1lbnR0cmVlX2dldGl0ZXJhdG9yX29iaiA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGcsICJnZXRpdGVyYXRvciIpOworICAgIGVsZW1lbnR0cmVlX2l0ZXJfb2JqID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZywgIml0ZXIiKTsKKyAgICBlbGVtZW50dHJlZV9pdGVydGV4dF9vYmogPSBQeURpY3RfR2V0SXRlbVN0cmluZyhnLCAiaXRlcnRleHQiKTsKIAogI2lmIGRlZmluZWQoVVNFX1BZRVhQQVRfQ0FQSSkKICAgICAvKiBsaW5rIGFnYWluc3QgcHlleHBhdCwgaWYgcG9zc2libGUgKi8KLSAgICBjYXBpID0gUHlDT2JqZWN0X0ltcG9ydCgicHlleHBhdCIsICJleHBhdF9DQVBJIik7Ci0gICAgaWYgKGNhcGkgJiYKLSAgICAgICAgc3RyY21wKGNhcGktPm1hZ2ljLCBQeUV4cGF0X0NBUElfTUFHSUMpID09IDAgJiYKLSAgICAgICAgY2FwaS0+c2l6ZSA8PSBzaXplb2YoKmV4cGF0X2NhcGkpICYmCi0gICAgICAgIGNhcGktPk1BSk9SX1ZFUlNJT04gPT0gWE1MX01BSk9SX1ZFUlNJT04gJiYKLSAgICAgICAgY2FwaS0+TUlOT1JfVkVSU0lPTiA9PSBYTUxfTUlOT1JfVkVSU0lPTiAmJgotICAgICAgICBjYXBpLT5NSUNST19WRVJTSU9OID09IFhNTF9NSUNST19WRVJTSU9OKQotICAgICAgICBleHBhdF9jYXBpID0gY2FwaTsKLSAgICBlbHNlCi0gICAgICAgIGV4cGF0X2NhcGkgPSBOVUxMOworICAgIGV4cGF0X2NhcGkgPSBQeUNhcHN1bGVfSW1wb3J0KFB5RXhwYXRfQ0FQU1VMRV9OQU1FLCAwKTsKKyAgICBpZiAoZXhwYXRfY2FwaSkgeworICAgICAgICAvKiBjaGVjayB0aGF0IGl0J3MgdXNhYmxlICovCisgICAgICAgIGlmIChzdHJjbXAoZXhwYXRfY2FwaS0+bWFnaWMsIFB5RXhwYXRfQ0FQSV9NQUdJQykgIT0gMCB8fAorICAgICAgICAgICAgZXhwYXRfY2FwaS0+c2l6ZSA8IHNpemVvZihzdHJ1Y3QgUHlFeHBhdF9DQVBJKSB8fAorICAgICAgICAgICAgZXhwYXRfY2FwaS0+TUFKT1JfVkVSU0lPTiAhPSBYTUxfTUFKT1JfVkVSU0lPTiB8fAorICAgICAgICAgICAgZXhwYXRfY2FwaS0+TUlOT1JfVkVSU0lPTiAhPSBYTUxfTUlOT1JfVkVSU0lPTiB8fAorICAgICAgICAgICAgZXhwYXRfY2FwaS0+TUlDUk9fVkVSU0lPTiAhPSBYTUxfTUlDUk9fVkVSU0lPTikKKyAgICAgICAgICAgIGV4cGF0X2NhcGkgPSBOVUxMOworICAgIH0KICNlbmRpZgogCisgICAgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmogPSBQeUVycl9OZXdFeGNlcHRpb24oCisgICAgICAgICJjRWxlbWVudFRyZWUuUGFyc2VFcnJvciIsIFB5RXhjX1N5bnRheEVycm9yLCBOVUxMCisgICAgICAgICk7CisgICAgUHlfSU5DUkVGKGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBhcnNlRXJyb3IiLCBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaik7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYyBiL01vZHVsZXMvX2Z1bmN0b29sc21vZHVsZS5jCmluZGV4IDNlMGUwNzcuLjU3MmU3ZmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2Z1bmN0b29sc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2Z1bmN0b29sc21vZHVsZS5jCkBAIC0yNzQsNiArMjc0LDUzIEBACiAgICAge05VTEx9IC8qIFNlbnRpbmVsICovCiB9OwogCisvKiBQaWNrbGUgc3RyYXRlZ3k6CisgICBfX3JlZHVjZV9fIGJ5IGl0c2VsZiBkb2Vzbid0IHN1cHBvcnQgZ2V0dGluZyBrd2FyZ3MgaW4gdGhlIHVucGlja2xlCisgICBvcGVyYXRpb24gc28gd2UgZGVmaW5lIGEgX19zZXRzdGF0ZV9fIHRoYXQgcmVwbGFjZXMgYWxsIHRoZSBpbmZvcm1hdGlvbgorICAgYWJvdXQgdGhlIHBhcnRpYWwuICBJZiB3ZSBvbmx5IHJlcGxhY2VkIHBhcnQgb2YgaXQgc29tZW9uZSB3b3VsZCB1c2UKKyAgIGl0IGFzIGEgaG9vayB0byBkbyBzdGFuZ2UgdGhpbmdzLgorICovCisKK1B5T2JqZWN0ICoKK3BhcnRpYWxfcmVkdWNlKHBhcnRpYWxvYmplY3QgKnB0bywgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPKShPT09PKSIsIFB5X1RZUEUocHRvKSwgcHRvLT5mbiwgcHRvLT5mbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwdG8tPmFyZ3MsIHB0by0+a3csCisgICAgICAgICAgICAgICAgICAgICAgICAgcHRvLT5kaWN0ID8gcHRvLT5kaWN0IDogUHlfTm9uZSk7Cit9CisKK1B5T2JqZWN0ICoKK3BhcnRpYWxfc2V0c3RhdGUocGFydGlhbG9iamVjdCAqcHRvLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqZm4sICpmbmFyZ3MsICprdywgKmRpY3Q7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIoT09PTyk6X19zZXRzdGF0ZV9fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmZuLCAmZm5hcmdzLCAma3csICZkaWN0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfWERFQ1JFRihwdG8tPmZuKTsKKyAgICBQeV9YREVDUkVGKHB0by0+YXJncyk7CisgICAgUHlfWERFQ1JFRihwdG8tPmt3KTsKKyAgICBQeV9YREVDUkVGKHB0by0+ZGljdCk7CisgICAgcHRvLT5mbiA9IGZuOworICAgIHB0by0+YXJncyA9IGZuYXJnczsKKyAgICBwdG8tPmt3ID0ga3c7CisgICAgaWYgKGRpY3QgIT0gUHlfTm9uZSkgeworICAgICAgcHRvLT5kaWN0ID0gZGljdDsKKyAgICAgIFB5X0lOQ1JFRihkaWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgcHRvLT5kaWN0ID0gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKGZuKTsKKyAgICBQeV9JTkNSRUYoZm5hcmdzKTsKKyAgICBQeV9JTkNSRUYoa3cpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgcGFydGlhbF9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKXBhcnRpYWxfcmVkdWNlLCBNRVRIX05PQVJHU30sCisgICAgeyJfX3NldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pcGFydGlhbF9zZXRzdGF0ZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKwogc3RhdGljIFB5VHlwZU9iamVjdCBwYXJ0aWFsX3R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgImZ1bmN0b29scy5wYXJ0aWFsIiwgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwpAQCAtMzA0LDcgKzM1MSw3IEBACiAgICAgb2Zmc2V0b2YocGFydGlhbG9iamVjdCwgd2Vha3JlZmxpc3QpLCAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBwYXJ0aWFsX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgcGFydGlhbF9tZW1iZXJsaXN0LCAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIHBhcnRpYWxfZ2V0c2V0bGlzdCwgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMgYi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCmluZGV4IDY5MWQxZTguLmFhOWRkNGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKKysrIGIvTW9kdWxlcy9faGFzaG9wZW5zc2wuYwpAQCAtMTYsMjAgKzE2LDUwIEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKKyNpZmRlZiBXSVRIX1RIUkVBRAorI2luY2x1ZGUgInB5dGhyZWFkLmgiCisgICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikgXAorICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAorICAgICAgICAgICAgaWYgKCFQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDApKSB7IFwKKyAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTIFwKKyAgICAgICAgICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDEpOyBcCisgICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0KKyAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKSBcCisgICAgICAgIGlmICgob2JqKS0+bG9jaykgeyBcCisgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soKG9iaiktPmxvY2spOyBcCisgICAgICAgIH0KKyNlbHNlCisgICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikKKyAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKQorI2VuZGlmCisKIC8qIEVWUCBpcyB0aGUgcHJlZmVycmVkIGludGVyZmFjZSB0byBoYXNoaW5nIGluIE9wZW5TU0wgKi8KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgogCiAjZGVmaW5lIE1VTkNIX1NJWkUgSU5UX01BWAogCisvKiBUT0RPKGdwcyk6IFdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgYSBtb2R1bGUgb3IgRVZQb2JqZWN0IGF0dHJpYnV0ZQorICogdG8gYWxsb3cgdGhlIHVzZXIgdG8gb3B0aW1pemUgYmFzZWQgb24gdGhlIHBsYXRmb3JtIHRoZXkncmUgdXNpbmcuICovCisjZGVmaW5lIEhBU0hMSUJfR0lMX01JTlNJWkUgMjA0OAogCiAjaWZuZGVmIEhBU0hfT0JKX0NPTlNUUlVDVE9SCiAjZGVmaW5lIEhBU0hfT0JKX0NPTlNUUlVDVE9SIDAKICNlbmRpZgogCisvKiBNaW5pbXVtIE9wZW5TU0wgdmVyc2lvbiBuZWVkZWQgdG8gc3VwcG9ydCBzaGEyMjQgYW5kIGhpZ2hlci4gKi8KKyNpZiBkZWZpbmVkKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIpICYmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDgwMDApCisjZGVmaW5lIF9PUEVOU1NMX1NVUFBPUlRTX1NIQTIKKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5T2JqZWN0ICAgICAgICAgICAgKm5hbWU7ICAvKiBuYW1lIG9mIHRoaXMgaGFzaCBhbGdvcml0aG0gKi8KICAgICBFVlBfTURfQ1RYICAgICAgICAgIGN0eDsgICAgLyogT3BlblNTTCBtZXNzYWdlIGRpZ2VzdCBjb250ZXh0ICovCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeVRocmVhZF90eXBlX2xvY2sgIGxvY2s7ICAgLyogT3BlblNTTCBjb250ZXh0IGxvY2sgKi8KKyNlbmRpZgogfSBFVlBvYmplY3Q7CiAKIApAQCAtNDMsMTAgKzczLDEyIEBACiAKIERFRklORV9DT05TVFNfRk9SX05FVyhtZDUpCiBERUZJTkVfQ09OU1RTX0ZPUl9ORVcoc2hhMSkKKyNpZmRlZiBfT1BFTlNTTF9TVVBQT1JUU19TSEEyCiBERUZJTkVfQ09OU1RTX0ZPUl9ORVcoc2hhMjI0KQogREVGSU5FX0NPTlNUU19GT1JfTkVXKHNoYTI1NikKIERFRklORV9DT05TVFNfRk9SX05FVyhzaGEzODQpCiBERUZJTkVfQ09OU1RTX0ZPUl9ORVcoc2hhNTEyKQorI2VuZGlmCiAKIAogc3RhdGljIEVWUG9iamVjdCAqCkBAIC01OCwyNiArOTAsNTcgQEAKICAgICBpZiAocmV0dmFsICE9IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKG5hbWUpOwogICAgICAgICByZXR2YWwtPm5hbWUgPSBuYW1lOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgICAgIHJldHZhbC0+bG9jayA9IE5VTEw7CisjZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gcmV0dmFsOwogfQogCitzdGF0aWMgdm9pZAorRVZQX2hhc2goRVZQb2JqZWN0ICpzZWxmLCBjb25zdCB2b2lkICp2cCwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgdW5zaWduZWQgaW50IHByb2Nlc3M7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXZwOworICAgIHdoaWxlICgwIDwgbGVuKQorICAgIHsKKyAgICAgICAgaWYgKGxlbiA+IChQeV9zc2l6ZV90KU1VTkNIX1NJWkUpCisgICAgICAgICAgICBwcm9jZXNzID0gTVVOQ0hfU0laRTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvY2VzcyA9IFB5X1NBRkVfRE9XTkNBU1QobGVuLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworICAgICAgICBFVlBfRGlnZXN0VXBkYXRlKCZzZWxmLT5jdHgsIChjb25zdCB2b2lkKiljcCwgcHJvY2Vzcyk7CisgICAgICAgIGxlbiAtPSBwcm9jZXNzOworICAgICAgICBjcCArPSBwcm9jZXNzOworICAgIH0KK30KKwogLyogSW50ZXJuYWwgbWV0aG9kcyBmb3IgYSBoYXNoIG9iamVjdCAqLwogCiBzdGF0aWMgdm9pZAotRVZQX2RlYWxsb2MoUHlPYmplY3QgKnB0cikKK0VWUF9kZWFsbG9jKEVWUG9iamVjdCAqc2VsZikKIHsKLSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJigoRVZQb2JqZWN0ICopcHRyKS0+Y3R4KTsKLSAgICBQeV9YREVDUkVGKCgoRVZQb2JqZWN0ICopcHRyKS0+bmFtZSk7Ci0gICAgUHlPYmplY3RfRGVsKHB0cik7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBpZiAoc2VsZi0+bG9jayAhPSBOVUxMKQorICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soc2VsZi0+bG9jayk7CisjZW5kaWYKKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJnNlbGYtPmN0eCk7CisgICAgUHlfWERFQ1JFRihzZWxmLT5uYW1lKTsKKyAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKK3N0YXRpYyB2b2lkIGxvY2tlZF9FVlBfTURfQ1RYX2NvcHkoRVZQX01EX0NUWCAqbmV3X2N0eF9wLCBFVlBvYmplY3QgKnNlbGYpCit7CisgICAgRU5URVJfSEFTSExJQihzZWxmKTsKKyAgICBFVlBfTURfQ1RYX2NvcHkobmV3X2N0eF9wLCAmc2VsZi0+Y3R4KTsKKyAgICBMRUFWRV9IQVNITElCKHNlbGYpOworfQogCiAvKiBFeHRlcm5hbCBtZXRob2RzIGZvciBhIGhhc2ggb2JqZWN0ICovCiAKIFB5RG9jX1NUUlZBUihFVlBfY29weV9fZG9jX18sICJSZXR1cm4gYSBjb3B5IG9mIHRoZSBoYXNoIG9iamVjdC4iKTsKIAorCiBzdGF0aWMgUHlPYmplY3QgKgogRVZQX2NvcHkoRVZQb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewpAQCAtODYsNyArMTQ5LDcgQEAKICAgICBpZiAoIChuZXdvYmogPSBuZXdFVlBvYmplY3Qoc2VsZi0+bmFtZSkpPT1OVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIEVWUF9NRF9DVFhfY29weSgmbmV3b2JqLT5jdHgsICZzZWxmLT5jdHgpOworICAgIGxvY2tlZF9FVlBfTURfQ1RYX2NvcHkoJm5ld29iai0+Y3R4LCBzZWxmKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3b2JqOwogfQogCkBAIC0xMDEsNyArMTY0LDcgQEAKICAgICBQeU9iamVjdCAqcmV0dmFsOwogICAgIHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZTsKIAotICAgIEVWUF9NRF9DVFhfY29weSgmdGVtcF9jdHgsICZzZWxmLT5jdHgpOworICAgIGxvY2tlZF9FVlBfTURfQ1RYX2NvcHkoJnRlbXBfY3R4LCBzZWxmKTsKICAgICBkaWdlc3Rfc2l6ZSA9IEVWUF9NRF9DVFhfc2l6ZSgmdGVtcF9jdHgpOwogICAgIEVWUF9EaWdlc3RGaW5hbCgmdGVtcF9jdHgsIGRpZ2VzdCwgTlVMTCk7CiAKQEAgLTEyMyw3ICsxODYsNyBAQAogICAgIHVuc2lnbmVkIGludCBpLCBqLCBkaWdlc3Rfc2l6ZTsKIAogICAgIC8qIEdldCB0aGUgcmF3IChiaW5hcnkpIGRpZ2VzdCB2YWx1ZSAqLwotICAgIEVWUF9NRF9DVFhfY29weSgmdGVtcF9jdHgsICZzZWxmLT5jdHgpOworICAgIGxvY2tlZF9FVlBfTURfQ1RYX2NvcHkoJnRlbXBfY3R4LCBzZWxmKTsKICAgICBkaWdlc3Rfc2l6ZSA9IEVWUF9NRF9DVFhfc2l6ZSgmdGVtcF9jdHgpOwogICAgIEVWUF9EaWdlc3RGaW5hbCgmdGVtcF9jdHgsIGRpZ2VzdCwgTlVMTCk7CiAKQEAgLTEzNCwyMSArMTk3LDIxIEBACiAgICAgLyogKG5vdCBhIHByb2JsZW0gYmVjYXVzZSB3ZSBob2xkIHRoZSBHSUwgYnkgZGVmYXVsdCkgKi8KICAgICByZXR2YWwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBkaWdlc3Rfc2l6ZSAqIDIpOwogICAgIGlmICghcmV0dmFsKQotCSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGhleF9kaWdlc3QgPSBQeVN0cmluZ19Bc1N0cmluZyhyZXR2YWwpOwogICAgIGlmICghaGV4X2RpZ2VzdCkgewotCSAgICBQeV9ERUNSRUYocmV0dmFsKTsKLQkgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIE1ha2UgaGV4IHZlcnNpb24gb2YgdGhlIGRpZ2VzdCAqLwogICAgIGZvcihpPWo9MDsgaTxkaWdlc3Rfc2l6ZTsgaSsrKSB7CiAgICAgICAgIGNoYXIgYzsKICAgICAgICAgYyA9IChkaWdlc3RbaV0gPj4gNCkgJiAweGY7Ci0JYyA9IChjPjkpID8gYysnYSctMTAgOiBjICsgJzAnOworICAgICAgICBjID0gKGM+OSkgPyBjKydhJy0xMCA6IGMgKyAnMCc7CiAgICAgICAgIGhleF9kaWdlc3RbaisrXSA9IGM7CiAgICAgICAgIGMgPSAoZGlnZXN0W2ldICYgMHhmKTsKLQljID0gKGM+OSkgPyBjKydhJy0xMCA6IGMgKyAnMCc7CisgICAgICAgIGMgPSAoYz45KSA/IGMrJ2EnLTEwIDogYyArICcwJzsKICAgICAgICAgaGV4X2RpZ2VzdFtqKytdID0gYzsKICAgICB9CiAgICAgcmV0dXJuIHJldHZhbDsKQEAgLTE2MCw0NiArMjIzLDU3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogRVZQX3VwZGF0ZShFVlBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHVuc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuOworICAgIFB5X2J1ZmZlciB2aWV3OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzp1cGRhdGUiLCAmY3AsICZsZW4pKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6dXBkYXRlIiwgJnZpZXcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChsZW4gPiAwICYmIGxlbiA8PSBNVU5DSF9TSVpFKSB7Ci0gICAgRVZQX0RpZ2VzdFVwZGF0ZSgmc2VsZi0+Y3R4LCBjcCwgUHlfU0FGRV9ET1dOQ0FTVChsZW4sIFB5X3NzaXplX3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBQeV9zc2l6ZV90IG9mZnNldCA9IDA7Ci0gICAgICAgIHdoaWxlIChsZW4pIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm9jZXNzID0gbGVuID4gTVVOQ0hfU0laRSA/IE1VTkNIX1NJWkUgOiBsZW47Ci0gICAgICAgICAgICBFVlBfRGlnZXN0VXBkYXRlKCZzZWxmLT5jdHgsIGNwICsgb2Zmc2V0LCBwcm9jZXNzKTsKLSAgICAgICAgICAgIGxlbiAtPSBwcm9jZXNzOwotICAgICAgICAgICAgb2Zmc2V0ICs9IHByb2Nlc3M7Ci0gICAgICAgIH0KKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwgJiYgdmlldy5sZW4gPj0gSEFTSExJQl9HSUxfTUlOU0laRSkgeworICAgICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgICAgICAvKiBmYWlsPyBsb2NrID0gTlVMTCBhbmQgd2UgZmFpbCBvdmVyIHRvIG5vbi10aHJlYWRlZCBjb2RlLiAqLwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisKKyAgICBpZiAoc2VsZi0+bG9jayAhPSBOVUxMKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHNlbGYtPmxvY2ssIDEpOworICAgICAgICBFVlBfaGFzaChzZWxmLCB2aWV3LmJ1Ziwgdmlldy5sZW4pOworICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+bG9jayk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgRVZQX2hhc2goc2VsZiwgdmlldy5idWYsIHZpZXcubGVuKTsKKyAgICB9CisKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgRVZQX21ldGhvZHNbXSA9IHsKLSAgICB7InVwZGF0ZSIsCSAgKFB5Q0Z1bmN0aW9uKUVWUF91cGRhdGUsICAgIE1FVEhfVkFSQVJHUywgRVZQX3VwZGF0ZV9fZG9jX199LAotICAgIHsiZGlnZXN0IiwJICAoUHlDRnVuY3Rpb24pRVZQX2RpZ2VzdCwgICAgTUVUSF9OT0FSR1MsICBFVlBfZGlnZXN0X19kb2NfX30sCisgICAgeyJ1cGRhdGUiLCAgICAoUHlDRnVuY3Rpb24pRVZQX3VwZGF0ZSwgICAgTUVUSF9WQVJBUkdTLCBFVlBfdXBkYXRlX19kb2NfX30sCisgICAgeyJkaWdlc3QiLCAgICAoUHlDRnVuY3Rpb24pRVZQX2RpZ2VzdCwgICAgTUVUSF9OT0FSR1MsICBFVlBfZGlnZXN0X19kb2NfX30sCiAgICAgeyJoZXhkaWdlc3QiLCAoUHlDRnVuY3Rpb24pRVZQX2hleGRpZ2VzdCwgTUVUSF9OT0FSR1MsICBFVlBfaGV4ZGlnZXN0X19kb2NfX30sCi0gICAgeyJjb3B5IiwJICAoUHlDRnVuY3Rpb24pRVZQX2NvcHksICAgICAgTUVUSF9OT0FSR1MsICBFVlBfY29weV9fZG9jX199LAotICAgIHtOVUxMLAkgIE5VTEx9CQkvKiBzZW50aW5lbCAqLworICAgIHsiY29weSIsICAgICAgKFB5Q0Z1bmN0aW9uKUVWUF9jb3B5LCAgICAgIE1FVEhfTk9BUkdTLCAgRVZQX2NvcHlfX2RvY19ffSwKKyAgICB7TlVMTCwgICAgICAgIE5VTEx9ICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBFVlBfZ2V0X2Jsb2NrX3NpemUoRVZQb2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewotICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhFVlBfTURfQ1RYX2Jsb2NrX3NpemUoJigoRVZQb2JqZWN0ICopc2VsZiktPmN0eCkpOworICAgIGxvbmcgYmxvY2tfc2l6ZTsKKyAgICBibG9ja19zaXplID0gRVZQX01EX0NUWF9ibG9ja19zaXplKCZzZWxmLT5jdHgpOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoYmxvY2tfc2l6ZSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBFVlBfZ2V0X2RpZ2VzdF9zaXplKEVWUG9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoRVZQX01EX0NUWF9zaXplKCYoKEVWUG9iamVjdCAqKXNlbGYpLT5jdHgpKTsKKyAgICBsb25nIHNpemU7CisgICAgc2l6ZSA9IEVWUF9NRF9DVFhfc2l6ZSgmc2VsZi0+Y3R4KTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHNpemUpOwogfQogCiBzdGF0aWMgUHlNZW1iZXJEZWYgRVZQX21lbWJlcnNbXSA9IHsKQEAgLTI0MSwyNCArMzE1LDI1IEBACiB7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJuYW1lIiwgInN0cmluZyIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICpuYW1lX29iaiA9IE5VTEw7CisgICAgUHlfYnVmZmVyIHZpZXcgPSB7IDAgfTsKICAgICBjaGFyICpuYW1lU3RyOwotICAgIHVuc2lnbmVkIGNoYXIgKmNwID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IDA7CiAgICAgY29uc3QgRVZQX01EICpkaWdlc3Q7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xzIzpIQVNIIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lX29iaiwgJmNwLCAmbGVuKSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfHMqOkhBU0giLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWVfb2JqLCAmdmlldykpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIGlmICghUHlBcmdfUGFyc2UobmFtZV9vYmosICJzIiwgJm5hbWVTdHIpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJuYW1lIG11c3QgYmUgYSBzdHJpbmciKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBkaWdlc3QgPSBFVlBfZ2V0X2RpZ2VzdGJ5bmFtZShuYW1lU3RyKTsKICAgICBpZiAoIWRpZ2VzdCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gaGFzaCBmdW5jdGlvbiIpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBFVlBfRGlnZXN0SW5pdCgmc2VsZi0+Y3R4LCBkaWdlc3QpOwpAQCAtMjY2LDIxICszNDEsMTcgQEAKICAgICBzZWxmLT5uYW1lID0gbmFtZV9vYmo7CiAgICAgUHlfSU5DUkVGKHNlbGYtPm5hbWUpOwogCi0gICAgaWYgKGNwICYmIGxlbikgewotICAgICAgICBpZiAobGVuID4gMCAmJiBsZW4gPD0gTVVOQ0hfU0laRSkgewotICAgICAgICBFVlBfRGlnZXN0VXBkYXRlKCZzZWxmLT5jdHgsIGNwLCBQeV9TQUZFX0RPV05DQVNUKGxlbiwgUHlfc3NpemVfdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQpKTsKKyAgICBpZiAodmlldy5vYmopIHsKKyAgICAgICAgaWYgKHZpZXcubGVuID49IEhBU0hMSUJfR0lMX01JTlNJWkUpIHsKKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIEVWUF9oYXNoKHNlbGYsIHZpZXcuYnVmLCB2aWV3Lmxlbik7CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUHlfc3NpemVfdCBvZmZzZXQgPSAwOwotICAgICAgICAgICAgd2hpbGUgKGxlbikgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm9jZXNzID0gbGVuID4gTVVOQ0hfU0laRSA/IE1VTkNIX1NJWkUgOiBsZW47Ci0gICAgICAgICAgICAgICAgRVZQX0RpZ2VzdFVwZGF0ZSgmc2VsZi0+Y3R4LCBjcCArIG9mZnNldCwgcHJvY2Vzcyk7Ci0gICAgICAgICAgICAgICAgbGVuIC09IHByb2Nlc3M7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHByb2Nlc3M7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBFVlBfaGFzaChzZWxmLCB2aWV3LmJ1Ziwgdmlldy5sZW4pOwogICAgICAgICB9CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiAwOwogfQogI2VuZGlmCkBAIC0zMDUsMTEgKzM3NiwxMSBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBFVlB0eXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJfaGFzaGxpYi5IQVNIIiwgICAgLyp0cF9uYW1lKi8KLSAgICBzaXplb2YoRVZQb2JqZWN0KSwJLyp0cF9iYXNpY3NpemUqLwotICAgIDAsCQkJLyp0cF9pdGVtc2l6ZSovCisgICAgc2l6ZW9mKEVWUG9iamVjdCksICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KICAgICAvKiBtZXRob2RzICovCi0gICAgRVZQX2RlYWxsb2MsCS8qdHBfZGVhbGxvYyovCi0gICAgMCwJCQkvKnRwX3ByaW50Ki8KKyAgICAoZGVzdHJ1Y3RvcilFVlBfZGVhbGxvYywgICAgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUqLwpAQCAtMzI2LDEzICszOTcsMTMgQEAKICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKnRwX2ZsYWdzKi8KICAgICBoYXNodHlwZV9kb2MsICAgICAgIC8qdHBfZG9jKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsCQkJLyp0cF9jbGVhciovCi0gICAgMCwJCQkvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLAkJCS8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsCQkJLyp0cF9pdGVyKi8KLSAgICAwLAkJCS8qdHBfaXRlcm5leHQqLwotICAgIEVWUF9tZXRob2RzLAkvKiB0cF9tZXRob2RzICovCi0gICAgRVZQX21lbWJlcnMsCS8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KKyAgICBFVlBfbWV0aG9kcywgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBFVlBfbWVtYmVycywgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBFVlBfZ2V0c2V0ZXJzLCAgICAgIC8qIHRwX2dldHNldCAqLwogI2lmIDEKICAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTM2OCwxNyArNDM5LDEyIEBACiAgICAgfQogCiAgICAgaWYgKGNwICYmIGxlbikgewotICAgICAgICBpZiAobGVuID4gMCAmJiBsZW4gPD0gTVVOQ0hfU0laRSkgewotICAgICAgICAgICAgRVZQX0RpZ2VzdFVwZGF0ZSgmc2VsZi0+Y3R4LCBjcCwgUHlfU0FGRV9ET1dOQ0FTVChsZW4sIFB5X3NzaXplX3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCkpOworICAgICAgICBpZiAobGVuID49IEhBU0hMSUJfR0lMX01JTlNJWkUpIHsKKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIEVWUF9oYXNoKHNlbGYsIGNwLCBsZW4pOworICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5X3NzaXplX3Qgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChsZW4pIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJvY2VzcyA9IGxlbiA+IE1VTkNIX1NJWkUgPyBNVU5DSF9TSVpFIDogbGVuOwotICAgICAgICAgICAgICAgIEVWUF9EaWdlc3RVcGRhdGUoJnNlbGYtPmN0eCwgY3AgKyBvZmZzZXQsIHByb2Nlc3MpOwotICAgICAgICAgICAgICAgIGxlbiAtPSBwcm9jZXNzOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSBwcm9jZXNzOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgRVZQX2hhc2goc2VsZiwgY3AsIGxlbik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQwMCwxMyArNDY2LDEzIEBACiB7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJuYW1lIiwgInN0cmluZyIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICpuYW1lX29iaiA9IE5VTEw7CisgICAgUHlfYnVmZmVyIHZpZXcgPSB7IDAgfTsKKyAgICBQeU9iamVjdCAqcmV0X29iajsKICAgICBjaGFyICpuYW1lOwogICAgIGNvbnN0IEVWUF9NRCAqZGlnZXN0OwotICAgIHVuc2lnbmVkIGNoYXIgKmNwID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IDA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJPfHMjOm5ldyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9vYmosICZjcCwgJmxlbikpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJPfHMqOm5ldyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9vYmosICZ2aWV3KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTQxNyw3ICs0ODMsMTEgQEAKIAogICAgIGRpZ2VzdCA9IEVWUF9nZXRfZGlnZXN0YnluYW1lKG5hbWUpOwogCi0gICAgcmV0dXJuIEVWUG5ldyhuYW1lX29iaiwgZGlnZXN0LCBOVUxMLCBjcCwgbGVuKTsKKyAgICByZXRfb2JqID0gRVZQbmV3KG5hbWVfb2JqLCBkaWdlc3QsIE5VTEwsICh1bnNpZ25lZCBjaGFyKil2aWV3LmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgIHZpZXcubGVuKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKworICAgIHJldHVybiByZXRfb2JqOwogfQogCiAvKgpAQCAtNDMxLDE4ICs1MDEsMjAgQEAKICAgICBzdGF0aWMgUHlPYmplY3QgKiBcCiAgICAgRVZQX25ld18gIyMgTkFNRSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSBcCiAgICAgeyBcCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmNwID0gTlVMTDsgXAotICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IDA7IFwKKyAgICAgICAgUHlfYnVmZmVyIHZpZXcgPSB7IDAgfTsgXAorICAgICAgICBQeU9iamVjdCAqcmV0X29iajsgXAogICAgICBcCi0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHMjOiIgI05BTUUgLCAmY3AsICZsZW4pKSB7IFwKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8cyo6IiAjTkFNRSAsICZ2aWV3KSkgeyBcCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAogICAgICAgICB9IFwKICAgICAgXAotICAgICAgICByZXR1cm4gRVZQbmV3KCBcCi0gICAgICAgICAgICAgICAgQ09OU1RfICMjIE5BTUUgIyMgX25hbWVfb2JqLCBcCi0gICAgICAgICAgICAgICAgTlVMTCwgXAotICAgICAgICAgICAgICAgIENPTlNUX25ld18gIyMgTkFNRSAjIyBfY3R4X3AsIFwKLSAgICAgICAgICAgICAgICBjcCwgbGVuKTsgXAorICAgICAgICByZXRfb2JqID0gRVZQbmV3KCBcCisgICAgICAgICAgICAgICAgICAgIENPTlNUXyAjIyBOQU1FICMjIF9uYW1lX29iaiwgXAorICAgICAgICAgICAgICAgICAgICBOVUxMLCBcCisgICAgICAgICAgICAgICAgICAgIENPTlNUX25ld18gIyMgTkFNRSAjIyBfY3R4X3AsIFwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKXZpZXcuYnVmLCB2aWV3Lmxlbik7IFwKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7IFwKKyAgICAgICAgcmV0dXJuIHJldF9vYmo7IFwKICAgICB9CiAKIC8qIGEgUHlNZXRob2REZWYgc3RydWN0dXJlIGZvciB0aGUgY29uc3RydWN0b3IgKi8KQEAgLTQ2MywxMCArNTM1LDEyIEBACiAKIEdFTl9DT05TVFJVQ1RPUihtZDUpCiBHRU5fQ09OU1RSVUNUT1Ioc2hhMSkKKyNpZmRlZiBfT1BFTlNTTF9TVVBQT1JUU19TSEEyCiBHRU5fQ09OU1RSVUNUT1Ioc2hhMjI0KQogR0VOX0NPTlNUUlVDVE9SKHNoYTI1NikKIEdFTl9DT05TVFJVQ1RPUihzaGEzODQpCiBHRU5fQ09OU1RSVUNUT1Ioc2hhNTEyKQorI2VuZGlmCiAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlICovCiAKQEAgLTQ3NCwxMSArNTQ4LDEzIEBACiAgICAgeyJuZXciLCAoUHlDRnVuY3Rpb24pRVZQX25ldywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIEVWUF9uZXdfX2RvY19ffSwKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihtZDUpLAogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKHNoYTEpLAorI2lmZGVmIF9PUEVOU1NMX1NVUFBPUlRTX1NIQTIKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihzaGEyMjQpLAogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKHNoYTI1NiksCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYoc2hhMzg0KSwKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihzaGE1MTIpLAotICAgIHtOVUxMLAlOVUxMfQkJIC8qIFNlbnRpbmVsICovCisjZW5kaWYKKyAgICB7TlVMTCwgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCiAKQEAgLTUxMiw4ICs1ODgsMTAgQEAKICAgICAvKiB0aGVzZSBjb25zdGFudHMgYXJlIHVzZWQgYnkgdGhlIGNvbnZlbmllbmNlIGNvbnN0cnVjdG9ycyAqLwogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKG1kNSk7CiAgICAgSU5JVF9DT05TVFJVQ1RPUl9DT05TVEFOVFMoc2hhMSk7CisjaWZkZWYgX09QRU5TU0xfU1VQUE9SVFNfU0hBMgogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKHNoYTIyNCk7CiAgICAgSU5JVF9DT05TVFJVQ1RPUl9DT05TVEFOVFMoc2hhMjU2KTsKICAgICBJTklUX0NPTlNUUlVDVE9SX0NPTlNUQU5UUyhzaGEzODQpOwogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKHNoYTUxMik7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMgYi9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCmluZGV4IGY3MDVlYzEuLjk0OWU1YjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9faGVhcHFtb2R1bGUuYwpAQCAtMiw3ICsyLDcgQEAKIAogQyBpbXBsZW1lbnRhdGlvbiBkZXJpdmVkIGRpcmVjdGx5IGZyb20gaGVhcHEucHkgaW4gUHkyLjMKIHdoaWNoIHdhcyB3cml0dGVuIGJ5IEtldmluIE8nQ29ubm9yLCBhdWdtZW50ZWQgYnkgVGltIFBldGVycywKLWFubm90YXRlZCBieSBGcmFu529pcyBQaW5hcmQsIGFuZCBjb252ZXJ0ZWQgdG8gQyBieSBSYXltb25kIEhldHRpbmdlci4KK2Fubm90YXRlZCBieSBGcmFuw6dvaXMgUGluYXJkLCBhbmQgY29udmVydGVkIHRvIEMgYnkgUmF5bW9uZCBIZXR0aW5nZXIuCiAKICovCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5jIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3MTIxYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCkBAIC0wLDAgKzEsNzY4IEBACisvKgorICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgSS9PIGxpYiBhcyBkZWZpbmVkIGJ5IFBFUCAzMTE2IC0gIk5ldyBJL08iCisgICAgCisgICAgQ2xhc3NlcyBkZWZpbmVkIGhlcmU6IFVuc3VwcG9ydGVkT3BlcmF0aW9uLCBCbG9ja2luZ0lPRXJyb3IuCisgICAgRnVuY3Rpb25zIGRlZmluZWQgaGVyZTogb3BlbigpLgorICAgIAorICAgIE1vc3RseSB3cml0dGVuIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjCisqLworCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKKyNpbmNsdWRlICJfaW9tb2R1bGUuaCIKKworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19UWVBFU19IICovCisKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmIC8qIEhBVkVfU1lTX1NUQVRfSCAqLworCisKKy8qIFZhcmlvdXMgaW50ZXJuZWQgc3RyaW5ncyAqLworCitQeU9iamVjdCAqX1B5SU9fc3RyX2Nsb3NlOworUHlPYmplY3QgKl9QeUlPX3N0cl9jbG9zZWQ7CitQeU9iamVjdCAqX1B5SU9fc3RyX2RlY29kZTsKK1B5T2JqZWN0ICpfUHlJT19zdHJfZW5jb2RlOworUHlPYmplY3QgKl9QeUlPX3N0cl9maWxlbm87CitQeU9iamVjdCAqX1B5SU9fc3RyX2ZsdXNoOworUHlPYmplY3QgKl9QeUlPX3N0cl9nZXRzdGF0ZTsKK1B5T2JqZWN0ICpfUHlJT19zdHJfaXNhdHR5OworUHlPYmplY3QgKl9QeUlPX3N0cl9uZXdsaW5lczsKK1B5T2JqZWN0ICpfUHlJT19zdHJfbmw7CitQeU9iamVjdCAqX1B5SU9fc3RyX3JlYWQ7CitQeU9iamVjdCAqX1B5SU9fc3RyX3JlYWQxOworUHlPYmplY3QgKl9QeUlPX3N0cl9yZWFkYWJsZTsKK1B5T2JqZWN0ICpfUHlJT19zdHJfcmVhZGludG87CitQeU9iamVjdCAqX1B5SU9fc3RyX3JlYWRsaW5lOworUHlPYmplY3QgKl9QeUlPX3N0cl9yZXNldDsKK1B5T2JqZWN0ICpfUHlJT19zdHJfc2VlazsKK1B5T2JqZWN0ICpfUHlJT19zdHJfc2Vla2FibGU7CitQeU9iamVjdCAqX1B5SU9fc3RyX3NldHN0YXRlOworUHlPYmplY3QgKl9QeUlPX3N0cl90ZWxsOworUHlPYmplY3QgKl9QeUlPX3N0cl90cnVuY2F0ZTsKK1B5T2JqZWN0ICpfUHlJT19zdHJfd3JpdGFibGU7CitQeU9iamVjdCAqX1B5SU9fc3RyX3dyaXRlOworCitQeU9iamVjdCAqX1B5SU9fZW1wdHlfc3RyOworUHlPYmplY3QgKl9QeUlPX2VtcHR5X2J5dGVzOworUHlPYmplY3QgKl9QeUlPX3plcm87CisKKwwKK1B5RG9jX1NUUlZBUihtb2R1bGVfZG9jLAorIlRoZSBpbyBtb2R1bGUgcHJvdmlkZXMgdGhlIFB5dGhvbiBpbnRlcmZhY2VzIHRvIHN0cmVhbSBoYW5kbGluZy4gVGhlXG4iCisiYnVpbHRpbiBvcGVuIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUuXG4iCisiXG4iCisiQXQgdGhlIHRvcCBvZiB0aGUgSS9PIGhpZXJhcmNoeSBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBJT0Jhc2UuIEl0XG4iCisiZGVmaW5lcyB0aGUgYmFzaWMgaW50ZXJmYWNlIHRvIGEgc3RyZWFtLiBOb3RlLCBob3dldmVyLCB0aGF0IHRoZXJlIGlzIG5vXG4iCisic2VwZXJhdGlvbiBiZXR3ZWVuIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gc3RyZWFtczsgaW1wbGVtZW50YXRpb25zIGFyZVxuIgorImFsbG93ZWQgdG8gdGhyb3cgYW4gSU9FcnJvciBpZiB0aGV5IGRvIG5vdCBzdXBwb3J0IGEgZ2l2ZW4gb3BlcmF0aW9uLlxuIgorIlxuIgorIkV4dGVuZGluZyBJT0Jhc2UgaXMgUmF3SU9CYXNlIHdoaWNoIGRlYWxzIHNpbXBseSB3aXRoIHRoZSByZWFkaW5nIGFuZFxuIgorIndyaXRpbmcgb2YgcmF3IGJ5dGVzIHRvIGEgc3RyZWFtLiBGaWxlSU8gc3ViY2xhc3NlcyBSYXdJT0Jhc2UgdG8gcHJvdmlkZVxuIgorImFuIGludGVyZmFjZSB0byBPUyBmaWxlcy5cbiIKKyJcbiIKKyJCdWZmZXJlZElPQmFzZSBkZWFscyB3aXRoIGJ1ZmZlcmluZyBvbiBhIHJhdyBieXRlIHN0cmVhbSAoUmF3SU9CYXNlKS4gSXRzXG4iCisic3ViY2xhc3NlcywgQnVmZmVyZWRXcml0ZXIsIEJ1ZmZlcmVkUmVhZGVyLCBhbmQgQnVmZmVyZWRSV1BhaXIgYnVmZmVyXG4iCisic3RyZWFtcyB0aGF0IGFyZSByZWFkYWJsZSwgd3JpdGFibGUsIGFuZCBib3RoIHJlc3BlY3RpdmVseS5cbiIKKyJCdWZmZXJlZFJhbmRvbSBwcm92aWRlcyBhIGJ1ZmZlcmVkIGludGVyZmFjZSB0byByYW5kb20gYWNjZXNzXG4iCisic3RyZWFtcy4gQnl0ZXNJTyBpcyBhIHNpbXBsZSBzdHJlYW0gb2YgaW4tbWVtb3J5IGJ5dGVzLlxuIgorIlxuIgorIkFub3RoZXIgSU9CYXNlIHN1YmNsYXNzLCBUZXh0SU9CYXNlLCBkZWFscyB3aXRoIHRoZSBlbmNvZGluZyBhbmQgZGVjb2RpbmdcbiIKKyJvZiBzdHJlYW1zIGludG8gdGV4dC4gVGV4dElPV3JhcHBlciwgd2hpY2ggZXh0ZW5kcyBpdCwgaXMgYSBidWZmZXJlZCB0ZXh0XG4iCisiaW50ZXJmYWNlIHRvIGEgYnVmZmVyZWQgcmF3IHN0cmVhbSAoYEJ1ZmZlcmVkSU9CYXNlYCkuIEZpbmFsbHksIFN0cmluZ0lPXG4iCisiaXMgYSBpbi1tZW1vcnkgc3RyZWFtIGZvciB0ZXh0LlxuIgorIlxuIgorIkFyZ3VtZW50IG5hbWVzIGFyZSBub3QgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiwgYW5kIG9ubHkgdGhlIGFyZ3VtZW50c1xuIgorIm9mIG9wZW4oKSBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cy5cbiIKKyJcbiIKKyJkYXRhOlxuIgorIlxuIgorIkRFRkFVTFRfQlVGRkVSX1NJWkVcbiIKKyJcbiIKKyIgICBBbiBpbnQgY29udGFpbmluZyB0aGUgZGVmYXVsdCBidWZmZXIgc2l6ZSB1c2VkIGJ5IHRoZSBtb2R1bGUncyBidWZmZXJlZFxuIgorIiAgIEkvTyBjbGFzc2VzLiBvcGVuKCkgdXNlcyB0aGUgZmlsZSdzIGJsa3NpemUgKGFzIG9idGFpbmVkIGJ5IG9zLnN0YXQpIGlmXG4iCisiICAgcG9zc2libGUuXG4iCisgICAgKTsKKwwKKworLyoKKyAqIEJsb2NraW5nSU9FcnJvciBleHRlbmRzIElPRXJyb3IKKyAqLworCitzdGF0aWMgaW50CitibG9ja2luZ2lvZXJyb3JfaW5pdChQeUJsb2NraW5nSU9FcnJvck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBQeU9iamVjdCAqbXllcnJubyA9IE5VTEwsICpzdHJlcnJvciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmJhc2VhcmdzID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHdyaXR0ZW4gPSAwOworCisgICAgYXNzZXJ0KFB5VHVwbGVfQ2hlY2soYXJncykpOworCisgICAgc2VsZi0+d3JpdHRlbiA9IDA7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPT3xuOkJsb2NraW5nSU9FcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZteWVycm5vLCAmc3RyZXJyb3IsICZ3cml0dGVuKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgYmFzZWFyZ3MgPSBQeVR1cGxlX1BhY2soMiwgbXllcnJubywgc3RyZXJyb3IpOworICAgIGlmIChiYXNlYXJncyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyogVGhpcyB3aWxsIHRha2UgY2FyZSBvZiBpbml0aWFsaXppbmcgb2YgbXllcnJubyBhbmQgc3RyZXJyb3IgbWVtYmVycyAqLworICAgIGlmICgoKFB5VHlwZU9iamVjdCAqKVB5RXhjX0lPRXJyb3IpLT50cF9pbml0KAorICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKXNlbGYsIGJhc2VhcmdzLCBrd2RzKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoYmFzZWFyZ3MpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFB5X0RFQ1JFRihiYXNlYXJncyk7CisKKyAgICBzZWxmLT53cml0dGVuID0gd3JpdHRlbjsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5TWVtYmVyRGVmIGJsb2NraW5naW9lcnJvcl9tZW1iZXJzW10gPSB7CisgICAgeyJjaGFyYWN0ZXJzX3dyaXR0ZW4iLCBUX1BZU1NJWkVULCBvZmZzZXRvZihQeUJsb2NraW5nSU9FcnJvck9iamVjdCwgd3JpdHRlbiksIDB9LAorICAgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgX1B5RXhjX0Jsb2NraW5nSU9FcnJvciA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiQmxvY2tpbmdJT0Vycm9yIiwgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoUHlCbG9ja2luZ0lPRXJyb3JPYmplY3QpLCAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qdHBfZmxhZ3MqLworICAgIFB5RG9jX1NUUigiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIEkvTyB3b3VsZCBibG9jayAiCisgICAgICAgICAgICAgICJvbiBhIG5vbi1ibG9ja2luZyBJL08gc3RyZWFtIiksIC8qIHRwX2RvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBibG9ja2luZ2lvZXJyb3JfbWVtYmVycywgICAgLyogdHBfbWVtYmVycyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIChpbml0cHJvYylibG9ja2luZ2lvZXJyb3JfaW5pdCwgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CitQeU9iamVjdCAqUHlFeGNfQmxvY2tpbmdJT0Vycm9yID0gKFB5T2JqZWN0ICopJl9QeUV4Y19CbG9ja2luZ0lPRXJyb3I7CisMCisKKy8qCisgKiBUaGUgbWFpbiBvcGVuKCkgZnVuY3Rpb24KKyAqLworUHlEb2NfU1RSVkFSKG9wZW5fZG9jLAorIk9wZW4gZmlsZSBhbmQgcmV0dXJuIGEgc3RyZWFtLiAgUmFpc2UgSU9FcnJvciB1cG9uIGZhaWx1cmUuXG4iCisiXG4iCisiZmlsZSBpcyBlaXRoZXIgYSB0ZXh0IG9yIGJ5dGUgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSAoYW5kIHRoZSBwYXRoXG4iCisiaWYgdGhlIGZpbGUgaXNuJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvXG4iCisiYmUgb3BlbmVkIG9yIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBmaWxlIHRvIGJlXG4iCisid3JhcHBlZC4gKElmIGEgZmlsZSBkZXNjcmlwdG9yIGlzIGdpdmVuLCBpdCBpcyBjbG9zZWQgd2hlbiB0aGVcbiIKKyJyZXR1cm5lZCBJL08gb2JqZWN0IGlzIGNsb3NlZCwgdW5sZXNzIGNsb3NlZmQgaXMgc2V0IHRvIEZhbHNlLilcbiIKKyJcbiIKKyJtb2RlIGlzIGFuIG9wdGlvbmFsIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgbW9kZSBpbiB3aGljaCB0aGUgZmlsZVxuIgorImlzIG9wZW5lZC4gSXQgZGVmYXVsdHMgdG8gJ3InIHdoaWNoIG1lYW5zIG9wZW4gZm9yIHJlYWRpbmcgaW4gdGV4dFxuIgorIm1vZGUuICBPdGhlciBjb21tb24gdmFsdWVzIGFyZSAndycgZm9yIHdyaXRpbmcgKHRydW5jYXRpbmcgdGhlIGZpbGUgaWZcbiIKKyJpdCBhbHJlYWR5IGV4aXN0cyksIGFuZCAnYScgZm9yIGFwcGVuZGluZyAod2hpY2ggb24gc29tZSBVbml4IHN5c3RlbXMsXG4iCisibWVhbnMgdGhhdCBhbGwgd3JpdGVzIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIHJlZ2FyZGxlc3Mgb2YgdGhlXG4iCisiY3VycmVudCBzZWVrIHBvc2l0aW9uKS4gSW4gdGV4dCBtb2RlLCBpZiBlbmNvZGluZyBpcyBub3Qgc3BlY2lmaWVkIHRoZVxuIgorImVuY29kaW5nIHVzZWQgaXMgcGxhdGZvcm0gZGVwZW5kZW50LiAoRm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgcmF3XG4iCisiYnl0ZXMgdXNlIGJpbmFyeSBtb2RlIGFuZCBsZWF2ZSBlbmNvZGluZyB1bnNwZWNpZmllZC4pIFRoZSBhdmFpbGFibGVcbiIKKyJtb2RlcyBhcmU6XG4iCisiXG4iCisiPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgorIkNoYXJhY3RlciBNZWFuaW5nXG4iCisiLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIidyJyAgICAgICBvcGVuIGZvciByZWFkaW5nIChkZWZhdWx0KVxuIgorIid3JyAgICAgICBvcGVuIGZvciB3cml0aW5nLCB0cnVuY2F0aW5nIHRoZSBmaWxlIGZpcnN0XG4iCisiJ2EnICAgICAgIG9wZW4gZm9yIHdyaXRpbmcsIGFwcGVuZGluZyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGlmIGl0IGV4aXN0c1xuIgorIidiJyAgICAgICBiaW5hcnkgbW9kZVxuIgorIid0JyAgICAgICB0ZXh0IG1vZGUgKGRlZmF1bHQpXG4iCisiJysnICAgICAgIG9wZW4gYSBkaXNrIGZpbGUgZm9yIHVwZGF0aW5nIChyZWFkaW5nIGFuZCB3cml0aW5nKVxuIgorIidVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IHVubmVlZGVkXG4iCisiICAgICAgICAgIGZvciBuZXcgY29kZSlcbiIKKyI9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCisiXG4iCisiVGhlIGRlZmF1bHQgbW9kZSBpcyAncnQnIChvcGVuIGZvciByZWFkaW5nIHRleHQpLiBGb3IgYmluYXJ5IHJhbmRvbVxuIgorImFjY2VzcywgdGhlIG1vZGUgJ3crYicgb3BlbnMgYW5kIHRydW5jYXRlcyB0aGUgZmlsZSB0byAwIGJ5dGVzLCB3aGlsZVxuIgorIidyK2InIG9wZW5zIHRoZSBmaWxlIHdpdGhvdXQgdHJ1bmNhdGlvbi5cbiIKKyJcbiIKKyJQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGZpbGVzIG9wZW5lZCBpbiBiaW5hcnkgYW5kIHRleHQgbW9kZXMsXG4iCisiZXZlbiB3aGVuIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0gZG9lc24ndC4gRmlsZXMgb3BlbmVkIGluXG4iCisiYmluYXJ5IG1vZGUgKGFwcGVuZGluZyAnYicgdG8gdGhlIG1vZGUgYXJndW1lbnQpIHJldHVybiBjb250ZW50cyBhc1xuIgorImJ5dGVzIG9iamVjdHMgd2l0aG91dCBhbnkgZGVjb2RpbmcuIEluIHRleHQgbW9kZSAodGhlIGRlZmF1bHQsIG9yIHdoZW5cbiIKKyIndCcgaXMgYXBwZW5kZWQgdG8gdGhlIG1vZGUgYXJndW1lbnQpLCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXJlXG4iCisicmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYVxuIgorInBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLlxuIgorIlxuIgorImJ1ZmZlcmluZyBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LlxuIgorIlBhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3RcbiIKKyJsaW5lIGJ1ZmZlcmluZyAob25seSB1c2FibGUgaW4gdGV4dCBtb2RlKSwgYW5kIGFuIGludGVnZXIgPiAxIHRvIGluZGljYXRlXG4iCisidGhlIHNpemUgb2YgYSBmaXhlZC1zaXplIGNodW5rIGJ1ZmZlci4gIFdoZW4gbm8gYnVmZmVyaW5nIGFyZ3VtZW50IGlzXG4iCisiZ2l2ZW4sIHRoZSBkZWZhdWx0IGJ1ZmZlcmluZyBwb2xpY3kgd29ya3MgYXMgZm9sbG93czpcbiIKKyJcbiIKKyIqIEJpbmFyeSBmaWxlcyBhcmUgYnVmZmVyZWQgaW4gZml4ZWQtc2l6ZSBjaHVua3M7IHRoZSBzaXplIG9mIHRoZSBidWZmZXJcbiIKKyIgIGlzIGNob3NlbiB1c2luZyBhIGhldXJpc3RpYyB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSB1bmRlcmx5aW5nIGRldmljZSdzXG4iCisiICBcImJsb2NrIHNpemVcIiBhbmQgZmFsbGluZyBiYWNrIG9uIGBpby5ERUZBVUxUX0JVRkZFUl9TSVpFYC5cbiIKKyIgIE9uIG1hbnkgc3lzdGVtcywgdGhlIGJ1ZmZlciB3aWxsIHR5cGljYWxseSBiZSA0MDk2IG9yIDgxOTIgYnl0ZXMgbG9uZy5cbiIKKyJcbiIKKyIqIFwiSW50ZXJhY3RpdmVcIiB0ZXh0IGZpbGVzIChmaWxlcyBmb3Igd2hpY2ggaXNhdHR5KCkgcmV0dXJucyBUcnVlKVxuIgorIiAgdXNlIGxpbmUgYnVmZmVyaW5nLiAgT3RoZXIgdGV4dCBmaWxlcyB1c2UgdGhlIHBvbGljeSBkZXNjcmliZWQgYWJvdmVcbiIKKyIgIGZvciBiaW5hcnkgZmlsZXMuXG4iCisiXG4iCisiZW5jb2RpbmcgaXMgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIHVzZWQgdG8gZGVjb2RlIG9yIGVuY29kZSB0aGVcbiIKKyJmaWxlLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBlbmNvZGluZyBpc1xuIgorInBsYXRmb3JtIGRlcGVuZGVudCwgYnV0IGFueSBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgUHl0aG9uIGNhbiBiZVxuIgorInBhc3NlZC4gIFNlZSB0aGUgY29kZWNzIG1vZHVsZSBmb3IgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGVuY29kaW5ncy5cbiIKKyJcbiIKKyJlcnJvcnMgaXMgYW4gb3B0aW9uYWwgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIGhvdyBlbmNvZGluZyBlcnJvcnMgYXJlIHRvXG4iCisiYmUgaGFuZGxlZC0tLXRoaXMgYXJndW1lbnQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGJpbmFyeSBtb2RlLiBQYXNzXG4iCisiJ3N0cmljdCcgdG8gcmFpc2UgYSBWYWx1ZUVycm9yIGV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhbiBlbmNvZGluZyBlcnJvclxuIgorIih0aGUgZGVmYXVsdCBvZiBOb25lIGhhcyB0aGUgc2FtZSBlZmZlY3QpLCBvciBwYXNzICdpZ25vcmUnIHRvIGlnbm9yZVxuIgorImVycm9ycy4gKE5vdGUgdGhhdCBpZ25vcmluZyBlbmNvZGluZyBlcnJvcnMgY2FuIGxlYWQgdG8gZGF0YSBsb3NzLilcbiIKKyJTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGNvZGVjcy5yZWdpc3RlciBmb3IgYSBsaXN0IG9mIHRoZSBwZXJtaXR0ZWRcbiIKKyJlbmNvZGluZyBlcnJvciBzdHJpbmdzLlxuIgorIlxuIgorIm5ld2xpbmUgY29udHJvbHMgaG93IHVuaXZlcnNhbCBuZXdsaW5lcyB3b3JrcyAoaXQgb25seSBhcHBsaWVzIHRvIHRleHRcbiIKKyJtb2RlKS4gSXQgY2FuIGJlIE5vbmUsICcnLCAnXFxuJywgJ1xccicsIGFuZCAnXFxyXFxuJy4gIEl0IHdvcmtzIGFzXG4iCisiZm9sbG93czpcbiIKKyJcbiIKKyIqIE9uIGlucHV0LCBpZiBuZXdsaW5lIGlzIE5vbmUsIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzXG4iCisiICBlbmFibGVkLiBMaW5lcyBpbiB0aGUgaW5wdXQgY2FuIGVuZCBpbiAnXFxuJywgJ1xccicsIG9yICdcXHJcXG4nLCBhbmRcbiIKKyIgIHRoZXNlIGFyZSB0cmFuc2xhdGVkIGludG8gJ1xcbicgYmVmb3JlIGJlaW5nIHJldHVybmVkIHRvIHRoZVxuIgorIiAgY2FsbGVyLiBJZiBpdCBpcyAnJywgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSBpcyBlbmFibGVkLCBidXQgbGluZVxuIgorIiAgZW5kaW5ncyBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuIElmIGl0IGhhcyBhbnkgb2ZcbiIKKyIgIHRoZSBvdGhlciBsZWdhbCB2YWx1ZXMsIGlucHV0IGxpbmVzIGFyZSBvbmx5IHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVuXG4iCisiICBzdHJpbmcsIGFuZCB0aGUgbGluZSBlbmRpbmcgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuXG4iCisiXG4iCisiKiBPbiBvdXRwdXQsIGlmIG5ld2xpbmUgaXMgTm9uZSwgYW55ICdcXG4nIGNoYXJhY3RlcnMgd3JpdHRlbiBhcmVcbiIKKyIgIHRyYW5zbGF0ZWQgdG8gdGhlIHN5c3RlbSBkZWZhdWx0IGxpbmUgc2VwYXJhdG9yLCBvcy5saW5lc2VwLiBJZlxuIgorIiAgbmV3bGluZSBpcyAnJywgbm8gdHJhbnNsYXRpb24gdGFrZXMgcGxhY2UuIElmIG5ld2xpbmUgaXMgYW55IG9mIHRoZVxuIgorIiAgb3RoZXIgbGVnYWwgdmFsdWVzLCBhbnkgJ1xcbicgY2hhcmFjdGVycyB3cml0dGVuIGFyZSB0cmFuc2xhdGVkIHRvXG4iCisiICB0aGUgZ2l2ZW4gc3RyaW5nLlxuIgorIlxuIgorIklmIGNsb3NlZmQgaXMgRmFsc2UsIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGtlcHQgb3BlblxuIgorIndoZW4gdGhlIGZpbGUgaXMgY2xvc2VkLiBUaGlzIGRvZXMgbm90IHdvcmsgd2hlbiBhIGZpbGUgbmFtZSBpcyBnaXZlblxuIgorImFuZCBtdXN0IGJlIFRydWUgaW4gdGhhdCBjYXNlLlxuIgorIlxuIgorIm9wZW4oKSByZXR1cm5zIGEgZmlsZSBvYmplY3Qgd2hvc2UgdHlwZSBkZXBlbmRzIG9uIHRoZSBtb2RlLCBhbmRcbiIKKyJ0aHJvdWdoIHdoaWNoIHRoZSBzdGFuZGFyZCBmaWxlIG9wZXJhdGlvbnMgc3VjaCBhcyByZWFkaW5nIGFuZCB3cml0aW5nXG4iCisiYXJlIHBlcmZvcm1lZC4gV2hlbiBvcGVuKCkgaXMgdXNlZCB0byBvcGVuIGEgZmlsZSBpbiBhIHRleHQgbW9kZSAoJ3cnLFxuIgorIidyJywgJ3d0JywgJ3J0JywgZXRjLiksIGl0IHJldHVybnMgYSBUZXh0SU9XcmFwcGVyLiBXaGVuIHVzZWQgdG8gb3BlblxuIgorImEgZmlsZSBpbiBhIGJpbmFyeSBtb2RlLCB0aGUgcmV0dXJuZWQgY2xhc3MgdmFyaWVzOiBpbiByZWFkIGJpbmFyeVxuIgorIm1vZGUsIGl0IHJldHVybnMgYSBCdWZmZXJlZFJlYWRlcjsgaW4gd3JpdGUgYmluYXJ5IGFuZCBhcHBlbmQgYmluYXJ5XG4iCisibW9kZXMsIGl0IHJldHVybnMgYSBCdWZmZXJlZFdyaXRlciwgYW5kIGluIHJlYWQvd3JpdGUgbW9kZSwgaXQgcmV0dXJuc1xuIgorImEgQnVmZmVyZWRSYW5kb20uXG4iCisiXG4iCisiSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYSBzdHJpbmcgb3IgYnl0ZWFycmF5IGFzIGEgZmlsZSBmb3IgYm90aFxuIgorInJlYWRpbmcgYW5kIHdyaXRpbmcuIEZvciBzdHJpbmdzIFN0cmluZ0lPIGNhbiBiZSB1c2VkIGxpa2UgYSBmaWxlXG4iCisib3BlbmVkIGluIGEgdGV4dCBtb2RlLCBhbmQgZm9yIGJ5dGVzIGEgQnl0ZXNJTyBjYW4gYmUgdXNlZCBsaWtlIGEgZmlsZVxuIgorIm9wZW5lZCBpbiBhIGJpbmFyeSBtb2RlLlxuIgorICAgICk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb19vcGVuKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAibW9kZSIsICJidWZmZXJpbmciLAorICAgICAgICAgICAgICAgICAgICAgICJlbmNvZGluZyIsICJlcnJvcnMiLCAibmV3bGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgImNsb3NlZmQiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZmlsZTsKKyAgICBjaGFyICptb2RlID0gInIiOworICAgIGludCBidWZmZXJpbmcgPSAtMSwgY2xvc2VmZCA9IDE7CisgICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMLCAqZXJyb3JzID0gTlVMTCwgKm5ld2xpbmUgPSBOVUxMOworICAgIHVuc2lnbmVkIGk7CisKKyAgICBpbnQgcmVhZGluZyA9IDAsIHdyaXRpbmcgPSAwLCBhcHBlbmRpbmcgPSAwLCB1cGRhdGluZyA9IDA7CisgICAgaW50IHRleHQgPSAwLCBiaW5hcnkgPSAwLCB1bml2ZXJzYWwgPSAwOworCisgICAgY2hhciByYXdtb2RlWzVdLCAqbTsKKyAgICBpbnQgbGluZV9idWZmZXJpbmcsIGlzYXR0eTsKKworICAgIFB5T2JqZWN0ICpyYXcsICptb2Rlb2JqID0gTlVMTCwgKmJ1ZmZlciA9IE5VTEwsICp3cmFwcGVyID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfHNpenp6aTpvcGVuIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmbW9kZSwgJmJ1ZmZlcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jb2RpbmcsICZlcnJvcnMsICZuZXdsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbG9zZWZkKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhmaWxlKSAmJgorCSFQeUJ5dGVzX0NoZWNrKGZpbGUpICYmCisJIVB5TnVtYmVyX0NoZWNrKGZpbGUpKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXByID0gUHlPYmplY3RfUmVwcihmaWxlKTsKKyAgICAgICAgaWYgKHJlcHIgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImludmFsaWQgZmlsZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhyZXByKSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVwcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRGVjb2RlIG1vZGUgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuKG1vZGUpOyBpKyspIHsKKyAgICAgICAgY2hhciBjID0gbW9kZVtpXTsKKworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICByZWFkaW5nID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd3JzoKKyAgICAgICAgICAgIHdyaXRpbmcgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgYXBwZW5kaW5nID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIHVwZGF0aW5nID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIHRleHQgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgYmluYXJ5ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdVJzoKKyAgICAgICAgICAgIHVuaXZlcnNhbCA9IDE7CisgICAgICAgICAgICByZWFkaW5nID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZ290byBpbnZhbGlkX21vZGU7CisgICAgICAgIH0KKworICAgICAgICAvKiBjIG11c3Qgbm90IGJlIGR1cGxpY2F0ZWQgKi8KKyAgICAgICAgaWYgKHN0cmNocihtb2RlK2krMSwgYykpIHsKKyAgICAgICAgICBpbnZhbGlkX21vZGU6CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgImludmFsaWQgbW9kZTogJyVzJyIsIG1vZGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgIH0KKworICAgIG0gPSByYXdtb2RlOworICAgIGlmIChyZWFkaW5nKSAgICoobSsrKSA9ICdyJzsKKyAgICBpZiAod3JpdGluZykgICAqKG0rKykgPSAndyc7CisgICAgaWYgKGFwcGVuZGluZykgKihtKyspID0gJ2EnOworICAgIGlmICh1cGRhdGluZykgICoobSsrKSA9ICcrJzsKKyAgICAqbSA9ICdcMCc7CisKKyAgICAvKiBQYXJhbWV0ZXJzIHZhbGlkYXRpb24gKi8KKyAgICBpZiAodW5pdmVyc2FsKSB7CisgICAgICAgIGlmICh3cml0aW5nIHx8IGFwcGVuZGluZykgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHVzZSBVIGFuZCB3cml0aW5nIG1vZGUgYXQgb25jZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmVhZGluZyA9IDE7CisgICAgfQorCisgICAgaWYgKHRleHQgJiYgYmluYXJ5KSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGhhdmUgdGV4dCBhbmQgYmluYXJ5IG1vZGUgYXQgb25jZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAocmVhZGluZyArIHdyaXRpbmcgKyBhcHBlbmRpbmcgPiAxKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSBvZiByZWFkL3dyaXRlL2FwcGVuZCBtb2RlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChiaW5hcnkgJiYgZW5jb2RpbmcgIT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJiaW5hcnkgbW9kZSBkb2Vzbid0IHRha2UgYW4gZW5jb2RpbmcgYXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGJpbmFyeSAmJiBlcnJvcnMgIT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJiaW5hcnkgbW9kZSBkb2Vzbid0IHRha2UgYW4gZXJyb3JzIGFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChiaW5hcnkgJiYgbmV3bGluZSAhPSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImJpbmFyeSBtb2RlIGRvZXNuJ3QgdGFrZSBhIG5ld2xpbmUgYXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogQ3JlYXRlIHRoZSBSYXcgZmlsZSBzdHJlYW0gKi8KKyAgICByYXcgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopJlB5RmlsZUlPX1R5cGUsCisJCQkJIk9zaSIsIGZpbGUsIHJhd21vZGUsIGNsb3NlZmQpOworICAgIGlmIChyYXcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBtb2Rlb2JqID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobW9kZSk7CisgICAgaWYgKG1vZGVvYmogPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIC8qIGJ1ZmZlcmluZyAqLworICAgIHsKKyAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2QocmF3LCAiaXNhdHR5IiwgTlVMTCk7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlzYXR0eSA9IFB5TG9uZ19Bc0xvbmcocmVzKTsKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIGlmIChpc2F0dHkgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKGJ1ZmZlcmluZyA9PSAxIHx8IChidWZmZXJpbmcgPCAwICYmIGlzYXR0eSkpIHsKKyAgICAgICAgYnVmZmVyaW5nID0gLTE7CisgICAgICAgIGxpbmVfYnVmZmVyaW5nID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBsaW5lX2J1ZmZlcmluZyA9IDA7CisKKyAgICBpZiAoYnVmZmVyaW5nIDwgMCkgeworICAgICAgICBidWZmZXJpbmcgPSBERUZBVUxUX0JVRkZFUl9TSVpFOworI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxLU0laRQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICAgICAgICAgIGxvbmcgZmlsZW5vOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2QocmF3LCAiZmlsZW5vIiwgTlVMTCk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgZmlsZW5vID0gUHlJbnRfQXNMb25nKHJlcyk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIGlmIChmaWxlbm8gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBpZiAoZnN0YXQoZmlsZW5vLCAmc3QpID49IDAgJiYgc3Quc3RfYmxrc2l6ZSA+IDEpCisgICAgICAgICAgICAgICAgYnVmZmVyaW5nID0gc3Quc3RfYmxrc2l6ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIGlmIChidWZmZXJpbmcgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgYnVmZmVyaW5nIHNpemUiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvKiBpZiBub3QgYnVmZmVyaW5nLCByZXR1cm5zIHRoZSByYXcgZmlsZSBvYmplY3QgKi8KKyAgICBpZiAoYnVmZmVyaW5nID09IDApIHsKKyAgICAgICAgaWYgKCFiaW5hcnkpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBoYXZlIHVuYnVmZmVyZWQgdGV4dCBJL08iKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBQeV9ERUNSRUYobW9kZW9iaik7CisgICAgICAgIHJldHVybiByYXc7CisgICAgfQorCisgICAgLyogd3JhcHMgaW50byBhIGJ1ZmZlcmVkIGZpbGUgKi8KKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpCdWZmZXJlZF9jbGFzczsKKworICAgICAgICBpZiAodXBkYXRpbmcpCisgICAgICAgICAgICBCdWZmZXJlZF9jbGFzcyA9IChQeU9iamVjdCAqKSZQeUJ1ZmZlcmVkUmFuZG9tX1R5cGU7CisgICAgICAgIGVsc2UgaWYgKHdyaXRpbmcgfHwgYXBwZW5kaW5nKQorICAgICAgICAgICAgQnVmZmVyZWRfY2xhc3MgPSAoUHlPYmplY3QgKikmUHlCdWZmZXJlZFdyaXRlcl9UeXBlOworICAgICAgICBlbHNlIGlmIChyZWFkaW5nKQorICAgICAgICAgICAgQnVmZmVyZWRfY2xhc3MgPSAoUHlPYmplY3QgKikmUHlCdWZmZXJlZFJlYWRlcl9UeXBlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIG1vZGU6ICclcyciLCBtb2RlKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oQnVmZmVyZWRfY2xhc3MsICJPaSIsIHJhdywgYnVmZmVyaW5nKTsKKyAgICB9CisgICAgUHlfQ0xFQVIocmF3KTsKKyAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKworICAgIC8qIGlmIGJpbmFyeSwgcmV0dXJucyB0aGUgYnVmZmVyZWQgZmlsZSAqLworICAgIGlmIChiaW5hcnkpIHsKKyAgICAgICAgUHlfREVDUkVGKG1vZGVvYmopOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKworICAgIC8qIHdyYXBzIGludG8gYSBUZXh0SU9XcmFwcGVyICovCisgICAgd3JhcHBlciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QgKikmUHlUZXh0SU9XcmFwcGVyX1R5cGUsCisJCQkJICAgICJPc3NzaSIsCisJCQkJICAgIGJ1ZmZlciwKKwkJCQkgICAgZW5jb2RpbmcsIGVycm9ycywgbmV3bGluZSwKKwkJCQkgICAgbGluZV9idWZmZXJpbmcpOworICAgIFB5X0NMRUFSKGJ1ZmZlcik7CisgICAgaWYgKHdyYXBwZXIgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKHdyYXBwZXIsICJtb2RlIiwgbW9kZW9iaikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIFB5X0RFQ1JFRihtb2Rlb2JqKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKKworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJhdyk7CisgICAgUHlfWERFQ1JFRihtb2Rlb2JqKTsKKyAgICBQeV9YREVDUkVGKGJ1ZmZlcik7CisgICAgUHlfWERFQ1JFRih3cmFwcGVyKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwwKKy8qCisgKiBQcml2YXRlIGhlbHBlcnMgZm9yIHRoZSBpbyBtb2R1bGUuCisgKi8KKworUHlfb2ZmX3QKK1B5TnVtYmVyX0FzT2ZmX3QoUHlPYmplY3QgKml0ZW0sIFB5T2JqZWN0ICplcnIpCit7CisgICAgUHlfb2ZmX3QgcmVzdWx0OworICAgIFB5T2JqZWN0ICpydW5lcnI7CisgICAgUHlPYmplY3QgKnZhbHVlID0gUHlOdW1iZXJfSW5kZXgoaXRlbSk7CisgICAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChQeUludF9DaGVjayh2YWx1ZSkpIHsKKyAgICAgICAgLyogV2UgYXNzdW1lIGEgbG9uZyBhbHdheXMgZml0cyBpbiBhIFB5X29mZl90Li4uICovCisgICAgICAgIHJlc3VsdCA9IChQeV9vZmZfdCkgUHlJbnRfQVNfTE9ORyh2YWx1ZSk7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIC8qIFdlJ3JlIGRvbmUgaWYgUHlMb25nX0FzU3NpemVfdCgpIHJldHVybnMgd2l0aG91dCBlcnJvci4gKi8KKyAgICByZXN1bHQgPSBQeUxvbmdfQXNPZmZfdCh2YWx1ZSk7CisgICAgaWYgKHJlc3VsdCAhPSAtMSB8fCAhKHJ1bmVyciA9IFB5RXJyX09jY3VycmVkKCkpKQorICAgICAgICBnb3RvIGZpbmlzaDsKKworICAgIC8qIEVycm9yIGhhbmRsaW5nIGNvZGUgLS0gb25seSBtYW5hZ2UgT3ZlcmZsb3dFcnJvciBkaWZmZXJlbnRseSAqLworICAgIGlmICghUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKHJ1bmVyciwgUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAvKiBJZiBubyBlcnJvci1oYW5kbGluZyBkZXNpcmVkIHRoZW4gdGhlIGRlZmF1bHQgY2xpcHBpbmcKKyAgICAgICBpcyBzdWZmaWNpZW50LgorICAgICAqLworICAgIGlmICghZXJyKSB7CisgICAgICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodmFsdWUpKTsKKyAgICAgICAgLyogV2hldGhlciBvciBub3QgaXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCisgICAgICAgICAgIHplcm8gaXMgZGV0ZXJtaW5lZCBieSB0aGUgc2lnbiBvZiBvYl9zaXplCisgICAgICAgICovCisgICAgICAgIGlmIChfUHlMb25nX1NpZ24odmFsdWUpIDwgMCkKKyAgICAgICAgICAgIHJlc3VsdCA9IFBZX09GRl9UX01JTjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gUFlfT0ZGX1RfTUFYOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogT3RoZXJ3aXNlIHJlcGxhY2UgdGhlIGVycm9yIHdpdGggY2FsbGVyJ3MgZXJyb3Igb2JqZWN0LiAqLworICAgICAgICBQeUVycl9Gb3JtYXQoZXJyLAorICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBmaXQgJyUuMjAwcycgaW50byBhbiBvZmZzZXQtc2l6ZWQgaW50ZWdlciIsCisgICAgICAgICAgICAgICAgICAgICBpdGVtLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICB9CisKKyBmaW5pc2g6CisgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIEJhc2ljYWxseSB0aGUgIm4iIGZvcm1hdCBjb2RlIHdpdGggdGhlIGFiaWxpdHkgdG8gdHVybiBOb25lIGludG8gLTEuICovCitpbnQgCitfUHlJT19Db252ZXJ0U3NpemVfdChQeU9iamVjdCAqb2JqLCB2b2lkICpyZXN1bHQpIHsKKyAgICBQeV9zc2l6ZV90IGxpbWl0OworICAgIGlmIChvYmogPT0gUHlfTm9uZSkgeworICAgICAgICBsaW1pdCA9IC0xOworICAgIH0KKyAgICBlbHNlIGlmIChQeU51bWJlcl9DaGVjayhvYmopKSB7CisgICAgICAgIGxpbWl0ID0gUHlOdW1iZXJfQXNTc2l6ZV90KG9iaiwgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CisgICAgICAgIGlmIChsaW1pdCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCAnJS4yMDBzJyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgKigoUHlfc3NpemVfdCAqKXJlc3VsdCkgPSBsaW1pdDsKKyAgICByZXR1cm4gMTsKK30KKworCisvKgorICogTW9kdWxlIGRlZmluaXRpb24KKyAqLworCitQeU9iamVjdCAqX1B5SU9fb3NfbW9kdWxlID0gTlVMTDsKK1B5T2JqZWN0ICpfUHlJT19sb2NhbGVfbW9kdWxlID0gTlVMTDsKK1B5T2JqZWN0ICpfUHlJT191bnN1cHBvcnRlZF9vcGVyYXRpb24gPSBOVUxMOworCitzdGF0aWMgUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXSA9IHsKKyAgICB7Im9wZW4iLCAoUHlDRnVuY3Rpb24paW9fb3BlbiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9wZW5fZG9jfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK1B5TU9ESU5JVF9GVU5DCitpbml0X2lvKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm0gPSBQeV9Jbml0TW9kdWxlNCgiX2lvIiwgbW9kdWxlX21ldGhvZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfZG9jLCBOVUxMLCBQWVRIT05fQVBJX1ZFUlNJT04pOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIC8qIHB1dCBvcyBpbiB0aGUgbW9kdWxlIHN0YXRlICovCisgICAgX1B5SU9fb3NfbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJvcyIpOworICAgIGlmIChfUHlJT19vc19tb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworCisjZGVmaW5lIEFERF9UWVBFKHR5cGUsIG5hbWUpIFwKKyAgICBpZiAoUHlUeXBlX1JlYWR5KHR5cGUpIDwgMCkgXAorICAgICAgICBnb3RvIGZhaWw7IFwKKyAgICBQeV9JTkNSRUYodHlwZSk7IFwKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sIG5hbWUsIChQeU9iamVjdCAqKXR5cGUpIDwgMCkgeyAgXAorICAgICAgICBQeV9ERUNSRUYodHlwZSk7IFwKKyAgICAgICAgZ290byBmYWlsOyBcCisgICAgfQorCisgICAgLyogREVGQVVMVF9CVUZGRVJfU0laRSAqLworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZBVUxUX0JVRkZFUl9TSVpFKSA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIC8qIFVuc3VwcG9ydGVkT3BlcmF0aW9uIGluaGVyaXRzIGZyb20gVmFsdWVFcnJvciBhbmQgSU9FcnJvciAqLworICAgIF9QeUlPX3Vuc3VwcG9ydGVkX29wZXJhdGlvbiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigKKyAgICAgICAgKFB5T2JqZWN0ICopJlB5VHlwZV9UeXBlLCAicyhPTyl7fSIsCisgICAgICAgICJVbnN1cHBvcnRlZE9wZXJhdGlvbiIsIFB5RXhjX1ZhbHVlRXJyb3IsIFB5RXhjX0lPRXJyb3IpOworICAgIGlmIChfUHlJT191bnN1cHBvcnRlZF9vcGVyYXRpb24gPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworICAgIFB5X0lOQ1JFRihfUHlJT191bnN1cHBvcnRlZF9vcGVyYXRpb24pOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVuc3VwcG9ydGVkT3BlcmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUlPX3Vuc3VwcG9ydGVkX29wZXJhdGlvbikgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBCbG9ja2luZ0lPRXJyb3IgKi8KKyAgICBfUHlFeGNfQmxvY2tpbmdJT0Vycm9yLnRwX2Jhc2UgPSAoUHlUeXBlT2JqZWN0ICopIFB5RXhjX0lPRXJyb3I7CisgICAgQUREX1RZUEUoJl9QeUV4Y19CbG9ja2luZ0lPRXJyb3IsICJCbG9ja2luZ0lPRXJyb3IiKTsKKworICAgIC8qIENvbmNyZXRlIGJhc2UgdHlwZXMgb2YgdGhlIElPIEFCQ3MuCisgICAgICAgKHRoZSBBQkNzIHRoZW1zZWx2ZXMgYXJlIGRlY2xhcmVkIHRocm91Z2ggaW5oZXJpdGFuY2UgaW4gaW8ucHkpCisgICAgKi8KKyAgICBBRERfVFlQRSgmUHlJT0Jhc2VfVHlwZSwgIl9JT0Jhc2UiKTsKKyAgICBBRERfVFlQRSgmUHlSYXdJT0Jhc2VfVHlwZSwgIl9SYXdJT0Jhc2UiKTsKKyAgICBBRERfVFlQRSgmUHlCdWZmZXJlZElPQmFzZV9UeXBlLCAiX0J1ZmZlcmVkSU9CYXNlIik7CisgICAgQUREX1RZUEUoJlB5VGV4dElPQmFzZV9UeXBlLCAiX1RleHRJT0Jhc2UiKTsKKworICAgIC8qIEltcGxlbWVudGF0aW9uIG9mIGNvbmNyZXRlIElPIG9iamVjdHMuICovCisgICAgLyogRmlsZUlPICovCisgICAgUHlGaWxlSU9fVHlwZS50cF9iYXNlID0gJlB5UmF3SU9CYXNlX1R5cGU7CisgICAgQUREX1RZUEUoJlB5RmlsZUlPX1R5cGUsICJGaWxlSU8iKTsKKworICAgIC8qIEJ5dGVzSU8gKi8KKyAgICBQeUJ5dGVzSU9fVHlwZS50cF9iYXNlID0gJlB5QnVmZmVyZWRJT0Jhc2VfVHlwZTsKKyAgICBBRERfVFlQRSgmUHlCeXRlc0lPX1R5cGUsICJCeXRlc0lPIik7CisKKyAgICAvKiBTdHJpbmdJTyAqLworICAgIFB5U3RyaW5nSU9fVHlwZS50cF9iYXNlID0gJlB5VGV4dElPQmFzZV9UeXBlOworICAgIEFERF9UWVBFKCZQeVN0cmluZ0lPX1R5cGUsICJTdHJpbmdJTyIpOworCisgICAgLyogQnVmZmVyZWRSZWFkZXIgKi8KKyAgICBQeUJ1ZmZlcmVkUmVhZGVyX1R5cGUudHBfYmFzZSA9ICZQeUJ1ZmZlcmVkSU9CYXNlX1R5cGU7CisgICAgQUREX1RZUEUoJlB5QnVmZmVyZWRSZWFkZXJfVHlwZSwgIkJ1ZmZlcmVkUmVhZGVyIik7CisKKyAgICAvKiBCdWZmZXJlZFdyaXRlciAqLworICAgIFB5QnVmZmVyZWRXcml0ZXJfVHlwZS50cF9iYXNlID0gJlB5QnVmZmVyZWRJT0Jhc2VfVHlwZTsKKyAgICBBRERfVFlQRSgmUHlCdWZmZXJlZFdyaXRlcl9UeXBlLCAiQnVmZmVyZWRXcml0ZXIiKTsKKworICAgIC8qIEJ1ZmZlcmVkUldQYWlyICovCisgICAgUHlCdWZmZXJlZFJXUGFpcl9UeXBlLnRwX2Jhc2UgPSAmUHlCdWZmZXJlZElPQmFzZV9UeXBlOworICAgIEFERF9UWVBFKCZQeUJ1ZmZlcmVkUldQYWlyX1R5cGUsICJCdWZmZXJlZFJXUGFpciIpOworCisgICAgLyogQnVmZmVyZWRSYW5kb20gKi8KKyAgICBQeUJ1ZmZlcmVkUmFuZG9tX1R5cGUudHBfYmFzZSA9ICZQeUJ1ZmZlcmVkSU9CYXNlX1R5cGU7CisgICAgQUREX1RZUEUoJlB5QnVmZmVyZWRSYW5kb21fVHlwZSwgIkJ1ZmZlcmVkUmFuZG9tIik7CisKKyAgICAvKiBUZXh0SU9XcmFwcGVyICovCisgICAgUHlUZXh0SU9XcmFwcGVyX1R5cGUudHBfYmFzZSA9ICZQeVRleHRJT0Jhc2VfVHlwZTsKKyAgICBBRERfVFlQRSgmUHlUZXh0SU9XcmFwcGVyX1R5cGUsICJUZXh0SU9XcmFwcGVyIik7CisKKyAgICAvKiBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyICovCisgICAgQUREX1RZUEUoJlB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9UeXBlLCAiSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciIpOworCisgICAgLyogSW50ZXJuZWQgc3RyaW5ncyAqLworICAgIGlmICghKF9QeUlPX3N0cl9jbG9zZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImNsb3NlIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX2Nsb3NlZCA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImNsb3NlZCIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9kZWNvZGUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJkZWNvZGUiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfZW5jb2RlID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiZW5jb2RlIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX2ZpbGVubyA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImZpbGVubyIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9mbHVzaCA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImZsdXNoIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX2dldHN0YXRlID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiZ2V0c3RhdGUiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfaXNhdHR5ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiaXNhdHR5IikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX25ld2xpbmVzID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygibmV3bGluZXMiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfbmwgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJcbiIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9yZWFkID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygicmVhZCIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9yZWFkMSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInJlYWQxIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX3JlYWRhYmxlID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygicmVhZGFibGUiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfcmVhZGludG8gPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJyZWFkaW50byIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9yZWFkbGluZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInJlYWRsaW5lIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX3Jlc2V0ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygicmVzZXQiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfc2VlayA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInNlZWsiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfc2Vla2FibGUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJzZWVrYWJsZSIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9zZXRzdGF0ZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInNldHN0YXRlIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX3RlbGwgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ0ZWxsIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX3RydW5jYXRlID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygidHJ1bmNhdGUiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfd3JpdGUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ3cml0ZSIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl93cml0YWJsZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIndyaXRhYmxlIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgCisgICAgaWYgKCEoX1B5SU9fZW1wdHlfc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX2VtcHR5X2J5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT196ZXJvID0gUHlMb25nX0Zyb21Mb25nKDBMKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHJldHVybjsKKworICBmYWlsOgorICAgIFB5X0NMRUFSKF9QeUlPX29zX21vZHVsZSk7CisgICAgUHlfQ0xFQVIoX1B5SU9fdW5zdXBwb3J0ZWRfb3BlcmF0aW9uKTsKKyAgICBQeV9ERUNSRUYobSk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuaCBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYTUzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIERlY2xhcmF0aW9ucyBzaGFyZWQgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBpbyBtb2R1bGUKKyAqLworCisvKiBBQkNzICovCitleHRlcm4gUHlUeXBlT2JqZWN0IFB5SU9CYXNlX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5UmF3SU9CYXNlX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5QnVmZmVyZWRJT0Jhc2VfVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlUZXh0SU9CYXNlX1R5cGU7CisKKy8qIENvbmNyZXRlIGNsYXNzZXMgKi8KK2V4dGVybiBQeVR5cGVPYmplY3QgUHlGaWxlSU9fVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlCeXRlc0lPX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5U3RyaW5nSU9fVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlCdWZmZXJlZFJlYWRlcl9UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUJ1ZmZlcmVkV3JpdGVyX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5QnVmZmVyZWRSV1BhaXJfVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlCdWZmZXJlZFJhbmRvbV9UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeVRleHRJT1dyYXBwZXJfVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX1R5cGU7CisKKworZXh0ZXJuIGludCBfUHlJT19Db252ZXJ0U3NpemVfdChQeU9iamVjdCAqLCB2b2lkICopOworCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYXMgTUVUSF9OT0FSR1MgbWV0aG9kcywgYXJlIG5vcm1hbGx5IGNhbGxlZAorICogd2l0aCBhcmdzPU5VTEwsIGFuZCByZXR1cm4gYSBuZXcgcmVmZXJlbmNlLgorICogQlVUIHdoZW4gYXJncz1QeV9UcnVlIGlzIHBhc3NlZCwgdGhleSByZXR1cm4gYSBib3Jyb3dlZCByZWZlcmVuY2UuCisgKi8KK2V4dGVybiBQeU9iamVjdCogX1B5SU9CYXNlX2NoZWNrX3JlYWRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CitleHRlcm4gUHlPYmplY3QqIF9QeUlPQmFzZV9jaGVja193cml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOworZXh0ZXJuIFB5T2JqZWN0KiBfUHlJT0Jhc2VfY2hlY2tfc2Vla2FibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKK2V4dGVybiBQeU9iamVjdCogX1B5SU9CYXNlX2NoZWNrX2Nsb3NlZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOworCisvKiBIZWxwZXIgZm9yIGZpbmFsaXphdGlvbi4KKyAgIFRoaXMgZnVuY3Rpb24gd2lsbCByZXZpdmUgYW4gb2JqZWN0IHJlYWR5IHRvIGJlIGRlYWxsb2NhdGVkIGFuZCB0cnkgdG8KKyAgIGNsb3NlKCkgaXQuIEl0IHJldHVybnMgMCBpZiB0aGUgb2JqZWN0IGNhbiBiZSBkZXN0cm95ZWQsIG9yIC0xIGlmIGl0CisgICBpcyBhbGl2ZSBhZ2Fpbi4gKi8KK2V4dGVybiBpbnQgX1B5SU9CYXNlX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKTsKKworLyogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBGaWxlSU8gb2JqZWN0IGlzIGNsb3NlZC4KKyAgIERvZXNuJ3QgY2hlY2sgdGhlIGFyZ3VtZW50IHR5cGUsIHNvIGJlIGNhcmVmdWwhICovCitleHRlcm4gaW50IF9QeUZpbGVJT19jbG9zZWQoUHlPYmplY3QgKnNlbGYpOworCisvKiBTaG9ydGN1dCB0byB0aGUgY29yZSBvZiB0aGUgSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlci5kZWNvZGUgbWV0aG9kICovCitleHRlcm4gUHlPYmplY3QgKl9QeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJfZGVjb2RlKAorICAgIFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5wdXQsIGludCBmaW5hbCk7CisKKy8qIEZpbmRzIHRoZSBmaXJzdCBsaW5lIGVuZGluZyBiZXR3ZWVuIGBzdGFydGAgYW5kIGBlbmRgLgorICAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IGFmdGVyIHRoZSBsaW5lIGVuZGluZyBhbmQgZG9lc24ndCB0b3VjaAorICAgYCpjb25zdW1lZGAuCisgICBJZiBub3QgZm91bmQsIHJldHVybnMgLTEgYW5kIHNldHMgYCpjb25zdW1lZGAgdG8gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCisgICB3aGljaCBjYW4gYmUgc2FmZWx5IHB1dCBhc2lkZSB1bnRpbCBhbm90aGVyIHNlYXJjaC4KKyAgIAorICAgTk9URTogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGBlbmRgIG11c3QgcG9pbnQgdG8gYSBOVUwgY2hhcmFjdGVyICgnXDAnKS4gCisgICBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiB3aWxsIHNjYW4gZnVydGhlciBhbmQgcmV0dXJuIGdhcmJhZ2UuICovCitleHRlcm4gUHlfc3NpemVfdCBfUHlJT19maW5kX2xpbmVfZW5kaW5nKAorICAgIGludCB0cmFuc2xhdGVkLCBpbnQgdW5pdmVyc2FsLCBQeU9iamVjdCAqcmVhZG5sLAorICAgIFB5X1VOSUNPREUgKnN0YXJ0LCBQeV9VTklDT0RFICplbmQsIFB5X3NzaXplX3QgKmNvbnN1bWVkKTsKKworCisjZGVmaW5lIERFRkFVTFRfQlVGRkVSX1NJWkUgKDggKiAxMDI0KSAgLyogYnl0ZXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgUHlFeGNlcHRpb25fSEVBRCBpbiAzLnggKi8KKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKmRpY3Q7CisgICAgUHlPYmplY3QgKmFyZ3M7CisgICAgUHlPYmplY3QgKm1lc3NhZ2U7CisKKyAgICBQeU9iamVjdCAqbXllcnJubzsKKyAgICBQeU9iamVjdCAqc3RyZXJyb3I7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOyAvKiBOb3QgdXNlZCwgYnV0IHBhcnQgb2YgdGhlIElPRXJyb3Igb2JqZWN0ICovCisgICAgUHlfc3NpemVfdCB3cml0dGVuOworfSBQeUJsb2NraW5nSU9FcnJvck9iamVjdDsKK1B5QVBJX0RBVEEoUHlPYmplY3QgKikgUHlFeGNfQmxvY2tpbmdJT0Vycm9yOworCisvKgorICogT2Zmc2V0IHR5cGUgZm9yIHBvc2l0aW9uaW5nLgorICovCisKKy8qIFByaW50aW5nIGEgdmFyaWFibGUgb2YgdHlwZSBvZmZfdCAod2l0aCBlLmcuLCBQeVN0cmluZ19Gcm9tRm9ybWF0KQorICAgY29ycmVjdGx5IGFuZCB3aXRob3V0IHByb2R1Y2luZyBjb21waWxlciB3YXJuaW5ncyBpcyBzdXJwcmlzaW5nbHkgcGFpbmZ1bC4KKyAgIFdlIGlkZW50aWZ5IGFuIGludGVnZXIgdHlwZSB3aG9zZSBzaXplIG1hdGNoZXMgb2ZmX3QgYW5kIHRoZW46ICgxKSBjYXN0IHRoZQorICAgb2ZmX3QgdG8gdGhhdCBpbnRlZ2VyIHR5cGUgYW5kICgyKSB1c2UgdGhlIGFwcHJvcHJpYXRlIGNvbnZlcnNpb24KKyAgIHNwZWNpZmljYXRpb24uICBUaGUgY2FzdCBpcyBuZWNlc3Nhcnk6IGdjYyBjb21wbGFpbnMgYWJvdXQgZm9ybWF0dGluZyBhCisgICBsb25nIHdpdGggIiVsbGQiIGV2ZW4gd2hlbiBib3RoIGxvbmcgYW5kIGxvbmcgbG9uZyBoYXZlIHRoZSBzYW1lCisgICBwcmVjaXNpb24uICovCisKKyNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisKKy8qIFdpbmRvd3MgdXNlcyBsb25nIGxvbmcgZm9yIG9mZnNldHMgKi8KK3R5cGVkZWYgUFlfTE9OR19MT05HIFB5X29mZl90OworIyBkZWZpbmUgUHlMb25nX0FzT2ZmX3QgICAgIFB5TG9uZ19Bc0xvbmdMb25nCisjIGRlZmluZSBQeUxvbmdfRnJvbU9mZl90ICAgUHlMb25nX0Zyb21Mb25nTG9uZworIyBkZWZpbmUgUFlfT0ZGX1RfTUFYICAgICAgIFBZX0xMT05HX01BWAorIyBkZWZpbmUgUFlfT0ZGX1RfTUlOICAgICAgIFBZX0xMT05HX01JTgorIyBkZWZpbmUgUFlfT0ZGX1RfQ09NUEFUICAgIFBZX0xPTkdfTE9ORyAvKiB0eXBlIGNvbXBhdGlibGUgd2l0aCBvZmZfdCAqLworIyBkZWZpbmUgUFlfUFJJZE9GRiAgICAgICAgICJsbGQiICAgICAgICAvKiBmb3JtYXQgdG8gdXNlIGZvciB0aGF0IHR5cGUgKi8KKworI2Vsc2UKKworLyogT3RoZXIgcGxhdGZvcm1zIHVzZSBvZmZfdCAqLwordHlwZWRlZiBvZmZfdCBQeV9vZmZfdDsKKyNpZiAoU0laRU9GX09GRl9UID09IFNJWkVPRl9TSVpFX1QpCisjIGRlZmluZSBQeUxvbmdfQXNPZmZfdCAgICAgUHlMb25nX0FzU3NpemVfdAorIyBkZWZpbmUgUHlMb25nX0Zyb21PZmZfdCAgIFB5TG9uZ19Gcm9tU3NpemVfdAorIyBkZWZpbmUgUFlfT0ZGX1RfTUFYICAgICAgIFBZX1NTSVpFX1RfTUFYCisjIGRlZmluZSBQWV9PRkZfVF9NSU4gICAgICAgUFlfU1NJWkVfVF9NSU4KKyMgZGVmaW5lIFBZX09GRl9UX0NPTVBBVCAgICBQeV9zc2l6ZV90CisjIGRlZmluZSBQWV9QUklkT0ZGICAgICAgICAgInpkIgorI2VsaWYgKEhBVkVfTE9OR19MT05HICYmIFNJWkVPRl9PRkZfVCA9PSBTSVpFT0ZfTE9OR19MT05HKQorIyBkZWZpbmUgUHlMb25nX0FzT2ZmX3QgICAgIFB5TG9uZ19Bc0xvbmdMb25nCisjIGRlZmluZSBQeUxvbmdfRnJvbU9mZl90ICAgUHlMb25nX0Zyb21Mb25nTG9uZworIyBkZWZpbmUgUFlfT0ZGX1RfTUFYICAgICAgIFBZX0xMT05HX01BWAorIyBkZWZpbmUgUFlfT0ZGX1RfTUlOICAgICAgIFBZX0xMT05HX01JTgorIyBkZWZpbmUgUFlfT0ZGX1RfQ09NUEFUICAgIFBZX0xPTkdfTE9ORworIyBkZWZpbmUgUFlfUFJJZE9GRiAgICAgICAgICJsbGQiCisjZWxpZiAoU0laRU9GX09GRl9UID09IFNJWkVPRl9MT05HKQorIyBkZWZpbmUgUHlMb25nX0FzT2ZmX3QgICAgIFB5TG9uZ19Bc0xvbmcKKyMgZGVmaW5lIFB5TG9uZ19Gcm9tT2ZmX3QgICBQeUxvbmdfRnJvbUxvbmcKKyMgZGVmaW5lIFBZX09GRl9UX01BWCAgICAgICBMT05HX01BWAorIyBkZWZpbmUgUFlfT0ZGX1RfTUlOICAgICAgIExPTkdfTUlOCisjIGRlZmluZSBQWV9PRkZfVF9DT01QQVQgICAgbG9uZworIyBkZWZpbmUgUFlfUFJJZE9GRiAgICAgICAgICJsZCIKKyNlbHNlCisjIGVycm9yIG9mZl90IGRvZXMgbm90IG1hdGNoIGVpdGhlciBzaXplX3QsIGxvbmcsIG9yIGxvbmcgbG9uZyEKKyNlbmRpZgorCisjZW5kaWYKKworZXh0ZXJuIFB5X29mZl90IFB5TnVtYmVyX0FzT2ZmX3QoUHlPYmplY3QgKml0ZW0sIFB5T2JqZWN0ICplcnIpOworCisvKiBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzICovCisKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fb3NfbW9kdWxlOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19sb2NhbGVfbW9kdWxlOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT191bnN1cHBvcnRlZF9vcGVyYXRpb247CisKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2Nsb3NlOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfY2xvc2VkOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfZGVjb2RlOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfZW5jb2RlOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfZmlsZW5vOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfZmx1c2g7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9nZXRzdGF0ZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2lzYXR0eTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX25ld2xpbmVzOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfbmw7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9yZWFkOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfcmVhZDE7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9yZWFkYWJsZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX3JlYWRpbnRvOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfcmVhZGxpbmU7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9yZXNldDsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX3NlZWs7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9zZWVrYWJsZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX3NldHN0YXRlOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfdGVsbDsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX3RydW5jYXRlOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfd3JpdGFibGU7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl93cml0ZTsKKworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19lbXB0eV9zdHI7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX2VtcHR5X2J5dGVzOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT196ZXJvOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jIGIvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTZhOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKQEAgLTAsMCArMSwyMzg5IEBACisvKgorICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlcmVkIEkvTyBhcyBkZWZpbmVkIGJ5IFBFUCAzMTE2IC0gIk5ldyBJL08iCisgICAgCisgICAgQ2xhc3NlcyBkZWZpbmVkIGhlcmU6IEJ1ZmZlcmVkSU9CYXNlLCBCdWZmZXJlZFJlYWRlciwgQnVmZmVyZWRXcml0ZXIsCisgICAgQnVmZmVyZWRSYW5kb20uCisgICAgCisgICAgV3JpdHRlbiBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYyBhbmQgQW50b2luZSBQaXRyb3UKKyovCisKKyNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgorI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgorI2luY2x1ZGUgInB5dGhyZWFkLmgiCisjaW5jbHVkZSAiX2lvbW9kdWxlLmgiCisKKy8qCisgKiBCdWZmZXJlZElPQmFzZSBjbGFzcywgaW5oZXJpdHMgZnJvbSBJT0Jhc2UuCisgKi8KK1B5RG9jX1NUUlZBUihidWZmZXJlZGlvYmFzZV9kb2MsCisgICAgIkJhc2UgY2xhc3MgZm9yIGJ1ZmZlcmVkIElPIG9iamVjdHMuXG4iCisgICAgIlxuIgorICAgICJUaGUgbWFpbiBkaWZmZXJlbmNlIHdpdGggUmF3SU9CYXNlIGlzIHRoYXQgdGhlIHJlYWQoKSBtZXRob2RcbiIKKyAgICAic3VwcG9ydHMgb21pdHRpbmcgdGhlIHNpemUgYXJndW1lbnQsIGFuZCBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdFxuIgorICAgICJpbXBsZW1lbnRhdGlvbiB0aGF0IGRlZmVycyB0byByZWFkaW50bygpLlxuIgorICAgICJcbiIKKyAgICAiSW4gYWRkaXRpb24sIHJlYWQoKSwgcmVhZGludG8oKSBhbmQgd3JpdGUoKSBtYXkgcmFpc2VcbiIKKyAgICAiQmxvY2tpbmdJT0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgaW4gbm9uLWJsb2NraW5nXG4iCisgICAgIm1vZGUgYW5kIG5vdCByZWFkeTsgdW5saWtlIHRoZWlyIHJhdyBjb3VudGVycGFydHMsIHRoZXkgd2lsbCBuZXZlclxuIgorICAgICJyZXR1cm4gTm9uZS5cbiIKKyAgICAiXG4iCisgICAgIkEgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbm90IGluaGVyaXQgZnJvbSBhIFJhd0lPQmFzZVxuIgorICAgICJpbXBsZW1lbnRhdGlvbiwgYnV0IHdyYXAgb25lLlxuIgorICAgICk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZGlvYmFzZV9yZWFkaW50byhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBQeU9iamVjdCAqZGF0YTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidyo6cmVhZGludG8iLCAmYnVmKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBkYXRhID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLCAicmVhZCIsICJuIiwgYnVmLmxlbik7CisgICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgeworICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZWFkKCkgc2hvdWxkIHJldHVybiBieXRlcyIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGxlbiA9IFB5X1NJWkUoZGF0YSk7CisgICAgbWVtY3B5KGJ1Zi5idWYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGRhdGEpLCBsZW4pOworCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICBQeV9ERUNSRUYoZGF0YSk7CisKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGxlbik7CisKKyAgZXJyb3I6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkaW9iYXNlX3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisgICAgUHlFcnJfU2V0U3RyaW5nKF9QeUlPX3Vuc3VwcG9ydGVkX29wZXJhdGlvbiwgbWVzc2FnZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5RG9jX1NUUlZBUihidWZmZXJlZGlvYmFzZV9kZXRhY2hfZG9jLAorICAgICJEaXNjb25uZWN0IHRoaXMgYnVmZmVyIGZyb20gaXRzIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBhbmQgcmV0dXJuIGl0LlxuIgorICAgICJcbiIKKyAgICAiQWZ0ZXIgdGhlIHJhdyBzdHJlYW0gaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBidWZmZXIgaXMgaW4gYW4gdW51c2FibGVcbiIKKyAgICAic3RhdGUuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkaW9iYXNlX2RldGFjaChQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gYnVmZmVyZWRpb2Jhc2VfdW5zdXBwb3J0ZWQoImRldGFjaCIpOworfQorCitQeURvY19TVFJWQVIoYnVmZmVyZWRpb2Jhc2VfcmVhZF9kb2MsCisgICAgIlJlYWQgYW5kIHJldHVybiB1cCB0byBuIGJ5dGVzLlxuIgorICAgICJcbiIKKyAgICAiSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIE5vbmUsIG9yIG5lZ2F0aXZlLCByZWFkcyBhbmRcbiIKKyAgICAicmV0dXJucyBhbGwgZGF0YSB1bnRpbCBFT0YuXG4iCisgICAgIlxuIgorICAgICJJZiB0aGUgYXJndW1lbnQgaXMgcG9zaXRpdmUsIGFuZCB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzXG4iCisgICAgIm5vdCAnaW50ZXJhY3RpdmUnLCBtdWx0aXBsZSByYXcgcmVhZHMgbWF5IGJlIGlzc3VlZCB0byBzYXRpc2Z5XG4iCisgICAgInRoZSBieXRlIGNvdW50ICh1bmxlc3MgRU9GIGlzIHJlYWNoZWQgZmlyc3QpLiAgQnV0IGZvclxuIgorICAgICJpbnRlcmFjdGl2ZSByYXcgc3RyZWFtcyAoYXMgd2VsbCBhcyBzb2NrZXRzIGFuZCBwaXBlcyksIGF0IG1vc3RcbiIKKyAgICAib25lIHJhdyByZWFkIHdpbGwgYmUgaXNzdWVkLCBhbmQgYSBzaG9ydCByZXN1bHQgZG9lcyBub3QgaW1wbHlcbiIKKyAgICAidGhhdCBFT0YgaXMgaW1taW5lbnQuXG4iCisgICAgIlxuIgorICAgICJSZXR1cm5zIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBvbiBFT0YuXG4iCisgICAgIlxuIgorICAgICJSZXR1cm5zIE5vbmUgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSB3YXMgb3BlbiBpbiBub24tYmxvY2tpbmdcbiIKKyAgICAibW9kZSBhbmQgbm8gZGF0YSBpcyBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRpb2Jhc2VfcmVhZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIGJ1ZmZlcmVkaW9iYXNlX3Vuc3VwcG9ydGVkKCJyZWFkIik7Cit9CisKK1B5RG9jX1NUUlZBUihidWZmZXJlZGlvYmFzZV9yZWFkMV9kb2MsCisgICAgIlJlYWQgYW5kIHJldHVybiB1cCB0byBuIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBjYWxsXG4iCisgICAgInRvIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0uIEEgc2hvcnQgcmVzdWx0IGRvZXMgbm90IGltcGx5XG4iCisgICAgInRoYXQgRU9GIGlzIGltbWluZW50LlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJucyBhbiBlbXB0eSBieXRlcyBvYmplY3Qgb24gRU9GLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZGlvYmFzZV9yZWFkMShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIGJ1ZmZlcmVkaW9iYXNlX3Vuc3VwcG9ydGVkKCJyZWFkMSIpOworfQorCitQeURvY19TVFJWQVIoYnVmZmVyZWRpb2Jhc2Vfd3JpdGVfZG9jLAorICAgICJXcml0ZSB0aGUgZ2l2ZW4gYnVmZmVyIHRvIHRoZSBJTyBzdHJlYW0uXG4iCisgICAgIlxuIgorICAgICJSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgd2hpY2ggaXMgbmV2ZXIgbGVzcyB0aGFuXG4iCisgICAgImxlbihiKS5cbiIKKyAgICAiXG4iCisgICAgIlJhaXNlcyBCbG9ja2luZ0lPRXJyb3IgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsIGFuZCB0aGVcbiIKKyAgICAidW5kZXJseWluZyByYXcgc3RyZWFtIGNhbm5vdCBhY2NlcHQgbW9yZSBkYXRhIGF0IHRoZSBtb21lbnQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkaW9iYXNlX3dyaXRlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICByZXR1cm4gYnVmZmVyZWRpb2Jhc2VfdW5zdXBwb3J0ZWQoIndyaXRlIik7Cit9CisKKworc3RhdGljIFB5TWV0aG9kRGVmIGJ1ZmZlcmVkaW9iYXNlX21ldGhvZHNbXSA9IHsKKyAgICB7ImRldGFjaCIsIChQeUNGdW5jdGlvbilidWZmZXJlZGlvYmFzZV9kZXRhY2gsIE1FVEhfTk9BUkdTLCBidWZmZXJlZGlvYmFzZV9kZXRhY2hfZG9jfSwKKyAgICB7InJlYWQiLCBidWZmZXJlZGlvYmFzZV9yZWFkLCBNRVRIX1ZBUkFSR1MsIGJ1ZmZlcmVkaW9iYXNlX3JlYWRfZG9jfSwKKyAgICB7InJlYWQxIiwgYnVmZmVyZWRpb2Jhc2VfcmVhZDEsIE1FVEhfVkFSQVJHUywgYnVmZmVyZWRpb2Jhc2VfcmVhZDFfZG9jfSwKKyAgICB7InJlYWRpbnRvIiwgYnVmZmVyZWRpb2Jhc2VfcmVhZGludG8sIE1FVEhfVkFSQVJHUywgTlVMTH0sCisgICAgeyJ3cml0ZSIsIGJ1ZmZlcmVkaW9iYXNlX3dyaXRlLCBNRVRIX1ZBUkFSR1MsIGJ1ZmZlcmVkaW9iYXNlX3dyaXRlX2RvY30sCisgICAge05VTEwsIE5VTEx9Cit9OworCitQeVR5cGVPYmplY3QgUHlCdWZmZXJlZElPQmFzZV9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uX0J1ZmZlcmVkSU9CYXNlIiwgICAgICAvKnRwX25hbWUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBidWZmZXJlZGlvYmFzZV9kb2MsICAgICAgICAgLyogdHBfZG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBidWZmZXJlZGlvYmFzZV9tZXRob2RzLCAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgICZQeUlPQmFzZV9UeXBlLCAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCit9OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisKKyAgICBQeU9iamVjdCAqcmF3OworICAgIGludCBvazsgICAgLyogSW5pdGlhbGl6ZWQ/ICovCisgICAgaW50IGRldGFjaGVkOworICAgIGludCByZWFkYWJsZTsKKyAgICBpbnQgd3JpdGFibGU7CisgICAgCisgICAgLyogVHJ1ZSBpZiB0aGlzIGlzIGEgdmFuaWxsYSBCdWZmZXJlZCBvYmplY3QgKHJhdGhlciB0aGFuIGEgdXNlciBkZXJpdmVkCisgICAgICAgY2xhc3MpICphbmQqIHRoZSByYXcgc3RyZWFtIGlzIGEgdmFuaWxsYSBGaWxlSU8gb2JqZWN0LiAqLworICAgIGludCBmYXN0X2Nsb3NlZF9jaGVja3M7CisKKyAgICAvKiBBYnNvbHV0ZSBwb3NpdGlvbiBpbnNpZGUgdGhlIHJhdyBzdHJlYW0gKC0xIGlmIHVua25vd24pLiAqLworICAgIFB5X29mZl90IGFic19wb3M7CisKKyAgICAvKiBBIHN0YXRpYyBidWZmZXIgb2Ygc2l6ZSBgYnVmZmVyX3NpemVgICovCisgICAgY2hhciAqYnVmZmVyOworICAgIC8qIEN1cnJlbnQgbG9naWNhbCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyLiAqLworICAgIFB5X29mZl90IHBvczsKKyAgICAvKiBQb3NpdGlvbiBvZiB0aGUgcmF3IHN0cmVhbSBpbiB0aGUgYnVmZmVyLiAqLworICAgIFB5X29mZl90IHJhd19wb3M7CisKKyAgICAvKiBKdXN0IGFmdGVyIHRoZSBsYXN0IGJ1ZmZlcmVkIGJ5dGUgaW4gdGhlIGJ1ZmZlciwgb3IgLTEgaWYgdGhlIGJ1ZmZlcgorICAgICAgIGlzbid0IHJlYWR5IGZvciByZWFkaW5nLiAqLworICAgIFB5X29mZl90IHJlYWRfZW5kOworCisgICAgLyogSnVzdCBhZnRlciB0aGUgbGFzdCBieXRlIGFjdHVhbGx5IHdyaXR0ZW4gKi8KKyAgICBQeV9vZmZfdCB3cml0ZV9wb3M7CisgICAgLyogSnVzdCBhZnRlciB0aGUgbGFzdCBieXRlIHdhaXRpbmcgdG8gYmUgd3JpdHRlbiwgb3IgLTEgaWYgdGhlIGJ1ZmZlcgorICAgICAgIGlzbid0IHJlYWR5IGZvciB3cml0aW5nLiAqLworICAgIFB5X29mZl90IHdyaXRlX2VuZDsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2s7CisgICAgdm9sYXRpbGUgbG9uZyBvd25lcjsKKyNlbmRpZgorCisgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9tYXNrOworCisgICAgUHlPYmplY3QgKmRpY3Q7CisgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OworfSBidWZmZXJlZDsKKworLyoKKyAgICBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAgICAKKyAgICAqIEJ1ZmZlcmVkUmVhZGVyLCBCdWZmZXJlZFdyaXRlciBhbmQgQnVmZmVyZWRSYW5kb20gdHJ5IHRvIHNoYXJlIG1vc3QKKyAgICAgIG1ldGhvZHMgKHRoaXMgaXMgaGVscGVkIGJ5IHRoZSBtZW1iZXJzIGByZWFkYWJsZWAgYW5kIGB3cml0YWJsZWAsIHdoaWNoCisgICAgICBhcmUgaW5pdGlhbGl6ZWQgaW4gdGhlIHJlc3BlY3RpdmUgY29uc3RydWN0b3JzKQorICAgICogVGhleSBhbHNvIHNoYXJlIGEgc2luZ2xlIGJ1ZmZlciBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4gVGhpcyBlbmFibGVzCisgICAgICBpbnRlcmxlYXZlZCByZWFkcyBhbmQgd3JpdGVzIHdpdGhvdXQgZmx1c2hpbmcuIEl0IGFsc28gbWFrZXMgdGhlIGxvZ2ljCisgICAgICBhIGJpdCB0cmlja2llciB0byBnZXQgcmlnaHQuCisgICAgKiBUaGUgYWJzb2x1dGUgcG9zaXRpb24gb2YgdGhlIHJhdyBzdHJlYW0gaXMgY2FjaGVkLCBpZiBwb3NzaWJsZSwgaW4gdGhlCisgICAgICBgYWJzX3Bvc2AgbWVtYmVyLiBJdCBtdXN0IGJlIHVwZGF0ZWQgZXZlcnkgdGltZSBhbiBvcGVyYXRpb24gaXMgZG9uZQorICAgICAgb24gdGhlIHJhdyBzdHJlYW0uIElmIG5vdCBzdXJlLCBpdCBjYW4gYmUgcmVpbml0aWFsaXplZCBieSBjYWxsaW5nCisgICAgICBfYnVmZmVyZWRfcmF3X3RlbGwoKSwgd2hpY2ggcXVlcmllcyB0aGUgcmF3IHN0cmVhbSAoX2J1ZmZlcmVkX3Jhd19zZWVrKCkKKyAgICAgIGFsc28gZG9lcyBpdCkuIFRvIHJlYWQgaXQsIHVzZSBSQVdfVEVMTCgpLgorICAgICogVGhyZWUgaGVscGVycywgX2J1ZmZlcmVkcmVhZGVyX3Jhd19yZWFkLCBfYnVmZmVyZWR3cml0ZXJfcmF3X3dyaXRlIGFuZAorICAgICAgX2J1ZmZlcmVkd3JpdGVyX2ZsdXNoX3VubG9ja2VkIGRvIGEgbG90IG9mIHVzZWZ1bCBob3VzZWtlZXBpbmcuCisKKyAgICBOT1RFOiB3ZSBzaG91bGQgdHJ5IHRvIG1haW50YWluIGJsb2NrIGFsaWdubWVudCBvZiByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZQorICAgIHJhdyBzdHJlYW0gKGFjY29yZGluZyB0byB0aGUgYnVmZmVyIHNpemUpLCBidXQgZm9yIG5vdyBpdCBpcyBvbmx5IGRvbmUKKyAgICBpbiByZWFkKCkgYW5kIGZyaWVuZHMuCisgICAgCisqLworCisvKiBUaGVzZSBtYWNyb3MgcHJvdGVjdCB0aGUgYnVmZmVyZWQgb2JqZWN0IGFnYWluc3QgY29uY3VycmVudCBvcGVyYXRpb25zLiAqLworCisjaWZkZWYgV0lUSF9USFJFQUQKKworc3RhdGljIGludAorX2VudGVyX2J1ZmZlcmVkX2J1c3koYnVmZmVyZWQgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPm93bmVyID09IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkgeworICAgICAgICBQeU9iamVjdCAqciA9IFB5T2JqZWN0X1JlcHIoKFB5T2JqZWN0ICopIHNlbGYpOworICAgICAgICBpZiAociAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZWVudHJhbnQgY2FsbCBpbnNpZGUgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhyKSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soc2VsZi0+bG9jaywgMSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICByZXR1cm4gMTsKK30KKworI2RlZmluZSBFTlRFUl9CVUZGRVJFRChzZWxmKSBcCisgICAgKCAoUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHNlbGYtPmxvY2ssIDApID8gXAorICAgICAgIDEgOiBfZW50ZXJfYnVmZmVyZWRfYnVzeShzZWxmKSkgXAorICAgICAmJiAoc2VsZi0+b3duZXIgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksIDEpICkKKworI2RlZmluZSBMRUFWRV9CVUZGRVJFRChzZWxmKSBcCisgICAgZG8geyBcCisgICAgICAgIHNlbGYtPm93bmVyID0gMDsgXAorICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+bG9jayk7IFwKKyAgICB9IHdoaWxlKDApOworCisjZWxzZQorI2RlZmluZSBFTlRFUl9CVUZGRVJFRChzZWxmKSAxCisjZGVmaW5lIExFQVZFX0JVRkZFUkVEKHNlbGYpCisjZW5kaWYKKworI2RlZmluZSBDSEVDS19JTklUSUFMSVpFRChzZWxmKSBcCisgICAgaWYgKHNlbGYtPm9rIDw9IDApIHsgXAorICAgICAgICBpZiAoc2VsZi0+ZGV0YWNoZWQpIHsgXAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgInJhdyBzdHJlYW0gaGFzIGJlZW4gZGV0YWNoZWQiKTsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9uIG9uIHVuaW5pdGlhbGl6ZWQgb2JqZWN0Iik7IFwKKyAgICAgICAgfSBcCisgICAgICAgIHJldHVybiBOVUxMOyBcCisgICAgfQorCisjZGVmaW5lIENIRUNLX0lOSVRJQUxJWkVEX0lOVChzZWxmKSBcCisgICAgaWYgKHNlbGYtPm9rIDw9IDApIHsgXAorICAgICAgICBpZiAoc2VsZi0+ZGV0YWNoZWQpIHsgXAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgInJhdyBzdHJlYW0gaGFzIGJlZW4gZGV0YWNoZWQiKTsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9uIG9uIHVuaW5pdGlhbGl6ZWQgb2JqZWN0Iik7IFwKKyAgICAgICAgfSBcCisgICAgICAgIHJldHVybiAtMTsgXAorICAgIH0KKworI2RlZmluZSBJU19DTE9TRUQoc2VsZikgXAorICAgIChzZWxmLT5mYXN0X2Nsb3NlZF9jaGVja3MgXAorICAgICA/IF9QeUZpbGVJT19jbG9zZWQoc2VsZi0+cmF3KSBcCisgICAgIDogYnVmZmVyZWRfY2xvc2VkKHNlbGYpKQorCisjZGVmaW5lIENIRUNLX0NMT1NFRChzZWxmLCBlcnJvcl9tc2cpIFwKKyAgICBpZiAoSVNfQ0xPU0VEKHNlbGYpKSB7IFwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIGVycm9yX21zZyk7IFwKKyAgICAgICAgcmV0dXJuIE5VTEw7IFwKKyAgICB9CisKKworI2RlZmluZSBWQUxJRF9SRUFEX0JVRkZFUihzZWxmKSBcCisgICAgKHNlbGYtPnJlYWRhYmxlICYmIHNlbGYtPnJlYWRfZW5kICE9IC0xKQorCisjZGVmaW5lIFZBTElEX1dSSVRFX0JVRkZFUihzZWxmKSBcCisgICAgKHNlbGYtPndyaXRhYmxlICYmIHNlbGYtPndyaXRlX2VuZCAhPSAtMSkKKworI2RlZmluZSBBREpVU1RfUE9TSVRJT04oc2VsZiwgX25ld19wb3MpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgc2VsZi0+cG9zID0gX25ld19wb3M7IFwKKyAgICAgICAgaWYgKFZBTElEX1JFQURfQlVGRkVSKHNlbGYpICYmIHNlbGYtPnJlYWRfZW5kIDwgc2VsZi0+cG9zKSBcCisgICAgICAgICAgICBzZWxmLT5yZWFkX2VuZCA9IHNlbGYtPnBvczsgXAorICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBSRUFEQUhFQUQoc2VsZikgXAorICAgICgoc2VsZi0+cmVhZGFibGUgJiYgVkFMSURfUkVBRF9CVUZGRVIoc2VsZikpIFwKKyAgICAgICAgPyAoc2VsZi0+cmVhZF9lbmQgLSBzZWxmLT5wb3MpIDogMCkKKworI2RlZmluZSBSQVdfT0ZGU0VUKHNlbGYpIFwKKyAgICAoKChWQUxJRF9SRUFEX0JVRkZFUihzZWxmKSB8fCBWQUxJRF9XUklURV9CVUZGRVIoc2VsZikpIFwKKyAgICAgICAgJiYgc2VsZi0+cmF3X3BvcyA+PSAwKSA/IHNlbGYtPnJhd19wb3MgLSBzZWxmLT5wb3MgOiAwKQorCisjZGVmaW5lIFJBV19URUxMKHNlbGYpIFwKKyAgICAoc2VsZi0+YWJzX3BvcyAhPSAtMSA/IHNlbGYtPmFic19wb3MgOiBfYnVmZmVyZWRfcmF3X3RlbGwoc2VsZikpCisKKyNkZWZpbmUgTUlOVVNfTEFTVF9CTE9DSyhzZWxmLCBzaXplKSBcCisgICAgKHNlbGYtPmJ1ZmZlcl9tYXNrID8gXAorICAgICAgICAoc2l6ZSAmIH5zZWxmLT5idWZmZXJfbWFzaykgOiBcCisgICAgICAgIChzZWxmLT5idWZmZXJfc2l6ZSAqIChzaXplIC8gc2VsZi0+YnVmZmVyX3NpemUpKSkKKworCitzdGF0aWMgdm9pZAorYnVmZmVyZWRfZGVhbGxvYyhidWZmZXJlZCAqc2VsZikKK3sKKyAgICBpZiAoc2VsZi0+b2sgJiYgX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCisgICAgICAgIHJldHVybjsKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKKyAgICBzZWxmLT5vayA9IDA7CisgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopc2VsZik7CisgICAgUHlfQ0xFQVIoc2VsZi0+cmF3KTsKKyAgICBpZiAoc2VsZi0+YnVmZmVyKSB7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKKyAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKKyAgICB9CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBpZiAoc2VsZi0+bG9jaykgeworICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soc2VsZi0+bG9jayk7CisgICAgICAgIHNlbGYtPmxvY2sgPSBOVUxMOworICAgIH0KKyNlbmRpZgorICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7Cit9CisKK3N0YXRpYyBpbnQKK2J1ZmZlcmVkX3RyYXZlcnNlKGJ1ZmZlcmVkICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT5yYXcpOworICAgIFB5X1ZJU0lUKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitidWZmZXJlZF9jbGVhcihidWZmZXJlZCAqc2VsZikKK3sKKyAgICBpZiAoc2VsZi0+b2sgJiYgX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzZWxmLT5vayA9IDA7CisgICAgUHlfQ0xFQVIoc2VsZi0+cmF3KTsKKyAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIF9CdWZmZXJlZElPTWl4aW4gbWV0aG9kcworICogVGhpcyBpcyBub3QgYSBjbGFzcywganVzdCBhIGNvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IHdpbGwgYmUgcmV1c2VkCisgKiBieSBCdWZmZXJlZFJlYWRlciBhbmQgQnVmZmVyZWRXcml0ZXIKKyAqLworCisvKiBGbHVzaCBhbmQgY2xvc2UgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX3NpbXBsZV9mbHVzaChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfZmx1c2gsIE5VTEwpOworfQorCitzdGF0aWMgaW50CitidWZmZXJlZF9jbG9zZWQoYnVmZmVyZWQgKnNlbGYpCit7CisgICAgaW50IGNsb3NlZDsKKyAgICBQeU9iamVjdCAqcmVzOworICAgIENIRUNLX0lOSVRJQUxJWkVEX0lOVChzZWxmKQorICAgIHJlcyA9IFB5T2JqZWN0X0dldEF0dHIoc2VsZi0+cmF3LCBfUHlJT19zdHJfY2xvc2VkKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBjbG9zZWQgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKKyAgICBQeV9ERUNSRUYocmVzKTsKKyAgICByZXR1cm4gY2xvc2VkOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfY2xvc2VkX2dldChidWZmZXJlZCAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyKHNlbGYtPnJhdywgX1B5SU9fc3RyX2Nsb3NlZCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9jbG9zZShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgaW50IHI7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIGlmICghRU5URVJfQlVGRkVSRUQoc2VsZikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgciA9IGJ1ZmZlcmVkX2Nsb3NlZChzZWxmKTsKKyAgICBpZiAociA8IDApCisgICAgICAgIGdvdG8gZW5kOworICAgIGlmIChyID4gMCkgeworICAgICAgICByZXMgPSBQeV9Ob25lOworICAgICAgICBQeV9JTkNSRUYocmVzKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIC8qIGZsdXNoKCkgd2lsbCBtb3N0IHByb2JhYmx5IHJlLXRha2UgdGhlIGxvY2ssIHNvIGRyb3AgaXQgZmlyc3QgKi8KKyAgICBMRUFWRV9CVUZGRVJFRChzZWxmKQorICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKChQeU9iamVjdCAqKXNlbGYsIF9QeUlPX3N0cl9mbHVzaCwgTlVMTCk7CisgICAgaWYgKCFFTlRFUl9CVUZGRVJFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHJlcyA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBQeV9YREVDUkVGKHJlcyk7CisKKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl9jbG9zZSwgTlVMTCk7CisKK2VuZDoKKyAgICBMRUFWRV9CVUZGRVJFRChzZWxmKQorICAgIHJldHVybiByZXM7Cit9CisKKy8qIGRldGFjaCAqLworCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfZGV0YWNoKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmF3LCAqcmVzOworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoKFB5T2JqZWN0ICopc2VsZiwgX1B5SU9fc3RyX2ZsdXNoLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIHJhdyA9IHNlbGYtPnJhdzsKKyAgICBzZWxmLT5yYXcgPSBOVUxMOworICAgIHNlbGYtPmRldGFjaGVkID0gMTsKKyAgICBzZWxmLT5vayA9IDA7CisgICAgcmV0dXJuIHJhdzsKK30KKworLyogSW5xdWlyaWVzICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9zZWVrYWJsZShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfc2Vla2FibGUsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfcmVhZGFibGUoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX3JlYWRhYmxlLCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX3dyaXRhYmxlKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl93cml0YWJsZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9uYW1lX2dldChidWZmZXJlZCAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHNlbGYtPnJhdywgIm5hbWUiKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX21vZGVfZ2V0KGJ1ZmZlcmVkICpzZWxmLCB2b2lkICpjb250ZXh0KQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgcmV0dXJuIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc2VsZi0+cmF3LCAibW9kZSIpOworfQorCisvKiBMb3dlci1sZXZlbCBBUElzICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9maWxlbm8oYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX2ZpbGVubywgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9pc2F0dHkoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX2lzYXR0eSwgTlVMTCk7Cit9CisKKworLyogRm9yd2FyZCBkZWNscyAqLworc3RhdGljIFB5T2JqZWN0ICoKK19idWZmZXJlZHdyaXRlcl9mbHVzaF91bmxvY2tlZChidWZmZXJlZCAqLCBpbnQpOworc3RhdGljIFB5X3NzaXplX3QKK19idWZmZXJlZHJlYWRlcl9maWxsX2J1ZmZlcihidWZmZXJlZCAqc2VsZik7CitzdGF0aWMgdm9pZAorX2J1ZmZlcmVkcmVhZGVyX3Jlc2V0X2J1ZihidWZmZXJlZCAqc2VsZik7CitzdGF0aWMgdm9pZAorX2J1ZmZlcmVkd3JpdGVyX3Jlc2V0X2J1ZihidWZmZXJlZCAqc2VsZik7CitzdGF0aWMgUHlPYmplY3QgKgorX2J1ZmZlcmVkcmVhZGVyX3BlZWtfdW5sb2NrZWQoYnVmZmVyZWQgKnNlbGYsIFB5X3NzaXplX3QpOworc3RhdGljIFB5T2JqZWN0ICoKK19idWZmZXJlZHJlYWRlcl9yZWFkX2FsbChidWZmZXJlZCAqc2VsZik7CitzdGF0aWMgUHlPYmplY3QgKgorX2J1ZmZlcmVkcmVhZGVyX3JlYWRfZmFzdChidWZmZXJlZCAqc2VsZiwgUHlfc3NpemVfdCk7CitzdGF0aWMgUHlPYmplY3QgKgorX2J1ZmZlcmVkcmVhZGVyX3JlYWRfZ2VuZXJpYyhidWZmZXJlZCAqc2VsZiwgUHlfc3NpemVfdCk7CisKKworLyoKKyAqIEhlbHBlcnMKKyAqLworCisvKiBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBgd3JpdHRlbmAgbWVtYmVyIGlmIGEgQmxvY2tpbmdJT0Vycm9yIHdhcworICAgcmFpc2VkLCBOVUxMIG90aGVyd2lzZS4gVGhlIGVycm9yIGlzIGFsd2F5cyByZS1yYWlzZWQuICovCitzdGF0aWMgUHlfc3NpemVfdCAqCitfYnVmZmVyZWRfY2hlY2tfYmxvY2tpbmdfZXJyb3Iodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqdCwgKnYsICp0YjsKKyAgICBQeUJsb2NraW5nSU9FcnJvck9iamVjdCAqZXJyOworCisgICAgUHlFcnJfRmV0Y2goJnQsICZ2LCAmdGIpOworICAgIGlmICh2ID09IE5VTEwgfHwgIVB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyh2LCBQeUV4Y19CbG9ja2luZ0lPRXJyb3IpKSB7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUodCwgdiwgdGIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZXJyID0gKFB5QmxvY2tpbmdJT0Vycm9yT2JqZWN0ICopIHY7CisgICAgLyogVE9ETzogc2FuaXR5IGNoZWNrIChlcnItPndyaXR0ZW4gPj0gMCkgKi8KKyAgICBQeUVycl9SZXN0b3JlKHQsIHYsIHRiKTsKKyAgICByZXR1cm4gJmVyci0+d3JpdHRlbjsKK30KKworc3RhdGljIFB5X29mZl90CitfYnVmZmVyZWRfcmF3X3RlbGwoYnVmZmVyZWQgKnNlbGYpCit7CisgICAgUHlfb2ZmX3QgbjsKKyAgICBQeU9iamVjdCAqcmVzOworICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX3RlbGwsIE5VTEwpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIG4gPSBQeU51bWJlcl9Bc09mZl90KHJlcywgUHlFeGNfVmFsdWVFcnJvcik7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgaWYgKG4gPCAwKSB7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJSYXcgc3RyZWFtIHJldHVybmVkIGludmFsaWQgcG9zaXRpb24gJSIgUFlfUFJJZE9GRiwKKwkJCSAoUFlfT0ZGX1RfQ09NUEFUKW4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbGYtPmFic19wb3MgPSBuOworICAgIHJldHVybiBuOworfQorCitzdGF0aWMgUHlfb2ZmX3QKK19idWZmZXJlZF9yYXdfc2VlayhidWZmZXJlZCAqc2VsZiwgUHlfb2ZmX3QgdGFyZ2V0LCBpbnQgd2hlbmNlKQoreworICAgIFB5T2JqZWN0ICpyZXMsICpwb3NvYmosICp3aGVuY2VvYmo7CisgICAgUHlfb2ZmX3QgbjsKKworICAgIHBvc29iaiA9IFB5TG9uZ19Gcm9tT2ZmX3QodGFyZ2V0KTsKKyAgICBpZiAocG9zb2JqID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB3aGVuY2VvYmogPSBQeUxvbmdfRnJvbUxvbmcod2hlbmNlKTsKKyAgICBpZiAod2hlbmNlb2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHBvc29iaik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfc2VlaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NvYmosIHdoZW5jZW9iaiwgTlVMTCk7CisgICAgUHlfREVDUkVGKHBvc29iaik7CisgICAgUHlfREVDUkVGKHdoZW5jZW9iaik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgbiA9IFB5TnVtYmVyX0FzT2ZmX3QocmVzLCBQeUV4Y19WYWx1ZUVycm9yKTsKKyAgICBQeV9ERUNSRUYocmVzKTsKKyAgICBpZiAobiA8IDApIHsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlJhdyBzdHJlYW0gcmV0dXJuZWQgaW52YWxpZCBwb3NpdGlvbiAlIiBQWV9QUklkT0ZGLAorCQkJIChQWV9PRkZfVF9DT01QQVQpbik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc2VsZi0+YWJzX3BvcyA9IG47CisgICAgcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQKK19idWZmZXJlZF9pbml0KGJ1ZmZlcmVkICpzZWxmKQoreworICAgIFB5X3NzaXplX3QgbjsKKyAgICBpZiAoc2VsZi0+YnVmZmVyX3NpemUgPD0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICJidWZmZXIgc2l6ZSBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHNlbGYtPmJ1ZmZlcikKKyAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWZmZXIpOworICAgIHNlbGYtPmJ1ZmZlciA9IFB5TWVtX01hbGxvYyhzZWxmLT5idWZmZXJfc2l6ZSk7CisgICAgaWYgKHNlbGYtPmJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBpZiAoc2VsZi0+bG9jaykKKyAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKHNlbGYtPmxvY2spOworICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiY2FuJ3QgYWxsb2NhdGUgcmVhZCBsb2NrIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc2VsZi0+b3duZXIgPSAwOworI2VuZGlmCisgICAgLyogRmluZCBvdXQgd2hldGhlciBidWZmZXJfc2l6ZSBpcyBhIHBvd2VyIG9mIDIgKi8KKyAgICAvKiBYWFggaXMgdGhpcyBvcHRpbWl6YXRpb24gdXNlZnVsPyAqLworICAgIGZvciAobiA9IHNlbGYtPmJ1ZmZlcl9zaXplIC0gMTsgbiAmIDE7IG4gPj49IDEpCisgICAgICAgIDsKKyAgICBpZiAobiA9PSAwKQorICAgICAgICBzZWxmLT5idWZmZXJfbWFzayA9IHNlbGYtPmJ1ZmZlcl9zaXplIC0gMTsKKyAgICBlbHNlCisgICAgICAgIHNlbGYtPmJ1ZmZlcl9tYXNrID0gMDsKKyAgICBpZiAoX2J1ZmZlcmVkX3Jhd190ZWxsKHNlbGYpID09IC0xKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIHJldHVybiAwOworfQorCisvKiBSZXR1cm4gMSBpZiBhbiBFbnZpcm9ubWVudEVycm9yIHdpdGggZXJybm8gPT0gRUlOVFIgaXMgc2V0IChhbmQgdGhlbgorICAgY2xlYXJzIHRoZSBlcnJvciBpbmRpY2F0b3IpLCAwIG90aGVyd2lzZS4KKyAgIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIFB5RXJyX09jY3VycmVkKCkgaXMgdHJ1ZS4KKyovCitzdGF0aWMgaW50CitfdHJhcF9laW50cih2b2lkKQoreworICAgIHN0YXRpYyBQeU9iamVjdCAqZWludHJfaW50ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqdHlwLCAqdmFsLCAqdGI7CisgICAgUHlFbnZpcm9ubWVudEVycm9yT2JqZWN0ICplbnZfZXJyOworCisgICAgaWYgKGVpbnRyX2ludCA9PSBOVUxMKSB7CisgICAgICAgIGVpbnRyX2ludCA9IFB5TG9uZ19Gcm9tTG9uZyhFSU5UUik7CisgICAgICAgIGFzc2VydChlaW50cl9pbnQgIT0gTlVMTCk7CisgICAgfQorICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19FbnZpcm9ubWVudEVycm9yKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUHlFcnJfRmV0Y2goJnR5cCwgJnZhbCwgJnRiKTsKKyAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJnR5cCwgJnZhbCwgJnRiKTsKKyAgICBlbnZfZXJyID0gKFB5RW52aXJvbm1lbnRFcnJvck9iamVjdCAqKSB2YWw7CisgICAgYXNzZXJ0KGVudl9lcnIgIT0gTlVMTCk7CisgICAgaWYgKGVudl9lcnItPm15ZXJybm8gIT0gTlVMTCAmJgorICAgICAgICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woZW52X2Vyci0+bXllcnJubywgZWludHJfaW50LCBQeV9FUSkgPiAwKSB7CisgICAgICAgIFB5X0RFQ1JFRih0eXApOworICAgICAgICBQeV9ERUNSRUYodmFsKTsKKyAgICAgICAgUHlfWERFQ1JFRih0Yik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAvKiBUaGlzIHNpbGVuY2VzIGFueSBlcnJvciBzZXQgYnkgUHlPYmplY3RfUmljaENvbXBhcmVCb29sKCkgKi8KKyAgICBQeUVycl9SZXN0b3JlKHR5cCwgdmFsLCB0Yik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTaGFyZWQgbWV0aG9kcyBhbmQgd3JhcHBlcnMKKyAqLworCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfZmx1c2goYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXM7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIENIRUNLX0NMT1NFRChzZWxmLCAiZmx1c2ggb2YgY2xvc2VkIGZpbGUiKQorCisgICAgaWYgKCFFTlRFUl9CVUZGRVJFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzID0gX2J1ZmZlcmVkd3JpdGVyX2ZsdXNoX3VubG9ja2VkKHNlbGYsIDApOworICAgIGlmIChyZXMgIT0gTlVMTCAmJiBzZWxmLT5yZWFkYWJsZSkgeworICAgICAgICAvKiBSZXdpbmQgdGhlIHJhdyBzdHJlYW0gc28gdGhhdCBpdHMgcG9zaXRpb24gY29ycmVzcG9uZHMgdG8KKyAgICAgICAgICAgdGhlIGN1cnJlbnQgbG9naWNhbCBwb3NpdGlvbi4gKi8KKyAgICAgICAgUHlfb2ZmX3QgbjsKKyAgICAgICAgbiA9IF9idWZmZXJlZF9yYXdfc2VlayhzZWxmLCAtUkFXX09GRlNFVChzZWxmKSwgMSk7CisgICAgICAgIGlmIChuID09IC0xKQorICAgICAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICAgICAgX2J1ZmZlcmVkcmVhZGVyX3Jlc2V0X2J1ZihzZWxmKTsKKyAgICB9CisgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKKworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9wZWVrKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IG4gPSAwOworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnBlZWsiLCAmbikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFFTlRFUl9CVUZGRVJFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+d3JpdGFibGUpIHsKKyAgICAgICAgcmVzID0gX2J1ZmZlcmVkd3JpdGVyX2ZsdXNoX3VubG9ja2VkKHNlbGYsIDEpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICB9CisgICAgcmVzID0gX2J1ZmZlcmVkcmVhZGVyX3BlZWtfdW5sb2NrZWQoc2VsZiwgbik7CisKK2VuZDoKKyAgICBMRUFWRV9CVUZGRVJFRChzZWxmKQorICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9yZWFkKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IG4gPSAtMTsKKyAgICBQeU9iamVjdCAqcmVzOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJjpyZWFkIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmbikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChuIDwgLTEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAicmVhZCBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSBvciAtMSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBDSEVDS19DTE9TRUQoc2VsZiwgInJlYWQgb2YgY2xvc2VkIGZpbGUiKQorCisgICAgaWYgKG4gPT0gLTEpIHsKKyAgICAgICAgLyogVGhlIG51bWJlciBvZiBieXRlcyBpcyB1bnNwZWNpZmllZCwgcmVhZCB1bnRpbCB0aGUgZW5kIG9mIHN0cmVhbSAqLworICAgICAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJlcyA9IF9idWZmZXJlZHJlYWRlcl9yZWFkX2FsbChzZWxmKTsKKyAgICAgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJlcyA9IF9idWZmZXJlZHJlYWRlcl9yZWFkX2Zhc3Qoc2VsZiwgbik7CisgICAgICAgIGlmIChyZXMgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgcmVzID0gX2J1ZmZlcmVkcmVhZGVyX3JlYWRfZ2VuZXJpYyhzZWxmLCBuKTsKKyAgICAgICAgICAgIExFQVZFX0JVRkZFUkVEKHNlbGYpCisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfcmVhZDEoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X3NzaXplX3QgbiwgaGF2ZSwgcjsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJuOnJlYWQxIiwgJm4pKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChuIDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobiA9PSAwKQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKTsKKworICAgIGlmICghRU5URVJfQlVGRkVSRUQoc2VsZikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIGlmIChzZWxmLT53cml0YWJsZSkgeworICAgICAgICByZXMgPSBfYnVmZmVyZWR3cml0ZXJfZmx1c2hfdW5sb2NrZWQoc2VsZiwgMSk7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBQeV9DTEVBUihyZXMpOworICAgIH0KKworICAgIC8qIFJldHVybiB1cCB0byBuIGJ5dGVzLiAgSWYgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIHdlCisgICAgICAgb25seSByZXR1cm4gYnVmZmVyZWQgYnl0ZXMuICBPdGhlcndpc2UsIHdlIGRvIG9uZSByYXcgcmVhZC4gKi8KKworICAgIC8qIFhYWDogdGhpcyBtaW1pY2tzIHRoZSBpby5weSBpbXBsZW1lbnRhdGlvbiBidXQgaXMgcHJvYmFibHkgd3JvbmcuCisgICAgICAgSWYgd2UgbmVlZCB0byByZWFkIGZyb20gdGhlIHJhdyBzdHJlYW0sIHRoZW4gd2UgY291bGQgYWN0dWFsbHkgcmVhZAorICAgICAgIGFsbCBgbmAgYnl0ZXMgYXNrZWQgYnkgdGhlIGNhbGxlciAoYW5kIHBvc3NpYmx5IG1vcmUsIHNvIGFzIHRvIGZpbGwKKyAgICAgICBvdXIgYnVmZmVyIGZvciB0aGUgbmV4dCByZWFkcykuICovCisKKyAgICBoYXZlID0gUHlfU0FGRV9ET1dOQ0FTVChSRUFEQUhFQUQoc2VsZiksIFB5X29mZl90LCBQeV9zc2l6ZV90KTsKKyAgICBpZiAoaGF2ZSA+IDApIHsKKyAgICAgICAgaWYgKG4gPiBoYXZlKQorICAgICAgICAgICAgbiA9IGhhdmU7CisgICAgICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+YnVmZmVyICsgc2VsZi0+cG9zLCBuKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIHNlbGYtPnBvcyArPSBuOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICAvKiBGaWxsIHRoZSBidWZmZXIgZnJvbSB0aGUgcmF3IHN0cmVhbSwgYW5kIGNvcHkgaXQgdG8gdGhlIHJlc3VsdC4gKi8KKyAgICBfYnVmZmVyZWRyZWFkZXJfcmVzZXRfYnVmKHNlbGYpOworICAgIHIgPSBfYnVmZmVyZWRyZWFkZXJfZmlsbF9idWZmZXIoc2VsZik7CisgICAgaWYgKHIgPT0gLTEpCisgICAgICAgIGdvdG8gZW5kOworICAgIGlmIChyID09IC0yKQorICAgICAgICByID0gMDsKKyAgICBpZiAobiA+IHIpCisgICAgICAgIG4gPSByOworICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+YnVmZmVyLCBuKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZW5kOworICAgIHNlbGYtPnBvcyA9IG47CisKK2VuZDoKKyAgICBMRUFWRV9CVUZGRVJFRChzZWxmKQorICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9yZWFkaW50byhidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIAorICAgIC8qIFRPRE86IHVzZSByYXcucmVhZGludG8oKSBpbnN0ZWFkISAqLworICAgIGlmIChzZWxmLT53cml0YWJsZSkgeworICAgICAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJlcyA9IF9idWZmZXJlZHdyaXRlcl9mbHVzaF91bmxvY2tlZChzZWxmLCAwKTsKKyAgICAgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgIH0KKyAgICByZXMgPSBidWZmZXJlZGlvYmFzZV9yZWFkaW50bygoUHlPYmplY3QgKilzZWxmLCBhcmdzKTsKKworZW5kOgorICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnVmZmVyZWRfcmVhZGxpbmUoYnVmZmVyZWQgKnNlbGYsIFB5X3NzaXplX3QgbGltaXQpCit7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNodW5rcyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBuLCB3cml0dGVuID0gMDsKKyAgICBjb25zdCBjaGFyICpzdGFydCwgKnMsICplbmQ7CisKKyAgICBDSEVDS19DTE9TRUQoc2VsZiwgInJlYWRsaW5lIG9mIGNsb3NlZCBmaWxlIikKKworICAgIC8qIEZpcnN0LCB0cnkgdG8gZmluZCBhIGxpbmUgaW4gdGhlIGJ1ZmZlci4gVGhpcyBjYW4gcnVuIHVubG9ja2VkIGJlY2F1c2UKKyAgICAgICB0aGUgY2FsbHMgdG8gdGhlIEMgQVBJIGFyZSBzaW1wbGUgZW5vdWdoIHRoYXQgdGhleSBjYW4ndCB0cmlnZ2VyCisgICAgICAgYW55IHRocmVhZCBzd2l0Y2guICovCisgICAgbiA9IFB5X1NBRkVfRE9XTkNBU1QoUkVBREFIRUFEKHNlbGYpLCBQeV9vZmZfdCwgUHlfc3NpemVfdCk7CisgICAgaWYgKGxpbWl0ID49IDAgJiYgbiA+IGxpbWl0KQorICAgICAgICBuID0gbGltaXQ7CisgICAgc3RhcnQgPSBzZWxmLT5idWZmZXIgKyBzZWxmLT5wb3M7CisgICAgcyA9IG1lbWNocihzdGFydCwgJ1xuJywgbik7CisgICAgaWYgKHMgIT0gTlVMTCkgeworICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHN0YXJ0LCBzIC0gc3RhcnQgKyAxKTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMKQorICAgICAgICAgICAgc2VsZi0+cG9zICs9IHMgLSBzdGFydCArIDE7CisgICAgICAgIGdvdG8gZW5kX3VubG9ja2VkOworICAgIH0KKyAgICBpZiAobiA9PSBsaW1pdCkgeworICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHN0YXJ0LCBuKTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMKQorICAgICAgICAgICAgc2VsZi0+cG9zICs9IG47CisgICAgICAgIGdvdG8gZW5kX3VubG9ja2VkOworICAgIH0KKworICAgIGlmICghRU5URVJfQlVGRkVSRUQoc2VsZikpCisgICAgICAgIGdvdG8gZW5kX3VubG9ja2VkOworCisgICAgLyogTm93IHdlIHRyeSB0byBnZXQgc29tZSBtb3JlIGZyb20gdGhlIHJhdyBzdHJlYW0gKi8KKyAgICBpZiAoc2VsZi0+d3JpdGFibGUpIHsKKyAgICAgICAgcmVzID0gX2J1ZmZlcmVkd3JpdGVyX2ZsdXNoX3VubG9ja2VkKHNlbGYsIDEpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICB9CisgICAgY2h1bmtzID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoY2h1bmtzID09IE5VTEwpCisgICAgICAgIGdvdG8gZW5kOworICAgIGlmIChuID4gMCkgeworICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHN0YXJ0LCBuKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGNodW5rcywgcmVzKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihyZXMpOworICAgICAgICB3cml0dGVuICs9IG47CisgICAgICAgIGlmIChsaW1pdCA+PSAwKQorICAgICAgICAgICAgbGltaXQgLT0gbjsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CisgICAgICAgIG4gPSBfYnVmZmVyZWRyZWFkZXJfZmlsbF9idWZmZXIoc2VsZik7CisgICAgICAgIGlmIChuID09IC0xKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGlmIChuIDw9IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGxpbWl0ID49IDAgJiYgbiA+IGxpbWl0KQorICAgICAgICAgICAgbiA9IGxpbWl0OworICAgICAgICBzdGFydCA9IHNlbGYtPmJ1ZmZlcjsKKyAgICAgICAgZW5kID0gc3RhcnQgKyBuOworICAgICAgICBzID0gc3RhcnQ7CisgICAgICAgIHdoaWxlIChzIDwgZW5kKSB7CisgICAgICAgICAgICBpZiAoKnMrKyA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzdGFydCwgcyAtIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgICAgIHNlbGYtPnBvcyA9IHMgLSBzdGFydDsKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoc3RhcnQsIG4pOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgaWYgKG4gPT0gbGltaXQpIHsKKyAgICAgICAgICAgIHNlbGYtPnBvcyA9IG47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChjaHVua3MsIHJlcykgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXMpOworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICAgICAgd3JpdHRlbiArPSBuOworICAgICAgICBpZiAobGltaXQgPj0gMCkKKyAgICAgICAgICAgIGxpbWl0IC09IG47CisgICAgfQorZm91bmQ6CisgICAgaWYgKHJlcyAhPSBOVUxMICYmIFB5TGlzdF9BcHBlbmQoY2h1bmtzLCByZXMpIDwgMCkgeworICAgICAgICBQeV9DTEVBUihyZXMpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgUHlfQ0xFQVIocmVzKTsKKyAgICByZXMgPSBfUHlCeXRlc19Kb2luKF9QeUlPX2VtcHR5X2J5dGVzLCBjaHVua3MpOworCitlbmQ6CisgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKK2VuZF91bmxvY2tlZDoKKyAgICBQeV9YREVDUkVGKGNodW5rcyk7CisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX3JlYWRsaW5lKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IGxpbWl0ID0gLTE7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWRsaW5lIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmbGltaXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX2J1ZmZlcmVkX3JlYWRsaW5lKHNlbGYsIGxpbWl0KTsKK30KKworCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfdGVsbChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfb2ZmX3QgcG9zOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBwb3MgPSBfYnVmZmVyZWRfcmF3X3RlbGwoc2VsZik7CisgICAgaWYgKHBvcyA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcG9zIC09IFJBV19PRkZTRVQoc2VsZik7CisgICAgLyogVE9ETzogc2FuaXR5IGNoZWNrIChwb3MgPj0gMCkgKi8KKyAgICByZXR1cm4gUHlMb25nX0Zyb21PZmZfdChwb3MpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfc2VlayhidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfb2ZmX3QgdGFyZ2V0LCBuOworICAgIGludCB3aGVuY2UgPSAwOworICAgIFB5T2JqZWN0ICp0YXJnZXRvYmosICpyZXMgPSBOVUxMOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98aTpzZWVrIiwgJnRhcmdldG9iaiwgJndoZW5jZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICh3aGVuY2UgPCAwIHx8IHdoZW5jZSA+IDIpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAid2hlbmNlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyLCBub3QgJWQiLCB3aGVuY2UpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBDSEVDS19DTE9TRUQoc2VsZiwgInNlZWsgb2YgY2xvc2VkIGZpbGUiKQorCisgICAgdGFyZ2V0ID0gUHlOdW1iZXJfQXNPZmZfdCh0YXJnZXRvYmosIFB5RXhjX1ZhbHVlRXJyb3IpOworICAgIGlmICh0YXJnZXQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAod2hlbmNlICE9IDIgJiYgc2VsZi0+cmVhZGFibGUpIHsKKyAgICAgICAgUHlfb2ZmX3QgY3VycmVudCwgYXZhaWw7CisgICAgICAgIC8qIENoZWNrIGlmIHNlZWtpbmcgbGVhdmVzIHVzIGluc2lkZSB0aGUgY3VycmVudCBidWZmZXIsCisgICAgICAgICAgIHNvIGFzIHRvIHJldHVybiBxdWlja2x5IGlmIHBvc3NpYmxlLiBBbHNvLCB3ZSBuZWVkbid0IHRha2UgdGhlCisgICAgICAgICAgIGxvY2sgaW4gdGhpcyBmYXN0IHBhdGguCisgICAgICAgICAgIERvbid0IGtub3cgaG93IHRvIGRvIHRoYXQgd2hlbiB3aGVuY2UgPT0gMiwgdGhvdWdoLiAqLworICAgICAgICAvKiBOT1RFOiBSQVdfVEVMTCgpIGNhbiByZWxlYXNlIHRoZSBHSUwgYnV0IHRoZSBvYmplY3QgaXMgaW4gYSBzdGFibGUKKyAgICAgICAgICAgc3RhdGUgYXQgdGhpcyBwb2ludC4gKi8KKyAgICAgICAgY3VycmVudCA9IFJBV19URUxMKHNlbGYpOworICAgICAgICBhdmFpbCA9IFJFQURBSEVBRChzZWxmKTsKKyAgICAgICAgaWYgKGF2YWlsID4gMCkgeworICAgICAgICAgICAgUHlfb2ZmX3Qgb2Zmc2V0OworICAgICAgICAgICAgaWYgKHdoZW5jZSA9PSAwKQorICAgICAgICAgICAgICAgIG9mZnNldCA9IHRhcmdldCAtIChjdXJyZW50IC0gUkFXX09GRlNFVChzZWxmKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gdGFyZ2V0OworICAgICAgICAgICAgaWYgKG9mZnNldCA+PSAtc2VsZi0+cG9zICYmIG9mZnNldCA8PSBhdmFpbCkgeworICAgICAgICAgICAgICAgIHNlbGYtPnBvcyArPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tT2ZmX3QoY3VycmVudCAtIGF2YWlsICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghRU5URVJfQlVGRkVSRUQoc2VsZikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogRmFsbGJhY2s6IGludm9rZSByYXcgc2VlaygpIG1ldGhvZCBhbmQgY2xlYXIgYnVmZmVyICovCisgICAgaWYgKHNlbGYtPndyaXRhYmxlKSB7CisgICAgICAgIHJlcyA9IF9idWZmZXJlZHdyaXRlcl9mbHVzaF91bmxvY2tlZChzZWxmLCAwKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgICAgIF9idWZmZXJlZHdyaXRlcl9yZXNldF9idWYoc2VsZik7CisgICAgfQorCisgICAgLyogVE9ETzogYWxpZ24gb24gYmxvY2sgYm91bmRhcnkgYW5kIHJlYWQgYnVmZmVyIGlmIG5lZWRlZD8gKi8KKyAgICBpZiAod2hlbmNlID09IDEpCisgICAgICAgIHRhcmdldCAtPSBSQVdfT0ZGU0VUKHNlbGYpOworICAgIG4gPSBfYnVmZmVyZWRfcmF3X3NlZWsoc2VsZiwgdGFyZ2V0LCB3aGVuY2UpOworICAgIGlmIChuID09IC0xKQorICAgICAgICBnb3RvIGVuZDsKKyAgICBzZWxmLT5yYXdfcG9zID0gLTE7CisgICAgcmVzID0gUHlMb25nX0Zyb21PZmZfdChuKTsKKyAgICBpZiAocmVzICE9IE5VTEwgJiYgc2VsZi0+cmVhZGFibGUpCisgICAgICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CisKK2VuZDoKKyAgICBMRUFWRV9CVUZGRVJFRChzZWxmKQorICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF90cnVuY2F0ZShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnBvcyA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86dHJ1bmNhdGUiLCAmcG9zKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT53cml0YWJsZSkgeworICAgICAgICByZXMgPSBfYnVmZmVyZWR3cml0ZXJfZmx1c2hfdW5sb2NrZWQoc2VsZiwgMCk7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBQeV9DTEVBUihyZXMpOworICAgIH0KKyAgICBpZiAoc2VsZi0+cmVhZGFibGUpIHsKKyAgICAgICAgaWYgKHBvcyA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICAvKiBSZXdpbmQgdGhlIHJhdyBzdHJlYW0gc28gdGhhdCBpdHMgcG9zaXRpb24gY29ycmVzcG9uZHMgdG8KKyAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGxvZ2ljYWwgcG9zaXRpb24uICovCisgICAgICAgICAgICBpZiAoX2J1ZmZlcmVkX3Jhd19zZWVrKHNlbGYsIC1SQVdfT0ZGU0VUKHNlbGYpLCAxKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgICAgICBfYnVmZmVyZWRyZWFkZXJfcmVzZXRfYnVmKHNlbGYpOworICAgIH0KKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl90cnVuY2F0ZSwgcG9zLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZW5kOworICAgIC8qIFJlc2V0IGNhY2hlZCBwb3NpdGlvbiAqLworICAgIGlmIChfYnVmZmVyZWRfcmF3X3RlbGwoc2VsZikgPT0gLTEpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKK2VuZDoKKyAgICBMRUFWRV9CVUZGRVJFRChzZWxmKQorICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9pdGVybmV4dChidWZmZXJlZCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqbGluZTsKKyAgICBQeVR5cGVPYmplY3QgKnRwOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisKKyAgICB0cCA9IFB5X1RZUEUoc2VsZik7CisgICAgaWYgKHRwID09ICZQeUJ1ZmZlcmVkUmVhZGVyX1R5cGUgfHwKKyAgICAgICAgdHAgPT0gJlB5QnVmZmVyZWRSYW5kb21fVHlwZSkgeworICAgICAgICAvKiBTa2lwIG1ldGhvZCBjYWxsIG92ZXJoZWFkIGZvciBzcGVlZCAqLworICAgICAgICBsaW5lID0gX2J1ZmZlcmVkX3JlYWRsaW5lKHNlbGYsIC0xKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxpbmUgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygoUHlPYmplY3QgKilzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUlPX3N0cl9yZWFkbGluZSwgTlVMTCk7CisgICAgICAgIGlmIChsaW5lICYmICFQeUJ5dGVzX0NoZWNrKGxpbmUpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmUoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBhIGJ5dGVzIG9iamVjdCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKGxpbmUpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxpbmUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlCeXRlc19HRVRfU0laRShsaW5lKSA9PSAwKSB7CisgICAgICAgIC8qIFJlYWNoZWQgRU9GIG9yIHdvdWxkIGhhdmUgYmxvY2tlZCAqLworICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBsaW5lOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfcmVwcihidWZmZXJlZCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqbmFtZW9iaiwgKnJlczsKKworICAgIG5hbWVvYmogPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKSBzZWxmLCAibmFtZSIpOworICAgIGlmIChuYW1lb2JqID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJlcyA9IFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjwlcz4iLCBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXByID0gUHlPYmplY3RfUmVwcihuYW1lb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG5hbWVvYmopOworICAgICAgICBpZiAocmVwciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJlcyA9IFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjwlcyBuYW1lPSVzPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhyZXByKSk7CisgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworLyoKKyAqIGNsYXNzIEJ1ZmZlcmVkUmVhZGVyCisgKi8KKworUHlEb2NfU1RSVkFSKGJ1ZmZlcmVkcmVhZGVyX2RvYywKKyAgICAgICAgICAgICAiQ3JlYXRlIGEgbmV3IGJ1ZmZlcmVkIHJlYWRlciB1c2luZyB0aGUgZ2l2ZW4gcmVhZGFibGUgcmF3IElPIG9iamVjdC4iKTsKKworc3RhdGljIHZvaWQgX2J1ZmZlcmVkcmVhZGVyX3Jlc2V0X2J1ZihidWZmZXJlZCAqc2VsZikKK3sKKyAgICBzZWxmLT5yZWFkX2VuZCA9IC0xOworfQorCitzdGF0aWMgaW50CitidWZmZXJlZHJlYWRlcl9pbml0KGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7InJhdyIsICJidWZmZXJfc2l6ZSIsIE5VTEx9OworICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBERUZBVUxUX0JVRkZFUl9TSVpFOworICAgIFB5T2JqZWN0ICpyYXc7CisKKyAgICBzZWxmLT5vayA9IDA7CisgICAgc2VsZi0+ZGV0YWNoZWQgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98bjpCdWZmZXJlZFJlYWRlciIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmF3LCAmYnVmZmVyX3NpemUpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX3JlYWRhYmxlKHJhdywgUHlfVHJ1ZSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgUHlfQ0xFQVIoc2VsZi0+cmF3KTsKKyAgICBQeV9JTkNSRUYocmF3KTsKKyAgICBzZWxmLT5yYXcgPSByYXc7CisgICAgc2VsZi0+YnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZTsKKyAgICBzZWxmLT5yZWFkYWJsZSA9IDE7CisgICAgc2VsZi0+d3JpdGFibGUgPSAwOworCisgICAgaWYgKF9idWZmZXJlZF9pbml0KHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CisKKyAgICBzZWxmLT5mYXN0X2Nsb3NlZF9jaGVja3MgPSAoUHlfVFlQRShzZWxmKSA9PSAmUHlCdWZmZXJlZFJlYWRlcl9UeXBlICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocmF3KSA9PSAmUHlGaWxlSU9fVHlwZSk7CisKKyAgICBzZWxmLT5vayA9IDE7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeV9zc2l6ZV90CitfYnVmZmVyZWRyZWFkZXJfcmF3X3JlYWQoYnVmZmVyZWQgKnNlbGYsIGNoYXIgKnN0YXJ0LCBQeV9zc2l6ZV90IGxlbikKK3sKKyAgICBQeV9idWZmZXIgYnVmOworICAgIFB5T2JqZWN0ICptZW1vYmosICpyZXM7CisgICAgUHlfc3NpemVfdCBuOworICAgIC8qIE5PVEU6IHRoZSBidWZmZXIgbmVlZG4ndCBiZSByZWxlYXNlZCBhcyBpdHMgb2JqZWN0IGlzIE5VTEwuICovCisgICAgaWYgKFB5QnVmZmVyX0ZpbGxJbmZvKCZidWYsIE5VTEwsIHN0YXJ0LCBsZW4sIDAsIFB5QlVGX0NPTlRJRykgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBtZW1vYmogPSBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcigmYnVmKTsKKyAgICBpZiAobWVtb2JqID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAvKiBOT1RFOiBQeUVycl9TZXRGcm9tRXJybm8oKSBjYWxscyBQeUVycl9DaGVja1NpZ25hbHMoKSB3aGVuIEVJTlRSCisgICAgICAgb2NjdXJzIHNvIHdlIG5lZWRuJ3QgZG8gaXQgb3Vyc2VsdmVzLgorICAgICAgIFdlIHRoZW4gcmV0cnkgcmVhZGluZywgaWdub3JpbmcgdGhlIHNpZ25hbCBpZiBubyBoYW5kbGVyIGhhcworICAgICAgIHJhaXNlZCAoc2VlIGlzc3VlICMxMDk1NikuCisgICAgKi8KKyAgICBkbyB7CisgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX3JlYWRpbnRvLCBtZW1vYmosIE5VTEwpOworICAgIH0gd2hpbGUgKHJlcyA9PSBOVUxMICYmIF90cmFwX2VpbnRyKCkpOworICAgIFB5X0RFQ1JFRihtZW1vYmopOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChyZXMgPT0gUHlfTm9uZSkgeworICAgICAgICAvKiBOb24tYmxvY2tpbmcgc3RyZWFtIHdvdWxkIGhhdmUgYmxvY2tlZC4gU3BlY2lhbCByZXR1cm4gY29kZSEgKi8KKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisgICAgbiA9IFB5TnVtYmVyX0FzU3NpemVfdChyZXMsIFB5RXhjX1ZhbHVlRXJyb3IpOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIGlmIChuIDwgMCB8fCBuID4gbGVuKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgInJhdyByZWFkaW50bygpIHJldHVybmVkIGludmFsaWQgbGVuZ3RoICV6ZCAiCisgICAgICAgICAgICAgICAgICAgICAiKHNob3VsZCBoYXZlIGJlZW4gYmV0d2VlbiAwIGFuZCAlemQpIiwgbiwgbGVuKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAobiA+IDAgJiYgc2VsZi0+YWJzX3BvcyAhPSAtMSkKKyAgICAgICAgc2VsZi0+YWJzX3BvcyArPSBuOworICAgIHJldHVybiBuOworfQorCitzdGF0aWMgUHlfc3NpemVfdAorX2J1ZmZlcmVkcmVhZGVyX2ZpbGxfYnVmZmVyKGJ1ZmZlcmVkICpzZWxmKQoreworICAgIFB5X3NzaXplX3Qgc3RhcnQsIGxlbiwgbjsKKyAgICBpZiAoVkFMSURfUkVBRF9CVUZGRVIoc2VsZikpCisgICAgICAgIHN0YXJ0ID0gUHlfU0FGRV9ET1dOQ0FTVChzZWxmLT5yZWFkX2VuZCwgUHlfb2ZmX3QsIFB5X3NzaXplX3QpOworICAgIGVsc2UKKyAgICAgICAgc3RhcnQgPSAwOworICAgIGxlbiA9IHNlbGYtPmJ1ZmZlcl9zaXplIC0gc3RhcnQ7CisgICAgbiA9IF9idWZmZXJlZHJlYWRlcl9yYXdfcmVhZChzZWxmLCBzZWxmLT5idWZmZXIgKyBzdGFydCwgbGVuKTsKKyAgICBpZiAobiA8PSAwKQorICAgICAgICByZXR1cm4gbjsKKyAgICBzZWxmLT5yZWFkX2VuZCA9IHN0YXJ0ICsgbjsKKyAgICBzZWxmLT5yYXdfcG9zID0gc3RhcnQgKyBuOworICAgIHJldHVybiBuOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2J1ZmZlcmVkcmVhZGVyX3JlYWRfYWxsKGJ1ZmZlcmVkICpzZWxmKQoreworICAgIFB5X3NzaXplX3QgY3VycmVudF9zaXplOworICAgIFB5T2JqZWN0ICpyZXMsICpkYXRhID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY2h1bmtzID0gUHlMaXN0X05ldygwKTsKKworICAgIGlmIChjaHVua3MgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBGaXJzdCBjb3B5IHdoYXQgd2UgaGF2ZSBpbiB0aGUgY3VycmVudCBidWZmZXIuICovCisgICAgY3VycmVudF9zaXplID0gUHlfU0FGRV9ET1dOQ0FTVChSRUFEQUhFQUQoc2VsZiksIFB5X29mZl90LCBQeV9zc2l6ZV90KTsKKyAgICBpZiAoY3VycmVudF9zaXplKSB7CisgICAgICAgIGRhdGEgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKAorICAgICAgICAgICAgc2VsZi0+YnVmZmVyICsgc2VsZi0+cG9zLCBjdXJyZW50X3NpemUpOworICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoY2h1bmtzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CisgICAgLyogV2UncmUgZ29pbmcgcGFzdCB0aGUgYnVmZmVyJ3MgYm91bmRzLCBmbHVzaCBpdCAqLworICAgIGlmIChzZWxmLT53cml0YWJsZSkgeworICAgICAgICByZXMgPSBfYnVmZmVyZWR3cml0ZXJfZmx1c2hfdW5sb2NrZWQoc2VsZiwgMSk7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rcyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihyZXMpOworICAgIH0KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoZGF0YSkgeworICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY2h1bmtzLCBkYXRhKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBSZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQgYmxvY2suICovCisgICAgICAgIGRhdGEgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl9yZWFkLCBOVUxMKTsKKyAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rcyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGF0YSAhPSBQeV9Ob25lICYmICFQeUJ5dGVzX0NoZWNrKGRhdGEpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY2h1bmtzKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZWFkKCkgc2hvdWxkIHJldHVybiBieXRlcyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRhdGEgPT0gUHlfTm9uZSB8fCBQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpID09IDApIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50X3NpemUgPT0gMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjaHVua3MpOworICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzID0gX1B5Qnl0ZXNfSm9pbihfUHlJT19lbXB0eV9ieXRlcywgY2h1bmtzKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjdXJyZW50X3NpemUgKz0gUHlCeXRlc19HRVRfU0laRShkYXRhKTsKKyAgICAgICAgaWYgKHNlbGYtPmFic19wb3MgIT0gLTEpCisgICAgICAgICAgICBzZWxmLT5hYnNfcG9zICs9IFB5Qnl0ZXNfR0VUX1NJWkUoZGF0YSk7CisgICAgfQorfQorCisvKiBSZWFkIG4gYnl0ZXMgZnJvbSB0aGUgYnVmZmVyIGlmIGl0IGNhbiwgb3RoZXJ3aXNlIHJldHVybiBOb25lLgorICAgVGhpcyBmdW5jdGlvbiBpcyBzaW1wbGUgZW5vdWdoIHRoYXQgaXQgY2FuIHJ1biB1bmxvY2tlZC4gKi8KK3N0YXRpYyBQeU9iamVjdCAqCitfYnVmZmVyZWRyZWFkZXJfcmVhZF9mYXN0KGJ1ZmZlcmVkICpzZWxmLCBQeV9zc2l6ZV90IG4pCit7CisgICAgUHlfc3NpemVfdCBjdXJyZW50X3NpemU7CisKKyAgICBjdXJyZW50X3NpemUgPSBQeV9TQUZFX0RPV05DQVNUKFJFQURBSEVBRChzZWxmKSwgUHlfb2ZmX3QsIFB5X3NzaXplX3QpOworICAgIGlmIChuIDw9IGN1cnJlbnRfc2l6ZSkgeworICAgICAgICAvKiBGYXN0IHBhdGg6IHRoZSBkYXRhIHRvIHJlYWQgaXMgZnVsbHkgYnVmZmVyZWQuICovCisgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPmJ1ZmZlciArIHNlbGYtPnBvcywgbik7CisgICAgICAgIGlmIChyZXMgIT0gTlVMTCkKKyAgICAgICAgICAgIHNlbGYtPnBvcyArPSBuOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyogR2VuZXJpYyByZWFkIGZ1bmN0aW9uOiByZWFkIGZyb20gdGhlIHN0cmVhbSB1bnRpbCBlbm91Z2ggYnl0ZXMgYXJlIHJlYWQsCisgKiBvciB1bnRpbCBhbiBFT0Ygb2NjdXJzIG9yIHVudGlsIHJlYWQoKSB3b3VsZCBibG9jay4KKyAqLworc3RhdGljIFB5T2JqZWN0ICoKK19idWZmZXJlZHJlYWRlcl9yZWFkX2dlbmVyaWMoYnVmZmVyZWQgKnNlbGYsIFB5X3NzaXplX3QgbikKK3sKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGN1cnJlbnRfc2l6ZSwgcmVtYWluaW5nLCB3cml0dGVuOworICAgIGNoYXIgKm91dDsKKworICAgIGN1cnJlbnRfc2l6ZSA9IFB5X1NBRkVfRE9XTkNBU1QoUkVBREFIRUFEKHNlbGYpLCBQeV9vZmZfdCwgUHlfc3NpemVfdCk7CisgICAgaWYgKG4gPD0gY3VycmVudF9zaXplKQorICAgICAgICByZXR1cm4gX2J1ZmZlcmVkcmVhZGVyX3JlYWRfZmFzdChzZWxmLCBuKTsKKworICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIG91dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcyk7CisgICAgcmVtYWluaW5nID0gbjsKKyAgICB3cml0dGVuID0gMDsKKyAgICBpZiAoY3VycmVudF9zaXplID4gMCkgeworICAgICAgICBtZW1jcHkob3V0LCBzZWxmLT5idWZmZXIgKyBzZWxmLT5wb3MsIGN1cnJlbnRfc2l6ZSk7CisgICAgICAgIHJlbWFpbmluZyAtPSBjdXJyZW50X3NpemU7CisgICAgICAgIHdyaXR0ZW4gKz0gY3VycmVudF9zaXplOworICAgIH0KKyAgICBfYnVmZmVyZWRyZWFkZXJfcmVzZXRfYnVmKHNlbGYpOworICAgIHdoaWxlIChyZW1haW5pbmcgPiAwKSB7CisgICAgICAgIC8qIFdlIHdhbnQgdG8gcmVhZCBhIHdob2xlIGJsb2NrIGF0IHRoZSBlbmQgaW50byBidWZmZXIuCisgICAgICAgICAgIElmIHdlIGhhZCByZWFkdigpIHdlIGNvdWxkIGRvIHRoaXMgaW4gb25lIHBhc3MuICovCisgICAgICAgIFB5X3NzaXplX3QgciA9IE1JTlVTX0xBU1RfQkxPQ0soc2VsZiwgcmVtYWluaW5nKTsKKyAgICAgICAgaWYgKHIgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByID0gX2J1ZmZlcmVkcmVhZGVyX3Jhd19yZWFkKHNlbGYsIG91dCArIHdyaXR0ZW4sIHIpOworICAgICAgICBpZiAociA9PSAtMSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChyID09IDAgfHwgciA9PSAtMikgeworICAgICAgICAgICAgLyogRU9GIG9jY3VycmVkIG9yIHJlYWQoKSB3b3VsZCBibG9jay4gKi8KKyAgICAgICAgICAgIGlmIChyID09IDAgfHwgd3JpdHRlbiA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXMsIHdyaXR0ZW4pKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICB9CisgICAgICAgIHJlbWFpbmluZyAtPSByOworICAgICAgICB3cml0dGVuICs9IHI7CisgICAgfQorICAgIGFzc2VydChyZW1haW5pbmcgPD0gc2VsZi0+YnVmZmVyX3NpemUpOworICAgIHNlbGYtPnBvcyA9IDA7CisgICAgc2VsZi0+cmF3X3BvcyA9IDA7CisgICAgc2VsZi0+cmVhZF9lbmQgPSAwOworICAgIC8qIE5PVEU6IHdoZW4gdGhlIHJlYWQgaXMgc2F0aXNmaWVkLCB3ZSBhdm9pZCBpc3N1aW5nIGFueSBhZGRpdGlvbmFsCisgICAgICAgcmVhZHMsIHdoaWNoIGNvdWxkIGJsb2NrIGluZGVmaW5pdGVseSAoZS5nLiBvbiBhIHNvY2tldCkuCisgICAgICAgU2VlIGlzc3VlICM5NTUwLiAqLworICAgIHdoaWxlIChyZW1haW5pbmcgPiAwICYmIHNlbGYtPnJlYWRfZW5kIDwgc2VsZi0+YnVmZmVyX3NpemUpIHsKKyAgICAgICAgUHlfc3NpemVfdCByID0gX2J1ZmZlcmVkcmVhZGVyX2ZpbGxfYnVmZmVyKHNlbGYpOworICAgICAgICBpZiAociA9PSAtMSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChyID09IDAgfHwgciA9PSAtMikgeworICAgICAgICAgICAgLyogRU9GIG9jY3VycmVkIG9yIHJlYWQoKSB3b3VsZCBibG9jay4gKi8KKyAgICAgICAgICAgIGlmIChyID09IDAgfHwgd3JpdHRlbiA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXMsIHdyaXR0ZW4pKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICB9CisgICAgICAgIGlmIChyZW1haW5pbmcgPiByKSB7CisgICAgICAgICAgICBtZW1jcHkob3V0ICsgd3JpdHRlbiwgc2VsZi0+YnVmZmVyICsgc2VsZi0+cG9zLCByKTsKKyAgICAgICAgICAgIHdyaXR0ZW4gKz0gcjsKKyAgICAgICAgICAgIHNlbGYtPnBvcyArPSByOworICAgICAgICAgICAgcmVtYWluaW5nIC09IHI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocmVtYWluaW5nID4gMCkgeworICAgICAgICAgICAgbWVtY3B5KG91dCArIHdyaXR0ZW4sIHNlbGYtPmJ1ZmZlciArIHNlbGYtPnBvcywgcmVtYWluaW5nKTsKKyAgICAgICAgICAgIHdyaXR0ZW4gKz0gcmVtYWluaW5nOworICAgICAgICAgICAgc2VsZi0+cG9zICs9IHJlbWFpbmluZzsKKyAgICAgICAgICAgIHJlbWFpbmluZyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJlczsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXMpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2J1ZmZlcmVkcmVhZGVyX3BlZWtfdW5sb2NrZWQoYnVmZmVyZWQgKnNlbGYsIFB5X3NzaXplX3QgbikKK3sKKyAgICBQeV9zc2l6ZV90IGhhdmUsIHI7CisKKyAgICBoYXZlID0gUHlfU0FGRV9ET1dOQ0FTVChSRUFEQUhFQUQoc2VsZiksIFB5X29mZl90LCBQeV9zc2l6ZV90KTsKKyAgICAvKiBDb25zdHJhaW50czoKKyAgICAgICAxLiB3ZSBkb24ndCB3YW50IHRvIGFkdmFuY2UgdGhlIGZpbGUgcG9zaXRpb24uCisgICAgICAgMi4gd2UgZG9uJ3Qgd2FudCB0byBsb3NlIGJsb2NrIGFsaWdubWVudCwgc28gd2UgY2FuJ3Qgc2hpZnQgdGhlIGJ1ZmZlcgorICAgICAgICAgIHRvIG1ha2Ugc29tZSBwbGFjZS4KKyAgICAgICBUaGVyZWZvcmUsIHdlIGVpdGhlciByZXR1cm4gYGhhdmVgIGJ5dGVzIChpZiA+IDApLCBvciBhIGZ1bGwgYnVmZmVyLgorICAgICovCisgICAgaWYgKGhhdmUgPiAwKSB7CisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPmJ1ZmZlciArIHNlbGYtPnBvcywgaGF2ZSk7CisgICAgfQorCisgICAgLyogRmlsbCB0aGUgYnVmZmVyIGZyb20gdGhlIHJhdyBzdHJlYW0sIGFuZCBjb3B5IGl0IHRvIHRoZSByZXN1bHQuICovCisgICAgX2J1ZmZlcmVkcmVhZGVyX3Jlc2V0X2J1ZihzZWxmKTsKKyAgICByID0gX2J1ZmZlcmVkcmVhZGVyX2ZpbGxfYnVmZmVyKHNlbGYpOworICAgIGlmIChyID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAociA9PSAtMikKKyAgICAgICAgciA9IDA7CisgICAgc2VsZi0+cG9zID0gMDsKKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5idWZmZXIsIHIpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgYnVmZmVyZWRyZWFkZXJfbWV0aG9kc1tdID0geworICAgIC8qIEJ1ZmZlcmVkSU9NaXhpbiBtZXRob2RzICovCisgICAgeyJkZXRhY2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZGV0YWNoLCBNRVRIX05PQVJHU30sCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9zaW1wbGVfZmx1c2gsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2Nsb3NlLCBNRVRIX05PQVJHU30sCisgICAgeyJzZWVrYWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9zZWVrYWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsicmVhZGFibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZGFibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7IndyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3dyaXRhYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJmaWxlbm8iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZmlsZW5vLCBNRVRIX05PQVJHU30sCisgICAgeyJpc2F0dHkiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfaXNhdHR5LCBNRVRIX05PQVJHU30sCisKKyAgICB7InJlYWQiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InBlZWsiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcGVlaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlYWQxIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWQxLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVhZGxpbmUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZGxpbmUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJzZWVrIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3NlZWssIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0ZWxsIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3RlbGwsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5TWVtYmVyRGVmIGJ1ZmZlcmVkcmVhZGVyX21lbWJlcnNbXSA9IHsKKyAgICB7InJhdyIsIFRfT0JKRUNULCBvZmZzZXRvZihidWZmZXJlZCwgcmF3KSwgUkVBRE9OTFl9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIGJ1ZmZlcmVkcmVhZGVyX2dldHNldFtdID0geworICAgIHsiY2xvc2VkIiwgKGdldHRlcilidWZmZXJlZF9jbG9zZWRfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7Im5hbWUiLCAoZ2V0dGVyKWJ1ZmZlcmVkX25hbWVfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7Im1vZGUiLCAoZ2V0dGVyKWJ1ZmZlcmVkX21vZGVfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7TlVMTH0KK307CisKKworUHlUeXBlT2JqZWN0IFB5QnVmZmVyZWRSZWFkZXJfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX2lvLkJ1ZmZlcmVkUmVhZGVyIiwgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoYnVmZmVyZWQpLCAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAoZGVzdHJ1Y3RvcilidWZmZXJlZF9kZWFsbG9jLCAgICAgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIChyZXByZnVuYylidWZmZXJlZF9yZXByLCAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCisgICAgYnVmZmVyZWRyZWFkZXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgb2Zmc2V0b2YoYnVmZmVyZWQsIHdlYWtyZWZsaXN0KSwgLyp0cF93ZWFrbGlzdG9mZnNldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAoaXRlcm5leHRmdW5jKWJ1ZmZlcmVkX2l0ZXJuZXh0LCAvKiB0cF9pdGVybmV4dCAqLworICAgIGJ1ZmZlcmVkcmVhZGVyX21ldGhvZHMsICAgICAvKiB0cF9tZXRob2RzICovCisgICAgYnVmZmVyZWRyZWFkZXJfbWVtYmVycywgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBidWZmZXJlZHJlYWRlcl9nZXRzZXQsICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgb2Zmc2V0b2YoYnVmZmVyZWQsIGRpY3QpLCAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgKGluaXRwcm9jKWJ1ZmZlcmVkcmVhZGVyX2luaXQsIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCit9OworDAorCisKK3N0YXRpYyBpbnQKK2NvbXBsYWluX2Fib3V0X21heF9idWZmZXJfc2l6ZSh2b2lkKQoreworICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgIm1heF9idWZmZXJfc2l6ZSBpcyBkZXByZWNhdGVkIiwgMSkgPCAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKK30KKworLyoKKyAqIGNsYXNzIEJ1ZmZlcmVkV3JpdGVyCisgKi8KK1B5RG9jX1NUUlZBUihidWZmZXJlZHdyaXRlcl9kb2MsCisgICAgIkEgYnVmZmVyIGZvciBhIHdyaXRlYWJsZSBzZXF1ZW50aWFsIFJhd0lPIG9iamVjdC5cbiIKKyAgICAiXG4iCisgICAgIlRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgQnVmZmVyZWRXcml0ZXIgZm9yIHRoZSBnaXZlbiB3cml0ZWFibGUgcmF3XG4iCisgICAgInN0cmVhbS4gSWYgdGhlIGJ1ZmZlcl9zaXplIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG9cbiIKKyAgICAiREVGQVVMVF9CVUZGRVJfU0laRS4gbWF4X2J1ZmZlcl9zaXplIGlzbid0IHVzZWQgYW55bW9yZS5cbiIKKyAgICApOworCitzdGF0aWMgdm9pZAorX2J1ZmZlcmVkd3JpdGVyX3Jlc2V0X2J1ZihidWZmZXJlZCAqc2VsZikKK3sKKyAgICBzZWxmLT53cml0ZV9wb3MgPSAwOworICAgIHNlbGYtPndyaXRlX2VuZCA9IC0xOworfQorCitzdGF0aWMgaW50CitidWZmZXJlZHdyaXRlcl9pbml0KGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgLyogVE9ETzogcHJvcGVybHkgZGVwcmVjYXRlIG1heF9idWZmZXJfc2l6ZSAqLworICAgIGNoYXIgKmt3bGlzdFtdID0geyJyYXciLCAiYnVmZmVyX3NpemUiLCAibWF4X2J1ZmZlcl9zaXplIiwgTlVMTH07CisgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSA9IERFRkFVTFRfQlVGRkVSX1NJWkU7CisgICAgUHlfc3NpemVfdCBtYXhfYnVmZmVyX3NpemUgPSAtMjM0OworICAgIFB5T2JqZWN0ICpyYXc7CisKKyAgICBzZWxmLT5vayA9IDA7CisgICAgc2VsZi0+ZGV0YWNoZWQgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98bm46QnVmZmVyZWRSZWFkZXIiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJhdywgJmJ1ZmZlcl9zaXplLCAmbWF4X2J1ZmZlcl9zaXplKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKG1heF9idWZmZXJfc2l6ZSAhPSAtMjM0ICYmICFjb21wbGFpbl9hYm91dF9tYXhfYnVmZmVyX3NpemUoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKF9QeUlPQmFzZV9jaGVja193cml0YWJsZShyYXcsIFB5X1RydWUpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIFB5X0NMRUFSKHNlbGYtPnJhdyk7CisgICAgUHlfSU5DUkVGKHJhdyk7CisgICAgc2VsZi0+cmF3ID0gcmF3OworICAgIHNlbGYtPnJlYWRhYmxlID0gMDsKKyAgICBzZWxmLT53cml0YWJsZSA9IDE7CisKKyAgICBzZWxmLT5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplOworICAgIGlmIChfYnVmZmVyZWRfaW5pdChzZWxmKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBfYnVmZmVyZWR3cml0ZXJfcmVzZXRfYnVmKHNlbGYpOworICAgIHNlbGYtPnBvcyA9IDA7CisKKyAgICBzZWxmLT5mYXN0X2Nsb3NlZF9jaGVja3MgPSAoUHlfVFlQRShzZWxmKSA9PSAmUHlCdWZmZXJlZFdyaXRlcl9UeXBlICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocmF3KSA9PSAmUHlGaWxlSU9fVHlwZSk7CisKKyAgICBzZWxmLT5vayA9IDE7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeV9zc2l6ZV90CitfYnVmZmVyZWR3cml0ZXJfcmF3X3dyaXRlKGJ1ZmZlcmVkICpzZWxmLCBjaGFyICpzdGFydCwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBQeU9iamVjdCAqbWVtb2JqLCAqcmVzOworICAgIFB5X3NzaXplX3QgbjsKKyAgICAvKiBOT1RFOiB0aGUgYnVmZmVyIG5lZWRuJ3QgYmUgcmVsZWFzZWQgYXMgaXRzIG9iamVjdCBpcyBOVUxMLiAqLworICAgIGlmIChQeUJ1ZmZlcl9GaWxsSW5mbygmYnVmLCBOVUxMLCBzdGFydCwgbGVuLCAxLCBQeUJVRl9DT05USUdfUk8pID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgbWVtb2JqID0gUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoJmJ1Zik7CisgICAgaWYgKG1lbW9iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyogTk9URTogUHlFcnJfU2V0RnJvbUVycm5vKCkgY2FsbHMgUHlFcnJfQ2hlY2tTaWduYWxzKCkgd2hlbiBFSU5UUgorICAgICAgIG9jY3VycyBzbyB3ZSBuZWVkbid0IGRvIGl0IG91cnNlbHZlcy4KKyAgICAgICBXZSB0aGVuIHJldHJ5IHdyaXRpbmcsIGlnbm9yaW5nIHRoZSBzaWduYWwgaWYgbm8gaGFuZGxlciBoYXMKKyAgICAgICByYWlzZWQgKHNlZSBpc3N1ZSAjMTA5NTYpLgorICAgICovCisgICAgZG8geworICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl93cml0ZSwgbWVtb2JqLCBOVUxMKTsKKyAgICB9IHdoaWxlIChyZXMgPT0gTlVMTCAmJiBfdHJhcF9laW50cigpKTsKKyAgICBQeV9ERUNSRUYobWVtb2JqKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBuID0gUHlOdW1iZXJfQXNTc2l6ZV90KHJlcywgUHlFeGNfVmFsdWVFcnJvcik7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgaWYgKG4gPCAwIHx8IG4gPiBsZW4pIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAicmF3IHdyaXRlKCkgcmV0dXJuZWQgaW52YWxpZCBsZW5ndGggJXpkICIKKyAgICAgICAgICAgICAgICAgICAgICIoc2hvdWxkIGhhdmUgYmVlbiBiZXR3ZWVuIDAgYW5kICV6ZCkiLCBuLCBsZW4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChuID4gMCAmJiBzZWxmLT5hYnNfcG9zICE9IC0xKQorICAgICAgICBzZWxmLT5hYnNfcG9zICs9IG47CisgICAgcmV0dXJuIG47Cit9CisKKy8qIGByZXN0b3JlX3Bvc2AgaXMgMSBpZiB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHJhdyBzdHJlYW0gcG9zaXRpb24gYXQKKyAgIHRoZSBlbmQsIDAgb3RoZXJ3aXNlLiAqLworc3RhdGljIFB5T2JqZWN0ICoKK19idWZmZXJlZHdyaXRlcl9mbHVzaF91bmxvY2tlZChidWZmZXJlZCAqc2VsZiwgaW50IHJlc3RvcmVfcG9zKQoreworICAgIFB5X3NzaXplX3Qgd3JpdHRlbiA9IDA7CisgICAgUHlfb2ZmX3QgbiwgcmV3aW5kOworCisgICAgaWYgKCFWQUxJRF9XUklURV9CVUZGRVIoc2VsZikgfHwgc2VsZi0+d3JpdGVfcG9zID09IHNlbGYtPndyaXRlX2VuZCkKKyAgICAgICAgZ290byBlbmQ7CisgICAgLyogRmlyc3QsIHJld2luZCAqLworICAgIHJld2luZCA9IFJBV19PRkZTRVQoc2VsZikgKyAoc2VsZi0+cG9zIC0gc2VsZi0+d3JpdGVfcG9zKTsKKyAgICBpZiAocmV3aW5kICE9IDApIHsKKyAgICAgICAgbiA9IF9idWZmZXJlZF9yYXdfc2VlayhzZWxmLCAtcmV3aW5kLCAxKTsKKyAgICAgICAgaWYgKG4gPCAwKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHNlbGYtPnJhd19wb3MgLT0gcmV3aW5kOworICAgIH0KKyAgICB3aGlsZSAoc2VsZi0+d3JpdGVfcG9zIDwgc2VsZi0+d3JpdGVfZW5kKSB7CisgICAgICAgIG4gPSBfYnVmZmVyZWR3cml0ZXJfcmF3X3dyaXRlKHNlbGYsCisgICAgICAgICAgICBzZWxmLT5idWZmZXIgKyBzZWxmLT53cml0ZV9wb3MsCisgICAgICAgICAgICBQeV9TQUZFX0RPV05DQVNUKHNlbGYtPndyaXRlX2VuZCAtIHNlbGYtPndyaXRlX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfb2ZmX3QsIFB5X3NzaXplX3QpKTsKKyAgICAgICAgaWYgKG4gPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgKncgPSBfYnVmZmVyZWRfY2hlY2tfYmxvY2tpbmdfZXJyb3IoKTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHNlbGYtPndyaXRlX3BvcyArPSAqdzsKKyAgICAgICAgICAgIHNlbGYtPnJhd19wb3MgPSBzZWxmLT53cml0ZV9wb3M7CisgICAgICAgICAgICB3cml0dGVuICs9ICp3OworICAgICAgICAgICAgKncgPSB3cml0dGVuOworICAgICAgICAgICAgLyogQWxyZWFkeSByZS1yYWlzZWQgKi8KKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgc2VsZi0+d3JpdGVfcG9zICs9IG47CisgICAgICAgIHNlbGYtPnJhd19wb3MgPSBzZWxmLT53cml0ZV9wb3M7CisgICAgICAgIHdyaXR0ZW4gKz0gUHlfU0FGRV9ET1dOQ0FTVChuLCBQeV9vZmZfdCwgUHlfc3NpemVfdCk7CisgICAgICAgIC8qIFBhcnRpYWwgd3JpdGVzIGNhbiByZXR1cm4gc3VjY2Vzc2Z1bGx5IHdoZW4gaW50ZXJydXB0ZWQgYnkgYQorICAgICAgICAgICBzaWduYWwgKHNlZSB3cml0ZSgyKSkuICBXZSBtdXN0IHJ1biBzaWduYWwgaGFuZGxlcnMgYmVmb3JlCisgICAgICAgICAgIGJsb2NraW5nIGFub3RoZXIgdGltZSwgcG9zc2libHkgaW5kZWZpbml0ZWx5LiAqLworICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAocmVzdG9yZV9wb3MpIHsKKyAgICAgICAgUHlfb2ZmX3QgZm9yd2FyZCA9IHJld2luZCAtIHdyaXR0ZW47CisgICAgICAgIGlmIChmb3J3YXJkICE9IDApIHsKKyAgICAgICAgICAgIG4gPSBfYnVmZmVyZWRfcmF3X3NlZWsoc2VsZiwgZm9yd2FyZCwgMSk7CisgICAgICAgICAgICBpZiAobiA8IDApIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VsZi0+cmF3X3BvcyArPSBmb3J3YXJkOworICAgICAgICB9CisgICAgfQorICAgIF9idWZmZXJlZHdyaXRlcl9yZXNldF9idWYoc2VsZik7CisKK2VuZDoKKyAgICBQeV9SRVRVUk5fTk9ORTsKKworZXJyb3I6CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHdyaXRlcl93cml0ZShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBQeV9zc2l6ZV90IHdyaXR0ZW4sIGF2YWlsLCByZW1haW5pbmc7CisgICAgUHlfb2ZmX3Qgb2Zmc2V0OworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqOndyaXRlIiwgJmJ1ZikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKElTX0NMT1NFRChzZWxmKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIndyaXRlIHRvIGNsb3NlZCBmaWxlIik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghRU5URVJfQlVGRkVSRUQoc2VsZikpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRmFzdCBwYXRoOiB0aGUgZGF0YSB0byB3cml0ZSBjYW4gYmUgZnVsbHkgYnVmZmVyZWQuICovCisgICAgaWYgKCFWQUxJRF9SRUFEX0JVRkZFUihzZWxmKSAmJiAhVkFMSURfV1JJVEVfQlVGRkVSKHNlbGYpKSB7CisgICAgICAgIHNlbGYtPnBvcyA9IDA7CisgICAgICAgIHNlbGYtPnJhd19wb3MgPSAwOworICAgIH0KKyAgICBhdmFpbCA9IFB5X1NBRkVfRE9XTkNBU1Qoc2VsZi0+YnVmZmVyX3NpemUgLSBzZWxmLT5wb3MsIFB5X29mZl90LCBQeV9zc2l6ZV90KTsKKyAgICBpZiAoYnVmLmxlbiA8PSBhdmFpbCkgeworICAgICAgICBtZW1jcHkoc2VsZi0+YnVmZmVyICsgc2VsZi0+cG9zLCBidWYuYnVmLCBidWYubGVuKTsKKyAgICAgICAgaWYgKCFWQUxJRF9XUklURV9CVUZGRVIoc2VsZikpIHsKKyAgICAgICAgICAgIHNlbGYtPndyaXRlX3BvcyA9IHNlbGYtPnBvczsKKyAgICAgICAgfQorICAgICAgICBBREpVU1RfUE9TSVRJT04oc2VsZiwgc2VsZi0+cG9zICsgYnVmLmxlbik7CisgICAgICAgIGlmIChzZWxmLT5wb3MgPiBzZWxmLT53cml0ZV9lbmQpCisgICAgICAgICAgICBzZWxmLT53cml0ZV9lbmQgPSBzZWxmLT5wb3M7CisgICAgICAgIHdyaXR0ZW4gPSBidWYubGVuOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICAvKiBGaXJzdCB3cml0ZSB0aGUgY3VycmVudCBidWZmZXIgKi8KKyAgICByZXMgPSBfYnVmZmVyZWR3cml0ZXJfZmx1c2hfdW5sb2NrZWQoc2VsZiwgMCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKSB7CisgICAgICAgIFB5X3NzaXplX3QgKncgPSBfYnVmZmVyZWRfY2hlY2tfYmxvY2tpbmdfZXJyb3IoKTsKKyAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChzZWxmLT5yZWFkYWJsZSkKKyAgICAgICAgICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CisgICAgICAgIC8qIE1ha2Ugc29tZSBwbGFjZSBieSBzaGlmdGluZyB0aGUgYnVmZmVyLiAqLworICAgICAgICBhc3NlcnQoVkFMSURfV1JJVEVfQlVGRkVSKHNlbGYpKTsKKyAgICAgICAgbWVtbW92ZShzZWxmLT5idWZmZXIsIHNlbGYtPmJ1ZmZlciArIHNlbGYtPndyaXRlX3BvcywKKyAgICAgICAgICAgICAgICBQeV9TQUZFX0RPV05DQVNUKHNlbGYtPndyaXRlX2VuZCAtIHNlbGYtPndyaXRlX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X29mZl90LCBQeV9zc2l6ZV90KSk7CisgICAgICAgIHNlbGYtPndyaXRlX2VuZCAtPSBzZWxmLT53cml0ZV9wb3M7CisgICAgICAgIHNlbGYtPnJhd19wb3MgLT0gc2VsZi0+d3JpdGVfcG9zOworICAgICAgICBzZWxmLT5wb3MgLT0gc2VsZi0+d3JpdGVfcG9zOworICAgICAgICBzZWxmLT53cml0ZV9wb3MgPSAwOworICAgICAgICBhdmFpbCA9IFB5X1NBRkVfRE9XTkNBU1Qoc2VsZi0+YnVmZmVyX3NpemUgLSBzZWxmLT53cml0ZV9lbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9vZmZfdCwgUHlfc3NpemVfdCk7CisgICAgICAgIGlmIChidWYubGVuIDw9IGF2YWlsKSB7CisgICAgICAgICAgICAvKiBFdmVyeXRoaW5nIGNhbiBiZSBidWZmZXJlZCAqLworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIG1lbWNweShzZWxmLT5idWZmZXIgKyBzZWxmLT53cml0ZV9lbmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworICAgICAgICAgICAgc2VsZi0+d3JpdGVfZW5kICs9IGJ1Zi5sZW47CisgICAgICAgICAgICB3cml0dGVuID0gYnVmLmxlbjsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisgICAgICAgIC8qIEJ1ZmZlciBhcyBtdWNoIGFzIHBvc3NpYmxlLiAqLworICAgICAgICBtZW1jcHkoc2VsZi0+YnVmZmVyICsgc2VsZi0+d3JpdGVfZW5kLCBidWYuYnVmLCBhdmFpbCk7CisgICAgICAgIHNlbGYtPndyaXRlX2VuZCArPSBhdmFpbDsKKyAgICAgICAgLyogQWxyZWFkeSByZS1yYWlzZWQgKi8KKyAgICAgICAgKncgPSBhdmFpbDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgUHlfQ0xFQVIocmVzKTsKKworICAgIC8qIEFkanVzdCB0aGUgcmF3IHN0cmVhbSBwb3NpdGlvbiBpZiBpdCBpcyBhd2F5IGZyb20gdGhlIGxvZ2ljYWwgc3RyZWFtCisgICAgICAgcG9zaXRpb24uIFRoaXMgaGFwcGVucyBpZiB0aGUgcmVhZCBidWZmZXIgaGFzIGJlZW4gZmlsbGVkIGJ1dCBub3QKKyAgICAgICBtb2RpZmllZCAoYW5kIHRoZXJlZm9yZSBfYnVmZmVyZWR3cml0ZXJfZmx1c2hfdW5sb2NrZWQoKSBkaWRuJ3QgcmV3aW5kCisgICAgICAgdGhlIHJhdyBzdHJlYW0gYnkgaXRzZWxmKS4KKyAgICAgICBGaXhlcyBpc3N1ZSAjNjYyOS4KKyAgICAqLworICAgIG9mZnNldCA9IFJBV19PRkZTRVQoc2VsZik7CisgICAgaWYgKG9mZnNldCAhPSAwKSB7CisgICAgICAgIGlmIChfYnVmZmVyZWRfcmF3X3NlZWsoc2VsZiwgLW9mZnNldCwgMSkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgc2VsZi0+cmF3X3BvcyAtPSBvZmZzZXQ7CisgICAgfQorCisgICAgLyogVGhlbiB3cml0ZSBidWYgaXRzZWxmLiBBdCB0aGlzIHBvaW50IHRoZSBidWZmZXIgaGFzIGJlZW4gZW1wdGllZC4gKi8KKyAgICByZW1haW5pbmcgPSBidWYubGVuOworICAgIHdyaXR0ZW4gPSAwOworICAgIHdoaWxlIChyZW1haW5pbmcgPiBzZWxmLT5idWZmZXJfc2l6ZSkgeworICAgICAgICBQeV9zc2l6ZV90IG4gPSBfYnVmZmVyZWR3cml0ZXJfcmF3X3dyaXRlKAorICAgICAgICAgICAgc2VsZiwgKGNoYXIgKikgYnVmLmJ1ZiArIHdyaXR0ZW4sIGJ1Zi5sZW4gLSB3cml0dGVuKTsKKyAgICAgICAgaWYgKG4gPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgKncgPSBfYnVmZmVyZWRfY2hlY2tfYmxvY2tpbmdfZXJyb3IoKTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHdyaXR0ZW4gKz0gKnc7CisgICAgICAgICAgICByZW1haW5pbmcgLT0gKnc7CisgICAgICAgICAgICBpZiAocmVtYWluaW5nID4gc2VsZi0+YnVmZmVyX3NpemUpIHsKKyAgICAgICAgICAgICAgICAvKiBDYW4ndCBidWZmZXIgZXZlcnl0aGluZywgc3RpbGwgYnVmZmVyIGFzIG11Y2ggYXMgcG9zc2libGUgKi8KKyAgICAgICAgICAgICAgICBtZW1jcHkoc2VsZi0+YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBidWYuYnVmICsgd3JpdHRlbiwgc2VsZi0+YnVmZmVyX3NpemUpOworICAgICAgICAgICAgICAgIHNlbGYtPnJhd19wb3MgPSAwOworICAgICAgICAgICAgICAgIEFESlVTVF9QT1NJVElPTihzZWxmLCBzZWxmLT5idWZmZXJfc2l6ZSk7CisgICAgICAgICAgICAgICAgc2VsZi0+d3JpdGVfZW5kID0gc2VsZi0+YnVmZmVyX3NpemU7CisgICAgICAgICAgICAgICAgKncgPSB3cml0dGVuICsgc2VsZi0+YnVmZmVyX3NpemU7CisgICAgICAgICAgICAgICAgLyogQWxyZWFkeSByZS1yYWlzZWQgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHdyaXR0ZW4gKz0gbjsKKyAgICAgICAgcmVtYWluaW5nIC09IG47CisgICAgICAgIC8qIFBhcnRpYWwgd3JpdGVzIGNhbiByZXR1cm4gc3VjY2Vzc2Z1bGx5IHdoZW4gaW50ZXJydXB0ZWQgYnkgYQorICAgICAgICAgICBzaWduYWwgKHNlZSB3cml0ZSgyKSkuICBXZSBtdXN0IHJ1biBzaWduYWwgaGFuZGxlcnMgYmVmb3JlCisgICAgICAgICAgIGJsb2NraW5nIGFub3RoZXIgdGltZSwgcG9zc2libHkgaW5kZWZpbml0ZWx5LiAqLworICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgaWYgKHNlbGYtPnJlYWRhYmxlKQorICAgICAgICBfYnVmZmVyZWRyZWFkZXJfcmVzZXRfYnVmKHNlbGYpOworICAgIGlmIChyZW1haW5pbmcgPiAwKSB7CisgICAgICAgIG1lbWNweShzZWxmLT5idWZmZXIsIChjaGFyICopIGJ1Zi5idWYgKyB3cml0dGVuLCByZW1haW5pbmcpOworICAgICAgICB3cml0dGVuICs9IHJlbWFpbmluZzsKKyAgICB9CisgICAgc2VsZi0+d3JpdGVfcG9zID0gMDsKKyAgICAvKiBUT0RPOiBzYW5pdHkgY2hlY2sgKHJlbWFpbmluZyA+PSAwKSAqLworICAgIHNlbGYtPndyaXRlX2VuZCA9IHJlbWFpbmluZzsKKyAgICBBREpVU1RfUE9TSVRJT04oc2VsZiwgcmVtYWluaW5nKTsKKyAgICBzZWxmLT5yYXdfcG9zID0gMDsKKworZW5kOgorICAgIHJlcyA9IFB5TG9uZ19Gcm9tU3NpemVfdCh3cml0dGVuKTsKKworZXJyb3I6CisgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBidWZmZXJlZHdyaXRlcl9tZXRob2RzW10gPSB7CisgICAgLyogQnVmZmVyZWRJT01peGluIG1ldGhvZHMgKi8KKyAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2Nsb3NlLCBNRVRIX05PQVJHU30sCisgICAgeyJkZXRhY2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZGV0YWNoLCBNRVRIX05PQVJHU30sCisgICAgeyJzZWVrYWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9zZWVrYWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsicmVhZGFibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZGFibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7IndyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3dyaXRhYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJmaWxlbm8iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZmlsZW5vLCBNRVRIX05PQVJHU30sCisgICAgeyJpc2F0dHkiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfaXNhdHR5LCBNRVRIX05PQVJHU30sCisKKyAgICB7IndyaXRlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkd3JpdGVyX3dyaXRlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidHJ1bmNhdGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfdHJ1bmNhdGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9mbHVzaCwgTUVUSF9OT0FSR1N9LAorICAgIHsic2VlayIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9zZWVrLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidGVsbCIsIChQeUNGdW5jdGlvbilidWZmZXJlZF90ZWxsLCBNRVRIX05PQVJHU30sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWR3cml0ZXJfbWVtYmVyc1tdID0geworICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgYnVmZmVyZWR3cml0ZXJfZ2V0c2V0W10gPSB7CisgICAgeyJjbG9zZWQiLCAoZ2V0dGVyKWJ1ZmZlcmVkX2Nsb3NlZF9nZXQsIE5VTEwsIE5VTEx9LAorICAgIHsibmFtZSIsIChnZXR0ZXIpYnVmZmVyZWRfbmFtZV9nZXQsIE5VTEwsIE5VTEx9LAorICAgIHsibW9kZSIsIChnZXR0ZXIpYnVmZmVyZWRfbW9kZV9nZXQsIE5VTEwsIE5VTEx9LAorICAgIHtOVUxMfQorfTsKKworCitQeVR5cGVPYmplY3QgUHlCdWZmZXJlZFdyaXRlcl9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uQnVmZmVyZWRXcml0ZXIiLCAgICAgICAvKnRwX25hbWUqLworICAgIHNpemVvZihidWZmZXJlZCksICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIChkZXN0cnVjdG9yKWJ1ZmZlcmVkX2RlYWxsb2MsICAgICAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlICovCisgICAgKHJlcHJmdW5jKWJ1ZmZlcmVkX3JlcHIsICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgYnVmZmVyZWR3cml0ZXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgb2Zmc2V0b2YoYnVmZmVyZWQsIHdlYWtyZWZsaXN0KSwgLyp0cF93ZWFrbGlzdG9mZnNldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBidWZmZXJlZHdyaXRlcl9tZXRob2RzLCAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGJ1ZmZlcmVkd3JpdGVyX21lbWJlcnMsICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgYnVmZmVyZWR3cml0ZXJfZ2V0c2V0LCAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCBkaWN0KSwgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgKGluaXRwcm9jKWJ1ZmZlcmVkd3JpdGVyX2luaXQsIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCit9OworDAorCisKKy8qCisgKiBCdWZmZXJlZFJXUGFpcgorICovCisKK1B5RG9jX1NUUlZBUihidWZmZXJlZHJ3cGFpcl9kb2MsCisgICAgIkEgYnVmZmVyZWQgcmVhZGVyIGFuZCB3cml0ZXIgb2JqZWN0IHRvZ2V0aGVyLlxuIgorICAgICJcbiIKKyAgICAiQSBidWZmZXJlZCByZWFkZXIgb2JqZWN0IGFuZCBidWZmZXJlZCB3cml0ZXIgb2JqZWN0IHB1dCB0b2dldGhlciB0b1xuIgorICAgICJmb3JtIGEgc2VxdWVudGlhbCBJTyBvYmplY3QgdGhhdCBjYW4gcmVhZCBhbmQgd3JpdGUuIFRoaXMgaXMgdHlwaWNhbGx5XG4iCisgICAgInVzZWQgd2l0aCBhIHNvY2tldCBvciB0d28td2F5IHBpcGUuXG4iCisgICAgIlxuIgorICAgICJyZWFkZXIgYW5kIHdyaXRlciBhcmUgUmF3SU9CYXNlIG9iamVjdHMgdGhhdCBhcmUgcmVhZGFibGUgYW5kXG4iCisgICAgIndyaXRlYWJsZSByZXNwZWN0aXZlbHkuIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBvbWl0dGVkIGl0IGRlZmF1bHRzIHRvXG4iCisgICAgIkRFRkFVTFRfQlVGRkVSX1NJWkUuXG4iCisgICAgKTsKKworLyogWFhYIFRoZSB1c2VmdWxuZXNzIG9mIHRoaXMgKGNvbXBhcmVkIHRvIGhhdmluZyB0d28gc2VwYXJhdGUgSU8gb2JqZWN0cykgaXMKKyAqIHF1ZXN0aW9uYWJsZS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIGJ1ZmZlcmVkICpyZWFkZXI7CisgICAgYnVmZmVyZWQgKndyaXRlcjsKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7Cit9IHJ3cGFpcjsKKworc3RhdGljIGludAorYnVmZmVyZWRyd3BhaXJfaW5pdChyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBQeU9iamVjdCAqcmVhZGVyLCAqd3JpdGVyOworICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBERUZBVUxUX0JVRkZFUl9TSVpFOworICAgIFB5X3NzaXplX3QgbWF4X2J1ZmZlcl9zaXplID0gLTIzNDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT098bm46QnVmZmVyZWRSV1BhaXIiLCAmcmVhZGVyLCAmd3JpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmZmVyX3NpemUsICZtYXhfYnVmZmVyX3NpemUpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAobWF4X2J1ZmZlcl9zaXplICE9IC0yMzQgJiYgIWNvbXBsYWluX2Fib3V0X21heF9idWZmZXJfc2l6ZSgpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX3JlYWRhYmxlKHJlYWRlciwgUHlfVHJ1ZSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfd3JpdGFibGUod3JpdGVyLCBQeV9UcnVlKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzZWxmLT5yZWFkZXIgPSAoYnVmZmVyZWQgKikgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKAorICAgICAgICAgICAgKFB5T2JqZWN0ICopICZQeUJ1ZmZlcmVkUmVhZGVyX1R5cGUsICJPbiIsIHJlYWRlciwgYnVmZmVyX3NpemUpOworICAgIGlmIChzZWxmLT5yZWFkZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc2VsZi0+d3JpdGVyID0gKGJ1ZmZlcmVkICopIFB5T2JqZWN0X0NhbGxGdW5jdGlvbigKKyAgICAgICAgICAgIChQeU9iamVjdCAqKSAmUHlCdWZmZXJlZFdyaXRlcl9UeXBlLCAiT24iLCB3cml0ZXIsIGJ1ZmZlcl9zaXplKTsKKyAgICBpZiAoc2VsZi0+d3JpdGVyID09IE5VTEwpIHsKKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZGVyKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitidWZmZXJlZHJ3cGFpcl90cmF2ZXJzZShyd3BhaXIgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitidWZmZXJlZHJ3cGFpcl9jbGVhcihyd3BhaXIgKnNlbGYpCit7CisgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZGVyKTsKKyAgICBQeV9DTEVBUihzZWxmLT53cml0ZXIpOworICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnVmZmVyZWRyd3BhaXJfZGVhbGxvYyhyd3BhaXIgKnNlbGYpCit7CisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CisgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZGVyKTsKKyAgICBQeV9DTEVBUihzZWxmLT53cml0ZXIpOworICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopIHNlbGYpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ZvcndhcmRfY2FsbChidWZmZXJlZCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmZ1bmMgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOworICAgIFB5T2JqZWN0ICpyZXQ7CisKKyAgICBpZiAoZnVuYyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZnVuYywgYXJncyk7CisgICAgUHlfREVDUkVGKGZ1bmMpOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHJ3cGFpcl9yZWFkKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+cmVhZGVyLCAicmVhZCIsIGFyZ3MpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRyd3BhaXJfcGVlayhyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfZm9yd2FyZF9jYWxsKHNlbGYtPnJlYWRlciwgInBlZWsiLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX3JlYWQxKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+cmVhZGVyLCAicmVhZDEiLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX3JlYWRpbnRvKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+cmVhZGVyLCAicmVhZGludG8iLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX3dyaXRlKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+d3JpdGVyLCAid3JpdGUiLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX2ZsdXNoKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+d3JpdGVyLCAiZmx1c2giLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX3JlYWRhYmxlKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+cmVhZGVyLCAicmVhZGFibGUiLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX3dyaXRhYmxlKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+d3JpdGVyLCAid3JpdGFibGUiLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX2Nsb3NlKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldCA9IF9mb3J3YXJkX2NhbGwoc2VsZi0+d3JpdGVyLCAiY2xvc2UiLCBhcmdzKTsKKyAgICBpZiAocmV0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihyZXQpOworCisgICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+cmVhZGVyLCAiY2xvc2UiLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX2lzYXR0eShyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXQgPSBfZm9yd2FyZF9jYWxsKHNlbGYtPndyaXRlciwgImlzYXR0eSIsIGFyZ3MpOworCisgICAgaWYgKHJldCAhPSBQeV9GYWxzZSkgeworICAgICAgICAvKiBlaXRoZXIgVHJ1ZSBvciBleGNlcHRpb24gKi8KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgUHlfREVDUkVGKHJldCk7CisKKyAgICByZXR1cm4gX2ZvcndhcmRfY2FsbChzZWxmLT5yZWFkZXIsICJpc2F0dHkiLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX2Nsb3NlZF9nZXQocndwYWlyICpzZWxmLCB2b2lkICpjb250ZXh0KQoreworICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyKChQeU9iamVjdCAqKSBzZWxmLT53cml0ZXIsIF9QeUlPX3N0cl9jbG9zZWQpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgYnVmZmVyZWRyd3BhaXJfbWV0aG9kc1tdID0geworICAgIHsicmVhZCIsIChQeUNGdW5jdGlvbilidWZmZXJlZHJ3cGFpcl9yZWFkLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicGVlayIsIChQeUNGdW5jdGlvbilidWZmZXJlZHJ3cGFpcl9wZWVrLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVhZDEiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfcmVhZDEsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZWFkaW50byIsIChQeUNGdW5jdGlvbilidWZmZXJlZHJ3cGFpcl9yZWFkaW50bywgTUVUSF9WQVJBUkdTfSwKKworICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfd3JpdGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilidWZmZXJlZHJ3cGFpcl9mbHVzaCwgTUVUSF9OT0FSR1N9LAorCisgICAgeyJyZWFkYWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZHJ3cGFpcl9yZWFkYWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsid3JpdGFibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfd3JpdGFibGUsIE1FVEhfTk9BUkdTfSwKKworICAgIHsiY2xvc2UiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfY2xvc2UsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImlzYXR0eSIsIChQeUNGdW5jdGlvbilidWZmZXJlZHJ3cGFpcl9pc2F0dHksIE1FVEhfTk9BUkdTfSwKKworICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIGJ1ZmZlcmVkcndwYWlyX2dldHNldFtdID0geworICAgIHsiY2xvc2VkIiwgKGdldHRlcilidWZmZXJlZHJ3cGFpcl9jbG9zZWRfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7TlVMTH0KK307CisKK1B5VHlwZU9iamVjdCBQeUJ1ZmZlcmVkUldQYWlyX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIl9pby5CdWZmZXJlZFJXUGFpciIsICAgICAgIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKHJ3cGFpciksICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAoZGVzdHJ1Y3RvcilidWZmZXJlZHJ3cGFpcl9kZWFsbG9jLCAgICAgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qIHRwX2ZsYWdzICovCisgICAgYnVmZmVyZWRyd3BhaXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRyd3BhaXJfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpYnVmZmVyZWRyd3BhaXJfY2xlYXIsIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgb2Zmc2V0b2YocndwYWlyLCB3ZWFrcmVmbGlzdCksIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgYnVmZmVyZWRyd3BhaXJfbWV0aG9kcywgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGJ1ZmZlcmVkcndwYWlyX2dldHNldCwgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICBvZmZzZXRvZihyd3BhaXIsIGRpY3QpLCAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIChpbml0cHJvYylidWZmZXJlZHJ3cGFpcl9pbml0LCAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKKwwKKworCisvKgorICogQnVmZmVyZWRSYW5kb20KKyAqLworCitQeURvY19TVFJWQVIoYnVmZmVyZWRyYW5kb21fZG9jLAorICAgICJBIGJ1ZmZlcmVkIGludGVyZmFjZSB0byByYW5kb20gYWNjZXNzIHN0cmVhbXMuXG4iCisgICAgIlxuIgorICAgICJUaGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIHJlYWRlciBhbmQgd3JpdGVyIGZvciBhIHNlZWthYmxlIHN0cmVhbSxcbiIKKyAgICAicmF3LCBnaXZlbiBpbiB0aGUgZmlyc3QgYXJndW1lbnQuIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBvbWl0dGVkIGl0XG4iCisgICAgImRlZmF1bHRzIHRvIERFRkFVTFRfQlVGRkVSX1NJWkUuIG1heF9idWZmZXJfc2l6ZSBpc24ndCB1c2VkIGFueW1vcmUuXG4iCisgICAgKTsKKworc3RhdGljIGludAorYnVmZmVyZWRyYW5kb21faW5pdChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJyYXciLCAiYnVmZmVyX3NpemUiLCAibWF4X2J1ZmZlcl9zaXplIiwgTlVMTH07CisgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSA9IERFRkFVTFRfQlVGRkVSX1NJWkU7CisgICAgUHlfc3NpemVfdCBtYXhfYnVmZmVyX3NpemUgPSAtMjM0OworICAgIFB5T2JqZWN0ICpyYXc7CisKKyAgICBzZWxmLT5vayA9IDA7CisgICAgc2VsZi0+ZGV0YWNoZWQgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98bm46QnVmZmVyZWRSZWFkZXIiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJhdywgJmJ1ZmZlcl9zaXplLCAmbWF4X2J1ZmZlcl9zaXplKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKG1heF9idWZmZXJfc2l6ZSAhPSAtMjM0ICYmICFjb21wbGFpbl9hYm91dF9tYXhfYnVmZmVyX3NpemUoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKF9QeUlPQmFzZV9jaGVja19zZWVrYWJsZShyYXcsIFB5X1RydWUpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX3JlYWRhYmxlKHJhdywgUHlfVHJ1ZSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfd3JpdGFibGUocmF3LCBQeV9UcnVlKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBQeV9DTEVBUihzZWxmLT5yYXcpOworICAgIFB5X0lOQ1JFRihyYXcpOworICAgIHNlbGYtPnJhdyA9IHJhdzsKKyAgICBzZWxmLT5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplOworICAgIHNlbGYtPnJlYWRhYmxlID0gMTsKKyAgICBzZWxmLT53cml0YWJsZSA9IDE7CisKKyAgICBpZiAoX2J1ZmZlcmVkX2luaXQoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgX2J1ZmZlcmVkcmVhZGVyX3Jlc2V0X2J1ZihzZWxmKTsKKyAgICBfYnVmZmVyZWR3cml0ZXJfcmVzZXRfYnVmKHNlbGYpOworICAgIHNlbGYtPnBvcyA9IDA7CisKKyAgICBzZWxmLT5mYXN0X2Nsb3NlZF9jaGVja3MgPSAoUHlfVFlQRShzZWxmKSA9PSAmUHlCdWZmZXJlZFJhbmRvbV9UeXBlICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocmF3KSA9PSAmUHlGaWxlSU9fVHlwZSk7CisKKyAgICBzZWxmLT5vayA9IDE7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBidWZmZXJlZHJhbmRvbV9tZXRob2RzW10gPSB7CisgICAgLyogQnVmZmVyZWRJT01peGluIG1ldGhvZHMgKi8KKyAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2Nsb3NlLCBNRVRIX05PQVJHU30sCisgICAgeyJkZXRhY2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZGV0YWNoLCBNRVRIX05PQVJHU30sCisgICAgeyJzZWVrYWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9zZWVrYWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsicmVhZGFibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZGFibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7IndyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3dyaXRhYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJmaWxlbm8iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZmlsZW5vLCBNRVRIX05PQVJHU30sCisgICAgeyJpc2F0dHkiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfaXNhdHR5LCBNRVRIX05PQVJHU30sCisKKyAgICB7ImZsdXNoIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2ZsdXNoLCBNRVRIX05PQVJHU30sCisKKyAgICB7InNlZWsiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2VlaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRlbGwiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfdGVsbCwgTUVUSF9OT0FSR1N9LAorICAgIHsidHJ1bmNhdGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfdHJ1bmNhdGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZWFkIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZWFkMSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9yZWFkMSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlYWRpbnRvIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWRpbnRvLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVhZGxpbmUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZGxpbmUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJwZWVrIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3BlZWssIE1FVEhfVkFSQVJHU30sCisgICAgeyJ3cml0ZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZHdyaXRlcl93cml0ZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHJhbmRvbV9tZW1iZXJzW10gPSB7CisgICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBQeUdldFNldERlZiBidWZmZXJlZHJhbmRvbV9nZXRzZXRbXSA9IHsKKyAgICB7ImNsb3NlZCIsIChnZXR0ZXIpYnVmZmVyZWRfY2xvc2VkX2dldCwgTlVMTCwgTlVMTH0sCisgICAgeyJuYW1lIiwgKGdldHRlcilidWZmZXJlZF9uYW1lX2dldCwgTlVMTCwgTlVMTH0sCisgICAgeyJtb2RlIiwgKGdldHRlcilidWZmZXJlZF9tb2RlX2dldCwgTlVMTCwgTlVMTH0sCisgICAge05VTEx9Cit9OworCisKK1B5VHlwZU9iamVjdCBQeUJ1ZmZlcmVkUmFuZG9tX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIl9pby5CdWZmZXJlZFJhbmRvbSIsICAgICAgIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKGJ1ZmZlcmVkKSwgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCisgICAgKGRlc3RydWN0b3IpYnVmZmVyZWRfZGVhbGxvYywgICAgIC8qdHBfZGVhbGxvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUgKi8KKyAgICAocmVwcmZ1bmMpYnVmZmVyZWRfcmVwciwgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KKyAgICBidWZmZXJlZHJhbmRvbV9kb2MsICAgICAgICAgLyogdHBfZG9jICovCisgICAgKHRyYXZlcnNlcHJvYylidWZmZXJlZF90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSlidWZmZXJlZF9jbGVhciwgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBvZmZzZXRvZihidWZmZXJlZCwgd2Vha3JlZmxpc3QpLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIChpdGVybmV4dGZ1bmMpYnVmZmVyZWRfaXRlcm5leHQsIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgYnVmZmVyZWRyYW5kb21fbWV0aG9kcywgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBidWZmZXJlZHJhbmRvbV9tZW1iZXJzLCAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGJ1ZmZlcmVkcmFuZG9tX2dldHNldCwgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgb2Zmc2V0b2YoYnVmZmVyZWQsIGRpY3QpLCAvKnRwX2RpY3RvZmZzZXQqLworICAgIChpbml0cHJvYylidWZmZXJlZHJhbmRvbV9pbml0LCAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fYnl0ZXNpby5jIGIvTW9kdWxlcy9faW8vYnl0ZXNpby5jCnNpbWlsYXJpdHkgaW5kZXggNjklCnJlbmFtZSBmcm9tIE1vZHVsZXMvX2J5dGVzaW8uYwpyZW5hbWUgdG8gTW9kdWxlcy9faW8vYnl0ZXNpby5jCmluZGV4IGUzNjlmODEuLjUxZmFkMjEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2J5dGVzaW8uYworKysgYi9Nb2R1bGVzL19pby9ieXRlc2lvLmMKQEAgLTEsNCArMSw2IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiICAgICAgIC8qIGZvciBvZmZzZXRvZigpICovCisjaW5jbHVkZSAiX2lvbW9kdWxlLmgiCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECkBAIC02LDcgKzgsOSBAQAogICAgIFB5X3NzaXplX3QgcG9zOwogICAgIFB5X3NzaXplX3Qgc3RyaW5nX3NpemU7CiAgICAgc2l6ZV90IGJ1Zl9zaXplOwotfSBCeXRlc0lPT2JqZWN0OworICAgIFB5T2JqZWN0ICpkaWN0OworICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKK30gYnl0ZXNpbzsKIAogI2RlZmluZSBDSEVDS19DTE9TRUQoc2VsZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICgoc2VsZiktPmJ1ZiA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTksNyArMjMsNyBAQAogICAgb2JqZWN0LiBSZXR1cm5zIHRoZSBsZW5ndGggYmV0d2VlbiB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUKICAgIG5leHQgbmV3bGluZSBjaGFyYWN0ZXIuICovCiBzdGF0aWMgUHlfc3NpemVfdAotZ2V0X2xpbmUoQnl0ZXNJT09iamVjdCAqc2VsZiwgY2hhciAqKm91dHB1dCkKK2dldF9saW5lKGJ5dGVzaW8gKnNlbGYsIGNoYXIgKipvdXRwdXQpCiB7CiAgICAgY2hhciAqbjsKICAgICBjb25zdCBjaGFyICpzdHJfZW5kOwpAQCAtNTIsNyArNTYsNyBAQAogICAgVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlIHRoYXQgdGhlICdzaXplJyBhcmd1bWVudCBpcyBub24tbmVnYXRpdmUuICBSZXR1cm5zCiAgICAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4gKi8KIHN0YXRpYyBpbnQKLXJlc2l6ZV9idWZmZXIoQnl0ZXNJT09iamVjdCAqc2VsZiwgc2l6ZV90IHNpemUpCityZXNpemVfYnVmZmVyKGJ5dGVzaW8gKnNlbGYsIHNpemVfdCBzaXplKQogewogICAgIC8qIEhlcmUsIHVuc2lnbmVkIHR5cGVzIGFyZSB1c2VkIHRvIGF2b2lkIGRlYWxpbmcgd2l0aCBzaWduZWQgaW50ZWdlcgogICAgICAgIG92ZXJmbG93LCB3aGljaCBpcyB1bmRlZmluZWQgaW4gQy4gKi8KQEAgLTEwNCw3ICsxMDgsNyBAQAogLyogSW50ZXJuYWwgcm91dGluZSBmb3Igd3JpdGluZyBhIHN0cmluZyBvZiBieXRlcyB0byB0aGUgYnVmZmVyIG9mIGEgQnl0ZXNJTwogICAgb2JqZWN0LiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JvdGUsIG9yIC0xIG9uIGVycm9yLiAqLwogc3RhdGljIFB5X3NzaXplX3QKLXdyaXRlX2J5dGVzKEJ5dGVzSU9PYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKmJ5dGVzLCBQeV9zc2l6ZV90IGxlbikKK3dyaXRlX2J5dGVzKGJ5dGVzaW8gKnNlbGYsIGNvbnN0IGNoYXIgKmJ5dGVzLCBQeV9zc2l6ZV90IGxlbikKIHsKICAgICBhc3NlcnQoc2VsZi0+YnVmICE9IE5VTEwpOwogICAgIGFzc2VydChzZWxmLT5wb3MgPj0gMCk7CkBAIC0xNDIsMTcgKzE0NiwxOSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19nZXRfY2xvc2VkKEJ5dGVzSU9PYmplY3QgKnNlbGYpCitieXRlc2lvX2dldF9jbG9zZWQoYnl0ZXNpbyAqc2VsZikKIHsKLSAgICBpZiAoc2VsZi0+YnVmID09IE5VTEwpCisgICAgaWYgKHNlbGYtPmJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwotICAgIGVsc2UKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKKyAgICB9CiB9CiAKIC8qIEdlbmVyaWMgZ2V0dGVyIGZvciB0aGUgd3JpdGFibGUsIHJlYWRhYmxlIGFuZCBzZWVrYWJsZSBwcm9wZXJ0aWVzICovCiBzdGF0aWMgUHlPYmplY3QgKgotcmV0dXJuX3RydWUoQnl0ZXNJT09iamVjdCAqc2VsZikKK3JldHVybl90cnVlKGJ5dGVzaW8gKnNlbGYpCiB7CiAgICAgUHlfUkVUVVJOX1RSVUU7CiB9CkBAIC0xNjEsNyArMTY3LDcgQEAKICJmbHVzaCgpIC0+IE5vbmUuICBEb2VzIG5vdGhpbmcuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX2ZsdXNoKEJ5dGVzSU9PYmplY3QgKnNlbGYpCitieXRlc2lvX2ZsdXNoKGJ5dGVzaW8gKnNlbGYpCiB7CiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMTczLDEwICsxNzksMTAgQEAKICJSZXRyaWV2ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBCeXRlc0lPIG9iamVjdC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fZ2V0dmFsdWUoQnl0ZXNJT09iamVjdCAqc2VsZikKK2J5dGVzaW9fZ2V0dmFsdWUoYnl0ZXNpbyAqc2VsZikKIHsKICAgICBDSEVDS19DTE9TRUQoc2VsZik7Ci0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPmJ1Ziwgc2VsZi0+c3RyaW5nX3NpemUpOworICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPmJ1Ziwgc2VsZi0+c3RyaW5nX3NpemUpOwogfQogCiBQeURvY19TVFJWQVIoaXNhdHR5X2RvYywKQEAgLTE4Niw3ICsxOTIsNyBAQAogInRvIGEgdHR5LWxpa2UgZGV2aWNlLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19pc2F0dHkoQnl0ZXNJT09iamVjdCAqc2VsZikKK2J5dGVzaW9faXNhdHR5KGJ5dGVzaW8gKnNlbGYpCiB7CiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogICAgIFB5X1JFVFVSTl9GQUxTRTsKQEAgLTE5NiwxMCArMjAyLDEwIEBACiAidGVsbCgpIC0+IGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgYW4gaW50ZWdlclxuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX3RlbGwoQnl0ZXNJT09iamVjdCAqc2VsZikKK2J5dGVzaW9fdGVsbChieXRlc2lvICpzZWxmKQogewogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKLSAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3Qoc2VsZi0+cG9zKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPnBvcyk7CiB9CiAKIFB5RG9jX1NUUlZBUihyZWFkX2RvYywKQEAgLTIwOSw3ICsyMTUsNyBAQAogIlJldHVybiBhbiBlbXB0eSBzdHJpbmcgYXQgRU9GLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19yZWFkKEJ5dGVzSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZXNpb19yZWFkKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3Qgc2l6ZSwgbjsKICAgICBjaGFyICpvdXRwdXQ7CkBAIC0yMjAsNyArMjI2LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnJlYWQiLCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlJbmRleF9DaGVjayhhcmcpKSB7CisgICAgaWYgKFB5TnVtYmVyX0NoZWNrKGFyZykpIHsKICAgICAgICAgc2l6ZSA9IFB5TnVtYmVyX0FzU3NpemVfdChhcmcsIFB5RXhjX092ZXJmbG93RXJyb3IpOwogICAgICAgICBpZiAoc2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNDcsNyArMjUzLDcgQEAKICAgICBvdXRwdXQgPSBzZWxmLT5idWYgKyBzZWxmLT5wb3M7CiAgICAgc2VsZi0+cG9zICs9IHNpemU7CiAKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUob3V0cHV0LCBzaXplKTsKKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShvdXRwdXQsIHNpemUpOwogfQogCiAKQEAgLTI1OCw3ICsyNjQsNyBAQAogIlJldHVybiBhbiBlbXB0eSBzdHJpbmcgYXQgRU9GLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19yZWFkMShCeXRlc0lPT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbikKK2J5dGVzaW9fcmVhZDEoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKm4pCiB7CiAgICAgUHlPYmplY3QgKmFyZywgKnJlczsKIApAQCAtMjc4LDcgKzI4NCw3IEBACiAiUmV0dXJuIGFuIGVtcHR5IHN0cmluZyBhdCBFT0YuXG4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fcmVhZGxpbmUoQnl0ZXNJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlc2lvX3JlYWRsaW5lKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3Qgc2l6ZSwgbjsKICAgICBjaGFyICpvdXRwdXQ7CkBAIC0yODksNyArMjk1LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnJlYWRsaW5lIiwgJmFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5SW5kZXhfQ2hlY2soYXJnKSkgeworICAgIGlmIChQeU51bWJlcl9DaGVjayhhcmcpKSB7CiAgICAgICAgIHNpemUgPSBQeU51bWJlcl9Bc1NzaXplX3QoYXJnLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKICAgICAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzEyLDcgKzMxOCw3IEBACiAgICAgICAgIHNlbGYtPnBvcyAtPSBzaXplOwogICAgIH0KIAotICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShvdXRwdXQsIG4pOworICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKG91dHB1dCwgbik7CiB9CiAKIFB5RG9jX1NUUlZBUihyZWFkbGluZXNfZG9jLApAQCAtMzIzLDcgKzMyOSw3IEBACiAidG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBsaW5lcyByZXR1cm5lZC5cbiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19yZWFkbGluZXMoQnl0ZXNJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlc2lvX3JlYWRsaW5lcyhieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IG1heHNpemUsIHNpemUsIG47CiAgICAgUHlPYmplY3QgKnJlc3VsdCwgKmxpbmU7CkBAIC0zMzUsNyArMzQxLDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnJlYWRsaW5lcyIsICZhcmcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeUluZGV4X0NoZWNrKGFyZykpIHsKKyAgICBpZiAoUHlOdW1iZXJfQ2hlY2soYXJnKSkgewogICAgICAgICBtYXhzaXplID0gUHlOdW1iZXJfQXNTc2l6ZV90KGFyZywgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CiAgICAgICAgIGlmIChtYXhzaXplID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM1Niw3ICszNjIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHdoaWxlICgobiA9IGdldF9saW5lKHNlbGYsICZvdXRwdXQpKSAhPSAwKSB7Ci0gICAgICAgIGxpbmUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShvdXRwdXQsIG4pOworICAgICAgICBsaW5lID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShvdXRwdXQsIG4pOwogICAgICAgICBpZiAoIWxpbmUpCiAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOwogICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIGxpbmUpID09IC0xKSB7CkBAIC0zODIsMzUgKzM4OCw0MiBAQAogImlzIHNldCBub3QgdG8gYmxvY2sgYXMgaGFzIG5vIGRhdGEgdG8gcmVhZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fcmVhZGludG8oQnl0ZXNJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmJ1ZmZlcikKK2J5dGVzaW9fcmVhZGludG8oYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgdm9pZCAqcmF3X2J1ZmZlcjsKLSAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBQeV9idWZmZXIgYnVmOworICAgIFB5X3NzaXplX3QgbGVuLCBuOwogCiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogCi0gICAgaWYgKFB5T2JqZWN0X0FzV3JpdGVCdWZmZXIoYnVmZmVyLCAmcmF3X2J1ZmZlciwgJmxlbikgPT0gLTEpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ3KiIsICZidWYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChzZWxmLT5wb3MgKyBsZW4gPiBzZWxmLT5zdHJpbmdfc2l6ZSkKLSAgICAgICAgbGVuID0gc2VsZi0+c3RyaW5nX3NpemUgLSBzZWxmLT5wb3M7CisgICAgbGVuID0gYnVmLmxlbjsKKyAgICAvKiBhZGp1c3QgaW52YWxpZCBzaXplcyAqLworICAgIG4gPSBzZWxmLT5zdHJpbmdfc2l6ZSAtIHNlbGYtPnBvczsKKyAgICBpZiAobGVuID4gbikgeworICAgICAgICBsZW4gPSBuOworICAgICAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgfQogCi0gICAgbWVtY3B5KHJhd19idWZmZXIsIHNlbGYtPmJ1ZiArIHNlbGYtPnBvcywgbGVuKTsKKyAgICBtZW1jcHkoYnVmLmJ1Ziwgc2VsZi0+YnVmICsgc2VsZi0+cG9zLCBsZW4pOwogICAgIGFzc2VydChzZWxmLT5wb3MgKyBsZW4gPCBQWV9TU0laRV9UX01BWCk7CiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKICAgICBzZWxmLT5wb3MgKz0gbGVuOwogCi0gICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KGxlbik7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGxlbik7CiB9CiAKIFB5RG9jX1NUUlZBUih0cnVuY2F0ZV9kb2MsCiAidHJ1bmNhdGUoW3NpemVdKSAtPiBpbnQuICBUcnVuY2F0ZSB0aGUgZmlsZSB0byBhdCBtb3N0IHNpemUgYnl0ZXMuXG4iCiAiXG4iCiAiU2l6ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uLCBhcyByZXR1cm5lZCBieSB0ZWxsKCkuXG4iCi0iUmV0dXJucyB0aGUgbmV3IHNpemUuICBJbXBseSBhbiBhYnNvbHV0ZSBzZWVrIHRvIHRoZSBwb3NpdGlvbiBzaXplLiIpOworIlRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gaXMgdW5jaGFuZ2VkLiAgUmV0dXJucyB0aGUgbmV3IHNpemUuXG4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fdHJ1bmNhdGUoQnl0ZXNJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlc2lvX3RydW5jYXRlKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKQEAgLTQyMCw3ICs0MzMsNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86dHJ1bmNhdGUiLCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlJbmRleF9DaGVjayhhcmcpKSB7CisgICAgaWYgKFB5TnVtYmVyX0NoZWNrKGFyZykpIHsKICAgICAgICAgc2l6ZSA9IFB5TnVtYmVyX0FzU3NpemVfdChhcmcsIFB5RXhjX092ZXJmbG93RXJyb3IpOwogICAgICAgICBpZiAoc2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00NDcsMTEgKzQ2MCwxMSBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KHNpemUpOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2l6ZSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX2l0ZXJuZXh0KEJ5dGVzSU9PYmplY3QgKnNlbGYpCitieXRlc2lvX2l0ZXJuZXh0KGJ5dGVzaW8gKnNlbGYpCiB7CiAgICAgY2hhciAqbmV4dDsKICAgICBQeV9zc2l6ZV90IG47CkBAIC00NjMsNyArNDc2LDcgQEAKICAgICBpZiAoIW5leHQgfHwgbiA9PSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShuZXh0LCBuKTsKKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShuZXh0LCBuKTsKIH0KIAogUHlEb2NfU1RSVkFSKHNlZWtfZG9jLApAQCAtNDc2LDI3ICs0ODksMjEgQEAKICJSZXR1cm5zIHRoZSBuZXcgYWJzb2x1dGUgcG9zaXRpb24uIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX3NlZWsoQnl0ZXNJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlc2lvX3NlZWsoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKnBvc19vYmosICptb2RlX29iajsKKyAgICBQeU9iamVjdCAqcG9zb2JqOwogICAgIFB5X3NzaXplX3QgcG9zOwogICAgIGludCBtb2RlID0gMDsKIAogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAotICAgIC8qIFNwZWNpYWwtY2FzZSBmb3IgMi54IHRvIHByZXZlbnQgZmxvYXRzIGZyb20gcGFzc2luZyB0aHJvdWdoLgotICAgICAgIFRoaXMgb25seSBuZWVkZWQgdG8gbWFrZSBhIHRlc3QgaW4gdGVzdF9pbyBzdWNjZWVkLiAqLwotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNlZWsiLCAxLCAyLCAmcG9zX29iaiwgJm1vZGVfb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5RmxvYXRfQ2hlY2socG9zX29iaikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiBhcmd1bWVudCBtdXN0IGJlIGFuIGludGVnZXIiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJufGk6c2VlayIsICZwb3MsICZtb2RlKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98aTpzZWVrIiwgJnBvc29iaiwgJm1vZGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIHBvcyA9IFB5TnVtYmVyX0FzU3NpemVfdChwb3NvYmosIFB5RXhjX092ZXJmbG93RXJyb3IpOworICAgIGlmIChwb3MgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgCiAgICAgaWYgKHBvcyA8IDAgJiYgbW9kZSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIm5lZ2F0aXZlIHNlZWsgdmFsdWUgJXpkIiwgcG9zKTsKQEAgLTUzMiw3ICs1MzksNyBAQAogICAgICAgICBwb3MgPSAwOwogICAgIHNlbGYtPnBvcyA9IHBvczsKIAotICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdChzZWxmLT5wb3MpOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2VsZi0+cG9zKTsKIH0KIAogUHlEb2NfU1RSVkFSKHdyaXRlX2RvYywKQEAgLTU0MSwzMSArNTQ4LDI0IEBACiAiUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fd3JpdGUoQnl0ZXNJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK2J5dGVzaW9fd3JpdGUoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKLSAgICBjb25zdCBjaGFyICpieXRlczsKLSAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlfc3NpemVfdCBuID0gMDsKKyAgICBQeV9idWZmZXIgYnVmOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogCi0gICAgLyogU3BlY2lhbC1jYXNlIGluIDIueCB0byBwcmV2ZW50IHVuaWNvZGUgb2JqZWN0cyB0byBwYXNzIHRocm91Z2guICovCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayhvYmopKSB7Ci0JICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0aW5nIGEgYnl0ZXMgb2JqZWN0LCBnb3QgdW5pY29kZSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoUHlPYmplY3RfQXNSZWFkQnVmZmVyKG9iaiwgKHZvaWQgKikmYnl0ZXMsICZzaXplKSA8IDApCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihvYmosICZidWYsIFB5QlVGX0NPTlRJR19STykgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChzaXplICE9IDApIHsKLSAgICAgICAgbiA9IHdyaXRlX2J5dGVzKHNlbGYsIGJ5dGVzLCBzaXplKTsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmIChidWYubGVuICE9IDApCisgICAgICAgIG4gPSB3cml0ZV9ieXRlcyhzZWxmLCBidWYuYnVmLCBidWYubGVuKTsKKyAgICBpZiAobiA+PSAwKQorICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbVNzaXplX3Qobik7CiAKLSAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3Qobik7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeURvY19TVFJWQVIod3JpdGVsaW5lc19kb2MsCkBAIC01NzYsNyArNTc2LDcgQEAKICJlYWNoIHN0cmluZy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fd3JpdGVsaW5lcyhCeXRlc0lPT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKK2J5dGVzaW9fd3JpdGVsaW5lcyhieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqdikKIHsKICAgICBQeU9iamVjdCAqaXQsICppdGVtOwogICAgIFB5T2JqZWN0ICpyZXQ7CkBAIC02MDksNyArNjA5LDcgQEAKICJjbG9zZSgpIC0+IE5vbmUuICBEaXNhYmxlIGFsbCBJL08gb3BlcmF0aW9ucy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fY2xvc2UoQnl0ZXNJT09iamVjdCAqc2VsZikKK2J5dGVzaW9fY2xvc2UoYnl0ZXNpbyAqc2VsZikKIHsKICAgICBpZiAoc2VsZi0+YnVmICE9IE5VTEwpIHsKICAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWYpOwpAQCAtNjE4LDI5ICs2MTgsMTQ3IEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLXN0YXRpYyB2b2lkCi1ieXRlc2lvX2RlYWxsb2MoQnl0ZXNJT09iamVjdCAqc2VsZikKKy8qIFBpY2tsaW5nIHN1cHBvcnQuCisKKyAgIE5vdGUgdGhhdCBvbmx5IHBpY2tsZSBwcm90b2NvbCAyIGFuZCBvbndhcmQgYXJlIHN1cHBvcnRlZCBzaW5jZSB3ZSB1c2UKKyAgIGV4dGVuZGVkIF9fcmVkdWNlX18gQVBJIG9mIFBFUCAzMDcgdG8gbWFrZSBCeXRlc0lPIGluc3RhbmNlcyBwaWNrbGFibGUuCisKKyAgIFByb3ZpZGluZyBzdXBwb3J0IGZvciBwcm90b2NvbCA8IDIgd291bGQgcmVxdWlyZSB0aGUgX19yZWR1Y2VfZXhfXyBtZXRob2QKKyAgIHdoaWNoIGlzIG5vdGFibHkgbG9uZy13aW5kZWQgd2hlbiBkZWZpbmVkIHByb3Blcmx5LgorCisgICBGb3IgQnl0ZXNJTywgdGhlIGltcGxlbWVudGF0aW9uIHdvdWxkIHNpbWlsYXIgdG8gb25lIGNvZGVkIGZvcgorICAgb2JqZWN0Ll9fcmVkdWNlX2V4X18sIGJ1dCBzbGlnaHRseSBsZXNzIGdlbmVyYWwuIFRvIGJlIG1vcmUgc3BlY2lmaWMsIHdlCisgICBjb3VsZCBjYWxsIGJ5dGVzaW9fZ2V0c3RhdGUgZGlyZWN0bHkgYW5kIGF2b2lkIGNoZWNraW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YKKyAgIGEgZmFsbGJhY2sgX19yZWR1Y2VfXyBtZXRob2QuIEhvd2V2ZXIsIHdlIHdvdWxkIHN0aWxsIG5lZWQgYSBfX25ld29ial9fCisgICBmdW5jdGlvbiB0byB1c2UgdGhlIGVmZmljaWVudCBpbnN0YW5jZSByZXByZXNlbnRhdGlvbiBvZiBQRVAgMzA3LgorICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc2lvX2dldHN0YXRlKGJ5dGVzaW8gKnNlbGYpCiB7CisgICAgUHlPYmplY3QgKmluaXR2YWx1ZSA9IGJ5dGVzaW9fZ2V0dmFsdWUoc2VsZik7CisgICAgUHlPYmplY3QgKmRpY3Q7CisgICAgUHlPYmplY3QgKnN0YXRlOworCisgICAgaWYgKGluaXR2YWx1ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc2VsZi0+ZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgZGljdCA9IFB5X05vbmU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkaWN0ID0gUHlEaWN0X0NvcHkoc2VsZi0+ZGljdCk7CisgICAgICAgIGlmIChkaWN0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzdGF0ZSA9IFB5X0J1aWxkVmFsdWUoIihPbk4pIiwgaW5pdHZhbHVlLCBzZWxmLT5wb3MsIGRpY3QpOworICAgIFB5X0RFQ1JFRihpbml0dmFsdWUpOworICAgIHJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzaW9fc2V0c3RhdGUoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKnN0YXRlKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKnBvc2l0aW9uX29iajsKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeV9zc2l6ZV90IHBvczsKKworICAgIGFzc2VydChzdGF0ZSAhPSBOVUxMKTsKKworICAgIC8qIFdlIGFsbG93IHRoZSBzdGF0ZSB0dXBsZSB0byBiZSBsb25nZXIgdGhhbiAzLCBiZWNhdXNlIHdlIG1heSBuZWVkCisgICAgICAgc29tZWRheSB0byBleHRlbmQgdGhlIG9iamVjdCdzIHN0YXRlIHdpdGhvdXQgYnJlYWtpbmcKKyAgICAgICBiYWNrd2FyZC1jb21wYXRpYmlsaXR5LiAqLworICAgIGlmICghUHlUdXBsZV9DaGVjayhzdGF0ZSkgfHwgUHlfU0laRShzdGF0ZSkgPCAzKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiJS4yMDBzLl9fc2V0c3RhdGVfXyBhcmd1bWVudCBzaG91bGQgYmUgMy10dXBsZSwgZ290ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lLCBQeV9UWVBFKHN0YXRlKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAvKiBSZXNldCB0aGUgb2JqZWN0IHRvIGl0cyBkZWZhdWx0IHN0YXRlLiBUaGlzIGlzIG9ubHkgbmVlZGVkIHRvIGhhbmRsZQorICAgICAgIHRoZSBjYXNlIG9mIHJlcGVhdGVkIGNhbGxzIHRvIF9fc2V0c3RhdGVfXy4gKi8KKyAgICBzZWxmLT5zdHJpbmdfc2l6ZSA9IDA7CisgICAgc2VsZi0+cG9zID0gMDsKKworICAgIC8qIFNldCB0aGUgdmFsdWUgb2YgdGhlIGludGVybmFsIGJ1ZmZlci4gSWYgc3RhdGVbMF0gZG9lcyBub3Qgc3VwcG9ydCB0aGUKKyAgICAgICBidWZmZXIgcHJvdG9jb2wsIGJ5dGVzaW9fd3JpdGUgd2lsbCByYWlzZSB0aGUgYXBwcm9wcmlhdGUgVHlwZUVycm9yLiAqLworICAgIHJlc3VsdCA9IGJ5dGVzaW9fd3JpdGUoc2VsZiwgUHlUdXBsZV9HRVRfSVRFTShzdGF0ZSwgMCkpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfREVDUkVGKHJlc3VsdCk7CisKKyAgICAvKiBTZXQgY2FyZWZ1bGx5IHRoZSBwb3NpdGlvbiB2YWx1ZS4gQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgdXNlIHRoZSBzZWVrCisgICAgICAgbWV0aG9kIGluc3RlYWQgb2YgbW9kaWZ5aW5nIHNlbGYtPnBvcyBkaXJlY3RseSB0byBiZXR0ZXIgcHJvdGVjdCB0aGUKKyAgICAgICBvYmplY3QgaW50ZXJuYWwgc3RhdGUgYWdhaW5zdCBlcnJuZW91cyAob3IgbWFsaWNpb3VzKSBpbnB1dHMuICovCisgICAgcG9zaXRpb25fb2JqID0gUHlUdXBsZV9HRVRfSVRFTShzdGF0ZSwgMSk7CisgICAgaWYgKCFQeUluZGV4X0NoZWNrKHBvc2l0aW9uX29iaikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgaXRlbSBvZiBzdGF0ZSBtdXN0IGJlIGFuIGludGVnZXIsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShwb3NpdGlvbl9vYmopLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBvcyA9IFB5TnVtYmVyX0FzU3NpemVfdChwb3NpdGlvbl9vYmosIFB5RXhjX092ZXJmbG93RXJyb3IpOworICAgIGlmIChwb3MgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHBvcyA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gdmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzZWxmLT5wb3MgPSBwb3M7CisKKyAgICAvKiBTZXQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIGluc3RhbmNlIHZhcmlhYmxlcy4gKi8KKyAgICBkaWN0ID0gUHlUdXBsZV9HRVRfSVRFTShzdGF0ZSwgMik7CisgICAgaWYgKGRpY3QgIT0gUHlfTm9uZSkgeworICAgICAgICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcmQgaXRlbSBvZiBzdGF0ZSBzaG91bGQgYmUgYSBkaWN0LCBnb3QgYSAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZGljdCktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlbGYtPmRpY3QpIHsKKyAgICAgICAgICAgIC8qIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHJlcGxhY2UgdGhlIGludGVybmFsIGRpY3Rpb25hcnkKKyAgICAgICAgICAgICAgIGNvbXBsZXRlbHkuIEhvd2V2ZXIsIGl0IHNlZW1zIG1vcmUgcHJhY3RpY2FsIHRvIGp1c3QgdXBkYXRlIGl0LiAqLworICAgICAgICAgICAgaWYgKFB5RGljdF9VcGRhdGUoc2VsZi0+ZGljdCwgZGljdCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlfSU5DUkVGKGRpY3QpOworICAgICAgICAgICAgc2VsZi0+ZGljdCA9IGRpY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIHZvaWQKK2J5dGVzaW9fZGVhbGxvYyhieXRlc2lvICpzZWxmKQoreworICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIGlmIChzZWxmLT5idWYgIT0gTlVMTCkgewogICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1Zik7CiAgICAgICAgIHNlbGYtPmJ1ZiA9IE5VTEw7CiAgICAgfQorICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKICAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHNlbGYpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNpb19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgQnl0ZXNJT09iamVjdCAqc2VsZjsKKyAgICBieXRlc2lvICpzZWxmOwogCiAgICAgYXNzZXJ0KHR5cGUgIT0gTlVMTCAmJiB0eXBlLT50cF9hbGxvYyAhPSBOVUxMKTsKLSAgICBzZWxmID0gKEJ5dGVzSU9PYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBzZWxmID0gKGJ5dGVzaW8gKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPnN0cmluZ19zaXplID0gMDsKLSAgICBzZWxmLT5wb3MgPSAwOwotICAgIHNlbGYtPmJ1Zl9zaXplID0gMDsKKyAgICAvKiB0cF9hbGxvYyBpbml0aWFsaXplcyBhbGwgdGhlIGZpZWxkcyB0byB6ZXJvLiBTbyB3ZSBkb24ndCBoYXZlIHRvCisgICAgICAgaW5pdGlhbGl6ZSB0aGVtIGhlcmUuICovCisKICAgICBzZWxmLT5idWYgPSAoY2hhciAqKVB5TWVtX01hbGxvYygwKTsKICAgICBpZiAoc2VsZi0+YnVmID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwpAQCAtNjUxLDExICs3NjksMTMgQEAKIH0KIAogc3RhdGljIGludAotYnl0ZXNpb19pbml0KEJ5dGVzSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK2J5dGVzaW9faW5pdChieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CisgICAgY2hhciAqa3dsaXN0W10gPSB7ImluaXRpYWxfYnl0ZXMiLCBOVUxMfTsKICAgICBQeU9iamVjdCAqaW5pdHZhbHVlID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86Qnl0ZXNJTyIsICZpbml0dmFsdWUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8TzpCeXRlc0lPIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbml0dmFsdWUpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBJbiBjYXNlLCBfX2luaXRfXyBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuICovCkBAIC02NzQsMTAgKzc5NCwyNSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitieXRlc2lvX3RyYXZlcnNlKGJ5dGVzaW8gKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitieXRlc2lvX2NsZWFyKGJ5dGVzaW8gKnNlbGYpCit7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CisgICAgcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIGJ5dGVzaW9fZ2V0c2V0bGlzdFtdID0gewogICAgIHsiY2xvc2VkIiwgIChnZXR0ZXIpYnl0ZXNpb19nZXRfY2xvc2VkLCBOVUxMLAogICAgICAiVHJ1ZSBpZiB0aGUgZmlsZSBpcyBjbG9zZWQuIn0sCi0gICAgezB9LCAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCisgICAge05VTEx9LCAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIGJ5dGVzaW9fbWV0aG9kc1tdID0gewpAQCAtNjkxLDEzICs4MjYsMTUgQEAKICAgICB7IndyaXRlIiwgICAgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb193cml0ZSwgICAgICBNRVRIX08sIHdyaXRlX2RvY30sCiAgICAgeyJ3cml0ZWxpbmVzIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fd3JpdGVsaW5lcywgTUVUSF9PLCB3cml0ZWxpbmVzX2RvY30sCiAgICAgeyJyZWFkMSIsICAgICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fcmVhZDEsICAgICAgTUVUSF9PLCByZWFkMV9kb2N9LAotICAgIHsicmVhZGludG8iLCAgIChQeUNGdW5jdGlvbilieXRlc2lvX3JlYWRpbnRvLCAgIE1FVEhfTywgcmVhZGludG9fZG9jfSwKKyAgICB7InJlYWRpbnRvIiwgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19yZWFkaW50bywgICBNRVRIX1ZBUkFSR1MsIHJlYWRpbnRvX2RvY30sCiAgICAgeyJyZWFkbGluZSIsICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fcmVhZGxpbmUsICAgTUVUSF9WQVJBUkdTLCByZWFkbGluZV9kb2N9LAogICAgIHsicmVhZGxpbmVzIiwgIChQeUNGdW5jdGlvbilieXRlc2lvX3JlYWRsaW5lcywgIE1FVEhfVkFSQVJHUywgcmVhZGxpbmVzX2RvY30sCiAgICAgeyJyZWFkIiwgICAgICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fcmVhZCwgICAgICAgTUVUSF9WQVJBUkdTLCByZWFkX2RvY30sCi0gICAgeyJnZXR2YWx1ZSIsICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fZ2V0dmFsdWUsICAgTUVUSF9WQVJBUkdTLCBnZXR2YWxfZG9jfSwKKyAgICB7ImdldHZhbHVlIiwgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19nZXR2YWx1ZSwgICBNRVRIX05PQVJHUywgIGdldHZhbF9kb2N9LAogICAgIHsic2VlayIsICAgICAgIChQeUNGdW5jdGlvbilieXRlc2lvX3NlZWssICAgICAgIE1FVEhfVkFSQVJHUywgc2Vla19kb2N9LAogICAgIHsidHJ1bmNhdGUiLCAgIChQeUNGdW5jdGlvbilieXRlc2lvX3RydW5jYXRlLCAgIE1FVEhfVkFSQVJHUywgdHJ1bmNhdGVfZG9jfSwKKyAgICB7Il9fZ2V0c3RhdGVfXyIsICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19nZXRzdGF0ZSwgIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7Il9fc2V0c3RhdGVfXyIsICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19zZXRzdGF0ZSwgIE1FVEhfTywgTlVMTH0sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNzA3LDE2ICs4NDQsMTYgQEAKICJDcmVhdGUgYSBidWZmZXJlZCBJL08gaW1wbGVtZW50YXRpb24gdXNpbmcgYW4gaW4tbWVtb3J5IGJ5dGVzXG4iCiAiYnVmZmVyLCByZWFkeSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iKTsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBCeXRlc0lPX1R5cGUgPSB7CitQeVR5cGVPYmplY3QgUHlCeXRlc0lPX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgIl9ieXRlc2lvLl9CeXRlc0lPIiwgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSovCi0gICAgc2l6ZW9mKEJ5dGVzSU9PYmplY3QpLCAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAiX2lvLkJ5dGVzSU8iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoYnl0ZXNpbyksICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KICAgICAoZGVzdHJ1Y3RvcilieXRlc2lvX2RlYWxsb2MsICAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwpAQCAtNzI3LDEyICs4NjQsMTMgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfAorICAgIFB5X1RQRkxBR1NfSEFWRV9HQywgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZsYWdzKi8KICAgICBieXRlc2lvX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCisgICAgKHRyYXZlcnNlcHJvYylieXRlc2lvX3RyYXZlcnNlLCAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLworICAgIChpbnF1aXJ5KWJ5dGVzaW9fY2xlYXIsICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIG9mZnNldG9mKGJ5dGVzaW8sIHdlYWtyZWZsaXN0KSwgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KICAgICBQeU9iamVjdF9TZWxmSXRlciwgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KICAgICAoaXRlcm5leHRmdW5jKWJ5dGVzaW9faXRlcm5leHQsICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCiAgICAgYnl0ZXNpb19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCkBAIC03NDIsMjIgKzg4MCw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9zZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLworICAgIG9mZnNldG9mKGJ5dGVzaW8sIGRpY3QpLCAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwogICAgIChpbml0cHJvYylieXRlc2lvX2luaXQsICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FsbG9jKi8KICAgICBieXRlc2lvX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwogfTsKLQotUHlNT0RJTklUX0ZVTkMKLWluaXRfYnl0ZXNpbyh2b2lkKQotewotICAgIFB5T2JqZWN0ICptOwotCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmQnl0ZXNJT19UeXBlKSA8IDApCi0gICAgICAgIHJldHVybjsKLSAgICBtID0gUHlfSW5pdE1vZHVsZSgiX2J5dGVzaW8iLCBOVUxMKTsKLSAgICBpZiAobSA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0gICAgUHlfSU5DUkVGKCZCeXRlc0lPX1R5cGUpOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX0J5dGVzSU8iLCAoUHlPYmplY3QgKikmQnl0ZXNJT19UeXBlKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2ZpbGVpby5jIGIvTW9kdWxlcy9faW8vZmlsZWlvLmMKc2ltaWxhcml0eSBpbmRleCA3MSUKcmVuYW1lIGZyb20gTW9kdWxlcy9fZmlsZWlvLmMKcmVuYW1lIHRvIE1vZHVsZXMvX2lvL2ZpbGVpby5jCmluZGV4IDU0MzZhNjQuLjgzOTIxZWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2ZpbGVpby5jCisrKyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCkBAIC0yLDEwICsyLDE3IEBACiAKICNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogI2luY2x1ZGUgIlB5dGhvbi5oIgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKICNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8c3RkZGVmLmg+IC8qIEZvciBvZmZzZXRvZiAqLworI2luY2x1ZGUgIl9pb21vZHVsZS5oIgogCiAvKgogICogS25vd24gbGlrZWx5IHByb2JsZW1zOgpAQCAtMjcsNjMgKzM0LDk4IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKKyNpZiBCVUZTSVogPCAoOCoxMDI0KQorI2RlZmluZSBTTUFMTENIVU5LICg4KjEwMjQpCisjZWxpZiAoQlVGU0laID49ICgyIDw8IDI1KSkKKyNlcnJvciAidW5yZWFzb25hYmxlIEJVRlNJWiA+IDY0TUIgZGVmaW5lZCIKKyNlbHNlCisjZGVmaW5lIFNNQUxMQ0hVTksgQlVGU0laCisjZW5kaWYKKworI2lmIFNJWkVPRl9JTlQgPCA0CisjZGVmaW5lIEJJR0NIVU5LICAoNTEyICogMzIpCisjZWxzZQorI2RlZmluZSBCSUdDSFVOSyAgKDUxMiAqIDEwMjQpCisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBpbnQgZmQ7CiAgICAgdW5zaWduZWQgaW50IHJlYWRhYmxlIDogMTsKICAgICB1bnNpZ25lZCBpbnQgd3JpdGFibGUgOiAxOwogICAgIHNpZ25lZCBpbnQgc2Vla2FibGUgOiAyOyAvKiAtMSBtZWFucyB1bmtub3duICovCi0gICAgc2lnbmVkIGludCBjbG9zZWZkIDogMTsKKyAgICB1bnNpZ25lZCBpbnQgY2xvc2VmZCA6IDE7CiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwotfSBQeUZpbGVJT09iamVjdDsKKyAgICBQeU9iamVjdCAqZGljdDsKK30gZmlsZWlvOwogCiBQeVR5cGVPYmplY3QgUHlGaWxlSU9fVHlwZTsKIAogI2RlZmluZSBQeUZpbGVJT19DaGVjayhvcCkgKFB5T2JqZWN0X1R5cGVDaGVjaygob3ApLCAmUHlGaWxlSU9fVHlwZSkpCiAKK2ludAorX1B5RmlsZUlPX2Nsb3NlZChQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gKChmaWxlaW8gKilzZWxmKS0+ZmQgPCAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogcG9ydGFibGVfbHNlZWsoaW50IGZkLCBQeU9iamVjdCAqcG9zb2JqLCBpbnQgd2hlbmNlKTsKIAotLyogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vICh3aGljaCBpcyA8IDApIG9uIGZhaWx1cmUuICovCitzdGF0aWMgUHlPYmplY3QgKnBvcnRhYmxlX2xzZWVrKGludCBmZCwgUHlPYmplY3QgKnBvc29iaiwgaW50IHdoZW5jZSk7CisKKy8qIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSB3aXRoIGV4Y2VwdGlvbiBzZXQgb24gZmFpbHVyZS4gKi8KIHN0YXRpYyBpbnQKLWludGVybmFsX2Nsb3NlKFB5RmlsZUlPT2JqZWN0ICpzZWxmKQoraW50ZXJuYWxfY2xvc2UoZmlsZWlvICpzZWxmKQogeworICAgIGludCBlcnIgPSAwOwogICAgIGludCBzYXZlX2Vycm5vID0gMDsKICAgICBpZiAoc2VsZi0+ZmQgPj0gMCkgewogICAgICAgICBpbnQgZmQgPSBzZWxmLT5mZDsKICAgICAgICAgc2VsZi0+ZmQgPSAtMTsKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAoY2xvc2UoZmQpIDwgMCkKKyAgICAgICAgLyogZmQgaXMgYWNjZXNzaWJsZSBhbmQgc29tZW9uZSBlbHNlIG1heSBoYXZlIGNsb3NlZCBpdCAqLworICAgICAgICBpZiAoX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgZXJyID0gY2xvc2UoZmQpOworICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgc2F2ZV9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNhdmVfZXJybm8gPSBlcnJubzsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIGVyciA9IC0xOworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBzYXZlX2Vycm5vOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIGVycm5vID0gc2F2ZV9lcnJubzsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX2Nsb3NlKFB5RmlsZUlPT2JqZWN0ICpzZWxmKQorZmlsZWlvX2Nsb3NlKGZpbGVpbyAqc2VsZikKIHsKICAgICBpZiAoIXNlbGYtPmNsb3NlZmQpIHsKICAgICAgICAgc2VsZi0+ZmQgPSAtMTsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQogICAgIGVycm5vID0gaW50ZXJuYWxfY2xvc2Uoc2VsZik7Ci0gICAgaWYgKGVycm5vIDwgMCkgewotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CisgICAgaWYgKGVycm5vIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCi0gICAgUHlfUkVUVVJOX05PTkU7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2QoKFB5T2JqZWN0KikmUHlSYXdJT0Jhc2VfVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xvc2UiLCAiTyIsIHNlbGYpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa2V3cykKK2ZpbGVpb19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgUHlGaWxlSU9PYmplY3QgKnNlbGY7CisgICAgZmlsZWlvICpzZWxmOwogCiAgICAgYXNzZXJ0KHR5cGUgIT0gTlVMTCAmJiB0eXBlLT50cF9hbGxvYyAhPSBOVUxMKTsKIAotICAgIHNlbGYgPSAoUHlGaWxlSU9PYmplY3QgKikgdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgc2VsZiA9IChmaWxlaW8gKikgdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CiAgICAgaWYgKHNlbGYgIT0gTlVMTCkgewogICAgICAgICBzZWxmLT5mZCA9IC0xOwogICAgICAgICBzZWxmLT5yZWFkYWJsZSA9IDA7CkBAIC0xMDEsNyArMTQzLDcgQEAKICAgIGRpcmVjdG9yaWVzLCBzbyB3ZSBuZWVkIGEgY2hlY2suICAqLwogCiBzdGF0aWMgaW50Ci1kaXJjaGVjayhQeUZpbGVJT09iamVjdCogc2VsZiwgY2hhciAqbmFtZSkKK2RpcmNoZWNrKGZpbGVpbyogc2VsZiwgY29uc3QgY2hhciAqbmFtZSkKIHsKICNpZiBkZWZpbmVkKEhBVkVfRlNUQVQpICYmIGRlZmluZWQoU19JRkRJUikgJiYgZGVmaW5lZChFSVNESVIpCiAgICAgc3RydWN0IHN0YXQgYnVmOwpAQCAtMTEwLDcgKzE1Miw4IEBACiAgICAgaWYgKGZzdGF0KHNlbGYtPmZkLCAmYnVmKSA9PSAwICYmIFNfSVNESVIoYnVmLnN0X21vZGUpKSB7CiAgICAgICAgIGNoYXIgKm1zZyA9IHN0cmVycm9yKEVJU0RJUik7CiAgICAgICAgIFB5T2JqZWN0ICpleGM7Ci0gICAgICAgIGludGVybmFsX2Nsb3NlKHNlbGYpOworICAgICAgICBpZiAoaW50ZXJuYWxfY2xvc2Uoc2VsZikpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAKICAgICAgICAgZXhjID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX0lPRXJyb3IsICIoaXNzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFSVNESVIsIG1zZywgbmFtZSk7CkBAIC0xMjcsNyArMTcwLDcgQEAKIHsKICNpZiBkZWZpbmVkKEhBVkVfRlNUQVQpCiAgICAgc3RydWN0IHN0YXQgYnVmOwotICAgIGlmIChmc3RhdChmZCwgJmJ1ZikgPCAwICYmIGVycm5vID09IEVCQURGKSB7CisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpIHx8IChmc3RhdChmZCwgJmJ1ZikgPCAwICYmIGVycm5vID09IEVCQURGKSkgewogICAgICAgICBQeU9iamVjdCAqZXhjOwogICAgICAgICBjaGFyICptc2cgPSBzdHJlcnJvcihFQkFERik7CiAgICAgICAgIGV4YyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeUV4Y19PU0Vycm9yLCAiKGlzKSIsCkBAIC0xNDQsOSArMTg3LDEwIEBACiBzdGF0aWMgaW50CiBmaWxlaW9faW5pdChQeU9iamVjdCAqb3NlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBQeUZpbGVJT09iamVjdCAqc2VsZiA9IChQeUZpbGVJT09iamVjdCAqKSBvc2VsZjsKKyAgICBmaWxlaW8gKnNlbGYgPSAoZmlsZWlvICopIG9zZWxmOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZmlsZSIsICJtb2RlIiwgImNsb3NlZmQiLCBOVUxMfTsKLSAgICBjaGFyICpuYW1lID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZW9iaiwgKnN0cmluZ29iaiA9IE5VTEw7CiAgICAgY2hhciAqbW9kZSA9ICJyIjsKICAgICBjaGFyICpzOwogI2lmZGVmIE1TX1dJTkRPV1MKQEAgLTE2NSw0MSArMjA5LDU1IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiaXxzaTpmaWxlaW8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmZmQsICZtb2RlLCAmY2xvc2VmZCkpIHsKLSAgICAgICAgaWYgKGZkIDwgMCkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfHNpOmZpbGVpbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbmFtZW9iaiwgJm1vZGUsICZjbG9zZWZkKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKFB5RmxvYXRfQ2hlY2sobmFtZW9iaikpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZkID0gUHlMb25nX0FzTG9uZyhuYW1lb2JqKTsKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5lZ2F0aXZlIGZpbGVkZXNjcmlwdG9yIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoZWNrX2ZkKGZkKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQogCi0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCi0gICAgICAgIGlmIChHZXRWZXJzaW9uKCkgPCAweDgwMDAwMDAwKSB7Ci0gICAgICAgIC8qIE9uIE5ULCBzbyB3aWRlIEFQSSBhdmFpbGFibGUgKi8KLSAgICAgICAgUHlPYmplY3QgKnBvOwotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJVfHNpOmZpbGVpbyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmcG8sICZtb2RlLCAmY2xvc2VmZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgIHdpZGVuYW1lID0gUHlVbmljb2RlX0FTX1VOSUNPREUocG8pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cKLSAgICAgICAgICAgICAgIHN0cmluZ3MgYXJlIGFsc28gdmFsaWQuICovCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdpZGVuYW1lID09IE5VTEwpCisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobmFtZW9iaikpCisgICAgICAgIHdpZGVuYW1lID0gUHlVbmljb2RlX0FTX1VOSUNPREUobmFtZW9iaik7CisgICAgaWYgKHdpZGVuYW1lID09IE5VTEwpCiAjZW5kaWYKLSAgICAgICAgewotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiZXR8c2k6ZmlsZWlvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgJm1vZGUsICZjbG9zZWZkKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoZmQgPCAwKQorICAgIHsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2sobmFtZW9iaikgfHwgUHlCeXRlQXJyYXlfQ2hlY2sobmFtZW9iaikpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbmFtZWxlbjsKKyAgICAgICAgICAgIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIobmFtZW9iaiwgJm5hbWUsICZuYW1lbGVuKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPYmplY3QgKnUgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChuYW1lb2JqKTsKKworICAgICAgICAgICAgaWYgKHUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIHN0cmluZ29iaiA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoCisgICAgICAgICAgICAgICAgdSwgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICBpZiAoc3RyaW5nb2JqID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKHN0cmluZ29iaikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jb2RlciBmYWlsZWQgdG8gcmV0dXJuIGJ5dGVzIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5hbWUgPSBQeUJ5dGVzX0FTX1NUUklORyhzdHJpbmdvYmopOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTAsNyArMjY4LDggQEAKICAgICAgICAgICAgIGlmIChyd2EpIHsKICAgICAgICAgICAgIGJhZF9tb2RlOgogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTXVzdCBoYXZlIGV4YWN0bHkgb25lIG9mIHJlYWQvd3JpdGUvYXBwZW5kIG1vZGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk11c3QgaGF2ZSBleGFjdGx5IG9uZSBvZiByZWFkL3dyaXRlL2FwcGVuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RlIGFuZCBhdCBtb3N0IG9uZSBwbHVzIik7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJ3YSA9IDE7CkBAIC0yNjYsNiArMzI1LDggQEAKICNlbmRpZgogCiAgICAgaWYgKGZkID49IDApIHsKKyAgICAgICAgaWYgKGNoZWNrX2ZkKGZkKSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIHNlbGYtPmZkID0gZmQ7CiAgICAgICAgIHNlbGYtPmNsb3NlZmQgPSBjbG9zZWZkOwogICAgIH0KQEAgLTI5OSwxMyArMzYwLDIxIEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAorICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKXNlbGYsICJuYW1lIiwgbmFtZW9iaikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCiAgICAgaWYgKGFwcGVuZCkgewogICAgICAgICAvKiBGb3IgY29uc2lzdGVudCBiZWhhdmlvdXIsIHdlIGV4cGxpY2l0bHkgc2VlayB0byB0aGUKICAgICAgICAgICAgZW5kIG9mIGZpbGUgKG90aGVyd2lzZSwgaXQgbWlnaHQgYmUgZG9uZSBvbmx5IG9uIHRoZQogICAgICAgICAgICBmaXJzdCB3cml0ZSgpKS4gKi8KICAgICAgICAgUHlPYmplY3QgKnBvcyA9IHBvcnRhYmxlX2xzZWVrKHNlbGYtPmZkLCBOVUxMLCAyKTsKLSAgICAgICAgaWYgKHBvcyA9PSBOVUxMKQorICAgICAgICBpZiAocG9zID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChjbG9zZWZkKSB7CisgICAgICAgICAgICAgICAgY2xvc2Uoc2VsZi0+ZmQpOworICAgICAgICAgICAgICAgIHNlbGYtPmZkID0gLTE7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihwb3MpOwogICAgIH0KIApAQCAtMzE1LDI0ICszODQsMzMgQEAKICAgICByZXQgPSAtMTsKIAogIGRvbmU6Ci0gICAgUHlNZW1fRnJlZShuYW1lKTsKKyAgICBQeV9DTEVBUihzdHJpbmdvYmopOwogICAgIHJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1maWxlaW9fZGVhbGxvYyhQeUZpbGVJT09iamVjdCAqc2VsZikKK3N0YXRpYyBpbnQKK2ZpbGVpb190cmF2ZXJzZShmaWxlaW8gKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogeworICAgIFB5X1ZJU0lUKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmaWxlaW9fY2xlYXIoZmlsZWlvICpzZWxmKQoreworICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZmlsZWlvX2RlYWxsb2MoZmlsZWlvICpzZWxmKQoreworICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuOworICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKLQotICAgIGlmIChzZWxmLT5mZCA+PSAwICYmIHNlbGYtPmNsb3NlZmQpIHsKLSAgICAgICAgZXJybm8gPSBpbnRlcm5hbF9jbG9zZShzZWxmKTsKLSAgICAgICAgaWYgKGVycm5vIDwgMCkgewotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoImNsb3NlIGZhaWxlZDogW0Vycm5vICVkXSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICB9Ci0gICAgfQotCisgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZSgoUHlPYmplY3QgKilzZWxmKTsKIH0KIApAQCAtMzUxLDcgKzQyOSw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fZmlsZW5vKFB5RmlsZUlPT2JqZWN0ICpzZWxmKQorZmlsZWlvX2ZpbGVubyhmaWxlaW8gKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKICAgICAgICAgcmV0dXJuIGVycl9jbG9zZWQoKTsKQEAgLTM1OSw3ICs0MzcsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX3JlYWRhYmxlKFB5RmlsZUlPT2JqZWN0ICpzZWxmKQorZmlsZWlvX3JlYWRhYmxlKGZpbGVpbyAqc2VsZikKIHsKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwpAQCAtMzY3LDcgKzQ0NSw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fd3JpdGFibGUoUHlGaWxlSU9PYmplY3QgKnNlbGYpCitmaWxlaW9fd3JpdGFibGUoZmlsZWlvICpzZWxmKQogewogICAgIGlmIChzZWxmLT5mZCA8IDApCiAgICAgICAgIHJldHVybiBlcnJfY2xvc2VkKCk7CkBAIC0zNzUsMjUgKzQ1MywyNSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX3NlZWthYmxlKFB5RmlsZUlPT2JqZWN0ICpzZWxmKQorZmlsZWlvX3NlZWthYmxlKGZpbGVpbyAqc2VsZikKIHsKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwogICAgIGlmIChzZWxmLT5zZWVrYWJsZSA8IDApIHsKLSAgICAgICAgaW50IHJldDsKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICByZXQgPSBsc2VlayhzZWxmLT5mZCwgMCwgU0VFS19DVVIpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgUHlPYmplY3QgKnBvcyA9IHBvcnRhYmxlX2xzZWVrKHNlbGYtPmZkLCBOVUxMLCBTRUVLX0NVUik7CisgICAgICAgIGlmIChwb3MgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIHNlbGYtPnNlZWthYmxlID0gMDsKLSAgICAgICAgZWxzZQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlfREVDUkVGKHBvcyk7CiAgICAgICAgICAgICBzZWxmLT5zZWVrYWJsZSA9IDE7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygobG9uZykgc2VsZi0+c2Vla2FibGUpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX3JlYWRpbnRvKFB5RmlsZUlPT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2ZpbGVpb19yZWFkaW50byhmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X2J1ZmZlciBwYnVmOwogICAgIFB5X3NzaXplX3QgbjsKQEAgLTQwNiwxMCArNDg0LDEzIEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ3KiIsICZwYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZXJybm8gPSAwOwotICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKF9QeVZlcmlmeV9mZChzZWxmLT5mZCkpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gZWxzZQorICAgICAgICBuID0gLTE7CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgaWYgKG4gPCAwKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCkBAIC00MjEsMjMgKzUwMiw2MiBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qobik7CiB9CiAKLSNkZWZpbmUgREVGQVVMVF9CVUZGRVJfU0laRSAoOCoxMDI0KQorc3RhdGljIHNpemVfdAorbmV3X2J1ZmZlcnNpemUoZmlsZWlvICpzZWxmLCBzaXplX3QgY3VycmVudHNpemUpCit7CisjaWZkZWYgSEFWRV9GU1RBVAorICAgIG9mZl90IHBvcywgZW5kOworICAgIHN0cnVjdCBzdGF0IHN0OworICAgIGlmIChmc3RhdChzZWxmLT5mZCwgJnN0KSA9PSAwKSB7CisgICAgICAgIGVuZCA9IHN0LnN0X3NpemU7CisgICAgICAgIHBvcyA9IGxzZWVrKHNlbGYtPmZkLCAwTCwgU0VFS19DVVIpOworICAgICAgICAvKiBGaWxlcyBjbGFpbWluZyBhIHNpemUgc21hbGxlciB0aGFuIFNNQUxMQ0hVTksgbWF5CisgICAgICAgICAgIGFjdHVhbGx5IGJlIHN0cmVhbWluZyBwc2V1ZG8tZmlsZXMuIEluIHRoaXMgY2FzZSwgd2UKKyAgICAgICAgICAgYXBwbHkgdGhlIG1vcmUgYWdncmVzc2l2ZSBhbGdvcml0aG0gYmVsb3cuCisgICAgICAgICovCisgICAgICAgIGlmIChlbmQgPj0gU01BTExDSFVOSyAmJiBlbmQgPj0gcG9zICYmIHBvcyA+PSAwKSB7CisgICAgICAgICAgICAvKiBBZGQgMSBzbyBpZiB0aGUgZmlsZSB3ZXJlIHRvIGdyb3cgd2UnZCBub3RpY2UuICovCisgICAgICAgICAgICByZXR1cm4gY3VycmVudHNpemUgKyBlbmQgLSBwb3MgKyAxOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgaWYgKGN1cnJlbnRzaXplID4gU01BTExDSFVOSykgeworICAgICAgICAvKiBLZWVwIGRvdWJsaW5nIHVudGlsIHdlIHJlYWNoIEJJR0NIVU5LOworICAgICAgICAgICB0aGVuIGtlZXAgYWRkaW5nIEJJR0NIVU5LLiAqLworICAgICAgICBpZiAoY3VycmVudHNpemUgPD0gQklHQ0hVTkspCisgICAgICAgICAgICByZXR1cm4gY3VycmVudHNpemUgKyBjdXJyZW50c2l6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRzaXplICsgQklHQ0hVTks7CisgICAgfQorICAgIHJldHVybiBjdXJyZW50c2l6ZSArIFNNQUxMQ0hVTks7Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fcmVhZGFsbChQeUZpbGVJT09iamVjdCAqc2VsZikKK2ZpbGVpb19yZWFkYWxsKGZpbGVpbyAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIFB5X3NzaXplX3QgdG90YWwgPSAwOwogICAgIGludCBuOwogCi0gICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgREVGQVVMVF9CVUZGRVJfU0laRSk7CisgICAgaWYgKCFfUHlWZXJpZnlfZmQoc2VsZi0+ZmQpKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworCisgICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBTTUFMTENIVU5LKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgUHlfc3NpemVfdCBuZXdzaXplID0gdG90YWwgKyBERUZBVUxUX0JVRkZFUl9TSVpFOwotICAgICAgICBpZiAoUHlTdHJpbmdfR0VUX1NJWkUocmVzdWx0KSA8IG5ld3NpemUpIHsKLSAgICAgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZyZXN1bHQsIG5ld3NpemUpIDwgMCkgeworICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IG5ld19idWZmZXJzaXplKHNlbGYsIHRvdGFsKTsKKyAgICAgICAgaWYgKG5ld3NpemUgPiBQWV9TU0laRV9UX01BWCB8fCBuZXdzaXplIDw9IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICJ1bmJvdW5kZWQgcmVhZCByZXR1cm5lZCBtb3JlIGJ5dGVzICIKKyAgICAgICAgICAgICAgICAidGhhbiBhIFB5dGhvbiBzdHJpbmcgY2FuIGhvbGQgIik7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA8IChQeV9zc2l6ZV90KW5ld3NpemUpIHsKKyAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgbmV3c2l6ZSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRvdGFsID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDQ5LDcgKzU2OSw3IEBACiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwKLSAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HKHJlc3VsdCkgKyB0b3RhbCwKKyAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIHRvdGFsLAogICAgICAgICAgICAgICAgICBuZXdzaXplIC0gdG90YWwpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICBpZiAobiA9PSAwKQpAQCAtNDY4LDggKzU4OCw4IEBACiAgICAgICAgIHRvdGFsICs9IG47CiAgICAgfQogCi0gICAgaWYgKFB5U3RyaW5nX0dFVF9TSVpFKHJlc3VsdCkgPiB0b3RhbCkgewotICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcmVzdWx0LCB0b3RhbCkgPCAwKSB7CisgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA+IHRvdGFsKSB7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgdG90YWwpIDwgMCkgewogICAgICAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQganVzdCBpbiBjYXNlICovCiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDc5LDcgKzU5OSw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fcmVhZChQeUZpbGVJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitmaWxlaW9fcmVhZChmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGNoYXIgKnB0cjsKICAgICBQeV9zc2l6ZV90IG47CkBAIC00OTEsMjQgKzYxMSwyOCBAQAogICAgIGlmICghc2VsZi0+cmVhZGFibGUpCiAgICAgICAgIHJldHVybiBlcnJfbW9kZSgicmVhZGluZyIpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8biIsICZzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJiIsICZfUHlJT19Db252ZXJ0U3NpemVfdCwgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICByZXR1cm4gZmlsZWlvX3JlYWRhbGwoc2VsZik7CiAgICAgfQogCi0gICAgYnl0ZXMgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzaXplKTsKKyAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSk7CiAgICAgaWYgKGJ5dGVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHB0ciA9IFB5U3RyaW5nX0FTX1NUUklORyhieXRlcyk7CisgICAgcHRyID0gUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpOwogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGVycm5vID0gMDsKLSAgICBuID0gcmVhZChzZWxmLT5mZCwgcHRyLCBzaXplKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChfUHlWZXJpZnlfZmQoc2VsZi0+ZmQpKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcHRyLCBzaXplKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9IGVsc2UKKyAgICAgICAgbiA9IC0xOwogCiAgICAgaWYgKG4gPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCiAgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwpAQCAtNTE2LDcgKzY0MCw3IEBACiAgICAgfQogCiAgICAgaWYgKG4gIT0gc2l6ZSkgewotICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmYnl0ZXMsIG4pIDwgMCkgeworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZieXRlcywgbikgPCAwKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTUyNiw3ICs2NTAsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX3dyaXRlKFB5RmlsZUlPT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2ZpbGVpb193cml0ZShmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X2J1ZmZlciBwYnVmOwogICAgIFB5X3NzaXplX3QgbjsKQEAgLTUzOSwxMCArNjYzLDEzIEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKiIsICZwYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZXJybm8gPSAwOwotICAgIG4gPSB3cml0ZShzZWxmLT5mZCwgcGJ1Zi5idWYsIHBidWYubGVuKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChfUHlWZXJpZnlfZmQoc2VsZi0+ZmQpKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIHBidWYuYnVmLCBwYnVmLmxlbik7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSBlbHNlCisgICAgICAgIG4gPSAtMTsKIAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogCkBAIC01NTgsMTIgKzY4NSw2IEBACiAKIC8qIFhYWCBXaW5kb3dzIHN1cHBvcnQgYmVsb3cgaXMgbGlrZWx5IGluY29tcGxldGUgKi8KIAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKLXR5cGVkZWYgUFlfTE9OR19MT05HIFB5X29mZl90OwotI2Vsc2UKLXR5cGVkZWYgb2ZmX3QgUHlfb2ZmX3Q7Ci0jZW5kaWYKLQogLyogQ3JpYmJlZCBmcm9tIHBvc2l4X2xzZWVrKCkgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBwb3J0YWJsZV9sc2VlayhpbnQgZmQsIFB5T2JqZWN0ICpwb3NvYmosIGludCB3aGVuY2UpCkBAIC01NzksNyArNzAwLDcgQEAKICNpZiBTRUVLX0NVUiAhPSAxCiAgICAgY2FzZSAxOiB3aGVuY2UgPSBTRUVLX0NVUjsgYnJlYWs7CiAjZW5kaWYKLSNpZiBTRUVMX0VORCAhPSAyCisjaWYgU0VFS19FTkQgIT0gMgogICAgIGNhc2UgMjogd2hlbmNlID0gU0VFS19FTkQ7IGJyZWFrOwogI2VuZGlmCiAgICAgfQpAQCAtNjAxLDEzICs3MjIsMTYgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQotICAgIHJlcyA9IF9sc2Vla2k2NChmZCwgcG9zLCB3aGVuY2UpOworICAgICAgICByZXMgPSBfbHNlZWtpNjQoZmQsIHBvcywgd2hlbmNlKTsKICNlbHNlCi0gICAgcmVzID0gbHNlZWsoZmQsIHBvcywgd2hlbmNlKTsKKyAgICAgICAgcmVzID0gbHNlZWsoZmQsIHBvcywgd2hlbmNlKTsKICNlbmRpZgotICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSBlbHNlCisgICAgICAgIHJlcyA9IC0xOwogICAgIGlmIChyZXMgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogCkBAIC02MTksNyArNzQzLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19zZWVrKFB5RmlsZUlPT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2ZpbGVpb19zZWVrKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnBvc29iajsKICAgICBpbnQgd2hlbmNlID0gMDsKQEAgLTYzNCw3ICs3NTgsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX3RlbGwoUHlGaWxlSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorZmlsZWlvX3RlbGwoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwpAQCAtNjQ0LDcgKzc2OCw3IEBACiAKICNpZmRlZiBIQVZFX0ZUUlVOQ0FURQogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb190cnVuY2F0ZShQeUZpbGVJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitmaWxlaW9fdHJ1bmNhdGUoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcG9zb2JqID0gTlVMTDsgLyogdGhlIG5ldyBzaXplIHdhbnRlZCBieSB0aGUgdXNlciAqLwogI2lmbmRlZiBNU19XSU5ET1dTCkBAIC03NDYsNyArODcwLDcgQEAKICNlbmRpZiAvKiBIQVZFX0ZUUlVOQ0FURSAqLwogCiBzdGF0aWMgY2hhciAqCi1tb2RlX3N0cmluZyhQeUZpbGVJT09iamVjdCAqc2VsZikKK21vZGVfc3RyaW5nKGZpbGVpbyAqc2VsZikKIHsKICAgICBpZiAoc2VsZi0+cmVhZGFibGUpIHsKICAgICAgICAgaWYgKHNlbGYtPndyaXRhYmxlKQpAQCAtNzU5LDE3ICs4ODMsMzcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19yZXByKFB5RmlsZUlPT2JqZWN0ICpzZWxmKQorZmlsZWlvX3JlcHIoZmlsZWlvICpzZWxmKQogewotICAgIGlmIChzZWxmLT5mZCA8IDApCi0gICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tRm9ybWF0KCJfZmlsZWlvLl9GaWxlSU8oLTEpIik7CisgICAgUHlPYmplY3QgKm5hbWVvYmosICpyZXM7CiAKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbUZvcm1hdCgiX2ZpbGVpby5fRmlsZUlPKCVkLCAnJXMnKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmQsIG1vZGVfc3RyaW5nKHNlbGYpKTsKKyAgICBpZiAoc2VsZi0+ZmQgPCAwKQorICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbUZvcm1hdCgiPF9pby5GaWxlSU8gW2Nsb3NlZF0+Iik7CisKKyAgICBuYW1lb2JqID0gUHlPYmplY3RfR2V0QXR0clN0cmluZygoUHlPYmplY3QgKikgc2VsZiwgIm5hbWUiKTsKKyAgICBpZiAobmFtZW9iaiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXMgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCI8X2lvLkZpbGVJTyBmZD0lZCBtb2RlPSclcyc+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmQsIG1vZGVfc3RyaW5nKHNlbGYpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXByID0gUHlPYmplY3RfUmVwcihuYW1lb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG5hbWVvYmopOworICAgICAgICBpZiAocmVwciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJlcyA9IFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxfaW8uRmlsZUlPIG5hbWU9JXMgbW9kZT0nJXMnPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhyZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9zdHJpbmcoc2VsZikpOworICAgICAgICBQeV9ERUNSRUYocmVwcik7CisgICAgfQorICAgIHJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9faXNhdHR5KFB5RmlsZUlPT2JqZWN0ICpzZWxmKQorZmlsZWlvX2lzYXR0eShmaWxlaW8gKnNlbGYpCiB7CiAgICAgbG9uZyByZXM7CiAKQEAgLTgzOCw3ICs5ODIsNyBAQAogInRlbGwoKSAtPiBpbnQuICBDdXJyZW50IGZpbGUgcG9zaXRpb24iKTsKIAogUHlEb2NfU1RSVkFSKHJlYWRpbnRvX2RvYywKLSJyZWFkaW50bygpIC0+IFVuZG9jdW1lbnRlZC4gIERvbid0IHVzZSB0aGlzOyBpdCBtYXkgZ28gYXdheS4iKTsKKyJyZWFkaW50bygpIC0+IFNhbWUgYXMgUmF3SU9CYXNlLnJlYWRpbnRvKCkuIik7CiAKIFB5RG9jX1NUUlZBUihjbG9zZV9kb2MsCiAiY2xvc2UoKSAtPiBOb25lLiAgQ2xvc2UgdGhlIGZpbGUuXG4iCkBAIC04ODAsMjEgKzEwMjQsMjEgQEAKIC8qICdjbG9zZWQnIGFuZCAnbW9kZScgYXJlIGF0dHJpYnV0ZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMuICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1nZXRfY2xvc2VkKFB5RmlsZUlPT2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQorZ2V0X2Nsb3NlZChmaWxlaW8gKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygobG9uZykoc2VsZi0+ZmQgPCAwKSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1nZXRfY2xvc2VmZChQeUZpbGVJT09iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKK2dldF9jbG9zZWZkKGZpbGVpbyAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKChsb25nKShzZWxmLT5jbG9zZWZkKSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1nZXRfbW9kZShQeUZpbGVJT09iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKK2dldF9tb2RlKGZpbGVpbyAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhtb2RlX3N0cmluZyhzZWxmKSk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKG1vZGVfc3RyaW5nKHNlbGYpKTsKIH0KIAogc3RhdGljIFB5R2V0U2V0RGVmIGZpbGVpb19nZXRzZXRsaXN0W10gPSB7CkBAIC05MDIsMTkgKzEwNDYsMTkgQEAKICAgICB7ImNsb3NlZmQiLCAoZ2V0dGVyKWdldF9jbG9zZWZkLCBOVUxMLAogICAgICAgICAiVHJ1ZSBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUgY2xvc2VkIn0sCiAgICAgeyJtb2RlIiwgKGdldHRlcilnZXRfbW9kZSwgTlVMTCwgIlN0cmluZyBnaXZpbmcgdGhlIGZpbGUgbW9kZSJ9LAotICAgIHswfSwKKyAgICB7TlVMTH0sCiB9OwogCiBQeVR5cGVPYmplY3QgUHlGaWxlSU9fVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX0ZpbGVJTyIsCi0gICAgc2l6ZW9mKFB5RmlsZUlPT2JqZWN0KSwKKyAgICAiX2lvLkZpbGVJTyIsCisgICAgc2l6ZW9mKGZpbGVpbyksCiAgICAgMCwKICAgICAoZGVzdHJ1Y3RvcilmaWxlaW9fZGVhbGxvYywgICAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwogICAgIChyZXByZnVuYylmaWxlaW9fcmVwciwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwpAQCAtOTI1LDEyICsxMDY5LDEzIEBACiAgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICAgICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICBmaWxlaW9fZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgKHRyYXZlcnNlcHJvYylmaWxlaW9fdHJhdmVyc2UsICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KWZpbGVpb19jbGVhciwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAgb2Zmc2V0b2YoUHlGaWxlSU9PYmplY3QsIHdlYWtyZWZsaXN0KSwgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIG9mZnNldG9mKGZpbGVpbywgd2Vha3JlZmxpc3QpLCAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIGZpbGVpb19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwpAQCAtOTQwLDI4ICsxMDg1LDkgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgb2Zmc2V0b2YoZmlsZWlvLCBkaWN0KSwgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCiAgICAgZmlsZWlvX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIGZpbGVpb19uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCi0gICAgUHlPYmplY3RfRGVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgUHlPYmplY3RfR0NfRGVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwotCi1zdGF0aWMgUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXSA9IHsKLSAgICB7TlVMTCwgTlVMTH0KLX07Ci0KLVB5TU9ESU5JVF9GVU5DCi1pbml0X2ZpbGVpbyh2b2lkKQotewotICAgIFB5T2JqZWN0ICptOyAgICAgICAgLyogYSBtb2R1bGUgb2JqZWN0ICovCi0KLSAgICBtID0gUHlfSW5pdE1vZHVsZTMoIl9maWxlaW8iLCBtb2R1bGVfbWV0aG9kcywKLSAgICAgICAgICAgICAgICAgICAgICAgIkZhc3QgaW1wbGVtZW50YXRpb24gb2YgaW8uRmlsZUlPLiIpOwotICAgIGlmIChtID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUZpbGVJT19UeXBlKSA8IDApCi0gICAgICAgIHJldHVybjsKLSAgICBQeV9JTkNSRUYoJlB5RmlsZUlPX1R5cGUpOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX0ZpbGVJTyIsIChQeU9iamVjdCAqKSAmUHlGaWxlSU9fVHlwZSk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9pb2Jhc2UuYyBiL01vZHVsZXMvX2lvL2lvYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YzAwN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19pby9pb2Jhc2UuYwpAQCAtMCwwICsxLDg4NSBAQAorLyoKKyAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSS9PIGFic3RyYWN0IGJhc2UgY2xhc3NlcyBoaWVyYXJjaHkKKyAgICBhcyBkZWZpbmVkIGJ5IFBFUCAzMTE2IC0gIk5ldyBJL08iCisgICAgCisgICAgQ2xhc3NlcyBkZWZpbmVkIGhlcmU6IElPQmFzZSwgUmF3SU9CYXNlLgorICAgIAorICAgIFdyaXR0ZW4gYnkgQW1hdXJ5IEZvcmdlb3QgZCdBcmMgYW5kIEFudG9pbmUgUGl0cm91CisqLworCisKKyNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgorI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgorI2luY2x1ZGUgIl9pb21vZHVsZS5oIgorCisvKgorICogSU9CYXNlIGNsYXNzLCBhbiBhYnN0cmFjdCBjbGFzcworICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgCisgICAgUHlPYmplY3QgKmRpY3Q7CisgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OworfSBpb2Jhc2U7CisKK1B5RG9jX1NUUlZBUihpb2Jhc2VfZG9jLAorICAgICJUaGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYWxsIEkvTyBjbGFzc2VzLCBhY3Rpbmcgb24gc3RyZWFtcyBvZlxuIgorICAgICJieXRlcy4gVGhlcmUgaXMgbm8gcHVibGljIGNvbnN0cnVjdG9yLlxuIgorICAgICJcbiIKKyAgICAiVGhpcyBjbGFzcyBwcm92aWRlcyBkdW1teSBpbXBsZW1lbnRhdGlvbnMgZm9yIG1hbnkgbWV0aG9kcyB0aGF0XG4iCisgICAgImRlcml2ZWQgY2xhc3NlcyBjYW4gb3ZlcnJpZGUgc2VsZWN0aXZlbHk7IHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uc1xuIgorICAgICJyZXByZXNlbnQgYSBmaWxlIHRoYXQgY2Fubm90IGJlIHJlYWQsIHdyaXR0ZW4gb3Igc2Vla2VkLlxuIgorICAgICJcbiIKKyAgICAiRXZlbiB0aG91Z2ggSU9CYXNlIGRvZXMgbm90IGRlY2xhcmUgcmVhZCwgcmVhZGludG8sIG9yIHdyaXRlIGJlY2F1c2VcbiIKKyAgICAidGhlaXIgc2lnbmF0dXJlcyB3aWxsIHZhcnksIGltcGxlbWVudGF0aW9ucyBhbmQgY2xpZW50cyBzaG91bGRcbiIKKyAgICAiY29uc2lkZXIgdGhvc2UgbWV0aG9kcyBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UuIEFsc28sIGltcGxlbWVudGF0aW9uc1xuIgorICAgICJtYXkgcmFpc2UgYSBJT0Vycm9yIHdoZW4gb3BlcmF0aW9ucyB0aGV5IGRvIG5vdCBzdXBwb3J0IGFyZSBjYWxsZWQuXG4iCisgICAgIlxuIgorICAgICJUaGUgYmFzaWMgdHlwZSB1c2VkIGZvciBiaW5hcnkgZGF0YSByZWFkIGZyb20gb3Igd3JpdHRlbiB0byBhIGZpbGUgaXNcbiIKKyAgICAiYnl0ZXMuIGJ5dGVhcnJheXMgYXJlIGFjY2VwdGVkIHRvbywgYW5kIGluIHNvbWUgY2FzZXMgKHN1Y2ggYXNcbiIKKyAgICAicmVhZGludG8pIG5lZWRlZC4gVGV4dCBJL08gY2xhc3NlcyB3b3JrIHdpdGggc3RyIGRhdGEuXG4iCisgICAgIlxuIgorICAgICJOb3RlIHRoYXQgY2FsbGluZyBhbnkgbWV0aG9kIChldmVuIGlucXVpcmllcykgb24gYSBjbG9zZWQgc3RyZWFtIGlzXG4iCisgICAgInVuZGVmaW5lZC4gSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSBJT0Vycm9yIGluIHRoaXMgY2FzZS5cbiIKKyAgICAiXG4iCisgICAgIklPQmFzZSAoYW5kIGl0cyBzdWJjbGFzc2VzKSBzdXBwb3J0IHRoZSBpdGVyYXRvciBwcm90b2NvbCwgbWVhbmluZ1xuIgorICAgICJ0aGF0IGFuIElPQmFzZSBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgeWllbGRpbmcgdGhlIGxpbmVzIGluIGFcbiIKKyAgICAic3RyZWFtLlxuIgorICAgICJcbiIKKyAgICAiSU9CYXNlIGFsc28gc3VwcG9ydHMgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuIEluIHRoaXMgZXhhbXBsZSxcbiIKKyAgICAiZnAgaXMgY2xvc2VkIGFmdGVyIHRoZSBzdWl0ZSBvZiB0aGUgd2l0aCBzdGF0bWVudCBpcyBjb21wbGV0ZTpcbiIKKyAgICAiXG4iCisgICAgIndpdGggb3Blbignc3BhbS50eHQnLCAncicpIGFzIGZwOlxuIgorICAgICIgICAgZnAud3JpdGUoJ1NwYW0gYW5kIGVnZ3MhJylcbiIpOworCisvKiBVc2UgdGhpcyBtYWNybyB3aGVuZXZlciB5b3Ugd2FudCB0byBjaGVjayB0aGUgaW50ZXJuYWwgYGNsb3NlZGAgc3RhdHVzCisgICBvZiB0aGUgSU9CYXNlIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgdmlydHVhbCBgY2xvc2VkYCBhdHRyaWJ1dGUgYXMgcmV0dXJuZWQKKyAgIGJ5IHdoYXRldmVyIHN1YmNsYXNzLiAqLworCisjZGVmaW5lIElTX0NMT1NFRChzZWxmKSBcCisgICAgUHlPYmplY3RfSGFzQXR0clN0cmluZyhzZWxmLCAiX19JT0Jhc2VfY2xvc2VkIikKKworLyogSW50ZXJuYWwgbWV0aG9kcyAqLworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV91bnN1cHBvcnRlZChjb25zdCBjaGFyICptZXNzYWdlKQoreworICAgIFB5RXJyX1NldFN0cmluZyhfUHlJT191bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOworICAgIHJldHVybiBOVUxMOworfQorCisvKiBQb3NpdGlvbm5pbmcgKi8KKworUHlEb2NfU1RSVkFSKGlvYmFzZV9zZWVrX2RvYywKKyAgICAiQ2hhbmdlIHN0cmVhbSBwb3NpdGlvbi5cbiIKKyAgICAiXG4iCisgICAgIkNoYW5nZSB0aGUgc3RyZWFtIHBvc2l0aW9uIHRvIGJ5dGUgb2Zmc2V0IG9mZnNldC4gb2Zmc2V0IGlzXG4iCisgICAgImludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgd2hlbmNlLiAgVmFsdWVzXG4iCisgICAgImZvciB3aGVuY2UgYXJlOlxuIgorICAgICJcbiIKKyAgICAiKiAwIC0tIHN0YXJ0IG9mIHN0cmVhbSAodGhlIGRlZmF1bHQpOyBvZmZzZXQgc2hvdWxkIGJlIHplcm8gb3IgcG9zaXRpdmVcbiIKKyAgICAiKiAxIC0tIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uOyBvZmZzZXQgbWF5IGJlIG5lZ2F0aXZlXG4iCisgICAgIiogMiAtLSBlbmQgb2Ygc3RyZWFtOyBvZmZzZXQgaXMgdXN1YWxseSBuZWdhdGl2ZVxuIgorICAgICJcbiIKKyAgICAiUmV0dXJuIHRoZSBuZXcgYWJzb2x1dGUgcG9zaXRpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2Vfc2VlayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIGlvYmFzZV91bnN1cHBvcnRlZCgic2VlayIpOworfQorCitQeURvY19TVFJWQVIoaW9iYXNlX3RlbGxfZG9jLAorICAgICAgICAgICAgICJSZXR1cm4gY3VycmVudCBzdHJlYW0gcG9zaXRpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfdGVsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZiwgInNlZWsiLCAiaWkiLCAwLCAxKTsKK30KKworUHlEb2NfU1RSVkFSKGlvYmFzZV90cnVuY2F0ZV9kb2MsCisgICAgIlRydW5jYXRlIGZpbGUgdG8gc2l6ZSBieXRlcy5cbiIKKyAgICAiXG4iCisgICAgIkZpbGUgcG9pbnRlciBpcyBsZWZ0IHVuY2hhbmdlZC4gIFNpemUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgSU9cbiIKKyAgICAicG9zaXRpb24gYXMgcmVwb3J0ZWQgYnkgdGVsbCgpLiAgUmV0dXJucyB0aGUgbmV3IHNpemUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfdHJ1bmNhdGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBpb2Jhc2VfdW5zdXBwb3J0ZWQoInRydW5jYXRlIik7Cit9CisKKy8qIEZsdXNoIGFuZCBjbG9zZSBtZXRob2RzICovCisKK1B5RG9jX1NUUlZBUihpb2Jhc2VfZmx1c2hfZG9jLAorICAgICJGbHVzaCB3cml0ZSBidWZmZXJzLCBpZiBhcHBsaWNhYmxlLlxuIgorICAgICJcbiIKKyAgICAiVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlYWQtb25seSBhbmQgbm9uLWJsb2NraW5nIHN0cmVhbXMuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV9mbHVzaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgLyogWFhYIFNob3VsZCB0aGlzIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4/Pz8gKi8KKyAgICBpZiAoSVNfQ0xPU0VEKHNlbGYpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZS4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoaW9iYXNlX2Nsb3NlX2RvYywKKyAgICAiRmx1c2ggYW5kIGNsb3NlIHRoZSBJTyBvYmplY3QuXG4iCisgICAgIlxuIgorICAgICJUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgY2xvc2VkLlxuIik7CisKK3N0YXRpYyBpbnQKK2lvYmFzZV9jbG9zZWQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBpbnQgY2xvc2VkOworICAgIC8qIFRoaXMgZ2V0cyB0aGUgZGVyaXZlZCBhdHRyaWJ1dGUsIHdoaWNoIGlzICpub3QqIF9fSU9CYXNlX2Nsb3NlZAorICAgICAgIGluIG1vc3QgY2FzZXMhICovCisgICAgcmVzID0gUHlPYmplY3RfR2V0QXR0cihzZWxmLCBfUHlJT19zdHJfY2xvc2VkKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIGNsb3NlZCA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIHJldHVybiBjbG9zZWQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfY2xvc2VkX2dldChQeU9iamVjdCAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKElTX0NMT1NFRChzZWxmKSk7Cit9CisKK1B5T2JqZWN0ICoKK19QeUlPQmFzZV9jaGVja19jbG9zZWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGlmIChpb2Jhc2VfY2xvc2VkKHNlbGYpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZS4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChhcmdzID09IFB5X1RydWUpCisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIGVsc2UKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qIFhYWDogSU9CYXNlIHRoaW5rcyBpdCBoYXMgdG8gbWFpbnRhaW4gaXRzIG93biBpbnRlcm5hbCBzdGF0ZSBpbgorICAgYF9fSU9CYXNlX2Nsb3NlZGAgYW5kIGNhbGwgZmx1c2goKSBieSBpdHNlbGYsIGJ1dCBpdCBpcyByZWR1bmRhbnQgd2l0aAorICAgd2hhdGV2ZXIgYmVoYXZpb3VyIGEgbm9uLXRyaXZpYWwgZGVyaXZlZCBjbGFzcyB3aWxsIGltcGxlbWVudC4gKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV9jbG9zZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIGlmIChJU19DTE9TRUQoc2VsZikpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZiwgX1B5SU9fc3RyX2ZsdXNoLCBOVUxMKTsKKyAgICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKHNlbGYsICJfX0lPQmFzZV9jbG9zZWQiLCBQeV9UcnVlKTsKKyAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X1hERUNSRUYocmVzKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyogRmluYWxpemF0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gc3VwcG9ydCAqLworCitpbnQKK19QeUlPQmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqcmVzOworICAgIFB5T2JqZWN0ICp0cCwgKnYsICp0YjsKKyAgICBpbnQgY2xvc2VkID0gMTsKKyAgICBpbnQgaXNfem9tYmllOworCisgICAgLyogSWYgX1B5SU9CYXNlX2ZpbmFsaXplKCkgaXMgY2FsbGVkIGZyb20gYSBkZXN0cnVjdG9yLCB3ZSBuZWVkIHRvCisgICAgICAgcmVzdXJyZWN0IHRoZSBvYmplY3QgYXMgY2FsbGluZyBjbG9zZSgpIGNhbiBpbnZva2UgYXJiaXRyYXJ5IGNvZGUuICovCisgICAgaXNfem9tYmllID0gKFB5X1JFRkNOVChzZWxmKSA9PSAwKTsKKyAgICBpZiAoaXNfem9tYmllKSB7CisgICAgICAgICsrUHlfUkVGQ05UKHNlbGYpOworICAgIH0KKyAgICBQeUVycl9GZXRjaCgmdHAsICZ2LCAmdGIpOworICAgIC8qIElmIGBjbG9zZWRgIGRvZXNuJ3QgZXhpc3Qgb3IgY2FuJ3QgYmUgZXZhbHVhdGVkIGFzIGJvb2wsIHRoZW4gdGhlCisgICAgICAgb2JqZWN0IGlzIHByb2JhYmx5IGluIGFuIHVudXNhYmxlIHN0YXRlLCBzbyBpZ25vcmUuICovCisgICAgcmVzID0gUHlPYmplY3RfR2V0QXR0cihzZWxmLCBfUHlJT19zdHJfY2xvc2VkKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgZWxzZSB7CisgICAgICAgIGNsb3NlZCA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOworICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgaWYgKGNsb3NlZCA9PSAtMSkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIGlmIChjbG9zZWQgPT0gMCkgeworICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygoUHlPYmplY3QgKikgc2VsZiwgX1B5SU9fc3RyX2Nsb3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIC8qIFNpbGVuY2luZyBJL08gZXJyb3JzIGlzIGJhZCwgYnV0IHByaW50aW5nIHNwdXJpb3VzIHRyYWNlYmFja3MgaXMKKyAgICAgICAgICAgZXF1YWxseSBhcyBiYWQsIGFuZCBwb3RlbnRpYWxseSBtb3JlIGZyZXF1ZW50IChiZWNhdXNlIG9mCisgICAgICAgICAgIHNodXRkb3duIGlzc3VlcykuICovCisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgIH0KKyAgICBQeUVycl9SZXN0b3JlKHRwLCB2LCB0Yik7CisgICAgaWYgKGlzX3pvbWJpZSkgeworICAgICAgICBpZiAoLS1QeV9SRUZDTlQoc2VsZikgIT0gMCkgeworICAgICAgICAgICAgLyogVGhlIG9iamVjdCBsaXZlcyBhZ2Fpbi4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHRha2VuIGZyb20KKyAgICAgICAgICAgICAgIHNsb3RfdHBfZGVsIGluIHR5cGVvYmplY3QuYy4gKi8KKyAgICAgICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gUHlfUkVGQ05UKHNlbGYpOworICAgICAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKKyAgICAgICAgICAgIFB5X1JFRkNOVChzZWxmKSA9IHJlZmNudDsKKyAgICAgICAgICAgIC8qIElmIFB5X1JFRl9ERUJVRywgX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgX1B5X1JlZlRvdGFsLCBzbworICAgICAgICAgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgICAgICAgICBfUHlfREVDX1JFRlRPVEFMOworICAgICAgICAgICAgLyogSWYgUHlfVFJBQ0VfUkVGUywgX1B5X05ld1JlZmVyZW5jZSByZS1hZGRlZCBzZWxmIHRvIHRoZSBvYmplY3QKKyAgICAgICAgICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAgICAgICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCisgICAgICAgICAgICAgKiBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCB0cF9hbGxvY3M6ICBib3RoIG9mIHRob3NlIG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAqIHVuZG9uZS4KKyAgICAgICAgICAgICAqLworI2lmZGVmIENPVU5UX0FMTE9DUworICAgICAgICAgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9mcmVlczsKKyAgICAgICAgICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2lvYmFzZV90cmF2ZXJzZShpb2Jhc2UgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citpb2Jhc2VfY2xlYXIoaW9iYXNlICpzZWxmKQoreworICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCisvKiBEZXN0cnVjdG9yICovCisKK3N0YXRpYyB2b2lkCitpb2Jhc2VfZGVhbGxvYyhpb2Jhc2UgKnNlbGYpCit7CisgICAgLyogTk9URTogc2luY2UgSU9CYXNlT2JqZWN0IGhhcyBpdHMgb3duIGRpY3QsIFB5dGhvbi1kZWZpbmVkIGF0dHJpYnV0ZXMKKyAgICAgICBhcmUgc3RpbGwgYXZhaWxhYmxlIGhlcmUgZm9yIGNsb3NlKCkgdG8gdXNlLgorICAgICAgIEhvd2V2ZXIsIGlmIHRoZSBkZXJpdmVkIGNsYXNzIGRlY2xhcmVzIGEgX19zbG90c19fLCB0aG9zZSBzbG90cyBhcmUKKyAgICAgICBhbHJlYWR5IGdvbmUuCisgICAgKi8KKyAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApIHsKKyAgICAgICAgLyogV2hlbiBjYWxsZWQgZnJvbSBhIGhlYXAgdHlwZSdzIGRlYWxsb2MsIHRoZSB0eXBlIHdpbGwgYmUKKyAgICAgICAgICAgZGVjcmVmJ2VkIG9uIHJldHVybiAoc2VlIGUuZy4gc3VidHlwZV9kZWFsbG9jIGluIHR5cGVvYmplY3QuYykuICovCisgICAgICAgIGlmIChQeVR5cGVfSGFzRmVhdHVyZShQeV9UWVBFKHNlbGYpLCBQeV9UUEZMQUdTX0hFQVBUWVBFKSkKKyAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UWVBFKHNlbGYpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKKyAgICBpZiAoc2VsZi0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CisgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZSgoUHlPYmplY3QgKikgc2VsZik7Cit9CisKKy8qIElucXVpcnkgbWV0aG9kcyAqLworCitQeURvY19TVFJWQVIoaW9iYXNlX3NlZWthYmxlX2RvYywKKyAgICAiUmV0dXJuIHdoZXRoZXIgb2JqZWN0IHN1cHBvcnRzIHJhbmRvbSBhY2Nlc3MuXG4iCisgICAgIlxuIgorICAgICJJZiBGYWxzZSwgc2VlaygpLCB0ZWxsKCkgYW5kIHRydW5jYXRlKCkgd2lsbCByYWlzZSBJT0Vycm9yLlxuIgorICAgICJUaGlzIG1ldGhvZCBtYXkgbmVlZCB0byBkbyBhIHRlc3Qgc2VlaygpLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX3NlZWthYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9SRVRVUk5fRkFMU0U7Cit9CisKK1B5T2JqZWN0ICoKK19QeUlPQmFzZV9jaGVja19zZWVrYWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlcyAgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLCBfUHlJT19zdHJfc2Vla2FibGUsIE5VTEwpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHJlcyAhPSBQeV9UcnVlKSB7CisgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLCAiRmlsZSBvciBzdHJlYW0gaXMgbm90IHNlZWthYmxlLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGFyZ3MgPT0gUHlfVHJ1ZSkgeworICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworUHlEb2NfU1RSVkFSKGlvYmFzZV9yZWFkYWJsZV9kb2MsCisgICAgIlJldHVybiB3aGV0aGVyIG9iamVjdCB3YXMgb3BlbmVkIGZvciByZWFkaW5nLlxuIgorICAgICJcbiIKKyAgICAiSWYgRmFsc2UsIHJlYWQoKSB3aWxsIHJhaXNlIElPRXJyb3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfcmVhZGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X1JFVFVSTl9GQUxTRTsKK30KKworLyogTWF5IGJlIGNhbGxlZCB3aXRoIGFueSBvYmplY3QgKi8KK1B5T2JqZWN0ICoKK19QeUlPQmFzZV9jaGVja19yZWFkYWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlcyAgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLCBfUHlJT19zdHJfcmVhZGFibGUsIE5VTEwpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHJlcyAhPSBQeV9UcnVlKSB7CisgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLCAiRmlsZSBvciBzdHJlYW0gaXMgbm90IHJlYWRhYmxlLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGFyZ3MgPT0gUHlfVHJ1ZSkgeworICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworUHlEb2NfU1RSVkFSKGlvYmFzZV93cml0YWJsZV9kb2MsCisgICAgIlJldHVybiB3aGV0aGVyIG9iamVjdCB3YXMgb3BlbmVkIGZvciB3cml0aW5nLlxuIgorICAgICJcbiIKKyAgICAiSWYgRmFsc2UsIHJlYWQoKSB3aWxsIHJhaXNlIElPRXJyb3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2Vfd3JpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X1JFVFVSTl9GQUxTRTsKK30KKworLyogTWF5IGJlIGNhbGxlZCB3aXRoIGFueSBvYmplY3QgKi8KK1B5T2JqZWN0ICoKK19QeUlPQmFzZV9jaGVja193cml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlcyAgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLCBfUHlJT19zdHJfd3JpdGFibGUsIE5VTEwpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHJlcyAhPSBQeV9UcnVlKSB7CisgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLCAiRmlsZSBvciBzdHJlYW0gaXMgbm90IHdyaXRhYmxlLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGFyZ3MgPT0gUHlfVHJ1ZSkgeworICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworLyogQ29udGV4dCBtYW5hZ2VyICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfZW50ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfY2xvc2VkKHNlbGYsIFB5X1RydWUpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX2V4aXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLCBfUHlJT19zdHJfY2xvc2UsIE5VTEwpOworfQorCisvKiBMb3dlci1sZXZlbCBBUElzICovCisKKy8qIFhYWCBTaG91bGQgdGhlc2UgYmUgcHJlc2VudCBldmVuIGlmIHVuaW1wbGVtZW50ZWQ/ICovCisKK1B5RG9jX1NUUlZBUihpb2Jhc2VfZmlsZW5vX2RvYywKKyAgICAiUmV0dXJucyB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBpZiBvbmUgZXhpc3RzLlxuIgorICAgICJcbiIKKyAgICAiQW4gSU9FcnJvciBpcyByYWlzZWQgaWYgdGhlIElPIG9iamVjdCBkb2VzIG5vdCB1c2UgYSBmaWxlIGRlc2NyaXB0b3IuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV9maWxlbm8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBpb2Jhc2VfdW5zdXBwb3J0ZWQoImZpbGVubyIpOworfQorCitQeURvY19TVFJWQVIoaW9iYXNlX2lzYXR0eV9kb2MsCisgICAgIlJldHVybiB3aGV0aGVyIHRoaXMgaXMgYW4gJ2ludGVyYWN0aXZlJyBzdHJlYW0uXG4iCisgICAgIlxuIgorICAgICJSZXR1cm4gRmFsc2UgaWYgaXQgY2FuJ3QgYmUgZGV0ZXJtaW5lZC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX2lzYXR0eShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaWYgKF9QeUlPQmFzZV9jaGVja19jbG9zZWQoc2VsZiwgUHlfVHJ1ZSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfUkVUVVJOX0ZBTFNFOworfQorCisvKiBSZWFkbGluZShzKSBhbmQgd3JpdGVsaW5lcyAqLworCitQeURvY19TVFJWQVIoaW9iYXNlX3JlYWRsaW5lX2RvYywKKyAgICAiUmVhZCBhbmQgcmV0dXJuIGEgbGluZSBmcm9tIHRoZSBzdHJlYW0uXG4iCisgICAgIlxuIgorICAgICJJZiBsaW1pdCBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgbGltaXQgYnl0ZXMgd2lsbCBiZSByZWFkLlxuIgorICAgICJcbiIKKyAgICAiVGhlIGxpbmUgdGVybWluYXRvciBpcyBhbHdheXMgYidcbicgZm9yIGJpbmFyeSBmaWxlczsgZm9yIHRleHRcbiIKKyAgICAiZmlsZXMsIHRoZSBuZXdsaW5lcyBhcmd1bWVudCB0byBvcGVuIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZVxuIgorICAgICJ0ZXJtaW5hdG9yKHMpIHJlY29nbml6ZWQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV9yZWFkbGluZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgLyogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBhIChzbG93aXNoKSByZWFkbGluZSgpLiAqLworCisgICAgUHlfc3NpemVfdCBsaW1pdCA9IC0xOworICAgIGludCBoYXNfcGVlayA9IDA7CisgICAgUHlPYmplY3QgKmJ1ZmZlciwgKnJlc3VsdDsKKyAgICBQeV9zc2l6ZV90IG9sZF9zaXplID0gLTE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJjpyZWFkbGluZSIsICZfUHlJT19Db252ZXJ0U3NpemVfdCwgJmxpbWl0KSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhzZWxmLCAicGVlayIpKQorICAgICAgICBoYXNfcGVlayA9IDE7CisKKyAgICBidWZmZXIgPSBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKTsKKyAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgd2hpbGUgKGxpbWl0IDwgMCB8fCBQeV9TSVpFKGJ1ZmZlcikgPCBsaW1pdCkgeworICAgICAgICBQeV9zc2l6ZV90IG5yZWFkYWhlYWQgPSAxOworICAgICAgICBQeU9iamVjdCAqYjsKKworICAgICAgICBpZiAoaGFzX3BlZWspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZWFkYWhlYWQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYsICJwZWVrIiwgImkiLCAxKTsKKyAgICAgICAgICAgIGlmIChyZWFkYWhlYWQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2socmVhZGFoZWFkKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVlaygpIHNob3VsZCBoYXZlIHJldHVybmVkIGEgYnl0ZXMgb2JqZWN0LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKHJlYWRhaGVhZCktPnRwX25hbWUpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWFkYWhlYWQpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlYWRhaGVhZCkgPiAwKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuID0gMDsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYgPSBQeUJ5dGVzX0FTX1NUUklORyhyZWFkYWhlYWQpOworICAgICAgICAgICAgICAgIGlmIChsaW1pdCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID49IFB5Qnl0ZXNfR0VUX1NJWkUocmVhZGFoZWFkKSB8fCBuID49IGxpbWl0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZltuKytdID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPj0gUHlCeXRlc19HRVRfU0laRShyZWFkYWhlYWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZltuKytdID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBucmVhZGFoZWFkID0gbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZWFkYWhlYWQpOworICAgICAgICB9CisKKyAgICAgICAgYiA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZiwgInJlYWQiLCAibiIsIG5yZWFkYWhlYWQpOworICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soYikpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgYSBieXRlcyBvYmplY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRShiKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoYik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUoYikgPT0gMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBvbGRfc2l6ZSA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKGJ1ZmZlcik7CisgICAgICAgIFB5Qnl0ZUFycmF5X1Jlc2l6ZShidWZmZXIsIG9sZF9zaXplICsgUHlCeXRlc19HRVRfU0laRShiKSk7CisgICAgICAgIG1lbWNweShQeUJ5dGVBcnJheV9BU19TVFJJTkcoYnVmZmVyKSArIG9sZF9zaXplLAorICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYiksIFB5Qnl0ZXNfR0VUX1NJWkUoYikpOworCisgICAgICAgIFB5X0RFQ1JFRihiKTsKKworICAgICAgICBpZiAoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGJ1ZmZlcilbUHlCeXRlQXJyYXlfR0VUX1NJWkUoYnVmZmVyKSAtIDFdID09ICdcbicpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKFB5Qnl0ZUFycmF5X0FTX1NUUklORyhidWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlQXJyYXlfR0VUX1NJWkUoYnVmZmVyKSk7CisgICAgUHlfREVDUkVGKGJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgZmFpbDoKKyAgICBQeV9ERUNSRUYoYnVmZmVyKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV9pdGVyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfY2xvc2VkKHNlbGYsIFB5X1RydWUpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX2l0ZXJuZXh0KFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpsaW5lID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZiwgX1B5SU9fc3RyX3JlYWRsaW5lLCBOVUxMKTsKKworICAgIGlmIChsaW5lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5T2JqZWN0X1NpemUobGluZSkgPT0gMCkgeworICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBsaW5lOworfQorCitQeURvY19TVFJWQVIoaW9iYXNlX3JlYWRsaW5lc19kb2MsCisgICAgIlJldHVybiBhIGxpc3Qgb2YgbGluZXMgZnJvbSB0aGUgc3RyZWFtLlxuIgorICAgICJcbiIKKyAgICAiaGludCBjYW4gYmUgc3BlY2lmaWVkIHRvIGNvbnRyb2wgdGhlIG51bWJlciBvZiBsaW5lcyByZWFkOiBubyBtb3JlXG4iCisgICAgImxpbmVzIHdpbGwgYmUgcmVhZCBpZiB0aGUgdG90YWwgc2l6ZSAoaW4gYnl0ZXMvY2hhcmFjdGVycykgb2YgYWxsXG4iCisgICAgImxpbmVzIHNvIGZhciBleGNlZWRzIGhpbnQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfcmVhZGxpbmVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IGhpbnQgPSAtMSwgbGVuZ3RoID0gMDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6cmVhZGxpbmVzIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmaGludCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGhpbnQgPD0gMCkgeworICAgICAgICAvKiBYWFggc3BlY2lhbC1jYXNpbmcgdGhpcyBtYWRlIHNlbnNlIGluIHRoZSBQeXRob24gdmVyc2lvbiBpbiBvcmRlcgorICAgICAgICAgICB0byByZW1vdmUgdGhlIGJ5dGVjb2RlIGludGVycHJldGF0aW9uIG92ZXJoZWFkLCBidXQgaXQgY291bGQKKyAgICAgICAgICAgcHJvYmFibHkgYmUgcmVtb3ZlZCBoZXJlLiAqLworICAgICAgICBQeU9iamVjdCAqcmV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChyZXN1bHQsICJleHRlbmQiLCAiTyIsIHNlbGYpOworICAgICAgICBpZiAocmV0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHJldCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgUHlPYmplY3QgKmxpbmUgPSBQeUl0ZXJfTmV4dChzZWxmKTsKKyAgICAgICAgaWYgKGxpbmUgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsgLyogU3RvcEl0ZXJhdGlvbiByYWlzZWQgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgbGluZSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGxlbmd0aCArPSBQeU9iamVjdF9TaXplKGxpbmUpOworICAgICAgICBQeV9ERUNSRUYobGluZSk7CisKKyAgICAgICAgaWYgKGxlbmd0aCA+IGhpbnQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV93cml0ZWxpbmVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqbGluZXMsICppdGVyLCAqcmVzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOndyaXRlbGluZXMiLCAmbGluZXMpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfY2xvc2VkKHNlbGYsIFB5X1RydWUpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIobGluZXMpOworICAgIGlmIChpdGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgUHlPYmplY3QgKmxpbmUgPSBQeUl0ZXJfTmV4dChpdGVyKTsKKyAgICAgICAgaWYgKGxpbmUgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIFN0b3AgSXRlcmF0aW9uICovCisgICAgICAgIH0KKworICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLCBfUHlJT19zdHJfd3JpdGUsIGxpbmUsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgfQorICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGlvYmFzZV9tZXRob2RzW10gPSB7CisgICAgeyJzZWVrIiwgaW9iYXNlX3NlZWssIE1FVEhfVkFSQVJHUywgaW9iYXNlX3NlZWtfZG9jfSwKKyAgICB7InRlbGwiLCBpb2Jhc2VfdGVsbCwgTUVUSF9OT0FSR1MsIGlvYmFzZV90ZWxsX2RvY30sCisgICAgeyJ0cnVuY2F0ZSIsIGlvYmFzZV90cnVuY2F0ZSwgTUVUSF9WQVJBUkdTLCBpb2Jhc2VfdHJ1bmNhdGVfZG9jfSwKKyAgICB7ImZsdXNoIiwgaW9iYXNlX2ZsdXNoLCBNRVRIX05PQVJHUywgaW9iYXNlX2ZsdXNoX2RvY30sCisgICAgeyJjbG9zZSIsIGlvYmFzZV9jbG9zZSwgTUVUSF9OT0FSR1MsIGlvYmFzZV9jbG9zZV9kb2N9LAorCisgICAgeyJzZWVrYWJsZSIsIGlvYmFzZV9zZWVrYWJsZSwgTUVUSF9OT0FSR1MsIGlvYmFzZV9zZWVrYWJsZV9kb2N9LAorICAgIHsicmVhZGFibGUiLCBpb2Jhc2VfcmVhZGFibGUsIE1FVEhfTk9BUkdTLCBpb2Jhc2VfcmVhZGFibGVfZG9jfSwKKyAgICB7IndyaXRhYmxlIiwgaW9iYXNlX3dyaXRhYmxlLCBNRVRIX05PQVJHUywgaW9iYXNlX3dyaXRhYmxlX2RvY30sCisKKyAgICB7Il9jaGVja0Nsb3NlZCIsICAgX1B5SU9CYXNlX2NoZWNrX2Nsb3NlZCwgTUVUSF9OT0FSR1N9LAorICAgIHsiX2NoZWNrU2Vla2FibGUiLCBfUHlJT0Jhc2VfY2hlY2tfc2Vla2FibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7Il9jaGVja1JlYWRhYmxlIiwgX1B5SU9CYXNlX2NoZWNrX3JlYWRhYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJfY2hlY2tXcml0YWJsZSIsIF9QeUlPQmFzZV9jaGVja193cml0YWJsZSwgTUVUSF9OT0FSR1N9LAorCisgICAgeyJmaWxlbm8iLCBpb2Jhc2VfZmlsZW5vLCBNRVRIX05PQVJHUywgaW9iYXNlX2ZpbGVub19kb2N9LAorICAgIHsiaXNhdHR5IiwgaW9iYXNlX2lzYXR0eSwgTUVUSF9OT0FSR1MsIGlvYmFzZV9pc2F0dHlfZG9jfSwKKworICAgIHsiX19lbnRlcl9fIiwgaW9iYXNlX2VudGVyLCBNRVRIX05PQVJHU30sCisgICAgeyJfX2V4aXRfXyIsIGlvYmFzZV9leGl0LCBNRVRIX1ZBUkFSR1N9LAorCisgICAgeyJyZWFkbGluZSIsIGlvYmFzZV9yZWFkbGluZSwgTUVUSF9WQVJBUkdTLCBpb2Jhc2VfcmVhZGxpbmVfZG9jfSwKKyAgICB7InJlYWRsaW5lcyIsIGlvYmFzZV9yZWFkbGluZXMsIE1FVEhfVkFSQVJHUywgaW9iYXNlX3JlYWRsaW5lc19kb2N9LAorICAgIHsid3JpdGVsaW5lcyIsIGlvYmFzZV93cml0ZWxpbmVzLCBNRVRIX1ZBUkFSR1N9LAorCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgaW9iYXNlX2dldHNldFtdID0geworICAgIHsiY2xvc2VkIiwgKGdldHRlcilpb2Jhc2VfY2xvc2VkX2dldCwgTlVMTCwgTlVMTH0sCisgICAge05VTEx9Cit9OworCisKK1B5VHlwZU9iamVjdCBQeUlPQmFzZV9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uX0lPQmFzZSIsICAgICAgICAgICAgICAvKnRwX25hbWUqLworICAgIHNpemVvZihpb2Jhc2UpLCAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIChkZXN0cnVjdG9yKWlvYmFzZV9kZWFsbG9jLCAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgaW9iYXNlX2RvYywgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpaW9iYXNlX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KWlvYmFzZV9jbGVhciwgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG9mZnNldG9mKGlvYmFzZSwgd2Vha3JlZmxpc3QpLCAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIGlvYmFzZV9pdGVyLCAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgaW9iYXNlX2l0ZXJuZXh0LCAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgaW9iYXNlX21ldGhvZHMsICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGlvYmFzZV9nZXRzZXQsICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICBvZmZzZXRvZihpb2Jhc2UsIGRpY3QpLCAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKKworCisvKgorICogUmF3SU9CYXNlIGNsYXNzLCBJbmhlcml0cyBmcm9tIElPQmFzZS4KKyAqLworUHlEb2NfU1RSVkFSKHJhd2lvYmFzZV9kb2MsCisgICAgICAgICAgICAgIkJhc2UgY2xhc3MgZm9yIHJhdyBiaW5hcnkgSS9PLiIpOworCisvKgorICogVGhlIHJlYWQoKSBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyByZWFkaW50bygpOyBkZXJpdmVkIGNsYXNzZXMKKyAqIHRoYXQgd2FudCB0byBzdXBwb3J0IHJlYWQoKSBvbmx5IG5lZWQgdG8gaW1wbGVtZW50IHJlYWRpbnRvKCkgYXMgYQorICogcHJpbWl0aXZlIG9wZXJhdGlvbi4gIEluIGdlbmVyYWwsIHJlYWRpbnRvKCkgY2FuIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4KKyAqIHJlYWQoKS4KKyAqCisgKiAoSXQgd291bGQgYmUgdGVtcHRpbmcgdG8gYWxzbyBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHJlYWRpbnRvKCkgaW4KKyAqIHRlcm1zIG9mIHJlYWQoKSwgaW4gY2FzZSB0aGUgbGF0dGVyIGlzIGEgbW9yZSBzdWl0YWJsZSBwcmltaXRpdmUgb3BlcmF0aW9uLAorICogYnV0IHRoYXQgd291bGQgbGVhZCB0byBuYXN0eSByZWN1cnNpb24gaW4gY2FzZSBhIHN1YmNsYXNzIGRvZXNuJ3QgaW1wbGVtZW50CisgKiBlaXRoZXIuKQorKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3Jhd2lvYmFzZV9yZWFkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IG4gPSAtMTsKKyAgICBQeU9iamVjdCAqYiwgKnJlczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46cmVhZCIsICZuKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobiA8IDApCisgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYsICJyZWFkYWxsIiwgTlVMTCk7CisKKyAgICAvKiBUT0RPOiBhbGxvY2F0ZSBhIGJ5dGVzIG9iamVjdCBkaXJlY3RseSBpbnN0ZWFkIGFuZCBtYW51YWxseSBjb25zdHJ1Y3QKKyAgICAgICBhIHdyaXRhYmxlIG1lbW9yeXZpZXcgcG9pbnRpbmcgdG8gaXQuICovCisgICAgYiA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG4pOworICAgIGlmIChiID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZiwgX1B5SU9fc3RyX3JlYWRpbnRvLCBiLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwgfHwgcmVzID09IFB5X05vbmUpIHsKKyAgICAgICAgUHlfREVDUkVGKGIpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIG4gPSBQeU51bWJlcl9Bc1NzaXplX3QocmVzLCBQeUV4Y19WYWx1ZUVycm9yKTsKKyAgICBQeV9ERUNSRUYocmVzKTsKKyAgICBpZiAobiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0RFQ1JFRihiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShQeUJ5dGVBcnJheV9Bc1N0cmluZyhiKSwgbik7CisgICAgUHlfREVDUkVGKGIpOworICAgIHJldHVybiByZXM7Cit9CisKKworUHlEb2NfU1RSVkFSKHJhd2lvYmFzZV9yZWFkYWxsX2RvYywKKyAgICAgICAgICAgICAiUmVhZCB1bnRpbCBFT0YsIHVzaW5nIG11bHRpcGxlIHJlYWQoKSBjYWxsLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorcmF3aW9iYXNlX3JlYWRhbGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCByOworICAgIFB5T2JqZWN0ICpjaHVua3MgPSBQeUxpc3RfTmV3KDApOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgCisgICAgaWYgKGNodW5rcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFB5T2JqZWN0ICpkYXRhID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLCAicmVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaSIsIERFRkFVTFRfQlVGRkVSX1NJWkUpOworICAgICAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjaHVua3MpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGRhdGEpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoY2h1bmtzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZWFkKCkgc2hvdWxkIHJldHVybiBieXRlcyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUoZGF0YSkgPT0gMCkgeworICAgICAgICAgICAgLyogRU9GICovCisgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByID0gUHlMaXN0X0FwcGVuZChjaHVua3MsIGRhdGEpOworICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rcyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHQgPSBfUHlCeXRlc19Kb2luKF9QeUlPX2VtcHR5X2J5dGVzLCBjaHVua3MpOworICAgIFB5X0RFQ1JFRihjaHVua3MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiByYXdpb2Jhc2VfbWV0aG9kc1tdID0geworICAgIHsicmVhZCIsIHJhd2lvYmFzZV9yZWFkLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVhZGFsbCIsIHJhd2lvYmFzZV9yZWFkYWxsLCBNRVRIX05PQVJHUywgcmF3aW9iYXNlX3JlYWRhbGxfZG9jfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK1B5VHlwZU9iamVjdCBQeVJhd0lPQmFzZV9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uX1Jhd0lPQmFzZSIsICAgICAgICAgICAgICAgIC8qdHBfbmFtZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIHJhd2lvYmFzZV9kb2MsICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIHJhd2lvYmFzZV9tZXRob2RzLCAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgJlB5SU9CYXNlX1R5cGUsICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9zdHJpbmdpby5jIGIvTW9kdWxlcy9faW8vc3RyaW5naW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzYxYTI1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9faW8vc3RyaW5naW8uYwpAQCAtMCwwICsxLDg4MiBAQAorI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCisjaW5jbHVkZSAiX2lvbW9kdWxlLmgiCisKKy8qIEltcGxlbWVudGF0aW9uIG5vdGU6IHRoZSBidWZmZXIgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgbG9uZ2VyCisgICB0aGFuIHRoZSBlbmNsb3NlZCBzdHJpbmcsIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgX1B5SU9fZmluZF9saW5lX2VuZGluZy4KKyovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlfVU5JQ09ERSAqYnVmOworICAgIFB5X3NzaXplX3QgcG9zOworICAgIFB5X3NzaXplX3Qgc3RyaW5nX3NpemU7CisgICAgc2l6ZV90IGJ1Zl9zaXplOworCisgICAgY2hhciBvazsgLyogaW5pdGlhbGl6ZWQ/ICovCisgICAgY2hhciBjbG9zZWQ7CisgICAgY2hhciByZWFkdW5pdmVyc2FsOworICAgIGNoYXIgcmVhZHRyYW5zbGF0ZTsKKyAgICBQeU9iamVjdCAqZGVjb2RlcjsKKyAgICBQeU9iamVjdCAqcmVhZG5sOworICAgIFB5T2JqZWN0ICp3cml0ZW5sOworICAgIAorICAgIFB5T2JqZWN0ICpkaWN0OworICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKK30gc3RyaW5naW87CisKKyNkZWZpbmUgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikgXAorICAgIGlmIChzZWxmLT5vayA8PSAwKSB7IFwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICJJL08gb3BlcmF0aW9uIG9uIHVuaW5pdGlhbGl6ZWQgb2JqZWN0Iik7IFwKKyAgICAgICAgcmV0dXJuIE5VTEw7IFwKKyAgICB9CisKKyNkZWZpbmUgQ0hFQ0tfQ0xPU0VEKHNlbGYpIFwKKyAgICBpZiAoc2VsZi0+Y2xvc2VkKSB7IFwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlIik7IFwKKyAgICAgICAgcmV0dXJuIE5VTEw7IFwKKyAgICB9CisKK1B5RG9jX1NUUlZBUihzdHJpbmdpb19kb2MsCisgICAgIlRleHQgSS9PIGltcGxlbWVudGF0aW9uIHVzaW5nIGFuIGluLW1lbW9yeSBidWZmZXIuXG4iCisgICAgIlxuIgorICAgICJUaGUgaW5pdGlhbF92YWx1ZSBhcmd1bWVudCBzZXRzIHRoZSB2YWx1ZSBvZiBvYmplY3QuICBUaGUgbmV3bGluZVxuIgorICAgICJhcmd1bWVudCBpcyBsaWtlIHRoZSBvbmUgb2YgVGV4dElPV3JhcHBlcidzIGNvbnN0cnVjdG9yLiIpOworCisKKy8qIEludGVybmFsIHJvdXRpbmUgZm9yIGNoYW5naW5nIHRoZSBzaXplLCBpbiB0ZXJtcyBvZiBjaGFyYWN0ZXJzLCBvZiB0aGUKKyAgIGJ1ZmZlciBvZiBTdHJpbmdJTyBvYmplY3RzLiAgVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlIHRoYXQgdGhlICdzaXplJworICAgYXJndW1lbnQgaXMgbm9uLW5lZ2F0aXZlLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbnQKK3Jlc2l6ZV9idWZmZXIoc3RyaW5naW8gKnNlbGYsIHNpemVfdCBzaXplKQoreworICAgIC8qIEhlcmUsIHVuc2lnbmVkIHR5cGVzIGFyZSB1c2VkIHRvIGF2b2lkIGRlYWxpbmcgd2l0aCBzaWduZWQgaW50ZWdlcgorICAgICAgIG92ZXJmbG93LCB3aGljaCBpcyB1bmRlZmluZWQgaW4gQy4gKi8KKyAgICBzaXplX3QgYWxsb2MgPSBzZWxmLT5idWZfc2l6ZTsKKyAgICBQeV9VTklDT0RFICpuZXdfYnVmID0gTlVMTDsKKworICAgIGFzc2VydChzZWxmLT5idWYgIT0gTlVMTCk7CisKKyAgICAvKiBSZXNlcnZlIG9uZSBtb3JlIGNoYXIgZm9yIGxpbmUgZW5kaW5nIGRldGVjdGlvbi4gKi8KKyAgICBzaXplID0gc2l6ZSArIDE7CisgICAgLyogRm9yIHNpbXBsaWNpdHksIHN0YXkgaW4gdGhlIHJhbmdlIG9mIHRoZSBzaWduZWQgdHlwZS4gQW55d2F5LCBQeXRob24KKyAgICAgICBkb2Vzbid0IGFsbG93IHN0cmluZ3MgdG8gYmUgbG9uZ2VyIHRoYW4gdGhpcy4gKi8KKyAgICBpZiAoc2l6ZSA+IFBZX1NTSVpFX1RfTUFYKQorICAgICAgICBnb3RvIG92ZXJmbG93OworCisgICAgaWYgKHNpemUgPCBhbGxvYyAvIDIpIHsKKyAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUuICovCisgICAgICAgIGFsbG9jID0gc2l6ZSArIDE7CisgICAgfQorICAgIGVsc2UgaWYgKHNpemUgPCBhbGxvYykgeworICAgICAgICAvKiBXaXRoaW4gYWxsb2NhdGVkIHNpemU7IHF1aWNrIGV4aXQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKHNpemUgPD0gYWxsb2MgKiAxLjEyNSkgeworICAgICAgICAvKiBNb2RlcmF0ZSB1cHNpemU7IG92ZXJhbGxvY2F0ZSBzaW1pbGFyIHRvIGxpc3RfcmVzaXplKCkgKi8KKyAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBNYWpvciB1cHNpemU7IHJlc2l6ZSB1cCB0byBleGFjdCBzaXplICovCisgICAgICAgIGFsbG9jID0gc2l6ZSArIDE7CisgICAgfQorCisgICAgaWYgKGFsbG9jID4gKChzaXplX3QpLTEpIC8gc2l6ZW9mKFB5X1VOSUNPREUpKQorICAgICAgICBnb3RvIG92ZXJmbG93OworICAgIG5ld19idWYgPSAoUHlfVU5JQ09ERSAqKVB5TWVtX1JlYWxsb2Moc2VsZi0+YnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2MgKiBzaXplb2YoUHlfVU5JQ09ERSkpOworICAgIGlmIChuZXdfYnVmID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzZWxmLT5idWZfc2l6ZSA9IGFsbG9jOworICAgIHNlbGYtPmJ1ZiA9IG5ld19idWY7CisKKyAgICByZXR1cm4gMDsKKworICBvdmVyZmxvdzoKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIm5ldyBidWZmZXIgc2l6ZSB0b28gbGFyZ2UiKTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIEludGVybmFsIHJvdXRpbmUgZm9yIHdyaXRpbmcgYSB3aG9sZSBQeVVuaWNvZGUgb2JqZWN0IHRvIHRoZSBidWZmZXIgb2YgYQorICAgU3RyaW5nSU8gb2JqZWN0LiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLTEgb24gZXJyb3IuICovCitzdGF0aWMgUHlfc3NpemVfdAord3JpdGVfc3RyKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIFB5X1VOSUNPREUgKnN0cjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBQeU9iamVjdCAqZGVjb2RlZCA9IE5VTEw7CisgICAgYXNzZXJ0KHNlbGYtPmJ1ZiAhPSBOVUxMKTsKKyAgICBhc3NlcnQoc2VsZi0+cG9zID49IDApOworCisgICAgaWYgKHNlbGYtPmRlY29kZXIgIT0gTlVMTCkgeworICAgICAgICBkZWNvZGVkID0gX1B5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9kZWNvZGUoCisgICAgICAgICAgICBzZWxmLT5kZWNvZGVyLCBvYmosIDEgLyogYWx3YXlzIGZpbmFsICovKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRlY29kZWQgPSBvYmo7CisgICAgICAgIFB5X0lOQ1JFRihkZWNvZGVkKTsKKyAgICB9CisgICAgaWYgKHNlbGYtPndyaXRlbmwpIHsKKyAgICAgICAgUHlPYmplY3QgKnRyYW5zbGF0ZWQgPSBQeVVuaWNvZGVfUmVwbGFjZSgKKyAgICAgICAgICAgIGRlY29kZWQsIF9QeUlPX3N0cl9ubCwgc2VsZi0+d3JpdGVubCwgLTEpOworICAgICAgICBQeV9ERUNSRUYoZGVjb2RlZCk7CisgICAgICAgIGRlY29kZWQgPSB0cmFuc2xhdGVkOworICAgIH0KKyAgICBpZiAoZGVjb2RlZCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKGRlY29kZWQpKTsKKyAgICBzdHIgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShkZWNvZGVkKTsKKyAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX1NJWkUoZGVjb2RlZCk7CisKKyAgICBhc3NlcnQobGVuID49IDApOworCisgICAgLyogVGhpcyBvdmVyZmxvdyBjaGVjayBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBIb3dldmVyLCBpdCBhdm9pZHMgdXMgdG8KKyAgICAgICBkZWFsIHdpdGggZnVua3kgdGhpbmdzIGxpa2UgY29tcGFyaW5nIGFuIHVuc2lnbmVkIGFuZCBhIHNpZ25lZAorICAgICAgIGludGVnZXIuICovCisgICAgaWYgKHNlbGYtPnBvcyA+IFBZX1NTSVpFX1RfTUFYIC0gbGVuKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBwb3NpdGlvbiB0b28gbGFyZ2UiKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICBpZiAoc2VsZi0+cG9zICsgbGVuID4gc2VsZi0+c3RyaW5nX3NpemUpIHsKKyAgICAgICAgaWYgKHJlc2l6ZV9idWZmZXIoc2VsZiwgc2VsZi0+cG9zICsgbGVuKSA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKHNlbGYtPnBvcyA+IHNlbGYtPnN0cmluZ19zaXplKSB7CisgICAgICAgIC8qIEluIGNhc2Ugb2Ygb3ZlcnNlZWssIHBhZCB3aXRoIG51bGwgYnl0ZXMgdGhlIGJ1ZmZlciByZWdpb24gYmV0d2VlbgorICAgICAgICAgICB0aGUgZW5kIG9mIHN0cmVhbSBhbmQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisKKyAgICAgICAgICAwICAgbG8gICAgICBzdHJpbmdfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpCisgICAgICAgICAgfCAgIHw8LS0tdXNlZC0tLT58PC0tLS0tLS0tLS1hdmFpbGFibGUtLS0tLS0tLS0tLT58CisgICAgICAgICAgfCAgIHwgICAgICAgICAgICA8LS10byBwYWQtLT58PC0tLXRvIHdyaXRlLS0tPiAgICB8CisgICAgICAgICAgMCAgIGJ1ZiAgICAgICAgICAgICAgICAgICBwb3NpdG9uCisKKyAgICAgICAgKi8KKyAgICAgICAgbWVtc2V0KHNlbGYtPmJ1ZiArIHNlbGYtPnN0cmluZ19zaXplLCAnXDAnLAorICAgICAgICAgICAgICAgKHNlbGYtPnBvcyAtIHNlbGYtPnN0cmluZ19zaXplKSAqIHNpemVvZihQeV9VTklDT0RFKSk7CisgICAgfQorCisgICAgLyogQ29weSB0aGUgZGF0YSB0byB0aGUgaW50ZXJuYWwgYnVmZmVyLCBvdmVyd3JpdGluZyBzb21lIG9mIHRoZQorICAgICAgIGV4aXN0aW5nIGRhdGEgaWYgc2VsZi0+cG9zIDwgc2VsZi0+c3RyaW5nX3NpemUuICovCisgICAgbWVtY3B5KHNlbGYtPmJ1ZiArIHNlbGYtPnBvcywgc3RyLCBsZW4gKiBzaXplb2YoUHlfVU5JQ09ERSkpOworICAgIHNlbGYtPnBvcyArPSBsZW47CisKKyAgICAvKiBTZXQgdGhlIG5ldyBsZW5ndGggb2YgdGhlIGludGVybmFsIHN0cmluZyBpZiBpdCBoYXMgY2hhbmdlZC4gKi8KKyAgICBpZiAoc2VsZi0+c3RyaW5nX3NpemUgPCBzZWxmLT5wb3MpIHsKKyAgICAgICAgc2VsZi0+c3RyaW5nX3NpemUgPSBzZWxmLT5wb3M7CisgICAgfQorCisgICAgUHlfREVDUkVGKGRlY29kZWQpOworICAgIHJldHVybiAwOworCitmYWlsOgorICAgIFB5X1hERUNSRUYoZGVjb2RlZCk7CisgICAgcmV0dXJuIC0xOworfQorCitQeURvY19TVFJWQVIoc3RyaW5naW9fZ2V0dmFsdWVfZG9jLAorICAgICJSZXRyaWV2ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBvYmplY3QuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHJpbmdpb19nZXR2YWx1ZShzdHJpbmdpbyAqc2VsZikKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tVW5pY29kZShzZWxmLT5idWYsIHNlbGYtPnN0cmluZ19zaXplKTsKK30KKworUHlEb2NfU1RSVkFSKHN0cmluZ2lvX3RlbGxfZG9jLAorICAgICJUZWxsIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHJpbmdpb190ZWxsKHN0cmluZ2lvICpzZWxmKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPnBvcyk7Cit9CisKK1B5RG9jX1NUUlZBUihzdHJpbmdpb19yZWFkX2RvYywKKyAgICAiUmVhZCBhdCBtb3N0IG4gY2hhcmFjdGVycywgcmV0dXJuZWQgYXMgYSBzdHJpbmcuXG4iCisgICAgIlxuIgorICAgICJJZiB0aGUgYXJndW1lbnQgaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0ZcbiIKKyAgICAiaXMgcmVhY2hlZC4gUmV0dXJuIGFuIGVtcHR5IHN0cmluZyBhdCBFT0YuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX3JlYWQoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X3NzaXplX3Qgc2l6ZSwgbjsKKyAgICBQeV9VTklDT0RFICpvdXRwdXQ7CisgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnJlYWQiLCAmYXJnKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworCisgICAgaWYgKFB5TnVtYmVyX0NoZWNrKGFyZykpIHsKKyAgICAgICAgc2l6ZSA9IFB5TnVtYmVyX0FzU3NpemVfdChhcmcsIFB5RXhjX092ZXJmbG93RXJyb3IpOworICAgICAgICBpZiAoc2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKGFyZyA9PSBQeV9Ob25lKSB7CisgICAgICAgIC8qIFJlYWQgdW50aWwgRU9GIGlzIHJlYWNoZWQsIGJ5IGRlZmF1bHQuICovCisgICAgICAgIHNpemUgPSAtMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGFyZyktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBhZGp1c3QgaW52YWxpZCBzaXplcyAqLworICAgIG4gPSBzZWxmLT5zdHJpbmdfc2l6ZSAtIHNlbGYtPnBvczsKKyAgICBpZiAoc2l6ZSA8IDAgfHwgc2l6ZSA+IG4pIHsKKyAgICAgICAgc2l6ZSA9IG47CisgICAgICAgIGlmIChzaXplIDwgMCkKKyAgICAgICAgICAgIHNpemUgPSAwOworICAgIH0KKworICAgIG91dHB1dCA9IHNlbGYtPmJ1ZiArIHNlbGYtPnBvczsKKyAgICBzZWxmLT5wb3MgKz0gc2l6ZTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Vbmljb2RlKG91dHB1dCwgc2l6ZSk7Cit9CisKKy8qIEludGVybmFsIGhlbHBlciwgdXNlZCBieSBzdHJpbmdpb19yZWFkbGluZSBhbmQgc3RyaW5naW9faXRlcm5leHQgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitfc3RyaW5naW9fcmVhZGxpbmUoc3RyaW5naW8gKnNlbGYsIFB5X3NzaXplX3QgbGltaXQpCit7CisgICAgUHlfVU5JQ09ERSAqc3RhcnQsICplbmQsIG9sZF9jaGFyOworICAgIFB5X3NzaXplX3QgbGVuLCBjb25zdW1lZDsKKworICAgIC8qIEluIGNhc2Ugb2Ygb3ZlcnNlZWssIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nICovCisgICAgaWYgKHNlbGYtPnBvcyA+PSBzZWxmLT5zdHJpbmdfc2l6ZSkKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKKworICAgIHN0YXJ0ID0gc2VsZi0+YnVmICsgc2VsZi0+cG9zOworICAgIGlmIChsaW1pdCA8IDAgfHwgbGltaXQgPiBzZWxmLT5zdHJpbmdfc2l6ZSAtIHNlbGYtPnBvcykKKyAgICAgICAgbGltaXQgPSBzZWxmLT5zdHJpbmdfc2l6ZSAtIHNlbGYtPnBvczsKKworICAgIGVuZCA9IHN0YXJ0ICsgbGltaXQ7CisgICAgb2xkX2NoYXIgPSAqZW5kOworICAgICplbmQgPSAnXDAnOworICAgIGxlbiA9IF9QeUlPX2ZpbmRfbGluZV9lbmRpbmcoCisgICAgICAgIHNlbGYtPnJlYWR0cmFuc2xhdGUsIHNlbGYtPnJlYWR1bml2ZXJzYWwsIHNlbGYtPnJlYWRubCwKKyAgICAgICAgc3RhcnQsIGVuZCwgJmNvbnN1bWVkKTsKKyAgICAqZW5kID0gb2xkX2NoYXI7CisgICAgLyogSWYgd2UgaGF2ZW4ndCBmb3VuZCBhbnkgbGluZSBlbmRpbmcsIHdlIGp1c3QgcmV0dXJuIGV2ZXJ5dGhpbmcKKyAgICAgICAoYGNvbnN1bWVkYCBpcyBpZ25vcmVkKS4gKi8KKyAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgbGVuID0gbGltaXQ7CisgICAgc2VsZi0+cG9zICs9IGxlbjsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Vbmljb2RlKHN0YXJ0LCBsZW4pOworfQorCitQeURvY19TVFJWQVIoc3RyaW5naW9fcmVhZGxpbmVfZG9jLAorICAgICJSZWFkIHVudGlsIG5ld2xpbmUgb3IgRU9GLlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgRU9GIGlzIGhpdCBpbW1lZGlhdGVseS5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fcmVhZGxpbmUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOworICAgIFB5X3NzaXplX3QgbGltaXQgPSAtMTsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86cmVhZGxpbmUiLCAmYXJnKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworCisgICAgaWYgKFB5TnVtYmVyX0NoZWNrKGFyZykpIHsKKyAgICAgICAgbGltaXQgPSBQeU51bWJlcl9Bc1NzaXplX3QoYXJnLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKKyAgICAgICAgaWYgKGxpbWl0ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoYXJnICE9IFB5X05vbmUpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoYXJnKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gX3N0cmluZ2lvX3JlYWRsaW5lKHNlbGYsIGxpbWl0KTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX2l0ZXJuZXh0KHN0cmluZ2lvICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpsaW5lOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworCisgICAgaWYgKFB5X1RZUEUoc2VsZikgPT0gJlB5U3RyaW5nSU9fVHlwZSkgeworICAgICAgICAvKiBTa2lwIG1ldGhvZCBjYWxsIG92ZXJoZWFkIGZvciBzcGVlZCAqLworICAgICAgICBsaW5lID0gX3N0cmluZ2lvX3JlYWRsaW5lKHNlbGYsIC0xKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIFhYWCBpcyBzdWJjbGFzc2luZyBTdHJpbmdJTyByZWFsbHkgc3VwcG9ydGVkPyAqLworICAgICAgICBsaW5lID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoKFB5T2JqZWN0ICopc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlJT19zdHJfcmVhZGxpbmUsIE5VTEwpOworICAgICAgICBpZiAobGluZSAmJiAhUHlVbmljb2RlX0NoZWNrKGxpbmUpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmUoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBhbiBzdHIgb2JqZWN0LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAnJS4yMDBzJyIsIFB5X1RZUEUobGluZSktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGxpbmUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobGluZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeVVuaWNvZGVfR0VUX1NJWkUobGluZSkgPT0gMCkgeworICAgICAgICAvKiBSZWFjaGVkIEVPRiAqLworICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBsaW5lOworfQorCitQeURvY19TVFJWQVIoc3RyaW5naW9fdHJ1bmNhdGVfZG9jLAorICAgICJUcnVuY2F0ZSBzaXplIHRvIHBvcy5cbiIKKyAgICAiXG4iCisgICAgIlRoZSBwb3MgYXJndW1lbnQgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgYXNcbiIKKyAgICAicmV0dXJuZWQgYnkgdGVsbCgpLiAgVGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBpcyB1bmNoYW5nZWQuXG4iCisgICAgIlJldHVybnMgdGhlIG5ldyBhYnNvbHV0ZSBwb3NpdGlvbi5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fdHJ1bmNhdGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86dHJ1bmNhdGUiLCAmYXJnKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworCisgICAgaWYgKFB5TnVtYmVyX0NoZWNrKGFyZykpIHsKKyAgICAgICAgc2l6ZSA9IFB5TnVtYmVyX0FzU3NpemVfdChhcmcsIFB5RXhjX092ZXJmbG93RXJyb3IpOworICAgICAgICBpZiAoc2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKGFyZyA9PSBQeV9Ob25lKSB7CisgICAgICAgIC8qIFRydW5jYXRlIHRvIGN1cnJlbnQgcG9zaXRpb24gaWYgbm8gYXJndW1lbnQgaXMgcGFzc2VkLiAqLworICAgICAgICBzaXplID0gc2VsZi0+cG9zOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoYXJnKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJOZWdhdGl2ZSBzaXplIHZhbHVlICV6ZCIsIHNpemUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoc2l6ZSA8IHNlbGYtPnN0cmluZ19zaXplKSB7CisgICAgICAgIGlmIChyZXNpemVfYnVmZmVyKHNlbGYsIHNpemUpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBzZWxmLT5zdHJpbmdfc2l6ZSA9IHNpemU7CisgICAgfQorCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzaXplKTsKK30KKworUHlEb2NfU1RSVkFSKHN0cmluZ2lvX3NlZWtfZG9jLAorICAgICJDaGFuZ2Ugc3RyZWFtIHBvc2l0aW9uLlxuIgorICAgICJcbiIKKyAgICAiU2VlayB0byBjaGFyYWN0ZXIgb2Zmc2V0IHBvcyByZWxhdGl2ZSB0byBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgd2hlbmNlOlxuIgorICAgICIgICAgMCAgU3RhcnQgb2Ygc3RyZWFtICh0aGUgZGVmYXVsdCkuICBwb3Mgc2hvdWxkIGJlID49IDA7XG4iCisgICAgIiAgICAxICBDdXJyZW50IHBvc2l0aW9uIC0gcG9zIG11c3QgYmUgMDtcbiIKKyAgICAiICAgIDIgIEVuZCBvZiBzdHJlYW0gLSBwb3MgbXVzdCBiZSAwLlxuIgorICAgICJSZXR1cm5zIHRoZSBuZXcgYWJzb2x1dGUgcG9zaXRpb24uXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX3NlZWsoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpwb3NvYmo7CisgICAgUHlfc3NpemVfdCBwb3M7CisgICAgaW50IG1vZGUgPSAwOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfGk6c2VlayIsICZwb3NvYmosICZtb2RlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwb3MgPSBQeU51bWJlcl9Bc1NzaXplX3QocG9zb2JqLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKKyAgICBpZiAocG9zID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKworICAgIGlmIChtb2RlICE9IDAgJiYgbW9kZSAhPSAxICYmIG1vZGUgIT0gMikgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHdoZW5jZSAoJWksIHNob3VsZCBiZSAwLCAxIG9yIDIpIiwgbW9kZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChwb3MgPCAwICYmIG1vZGUgPT0gMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJOZWdhdGl2ZSBzZWVrIHBvc2l0aW9uICV6ZCIsIHBvcyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChtb2RlICE9IDAgJiYgcG9zICE9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZG8gbm9uemVybyBjdXItcmVsYXRpdmUgc2Vla3MiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogbW9kZSAwOiBvZmZzZXQgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuCisgICAgICAgbW9kZSAxOiBubyBjaGFuZ2UgdG8gY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICBtb2RlIDI6IGNoYW5nZSBwb3NpdGlvbiB0byBlbmQgb2YgZmlsZS4gKi8KKyAgICBpZiAobW9kZSA9PSAxKSB7CisgICAgICAgIHBvcyA9IHNlbGYtPnBvczsKKyAgICB9CisgICAgZWxzZSBpZiAobW9kZSA9PSAyKSB7CisgICAgICAgIHBvcyA9IHNlbGYtPnN0cmluZ19zaXplOworICAgIH0KKworICAgIHNlbGYtPnBvcyA9IHBvczsKKworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2VsZi0+cG9zKTsKK30KKworUHlEb2NfU1RSVkFSKHN0cmluZ2lvX3dyaXRlX2RvYywKKyAgICAiV3JpdGUgc3RyaW5nIHRvIGZpbGUuXG4iCisgICAgIlxuIgorICAgICJSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLCB3aGljaCBpcyBhbHdheXMgZXF1YWwgdG9cbiIKKyAgICAidGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHJpbmdpb193cml0ZShzdHJpbmdpbyAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeV9zc2l6ZV90IHNpemU7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhvYmopKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJzdHJpbmcgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfU0laRShvYmopOworCisgICAgaWYgKHNpemUgPiAwICYmIHdyaXRlX3N0cihzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNpemUpOworfQorCitQeURvY19TVFJWQVIoc3RyaW5naW9fY2xvc2VfZG9jLAorICAgICJDbG9zZSB0aGUgSU8gb2JqZWN0LiBBdHRlbXB0aW5nIGFueSBmdXJ0aGVyIG9wZXJhdGlvbiBhZnRlciB0aGVcbiIKKyAgICAib2JqZWN0IGlzIGNsb3NlZCB3aWxsIHJhaXNlIGEgVmFsdWVFcnJvci5cbiIKKyAgICAiXG4iCisgICAgIlRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBjbG9zZWQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX2Nsb3NlKHN0cmluZ2lvICpzZWxmKQoreworICAgIHNlbGYtPmNsb3NlZCA9IDE7CisgICAgLyogRnJlZSB1cCBzb21lIG1lbW9yeSAqLworICAgIGlmIChyZXNpemVfYnVmZmVyKHNlbGYsIDApIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZG5sKTsKKyAgICBQeV9DTEVBUihzZWxmLT53cml0ZW5sKTsKKyAgICBQeV9DTEVBUihzZWxmLT5kZWNvZGVyKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIGludAorc3RyaW5naW9fdHJhdmVyc2Uoc3RyaW5naW8gKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzdHJpbmdpb19jbGVhcihzdHJpbmdpbyAqc2VsZikKK3sKKyAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3N0cmluZ2lvX2RlYWxsb2Moc3RyaW5naW8gKnNlbGYpCit7CisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CisgICAgc2VsZi0+b2sgPSAwOworICAgIGlmIChzZWxmLT5idWYpIHsKKyAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWYpOworICAgICAgICBzZWxmLT5idWYgPSBOVUxMOworICAgIH0KKyAgICBQeV9DTEVBUihzZWxmLT5yZWFkbmwpOworICAgIFB5X0NMRUFSKHNlbGYtPndyaXRlbmwpOworICAgIFB5X0NMRUFSKHNlbGYtPmRlY29kZXIpOworICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKKyAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHNlbGYpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIHN0cmluZ2lvICpzZWxmOworCisgICAgYXNzZXJ0KHR5cGUgIT0gTlVMTCAmJiB0eXBlLT50cF9hbGxvYyAhPSBOVUxMKTsKKyAgICBzZWxmID0gKHN0cmluZ2lvICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiB0cF9hbGxvYyBpbml0aWFsaXplcyBhbGwgdGhlIGZpZWxkcyB0byB6ZXJvLiBTbyB3ZSBkb24ndCBoYXZlIHRvCisgICAgICAgaW5pdGlhbGl6ZSB0aGVtIGhlcmUuICovCisKKyAgICBzZWxmLT5idWYgPSAoUHlfVU5JQ09ERSAqKVB5TWVtX01hbGxvYygwKTsKKyAgICBpZiAoc2VsZi0+YnVmID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICB9CisKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKK30KKworc3RhdGljIGludAorc3RyaW5naW9faW5pdChzdHJpbmdpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJpbml0aWFsX3ZhbHVlIiwgIm5ld2xpbmUiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOworICAgIGNoYXIgKm5ld2xpbmUgPSAiXG4iOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxPejpfX2luaXRfXyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWUsICZuZXdsaW5lKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKG5ld2xpbmUgJiYgbmV3bGluZVswXSAhPSAnXDAnCisgICAgICAgICYmICEobmV3bGluZVswXSA9PSAnXG4nICYmIG5ld2xpbmVbMV0gPT0gJ1wwJykKKyAgICAgICAgJiYgIShuZXdsaW5lWzBdID09ICdccicgJiYgbmV3bGluZVsxXSA9PSAnXDAnKQorICAgICAgICAmJiAhKG5ld2xpbmVbMF0gPT0gJ1xyJyAmJiBuZXdsaW5lWzFdID09ICdcbicgJiYgbmV3bGluZVsyXSA9PSAnXDAnKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJpbGxlZ2FsIG5ld2xpbmUgdmFsdWU6ICVzIiwgbmV3bGluZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9IFB5X05vbmUgJiYgIVB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsX3ZhbHVlIG11c3QgYmUgdW5pY29kZSBvciBOb25lLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodmFsdWUpLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHNlbGYtPm9rID0gMDsKKworICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRubCk7CisgICAgUHlfQ0xFQVIoc2VsZi0+d3JpdGVubCk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGVjb2Rlcik7CisKKyAgICBpZiAobmV3bGluZSkgeworICAgICAgICBzZWxmLT5yZWFkbmwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKG5ld2xpbmUpOworICAgICAgICBpZiAoc2VsZi0+cmVhZG5sID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbGYtPnJlYWR1bml2ZXJzYWwgPSAobmV3bGluZSA9PSBOVUxMIHx8IG5ld2xpbmVbMF0gPT0gJ1wwJyk7CisgICAgc2VsZi0+cmVhZHRyYW5zbGF0ZSA9IChuZXdsaW5lID09IE5VTEwpOworICAgIC8qIElmIG5ld2xpbmUgPT0gIiIsIHdlIGRvbid0IHRyYW5zbGF0ZSBhbnl0aGluZy4KKyAgICAgICBJZiBuZXdsaW5lID09ICJcbiIgb3IgbmV3bGluZSA9PSBOb25lLCB3ZSB0cmFuc2xhdGUgdG8gIlxuIiwgd2hpY2ggaXMKKyAgICAgICBhIG5vLW9wLgorICAgICAgIChmb3IgbmV3bGluZSA9PSBOb25lLCBUZXh0SU9XcmFwcGVyIHRyYW5zbGF0ZXMgdG8gb3Muc2VwbGluZSwgYnV0IGl0CisgICAgICAgaXMgcG9pbnRsZXNzIGZvciBTdHJpbmdJTykKKyAgICAqLworICAgIGlmIChuZXdsaW5lICE9IE5VTEwgJiYgbmV3bGluZVswXSA9PSAnXHInKSB7CisgICAgICAgIHNlbGYtPndyaXRlbmwgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhuZXdsaW5lKTsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+cmVhZHVuaXZlcnNhbCkgeworICAgICAgICBzZWxmLT5kZWNvZGVyID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKAorICAgICAgICAgICAgKFB5T2JqZWN0ICopJlB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9UeXBlLAorICAgICAgICAgICAgIk9pIiwgUHlfTm9uZSwgKGludCkgc2VsZi0+cmVhZHRyYW5zbGF0ZSk7CisgICAgICAgIGlmIChzZWxmLT5kZWNvZGVyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogTm93IGV2ZXJ5dGhpbmcgaXMgc2V0IHVwLCByZXNpemUgYnVmZmVyIHRvIHNpemUgb2YgaW5pdGlhbCB2YWx1ZSwKKyAgICAgICBhbmQgY29weSBpdCAqLworICAgIHNlbGYtPnN0cmluZ19zaXplID0gMDsKKyAgICBpZiAodmFsdWUgJiYgdmFsdWUgIT0gUHlfTm9uZSkgeworICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IFB5VW5pY29kZV9HZXRTaXplKHZhbHVlKTsKKyAgICAgICAgLyogVGhpcyBpcyBhIGhldXJpc3RpYywgZm9yIG5ld2xpbmUgdHJhbnNsYXRpb24gbWlnaHQgY2hhbmdlCisgICAgICAgICAgIHRoZSBzdHJpbmcgbGVuZ3RoLiAqLworICAgICAgICBpZiAocmVzaXplX2J1ZmZlcihzZWxmLCBsZW4pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgc2VsZi0+cG9zID0gMDsKKyAgICAgICAgaWYgKHdyaXRlX3N0cihzZWxmLCB2YWx1ZSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHJlc2l6ZV9idWZmZXIoc2VsZiwgMCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzZWxmLT5wb3MgPSAwOworCisgICAgc2VsZi0+Y2xvc2VkID0gMDsKKyAgICBzZWxmLT5vayA9IDE7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFByb3BlcnRpZXMgYW5kIHBzZXVkby1wcm9wZXJ0aWVzICovCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fc2Vla2FibGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIFB5X1JFVFVSTl9UUlVFOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fcmVhZGFibGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIFB5X1JFVFVSTl9UUlVFOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fd3JpdGFibGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIFB5X1JFVFVSTl9UUlVFOworfQorCisvKiBQaWNrbGluZyBzdXBwb3J0LgorCisgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgX19nZXRzdGF0ZV9fIGlzIHNpbWlsYXIgdG8gdGhlIG9uZSBmb3IgQnl0ZXNJTywKKyAgIGV4Y2VwdCB0aGF0IHdlIGFsc28gc2F2ZSB0aGUgbmV3bGluZSBwYXJhbWV0ZXIuIEZvciBfX3NldHN0YXRlX18gYW5kIHVubGlrZQorICAgQnl0ZXNJTywgd2UgY2FsbCBfX2luaXRfXyB0byByZXN0b3JlIHRoZSBvYmplY3QncyBzdGF0ZS4gRG9pbmcgc28gYWxsb3dzIHVzCisgICB0byBhdm9pZCBkZWNvZGluZyB0aGUgY29tcGxleCBuZXdsaW5lIHN0YXRlIHdoaWxlIGtlZXBpbmcgdGhlIG9iamVjdAorICAgcmVwcmVzZW50YXRpb24gY29tcGFjdC4KKworICAgU2VlIGNvbW1lbnQgaW4gYnl0ZXNpby5jIHJlZ2FyZGluZyB3aHkgb25seSBwaWNrbGUgcHJvdG9jb2xzIGFuZCBvbndhcmQgYXJlCisgICBzdXBwb3J0ZWQuCisqLworCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fZ2V0c3RhdGUoc3RyaW5naW8gKnNlbGYpCit7CisgICAgUHlPYmplY3QgKmluaXR2YWx1ZSA9IHN0cmluZ2lvX2dldHZhbHVlKHNlbGYpOworICAgIFB5T2JqZWN0ICpkaWN0OworICAgIFB5T2JqZWN0ICpzdGF0ZTsKKworICAgIGlmIChpbml0dmFsdWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHNlbGYtPmRpY3QgPT0gTlVMTCkgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIGRpY3QgPSBQeV9Ob25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZGljdCA9IFB5RGljdF9Db3B5KHNlbGYtPmRpY3QpOworICAgICAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3RhdGUgPSBQeV9CdWlsZFZhbHVlKCIoT09uTikiLCBpbml0dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnJlYWRubCA/IHNlbGYtPnJlYWRubCA6IFB5X05vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnBvcywgZGljdCk7CisgICAgUHlfREVDUkVGKGluaXR2YWx1ZSk7CisgICAgcmV0dXJuIHN0YXRlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fc2V0c3RhdGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICpzdGF0ZSkKK3sKKyAgICBQeU9iamVjdCAqaW5pdGFyZzsKKyAgICBQeU9iamVjdCAqcG9zaXRpb25fb2JqOworICAgIFB5T2JqZWN0ICpkaWN0OworICAgIFB5X3NzaXplX3QgcG9zOworCisgICAgYXNzZXJ0KHN0YXRlICE9IE5VTEwpOworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKworICAgIC8qIFdlIGFsbG93IHRoZSBzdGF0ZSB0dXBsZSB0byBiZSBsb25nZXIgdGhhbiA0LCBiZWNhdXNlIHdlIG1heSBuZWVkCisgICAgICAgc29tZWRheSB0byBleHRlbmQgdGhlIG9iamVjdCdzIHN0YXRlIHdpdGhvdXQgYnJlYWtpbmcKKyAgICAgICBiYWNrd2FyZC1jb21wYXRpYmlsaXR5LiAqLworICAgIGlmICghUHlUdXBsZV9DaGVjayhzdGF0ZSkgfHwgUHlfU0laRShzdGF0ZSkgPCA0KSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiJS4yMDBzLl9fc2V0c3RhdGVfXyBhcmd1bWVudCBzaG91bGQgYmUgNC10dXBsZSwgZ290ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lLCBQeV9UWVBFKHN0YXRlKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgdGhlIG9iamVjdCdzIHN0YXRlLiAqLworICAgIGluaXRhcmcgPSBQeVR1cGxlX0dldFNsaWNlKHN0YXRlLCAwLCAyKTsKKyAgICBpZiAoaW5pdGFyZyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc3RyaW5naW9faW5pdChzZWxmLCBpbml0YXJnLCBOVUxMKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGluaXRhcmcpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfREVDUkVGKGluaXRhcmcpOworCisgICAgLyogUmVzdG9yZSB0aGUgYnVmZmVyIHN0YXRlLiBFdmVuIGlmIF9faW5pdF9fIGRpZCBpbml0aWFsaXplIHRoZSBidWZmZXIsCisgICAgICAgd2UgaGF2ZSB0byBpbml0aWFsaXplIGl0IGFnYWluIHNpbmNlIF9faW5pdF9fIG1heSB0cmFuc2xhdGVzIHRoZQorICAgICAgIG5ld2xpbmVzIGluIHRoZSBpbml0YWxfdmFsdWUgc3RyaW5nLiBXZSBjbGVhcmx5IGRvIG5vdCB3YW50IHRoYXQKKyAgICAgICBiZWNhdXNlIHRoZSBzdHJpbmcgdmFsdWUgaW4gdGhlIHN0YXRlIHR1cGxlIGhhcyBhbHJlYWR5IGJlZW4gdHJhbnNsYXRlZAorICAgICAgIG9uY2UgYnkgX19pbml0X18uIFNvIHdlIGRvIG5vdCB0YWtlIGFueSBjaGFuY2UgYW5kIHJlcGxhY2Ugb2JqZWN0J3MKKyAgICAgICBidWZmZXIgY29tcGxldGVseS4gKi8KKyAgICB7CisgICAgICAgIFB5X1VOSUNPREUgKmJ1ZiA9IFB5VW5pY29kZV9BU19VTklDT0RFKFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDApKTsKKyAgICAgICAgUHlfc3NpemVfdCBidWZzaXplID0gUHlVbmljb2RlX0dFVF9TSVpFKFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDApKTsKKyAgICAgICAgaWYgKHJlc2l6ZV9idWZmZXIoc2VsZiwgYnVmc2l6ZSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG1lbWNweShzZWxmLT5idWYsIGJ1ZiwgYnVmc2l6ZSAqIHNpemVvZihQeV9VTklDT0RFKSk7CisgICAgICAgIHNlbGYtPnN0cmluZ19zaXplID0gYnVmc2l6ZTsKKyAgICB9CisKKyAgICAvKiBTZXQgY2FyZWZ1bGx5IHRoZSBwb3NpdGlvbiB2YWx1ZS4gQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgdXNlIHRoZSBzZWVrCisgICAgICAgbWV0aG9kIGluc3RlYWQgb2YgbW9kaWZ5aW5nIHNlbGYtPnBvcyBkaXJlY3RseSB0byBiZXR0ZXIgcHJvdGVjdCB0aGUKKyAgICAgICBvYmplY3QgaW50ZXJuYWwgc3RhdGUgYWdhaW5zdCBlcnJuZW91cyAob3IgbWFsaWNpb3VzKSBpbnB1dHMuICovCisgICAgcG9zaXRpb25fb2JqID0gUHlUdXBsZV9HRVRfSVRFTShzdGF0ZSwgMik7CisgICAgaWYgKCFQeUluZGV4X0NoZWNrKHBvc2l0aW9uX29iaikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ0aGlyZCBpdGVtIG9mIHN0YXRlIG11c3QgYmUgYW4gaW50ZWdlciwgZ290ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHBvc2l0aW9uX29iaiktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcG9zID0gUHlOdW1iZXJfQXNTc2l6ZV90KHBvc2l0aW9uX29iaiwgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CisgICAgaWYgKHBvcyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAocG9zIDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiB2YWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNlbGYtPnBvcyA9IHBvczsKKworICAgIC8qIFNldCB0aGUgZGljdGlvbmFyeSBvZiB0aGUgaW5zdGFuY2UgdmFyaWFibGVzLiAqLworICAgIGRpY3QgPSBQeVR1cGxlX0dFVF9JVEVNKHN0YXRlLCAzKTsKKyAgICBpZiAoZGljdCAhPSBQeV9Ob25lKSB7CisgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKGRpY3QpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmb3VydGggaXRlbSBvZiBzdGF0ZSBzaG91bGQgYmUgYSBkaWN0LCBnb3QgYSAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZGljdCktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlbGYtPmRpY3QpIHsKKyAgICAgICAgICAgIC8qIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHJlcGxhY2UgdGhlIGludGVybmFsIGRpY3Rpb25hcnkKKyAgICAgICAgICAgICAgIGNvbXBsZXRlbHkuIEhvd2V2ZXIsIGl0IHNlZW1zIG1vcmUgcHJhY3RpY2FsIHRvIGp1c3QgdXBkYXRlIGl0LiAqLworICAgICAgICAgICAgaWYgKFB5RGljdF9VcGRhdGUoc2VsZi0+ZGljdCwgZGljdCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlfSU5DUkVGKGRpY3QpOworICAgICAgICAgICAgc2VsZi0+ZGljdCA9IGRpY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fY2xvc2VkKHN0cmluZ2lvICpzZWxmLCB2b2lkICpjb250ZXh0KQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoc2VsZi0+Y2xvc2VkKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX2xpbmVfYnVmZmVyaW5nKHN0cmluZ2lvICpzZWxmLCB2b2lkICpjb250ZXh0KQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKyAgICBQeV9SRVRVUk5fRkFMU0U7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHJpbmdpb19uZXdsaW5lcyhzdHJpbmdpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisgICAgaWYgKHNlbGYtPmRlY29kZXIgPT0gTlVMTCkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgcmV0dXJuIFB5T2JqZWN0X0dldEF0dHIoc2VsZi0+ZGVjb2RlciwgX1B5SU9fc3RyX25ld2xpbmVzKTsKK30KKworc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBzdHJpbmdpb19tZXRob2RzW10gPSB7CisgICAgeyJjbG9zZSIsICAgIChQeUNGdW5jdGlvbilzdHJpbmdpb19jbG9zZSwgICAgTUVUSF9OT0FSR1MsICBzdHJpbmdpb19jbG9zZV9kb2N9LAorICAgIHsiZ2V0dmFsdWUiLCAoUHlDRnVuY3Rpb24pc3RyaW5naW9fZ2V0dmFsdWUsIE1FVEhfTk9BUkdTLCAgc3RyaW5naW9fZ2V0dmFsdWVfZG9jfSwKKyAgICB7InJlYWQiLCAgICAgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3JlYWQsICAgICBNRVRIX1ZBUkFSR1MsIHN0cmluZ2lvX3JlYWRfZG9jfSwKKyAgICB7InJlYWRsaW5lIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3JlYWRsaW5lLCBNRVRIX1ZBUkFSR1MsIHN0cmluZ2lvX3JlYWRsaW5lX2RvY30sCisgICAgeyJ0ZWxsIiwgICAgIChQeUNGdW5jdGlvbilzdHJpbmdpb190ZWxsLCAgICAgTUVUSF9OT0FSR1MsICBzdHJpbmdpb190ZWxsX2RvY30sCisgICAgeyJ0cnVuY2F0ZSIsIChQeUNGdW5jdGlvbilzdHJpbmdpb190cnVuY2F0ZSwgTUVUSF9WQVJBUkdTLCBzdHJpbmdpb190cnVuY2F0ZV9kb2N9LAorICAgIHsic2VlayIsICAgICAoUHlDRnVuY3Rpb24pc3RyaW5naW9fc2VlaywgICAgIE1FVEhfVkFSQVJHUywgc3RyaW5naW9fc2Vla19kb2N9LAorICAgIHsid3JpdGUiLCAgICAoUHlDRnVuY3Rpb24pc3RyaW5naW9fd3JpdGUsICAgIE1FVEhfTywgICAgICAgc3RyaW5naW9fd3JpdGVfZG9jfSwKKworICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pc3RyaW5naW9fc2Vla2FibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InJlYWRhYmxlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3JlYWRhYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJ3cml0YWJsZSIsIChQeUNGdW5jdGlvbilzdHJpbmdpb193cml0YWJsZSwgTUVUSF9OT0FSR1N9LAorCisgICAgeyJfX2dldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pc3RyaW5naW9fZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7Il9fc2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilzdHJpbmdpb19zZXRzdGF0ZSwgTUVUSF9PfSwKKyAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgc3RyaW5naW9fZ2V0c2V0W10gPSB7CisgICAgeyJjbG9zZWQiLCAgICAgICAgIChnZXR0ZXIpc3RyaW5naW9fY2xvc2VkLCAgICAgICAgIE5VTEwsIE5VTEx9LAorICAgIHsibmV3bGluZXMiLCAgICAgICAoZ2V0dGVyKXN0cmluZ2lvX25ld2xpbmVzLCAgICAgICBOVUxMLCBOVUxMfSwKKyAgICAvKiAgKGZvbGxvd2luZyBjb21tZW50cyBzdHJhaWdodCBvZmYgb2YgdGhlIG9yaWdpbmFsIFB5dGhvbiB3cmFwcGVyOikKKyAgICAgICAgWFhYIENydWZ0IHRvIHN1cHBvcnQgdGhlIFRleHRJT1dyYXBwZXIgQVBJLiBUaGlzIHdvdWxkIG9ubHkKKyAgICAgICAgYmUgbWVhbmluZ2Z1bCBpZiBTdHJpbmdJTyBzdXBwb3J0ZWQgdGhlIGJ1ZmZlciBhdHRyaWJ1dGUuCisgICAgICAgIEhvcGVmdWxseSwgYSBiZXR0ZXIgc29sdXRpb24sIHRoYW4gYWRkaW5nIHRoZXNlIHBzZXVkby1hdHRyaWJ1dGVzLAorICAgICAgICB3aWxsIGJlIGZvdW5kLgorICAgICovCisgICAgeyJsaW5lX2J1ZmZlcmluZyIsIChnZXR0ZXIpc3RyaW5naW9fbGluZV9idWZmZXJpbmcsIE5VTEwsIE5VTEx9LAorICAgIHtOVUxMfQorfTsKKworUHlUeXBlT2JqZWN0IFB5U3RyaW5nSU9fVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX2lvLlN0cmluZ0lPIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2Yoc3RyaW5naW8pLCAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAoZGVzdHJ1Y3RvcilzdHJpbmdpb19kZWFsbG9jLCAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2gqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgICAgICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgc3RyaW5naW9fZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KKyAgICAodHJhdmVyc2Vwcm9jKXN0cmluZ2lvX3RyYXZlcnNlLCAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCisgICAgKGlucXVpcnkpc3RyaW5naW9fY2xlYXIsICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KKyAgICBvZmZzZXRvZihzdHJpbmdpbywgd2Vha3JlZmxpc3QpLCAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLworICAgIChpdGVybmV4dGZ1bmMpc3RyaW5naW9faXRlcm5leHQsICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KKyAgICBzdHJpbmdpb19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KKyAgICBzdHJpbmdpb19nZXRzZXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX2dldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KKyAgICBvZmZzZXRvZihzdHJpbmdpbywgZGljdCksICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KKyAgICAoaW5pdHByb2Mpc3RyaW5naW9faW5pdCwgICAgICAgICAgICAgICAgICAgLyp0cF9pbml0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCisgICAgc3RyaW5naW9fbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KK307CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby90ZXh0aW8uYyBiL01vZHVsZXMvX2lvL3RleHRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZDdiODUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19pby90ZXh0aW8uYwpAQCAtMCwwICsxLDI2MTcgQEAKKy8qCisgICAgQW4gaW1wbGVtZW50YXRpb24gb2YgVGV4dCBJL08gYXMgZGVmaW5lZCBieSBQRVAgMzExNiAtICJOZXcgSS9PIgorCisgICAgQ2xhc3NlcyBkZWZpbmVkIGhlcmU6IFRleHRJT0Jhc2UsIEluY3JlbWVudGFsTmV3bGluZURlY29kZXIsIFRleHRJT1dyYXBwZXIuCisKKyAgICBXcml0dGVuIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjIGFuZCBBbnRvaW5lIFBpdHJvdQorKi8KKworI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCisjaW5jbHVkZSAiX2lvbW9kdWxlLmgiCisKKy8qIFRleHRJT0Jhc2UgKi8KKworUHlEb2NfU1RSVkFSKHRleHRpb2Jhc2VfZG9jLAorICAgICJCYXNlIGNsYXNzIGZvciB0ZXh0IEkvTy5cbiIKKyAgICAiXG4iCisgICAgIlRoaXMgY2xhc3MgcHJvdmlkZXMgYSBjaGFyYWN0ZXIgYW5kIGxpbmUgYmFzZWQgaW50ZXJmYWNlIHRvIHN0cmVhbVxuIgorICAgICJJL08uIFRoZXJlIGlzIG5vIHJlYWRpbnRvIG1ldGhvZCBiZWNhdXNlIFB5dGhvbidzIGNoYXJhY3RlciBzdHJpbmdzXG4iCisgICAgImFyZSBpbW11dGFibGUuIFRoZXJlIGlzIG5vIHB1YmxpYyBjb25zdHJ1Y3Rvci5cbiIKKyAgICApOworCitzdGF0aWMgUHlPYmplY3QgKgorX3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisgICAgUHlFcnJfU2V0U3RyaW5nKF9QeUlPX3Vuc3VwcG9ydGVkX29wZXJhdGlvbiwgbWVzc2FnZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5RG9jX1NUUlZBUih0ZXh0aW9iYXNlX2RldGFjaF9kb2MsCisgICAgIlNlcGFyYXRlIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBmcm9tIHRoZSBUZXh0SU9CYXNlIGFuZCByZXR1cm4gaXQuXG4iCisgICAgIlxuIgorICAgICJBZnRlciB0aGUgdW5kZXJseWluZyBidWZmZXIgaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBUZXh0SU8gaXMgaW4gYW5cbiIKKyAgICAidW51c2FibGUgc3RhdGUuXG4iCisgICAgKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb2Jhc2VfZGV0YWNoKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBfdW5zdXBwb3J0ZWQoImRldGFjaCIpOworfQorCitQeURvY19TVFJWQVIodGV4dGlvYmFzZV9yZWFkX2RvYywKKyAgICAiUmVhZCBhdCBtb3N0IG4gY2hhcmFjdGVycyBmcm9tIHN0cmVhbS5cbiIKKyAgICAiXG4iCisgICAgIlJlYWQgZnJvbSB1bmRlcmx5aW5nIGJ1ZmZlciB1bnRpbCB3ZSBoYXZlIG4gY2hhcmFjdGVycyBvciB3ZSBoaXQgRU9GLlxuIgorICAgICJJZiBuIGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GLlxuIgorICAgICk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW9iYXNlX3JlYWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfdW5zdXBwb3J0ZWQoInJlYWQiKTsKK30KKworUHlEb2NfU1RSVkFSKHRleHRpb2Jhc2VfcmVhZGxpbmVfZG9jLAorICAgICJSZWFkIHVudGlsIG5ld2xpbmUgb3IgRU9GLlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgRU9GIGlzIGhpdCBpbW1lZGlhdGVseS5cbiIKKyAgICApOworCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvYmFzZV9yZWFkbGluZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIF91bnN1cHBvcnRlZCgicmVhZGxpbmUiKTsKK30KKworUHlEb2NfU1RSVkFSKHRleHRpb2Jhc2Vfd3JpdGVfZG9jLAorICAgICJXcml0ZSBzdHJpbmcgdG8gc3RyZWFtLlxuIgorICAgICJSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuICh3aGljaCBpcyBhbHdheXMgZXF1YWwgdG9cbiIKKyAgICAidGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nKS5cbiIKKyAgICApOworCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvYmFzZV93cml0ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIF91bnN1cHBvcnRlZCgid3JpdGUiKTsKK30KKworUHlEb2NfU1RSVkFSKHRleHRpb2Jhc2VfZW5jb2RpbmdfZG9jLAorICAgICJFbmNvZGluZyBvZiB0aGUgdGV4dCBzdHJlYW0uXG4iCisgICAgIlxuIgorICAgICJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZS5cbiIKKyAgICApOworCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvYmFzZV9lbmNvZGluZ19nZXQoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUih0ZXh0aW9iYXNlX25ld2xpbmVzX2RvYywKKyAgICAiTGluZSBlbmRpbmdzIHRyYW5zbGF0ZWQgc28gZmFyLlxuIgorICAgICJcbiIKKyAgICAiT25seSBsaW5lIGVuZGluZ3MgdHJhbnNsYXRlZCBkdXJpbmcgcmVhZGluZyBhcmUgY29uc2lkZXJlZC5cbiIKKyAgICAiXG4iCisgICAgIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlLlxuIgorICAgICk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW9iYXNlX25ld2xpbmVzX2dldChQeU9iamVjdCAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHRleHRpb2Jhc2VfZXJyb3JzX2RvYywKKyAgICAiVGhlIGVycm9yIHNldHRpbmcgb2YgdGhlIGRlY29kZXIgb3IgZW5jb2Rlci5cbiIKKyAgICAiXG4iCisgICAgIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlLlxuIgorICAgICk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW9iYXNlX2Vycm9yc19nZXQoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKworc3RhdGljIFB5TWV0aG9kRGVmIHRleHRpb2Jhc2VfbWV0aG9kc1tdID0geworICAgIHsiZGV0YWNoIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb2Jhc2VfZGV0YWNoLCBNRVRIX05PQVJHUywgdGV4dGlvYmFzZV9kZXRhY2hfZG9jfSwKKyAgICB7InJlYWQiLCB0ZXh0aW9iYXNlX3JlYWQsIE1FVEhfVkFSQVJHUywgdGV4dGlvYmFzZV9yZWFkX2RvY30sCisgICAgeyJyZWFkbGluZSIsIHRleHRpb2Jhc2VfcmVhZGxpbmUsIE1FVEhfVkFSQVJHUywgdGV4dGlvYmFzZV9yZWFkbGluZV9kb2N9LAorICAgIHsid3JpdGUiLCB0ZXh0aW9iYXNlX3dyaXRlLCBNRVRIX1ZBUkFSR1MsIHRleHRpb2Jhc2Vfd3JpdGVfZG9jfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBQeUdldFNldERlZiB0ZXh0aW9iYXNlX2dldHNldFtdID0geworICAgIHsiZW5jb2RpbmciLCAoZ2V0dGVyKXRleHRpb2Jhc2VfZW5jb2RpbmdfZ2V0LCBOVUxMLCB0ZXh0aW9iYXNlX2VuY29kaW5nX2RvY30sCisgICAgeyJuZXdsaW5lcyIsIChnZXR0ZXIpdGV4dGlvYmFzZV9uZXdsaW5lc19nZXQsIE5VTEwsIHRleHRpb2Jhc2VfbmV3bGluZXNfZG9jfSwKKyAgICB7ImVycm9ycyIsIChnZXR0ZXIpdGV4dGlvYmFzZV9lcnJvcnNfZ2V0LCBOVUxMLCB0ZXh0aW9iYXNlX2Vycm9yc19kb2N9LAorICAgIHtOVUxMfQorfTsKKworUHlUeXBlT2JqZWN0IFB5VGV4dElPQmFzZV9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uX1RleHRJT0Jhc2UiLCAgICAgICAgICAvKnRwX25hbWUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICB0ZXh0aW9iYXNlX2RvYywgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICB0ZXh0aW9iYXNlX21ldGhvZHMsICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgdGV4dGlvYmFzZV9nZXRzZXQsICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgICZQeUlPQmFzZV9UeXBlLCAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCit9OworCisKKy8qIEluY3JlbWVudGFsTmV3bGluZURlY29kZXIgKi8KKworUHlEb2NfU1RSVkFSKGluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZG9jLAorICAgICJDb2RlYyB1c2VkIHdoZW4gcmVhZGluZyBhIGZpbGUgaW4gdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUuICBJdCB3cmFwc1xuIgorICAgICJhbm90aGVyIGluY3JlbWVudGFsIGRlY29kZXIsIHRyYW5zbGF0aW5nIFxcclxcbiBhbmQgXFxyIGludG8gXFxuLiAgSXQgYWxzb1xuIgorICAgICJyZWNvcmRzIHRoZSB0eXBlcyBvZiBuZXdsaW5lcyBlbmNvdW50ZXJlZC4gIFdoZW4gdXNlZCB3aXRoXG4iCisgICAgInRyYW5zbGF0ZT1GYWxzZSwgaXQgZW5zdXJlcyB0aGF0IHRoZSBuZXdsaW5lIHNlcXVlbmNlIGlzIHJldHVybmVkIGluXG4iCisgICAgIm9uZSBwaWVjZS4gV2hlbiB1c2VkIHdpdGggZGVjb2Rlcj1Ob25lLCBpdCBleHBlY3RzIHVuaWNvZGUgc3RyaW5ncyBhc1xuIgorICAgICJkZWNvZGUgaW5wdXQgYW5kIHRyYW5zbGF0ZXMgbmV3bGluZXMgd2l0aG91dCBmaXJzdCBpbnZva2luZyBhbiBleHRlcm5hbFxuIgorICAgICJkZWNvZGVyLlxuIgorICAgICk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKmRlY29kZXI7CisgICAgUHlPYmplY3QgKmVycm9yczsKKyAgICBzaWduZWQgaW50IHBlbmRpbmdjcjogMTsKKyAgICBzaWduZWQgaW50IHRyYW5zbGF0ZTogMTsKKyAgICB1bnNpZ25lZCBpbnQgc2Vlbm5sOiAzOworfSBubGRlY29kZXJfb2JqZWN0OworCitzdGF0aWMgaW50CitpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2luaXQobmxkZWNvZGVyX29iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgUHlPYmplY3QgKmRlY29kZXI7CisgICAgaW50IHRyYW5zbGF0ZTsKKyAgICBQeU9iamVjdCAqZXJyb3JzID0gTlVMTDsKKyAgICBjaGFyICprd2xpc3RbXSA9IHsiZGVjb2RlciIsICJ0cmFuc2xhdGUiLCAiZXJyb3JzIiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT2l8TzpJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZkZWNvZGVyLCAmdHJhbnNsYXRlLCAmZXJyb3JzKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc2VsZi0+ZGVjb2RlciA9IGRlY29kZXI7CisgICAgUHlfSU5DUkVGKGRlY29kZXIpOworCisgICAgaWYgKGVycm9ycyA9PSBOVUxMKSB7CisgICAgICAgIHNlbGYtPmVycm9ycyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJzdHJpY3QiKTsKKyAgICAgICAgaWYgKHNlbGYtPmVycm9ycyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlfSU5DUkVGKGVycm9ycyk7CisgICAgICAgIHNlbGYtPmVycm9ycyA9IGVycm9yczsKKyAgICB9CisKKyAgICBzZWxmLT50cmFuc2xhdGUgPSB0cmFuc2xhdGU7CisgICAgc2VsZi0+c2Vlbm5sID0gMDsKKyAgICBzZWxmLT5wZW5kaW5nY3IgPSAwOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2RlYWxsb2MobmxkZWNvZGVyX29iamVjdCAqc2VsZikKK3sKKyAgICBQeV9DTEVBUihzZWxmLT5kZWNvZGVyKTsKKyAgICBQeV9DTEVBUihzZWxmLT5lcnJvcnMpOworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7Cit9CisKKyNkZWZpbmUgU0VFTl9DUiAgIDEKKyNkZWZpbmUgU0VFTl9MRiAgIDIKKyNkZWZpbmUgU0VFTl9DUkxGIDQKKyNkZWZpbmUgU0VFTl9BTEwgKFNFRU5fQ1IgfCBTRUVOX0xGIHwgU0VFTl9DUkxGKQorCitQeU9iamVjdCAqCitfUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX2RlY29kZShQeU9iamVjdCAqX3NlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqaW5wdXQsIGludCBmaW5hbCkKK3sKKyAgICBQeU9iamVjdCAqb3V0cHV0OworICAgIFB5X3NzaXplX3Qgb3V0cHV0X2xlbjsKKyAgICBubGRlY29kZXJfb2JqZWN0ICpzZWxmID0gKG5sZGVjb2Rlcl9vYmplY3QgKikgX3NlbGY7CisKKyAgICBpZiAoc2VsZi0+ZGVjb2RlciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkluY3JlbWVudGFsTmV3bGluZURlY29kZXIuX19pbml0X18gbm90IGNhbGxlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBkZWNvZGUgaW5wdXQgKHdpdGggdGhlIGV2ZW50dWFsIFxyIGZyb20gYSBwcmV2aW91cyBwYXNzKSAqLworICAgIGlmIChzZWxmLT5kZWNvZGVyICE9IFB5X05vbmUpIHsKKyAgICAgICAgb3V0cHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+ZGVjb2RlciwKKyAgICAgICAgICAgIF9QeUlPX3N0cl9kZWNvZGUsIGlucHV0LCBmaW5hbCA/IFB5X1RydWUgOiBQeV9GYWxzZSwgTlVMTCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBvdXRwdXQgPSBpbnB1dDsKKyAgICAgICAgUHlfSU5DUkVGKG91dHB1dCk7CisgICAgfQorCisgICAgaWYgKG91dHB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghUHlVbmljb2RlX0NoZWNrKG91dHB1dCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJkZWNvZGVyIHNob3VsZCByZXR1cm4gYSBzdHJpbmcgcmVzdWx0Iik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgb3V0cHV0X2xlbiA9IFB5VW5pY29kZV9HRVRfU0laRShvdXRwdXQpOworICAgIGlmIChzZWxmLT5wZW5kaW5nY3IgJiYgKGZpbmFsIHx8IG91dHB1dF9sZW4gPiAwKSkgeworICAgICAgICBQeV9VTklDT0RFICpvdXQ7CisgICAgICAgIFB5T2JqZWN0ICptb2RpZmllZCA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCBvdXRwdXRfbGVuICsgMSk7CisgICAgICAgIGlmIChtb2RpZmllZCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgb3V0ID0gUHlVbmljb2RlX0FTX1VOSUNPREUobW9kaWZpZWQpOworICAgICAgICBvdXRbMF0gPSAnXHInOworICAgICAgICBtZW1jcHkob3V0ICsgMSwgUHlVbmljb2RlX0FTX1VOSUNPREUob3V0cHV0KSwKKyAgICAgICAgICAgICAgIG91dHB1dF9sZW4gKiBzaXplb2YoUHlfVU5JQ09ERSkpOworICAgICAgICBQeV9ERUNSRUYob3V0cHV0KTsKKyAgICAgICAgb3V0cHV0ID0gbW9kaWZpZWQ7CisgICAgICAgIHNlbGYtPnBlbmRpbmdjciA9IDA7CisgICAgICAgIG91dHB1dF9sZW4rKzsKKyAgICB9CisKKyAgICAvKiByZXRhaW4gbGFzdCBcciBldmVuIHdoZW4gbm90IHRyYW5zbGF0aW5nIGRhdGE6CisgICAgICogdGhlbiByZWFkbGluZSgpIGlzIHN1cmUgdG8gZ2V0IFxyXG4gaW4gb25lIHBhc3MKKyAgICAgKi8KKyAgICBpZiAoIWZpbmFsKSB7CisgICAgICAgIGlmIChvdXRwdXRfbGVuID4gMAorICAgICAgICAgICAgJiYgUHlVbmljb2RlX0FTX1VOSUNPREUob3V0cHV0KVtvdXRwdXRfbGVuIC0gMV0gPT0gJ1xyJykgeworCisgICAgICAgICAgICBpZiAoUHlfUkVGQ05UKG91dHB1dCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZvdXRwdXQsIG91dHB1dF9sZW4gLSAxKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqbW9kaWZpZWQgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoCisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKG91dHB1dCksCisgICAgICAgICAgICAgICAgICAgIG91dHB1dF9sZW4gLSAxKTsKKyAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob3V0cHV0KTsKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb2RpZmllZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlbGYtPnBlbmRpbmdjciA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBSZWNvcmQgd2hpY2ggbmV3bGluZXMgYXJlIHJlYWQgYW5kIGRvIG5ld2xpbmUgdHJhbnNsYXRpb24gaWYgZGVzaXJlZCwKKyAgICAgICBhbGwgaW4gb25lIHBhc3MuICovCisgICAgeworICAgICAgICBQeV9VTklDT0RFICppbl9zdHI7CisgICAgICAgIFB5X3NzaXplX3QgbGVuOworICAgICAgICBpbnQgc2Vlbm5sID0gc2VsZi0+c2Vlbm5sOworICAgICAgICBpbnQgb25seV9sZiA9IDA7CisKKyAgICAgICAgaW5fc3RyID0gUHlVbmljb2RlX0FTX1VOSUNPREUob3V0cHV0KTsKKyAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKG91dHB1dCk7CisKKyAgICAgICAgaWYgKGxlbiA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIG91dHB1dDsKKworICAgICAgICAvKiBJZiwgdXAgdG8gbm93LCBuZXdsaW5lcyBhcmUgY29uc2lzdGVudGx5IFxuLCBkbyBhIHF1aWNrIGNoZWNrCisgICAgICAgICAgIGZvciB0aGUgXHIgKmJ5dGUqIHdpdGggdGhlIGxpYmMncyBvcHRpbWl6ZWQgbWVtY2hyLgorICAgICAgICAgICAqLworICAgICAgICBpZiAoc2Vlbm5sID09IFNFRU5fTEYgfHwgc2Vlbm5sID09IDApIHsKKyAgICAgICAgICAgIG9ubHlfbGYgPSAobWVtY2hyKGluX3N0ciwgJ1xyJywgbGVuICogc2l6ZW9mKFB5X1VOSUNPREUpKSA9PSBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbmx5X2xmKSB7CisgICAgICAgICAgICAvKiBJZiBub3QgYWxyZWFkeSBzZWVuLCBxdWljayBzY2FuIGZvciBhIHBvc3NpYmxlICJcbiIgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgKHRoZXJlJ3Mgbm90aGluZyBlbHNlIHRvIGJlIGRvbmUsIGV2ZW4gd2hlbiBpbiB0cmFuc2xhdGlvbiBtb2RlKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChzZWVubmwgPT0gMCAmJgorICAgICAgICAgICAgICAgIG1lbWNocihpbl9zdHIsICdcbicsIGxlbiAqIHNpemVvZihQeV9VTklDT0RFKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgKnMsICplbmQ7CisgICAgICAgICAgICAgICAgcyA9IGluX3N0cjsKKyAgICAgICAgICAgICAgICBlbmQgPSBpbl9zdHIgKyBsZW47CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGM7CisgICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgbG9vcCBmb3Igbm9uLWNvbnRyb2wgY2hhcmFjdGVycyAqLworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnMgPiAnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAgICBjID0gKnMrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbm5sIHw9IFNFRU5fTEY7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocyA+IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIEZpbmlzaGVkOiB3ZSBoYXZlIHNjYW5uZWQgZm9yIG5ld2xpbmVzLCBhbmQgbm9uZSBvZiB0aGVtCisgICAgICAgICAgICAgICBuZWVkIHRyYW5zbGF0aW5nICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIXNlbGYtPnRyYW5zbGF0ZSkgeworICAgICAgICAgICAgUHlfVU5JQ09ERSAqcywgKmVuZDsKKyAgICAgICAgICAgIC8qIFdlIGhhdmUgYWxyZWFkeSBzZWVuIGFsbCBuZXdsaW5lIHR5cGVzLCBubyBuZWVkIHRvIHNjYW4gYWdhaW4gKi8KKyAgICAgICAgICAgIGlmIChzZWVubmwgPT0gU0VFTl9BTEwpCisgICAgICAgICAgICAgICAgZ290byBlbmRzY2FuOworICAgICAgICAgICAgcyA9IGluX3N0cjsKKyAgICAgICAgICAgIGVuZCA9IGluX3N0ciArIGxlbjsKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGM7CisgICAgICAgICAgICAgICAgLyogRmFzdCBsb29wIGZvciBub24tY29udHJvbCBjaGFyYWN0ZXJzICovCisgICAgICAgICAgICAgICAgd2hpbGUgKCpzID4gJ1xyJykKKyAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgIGMgPSAqcysrOworICAgICAgICAgICAgICAgIGlmIChjID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgIHNlZW5ubCB8PSBTRUVOX0xGOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbm5sIHw9IFNFRU5fQ1JMRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWVubmwgfD0gU0VFTl9DUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHMgPiBlbmQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChzZWVubmwgPT0gU0VFTl9BTEwpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBlbmRzY2FuOgorICAgICAgICAgICAgOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPYmplY3QgKnRyYW5zbGF0ZWQgPSBOVUxMOworICAgICAgICAgICAgUHlfVU5JQ09ERSAqb3V0X3N0cjsKKyAgICAgICAgICAgIFB5X1VOSUNPREUgKmluLCAqb3V0LCAqZW5kOworICAgICAgICAgICAgaWYgKFB5X1JFRkNOVChvdXRwdXQpICE9IDEpIHsKKyAgICAgICAgICAgICAgICAvKiBXZSBjb3VsZCB0cnkgdG8gb3B0aW1pemUgdGhpcyBzbyB0aGF0IHdlIG9ubHkgZG8gYSBjb3B5CisgICAgICAgICAgICAgICAgICAgd2hlbiB0aGVyZSBpcyBzb21ldGhpbmcgdG8gdHJhbnNsYXRlLiBPbiB0aGUgb3RoZXIgaGFuZCwKKyAgICAgICAgICAgICAgICAgICBtb3N0IGRlY29kZXJzIHNob3VsZCBvbmx5IG91dHB1dCBub24tc2hhcmVkIHN0cmluZ3MsIGkuZS4KKyAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiBpcyBkb25lIGluIHBsYWNlLiAqLworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWQgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTlVMTCwgbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRlZCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIGFzc2VydChQeV9SRUZDTlQodHJhbnNsYXRlZCkgPT0gMSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KFB5VW5pY29kZV9BU19VTklDT0RFKHRyYW5zbGF0ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERShvdXRwdXQpLAorICAgICAgICAgICAgICAgICAgICAgICBsZW4gKiBzaXplb2YoUHlfVU5JQ09ERSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZCA9IG91dHB1dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dF9zdHIgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh0cmFuc2xhdGVkKTsKKyAgICAgICAgICAgIGluID0gaW5fc3RyOworICAgICAgICAgICAgb3V0ID0gb3V0X3N0cjsKKyAgICAgICAgICAgIGVuZCA9IGluX3N0ciArIGxlbjsKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGM7CisgICAgICAgICAgICAgICAgLyogRmFzdCBsb29wIGZvciBub24tY29udHJvbCBjaGFyYWN0ZXJzICovCisgICAgICAgICAgICAgICAgd2hpbGUgKChjID0gKmluKyspID4gJ1xyJykKKyAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gYzsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9IGM7CisgICAgICAgICAgICAgICAgICAgIHNlZW5ubCB8PSBTRUVOX0xGOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgICAgICAgICBpZiAoKmluID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluKys7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWVubmwgfD0gU0VFTl9DUkxGOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5ubCB8PSBTRUVOX0NSOworICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAnXG4nOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGluID4gZW5kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAqb3V0KysgPSBjOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZWQgIT0gb3V0cHV0KSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG91dHB1dCk7CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gdHJhbnNsYXRlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvdXQgLSBvdXRfc3RyICE9IGxlbikgeworICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZvdXRwdXQsIG91dCAtIG91dF9zdHIpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzZWxmLT5zZWVubmwgfD0gc2Vlbm5sOworICAgIH0KKworICAgIHJldHVybiBvdXRwdXQ7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKG91dHB1dCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2RlY29kZShubGRlY29kZXJfb2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJpbnB1dCIsICJmaW5hbCIsIE5VTEx9OworICAgIFB5T2JqZWN0ICppbnB1dDsKKyAgICBpbnQgZmluYWwgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98aTpJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZpbnB1dCwgJmZpbmFsKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJfZGVjb2RlKChQeU9iamVjdCAqKSBzZWxmLCBpbnB1dCwgZmluYWwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoraW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9nZXRzdGF0ZShubGRlY29kZXJfb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqYnVmZmVyOworICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyBmbGFnOworCisgICAgaWYgKHNlbGYtPmRlY29kZXIgIT0gUHlfTm9uZSkgeworICAgICAgICBQeU9iamVjdCAqc3RhdGUgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5kZWNvZGVyLAorICAgICAgICAgICBfUHlJT19zdHJfZ2V0c3RhdGUsIE5VTEwpOworICAgICAgICBpZiAoc3RhdGUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoIVB5QXJnX1BhcnNlKHN0YXRlLCAiKE9LKSIsICZidWZmZXIsICZmbGFnKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRihidWZmZXIpOworICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nKCIiKTsKKyAgICAgICAgZmxhZyA9IDA7CisgICAgfQorICAgIGZsYWcgPDw9IDE7CisgICAgaWYgKHNlbGYtPnBlbmRpbmdjcikKKyAgICAgICAgZmxhZyB8PSAxOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOSyIsIGJ1ZmZlciwgZmxhZyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX3NldHN0YXRlKG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdGF0ZSkKK3sKKyAgICBQeU9iamVjdCAqYnVmZmVyOworICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyBmbGFnOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShzdGF0ZSwgIihPSykiLCAmYnVmZmVyLCAmZmxhZykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+cGVuZGluZ2NyID0gKGludCkgZmxhZyAmIDE7CisgICAgZmxhZyA+Pj0gMTsKKworICAgIGlmIChzZWxmLT5kZWNvZGVyICE9IFB5X05vbmUpCisgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzdGF0ZSIsICIoKE9LKSkiLCBidWZmZXIsIGZsYWcpOworICAgIGVsc2UKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX3Jlc2V0KG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHNlbGYtPnNlZW5ubCA9IDA7CisgICAgc2VsZi0+cGVuZGluZ2NyID0gMDsKKyAgICBpZiAoc2VsZi0+ZGVjb2RlciAhPSBQeV9Ob25lKQorICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+ZGVjb2RlciwgX1B5SU9fc3RyX3Jlc2V0LCBOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoraW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9uZXdsaW5lc19nZXQobmxkZWNvZGVyX29iamVjdCAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBzd2l0Y2ggKHNlbGYtPnNlZW5ubCkgeworICAgIGNhc2UgU0VFTl9DUjoKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJcciIpOworICAgIGNhc2UgU0VFTl9MRjoKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJcbiIpOworICAgIGNhc2UgU0VFTl9DUkxGOgorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIlxyXG4iKTsKKyAgICBjYXNlIFNFRU5fQ1IgfCBTRUVOX0xGOgorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgic3MiLCAiXHIiLCAiXG4iKTsKKyAgICBjYXNlIFNFRU5fQ1IgfCBTRUVOX0NSTEY6CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJzcyIsICJcciIsICJcclxuIik7CisgICAgY2FzZSBTRUVOX0xGIHwgU0VFTl9DUkxGOgorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgic3MiLCAiXG4iLCAiXHJcbiIpOworICAgIGNhc2UgU0VFTl9DUiB8IFNFRU5fTEYgfCBTRUVOX0NSTEY6CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJzc3MiLCAiXHIiLCAiXG4iLCAiXHJcbiIpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgfQorCit9CisKKworc3RhdGljIFB5TWV0aG9kRGVmIGluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfbWV0aG9kc1tdID0geworICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKWluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZGVjb2RlLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisgICAgeyJnZXRzdGF0ZSIsIChQeUNGdW5jdGlvbilpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCisgICAgeyJzZXRzdGF0ZSIsIChQeUNGdW5jdGlvbilpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX3NldHN0YXRlLCBNRVRIX099LAorICAgIHsicmVzZXQiLCAoUHlDRnVuY3Rpb24paW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9yZXNldCwgTUVUSF9OT0FSR1N9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIGluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZ2V0c2V0W10gPSB7CisgICAgeyJuZXdsaW5lcyIsIChnZXR0ZXIpaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9uZXdsaW5lc19nZXQsIE5VTEwsIE5VTEx9LAorICAgIHtOVUxMfQorfTsKKworUHlUeXBlT2JqZWN0IFB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciIsIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKG5sZGVjb2Rlcl9vYmplY3QpLCAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIChkZXN0cnVjdG9yKWluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZGVhbGxvYywgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9kb2MsICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIGluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfbWV0aG9kcywgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9nZXRzZXQsIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgKGluaXRwcm9jKWluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfaW5pdCwgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CisKKworLyogVGV4dElPV3JhcHBlciAqLworCitQeURvY19TVFJWQVIodGV4dGlvd3JhcHBlcl9kb2MsCisgICAgIkNoYXJhY3RlciBhbmQgbGluZSBiYXNlZCBsYXllciBvdmVyIGEgQnVmZmVyZWRJT0Jhc2Ugb2JqZWN0LCBidWZmZXIuXG4iCisgICAgIlxuIgorICAgICJlbmNvZGluZyBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgZW5jb2RpbmcgdGhhdCB0aGUgc3RyZWFtIHdpbGwgYmVcbiIKKyAgICAiZGVjb2RlZCBvciBlbmNvZGVkIHdpdGguIEl0IGRlZmF1bHRzIHRvIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZy5cbiIKKyAgICAiXG4iCisgICAgImVycm9ycyBkZXRlcm1pbmVzIHRoZSBzdHJpY3RuZXNzIG9mIGVuY29kaW5nIGFuZCBkZWNvZGluZyAoc2VlIHRoZVxuIgorICAgICJjb2RlY3MucmVnaXN0ZXIpIGFuZCBkZWZhdWx0cyB0byBcInN0cmljdFwiLlxuIgorICAgICJcbiIKKyAgICAibmV3bGluZSBjYW4gYmUgTm9uZSwgJycsICdcXG4nLCAnXFxyJywgb3IgJ1xcclxcbicuICBJdCBjb250cm9scyB0aGVcbiIKKyAgICAiaGFuZGxpbmcgb2YgbGluZSBlbmRpbmdzLiBJZiBpdCBpcyBOb25lLCB1bml2ZXJzYWwgbmV3bGluZXMgaXNcbiIKKyAgICAiZW5hYmxlZC4gIFdpdGggdGhpcyBlbmFibGVkLCBvbiBpbnB1dCwgdGhlIGxpbmVzIGVuZGluZ3MgJ1xcbicsICdcXHInLFxuIgorICAgICJvciAnXFxyXFxuJyBhcmUgdHJhbnNsYXRlZCB0byAnXFxuJyBiZWZvcmUgYmVpbmcgcmV0dXJuZWQgdG8gdGhlXG4iCisgICAgImNhbGxlci4gQ29udmVyc2VseSwgb24gb3V0cHV0LCAnXFxuJyBpcyB0cmFuc2xhdGVkIHRvIHRoZSBzeXN0ZW1cbiIKKyAgICAiZGVmYXVsdCBsaW5lIHNlcGVyYXRvciwgb3MubGluZXNlcC4gSWYgbmV3bGluZSBpcyBhbnkgb3RoZXIgb2YgaXRzXG4iCisgICAgImxlZ2FsIHZhbHVlcywgdGhhdCBuZXdsaW5lIGJlY29tZXMgdGhlIG5ld2xpbmUgd2hlbiB0aGUgZmlsZSBpcyByZWFkXG4iCisgICAgImFuZCBpdCBpcyByZXR1cm5lZCB1bnRyYW5zbGF0ZWQuIE9uIG91dHB1dCwgJ1xcbicgaXMgY29udmVydGVkIHRvIHRoZVxuIgorICAgICJuZXdsaW5lLlxuIgorICAgICJcbiIKKyAgICAiSWYgbGluZV9idWZmZXJpbmcgaXMgVHJ1ZSwgYSBjYWxsIHRvIGZsdXNoIGlzIGltcGxpZWQgd2hlbiBhIGNhbGwgdG9cbiIKKyAgICAid3JpdGUgY29udGFpbnMgYSBuZXdsaW5lIGNoYXJhY3Rlci4iCisgICAgKTsKKwordHlwZWRlZiBQeU9iamVjdCAqCisgICAgICAgICgqZW5jb2RlZnVuY190KShQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQeU9iamVjdF9IRUFECisgICAgaW50IG9rOyAvKiBpbml0aWFsaXplZD8gKi8KKyAgICBpbnQgZGV0YWNoZWQ7CisgICAgUHlfc3NpemVfdCBjaHVua19zaXplOworICAgIFB5T2JqZWN0ICpidWZmZXI7CisgICAgUHlPYmplY3QgKmVuY29kaW5nOworICAgIFB5T2JqZWN0ICplbmNvZGVyOworICAgIFB5T2JqZWN0ICpkZWNvZGVyOworICAgIFB5T2JqZWN0ICpyZWFkbmw7CisgICAgUHlPYmplY3QgKmVycm9yczsKKyAgICBjb25zdCBjaGFyICp3cml0ZW5sOyAvKiB1dGYtOCBlbmNvZGVkLCBOVUxMIHN0YW5kcyBmb3IgXG4gKi8KKyAgICBjaGFyIGxpbmVfYnVmZmVyaW5nOworICAgIGNoYXIgcmVhZHVuaXZlcnNhbDsKKyAgICBjaGFyIHJlYWR0cmFuc2xhdGU7CisgICAgY2hhciB3cml0ZXRyYW5zbGF0ZTsKKyAgICBjaGFyIHNlZWthYmxlOworICAgIGNoYXIgdGVsbGluZzsKKyAgICAvKiBTcGVjaWFsaXplZCBlbmNvZGluZyBmdW5jIChzZWUgYmVsb3cpICovCisgICAgZW5jb2RlZnVuY190IGVuY29kZWZ1bmM7CisgICAgLyogV2hldGhlciBvciBub3QgaXQncyB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbSAqLworICAgIGNoYXIgZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtOworCisgICAgLyogUmVhZHMgYW5kIHdyaXRlcyBhcmUgaW50ZXJuYWxseSBidWZmZXJlZCBpbiBvcmRlciB0byBzcGVlZCB0aGluZ3MgdXAuCisgICAgICAgSG93ZXZlciwgYW55IHJlYWQgd2lsbCBmaXJzdCBmbHVzaCB0aGUgd3JpdGUgYnVmZmVyIGlmIGl0c24ndCBlbXB0eS4KKworICAgICAgIFBsZWFzZSBhbHNvIG5vdGUgdGhhdCB0ZXh0IHRvIGJlIHdyaXR0ZW4gaXMgZmlyc3QgZW5jb2RlZCBiZWZvcmUgYmVpbmcKKyAgICAgICBidWZmZXJlZC4gVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdCBlbmNvZGluZyBlcnJvcnMgYXJlIGltbWVkaWF0ZWx5CisgICAgICAgcmVwb3J0ZWQgdG8gdGhlIGNhbGxlciwgYnV0IGl0IHVuZm9ydHVuYXRlbHkgbWVhbnMgdGhhdCB0aGUKKyAgICAgICBJbmNyZW1lbnRhbEVuY29kZXIgKHdob3NlIGVuY29kZSgpIG1ldGhvZCBpcyBhbHdheXMgd3JpdHRlbiBpbiBQeXRob24pCisgICAgICAgYmVjb21lcyBhIGJvdHRsZW5lY2sgZm9yIHNtYWxsIHdyaXRlcy4KKyAgICAqLworICAgIFB5T2JqZWN0ICpkZWNvZGVkX2NoYXJzOyAgICAgICAvKiBidWZmZXIgZm9yIHRleHQgcmV0dXJuZWQgZnJvbSBkZWNvZGVyICovCisgICAgUHlfc3NpemVfdCBkZWNvZGVkX2NoYXJzX3VzZWQ7IC8qIG9mZnNldCBpbnRvIF9kZWNvZGVkX2NoYXJzIGZvciByZWFkKCkgKi8KKyAgICBQeU9iamVjdCAqcGVuZGluZ19ieXRlczsgICAgICAgLyogbGlzdCBvZiBieXRlcyBvYmplY3RzIHdhaXRpbmcgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiwgb3IgTlVMTCAqLworICAgIFB5X3NzaXplX3QgcGVuZGluZ19ieXRlc19jb3VudDsKKyAgICBQeU9iamVjdCAqc25hcHNob3Q7CisgICAgLyogc25hcHNob3QgaXMgZWl0aGVyIE5vbmUsIG9yIGEgdHVwbGUgKGRlY19mbGFncywgbmV4dF9pbnB1dCkgd2hlcmUKKyAgICAgKiBkZWNfZmxhZ3MgaXMgdGhlIHNlY29uZCAoaW50ZWdlcikgaXRlbSBvZiB0aGUgZGVjb2RlciBzdGF0ZSBhbmQKKyAgICAgKiBuZXh0X2lucHV0IGlzIHRoZSBjaHVuayBvZiBpbnB1dCBieXRlcyB0aGF0IGNvbWVzIG5leHQgYWZ0ZXIgdGhlCisgICAgICogc25hcHNob3QgcG9pbnQuICBXZSB1c2UgdGhpcyB0byByZWNvbnN0cnVjdCBkZWNvZGVyIHN0YXRlcyBpbiB0ZWxsKCkuCisgICAgICovCisKKyAgICAvKiBDYWNoZSByYXcgb2JqZWN0IGlmIGl0J3MgYSBGaWxlSU8gb2JqZWN0ICovCisgICAgUHlPYmplY3QgKnJhdzsKKworICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKKyAgICBQeU9iamVjdCAqZGljdDsKK30gdGV4dGlvOworCisKKy8qIEEgY291cGxlIG9mIHNwZWNpYWxpemVkIGNhc2VzIGluIG9yZGVyIHRvIGJ5cGFzcyB0aGUgc2xvdyBpbmNyZW1lbnRhbAorICAgZW5jb2RpbmcgbWV0aG9kcyBmb3IgdGhlIG1vc3QgcG9wdWxhciBlbmNvZGluZ3MuICovCisKK3N0YXRpYyBQeU9iamVjdCAqCithc2NpaV9lbmNvZGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqdGV4dCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZUFTQ0lJKFB5VW5pY29kZV9BU19VTklDT0RFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+ZXJyb3JzKSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1dGYxNmJlX2VuY29kZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICp0ZXh0KQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRW5jb2RlVVRGMTYoUHlVbmljb2RlX0FTX1VOSUNPREUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5lcnJvcnMpLCAxKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3V0ZjE2bGVfZW5jb2RlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKnRleHQpCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9FbmNvZGVVVEYxNihQeVVuaWNvZGVfQVNfVU5JQ09ERSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPmVycm9ycyksIC0xKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3V0ZjE2X2VuY29kZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICp0ZXh0KQoreworICAgIGlmICghc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtKSB7CisgICAgICAgIC8qIFNraXAgdGhlIEJPTSBhbmQgdXNlIG5hdGl2ZSBieXRlIG9yZGVyaW5nICovCisjaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCisgICAgICAgIHJldHVybiB1dGYxNmJlX2VuY29kZShzZWxmLCB0ZXh0KTsKKyNlbHNlCisgICAgICAgIHJldHVybiB1dGYxNmxlX2VuY29kZShzZWxmLCB0ZXh0KTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZVVURjE2KFB5VW5pY29kZV9BU19VTklDT0RFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+ZXJyb3JzKSwgMCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1dGYzMmJlX2VuY29kZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICp0ZXh0KQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRW5jb2RlVVRGMzIoUHlVbmljb2RlX0FTX1VOSUNPREUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5lcnJvcnMpLCAxKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3V0ZjMybGVfZW5jb2RlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKnRleHQpCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9FbmNvZGVVVEYzMihQeVVuaWNvZGVfQVNfVU5JQ09ERSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPmVycm9ycyksIC0xKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3V0ZjMyX2VuY29kZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICp0ZXh0KQoreworICAgIGlmICghc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtKSB7CisgICAgICAgIC8qIFNraXAgdGhlIEJPTSBhbmQgdXNlIG5hdGl2ZSBieXRlIG9yZGVyaW5nICovCisjaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCisgICAgICAgIHJldHVybiB1dGYzMmJlX2VuY29kZShzZWxmLCB0ZXh0KTsKKyNlbHNlCisgICAgICAgIHJldHVybiB1dGYzMmxlX2VuY29kZShzZWxmLCB0ZXh0KTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZVVURjMyKFB5VW5pY29kZV9BU19VTklDT0RFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+ZXJyb3JzKSwgMCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1dGY4X2VuY29kZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICp0ZXh0KQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRW5jb2RlVVRGOChQeVVuaWNvZGVfQVNfVU5JQ09ERSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5lcnJvcnMpKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2xhdGluMV9lbmNvZGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqdGV4dCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZUxhdGluMShQeVVuaWNvZGVfQVNfVU5JQ09ERSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+ZXJyb3JzKSk7Cit9CisKKy8qIE1hcCBub3JtYWxpemVkIGVuY29kaW5nIG5hbWVzIG9udG8gdGhlIHNwZWNpYWxpemVkIGVuY29kaW5nIGZ1bmNzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGVuY29kZWZ1bmNfdCBlbmNvZGVmdW5jOworfSBlbmNvZGVmdW5jZW50cnk7CisKK3N0YXRpYyBlbmNvZGVmdW5jZW50cnkgZW5jb2RlZnVuY3NbXSA9IHsKKyAgICB7ImFzY2lpIiwgICAgICAgKGVuY29kZWZ1bmNfdCkgYXNjaWlfZW5jb2RlfSwKKyAgICB7Imlzbzg4NTktMSIsICAgKGVuY29kZWZ1bmNfdCkgbGF0aW4xX2VuY29kZX0sCisgICAgeyJ1dGYtOCIsICAgICAgIChlbmNvZGVmdW5jX3QpIHV0ZjhfZW5jb2RlfSwKKyAgICB7InV0Zi0xNi1iZSIsICAgKGVuY29kZWZ1bmNfdCkgdXRmMTZiZV9lbmNvZGV9LAorICAgIHsidXRmLTE2LWxlIiwgICAoZW5jb2RlZnVuY190KSB1dGYxNmxlX2VuY29kZX0sCisgICAgeyJ1dGYtMTYiLCAgICAgIChlbmNvZGVmdW5jX3QpIHV0ZjE2X2VuY29kZX0sCisgICAgeyJ1dGYtMzItYmUiLCAgIChlbmNvZGVmdW5jX3QpIHV0ZjMyYmVfZW5jb2RlfSwKKyAgICB7InV0Zi0zMi1sZSIsICAgKGVuY29kZWZ1bmNfdCkgdXRmMzJsZV9lbmNvZGV9LAorICAgIHsidXRmLTMyIiwgICAgICAoZW5jb2RlZnVuY190KSB1dGYzMl9lbmNvZGV9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKworCitzdGF0aWMgaW50Cit0ZXh0aW93cmFwcGVyX2luaXQodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7ImJ1ZmZlciIsICJlbmNvZGluZyIsICJlcnJvcnMiLAorICAgICAgICAgICAgICAgICAgICAgICJuZXdsaW5lIiwgImxpbmVfYnVmZmVyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICBOVUxMfTsKKyAgICBQeU9iamVjdCAqYnVmZmVyLCAqcmF3OworICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKKyAgICBjaGFyICplcnJvcnMgPSBOVUxMOworICAgIGNoYXIgKm5ld2xpbmUgPSBOVUxMOworICAgIGludCBsaW5lX2J1ZmZlcmluZyA9IDA7CisKKyAgICBQeU9iamVjdCAqcmVzOworICAgIGludCByOworCisgICAgc2VsZi0+b2sgPSAwOworICAgIHNlbGYtPmRldGFjaGVkID0gMDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3x6enppOmZpbGVpbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmYnVmZmVyLCAmZW5jb2RpbmcsICZlcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld2xpbmUsICZsaW5lX2J1ZmZlcmluZykpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChuZXdsaW5lICYmIG5ld2xpbmVbMF0gIT0gJ1wwJworICAgICAgICAmJiAhKG5ld2xpbmVbMF0gPT0gJ1xuJyAmJiBuZXdsaW5lWzFdID09ICdcMCcpCisgICAgICAgICYmICEobmV3bGluZVswXSA9PSAnXHInICYmIG5ld2xpbmVbMV0gPT0gJ1wwJykKKyAgICAgICAgJiYgIShuZXdsaW5lWzBdID09ICdccicgJiYgbmV3bGluZVsxXSA9PSAnXG4nICYmIG5ld2xpbmVbMl0gPT0gJ1wwJykpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiaWxsZWdhbCBuZXdsaW5lIHZhbHVlOiAlcyIsIG5ld2xpbmUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgUHlfQ0xFQVIoc2VsZi0+YnVmZmVyKTsKKyAgICBQeV9DTEVBUihzZWxmLT5lbmNvZGluZyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2Rlcik7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGVjb2Rlcik7CisgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZG5sKTsKKyAgICBQeV9DTEVBUihzZWxmLT5kZWNvZGVkX2NoYXJzKTsKKyAgICBQeV9DTEVBUihzZWxmLT5wZW5kaW5nX2J5dGVzKTsKKyAgICBQeV9DTEVBUihzZWxmLT5zbmFwc2hvdCk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZXJyb3JzKTsKKyAgICBQeV9DTEVBUihzZWxmLT5yYXcpOworICAgIHNlbGYtPmRlY29kZWRfY2hhcnNfdXNlZCA9IDA7CisgICAgc2VsZi0+cGVuZGluZ19ieXRlc19jb3VudCA9IDA7CisgICAgc2VsZi0+ZW5jb2RlZnVuYyA9IE5VTEw7CisgICAgc2VsZi0+d3JpdGVubCA9IE5VTEw7CisKKyAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCAmJiBzZWxmLT5lbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgIGlmIChfUHlJT19sb2NhbGVfbW9kdWxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIF9QeUlPX2xvY2FsZV9tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImxvY2FsZSIpOworICAgICAgICAgICAgaWYgKF9QeUlPX2xvY2FsZV9tb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNlX2xvY2FsZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICB1c2VfbG9jYWxlOgorICAgICAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBQeU9iamVjdF9DYWxsTWV0aG9kKAorICAgICAgICAgICAgICAgIF9QeUlPX2xvY2FsZV9tb2R1bGUsICJnZXRwcmVmZXJyZWRlbmNvZGluZyIsIE5VTEwpOworICAgICAgICAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgY2F0Y2hfSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgSW1wb3J0aW5nIGxvY2FsZSBjYW4gcmFpc2UgYSBJbXBvcnRFcnJvciBiZWNhdXNlIG9mCisgICAgICAgICAgICAgICAgIF9mdW5jdG9vbHMsIGFuZCBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgY2FuIHJhaXNlIGEKKyAgICAgICAgICAgICAgICAgSW1wb3J0RXJyb3IgaWYgX2xvY2FsZSBpcyBub3QgYXZhaWxhYmxlLiAgVGhlc2Ugd2lsbCBoYXBwZW4KKyAgICAgICAgICAgICAgICAgZHVyaW5nIG1vZHVsZSBidWlsZGluZy4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0ltcG9ydEVycm9yKSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgICAgICBzZWxmLT5lbmNvZGluZyA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoImFzY2lpIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFQeVN0cmluZ19DaGVjayhzZWxmLT5lbmNvZGluZykpCisgICAgICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzZWxmLT5lbmNvZGluZyAhPSBOVUxMKQorICAgICAgICBlbmNvZGluZyA9IFB5U3RyaW5nX0FzU3RyaW5nKHNlbGYtPmVuY29kaW5nKTsKKyAgICBlbHNlIGlmIChlbmNvZGluZyAhPSBOVUxMKSB7CisgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlTdHJpbmdfRnJvbVN0cmluZyhlbmNvZGluZyk7CisgICAgICAgIGlmIChzZWxmLT5lbmNvZGluZyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBlbmNvZGluZyIpOworICAgIH0KKworICAgIGlmIChlcnJvcnMgPT0gTlVMTCkKKyAgICAgICAgZXJyb3JzID0gInN0cmljdCI7CisgICAgc2VsZi0+ZXJyb3JzID0gUHlCeXRlc19Gcm9tU3RyaW5nKGVycm9ycyk7CisgICAgaWYgKHNlbGYtPmVycm9ycyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgc2VsZi0+Y2h1bmtfc2l6ZSA9IDgxOTI7CisgICAgc2VsZi0+cmVhZHVuaXZlcnNhbCA9IChuZXdsaW5lID09IE5VTEwgfHwgbmV3bGluZVswXSA9PSAnXDAnKTsKKyAgICBzZWxmLT5saW5lX2J1ZmZlcmluZyA9IGxpbmVfYnVmZmVyaW5nOworICAgIHNlbGYtPnJlYWR0cmFuc2xhdGUgPSAobmV3bGluZSA9PSBOVUxMKTsKKyAgICBpZiAobmV3bGluZSkgeworICAgICAgICBzZWxmLT5yZWFkbmwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKG5ld2xpbmUpOworICAgICAgICBpZiAoc2VsZi0+cmVhZG5sID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbGYtPndyaXRldHJhbnNsYXRlID0gKG5ld2xpbmUgPT0gTlVMTCB8fCBuZXdsaW5lWzBdICE9ICdcMCcpOworICAgIGlmICghc2VsZi0+cmVhZHVuaXZlcnNhbCAmJiBzZWxmLT53cml0ZXRyYW5zbGF0ZSkgeworICAgICAgICBzZWxmLT53cml0ZW5sID0gUHlTdHJpbmdfQXNTdHJpbmcoc2VsZi0+cmVhZG5sKTsKKyAgICAgICAgaWYgKCFzdHJjbXAoc2VsZi0+d3JpdGVubCwgIlxuIikpCisgICAgICAgICAgICBzZWxmLT53cml0ZW5sID0gTlVMTDsKKyAgICB9CisjaWZkZWYgTVNfV0lORE9XUworICAgIGVsc2UKKyAgICAgICAgc2VsZi0+d3JpdGVubCA9ICJcclxuIjsKKyNlbmRpZgorCisgICAgLyogQnVpbGQgdGhlIGRlY29kZXIgb2JqZWN0ICovCisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChidWZmZXIsICJyZWFkYWJsZSIsIE5VTEwpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICByID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgaWYgKHIgPT0gLTEpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKHIgPT0gMSkgeworICAgICAgICBzZWxmLT5kZWNvZGVyID0gUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIoCisgICAgICAgICAgICBlbmNvZGluZywgZXJyb3JzKTsKKyAgICAgICAgaWYgKHNlbGYtPmRlY29kZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKHNlbGYtPnJlYWR1bml2ZXJzYWwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppbmNyZW1lbnRhbERlY29kZXIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oCisgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopJlB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9UeXBlLAorICAgICAgICAgICAgICAgICJPaSIsIHNlbGYtPmRlY29kZXIsIChpbnQpc2VsZi0+cmVhZHRyYW5zbGF0ZSk7CisgICAgICAgICAgICBpZiAoaW5jcmVtZW50YWxEZWNvZGVyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPmRlY29kZXIpOworICAgICAgICAgICAgc2VsZi0+ZGVjb2RlciA9IGluY3JlbWVudGFsRGVjb2RlcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEJ1aWxkIHRoZSBlbmNvZGVyIG9iamVjdCAqLworICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2QoYnVmZmVyLCAid3JpdGFibGUiLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgciA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIGlmIChyID09IC0xKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChyID09IDEpIHsKKyAgICAgICAgUHlPYmplY3QgKmNpOworICAgICAgICBzZWxmLT5lbmNvZGVyID0gUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIoCisgICAgICAgICAgICBlbmNvZGluZywgZXJyb3JzKTsKKyAgICAgICAgaWYgKHNlbGYtPmVuY29kZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIC8qIEdldCB0aGUgbm9ybWFsaXplZCBuYW1lZCBvZiB0aGUgY29kZWMgKi8KKyAgICAgICAgY2kgPSBfUHlDb2RlY19Mb29rdXAoZW5jb2RpbmcpOworICAgICAgICBpZiAoY2kgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJlcyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY2ksICJuYW1lIik7CisgICAgICAgIFB5X0RFQ1JFRihjaSk7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhyZXMpKSB7CisgICAgICAgICAgICBlbmNvZGVmdW5jZW50cnkgKmUgPSBlbmNvZGVmdW5jczsKKyAgICAgICAgICAgIHdoaWxlIChlLT5uYW1lICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChQeVN0cmluZ19BU19TVFJJTkcocmVzKSwgZS0+bmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZW5jb2RlZnVuYyA9IGUtPmVuY29kZWZ1bmM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUHlfWERFQ1JFRihyZXMpOworICAgIH0KKworICAgIHNlbGYtPmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBQeV9JTkNSRUYoYnVmZmVyKTsKKworICAgIGlmIChQeV9UWVBFKGJ1ZmZlcikgPT0gJlB5QnVmZmVyZWRSZWFkZXJfVHlwZSB8fAorICAgICAgICBQeV9UWVBFKGJ1ZmZlcikgPT0gJlB5QnVmZmVyZWRXcml0ZXJfVHlwZSB8fAorICAgICAgICBQeV9UWVBFKGJ1ZmZlcikgPT0gJlB5QnVmZmVyZWRSYW5kb21fVHlwZSkgeworICAgICAgICByYXcgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGJ1ZmZlciwgInJhdyIpOworICAgICAgICAvKiBDYWNoZSB0aGUgcmF3IEZpbGVJTyBvYmplY3QgdG8gc3BlZWQgdXAgJ2Nsb3NlZCcgY2hlY2tzICovCisgICAgICAgIGlmIChyYXcgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeV9UWVBFKHJhdykgPT0gJlB5RmlsZUlPX1R5cGUpCisgICAgICAgICAgICBzZWxmLT5yYXcgPSByYXc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyYXcpOworICAgIH0KKworICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2QoYnVmZmVyLCAic2Vla2FibGUiLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc2VsZi0+c2Vla2FibGUgPSBzZWxmLT50ZWxsaW5nID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CisgICAgUHlfREVDUkVGKHJlcyk7CisKKyAgICBzZWxmLT5lbmNvZGluZ19zdGFydF9vZl9zdHJlYW0gPSAwOworICAgIGlmIChzZWxmLT5zZWVrYWJsZSAmJiBzZWxmLT5lbmNvZGVyKSB7CisgICAgICAgIFB5T2JqZWN0ICpjb29raWVPYmo7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtID0gMTsKKworICAgICAgICBjb29raWVPYmogPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhidWZmZXIsIF9QeUlPX3N0cl90ZWxsLCBOVUxMKTsKKyAgICAgICAgaWYgKGNvb2tpZU9iaiA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY29va2llT2JqLCBfUHlJT196ZXJvLCBQeV9FUSk7CisgICAgICAgIFB5X0RFQ1JFRihjb29raWVPYmopOworICAgICAgICBpZiAoY21wIDwgMCkgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbXAgPT0gMCkgeworICAgICAgICAgICAgc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtID0gMDsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmVuY29kZXIsIF9QeUlPX3N0cl9zZXRzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUlPX3plcm8sIE5VTEwpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNlbGYtPm9rID0gMTsKKyAgICByZXR1cm4gMDsKKworICBlcnJvcjoKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQKK190ZXh0aW93cmFwcGVyX2NsZWFyKHRleHRpbyAqc2VsZikKK3sKKyAgICBpZiAoc2VsZi0+b2sgJiYgX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzZWxmLT5vayA9IDA7CisgICAgUHlfQ0xFQVIoc2VsZi0+YnVmZmVyKTsKKyAgICBQeV9DTEVBUihzZWxmLT5lbmNvZGluZyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2Rlcik7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGVjb2Rlcik7CisgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZG5sKTsKKyAgICBQeV9DTEVBUihzZWxmLT5kZWNvZGVkX2NoYXJzKTsKKyAgICBQeV9DTEVBUihzZWxmLT5wZW5kaW5nX2J5dGVzKTsKKyAgICBQeV9DTEVBUihzZWxmLT5zbmFwc2hvdCk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZXJyb3JzKTsKKyAgICBQeV9DTEVBUihzZWxmLT5yYXcpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordGV4dGlvd3JhcHBlcl9kZWFsbG9jKHRleHRpbyAqc2VsZikKK3sKKyAgICBpZiAoX3RleHRpb3dyYXBwZXJfY2xlYXIoc2VsZikgPCAwKQorICAgICAgICByZXR1cm47CisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CisgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopc2VsZik7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CisgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZSgoUHlPYmplY3QgKilzZWxmKTsKK30KKworc3RhdGljIGludAordGV4dGlvd3JhcHBlcl90cmF2ZXJzZSh0ZXh0aW8gKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKHNlbGYtPmJ1ZmZlcik7CisgICAgUHlfVklTSVQoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5X1ZJU0lUKHNlbGYtPmVuY29kZXIpOworICAgIFB5X1ZJU0lUKHNlbGYtPmRlY29kZXIpOworICAgIFB5X1ZJU0lUKHNlbGYtPnJlYWRubCk7CisgICAgUHlfVklTSVQoc2VsZi0+ZGVjb2RlZF9jaGFycyk7CisgICAgUHlfVklTSVQoc2VsZi0+cGVuZGluZ19ieXRlcyk7CisgICAgUHlfVklTSVQoc2VsZi0+c25hcHNob3QpOworICAgIFB5X1ZJU0lUKHNlbGYtPmVycm9ycyk7CisgICAgUHlfVklTSVQoc2VsZi0+cmF3KTsKKworICAgIFB5X1ZJU0lUKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit0ZXh0aW93cmFwcGVyX2NsZWFyKHRleHRpbyAqc2VsZikKK3sKKyAgICBpZiAoX3RleHRpb3dyYXBwZXJfY2xlYXIoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX2Nsb3NlZF9nZXQodGV4dGlvICpzZWxmLCB2b2lkICpjb250ZXh0KTsKKworLyogVGhpcyBtYWNybyB0YWtlcyBzb21lIHNob3J0Y3V0cyB0byBtYWtlIHRoZSBjb21tb24gY2FzZSBmYXN0ZXIuICovCisjZGVmaW5lIENIRUNLX0NMT1NFRChzZWxmKSBcCisgICAgZG8geyBcCisgICAgICAgIGludCByOyBcCisgICAgICAgIFB5T2JqZWN0ICpfcmVzOyBcCisgICAgICAgIGlmIChQeV9UWVBFKHNlbGYpID09ICZQeVRleHRJT1dyYXBwZXJfVHlwZSkgeyBcCisgICAgICAgICAgICBpZiAoc2VsZi0+cmF3ICE9IE5VTEwpIFwKKyAgICAgICAgICAgICAgICByID0gX1B5RmlsZUlPX2Nsb3NlZChzZWxmLT5yYXcpOyBcCisgICAgICAgICAgICBlbHNlIHsgXAorICAgICAgICAgICAgICAgIF9yZXMgPSB0ZXh0aW93cmFwcGVyX2Nsb3NlZF9nZXQoc2VsZiwgTlVMTCk7IFwKKyAgICAgICAgICAgICAgICBpZiAoX3JlcyA9PSBOVUxMKSBcCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyBcCisgICAgICAgICAgICAgICAgciA9IFB5T2JqZWN0X0lzVHJ1ZShfcmVzKTsgXAorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihfcmVzKTsgXAorICAgICAgICAgICAgICAgIGlmIChyIDwgMCkgXAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgICAgICBpZiAociA+IDApIHsgXAorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlLiIpOyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9IFwKKyAgICAgICAgZWxzZSBpZiAoX1B5SU9CYXNlX2NoZWNrX2Nsb3NlZCgoUHlPYmplY3QgKilzZWxmLCBQeV9UcnVlKSA9PSBOVUxMKSBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikgXAorICAgIGlmIChzZWxmLT5vayA8PSAwKSB7IFwKKyAgICAgICAgaWYgKHNlbGYtPmRldGFjaGVkKSB7IFwKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAgICAgICJ1bmRlcmx5aW5nIGJ1ZmZlciBoYXMgYmVlbiBkZXRhY2hlZCIpOyBcCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9uIG9uIHVuaW5pdGlhbGl6ZWQgb2JqZWN0Iik7IFwKKyAgICAgICAgfSBcCisgICAgICAgIHJldHVybiBOVUxMOyBcCisgICAgfQorCisjZGVmaW5lIENIRUNLX0lOSVRJQUxJWkVEX0lOVChzZWxmKSBcCisgICAgaWYgKHNlbGYtPm9rIDw9IDApIHsgXAorICAgICAgICBpZiAoc2VsZi0+ZGV0YWNoZWQpIHsgXAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgInVuZGVybHlpbmcgYnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkIik7IFwKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAgICAgIkkvTyBvcGVyYXRpb24gb24gdW5pbml0aWFsaXplZCBvYmplY3QiKTsgXAorICAgICAgICB9IFwKKyAgICAgICAgcmV0dXJuIC0xOyBcCisgICAgfQorCisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX2RldGFjaCh0ZXh0aW8gKnNlbGYpCit7CisgICAgUHlPYmplY3QgKmJ1ZmZlciwgKnJlczsKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygoUHlPYmplY3QgKilzZWxmLCBfUHlJT19zdHJfZmx1c2gsIE5VTEwpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgYnVmZmVyID0gc2VsZi0+YnVmZmVyOworICAgIHNlbGYtPmJ1ZmZlciA9IE5VTEw7CisgICAgc2VsZi0+ZGV0YWNoZWQgPSAxOworICAgIHNlbGYtPm9rID0gMDsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitQeV9MT0NBTF9JTkxJTkUoY29uc3QgUHlfVU5JQ09ERSAqKQorZmluZGNoYXIoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBQeV9VTklDT0RFIGNoKQoreworICAgIC8qIGxpa2Ugd2NzY2hyLCBidXQgZG9lc24ndCBzdG9wIGF0IE5VTEwgY2hhcmFjdGVycyAqLworICAgIHdoaWxlIChzaXplLS0gPiAwKSB7CisgICAgICAgIGlmICgqcyA9PSBjaCkKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICBzKys7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCisvKiBGbHVzaCB0aGUgaW50ZXJuYWwgd3JpdGUgYnVmZmVyLiBUaGlzIGRvZXNuJ3QgZXhwbGljaXRseSBmbHVzaCB0aGUKKyAgIHVuZGVybHlpbmcgYnVmZmVyZWQgb2JqZWN0LCB0aG91Z2guICovCitzdGF0aWMgaW50CitfdGV4dGlvd3JhcHBlcl93cml0ZWZsdXNoKHRleHRpbyAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqcGVuZGluZywgKmIsICpyZXQ7CisKKyAgICBpZiAoc2VsZi0+cGVuZGluZ19ieXRlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHBlbmRpbmcgPSBzZWxmLT5wZW5kaW5nX2J5dGVzOworICAgIFB5X0lOQ1JFRihwZW5kaW5nKTsKKyAgICBzZWxmLT5wZW5kaW5nX2J5dGVzX2NvdW50ID0gMDsKKyAgICBQeV9DTEVBUihzZWxmLT5wZW5kaW5nX2J5dGVzKTsKKworICAgIGIgPSBfUHlCeXRlc19Kb2luKF9QeUlPX2VtcHR5X2J5dGVzLCBwZW5kaW5nKTsKKyAgICBQeV9ERUNSRUYocGVuZGluZyk7CisgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldCA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlJT19zdHJfd3JpdGUsIGIsIE5VTEwpOworICAgIFB5X0RFQ1JFRihiKTsKKyAgICBpZiAocmV0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeV9ERUNSRUYocmV0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfd3JpdGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0OworICAgIFB5T2JqZWN0ICp0ZXh0OyAvKiBvd25lZCByZWZlcmVuY2UgKi8KKyAgICBQeU9iamVjdCAqYjsKKyAgICBQeV9zc2l6ZV90IHRleHRsZW47CisgICAgaW50IGhhc2xmID0gMDsKKyAgICBpbnQgbmVlZGZsdXNoID0gMDsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOndyaXRlIiwgJnRleHQpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKworICAgIGlmIChzZWxmLT5lbmNvZGVyID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsICJub3Qgd3JpdGFibGUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfSU5DUkVGKHRleHQpOworCisgICAgdGV4dGxlbiA9IFB5VW5pY29kZV9HZXRTaXplKHRleHQpOworCisgICAgaWYgKChzZWxmLT53cml0ZXRyYW5zbGF0ZSAmJiBzZWxmLT53cml0ZW5sICE9IE5VTEwpIHx8IHNlbGYtPmxpbmVfYnVmZmVyaW5nKQorICAgICAgICBpZiAoZmluZGNoYXIoUHlVbmljb2RlX0FTX1VOSUNPREUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodGV4dCksICdcbicpKQorICAgICAgICAgICAgaGFzbGYgPSAxOworCisgICAgaWYgKGhhc2xmICYmIHNlbGYtPndyaXRldHJhbnNsYXRlICYmIHNlbGYtPndyaXRlbmwgIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqbmV3dGV4dCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoCisgICAgICAgICAgICB0ZXh0LCAicmVwbGFjZSIsICJzcyIsICJcbiIsIHNlbGYtPndyaXRlbmwpOworICAgICAgICBQeV9ERUNSRUYodGV4dCk7CisgICAgICAgIGlmIChuZXd0ZXh0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgdGV4dCA9IG5ld3RleHQ7CisgICAgfQorCisgICAgaWYgKHNlbGYtPmxpbmVfYnVmZmVyaW5nICYmCisgICAgICAgIChoYXNsZiB8fAorICAgICAgICAgZmluZGNoYXIoUHlVbmljb2RlX0FTX1VOSUNPREUodGV4dCksCisgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodGV4dCksICdccicpKSkKKyAgICAgICAgbmVlZGZsdXNoID0gMTsKKworICAgIC8qIFhYWCBXaGF0IGlmIHdlIHdlcmUganVzdCByZWFkaW5nPyAqLworICAgIGlmIChzZWxmLT5lbmNvZGVmdW5jICE9IE5VTEwpIHsKKyAgICAgICAgYiA9ICgqc2VsZi0+ZW5jb2RlZnVuYykoKFB5T2JqZWN0ICopIHNlbGYsIHRleHQpOworICAgICAgICBzZWxmLT5lbmNvZGluZ19zdGFydF9vZl9zdHJlYW0gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGIgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5lbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5SU9fc3RyX2VuY29kZSwgdGV4dCwgTlVMTCk7CisgICAgUHlfREVDUkVGKHRleHQpOworICAgIGlmIChiID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnBlbmRpbmdfYnl0ZXMgPT0gTlVMTCkgeworICAgICAgICBzZWxmLT5wZW5kaW5nX2J5dGVzID0gUHlMaXN0X05ldygwKTsKKyAgICAgICAgaWYgKHNlbGYtPnBlbmRpbmdfYnl0ZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc2VsZi0+cGVuZGluZ19ieXRlc19jb3VudCA9IDA7CisgICAgfQorICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPnBlbmRpbmdfYnl0ZXMsIGIpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoYik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzZWxmLT5wZW5kaW5nX2J5dGVzX2NvdW50ICs9IFB5Qnl0ZXNfR0VUX1NJWkUoYik7CisgICAgUHlfREVDUkVGKGIpOworICAgIGlmIChzZWxmLT5wZW5kaW5nX2J5dGVzX2NvdW50ID4gc2VsZi0+Y2h1bmtfc2l6ZSB8fCBuZWVkZmx1c2gpIHsKKyAgICAgICAgaWYgKF90ZXh0aW93cmFwcGVyX3dyaXRlZmx1c2goc2VsZikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKG5lZWRmbHVzaCkgeworICAgICAgICByZXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5idWZmZXIsIF9QeUlPX3N0cl9mbHVzaCwgTlVMTCk7CisgICAgICAgIGlmIChyZXQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBQeV9ERUNSRUYocmV0KTsKKyAgICB9CisKKyAgICBQeV9DTEVBUihzZWxmLT5zbmFwc2hvdCk7CisKKyAgICBpZiAoc2VsZi0+ZGVjb2RlcikgeworICAgICAgICByZXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmRlY29kZXIsICJyZXNldCIsIE5VTEwpOworICAgICAgICBpZiAocmV0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlfREVDUkVGKHJldCk7CisgICAgfQorCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdCh0ZXh0bGVuKTsKK30KKworLyogU3RlYWwgYSByZWZlcmVuY2UgdG8gY2hhcnMgYW5kIHN0b3JlIGl0IGluIHRoZSBkZWNvZGVkX2NoYXIgYnVmZmVyOworICovCitzdGF0aWMgdm9pZAordGV4dGlvd3JhcHBlcl9zZXRfZGVjb2RlZF9jaGFycyh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICpjaGFycykKK3sKKyAgICBQeV9DTEVBUihzZWxmLT5kZWNvZGVkX2NoYXJzKTsKKyAgICBzZWxmLT5kZWNvZGVkX2NoYXJzID0gY2hhcnM7CisgICAgc2VsZi0+ZGVjb2RlZF9jaGFyc191c2VkID0gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfZ2V0X2RlY29kZWRfY2hhcnModGV4dGlvICpzZWxmLCBQeV9zc2l6ZV90IG4pCit7CisgICAgUHlPYmplY3QgKmNoYXJzOworICAgIFB5X3NzaXplX3QgYXZhaWw7CisKKyAgICBpZiAoc2VsZi0+ZGVjb2RlZF9jaGFycyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOworCisgICAgYXZhaWwgPSAoUHlVbmljb2RlX0dFVF9TSVpFKHNlbGYtPmRlY29kZWRfY2hhcnMpCisgICAgICAgICAgICAgLSBzZWxmLT5kZWNvZGVkX2NoYXJzX3VzZWQpOworCisgICAgYXNzZXJ0KGF2YWlsID49IDApOworCisgICAgaWYgKG4gPCAwIHx8IG4gPiBhdmFpbCkKKyAgICAgICAgbiA9IGF2YWlsOworCisgICAgaWYgKHNlbGYtPmRlY29kZWRfY2hhcnNfdXNlZCA+IDAgfHwgbiA8IGF2YWlsKSB7CisgICAgICAgIGNoYXJzID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKAorICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUoc2VsZi0+ZGVjb2RlZF9jaGFycykKKyAgICAgICAgICAgICsgc2VsZi0+ZGVjb2RlZF9jaGFyc191c2VkLCBuKTsKKyAgICAgICAgaWYgKGNoYXJzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGNoYXJzID0gc2VsZi0+ZGVjb2RlZF9jaGFyczsKKyAgICAgICAgUHlfSU5DUkVGKGNoYXJzKTsKKyAgICB9CisKKyAgICBzZWxmLT5kZWNvZGVkX2NoYXJzX3VzZWQgKz0gbjsKKyAgICByZXR1cm4gY2hhcnM7Cit9CisKKy8qIFJlYWQgYW5kIGRlY29kZSB0aGUgbmV4dCBjaHVuayBvZiBkYXRhIGZyb20gdGhlIEJ1ZmZlcmVkUmVhZGVyLgorICovCitzdGF0aWMgaW50Cit0ZXh0aW93cmFwcGVyX3JlYWRfY2h1bmsodGV4dGlvICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpkZWNfYnVmZmVyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZGVjX2ZsYWdzID0gTlVMTDsKKyAgICBQeU9iamVjdCAqaW5wdXRfY2h1bmsgPSBOVUxMOworICAgIFB5T2JqZWN0ICpkZWNvZGVkX2NoYXJzLCAqY2h1bmtfc2l6ZTsKKyAgICBpbnQgZW9mOworCisgICAgLyogVGhlIHJldHVybiB2YWx1ZSBpcyBUcnVlIHVubGVzcyBFT0Ygd2FzIHJlYWNoZWQuICBUaGUgZGVjb2RlZCBzdHJpbmcgaXMKKyAgICAgKiBwbGFjZWQgaW4gc2VsZi5fZGVjb2RlZF9jaGFycyAocmVwbGFjaW5nIGl0cyBwcmV2aW91cyB2YWx1ZSkuICBUaGUKKyAgICAgKiBlbnRpcmUgaW5wdXQgY2h1bmsgaXMgc2VudCB0byB0aGUgZGVjb2RlciwgdGhvdWdoIHNvbWUgb2YgaXQgbWF5IHJlbWFpbgorICAgICAqIGJ1ZmZlcmVkIGluIHRoZSBkZWNvZGVyLCB5ZXQgdG8gYmUgY29udmVydGVkLgorICAgICAqLworCisgICAgaWYgKHNlbGYtPmRlY29kZXIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwgIm5vdCByZWFkYWJsZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHNlbGYtPnRlbGxpbmcpIHsKKyAgICAgICAgLyogVG8gcHJlcGFyZSBmb3IgdGVsbCgpLCB3ZSBuZWVkIHRvIHNuYXBzaG90IGEgcG9pbnQgaW4gdGhlIGZpbGUKKyAgICAgICAgICogd2hlcmUgdGhlIGRlY29kZXIncyBpbnB1dCBidWZmZXIgaXMgZW1wdHkuCisgICAgICAgICAqLworCisgICAgICAgIFB5T2JqZWN0ICpzdGF0ZSA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUlPX3N0cl9nZXRzdGF0ZSwgTlVMTCk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAvKiBHaXZlbiB0aGlzLCB3ZSBrbm93IHRoZXJlIHdhcyBhIHZhbGlkIHNuYXBzaG90IHBvaW50CisgICAgICAgICAqIGxlbihkZWNfYnVmZmVyKSBieXRlcyBhZ28gd2l0aCBkZWNvZGVyIHN0YXRlIChiJycsIGRlY19mbGFncykuCisgICAgICAgICAqLworICAgICAgICBpZiAoUHlBcmdfUGFyc2Uoc3RhdGUsICIoT08pIiwgJmRlY19idWZmZXIsICZkZWNfZmxhZ3MpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoZGVjX2J1ZmZlcik7CisgICAgICAgIFB5X0lOQ1JFRihkZWNfZmxhZ3MpOworICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgIH0KKworICAgIC8qIFJlYWQgYSBjaHVuaywgZGVjb2RlIGl0LCBhbmQgcHV0IHRoZSByZXN1bHQgaW4gc2VsZi5fZGVjb2RlZF9jaGFycy4gKi8KKyAgICBjaHVua19zaXplID0gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPmNodW5rX3NpemUpOworICAgIGlmIChjaHVua19zaXplID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpbnB1dF9jaHVuayA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmJ1ZmZlciwKKyAgICAgICAgX1B5SU9fc3RyX3JlYWQxLCBjaHVua19zaXplLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYoY2h1bmtfc2l6ZSk7CisgICAgaWYgKGlucHV0X2NodW5rID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBhc3NlcnQoUHlCeXRlc19DaGVjayhpbnB1dF9jaHVuaykpOworCisgICAgZW9mID0gKFB5Qnl0ZXNfU2l6ZShpbnB1dF9jaHVuaykgPT0gMCk7CisKKyAgICBpZiAoUHlfVFlQRShzZWxmLT5kZWNvZGVyKSA9PSAmUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX1R5cGUpIHsKKyAgICAgICAgZGVjb2RlZF9jaGFycyA9IF9QeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJfZGVjb2RlKAorICAgICAgICAgICAgc2VsZi0+ZGVjb2RlciwgaW5wdXRfY2h1bmssIGVvZik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkZWNvZGVkX2NoYXJzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+ZGVjb2RlciwKKyAgICAgICAgICAgIF9QeUlPX3N0cl9kZWNvZGUsIGlucHV0X2NodW5rLCBlb2YgPyBQeV9UcnVlIDogUHlfRmFsc2UsIE5VTEwpOworICAgIH0KKworICAgIC8qIFRPRE8gc2FuaXR5IGNoZWNrOiBpc2luc3RhbmNlKGRlY29kZWRfY2hhcnMsIHVuaWNvZGUpICovCisgICAgaWYgKGRlY29kZWRfY2hhcnMgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworICAgIHRleHRpb3dyYXBwZXJfc2V0X2RlY29kZWRfY2hhcnMoc2VsZiwgZGVjb2RlZF9jaGFycyk7CisgICAgaWYgKFB5VW5pY29kZV9HRVRfU0laRShkZWNvZGVkX2NoYXJzKSA+IDApCisgICAgICAgIGVvZiA9IDA7CisKKyAgICBpZiAoc2VsZi0+dGVsbGluZykgeworICAgICAgICAvKiBBdCB0aGUgc25hcHNob3QgcG9pbnQsIGxlbihkZWNfYnVmZmVyKSBieXRlcyBiZWZvcmUgdGhlIHJlYWQsIHRoZQorICAgICAgICAgKiBuZXh0IGlucHV0IHRvIGJlIGRlY29kZWQgaXMgZGVjX2J1ZmZlciArIGlucHV0X2NodW5rLgorICAgICAgICAgKi8KKyAgICAgICAgUHlPYmplY3QgKm5leHRfaW5wdXQgPSBQeU51bWJlcl9BZGQoZGVjX2J1ZmZlciwgaW5wdXRfY2h1bmspOworICAgICAgICBpZiAobmV4dF9pbnB1dCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBhc3NlcnQgKFB5Qnl0ZXNfQ2hlY2sobmV4dF9pbnB1dCkpOworICAgICAgICBQeV9ERUNSRUYoZGVjX2J1ZmZlcik7CisgICAgICAgIFB5X0NMRUFSKHNlbGYtPnNuYXBzaG90KTsKKyAgICAgICAgc2VsZi0+c25hcHNob3QgPSBQeV9CdWlsZFZhbHVlKCJOTiIsIGRlY19mbGFncywgbmV4dF9pbnB1dCk7CisgICAgfQorICAgIFB5X0RFQ1JFRihpbnB1dF9jaHVuayk7CisKKyAgICByZXR1cm4gKGVvZiA9PSAwKTsKKworICBmYWlsOgorICAgIFB5X1hERUNSRUYoZGVjX2J1ZmZlcik7CisgICAgUHlfWERFQ1JFRihkZWNfZmxhZ3MpOworICAgIFB5X1hERUNSRUYoaW5wdXRfY2h1bmspOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfcmVhZCh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X3NzaXplX3QgbiA9IC0xOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMLCAqY2h1bmtzID0gTlVMTDsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6cmVhZCIsICZfUHlJT19Db252ZXJ0U3NpemVfdCwgJm4pKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKworICAgIGlmIChzZWxmLT5kZWNvZGVyID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsICJub3QgcmVhZGFibGUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKF90ZXh0aW93cmFwcGVyX3dyaXRlZmx1c2goc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChuIDwgMCkgeworICAgICAgICAvKiBSZWFkIGV2ZXJ5dGhpbmcgKi8KKyAgICAgICAgUHlPYmplY3QgKmJ5dGVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5idWZmZXIsICJyZWFkIiwgTlVMTCk7CisgICAgICAgIFB5T2JqZWN0ICpkZWNvZGVkLCAqZmluYWw7CisgICAgICAgIGlmIChieXRlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBkZWNvZGVkID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+ZGVjb2RlciwgX1B5SU9fc3RyX2RlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzLCBQeV9UcnVlLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKKyAgICAgICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICByZXN1bHQgPSB0ZXh0aW93cmFwcGVyX2dldF9kZWNvZGVkX2NoYXJzKHNlbGYsIC0xKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkZWNvZGVkKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgPSBQeVVuaWNvZGVfQ29uY2F0KHJlc3VsdCwgZGVjb2RlZCk7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICBQeV9ERUNSRUYoZGVjb2RlZCk7CisgICAgICAgIGlmIChmaW5hbCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIFB5X0NMRUFSKHNlbGYtPnNuYXBzaG90KTsKKyAgICAgICAgcmV0dXJuIGZpbmFsOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaW50IHJlcyA9IDE7CisgICAgICAgIFB5X3NzaXplX3QgcmVtYWluaW5nID0gbjsKKworICAgICAgICByZXN1bHQgPSB0ZXh0aW93cmFwcGVyX2dldF9kZWNvZGVkX2NoYXJzKHNlbGYsIG4pOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHJlbWFpbmluZyAtPSBQeVVuaWNvZGVfR0VUX1NJWkUocmVzdWx0KTsKKworICAgICAgICAvKiBLZWVwIHJlYWRpbmcgY2h1bmtzIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIHRvIHJldHVybiAqLworICAgICAgICB3aGlsZSAocmVtYWluaW5nID4gMCkgeworICAgICAgICAgICAgcmVzID0gdGV4dGlvd3JhcHBlcl9yZWFkX2NodW5rKHNlbGYpOworICAgICAgICAgICAgaWYgKHJlcyA8IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSAgLyogRU9GICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoY2h1bmtzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjaHVua3MgPSBQeUxpc3RfTmV3KDApOworICAgICAgICAgICAgICAgIGlmIChjaHVua3MgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY2h1bmtzLCByZXN1bHQpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRleHRpb3dyYXBwZXJfZ2V0X2RlY29kZWRfY2hhcnMoc2VsZiwgcmVtYWluaW5nKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICByZW1haW5pbmcgLT0gUHlVbmljb2RlX0dFVF9TSVpFKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNodW5rcyAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IE5VTEwgJiYgUHlMaXN0X0FwcGVuZChjaHVua3MsIHJlc3VsdCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfSm9pbihfUHlJT19lbXB0eV9zdHIsIGNodW5rcyk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgUHlfQ0xFQVIoY2h1bmtzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgZmFpbDoKKyAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgUHlfWERFQ1JFRihjaHVua3MpOworICAgIHJldHVybiBOVUxMOworfQorCisKKy8qIE5PVEU6IGBlbmRgIG11c3QgcG9pbnQgdG8gdGhlIHJlYWwgZW5kIG9mIHRoZSBQeV9VTklDT0RFIHN0b3JhZ2UsCisgICB0aGF0IGlzIHRvIHRoZSBOVUwgY2hhcmFjdGVyLiBPdGhlcndpc2UgdGhlIGZ1bmN0aW9uIHdpbGwgcHJvZHVjZQorICAgaW5jb3JyZWN0IHJlc3VsdHMuICovCitzdGF0aWMgUHlfVU5JQ09ERSAqCitmaW5kX2NvbnRyb2xfY2hhcihQeV9VTklDT0RFICpzdGFydCwgUHlfVU5JQ09ERSAqZW5kLCBQeV9VTklDT0RFIGNoKQoreworICAgIFB5X1VOSUNPREUgKnMgPSBzdGFydDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHdoaWxlICgqcyA+IGNoKQorICAgICAgICAgICAgcysrOworICAgICAgICBpZiAoKnMgPT0gY2gpCisgICAgICAgICAgICByZXR1cm4gczsKKyAgICAgICAgaWYgKHMgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHMrKzsKKyAgICB9Cit9CisKK1B5X3NzaXplX3QKK19QeUlPX2ZpbmRfbGluZV9lbmRpbmcoCisgICAgaW50IHRyYW5zbGF0ZWQsIGludCB1bml2ZXJzYWwsIFB5T2JqZWN0ICpyZWFkbmwsCisgICAgUHlfVU5JQ09ERSAqc3RhcnQsIFB5X1VOSUNPREUgKmVuZCwgUHlfc3NpemVfdCAqY29uc3VtZWQpCit7CisgICAgUHlfc3NpemVfdCBsZW4gPSBlbmQgLSBzdGFydDsKKworICAgIGlmICh0cmFuc2xhdGVkKSB7CisgICAgICAgIC8qIE5ld2xpbmVzIGFyZSBhbHJlYWR5IHRyYW5zbGF0ZWQsIG9ubHkgc2VhcmNoIGZvciBcbiAqLworICAgICAgICBQeV9VTklDT0RFICpwb3MgPSBmaW5kX2NvbnRyb2xfY2hhcihzdGFydCwgZW5kLCAnXG4nKTsKKyAgICAgICAgaWYgKHBvcyAhPSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIHBvcyAtIHN0YXJ0ICsgMTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAqY29uc3VtZWQgPSBsZW47CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodW5pdmVyc2FsKSB7CisgICAgICAgIC8qIFVuaXZlcnNhbCBuZXdsaW5lIHNlYXJjaC4gRmluZCBhbnkgb2YgXHIsIFxyXG4sIFxuCisgICAgICAgICAqIFRoZSBkZWNvZGVyIGVuc3VyZXMgdGhhdCBcclxuIGFyZSBub3Qgc3BsaXQgaW4gdHdvIHBpZWNlcworICAgICAgICAgKi8KKyAgICAgICAgUHlfVU5JQ09ERSAqcyA9IHN0YXJ0OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBQeV9VTklDT0RFIGNoOworICAgICAgICAgICAgLyogRmFzdCBwYXRoIGZvciBub24tY29udHJvbCBjaGFycy4gVGhlIGxvb3AgYWx3YXlzIGVuZHMKKyAgICAgICAgICAgICAgIHNpbmNlIHRoZSBQeV9VTklDT0RFIHN0b3JhZ2UgaXMgTlVMLXRlcm1pbmF0ZWQuICovCisgICAgICAgICAgICB3aGlsZSAoKnMgPiAnXHInKQorICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIGlmIChzID49IGVuZCkgeworICAgICAgICAgICAgICAgICpjb25zdW1lZCA9IGxlbjsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaCA9ICpzKys7CisgICAgICAgICAgICBpZiAoY2ggPT0gJ1xuJykKKyAgICAgICAgICAgICAgICByZXR1cm4gcyAtIHN0YXJ0OworICAgICAgICAgICAgaWYgKGNoID09ICdccicpIHsKKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMgLSBzdGFydCArIDE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcyAtIHN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBOb24tdW5pdmVyc2FsIG1vZGUuICovCisgICAgICAgIFB5X3NzaXplX3QgcmVhZG5sX2xlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHJlYWRubCk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKm5sID0gKHVuc2lnbmVkIGNoYXIgKikgUHlTdHJpbmdfQVNfU1RSSU5HKHJlYWRubCk7CisgICAgICAgIGlmIChyZWFkbmxfbGVuID09IDEpIHsKKyAgICAgICAgICAgIFB5X1VOSUNPREUgKnBvcyA9IGZpbmRfY29udHJvbF9jaGFyKHN0YXJ0LCBlbmQsIG5sWzBdKTsKKyAgICAgICAgICAgIGlmIChwb3MgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zIC0gc3RhcnQgKyAxOworICAgICAgICAgICAgKmNvbnN1bWVkID0gbGVuOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlfVU5JQ09ERSAqcyA9IHN0YXJ0OworICAgICAgICAgICAgUHlfVU5JQ09ERSAqZSA9IGVuZCAtIHJlYWRubF9sZW4gKyAxOworICAgICAgICAgICAgUHlfVU5JQ09ERSAqcG9zOworICAgICAgICAgICAgaWYgKGUgPCBzKQorICAgICAgICAgICAgICAgIGUgPSBzOworICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgKnBvcyA9IGZpbmRfY29udHJvbF9jaGFyKHMsIGVuZCwgbmxbMF0pOworICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gTlVMTCB8fCBwb3MgPj0gZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHJlYWRubF9sZW47IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAocG9zW2ldICE9IG5sW2ldKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpID09IHJlYWRubF9sZW4pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3MgLSBzdGFydCArIHJlYWRubF9sZW47CisgICAgICAgICAgICAgICAgcyA9IHBvcyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwb3MgPSBmaW5kX2NvbnRyb2xfY2hhcihlLCBlbmQsIG5sWzBdKTsKKyAgICAgICAgICAgIGlmIChwb3MgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAqY29uc3VtZWQgPSBsZW47CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKmNvbnN1bWVkID0gcG9zIC0gc3RhcnQ7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGV4dGlvd3JhcHBlcl9yZWFkbGluZSh0ZXh0aW8gKnNlbGYsIFB5X3NzaXplX3QgbGltaXQpCit7CisgICAgUHlPYmplY3QgKmxpbmUgPSBOVUxMLCAqY2h1bmtzID0gTlVMTCwgKnJlbWFpbmluZyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzdGFydCwgZW5kcG9zLCBjaHVua2VkLCBvZmZzZXRfdG9fYnVmZmVyOworICAgIGludCByZXM7CisKKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisKKyAgICBpZiAoX3RleHRpb3dyYXBwZXJfd3JpdGVmbHVzaChzZWxmKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgY2h1bmtlZCA9IDA7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBQeV9VTklDT0RFICpwdHI7CisgICAgICAgIFB5X3NzaXplX3QgbGluZV9sZW47CisgICAgICAgIFB5X3NzaXplX3QgY29uc3VtZWQgPSAwOworCisgICAgICAgIC8qIEZpcnN0LCBnZXQgc29tZSBkYXRhIGlmIG5lY2Vzc2FyeSAqLworICAgICAgICByZXMgPSAxOworICAgICAgICB3aGlsZSAoIXNlbGYtPmRlY29kZWRfY2hhcnMgfHwKKyAgICAgICAgICAgICAgICFQeVVuaWNvZGVfR0VUX1NJWkUoc2VsZi0+ZGVjb2RlZF9jaGFycykpIHsKKyAgICAgICAgICAgIHJlcyA9IHRleHRpb3dyYXBwZXJfcmVhZF9jaHVuayhzZWxmKTsKKyAgICAgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAocmVzID09IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgICAgICAvKiBlbmQgb2YgZmlsZSAqLworICAgICAgICAgICAgdGV4dGlvd3JhcHBlcl9zZXRfZGVjb2RlZF9jaGFycyhzZWxmLCBOVUxMKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPnNuYXBzaG90KTsKKyAgICAgICAgICAgIHN0YXJ0ID0gZW5kcG9zID0gb2Zmc2V0X3RvX2J1ZmZlciA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZW1haW5pbmcgPT0gTlVMTCkgeworICAgICAgICAgICAgbGluZSA9IHNlbGYtPmRlY29kZWRfY2hhcnM7CisgICAgICAgICAgICBzdGFydCA9IHNlbGYtPmRlY29kZWRfY2hhcnNfdXNlZDsKKyAgICAgICAgICAgIG9mZnNldF90b19idWZmZXIgPSAwOworICAgICAgICAgICAgUHlfSU5DUkVGKGxpbmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHNlbGYtPmRlY29kZWRfY2hhcnNfdXNlZCA9PSAwKTsKKyAgICAgICAgICAgIGxpbmUgPSBQeVVuaWNvZGVfQ29uY2F0KHJlbWFpbmluZywgc2VsZi0+ZGVjb2RlZF9jaGFycyk7CisgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgICAgICBvZmZzZXRfdG9fYnVmZmVyID0gUHlVbmljb2RlX0dFVF9TSVpFKHJlbWFpbmluZyk7CisgICAgICAgICAgICBQeV9DTEVBUihyZW1haW5pbmcpOworICAgICAgICAgICAgaWYgKGxpbmUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgcHRyID0gUHlVbmljb2RlX0FTX1VOSUNPREUobGluZSk7CisgICAgICAgIGxpbmVfbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKGxpbmUpOworCisgICAgICAgIGVuZHBvcyA9IF9QeUlPX2ZpbmRfbGluZV9lbmRpbmcoCisgICAgICAgICAgICBzZWxmLT5yZWFkdHJhbnNsYXRlLCBzZWxmLT5yZWFkdW5pdmVyc2FsLCBzZWxmLT5yZWFkbmwsCisgICAgICAgICAgICBwdHIgKyBzdGFydCwgcHRyICsgbGluZV9sZW4sICZjb25zdW1lZCk7CisgICAgICAgIGlmIChlbmRwb3MgPj0gMCkgeworICAgICAgICAgICAgZW5kcG9zICs9IHN0YXJ0OworICAgICAgICAgICAgaWYgKGxpbWl0ID49IDAgJiYgKGVuZHBvcyAtIHN0YXJ0KSArIGNodW5rZWQgPj0gbGltaXQpCisgICAgICAgICAgICAgICAgZW5kcG9zID0gc3RhcnQgKyBsaW1pdCAtIGNodW5rZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFdlIGNhbiBwdXQgYXNpZGUgdXAgdG8gYGVuZHBvc2AgKi8KKyAgICAgICAgZW5kcG9zID0gY29uc3VtZWQgKyBzdGFydDsKKyAgICAgICAgaWYgKGxpbWl0ID49IDAgJiYgKGVuZHBvcyAtIHN0YXJ0KSArIGNodW5rZWQgPj0gbGltaXQpIHsKKyAgICAgICAgICAgIC8qIERpZG4ndCBmaW5kIGxpbmUgZW5kaW5nLCBidXQgcmVhY2hlZCBsZW5ndGggbGltaXQgKi8KKyAgICAgICAgICAgIGVuZHBvcyA9IHN0YXJ0ICsgbGltaXQgLSBjaHVua2VkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZW5kcG9zID4gc3RhcnQpIHsKKyAgICAgICAgICAgIC8qIE5vIGxpbmUgZW5kaW5nIHNlZW4geWV0IC0gcHV0IGFzaWRlIGN1cnJlbnQgZGF0YSAqLworICAgICAgICAgICAgUHlPYmplY3QgKnM7CisgICAgICAgICAgICBpZiAoY2h1bmtzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjaHVua3MgPSBQeUxpc3RfTmV3KDApOworICAgICAgICAgICAgICAgIGlmIChjaHVua3MgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUocHRyICsgc3RhcnQsIGVuZHBvcyAtIHN0YXJ0KTsKKyAgICAgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGNodW5rcywgcykgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHMpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaHVua2VkICs9IFB5VW5pY29kZV9HRVRfU0laRShzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzKTsKKyAgICAgICAgfQorICAgICAgICAvKiBUaGVyZSBtYXkgYmUgc29tZSByZW1haW5pbmcgYnl0ZXMgd2UnbGwgaGF2ZSB0byBwcmVwZW5kIHRvIHRoZQorICAgICAgICAgICBuZXh0IGNodW5rIG9mIGRhdGEgKi8KKyAgICAgICAgaWYgKGVuZHBvcyA8IGxpbmVfbGVuKSB7CisgICAgICAgICAgICByZW1haW5pbmcgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoCisgICAgICAgICAgICAgICAgICAgIHB0ciArIGVuZHBvcywgbGluZV9sZW4gLSBlbmRwb3MpOworICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIobGluZSk7CisgICAgICAgIC8qIFdlIGhhdmUgY29uc3VtZWQgdGhlIGJ1ZmZlciAqLworICAgICAgICB0ZXh0aW93cmFwcGVyX3NldF9kZWNvZGVkX2NoYXJzKHNlbGYsIE5VTEwpOworICAgIH0KKworICAgIGlmIChsaW5lICE9IE5VTEwpIHsKKyAgICAgICAgLyogT3VyIGxpbmUgZW5kcyBpbiB0aGUgY3VycmVudCBidWZmZXIgKi8KKyAgICAgICAgc2VsZi0+ZGVjb2RlZF9jaGFyc191c2VkID0gZW5kcG9zIC0gb2Zmc2V0X3RvX2J1ZmZlcjsKKyAgICAgICAgaWYgKHN0YXJ0ID4gMCB8fCBlbmRwb3MgPCBQeVVuaWNvZGVfR0VUX1NJWkUobGluZSkpIHsKKyAgICAgICAgICAgIGlmIChzdGFydCA9PSAwICYmIFB5X1JFRkNOVChsaW5lKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJmxpbmUsIGVuZHBvcykgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnMgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERShsaW5lKSArIHN0YXJ0LCBlbmRwb3MgLSBzdGFydCk7CisgICAgICAgICAgICAgICAgUHlfQ0xFQVIobGluZSk7CisgICAgICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBsaW5lID0gczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocmVtYWluaW5nICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGNodW5rcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBjaHVua3MgPSBQeUxpc3RfTmV3KDApOworICAgICAgICAgICAgaWYgKGNodW5rcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY2h1bmtzLCByZW1haW5pbmcpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIFB5X0NMRUFSKHJlbWFpbmluZyk7CisgICAgfQorICAgIGlmIChjaHVua3MgIT0gTlVMTCkgeworICAgICAgICBpZiAobGluZSAhPSBOVUxMICYmIFB5TGlzdF9BcHBlbmQoY2h1bmtzLCBsaW5lKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeV9DTEVBUihsaW5lKTsKKyAgICAgICAgbGluZSA9IFB5VW5pY29kZV9Kb2luKF9QeUlPX2VtcHR5X3N0ciwgY2h1bmtzKTsKKyAgICAgICAgaWYgKGxpbmUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIFB5X0RFQ1JFRihjaHVua3MpOworICAgIH0KKyAgICBpZiAobGluZSA9PSBOVUxMKQorICAgICAgICBsaW5lID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOworCisgICAgcmV0dXJuIGxpbmU7CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihjaHVua3MpOworICAgIFB5X1hERUNSRUYocmVtYWluaW5nKTsKKyAgICBQeV9YREVDUkVGKGxpbmUpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9yZWFkbGluZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpsaW1pdG9iaiA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBsaW1pdCA9IC0xOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpyZWFkbGluZSIsICZsaW1pdG9iaikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChsaW1pdG9iaikgeworICAgICAgICBpZiAoIVB5TnVtYmVyX0NoZWNrKGxpbWl0b2JqKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290ICclLjIwMHMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGxpbWl0b2JqKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBsaW1pdCA9IFB5TnVtYmVyX0FzU3NpemVfdChsaW1pdG9iaiwgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CisgICAgICAgIGlmIChsaW1pdCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBfdGV4dGlvd3JhcHBlcl9yZWFkbGluZShzZWxmLCBsaW1pdCk7Cit9CisKKy8qIFNlZWsgYW5kIFRlbGwgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5X29mZl90IHN0YXJ0X3BvczsKKyAgICBpbnQgZGVjX2ZsYWdzOworICAgIGludCBieXRlc190b19mZWVkOworICAgIGludCBjaGFyc190b19za2lwOworICAgIGNoYXIgbmVlZF9lb2Y7Cit9IGNvb2tpZV90eXBlOworCisvKgorICAgVG8gc3BlZWQgdXAgY29va2llIHBhY2tpbmcvdW5wYWNraW5nLCB3ZSBzdG9yZSB0aGUgZmllbGRzIGluIGEgdGVtcG9yYXJ5CisgICBzdHJpbmcgYW5kIGNhbGwgX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KCkgb3IgX1B5TG9uZ19Bc0J5dGVBcnJheSAocmVzcC4pLgorICAgVGhlIGZvbGxvd2luZyBtYWNyb3MgZGVmaW5lIGF0IHdoaWNoIG9mZnNldHMgaW4gdGhlIGludGVybWVkaWFyeSBieXRlCisgICBzdHJpbmcgdGhlIHZhcmlvdXMgQ29va2llU3RydWN0IGZpZWxkcyB3aWxsIGJlIHN0b3JlZC4KKyAqLworCisjZGVmaW5lIENPT0tJRV9CVUZfTEVOICAgICAgKHNpemVvZihQeV9vZmZfdCkgKyAzICogc2l6ZW9mKGludCkgKyBzaXplb2YoY2hhcikpCisKKyNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKKworIyBkZWZpbmUgSVNfTElUVExFX0VORElBTiAgIDAKKworLyogV2Ugd2FudCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiBzdGFydF9wb3MgdG8gYWxzbyBiZSB0aGUgbGVhc3QKKyAgIHNpZ25pZmljYW50IGJ5dGUgb2YgdGhlIGNvb2tpZSwgd2hpY2ggbWVhbnMgdGhhdCBpbiBiaWctZW5kaWFuIG1vZGUgd2UKKyAgIG11c3QgY29weSB0aGUgZmllbGRzIGluIHJldmVyc2Ugb3JkZXIuICovCisKKyMgZGVmaW5lIE9GRl9TVEFSVF9QT1MgICAgICAoc2l6ZW9mKGNoYXIpICsgMyAqIHNpemVvZihpbnQpKQorIyBkZWZpbmUgT0ZGX0RFQ19GTEFHUyAgICAgIChzaXplb2YoY2hhcikgKyAyICogc2l6ZW9mKGludCkpCisjIGRlZmluZSBPRkZfQllURVNfVE9fRkVFRCAgKHNpemVvZihjaGFyKSArIHNpemVvZihpbnQpKQorIyBkZWZpbmUgT0ZGX0NIQVJTX1RPX1NLSVAgIChzaXplb2YoY2hhcikpCisjIGRlZmluZSBPRkZfTkVFRF9FT0YgICAgICAgMAorCisjZWxzZQorCisjIGRlZmluZSBJU19MSVRUTEVfRU5ESUFOICAgMQorCisvKiBMaXR0bGUtZW5kaWFuIG1vZGU6IHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHN0YXJ0X3BvcyB3aWxsCisgICBuYXR1cmFsbHkgZW5kIHVwIHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBjb29raWUuICovCisKKyMgZGVmaW5lIE9GRl9TVEFSVF9QT1MgICAgICAwCisjIGRlZmluZSBPRkZfREVDX0ZMQUdTICAgICAgKHNpemVvZihQeV9vZmZfdCkpCisjIGRlZmluZSBPRkZfQllURVNfVE9fRkVFRCAgKHNpemVvZihQeV9vZmZfdCkgKyBzaXplb2YoaW50KSkKKyMgZGVmaW5lIE9GRl9DSEFSU19UT19TS0lQICAoc2l6ZW9mKFB5X29mZl90KSArIDIgKiBzaXplb2YoaW50KSkKKyMgZGVmaW5lIE9GRl9ORUVEX0VPRiAgICAgICAoc2l6ZW9mKFB5X29mZl90KSArIDMgKiBzaXplb2YoaW50KSkKKworI2VuZGlmCisKK3N0YXRpYyBpbnQKK3RleHRpb3dyYXBwZXJfcGFyc2VfY29va2llKGNvb2tpZV90eXBlICpjb29raWUsIFB5T2JqZWN0ICpjb29raWVPYmopCit7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbQ09PS0lFX0JVRl9MRU5dOworICAgIFB5TG9uZ09iamVjdCAqY29va2llTG9uZyA9IChQeUxvbmdPYmplY3QgKilQeU51bWJlcl9Mb25nKGNvb2tpZU9iaik7CisgICAgaWYgKGNvb2tpZUxvbmcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKF9QeUxvbmdfQXNCeXRlQXJyYXkoY29va2llTG9uZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19MSVRUTEVfRU5ESUFOLCAwKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGNvb2tpZUxvbmcpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFB5X0RFQ1JFRihjb29raWVMb25nKTsKKworICAgIG1lbWNweSgmY29va2llLT5zdGFydF9wb3MsIGJ1ZmZlciArIE9GRl9TVEFSVF9QT1MsIHNpemVvZihjb29raWUtPnN0YXJ0X3BvcykpOworICAgIG1lbWNweSgmY29va2llLT5kZWNfZmxhZ3MsIGJ1ZmZlciArIE9GRl9ERUNfRkxBR1MsIHNpemVvZihjb29raWUtPmRlY19mbGFncykpOworICAgIG1lbWNweSgmY29va2llLT5ieXRlc190b19mZWVkLCBidWZmZXIgKyBPRkZfQllURVNfVE9fRkVFRCwgc2l6ZW9mKGNvb2tpZS0+Ynl0ZXNfdG9fZmVlZCkpOworICAgIG1lbWNweSgmY29va2llLT5jaGFyc190b19za2lwLCBidWZmZXIgKyBPRkZfQ0hBUlNfVE9fU0tJUCwgc2l6ZW9mKGNvb2tpZS0+Y2hhcnNfdG9fc2tpcCkpOworICAgIG1lbWNweSgmY29va2llLT5uZWVkX2VvZiwgYnVmZmVyICsgT0ZGX05FRURfRU9GLCBzaXplb2YoY29va2llLT5uZWVkX2VvZikpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX2J1aWxkX2Nvb2tpZShjb29raWVfdHlwZSAqY29va2llKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW0NPT0tJRV9CVUZfTEVOXTsKKworICAgIG1lbWNweShidWZmZXIgKyBPRkZfU1RBUlRfUE9TLCAmY29va2llLT5zdGFydF9wb3MsIHNpemVvZihjb29raWUtPnN0YXJ0X3BvcykpOworICAgIG1lbWNweShidWZmZXIgKyBPRkZfREVDX0ZMQUdTLCAmY29va2llLT5kZWNfZmxhZ3MsIHNpemVvZihjb29raWUtPmRlY19mbGFncykpOworICAgIG1lbWNweShidWZmZXIgKyBPRkZfQllURVNfVE9fRkVFRCwgJmNvb2tpZS0+Ynl0ZXNfdG9fZmVlZCwgc2l6ZW9mKGNvb2tpZS0+Ynl0ZXNfdG9fZmVlZCkpOworICAgIG1lbWNweShidWZmZXIgKyBPRkZfQ0hBUlNfVE9fU0tJUCwgJmNvb2tpZS0+Y2hhcnNfdG9fc2tpcCwgc2l6ZW9mKGNvb2tpZS0+Y2hhcnNfdG9fc2tpcCkpOworICAgIG1lbWNweShidWZmZXIgKyBPRkZfTkVFRF9FT0YsICZjb29raWUtPm5lZWRfZW9mLCBzaXplb2YoY29va2llLT5uZWVkX2VvZikpOworCisgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShidWZmZXIsIHNpemVvZihidWZmZXIpLCBJU19MSVRUTEVfRU5ESUFOLCAwKTsKK30KKyN1bmRlZiBJU19MSVRUTEVfRU5ESUFOCisKK3N0YXRpYyBpbnQKK190ZXh0aW93cmFwcGVyX2RlY29kZXJfc2V0c3RhdGUodGV4dGlvICpzZWxmLCBjb29raWVfdHlwZSAqY29va2llKQoreworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgLyogV2hlbiBzZWVraW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtLCB3ZSBjYWxsIGRlY29kZXIucmVzZXQoKQorICAgICAgIHJhdGhlciB0aGFuIGRlY29kZXIuZ2V0c3RhdGUoKS4KKyAgICAgICBUaGlzIGlzIGZvciBhIGZldyBkZWNvZGVycyBzdWNoIGFzIHV0Zi0xNiBmb3Igd2hpY2ggdGhlIHN0YXRlIHZhbHVlCisgICAgICAgYXQgc3RhcnQgaXMgbm90IChiIiIsIDApIGJ1dCBlLmcuIChiIiIsIDIpIChtZWFuaW5nLCBpbiB0aGUgY2FzZSBvZgorICAgICAgIHV0Zi0xNiwgdGhhdCB3ZSBhcmUgZXhwZWN0aW5nIGEgQk9NKS4KKyAgICAqLworICAgIGlmIChjb29raWUtPnN0YXJ0X3BvcyA9PSAwICYmIGNvb2tpZS0+ZGVjX2ZsYWdzID09IDApCisgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmRlY29kZXIsIF9QeUlPX3N0cl9yZXNldCwgTlVMTCk7CisgICAgZWxzZQorICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmRlY29kZXIsICJzZXRzdGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigoc2kpKSIsICIiLCBjb29raWUtPmRlY19mbGFncyk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK190ZXh0aW93cmFwcGVyX2VuY29kZXJfc2V0c3RhdGUodGV4dGlvICpzZWxmLCBjb29raWVfdHlwZSAqY29va2llKQoreworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgLyogU2FtZSBhcyBfdGV4dGlvd3JhcHBlcl9kZWNvZGVyX3NldHN0YXRlKCkgYWJvdmUuICovCisgICAgaWYgKGNvb2tpZS0+c3RhcnRfcG9zID09IDAgJiYgY29va2llLT5kZWNfZmxhZ3MgPT0gMCkgeworICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5lbmNvZGVyLCBfUHlJT19zdHJfcmVzZXQsIE5VTEwpOworICAgICAgICBzZWxmLT5lbmNvZGluZ19zdGFydF9vZl9zdHJlYW0gPSAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+ZW5jb2RlciwgX1B5SU9fc3RyX3NldHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlJT196ZXJvLCBOVUxMKTsKKyAgICAgICAgc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtID0gMDsKKyAgICB9CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX3NlZWsodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqY29va2llT2JqLCAqcG9zb2JqOworICAgIGNvb2tpZV90eXBlIGNvb2tpZTsKKyAgICBpbnQgd2hlbmNlID0gMDsKKyAgICBQeU9iamVjdCAqcmVzOworICAgIGludCBjbXA7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xpOnNlZWsiLCAmY29va2llT2JqLCAmd2hlbmNlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworCisgICAgUHlfSU5DUkVGKGNvb2tpZU9iaik7CisKKyAgICBpZiAoIXNlbGYtPnNlZWthYmxlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInVuZGVybHlpbmcgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKHdoZW5jZSA9PSAxKSB7CisgICAgICAgIC8qIHNlZWsgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiAqLworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY29va2llT2JqLCBfUHlJT196ZXJvLCBQeV9FUSk7CisgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGlmIChjbXAgPT0gMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGRvIG5vbnplcm8gY3VyLXJlbGF0aXZlIHNlZWtzIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZWVraW5nIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIHNob3VsZCBhdHRlbXB0IHRvCisgICAgICAgICAqIHN5bmMgdGhlIHVuZGVybHlpbmcgYnVmZmVyIHdpdGggdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgICAqLworICAgICAgICBQeV9ERUNSRUYoY29va2llT2JqKTsKKyAgICAgICAgY29va2llT2JqID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgoUHlPYmplY3QgKilzZWxmLCAidGVsbCIsIE5VTEwpOworICAgICAgICBpZiAoY29va2llT2JqID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIGVsc2UgaWYgKHdoZW5jZSA9PSAyKSB7CisgICAgICAgIC8qIHNlZWsgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUgKi8KKworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY29va2llT2JqLCBfUHlJT196ZXJvLCBQeV9FUSk7CisgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGlmIChjbXAgPT0gMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGRvIG5vbnplcm8gZW5kLXJlbGF0aXZlIHNlZWtzIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKChQeU9iamVjdCAqKXNlbGYsICJmbHVzaCIsIE5VTEwpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgICAgIHRleHRpb3dyYXBwZXJfc2V0X2RlY29kZWRfY2hhcnMoc2VsZiwgTlVMTCk7CisgICAgICAgIFB5X0NMRUFSKHNlbGYtPnNuYXBzaG90KTsKKyAgICAgICAgaWYgKHNlbGYtPmRlY29kZXIpIHsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZi0+ZGVjb2RlciwgInJlc2V0IiwgTlVMTCk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIH0KKworICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmJ1ZmZlciwgInNlZWsiLCAiaWkiLCAwLCAyKTsKKyAgICAgICAgUHlfWERFQ1JFRihjb29raWVPYmopOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBlbHNlIGlmICh3aGVuY2UgIT0gMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHdoZW5jZSAoJWQsIHNob3VsZCBiZSAwLCAxIG9yIDIpIiwgd2hlbmNlKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChjb29raWVPYmosIF9QeUlPX3plcm8sIFB5X0xUKTsKKyAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKGNtcCA9PSAxKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXByID0gUHlPYmplY3RfUmVwcihjb29raWVPYmopOworICAgICAgICBpZiAocmVwciAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibmVnYXRpdmUgc2VlayBwb3NpdGlvbiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HKHJlcHIpKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoKFB5T2JqZWN0ICopc2VsZiwgX1B5SU9fc3RyX2ZsdXNoLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBQeV9ERUNSRUYocmVzKTsKKworICAgIC8qIFRoZSBzdHJhdGVneSBvZiBzZWVrKCkgaXMgdG8gZ28gYmFjayB0byB0aGUgc2FmZSBzdGFydCBwb2ludAorICAgICAqIGFuZCByZXBsYXkgdGhlIGVmZmVjdCBvZiByZWFkKGNoYXJzX3RvX3NraXApIGZyb20gdGhlcmUuCisgICAgICovCisgICAgaWYgKHRleHRpb3dyYXBwZXJfcGFyc2VfY29va2llKCZjb29raWUsIGNvb2tpZU9iaikgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBTZWVrIGJhY2sgdG8gdGhlIHNhZmUgc3RhcnQgcG9pbnQuICovCisgICAgcG9zb2JqID0gUHlMb25nX0Zyb21PZmZfdChjb29raWUuc3RhcnRfcG9zKTsKKyAgICBpZiAocG9zb2JqID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5SU9fc3RyX3NlZWssIHBvc29iaiwgTlVMTCk7CisgICAgUHlfREVDUkVGKHBvc29iaik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgUHlfREVDUkVGKHJlcyk7CisKKyAgICB0ZXh0aW93cmFwcGVyX3NldF9kZWNvZGVkX2NoYXJzKHNlbGYsIE5VTEwpOworICAgIFB5X0NMRUFSKHNlbGYtPnNuYXBzaG90KTsKKworICAgIC8qIFJlc3RvcmUgdGhlIGRlY29kZXIgdG8gaXRzIHN0YXRlIGZyb20gdGhlIHNhZmUgc3RhcnQgcG9pbnQuICovCisgICAgaWYgKHNlbGYtPmRlY29kZXIpIHsKKyAgICAgICAgaWYgKF90ZXh0aW93cmFwcGVyX2RlY29kZXJfc2V0c3RhdGUoc2VsZiwgJmNvb2tpZSkgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmIChjb29raWUuY2hhcnNfdG9fc2tpcCkgeworICAgICAgICAvKiBKdXN0IGxpa2UgX3JlYWRfY2h1bmssIGZlZWQgdGhlIGRlY29kZXIgYW5kIHNhdmUgYSBzbmFwc2hvdC4gKi8KKyAgICAgICAgUHlPYmplY3QgKmlucHV0X2NodW5rID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgKKyAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciwgInJlYWQiLCAiaSIsIGNvb2tpZS5ieXRlc190b19mZWVkKTsKKyAgICAgICAgUHlPYmplY3QgKmRlY29kZWQ7CisKKyAgICAgICAgaWYgKGlucHV0X2NodW5rID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgYXNzZXJ0IChQeUJ5dGVzX0NoZWNrKGlucHV0X2NodW5rKSk7CisKKyAgICAgICAgc2VsZi0+c25hcHNob3QgPSBQeV9CdWlsZFZhbHVlKCJpTiIsIGNvb2tpZS5kZWNfZmxhZ3MsIGlucHV0X2NodW5rKTsKKyAgICAgICAgaWYgKHNlbGYtPnNuYXBzaG90ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpbnB1dF9jaHVuayk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBkZWNvZGVkID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5kZWNvZGVyLCAiZGVjb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9pIiwgaW5wdXRfY2h1bmssIChpbnQpY29va2llLm5lZWRfZW9mKTsKKworICAgICAgICBpZiAoZGVjb2RlZCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIHRleHRpb3dyYXBwZXJfc2V0X2RlY29kZWRfY2hhcnMoc2VsZiwgZGVjb2RlZCk7CisKKyAgICAgICAgLyogU2tpcCBjaGFyc190b19za2lwIG9mIHRoZSBkZWNvZGVkIGNoYXJhY3RlcnMuICovCisgICAgICAgIGlmIChQeVVuaWNvZGVfR2V0U2l6ZShzZWxmLT5kZWNvZGVkX2NoYXJzKSA8IGNvb2tpZS5jaGFyc190b19za2lwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwgImNhbid0IHJlc3RvcmUgbG9naWNhbCBmaWxlIHBvc2l0aW9uIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgc2VsZi0+ZGVjb2RlZF9jaGFyc191c2VkID0gY29va2llLmNoYXJzX3RvX3NraXA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzZWxmLT5zbmFwc2hvdCA9IFB5X0J1aWxkVmFsdWUoImlzIiwgY29va2llLmRlY19mbGFncywgIiIpOworICAgICAgICBpZiAoc2VsZi0+c25hcHNob3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAvKiBGaW5hbGx5LCByZXNldCB0aGUgZW5jb2RlciAobWVyZWx5IHVzZWZ1bCBmb3IgcHJvcGVyIEJPTSBoYW5kbGluZykgKi8KKyAgICBpZiAoc2VsZi0+ZW5jb2RlcikgeworICAgICAgICBpZiAoX3RleHRpb3dyYXBwZXJfZW5jb2Rlcl9zZXRzdGF0ZShzZWxmLCAmY29va2llKSA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIHJldHVybiBjb29raWVPYmo7CisgIGZhaWw6CisgICAgUHlfWERFQ1JFRihjb29raWVPYmopOworICAgIHJldHVybiBOVUxMOworCit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX3RlbGwodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmVzOworICAgIFB5T2JqZWN0ICpwb3NvYmogPSBOVUxMOworICAgIGNvb2tpZV90eXBlIGNvb2tpZSA9IHswLDAsMCwwLDB9OworICAgIFB5T2JqZWN0ICpuZXh0X2lucHV0OworICAgIFB5X3NzaXplX3QgY2hhcnNfdG9fc2tpcCwgY2hhcnNfZGVjb2RlZDsKKyAgICBQeU9iamVjdCAqc2F2ZWRfc3RhdGUgPSBOVUxMOworICAgIGNoYXIgKmlucHV0LCAqaW5wdXRfZW5kOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworCisgICAgaWYgKCFzZWxmLT5zZWVrYWJsZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICBpZiAoIXNlbGYtPnRlbGxpbmcpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAidGVsbGluZyBwb3NpdGlvbiBkaXNhYmxlZCBieSBuZXh0KCkgY2FsbCIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKF90ZXh0aW93cmFwcGVyX3dyaXRlZmx1c2goc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKChQeU9iamVjdCAqKXNlbGYsICJmbHVzaCIsIE5VTEwpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgcG9zb2JqID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5idWZmZXIsICJ0ZWxsIiwgTlVMTCk7CisgICAgaWYgKHBvc29iaiA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoc2VsZi0+ZGVjb2RlciA9PSBOVUxMIHx8IHNlbGYtPnNuYXBzaG90ID09IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0IChzZWxmLT5kZWNvZGVkX2NoYXJzID09IE5VTEwgfHwgUHlVbmljb2RlX0dldFNpemUoc2VsZi0+ZGVjb2RlZF9jaGFycykgPT0gMCk7CisgICAgICAgIHJldHVybiBwb3NvYmo7CisgICAgfQorCisjaWYgZGVmaW5lZChIQVZFX0xBUkdFRklMRV9TVVBQT1JUKQorICAgIGNvb2tpZS5zdGFydF9wb3MgPSBQeUxvbmdfQXNMb25nTG9uZyhwb3NvYmopOworI2Vsc2UKKyAgICBjb29raWUuc3RhcnRfcG9zID0gUHlMb25nX0FzTG9uZyhwb3NvYmopOworI2VuZGlmCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIC8qIFNraXAgYmFja3dhcmQgdG8gdGhlIHNuYXBzaG90IHBvaW50IChzZWUgX3JlYWRfY2h1bmspLiAqLworICAgIGlmICghUHlBcmdfUGFyc2Uoc2VsZi0+c25hcHNob3QsICIoaU8pIiwgJmNvb2tpZS5kZWNfZmxhZ3MsICZuZXh0X2lucHV0KSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgYXNzZXJ0IChQeUJ5dGVzX0NoZWNrKG5leHRfaW5wdXQpKTsKKworICAgIGNvb2tpZS5zdGFydF9wb3MgLT0gUHlCeXRlc19HRVRfU0laRShuZXh0X2lucHV0KTsKKworICAgIC8qIEhvdyBtYW55IGRlY29kZWQgY2hhcmFjdGVycyBoYXZlIGJlZW4gdXNlZCB1cCBzaW5jZSB0aGUgc25hcHNob3Q/ICovCisgICAgaWYgKHNlbGYtPmRlY29kZWRfY2hhcnNfdXNlZCA9PSAwKSAgeworICAgICAgICAvKiBXZSBoYXZlbid0IG1vdmVkIGZyb20gdGhlIHNuYXBzaG90IHBvaW50LiAqLworICAgICAgICBQeV9ERUNSRUYocG9zb2JqKTsKKyAgICAgICAgcmV0dXJuIHRleHRpb3dyYXBwZXJfYnVpbGRfY29va2llKCZjb29raWUpOworICAgIH0KKworICAgIGNoYXJzX3RvX3NraXAgPSBzZWxmLT5kZWNvZGVkX2NoYXJzX3VzZWQ7CisKKyAgICAvKiBTdGFydGluZyBmcm9tIHRoZSBzbmFwc2hvdCBwb3NpdGlvbiwgd2Ugd2lsbCB3YWxrIHRoZSBkZWNvZGVyCisgICAgICogZm9yd2FyZCB1bnRpbCBpdCBnaXZlcyB1cyBlbm91Z2ggZGVjb2RlZCBjaGFyYWN0ZXJzLgorICAgICAqLworICAgIHNhdmVkX3N0YXRlID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+ZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUlPX3N0cl9nZXRzdGF0ZSwgTlVMTCk7CisgICAgaWYgKHNhdmVkX3N0YXRlID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIC8qIE5vdGUgb3VyIGluaXRpYWwgc3RhcnQgcG9pbnQuICovCisgICAgaWYgKF90ZXh0aW93cmFwcGVyX2RlY29kZXJfc2V0c3RhdGUoc2VsZiwgJmNvb2tpZSkgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBGZWVkIHRoZSBkZWNvZGVyIG9uZSBieXRlIGF0IGEgdGltZS4gIEFzIHdlIGdvLCBub3RlIHRoZQorICAgICAqIG5lYXJlc3QgInNhZmUgc3RhcnQgcG9pbnQiIGJlZm9yZSB0aGUgY3VycmVudCBsb2NhdGlvbgorICAgICAqIChhIHBvaW50IHdoZXJlIHRoZSBkZWNvZGVyIGhhcyBub3RoaW5nIGJ1ZmZlcmVkLCBzbyBzZWVrKCkKKyAgICAgKiBjYW4gc2FmZWx5IHN0YXJ0IGZyb20gdGhlcmUgYW5kIGFkdmFuY2UgdG8gdGhpcyBsb2NhdGlvbikuCisgICAgICovCisgICAgY2hhcnNfZGVjb2RlZCA9IDA7CisgICAgaW5wdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhuZXh0X2lucHV0KTsKKyAgICBpbnB1dF9lbmQgPSBpbnB1dCArIFB5Qnl0ZXNfR0VUX1NJWkUobmV4dF9pbnB1dCk7CisgICAgd2hpbGUgKGlucHV0IDwgaW5wdXRfZW5kKSB7CisgICAgICAgIFB5T2JqZWN0ICpzdGF0ZTsKKyAgICAgICAgY2hhciAqZGVjX2J1ZmZlcjsKKyAgICAgICAgUHlfc3NpemVfdCBkZWNfYnVmZmVyX2xlbjsKKyAgICAgICAgaW50IGRlY19mbGFnczsKKworICAgICAgICBQeU9iamVjdCAqZGVjb2RlZCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoCisgICAgICAgICAgICBzZWxmLT5kZWNvZGVyLCAiZGVjb2RlIiwgInMjIiwgaW5wdXQsIDEpOworICAgICAgICBpZiAoZGVjb2RlZCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBhc3NlcnQgKFB5VW5pY29kZV9DaGVjayhkZWNvZGVkKSk7CisgICAgICAgIGNoYXJzX2RlY29kZWQgKz0gUHlVbmljb2RlX0dFVF9TSVpFKGRlY29kZWQpOworICAgICAgICBQeV9ERUNSRUYoZGVjb2RlZCk7CisKKyAgICAgICAgY29va2llLmJ5dGVzX3RvX2ZlZWQgKz0gMTsKKworICAgICAgICBzdGF0ZSA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5SU9fc3RyX2dldHN0YXRlLCBOVUxMKTsKKyAgICAgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGlmICghUHlBcmdfUGFyc2Uoc3RhdGUsICIocyNpKSIsICZkZWNfYnVmZmVyLCAmZGVjX2J1ZmZlcl9sZW4sICZkZWNfZmxhZ3MpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisKKyAgICAgICAgaWYgKGRlY19idWZmZXJfbGVuID09IDAgJiYgY2hhcnNfZGVjb2RlZCA8PSBjaGFyc190b19za2lwKSB7CisgICAgICAgICAgICAvKiBEZWNvZGVyIGJ1ZmZlciBpcyBlbXB0eSwgc28gdGhpcyBpcyBhIHNhZmUgc3RhcnQgcG9pbnQuICovCisgICAgICAgICAgICBjb29raWUuc3RhcnRfcG9zICs9IGNvb2tpZS5ieXRlc190b19mZWVkOworICAgICAgICAgICAgY2hhcnNfdG9fc2tpcCAtPSBjaGFyc19kZWNvZGVkOworICAgICAgICAgICAgY29va2llLmRlY19mbGFncyA9IGRlY19mbGFnczsKKyAgICAgICAgICAgIGNvb2tpZS5ieXRlc190b19mZWVkID0gMDsKKyAgICAgICAgICAgIGNoYXJzX2RlY29kZWQgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChjaGFyc19kZWNvZGVkID49IGNoYXJzX3RvX3NraXApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaW5wdXQrKzsKKyAgICB9CisgICAgaWYgKGlucHV0ID09IGlucHV0X2VuZCkgeworICAgICAgICAvKiBXZSBkaWRuJ3QgZ2V0IGVub3VnaCBkZWNvZGVkIGRhdGE7IHNpZ25hbCBFT0YgdG8gZ2V0IG1vcmUuICovCisgICAgICAgIFB5T2JqZWN0ICpkZWNvZGVkID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgKKyAgICAgICAgICAgIHNlbGYtPmRlY29kZXIsICJkZWNvZGUiLCAic2kiLCAiIiwgLyogZmluYWwgPSAqLyAxKTsKKyAgICAgICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgYXNzZXJ0IChQeVVuaWNvZGVfQ2hlY2soZGVjb2RlZCkpOworICAgICAgICBjaGFyc19kZWNvZGVkICs9IFB5VW5pY29kZV9HRVRfU0laRShkZWNvZGVkKTsKKyAgICAgICAgUHlfREVDUkVGKGRlY29kZWQpOworICAgICAgICBjb29raWUubmVlZF9lb2YgPSAxOworCisgICAgICAgIGlmIChjaGFyc19kZWNvZGVkIDwgY2hhcnNfdG9fc2tpcCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHJlY29uc3RydWN0IGxvZ2ljYWwgZmlsZSBwb3NpdGlvbiIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgLyogZmluYWxseSAqLworICAgIFB5X1hERUNSRUYocG9zb2JqKTsKKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmRlY29kZXIsICJzZXRzdGF0ZSIsICIoTykiLCBzYXZlZF9zdGF0ZSk7CisgICAgUHlfREVDUkVGKHNhdmVkX3N0YXRlKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgLyogVGhlIHJldHVybmVkIGNvb2tpZSBjb3JyZXNwb25kcyB0byB0aGUgbGFzdCBzYWZlIHN0YXJ0IHBvaW50LiAqLworICAgIGNvb2tpZS5jaGFyc190b19za2lwID0gUHlfU0FGRV9ET1dOQ0FTVChjaGFyc190b19za2lwLCBQeV9zc2l6ZV90LCBpbnQpOworICAgIHJldHVybiB0ZXh0aW93cmFwcGVyX2J1aWxkX2Nvb2tpZSgmY29va2llKTsKKworICBmYWlsOgorICAgIFB5X1hERUNSRUYocG9zb2JqKTsKKyAgICBpZiAoc2F2ZWRfc3RhdGUpIHsKKyAgICAgICAgUHlPYmplY3QgKnR5cGUsICp2YWx1ZSwgKnRyYWNlYmFjazsKKyAgICAgICAgUHlFcnJfRmV0Y2goJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7CisKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5kZWNvZGVyLCAic2V0c3RhdGUiLCAiKE8pIiwgc2F2ZWRfc3RhdGUpOworICAgICAgICBQeV9ERUNSRUYoc2F2ZWRfc3RhdGUpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisKKyAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX3RydW5jYXRlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnBvcyA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8Tzp0cnVuY2F0ZSIsICZwb3MpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKChQeU9iamVjdCAqKSBzZWxmLCBfUHlJT19zdHJfZmx1c2gsIE5VTEwpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfREVDUkVGKHJlcyk7CisKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+YnVmZmVyLCBfUHlJT19zdHJfdHJ1bmNhdGUsIHBvcywgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX3JlcHIodGV4dGlvICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpuYW1lb2JqLCAqcmVzOworICAgIFB5T2JqZWN0ICpuYW1lcmVwciA9IE5VTEwsICplbmNyZXByID0gTlVMTDsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworCisgICAgbmFtZW9iaiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoKFB5T2JqZWN0ICopIHNlbGYsICJuYW1lIik7CisgICAgaWYgKG5hbWVvYmogPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBlbmNyZXByID0gUHlPYmplY3RfUmVwcihzZWxmLT5lbmNvZGluZyk7CisgICAgICAgIHJlcyA9IFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxfaW8uVGV4dElPV3JhcHBlciBlbmNvZGluZz0lcz4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcoZW5jcmVwcikpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZW5jcmVwciA9IFB5T2JqZWN0X1JlcHIoc2VsZi0+ZW5jb2RpbmcpOworICAgICAgICBuYW1lcmVwciA9IFB5T2JqZWN0X1JlcHIobmFtZW9iaik7CisgICAgICAgIHJlcyA9IFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxfaW8uVGV4dElPV3JhcHBlciBuYW1lPSVzIGVuY29kaW5nPSVzPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhuYW1lcmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhlbmNyZXByKSk7CisgICAgICAgIFB5X0RFQ1JFRihuYW1lb2JqKTsKKyAgICB9CisgICAgUHlfWERFQ1JFRihuYW1lcmVwcik7CisgICAgUHlfWERFQ1JFRihlbmNyZXByKTsKKyAgICByZXR1cm4gcmVzOworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKG5hbWVyZXByKTsKKyAgICBQeV9YREVDUkVGKGVuY3JlcHIpOworICAgIHJldHVybiBOVUxMOworfQorCisKKy8qIElucXVpcmllcyAqLworCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9maWxlbm8odGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5idWZmZXIsICJmaWxlbm8iLCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfc2Vla2FibGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5idWZmZXIsICJzZWVrYWJsZSIsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9yZWFkYWJsZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmJ1ZmZlciwgInJlYWRhYmxlIiwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX3dyaXRhYmxlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZi0+YnVmZmVyLCAid3JpdGFibGUiLCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfaXNhdHR5KHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZi0+YnVmZmVyLCAiaXNhdHR5IiwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX2ZsdXNoKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworICAgIHNlbGYtPnRlbGxpbmcgPSBzZWxmLT5zZWVrYWJsZTsKKyAgICBpZiAoX3RleHRpb3dyYXBwZXJfd3JpdGVmbHVzaChzZWxmKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmJ1ZmZlciwgImZsdXNoIiwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX2Nsb3NlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBpbnQgcjsKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKworICAgIHJlcyA9IHRleHRpb3dyYXBwZXJfY2xvc2VkX2dldChzZWxmLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHIgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKKyAgICBQeV9ERUNSRUYocmVzKTsKKyAgICBpZiAociA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIGlmIChyID4gMCkgeworICAgICAgICBQeV9SRVRVUk5fTk9ORTsgLyogc3RyZWFtIGFscmVhZHkgY2xvc2VkICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKChQeU9iamVjdCAqKXNlbGYsICJmbHVzaCIsIE5VTEwpOworICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmJ1ZmZlciwgImNsb3NlIiwgTlVMTCk7CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9pdGVybmV4dCh0ZXh0aW8gKnNlbGYpCit7CisgICAgUHlPYmplY3QgKmxpbmU7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKworICAgIHNlbGYtPnRlbGxpbmcgPSAwOworICAgIGlmIChQeV9UWVBFKHNlbGYpID09ICZQeVRleHRJT1dyYXBwZXJfVHlwZSkgeworICAgICAgICAvKiBTa2lwIG1ldGhvZCBjYWxsIG92ZXJoZWFkIGZvciBzcGVlZCAqLworICAgICAgICBsaW5lID0gX3RleHRpb3dyYXBwZXJfcmVhZGxpbmUoc2VsZiwgLTEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbGluZSA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKChQeU9iamVjdCAqKXNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5SU9fc3RyX3JlYWRsaW5lLCBOVUxMKTsKKyAgICAgICAgaWYgKGxpbmUgJiYgIVB5VW5pY29kZV9DaGVjayhsaW5lKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgYW4gc3RyIG9iamVjdCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKGxpbmUpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxpbmUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKGxpbmUpID09IDApIHsKKyAgICAgICAgLyogUmVhY2hlZCBFT0Ygb3Igd291bGQgaGF2ZSBibG9ja2VkICovCisgICAgICAgIFB5X0RFQ1JFRihsaW5lKTsKKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+c25hcHNob3QpOworICAgICAgICBzZWxmLT50ZWxsaW5nID0gc2VsZi0+c2Vla2FibGU7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBsaW5lOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9uYW1lX2dldCh0ZXh0aW8gKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgcmV0dXJuIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc2VsZi0+YnVmZmVyLCAibmFtZSIpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9jbG9zZWRfZ2V0KHRleHRpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0cihzZWxmLT5idWZmZXIsIF9QeUlPX3N0cl9jbG9zZWQpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9uZXdsaW5lc19nZXQodGV4dGlvICpzZWxmLCB2b2lkICpjb250ZXh0KQoreworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgaWYgKHNlbGYtPmRlY29kZXIgPT0gTlVMTCkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgcmVzID0gUHlPYmplY3RfR2V0QXR0cihzZWxmLT5kZWNvZGVyLCBfUHlJT19zdHJfbmV3bGluZXMpOworICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX2Vycm9yc19nZXQodGV4dGlvICpzZWxmLCB2b2lkICpjb250ZXh0KQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIFB5X0lOQ1JFRihzZWxmLT5lcnJvcnMpOworICAgIHJldHVybiBzZWxmLT5lcnJvcnM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX2NodW5rX3NpemVfZ2V0KHRleHRpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPmNodW5rX3NpemUpOworfQorCitzdGF0aWMgaW50Cit0ZXh0aW93cmFwcGVyX2NodW5rX3NpemVfc2V0KHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZywgdm9pZCAqY29udGV4dCkKK3sKKyAgICBQeV9zc2l6ZV90IG47CisgICAgQ0hFQ0tfSU5JVElBTElaRURfSU5UKHNlbGYpOworICAgIG4gPSBQeU51bWJlcl9Bc1NzaXplX3QoYXJnLCBQeUV4Y19UeXBlRXJyb3IpOworICAgIGlmIChuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobiA8PSAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImEgc3RyaWN0bHkgcG9zaXRpdmUgaW50ZWdlciBpcyByZXF1aXJlZCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbGYtPmNodW5rX3NpemUgPSBuOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgdGV4dGlvd3JhcHBlcl9tZXRob2RzW10gPSB7CisgICAgeyJkZXRhY2giLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9kZXRhY2gsIE1FVEhfTk9BUkdTfSwKKyAgICB7IndyaXRlIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfd3JpdGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZWFkIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfcmVhZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlYWRsaW5lIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfcmVhZGxpbmUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX2ZsdXNoLCBNRVRIX05PQVJHU30sCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX2Nsb3NlLCBNRVRIX05PQVJHU30sCisKKyAgICB7ImZpbGVubyIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX2ZpbGVubywgTUVUSF9OT0FSR1N9LAorICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9zZWVrYWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsicmVhZGFibGUiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9yZWFkYWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsid3JpdGFibGUiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl93cml0YWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiaXNhdHR5IiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfaXNhdHR5LCBNRVRIX05PQVJHU30sCisKKyAgICB7InNlZWsiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9zZWVrLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidGVsbCIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX3RlbGwsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfdHJ1bmNhdGUsIE1FVEhfVkFSQVJHU30sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlNZW1iZXJEZWYgdGV4dGlvd3JhcHBlcl9tZW1iZXJzW10gPSB7CisgICAgeyJlbmNvZGluZyIsIFRfT0JKRUNULCBvZmZzZXRvZih0ZXh0aW8sIGVuY29kaW5nKSwgUkVBRE9OTFl9LAorICAgIHsiYnVmZmVyIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHRleHRpbywgYnVmZmVyKSwgUkVBRE9OTFl9LAorICAgIHsibGluZV9idWZmZXJpbmciLCBUX0JPT0wsIG9mZnNldG9mKHRleHRpbywgbGluZV9idWZmZXJpbmcpLCBSRUFET05MWX0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgdGV4dGlvd3JhcHBlcl9nZXRzZXRbXSA9IHsKKyAgICB7Im5hbWUiLCAoZ2V0dGVyKXRleHRpb3dyYXBwZXJfbmFtZV9nZXQsIE5VTEwsIE5VTEx9LAorICAgIHsiY2xvc2VkIiwgKGdldHRlcil0ZXh0aW93cmFwcGVyX2Nsb3NlZF9nZXQsIE5VTEwsIE5VTEx9LAorLyogICAgeyJtb2RlIiwgKGdldHRlcilUZXh0SU9XcmFwcGVyX21vZGVfZ2V0LCBOVUxMLCBOVUxMfSwKKyovCisgICAgeyJuZXdsaW5lcyIsIChnZXR0ZXIpdGV4dGlvd3JhcHBlcl9uZXdsaW5lc19nZXQsIE5VTEwsIE5VTEx9LAorICAgIHsiZXJyb3JzIiwgKGdldHRlcil0ZXh0aW93cmFwcGVyX2Vycm9yc19nZXQsIE5VTEwsIE5VTEx9LAorICAgIHsiX0NIVU5LX1NJWkUiLCAoZ2V0dGVyKXRleHRpb3dyYXBwZXJfY2h1bmtfc2l6ZV9nZXQsCisgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpdGV4dGlvd3JhcHBlcl9jaHVua19zaXplX3NldCwgTlVMTH0sCisgICAge05VTEx9Cit9OworCitQeVR5cGVPYmplY3QgUHlUZXh0SU9XcmFwcGVyX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIl9pby5UZXh0SU9XcmFwcGVyIiwgICAgICAgIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKHRleHRpbyksIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCisgICAgKGRlc3RydWN0b3IpdGV4dGlvd3JhcHBlcl9kZWFsbG9jLCAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cHNfZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlICovCisgICAgKHJlcHJmdW5jKXRleHRpb3dyYXBwZXJfcmVwciwvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCisgICAgdGV4dGlvd3JhcHBlcl9kb2MsICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpdGV4dGlvd3JhcHBlcl90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSl0ZXh0aW93cmFwcGVyX2NsZWFyLCAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG9mZnNldG9mKHRleHRpbywgd2Vha3JlZmxpc3QpLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIChpdGVybmV4dGZ1bmMpdGV4dGlvd3JhcHBlcl9pdGVybmV4dCwgLyogdHBfaXRlcm5leHQgKi8KKyAgICB0ZXh0aW93cmFwcGVyX21ldGhvZHMsICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIHRleHRpb3dyYXBwZXJfbWVtYmVycywgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgdGV4dGlvd3JhcHBlcl9nZXRzZXQsICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIG9mZnNldG9mKHRleHRpbywgZGljdCksIC8qdHBfZGljdG9mZnNldCovCisgICAgKGluaXRwcm9jKXRleHRpb3dyYXBwZXJfaW5pdCwgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19qc29uLmMgYi9Nb2R1bGVzL19qc29uLmMKaW5kZXggMmU3N2YxYy4uNzFkM2U1OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fanNvbi5jCisrKyBiL01vZHVsZXMvX2pzb24uYwpAQCAtMSwxOSArMSwxNjYgQEAKICNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKKyNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNjAwMDAgJiYgIWRlZmluZWQoUHlfVFlQRSkKKyNkZWZpbmUgUHlfVFlQRShvYikgICAgICgoKFB5T2JqZWN0Kikob2IpKS0+b2JfdHlwZSkKKyNlbmRpZgorI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCAmJiAhZGVmaW5lZChQWV9TU0laRV9UX01JTikKK3R5cGVkZWYgaW50IFB5X3NzaXplX3Q7CisjZGVmaW5lIFBZX1NTSVpFX1RfTUFYIElOVF9NQVgKKyNkZWZpbmUgUFlfU1NJWkVfVF9NSU4gSU5UX01JTgorI2RlZmluZSBQeUludF9Gcm9tU3NpemVfdCBQeUludF9Gcm9tTG9uZworI2RlZmluZSBQeUludF9Bc1NzaXplX3QgUHlJbnRfQXNMb25nCisjZW5kaWYKKyNpZm5kZWYgUHlfSVNfRklOSVRFCisjZGVmaW5lIFB5X0lTX0ZJTklURShYKSAoIVB5X0lTX0lORklOSVRZKFgpICYmICFQeV9JU19OQU4oWCkpCisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIFVOVVNFRCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKKyNlbHNlCisjZGVmaW5lIFVOVVNFRAorI2VuZGlmCiAKICNkZWZpbmUgREVGQVVMVF9FTkNPRElORyAidXRmLTgiCi0jZGVmaW5lIFNfQ0hBUihjKSAoYyA+PSAnICcgJiYgYyA8PSAnficgJiYgYyAhPSAnXFwnICYmIGMgIT0gJyInKQotI2RlZmluZSBNSU5fRVhQQU5TSU9OIDYKIAorI2RlZmluZSBQeVNjYW5uZXJfQ2hlY2sob3ApIFB5T2JqZWN0X1R5cGVDaGVjayhvcCwgJlB5U2Nhbm5lclR5cGUpCisjZGVmaW5lIFB5U2Nhbm5lcl9DaGVja0V4YWN0KG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5U2Nhbm5lclR5cGUpCisjZGVmaW5lIFB5RW5jb2Rlcl9DaGVjayhvcCkgUHlPYmplY3RfVHlwZUNoZWNrKG9wLCAmUHlFbmNvZGVyVHlwZSkKKyNkZWZpbmUgUHlFbmNvZGVyX0NoZWNrRXhhY3Qob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlFbmNvZGVyVHlwZSkKKworc3RhdGljIFB5VHlwZU9iamVjdCBQeVNjYW5uZXJUeXBlOworc3RhdGljIFB5VHlwZU9iamVjdCBQeUVuY29kZXJUeXBlOworCit0eXBlZGVmIHN0cnVjdCBfUHlTY2FubmVyT2JqZWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKmVuY29kaW5nOworICAgIFB5T2JqZWN0ICpzdHJpY3Q7CisgICAgUHlPYmplY3QgKm9iamVjdF9ob29rOworICAgIFB5T2JqZWN0ICpwYWlyc19ob29rOworICAgIFB5T2JqZWN0ICpwYXJzZV9mbG9hdDsKKyAgICBQeU9iamVjdCAqcGFyc2VfaW50OworICAgIFB5T2JqZWN0ICpwYXJzZV9jb25zdGFudDsKK30gUHlTY2FubmVyT2JqZWN0OworCitzdGF0aWMgUHlNZW1iZXJEZWYgc2Nhbm5lcl9tZW1iZXJzW10gPSB7CisgICAgeyJlbmNvZGluZyIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVNjYW5uZXJPYmplY3QsIGVuY29kaW5nKSwgUkVBRE9OTFksICJlbmNvZGluZyJ9LAorICAgIHsic3RyaWN0IiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgc3RyaWN0KSwgUkVBRE9OTFksICJzdHJpY3QifSwKKyAgICB7Im9iamVjdF9ob29rIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgb2JqZWN0X2hvb2spLCBSRUFET05MWSwgIm9iamVjdF9ob29rIn0sCisgICAgeyJvYmplY3RfcGFpcnNfaG9vayIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVNjYW5uZXJPYmplY3QsIHBhaXJzX2hvb2spLCBSRUFET05MWSwgIm9iamVjdF9wYWlyc19ob29rIn0sCisgICAgeyJwYXJzZV9mbG9hdCIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVNjYW5uZXJPYmplY3QsIHBhcnNlX2Zsb2F0KSwgUkVBRE9OTFksICJwYXJzZV9mbG9hdCJ9LAorICAgIHsicGFyc2VfaW50IiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgcGFyc2VfaW50KSwgUkVBRE9OTFksICJwYXJzZV9pbnQifSwKKyAgICB7InBhcnNlX2NvbnN0YW50IiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgcGFyc2VfY29uc3RhbnQpLCBSRUFET05MWSwgInBhcnNlX2NvbnN0YW50In0sCisgICAge05VTEx9Cit9OworCit0eXBlZGVmIHN0cnVjdCBfUHlFbmNvZGVyT2JqZWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKm1hcmtlcnM7CisgICAgUHlPYmplY3QgKmRlZmF1bHRmbjsKKyAgICBQeU9iamVjdCAqZW5jb2RlcjsKKyAgICBQeU9iamVjdCAqaW5kZW50OworICAgIFB5T2JqZWN0ICprZXlfc2VwYXJhdG9yOworICAgIFB5T2JqZWN0ICppdGVtX3NlcGFyYXRvcjsKKyAgICBQeU9iamVjdCAqc29ydF9rZXlzOworICAgIFB5T2JqZWN0ICpza2lwa2V5czsKKyAgICBpbnQgZmFzdF9lbmNvZGU7CisgICAgaW50IGFsbG93X25hbjsKK30gUHlFbmNvZGVyT2JqZWN0OworCitzdGF0aWMgUHlNZW1iZXJEZWYgZW5jb2Rlcl9tZW1iZXJzW10gPSB7CisgICAgeyJtYXJrZXJzIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RW5jb2Rlck9iamVjdCwgbWFya2VycyksIFJFQURPTkxZLCAibWFya2VycyJ9LAorICAgIHsiZGVmYXVsdCIsIFRfT0JKRUNULCBvZmZzZXRvZihQeUVuY29kZXJPYmplY3QsIGRlZmF1bHRmbiksIFJFQURPTkxZLCAiZGVmYXVsdCJ9LAorICAgIHsiZW5jb2RlciIsIFRfT0JKRUNULCBvZmZzZXRvZihQeUVuY29kZXJPYmplY3QsIGVuY29kZXIpLCBSRUFET05MWSwgImVuY29kZXIifSwKKyAgICB7ImluZGVudCIsIFRfT0JKRUNULCBvZmZzZXRvZihQeUVuY29kZXJPYmplY3QsIGluZGVudCksIFJFQURPTkxZLCAiaW5kZW50In0sCisgICAgeyJrZXlfc2VwYXJhdG9yIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RW5jb2Rlck9iamVjdCwga2V5X3NlcGFyYXRvciksIFJFQURPTkxZLCAia2V5X3NlcGFyYXRvciJ9LAorICAgIHsiaXRlbV9zZXBhcmF0b3IiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBpdGVtX3NlcGFyYXRvciksIFJFQURPTkxZLCAiaXRlbV9zZXBhcmF0b3IifSwKKyAgICB7InNvcnRfa2V5cyIsIFRfT0JKRUNULCBvZmZzZXRvZihQeUVuY29kZXJPYmplY3QsIHNvcnRfa2V5cyksIFJFQURPTkxZLCAic29ydF9rZXlzIn0sCisgICAgeyJza2lwa2V5cyIsIFRfT0JKRUNULCBvZmZzZXRvZihQeUVuY29kZXJPYmplY3QsIHNraXBrZXlzKSwgUkVBRE9OTFksICJza2lwa2V5cyJ9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5X3NzaXplX3QKK2FzY2lpX2VzY2FwZV9jaGFyKFB5X1VOSUNPREUgYywgY2hhciAqb3V0cHV0LCBQeV9zc2l6ZV90IGNoYXJzKTsKK3N0YXRpYyBQeU9iamVjdCAqCithc2NpaV9lc2NhcGVfdW5pY29kZShQeU9iamVjdCAqcHlzdHIpOworc3RhdGljIFB5T2JqZWN0ICoKK2FzY2lpX2VzY2FwZV9zdHIoUHlPYmplY3QgKnB5c3RyKTsKK3N0YXRpYyBQeU9iamVjdCAqCitweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShQeU9iamVjdCogc2VsZiBVTlVTRUQsIFB5T2JqZWN0ICpweXN0cik7Cit2b2lkIGluaXRfanNvbih2b2lkKTsKK3N0YXRpYyBQeU9iamVjdCAqCitzY2FuX29uY2Vfc3RyKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKTsKK3N0YXRpYyBQeU9iamVjdCAqCitzY2FuX29uY2VfdW5pY29kZShQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cik7CitzdGF0aWMgUHlPYmplY3QgKgorX2J1aWxkX3J2YWxfaW5kZXhfdHVwbGUoUHlPYmplY3QgKnJ2YWwsIFB5X3NzaXplX3QgaWR4KTsKK3N0YXRpYyBQeU9iamVjdCAqCitzY2FubmVyX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CitzdGF0aWMgaW50CitzY2FubmVyX2luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CitzdGF0aWMgdm9pZAorc2Nhbm5lcl9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKTsKK3N0YXRpYyBpbnQKK3NjYW5uZXJfY2xlYXIoUHlPYmplY3QgKnNlbGYpOworc3RhdGljIFB5T2JqZWN0ICoKK2VuY29kZXJfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKTsKK3N0YXRpYyBpbnQKK2VuY29kZXJfaW5pdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKTsKK3N0YXRpYyB2b2lkCitlbmNvZGVyX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpOworc3RhdGljIGludAorZW5jb2Rlcl9jbGVhcihQeU9iamVjdCAqc2VsZik7CitzdGF0aWMgaW50CitlbmNvZGVyX2xpc3RlbmNvZGVfbGlzdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpydmFsLCBQeU9iamVjdCAqc2VxLCBQeV9zc2l6ZV90IGluZGVudF9sZXZlbCk7CitzdGF0aWMgaW50CitlbmNvZGVyX2xpc3RlbmNvZGVfb2JqKFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKnJ2YWwsIFB5T2JqZWN0ICpvYmosIFB5X3NzaXplX3QgaW5kZW50X2xldmVsKTsKK3N0YXRpYyBpbnQKK2VuY29kZXJfbGlzdGVuY29kZV9kaWN0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKnJ2YWwsIFB5T2JqZWN0ICpkY3QsIFB5X3NzaXplX3QgaW5kZW50X2xldmVsKTsKK3N0YXRpYyBQeU9iamVjdCAqCitfZW5jb2RlZF9jb25zdChQeU9iamVjdCAqb2JqKTsKK3N0YXRpYyB2b2lkCityYWlzZV9lcnJtc2coY2hhciAqbXNnLCBQeU9iamVjdCAqcywgUHlfc3NpemVfdCBlbmQpOworc3RhdGljIFB5T2JqZWN0ICoKK2VuY29kZXJfZW5jb2RlX3N0cmluZyhQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOworc3RhdGljIGludAorX2NvbnZlcnRQeUludF9Bc1NzaXplX3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgKnNpemVfcHRyKTsKK3N0YXRpYyBQeU9iamVjdCAqCitfY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKTsKK3N0YXRpYyBQeU9iamVjdCAqCitlbmNvZGVyX2VuY29kZV9mbG9hdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOworCisjZGVmaW5lIFNfQ0hBUihjKSAoYyA+PSAnICcgJiYgYyA8PSAnficgJiYgYyAhPSAnXFwnICYmIGMgIT0gJyInKQorI2RlZmluZSBJU19XSElURVNQQUNFKGMpICgoKGMpID09ICcgJykgfHwgKChjKSA9PSAnXHQnKSB8fCAoKGMpID09ICdcbicpIHx8ICgoYykgPT0gJ1xyJykpCisKKyNkZWZpbmUgTUlOX0VYUEFOU0lPTiA2CiAjaWZkZWYgUHlfVU5JQ09ERV9XSURFCiAjZGVmaW5lIE1BWF9FWFBBTlNJT04gKDIgKiBNSU5fRVhQQU5TSU9OKQogI2Vsc2UKICNkZWZpbmUgTUFYX0VYUEFOU0lPTiBNSU5fRVhQQU5TSU9OCiAjZW5kaWYKIAorc3RhdGljIGludAorX2NvbnZlcnRQeUludF9Bc1NzaXplX3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgKnNpemVfcHRyKQoreworICAgIC8qIFB5T2JqZWN0IHRvIFB5X3NzaXplX3QgY29udmVydGVyICovCisgICAgKnNpemVfcHRyID0gUHlJbnRfQXNTc2l6ZV90KG8pOworICAgIGlmICgqc2l6ZV9wdHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKQoreworICAgIC8qIFB5X3NzaXplX3QgdG8gUHlPYmplY3QgY29udmVydGVyICovCisgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KCpzaXplX3B0cik7Cit9CisKIHN0YXRpYyBQeV9zc2l6ZV90CiBhc2NpaV9lc2NhcGVfY2hhcihQeV9VTklDT0RFIGMsIGNoYXIgKm91dHB1dCwgUHlfc3NpemVfdCBjaGFycykKIHsKLSAgICBQeV9VTklDT0RFIHg7CisgICAgLyogRXNjYXBlIHVuaWNvZGUgY29kZSBwb2ludCBjIHRvIEFTQ0lJIGVzY2FwZSBzZXF1ZW5jZXMKKyAgICBpbiBjaGFyICpvdXRwdXQuIG91dHB1dCBtdXN0IGhhdmUgYXQgbGVhc3QgMTIgYnl0ZXMgdW51c2VkIHRvCisgICAgYWNjb21tb2RhdGUgYW4gZXNjYXBlZCBzdXJyb2dhdGUgcGFpciAiXHVYWFhYXHVYWFhYIiAqLwogICAgIG91dHB1dFtjaGFycysrXSA9ICdcXCc7CiAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgIGNhc2UgJ1xcJzogb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsgYnJlYWs7CkBAIC0zMCwyNyArMTc3LDE5IEBACiAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSB2ID0gYyAtIDB4MTAwMDA7CiAgICAgICAgICAgICAgICAgYyA9IDB4ZDgwMCB8ICgodiA+PiAxMCkgJiAweDNmZik7CiAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3UnOwotICAgICAgICAgICAgICAgIHggPSAoYyAmIDB4ZjAwMCkgPj4gMTI7Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7Ci0gICAgICAgICAgICAgICAgeCA9IChjICYgMHgwZjAwKSA+PiA4OwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOwotICAgICAgICAgICAgICAgIHggPSAoYyAmIDB4MDBmMCkgPj4gNDsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKLSAgICAgICAgICAgICAgICB4ID0gKGMgJiAweDAwMGYpOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyA+PiAxMikgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyA+PiAgOCkgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyA+PiAgNCkgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyAgICAgICkgJiAweGZdOwogICAgICAgICAgICAgICAgIGMgPSAweGRjMDAgfCAodiAmIDB4M2ZmKTsKICAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAnXFwnOwogICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAndSc7Ci0gICAgICAgICAgICB4ID0gKGMgJiAweGYwMDApID4+IDEyOwotICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7Ci0gICAgICAgICAgICB4ID0gKGMgJiAweDBmMDApID4+IDg7Ci0gICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKLSAgICAgICAgICAgIHggPSAoYyAmIDB4MDBmMCkgPj4gNDsKLSAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOwotICAgICAgICAgICAgeCA9IChjICYgMHgwMDBmKTsKLSAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOworICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gIjAxMjM0NTY3ODlhYmNkZWYiWyhjID4+IDEyKSAmIDB4Zl07CisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgPj4gIDgpICYgMHhmXTsKKyAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyA+PiAgNCkgJiAweGZdOworICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gIjAxMjM0NTY3ODlhYmNkZWYiWyhjICAgICAgKSAmIDB4Zl07CiAgICAgfQogICAgIHJldHVybiBjaGFyczsKIH0KQEAgLTU4LDkgKzE5NywxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGFzY2lpX2VzY2FwZV91bmljb2RlKFB5T2JqZWN0ICpweXN0cikKIHsKKyAgICAvKiBUYWtlIGEgUHlVbmljb2RlIHB5c3RyIGFuZCByZXR1cm4gYSBuZXcgQVNDSUktb25seSBlc2NhcGVkIFB5U3RyaW5nICovCiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgaW5wdXRfY2hhcnM7CiAgICAgUHlfc3NpemVfdCBvdXRwdXRfc2l6ZTsKKyAgICBQeV9zc2l6ZV90IG1heF9vdXRwdXRfc2l6ZTsKICAgICBQeV9zc2l6ZV90IGNoYXJzOwogICAgIFB5T2JqZWN0ICpydmFsOwogICAgIGNoYXIgKm91dHB1dDsKQEAgLTY4LDggKzIwOSwxMCBAQAogCiAgICAgaW5wdXRfY2hhcnMgPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpOwogICAgIGlucHV0X3VuaWNvZGUgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShweXN0cik7CisKICAgICAvKiBPbmUgY2hhciBpbnB1dCBjYW4gYmUgdXAgdG8gNiBjaGFycyBvdXRwdXQsIGVzdGltYXRlIDQgb2YgdGhlc2UgKi8KICAgICBvdXRwdXRfc2l6ZSA9IDIgKyAoTUlOX0VYUEFOU0lPTiAqIDQpICsgaW5wdXRfY2hhcnM7CisgICAgbWF4X291dHB1dF9zaXplID0gMiArIChpbnB1dF9jaGFycyAqIE1BWF9FWFBBTlNJT04pOwogICAgIHJ2YWwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRwdXRfc2l6ZSk7CiAgICAgaWYgKHJ2YWwgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTgyLDIwICsyMjUsMjQgQEAKICAgICAgICAgaWYgKFNfQ0hBUihjKSkgewogICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsKICAgICAgICAgfQotCWVsc2UgeworICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGNoYXJzID0gYXNjaWlfZXNjYXBlX2NoYXIoYywgb3V0cHV0LCBjaGFycyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG91dHB1dF9zaXplIC0gY2hhcnMgPCAoMSArIE1BWF9FWFBBTlNJT04pKSB7CiAgICAgICAgICAgICAvKiBUaGVyZSdzIG1vcmUgdGhhbiBmb3VyLCBzbyBsZXQncyByZXNpemUgYnkgYSBsb3QgKi8KLSAgICAgICAgICAgIG91dHB1dF9zaXplICo9IDI7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG5ld19vdXRwdXRfc2l6ZSA9IG91dHB1dF9zaXplICogMjsKICAgICAgICAgICAgIC8qIFRoaXMgaXMgYW4gdXBwZXIgYm91bmQgKi8KLSAgICAgICAgICAgIGlmIChvdXRwdXRfc2l6ZSA+IDIgKyAoaW5wdXRfY2hhcnMgKiBNQVhfRVhQQU5TSU9OKSkgewotICAgICAgICAgICAgICAgIG91dHB1dF9zaXplID0gMiArIChpbnB1dF9jaGFycyAqIE1BWF9FWFBBTlNJT04pOworICAgICAgICAgICAgaWYgKG5ld19vdXRwdXRfc2l6ZSA+IG1heF9vdXRwdXRfc2l6ZSkgeworICAgICAgICAgICAgICAgIG5ld19vdXRwdXRfc2l6ZSA9IG1heF9vdXRwdXRfc2l6ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZydmFsLCBvdXRwdXRfc2l6ZSkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBvdXRwdXQgc2l6ZSBjaGFuZ2VkIGJlZm9yZSByZXNpemluZyAqLworICAgICAgICAgICAgaWYgKG5ld19vdXRwdXRfc2l6ZSAhPSBvdXRwdXRfc2l6ZSkgeworICAgICAgICAgICAgICAgIG91dHB1dF9zaXplID0gbmV3X291dHB1dF9zaXplOworICAgICAgICAgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZydmFsLCBvdXRwdXRfc2l6ZSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dHB1dCA9IFB5U3RyaW5nX0FTX1NUUklORyhydmFsKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dHB1dCA9IFB5U3RyaW5nX0FTX1NUUklORyhydmFsKTsKICAgICAgICAgfQogICAgIH0KICAgICBvdXRwdXRbY2hhcnMrK10gPSAnIic7CkBAIC0xMDgsNiArMjU1LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhc2NpaV9lc2NhcGVfc3RyKFB5T2JqZWN0ICpweXN0cikKIHsKKyAgICAvKiBUYWtlIGEgUHlTdHJpbmcgcHlzdHIgYW5kIHJldHVybiBhIG5ldyBBU0NJSS1vbmx5IGVzY2FwZWQgUHlTdHJpbmcgKi8KICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBpbnB1dF9jaGFyczsKICAgICBQeV9zc2l6ZV90IG91dHB1dF9zaXplOwpAQCAtMTE4LDMzICsyNjYsNTYgQEAKIAogICAgIGlucHV0X2NoYXJzID0gUHlTdHJpbmdfR0VUX1NJWkUocHlzdHIpOwogICAgIGlucHV0X3N0ciA9IFB5U3RyaW5nX0FTX1NUUklORyhweXN0cik7Ci0gICAgLyogT25lIGNoYXIgaW5wdXQgY2FuIGJlIHVwIHRvIDYgY2hhcnMgb3V0cHV0LCBlc3RpbWF0ZSA0IG9mIHRoZXNlICovCi0gICAgb3V0cHV0X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04gKiA0KSArIGlucHV0X2NoYXJzOworCisgICAgLyogRmFzdCBwYXRoIGZvciBhIHN0cmluZyB0aGF0J3MgYWxyZWFkeSBBU0NJSSAqLworICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dF9jaGFyczsgaSsrKSB7CisgICAgICAgIFB5X1VOSUNPREUgYyA9IChQeV9VTklDT0RFKSh1bnNpZ25lZCBjaGFyKWlucHV0X3N0cltpXTsKKyAgICAgICAgaWYgKCFTX0NIQVIoYykpIHsKKyAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgdG8gZXNjYXBlIHNvbWV0aGluZywgc2NhbiB0aGUgc3RyaW5nIGZvciB1bmljb2RlICovCisgICAgICAgICAgICBQeV9zc2l6ZV90IGo7CisgICAgICAgICAgICBmb3IgKGogPSBpOyBqIDwgaW5wdXRfY2hhcnM7IGorKykgeworICAgICAgICAgICAgICAgIGMgPSAoUHlfVU5JQ09ERSkodW5zaWduZWQgY2hhcilpbnB1dF9zdHJbal07CisgICAgICAgICAgICAgICAgaWYgKGMgPiAweDdmKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFdlIGhpdCBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIsIGJhaWwgdG8gdW5pY29kZSBtb2RlICovCisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmk7CisgICAgICAgICAgICAgICAgICAgIHVuaSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGlucHV0X3N0ciwgaW5wdXRfY2hhcnMsICJzdHJpY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBydmFsID0gYXNjaWlfZXNjYXBlX3VuaWNvZGUodW5pKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHVuaSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBydmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGkgPT0gaW5wdXRfY2hhcnMpIHsKKyAgICAgICAgLyogSW5wdXQgaXMgYWxyZWFkeSBBU0NJSSAqLworICAgICAgICBvdXRwdXRfc2l6ZSA9IDIgKyBpbnB1dF9jaGFyczsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIE9uZSBjaGFyIGlucHV0IGNhbiBiZSB1cCB0byA2IGNoYXJzIG91dHB1dCwgZXN0aW1hdGUgNCBvZiB0aGVzZSAqLworICAgICAgICBvdXRwdXRfc2l6ZSA9IDIgKyAoTUlOX0VYUEFOU0lPTiAqIDQpICsgaW5wdXRfY2hhcnM7CisgICAgfQogICAgIHJ2YWwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRwdXRfc2l6ZSk7CiAgICAgaWYgKHJ2YWwgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgb3V0cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwpOwotICAgIGNoYXJzID0gMDsKLSAgICBvdXRwdXRbY2hhcnMrK10gPSAnIic7Ci0gICAgZm9yIChpID0gMDsgaSA8IGlucHV0X2NoYXJzOyBpKyspIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gKFB5X1VOSUNPREUpaW5wdXRfc3RyW2ldOworICAgIG91dHB1dFswXSA9ICciJzsKKworICAgIC8qIFdlIGtub3cgdGhhdCBldmVyeXRoaW5nIHVwIHRvIGkgaXMgQVNDSUkgYWxyZWFkeSAqLworICAgIGNoYXJzID0gaSArIDE7CisgICAgbWVtY3B5KCZvdXRwdXRbMV0sIGlucHV0X3N0ciwgaSk7CisKKyAgICBmb3IgKDsgaSA8IGlucHV0X2NoYXJzOyBpKyspIHsKKyAgICAgICAgUHlfVU5JQ09ERSBjID0gKFB5X1VOSUNPREUpKHVuc2lnbmVkIGNoYXIpaW5wdXRfc3RyW2ldOwogICAgICAgICBpZiAoU19DSEFSKGMpKSB7CiAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOwogICAgICAgICB9Ci0JZWxzZSBpZiAoYyA+IDB4N0YpIHsKLSAgICAgICAgICAgIC8qIFdlIGhpdCBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIsIGJhaWwgdG8gdW5pY29kZSBtb2RlICovCi0gICAgICAgICAgICBQeU9iamVjdCAqdW5pOwotICAgICAgICAgICAgUHlfREVDUkVGKHJ2YWwpOwotICAgICAgICAgICAgdW5pID0gUHlVbmljb2RlX0RlY29kZVVURjgoaW5wdXRfc3RyLCBpbnB1dF9jaGFycywgInN0cmljdCIpOwotICAgICAgICAgICAgaWYgKHVuaSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBydmFsID0gYXNjaWlfZXNjYXBlX3VuaWNvZGUodW5pKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1bmkpOwotICAgICAgICAgICAgcmV0dXJuIHJ2YWw7Ci0gICAgICAgIH0KLQllbHNlIHsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjaGFycyA9IGFzY2lpX2VzY2FwZV9jaGFyKGMsIG91dHB1dCwgY2hhcnMpOwogICAgICAgICB9CiAgICAgICAgIC8qIEFuIEFTQ0lJIGNoYXIgY2FuJ3QgcG9zc2libHkgZXhwYW5kIHRvIGEgc3Vycm9nYXRlISAqLwpAQCAtMTY3LDkgKzMzOCwxMSBAQAogICAgIHJldHVybiBydmFsOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcmFpc2VfZXJybXNnKGNoYXIgKm1zZywgUHlPYmplY3QgKnMsIFB5X3NzaXplX3QgZW5kKQogeworICAgIC8qIFVzZSB0aGUgUHl0aG9uIGZ1bmN0aW9uIGpzb24uZGVjb2Rlci5lcnJtc2cgdG8gcmFpc2UgYSBuaWNlCisgICAgbG9va2luZyBWYWx1ZUVycm9yIGV4Y2VwdGlvbiAqLwogICAgIHN0YXRpYyBQeU9iamVjdCAqZXJybXNnX2ZuID0gTlVMTDsKICAgICBQeU9iamVjdCAqcHltc2c7CiAgICAgaWYgKGVycm1zZ19mbiA9PSBOVUxMKSB7CkBAIC0xNzcsNjEgKzM1MCw5NiBAQAogICAgICAgICBpZiAoZGVjb2RlciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBlcnJtc2dfZm4gPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGRlY29kZXIsICJlcnJtc2ciKTsKKyAgICAgICAgUHlfREVDUkVGKGRlY29kZXIpOwogICAgICAgICBpZiAoZXJybXNnX2ZuID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFB5X0RFQ1JFRihkZWNvZGVyKTsKICAgICB9Ci0gICAgcHltc2cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZXJybXNnX2ZuLCAiKHpPbikiLCBtc2csIHMsIGVuZCk7CisgICAgcHltc2cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZXJybXNnX2ZuLCAiKHpPTyYpIiwgbXNnLCBzLCBfY29udmVydFB5SW50X0Zyb21Tc2l6ZV90LCAmZW5kKTsKICAgICBpZiAocHltc2cpIHsKICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1ZhbHVlRXJyb3IsIHB5bXNnKTsKICAgICAgICAgUHlfREVDUkVGKHB5bXNnKTsKICAgICB9Ci0vKgotCi1kZWYgbGluZWNvbChkb2MsIHBvcyk6Ci0gICAgbGluZW5vID0gZG9jLmNvdW50KCdcbicsIDAsIHBvcykgKyAxCi0gICAgaWYgbGluZW5vID09IDE6Ci0gICAgICAgIGNvbG5vID0gcG9zCi0gICAgZWxzZToKLSAgICAgICAgY29sbm8gPSBwb3MgLSBkb2MucmluZGV4KCdcbicsIDAsIHBvcykKLSAgICByZXR1cm4gbGluZW5vLCBjb2xubwotCi1kZWYgZXJybXNnKG1zZywgZG9jLCBwb3MsIGVuZD1Ob25lKToKLSAgICBsaW5lbm8sIGNvbG5vID0gbGluZWNvbChkb2MsIHBvcykKLSAgICBpZiBlbmQgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuICclczogbGluZSAlZCBjb2x1bW4gJWQgKGNoYXIgJWQpJyAlIChtc2csIGxpbmVubywgY29sbm8sIHBvcykKLSAgICBlbmRsaW5lbm8sIGVuZGNvbG5vID0gbGluZWNvbChkb2MsIGVuZCkKLSAgICByZXR1cm4gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAtIGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVkIC0gJWQpJyAlICgKLSAgICAgICAgbXNnLCBsaW5lbm8sIGNvbG5vLCBlbmRsaW5lbm8sIGVuZGNvbG5vLCBwb3MsIGVuZCkKLQotKi8KIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGpvaW5fbGlzdF91bmljb2RlKFB5T2JqZWN0ICpsc3QpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICp1c3RyID0gTlVMTDsKLSAgICBzdGF0aWMgUHlPYmplY3QgKmpvaW5zdHIgPSBOVUxMOwotICAgIGlmICh1c3RyID09IE5VTEwpIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gMDsKLSAgICAgICAgdXN0ciA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgmYywgMCk7CisgICAgLyogcmV0dXJuIHUnJy5qb2luKGxzdCkgKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKmpvaW5mbiA9IE5VTEw7CisgICAgaWYgKGpvaW5mbiA9PSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICp1c3RyID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIDApOworICAgICAgICBpZiAodXN0ciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgam9pbmZuID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh1c3RyLCAiam9pbiIpOworICAgICAgICBQeV9ERUNSRUYodXN0cik7CisgICAgICAgIGlmIChqb2luZm4gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoam9pbnN0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGpvaW5zdHIgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJqb2luIik7Ci0gICAgfQotICAgIGlmIChqb2luc3RyID09IE5VTEwgfHwgdXN0ciA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3ModXN0ciwgam9pbnN0ciwgbHN0LCBOVUxMKTsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhqb2luZm4sIGxzdCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1zY2Fuc3RyaW5nX3N0cihQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgZW5kLCBjaGFyICplbmNvZGluZywgaW50IHN0cmljdCkKK2pvaW5fbGlzdF9zdHJpbmcoUHlPYmplY3QgKmxzdCkKIHsKKyAgICAvKiByZXR1cm4gJycuam9pbihsc3QpICovCisgICAgc3RhdGljIFB5T2JqZWN0ICpqb2luZm4gPSBOVUxMOworICAgIGlmIChqb2luZm4gPT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqdXN0ciA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOworICAgICAgICBpZiAodXN0ciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgam9pbmZuID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh1c3RyLCAiam9pbiIpOworICAgICAgICBQeV9ERUNSRUYodXN0cik7CisgICAgICAgIGlmIChqb2luZm4gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhqb2luZm4sIGxzdCwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnVpbGRfcnZhbF9pbmRleF90dXBsZShQeU9iamVjdCAqcnZhbCwgUHlfc3NpemVfdCBpZHgpIHsKKyAgICAvKiByZXR1cm4gKHJ2YWwsIGlkeCkgdHVwbGUsIHN0ZWFsaW5nIHJlZmVyZW5jZSB0byBydmFsICovCisgICAgUHlPYmplY3QgKnRwbDsKKyAgICBQeU9iamVjdCAqcHlpZHg7CisgICAgLyoKKyAgICBzdGVhbCBhIHJlZmVyZW5jZSB0byBydmFsLCByZXR1cm5zIChydmFsLCBpZHgpCisgICAgKi8KKyAgICBpZiAocnZhbCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBweWlkeCA9IFB5SW50X0Zyb21Tc2l6ZV90KGlkeCk7CisgICAgaWYgKHB5aWR4ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJ2YWwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdHBsID0gUHlUdXBsZV9OZXcoMik7CisgICAgaWYgKHRwbCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihweWlkeCk7CisgICAgICAgIFB5X0RFQ1JFRihydmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0odHBsLCAwLCBydmFsKTsKKyAgICBQeVR1cGxlX1NFVF9JVEVNKHRwbCwgMSwgcHlpZHgpOworICAgIHJldHVybiB0cGw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzY2Fuc3RyaW5nX3N0cihQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgZW5kLCBjaGFyICplbmNvZGluZywgaW50IHN0cmljdCwgUHlfc3NpemVfdCAqbmV4dF9lbmRfcHRyKQoreworICAgIC8qIFJlYWQgdGhlIEpTT04gc3RyaW5nIGZyb20gUHlTdHJpbmcgcHlzdHIuCisgICAgZW5kIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBxdW90ZS4KKyAgICBlbmNvZGluZyBpcyB0aGUgZW5jb2Rpbmcgb2YgcHlzdHIgKG11c3QgYmUgYW4gQVNDSUkgc3VwZXJzZXQpCisgICAgaWYgc3RyaWN0IGlzIHplcm8gdGhlbiBsaXRlcmFsIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgYWxsb3dlZAorICAgICpuZXh0X2VuZF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIKKyAgICAgICAgYWZ0ZXIgdGhlIGVuZCBxdW90ZQorCisgICAgUmV0dXJuIHZhbHVlIGlzIGEgbmV3IFB5U3RyaW5nIChpZiBBU0NJSS1vbmx5KSBvciBQeVVuaWNvZGUKKyAgICAqLwogICAgIFB5T2JqZWN0ICpydmFsOwogICAgIFB5X3NzaXplX3QgbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUocHlzdHIpOwogICAgIFB5X3NzaXplX3QgYmVnaW4gPSBlbmQgLSAxOwotICAgIFB5X3NzaXplX3QgbmV4dCA9IGJlZ2luOworICAgIFB5X3NzaXplX3QgbmV4dDsKICAgICBjaGFyICpidWYgPSBQeVN0cmluZ19BU19TVFJJTkcocHlzdHIpOwogICAgIFB5T2JqZWN0ICpjaHVua3MgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmIChjaHVua3MgPT0gTlVMTCkgewpAQCAtMjQ2LDcgKzQ1NCw3IEBACiAgICAgICAgIFB5X1VOSUNPREUgYyA9IDA7CiAgICAgICAgIFB5T2JqZWN0ICpjaHVuayA9IE5VTEw7CiAgICAgICAgIGZvciAobmV4dCA9IGVuZDsgbmV4dCA8IGxlbjsgbmV4dCsrKSB7Ci0gICAgICAgICAgICBjID0gYnVmW25leHRdOworICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBjaGFyKWJ1ZltuZXh0XTsKICAgICAgICAgICAgIGlmIChjID09ICciJyB8fCBjID09ICdcXCcpIHsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTI2MSw3ICs0NjksNyBAQAogICAgICAgICB9CiAgICAgICAgIC8qIFBpY2sgdXAgdGhpcyBjaHVuayBpZiBpdCdzIG5vdCB6ZXJvIGxlbmd0aCAqLwogICAgICAgICBpZiAobmV4dCAhPSBlbmQpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpzdHJjaHVuayA9IFB5QnVmZmVyX0Zyb21NZW1vcnkoJmJ1ZltlbmRdLCBuZXh0IC0gZW5kKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdHJjaHVuayA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCZidWZbZW5kXSwgbmV4dCAtIGVuZCk7CiAgICAgICAgICAgICBpZiAoc3RyY2h1bmsgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgIH0KQEAgLTMxNSwxOCArNTIzLDE4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBEZWNvZGUgNCBoZXggZGlnaXRzICovCiAgICAgICAgICAgICBmb3IgKDsgbmV4dCA8IGVuZDsgbmV4dCsrKSB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaGwgPSAoZW5kIC0gbmV4dCAtIDEpIDw8IDI7CiAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBkaWdpdCA9IGJ1ZltuZXh0XTsKKyAgICAgICAgICAgICAgICBjIDw8PSA0OwogICAgICAgICAgICAgICAgIHN3aXRjaCAoZGlnaXQpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgogICAgICAgICAgICAgICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChkaWdpdCAtICcwJykgPDwgc2hsOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJzAnKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChkaWdpdCAtICdhJyArIDEwKSA8PCBzaGw7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAnYScgKyAxMCk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0YnOgotICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAnQScgKyAxMCkgPDwgc2hsOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJ0EnICsgMTApOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXHVYWFhYIGVzY2FwZSIsIHB5c3RyLCBlbmQgLSA1KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKQEAgLTMzNCwzOCArNTQyLDQ2IEBACiAgICAgICAgICAgICB9CiAjaWZkZWYgUHlfVU5JQ09ERV9XSURFCiAgICAgICAgICAgICAvKiBTdXJyb2dhdGUgcGFpciAqLwotICAgICAgICAgICAgaWYgKGMgPj0gMHhkODAwICYmIGMgPD0gMHhkYmZmKSB7CisgICAgICAgICAgICBpZiAoKGMgJiAweGZjMDApID09IDB4ZDgwMCkgewogICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgYzIgPSAwOwogICAgICAgICAgICAgICAgIGlmIChlbmQgKyA2ID49IGxlbikgewotICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWFxcdVhYWFggc3Vycm9nYXRlIHBhaXIiLCBweXN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAtIDUpOworICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChidWZbbmV4dCsrXSAhPSAnXFwnIHx8IGJ1ZltuZXh0KytdICE9ICd1JykgewotICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWFxcdVhYWFggc3Vycm9nYXRlIHBhaXIiLCBweXN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAtIDUpOworICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVuZCArPSA2OwogICAgICAgICAgICAgICAgIC8qIERlY29kZSA0IGhleCBkaWdpdHMgKi8KICAgICAgICAgICAgICAgICBmb3IgKDsgbmV4dCA8IGVuZDsgbmV4dCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2hsID0gKGVuZCAtIG5leHQgLSAxKSA8PCAyOwogICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGRpZ2l0ID0gYnVmW25leHRdOworICAgICAgICAgICAgICAgICAgICBjMiA8PD0gNDsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkaWdpdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICcwJykgPDwgc2hsOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnMCcpOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzoKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICdhJyArIDEwKSA8PCBzaGw7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICdhJyArIDEwKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnQScgKyAxMCkgPDwgc2hsOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnQScgKyAxMCk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2NhcGUiLCBweXN0ciwgZW5kIC0gNSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoYzIgJiAweGZjMDApICE9IDB4ZGMwMCkgeworICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGMgPSAweDEwMDAwICsgKCgoYyAtIDB4ZDgwMCkgPDwgMTApIHwgKGMyIC0gMHhkYzAwKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgoYyAmIDB4ZmMwMCkgPT0gMHhkYzAwKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBsb3cgc3Vycm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOworICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIGNodW5rID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKCZjLCAxKTsKQEAgLTM3OSwyNSArNTk1LDM1IEBACiAgICAgICAgIFB5X0RFQ1JFRihjaHVuayk7CiAgICAgfQogCi0gICAgcnZhbCA9IGpvaW5fbGlzdF91bmljb2RlKGNodW5rcyk7CisgICAgcnZhbCA9IGpvaW5fbGlzdF9zdHJpbmcoY2h1bmtzKTsKICAgICBpZiAocnZhbCA9PSBOVUxMKSB7CiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAgICAgUHlfQ0xFQVIoY2h1bmtzKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE5uKSIsIHJ2YWwsIGVuZCk7CisgICAgKm5leHRfZW5kX3B0ciA9IGVuZDsKKyAgICByZXR1cm4gcnZhbDsKIGJhaWw6CisgICAgKm5leHRfZW5kX3B0ciA9IC0xOwogICAgIFB5X1hERUNSRUYoY2h1bmtzKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAogCiBzdGF0aWMgUHlPYmplY3QgKgotc2NhbnN0cmluZ191bmljb2RlKFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBlbmQsIGludCBzdHJpY3QpCitzY2Fuc3RyaW5nX3VuaWNvZGUoUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGVuZCwgaW50IHN0cmljdCwgUHlfc3NpemVfdCAqbmV4dF9lbmRfcHRyKQogeworICAgIC8qIFJlYWQgdGhlIEpTT04gc3RyaW5nIGZyb20gUHlVbmljb2RlIHB5c3RyLgorICAgIGVuZCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgcXVvdGUuCisgICAgaWYgc3RyaWN0IGlzIHplcm8gdGhlbiBsaXRlcmFsIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgYWxsb3dlZAorICAgICpuZXh0X2VuZF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIKKyAgICAgICAgYWZ0ZXIgdGhlIGVuZCBxdW90ZQorCisgICAgUmV0dXJuIHZhbHVlIGlzIGEgbmV3IFB5VW5pY29kZQorICAgICovCiAgICAgUHlPYmplY3QgKnJ2YWw7CiAgICAgUHlfc3NpemVfdCBsZW4gPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpOwogICAgIFB5X3NzaXplX3QgYmVnaW4gPSBlbmQgLSAxOwotICAgIFB5X3NzaXplX3QgbmV4dCA9IGJlZ2luOworICAgIFB5X3NzaXplX3QgbmV4dDsKICAgICBjb25zdCBQeV9VTklDT0RFICpidWYgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShweXN0cik7CiAgICAgUHlPYmplY3QgKmNodW5rcyA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKGNodW5rcyA9PSBOVUxMKSB7CkBAIC00NzYsMTggKzcwMiwxOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogRGVjb2RlIDQgaGV4IGRpZ2l0cyAqLwogICAgICAgICAgICAgZm9yICg7IG5leHQgPCBlbmQ7IG5leHQrKykgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2hsID0gKGVuZCAtIG5leHQgLSAxKSA8PCAyOwogICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgZGlnaXQgPSBidWZbbmV4dF07CisgICAgICAgICAgICAgICAgYyA8PD0gNDsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRpZ2l0KSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAnMCcpIDw8IHNobDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChkaWdpdCAtICcwJyk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAnYScgKyAxMCkgPDwgc2hsOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJ2EnICsgMTApOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgogICAgICAgICAgICAgICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJ0EnICsgMTApIDw8IHNobDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChkaWdpdCAtICdBJyArIDEwKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2NhcGUiLCBweXN0ciwgZW5kIC0gNSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CkBAIC00OTUsMzggKzcyMSw0NiBAQAogICAgICAgICAgICAgfQogI2lmZGVmIFB5X1VOSUNPREVfV0lERQogICAgICAgICAgICAgLyogU3Vycm9nYXRlIHBhaXIgKi8KLSAgICAgICAgICAgIGlmIChjID49IDB4ZDgwMCAmJiBjIDw9IDB4ZGJmZikgeworICAgICAgICAgICAgaWYgKChjICYgMHhmYzAwKSA9PSAweGQ4MDApIHsKICAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGMyID0gMDsKICAgICAgICAgICAgICAgICBpZiAoZW5kICsgNiA+PSBsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFhcXHVYWFhYIHN1cnJvZ2F0ZSBwYWlyIiwgcHlzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoYnVmW25leHQrK10gIT0gJ1xcJyB8fCBidWZbbmV4dCsrXSAhPSAndScpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFhcXHVYWFhYIHN1cnJvZ2F0ZSBwYWlyIiwgcHlzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbmQgKz0gNjsKICAgICAgICAgICAgICAgICAvKiBEZWNvZGUgNCBoZXggZGlnaXRzICovCiAgICAgICAgICAgICAgICAgZm9yICg7IG5leHQgPCBlbmQ7IG5leHQrKykgewotICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNobCA9IChlbmQgLSBuZXh0IC0gMSkgPDwgMjsKICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBkaWdpdCA9IGJ1ZltuZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgYzIgPDw9IDQ7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGlnaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnMCcpIDw8IHNobDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJzAnKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnYScgKyAxMCkgPDwgc2hsOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnYScgKyAxMCk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJ0EnICsgMTApIDw8IHNobDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJ0EnICsgMTApOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIiwgcHlzdHIsIGVuZCAtIDUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKGMyICYgMHhmYzAwKSAhPSAweGRjMDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjID0gMHgxMDAwMCArICgoKGMgLSAweGQ4MDApIDw8IDEwKSB8IChjMiAtIDB4ZGMwMCkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKGMgJiAweGZjMDApID09IDB4ZGMwMCkgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgbG93IHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBjaHVuayA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgmYywgMSk7CkBAIC01NDQsNDkgKzc3OCw2OCBAQAogICAgIGlmIChydmFsID09IE5VTEwpIHsKICAgICAgICAgZ290byBiYWlsOwogICAgIH0KLSAgICBQeV9DTEVBUihjaHVua3MpOwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTm4pIiwgcnZhbCwgZW5kKTsKKyAgICBQeV9ERUNSRUYoY2h1bmtzKTsKKyAgICAqbmV4dF9lbmRfcHRyID0gZW5kOworICAgIHJldHVybiBydmFsOwogYmFpbDoKKyAgICAqbmV4dF9lbmRfcHRyID0gLTE7CiAgICAgUHlfWERFQ1JFRihjaHVua3MpOwogICAgIHJldHVybiBOVUxMOwogfQogCiBQeURvY19TVFJWQVIocHlkb2Nfc2NhbnN0cmluZywKLSJzY2Fuc3RyaW5nKGJhc2VzdHJpbmcsIGVuZCwgZW5jb2RpbmcpIC0+IChzdHIsIGVuZClcbiIpOworICAgICJzY2Fuc3RyaW5nKGJhc2VzdHJpbmcsIGVuZCwgZW5jb2RpbmcsIHN0cmljdD1UcnVlKSAtPiAoc3RyLCBlbmQpXG4iCisgICAgIlxuIgorICAgICJTY2FuIHRoZSBzdHJpbmcgcyBmb3IgYSBKU09OIHN0cmluZy4gRW5kIGlzIHRoZSBpbmRleCBvZiB0aGVcbiIKKyAgICAiY2hhcmFjdGVyIGluIHMgYWZ0ZXIgdGhlIHF1b3RlIHRoYXQgc3RhcnRlZCB0aGUgSlNPTiBzdHJpbmcuXG4iCisgICAgIlVuZXNjYXBlcyBhbGwgdmFsaWQgSlNPTiBzdHJpbmcgZXNjYXBlIHNlcXVlbmNlcyBhbmQgcmFpc2VzIFZhbHVlRXJyb3JcbiIKKyAgICAib24gYXR0ZW1wdCB0byBkZWNvZGUgYW4gaW52YWxpZCBzdHJpbmcuIElmIHN0cmljdCBpcyBGYWxzZSB0aGVuIGxpdGVyYWxcbiIKKyAgICAiY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkIGluIHRoZSBzdHJpbmcuXG4iCisgICAgIlxuIgorICAgICJSZXR1cm5zIGEgdHVwbGUgb2YgdGhlIGRlY29kZWQgc3RyaW5nIGFuZCB0aGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciBpbiBzXG4iCisgICAgImFmdGVyIHRoZSBlbmQgcXVvdGUuIgorKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXB5X3NjYW5zdHJpbmcoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICphcmdzKQorcHlfc2NhbnN0cmluZyhQeU9iamVjdCogc2VsZiBVTlVTRUQsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpweXN0cjsKKyAgICBQeU9iamVjdCAqcnZhbDsKICAgICBQeV9zc2l6ZV90IGVuZDsKKyAgICBQeV9zc2l6ZV90IG5leHRfZW5kID0gLTE7CiAgICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwotICAgIGludCBzdHJpY3QgPSAwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT258emk6c2NhbnN0cmluZyIsICZweXN0ciwgJmVuZCwgJmVuY29kaW5nLCAmc3RyaWN0KSkgeworICAgIGludCBzdHJpY3QgPSAxOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT08mfHppOnNjYW5zdHJpbmciLCAmcHlzdHIsIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmZW5kLCAmZW5jb2RpbmcsICZzdHJpY3QpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkgewogICAgICAgICBlbmNvZGluZyA9IERFRkFVTFRfRU5DT0RJTkc7CiAgICAgfQogICAgIGlmIChQeVN0cmluZ19DaGVjayhweXN0cikpIHsKLSAgICAgICAgcmV0dXJuIHNjYW5zdHJpbmdfc3RyKHB5c3RyLCBlbmQsIGVuY29kaW5nLCBzdHJpY3QpOworICAgICAgICBydmFsID0gc2NhbnN0cmluZ19zdHIocHlzdHIsIGVuZCwgZW5jb2RpbmcsIHN0cmljdCwgJm5leHRfZW5kKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHB5c3RyKSkgewotICAgICAgICByZXR1cm4gc2NhbnN0cmluZ191bmljb2RlKHB5c3RyLCBlbmQsIHN0cmljdCk7CisgICAgICAgIHJ2YWwgPSBzY2Fuc3RyaW5nX3VuaWNvZGUocHlzdHIsIGVuZCwgc3RyaWN0LCAmbmV4dF9lbmQpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgCi0gICAgICAgICAgICAgICAgICAgICAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciB1bmljb2RlLCBub3QgJS44MHMiLAorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIG5vdCAlLjgwcyIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHB5c3RyKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICByZXR1cm4gX2J1aWxkX3J2YWxfaW5kZXhfdHVwbGUocnZhbCwgbmV4dF9lbmQpOwogfQogCiBQeURvY19TVFJWQVIocHlkb2NfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWksCi0iZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoYmFzZXN0cmluZykgLT4gc3RyXG4iKTsKKyAgICAiZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoYmFzZXN0cmluZykgLT4gc3RyXG4iCisgICAgIlxuIgorICAgICJSZXR1cm4gYW4gQVNDSUktb25seSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIHN0cmluZyIKKyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1weV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKnB5c3RyKQorcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoUHlPYmplY3QqIHNlbGYgVU5VU0VELCBQeU9iamVjdCAqcHlzdHIpCiB7CisgICAgLyogUmV0dXJuIGFuIEFTQ0lJLW9ubHkgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBzdHJpbmcgKi8KICAgICAvKiBNRVRIX08gKi8KICAgICBpZiAoUHlTdHJpbmdfQ2hlY2socHlzdHIpKSB7CiAgICAgICAgIHJldHVybiBhc2NpaV9lc2NhcGVfc3RyKHB5c3RyKTsKQEAgLTU5NSwxOCArODQ4LDE1MzggQEAKICAgICAgICAgcmV0dXJuIGFzY2lpX2VzY2FwZV91bmljb2RlKHB5c3RyKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsIAotICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgdW5pY29kZSwgbm90ICUuODBzIiwKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBub3QgJS44MHMiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShweXN0ciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiB9CiAKLXN0YXRpYyBQeU1ldGhvZERlZiBqc29uX21ldGhvZHNbXSA9IHsKLSAgICB7ImVuY29kZV9iYXNlc3RyaW5nX2FzY2lpIiwgKFB5Q0Z1bmN0aW9uKXB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLAotICAgICBNRVRIX08sIHB5ZG9jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpfSwKLSAgICB7InNjYW5zdHJpbmciLCAoUHlDRnVuY3Rpb24pcHlfc2NhbnN0cmluZywgTUVUSF9WQVJBUkdTLAotICAgICBweWRvY19zY2Fuc3RyaW5nfSwKK3N0YXRpYyB2b2lkCitzY2FubmVyX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCit7CisgICAgLyogRGVhbGxvY2F0ZSBzY2FubmVyIG9iamVjdCAqLworICAgIHNjYW5uZXJfY2xlYXIoc2VsZik7CisgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZShzZWxmKTsKK30KKworc3RhdGljIGludAorc2Nhbm5lcl90cmF2ZXJzZShQeU9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUHlTY2FubmVyT2JqZWN0ICpzOworICAgIGFzc2VydChQeVNjYW5uZXJfQ2hlY2soc2VsZikpOworICAgIHMgPSAoUHlTY2FubmVyT2JqZWN0ICopc2VsZjsKKyAgICBQeV9WSVNJVChzLT5lbmNvZGluZyk7CisgICAgUHlfVklTSVQocy0+c3RyaWN0KTsKKyAgICBQeV9WSVNJVChzLT5vYmplY3RfaG9vayk7CisgICAgUHlfVklTSVQocy0+cGFpcnNfaG9vayk7CisgICAgUHlfVklTSVQocy0+cGFyc2VfZmxvYXQpOworICAgIFB5X1ZJU0lUKHMtPnBhcnNlX2ludCk7CisgICAgUHlfVklTSVQocy0+cGFyc2VfY29uc3RhbnQpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzY2FubmVyX2NsZWFyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5U2Nhbm5lck9iamVjdCAqczsKKyAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNlbGYpKTsKKyAgICBzID0gKFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7CisgICAgUHlfQ0xFQVIocy0+ZW5jb2RpbmcpOworICAgIFB5X0NMRUFSKHMtPnN0cmljdCk7CisgICAgUHlfQ0xFQVIocy0+b2JqZWN0X2hvb2spOworICAgIFB5X0NMRUFSKHMtPnBhaXJzX2hvb2spOworICAgIFB5X0NMRUFSKHMtPnBhcnNlX2Zsb2F0KTsKKyAgICBQeV9DTEVBUihzLT5wYXJzZV9pbnQpOworICAgIFB5X0NMRUFSKHMtPnBhcnNlX2NvbnN0YW50KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19wYXJzZV9vYmplY3Rfc3RyKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7CisgICAgLyogUmVhZCBhIEpTT04gb2JqZWN0IGZyb20gUHlTdHJpbmcgcHlzdHIuCisgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBvcGVuaW5nIGN1cmx5IGJyYWNlLgorICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIGNsb3NpbmcgY3VybHkgYnJhY2UuCisKKyAgICBSZXR1cm5zIGEgbmV3IFB5T2JqZWN0ICh1c3VhbGx5IGEgZGljdCwgYnV0IG9iamVjdF9ob29rIGNhbiBjaGFuZ2UgdGhhdCkKKyAgICAqLworICAgIGNoYXIgKnN0ciA9IFB5U3RyaW5nX0FTX1NUUklORyhweXN0cik7CisgICAgUHlfc3NpemVfdCBlbmRfaWR4ID0gUHlTdHJpbmdfR0VUX1NJWkUocHlzdHIpIC0gMTsKKyAgICBQeU9iamVjdCAqcnZhbDsKKyAgICBQeU9iamVjdCAqcGFpcnM7CisgICAgUHlPYmplY3QgKml0ZW07CisgICAgUHlPYmplY3QgKmtleSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnZhbCA9IE5VTEw7CisgICAgY2hhciAqZW5jb2RpbmcgPSBQeVN0cmluZ19BU19TVFJJTkcocy0+ZW5jb2RpbmcpOworICAgIGludCBzdHJpY3QgPSBQeU9iamVjdF9Jc1RydWUocy0+c3RyaWN0KTsKKyAgICBQeV9zc2l6ZV90IG5leHRfaWR4OworCisgICAgcGFpcnMgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChwYWlycyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIHNraXAgd2hpdGVzcGFjZSBhZnRlciB7ICovCisgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKworICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgb2JqZWN0IGlzIG5vbi1lbXB0eSAqLworICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSAhPSAnfScpIHsKKyAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4KSB7CisgICAgICAgICAgICAvKiByZWFkIGtleSAqLworICAgICAgICAgICAgaWYgKHN0cltpZHhdICE9ICciJykgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBweXN0ciwgaWR4KTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZXkgPSBzY2Fuc3RyaW5nX3N0cihweXN0ciwgaWR4ICsgMSwgZW5jb2RpbmcsIHN0cmljdCwgJm5leHRfaWR4KTsKKyAgICAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICBpZHggPSBuZXh0X2lkeDsKKworICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJldHdlZW4ga2V5IGFuZCA6IGRlbGltaXRlciwgcmVhZCA6LCBza2lwIHdoaXRlc3BhY2UgKi8KKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBzdHJbaWR4XSAhPSAnOicpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyA6IGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOworICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKworICAgICAgICAgICAgLyogcmVhZCBhbnkgSlNPTiBkYXRhIHR5cGUgKi8KKyAgICAgICAgICAgIHZhbCA9IHNjYW5fb25jZV9zdHIocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKKyAgICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisKKyAgICAgICAgICAgIGl0ZW0gPSBQeVR1cGxlX1BhY2soMiwga2V5LCB2YWwpOworICAgICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICBQeV9DTEVBUihrZXkpOworICAgICAgICAgICAgUHlfQ0xFQVIodmFsKTsKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHBhaXJzLCBpdGVtKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICBpZHggPSBuZXh0X2lkeDsKKworICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJlZm9yZSB9IG9yICwgKi8KKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisKKyAgICAgICAgICAgIC8qIGJhaWwgaWYgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKKyAgICAgICAgICAgIGlmIChzdHJbaWR4XSA9PSAnfScpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cltpZHhdICE9ICcsJykgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICwgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWR4Kys7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBhZnRlciAsIGRlbGltaXRlciAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQgYmUgJ30nICovCisgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgc3RyW2lkeF0gIT0gJ30nKSB7CisgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIC8qIGlmIHBhaXJzX2hvb2sgaXMgbm90IE5vbmU6IHJ2YWwgPSBvYmplY3RfcGFpcnNfaG9vayhwYWlycykgKi8KKyAgICBpZiAocy0+cGFpcnNfaG9vayAhPSBQeV9Ob25lKSB7CisgICAgICAgIHZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+cGFpcnNfaG9vaywgcGFpcnMsIE5VTEwpOworICAgICAgICBpZiAodmFsID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIFB5X0RFQ1JFRihwYWlycyk7CisgICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOworICAgICAgICByZXR1cm4gdmFsOworICAgIH0KKworICAgIHJ2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKChQeU9iamVjdCAqKSgmUHlEaWN0X1R5cGUpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMsIE5VTEwpOworICAgIGlmIChydmFsID09IE5VTEwpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBQeV9DTEVBUihwYWlycyk7CisKKyAgICAvKiBpZiBvYmplY3RfaG9vayBpcyBub3QgTm9uZTogcnZhbCA9IG9iamVjdF9ob29rKHJ2YWwpICovCisgICAgaWYgKHMtPm9iamVjdF9ob29rICE9IFB5X05vbmUpIHsKKyAgICAgICAgdmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5vYmplY3RfaG9vaywgcnZhbCwgTlVMTCk7CisgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgUHlfREVDUkVGKHJ2YWwpOworICAgICAgICBydmFsID0gdmFsOworICAgICAgICB2YWwgPSBOVUxMOworICAgIH0KKyAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKKyAgICByZXR1cm4gcnZhbDsKK2JhaWw6CisgICAgUHlfWERFQ1JFRihrZXkpOworICAgIFB5X1hERUNSRUYodmFsKTsKKyAgICBQeV9YREVDUkVGKHBhaXJzKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19wYXJzZV9vYmplY3RfdW5pY29kZShQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgeworICAgIC8qIFJlYWQgYSBKU09OIG9iamVjdCBmcm9tIFB5VW5pY29kZSBweXN0ci4KKyAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIG9wZW5pbmcgY3VybHkgYnJhY2UuCisgICAgKm5leHRfaWR4X3B0ciBpcyBhIHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgorICAgICAgICB0aGUgY2xvc2luZyBjdXJseSBicmFjZS4KKworICAgIFJldHVybnMgYSBuZXcgUHlPYmplY3QgKHVzdWFsbHkgYSBkaWN0LCBidXQgb2JqZWN0X2hvb2sgY2FuIGNoYW5nZSB0aGF0KQorICAgICovCisgICAgUHlfVU5JQ09ERSAqc3RyID0gUHlVbmljb2RlX0FTX1VOSUNPREUocHlzdHIpOworICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5VW5pY29kZV9HRVRfU0laRShweXN0cikgLSAxOworICAgIFB5T2JqZWN0ICpydmFsOworICAgIFB5T2JqZWN0ICpwYWlyczsKKyAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBQeU9iamVjdCAqa2V5ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKKyAgICBpbnQgc3RyaWN0ID0gUHlPYmplY3RfSXNUcnVlKHMtPnN0cmljdCk7CisgICAgUHlfc3NpemVfdCBuZXh0X2lkeDsKKworICAgIHBhaXJzID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocGFpcnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgeyAqLworICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisKKyAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIG9iamVjdCBpcyBub24tZW1wdHkgKi8KKyAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gIT0gJ30nKSB7CisgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgICAgICAgICAgLyogcmVhZCBrZXkgKi8KKyAgICAgICAgICAgIGlmIChzdHJbaWR4XSAhPSAnIicpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcHlzdHIsIGlkeCk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAga2V5ID0gc2NhbnN0cmluZ191bmljb2RlKHB5c3RyLCBpZHggKyAxLCBzdHJpY3QsICZuZXh0X2lkeCk7CisgICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgaWR4ID0gbmV4dF9pZHg7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBiZXR3ZWVuIGtleSBhbmQgOiBkZWxpbWl0ZXIsIHJlYWQgOiwgc2tpcCB3aGl0ZXNwYWNlICovCisgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgc3RyW2lkeF0gIT0gJzonKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgOiBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZHgrKzsKKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisKKyAgICAgICAgICAgIC8qIHJlYWQgYW55IEpTT04gdGVybSAqLworICAgICAgICAgICAgdmFsID0gc2Nhbl9vbmNlX3VuaWNvZGUocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKKyAgICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisKKyAgICAgICAgICAgIGl0ZW0gPSBQeVR1cGxlX1BhY2soMiwga2V5LCB2YWwpOworICAgICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICBQeV9DTEVBUihrZXkpOworICAgICAgICAgICAgUHlfQ0xFQVIodmFsKTsKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHBhaXJzLCBpdGVtKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICBpZHggPSBuZXh0X2lkeDsKKworICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJlZm9yZSB9IG9yICwgKi8KKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisKKyAgICAgICAgICAgIC8qIGJhaWwgaWYgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKKyAgICAgICAgICAgIGlmIChzdHJbaWR4XSA9PSAnfScpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cltpZHhdICE9ICcsJykgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICwgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWR4Kys7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBhZnRlciAsIGRlbGltaXRlciAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHZlcmlmeSB0aGF0IGlkeCA8IGVuZF9pZHgsIHN0cltpZHhdIHNob3VsZCBiZSAnfScgKi8KKyAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBzdHJbaWR4XSAhPSAnfScpIHsKKyAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgLyogaWYgcGFpcnNfaG9vayBpcyBub3QgTm9uZTogcnZhbCA9IG9iamVjdF9wYWlyc19ob29rKHBhaXJzKSAqLworICAgIGlmIChzLT5wYWlyc19ob29rICE9IFB5X05vbmUpIHsKKyAgICAgICAgdmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5wYWlyc19ob29rLCBwYWlycywgTlVMTCk7CisgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgUHlfREVDUkVGKHBhaXJzKTsKKyAgICAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7CisgICAgICAgIHJldHVybiB2YWw7CisgICAgfQorCisgICAgcnZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoKFB5T2JqZWN0ICopKCZQeURpY3RfVHlwZSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlycywgTlVMTCk7CisgICAgaWYgKHJ2YWwgPT0gTlVMTCkKKyAgICAgICAgZ290byBiYWlsOworICAgIFB5X0NMRUFSKHBhaXJzKTsKKworICAgIC8qIGlmIG9iamVjdF9ob29rIGlzIG5vdCBOb25lOiBydmFsID0gb2JqZWN0X2hvb2socnZhbCkgKi8KKyAgICBpZiAocy0+b2JqZWN0X2hvb2sgIT0gUHlfTm9uZSkgeworICAgICAgICB2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPm9iamVjdF9ob29rLCBydmFsLCBOVUxMKTsKKyAgICAgICAgaWYgKHZhbCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICBQeV9ERUNSRUYocnZhbCk7CisgICAgICAgIHJ2YWwgPSB2YWw7CisgICAgICAgIHZhbCA9IE5VTEw7CisgICAgfQorICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOworICAgIHJldHVybiBydmFsOworYmFpbDoKKyAgICBQeV9YREVDUkVGKGtleSk7CisgICAgUHlfWERFQ1JFRih2YWwpOworICAgIFB5X1hERUNSRUYocGFpcnMpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BhcnNlX2FycmF5X3N0cihQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgeworICAgIC8qIFJlYWQgYSBKU09OIGFycmF5IGZyb20gUHlTdHJpbmcgcHlzdHIuCisgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBvcGVuaW5nIGJyYWNlLgorICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIGNsb3NpbmcgYnJhY2UuCisKKyAgICBSZXR1cm5zIGEgbmV3IFB5TGlzdAorICAgICovCisgICAgY2hhciAqc3RyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHB5c3RyKTsKKyAgICBQeV9zc2l6ZV90IGVuZF9pZHggPSBQeVN0cmluZ19HRVRfU0laRShweXN0cikgLSAxOworICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOworICAgIFB5T2JqZWN0ICpydmFsID0gUHlMaXN0X05ldygwKTsKKyAgICBQeV9zc2l6ZV90IG5leHRfaWR4OworICAgIGlmIChydmFsID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGFmdGVyIFsgKi8KKyAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworCisgICAgLyogb25seSBsb29wIGlmIHRoZSBhcnJheSBpcyBub24tZW1wdHkgKi8KKyAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gIT0gJ10nKSB7CisgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworCisgICAgICAgICAgICAvKiByZWFkIGFueSBKU09OIHRlcm0gYW5kIGRlLXR1cGxlZnkgdGhlIChydmFsLCBpZHgpICovCisgICAgICAgICAgICB2YWwgPSBzY2FuX29uY2Vfc3RyKHMsIHB5c3RyLCBpZHgsICZuZXh0X2lkeCk7CisgICAgICAgICAgICBpZiAodmFsID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworCisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCB2YWwpID09IC0xKQorICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKworICAgICAgICAgICAgUHlfQ0xFQVIodmFsKTsKKyAgICAgICAgICAgIGlkeCA9IG5leHRfaWR4OworCisgICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYmV0d2VlbiB0ZXJtIGFuZCAsICovCisgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworCisgICAgICAgICAgICAvKiBiYWlsIGlmIHRoZSBhcnJheSBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKKyAgICAgICAgICAgIGlmIChzdHJbaWR4XSA9PSAnXScpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cltpZHhdICE9ICcsJykgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICwgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWR4Kys7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBhZnRlciAsICovCisgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogdmVyaWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwgc3RyW2lkeF0gc2hvdWxkIGJlICddJyAqLworICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IHN0cltpZHhdICE9ICddJykgeworICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBweXN0ciwgZW5kX2lkeCk7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7CisgICAgcmV0dXJuIHJ2YWw7CitiYWlsOgorICAgIFB5X1hERUNSRUYodmFsKTsKKyAgICBQeV9ERUNSRUYocnZhbCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGFyc2VfYXJyYXlfdW5pY29kZShQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgeworICAgIC8qIFJlYWQgYSBKU09OIGFycmF5IGZyb20gUHlTdHJpbmcgcHlzdHIuCisgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBvcGVuaW5nIGJyYWNlLgorICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIGNsb3NpbmcgYnJhY2UuCisKKyAgICBSZXR1cm5zIGEgbmV3IFB5TGlzdAorICAgICovCisgICAgUHlfVU5JQ09ERSAqc3RyID0gUHlVbmljb2RlX0FTX1VOSUNPREUocHlzdHIpOworICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5VW5pY29kZV9HRVRfU0laRShweXN0cikgLSAxOworICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOworICAgIFB5T2JqZWN0ICpydmFsID0gUHlMaXN0X05ldygwKTsKKyAgICBQeV9zc2l6ZV90IG5leHRfaWR4OworICAgIGlmIChydmFsID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGFmdGVyIFsgKi8KKyAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworCisgICAgLyogb25seSBsb29wIGlmIHRoZSBhcnJheSBpcyBub24tZW1wdHkgKi8KKyAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gIT0gJ10nKSB7CisgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworCisgICAgICAgICAgICAvKiByZWFkIGFueSBKU09OIHRlcm0gICovCisgICAgICAgICAgICB2YWwgPSBzY2FuX29uY2VfdW5pY29kZShzLCBweXN0ciwgaWR4LCAmbmV4dF9pZHgpOworICAgICAgICAgICAgaWYgKHZhbCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKworICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgdmFsKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisKKyAgICAgICAgICAgIFB5X0NMRUFSKHZhbCk7CisgICAgICAgICAgICBpZHggPSBuZXh0X2lkeDsKKworICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJldHdlZW4gdGVybSBhbmQgLCAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKworICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgYXJyYXkgaXMgY2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RyW2lkeF0gPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJbaWR4XSAhPSAnLCcpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOworICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlkeCsrOworCisgICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgLCAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHZlcmlmeSB0aGF0IGlkeCA8IGVuZF9pZHgsIHN0cltpZHhdIHNob3VsZCBiZSAnXScgKi8KKyAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBzdHJbaWR4XSAhPSAnXScpIHsKKyAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOworICAgIHJldHVybiBydmFsOworYmFpbDoKKyAgICBQeV9YREVDUkVGKHZhbCk7CisgICAgUHlfREVDUkVGKHJ2YWwpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BhcnNlX2NvbnN0YW50KFB5U2Nhbm5lck9iamVjdCAqcywgY2hhciAqY29uc3RhbnQsIFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpIHsKKyAgICAvKiBSZWFkIGEgSlNPTiBjb25zdGFudCBmcm9tIFB5U3RyaW5nIHB5c3RyLgorICAgIGNvbnN0YW50IGlzIHRoZSBjb25zdGFudCBzdHJpbmcgdGhhdCB3YXMgZm91bmQKKyAgICAgICAgKCJOYU4iLCAiSW5maW5pdHkiLCAiLUluZmluaXR5IikuCisgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBjb25zdGFudAorICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIGNvbnN0YW50LgorCisgICAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIHBhcnNlX2NvbnN0YW50CisgICAgKi8KKyAgICBQeU9iamVjdCAqY3N0cjsKKyAgICBQeU9iamVjdCAqcnZhbDsKKyAgICAvKiBjb25zdGFudCBpcyAiTmFOIiwgIkluZmluaXR5Iiwgb3IgIi1JbmZpbml0eSIgKi8KKyAgICBjc3RyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZyhjb25zdGFudCk7CisgICAgaWYgKGNzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBydmFsID0gcGFyc2VfY29uc3RhbnQoY29uc3RhbnQpICovCisgICAgcnZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+cGFyc2VfY29uc3RhbnQsIGNzdHIsIE5VTEwpOworICAgIGlkeCArPSBQeVN0cmluZ19HRVRfU0laRShjc3RyKTsKKyAgICBQeV9ERUNSRUYoY3N0cik7CisgICAgKm5leHRfaWR4X3B0ciA9IGlkeDsKKyAgICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19tYXRjaF9udW1iZXJfc3RyKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpIHsKKyAgICAvKiBSZWFkIGEgSlNPTiBudW1iZXIgZnJvbSBQeVN0cmluZyBweXN0ci4KKyAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIG51bWJlcgorICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIG51bWJlci4KKworICAgIFJldHVybnMgYSBuZXcgUHlPYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhhdCBudW1iZXI6CisgICAgICAgIFB5SW50LCBQeUxvbmcsIG9yIFB5RmxvYXQuCisgICAgICAgIE1heSByZXR1cm4gb3RoZXIgdHlwZXMgaWYgcGFyc2VfaW50IG9yIHBhcnNlX2Zsb2F0IGFyZSBzZXQKKyAgICAqLworICAgIGNoYXIgKnN0ciA9IFB5U3RyaW5nX0FTX1NUUklORyhweXN0cik7CisgICAgUHlfc3NpemVfdCBlbmRfaWR4ID0gUHlTdHJpbmdfR0VUX1NJWkUocHlzdHIpIC0gMTsKKyAgICBQeV9zc2l6ZV90IGlkeCA9IHN0YXJ0OworICAgIGludCBpc19mbG9hdCA9IDA7CisgICAgUHlPYmplY3QgKnJ2YWw7CisgICAgUHlPYmplY3QgKm51bXN0cjsKKworICAgIC8qIHJlYWQgYSBzaWduIGlmIGl0J3MgdGhlcmUsIG1ha2Ugc3VyZSBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KKyAgICBpZiAoc3RyW2lkeF0gPT0gJy0nKSB7CisgICAgICAgIGlkeCsrOworICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgeworICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgLyogcmVhZCBhcyBtYW55IGludGVnZXIgZGlnaXRzIGFzIHdlIGZpbmQgYXMgbG9uZyBhcyBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggMCAqLworICAgIGlmIChzdHJbaWR4XSA+PSAnMScgJiYgc3RyW2lkeF0gPD0gJzknKSB7CisgICAgICAgIGlkeCsrOworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gPj0gJzAnICYmIHN0cltpZHhdIDw9ICc5JykgaWR4Kys7CisgICAgfQorICAgIC8qIGlmIGl0IHN0YXJ0cyB3aXRoIDAgd2Ugb25seSBleHBlY3Qgb25lIGludGVnZXIgZGlnaXQgKi8KKyAgICBlbHNlIGlmIChzdHJbaWR4XSA9PSAnMCcpIHsKKyAgICAgICAgaWR4Kys7CisgICAgfQorICAgIC8qIG5vIGludGVnZXIgZGlnaXRzLCBlcnJvciAqLworICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBpZiB0aGUgbmV4dCBjaGFyIGlzICcuJyBmb2xsb3dlZCBieSBhIGRpZ2l0IHRoZW4gcmVhZCBhbGwgZmxvYXQgZGlnaXRzICovCisgICAgaWYgKGlkeCA8IGVuZF9pZHggJiYgc3RyW2lkeF0gPT0gJy4nICYmIHN0cltpZHggKyAxXSA+PSAnMCcgJiYgc3RyW2lkeCArIDFdIDw9ICc5JykgeworICAgICAgICBpc19mbG9hdCA9IDE7CisgICAgICAgIGlkeCArPSAyOworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gPj0gJzAnICYmIHN0cltpZHhdIDw9ICc5JykgaWR4Kys7CisgICAgfQorCisgICAgLyogaWYgdGhlIG5leHQgY2hhciBpcyAnZScgb3IgJ0UnIHRoZW4gbWF5YmUgcmVhZCB0aGUgZXhwb25lbnQgKG9yIGJhY2t0cmFjaykgKi8KKyAgICBpZiAoaWR4IDwgZW5kX2lkeCAmJiAoc3RyW2lkeF0gPT0gJ2UnIHx8IHN0cltpZHhdID09ICdFJykpIHsKKworICAgICAgICAvKiBzYXZlIHRoZSBpbmRleCBvZiB0aGUgJ2UnIG9yICdFJyBqdXN0IGluIGNhc2Ugd2UgbmVlZCB0byBiYWNrdHJhY2sgKi8KKyAgICAgICAgUHlfc3NpemVfdCBlX3N0YXJ0ID0gaWR4OworICAgICAgICBpZHgrKzsKKworICAgICAgICAvKiByZWFkIGFuIGV4cG9uZW50IHNpZ24gaWYgcHJlc2VudCAqLworICAgICAgICBpZiAoaWR4IDwgZW5kX2lkeCAmJiAoc3RyW2lkeF0gPT0gJy0nIHx8IHN0cltpZHhdID09ICcrJykpIGlkeCsrOworCisgICAgICAgIC8qIHJlYWQgYWxsIGRpZ2l0cyAqLworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gPj0gJzAnICYmIHN0cltpZHhdIDw9ICc5JykgaWR4Kys7CisKKyAgICAgICAgLyogaWYgd2UgZ290IGEgZGlnaXQsIHRoZW4gcGFyc2UgYXMgZmxvYXQuIGlmIG5vdCwgYmFja3RyYWNrICovCisgICAgICAgIGlmIChzdHJbaWR4IC0gMV0gPj0gJzAnICYmIHN0cltpZHggLSAxXSA8PSAnOScpIHsKKyAgICAgICAgICAgIGlzX2Zsb2F0ID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlkeCA9IGVfc3RhcnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBjb3B5IHRoZSBzZWN0aW9uIHdlIGRldGVybWluZWQgdG8gYmUgYSBudW1iZXIgKi8KKyAgICBudW1zdHIgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgmc3RyW3N0YXJ0XSwgaWR4IC0gc3RhcnQpOworICAgIGlmIChudW1zdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGlzX2Zsb2F0KSB7CisgICAgICAgIC8qIHBhcnNlIGFzIGEgZmxvYXQgdXNpbmcgYSBmYXN0IHBhdGggaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgY2FsbCB1c2VyIGRlZmluZWQgbWV0aG9kICovCisgICAgICAgIGlmIChzLT5wYXJzZV9mbG9hdCAhPSAoUHlPYmplY3QgKikmUHlGbG9hdF9UeXBlKSB7CisgICAgICAgICAgICBydmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5wYXJzZV9mbG9hdCwgbnVtc3RyLCBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvdWJsZSBkID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKFB5U3RyaW5nX0FTX1NUUklORyhudW1zdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICBpZiAoZCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBydmFsID0gUHlGbG9hdF9Gcm9tRG91YmxlKGQpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBwYXJzZSBhcyBhbiBpbnQgdXNpbmcgYSBmYXN0IHBhdGggaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgY2FsbCB1c2VyIGRlZmluZWQgbWV0aG9kICovCisgICAgICAgIGlmIChzLT5wYXJzZV9pbnQgIT0gKFB5T2JqZWN0ICopJlB5SW50X1R5cGUpIHsKKyAgICAgICAgICAgIHJ2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPnBhcnNlX2ludCwgbnVtc3RyLCBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJ2YWwgPSBQeUludF9Gcm9tU3RyaW5nKFB5U3RyaW5nX0FTX1NUUklORyhudW1zdHIpLCBOVUxMLCAxMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgUHlfREVDUkVGKG51bXN0cik7CisgICAgKm5leHRfaWR4X3B0ciA9IGlkeDsKKyAgICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19tYXRjaF9udW1iZXJfdW5pY29kZShQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7CisgICAgLyogUmVhZCBhIEpTT04gbnVtYmVyIGZyb20gUHlVbmljb2RlIHB5c3RyLgorICAgIGlkeCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbnVtYmVyCisgICAgKm5leHRfaWR4X3B0ciBpcyBhIHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgorICAgICAgICB0aGUgbnVtYmVyLgorCisgICAgUmV0dXJucyBhIG5ldyBQeU9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGF0IG51bWJlcjoKKyAgICAgICAgUHlJbnQsIFB5TG9uZywgb3IgUHlGbG9hdC4KKyAgICAgICAgTWF5IHJldHVybiBvdGhlciB0eXBlcyBpZiBwYXJzZV9pbnQgb3IgcGFyc2VfZmxvYXQgYXJlIHNldAorICAgICovCisgICAgUHlfVU5JQ09ERSAqc3RyID0gUHlVbmljb2RlX0FTX1VOSUNPREUocHlzdHIpOworICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5VW5pY29kZV9HRVRfU0laRShweXN0cikgLSAxOworICAgIFB5X3NzaXplX3QgaWR4ID0gc3RhcnQ7CisgICAgaW50IGlzX2Zsb2F0ID0gMDsKKyAgICBQeU9iamVjdCAqcnZhbDsKKyAgICBQeU9iamVjdCAqbnVtc3RyOworCisgICAgLyogcmVhZCBhIHNpZ24gaWYgaXQncyB0aGVyZSwgbWFrZSBzdXJlIGl0J3Mgbm90IHRoZSBlbmQgb2YgdGhlIHN0cmluZyAqLworICAgIGlmIChzdHJbaWR4XSA9PSAnLScpIHsKKyAgICAgICAgaWR4Kys7CisgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSB7CisgICAgICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiByZWFkIGFzIG1hbnkgaW50ZWdlciBkaWdpdHMgYXMgd2UgZmluZCBhcyBsb25nIGFzIGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCAwICovCisgICAgaWYgKHN0cltpZHhdID49ICcxJyAmJiBzdHJbaWR4XSA8PSAnOScpIHsKKyAgICAgICAgaWR4Kys7CisgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSA+PSAnMCcgJiYgc3RyW2lkeF0gPD0gJzknKSBpZHgrKzsKKyAgICB9CisgICAgLyogaWYgaXQgc3RhcnRzIHdpdGggMCB3ZSBvbmx5IGV4cGVjdCBvbmUgaW50ZWdlciBkaWdpdCAqLworICAgIGVsc2UgaWYgKHN0cltpZHhdID09ICcwJykgeworICAgICAgICBpZHgrKzsKKyAgICB9CisgICAgLyogbm8gaW50ZWdlciBkaWdpdHMsIGVycm9yICovCisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIGlmIHRoZSBuZXh0IGNoYXIgaXMgJy4nIGZvbGxvd2VkIGJ5IGEgZGlnaXQgdGhlbiByZWFkIGFsbCBmbG9hdCBkaWdpdHMgKi8KKyAgICBpZiAoaWR4IDwgZW5kX2lkeCAmJiBzdHJbaWR4XSA9PSAnLicgJiYgc3RyW2lkeCArIDFdID49ICcwJyAmJiBzdHJbaWR4ICsgMV0gPD0gJzknKSB7CisgICAgICAgIGlzX2Zsb2F0ID0gMTsKKyAgICAgICAgaWR4ICs9IDI7CisgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSA+PSAnMCcgJiYgc3RyW2lkeF0gPD0gJzknKSBpZHgrKzsKKyAgICB9CisKKyAgICAvKiBpZiB0aGUgbmV4dCBjaGFyIGlzICdlJyBvciAnRScgdGhlbiBtYXliZSByZWFkIHRoZSBleHBvbmVudCAob3IgYmFja3RyYWNrKSAqLworICAgIGlmIChpZHggPCBlbmRfaWR4ICYmIChzdHJbaWR4XSA9PSAnZScgfHwgc3RyW2lkeF0gPT0gJ0UnKSkgeworICAgICAgICBQeV9zc2l6ZV90IGVfc3RhcnQgPSBpZHg7CisgICAgICAgIGlkeCsrOworCisgICAgICAgIC8qIHJlYWQgYW4gZXhwb25lbnQgc2lnbiBpZiBwcmVzZW50ICovCisgICAgICAgIGlmIChpZHggPCBlbmRfaWR4ICYmIChzdHJbaWR4XSA9PSAnLScgfHwgc3RyW2lkeF0gPT0gJysnKSkgaWR4Kys7CisKKyAgICAgICAgLyogcmVhZCBhbGwgZGlnaXRzICovCisgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSA+PSAnMCcgJiYgc3RyW2lkeF0gPD0gJzknKSBpZHgrKzsKKworICAgICAgICAvKiBpZiB3ZSBnb3QgYSBkaWdpdCwgdGhlbiBwYXJzZSBhcyBmbG9hdC4gaWYgbm90LCBiYWNrdHJhY2sgKi8KKyAgICAgICAgaWYgKHN0cltpZHggLSAxXSA+PSAnMCcgJiYgc3RyW2lkeCAtIDFdIDw9ICc5JykgeworICAgICAgICAgICAgaXNfZmxvYXQgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWR4ID0gZV9zdGFydDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGNvcHkgdGhlIHNlY3Rpb24gd2UgZGV0ZXJtaW5lZCB0byBiZSBhIG51bWJlciAqLworICAgIG51bXN0ciA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgmc3RyW3N0YXJ0XSwgaWR4IC0gc3RhcnQpOworICAgIGlmIChudW1zdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGlzX2Zsb2F0KSB7CisgICAgICAgIC8qIHBhcnNlIGFzIGEgZmxvYXQgdXNpbmcgYSBmYXN0IHBhdGggaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgY2FsbCB1c2VyIGRlZmluZWQgbWV0aG9kICovCisgICAgICAgIGlmIChzLT5wYXJzZV9mbG9hdCAhPSAoUHlPYmplY3QgKikmUHlGbG9hdF9UeXBlKSB7CisgICAgICAgICAgICBydmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5wYXJzZV9mbG9hdCwgbnVtc3RyLCBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJ2YWwgPSBQeUZsb2F0X0Zyb21TdHJpbmcobnVtc3RyLCBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogbm8gZmFzdCBwYXRoIGZvciB1bmljb2RlIC0+IGludCwganVzdCBjYWxsICovCisgICAgICAgIHJ2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPnBhcnNlX2ludCwgbnVtc3RyLCBOVUxMKTsKKyAgICB9CisgICAgUHlfREVDUkVGKG51bXN0cik7CisgICAgKm5leHRfaWR4X3B0ciA9IGlkeDsKKyAgICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3NjYW5fb25jZV9zdHIoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpCit7CisgICAgLyogUmVhZCBvbmUgSlNPTiB0ZXJtIChvZiBhbnkga2luZCkgZnJvbSBQeVN0cmluZyBweXN0ci4KKyAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHRlcm0KKyAgICAqbmV4dF9pZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBudW1iZXIuCisKKyAgICBSZXR1cm5zIGEgbmV3IFB5T2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXJtLgorICAgICovCisgICAgY2hhciAqc3RyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHB5c3RyKTsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aCA9IFB5U3RyaW5nX0dFVF9TSVpFKHB5c3RyKTsKKyAgICBpZiAoaWR4ID49IGxlbmd0aCkgeworICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3dpdGNoIChzdHJbaWR4XSkgeworICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgIC8qIHN0cmluZyAqLworICAgICAgICAgICAgcmV0dXJuIHNjYW5zdHJpbmdfc3RyKHB5c3RyLCBpZHggKyAxLAorICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhzLT5lbmNvZGluZyksCisgICAgICAgICAgICAgICAgUHlPYmplY3RfSXNUcnVlKHMtPnN0cmljdCksCisgICAgICAgICAgICAgICAgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICAvKiBvYmplY3QgKi8KKyAgICAgICAgICAgIHJldHVybiBfcGFyc2Vfb2JqZWN0X3N0cihzLCBweXN0ciwgaWR4ICsgMSwgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICAvKiBhcnJheSAqLworICAgICAgICAgICAgcmV0dXJuIF9wYXJzZV9hcnJheV9zdHIocywgcHlzdHIsIGlkeCArIDEsIG5leHRfaWR4X3B0cik7CisgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgLyogbnVsbCAqLworICAgICAgICAgICAgaWYgKChpZHggKyAzIDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ3UnICYmIHN0cltpZHggKyAyXSA9PSAnbCcgJiYgc3RyW2lkeCArIDNdID09ICdsJykgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgNDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIC8qIHRydWUgKi8KKyAgICAgICAgICAgIGlmICgoaWR4ICsgMyA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdyJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ3UnICYmIHN0cltpZHggKyAzXSA9PSAnZScpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7CisgICAgICAgICAgICAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFB5X1RydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAvKiBmYWxzZSAqLworICAgICAgICAgICAgaWYgKChpZHggKyA0IDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ2EnICYmIHN0cltpZHggKyAyXSA9PSAnbCcgJiYgc3RyW2lkeCArIDNdID09ICdzJyAmJiBzdHJbaWR4ICsgNF0gPT0gJ2UnKSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X0ZhbHNlKTsKKyAgICAgICAgICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgNTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlfRmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTic6CisgICAgICAgICAgICAvKiBOYU4gKi8KKyAgICAgICAgICAgIGlmICgoaWR4ICsgMiA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdhJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ04nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9wYXJzZV9jb25zdGFudChzLCAiTmFOIiwgaWR4LCBuZXh0X2lkeF9wdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0knOgorICAgICAgICAgICAgLyogSW5maW5pdHkgKi8KKyAgICAgICAgICAgIGlmICgoaWR4ICsgNyA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICduJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ2YnICYmIHN0cltpZHggKyAzXSA9PSAnaScgJiYgc3RyW2lkeCArIDRdID09ICduJyAmJiBzdHJbaWR4ICsgNV0gPT0gJ2knICYmIHN0cltpZHggKyA2XSA9PSAndCcgJiYgc3RyW2lkeCArIDddID09ICd5JykgeworICAgICAgICAgICAgICAgIHJldHVybiBfcGFyc2VfY29uc3RhbnQocywgIkluZmluaXR5IiwgaWR4LCBuZXh0X2lkeF9wdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgLyogLUluZmluaXR5ICovCisgICAgICAgICAgICBpZiAoKGlkeCArIDggPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAnSScgJiYgc3RyW2lkeCArIDJdID09ICduJyAmJiBzdHJbaWR4ICsgM10gPT0gJ2YnICYmIHN0cltpZHggKyA0XSA9PSAnaScgJiYgc3RyW2lkeCArIDVdID09ICduJyAmJiBzdHJbaWR4ICsgNl0gPT0gJ2knICYmIHN0cltpZHggKyA3XSA9PSAndCcgJiYgc3RyW2lkeCArIDhdID09ICd5JykgeworICAgICAgICAgICAgICAgIHJldHVybiBfcGFyc2VfY29uc3RhbnQocywgIi1JbmZpbml0eSIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBEaWRuJ3QgZmluZCBhIHN0cmluZywgb2JqZWN0LCBhcnJheSwgb3IgbmFtZWQgY29uc3RhbnQuIExvb2sgZm9yIGEgbnVtYmVyLiAqLworICAgIHJldHVybiBfbWF0Y2hfbnVtYmVyX3N0cihzLCBweXN0ciwgaWR4LCBuZXh0X2lkeF9wdHIpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc2Nhbl9vbmNlX3VuaWNvZGUoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpCit7CisgICAgLyogUmVhZCBvbmUgSlNPTiB0ZXJtIChvZiBhbnkga2luZCkgZnJvbSBQeVVuaWNvZGUgcHlzdHIuCisgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSB0ZXJtCisgICAgKm5leHRfaWR4X3B0ciBpcyBhIHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgorICAgICAgICB0aGUgbnVtYmVyLgorCisgICAgUmV0dXJucyBhIG5ldyBQeU9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGVybS4KKyAgICAqLworICAgIFB5X1VOSUNPREUgKnN0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKHB5c3RyKTsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aCA9IFB5VW5pY29kZV9HRVRfU0laRShweXN0cik7CisgICAgaWYgKGlkeCA+PSBsZW5ndGgpIHsKKyAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN3aXRjaCAoc3RyW2lkeF0pIHsKKyAgICAgICAgY2FzZSAnIic6CisgICAgICAgICAgICAvKiBzdHJpbmcgKi8KKyAgICAgICAgICAgIHJldHVybiBzY2Fuc3RyaW5nX3VuaWNvZGUocHlzdHIsIGlkeCArIDEsCisgICAgICAgICAgICAgICAgUHlPYmplY3RfSXNUcnVlKHMtPnN0cmljdCksCisgICAgICAgICAgICAgICAgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICAvKiBvYmplY3QgKi8KKyAgICAgICAgICAgIHJldHVybiBfcGFyc2Vfb2JqZWN0X3VuaWNvZGUocywgcHlzdHIsIGlkeCArIDEsIG5leHRfaWR4X3B0cik7CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgLyogYXJyYXkgKi8KKyAgICAgICAgICAgIHJldHVybiBfcGFyc2VfYXJyYXlfdW5pY29kZShzLCBweXN0ciwgaWR4ICsgMSwgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAvKiBudWxsICovCisgICAgICAgICAgICBpZiAoKGlkeCArIDMgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAndScgJiYgc3RyW2lkeCArIDJdID09ICdsJyAmJiBzdHJbaWR4ICsgM10gPT0gJ2wnKSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICAgICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyA0OworICAgICAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgLyogdHJ1ZSAqLworICAgICAgICAgICAgaWYgKChpZHggKyAzIDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ3InICYmIHN0cltpZHggKyAyXSA9PSAndScgJiYgc3RyW2lkeCArIDNdID09ICdlJykgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKKyAgICAgICAgICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgNDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlfVHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgIC8qIGZhbHNlICovCisgICAgICAgICAgICBpZiAoKGlkeCArIDQgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAnYScgJiYgc3RyW2lkeCArIDJdID09ICdsJyAmJiBzdHJbaWR4ICsgM10gPT0gJ3MnICYmIHN0cltpZHggKyA0XSA9PSAnZScpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOworICAgICAgICAgICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyA1OworICAgICAgICAgICAgICAgIHJldHVybiBQeV9GYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdOJzoKKyAgICAgICAgICAgIC8qIE5hTiAqLworICAgICAgICAgICAgaWYgKChpZHggKyAyIDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ2EnICYmIHN0cltpZHggKyAyXSA9PSAnTicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3BhcnNlX2NvbnN0YW50KHMsICJOYU4iLCBpZHgsIG5leHRfaWR4X3B0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnSSc6CisgICAgICAgICAgICAvKiBJbmZpbml0eSAqLworICAgICAgICAgICAgaWYgKChpZHggKyA3IDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ24nICYmIHN0cltpZHggKyAyXSA9PSAnZicgJiYgc3RyW2lkeCArIDNdID09ICdpJyAmJiBzdHJbaWR4ICsgNF0gPT0gJ24nICYmIHN0cltpZHggKyA1XSA9PSAnaScgJiYgc3RyW2lkeCArIDZdID09ICd0JyAmJiBzdHJbaWR4ICsgN10gPT0gJ3knKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9wYXJzZV9jb25zdGFudChzLCAiSW5maW5pdHkiLCBpZHgsIG5leHRfaWR4X3B0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICAvKiAtSW5maW5pdHkgKi8KKyAgICAgICAgICAgIGlmICgoaWR4ICsgOCA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdJJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ24nICYmIHN0cltpZHggKyAzXSA9PSAnZicgJiYgc3RyW2lkeCArIDRdID09ICdpJyAmJiBzdHJbaWR4ICsgNV0gPT0gJ24nICYmIHN0cltpZHggKyA2XSA9PSAnaScgJiYgc3RyW2lkeCArIDddID09ICd0JyAmJiBzdHJbaWR4ICsgOF0gPT0gJ3knKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9wYXJzZV9jb25zdGFudChzLCAiLUluZmluaXR5IiwgaWR4LCBuZXh0X2lkeF9wdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIERpZG4ndCBmaW5kIGEgc3RyaW5nLCBvYmplY3QsIGFycmF5LCBvciBuYW1lZCBjb25zdGFudC4gTG9vayBmb3IgYSBudW1iZXIuICovCisgICAgcmV0dXJuIF9tYXRjaF9udW1iZXJfdW5pY29kZShzLCBweXN0ciwgaWR4LCBuZXh0X2lkeF9wdHIpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc2Nhbm5lcl9jYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgLyogUHl0aG9uIGNhbGxhYmxlIGludGVyZmFjZSB0byBzY2FuX29uY2Vfe3N0cix1bmljb2RlfSAqLworICAgIFB5T2JqZWN0ICpweXN0cjsKKyAgICBQeU9iamVjdCAqcnZhbDsKKyAgICBQeV9zc2l6ZV90IGlkeDsKKyAgICBQeV9zc2l6ZV90IG5leHRfaWR4ID0gLTE7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzdHJpbmciLCAiaWR4IiwgTlVMTH07CisgICAgUHlTY2FubmVyT2JqZWN0ICpzOworICAgIGFzc2VydChQeVNjYW5uZXJfQ2hlY2soc2VsZikpOworICAgIHMgPSAoUHlTY2FubmVyT2JqZWN0ICopc2VsZjsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mOnNjYW5fb25jZSIsIGt3bGlzdCwgJnB5c3RyLCBfY29udmVydFB5SW50X0FzU3NpemVfdCwgJmlkeCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5U3RyaW5nX0NoZWNrKHB5c3RyKSkgeworICAgICAgICBydmFsID0gc2Nhbl9vbmNlX3N0cihzLCBweXN0ciwgaWR4LCAmbmV4dF9pZHgpOworICAgIH0KKyAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2socHlzdHIpKSB7CisgICAgICAgIHJ2YWwgPSBzY2FuX29uY2VfdW5pY29kZShzLCBweXN0ciwgaWR4LCAmbmV4dF9pZHgpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIG5vdCAlLjgwcyIsCisgICAgICAgICAgICAgICAgIFB5X1RZUEUocHlzdHIpLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBfYnVpbGRfcnZhbF9pbmRleF90dXBsZShydmFsLCBuZXh0X2lkeCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzY2FubmVyX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBQeVNjYW5uZXJPYmplY3QgKnM7CisgICAgcyA9IChQeVNjYW5uZXJPYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAocyAhPSBOVUxMKSB7CisgICAgICAgIHMtPmVuY29kaW5nID0gTlVMTDsKKyAgICAgICAgcy0+c3RyaWN0ID0gTlVMTDsKKyAgICAgICAgcy0+b2JqZWN0X2hvb2sgPSBOVUxMOworICAgICAgICBzLT5wYWlyc19ob29rID0gTlVMTDsKKyAgICAgICAgcy0+cGFyc2VfZmxvYXQgPSBOVUxMOworICAgICAgICBzLT5wYXJzZV9pbnQgPSBOVUxMOworICAgICAgICBzLT5wYXJzZV9jb25zdGFudCA9IE5VTEw7CisgICAgfQorICAgIHJldHVybiAoUHlPYmplY3QgKilzOworfQorCitzdGF0aWMgaW50CitzY2FubmVyX2luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICAvKiBJbml0aWFsaXplIFNjYW5uZXIgb2JqZWN0ICovCisgICAgUHlPYmplY3QgKmN0eDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImNvbnRleHQiLCBOVUxMfTsKKyAgICBQeVNjYW5uZXJPYmplY3QgKnM7CisKKyAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNlbGYpKTsKKyAgICBzID0gKFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiTzptYWtlX3NjYW5uZXIiLCBrd2xpc3QsICZjdHgpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBQeVN0cmluZ19BU19TVFJJTkcgaXMgdXNlZCBvbiBlbmNvZGluZyAqLworICAgIHMtPmVuY29kaW5nID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjdHgsICJlbmNvZGluZyIpOworICAgIGlmIChzLT5lbmNvZGluZyA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgaWYgKHMtPmVuY29kaW5nID09IFB5X05vbmUpIHsKKyAgICAgICAgUHlfREVDUkVGKFB5X05vbmUpOworICAgICAgICBzLT5lbmNvZGluZyA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoREVGQVVMVF9FTkNPRElORyk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhzLT5lbmNvZGluZykpIHsKKyAgICAgICAgUHlPYmplY3QgKnRtcCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcocy0+ZW5jb2RpbmcsIE5VTEwsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYocy0+ZW5jb2RpbmcpOworICAgICAgICBzLT5lbmNvZGluZyA9IHRtcDsKKyAgICB9CisgICAgaWYgKHMtPmVuY29kaW5nID09IE5VTEwgfHwgIVB5U3RyaW5nX0NoZWNrKHMtPmVuY29kaW5nKSkKKyAgICAgICAgZ290byBiYWlsOworCisgICAgLyogQWxsIG9mIHRoZXNlIHdpbGwgZmFpbCAiZ3JhY2VmdWxseSIgc28gd2UgZG9uJ3QgbmVlZCB0byB2ZXJpZnkgdGhlbSAqLworICAgIHMtPnN0cmljdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY3R4LCAic3RyaWN0Iik7CisgICAgaWYgKHMtPnN0cmljdCA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgcy0+b2JqZWN0X2hvb2sgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGN0eCwgIm9iamVjdF9ob29rIik7CisgICAgaWYgKHMtPm9iamVjdF9ob29rID09IE5VTEwpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBzLT5wYWlyc19ob29rID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjdHgsICJvYmplY3RfcGFpcnNfaG9vayIpOworICAgIGlmIChzLT5wYWlyc19ob29rID09IE5VTEwpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBzLT5wYXJzZV9mbG9hdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY3R4LCAicGFyc2VfZmxvYXQiKTsKKyAgICBpZiAocy0+cGFyc2VfZmxvYXQgPT0gTlVMTCkKKyAgICAgICAgZ290byBiYWlsOworICAgIHMtPnBhcnNlX2ludCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY3R4LCAicGFyc2VfaW50Iik7CisgICAgaWYgKHMtPnBhcnNlX2ludCA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgcy0+cGFyc2VfY29uc3RhbnQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGN0eCwgInBhcnNlX2NvbnN0YW50Iik7CisgICAgaWYgKHMtPnBhcnNlX2NvbnN0YW50ID09IE5VTEwpCisgICAgICAgIGdvdG8gYmFpbDsKKworICAgIHJldHVybiAwOworCitiYWlsOgorICAgIFB5X0NMRUFSKHMtPmVuY29kaW5nKTsKKyAgICBQeV9DTEVBUihzLT5zdHJpY3QpOworICAgIFB5X0NMRUFSKHMtPm9iamVjdF9ob29rKTsKKyAgICBQeV9DTEVBUihzLT5wYWlyc19ob29rKTsKKyAgICBQeV9DTEVBUihzLT5wYXJzZV9mbG9hdCk7CisgICAgUHlfQ0xFQVIocy0+cGFyc2VfaW50KTsKKyAgICBQeV9DTEVBUihzLT5wYXJzZV9jb25zdGFudCk7CisgICAgcmV0dXJuIC0xOworfQorCitQeURvY19TVFJWQVIoc2Nhbm5lcl9kb2MsICJKU09OIHNjYW5uZXIgb2JqZWN0Iik7CisKK3N0YXRpYworUHlUeXBlT2JqZWN0IFB5U2Nhbm5lclR5cGUgPSB7CisgICAgUHlPYmplY3RfSEVBRF9JTklUKE5VTEwpCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ludGVybmFsICovCisgICAgIl9qc29uLlNjYW5uZXIiLCAgICAgICAvKiB0cF9uYW1lICovCisgICAgc2l6ZW9mKFB5U2Nhbm5lck9iamVjdCksIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAgIHNjYW5uZXJfZGVhbGxvYywgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICBzY2FubmVyX2NhbGwsICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICAwLC8qIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAqLyAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLC8qIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyLCAqLyAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qIHRwX2ZsYWdzICovCisgICAgc2Nhbm5lcl9kb2MsICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIHNjYW5uZXJfdHJhdmVyc2UsICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIHNjYW5uZXJfY2xlYXIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBzY2FubmVyX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgc2Nhbm5lcl9pbml0LCAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsLyogUHlUeXBlX0dlbmVyaWNBbGxvYywgKi8gICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgc2Nhbm5lcl9uZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsLyogUHlPYmplY3RfR0NfRGVsLCAqLyAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2VuY29kZXJfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIFB5RW5jb2Rlck9iamVjdCAqczsKKyAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOworICAgIGlmIChzICE9IE5VTEwpIHsKKyAgICAgICAgcy0+bWFya2VycyA9IE5VTEw7CisgICAgICAgIHMtPmRlZmF1bHRmbiA9IE5VTEw7CisgICAgICAgIHMtPmVuY29kZXIgPSBOVUxMOworICAgICAgICBzLT5pbmRlbnQgPSBOVUxMOworICAgICAgICBzLT5rZXlfc2VwYXJhdG9yID0gTlVMTDsKKyAgICAgICAgcy0+aXRlbV9zZXBhcmF0b3IgPSBOVUxMOworICAgICAgICBzLT5zb3J0X2tleXMgPSBOVUxMOworICAgICAgICBzLT5za2lwa2V5cyA9IE5VTEw7CisgICAgfQorICAgIHJldHVybiAoUHlPYmplY3QgKilzOworfQorCitzdGF0aWMgaW50CitlbmNvZGVyX2luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICAvKiBpbml0aWFsaXplIEVuY29kZXIgb2JqZWN0ICovCisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJtYXJrZXJzIiwgImRlZmF1bHQiLCAiZW5jb2RlciIsICJpbmRlbnQiLCAia2V5X3NlcGFyYXRvciIsICJpdGVtX3NlcGFyYXRvciIsICJzb3J0X2tleXMiLCAic2tpcGtleXMiLCAiYWxsb3dfbmFuIiwgTlVMTH07CisKKyAgICBQeUVuY29kZXJPYmplY3QgKnM7CisgICAgUHlPYmplY3QgKm1hcmtlcnMsICpkZWZhdWx0Zm4sICplbmNvZGVyLCAqaW5kZW50LCAqa2V5X3NlcGFyYXRvcjsKKyAgICBQeU9iamVjdCAqaXRlbV9zZXBhcmF0b3IsICpzb3J0X2tleXMsICpza2lwa2V5cywgKmFsbG93X25hbjsKKworICAgIGFzc2VydChQeUVuY29kZXJfQ2hlY2soc2VsZikpOworICAgIHMgPSAoUHlFbmNvZGVyT2JqZWN0ICopc2VsZjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPT09PT09PT086bWFrZV9lbmNvZGVyIiwga3dsaXN0LAorICAgICAgICAmbWFya2VycywgJmRlZmF1bHRmbiwgJmVuY29kZXIsICZpbmRlbnQsICZrZXlfc2VwYXJhdG9yLCAmaXRlbV9zZXBhcmF0b3IsCisgICAgICAgICZzb3J0X2tleXMsICZza2lwa2V5cywgJmFsbG93X25hbikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHMtPm1hcmtlcnMgPSBtYXJrZXJzOworICAgIHMtPmRlZmF1bHRmbiA9IGRlZmF1bHRmbjsKKyAgICBzLT5lbmNvZGVyID0gZW5jb2RlcjsKKyAgICBzLT5pbmRlbnQgPSBpbmRlbnQ7CisgICAgcy0+a2V5X3NlcGFyYXRvciA9IGtleV9zZXBhcmF0b3I7CisgICAgcy0+aXRlbV9zZXBhcmF0b3IgPSBpdGVtX3NlcGFyYXRvcjsKKyAgICBzLT5zb3J0X2tleXMgPSBzb3J0X2tleXM7CisgICAgcy0+c2tpcGtleXMgPSBza2lwa2V5czsKKyAgICBzLT5mYXN0X2VuY29kZSA9IChQeUNGdW5jdGlvbl9DaGVjayhzLT5lbmNvZGVyKSAmJiBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbihzLT5lbmNvZGVyKSA9PSAoUHlDRnVuY3Rpb24pcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkpOworICAgIHMtPmFsbG93X25hbiA9IFB5T2JqZWN0X0lzVHJ1ZShhbGxvd19uYW4pOworCisgICAgUHlfSU5DUkVGKHMtPm1hcmtlcnMpOworICAgIFB5X0lOQ1JFRihzLT5kZWZhdWx0Zm4pOworICAgIFB5X0lOQ1JFRihzLT5lbmNvZGVyKTsKKyAgICBQeV9JTkNSRUYocy0+aW5kZW50KTsKKyAgICBQeV9JTkNSRUYocy0+a2V5X3NlcGFyYXRvcik7CisgICAgUHlfSU5DUkVGKHMtPml0ZW1fc2VwYXJhdG9yKTsKKyAgICBQeV9JTkNSRUYocy0+c29ydF9rZXlzKTsKKyAgICBQeV9JTkNSRUYocy0+c2tpcGtleXMpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZW5jb2Rlcl9jYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgLyogUHl0aG9uIGNhbGxhYmxlIGludGVyZmFjZSB0byBlbmNvZGVfbGlzdGVuY29kZV9vYmogKi8KKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iaiIsICJfY3VycmVudF9pbmRlbnRfbGV2ZWwiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5T2JqZWN0ICpydmFsOworICAgIFB5X3NzaXplX3QgaW5kZW50X2xldmVsOworICAgIFB5RW5jb2Rlck9iamVjdCAqczsKKyAgICBhc3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYpKTsKKyAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXNlbGY7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJjpfaXRlcmVuY29kZSIsIGt3bGlzdCwKKyAgICAgICAgJm9iaiwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZpbmRlbnRfbGV2ZWwpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBydmFsID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocnZhbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZW5jb2Rlcl9saXN0ZW5jb2RlX29iaihzLCBydmFsLCBvYmosIGluZGVudF9sZXZlbCkpIHsKKyAgICAgICAgUHlfREVDUkVGKHJ2YWwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZW5jb2RlZF9jb25zdChQeU9iamVjdCAqb2JqKQoreworICAgIC8qIFJldHVybiB0aGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgTm9uZSwgVHJ1ZSwgRmFsc2UgKi8KKyAgICBpZiAob2JqID09IFB5X05vbmUpIHsKKyAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpzX251bGwgPSBOVUxMOworICAgICAgICBpZiAoc19udWxsID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNfbnVsbCA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIm51bGwiKTsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoc19udWxsKTsKKyAgICAgICAgcmV0dXJuIHNfbnVsbDsKKyAgICB9CisgICAgZWxzZSBpZiAob2JqID09IFB5X1RydWUpIHsKKyAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpzX3RydWUgPSBOVUxMOworICAgICAgICBpZiAoc190cnVlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNfdHJ1ZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInRydWUiKTsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoc190cnVlKTsKKyAgICAgICAgcmV0dXJuIHNfdHJ1ZTsKKyAgICB9CisgICAgZWxzZSBpZiAob2JqID09IFB5X0ZhbHNlKSB7CisgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqc19mYWxzZSA9IE5VTEw7CisgICAgICAgIGlmIChzX2ZhbHNlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNfZmFsc2UgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJmYWxzZSIpOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRihzX2ZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHNfZmFsc2U7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm5vdCBhIGNvbnN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2VuY29kZXJfZW5jb2RlX2Zsb2F0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaikKK3sKKyAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUZsb2F0ICovCisgICAgZG91YmxlIGkgPSBQeUZsb2F0X0FTX0RPVUJMRShvYmopOworICAgIGlmICghUHlfSVNfRklOSVRFKGkpKSB7CisgICAgICAgIGlmICghcy0+YWxsb3dfbmFuKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIk91dCBvZiByYW5nZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZygiSW5maW5pdHkiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoIi1JbmZpbml0eSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoIk5hTiIpOworICAgICAgICB9CisgICAgfQorICAgIC8qIFVzZSBhIGJldHRlciBmbG9hdCBmb3JtYXQgaGVyZT8gKi8KKyAgICByZXR1cm4gUHlPYmplY3RfUmVwcihvYmopOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZW5jb2Rlcl9lbmNvZGVfc3RyaW5nKFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaikKK3sKKyAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBzdHJpbmcgKi8KKyAgICBpZiAocy0+ZmFzdF9lbmNvZGUpCisgICAgICAgIHJldHVybiBweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShOVUxMLCBvYmopOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+ZW5jb2Rlciwgb2JqLCBOVUxMKTsKK30KKworc3RhdGljIGludAorX3N0ZWFsX2xpc3RfYXBwZW5kKFB5T2JqZWN0ICpsc3QsIFB5T2JqZWN0ICpzdG9sZW4pCit7CisgICAgLyogQXBwZW5kIHN0b2xlbiBhbmQgdGhlbiBkZWNyZW1lbnQgaXRzIHJlZmVyZW5jZSBjb3VudCAqLworICAgIGludCBydmFsID0gUHlMaXN0X0FwcGVuZChsc3QsIHN0b2xlbik7CisgICAgUHlfREVDUkVGKHN0b2xlbik7CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBpbnQKK2VuY29kZXJfbGlzdGVuY29kZV9vYmooUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcnZhbCwgUHlPYmplY3QgKm9iaiwgUHlfc3NpemVfdCBpbmRlbnRfbGV2ZWwpCit7CisgICAgLyogRW5jb2RlIFB5dGhvbiBvYmplY3Qgb2JqIHRvIGEgSlNPTiB0ZXJtLCBydmFsIGlzIGEgUHlMaXN0ICovCisgICAgUHlPYmplY3QgKm5ld29iajsKKyAgICBpbnQgcnY7CisKKyAgICBpZiAob2JqID09IFB5X05vbmUgfHwgb2JqID09IFB5X1RydWUgfHwgb2JqID09IFB5X0ZhbHNlKSB7CisgICAgICAgIFB5T2JqZWN0ICpjc3RyID0gX2VuY29kZWRfY29uc3Qob2JqKTsKKyAgICAgICAgaWYgKGNzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIF9zdGVhbF9saXN0X2FwcGVuZChydmFsLCBjc3RyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2sob2JqKSB8fCBQeVVuaWNvZGVfQ2hlY2sob2JqKSkKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gZW5jb2Rlcl9lbmNvZGVfc3RyaW5nKHMsIG9iaik7CisgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBfc3RlYWxfbGlzdF9hcHBlbmQocnZhbCwgZW5jb2RlZCk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5SW50X0NoZWNrKG9iaikgfHwgUHlMb25nX0NoZWNrKG9iaikpIHsKKyAgICAgICAgUHlPYmplY3QgKmVuY29kZWQgPSBQeU9iamVjdF9TdHIob2JqKTsKKyAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIF9zdGVhbF9saXN0X2FwcGVuZChydmFsLCBlbmNvZGVkKTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlGbG9hdF9DaGVjayhvYmopKSB7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gZW5jb2Rlcl9lbmNvZGVfZmxvYXQocywgb2JqKTsKKyAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIF9zdGVhbF9saXN0X2FwcGVuZChydmFsLCBlbmNvZGVkKTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlMaXN0X0NoZWNrKG9iaikgfHwgUHlUdXBsZV9DaGVjayhvYmopKSB7CisgICAgICAgIHJldHVybiBlbmNvZGVyX2xpc3RlbmNvZGVfbGlzdChzLCBydmFsLCBvYmosIGluZGVudF9sZXZlbCk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5RGljdF9DaGVjayhvYmopKSB7CisgICAgICAgIHJldHVybiBlbmNvZGVyX2xpc3RlbmNvZGVfZGljdChzLCBydmFsLCBvYmosIGluZGVudF9sZXZlbCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqaWRlbnQgPSBOVUxMOworICAgICAgICBpZiAocy0+bWFya2VycyAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICBpbnQgaGFzX2tleTsKKyAgICAgICAgICAgIGlkZW50ID0gUHlMb25nX0Zyb21Wb2lkUHRyKG9iaik7CisgICAgICAgICAgICBpZiAoaWRlbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBoYXNfa2V5ID0gUHlEaWN0X0NvbnRhaW5zKHMtPm1hcmtlcnMsIGlkZW50KTsKKyAgICAgICAgICAgIGlmIChoYXNfa2V5KSB7CisgICAgICAgICAgICAgICAgaWYgKGhhc19rZXkgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGlkZW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0ocy0+bWFya2VycywgaWRlbnQsIG9iaikpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaWRlbnQpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBuZXdvYmogPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPmRlZmF1bHRmbiwgb2JqLCBOVUxMKTsKKyAgICAgICAgaWYgKG5ld29iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9YREVDUkVGKGlkZW50KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBydiA9IGVuY29kZXJfbGlzdGVuY29kZV9vYmoocywgcnZhbCwgbmV3b2JqLCBpbmRlbnRfbGV2ZWwpOworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICAgICAgaWYgKHJ2KSB7CisgICAgICAgICAgICBQeV9YREVDUkVGKGlkZW50KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaWRlbnQgIT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RGljdF9EZWxJdGVtKHMtPm1hcmtlcnMsIGlkZW50KSkgeworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoaWRlbnQpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X1hERUNSRUYoaWRlbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBydjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK2VuY29kZXJfbGlzdGVuY29kZV9kaWN0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKnJ2YWwsIFB5T2JqZWN0ICpkY3QsIFB5X3NzaXplX3QgaW5kZW50X2xldmVsKQoreworICAgIC8qIEVuY29kZSBQeXRob24gZGljdCBkY3QgYSBKU09OIHRlcm0sIHJ2YWwgaXMgYSBQeUxpc3QgKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKm9wZW5fZGljdCA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICpjbG9zZV9kaWN0ID0gTlVMTDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKmVtcHR5X2RpY3QgPSBOVUxMOworICAgIFB5T2JqZWN0ICprc3RyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqaWRlbnQgPSBOVUxMOworICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMOworICAgIFB5T2JqZWN0ICp2YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKml0ID0gTlVMTDsKKyAgICBpbnQgc2tpcGtleXM7CisgICAgUHlfc3NpemVfdCBpZHg7CisKKyAgICBpZiAob3Blbl9kaWN0ID09IE5VTEwgfHwgY2xvc2VfZGljdCA9PSBOVUxMIHx8IGVtcHR5X2RpY3QgPT0gTlVMTCkgeworICAgICAgICBvcGVuX2RpY3QgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ7Iik7CisgICAgICAgIGNsb3NlX2RpY3QgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ9Iik7CisgICAgICAgIGVtcHR5X2RpY3QgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ7fSIpOworICAgICAgICBpZiAob3Blbl9kaWN0ID09IE5VTEwgfHwgY2xvc2VfZGljdCA9PSBOVUxMIHx8IGVtcHR5X2RpY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKFB5X1NJWkUoZGN0KSA9PSAwKQorICAgICAgICByZXR1cm4gUHlMaXN0X0FwcGVuZChydmFsLCBlbXB0eV9kaWN0KTsKKworICAgIGlmIChzLT5tYXJrZXJzICE9IFB5X05vbmUpIHsKKyAgICAgICAgaW50IGhhc19rZXk7CisgICAgICAgIGlkZW50ID0gUHlMb25nX0Zyb21Wb2lkUHRyKGRjdCk7CisgICAgICAgIGlmIChpZGVudCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICBoYXNfa2V5ID0gUHlEaWN0X0NvbnRhaW5zKHMtPm1hcmtlcnMsIGlkZW50KTsKKyAgICAgICAgaWYgKGhhc19rZXkpIHsKKyAgICAgICAgICAgIGlmIChoYXNfa2V5ICE9IC0xKQorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIik7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHMtPm1hcmtlcnMsIGlkZW50LCBkY3QpKSB7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBvcGVuX2RpY3QpKQorICAgICAgICBnb3RvIGJhaWw7CisKKyAgICBpZiAocy0+aW5kZW50ICE9IFB5X05vbmUpIHsKKyAgICAgICAgLyogVE9ETzogRE9FUyBOT1QgUlVOICovCisgICAgICAgIGluZGVudF9sZXZlbCArPSAxOworICAgICAgICAvKgorICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSAnXG4nICsgKCcgJyAqIChfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsKSkKKyAgICAgICAgICAgIHNlcGFyYXRvciA9IF9pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50CisgICAgICAgICAgICBidWYgKz0gbmV3bGluZV9pbmRlbnQKKyAgICAgICAgKi8KKyAgICB9CisKKyAgICAvKiBUT0RPOiBDIHNwZWVkdXAgbm90IGltcGxlbWVudGVkIGZvciBzb3J0X2tleXMgKi8KKworICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihkY3QpOworICAgIGlmIChpdCA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgc2tpcGtleXMgPSBQeU9iamVjdF9Jc1RydWUocy0+c2tpcGtleXMpOworICAgIGlkeCA9IDA7CisgICAgd2hpbGUgKChrZXkgPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKmVuY29kZWQ7CisKKyAgICAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKGtleSkgfHwgUHlVbmljb2RlX0NoZWNrKGtleSkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihrZXkpOworICAgICAgICAgICAga3N0ciA9IGtleTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeUZsb2F0X0NoZWNrKGtleSkpIHsKKyAgICAgICAgICAgIGtzdHIgPSBlbmNvZGVyX2VuY29kZV9mbG9hdChzLCBrZXkpOworICAgICAgICAgICAgaWYgKGtzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlJbnRfQ2hlY2soa2V5KSB8fCBQeUxvbmdfQ2hlY2soa2V5KSkgeworICAgICAgICAgICAga3N0ciA9IFB5T2JqZWN0X1N0cihrZXkpOworICAgICAgICAgICAgaWYgKGtzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoa2V5ID09IFB5X1RydWUgfHwga2V5ID09IFB5X0ZhbHNlIHx8IGtleSA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICBrc3RyID0gX2VuY29kZWRfY29uc3Qoa2V5KTsKKyAgICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNraXBrZXlzKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogVE9ETzogaW5jbHVkZSByZXByIG9mIGtleSAqLworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImtleXMgbXVzdCBiZSBhIHN0cmluZyIpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlkeCkgeworICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgcy0+aXRlbV9zZXBhcmF0b3IpKQorICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0SXRlbShkY3QsIGtleSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBiYWlsOworCisgICAgICAgIGVuY29kZWQgPSBlbmNvZGVyX2VuY29kZV9zdHJpbmcocywga3N0cik7CisgICAgICAgIFB5X0NMRUFSKGtzdHIpOworICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBlbmNvZGVkKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgcy0+a2V5X3NlcGFyYXRvcikpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIGlmIChlbmNvZGVyX2xpc3RlbmNvZGVfb2JqKHMsIHJ2YWwsIHZhbHVlLCBpbmRlbnRfbGV2ZWwpKQorICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICBpZHggKz0gMTsKKyAgICAgICAgUHlfQ0xFQVIodmFsdWUpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICB9CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBQeV9DTEVBUihpdCk7CisKKyAgICBpZiAoaWRlbnQgIT0gTlVMTCkgeworICAgICAgICBpZiAoUHlEaWN0X0RlbEl0ZW0ocy0+bWFya2VycywgaWRlbnQpKQorICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICBQeV9DTEVBUihpZGVudCk7CisgICAgfQorICAgIGlmIChzLT5pbmRlbnQgIT0gUHlfTm9uZSkgeworICAgICAgICAvKiBUT0RPOiBET0VTIE5PVCBSVU4gKi8KKyAgICAgICAgLyoKKyAgICAgICAgICAgIGluZGVudF9sZXZlbCAtPSAxOworCisgICAgICAgICAgICB5aWVsZCAnXG4nICsgKCcgJyAqIChfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsKSkKKyAgICAgICAgKi8KKyAgICB9CisgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgY2xvc2VfZGljdCkpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICByZXR1cm4gMDsKKworYmFpbDoKKyAgICBQeV9YREVDUkVGKGl0KTsKKyAgICBQeV9YREVDUkVGKGtleSk7CisgICAgUHlfWERFQ1JFRih2YWx1ZSk7CisgICAgUHlfWERFQ1JFRihrc3RyKTsKKyAgICBQeV9YREVDUkVGKGlkZW50KTsKKyAgICByZXR1cm4gLTE7Cit9CisKKworc3RhdGljIGludAorZW5jb2Rlcl9saXN0ZW5jb2RlX2xpc3QoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcnZhbCwgUHlPYmplY3QgKnNlcSwgUHlfc3NpemVfdCBpbmRlbnRfbGV2ZWwpCit7CisgICAgLyogRW5jb2RlIFB5dGhvbiBsaXN0IHNlcSB0byBhIEpTT04gdGVybSwgcnZhbCBpcyBhIFB5TGlzdCAqLworICAgIHN0YXRpYyBQeU9iamVjdCAqb3Blbl9hcnJheSA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICpjbG9zZV9hcnJheSA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICplbXB0eV9hcnJheSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmlkZW50ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc19mYXN0ID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IG51bV9pdGVtczsKKyAgICBQeU9iamVjdCAqKnNlcV9pdGVtczsKKyAgICBQeV9zc2l6ZV90IGk7CisKKyAgICBpZiAob3Blbl9hcnJheSA9PSBOVUxMIHx8IGNsb3NlX2FycmF5ID09IE5VTEwgfHwgZW1wdHlfYXJyYXkgPT0gTlVMTCkgeworICAgICAgICBvcGVuX2FycmF5ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiWyIpOworICAgICAgICBjbG9zZV9hcnJheSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl0iKTsKKyAgICAgICAgZW1wdHlfYXJyYXkgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJbXSIpOworICAgICAgICBpZiAob3Blbl9hcnJheSA9PSBOVUxMIHx8IGNsb3NlX2FycmF5ID09IE5VTEwgfHwgZW1wdHlfYXJyYXkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWRlbnQgPSBOVUxMOworICAgIHNfZmFzdCA9IFB5U2VxdWVuY2VfRmFzdChzZXEsICJfaXRlcmVuY29kZV9saXN0IG5lZWRzIGEgc2VxdWVuY2UiKTsKKyAgICBpZiAoc19mYXN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBudW1faXRlbXMgPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc19mYXN0KTsKKyAgICBpZiAobnVtX2l0ZW1zID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHNfZmFzdCk7CisgICAgICAgIHJldHVybiBQeUxpc3RfQXBwZW5kKHJ2YWwsIGVtcHR5X2FycmF5KTsKKyAgICB9CisKKyAgICBpZiAocy0+bWFya2VycyAhPSBQeV9Ob25lKSB7CisgICAgICAgIGludCBoYXNfa2V5OworICAgICAgICBpZGVudCA9IFB5TG9uZ19Gcm9tVm9pZFB0cihzZXEpOworICAgICAgICBpZiAoaWRlbnQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgaGFzX2tleSA9IFB5RGljdF9Db250YWlucyhzLT5tYXJrZXJzLCBpZGVudCk7CisgICAgICAgIGlmIChoYXNfa2V5KSB7CisgICAgICAgICAgICBpZiAoaGFzX2tleSAhPSAtMSkKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzLT5tYXJrZXJzLCBpZGVudCwgc2VxKSkgeworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgc2VxX2l0ZW1zID0gUHlTZXF1ZW5jZV9GYXN0X0lURU1TKHNfZmFzdCk7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgb3Blbl9hcnJheSkpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBpZiAocy0+aW5kZW50ICE9IFB5X05vbmUpIHsKKyAgICAgICAgLyogVE9ETzogRE9FUyBOT1QgUlVOICovCisgICAgICAgIGluZGVudF9sZXZlbCArPSAxOworICAgICAgICAvKgorICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSAnXG4nICsgKCcgJyAqIChfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsKSkKKyAgICAgICAgICAgIHNlcGFyYXRvciA9IF9pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50CisgICAgICAgICAgICBidWYgKz0gbmV3bGluZV9pbmRlbnQKKyAgICAgICAgKi8KKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9pdGVtczsgaSsrKSB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSBzZXFfaXRlbXNbaV07CisgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBzLT5pdGVtX3NlcGFyYXRvcikpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgICAgIGlmIChlbmNvZGVyX2xpc3RlbmNvZGVfb2JqKHMsIHJ2YWwsIG9iaiwgaW5kZW50X2xldmVsKSkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaWYgKGlkZW50ICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RGljdF9EZWxJdGVtKHMtPm1hcmtlcnMsIGlkZW50KSkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgUHlfQ0xFQVIoaWRlbnQpOworICAgIH0KKyAgICBpZiAocy0+aW5kZW50ICE9IFB5X05vbmUpIHsKKyAgICAgICAgLyogVE9ETzogRE9FUyBOT1QgUlVOICovCisgICAgICAgIC8qCisgICAgICAgICAgICBpbmRlbnRfbGV2ZWwgLT0gMTsKKworICAgICAgICAgICAgeWllbGQgJ1xuJyArICgnICcgKiAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkpCisgICAgICAgICovCisgICAgfQorICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIGNsb3NlX2FycmF5KSkKKyAgICAgICAgZ290byBiYWlsOworICAgIFB5X0RFQ1JFRihzX2Zhc3QpOworICAgIHJldHVybiAwOworCitiYWlsOgorICAgIFB5X1hERUNSRUYoaWRlbnQpOworICAgIFB5X0RFQ1JFRihzX2Zhc3QpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQKK2VuY29kZXJfZGVhbGxvYyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICAvKiBEZWFsbG9jYXRlIEVuY29kZXIgKi8KKyAgICBlbmNvZGVyX2NsZWFyKHNlbGYpOworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoc2VsZik7Cit9CisKK3N0YXRpYyBpbnQKK2VuY29kZXJfdHJhdmVyc2UoUHlPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5RW5jb2Rlck9iamVjdCAqczsKKyAgICBhc3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYpKTsKKyAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXNlbGY7CisgICAgUHlfVklTSVQocy0+bWFya2Vycyk7CisgICAgUHlfVklTSVQocy0+ZGVmYXVsdGZuKTsKKyAgICBQeV9WSVNJVChzLT5lbmNvZGVyKTsKKyAgICBQeV9WSVNJVChzLT5pbmRlbnQpOworICAgIFB5X1ZJU0lUKHMtPmtleV9zZXBhcmF0b3IpOworICAgIFB5X1ZJU0lUKHMtPml0ZW1fc2VwYXJhdG9yKTsKKyAgICBQeV9WSVNJVChzLT5zb3J0X2tleXMpOworICAgIFB5X1ZJU0lUKHMtPnNraXBrZXlzKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZW5jb2Rlcl9jbGVhcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICAvKiBEZWFsbG9jYXRlIEVuY29kZXIgKi8KKyAgICBQeUVuY29kZXJPYmplY3QgKnM7CisgICAgYXNzZXJ0KFB5RW5jb2Rlcl9DaGVjayhzZWxmKSk7CisgICAgcyA9IChQeUVuY29kZXJPYmplY3QgKilzZWxmOworICAgIFB5X0NMRUFSKHMtPm1hcmtlcnMpOworICAgIFB5X0NMRUFSKHMtPmRlZmF1bHRmbik7CisgICAgUHlfQ0xFQVIocy0+ZW5jb2Rlcik7CisgICAgUHlfQ0xFQVIocy0+aW5kZW50KTsKKyAgICBQeV9DTEVBUihzLT5rZXlfc2VwYXJhdG9yKTsKKyAgICBQeV9DTEVBUihzLT5pdGVtX3NlcGFyYXRvcik7CisgICAgUHlfQ0xFQVIocy0+c29ydF9rZXlzKTsKKyAgICBQeV9DTEVBUihzLT5za2lwa2V5cyk7CisgICAgcmV0dXJuIDA7Cit9CisKK1B5RG9jX1NUUlZBUihlbmNvZGVyX2RvYywgIl9pdGVyZW5jb2RlKG9iaiwgX2N1cnJlbnRfaW5kZW50X2xldmVsKSAtPiBpdGVyYWJsZSIpOworCitzdGF0aWMKK1B5VHlwZU9iamVjdCBQeUVuY29kZXJUeXBlID0geworICAgIFB5T2JqZWN0X0hFQURfSU5JVChOVUxMKQorICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbnRlcm5hbCAqLworICAgICJfanNvbi5FbmNvZGVyIiwgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihQeUVuY29kZXJPYmplY3QpLCAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICBlbmNvZGVyX2RlYWxsb2MsIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgZW5jb2Rlcl9jYWxsLCAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKiB0cF9mbGFncyAqLworICAgIGVuY29kZXJfZG9jLCAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBlbmNvZGVyX3RyYXZlcnNlLCAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICBlbmNvZGVyX2NsZWFyLCAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZW5jb2Rlcl9tZW1iZXJzLCAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICBlbmNvZGVyX2luaXQsICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIGVuY29kZXJfbmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworfTsKKworc3RhdGljIFB5TWV0aG9kRGVmIHNwZWVkdXBzX21ldGhvZHNbXSA9IHsKKyAgICB7ImVuY29kZV9iYXNlc3RyaW5nX2FzY2lpIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLAorICAgICAgICBNRVRIX08sCisgICAgICAgIHB5ZG9jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpfSwKKyAgICB7InNjYW5zdHJpbmciLAorICAgICAgICAoUHlDRnVuY3Rpb24pcHlfc2NhbnN0cmluZywKKyAgICAgICAgTUVUSF9WQVJBUkdTLAorICAgICAgICBweWRvY19zY2Fuc3RyaW5nfSwKICAgICB7TlVMTCwgTlVMTCwgMCwgTlVMTH0KIH07CiAKQEAgLTYxNyw1ICsyMzkwLDE1IEBACiBpbml0X2pzb24odm9pZCkKIHsKICAgICBQeU9iamVjdCAqbTsKLSAgICBtID0gUHlfSW5pdE1vZHVsZTMoIl9qc29uIiwganNvbl9tZXRob2RzLCBtb2R1bGVfZG9jKTsKKyAgICBQeVNjYW5uZXJUeXBlLnRwX25ldyA9IFB5VHlwZV9HZW5lcmljTmV3OworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5U2Nhbm5lclR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuOworICAgIFB5RW5jb2RlclR5cGUudHBfbmV3ID0gUHlUeXBlX0dlbmVyaWNOZXc7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlFbmNvZGVyVHlwZSkgPCAwKQorICAgICAgICByZXR1cm47CisgICAgbSA9IFB5X0luaXRNb2R1bGUzKCJfanNvbiIsIHNwZWVkdXBzX21ldGhvZHMsIG1vZHVsZV9kb2MpOworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSZQeVNjYW5uZXJUeXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIm1ha2Vfc2Nhbm5lciIsIChQeU9iamVjdCopJlB5U2Nhbm5lclR5cGUpOworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSZQeUVuY29kZXJUeXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIm1ha2VfZW5jb2RlciIsIChQeU9iamVjdCopJlB5RW5jb2RlclR5cGUpOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMgYi9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYwppbmRleCA3ZTQ3NWRhLi4yNTNhNGRjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYworKysgYi9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYwpAQCAtMzIsMTAgKzMyLDYgQEAKICNpbmNsdWRlIDx3Y2hhci5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2VuZGlmCi0KICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC02Miw4ICs1OCw4IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCwgKnZhbCA9IE5VTEw7CiAKICAgICBpZiAoc1swXSA9PSAnXDAnKQotICAgICAgICAvKiBlbXB0eSBzdHJpbmc6IG5vIGdyb3VwaW5nIGF0IGFsbCAqLwotICAgICAgICByZXR1cm4gUHlMaXN0X05ldygwKTsKKyAgICAvKiBlbXB0eSBzdHJpbmc6IG5vIGdyb3VwaW5nIGF0IGFsbCAqLworICAgIHJldHVybiBQeUxpc3RfTmV3KDApOwogCiAgICAgZm9yIChpID0gMDsgc1tpXSAhPSAnXDAnICYmIHNbaV0gIT0gQ0hBUl9NQVg7IGkrKykKICAgICAgICAgOyAvKiBub3RoaW5nICovCkBAIC0xNjUsMjYgKzE2MSwzNCBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHRfb2JqZWN0OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpfHo6c2V0bG9jYWxlIiwgJmNhdGVnb3J5LCAmbG9jYWxlKSkKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgaWYgKGNhdGVnb3J5IDwgTENfTUlOIHx8IGNhdGVnb3J5ID4gTENfTUFYKQorICAgIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiaW52YWxpZCBsb2NhbGUgY2F0ZWdvcnkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCiAKICAgICBpZiAobG9jYWxlKSB7Ci0gICAgICAgIC8qIHNldCBsb2NhbGUgKi8KLSAgICAgICAgcmVzdWx0ID0gc2V0bG9jYWxlKGNhdGVnb3J5LCBsb2NhbGUpOwotICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgLyogb3BlcmF0aW9uIGZhaWxlZCwgbm8gc2V0dGluZyB3YXMgY2hhbmdlZCAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAidW5zdXBwb3J0ZWQgbG9jYWxlIHNldHRpbmciKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdF9vYmplY3QgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHJlc3VsdCk7Ci0gICAgICAgIGlmICghcmVzdWx0X29iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAvKiByZWNvcmQgY2hhbmdlcyB0byBMQ19DVFlQRSAqLwotICAgICAgICBpZiAoY2F0ZWdvcnkgPT0gTENfQ1RZUEUgfHwgY2F0ZWdvcnkgPT0gTENfQUxMKQotICAgICAgICAgICAgZml4dXBfdWxjYXNlKCk7CisgICAgLyogc2V0IGxvY2FsZSAqLworICAgIHJlc3VsdCA9IHNldGxvY2FsZShjYXRlZ29yeSwgbG9jYWxlKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAvKiBvcGVyYXRpb24gZmFpbGVkLCBubyBzZXR0aW5nIHdhcyBjaGFuZ2VkICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgInVuc3VwcG9ydGVkIGxvY2FsZSBzZXR0aW5nIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHRfb2JqZWN0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhyZXN1bHQpOworICAgIGlmICghcmVzdWx0X29iamVjdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogcmVjb3JkIGNoYW5nZXMgdG8gTENfQ1RZUEUgKi8KKyAgICBpZiAoY2F0ZWdvcnkgPT0gTENfQ1RZUEUgfHwgY2F0ZWdvcnkgPT0gTENfQUxMKQorICAgICAgICBmaXh1cF91bGNhc2UoKTsKICAgICAgICAgLyogdGhpbmdzIHRoYXQgZ290IHdyb25nIHVwIHRvIGhlcmUgYXJlIGlnbm9yZWQgKi8KICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9IGVsc2UgewotICAgICAgICAvKiBnZXQgbG9jYWxlICovCisgICAgLyogZ2V0IGxvY2FsZSAqLwogICAgICAgICByZXN1bHQgPSBzZXRsb2NhbGUoY2F0ZWdvcnksIE5VTEwpOwogICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAibG9jYWxlIHF1ZXJ5IGZhaWxlZCIpOwpAQCAtMjkzLDkgKzI5Nyw5IEBACiAgICAgfQogICAgIC8qIENvbnZlcnQgdGhlIG5vbi11bmljb2RlIGFyZ3VtZW50IHRvIHVuaWNvZGUuICovCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sob3MxKSkgewotICAgICAgICBvczEgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChvczEpOwotICAgICAgICBpZiAoIW9zMSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIG9zMSA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KG9zMSk7CisgICAgaWYgKCFvczEpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZWwxID0gMTsKICAgICB9CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sob3MyKSkgewpAQCAtNDEyLDM4ICs0MTYsNiBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLS8qCi0qKiBGaW5kIG91dCB3aGF0IHRoZSBjdXJyZW50IHNjcmlwdCBpcy4KLSoqIERvbmF0ZWQgYnkgRnJlZHJpayBMdW5kaC4KLSovCi1zdGF0aWMgY2hhciAqbWFjX2dldHNjcmlwdCh2b2lkKQotewotICAgIENGU3RyaW5nRW5jb2RpbmcgZW5jID0gQ0ZTdHJpbmdHZXRTeXN0ZW1FbmNvZGluZygpOwotICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBuYW1lID0gTlVMTDsKLSAgICAvKiBSZXR1cm4gdGhlIGNvZGUgbmFtZSBmb3IgdGhlIGVuY29kaW5ncyBmb3Igd2hpY2ggd2UgaGF2ZSBjb2RlY3MuICovCi0gICAgc3dpdGNoKGVuYykgewotICAgIGNhc2Uga0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbjogcmV0dXJuICJtYWMtcm9tYW4iOwotICAgIGNhc2Uga0NGU3RyaW5nRW5jb2RpbmdNYWNHcmVlazogcmV0dXJuICJtYWMtZ3JlZWsiOwotICAgIGNhc2Uga0NGU3RyaW5nRW5jb2RpbmdNYWNDeXJpbGxpYzogcmV0dXJuICJtYWMtY3lyaWxsaWMiOwotICAgIGNhc2Uga0NGU3RyaW5nRW5jb2RpbmdNYWNUdXJraXNoOiByZXR1cm4gIm1hYy10dXJraXNoIjsKLSAgICBjYXNlIGtDRlN0cmluZ0VuY29kaW5nTWFjSWNlbGFuZGljOiByZXR1cm4gIm1hYy1pY2VsYW5kaWMiOwotICAgIC8qIFhYWCB3aGljaCBvbmUgaXMgbWFjLWxhdGluMj8gKi8KLSAgICB9Ci0gICAgaWYgKCFuYW1lKSB7Ci0gICAgICAgIC8qIFRoaXMgbGVha3MgYW4gb2JqZWN0LiAqLwotICAgICAgICBuYW1lID0gQ0ZTdHJpbmdDb252ZXJ0RW5jb2RpbmdUb0lBTkFDaGFyU2V0TmFtZShlbmMpOwotICAgIH0KLSAgICByZXR1cm4gKGNoYXIgKilDRlN0cmluZ0dldENTdHJpbmdQdHIobmFtZSwgMCk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCoKLVB5TG9jYWxlX2dldGRlZmF1bHRsb2NhbGUoUHlPYmplY3QqIHNlbGYpCi17Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk9zIiwgUHlfTm9uZSwgbWFjX2dldHNjcmlwdCgpKTsKLX0KLSNlbmRpZgotCiAjaWZkZWYgSEFWRV9MQU5HSU5GT19ICiAjZGVmaW5lIExBTkdJTkZPKFgpIHsjWCwgWH0KIHN0YXRpYyBzdHJ1Y3QgbGFuZ2luZm9fY29uc3RhbnR7CkBAIC01NjIsMTcgKzUzNCwxNyBAQAogewogICAgIGludCBpdGVtLCBpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpubF9sYW5naW5mbyIsICZpdGVtKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgc3VwcG9ydGVkIGNvbnN0YW50LiBHTlUgbGliYyBzb21ldGltZXMKICAgICAgICByZXR1cm5zIG51bWVyaWMgdmFsdWVzIGluIHRoZSBjaGFyKiByZXR1cm4gdmFsdWUsIHdoaWNoIHdvdWxkCiAgICAgICAgY3Jhc2ggUHlTdHJpbmdfRnJvbVN0cmluZy4gICovCiAgICAgZm9yIChpID0gMDsgbGFuZ2luZm9fY29uc3RhbnRzW2ldLm5hbWU7IGkrKykKLSAgICBpZiAobGFuZ2luZm9fY29uc3RhbnRzW2ldLnZhbHVlID09IGl0ZW0pIHsKLSAgICAgICAgLyogQ2hlY2sgTlVMTCBhcyBhIHdvcmthcm91bmQgZm9yIEdOVSBsaWJjJ3MgcmV0dXJuaW5nIE5VTEwKLSAgICAgICAgICAgaW5zdGVhZCBvZiBhbiBlbXB0eSBzdHJpbmcgZm9yIG5sX2xhbmdpbmZvKEVSQSkuICAqLwotICAgICAgICBjb25zdCBjaGFyICpyZXN1bHQgPSBubF9sYW5naW5mbyhpdGVtKTsKLSAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVzdWx0ICE9IE5VTEwgPyByZXN1bHQgOiAiIik7Ci0gICAgfQorICAgICAgICBpZiAobGFuZ2luZm9fY29uc3RhbnRzW2ldLnZhbHVlID09IGl0ZW0pIHsKKyAgICAgICAgICAgIC8qIENoZWNrIE5VTEwgYXMgYSB3b3JrYXJvdW5kIGZvciBHTlUgbGliYydzIHJldHVybmluZyBOVUxMCisgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZyBmb3IgbmxfbGFuZ2luZm8oRVJBKS4gICovCisgICAgICAgICAgICBjb25zdCBjaGFyICpyZXN1bHQgPSBubF9sYW5naW5mbyhpdGVtKTsKKyAgICAgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHJlc3VsdCAhPSBOVUxMID8gcmVzdWx0IDogIiIpOworICAgICAgICB9CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bnN1cHBvcnRlZCBsYW5naW5mbyBjb25zdGFudCIpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtNjg5LDcgKzY2MSw3IEBACiAgICBNRVRIX1ZBUkFSR1MsIHN0cmNvbGxfX2RvY19ffSwKICAgeyJzdHJ4ZnJtIiwgKFB5Q0Z1bmN0aW9uKSBQeUxvY2FsZV9zdHJ4ZnJtLAogICAgTUVUSF9WQVJBUkdTLCBzdHJ4ZnJtX19kb2NfX30sCi0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgIHsiX2dldGRlZmF1bHRsb2NhbGUiLCAoUHlDRnVuY3Rpb24pIFB5TG9jYWxlX2dldGRlZmF1bHRsb2NhbGUsIE1FVEhfTk9BUkdTfSwKICNlbmRpZgogI2lmZGVmIEhBVkVfTEFOR0lORk9fSApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbWF0aC5jIGIvTW9kdWxlcy9fbWF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZWY0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19tYXRoLmMKQEAgLTAsMCArMSwyMzIgQEAKKy8qIERlZmluaXRpb25zIG9mIHNvbWUgQzk5IG1hdGggbGlicmFyeSBmdW5jdGlvbnMsIGZvciB0aG9zZSBwbGF0Zm9ybXMKKyAgIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHRoZXNlIGZ1bmN0aW9ucyBhbHJlYWR5LiAqLworCisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlICJfbWF0aC5oIgorCisvKiBUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2UgYXBwbGllcyB0byB0aGUgb3JpZ2luYWwKKyAgIGltcGxlbWVudGF0aW9ucyBvZiBhY29zaCwgYXNpbmggYW5kIGF0YW5oLiAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKK3N0YXRpYyBjb25zdCBkb3VibGUgbG4yID0gNi45MzE0NzE4MDU1OTk0NTI4NjIyN0UtMDE7CitzdGF0aWMgY29uc3QgZG91YmxlIHR3b19wb3dfbTI4ID0gMy43MjUyOTAyOTg0NjE5MTQxRS0wOTsgLyogMioqLTI4ICovCitzdGF0aWMgY29uc3QgZG91YmxlIHR3b19wb3dfcDI4ID0gMjY4NDM1NDU2LjA7IC8qIDIqKjI4ICovCitzdGF0aWMgY29uc3QgZG91YmxlIHplcm8gPSAwLjA7CisKKy8qIGFjb3NoKHgpCisgKiBNZXRob2QgOgorICogICAgICBCYXNlZCBvbgorICogICAgICAgICAgICBhY29zaCh4KSA9IGxvZyBbIHggKyBzcXJ0KHgqeC0xKSBdCisgKiAgICAgIHdlIGhhdmUKKyAqICAgICAgICAgICAgYWNvc2goeCkgOj0gbG9nKHgpK2xuMiwgaWYgeCBpcyBsYXJnZTsgZWxzZQorICogICAgICAgICAgICBhY29zaCh4KSA6PSBsb2coMngtMS8oc3FydCh4KngtMSkreCkpIGlmIHg+MjsgZWxzZQorICogICAgICAgICAgICBhY29zaCh4KSA6PSBsb2cxcCh0K3NxcnQoMi4wKnQrdCp0KSk7IHdoZXJlIHQ9eC0xLgorICoKKyAqIFNwZWNpYWwgY2FzZXM6CisgKiAgICAgIGFjb3NoKHgpIGlzIE5hTiB3aXRoIHNpZ25hbCBpZiB4PDEuCisgKiAgICAgIGFjb3NoKE5hTikgaXMgTmFOIHdpdGhvdXQgc2lnbmFsLgorICovCisKK2RvdWJsZQorX1B5X2Fjb3NoKGRvdWJsZSB4KQoreworICAgIGlmIChQeV9JU19OQU4oeCkpIHsKKyAgICAgICAgcmV0dXJuIHgreDsKKyAgICB9CisgICAgaWYgKHggPCAxLikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogeCA8IDE7ICByZXR1cm4gYSBzaWduYWxpbmcgTmFOICovCisgICAgICAgIGVycm5vID0gRURPTTsKKyNpZmRlZiBQeV9OQU4KKyAgICAgICAgcmV0dXJuIFB5X05BTjsKKyNlbHNlCisgICAgICAgIHJldHVybiAoeC14KS8oeC14KTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlIGlmICh4ID49IHR3b19wb3dfcDI4KSB7ICAgICAgICAvKiB4ID4gMioqMjggKi8KKyAgICAgICAgaWYgKFB5X0lTX0lORklOSVRZKHgpKSB7CisgICAgICAgICAgICByZXR1cm4geCt4OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGxvZyh4KStsbjI7ICAgICAgICAgIC8qIGFjb3NoKGh1Z2UpPWxvZygyeCkgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh4ID09IDEuKSB7CisgICAgICAgIHJldHVybiAwLjA7ICAgICAgICAgICAgICAgICAgICAgLyogYWNvc2goMSkgPSAwICovCisgICAgfQorICAgIGVsc2UgaWYgKHggPiAyLikgeyAgICAgICAgICAgICAgICAgIC8qIDIgPCB4IDwgMioqMjggKi8KKyAgICAgICAgZG91YmxlIHQgPSB4Kng7CisgICAgICAgIHJldHVybiBsb2coMi4wKnggLSAxLjAgLyAoeCArIHNxcnQodCAtIDEuMCkpKTsKKyAgICB9CisgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMSA8IHggPD0gMiAqLworICAgICAgICBkb3VibGUgdCA9IHggLSAxLjA7CisgICAgICAgIHJldHVybiBtX2xvZzFwKHQgKyBzcXJ0KDIuMCp0ICsgdCp0KSk7CisgICAgfQorfQorCisKKy8qIGFzaW5oKHgpCisgKiBNZXRob2QgOgorICogICAgICBCYXNlZCBvbgorICogICAgICAgICAgICAgIGFzaW5oKHgpID0gc2lnbih4KSAqIGxvZyBbIHx4fCArIHNxcnQoeCp4KzEpIF0KKyAqICAgICAgd2UgaGF2ZQorICogICAgICBhc2luaCh4KSA6PSB4ICBpZiAgMSt4Kng9MSwKKyAqICAgICAgICAgICAgICAgOj0gc2lnbih4KSoobG9nKHgpK2xuMikpIGZvciBsYXJnZSB8eHwsIGVsc2UKKyAqICAgICAgICAgICAgICAgOj0gc2lnbih4KSpsb2coMnx4fCsxLyh8eHwrc3FydCh4KngrMSkpKSBpZnx4fD4yLCBlbHNlCisgKiAgICAgICAgICAgICAgIDo9IHNpZ24oeCkqbG9nMXAofHh8ICsgeF4yLygxICsgc3FydCgxK3heMikpKQorICovCisKK2RvdWJsZQorX1B5X2FzaW5oKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSB3OworICAgIGRvdWJsZSBhYnN4ID0gZmFicyh4KTsKKworICAgIGlmIChQeV9JU19OQU4oeCkgfHwgUHlfSVNfSU5GSU5JVFkoeCkpIHsKKyAgICAgICAgcmV0dXJuIHgreDsKKyAgICB9CisgICAgaWYgKGFic3ggPCB0d29fcG93X20yOCkgeyAgICAgICAgICAgLyogfHh8IDwgMioqLTI4ICovCisgICAgICAgIHJldHVybiB4OyAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHggaW5leGFjdCBleGNlcHQgMCAqLworICAgIH0KKyAgICBpZiAoYWJzeCA+IHR3b19wb3dfcDI4KSB7ICAgICAgICAgICAvKiB8eHwgPiAyKioyOCAqLworICAgICAgICB3ID0gbG9nKGFic3gpK2xuMjsKKyAgICB9CisgICAgZWxzZSBpZiAoYWJzeCA+IDIuMCkgeyAgICAgICAgICAgICAgLyogMiA8IHx4fCA8IDIqKjI4ICovCisgICAgICAgIHcgPSBsb2coMi4wKmFic3ggKyAxLjAgLyAoc3FydCh4KnggKyAxLjApICsgYWJzeCkpOworICAgIH0KKyAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyKiotMjggPD0gfHh8IDwgMj0gKi8KKyAgICAgICAgZG91YmxlIHQgPSB4Kng7CisgICAgICAgIHcgPSBtX2xvZzFwKGFic3ggKyB0IC8gKDEuMCArIHNxcnQoMS4wICsgdCkpKTsKKyAgICB9CisgICAgcmV0dXJuIGNvcHlzaWduKHcsIHgpOworCit9CisKKy8qIGF0YW5oKHgpCisgKiBNZXRob2QgOgorICogICAgMS5SZWR1Y2VkIHggdG8gcG9zaXRpdmUgYnkgYXRhbmgoLXgpID0gLWF0YW5oKHgpCisgKiAgICAyLkZvciB4Pj0wLjUKKyAqICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgMnggICAgICAgICAgICAgICAgICAgICAgICAgIHgKKyAqICAgICAgYXRhbmgoeCkgPSAtLS0gKiBsb2coMSArIC0tLS0tLS0pID0gMC41ICogbG9nMXAoMiAqIC0tLS0tLS0pCisgKiAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgMSAtIHggICAgICAgICAgICAgICAgICAgICAgMSAtIHgKKyAqCisgKiAgICAgIEZvciB4PDAuNQorICogICAgICBhdGFuaCh4KSA9IDAuNSpsb2cxcCgyeCsyeCp4LygxLXgpKQorICoKKyAqIFNwZWNpYWwgY2FzZXM6CisgKiAgICAgIGF0YW5oKHgpIGlzIE5hTiBpZiB8eHwgPj0gMSB3aXRoIHNpZ25hbDsKKyAqICAgICAgYXRhbmgoTmFOKSBpcyB0aGF0IE5hTiB3aXRoIG5vIHNpZ25hbDsKKyAqCisgKi8KKworZG91YmxlCitfUHlfYXRhbmgoZG91YmxlIHgpCit7CisgICAgZG91YmxlIGFic3g7CisgICAgZG91YmxlIHQ7CisKKyAgICBpZiAoUHlfSVNfTkFOKHgpKSB7CisgICAgICAgIHJldHVybiB4K3g7CisgICAgfQorICAgIGFic3ggPSBmYWJzKHgpOworICAgIGlmIChhYnN4ID49IDEuKSB7ICAgICAgICAgICAgICAgICAgIC8qIHx4fCA+PSAxICovCisgICAgICAgIGVycm5vID0gRURPTTsKKyNpZmRlZiBQeV9OQU4KKyAgICAgICAgcmV0dXJuIFB5X05BTjsKKyNlbHNlCisgICAgICAgIHJldHVybiB4L3plcm87CisjZW5kaWYKKyAgICB9CisgICAgaWYgKGFic3ggPCB0d29fcG93X20yOCkgeyAgICAgICAgICAgLyogfHh8IDwgMioqLTI4ICovCisgICAgICAgIHJldHVybiB4OworICAgIH0KKyAgICBpZiAoYWJzeCA8IDAuNSkgeyAgICAgICAgICAgICAgICAgICAvKiB8eHwgPCAwLjUgKi8KKyAgICAgICAgdCA9IGFic3grYWJzeDsKKyAgICAgICAgdCA9IDAuNSAqIG1fbG9nMXAodCArIHQqYWJzeCAvICgxLjAgLSBhYnN4KSk7CisgICAgfQorICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAuNSA8PSB8eHwgPD0gMS4wICovCisgICAgICAgIHQgPSAwLjUgKiBtX2xvZzFwKChhYnN4ICsgYWJzeCkgLyAoMS4wIC0gYWJzeCkpOworICAgIH0KKyAgICByZXR1cm4gY29weXNpZ24odCwgeCk7Cit9CisKKy8qIE1hdGhlbWF0aWNhbGx5LCBleHBtMSh4KSA9IGV4cCh4KSAtIDEuICBUaGUgZXhwbTEgZnVuY3Rpb24gaXMgZGVzaWduZWQKKyAgIHRvIGF2b2lkIHRoZSBzaWduaWZpY2FudCBsb3NzIG9mIHByZWNpc2lvbiB0aGF0IGFyaXNlcyBmcm9tIGRpcmVjdAorICAgZXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBleHAoeCkgLSAxLCBmb3IgeCBuZWFyIDAuICovCisKK2RvdWJsZQorX1B5X2V4cG0xKGRvdWJsZSB4KQoreworICAgIC8qIEZvciBhYnMoeCkgPj0gbG9nKDIpLCBpdCdzIHNhZmUgdG8gZXZhbHVhdGUgZXhwKHgpIC0gMSBkaXJlY3RseTsgdGhpcworICAgICAgIGFsc28gd29ya3MgZmluZSBmb3IgaW5maW5pdGllcyBhbmQgbmFucy4KKworICAgICAgIEZvciBzbWFsbGVyIHgsIHdlIGNhbiB1c2UgYSBtZXRob2QgZHVlIHRvIEthaGFuIHRoYXQgYWNoaWV2ZXMgY2xvc2UgdG8KKyAgICAgICBmdWxsIGFjY3VyYWN5LgorICAgICovCisKKyAgICBpZiAoZmFicyh4KSA8IDAuNykgeworICAgICAgICBkb3VibGUgdTsKKyAgICAgICAgdSA9IGV4cCh4KTsKKyAgICAgICAgaWYgKHUgPT0gMS4wKQorICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAodSAtIDEuMCkgKiB4IC8gbG9nKHUpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBleHAoeCkgLSAxLjA7Cit9CisKKy8qIGxvZzFwKHgpID0gbG9nKDEreCkuICBUaGUgbG9nMXAgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYXZvaWQgdGhlCisgICBzaWduaWZpY2FudCBsb3NzIG9mIHByZWNpc2lvbiB0aGF0IGFyaXNlcyBmcm9tIGRpcmVjdCBldmFsdWF0aW9uIHdoZW4geCBpcworICAgc21hbGwuICovCisKK2RvdWJsZQorX1B5X2xvZzFwKGRvdWJsZSB4KQoreworICAgIC8qIEZvciB4IHNtYWxsLCB3ZSB1c2UgdGhlIGZvbGxvd2luZyBhcHByb2FjaC4gIExldCB5IGJlIHRoZSBuZWFyZXN0IGZsb2F0CisgICAgICAgdG8gMSt4LCB0aGVuCisKKyAgICAgICAgIDEreCA9IHkgKiAoMSAtICh5LTEteCkveSkKKworICAgICAgIHNvIGxvZygxK3gpID0gbG9nKHkpICsgbG9nKDEtKHktMS14KS95KS4gIFNpbmNlICh5LTEteCkveSBpcyB0aW55LCB0aGUKKyAgICAgICBzZWNvbmQgdGVybSBpcyB3ZWxsIGFwcHJveGltYXRlZCBieSAoeS0xLXgpL3kuICBJZiBhYnMoeCkgPj0KKyAgICAgICBEQkxfRVBTSUxPTi8yIG9yIHRoZSByb3VuZGluZy1tb2RlIGlzIHNvbWUgZm9ybSBvZiByb3VuZC10by1uZWFyZXN0CisgICAgICAgdGhlbiB5LTEteCB3aWxsIGJlIGV4YWN0bHkgcmVwcmVzZW50YWJsZSwgYW5kIGlzIGNvbXB1dGVkIGV4YWN0bHkgYnkKKyAgICAgICAoeS0xKS14LgorCisgICAgICAgSWYgYWJzKHgpIDwgREJMX0VQU0lMT04vMiBhbmQgdGhlIHJvdW5kaW5nIG1vZGUgaXMgbm90IGtub3duIHRvIGJlCisgICAgICAgcm91bmQtdG8tbmVhcmVzdCB0aGVuIHRoaXMgbWV0aG9kIGlzIHNsaWdodGx5IGRhbmdlcm91czogMSt4IGNvdWxkIGJlCisgICAgICAgcm91bmRlZCB1cCB0byAxK0RCTF9FUFNJTE9OIGluc3RlYWQgb2YgZG93biB0byAxLCBhbmQgaW4gdGhhdCBjYXNlCisgICAgICAgeS0xLXggd2lsbCBub3QgYmUgZXhhY3RseSByZXByZXNlbnRhYmxlIGFueSBtb3JlIGFuZCB0aGUgcmVzdWx0IGNhbiBiZQorICAgICAgIG9mZiBieSBtYW55IHVscHMuICBCdXQgdGhpcyBpcyBlYXNpbHkgZml4ZWQ6IGZvciBhIGZsb2F0aW5nLXBvaW50CisgICAgICAgbnVtYmVyIHx4fCA8IERCTF9FUFNJTE9OLzIuLCB0aGUgY2xvc2VzdCBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8KKyAgICAgICBsb2coMSt4KSBpcyBleGFjdGx5IHguCisgICAgKi8KKworICAgIGRvdWJsZSB5OworICAgIGlmIChmYWJzKHgpIDwgREJMX0VQU0lMT04vMi4pIHsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorICAgIGVsc2UgaWYgKC0wLjUgPD0geCAmJiB4IDw9IDEuKSB7CisgICAgICAgIC8qIFdBUk5JTkc6IGl0J3MgcG9zc2libGUgdGhhbiBhbiBvdmVyZWFnZXIgY29tcGlsZXIKKyAgICAgICAgICAgd2lsbCBpbmNvcnJlY3RseSBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIHR3byBsaW5lcworICAgICAgICAgICB0byB0aGUgZXF1aXZhbGVudCBvZiAicmV0dXJuIGxvZygxLit4KSIuIElmIHRoaXMKKyAgICAgICAgICAgaGFwcGVucywgdGhlbiByZXN1bHRzIGZyb20gbG9nMXAgd2lsbCBiZSBpbmFjY3VyYXRlCisgICAgICAgICAgIGZvciBzbWFsbCB4LiAqLworICAgICAgICB5ID0gMS4reDsKKyAgICAgICAgcmV0dXJuIGxvZyh5KS0oKHktMS4pLXgpL3k7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBOYU5zIGFuZCBpbmZpbml0aWVzIHNob3VsZCBlbmQgdXAgaGVyZSAqLworICAgICAgICByZXR1cm4gbG9nKDEuK3gpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX21hdGguaCBiL01vZHVsZXMvX21hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGNlZWNlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fbWF0aC5oCkBAIC0wLDAgKzEsNDUgQEAKK2RvdWJsZSBfUHlfYWNvc2goZG91YmxlIHgpOworZG91YmxlIF9QeV9hc2luaChkb3VibGUgeCk7Citkb3VibGUgX1B5X2F0YW5oKGRvdWJsZSB4KTsKK2RvdWJsZSBfUHlfZXhwbTEoZG91YmxlIHgpOworZG91YmxlIF9QeV9sb2cxcChkb3VibGUgeCk7CisKKyNpZmRlZiBIQVZFX0FDT1NICisjZGVmaW5lIG1fYWNvc2ggYWNvc2gKKyNlbHNlCisvKiBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBhY29zaCwgdXNlIHRoZSBzdWJzdGl0dXRlCisgICBmdW5jdGlvbiBkZWZpbmVkIGluIE1vZHVsZXMvX21hdGguYy4gKi8KKyNkZWZpbmUgbV9hY29zaCBfUHlfYWNvc2gKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9BU0lOSAorI2RlZmluZSBtX2FzaW5oIGFzaW5oCisjZWxzZQorLyogaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGhhdmUgYXNpbmgsIHVzZSB0aGUgc3Vic3RpdHV0ZQorICAgZnVuY3Rpb24gZGVmaW5lZCBpbiBNb2R1bGVzL19tYXRoLmMuICovCisjZGVmaW5lIG1fYXNpbmggX1B5X2FzaW5oCisjZW5kaWYKKworI2lmZGVmIEhBVkVfQVRBTkgKKyNkZWZpbmUgbV9hdGFuaCBhdGFuaAorI2Vsc2UKKy8qIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGF0YW5oLCB1c2UgdGhlIHN1YnN0aXR1dGUKKyAgIGZ1bmN0aW9uIGRlZmluZWQgaW4gTW9kdWxlcy9fbWF0aC5jLiAqLworI2RlZmluZSBtX2F0YW5oIF9QeV9hdGFuaAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0VYUE0xCisjZGVmaW5lIG1fZXhwbTEgZXhwbTEKKyNlbHNlCisvKiBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBtMSwgdXNlIHRoZSBzdWJzdGl0dXRlCisgICBmdW5jdGlvbiBkZWZpbmVkIGluIE1vZHVsZXMvX21hdGguYy4gKi8KKyNkZWZpbmUgbV9leHBtMSBfUHlfZXhwbTEKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MT0cxUAorI2RlZmluZSBtX2xvZzFwIGxvZzFwCisjZWxzZQorLyogaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGhhdmUgbG9nMXAsIHVzZSB0aGUgc3Vic3RpdHV0ZQorICAgZnVuY3Rpb24gZGVmaW5lZCBpbiBNb2R1bGVzL19tYXRoLmMuICovCisjZGVmaW5lIG1fbG9nMXAgX1B5X2xvZzFwCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLmggYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5oCmluZGV4IGY2ZGI4NTEuLjFkOTdiZDQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLmgKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24uaApAQCAtMTMxLDggKzEzMSwxMiBAQAogCiAgICAgcmVzID0gY29ubl9zZW5kX3N0cmluZyhzZWxmLCBidWZmZXIgKyBvZmZzZXQsIHNpemUpOwogCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihQeUV4Y19JT0Vycm9yLCByZXMpOworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihQeUV4Y19JT0Vycm9yLCByZXMpOworICAgIH0KIAogICAgIFB5X1JFVFVSTl9OT05FOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jCmluZGV4IGU1OTM5NTAuLjkzZjFjNDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYworKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMKQEAgLTgsNiArOCwxMiBAQAogCiAjaW5jbHVkZSAibXVsdGlwcm9jZXNzaW5nLmgiCiAKKyNpZmRlZiBTQ01fUklHSFRTCisgICAgI2RlZmluZSBIQVZFX0ZEX1RSQU5TRkVSIDEKKyNlbHNlCisgICAgI2RlZmluZSBIQVZFX0ZEX1RSQU5TRkVSIDAKKyNlbmRpZgorCiBQeU9iamVjdCAqY3JlYXRlX3dpbjMyX25hbWVzcGFjZSh2b2lkKTsKIAogUHlPYmplY3QgKnBpY2tsZV9kdW1wcywgKnBpY2tsZV9sb2FkcywgKnBpY2tsZV9wcm90b2NvbDsKQEAgLTExNiw3ICsxMjIsNyBAQAogICAgIGNtc2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7CiAgICAgY21zZy0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2YoaW50KSk7CiAgICAgbXNnLm1zZ19jb250cm9sbGVuID0gY21zZy0+Y21zZ19sZW47Ci0gICAgKihpbnQqKUNNU0dfREFUQShjbXNnKSA9IGZkOworICAgICpDTVNHX0RBVEEoY21zZykgPSBmZDsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBzZW5kbXNnKGNvbm4sICZtc2csIDApOwpAQCAtMTU5LDcgKzE2NSw3IEBACiAgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAKLSAgICBmZCA9ICooaW50KilDTVNHX0RBVEEoY21zZyk7CisgICAgZmQgPSAqQ01TR19EQVRBKGNtc2cpOwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgZmQpOwogfQogCkBAIC0yNDQsMTMgKzI1MCwyNSBAQAogICAgIFB5X0lOQ1JFRigmQ29ubmVjdGlvblR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtb2R1bGUsICJDb25uZWN0aW9uIiwgKFB5T2JqZWN0KikmQ29ubmVjdGlvblR5cGUpOwogCi0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBIQVZFX1NFTV9PUEVOCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChkZWZpbmVkKEhBVkVfU0VNX09QRU4pICYmICFkZWZpbmVkKFBPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQpKQogICAgIC8qIEFkZCBTZW1Mb2NrIHR5cGUgdG8gbW9kdWxlICovCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU2VtTG9ja1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwogICAgIFB5X0lOQ1JFRigmU2VtTG9ja1R5cGUpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKFNlbUxvY2tUeXBlLnRwX2RpY3QsICJTRU1fVkFMVUVfTUFYIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeV9CdWlsZFZhbHVlKCJpIiwgU0VNX1ZBTFVFX01BWCkpOworICAgIHsKKyAgICAgICAgUHlPYmplY3QgKnB5X3NlbV92YWx1ZV9tYXg7CisgICAgICAgIC8qIFNvbWUgc3lzdGVtcyBkZWZpbmUgU0VNX1ZBTFVFX01BWCBhcyBhbiB1bnNpZ25lZCB2YWx1ZSB0aGF0CisgICAgICAgICAqIGNhdXNlcyBpdCB0byBiZSBuZWdhdGl2ZSB3aGVuIHVzZWQgYXMgYW4gaW50IChOZXRCU0QpLiAqLworICAgICAgICBpZiAoKGludCkoU0VNX1ZBTFVFX01BWCkgPCAwKQorICAgICAgICAgICAgcHlfc2VtX3ZhbHVlX21heCA9IFB5TG9uZ19Gcm9tTG9uZyhJTlRfTUFYKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHlfc2VtX3ZhbHVlX21heCA9IFB5TG9uZ19Gcm9tTG9uZyhTRU1fVkFMVUVfTUFYKTsKKyAgICAgICAgaWYgKHB5X3NlbV92YWx1ZV9tYXggPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoU2VtTG9ja1R5cGUudHBfZGljdCwgIlNFTV9WQUxVRV9NQVgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweV9zZW1fdmFsdWVfbWF4KTsKKyAgICB9CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG1vZHVsZSwgIlNlbUxvY2siLCAoUHlPYmplY3QqKSZTZW1Mb2NrVHlwZSk7CiAjZW5kaWYKIApAQCAtMjkxLDcgKzMwOSw3IEBACiAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsgUHlfREVDUkVGKHZhbHVlKTsgcmV0dXJuOyB9ICAgICAgICAgICAgICBcCiAgICAgUHlfREVDUkVGKHZhbHVlKQogCi0jaWZkZWYgSEFWRV9TRU1fT1BFTgorI2lmIGRlZmluZWQoSEFWRV9TRU1fT1BFTikgJiYgIWRlZmluZWQoUE9TSVhfU0VNQVBIT1JFU19OT1RfRU5BQkxFRCkKICAgICBBRERfRkxBRyhIQVZFX1NFTV9PUEVOKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfU0VNX1RJTUVEV0FJVApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCmluZGV4IDRmNGY5ZDcuLjE0NDI1ZGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaAorKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKQEAgLTMsNiArMywxMiBAQAogCiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KIAorI2lmZGVmIF9fc3VuCisvKiBUaGUgY29udHJvbCBtZXNzYWdlIEFQSSBpcyBvbmx5IGF2YWlsYWJsZSBvbiBTb2xhcmlzIAorICAgaWYgWFBHIDQuMiBvciBsYXRlciBpcyByZXF1ZXN0ZWQuICovCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNTAwCisjZW5kaWYKKwogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgInB5dGhyZWFkLmgiCkBAIC0xNSw3ICsyMSw3IEBACiAjICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgogIyAgaW5jbHVkZSA8d2luZG93cy5oPgogIyAgaW5jbHVkZSA8d2luc29jazIuaD4KLSMgIGluY2x1ZGUgPHByb2Nlc3MuaD4JCSAgICAgLyogZ2V0cGlkKCkgKi8KKyMgIGluY2x1ZGUgPHByb2Nlc3MuaD4gICAgICAgICAgICAgICAvKiBnZXRwaWQoKSAqLwogIyAgaWZkZWYgUHlfREVCVUcKICMgICAgaW5jbHVkZSA8Y3J0ZGJnLmg+CiAjICBlbmRpZgpAQCAtMjcsNyArMzMsNyBAQAogIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogIyAgaW5jbHVkZSA8c3lzL3Vpby5oPgogIyAgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+ICAgICAgICAgICAgIC8qIGh0b25sKCkgYW5kIG50b2hsKCkgKi8KLSMgIGlmIEhBVkVfU0VNX09QRU4KKyMgIGlmIGRlZmluZWQoSEFWRV9TRU1fT1BFTikgJiYgIWRlZmluZWQoUE9TSVhfU0VNQVBIT1JFU19OT1RfRU5BQkxFRCkKICMgICAgaW5jbHVkZSA8c2VtYXBob3JlLmg+CiAgICAgIHR5cGVkZWYgc2VtX3QgKlNFTV9IQU5ETEU7CiAjICBlbmRpZgpAQCAtNDUsMTMgKzUxLDE4IEBACiAgKiBJc3N1ZSAzMTEwIC0gU29sYXJpcyBkb2VzIG5vdCBkZWZpbmUgU0VNX1ZBTFVFX01BWAogICovCiAjaWZuZGVmIFNFTV9WQUxVRV9NQVgKLSMgIGlmZGVmIF9TRU1fVkFMVUVfTUFYCi0jICAgIGRlZmluZSBTRU1fVkFMVUVfTUFYIF9TRU1fVkFMVUVfTUFYCi0jICBlbHNlCi0jICAgIGRlZmluZSBTRU1fVkFMVUVfTUFYIElOVF9NQVgKLSMgIGVuZGlmCisgICAgI2lmIGRlZmluZWQoSEFWRV9TWVNDT05GKSAmJiBkZWZpbmVkKF9TQ19TRU1fVkFMVUVfTUFYKQorICAgICAgICAjIGRlZmluZSBTRU1fVkFMVUVfTUFYIHN5c2NvbmYoX1NDX1NFTV9WQUxVRV9NQVgpCisgICAgI2VsaWYgZGVmaW5lZChfU0VNX1ZBTFVFX01BWCkKKyAgICAgICAgIyBkZWZpbmUgU0VNX1ZBTFVFX01BWCBfU0VNX1ZBTFVFX01BWAorICAgICNlbGlmIGRlZmluZWQoX1BPU0lYX1NFTV9WQUxVRV9NQVgpCisgICAgICAgICMgZGVmaW5lIFNFTV9WQUxVRV9NQVggX1BPU0lYX1NFTV9WQUxVRV9NQVgKKyAgICAjZWxzZQorICAgICAgICAjIGRlZmluZSBTRU1fVkFMVUVfTUFYIElOVF9NQVgKKyAgICAjZW5kaWYKICNlbmRpZgogCisKIC8qCiAgKiBNYWtlIHN1cmUgUHlfc3NpemVfdCBhdmFpbGFibGUKICAqLwpAQCAtMTU3LDExICsxNjgsMTEgQEAKICNkZWZpbmUgQ09OTkVDVElPTl9CVUZGRVJfU0laRSAxMDI0CiAKIHR5cGVkZWYgc3RydWN0IHsKLQlQeU9iamVjdF9IRUFECi0JSEFORExFIGhhbmRsZTsKLQlpbnQgZmxhZ3M7Ci0JUHlPYmplY3QgKndlYWtyZWZsaXN0OwotCWNoYXIgYnVmZmVyW0NPTk5FQ1RJT05fQlVGRkVSX1NJWkVdOworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIGludCBmbGFnczsKKyAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CisgICAgY2hhciBidWZmZXJbQ09OTkVDVElPTl9CVUZGRVJfU0laRV07CiB9IENvbm5lY3Rpb25PYmplY3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvcGlwZV9jb25uZWN0aW9uLmMgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvcGlwZV9jb25uZWN0aW9uLmMKaW5kZXggZWU1ODM2Zi4uMDVkZGUwYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3BpcGVfY29ubmVjdGlvbi5jCisrKyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9waXBlX2Nvbm5lY3Rpb24uYwpAQCAtMjMsNiArMjMsMTIgQEAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmV0ID0gV3JpdGVGaWxlKGNvbm4tPmhhbmRsZSwgc3RyaW5nLCBsZW5ndGgsICZhbW91bnRfd3JpdHRlbiwgTlVMTCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyZXQgPT0gMCAmJiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9OT19TWVNURU1fUkVTT1VSQ0VTKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiQ2Fubm5vdCBzZW5kICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgYnl0ZXMgb3ZlciBjb25uZWN0aW9uIiwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIE1QX1NUQU5EQVJEX0VSUk9SOworICAgIH0KKwogICAgIHJldHVybiByZXQgPyBNUF9TVUNDRVNTIDogTVBfU1RBTkRBUkRfRVJST1I7CiB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYwppbmRleCAyNjFlNjdjLi41YmRhMWNlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCkBAIC0xOTcsMTEgKzE5NywxMSBAQAogI2RlZmluZSBTRU1fR0VUVkFMVUUoc2VtLCBwdmFsKSBzZW1fZ2V0dmFsdWUoc2VtLCBwdmFsKQogI2RlZmluZSBTRU1fVU5MSU5LKG5hbWUpIHNlbV91bmxpbmsobmFtZSkKIAotI2lmIEhBVkVfQlJPS0VOX1NFTV9VTkxJTksKKyNpZm5kZWYgSEFWRV9TRU1fVU5MSU5LCiAjICBkZWZpbmUgc2VtX3VubGluayhuYW1lKSAwCiAjZW5kaWYKIAotI2lmICFIQVZFX1NFTV9USU1FRFdBSVQKKyNpZm5kZWYgSEFWRV9TRU1fVElNRURXQUlUCiAjICBkZWZpbmUgc2VtX3RpbWVkd2FpdChzZW0sZGVhZGxpbmUpIHNlbV90aW1lZHdhaXRfc2F2ZShzZW0sZGVhZGxpbmUsX3NhdmUpCiAKIGludApAQCAtMzQ4LDcgKzM0OCw3IEBACiAgICAgICAgIH0KICAgICAgICAgYXNzZXJ0KHNlbGYtPmNvdW50ID09IDEpOwogICAgIH0gZWxzZSB7Ci0jaWYgSEFWRV9CUk9LRU5fU0VNX0dFVFZBTFVFCisjaWZkZWYgSEFWRV9CUk9LRU5fU0VNX0dFVFZBTFVFCiAgICAgICAgIC8qIFdlIHdpbGwgb25seSBjaGVjayBwcm9wZXJseSB0aGUgbWF4dmFsdWUgPT0gMSBjYXNlICovCiAgICAgICAgIGlmIChzZWxmLT5tYXh2YWx1ZSA9PSAxKSB7CiAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgdGhhdCBhbHJlYWR5IGxvY2tlZCAqLwpAQCAtNDMzLDcgKzQzMyw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFB5T1Nfc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIi9tcCVkLSVkIiwgZ2V0cGlkKCksIGNvdW50ZXIrKyk7CisgICAgUHlPU19zbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiL21wJWxkLSVkIiwgKGxvbmcpZ2V0cGlkKCksIGNvdW50ZXIrKyk7CiAKICAgICBTRU1fQ0xFQVJfRVJST1IoKTsKICAgICBoYW5kbGUgPSBTRU1fQ1JFQVRFKGJ1ZmZlciwgdmFsdWUsIG1heHZhbHVlKTsKQEAgLTQ5NCw3ICs0OTQsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNlbWxvY2tfZ2V0dmFsdWUoU2VtTG9ja09iamVjdCAqc2VsZikKIHsKLSNpZiBIQVZFX0JST0tFTl9TRU1fR0VUVkFMVUUKKyNpZmRlZiBIQVZFX0JST0tFTl9TRU1fR0VUVkFMVUUKICAgICBQeUVycl9TZXROb25lKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IpOwogICAgIHJldHVybiBOVUxMOwogI2Vsc2UKQEAgLTUxMiw3ICs1MTIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNlbWxvY2tfaXN6ZXJvKFNlbUxvY2tPYmplY3QgKnNlbGYpCiB7Ci0jaWYgSEFWRV9CUk9LRU5fU0VNX0dFVFZBTFVFCisjaWZkZWYgSEFWRV9CUk9LRU5fU0VNX0dFVFZBTFVFCiAgICAgaWYgKHNlbV90cnl3YWl0KHNlbGYtPmhhbmRsZSkgPCAwKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCiAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jIGIvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKaW5kZXggMmQ4MWRhZi4uMDhjMjI3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKQEAgLTYsNyArNiw3IEBACiAKICAgIEl0IHdhcyBtb2RpZmllZCBpbiAyMDAyIGJ5IFJheW1vbmQgSGV0dGluZ2VyIGFzIGZvbGxvd3M6CiAKLSAgICAqIHRoZSBwcmluY2lwYWwgY29tcHV0YXRpb25hbCBsaW5lcyB1bnRvdWNoZWQgZXhjZXB0IGZvciB0YWJiaW5nLgorICAgICogdGhlIHByaW5jaXBhbCBjb21wdXRhdGlvbmFsIGxpbmVzIHVudG91Y2hlZC4KIAogICAgICogcmVuYW1lZCBnZW5yYW5kX3JlczUzKCkgdG8gcmFuZG9tX3JhbmRvbSgpIGFuZCB3cmFwcGVkCiAgICAgICBpbiBweXRob24gY2FsbGluZy9yZXR1cm4gY29kZS4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jIGIvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMKaW5kZXggODUxMThmYy4uMDY1MzM2NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjYWNoZSAuYyAtIGEgTFJVIGNhY2hlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKQEAgLTIxLDYgKzIxLDcgQEAKICAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAgKi8KIAorI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5oIGIvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmgKaW5kZXggZDZmN2YxMy4uYjA5NTE3YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjYWNoZS5oIC0gZGVmaW5pdGlvbnMgZm9yIHRoZSBMUlUgY2FjaGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYyBiL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKaW5kZXggN2VlMTFhOS4uNzY2NjU4MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYworKysgYi9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCkBAIC0xLDYgKzEsNiBAQAogLyogY29ubmVjdGlvbi5jIC0gdGhlIGNvbm5lY3Rpb24gdHlwZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqIApAQCAtMzUsNyArMzUsMTQgQEAKICNkZWZpbmUgQUNUSU9OX0ZJTkFMSVpFIDEKICNkZWZpbmUgQUNUSU9OX1JFU0VUIDIKIAorI2lmIFNRTElURV9WRVJTSU9OX05VTUJFUiA+PSAzMDAzMDA4CisjaWZuZGVmIFNRTElURV9PTUlUX0xPQURfRVhURU5TSU9OCisjZGVmaW5lIEhBVkVfTE9BRF9FWFRFTlNJT04KKyNlbmRpZgorI2VuZGlmCisKIHN0YXRpYyBpbnQgcHlzcWxpdGVfY29ubmVjdGlvbl9zZXRfaXNvbGF0aW9uX2xldmVsKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBpc29sYXRpb25fbGV2ZWwpOworc3RhdGljIHZvaWQgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX2N1cnNvcl9yZWZlcmVuY2VzKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYpOwogCiAKIHN0YXRpYyB2b2lkIF9zcWxpdGUzX3Jlc3VsdF9lcnJvcihzcWxpdGUzX2NvbnRleHQqIGN0eCwgY29uc3QgY2hhciogZXJybXNnLCBpbnQgbGVuKQpAQCAtNzMsMTAgKzgwLDEzIEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKKyAgICBzZWxmLT5pbml0aWFsaXplZCA9IDE7CisKICAgICBzZWxmLT5iZWdpbl9zdGF0ZW1lbnQgPSBOVUxMOwogCiAgICAgc2VsZi0+c3RhdGVtZW50X2NhY2hlID0gTlVMTDsKICAgICBzZWxmLT5zdGF0ZW1lbnRzID0gTlVMTDsKKyAgICBzZWxmLT5jdXJzb3JzID0gTlVMTDsKIAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICBzZWxmLT5yb3dfZmFjdG9yeSA9IFB5X05vbmU7CkBAIC0xNTAsMTEgKzE2MCwxNSBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgc2VsZi0+Y3JlYXRlZF9zdGF0ZW1lbnRzID0gMDsKKyAgICBzZWxmLT5jcmVhdGVkX2N1cnNvcnMgPSAwOworCisgICAgLyogQ3JlYXRlIGxpc3RzIG9mIHdlYWsgcmVmZXJlbmNlcyB0byBzdGF0ZW1lbnRzL2N1cnNvcnMgKi8KICAgICBzZWxmLT5zdGF0ZW1lbnRzID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoIXNlbGYtPnN0YXRlbWVudHMpIHsKKyAgICBzZWxmLT5jdXJzb3JzID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoIXNlbGYtPnN0YXRlbWVudHMgfHwgIXNlbGYtPmN1cnNvcnMpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBzZWxmLT5jcmVhdGVkX3N0YXRlbWVudHMgPSAwOwogCiAgICAgLyogQnkgZGVmYXVsdCwgdGhlIENhY2hlIGNsYXNzIElOQ1JFRnMgdGhlIGZhY3RvcnkgaW4gaXRzIGluaXRpYWxpemVyLCBhbmQKICAgICAgKiBkZWNyZWZzIGl0IGluIGl0cyBkZWFsbG9jYXRvciBtZXRob2QuIFNpbmNlIHRoaXMgd291bGQgY3JlYXRlIGEgY2lyY3VsYXIKQEAgLTIxOCwxMSArMjMyLDEyIEBACiB9CiAKIC8qIGFjdGlvbiBpbiAoQUNUSU9OX1JFU0VULCBBQ1RJT05fRklOQUxJWkUpICovCi12b2lkIHB5c3FsaXRlX2RvX2FsbF9zdGF0ZW1lbnRzKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIGludCBhY3Rpb24pCit2b2lkIHB5c3FsaXRlX2RvX2FsbF9zdGF0ZW1lbnRzKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIGludCBhY3Rpb24sIGludCByZXNldF9jdXJzb3JzKQogewogICAgIGludCBpOwogICAgIFB5T2JqZWN0KiB3ZWFrcmVmOwogICAgIFB5T2JqZWN0KiBzdGF0ZW1lbnQ7CisgICAgcHlzcWxpdGVfQ3Vyc29yKiBjdXJzb3I7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlMaXN0X1NpemUoc2VsZi0+c3RhdGVtZW50cyk7IGkrKykgewogICAgICAgICB3ZWFrcmVmID0gUHlMaXN0X0dldEl0ZW0oc2VsZi0+c3RhdGVtZW50cywgaSk7CkBAIC0yMzUsNiArMjUwLDE2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKKyAgICBpZiAocmVzZXRfY3Vyc29ycykgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlMaXN0X1NpemUoc2VsZi0+Y3Vyc29ycyk7IGkrKykgeworICAgICAgICAgICAgd2Vha3JlZiA9IFB5TGlzdF9HZXRJdGVtKHNlbGYtPmN1cnNvcnMsIGkpOworICAgICAgICAgICAgY3Vyc29yID0gKHB5c3FsaXRlX0N1cnNvciopUHlXZWFrcmVmX0dldE9iamVjdCh3ZWFrcmVmKTsKKyAgICAgICAgICAgIGlmICgoUHlPYmplY3QqKWN1cnNvciAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICAgICAgY3Vyc29yLT5yZXNldCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgcHlzcWxpdGVfY29ubmVjdGlvbl9kZWFsbG9jKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYpCkBAIC0yNjMsMTcgKzI4OCw0MyBAQAogICAgIFB5X1hERUNSRUYoc2VsZi0+dGV4dF9mYWN0b3J5KTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmNvbGxhdGlvbnMpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+c3RhdGVtZW50cyk7CisgICAgUHlfWERFQ1JFRihzZWxmLT5jdXJzb3JzKTsKIAogICAgIHNlbGYtPm9iX3R5cGUtPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKIH0KIAorLyoKKyAqIFJlZ2lzdGVycyBhIGN1cnNvciB3aXRoIHRoZSBjb25uZWN0aW9uLgorICoKKyAqIDAgPT4gZXJyb3I7IDEgPT4gb2sKKyAqLworaW50IHB5c3FsaXRlX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfY3Vyc29yKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIFB5T2JqZWN0KiBjdXJzb3IpCit7CisgICAgUHlPYmplY3QqIHdlYWtyZWY7CisKKyAgICB3ZWFrcmVmID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QqKWN1cnNvciwgTlVMTCk7CisgICAgaWYgKCF3ZWFrcmVmKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKFB5TGlzdF9BcHBlbmQoY29ubmVjdGlvbi0+Y3Vyc29ycywgd2Vha3JlZikgIT0gMCkgeworICAgICAgICBQeV9DTEVBUih3ZWFrcmVmKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBQeV9ERUNSRUYod2Vha3JlZik7CisKKyAgICByZXR1cm4gMTsKK2Vycm9yOgorICAgIHJldHVybiAwOworfQorCiBQeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9jdXJzb3IocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmYWN0b3J5IiwgTlVMTCwgTlVMTH07CiAgICAgUHlPYmplY3QqIGZhY3RvcnkgPSBOVUxMOwogICAgIFB5T2JqZWN0KiBjdXJzb3I7CiAKLQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPIiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYWN0b3J5KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI4OSw2ICszNDAsOCBAQAogCiAgICAgY3Vyc29yID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZhY3RvcnksICJPIiwgc2VsZik7CiAKKyAgICBfcHlzcWxpdGVfZHJvcF91bnVzZWRfY3Vyc29yX3JlZmVyZW5jZXMoc2VsZik7CisKICAgICBpZiAoY3Vyc29yICYmIHNlbGYtPnJvd19mYWN0b3J5ICE9IFB5X05vbmUpIHsKICAgICAgICAgUHlfWERFQ1JFRigoKHB5c3FsaXRlX0N1cnNvciopY3Vyc29yKS0+cm93X2ZhY3RvcnkpOwogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+cm93X2ZhY3RvcnkpOwpAQCAtMzA3LDcgKzM2MCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHB5c3FsaXRlX2RvX2FsbF9zdGF0ZW1lbnRzKHNlbGYsIEFDVElPTl9GSU5BTElaRSk7CisgICAgcHlzcWxpdGVfZG9fYWxsX3N0YXRlbWVudHMoc2VsZiwgQUNUSU9OX0ZJTkFMSVpFLCAxKTsKIAogICAgIGlmIChzZWxmLT5kYikgewogICAgICAgICBpZiAoc2VsZi0+YXBzd19jb25uZWN0aW9uKSB7CkBAIC0zNDEsNiArMzk0LDExIEBACiAgKi8KIGludCBweXNxbGl0ZV9jaGVja19jb25uZWN0aW9uKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIGNvbikKIHsKKyAgICBpZiAoIWNvbi0+aW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJCYXNlIENvbm5lY3Rpb24uX19pbml0X18gbm90IGNhbGxlZC4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgaWYgKCFjb24tPmRiKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiQ2Fubm90IG9wZXJhdGUgb24gYSBjbG9zZWQgZGF0YWJhc2UuIik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMzk5LDYgKzQ1Nyw4IEBACiAgICAgfQogCiAgICAgaWYgKHNlbGYtPmluVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgcHlzcWxpdGVfZG9fYWxsX3N0YXRlbWVudHMoc2VsZiwgQUNUSU9OX1JFU0VULCAwKTsKKwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJjID0gc3FsaXRlM19wcmVwYXJlKHNlbGYtPmRiLCAiQ09NTUlUIiwgLTEsICZzdGF0ZW1lbnQsICZ0YWlsKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTQ0Myw3ICs1MDMsNyBAQAogICAgIH0KIAogICAgIGlmIChzZWxmLT5pblRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIHB5c3FsaXRlX2RvX2FsbF9zdGF0ZW1lbnRzKHNlbGYsIEFDVElPTl9SRVNFVCk7CisgICAgICAgIHB5c3FsaXRlX2RvX2FsbF9zdGF0ZW1lbnRzKHNlbGYsIEFDVElPTl9SRVNFVCwgMSk7CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICByYyA9IHNxbGl0ZTNfcHJlcGFyZShzZWxmLT5kYiwgIlJPTExCQUNLIiwgLTEsICZzdGF0ZW1lbnQsICZ0YWlsKTsKQEAgLTY4NSw3ICs3NDUsNiBAQAogewogICAgIFB5T2JqZWN0KiBmdW5jdGlvbl9yZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0KiogYWdncmVnYXRlX2luc3RhbmNlOwotICAgIFB5T2JqZWN0KiBhZ2dyZWdhdGVfY2xhc3M7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIFB5R0lMU3RhdGVfU1RBVEUgdGhyZWFkc3RhdGU7CkBAIC02OTMsOCArNzUyLDYgQEAKICAgICB0aHJlYWRzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKIAotICAgIGFnZ3JlZ2F0ZV9jbGFzcyA9IChQeU9iamVjdCopc3FsaXRlM191c2VyX2RhdGEoY29udGV4dCk7Ci0KICAgICBhZ2dyZWdhdGVfaW5zdGFuY2UgPSAoUHlPYmplY3QqKilzcWxpdGUzX2FnZ3JlZ2F0ZV9jb250ZXh0KGNvbnRleHQsIHNpemVvZihQeU9iamVjdCopKTsKICAgICBpZiAoISphZ2dyZWdhdGVfaW5zdGFuY2UpIHsKICAgICAgICAgLyogdGhpcyBicmFuY2ggaXMgZXhlY3V0ZWQgaWYgdGhlcmUgd2FzIGFuIGV4Y2VwdGlvbiBpbiB0aGUgYWdncmVnYXRlJ3MKQEAgLTcyNCw3ICs3ODEsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX3N0YXRlbWVudF9yZWZlcmVuY2VzKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYpCitzdGF0aWMgdm9pZCBfcHlzcWxpdGVfZHJvcF91bnVzZWRfc3RhdGVtZW50X3JlZmVyZW5jZXMocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZikKIHsKICAgICBQeU9iamVjdCogbmV3X2xpc3Q7CiAgICAgUHlPYmplY3QqIHdlYWtyZWY7CkBAIC03NTYsNiArODEzLDM4IEBACiAgICAgc2VsZi0+c3RhdGVtZW50cyA9IG5ld19saXN0OwogfQogCitzdGF0aWMgdm9pZCBfcHlzcWxpdGVfZHJvcF91bnVzZWRfY3Vyc29yX3JlZmVyZW5jZXMocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZikKK3sKKyAgICBQeU9iamVjdCogbmV3X2xpc3Q7CisgICAgUHlPYmplY3QqIHdlYWtyZWY7CisgICAgaW50IGk7CisKKyAgICAvKiB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlIGluIGEgd2hpbGUgKi8KKyAgICBpZiAoc2VsZi0+Y3JlYXRlZF9jdXJzb3JzKysgPCAyMDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNlbGYtPmNyZWF0ZWRfY3Vyc29ycyA9IDA7CisKKyAgICBuZXdfbGlzdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKCFuZXdfbGlzdCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9TaXplKHNlbGYtPmN1cnNvcnMpOyBpKyspIHsKKyAgICAgICAgd2Vha3JlZiA9IFB5TGlzdF9HZXRJdGVtKHNlbGYtPmN1cnNvcnMsIGkpOworICAgICAgICBpZiAoUHlXZWFrcmVmX0dldE9iamVjdCh3ZWFrcmVmKSAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChuZXdfbGlzdCwgd2Vha3JlZikgIT0gMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdfbGlzdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgUHlfREVDUkVGKHNlbGYtPmN1cnNvcnMpOworICAgIHNlbGYtPmN1cnNvcnMgPSBuZXdfbGlzdDsKK30KKwogUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fY3JlYXRlX2Z1bmN0aW9uKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsibmFtZSIsICJuYXJnIiwgImZ1bmMiLCBOVUxMLCBOVUxMfTsKQEAgLTc4Miw3ICs4NzEsOCBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfT3BlcmF0aW9uYWxFcnJvciwgIkVycm9yIGNyZWF0aW5nIGZ1bmN0aW9uIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtKHNlbGYtPmZ1bmN0aW9uX3BpbmJvYXJkLCBmdW5jLCBQeV9Ob25lKTsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHNlbGYtPmZ1bmN0aW9uX3BpbmJvYXJkLCBmdW5jLCBQeV9Ob25lKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC04MTMsNyArOTAzLDggQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX09wZXJhdGlvbmFsRXJyb3IsICJFcnJvciBjcmVhdGluZyBhZ2dyZWdhdGUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZnVuY3Rpb25fcGluYm9hcmQsIGFnZ3JlZ2F0ZV9jbGFzcywgUHlfTm9uZSk7CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzZWxmLT5mdW5jdGlvbl9waW5ib2FyZCwgYWdncmVnYXRlX2NsYXNzLCBQeV9Ob25lKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC04ODUsNyArOTc2LDcgQEAKICAgICByZXR1cm4gcmM7CiB9CiAKLVB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9hdXRob3JpemVyKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQorc3RhdGljIFB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9hdXRob3JpemVyKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewogICAgIFB5T2JqZWN0KiBhdXRob3JpemVyX2NiOwogCkBAIC05MDcsMTQgKzk5OCwxNSBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfT3BlcmF0aW9uYWxFcnJvciwgIkVycm9yIHNldHRpbmcgYXV0aG9yaXplciBjYWxsYmFjayIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBQeURpY3RfU2V0SXRlbShzZWxmLT5mdW5jdGlvbl9waW5ib2FyZCwgYXV0aG9yaXplcl9jYiwgUHlfTm9uZSk7CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzZWxmLT5mdW5jdGlvbl9waW5ib2FyZCwgYXV0aG9yaXplcl9jYiwgUHlfTm9uZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KIH0KIAotUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fc2V0X3Byb2dyZXNzX2hhbmRsZXIocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCitzdGF0aWMgUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fc2V0X3Byb2dyZXNzX2hhbmRsZXIocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7CiAgICAgUHlPYmplY3QqIHByb2dyZXNzX2hhbmRsZXI7CiAgICAgaW50IG47CkBAIC05MzUsMTMgKzEwMjcsNjQgQEAKICAgICAgICAgc3FsaXRlM19wcm9ncmVzc19oYW5kbGVyKHNlbGYtPmRiLCAwLCAwLCAodm9pZCopMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3FsaXRlM19wcm9ncmVzc19oYW5kbGVyKHNlbGYtPmRiLCBuLCBfcHJvZ3Jlc3NfaGFuZGxlciwgcHJvZ3Jlc3NfaGFuZGxlcik7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtKHNlbGYtPmZ1bmN0aW9uX3BpbmJvYXJkLCBwcm9ncmVzc19oYW5kbGVyLCBQeV9Ob25lKTsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHNlbGYtPmZ1bmN0aW9uX3BpbmJvYXJkLCBwcm9ncmVzc19oYW5kbGVyLCBQeV9Ob25lKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorI2lmZGVmIEhBVkVfTE9BRF9FWFRFTlNJT04KK3N0YXRpYyBQeU9iamVjdCogcHlzcWxpdGVfZW5hYmxlX2xvYWRfZXh0ZW5zaW9uKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCByYzsKKyAgICBpbnQgb25vZmY7CisKKyAgICBpZiAoIXB5c3FsaXRlX2NoZWNrX3RocmVhZChzZWxmKSB8fCAhcHlzcWxpdGVfY2hlY2tfY29ubmVjdGlvbihzZWxmKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImkiLCAmb25vZmYpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJjID0gc3FsaXRlM19lbmFibGVfbG9hZF9leHRlbnNpb24oc2VsZi0+ZGIsIG9ub2ZmKTsKKworICAgIGlmIChyYyAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX09wZXJhdGlvbmFsRXJyb3IsICJFcnJvciBlbmFibGluZyBsb2FkIGV4dGVuc2lvbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0KiBweXNxbGl0ZV9sb2FkX2V4dGVuc2lvbihweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgcmM7CisgICAgY2hhciogZXh0ZW5zaW9uX25hbWU7CisgICAgY2hhciogZXJybXNnOworCisgICAgaWYgKCFweXNxbGl0ZV9jaGVja190aHJlYWQoc2VsZikgfHwgIXB5c3FsaXRlX2NoZWNrX2Nvbm5lY3Rpb24oc2VsZikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJmV4dGVuc2lvbl9uYW1lKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByYyA9IHNxbGl0ZTNfbG9hZF9leHRlbnNpb24oc2VsZi0+ZGIsIGV4dGVuc2lvbl9uYW1lLCAwLCAmZXJybXNnKTsKKyAgICBpZiAocmMgIT0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfT3BlcmF0aW9uYWxFcnJvciwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9Cit9CisjZW5kaWYKKwogaW50IHB5c3FsaXRlX2NoZWNrX3RocmVhZChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmKQogewogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0xMzM1LDkgKzE0NzgsMTEgQEAKICAgICB9CiAKICAgICBpZiAoY2FsbGFibGUgIT0gUHlfTm9uZSkgewotICAgICAgICBQeURpY3RfU2V0SXRlbShzZWxmLT5jb2xsYXRpb25zLCB1cHBlcmNhc2VfbmFtZSwgY2FsbGFibGUpOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc2VsZi0+Y29sbGF0aW9ucywgdXBwZXJjYXNlX25hbWUsIGNhbGxhYmxlKSA9PSAtMSkKKyAgICAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICB9IGVsc2UgewotICAgICAgICBQeURpY3RfRGVsSXRlbShzZWxmLT5jb2xsYXRpb25zLCB1cHBlcmNhc2VfbmFtZSk7CisgICAgICAgIGlmIChQeURpY3RfRGVsSXRlbShzZWxmLT5jb2xsYXRpb25zLCB1cHBlcmNhc2VfbmFtZSkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgfQogCiAgICAgcmMgPSBzcWxpdGUzX2NyZWF0ZV9jb2xsYXRpb24oc2VsZi0+ZGIsCkBAIC0xNDI2LDYgKzE1NzEsMTIgQEAKICAgICAgICAgUHlEb2NfU1RSKCJDcmVhdGVzIGEgbmV3IGFnZ3JlZ2F0ZS4gTm9uLXN0YW5kYXJkLiIpfSwKICAgICB7InNldF9hdXRob3JpemVyIiwgKFB5Q0Z1bmN0aW9uKXB5c3FsaXRlX2Nvbm5lY3Rpb25fc2V0X2F1dGhvcml6ZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAogICAgICAgICBQeURvY19TVFIoIlNldHMgYXV0aG9yaXplciBjYWxsYmFjay4gTm9uLXN0YW5kYXJkLiIpfSwKKyAgICAjaWZkZWYgSEFWRV9MT0FEX0VYVEVOU0lPTgorICAgIHsiZW5hYmxlX2xvYWRfZXh0ZW5zaW9uIiwgKFB5Q0Z1bmN0aW9uKXB5c3FsaXRlX2VuYWJsZV9sb2FkX2V4dGVuc2lvbiwgTUVUSF9WQVJBUkdTLAorICAgICAgICBQeURvY19TVFIoIkVuYWJsZSBkeW5hbWljIGxvYWRpbmcgb2YgU1FMaXRlIGV4dGVuc2lvbiBtb2R1bGVzLiBOb24tc3RhbmRhcmQuIil9LAorICAgIHsibG9hZF9leHRlbnNpb24iLCAoUHlDRnVuY3Rpb24pcHlzcWxpdGVfbG9hZF9leHRlbnNpb24sIE1FVEhfVkFSQVJHUywKKyAgICAgICAgUHlEb2NfU1RSKCJMb2FkIFNRTGl0ZSBleHRlbnNpb24gbW9kdWxlLiBOb24tc3RhbmRhcmQuIil9LAorICAgICNlbmRpZgogICAgIHsic2V0X3Byb2dyZXNzX2hhbmRsZXIiLCAoUHlDRnVuY3Rpb24pcHlzcWxpdGVfY29ubmVjdGlvbl9zZXRfcHJvZ3Jlc3NfaGFuZGxlciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIFB5RG9jX1NUUigiU2V0cyBwcm9ncmVzcyBoYW5kbGVyIGNhbGxiYWNrLiBOb24tc3RhbmRhcmQuIil9LAogICAgIHsiZXhlY3V0ZSIsIChQeUNGdW5jdGlvbilweXNxbGl0ZV9jb25uZWN0aW9uX2V4ZWN1dGUsIE1FVEhfVkFSQVJHUywKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmggYi9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5oCmluZGV4IDNiMWM2MzIuLjNmYzVhNzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uaApAQCAtMSw2ICsxLDYgQEAKIC8qIGNvbm5lY3Rpb24uaCAtIGRlZmluaXRpb25zIGZvciB0aGUgY29ubmVjdGlvbiB0eXBlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKQEAgLTYzLDE3ICs2MywyMSBAQAogICAgICAqIHVzZWQgZnJvbSB0aGUgc2FtZSB0aHJlYWQgaXQgd2FzIGNyZWF0ZWQgaW4gKi8KICAgICBpbnQgY2hlY2tfc2FtZV90aHJlYWQ7CiAKKyAgICBpbnQgaW5pdGlhbGl6ZWQ7CisKICAgICAvKiB0aHJlYWQgaWRlbnRpZmljYXRpb24gb2YgdGhlIHRocmVhZCB0aGUgY29ubmVjdGlvbiB3YXMgY3JlYXRlZCBpbiAqLwogICAgIGxvbmcgdGhyZWFkX2lkZW50OwogCiAgICAgcHlzcWxpdGVfQ2FjaGUqIHN0YXRlbWVudF9jYWNoZTsKIAotICAgIC8qIEEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gc3RhdGVtZW50cyB1c2VkIHdpdGhpbiB0aGlzIGNvbm5lY3Rpb24gKi8KKyAgICAvKiBMaXN0cyBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gc3RhdGVtZW50cyBhbmQgY3Vyc29ycyB1c2VkIHdpdGhpbiB0aGlzIGNvbm5lY3Rpb24gKi8KICAgICBQeU9iamVjdCogc3RhdGVtZW50czsKKyAgICBQeU9iamVjdCogY3Vyc29yczsKIAotICAgIC8qIGEgY291bnRlciBmb3IgaG93IG1hbnkgc3RhdGVtZW50cyB3ZXJlIGNyZWF0ZWQgaW4gdGhlIGNvbm5lY3Rpb24uIE1heSBiZQorICAgIC8qIENvdW50ZXJzIGZvciBob3cgbWFueSBzdGF0ZW1lbnRzL2N1cnNvcnMgd2VyZSBjcmVhdGVkIGluIHRoZSBjb25uZWN0aW9uLiBNYXkgYmUKICAgICAgKiByZXNldCB0byAwIGF0IGNlcnRhaW4gaW50ZXJ2YWxzICovCiAgICAgaW50IGNyZWF0ZWRfc3RhdGVtZW50czsKKyAgICBpbnQgY3JlYXRlZF9jdXJzb3JzOwogCiAgICAgUHlPYmplY3QqIHJvd19mYWN0b3J5OwogCkBAIC0xMjUsNiArMTI5LDcgQEAKIFB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX25ldyhQeVR5cGVPYmplY3QqIHR5cGUsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpOwogaW50IHB5c3FsaXRlX2Nvbm5lY3Rpb25faW5pdChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncyk7CiAKK2ludCBweXNxbGl0ZV9jb25uZWN0aW9uX3JlZ2lzdGVyX2N1cnNvcihweXNxbGl0ZV9Db25uZWN0aW9uKiBjb25uZWN0aW9uLCBQeU9iamVjdCogY3Vyc29yKTsKIGludCBweXNxbGl0ZV9jaGVja190aHJlYWQocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZik7CiBpbnQgcHlzcWxpdGVfY2hlY2tfY29ubmVjdGlvbihweXNxbGl0ZV9Db25uZWN0aW9uKiBjb24pOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKaW5kZXggNjU3MmE1NS4uMjZlMzMwNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGN1cnNvci5jIC0gdGhlIGN1cnNvciB0eXBlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKQEAgLTM2LDYgKzM2LDggQEAKIAogUHlPYmplY3QqIHB5c3FsaXRlX2N1cnNvcl9pdGVybmV4dChweXNxbGl0ZV9DdXJzb3IqIHNlbGYpOwogCitzdGF0aWMgY2hhciogZXJybXNnX2ZldGNoX2Fjcm9zc19yb2xsYmFjayA9ICJDdXJzb3IgbmVlZGVkIHRvIGJlIHJlc2V0IGJlY2F1c2Ugb2YgY29tbWl0L3JvbGxiYWNrIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIGZldGNoZWQgZnJvbS4iOworCiBzdGF0aWMgcHlzcWxpdGVfU3RhdGVtZW50S2luZCBkZXRlY3Rfc3RhdGVtZW50X3R5cGUoY2hhciogc3RhdGVtZW50KQogewogICAgIGNoYXIgYnVmWzIwXTsKQEAgLTc0LDcgKzc2LDcgQEAKICAgICB9CiB9CiAKLWludCBweXNxbGl0ZV9jdXJzb3JfaW5pdChweXNxbGl0ZV9DdXJzb3IqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQorc3RhdGljIGludCBweXNxbGl0ZV9jdXJzb3JfaW5pdChweXNxbGl0ZV9DdXJzb3IqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewogICAgIHB5c3FsaXRlX0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb247CiAKQEAgLTg3LDYgKzg5LDcgQEAKICAgICBzZWxmLT5jb25uZWN0aW9uID0gY29ubmVjdGlvbjsKICAgICBzZWxmLT5zdGF0ZW1lbnQgPSBOVUxMOwogICAgIHNlbGYtPm5leHRfcm93ID0gTlVMTDsKKyAgICBzZWxmLT5pbl93ZWFrcmVmbGlzdCA9IE5VTEw7CiAKICAgICBzZWxmLT5yb3dfY2FzdF9tYXAgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmICghc2VsZi0+cm93X2Nhc3RfbWFwKSB7CkBAIC0xMDAsNiArMTAzLDggQEAKICAgICBzZWxmLT5sYXN0cm93aWQ9IFB5X05vbmU7CiAKICAgICBzZWxmLT5hcnJheXNpemUgPSAxOworICAgIHNlbGYtPmNsb3NlZCA9IDA7CisgICAgc2VsZi0+cmVzZXQgPSAwOwogCiAgICAgc2VsZi0+cm93Y291bnQgPSAtMUw7CiAKQEAgLTExMCwxMCArMTE1LDE2IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKKyAgICBpZiAoIXB5c3FsaXRlX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfY3Vyc29yKGNvbm5lY3Rpb24sIChQeU9iamVjdCopc2VsZikpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHNlbGYtPmluaXRpYWxpemVkID0gMTsKKwogICAgIHJldHVybiAwOwogfQogCi12b2lkIHB5c3FsaXRlX2N1cnNvcl9kZWFsbG9jKHB5c3FsaXRlX0N1cnNvciogc2VsZikKK3N0YXRpYyB2b2lkIHB5c3FsaXRlX2N1cnNvcl9kZWFsbG9jKHB5c3FsaXRlX0N1cnNvciogc2VsZikKIHsKICAgICBpbnQgcmM7CiAKQEAgLTEzMCw3ICsxNDEsMTEgQEAKICAgICBQeV9YREVDUkVGKHNlbGYtPnJvd19mYWN0b3J5KTsKICAgICBQeV9YREVDUkVGKHNlbGYtPm5leHRfcm93KTsKIAotICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKKyAgICBpZiAoc2VsZi0+aW5fd2Vha3JlZmxpc3QgIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCopc2VsZik7CisgICAgfQorCisgICAgc2VsZi0+b2JfdHlwZS0+dHBfZnJlZSgoUHlPYmplY3QqKXNlbGYpOwogfQogCiBQeU9iamVjdCogX3B5c3FsaXRlX2dldF9jb252ZXJ0ZXIoUHlPYmplY3QqIGtleSkKQEAgLTMwMSw2ICszMTYsMTEgQEAKICAgICBjaGFyIGJ1ZlsyMDBdOwogICAgIGNvbnN0IGNoYXIqIGNvbG5hbWU7CiAKKyAgICBpZiAoc2VsZi0+cmVzZXQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX0ludGVyZmFjZUVycm9yLCBlcnJtc2dfZmV0Y2hfYWNyb3NzX3JvbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIG51bWNvbHMgPSBzcWxpdGUzX2RhdGFfY291bnQoc2VsZi0+c3RhdGVtZW50LT5zdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTQwNiw2ICs0MjYsMjYgQEAKICAgICByZXR1cm4gcm93OwogfQogCisvKgorICogQ2hlY2tzIGlmIGEgY3Vyc29yIG9iamVjdCBpcyB1c2FibGUuCisgKgorICogMCA9PiBlcnJvcjsgMSA9PiBvaworICovCitzdGF0aWMgaW50IGNoZWNrX2N1cnNvcihweXNxbGl0ZV9DdXJzb3IqIGN1cikKK3sKKyAgICBpZiAoIWN1ci0+aW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJCYXNlIEN1cnNvci5fX2luaXRfXyBub3QgY2FsbGVkLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoY3VyLT5jbG9zZWQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJDYW5ub3Qgb3BlcmF0ZSBvbiBhIGNsb3NlZCBjdXJzb3IuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBweXNxbGl0ZV9jaGVja190aHJlYWQoY3VyLT5jb25uZWN0aW9uKSAmJiBweXNxbGl0ZV9jaGVja19jb25uZWN0aW9uKGN1ci0+Y29ubmVjdGlvbik7CisgICAgfQorfQorCiBQeU9iamVjdCogX3B5c3FsaXRlX3F1ZXJ5X2V4ZWN1dGUocHlzcWxpdGVfQ3Vyc29yKiBzZWxmLCBpbnQgbXVsdGlwbGUsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIFB5T2JqZWN0KiBvcGVyYXRpb247CkBAIC00MjUsMTMgKzQ2NSwxNSBAQAogICAgIFB5T2JqZWN0KiBzZWNvbmRfYXJndW1lbnQgPSBOVUxMOwogICAgIGludCBhbGxvd184Yml0X2NoYXJzOwogCi0gICAgaWYgKCFweXNxbGl0ZV9jaGVja190aHJlYWQoc2VsZi0+Y29ubmVjdGlvbikgfHwgIXB5c3FsaXRlX2NoZWNrX2Nvbm5lY3Rpb24oc2VsZi0+Y29ubmVjdGlvbikpIHsKKyAgICBpZiAoIWNoZWNrX2N1cnNvcihzZWxmKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBzZWxmLT5yZXNldCA9IDA7CisKICAgICAvKiBNYWtlIHNob290aW5nIHlvdXJzZWxmIGluIHRoZSBmb290IHdpdGggbm90IHV0Zi04IGRlY29kYWJsZSA4LWJpdC1zdHJpbmdzIGhhcmRlciAqLwogICAgIGFsbG93XzhiaXRfY2hhcnMgPSAoKHNlbGYtPmNvbm5lY3Rpb24tPnRleHRfZmFjdG9yeSAhPSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgJiYKLSAgICAgICAgKHNlbGYtPmNvbm5lY3Rpb24tPnRleHRfZmFjdG9yeSAhPSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSAmJiBweXNxbGl0ZV9PcHRpbWl6ZWRVbmljb2RlKSk7CisgICAgICAgIChzZWxmLT5jb25uZWN0aW9uLT50ZXh0X2ZhY3RvcnkgIT0gcHlzcWxpdGVfT3B0aW1pemVkVW5pY29kZSkpOwogCiAgICAgUHlfWERFQ1JFRihzZWxmLT5uZXh0X3Jvdyk7CiAgICAgc2VsZi0+bmV4dF9yb3cgPSBOVUxMOwpAQCAtNzUzLDE2ICs3OTUsMTcgQEAKICAgICBzcWxpdGUzX3N0bXQqIHN0YXRlbWVudDsKICAgICBpbnQgcmM7CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKLSAgICBpbnQgc3RhdGVtZW50X2NvbXBsZXRlZCA9IDA7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmc2NyaXB0X29iaikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKCFweXNxbGl0ZV9jaGVja190aHJlYWQoc2VsZi0+Y29ubmVjdGlvbikgfHwgIXB5c3FsaXRlX2NoZWNrX2Nvbm5lY3Rpb24oc2VsZi0+Y29ubmVjdGlvbikpIHsKKyAgICBpZiAoIWNoZWNrX2N1cnNvcihzZWxmKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBzZWxmLT5yZXNldCA9IDA7CisKICAgICBpZiAoUHlTdHJpbmdfQ2hlY2soc2NyaXB0X29iaikpIHsKICAgICAgICAgc2NyaXB0X2NzdHIgPSBQeVN0cmluZ19Bc1N0cmluZyhzY3JpcHRfb2JqKTsKICAgICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhzY3JpcHRfb2JqKSkgewpAQCAtNzg1LDExICs4MjgsNiBAQAogICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogCiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKCFzcWxpdGUzX2NvbXBsZXRlKHNjcmlwdF9jc3RyKSkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGVtZW50X2NvbXBsZXRlZCA9IDE7Ci0KICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICByYyA9IHNxbGl0ZTNfcHJlcGFyZShzZWxmLT5jb25uZWN0aW9uLT5kYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2NzdHIsCkBAIC04MjAsMTUgKzg1OCwxNSBAQAogICAgICAgICAgICAgX3B5c3FsaXRlX3NldGVycm9yKHNlbGYtPmNvbm5lY3Rpb24tPmRiLCBOVUxMKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoKnNjcmlwdF9jc3RyID09IChjaGFyKTApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiBlcnJvcjoKICAgICBQeV9YREVDUkVGKHNjcmlwdF9zdHIpOwogCi0gICAgaWYgKCFzdGF0ZW1lbnRfY29tcGxldGVkKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAieW91IGRpZCBub3QgcHJvdmlkZSBhIGNvbXBsZXRlIFNRTCBzdGF0ZW1lbnQiKTsKLSAgICB9Ci0KICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewpAQCAtODQ5LDcgKzg4NywxMiBAQAogICAgIFB5T2JqZWN0KiBuZXh0X3JvdzsKICAgICBpbnQgcmM7CiAKLSAgICBpZiAoIXB5c3FsaXRlX2NoZWNrX3RocmVhZChzZWxmLT5jb25uZWN0aW9uKSB8fCAhcHlzcWxpdGVfY2hlY2tfY29ubmVjdGlvbihzZWxmLT5jb25uZWN0aW9uKSkgeworICAgIGlmICghY2hlY2tfY3Vyc29yKHNlbGYpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChzZWxmLT5yZXNldCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfSW50ZXJmYWNlRXJyb3IsIGVycm1zZ19mZXRjaF9hY3Jvc3Nfcm9sbGJhY2spOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTk5Miw2ICsxMDM1LDggQEAKICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+c3RhdGVtZW50KTsKICAgICB9CiAKKyAgICBzZWxmLT5jbG9zZWQgPSAxOworCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtMTA1MiwxMiArMTA5NywxMiBAQAogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICAgICAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9JVEVSfFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCisgICAgICAgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfSVRFUnxQeV9UUEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxBR1NfSEFWRV9XRUFLUkVGUywgLyogdHBfZmxhZ3MgKi8KICAgICAgICAgY3Vyc29yX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgICAgIG9mZnNldG9mKHB5c3FsaXRlX0N1cnNvciwgaW5fd2Vha3JlZmxpc3QpLCAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgICAgIChnZXRpdGVyZnVuYylweXNxbGl0ZV9jdXJzb3JfZ2V0aXRlciwgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAgICAgKGl0ZXJuZXh0ZnVuYylweXNxbGl0ZV9jdXJzb3JfaXRlcm5leHQsICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICAgICAgY3Vyc29yX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5oIGIvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5oCmluZGV4IDU0ZDgxNmQuLjgyZjU5NzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuaAorKysgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjdXJzb3IuaCAtIGRlZmluaXRpb25zIGZvciB0aGUgY3Vyc29yIHR5cGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpAQCAtNDAsOSArNDAsMTQgQEAKICAgICBsb25nIHJvd2NvdW50OwogICAgIFB5T2JqZWN0KiByb3dfZmFjdG9yeTsKICAgICBweXNxbGl0ZV9TdGF0ZW1lbnQqIHN0YXRlbWVudDsKKyAgICBpbnQgY2xvc2VkOworICAgIGludCByZXNldDsKKyAgICBpbnQgaW5pdGlhbGl6ZWQ7CiAKICAgICAvKiB0aGUgbmV4dCByb3cgdG8gYmUgcmV0dXJuZWQsIE5VTEwgaWYgbm8gbmV4dCByb3cgYXZhaWxhYmxlICovCiAgICAgUHlPYmplY3QqIG5leHRfcm93OworCisgICAgUHlPYmplY3QqIGluX3dlYWtyZWZsaXN0OyAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwogfSBweXNxbGl0ZV9DdXJzb3I7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC01Myw4ICs1OCw2IEBACiAKIGV4dGVybiBQeVR5cGVPYmplY3QgcHlzcWxpdGVfQ3Vyc29yVHlwZTsKIAotaW50IHB5c3FsaXRlX2N1cnNvcl9pbml0KHB5c3FsaXRlX0N1cnNvciogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpOwotdm9pZCBweXNxbGl0ZV9jdXJzb3JfZGVhbGxvYyhweXNxbGl0ZV9DdXJzb3IqIHNlbGYpOwogUHlPYmplY3QqIHB5c3FsaXRlX2N1cnNvcl9leGVjdXRlKHB5c3FsaXRlX0N1cnNvciogc2VsZiwgUHlPYmplY3QqIGFyZ3MpOwogUHlPYmplY3QqIHB5c3FsaXRlX2N1cnNvcl9leGVjdXRlbWFueShweXNxbGl0ZV9DdXJzb3IqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKTsKIFB5T2JqZWN0KiBweXNxbGl0ZV9jdXJzb3JfZ2V0aXRlcihweXNxbGl0ZV9DdXJzb3IgKnNlbGYpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jIGIvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCmluZGV4IGMxNmI3YzcuLjMzNjExZDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKQEAgLTEsNiArMSw2IEBACiAvKiBtb2R1bGUuYyAtIHRoZSBtb2R1bGUgaXRzZWxmCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuaCBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuaAppbmRleCBiMTRiZTJhLi44ZDE3ZDYxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5oCkBAIC0xLDYgKzEsNiBAQAogLyogbW9kdWxlLmggLSBkZWZpbml0aW9ucyBmb3IgdGhlIG1vZHVsZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIFBZU1FMSVRFX01PRFVMRV9ICiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKLSNkZWZpbmUgUFlTUUxJVEVfVkVSU0lPTiAiMi40LjEiCisjZGVmaW5lIFBZU1FMSVRFX1ZFUlNJT04gIjIuNi4wIgogCiBleHRlcm4gUHlPYmplY3QqIHB5c3FsaXRlX0Vycm9yOwogZXh0ZXJuIFB5T2JqZWN0KiBweXNxbGl0ZV9XYXJuaW5nOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYyBiL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKaW5kZXggYzAxOGM5Ni4uOWVkMjVlMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCkBAIC0xLDYgKzEsNiBAQAogLyogcHJlcGFyZV9wcm90b2NvbC5jIC0gdGhlIHByb3RvY29sIGZvciBwcmVwYXJpbmcgdmFsdWVzIGZvciBTUUxpdGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpAQCAtMjEsNiArMjEsNyBAQAogICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KICAqLwogCisjaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAjaW5jbHVkZSAicHJlcGFyZV9wcm90b2NvbC5oIgogCiBpbnQgcHlzcWxpdGVfcHJlcGFyZV9wcm90b2NvbF9pbml0KHB5c3FsaXRlX1ByZXBhcmVQcm90b2NvbCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5oIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuaAppbmRleCAxNTM0NzJlLi4xY2RmNzA4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5oCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmgKQEAgLTEsNiArMSw2IEBACiAvKiBwcmVwYXJlX3Byb3RvY29sLmggLSB0aGUgcHJvdG9jb2wgZm9yIHByZXBhcmluZyB2YWx1ZXMgZm9yIFNRTGl0ZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcm93LmMgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKaW5kZXggZjFlMWM0My4uNDgwYjQ4MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHJvdy5jIC0gYW4gZW5oYW5jZWQgdHVwbGUgZm9yIGRhdGFiYXNlIHJvd3MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpAQCAtMTc3LDE3ICsxNzcsMTcgQEAKIHN0YXRpYyBQeU9iamVjdCogcHlzcWxpdGVfcm93X3JpY2hjb21wYXJlKHB5c3FsaXRlX1JvdyAqc2VsZiwgUHlPYmplY3QgKl9vdGhlciwgaW50IG9waWQpCiB7CiAgICAgaWYgKG9waWQgIT0gUHlfRVEgJiYgb3BpZCAhPSBQeV9ORSkgewotCVB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7Ci0JcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOworICAgICAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOworICAgICAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7CiAgICAgfQogICAgIGlmIChQeVR5cGVfSXNTdWJ0eXBlKFB5X1RZUEUoX290aGVyKSwgJnB5c3FsaXRlX1Jvd1R5cGUpKSB7Ci0JcHlzcWxpdGVfUm93ICpvdGhlciA9IChweXNxbGl0ZV9Sb3cgKilfb3RoZXI7Ci0JUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKHNlbGYtPmRlc2NyaXB0aW9uLCBvdGhlci0+ZGVzY3JpcHRpb24sIG9waWQpOwotCWlmICgob3BpZCA9PSBQeV9FUSAmJiByZXMgPT0gUHlfVHJ1ZSkKLQkgICAgfHwgKG9waWQgPT0gUHlfTkUgJiYgcmVzID09IFB5X0ZhbHNlKSkgewotCSAgICBQeV9ERUNSRUYocmVzKTsKLQkgICAgcmV0dXJuIFB5T2JqZWN0X1JpY2hDb21wYXJlKHNlbGYtPmRhdGEsIG90aGVyLT5kYXRhLCBvcGlkKTsKLQl9CisgICAgICAgIHB5c3FsaXRlX1JvdyAqb3RoZXIgPSAocHlzcWxpdGVfUm93ICopX290aGVyOworICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfUmljaENvbXBhcmUoc2VsZi0+ZGVzY3JpcHRpb24sIG90aGVyLT5kZXNjcmlwdGlvbiwgb3BpZCk7CisgICAgICAgIGlmICgob3BpZCA9PSBQeV9FUSAmJiByZXMgPT0gUHlfVHJ1ZSkKKyAgICAgICAgICAgIHx8IChvcGlkID09IFB5X05FICYmIHJlcyA9PSBQeV9GYWxzZSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1JpY2hDb21wYXJlKHNlbGYtPmRhdGEsIG90aGVyLT5kYXRhLCBvcGlkKTsKKyAgICAgICAgfQogICAgIH0KICAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOwogICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9yb3cuaCBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuaAppbmRleCA4ZWQ2OWFlLi5kZDliMGMzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvcm93LmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3Jvdy5oCkBAIC0xLDYgKzEsNiBAQAogLyogcm93LmggLSBhbiBlbmhhbmNlZCB0dXBsZSBmb3IgZGF0YWJhc2Ugcm93cwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmggYi9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmgKaW5kZXggYzM3OTgyNS4uMzQwOGZjMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHNxbGl0ZWNvbXBhdC5oIC0gY29tcGF0aWJpbGl0eSBtYWNyb3MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKQEAgLTIxLDYgKzIxLDggQEAKICAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAgKi8KIAorI2luY2x1ZGUgIlB5dGhvbi5oIgorCiAjaWZuZGVmIFBZU1FMSVRFX0NPTVBBVF9ICiAjZGVmaW5lIFBZU1FMSVRFX0NPTVBBVF9ICiAKQEAgLTMxLDQgKzMzLDMxIEBACiB0eXBlZGVmIGludCAoKmxlbmZ1bmMpKFB5T2JqZWN0Kik7CiAjZW5kaWYKIAorCisvKiBkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3QgZm9yIHByZS0yLjQgdmVyc2lvbnMgb2YgUHl0aG9uICovCisjaWZuZGVmIFB5RGljdF9DaGVja0V4YWN0CisjZGVmaW5lIFB5RGljdF9DaGVja0V4YWN0KG9wKSAoKG9wKS0+b2JfdHlwZSA9PSAmUHlEaWN0X1R5cGUpCisjZW5kaWYKKworLyogZGVmaW5lIFB5X0NMRUFSIGZvciBwcmUtMi40IHZlcnNpb25zIG9mIFB5dGhvbiAqLworI2lmbmRlZiBQeV9DTEVBUgorI2RlZmluZSBQeV9DTEVBUihvcCkJCQkJXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgICAgICAgICAgICAgaWYgKG9wKSB7CQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRtcCA9IChQeU9iamVjdCAqKShvcCk7CVwKKyAgICAgICAgICAgICAgICAgICAgICAgIChvcCkgPSBOVUxMOwkJXAorICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CQlcCisgICAgICAgICAgICAgICAgfQkJCQlcCisgICAgICAgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmbmRlZiBQeVZhck9iamVjdF9IRUFEX0lOSVQKKyNkZWZpbmUgUHlWYXJPYmplY3RfSEVBRF9JTklUKHR5cGUsIHNpemUpIFwKKyAgICBQeU9iamVjdF9IRUFEX0lOSVQodHlwZSkgc2l6ZSwKKyNlbmRpZgorCisjaWZuZGVmIFB5X1RZUEUKKyNkZWZpbmUgUHlfVFlQRShvYikgKChvYiktPm9iX3R5cGUpCisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMgYi9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKaW5kZXggZjIwMGM1Ni4uOWQwOGYyYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHN0YXRlbWVudC5jIC0gdGhlIHN0YXRlbWVudCB0eXBlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuaCBiL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuaAppbmRleCBiZmEyMDkxLi4wNWZkNWZmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5oCkBAIC0xLDYgKzEsNiBAQAogLyogc3RhdGVtZW50LmggLSBkZWZpbml0aW9ucyBmb3IgdGhlIHN0YXRlbWVudCB0eXBlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMgYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCmluZGV4IDZiZTM5YWUuLjZiNTdiNzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHV0aWwuYyAtIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3V0aWwuaCBiL01vZHVsZXMvX3NxbGl0ZS91dGlsLmgKaW5kZXggMmE0NTYzNi4uNDI2OTAwMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3V0aWwuaAorKysgYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5oCkBAIC0xLDYgKzEsNiBAQAogLyogdXRpbC5oIC0gdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcmUuYyBiL01vZHVsZXMvX3NyZS5jCmluZGV4IDczMWIxM2QuLjkzMTVmMTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NyZS5jCisrKyBiL01vZHVsZXMvX3NyZS5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAogI2lmIGRlZmluZWQoSEFWRV9VTklDT0RFKQogCi0jZGVmaW5lIFNSRV9VTklfSVNfRElHSVQoY2gpIFB5X1VOSUNPREVfSVNESUdJVCgoUHlfVU5JQ09ERSkoY2gpKQorI2RlZmluZSBTUkVfVU5JX0lTX0RJR0lUKGNoKSBQeV9VTklDT0RFX0lTREVDSU1BTCgoUHlfVU5JQ09ERSkoY2gpKQogI2RlZmluZSBTUkVfVU5JX0lTX1NQQUNFKGNoKSBQeV9VTklDT0RFX0lTU1BBQ0UoKFB5X1VOSUNPREUpKGNoKSkKICNkZWZpbmUgU1JFX1VOSV9JU19MSU5FQlJFQUsoY2gpIFB5X1VOSUNPREVfSVNMSU5FQlJFQUsoKFB5X1VOSUNPREUpKGNoKSkKICNkZWZpbmUgU1JFX1VOSV9JU19BTE5VTShjaCkgUHlfVU5JQ09ERV9JU0FMTlVNKChQeV9VTklDT0RFKShjaCkpCkBAIC0xNjg2LDcgKzE2ODYsNyBAQAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soc3RyaW5nKSkgewogICAgICAgICAvKiB1bmljb2RlIHN0cmluZ3MgZG9lc24ndCBhbHdheXMgc3VwcG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZSAqLwogICAgICAgICBwdHIgPSAodm9pZCopIFB5VW5pY29kZV9BU19EQVRBKHN0cmluZyk7Ci0gICAgICAgIGJ5dGVzID0gUHlVbmljb2RlX0dFVF9EQVRBX1NJWkUoc3RyaW5nKTsKKyAgICAgICAgLyogYnl0ZXMgPSBQeVVuaWNvZGVfR0VUX0RBVEFfU0laRShzdHJpbmcpOyAqLwogICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9TSVpFKHN0cmluZyk7CiAgICAgICAgIGNoYXJzaXplID0gc2l6ZW9mKFB5X1VOSUNPREUpOwogCkBAIC0yOTY3LDEzICsyOTY3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IDw0PW1heD47CiAgICAgICAgICAgICAgICAgICAgSWYgU1JFX0lORk9fUFJFRklYIG9yIFNSRV9JTkZPX0NIQVJTRVQgaXMgaW4gdGhlIGZsYWdzLAogICAgICAgICAgICAgICAgICAgIG1vcmUgZm9sbG93cy4gKi8KLSAgICAgICAgICAgICAgICBTUkVfQ09ERSBmbGFncywgbWluLCBtYXgsIGk7CisgICAgICAgICAgICAgICAgU1JFX0NPREUgZmxhZ3MsIGk7CiAgICAgICAgICAgICAgICAgU1JFX0NPREUgKm5ld2NvZGU7CiAgICAgICAgICAgICAgICAgR0VUX1NLSVA7CiAgICAgICAgICAgICAgICAgbmV3Y29kZSA9IGNvZGUrc2tpcC0xOwogICAgICAgICAgICAgICAgIEdFVF9BUkc7IGZsYWdzID0gYXJnOwotICAgICAgICAgICAgICAgIEdFVF9BUkc7IG1pbiA9IGFyZzsKLSAgICAgICAgICAgICAgICBHRVRfQVJHOyBtYXggPSBhcmc7CisgICAgICAgICAgICAgICAgR0VUX0FSRzsgLyogbWluICovCisgICAgICAgICAgICAgICAgR0VUX0FSRzsgLyogbWF4ICovCiAgICAgICAgICAgICAgICAgLyogQ2hlY2sgdGhhdCBvbmx5IHZhbGlkIGZsYWdzIGFyZSBwcmVzZW50ICovCiAgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIH4oU1JFX0lORk9fUFJFRklYIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUkVfSU5GT19MSVRFUkFMIHwKQEAgLTI5ODksOSArMjk4OSw5IEBACiAgICAgICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICAgICAgLyogVmFsaWRhdGUgdGhlIHByZWZpeCAqLwogICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX1BSRUZJWCkgewotICAgICAgICAgICAgICAgICAgICBTUkVfQ09ERSBwcmVmaXhfbGVuLCBwcmVmaXhfc2tpcDsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NPREUgcHJlZml4X2xlbjsKICAgICAgICAgICAgICAgICAgICAgR0VUX0FSRzsgcHJlZml4X2xlbiA9IGFyZzsKLSAgICAgICAgICAgICAgICAgICAgR0VUX0FSRzsgcHJlZml4X3NraXAgPSBhcmc7CisgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7IC8qIHByZWZpeCBza2lwICovCiAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgY29tZXMgdGhlIHByZWZpeCBzdHJpbmcgKi8KICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUrcHJlZml4X2xlbiA8IGNvZGUgfHwgY29kZStwcmVmaXhfbGVuID4gbmV3Y29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIEZBSUw7CkBAIC0zODc2LDggKzM4NzYsOSBAQAogICAgIFB5T2JqZWN0KiB4OwogCiAgICAgLyogUGF0Y2ggb2JqZWN0IHR5cGVzICovCi0gICAgUGF0dGVybl9UeXBlLm9iX3R5cGUgPSBNYXRjaF9UeXBlLm9iX3R5cGUgPQotICAgICAgICBTY2FubmVyX1R5cGUub2JfdHlwZSA9ICZQeVR5cGVfVHlwZTsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQYXR0ZXJuX1R5cGUpIHx8IFB5VHlwZV9SZWFkeSgmTWF0Y2hfVHlwZSkgfHwKKyAgICAgICAgUHlUeXBlX1JlYWR5KCZTY2FubmVyX1R5cGUpKQorICAgICAgICByZXR1cm47CiAKICAgICBtID0gUHlfSW5pdE1vZHVsZSgiXyIgU1JFX01PRFVMRSwgX2Z1bmN0aW9ucyk7CiAgICAgaWYgKG0gPT0gTlVMTCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NzbC5jIGIvTW9kdWxlcy9fc3NsLmMKaW5kZXggNDYxOWNkYS4uNmVkMGY0ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3NsLmMKKysrIGIvTW9kdWxlcy9fc3NsLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogICAgICAgICAgICAgICAgZW51bSBweV9zc2xfc2VydmVyX29yX2NsaWVudCBzb2NrZXRfdHlwZSwKICAgICAgICAgICAgICAgIGVudW0gcHlfc3NsX2NlcnRfcmVxdWlyZW1lbnRzIGNlcnRyZXEsCiAgICAgICAgICAgICAgICBlbnVtIHB5X3NzbF92ZXJzaW9uIHByb3RvX3ZlcnNpb24sCi0gICAgICAgICAgICAgICBjaGFyICpjYWNlcnRzX2ZpbGUpCisgICAgICAgICAgICAgICBjaGFyICpjYWNlcnRzX2ZpbGUsIGNoYXIgKmNpcGhlcnMpCiB7CiAgICAgUHlTU0xPYmplY3QgKnNlbGY7CiAgICAgY2hhciAqZXJyc3RyID0gTlVMTDsKQEAgLTMxMyw2ICszMTMsMTQgQEAKICAgICAgICAgZ290byBmYWlsOwogICAgIH0KIAorICAgIGlmIChjaXBoZXJzICE9IE5VTEwpIHsKKyAgICAgICAgcmV0ID0gU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Qoc2VsZi0+Y3R4LCBjaXBoZXJzKTsKKyAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICBlcnJzdHIgPSBFUlJTVFIoIk5vIGNpcGhlciBjYW4gYmUgc2VsZWN0ZWQuIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoY2VydHJlcSAhPSBQWV9TU0xfQ0VSVF9OT05FKSB7CiAgICAgICAgIGlmIChjYWNlcnRzX2ZpbGUgPT0gTlVMTCkgewogICAgICAgICAgICAgZXJyc3RyID0gRVJSU1RSKCJObyByb290IGNlcnRpZmljYXRlcyBzcGVjaWZpZWQgZm9yICIKQEAgLTQxMiwxNCArNDIwLDE1IEBACiAgICAgY2hhciAqa2V5X2ZpbGUgPSBOVUxMOwogICAgIGNoYXIgKmNlcnRfZmlsZSA9IE5VTEw7CiAgICAgY2hhciAqY2FjZXJ0c19maWxlID0gTlVMTDsKKyAgICBjaGFyICpjaXBoZXJzID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyFpfHp6aWl6OnNzbHdyYXAiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyFpfHp6aWl6ejpzc2x3cmFwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTb2NrZXRNb2R1bGUuU29ja19UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmU29jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlcnZlcl9zaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5X2ZpbGUsICZjZXJ0X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2ZXJpZmljYXRpb25fbW9kZSwgJnByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FjZXJ0c19maWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2VydHNfZmlsZSwgJmNpcGhlcnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qCkBAIC00MzIsMTIgKzQ0MSwxMyBAQAogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBuZXdQeVNTTE9iamVjdChTb2NrLCBrZXlfZmlsZSwgY2VydF9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGUsIHZlcmlmaWNhdGlvbl9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wsIGNhY2VydHNfZmlsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCwgY2FjZXJ0c19maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycyk7CiB9CiAKIFB5RG9jX1NUUlZBUihzc2xfZG9jLAogInNzbHdyYXAoc29ja2V0LCBzZXJ2ZXJfc2lkZSwgW2tleWZpbGUsIGNlcnRmaWxlLCBjZXJ0c19tb2RlLCBwcm90b2NvbCxcbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNlcnRzZmlsZV0pIC0+IHNzbG9iamVjdCIpOworIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2VydHNmaWxlLCBjaXBoZXJzXSkgLT4gc3Nsb2JqZWN0Iik7CiAKIC8qIFNTTCBvYmplY3QgbWV0aG9kcyAqLwogCkBAIC00NTQsNyArNDY0LDYgQEAKIAogICAgIC8qIEFjdHVhbGx5IG5lZ290aWF0ZSBTU0wgY29ubmVjdGlvbiAqLwogICAgIC8qIFhYWCBJZiBTU0xfZG9faGFuZHNoYWtlKCkgcmV0dXJucyAwLCBpdCdzIGFsc28gYSBmYWlsdXJlLiAqLwotICAgIHNvY2tzdGF0ZSA9IDA7CiAgICAgZG8gewogICAgICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJldCA9IFNTTF9kb19oYW5kc2hha2Uoc2VsZi0+c3NsKTsKQEAgLTY3MSwxMiArNjgwLDE3IEBACiAgICAgWDUwOV9FWFRFTlNJT04gKmV4dCA9IE5VTEw7CiAgICAgR0VORVJBTF9OQU1FUyAqbmFtZXMgPSBOVUxMOwogICAgIEdFTkVSQUxfTkFNRSAqbmFtZTsKLSAgICBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kOworICAgIGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2Q7CiAgICAgQklPICpiaW9idWYgPSBOVUxMOwogICAgIGNoYXIgYnVmWzIwNDhdOwogICAgIGNoYXIgKnZwdHI7CiAgICAgaW50IGxlbjsKKyAgICAvKiBJc3N1ZSAjMjk3MzogQVNOMV9pdGVtX2QyaSgpIEFQSSBjaGFuZ2VkIGluIE9wZW5TU0wgMC45LjZtICovCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA2MGRmTAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisjZWxzZQorICAgIHVuc2lnbmVkIGNoYXIgKnA7CisjZW5kaWYKIAogICAgIGlmIChjZXJ0aWZpY2F0ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gcGVlcl9hbHRfbmFtZXM7CkBAIC0xMDI3LDE1ICsxMDQxLDE1IEBACiBzdGF0aWMgUHlPYmplY3QgKlB5U1NMX2NpcGhlciAoUHlTU0xPYmplY3QgKnNlbGYpIHsKIAogICAgIFB5T2JqZWN0ICpyZXR2YWwsICp2OwotICAgIFNTTF9DSVBIRVIgKmN1cnJlbnQ7CisgICAgY29uc3QgU1NMX0NJUEhFUiAqY3VycmVudDsKICAgICBjaGFyICpjaXBoZXJfbmFtZTsKICAgICBjaGFyICpjaXBoZXJfcHJvdG9jb2w7CiAKICAgICBpZiAoc2VsZi0+c3NsID09IE5VTEwpCi0gICAgICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICBjdXJyZW50ID0gU1NMX2dldF9jdXJyZW50X2NpcGhlcihzZWxmLT5zc2wpOwogICAgIGlmIChjdXJyZW50ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIAogICAgIHJldHZhbCA9IFB5VHVwbGVfTmV3KDMpOwogICAgIGlmIChyZXR2YWwgPT0gTlVMTCkKQEAgLTEwNDMsNiArMTA1Nyw3IEBACiAKICAgICBjaXBoZXJfbmFtZSA9IChjaGFyICopIFNTTF9DSVBIRVJfZ2V0X25hbWUoY3VycmVudCk7CiAgICAgaWYgKGNpcGhlcl9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMCwgUHlfTm9uZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdiA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoY2lwaGVyX25hbWUpOwpAQCAtMTA1Miw2ICsxMDY3LDcgQEAKICAgICB9CiAgICAgY2lwaGVyX3Byb3RvY29sID0gU1NMX0NJUEhFUl9nZXRfdmVyc2lvbihjdXJyZW50KTsKICAgICBpZiAoY2lwaGVyX3Byb3RvY29sID09IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMSwgUHlfTm9uZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdiA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoY2lwaGVyX3Byb3RvY29sKTsKQEAgLTExNTQsMTQgKzExNzAsMTMgQEAKIAogc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9TU0x3cml0ZShQeVNTTE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgY2hhciAqZGF0YTsKKyAgICBQeV9idWZmZXIgYnVmOwogICAgIGludCBsZW47Ci0gICAgaW50IGNvdW50OwogICAgIGludCBzb2Nrc3RhdGU7CiAgICAgaW50IGVycjsKICAgICBpbnQgbm9uYmxvY2tpbmc7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOndyaXRlIiwgJmRhdGEsICZjb3VudCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjp3cml0ZSIsICZidWYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGp1c3QgaW4gY2FzZSB0aGUgYmxvY2tpbmcgc3RhdGUgb2YgdGhlIHNvY2tldCBoYXMgYmVlbiBjaGFuZ2VkICovCkBAIC0xMTczLDI0ICsxMTg4LDIzIEBACiAgICAgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSEFTX1RJTUVEX09VVCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgd3JpdGUgb3BlcmF0aW9uIHRpbWVkIG91dCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9IGVsc2UgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSEFTX0JFRU5fQ0xPU0VEKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIlVuZGVybHlpbmcgc29ja2V0IGhhcyBiZWVuIGNsb3NlZC4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfSBlbHNlIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX1RPT19MQVJHRV9GT1JfU0VMRUNUKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIlVuZGVybHlpbmcgc29ja2V0IHRvbyBsYXJnZSBmb3Igc2VsZWN0KCkuIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBkbyB7Ci0gICAgICAgIGVyciA9IDA7CiAgICAgICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgbGVuID0gU1NMX3dyaXRlKHNlbGYtPnNzbCwgZGF0YSwgY291bnQpOworICAgICAgICBsZW4gPSBTU0xfd3JpdGUoc2VsZi0+c3NsLCBidWYuYnVmLCBidWYubGVuKTsKICAgICAgICAgZXJyID0gU1NMX2dldF9lcnJvcihzZWxmLT5zc2wsIGxlbik7CiAgICAgICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmKFB5RXJyX0NoZWNrU2lnbmFscygpKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIGlmIChlcnIgPT0gU1NMX0VSUk9SX1dBTlRfUkVBRCkgewogICAgICAgICAgICAgc29ja3N0YXRlID0gY2hlY2tfc29ja2V0X2FuZF93YWl0X2Zvcl90aW1lb3V0KHNlbGYtPlNvY2tldCwgMCk7CkBAIC0xMjAyLDE5ICsxMjE2LDI1IEBACiAgICAgICAgIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0hBU19USU1FRF9PVVQpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgd3JpdGUgb3BlcmF0aW9uIHRpbWVkIG91dCIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9IGVsc2UgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSEFTX0JFRU5fQ0xPU0VEKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5kZXJseWluZyBzb2NrZXQgaGFzIGJlZW4gY2xvc2VkLiIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9IGVsc2UgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSVNfTk9OQkxPQ0tJTkcpIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoZXJyID09IFNTTF9FUlJPUl9XQU5UX1JFQUQgfHwgZXJyID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFKTsKKworICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgaWYgKGxlbiA+IDApCiAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhsZW4pOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIFB5U1NMX1NldEVycm9yKHNlbGYsIGxlbiwgX19GSUxFX18sIF9fTElORV9fKTsKKworZXJyb3I6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogUHlEb2NfU1RSVkFSKFB5U1NMX1NTTHdyaXRlX2RvYywKQEAgLTEyOTUsNyArMTMxNSw2IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZG8gewotICAgICAgICBlcnIgPSAwOwogICAgICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGNvdW50ID0gU1NMX3JlYWQoc2VsZi0+c3NsLCBQeVN0cmluZ19Bc1N0cmluZyhidWYpLCBsZW4pOwogICAgICAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKHNlbGYtPnNzbCwgY291bnQpOwpAQCAtMTYyNCw3ICsxNjQzLDkgQEAKIFB5TU9ESU5JVF9GVU5DCiBpbml0X3NzbCh2b2lkKQogewotICAgIFB5T2JqZWN0ICptLCAqZDsKKyAgICBQeU9iamVjdCAqbSwgKmQsICpyOworICAgIHVuc2lnbmVkIGxvbmcgbGlidmVyOworICAgIHVuc2lnbmVkIGludCBtYWpvciwgbWlub3IsIGZpeCwgcGF0Y2gsIHN0YXR1czsKIAogICAgIFB5X1RZUEUoJlB5U1NMX1R5cGUpID0gJlB5VHlwZV9UeXBlOwogCkBAIC0xNjk1LDQgKzE3MTYsMzAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9TU0wyMyk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1RMU3YxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxKTsKKworICAgIC8qIE9wZW5TU0wgdmVyc2lvbiAqLworICAgIC8qIFNTTGVheSgpIGdpdmVzIHVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGxpbmtlZCBhZ2FpbnN0LAorICAgICAgIHdoaWNoIGNvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBoZWFkZXJzIHZlcnNpb24uCisgICAgKi8KKyAgICBsaWJ2ZXIgPSBTU0xlYXkoKTsKKyAgICByID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcobGlidmVyKTsKKyAgICBpZiAociA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiT1BFTlNTTF9WRVJTSU9OX05VTUJFUiIsIHIpKQorICAgICAgICByZXR1cm47CisgICAgc3RhdHVzID0gbGlidmVyICYgMHhGOworICAgIGxpYnZlciA+Pj0gNDsKKyAgICBwYXRjaCA9IGxpYnZlciAmIDB4RkY7CisgICAgbGlidmVyID4+PSA4OworICAgIGZpeCA9IGxpYnZlciAmIDB4RkY7CisgICAgbGlidmVyID4+PSA4OworICAgIG1pbm9yID0gbGlidmVyICYgMHhGRjsKKyAgICBsaWJ2ZXIgPj49IDg7CisgICAgbWFqb3IgPSBsaWJ2ZXIgJiAweEZGOworICAgIHIgPSBQeV9CdWlsZFZhbHVlKCJJSUlJSSIsIG1ham9yLCBtaW5vciwgZml4LCBwYXRjaCwgc3RhdHVzKTsKKyAgICBpZiAociA9PSBOVUxMIHx8IFB5TW9kdWxlX0FkZE9iamVjdChtLCAiT1BFTlNTTF9WRVJTSU9OX0lORk8iLCByKSkKKyAgICAgICAgcmV0dXJuOworICAgIHIgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKFNTTGVheV92ZXJzaW9uKFNTTEVBWV9WRVJTSU9OKSk7CisgICAgaWYgKHIgPT0gTlVMTCB8fCBQeU1vZHVsZV9BZGRPYmplY3QobSwgIk9QRU5TU0xfVkVSU0lPTiIsIHIpKQorICAgICAgICByZXR1cm47CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zdHJ1Y3QuYyBiL01vZHVsZXMvX3N0cnVjdC5jCmluZGV4IGI4NWQxMDYuLjcxZTcxZGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3N0cnVjdC5jCisrKyBiL01vZHVsZXMvX3N0cnVjdC5jCkBAIC0xNywyOSArMTcsMTAgQEAKIHR5cGVkZWYgaW50IFB5X3NzaXplX3Q7CiAjZW5kaWYKIAotLyogSWYgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcgaXMgZGVmaW5lZCwgdGhlIHN0cnVjdCBtb2R1bGUgd2lsbCB3cmFwIGFsbCBpbnB1dAotICAgbnVtYmVycyBmb3IgZXhwbGljaXQgZW5kaWFucyBzdWNoIHRoYXQgdGhleSBmaXQgaW4gdGhlIGdpdmVuIHR5cGUsIG11Y2gKLSAgIGxpa2UgZXhwbGljaXQgY2FzdGluZyBpbiBDLiBBIHdhcm5pbmcgd2lsbCBiZSByYWlzZWQgaWYgdGhlIG51bWJlciBkaWQKLSAgIG5vdCBvcmlnaW5hbGx5IGZpdCB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSByZXF1ZXN0ZWQgdHlwZS4gSWYgaXQgaXMKLSAgIG5vdCBkZWZpbmVkLCB0aGVuIGFsbCByYW5nZSBlcnJvcnMgYW5kIG92ZXJmbG93IHdpbGwgYmUgc3RydWN0LmVycm9yCi0gICBleGNlcHRpb25zLiAqLwotCi0jZGVmaW5lIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HIDEKLQotI2lmZGVmIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HCi1zdGF0aWMgUHlPYmplY3QgKnB5bG9uZ191bG9uZ19tYXNrID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqcHlpbnRfemVybyA9IE5VTEw7Ci0jZW5kaWYKLQotLyogSWYgUFlfU1RSVUNUX0ZMT0FUX0NPRVJDRSBpcyBkZWZpbmVkLCB0aGUgc3RydWN0IG1vZHVsZSB3aWxsIGFsbG93IGZsb2F0Ci0gICBhcmd1bWVudHMgZm9yIGludGVnZXIgZm9ybWF0cyB3aXRoIGEgd2FybmluZyBmb3IgYmFja3dhcmRzCi0gICBjb21wYXRpYmlsaXR5LiAqLwotCi0jZGVmaW5lIFBZX1NUUlVDVF9GTE9BVF9DT0VSQ0UgMQotCi0jaWZkZWYgUFlfU1RSVUNUX0ZMT0FUX0NPRVJDRQotI2RlZmluZSBGTE9BVF9DT0VSQ0UgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIKLSNlbmRpZgorLyogd2FybmluZyBtZXNzYWdlcyAqLworI2RlZmluZSBGTE9BVF9DT0VSQ0VfV0FSTiAiaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0IgorI2RlZmluZSBOT05fSU5URUdFUl9XQVJOICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3Qgbm9uLWludGVnZXIgIiBcCisgICAgIihpbXBsaWNpdCBjb252ZXJzaW9uIHVzaW5nIF9faW50X18gaXMgZGVwcmVjYXRlZCkiCiAKIAogLyogVGhlIHRyYW5zbGF0aW9uIGZ1bmN0aW9uIGZvciBlYWNoIGZvcm1hdCBjaGFyYWN0ZXIgaXMgdGFibGUgZHJpdmVuICovCkBAIC0xMTksOTMgKzEwMCwxMzMgQEAKICNwcmFnbWEgb3B0aW9ucyBhbGlnbj1yZXNldAogI2VuZGlmCiAKK3N0YXRpYyBjaGFyICppbnRlZ2VyX2NvZGVzID0gImJCaEhpSWxMcVEiOworCiAvKiBIZWxwZXIgdG8gZ2V0IGEgUHlMb25nT2JqZWN0IGJ5IGhvb2sgb3IgYnkgY3Jvb2suICBDYWxsZXIgc2hvdWxkIGRlY3JlZi4gKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9weWxvbmcoUHlPYmplY3QgKnYpCiB7Ci0gICAgUHlOdW1iZXJNZXRob2RzICptOwotCisgICAgUHlPYmplY3QgKnIsICp3OworICAgIGludCBjb252ZXJ0ZWQgPSAwOwogICAgIGFzc2VydCh2ICE9IE5VTEwpOwotICAgIGlmIChQeUludF9DaGVjayh2KSkKLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhQeUludF9BU19MT05HKHYpKTsKLSAgICBpZiAoUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgIFB5X0lOQ1JFRih2KTsKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotICAgIG0gPSBQeV9UWVBFKHYpLT50cF9hc19udW1iZXI7Ci0gICAgaWYgKG0gIT0gTlVMTCAmJiBtLT5uYl9sb25nICE9IE5VTEwpIHsKLSAgICAgICAgdiA9IG0tPm5iX2xvbmcodik7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgaWYgKCFQeUludF9DaGVjayh2KSAmJiAhUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgIFB5TnVtYmVyTWV0aG9kcyAqbTsKKyAgICAgICAgLyogTm90IGFuIGludGVnZXI7IGZpcnN0IHRyeSB0byB1c2UgX19pbmRleF9fIHRvCisgICAgICAgICAgIGNvbnZlcnQgdG8gYW4gaW50ZWdlci4gIElmIHRoZSBfX2luZGV4X18gbWV0aG9kCisgICAgICAgICAgIGRvZXNuJ3QgZXhpc3QsIG9yIHJhaXNlcyBhIFR5cGVFcnJvciwgdHJ5IF9faW50X18uCisgICAgICAgICAgIFVzZSBvZiB0aGUgbGF0dGVyIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGZhaWwgaW4KKyAgICAgICAgICAgUHl0aG9uIDMueC4gKi8KKworICAgICAgICBtID0gUHlfVFlQRSh2KS0+dHBfYXNfbnVtYmVyOworICAgICAgICBpZiAoUHlJbmRleF9DaGVjayh2KSkgeworICAgICAgICAgICAgdyA9IFB5TnVtYmVyX0luZGV4KHYpOworICAgICAgICAgICAgaWYgKHcgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHYgPSB3OworICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3NmdWxseSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciAqLworICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmICghY29udmVydGVkICYmIG0gIT0gTlVMTCAmJiBtLT5uYl9pbnQgIT0gTlVMTCkgeworICAgICAgICAgICAgLyogU3BlY2lhbCBjYXNlIHdhcm5pbmcgbWVzc2FnZSBmb3IgZmxvYXRzLCBmb3IKKyAgICAgICAgICAgICAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqLworICAgICAgICAgICAgaWYgKFB5RmxvYXRfQ2hlY2sodikpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTE9BVF9DT0VSQ0VfV0FSTiwgMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9OX0lOVEVHRVJfV0FSTiwgMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdiA9IG0tPm5iX2ludCh2KTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBpZiAoIVB5SW50X0NoZWNrKHYpICYmICFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19pbnRfXyBtZXRob2QgcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLWludGVnZXIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnZlcnRlZCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjb252ZXJ0ZWQpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGNvbnZlcnQgYXJndW1lbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBpbnRlZ2VyIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh2KSkKLSAgICAgICAgICAgIHJldHVybiB2OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgLyogRW5zdXJlIHdlIG93biBhIHJlZmVyZW5jZSB0byB2LiAqLworICAgICAgICBQeV9JTkNSRUYodik7CisKKyAgICBhc3NlcnQoUHlJbnRfQ2hlY2sodikgfHwgUHlMb25nX0NoZWNrKHYpKTsKKyAgICBpZiAoUHlJbnRfQ2hlY2sodikpIHsKKyAgICAgICAgciA9IFB5TG9uZ19Gcm9tTG9uZyhQeUludF9BU19MT05HKHYpKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgIH0KLSAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBsb25nIik7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodikpOworICAgICAgICByID0gdjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHIgPSBOVUxMOyAgIC8qIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlICovCisgICAgICAgIGFzc2VydCgwKTsgIC8qIHNob3VsZG4ndCBldmVyIGdldCBoZXJlICovCisgICAgfQorCisgICAgcmV0dXJuIHI7CiB9CiAKLS8qIEhlbHBlciByb3V0aW5lIHRvIGdldCBhIFB5dGhvbiBpbnRlZ2VyIGFuZCByYWlzZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IKLSAgIGlmIGl0IGlzbid0IG9uZSAqLworLyogSGVscGVyIHRvIGNvbnZlcnQgYSBQeXRob24gb2JqZWN0IHRvIGEgQyBsb25nLiAgU2V0cyBhbiBleGNlcHRpb24KKyAgIChzdHJ1Y3QuZXJyb3IgZm9yIGFuIGluY29udmVydGlibGUgdHlwZSwgT3ZlcmZsb3dFcnJvciBmb3IKKyAgIG91dC1vZi1yYW5nZSB2YWx1ZXMpIGFuZCByZXR1cm5zIC0xIG9uIGVycm9yLiAqLwogCiBzdGF0aWMgaW50CiBnZXRfbG9uZyhQeU9iamVjdCAqdiwgbG9uZyAqcCkKIHsKLSAgICBsb25nIHggPSBQeUludF9Bc0xvbmcodik7Ci0gICAgaWYgKHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewotI2lmZGVmIFBZX1NUUlVDVF9GTE9BVF9DT0VSQ0UKLSAgICAgICAgaWYgKFB5RmxvYXRfQ2hlY2sodikpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpvOwotICAgICAgICAgICAgaW50IHJlczsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywgRkxPQVRfQ09FUkNFLCAxKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgbyA9IFB5TnVtYmVyX0ludCh2KTsKLSAgICAgICAgICAgIGlmIChvID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgcmVzID0gZ2V0X2xvbmcobywgcCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQgYXJndW1lbnQgaXMgbm90IGFuIGludGVnZXIiKTsKKyAgICBsb25nIHg7CisKKyAgICB2ID0gZ2V0X3B5bG9uZyh2KTsKKyAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodikpOworICAgIHggPSBQeUxvbmdfQXNMb25nKHYpOworICAgIFB5X0RFQ1JFRih2KTsKKyAgICBpZiAoeCA9PSAobG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgKnAgPSB4OwogICAgIHJldHVybiAwOwogfQogCi0KIC8qIFNhbWUsIGJ1dCBoYW5kbGluZyB1bnNpZ25lZCBsb25nICovCiAKLSNpZm5kZWYgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcKLQogc3RhdGljIGludAogZ2V0X3Vsb25nKFB5T2JqZWN0ICp2LCB1bnNpZ25lZCBsb25nICpwKQogewotICAgIGlmIChQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB4ID0gUHlMb25nX0FzVW5zaWduZWRMb25nKHYpOwotICAgICAgICBpZiAoeCA9PSAodW5zaWduZWQgbG9uZykoLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICpwID0geDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChnZXRfbG9uZyh2LCAobG9uZyAqKXApIDwgMCkKKyAgICB1bnNpZ25lZCBsb25nIHg7CisKKyAgICB2ID0gZ2V0X3B5bG9uZyh2KTsKKyAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCgobG9uZykqcCkgPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBhcmd1bWVudCBpcyA8IDAiKTsKKyAgICBhc3NlcnQoUHlMb25nX0NoZWNrKHYpKTsKKyAgICB4ID0gUHlMb25nX0FzVW5zaWduZWRMb25nKHYpOworICAgIFB5X0RFQ1JFRih2KTsKKyAgICBpZiAoeCA9PSAodW5zaWduZWQgbG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgICpwID0geDsKICAgICByZXR1cm4gMDsKIH0KIAotI2VuZGlmIC8qIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HICovCi0KICNpZmRlZiBIQVZFX0xPTkdfTE9ORwogCiAvKiBTYW1lLCBidXQgaGFuZGxpbmcgbmF0aXZlIGxvbmcgbG9uZy4gKi8KQEAgLTI0OCwxMDggKzI2OSw2IEBACiAKICNlbmRpZgogCi0jaWZkZWYgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcKLQotLyogSGVscGVyIHJvdXRpbmUgdG8gZ2V0IGEgUHl0aG9uIGludGVnZXIgYW5kIHJhaXNlIHRoZSBhcHByb3ByaWF0ZSBlcnJvcgotICAgaWYgaXQgaXNuJ3Qgb25lICovCi0KLSNkZWZpbmUgSU5UX09WRVJGTE9XICJzdHJ1Y3QgaW50ZWdlciBvdmVyZmxvdyBtYXNraW5nIGlzIGRlcHJlY2F0ZWQiCi0KLXN0YXRpYyBpbnQKLWdldF93cmFwcGVkX2xvbmcoUHlPYmplY3QgKnYsIGxvbmcgKnApCi17Ci0gICAgaWYgKGdldF9sb25nKHYsIHApIDwgMCkgewotICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpICYmCi0gICAgICAgICAgICBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqd3JhcHBlZDsKLSAgICAgICAgICAgIGxvbmcgeDsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0jaWZkZWYgUFlfU1RSVUNUX0ZMT0FUX0NPRVJDRQotICAgICAgICAgICAgaWYgKFB5RmxvYXRfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqbzsKLSAgICAgICAgICAgICAgICBpbnQgcmVzOwotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIEZMT0FUX0NPRVJDRSwgMSkgPCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgbyA9IFB5TnVtYmVyX0ludCh2KTsKLSAgICAgICAgICAgICAgICBpZiAobyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgcmVzID0gZ2V0X3dyYXBwZWRfbG9uZyhvLCBwKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIElOVF9PVkVSRkxPVywgMSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHdyYXBwZWQgPSBQeU51bWJlcl9BbmQodiwgcHlsb25nX3Vsb25nX21hc2spOwotICAgICAgICAgICAgaWYgKHdyYXBwZWQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB4ID0gKGxvbmcpUHlMb25nX0FzVW5zaWduZWRMb25nKHdyYXBwZWQpOwotICAgICAgICAgICAgUHlfREVDUkVGKHdyYXBwZWQpOwotICAgICAgICAgICAgaWYgKHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAqcCA9IHg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWdldF93cmFwcGVkX3Vsb25nKFB5T2JqZWN0ICp2LCB1bnNpZ25lZCBsb25nICpwKQotewotICAgIGxvbmcgeCA9IChsb25nKVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyh2KTsKLSAgICBpZiAoeCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp3cmFwcGVkOwotICAgICAgICBQeUVycl9DbGVhcigpOwotI2lmZGVmIFBZX1NUUlVDVF9GTE9BVF9DT0VSQ0UKLSAgICAgICAgaWYgKFB5RmxvYXRfQ2hlY2sodikpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpvOwotICAgICAgICAgICAgaW50IHJlczsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywgRkxPQVRfQ09FUkNFLCAxKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgbyA9IFB5TnVtYmVyX0ludCh2KTsKLSAgICAgICAgICAgIGlmIChvID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgcmVzID0gZ2V0X3dyYXBwZWRfdWxvbmcobywgcCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgd3JhcHBlZCA9IFB5TnVtYmVyX0FuZCh2LCBweWxvbmdfdWxvbmdfbWFzayk7Ci0gICAgICAgIGlmICh3cmFwcGVkID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCBJTlRfT1ZFUkZMT1csIDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHdyYXBwZWQpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHggPSAobG9uZylQeUxvbmdfQXNVbnNpZ25lZExvbmcod3JhcHBlZCk7Ci0gICAgICAgIFB5X0RFQ1JFRih3cmFwcGVkKTsKLSAgICAgICAgaWYgKHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgKnAgPSAodW5zaWduZWQgbG9uZyl4OwotICAgIHJldHVybiAwOwotfQotCi0jZGVmaW5lIFJBTkdFX0VSUk9SKHgsIGYsIGZsYWcsIG1hc2spIFwKLSAgICBkbyB7IFwKLSAgICAgICAgaWYgKF9yYW5nZV9lcnJvcihmLCBmbGFnKSA8IDApIFwKLSAgICAgICAgICAgIHJldHVybiAtMTsgXAotICAgICAgICBlbHNlIFwKLSAgICAgICAgICAgICh4KSAmPSAobWFzayk7IFwKLSAgICB9IHdoaWxlICgwKQotCi0jZWxzZQotCi0jZGVmaW5lIGdldF93cmFwcGVkX2xvbmcgZ2V0X2xvbmcKLSNkZWZpbmUgZ2V0X3dyYXBwZWRfdWxvbmcgZ2V0X3Vsb25nCi0jZGVmaW5lIFJBTkdFX0VSUk9SKHgsIGYsIGZsYWcsIG1hc2spIHJldHVybiBfcmFuZ2VfZXJyb3IoZiwgZmxhZykKLQotI2VuZGlmCi0KIC8qIEZsb2F0aW5nIHBvaW50IGhlbHBlcnMgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTQwMywyNiArMzIyLDYgQEAKICAgICAgICAgICAgIH4gbGFyZ2VzdCwKICAgICAgICAgICAgIGxhcmdlc3QpOwogICAgIH0KLSNpZmRlZiBQWV9TVFJVQ1RfT1ZFUkZMT1dfTUFTS0lORwotICAgIHsKLSAgICAgICAgUHlPYmplY3QgKnB0eXBlLCAqcHZhbHVlLCAqcHRyYWNlYmFjazsKLSAgICAgICAgUHlPYmplY3QgKm1zZzsKLSAgICAgICAgaW50IHJ2YWw7Ci0gICAgICAgIFB5RXJyX0ZldGNoKCZwdHlwZSwgJnB2YWx1ZSwgJnB0cmFjZWJhY2spOwotICAgICAgICBhc3NlcnQocHZhbHVlICE9IE5VTEwpOwotICAgICAgICBtc2cgPSBQeU9iamVjdF9TdHIocHZhbHVlKTsKLSAgICAgICAgUHlfWERFQ1JFRihwdHlwZSk7Ci0gICAgICAgIFB5X1hERUNSRUYocHZhbHVlKTsKLSAgICAgICAgUHlfWERFQ1JFRihwdHJhY2ViYWNrKTsKLSAgICAgICAgaWYgKG1zZyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBydmFsID0gUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcobXNnKSwgMSk7Ci0gICAgICAgIFB5X0RFQ1JFRihtc2cpOwotICAgICAgICBpZiAocnZhbCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotI2VuZGlmCiAgICAgcmV0dXJuIC0xOwogfQogCkBAIC02NjcsNyArNTY2LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogI2lmIChTSVpFT0ZfTE9ORyA+IFNJWkVPRl9JTlQpCiAgICAgaWYgKCh4IDwgKChsb25nKUlOVF9NSU4pKSB8fCAoeCA+ICgobG9uZylJTlRfTUFYKSkpCi0gICAgICAgIFJBTkdFX0VSUk9SKHgsIGYsIDAsIC0xKTsKKyAgICAgICAgcmV0dXJuIF9yYW5nZV9lcnJvcihmLCAwKTsKICNlbmRpZgogICAgIHkgPSAoaW50KXg7CiAgICAgbWVtY3B5KHAsIChjaGFyICopJnksIHNpemVvZiB5KTsKQEAgLTY3OSwxMiArNTc4LDEyIEBACiB7CiAgICAgdW5zaWduZWQgbG9uZyB4OwogICAgIHVuc2lnbmVkIGludCB5OwotICAgIGlmIChnZXRfd3JhcHBlZF91bG9uZyh2LCAmeCkgPCAwKQorICAgIGlmIChnZXRfdWxvbmcodiwgJngpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHkgPSAodW5zaWduZWQgaW50KXg7CiAjaWYgKFNJWkVPRl9MT05HID4gU0laRU9GX0lOVCkKICAgICBpZiAoeCA+ICgodW5zaWduZWQgbG9uZylVSU5UX01BWCkpCi0gICAgICAgIFJBTkdFX0VSUk9SKHksIGYsIDEsIC0xKTsKKyAgICAgICAgcmV0dXJuIF9yYW5nZV9lcnJvcihmLCAxKTsKICNlbmRpZgogICAgIG1lbWNweShwLCAoY2hhciAqKSZ5LCBzaXplb2YgeSk7CiAgICAgcmV0dXJuIDA7CkBAIC03MDQsNyArNjAzLDcgQEAKIG5wX3Vsb25nKGNoYXIgKnAsIFB5T2JqZWN0ICp2LCBjb25zdCBmb3JtYXRkZWYgKmYpCiB7CiAgICAgdW5zaWduZWQgbG9uZyB4OwotICAgIGlmIChnZXRfd3JhcHBlZF91bG9uZyh2LCAmeCkgPCAwKQorICAgIGlmIChnZXRfdWxvbmcodiwgJngpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIG1lbWNweShwLCAoY2hhciAqKSZ4LCBzaXplb2YgeCk7CiAgICAgcmV0dXJuIDA7CkBAIC03MzcsOSArNjM2LDEzIEBACiBzdGF0aWMgaW50CiBucF9ib29sKGNoYXIgKnAsIFB5T2JqZWN0ICp2LCBjb25zdCBmb3JtYXRkZWYgKmYpCiB7Ci0gICAgQk9PTF9UWVBFIHk7CisgICAgaW50IHk7CisgICAgQk9PTF9UWVBFIHg7CiAgICAgeSA9IFB5T2JqZWN0X0lzVHJ1ZSh2KTsKLSAgICBtZW1jcHkocCwgKGNoYXIgKikmeSwgc2l6ZW9mIHkpOworICAgIGlmICh5IDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHggPSB5OworICAgIG1lbWNweShwLCAoY2hhciAqKSZ4LCBzaXplb2YgeCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTkxMSwxOSArODE0LDE1IEBACiB7CiAgICAgbG9uZyB4OwogICAgIFB5X3NzaXplX3QgaTsKLSAgICBpZiAoZ2V0X3dyYXBwZWRfbG9uZyh2LCAmeCkgPCAwKQorICAgIGlmIChnZXRfbG9uZyh2LCAmeCkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaSA9IGYtPnNpemU7CiAgICAgaWYgKGkgIT0gU0laRU9GX0xPTkcpIHsKICAgICAgICAgaWYgKChpID09IDIpICYmICh4IDwgLTMyNzY4IHx8IHggPiAzMjc2NykpCi0gICAgICAgICAgICBSQU5HRV9FUlJPUih4LCBmLCAwLCAweGZmZmZMKTsKKyAgICAgICAgICAgIHJldHVybiBfcmFuZ2VfZXJyb3IoZiwgMCk7CiAjaWYgKFNJWkVPRl9MT05HICE9IDQpCiAgICAgICAgIGVsc2UgaWYgKChpID09IDQpICYmICh4IDwgLTIxNDc0ODM2NDhMIHx8IHggPiAyMTQ3NDgzNjQ3TCkpCi0gICAgICAgICAgICBSQU5HRV9FUlJPUih4LCBmLCAwLCAweGZmZmZmZmZmTCk7Ci0jZW5kaWYKLSNpZmRlZiBQWV9TVFJVQ1RfT1ZFUkZMT1dfTUFTS0lORwotICAgICAgICBlbHNlIGlmICgoaSA9PSAxKSAmJiAoeCA8IC0xMjggfHwgeCA+IDEyNykpCi0gICAgICAgICAgICBSQU5HRV9FUlJPUih4LCBmLCAwLCAweGZmTCk7CisgICAgICAgICAgICByZXR1cm4gX3JhbmdlX2Vycm9yKGYsIDApOwogI2VuZGlmCiAgICAgfQogICAgIGRvIHsKQEAgLTkzOCwxNCArODM3LDE0IEBACiB7CiAgICAgdW5zaWduZWQgbG9uZyB4OwogICAgIFB5X3NzaXplX3QgaTsKLSAgICBpZiAoZ2V0X3dyYXBwZWRfdWxvbmcodiwgJngpIDwgMCkKKyAgICBpZiAoZ2V0X3Vsb25nKHYsICZ4KSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpID0gZi0+c2l6ZTsKICAgICBpZiAoaSAhPSBTSVpFT0ZfTE9ORykgewogICAgICAgICB1bnNpZ25lZCBsb25nIG1heGludCA9IDE7CiAgICAgICAgIG1heGludCA8PD0gKHVuc2lnbmVkIGxvbmcpKGkgKiA4KTsKICAgICAgICAgaWYgKHggPj0gbWF4aW50KQotICAgICAgICAgICAgUkFOR0VfRVJST1IoeCwgZiwgMSwgbWF4aW50IC0gMSk7CisgICAgICAgICAgICByZXR1cm4gX3JhbmdlX2Vycm9yKGYsIDEpOwogICAgIH0KICAgICBkbyB7CiAgICAgICAgIHBbLS1pXSA9IChjaGFyKXg7CkBAIC0xMDE1LDIwICs5MTQsMTYgQEAKIHsKICAgICBpbnQgeTsKICAgICB5ID0gUHlPYmplY3RfSXNUcnVlKHYpOworICAgIGlmICh5IDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICpwID0gKGNoYXIpeTsKICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGZvcm1hdGRlZiBiaWdlbmRpYW5fdGFibGVbXSA9IHsKICAgICB7J3gnLCAgICAgICAxLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIE5VTEx9LAotI2lmZGVmIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HCi0gICAgLyogTmF0aXZlIHBhY2tlcnMgZG8gcmFuZ2UgY2hlY2tpbmcgd2l0aG91dCBvdmVyZmxvdyBtYXNraW5nLiAqLwotICAgIHsnYicsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgbnVfYnl0ZSwgICAgICAgIGJwX2ludH0sCi0gICAgeydCJywgICAgICAgMSwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBudV91Ynl0ZSwgICAgICAgYnBfdWludH0sCi0jZWxzZQogICAgIHsnYicsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgbnVfYnl0ZSwgICAgICAgIG5wX2J5dGV9LAogICAgIHsnQicsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgbnVfdWJ5dGUsICAgICAgIG5wX3VieXRlfSwKLSNlbmRpZgogICAgIHsnYycsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgbnVfY2hhciwgICAgICAgIG5wX2NoYXJ9LAogICAgIHsncycsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgTlVMTH0sCiAgICAgeydwJywgICAgICAgMSwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBOVUxMfSwKQEAgLTExMzksMTkgKzEwMzQsMTUgQEAKIHsKICAgICBsb25nIHg7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIGlmIChnZXRfd3JhcHBlZF9sb25nKHYsICZ4KSA8IDApCisgICAgaWYgKGdldF9sb25nKHYsICZ4KSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpID0gZi0+c2l6ZTsKICAgICBpZiAoaSAhPSBTSVpFT0ZfTE9ORykgewogICAgICAgICBpZiAoKGkgPT0gMikgJiYgKHggPCAtMzI3NjggfHwgeCA+IDMyNzY3KSkKLSAgICAgICAgICAgIFJBTkdFX0VSUk9SKHgsIGYsIDAsIDB4ZmZmZkwpOworICAgICAgICAgICAgcmV0dXJuIF9yYW5nZV9lcnJvcihmLCAwKTsKICNpZiAoU0laRU9GX0xPTkcgIT0gNCkKICAgICAgICAgZWxzZSBpZiAoKGkgPT0gNCkgJiYgKHggPCAtMjE0NzQ4MzY0OEwgfHwgeCA+IDIxNDc0ODM2NDdMKSkKLSAgICAgICAgICAgIFJBTkdFX0VSUk9SKHgsIGYsIDAsIDB4ZmZmZmZmZmZMKTsKLSNlbmRpZgotI2lmZGVmIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HCi0gICAgICAgIGVsc2UgaWYgKChpID09IDEpICYmICh4IDwgLTEyOCB8fCB4ID4gMTI3KSkKLSAgICAgICAgICAgIFJBTkdFX0VSUk9SKHgsIGYsIDAsIDB4ZmZMKTsKKyAgICAgICAgICAgIHJldHVybiBfcmFuZ2VfZXJyb3IoZiwgMCk7CiAjZW5kaWYKICAgICB9CiAgICAgZG8gewpAQCAtMTE2NiwxNCArMTA1NywxNCBAQAogewogICAgIHVuc2lnbmVkIGxvbmcgeDsKICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaWYgKGdldF93cmFwcGVkX3Vsb25nKHYsICZ4KSA8IDApCisgICAgaWYgKGdldF91bG9uZyh2LCAmeCkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaSA9IGYtPnNpemU7CiAgICAgaWYgKGkgIT0gU0laRU9GX0xPTkcpIHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXhpbnQgPSAxOwogICAgICAgICBtYXhpbnQgPDw9ICh1bnNpZ25lZCBsb25nKShpICogOCk7CiAgICAgICAgIGlmICh4ID49IG1heGludCkKLSAgICAgICAgICAgIFJBTkdFX0VSUk9SKHgsIGYsIDEsIG1heGludCAtIDEpOworICAgICAgICAgICAgcmV0dXJuIF9yYW5nZV9lcnJvcihmLCAxKTsKICAgICB9CiAgICAgZG8gewogICAgICAgICAqcCsrID0gKGNoYXIpeDsKQEAgLTEyNDAsMTQgKzExMzEsOCBAQAogCiBzdGF0aWMgZm9ybWF0ZGVmIGxpbGVuZGlhbl90YWJsZVtdID0gewogICAgIHsneCcsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgTlVMTH0sCi0jaWZkZWYgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcKLSAgICAvKiBOYXRpdmUgcGFja2VycyBkbyByYW5nZSBjaGVja2luZyB3aXRob3V0IG92ZXJmbG93IG1hc2tpbmcuICovCi0gICAgeydiJywgICAgICAgMSwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBudV9ieXRlLCAgICAgICAgbHBfaW50fSwKLSAgICB7J0InLCAgICAgICAxLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIG51X3VieXRlLCAgICAgICBscF91aW50fSwKLSNlbHNlCiAgICAgeydiJywgICAgICAgMSwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBudV9ieXRlLCAgICAgICAgbnBfYnl0ZX0sCiAgICAgeydCJywgICAgICAgMSwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBudV91Ynl0ZSwgICAgICAgbnBfdWJ5dGV9LAotI2VuZGlmCiAgICAgeydjJywgICAgICAgMSwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBudV9jaGFyLCAgICAgICAgbnBfY2hhcn0sCiAgICAgeydzJywgICAgICAgMSwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBOVUxMfSwKICAgICB7J3AnLCAgICAgICAxLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIE5VTEx9LApAQCAtMTY1OSw3ICsxNTQ0LDggQEAKICAgICAgICAgaWYgKGUtPmZvcm1hdCA9PSAncycpIHsKICAgICAgICAgICAgIGlmICghUHlTdHJpbmdfQ2hlY2sodikpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3MnIG11c3QgYmUgYSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncycgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBhIHN0cmluZyIpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4gPSBQeVN0cmluZ19HRVRfU0laRSh2KTsKQEAgLTE2NzAsNyArMTU1Niw4IEBACiAgICAgICAgIH0gZWxzZSBpZiAoZS0+Zm9ybWF0ID09ICdwJykgewogICAgICAgICAgICAgaWYgKCFQeVN0cmluZ19DaGVjayh2KSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncCcgbXVzdCBiZSBhIHN0cmluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yICdwJyBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGEgc3RyaW5nIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHYpOwpAQCAtMTY4MSwxMyArMTU2OCwxNCBAQAogICAgICAgICAgICAgaWYgKG4gPiAyNTUpCiAgICAgICAgICAgICAgICAgbiA9IDI1NTsKICAgICAgICAgICAgICpyZXMgPSBQeV9TQUZFX0RPV05DQVNUKG4sIFB5X3NzaXplX3QsIHVuc2lnbmVkIGNoYXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGUtPnBhY2socmVzLCB2LCBlKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCi0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb25nIHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGludCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChlLT5wYWNrKHJlcywgdiwgZSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoc3RyY2hyKGludGVnZXJfY29kZXMsIGUtPmZvcm1hdCkgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFN0cnVjdEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZWdlciBvdXQgb2YgcmFuZ2UgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclYycgZm9ybWF0IGNvZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT5mb3JtYXQpOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDM5LDEwICsxOTI3LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbW9kdWxlX2Z1bmN0aW9uc1tdID0gewogICAgIHsiX2NsZWFyY2FjaGUiLCAgICAgKFB5Q0Z1bmN0aW9uKWNsZWFyY2FjaGUsICAgICAgICBNRVRIX05PQVJHUywgICAgY2xlYXJjYWNoZV9kb2N9LAotICAgIHsiY2FsY3NpemUiLCAgICAgICAgY2FsY3NpemUsICAgICAgIE1FVEhfTywgICAgICAgICBjYWxjc2l6ZV9kb2N9LAorICAgIHsiY2FsY3NpemUiLCAgICAgICAgY2FsY3NpemUsICAgICAgIE1FVEhfTywgY2FsY3NpemVfZG9jfSwKICAgICB7InBhY2siLCAgICAgICAgICAgIHBhY2ssICAgICAgICAgICBNRVRIX1ZBUkFSR1MsICAgcGFja19kb2N9LAogICAgIHsicGFja19pbnRvIiwgICAgICAgcGFja19pbnRvLCAgICAgIE1FVEhfVkFSQVJHUywgICBwYWNrX2ludG9fZG9jfSwKLSAgICB7InVucGFjayIsICAgICAgICAgIHVucGFjaywgICAgICAgICBNRVRIX1ZBUkFSR1MsICAgdW5wYWNrX2RvY30sCisgICAgeyJ1bnBhY2siLCAgICAgICAgICB1bnBhY2ssIE1FVEhfVkFSQVJHUywgICB1bnBhY2tfZG9jfSwKICAgICB7InVucGFja19mcm9tIiwgICAgIChQeUNGdW5jdGlvbil1bnBhY2tfZnJvbSwKICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsICAgICAgICAgdW5wYWNrX2Zyb21fZG9jfSwKICAgICB7TlVMTCwgICAgICAgTlVMTH0gICAgICAgICAgLyogc2VudGluZWwgKi8KQEAgLTIwOTcsMjUgKzE5ODUsOSBAQAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5U3RydWN0VHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CiAKLSNpZmRlZiBQWV9TVFJVQ1RfT1ZFUkZMT1dfTUFTS0lORwotICAgIGlmIChweWludF96ZXJvID09IE5VTEwpIHsKLSAgICAgICAgcHlpbnRfemVybyA9IFB5SW50X0Zyb21Mb25nKDApOwotICAgICAgICBpZiAocHlpbnRfemVybyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAocHlsb25nX3Vsb25nX21hc2sgPT0gTlVMTCkgewotI2lmIChTSVpFT0ZfTE9ORyA9PSA0KQotICAgICAgICBweWxvbmdfdWxvbmdfbWFzayA9IFB5TG9uZ19Gcm9tU3RyaW5nKCJGRkZGRkZGRiIsIE5VTEwsIDE2KTsKLSNlbHNlCi0gICAgICAgIHB5bG9uZ191bG9uZ19tYXNrID0gUHlMb25nX0Zyb21TdHJpbmcoIkZGRkZGRkZGRkZGRkZGRkYiLCBOVUxMLCAxNik7Ci0jZW5kaWYKLSAgICAgICAgaWYgKHB5bG9uZ191bG9uZ19tYXNrID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jZWxzZQotICAgIC8qIFRoaXMgc3BlZWQgdHJpY2sgY2FuJ3QgYmUgdXNlZCB1bnRpbCBvdmVyZmxvdyBtYXNraW5nIGdvZXMgYXdheSwgYmVjYXVzZQotICAgICAgIG5hdGl2ZSBlbmRpYW4gYWx3YXlzIHJhaXNlcyBleGNlcHRpb25zIGluc3RlYWQgb2Ygb3ZlcmZsb3cgbWFza2luZy4gKi8KKyAgICAvKiBUaGlzIHNwZWVkIHRyaWNrIGNhbid0IGJlIHVzZWQgdW50aWwgb3ZlcmZsb3cgbWFza2luZyBnb2VzCisgICAgICAgYXdheSwgYmVjYXVzZSBuYXRpdmUgZW5kaWFuIGFsd2F5cyByYWlzZXMgZXhjZXB0aW9ucworICAgICAgIGluc3RlYWQgb2Ygb3ZlcmZsb3cgbWFza2luZy4gKi8KIAogICAgIC8qIENoZWNrIGVuZGlhbiBhbmQgc3dhcCBpbiBmYXN0ZXIgZnVuY3Rpb25zICovCiAgICAgewpAQCAtMjE1NSw3ICsyMDI3LDYgQEAKICAgICAgICAgICAgIG5hdGl2ZSsrOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCiAKICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwogICAgIGlmIChTdHJ1Y3RFcnJvciA9PSBOVUxMKSB7CkBAIC0yMTczLDExICsyMDQ0LDUgQEAKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIl9fdmVyc2lvbl9fIiwgdmVyKTsKIAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJfUFlfU1RSVUNUX1JBTkdFX0NIRUNLSU5HIiwgMSk7Ci0jaWZkZWYgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiX1BZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HIiwgMSk7Ci0jZW5kaWYKLSNpZmRlZiBQWV9TVFJVQ1RfRkxPQVRfQ09FUkNFCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIl9QWV9TVFJVQ1RfRkxPQVRfQ09FUkNFIiwgMSk7Ci0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYyBiL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKaW5kZXggZWU1YWU0OC4uMjNhNTY5MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYworKysgYi9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgPGZsb2F0Lmg+CiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCisjaW5jbHVkZSAiZGF0ZXRpbWUuaCIKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKQEAgLTI4Miw2ICsyODMsMTAwIEBACiB9CiAKIAorLyogSXNzdWUgIzczODU6IENoZWNrIHRoYXQgbWVtb3J5dmlldygpIGRvZXMgbm90IGNyYXNoCisgKiAgIHdoZW4gYmZfZ2V0YnVmZmVyIHJldHVybnMgYW4gZXJyb3IKKyAqLworCitzdGF0aWMgaW50Citicm9rZW5fYnVmZmVyX2dldGJ1ZmZlcihQeU9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICp2aWV3LCBpbnQgZmxhZ3MpCit7CisgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICBUZXN0RXJyb3IsCisgICAgICAgICJ0ZXN0X2Jyb2tlbl9tZW1vcnl2aWV3OiBleHBlY3RlZCBlcnJvciBpbiBiZl9nZXRidWZmZXIiKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBQeUJ1ZmZlclByb2NzIG1lbW9yeXZpZXd0ZXN0ZXJfYXNfYnVmZmVyID0geworICAgIDAsICAgICAgICAgIC8qIGJmX2dldHJlYWRidWZmZXIgKi8KKyAgICAwLCAgICAgICAgICAvKiBiZl9nZXR3cml0ZWJ1ZmZlciAqLworICAgIDAsICAgICAgICAgIC8qIGJmX2dldHNlZ2NvdW50ICovCisgICAgMCwgICAgICAgICAgLyogYmZfZ2V0Y2hhcmJ1ZmZlciAqLworICAgIChnZXRidWZmZXJwcm9jKWJyb2tlbl9idWZmZXJfZ2V0YnVmZmVyLCAgICAgLyogYmZfZ2V0YnVmZmVyICovCisgICAgMCwgICAgICAgICAgLyogYmZfcmVsZWFzZWJ1ZmZlciAqLworfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBfTWVtb3J5Vmlld1Rlc3Rlcl9UeXBlID0geworICAgIFB5T2JqZWN0X0hFQURfSU5JVChOVUxMKQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgaXRlbXMgZm9yIHZhcm9iamVjdCAqLworICAgICJtZW1vcnl2aWV3dGVzdGVyIiwgICAgICAgICAvKiBOYW1lIG9mIHRoaXMgdHlwZSAqLworICAgIHNpemVvZihQeU9iamVjdCksICAgICAgICAgICAvKiBCYXNpYyBvYmplY3Qgc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJdGVtIHNpemUgZm9yIHZhcm9iamVjdCAqLworICAgIChkZXN0cnVjdG9yKVB5T2JqZWN0X0RlbCwgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgJm1lbW9yeXZpZXd0ZXN0ZXJfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVIsICAgICAvKiB0cF9mbGFncyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKKworc3RhdGljIFB5T2JqZWN0KgordGVzdF9icm9rZW5fbWVtb3J5dmlldyhQeU9iamVjdCogc2VsZikKK3sKKyAgICBQeU9iamVjdCAqb2JqID0gUHlPYmplY3RfTmV3KFB5T2JqZWN0LCAmX01lbW9yeVZpZXdUZXN0ZXJfVHlwZSk7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICBUZXN0RXJyb3IsCisgICAgICAgICAgICAidGVzdF9icm9rZW5fbWVtb3J5dmlldzogZmFpbGVkIHRvIGNyZWF0ZSBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVzID0gUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Qob2JqKTsKKyAgICBpZiAocmVzIHx8ICFQeUVycl9PY2N1cnJlZCgpKXsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgVGVzdEVycm9yLAorICAgICAgICAgICAgInRlc3RfYnJva2VuX21lbW9yeXZpZXc6IG1lbW9yeXZpZXcoKSBkaWRuJ3QgcmFpc2UgYW4gRXhjZXB0aW9uIik7CisgICAgICAgIFB5X1hERUNSRUYocmVzKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5RXJyX0NsZWFyKCk7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKwogLyogVGVzdHMgb2YgUHlMb25nX3tBcywgRnJvbX17VW5zaWduZWQsfUxvbmcoKSwgYW5kICgjaWZkZWYgSEFWRV9MT05HX0xPTkcpCiAgICBQeUxvbmdfe0FzLCBGcm9tfXtVbnNpZ25lZCx9TG9uZ0xvbmcoKS4KIApAQCAtMzU3LDYgKzQ1MiwzMzYgQEAKICN1bmRlZiBGX1VfVE9fUFkKICN1bmRlZiBGX1BZX1RPX1UKIAorLyogVGVzdCB0aGUgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93IEFQSS4gR2VuZXJhbCBjb252ZXJzaW9uIHRvIFBZX0xPTkcKKyAgIGlzIHRlc3RlZCBieSB0ZXN0X2xvbmdfYXBpX2lubmVyLiBUaGlzIHRlc3Qgd2lsbCBjb25jZW50cmF0ZSBvbiBwcm9wZXIKKyAgIGhhbmRsaW5nIG9mIG92ZXJmbG93LgorKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfbG9uZ19hbmRfb3ZlcmZsb3coUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKm51bSwgKm9uZSwgKnRlbXA7CisgICAgbG9uZyB2YWx1ZTsKKyAgICBpbnQgb3ZlcmZsb3c7CisKKyAgICAvKiBUZXN0IHRoYXQgb3ZlcmZsb3cgaXMgc2V0IHByb3Blcmx5IGZvciBhIGxhcmdlIHZhbHVlLiAqLworICAgIC8qIG51bSBpcyBhIG51bWJlciBsYXJnZXIgdGhhbiBMT05HX01BWCBldmVuIG9uIDY0LWJpdCBwbGF0Zm9ybXMgKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbVN0cmluZygiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgInJldHVybiB2YWx1ZSB3YXMgbm90IHNldCB0byAtMSIpOworICAgIGlmIChvdmVyZmxvdyAhPSAxKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3Qgc2V0IHRvIDEiKTsKKworICAgIC8qIFNhbWUgYWdhaW4sIHdpdGggbnVtID0gTE9OR19NQVggKyAxICovCisgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nKExPTkdfTUFYKTsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG9uZSA9IFB5TG9uZ19Gcm9tTG9uZygxTCk7CisgICAgaWYgKG9uZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihudW0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdGVtcCA9IFB5TnVtYmVyX0FkZChudW0sIG9uZSk7CisgICAgUHlfREVDUkVGKG9uZSk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgbnVtID0gdGVtcDsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJyZXR1cm4gdmFsdWUgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAxIik7CisKKyAgICAvKiBUZXN0IHRoYXQgb3ZlcmZsb3cgaXMgc2V0IHByb3Blcmx5IGZvciBhIGxhcmdlIG5lZ2F0aXZlIHZhbHVlLiAqLworICAgIC8qIG51bSBpcyBhIG51bWJlciBzbWFsbGVyIHRoYW4gTE9OR19NSU4gZXZlbiBvbiA2NC1iaXQgcGxhdGZvcm1zICovCisgICAgbnVtID0gUHlMb25nX0Zyb21TdHJpbmcoIi1GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiLCBOVUxMLCAxNik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDEyMzQ7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAicmV0dXJuIHZhbHVlIHdhcyBub3Qgc2V0IHRvIC0xIik7CisgICAgaWYgKG92ZXJmbG93ICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3Qgc2V0IHRvIC0xIik7CisKKyAgICAvKiBTYW1lIGFnYWluLCB3aXRoIG51bSA9IExPTkdfTUlOIC0gMSAqLworICAgIG51bSA9IFB5TG9uZ19Gcm9tTG9uZyhMT05HX01JTik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMUwpOworICAgIGlmIChvbmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobnVtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRlbXAgPSBQeU51bWJlcl9TdWJ0cmFjdChudW0sIG9uZSk7CisgICAgUHlfREVDUkVGKG9uZSk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgbnVtID0gdGVtcDsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJyZXR1cm4gdmFsdWUgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKworICAgIC8qIFRlc3QgdGhhdCBvdmVyZmxvdyBpcyBjbGVhcmVkIHByb3Blcmx5IGZvciBzbWFsbCB2YWx1ZXMuICovCisgICAgbnVtID0gUHlMb25nX0Zyb21TdHJpbmcoIkZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IDB4RkYpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAiZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIDB4RkYiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IGNsZWFyZWQiKTsKKworICAgIG51bSA9IFB5TG9uZ19Gcm9tU3RyaW5nKCItRkYiLCBOVUxMLCAxNik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDA7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gLTB4RkYpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAiZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIDB4RkYiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgc2V0IGluY29ycmVjdGx5Iik7CisKKyAgICBudW0gPSBQeUxvbmdfRnJvbUxvbmcoTE9OR19NQVgpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IExPTkdfTUFYKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgImV4cGVjdGVkIHJldHVybiB2YWx1ZSBMT05HX01BWCIpOworICAgIGlmIChvdmVyZmxvdyAhPSAwKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3QgY2xlYXJlZCIpOworCisgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nKExPTkdfTUlOKTsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBMT05HX01JTikKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJleHBlY3RlZCByZXR1cm4gdmFsdWUgTE9OR19NSU4iKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IGNsZWFyZWQiKTsKKworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKworLyogVGVzdCB0aGUgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyBBUEkuIEdlbmVyYWwgY29udmVyc2lvbiB0bworICAgUFlfTE9OR19MT05HIGlzIHRlc3RlZCBieSB0ZXN0X2xvbmdfYXBpX2lubmVyLiBUaGlzIHRlc3Qgd2lsbAorICAgY29uY2VudHJhdGUgb24gcHJvcGVyIGhhbmRsaW5nIG9mIG92ZXJmbG93LgorKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqbnVtLCAqb25lLCAqdGVtcDsKKyAgICBQWV9MT05HX0xPTkcgdmFsdWU7CisgICAgaW50IG92ZXJmbG93OworCisgICAgLyogVGVzdCB0aGF0IG92ZXJmbG93IGlzIHNldCBwcm9wZXJseSBmb3IgYSBsYXJnZSB2YWx1ZS4gKi8KKyAgICAvKiBudW0gaXMgYSBudW1iZXIgbGFyZ2VyIHRoYW4gUFlfTExPTkdfTUFYIG9uIGEgdHlwaWNhbCBtYWNoaW5lLiAqLworICAgIG51bSA9IFB5TG9uZ19Gcm9tU3RyaW5nKCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiLCBOVUxMLCAxNik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDEyMzQ7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAicmV0dXJuIHZhbHVlIHdhcyBub3Qgc2V0IHRvIC0xIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAxIik7CisKKyAgICAvKiBTYW1lIGFnYWluLCB3aXRoIG51bSA9IFBZX0xMT05HX01BWCArIDEgKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xMT05HX01BWCk7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMUwpOworICAgIGlmIChvbmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobnVtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRlbXAgPSBQeU51bWJlcl9BZGQobnVtLCBvbmUpOworICAgIFB5X0RFQ1JFRihvbmUpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIG51bSA9IHRlbXA7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDA7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAicmV0dXJuIHZhbHVlIHdhcyBub3Qgc2V0IHRvIC0xIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAxIik7CisKKyAgICAvKiBUZXN0IHRoYXQgb3ZlcmZsb3cgaXMgc2V0IHByb3Blcmx5IGZvciBhIGxhcmdlIG5lZ2F0aXZlIHZhbHVlLiAqLworICAgIC8qIG51bSBpcyBhIG51bWJlciBzbWFsbGVyIHRoYW4gUFlfTExPTkdfTUlOIG9uIGEgdHlwaWNhbCBwbGF0Zm9ybSAqLworICAgIG51bSA9IFB5TG9uZ19Gcm9tU3RyaW5nKCItRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgInJldHVybiB2YWx1ZSB3YXMgbm90IHNldCB0byAtMSIpOworICAgIGlmIChvdmVyZmxvdyAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3Qgc2V0IHRvIC0xIik7CisKKyAgICAvKiBTYW1lIGFnYWluLCB3aXRoIG51bSA9IFBZX0xMT05HX01JTiAtIDEgKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xMT05HX01JTik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMUwpOworICAgIGlmIChvbmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobnVtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRlbXAgPSBQeU51bWJlcl9TdWJ0cmFjdChudW0sIG9uZSk7CisgICAgUHlfREVDUkVGKG9uZSk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgbnVtID0gdGVtcDsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJyZXR1cm4gdmFsdWUgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAtMSIpOworCisgICAgLyogVGVzdCB0aGF0IG92ZXJmbG93IGlzIGNsZWFyZWQgcHJvcGVybHkgZm9yIHNtYWxsIHZhbHVlcy4gKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbVN0cmluZygiRkYiLCBOVUxMLCAxNik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDEyMzQ7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IDB4RkYpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJleHBlY3RlZCByZXR1cm4gdmFsdWUgMHhGRiIpOworICAgIGlmIChvdmVyZmxvdyAhPSAwKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBjbGVhcmVkIik7CisKKyAgICBudW0gPSBQeUxvbmdfRnJvbVN0cmluZygiLUZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAwOworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMHhGRikKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgImV4cGVjdGVkIHJldHVybiB2YWx1ZSAweEZGIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDApCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgc2V0IGluY29ycmVjdGx5Iik7CisKKyAgICBudW0gPSBQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xMT05HX01BWCk7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDEyMzQ7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IFBZX0xMT05HX01BWCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgImV4cGVjdGVkIHJldHVybiB2YWx1ZSBQWV9MTE9OR19NQVgiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3QgY2xlYXJlZCIpOworCisgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nTG9uZyhQWV9MTE9OR19NSU4pOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAwOworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBQWV9MTE9OR19NSU4pCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJleHBlY3RlZCByZXR1cm4gdmFsdWUgUFlfTExPTkdfTUlOIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDApCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IGNsZWFyZWQiKTsKKworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKwogLyogVGVzdCB0aGUgTCBjb2RlIGZvciBQeUFyZ19QYXJzZVR1cGxlLiAgVGhpcyBzaG91bGQgZGVsaXZlciBhIFBZX0xPTkdfTE9ORwogICAgZm9yIGJvdGggbG9uZyBhbmQgaW50IGFyZ3VtZW50cy4gIFRoZSB0ZXN0IG1heSBsZWFrIGEgbGl0dGxlIG1lbW9yeSBpZgogICAgaXQgZmFpbHMuCkBAIC00NTMsNiArODc4LDE1IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitnZXRhcmdzX2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHNob3J0IHZhbHVlOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaCIsICZ2YWx1ZSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpdmFsdWUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogZ2V0YXJnc19IKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKQEAgLTYzMCw2ICsxMDY0LDQ4IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3dpZGVjaGFyKFB5T2JqZWN0ICpzZWxmKQoreworI2lmIGRlZmluZWQoU0laRU9GX1dDSEFSX1QpICYmIChTSVpFT0ZfV0NIQVJfVCA9PSA0KQorICAgIGNvbnN0IHdjaGFyX3Qgd3RleHRbMl0gPSB7KHdjaGFyX3QpMHgxMEFCQ0R1fTsKKyAgICBzaXplX3Qgd3RleHRsZW4gPSAxOworI2Vsc2UKKyAgICBjb25zdCB3Y2hhcl90IHd0ZXh0WzNdID0geyh3Y2hhcl90KTB4REJFQXUsICh3Y2hhcl90KTB4REZDRHV9OworICAgIHNpemVfdCB3dGV4dGxlbiA9IDI7CisjZW5kaWYKKyAgICBQeU9iamVjdCAqd2lkZSwgKnV0Zjg7CisKKyAgICB3aWRlID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3dGV4dCwgd3RleHRsZW4pOworICAgIGlmICh3aWRlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdXRmOCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJceGY0XHg4YVx4YWZceDhkIik7CisgICAgaWYgKHV0ZjggPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChQeVVuaWNvZGVfR0VUX1NJWkUod2lkZSkgIT0gUHlVbmljb2RlX0dFVF9TSVpFKHV0ZjgpKSB7CisgICAgICAgIFB5X0RFQ1JFRih3aWRlKTsKKyAgICAgICAgUHlfREVDUkVGKHV0ZjgpOworICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3Rfd2lkZWNoYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIndpZGUgc3RyaW5nIGFuZCB1dGY4IHN0cmluZyBoYXZlIGRpZmZlcmVudCBsZW5ndGgiKTsKKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlKHdpZGUsIHV0ZjgpKSB7CisgICAgICAgIFB5X0RFQ1JFRih3aWRlKTsKKyAgICAgICAgUHlfREVDUkVGKHV0ZjgpOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3Rfd2lkZWNoYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIndpZGUgc3RyaW5nIGFuZCB1dGY4IHN0cmluZyBhcmUgZGlmZmVyZW50cyIpOworICAgIH0KKworICAgIFB5X0RFQ1JFRih3aWRlKTsKKyAgICBQeV9ERUNSRUYodXRmOCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiB0ZXN0X2VtcHR5X2FyZ3BhcnNlKFB5T2JqZWN0ICpzZWxmKQogewogICAgIC8qIFRlc3QgdGhhdCBmb3JtYXRzIGNhbiBiZWdpbiB3aXRoICd8Jy4gU2VlIGlzc3VlICM0NzIwLiAqLwpAQCAtNzYyLDYgKzEyMzgsMzEgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorCitzdGF0aWMgaW50IHRlc3RfcnVuX2NvdW50ZXIgPSAwOworCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9kYXRldGltZV9jYXBpKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgeworICAgIGlmIChQeURhdGVUaW1lQVBJKSB7CisgICAgICAgIGlmICh0ZXN0X3J1bl9jb3VudGVyKSB7CisgICAgICAgICAgICAvKiBQcm9iYWJseSByZWdydGVzdC5weSAtUiAqLworICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXNzZXJ0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5RGF0ZVRpbWVfQ0FQSSBzb21laG93IGluaXRpYWxpemVkIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0ZXN0X3J1bl9jb3VudGVyKys7CisgICAgUHlEYXRlVGltZV9JTVBPUlQ7CisgICAgaWYgKFB5RGF0ZVRpbWVBUEkpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogI2lmZGVmIFdJVEhfVEhSRUFECiAKIC8qIHRlc3RfdGhyZWFkX3N0YXRlIHNwYXducyBhIHRocmVhZCBvZiBpdHMgb3duLCBhbmQgdGhhdCB0aHJlYWQgcmVsZWFzZXMKQEAgLTg0Niw2ICsxMzQ3LDQzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQorCisvKiB0ZXN0IFB5X0FkZFBlbmRpbmdDYWxscyB1c2luZyB0aHJlYWRzICovCitzdGF0aWMgaW50IF9wZW5kaW5nX2NhbGxiYWNrKHZvaWQgKmFyZykKK3sKKyAgICAvKiB3ZSBhc3N1bWUgdGhlIGFyZ3VtZW50IGlzIGNhbGxhYmxlIG9iamVjdCB0byB3aGljaCB3ZSBvd24gYSByZWZlcmVuY2UgKi8KKyAgICBQeU9iamVjdCAqY2FsbGFibGUgPSAoUHlPYmplY3QgKilhcmc7CisgICAgUHlPYmplY3QgKnIgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGNhbGxhYmxlLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYoY2FsbGFibGUpOworICAgIFB5X1hERUNSRUYocik7CisgICAgcmV0dXJuIHIgIT0gTlVMTCA/IDAgOiAtMTsKK30KKworLyogVGhlIGZvbGxvd2luZyByZXF1ZXN0cyBuIGNhbGxiYWNrcyB0byBfcGVuZGluZ19jYWxsYmFjay4gIEl0IGNhbiBiZQorICogcnVuIGZyb20gYW55IHB5dGhvbiB0aHJlYWQuCisgKi8KK1B5T2JqZWN0ICpwZW5kaW5nX3RocmVhZGZ1bmMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKmNhbGxhYmxlOworICAgIGludCByOworICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZywgIk8iLCAmY2FsbGFibGUpID09IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogY3JlYXRlIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBjYWxsYmFja3doaWxlIHdlIGhvbGQgdGhlIGxvY2sgKi8KKyAgICBQeV9JTkNSRUYoY2FsbGFibGUpOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHIgPSBQeV9BZGRQZW5kaW5nQ2FsbCgmX3BlbmRpbmdfY2FsbGJhY2ssIGNhbGxhYmxlKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKHI8MCkgeworICAgICAgICBQeV9ERUNSRUYoY2FsbGFibGUpOyAvKiB1bnN1Y2Nlc3NmdWwgYWRkLCBkZXN0cm95IHRoZSBleHRyYSByZWZlcmVuY2UgKi8KKyAgICAgICAgUHlfSU5DUkVGKFB5X0ZhbHNlKTsKKyAgICAgICAgcmV0dXJuIFB5X0ZhbHNlOworICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7CisgICAgcmV0dXJuIFB5X1RydWU7Cit9CiAjZW5kaWYKIAogLyogU29tZSB0ZXN0cyBvZiBQeVN0cmluZ19Gcm9tRm9ybWF0KCkuICBUaGlzIG5lZWRzIG1vcmUgdGVzdHMuICovCkBAIC04NzUsNiArMTQxMywxMiBAQAogICAgIENIRUNLXzFfRk9STUFUKCIlbHUiLCB1bnNpZ25lZCBsb25nKTsKICAgICBDSEVDS18xX0ZPUk1BVCgiJXp1Iiwgc2l6ZV90KTsKIAorICAgIC8qICIlbGxkIiBhbmQgIiVsbHUiIHN1cHBvcnQgYWRkZWQgaW4gUHl0aG9uIDIuNy4gKi8KKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgIENIRUNLXzFfRk9STUFUKCIlbGx1IiwgdW5zaWduZWQgUFlfTE9OR19MT05HKTsKKyAgICBDSEVDS18xX0ZPUk1BVCgiJWxsZCIsIFBZX0xPTkdfTE9ORyk7CisjZW5kaWYKKwogICAgIFB5X1JFVFVSTl9OT05FOwogCiAgRmFpbDoKQEAgLTg4NCw2ICsxNDI4LDE1NyBAQAogI3VuZGVmIENIRUNLXzFfRk9STUFUCiB9CiAKKy8qIENvdmVyYWdlIHRlc3Rpbmcgb2YgY2Fwc3VsZSBvYmplY3RzLiAqLworCitzdGF0aWMgY29uc3QgY2hhciAqY2Fwc3VsZV9uYW1lID0gImNhcHN1bGUgbmFtZSI7CitzdGF0aWMgICAgICAgY2hhciAqY2Fwc3VsZV9wb2ludGVyID0gImNhcHN1bGUgcG9pbnRlciI7CitzdGF0aWMgICAgICAgY2hhciAqY2Fwc3VsZV9jb250ZXh0ID0gImNhcHN1bGUgY29udGV4dCI7CitzdGF0aWMgY29uc3QgY2hhciAqY2Fwc3VsZV9lcnJvciA9IE5VTEw7CitzdGF0aWMgaW50CitjYXBzdWxlX2Rlc3RydWN0b3JfY2FsbF9jb3VudCA9IDA7CisKK3N0YXRpYyB2b2lkCitjYXBzdWxlX2Rlc3RydWN0b3IoUHlPYmplY3QgKm8pIHsKKyAgICBjYXBzdWxlX2Rlc3RydWN0b3JfY2FsbF9jb3VudCsrOworICAgIGlmIChQeUNhcHN1bGVfR2V0Q29udGV4dChvKSAhPSBjYXBzdWxlX2NvbnRleHQpIHsKKyAgICAgICAgY2Fwc3VsZV9lcnJvciA9ICJjb250ZXh0IGRpZCBub3QgbWF0Y2ggaW4gZGVzdHJ1Y3RvciEiOworICAgIH0gZWxzZSBpZiAoUHlDYXBzdWxlX0dldERlc3RydWN0b3IobykgIT0gY2Fwc3VsZV9kZXN0cnVjdG9yKSB7CisgICAgICAgIGNhcHN1bGVfZXJyb3IgPSAiZGVzdHJ1Y3RvciBkaWQgbm90IG1hdGNoIGluIGRlc3RydWN0b3IhICAod29haCEpIjsKKyAgICB9IGVsc2UgaWYgKFB5Q2Fwc3VsZV9HZXROYW1lKG8pICE9IGNhcHN1bGVfbmFtZSkgeworICAgICAgICBjYXBzdWxlX2Vycm9yID0gIm5hbWUgZGlkIG5vdCBtYXRjaCBpbiBkZXN0cnVjdG9yISI7CisgICAgfSBlbHNlIGlmIChQeUNhcHN1bGVfR2V0UG9pbnRlcihvLCBjYXBzdWxlX25hbWUpICE9IGNhcHN1bGVfcG9pbnRlcikgeworICAgICAgICBjYXBzdWxlX2Vycm9yID0gInBvaW50ZXIgZGlkIG5vdCBtYXRjaCBpbiBkZXN0cnVjdG9yISI7CisgICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAqbmFtZTsKKyAgICBjaGFyICptb2R1bGU7CisgICAgY2hhciAqYXR0cmlidXRlOworfSBrbm93bl9jYXBzdWxlOworCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9jYXBzdWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb2JqZWN0OworICAgIGNvbnN0IGNoYXIgKmVycm9yID0gTlVMTDsKKyAgICB2b2lkICpwb2ludGVyOworICAgIHZvaWQgKnBvaW50ZXIyOworICAgIGtub3duX2NhcHN1bGUga25vd25fY2Fwc3VsZXNbXSA9IHsKKyAgICAgICAgI2RlZmluZSBLTk9XTl9DQVBTVUxFKG1vZHVsZSwgbmFtZSkgICAgICAgICAgICAgeyBtb2R1bGUgIi4iIG5hbWUsIG1vZHVsZSwgbmFtZSB9CisgICAgICAgIEtOT1dOX0NBUFNVTEUoIl9zb2NrZXQiLCAiQ0FQSSIpLAorICAgICAgICBLTk9XTl9DQVBTVUxFKCJfY3Vyc2VzIiwgIl9DX0FQSSIpLAorICAgICAgICBLTk9XTl9DQVBTVUxFKCJkYXRldGltZSIsICJkYXRldGltZV9DQVBJIiksCisgICAgICAgIHsgTlVMTCwgTlVMTCB9LAorICAgIH07CisgICAga25vd25fY2Fwc3VsZSAqa25vd24gPSAma25vd25fY2Fwc3VsZXNbMF07CisKKyNkZWZpbmUgRkFJTCh4KSB7IGVycm9yID0gKHgpOyBnb3RvIGV4aXQ7IH0KKworI2RlZmluZSBDSEVDS19ERVNUUlVDVE9SIFwKKyAgICBpZiAoY2Fwc3VsZV9lcnJvcikgeyBcCisgICAgICAgIEZBSUwoY2Fwc3VsZV9lcnJvcik7IFwKKyAgICB9IFwKKyAgICBlbHNlIGlmICghY2Fwc3VsZV9kZXN0cnVjdG9yX2NhbGxfY291bnQpIHsgICAgICAgICAgXAorICAgICAgICBGQUlMKCJkZXN0cnVjdG9yIG5vdCBjYWxsZWQhIik7IFwKKyAgICB9IFwKKyAgICBjYXBzdWxlX2Rlc3RydWN0b3JfY2FsbF9jb3VudCA9IDA7IFwKKworICAgIG9iamVjdCA9IFB5Q2Fwc3VsZV9OZXcoY2Fwc3VsZV9wb2ludGVyLCBjYXBzdWxlX25hbWUsIGNhcHN1bGVfZGVzdHJ1Y3Rvcik7CisgICAgUHlDYXBzdWxlX1NldENvbnRleHQob2JqZWN0LCBjYXBzdWxlX2NvbnRleHQpOworICAgIGNhcHN1bGVfZGVzdHJ1Y3RvcihvYmplY3QpOworICAgIENIRUNLX0RFU1RSVUNUT1I7CisgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgQ0hFQ0tfREVTVFJVQ1RPUjsKKworICAgIG9iamVjdCA9IFB5Q2Fwc3VsZV9OZXcoa25vd24sICJpZ25vcmVkIiwgTlVMTCk7CisgICAgUHlDYXBzdWxlX1NldFBvaW50ZXIob2JqZWN0LCBjYXBzdWxlX3BvaW50ZXIpOworICAgIFB5Q2Fwc3VsZV9TZXROYW1lKG9iamVjdCwgY2Fwc3VsZV9uYW1lKTsKKyAgICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcihvYmplY3QsIGNhcHN1bGVfZGVzdHJ1Y3Rvcik7CisgICAgUHlDYXBzdWxlX1NldENvbnRleHQob2JqZWN0LCBjYXBzdWxlX2NvbnRleHQpOworICAgIGNhcHN1bGVfZGVzdHJ1Y3RvcihvYmplY3QpOworICAgIENIRUNLX0RFU1RSVUNUT1I7CisgICAgLyogaW50ZW50aW9uYWxseSBhY2Nlc3MgdXNpbmcgdGhlIHdyb25nIG5hbWUgKi8KKyAgICBwb2ludGVyMiA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKG9iamVjdCwgInRoZSB3cm9uZyBuYW1lIik7CisgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIEZBSUwoIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgZGlkIG5vdCEiKTsKKyAgICB9CisgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBpZiAocG9pbnRlcjIpIHsKKyAgICAgICAgaWYgKHBvaW50ZXIyID09IGNhcHN1bGVfcG9pbnRlcikgeworICAgICAgICAgICAgRkFJTCgiUHlDYXBzdWxlX0dldFBvaW50ZXIgc2hvdWxkIG5vdCBoYXZlIgorICAgICAgICAgICAgICAgICAgICAgIiByZXR1cm5lZCB0aGUgaW50ZXJuYWwgcG9pbnRlciEiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEZBSUwoIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIHNob3VsZCBoYXZlICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBOVUxMIHBvaW50ZXIgYnV0IGRpZCBub3QhIik7CisgICAgICAgIH0KKyAgICB9CisgICAgUHlDYXBzdWxlX1NldERlc3RydWN0b3Iob2JqZWN0LCBOVUxMKTsKKyAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICBpZiAoY2Fwc3VsZV9kZXN0cnVjdG9yX2NhbGxfY291bnQpIHsKKyAgICAgICAgRkFJTCgiZGVzdHJ1Y3RvciBjYWxsZWQgd2hlbiBpdCBzaG91bGQgbm90IGhhdmUgYmVlbiEiKTsKKyAgICB9CisKKyAgICBmb3IgKGtub3duID0gJmtub3duX2NhcHN1bGVzWzBdOyBrbm93bi0+bW9kdWxlICE9IE5VTEw7IGtub3duKyspIHsKKyAgICAgICAgLyogeWVhaCwgb3JkaW5hcmlseSBJIHdvdWxkbid0IGRvIHRoaXMgZWl0aGVyLAorICAgICAgICAgICBidXQgaXQncyBmaW5lIGZvciB0aGlzIHRlc3QgaGFybmVzcy4KKyAgICAgICAgKi8KKyAgICAgICAgc3RhdGljIGNoYXIgYnVmZmVyWzI1Nl07CisjdW5kZWYgRkFJTAorI2RlZmluZSBGQUlMKHgpIFwKKyAgICAgICAgeyBcCisgICAgICAgIHNwcmludGYoYnVmZmVyLCAiJXMgbW9kdWxlOiBcIiVzXCIgYXR0cmlidXRlOiBcIiVzXCIiLCBcCisgICAgICAgICAgICB4LCBrbm93bi0+bW9kdWxlLCBrbm93bi0+YXR0cmlidXRlKTsgXAorICAgICAgICBlcnJvciA9IGJ1ZmZlcjsgXAorICAgICAgICBnb3RvIGV4aXQ7IFwKKyAgICAgICAgfSBcCisKKyAgICAgICAgUHlPYmplY3QgKm1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZShrbm93bi0+bW9kdWxlKTsKKyAgICAgICAgaWYgKG1vZHVsZSkgeworICAgICAgICAgICAgcG9pbnRlciA9IFB5Q2Fwc3VsZV9JbXBvcnQoa25vd24tPm5hbWUsIDApOworICAgICAgICAgICAgaWYgKCFwb2ludGVyKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1vZHVsZSk7CisgICAgICAgICAgICAgICAgRkFJTCgiUHlDYXBzdWxlX0dldFBvaW50ZXIgcmV0dXJuZWQgTlVMTCB1bmV4cGVjdGVkbHkhIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvYmplY3QgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG1vZHVsZSwga25vd24tPmF0dHJpYnV0ZSk7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9pbnRlcjIgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2VlYmxlcyB3b2JibGUgYnV0IHRoZXkgZG9uJ3QgZmFsbCBkb3duIik7CisgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKKyAgICAgICAgICAgICAgICBGQUlMKCJQeUNhcHN1bGVfR2V0UG9pbnRlciBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZCBub3QhIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgaWYgKHBvaW50ZXIyKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1vZHVsZSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXIyID09IHBvaW50ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgRkFJTCgiUHlDYXBzdWxlX0dldFBvaW50ZXIgc2hvdWxkIG5vdCBoYXZlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJldHVybmVkIGl0cyBpbnRlcm5hbCBwb2ludGVyISIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEZBSUwoIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIHNob3VsZCBoYXZlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJldHVybmVkIE5VTEwgcG9pbnRlciBidXQgZGlkIG5vdCEiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorCisgIGV4aXQ6CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9jYXBzdWxlIiwgZXJyb3IpOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKKyN1bmRlZiBGQUlMCit9CisKIC8qIFRoaXMgaXMgaGVyZSB0byBwcm92aWRlIGEgZG9jc3RyaW5nIGZvciB0ZXN0X2Rlc2NyLiAqLwogc3RhdGljIFB5T2JqZWN0ICoKIHRlc3Rfd2l0aF9kb2NzdHJpbmcoUHlPYmplY3QgKnNlbGYpCkBAIC05MDksMTMgKzE2MDQsNTIgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLyogVG8gdGVzdCB0aGF0IHRoZSByZXN1bHQgb2YgUHlDb2RlX05ld0VtcHR5IGhhcyB0aGUgcmlnaHQgbWVtYmVycy4gKi8KK3N0YXRpYyBQeU9iamVjdCAqCitjb2RlX25ld2VtcHR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKyAgICBjb25zdCBjaGFyICpmdW5jbmFtZTsKKyAgICBpbnQgZmlyc3RsaW5lbm87CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNzaTpjb2RlX25ld2VtcHR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCAmZnVuY25hbWUsICZmaXJzdGxpbmVubykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q29kZV9OZXdFbXB0eShmaWxlbmFtZSwgZnVuY25hbWUsIGZpcnN0bGluZW5vKTsKK30KKworLyogVGVzdCBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jIChhbHNvIGV4ZXJjaXNlIFB5RXJyX05ld0V4Y2VwdGlvbikuCisgICBSdW4gdmlhIExpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSAqLworc3RhdGljIFB5T2JqZWN0ICoKK21ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBjaGFyICpuYW1lOworICAgIGNoYXIgKmRvYyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmJhc2UgPSBOVUxMOworICAgIFB5T2JqZWN0ICpkaWN0ID0gTlVMTDsKKworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsibmFtZSIsICJkb2MiLCAiYmFzZSIsICJkaWN0IiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICJzfHNPTzptYWtlX2V4Y2VwdGlvbl93aXRoX2RvYyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgJmRvYywgJmJhc2UsICZkaWN0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYyhuYW1lLCBkb2MsIGJhc2UsIGRpY3QpOworfQorCiBzdGF0aWMgUHlNZXRob2REZWYgVGVzdE1ldGhvZHNbXSA9IHsKICAgICB7InJhaXNlX2V4Y2VwdGlvbiIsICAgICAgICAgcmFpc2VfZXhjZXB0aW9uLCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InRlc3RfY29uZmlnIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfY29uZmlnLCAgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9kYXRldGltZV9jYXBpIiwgIHRlc3RfZGF0ZXRpbWVfY2FwaSwgICAgICAgICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbGlzdF9hcGkiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbGlzdF9hcGksICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9kaWN0X2l0ZXJhdGlvbiIsICAgICAoUHlDRnVuY3Rpb24pdGVzdF9kaWN0X2l0ZXJhdGlvbixNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xhenlfaGFzaF9pbmhlcml0YW5jZSIsICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbGF6eV9oYXNoX2luaGVyaXRhbmNlLE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfYnJva2VuX21lbW9yeXZpZXciLCAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9icm9rZW5fbWVtb3J5dmlldyxNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdfYXBpIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYXBpLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLCAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FuZF9vdmVyZmxvdywKKyAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX251bWJpdHMiLCAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX251bWJpdHMsICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2tfY29kZSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2tfY29kZSwgICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfZW1wdHlfYXJncGFyc2UiLCAoUHlDRnVuY3Rpb24pdGVzdF9lbXB0eV9hcmdwYXJzZSxNRVRIX05PQVJHU30sCkBAIC05MjksNiArMTY2Myw3IEBACiAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJnZXRhcmdzX2IiLCAgICAgICAgICAgICAgIGdldGFyZ3NfYiwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRhcmdzX0IiLCAgICAgICAgICAgICAgIGdldGFyZ3NfQiwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRhcmdzX2giLCAgICAgICAgICAgICAgIGdldGFyZ3NfaCwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRhcmdzX0giLCAgICAgICAgICAgICAgIGdldGFyZ3NfSCwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRhcmdzX0kiLCAgICAgICAgICAgICAgIGdldGFyZ3NfSSwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRhcmdzX2siLCAgICAgICAgICAgICAgIGdldGFyZ3NfaywgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCkBAIC05MzksNiArMTY3NCw4IEBACiAgICAgeyJnZXRhcmdzX0wiLCAgICAgICAgICAgICAgIGdldGFyZ3NfTCwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRhcmdzX0siLCAgICAgICAgICAgICAgIGdldGFyZ3NfSywgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdsb25nX2FwaSIsICAgICAgIHRlc3RfbG9uZ2xvbmdfYXBpLCAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3csIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfTF9jb2RlIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfTF9jb2RlLCAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsiY29kZWNfaW5jcmVtZW50YWxlbmNvZGVyIiwKICAgICAgKFB5Q0Z1bmN0aW9uKWNvZGVjX2luY3JlbWVudGFsZW5jb2RlciwgICAgICBNRVRIX1ZBUkFSR1N9LApAQCAtOTQ3LDExICsxNjg0LDE3IEBACiAjZW5kaWYKICNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgeyJ0ZXN0X3VfY29kZSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3VfY29kZSwgICAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3Rfd2lkZWNoYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2lkZWNoYXIsICAgICAgTUVUSF9OT0FSR1N9LAogI2VuZGlmCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICB7Il90ZXN0X3RocmVhZF9zdGF0ZSIsICB0ZXN0X3RocmVhZF9zdGF0ZSwgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7Il9wZW5kaW5nX3RocmVhZGZ1bmMiLCAgICAgcGVuZGluZ190aHJlYWRmdW5jLCAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgorICAgIHsidGVzdF9jYXBzdWxlIiwgKFB5Q0Z1bmN0aW9uKXRlc3RfY2Fwc3VsZSwgTUVUSF9OT0FSR1N9LAogICAgIHsidHJhY2ViYWNrX3ByaW50IiwgdHJhY2ViYWNrX3ByaW50LCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImNvZGVfbmV3ZW1wdHkiLCBjb2RlX25ld2VtcHR5LCAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJtYWtlX2V4Y2VwdGlvbl93aXRoX2RvYyIsIChQeUNGdW5jdGlvbiltYWtlX2V4Y2VwdGlvbl93aXRoX2RvYywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEU30sCiAgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190a2ludGVyLmMgYi9Nb2R1bGVzL190a2ludGVyLmMKaW5kZXggYjg5MjliNi4uMDFkNjI4NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGtpbnRlci5jCisrKyBiL01vZHVsZXMvX3RraW50ZXIuYwpAQCAtOSw5ICs5LDkgQEAKIAogLyogVENML1RLIFZFUlNJT04gSU5GTzoKIAotICAgIE9ubHkgVGNsL1RrIDguMiBhbmQgbGF0ZXIgYXJlIHN1cHBvcnRlZC4gIE9sZGVyIHZlcnNpb25zIGFyZSBub3QKLSAgICBzdXBwb3J0ZWQuICAoVXNlIFB5dGhvbiAyLjIgaWYgeW91IGNhbm5vdCB1cGdyYWRlIHlvdXIgVGNsL1RrCi0gICAgbGlicmFyaWVzLikKKyAgICBPbmx5IFRjbC9UayA4LjMuMSBhbmQgbGF0ZXIgYXJlIHN1cHBvcnRlZC4gIE9sZGVyIHZlcnNpb25zIGFyZSBub3QKKyAgICBzdXBwb3J0ZWQuIFVzZSBQeXRob24gMi42IG9yIG9sZGVyIGlmIHlvdSBjYW5ub3QgdXBncmFkZSB5b3VyCisgICAgVGNsL1RrIGxpYnJhcmllcy4KICovCiAKIC8qIFhYWCBGdXJ0aGVyIHNwZWVkLXVwIGlkZWFzLCBpbnZvbHZpbmcgVGNsIDguMCBmZWF0dXJlczoKQEAgLTY3LDYgKzY3LDggQEAKICNpbmNsdWRlIDx0ay5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJ0a2ludGVyLmgiCisKIC8qIEZvciBUY2wgOC4yIGFuZCA4LjMsIENPTlNUKiBpcyBub3QgZGVmaW5lZCAoZXhjZXB0IG9uIEN5Z3dpbikuICovCiAjaWZuZGVmIENPTlNUODRfUkVUVVJOCiAjZGVmaW5lIENPTlNUODRfUkVUVVJOCkBAIC03NCwxMCArNzYsOCBAQAogI2RlZmluZSBDT05TVAogI2VuZGlmCiAKLSNkZWZpbmUgVEtNQUpPUk1JTk9SIChUS19NQUpPUl9WRVJTSU9OKjEwMDAgKyBUS19NSU5PUl9WRVJTSU9OKQotCi0jaWYgVEtNQUpPUk1JTk9SIDwgODAwMgotI2Vycm9yICJUayBvbGRlciB0aGFuIDguMiBub3Qgc3VwcG9ydGVkIgorI2lmIFRLX1ZFUlNJT05fSEVYIDwgMHgwODAzMDEwMgorI2Vycm9yICJUayBvbGRlciB0aGFuIDguMy4xIG5vdCBzdXBwb3J0ZWQiCiAjZW5kaWYKIAogLyogVW5pY29kZSBjb252ZXJzaW9uIGFzc3VtZXMgdGhhdCBUY2xfVW5pQ2hhciBpcyB0d28gYnl0ZXMuCkBAIC0yODAsNiArMjgwLDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqdmFsSW5DbWQ7CiBzdGF0aWMgUHlPYmplY3QgKnRyYkluQ21kOwogCisjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSworc3RhdGljIGludCB0a19sb2FkX2ZhaWxlZDsKKyNlbmRpZgogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NTUsMjEgKzU1OCwzNSBAQAogaW50CiBUY2xfQXBwSW5pdChUY2xfSW50ZXJwICppbnRlcnApCiB7Ci0gICAgVGtfV2luZG93IG1haW47CiAgICAgY29uc3QgY2hhciAqIF90a2ludGVyX3NraXBfdGtfaW5pdDsKIAogICAgIGlmIChUY2xfSW5pdChpbnRlcnApID09IFRDTF9FUlJPUikgewogICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiVGNsX0luaXQgZXJyb3I6ICVzXG4iLCBUY2xfR2V0U3RyaW5nUmVzdWx0KGludGVycCkpOwogICAgICAgICByZXR1cm4gVENMX0VSUk9SOwogICAgIH0KLSAgICBfdGtpbnRlcl9za2lwX3RrX2luaXQgPSAgICAgVGNsX0dldFZhcihpbnRlcnAsICJfdGtpbnRlcl9za2lwX3RrX2luaXQiLCBUQ0xfR0xPQkFMX09OTFkpOwotICAgIGlmIChfdGtpbnRlcl9za2lwX3RrX2luaXQgPT0gTlVMTCB8fCBzdHJjbXAoX3RraW50ZXJfc2tpcF90a19pbml0LCAiMSIpICAgICAhPSAwKSB7Ci0gICAgICAgIG1haW4gPSBUa19NYWluV2luZG93KGludGVycCk7Ci0gICAgICAgIGlmIChUa19Jbml0KGludGVycCkgPT0gVENMX0VSUk9SKSB7Ci0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiVGtfSW5pdCBlcnJvcjogJXNcbiIsIFRjbF9HZXRTdHJpbmdSZXN1bHQoaW50ZXJwKSk7Ci0gICAgICAgICAgICByZXR1cm4gVENMX0VSUk9SOwotICAgICAgICB9CisKKyAgICBfdGtpbnRlcl9za2lwX3RrX2luaXQgPSBUY2xfR2V0VmFyKGludGVycCwKKyAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyX3NraXBfdGtfaW5pdCIsIFRDTF9HTE9CQUxfT05MWSk7CisgICAgaWYgKF90a2ludGVyX3NraXBfdGtfaW5pdCAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgICAgIHN0cmNtcChfdGtpbnRlcl9za2lwX3RrX2luaXQsICIxIikgPT0gMCkgeworICAgICAgICByZXR1cm4gVENMX09LOwogICAgIH0KKworI2lmZGVmIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKKyAgICBpZiAodGtfbG9hZF9mYWlsZWQpIHsKKyAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIlRrX0luaXQgZXJyb3I6ICVzXG4iLCBUS0lOVEVSX0xPQURUS19FUlJNU0cpOworICAgICAgICByZXR1cm4gVENMX0VSUk9SOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKFRrX0luaXQoaW50ZXJwKSA9PSBUQ0xfRVJST1IpIHsKKyNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCisgICAgICAgIHRrX2xvYWRfZmFpbGVkID0gMTsKKyNlbmRpZgorICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiVGtfSW5pdCBlcnJvcjogJXNcbiIsIFRjbF9HZXRTdHJpbmdSZXN1bHQoaW50ZXJwKSk7CisgICAgICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgfQorCiAgICAgcmV0dXJuIFRDTF9PSzsKIH0KICNlbmRpZiAvKiAhV0lUSF9BUFBJTklUICovCkBAIC02NTIsOCArNjY5LDE1IEBACiAgICAgY2tmcmVlKGFyZ3YwKTsKIAogICAgIGlmICghIHdhbnRUaykgewotICAgICAgICBUY2xfU2V0VmFyKHYtPmludGVycCwgIl90a2ludGVyX3NraXBfdGtfaW5pdCIsICIxIiwgICAgIFRDTF9HTE9CQUxfT05MWSk7CisgICAgICAgIFRjbF9TZXRWYXIodi0+aW50ZXJwLAorICAgICAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyX3NraXBfdGtfaW5pdCIsICIxIiwgVENMX0dMT0JBTF9PTkxZKTsKICAgICB9CisjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSworICAgIGVsc2UgaWYgKHRrX2xvYWRfZmFpbGVkKSB7CisgICAgICAgIFRjbF9TZXRWYXIodi0+aW50ZXJwLAorICAgICAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyX3RrX2ZhaWxlZCIsICIxIiwgVENMX0dMT0JBTF9PTkxZKTsKKyAgICB9CisjZW5kaWYKIAogICAgIC8qIHNvbWUgaW5pdGlhbCBhcmd1bWVudHMgbmVlZCB0byBiZSBpbiBhcmd2ICovCiAgICAgaWYgKHN5bmMgfHwgdXNlKSB7CkBAIC02ODgsNiArNzEyLDE4IEBACiAKICAgICBpZiAoVGNsX0FwcEluaXQodi0+aW50ZXJwKSAhPSBUQ0xfT0spIHsKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFRraW50ZXJfRXJyb3IoKFB5T2JqZWN0ICopdik7CisjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSworICAgICAgICBpZiAod2FudFRrKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpfdGtpbnRlcl90a19mYWlsZWQ7CisgICAgICAgICAgICBfdGtpbnRlcl90a19mYWlsZWQgPSBUY2xfR2V0VmFyKHYtPmludGVycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3RraW50ZXJfdGtfZmFpbGVkIiwgVENMX0dMT0JBTF9PTkxZKTsKKworICAgICAgICAgICAgaWYgKCBfdGtpbnRlcl90a19mYWlsZWQgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNtcChfdGtpbnRlcl90a19mYWlsZWQsICIxIikgPT0gMCkgeworICAgICAgICAgICAgICAgIHRrX2xvYWRfZmFpbGVkID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKil2KTsKICAgICAgICAgcmV0dXJuIChUa2FwcE9iamVjdCAqKXJlc3VsdDsKICAgICB9CkBAIC02OTgsNiArNzM0LDcgQEAKIH0KIAogCisjaWZkZWYgV0lUSF9USFJFQUQKIHN0YXRpYyB2b2lkCiBUa2FwcF9UaHJlYWRTZW5kKFRrYXBwT2JqZWN0ICpzZWxmLCBUY2xfRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICBUY2xfQ29uZGl0aW9uICpjb25kLCBUY2xfTXV0ZXggKm11dGV4KQpAQCAtNzEwLDYgKzc0Nyw3IEBACiAgICAgVGNsX011dGV4VW5sb2NrKG11dGV4KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogfQorI2VuZGlmCiAKIAogLyoqIFRjbCBFdmFsICoqLwpAQCAtMTA5OSw4ICsxMTM3LDggQEAKICAgICByZXR1cm4gbmV3UHlUY2xPYmplY3QodmFsdWUpOwogfQogCisjaWZkZWYgV0lUSF9USFJFQUQKIC8qIFRoaXMgbXV0ZXggc3luY2hyb25pemVzIGludGVyLXRocmVhZCBjb21tYW5kIGNhbGxzLiAqLwotCiBUQ0xfREVDTEFSRV9NVVRFWChjYWxsX211dGV4KQogCiB0eXBlZGVmIHN0cnVjdCBUa2FwcF9DYWxsRXZlbnQgewpAQCAtMTExMCw4ICsxMTQ4LDkgQEAKICAgICBpbnQgZmxhZ3M7CiAgICAgUHlPYmplY3QgKipyZXM7CiAgICAgUHlPYmplY3QgKipleGNfdHlwZSwgKipleGNfdmFsdWUsICoqZXhjX3RiOwotICAgIFRjbF9Db25kaXRpb24gZG9uZTsKKyAgICBUY2xfQ29uZGl0aW9uICpkb25lOwogfSBUa2FwcF9DYWxsRXZlbnQ7CisjZW5kaWYKIAogdm9pZAogVGthcHBfQ2FsbERlYWxsb2NBcmdzKFRjbF9PYmoqKiBvYmp2LCBUY2xfT2JqKiogb2JqU3RvcmUsIGludCBvYmpjKQpAQCAtMTIyMiw2ICsxMjYxLDggQEAKICAgICByZXR1cm4gcmVzOwogfQogCisjaWZkZWYgV0lUSF9USFJFQUQKKwogLyogVGthcHBfQ2FsbFByb2MgaXMgdGhlIGV2ZW50IHByb2NlZHVyZSB0aGF0IGlzIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mCiAgICB0aGUgVGNsIGludGVycHJldGVyIHRocmVhZC4gSW5pdGlhbGx5LCBpdCBob2xkcyB0aGUgVGNsIGxvY2ssIGFuZCBkb2Vzbid0CiAgICBob2xkIHRoZSBQeXRob24gbG9jay4gKi8KQEAgLTEyNjEsMTEgKzEzMDIsMTMgQEAKIGRvbmU6CiAgICAgLyogV2FrZSB1cCBjYWxsaW5nIHRocmVhZC4gKi8KICAgICBUY2xfTXV0ZXhMb2NrKCZjYWxsX211dGV4KTsKLSAgICBUY2xfQ29uZGl0aW9uTm90aWZ5KCZlLT5kb25lKTsKKyAgICBUY2xfQ29uZGl0aW9uTm90aWZ5KGUtPmRvbmUpOwogICAgIFRjbF9NdXRleFVubG9jaygmY2FsbF9tdXRleCk7CiAgICAgcmV0dXJuIDE7CiB9CiAKKyNlbmRpZgorCiAvKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBjYWxsaW5nIGEgVGNsIGNvbW1hbmQuCiAgICBJdCBzdXBwb3J0cyB0aHJlZSBjYXNlcywgd2l0aCByZWdhcmQgdG8gdGhyZWFkaW5nOgogICAgMS4gVGNsIGlzIG5vdCB0aHJlYWRlZDogTXVzdCBoYXZlIHRoZSBUY2wgbG9jaywgdGhlbiBjYW4gaW52b2tlIGNvbW1hbmQgaW4KQEAgLTEyOTksNiArMTM0Miw3IEBACiAgICAgICAgIC8qIFdlIGNhbm5vdCBjYWxsIHRoZSBjb21tYW5kIGRpcmVjdGx5LiBJbnN0ZWFkLCB3ZSBtdXN0CiAgICAgICAgICAgIG1hcnNoYWwgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIGludGVycHJldGVyIHRocmVhZC4gKi8KICAgICAgICAgVGthcHBfQ2FsbEV2ZW50ICpldjsKKyAgICAgICAgVGNsX0NvbmRpdGlvbiBjb25kID0gTlVMTDsKICAgICAgICAgUHlPYmplY3QgKmV4Y190eXBlLCAqZXhjX3ZhbHVlLCAqZXhjX3RiOwogICAgICAgICBpZiAoIVdhaXRGb3JNYWlubG9vcChzZWxmKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTMxMCw5ICsxMzU0LDkgQEAKICAgICAgICAgZXYtPmV4Y190eXBlID0gJmV4Y190eXBlOwogICAgICAgICBldi0+ZXhjX3ZhbHVlID0gJmV4Y192YWx1ZTsKICAgICAgICAgZXYtPmV4Y190YiA9ICZleGNfdGI7Ci0gICAgICAgIGV2LT5kb25lID0gKFRjbF9Db25kaXRpb24pMDsKKyAgICAgICAgZXYtPmRvbmUgPSAmY29uZDsKIAotICAgICAgICBUa2FwcF9UaHJlYWRTZW5kKHNlbGYsIChUY2xfRXZlbnQqKWV2LCAmZXYtPmRvbmUsICZjYWxsX211dGV4KTsKKyAgICAgICAgVGthcHBfVGhyZWFkU2VuZChzZWxmLCAoVGNsX0V2ZW50KilldiwgJmNvbmQsICZjYWxsX211dGV4KTsKIAogICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChleGNfdHlwZSkKQEAgLTEzMjAsNiArMTM2NCw3IEBACiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFRraW50ZXJfVGNsRXJyb3IsIGV4Y192YWx1ZSk7CiAgICAgICAgIH0KKyAgICAgICAgVGNsX0NvbmRpdGlvbkZpbmFsaXplKCZjb25kKTsKICAgICB9CiAgICAgZWxzZQogI2VuZGlmCkBAIC0xNDkzLDkgKzE1MzgsMTEgQEAKIAogLyoqIFRjbCBWYXJpYWJsZSAqKi8KIAordHlwZWRlZiBQeU9iamVjdCogKCpFdmVudEZ1bmMpKFB5T2JqZWN0KiwgUHlPYmplY3QgKmFyZ3MsIGludCBmbGFncyk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAogVENMX0RFQ0xBUkVfTVVURVgodmFyX211dGV4KQogCi10eXBlZGVmIFB5T2JqZWN0KiAoKkV2ZW50RnVuYykoUHlPYmplY3QqLCBQeU9iamVjdCAqYXJncywgaW50IGZsYWdzKTsKIHR5cGVkZWYgc3RydWN0IFZhckV2ZW50IHsKICAgICBUY2xfRXZlbnQgZXY7IC8qIG11c3QgYmUgZmlyc3QgKi8KICAgICBQeU9iamVjdCAqc2VsZjsKQEAgLTE1MDUsOCArMTU1Miw5IEBACiAgICAgUHlPYmplY3QgKipyZXM7CiAgICAgUHlPYmplY3QgKipleGNfdHlwZTsKICAgICBQeU9iamVjdCAqKmV4Y192YWw7Ci0gICAgVGNsX0NvbmRpdGlvbiBjb25kOworICAgIFRjbF9Db25kaXRpb24gKmNvbmQ7CiB9IFZhckV2ZW50OworI2VuZGlmCiAKIHN0YXRpYyBpbnQKIHZhcm5hbWVfY29udmVydGVyKFB5T2JqZWN0ICppbiwgdm9pZCAqX291dCkKQEAgLTE1MjQsNiArMTU3Miw4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBXSVRIX1RIUkVBRAorCiBzdGF0aWMgdm9pZAogdmFyX3BlcmZvcm0oVmFyRXZlbnQgKmV2KQogewpAQCAtMTU0NSwyMSArMTU5NSwyNCBAQAogICAgIEVOVEVSX1BZVEhPTgogICAgIHZhcl9wZXJmb3JtKGV2KTsKICAgICBUY2xfTXV0ZXhMb2NrKCZ2YXJfbXV0ZXgpOwotICAgIFRjbF9Db25kaXRpb25Ob3RpZnkoJmV2LT5jb25kKTsKKyAgICBUY2xfQ29uZGl0aW9uTm90aWZ5KGV2LT5jb25kKTsKICAgICBUY2xfTXV0ZXhVbmxvY2soJnZhcl9tdXRleCk7CiAgICAgTEVBVkVfUFlUSE9OCiAgICAgcmV0dXJuIDE7CiB9CiAKKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QqCiB2YXJfaW52b2tlKEV2ZW50RnVuYyBmdW5jLCBQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MsIGludCBmbGFncykKIHsKLSAgICBUa2FwcE9iamVjdCAqc2VsZiA9IChUa2FwcE9iamVjdCopc2VsZnB0cjsKICNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFRrYXBwT2JqZWN0ICpzZWxmID0gKFRrYXBwT2JqZWN0KilzZWxmcHRyOwogICAgIGlmIChzZWxmLT50aHJlYWRlZCAmJiBzZWxmLT50aHJlYWRfaWQgIT0gVGNsX0dldEN1cnJlbnRUaHJlYWQoKSkgewogICAgICAgICBUa2FwcE9iamVjdCAqc2VsZiA9IChUa2FwcE9iamVjdCopc2VsZnB0cjsKICAgICAgICAgVmFyRXZlbnQgKmV2OwogICAgICAgICBQeU9iamVjdCAqcmVzLCAqZXhjX3R5cGUsICpleGNfdmFsOworICAgICAgICBUY2xfQ29uZGl0aW9uIGNvbmQgPSBOVUxMOwogCiAgICAgICAgIC8qIFRoZSBjdXJyZW50IHRocmVhZCBpcyBub3QgdGhlIGludGVycHJldGVyIHRocmVhZC4gIE1hcnNoYWwKICAgICAgICAgICAgdGhlIGNhbGwgdG8gdGhlIGludGVycHJldGVyIHRocmVhZCwgdGhlbiB3YWl0IGZvcgpAQCAtMTU3Niw5ICsxNjI5LDEwIEBACiAgICAgICAgIGV2LT5yZXMgPSAmcmVzOwogICAgICAgICBldi0+ZXhjX3R5cGUgPSAmZXhjX3R5cGU7CiAgICAgICAgIGV2LT5leGNfdmFsID0gJmV4Y192YWw7Ci0gICAgICAgIGV2LT5jb25kID0gTlVMTDsKKyAgICAgICAgZXYtPmNvbmQgPSAmY29uZDsKICAgICAgICAgZXYtPmV2LnByb2MgPSAoVGNsX0V2ZW50UHJvYyopdmFyX3Byb2M7Ci0gICAgICAgIFRrYXBwX1RocmVhZFNlbmQoc2VsZiwgKFRjbF9FdmVudCopZXYsICZldi0+Y29uZCwgJnZhcl9tdXRleCk7CisgICAgICAgIFRrYXBwX1RocmVhZFNlbmQoc2VsZiwgKFRjbF9FdmVudCopZXYsICZjb25kLCAmdmFyX211dGV4KTsKKyAgICAgICAgVGNsX0NvbmRpdGlvbkZpbmFsaXplKCZjb25kKTsKICAgICAgICAgaWYgKCFyZXMpIHsKICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChleGNfdHlwZSwgZXhjX3ZhbCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZXhjX3R5cGUpOwpAQCAtMTk5NSw3ICsyMDQ5LDcgQEAKIFB5dGhvbkNtZChDbGllbnREYXRhIGNsaWVudERhdGEsIFRjbF9JbnRlcnAgKmludGVycCwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKICAgICBQeXRob25DbWRfQ2xpZW50RGF0YSAqZGF0YSA9IChQeXRob25DbWRfQ2xpZW50RGF0YSAqKWNsaWVudERhdGE7Ci0gICAgUHlPYmplY3QgKnNlbGYsICpmdW5jLCAqYXJnLCAqcmVzOworICAgIFB5T2JqZWN0ICpmdW5jLCAqYXJnLCAqcmVzOwogICAgIGludCBpLCBydjsKICAgICBUY2xfT2JqICpvYmpfcmVzOwogCkBAIC0yMDA0LDcgKzIwNTgsNiBAQAogICAgIC8qIFRCRDogbm8gZXJyb3IgY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBrbm93LCB2aWEgdGhlCiAgICAgICogVGthcHBfQ3JlYXRlQ29tbWFuZCgpIHRoYXQgdGhlIGNsaWVudCBkYXRhIGlzIGEgdHdvLXR1cGxlCiAgICAgICovCi0gICAgc2VsZiA9IGRhdGEtPnNlbGY7CiAgICAgZnVuYyA9IGRhdGEtPmZ1bmM7CiAKICAgICAvKiBDcmVhdGUgYXJndW1lbnQgbGlzdCAoYXJndjEsIC4uLiwgYXJndk4pICovCkBAIC0yMDU2LDYgKzIxMDksNyBAQAogCiAKIAorI2lmZGVmIFdJVEhfVEhSRUFECiBUQ0xfREVDTEFSRV9NVVRFWChjb21tYW5kX211dGV4KQogCiB0eXBlZGVmIHN0cnVjdCBDb21tYW5kRXZlbnR7CkBAIC0yMDY1LDcgKzIxMTksNyBAQAogICAgIGludCBjcmVhdGU7CiAgICAgaW50ICpzdGF0dXM7CiAgICAgQ2xpZW50RGF0YSAqZGF0YTsKLSAgICBUY2xfQ29uZGl0aW9uIGRvbmU7CisgICAgVGNsX0NvbmRpdGlvbiAqZG9uZTsKIH0gQ29tbWFuZEV2ZW50OwogCiBzdGF0aWMgaW50CkBAIC0yMDc4LDEwICsyMTMyLDExIEBACiAgICAgZWxzZQogICAgICAgICAqZXYtPnN0YXR1cyA9IFRjbF9EZWxldGVDb21tYW5kKGV2LT5pbnRlcnAsIGV2LT5uYW1lKTsKICAgICBUY2xfTXV0ZXhMb2NrKCZjb21tYW5kX211dGV4KTsKLSAgICBUY2xfQ29uZGl0aW9uTm90aWZ5KCZldi0+ZG9uZSk7CisgICAgVGNsX0NvbmRpdGlvbk5vdGlmeShldi0+ZG9uZSk7CiAgICAgVGNsX011dGV4VW5sb2NrKCZjb21tYW5kX211dGV4KTsKICAgICByZXR1cm4gMTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QgKgogVGthcHBfQ3JlYXRlQ29tbWFuZChQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MpCkBAIC0yMTEzLDcgKzIxNjgsOSBAQAogICAgIGRhdGEtPnNlbGYgPSBzZWxmcHRyOwogICAgIGRhdGEtPmZ1bmMgPSBmdW5jOwogCisjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpZiAoc2VsZi0+dGhyZWFkZWQgJiYgc2VsZi0+dGhyZWFkX2lkICE9IFRjbF9HZXRDdXJyZW50VGhyZWFkKCkpIHsKKyAgICAgICAgVGNsX0NvbmRpdGlvbiBjb25kID0gTlVMTDsKICAgICAgICAgQ29tbWFuZEV2ZW50ICpldiA9IChDb21tYW5kRXZlbnQqKWNrYWxsb2Moc2l6ZW9mKENvbW1hbmRFdmVudCkpOwogICAgICAgICBldi0+ZXYucHJvYyA9IChUY2xfRXZlbnRQcm9jKilUa2FwcF9Db21tYW5kUHJvYzsKICAgICAgICAgZXYtPmludGVycCA9IHNlbGYtPmludGVycDsKQEAgLTIxMjEsMTAgKzIxNzgsMTMgQEAKICAgICAgICAgZXYtPm5hbWUgPSBjbWROYW1lOwogICAgICAgICBldi0+ZGF0YSA9IChDbGllbnREYXRhKWRhdGE7CiAgICAgICAgIGV2LT5zdGF0dXMgPSAmZXJyOwotICAgICAgICBldi0+ZG9uZSA9IE5VTEw7Ci0gICAgICAgIFRrYXBwX1RocmVhZFNlbmQoc2VsZiwgKFRjbF9FdmVudCopZXYsICZldi0+ZG9uZSwgJmNvbW1hbmRfbXV0ZXgpOworICAgICAgICBldi0+ZG9uZSA9ICZjb25kOworICAgICAgICBUa2FwcF9UaHJlYWRTZW5kKHNlbGYsIChUY2xfRXZlbnQqKWV2LCAmY29uZCwgJmNvbW1hbmRfbXV0ZXgpOworICAgICAgICBUY2xfQ29uZGl0aW9uRmluYWxpemUoJmNvbmQpOwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CiAgICAgICAgIEVOVEVSX1RDTAogICAgICAgICBlcnIgPSBUY2xfQ3JlYXRlQ29tbWFuZCgKICAgICAgICAgICAgIFRrYXBwX0ludGVycChzZWxmKSwgY21kTmFtZSwgUHl0aG9uQ21kLApAQCAtMjE1Miw3ICsyMjEyLDEwIEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6ZGVsZXRlY29tbWFuZCIsICZjbWROYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChzZWxmLT50aHJlYWRlZCAmJiBzZWxmLT50aHJlYWRfaWQgIT0gVGNsX0dldEN1cnJlbnRUaHJlYWQoKSkgeworICAgICAgICBUY2xfQ29uZGl0aW9uIGNvbmQgPSBOVUxMOwogICAgICAgICBDb21tYW5kRXZlbnQgKmV2OwogICAgICAgICBldiA9IChDb21tYW5kRXZlbnQqKWNrYWxsb2Moc2l6ZW9mKENvbW1hbmRFdmVudCkpOwogICAgICAgICBldi0+ZXYucHJvYyA9IChUY2xfRXZlbnRQcm9jKilUa2FwcF9Db21tYW5kUHJvYzsKQEAgLTIxNjAsMTEgKzIyMjMsMTQgQEAKICAgICAgICAgZXYtPmNyZWF0ZSA9IDA7CiAgICAgICAgIGV2LT5uYW1lID0gY21kTmFtZTsKICAgICAgICAgZXYtPnN0YXR1cyA9ICZlcnI7Ci0gICAgICAgIGV2LT5kb25lID0gTlVMTDsKLSAgICAgICAgVGthcHBfVGhyZWFkU2VuZChzZWxmLCAoVGNsX0V2ZW50KilldiwgJmV2LT5kb25lLAorICAgICAgICBldi0+ZG9uZSA9ICZjb25kOworICAgICAgICBUa2FwcF9UaHJlYWRTZW5kKHNlbGYsIChUY2xfRXZlbnQqKWV2LCAmY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tbWFuZF9tdXRleCk7CisgICAgICAgIFRjbF9Db25kaXRpb25GaW5hbGl6ZSgmY29uZCk7CiAgICAgfQotICAgIGVsc2UgeworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKICAgICAgICAgRU5URVJfVENMCiAgICAgICAgIGVyciA9IFRjbF9EZWxldGVDb21tYW5kKHNlbGYtPmludGVycCwgY21kTmFtZSk7CiAgICAgICAgIExFQVZFX1RDTApAQCAtMjI1Niw2ICsyMzIyLDEyIEBACiAgICAgUHlPYmplY3QgKmZpbGUsICpmdW5jOwogICAgIGludCBtYXNrLCB0ZmlsZTsKIAorICAgIGlmICghc2VsZiAmJiBQeV9QeTNrV2FybmluZ0ZsYWcpIHsKKyAgICAgICAgaWYgKFB5RXJyX1dhcm4oUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3RraW50ZXIuY3JlYXRlZmlsZWhhbmRsZXIgaXMgZ29uZSBpbiAzLngiKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9pTzpjcmVhdGVmaWxlaGFuZGxlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmbWFzaywgJmZ1bmMpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzMDAsNiArMjM3MiwxMiBAQAogICAgIFB5T2JqZWN0ICpmaWxlOwogICAgIGludCB0ZmlsZTsKIAorICAgIGlmICghc2VsZiAmJiBQeV9QeTNrV2FybmluZ0ZsYWcpIHsKKyAgICAgICAgaWYgKFB5RXJyX1dhcm4oUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3RraW50ZXIuZGVsZXRlZmlsZWhhbmRsZXIgaXMgZ29uZSBpbiAzLngiKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZGVsZXRlZmlsZWhhbmRsZXIiLCAmZmlsZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yNDczLDYgKzI1NTEsMTIgQEAKICAgICBQeU9iamVjdCAqZnVuYzsKICAgICBUa3R0T2JqZWN0ICp2OwogCisgICAgaWYgKCFzZWxmICYmIFB5X1B5M2tXYXJuaW5nRmxhZykgeworICAgICAgICBpZiAoUHlFcnJfV2FybihQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfdGtpbnRlci5jcmVhdGV0aW1lcmhhbmRsZXIgaXMgZ29uZSBpbiAzLngiKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPOmNyZWF0ZXRpbWVyaGFuZGxlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZtaWxsaXNlY29uZHMsICZmdW5jKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNTE2LDYgKzI2MDAsMTIgQEAKICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dldCgpOwogI2VuZGlmCiAKKyAgICBpZiAoIXNlbGYgJiYgUHlfUHkza1dhcm5pbmdGbGFnKSB7CisgICAgICAgIGlmIChQeUVycl9XYXJuKFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyLm1haW5sb29wIGlzIGdvbmUgaW4gMy54IikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTptYWlubG9vcCIsICZ0aHJlc2hvbGQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjU5MSw2ICsyNjgxLDEyIEBACiAgICAgaW50IGZsYWdzID0gMDsKICAgICBpbnQgcnY7CiAKKyAgICBpZiAoIXNlbGYgJiYgUHlfUHkza1dhcm5pbmdGbGFnKSB7CisgICAgICAgIGlmIChQeUVycl9XYXJuKFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyLmRvb25lZXZlbnQgaXMgZ29uZSBpbiAzLngiKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmRvb25lZXZlbnQiLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjYwNCw2ICsyNzAwLDEyIEBACiBUa2FwcF9RdWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKIAorICAgIGlmICghc2VsZiAmJiBQeV9QeTNrV2FybmluZ0ZsYWcpIHsKKyAgICAgICAgaWYgKFB5RXJyX1dhcm4oUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3RraW50ZXIucXVpdCBpcyBnb25lIGluIDMueCIpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOnF1aXQiKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI2MjUsMjIgKzI3MjcsMjEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBUa2FwcF9Ua0luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHN0YXRpYyBpbnQgaGFzX2ZhaWxlZDsKICAgICBUY2xfSW50ZXJwICppbnRlcnAgPSBUa2FwcF9JbnRlcnAoc2VsZik7Ci0gICAgVGtfV2luZG93IG1haW5fd2luZG93OwogICAgIGNvbnN0IGNoYXIgKiBfdGtfZXhpc3RzID0gTlVMTDsKICAgICBpbnQgZXJyOwotICAgIG1haW5fd2luZG93ID0gVGtfTWFpbldpbmRvdyhpbnRlcnApOwogCi0gICAgLyogSW4gYWxsIGN1cnJlbnQgdmVyc2lvbnMgb2YgVGsgKGluY2x1ZGluZyA4LjQuMTMpLCBUa19Jbml0Ci0gICAgICAgZGVhZGxvY2tzIG9uIHRoZSBzZWNvbmQgY2FsbCB3aGVuIHRoZSBmaXJzdCBjYWxsIGZhaWxlZC4KLSAgICAgICBUbyBhdm9pZCB0aGUgZGVhZGxvY2ssIHdlIGp1c3QgcmVmdXNlIHRoZSBzZWNvbmQgY2FsbCB0aHJvdWdoCi0gICAgICAgYSBzdGF0aWMgdmFyaWFibGUuICovCi0gICAgaWYgKGhhc19mYWlsZWQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ2FsbGluZyBUa19Jbml0IGFnYWluIGFmdGVyIGEgcHJldmlvdXMgY2FsbCBmYWlsZWQgbWlnaHQgZGVhZGxvY2siKTsKKyNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCisgICAgLyogVXAgdG8gVGsgOC40LjEzLCBUa19Jbml0IGRlYWRsb2NrcyBvbiB0aGUgc2Vjb25kIGNhbGwgd2hlbiB0aGUKKyAgICAgKiBmaXJzdCBjYWxsIGZhaWxlZC4KKyAgICAgKiBUbyBhdm9pZCB0aGUgZGVhZGxvY2ssIHdlIGp1c3QgcmVmdXNlIHRoZSBzZWNvbmQgY2FsbCB0aHJvdWdoCisgICAgICogYSBzdGF0aWMgdmFyaWFibGUuCisgICAgICovCisgICAgaWYgKHRrX2xvYWRfZmFpbGVkKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCBUS0lOVEVSX0xPQURUS19FUlJNU0cpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisjZW5kaWYKIAogICAgIC8qIFdlIHdhbnQgdG8gZ3VhcmQgYWdhaW5zdCBjYWxsaW5nIFRrX0luaXQoKSBtdWx0aXBsZSB0aW1lcyAqLwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwpAQCAtMjY2MSw3ICsyNzYyLDkgQEAKICAgICBpZiAoX3RrX2V4aXN0cyA9PSBOVUxMIHx8IHN0cmNtcChfdGtfZXhpc3RzLCAiMSIpICE9IDApICAgICB7CiAgICAgICAgIGlmIChUa19Jbml0KGludGVycCkgICAgICAgICAgICAgPT0gVENMX0VSUk9SKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKLSAgICAgICAgICAgIGhhc19mYWlsZWQgPSAxOworI2lmZGVmIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKKyAgICAgICAgICAgIHRrX2xvYWRfZmFpbGVkID0gMTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0yODczLDcgKzI5NzYsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGNvbnRleHQubWF4c2l6ZSA9IFB5U2VxdWVuY2VfU2l6ZShpdGVtKTsKLSAgICBpZiAoY29udGV4dC5tYXhzaXplIDw9IDApCisgICAgaWYgKGNvbnRleHQubWF4c2l6ZSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChjb250ZXh0Lm1heHNpemUgPT0gMCkKICAgICAgICAgcmV0dXJuIFB5VHVwbGVfTmV3KDApOwogCiAgICAgY29udGV4dC50dXBsZSA9IFB5VHVwbGVfTmV3KGNvbnRleHQubWF4c2l6ZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2FycmF5bW9kdWxlLmMgYi9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKaW5kZXggZGExYmIwMi4uMTYwMmU0OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9hcnJheW1vZHVsZS5jCisrKyBiL01vZHVsZXMvYXJyYXltb2R1bGUuYwpAQCAtNzk4LDcgKzc5OCw3IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIHdoaWxlICgodiA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewotICAgICAgICBpZiAoaW5zMShzZWxmLCAoaW50KSBQeV9TSVpFKHNlbGYpLCB2KSAhPSAwKSB7CisgICAgICAgIGlmIChpbnMxKHNlbGYsIFB5X1NJWkUoc2VsZiksIHYpICE9IDApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC0xMDkwLDcgKzEwOTAsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X2FwcGVuZChhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnYpCiB7Ci0gICAgcmV0dXJuIGlucyhzZWxmLCAoaW50KSBQeV9TSVpFKHNlbGYpLCB2KTsKKyAgICByZXR1cm4gaW5zKHNlbGYsIFB5X1NJWkUoc2VsZiksIHYpOwogfQogCiBQeURvY19TVFJWQVIoYXBwZW5kX2RvYywKQEAgLTExNTcsNDAgKzExNTcsNiBAQAogNCwgb3IgOCBieXRlcyBpbiBzaXplLCBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXJyYXlfcmVkdWNlKGFycmF5b2JqZWN0ICphcnJheSkKLXsKLSAgICBQeU9iamVjdCAqZGljdCwgKnJlc3VsdDsKLQotICAgIGRpY3QgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKWFycmF5LCAiX19kaWN0X18iKTsKLSAgICBpZiAoZGljdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGRpY3QgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoZGljdCk7Ci0gICAgfQotICAgIGlmIChQeV9TSVpFKGFycmF5KSA+IDApIHsKLSAgICAgICAgaWYgKGFycmF5LT5vYl9kZXNjci0+aXRlbXNpemUKLSAgICAgICAgICAgICAgICAgICAgICAgID4gUFlfU1NJWkVfVF9NQVggLyBhcnJheS0+b2Jfc2l6ZSkgewotICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gUHlfQnVpbGRWYWx1ZSgiTyhjcyMpTyIsCi0gICAgICAgICAgICBQeV9UWVBFKGFycmF5KSwKLSAgICAgICAgICAgIGFycmF5LT5vYl9kZXNjci0+dHlwZWNvZGUsCi0gICAgICAgICAgICBhcnJheS0+b2JfaXRlbSwKLSAgICAgICAgICAgIFB5X1NJWkUoYXJyYXkpICogYXJyYXktPm9iX2Rlc2NyLT5pdGVtc2l6ZSwKLSAgICAgICAgICAgIGRpY3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoIk8oYylPIiwKLSAgICAgICAgICAgIFB5X1RZUEUoYXJyYXkpLAotICAgICAgICAgICAgYXJyYXktPm9iX2Rlc2NyLT50eXBlY29kZSwKLSAgICAgICAgICAgIGRpY3QpOwotICAgIH0KLSAgICBQeV9ERUNSRUYoZGljdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHlEb2NfU1RSVkFSKGFycmF5X2RvYywgIlJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcuIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCiBhcnJheV9yZXZlcnNlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaXRlbXNpemUgPSBzZWxmLT5vYl9kZXNjci0+aXRlbXNpemU7CkBAIC0xNTMzLDYgKzE0OTksMzggQEAKIAogI2VuZGlmIC8qIFB5X1VTSU5HX1VOSUNPREUgKi8KIAorc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X3JlZHVjZShhcnJheW9iamVjdCAqYXJyYXkpCit7CisgICAgUHlPYmplY3QgKmRpY3QsICpyZXN1bHQsICpsaXN0OworCisgICAgZGljdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoKFB5T2JqZWN0ICopYXJyYXksICJfX2RpY3RfXyIpOworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBkaWN0ID0gUHlfTm9uZTsKKyAgICAgICAgUHlfSU5DUkVGKGRpY3QpOworICAgIH0KKyAgICAvKiBVbmxpa2UgaW4gUHl0aG9uIDMueCwgd2UgbmV2ZXIgdXNlIHRoZSBtb3JlIGVmZmljaWVudCBtZW1vcnkKKyAgICAgKiByZXByZXNlbnRhdGlvbiBvZiBhbiBhcnJheSBmb3IgcGlja2xpbmcuICBUaGlzIGlzIHVuZm9ydHVuYXRlbHkKKyAgICAgKiBuZWNlc3NhcnkgdG8gYWxsb3cgYXJyYXkgb2JqZWN0cyB0byBiZSB1bnBpY2tsZWQgYnkgUHl0aG9uIDMueCwKKyAgICAgKiBzaW5jZSBzdHIgb2JqZWN0cyBmcm9tIDIueCBhcmUgYWx3YXlzIGRlY29kZWQgdG8gdW5pY29kZSBpbgorICAgICAqIFB5dGhvbiAzLnguCisgICAgICovCisgICAgbGlzdCA9IGFycmF5X3RvbGlzdChhcnJheSwgTlVMTCk7CisgICAgaWYgKGxpc3QgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBQeV9CdWlsZFZhbHVlKAorICAgICAgICAiTyhjTylPIiwgUHlfVFlQRShhcnJheSksIGFycmF5LT5vYl9kZXNjci0+dHlwZWNvZGUsIGxpc3QsIGRpY3QpOworICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHlEb2NfU1RSVkFSKHJlZHVjZV9kb2MsICJSZXR1cm4gc3RhdGUgaW5mb3JtYXRpb24gZm9yIHBpY2tsaW5nLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogYXJyYXlfZ2V0X3R5cGVjb2RlKGFycmF5b2JqZWN0ICphLCB2b2lkICpjbG9zdXJlKQpAQCAtMTU4OSw3ICsxNTg3LDcgQEAKICAgICB7InJlYWQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilhcnJheV9mcm9tZmlsZV9hc19yZWFkLCAgICBNRVRIX1ZBUkFSR1MsCiAgICAgIGZyb21maWxlX2RvY30sCiAgICAgeyJfX3JlZHVjZV9fIiwgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfcmVkdWNlLCAgICAgIE1FVEhfTk9BUkdTLAotICAgICBhcnJheV9kb2N9LAorICAgICByZWR1Y2VfZG9jfSwKICAgICB7InJlbW92ZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilhcnJheV9yZW1vdmUsICAgICAgTUVUSF9PLAogICAgICByZW1vdmVfZG9jfSwKICAgICB7InJldmVyc2UiLCAgICAgICAgIChQeUNGdW5jdGlvbilhcnJheV9yZXZlcnNlLCAgICAgTUVUSF9OT0FSR1MsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2F1ZGlvb3AuYyBiL01vZHVsZXMvYXVkaW9vcC5jCmluZGV4IGNiNTQ0NjguLmZiNjllZDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXVkaW9vcC5jCisrKyBiL01vZHVsZXMvYXVkaW9vcC5jCkBAIC01MTEsOSArNTExLDggQEAKIAogICAgIGJlc3RfcmVzdWx0ID0gcmVzdWx0OwogICAgIGJlc3RfaiA9IDA7Ci0gICAgaiA9IDA7CiAKLSAgICBmb3IgKCBqPTE7IGo8PWxlbjEtbGVuMjsgaisrKSB7CisgICAgZm9yIChqPTE7IGo8PWxlbjEtbGVuMjsgaisrKSB7CiAgICAgICAgIGFqX20xID0gKGRvdWJsZSljcDFbai0xXTsKICAgICAgICAgYWpfbG0xID0gKGRvdWJsZSljcDFbaitsZW4yLTFdOwogCkBAIC01OTcsOSArNTk2LDggQEAKIAogICAgIGJlc3RfcmVzdWx0ID0gcmVzdWx0OwogICAgIGJlc3RfaiA9IDA7Ci0gICAgaiA9IDA7CiAKLSAgICBmb3IgKCBqPTE7IGo8PWxlbjEtbGVuMjsgaisrKSB7CisgICAgZm9yIChqPTE7IGo8PWxlbjEtbGVuMjsgaisrKSB7CiAgICAgICAgIGFqX20xID0gKGRvdWJsZSljcDFbai0xXTsKICAgICAgICAgYWpfbG0xID0gKGRvdWJsZSljcDFbaitsZW4yLTFdOwogCkBAIC0xNDE5LDcgKzE0MTcsNiBAQAogICAgIGlmICggc3RhdGUgPT0gUHlfTm9uZSApIHsKICAgICAgICAgLyogRmlyc3QgdGltZSwgaXQgc2VlbXMuIFNldCBkZWZhdWx0cyAqLwogICAgICAgICB2YWxwcmVkID0gMDsKLSAgICAgICAgc3RlcCA9IDc7CiAgICAgICAgIGluZGV4ID0gMDsKICAgICB9IGVsc2UgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgImlpIiwgJnZhbHByZWQsICZpbmRleCkgKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE1MTksNyArMTUxNiw2IEBACiAgICAgaWYgKCBzdGF0ZSA9PSBQeV9Ob25lICkgewogICAgICAgICAvKiBGaXJzdCB0aW1lLCBpdCBzZWVtcy4gU2V0IGRlZmF1bHRzICovCiAgICAgICAgIHZhbHByZWQgPSAwOwotICAgICAgICBzdGVwID0gNzsKICAgICAgICAgaW5kZXggPSAwOwogICAgIH0gZWxzZSBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSApCiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9iaW5hc2NpaS5jIGIvTW9kdWxlcy9iaW5hc2NpaS5jCmluZGV4IGQ5ODU3NzMuLjJkOTFiN2YgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYmluYXNjaWkuYworKysgYi9Nb2R1bGVzL2JpbmFzY2lpLmMKQEAgLTE4OCw2ICsxODgsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJpbmFzY2lpX2EyYl91dShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHBhc2NpaTsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC0xOTUsOCArMTk2LDEwIEBACiAgICAgUHlPYmplY3QgKnJ2OwogICAgIFB5X3NzaXplX3QgYXNjaWlfbGVuLCBiaW5fbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidCM6YTJiX3V1IiwgJmFzY2lpX2RhdGEsICZhc2NpaV9sZW4pICkKKyAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjphMmJfdXUiLCAmcGFzY2lpKSApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGFzY2lpX2RhdGEgPSBwYXNjaWkuYnVmOworICAgIGFzY2lpX2xlbiA9IHBhc2NpaS5sZW47CiAKICAgICBhc3NlcnQoYXNjaWlfbGVuID49IDApOwogCkBAIC0yMDUsOSArMjA4LDExIEBACiAgICAgYXNjaWlfbGVuLS07CiAKICAgICAvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyICovCi0gICAgaWYgKCAocnY9UHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbikpID09IE5VTEwgKQorICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJpbl9sZW4pKSA9PSBOVUxMICkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBiaW5fZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpOworICAgIH0KKyAgICBiaW5fZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJ2KTsKIAogICAgIGZvciggOyBiaW5fbGVuID4gMCA7IGFzY2lpX2xlbi0tLCBhc2NpaV9kYXRhKysgKSB7CiAgICAgICAgIC8qIFhYWCBpcyBpdCByZWFsbHkgYmVzdCB0byBhZGQgTlVMcyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YSAqLwpAQCAtMjI2LDYgKzIzMSw3IEBACiAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKCB0aGlzX2NoIDwgJyAnIHx8IHRoaXNfY2ggPiAoJyAnICsgNjQpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiSWxsZWdhbCBjaGFyIik7CisgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQpAQCAtMjU0LDEwICsyNjAsMTIgQEAKICAgICAgICAgaWYgKCB0aGlzX2NoICE9ICcgJyAmJiB0aGlzX2NoICE9ICcgJys2NCAmJgogICAgICAgICAgICAgIHRoaXNfY2ggIT0gJ1xuJyAmJiB0aGlzX2NoICE9ICdccicgKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJUcmFpbGluZyBnYXJiYWdlIik7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC0yNjYsNiArMjc0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBiaW5hc2NpaV9iMmFfdXUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciBwYmluOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTI3MywxOCArMjgyLDIzIEBACiAgICAgUHlPYmplY3QgKnJ2OwogICAgIFB5X3NzaXplX3QgYmluX2xlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOmIyYV91dSIsICZiaW5fZGF0YSwgJmJpbl9sZW4pICkKKyAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjpiMmFfdXUiLCAmcGJpbikgKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBiaW5fZGF0YSA9IHBiaW4uYnVmOworICAgIGJpbl9sZW4gPSBwYmluLmxlbjsKICAgICBpZiAoIGJpbl9sZW4gPiA0NSApIHsKICAgICAgICAgLyogVGhlIDQ1IGlzIGEgbGltaXQgdGhhdCBhcHBlYXJzIGluIGFsbCB1dWVuY29kZSdzICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIkF0IG1vc3QgNDUgYnl0ZXMgYXQgb25jZSIpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyogV2UncmUgbGF6eSBhbmQgYWxsb2NhdGUgdG8gbXVjaCAoZml4ZWQgdXAgbGF0ZXIpICovCi0gICAgaWYgKCAocnY9UHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMiArIChiaW5fbGVuKzIpLzMqNCkpID09IE5VTEwgKQorICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDIgKyAoYmluX2xlbisyKS8zKjQpKSA9PSBOVUxMICkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpOworICAgIH0KKyAgICBhc2NpaV9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcocnYpOwogCiAgICAgLyogU3RvcmUgdGhlIGxlbmd0aCAqLwogICAgICphc2NpaV9kYXRhKysgPSAnICcgKyAoYmluX2xlbiAmIDA3Nyk7CkBAIC0zMDYsOCArMzIwLDEzIEBACiAgICAgfQogICAgICphc2NpaV9kYXRhKysgPSAnXG4nOyAgICAgICAvKiBBcHBlbmQgYSBjb3VydGVzeSBuZXdsaW5lICovCiAKLSAgICBfUHlTdHJpbmdfUmVzaXplKCZydiwgKGFzY2lpX2RhdGEgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19Bc1N0cmluZyhydikpKTsKKyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnYsCisgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYocnYpOworICAgICAgICBydiA9IE5VTEw7CisgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOwogICAgIHJldHVybiBydjsKIH0KIApAQCAtMzQyLDYgKzM2MSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYmluYXNjaWlfYTJiX2Jhc2U2NChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHBhc2NpaTsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC0zNTAsMjAgKzM3MCwyNiBAQAogICAgIFB5X3NzaXplX3QgYXNjaWlfbGVuLCBiaW5fbGVuOwogICAgIGludCBxdWFkX3BvcyA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ0IzphMmJfYmFzZTY0IiwgJmFzY2lpX2RhdGEsICZhc2NpaV9sZW4pICkKKyAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjphMmJfYmFzZTY0IiwgJnBhc2NpaSkgKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBhc2NpaV9kYXRhID0gcGFzY2lpLmJ1ZjsKKyAgICBhc2NpaV9sZW4gPSBwYXNjaWkubGVuOwogCiAgICAgYXNzZXJ0KGFzY2lpX2xlbiA+PSAwKTsKIAotICAgIGlmIChhc2NpaV9sZW4gPiBQWV9TU0laRV9UX01BWCAtIDMpCisgICAgaWYgKGFzY2lpX2xlbiA+IFBZX1NTSVpFX1RfTUFYIC0gMykgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICB9CiAKICAgICBiaW5fbGVuID0gKChhc2NpaV9sZW4rMykvNCkqMzsgLyogVXBwZXIgYm91bmQsIGNvcnJlY3RlZCBsYXRlciAqLwogCiAgICAgLyogQWxsb2NhdGUgdGhlIGJ1ZmZlciAqLwotICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJpbl9sZW4pKSA9PSBOVUxMICkKKyAgICBpZiAoIChydj1QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKSkgPT0gTlVMTCApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYmluX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KTsKKyAgICB9CisgICAgYmluX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhydik7CiAgICAgYmluX2xlbiA9IDA7CiAKICAgICBmb3IoIDsgYXNjaWlfbGVuID4gMDsgYXNjaWlfbGVuLS0sIGFzY2lpX2RhdGErKykgewpAQCAtNDE1LDYgKzQ0MSw3IEBACiAgICAgfQogCiAgICAgaWYgKGxlZnRiaXRzICE9IDApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiSW5jb3JyZWN0IHBhZGRpbmciKTsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00MjQsMTIgKzQ1MSwxNyBAQAogICAgICoqIChiZWNhdXNlIHRoZSBpbnB1dCB3YXMgYWxsIGludmFsaWQpIHJldHVybiB0aGUgc2hhcmVkIGVtcHR5CiAgICAgKiogc3RyaW5nIGluc3RlYWQ7IF9QeVN0cmluZ19SZXNpemUoKSB3b24ndCBkbyB0aGlzIGZvciB1cy4KICAgICAqLwotICAgIGlmIChiaW5fbGVuID4gMCkKLSAgICAgICAgX1B5U3RyaW5nX1Jlc2l6ZSgmcnYsIGJpbl9sZW4pOworICAgIGlmIChiaW5fbGVuID4gMCkgeworICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnYsIGJpbl9sZW4pIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKKyAgICAgICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCIiKTsKKyAgICAgICAgcnYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC00MzgsNiArNDcwLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBiaW5hc2NpaV9iMmFfYmFzZTY0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC00NDUsMjIgKzQ3OCwyNyBAQAogICAgIFB5T2JqZWN0ICpydjsKICAgICBQeV9zc2l6ZV90IGJpbl9sZW47CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpiMmFfYmFzZTY0IiwgJmJpbl9kYXRhLCAmYmluX2xlbikgKQorICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqOmIyYV9iYXNlNjQiLCAmcGJ1ZikgKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBiaW5fZGF0YSA9IHBidWYuYnVmOworICAgIGJpbl9sZW4gPSBwYnVmLmxlbjsKIAogICAgIGFzc2VydChiaW5fbGVuID49IDApOwogCiAgICAgaWYgKCBiaW5fbGVuID4gQkFTRTY0X01BWEJJTiApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiVG9vIG11Y2ggZGF0YSBmb3IgYmFzZTY0IGxpbmUiKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIFdlJ3JlIGxhenkgYW5kIGFsbG9jYXRlIHRvbyBtdWNoIChmaXhlZCB1cCBsYXRlcikuCiAgICAgICAgIiszIiBsZWF2ZXMgcm9vbSBmb3IgdXAgdG8gdHdvIHBhZCBjaGFyYWN0ZXJzIGFuZCBhIHRyYWlsaW5nCiAgICAgICAgbmV3bGluZS4gIE5vdGUgdGhhdCAnYicgZ2V0cyBlbmNvZGVkIGFzICdZZz09XG4nICgxIGluLCA1IG91dCkuICovCi0gICAgaWYgKCAocnY9UHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbioyICsgMykpID09IE5VTEwgKQorICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJpbl9sZW4qMiArIDMpKSA9PSBOVUxMICkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpOworICAgIH0KKyAgICBhc2NpaV9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcocnYpOwogCiAgICAgZm9yKCA7IGJpbl9sZW4gPiAwIDsgYmluX2xlbi0tLCBiaW5fZGF0YSsrICkgewogICAgICAgICAvKiBTaGlmdCB0aGUgZGF0YSBpbnRvIG91ciBidWZmZXIgKi8KQEAgLTQ4NCw4ICs1MjIsMTMgQEAKICAgICB9CiAgICAgKmFzY2lpX2RhdGErKyA9ICdcbic7ICAgICAgIC8qIEFwcGVuZCBhIGNvdXJ0ZXN5IG5ld2xpbmUgKi8KIAotICAgIF9QeVN0cmluZ19SZXNpemUoJnJ2LCAoYXNjaWlfZGF0YSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KSkpOworICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZydiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGEgLQorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcocnYpKSkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihydik7CisgICAgICAgIHJ2ID0gTlVMTDsKKyAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC00OTQsNiArNTM3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBiaW5hc2NpaV9hMmJfaHF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeV9idWZmZXIgcGFzY2lpOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTUwMiwyMCArNTQ2LDI2IEBACiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgaW50IGRvbmUgPSAwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidCM6YTJiX2hxeCIsICZhc2NpaV9kYXRhLCAmbGVuKSApCisgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6YTJiX2hxeCIsICZwYXNjaWkpICkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYXNjaWlfZGF0YSA9IHBhc2NpaS5idWY7CisgICAgbGVuID0gcGFzY2lpLmxlbjsKIAogICAgIGFzc2VydChsZW4gPj0gMCk7CiAKLSAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLSAyKQorICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAtIDIpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQogCiAgICAgLyogQWxsb2NhdGUgYSBzdHJpbmcgdGhhdCBpcyB0b28gYmlnIChmaXhlZCBsYXRlcikKICAgICAgICBBZGQgdHdvIHRvIHRoZSBpbml0aWFsIGxlbmd0aCB0byBwcmV2ZW50IGludGVybmluZyB3aGljaAogICAgICAgIHdvdWxkIHByZWNsdWRlIHN1YnNlcXVlbnQgcmVzaXppbmcuICAqLwotICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbisyKSkgPT0gTlVMTCApCisgICAgaWYgKCAocnY9UHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKzIpKSA9PSBOVUxMICkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBiaW5fZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpOworICAgIH0KKyAgICBiaW5fZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJ2KTsKIAogICAgIGZvciggOyBsZW4gPiAwIDsgbGVuLS0sIGFzY2lpX2RhdGErKyApIHsKICAgICAgICAgLyogR2V0IHRoZSBieXRlIGFuZCBsb29rIGl0IHVwICovCkBAIC01MjQsNiArNTc0LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoIHRoaXNfY2ggPT0gRkFJTCApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIklsbGVnYWwgY2hhciIpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtNTQ2LDE3ICs1OTcsMjQgQEAKICAgICBpZiAoIGxlZnRiaXRzICYmICFkb25lICkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoSW5jb21wbGV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICJTdHJpbmcgaGFzIGluY29tcGxldGUgbnVtYmVyIG9mIGJ5dGVzIik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBfUHlTdHJpbmdfUmVzaXplKAotICAgICAgICAmcnYsIChiaW5fZGF0YSAtICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpKSk7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2LAorICAgICAgICAgICAgICAgICAgICAgICAoYmluX2RhdGEgLQorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcocnYpKSkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihydik7CisgICAgICAgIHJ2ID0gTlVMTDsKKyAgICB9CiAgICAgaWYgKHJ2KSB7CiAgICAgICAgIFB5T2JqZWN0ICpycnYgPSBQeV9CdWlsZFZhbHVlKCJPaSIsIHJ2LCBkb25lKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcmV0dXJuIHJydjsKICAgICB9CiAKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC01NjUsMjMgKzYyMywzMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJpbmFzY2lpX3JsZWNvZGVfaHF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICB1bnNpZ25lZCBjaGFyICppbl9kYXRhLCAqb3V0X2RhdGE7CiAgICAgUHlPYmplY3QgKnJ2OwogICAgIHVuc2lnbmVkIGNoYXIgY2g7CiAgICAgUHlfc3NpemVfdCBpbiwgaW5lbmQsIGxlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOnJsZWNvZGVfaHF4IiwgJmluX2RhdGEsICZsZW4pICkKKyAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjpybGVjb2RlX2hxeCIsICZwYnVmKSApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGluX2RhdGEgPSBwYnVmLmJ1ZjsKKyAgICBsZW4gPSBwYnVmLmxlbjsKIAogICAgIGFzc2VydChsZW4gPj0gMCk7CiAKLSAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLyAyIC0gMikKKyAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLyAyIC0gMikgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQogCiAgICAgLyogV29yc3QgY2FzZTogb3V0cHV0IGlzIHR3aWNlIGFzIGJpZyBhcyBpbnB1dCAoZml4ZWQgbGF0ZXIpICovCi0gICAgaWYgKCAocnY9UHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIrMikpID09IE5VTEwgKQorICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKzIpKSA9PSBOVUxMICkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgb3V0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KTsKKyAgICB9CisgICAgb3V0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIGluPTA7IGluPGxlbjsgaW4rKykgewogICAgICAgICBjaCA9IGluX2RhdGFbaW5dOwpAQCAtNjA3LDggKzY3MiwxMyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIF9QeVN0cmluZ19SZXNpemUoJnJ2LCAob3V0X2RhdGEgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19Bc1N0cmluZyhydikpKTsKKyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnYsCisgICAgICAgICAgICAgICAgICAgICAgIChvdXRfZGF0YSAtCisgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhydikpKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHJ2KTsKKyAgICAgICAgcnYgPSBOVUxMOworICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gcnY7CiB9CiAKQEAgLTYxNyw2ICs2ODcsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJpbmFzY2lpX2IyYV9ocXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciBwYmluOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTYyNCwxOCArNjk1LDI0IEBACiAgICAgUHlPYmplY3QgKnJ2OwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6YjJhX2hxeCIsICZiaW5fZGF0YSwgJmxlbikgKQorICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqOmIyYV9ocXgiLCAmcGJpbikgKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBiaW5fZGF0YSA9IHBiaW4uYnVmOworICAgIGxlbiA9IHBiaW4ubGVuOwogCiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKQorICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICB9CiAKICAgICAvKiBBbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGlzIGF0IGxlYXN0IGxhcmdlIGVub3VnaCAqLwotICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKzIpKSA9PSBOVUxMICkKKyAgICBpZiAoIChydj1QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qMisyKSkgPT0gTlVMTCApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGFzY2lpX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KTsKKyAgICB9CisgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJ2KTsKIAogICAgIGZvciggOyBsZW4gPiAwIDsgbGVuLS0sIGJpbl9kYXRhKysgKSB7CiAgICAgICAgIC8qIFNoaWZ0IGludG8gb3VyIGJ1ZmZlciwgYW5kIG91dHB1dCBhbnkgNmJpdHMgcmVhZHkgKi8KQEAgLTY1Miw4ICs3MjksMTMgQEAKICAgICAgICAgbGVmdGNoYXIgPDw9ICg2LWxlZnRiaXRzKTsKICAgICAgICAgKmFzY2lpX2RhdGErKyA9IHRhYmxlX2IyYV9ocXhbbGVmdGNoYXIgJiAweDNmXTsKICAgICB9Ci0gICAgX1B5U3RyaW5nX1Jlc2l6ZSgmcnYsIChhc2NpaV9kYXRhIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpKSk7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2LAorICAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YSAtCisgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhydikpKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHJ2KTsKKyAgICAgICAgcnYgPSBOVUxMOworICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICByZXR1cm4gcnY7CiB9CiAKQEAgLTY2MiwyOCArNzQ0LDM3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYmluYXNjaWlfcmxlZGVjb2RlX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHBpbjsKICAgICB1bnNpZ25lZCBjaGFyICppbl9kYXRhLCAqb3V0X2RhdGE7CiAgICAgdW5zaWduZWQgY2hhciBpbl9ieXRlLCBpbl9yZXBlYXQ7CiAgICAgUHlPYmplY3QgKnJ2OwogICAgIFB5X3NzaXplX3QgaW5fbGVuLCBvdXRfbGVuLCBvdXRfbGVuX2xlZnQ7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpybGVkZWNvZGVfaHF4IiwgJmluX2RhdGEsICZpbl9sZW4pICkKKyAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjpybGVkZWNvZGVfaHF4IiwgJnBpbikgKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpbl9kYXRhID0gcGluLmJ1ZjsKKyAgICBpbl9sZW4gPSBwaW4ubGVuOwogCiAgICAgYXNzZXJ0KGluX2xlbiA+PSAwKTsKIAogICAgIC8qIEVtcHR5IHN0cmluZyBpcyBhIHNwZWNpYWwgY2FzZSAqLwotICAgIGlmICggaW5fbGVuID09IDAgKQotICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZygiIik7Ci0gICAgZWxzZSBpZiAoaW5fbGVuID4gUFlfU1NJWkVfVF9NQVggLyAyKQotICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIGlmICggaW5fbGVuID09IDAgKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7CisgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7CisgICAgfQorICAgIGVsc2UgaWYgKGluX2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOworICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICB9CiAKICAgICAvKiBBbGxvY2F0ZSBhIGJ1ZmZlciBvZiByZWFzb25hYmxlIHNpemUuIFJlc2l6ZWQgd2hlbiBuZWVkZWQgKi8KICAgICBvdXRfbGVuID0gaW5fbGVuKjI7Ci0gICAgaWYgKCAocnY9UHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0X2xlbikpID09IE5VTEwgKQorICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dF9sZW4pKSA9PSBOVUxMICkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgb3V0X2xlbl9sZWZ0ID0gb3V0X2xlbjsKLSAgICBvdXRfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpOworICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcocnYpOwogCiAgICAgLyoKICAgICAqKiBXZSBuZWVkIHR3byBtYWNyb3MgaGVyZSB0byBnZXQvcHV0IGJ5dGVzIGFuZCBoYW5kbGUKQEAgLTY5NCw2ICs3ODUsNyBAQAogICAgICAgICAgICAgIGlmICggLS1pbl9sZW4gPCAwICkgeyBcCiAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhJbmNvbXBsZXRlLCAiIik7IFwKICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsgXAorICAgICAgICAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOyBcCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyBcCiAgICAgICAgICAgICAgfSBcCiAgICAgICAgICAgICAgYiA9ICppbl9kYXRhKys7IFwKQEAgLTcwMyw5ICs3OTUsOSBAQAogICAgIGRvIHsgXAogICAgICAgICAgICAgIGlmICggLS1vdXRfbGVuX2xlZnQgPCAwICkgeyBcCiAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvdXRfbGVuID4gUFlfU1NJWkVfVF9NQVggLyAyKSByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsgXAotICAgICAgICAgICAgICAgICAgICAgIF9QeVN0cmluZ19SZXNpemUoJnJ2LCAyKm91dF9sZW4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKCBydiA9PSBOVUxMICkgcmV0dXJuIE5VTEw7IFwKLSAgICAgICAgICAgICAgICAgICAgICBvdXRfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpIFwKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnYsIDIqb3V0X2xlbikgPCAwKSBcCisgICAgICAgICAgICAgICAgICAgICAgICB7IFB5X0RFQ1JFRihydik7IFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7IHJldHVybiBOVUxMOyB9IFwKKyAgICAgICAgICAgICAgICAgICAgICBvdXRfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJ2KSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBvdXRfbGVuOyBcCiAgICAgICAgICAgICAgICAgICAgICAgb3V0X2xlbl9sZWZ0ID0gb3V0X2xlbi0xOyBcCiAgICAgICAgICAgICAgICAgICAgICAgb3V0X2xlbiA9IG91dF9sZW4gKiAyOyBcCkBAIC03MjYsNiArODE4LDcgQEAKICAgICAgICAgICAgICoqIG9mIHRoZSBzdHJpbmcgb25seSkuIFRoaXMgaXMgYSBwcm9ncmFtbWVyIGVycm9yLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIk9ycGhhbmVkIFJMRSBjb2RlIGF0IHN0YXJ0Iik7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOwogICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC03NTMsOCArODQ2LDEzIEBACiAgICAgICAgICAgICBPVVRCWVRFKGluX2J5dGUpOwogICAgICAgICB9CiAgICAgfQotICAgIF9QeVN0cmluZ19SZXNpemUoJnJ2LCAob3V0X2RhdGEgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19Bc1N0cmluZyhydikpKTsKKyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnYsCisgICAgICAgICAgICAgICAgICAgICAgIChvdXRfZGF0YSAtCisgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhydikpKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHJ2KTsKKyAgICAgICAgcnYgPSBOVUxMOworICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOwogICAgIHJldHVybiBydjsKIH0KIApAQCAtNzY0LDE3ICs4NjIsMjEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBiaW5hc2NpaV9jcmNfaHF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeV9idWZmZXIgcGluOwogICAgIHVuc2lnbmVkIGNoYXIgKmJpbl9kYXRhOwogICAgIHVuc2lnbmVkIGludCBjcmM7CiAgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6Y3JjX2hxeCIsICZiaW5fZGF0YSwgJmxlbiwgJmNyYykgKQorICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqaTpjcmNfaHF4IiwgJnBpbiwgJmNyYykgKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBiaW5fZGF0YSA9IHBpbi5idWY7CisgICAgbGVuID0gcGluLmxlbjsKIAogICAgIHdoaWxlKGxlbi0tID4gMCkgewogICAgICAgICBjcmM9KChjcmM8PDgpJjB4ZmYwMCleY3JjdGFiX2hxeFsoKGNyYz4+OCkmMHhmZileKmJpbl9kYXRhKytdOwogICAgIH0KIAorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7CiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCBjcmMpOwogfQogCkBAIC03ODcsMTcgKzg4OSwyMSBAQAogYmluYXNjaWlfY3JjMzIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHVuc2lnbmVkIGludCBjcmMzMnZhbCA9IDA7ICAvKiBjcmMzMigwTCwgWl9OVUxMLCAwKSAqLworICAgIFB5X2J1ZmZlciBwYnVmOwogICAgIEJ5dGUgKmJ1ZjsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBpbnQgc2lnbmVkX3ZhbDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyN8STpjcmMzMiIsICZidWYsICZsZW4sICZjcmMzMnZhbCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKnxJOmNyYzMyIiwgJnBidWYsICZjcmMzMnZhbCkpCiAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogSW4gUHl0aG9uIDIueCB3ZSByZXR1cm4gYSBzaWduZWQgaW50ZWdlciByZWdhcmRsZXNzIG9mIG5hdGl2ZSBwbGF0Zm9ybQogICAgICAqIGxvbmcgc2l6ZSAodGhlIDMyYml0IHVuc2lnbmVkIGxvbmcgaXMgdHJlYXRlZCBhcyAzMi1iaXQgc2lnbmVkIGFuZCBzaWduCiAgICAgICogZXh0ZW5kZWQgaW50byBhIDY0LWJpdCBsb25nIGluc2lkZSB0aGUgaW50ZWdlciBvYmplY3QpLiAgMy4wIGRvZXMgdGhlCiAgICAgICogcmlnaHQgdGhpbmcgYW5kIHJldHVybnMgdW5zaWduZWQuIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjAyICovCisgICAgYnVmID0gKEJ5dGUqKXBidWYuYnVmOworICAgIGxlbiA9IHBidWYubGVuOwogICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMzMnZhbCwgYnVmLCBsZW4pOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhzaWduZWRfdmFsKTsKIH0KICNlbHNlICAvKiBVU0VfWkxJQl9DUkMzMiAqLwpAQCAtOTIyLDEzICsxMDI4LDE2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYmluYXNjaWlfY3JjMzIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeyAvKiBCeSBKaW0gQWhsc3Ryb207IEFsbCByaWdodHMgdHJhbnNmZXJyZWQgdG8gQ05SSSAqLworICAgIFB5X2J1ZmZlciBwYmluOwogICAgIHVuc2lnbmVkIGNoYXIgKmJpbl9kYXRhOwogICAgIHVuc2lnbmVkIGludCBjcmMgPSAwVTsgICAgICAvKiBpbml0aWFsIHZhbHVlIG9mIENSQyAqLwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGludCByZXN1bHQ7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3xJOmNyYzMyIiwgJmJpbl9kYXRhLCAmbGVuLCAmY3JjKSApCisgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyp8STpjcmMzMiIsICZwYmluLCAmY3JjKSApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGJpbl9kYXRhID0gcGJpbi5idWY7CisgICAgbGVuID0gcGJpbi5sZW47CiAKICAgICBjcmMgPSB+IGNyYzsKICAgICB3aGlsZSAobGVuLS0gPiAwKQpAQCAtOTM2LDYgKzEwNDUsNyBAQAogICAgICAgICAvKiBOb3RlOiAgKGNyYyA+PiA4KSBNVVNUIHplcm8gZmlsbCBvbiBsZWZ0ICovCiAKICAgICByZXN1bHQgPSAoaW50KShjcmMgXiAweEZGRkZGRkZGVSk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKHJlc3VsdCk7CiB9CiAjZW5kaWYgIC8qIFVTRV9aTElCX0NSQzMyICovCkBAIC05NDQsMjUgKzEwNTQsMzAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBiaW5hc2NpaV9oZXhsaWZ5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeV9idWZmZXIgcGFyZzsKICAgICBjaGFyKiBhcmdidWY7CiAgICAgUHlfc3NpemVfdCBhcmdsZW47CiAgICAgUHlPYmplY3QgKnJldHZhbDsKICAgICBjaGFyKiByZXRidWY7CiAgICAgUHlfc3NpemVfdCBpLCBqOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpiMmFfaGV4IiwgJmFyZ2J1ZiwgJmFyZ2xlbikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjpiMmFfaGV4IiwgJnBhcmcpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBhcmdidWYgPSBwYXJnLmJ1ZjsKKyAgICBhcmdsZW4gPSBwYXJnLmxlbjsKIAogICAgIGFzc2VydChhcmdsZW4gPj0gMCk7Ci0gICAgaWYgKGFyZ2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikKKyAgICBpZiAoYXJnbGVuID4gUFlfU1NJWkVfVF9NQVggLyAyKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICB9CiAKICAgICByZXR2YWwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBhcmdsZW4qMik7Ci0gICAgaWYgKCFyZXR2YWwpCisgICAgaWYgKCFyZXR2YWwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldGJ1ZiA9IFB5U3RyaW5nX0FzU3RyaW5nKHJldHZhbCk7Ci0gICAgaWYgKCFyZXRidWYpCi0gICAgICAgIGdvdG8gZmluYWxseTsKKyAgICB9CisgICAgcmV0YnVmID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJldHZhbCk7CiAKICAgICAvKiBtYWtlIGhleCB2ZXJzaW9uIG9mIHN0cmluZywgdGFrZW4gZnJvbSBzaGFtb2R1bGUuYyAqLwogICAgIGZvciAoaT1qPTA7IGkgPCBhcmdsZW47IGkrKykgewpAQCAtOTc0LDExICsxMDg5LDggQEAKICAgICAgICAgYyA9IChjPjkpID8gYysnYSctMTAgOiBjICsgJzAnOwogICAgICAgICByZXRidWZbaisrXSA9IGM7CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOwogICAgIHJldHVybiByZXR2YWw7Ci0KLSAgZmluYWxseToKLSAgICBQeV9ERUNSRUYocmV0dmFsKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19oZXhsaWZ5LApAQCAtMTAwNSwxNCArMTExNywxNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJpbmFzY2lpX3VuaGV4bGlmeShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHBhcmc7CiAgICAgY2hhciogYXJnYnVmOwogICAgIFB5X3NzaXplX3QgYXJnbGVuOwogICAgIFB5T2JqZWN0ICpyZXR2YWw7CiAgICAgY2hhciogcmV0YnVmOwogICAgIFB5X3NzaXplX3QgaSwgajsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6YTJiX2hleCIsICZhcmdidWYsICZhcmdsZW4pKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6YTJiX2hleCIsICZwYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYXJnYnVmID0gcGFyZy5idWY7CisgICAgYXJnbGVuID0gcGFyZy5sZW47CiAKICAgICBhc3NlcnQoYXJnbGVuID49IDApOwogCkBAIC0xMDIxLDE2ICsxMTM2LDE3IEBACiAgICAgICogcmFpc2UgYW4gZXhjZXB0aW9uLgogICAgICAqLwogICAgIGlmIChhcmdsZW4gJSAyKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiT2RkLWxlbmd0aCBzdHJpbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgcmV0dmFsID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgKGFyZ2xlbi8yKSk7Ci0gICAgaWYgKCFyZXR2YWwpCisgICAgaWYgKCFyZXR2YWwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldGJ1ZiA9IFB5U3RyaW5nX0FzU3RyaW5nKHJldHZhbCk7Ci0gICAgaWYgKCFyZXRidWYpCi0gICAgICAgIGdvdG8gZmluYWxseTsKKyAgICB9CisgICAgcmV0YnVmID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJldHZhbCk7CiAKICAgICBmb3IgKGk9aj0wOyBpIDwgYXJnbGVuOyBpICs9IDIpIHsKICAgICAgICAgaW50IHRvcCA9IHRvX2ludChQeV9DSEFSTUFTSyhhcmdidWZbaV0pKTsKQEAgLTEwNDIsOSArMTE1OCwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldGJ1ZltqKytdID0gKHRvcCA8PCA0KSArIGJvdDsKICAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CiAgICAgcmV0dXJuIHJldHZhbDsKIAogICBmaW5hbGx5OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOwogICAgIFB5X0RFQ1JFRihyZXR2YWwpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMTA3NywxNSArMTE5NSwxOCBAQAogewogICAgIFB5X3NzaXplX3QgaW4sIG91dDsKICAgICBjaGFyIGNoOworICAgIFB5X2J1ZmZlciBwZGF0YTsKICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqb2RhdGE7CiAgICAgUHlfc3NpemVfdCBkYXRhbGVuID0gMDsKICAgICBQeU9iamVjdCAqcnY7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhIiwgImhlYWRlciIsIE5VTEx9OwogICAgIGludCBoZWFkZXIgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAicyN8aSIsIGt3bGlzdCwgJmRhdGEsCi0gICAgICAgICAgJmRhdGFsZW4sICZoZWFkZXIpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInMqfGkiLCBrd2xpc3QsICZwZGF0YSwKKyAgICAgICAgICAmaGVhZGVyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZGF0YSA9IHBkYXRhLmJ1ZjsKKyAgICBkYXRhbGVuID0gcGRhdGEubGVuOwogCiAgICAgLyogV2UgYWxsb2NhdGUgdGhlIG91dHB1dCBzYW1lIHNpemUgYXMgaW5wdXQsIHRoaXMgaXMgb3ZlcmtpbGwuCiAgICAgICogVGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIHVzZWQgY2FsbG9jKCkgc28gd2UnbGwgemVybyBvdXQgdGhlCkBAIC0xMDkzLDYgKzEyMTQsNyBAQAogICAgICAqLwogICAgIG9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgUHlNZW1fTWFsbG9jKGRhdGFsZW4pOwogICAgIGlmIChvZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTE0Myw5ICsxMjY1LDExIEBACiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKChydiA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopb2RhdGEsIG91dCkpID09IE5VTEwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgICAgICBQeU1lbV9GcmVlKG9kYXRhKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBQeU1lbV9GcmVlKG9kYXRhKTsKICAgICByZXR1cm4gcnY7CiB9CkBAIC0xMTc2LDYgKzEzMDAsNyBAQAogYmluYXNjaWlfYjJhX3FwIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBpbiwgb3V0OworICAgIFB5X2J1ZmZlciBwZGF0YTsKICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqb2RhdGE7CiAgICAgUHlfc3NpemVfdCBkYXRhbGVuID0gMCwgb2RhdGFsZW4gPSAwOwogICAgIFB5T2JqZWN0ICpydjsKQEAgLTExODksOSArMTMxNCwxMSBAQAogICAgIGludCBjcmxmID0gMDsKICAgICB1bnNpZ25lZCBjaGFyICpwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAicyN8aWlpIiwga3dsaXN0LCAmZGF0YSwKLSAgICAgICAgICAmZGF0YWxlbiwgJnF1b3RldGFicywgJmlzdGV4dCwgJmhlYWRlcikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAicyp8aWlpIiwga3dsaXN0LCAmcGRhdGEsCisgICAgICAgICAgJnF1b3RldGFicywgJmlzdGV4dCwgJmhlYWRlcikpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGRhdGEgPSBwZGF0YS5idWY7CisgICAgZGF0YWxlbiA9IHBkYXRhLmxlbjsKIAogICAgIC8qIFNlZSBpZiB0aGlzIHN0cmluZyBpcyB1c2luZyBDUkxGIGxpbmUgZW5kcyAqLwogICAgIC8qIFhYWDogdGhpcyBmdW5jdGlvbiBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIGNvbnZlcnRpbmcgYWxsIG9mCkBAIC0xMjY5LDYgKzEzOTYsNyBAQAogICAgICAqLwogICAgIG9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgUHlNZW1fTWFsbG9jKG9kYXRhbGVuKTsKICAgICBpZiAob2RhdGEgPT0gTlVMTCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEzNDMsOSArMTQ3MSwxMSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGlmICgocnYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKW9kYXRhLCBvdXQpKSA9PSBOVUxMKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICAgICAgUHlNZW1fRnJlZShvZGF0YSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgUHlNZW1fRnJlZShvZGF0YSk7CiAgICAgcmV0dXJuIHJ2OwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9ic2RkYi5oIGIvTW9kdWxlcy9ic2RkYi5oCmluZGV4IDY3M2Y1ZmMuLmEzYTY4N2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYnNkZGIuaAorKysgYi9Nb2R1bGVzL2JzZGRiLmgKQEAgLTcwLDYgKzcwLDEwIEBACiAgKiBEQkxvY2sgICAgICAgKEEgbG9jayBoYW5kbGUpCiAgKiBEQlNlcXVlbmNlICAgKFNlcXVlbmNlKQogICoKKyAqIE5ldyBkYXRhdHlwZXM6CisgKgorICogREJMb2dDdXJzb3IgIChMb2cgQ3Vyc29yKQorICoKICAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTEwNSw3ICsxMDksNyBAQAogI2Vycm9yICJlZWshIERCVkVSIGNhbid0IGhhbmRsZSBtaW5vciB2ZXJzaW9ucyA+IDkiCiAjZW5kaWYKIAotI2RlZmluZSBQWV9CU0REQl9WRVJTSU9OICI0LjcuMyIKKyNkZWZpbmUgUFlfQlNEREJfVkVSU0lPTiAiNC44LjQuMSIKIAogLyogUHl0aG9uIG9iamVjdCBkZWZpbml0aW9ucyAqLwogCkBAIC0xMjIsNiArMTI2LDcgQEAKIAogc3RydWN0IERCT2JqZWN0OyAgICAgICAgICAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCiBzdHJ1Y3QgREJDdXJzb3JPYmplY3Q7ICAgIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0cnVjdCBEQkxvZ0N1cnNvck9iamVjdDsgLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogc3RydWN0IERCVHhuT2JqZWN0OyAgICAgICAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCiBzdHJ1Y3QgREJTZXF1ZW5jZU9iamVjdDsgIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KIApAQCAtMTM0LDYgKzEzOSw3IEBACiAgICAgUHlPYmplY3QqICAgICAgIGV2ZW50X25vdGlmeUNhbGxiYWNrOwogICAgIHN0cnVjdCBEQk9iamVjdCAqY2hpbGRyZW5fZGJzOwogICAgIHN0cnVjdCBEQlR4bk9iamVjdCAqY2hpbGRyZW5fdHhuczsKKyAgICBzdHJ1Y3QgREJMb2dDdXJzb3JPYmplY3QgKmNoaWxkcmVuX2xvZ2N1cnNvcnM7CiAgICAgUHlPYmplY3QgICAgICAgICpwcml2YXRlX29iajsKICAgICBQeU9iamVjdCAgICAgICAgKnJlcF90cmFuc3BvcnQ7CiAgICAgUHlPYmplY3QgICAgICAgICppbl93ZWFrcmVmbGlzdDsgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KQEAgLTE0NSw3ICsxNTEsNiBAQAogICAgIERCRW52T2JqZWN0KiAgICBteWVudm9iajsgIC8qIFB5T2JqZWN0IGNvbnRhaW5pbmcgdGhlIERCX0VOViAqLwogICAgIHVfaW50MzJfdCAgICAgICBmbGFnczsgICAgIC8qIHNhdmVkIGZsYWdzIGZyb20gb3BlbigpICovCiAgICAgdV9pbnQzMl90ICAgICAgIHNldGZsYWdzOyAgLyogc2F2ZWQgZmxhZ3MgZnJvbSBzZXRfZmxhZ3MoKSAqLwotICAgIGludCAgICAgICAgICAgICBoYXZlU3RhdDsKICAgICBzdHJ1Y3QgYmVoYXZpb3VyRmxhZ3MgbW9kdWxlRmxhZ3M7CiAgICAgc3RydWN0IERCVHhuT2JqZWN0ICp0eG47CiAgICAgc3RydWN0IERCQ3Vyc29yT2JqZWN0ICpjaGlsZHJlbl9jdXJzb3JzOwpAQCAtMTkzLDkgKzE5OCwyMCBAQAogfSBEQlR4bk9iamVjdDsKIAogCit0eXBlZGVmIHN0cnVjdCBEQkxvZ0N1cnNvck9iamVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIERCX0xPR0MqICAgICAgICBsb2djOworICAgIERCRW52T2JqZWN0KiAgICBlbnY7CisgICAgc3RydWN0IERCTG9nQ3Vyc29yT2JqZWN0ICoqc2libGluZ19wcmV2X3A7CisgICAgc3RydWN0IERCTG9nQ3Vyc29yT2JqZWN0ICpzaWJsaW5nX25leHQ7CisgICAgUHlPYmplY3QgICAgICAgICppbl93ZWFrcmVmbGlzdDsgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KK30gREJMb2dDdXJzb3JPYmplY3Q7CisKKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBEQl9MT0NLICAgICAgICAgbG9jazsKKyAgICBpbnQgICAgICAgICAgICAgbG9ja19pbml0aWFsaXplZDsgIC8qIFNpZ25hbCBpZiB3ZSBhY3R1YWxseSBoYXZlIGEgbG9jayAqLwogICAgIFB5T2JqZWN0ICAgICAgICAqaW5fd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCiB9IERCTG9ja09iamVjdDsKIApAQCAtMjIwLDYgKzIzNiw3IEBACiAvKiBUbyBhY2Nlc3MgdGhlIHN0cnVjdHVyZSBmcm9tIGFuIGV4dGVybmFsIG1vZHVsZSwgdXNlIGNvZGUgbGlrZSB0aGUKICAgIGZvbGxvd2luZyAoZXJyb3IgY2hlY2tpbmcgbWlzc2VkIG91dCBmb3IgY2xhcml0eSk6CiAKKyAgICAgLy8gSWYgeW91IGFyZSB1c2luZyBQeXRob24gYmVmb3JlIDMuMjoKICAgICAgQlNEREJfYXBpKiBic2RkYl9hcGk7CiAgICAgIFB5T2JqZWN0KiAgbW9kOwogICAgICBQeU9iamVjdCogIGNvYmo7CkBAIC0yMzEsNiArMjQ4LDE1IEBACiAgICAgIFB5X0RFQ1JFRihjb2JqKTsKICAgICAgUHlfREVDUkVGKG1vZCk7CiAKKworICAgICAvLyBJZiB5b3UgYXJlIHVzaW5nIFB5dGhvbiAzLjIgb3IgdXA6CisgICAgIEJTRERCX2FwaSogYnNkZGJfYXBpOworCisgICAgIC8vIFVzZSAiYnNkZGIzLl9weWJzZGRiLmFwaSIgaWYgeW91J3JlIHVzaW5nCisgICAgIC8vIHRoZSBzdGFuZGFsb25lIHB5YnNkZGIgYWRkLW9uLgorICAgICBic2RkYl9hcGkgPSAodm9pZCAqKilQeUNhcHN1bGVfSW1wb3J0KCJic2RkYi5fYnNkZGIuYXBpIiwgMSk7CisKKwogICAgVGhlIHN0cnVjdHVyZSdzIG1lbWJlcnMgbXVzdCBub3QgYmUgY2hhbmdlZC4KICovCiAKQEAgLTIzOCw2ICsyNjQsNyBAQAogICAgIC8qIFR5cGUgb2JqZWN0cyAqLwogICAgIFB5VHlwZU9iamVjdCogZGJfdHlwZTsKICAgICBQeVR5cGVPYmplY3QqIGRiY3Vyc29yX3R5cGU7CisgICAgUHlUeXBlT2JqZWN0KiBkYmxvZ2N1cnNvcl90eXBlOwogICAgIFB5VHlwZU9iamVjdCogZGJlbnZfdHlwZTsKICAgICBQeVR5cGVPYmplY3QqIGRidHhuX3R5cGU7CiAgICAgUHlUeXBlT2JqZWN0KiBkYmxvY2tfdHlwZTsKQEAgLTI0Nyw3ICsyNzQsNiBAQAogCiAgICAgLyogRnVuY3Rpb25zICovCiAgICAgaW50ICgqbWFrZURCRXJyb3IpKGludCBlcnIpOwotCiB9IEJTRERCX2FwaTsKIAogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2JzZGRibW9kdWxlLmMgYi9Nb2R1bGVzL2JzZGRibW9kdWxlLmMKaW5kZXggNWZkNGZiMS4uNTc4Y2YzZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9ic2RkYm1vZHVsZS5jCisrKyBiL01vZHVsZXMvYnNkZGJtb2R1bGUuYwpAQCAtMjcwLDcgKzI3MCw4IEBACiB7CiAgICAgaW50IHN0YXR1czsKICAgICBEQlQga3JlYywgZHJlYzsKLSAgICBjaGFyICpkYXRhLGJ1Zls0MDk2XTsKKyAgICBjaGFyICpkYXRhID0gTlVMTDsKKyAgICBjaGFyIGJ1Zls0MDk2XTsKICAgICBpbnQgc2l6ZTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIHJlY25vX3QgcmVjbm87CkBAIC01MDMsNyArNTA0LDggQEAKIHsKICAgICBpbnQgc3RhdHVzOwogICAgIERCVCBrcmVjLCBkcmVjOwotICAgIGNoYXIgKmRhdGEsYnVmWzQwOTZdOworICAgIGNoYXIgKmRhdGEgPSBOVUxMOworICAgIGNoYXIgYnVmWzQwOTZdOwogICAgIGludCBzaXplOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgcmVjbm9fdCByZWNubzsKQEAgLTYzNSw3ICs2MzcsNyBAQAogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oQnNkZGJFcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoc3RhdHVzID0gMCk7CisgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKDApOwogfQogc3RhdGljIFB5TWV0aG9kRGVmIGJzZGRiX21ldGhvZHNbXSA9IHsKICAgICB7ImNsb3NlIiwgICAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWJzZGRiX2Nsb3NlLCBNRVRIX05PQVJHU30sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2J6Mm1vZHVsZS5jIGIvTW9kdWxlcy9iejJtb2R1bGUuYwppbmRleCBjZmQ4ZDcxLi5kZTJlMjBiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2J6Mm1vZHVsZS5jCisrKyBiL01vZHVsZXMvYnoybW9kdWxlLmMKQEAgLTEyMzQsNiArMTIzNCwzNiBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKK1B5RG9jX1NUUlZBUihCWjJGaWxlX2VudGVyX2RvYywKKyJfX2VudGVyX18oKSAtPiBzZWxmLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorQloyRmlsZV9lbnRlcihCWjJGaWxlT2JqZWN0ICpzZWxmKQoreworICAgIGlmIChzZWxmLT5tb2RlID09IE1PREVfQ0xPU0VEKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7Cit9CisKK1B5RG9jX1NUUlZBUihCWjJGaWxlX2V4aXRfZG9jLAorIl9fZXhpdF9fKCpleGNpbmZvKSAtPiBOb25lLiAgQ2xvc2VzIHRoZSBmaWxlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorQloyRmlsZV9leGl0KEJaMkZpbGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKChQeU9iamVjdCAqKSBzZWxmLCAiY2xvc2UiLCBOVUxMKTsKKyAgICBpZiAoIXJldCkKKyAgICAgICAgLyogSWYgZXJyb3Igb2NjdXJyZWQsIHBhc3MgdGhyb3VnaCAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9ERUNSRUYocmV0KTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworCiBzdGF0aWMgUHlPYmplY3QgKkJaMkZpbGVfZ2V0aXRlcihCWjJGaWxlT2JqZWN0ICpzZWxmKTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIEJaMkZpbGVfbWV0aG9kc1tdID0gewpAQCAtMTI0Niw2ICsxMjc2LDggQEAKICAgICB7InNlZWsiLCAoUHlDRnVuY3Rpb24pQloyRmlsZV9zZWVrLCBNRVRIX1ZBUkFSR1MsIEJaMkZpbGVfc2Vla19fZG9jX199LAogICAgIHsidGVsbCIsIChQeUNGdW5jdGlvbilCWjJGaWxlX3RlbGwsIE1FVEhfTk9BUkdTLCBCWjJGaWxlX3RlbGxfX2RvY19ffSwKICAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKUJaMkZpbGVfY2xvc2UsIE1FVEhfTk9BUkdTLCBCWjJGaWxlX2Nsb3NlX19kb2NfX30sCisgICAgeyJfX2VudGVyX18iLCAoUHlDRnVuY3Rpb24pQloyRmlsZV9lbnRlciwgTUVUSF9OT0FSR1MsIEJaMkZpbGVfZW50ZXJfZG9jfSwKKyAgICB7Il9fZXhpdF9fIiwgKFB5Q0Z1bmN0aW9uKUJaMkZpbGVfZXhpdCwgTUVUSF9WQVJBUkdTLCBCWjJGaWxlX2V4aXRfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjI4OCw5ICsyMzIwLDEyIEBACiB7CiAgICAgUHlPYmplY3QgKm07CiAKLSAgICBQeV9UWVBFKCZCWjJGaWxlX1R5cGUpID0gJlB5VHlwZV9UeXBlOwotICAgIFB5X1RZUEUoJkJaMkNvbXBfVHlwZSkgPSAmUHlUeXBlX1R5cGU7Ci0gICAgUHlfVFlQRSgmQloyRGVjb21wX1R5cGUpID0gJlB5VHlwZV9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJkJaMkZpbGVfVHlwZSkgPCAwKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmQloyQ29tcF9UeXBlKSA8IDApCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZCWjJEZWNvbXBfVHlwZSkgPCAwKQorICAgICAgICByZXR1cm47CiAKICAgICBtID0gUHlfSW5pdE1vZHVsZTMoImJ6MiIsIGJ6Ml9tZXRob2RzLCBiejJfX2RvY19fKTsKICAgICBpZiAobSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jUGlja2xlLmMgYi9Nb2R1bGVzL2NQaWNrbGUuYwppbmRleCBkOWJmY2ViLi5iZDU3N2FkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2NQaWNrbGUuYworKysgYi9Nb2R1bGVzL2NQaWNrbGUuYwpAQCAtOTAzLDcgKzkwMyw2IEBACiAgICAgICAgbGlrZSB0aGlzIHJ1bGUuIGpsZgogICAgICovCiAgICAgaWYgKCFqKSB7Ci0gICAgICAgIGo9MTsKICAgICAgICAgbmFtZT1fX21haW5fX19zdHI7CiAgICAgfQogCkBAIC0xMTcwLDE0ICsxMTY5LDI5IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBjaGFyIGNfc3RyWzI1MF07Ci0gICAgICAgIGNfc3RyWzBdID0gRkxPQVQ7Ci0gICAgICAgIFB5T1NfYXNjaWlfZm9ybWF0ZChjX3N0ciArIDEsIHNpemVvZihjX3N0cikgLSAyLCAiJS4xN2ciLCB4KTsKLSAgICAgICAgLyogRXh0ZW5kIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIHdpdGggYSBuZXdsaW5lIGNoYXJhY3RlciAqLwotICAgICAgICBzdHJjYXQoY19zdHIsICJcbiIpOworICAgICAgICBpbnQgcmVzdWx0ID0gLTE7CisgICAgICAgIGNoYXIgKmJ1ZiA9IE5VTEw7CisgICAgICAgIGNoYXIgb3AgPSBGTE9BVDsKIAotICAgICAgICBpZiAoc2VsZi0+d3JpdGVfZnVuYyhzZWxmLCBjX3N0ciwgc3RybGVuKGNfc3RyKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc2VsZi0+d3JpdGVfZnVuYyhzZWxmLCAmb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKworICAgICAgICBidWYgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoeCwgJ2cnLCAxNywgMCwgTlVMTCk7CisgICAgICAgIGlmICghYnVmKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlbGYtPndyaXRlX2Z1bmMoc2VsZiwgYnVmLCBzdHJsZW4oYnVmKSkgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworCisgICAgICAgIGlmIChzZWxmLT53cml0ZV9mdW5jKHNlbGYsICJcbiIsIDEpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKworICAgICAgICByZXN1bHQgPSAwOworZG9uZToKKyAgICAgICAgUHlNZW1fRnJlZShidWYpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTIyMCw5ICsxMjM0LDYgQEAKICAgICAgICAgaW50IGk7CiAgICAgICAgIGNoYXIgY19zdHJbNV07CiAKLSAgICAgICAgaWYgKChzaXplID0gUHlTdHJpbmdfU2l6ZShhcmdzKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotCiAgICAgICAgIGlmIChzaXplIDwgMjU2KSB7CiAgICAgICAgICAgICBjX3N0clswXSA9IFNIT1JUX0JJTlNUUklORzsKICAgICAgICAgICAgIGNfc3RyWzFdID0gc2l6ZTsKQEAgLTE4NjUsMTMgKzE4NzYsNzQgQEAKICAgICByZXR1cm4gLTE7CiB9CiAKKy8qIFRoaXMgaXMgYSB2YXJpYW50IG9mIGJhdGNoX2RpY3QoKSBhYm92ZSB0aGF0IHNwZWNpYWxpemVzIGZvciBkaWN0cywgd2l0aCBubworICogc3VwcG9ydCBmb3IgZGljdCBzdWJjbGFzc2VzLiBMaWtlIGJhdGNoX2RpY3QoKSwgd2UgYmF0Y2ggdXAgY2h1bmtzIG9mCisgKiAgICAgTUFSSyBrZXkgdmFsdWUgLi4uIGtleSB2YWx1ZSBTRVRJVEVNUworICogb3Bjb2RlIHNlcXVlbmNlcy4gIENhbGxpbmcgY29kZSBzaG91bGQgaGF2ZSBhcnJhbmdlZCB0byBmaXJzdCBjcmVhdGUgYW4KKyAqIGVtcHR5IGRpY3QsIG9yIGRpY3QtbGlrZSBvYmplY3QsIGZvciB0aGUgU0VUSVRFTVMgdG8gb3BlcmF0ZSBvbi4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBjdXJyZW50bHkgZG9lc24ndCB3b3JrIGZvciBwcm90b2NvbCAwLgorICovCitzdGF0aWMgaW50CitiYXRjaF9kaWN0X2V4YWN0KFBpY2tsZXJvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKmtleSA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7CisgICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBkaWN0X3NpemUsIHBwb3MgPSAwOworCisgICAgc3RhdGljIGNoYXIgc2V0aXRlbSA9IFNFVElURU07CisgICAgc3RhdGljIGNoYXIgc2V0aXRlbXMgPSBTRVRJVEVNUzsKKworICAgIGFzc2VydChvYmogIT0gTlVMTCk7CisgICAgYXNzZXJ0KHNlbGYtPnByb3RvID4gMCk7CisKKyAgICBkaWN0X3NpemUgPSBQeURpY3RfU2l6ZShvYmopOworCisgICAgLyogU3BlY2lhbC1jYXNlIGxlbihkKSA9PSAxIHRvIHNhdmUgc3BhY2UuICovCisgICAgaWYgKGRpY3Rfc2l6ZSA9PSAxKSB7CisgICAgICAgIFB5RGljdF9OZXh0KG9iaiwgJnBwb3MsICZrZXksICZ2YWx1ZSk7CisgICAgICAgIGlmIChzYXZlKHNlbGYsIGtleSwgMCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc2F2ZShzZWxmLCB2YWx1ZSwgMCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc2VsZi0+d3JpdGVfZnVuYyhzZWxmLCAmc2V0aXRlbSwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBXcml0ZSBpbiBiYXRjaGVzIG9mIEJBVENIU0laRS4gKi8KKyAgICBkbyB7CisgICAgICAgIGkgPSAwOworICAgICAgICBpZiAoc2VsZi0+d3JpdGVfZnVuYyhzZWxmLCAmTUFSS3YsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KG9iaiwgJnBwb3MsICZrZXksICZ2YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmIChzYXZlKHNlbGYsIGtleSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChzYXZlKHNlbGYsIHZhbHVlLCAwKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKCsraSA9PSBCQVRDSFNJWkUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlbGYtPndyaXRlX2Z1bmMoc2VsZiwgJnNldGl0ZW1zLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChQeURpY3RfU2l6ZShvYmopICE9IGRpY3Rfc2l6ZSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAiZGljdGlvbmFyeSBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChpID09IEJBVENIU0laRSk7CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQKIHNhdmVfZGljdChQaWNrbGVyb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpbnQgcmVzID0gLTE7CiAgICAgY2hhciBzWzNdOwogICAgIGludCBsZW47Ci0gICAgUHlPYmplY3QgKml0ZXI7CiAKICAgICBpZiAoc2VsZi0+ZmFzdCAmJiAhZmFzdF9zYXZlX2VudGVyKHNlbGYsIGFyZ3MpKQogICAgICAgICBnb3RvIGZpbmFsbHk7CkBAIC0xOTAzLDE1ICsxOTc1LDIzIEBACiAgICAgICAgIGdvdG8gZmluYWxseTsKIAogICAgIC8qIE1hdGVyaWFsaXplIHRoZSBkaWN0IGl0ZW1zLiAqLwotICAgIGl0ZXIgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGFyZ3MsICJpdGVyaXRlbXMiLCAiKCkiKTsKLSAgICBpZiAoaXRlciA9PSBOVUxMKQotICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIHBpY2tsaW5nIGFuIG9iamVjdCIpID09IDApCi0gICAgewotICAgICAgICByZXMgPSBiYXRjaF9kaWN0KHNlbGYsIGl0ZXIpOwotICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKKyAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoYXJncykgJiYgc2VsZi0+cHJvdG8gPiAwKSB7CisgICAgICAgIC8qIFdlIGNhbiB0YWtlIGNlcnRhaW4gc2hvcnRjdXRzIGlmIHdlIGtub3cgdGhpcyBpcyBhIGRpY3QgYW5kCisgICAgICAgICAgIG5vdCBhIGRpY3Qgc3ViY2xhc3MuICovCisgICAgICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBwaWNrbGluZyBhbiBvYmplY3QiKSA9PSAwKSB7CisgICAgICAgICAgICByZXMgPSBiYXRjaF9kaWN0X2V4YWN0KHNlbGYsIGFyZ3MpOworICAgICAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBQeU9iamVjdCAqaXRlciA9IFB5T2JqZWN0X0NhbGxNZXRob2QoYXJncywgIml0ZXJpdGVtcyIsICIoKSIpOworICAgICAgICBpZiAoaXRlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgcGlja2xpbmcgYW4gb2JqZWN0IikgPT0gMCkgeworICAgICAgICAgICAgcmVzID0gYmF0Y2hfZGljdChzZWxmLCBpdGVyKTsKKyAgICAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKICAgICB9Ci0gICAgUHlfREVDUkVGKGl0ZXIpOwogCiAgIGZpbmFsbHk6CiAgICAgaWYgKHNlbGYtPmZhc3QgJiYgIWZhc3Rfc2F2ZV9sZWF2ZShzZWxmLCBhcmdzKSkKQEAgLTM0NjgsMTEgKzM1NDgsMTEgQEAKICAgICBpZiAobGVuIDwgMikgcmV0dXJuIGJhZF9yZWFkbGluZSgpOwogICAgIGlmICghKCBzPXB5c3RybmR1cChzLGxlbikpKSAgcmV0dXJuIC0xOwogCi0gICAgZXJybm8gPSAwOwotICAgIGQgPSBQeU9TX2FzY2lpX3N0cnRvZChzLCAmZW5kcHRyKTsKKyAgICBkID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKHMsICZlbmRwdHIsIFB5RXhjX092ZXJmbG93RXJyb3IpOwogCi0gICAgaWYgKChlcnJubyA9PSBFUkFOR0UgJiYgIShmYWJzKGQpIDw9IDEuMCkpIHx8Ci0gICAgICAgIChlbmRwdHJbMF0gIT0gJ1xuJykgfHwgKGVuZHB0clsxXSAhPSAnXDAnKSkgeworICAgIGlmIChkID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgfSBlbHNlIGlmICgoZW5kcHRyWzBdICE9ICdcbicpIHx8IChlbmRwdHJbMV0gIT0gJ1wwJykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIGZsb2F0Iik7CiAgICAgICAgIGdvdG8gZmluYWxseTsKQEAgLTQ0NzcsOCArNDU1NywxNiBAQAogCiAgICAgICAgIGkgPSAwOwogICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQoc3RhdGUsICZpLCAmZF9rZXksICZkX3ZhbHVlKSkgewotICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEl0ZW0oZGljdCwgZF9rZXksIGRfdmFsdWUpIDwgMCkKKyAgICAgICAgICAgIC8qIG5vcm1hbGx5IHRoZSBrZXlzIGZvciBpbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZQorICAgICAgICAgICAgICAgaW50ZXJuZWQuICB3ZSBzaG91bGQgdHJ5IHRvIGRvIHRoYXQgaGVyZS4gKi8KKyAgICAgICAgICAgIFB5X0lOQ1JFRihkX2tleSk7CisgICAgICAgICAgICBpZiAoUHlTdHJpbmdfQ2hlY2tFeGFjdChkX2tleSkpCisgICAgICAgICAgICAgICAgUHlTdHJpbmdfSW50ZXJuSW5QbGFjZSgmZF9rZXkpOworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEl0ZW0oZGljdCwgZF9rZXksIGRfdmFsdWUpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkX2tleSk7CiAgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGRfa2V5KTsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoZGljdCk7CiAgICAgfQpAQCAtNDk3MSw2ICs1MDU5LDMzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK25vbG9hZF9hcHBlbmQoVW5waWNrbGVyb2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQZGF0YV9jbGVhcihzZWxmLT5zdGFjaywgc2VsZi0+c3RhY2stPmxlbmd0aCAtIDEpOworfQorCitzdGF0aWMgaW50Citub2xvYWRfYXBwZW5kcyhVbnBpY2tsZXJvYmplY3QgKnNlbGYpCit7CisgICAgaW50IGk7CisgICAgaWYgKChpID0gbWFya2VyKHNlbGYpKSA8IDApIHJldHVybiAtMTsKKyAgICByZXR1cm4gUGRhdGFfY2xlYXIoc2VsZi0+c3RhY2ssIGkpOworfQorCitzdGF0aWMgaW50Citub2xvYWRfc2V0aXRlbShVbnBpY2tsZXJvYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCBzZWxmLT5zdGFjay0+bGVuZ3RoIC0gMik7Cit9CisKK3N0YXRpYyBpbnQKK25vbG9hZF9zZXRpdGVtcyhVbnBpY2tsZXJvYmplY3QgKnNlbGYpCit7CisgICAgaW50IGk7CisgICAgaWYgKChpID0gbWFya2VyKHNlbGYpKSA8IDApIHJldHVybiAtMTsKKyAgICByZXR1cm4gUGRhdGFfY2xlYXIoc2VsZi0+c3RhY2ssIGkpOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgogbm9sb2FkKFVucGlja2xlcm9iamVjdCAqc2VsZikKQEAgLTUxMjksMTIgKzUyNDQsMTIgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGNhc2UgQVBQRU5EOgotICAgICAgICAgICAgaWYgKGxvYWRfYXBwZW5kKHNlbGYpIDwgMCkKKyAgICAgICAgICAgIGlmIChub2xvYWRfYXBwZW5kKHNlbGYpIDwgMCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGNhc2UgQVBQRU5EUzoKLSAgICAgICAgICAgIGlmIChsb2FkX2FwcGVuZHMoc2VsZikgPCAwKQorICAgICAgICAgICAgaWYgKG5vbG9hZF9hcHBlbmRzKHNlbGYpIDwgMCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC01MjA5LDEyICs1MzI0LDEyIEBACiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBjYXNlIFNFVElURU06Ci0gICAgICAgICAgICBpZiAobG9hZF9zZXRpdGVtKHNlbGYpIDwgMCkKKyAgICAgICAgICAgIGlmIChub2xvYWRfc2V0aXRlbShzZWxmKSA8IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBjYXNlIFNFVElURU1TOgotICAgICAgICAgICAgaWYgKGxvYWRfc2V0aXRlbXMoc2VsZikgPCAwKQorICAgICAgICAgICAgaWYgKG5vbG9hZF9zZXRpdGVtcyhzZWxmKSA8IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jU3RyaW5nSU8uYyBiL01vZHVsZXMvY1N0cmluZ0lPLmMKaW5kZXggN2UzMzAzMy4uYmU5YWQ1MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jU3RyaW5nSU8uYworKysgYi9Nb2R1bGVzL2NTdHJpbmdJTy5jCkBAIC0zMzksMTIgKzMzOSwxMiBAQAogCiAvKiBSZWFkLXdyaXRlIG9iamVjdCBtZXRob2RzICovCiAKLVB5RG9jX1NUUlZBUihPX3NlZWtfX2RvY19fLAorUHlEb2NfU1RSVkFSKElPX3NlZWtfX2RvY19fLAogInNlZWsocG9zaXRpb24pICAgICAgIC0tIHNldCB0aGUgY3VycmVudCBwb3NpdGlvblxuIgogInNlZWsocG9zaXRpb24sIG1vZGUpIC0tIG1vZGUgMDogYWJzb2x1dGU7IDE6IHJlbGF0aXZlOyAyOiByZWxhdGl2ZSB0byBFT0YiKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLU9fc2VlayhPb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgeworSU9fc2VlayhJb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgewogICAgIFB5X3NzaXplX3QgcG9zaXRpb247CiAgICAgaW50IG1vZGUgPSAwOwogCkBAIC0zNTksMjUgKzM1OSwxMCBAQAogICAgICAgICBwb3NpdGlvbiArPSBzZWxmLT5wb3M7CiAgICAgfQogCi0gICAgaWYgKHBvc2l0aW9uID4gc2VsZi0+YnVmX3NpemUpIHsKLSAgICAgICAgICAgICAgY2hhciAqbmV3YnVmOwotICAgICAgICAgICAgICBzZWxmLT5idWZfc2l6ZSo9MjsKLSAgICAgICAgICAgICAgaWYgKHNlbGYtPmJ1Zl9zaXplIDw9IHBvc2l0aW9uKSBzZWxmLT5idWZfc2l6ZT1wb3NpdGlvbisxOwotICAgICAgICAgICAgICBuZXdidWYgPSAoY2hhciopIHJlYWxsb2Moc2VsZi0+YnVmLHNlbGYtPmJ1Zl9zaXplKTsKLSAgICAgICAgICAgICAgaWYgKCFuZXdidWYpIHsKLSAgICAgICAgICAgICAgICAgIGZyZWUoc2VsZi0+YnVmKTsKLSAgICAgICAgICAgICAgICAgIHNlbGYtPmJ1ZiA9IDA7Ci0gICAgICAgICAgICAgICAgICBzZWxmLT5idWZfc2l6ZT1zZWxmLT5wb3M9MDsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgc2VsZi0+YnVmID0gbmV3YnVmOwotICAgICAgfQotICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgMCkgcG9zaXRpb249MDsKKyAgICBpZiAocG9zaXRpb24gPCAwKSBwb3NpdGlvbj0wOwogCiAgICAgc2VsZi0+cG9zPXBvc2l0aW9uOwogCi0gICAgd2hpbGUgKC0tcG9zaXRpb24gPj0gc2VsZi0+c3RyaW5nX3NpemUpIHNlbGYtPmJ1Zltwb3NpdGlvbl09MDsKLQogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTQxNCw2ICszOTksMTkgQEAKICAgICAgICAgb3NlbGYtPmJ1ZiA9IG5ld2J1ZjsKICAgICAgIH0KIAorICAgIGlmIChvc2VsZi0+c3RyaW5nX3NpemUgPCBvc2VsZi0+cG9zKSB7CisgICAgICAgIC8qIEluIGNhc2Ugb2Ygb3ZlcnNlZWssIHBhZCB3aXRoIG51bGwgYnl0ZXMgdGhlIGJ1ZmZlciByZWdpb24gYmV0d2VlbgorICAgICAgICAgICB0aGUgZW5kIG9mIHN0cmVhbSBhbmQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisKKyAgICAgICAgICAwICAgbG8gICAgICBzdHJpbmdfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpCisgICAgICAgICAgfCAgIHw8LS0tdXNlZC0tLT58PC0tLS0tLS0tLS1hdmFpbGFibGUtLS0tLS0tLS0tLT58CisgICAgICAgICAgfCAgIHwgICAgICAgICAgICA8LS10byBwYWQtLT58PC0tLXRvIHdyaXRlLS0tPiAgICB8CisgICAgICAgICAgMCAgIGJ1ZiAgICAgICAgICAgICAgICAgICBwb3NpdGlvbgorICAgICAgICAqLworICAgICAgICBtZW1zZXQob3NlbGYtPmJ1ZiArIG9zZWxmLT5zdHJpbmdfc2l6ZSwgJ1wwJywKKyAgICAgICAgICAgICAgIChvc2VsZi0+cG9zIC0gb3NlbGYtPnN0cmluZ19zaXplKSAqIHNpemVvZihjaGFyKSk7CisgICAgfQorCiAgICAgbWVtY3B5KG9zZWxmLT5idWYrb3NlbGYtPnBvcyxjLGwpOwogCiAgICAgYXNzZXJ0KG9zZWxmLT5wb3MgKyBsIDwgSU5UX01BWCk7CkBAIC00OTcsMTIgKzQ5NSwxMiBAQAogICB7InJlYWRsaW5lIiwgIChQeUNGdW5jdGlvbilJT19yZWFkbGluZSwgTUVUSF9WQVJBUkdTLCBJT19yZWFkbGluZV9fZG9jX199LAogICB7InJlYWRsaW5lcyIsIChQeUNGdW5jdGlvbilJT19yZWFkbGluZXMsTUVUSF9WQVJBUkdTLCBJT19yZWFkbGluZXNfX2RvY19ffSwKICAgeyJyZXNldCIsICAgICAoUHlDRnVuY3Rpb24pSU9fcmVzZXQsICAgIE1FVEhfTk9BUkdTLCAgSU9fcmVzZXRfX2RvY19ffSwKKyAgeyJzZWVrIiwgICAgICAoUHlDRnVuY3Rpb24pSU9fc2VlaywgICAgIE1FVEhfVkFSQVJHUywgSU9fc2Vla19fZG9jX199LAogICB7InRlbGwiLCAgICAgIChQeUNGdW5jdGlvbilJT190ZWxsLCAgICAgTUVUSF9OT0FSR1MsICBJT190ZWxsX19kb2NfX30sCiAgIHsidHJ1bmNhdGUiLCAgKFB5Q0Z1bmN0aW9uKUlPX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1MsIElPX3RydW5jYXRlX19kb2NfX30sCiAKICAgLyogUmVhZC13cml0ZSBTdHJpbmdJTyBzcGVjaWZpYyAgbWV0aG9kczogKi8KICAgeyJjbG9zZSIsICAgICAgKFB5Q0Z1bmN0aW9uKU9fY2xvc2UsICAgICAgTUVUSF9OT0FSR1MsICBPX2Nsb3NlX19kb2NfX30sCi0gIHsic2VlayIsICAgICAgIChQeUNGdW5jdGlvbilPX3NlZWssICAgICAgIE1FVEhfVkFSQVJHUywgT19zZWVrX19kb2NfX30sCiAgIHsid3JpdGUiLCAgICAgIChQeUNGdW5jdGlvbilPX3dyaXRlLCAgICAgIE1FVEhfVkFSQVJHUywgT193cml0ZV9fZG9jX199LAogICB7IndyaXRlbGluZXMiLCAoUHlDRnVuY3Rpb24pT193cml0ZWxpbmVzLCBNRVRIX08sICAgICAgIE9fd3JpdGVsaW5lc19fZG9jX199LAogICB7TlVMTCwgICAgICAgICBOVUxMfSAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtNTk1LDI2ICs1OTMsNiBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotSV9zZWVrKElvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSB7Ci0gICAgUHlfc3NpemVfdCBwb3NpdGlvbjsKLSAgICBpbnQgbW9kZSA9IDA7Ci0KLSAgICBpZiAoIUlPX19vcGVuY2hlY2soSU9PT0JKRUNUKHNlbGYpKSkgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJufGk6c2VlayIsICZwb3NpdGlvbiwgJm1vZGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChtb2RlID09IDIpIHBvc2l0aW9uICs9IHNlbGYtPnN0cmluZ19zaXplOwotICAgIGVsc2UgaWYgKG1vZGUgPT0gMSkgcG9zaXRpb24gKz0gc2VsZi0+cG9zOwotCi0gICAgaWYgKHBvc2l0aW9uIDwgMCkgcG9zaXRpb249MDsKLQotICAgIHNlbGYtPnBvcz1wb3NpdGlvbjsKLQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKLX0KLQogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBJX21ldGhvZHNbXSA9IHsKICAgLyogQ29tbW9uIG1ldGhvZHM6ICovCiAgIHsiZmx1c2giLCAgICAgKFB5Q0Z1bmN0aW9uKUlPX2ZsdXNoLCAgICBNRVRIX05PQVJHUywgIElPX2ZsdXNoX19kb2NfX30sCkBAIC02MjQsMTIgKzYwMiwxMiBAQAogICB7InJlYWRsaW5lIiwgIChQeUNGdW5jdGlvbilJT19yZWFkbGluZSwgTUVUSF9WQVJBUkdTLCBJT19yZWFkbGluZV9fZG9jX199LAogICB7InJlYWRsaW5lcyIsIChQeUNGdW5jdGlvbilJT19yZWFkbGluZXMsTUVUSF9WQVJBUkdTLCBJT19yZWFkbGluZXNfX2RvY19ffSwKICAgeyJyZXNldCIsICAgICAoUHlDRnVuY3Rpb24pSU9fcmVzZXQsICAgIE1FVEhfTk9BUkdTLCAgSU9fcmVzZXRfX2RvY19ffSwKKyAgeyJzZWVrIiwgICAgICAoUHlDRnVuY3Rpb24pSU9fc2VlaywgICAgIE1FVEhfVkFSQVJHUywgSU9fc2Vla19fZG9jX199LAogICB7InRlbGwiLCAgICAgIChQeUNGdW5jdGlvbilJT190ZWxsLCAgICAgTUVUSF9OT0FSR1MsICBJT190ZWxsX19kb2NfX30sCiAgIHsidHJ1bmNhdGUiLCAgKFB5Q0Z1bmN0aW9uKUlPX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1MsIElPX3RydW5jYXRlX19kb2NfX30sCiAKICAgLyogUmVhZC1vbmx5IFN0cmluZ0lPIHNwZWNpZmljICBtZXRob2RzOiAqLwogICB7ImNsb3NlIiwgICAgIChQeUNGdW5jdGlvbilJX2Nsb3NlLCAgICBNRVRIX05PQVJHUywgIE9fY2xvc2VfX2RvY19ffSwKLSAgeyJzZWVrIiwgICAgICAoUHlDRnVuY3Rpb24pSV9zZWVrLCAgICAgTUVUSF9WQVJBUkdTLCBPX3NlZWtfX2RvY19ffSwKICAge05VTEwsICAgICAgICBOVUxMfQogfTsKIApAQCAtNzYxLDggKzczOSw4IEBACiAgIFB5X1RZUEUoJk90eXBlKT0mUHlUeXBlX1R5cGU7CiAgIGlmIChQeVR5cGVfUmVhZHkoJk90eXBlKSA8IDApIHJldHVybjsKICAgaWYgKFB5VHlwZV9SZWFkeSgmSXR5cGUpIDwgMCkgcmV0dXJuOwotICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCJjU3RyaW5nSU9fQ0FQSSIsCi0gICAgICAgICAgICAgICAgICAgICAgIHYgPSBQeUNPYmplY3RfRnJvbVZvaWRQdHIoJkNBUEksTlVMTCkpOworICB2ID0gUHlDYXBzdWxlX05ldygmQ0FQSSwgUHljU3RyaW5nSU9fQ0FQU1VMRV9OQU1FLCBOVUxMKTsKKyAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwiY1N0cmluZ0lPX0NBUEkiLCB2KTsKICAgUHlfWERFQ1JFRih2KTsKIAogICAvKiBFeHBvcnQgVHlwZXMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oIGIvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKaW5kZXggZmFlMGM2Mi4uN2U4MzkwYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKQEAgLTI4Miw3ICsyODIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBjb2RlY29iaiA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cigodm9pZCAqKWNvZGVjLCBOVUxMKTsKKyAgICBjb2RlY29iaiA9IFB5Q2Fwc3VsZV9OZXcoKHZvaWQgKiljb2RlYywgUHlNdWx0aWJ5dGVDb2RlY19DQVBTVUxFX05BTUUsIE5VTEwpOwogICAgIGlmIChjb2RlY29iaiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzA3LDcgKzMwNyw3IEBACiAgICAgICAgIGludCByOwogICAgICAgICBzdHJjcHkobWhuYW1lICsgc2l6ZW9mKCJfX21hcF8iKSAtIDEsIGgtPmNoYXJzZXQpOwogICAgICAgICByID0gUHlNb2R1bGVfQWRkT2JqZWN0KG1vZHVsZSwgbWhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKCh2b2lkICopaCwgTlVMTCkpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlDYXBzdWxlX05ldygodm9pZCAqKWgsIFB5TXVsdGlieXRlQ29kZWNfQ0FQU1VMRV9OQU1FLCBOVUxMKSk7CiAgICAgICAgIGlmIChyID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTM2MiwxNCArMzYyLDE0IEBACiAgICAgbyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobW9kLCAoY2hhciopc3ltYm9sKTsKICAgICBpZiAobyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBlbHNlIGlmICghUHlDT2JqZWN0X0NoZWNrKG8pKSB7CisgICAgZWxzZSBpZiAoIVB5Q2Fwc3VsZV9Jc1ZhbGlkKG8sIFB5TXVsdGlieXRlQ29kZWNfQ0FQU1VMRV9OQU1FKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJtYXAgZGF0YSBtdXN0IGJlIGEgQ09iamVjdC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJtYXAgZGF0YSBtdXN0IGJlIGEgQ2Fwc3VsZS4iKTsKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBzdHJ1Y3QgZGJjc19tYXAgKm1hcDsKLSAgICAgICAgbWFwID0gUHlDT2JqZWN0X0FzVm9pZFB0cihvKTsKKyAgICAgICAgbWFwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIobywgUHlNdWx0aWJ5dGVDb2RlY19DQVBTVUxFX05BTUUpOwogICAgICAgICBpZiAoZW5jbWFwICE9IE5VTEwpCiAgICAgICAgICAgICAqZW5jbWFwID0gbWFwLT5lbmNtYXA7CiAgICAgICAgIGlmIChkZWNtYXAgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jCmluZGV4IGE4M2Y3M2IuLjFmMzE1OTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYwpAQCAtMTc3NCwxMiArMTc3NCwxMiBAQAogICAgIE11bHRpYnl0ZUNvZGVjT2JqZWN0ICpzZWxmOwogICAgIE11bHRpYnl0ZUNvZGVjICpjb2RlYzsKIAotICAgIGlmICghUHlDT2JqZWN0X0NoZWNrKGFyZykpIHsKKyAgICBpZiAoIVB5Q2Fwc3VsZV9Jc1ZhbGlkKGFyZywgUHlNdWx0aWJ5dGVDb2RlY19DQVBTVUxFX05BTUUpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYXJndW1lbnQgdHlwZSBpbnZhbGlkIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGNvZGVjID0gUHlDT2JqZWN0X0FzVm9pZFB0cihhcmcpOworICAgIGNvZGVjID0gUHlDYXBzdWxlX0dldFBvaW50ZXIoYXJnLCBQeU11bHRpYnl0ZUNvZGVjX0NBUFNVTEVfTkFNRSk7CiAgICAgaWYgKGNvZGVjLT5jb2RlY2luaXQgIT0gTlVMTCAmJiBjb2RlYy0+Y29kZWNpbml0KGNvZGVjLT5jb25maWcpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaAppbmRleCBmMjBjMDdkLi4xYjZlZjU1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmgKQEAgLTEzMiw2ICsxMzIsOSBAQAogI2RlZmluZSBNQkVOQ19GTFVTSCAgICAgICAgICAgICAweDAwMDEgLyogZW5jb2RlIGFsbCBjaGFyYWN0ZXJzIGVuY29kYWJsZSAqLwogI2RlZmluZSBNQkVOQ19NQVggICAgICAgICAgICAgICBNQkVOQ19GTFVTSAogCisjZGVmaW5lIFB5TXVsdGlieXRlQ29kZWNfQ0FQU1VMRV9OQU1FICJtdWx0aWJ5dGVjb2RlYy5fX21hcF8qIgorCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NtYXRobW9kdWxlLmMgYi9Nb2R1bGVzL2NtYXRobW9kdWxlLmMKaW5kZXggZWVjNjFjMC4uODI1ZjdhZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jbWF0aG1vZHVsZS5jCisrKyBiL01vZHVsZXMvY21hdGhtb2R1bGUuYwpAQCAtMyw2ICszLDcgQEAKIC8qIG11Y2ggY29kZSBib3Jyb3dlZCBmcm9tIG1hdGhtb2R1bGUuYyAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAiX21hdGguaCIKIC8qIHdlIG5lZWQgREJMX01BWCwgREJMX01JTiwgREJMX0VQU0lMT04sIERCTF9NQU5UX0RJRyBhbmQgRkxUX1JBRElYIGZyb20KICAgIGZsb2F0LmguICBXZSBhc3N1bWUgdGhhdCBGTFRfUkFESVggaXMgZWl0aGVyIDIgb3IgMTYuICovCiAjaW5jbHVkZSA8ZmxvYXQuaD4KQEAgLTE0OSw3ICsxNTAsNyBAQAogICAgICAgICBzMi5pbWFnID0gei5pbWFnOwogICAgICAgICBzMiA9IGNfc3FydChzMik7CiAgICAgICAgIHIucmVhbCA9IDIuKmF0YW4yKHMxLnJlYWwsIHMyLnJlYWwpOwotICAgICAgICByLmltYWcgPSBhc2luaChzMi5yZWFsKnMxLmltYWcgLSBzMi5pbWFnKnMxLnJlYWwpOworICAgICAgICByLmltYWcgPSBtX2FzaW5oKHMyLnJlYWwqczEuaW1hZyAtIHMyLmltYWcqczEucmVhbCk7CiAgICAgfQogICAgIGVycm5vID0gMDsKICAgICByZXR1cm4gcjsKQEAgLTE4MSw3ICsxODIsNyBAQAogICAgICAgICBzMi5yZWFsID0gei5yZWFsICsgMS47CiAgICAgICAgIHMyLmltYWcgPSB6LmltYWc7CiAgICAgICAgIHMyID0gY19zcXJ0KHMyKTsKLSAgICAgICAgci5yZWFsID0gYXNpbmgoczEucmVhbCpzMi5yZWFsICsgczEuaW1hZypzMi5pbWFnKTsKKyAgICAgICAgci5yZWFsID0gbV9hc2luaChzMS5yZWFsKnMyLnJlYWwgKyBzMS5pbWFnKnMyLmltYWcpOwogICAgICAgICByLmltYWcgPSAyLiphdGFuMihzMS5pbWFnLCBzMi5yZWFsKTsKICAgICB9CiAgICAgZXJybm8gPSAwOwpAQCAtMjM4LDcgKzIzOSw3IEBACiAgICAgICAgIHMyLnJlYWwgPSAxLi16LmltYWc7CiAgICAgICAgIHMyLmltYWcgPSB6LnJlYWw7CiAgICAgICAgIHMyID0gY19zcXJ0KHMyKTsKLSAgICAgICAgci5yZWFsID0gYXNpbmgoczEucmVhbCpzMi5pbWFnLXMyLnJlYWwqczEuaW1hZyk7CisgICAgICAgIHIucmVhbCA9IG1fYXNpbmgoczEucmVhbCpzMi5pbWFnLXMyLnJlYWwqczEuaW1hZyk7CiAgICAgICAgIHIuaW1hZyA9IGF0YW4yKHouaW1hZywgczEucmVhbCpzMi5yZWFsLXMxLmltYWcqczIuaW1hZyk7CiAgICAgfQogICAgIGVycm5vID0gMDsKQEAgLTM0Miw3ICszNDMsNyBAQAogICAgICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgci5yZWFsID0gbG9nMXAoNC4qei5yZWFsLygoMS16LnJlYWwpKigxLXoucmVhbCkgKyBheSpheSkpLzQuOworICAgICAgICByLnJlYWwgPSBtX2xvZzFwKDQuKnoucmVhbC8oKDEtei5yZWFsKSooMS16LnJlYWwpICsgYXkqYXkpKS80LjsKICAgICAgICAgci5pbWFnID0gLWF0YW4yKC0yLip6LmltYWcsICgxLXoucmVhbCkqKDErei5yZWFsKSAtIGF5KmF5KS8yLjsKICAgICAgICAgZXJybm8gPSAwOwogICAgIH0KQEAgLTU1Miw3ICs1NTMsNyBAQAogICAgICAgICBpZiAoMC43MSA8PSBoICYmIGggPD0gMS43MykgewogICAgICAgICAgICAgYW0gPSBheCA+IGF5ID8gYXggOiBheTsgIC8qIG1heChheCwgYXkpICovCiAgICAgICAgICAgICBhbiA9IGF4ID4gYXkgPyBheSA6IGF4OyAgLyogbWluKGF4LCBheSkgKi8KLSAgICAgICAgICAgIHIucmVhbCA9IGxvZzFwKChhbS0xKSooYW0rMSkrYW4qYW4pLzIuOworICAgICAgICAgICAgci5yZWFsID0gbV9sb2cxcCgoYW0tMSkqKGFtKzEpK2FuKmFuKS8yLjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHIucmVhbCA9IGxvZyhoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9kYXRldGltZW1vZHVsZS5jIGIvTW9kdWxlcy9kYXRldGltZW1vZHVsZS5jCmluZGV4IDk4ODQ4YzEuLmY5MDcwOTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZGF0ZXRpbWVtb2R1bGUuYworKysgYi9Nb2R1bGVzL2RhdGV0aW1lbW9kdWxlLmMKQEAgLTE1MjMsNyArMTUyMyw3IEBACiAgICAgICAgIGdvdG8gRG9uZTsKICAgICBQeV9ERUNSRUYoeDEpOwogICAgIFB5X0RFQ1JFRih4Mik7Ci0gICAgeDEgPSB4MiA9IE5VTEw7CisgICAgeDIgPSBOVUxMOwogCiAgICAgLyogeDMgaGFzIGRheXMrc2Vjb25kcyBpbiBzZWNvbmRzICovCiAgICAgeDEgPSBQeU51bWJlcl9NdWx0aXBseSh4MywgdXNfcGVyX3NlY29uZCk7ICAgICAgICAgIC8qIHVzICovCkBAIC0yMDk3LDYgKzIwOTcsMzAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK2RlbHRhX3RvdGFsX3NlY29uZHMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnRvdGFsX3NlY29uZHM7CisgICAgUHlPYmplY3QgKnRvdGFsX21pY3Jvc2Vjb25kczsKKyAgICBQeU9iamVjdCAqb25lX21pbGxpb247CisKKyAgICB0b3RhbF9taWNyb3NlY29uZHMgPSBkZWx0YV90b19taWNyb3NlY29uZHMoKFB5RGF0ZVRpbWVfRGVsdGEgKilzZWxmKTsKKyAgICBpZiAodG90YWxfbWljcm9zZWNvbmRzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb25lX21pbGxpb24gPSBQeUxvbmdfRnJvbUxvbmcoMTAwMDAwMEwpOworICAgIGlmIChvbmVfbWlsbGlvbiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRih0b3RhbF9taWNyb3NlY29uZHMpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0b3RhbF9zZWNvbmRzID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh0b3RhbF9taWNyb3NlY29uZHMsIG9uZV9taWxsaW9uKTsKKworICAgIFB5X0RFQ1JFRih0b3RhbF9taWNyb3NlY29uZHMpOworICAgIFB5X0RFQ1JFRihvbmVfbWlsbGlvbik7CisgICAgcmV0dXJuIHRvdGFsX3NlY29uZHM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBkZWx0YV9yZWR1Y2UoUHlEYXRlVGltZV9EZWx0YSogc2VsZikKIHsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiT04iLCBQeV9UWVBFKHNlbGYpLCBkZWx0YV9nZXRzdGF0ZShzZWxmKSk7CkBAIC0yMTE4LDcgKzIxNDIsMTAgQEAKIH07CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBkZWx0YV9tZXRob2RzW10gPSB7Ci0gICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKWRlbHRhX3JlZHVjZSwgICAgIE1FVEhfTk9BUkdTLAorICAgIHsidG90YWxfc2Vjb25kcyIsIChQeUNGdW5jdGlvbilkZWx0YV90b3RhbF9zZWNvbmRzLCBNRVRIX05PQVJHUywKKyAgICAgUHlEb2NfU1RSKCJUb3RhbCBzZWNvbmRzIGluIHRoZSBkdXJhdGlvbi4iKX0sCisKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pZGVsdGFfcmVkdWNlLCBNRVRIX05PQVJHUywKICAgICAgUHlEb2NfU1RSKCJfX3JlZHVjZV9fKCkgLT4gKGNscywgc3RhdGUpIil9LAogCiAgICAge05VTEwsICAgICAgTlVMTH0sCkBAIC0zOTQ0LDcgKzM5NzEsNyBAQAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGdvb2RfdGltZXR1cGxlID0gMDsKICAgICAgICAgICAgIC8qIGZvbGxvdyB0aGF0IHVwIHdpdGggYSBsaXR0bGUgZG9zZSBvZiBtaWNyb3NlY29uZHMgKi8KLSAgICAgICAgICAgIGlmIChQeUludF9DaGVjayhmcmFjKSkKKyAgICAgICAgICAgIGlmIChnb29kX3RpbWV0dXBsZSAmJiBQeUludF9DaGVjayhmcmFjKSkKICAgICAgICAgICAgICAgICBpYVs2XSA9IFB5SW50X0FzTG9uZyhmcmFjKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBnb29kX3RpbWV0dXBsZSA9IDA7CkBAIC00ODQ4LDggKzQ4NzUsNyBAQAogICAgIFB5X0lOQ1JFRigmUHlEYXRlVGltZV9UWkluZm9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInR6aW5mbyIsIChQeU9iamVjdCAqKSAmUHlEYXRlVGltZV9UWkluZm9UeXBlKTsKIAotICAgIHggPSBQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjKCZDQVBJLCAodm9pZCopIERBVEVUSU1FX0FQSV9NQUdJQywKLSAgICAgICAgTlVMTCk7CisgICAgeCA9IFB5Q2Fwc3VsZV9OZXcoJkNBUEksIFB5RGF0ZVRpbWVfQ0FQU1VMRV9OQU1FLCBOVUxMKTsKICAgICBpZiAoeCA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJkYXRldGltZV9DQVBJIiwgeCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2V4cGF0L0NPUFlJTkcgYi9Nb2R1bGVzL2V4cGF0L0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5N2IwMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvZXhwYXQvQ09QWUlORwpAQCAtMCwwICsxLDIxIEBACitDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIwMDAgVGhhaSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50ZXIgTHRkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIENsYXJrIENvb3BlcgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKK2luIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKK0NMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMgYi9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKaW5kZXggNjNkMDZkMy4uOTk3ODY3YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9mY250bG1vZHVsZS5jCisrKyBiL01vZHVsZXMvZmNudGxtb2R1bGUuYwpAQCAtODIsMTAgKzgyLDEwIEBACiBQZXJmb3JtIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIG9uIGZpbGUgZGVzY3JpcHRvciBmZC4gIFRoZSBvcGVyYXRpb25cblwKIGlzIGRlZmluZWQgYnkgb3AgYW5kIGlzIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW50LiAgVGhlc2UgY29uc3RhbnRzIGFyZVxuXAogYXZhaWxhYmxlIGZyb20gdGhlIGZjbnRsIG1vZHVsZS4gIFRoZSBhcmd1bWVudCBhcmcgaXMgb3B0aW9uYWwsIGFuZFxuXAotZGVmYXVsdHMgdG8gMDsgaXQgbWF5IGJlIGFuIGludCBvciBhIHN0cmluZy4gSWYgYXJnIGlzIGdpdmVuIGFzIGEgc3RyaW5nLFxuXAorZGVmYXVsdHMgdG8gMDsgaXQgbWF5IGJlIGFuIGludCBvciBhIHN0cmluZy4gIElmIGFyZyBpcyBnaXZlbiBhcyBhIHN0cmluZyxcblwKIHRoZSByZXR1cm4gdmFsdWUgb2YgZmNudGwgaXMgYSBzdHJpbmcgb2YgdGhhdCBsZW5ndGgsIGNvbnRhaW5pbmcgdGhlXG5cCi1yZXN1bHRpbmcgdmFsdWUgcHV0IGluIHRoZSBhcmcgYnVmZmVyIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLlRoZSBsZW5ndGhcblwKLW9mIHRoZSBhcmcgc3RyaW5nIGlzIG5vdCBhbGxvd2VkIHRvIGV4Y2VlZCAxMDI0IGJ5dGVzLiBJZiB0aGUgYXJnIGdpdmVuXG5cCityZXN1bHRpbmcgdmFsdWUgcHV0IGluIHRoZSBhcmcgYnVmZmVyIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIGxlbmd0aFxuXAorb2YgdGhlIGFyZyBzdHJpbmcgaXMgbm90IGFsbG93ZWQgdG8gZXhjZWVkIDEwMjQgYnl0ZXMuICBJZiB0aGUgYXJnIGdpdmVuXG5cCiBpcyBhbiBpbnRlZ2VyIG9yIGlmIG5vbmUgaXMgc3BlY2lmaWVkLCB0aGUgcmVzdWx0IHZhbHVlIGlzIGFuIGludGVnZXJcblwKIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmNudGwgY2FsbCBpbiB0aGUgQyBjb2RlLiIpOwogCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXQgPSBpb2N0bChmZCwgY29kZSwgYXJnKTsKICAgICAgICAgfQotICAgICAgICBpZiAobXV0YXRlX2FyZyAmJiAobGVuIDwgSU9DVExfQlVGU1opKSB7CisgICAgICAgIGlmIChtdXRhdGVfYXJnICYmIChsZW4gPD0gSU9DVExfQlVGU1opKSB7CiAgICAgICAgICAgICBtZW1jcHkoc3RyLCBidWYsIGxlbik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldCA8IDApIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvZnV0dXJlX2J1aWx0aW5zLmMgYi9Nb2R1bGVzL2Z1dHVyZV9idWlsdGlucy5jCmluZGV4IDFhYWUyY2MuLmIyYTNlZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZnV0dXJlX2J1aWx0aW5zLmMKKysrIGIvTW9kdWxlcy9mdXR1cmVfYnVpbHRpbnMuYwpAQCAtMTQsMTIgKzE0LDIwIEBACiBcblwKIEZ1bmN0aW9uczpcblwKIFxuXAotaGV4KGFyZykgLS0gUmV0dXJucyB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlclxuXAotb2N0KGFyZykgLS0gUmV0dXJucyB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlclxuXAorYXNjaWkoYXJnKSAtLSBSZXR1cm5zIHRoZSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC5cblwKK2ZpbHRlcihwcmVkLCBpdGVyYWJsZSkgLS0gUmV0dXJucyBhbiBpdGVyYXRvciB5aWVsZGluZyB0aG9zZSBpdGVtcyBvZiBcblwKKyAgICAgICBpdGVyYWJsZSBmb3Igd2hpY2ggcHJlZChpdGVtKSBpcyB0cnVlLlxuXAoraGV4KGFyZykgLS0gUmV0dXJucyB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci5cblwKK21hcChmdW5jLCAqaXRlcmFibGVzKSAtLSBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRoYXQgY29tcHV0ZXMgdGhlIGZ1bmN0aW9uIFxuXAorICAgIHVzaW5nIGFyZ3VtZW50cyBmcm9tIGVhY2ggb2YgdGhlIGl0ZXJhYmxlcy5cblwKK29jdChhcmcpIC0tIFJldHVybnMgdGhlIG9jdGFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuXG5cCit6aXAoaXRlcjEgWyxpdGVyMiBbLi4uXV0pIC0tIFJldHVybnMgYSB6aXAgb2JqZWN0IHdob3NlIC5uZXh0KCkgbWV0aG9kIFxuXAorICAgIHJldHVybnMgYSB0dXBsZSB3aGVyZSB0aGUgaS10aCBlbGVtZW50IGNvbWVzIGZyb20gdGhlIGktdGggaXRlcmFibGUgXG5cCisgICAgYXJndW1lbnQuXG5cCiBcblwKIFRoZSB0eXBpY2FsIHVzYWdlIG9mIHRoaXMgbW9kdWxlIGlzIHRvIHJlcGxhY2UgZXhpc3RpbmcgYnVpbHRpbnMgaW4gYVxuXAogbW9kdWxlJ3MgbmFtZXNwYWNlOlxuIFxuXAotZnJvbSBmdXR1cmVfYnVpbHRpbnMgaW1wb3J0IGhleCwgb2N0XG4iKTsKK2Zyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCBhc2NpaSwgZmlsdGVyLCBtYXAsIGhleCwgb2N0LCB6aXBcbiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9oZXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp2KQpAQCAtODUsMTEgKzkzLDEyIEBACiAgICAgaWYgKGl0ZXJ0b29scyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKKyAgICAvKiBJZiBhbnl0aGluZyBpbiB0aGUgZm9sbG93aW5nIGxvb3AgZmFpbHMsIHdlIGZhbGwgdGhyb3VnaC4gKi8KICAgICBmb3IgKGN1cl9mdW5jID0gaXRfZnVuY3M7ICpjdXJfZnVuYzsgKytjdXJfZnVuYyl7CiAgICAgICAgIGl0ZXJfZnVuYyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoaXRlcnRvb2xzLCAqY3VyX2Z1bmMpOwotICAgICAgICBpZiAoaXRlcl9mdW5jID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAqY3VyX2Z1bmMrMSwgaXRlcl9mdW5jKTsKKyAgICAgICAgaWYgKGl0ZXJfZnVuYyA9PSBOVUxMIHx8CisgICAgICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgKmN1cl9mdW5jKzEsIGl0ZXJfZnVuYykgPCAwKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIFB5X0RFQ1JFRihpdGVydG9vbHMpOwogICAgIC8qIGFueSBvdGhlciBpbml0aWFsaXphdGlvbiBuZWVkZWQgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2Ntb2R1bGUuYyBiL01vZHVsZXMvZ2Ntb2R1bGUuYwppbmRleCAzY2NiYTU1Li4zODRjNDdkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2djbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9nY21vZHVsZS5jCkBAIC02Myw2ICs2Myw1NSBAQAogLyogUHl0aG9uIHN0cmluZyB1c2VkIHRvIGxvb2sgZm9yIF9fZGVsX18gYXR0cmlidXRlLiAqLwogc3RhdGljIFB5T2JqZWN0ICpkZWxzdHIgPSBOVUxMOwogCisvKiBUaGlzIGlzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyB3aG8gc3Vydml2ZWQgdGhlIGxhc3QgZnVsbCBjb2xsZWN0aW9uLiBJdAorICAgYXBwcm94aW1hdGVzIHRoZSBudW1iZXIgb2YgbG9uZyBsaXZlZCBvYmplY3RzIHRyYWNrZWQgYnkgdGhlIEdDLgorCisgICAoYnkgImZ1bGwgY29sbGVjdGlvbiIsIHdlIG1lYW4gYSBjb2xsZWN0aW9uIG9mIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbikuCisqLworc3RhdGljIFB5X3NzaXplX3QgbG9uZ19saXZlZF90b3RhbCA9IDA7CisKKy8qIFRoaXMgaXMgdGhlIG51bWJlciBvZiBvYmplY3RzIHdobyBzdXJ2aXZlZCBhbGwgIm5vbi1mdWxsIiBjb2xsZWN0aW9ucywKKyAgIGFuZCBhcmUgYXdhaXRpbmcgdG8gdW5kZXJnbyBhIGZ1bGwgY29sbGVjdGlvbiBmb3IgdGhlIGZpcnN0IHRpbWUuCisKKyovCitzdGF0aWMgUHlfc3NpemVfdCBsb25nX2xpdmVkX3BlbmRpbmcgPSAwOworCisvKgorICAgTk9URTogYWJvdXQgdGhlIGNvdW50aW5nIG9mIGxvbmctbGl2ZWQgb2JqZWN0cy4KKworICAgVG8gbGltaXQgdGhlIGNvc3Qgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGVyZSBhcmUgdHdvIHN0cmF0ZWdpZXM7CisgICAgIC0gbWFrZSBlYWNoIGNvbGxlY3Rpb24gZmFzdGVyLCBlLmcuIGJ5IHNjYW5uaW5nIGZld2VyIG9iamVjdHMKKyAgICAgLSBkbyBsZXNzIGNvbGxlY3Rpb25zCisgICBUaGlzIGhldXJpc3RpYyBpcyBhYm91dCB0aGUgbGF0dGVyIHN0cmF0ZWd5LgorCisgICBJbiBhZGRpdGlvbiB0byB0aGUgdmFyaW91cyBjb25maWd1cmFibGUgdGhyZXNob2xkcywgd2Ugb25seSB0cmlnZ2VyIGEKKyAgIGZ1bGwgY29sbGVjdGlvbiBpZiB0aGUgcmF0aW8KKyAgICBsb25nX2xpdmVkX3BlbmRpbmcgLyBsb25nX2xpdmVkX3RvdGFsCisgICBpcyBhYm92ZSBhIGdpdmVuIHZhbHVlIChoYXJkd2lyZWQgdG8gMjUlKS4KKworICAgVGhlIHJlYXNvbiBpcyB0aGF0LCB3aGlsZSAibm9uLWZ1bGwiIGNvbGxlY3Rpb25zIChpLmUuLCBjb2xsZWN0aW9ucyBvZgorICAgdGhlIHlvdW5nIGFuZCBtaWRkbGUgZ2VuZXJhdGlvbnMpIHdpbGwgYWx3YXlzIGV4YW1pbmUgcm91Z2hseSB0aGUgc2FtZQorICAgbnVtYmVyIG9mIG9iamVjdHMgLS0gZGV0ZXJtaW5lZCBieSB0aGUgYWZvcmVtZW50aW9uZWQgdGhyZXNob2xkcyAtLSwKKyAgIHRoZSBjb3N0IG9mIGEgZnVsbCBjb2xsZWN0aW9uIGlzIHByb3BvcnRpb25hbCB0byB0aGUgdG90YWwgbnVtYmVyIG9mCisgICBsb25nLWxpdmVkIG9iamVjdHMsIHdoaWNoIGlzIHZpcnR1YWxseSB1bmJvdW5kZWQuCisKKyAgIEluZGVlZCwgaXQgaGFzIGJlZW4gcmVtYXJrZWQgdGhhdCBkb2luZyBhIGZ1bGwgY29sbGVjdGlvbiBldmVyeQorICAgPGNvbnN0YW50IG51bWJlcj4gb2Ygb2JqZWN0IGNyZWF0aW9ucyBlbnRhaWxzIGEgZHJhbWF0aWMgcGVyZm9ybWFuY2UKKyAgIGRlZ3JhZGF0aW9uIGluIHdvcmtsb2FkcyB3aGljaCBjb25zaXN0IGluIGNyZWF0aW5nIGFuZCBzdG9yaW5nIGxvdHMgb2YKKyAgIGxvbmctbGl2ZWQgb2JqZWN0cyAoZS5nLiBidWlsZGluZyBhIGxhcmdlIGxpc3Qgb2YgR0MtdHJhY2tlZCBvYmplY3RzIHdvdWxkCisgICBzaG93IHF1YWRyYXRpYyBwZXJmb3JtYW5jZSwgaW5zdGVhZCBvZiBsaW5lYXIgYXMgZXhwZWN0ZWQ6IHNlZSBpc3N1ZSAjNDA3NCkuCisKKyAgIFVzaW5nIHRoZSBhYm92ZSByYXRpbywgaW5zdGVhZCwgeWllbGRzIGFtb3J0aXplZCBsaW5lYXIgcGVyZm9ybWFuY2UgaW4KKyAgIHRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyAodGhlIGVmZmVjdCBvZiB3aGljaCBjYW4gYmUgc3VtbWFyaXplZAorICAgdGh1c2x5OiAiZWFjaCBmdWxsIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBtb3JlIGFuZCBtb3JlIGNvc3RseSBhcyB0aGUKKyAgIG51bWJlciBvZiBvYmplY3RzIGdyb3dzLCBidXQgd2UgZG8gZmV3ZXIgYW5kIGZld2VyIG9mIHRoZW0iKS4KKworICAgVGhpcyBoZXVyaXN0aWMgd2FzIHN1Z2dlc3RlZCBieSBNYXJ0aW4gdm9uIEzDtndpcyBvbiBweXRob24tZGV2IGluCisgICBKdW5lIDIwMDguIEhpcyBvcmlnaW5hbCBhbmFseXNpcyBhbmQgcHJvcG9zYWwgY2FuIGJlIGZvdW5kIGF0OgorICAgIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwOC1KdW5lLzA4MDU3OS5odG1sCisqLworCisKIC8qIHNldCBmb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uICovCiAjZGVmaW5lIERFQlVHX1NUQVRTICAgICAgICAgICAgICgxPDwwKSAvKiBwcmludCBjb2xsZWN0aW9uIHN0YXRpc3RpY3MgKi8KICNkZWZpbmUgREVCVUdfQ09MTEVDVEFCTEUgICAgICAgKDE8PDEpIC8qIHByaW50IGNvbGxlY3RhYmxlIG9iamVjdHMgKi8KQEAgLTM4NCw2ICs0MzMsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmlzaXRwcm9jKXZpc2l0X3JlYWNoYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKXlvdW5nKTsKICAgICAgICAgICAgIG5leHQgPSBnYy0+Z2MuZ2NfbmV4dDsKKyAgICAgICAgICAgIGlmIChQeVR1cGxlX0NoZWNrRXhhY3Qob3ApKSB7CisgICAgICAgICAgICAgICAgX1B5VHVwbGVfTWF5YmVVbnRyYWNrKG9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKFB5RGljdF9DaGVja0V4YWN0KG9wKSkgeworICAgICAgICAgICAgICAgIF9QeURpY3RfTWF5YmVVbnRyYWNrKG9wKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qIFRoaXMgKm1heSogYmUgdW5yZWFjaGFibGUuICBUbyBtYWtlIHByb2dyZXNzLApAQCAtNzM1LDcgKzc5MCw5IEBACiAgICAgKHZvaWQpUHlGcmFtZV9DbGVhckZyZWVMaXN0KCk7CiAgICAgKHZvaWQpUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdCgpOwogICAgICh2b2lkKVB5VHVwbGVfQ2xlYXJGcmVlTGlzdCgpOworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICAodm9pZClQeVVuaWNvZGVfQ2xlYXJGcmVlTGlzdCgpOworI2VuZGlmCiAgICAgKHZvaWQpUHlJbnRfQ2xlYXJGcmVlTGlzdCgpOwogICAgICh2b2lkKVB5RmxvYXRfQ2xlYXJGcmVlTGlzdCgpOwogfQpAQCAtODI2LDggKzg4MywxNiBAQAogICAgIG1vdmVfdW5yZWFjaGFibGUoeW91bmcsICZ1bnJlYWNoYWJsZSk7CiAKICAgICAvKiBNb3ZlIHJlYWNoYWJsZSBvYmplY3RzIHRvIG5leHQgZ2VuZXJhdGlvbi4gKi8KLSAgICBpZiAoeW91bmcgIT0gb2xkKQorICAgIGlmICh5b3VuZyAhPSBvbGQpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRpb24gPT0gTlVNX0dFTkVSQVRJT05TIC0gMikgeworICAgICAgICAgICAgbG9uZ19saXZlZF9wZW5kaW5nICs9IGdjX2xpc3Rfc2l6ZSh5b3VuZyk7CisgICAgICAgIH0KICAgICAgICAgZ2NfbGlzdF9tZXJnZSh5b3VuZywgb2xkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxvbmdfbGl2ZWRfcGVuZGluZyA9IDA7CisgICAgICAgIGxvbmdfbGl2ZWRfdG90YWwgPSBnY19saXN0X3NpemUoeW91bmcpOworICAgIH0KIAogICAgIC8qIEFsbCBvYmplY3RzIGluIHVucmVhY2hhYmxlIGFyZSB0cmFzaCwgYnV0IG9iamVjdHMgcmVhY2hhYmxlIGZyb20KICAgICAgKiBmaW5hbGl6ZXJzIGNhbid0IHNhZmVseSBiZSBkZWxldGVkLiAgUHl0aG9uIHByb2dyYW1tZXJzIHNob3VsZCB0YWtlCkBAIC04OTUsNyArOTYwLDcgQEAKICAgICAgKi8KICAgICAodm9pZCloYW5kbGVfZmluYWxpemVycygmZmluYWxpemVycywgb2xkKTsKIAotICAgIC8qIENsZWFyIGZyZWUgbGlzdCBvbmx5IGR1cmluZyB0aGUgY29sbGVjdGlvbiBvZiB0aGUgaGlnZXN0CisgICAgLyogQ2xlYXIgZnJlZSBsaXN0IG9ubHkgZHVyaW5nIHRoZSBjb2xsZWN0aW9uIG9mIHRoZSBoaWdoZXN0CiAgICAgICogZ2VuZXJhdGlvbiAqLwogICAgIGlmIChnZW5lcmF0aW9uID09IE5VTV9HRU5FUkFUSU9OUy0xKSB7CiAgICAgICAgIGNsZWFyX2ZyZWVsaXN0cygpOwpAQCAtOTE2LDExICs5ODEsMTggQEAKICAgICBpbnQgaTsKICAgICBQeV9zc2l6ZV90IG4gPSAwOwogCi0gICAgLyogRmluZCB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKGhpZ2VzdCBudW1iZXJlZCkgd2hlcmUgdGhlIGNvdW50CisgICAgLyogRmluZCB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKGhpZ2hlc3QgbnVtYmVyZWQpIHdoZXJlIHRoZSBjb3VudAogICAgICAqIGV4Y2VlZHMgdGhlIHRocmVzaG9sZC4gIE9iamVjdHMgaW4gdGhlIHRoYXQgZ2VuZXJhdGlvbiBhbmQKICAgICAgKiBnZW5lcmF0aW9ucyB5b3VuZ2VyIHRoYW4gaXQgd2lsbCBiZSBjb2xsZWN0ZWQuICovCiAgICAgZm9yIChpID0gTlVNX0dFTkVSQVRJT05TLTE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgIGlmIChnZW5lcmF0aW9uc1tpXS5jb3VudCA+IGdlbmVyYXRpb25zW2ldLnRocmVzaG9sZCkgeworICAgICAgICAgICAgLyogQXZvaWQgcXVhZHJhdGljIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluIG51bWJlcgorICAgICAgICAgICAgICAgb2YgdHJhY2tlZCBvYmplY3RzLiBTZWUgY29tbWVudHMgYXQgdGhlIGJlZ2lubmluZworICAgICAgICAgICAgICAgb2YgdGhpcyBmaWxlLCBhbmQgaXNzdWUgIzQwNzQuCisgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKGkgPT0gTlVNX0dFTkVSQVRJT05TIC0gMQorICAgICAgICAgICAgICAgICYmIGxvbmdfbGl2ZWRfcGVuZGluZyA8IGxvbmdfbGl2ZWRfdG90YWwgLyA0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbiA9IGNvbGxlY3QoaSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTE5OCw2ICsxMjcwLDI2IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUHlEb2NfU1RSVkFSKGdjX2lzX3RyYWNrZWRfX2RvY19fLAorImlzX3RyYWNrZWQob2JqKSAtPiBib29sXG4iCisiXG4iCisiUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgdHJhY2tlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuXG4iCisiU2ltcGxlIGF0b21pYyBvYmplY3RzIHdpbGwgcmV0dXJuIGZhbHNlLlxuIgorKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2djX2lzX3RyYWNrZWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKworICAgIGlmIChQeU9iamVjdF9JU19HQyhvYmopICYmIElTX1RSQUNLRUQob2JqKSkKKyAgICAgICAgcmVzdWx0ID0gUHlfVHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IFB5X0ZhbHNlOworICAgIFB5X0lOQ1JFRihyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIAogUHlEb2NfU1RSVkFSKGdjX19kb2NfXywKICJUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGZvciByZWZlcmVuY2UgY3ljbGVzLlxuIgpAQCAtMTIxMiw2ICsxMzA0LDcgQEAKICJzZXRfdGhyZXNob2xkKCkgLS0gU2V0IHRoZSBjb2xsZWN0aW9uIHRocmVzaG9sZHMuXG4iCiAiZ2V0X3RocmVzaG9sZCgpIC0tIFJldHVybiB0aGUgY3VycmVudCB0aGUgY29sbGVjdGlvbiB0aHJlc2hvbGRzLlxuIgogImdldF9vYmplY3RzKCkgLS0gUmV0dXJuIGEgbGlzdCBvZiBhbGwgb2JqZWN0cyB0cmFja2VkIGJ5IHRoZSBjb2xsZWN0b3IuXG4iCisiaXNfdHJhY2tlZCgpIC0tIFJldHVybnMgdHJ1ZSBpZiBhIGdpdmVuIG9iamVjdCBpcyB0cmFja2VkLlxuIgogImdldF9yZWZlcnJlcnMoKSAtLSBSZXR1cm4gdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0aGF0IHJlZmVyIHRvIGFuIG9iamVjdC5cbiIKICJnZXRfcmVmZXJlbnRzKCkgLS0gUmV0dXJuIHRoZSBsaXN0IG9mIG9iamVjdHMgdGhhdCBhbiBvYmplY3QgcmVmZXJzIHRvLlxuIik7CiAKQEAgLTEyMjcsNiArMTMyMCw3IEBACiAgICAgeyJjb2xsZWN0IiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZ2NfY29sbGVjdCwKICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgICAgICAgICAgIGdjX2NvbGxlY3RfX2RvY19ffSwKICAgICB7ImdldF9vYmplY3RzIiwgICAgZ2NfZ2V0X29iamVjdHMsTUVUSF9OT0FSR1MsICBnY19nZXRfb2JqZWN0c19fZG9jX199LAorICAgIHsiaXNfdHJhY2tlZCIsICAgICBnY19pc190cmFja2VkLCBNRVRIX08sICAgICAgIGdjX2lzX3RyYWNrZWRfX2RvY19ffSwKICAgICB7ImdldF9yZWZlcnJlcnMiLCAgZ2NfZ2V0X3JlZmVycmVycywgTUVUSF9WQVJBUkdTLAogICAgICAgICBnY19nZXRfcmVmZXJyZXJzX19kb2NfX30sCiAgICAgeyJnZXRfcmVmZXJlbnRzIiwgIGdjX2dldF9yZWZlcmVudHMsIE1FVEhfVkFSQVJHUywKZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2V0cGF0aC5jIGIvTW9kdWxlcy9nZXRwYXRoLmMKaW5kZXggZjI4ZjRjNi4uOWZhYWZhMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9nZXRwYXRoLmMKKysrIGIvTW9kdWxlcy9nZXRwYXRoLmMKQEAgLTIzMiw3ICsyMzIsMTEgQEAKICAgICBpZiAocFswXSA9PSBTRVApCiAgICAgICAgIHN0cmNweShwYXRoLCBwKTsKICAgICBlbHNlIHsKLSAgICAgICAgZ2V0Y3dkKHBhdGgsIE1BWFBBVEhMRU4pOworICAgICAgICBpZiAoIWdldGN3ZChwYXRoLCBNQVhQQVRITEVOKSkgeworICAgICAgICAgICAgLyogdW5hYmxlIHRvIGdldCB0aGUgY3VycmVudCBkaXJlY3RvcnkgKi8KKyAgICAgICAgICAgIHN0cmNweShwYXRoLCBwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBpZiAocFswXSA9PSAnLicgJiYgcFsxXSA9PSBTRVApCiAgICAgICAgICAgICBwICs9IDI7CiAgICAgICAgIGpvaW5wYXRoKHBhdGgsIHApOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9ncnBtb2R1bGUuYyBiL01vZHVsZXMvZ3JwbW9kdWxlLmMKaW5kZXggZmZiNDUxZS4uMDdkZTg4MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9ncnBtb2R1bGUuYworKysgYi9Nb2R1bGVzL2dycG1vZHVsZS5jCkBAIC0xNTgsNyArMTU4LDkgQEAKIG5hbWUgaXMgbm90IHZhbGlkLCByYWlzZSBLZXlFcnJvci4ifSwKICAgICB7ImdldGdyYWxsIiwJZ3JwX2dldGdyYWxsLAlNRVRIX05PQVJHUywKICAgICAgImdldGdyYWxsKCkgLT4gbGlzdCBvZiB0dXBsZXNcblwKLVJldHVybiBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBncm91cCBlbnRyaWVzLCBpbiBhcmJpdHJhcnkgb3JkZXIuIn0sCitSZXR1cm4gYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgZ3JvdXAgZW50cmllcywgaW4gYXJiaXRyYXJ5IG9yZGVyLlxuXAorQW4gZW50cnkgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCAnKycgb3IgJy0nIHJlcHJlc2VudHMgYW4gaW5zdHJ1Y3Rpb25cblwKK3RvIHVzZSBZUC9OSVMgYW5kIG1heSBub3QgYmUgYWNjZXNzaWJsZSB2aWEgZ2V0Z3JuYW0gb3IgZ2V0Z3JnaWQuIn0sCiAgICAge05VTEwsCQlOVUxMfQkJLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMgYi9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCmluZGV4IDkxYjQ4MmQuLmZmMjUzMzUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYwpAQCAtNzQ1LDggKzc0NSwxMCBAQAogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGl0ZW0gPSBQeUl0ZXJfTmV4dChsei0+aXQpOwogICAgICAgICBpZiAoaXRlbSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoIWx6LT5maXJzdHBhc3MpCi0gICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChsei0+c2F2ZWQsIGl0ZW0pOworICAgICAgICAgICAgaWYgKCFsei0+Zmlyc3RwYXNzICYmIFB5TGlzdF9BcHBlbmQobHotPnNhdmVkLCBpdGVtKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICB9CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CkBAIC04ODYsNyArODg4LDYgQEAKICAgICBsb25nIG9rOwogICAgIFB5T2JqZWN0ICooKml0ZXJuZXh0KShQeU9iamVjdCAqKTsKIAotICAgIGFzc2VydChQeUl0ZXJfQ2hlY2soaXQpKTsKICAgICBpdGVybmV4dCA9ICpQeV9UWVBFKGl0KS0+dHBfaXRlcm5leHQ7CiAgICAgZm9yICg7OykgewogICAgICAgICBpdGVtID0gaXRlcm5leHQoaXQpOwpAQCAtMTAzMSw3ICsxMDMyLDYgQEAKICAgICBpZiAobHotPnN0b3AgPT0gMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBhc3NlcnQoUHlJdGVyX0NoZWNrKGl0KSk7CiAgICAgaXRlbSA9ICgqUHlfVFlQRShpdCktPnRwX2l0ZXJuZXh0KShpdCk7CiAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMTM3LDcgKzExMzcsNyBAQAogICAgICAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICJTdG9wIGFyZ3VtZW50IGZvciBpc2xpY2UoKSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgb3IgTm9uZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgIlN0b3AgYXJndW1lbnQgZm9yIGlzbGljZSgpIG11c3QgYmUgTm9uZSBvciBhbiBpbnRlZ2VyOiAwIDw9IHggPD0gbWF4aW50LiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTUyLDE0ICsxMTUyLDE0IEBACiAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgIlN0b3AgYXJndW1lbnQgZm9yIGlzbGljZSgpIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBvciBOb25lLiIpOworICAgICAgICAgICAgICAgICAgICJTdG9wIGFyZ3VtZW50IGZvciBpc2xpY2UoKSBtdXN0IGJlIE5vbmUgb3IgYW4gaW50ZWdlcjogMCA8PSB4IDw9IG1heGludC4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBpZiAoc3RhcnQ8MCB8fCBzdG9wPC0xKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAiSW5kaWNlcyBmb3IgaXNsaWNlKCkgbXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlcnMgb3IgTm9uZS4iKTsKKyAgICAgICAgICAgIkluZGljZXMgZm9yIGlzbGljZSgpIG11c3QgYmUgTm9uZSBvciBhbiBpbnRlZ2VyOiAwIDw9IHggPD0gbWF4aW50LiIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEyMTUsMTAgKzEyMTUsMTAgQEAKIHsKICAgICBQeU9iamVjdCAqaXRlbTsKICAgICBQeU9iamVjdCAqaXQgPSBsei0+aXQ7CisgICAgUHlfc3NpemVfdCBzdG9wID0gbHotPnN0b3A7CiAgICAgUHlfc3NpemVfdCBvbGRuZXh0OwogICAgIFB5T2JqZWN0ICooKml0ZXJuZXh0KShQeU9iamVjdCAqKTsKIAotICAgIGFzc2VydChQeUl0ZXJfQ2hlY2soaXQpKTsKICAgICBpdGVybmV4dCA9ICpQeV9UWVBFKGl0KS0+dHBfaXRlcm5leHQ7CiAgICAgd2hpbGUgKGx6LT5jbnQgPCBsei0+bmV4dCkgewogICAgICAgICBpdGVtID0gaXRlcm5leHQoaXQpOwpAQCAtMTIyNywxNyArMTIyNywxNiBAQAogICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgICAgIGx6LT5jbnQrKzsKICAgICB9Ci0gICAgaWYgKGx6LT5zdG9wICE9IC0xICYmIGx6LT5jbnQgPj0gbHotPnN0b3ApCisgICAgaWYgKHN0b3AgIT0gLTEgJiYgbHotPmNudCA+PSBzdG9wKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc3NlcnQoUHlJdGVyX0NoZWNrKGl0KSk7CiAgICAgaXRlbSA9IGl0ZXJuZXh0KGl0KTsKICAgICBpZiAoaXRlbSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBsei0+Y250Kys7CiAgICAgb2xkbmV4dCA9IGx6LT5uZXh0OwogICAgIGx6LT5uZXh0ICs9IGx6LT5zdGVwOwotICAgIGlmIChsei0+bmV4dCA8IG9sZG5leHQpICAgICAvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8KLSAgICAgICAgbHotPm5leHQgPSBsei0+c3RvcDsKKyAgICBpZiAobHotPm5leHQgPCBvbGRuZXh0IHx8IChzdG9wICE9IC0xICYmIGx6LT5uZXh0ID4gc3RvcCkpCisgICAgICAgIGx6LT5uZXh0ID0gc3RvcDsKICAgICByZXR1cm4gaXRlbTsKIH0KIApAQCAtMTM2MSw3ICsxMzYwLDYgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIFB5T2JqZWN0ICppdCA9IGx6LT5pdDsKIAotICAgIGFzc2VydChQeUl0ZXJfQ2hlY2soaXQpKTsKICAgICBhcmdzID0gKCpQeV9UWVBFKGl0KS0+dHBfaXRlcm5leHQpKGl0KTsKICAgICBpZiAoYXJncyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE4NjcsNyArMTg2NSw4IEBACiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhseik7CiAgICAgUHlfWERFQ1JFRihsei0+cG9vbHMpOwogICAgIFB5X1hERUNSRUYobHotPnJlc3VsdCk7Ci0gICAgUHlNZW1fRnJlZShsei0+aW5kaWNlcyk7CisgICAgaWYgKGx6LT5pbmRpY2VzICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZyZWUobHotPmluZGljZXMpOwogICAgIFB5X1RZUEUobHopLT50cF9mcmVlKGx6KTsKIH0KIApAQCAtMTk3NCw2ICsxOTczLDkgQEAKIFRoZSBsZWZ0bW9zdCBpdGVyYXRvcnMgYXJlIGluIHRoZSBvdXRlcm1vc3QgZm9yLWxvb3AsIHNvIHRoZSBvdXRwdXQgdHVwbGVzXG5cCiBjeWNsZSBpbiBhIG1hbm5lciBzaW1pbGFyIHRvIGFuIG9kb21ldGVyICh3aXRoIHRoZSByaWdodG1vc3QgZWxlbWVudCBjaGFuZ2luZ1xuXAogb24gZXZlcnkgaXRlcmF0aW9uKS5cblxuXAorVG8gY29tcHV0ZSB0aGUgcHJvZHVjdCBvZiBhbiBpdGVyYWJsZSB3aXRoIGl0c2VsZiwgc3BlY2lmeSB0aGUgbnVtYmVyXG5cCitvZiByZXBldGl0aW9ucyB3aXRoIHRoZSBvcHRpb25hbCByZXBlYXQga2V5d29yZCBhcmd1bWVudC4gRm9yIGV4YW1wbGUsXG5cCitwcm9kdWN0KEEsIHJlcGVhdD00KSBtZWFucyB0aGUgc2FtZSBhcyBwcm9kdWN0KEEsIEEsIEEsIEEpLlxuXG5cCiBwcm9kdWN0KCdhYicsIHJhbmdlKDMpKSAtLT4gKCdhJywwKSAoJ2EnLDEpICgnYScsMikgKCdiJywwKSAoJ2InLDEpICgnYicsMilcblwKIHByb2R1Y3QoKDAsMSksICgwLDEpLCAoMCwxKSkgLS0+ICgwLDAsMCkgKDAsMCwxKSAoMCwxLDApICgwLDEsMSkgKDEsMCwwKSAuLi4iKTsKIApAQCAtMjA5NSw3ICsyMDk3LDggQEAKICAgICBQeU9iamVjdF9HQ19VblRyYWNrKGNvKTsKICAgICBQeV9YREVDUkVGKGNvLT5wb29sKTsKICAgICBQeV9YREVDUkVGKGNvLT5yZXN1bHQpOwotICAgIFB5TWVtX0ZyZWUoY28tPmluZGljZXMpOworICAgIGlmIChjby0+aW5kaWNlcyAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GcmVlKGNvLT5pbmRpY2VzKTsKICAgICBQeV9UWVBFKGNvKS0+dHBfZnJlZShjbyk7CiB9CiAKQEAgLTIyNDQsNiArMjI0NywyNTIgQEAKIH07CiAKIAorLyogY29tYmluYXRpb25zIHdpdGggcmVwbGFjZW1lbnQgb2JqZWN0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEVxdWl2YWxlbnQgdG86CisKKyAgICAgICAgZGVmIGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KGl0ZXJhYmxlLCByKToKKyAgICAgICAgICAgICJjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnQUJDJywgMikgLS0+IEFBIEFCIEFDIEJCIEJDIENDIgorICAgICAgICAgICAgIyBudW1iZXIgaXRlbXMgcmV0dXJuZWQ6ICAobityLTEpISAvIHIhIC8gKG4tMSkhCisgICAgICAgICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCisgICAgICAgICAgICBuID0gbGVuKHBvb2wpCisgICAgICAgICAgICBpbmRpY2VzID0gWzBdICogcgorICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShyKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGluZGljZXNbaV0gIT0gbiAtIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGluZGljZXNbaTpdID0gW2luZGljZXNbaV0gKyAxXSAqIChyIC0gaSkKKyAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCisKKyAgICAgICAgZGVmIGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50MihpdGVyYWJsZSwgcik6CisgICAgICAgICAgICAnQWx0ZXJuYXRlIHZlcnNpb24gdGhhdCBmaWx0ZXJzIGZyb20gcHJvZHVjdCgpJworICAgICAgICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQorICAgICAgICAgICAgbiA9IGxlbihwb29sKQorICAgICAgICAgICAgZm9yIGluZGljZXMgaW4gcHJvZHVjdChyYW5nZShuKSwgcmVwZWF0PXIpOgorICAgICAgICAgICAgICAgIGlmIHNvcnRlZChpbmRpY2VzKSA9PSBsaXN0KGluZGljZXMpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCisqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQeU9iamVjdCAqcG9vbDsgICAgICAgICAgICAgICAgICAgICAvKiBpbnB1dCBjb252ZXJ0ZWQgdG8gYSB0dXBsZSAqLworICAgIFB5X3NzaXplX3QgKmluZGljZXM7ICAgIC8qIG9uZSBpbmRleCBwZXIgcmVzdWx0IGVsZW1lbnQgKi8KKyAgICBQeU9iamVjdCAqcmVzdWx0OyAgICAgICAvKiBtb3N0IHJlY2VudGx5IHJldHVybmVkIHJlc3VsdCB0dXBsZSAqLworICAgIFB5X3NzaXplX3QgcjsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgcmVzdWx0IHR1cGxlICovCisgICAgaW50IHN0b3BwZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHRvIDEgd2hlbiB0aGUgY3dyIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCAqLworfSBjd3JvYmplY3Q7CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgY3dyX3R5cGU7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjd3JfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGN3cm9iamVjdCAqY287CisgICAgUHlfc3NpemVfdCBuOworICAgIFB5X3NzaXplX3QgcjsKKyAgICBQeU9iamVjdCAqcG9vbCA9IE5VTEw7CisgICAgUHlPYmplY3QgKml0ZXJhYmxlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90ICppbmRpY2VzID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgc3RhdGljIGNoYXIgKmt3YXJnc1tdID0geyJpdGVyYWJsZSIsICJyIiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT246Y29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQiLCBrd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZXJhYmxlLCAmcikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcG9vbCA9IFB5U2VxdWVuY2VfVHVwbGUoaXRlcmFibGUpOworICAgIGlmIChwb29sID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgbiA9IFB5VHVwbGVfR0VUX1NJWkUocG9vbCk7CisgICAgaWYgKHIgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiciBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGluZGljZXMgPSBQeU1lbV9NYWxsb2MociAqIHNpemVvZihQeV9zc2l6ZV90KSk7CisgICAgaWYgKGluZGljZXMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGZvciAoaT0wIDsgaTxyIDsgaSsrKQorICAgICAgICBpbmRpY2VzW2ldID0gMDsKKworICAgIC8qIGNyZWF0ZSBjd3JvYmplY3Qgc3RydWN0dXJlICovCisgICAgY28gPSAoY3dyb2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKGNvID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBjby0+cG9vbCA9IHBvb2w7CisgICAgY28tPmluZGljZXMgPSBpbmRpY2VzOworICAgIGNvLT5yZXN1bHQgPSBOVUxMOworICAgIGNvLT5yID0gcjsKKyAgICBjby0+c3RvcHBlZCA9ICFuICYmIHI7CisKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopY287CisKK2Vycm9yOgorICAgIGlmIChpbmRpY2VzICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZyZWUoaW5kaWNlcyk7CisgICAgUHlfWERFQ1JFRihwb29sKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2N3cl9kZWFsbG9jKGN3cm9iamVjdCAqY28pCit7CisgICAgUHlPYmplY3RfR0NfVW5UcmFjayhjbyk7CisgICAgUHlfWERFQ1JFRihjby0+cG9vbCk7CisgICAgUHlfWERFQ1JFRihjby0+cmVzdWx0KTsKKyAgICBpZiAoY28tPmluZGljZXMgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRnJlZShjby0+aW5kaWNlcyk7CisgICAgUHlfVFlQRShjbyktPnRwX2ZyZWUoY28pOworfQorCitzdGF0aWMgaW50Citjd3JfdHJhdmVyc2UoY3dyb2JqZWN0ICpjbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUHlfVklTSVQoY28tPnBvb2wpOworICAgIFB5X1ZJU0lUKGNvLT5yZXN1bHQpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorY3dyX25leHQoY3dyb2JqZWN0ICpjbykKK3sKKyAgICBQeU9iamVjdCAqZWxlbTsKKyAgICBQeU9iamVjdCAqb2xkZWxlbTsKKyAgICBQeU9iamVjdCAqcG9vbCA9IGNvLT5wb29sOworICAgIFB5X3NzaXplX3QgKmluZGljZXMgPSBjby0+aW5kaWNlczsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gY28tPnJlc3VsdDsKKyAgICBQeV9zc2l6ZV90IG4gPSBQeVR1cGxlX0dFVF9TSVpFKHBvb2wpOworICAgIFB5X3NzaXplX3QgciA9IGNvLT5yOworICAgIFB5X3NzaXplX3QgaSwgaiwgaW5kZXg7CisKKyAgICBpZiAoY28tPnN0b3BwZWQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIC8qIE9uIHRoZSBmaXJzdCBwYXNzLCBpbml0aWFsaXplIHJlc3VsdCB0dXBsZSB1c2luZyB0aGUgaW5kaWNlcyAqLworICAgICAgICByZXN1bHQgPSBQeVR1cGxlX05ldyhyKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlbXB0eTsKKyAgICAgICAgY28tPnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgZm9yIChpPTA7IGk8ciA7IGkrKykgeworICAgICAgICAgICAgaW5kZXggPSBpbmRpY2VzW2ldOworICAgICAgICAgICAgZWxlbSA9IFB5VHVwbGVfR0VUX0lURU0ocG9vbCwgaW5kZXgpOworICAgICAgICAgICAgUHlfSU5DUkVGKGVsZW0pOworICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXN1bHQsIGksIGVsZW0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogQ29weSB0aGUgcHJldmlvdXMgcmVzdWx0IHR1cGxlIG9yIHJlLXVzZSBpdCBpZiBhdmFpbGFibGUgKi8KKyAgICAgICAgaWYgKFB5X1JFRkNOVChyZXN1bHQpID4gMSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm9sZF9yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQgPSBQeVR1cGxlX05ldyhyKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVtcHR5OworICAgICAgICAgICAgY28tPnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPHIgOyBpKyspIHsKKyAgICAgICAgICAgICAgICBlbGVtID0gUHlUdXBsZV9HRVRfSVRFTShvbGRfcmVzdWx0LCBpKTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZWxlbSk7CisgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXN1bHQsIGksIGVsZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKG9sZF9yZXN1bHQpOworICAgICAgICB9CisgICAgICAgIC8qIE5vdywgd2UndmUgZ290IHRoZSBvbmx5IGNvcHkgc28gd2UgY2FuIHVwZGF0ZSBpdCBpbi1wbGFjZSBDUHl0aG9uJ3MKKyAgICAgICAgICAgZW1wdHkgdHVwbGUgaXMgYSBzaW5nbGV0b24gYW5kIGNhY2hlZCBpbiBQeVR1cGxlJ3MgZnJlZWxpc3QuICovCisgICAgICAgIGFzc2VydChyID09IDAgfHwgUHlfUkVGQ05UKHJlc3VsdCkgPT0gMSk7CisKKyAgICAvKiBTY2FuIGluZGljZXMgcmlnaHQtdG8tbGVmdCB1bnRpbCBmaW5kaW5nIG9uZSB0aGF0IGlzIG5vdAorICAgICAqIGF0IGl0cyBtYXhpbXVtIChuLTEpLiAqLworICAgICAgICBmb3IgKGk9ci0xIDsgaSA+PSAwICYmIGluZGljZXNbaV0gPT0gbi0xOyBpLS0pCisgICAgICAgICAgICA7CisKKyAgICAgICAgLyogSWYgaSBpcyBuZWdhdGl2ZSwgdGhlbiB0aGUgaW5kaWNlcyBhcmUgYWxsIGF0CisgICAgICAgdGhlaXIgbWF4aW11bSB2YWx1ZSBhbmQgd2UncmUgZG9uZS4gKi8KKyAgICAgICAgaWYgKGkgPCAwKQorICAgICAgICAgICAgZ290byBlbXB0eTsKKworICAgICAgICAvKiBJbmNyZW1lbnQgdGhlIGN1cnJlbnQgaW5kZXggd2hpY2ggd2Uga25vdyBpcyBub3QgYXQgaXRzCisgICAgICAgbWF4aW11bS4gIFRoZW4gc2V0IGFsbCB0byB0aGUgcmlnaHQgdG8gdGhlIHNhbWUgdmFsdWUuICovCisgICAgICAgIGluZGljZXNbaV0rKzsKKyAgICAgICAgZm9yIChqPWkrMSA7IGo8ciA7IGorKykKKyAgICAgICAgICAgIGluZGljZXNbal0gPSBpbmRpY2VzW2otMV07CisKKyAgICAgICAgLyogVXBkYXRlIHRoZSByZXN1bHQgdHVwbGUgZm9yIHRoZSBuZXcgaW5kaWNlcworICAgICAgICAgICBzdGFydGluZyB3aXRoIGksIHRoZSBsZWZ0bW9zdCBpbmRleCB0aGF0IGNoYW5nZWQgKi8KKyAgICAgICAgZm9yICggOyBpPHIgOyBpKyspIHsKKyAgICAgICAgICAgIGluZGV4ID0gaW5kaWNlc1tpXTsKKyAgICAgICAgICAgIGVsZW0gPSBQeVR1cGxlX0dFVF9JVEVNKHBvb2wsIGluZGV4KTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihlbGVtKTsKKyAgICAgICAgICAgIG9sZGVsZW0gPSBQeVR1cGxlX0dFVF9JVEVNKHJlc3VsdCwgaSk7CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSwgZWxlbSk7CisgICAgICAgICAgICBQeV9ERUNSRUYob2xkZWxlbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQeV9JTkNSRUYocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworCitlbXB0eToKKyAgICBjby0+c3RvcHBlZCA9IDE7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5RG9jX1NUUlZBUihjd3JfZG9jLAorImNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KGl0ZXJhYmxlLCByKSAtLT4gY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQgb2JqZWN0XG5cCitcblwKK1JldHVybiBzdWNjZXNzaXZlIHItbGVuZ3RoIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBpbiB0aGUgaXRlcmFibGVcblwKK2FsbG93aW5nIGluZGl2aWR1YWwgZWxlbWVudHMgdG8gaGF2ZSBzdWNjZXNzaXZlIHJlcGVhdHMuXG5cCitjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnQUJDJywgMikgLS0+IEFBIEFCIEFDIEJCIEJDIENDIik7CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgY3dyX3R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIml0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCIsICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihjd3JvYmplY3QpLCAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAgIC8qIG1ldGhvZHMgKi8KKyAgICAoZGVzdHJ1Y3Rvciljd3JfZGVhbGxvYywgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8CisgICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEUsICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICBjd3JfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpY3dyX3RyYXZlcnNlLCAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgUHlPYmplY3RfU2VsZkl0ZXIsICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIChpdGVybmV4dGZ1bmMpY3dyX25leHQsICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIGN3cl9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgUHlPYmplY3RfR0NfRGVsLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworfTsKKworCiAvKiBwZXJtdXRhdGlvbnMgb2JqZWN0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiBkZWYgcGVybXV0YXRpb25zKGl0ZXJhYmxlLCByPU5vbmUpOgpAQCAtMjUxMSw2ICsyNzYwLDE2MCBAQAogfTsKIAogCisvKiBjb21wcmVzcyBvYmplY3QgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBFcXVpdmFsZW50IHRvOgorCisgICAgZGVmIGNvbXByZXNzKGRhdGEsIHNlbGVjdG9ycyk6CisgICAgICAgICJjb21wcmVzcygnQUJDREVGJywgWzEsMCwxLDAsMSwxXSkgLS0+IEEgQyBFIEYiCisgICAgICAgIHJldHVybiAoZCBmb3IgZCwgcyBpbiBpemlwKGRhdGEsIHNlbGVjdG9ycykgaWYgcykKKyovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKmRhdGE7CisgICAgUHlPYmplY3QgKnNlbGVjdG9yczsKK30gY29tcHJlc3NvYmplY3Q7CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgY29tcHJlc3NfdHlwZTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NvbXByZXNzX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBQeU9iamVjdCAqc2VxMSwgKnNlcTI7CisgICAgUHlPYmplY3QgKmRhdGE9TlVMTCwgKnNlbGVjdG9ycz1OVUxMOworICAgIGNvbXByZXNzb2JqZWN0ICpsejsKKyAgICBzdGF0aWMgY2hhciAqa3dhcmdzW10gPSB7ImRhdGEiLCAic2VsZWN0b3JzIiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT086Y29tcHJlc3MiLCBrd2FyZ3MsICZzZXExLCAmc2VxMikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZGF0YSA9IFB5T2JqZWN0X0dldEl0ZXIoc2VxMSk7CisgICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworICAgIHNlbGVjdG9ycyA9IFB5T2JqZWN0X0dldEl0ZXIoc2VxMik7CisgICAgaWYgKHNlbGVjdG9ycyA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBjcmVhdGUgY29tcHJlc3NvYmplY3Qgc3RydWN0dXJlICovCisgICAgbHogPSAoY29tcHJlc3NvYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAobHogPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworICAgIGx6LT5kYXRhID0gZGF0YTsKKyAgICBsei0+c2VsZWN0b3JzID0gc2VsZWN0b3JzOworICAgIHJldHVybiAoUHlPYmplY3QgKilsejsKKworZmFpbDoKKyAgICBQeV9YREVDUkVGKGRhdGEpOworICAgIFB5X1hERUNSRUYoc2VsZWN0b3JzKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2NvbXByZXNzX2RlYWxsb2MoY29tcHJlc3NvYmplY3QgKmx6KQoreworICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sobHopOworICAgIFB5X1hERUNSRUYobHotPmRhdGEpOworICAgIFB5X1hERUNSRUYobHotPnNlbGVjdG9ycyk7CisgICAgUHlfVFlQRShseiktPnRwX2ZyZWUobHopOworfQorCitzdGF0aWMgaW50Citjb21wcmVzc190cmF2ZXJzZShjb21wcmVzc29iamVjdCAqbHosIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKGx6LT5kYXRhKTsKKyAgICBQeV9WSVNJVChsei0+c2VsZWN0b3JzKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2NvbXByZXNzX25leHQoY29tcHJlc3NvYmplY3QgKmx6KQoreworICAgIFB5T2JqZWN0ICpkYXRhID0gbHotPmRhdGEsICpzZWxlY3RvcnMgPSBsei0+c2VsZWN0b3JzOworICAgIFB5T2JqZWN0ICpkYXR1bSwgKnNlbGVjdG9yOworICAgIFB5T2JqZWN0ICooKmRhdGFuZXh0KShQeU9iamVjdCAqKSA9ICpQeV9UWVBFKGRhdGEpLT50cF9pdGVybmV4dDsKKyAgICBQeU9iamVjdCAqKCpzZWxlY3Rvcm5leHQpKFB5T2JqZWN0ICopID0gKlB5X1RZUEUoc2VsZWN0b3JzKS0+dHBfaXRlcm5leHQ7CisgICAgaW50IG9rOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgLyogU3RlcHM6ICBnZXQgZGF0dW0sIGdldCBzZWxlY3RvciwgZXZhbHVhdGUgc2VsZWN0b3IuCisgICAgICAgICAgIE9yZGVyIGlzIGltcG9ydGFudCAodG8gbWF0Y2ggdGhlIHB1cmUgcHl0aG9uIHZlcnNpb24KKyAgICAgICAgICAgaW4gdGVybXMgb2Ygd2hpY2ggaW5wdXQgZ2V0cyBhIGNoYW5jZSB0byByYWlzZSBhbgorICAgICAgICAgICBleGNlcHRpb24gZmlyc3QpLgorICAgICAgICAqLworCisgICAgICAgIGRhdHVtID0gZGF0YW5leHQoZGF0YSk7CisgICAgICAgIGlmIChkYXR1bSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvcm5leHQoc2VsZWN0b3JzKTsKKyAgICAgICAgaWYgKHNlbGVjdG9yID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkYXR1bSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG9rID0gUHlPYmplY3RfSXNUcnVlKHNlbGVjdG9yKTsKKyAgICAgICAgUHlfREVDUkVGKHNlbGVjdG9yKTsKKyAgICAgICAgaWYgKG9rID09IDEpCisgICAgICAgICAgICByZXR1cm4gZGF0dW07CisgICAgICAgIFB5X0RFQ1JFRihkYXR1bSk7CisgICAgICAgIGlmIChvayA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKGNvbXByZXNzX2RvYywKKyJjb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpIC0tPiBpdGVyYXRvciBvdmVyIHNlbGVjdGVkIGRhdGFcblwKK1xuXAorUmV0dXJuIGRhdGEgZWxlbWVudHMgY29ycmVzcG9uZGluZyB0byB0cnVlIHNlbGVjdG9yIGVsZW1lbnRzLlxuXAorRm9ybXMgYSBzaG9ydGVyIGl0ZXJhdG9yIGZyb20gc2VsZWN0ZWQgZGF0YSBlbGVtZW50cyB1c2luZyB0aGVcblwKK3NlbGVjdG9ycyB0byBjaG9vc2UgdGhlIGRhdGEgZWxlbWVudHMuIik7CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgY29tcHJlc3NfdHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiaXRlcnRvb2xzLmNvbXByZXNzIiwgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgc2l6ZW9mKGNvbXByZXNzb2JqZWN0KSwgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAvKiBtZXRob2RzICovCisgICAgKGRlc3RydWN0b3IpY29tcHJlc3NfZGVhbGxvYywgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfAorICAgICAgICBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICBjb21wcmVzc19kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgKHRyYXZlcnNlcHJvYyljb21wcmVzc190cmF2ZXJzZSwgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIFB5T2JqZWN0X1NlbGZJdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgKGl0ZXJuZXh0ZnVuYyljb21wcmVzc19uZXh0LCAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgY29tcHJlc3NfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCit9OworCisKIC8qIGlmaWx0ZXIgb2JqZWN0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMjU3Nyw3ICsyOTgwLDYgQEAKICAgICBsb25nIG9rOwogICAgIFB5T2JqZWN0ICooKml0ZXJuZXh0KShQeU9iamVjdCAqKTsKIAotICAgIGFzc2VydChQeUl0ZXJfQ2hlY2soaXQpKTsKICAgICBpdGVybmV4dCA9ICpQeV9UWVBFKGl0KS0+dHBfaXRlcm5leHQ7CiAgICAgZm9yICg7OykgewogICAgICAgICBpdGVtID0gaXRlcm5leHQoaXQpOwpAQCAtMjcyMSw3ICszMTIzLDYgQEAKICAgICBsb25nIG9rOwogICAgIFB5T2JqZWN0ICooKml0ZXJuZXh0KShQeU9iamVjdCAqKTsKIAotICAgIGFzc2VydChQeUl0ZXJfQ2hlY2soaXQpKTsKICAgICBpdGVybmV4dCA9ICpQeV9UWVBFKGl0KS0+dHBfaXRlcm5leHQ7CiAgICAgZm9yICg7OykgewogICAgICAgICBpdGVtID0gaXRlcm5leHQoaXQpOwpAQCAtMjgwMyw0NyArMzIwNCw5OCBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBQeV9zc2l6ZV90IGNudDsKLSAgICBQeU9iamVjdCAqbG9uZ19jbnQ7ICAgICAgICAgLyogQXJiaXRyYXJpbHkgbGFyZ2UgY291bnQgd2hlbiBjbnQgPj0gUFlfU1NJWkVfVF9NQVggKi8KKyAgICBQeU9iamVjdCAqbG9uZ19jbnQ7CisgICAgUHlPYmplY3QgKmxvbmdfc3RlcDsKIH0gY291bnRvYmplY3Q7CiAKKy8qIENvdW50aW5nIGxvZ2ljIGFuZCBpbnZhcmlhbnRzOgorCitmYXN0X21vZGU6ICB3aGVuIGNudCBhbiBpbnRlZ2VyIDwgUFlfU1NJWkVfVF9NQVggYW5kIG5vIHN0ZXAgaXMgc3BlY2lmaWVkLgorCisgICAgYXNzZXJ0KGNudCAhPSBQWV9TU0laRV9UX01BWCAmJiBsb25nX2NudCA9PSBOVUxMICYmIGxvbmdfc3RlcD09UHlJbnQoMSkpOworICAgIEFkdmFuY2VzIHdpdGg6ICBjbnQgKz0gMQorICAgIFdoZW4gY291bnQgaGl0cyBZX1NTSVpFX1RfTUFYLCBzd2l0Y2ggdG8gc2xvd19tb2RlLgorCitzbG93X21vZGU6ICB3aGVuIGNudCA9PSBQWV9TU0laRV9UX01BWCwgc3RlcCBpcyBub3QgaW50KDEpLCBvciBjbnQgaXMgYSBmbG9hdC4KKworICAgIGFzc2VydChjbnQgPT0gUFlfU1NJWkVfVF9NQVggJiYgbG9uZ19jbnQgIT0gTlVMTCAmJiBsb25nX3N0ZXAgIT0gTlVMTCk7CisgICAgQWxsIGNvdW50aW5nIGlzIGRvbmUgd2l0aCBweXRob24gb2JqZWN0cyAobm8gb3ZlcmZsb3dzIG9yIHVuZGVyZmxvd3MpLgorICAgIEFkdmFuY2VzIHdpdGg6ICBsb25nX2NudCArPSBsb25nX3N0ZXAKKyAgICBTdGVwIG1heSBiZSB6ZXJvIC0tIGVmZmVjdGl2ZWx5IGEgc2xvdyB2ZXJzaW9uIG9mIHJlcGVhdChjbnQpLgorICAgIEVpdGhlciBsb25nX2NudCBvciBsb25nX3N0ZXAgbWF5IGJlIGEgZmxvYXQsIEZyYWN0aW9uLCBvciBEZWNpbWFsLgorKi8KKwogc3RhdGljIFB5VHlwZU9iamVjdCBjb3VudF90eXBlOwogCiBzdGF0aWMgUHlPYmplY3QgKgogY291bnRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIGNvdW50b2JqZWN0ICpsejsKKyAgICBpbnQgc2xvd19tb2RlID0gMDsKICAgICBQeV9zc2l6ZV90IGNudCA9IDA7Ci0gICAgUHlPYmplY3QgKmNudF9hcmcgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpsb25nX2NudCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmxvbmdfc3RlcCA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzdGFydCIsICJzdGVwIiwgMH07CiAKLSAgICBpZiAodHlwZSA9PSAmY291bnRfdHlwZSAmJiAhX1B5QXJnX05vS2V5d29yZHMoImNvdW50KCkiLCBrd2RzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifE9POmNvdW50IiwKKyAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbG9uZ19jbnQsICZsb25nX3N0ZXApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImNvdW50IiwgMCwgMSwgJmNudF9hcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChjbnRfYXJnICE9IE5VTEwpIHsKLSAgICAgICAgY250ID0gUHlJbnRfQXNTc2l6ZV90KGNudF9hcmcpOwotICAgICAgICBpZiAoY250ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayhjbnRfYXJnKSkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb25nX2NudCA9IGNudF9hcmc7Ci0gICAgICAgICAgICBQeV9JTkNSRUYobG9uZ19jbnQpOwotICAgICAgICAgICAgY250ID0gUFlfU1NJWkVfVF9NQVg7Ci0gICAgICAgIH0KKyAgICBpZiAoKGxvbmdfY250ICE9IE5VTEwgJiYgIVB5TnVtYmVyX0NoZWNrKGxvbmdfY250KSkgfHwKKyAgICAgICAgKGxvbmdfc3RlcCAhPSBOVUxMICYmICFQeU51bWJlcl9DaGVjayhsb25nX3N0ZXApKSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYSBudW1iZXIgaXMgcmVxdWlyZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgaWYgKGxvbmdfY250ICE9IE5VTEwpIHsKKyAgICAgICAgY250ID0gUHlJbnRfQXNTc2l6ZV90KGxvbmdfY250KTsKKyAgICAgICAgaWYgKChjbnQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgfHwgIVB5SW50X0NoZWNrKGxvbmdfY250KSkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHNsb3dfbW9kZSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKGxvbmdfY250KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjbnQgPSAwOworICAgICAgICBsb25nX2NudCA9IFB5SW50X0Zyb21Mb25nKDApOworICAgIH0KKworICAgIC8qIElmIG5vdCBzcGVjaWZpZWQsIHN0ZXAgZGVmYXVsdHMgdG8gMSAqLworICAgIGlmIChsb25nX3N0ZXAgPT0gTlVMTCkgeworICAgICAgICBsb25nX3N0ZXAgPSBQeUludF9Gcm9tTG9uZygxKTsKKyAgICAgICAgaWYgKGxvbmdfc3RlcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYobG9uZ19jbnQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgUHlfSU5DUkVGKGxvbmdfc3RlcCk7CisKKyAgICBhc3NlcnQobG9uZ19jbnQgIT0gTlVMTCAmJiBsb25nX3N0ZXAgIT0gTlVMTCk7CisKKyAgICAvKiBGYXN0IG1vZGUgb25seSB3b3JrcyB3aGVuIHRoZSBzdGVwIGlzIDEgKi8KKyAgICBpZiAoIVB5SW50X0NoZWNrKGxvbmdfc3RlcCkgfHwKKyAgICAgICAgUHlJbnRfQVNfTE9ORyhsb25nX3N0ZXApICE9IDEpIHsKKyAgICAgICAgICAgIHNsb3dfbW9kZSA9IDE7CisgICAgfQorCisgICAgaWYgKHNsb3dfbW9kZSkKKyAgICAgICAgY250ID0gUFlfU1NJWkVfVF9NQVg7CisgICAgZWxzZQorICAgICAgICBQeV9DTEVBUihsb25nX2NudCk7CisKKyAgICBhc3NlcnQoKGNudCAhPSBQWV9TU0laRV9UX01BWCAmJiBsb25nX2NudCA9PSBOVUxMICYmICFzbG93X21vZGUpIHx8CisgICAgICAgICAgIChjbnQgPT0gUFlfU1NJWkVfVF9NQVggJiYgbG9uZ19jbnQgIT0gTlVMTCAmJiBzbG93X21vZGUpKTsKKyAgICBhc3NlcnQoc2xvd19tb2RlIHx8CisgICAgICAgICAgIChQeUludF9DaGVjayhsb25nX3N0ZXApICYmIFB5SW50X0FTX0xPTkcobG9uZ19zdGVwKSA9PSAxKSk7CisKICAgICAvKiBjcmVhdGUgY291bnRvYmplY3Qgc3RydWN0dXJlICovCi0gICAgbHogPSAoY291bnRvYmplY3QgKilQeU9iamVjdF9OZXcoY291bnRvYmplY3QsICZjb3VudF90eXBlKTsKKyAgICBseiA9IChjb3VudG9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwogICAgIGlmIChseiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1hERUNSRUYobG9uZ19jbnQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgbHotPmNudCA9IGNudDsKICAgICBsei0+bG9uZ19jbnQgPSBsb25nX2NudDsKKyAgICBsei0+bG9uZ19zdGVwID0gbG9uZ19zdGVwOwogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWx6OwogfQpAQCAtMjg1MSwzNCArMzMwMyw0MCBAQAogc3RhdGljIHZvaWQKIGNvdW50X2RlYWxsb2MoY291bnRvYmplY3QgKmx6KQogeworICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sobHopOwogICAgIFB5X1hERUNSRUYobHotPmxvbmdfY250KTsKLSAgICBQeU9iamVjdF9EZWwobHopOworICAgIFB5X1hERUNSRUYobHotPmxvbmdfc3RlcCk7CisgICAgUHlfVFlQRShseiktPnRwX2ZyZWUobHopOworfQorCitzdGF0aWMgaW50Citjb3VudF90cmF2ZXJzZShjb3VudG9iamVjdCAqbHosIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKGx6LT5sb25nX2NudCk7CisgICAgUHlfVklTSVQobHotPmxvbmdfc3RlcCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBjb3VudF9uZXh0bG9uZyhjb3VudG9iamVjdCAqbHopCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpvbmUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpjbnQ7CisgICAgUHlPYmplY3QgKmxvbmdfY250OwogICAgIFB5T2JqZWN0ICpzdGVwcGVkX3VwOwogCi0gICAgaWYgKGx6LT5sb25nX2NudCA9PSBOVUxMKSB7Ci0gICAgICAgIGx6LT5sb25nX2NudCA9IFB5SW50X0Zyb21Tc2l6ZV90KFBZX1NTSVpFX1RfTUFYKTsKLSAgICAgICAgaWYgKGx6LT5sb25nX2NudCA9PSBOVUxMKQorICAgIGxvbmdfY250ID0gbHotPmxvbmdfY250OworICAgIGlmIChsb25nX2NudCA9PSBOVUxMKSB7CisgICAgICAgIC8qIFN3aXRjaCB0byBzbG93X21vZGUgKi8KKyAgICAgICAgbG9uZ19jbnQgPSBQeUludF9Gcm9tU3NpemVfdChQWV9TU0laRV9UX01BWCk7CisgICAgICAgIGlmIChsb25nX2NudCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChvbmUgPT0gTlVMTCkgewotICAgICAgICBvbmUgPSBQeUludF9Gcm9tTG9uZygxKTsKLSAgICAgICAgaWYgKG9uZSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGNudCA9IGx6LT5sb25nX2NudDsKLSAgICBhc3NlcnQoY250ICE9IE5VTEwpOwotICAgIHN0ZXBwZWRfdXAgPSBQeU51bWJlcl9BZGQoY250LCBvbmUpOworICAgIGFzc2VydChsei0+Y250ID09IFBZX1NTSVpFX1RfTUFYICYmIGxvbmdfY250ICE9IE5VTEwpOworCisgICAgc3RlcHBlZF91cCA9IFB5TnVtYmVyX0FkZChsb25nX2NudCwgbHotPmxvbmdfc3RlcCk7CiAgICAgaWYgKHN0ZXBwZWRfdXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbHotPmxvbmdfY250ID0gc3RlcHBlZF91cDsKLSAgICByZXR1cm4gY250OworICAgIHJldHVybiBsb25nX2NudDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI4OTIsMTcgKzMzNTAsMjkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBjb3VudF9yZXByKGNvdW50b2JqZWN0ICpseikKIHsKLSAgICBQeU9iamVjdCAqY250X3JlcHI7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqY250X3JlcHIsICpzdGVwX3JlcHIgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCiAgICAgaWYgKGx6LT5jbnQgIT0gUFlfU1NJWkVfVF9NQVgpCi0gICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tRm9ybWF0KCJjb3VudCglemQpIiwgbHotPmNudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQoImNvdW50KCV6ZCkiLCBsei0+Y250KTsKIAogICAgIGNudF9yZXByID0gUHlPYmplY3RfUmVwcihsei0+bG9uZ19jbnQpOwogICAgIGlmIChjbnRfcmVwciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXN1bHQgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCJjb3VudCglcykiLCBQeVN0cmluZ19BU19TVFJJTkcoY250X3JlcHIpKTsKKworICAgIGlmIChQeUludF9DaGVjayhsei0+bG9uZ19zdGVwKSAmJiBQeUludF9BU19MT05HKGx6LT5sb25nX3N0ZXApID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgZGlzcGxheSBzdGVwIHdoZW4gaXQgaXMgYW4gaW50ZWdlciBlcXVhbCB0byAxICovCisgICAgICAgICAgICByZXN1bHQgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCJjb3VudCglcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HKGNudF9yZXByKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RlcF9yZXByID0gUHlPYmplY3RfUmVwcihsei0+bG9uZ19zdGVwKTsKKyAgICAgICAgaWYgKHN0ZXBfcmVwciAhPSBOVUxMKQorICAgICAgICAgICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbUZvcm1hdCgiY291bnQoJXMsICVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhjbnRfcmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhzdGVwX3JlcHIpKTsKKyAgICB9CiAgICAgUHlfREVDUkVGKGNudF9yZXByKTsKKyAgICBQeV9YREVDUkVGKHN0ZXBfcmVwcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjkxMCw3ICszMzgwLDcgQEAKIGNvdW50X3JlZHVjZShjb3VudG9iamVjdCAqbHopCiB7CiAgICAgaWYgKGx6LT5jbnQgPT0gUFlfU1NJWkVfVF9NQVgpCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE8pIiwgUHlfVFlQRShseiksIGx6LT5sb25nX2NudCk7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9PKSIsIFB5X1RZUEUobHopLCBsei0+bG9uZ19jbnQsIGx6LT5sb25nX3N0ZXApOwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKG4pIiwgUHlfVFlQRShseiksIGx6LT5jbnQpOwogfQogCkBAIC0yOTIzLDEwICszMzkzLDE1IEBACiB9OwogCiBQeURvY19TVFJWQVIoY291bnRfZG9jLAotImNvdW50KFtmaXJzdHZhbF0pIC0tPiBjb3VudCBvYmplY3RcblwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bnQoc3RhcnQ9MCwgc3RlcD0xKSAtLT4gY291bnQgb2JqZWN0XG5cCiBcblwKLVJldHVybiBhIGNvdW50IG9iamVjdCB3aG9zZSAubmV4dCgpIG1ldGhvZCByZXR1cm5zIGNvbnNlY3V0aXZlXG5cCi1pbnRlZ2VycyBzdGFydGluZyBmcm9tIHplcm8gb3IsIGlmIHNwZWNpZmllZCwgZnJvbSBmaXJzdHZhbC4iKTsKK1JldHVybiBhIGNvdW50IG9iamVjdCB3aG9zZSAubmV4dCgpIG1ldGhvZCByZXR1cm5zIGNvbnNlY3V0aXZlIHZhbHVlcy5cblwKK0VxdWl2YWxlbnQgdG86XG5cblwKKyAgICBkZWYgY291bnQoZmlyc3R2YWw9MCwgc3RlcD0xKTpcblwKKyAgICB4ID0gZmlyc3R2YWxcblwKKyAgICB3aGlsZSAxOlxuXAorICAgICAgICB5aWVsZCB4XG5cCisgICAgICAgIHggKz0gc3RlcFxuIik7CiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgY291bnRfdHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKQEAgLTI5NDksOSArMzQyNCwxMCBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8CisgICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEUsICAgICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLwogICAgIGNvdW50X2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgKHRyYXZlcnNlcHJvYyljb3VudF90cmF2ZXJzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KQEAgLTI5NjgsNiArMzQ0NCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgY291bnRfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgUHlPYmplY3RfR0NfRGVsLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIAogCkBAIC0zMDc1LDcgKzM1NTIsNiBAQAogICAgICAgICBQeV9JTkNSRUYocmVzdWx0KTsKICAgICAgICAgZm9yIChpPTAgOyBpIDwgdHVwbGVzaXplIDsgaSsrKSB7CiAgICAgICAgICAgICBpdCA9IFB5VHVwbGVfR0VUX0lURU0obHotPml0dHVwbGUsIGkpOwotICAgICAgICAgICAgYXNzZXJ0KFB5SXRlcl9DaGVjayhpdCkpOwogICAgICAgICAgICAgaXRlbSA9ICgqUHlfVFlQRShpdCktPnRwX2l0ZXJuZXh0KShpdCk7CiAgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CkBAIC0zMDkxLDcgKzM1NjcsNiBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGZvciAoaT0wIDsgaSA8IHR1cGxlc2l6ZSA7IGkrKykgewogICAgICAgICAgICAgaXQgPSBQeVR1cGxlX0dFVF9JVEVNKGx6LT5pdHR1cGxlLCBpKTsKLSAgICAgICAgICAgIGFzc2VydChQeUl0ZXJfQ2hlY2soaXQpKTsKICAgICAgICAgICAgIGl0ZW0gPSAoKlB5X1RZUEUoaXQpLT50cF9pdGVybmV4dCkoaXQpOwogICAgICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwpAQCAtMzE3NCwxMSArMzY0OSwxMCBAQAogICAgIHJlcGVhdG9iamVjdCAqcm87CiAgICAgUHlPYmplY3QgKmVsZW1lbnQ7CiAgICAgUHlfc3NpemVfdCBjbnQgPSAtMTsKKyAgICBzdGF0aWMgY2hhciAqa3dhcmdzW10gPSB7Im9iamVjdCIsICJ0aW1lcyIsIE5VTEx9OwogCi0gICAgaWYgKHR5cGUgPT0gJnJlcGVhdF90eXBlICYmICFfUHlBcmdfTm9LZXl3b3JkcygicmVwZWF0KCkiLCBrd2RzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98bjpyZXBlYXQiLCAmZWxlbWVudCwgJmNudCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98bjpyZXBlYXQiLCBrd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVsZW1lbnQsICZjbnQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykgPT0gMiAmJiBjbnQgPCAwKQpAQCAtMzI1Niw4ICszNzMwLDggQEAKIH07CiAKIFB5RG9jX1NUUlZBUihyZXBlYXRfZG9jLAotInJlcGVhdChlbGVtZW50IFssdGltZXNdKSAtPiBjcmVhdGUgYW4gaXRlcmF0b3Igd2hpY2ggcmV0dXJucyB0aGUgZWxlbWVudFxuXAotZm9yIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzLiAgSWYgbm90IHNwZWNpZmllZCwgcmV0dXJucyB0aGUgZWxlbWVudFxuXAorInJlcGVhdChvYmplY3QgWyx0aW1lc10pIC0+IGNyZWF0ZSBhbiBpdGVyYXRvciB3aGljaCByZXR1cm5zIHRoZSBvYmplY3RcblwKK2ZvciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0aW1lcy4gIElmIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgdGhlIG9iamVjdFxuXAogZW5kbGVzc2x5LiIpOwogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IHJlcGVhdF90eXBlID0gewpAQCAtMzQyNyw3ICszOTAxLDYgQEAKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYobHotPmZpbGx2YWx1ZSk7CiAgICAgICAgICAgICAgICAgaXRlbSA9IGx6LT5maWxsdmFsdWU7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFzc2VydChQeUl0ZXJfQ2hlY2soaXQpKTsKICAgICAgICAgICAgICAgICBpdGVtID0gUHlJdGVyX05leHQoaXQpOwogICAgICAgICAgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgbHotPm51bWFjdGl2ZSAtPSAxOwpAQCAtMzQ1Nyw3ICszOTMwLDYgQEAKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYobHotPmZpbGx2YWx1ZSk7CiAgICAgICAgICAgICAgICAgaXRlbSA9IGx6LT5maWxsdmFsdWU7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFzc2VydChQeUl0ZXJfQ2hlY2soaXQpKTsKICAgICAgICAgICAgICAgICBpdGVtID0gUHlJdGVyX05leHQoaXQpOwogICAgICAgICAgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgbHotPm51bWFjdGl2ZSAtPSAxOwpAQCAtMzU0NSw4ICs0MDE3LDEwIEBACiByZXBlYXQoZWxlbSBbLG5dKSAtLT4gZWxlbSwgZWxlbSwgZWxlbSwgLi4uIGVuZGxlc3NseSBvciB1cCB0byBuIHRpbWVzXG5cCiBcblwKIEl0ZXJhdG9ycyB0ZXJtaW5hdGluZyBvbiB0aGUgc2hvcnRlc3QgaW5wdXQgc2VxdWVuY2U6XG5cCi1pemlwKHAsIHEsIC4uLikgLS0+IChwWzBdLCBxWzBdKSwgKHBbMV0sIHFbMV0pLCAuLi4gXG5cCi1pemlwX2xvbmdlc3QocCwgcSwgLi4uKSAtLT4gKHBbMF0sIHFbMF0pLCAocFsxXSwgcVsxXSksIC4uLiBcblwKK2NoYWluKHAsIHEsIC4uLikgLS0+IHAwLCBwMSwgLi4uIHBsYXN0LCBxMCwgcTEsIC4uLiBcblwKK2NvbXByZXNzKGRhdGEsIHNlbGVjdG9ycykgLS0+IChkWzBdIGlmIHNbMF0pLCAoZFsxXSBpZiBzWzFdKSwgLi4uXG5cCitkcm9wd2hpbGUocHJlZCwgc2VxKSAtLT4gc2VxW25dLCBzZXFbbisxXSwgc3RhcnRpbmcgd2hlbiBwcmVkIGZhaWxzXG5cCitncm91cGJ5KGl0ZXJhYmxlWywga2V5ZnVuY10pIC0tPiBzdWItaXRlcmF0b3JzIGdyb3VwZWQgYnkgdmFsdWUgb2Yga2V5ZnVuYyh2KVxuXAogaWZpbHRlcihwcmVkLCBzZXEpIC0tPiBlbGVtZW50cyBvZiBzZXEgd2hlcmUgcHJlZChlbGVtKSBpcyBUcnVlXG5cCiBpZmlsdGVyZmFsc2UocHJlZCwgc2VxKSAtLT4gZWxlbWVudHMgb2Ygc2VxIHdoZXJlIHByZWQoZWxlbSkgaXMgRmFsc2VcblwKIGlzbGljZShzZXEsIFtzdGFydCxdIHN0b3AgWywgc3RlcF0pIC0tPiBlbGVtZW50cyBmcm9tXG5cCkBAIC0zNTU0LDE1ICs0MDI4LDE1IEBACiBpbWFwKGZ1biwgcCwgcSwgLi4uKSAtLT4gZnVuKHAwLCBxMCksIGZ1bihwMSwgcTEpLCAuLi5cblwKIHN0YXJtYXAoZnVuLCBzZXEpIC0tPiBmdW4oKnNlcVswXSksIGZ1bigqc2VxWzFdKSwgLi4uXG5cCiB0ZWUoaXQsIG49MikgLS0+IChpdDEsIGl0MiAsIC4uLiBpdG4pIHNwbGl0cyBvbmUgaXRlcmF0b3IgaW50byBuXG5cCi1jaGFpbihwLCBxLCAuLi4pIC0tPiBwMCwgcDEsIC4uLiBwbGFzdCwgcTAsIHExLCAuLi4gXG5cCiB0YWtld2hpbGUocHJlZCwgc2VxKSAtLT4gc2VxWzBdLCBzZXFbMV0sIHVudGlsIHByZWQgZmFpbHNcblwKLWRyb3B3aGlsZShwcmVkLCBzZXEpIC0tPiBzZXFbbl0sIHNlcVtuKzFdLCBzdGFydGluZyB3aGVuIHByZWQgZmFpbHNcblwKLWdyb3VwYnkoaXRlcmFibGVbLCBrZXlmdW5jXSkgLS0+IHN1Yi1pdGVyYXRvcnMgZ3JvdXBlZCBieSB2YWx1ZSBvZiBrZXlmdW5jKHYpXG5cCitpemlwKHAsIHEsIC4uLikgLS0+IChwWzBdLCBxWzBdKSwgKHBbMV0sIHFbMV0pLCAuLi4gXG5cCitpemlwX2xvbmdlc3QocCwgcSwgLi4uKSAtLT4gKHBbMF0sIHFbMF0pLCAocFsxXSwgcVsxXSksIC4uLiBcblwKIFxuXAogQ29tYmluYXRvcmljIGdlbmVyYXRvcnM6XG5cCiBwcm9kdWN0KHAsIHEsIC4uLiBbcmVwZWF0PTFdKSAtLT4gY2FydGVzaWFuIHByb2R1Y3RcblwKIHBlcm11dGF0aW9ucyhwWywgcl0pXG5cCiBjb21iaW5hdGlvbnMocCwgcilcblwKK2NvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KHAsIHIpXG5cCiAiKTsKIAogCkBAIC0zNTc5LDYgKzQwNTMsNyBAQAogICAgIGNoYXIgKm5hbWU7CiAgICAgUHlUeXBlT2JqZWN0ICp0eXBlbGlzdFtdID0gewogICAgICAgICAmY29tYmluYXRpb25zX3R5cGUsCisgICAgICAgICZjd3JfdHlwZSwKICAgICAgICAgJmN5Y2xlX3R5cGUsCiAgICAgICAgICZkcm9wd2hpbGVfdHlwZSwKICAgICAgICAgJnRha2V3aGlsZV90eXBlLApAQCAtMzU4Niw2ICs0MDYxLDcgQEAKICAgICAgICAgJnN0YXJtYXBfdHlwZSwKICAgICAgICAgJmltYXBfdHlwZSwKICAgICAgICAgJmNoYWluX3R5cGUsCisgICAgICAgICZjb21wcmVzc190eXBlLAogICAgICAgICAmaWZpbHRlcl90eXBlLAogICAgICAgICAmaWZpbHRlcmZhbHNlX3R5cGUsCiAgICAgICAgICZjb3VudF90eXBlLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9sZF9zb19haXggYi9Nb2R1bGVzL2xkX3NvX2FpeC5pbgpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIE1vZHVsZXMvbGRfc29fYWl4CnJlbmFtZSB0byBNb2R1bGVzL2xkX3NvX2FpeC5pbgppbmRleCA2YjgzODIzLi4zOTI1MWQyCi0tLSBhL01vZHVsZXMvbGRfc29fYWl4CisrKyBiL01vZHVsZXMvbGRfc29fYWl4LmluCkBAIC0xMzEsMTEgKzEzMSwxNCBAQAogICBzaGlmdAogZG9uZQogCitpZiB0ZXN0ICIkb2JqZmlsZSIgPSAibGlicHl0aG9uQFZFUlNJT05ALnNvIjsgdGhlbgorICBsZHNvY29yZW1vZGU9InRydWUiIAorZmkKIAogaWYgdGVzdCAteiAiJG9ianMiOyB0aGVuCiAgIGVjaG8gImxkX3NvX2FpeDogTm8gaW5wdXQgZmlsZXM7IGV4aXRpbmcuIgogICBleGl0IDIKLWVsaWYgdGVzdCAhIC1yICIkaW1wZmlsZSI7IHRoZW4KK2VsaWYgdGVzdCAhIC1yICIkaW1wZmlsZSIgLWEgLXogIiRsZHNvY29yZW1vZGUiOyB0aGVuCiAgIGVjaG8gImxkX3NvX2FpeDogSW1wb3J0IGZpbGUgJyRpbXBmaWxlJyBub3QgZm91bmQgb3Igbm90IHJlYWRhYmxlOyBleGl0aW5nLiIKICAgZXhpdCAyCiBmaQpAQCAtMTY2LDExICsxNjksMTIgQEAKICNlY2hvICIgIC0+IG9iamVjdCBmaWxlczogJG9ianMiCiAjZWNobyAiICAtPiBDQyBhcmd1bWVudHM6ICRhcmdzIgogCi1DQ09QVD0iLVdsLC1lJGVudHJ5IC1XbCwtYkU6JGV4cGZpbGUgLVdsLC1iSTokaW1wZmlsZSAtV2wsLWJoYWx0OjQiCi1DQ09QVD0iJENDT1BUIC1XbCwtYk06U1JFIC1XbCwtVDUxMiAtV2wsLUg1MTIgLWxtIC1vICRvYmpmaWxlIgotIyBOb3RlOiB0byB1c2UgZHluYW1pYyBsaWJyYXJpZXMgbGlrZSBsaWJ0Y2w4LjQuc28gYW5kIGxpYnRrOC40LnNvIAotIyB5b3UgbWF5IG5lZWQgdG8gcmVwbGFjZSB0aGUgc2Vjb25kIENDT1BUIGxpbmUgYWJvdmUgd2l0aCB0aGUgZm9sbG93aW5nOgotIyBDQ09QVD0iJENDT1BUIC1XbCwtYk06U1JFIC1XbCwtVDUxMiAtV2wsLUg1MTIgLWJydGwgLWJub3J0bGxpYiAtbG0gLW8gJG9iamZpbGUiCitpZiB0ZXN0IC16ICIkbGRzb2NvcmVtb2RlIjsgdGhlbgorICBDQ09QVD0iLVdsLC1lJGVudHJ5IC1XbCwtYkU6JGV4cGZpbGUgLVdsLC1iSTokaW1wZmlsZSAtV2wsLWJoYWx0OjQiCitlbHNlCisgIENDT1BUPSItV2wsLWJub2VudHJ5IC1XbCwtYkU6JGV4cGZpbGUgLVdsLC1iaGFsdDo0IgorZmkKK0NDT1BUPSIkQ0NPUFQgLVdsLC1iTTpTUkUgLVdsLC1UNTEyIC1XbCwtSDUxMiAtV2wsLWJydGwgLVdsLC1ibm9ydGxsaWIgLWxtIC1vICRvYmpmaWxlIgogCiBDQ0FSR1M9IiRhcmdzIgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL21haW4uYyBiL01vZHVsZXMvbWFpbi5jCmluZGV4IGRkMTk2ZWYuLmExM2QxNjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWFpbi5jCisrKyBiL01vZHVsZXMvbWFpbi5jCkBAIC04Myw2ICs4Myw3IEBACiAgICAgICAgICBjYW4gYmUgc3VwcGxpZWQgbXVsdGlwbGUgdGltZXMgdG8gaW5jcmVhc2UgdmVyYm9zaXR5XG5cCiAtViAgICAgOiBwcmludCB0aGUgUHl0aG9uIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0IChhbHNvIC0tdmVyc2lvbilcblwKIC1XIGFyZyA6IHdhcm5pbmcgY29udHJvbDsgYXJnIGlzIGFjdGlvbjptZXNzYWdlOmNhdGVnb3J5Om1vZHVsZTpsaW5lbm9cblwKKyAgICAgICAgIGFsc28gUFlUSE9OV0FSTklOR1M9YXJnXG5cCiAteCAgICAgOiBza2lwIGZpcnN0IGxpbmUgb2Ygc291cmNlLCBhbGxvd2luZyB1c2Ugb2Ygbm9uLVVuaXggZm9ybXMgb2YgIyFjbWRcblwKICI7CiBzdGF0aWMgY2hhciAqdXNhZ2VfNCA9ICJcCkBAIC00MDUsNiArNDA2LDEwIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAgIGlmIChQeV9QeTNrV2FybmluZ0ZsYWcgJiYgIVB5X1RhYmNoZWNrRmxhZykKKyAgICAgICAgLyogLTMgaW1wbGllcyAtdCAoYnV0IG5vdCAtdHQpICovCisgICAgICAgIFB5X1RhYmNoZWNrRmxhZyA9IDE7CisKICAgICBpZiAoIVB5X0luc3BlY3RGbGFnICYmCiAgICAgICAgIChwID0gUHlfR0VURU5WKCJQWVRIT05JTlNQRUNUIikpICYmICpwICE9ICdcMCcpCiAgICAgICAgIFB5X0luc3BlY3RGbGFnID0gMTsKQEAgLTQxNiw2ICs0MjEsMjEgQEAKICAgICAgICAgKHAgPSBQeV9HRVRFTlYoIlBZVEhPTk5PVVNFUlNJVEUiKSkgJiYgKnAgIT0gJ1wwJykKICAgICAgICAgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSA9IDE7CiAKKyAgICBpZiAoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTldBUk5JTkdTIikpICYmICpwICE9ICdcMCcpIHsKKyAgICAgICAgY2hhciAqYnVmLCAqd2FybmluZzsKKworICAgICAgICBidWYgPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4ocCkgKyAxKTsKKyAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKKyAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IFBZVEhPTldBUk5JTkdTIik7CisgICAgICAgIHN0cmNweShidWYsIHApOworICAgICAgICBmb3IgKHdhcm5pbmcgPSBzdHJ0b2soYnVmLCAiLCIpOworICAgICAgICAgICAgIHdhcm5pbmcgIT0gTlVMTDsKKyAgICAgICAgICAgICB3YXJuaW5nID0gc3RydG9rKE5VTEwsICIsIikpCisgICAgICAgICAgICBQeVN5c19BZGRXYXJuT3B0aW9uKHdhcm5pbmcpOworICAgICAgICBmcmVlKGJ1Zik7CisgICAgfQorCiAgICAgaWYgKGNvbW1hbmQgPT0gTlVMTCAmJiBtb2R1bGUgPT0gTlVMTCAmJiBfUHlPU19vcHRpbmQgPCBhcmdjICYmCiAgICAgICAgIHN0cmNtcChhcmd2W19QeU9TX29wdGluZF0sICItIikgIT0gMCkKICAgICB7CkBAIC01MDAsNyArNTIwLDkgQEAKIAogICAgIGlmIChtb2R1bGUgIT0gTlVMTCkgewogICAgICAgICAvKiBCYWNrdXAgX1B5T1Nfb3B0aW5kIGFuZCBmb3JjZSBzeXMuYXJndlswXSA9ICctYycKLSAgICAgICAgICAgc28gdGhhdCBQeVN5c19TZXRBcmd2IGNvcnJlY3RseSBzZXRzIHN5cy5wYXRoWzBdIHRvICcnKi8KKyAgICAgICAgICAgc28gdGhhdCBQeVN5c19TZXRBcmd2IGNvcnJlY3RseSBzZXRzIHN5cy5wYXRoWzBdIHRvICcnCisgICAgICAgICAgIHJhdGhlciB0aGFuIGxvb2tpbmcgZm9yIGEgZmlsZSBjYWxsZWQgIi1tIi4gU2VlCisgICAgICAgICAgIHRyYWNrZXIgaXNzdWUgIzgyMDIgZm9yIGRldGFpbHMuICovCiAgICAgICAgIF9QeU9TX29wdGluZC0tOwogICAgICAgICBhcmd2W19QeU9TX29wdGluZF0gPSAiLWMiOwogICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvbWF0aG1vZHVsZS5jIGIvTW9kdWxlcy9tYXRobW9kdWxlLmMKaW5kZXggNGI1MWVlOS4uY2Q3NGIwZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tYXRobW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tYXRobW9kdWxlLmMKQEAgLTUzLDU0ICs1Myw0NzUgQEAKICAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAibG9uZ2ludHJlcHIuaCIgLyoganVzdCBmb3IgU0hJRlQgKi8KKyNpbmNsdWRlICJfbWF0aC5oIgogCiAjaWZkZWYgX09TRl9TT1VSQ0UKIC8qIE9TRjEgNS4xIGRvZXNuJ3QgbWFrZSB0aGlzIGF2YWlsYWJsZSB3aXRoIFhPUEVOX1NPVVJDRV9FWFRFTkRFRCBkZWZpbmVkICovCiBleHRlcm4gZG91YmxlIGNvcHlzaWduKGRvdWJsZSwgZG91YmxlKTsKICNlbmRpZgogCi0vKiBDYWxsIGlzX2Vycm9yIHdoZW4gZXJybm8gIT0gMCwgYW5kIHdoZXJlIHggaXMgdGhlIHJlc3VsdCBsaWJtCi0gKiByZXR1cm5lZC4gIGlzX2Vycm9yIHdpbGwgdXN1YWxseSBzZXQgdXAgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4KLSAqIHRydWUgKDEpLCBidXQgbWF5IHJldHVybiBmYWxzZSAoMCkgd2l0aG91dCBzZXR0aW5nIHVwIGFuIGV4Y2VwdGlvbi4KLSAqLwotc3RhdGljIGludAotaXNfZXJyb3IoZG91YmxlIHgpCi17Ci0gICAgaW50IHJlc3VsdCA9IDE7ICAgICAvKiBwcmVzdW1wdGlvbiBvZiBndWlsdCAqLwotICAgIGFzc2VydChlcnJubyk7ICAgICAgLyogbm9uLXplcm8gZXJybm8gaXMgYSBwcmVjb25kaXRpb24gZm9yIGNhbGxpbmcgKi8KLSAgICBpZiAoZXJybm8gPT0gRURPTSkKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJtYXRoIGRvbWFpbiBlcnJvciIpOworLyoKKyAgIHNpbihwaSp4KSwgZ2l2aW5nIGFjY3VyYXRlIHJlc3VsdHMgZm9yIGFsbCBmaW5pdGUgeCAoZXNwZWNpYWxseSB4CisgICBpbnRlZ3JhbCBvciBjbG9zZSB0byBhbiBpbnRlZ2VyKS4gIFRoaXMgaXMgaGVyZSBmb3IgdXNlIGluIHRoZQorICAgcmVmbGVjdGlvbiBmb3JtdWxhIGZvciB0aGUgZ2FtbWEgZnVuY3Rpb24uICBJdCBjb25mb3JtcyB0byBJRUVFCisgICA3NTQtMjAwOCBmb3IgZmluaXRlIGFyZ3VtZW50cywgYnV0IG5vdCBmb3IgaW5maW5pdGllcyBvciBuYW5zLgorKi8KIAotICAgIGVsc2UgaWYgKGVycm5vID09IEVSQU5HRSkgewotICAgICAgICAvKiBBTlNJIEMgZ2VuZXJhbGx5IHJlcXVpcmVzIGxpYm0gZnVuY3Rpb25zIHRvIHNldCBFUkFOR0UKLSAgICAgICAgICogb24gb3ZlcmZsb3csIGJ1dCBhbHNvIGdlbmVyYWxseSAqYWxsb3dzKiB0aGVtIHRvIHNldAotICAgICAgICAgKiBFUkFOR0Ugb24gdW5kZXJmbG93IHRvby4gIFRoZXJlJ3Mgbm8gY29uc2lzdGVuY3kgYWJvdXQKLSAgICAgICAgICogdGhlIGxhdHRlciBhY3Jvc3MgcGxhdGZvcm1zLgotICAgICAgICAgKiBBbGFzLCBDOTkgbmV2ZXIgcmVxdWlyZXMgdGhhdCBlcnJubyBiZSBzZXQuCi0gICAgICAgICAqIEhlcmUgd2Ugc3VwcHJlc3MgdGhlIHVuZGVyZmxvdyBlcnJvcnMgKGxpYm0gZnVuY3Rpb25zCi0gICAgICAgICAqIHNob3VsZCByZXR1cm4gYSB6ZXJvIG9uIHVuZGVyZmxvdywgYW5kICstIEhVR0VfVkFMIG9uCi0gICAgICAgICAqIG92ZXJmbG93LCBzbyB0ZXN0aW5nIHRoZSByZXN1bHQgZm9yIHplcm8gc3VmZmljZXMgdG8KLSAgICAgICAgICogZGlzdGluZ3Vpc2ggdGhlIGNhc2VzKS4KLSAgICAgICAgICoKLSAgICAgICAgICogT24gc29tZSBwbGF0Zm9ybXMgKFVidW50dS9pYTY0KSBpdCBzZWVtcyB0aGF0IGVycm5vIGNhbiBiZQotICAgICAgICAgKiBzZXQgdG8gRVJBTkdFIGZvciBzdWJub3JtYWwgcmVzdWx0cyB0aGF0IGRvICpub3QqIHVuZGVyZmxvdwotICAgICAgICAgKiB0byB6ZXJvLiAgU28gdG8gYmUgc2FmZSwgd2UnbGwgaWdub3JlIEVSQU5HRSB3aGVuZXZlciB0aGUKLSAgICAgICAgICogZnVuY3Rpb24gcmVzdWx0IGlzIGxlc3MgdGhhbiBvbmUgaW4gYWJzb2x1dGUgdmFsdWUuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoZmFicyh4KSA8IDEuMCkKLSAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXRoIHJhbmdlIGVycm9yIik7CitzdGF0aWMgY29uc3QgZG91YmxlIHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI4ODQxOTc7CitzdGF0aWMgY29uc3QgZG91YmxlIHNxcnRwaSA9IDEuNzcyNDUzODUwOTA1NTE2MDI3Mjk4MTY3NDgzMzQxMTQ1MTgyNzk4OworCitzdGF0aWMgZG91YmxlCitzaW5waShkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgeSwgcjsKKyAgICBpbnQgbjsKKyAgICAvKiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGV2ZXIgYmUgY2FsbGVkIGZvciBmaW5pdGUgYXJndW1lbnRzICovCisgICAgYXNzZXJ0KFB5X0lTX0ZJTklURSh4KSk7CisgICAgeSA9IGZtb2QoZmFicyh4KSwgMi4wKTsKKyAgICBuID0gKGludClyb3VuZCgyLjAqeSk7CisgICAgYXNzZXJ0KDAgPD0gbiAmJiBuIDw9IDQpOworICAgIHN3aXRjaCAobikgeworICAgIGNhc2UgMDoKKyAgICAgICAgciA9IHNpbihwaSp5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICByID0gY29zKHBpKih5LTAuNSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIC8qIE4uQi4gLXNpbihwaSooeS0xLjApKSBpcyAqbm90KiBlcXVpdmFsZW50OiBpdCB3b3VsZCBnaXZlCisgICAgICAgICAgIC0wLjAgaW5zdGVhZCBvZiAwLjAgd2hlbiB5ID09IDEuMC4gKi8KKyAgICAgICAgciA9IHNpbihwaSooMS4wLXkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICByID0gLWNvcyhwaSooeS0xLjUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICByID0gc2luKHBpKih5LTIuMCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoMCk7ICAvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKyAgICAgICAgciA9IC0xLjIzZTIwMDsgLyogc2lsZW5jZSBnY2Mgd2FybmluZyAqLwogICAgIH0KLSAgICBlbHNlCi0gICAgICAgIC8qIFVuZXhwZWN0ZWQgbWF0aCBlcnJvciAqLwotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfVmFsdWVFcnJvcik7CisgICAgcmV0dXJuIGNvcHlzaWduKDEuMCwgeCkqcjsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIHJlYWwgZ2FtbWEgZnVuY3Rpb24uICBJbiBleHRlbnNpdmUgYnV0IG5vbi1leGhhdXN0aXZlCisgICByYW5kb20gdGVzdHMsIHRoaXMgZnVuY3Rpb24gcHJvdmVkIGFjY3VyYXRlIHRvIHdpdGhpbiA8PSAxMCB1bHBzIGFjcm9zcyB0aGUKKyAgIGVudGlyZSBmbG9hdCBkb21haW4uICBOb3RlIHRoYXQgYWNjdXJhY3kgbWF5IGRlcGVuZCBvbiB0aGUgcXVhbGl0eSBvZiB0aGUKKyAgIHN5c3RlbSBtYXRoIGZ1bmN0aW9ucywgdGhlIHBvdyBmdW5jdGlvbiBpbiBwYXJ0aWN1bGFyLiAgU3BlY2lhbCBjYXNlcworICAgZm9sbG93IEM5OSBhbm5leCBGLiAgVGhlIHBhcmFtZXRlcnMgYW5kIG1ldGhvZCBhcmUgdGFpbG9yZWQgdG8gcGxhdGZvcm1zCisgICB3aG9zZSBkb3VibGUgZm9ybWF0IGlzIHRoZSBJRUVFIDc1NCBiaW5hcnk2NCBmb3JtYXQuCisKKyAgIE1ldGhvZDogZm9yIHggPiAwLjAgd2UgdXNlIHRoZSBMYW5jem9zIGFwcHJveGltYXRpb24gd2l0aCBwYXJhbWV0ZXJzIE49MTMKKyAgIGFuZCBnPTYuMDI0NjgwMDQwNzc2NzI5NTgzNzQwMjM0Mzc1OyB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBhbW9uZ3N0IHRob3NlCisgICB1c2VkIGJ5IHRoZSBCb29zdCBsaWJyYXJ5LiAgRm9sbG93aW5nIEJvb3N0IChhZ2FpbiksIHdlIHJlLWV4cHJlc3MgdGhlCisgICBMYW5jem9zIHN1bSBhcyBhIHJhdGlvbmFsIGZ1bmN0aW9uLCBhbmQgY29tcHV0ZSBpdCB0aGF0IHdheS4gIFRoZQorICAgY29lZmZpY2llbnRzIGJlbG93IHdlcmUgY29tcHV0ZWQgaW5kZXBlbmRlbnRseSB1c2luZyBNUEZSLCBhbmQgaGF2ZSBiZWVuCisgICBkb3VibGUtY2hlY2tlZCBhZ2FpbnN0IHRoZSBjb2VmZmljaWVudHMgaW4gdGhlIEJvb3N0IHNvdXJjZSBjb2RlLgorCisgICBGb3IgeCA8IDAuMCB3ZSB1c2UgdGhlIHJlZmxlY3Rpb24gZm9ybXVsYS4KKworICAgVGhlcmUncyBvbmUgbWlub3IgdHdlYWsgdGhhdCBkZXNlcnZlcyBleHBsYW5hdGlvbjogTGFuY3pvcycgZm9ybXVsYSBmb3IKKyAgIEdhbW1hKHgpIGludm9sdmVzIGNvbXB1dGluZyBwb3coeCtnLTAuNSwgeC0wLjUpIC8gZXhwKHgrZy0wLjUpLiAgRm9yIG1hbnkgeAorICAgdmFsdWVzLCB4K2ctMC41IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LiAgSG93ZXZlciwgaW4gY2FzZXMgd2hlcmUgaXQKKyAgIGNhbid0IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgdGhlIHNtYWxsIGVycm9yIGluIHgrZy0wLjUgY2FuIGJlIG1hZ25pZmllZAorICAgc2lnbmlmaWNhbnRseSBieSB0aGUgcG93IGFuZCBleHAgY2FsbHMsIGVzcGVjaWFsbHkgZm9yIGxhcmdlIHguICBBIGNoZWFwCisgICBjb3JyZWN0aW9uIGlzIHRvIG11bHRpcGx5IGJ5ICgxICsgZSpnLyh4K2ctMC41KSksIHdoZXJlIGUgaXMgdGhlIGVycm9yCisgICBpbnZvbHZlZCBpbiB0aGUgY29tcHV0YXRpb24gb2YgeCtnLTAuNSAodGhhdCBpcywgZSA9IGNvbXB1dGVkIHZhbHVlIG9mCisgICB4K2ctMC41IC0gZXhhY3QgdmFsdWUgb2YgeCtnLTAuNSkuICBIZXJlJ3MgdGhlIHByb29mOgorCisgICBDb3JyZWN0aW9uIGZhY3RvcgorICAgLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFdyaXRlIHgrZy0wLjUgPSB5LWUsIHdoZXJlIHkgaXMgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGFuIElFRUUgNzU0CisgICBkb3VibGUsIGFuZCBlIGlzIHRpbnkuICBUaGVuOgorCisgICAgIHBvdyh4K2ctMC41LHgtMC41KS9leHAoeCtnLTAuNSkgPSBwb3coeS1lLCB4LTAuNSkvZXhwKHktZSkKKyAgICAgPSBwb3coeSwgeC0wLjUpL2V4cCh5KSAqIEMsCisKKyAgIHdoZXJlIHRoZSBjb3JyZWN0aW9uX2ZhY3RvciBDIGlzIGdpdmVuIGJ5CisKKyAgICAgQyA9IHBvdygxLWUveSwgeC0wLjUpICogZXhwKGUpCisKKyAgIFNpbmNlIGUgaXMgdGlueSwgcG93KDEtZS95LCB4LTAuNSkgfiAxLSh4LTAuNSkqZS95LCBhbmQgZXhwKHgpIH4gMStlLCBzbzoKKworICAgICBDIH4gKDEtKHgtMC41KSplL3kpICogKDErZSkgfiAxICsgZSooeS0oeC0wLjUpKS95CisKKyAgIEJ1dCB5LSh4LTAuNSkgPSBnK2UsIGFuZCBnK2UgfiBnLiAgU28gd2UgZ2V0IEMgfiAxICsgZSpnL3ksIGFuZAorCisgICAgIHBvdyh4K2ctMC41LHgtMC41KS9leHAoeCtnLTAuNSkgfiBwb3coeSwgeC0wLjUpL2V4cCh5KSAqICgxICsgZSpnL3kpLAorCisgICBOb3RlIHRoYXQgZm9yIGFjY3VyYWN5LCB3aGVuIGNvbXB1dGluZyByKkMgaXQncyBiZXR0ZXIgdG8gZG8KKworICAgICByICsgZSpnL3kqcjsKKworICAgdGhhbgorCisgICAgIHIgKiAoMSArIGUqZy95KTsKKworICAgc2luY2UgdGhlIGFkZGl0aW9uIGluIHRoZSBsYXR0ZXIgdGhyb3dzIGF3YXkgbW9zdCBvZiB0aGUgYml0cyBvZgorICAgaW5mb3JtYXRpb24gaW4gZSpnL3kuCisqLworCisjZGVmaW5lIExBTkNaT1NfTiAxMworc3RhdGljIGNvbnN0IGRvdWJsZSBsYW5jem9zX2cgPSA2LjAyNDY4MDA0MDc3NjcyOTU4Mzc0MDIzNDM3NTsKK3N0YXRpYyBjb25zdCBkb3VibGUgbGFuY3pvc19nX21pbnVzX2hhbGYgPSA1LjUyNDY4MDA0MDc3NjcyOTU4Mzc0MDIzNDM3NTsKK3N0YXRpYyBjb25zdCBkb3VibGUgbGFuY3pvc19udW1fY29lZmZzW0xBTkNaT1NfTl0gPSB7CisgICAgMjM1MzEzNzY4ODAuNDEwNzU5Njg4NTcyMDA3Njc0NDUxNjM2NzU0NzM0ODQ2ODA0OTQwLAorICAgIDQyOTE5ODAzNjQyLjY0OTA5ODc2ODk1Nzg5OTA0NzAwMTk4ODg1MDkyNjM1NTg0ODk1OSwKKyAgICAzNTcxMTk1OTIzNy4zNTU2NjgwNDk0NDAxODU0NTE1NDcxNjY3MDU5NjA0ODg2MzU4NDMsCisgICAgMTc5MjEwMzQ0MjYuMDM3MjA5Njk5OTE5NzU1NzU0NDU4OTMxMTEyNjcxNDAzMjY1MzkwLAorICAgIDYwMzk1NDI1ODYuMzUyMDI4MDA1MDY0MjkxNjQ0MzA3Mjk3OTIxMDY5OTM4ODQyMDcwOCwKKyAgICAxNDM5NzIwNDA3LjMxMTcyMTY3MzY2MzIyMzA3Mjc5NDkxMjM5Mzk3MTU0ODU3ODY3NzIsCisgICAgMjQ4ODc0NTU3Ljg2MjA1NDE1NjUxMTQ2MDM4NjQxMzIyOTQyMzIxNjMyMTI1MTI3ODAxLAorICAgIDMxNDI2NDE1LjU4NTQwMDE5NDM4MDYxNDIzMTYyODMxODIwNTM2Mjg3NDY4NDk4NzY0MCwKKyAgICAyODc2MzcwLjYyODkzNTM3MjQ0MTIyNTQwOTA1MTYyMDg0OTYxMzU5OTExNDUzNzg3NjgsCisgICAgMTg2MDU2LjI2NTM5NTIyMzQ5NTA0MDI5NDk4OTcxNjA0NTY5OTI4MjIwNzg0MjM2MzI4LAorICAgIDgwNzEuNjcyMDAyMzY1ODE2MjEwNjM4MDAyOTAyMjcyMjUwNjEzODIxODUxNjMyNTAyNCwKKyAgICAyMTAuODI0Mjc3NzUxNTc5MzQ1ODcyNTA5NzMzOTIwNzEzMzYyNzExNjY5Njk1ODAyOTEsCisgICAgMi41MDY2MjgyNzQ2MzEwMDAyNzAxNjQ5MDgxNzcxMzM4MzczMzg2MjY0MzEwNzkzNDA4Cit9OworCisvKiBkZW5vbWluYXRvciBpcyB4Kih4KzEpKi4uLiooeCtMQU5DWk9TX04tMikgKi8KK3N0YXRpYyBjb25zdCBkb3VibGUgbGFuY3pvc19kZW5fY29lZmZzW0xBTkNaT1NfTl0gPSB7CisgICAgMC4wLCAzOTkxNjgwMC4wLCAxMjA1NDM4NDAuMCwgMTUwOTE3OTc2LjAsIDEwNTI1ODA3Ni4wLCA0NTk5NTczMC4wLAorICAgIDEzMzM5NTM1LjAsIDI2Mzc1NTguMCwgMzU3NDIzLjAsIDMyNjcwLjAsIDE5MjUuMCwgNjYuMCwgMS4wfTsKKworLyogZ2FtbWEgdmFsdWVzIGZvciBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VycywgMSB0aG91Z2ggTkdBTU1BX0lOVEVHUkFMICovCisjZGVmaW5lIE5HQU1NQV9JTlRFR1JBTCAyMworc3RhdGljIGNvbnN0IGRvdWJsZSBnYW1tYV9pbnRlZ3JhbFtOR0FNTUFfSU5URUdSQUxdID0geworICAgIDEuMCwgMS4wLCAyLjAsIDYuMCwgMjQuMCwgMTIwLjAsIDcyMC4wLCA1MDQwLjAsIDQwMzIwLjAsIDM2Mjg4MC4wLAorICAgIDM2Mjg4MDAuMCwgMzk5MTY4MDAuMCwgNDc5MDAxNjAwLjAsIDYyMjcwMjA4MDAuMCwgODcxNzgyOTEyMDAuMCwKKyAgICAxMzA3Njc0MzY4MDAwLjAsIDIwOTIyNzg5ODg4MDAwLjAsIDM1NTY4NzQyODA5NjAwMC4wLAorICAgIDY0MDIzNzM3MDU3MjgwMDAuMCwgMTIxNjQ1MTAwNDA4ODMyMDAwLjAsIDI0MzI5MDIwMDgxNzY2NDAwMDAuMCwKKyAgICA1MTA5MDk0MjE3MTcwOTQ0MDAwMC4wLCAxMTI0MDAwNzI3Nzc3NjA3NjgwMDAwLjAsCit9OworCisvKiBMYW5jem9zJyBzdW0gTF9nKHgpLCBmb3IgcG9zaXRpdmUgeCAqLworCitzdGF0aWMgZG91YmxlCitsYW5jem9zX3N1bShkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgbnVtID0gMC4wLCBkZW4gPSAwLjA7CisgICAgaW50IGk7CisgICAgYXNzZXJ0KHggPiAwLjApOworICAgIC8qIGV2YWx1YXRlIHRoZSByYXRpb25hbCBmdW5jdGlvbiBsYW5jem9zX3N1bSh4KS4gIEZvciBsYXJnZQorICAgICAgIHgsIHRoZSBvYnZpb3VzIGFsZ29yaXRobSByaXNrcyBvdmVyZmxvdywgc28gd2UgaW5zdGVhZAorICAgICAgIHJlc2NhbGUgdGhlIGRlbm9taW5hdG9yIGFuZCBudW1lcmF0b3Igb2YgdGhlIHJhdGlvbmFsCisgICAgICAgZnVuY3Rpb24gYnkgeCoqKDEtTEFOQ1pPU19OKSBhbmQgdHJlYXQgdGhpcyBhcyBhCisgICAgICAgcmF0aW9uYWwgZnVuY3Rpb24gaW4gMS94LiAgVGhpcyBhbHNvIHJlZHVjZXMgdGhlIGVycm9yIGZvcgorICAgICAgIGxhcmdlciB4IHZhbHVlcy4gIFRoZSBjaG9pY2Ugb2YgY3V0b2ZmIHBvaW50ICg1LjAgYmVsb3cpIGlzCisgICAgICAgc29tZXdoYXQgYXJiaXRyYXJ5OyBpbiB0ZXN0cywgc21hbGxlciBjdXRvZmYgdmFsdWVzIHRoYW4KKyAgICAgICB0aGlzIHJlc3VsdGVkIGluIGxvd2VyIGFjY3VyYWN5LiAqLworICAgIGlmICh4IDwgNS4wKSB7CisgICAgICAgIGZvciAoaSA9IExBTkNaT1NfTjsgLS1pID49IDA7ICkgeworICAgICAgICAgICAgbnVtID0gbnVtICogeCArIGxhbmN6b3NfbnVtX2NvZWZmc1tpXTsKKyAgICAgICAgICAgIGRlbiA9IGRlbiAqIHggKyBsYW5jem9zX2Rlbl9jb2VmZnNbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBMQU5DWk9TX047IGkrKykgeworICAgICAgICAgICAgbnVtID0gbnVtIC8geCArIGxhbmN6b3NfbnVtX2NvZWZmc1tpXTsKKyAgICAgICAgICAgIGRlbiA9IGRlbiAvIHggKyBsYW5jem9zX2Rlbl9jb2VmZnNbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bS9kZW47Cit9CisKK3N0YXRpYyBkb3VibGUKK21fdGdhbW1hKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSBhYnN4LCByLCB5LCB6LCBzcXJ0cG93OworCisgICAgLyogc3BlY2lhbCBjYXNlcyAqLworICAgIGlmICghUHlfSVNfRklOSVRFKHgpKSB7CisgICAgICAgIGlmIChQeV9JU19OQU4oeCkgfHwgeCA+IDAuMCkKKyAgICAgICAgICAgIHJldHVybiB4OyAgLyogdGdhbW1hKG5hbikgPSBuYW4sIHRnYW1tYShpbmYpID0gaW5mICovCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZXJybm8gPSBFRE9NOworICAgICAgICAgICAgcmV0dXJuIFB5X05BTjsgIC8qIHRnYW1tYSgtaW5mKSA9IG5hbiwgaW52YWxpZCAqLworICAgICAgICB9CisgICAgfQorICAgIGlmICh4ID09IDAuMCkgeworICAgICAgICBlcnJubyA9IEVET007CisgICAgICAgIHJldHVybiAxLjAveDsgLyogdGdhbW1hKCstMC4wKSA9ICstaW5mLCBkaXZpZGUtYnktemVybyAqLworICAgIH0KKworICAgIC8qIGludGVnZXIgYXJndW1lbnRzICovCisgICAgaWYgKHggPT0gZmxvb3IoeCkpIHsKKyAgICAgICAgaWYgKHggPCAwLjApIHsKKyAgICAgICAgICAgIGVycm5vID0gRURPTTsgIC8qIHRnYW1tYShuKSA9IG5hbiwgaW52YWxpZCBmb3IgKi8KKyAgICAgICAgICAgIHJldHVybiBQeV9OQU47IC8qIG5lZ2F0aXZlIGludGVnZXJzIG4gKi8KKyAgICAgICAgfQorICAgICAgICBpZiAoeCA8PSBOR0FNTUFfSU5URUdSQUwpCisgICAgICAgICAgICByZXR1cm4gZ2FtbWFfaW50ZWdyYWxbKGludCl4IC0gMV07CisgICAgfQorICAgIGFic3ggPSBmYWJzKHgpOworCisgICAgLyogdGlueSBhcmd1bWVudHM6ICB0Z2FtbWEoeCkgfiAxL3ggZm9yIHggbmVhciAwICovCisgICAgaWYgKGFic3ggPCAxZS0yMCkgeworICAgICAgICByID0gMS4wL3g7CisgICAgICAgIGlmIChQeV9JU19JTkZJTklUWShyKSkKKyAgICAgICAgICAgIGVycm5vID0gRVJBTkdFOworICAgICAgICByZXR1cm4gcjsKKyAgICB9CisKKyAgICAvKiBsYXJnZSBhcmd1bWVudHM6IGFzc3VtaW5nIElFRUUgNzU0IGRvdWJsZXMsIHRnYW1tYSh4KSBvdmVyZmxvd3MgZm9yCisgICAgICAgeCA+IDIwMCwgYW5kIHVuZGVyZmxvd3MgdG8gKy0wLjAgZm9yIHggPCAtMjAwLCBub3QgYSBuZWdhdGl2ZQorICAgICAgIGludGVnZXIuICovCisgICAgaWYgKGFic3ggPiAyMDAuMCkgeworICAgICAgICBpZiAoeCA8IDAuMCkgeworICAgICAgICAgICAgcmV0dXJuIDAuMC9zaW5waSh4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVycm5vID0gRVJBTkdFOworICAgICAgICAgICAgcmV0dXJuIFB5X0hVR0VfVkFMOworICAgICAgICB9CisgICAgfQorCisgICAgeSA9IGFic3ggKyBsYW5jem9zX2dfbWludXNfaGFsZjsKKyAgICAvKiBjb21wdXRlIGVycm9yIGluIHN1bSAqLworICAgIGlmIChhYnN4ID4gbGFuY3pvc19nX21pbnVzX2hhbGYpIHsKKyAgICAgICAgLyogbm90ZTogdGhlIGNvcnJlY3Rpb24gY2FuIGJlIGZvaWxlZCBieSBhbiBvcHRpbWl6aW5nCisgICAgICAgICAgIGNvbXBpbGVyIHRoYXQgKGluY29ycmVjdGx5KSB0aGlua3MgdGhhdCBhbiBleHByZXNzaW9uIGxpa2UKKyAgICAgICAgICAgYSArIGIgLSBhIC0gYiBjYW4gYmUgb3B0aW1pemVkIHRvIDAuMC4gIFRoaXMgc2hvdWxkbid0CisgICAgICAgICAgIGhhcHBlbiBpbiBhIHN0YW5kYXJkcy1jb25mb3JtaW5nIGNvbXBpbGVyLiAqLworICAgICAgICBkb3VibGUgcSA9IHkgLSBhYnN4OworICAgICAgICB6ID0gcSAtIGxhbmN6b3NfZ19taW51c19oYWxmOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZG91YmxlIHEgPSB5IC0gbGFuY3pvc19nX21pbnVzX2hhbGY7CisgICAgICAgIHogPSBxIC0gYWJzeDsKKyAgICB9CisgICAgeiA9IHogKiBsYW5jem9zX2cgLyB5OworICAgIGlmICh4IDwgMC4wKSB7CisgICAgICAgIHIgPSAtcGkgLyBzaW5waShhYnN4KSAvIGFic3ggKiBleHAoeSkgLyBsYW5jem9zX3N1bShhYnN4KTsKKyAgICAgICAgciAtPSB6ICogcjsKKyAgICAgICAgaWYgKGFic3ggPCAxNDAuMCkgeworICAgICAgICAgICAgciAvPSBwb3coeSwgYWJzeCAtIDAuNSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzcXJ0cG93ID0gcG93KHksIGFic3ggLyAyLjAgLSAwLjI1KTsKKyAgICAgICAgICAgIHIgLz0gc3FydHBvdzsKKyAgICAgICAgICAgIHIgLz0gc3FydHBvdzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgciA9IGxhbmN6b3Nfc3VtKGFic3gpIC8gZXhwKHkpOworICAgICAgICByICs9IHogKiByOworICAgICAgICBpZiAoYWJzeCA8IDE0MC4wKSB7CisgICAgICAgICAgICByICo9IHBvdyh5LCBhYnN4IC0gMC41KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNxcnRwb3cgPSBwb3coeSwgYWJzeCAvIDIuMCAtIDAuMjUpOworICAgICAgICAgICAgciAqPSBzcXJ0cG93OworICAgICAgICAgICAgciAqPSBzcXJ0cG93OworICAgICAgICB9CisgICAgfQorICAgIGlmIChQeV9JU19JTkZJTklUWShyKSkKKyAgICAgICAgZXJybm8gPSBFUkFOR0U7CisgICAgcmV0dXJuIHI7Cit9CisKKy8qCisgICBsZ2FtbWE6ICBuYXR1cmFsIGxvZyBvZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIEdhbW1hIGZ1bmN0aW9uLgorICAgRm9yIGxhcmdlIGFyZ3VtZW50cywgTGFuY3pvcycgZm9ybXVsYSB3b3JrcyBleHRyZW1lbHkgd2VsbCBoZXJlLgorKi8KKworc3RhdGljIGRvdWJsZQorbV9sZ2FtbWEoZG91YmxlIHgpCit7CisgICAgZG91YmxlIHIsIGFic3g7CisKKyAgICAvKiBzcGVjaWFsIGNhc2VzICovCisgICAgaWYgKCFQeV9JU19GSU5JVEUoeCkpIHsKKyAgICAgICAgaWYgKFB5X0lTX05BTih4KSkKKyAgICAgICAgICAgIHJldHVybiB4OyAgLyogbGdhbW1hKG5hbikgPSBuYW4gKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFB5X0hVR0VfVkFMOyAvKiBsZ2FtbWEoKy1pbmYpID0gK2luZiAqLworICAgIH0KKworICAgIC8qIGludGVnZXIgYXJndW1lbnRzICovCisgICAgaWYgKHggPT0gZmxvb3IoeCkgJiYgeCA8PSAyLjApIHsKKyAgICAgICAgaWYgKHggPD0gMC4wKSB7CisgICAgICAgICAgICBlcnJubyA9IEVET007ICAvKiBsZ2FtbWEobikgPSBpbmYsIGRpdmlkZS1ieS16ZXJvIGZvciAqLworICAgICAgICAgICAgcmV0dXJuIFB5X0hVR0VfVkFMOyAvKiBpbnRlZ2VycyBuIDw9IDAgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAwLjA7IC8qIGxnYW1tYSgxKSA9IGxnYW1tYSgyKSA9IDAuMCAqLworICAgICAgICB9CisgICAgfQorCisgICAgYWJzeCA9IGZhYnMoeCk7CisgICAgLyogdGlueSBhcmd1bWVudHM6IGxnYW1tYSh4KSB+IC1sb2coZmFicyh4KSkgZm9yIHNtYWxsIHggKi8KKyAgICBpZiAoYWJzeCA8IDFlLTIwKQorICAgICAgICByZXR1cm4gLWxvZyhhYnN4KTsKKworICAgIC8qIExhbmN6b3MnIGZvcm11bGEgKi8KKyAgICBpZiAoeCA+IDAuMCkgeworICAgICAgICAvKiB3ZSBjb3VsZCBzYXZlIGEgZnJhY3Rpb24gb2YgYSB1bHAgaW4gYWNjdXJhY3kgYnkgaGF2aW5nIGEKKyAgICAgICAgICAgc2Vjb25kIHNldCBvZiBudW1lcmF0b3IgY29lZmZpY2llbnRzIGZvciBsYW5jem9zX3N1bSB0aGF0CisgICAgICAgICAgIGFic29yYmVkIHRoZSBleHAoLWxhbmN6b3NfZykgdGVybSwgYW5kIHRocm93aW5nIG91dCB0aGUKKyAgICAgICAgICAgbGFuY3pvc19nIHN1YnRyYWN0aW9uIGJlbG93OyBpdCdzIHByb2JhYmx5IG5vdCB3b3J0aCBpdC4gKi8KKyAgICAgICAgciA9IGxvZyhsYW5jem9zX3N1bSh4KSkgLSBsYW5jem9zX2cgKworICAgICAgICAgICAgKHgtMC41KSoobG9nKHgrbGFuY3pvc19nLTAuNSktMSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByID0gbG9nKHBpKSAtIGxvZyhmYWJzKHNpbnBpKGFic3gpKSkgLSBsb2coYWJzeCkgLQorICAgICAgICAgICAgKGxvZyhsYW5jem9zX3N1bShhYnN4KSkgLSBsYW5jem9zX2cgKworICAgICAgICAgICAgIChhYnN4LTAuNSkqKGxvZyhhYnN4K2xhbmN6b3NfZy0wLjUpLTEpKTsKKyAgICB9CisgICAgaWYgKFB5X0lTX0lORklOSVRZKHIpKQorICAgICAgICBlcnJubyA9IEVSQU5HRTsKKyAgICByZXR1cm4gcjsKK30KKworLyoKKyAgIEltcGxlbWVudGF0aW9ucyBvZiB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmKHgpIGFuZCB0aGUgY29tcGxlbWVudGFyeSBlcnJvcgorICAgZnVuY3Rpb24gZXJmYyh4KS4KKworICAgTWV0aG9kOiBmb2xsb3dpbmcgJ051bWVyaWNhbCBSZWNpcGVzJyBieSBGbGFubmVyeSwgUHJlc3MgZXQuIGFsLiAoMm5kIGVkLiwKKyAgIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzKSwgd2UgdXNlIGEgc2VyaWVzIGFwcHJveGltYXRpb24gZm9yIGVyZiBmb3IKKyAgIHNtYWxsIHgsIGFuZCBhIGNvbnRpbnVlZCBmcmFjdGlvbiBhcHByb3hpbWF0aW9uIGZvciBlcmZjKHgpIGZvciBsYXJnZXIgeDsKKyAgIGNvbWJpbmVkIHdpdGggdGhlIHJlbGF0aW9ucyBlcmYoLXgpID0gLWVyZih4KSBhbmQgZXJmYyh4KSA9IDEuMCAtIGVyZih4KSwKKyAgIHRoaXMgZ2l2ZXMgdXMgZXJmKHgpIGFuZCBlcmZjKHgpIGZvciBhbGwgeC4KKworICAgVGhlIHNlcmllcyBleHBhbnNpb24gdXNlZCBpczoKKworICAgICAgZXJmKHgpID0geCpleHAoLXgqeCkvc3FydChwaSkgKiBbCisgICAgICAgICAgICAgICAgICAgICAyLzEgKyA0LzMgeCoqMiArIDgvMTUgeCoqNCArIDE2LzEwNSB4Kio2ICsgLi4uXQorCisgICBUaGUgY29lZmZpY2llbnQgb2YgeCoqKDJrLTIpIGhlcmUgaXMgNCoqaypmYWN0b3JpYWwoaykvZmFjdG9yaWFsKDIqaykuCisgICBUaGlzIHNlcmllcyBjb252ZXJnZXMgd2VsbCBmb3Igc21hbGxpc2ggeCwgYnV0IHNsb3dseSBmb3IgbGFyZ2VyIHguCisKKyAgIFRoZSBjb250aW51ZWQgZnJhY3Rpb24gZXhwYW5zaW9uIHVzZWQgaXM6CisKKyAgICAgIGVyZmMoeCkgPSB4KmV4cCgteCp4KS9zcXJ0KHBpKSAqIFsxLygwLjUgKyB4KioyIC0pIDAuNS8oMi41ICsgeCoqMiAtICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMC8oNC41ICsgeCoqMiAtICkgNy41Lyg2LjUgKyB4KioyIC0gKSAuLi5dCisKKyAgIGFmdGVyIHRoZSBmaXJzdCB0ZXJtLCB0aGUgZ2VuZXJhbCB0ZXJtIGhhcyB0aGUgZm9ybToKKworICAgICAgayooay0wLjUpLygyKmsrMC41ICsgeCoqMiAtIC4uLikuCisKKyAgIFRoaXMgZXhwYW5zaW9uIGNvbnZlcmdlcyBmYXN0IGZvciBsYXJnZXIgeCwgYnV0IGNvbnZlcmdlbmNlIGJlY29tZXMKKyAgIGluZmluaXRlbHkgc2xvdyBhcyB4IGFwcHJvYWNoZXMgMC4wLiAgVGhlIChzb21ld2hhdCBuYWl2ZSkgY29udGludWVkCisgICBmcmFjdGlvbiBldmFsdWF0aW9uIGFsZ29yaXRobSB1c2VkIGJlbG93IGFsc28gcmlza3Mgb3ZlcmZsb3cgZm9yIGxhcmdlIHg7CisgICBidXQgZm9yIGxhcmdlIHgsIGVyZmMoeCkgPT0gMC4wIHRvIHdpdGhpbiBtYWNoaW5lIHByZWNpc2lvbi4gIChGb3IKKyAgIGV4YW1wbGUsIGVyZmMoMzAuMCkgaXMgYXBwcm94aW1hdGVseSAyLjU2ZS0zOTMpLgorCisgICBQYXJhbWV0ZXJzOiB1c2Ugc2VyaWVzIGV4cGFuc2lvbiBmb3IgYWJzKHgpIDwgRVJGX1NFUklFU19DVVRPRkYgYW5kCisgICBjb250aW51ZWQgZnJhY3Rpb24gZXhwYW5zaW9uIGZvciBFUkZfU0VSSUVTX0NVVE9GRiA8PSBhYnMoeCkgPAorICAgRVJGQ19DT05URlJBQ19DVVRPRkYuICBFUkZDX1NFUklFU19URVJNUyBhbmQgRVJGQ19DT05URlJBQ19URVJNUyBhcmUgdGhlCisgICBudW1iZXJzIG9mIHRlcm1zIHRvIHVzZSBmb3IgdGhlIHJlbGV2YW50IGV4cGFuc2lvbnMuICAqLworCisjZGVmaW5lIEVSRl9TRVJJRVNfQ1VUT0ZGIDEuNQorI2RlZmluZSBFUkZfU0VSSUVTX1RFUk1TIDI1CisjZGVmaW5lIEVSRkNfQ09OVEZSQUNfQ1VUT0ZGIDMwLjAKKyNkZWZpbmUgRVJGQ19DT05URlJBQ19URVJNUyA1MAorCisvKgorICAgRXJyb3IgZnVuY3Rpb24sIHZpYSBwb3dlciBzZXJpZXMuCisKKyAgIEdpdmVuIGEgZmluaXRlIGZsb2F0IHgsIHJldHVybiBhbiBhcHByb3hpbWF0aW9uIHRvIGVyZih4KS4KKyAgIENvbnZlcmdlcyByZWFzb25hYmx5IGZhc3QgZm9yIHNtYWxsIHguCisqLworCitzdGF0aWMgZG91YmxlCittX2VyZl9zZXJpZXMoZG91YmxlIHgpCit7CisgICAgZG91YmxlIHgyLCBhY2MsIGZrLCByZXN1bHQ7CisgICAgaW50IGksIHNhdmVkX2Vycm5vOworCisgICAgeDIgPSB4ICogeDsKKyAgICBhY2MgPSAwLjA7CisgICAgZmsgPSAoZG91YmxlKUVSRl9TRVJJRVNfVEVSTVMgKyAwLjU7CisgICAgZm9yIChpID0gMDsgaSA8IEVSRl9TRVJJRVNfVEVSTVM7IGkrKykgeworICAgICAgICBhY2MgPSAyLjAgKyB4MiAqIGFjYyAvIGZrOworICAgICAgICBmayAtPSAxLjA7CisgICAgfQorICAgIC8qIE1ha2Ugc3VyZSB0aGUgZXhwIGNhbGwgZG9lc24ndCBhZmZlY3QgZXJybm87CisgICAgICAgc2VlIG1fZXJmY19jb250ZnJhYyBmb3IgbW9yZS4gKi8KKyAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgIHJlc3VsdCA9IGFjYyAqIHggKiBleHAoLXgyKSAvIHNxcnRwaTsKKyAgICBlcnJubyA9IHNhdmVkX2Vycm5vOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8qCisgICBDb21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uLCB2aWEgY29udGludWVkIGZyYWN0aW9uIGV4cGFuc2lvbi4KKworICAgR2l2ZW4gYSBwb3NpdGl2ZSBmbG9hdCB4LCByZXR1cm4gYW4gYXBwcm94aW1hdGlvbiB0byBlcmZjKHgpLiAgQ29udmVyZ2VzCisgICByZWFzb25hYmx5IGZhc3QgZm9yIHggbGFyZ2UgKHNheSwgeCA+IDIuMCksIGFuZCBzaG91bGQgYmUgc2FmZSBmcm9tCisgICBvdmVyZmxvdyBpZiB4IGFuZCBudGVybXMgYXJlIG5vdCB0b28gbGFyZ2UuICBPbiBhbiBJRUVFIDc1NCBtYWNoaW5lLCB3aXRoIHgKKyAgIDw9IDMwLjAsIHdlJ3JlIHNhZmUgdXAgdG8gbnRlcm1zID0gMTAwLiAgRm9yIHggPj0gMzAuMCwgZXJmYyh4KSBpcyBzbWFsbGVyCisgICB0aGFuIHRoZSBzbWFsbGVzdCByZXByZXNlbnRhYmxlIG5vbnplcm8gZmxvYXQuICAqLworCitzdGF0aWMgZG91YmxlCittX2VyZmNfY29udGZyYWMoZG91YmxlIHgpCit7CisgICAgZG91YmxlIHgyLCBhLCBkYSwgcCwgcF9sYXN0LCBxLCBxX2xhc3QsIGIsIHJlc3VsdDsKKyAgICBpbnQgaSwgc2F2ZWRfZXJybm87CisKKyAgICBpZiAoeCA+PSBFUkZDX0NPTlRGUkFDX0NVVE9GRikKKyAgICAgICAgcmV0dXJuIDAuMDsKKworICAgIHgyID0geCp4OworICAgIGEgPSAwLjA7CisgICAgZGEgPSAwLjU7CisgICAgcCA9IDEuMDsgcF9sYXN0ID0gMC4wOworICAgIHEgPSBkYSArIHgyOyBxX2xhc3QgPSAxLjA7CisgICAgZm9yIChpID0gMDsgaSA8IEVSRkNfQ09OVEZSQUNfVEVSTVM7IGkrKykgeworICAgICAgICBkb3VibGUgdGVtcDsKKyAgICAgICAgYSArPSBkYTsKKyAgICAgICAgZGEgKz0gMi4wOworICAgICAgICBiID0gZGEgKyB4MjsKKyAgICAgICAgdGVtcCA9IHA7IHAgPSBiKnAgLSBhKnBfbGFzdDsgcF9sYXN0ID0gdGVtcDsKKyAgICAgICAgdGVtcCA9IHE7IHEgPSBiKnEgLSBhKnFfbGFzdDsgcV9sYXN0ID0gdGVtcDsKKyAgICB9CisgICAgLyogSXNzdWUgIzg5ODY6IE9uIHNvbWUgcGxhdGZvcm1zLCBleHAgc2V0cyBlcnJubyBvbiB1bmRlcmZsb3cgdG8gemVybzsKKyAgICAgICBzYXZlIHRoZSBjdXJyZW50IGVycm5vIHZhbHVlIHNvIHRoYXQgd2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIuICovCisgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICByZXN1bHQgPSBwIC8gcSAqIHggKiBleHAoLXgyKSAvIHNxcnRwaTsKKyAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEVycm9yIGZ1bmN0aW9uIGVyZih4KSwgZm9yIGdlbmVyYWwgeCAqLworCitzdGF0aWMgZG91YmxlCittX2VyZihkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgYWJzeCwgY2Y7CisKKyAgICBpZiAoUHlfSVNfTkFOKHgpKQorICAgICAgICByZXR1cm4geDsKKyAgICBhYnN4ID0gZmFicyh4KTsKKyAgICBpZiAoYWJzeCA8IEVSRl9TRVJJRVNfQ1VUT0ZGKQorICAgICAgICByZXR1cm4gbV9lcmZfc2VyaWVzKHgpOworICAgIGVsc2UgeworICAgICAgICBjZiA9IG1fZXJmY19jb250ZnJhYyhhYnN4KTsKKyAgICAgICAgcmV0dXJuIHggPiAwLjAgPyAxLjAgLSBjZiA6IGNmIC0gMS4wOworICAgIH0KK30KKworLyogQ29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbiBlcmZjKHgpLCBmb3IgZ2VuZXJhbCB4LiAqLworCitzdGF0aWMgZG91YmxlCittX2VyZmMoZG91YmxlIHgpCit7CisgICAgZG91YmxlIGFic3gsIGNmOworCisgICAgaWYgKFB5X0lTX05BTih4KSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgYWJzeCA9IGZhYnMoeCk7CisgICAgaWYgKGFic3ggPCBFUkZfU0VSSUVTX0NVVE9GRikKKyAgICAgICAgcmV0dXJuIDEuMCAtIG1fZXJmX3Nlcmllcyh4KTsKKyAgICBlbHNlIHsKKyAgICAgICAgY2YgPSBtX2VyZmNfY29udGZyYWMoYWJzeCk7CisgICAgICAgIHJldHVybiB4ID4gMC4wID8gY2YgOiAyLjAgLSBjZjsKKyAgICB9Cit9CisKKy8qCiAgICB3cmFwcGVyIGZvciBhdGFuMiB0aGF0IGRlYWxzIGRpcmVjdGx5IHdpdGggc3BlY2lhbCBjYXNlcyBiZWZvcmUKICAgIGRlbGVnYXRpbmcgdG8gdGhlIHBsYXRmb3JtIGxpYm0gZm9yIHRoZSByZW1haW5pbmcgY2FzZXMuICBUaGlzCiAgICBpcyBuZWNlc3NhcnkgdG8gZ2V0IGNvbnNpc3RlbnQgYmVoYXZpb3VyIGFjcm9zcyBwbGF0Zm9ybXMuCkBAIC0xODgsNiArNjA5LDQ2IEBACiB9CiAKIAorLyogQ2FsbCBpc19lcnJvciB3aGVuIGVycm5vICE9IDAsIGFuZCB3aGVyZSB4IGlzIHRoZSByZXN1bHQgbGlibQorICogcmV0dXJuZWQuICBpc19lcnJvciB3aWxsIHVzdWFsbHkgc2V0IHVwIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuCisgKiB0cnVlICgxKSwgYnV0IG1heSByZXR1cm4gZmFsc2UgKDApIHdpdGhvdXQgc2V0dGluZyB1cCBhbiBleGNlcHRpb24uCisgKi8KK3N0YXRpYyBpbnQKK2lzX2Vycm9yKGRvdWJsZSB4KQoreworICAgIGludCByZXN1bHQgPSAxOyAgICAgLyogcHJlc3VtcHRpb24gb2YgZ3VpbHQgKi8KKyAgICBhc3NlcnQoZXJybm8pOyAgICAgIC8qIG5vbi16ZXJvIGVycm5vIGlzIGEgcHJlY29uZGl0aW9uIGZvciBjYWxsaW5nICovCisgICAgaWYgKGVycm5vID09IEVET00pCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibWF0aCBkb21haW4gZXJyb3IiKTsKKworICAgIGVsc2UgaWYgKGVycm5vID09IEVSQU5HRSkgeworICAgICAgICAvKiBBTlNJIEMgZ2VuZXJhbGx5IHJlcXVpcmVzIGxpYm0gZnVuY3Rpb25zIHRvIHNldCBFUkFOR0UKKyAgICAgICAgICogb24gb3ZlcmZsb3csIGJ1dCBhbHNvIGdlbmVyYWxseSAqYWxsb3dzKiB0aGVtIHRvIHNldAorICAgICAgICAgKiBFUkFOR0Ugb24gdW5kZXJmbG93IHRvby4gIFRoZXJlJ3Mgbm8gY29uc2lzdGVuY3kgYWJvdXQKKyAgICAgICAgICogdGhlIGxhdHRlciBhY3Jvc3MgcGxhdGZvcm1zLgorICAgICAgICAgKiBBbGFzLCBDOTkgbmV2ZXIgcmVxdWlyZXMgdGhhdCBlcnJubyBiZSBzZXQuCisgICAgICAgICAqIEhlcmUgd2Ugc3VwcHJlc3MgdGhlIHVuZGVyZmxvdyBlcnJvcnMgKGxpYm0gZnVuY3Rpb25zCisgICAgICAgICAqIHNob3VsZCByZXR1cm4gYSB6ZXJvIG9uIHVuZGVyZmxvdywgYW5kICstIEhVR0VfVkFMIG9uCisgICAgICAgICAqIG92ZXJmbG93LCBzbyB0ZXN0aW5nIHRoZSByZXN1bHQgZm9yIHplcm8gc3VmZmljZXMgdG8KKyAgICAgICAgICogZGlzdGluZ3Vpc2ggdGhlIGNhc2VzKS4KKyAgICAgICAgICoKKyAgICAgICAgICogT24gc29tZSBwbGF0Zm9ybXMgKFVidW50dS9pYTY0KSBpdCBzZWVtcyB0aGF0IGVycm5vIGNhbiBiZQorICAgICAgICAgKiBzZXQgdG8gRVJBTkdFIGZvciBzdWJub3JtYWwgcmVzdWx0cyB0aGF0IGRvICpub3QqIHVuZGVyZmxvdworICAgICAgICAgKiB0byB6ZXJvLiAgU28gdG8gYmUgc2FmZSwgd2UnbGwgaWdub3JlIEVSQU5HRSB3aGVuZXZlciB0aGUKKyAgICAgICAgICogZnVuY3Rpb24gcmVzdWx0IGlzIGxlc3MgdGhhbiBvbmUgaW4gYWJzb2x1dGUgdmFsdWUuCisgICAgICAgICAqLworICAgICAgICBpZiAoZmFicyh4KSA8IDEuMCkKKyAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXRoIHJhbmdlIGVycm9yIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgLyogVW5leHBlY3RlZCBtYXRoIGVycm9yICovCisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19WYWx1ZUVycm9yKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAvKgogICAgbWF0aF8xIGlzIHVzZWQgdG8gd3JhcCBhIGxpYm0gZnVuY3Rpb24gZiB0aGF0IHRha2VzIGEgZG91YmxlCiAgICBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBkb3VibGUuCkBAIC0yNDcsNiArNzA4LDI2IEBACiAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUocik7CiB9CiAKKy8qIHZhcmlhbnQgb2YgbWF0aF8xLCB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQgaXMga25vd24gdG8KKyAgIHNldCBlcnJubyBwcm9wZXJseSAodGhhdCBpcywgZXJybm8gPSBFRE9NIGZvciBpbnZhbGlkIG9yIGRpdmlkZS1ieS16ZXJvLAorICAgZXJybm8gPSBFUkFOR0UgZm9yIG92ZXJmbG93KS4gKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK21hdGhfMWEoUHlPYmplY3QgKmFyZywgZG91YmxlICgqZnVuYykgKGRvdWJsZSkpCit7CisgICAgZG91YmxlIHgsIHI7CisgICAgeCA9IFB5RmxvYXRfQXNEb3VibGUoYXJnKTsKKyAgICBpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGVycm5vID0gMDsKKyAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJpbiBtYXRoXzFhIiwgcmV0dXJuIDApOworICAgIHIgPSAoKmZ1bmMpKHgpOworICAgIFB5RlBFX0VORF9QUk9URUNUKHIpOworICAgIGlmIChlcnJubyAmJiBpc19lcnJvcihyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShyKTsKK30KKwogLyoKICAgIG1hdGhfMiBpcyB1c2VkIHRvIHdyYXAgYSBsaWJtIGZ1bmN0aW9uIGYgdGhhdCB0YWtlcyB0d28gZG91YmxlCiAgICBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBkb3VibGUuCkBAIC0zMTMsNiArNzk0LDEyIEBACiAgICAgfVwKICAgICBQeURvY19TVFJWQVIobWF0aF8jI2Z1bmNuYW1lIyNfZG9jLCBkb2NzdHJpbmcpOwogCisjZGVmaW5lIEZVTkMxQShmdW5jbmFtZSwgZnVuYywgZG9jc3RyaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdGljIFB5T2JqZWN0ICogbWF0aF8jI2Z1bmNuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgeyBcCisgICAgICAgIHJldHVybiBtYXRoXzFhKGFyZ3MsIGZ1bmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfVwKKyAgICBQeURvY19TVFJWQVIobWF0aF8jI2Z1bmNuYW1lIyNfZG9jLCBkb2NzdHJpbmcpOworCiAjZGVmaW5lIEZVTkMyKGZ1bmNuYW1lLCBmdW5jLCBkb2NzdHJpbmcpIFwKICAgICBzdGF0aWMgUHlPYmplY3QgKiBtYXRoXyMjZnVuY25hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSB7IFwKICAgICAgICAgcmV0dXJuIG1hdGhfMihhcmdzLCBmdW5jLCAjZnVuY25hbWUpOyBcCkBAIC0zMjEsMTggKzgwOCwxOCBAQAogCiBGVU5DMShhY29zLCBhY29zLCAwLAogICAgICAgImFjb3MoeClcblxuUmV0dXJuIHRoZSBhcmMgY29zaW5lIChtZWFzdXJlZCBpbiByYWRpYW5zKSBvZiB4LiIpCi1GVU5DMShhY29zaCwgYWNvc2gsIDAsCitGVU5DMShhY29zaCwgbV9hY29zaCwgMCwKICAgICAgICJhY29zaCh4KVxuXG5SZXR1cm4gdGhlIGh5cGVyYm9saWMgYXJjIGNvc2luZSAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQogRlVOQzEoYXNpbiwgYXNpbiwgMCwKICAgICAgICJhc2luKHgpXG5cblJldHVybiB0aGUgYXJjIHNpbmUgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHguIikKLUZVTkMxKGFzaW5oLCBhc2luaCwgMCwKK0ZVTkMxKGFzaW5oLCBtX2FzaW5oLCAwLAogICAgICAgImFzaW5oKHgpXG5cblJldHVybiB0aGUgaHlwZXJib2xpYyBhcmMgc2luZSAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQogRlVOQzEoYXRhbiwgYXRhbiwgMCwKICAgICAgICJhdGFuKHgpXG5cblJldHVybiB0aGUgYXJjIHRhbmdlbnQgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHguIikKIEZVTkMyKGF0YW4yLCBtX2F0YW4yLAogICAgICAgImF0YW4yKHksIHgpXG5cblJldHVybiB0aGUgYXJjIHRhbmdlbnQgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHkveC5cbiIKICAgICAgICJVbmxpa2UgYXRhbih5L3gpLCB0aGUgc2lnbnMgb2YgYm90aCB4IGFuZCB5IGFyZSBjb25zaWRlcmVkLiIpCi1GVU5DMShhdGFuaCwgYXRhbmgsIDAsCitGVU5DMShhdGFuaCwgbV9hdGFuaCwgMCwKICAgICAgICJhdGFuaCh4KVxuXG5SZXR1cm4gdGhlIGh5cGVyYm9saWMgYXJjIHRhbmdlbnQgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHguIikKIEZVTkMxKGNlaWwsIGNlaWwsIDAsCiAgICAgICAiY2VpbCh4KVxuXG5SZXR1cm4gdGhlIGNlaWxpbmcgb2YgeCBhcyBhIGZsb2F0LlxuIgpAQCAtMzQzLDE0ICs4MzAsMjYgQEAKICAgICAgICJjb3MoeClcblxuUmV0dXJuIHRoZSBjb3NpbmUgb2YgeCAobWVhc3VyZWQgaW4gcmFkaWFucykuIikKIEZVTkMxKGNvc2gsIGNvc2gsIDEsCiAgICAgICAiY29zaCh4KVxuXG5SZXR1cm4gdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHguIikKK0ZVTkMxQShlcmYsIG1fZXJmLAorICAgICAgICJlcmYoeClcblxuRXJyb3IgZnVuY3Rpb24gYXQgeC4iKQorRlVOQzFBKGVyZmMsIG1fZXJmYywKKyAgICAgICAiZXJmYyh4KVxuXG5Db21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uIGF0IHguIikKIEZVTkMxKGV4cCwgZXhwLCAxLAogICAgICAgImV4cCh4KVxuXG5SZXR1cm4gZSByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIHguIikKK0ZVTkMxKGV4cG0xLCBtX2V4cG0xLCAxLAorICAgICAgImV4cG0xKHgpXG5cblJldHVybiBleHAoeCktMS5cbiIKKyAgICAgICJUaGlzIGZ1bmN0aW9uIGF2b2lkcyB0aGUgbG9zcyBvZiBwcmVjaXNpb24gaW52b2x2ZWQgaW4gdGhlIGRpcmVjdCAiCisgICAgICAiZXZhbHVhdGlvbiBvZiBleHAoeCktMSBmb3Igc21hbGwgeC4iKQogRlVOQzEoZmFicywgZmFicywgMCwKICAgICAgICJmYWJzKHgpXG5cblJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGZsb2F0IHguIikKIEZVTkMxKGZsb29yLCBmbG9vciwgMCwKICAgICAgICJmbG9vcih4KVxuXG5SZXR1cm4gdGhlIGZsb29yIG9mIHggYXMgYSBmbG9hdC5cbiIKICAgICAgICJUaGlzIGlzIHRoZSBsYXJnZXN0IGludGVncmFsIHZhbHVlIDw9IHguIikKLUZVTkMxKGxvZzFwLCBsb2cxcCwgMSwKK0ZVTkMxQShnYW1tYSwgbV90Z2FtbWEsCisgICAgICAiZ2FtbWEoeClcblxuR2FtbWEgZnVuY3Rpb24gYXQgeC4iKQorRlVOQzFBKGxnYW1tYSwgbV9sZ2FtbWEsCisgICAgICAibGdhbW1hKHgpXG5cbk5hdHVyYWwgbG9nYXJpdGhtIG9mIGFic29sdXRlIHZhbHVlIG9mIEdhbW1hIGZ1bmN0aW9uIGF0IHguIikKK0ZVTkMxKGxvZzFwLCBtX2xvZzFwLCAxLAogICAgICAgImxvZzFwKHgpXG5cblJldHVybiB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMSt4IChiYXNlIGUpLlxuIgogICAgICAgIlRoZSByZXN1bHQgaXMgY29tcHV0ZWQgaW4gYSB3YXkgd2hpY2ggaXMgYWNjdXJhdGUgZm9yIHggbmVhciB6ZXJvLiIpCiBGVU5DMShzaW4sIHNpbiwgMCwKQEAgLTU5MiwxNSArMTA5MSwyMiBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQsICppb2JqLCAqbmV3cmVzdWx0OwogCiAgICAgaWYgKFB5RmxvYXRfQ2hlY2soYXJnKSkgeworICAgICAgICBQeU9iamVjdCAqbHg7CiAgICAgICAgIGRvdWJsZSBkeCA9IFB5RmxvYXRfQVNfRE9VQkxFKChQeUZsb2F0T2JqZWN0ICopYXJnKTsKLSAgICAgICAgaWYgKGR4ICE9IGZsb29yKGR4KSkgeworICAgICAgICBpZiAoIShQeV9JU19GSU5JVEUoZHgpICYmIGR4ID09IGZsb29yKGR4KSkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICJmYWN0b3JpYWwoKSBvbmx5IGFjY2VwdHMgaW50ZWdyYWwgdmFsdWVzIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBseCA9IFB5TG9uZ19Gcm9tRG91YmxlKGR4KTsKKyAgICAgICAgaWYgKGx4ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgeCA9IFB5TG9uZ19Bc0xvbmcobHgpOworICAgICAgICBQeV9ERUNSRUYobHgpOwogICAgIH0KKyAgICBlbHNlCisgICAgICAgIHggPSBQeUludF9Bc0xvbmcoYXJnKTsKIAotICAgIHggPSBQeUludF9Bc0xvbmcoYXJnKTsKICAgICBpZiAoeCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoeCA8IDApIHsKQEAgLTY3OSwzMSArMTE4NSwxOCBAQAogICAgIGRvdWJsZSB4LCByOwogICAgIFB5T2JqZWN0ICpvZXhwOwogICAgIGxvbmcgZXhwOworICAgIGludCBvdmVyZmxvdzsKICAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJkTzpsZGV4cCIsICZ4LCAmb2V4cCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5TG9uZ19DaGVjayhvZXhwKSkgeworICAgIGlmIChQeUxvbmdfQ2hlY2sob2V4cCkgfHwgUHlJbnRfQ2hlY2sob2V4cCkpIHsKICAgICAgICAgLyogb24gb3ZlcmZsb3csIHJlcGxhY2UgZXhwb25lbnQgd2l0aCBlaXRoZXIgTE9OR19NQVgKICAgICAgICAgICAgb3IgTE9OR19NSU4sIGRlcGVuZGluZyBvbiB0aGUgc2lnbi4gKi8KLSAgICAgICAgZXhwID0gUHlMb25nX0FzTG9uZyhvZXhwKTsKLSAgICAgICAgaWYgKGV4cCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkgewotICAgICAgICAgICAgICAgIGlmIChQeV9TSVpFKG9leHApIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBleHAgPSBMT05HX01JTjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cCA9IExPTkdfTUFYOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogcHJvcGFnYXRlIGFueSB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAqLwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5SW50X0NoZWNrKG9leHApKSB7Ci0gICAgICAgIGV4cCA9IFB5SW50X0FTX0xPTkcob2V4cCk7CisgICAgICAgIGV4cCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvZXhwLCAmb3ZlcmZsb3cpOworICAgICAgICBpZiAoZXhwID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKG92ZXJmbG93KQorICAgICAgICAgICAgZXhwID0gb3ZlcmZsb3cgPCAwID8gTE9OR19NSU4gOiBMT05HX01BWDsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC03NzIsMTEgKzEyNjUsMTIgQEAKIAogLyogQSBkZWNlbnQgbG9nYXJpdGhtIGlzIGVhc3kgdG8gY29tcHV0ZSBldmVuIGZvciBodWdlIGxvbmdzLCBidXQgbGlibSBjYW4ndAogICAgZG8gdGhhdCBieSBpdHNlbGYgLS0gbG9naGVscGVyIGNhbi4gIGZ1bmMgaXMgbG9nIG9yIGxvZzEwLCBhbmQgbmFtZSBpcwotICAgImxvZyIgb3IgImxvZzEwIi4gIE5vdGUgdGhhdCBvdmVyZmxvdyBpc24ndCBwb3NzaWJsZTogIGEgbG9uZyBjYW4gY29udGFpbgotICAgbm8gbW9yZSB0aGFuIElOVF9NQVggKiBTSElGVCBiaXRzLCBzbyBoYXMgdmFsdWUgY2VydGFpbmx5IGxlc3MgdGhhbgotICAgMioqKDIqKjY0ICogMioqMTYpID09IDIqKjIqKjgwLCBhbmQgbG9nMiBvZiB0aGF0IGlzIDIqKjgwLCB3aGljaCBpcworICAgImxvZyIgb3IgImxvZzEwIi4gIE5vdGUgdGhhdCBvdmVyZmxvdyBvZiB0aGUgcmVzdWx0IGlzbid0IHBvc3NpYmxlOiBhIGxvbmcKKyAgIGNhbiBjb250YWluIG5vIG1vcmUgdGhhbiBJTlRfTUFYICogU0hJRlQgYml0cywgc28gaGFzIHZhbHVlIGNlcnRhaW5seSBsZXNzCisgICB0aGFuIDIqKigyKio2NCAqIDIqKjE2KSA9PSAyKioyKio4MCwgYW5kIGxvZzIgb2YgdGhhdCBpcyAyKio4MCwgd2hpY2ggaXMKICAgIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYW4gSUVFRSBzaW5nbGUuICBsb2cgYW5kIGxvZzEwIGFyZSBldmVuIHNtYWxsZXIuCi0qLworICAgSG93ZXZlciwgaW50ZXJtZWRpYXRlIG92ZXJmbG93IGlzIHBvc3NpYmxlIGZvciBhIGxvbmcgaWYgdGhlIG51bWJlciBvZiBiaXRzCisgICBpbiB0aGF0IGxvbmcgaXMgbGFyZ2VyIHRoYW4gUFlfU1NJWkVfVF9NQVguICovCiAKIHN0YXRpYyBQeU9iamVjdCoKIGxvZ2hlbHBlcihQeU9iamVjdCogYXJnLCBkb3VibGUgKCpmdW5jKShkb3VibGUpLCBjaGFyICpmdW5jbmFtZSkKQEAgLTc4NCwxOCArMTI3OCwyMSBAQAogICAgIC8qIElmIGl0IGlzIGxvbmcsIGRvIGl0IG91cnNlbHZlcy4gKi8KICAgICBpZiAoUHlMb25nX0NoZWNrKGFyZykpIHsKICAgICAgICAgZG91YmxlIHg7Ci0gICAgICAgIGludCBlOwotICAgICAgICB4ID0gX1B5TG9uZ19Bc1NjYWxlZERvdWJsZShhcmcsICZlKTsKKyAgICAgICAgUHlfc3NpemVfdCBlOworICAgICAgICB4ID0gX1B5TG9uZ19GcmV4cCgoUHlMb25nT2JqZWN0ICopYXJnLCAmZSk7CisgICAgICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoeCA8PSAwLjApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXRoIGRvbWFpbiBlcnJvciIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgLyogVmFsdWUgaXMgfj0geCAqIDIqKihlKlB5TG9uZ19TSElGVCksIHNvIHRoZSBsb2cgfj0KLSAgICAgICAgICAgbG9nKHgpICsgbG9nKDIpICogZSAqIFB5TG9uZ19TSElGVC4KLSAgICAgICAgICAgQ0FVVElPTjogIGUqUHlMb25nX1NISUZUIG1heSBvdmVyZmxvdyB1c2luZyBpbnQgYXJpdGhtZXRpYywKLSAgICAgICAgICAgc28gZm9yY2UgdXNlIG9mIGRvdWJsZS4gKi8KLSAgICAgICAgeCA9IGZ1bmMoeCkgKyAoZSAqIChkb3VibGUpUHlMb25nX1NISUZUKSAqIGZ1bmMoMi4wKTsKKyAgICAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBsb2coMSksIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgYW4KKyAgICAgICAgICAgZXhhY3QgcmVzdWx0IHRoZXJlLiAqLworICAgICAgICBpZiAoZSA9PSAxICYmIHggPT0gMC41KQorICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgwLjApOworICAgICAgICAvKiBWYWx1ZSBpcyB+PSB4ICogMioqZSwgc28gdGhlIGxvZyB+PSBsb2coeCkgKyBsb2coMikgKiBlLiAqLworICAgICAgICB4ID0gZnVuYyh4KSArIGZ1bmMoMi4wKSAqIGU7CiAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoeCk7CiAgICAgfQogCkBAIC0xMDc0LDE3ICsxNTcxLDIyIEBACiAgICAgeyJjb3MiLCAgICAgICAgICAgICBtYXRoX2NvcywgICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfY29zX2RvY30sCiAgICAgeyJjb3NoIiwgICAgICAgICAgICBtYXRoX2Nvc2gsICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfY29zaF9kb2N9LAogICAgIHsiZGVncmVlcyIsICAgICAgICAgbWF0aF9kZWdyZWVzLCAgIE1FVEhfTywgICAgICAgICBtYXRoX2RlZ3JlZXNfZG9jfSwKKyAgICB7ImVyZiIsICAgICAgICAgICAgIG1hdGhfZXJmLCAgICAgICBNRVRIX08sICAgICAgICAgbWF0aF9lcmZfZG9jfSwKKyAgICB7ImVyZmMiLCAgICAgICAgICAgIG1hdGhfZXJmYywgICAgICBNRVRIX08sICAgICAgICAgbWF0aF9lcmZjX2RvY30sCiAgICAgeyJleHAiLCAgICAgICAgICAgICBtYXRoX2V4cCwgICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZXhwX2RvY30sCisgICAgeyJleHBtMSIsICAgICAgICAgICBtYXRoX2V4cG0xLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZXhwbTFfZG9jfSwKICAgICB7ImZhYnMiLCAgICAgICAgICAgIG1hdGhfZmFicywgICAgICBNRVRIX08sICAgICAgICAgbWF0aF9mYWJzX2RvY30sCiAgICAgeyJmYWN0b3JpYWwiLCAgICAgICBtYXRoX2ZhY3RvcmlhbCwgTUVUSF9PLCAgICAgICAgIG1hdGhfZmFjdG9yaWFsX2RvY30sCiAgICAgeyJmbG9vciIsICAgICAgICAgICBtYXRoX2Zsb29yLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZmxvb3JfZG9jfSwKICAgICB7ImZtb2QiLCAgICAgICAgICAgIG1hdGhfZm1vZCwgICAgICBNRVRIX1ZBUkFSR1MsICAgbWF0aF9mbW9kX2RvY30sCiAgICAgeyJmcmV4cCIsICAgICAgICAgICBtYXRoX2ZyZXhwLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZnJleHBfZG9jfSwKICAgICB7ImZzdW0iLCAgICAgICAgICAgIG1hdGhfZnN1bSwgICAgICBNRVRIX08sICAgICAgICAgbWF0aF9mc3VtX2RvY30sCisgICAgeyJnYW1tYSIsICAgICAgICAgICBtYXRoX2dhbW1hLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZ2FtbWFfZG9jfSwKICAgICB7Imh5cG90IiwgICAgICAgICAgIG1hdGhfaHlwb3QsICAgICBNRVRIX1ZBUkFSR1MsICAgbWF0aF9oeXBvdF9kb2N9LAogICAgIHsiaXNpbmYiLCAgICAgICAgICAgbWF0aF9pc2luZiwgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2lzaW5mX2RvY30sCiAgICAgeyJpc25hbiIsICAgICAgICAgICBtYXRoX2lzbmFuLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfaXNuYW5fZG9jfSwKICAgICB7ImxkZXhwIiwgICAgICAgICAgIG1hdGhfbGRleHAsICAgICBNRVRIX1ZBUkFSR1MsICAgbWF0aF9sZGV4cF9kb2N9LAorICAgIHsibGdhbW1hIiwgICAgICAgICAgbWF0aF9sZ2FtbWEsICAgIE1FVEhfTywgICAgICAgICBtYXRoX2xnYW1tYV9kb2N9LAogICAgIHsibG9nIiwgICAgICAgICAgICAgbWF0aF9sb2csICAgICAgIE1FVEhfVkFSQVJHUywgICBtYXRoX2xvZ19kb2N9LAogICAgIHsibG9nMXAiLCAgICAgICAgICAgbWF0aF9sb2cxcCwgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2xvZzFwX2RvY30sCiAgICAgeyJsb2cxMCIsICAgICAgICAgICBtYXRoX2xvZzEwLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfbG9nMTBfZG9jfSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWQ1LmMgYi9Nb2R1bGVzL21kNS5jCmluZGV4IDk4MmZkN2YuLjhmZGM2MDAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWQ1LmMKKysrIGIvTW9kdWxlcy9tZDUuYwpAQCAtMzIxLDExICszMjEsMTEgQEAKIH0KIAogdm9pZAotbWQ1X2FwcGVuZChtZDVfc3RhdGVfdCAqcG1zLCBjb25zdCBtZDVfYnl0ZV90ICpkYXRhLCBpbnQgbmJ5dGVzKQorbWQ1X2FwcGVuZChtZDVfc3RhdGVfdCAqcG1zLCBjb25zdCBtZDVfYnl0ZV90ICpkYXRhLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogICAgIGNvbnN0IG1kNV9ieXRlX3QgKnAgPSBkYXRhOwotICAgIGludCBsZWZ0ID0gbmJ5dGVzOwotICAgIGludCBvZmZzZXQgPSAocG1zLT5jb3VudFswXSA+PiAzKSAmIDYzOworICAgIHVuc2lnbmVkIGludCBsZWZ0ID0gbmJ5dGVzOworICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSAocG1zLT5jb3VudFswXSA+PiAzKSAmIDYzOwogICAgIG1kNV93b3JkX3QgbmJpdHMgPSAobWQ1X3dvcmRfdCkobmJ5dGVzIDw8IDMpOwogCiAgICAgaWYgKG5ieXRlcyA8PSAwKQpAQCAtMzMzLDcgKzMzMyw3IEBACiAKICAgICAvKiB0aGlzIHNwZWNpYWwgY2FzZSBpcyBoYW5kbGVkIHJlY3Vyc2l2ZWx5ICovCiAgICAgaWYgKG5ieXRlcyA+IElOVF9NQVggLSBvZmZzZXQpIHsKLSAgICAgICAgaW50IG92ZXJsYXA7CisgICAgICAgIHVuc2lnbmVkIGludCBvdmVybGFwOwogCiAgICAgICAgIC8qIGhhbmRsZSB0aGUgYXBwZW5kIGluIHR3byBzdGVwcyB0byBwcmV2ZW50IG92ZXJmbG93ICovCiAgICAgICAgIG92ZXJsYXAgPSA2NCAtIG9mZnNldDsKQEAgLTM1MSw3ICszNTEsNyBAQAogCiAgICAgLyogUHJvY2VzcyBhbiBpbml0aWFsIHBhcnRpYWwgYmxvY2suICovCiAgICAgaWYgKG9mZnNldCkgewotICAgICAgICBpbnQgY29weSA9IChvZmZzZXQgKyBuYnl0ZXMgPiA2NCA/IDY0IC0gb2Zmc2V0IDogbmJ5dGVzKTsKKyAgICAgICAgdW5zaWduZWQgaW50IGNvcHkgPSAob2Zmc2V0ICsgbmJ5dGVzID4gNjQgPyA2NCAtIG9mZnNldCA6IG5ieXRlcyk7CiAKICAgICAgICAgbWVtY3B5KHBtcy0+YnVmICsgb2Zmc2V0LCBwLCBjb3B5KTsKICAgICAgICAgaWYgKG9mZnNldCArIGNvcHkgPCA2NCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWQ1LmggYi9Nb2R1bGVzL21kNS5oCmluZGV4IDVlYjZkNmMuLjBhYjBlNjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWQ1LmgKKysrIGIvTW9kdWxlcy9tZDUuaApAQCAtNzksNyArNzksNyBAQAogdm9pZCBtZDVfaW5pdChtZDVfc3RhdGVfdCAqcG1zKTsKIAogLyogQXBwZW5kIGEgc3RyaW5nIHRvIHRoZSBtZXNzYWdlLiAqLwotdm9pZCBtZDVfYXBwZW5kKG1kNV9zdGF0ZV90ICpwbXMsIGNvbnN0IG1kNV9ieXRlX3QgKmRhdGEsIGludCBuYnl0ZXMpOwordm9pZCBtZDVfYXBwZW5kKG1kNV9zdGF0ZV90ICpwbXMsIGNvbnN0IG1kNV9ieXRlX3QgKmRhdGEsIHVuc2lnbmVkIGludCBuYnl0ZXMpOwogCiAvKiBGaW5pc2ggdGhlIG1lc3NhZ2UgYW5kIHJldHVybiB0aGUgZGlnZXN0LiAqLwogdm9pZCBtZDVfZmluaXNoKG1kNV9zdGF0ZV90ICpwbXMsIG1kNV9ieXRlX3QgZGlnZXN0WzE2XSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21kNW1vZHVsZS5jIGIvTW9kdWxlcy9tZDVtb2R1bGUuYwppbmRleCBjZTk0ZmI1Li4wNjgzZWY1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL21kNW1vZHVsZS5jCisrKyBiL01vZHVsZXMvbWQ1bW9kdWxlLmMKQEAgLTUwLDE2ICs1MCwxNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1kNV91cGRhdGUobWQ1b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICB1bnNpZ25lZCBjaGFyICpjcDsKLSAgICBpbnQgbGVuOworICAgIFB5X2J1ZmZlciB2aWV3OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzp1cGRhdGUiLCAmY3AsICZsZW4pKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6dXBkYXRlIiwgJnZpZXcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG1kNV9hcHBlbmQoJnNlbGYtPm1kNSwgY3AsIGxlbik7CisgICAgbWQ1X2FwcGVuZCgmc2VsZi0+bWQ1LCAodW5zaWduZWQgY2hhciopdmlldy5idWYsCisgICAgICAgICAgICAgICBQeV9TQUZFX0RPV05DQVNUKHZpZXcubGVuLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBpbnQpKTsKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogUHlEb2NfU1RSVkFSKHVwZGF0ZV9kb2MsCkBAIC0yNjEsMTcgKzI2MSwyMSBAQAogTUQ1X25ldyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgbWQ1b2JqZWN0ICptZDVwOwotICAgIHVuc2lnbmVkIGNoYXIgKmNwID0gTlVMTDsKLSAgICBpbnQgbGVuID0gMDsKKyAgICBQeV9idWZmZXIgdmlldyA9IHsgMCB9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8cyM6bmV3IiwgJmNwLCAmbGVuKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxzKjpuZXciLCAmdmlldykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKChtZDVwID0gbmV3bWQ1b2JqZWN0KCkpID09IE5VTEwpCisgICAgaWYgKChtZDVwID0gbmV3bWQ1b2JqZWN0KCkpID09IE5VTEwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIGlmIChjcCkKLSAgICAgICAgbWQ1X2FwcGVuZCgmbWQ1cC0+bWQ1LCBjcCwgbGVuKTsKKyAgICBpZiAodmlldy5sZW4gPiAwKSB7CisgICAgICAgIG1kNV9hcHBlbmQoJm1kNXAtPm1kNSwgKHVuc2lnbmVkIGNoYXIqKXZpZXcuYnVmLAorICAgICAgICAgICAgICAgUHlfU0FGRV9ET1dOQ0FTVCh2aWV3LmxlbiwgUHlfc3NpemVfdCwgdW5zaWduZWQgaW50KSk7CisgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW1kNXA7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21tYXBtb2R1bGUuYyBiL01vZHVsZXMvbW1hcG1vZHVsZS5jCmluZGV4IDI0Zjc4NTEuLjIxOWRkZDIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbW1hcG1vZHVsZS5jCisrKyBiL01vZHVsZXMvbW1hcG1vZHVsZS5jCkBAIC05MCw3ICs5MCwxMSBAQAogICAgIGNoYXIgKiAgICAgIGRhdGE7CiAgICAgc2l6ZV90ICAgICAgc2l6ZTsKICAgICBzaXplX3QgICAgICBwb3M7ICAgIC8qIHJlbGF0aXZlIHRvIG9mZnNldCAqLwotICAgIHNpemVfdCAgICAgIG9mZnNldDsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgUFlfTE9OR19MT05HIG9mZnNldDsKKyNlbHNlCisgICAgb2ZmX3QgICAgICAgb2Zmc2V0OworI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgSEFORExFICAgICAgbWFwX2hhbmRsZTsKQEAgLTEyNCw3ICsxMjgsOCBAQAogICAgIGlmIChtX29iai0+ZmQgPj0gMCkKICAgICAgICAgKHZvaWQpIGNsb3NlKG1fb2JqLT5mZCk7CiAgICAgaWYgKG1fb2JqLT5kYXRhIT1OVUxMKSB7Ci0gICAgICAgIG1zeW5jKG1fb2JqLT5kYXRhLCBtX29iai0+c2l6ZSwgTVNfU1lOQyk7CisgICAgICAgIGlmIChtX29iai0+YWNjZXNzICE9IEFDQ0VTU19SRUFEICYmIG1fb2JqLT5hY2Nlc3MgIT0gQUNDRVNTX0NPUFkpCisgICAgICAgICAgICBtc3luYyhtX29iai0+ZGF0YSwgbV9vYmotPnNpemUsIE1TX1NZTkMpOwogICAgICAgICBtdW5tYXAobV9vYmotPmRhdGEsIG1fb2JqLT5zaXplKTsKICAgICB9CiAjZW5kaWYgLyogVU5JWCAqLwpAQCAtNDIzLDcgKzQyOCwxMSBAQAogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKG1tYXBfbW9kdWxlX2Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdChidWYuc3Rfc2l6ZSk7CisjaWZkZWYgSEFWRV9MQVJHRUZJTEVfU1VQUE9SVAorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZyhidWYuc3Rfc2l6ZSk7CisjZWxzZQorICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoYnVmLnN0X3NpemUpOworI2VuZGlmCiAgICAgfQogI2VuZGlmIC8qIFVOSVggKi8KIH0KQEAgLTQ1NywxNyArNDY2LDEwIEBACiAgICAgICAgIENsb3NlSGFuZGxlKHNlbGYtPm1hcF9oYW5kbGUpOwogICAgICAgICBzZWxmLT5tYXBfaGFuZGxlID0gTlVMTDsKICAgICAgICAgLyogTW92ZSB0byB0aGUgZGVzaXJlZCBFT0YgcG9zaXRpb24gKi8KLSNpZiBTSVpFT0ZfU0laRV9UID4gNAogICAgICAgICBuZXdTaXplSGlnaCA9IChEV09SRCkoKHNlbGYtPm9mZnNldCArIG5ld19zaXplKSA+PiAzMik7CiAgICAgICAgIG5ld1NpemVMb3cgPSAoRFdPUkQpKChzZWxmLT5vZmZzZXQgKyBuZXdfc2l6ZSkgJiAweEZGRkZGRkZGKTsKICAgICAgICAgb2ZmX2hpID0gKERXT1JEKShzZWxmLT5vZmZzZXQgPj4gMzIpOwogICAgICAgICBvZmZfbG8gPSAoRFdPUkQpKHNlbGYtPm9mZnNldCAmIDB4RkZGRkZGRkYpOwotI2Vsc2UKLSAgICAgICAgbmV3U2l6ZUhpZ2ggPSAwOwotICAgICAgICBuZXdTaXplTG93ID0gKERXT1JEKShzZWxmLT5vZmZzZXQgKyBuZXdfc2l6ZSk7Ci0gICAgICAgIG9mZl9oaSA9IDA7Ci0gICAgICAgIG9mZl9sbyA9IChEV09SRClzZWxmLT5vZmZzZXQ7Ci0jZW5kaWYKICAgICAgICAgU2V0RmlsZVBvaW50ZXIoc2VsZi0+ZmlsZV9oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NpemVMb3csICZuZXdTaXplSGlnaCwgRklMRV9CRUdJTik7CiAgICAgICAgIC8qIENoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmlsZSAqLwpAQCAtNTU5LDYgKzU2MSwxMCBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImZsdXNoIHZhbHVlcyBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisgICAgaWYgKHNlbGYtPmFjY2VzcyA9PSBBQ0NFU1NfUkVBRCB8fCBzZWxmLT5hY2Nlc3MgPT0gQUNDRVNTX0NPUFkpCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CisKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSBGbHVzaFZpZXdPZkZpbGUoc2VsZi0+ZGF0YStvZmZzZXQsIHNpemUpKTsKICNlbGlmIGRlZmluZWQoVU5JWCkKQEAgLTYyMCwyMyArNjI2LDIzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogbW1hcF9tb3ZlX21ldGhvZChtbWFwX29iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBkZXN0LCBzcmMsIGNvdW50OworICAgIHVuc2lnbmVkIGxvbmcgZGVzdCwgc3JjLCBjbnQ7CiAgICAgQ0hFQ0tfVkFMSUQoTlVMTCk7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJra2s6bW92ZSIsICZkZXN0LCAmc3JjLCAmY291bnQpIHx8CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJra2s6bW92ZSIsICZkZXN0LCAmc3JjLCAmY250KSB8fAogICAgICAgICAhaXNfd3JpdGVhYmxlKHNlbGYpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIGJvdW5kcyBjaGVjayB0aGUgdmFsdWVzICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgcG9zID0gc3JjID4gZGVzdCA/IHNyYyA6IGRlc3Q7Ci0gICAgICAgIGlmIChzZWxmLT5zaXplIDwgcG9zIHx8IGNvdW50ID4gc2VsZi0+c2l6ZSAtIHBvcykgeworICAgICAgICBpZiAoY250IDwgMCB8fCAoY250ICsgZGVzdCkgPCBjbnQgfHwgKGNudCArIHNyYykgPCBjbnQgfHwKKyAgICAgICAgICAgc3JjIDwgMCB8fCBzcmMgPiBzZWxmLT5zaXplIHx8IChzcmMgKyBjbnQpID4gc2VsZi0+c2l6ZSB8fAorICAgICAgICAgICBkZXN0IDwgMCB8fCBkZXN0ID4gc2VsZi0+c2l6ZSB8fCAoZGVzdCArIGNudCkgPiBzZWxmLT5zaXplKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIG9yIGRlc3RpbmF0aW9uIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgICAgICJzb3VyY2UsIGRlc3RpbmF0aW9uLCBvciBjb3VudCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5kYXRhK2Rlc3QsIHNlbGYtPmRhdGErc3JjLCBjb3VudCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICAgICAgfQorICAgICAgICBtZW1tb3ZlKHNlbGYtPmRhdGErZGVzdCwgc2VsZi0+ZGF0YStzcmMsIGNudCk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQogfQogCkBAIC0xMDk0LDYgKzExMDAsMTIgQEAKIH0KIAogI2lmZGVmIFVOSVgKKyNpZmRlZiBIQVZFX0xBUkdFRklMRV9TVVBQT1JUCisjZGVmaW5lIF9QeV9QQVJTRV9PRkZfVCAiTCIKKyNlbHNlCisjZGVmaW5lIF9QeV9QQVJTRV9PRkZfVCAibCIKKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QgKgogbmV3X21tYXBfb2JqZWN0KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCiB7CkBAIC0xMTAxLDggKzExMTMsOSBAQAogICAgIHN0cnVjdCBzdGF0IHN0OwogI2VuZGlmCiAgICAgbW1hcF9vYmplY3QgKm1fb2JqOwotICAgIFB5T2JqZWN0ICptYXBfc2l6ZV9vYmogPSBOVUxMLCAqb2Zmc2V0X29iaiA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBtYXBfc2l6ZSwgb2Zmc2V0OworICAgIFB5T2JqZWN0ICptYXBfc2l6ZV9vYmogPSBOVUxMOworICAgIFB5X3NzaXplX3QgbWFwX3NpemU7CisgICAgb2ZmX3Qgb2Zmc2V0ID0gMDsKICAgICBpbnQgZmQsIGZsYWdzID0gTUFQX1NIQVJFRCwgcHJvdCA9IFBST1RfV1JJVEUgfCBQUk9UX1JFQUQ7CiAgICAgaW50IGRldnplcm8gPSAtMTsKICAgICBpbnQgYWNjZXNzID0gKGludClBQ0NFU1NfREVGQVVMVDsKQEAgLTExMTAsMTYgKzExMjMsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmxhZ3MiLCAicHJvdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VzcyIsICJvZmZzZXQiLCBOVUxMfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgImlPfGlpaU8iLCBrZXl3b3JkcywKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJpT3xpaWkiIF9QeV9QQVJTRV9PRkZfVCwga2V5d29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZkLCAmbWFwX3NpemVfb2JqLCAmZmxhZ3MsICZwcm90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhY2Nlc3MsICZvZmZzZXRfb2JqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWNjZXNzLCAmb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbWFwX3NpemUgPSBfR2V0TWFwU2l6ZShtYXBfc2l6ZV9vYmosICJzaXplIik7CiAgICAgaWYgKG1hcF9zaXplIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgb2Zmc2V0ID0gX0dldE1hcFNpemUob2Zmc2V0X29iaiwgIm9mZnNldCIpOwotICAgIGlmIChvZmZzZXQgPCAwKQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgIm1lbW9yeSBtYXBwZWQgb2Zmc2V0IG11c3QgYmUgcG9zaXRpdmUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgaWYgKChhY2Nlc3MgIT0gKGludClBQ0NFU1NfREVGQVVMVCkgJiYKICAgICAgICAgKChmbGFncyAhPSBNQVBfU0hBUkVEKSB8fCAocHJvdCAhPSAoUFJPVF9XUklURSB8IFBST1RfUkVBRCkpKSkKQEAgLTExNTksOCArMTE3NCwxOSBAQAogIyAgZW5kaWYKICAgICBpZiAoZmQgIT0gLTEgJiYgZnN0YXQoZmQsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKSB7CiAgICAgICAgIGlmIChtYXBfc2l6ZSA9PSAwKSB7Ci0gICAgICAgICAgICBtYXBfc2l6ZSA9IHN0LnN0X3NpemU7Ci0gICAgICAgIH0gZWxzZSBpZiAoKHNpemVfdClvZmZzZXQgKyAoc2l6ZV90KW1hcF9zaXplID4gc3Quc3Rfc2l6ZSkgeworICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBzdC5zdF9zaXplKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbWFwIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gZmlsZSBzaXplIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvZmZfdCBjYWxjX3NpemUgPSBzdC5zdF9zaXplIC0gb2Zmc2V0OworICAgICAgICAgICAgbWFwX3NpemUgPSBjYWxjX3NpemU7CisgICAgICAgICAgICBpZiAobWFwX3NpemUgIT0gY2FsY19zaXplKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW1hcCBsZW5ndGggaXMgdG9vIGxhcmdlIik7CisgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgKyAoc2l6ZV90KW1hcF9zaXplID4gc3Quc3Rfc2l6ZSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tYXAgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBmaWxlIHNpemUiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTIyMCwxMiArMTI0NiwxOSBAQAogI2VuZGlmIC8qIFVOSVggKi8KIAogI2lmZGVmIE1TX1dJTkRPV1MKKworLyogQSBub3RlIG9uIHNpemVzIGFuZCBvZmZzZXRzOiB3aGlsZSB0aGUgYWN0dWFsIG1hcCBzaXplIG11c3QgaG9sZCBpbiBhCisgICBQeV9zc2l6ZV90LCBib3RoIHRoZSB0b3RhbCBmaWxlIHNpemUgYW5kIHRoZSBzdGFydCBvZmZzZXQgY2FuIGJlIGxvbmdlcgorICAgdGhhbiBhIFB5X3NzaXplX3QsIHNvIHdlIHVzZSBQWV9MT05HX0xPTkcgd2hpY2ggaXMgYWx3YXlzIDY0LWJpdC4KKyovCisKIHN0YXRpYyBQeU9iamVjdCAqCiBuZXdfbW1hcF9vYmplY3QoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKIHsKICAgICBtbWFwX29iamVjdCAqbV9vYmo7Ci0gICAgUHlPYmplY3QgKm1hcF9zaXplX29iaiA9IE5VTEwsICpvZmZzZXRfb2JqID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IG1hcF9zaXplLCBvZmZzZXQ7CisgICAgUHlPYmplY3QgKm1hcF9zaXplX29iaiA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBtYXBfc2l6ZTsKKyAgICBQWV9MT05HX0xPTkcgb2Zmc2V0ID0gMCwgc2l6ZTsKICAgICBEV09SRCBvZmZfaGk7ICAgICAgIC8qIHVwcGVyIDMyIGJpdHMgb2Ygb2Zmc2V0ICovCiAgICAgRFdPUkQgb2ZmX2xvOyAgICAgICAvKiBsb3dlciAzMiBiaXRzIG9mIG9mZnNldCAqLwogICAgIERXT1JEIHNpemVfaGk7ICAgICAgLyogdXBwZXIgMzIgYml0cyBvZiBzaXplICovCkBAIC0xMjQwLDkgKzEyNzMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGFnbmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2Nlc3MiLCAib2Zmc2V0IiwgTlVMTCB9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAiaU98emlPIiwga2V5d29yZHMsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAiaU98emlMIiwga2V5d29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVubywgJm1hcF9zaXplX29iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnbmFtZSwgJmFjY2VzcywgJm9mZnNldF9vYmopKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZ25hbWUsICZhY2Nlc3MsICZvZmZzZXQpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTI2Nyw5ICsxMzAwLDExIEBACiAgICAgbWFwX3NpemUgPSBfR2V0TWFwU2l6ZShtYXBfc2l6ZV9vYmosICJzaXplIik7CiAgICAgaWYgKG1hcF9zaXplIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgb2Zmc2V0ID0gX0dldE1hcFNpemUob2Zmc2V0X29iaiwgIm9mZnNldCIpOwotICAgIGlmIChvZmZzZXQgPCAwKQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgIm1lbW9yeSBtYXBwZWQgb2Zmc2V0IG11c3QgYmUgcG9zaXRpdmUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgLyogYXNzdW1lIC0xIGFuZCAwIGJvdGggbWVhbiBpbnZhbGlkIGZpbGVkZXNjcmlwdG9yCiAgICAgICAgdG8gJ2Fub255bW91c2x5JyBtYXAgbWVtb3J5LgpAQCAtMTI4MCw2ICsxMzE1LDExIEBACiAgICAgICAgICAgICAgICAgICAgImRvbid0IHVzZSAwIGZvciBhbm9ueW1vdXMgbWVtb3J5Iik7CiAgICAgICovCiAgICAgaWYgKGZpbGVubyAhPSAtMSAmJiBmaWxlbm8gIT0gMCkgeworICAgICAgICAvKiBFbnN1cmUgdGhhdCBmaWxlbm8gaXMgd2l0aGluIHRoZSBDUlQncyB2YWxpZCByYW5nZSAqLworICAgICAgICBpZiAoX1B5VmVyaWZ5X2ZkKGZpbGVubykgPT0gMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKG1tYXBfbW9kdWxlX2Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGZoID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmaWxlbm8pOwogICAgICAgICBpZiAoZmg9PShIQU5ETEUpLTEpIHsKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhtbWFwX21vZHVsZV9lcnJvcik7CkBAIC0xMzI3LDIxICsxMzY3LDI2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGR3RXJyKTsKICAgICAgICAgICAgIH0KIAotI2lmIFNJWkVPRl9TSVpFX1QgPiA0Ci0gICAgICAgICAgICBtX29iai0+c2l6ZSA9ICgoKHNpemVfdCloaWdoKTw8MzIpICsgbG93OwotI2Vsc2UKLSAgICAgICAgICAgIGlmIChoaWdoKQotICAgICAgICAgICAgICAgIC8qIEZpbGUgaXMgdG9vIGxhcmdlIHRvIG1hcCBjb21wbGV0ZWx5ICovCi0gICAgICAgICAgICAgICAgbV9vYmotPnNpemUgPSAoc2l6ZV90KS0xOworICAgICAgICAgICAgc2l6ZSA9ICgoKFBZX0xPTkdfTE9ORykgaGlnaCkgPDwgMzIpICsgbG93OworICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBzaXplKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbWFwIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gZmlsZSBzaXplIik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1fb2JqKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvZmZzZXQgLSBzaXplID4gUFlfU1NJWkVfVF9NQVgpCisgICAgICAgICAgICAgICAgLyogTWFwIGFyZWEgdG9vIGxhcmdlIHRvIGZpdCBpbiBtZW1vcnkgKi8KKyAgICAgICAgICAgICAgICBtX29iai0+c2l6ZSA9IChQeV9zc2l6ZV90KSAtMTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX29iai0+c2l6ZSA9IGxvdzsKLSNlbmRpZgorICAgICAgICAgICAgICAgIG1fb2JqLT5zaXplID0gKFB5X3NzaXplX3QpIChzaXplIC0gb2Zmc2V0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fb2JqLT5zaXplID0gbWFwX3NpemU7CisgICAgICAgICAgICBzaXplID0gb2Zmc2V0ICsgbWFwX3NpemU7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIG1fb2JqLT5zaXplID0gbWFwX3NpemU7CisgICAgICAgIHNpemUgPSBvZmZzZXQgKyBtYXBfc2l6ZTsKICAgICB9CiAKICAgICAvKiBzZXQgdGhlIGluaXRpYWwgcG9zaXRpb24gKi8KQEAgLTEzNjEsMjIgKzE0MDYsMTAgQEAKICAgICAgICAgbV9vYmotPnRhZ25hbWUgPSBOVUxMOwogCiAgICAgbV9vYmotPmFjY2VzcyA9IChhY2Nlc3NfbW9kZSlhY2Nlc3M7Ci0gICAgLyogRFdPUkQgaXMgYSA0LWJ5dGUgaW50LiAgSWYgd2UncmUgb24gYSBib3ggd2hlcmUgc2l6ZV90IGNvbnN1bWVzCi0gICAgICogbW9yZSB0aGFuIDQgYnl0ZXMsIHdlIG5lZWQgdG8gYnJlYWsgaXQgYXBhcnQuICBFbHNlIChzaXplX3QKLSAgICAgKiBjb25zdW1lcyA0IGJ5dGVzKSwgQyBkb2Vzbid0IGRlZmluZSB3aGF0IGhhcHBlbnMgaWYgd2Ugc2hpZnQKLSAgICAgKiByaWdodCBieSAzMiwgc28gd2UgbmVlZCBkaWZmZXJlbnQgY29kZS4KLSAgICAgKi8KLSNpZiBTSVpFT0ZfU0laRV9UID4gNAotICAgIHNpemVfaGkgPSAoRFdPUkQpKChvZmZzZXQgKyBtX29iai0+c2l6ZSkgPj4gMzIpOwotICAgIHNpemVfbG8gPSAoRFdPUkQpKChvZmZzZXQgKyBtX29iai0+c2l6ZSkgJiAweEZGRkZGRkZGKTsKKyAgICBzaXplX2hpID0gKERXT1JEKShzaXplID4+IDMyKTsKKyAgICBzaXplX2xvID0gKERXT1JEKShzaXplICYgMHhGRkZGRkZGRik7CiAgICAgb2ZmX2hpID0gKERXT1JEKShvZmZzZXQgPj4gMzIpOwogICAgIG9mZl9sbyA9IChEV09SRCkob2Zmc2V0ICYgMHhGRkZGRkZGRik7Ci0jZWxzZQotICAgIHNpemVfaGkgPSAwOwotICAgIHNpemVfbG8gPSAoRFdPUkQpKG9mZnNldCArIG1fb2JqLT5zaXplKTsKLSAgICBvZmZfaGkgPSAwOwotICAgIG9mZl9sbyA9IChEV09SRClvZmZzZXQ7Ci0jZW5kaWYKICAgICAvKiBGb3IgZmlsZXMsIGl0IHdvdWxkIGJlIHN1ZmZpY2llbnQgdG8gcGFzcyAwIGFzIHNpemUuCiAgICAgICAgRm9yIGFub255bW91cyBtYXBzLCB3ZSBoYXZlIHRvIHBhc3MgdGhlIHNpemUgZXhwbGljaXRseS4gKi8KICAgICBtX29iai0+bWFwX2hhbmRsZSA9IENyZWF0ZUZpbGVNYXBwaW5nKG1fb2JqLT5maWxlX2hhbmRsZSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvbmlzbW9kdWxlLmMgYi9Nb2R1bGVzL25pc21vZHVsZS5jCmluZGV4IDA0ZDg1NzAuLjZhY2FiNjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbmlzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9uaXNtb2R1bGUuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgUHlfWERFQ1JFRihrZXkpOwogICAgICAgICAgICAgUHlfWERFQ1JFRih2YWwpOworICAgICAgICAgICAgaW5kYXRhLT5zdGF0ZSA9IFB5RXZhbF9TYXZlVGhyZWFkKCk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShpbmRhdGEtPmRpY3QsIGtleSwgdmFsKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvb3BlcmF0b3IuYyBiL01vZHVsZXMvb3BlcmF0b3IuYwppbmRleCA1OTFiNWVhLi4yNzRkOGFhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL29wZXJhdG9yLmMKKysrIGIvTW9kdWxlcy9vcGVyYXRvci5jCkBAIC02NSw3ICs2NSwyNiBAQAogICBpZighIFB5QXJnX1VucGFja1R1cGxlKGEsI09QLDIsMiwmYTEsJmEyKSkgcmV0dXJuIE5VTEw7IFwKICAgcmV0dXJuIFB5T2JqZWN0X1JpY2hDb21wYXJlKGExLGEyLEEpOyB9CiAKLXNwYW1pKGlzQ2FsbGFibGUgICAgICAgLCBQeUNhbGxhYmxlX0NoZWNrKQorLyogRGVwcmVjYXRlZCBvcGVyYXRvcnMgdGhhdCBuZWVkIHdhcm5pbmdzLiAqLworc3RhdGljIGludAorb3BfaXNDYWxsYWJsZShQeU9iamVjdCAqeCkKK3sKKyAgICBpZiAoUHlFcnJfV2FyblB5M2soIm9wZXJhdG9yLmlzQ2FsbGFibGUoKSBpcyBub3Qgc3VwcG9ydGVkIGluIDMueC4gIgorICAgICAgICAgICAgICAgICAgICAgICAiVXNlIGhhc2F0dHIob2JqLCAnX19jYWxsX18nKS4iLCAxKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gUHlDYWxsYWJsZV9DaGVjayh4KTsKK30KKworc3RhdGljIGludAorb3Bfc2VxdWVuY2VJbmNsdWRlcyhQeU9iamVjdCAqc2VxLCBQeU9iamVjdCogb2IpCit7CisgICAgaWYgKFB5RXJyX1dhcm5QeTNrKCJvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzKCkgaXMgbm90IHN1cHBvcnRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICJpbiAzLnguIFVzZSBvcGVyYXRvci5jb250YWlucygpLiIsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBQeVNlcXVlbmNlX0NvbnRhaW5zKHNlcSwgb2IpOworfQorCitzcGFtaShpc0NhbGxhYmxlICAgICAgICwgb3BfaXNDYWxsYWJsZSkKIHNwYW1pKGlzTnVtYmVyVHlwZSAgICAgLCBQeU51bWJlcl9DaGVjaykKIHNwYW1pKHRydXRoICAgICAgICAgICAgLCBQeU9iamVjdF9Jc1RydWUpCiBzcGFtMihvcF9hZGQgICAgICAgICAgICwgUHlOdW1iZXJfQWRkKQpAQCAtMTA0LDcgKzEyMyw3IEBACiBzcGFtMihvcF9pY29uY2F0ICAgICAgICwgUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0KQogc3BhbW9pKG9wX2lyZXBlYXQgICAgICAsIFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdCkKIHNwYW1pMmIob3BfY29udGFpbnMgICAgICwgUHlTZXF1ZW5jZV9Db250YWlucykKLXNwYW1pMmIoc2VxdWVuY2VJbmNsdWRlcywgUHlTZXF1ZW5jZV9Db250YWlucykKK3NwYW1pMmIoc2VxdWVuY2VJbmNsdWRlcywgb3Bfc2VxdWVuY2VJbmNsdWRlcykKIHNwYW1uMihpbmRleE9mICAgICAgICAgLCBQeVNlcXVlbmNlX0luZGV4KQogc3BhbW4yKGNvdW50T2YgICAgICAgICAsIFB5U2VxdWVuY2VfQ291bnQpCiBzcGFtaShpc01hcHBpbmdUeXBlICAgICwgUHlNYXBwaW5nX0NoZWNrKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYyBiL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKaW5kZXggZTFiN2EyYi4uZjBhYzVlOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCkBAIC05MzUsMTIgKzkzNSwxMiBAQAogVkFMSURBVEVSKGF0b20pOyAgICAgICAgICAgICAgICBWQUxJREFURVIobGFtYmRlZik7CiBWQUxJREFURVIodHJhaWxlcik7ICAgICAgICAgICAgIFZBTElEQVRFUihzdWJzY3JpcHQpOwogVkFMSURBVEVSKHN1YnNjcmlwdGxpc3QpOyAgICAgICBWQUxJREFURVIoc2xpY2VvcCk7Ci1WQUxJREFURVIoZXhwcmxpc3QpOyAgICAgICAgICAgIFZBTElEQVRFUihkaWN0bWFrZXIpOworVkFMSURBVEVSKGV4cHJsaXN0KTsgICAgICAgICAgICBWQUxJREFURVIoZGljdG9yc2V0bWFrZXIpOwogVkFMSURBVEVSKGFyZ2xpc3QpOyAgICAgICAgICAgICBWQUxJREFURVIoYXJndW1lbnQpOwogVkFMSURBVEVSKGxpc3RtYWtlcik7ICAgICAgICAgICBWQUxJREFURVIoeWllbGRfc3RtdCk7Ci1WQUxJREFURVIodGVzdGxpc3QxKTsgICAgICAgICAgIFZBTElEQVRFUihnZW5fZm9yKTsKLVZBTElEQVRFUihnZW5faXRlcik7ICAgICAgICAgICAgVkFMSURBVEVSKGdlbl9pZik7Ci1WQUxJREFURVIodGVzdGxpc3RfZ2V4cCk7ICAgICAgIFZBTElEQVRFUih5aWVsZF9leHByKTsKK1ZBTElEQVRFUih0ZXN0bGlzdDEpOyAgICAgICAgICAgVkFMSURBVEVSKGNvbXBfZm9yKTsKK1ZBTElEQVRFUihjb21wX2l0ZXIpOyAgICAgICAgICAgVkFMSURBVEVSKGNvbXBfaWYpOworVkFMSURBVEVSKHRlc3RsaXN0X2NvbXApOyAgICAgICBWQUxJREFURVIoeWllbGRfZXhwcik7CiBWQUxJREFURVIoeWllbGRfb3JfdGVzdGxpc3QpOyAgIFZBTElEQVRFUihvcl90ZXN0KTsKIFZBTElEQVRFUihvbGRfdGVzdCk7ICAgICAgICAgICAgVkFMSURBVEVSKG9sZF9sYW1iZGVmKTsKIApAQCAtMTM0MiwxNyArMTM0MiwxNyBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLS8qICBnZW5faXRlcjogIGdlbl9mb3IgfCBnZW5faWYKKy8qICBjb21wX2l0ZXI6ICBjb21wX2ZvciB8IGNvbXBfaWYKICAqLwogc3RhdGljIGludAotdmFsaWRhdGVfZ2VuX2l0ZXIobm9kZSAqdHJlZSkKK3ZhbGlkYXRlX2NvbXBfaXRlcihub2RlICp0cmVlKQogewotICAgIGludCByZXMgPSAodmFsaWRhdGVfbnR5cGUodHJlZSwgZ2VuX2l0ZXIpCi0gICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9udW1ub2Rlcyh0cmVlLCAxLCAiZ2VuX2l0ZXIiKSk7Ci0gICAgaWYgKHJlcyAmJiBUWVBFKENISUxEKHRyZWUsIDApKSA9PSBnZW5fZm9yKQotICAgICAgICByZXMgPSB2YWxpZGF0ZV9nZW5fZm9yKENISUxEKHRyZWUsIDApKTsKKyAgICBpbnQgcmVzID0gKHZhbGlkYXRlX250eXBlKHRyZWUsIGNvbXBfaXRlcikKKyAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX251bW5vZGVzKHRyZWUsIDEsICJjb21wX2l0ZXIiKSk7CisgICAgaWYgKHJlcyAmJiBUWVBFKENISUxEKHRyZWUsIDApKSA9PSBjb21wX2ZvcikKKyAgICAgICAgcmVzID0gdmFsaWRhdGVfY29tcF9mb3IoQ0hJTEQodHJlZSwgMCkpOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gdmFsaWRhdGVfZ2VuX2lmKENISUxEKHRyZWUsIDApKTsKKyAgICAgICAgcmVzID0gdmFsaWRhdGVfY29tcF9pZihDSElMRCh0cmVlLCAwKSk7CiAKICAgICByZXR1cm4gcmVzOwogfQpAQCAtMTM3OSwxOCArMTM3OSwxOCBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLS8qICBnZW5fZm9yOiAgJ2ZvcicgZXhwcmxpc3QgJ2luJyB0ZXN0IFtnZW5faXRlcl0KKy8qICBjb21wX2ZvcjogICdmb3InIGV4cHJsaXN0ICdpbicgdGVzdCBbY29tcF9pdGVyXQogICovCiBzdGF0aWMgaW50Ci12YWxpZGF0ZV9nZW5fZm9yKG5vZGUgKnRyZWUpCit2YWxpZGF0ZV9jb21wX2Zvcihub2RlICp0cmVlKQogewogICAgIGludCBuY2ggPSBOQ0godHJlZSk7CiAgICAgaW50IHJlczsKIAogICAgIGlmIChuY2ggPT0gNSkKLSAgICAgICAgcmVzID0gdmFsaWRhdGVfZ2VuX2l0ZXIoQ0hJTEQodHJlZSwgNCkpOworICAgICAgICByZXMgPSB2YWxpZGF0ZV9jb21wX2l0ZXIoQ0hJTEQodHJlZSwgNCkpOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gdmFsaWRhdGVfbnVtbm9kZXModHJlZSwgNCwgImdlbl9mb3IiKTsKKyAgICAgICAgcmVzID0gdmFsaWRhdGVfbnVtbm9kZXModHJlZSwgNCwgImNvbXBfZm9yIik7CiAKICAgICBpZiAocmVzKQogICAgICAgICByZXMgPSAodmFsaWRhdGVfbmFtZShDSElMRCh0cmVlLCAwKSwgImZvciIpCkBAIC0xNDIxLDE4ICsxNDIxLDE4IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotLyogIGdlbl9pZjogICdpZicgb2xkX3Rlc3QgW2dlbl9pdGVyXQorLyogIGNvbXBfaWY6ICAnaWYnIG9sZF90ZXN0IFtjb21wX2l0ZXJdCiAgKi8KIHN0YXRpYyBpbnQKLXZhbGlkYXRlX2dlbl9pZihub2RlICp0cmVlKQordmFsaWRhdGVfY29tcF9pZihub2RlICp0cmVlKQogewogICAgIGludCBuY2ggPSBOQ0godHJlZSk7CiAgICAgaW50IHJlczsKIAogICAgIGlmIChuY2ggPT0gMykKLSAgICAgICAgcmVzID0gdmFsaWRhdGVfZ2VuX2l0ZXIoQ0hJTEQodHJlZSwgMikpOworICAgICAgICByZXMgPSB2YWxpZGF0ZV9jb21wX2l0ZXIoQ0hJTEQodHJlZSwgMikpOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gdmFsaWRhdGVfbnVtbm9kZXModHJlZSwgMiwgImdlbl9pZiIpOworICAgICAgICByZXMgPSB2YWxpZGF0ZV9udW1ub2Rlcyh0cmVlLCAyLCAiY29tcF9pZiIpOwogCiAgICAgaWYgKHJlcykKICAgICAgICAgcmVzID0gKHZhbGlkYXRlX25hbWUoQ0hJTEQodHJlZSwgMCksICJpZiIpCkBAIC0yNDYzLDcgKzI0NjMsNyBAQAogICAgICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKHRyZWUsIDEpKT09eWllbGRfZXhwcikKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRlX3lpZWxkX2V4cHIoQ0hJTEQodHJlZSwgMSkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRlX3Rlc3RsaXN0X2dleHAoQ0hJTEQodHJlZSwgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVfdGVzdGxpc3RfY29tcChDSElMRCh0cmVlLCAxKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIExTUUI6CkBAIC0yNDgyLDcgKzI0ODIsNyBAQAogICAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX250eXBlKENISUxEKHRyZWUsIG5jaCAtIDEpLCBSQlJBQ0UpKTsKIAogICAgICAgICAgICAgaWYgKHJlcyAmJiAobmNoID09IDMpKQotICAgICAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRlX2RpY3RtYWtlcihDSElMRCh0cmVlLCAxKSk7CisgICAgICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVfZGljdG9yc2V0bWFrZXIoQ0hJTEQodHJlZSwgMSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBCQUNLUVVPVEU6CiAgICAgICAgICAgICByZXMgPSAoKG5jaCA9PSAzKQpAQCAtMjU0MywyNiArMjU0MywyNiBAQAogICAgIHJldHVybiBvazsKIH0KIAotLyogIHRlc3RsaXN0X2dleHA6Ci0gKiAgICB0ZXN0ICggZ2VuX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddICkKKy8qICB0ZXN0bGlzdF9jb21wOgorICogICAgdGVzdCAoIGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10gKQogICovCiBzdGF0aWMgaW50Ci12YWxpZGF0ZV90ZXN0bGlzdF9nZXhwKG5vZGUgKnRyZWUpCit2YWxpZGF0ZV90ZXN0bGlzdF9jb21wKG5vZGUgKnRyZWUpCiB7CiAgICAgaW50IG5jaCA9IE5DSCh0cmVlKTsKICAgICBpbnQgb2sgPSBuY2g7CiAKICAgICBpZiAobmNoID09IDApCi0gICAgICAgIGVycl9zdHJpbmcoIm1pc3NpbmcgY2hpbGQgbm9kZXMgb2YgdGVzdGxpc3RfZ2V4cCIpOworICAgICAgICBlcnJfc3RyaW5nKCJtaXNzaW5nIGNoaWxkIG5vZGVzIG9mIHRlc3RsaXN0X2NvbXAiKTsKICAgICBlbHNlIHsKICAgICAgICAgb2sgPSB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDApKTsKICAgICB9CiAKICAgICAvKgotICAgICAqICBnZW5fZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10KKyAgICAgKiAgY29tcF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXQogICAgICAqLwotICAgIGlmIChuY2ggPT0gMiAmJiBUWVBFKENISUxEKHRyZWUsIDEpKSA9PSBnZW5fZm9yKQotICAgICAgICBvayA9IHZhbGlkYXRlX2dlbl9mb3IoQ0hJTEQodHJlZSwgMSkpOworICAgIGlmIChuY2ggPT0gMiAmJiBUWVBFKENISUxEKHRyZWUsIDEpKSA9PSBjb21wX2ZvcikKKyAgICAgICAgb2sgPSB2YWxpZGF0ZV9jb21wX2ZvcihDSElMRCh0cmVlLCAxKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8qICAoJywnIHRlc3QpKiBbJywnXSAgKi8KICAgICAgICAgaW50IGkgPSAxOwpAQCAtMjU3NSw3ICsyNTc1LDcgQEAKICAgICAgICAgICAgIG9rID0gdmFsaWRhdGVfY29tbWEoQ0hJTEQodHJlZSwgaSkpOwogICAgICAgICBlbHNlIGlmIChpICE9IG5jaCkgewogICAgICAgICAgICAgb2sgPSAwOwotICAgICAgICAgICAgZXJyX3N0cmluZygiaWxsZWdhbCB0cmFpbGluZyBub2RlcyBmb3IgdGVzdGxpc3RfZ2V4cCIpOworICAgICAgICAgICAgZXJyX3N0cmluZygiaWxsZWdhbCB0cmFpbGluZyBub2RlcyBmb3IgdGVzdGxpc3RfY29tcCIpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBvazsKQEAgLTI2MjIsMzYgKzI2MjIsMzkgQEAKICAgICByZXR1cm4gb2s7CiB9CiAKLS8qICB3aXRoX3Zhcgotd2l0aF92YXI6ICdhcycgZXhwcgorLyogIHdpdGhfaXRlbToKKyAqICAgdGVzdCBbJ2FzJyBleHByXQogICovCiBzdGF0aWMgaW50Ci12YWxpZGF0ZV93aXRoX3Zhcihub2RlICp0cmVlKQordmFsaWRhdGVfd2l0aF9pdGVtKG5vZGUgKnRyZWUpCiB7CiAgICAgaW50IG5jaCA9IE5DSCh0cmVlKTsKLSAgICBpbnQgb2sgPSAodmFsaWRhdGVfbnR5cGUodHJlZSwgd2l0aF92YXIpCi0gICAgICAgICYmIChuY2ggPT0gMikKLSAgICAgICAgJiYgdmFsaWRhdGVfbmFtZShDSElMRCh0cmVlLCAwKSwgImFzIikKLSAgICAgICAgJiYgdmFsaWRhdGVfZXhwcihDSElMRCh0cmVlLCAxKSkpOwotICAgcmV0dXJuIG9rOworICAgIGludCBvayA9ICh2YWxpZGF0ZV9udHlwZSh0cmVlLCB3aXRoX2l0ZW0pCisgICAgICAgICAgICAgICYmIChuY2ggPT0gMSB8fCBuY2ggPT0gMykKKyAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCAwKSkpOworICAgIGlmIChvayAmJiBuY2ggPT0gMykKKyAgICAgICAgb2sgPSAodmFsaWRhdGVfbmFtZShDSElMRCh0cmVlLCAxKSwgImFzIikKKyAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfZXhwcihDSElMRCh0cmVlLCAyKSkpOworICAgIHJldHVybiBvazsKIH0KIAotLyogIHdpdGhfc3RtdAotICogICAgICAgICAgIDAgICAgICAxICAgICAgIDIgICAgICAgLTIgICAtMQotd2l0aF9zdG10OiAnd2l0aCcgdGVzdCBbIHdpdGhfdmFyIF0gJzonIHN1aXRlCisvKiAgd2l0aF9zdG10OgorICogICAgMCAgICAgIDEgICAgICAgICAgLi4uICAgICAgICAgICAgIC0yICAgLTEKKyAqICAgJ3dpdGgnIHdpdGhfaXRlbSAoJywnIHdpdGhfaXRlbSkqICc6JyBzdWl0ZQogICovCiBzdGF0aWMgaW50CiB2YWxpZGF0ZV93aXRoX3N0bXQobm9kZSAqdHJlZSkKIHsKKyAgICBpbnQgaTsKICAgICBpbnQgbmNoID0gTkNIKHRyZWUpOwogICAgIGludCBvayA9ICh2YWxpZGF0ZV9udHlwZSh0cmVlLCB3aXRoX3N0bXQpCi0gICAgICAgICYmICgobmNoID09IDQpIHx8IChuY2ggPT0gNSkpCisgICAgICAgICYmIChuY2ggJSAyID09IDApCiAgICAgICAgICYmIHZhbGlkYXRlX25hbWUoQ0hJTEQodHJlZSwgMCksICJ3aXRoIikKLSAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCAxKSkKLSAgICAgICAgJiYgKG5jaCA9PSA0IHx8IHZhbGlkYXRlX3dpdGhfdmFyKENISUxEKHRyZWUsIDIpKSkKICAgICAgICAgJiYgdmFsaWRhdGVfY29sb24oUkNISUxEKHRyZWUsIC0yKSkKICAgICAgICAgJiYgdmFsaWRhdGVfc3VpdGUoUkNISUxEKHRyZWUsIC0xKSkpOwotICAgcmV0dXJuIG9rOworICAgIGZvciAoaSA9IDE7IG9rICYmIGkgPCBuY2ggLSAyOyBpICs9IDIpCisgICAgICAgIG9rID0gdmFsaWRhdGVfd2l0aF9pdGVtKENISUxEKHRyZWUsIGkpKTsKKyAgICByZXR1cm4gb2s7CiB9CiAKIC8qICBmdW5jZGVmOgpAQCAtMjc0OCw3ICsyNzUxLDcgQEAKICAgICAgICAgZm9yIChpPTA7IGk8bmNoOyBpKyspIHsKICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKHRyZWUsIGkpKSA9PSBhcmd1bWVudCkgewogICAgICAgICAgICAgICAgIG5vZGUgKmNoID0gQ0hJTEQodHJlZSwgaSk7Ci0gICAgICAgICAgICAgICAgaWYgKE5DSChjaCkgPT0gMiAmJiBUWVBFKENISUxEKGNoLCAxKSkgPT0gZ2VuX2ZvcikgeworICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID09IDIgJiYgVFlQRShDSElMRChjaCwgMSkpID09IGNvbXBfZm9yKSB7CiAgICAgICAgICAgICAgICAgICAgIGVycl9zdHJpbmcoIm5lZWQgJygnLCAnKScgZm9yIGdlbmVyYXRvciBleHByZXNzaW9uIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4MTUsNyArMjgxOCw3IEBACiAKIC8qICBhcmd1bWVudDoKICAqCi0gKiAgW3Rlc3QgJz0nXSB0ZXN0IFtnZW5fZm9yXQorICogIFt0ZXN0ICc9J10gdGVzdCBbY29tcF9mb3JdCiAgKi8KIHN0YXRpYyBpbnQKIHZhbGlkYXRlX2FyZ3VtZW50KG5vZGUgKnRyZWUpCkBAIC0yODI2LDcgKzI4MjksNyBAQAogICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCAwKSkpOwogCiAgICAgaWYgKHJlcyAmJiAobmNoID09IDIpKQotICAgICAgICByZXMgPSB2YWxpZGF0ZV9nZW5fZm9yKENISUxEKHRyZWUsIDEpKTsKKyAgICAgICAgcmVzID0gdmFsaWRhdGVfY29tcF9mb3IoQ0hJTEQodHJlZSwgMSkpOwogICAgIGVsc2UgaWYgKHJlcyAmJiAobmNoID09IDMpKQogICAgICAgICByZXMgPSAodmFsaWRhdGVfZXF1YWwoQ0hJTEQodHJlZSwgMSkpCiAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDIpKSk7CkBAIC0yOTY3LDMzICsyOTcwLDg0IEBACiB9CiAKIAorLyoKKyAqIGRpY3RvcnNldG1ha2VyOgorICoKKyAqICh0ZXN0ICc6JyB0ZXN0IChjb21wX2ZvciB8ICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddKSkgfAorICogKHRlc3QgKGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10pKQorICovCiBzdGF0aWMgaW50Ci12YWxpZGF0ZV9kaWN0bWFrZXIobm9kZSAqdHJlZSkKK3ZhbGlkYXRlX2RpY3RvcnNldG1ha2VyKG5vZGUgKnRyZWUpCiB7CiAgICAgaW50IG5jaCA9IE5DSCh0cmVlKTsKLSAgICBpbnQgcmVzID0gKHZhbGlkYXRlX250eXBlKHRyZWUsIGRpY3RtYWtlcikKLSAgICAgICAgICAgICAgICYmIChuY2ggPj0gMykKLSAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgMCkpCi0gICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9jb2xvbihDSElMRCh0cmVlLCAxKSkKLSAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgMikpKTsKKyAgICBpbnQgb2sgPSB2YWxpZGF0ZV9udHlwZSh0cmVlLCBkaWN0b3JzZXRtYWtlcik7CisgICAgaW50IGkgPSAwOworICAgIGludCBjaGVja190cmFpbGluZ19jb21tYSA9IDA7CiAKLSAgICBpZiAocmVzICYmICgobmNoICUgNCkgPT0gMCkpCi0gICAgICAgIHJlcyA9IHZhbGlkYXRlX2NvbW1hKENISUxEKHRyZWUsIC0tbmNoKSk7Ci0gICAgZWxzZSBpZiAocmVzKQotICAgICAgICByZXMgPSAoKG5jaCAlIDQpID09IDMpOworICAgIGFzc2VydChuY2ggPiAwKTsKIAotICAgIGlmIChyZXMgJiYgKG5jaCA+IDMpKSB7Ci0gICAgICAgIGludCBwb3MgPSAzOwotICAgICAgICAvKiAgKCAnLCcgdGVzdCAnOicgdGVzdCApKiAgKi8KLSAgICAgICAgd2hpbGUgKHJlcyAmJiAocG9zIDwgbmNoKSkgewotICAgICAgICAgICAgcmVzID0gKHZhbGlkYXRlX2NvbW1hKENISUxEKHRyZWUsIHBvcykpCi0gICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCBwb3MgKyAxKSkKLSAgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9jb2xvbihDSElMRCh0cmVlLCBwb3MgKyAyKSkKLSAgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIHBvcyArIDMpKSk7Ci0gICAgICAgICAgICBwb3MgKz0gNDsKKyAgICBpZiAob2sgJiYgKG5jaCA9PSAxIHx8IFRZUEUoQ0hJTEQodHJlZSwgMSkpID09IENPTU1BKSkgeworICAgICAgICAvKiBXZSBnb3QgYSBzZXQ6CisgICAgICAgICAqICAgICB0ZXN0ICgnLCcgdGVzdCkqIFsnLCddCisgICAgICAgICAqLworICAgICAgICBvayA9IHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgaSsrKSk7CisgICAgICAgIHdoaWxlIChvayAmJiBuY2ggLSBpID49IDIpIHsKKyAgICAgICAgICAgIG9rID0gKHZhbGlkYXRlX2NvbW1hKENISUxEKHRyZWUsIGkpKQorICAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgaSsxKSkpOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICB9CisgICAgICAgIGNoZWNrX3RyYWlsaW5nX2NvbW1hID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAob2sgJiYgVFlQRShDSElMRCh0cmVlLCAxKSkgPT0gY29tcF9mb3IpIHsKKyAgICAgICAgLyogV2UgZ290IGEgc2V0IGNvbXByZWhlbnNpb246CisgICAgICAgICAqICAgICB0ZXN0IGNvbXBfZm9yCisgICAgICAgICAqLworICAgICAgICBvayA9ICh2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDApKQorICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9jb21wX2ZvcihDSElMRCh0cmVlLCAxKSkpOworICAgIH0KKyAgICBlbHNlIGlmIChvayAmJiBOQ0godHJlZSkgPiAzICYmIFRZUEUoQ0hJTEQodHJlZSwgMykpID09IGNvbXBfZm9yKSB7CisgICAgICAgIC8qIFdlIGdvdCBhIGRpY3QgY29tcHJlaGVuc2lvbjoKKyAgICAgICAgICogICAgIHRlc3QgJzonIHRlc3QgY29tcF9mb3IKKyAgICAgICAgICovCisgICAgICAgIG9rID0gKHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgMCkpCisgICAgICAgICAgICAgICYmIHZhbGlkYXRlX2NvbG9uKENISUxEKHRyZWUsIDEpKQorICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDIpKQorICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9jb21wX2ZvcihDSElMRCh0cmVlLCAzKSkpOworICAgIH0KKyAgICBlbHNlIGlmIChvaykgeworICAgICAgICAvKiBXZSBnb3QgYSBkaWN0OgorICAgICAgICAgKiAgICAgdGVzdCAnOicgdGVzdCAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXQorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG5jaCA+PSAzKSB7CisgICAgICAgICAgICBvayA9ICh2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkpKQorICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfY29sb24oQ0hJTEQodHJlZSwgaSsxKSkKKyAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgaSsyKSkpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgZXJyX3N0cmluZygiaWxsZWdhbCBudW1iZXIgb2Ygbm9kZXMgZm9yIGRpY3RvcnNldG1ha2VyIik7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAob2sgJiYgbmNoIC0gaSA+PSA0KSB7CisgICAgICAgICAgICBvayA9ICh2YWxpZGF0ZV9jb21tYShDSElMRCh0cmVlLCBpKSkKKyAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgaSsxKSkKKyAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX2NvbG9uKENISUxEKHRyZWUsIGkrMikpCisgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrMykpKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBjaGVja190cmFpbGluZ19jb21tYSA9IDE7CisgICAgfQorICAgIGlmIChvayAmJiBjaGVja190cmFpbGluZ19jb21tYSkgeworICAgICAgICBpZiAoaSA9PSBuY2gtMSkKKyAgICAgICAgICAgIG9rID0gdmFsaWRhdGVfY29tbWEoQ0hJTEQodHJlZSwgaSkpOworICAgICAgICBlbHNlIGlmIChpICE9IG5jaCkgeworICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgZXJyX3N0cmluZygiaWxsZWdhbCB0cmFpbGluZyBub2RlcyBmb3IgZGljdG9yc2V0bWFrZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gKHJlcyk7CisKKyAgICByZXR1cm4gb2s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wb3NpeG1vZHVsZS5jIGIvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCmluZGV4IDgyMmJjMTEuLjQ4NzYyYzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYworKysgYi9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKQEAgLTI2OSw2ICsyNjksNyBAQAogI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNlbmRpZgogI2luY2x1ZGUgIm9zZGVmcy5oIgorI2luY2x1ZGUgPG1hbGxvYy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxzaGVsbGFwaS5oPiAgIC8qIGZvciBTaGVsbEV4ZWN1dGUoKSAqLwogI2RlZmluZSBwb3BlbiAgIF9wb3BlbgpAQCAtMzM5LDYgKzM0MCw4IEBACiAKIC8qIGNob29zZSB0aGUgYXBwcm9wcmlhdGUgc3RhdCBhbmQgZnN0YXQgZnVuY3Rpb25zIGFuZCByZXR1cm4gc3RydWN0cyAqLwogI3VuZGVmIFNUQVQKKyN1bmRlZiBGU1RBVAorI3VuZGVmIFNUUlVDVF9TVEFUCiAjaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQogIyAgICAgICBkZWZpbmUgU1RBVCB3aW4zMl9zdGF0CiAjICAgICAgIGRlZmluZSBGU1RBVCB3aW4zMl9mc3RhdApAQCAtMzYwLDYgKzM2Myw5OSBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMAorLyogTWljcm9zb2Z0IENSVCBpbiBWUzIwMDUgYW5kIGhpZ2hlciB3aWxsIHZlcmlmeSB0aGF0IGEgZmlsZWhhbmRsZSBpcworICogdmFsaWQgYW5kIHRocm93IGFuIGFzc2VydGlvbiBpZiBpdCBpc24ndC4KKyAqIE5vcm1hbGx5LCBhbiBpbnZhbGlkIGZkIGlzIGxpa2VseSB0byBiZSBhIEMgcHJvZ3JhbSBlcnJvciBhbmQgdGhlcmVmb3JlCisgKiBhbiBhc3NlcnRpb24gY2FuIGJlIHVzZWZ1bCwgYnV0IGl0IGRvZXMgY29udHJhZGljdCB0aGUgUE9TSVggc3RhbmRhcmQKKyAqIHdoaWNoIGZvciB3cml0ZSgyKSBzdGF0ZXM6CisgKiAgICAiT3RoZXJ3aXNlLCAtMSBzaGFsbCBiZSByZXR1cm5lZCBhbmQgZXJybm8gc2V0IHRvIGluZGljYXRlIHRoZSBlcnJvci4iCisgKiAgICAiW0VCQURGXSBUaGUgZmlsZGVzIGFyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvciBvcGVuIGZvcgorICogICAgIHdyaXRpbmcuIgorICogRnVydGhlcm1vcmUsIHB5dGhvbiBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgYW55IG9sZCBpbnRlZ2VyCisgKiBhcyBhIGZkIGFuZCBzaG91bGQgbWVyZWx5IHJhaXNlIGEgcHl0aG9uIGV4Y2VwdGlvbiBvbiBlcnJvci4KKyAqIFRoZSBNaWNyb3NvZnQgQ1JUIGRvZXNuJ3QgcHJvdmlkZSBhbiBvZmZpY2lhbCB3YXkgdG8gY2hlY2sgZm9yIHRoZQorICogdmFsaWRpdHkgb2YgYSBmaWxlIGRlc2NyaXB0b3IsIGJ1dCB3ZSBjYW4gZW11bGF0ZSBpdHMgaW50ZXJuYWwgYmVoYXZpb3VyCisgKiBieSB1c2luZyB0aGUgZXhwb3J0ZWQgX19waW5mbyBkYXRhIG1lbWJlciBhbmQga25vd2xlZGdlIG9mIHRoZQorICogaW50ZXJuYWwgc3RydWN0dXJlcyBpbnZvbHZlZC4KKyAqIFRoZSBzdHJ1Y3R1cmVzIGJlbG93IG11c3QgYmUgdXBkYXRlZCBmb3IgZWFjaCB2ZXJzaW9uIG9mIHZpc3VhbCBzdHVkaW8KKyAqIGFjY29yZGluZyB0byB0aGUgZmlsZSBpbnRlcm5hbC5oIGluIHRoZSBDUlQgc291cmNlLCB1bnRpbCBNUyBjb21lcworICogdXAgd2l0aCBhIGxlc3MgaGFja3kgd2F5IHRvIGRvIHRoaXMuCisgKiAoYWxsIG9mIHRoaXMgaXMgdG8gYXZvaWQgZ2xvYmFsbHkgbW9kaWZ5aW5nIHRoZSBDUlQgYmVoYXZpb3VyIHVzaW5nCisgKiBfc2V0X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIoKSBhbmQgX0NydFNldFJlcG9ydE1vZGUoKSkKKyAqLworLyogVGhlIGFjdHVhbCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaXMgZGV0ZXJtaW5lZCBhdCBydW50aW1lLgorICogT25seSB0aGUgZmlyc3QgaXRlbXMgbXVzdCBiZSBwcmVzZW50LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50cHRyX3Qgb3NmaG5kOworICAgIGNoYXIgb3NmaWxlOworfSBteV9pb2luZm87CisKK2V4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgY2hhciAqIF9fcGlvaW5mb1tdOworI2RlZmluZSBJT0lORk9fTDJFIDUKKyNkZWZpbmUgSU9JTkZPX0FSUkFZX0VMVFMgICAoMSA8PCBJT0lORk9fTDJFKQorI2RlZmluZSBJT0lORk9fQVJSQVlTIDY0CisjZGVmaW5lIF9OSEFORExFXyAgICAgICAgICAgKElPSU5GT19BUlJBWVMgKiBJT0lORk9fQVJSQVlfRUxUUykKKyNkZWZpbmUgRk9QRU4gMHgwMQorI2RlZmluZSBfTk9fQ09OU09MRV9GSUxFTk8gKGludHB0cl90KS0yCisKKy8qIFRoaXMgZnVuY3Rpb24gZW11bGF0ZXMgd2hhdCB0aGUgd2luZG93cyBDUlQgZG9lcyB0byB2YWxpZGF0ZSBmaWxlIGhhbmRsZXMgKi8KK2ludAorX1B5VmVyaWZ5X2ZkKGludCBmZCkKK3sKKyAgICBjb25zdCBpbnQgaTEgPSBmZCA+PiBJT0lORk9fTDJFOworICAgIGNvbnN0IGludCBpMiA9IGZkICYgKCgxIDw8IElPSU5GT19MMkUpIC0gMSk7CisKKyAgICBzdGF0aWMgaW50IHNpemVvZl9pb2luZm8gPSAwOworCisgICAgLyogRGV0ZXJtaW5lIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgaW9pbmZvIHN0cnVjdHVyZSwKKyAgICAgKiBhcyB1c2VkIGJ5IHRoZSBDUlQgbG9hZGVkIGluIG1lbW9yeQorICAgICAqLworICAgIGlmIChzaXplb2ZfaW9pbmZvID09IDAgJiYgX19waW9pbmZvWzBdICE9IE5VTEwpIHsKKyAgICAgICAgc2l6ZW9mX2lvaW5mbyA9IF9tc2l6ZShfX3Bpb2luZm9bMF0pIC8gSU9JTkZPX0FSUkFZX0VMVFM7CisgICAgfQorICAgIGlmIChzaXplb2ZfaW9pbmZvID09IDApIHsKKyAgICAgICAgLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbi4uLiAqLworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogU2VlIHRoYXQgaXQgaXNuJ3QgYSBzcGVjaWFsIENMRUFSIGZpbGVubyAqLworICAgIGlmIChmZCAhPSBfTk9fQ09OU09MRV9GSUxFTk8pIHsKKyAgICAgICAgLyogTWljcm9zb2Z0IENSVCB3b3VsZCBjaGVjayB0aGF0IDA8PWZkPF9uaGFuZGxlIGJ1dCB3ZSBjYW4ndCBkbyB0aGF0LiAgSW5zdGVhZAorICAgICAgICAgKiB3ZSBjaGVjayBwb2ludGVyIHZhbGlkaXR5IGFuZCBvdGhlciBpbmZvCisgICAgICAgICAqLworICAgICAgICBpZiAoMCA8PSBpMSAmJiBpMSA8IElPSU5GT19BUlJBWVMgJiYgX19waW9pbmZvW2kxXSAhPSBOVUxMKSB7CisgICAgICAgICAgICAvKiBmaW5hbGx5LCBjaGVjayB0aGF0IHRoZSBmaWxlIGlzIG9wZW4gKi8KKyAgICAgICAgICAgIG15X2lvaW5mbyogaW5mbyA9IChteV9pb2luZm8qKShfX3Bpb2luZm9baTFdICsgaTIgKiBzaXplb2ZfaW9pbmZvKTsKKyAgICAgICAgICAgIGlmIChpbmZvLT5vc2ZpbGUgJiBGT1BFTikgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBmYWlsOgorICAgIGVycm5vID0gRUJBREY7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHRoZSBzcGVjaWFsIGNhc2Ugb2YgY2hlY2tpbmcgZHVwMi4gIFRoZSB0YXJnZXQgZmQgbXVzdCBiZSBpbiBhIHNlbnNpYmxlIHJhbmdlICovCitzdGF0aWMgaW50CitfUHlWZXJpZnlfZmRfZHVwMihpbnQgZmQxLCBpbnQgZmQyKQoreworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkMSkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChmZDIgPT0gX05PX0NPTlNPTEVfRklMRU5PKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoKHVuc2lnbmVkKWZkMiA8IF9OSEFORExFXykKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKyNlbHNlCisvKiBkdW1teSB2ZXJzaW9uLiBfUHlWZXJpZnlfZmQoKSBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZmlsZW9iamVjdC5oICovCisjZGVmaW5lIF9QeVZlcmlmeV9mZF9kdXAyKEEsIEIpICgxKQorI2VuZGlmCisKIC8qIFJldHVybiBhIGRpY3Rpb25hcnkgY29ycmVzcG9uZGluZyB0byB0aGUgUE9TSVggZW52aXJvbm1lbnQgdGFibGUgKi8KICNpZmRlZiBXSVRIX05FWFRfRlJBTUVXT1JLCiAvKiBPbiBEYXJ3aW4vTWFjT1NYIGEgc2hhcmVkIGxpYnJhcnkgb3IgZnJhbWV3b3JrIGhhcyBubyBhY2Nlc3MgdG8KQEAgLTQ0NSwxMyArNTQxLDEzIEBACiAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19PU0Vycm9yLCBuYW1lKTsKIH0KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUworI2lmZGVmIE1TX1dJTkRPV1MKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9lcnJvcl93aXRoX3VuaWNvZGVfZmlsZW5hbWUoUHlfVU5JQ09ERSogbmFtZSkKIHsKICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aFVuaWNvZGVGaWxlbmFtZShQeUV4Y19PU0Vycm9yLCBuYW1lKTsKIH0KLSNlbmRpZiAvKiBQeV9XSU5fV0lERV9GSUxFTkFNRVMgKi8KKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTQ3OCw3ICs1NzQsNiBAQAogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJybm8pOwogfQogCi0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCiBzdGF0aWMgUHlPYmplY3QgKgogd2luMzJfZXJyb3JfdW5pY29kZShjaGFyKiBmdW5jdGlvbiwgUHlfVU5JQ09ERSogZmlsZW5hbWUpCiB7CkBAIC00OTAsMTAgKzU4NSw2IEBACiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihlcnJubyk7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqX1B5VW5pY29kZV9Gcm9tRmlsZVN5c3RlbUVuY29kZWRPYmplY3QocmVnaXN0ZXIgUHlPYmplY3QgKm9iaikKLXsKLX0KLQogc3RhdGljIGludAogY29udmVydF90b191bmljb2RlKFB5T2JqZWN0ICoqcGFyYW0pCiB7CkBAIC01MTEsOSArNjAyLDcgQEAKICAgICByZXR1cm4gKCpwYXJhbSkgIT0gTlVMTDsKIH0KIAotI2VuZGlmIC8qIFB5X1dJTl9XSURFX0ZJTEVOQU1FUyAqLwotCi0jZW5kaWYKKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKICNpZiBkZWZpbmVkKFBZT1NfT1MyKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYwMiw2ICs2OTEsOCBAQAogICAgIGZkID0gUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcihmZG9iaik7CiAgICAgaWYgKGZkIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gKCpmdW5jKShmZCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTYxMSwyMCArNzAyLDYgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwotc3RhdGljIGludAotdW5pY29kZV9maWxlX25hbWVzKHZvaWQpCi17Ci0gICAgc3RhdGljIGludCBjYW51c2V3aWRlID0gLTE7Ci0gICAgaWYgKGNhbnVzZXdpZGUgPT0gLTEpIHsKLSAgICAgICAgLyogQXMgcGVyIGRvYyBmb3IgOjpHZXRWZXJzaW9uKCksIHRoaXMgaXMgdGhlIGNvcnJlY3QgdGVzdCBmb3IKLSAgICAgICAgICAgdGhlIFdpbmRvd3MgTlQgZmFtaWx5LiAqLwotICAgICAgICBjYW51c2V3aWRlID0gKEdldFZlcnNpb24oKSA8IDB4ODAwMDAwMDApID8gMSA6IDA7Ci0gICAgfQotICAgIHJldHVybiBjYW51c2V3aWRlOwotfQotI2VuZGlmCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF8xc3RyKFB5T2JqZWN0ICphcmdzLCBjaGFyICpmb3JtYXQsIGludCAoKmZ1bmMpKGNvbnN0IGNoYXIqKSkKIHsKQEAgLTY2Niw3ICs3NDMsNyBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCi0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCisjaWZkZWYgTVNfV0lORE9XUwogc3RhdGljIFB5T2JqZWN0Kgogd2luMzJfMXN0cihQeU9iamVjdCogYXJncywgY2hhciogZnVuYywKICAgICAgICAgICAgY2hhciogZm9ybWF0LCBCT09MIChfX3N0ZGNhbGwgKmZ1bmNBKShMUENTVFIpLApAQCAtNjc1LDE4ICs3NTIsMTcgQEAKICAgICBQeU9iamVjdCAqdW5pOwogICAgIGNoYXIgKmFuc2k7CiAgICAgQk9PTCByZXN1bHQ7Ci0gICAgaWYgKHVuaWNvZGVfZmlsZV9uYW1lcygpKSB7Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCB3Zm9ybWF0LCAmdW5pKSkKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgcmVzdWx0ID0gZnVuY1coUHlVbmljb2RlX0FzVW5pY29kZSh1bmkpKTsKLSAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZShmdW5jLCBQeVVuaWNvZGVfQXNVbmljb2RlKHVuaSkpOwotICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgIH0KKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCB3Zm9ybWF0LCAmdW5pKSkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXN1bHQgPSBmdW5jVyhQeVVuaWNvZGVfQXNVbmljb2RlKHVuaSkpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKGZ1bmMsIFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pKSk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsICZhbnNpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MDUsNyArNzgxLDcgQEAKICAgIGNoZGlyIGlzIGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgU2V0Q3VycmVudERpcmVjdG9yeTsgaG93ZXZlciwKICAgIGl0IGFsc28gbmVlZHMgdG8gc2V0ICJtYWdpYyIgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluZGljYXRpbmcKICAgIHRoZSBwZXItZHJpdmUgY3VycmVudCBkaXJlY3RvcnksIHdoaWNoIGFyZSBvZiB0aGUgZm9ybSA9PGRyaXZlPjogKi8KLUJPT0wgX19zdGRjYWxsCitzdGF0aWMgQk9PTCBfX3N0ZGNhbGwKIHdpbjMyX2NoZGlyKExQQ1NUUiBwYXRoKQogewogICAgIGNoYXIgbmV3X3BhdGhbTUFYX1BBVEgrMV07CkBAIC03MzAsNyArODA2LDcgQEAKIAogLyogVGhlIFVuaWNvZGUgdmVyc2lvbiBkaWZmZXJzIGZyb20gdGhlIEFOU0kgdmVyc2lvbgogICAgc2luY2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG1pZ2h0IGV4Y2VlZCBNQVhfUEFUSCBjaGFyYWN0ZXJzICovCi1CT09MIF9fc3RkY2FsbAorc3RhdGljIEJPT0wgX19zdGRjYWxsCiB3aW4zMl93Y2hkaXIoTFBDV1NUUiBwYXRoKQogewogICAgIHdjaGFyX3QgX25ld19wYXRoW01BWF9QQVRIKzFdLCAqbmV3X3BhdGggPSBfbmV3X3BhdGg7CkBAIC03ODQsMTggKzg2MCwxOCBAQAogICAgIGludCBzdF9naWQ7CiAgICAgaW50IHN0X3JkZXY7CiAgICAgX19pbnQ2NCBzdF9zaXplOwotICAgIGludCBzdF9hdGltZTsKKyAgICB0aW1lX3Qgc3RfYXRpbWU7CiAgICAgaW50IHN0X2F0aW1lX25zZWM7Ci0gICAgaW50IHN0X210aW1lOworICAgIHRpbWVfdCBzdF9tdGltZTsKICAgICBpbnQgc3RfbXRpbWVfbnNlYzsKLSAgICBpbnQgc3RfY3RpbWU7CisgICAgdGltZV90IHN0X2N0aW1lOwogICAgIGludCBzdF9jdGltZV9uc2VjOwogfTsKIAogc3RhdGljIF9faW50NjQgc2Vjc19iZXR3ZWVuX2Vwb2NocyA9IDExNjQ0NDczNjAwOyAvKiBTZWNvbmRzIGJldHdlZW4gMS4xLjE2MDEgYW5kIDEuMS4xOTcwICovCiAKIHN0YXRpYyB2b2lkCi1GSUxFX1RJTUVfdG9fdGltZV90X25zZWMoRklMRVRJTUUgKmluX3B0ciwgaW50ICp0aW1lX291dCwgaW50KiBuc2VjX291dCkKK0ZJTEVfVElNRV90b190aW1lX3RfbnNlYyhGSUxFVElNRSAqaW5fcHRyLCB0aW1lX3QgKnRpbWVfb3V0LCBpbnQqIG5zZWNfb3V0KQogewogICAgIC8qIFhYWCBlbmRpYW5uZXNzLiBTaG91bGRuJ3QgbWF0dGVyLCBhcyBhbGwgV2luZG93cyBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpdHRsZS1lbmRpYW4gKi8KICAgICAvKiBDYW5ub3Qgc2ltcGx5IGNhc3QgYW5kIGRlcmVmZXJlbmNlIGluX3B0ciwKQEAgLTgwMywxMiArODc5LDExIEBACiAgICAgX19pbnQ2NCBpbjsKICAgICBtZW1jcHkoJmluLCBpbl9wdHIsIHNpemVvZihpbikpOwogICAgICpuc2VjX291dCA9IChpbnQpKGluICUgMTAwMDAwMDApICogMTAwOyAvKiBGSUxFVElNRSBpcyBpbiB1bml0cyBvZiAxMDAgbnNlYy4gKi8KLSAgICAvKiBYWFggV2luMzIgc3VwcG9ydHMgdGltZSBzdGFtcHMgcGFzdCAyMDM4OyB3ZSBjdXJyZW50bHkgZG9uJ3QgKi8KLSAgICAqdGltZV9vdXQgPSBQeV9TQUZFX0RPV05DQVNUKChpbiAvIDEwMDAwMDAwKSAtIHNlY3NfYmV0d2Vlbl9lcG9jaHMsIF9faW50NjQsIGludCk7CisgICAgKnRpbWVfb3V0ID0gUHlfU0FGRV9ET1dOQ0FTVCgoaW4gLyAxMDAwMDAwMCkgLSBzZWNzX2JldHdlZW5fZXBvY2hzLCBfX2ludDY0LCB0aW1lX3QpOwogfQogCiBzdGF0aWMgdm9pZAotdGltZV90X3RvX0ZJTEVfVElNRShpbnQgdGltZV9pbiwgaW50IG5zZWNfaW4sIEZJTEVUSU1FICpvdXRfcHRyKQordGltZV90X3RvX0ZJTEVfVElNRSh0aW1lX3QgdGltZV9pbiwgaW50IG5zZWNfaW4sIEZJTEVUSU1FICpvdXRfcHRyKQogewogICAgIC8qIFhYWCBlbmRpYW5uZXNzICovCiAgICAgX19pbnQ2NCBvdXQ7CkBAIC04NDksMjIgKzkyNCw2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIEVtdWxhdGUgR2V0RmlsZUF0dHJpYnV0ZXNFeFtBV10gb24gV2luZG93cyA5NSAqLwotc3RhdGljIGludCBjaGVja2VkID0gMDsKLXN0YXRpYyBCT09MIChDQUxMQkFDSyAqZ2ZheGEpKExQQ1NUUiwgR0VUX0ZJTEVFWF9JTkZPX0xFVkVMUywgTFBWT0lEKTsKLXN0YXRpYyBCT09MIChDQUxMQkFDSyAqZ2ZheHcpKExQQ1dTVFIsIEdFVF9GSUxFRVhfSU5GT19MRVZFTFMsIExQVk9JRCk7Ci1zdGF0aWMgdm9pZAotY2hlY2tfZ2ZheCgpCi17Ci0gICAgSElOU1RBTkNFIGhLZXJuZWwzMjsKLSAgICBpZiAoY2hlY2tlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGNoZWNrZWQgPSAxOwotICAgIGhLZXJuZWwzMiA9IEdldE1vZHVsZUhhbmRsZSgiS0VSTkVMMzIiKTsKLSAgICAqKEZBUlBST0MqKSZnZmF4YSA9IEdldFByb2NBZGRyZXNzKGhLZXJuZWwzMiwgIkdldEZpbGVBdHRyaWJ1dGVzRXhBIik7Ci0gICAgKihGQVJQUk9DKikmZ2ZheHcgPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsICJHZXRGaWxlQXR0cmlidXRlc0V4VyIpOwotfQotCiBzdGF0aWMgQk9PTAogYXR0cmlidXRlc19mcm9tX2RpcihMUENTVFIgcHN6RmlsZSwgTFBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIHBmYWQpCiB7CkBAIC05MDEsNzQgKzk2MCwxMyBAQAogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgQk9PTCBXSU5BUEkKLVB5X0dldEZpbGVBdHRyaWJ1dGVzRXhBKExQQ1NUUiBwc3pGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICBHRVRfRklMRUVYX0lORk9fTEVWRUxTIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICBMUFZPSUQgcHYpCi17Ci0gICAgQk9PTCByZXN1bHQ7Ci0gICAgTFBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIHBmYWQgPSBwdjsKLSAgICAvKiBGaXJzdCB0cnkgdG8gdXNlIHRoZSBzeXN0ZW0ncyBpbXBsZW1lbnRhdGlvbiwgaWYgdGhhdCBpcwotICAgICAgIGF2YWlsYWJsZSBhbmQgZWl0aGVyIHN1Y2NlZWRzIHRvIGdpdmVzIGFuIGVycm9yIG90aGVyIHRoYW4KLSAgICAgICB0aGF0IGl0IGlzbid0IGltcGxlbWVudGVkLiAqLwotICAgIGNoZWNrX2dmYXgoKTsKLSAgICBpZiAoZ2ZheGEpIHsKLSAgICAgICAgcmVzdWx0ID0gZ2ZheGEocHN6RmlsZSwgbGV2ZWwsIHB2KTsKLSAgICAgICAgaWYgKHJlc3VsdCB8fCBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIC8qIEl0J3MgZWl0aGVyIG5vdCBwcmVzZW50LCBvciBub3QgaW1wbGVtZW50ZWQuCi0gICAgICAgRW11bGF0ZSB1c2luZyBGaW5kRmlyc3RGaWxlLiAqLwotICAgIGlmIChsZXZlbCAhPSBHZXRGaWxlRXhJbmZvU3RhbmRhcmQpIHsKLSAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICAvKiBVc2UgR2V0RmlsZUF0dHJpYnV0ZXMgdG8gdmFsaWRhdGUgdGhhdCB0aGUgZmlsZSBuYW1lCi0gICAgICAgZG9lcyBub3QgY29udGFpbiB3aWxkY2FyZHMgKHdoaWNoIEZpbmRGaXJzdEZpbGUgd291bGQKLSAgICAgICBhY2NlcHQpLiAqLwotICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0EocHN6RmlsZSkgPT0gMHhGRkZGRkZGRikKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHJldHVybiBhdHRyaWJ1dGVzX2Zyb21fZGlyKHBzekZpbGUsIHBmYWQpOwotfQotCi1zdGF0aWMgQk9PTCBXSU5BUEkKLVB5X0dldEZpbGVBdHRyaWJ1dGVzRXhXKExQQ1dTVFIgcHN6RmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgR0VUX0ZJTEVFWF9JTkZPX0xFVkVMUyBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgTFBWT0lEIHB2KQotewotICAgIEJPT0wgcmVzdWx0OwotICAgIExQV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBwZmFkID0gcHY7Ci0gICAgLyogRmlyc3QgdHJ5IHRvIHVzZSB0aGUgc3lzdGVtJ3MgaW1wbGVtZW50YXRpb24sIGlmIHRoYXQgaXMKLSAgICAgICBhdmFpbGFibGUgYW5kIGVpdGhlciBzdWNjZWVkcyB0byBnaXZlcyBhbiBlcnJvciBvdGhlciB0aGFuCi0gICAgICAgdGhhdCBpdCBpc24ndCBpbXBsZW1lbnRlZC4gKi8KLSAgICBjaGVja19nZmF4KCk7Ci0gICAgaWYgKGdmYXhhKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdmYXh3KHBzekZpbGUsIGxldmVsLCBwdik7Ci0gICAgICAgIGlmIChyZXN1bHQgfHwgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAvKiBJdCdzIGVpdGhlciBub3QgcHJlc2VudCwgb3Igbm90IGltcGxlbWVudGVkLgotICAgICAgIEVtdWxhdGUgdXNpbmcgRmluZEZpcnN0RmlsZS4gKi8KLSAgICBpZiAobGV2ZWwgIT0gR2V0RmlsZUV4SW5mb1N0YW5kYXJkKSB7Ci0gICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgLyogVXNlIEdldEZpbGVBdHRyaWJ1dGVzIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGZpbGUgbmFtZQotICAgICAgIGRvZXMgbm90IGNvbnRhaW4gd2lsZGNhcmRzICh3aGljaCBGaW5kRmlyc3RGaWxlIHdvdWxkCi0gICAgICAgYWNjZXB0KS4gKi8KLSAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNXKHBzekZpbGUpID09IDB4RkZGRkZGRkYpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICByZXR1cm4gYXR0cmlidXRlc19mcm9tX2Rpcl93KHBzekZpbGUsIHBmYWQpOwotfQotCiBzdGF0aWMgaW50CiB3aW4zMl9zdGF0KGNvbnN0IGNoYXIqIHBhdGgsIHN0cnVjdCB3aW4zMl9zdGF0ICpyZXN1bHQpCiB7CiAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBpbmZvOwogICAgIGludCBjb2RlOwogICAgIGNoYXIgKmRvdDsKLSAgICAvKiBYWFggbm90IHN1cHBvcnRlZCBvbiBXaW45NSBhbmQgTlQgMy54ICovCi0gICAgaWYgKCFQeV9HZXRGaWxlQXR0cmlidXRlc0V4QShwYXRoLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZpbmZvKSkgeworICAgIGlmICghR2V0RmlsZUF0dHJpYnV0ZXNFeEEocGF0aCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmaW5mbykpIHsKICAgICAgICAgaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OKSB7CiAgICAgICAgICAgICAvKiBQcm90b2NvbCB2aW9sYXRpb246IHdlIGV4cGxpY2l0bHkgY2xlYXIgZXJybm8sIGluc3RlYWQgb2YKICAgICAgICAgICAgICAgIHNldHRpbmcgaXQgdG8gYSBQT1NJWCBlcnJvci4gQ2FsbGVycyBzaG91bGQgdXNlIEdldExhc3RFcnJvci4gKi8KQEAgLTEwMDUsOCArMTAwMyw3IEBACiAgICAgaW50IGNvZGU7CiAgICAgY29uc3Qgd2NoYXJfdCAqZG90OwogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgaW5mbzsKLSAgICAvKiBYWFggbm90IHN1cHBvcnRlZCBvbiBXaW45NSBhbmQgTlQgMy54ICovCi0gICAgaWYgKCFQeV9HZXRGaWxlQXR0cmlidXRlc0V4VyhwYXRoLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZpbmZvKSkgeworICAgIGlmICghR2V0RmlsZUF0dHJpYnV0ZXNFeFcocGF0aCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmaW5mbykpIHsKICAgICAgICAgaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OKSB7CiAgICAgICAgICAgICAvKiBQcm90b2NvbCB2aW9sYXRpb246IHdlIGV4cGxpY2l0bHkgY2xlYXIgZXJybm8sIGluc3RlYWQgb2YKICAgICAgICAgICAgICAgIHNldHRpbmcgaXQgdG8gYSBQT1NJWCBlcnJvci4gQ2FsbGVycyBzaG91bGQgdXNlIEdldExhc3RFcnJvci4gKi8KQEAgLTE0MjIsNyArMTQxOSw2IEBACiAgICAgI3VuZGVmIElTU0xBU0gKIH0KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwogc3RhdGljIEJPT0wKIElzVU5DUm9vdFcoUHlfVU5JQ09ERSAqcGF0aCwgaW50IHBhdGhsZW4pCiB7CkBAIC0xNDQ1LDcgKzE0NDEsNiBAQAogCiAgICAgI3VuZGVmIElTU0xBU0gKIH0KLSNlbmRpZiAvKiBQeV9XSU5fV0lERV9GSUxFTkFNRVMgKi8KICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xNDY1LDI4ICsxNDYwLDI0IEBACiAgICAgaW50IHJlczsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogCi0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCi0gICAgLyogSWYgb24gd2lkZS1jaGFyYWN0ZXItY2FwYWJsZSBPUyBzZWUgaWYgYXJndW1lbnQKLSAgICAgICBpcyBVbmljb2RlIGFuZCBpZiBzbyB1c2Ugd2lkZSBBUEkuICAqLwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnBvOwotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCB3Zm9ybWF0LCAmcG8pKSB7Ci0gICAgICAgICAgICBQeV9VTklDT0RFICp3cGF0aCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHBvKTsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCB3Zm9ybWF0LCAmcG8pKSB7CisgICAgICAgIFB5X1VOSUNPREUgKndwYXRoID0gUHlVbmljb2RlX0FTX1VOSUNPREUocG8pOwogCi0gICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgICAgICAgICAgLyogUHlVbmljb2RlX0FTX1VOSUNPREUgcmVzdWx0IE9LIHdpdGhvdXQKLSAgICAgICAgICAgICAgICAgICB0aHJlYWQgbG9jayBhcyBpdCBpcyBhIHNpbXBsZSBkZXJlZmVyZW5jZS4gKi8KLSAgICAgICAgICAgIHJlcyA9IHdzdGF0ZnVuYyh3cGF0aCwgJnN0KTsKLSAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIC8qIFB5VW5pY29kZV9BU19VTklDT0RFIHJlc3VsdCBPSyB3aXRob3V0CisgICAgICAgICAgICAgICB0aHJlYWQgbG9jayBhcyBpdCBpcyBhIHNpbXBsZSBkZXJlZmVyZW5jZS4gKi8KKyAgICAgICAgcmVzID0gd3N0YXRmdW5jKHdwYXRoLCAmc3QpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCi0gICAgICAgICAgICBpZiAocmVzICE9IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoInN0YXQiLCB3cGF0aCk7Ci0gICAgICAgICAgICByZXR1cm4gX3B5c3RhdF9mcm9tc3RydWN0c3RhdCgmc3QpOwotICAgICAgICB9Ci0gICAgICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKLSAgICAgICAgICAgYXJlIGFsc28gdmFsaWQuICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGlmIChyZXMgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJzdGF0Iiwgd3BhdGgpOworICAgICAgICByZXR1cm4gX3B5c3RhdF9mcm9tc3RydWN0c3RhdCgmc3QpOwogICAgIH0KKyAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCisgICAgICAgYXJlIGFsc28gdmFsaWQuICovCisgICAgUHlFcnJfQ2xlYXIoKTsKICNlbmRpZgogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGZvcm1hdCwKQEAgLTE1MjgsMjUgKzE1MTksMjMgQEAKICAgICBjaGFyICpwYXRoOwogICAgIGludCBtb2RlOwogCi0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCisjaWZkZWYgTVNfV0lORE9XUwogICAgIERXT1JEIGF0dHI7Ci0gICAgaWYgKHVuaWNvZGVfZmlsZV9uYW1lcygpKSB7Ci0gICAgICAgIFB5VW5pY29kZU9iamVjdCAqcG87Ci0gICAgICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVaTphY2Nlc3MiLCAmcG8sICZtb2RlKSkgewotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgLyogUHlVbmljb2RlX0FTX1VOSUNPREUgT0sgd2l0aG91dCB0aHJlYWQgbG9jayBhcwotICAgICAgICAgICAgICAgaXQgaXMgYSBzaW1wbGUgZGVyZWZlcmVuY2UuICovCi0gICAgICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7Ci0gICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgZ290byBmaW5pc2g7Ci0gICAgICAgIH0KLSAgICAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncwotICAgICAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBQeVVuaWNvZGVPYmplY3QgKnBvOworICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVaTphY2Nlc3MiLCAmcG8sICZtb2RlKSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIC8qIFB5VW5pY29kZV9BU19VTklDT0RFIE9LIHdpdGhvdXQgdGhyZWFkIGxvY2sgYXMKKyAgICAgICAgICAgaXQgaXMgYSBzaW1wbGUgZGVyZWZlcmVuY2UuICovCisgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1coUHlVbmljb2RlX0FTX1VOSUNPREUocG8pKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZ290byBmaW5pc2g7CiAgICAgfQorICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKKyAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KKyAgICBQeUVycl9DbGVhcigpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXRpOmFjY2VzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICZwYXRoLCAmbW9kZSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwpAQCAtMTU2MSw3ICsxNTUwLDcgQEAKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKCEobW9kZSAmIDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChhdHRyICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSk7Ci0jZWxzZQorI2Vsc2UgLyogTVNfV0lORE9XUyAqLwogICAgIGludCByZXM7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldGk6YWNjZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywgJnBhdGgsICZtb2RlKSkKQEAgLTE1NzEsNyArMTU2MCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBQeU1lbV9GcmVlKHBhdGgpOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzID09IDApOwotI2VuZGlmCisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogfQogCiAjaWZuZGVmIEZfT0sKQEAgLTE2ODIsMzMgKzE2NzEsMzIgQEAKICAgICBjaGFyICpwYXRoID0gTlVMTDsKICAgICBpbnQgaTsKICAgICBpbnQgcmVzOwotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUworI2lmZGVmIE1TX1dJTkRPV1MKICAgICBEV09SRCBhdHRyOwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnBvOwotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVWl8OmNobW9kIiwgJnBvLCAmaSkpIHsKLSAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1coUHlVbmljb2RlX0FTX1VOSUNPREUocG8pKTsKLSAgICAgICAgICAgIGlmIChhdHRyICE9IDB4RkZGRkZGRkYpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSAmIF9TX0lXUklURSkKLSAgICAgICAgICAgICAgICAgICAgYXR0ciAmPSB+RklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhdHRyIHw9IEZJTEVfQVRUUklCVVRFX1JFQURPTkxZOwotICAgICAgICAgICAgICAgIHJlcyA9IFNldEZpbGVBdHRyaWJ1dGVzVyhQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyksIGF0dHIpOwotICAgICAgICAgICAgfQorICAgIFB5VW5pY29kZU9iamVjdCAqcG87CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVpfDpjaG1vZCIsICZwbywgJmkpKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhQeVVuaWNvZGVfQVNfVU5JQ09ERShwbykpOworICAgICAgICBpZiAoYXR0ciAhPSAweEZGRkZGRkZGKSB7CisgICAgICAgICAgICBpZiAoaSAmIF9TX0lXUklURSkKKyAgICAgICAgICAgICAgICBhdHRyICY9IH5GSUxFX0FUVFJJQlVURV9SRUFET05MWTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXMgPSAwOwotICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJjaG1vZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUocG8pKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICAgICAgICAgIGF0dHIgfD0gRklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7CisgICAgICAgICAgICByZXMgPSBTZXRGaWxlQXR0cmlidXRlc1coUHlVbmljb2RlX0FTX1VOSUNPREUocG8pLCBhdHRyKTsKICAgICAgICAgfQotICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXMgPSAwOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoIXJlcykKKyAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJjaG1vZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERShwbykpOworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KKyAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCisgICAgICAgYXJlIGFsc28gdmFsaWQuICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXRpOmNobW9kIiwgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhdGgsICZpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzMyLDcgKzE3MjAsNyBAQAogICAgIFB5TWVtX0ZyZWUocGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwotI2Vsc2UgLyogUHlfV0lOX1dJREVfRklMRU5BTUVTICovCisjZWxzZSAvKiBNU19XSU5ET1dTICovCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldGk6Y2htb2QiLCBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmcGF0aCwgJmkpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE4NjUsNyArMTg1Myw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfZnN5bmMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmZG9iaikKIHsKLSAgICAgICByZXR1cm4gcG9zaXhfZmlsZGVzKGZkb2JqLCBmc3luYyk7CisgICAgcmV0dXJuIHBvc2l4X2ZpbGRlcyhmZG9iaiwgZnN5bmMpOwogfQogI2VuZGlmIC8qIEhBVkVfRlNZTkMgKi8KIApAQCAtMTg4Myw3ICsxODcxLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9mZGF0YXN5bmMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmZG9iaikKIHsKLSAgICAgICByZXR1cm4gcG9zaXhfZmlsZGVzKGZkb2JqLCBmZGF0YXN5bmMpOworICAgIHJldHVybiBwb3NpeF9maWxkZXMoZmRvYmosIGZkYXRhc3luYyk7CiB9CiAjZW5kaWYgLyogSEFWRV9GREFUQVNZTkMgKi8KIApAQCAtMjAzNywzNiArMjAyNSwzNCBAQAogICAgIGNoYXIgYnVmWzEwMjZdOwogICAgIGNoYXIgKnJlczsKIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUworI2lmZGVmIE1TX1dJTkRPV1MKICAgICBEV09SRCBsZW47Ci0gICAgaWYgKHVuaWNvZGVfZmlsZV9uYW1lcygpKSB7Ci0gICAgICAgIHdjaGFyX3Qgd2J1ZlsxMDI2XTsKLSAgICAgICAgd2NoYXJfdCAqd2J1ZjIgPSB3YnVmOwotICAgICAgICBQeU9iamVjdCAqcmVzb2JqOwotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGxlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKHNpemVvZiB3YnVmLyBzaXplb2Ygd2J1ZlswXSwgd2J1Zik7Ci0gICAgICAgIC8qIElmIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLCBsZW4gZG9lcyBub3QgaW5jbHVkZSB0aGUKLSAgICAgICAgICAgdGVybWluYXRpbmcgXDAuIElmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsLCBsZW4gaW5jbHVkZXMKLSAgICAgICAgICAgdGhlIHNwYWNlIG5lZWRlZCBmb3IgdGhlIHRlcm1pbmF0b3IuICovCi0gICAgICAgIGlmIChsZW4gPj0gc2l6ZW9mIHdidWYvIHNpemVvZiB3YnVmWzBdKSB7Ci0gICAgICAgICAgICB3YnVmMiA9IG1hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOwotICAgICAgICAgICAgaWYgKHdidWYyKQotICAgICAgICAgICAgICAgIGxlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKGxlbiwgd2J1ZjIpOwotICAgICAgICB9Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmICghd2J1ZjIpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWxlbikgewotICAgICAgICAgICAgaWYgKHdidWYyICE9IHdidWYpIGZyZWUod2J1ZjIpOwotICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJnZXRjd2R1IiwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzb2JqID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3YnVmMiwgbGVuKTsKLSAgICAgICAgaWYgKHdidWYyICE9IHdidWYpIGZyZWUod2J1ZjIpOwotICAgICAgICByZXR1cm4gcmVzb2JqOworICAgIHdjaGFyX3Qgd2J1ZlsxMDI2XTsKKyAgICB3Y2hhcl90ICp3YnVmMiA9IHdidWY7CisgICAgUHlPYmplY3QgKnJlc29iajsKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcoc2l6ZW9mIHdidWYvIHNpemVvZiB3YnVmWzBdLCB3YnVmKTsKKyAgICAvKiBJZiB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCwgbGVuIGRvZXMgbm90IGluY2x1ZGUgdGhlCisgICAgICAgdGVybWluYXRpbmcgXDAuIElmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsLCBsZW4gaW5jbHVkZXMKKyAgICAgICB0aGUgc3BhY2UgbmVlZGVkIGZvciB0aGUgdGVybWluYXRvci4gKi8KKyAgICBpZiAobGVuID49IHNpemVvZiB3YnVmLyBzaXplb2Ygd2J1ZlswXSkgeworICAgICAgICB3YnVmMiA9IG1hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBpZiAod2J1ZjIpCisgICAgICAgICAgICBsZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhsZW4sIHdidWYyKTsKICAgICB9Ci0jZW5kaWYKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmICghd2J1ZjIpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICghbGVuKSB7CisgICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKSBmcmVlKHdidWYyKTsKKyAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJnZXRjd2R1IiwgTlVMTCk7CisgICAgfQorICAgIHJlc29iaiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod2J1ZjIsIGxlbik7CisgICAgaWYgKHdidWYyICE9IHdidWYpIGZyZWUod2J1ZjIpOworICAgIHJldHVybiByZXNvYmo7CisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCkBAIC0yMDc5LDggKzIwNjUsOCBAQAogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZShidWYsIHN0cmxlbihidWYpLCBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCJzdHJpY3QiKTsKIH0KLSNlbmRpZgotI2VuZGlmCisjZW5kaWYgLyogUHlfVVNJTkdfVU5JQ09ERSAqLworI2VuZGlmIC8qIEhBVkVfR0VUQ1dEICovCiAKIAogI2lmZGVmIEhBVkVfTElOSwpAQCAtMjEyMCw4OSArMjEwNiw4NiBAQAogICAgIGNoYXIgKmJ1ZnB0ciA9IG5hbWVidWY7CiAgICAgUHlfc3NpemVfdCBsZW4gPSBzaXplb2YobmFtZWJ1ZiktNTsgLyogb25seSBjbGFpbSB0byBoYXZlIHNwYWNlIGZvciBNQVhfUEFUSCAqLwogCi0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCi0gICAgLyogSWYgb24gd2lkZS1jaGFyYWN0ZXItY2FwYWJsZSBPUyBzZWUgaWYgYXJndW1lbnQKLSAgICAgICBpcyBVbmljb2RlIGFuZCBpZiBzbyB1c2Ugd2lkZSBBUEkuICAqLwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBQeU9iamVjdCAqcG87Ci0gICAgICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOmxpc3RkaXIiLCAmcG8pKSB7Ci0gICAgICAgICAgICBXSU4zMl9GSU5EX0RBVEFXIHdGaWxlRGF0YTsKLSAgICAgICAgICAgIFB5X1VOSUNPREUgKnduYW1lYnVmOwotICAgICAgICAgICAgUHlfVU5JQ09ERSB3Y2g7Ci0gICAgICAgICAgICAvKiBPdmVyYWxsb2NhdGUgZm9yIFxcKi4qXDAgKi8KLSAgICAgICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfU0laRShwbyk7Ci0gICAgICAgICAgICB3bmFtZWJ1ZiA9IG1hbGxvYygobGVuICsgNSkgKiBzaXplb2Yod2NoYXJfdCkpOwotICAgICAgICAgICAgaWYgKCF3bmFtZWJ1ZikgewotICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3Y3NjcHkod25hbWVidWYsIFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7Ci0gICAgICAgICAgICB3Y2ggPSBsZW4gPiAwID8gd25hbWVidWZbbGVuLTFdIDogJ1wwJzsKKyAgICBQeU9iamVjdCAqcG87CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6bGlzdGRpciIsICZwbykpIHsKKyAgICAgICAgV0lOMzJfRklORF9EQVRBVyB3RmlsZURhdGE7CisgICAgICAgIFB5X1VOSUNPREUgKnduYW1lYnVmOworICAgICAgICAvKiBPdmVyYWxsb2NhdGUgZm9yIFxcKi4qXDAgKi8KKyAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHBvKTsKKyAgICAgICAgd25hbWVidWYgPSBtYWxsb2MoKGxlbiArIDUpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgaWYgKCF3bmFtZWJ1ZikgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHdjc2NweSh3bmFtZWJ1ZiwgUHlVbmljb2RlX0FTX1VOSUNPREUocG8pKTsKKyAgICAgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgICAgIFB5X1VOSUNPREUgd2NoID0gd25hbWVidWZbbGVuLTFdOwogICAgICAgICAgICAgaWYgKHdjaCAhPSBMJy8nICYmIHdjaCAhPSBMJ1xcJyAmJiB3Y2ggIT0gTCc6JykKICAgICAgICAgICAgICAgICB3bmFtZWJ1ZltsZW4rK10gPSBMJ1xcJzsKICAgICAgICAgICAgIHdjc2NweSh3bmFtZWJ1ZiArIGxlbiwgTCIqLioiKTsKLSAgICAgICAgICAgIGlmICgoZCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcmVlKHduYW1lYnVmKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGhGaW5kRmlsZSA9IEZpbmRGaXJzdEZpbGVXKHduYW1lYnVmLCAmd0ZpbGVEYXRhKTsKLSAgICAgICAgICAgIGlmIChoRmluZEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgICAgICAgICBpbnQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZSh3bmFtZWJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7Ci0gICAgICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZEZpcnN0RmlsZVciLCB3bmFtZWJ1Zik7Ci0gICAgICAgICAgICAgICAgZnJlZSh3bmFtZWJ1Zik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIC4gYW5kIC4uICovCi0gICAgICAgICAgICAgICAgaWYgKHdjc2NtcCh3RmlsZURhdGEuY0ZpbGVOYW1lLCBMIi4iKSAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAgIHdjc2NtcCh3RmlsZURhdGEuY0ZpbGVOYW1lLCBMIi4uIikgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKHdGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbih3RmlsZURhdGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoZCwgdikgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBGaW5kTmV4dEZpbGVXKGhGaW5kRmlsZSwgJndGaWxlRGF0YSk7Ci0gICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgICAgICAvKiBGaW5kTmV4dEZpbGUgc2V0cyBlcnJvciB0byBFUlJPUl9OT19NT1JFX0ZJTEVTIGlmCi0gICAgICAgICAgICAgICAgICAgaXQgZ290IHRvIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeS4gKi8KLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9OT19NT1JFX0ZJTEVTKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKLSAgICAgICAgICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZE5leHRGaWxlVyIsIHduYW1lYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgRmluZENsb3NlKGhGaW5kRmlsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUod25hbWVidWYpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gVFJVRSk7Ci0KLSAgICAgICAgICAgIGlmIChGaW5kQ2xvc2UoaEZpbmRGaWxlKSA9PSBGQUxTRSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKLSAgICAgICAgICAgICAgICB3aW4zMl9lcnJvcl91bmljb2RlKCJGaW5kQ2xvc2UiLCB3bmFtZWJ1Zik7Ci0gICAgICAgICAgICAgICAgZnJlZSh3bmFtZWJ1Zik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcmVlKHduYW1lYnVmKTsKLSAgICAgICAgICAgIHJldHVybiBkOwogICAgICAgICB9Ci0gICAgICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKLSAgICAgICAgICAgYXJlIGFsc28gdmFsaWQuICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGlmICgoZCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUod25hbWVidWYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBoRmluZEZpbGUgPSBGaW5kRmlyc3RGaWxlVyh3bmFtZWJ1ZiwgJndGaWxlRGF0YSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmIChoRmluZEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgICAgIGludCBlcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICAgICAgZnJlZSh3bmFtZWJ1Zik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CisgICAgICAgICAgICB3aW4zMl9lcnJvcl91bmljb2RlKCJGaW5kRmlyc3RGaWxlVyIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgIGZyZWUod25hbWVidWYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZG8geworICAgICAgICAgICAgLyogU2tpcCBvdmVyIC4gYW5kIC4uICovCisgICAgICAgICAgICBpZiAod2NzY21wKHdGaWxlRGF0YS5jRmlsZU5hbWUsIEwiLiIpICE9IDAgJiYKKyAgICAgICAgICAgICAgICB3Y3NjbXAod0ZpbGVEYXRhLmNGaWxlTmFtZSwgTCIuLiIpICE9IDApIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKHdGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbih3RmlsZURhdGEuY0ZpbGVOYW1lKSk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CisgICAgICAgICAgICAgICAgICAgIGQgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoZCwgdikgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKKyAgICAgICAgICAgICAgICAgICAgZCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICByZXN1bHQgPSBGaW5kTmV4dEZpbGVXKGhGaW5kRmlsZSwgJndGaWxlRGF0YSk7CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgLyogRmluZE5leHRGaWxlIHNldHMgZXJyb3IgdG8gRVJST1JfTk9fTU9SRV9GSUxFUyBpZgorICAgICAgICAgICAgICAgaXQgZ290IHRvIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeS4gKi8KKyAgICAgICAgICAgIGlmICghcmVzdWx0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CisgICAgICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZE5leHRGaWxlVyIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgICAgICBGaW5kQ2xvc2UoaEZpbmRGaWxlKTsKKyAgICAgICAgICAgICAgICBmcmVlKHduYW1lYnVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAocmVzdWx0ID09IFRSVUUpOworCisgICAgICAgIGlmIChGaW5kQ2xvc2UoaEZpbmRGaWxlKSA9PSBGQUxTRSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGQpOworICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZENsb3NlIiwgd25hbWVidWYpOworICAgICAgICAgICAgZnJlZSh3bmFtZWJ1Zik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHduYW1lYnVmKTsKKyAgICAgICAgcmV0dXJuIGQ7CiAgICAgfQotI2VuZGlmCisgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncworICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImV0IzpsaXN0ZGlyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywgJmJ1ZnB0ciwgJmxlbikpCkBAIC0yMjExLDEzICsyMTk0LDE1IEBACiAgICAgICAgIGNoYXIgY2ggPSBuYW1lYnVmW2xlbi0xXTsKICAgICAgICAgaWYgKGNoICE9IFNFUCAmJiBjaCAhPSBBTFRTRVAgJiYgY2ggIT0gJzonKQogICAgICAgICAgICAgbmFtZWJ1ZltsZW4rK10gPSAnLyc7CisgICAgICAgIHN0cmNweShuYW1lYnVmICsgbGVuLCAiKi4qIik7CiAgICAgfQotICAgIHN0cmNweShuYW1lYnVmICsgbGVuLCAiKi4qIik7CiAKICAgICBpZiAoKGQgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBoRmluZEZpbGUgPSBGaW5kRmlyc3RGaWxlKG5hbWVidWYsICZGaWxlRGF0YSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAoaEZpbmRGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CiAgICAgICAgIGludCBlcnJvciA9IEdldExhc3RFcnJvcigpOwogICAgICAgICBpZiAoZXJyb3IgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpCkBAIC0yMzQ5LDExICsyMzM0LDE2IEBACiAgICAgfQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXQ6bGlzdGRpciIsIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICZuYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKChkaXJwID0gb3BlbmRpcihuYW1lKSkgPT0gTlVMTCkgeworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBkaXJwID0gb3BlbmRpcihuYW1lKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChkaXJwID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG5hbWUpOwogICAgIH0KICAgICBpZiAoKGQgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgY2xvc2VkaXIoZGlycCk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIFB5TWVtX0ZyZWUobmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTIzNjYsNyArMjM1Niw5IEBACiAgICAgICAgICAgICBpZiAoZXJybm8gPT0gMCkgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgICAgICAgICAgY2xvc2VkaXIoZGlycCk7CisgICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG5hbWUpOwogICAgICAgICAgICAgfQpAQCAtMjQwNyw3ICsyMzk5LDkgQEAKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgfQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBjbG9zZWRpcihkaXJwKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIFB5TWVtX0ZyZWUobmFtZSk7CiAKICAgICByZXR1cm4gZDsKQEAgLTI0MjYsMzcgKzI0MjAsMzUgQEAKICAgICBQeV9zc2l6ZV90IGluc2l6ZSA9IHNpemVvZihpbmJ1Zik7CiAgICAgY2hhciBvdXRidWZbTUFYX1BBVEgqMl07CiAgICAgY2hhciAqdGVtcDsKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKLSAgICAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8Ol9nZXRmdWxscGF0aG5hbWUiLCAmcG8pKSB7Ci0gICAgICAgICAgICBQeV9VTklDT0RFICp3cGF0aCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHBvKTsKLSAgICAgICAgICAgIFB5X1VOSUNPREUgd291dGJ1ZltNQVhfUEFUSCoyXSwgKndvdXRidWZwID0gd291dGJ1ZjsKLSAgICAgICAgICAgIFB5X1VOSUNPREUgKnd0ZW1wOwotICAgICAgICAgICAgRFdPUkQgcmVzdWx0OwotICAgICAgICAgICAgUHlPYmplY3QgKnY7Ci0gICAgICAgICAgICByZXN1bHQgPSBHZXRGdWxsUGF0aE5hbWVXKHdwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yod291dGJ1Zikvc2l6ZW9mKHdvdXRidWZbMF0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3V0YnVmLCAmd3RlbXApOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA+IHNpemVvZih3b3V0YnVmKS9zaXplb2Yod291dGJ1ZlswXSkpIHsKLSAgICAgICAgICAgICAgICB3b3V0YnVmcCA9IG1hbGxvYyhyZXN1bHQgKiBzaXplb2YoUHlfVU5JQ09ERSkpOwotICAgICAgICAgICAgICAgIGlmICghd291dGJ1ZnApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdldEZ1bGxQYXRoTmFtZVcod3BhdGgsIHJlc3VsdCwgd291dGJ1ZnAsICZ3dGVtcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUod291dGJ1ZnAsIHdjc2xlbih3b3V0YnVmcCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHYgPSB3aW4zMl9lcnJvcl91bmljb2RlKCJHZXRGdWxsUGF0aE5hbWVXIiwgd3BhdGgpOwotICAgICAgICAgICAgaWYgKHdvdXRidWZwICE9IHdvdXRidWYpCi0gICAgICAgICAgICAgICAgZnJlZSh3b3V0YnVmcCk7Ci0gICAgICAgICAgICByZXR1cm4gdjsKKworICAgIFB5VW5pY29kZU9iamVjdCAqcG87CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8Ol9nZXRmdWxscGF0aG5hbWUiLCAmcG8pKSB7CisgICAgICAgIFB5X1VOSUNPREUgKndwYXRoID0gUHlVbmljb2RlX0FTX1VOSUNPREUocG8pOworICAgICAgICBQeV9VTklDT0RFIHdvdXRidWZbTUFYX1BBVEgqMl0sICp3b3V0YnVmcCA9IHdvdXRidWY7CisgICAgICAgIFB5X1VOSUNPREUgKnd0ZW1wOworICAgICAgICBEV09SRCByZXN1bHQ7CisgICAgICAgIFB5T2JqZWN0ICp2OworICAgICAgICByZXN1bHQgPSBHZXRGdWxsUGF0aE5hbWVXKHdwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih3b3V0YnVmKS9zaXplb2Yod291dGJ1ZlswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd291dGJ1ZiwgJnd0ZW1wKTsKKyAgICAgICAgaWYgKHJlc3VsdCA+IHNpemVvZih3b3V0YnVmKS9zaXplb2Yod291dGJ1ZlswXSkpIHsKKyAgICAgICAgICAgIHdvdXRidWZwID0gbWFsbG9jKHJlc3VsdCAqIHNpemVvZihQeV9VTklDT0RFKSk7CisgICAgICAgICAgICBpZiAoIXdvdXRidWZwKQorICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmVzdWx0ID0gR2V0RnVsbFBhdGhOYW1lVyh3cGF0aCwgcmVzdWx0LCB3b3V0YnVmcCwgJnd0ZW1wKTsKICAgICAgICAgfQotICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSh3b3V0YnVmcCwgd2NzbGVuKHdvdXRidWZwKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHYgPSB3aW4zMl9lcnJvcl91bmljb2RlKCJHZXRGdWxsUGF0aE5hbWVXIiwgd3BhdGgpOworICAgICAgICBpZiAod291dGJ1ZnAgIT0gd291dGJ1ZikKKyAgICAgICAgICAgIGZyZWUod291dGJ1ZnApOworICAgICAgICByZXR1cm4gdjsKICAgICB9Ci0jZW5kaWYKKyAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCisgICAgICAgYXJlIGFsc28gdmFsaWQuICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZSAoYXJncywgImV0IzpfZ2V0ZnVsbHBhdGhuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICZpbmJ1ZnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5zaXplKSkKQEAgLTI0ODMsMjQgKzI0NzUsMjIgQEAKICAgICBjaGFyICpwYXRoID0gTlVMTDsKICAgICBpbnQgbW9kZSA9IDA3Nzc7CiAKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKLSAgICAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8aTpta2RpciIsICZwbywgJm1vZGUpKSB7Ci0gICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgICAgICAvKiBQeVVuaWNvZGVfQVNfVU5JQ09ERSBPSyB3aXRob3V0IHRocmVhZCBsb2NrIGFzCi0gICAgICAgICAgICAgICBpdCBpcyBhIHNpbXBsZSBkZXJlZmVyZW5jZS4gKi8KLSAgICAgICAgICAgIHJlcyA9IENyZWF0ZURpcmVjdG9yeVcoUHlVbmljb2RlX0FTX1VOSUNPREUocG8pLCBOVUxMKTsKLSAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgICAgICBpZiAoIXJlcykKLSAgICAgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZSgibWtkaXIiLCBQeVVuaWNvZGVfQVNfVU5JQ09ERShwbykpOwotICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgIH0KLSAgICAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncwotICAgICAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXxpOm1rZGlyIiwgJnBvLCAmbW9kZSkpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAvKiBQeVVuaWNvZGVfQVNfVU5JQ09ERSBPSyB3aXRob3V0IHRocmVhZCBsb2NrIGFzCisgICAgICAgICAgIGl0IGlzIGEgc2ltcGxlIGRlcmVmZXJlbmNlLiAqLworICAgICAgICByZXMgPSBDcmVhdGVEaXJlY3RvcnlXKFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSwgTlVMTCk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmICghcmVzKQorICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoIm1rZGlyIiwgUHlVbmljb2RlX0FTX1VOSUNPREUocG8pKTsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICB9CisgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncworICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldHxpOm1rZGlyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywgJnBhdGgsICZtb2RlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNTE3LDcgKzI1MDcsNyBAQAogICAgIFB5TWVtX0ZyZWUocGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwotI2Vsc2UKKyNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXR8aTpta2RpciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICZwYXRoLCAmbW9kZSkpCkBAIC0yNTM0LDcgKzI1MjQsNyBAQAogICAgIFB5TWVtX0ZyZWUocGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwotI2VuZGlmCisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogfQogCiAKQEAgLTI1OTEsMjggKzI1ODEsMjYgQEAKICAgICBQeU9iamVjdCAqbzEsICpvMjsKICAgICBjaGFyICpwMSwgKnAyOwogICAgIEJPT0wgcmVzdWx0OwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POnJlbmFtZSIsICZvMSwgJm8yKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POnJlbmFtZSIsICZvMSwgJm8yKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKCFjb252ZXJ0X3RvX3VuaWNvZGUoJm8xKSkKKyAgICBpZiAoIWNvbnZlcnRfdG9fdW5pY29kZSgmbzEpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBpZiAoIWNvbnZlcnRfdG9fdW5pY29kZSgmbzIpKSB7CisgICAgaWYgKCFjb252ZXJ0X3RvX3VuaWNvZGUoJm8yKSkgewogICAgICAgICBQeV9ERUNSRUYobzEpOwogICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcmVzdWx0ID0gTW92ZUZpbGVXKFB5VW5pY29kZV9Bc1VuaWNvZGUobzEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FzVW5pY29kZShvMikpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBQeV9ERUNSRUYobzEpOwotICAgICAgICBQeV9ERUNSRUYobzIpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigicmVuYW1lIiwgTlVMTCk7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci1lcnJvcjoKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9CisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJlc3VsdCA9IE1vdmVGaWxlVyhQeVVuaWNvZGVfQXNVbmljb2RlKG8xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FzVW5pY29kZShvMikpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgUHlfREVDUkVGKG8xKTsKKyAgICBQeV9ERUNSRUYobzIpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoInJlbmFtZSIsIE5VTEwpOworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK2Vycm9yOgorICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzczpyZW5hbWUiLCAmcDEsICZwMikpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTI3NDAsMTUgKzI3MjgsMTkgQEAKICNlbmRpZiAvKiBIQVZFX1VOQU1FICovCiAKIHN0YXRpYyBpbnQKLWV4dHJhY3RfdGltZShQeU9iamVjdCAqdCwgbG9uZyogc2VjLCBsb25nKiB1c2VjKQorZXh0cmFjdF90aW1lKFB5T2JqZWN0ICp0LCB0aW1lX3QqIHNlYywgbG9uZyogdXNlYykKIHsKLSAgICBsb25nIGludHZhbDsKKyAgICB0aW1lX3QgaW50dmFsOwogICAgIGlmIChQeUZsb2F0X0NoZWNrKHQpKSB7CiAgICAgICAgIGRvdWJsZSB0dmFsID0gUHlGbG9hdF9Bc0RvdWJsZSh0KTsKLSAgICAgICAgUHlPYmplY3QgKmludG9iaiA9IFB5X1RZUEUodCktPnRwX2FzX251bWJlci0+bmJfaW50KHQpOworICAgICAgICBQeU9iamVjdCAqaW50b2JqID0gUHlOdW1iZXJfTG9uZyh0KTsKICAgICAgICAgaWYgKCFpbnRvYmopCiAgICAgICAgICAgICByZXR1cm4gLTE7CisjaWYgU0laRU9GX1RJTUVfVCA+IFNJWkVPRl9MT05HCisgICAgICAgIGludHZhbCA9IFB5SW50X0FzVW5zaWduZWRMb25nTG9uZ01hc2soaW50b2JqKTsKKyNlbHNlCiAgICAgICAgIGludHZhbCA9IFB5SW50X0FzTG9uZyhpbnRvYmopOworI2VuZGlmCiAgICAgICAgIFB5X0RFQ1JFRihpbnRvYmopOwogICAgICAgICBpZiAoaW50dmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC0yNzYwLDcgKzI3NTIsMTEgQEAKICAgICAgICAgICAgICp1c2VjID0gMDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorI2lmIFNJWkVPRl9USU1FX1QgPiBTSVpFT0ZfTE9ORworICAgIGludHZhbCA9IFB5SW50X0FzVW5zaWduZWRMb25nTG9uZ01hc2sodCk7CisjZWxzZQogICAgIGludHZhbCA9IFB5SW50X0FzTG9uZyh0KTsKKyNlbmRpZgogICAgIGlmIChpbnR2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgICpzZWMgPSBpbnR2YWw7CkBAIC0yNzc3LDMxICsyNzczLDMxIEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfdXRpbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUworI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeU9iamVjdCAqYXJnOwogICAgIFB5VW5pY29kZU9iamVjdCAqb2J3cGF0aDsKICAgICB3Y2hhcl90ICp3cGF0aCA9IE5VTEw7CiAgICAgY2hhciAqYXBhdGggPSBOVUxMOwogICAgIEhBTkRMRSBoRmlsZTsKLSAgICBsb25nIGF0aW1lc2VjLCBtdGltZXNlYywgYXVzZWMsIG11c2VjOworICAgIHRpbWVfdCBhdGltZXNlYywgbXRpbWVzZWM7CisgICAgbG9uZyBhdXNlYywgbXVzZWM7CiAgICAgRklMRVRJTUUgYXRpbWUsIG10aW1lOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKHVuaWNvZGVfZmlsZV9uYW1lcygpKSB7Ci0gICAgICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVT3w6dXRpbWUiLCAmb2J3cGF0aCwgJmFyZykpIHsKLSAgICAgICAgICAgIHdwYXRoID0gUHlVbmljb2RlX0FTX1VOSUNPREUob2J3cGF0aCk7Ci0gICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgICAgICBoRmlsZSA9IENyZWF0ZUZpbGVXKHdwYXRoLCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE9QRU5fRVhJU1RJTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxMKTsKLSAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgICAgICBpZiAoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoInV0aW1lIiwgd3BhdGgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKLSAgICAgICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICB9CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVPfDp1dGltZSIsICZvYndwYXRoLCAmYXJnKSkgeworICAgICAgICB3cGF0aCA9IFB5VW5pY29kZV9BU19VTklDT0RFKG9id3BhdGgpOworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGhGaWxlID0gQ3JlYXRlRmlsZVcod3BhdGgsIEZJTEVfV1JJVEVfQVRUUklCVVRFUywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBPUEVOX0VYSVNUSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxMKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoInV0aW1lIiwgd3BhdGgpOworICAgIH0gZWxzZQorICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCisgICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLworICAgICAgICBQeUVycl9DbGVhcigpOworCiAgICAgaWYgKCF3cGF0aCkgewogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImV0Tzp1dGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAmYXBhdGgsICZhcmcpKQpAQCAtMjgyNiw3ICsyODIyLDcgQEAKICAgICAgICAgICAgICFTeXN0ZW1UaW1lVG9GaWxlVGltZSgmbm93LCAmYXRpbWUpKSB7CiAgICAgICAgICAgICB3aW4zMl9lcnJvcigidXRpbWUiLCBOVUxMKTsKICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmICghUHlUdXBsZV9DaGVjayhhcmcpIHx8IFB5VHVwbGVfU2l6ZShhcmcpICE9IDIpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKQEAgLTI4NDksMTYgKzI4NDUsMTggQEAKICAgICAgICAgICAgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIGZpbGUsIHdoZW4gaXQgYWxzbwogICAgICAgICAgICBjb3VsZCBiZSB0aGUgdGltZSBzdGFtcCB0aGF0IGdpdmVzIGEgcHJvYmxlbS4gKi8KICAgICAgICAgd2luMzJfZXJyb3IoInV0aW1lIiwgTlVMTCk7CisgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJlc3VsdCA9IFB5X05vbmU7CiBkb25lOgogICAgIENsb3NlSGFuZGxlKGhGaWxlKTsKICAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UgLyogUHlfV0lOX1dJREVfRklMRU5BTUVTICovCisjZWxzZSAvKiBNU19XSU5ET1dTICovCiAKICAgICBjaGFyICpwYXRoID0gTlVMTDsKLSAgICBsb25nIGF0aW1lLCBtdGltZSwgYXVzZWMsIG11c2VjOworICAgIHRpbWVfdCBhdGltZSwgbXRpbWU7CisgICAgbG9uZyBhdXNlYywgbXVzZWM7CiAgICAgaW50IHJlczsKICAgICBQeU9iamVjdCogYXJnOwogCkBAIC0yOTI5LDcgKzI5MjcsNyBAQAogI3VuZGVmIFVUSU1FX0FSRwogI3VuZGVmIEFUSU1FCiAjdW5kZWYgTVRJTUUKLSNlbmRpZiAvKiBQeV9XSU5fV0lERV9GSUxFTkFNRVMgKi8KKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCiB9CiAKIApAQCAtMjk5OCw2ICsyOTk2LDExIEBACiAgICAgICAgIFB5TWVtX0ZyZWUocGF0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBpZiAoYXJnYyA8IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJleGVjdigpIGFyZyAyIG11c3Qgbm90IGJlIGVtcHR5Iik7CisgICAgICAgIFB5TWVtX0ZyZWUocGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGFyZ3ZsaXN0ID0gUHlNZW1fTkVXKGNoYXIgKiwgYXJnYysxKTsKICAgICBpZiAoYXJndmxpc3QgPT0gTlVMTCkgewpAQCAtMzcyMSw2ICszNzI0LDEwIEBACiAjZWxzZQogI2lmZGVmIEhBVkVfTElCVVRJTF9ICiAjaW5jbHVkZSA8bGlidXRpbC5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1VUSUxfSAorI2luY2x1ZGUgPHV0aWwuaD4KKyNlbmRpZiAvKiBIQVZFX1VUSUxfSCAqLwogI2VuZGlmIC8qIEhBVkVfTElCVVRJTF9IICovCiAjZW5kaWYgLyogSEFWRV9QVFlfSCAqLwogI2lmZGVmIEhBVkVfU1RST1BUU19ICkBAIC0zOTM5LDkgKzM5NDYsOSBAQAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqbyA9IFB5SW50X0Zyb21Mb25nKChsb25nKWFsdF9ncm91cGxpc3RbaV0pOwogICAgICAgICAgICAgaWYgKG8gPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShyZXN1bHQsIGksIG8pOwogICAgICAgICB9CkBAIC0zOTU1LDYgKzM5NjIsMzAgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgSEFWRV9JTklUR1JPVVBTCitQeURvY19TVFJWQVIocG9zaXhfaW5pdGdyb3Vwc19fZG9jX18sCisiaW5pdGdyb3Vwcyh1c2VybmFtZSwgZ2lkKSAtPiBOb25lXG5cblwKK0NhbGwgdGhlIHN5c3RlbSBpbml0Z3JvdXBzKCkgdG8gaW5pdGlhbGl6ZSB0aGUgZ3JvdXAgYWNjZXNzIGxpc3Qgd2l0aCBhbGwgb2ZcblwKK3RoZSBncm91cHMgb2Ygd2hpY2ggdGhlIHNwZWNpZmllZCB1c2VybmFtZSBpcyBhIG1lbWJlciwgcGx1cyB0aGUgc3BlY2lmaWVkXG5cCitncm91cCBpZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Bvc2l4X2luaXRncm91cHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKnVzZXJuYW1lOworICAgIGxvbmcgZ2lkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzbDppbml0Z3JvdXBzIiwgJnVzZXJuYW1lLCAmZ2lkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoaW5pdGdyb3Vwcyh1c2VybmFtZSwgKGdpZF90KSBnaWQpID09IC0xKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworCisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworfQorI2VuZGlmCisKICNpZmRlZiBIQVZFX0dFVFBHSUQKIFB5RG9jX1NUUlZBUihwb3NpeF9nZXRwZ2lkX19kb2NfXywKICJnZXRwZ2lkKHBpZCkgLT4gcGdpZFxuXG5cCkBAIC00MTIzLDYgKzQxNTQsNTMgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgTVNfV0lORE9XUworUHlEb2NfU1RSVkFSKHdpbjMyX2tpbGxfX2RvY19fLAorImtpbGwocGlkLCBzaWcpXG5cblwKK0tpbGwgYSBwcm9jZXNzIHdpdGggYSBzaWduYWwuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW4zMl9raWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIERXT1JEIHBpZCwgc2lnLCBlcnI7CisgICAgSEFORExFIGhhbmRsZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAia2s6a2lsbCIsICZwaWQsICZzaWcpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIENvbnNvbGUgcHJvY2Vzc2VzIHdoaWNoIHNoYXJlIGEgY29tbW9uIGNvbnNvbGUgY2FuIGJlIHNlbnQgQ1RSTCtDIG9yCisgICAgICAgQ1RSTCtCUkVBSyBldmVudHMsIHByb3ZpZGVkIHRoZXkgaGFuZGxlIHNhaWQgZXZlbnRzLiAqLworICAgIGlmIChzaWcgPT0gQ1RSTF9DX0VWRU5UIHx8IHNpZyA9PSBDVFJMX0JSRUFLX0VWRU5UKSB7CisgICAgICAgIGlmIChHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQoc2lnLCBwaWQpID09IDApIHsKKyAgICAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfQorCisgICAgLyogSWYgdGhlIHNpZ25hbCBpcyBvdXRzaWRlIG9mIHdoYXQgR2VuZXJhdGVDb25zb2xlQ3RybEV2ZW50IGNhbiB1c2UsCisgICAgICAgYXR0ZW1wdCB0byBvcGVuIGFuZCB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MuICovCisgICAgaGFuZGxlID0gT3BlblByb2Nlc3MoUFJPQ0VTU19BTExfQUNDRVNTLCBGQUxTRSwgcGlkKTsKKyAgICBpZiAoaGFuZGxlID09IE5VTEwpIHsKKyAgICAgICAgZXJyID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KKworICAgIGlmIChUZXJtaW5hdGVQcm9jZXNzKGhhbmRsZSwgc2lnKSA9PSAwKSB7CisgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOworICAgICAgICByZXN1bHQgPSBQeUVycl9TZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmVzdWx0ID0gUHlfTm9uZTsKKyAgICB9CisKKyAgICBDbG9zZUhhbmRsZShoYW5kbGUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYgLyogTVNfV0lORE9XUyAqLworCiAjaWZkZWYgSEFWRV9QTE9DSwogCiAjaWZkZWYgSEFWRV9TWVNfTE9DS19ICkBAIC02MzE5LDIyICs2Mzk3LDIwIEBACiAgICAgaW50IGZkOwogCiAjaWZkZWYgTVNfV0lORE9XUwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnBvOwotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVWl8aTpta2RpciIsICZwbywgJmZsYWcsICZtb2RlKSkgewotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgLyogUHlVbmljb2RlX0FTX1VOSUNPREUgT0sgd2l0aG91dCB0aHJlYWQKLSAgICAgICAgICAgICAgIGxvY2sgYXMgaXQgaXMgYSBzaW1wbGUgZGVyZWZlcmVuY2UuICovCi0gICAgICAgICAgICBmZCA9IF93b3BlbihQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyksIGZsYWcsIG1vZGUpOwotICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIGlmIChmZCA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpZmQpOwotICAgICAgICB9Ci0gICAgICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKLSAgICAgICAgICAgYXJlIGFsc28gdmFsaWQuICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVWl8aTpta2RpciIsICZwbywgJmZsYWcsICZtb2RlKSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIC8qIFB5VW5pY29kZV9BU19VTklDT0RFIE9LIHdpdGhvdXQgdGhyZWFkCisgICAgICAgICAgIGxvY2sgYXMgaXQgaXMgYSBzaW1wbGUgZGVyZWZlcmVuY2UuICovCisgICAgICAgIGZkID0gX3dvcGVuKFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSwgZmxhZywgbW9kZSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmIChmZCA8IDApCisgICAgICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKWZkKTsKICAgICB9CisgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncworICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CiAjZW5kaWYKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXRpfGkiLApAQCAtNjM2Miw2ICs2NDM4LDggQEAKICAgICBpbnQgZmQsIHJlczsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6Y2xvc2UiLCAmZmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBjbG9zZShmZCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTYzODQsNyArNjQ2Miw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBmb3IgKGkgPSBmZF9mcm9tOyBpIDwgZmRfdG87IGkrKykKLSAgICAgICAgY2xvc2UoaSk7CisgICAgICAgIGlmIChfUHlWZXJpZnlfZmQoaSkpCisgICAgICAgICAgICBjbG9zZShpKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtNjQwMCw2ICs2NDc5LDggQEAKICAgICBpbnQgZmQ7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmR1cCIsICZmZCkpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGZkID0gZHVwKGZkKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwpAQCAtNjQxOSw2ICs2NTAwLDggQEAKICAgICBpbnQgZmQsIGZkMiwgcmVzOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6ZHVwMiIsICZmZCwgJmZkMikpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghX1B5VmVyaWZ5X2ZkX2R1cDIoZmQsIGZkMikpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBkdXAyKGZkLCBmZDIpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC02NDYzLDYgKzY1NDYsOCBAQAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKICAgICByZXMgPSBfbHNlZWtpNjQoZmQsIHBvcywgaG93KTsKQEAgLTY0OTksNiArNjU4NCwxMCBAQAogICAgIGJ1ZmZlciA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopTlVMTCwgc2l6ZSk7CiAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgUHlfREVDUkVGKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgbiA9IHJlYWQoZmQsIFB5U3RyaW5nX0FzU3RyaW5nKGJ1ZmZlciksIHNpemUpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC02NTI1LDEwICs2NjE0LDE0IEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlzKjp3cml0ZSIsICZmZCwgJnBidWYpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc2l6ZSA9IHdyaXRlKGZkLCBwYnVmLmJ1ZiwgKHNpemVfdClwYnVmLmxlbik7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3Qoc2l6ZSk7CkBAIC02NTUxLDYgKzY2NDQsOCBAQAogICAgIC8qIG9uIE9wZW5WTVMgd2UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgYnl0ZXMgYXJlIHdyaXR0ZW4gdG8gdGhlIGZpbGUgKi8KICAgICBmc3luYyhmZCk7CiAjZW5kaWYKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBGU1RBVChmZCwgJnN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwpAQCAtNjU5Myw2ICs2Njg4LDggQEAKICAgICAgICAgUHlNZW1fRlJFRShtb2RlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmIGRlZmluZWQoSEFWRV9GQ05UTF9IKQogICAgIGlmIChtb2RlWzBdID09ICdhJykgewpAQCAtNjYzMiw2ICs2NzI5LDggQEAKICAgICBpbnQgZmQ7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmlzYXR0eSIsICZmZCkpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygwKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGlzYXR0eShmZCkpOwogfQogCkBAIC02ODA2LDEwICs2OTA1LDggQEAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gZnRydW5jYXRlKGZkLCBsZW5ndGgpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApIHsKLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTcyMTAsMTMgKzczMDcsMTcgQEAKICAgICAgICAgICAgICAgICAgICAidGVtcG5hbSBpcyBhIHBvdGVudGlhbCBzZWN1cml0eSByaXNrIHRvIHlvdXIgcHJvZ3JhbSIpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoUHlFcnJfV2FyblB5M2soInRlbXBuYW0gaGFzIGJlZW4gcmVtb3ZlZCBpbiAzLng7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgInVzZSB0aGUgdGVtcGZpbGUgbW9kdWxlIiwgMSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBuYW1lID0gX3RlbXBuYW0oZGlyLCBwZngpOwogI2Vsc2UKICAgICBuYW1lID0gdGVtcG5hbShkaXIsIHBmeCk7CiAjZW5kaWYKICAgICBpZiAobmFtZSA9PSBOVUxMKQotICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICByZXN1bHQgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKG5hbWUpOwogICAgIGZyZWUobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTcyMzQsOSArNzMzNSwxMyBAQAogewogICAgIEZJTEUgKmZwOwogCisgICAgaWYgKFB5RXJyX1dhcm5QeTNrKCJ0bXBmaWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gMy54OyAiCisgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgdGhlIHRlbXBmaWxlIG1vZHVsZSIsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBmcCA9IHRtcGZpbGUoKTsKICAgICBpZiAoZnAgPT0gTlVMTCkKLSAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgcmV0dXJuIFB5RmlsZV9Gcm9tRmlsZShmcCwgIjx0bXBmaWxlPiIsICJ3K2IiLCBmY2xvc2UpOwogfQogI2VuZGlmCkBAIC03MjU3LDIyICs3MzYyLDI2IEBACiAgICAgICAgICAgICAgICAgICAgInRtcG5hbSBpcyBhIHBvdGVudGlhbCBzZWN1cml0eSByaXNrIHRvIHlvdXIgcHJvZ3JhbSIpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoUHlFcnJfV2FyblB5M2soInRtcG5hbSBoYXMgYmVlbiByZW1vdmVkIGluIDMueDsgIgorICAgICAgICAgICAgICAgICAgICAgICAidXNlIHRoZSB0ZW1wZmlsZSBtb2R1bGUiLCAxKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAjaWZkZWYgVVNFX1RNUE5BTV9SCiAgICAgbmFtZSA9IHRtcG5hbV9yKGJ1ZmZlcik7CiAjZWxzZQogICAgIG5hbWUgPSB0bXBuYW0oYnVmZmVyKTsKICNlbmRpZgogICAgIGlmIChuYW1lID09IE5VTEwpIHsKLSAgICBQeU9iamVjdCAqZXJyID0gUHlfQnVpbGRWYWx1ZSgiaXMiLCAwLAorICAgICAgICBQeU9iamVjdCAqZXJyID0gUHlfQnVpbGRWYWx1ZSgiaXMiLCAwLAogI2lmZGVmIFVTRV9UTVBOQU1fUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIE5VTEwgZnJvbSB0bXBuYW1fciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgTlVMTCBmcm9tIHRtcG5hbV9yIgogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBOVUxMIGZyb20gdG1wbmFtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBOVUxMIGZyb20gdG1wbmFtIgogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfT1NFcnJvciwgZXJyKTsKLSAgICBQeV9YREVDUkVGKGVycik7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19PU0Vycm9yLCBlcnIpOworICAgICAgICBQeV9YREVDUkVGKGVycik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhidWZmZXIpOwogfQpAQCAtNzMwMCwzMyArNzQwOSwzMyBAQAogICAgICAgICAgICAgICBzaXplX3QgdGFibGVzaXplKQogewogICAgIGlmIChQeUludF9DaGVjayhhcmcpKSB7Ci0gICAgKnZhbHVlcCA9IFB5SW50X0FTX0xPTkcoYXJnKTsKLSAgICByZXR1cm4gMTsKKyAgICAgICAgKnZhbHVlcCA9IFB5SW50X0FTX0xPTkcoYXJnKTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogICAgIGlmIChQeVN0cmluZ19DaGVjayhhcmcpKSB7Ci0gICAgLyogbG9vayB1cCB0aGUgdmFsdWUgaW4gdGhlIHRhYmxlIHVzaW5nIGEgYmluYXJ5IHNlYXJjaCAqLwotICAgIHNpemVfdCBsbyA9IDA7CisgICAgICAgIC8qIGxvb2sgdXAgdGhlIHZhbHVlIGluIHRoZSB0YWJsZSB1c2luZyBhIGJpbmFyeSBzZWFyY2ggKi8KKyAgICAgICAgc2l6ZV90IGxvID0gMDsKICAgICAgICAgc2l6ZV90IG1pZDsKLSAgICBzaXplX3QgaGkgPSB0YWJsZXNpemU7Ci0gICAgaW50IGNtcDsKLSAgICBjaGFyICpjb25mbmFtZSA9IFB5U3RyaW5nX0FTX1NUUklORyhhcmcpOwotICAgIHdoaWxlIChsbyA8IGhpKSB7Ci0gICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDI7Ci0gICAgICAgIGNtcCA9IHN0cmNtcChjb25mbmFtZSwgdGFibGVbbWlkXS5uYW1lKTsKLSAgICAgICAgaWYgKGNtcCA8IDApCi0gICAgICAgIGhpID0gbWlkOwotICAgICAgICBlbHNlIGlmIChjbXAgPiAwKQotICAgICAgICBsbyA9IG1pZCArIDE7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAqdmFsdWVwID0gdGFibGVbbWlkXS52YWx1ZTsKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHNpemVfdCBoaSA9IHRhYmxlc2l6ZTsKKyAgICAgICAgaW50IGNtcDsKKyAgICAgICAgY2hhciAqY29uZm5hbWUgPSBQeVN0cmluZ19BU19TVFJJTkcoYXJnKTsKKyAgICAgICAgd2hpbGUgKGxvIDwgaGkpIHsKKyAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDI7CisgICAgICAgICAgICBjbXAgPSBzdHJjbXAoY29uZm5hbWUsIHRhYmxlW21pZF0ubmFtZSk7CisgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICBoaSA9IG1pZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNtcCA+IDApCisgICAgICAgICAgICAgICAgbG8gPSBtaWQgKyAxOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgKnZhbHVlcCA9IHRhYmxlW21pZF0udmFsdWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bnJlY29nbml6ZWQgY29uZmlndXJhdGlvbiBuYW1lIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5yZWNvZ25pemVkIGNvbmZpZ3VyYXRpb24gbmFtZSIpOwogICAgIH0KICAgICBlbHNlCi0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImNvbmZpZ3VyYXRpb24gbmFtZXMgbXVzdCBiZSBzdHJpbmdzIG9yIGludGVnZXJzIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmlndXJhdGlvbiBuYW1lcyBtdXN0IGJlIHN0cmluZ3Mgb3IgaW50ZWdlcnMiKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNzQwOSwxNCArNzUxOCwxNCBAQAogCiAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPJjpmcGF0aGNvbmYiLCAmZmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udl9wYXRoX2NvbmZuYW1lLCAmbmFtZSkpIHsKLSAgICBsb25nIGxpbWl0OworICAgICAgICBsb25nIGxpbWl0OwogCi0gICAgZXJybm8gPSAwOwotICAgIGxpbWl0ID0gZnBhdGhjb25mKGZkLCBuYW1lKTsKLSAgICBpZiAobGltaXQgPT0gLTEgJiYgZXJybm8gIT0gMCkKLSAgICAgICAgcG9zaXhfZXJyb3IoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IFB5SW50X0Zyb21Mb25nKGxpbWl0KTsKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBsaW1pdCA9IGZwYXRoY29uZihmZCwgbmFtZSk7CisgICAgICAgIGlmIChsaW1pdCA9PSAtMSAmJiBlcnJubyAhPSAwKQorICAgICAgICAgICAgcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gUHlJbnRfRnJvbUxvbmcobGltaXQpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNzQ0NCwxMCArNzU1MywxMCBAQAogICAgIGxpbWl0ID0gcGF0aGNvbmYocGF0aCwgbmFtZSk7CiAgICAgaWYgKGxpbWl0ID09IC0xICYmIGVycm5vICE9IDApIHsKICAgICAgICAgaWYgKGVycm5vID09IEVJTlZBTCkKLSAgICAgICAgLyogY291bGQgYmUgYSBwYXRoIG9yIG5hbWUgcHJvYmxlbSAqLwotICAgICAgICBwb3NpeF9lcnJvcigpOworICAgICAgICAgICAgLyogY291bGQgYmUgYSBwYXRoIG9yIG5hbWUgcHJvYmxlbSAqLworICAgICAgICAgICAgcG9zaXhfZXJyb3IoKTsKICAgICAgICAgZWxzZQotICAgICAgICBwb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKHBhdGgpOworICAgICAgICAgICAgcG9zaXhfZXJyb3Jfd2l0aF9maWxlbmFtZShwYXRoKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBQeUludF9Gcm9tTG9uZyhsaW1pdCk7CkBAIC04MjM1LDIxICs4MzQ0LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwb3NpeF9jb25zdGFudHNfcGF0aGNvbmYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBzaXplb2Yoc3RydWN0IGNvbnN0ZGVmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGhjb25mX25hbWVzIiwgbW9kdWxlKSkKLSAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEhBVkVfQ09ORlNUUgogICAgIGlmIChzZXR1cF9jb25mbmFtZV90YWJsZShwb3NpeF9jb25zdGFudHNfY29uZnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBvc2l4X2NvbnN0YW50c19jb25mc3RyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKHN0cnVjdCBjb25zdGRlZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25mc3RyX25hbWVzIiwgbW9kdWxlKSkKLSAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEhBVkVfU1lTQ09ORgogICAgIGlmIChzZXR1cF9jb25mbmFtZV90YWJsZShwb3NpeF9jb25zdGFudHNfc3lzY29uZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBvc2l4X2NvbnN0YW50c19zeXNjb25mKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKHN0cnVjdCBjb25zdGRlZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXNjb25mX25hbWVzIiwgbW9kdWxlKSkKLSAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAtMTsKICNlbmRpZgogICAgIHJldHVybiAwOwogfQpAQCAtODI5NSw0MiArODQwNCwzOCBAQAogICAgIGNoYXIgKmZpbGVwYXRoOwogICAgIGNoYXIgKm9wZXJhdGlvbiA9IE5VTEw7CiAgICAgSElOU1RBTkNFIHJjOwotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBQeU9iamVjdCAqdW5pcGF0aCwgKndvcGVyYXRpb24gPSBOVUxMOwotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8czpzdGFydGZpbGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVuaXBhdGgsICZvcGVyYXRpb24pKSB7CisKKyAgICBQeU9iamVjdCAqdW5pcGF0aCwgKndvcGVyYXRpb24gPSBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXxzOnN0YXJ0ZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ1bmlwYXRoLCAmb3BlcmF0aW9uKSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBnb3RvIG5vcm1hbDsKKyAgICB9CisKKyAgICBpZiAob3BlcmF0aW9uKSB7CisgICAgICAgIHdvcGVyYXRpb24gPSBQeVVuaWNvZGVfRGVjb2RlQVNDSUkob3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihvcGVyYXRpb24pLCBOVUxMKTsKKyAgICAgICAgaWYgKCF3b3BlcmF0aW9uKSB7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgb3BlcmF0aW9uID0gTlVMTDsKICAgICAgICAgICAgIGdvdG8gbm9ybWFsOwogICAgICAgICB9Ci0KLQotICAgICAgICBpZiAob3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICB3b3BlcmF0aW9uID0gUHlVbmljb2RlX0RlY29kZUFTQ0lJKG9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKG9wZXJhdGlvbiksIE5VTEwpOwotICAgICAgICAgICAgaWYgKCF3b3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBOVUxMOwotICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICByYyA9IFNoZWxsRXhlY3V0ZVcoKEhXTkQpMCwgd29wZXJhdGlvbiA/IFB5VW5pY29kZV9BU19VTklDT0RFKHdvcGVyYXRpb24pIDogMCwKLSAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHVuaXBhdGgpLAotICAgICAgICAgICAgTlVMTCwgTlVMTCwgU1dfU0hPV05PUk1BTCk7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICAgICAgUHlfWERFQ1JFRih3b3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJjIDw9IChISU5TVEFOQ0UpMzIpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICplcnJ2YWwgPSB3aW4zMl9lcnJvcl91bmljb2RlKCJzdGFydGZpbGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodW5pcGF0aCkpOwotICAgICAgICAgICAgcmV0dXJuIGVycnZhbDsKLSAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KLSNlbmRpZgorCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJjID0gU2hlbGxFeGVjdXRlVygoSFdORCkwLCB3b3BlcmF0aW9uID8gUHlVbmljb2RlX0FTX1VOSUNPREUod29wZXJhdGlvbikgOiAwLAorICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERSh1bmlwYXRoKSwKKyAgICAgICAgTlVMTCwgTlVMTCwgU1dfU0hPV05PUk1BTCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIFB5X1hERUNSRUYod29wZXJhdGlvbik7CisgICAgaWYgKHJjIDw9IChISU5TVEFOQ0UpMzIpIHsKKyAgICAgICAgUHlPYmplY3QgKmVycnZhbCA9IHdpbjMyX2Vycm9yX3VuaWNvZGUoInN0YXJ0ZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHVuaXBhdGgpKTsKKyAgICAgICAgcmV0dXJuIGVycnZhbDsKKyAgICB9CisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOwogCiBub3JtYWw6CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldHxzOnN0YXJ0ZmlsZSIsCkBAIC04MzUwLDcgKzg0NTUsNyBAQAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAogI2lmZGVmIEhBVkVfR0VUTE9BREFWRwogUHlEb2NfU1RSVkFSKHBvc2l4X2dldGxvYWRhdmdfX2RvY19fLApAQCAtODM2NCwxMCArODQ2OSwxMCBAQAogewogICAgIGRvdWJsZSBsb2FkYXZnWzNdOwogICAgIGlmIChnZXRsb2FkYXZnKGxvYWRhdmcsIDMpIT0zKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsICJMb2FkIGF2ZXJhZ2VzIGFyZSB1bm9idGFpbmFibGUiKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsICJMb2FkIGF2ZXJhZ2VzIGFyZSB1bm9idGFpbmFibGUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImRkZCIsIGxvYWRhdmdbMF0sIGxvYWRhdmdbMV0sIGxvYWRhdmdbMl0pOworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiZGRkIiwgbG9hZGF2Z1swXSwgbG9hZGF2Z1sxXSwgbG9hZGF2Z1syXSk7CiB9CiAjZW5kaWYKIApAQCAtODQ4Myw2ICs4NTg4LDgyIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfU0VUUkVTVUlECitQeURvY19TVFJWQVIocG9zaXhfc2V0cmVzdWlkX19kb2NfXywKKyJzZXRyZXN1aWQocnVpZCwgZXVpZCwgc3VpZClcblxuXAorU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCB1c2VyIGlkcy4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfc2V0cmVzdWlkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgLyogV2UgYXNzdW1lIHVpZF90IGlzIG5vIGxhcmdlciB0aGFuIGEgbG9uZy4gKi8KKyAgICBsb25nIHJ1aWQsIGV1aWQsIHN1aWQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJsbGwiLCAmcnVpZCwgJmV1aWQsICZzdWlkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHNldHJlc3VpZChydWlkLCBldWlkLCBzdWlkKSA8IDApCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NFVFJFU0dJRAorUHlEb2NfU1RSVkFSKHBvc2l4X3NldHJlc2dpZF9fZG9jX18sCisic2V0cmVzZ2lkKHJnaWQsIGVnaWQsIHNnaWQpXG5cblwKK1NldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgZ3JvdXAgaWRzLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9zZXRyZXNnaWQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICAvKiBXZSBhc3N1bWUgdWlkX3QgaXMgbm8gbGFyZ2VyIHRoYW4gYSBsb25nLiAqLworICAgIGxvbmcgcmdpZCwgZWdpZCwgc2dpZDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImxsbCIsICZyZ2lkLCAmZWdpZCwgJnNnaWQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc2V0cmVzZ2lkKHJnaWQsIGVnaWQsIHNnaWQpIDwgMCkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfR0VUUkVTVUlECitQeURvY19TVFJWQVIocG9zaXhfZ2V0cmVzdWlkX19kb2NfXywKKyJnZXRyZXN1aWQoKSAtPiAocnVpZCwgZXVpZCwgc3VpZClcblxuXAorR2V0IHR1cGxlIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCB1c2VyIGlkcy4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfZ2V0cmVzdWlkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK3sKKyAgICB1aWRfdCBydWlkLCBldWlkLCBzdWlkOworICAgIGxvbmcgbF9ydWlkLCBsX2V1aWQsIGxfc3VpZDsKKyAgICBpZiAoZ2V0cmVzdWlkKCZydWlkLCAmZXVpZCwgJnN1aWQpIDwgMCkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgLyogRm9yY2UgdGhlIHZhbHVlcyBpbnRvIGxvbmcncyBhcyB3ZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIHVpZF90LiAqLworICAgIGxfcnVpZCA9IHJ1aWQ7CisgICAgbF9ldWlkID0gZXVpZDsKKyAgICBsX3N1aWQgPSBzdWlkOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIobGxsKSIsIGxfcnVpZCwgbF9ldWlkLCBsX3N1aWQpOworfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0dFVFJFU0dJRAorUHlEb2NfU1RSVkFSKHBvc2l4X2dldHJlc2dpZF9fZG9jX18sCisiZ2V0cmVzZ2lkKCkgLT4gKHJnaWQsIGVnaWQsIHNnaWQpXG5cblwKK0dldCB0dXBsZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgZ3JvdXAgaWRzLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9nZXRyZXNnaWQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQoreworICAgIHVpZF90IHJnaWQsIGVnaWQsIHNnaWQ7CisgICAgbG9uZyBsX3JnaWQsIGxfZWdpZCwgbF9zZ2lkOworICAgIGlmIChnZXRyZXNnaWQoJnJnaWQsICZlZ2lkLCAmc2dpZCkgPCAwKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAvKiBGb3JjZSB0aGUgdmFsdWVzIGludG8gbG9uZydzIGFzIHdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgdWlkX3QuICovCisgICAgbF9yZ2lkID0gcmdpZDsKKyAgICBsX2VnaWQgPSBlZ2lkOworICAgIGxfc2dpZCA9IHNnaWQ7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihsbGwpIiwgbF9yZ2lkLCBsX2VnaWQsIGxfc2dpZCk7Cit9CisjZW5kaWYKKwogc3RhdGljIFB5TWV0aG9kRGVmIHBvc2l4X21ldGhvZHNbXSA9IHsKICAgICB7ImFjY2VzcyIsICAgICAgICAgIHBvc2l4X2FjY2VzcywgTUVUSF9WQVJBUkdTLCBwb3NpeF9hY2Nlc3NfX2RvY19ffSwKICNpZmRlZiBIQVZFX1RUWU5BTUUKQEAgLTg2MjEsNiArODgwMiw3IEBACiAgICAgeyJwb3BlbjMiLCAgICAgICAgICB3aW4zMl9wb3BlbjMsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJwb3BlbjQiLCAgICAgICAgICB3aW4zMl9wb3BlbjQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJzdGFydGZpbGUiLCAgICAgICB3aW4zMl9zdGFydGZpbGUsIE1FVEhfVkFSQVJHUywgd2luMzJfc3RhcnRmaWxlX19kb2NfX30sCisgICAgeyJraWxsIiwgICAgd2luMzJfa2lsbCwgTUVUSF9WQVJBUkdTLCB3aW4zMl9raWxsX19kb2NfX30sCiAjZWxzZQogI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCiAgICAgeyJwb3BlbjIiLCAgICAgICAgICBvczJlbXhfcG9wZW4yLCBNRVRIX1ZBUkFSR1N9LApAQCAtODY1MCw2ICs4ODMyLDkgQEAKICNpZmRlZiBIQVZFX1NFVEdST1VQUwogICAgIHsic2V0Z3JvdXBzIiwgICAgICAgcG9zaXhfc2V0Z3JvdXBzLCBNRVRIX08sIHBvc2l4X3NldGdyb3Vwc19fZG9jX199LAogI2VuZGlmIC8qIEhBVkVfU0VUR1JPVVBTICovCisjaWZkZWYgSEFWRV9JTklUR1JPVVBTCisgICAgeyJpbml0Z3JvdXBzIiwgICAgICBwb3NpeF9pbml0Z3JvdXBzLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2luaXRncm91cHNfX2RvY19ffSwKKyNlbmRpZiAvKiBIQVZFX0lOSVRHUk9VUFMgKi8KICNpZmRlZiBIQVZFX0dFVFBHSUQKICAgICB7ImdldHBnaWQiLCAgICAgICAgIHBvc2l4X2dldHBnaWQsIE1FVEhfVkFSQVJHUywgcG9zaXhfZ2V0cGdpZF9fZG9jX199LAogI2VuZGlmIC8qIEhBVkVfR0VUUEdJRCAqLwpAQCAtODc5Myw2ICs4OTc4LDE5IEBACiAgI2lmZGVmIF9fVk1TCiAgICAgeyJ1cmFuZG9tIiwgdm1zX3VyYW5kb20sIE1FVEhfVkFSQVJHUywgdm1zX3VyYW5kb21fX2RvY19ffSwKICAjZW5kaWYKKyNpZmRlZiBIQVZFX1NFVFJFU1VJRAorICAgIHsic2V0cmVzdWlkIiwgICAgICAgcG9zaXhfc2V0cmVzdWlkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NldHJlc3VpZF9fZG9jX199LAorI2VuZGlmCisjaWZkZWYgSEFWRV9TRVRSRVNHSUQKKyAgICB7InNldHJlc2dpZCIsICAgICAgIHBvc2l4X3NldHJlc2dpZCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zZXRyZXNnaWRfX2RvY19ffSwKKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUUkVTVUlECisgICAgeyJnZXRyZXN1aWQiLCAgICAgICBwb3NpeF9nZXRyZXN1aWQsIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRyZXN1aWRfX2RvY19ffSwKKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUUkVTR0lECisgICAgeyJnZXRyZXNnaWQiLCAgICAgICBwb3NpeF9nZXRyZXNnaWQsIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRyZXNnaWRfX2RvY19ffSwKKyNlbmRpZgorCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3B3ZG1vZHVsZS5jIGIvTW9kdWxlcy9wd2Rtb2R1bGUuYwppbmRleCBhZTM1OGUwLi42NzI5Yzg0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3B3ZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKQEAgLTk4LDcgKzk4LDcgQEAKICJnZXRwd3VpZCh1aWQpIC0+IChwd19uYW1lLHB3X3Bhc3N3ZCxwd191aWQsXG5cCiAgICAgICAgICAgICAgICAgICBwd19naWQscHdfZ2Vjb3MscHdfZGlyLHB3X3NoZWxsKVxuXAogUmV0dXJuIHRoZSBwYXNzd29yZCBkYXRhYmFzZSBlbnRyeSBmb3IgdGhlIGdpdmVuIG51bWVyaWMgdXNlciBJRC5cblwKLVNlZSBwd2QuX19kb2NfXyBmb3IgbW9yZSBvbiBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLiIpOworU2VlIGhlbHAocHdkKSBmb3IgbW9yZSBvbiBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogcHdkX2dldHB3dWlkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTExOSw3ICsxMTksNyBAQAogImdldHB3bmFtKG5hbWUpIC0+IChwd19uYW1lLHB3X3Bhc3N3ZCxwd191aWQsXG5cCiAgICAgICAgICAgICAgICAgICAgIHB3X2dpZCxwd19nZWNvcyxwd19kaXIscHdfc2hlbGwpXG5cCiBSZXR1cm4gdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gdXNlciBuYW1lLlxuXAotU2VlIHB3ZC5fX2RvY19fIGZvciBtb3JlIG9uIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMuIik7CitTZWUgaGVscChwd2QpIGZvciBtb3JlIG9uIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBwd2RfZ2V0cHduYW0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtMTQxLDcgKzE0MSw3IEBACiAiZ2V0cHdhbGwoKSAtPiBsaXN0X29mX2VudHJpZXNcblwKIFJldHVybiBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLCBcCiBpbiBhcmJpdHJhcnkgb3JkZXIuXG5cCi1TZWUgcHdkLl9fZG9jX18gZm9yIG1vcmUgb24gcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcy4iKTsKK1NlZSBoZWxwKHB3ZCkgZm9yIG1vcmUgb24gcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHB3ZF9nZXRwd2FsbChQeU9iamVjdCAqc2VsZikKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHlleHBhdC5jIGIvTW9kdWxlcy9weWV4cGF0LmMKaW5kZXggMWU5Yjg5Zi4uMDU1NWI2ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weWV4cGF0LmMKKysrIGIvTW9kdWxlcy9weWV4cGF0LmMKQEAgLTI2MSw1MiArMjYxLDExIEBACiBzdGF0aWMgUHlDb2RlT2JqZWN0KgogZ2V0Y29kZShlbnVtIEhhbmRsZXJUeXBlcyBzbG90LCBjaGFyKiBmdW5jX25hbWUsIGludCBsaW5lbm8pCiB7Ci0gICAgUHlPYmplY3QgKmNvZGUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpuYW1lID0gTlVMTDsKLSAgICBQeU9iamVjdCAqbnVsbHR1cGxlID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBOVUxMOwotCiAgICAgaWYgKGhhbmRsZXJfaW5mb1tzbG90XS50Yl9jb2RlID09IE5VTEwpIHsKLSAgICAgICAgY29kZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIiIpOwotICAgICAgICBpZiAoY29kZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgICAgIG5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGZ1bmNfbmFtZSk7Ci0gICAgICAgIGlmIChuYW1lID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgbnVsbHR1cGxlID0gUHlUdXBsZV9OZXcoMCk7Ci0gICAgICAgIGlmIChudWxsdHVwbGUgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOwotICAgICAgICBmaWxlbmFtZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoX19GSUxFX18pOwogICAgICAgICBoYW5kbGVyX2luZm9bc2xvdF0udGJfY29kZSA9Ci0gICAgICAgICAgICBQeUNvZGVfTmV3KDAsICAgICAgICAgICAgICAgLyogYXJnY291bnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAvKiBubG9jYWxzICovCi0gICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgLyogc3RhY2tzaXplICovCi0gICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgY29kZSwgICAgICAgICAgICAvKiBjb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgLyogY29uc3RzICovCi0gICAgICAgICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgLyogbmFtZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAvKiB2YXJuYW1lcyAqLwotI2lmIFBZVEhPTl9BUElfVkVSU0lPTiA+PSAxMDEwCi0gICAgICAgICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgLyogZnJlZXZhcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAvKiBjZWxsdmFycyAqLwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCAgICAgICAgLyogZmlsZW5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgICAgICAgICAgICAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgICAgICAgICAgLyogZmlyc3RsaW5lbm8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgY29kZSAgICAgICAgICAgICAvKiBsbm90YWIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgaWYgKGhhbmRsZXJfaW5mb1tzbG90XS50Yl9jb2RlID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgUHlfREVDUkVGKGNvZGUpOwotICAgICAgICBQeV9ERUNSRUYobnVsbHR1cGxlKTsKLSAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKLSAgICAgICAgUHlfREVDUkVGKG5hbWUpOworICAgICAgICAgICAgUHlDb2RlX05ld0VtcHR5KF9fRklMRV9fLCBmdW5jX25hbWUsIGxpbmVubyk7CiAgICAgfQogICAgIHJldHVybiBoYW5kbGVyX2luZm9bc2xvdF0udGJfY29kZTsKLSBmYWlsZWQ6Ci0gICAgUHlfWERFQ1JFRihjb2RlKTsKLSAgICBQeV9YREVDUkVGKG5hbWUpOwotICAgIHJldHVybiBOVUxMOwogfQogCiAjaWZkZWYgRklYX1RSQUNFCkBAIC00NTYsNiArNDE1LDkgQEAKICAgICBQeU9iamVjdCAqYXJnczsKICAgICBQeU9iamVjdCAqdGVtcDsKIAorICAgIGlmICghaGF2ZV9oYW5kbGVyKHNlbGYsIENoYXJhY3RlckRhdGEpKQorICAgICAgICByZXR1cm4gLTE7CisKICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMSk7CiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTAzNCw3ICs5OTYsNyBAQAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGJ5dGVzX3JlYWQgPSByZWFkaW5zdChidWYsIEJVRl9TSVpFLCByZWFkbWV0aG9kKTsKICAgICAgICAgICAgIGlmIChieXRlc19yZWFkIDwgMCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWFkbWV0aG9kKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHJlYWRtZXRob2QpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMDk0LDggKzIwNTYsOCBAQAogICAgIGNhcGkuU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlciA9IFhNTF9TZXRVbmtub3duRW5jb2RpbmdIYW5kbGVyOwogICAgIGNhcGkuU2V0VXNlckRhdGEgPSBYTUxfU2V0VXNlckRhdGE7CiAKLSAgICAvKiBleHBvcnQgYXMgY29iamVjdCAqLwotICAgIGNhcGlfb2JqZWN0ID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKCZjYXBpLCBOVUxMKTsKKyAgICAvKiBleHBvcnQgdXNpbmcgY2Fwc3VsZSAqLworICAgIGNhcGlfb2JqZWN0ID0gUHlDYXBzdWxlX05ldygmY2FwaSwgUHlFeHBhdF9DQVBTVUxFX05BTUUsIE5VTEwpOwogICAgIGlmIChjYXBpX29iamVjdCkKICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJleHBhdF9DQVBJIiwgY2FwaV9vYmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZWFkbGluZS5jIGIvTW9kdWxlcy9yZWFkbGluZS5jCmluZGV4IDAzOGI0ZDYuLmI1ZTI1OGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVhZGxpbmUuYworKysgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpZiBkZWZpbmVkKF9STF9GVU5DVElPTl9UWVBFREVGKQogZXh0ZXJuIGNoYXIgKipjb21wbGV0aW9uX21hdGNoZXMoY2hhciAqLCBybF9jb21wZW50cnlfZnVuY190ICopOwogI2Vsc2UKKwogI2lmICFkZWZpbmVkKF9fQVBQTEVfXykKIGV4dGVybiBjaGFyICoqY29tcGxldGlvbl9tYXRjaGVzKGNoYXIgKiwgQ1BGdW5jdGlvbiAqKTsKICNlbmRpZgpAQCAtMzU1LDYgKzM1NiwzOCBAQAogInNldF9jb21wbGV0ZXJfZGVsaW1zKHN0cmluZykgLT4gTm9uZVxuXAogc2V0IHRoZSByZWFkbGluZSB3b3JkIGRlbGltaXRlcnMgZm9yIHRhYi1jb21wbGV0aW9uIik7CiAKKy8qIF9weV9mcmVlX2hpc3RvcnlfZW50cnk6IFV0aWxpdHkgZnVuY3Rpb24gdG8gZnJlZSBhIGhpc3RvcnkgZW50cnkuICovCisKKyNpZiBkZWZpbmVkKFJMX1JFQURMSU5FX1ZFUlNJT04pICYmIFJMX1JFQURMSU5FX1ZFUlNJT04gPj0gMHgwNTAwCisKKy8qIFJlYWRsaW5lIHZlcnNpb24gPj0gNS4wIGludHJvZHVjZWQgYSB0aW1lc3RhbXAgZmllbGQgaW50byB0aGUgaGlzdG9yeSBlbnRyeQorICAgc3RydWN0dXJlOyB0aGlzIG5lZWRzIHRvIGJlIGZyZWVkIHRvIGF2b2lkIGEgbWVtb3J5IGxlYWsuICBUaGlzIHZlcnNpb24gb2YKKyAgIHJlYWRsaW5lIGFsc28gaW50cm9kdWNlZCB0aGUgaGFuZHkgJ2ZyZWVfaGlzdG9yeV9lbnRyeScgZnVuY3Rpb24sIHdoaWNoCisgICB0YWtlcyBjYXJlIG9mIHRoZSB0aW1lc3RhbXAuICovCisKK3N0YXRpYyB2b2lkCitfcHlfZnJlZV9oaXN0b3J5X2VudHJ5KEhJU1RfRU5UUlkgKmVudHJ5KQoreworICAgIGhpc3RkYXRhX3QgZGF0YSA9IGZyZWVfaGlzdG9yeV9lbnRyeShlbnRyeSk7CisgICAgZnJlZShkYXRhKTsKK30KKworI2Vsc2UKKworLyogTm8gZnJlZV9oaXN0b3J5X2VudHJ5IGZ1bmN0aW9uOyAgZnJlZSBldmVyeXRoaW5nIG1hbnVhbGx5LiAqLworCitzdGF0aWMgdm9pZAorX3B5X2ZyZWVfaGlzdG9yeV9lbnRyeShISVNUX0VOVFJZICplbnRyeSkKK3sKKyAgICBpZiAoZW50cnktPmxpbmUpCisgICAgICAgIGZyZWUoKHZvaWQgKillbnRyeS0+bGluZSk7CisgICAgaWYgKGVudHJ5LT5kYXRhKQorICAgICAgICBmcmVlKGVudHJ5LT5kYXRhKTsKKyAgICBmcmVlKGVudHJ5KTsKK30KKworI2VuZGlmCisKIHN0YXRpYyBQeU9iamVjdCAqCiBweV9yZW1vdmVfaGlzdG9yeShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC0zNzYsMTIgKzQwOSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAvKiBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBoaXN0b3J5IGVudHJ5ICovCi0gICAgaWYgKGVudHJ5LT5saW5lKQotICAgICAgICBmcmVlKGVudHJ5LT5saW5lKTsKLSAgICBpZiAoZW50cnktPmRhdGEpCi0gICAgICAgIGZyZWUoZW50cnktPmRhdGEpOwotICAgIGZyZWUoZW50cnkpOwotCisgICAgX3B5X2ZyZWVfaGlzdG9yeV9lbnRyeShlbnRyeSk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTQxMywxMiArNDQxLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIC8qIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIG9sZCBoaXN0b3J5IGVudHJ5ICovCi0gICAgaWYgKG9sZF9lbnRyeS0+bGluZSkKLSAgICAgICAgZnJlZShvbGRfZW50cnktPmxpbmUpOwotICAgIGlmIChvbGRfZW50cnktPmRhdGEpCi0gICAgICAgIGZyZWUob2xkX2VudHJ5LT5kYXRhKTsKLSAgICBmcmVlKG9sZF9lbnRyeSk7Ci0KKyAgICBfcHlfZnJlZV9oaXN0b3J5X2VudHJ5KG9sZF9lbnRyeSk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTQ4OSw2ICs1MTIsMjUgQEAKIFxuXAogUmV0dXJucyBjdXJyZW50IGNvbXBsZXRlciBmdW5jdGlvbi4iKTsKIAorLyogUHJpdmF0ZSBmdW5jdGlvbiB0byBnZXQgY3VycmVudCBsZW5ndGggb2YgaGlzdG9yeS4gIFhYWCBJdCBtYXkgYmUKKyAqIHBvc3NpYmxlIHRvIHJlcGxhY2UgdGhpcyB3aXRoIGEgZGlyZWN0IHVzZSBvZiBoaXN0b3J5X2xlbmd0aCBpbnN0ZWFkLAorICogYnV0IGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgQlNEJ3MgbGliZWRpdCBrZWVwcyBoaXN0b3J5X2xlbmd0aCB1cCB0byBkYXRlLgorICogU2VlIGlzc3VlICM4MDY1LiovCisKK3N0YXRpYyBpbnQKK19weV9nZXRfaGlzdG9yeV9sZW5ndGgodm9pZCkKK3sKKyAgICBISVNUT1JZX1NUQVRFICpoaXN0X3N0ID0gaGlzdG9yeV9nZXRfaGlzdG9yeV9zdGF0ZSgpOworICAgIGludCBsZW5ndGggPSBoaXN0X3N0LT5sZW5ndGg7CisgICAgLyogdGhlIGhpc3RvcnkgZG9jcyBkb24ndCBzYXkgc28sIGJ1dCB0aGUgYWRkcmVzcyBvZiBoaXN0X3N0IGNoYW5nZXMgZWFjaAorICAgICAgIHRpbWUgaGlzdG9yeV9nZXRfaGlzdG9yeV9zdGF0ZSBpcyBjYWxsZWQgd2hpY2ggbWFrZXMgbWUgdGhpbmsgaXQncworICAgICAgIGZyZXNobHkgbWFsbG9jJ2QgbWVtb3J5Li4uICBvbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGFkZHJlc3Mgb2YgdGhlIGxhc3QKKyAgICAgICBsaW5lIHN0YXlzIHRoZSBzYW1lIGFzIGxvbmcgYXMgaGlzdG9yeSBpc24ndCBleHRlbmRlZCwgc28gaXQgYXBwZWFycyB0bworICAgICAgIGJlIG1hbGxvYydkIGJ1dCBtYW5hZ2VkIGJ5IHRoZSBoaXN0b3J5IHBhY2thZ2UuLi4gKi8KKyAgICBmcmVlKGhpc3Rfc3QpOworICAgIHJldHVybiBsZW5ndGg7Cit9CisKIC8qIEV4cG9ydGVkIGZ1bmN0aW9uIHRvIGdldCBhbnkgZWxlbWVudCBvZiBoaXN0b3J5ICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01MDcsOSArNTQ5LDcgQEAKICAgICAgICAgICogY29kZSBkb2Vzbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlCiAgICAgICAgICAqIGRpZmZlcmVuY2UuCiAgICAgICAgICAqLwotICAgICAgICBISVNUT1JZX1NUQVRFICpoaXN0X3N0OwotICAgICAgICBoaXN0X3N0ID0gaGlzdG9yeV9nZXRfaGlzdG9yeV9zdGF0ZSgpOwotCisgICAgICAgIGludCBsZW5ndGggPSBfcHlfZ2V0X2hpc3RvcnlfbGVuZ3RoKCk7CiAgICAgICAgIGlkeCAtLTsKIAogICAgICAgICAvKgpAQCAtNTE3LDcgKzU1Nyw3IEBACiAgICAgICAgICAqIHRoZSBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsIHRoZXJlZm9yZQogICAgICAgICAgKiB0ZXN0IGZvciB0aGF0IGFuZCBmYWlsIGdyYWNlZnVsbHkuCiAgICAgICAgICAqLwotICAgICAgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gaGlzdF9zdC0+bGVuZ3RoKSB7CisgICAgICAgIGlmIChpZHggPCAwIHx8IGlkeCA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgICAgICB9CiAgICAgfQpAQCAtNTM5LDEwICs1NzksNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmcpCiB7Ci0gICAgSElTVE9SWV9TVEFURSAqaGlzdF9zdDsKLQotICAgIGhpc3Rfc3QgPSBoaXN0b3J5X2dldF9oaXN0b3J5X3N0YXRlKCk7Ci0gICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKGhpc3Rfc3QgPyAobG9uZykgaGlzdF9zdC0+bGVuZ3RoIDogKGxvbmcpIDApOworICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZylfcHlfZ2V0X2hpc3RvcnlfbGVuZ3RoKCkpOwogfQogCiBQeURvY19TVFJWQVIoZG9jX2dldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RoLApAQCAtNzM4LDEzICs3NzUsMTMgQEAKICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic09pIiwgbWF0Y2hlc1swXSwgbSwgbWF4X2xlbmd0aCk7CiAKLSAgICBQeV9ERUNSRUYobSksIG09TlVMTDsKKyAgICBQeV9ERUNSRUYobSk7IG09TlVMTDsKIAogICAgIGlmIChyID09IE5VTEwgfHwKICAgICAgICAgKHIgIT0gUHlfTm9uZSAmJiBQeUludF9Bc0xvbmcocikgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIHsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgUHlfWERFQ1JFRihyKSwgcj1OVUxMOworICAgIFB5X1hERUNSRUYocik7IHI9TlVMTDsKIAogICAgIGlmICgwKSB7CiAgICAgZXJyb3I6CkBAIC04MjgsNiArODY1LDE0IEBACiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIm5vdCBlbm91Z2ggbWVtb3J5IHRvIHNhdmUgbG9jYWxlIik7CiAjZW5kaWYKIAorI2lmZGVmIF9fQVBQTEVfXworICAgIC8qIHRoZSBsaWJlZGl0IHJlYWRsaW5lIGVtdWxhdGlvbiByZXNldHMga2V5IGJpbmRpbmdzIGV0YyAKKyAgICAgKiB3aGVuIGNhbGxpbmcgcmxfaW5pdGlhbGl6ZS4gIFNvIGNhbGwgaXQgdXBmcm9udAorICAgICAqLworICAgIGlmICh1c2luZ19saWJlZGl0X2VtdWxhdGlvbikKKyAgICAgICAgcmxfaW5pdGlhbGl6ZSgpOworI2VuZGlmIC8qIF9fQVBQTEVfXyAqLworCiAgICAgdXNpbmdfaGlzdG9yeSgpOwogCiAgICAgcmxfcmVhZGxpbmVfbmFtZSA9ICJweXRob24iOwpAQCAtODU5LDggKzkwNCwxMyBAQAogICAgICAqIFhYWDogQSBidWcgaW4gdGhlIHJlYWRsaW5lLTIuMiBsaWJyYXJ5IGNhdXNlcyBhIG1lbW9yeSBsZWFrCiAgICAgICogaW5zaWRlIHRoaXMgZnVuY3Rpb24uICBOb3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdC4KICAgICAgKi8KLSAgICBybF9pbml0aWFsaXplKCk7Ci0KKyNpZmRlZiBfX0FQUExFX18KKyAgICBpZiAodXNpbmdfbGliZWRpdF9lbXVsYXRpb24pCisJcmxfcmVhZF9pbml0X2ZpbGUoTlVMTCk7CisgICAgZWxzZQorI2VuZGlmIC8qIF9fQVBQTEVfXyAqLworICAgICAgICBybF9pbml0aWFsaXplKCk7CisgICAgCiAgICAgUkVTVE9SRV9MT0NBTEUoc2F2ZWRfbG9jYWxlKQogfQogCkBAIC0xMDIyLDMwICsxMDcyLDIzIEBACiAgICAgLyogd2UgaGF2ZSBhIHZhbGlkIGxpbmUgKi8KICAgICBuID0gc3RybGVuKHApOwogICAgIGlmIChuID4gMCkgewotICAgICAgICBjaGFyICpsaW5lOwotICAgICAgICBISVNUT1JZX1NUQVRFICpzdGF0ZSA9IGhpc3RvcnlfZ2V0X2hpc3Rvcnlfc3RhdGUoKTsKLSAgICAgICAgaWYgKHN0YXRlLT5sZW5ndGggPiAwKQorICAgICAgICBjb25zdCBjaGFyICpsaW5lOworICAgICAgICBpbnQgbGVuZ3RoID0gX3B5X2dldF9oaXN0b3J5X2xlbmd0aCgpOworICAgICAgICBpZiAobGVuZ3RoID4gMCkKICNpZmRlZiBfX0FQUExFX18KICAgICAgICAgICAgIGlmICh1c2luZ19saWJlZGl0X2VtdWxhdGlvbikgewogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogTGliZWRpdCdzIGVtdWxhdGlvbiB1c2VzIDAtYmFzZWQgaW5kZXhlcywKICAgICAgICAgICAgICAgICAgKiB0aGUgcmVhbCByZWFkbGluZSB1c2VzIDEtYmFzZWQgaW5kZXhlcy4KICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBsaW5lID0gaGlzdG9yeV9nZXQoc3RhdGUtPmxlbmd0aCAtIDEpLT5saW5lOworICAgICAgICAgICAgICAgIGxpbmUgPSBoaXN0b3J5X2dldChsZW5ndGggLSAxKS0+bGluZTsKICAgICAgICAgICAgIH0gZWxzZQogI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwotICAgICAgICAgICAgbGluZSA9IGhpc3RvcnlfZ2V0KHN0YXRlLT5sZW5ndGgpLT5saW5lOworICAgICAgICAgICAgbGluZSA9IGhpc3RvcnlfZ2V0KGxlbmd0aCktPmxpbmU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxpbmUgPSAiIjsKICAgICAgICAgaWYgKHN0cmNtcChwLCBsaW5lKSkKICAgICAgICAgICAgIGFkZF9oaXN0b3J5KHApOwotICAgICAgICAvKiB0aGUgaGlzdG9yeSBkb2NzIGRvbid0IHNheSBzbywgYnV0IHRoZSBhZGRyZXNzIG9mIHN0YXRlCi0gICAgICAgICAgIGNoYW5nZXMgZWFjaCB0aW1lIGhpc3RvcnlfZ2V0X2hpc3Rvcnlfc3RhdGUgaXMgY2FsbGVkCi0gICAgICAgICAgIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0J3MgZnJlc2hseSBtYWxsb2MnZCBtZW1vcnkuLi4KLSAgICAgICAgICAgb24gdGhlIG90aGVyIGhhbmQsIHRoZSBhZGRyZXNzIG9mIHRoZSBsYXN0IGxpbmUgc3RheXMgdGhlCi0gICAgICAgICAgIHNhbWUgYXMgbG9uZyBhcyBoaXN0b3J5IGlzbid0IGV4dGVuZGVkLCBzbyBpdCBhcHBlYXJzIHRvCi0gICAgICAgICAgIGJlIG1hbGxvYydkIGJ1dCBtYW5hZ2VkIGJ5IHRoZSBoaXN0b3J5IHBhY2thZ2UuLi4gKi8KLSAgICAgICAgZnJlZShzdGF0ZSk7CiAgICAgfQogICAgIC8qIENvcHkgdGhlIG1hbGxvYydlZCBidWZmZXIgaW50byBhIFB5TWVtX01hbGxvYydlZCBvbmUgYW5kCiAgICAgICAgcmVsZWFzZSB0aGUgb3JpZ2luYWwuICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jIGIvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYwppbmRleCAwMjJjMDk5Li41MTkyY2U3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUwotIyAgaW5jbHVkZSA8d2luc29jay5oPgorIyAgaW5jbHVkZSA8d2luc29jazIuaD4KICNlbHNlCiAjICBkZWZpbmUgU09DS0VUIGludAogIyAgaWZkZWYgX19CRU9TX18KQEAgLTk0LDcgKzk0LDcgQEAKICAgICBmZDJvYmpbMF0ub2JqID0gKFB5T2JqZWN0KikwOyAgICAgICAgICAgIC8qIHNldCBsaXN0IHRvIHplcm8gc2l6ZSAqLwogICAgIEZEX1pFUk8oc2V0KTsKIAotICAgIGZhc3Rfc2VxPVB5U2VxdWVuY2VfRmFzdChzZXEsICJhcmd1bWVudHMgMS0zIG11c3QgYmUgc2VxdWVuY2VzIik7CisgICAgZmFzdF9zZXEgPSBQeVNlcXVlbmNlX0Zhc3Qoc2VxLCAiYXJndW1lbnRzIDEtMyBtdXN0IGJlIHNlcXVlbmNlcyIpOwogICAgIGlmICghZmFzdF9zZXEpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtMTE4NSw2ICsxMTg1LDMwIEBACiAKICNkZWZpbmUga3F1ZXVlX3F1ZXVlX0NoZWNrKG9wKSAoUHlPYmplY3RfVHlwZUNoZWNrKChvcCksICZrcXVldWVfcXVldWVfVHlwZSkpCiAKKyNpZiAoU0laRU9GX1VJTlRQVFJfVCAhPSBTSVpFT0ZfVk9JRF9QKQorIyAgIGVycm9yIHVpbnRwdHJfdCBkb2VzIG5vdCBtYXRjaCB2b2lkICohCisjZWxpZiAoU0laRU9GX1VJTlRQVFJfVCA9PSBTSVpFT0ZfTE9OR19MT05HKQorIyAgIGRlZmluZSBUX1VJTlRQVFJUICAgICAgICAgVF9VTE9OR0xPTkcKKyMgICBkZWZpbmUgVF9JTlRQVFJUICAgICAgICAgIFRfTE9OR0xPTkcKKyMgICBkZWZpbmUgUHlMb25nX0FzVWludHB0cl90IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKKyMgICBkZWZpbmUgVUlOVFBUUlRfRk1UX1VOSVQgICJLIgorIyAgIGRlZmluZSBJTlRQVFJUX0ZNVF9VTklUICAgIkwiCisjZWxpZiAoU0laRU9GX1VJTlRQVFJfVCA9PSBTSVpFT0ZfTE9ORykKKyMgICBkZWZpbmUgVF9VSU5UUFRSVCAgICAgICAgIFRfVUxPTkcKKyMgICBkZWZpbmUgVF9JTlRQVFJUICAgICAgICAgIFRfTE9ORworIyAgIGRlZmluZSBQeUxvbmdfQXNVaW50cHRyX3QgUHlMb25nX0FzVW5zaWduZWRMb25nCisjICAgZGVmaW5lIFVJTlRQVFJUX0ZNVF9VTklUICAiayIKKyMgICBkZWZpbmUgSU5UUFRSVF9GTVRfVU5JVCAgICJsIgorI2VsaWYgKFNJWkVPRl9VSU5UUFRSX1QgPT0gU0laRU9GX0lOVCkKKyMgICBkZWZpbmUgVF9VSU5UUFRSVCAgICAgICAgIFRfVUlOVAorIyAgIGRlZmluZSBUX0lOVFBUUlQgICAgICAgICAgVF9JTlQKKyMgICBkZWZpbmUgUHlMb25nX0FzVWludHB0cl90IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZworIyAgIGRlZmluZSBVSU5UUFRSVF9GTVRfVU5JVCAgIkkiCisjICAgZGVmaW5lIElOVFBUUlRfRk1UX1VOSVQgICAiaSIKKyNlbHNlCisjICAgZXJyb3IgdWludHB0cl90IGRvZXMgbm90IG1hdGNoIGludCwgbG9uZywgb3IgbG9uZyBsb25nIQorI2VuZGlmCisKIC8qIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IHN0b3JlIHB5dGhvbiBvYmplY3RzIGluIHVkYXRhLCBiZWNhdXNlCiAgKiBrZXZlbnRzIGluIHRoZSBrZXJuZWwgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCB3YXJuaW5nLCB3aGljaCB3b3VsZAogICogZm9yZXZlciBsb3NlIHRoZSByZWZjb3VudCBvbiB0aGUgb2JqZWN0IHN0b3JlZCB3aXRoIGl0LgpAQCAtMTE5MiwxMiArMTIxNiwxMiBAQAogCiAjZGVmaW5lIEtRX09GRih4KSBvZmZzZXRvZihrcXVldWVfZXZlbnRfT2JqZWN0LCB4KQogc3RhdGljIHN0cnVjdCBQeU1lbWJlckRlZiBrcXVldWVfZXZlbnRfbWVtYmVyc1tdID0gewotICAgIHsiaWRlbnQiLCAgICAgICAgICAgVF9VSU5ULCAgICAgICAgIEtRX09GRihlLmlkZW50KX0sCisgICAgeyJpZGVudCIsICAgICAgICAgICBUX1VJTlRQVFJULCAgICAgS1FfT0ZGKGUuaWRlbnQpfSwKICAgICB7ImZpbHRlciIsICAgICAgICAgIFRfU0hPUlQsICAgICAgICBLUV9PRkYoZS5maWx0ZXIpfSwKICAgICB7ImZsYWdzIiwgICAgICAgICAgIFRfVVNIT1JULCAgICAgICBLUV9PRkYoZS5mbGFncyl9LAogICAgIHsiZmZsYWdzIiwgICAgICAgICAgVF9VSU5ULCAgICAgICAgIEtRX09GRihlLmZmbGFncyl9LAotICAgIHsiZGF0YSIsICAgICAgICAgICAgVF9JTlQsICAgICAgICAgIEtRX09GRihlLmRhdGEpfSwKLSAgICB7InVkYXRhIiwgICAgICAgICAgIFRfSU5ULCAgICAgICAgICBLUV9PRkYoZS51ZGF0YSl9LAorICAgIHsiZGF0YSIsICAgICAgICAgICAgVF9JTlRQVFJULCAgICAgIEtRX09GRihlLmRhdGEpfSwKKyAgICB7InVkYXRhIiwgICAgICAgICAgIFRfVUlOVFBUUlQsICAgICBLUV9PRkYoZS51ZGF0YSl9LAogICAgIHtOVUxMfSAvKiBTZW50aW5lbCAqLwogfTsKICN1bmRlZiBLUV9PRkYKQEAgLTEyMDksMTAgKzEyMzMsMTAgQEAKICAgICBjaGFyIGJ1ZlsxMDI0XTsKICAgICBQeU9TX3NucHJpbnRmKAogICAgICAgICBidWYsIHNpemVvZihidWYpLAotICAgICAgICAiPHNlbGVjdC5rZXZlbnQgaWRlbnQ9JWx1IGZpbHRlcj0lZCBmbGFncz0weCV4IGZmbGFncz0weCV4ICIKLSAgICAgICAgImRhdGE9MHglbHggdWRhdGE9JXA+IiwKLSAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHMtPmUuaWRlbnQpLCBzLT5lLmZpbHRlciwgcy0+ZS5mbGFncywKLSAgICAgICAgcy0+ZS5mZmxhZ3MsIChsb25nKShzLT5lLmRhdGEpLCBzLT5lLnVkYXRhKTsKKyAgICAgICAgIjxzZWxlY3Qua2V2ZW50IGlkZW50PSV6dSBmaWx0ZXI9JWQgZmxhZ3M9MHgleCBmZmxhZ3M9MHgleCAiCisgICAgICAgICJkYXRhPTB4JXpkIHVkYXRhPSVwPiIsCisgICAgICAgIChzaXplX3QpKHMtPmUuaWRlbnQpLCBzLT5lLmZpbHRlciwgcy0+ZS5mbGFncywKKyAgICAgICAgcy0+ZS5mZmxhZ3MsIChQeV9zc2l6ZV90KShzLT5lLmRhdGEpLCBzLT5lLnVkYXRhKTsKICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhidWYpOwogfQogCkBAIC0xMjIyLDE3ICsxMjQ2LDIzIEBACiAgICAgUHlPYmplY3QgKnBmZDsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImlkZW50IiwgImZpbHRlciIsICJmbGFncyIsICJmZmxhZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YSIsICJ1ZGF0YSIsIE5VTEx9OworICAgIHN0YXRpYyBjaGFyICpmbXQgPSAiT3xoaGkiIElOVFBUUlRfRk1UX1VOSVQgVUlOVFBUUlRfRk1UX1VOSVQgIjprZXZlbnQiOwogCiAgICAgRVZfU0VUKCYoc2VsZi0+ZSksIDAsIEVWRklMVF9SRUFELCBFVl9BREQsIDAsIDAsIDApOyAvKiBkZWZhdWx0cyAqLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98aGhpaWk6a2V2ZW50Iiwga3dsaXN0LAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsIGZtdCwga3dsaXN0LAogICAgICAgICAmcGZkLCAmKHNlbGYtPmUuZmlsdGVyKSwgJihzZWxmLT5lLmZsYWdzKSwKICAgICAgICAgJihzZWxmLT5lLmZmbGFncyksICYoc2VsZi0+ZS5kYXRhKSwgJihzZWxmLT5lLnVkYXRhKSkpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHNlbGYtPmUuaWRlbnQgPSBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yKHBmZCk7Ci0gICAgaWYgKHNlbGYtPmUuaWRlbnQgPT0gLTEpIHsKKyAgICBpZiAoUHlMb25nX0NoZWNrKHBmZCkpIHsKKyAgICAgICAgc2VsZi0+ZS5pZGVudCA9IFB5TG9uZ19Bc1VpbnRwdHJfdChwZmQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc2VsZi0+ZS5pZGVudCA9IFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IocGZkKTsKKyAgICB9CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTEyNDIsNyArMTI3Miw3IEBACiBrcXVldWVfZXZlbnRfcmljaGNvbXBhcmUoa3F1ZXVlX2V2ZW50X09iamVjdCAqcywga3F1ZXVlX2V2ZW50X09iamVjdCAqbywKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3ApCiB7Ci0gICAgaW50IHJlc3VsdCA9IDA7CisgICAgUHlfaW50cHRyX3QgcmVzdWx0ID0gMDsKIAogICAgIGlmICgha3F1ZXVlX2V2ZW50X0NoZWNrKG8pKSB7CiAgICAgICAgIGlmIChvcCA9PSBQeV9FUSB8fCBvcCA9PSBQeV9ORSkgewpAQCAtMTI4NSw3ICsxMzE1LDcgQEAKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA+IDApOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhyZXN1bHQpOworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpcmVzdWx0KTsKIH0KIAogc3RhdGljIFB5VHlwZU9iamVjdCBrcXVldWVfZXZlbnRfVHlwZSA9IHsKQEAgLTE3MzcsNiArMTc2NywxNCBAQAogICAgIFB5X0lOQ1JFRihTZWxlY3RFcnJvcik7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFNlbGVjdEVycm9yKTsKIAorI2lmZGVmIFBJUEVfQlVGCisjaWZkZWYgSEFWRV9CUk9LRU5fUElQRV9CVUYKKyN1bmRlZiBQSVBFX0JVRgorI2RlZmluZSBQSVBFX0JVRiA1MTIKKyNlbmRpZgorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSVBFX0JVRiIsIFBJUEVfQlVGKTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChIQVZFX1BPTEwpCiAjaWZkZWYgX19BUFBMRV9fCiAgICAgaWYgKHNlbGVjdF9oYXZlX2Jyb2tlbl9wb2xsKCkpIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMgYi9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCmluZGV4IDAyOWYyOTguLjJjZThkOTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYwpAQCAtNDgwLDE2ICs0ODAsMTUgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBTSEEyNTZfdXBkYXRlKFNIQW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgdW5zaWduZWQgY2hhciAqY3A7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9idWZmZXIgYnVmOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzp1cGRhdGUiLCAmY3AsICZsZW4pKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6dXBkYXRlIiwgJmJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2hhX3VwZGF0ZShzZWxmLCBjcCwgbGVuKTsKKyAgICBzaGFfdXBkYXRlKHNlbGYsIGJ1Zi5idWYsIGJ1Zi5sZW4pOwogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBTSEFfbWV0aG9kc1tdID0gewpAQCAtNjE0LDI1ICs2MTMsMjkgQEAKIHsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InN0cmluZyIsIE5VTEx9OwogICAgIFNIQW9iamVjdCAqbmV3OwotICAgIHVuc2lnbmVkIGNoYXIgKmNwID0gTlVMTDsKLSAgICBpbnQgbGVuOworICAgIFB5X2J1ZmZlciBidWYgPSB7IDAgfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxzIzpuZXciLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuKSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxzKjpuZXciLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKChuZXcgPSBuZXdTSEEyNTZvYmplY3QoKSkgPT0gTlVMTCkKKyAgICBpZiAoKG5ldyA9IG5ld1NIQTI1Nm9iamVjdCgpKSA9PSBOVUxMKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHNoYV9pbml0KG5ldyk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9ERUNSRUYobmV3KTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChjcCkKLSAgICAgICAgc2hhX3VwZGF0ZShuZXcsIGNwLCBsZW4pOworICAgIGlmIChidWYubGVuID4gMCkgeworICAgICAgICBzaGFfdXBkYXRlKG5ldywgYnVmLmJ1ZiwgYnVmLmxlbik7CisgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3OwogfQpAQCAtNjQ1LDI1ICs2NDgsMjkgQEAKIHsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InN0cmluZyIsIE5VTEx9OwogICAgIFNIQW9iamVjdCAqbmV3OwotICAgIHVuc2lnbmVkIGNoYXIgKmNwID0gTlVMTDsKLSAgICBpbnQgbGVuOworICAgIFB5X2J1ZmZlciBidWYgPSB7IDAgfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxzIzpuZXciLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuKSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxzKjpuZXciLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKChuZXcgPSBuZXdTSEEyMjRvYmplY3QoKSkgPT0gTlVMTCkKKyAgICBpZiAoKG5ldyA9IG5ld1NIQTIyNG9iamVjdCgpKSA9PSBOVUxMKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHNoYTIyNF9pbml0KG5ldyk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9ERUNSRUYobmV3KTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChjcCkKLSAgICAgICAgc2hhX3VwZGF0ZShuZXcsIGNwLCBsZW4pOworICAgIGlmIChidWYubGVuID4gMCkgeworICAgICAgICBzaGFfdXBkYXRlKG5ldywgYnVmLmJ1ZiwgYnVmLmxlbik7CisgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3OwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYyBiL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKaW5kZXggNDI1NDhiYi4uZDdiMzY5OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCkBAIC01NDYsMTYgKzU0NiwxNSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFNIQTUxMl91cGRhdGUoU0hBb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICB1bnNpZ25lZCBjaGFyICpjcDsKLSAgICBpbnQgbGVuOworICAgIFB5X2J1ZmZlciBidWY7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOnVwZGF0ZSIsICZjcCwgJmxlbikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjp1cGRhdGUiLCAmYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzaGE1MTJfdXBkYXRlKHNlbGYsIGNwLCBsZW4pOworICAgIHNoYTUxMl91cGRhdGUoc2VsZiwgYnVmLmJ1ZiwgYnVmLmxlbik7CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIFNIQV9tZXRob2RzW10gPSB7CkBAIC02ODAsMjUgKzY3OSwyOSBAQAogewogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic3RyaW5nIiwgTlVMTH07CiAgICAgU0hBb2JqZWN0ICpuZXc7Ci0gICAgdW5zaWduZWQgY2hhciAqY3AgPSBOVUxMOwotICAgIGludCBsZW47CisgICAgUHlfYnVmZmVyIGJ1ZiA9IHsgMCB9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAifHMjOm5ldyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4pKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAifHMqOm5ldyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoKG5ldyA9IG5ld1NIQTUxMm9iamVjdCgpKSA9PSBOVUxMKQorICAgIGlmICgobmV3ID0gbmV3U0hBNTEyb2JqZWN0KCkpID09IE5VTEwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgc2hhNTEyX2luaXQobmV3KTsKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihuZXcpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGNwKQotICAgICAgICBzaGE1MTJfdXBkYXRlKG5ldywgY3AsIGxlbik7CisgICAgaWYgKGJ1Zi5sZW4gPiAwKSB7CisgICAgICAgIHNoYTUxMl91cGRhdGUobmV3LCBidWYuYnVmLCBidWYubGVuKTsKKyAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKiluZXc7CiB9CkBAIC03MTEsMjUgKzcxNCwyOSBAQAogewogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic3RyaW5nIiwgTlVMTH07CiAgICAgU0hBb2JqZWN0ICpuZXc7Ci0gICAgdW5zaWduZWQgY2hhciAqY3AgPSBOVUxMOwotICAgIGludCBsZW47CisgICAgUHlfYnVmZmVyIGJ1ZiA9IHsgMCB9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAifHMjOm5ldyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4pKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAifHMqOm5ldyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoKG5ldyA9IG5ld1NIQTM4NG9iamVjdCgpKSA9PSBOVUxMKQorICAgIGlmICgobmV3ID0gbmV3U0hBMzg0b2JqZWN0KCkpID09IE5VTEwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgc2hhMzg0X2luaXQobmV3KTsKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihuZXcpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGNwKQotICAgICAgICBzaGE1MTJfdXBkYXRlKG5ldywgY3AsIGxlbik7CisgICAgaWYgKGJ1Zi5sZW4gPiAwKSB7CisgICAgICAgIHNoYTUxMl91cGRhdGUobmV3LCBidWYuYnVmLCBidWYubGVuKTsKKyAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKiluZXc7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYW1vZHVsZS5jIGIvTW9kdWxlcy9zaGFtb2R1bGUuYwppbmRleCBlZmQ3MjA0Li5hODZlNzIyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYW1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhbW9kdWxlLmMKQEAgLTIzNiw5ICsyMzYsOSBAQAogLyogdXBkYXRlIHRoZSBTSEEgZGlnZXN0ICovCiAKIHN0YXRpYyB2b2lkCi1zaGFfdXBkYXRlKFNIQW9iamVjdCAqc2hhX2luZm8sIFNIQV9CWVRFICpidWZmZXIsIGludCBjb3VudCkKK3NoYV91cGRhdGUoU0hBb2JqZWN0ICpzaGFfaW5mbywgU0hBX0JZVEUgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIGludCBpOworICAgIHVuc2lnbmVkIGludCBpOwogICAgIFNIQV9JTlQzMiBjbG87CiAKICAgICBjbG8gPSBzaGFfaW5mby0+Y291bnRfbG8gKyAoKFNIQV9JTlQzMikgY291bnQgPDwgMyk7CkBAIC00MjgsMTYgKzQyOCwxNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFNIQV91cGRhdGUoU0hBb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICB1bnNpZ25lZCBjaGFyICpjcDsKLSAgICBpbnQgbGVuOworICAgIFB5X2J1ZmZlciB2aWV3OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzp1cGRhdGUiLCAmY3AsICZsZW4pKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6dXBkYXRlIiwgJnZpZXcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNoYV91cGRhdGUoc2VsZiwgY3AsIGxlbik7CisgICAgc2hhX3VwZGF0ZShzZWxmLCAodW5zaWduZWQgY2hhciopdmlldy5idWYsCisgICAgICAgICAgICAgICBQeV9TQUZFX0RPV05DQVNUKHZpZXcubGVuLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBpbnQpKTsKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIFNIQV9tZXRob2RzW10gPSB7CkBAIC01MzUsMjUgKzUzNSwzMCBAQAogewogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic3RyaW5nIiwgTlVMTH07CiAgICAgU0hBb2JqZWN0ICpuZXc7Ci0gICAgdW5zaWduZWQgY2hhciAqY3AgPSBOVUxMOwotICAgIGludCBsZW47CisgICAgUHlfYnVmZmVyIHZpZXcgPSB7IDAgfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxzIzpuZXciLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuKSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxzKjpuZXciLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICgobmV3ID0gbmV3U0hBb2JqZWN0KCkpID09IE5VTEwpCisgICAgaWYgKChuZXcgPSBuZXdTSEFvYmplY3QoKSkgPT0gTlVMTCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgc2hhX2luaXQobmV3KTsKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihuZXcpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChjcCkKLSAgICAgICAgc2hhX3VwZGF0ZShuZXcsIGNwLCBsZW4pOworICAgIGlmICh2aWV3LmxlbiA+IDApIHsKKyAgICAgICAgc2hhX3VwZGF0ZShuZXcsICh1bnNpZ25lZCBjaGFyKil2aWV3LmJ1ZiwKKyAgICAgICAgICAgICAgICAgICBQeV9TQUZFX0RPV05DQVNUKHZpZXcubGVuLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBpbnQpKTsKKyAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3OwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaWduYWxtb2R1bGUuYyBiL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKaW5kZXggOGIxMzc0Yi4uMjQ0MTA5OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaWduYWxtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCkBAIC03LDEyICs3LDE4IEBACiAjaW5jbHVkZSAiaW50cmNoZWNrLmgiCiAKICNpZmRlZiBNU19XSU5ET1dTCisjaW5jbHVkZSA8V2luZG93cy5oPgorI2lmZGVmIEhBVkVfUFJPQ0VTU19ICiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2VuZGlmCisjZW5kaWYKIAorI2lmZGVmIEhBVkVfU0lHTkFMX0gKICNpbmNsdWRlIDxzaWduYWwuaD4KLQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgogI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5kaWYKQEAgLTE2MywxNiArMTY5LDIwIEBACiBzdGF0aWMgdm9pZAogc2lnbmFsX2hhbmRsZXIoaW50IHNpZ19udW0pCiB7Ci0jaWZkZWYgV0lUSF9USFJFQUQKLSNpZmRlZiBXSVRIX1BUSAorICAgIGludCBzYXZlX2Vycm5vID0gZXJybm87CisKKyNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiBkZWZpbmVkKFdJVEhfUFRIKQogICAgIGlmIChQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgIT0gbWFpbl90aHJlYWQpIHsKICAgICAgICAgcHRoX3JhaXNlKCoocHRoX3QgKikgbWFpbl90aHJlYWQsIHNpZ19udW0pOwotICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGVsc2UKICNlbmRpZgorICAgIHsKKyNpZmRlZiBXSVRIX1RIUkVBRAogICAgIC8qIFNlZSBOT1RFUyBzZWN0aW9uIGFib3ZlICovCi0gICAgaWYgKGdldHBpZCgpID09IG1haW5fcGlkKSB7CisgICAgaWYgKGdldHBpZCgpID09IG1haW5fcGlkKQogI2VuZGlmCisgICAgewogICAgICAgICBIYW5kbGVyc1tzaWdfbnVtXS50cmlwcGVkID0gMTsKICAgICAgICAgLyogU2V0IGlzX3RyaXBwZWQgYWZ0ZXIgc2V0dGluZyAudHJpcHBlZCwgYXMgaXQgZ2V0cwogICAgICAgICAgICBjbGVhcmVkIGluIFB5RXJyX0NoZWNrU2lnbmFscygpIGJlZm9yZSAudHJpcHBlZC4gKi8KQEAgLTE4MCwyNCArMTkwLDI2IEBACiAgICAgICAgIFB5X0FkZFBlbmRpbmdDYWxsKGNoZWNrc2lnbmFsc193aXRoYXJnLCBOVUxMKTsKICAgICAgICAgaWYgKHdha2V1cF9mZCAhPSAtMSkKICAgICAgICAgICAgIHdyaXRlKHdha2V1cF9mZCwgIlwwIiwgMSk7Ci0jaWZkZWYgV0lUSF9USFJFQUQKICAgICB9Ci0jZW5kaWYKLSNpZmRlZiBTSUdDSExECi0gICAgaWYgKHNpZ19udW0gPT0gU0lHQ0hMRCkgewotICAgICAgICAvKiBUbyBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24sIHRoaXMgc2lnbmFsIHJlbWFpbnMKLSAgICAgICAgICAgcmVzZXQgdW50aWwgZXhwbGljaXQgcmUtaW5zdGF0ZWQuCi0gICAgICAgICAgIERvbid0IGNsZWFyIHRoZSAnZnVuYycgZmllbGQgYXMgaXQgaXMgb3VyIHBvaW50ZXIKLSAgICAgICAgICAgdG8gdGhlIFB5dGhvbiBoYW5kbGVyLi4uICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKKwogI2lmbmRlZiBIQVZFX1NJR0FDVElPTgorI2lmZGVmIFNJR0NITEQKKyAgICAvKiBUbyBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24sIHRoaXMgc2lnbmFsIHJlbWFpbnMKKyAgICAgICByZXNldCB1bnRpbCBleHBsaWNpdCByZS1pbnN0YXRlZC4KKyAgICAgICBEb24ndCBjbGVhciB0aGUgJ2Z1bmMnIGZpZWxkIGFzIGl0IGlzIG91ciBwb2ludGVyCisgICAgICAgdG8gdGhlIFB5dGhvbiBoYW5kbGVyLi4uICovCisgICAgaWYgKHNpZ19udW0gIT0gU0lHQ0hMRCkKKyNlbmRpZgogICAgIC8qIElmIHRoZSBoYW5kbGVyIHdhcyBub3Qgc2V0IHVwIHdpdGggc2lnYWN0aW9uLCByZWluc3RhbGwgaXQuICBTZWUKICAgICAgKiBQeXRob24vcHl0aG9ucnVuLmMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBQeU9TX3NldHNpZyB3aGljaAogICAgICAqIG1ha2VzIHRoaXMgdHJ1ZS4gIFNlZSBhbHNvIGlzc3VlODM1NC4gKi8KICAgICBQeU9TX3NldHNpZyhzaWdfbnVtLCBzaWduYWxfaGFuZGxlcik7CiAjZW5kaWYKKyAgICB9CisKKyAgICAvKiBJc3N1ZSAjMTAzMTE6IGFzeW5jaHJvbm91c2x5IGV4ZWN1dGluZyBzaWduYWwgaGFuZGxlcnMgc2hvdWxkIG5vdAorICAgICAgIG11dGF0ZSBlcnJubyB1bmRlciB0aGUgZmVldCBvZiB1bnN1c3BlY3RpbmcgQyBjb2RlLiAqLworICAgIGVycm5vID0gc2F2ZV9lcnJubzsKIH0KIAogCkBAIC0yNTEsNiArMjYzLDI1IEBACiAgICAgdm9pZCAoKmZ1bmMpKGludCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTzpzaWduYWwiLCAmc2lnX251bSwgJm9iaikpCiAgICAgICAgIHJldHVybiBOVUxMOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAvKiBWYWxpZGF0ZSB0aGF0IHNpZ19udW0gaXMgb25lIG9mIHRoZSBhbGxvd2FibGUgc2lnbmFscyAqLworICAgIHN3aXRjaCAoc2lnX251bSkgeworICAgICAgICBjYXNlIFNJR0FCUlQ6IGJyZWFrOworI2lmZGVmIFNJR0JSRUFLCisgICAgICAgIC8qIElzc3VlICMxMDAwMzogU0lHQlJFQUsgaXMgbm90IGRvY3VtZW50ZWQgYXMgcGVybWl0dGVkLCBidXQgd29ya3MKKyAgICAgICAgICAgYW5kIGNvcnJlc3BvbmRzIHRvIENUUkxfQlJFQUtfRVZFTlQuICovCisgICAgICAgIGNhc2UgU0lHQlJFQUs6IGJyZWFrOworI2VuZGlmCisgICAgICAgIGNhc2UgU0lHRlBFOiBicmVhazsKKyAgICAgICAgY2FzZSBTSUdJTEw6IGJyZWFrOworICAgICAgICBjYXNlIFNJR0lOVDogYnJlYWs7CisgICAgICAgIGNhc2UgU0lHU0VHVjogYnJlYWs7CisgICAgICAgIGNhc2UgU0lHVEVSTTogYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImludmFsaWQgc2lnbmFsIHZhbHVlIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgIT0gbWFpbl90aHJlYWQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC03OTMsNiArODI0LDE4IEBACiAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkl0aW1lckVycm9yIiwgSXRpbWVyRXJyb3IpOwogI2VuZGlmCiAKKyNpZmRlZiBDVFJMX0NfRVZFTlQKKyAgICB4ID0gUHlJbnRfRnJvbUxvbmcoQ1RSTF9DX0VWRU5UKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQ1RSTF9DX0VWRU5UIiwgeCk7CisgICAgUHlfREVDUkVGKHgpOworI2VuZGlmCisKKyNpZmRlZiBDVFJMX0JSRUFLX0VWRU5UCisgICAgeCA9IFB5SW50X0Zyb21Mb25nKENUUkxfQlJFQUtfRVZFTlQpOworICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJDVFJMX0JSRUFLX0VWRU5UIiwgeCk7CisgICAgUHlfREVDUkVGKHgpOworI2VuZGlmCisKICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtODQ1LDcgKzg4OCw3IEBACiAjZW5kaWYKIAogICAgIC8qCi0gICAgICogVGhlIGlzX3N0cmlwcGVkIHZhcmlhYmxlIGlzIG1lYW50IHRvIHNwZWVkIHVwIHRoZSBjYWxscyB0bworICAgICAqIFRoZSBpc190cmlwcGVkIHZhcmlhYmxlIGlzIG1lYW50IHRvIHNwZWVkIHVwIHRoZSBjYWxscyB0bwogICAgICAqIFB5RXJyX0NoZWNrU2lnbmFscyAoYm90aCBkaXJlY3RseSBvciB2aWEgcGVuZGluZyBjYWxscykgd2hlbiBubwogICAgICAqIHNpZ25hbCBoYXMgYXJyaXZlZC4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gMSB3aGVuIGEgc2lnbmFsIGFycml2ZXMKICAgICAgKiBhbmQgaXQgaXMgc2V0IHRvIDAgaGVyZSwgd2hlbiB3ZSBrbm93IHNvbWUgc2lnbmFscyBhcnJpdmVkLiBUaGlzIHdheQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKaW5kZXggYTI4MTE2Yy4uZTRmNmU2MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCkBAIC0zNzksNyArMzc5LDcgQEAKICNkZWZpbmUgU09DS0VUQ0xPU0UgY2xvc2UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX0JMVUVUT09USF9IKSB8fCBkZWZpbmVkKEhBVkVfQkxVRVRPT1RIX0JMVUVUT09USF9IKSAmJiAgIWRlZmluZWQoX19OZXRCU0RfXykKKyNpZiAoZGVmaW5lZChIQVZFX0JMVUVUT09USF9IKSB8fCBkZWZpbmVkKEhBVkVfQkxVRVRPT1RIX0JMVUVUT09USF9IKSkgJiYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKICNkZWZpbmUgVVNFX0JMVUVUT09USCAxCiAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKICNkZWZpbmUgQlRQUk9UT19MMkNBUCBCTFVFVE9PVEhfUFJPVE9fTDJDQVAKQEAgLTM5MywxMSArMzkzLDEzIEBACiAjZGVmaW5lIF9CVF9MMl9NRU1CKHNhLCBtZW1iKSAoKHNhKS0+bDJjYXBfIyNtZW1iKQogI2RlZmluZSBfQlRfUkNfTUVNQihzYSwgbWVtYikgKChzYSktPnJmY29tbV8jI21lbWIpCiAjZGVmaW5lIF9CVF9IQ0lfTUVNQihzYSwgbWVtYikgKChzYSktPmhjaV8jI21lbWIpCi0jZWxpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisjZWxpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykKICNkZWZpbmUgc29ja2FkZHJfbDIgc29ja2FkZHJfYnQKICNkZWZpbmUgc29ja2FkZHJfcmMgc29ja2FkZHJfYnQKICNkZWZpbmUgc29ja2FkZHJfaGNpIHNvY2thZGRyX2J0CiAjZGVmaW5lIHNvY2thZGRyX3NjbyBzb2NrYWRkcl9idAorI2RlZmluZSBTT0xfSENJIEJUUFJPVE9fSENJCisjZGVmaW5lIEhDSV9EQVRBX0RJUiBTT19IQ0lfRElSRUNUSU9OCiAjZGVmaW5lIF9CVF9MMl9NRU1CKHNhLCBtZW1iKSAoKHNhKS0+YnRfIyNtZW1iKQogI2RlZmluZSBfQlRfUkNfTUVNQihzYSwgbWVtYikgKChzYSktPmJ0XyMjbWVtYikKICNkZWZpbmUgX0JUX0hDSV9NRU1CKHNhLCBtZW1iKSAoKHNhKS0+YnRfIyNtZW1iKQpAQCAtMTA3Niw5ICsxMDc4LDEzIEBACiAgICAgICAgIGNhc2UgQlRQUk9UT19IQ0k6CiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9oY2kgKmEgPSAoc3RydWN0IHNvY2thZGRyX2hjaSAqKSBhZGRyOworI2lmIGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQorICAgICAgICAgICAgcmV0dXJuIG1ha2ViZGFkZHIoJl9CVF9IQ0lfTUVNQihhLCBiZGFkZHIpKTsKKyNlbHNlCiAgICAgICAgICAgICBQeU9iamVjdCAqcmV0ID0gTlVMTDsKICAgICAgICAgICAgIHJldCA9IFB5X0J1aWxkVmFsdWUoImkiLCBfQlRfSENJX01FTUIoYSwgZGV2KSk7CiAgICAgICAgICAgICByZXR1cm4gcmV0OworI2VuZGlmCiAgICAgICAgIH0KIAogI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQpAQCAtMTA5Niw3ICsxMTAyLDcgQEAKICAgICAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX05FVFBBQ0tFVF9QQUNLRVRfSAorI2lmIGRlZmluZWQoSEFWRV9ORVRQQUNLRVRfUEFDS0VUX0gpICYmIGRlZmluZWQoU0lPQ0dJRk5BTUUpCiAgICAgY2FzZSBBRl9QQUNLRVQ6CiAgICAgewogICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmEgPSAoc3RydWN0IHNvY2thZGRyX2xsICopYWRkcjsKQEAgLTEyNjMsNiArMTI2OSwxMiBAQAogICAgICAgICBQeU1lbV9GcmVlKGhvc3QpOwogICAgICAgICBpZiAocmVzdWx0IDwgMCkKICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAocG9ydCA8IDAgfHwgcG9ydCA+IDB4ZmZmZikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgIFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgImdldHNvY2thZGRyYXJnOiBwb3J0IG11c3QgYmUgMC02NTUzNS4iKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIGFkZHItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogICAgICAgICBhZGRyLT5zaW5fcG9ydCA9IGh0b25zKChzaG9ydClwb3J0KTsKICAgICAgICAgKmxlbl9yZXQgPSBzaXplb2YgKmFkZHI7CkBAIC0xMjk1LDYgKzEzMDcsMTIgQEAKICAgICAgICAgUHlNZW1fRnJlZShob3N0KTsKICAgICAgICAgaWYgKHJlc3VsdCA8IDApCiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHBvcnQgPCAwIHx8IHBvcnQgPiAweGZmZmYpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICBQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICJnZXRzb2NrYWRkcmFyZzogcG9ydCBtdXN0IGJlIDAtNjU1MzUuIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBhZGRyLT5zaW42X2ZhbWlseSA9IHMtPnNvY2tfZmFtaWx5OwogICAgICAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucygoc2hvcnQpcG9ydCk7CiAgICAgICAgIGFkZHItPnNpbjZfZmxvd2luZm8gPSBmbG93aW5mbzsKQEAgLTEzNTAsMTIgKzEzNjgsMjUgQEAKICAgICAgICAgY2FzZSBCVFBST1RPX0hDSToKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2hjaSAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaGNpICopYWRkcl9yZXQ7CisjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisJCQljaGFyICpzdHJhZGRyID0gUHlCeXRlc19BU19TVFJJTkcoYXJncyk7CisKKwkJCV9CVF9IQ0lfTUVNQihhZGRyLCBmYW1pbHkpID0gQUZfQkxVRVRPT1RIOworICAgICAgICAgICAgaWYgKHN0cmFkZHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzb2NrZXRfZXJyb3IsICJnZXRzb2NrYWRkcmFyZzogIgorICAgICAgICAgICAgICAgICAgICAid3JvbmcgZm9ybWF0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2V0YmRhZGRyKHN0cmFkZHIsICZfQlRfSENJX01FTUIoYWRkciwgYmRhZGRyKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworI2Vsc2UKICAgICAgICAgICAgIF9CVF9IQ0lfTUVNQihhZGRyLCBmYW1pbHkpID0gQUZfQkxVRVRPT1RIOwogICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpIiwgJl9CVF9IQ0lfTUVNQihhZGRyLCBkZXYpKSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzb2NrZXRfZXJyb3IsICJnZXRzb2NrYWRkcmFyZzogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgZm9ybWF0Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgICpsZW5fcmV0ID0gc2l6ZW9mICphZGRyOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KQEAgLTEzODcsNyArMTQxOCw3IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX05FVFBBQ0tFVF9QQUNLRVRfSAorI2lmIGRlZmluZWQoSEFWRV9ORVRQQUNLRVRfUEFDS0VUX0gpICYmIGRlZmluZWQoU0lPQ0dJRklOREVYKQogICAgIGNhc2UgQUZfUEFDS0VUOgogICAgIHsKICAgICAgICAgc3RydWN0IHNvY2thZGRyX2xsKiBhZGRyOwpAQCAtMTQyMiw2ICsxNDUzLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIYXJkd2FyZSBhZGRyZXNzIG11c3QgYmUgOCBieXRlcyBvciBsZXNzIik7CiAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3RvTnVtYmVyIDwgMCB8fCBwcm90b051bWJlciA+IDB4ZmZmZikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgIFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgImdldHNvY2thZGRyYXJnOiBwcm90b051bWJlciBtdXN0IGJlIDAtNjU1MzUuIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9sbCopYWRkcl9yZXQ7CiAgICAgICAgIGFkZHItPnNsbF9mYW1pbHkgPSBBRl9QQUNLRVQ7CiAgICAgICAgIGFkZHItPnNsbF9wcm90b2NvbCA9IGh0b25zKChzaG9ydClwcm90b051bWJlcik7CkBAIC0yNDMyLDE5ICsyNDY5LDIwIEBACiAKICAgICBpbnQgcmVjdmxlbiA9IDAsIGZsYWdzID0gMDsKICAgICBzc2l6ZV90IHJlYWRsZW47Ci0gICAgY2hhciAqYnVmOwotICAgIGludCBidWZsZW47CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKIAogICAgIC8qIEdldCB0aGUgYnVmZmVyJ3MgbWVtb3J5ICovCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIncjfGlpOnJlY3ZfaW50byIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmLCAmYnVmbGVuLCAmcmVjdmxlbiwgJmZsYWdzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAidyp8aWk6cmVjdl9pbnRvIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYsICZyZWN2bGVuLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc3NlcnQoYnVmICE9IDAgJiYgYnVmbGVuID4gMCk7CisgICAgYnVmbGVuID0gYnVmLmxlbjsKKyAgICBhc3NlcnQoYnVmLmJ1ZiAhPSAwICYmIGJ1ZmxlbiA+IDApOwogCiAgICAgaWYgKHJlY3ZsZW4gPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5lZ2F0aXZlIGJ1ZmZlcnNpemUgaW4gcmVjdl9pbnRvIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAocmVjdmxlbiA9PSAwKSB7CiAgICAgICAgIC8qIElmIG5ieXRlcyB3YXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBidWZmZXIncyBsZW5ndGggKi8KQEAgLTI0NTUsMTkgKzI0OTMsMjQgQEAKICAgICBpZiAoYnVmbGVuIDwgcmVjdmxlbikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXIgdG9vIHNtYWxsIGZvciByZXF1ZXN0ZWQgYnl0ZXMiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgLyogQ2FsbCB0aGUgZ3V0cyAqLwotICAgIHJlYWRsZW4gPSBzb2NrX3JlY3ZfZ3V0cyhzLCBidWYsIHJlY3ZsZW4sIGZsYWdzKTsKKyAgICByZWFkbGVuID0gc29ja19yZWN2X2d1dHMocywgYnVmLmJ1ZiwgcmVjdmxlbiwgZmxhZ3MpOwogICAgIGlmIChyZWFkbGVuIDwgMCkgewogICAgICAgICAvKiBSZXR1cm4gYW4gZXJyb3IuICovCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gIE5vdGUgdGhhdCB3ZSBkbyBub3QgZG8gYW55dGhpbmcKICAgICAgICBzcGVjaWFsIGhlcmUgaW4gdGhlIGNhc2UgdGhhdCByZWFkbGVuIDwgcmVjdmxlbi4gKi8KICAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3QocmVhZGxlbik7CisKK2Vycm9yOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5RG9jX1NUUlZBUihyZWN2X2ludG9fZG9jLApAQCAtMjYwNiwzNyArMjY0OSw0MyBAQAogCiAgICAgaW50IHJlY3ZsZW4gPSAwLCBmbGFncyA9IDA7CiAgICAgc3NpemVfdCByZWFkbGVuOwotICAgIGNoYXIgKmJ1ZjsKKyAgICBQeV9idWZmZXIgYnVmOwogICAgIGludCBidWZsZW47CiAKICAgICBQeU9iamVjdCAqYWRkciA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAidyN8aWk6cmVjdmZyb21faW50byIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmYnVmLCAmYnVmbGVuLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ3KnxpaTpyZWN2ZnJvbV9pbnRvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlY3ZsZW4sICZmbGFncykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGFzc2VydChidWYgIT0gMCAmJiBidWZsZW4gPiAwKTsKKyAgICBidWZsZW4gPSBidWYubGVuOworICAgIGFzc2VydChidWYuYnVmICE9IDAgJiYgYnVmbGVuID4gMCk7CiAKICAgICBpZiAocmVjdmxlbiA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibmVnYXRpdmUgYnVmZmVyc2l6ZSBpbiByZWN2ZnJvbV9pbnRvIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAocmVjdmxlbiA9PSAwKSB7CiAgICAgICAgIC8qIElmIG5ieXRlcyB3YXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBidWZmZXIncyBsZW5ndGggKi8KICAgICAgICAgcmVjdmxlbiA9IGJ1ZmxlbjsKICAgICB9CiAKLSAgICByZWFkbGVuID0gc29ja19yZWN2ZnJvbV9ndXRzKHMsIGJ1ZiwgcmVjdmxlbiwgZmxhZ3MsICZhZGRyKTsKKyAgICByZWFkbGVuID0gc29ja19yZWN2ZnJvbV9ndXRzKHMsIGJ1Zi5idWYsIHJlY3ZsZW4sIGZsYWdzLCAmYWRkcik7CiAgICAgaWYgKHJlYWRsZW4gPCAwKSB7CiAgICAgICAgIC8qIFJldHVybiBhbiBlcnJvciAqLwotICAgICAgICBQeV9YREVDUkVGKGFkZHIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgYW5kIHRoZSBhZGRyZXNzLiAgTm90ZSB0aGF0IHdlIGRvCiAgICAgICAgbm90IGRvIGFueXRoaW5nIHNwZWNpYWwgaGVyZSBpbiB0aGUgY2FzZSB0aGF0IHJlYWRsZW4gPCByZWN2bGVuLiAqLwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsTiIsIHJlYWRsZW4sIGFkZHIpOworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKGFkZHIpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5RG9jX1NUUlZBUihyZWN2ZnJvbV9pbnRvX2RvYywKQEAgLTI2OTksNyArMjc0OCw3IEBACiBzb2NrX3NlbmRhbGwoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpidWY7Ci0gICAgaW50IGxlbiwgbiA9IC0xLCBmbGFncyA9IDAsIHRpbWVvdXQ7CisgICAgaW50IGxlbiwgbiA9IC0xLCBmbGFncyA9IDAsIHRpbWVvdXQsIHNhdmVkX2Vycm5vOwogICAgIFB5X2J1ZmZlciBwYnVmOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKnxpOnNlbmRhbGwiLCAmcGJ1ZiwgJmZsYWdzKSkKQEAgLTI3MTIsNDIgKzI3NjEsNDQgQEAKICAgICAgICAgcmV0dXJuIHNlbGVjdF9lcnJvcigpOwogICAgIH0KIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdChzLCAxKTsKICAgICAgICAgbiA9IC0xOwotICAgICAgICBpZiAodGltZW91dCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIXRpbWVvdXQpIHsKICNpZmRlZiBfX1ZNUwotICAgICAgICBuID0gc2VuZHNlZ21lbnRlZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOworICAgICAgICAgICAgbiA9IHNlbmRzZWdtZW50ZWQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKICNlbHNlCi0gICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CisgICAgICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOwogI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKHRpbWVvdXQgPT0gMSkgeworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIC8qIFB5RXJyX0NoZWNrU2lnbmFscygpIG1pZ2h0IGNoYW5nZSBlcnJubyAqLworICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAvKiBXZSBtdXN0IHJ1biBvdXIgc2lnbmFsIGhhbmRsZXJzIGJlZm9yZSBsb29waW5nIGFnYWluLgorICAgICAgICAgICBzZW5kKCkgY2FuIHJldHVybiBhIHN1Y2Nlc3NmdWwgcGFydGlhbCB3cml0ZSB3aGVuIGl0IGlzCisgICAgICAgICAgIGludGVycnVwdGVkLCBzbyB3ZSBjYW4ndCByZXN0cmljdCBvdXJzZWx2ZXMgdG8gRUlOVFIuICovCisgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgeworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBpZiAobiA8IDApIHsKLSNpZmRlZiBFSU5UUgotICAgICAgICAgICAgLyogV2UgbXVzdCBoYW5kbGUgRUlOVFIgaGVyZSBhcyB0aGVyZSBpcyBubyB3YXkgZm9yCi0gICAgICAgICAgICAgKiB0aGUgY2FsbGVyIHRvIGtub3cgaG93IG11Y2ggd2FzIHNlbnQgb3RoZXJ3aXNlLiAgKi8KLSAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgewotICAgICAgICAgICAgICAgIC8qIFJ1biBzaWduYWwgaGFuZGxlcnMuICBJZiBhbiBleGNlcHRpb24gd2FzCi0gICAgICAgICAgICAgICAgICogcmFpc2VkLCBhYm9ydCBhbmQgbGVhdmUgdGhpcyBzb2NrZXQgaW4KLSAgICAgICAgICAgICAgICAgKiBhbiB1bmtub3duIHN0YXRlLiAqLwotICAgICAgICAgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAvKiBJZiBpbnRlcnJ1cHRlZCwgdHJ5IGFnYWluICovCisgICAgICAgICAgICBpZiAoc2F2ZWRfZXJybm8gPT0gRUlOVFIpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJ1ZiArPSBuOwogICAgICAgICBsZW4gLT0gbjsKICAgICB9IHdoaWxlIChsZW4gPiAwKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogCi0gICAgaWYgKHRpbWVvdXQgPT0gMSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIGlmIChuIDwgMCkKICAgICAgICAgcmV0dXJuIHMtPmVycm9yaGFuZGxlcigpOwogCkBAIC0yODUwLDI0ICsyOTAxLDQzIEBACiBzb2NrX2lvY3RsKFB5U29ja2V0U29ja09iamVjdCAqcywgUHlPYmplY3QgKmFyZykKIHsKICAgICB1bnNpZ25lZCBsb25nIGNtZCA9IFNJT19SQ1ZBTEw7Ci0gICAgdW5zaWduZWQgaW50IG9wdGlvbiA9IFJDVkFMTF9PTjsKKyAgICBQeU9iamVjdCAqYXJnTzsKICAgICBEV09SRCByZWN2OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZywgImtJOmlvY3RsIiwgJmNtZCwgJm9wdGlvbikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZywgImtPOmlvY3RsIiwgJmNtZCwgJmFyZ08pKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChXU0FJb2N0bChzLT5zb2NrX2ZkLCBjbWQsICZvcHRpb24sIHNpemVvZihvcHRpb24pLAotICAgICAgICAgICAgICAgICBOVUxMLCAwLCAmcmVjdiwgTlVMTCwgTlVMTCkgPT0gU09DS0VUX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKKyAgICBzd2l0Y2ggKGNtZCkgeworICAgIGNhc2UgU0lPX1JDVkFMTDogeworICAgICAgICB1bnNpZ25lZCBpbnQgb3B0aW9uID0gUkNWQUxMX09OOworICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJnLCAia0k6aW9jdGwiLCAmY21kLCAmb3B0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoV1NBSW9jdGwocy0+c29ja19mZCwgY21kLCAmb3B0aW9uLCBzaXplb2Yob3B0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAmcmVjdiwgTlVMTCwgTlVMTCkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICAgICAgICByZXR1cm4gc2V0X2Vycm9yKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHJlY3YpOyB9CisgICAgY2FzZSBTSU9fS0VFUEFMSVZFX1ZBTFM6IHsKKyAgICAgICAgc3RydWN0IHRjcF9rZWVwYWxpdmUga2E7CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmcsICJrKGtrayk6aW9jdGwiLCAmY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgJmthLm9ub2ZmLCAma2Eua2VlcGFsaXZldGltZSwgJmthLmtlZXBhbGl2ZWludGVydmFsKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoV1NBSW9jdGwocy0+c29ja19mZCwgY21kLCAma2EsIHNpemVvZihrYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgJnJlY3YsIE5VTEwsIE5VTEwpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhyZWN2KTsgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiaW52YWxpZCBpb2N0bCBjb21tYW5kICVkIiwgY21kKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhyZWN2KTsKIH0KIFB5RG9jX1NUUlZBUihzb2NrX2lvY3RsX2RvYywKICJpb2N0bChjbWQsIG9wdGlvbikgLT4gbG9uZ1xuXAogXG5cCi1Db250cm9sIHRoZSBzb2NrZXQgd2l0aCBXU0FJb2N0bCBzeXNjYWxsLiBDdXJyZW50bHkgb25seSBzb2NrZXQuU0lPX1JDVkFMTFxuXAotaXMgc3VwcG9ydGVkIGFzIGNvbnRyb2wuIE9wdGlvbnMgbXVzdCBiZSBvbmUgb2YgdGhlIHNvY2tldC5SQ1ZBTExfKlxuXAotY29uc3RhbnRzLiIpOworQ29udHJvbCB0aGUgc29ja2V0IHdpdGggV1NBSW9jdGwgc3lzY2FsbC4gQ3VycmVudGx5IHN1cHBvcnRlZCAnY21kJyB2YWx1ZXMgYXJlXG5cCitTSU9fUkNWQUxMOiAgJ29wdGlvbicgbXVzdCBiZSBvbmUgb2YgdGhlIHNvY2tldC5SQ1ZBTExfKiBjb25zdGFudHMuXG5cCitTSU9fS0VFUEFMSVZFX1ZBTFM6ICAnb3B0aW9uJyBpcyBhIHR1cGxlIG9mIChvbm9mZiwgdGltZW91dCwgaW50ZXJ2YWwpLiIpOwogCiAjZW5kaWYKIApAQCAtMzM3NSw3ICszNDQ1LDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYWYgPSBzYS0+c2FfZmFtaWx5OwogICAgIGFwID0gTlVMTDsKLSAgICBhbCA9IDA7CiAgICAgc3dpdGNoIChhZikgewogICAgIGNhc2UgQUZfSU5FVDoKICAgICAgICAgYXAgPSAoY2hhciAqKSYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhKS0+c2luX2FkZHI7CkBAIC0zNDY0LDEzICszNTMzLDE5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc29ja2V0X2dldHNlcnZieXBvcnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHVuc2lnbmVkIHNob3J0IHBvcnQ7CisgICAgaW50IHBvcnQ7CiAgICAgY2hhciAqcHJvdG89TlVMTDsKICAgICBzdHJ1Y3Qgc2VydmVudCAqc3A7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJIfHM6Z2V0c2VydmJ5cG9ydCIsICZwb3J0LCAmcHJvdG8pKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXxzOmdldHNlcnZieXBvcnQiLCAmcG9ydCwgJnByb3RvKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHBvcnQgPCAwIHx8IHBvcnQgPiAweGZmZmYpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICJnZXRzZXJ2Ynlwb3J0OiBwb3J0IG11c3QgYmUgMC02NTUzNS4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcCA9IGdldHNlcnZieXBvcnQoaHRvbnMocG9ydCksIHByb3RvKTsKKyAgICBzcCA9IGdldHNlcnZieXBvcnQoaHRvbnMoKHNob3J0KXBvcnQpLCBwcm90byk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAoc3AgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X2Vycm9yLCAicG9ydC9wcm90byBub3QgZm91bmQiKTsKQEAgLTQ0NDIsNyArNDUxNyw3IEBACiAKICAgICAvKiBFeHBvcnQgQyBBUEkgKi8KICAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sIFB5U29ja2V0X0NBUElfTkFNRSwKLSAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKCh2b2lkICopJlB5U29ja2V0TW9kdWxlQVBJLCBOVUxMKQorICAgICAgICAgICBQeUNhcHN1bGVfTmV3KCZQeVNvY2tldE1vZHVsZUFQSSwgUHlTb2NrZXRfQ0FQU1VMRV9OQU1FLCBOVUxMKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICE9IDApCiAgICAgICAgIHJldHVybjsKIApAQCAtNDU4OCw5ICs0NjYzLDEzIEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fTDJDQVAiLCBCVFBST1RPX0wyQ0FQKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19IQ0kiLCBCVFBST1RPX0hDSSk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9IQ0kiLCBTT0xfSENJKTsKKyNpZiAhZGVmaW5lZChfX05ldEJTRF9fKSAmJiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJIQ0lfRklMVEVSIiwgSENJX0ZJTFRFUik7CisjZW5kaWYKICNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiAhZGVmaW5lZChfX05ldEJTRF9fKSAmJiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJIQ0lfVElNRV9TVEFNUCIsIEhDSV9USU1FX1NUQU1QKTsKKyNlbmRpZgogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJIQ0lfREFUQV9ESVIiLCBIQ0lfREFUQV9ESVIpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX1NDTyIsIEJUUFJPVE9fU0NPKTsKICNlbmRpZgpAQCAtNDU5OSwxNiArNDY3OCwzMiBAQAogICAgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJCREFERFJfTE9DQUwiLCAiMDA6MDA6MDA6RkY6RkY6RkYiKTsKICNlbmRpZgogCi0jaWZkZWYgSEFWRV9ORVRQQUNLRVRfUEFDS0VUX0gKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUEFDS0VUIiwgQUZfUEFDS0VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEZfUEFDS0VUIiwgUEZfUEFDS0VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEFDS0VUX0hPU1QiLCBQQUNLRVRfSE9TVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBBQ0tFVF9CUk9BRENBU1QiLCBQQUNLRVRfQlJPQURDQVNUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEFDS0VUX01VTFRJQ0FTVCIsIFBBQ0tFVF9NVUxUSUNBU1QpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQQUNLRVRfT1RIRVJIT1NUIiwgUEFDS0VUX09USEVSSE9TVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBBQ0tFVF9PVVRHT0lORyIsIFBBQ0tFVF9PVVRHT0lORyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBBQ0tFVF9MT09QQkFDSyIsIFBBQ0tFVF9MT09QQkFDSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBBQ0tFVF9GQVNUUk9VVEUiLCBQQUNLRVRfRkFTVFJPVVRFKTsKKyNpZmRlZiBBRl9QQUNLRVQKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9QQUNLRVQpOworI2VuZGlmCisjaWZkZWYgUEZfUEFDS0VUCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEZfUEFDS0VUKTsKKyNlbmRpZgorI2lmZGVmIFBBQ0tFVF9IT1NUCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEFDS0VUX0hPU1QpOworI2VuZGlmCisjaWZkZWYgUEFDS0VUX0JST0FEQ0FTVAorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBBQ0tFVF9CUk9BRENBU1QpOworI2VuZGlmCisjaWZkZWYgUEFDS0VUX01VTFRJQ0FTVAorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBBQ0tFVF9NVUxUSUNBU1QpOworI2VuZGlmCisjaWZkZWYgUEFDS0VUX09USEVSSE9TVAorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBBQ0tFVF9PVEhFUkhPU1QpOworI2VuZGlmCisjaWZkZWYgUEFDS0VUX09VVEdPSU5HCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEFDS0VUX09VVEdPSU5HKTsKKyNlbmRpZgorI2lmZGVmIFBBQ0tFVF9MT09QQkFDSworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBBQ0tFVF9MT09QQkFDSyk7CisjZW5kaWYKKyNpZmRlZiBQQUNLRVRfRkFTVFJPVVRFCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEFDS0VUX0ZBU1RST1VURSk7CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfTElOVVhfVElQQ19ICkBAIC00NzI1LDYgKzQ4MjAsOSBAQAogI2lmZGVmICBTT19UWVBFCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1RZUEUiLCBTT19UWVBFKTsKICNlbmRpZgorI2lmZGVmIFNPX1NFVEZJQgorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TRVRGSUIiLCBTT19TRVRGSUIpOworI2VuZGlmCiAKICAgICAvKiBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBmb3IgImxpc3RlbiIgKi8KICNpZmRlZiAgU09NQVhDT05OCkBAIC01MjcxLDExICs1MzY5LDE2IEBACiAKICNpZmRlZiBTSU9fUkNWQUxMCiAgICAgewotICAgICAgICBQeU9iamVjdCAqdG1wOwotICAgICAgICB0bXAgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhTSU9fUkNWQUxMKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNJT19SQ1ZBTEwiLCB0bXApOworICAgICAgICBEV09SRCBjb2Rlc1tdID0ge1NJT19SQ1ZBTEwsIFNJT19LRUVQQUxJVkVfVkFMU307CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWVzW10gPSB7IlNJT19SQ1ZBTEwiLCAiU0lPX0tFRVBBTElWRV9WQUxTIn07CisgICAgICAgIGludCBpOworICAgICAgICBmb3IoaSA9IDA7IGk8c2l6ZW9mKGNvZGVzKS9zaXplb2YoKmNvZGVzKTsgKytpKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG1wOworICAgICAgICAgICAgdG1wID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoY29kZXNbaV0pOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCBuYW1lc1tpXSwgdG1wKTsKKyAgICAgICAgfQogICAgIH0KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX09GRiIsIFJDVkFMTF9PRkYpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfT04iLCBSQ1ZBTExfT04pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaCBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKaW5kZXggOWI4NTc3My4uODUxNTQ5OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaAorKysgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCkBAIC03OCw2ICs3OCw3IEBACiAvKiBQeXRob24gbW9kdWxlIGFuZCBDIEFQSSBuYW1lICovCiAjZGVmaW5lIFB5U29ja2V0X01PRFVMRV9OQU1FICAgICJfc29ja2V0IgogI2RlZmluZSBQeVNvY2tldF9DQVBJX05BTUUgICAgICAiQ0FQSSIKKyNkZWZpbmUgUHlTb2NrZXRfQ0FQU1VMRV9OQU1FICAoUHlTb2NrZXRfTU9EVUxFX05BTUUgIi4iIFB5U29ja2V0X0NBUElfTkFNRSkKIAogLyogQWJzdHJhY3QgdGhlIHNvY2tldCBmaWxlIGRlc2NyaXB0b3IgdHlwZSAqLwogI2lmZGVmIE1TX1dJTkRPV1MKQEAgLTE0MiwxMiArMTQzLDEyIEBACiAgICAgdGhlIF9zb2NrZXQgbW9kdWxlLiBTaW5jZSBjcm9zcy1ETEwgbGlua2luZyBpbnRyb2R1Y2VzIGEgbG90IG9mCiAgICAgcHJvYmxlbXMgb24gbWFueSBwbGF0Zm9ybXMsIHRoZSAidHJpY2siIGlzIHRvIHdyYXAgdGhlCiAgICAgQyBBUEkgb2YgYSBtb2R1bGUgaW4gYSBzdHJ1Y3Qgd2hpY2ggdGhlbiBnZXRzIGV4cG9ydGVkIHRvCi0gICAgb3RoZXIgbW9kdWxlcyB2aWEgYSBQeUNPYmplY3QuCisgICAgb3RoZXIgbW9kdWxlcyB2aWEgYSBQeUNhcHN1bGUuCiAKICAgICBUaGUgY29kZSBpbiBzb2NrZXRtb2R1bGUuYyBkZWZpbmVzIHRoaXMgc3RydWN0ICh3aGljaCBjdXJyZW50bHkKICAgICBvbmx5IGNvbnRhaW5zIHRoZSB0eXBlIG9iamVjdCByZWZlcmVuY2UsIGJ1dCBjb3VsZCB2ZXJ5CiAgICAgd2VsbCBhbHNvIGluY2x1ZGUgb3RoZXIgQyBBUElzIG5lZWRlZCBieSBvdGhlciBtb2R1bGVzKQotICAgIGFuZCBleHBvcnRzIGl0IGFzIFB5Q09iamVjdCB2aWEgdGhlIG1vZHVsZSBkaWN0aW9uYXJ5CisgICAgYW5kIGV4cG9ydHMgaXQgYXMgUHlDYXBzdWxlIHZpYSB0aGUgbW9kdWxlIGRpY3Rpb25hcnkKICAgICB1bmRlciB0aGUgbmFtZSAiQ0FQSSIuCiAKICAgICBPdGhlciBtb2R1bGVzIGNhbiBub3cgaW5jbHVkZSB0aGUgc29ja2V0bW9kdWxlLmggZmlsZQpAQCAtMjI2LDMzICsyMjcsMTggQEAKIHN0YXRpYwogaW50IFB5U29ja2V0TW9kdWxlX0ltcG9ydE1vZHVsZUFuZEFQSSh2b2lkKQogewotICAgIFB5T2JqZWN0ICptb2QgPSAwLCAqdiA9IDA7Ci0gICAgY2hhciAqYXBpbW9kdWxlID0gUHlTb2NrZXRfTU9EVUxFX05BTUU7Ci0gICAgY2hhciAqYXBpbmFtZSA9IFB5U29ja2V0X0NBUElfTkFNRTsKICAgICB2b2lkICphcGk7CiAKLSAgICBEUFJJTlRGKCJJbXBvcnRpbmcgdGhlICVzIEMgQVBJLi4uXG4iLCBhcGltb2R1bGUpOwotICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2soYXBpbW9kdWxlKTsKLSAgICBpZiAobW9kID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBEUFJJTlRGKCIgJXMgcGFja2FnZSBmb3VuZFxuIiwgYXBpbW9kdWxlKTsKLSAgICB2ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtb2QsIGFwaW5hbWUpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBQeV9ERUNSRUYobW9kKTsKLSAgICBEUFJJTlRGKCIgQVBJIG9iamVjdCAlcyBmb3VuZFxuIiwgYXBpbmFtZSk7Ci0gICAgYXBpID0gUHlDT2JqZWN0X0FzVm9pZFB0cih2KTsKKyAgRFBSSU5URigiIExvYWRpbmcgY2Fwc3VsZSAlc1xuIiwgUHlTb2NrZXRfQ0FQU1VMRV9OQU1FKTsKKyAgYXBpID0gUHlDYXBzdWxlX0ltcG9ydChQeVNvY2tldF9DQVBTVUxFX05BTUUsIDEpOwogICAgIGlmIChhcGkgPT0gTlVMTCkKICAgICAgICAgZ290byBvbkVycm9yOwotICAgIFB5X0RFQ1JFRih2KTsKICAgICBtZW1jcHkoJlB5U29ja2V0TW9kdWxlLCBhcGksIHNpemVvZihQeVNvY2tldE1vZHVsZSkpOwogICAgIERQUklOVEYoIiBBUEkgb2JqZWN0IGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQuXG4iKTsKICAgICByZXR1cm4gMDsKIAogIG9uRXJyb3I6CiAgICAgRFBSSU5URigiIG5vdCBmb3VuZC5cbiIpOwotICAgIFB5X1hERUNSRUYobW9kKTsKLSAgICBQeV9YREVDUkVGKHYpOwogICAgIHJldHVybiAtMTsKIH0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zdHJvcG1vZHVsZS5jIGIvTW9kdWxlcy9zdHJvcG1vZHVsZS5jCmluZGV4IDA5MGIwN2UuLjQ2ODRiYWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3Ryb3Btb2R1bGUuYworKysgYi9Nb2R1bGVzL3N0cm9wbW9kdWxlLmMKQEAgLTg3OSwxMCArODc5LDEyIEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc3RyaW5nIGZvciBhdG9mKCkiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGVycm5vID0gMDsKKwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoInN0cm9wX2F0b2YiLCByZXR1cm4gMCkKLSAgICB4ID0gUHlPU19hc2NpaV9zdHJ0b2QocywgJmVuZCk7CisgICAgeCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShzLCAmZW5kLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKICAgICBQeUZQRV9FTkRfUFJPVEVDVCh4KQorICAgIGlmICh4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHdoaWxlICgqZW5kICYmIGlzc3BhY2UoUHlfQ0hBUk1BU0soKmVuZCkpKQogICAgICAgICBlbmQrKzsKICAgICBpZiAoKmVuZCAhPSAnXDAnKSB7CkBAIC04OTEsMTIgKzg5Myw2IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBidWZmZXIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoZXJybm8gIT0gMCkgewotICAgICAgICBQeU9TX3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgICAgImF0b2YoKSBsaXRlcmFsIHRvbyBsYXJnZTogJS4yMDBzIiwgcyk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBidWZmZXIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSh4KTsKIH0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jIGIvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCmluZGV4IDg2YzY0ODEuLjYwZjliYTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYworKysgYi9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKQEAgLTU5LDExICs1OSw3IEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9HTE9CQUwiLCBERUZfR0xPQkFMKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0xPQ0FMIiwgREVGX0xPQ0FMKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX1BBUkFNIiwgREVGX1BBUkFNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX1NUQVIiLCBERUZfU1RBUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9ET1VCTEVTVEFSIiwgREVGX0RPVUJMRVNUQVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfSU5UVVBMRSIsIERFRl9JTlRVUExFKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0ZSRUUiLCBERUZfRlJFRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9GUkVFX0dMT0JBTCIsIERFRl9GUkVFX0dMT0JBTCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9GUkVFX0NMQVNTIiwgREVGX0ZSRUVfQ0xBU1MpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfSU1QT1JUIiwgREVGX0lNUE9SVCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9CT1VORCIsIERFRl9CT1VORCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jIGIvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYwppbmRleCBlMGZjYTBkLi4zN2VhZWJjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCisrKyBiL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKQEAgLTI2LDYgKzI2LDExIEBACiAKIFJldmlzaW9uIGhpc3Rvcnk6CiAKKzIwMTAvMDQvMjAgKFNlYW4gUmVpZnNjaG5laWRlcikKKyAgLSBVc2UgYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pIGZvciB0aGUgZGVmYXVsdCAiaWRlbnQiLgorICAtIEFyZ3VtZW50cyB0byBvcGVubG9nKCkgYXJlIG5vdyBrZXl3b3JkIGFyZ3MgYW5kIGFyZSBhbGwgb3B0aW9uYWwuCisgIC0gc3lzbG9nKCkgY2FsbHMgb3BlbmxvZygpIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gY2FsbGVkLgorCiAxOTk4LzA0LzI4IChTZWFuIFJlaWZzY2huZWlkZXIpCiAgIC0gV2hlbiBmYWNpbGl0eSBub3Qgc3BlY2lmaWVkIHRvIHN5c2xvZygpIG1ldGhvZCwgdXNlIGRlZmF1bHQgZnJvbSBvcGVubG9nKCkKICAgICAoVGhpcyBpcyBob3cgaXQgd2FzIGNsYWltZWQgdG8gd29yayBpbiB0aGUgZG9jdW1lbnRhdGlvbikKQEAgLTQ1LDMzICs1MCw5MSBAQAogLyogc3lzbG9nIG1vZHVsZSAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAib3NkZWZzLmgiCiAKICNpbmNsdWRlIDxzeXNsb2cuaD4KIAogLyogIG9ubHkgb25lIGluc3RhbmNlLCBvbmx5IG9uZSBzeXNsb2csIHNvIGdsb2JhbHMgc2hvdWxkIGJlIG9rICAqLwogc3RhdGljIFB5T2JqZWN0ICpTX2lkZW50X28gPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAvKiAgaWRlbnRpZmllciwgaGVsZCBieSBvcGVubG9nKCkgICovCitzdGF0aWMgY2hhciBTX2xvZ19vcGVuID0gMDsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotc3lzbG9nX29wZW5sb2coUHlPYmplY3QgKiBzZWxmLCBQeU9iamVjdCAqIGFyZ3MpCitzeXNsb2dfZ2V0X2FyZ3Yodm9pZCkKK3sKKyAgICAvKiBGaWd1cmUgb3V0IHdoYXQgdG8gdXNlIGZvciBhcyB0aGUgcHJvZ3JhbSAiaWRlbnQiIGZvciBvcGVubG9nKCkuCisgICAgICogVGhpcyBzd2FsbG93cyBleGNlcHRpb25zIGFuZCBjb250aW51ZXMgcmF0aGVyIHRoYW4gZmFpbGluZyBvdXQsCisgICAgICogYmVjYXVzZSB0aGUgc3lzbG9nIG1vZHVsZSBjYW4gc3RpbGwgYmUgdXNlZCBiZWNhdXNlIG9wZW5sb2coMykKKyAgICAgKiBpcyBvcHRpb25hbC4KKyAgICAgKi8KKworICAgIFB5X3NzaXplX3QgYXJndl9sZW47CisgICAgUHlPYmplY3QgKnNjcmlwdG9iajsKKyAgICBjaGFyICphdHNsYXNoOworICAgIFB5T2JqZWN0ICphcmd2ID0gUHlTeXNfR2V0T2JqZWN0KCJhcmd2Iik7CisKKyAgICBpZiAoYXJndiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisKKyAgICBhcmd2X2xlbiA9IFB5TGlzdF9TaXplKGFyZ3YpOworICAgIGlmIChhcmd2X2xlbiA9PSAtMSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmIChhcmd2X2xlbiA9PSAwKSB7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisKKyAgICBzY3JpcHRvYmogPSBQeUxpc3RfR2V0SXRlbShhcmd2LCAwKTsKKyAgICBpZiAoIVB5U3RyaW5nX0NoZWNrKHNjcmlwdG9iaikpIHsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoUHlTdHJpbmdfR0VUX1NJWkUoc2NyaXB0b2JqKSA9PSAwKSB7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisKKyAgICBhdHNsYXNoID0gc3RycmNocihQeVN0cmluZ19Bc1N0cmluZyhzY3JpcHRvYmopLCBTRVApOworICAgIGlmIChhdHNsYXNoKSB7CisgICAgICAgIHJldHVybihQeVN0cmluZ19Gcm9tU3RyaW5nKGF0c2xhc2ggKyAxKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlfSU5DUkVGKHNjcmlwdG9iaik7CisgICAgICAgIHJldHVybihzY3JpcHRvYmopOworICAgIH0KKworICAgIHJldHVybihOVUxMKTsKK30KKworCitzdGF0aWMgUHlPYmplY3QgKgorc3lzbG9nX29wZW5sb2coUHlPYmplY3QgKiBzZWxmLCBQeU9iamVjdCAqIGFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIGxvbmcgbG9nb3B0ID0gMDsKICAgICBsb25nIGZhY2lsaXR5ID0gTE9HX1VTRVI7Ci0gICAgUHlPYmplY3QgKm5ld19TX2lkZW50X287CisgICAgUHlPYmplY3QgKm5ld19TX2lkZW50X28gPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJpZGVudCIsICJsb2dvcHRpb24iLCAiZmFjaWxpdHkiLCAwfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiU3xsbDtpZGVudCBzdHJpbmcgWywgbG9nb3B0aW9uIFssIGZhY2lsaXR5XV0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X1NfaWRlbnRfbywgJmxvZ29wdCwgJmZhY2lsaXR5KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAifFNsbDpvcGVubG9nIiwga2V5d29yZHMsICZuZXdfU19pZGVudF9vLCAmbG9nb3B0LCAmZmFjaWxpdHkpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb3BlbmxvZygpIGRvZXMgTk9UIG1ha2UgYSBjb3B5Ci0gICAgICogYW5kIHN5c2xvZygpIGxhdGVyIHVzZXMgaXQuLiBjYW5ub3QgdHJhc2ggaXQuCi0gICAgICovCisgICAgaWYgKG5ld19TX2lkZW50X28pIHsgUHlfSU5DUkVGKG5ld19TX2lkZW50X28pOyB9CisKKyAgICAvKiAgZ2V0IHN5cy5hcmd2WzBdIG9yIE5VTEwgaWYgd2UgY2FuJ3QgZm9yIHNvbWUgcmVhc29uICAqLworICAgIGlmICghbmV3X1NfaWRlbnRfbykgeworICAgICAgICBuZXdfU19pZGVudF9vID0gc3lzbG9nX2dldF9hcmd2KCk7CisgICAgICAgIH0KKwogICAgIFB5X1hERUNSRUYoU19pZGVudF9vKTsKICAgICBTX2lkZW50X28gPSBuZXdfU19pZGVudF9vOwotICAgIFB5X0lOQ1JFRihTX2lkZW50X28pOwogCi0gICAgb3BlbmxvZyhQeVN0cmluZ19Bc1N0cmluZyhTX2lkZW50X28pLCBsb2dvcHQsIGZhY2lsaXR5KTsKKyAgICAvKiBBdCB0aGlzIHBvaW50LCBTX2lkZW50X28gc2hvdWxkIGJlIElOQ1JFRigpZWQuICBvcGVubG9nKDMpIGRvZXMgbm90CisgICAgICogbWFrZSBhIGNvcHksIGFuZCBzeXNsb2coMykgbGF0ZXIgdXNlcyBpdC4gIFdlIGNhbid0IGdhcmJhZ2Vjb2xsZWN0IGl0CisgICAgICogSWYgTlVMTCwganVzdCBsZXQgb3BlbmxvZyBmaWd1cmUgaXQgb3V0IChwcm9iYWJseSB1c2luZyBDIGFyZ3ZbMF0pLgorICAgICAqLworCisgICAgb3BlbmxvZyhTX2lkZW50X28gPyBQeVN0cmluZ19Bc1N0cmluZyhTX2lkZW50X28pIDogTlVMTCwgbG9nb3B0LCBmYWNpbGl0eSk7CisgICAgU19sb2dfb3BlbiA9IDE7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC05Miw2ICsxNTUsMjEgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIC8qICBpZiBsb2cgaXMgbm90IG9wZW5lZCwgb3BlbiBpdCBub3cgICovCisgICAgaWYgKCFTX2xvZ19vcGVuKSB7CisgICAgICAgIFB5T2JqZWN0ICpvcGVuYXJnczsKKworICAgICAgICAvKiBDb250aW51ZSBldmVuIGlmIFB5VHVwbGVfTmV3IGZhaWxzLCBiZWNhdXNlIG9wZW5sb2coMykgaXMgb3B0aW9uYWwuCisgICAgICAgICAqIFNvLCB3ZSBjYW4gc3RpbGwgZG8gbG9nZ2luIGluIHRoZSB1bmxpa2VseSBldmVudCB0aGluZ3MgYXJlIHNvIGhvc2VkCisgICAgICAgICAqIHRoYXQgd2UgY2FuJ3QgZG8gdGhpcyB0dXBsZS4KKyAgICAgICAgICovCisgICAgICAgIGlmICgob3BlbmFyZ3MgPSBQeVR1cGxlX05ldygwKSkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvcGVubG9nX3JldCA9IHN5c2xvZ19vcGVubG9nKHNlbGYsIG9wZW5hcmdzLCBOVUxMKTsKKyAgICAgICAgICAgIFB5X1hERUNSRUYob3BlbmxvZ19yZXQpOworICAgICAgICAgICAgUHlfREVDUkVGKG9wZW5hcmdzKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFM7CiAgICAgc3lzbG9nKHByaW9yaXR5LCAiJXMiLCBtZXNzYWdlKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUzsKQEAgLTEwMiw5ICsxODAsMTIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzeXNsb2dfY2xvc2Vsb2coUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgY2xvc2Vsb2coKTsKLSAgICBQeV9YREVDUkVGKFNfaWRlbnRfbyk7Ci0gICAgU19pZGVudF9vID0gTlVMTDsKKyAgICBpZiAoU19sb2dfb3BlbikgeworICAgICAgICBjbG9zZWxvZygpOworICAgICAgICBQeV9YREVDUkVGKFNfaWRlbnRfbyk7CisgICAgICAgIFNfaWRlbnRfbyA9IE5VTEw7CisgICAgICAgIFNfbG9nX29wZW4gPSAwOworICAgIH0KICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CkBAIC0xNDUsNyArMjI2LDcgQEAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSAqLwogCiBzdGF0aWMgUHlNZXRob2REZWYgc3lzbG9nX21ldGhvZHNbXSA9IHsKLSAgICB7Im9wZW5sb2ciLCAgICAgICAgIHN5c2xvZ19vcGVubG9nLCAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJvcGVubG9nIiwgICAgICAgICAoUHlDRnVuY3Rpb24pIHN5c2xvZ19vcGVubG9nLCAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEU30sCiAgICAgeyJjbG9zZWxvZyIsICAgICAgICBzeXNsb2dfY2xvc2Vsb2csICAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJzeXNsb2ciLCAgICAgICAgICBzeXNsb2dfc3lzbG9nLCAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsic2V0bG9nbWFzayIsICAgICAgc3lzbG9nX3NldGxvZ21hc2ssICAgICAgTUVUSF9WQVJBUkdTfSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvdGVybWlvcy5jIGIvTW9kdWxlcy90ZXJtaW9zLmMKaW5kZXggODQ1OTI1Ny4uNTdmMzBkYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy90ZXJtaW9zLmMKKysrIGIvTW9kdWxlcy90ZXJtaW9zLmMKQEAgLTM1Nyw2ICszNTcsOSBAQAogICAgIHsiVENTQU5PVyIsIFRDU0FOT1d9LAogICAgIHsiVENTQURSQUlOIiwgVENTQURSQUlOfSwKICAgICB7IlRDU0FGTFVTSCIsIFRDU0FGTFVTSH0sCisjaWZkZWYgVENTQVNPRlQKKyAgICB7IlRDU0FTT0ZUIiwgVENTQVNPRlR9LAorI2VuZGlmCiAKICAgICAvKiB0Y2ZsdXNoKCkgY29uc3RhbnRzICovCiAgICAgeyJUQ0lGTFVTSCIsIFRDSUZMVVNIfSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvdGVzdGNhcGlfbG9uZy5oIGIvTW9kdWxlcy90ZXN0Y2FwaV9sb25nLmgKaW5kZXggZDliNjY2My4uZmE5NGZkNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy90ZXN0Y2FwaV9sb25nLmgKKysrIGIvTW9kdWxlcy90ZXN0Y2FwaV9sb25nLmgKQEAgLTk3LDYgKzk3LDEwIEBACiAgICAgICAgIGlmICh1b3V0ICE9ICh1bnNpZ25lZCBUWVBFTkFNRSktMSB8fCAhUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBlcnJvcigKICAgICAgICAgICAgICAgICAiUHlMb25nX0FzVW5zaWduZWRYWFgoLTEpIGRpZG4ndCBjb21wbGFpbiIpOworICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoCisgICAgICAgICAgICAgICAgIlB5TG9uZ19Bc1Vuc2lnbmVkWFhYKC0xKSByYWlzZWQgIgorICAgICAgICAgICAgICAgICJzb21ldGhpbmcgb3RoZXIgdGhhbiBPdmVyZmxvd0Vycm9yIik7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIFVOQklORCh4KTsKIApAQCAtMTE3LDYgKzEyMSwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIGVycm9yKAogICAgICAgICAgICAgICAgICJQeUxvbmdfQXNVbnNpZ25lZFhYWCgyKipOQklUUykgZGlkbid0ICIKICAgICAgICAgICAgICAgICAiY29tcGxhaW4iKTsKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKAorICAgICAgICAgICAgICAgICJQeUxvbmdfQXNVbnNpZ25lZFhYWCgyKipOQklUUykgcmFpc2VkICIKKyAgICAgICAgICAgICAgICAic29tZXRoaW5nIG90aGVyIHRoYW4gT3ZlcmZsb3dFcnJvciIpOwogICAgICAgICBQeUVycl9DbGVhcigpOwogCiAgICAgICAgIC8qIFNpZ25lZCBjb21wbGFpbnMgYWJvdXQgMioqKE5CSVRTLTEpPwpAQCAtMTMyLDYgKzE0MCwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIGVycm9yKAogICAgICAgICAgICAgICAgICJQeUxvbmdfQXNYWFgoMioqKE5CSVRTLTEpKSBkaWRuJ3QgIgogICAgICAgICAgICAgICAgICJjb21wbGFpbiIpOworICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoCisgICAgICAgICAgICAgICAgIlB5TG9uZ19Bc1hYWCgyKiooTkJJVFMtMSkpIHJhaXNlZCAiCisgICAgICAgICAgICAgICAgInNvbWV0aGluZyBvdGhlciB0aGFuIE92ZXJmbG93RXJyb3IiKTsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKIAogICAgICAgICAvKiBTaWduZWQgY29tcGxhaW5zIGFib3V0IC0yKiooTkJJVFMtMSktMT87CkBAIC0xNTMsNiArMTY1LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoCiAgICAgICAgICAgICAgICAgIlB5TG9uZ19Bc1hYWCgtMioqKE5CSVRTLTEpLTEpIGRpZG4ndCAiCiAgICAgICAgICAgICAgICAgImNvbXBsYWluIik7CisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKKyAgICAgICAgICAgIHJldHVybiBlcnJvcigKKyAgICAgICAgICAgICAgICAiUHlMb25nX0FzWFhYKC0yKiooTkJJVFMtMSktMSkgcmFpc2VkICIKKyAgICAgICAgICAgICAgICAic29tZXRoaW5nIG90aGVyIHRoYW4gT3ZlcmZsb3dFcnJvciIpOwogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBVTkJJTkQoeSk7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvdGhyZWFkbW9kdWxlLmMgYi9Nb2R1bGVzL3RocmVhZG1vZHVsZS5jCmluZGV4IGRlMzRhZTIuLjUzYTgzM2MgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdGhyZWFkbW9kdWxlLmMKKysrIGIvTW9kdWxlcy90aHJlYWRtb2R1bGUuYwpAQCAtMyw2ICszLDcgQEAKIC8qIEludGVyZmFjZSB0byBTam9lcmQncyBwb3J0YWJsZSBDIHRocmVhZCBsaWJyYXJ5ICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIgLyogb2Zmc2V0b2YgKi8KIAogI2lmbmRlZiBXSVRIX1RIUkVBRAogI2Vycm9yICJFcnJvciEgIFRoZSByZXN0IG9mIFB5dGhvbiBpcyBub3QgY29tcGlsZWQgd2l0aCB0aHJlYWQgc3VwcG9ydC4iCkBAIC0xMywxOCArMTQsMjIgQEAKICNpbmNsdWRlICJweXRocmVhZC5oIgogCiBzdGF0aWMgUHlPYmplY3QgKlRocmVhZEVycm9yOwotCitzdGF0aWMgUHlPYmplY3QgKnN0cl9kaWN0Oworc3RhdGljIGxvbmcgbmJfdGhyZWFkcyA9IDA7CiAKIC8qIExvY2sgb2JqZWN0cyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrX2xvY2s7CisgICAgUHlPYmplY3QgKmluX3dlYWtyZWZsaXN0OwogfSBsb2Nrb2JqZWN0OwogCiBzdGF0aWMgdm9pZAogbG9ja19kZWFsbG9jKGxvY2tvYmplY3QgKnNlbGYpCiB7CisgICAgaWYgKHNlbGYtPmluX3dlYWtyZWZsaXN0ICE9IE5VTEwpCisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOwogICAgIGlmIChzZWxmLT5sb2NrX2xvY2sgIT0gTlVMTCkgewogICAgICAgICAvKiBVbmxvY2sgdGhlIGxvY2sgc28gaXQncyBzYWZlIHRvIGZyZWUgaXQgKi8KICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHNlbGYtPmxvY2tfbG9jaywgMCk7CkBAIC0xMTcsMTUgKzEyMiw5IEBACiAgICAgIE1FVEhfVkFSQVJHUywgYWNxdWlyZV9kb2N9LAogICAgIHsiX19leGl0X18iLCAgICAoUHlDRnVuY3Rpb24pbG9ja19QeVRocmVhZF9yZWxlYXNlX2xvY2ssCiAgICAgIE1FVEhfVkFSQVJHUywgcmVsZWFzZV9kb2N9LAotICAgIHtOVUxMLCAgICAgICAgICAgTlVMTH0gICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCisgICAge05VTEx9ICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLWxvY2tfZ2V0YXR0cihsb2Nrb2JqZWN0ICpzZWxmLCBjaGFyICpuYW1lKQotewotICAgIHJldHVybiBQeV9GaW5kTWV0aG9kKGxvY2tfbWV0aG9kcywgKFB5T2JqZWN0ICopc2VsZiwgbmFtZSk7Ci19Ci0KIHN0YXRpYyBQeVR5cGVPYmplY3QgTG9ja3R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKICAgICAidGhyZWFkLmxvY2siLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX25hbWUqLwpAQCAtMTM0LDEwICsxMzMsMjggQEAKICAgICAvKiBtZXRob2RzICovCiAgICAgKGRlc3RydWN0b3IpbG9ja19kZWFsbG9jLCAgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KLSAgICAoZ2V0YXR0cmZ1bmMpbG9ja19nZXRhdHRyLCAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19IQVZFX1dFQUtSRUZTLCAgICAgICAvKiB0cF9mbGFncyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG9mZnNldG9mKGxvY2tvYmplY3QsIGluX3dlYWtyZWZsaXN0KSwgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBsb2NrX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiB9OwogCiBzdGF0aWMgbG9ja29iamVjdCAqCkBAIC0xNDgsNiArMTY1LDcgQEAKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzZWxmLT5sb2NrX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgc2VsZi0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIGlmIChzZWxmLT5sb2NrX2xvY2sgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUaHJlYWRFcnJvciwgImNhbid0IGFsbG9jYXRlIGxvY2siKTsKQEAgLTE2MCwxOSArMTc4LDE2MCBAQAogCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKKy8qIFF1aWNrIG92ZXJ2aWV3OgorCisgICBXZSBuZWVkIHRvIGJlIGFibGUgdG8gcmVjbGFpbSByZWZlcmVuY2UgY3ljbGVzIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIChib3RoIHdoZW4gYSB0aHJlYWQgaXMgYmVpbmcgdGVybWluYXRlZCwgb3IgYSB0aHJlYWQtbG9jYWwgb2JqZWN0CisgICAgYmVjb21lcyB1bnJlYWNoYWJsZSBmcm9tIHVzZXIgZGF0YSkuICBDb25zdHJhaW50czoKKyAgIC0gaXQgbXVzdCBub3QgYmUgcG9zc2libGUgZm9yIHRocmVhZC1zdGF0ZSBkaWN0cyB0byBiZSBpbnZvbHZlZCBpbgorICAgICByZWZlcmVuY2UgY3ljbGVzIChvdGhlcndpc2UgdGhlIGN5Y2xpYyBHQyB3aWxsIHJlZnVzZSB0byBjb25zaWRlcgorICAgICBvYmplY3RzIHJlZmVyZW5jZWQgZnJvbSBhIHJlYWNoYWJsZSB0aHJlYWQtc3RhdGUgZGljdCwgZXZlbiB0aG91Z2gKKyAgICAgbG9jYWxfZGVhbGxvYyB3b3VsZCBjbGVhciB0aGVtKQorICAgLSB0aGUgZGVhdGggb2YgYSB0aHJlYWQtc3RhdGUgZGljdCBtdXN0IHN0aWxsIGltcGx5IGRlc3RydWN0aW9uIG9mIHRoZQorICAgICBjb3JyZXNwb25kaW5nIGxvY2FsIGRpY3RzIGluIGFsbCB0aHJlYWQtbG9jYWwgb2JqZWN0cy4KKworICAgT3VyIGltcGxlbWVudGF0aW9uIHVzZXMgc21hbGwgImxvY2FsZHVtbXkiIG9iamVjdHMgaW4gb3JkZXIgdG8gYnJlYWsKKyAgIHRoZSByZWZlcmVuY2UgY2hhaW4uIFRoZXNlIHRyaXZpYWwgb2JqZWN0cyBhcmUgaGFzaGFibGUgKHVzaW5nIHRoZQorICAgZGVmYXVsdCBzY2hlbWUgb2YgaWRlbnRpdHkgaGFzaGluZykgYW5kIHdlYWtyZWZhYmxlLgorICAgRWFjaCB0aHJlYWQtc3RhdGUgaG9sZHMgYSBzZXBhcmF0ZSBsb2NhbGR1bW15IGZvciBlYWNoIGxvY2FsIG9iamVjdAorICAgKGFzIGEgL3N0cm9uZyByZWZlcmVuY2UvKSwKKyAgIGFuZCBlYWNoIHRocmVhZC1sb2NhbCBvYmplY3QgaG9sZHMgYSBkaWN0IG1hcHBpbmcgL3dlYWsgcmVmZXJlbmNlcy8KKyAgIG9mIGxvY2FsZHVtbWllcyB0byBsb2NhbCBkaWN0cy4KKworICAgVGhlcmVmb3JlOgorICAgLSBvbmx5IHRoZSB0aHJlYWQtc3RhdGUgZGljdCBob2xkcyBhIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIGR1bW1pZXMKKyAgIC0gb25seSB0aGUgdGhyZWFkLWxvY2FsIG9iamVjdCBob2xkcyBhIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIGxvY2FsIGRpY3RzCisgICAtIG9ubHkgb3V0c2lkZSBvYmplY3RzIChhcHBsaWNhdGlvbi0gb3IgbGlicmFyeS1sZXZlbCkgaG9sZCBzdHJvbmcKKyAgICAgcmVmZXJlbmNlcyB0byB0aGUgdGhyZWFkLWxvY2FsIG9iamVjdHMKKyAgIC0gYXMgc29vbiBhcyBhIHRocmVhZC1zdGF0ZSBkaWN0IGlzIGRlc3Ryb3llZCwgdGhlIHdlYWtyZWYgY2FsbGJhY2tzIG9mIGFsbAorICAgICBkdW1taWVzIGF0dGFjaGVkIHRvIHRoYXQgdGhyZWFkIGFyZSBjYWxsZWQsIGFuZCBkZXN0cm95IHRoZSBjb3JyZXNwb25kaW5nCisgICAgIGxvY2FsIGRpY3RzIGZyb20gdGhyZWFkLWxvY2FsIG9iamVjdHMKKyAgIC0gYXMgc29vbiBhcyBhIHRocmVhZC1sb2NhbCBvYmplY3QgaXMgZGVzdHJveWVkLCBpdHMgbG9jYWwgZGljdHMgYXJlCisgICAgIGRlc3Ryb3llZCBhbmQgaXRzIGR1bW1pZXMgYXJlIG1hbnVhbGx5IHJlbW92ZWQgZnJvbSBhbGwgdGhyZWFkIHN0YXRlcworICAgLSB0aGUgR0MgY2FuIGRvIGl0cyB3b3JrIGNvcnJlY3RseSB3aGVuIGEgdGhyZWFkLWxvY2FsIG9iamVjdCBpcyBkYW5nbGluZywKKyAgICAgd2l0aG91dCBhbnkgaW50ZXJmZXJlbmNlIGZyb20gdGhlIHRocmVhZC1zdGF0ZSBkaWN0cworCisgICBBcyBhbiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbiwgZWFjaCBsb2NhbGR1bW15IGhvbGRzIGEgYm9ycm93ZWQgcmVmZXJlbmNlCisgICB0byB0aGUgY29ycmVzcG9uZGluZyBsb2NhbGRpY3QuICBUaGlzIGJvcnJvd2VkIHJlZmVyZW5jZSBpcyBvbmx5IHVzZWQKKyAgIGJ5IHRoZSB0aHJlYWQtbG9jYWwgb2JqZWN0IHdoaWNoIGhhcyBjcmVhdGVkIHRoZSBsb2NhbGR1bW15LCB3aGljaCBzaG91bGQKKyAgIGd1YXJhbnRlZSB0aGF0IHRoZSBsb2NhbGRpY3Qgc3RpbGwgZXhpc3RzIHdoZW4gYWNjZXNzZWQuCisqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICpsb2NhbGRpY3Q7ICAgICAgICAvKiBCb3Jyb3dlZCByZWZlcmVuY2UhICovCisgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAgICAgIC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIHNlbGYgKi8KK30gbG9jYWxkdW1teW9iamVjdDsKKworc3RhdGljIHZvaWQKK2xvY2FsZHVtbXlfZGVhbGxvYyhsb2NhbGR1bW15b2JqZWN0ICpzZWxmKQoreworICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKKyAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKChQeU9iamVjdCopc2VsZik7Cit9CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgbG9jYWxkdW1teXR5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgLyogdHBfbmFtZSAgICAgICAgICAgKi8gIl90aHJlYWQuX2xvY2FsZHVtbXkiLAorICAgIC8qIHRwX2Jhc2ljc2l6ZSAgICAgICovIHNpemVvZihsb2NhbGR1bW15b2JqZWN0KSwKKyAgICAvKiB0cF9pdGVtc2l6ZSAgICAgICAqLyAwLAorICAgIC8qIHRwX2RlYWxsb2MgICAgICAgICovIChkZXN0cnVjdG9yKWxvY2FsZHVtbXlfZGVhbGxvYywKKyAgICAvKiB0cF9wcmludCAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2dldGF0dHIgICAgICAgICovIDAsCisgICAgLyogdHBfc2V0YXR0ciAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yZXNlcnZlZCAgICAgICAqLyAwLAorICAgIC8qIHRwX3JlcHIgICAgICAgICAgICovIDAsCisgICAgLyogdHBfYXNfbnVtYmVyICAgICAgKi8gMCwKKyAgICAvKiB0cF9hc19zZXF1ZW5jZSAgICAqLyAwLAorICAgIC8qIHRwX2FzX21hcHBpbmcgICAgICovIDAsCisgICAgLyogdHBfaGFzaCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9jYWxsICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX3N0ciAgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZ2V0YXR0cm8gICAgICAgKi8gMCwKKyAgICAvKiB0cF9zZXRhdHRybyAgICAgICAqLyAwLAorICAgIC8qIHRwX2FzX2J1ZmZlciAgICAgICovIDAsCisgICAgLyogdHBfZmxhZ3MgICAgICAgICAgKi8gUHlfVFBGTEFHU19ERUZBVUxULAorICAgIC8qIHRwX2RvYyAgICAgICAgICAgICovICJUaHJlYWQtbG9jYWwgZHVtbXkiLAorICAgIC8qIHRwX3RyYXZlcnNlICAgICAgICovIDAsCisgICAgLyogdHBfY2xlYXIgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yaWNoY29tcGFyZSAgICAqLyAwLAorICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovIG9mZnNldG9mKGxvY2FsZHVtbXlvYmplY3QsIHdlYWtyZWZsaXN0KQorfTsKKworCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKmFyZ3M7CiAgICAgUHlPYmplY3QgKmt3OwotICAgIFB5T2JqZWN0ICpkaWN0OworICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsgICAgICAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyB0byBzZWxmICovCisgICAgLyogQSB7bG9jYWxkdW1teSB3ZWFrcmVmIC0+IGxvY2FsZGljdH0gZGljdCAqLworICAgIFB5T2JqZWN0ICpkdW1taWVzOworICAgIC8qIFRoZSBjYWxsYmFjayBmb3Igd2Vha3JlZnMgdG8gbG9jYWxkdW1taWVzICovCisgICAgUHlPYmplY3QgKndyX2NhbGxiYWNrOwogfSBsb2NhbG9iamVjdDsKIAorLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIFB5T2JqZWN0ICpfbGRpY3QobG9jYWxvYmplY3QgKnNlbGYpOworc3RhdGljIFB5T2JqZWN0ICpfbG9jYWxkdW1teV9kZXN0cm95ZWQoUHlPYmplY3QgKm1ldGhfc2VsZiwgUHlPYmplY3QgKmR1bW15d2Vha3JlZik7CisKKy8qIENyZWF0ZSBhbmQgcmVnaXN0ZXIgdGhlIGR1bW15IGZvciB0aGUgY3VycmVudCB0aHJlYWQuCisgICBSZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGxvY2FsIGRpY3QgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitfbG9jYWxfY3JlYXRlX2R1bW15KGxvY2Fsb2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICp0ZGljdCwgKmxkaWN0ID0gTlVMTCwgKndyID0gTlVMTDsKKyAgICBsb2NhbGR1bW15b2JqZWN0ICpkdW1teSA9IE5VTEw7CisgICAgaW50IHI7CisKKyAgICB0ZGljdCA9IFB5VGhyZWFkU3RhdGVfR2V0RGljdCgpOworICAgIGlmICh0ZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBnZXQgdGhyZWFkLXN0YXRlIGRpY3Rpb25hcnkiKTsKKyAgICAgICAgZ290byBlcnI7CisgICAgfQorCisgICAgbGRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgaWYgKGxkaWN0ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyOworICAgIGR1bW15ID0gKGxvY2FsZHVtbXlvYmplY3QgKikgbG9jYWxkdW1teXR5cGUudHBfYWxsb2MoJmxvY2FsZHVtbXl0eXBlLCAwKTsKKyAgICBpZiAoZHVtbXkgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnI7CisgICAgZHVtbXktPmxvY2FsZGljdCA9IGxkaWN0OworICAgIHdyID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgZHVtbXksIHNlbGYtPndyX2NhbGxiYWNrKTsKKyAgICBpZiAod3IgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICAvKiBBcyBhIHNpZGUtZWZmZWN0LCB0aGlzIHdpbGwgY2FjaGUgdGhlIHdlYWtyZWYncyBoYXNoIGJlZm9yZSB0aGUKKyAgICAgICBkdW1teSBnZXRzIGRlbGV0ZWQgKi8KKyAgICByID0gUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZHVtbWllcywgd3IsIGxkaWN0KTsKKyAgICBpZiAociA8IDApCisgICAgICAgIGdvdG8gZXJyOworICAgIFB5X0NMRUFSKHdyKTsKKyAgICByID0gUHlEaWN0X1NldEl0ZW0odGRpY3QsIHNlbGYtPmtleSwgKFB5T2JqZWN0ICopIGR1bW15KTsKKyAgICBpZiAociA8IDApCisgICAgICAgIGdvdG8gZXJyOworICAgIFB5X0NMRUFSKGR1bW15KTsKKworICAgIFB5X0RFQ1JFRihsZGljdCk7CisgICAgcmV0dXJuIGxkaWN0OworCitlcnI6CisgICAgUHlfWERFQ1JFRihsZGljdCk7CisgICAgUHlfWERFQ1JFRih3cik7CisgICAgUHlfWERFQ1JFRihkdW1teSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBsb2NhbF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQogewogICAgIGxvY2Fsb2JqZWN0ICpzZWxmOwotICAgIFB5T2JqZWN0ICp0ZGljdDsKKyAgICBQeU9iamVjdCAqd3I7CisgICAgc3RhdGljIFB5TWV0aG9kRGVmIHdyX2NhbGxiYWNrX2RlZiA9IHsKKyAgICAgICAgIl9sb2NhbGR1bW15X2Rlc3Ryb3llZCIsIChQeUNGdW5jdGlvbikgX2xvY2FsZHVtbXlfZGVzdHJveWVkLCBNRVRIX08KKyAgICB9OwogCiAgICAgaWYgKHR5cGUtPnRwX2luaXQgPT0gUHlCYXNlT2JqZWN0X1R5cGUudHBfaW5pdAogICAgICAgICAmJiAoKGFyZ3MgJiYgUHlPYmplY3RfSXNUcnVlKGFyZ3MpKQpAQCAtMTkwLDIzICszNDksMjUgQEAKICAgICBzZWxmLT5hcmdzID0gYXJnczsKICAgICBQeV9YSU5DUkVGKGt3KTsKICAgICBzZWxmLT5rdyA9IGt3OwotICAgIHNlbGYtPmRpY3QgPSBOVUxMOyAgICAgICAgICAvKiBtYWtpbmcgc3VyZSAqLwogICAgIHNlbGYtPmtleSA9IFB5U3RyaW5nX0Zyb21Gb3JtYXQoInRocmVhZC5sb2NhbC4lcCIsIHNlbGYpOwogICAgIGlmIChzZWxmLT5rZXkgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnI7CiAKLSAgICBzZWxmLT5kaWN0ID0gUHlEaWN0X05ldygpOwotICAgIGlmIChzZWxmLT5kaWN0ID09IE5VTEwpCisgICAgc2VsZi0+ZHVtbWllcyA9IFB5RGljdF9OZXcoKTsKKyAgICBpZiAoc2VsZi0+ZHVtbWllcyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycjsKIAotICAgIHRkaWN0ID0gUHlUaHJlYWRTdGF0ZV9HZXREaWN0KCk7Ci0gICAgaWYgKHRkaWN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGdldCB0aHJlYWQtc3RhdGUgZGljdGlvbmFyeSIpOworICAgIC8qIFdlIHVzZSBhIHdlYWsgcmVmZXJlbmNlIHRvIHNlbGYgaW4gdGhlIGNhbGxiYWNrIGNsb3N1cmUKKyAgICAgICBpbiBvcmRlciB0byBhdm9pZCBzcHVyaW91cyByZWZlcmVuY2UgY3ljbGVzICovCisgICAgd3IgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCAqKSBzZWxmLCBOVUxMKTsKKyAgICBpZiAod3IgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnI7Ci0gICAgfQorICAgIHNlbGYtPndyX2NhbGxiYWNrID0gUHlDRnVuY3Rpb25fTmV3KCZ3cl9jYWxsYmFja19kZWYsIHdyKTsKKyAgICBQeV9ERUNSRUYod3IpOworICAgIGlmIChzZWxmLT53cl9jYWxsYmFjayA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycjsKIAotICAgIGlmIChQeURpY3RfU2V0SXRlbSh0ZGljdCwgc2VsZi0+a2V5LCBzZWxmLT5kaWN0KSA8IDApCisgICAgaWYgKF9sb2NhbF9jcmVhdGVfZHVtbXkoc2VsZikgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnI7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKQEAgLTIyMSwyMyArMzgyLDE5IEBACiB7CiAgICAgUHlfVklTSVQoc2VsZi0+YXJncyk7CiAgICAgUHlfVklTSVQoc2VsZi0+a3cpOwotICAgIFB5X1ZJU0lUKHNlbGYtPmRpY3QpOworICAgIFB5X1ZJU0lUKHNlbGYtPmR1bW1pZXMpOwogICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CiBsb2NhbF9jbGVhcihsb2NhbG9iamVjdCAqc2VsZikKIHsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7CiAgICAgUHlfQ0xFQVIoc2VsZi0+YXJncyk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+a3cpOwotICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotbG9jYWxfZGVhbGxvYyhsb2NhbG9iamVjdCAqc2VsZikKLXsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZHVtbWllcyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+d3JfY2FsbGJhY2spOworICAgIC8qIFJlbW92ZSBhbGwgc3Ryb25nIHJlZmVyZW5jZXMgdG8gZHVtbWllcyBmcm9tIHRoZSB0aHJlYWQgc3RhdGVzICovCiAgICAgaWYgKHNlbGYtPmtleQogICAgICAgICAmJiAodHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HZXQoKSkKICAgICAgICAgJiYgdHN0YXRlLT5pbnRlcnApIHsKQEAgLTI0OCwxNiArNDA1LDI5IEBACiAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW0odHN0YXRlLT5kaWN0LCBzZWxmLT5rZXkpKQogICAgICAgICAgICAgICAgIFB5RGljdF9EZWxJdGVtKHRzdGF0ZS0+ZGljdCwgc2VsZi0+a2V5KTsKICAgICB9CisgICAgcmV0dXJuIDA7Cit9CiAKLSAgICBQeV9YREVDUkVGKHNlbGYtPmtleSk7CitzdGF0aWMgdm9pZAorbG9jYWxfZGVhbGxvYyhsb2NhbG9iamVjdCAqc2VsZikKK3sKKyAgICAvKiBXZWFrcmVmcyBtdXN0IGJlIGludmFsaWRhdGVkIHJpZ2h0IG5vdywgb3RoZXJ3aXNlIHRoZXkgY2FuIGJlIHVzZWQKKyAgICAgICBmcm9tIGNvZGUgY2FsbGVkIGJlbG93LCB3aGljaCBpcyB2ZXJ5IGRhbmdlcm91cyBzaW5jZSBQeV9SRUZDTlQoc2VsZikgPT0gMCAqLworICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKKworICAgIFB5T2JqZWN0X0dDX1VuVHJhY2soc2VsZik7CisKICAgICBsb2NhbF9jbGVhcihzZWxmKTsKKyAgICBQeV9YREVDUkVGKHNlbGYtPmtleSk7CiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZSgoUHlPYmplY3QqKXNlbGYpOwogfQogCisvKiBSZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRoZSBsb2NhbCBkaWN0LCBjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBfbGRpY3QobG9jYWxvYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlPYmplY3QgKnRkaWN0LCAqbGRpY3Q7CisgICAgUHlPYmplY3QgKnRkaWN0LCAqbGRpY3QsICpkdW1teTsKIAogICAgIHRkaWN0ID0gUHlUaHJlYWRTdGF0ZV9HZXREaWN0KCk7CiAgICAgaWYgKHRkaWN0ID09IE5VTEwpIHsKQEAgLTI2NiwyMiArNDM2LDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGxkaWN0ID0gUHlEaWN0X0dldEl0ZW0odGRpY3QsIHNlbGYtPmtleSk7Ci0gICAgaWYgKGxkaWN0ID09IE5VTEwpIHsKLSAgICAgICAgbGRpY3QgPSBQeURpY3RfTmV3KCk7IC8qIHdlIG93biBsZGljdCAqLwotCisgICAgZHVtbXkgPSBQeURpY3RfR2V0SXRlbSh0ZGljdCwgc2VsZi0+a2V5KTsKKyAgICBpZiAoZHVtbXkgPT0gTlVMTCkgeworICAgICAgICBsZGljdCA9IF9sb2NhbF9jcmVhdGVfZHVtbXkoc2VsZik7CiAgICAgICAgIGlmIChsZGljdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50IGkgPSBQeURpY3RfU2V0SXRlbSh0ZGljdCwgc2VsZi0+a2V5LCBsZGljdCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobGRpY3QpOyAvKiBub3cgbGRpY3QgaXMgYm9ycm93ZWQgKi8KLSAgICAgICAgICAgIGlmIChpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOwotICAgICAgICBQeV9JTkNSRUYobGRpY3QpOwotICAgICAgICBzZWxmLT5kaWN0ID0gbGRpY3Q7IC8qIHN0aWxsIGJvcnJvd2VkICovCiAKICAgICAgICAgaWYgKFB5X1RZUEUoc2VsZiktPnRwX2luaXQgIT0gUHlCYXNlT2JqZWN0X1R5cGUudHBfaW5pdCAmJgogICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfaW5pdCgoUHlPYmplY3QqKXNlbGYsCkBAIC0yOTIsMTUgKzQ1MSwxMCBAQAogICAgICAgICAgICAgUHlEaWN0X0RlbEl0ZW0odGRpY3QsIHNlbGYtPmtleSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotCiAgICAgfQotCi0gICAgLyogVGhlIGNhbGwgdG8gdHBfaW5pdCBhYm92ZSBtYXkgaGF2ZSBjYXVzZWQgYW5vdGhlciB0aHJlYWQgdG8gcnVuLgotICAgICAgIEluc3RhbGwgb3VyIGxkaWN0IGFnYWluLiAqLwotICAgIGlmIChzZWxmLT5kaWN0ICE9IGxkaWN0KSB7Ci0gICAgICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOwotICAgICAgICBQeV9JTkNSRUYobGRpY3QpOwotICAgICAgICBzZWxmLT5kaWN0ID0gbGRpY3Q7CisgICAgZWxzZSB7CisgICAgICAgIGFzc2VydChQeV9UWVBFKGR1bW15KSA9PSAmbG9jYWxkdW1teXR5cGUpOworICAgICAgICBsZGljdCA9ICgobG9jYWxkdW1teW9iamVjdCAqKSBkdW1teSktPmxvY2FsZGljdDsKICAgICB9CiAKICAgICByZXR1cm4gbGRpY3Q7CkBAIC0zMTAsMzIgKzQ2NCwyNSBAQAogbG9jYWxfc2V0YXR0cm8obG9jYWxvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqdikKIHsKICAgICBQeU9iamVjdCAqbGRpY3Q7CisgICAgaW50IHI7CiAKICAgICBsZGljdCA9IF9sZGljdChzZWxmKTsKICAgICBpZiAobGRpY3QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcmV0dXJuIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyKChQeU9iamVjdCAqKXNlbGYsIG5hbWUsIHYpOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotbG9jYWxfZ2V0ZGljdChsb2NhbG9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKLXsKLSAgICBpZiAoc2VsZi0+ZGljdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIl9fZGljdF9fIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgIHIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wobmFtZSwgc3RyX2RpY3QsIFB5X0VRKTsKKyAgICBpZiAociA9PSAxKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICInJS41MHMnIG9iamVjdCBhdHRyaWJ1dGUgJ19fZGljdF9fJyBpcyByZWFkLW9ubHkiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgaWYgKHIgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKIAotICAgIFB5X0lOQ1JFRihzZWxmLT5kaWN0KTsKLSAgICByZXR1cm4gc2VsZi0+ZGljdDsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0dlbmVyaWNTZXRBdHRyV2l0aERpY3QoKFB5T2JqZWN0ICopc2VsZiwgbmFtZSwgdiwgbGRpY3QpOwogfQogCi1zdGF0aWMgUHlHZXRTZXREZWYgbG9jYWxfZ2V0c2V0W10gPSB7Ci0gICAgeyJfX2RpY3RfXyIsIChnZXR0ZXIpbG9jYWxfZ2V0ZGljdCwgKHNldHRlcilOVUxMLAotICAgICAiTG9jYWwtZGF0YSBkaWN0aW9uYXJ5IiwgTlVMTH0sCi0gICAge05VTEx9ICAvKiBTZW50aW5lbCAqLwotfTsKLQogc3RhdGljIFB5T2JqZWN0ICpsb2NhbF9nZXRhdHRybyhsb2NhbG9iamVjdCAqLCBQeU9iamVjdCAqKTsKIAogc3RhdGljIFB5VHlwZU9iamVjdCBsb2NhbHR5cGUgPSB7CkBAIC0zNTgsMjIgKzUwNSwyMyBAQAogICAgIC8qIHRwX2dldGF0dHJvICAgICAgICovIChnZXRhdHRyb2Z1bmMpbG9jYWxfZ2V0YXR0cm8sCiAgICAgLyogdHBfc2V0YXR0cm8gICAgICAgKi8gKHNldGF0dHJvZnVuYylsb2NhbF9zZXRhdHRybywKICAgICAvKiB0cF9hc19idWZmZXIgICAgICAqLyAwLAotICAgIC8qIHRwX2ZsYWdzICAgICAgICAgICovIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsCisgICAgLyogdHBfZmxhZ3MgICAgICAgICAgKi8gUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywKICAgICAvKiB0cF9kb2MgICAgICAgICAgICAqLyAiVGhyZWFkLWxvY2FsIGRhdGEiLAogICAgIC8qIHRwX3RyYXZlcnNlICAgICAgICovICh0cmF2ZXJzZXByb2MpbG9jYWxfdHJhdmVyc2UsCiAgICAgLyogdHBfY2xlYXIgICAgICAgICAgKi8gKGlucXVpcnkpbG9jYWxfY2xlYXIsCiAgICAgLyogdHBfcmljaGNvbXBhcmUgICAgKi8gMCwKLSAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLyAwLAorICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovIG9mZnNldG9mKGxvY2Fsb2JqZWN0LCB3ZWFrcmVmbGlzdCksCiAgICAgLyogdHBfaXRlciAgICAgICAgICAgKi8gMCwKICAgICAvKiB0cF9pdGVybmV4dCAgICAgICAqLyAwLAogICAgIC8qIHRwX21ldGhvZHMgICAgICAgICovIDAsCiAgICAgLyogdHBfbWVtYmVycyAgICAgICAgKi8gMCwKLSAgICAvKiB0cF9nZXRzZXQgICAgICAgICAqLyBsb2NhbF9nZXRzZXQsCisgICAgLyogdHBfZ2V0c2V0ICAgICAgICAgKi8gMCwKICAgICAvKiB0cF9iYXNlICAgICAgICAgICAqLyAwLAogICAgIC8qIHRwX2RpY3QgICAgICAgICAgICovIDAsIC8qIGludGVybmFsIHVzZSAqLwogICAgIC8qIHRwX2Rlc2NyX2dldCAgICAgICovIDAsCiAgICAgLyogdHBfZGVzY3Jfc2V0ICAgICAgKi8gMCwKLSAgICAvKiB0cF9kaWN0b2Zmc2V0ICAgICAqLyBvZmZzZXRvZihsb2NhbG9iamVjdCwgZGljdCksCisgICAgLyogdHBfZGljdG9mZnNldCAgICAgKi8gMCwKICAgICAvKiB0cF9pbml0ICAgICAgICAgICAqLyAwLAogICAgIC8qIHRwX2FsbG9jICAgICAgICAgICovIDAsCiAgICAgLyogdHBfbmV3ICAgICAgICAgICAgKi8gbG9jYWxfbmV3LApAQCAtMzg1LDI1ICs1MzMsNjIgQEAKIGxvY2FsX2dldGF0dHJvKGxvY2Fsb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbGRpY3QsICp2YWx1ZTsKKyAgICBpbnQgcjsKIAogICAgIGxkaWN0ID0gX2xkaWN0KHNlbGYpOwogICAgIGlmIChsZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIHIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wobmFtZSwgc3RyX2RpY3QsIFB5X0VRKTsKKyAgICBpZiAociA9PSAxKSB7CisgICAgICAgIFB5X0lOQ1JFRihsZGljdCk7CisgICAgICAgIHJldHVybiBsZGljdDsKKyAgICB9CisgICAgaWYgKHIgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKFB5X1RZUEUoc2VsZikgIT0gJmxvY2FsdHlwZSkKICAgICAgICAgLyogdXNlIGdlbmVyaWMgbG9va3VwIGZvciBzdWJ0eXBlcyAqLwotICAgICAgICByZXR1cm4gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIoKFB5T2JqZWN0ICopc2VsZiwgbmFtZSk7CisgICAgICAgIHJldHVybiBfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJXaXRoRGljdCgoUHlPYmplY3QgKilzZWxmLCBuYW1lLCBsZGljdCk7CiAKICAgICAvKiBPcHRpbWl6YXRpb246IGp1c3QgbG9vayBpbiBkaWN0IG91cnNlbHZlcyAqLwogICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW0obGRpY3QsIG5hbWUpOwogICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICAvKiBGYWxsIGJhY2sgb24gZ2VuZXJpYyB0byBnZXQgX19jbGFzc19fIGFuZCBfX2RpY3RfXyAqLwotICAgICAgICByZXR1cm4gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIoKFB5T2JqZWN0ICopc2VsZiwgbmFtZSk7CisgICAgICAgIHJldHVybiBfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJXaXRoRGljdCgoUHlPYmplY3QgKilzZWxmLCBuYW1lLCBsZGljdCk7CiAKICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorLyogQ2FsbGVkIHdoZW4gYSBkdW1teSBpcyBkZXN0cm95ZWQuICovCitzdGF0aWMgUHlPYmplY3QgKgorX2xvY2FsZHVtbXlfZGVzdHJveWVkKFB5T2JqZWN0ICpsb2NhbHdlYWtyZWYsIFB5T2JqZWN0ICpkdW1teXdlYWtyZWYpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBsb2NhbG9iamVjdCAqc2VsZjsKKyAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKGxvY2Fsd2Vha3JlZikpOworICAgIG9iaiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKGxvY2Fsd2Vha3JlZik7CisgICAgaWYgKG9iaiA9PSBQeV9Ob25lKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICBQeV9JTkNSRUYob2JqKTsKKyAgICBhc3NlcnQoUHlPYmplY3RfVHlwZUNoZWNrKG9iaiwgJmxvY2FsdHlwZSkpOworICAgIC8qIElmIHRoZSB0aHJlYWQtbG9jYWwgb2JqZWN0IGlzIHN0aWxsIGFsaXZlIGFuZCBub3QgYmVpbmcgY2xlYXJlZCwKKyAgICAgICByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgbG9jYWwgZGljdCAqLworICAgIHNlbGYgPSAobG9jYWxvYmplY3QgKikgb2JqOworICAgIGlmIChzZWxmLT5kdW1taWVzICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKmxkaWN0OworICAgICAgICBsZGljdCA9IFB5RGljdF9HZXRJdGVtKHNlbGYtPmR1bW1pZXMsIGR1bW15d2Vha3JlZik7CisgICAgICAgIGlmIChsZGljdCAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeURpY3RfRGVsSXRlbShzZWxmLT5kdW1taWVzLCBkdW1teXdlYWtyZWYpOworICAgICAgICB9CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKG9iaik7CisgICAgfQorICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCiAvKiBNb2R1bGUgZnVuY3Rpb25zICovCiAKIHN0cnVjdCBib290c3RhdGUgewpAQCAtNDI1LDYgKzYxMCw3IEBACiAgICAgdHN0YXRlLT50aHJlYWRfaWQgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7CiAgICAgX1B5VGhyZWFkU3RhdGVfSW5pdCh0c3RhdGUpOwogICAgIFB5RXZhbF9BY3F1aXJlVGhyZWFkKHRzdGF0ZSk7CisgICAgbmJfdGhyZWFkcysrOwogICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzKAogICAgICAgICBib290LT5mdW5jLCBib290LT5hcmdzLCBib290LT5rZXl3KTsKICAgICBpZiAocmVzID09IE5VTEwpIHsKQEAgLTQ0OSw2ICs2MzUsNyBAQAogICAgIFB5X0RFQ1JFRihib290LT5hcmdzKTsKICAgICBQeV9YREVDUkVGKGJvb3QtPmtleXcpOwogICAgIFB5TWVtX0RFTChib290X3Jhdyk7CisgICAgbmJfdGhyZWFkcy0tOwogICAgIFB5VGhyZWFkU3RhdGVfQ2xlYXIodHN0YXRlKTsKICAgICBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQoKTsKICAgICBQeVRocmVhZF9leGl0X3RocmVhZCgpOwpAQCAtNTQ4LDE4ICs3MzUsNiBAQAogQSBzdWJ0aHJlYWQgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGludGVycnVwdCB0aGUgbWFpbiB0aHJlYWQuIgogKTsKIAotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyBQeU9iamVjdCAqCi10aHJlYWRfUHlUaHJlYWRfZXhpdF9wcm9nKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBpbnQgc3RzOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpleGl0X3Byb2ciLCAmc3RzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfRXhpdChzdHMpOyAvKiBDYWxscyBQeVRocmVhZF9leGl0X3Byb2coc3RzKSBvciBfUHlUaHJlYWRfZXhpdF9wcm9nKHN0cykgKi8KLSAgICBmb3IgKDs7KSB7IH0gLyogU2hvdWxkIG5vdCBiZSByZWFjaGVkICovCi19Ci0jZW5kaWYKLQogc3RhdGljIGxvY2tvYmplY3QgKm5ld2xvY2tvYmplY3Qodm9pZCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NzIsNyArNzQ3LDcgQEAKICJhbGxvY2F0ZV9sb2NrKCkgLT4gbG9jayBvYmplY3RcblwKIChhbGxvY2F0ZSgpIGlzIGFuIG9ic29sZXRlIHN5bm9ueW0pXG5cCiBcblwKLUNyZWF0ZSBhIG5ldyBsb2NrIG9iamVjdC4gIFNlZSBMb2NrVHlwZS5fX2RvY19fIGZvciBpbmZvcm1hdGlvbiBhYm91dCBsb2Nrcy4iKTsKK0NyZWF0ZSBhIG5ldyBsb2NrIG9iamVjdC4gIFNlZSBoZWxwKExvY2tUeXBlKSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgbG9ja3MuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiB0aHJlYWRfZ2V0X2lkZW50KFB5T2JqZWN0ICpzZWxmKQpAQCAtNTk4LDYgKzc3MywyNCBAQAogQSB0aHJlYWQncyBpZGVudGl0eSBtYXkgYmUgcmV1c2VkIGZvciBhbm90aGVyIHRocmVhZCBhZnRlciBpdCBleGl0cy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKK3RocmVhZF9fY291bnQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKG5iX3RocmVhZHMpOworfQorCitQeURvY19TVFJWQVIoX2NvdW50X2RvYywKKyJfY291bnQoKSAtPiBpbnRlZ2VyXG5cCitcblwKK1wKK1JldHVybiB0aGUgbnVtYmVyIG9mIGN1cnJlbnRseSBydW5uaW5nIFB5dGhvbiB0aHJlYWRzLCBleGNsdWRpbmcgXG5cCit0aGUgbWFpbiB0aHJlYWQuIFRoZSByZXR1cm5lZCBudW1iZXIgY29tcHJpc2VzIGFsbCB0aHJlYWRzIGNyZWF0ZWRcblwKK3Rocm91Z2ggYHN0YXJ0X25ld190aHJlYWQoKWAgYXMgd2VsbCBhcyBgdGhyZWFkaW5nLlRocmVhZGAsIGFuZCBub3RcblwKK3lldCBmaW5pc2hlZC5cblwKK1xuXAorVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgYW5kIHNwZWNpYWxpemVkIHB1cnBvc2VzIG9ubHkuXG5cCitJbiBtb3N0IGFwcGxpY2F0aW9ucyBgdGhyZWFkaW5nLmVudW1lcmF0ZSgpYCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgogdGhyZWFkX3N0YWNrX3NpemUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHNpemVfdCBvbGRfc2l6ZTsKQEAgLTY3MCwxMyArODYzLDExIEBACiAgICAgIE1FVEhfTk9BUkdTLCBpbnRlcnJ1cHRfZG9jfSwKICAgICB7ImdldF9pZGVudCIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRocmVhZF9nZXRfaWRlbnQsCiAgICAgIE1FVEhfTk9BUkdTLCBnZXRfaWRlbnRfZG9jfSwKKyAgICB7Il9jb3VudCIsICAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRocmVhZF9fY291bnQsCisgICAgIE1FVEhfTk9BUkdTLCBfY291bnRfZG9jfSwKICAgICB7InN0YWNrX3NpemUiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRocmVhZF9zdGFja19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja19zaXplX2RvY30sCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotICAgIHsiZXhpdF9wcm9nIiwgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGhyZWFkX1B5VGhyZWFkX2V4aXRfcHJvZywKLSAgICAgTUVUSF9WQVJBUkdTfSwKLSNlbmRpZgogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTcwNSw2ICs4OTYsOCBAQAogICAgIFB5T2JqZWN0ICptLCAqZDsKIAogICAgIC8qIEluaXRpYWxpemUgdHlwZXM6ICovCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmbG9jYWxkdW1teXR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJmxvY2FsdHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CiAKQEAgLTcxOCw2ICs5MTEsOCBAQAogICAgIFRocmVhZEVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJ0aHJlYWQuZXJyb3IiLCBOVUxMLCBOVUxMKTsKICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiZXJyb3IiLCBUaHJlYWRFcnJvcik7CiAgICAgTG9ja3R5cGUudHBfZG9jID0gbG9ja19kb2M7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmTG9ja3R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuOwogICAgIFB5X0lOQ1JFRigmTG9ja3R5cGUpOwogICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJMb2NrVHlwZSIsIChQeU9iamVjdCAqKSZMb2NrdHlwZSk7CiAKQEAgLTcyNSw2ICs5MjAsMTIgQEAKICAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJfbG9jYWwiLCAoUHlPYmplY3QgKikmbG9jYWx0eXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKIAorICAgIG5iX3RocmVhZHMgPSAwOworCisgICAgc3RyX2RpY3QgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJfX2RpY3RfXyIpOworICAgIGlmIChzdHJfZGljdCA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKICAgICAvKiBJbml0aWFsaXplIHRoZSBDIHRocmVhZCBsaWJyYXJ5ICovCiAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvdGltZW1vZHVsZS5jIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKaW5kZXggYTU5ZDNmMC4uNjFjMWNjYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy90aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKQEAgLTIxNiwyMSArMjE2LDI3IEBACiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBmb3Igc3Vic2Vjb25kIHByZWNpc2lvbi4iKTsKIAogc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRmllbGQgc3RydWN0X3RpbWVfdHlwZV9maWVsZHNbXSA9IHsKLSAgICB7InRtX3llYXIiLCBOVUxMfSwKLSAgICB7InRtX21vbiIsIE5VTEx9LAotICAgIHsidG1fbWRheSIsIE5VTEx9LAotICAgIHsidG1faG91ciIsIE5VTEx9LAotICAgIHsidG1fbWluIiwgTlVMTH0sCi0gICAgeyJ0bV9zZWMiLCBOVUxMfSwKLSAgICB7InRtX3dkYXkiLCBOVUxMfSwKLSAgICB7InRtX3lkYXkiLCBOVUxMfSwKLSAgICB7InRtX2lzZHN0IiwgTlVMTH0sCisgICAgeyJ0bV95ZWFyIiwgInllYXIsIGZvciBleGFtcGxlLCAxOTkzIn0sCisgICAgeyJ0bV9tb24iLCAibW9udGggb2YgeWVhciwgcmFuZ2UgWzEsIDEyXSJ9LAorICAgIHsidG1fbWRheSIsICJkYXkgb2YgbW9udGgsIHJhbmdlIFsxLCAzMV0ifSwKKyAgICB7InRtX2hvdXIiLCAiaG91cnMsIHJhbmdlIFswLCAyM10ifSwKKyAgICB7InRtX21pbiIsICJtaW51dGVzLCByYW5nZSBbMCwgNTldIn0sCisgICAgeyJ0bV9zZWMiLCAic2Vjb25kcywgcmFuZ2UgWzAsIDYxXSkifSwKKyAgICB7InRtX3dkYXkiLCAiZGF5IG9mIHdlZWssIHJhbmdlIFswLCA2XSwgTW9uZGF5IGlzIDAifSwKKyAgICB7InRtX3lkYXkiLCAiZGF5IG9mIHllYXIsIHJhbmdlIFsxLCAzNjZdIn0sCisgICAgeyJ0bV9pc2RzdCIsICIxIGlmIHN1bW1lciB0aW1lIGlzIGluIGVmZmVjdCwgMCBpZiBub3QsIGFuZCAtMSBpZiB1bmtub3duIn0sCiAgICAgezB9CiB9OwogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjIHN0cnVjdF90aW1lX3R5cGVfZGVzYyA9IHsKICAgICAidGltZS5zdHJ1Y3RfdGltZSIsCi0gICAgTlVMTCwKKyAgICAiVGhlIHRpbWUgdmFsdWUgYXMgcmV0dXJuZWQgYnkgZ210aW1lKCksIGxvY2FsdGltZSgpLCBhbmQgc3RycHRpbWUoKSwgYW5kXG4iCisgICAgIiBhY2NlcHRlZCBieSBhc2N0aW1lKCksIG1rdGltZSgpIGFuZCBzdHJmdGltZSgpLiAgTWF5IGJlIGNvbnNpZGVyZWQgYXMgYVxuIgorICAgICIgc2VxdWVuY2Ugb2YgOSBpbnRlZ2Vycy5cblxuIgorICAgICIgTm90ZSB0aGF0IHNldmVyYWwgZmllbGRzJyB2YWx1ZXMgYXJlIG5vdCB0aGUgc2FtZSBhcyB0aG9zZSBkZWZpbmVkIGJ5XG4iCisgICAgIiB0aGUgQyBsYW5ndWFnZSBzdGFuZGFyZCBmb3Igc3RydWN0IHRtLiAgRm9yIGV4YW1wbGUsIHRoZSB2YWx1ZSBvZiB0aGVcbiIKKyAgICAiIGZpZWxkIHRtX3llYXIgaXMgdGhlIGFjdHVhbCB5ZWFyLCBub3QgeWVhciAtIDE5MDAuICBTZWUgaW5kaXZpZHVhbFxuIgorICAgICIgZmllbGRzJyBkZXNjcmlwdGlvbnMgZm9yIGRldGFpbHMuIiwKICAgICBzdHJ1Y3RfdGltZV90eXBlX2ZpZWxkcywKICAgICA5LAogfTsKQEAgLTQwNSw4ICs0MTEsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIENoZWNrcyBhZGRlZCB0byBtYWtlIHN1cmUgc3RyZnRpbWUoKSBkb2VzIG5vdCBjcmFzaCBQeXRob24gYnkKLSAgICAgICAgaW5kZXhpbmcgYmxpbmRseSBpbnRvIHNvbWUgYXJyYXkgZm9yIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbgotICAgICAgICBieSBzb21lIGJhZCBpbmRleCAoZml4ZXMgYnVnICM4OTc2MjUpLgorICAgICAgIGluZGV4aW5nIGJsaW5kbHkgaW50byBzb21lIGFycmF5IGZvciBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24KKyAgICAgICBieSBzb21lIGJhZCBpbmRleCAoZml4ZXMgYnVnICM4OTc2MjUpLgogCiAgICAgICAgIEFsc28gc3VwcG9ydCB2YWx1ZXMgb2YgemVybyBmcm9tIFB5dGhvbiBjb2RlIGZvciBhcmd1bWVudHMgaW4gd2hpY2gKICAgICAgICAgdGhhdCBpcyBvdXQgb2YgcmFuZ2UgYnkgZm9yY2luZyB0aGF0IHZhbHVlIHRvIHRoZSBsb3dlc3QgdmFsdWUgdGhhdApAQCAtNDMyLDEzICs0MzgsMTMgQEAKICAgICAgICAgYnVmLnRtX21vbiA9IDA7CiAgICAgZWxzZSBpZiAoYnVmLnRtX21vbiA8IDAgfHwgYnVmLnRtX21vbiA+IDExKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibW9udGggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChidWYudG1fbWRheSA9PSAwKQogICAgICAgICBidWYudG1fbWRheSA9IDE7CiAgICAgZWxzZSBpZiAoYnVmLnRtX21kYXkgPCAwIHx8IGJ1Zi50bV9tZGF5ID4gMzEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJkYXkgb2YgbW9udGggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChidWYudG1faG91ciA8IDAgfHwgYnVmLnRtX2hvdXIgPiAyMykgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImhvdXIgb3V0IG9mIHJhbmdlIik7CkBAIC00NjQsMTEgKzQ3MCwzMCBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImRheSBvZiB5ZWFyIG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGJ1Zi50bV9pc2RzdCA8IC0xIHx8IGJ1Zi50bV9pc2RzdCA+IDEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZGF5bGlnaHQgc2F2aW5ncyBmbGFnIG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBOb3JtYWxpemUgdG1faXNkc3QganVzdCBpbiBjYXNlIHNvbWVvbmUgZm9vbGlzaGx5IGltcGxlbWVudHMgJVoKKyAgICAgICBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRtX2lzZHN0IGZhbGxzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YKKyAgICAgICBbLTEsIDFdICovCisgICAgaWYgKGJ1Zi50bV9pc2RzdCA8IC0xKQorICAgICAgICBidWYudG1faXNkc3QgPSAtMTsKKyAgICBlbHNlIGlmIChidWYudG1faXNkc3QgPiAxKQorICAgICAgICBidWYudG1faXNkc3QgPSAxOworCisjaWZkZWYgTVNfV0lORE9XUworICAgIC8qIGNoZWNrIHRoYXQgdGhlIGZvcm1hdCBzdHJpbmcgY29udGFpbnMgb25seSB2YWxpZCBkaXJlY3RpdmVzICovCisgICAgZm9yKG91dGJ1ZiA9IHN0cmNocihmbXQsICclJyk7CisgICAgICAgIG91dGJ1ZiAhPSBOVUxMOworICAgICAgICBvdXRidWYgPSBzdHJjaHIob3V0YnVmKzIsICclJykpCisgICAgeworICAgICAgICBpZiAob3V0YnVmWzFdPT0nIycpCisgICAgICAgICAgICArK291dGJ1ZjsgLyogbm90IGRvY3VtZW50ZWQgYnkgcHl0aG9uLCAqLworICAgICAgICBpZiAob3V0YnVmWzFdPT0nXDAnIHx8CisgICAgICAgICAgICAhc3RyY2hyKCJhQWJCY2RmSElqbU1wU1V3V3hYeVl6WiUiLCBvdXRidWZbMV0pKQorICAgICAgICB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgZm9ybWF0IHN0cmluZyIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICB9CisjZW5kaWYKIAogICAgIGZtdGxlbiA9IHN0cmxlbihmbXQpOwogCkBAIC01MTksOCArNTQ0LDkgQEAKICAgICBQeU9iamVjdCAqc3RycHRpbWVfcmVzdWx0OwogCiAgICAgaWYgKCFzdHJwdGltZV9tb2R1bGUpCi0gICAgcmV0dXJuIE5VTEw7Ci0gICAgc3RycHRpbWVfcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzdHJwdGltZV9tb2R1bGUsICJfc3RycHRpbWVfdGltZSIsICJPIiwgYXJncyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0cnB0aW1lX3Jlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc3RycHRpbWVfbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3N0cnB0aW1lX3RpbWUiLCAiTyIsIGFyZ3MpOwogICAgIFB5X0RFQ1JFRihzdHJwdGltZV9tb2R1bGUpOwogICAgIHJldHVybiBzdHJwdGltZV9yZXN1bHQ7CiB9CkBAIC02MDYsOCArNjMyLDExIEBACiAgICAgdGltZV90IHR0OwogICAgIGlmICghZ2V0dG1hcmcodHVwLCAmYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnVmLnRtX3dkYXkgPSAtMTsgIC8qIHNlbnRpbmVsOyBvcmlnaW5hbCB2YWx1ZSBpZ25vcmVkICovCiAgICAgdHQgPSBta3RpbWUoJmJ1Zik7Ci0gICAgaWYgKHR0ID09ICh0aW1lX3QpKC0xKSkgeworICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLCBidXQgdG1fd2RheQorICAgICAqIGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWRkZWQuICovCisgICAgaWYgKHR0ID09ICh0aW1lX3QpKC0xKSAmJiBidWYudG1fd2RheSA9PSAtMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJta3RpbWUgYXJndW1lbnQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjQ1LDcgKzY3NCw3IEBACiB9CiAKIFB5RG9jX1NUUlZBUih0enNldF9kb2MsCi0idHpzZXQoem9uZSlcblwKKyJ0enNldCgpXG5cCiBcblwKIEluaXRpYWxpemUsIG9yIHJlaW5pdGlhbGl6ZSwgdGhlIGxvY2FsIHRpbWV6b25lIHRvIHRoZSB2YWx1ZSBzdG9yZWQgaW5cblwKIG9zLmVudmlyb25bJ1RaJ10uIFRoZSBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZSBzaG91bGQgYmUgc3BlY2lmaWVkIGluXG5cCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3RrYXBwaW5pdC5jIGIvTW9kdWxlcy90a2FwcGluaXQuYwppbmRleCAwNWM0OGE0Li5jMWY5N2IwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3RrYXBwaW5pdC5jCisrKyBiL01vZHVsZXMvdGthcHBpbml0LmMKQEAgLTE2LDExICsxNiwyMSBAQAogI2luY2x1ZGUgPHRjbC5oPgogI2luY2x1ZGUgPHRrLmg+CiAKKyNpbmNsdWRlICJ0a2ludGVyLmgiCisKKyNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCisvKiBTZWUgVGthcHBfVGtJbml0IGluIF90a2ludGVyLmMgZm9yIHRoZSB1c2FnZSBvZiB0a19sb2FkX2ZhaWxlICovCitzdGF0aWMgaW50IHRrX2xvYWRfZmFpbGVkOworI2VuZGlmCisKIGludAogVGNsX0FwcEluaXQoVGNsX0ludGVycCAqaW50ZXJwKQogewogICAgIFRrX1dpbmRvdyBtYWluX3dpbmRvdzsKLSAgICBjb25zdCBjaGFyICogX3RraW50ZXJfc2tpcF90a19pbml0OworICAgIGNvbnN0IGNoYXIgKl90a2ludGVyX3NraXBfdGtfaW5pdDsKKyNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCisgICAgY29uc3QgY2hhciAqX3RraW50ZXJfdGtfZmFpbGVkOworI2VuZGlmCiAKICNpZmRlZiBUS19BUVVBCiAjaWZuZGVmIE1BWF9QQVRIX0xFTgpAQCAtNzQsMTIgKzg0LDMyIEBACiAgICAgICAgIC8qIEluaXRpYWxpemUgbW9kdWxlcyB0aGF0IGRvbid0IHJlcXVpcmUgVGsgKi8KICNlbmRpZgogCi0gICAgX3RraW50ZXJfc2tpcF90a19pbml0ID0gICAgIFRjbF9HZXRWYXIoaW50ZXJwLCAiX3RraW50ZXJfc2tpcF90a19pbml0IiwgVENMX0dMT0JBTF9PTkxZKTsKLSAgICBpZiAoX3RraW50ZXJfc2tpcF90a19pbml0ICE9IE5VTEwgJiYgc3RyY21wKF90a2ludGVyX3NraXBfdGtfaW5pdCwgIjEiKSAgICAgPT0gMCkgeworICAgIF90a2ludGVyX3NraXBfdGtfaW5pdCA9ICAgICBUY2xfR2V0VmFyKGludGVycCwKKyAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyX3NraXBfdGtfaW5pdCIsIFRDTF9HTE9CQUxfT05MWSk7CisgICAgaWYgKF90a2ludGVyX3NraXBfdGtfaW5pdCAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgICAgIHN0cmNtcChfdGtpbnRlcl9za2lwX3RrX2luaXQsICIxIikgPT0gMCkgewogICAgICAgICByZXR1cm4gVENMX09LOwogICAgIH0KLSAgICBpZiAoVGtfSW5pdChpbnRlcnApID09IFRDTF9FUlJPUikKKworI2lmZGVmIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKKyAgICBfdGtpbnRlcl90a19mYWlsZWQgPSBUY2xfR2V0VmFyKGludGVycCwKKyAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyX3RrX2ZhaWxlZCIsIFRDTF9HTE9CQUxfT05MWSk7CisKKyAgICBpZiAodGtfbG9hZF9mYWlsZWQgfHwgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90a2ludGVyX3RrX2ZhaWxlZCAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY21wKF90a2ludGVyX3RrX2ZhaWxlZCwgIjEiKSA9PSAwKSkgeworICAgICAgICBUY2xfU2V0UmVzdWx0KGludGVycCwgVEtJTlRFUl9MT0FEVEtfRVJSTVNHLCBUQ0xfU1RBVElDKTsKICAgICAgICAgcmV0dXJuIFRDTF9FUlJPUjsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChUa19Jbml0KGludGVycCkgPT0gVENMX0VSUk9SKSB7CisjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSworICAgICAgICB0a19sb2FkX2ZhaWxlZCA9IDE7CisgICAgICAgIFRjbF9TZXRWYXIoaW50ZXJwLCAiX3RraW50ZXJfdGtfZmFpbGVkIiwgIjEiLCBUQ0xfR0xPQkFMX09OTFkpOworI2VuZGlmCisgICAgICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgfQogCiAgICAgbWFpbl93aW5kb3cgPSBUa19NYWluV2luZG93KGludGVycCk7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvdGtpbnRlci5oIGIvTW9kdWxlcy90a2ludGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlNTBjZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvdGtpbnRlci5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgVEtJTlRFUl9ICisjZGVmaW5lIFRLSU5URVJfSAorCisvKiBUaGlzIGhlYWRlciBpcyB1c2VkIHRvIHNoYXJlIHNvbWUgbWFjcm9zIGJldHdlZW4gX3RraW50ZXIuYyBhbmQKKyAqIHRrYXBwaW5pdC5jLgorICogQmUgc3VyZSB0byBpbmNsdWRlIHRrLmggYmVmb3JlIGluY2x1ZGluZyB0aGlzIGhlYWRlciBzbworICogVEtfVkVSU0lPTl9IRVggaXMgcHJvcGVybHkgZGVmaW5lZC4gKi8KKworLyogVEtfUkVMRUFTRV9MRVZFTCBpcyBhbHdheXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKglUQ0xfQUxQSEFfUkVMRUFTRSAgIDAKKyAqICBUQ0xfQkVUQV9SRUxFQVNFICAgIDEKKyAqICBUQ0xfRklOQUxfUkVMRUFTRSAgIDIKKyAqLworI2RlZmluZSBUS19WRVJTSU9OX0hFWCAoKFRLX01BSk9SX1ZFUlNJT04gPDwgMjQpIHwgXAorCQkoVEtfTUlOT1JfVkVSU0lPTiA8PCAxNikgfCBcCisJCShUS19SRUxFQVNFX1NFUklBTCA8PCA4KSB8IFwKKwkJKFRLX1JFTEVBU0VfTEVWRUwgPDwgMCkpCisKKy8qIFByb3RlY3QgVGsgOC40LjEzIGFuZCBvbGRlciBmcm9tIGEgZGVhZGxvY2sgdGhhdCBoYXBwZW5zIHdoZW4gdHJ5aW5nCisgKiB0byBsb2FkIHRrIGFmdGVyIGEgZmFpbGVkIGF0dGVtcHQuICovCisjaWYgVEtfVkVSU0lPTl9IRVggPCAweDA4MDQwZTAyCisjZGVmaW5lIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKKyNkZWZpbmUgVEtJTlRFUl9MT0FEVEtfRVJSTVNHIFwKKwkiQ2FsbGluZyBUa19Jbml0IGFnYWluIGFmdGVyIGEgcHJldmlvdXMgY2FsbCBmYWlsZWQgbWlnaHQgZGVhZGxvY2siCisjZW5kaWYKKworI2VuZGlmIC8qICFUS0lOVEVSX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZWRhdGEuYyBiL01vZHVsZXMvdW5pY29kZWRhdGEuYwppbmRleCAwM2I4NjkwLi5lMzlhNGQ2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKKysrIGIvTW9kdWxlcy91bmljb2RlZGF0YS5jCkBAIC0xLDggKzEsOCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgIHVuaWNvZGVkYXRhIC0tIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgVW5pY29kZSA1LjEgZGF0YSBiYXNlLgorICAgdW5pY29kZWRhdGEgLS0gUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbmljb2RlIDUuMiBkYXRhIGJhc2UuCiAKLSAgIERhdGEgd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBVbmljb2RlIDUuMSBVbmljb2RlRGF0YS50eHQgZmlsZS4KKyAgIERhdGEgd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBVbmljb2RlIDUuMiBVbmljb2RlRGF0YS50eHQgZmlsZS4KIAogICAgV3JpdHRlbiBieSBNYXJjLUFuZHJlIExlbWJ1cmcgKG1hbEBsZW1idXJnLmNvbSkuCiAgICBNb2RpZmllZCBmb3IgUHl0aG9uIDIuMCBieSBGcmVkcmlrIEx1bmRoIChmcmVkcmlrQHB5dGhvbndhcmUuY29tKQpAQCAtMjcsNiArMjcsNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWlycm9yZWQ7ICAgICAgIC8qIHRydWUgaWYgbWlycm9yZWQgaW4gYmlkaXIgbW9kZSAqLwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWFzdF9hc2lhbl93aWR0aDsgICAgICAgLyogaW5kZXggaW50bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9FYXN0QXNpYW5XaWR0aCAqLworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbm9ybWFsaXphdGlvbl9xdWlja19jaGVjazsgLyogc2VlIGlzX25vcm1hbGl6ZWQoKSAqLwogfSBfUHlVbmljb2RlX0RhdGFiYXNlUmVjb3JkOwogCiB0eXBlZGVmIHN0cnVjdCBjaGFuZ2VfcmVjb3JkIHsKQEAgLTM1LDcgKzM2LDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNhdGVnb3J5X2NoYW5nZWQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBkZWNpbWFsX2NoYW5nZWQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBtaXJyb3JlZF9jaGFuZ2VkOwotICAgIGNvbnN0IGludCBudW1lcmljX2NoYW5nZWQ7CisgICAgY29uc3QgZG91YmxlIG51bWVyaWNfY2hhbmdlZDsKIH0gY2hhbmdlX3JlY29yZDsKIAogLyogZGF0YSBmaWxlIGdlbmVyYXRlZCBieSBUb29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSAqLwpAQCAtNzI2LDYgKzcyNywzOCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qIFJldHVybiAxIGlmIHRoZSBpbnB1dCBpcyBjZXJ0YWlubHkgbm9ybWFsaXplZCwgMCBpZiBpdCBtaWdodCBub3QgYmUuICovCitzdGF0aWMgaW50Citpc19ub3JtYWxpemVkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5wdXQsIGludCBuZmMsIGludCBrKQoreworICAgIFB5X1VOSUNPREUgKmksICplbmQ7CisgICAgdW5zaWduZWQgY2hhciBwcmV2X2NvbWJpbmluZyA9IDAsIHF1aWNrY2hlY2tfbWFzazsKKworICAgIC8qIEFuIG9sZGVyIHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIGlzIHJlcXVlc3RlZCwgcXVpY2tjaGVja3MgbXVzdCBiZQorICAgICAgIGRpc2FibGVkLiAqLworICAgIGlmIChzZWxmICE9IE5VTEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogVGhlIHR3byBxdWlja2NoZWNrIGJpdHMgYXQgdGhpcyBzaGlmdCBtZWFuIDA9WWVzLCAxPU1heWJlLCAyPU5vLAorICAgICAgIGFzIGRlc2NyaWJlZCBpbiBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjE1LyNBbm5leDguICovCisgICAgcXVpY2tjaGVja19tYXNrID0gMyA8PCAoKG5mYyA/IDQgOiAwKSArIChrID8gMiA6IDApKTsKKworICAgIGkgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShpbnB1dCk7CisgICAgZW5kID0gaSArIFB5VW5pY29kZV9HRVRfU0laRShpbnB1dCk7CisgICAgd2hpbGUgKGkgPCBlbmQpIHsKKyAgICAgICAgY29uc3QgX1B5VW5pY29kZV9EYXRhYmFzZVJlY29yZCAqcmVjb3JkID0gX2dldHJlY29yZF9leCgqaSsrKTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjb21iaW5pbmcgPSByZWNvcmQtPmNvbWJpbmluZzsKKyAgICAgICAgdW5zaWduZWQgY2hhciBxdWlja2NoZWNrID0gcmVjb3JkLT5ub3JtYWxpemF0aW9uX3F1aWNrX2NoZWNrOworCisgICAgICAgIGlmIChxdWlja2NoZWNrICYgcXVpY2tjaGVja19tYXNrKQorICAgICAgICAgICAgcmV0dXJuIDA7IC8qIHRoaXMgc3RyaW5nIG1pZ2h0IG5lZWQgbm9ybWFsaXphdGlvbiAqLworICAgICAgICBpZiAoY29tYmluaW5nICYmIHByZXZfY29tYmluaW5nID4gY29tYmluaW5nKQorICAgICAgICAgICAgcmV0dXJuIDA7IC8qIG5vbi1jYW5vbmljYWwgc29ydCBvcmRlciwgbm90IG5vcm1hbGl6ZWQgKi8KKyAgICAgICAgcHJldl9jb21iaW5pbmcgPSBjb21iaW5pbmc7CisgICAgfQorICAgIHJldHVybiAxOyAvKiBjZXJ0YWlubHkgbm9ybWFsaXplZCAqLworfQorCiBQeURvY19TVFJWQVIodW5pY29kZWRhdGFfbm9ybWFsaXplX19kb2NfXywKICJub3JtYWxpemUoZm9ybSwgdW5pc3RyKVxuXAogXG5cCkBAIC03NDksMTQgKzc4MiwzNCBAQAogICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgfQogCi0gICAgaWYgKHN0cmNtcChmb3JtLCAiTkZDIikgPT0gMCkKKyAgICBpZiAoc3RyY21wKGZvcm0sICJORkMiKSA9PSAwKSB7CisgICAgICAgIGlmIChpc19ub3JtYWxpemVkKHNlbGYsIGlucHV0LCAxLCAwKSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGlucHV0KTsKKyAgICAgICAgICAgIHJldHVybiBpbnB1dDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbmZjX25ma2Moc2VsZiwgaW5wdXQsIDApOwotICAgIGlmIChzdHJjbXAoZm9ybSwgIk5GS0MiKSA9PSAwKQorICAgIH0KKyAgICBpZiAoc3RyY21wKGZvcm0sICJORktDIikgPT0gMCkgeworICAgICAgICBpZiAoaXNfbm9ybWFsaXplZChzZWxmLCBpbnB1dCwgMSwgMSkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihpbnB1dCk7CisgICAgICAgICAgICByZXR1cm4gaW5wdXQ7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5mY19uZmtjKHNlbGYsIGlucHV0LCAxKTsKLSAgICBpZiAoc3RyY21wKGZvcm0sICJORkQiKSA9PSAwKQorICAgIH0KKyAgICBpZiAoc3RyY21wKGZvcm0sICJORkQiKSA9PSAwKSB7CisgICAgICAgIGlmIChpc19ub3JtYWxpemVkKHNlbGYsIGlucHV0LCAwLCAwKSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGlucHV0KTsKKyAgICAgICAgICAgIHJldHVybiBpbnB1dDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbmZkX25ma2Qoc2VsZiwgaW5wdXQsIDApOwotICAgIGlmIChzdHJjbXAoZm9ybSwgIk5GS0QiKSA9PSAwKQorICAgIH0KKyAgICBpZiAoc3RyY21wKGZvcm0sICJORktEIikgPT0gMCkgeworICAgICAgICBpZiAoaXNfbm9ybWFsaXplZChzZWxmLCBpbnB1dCwgMCwgMSkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihpbnB1dCk7CisgICAgICAgICAgICByZXR1cm4gaW5wdXQ7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5mZF9uZmtkKHNlbGYsIGlucHV0LCAxKTsKKyAgICB9CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIG5vcm1hbGl6YXRpb24gZm9ybSIpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtODIxLDggKzg3NCw5IEBACiB7CiAgICAgcmV0dXJuICgKICAgICAgICAgKDB4MzQwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHg0REI1KSB8fCAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBBICovCi0gICAgICAgICgweDRFMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4OUZCQikgfHwgLyogQ0pLIElkZW9ncmFwaCAqLwotICAgICAgICAoMHgyMDAwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHgyQTZENikpOy8qIENKSyBJZGVvZ3JhcGggRXh0ZW5zaW9uIEIgKi8KKyAgICAgICAgKDB4NEUwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHg5RkNCKSB8fCAvKiBDSksgSWRlb2dyYXBoLCBVbmljb2RlIDUuMiAqLworICAgICAgICAoMHgyMDAwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHgyQTZENikgfHwgLyogQ0pLIElkZW9ncmFwaCBFeHRlbnNpb24gQiAqLworICAgICAgICAoMHgyQTcwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHgyQjczNCkpOyAgLyogQ0pLIElkZW9ncmFwaCBFeHRlbnNpb24gQyAqLwogfQogCiBzdGF0aWMgaW50CkBAIC0xMTg1LDExICsxMjM5LDExIEBACiAiVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSB3aGljaFxuXAogZGVmaW5lcyBjaGFyYWN0ZXIgcHJvcGVydGllcyBmb3IgYWxsIFVuaWNvZGUgY2hhcmFjdGVycy4gVGhlIGRhdGEgaW5cblwKIHRoaXMgZGF0YWJhc2UgaXMgYmFzZWQgb24gdGhlIFVuaWNvZGVEYXRhLnR4dCBmaWxlIHZlcnNpb25cblwKLTUuMS4wIHdoaWNoIGlzIHB1YmxpY2FsbHkgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLnVuaWNvZGUub3JnLy5cblwKKzUuMi4wIHdoaWNoIGlzIHB1YmxpY2FsbHkgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLnVuaWNvZGUub3JnLy5cblwKIFxuXAogVGhlIG1vZHVsZSB1c2VzIHRoZSBzYW1lIG5hbWVzIGFuZCBzeW1ib2xzIGFzIGRlZmluZWQgYnkgdGhlXG5cCi1Vbmljb2RlRGF0YSBGaWxlIEZvcm1hdCA1LjEuMCAoc2VlXG5cCi1odHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy81LjEuMC91Y2QvVUNELmh0bWwpLiIpOworVW5pY29kZURhdGEgRmlsZSBGb3JtYXQgNS4yLjAgKHNlZVxuXAoraHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyNDQvdHI0NC00Lmh0bWwpLiIpOwogCiBQeU1PRElOSVRfRlVOQwogaW5pdHVuaWNvZGVkYXRhKHZvaWQpCkBAIC0xMjEzLDcgKzEyNjcsNyBAQAogICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInVjZF8zXzJfMCIsIHYpOwogCiAgICAgLyogRXhwb3J0IEMgQVBJICovCi0gICAgdiA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cigodm9pZCAqKSAmaGFzaEFQSSwgTlVMTCk7CisgICAgdiA9IFB5Q2Fwc3VsZV9OZXcoKHZvaWQgKikmaGFzaEFQSSwgUHlVbmljb2RlRGF0YV9DQVBTVUxFX05BTUUsIE5VTEwpOwogICAgIGlmICh2ICE9IE5VTEwpCiAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAidWNuaGFzaF9DQVBJIiwgdik7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmggYi9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKaW5kZXggODI0MzQ3My4uZmQwZGFjZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCisrKyBiL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaApAQCAtMSwyNDIgKzEsMzMzIEBACiAvKiB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBUb29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSAyLjYgKi8KIAotI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjUuMS4wIgorI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjUuMi4wIgogLyogYSBsaXN0IG9mIHVuaXF1ZSBkYXRhYmFzZSByZWNvcmRzICovCiBjb25zdCBfUHlVbmljb2RlX0RhdGFiYXNlUmVjb3JkIF9QeVVuaWNvZGVfRGF0YWJhc2VfUmVjb3Jkc1tdID0gewotICAgIHswLCAwLCAwLCAwLCAwfSwKLSAgICB7MTMsIDAsIDE1LCAwLCA1fSwKLSAgICB7MTMsIDAsIDE3LCAwLCA1fSwKLSAgICB7MTMsIDAsIDE2LCAwLCA1fSwKLSAgICB7MTMsIDAsIDE4LCAwLCA1fSwKLSAgICB7MTAsIDAsIDE4LCAwLCAzfSwKLSAgICB7MjYsIDAsIDE5LCAwLCAzfSwKLSAgICB7MjYsIDAsIDExLCAwLCAzfSwKLSAgICB7MjgsIDAsIDExLCAwLCAzfSwKLSAgICB7MjIsIDAsIDE5LCAxLCAzfSwKLSAgICB7MjMsIDAsIDE5LCAxLCAzfSwKLSAgICB7MjcsIDAsIDEwLCAwLCAzfSwKLSAgICB7MjYsIDAsIDEzLCAwLCAzfSwKLSAgICB7MjEsIDAsIDEwLCAwLCAzfSwKLSAgICB7NywgMCwgOSwgMCwgM30sCi0gICAgezI3LCAwLCAxOSwgMSwgM30sCi0gICAgezI3LCAwLCAxOSwgMCwgM30sCi0gICAgezEsIDAsIDEsIDAsIDN9LAotICAgIHsyOSwgMCwgMTksIDAsIDN9LAotICAgIHsyMCwgMCwgMTksIDAsIDN9LAotICAgIHsyLCAwLCAxLCAwLCAzfSwKLSAgICB7MTAsIDAsIDEzLCAwLCA1fSwKLSAgICB7MjYsIDAsIDE5LCAwLCA0fSwKLSAgICB7MjgsIDAsIDExLCAwLCA0fSwKLSAgICB7MzAsIDAsIDE5LCAwLCAzfSwKLSAgICB7MzAsIDAsIDE5LCAwLCA0fSwKLSAgICB7MjksIDAsIDE5LCAwLCA0fSwKLSAgICB7MzAsIDAsIDE5LCAwLCA1fSwKLSAgICB7MiwgMCwgMSwgMCwgNH0sCi0gICAgezI0LCAwLCAxOSwgMSwgNX0sCi0gICAgezE0LCAwLCAxNSwgMCwgNH0sCi0gICAgezMwLCAwLCAxMSwgMCwgNH0sCi0gICAgezI3LCAwLCAxMSwgMCwgNH0sCi0gICAgezksIDAsIDksIDAsIDR9LAotICAgIHsyLCAwLCAxLCAwLCA1fSwKLSAgICB7MjUsIDAsIDE5LCAxLCA1fSwKLSAgICB7OSwgMCwgMTksIDAsIDR9LAotICAgIHsxLCAwLCAxLCAwLCA1fSwKLSAgICB7MSwgMCwgMSwgMCwgNH0sCi0gICAgezI3LCAwLCAxOSwgMCwgNH0sCi0gICAgezE5LCAwLCAxLCAwLCA1fSwKLSAgICB7MywgMCwgMSwgMCwgNX0sCi0gICAgezE4LCAwLCAxLCAwLCA1fSwKLSAgICB7MTgsIDAsIDE5LCAwLCA1fSwKLSAgICB7MjksIDAsIDE5LCAwLCA1fSwKLSAgICB7MTgsIDAsIDE5LCAwLCA0fSwKLSAgICB7MTgsIDAsIDEsIDAsIDR9LAotICAgIHs0LCAyMzAsIDE0LCAwLCA0fSwKLSAgICB7NCwgMjMyLCAxNCwgMCwgNH0sCi0gICAgezQsIDIyMCwgMTQsIDAsIDR9LAotICAgIHs0LCAyMTYsIDE0LCAwLCA0fSwKLSAgICB7NCwgMjAyLCAxNCwgMCwgNH0sCi0gICAgezQsIDEsIDE0LCAwLCA0fSwKLSAgICB7NCwgMjQwLCAxNCwgMCwgNH0sCi0gICAgezQsIDAsIDE0LCAwLCA0fSwKLSAgICB7NCwgMjMzLCAxNCwgMCwgNH0sCi0gICAgezQsIDIzNCwgMTQsIDAsIDR9LAotICAgIHsyNiwgMCwgMTksIDAsIDV9LAotICAgIHsyNywgMCwgMTksIDAsIDV9LAotICAgIHszMCwgMCwgMSwgMCwgNX0sCi0gICAgezQsIDIzMCwgMTQsIDAsIDV9LAotICAgIHs2LCAwLCAxNCwgMCwgNX0sCi0gICAgezI2LCAwLCAxLCAwLCA1fSwKLSAgICB7MjEsIDAsIDE5LCAwLCA1fSwKLSAgICB7NCwgMjIwLCAxNCwgMCwgNX0sCi0gICAgezQsIDIyMiwgMTQsIDAsIDV9LAotICAgIHs0LCAyMjgsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTAsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTEsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTIsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTMsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTQsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTUsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTYsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTcsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTgsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTksIDE0LCAwLCA1fSwKLSAgICB7NCwgMjAsIDE0LCAwLCA1fSwKLSAgICB7NCwgMjEsIDE0LCAwLCA1fSwKLSAgICB7NCwgMjIsIDE0LCAwLCA1fSwKLSAgICB7MjEsIDAsIDQsIDAsIDV9LAotICAgIHs0LCAyMywgMTQsIDAsIDV9LAotICAgIHsyNiwgMCwgNCwgMCwgNX0sCi0gICAgezQsIDI0LCAxNCwgMCwgNX0sCi0gICAgezQsIDI1LCAxNCwgMCwgNX0sCi0gICAgezE5LCAwLCA0LCAwLCA1fSwKLSAgICB7MTQsIDAsIDEyLCAwLCA1fSwKLSAgICB7MjcsIDAsIDUsIDAsIDV9LAotICAgIHsyNiwgMCwgMTEsIDAsIDV9LAotICAgIHsyOCwgMCwgNSwgMCwgNX0sCi0gICAgezI2LCAwLCAxMywgMCwgNX0sCi0gICAgezI2LCAwLCA1LCAwLCA1fSwKLSAgICB7NCwgMzAsIDE0LCAwLCA1fSwKLSAgICB7NCwgMzEsIDE0LCAwLCA1fSwKLSAgICB7NCwgMzIsIDE0LCAwLCA1fSwKLSAgICB7MTksIDAsIDUsIDAsIDV9LAotICAgIHsxOCwgMCwgNSwgMCwgNX0sCi0gICAgezQsIDI3LCAxNCwgMCwgNX0sCi0gICAgezQsIDI4LCAxNCwgMCwgNX0sCi0gICAgezQsIDI5LCAxNCwgMCwgNX0sCi0gICAgezQsIDMzLCAxNCwgMCwgNX0sCi0gICAgezQsIDM0LCAxNCwgMCwgNX0sCi0gICAgezcsIDAsIDEyLCAwLCA1fSwKLSAgICB7MjYsIDAsIDEyLCAwLCA1fSwKLSAgICB7NCwgMzUsIDE0LCAwLCA1fSwKLSAgICB7NywgMCwgOSwgMCwgNX0sCi0gICAgezMwLCAwLCA1LCAwLCA1fSwKLSAgICB7MTQsIDAsIDE1LCAwLCA1fSwKLSAgICB7NCwgMzYsIDE0LCAwLCA1fSwKLSAgICB7NCwgMCwgMTQsIDAsIDV9LAotICAgIHs3LCAwLCA0LCAwLCA1fSwKLSAgICB7MTgsIDAsIDQsIDAsIDV9LAotICAgIHs1LCAwLCAxLCAwLCA1fSwKLSAgICB7NCwgNywgMTQsIDAsIDV9LAotICAgIHs0LCA5LCAxNCwgMCwgNX0sCi0gICAgezcsIDAsIDEsIDAsIDV9LAotICAgIHsyOCwgMCwgMTEsIDAsIDV9LAotICAgIHs5LCAwLCAxLCAwLCA1fSwKLSAgICB7NCwgODQsIDE0LCAwLCA1fSwKLSAgICB7NCwgOTEsIDE0LCAwLCA1fSwKLSAgICB7OSwgMCwgMTksIDAsIDV9LAotICAgIHs0LCAwLCAxLCAwLCA1fSwKLSAgICB7NCwgMTAzLCAxNCwgMCwgNX0sCi0gICAgezQsIDEwNywgMTQsIDAsIDV9LAotICAgIHs0LCAxMTgsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTIyLCAxNCwgMCwgNX0sCi0gICAgezQsIDIxNiwgMTQsIDAsIDV9LAotICAgIHsyMiwgMCwgMTksIDEsIDV9LAotICAgIHsyMywgMCwgMTksIDEsIDV9LAotICAgIHs0LCAxMjksIDE0LCAwLCA1fSwKLSAgICB7NCwgMTMwLCAxNCwgMCwgNX0sCi0gICAgezQsIDEzMiwgMTQsIDAsIDV9LAotICAgIHsxOSwgMCwgMSwgMCwgMn0sCi0gICAgezEwLCAwLCAxOCwgMCwgNX0sCi0gICAgezgsIDAsIDEsIDAsIDV9LAotICAgIHsxNCwgMCwgMSwgMCwgNX0sCi0gICAgezUsIDksIDEsIDAsIDV9LAotICAgIHs0LCAyMzQsIDE0LCAwLCA1fSwKLSAgICB7NCwgMjE0LCAxNCwgMCwgNX0sCi0gICAgezQsIDIwMiwgMTQsIDAsIDV9LAotICAgIHsxNCwgMCwgNCwgMCwgNX0sCi0gICAgezIxLCAwLCAxOSwgMCwgNH0sCi0gICAgezI0LCAwLCAxOSwgMCwgNH0sCi0gICAgezI1LCAwLCAxOSwgMCwgNH0sCi0gICAgezIyLCAwLCAxOSwgMCwgNX0sCi0gICAgezI0LCAwLCAxOSwgMCwgNX0sCi0gICAgezExLCAwLCAxOCwgMCwgNX0sCi0gICAgezEyLCAwLCAxNiwgMCwgNX0sCi0gICAgezE0LCAwLCAyLCAwLCA1fSwKLSAgICB7MTQsIDAsIDYsIDAsIDV9LAotICAgIHsxNCwgMCwgOCwgMCwgNX0sCi0gICAgezE0LCAwLCAzLCAwLCA1fSwKLSAgICB7MTQsIDAsIDcsIDAsIDV9LAotICAgIHsyNiwgMCwgMTEsIDAsIDR9LAotICAgIHsyMCwgMCwgMTksIDAsIDV9LAotICAgIHsyNywgMCwgMTMsIDAsIDV9LAotICAgIHs5LCAwLCA5LCAwLCA1fSwKLSAgICB7MjcsIDAsIDEwLCAwLCA1fSwKLSAgICB7MjgsIDAsIDExLCAwLCAxfSwKLSAgICB7NCwgMSwgMTQsIDAsIDV9LAotICAgIHszMCwgMCwgMTEsIDAsIDV9LAotICAgIHsyNywgMCwgMTksIDEsIDV9LAotICAgIHs4LCAwLCAxLCAwLCA0fSwKLSAgICB7MjcsIDAsIDE5LCAxLCA0fSwKLSAgICB7MjcsIDAsIDExLCAwLCA1fSwKLSAgICB7MjIsIDAsIDE5LCAxLCAyfSwKLSAgICB7MjMsIDAsIDE5LCAxLCAyfSwKLSAgICB7MzAsIDAsIDEsIDAsIDR9LAotICAgIHszMCwgMCwgMTksIDAsIDJ9LAotICAgIHsxMCwgMCwgMTgsIDAsIDB9LAotICAgIHsyNiwgMCwgMTksIDAsIDJ9LAotICAgIHsxOCwgMCwgMSwgMCwgMn0sCi0gICAgezgsIDAsIDEsIDAsIDJ9LAotICAgIHsyMSwgMCwgMTksIDAsIDJ9LAotICAgIHsyMiwgMCwgMTksIDAsIDJ9LAotICAgIHsyMywgMCwgMTksIDAsIDJ9LAotICAgIHs0LCAyMTgsIDE0LCAwLCAyfSwKLSAgICB7NCwgMjI4LCAxNCwgMCwgMn0sCi0gICAgezQsIDIzMiwgMTQsIDAsIDJ9LAotICAgIHs0LCAyMjIsIDE0LCAwLCAyfSwKLSAgICB7NCwgMjI0LCAxNCwgMCwgMn0sCi0gICAgezQsIDgsIDE0LCAwLCAyfSwKLSAgICB7MjksIDAsIDE5LCAwLCAyfSwKLSAgICB7MzAsIDAsIDEsIDAsIDJ9LAotICAgIHs5LCAwLCAxLCAwLCAyfSwKLSAgICB7OSwgMCwgMTksIDAsIDJ9LAotICAgIHsyOSwgMCwgMSwgMCwgNX0sCi0gICAgezE1LCAwLCAxLCAwLCA1fSwKLSAgICB7MTYsIDAsIDEsIDAsIDR9LAotICAgIHs0LCAyNiwgMTQsIDAsIDV9LAotICAgIHsyMywgMCwgMTksIDAsIDV9LAotICAgIHsyMCwgMCwgMTksIDAsIDJ9LAotICAgIHsyNiwgMCwgMTMsIDAsIDJ9LAotICAgIHsyNiwgMCwgMTEsIDAsIDJ9LAotICAgIHsyNywgMCwgMTAsIDAsIDJ9LAotICAgIHsyMSwgMCwgMTAsIDAsIDJ9LAotICAgIHsyNywgMCwgMTksIDEsIDJ9LAotICAgIHsyNywgMCwgMTksIDAsIDJ9LAotICAgIHsyOCwgMCwgMTEsIDAsIDJ9LAotICAgIHsyNiwgMCwgMTksIDAsIDB9LAotICAgIHsyNiwgMCwgMTEsIDAsIDB9LAotICAgIHsyOCwgMCwgMTEsIDAsIDB9LAotICAgIHsyMiwgMCwgMTksIDEsIDB9LAotICAgIHsyMywgMCwgMTksIDEsIDB9LAotICAgIHsyNywgMCwgMTAsIDAsIDB9LAotICAgIHsyNiwgMCwgMTMsIDAsIDB9LAotICAgIHsyMSwgMCwgMTAsIDAsIDB9LAotICAgIHs3LCAwLCA5LCAwLCAwfSwKLSAgICB7MjcsIDAsIDE5LCAxLCAwfSwKLSAgICB7MjcsIDAsIDE5LCAwLCAwfSwKLSAgICB7MSwgMCwgMSwgMCwgMH0sCi0gICAgezI5LCAwLCAxOSwgMCwgMH0sCi0gICAgezIwLCAwLCAxOSwgMCwgMH0sCi0gICAgezIsIDAsIDEsIDAsIDB9LAotICAgIHsyNiwgMCwgMTksIDAsIDF9LAotICAgIHsyMiwgMCwgMTksIDEsIDF9LAotICAgIHsyMywgMCwgMTksIDEsIDF9LAotICAgIHsxOSwgMCwgMSwgMCwgMX0sCi0gICAgezE4LCAwLCAxLCAwLCAxfSwKLSAgICB7MzAsIDAsIDE5LCAwLCAwfSwKLSAgICB7MzAsIDAsIDE5LCAwLCAxfSwKLSAgICB7MjcsIDAsIDE5LCAwLCAxfSwKLSAgICB7MTQsIDAsIDE5LCAwLCA1fSwKLSAgICB7OCwgMCwgMTksIDAsIDV9LAotICAgIHs5LCAwLCA0LCAwLCA1fSwKLSAgICB7NSwgMjE2LCAxLCAwLCA1fSwKLSAgICB7NSwgMjI2LCAxLCAwLCA1fSwKLSAgICB7MjcsIDAsIDEsIDAsIDV9LAotICAgIHsyNywgMCwgMSwgMSwgNX0sCisgICAgezAsIDAsIDAsIDAsIDAsIDB9LAorICAgIHsxMywgMCwgMTUsIDAsIDUsIDB9LAorICAgIHsxMywgMCwgMTcsIDAsIDUsIDB9LAorICAgIHsxMywgMCwgMTYsIDAsIDUsIDB9LAorICAgIHsxMywgMCwgMTgsIDAsIDUsIDB9LAorICAgIHsxMCwgMCwgMTgsIDAsIDMsIDB9LAorICAgIHsyNiwgMCwgMTksIDAsIDMsIDB9LAorICAgIHsyNiwgMCwgMTEsIDAsIDMsIDB9LAorICAgIHsyOCwgMCwgMTEsIDAsIDMsIDB9LAorICAgIHsyMiwgMCwgMTksIDEsIDMsIDB9LAorICAgIHsyMywgMCwgMTksIDEsIDMsIDB9LAorICAgIHsyNywgMCwgMTAsIDAsIDMsIDB9LAorICAgIHsyNiwgMCwgMTMsIDAsIDMsIDB9LAorICAgIHsyMSwgMCwgMTAsIDAsIDMsIDB9LAorICAgIHs3LCAwLCA5LCAwLCAzLCAwfSwKKyAgICB7MjcsIDAsIDE5LCAxLCAzLCAwfSwKKyAgICB7MjcsIDAsIDE5LCAwLCAzLCAwfSwKKyAgICB7MSwgMCwgMSwgMCwgMywgMH0sCisgICAgezI5LCAwLCAxOSwgMCwgMywgMH0sCisgICAgezIwLCAwLCAxOSwgMCwgMywgMH0sCisgICAgezIsIDAsIDEsIDAsIDMsIDB9LAorICAgIHsxMCwgMCwgMTMsIDAsIDUsIDEzNn0sCisgICAgezI2LCAwLCAxOSwgMCwgNCwgMH0sCisgICAgezI4LCAwLCAxMSwgMCwgNCwgMH0sCisgICAgezMwLCAwLCAxOSwgMCwgMywgMH0sCisgICAgezMwLCAwLCAxOSwgMCwgNCwgMH0sCisgICAgezI5LCAwLCAxOSwgMCwgNCwgMTM2fSwKKyAgICB7MzAsIDAsIDE5LCAwLCA1LCAwfSwKKyAgICB7MiwgMCwgMSwgMCwgNCwgMTM2fSwKKyAgICB7MjQsIDAsIDE5LCAxLCA1LCAwfSwKKyAgICB7MTQsIDAsIDE1LCAwLCA0LCAwfSwKKyAgICB7MjksIDAsIDE5LCAwLCAzLCAxMzZ9LAorICAgIHszMCwgMCwgMTEsIDAsIDQsIDB9LAorICAgIHsyNywgMCwgMTEsIDAsIDQsIDB9LAorICAgIHs5LCAwLCA5LCAwLCA0LCAxMzZ9LAorICAgIHsyLCAwLCAxLCAwLCA1LCAxMzZ9LAorICAgIHsyNSwgMCwgMTksIDEsIDUsIDB9LAorICAgIHs5LCAwLCAxOSwgMCwgNCwgMTM2fSwKKyAgICB7MSwgMCwgMSwgMCwgNSwgMTB9LAorICAgIHsxLCAwLCAxLCAwLCA0LCAwfSwKKyAgICB7MjcsIDAsIDE5LCAwLCA0LCAwfSwKKyAgICB7MiwgMCwgMSwgMCwgNCwgMH0sCisgICAgezIsIDAsIDEsIDAsIDQsIDEwfSwKKyAgICB7MiwgMCwgMSwgMCwgNSwgMTB9LAorICAgIHsxLCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7MSwgMCwgMSwgMCwgNCwgMTM2fSwKKyAgICB7MiwgMCwgMSwgMCwgNSwgMH0sCisgICAgezE5LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7MSwgMCwgMSwgMCwgNSwgMTM2fSwKKyAgICB7MywgMCwgMSwgMCwgNSwgMTM2fSwKKyAgICB7MTgsIDAsIDEsIDAsIDUsIDEzNn0sCisgICAgezE4LCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezE4LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7MjksIDAsIDE5LCAwLCA1LCAwfSwKKyAgICB7MjksIDAsIDE5LCAwLCA0LCAwfSwKKyAgICB7MTgsIDAsIDE5LCAwLCA0LCAwfSwKKyAgICB7MTgsIDAsIDEsIDAsIDQsIDB9LAorICAgIHsyOSwgMCwgMTksIDAsIDUsIDEzNn0sCisgICAgezQsIDIzMCwgMTQsIDAsIDQsIDgwfSwKKyAgICB7NCwgMjMwLCAxNCwgMCwgNCwgMH0sCisgICAgezQsIDIzMiwgMTQsIDAsIDQsIDB9LAorICAgIHs0LCAyMjAsIDE0LCAwLCA0LCAwfSwKKyAgICB7NCwgMjE2LCAxNCwgMCwgNCwgODB9LAorICAgIHs0LCAyMDIsIDE0LCAwLCA0LCAwfSwKKyAgICB7NCwgMjIwLCAxNCwgMCwgNCwgODB9LAorICAgIHs0LCAyMDIsIDE0LCAwLCA0LCA4MH0sCisgICAgezQsIDEsIDE0LCAwLCA0LCAwfSwKKyAgICB7NCwgMSwgMTQsIDAsIDQsIDgwfSwKKyAgICB7NCwgMjMwLCAxNCwgMCwgNCwgMTcwfSwKKyAgICB7NCwgMjQwLCAxNCwgMCwgNCwgODB9LAorICAgIHs0LCAwLCAxNCwgMCwgNCwgMH0sCisgICAgezQsIDIzMywgMTQsIDAsIDQsIDB9LAorICAgIHs0LCAyMzQsIDE0LCAwLCA0LCAwfSwKKyAgICB7MTgsIDAsIDE5LCAwLCA1LCAxNzB9LAorICAgIHsyNiwgMCwgMTksIDAsIDUsIDE3MH0sCisgICAgezI5LCAwLCAxOSwgMCwgNSwgMTM4fSwKKyAgICB7MSwgMCwgMSwgMCwgNSwgMTM4fSwKKyAgICB7MjcsIDAsIDE5LCAwLCA1LCAwfSwKKyAgICB7MSwgMCwgMSwgMCwgNCwgMTB9LAorICAgIHszMCwgMCwgMSwgMCwgNSwgMH0sCisgICAgezQsIDIzMCwgMTQsIDAsIDUsIDB9LAorICAgIHs2LCAwLCAxNCwgMCwgNSwgMH0sCisgICAgezI2LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7MjEsIDAsIDE5LCAwLCA1LCAwfSwKKyAgICB7NCwgMjIwLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDIyMiwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAyMjgsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTAsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTEsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTIsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTMsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTQsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTUsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTYsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTcsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTgsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTksIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMjAsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMjEsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMjIsIDE0LCAwLCA1LCAwfSwKKyAgICB7MjEsIDAsIDQsIDAsIDUsIDB9LAorICAgIHs0LCAyMywgMTQsIDAsIDUsIDB9LAorICAgIHsyNiwgMCwgNCwgMCwgNSwgMH0sCisgICAgezQsIDI0LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDI1LCAxNCwgMCwgNSwgMH0sCisgICAgezE5LCAwLCA0LCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDEyLCAwLCA1LCAwfSwKKyAgICB7MjcsIDAsIDUsIDAsIDUsIDB9LAorICAgIHsyNiwgMCwgMTEsIDAsIDUsIDB9LAorICAgIHsyOCwgMCwgNSwgMCwgNSwgMH0sCisgICAgezI2LCAwLCAxMywgMCwgNSwgMH0sCisgICAgezI2LCAwLCA1LCAwLCA1LCAwfSwKKyAgICB7NCwgMzAsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMzEsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMzIsIDE0LCAwLCA1LCAwfSwKKyAgICB7MTksIDAsIDUsIDAsIDUsIDB9LAorICAgIHsxOSwgMCwgNSwgMCwgNSwgMTB9LAorICAgIHsxOCwgMCwgNSwgMCwgNSwgMH0sCisgICAgezQsIDI3LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDI4LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDI5LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDMzLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDM0LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDIzMCwgMTQsIDAsIDUsIDgwfSwKKyAgICB7NCwgMjIwLCAxNCwgMCwgNSwgODB9LAorICAgIHs3LCAwLCAxMiwgMCwgNSwgMH0sCisgICAgezI2LCAwLCAxMiwgMCwgNSwgMH0sCisgICAgezQsIDM1LCAxNCwgMCwgNSwgMH0sCisgICAgezE5LCAwLCA1LCAwLCA1LCAxMzZ9LAorICAgIHs3LCAwLCA5LCAwLCA1LCAwfSwKKyAgICB7MzAsIDAsIDUsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMTUsIDAsIDUsIDB9LAorICAgIHs0LCAzNiwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAwLCAxNCwgMCwgNSwgMH0sCisgICAgezcsIDAsIDQsIDAsIDUsIDB9LAorICAgIHsxOCwgMCwgNCwgMCwgNSwgMH0sCisgICAgezI2LCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezUsIDAsIDEsIDAsIDUsIDB9LAorICAgIHsxOSwgMCwgMSwgMCwgNSwgMTB9LAorICAgIHs0LCA3LCAxNCwgMCwgNSwgODB9LAorICAgIHs0LCA5LCAxNCwgMCwgNSwgMH0sCisgICAgezE5LCAwLCAxLCAwLCA1LCAxNzB9LAorICAgIHs3LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7NCwgNywgMTQsIDAsIDUsIDB9LAorICAgIHs1LCAwLCAxLCAwLCA1LCA4MH0sCisgICAgezUsIDAsIDEsIDAsIDUsIDEwfSwKKyAgICB7MjgsIDAsIDExLCAwLCA1LCAwfSwKKyAgICB7OSwgMCwgMSwgMCwgNSwgMH0sCisgICAgezQsIDAsIDE0LCAwLCA1LCA4MH0sCisgICAgezQsIDAsIDE0LCAwLCA1LCAxMH0sCisgICAgezQsIDg0LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDkxLCAxNCwgMCwgNSwgODB9LAorICAgIHs5LCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezQsIDAsIDEsIDAsIDUsIDB9LAorICAgIHs0LCA5LCAxNCwgMCwgNSwgODB9LAorICAgIHsxOSwgMCwgMSwgMCwgNSwgMTM2fSwKKyAgICB7NCwgMTAzLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDEwNywgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAxMTgsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTIyLCAxNCwgMCwgNSwgMH0sCisgICAgezI2LCAwLCAxLCAwLCA1LCAxMzZ9LAorICAgIHs0LCAyMTYsIDE0LCAwLCA1LCAwfSwKKyAgICB7MjIsIDAsIDE5LCAxLCA1LCAwfSwKKyAgICB7MjMsIDAsIDE5LCAxLCA1LCAwfSwKKyAgICB7NCwgMTI5LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDEzMCwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAwLCAxNCwgMCwgNSwgMTcwfSwKKyAgICB7NCwgMTMyLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDAsIDE0LCAwLCA1LCAxMzZ9LAorICAgIHsxOSwgMCwgMSwgMCwgMiwgMH0sCisgICAgezE5LCAwLCAxLCAwLCA1LCA4MH0sCisgICAgezEwLCAwLCAxOCwgMCwgNSwgMH0sCisgICAgezgsIDAsIDEsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMSwgMCwgNSwgMH0sCisgICAgezUsIDksIDEsIDAsIDUsIDB9LAorICAgIHs0LCAxLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDIzNCwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAyMTQsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMjAyLCAxNCwgMCwgNSwgMH0sCisgICAgezIsIDAsIDEsIDAsIDUsIDEzOH0sCisgICAgezIsIDAsIDEsIDAsIDUsIDE3MH0sCisgICAgezMsIDAsIDEsIDAsIDUsIDEwfSwKKyAgICB7MSwgMCwgMSwgMCwgNSwgMTcwfSwKKyAgICB7MjksIDAsIDE5LCAwLCA1LCAxNzB9LAorICAgIHsxMCwgMCwgMTgsIDAsIDUsIDE3MH0sCisgICAgezEwLCAwLCAxOCwgMCwgNSwgMTM2fSwKKyAgICB7MTQsIDAsIDQsIDAsIDUsIDB9LAorICAgIHsyMSwgMCwgMTksIDAsIDQsIDB9LAorICAgIHsyMSwgMCwgMTksIDAsIDUsIDEzNn0sCisgICAgezI2LCAwLCAxOSwgMCwgNSwgMTM2fSwKKyAgICB7MjQsIDAsIDE5LCAwLCA0LCAwfSwKKyAgICB7MjUsIDAsIDE5LCAwLCA0LCAwfSwKKyAgICB7MjIsIDAsIDE5LCAwLCA1LCAwfSwKKyAgICB7MjQsIDAsIDE5LCAwLCA1LCAwfSwKKyAgICB7MjYsIDAsIDE5LCAwLCA0LCAxMzZ9LAorICAgIHsxMSwgMCwgMTgsIDAsIDUsIDB9LAorICAgIHsxMiwgMCwgMTYsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMiwgMCwgNSwgMH0sCisgICAgezE0LCAwLCA2LCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDgsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMywgMCwgNSwgMH0sCisgICAgezE0LCAwLCA3LCAwLCA1LCAwfSwKKyAgICB7MjYsIDAsIDExLCAwLCA0LCAwfSwKKyAgICB7MjYsIDAsIDExLCAwLCA0LCAxMzZ9LAorICAgIHsyNiwgMCwgMTEsIDAsIDUsIDEzNn0sCisgICAgezIwLCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezI3LCAwLCAxMywgMCwgNSwgMH0sCisgICAgezksIDAsIDksIDAsIDUsIDEzNn0sCisgICAgezI3LCAwLCAxMCwgMCwgNSwgMTM2fSwKKyAgICB7MjcsIDAsIDE5LCAwLCA1LCAxMzZ9LAorICAgIHsyMiwgMCwgMTksIDEsIDUsIDEzNn0sCisgICAgezIzLCAwLCAxOSwgMSwgNSwgMTM2fSwKKyAgICB7MTgsIDAsIDEsIDAsIDQsIDEzNn0sCisgICAgezI4LCAwLCAxMSwgMCwgNSwgMTM2fSwKKyAgICB7MjgsIDAsIDExLCAwLCAxLCAwfSwKKyAgICB7MzAsIDAsIDE5LCAwLCA1LCAxMzZ9LAorICAgIHszMCwgMCwgMTksIDAsIDQsIDEzNn0sCisgICAgezEsIDAsIDEsIDAsIDQsIDE3MH0sCisgICAgezMwLCAwLCAxMSwgMCwgNSwgMH0sCisgICAgezI3LCAwLCAxOSwgMSwgNSwgMTM2fSwKKyAgICB7OSwgMCwgMTksIDAsIDUsIDEzNn0sCisgICAgezgsIDAsIDEsIDAsIDQsIDEzNn0sCisgICAgezgsIDAsIDEsIDAsIDUsIDEzNn0sCisgICAgezI3LCAwLCAxOSwgMCwgNSwgMTB9LAorICAgIHszMCwgMCwgMTksIDAsIDUsIDEwfSwKKyAgICB7MjcsIDAsIDE5LCAxLCA1LCAwfSwKKyAgICB7MjcsIDAsIDE5LCAxLCA0LCAwfSwKKyAgICB7MjcsIDAsIDE5LCAxLCA1LCAxMH0sCisgICAgezI3LCAwLCAxMCwgMCwgNSwgMH0sCisgICAgezI3LCAwLCAxMSwgMCwgNSwgMH0sCisgICAgezI3LCAwLCAxOSwgMSwgNCwgMTM2fSwKKyAgICB7MjcsIDAsIDE5LCAxLCA0LCAxMH0sCisgICAgezIyLCAwLCAxOSwgMSwgMiwgMTcwfSwKKyAgICB7MjMsIDAsIDE5LCAxLCAyLCAxNzB9LAorICAgIHszMCwgMCwgMSwgMCwgNCwgMTM2fSwKKyAgICB7OSwgMCwgMTksIDAsIDQsIDB9LAorICAgIHsyNywgMCwgMTksIDEsIDUsIDE3MH0sCisgICAgezMwLCAwLCAxOSwgMCwgMiwgMH0sCisgICAgezMwLCAwLCAxOSwgMCwgMiwgMTM2fSwKKyAgICB7MTAsIDAsIDE4LCAwLCAwLCAxMzZ9LAorICAgIHsyNiwgMCwgMTksIDAsIDIsIDB9LAorICAgIHsxOCwgMCwgMSwgMCwgMiwgMH0sCisgICAgezgsIDAsIDEsIDAsIDIsIDB9LAorICAgIHsyMiwgMCwgMTksIDEsIDIsIDB9LAorICAgIHsyMywgMCwgMTksIDEsIDIsIDB9LAorICAgIHsyMSwgMCwgMTksIDAsIDIsIDB9LAorICAgIHsyMiwgMCwgMTksIDAsIDIsIDB9LAorICAgIHsyMywgMCwgMTksIDAsIDIsIDB9LAorICAgIHs0LCAyMTgsIDE0LCAwLCAyLCAwfSwKKyAgICB7NCwgMjI4LCAxNCwgMCwgMiwgMH0sCisgICAgezQsIDIzMiwgMTQsIDAsIDIsIDB9LAorICAgIHs0LCAyMjIsIDE0LCAwLCAyLCAwfSwKKyAgICB7NCwgMjI0LCAxNCwgMCwgMiwgMH0sCisgICAgezgsIDAsIDEsIDAsIDIsIDEzNn0sCisgICAgezE5LCAwLCAxLCAwLCAyLCAxMH0sCisgICAgezQsIDgsIDE0LCAwLCAyLCA4MH0sCisgICAgezI5LCAwLCAxOSwgMCwgMiwgMTM2fSwKKyAgICB7MTgsIDAsIDEsIDAsIDIsIDEwfSwKKyAgICB7MTksIDAsIDEsIDAsIDIsIDEzNn0sCisgICAgezMwLCAwLCAxLCAwLCAyLCAwfSwKKyAgICB7OSwgMCwgMSwgMCwgMiwgMTM2fSwKKyAgICB7MzAsIDAsIDEsIDAsIDIsIDEzNn0sCisgICAgezMwLCAwLCAxLCAwLCA0LCAwfSwKKyAgICB7OSwgMCwgMTksIDAsIDIsIDEzNn0sCisgICAgezI5LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7MTUsIDAsIDEsIDAsIDUsIDB9LAorICAgIHsxNiwgMCwgMSwgMCwgNCwgMH0sCisgICAgezE5LCAwLCAxLCAwLCAyLCAxNzB9LAorICAgIHsxOSwgMCwgNCwgMCwgNSwgMTcwfSwKKyAgICB7NCwgMjYsIDE0LCAwLCA1LCAwfSwKKyAgICB7MTksIDAsIDQsIDAsIDUsIDEzNn0sCisgICAgezIzLCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezI4LCAwLCA1LCAwLCA1LCAxMzZ9LAorICAgIHsyNiwgMCwgMTksIDAsIDIsIDEzNn0sCisgICAgezIyLCAwLCAxOSwgMCwgMiwgMTM2fSwKKyAgICB7MjMsIDAsIDE5LCAwLCAyLCAxMzZ9LAorICAgIHsyMSwgMCwgMTksIDAsIDIsIDEzNn0sCisgICAgezIwLCAwLCAxOSwgMCwgMiwgMTM2fSwKKyAgICB7MjYsIDAsIDEzLCAwLCAyLCAxMzZ9LAorICAgIHsyMiwgMCwgMTksIDEsIDIsIDEzNn0sCisgICAgezIzLCAwLCAxOSwgMSwgMiwgMTM2fSwKKyAgICB7MjYsIDAsIDExLCAwLCAyLCAxMzZ9LAorICAgIHsyNywgMCwgMTAsIDAsIDIsIDEzNn0sCisgICAgezIxLCAwLCAxMCwgMCwgMiwgMTM2fSwKKyAgICB7MjcsIDAsIDE5LCAxLCAyLCAxMzZ9LAorICAgIHsyNywgMCwgMTksIDAsIDIsIDEzNn0sCisgICAgezI4LCAwLCAxMSwgMCwgMiwgMTM2fSwKKyAgICB7MjYsIDAsIDE5LCAwLCAwLCAxMzZ9LAorICAgIHsyNiwgMCwgMTEsIDAsIDAsIDEzNn0sCisgICAgezI4LCAwLCAxMSwgMCwgMCwgMTM2fSwKKyAgICB7MjIsIDAsIDE5LCAxLCAwLCAxMzZ9LAorICAgIHsyMywgMCwgMTksIDEsIDAsIDEzNn0sCisgICAgezI3LCAwLCAxMCwgMCwgMCwgMTM2fSwKKyAgICB7MjYsIDAsIDEzLCAwLCAwLCAxMzZ9LAorICAgIHsyMSwgMCwgMTAsIDAsIDAsIDEzNn0sCisgICAgezcsIDAsIDksIDAsIDAsIDEzNn0sCisgICAgezI3LCAwLCAxOSwgMSwgMCwgMTM2fSwKKyAgICB7MjcsIDAsIDE5LCAwLCAwLCAxMzZ9LAorICAgIHsxLCAwLCAxLCAwLCAwLCAxMzZ9LAorICAgIHsyOSwgMCwgMTksIDAsIDAsIDEzNn0sCisgICAgezIwLCAwLCAxOSwgMCwgMCwgMTM2fSwKKyAgICB7MiwgMCwgMSwgMCwgMCwgMTM2fSwKKyAgICB7MjYsIDAsIDE5LCAwLCAxLCAxMzZ9LAorICAgIHsyMiwgMCwgMTksIDEsIDEsIDEzNn0sCisgICAgezIzLCAwLCAxOSwgMSwgMSwgMTM2fSwKKyAgICB7MTksIDAsIDEsIDAsIDEsIDEzNn0sCisgICAgezE4LCAwLCAxLCAwLCAxLCAxMzZ9LAorICAgIHszMCwgMCwgMTksIDAsIDAsIDEzNn0sCisgICAgezMwLCAwLCAxOSwgMCwgMSwgMTM2fSwKKyAgICB7MjcsIDAsIDE5LCAwLCAxLCAxMzZ9LAorICAgIHsxNCwgMCwgMTksIDAsIDUsIDB9LAorICAgIHs4LCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezksIDAsIDQsIDAsIDUsIDB9LAorICAgIHs5LCAwLCAxMiwgMCwgNSwgMH0sCisgICAgezMwLCAwLCAxLCAwLCA1LCAxNzB9LAorICAgIHs1LCAyMTYsIDEsIDAsIDUsIDB9LAorICAgIHs1LCAyMjYsIDEsIDAsIDUsIDB9LAorICAgIHsyNywgMCwgMSwgMCwgNSwgMTM2fSwKKyAgICB7NywgMCwgOSwgMCwgNSwgMTM2fSwKKyAgICB7MzAsIDAsIDEsIDAsIDUsIDEzNn0sCiB9OwogCiAvKiBSZWluZGV4aW5nIG9mIE5GQyBmaXJzdCBjaGFyYWN0ZXJzLiAqLwotI2RlZmluZSBUT1RBTF9GSVJTVCAzNjcKLSNkZWZpbmUgVE9UQUxfTEFTVCA1NAorI2RlZmluZSBUT1RBTF9GSVJTVCAzNzAKKyNkZWZpbmUgVE9UQUxfTEFTVCA1NQogc3RydWN0IHJlaW5kZXh7aW50IHN0YXJ0O3Nob3J0IGNvdW50LGluZGV4O307CiBzdGF0aWMgc3RydWN0IHJlaW5kZXggbmZjX2ZpcnN0W10gPSB7CiAgIHsgNjAsIDIsIDB9LApAQCAtNDQyLDYgKzUzMyw5IEBACiAgIHsgMTI1MDcsIDAsIDM2MX0sCiAgIHsgMTI1MjcsIDMsIDM2Mn0sCiAgIHsgMTI1NDEsIDAsIDM2Nn0sCisgIHsgNjk3ODUsIDAsIDM2N30sCisgIHsgNjk3ODcsIDAsIDM2OH0sCisgIHsgNjk3OTcsIDAsIDM2OX0sCiAgIHswLDAsMH0KIH07CiAKQEAgLTQ3Nyw2ICs1NzEsNyBAQAogICB7IDQxNDIsIDAsIDUwfSwKICAgeyA2OTY1LCAwLCA1MX0sCiAgIHsgMTI0NDEsIDEsIDUyfSwKKyAgeyA2OTgxOCwgMCwgNTR9LAogICB7MCwwLDB9CiB9OwogCkBAIC01NjgsMjA2ICs2NjMsNTI0IEBACiAgICAgTlVMTAogfTsKIC8qIGluZGV4IHRhYmxlcyBmb3IgdGhlIGRhdGFiYXNlIHJlY29yZHMgKi8KLSNkZWZpbmUgU0hJRlQgOAorI2RlZmluZSBTSElGVCA3CiBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmRleDFbXSA9IHsKICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIAogICAgIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIAotICAgIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAotICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAotICAgIDUyLCA1MiwgNTMsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAotICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAotICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAotICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAotICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDU0LCA1NSwgNTIsIDUyLCA1MiwgNTYsIAotICAgIDIxLCA1NywgNTgsIDU5LCA2MCwgNjEsIDgsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA2MiwgNjMsIDYzLCA2MywgCi0gICAgNjMsIDYzLCA2MywgNjMsIDYzLCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNTIsIDY1LCA2NiwgNjcsIDY4LCA2OSwgCi0gICAgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgOCwgOCwgOCwgNzYsIDc3LCA3OCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgMjEsIDIxLCAyMSwgNzksIDgwLCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4MSwgODIsIAotICAgIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDg5LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgOTAsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDUyLCA1MiwgOTEsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDkyLCA5MywgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgOTQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDk0LCAKKyAgICAzOSwgNDAsIDQxLCA0MSwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCAKKyAgICA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCAKKyAgICA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCAxNywgODQsIDg1LCA4NiwgODcsIDg4LCAKKyAgICA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMSwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDIsIAorICAgIDEwMywgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwNCwgNDEsIDQxLCAxMDUsIDEwNiwgMTA3LCAKKyAgICAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDE3LCAxMTUsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIAorICAgIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAKKyAgICAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgCisgICAgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIAorICAgIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAKKyAgICAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgCisgICAgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNywgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTIwLCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgCisgICAgMTI1LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTcsIDEzNiwgMTM3LCAKKyAgICAxMzgsIDEzOSwgMTQwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNDEsIDE3LCAxNDIsIDE3LCAxNDMsIDE3LCAxNDQsIAorICAgIDE3LCAxNDUsIDE3LCAxNywgMTcsIDE0NiwgMTcsIDE3LCAxNywgMTcsIDE0NywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgMTQ4LCAxNywgMTQ5LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgMTUwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDc4LCAxNTEsIAorICAgIDE1MiwgMTUzLCAxNTQsIDE3LCAxNTUsIDE3LCAxNTYsIDE1NywgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDE2OSwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDE3MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxNzEsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3MiwgMTcsIDE3MywgMTc0LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxNzUsIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTc1LCAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZGV4MltdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGluZGV4MltdID0gewogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIsIDMsIDIsIDQsIDMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDMsIDMsIDMsIDIsIDUsIDYsIDYsIDcsIDgsIDcsIDYsIDYsIDksIDEwLCA2LCAxMSwgMTIsIDEzLCAxMiwgCiAgICAgMTIsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxMiwgNiwgMTUsIDE2LCAxNSwgNiwgNiwgMTcsIApAQCAtNzc2LDEyNzMgKzExODksMTIxOCBAQAogICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAogICAgIDIwLCAyMCwgOSwgMTYsIDEwLCAxNiwgMSwgMSwgMSwgMSwgMSwgMSwgMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjEsIDIyLCA4LCA4LCAyMywgOCwgMjQsIAotICAgIDI1LCAyNiwgMjcsIDI4LCAyOSwgMTYsIDMwLCAyNSwgMTgsIDMxLCAzMiwgMzMsIDMzLCAyNiwgMzQsIDI1LCAyMiwgMjYsIAotICAgIDMzLCAyOCwgMzUsIDM2LCAzNiwgMzYsIDIyLCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzOCwgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzgsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM5LCAzOCwgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzOCwgMjgsIDI4LCAyOCwgMzQsIDM0LCAzNCwgMzQsIDI4LCAzNCwgMjgsIDI4LCAyOCwgMzQsIDI4LCAyOCwgMzQsIAotICAgIDM0LCAyOCwgMzQsIDI4LCAyOCwgMzQsIDM0LCAzNCwgMzksIDI4LCAyOCwgMjgsIDM0LCAyOCwgMzQsIDI4LCAzNCwgMzcsIAotICAgIDI4LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAyOCwgMzcsIAotICAgIDI4LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMjgsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzOCwgMjgsIDM3LCAzNCwgMzcsIDI4LCAzNywgMzQsIDM3LCAzNCwgMzcsIDI4LCAzOCwgMjgsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAyOCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzgsIDI4LCAzOCwgMjgsIDM3LCAyOCwgMzcsIDM0LCAzNywgMjgsIAotICAgIDI4LCAzOCwgMjgsIDM3LCAyOCwgMzcsIDM0LCAzNywgMzQsIDM4LCAyOCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzgsIDI4LCAzNywgMzQsIDM3LCAyOCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM0LCAzNCwgMzcsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzcsIDM0LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNCwgMzcsIDM3LCAzNCwgMzcsIDM3LCAzNywgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNCwgMzcsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNywgMzQsIDM3LCAzNCwgMzQsIDM3LCAzNCwgMzcsIDM3LCAzNCwgMzcsIDM3LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM3LCAzNCwgMzQsIDQwLCAzNywgMzQsIDM0LCAzNCwgNDAsIDQwLCA0MCwgNDAsIDM3LCA0MSwgMzQsIAotICAgIDM3LCA0MSwgMzQsIDM3LCA0MSwgMzQsIDM3LCAyOCwgMzcsIDI4LCAzNywgMjgsIDM3LCAyOCwgMzcsIDI4LCAzNywgMjgsIAotICAgIDM3LCAyOCwgMzcsIDI4LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzQsIDM3LCA0MSwgMzQsIDM3LCAzNCwgMzcsIDM3LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzcsIDM0LCAzNywgMzcsIDM0LCAzNCwgMzcsIDM0LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzQsIDI4LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAyOCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA0MCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgNDIsIAotICAgIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDMsIDQzLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDQsIAotICAgIDQ0LCAyNiwgNDQsIDQzLCA0NSwgNDMsIDQ1LCA0NSwgNDUsIDQzLCA0NSwgNDMsIDQzLCA0NiwgNDIsIDQ0LCA0NCwgNDQsIAotICAgIDQ0LCA0NCwgNDQsIDI2LCAyNiwgMjYsIDI2LCA0NCwgMjYsIDQ0LCAyNiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0NCwgNDQsIAotICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDMsIDQ0LCA0MiwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAotICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0OCwgNDksIDQ5LCA0OSwgNDksIDQ4LCA1MCwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA1MSwgNTEsIDQ5LCA0OSwgNDksIDQ5LCA1MSwgNTEsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNTIsIDUyLCA1MiwgNTIsIDUyLCA0OSwgNDksIDQ5LCA0OSwgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA1MywgNDcsIDQ5LCA0OSwgNDksIDQ3LCA0NywgNDcsIDQ5LCA0OSwgNTQsIDQ3LCA0NywgNDcsIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0NywgNDgsIDQ5LCA0OSwgNDcsIDU1LCA1NiwgNTYsIDU1LCA1NiwgNTYsIDU1LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMzcsIDM0LCAzNywgMzQsIDQzLCA0NCwgMzcsIAotICAgIDM0LCAwLCAwLCA0MiwgMzQsIDM0LCAzNCwgNTcsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgMzcsIDU3LCAzNywgMzcsIDM3LCAKLSAgICAwLCAzNywgMCwgMzcsIDM3LCAzNCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIAotICAgIDM4LCAzOCwgMzgsIDM4LCAwLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzcsIDM3LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgCi0gICAgMzQsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAzNCwgMzQsIDM3LCAzNywgCi0gICAgMzcsIDM0LCAzNCwgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzQsIDU4LCAzNywgCi0gICAgMzQsIDM3LCAzNywgMzQsIDM0LCAzNywgMzcsIDM3LCAzNywgMzgsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgCi0gICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgCi0gICAgMzgsIDM4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgCi0gICAgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDM0LCAyOCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgNTksIDYwLCA2MCwgNjAsIDYwLCA2MCwgCi0gICAgNjEsIDYxLCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKKyAgICAyNSwgMjYsIDI3LCAyOCwgMjksIDE2LCAzMCwgMjUsIDMxLCAzMiwgMzMsIDM0LCAzNCwgMjYsIDM1LCAyNSwgMjIsIDI2LCAKKyAgICAzNCwgMjgsIDM2LCAzNywgMzcsIDM3LCAyMiwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzksIDM4LCAzOCwgMzgsIDM4LCAKKyAgICAzOCwgMzgsIDM4LCAzOCwgMzgsIDM5LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MCwgMzksIDM4LCAzOCwgMzgsIDM4LCAKKyAgICAzOCwgMzksIDQxLCA0MiwgNDIsIDQzLCA0MywgNDMsIDQzLCA0MSwgNDMsIDQyLCA0MiwgNDIsIDQzLCA0MiwgNDIsIDQzLCAKKyAgICA0MywgNDEsIDQzLCA0MiwgNDIsIDQzLCA0MywgNDMsIDQwLCA0MSwgNDIsIDQyLCA0MywgNDIsIDQzLCA0MSwgNDMsIDM4LCAKKyAgICA0MiwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0NCwgNDEsIDM4LCAKKyAgICA0MiwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQyLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzksIDQxLCAzOCwgNDMsIDM4LCA0MiwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MSwgNDUsIDI4LCAzOCwgNDMsIDM4LCAKKyAgICA0MywgNDEsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQ1LCAyOCwgMzksIDQxLCAzOCwgNDIsIDM4LCA0MywgMzgsIDQyLCAKKyAgICAyOCwgMzksIDQxLCAzOCwgNDIsIDM4LCA0MywgMzgsIDQzLCAzOSwgNDEsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM5LCA0MSwgMzgsIDQzLCAzOCwgNDIsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKKyAgICAzNSwgNDYsIDQ0LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ0LCA0NiwgNDQsIDQ0LCA0NCwgNDYsIDQ2LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDYsIDQ0LCA0NCwgNDYsIDQ0LCA0NCwgNDQsIDQ2LCA0NiwgNDYsIDQ0LCA0NCwgNDYsIDQ0LCAzOCwgNDMsIDQ0LCAKKyAgICA0NiwgNDQsIDQ2LCA0NCwgNDQsIDQ2LCA0NCwgNDYsIDQ2LCA0NCwgNDYsIDQ0LCAzOCwgNDMsIDQ0LCA0NCwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NCwgNDYsIDQ2LCA0NywgNDQsIDQ2LCA0NiwgNDYsIDQ3LCA0NywgNDcsIDQ3LCA0OCwgNDksIDM1LCAKKyAgICA0OCwgNDksIDM1LCA0OCwgNDksIDM1LCAzOCwgNDIsIDM4LCA0MiwgMzgsIDQyLCAzOCwgNDIsIDM4LCA0MiwgMzgsIDQyLCAKKyAgICAzOCwgNDIsIDM4LCA0MiwgNDYsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQ0LCA0NiwgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDQzLCA0OCwgNDksIDM1LCAzOCwgNDMsIDQ0LCA0NCwgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDQsIDQ2LCAzOCwgNDMsIDQ0LCAKKyAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDQsIDQ0LCA0NiwgNDQsIDQ0LCA0NiwgNDYsIDQ0LCA0NiwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ2LCA0MSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDcsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUxLCA1MSwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUzLCAKKyAgICA1MywgNTQsIDUzLCA1MSwgNTUsIDUxLCA1NSwgNTUsIDU1LCA1MSwgNTUsIDUxLCA1MSwgNTYsIDUyLCA1MywgNTMsIDUzLCAKKyAgICA1MywgNTMsIDUzLCAyNiwgMjYsIDI2LCAyNiwgNTcsIDI2LCA1MywgNTQsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTMsIDUzLCAKKyAgICA1MywgNTMsIDUzLCA1MywgNTMsIDUxLCA1MywgNTIsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCAKKyAgICA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OSwgNTgsIDU4LCA1OCwgNTgsIDU4LCAKKyAgICA1OCwgNTgsIDU5LCA1OSwgNTgsIDU5LCA1OCwgNTksIDU4LCA1OCwgNjAsIDYxLCA2MSwgNjEsIDYxLCA2MCwgNjIsIDYxLCAKKyAgICA2MSwgNjEsIDYxLCA2MSwgNjMsIDYzLCA2NCwgNjQsIDY0LCA2NCwgNjUsIDY1LCA2MSwgNjEsIDYxLCA2MSwgNjQsIDY0LCAKKyAgICA2MSwgNjQsIDY0LCA2MSwgNjEsIDY2LCA2NiwgNjYsIDY2LCA2NywgNjEsIDYxLCA2MSwgNjEsIDU5LCA1OSwgNTksIDY4LCAKKyAgICA2OCwgNTgsIDY4LCA2OCwgNjksIDU5LCA2MSwgNjEsIDYxLCA1OSwgNTksIDU5LCA2MSwgNjEsIDcwLCA1OSwgNTksIDU5LCAKKyAgICA2MSwgNjEsIDYxLCA2MSwgNTksIDYwLCA2MSwgNjEsIDU5LCA3MSwgNzIsIDcyLCA3MSwgNzIsIDcyLCA3MSwgNTksIDU5LCAKKyAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDQ0LCA0NiwgNDQsIDQ2LCA3MywgNTMsIDQ0LCAKKyAgICA0NiwgMCwgMCwgNTAsIDQ2LCA0NiwgNDYsIDc0LCAwLCAwLCAwLCAwLCAwLCA1NywgNzUsIDM4LCA3NCwgMzgsIDM4LCAzOCwgCisgICAgMCwgMzgsIDAsIDM4LCAzOCwgNDMsIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAKKyAgICAzOSwgMzksIDM5LCAzOSwgMCwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM4LCAzOCwgNDMsIDQzLCA0MywgNDMsIAorICAgIDQzLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIAorICAgIDQ2LCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDMsIDQzLCA0MywgNDMsIDQzLCA0NCwgMzUsIDM1LCA0OCwgNzYsIAorICAgIDc2LCAzNSwgMzUsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAzNSwgMzUsIDM1LCA0NiwgNDgsIDM1LCA3NywgNDQsIAorICAgIDQ2LCA0OCwgNDQsIDQ2LCA0NiwgNDQsIDQ0LCA0NCwgMzgsIDc4LCA0NCwgMzgsIDQ0LCA0NCwgNDQsIDM4LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgMzgsIDM4LCAzOCwgNDQsIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDc4LCAzOSwgMzksIAorICAgIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIAorICAgIDM5LCAzOSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDIsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIAorICAgIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MywgNDIsIAorICAgIDQ2LCA0MywgNDYsIDQ2LCA0NiwgNDMsIDQ2LCA0NiwgNDYsIDQ2LCA0MywgNDMsIDQzLCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDM4LCA0MywgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDc5LCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgxLCA4MSwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDM4LCA0MywgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDYsIAorICAgIDM4LCA0MywgMzgsIDQzLCA0NCwgNDYsIDM4LCA0MywgNDQsIDQ2LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0NCwgNDYsIAorICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQ0LCA0NiwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAorICAgIDM4LCA0MywgNDQsIDQ2LCAzOCwgNDMsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAwLCAwLCA1MiwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgMCwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAzNSwgCisgICAgMCwgODIsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCA4NCwgODAsIDgwLCA4MCwgODAsIDg0LCA4MCwgODAsIDgwLCA4NSwgODQsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDgwLCA4MCwgODQsIDgwLCA4MCwgODUsIAorICAgIDg2LCA4MCwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk2LCA5NywgOTgsIDk5LCAxMDAsIDEwMSwgCisgICAgMTAyLCAxMDMsIDEwNCwgMTAyLCA4MCwgODQsIDEwMiwgOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwMiwgMTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDYsIDEwNiwgMTA2LCAKKyAgICAxMDYsIDAsIDAsIDc3LCA3NywgMTA3LCAxMDgsIDEwOCwgMTA5LCAxMTAsIDExMSwgMjcsIDI3LCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDExMiwgMTEzLCAxMTQsIDExMSwgMCwgMCwgMTExLCAxMTEsIDAsIDExNSwgMTE2LCAxMTYsIAorICAgIDExNiwgMTE2LCAxMTYsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE3LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExOCwgMTE5LCAxMjAsIAorICAgIDExMiwgMTEzLCAxMTQsIDEyMSwgMTIyLCAxMjMsIDEyMywgMTI0LCA4NCwgODAsIDgwLCA4MCwgODAsIDgwLCA4NCwgODAsIAorICAgIDgwLCAwLCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEwOCwgMTI2LCAxMjYsIAorICAgIDExMSwgMTE1LCAxMTUsIDEyNywgMTE1LCAxMTUsIDExNSwgMTE1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTYsIAorICAgIDExNSwgMTE2LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNiwgMTExLCAxMTUsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAxMDYsIDgxLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODQsIDgwLCAxMTcsIDExNywgODAsIDgwLCAyNywgODQsIDgwLCA4MCwgODQsIDExNSwgMTE1LCAKKyAgICAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDExNSwgMTE1LCAxMTUsIDEzMCwgCisgICAgMTMwLCAxMTUsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIAorICAgIDExMSwgMTExLCAwLCAxMzEsIDExNSwgMTMyLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCA4MCwgODQsIDgwLCA4MCwgODQsIDgwLCA4MCwgODQsIDg0LCAKKyAgICA4NCwgODAsIDg0LCA4NCwgODAsIDg0LCA4MCwgODAsIDgwLCA4NCwgODAsIDg0LCA4MCwgODQsIDgwLCA4NCwgODAsIDgwLCAKKyAgICAwLCAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIAorICAgIDEzMywgMTMzLCAxMzMsIDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0LCAxMzQsIAorICAgIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODQsIDgwLCAxMzUsIDEzNSwgMjcsIDEzNiwgMTM2LCAxMzYsIDEzNSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCA4MCwgODAsIDgwLCA4MCwgMTM1LCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAxMzUsIDgwLCA4MCwgODAsIDEzNSwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgCisgICAgMTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxMzMsIDEzMywgMTMzLCAxMzcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzgsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzgsIDQ3LCA0NywgCisgICAgMTM4LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDEzOSwgNDcsIDEzNywgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzMsIAorICAgIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIDEzNywgMTM3LCAxMzcsIDE0MCwgMTM3LCAwLCA0NywgODAsIDg0LCA4MCwgCisgICAgODAsIDEzMywgMCwgMCwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDQ3LCA0NywgMTMzLCAxMzMsIAorICAgIDgyLCA4MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCA4MiwgNTIsIDQ3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMTMzLCAxMzcsIDEzNywgMCwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxNDMsIDQ3LCAxNDQsIAorICAgIDEzNywgMTM3LCAxMzMsIDEzMywgMTMzLCAxMzMsIDAsIDAsIDEzNywgMTM3LCAwLCAwLCAxNDUsIDE0NSwgMTQwLCA0NywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAwLCAwLCAwLCAwLCAxNDEsIDE0MSwgMCwgMTQxLCA0NywgNDcsIDEzMywgMTMzLCAKKyAgICAwLCAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDQ3LCA0NywgMTQ2LCAxNDYsIAorICAgIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDc5LCAxNDYsIDAsIDAsIDAsIDAsIDAsIDEzMywgMTMzLCAxMzcsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMTQxLCAwLCA0NywgMTQxLCAwLCA0NywgNDcsIDAsIDAsIDE0MywgMCwgCisgICAgMTM3LCAxMzcsIDEzNywgMTMzLCAxMzMsIDAsIDAsIDAsIDAsIDEzMywgMTMzLCAwLCAwLCAxMzMsIDEzMywgMTQwLCAwLCAwLCAKKyAgICAwLCAxMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MSwgMTQxLCAxNDEsIDQ3LCAwLCAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTMzLCAxMzMsIDQ3LCA0NywgCisgICAgNDcsIDEzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMzLCAxMzMsIDEzNywgMCwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMTQzLCA0NywgMTM3LCAKKyAgICAxMzcsIDEzNywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDAsIDEzMywgMTMzLCAxMzcsIDAsIDEzNywgMTM3LCAxNDAsIDAsIAorICAgIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDEzMywgMTMzLCAwLCAKKyAgICAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDAsIDE0NiwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMzLCAxMzcsIDEzNywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDE0MywgNDcsIDE0NCwgMTMzLCAxMzcsIAorICAgIDEzMywgMTMzLCAxMzMsIDEzMywgMCwgMCwgMTM3LCAxNDUsIDAsIDAsIDE0NSwgMTQ1LCAxNDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE0OCwgMTQ0LCAwLCAwLCAwLCAwLCAxNDEsIDE0MSwgMCwgNDcsIDQ3LCA0NywgMTMzLCAxMzMsIDAsIDAsIAorICAgIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgNzksIDQ3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzMsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAKKyAgICAwLCAwLCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDEzOCwgNDcsIDAsIDAsIDAsIDQ3LCA0NywgMCwgNDcsIDAsIDQ3LCA0NywgCisgICAgMCwgMCwgMCwgNDcsIDQ3LCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAxNDQsIDEzNywgMTMzLCAxMzcsIDEzNywgMCwgMCwgMCwgCisgICAgMTM3LCAxMzcsIDEzNywgMCwgMTQ1LCAxNDUsIDE0NSwgMTQwLCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIAorICAgIDE0MiwgMTQyLCAxNDIsIDE0NywgMTQ3LCAxNDcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDE0NiwgMjcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEzNywgMTM3LCAxMzcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgCisgICAgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCA0NywgMTMzLCAxMzMsIDEzMywgMTM3LCAxMzcsIDEzNywgMTM3LCAwLCAxMzMsIAorICAgIDEzMywgMTQ5LCAwLCAxMzMsIDEzMywgMTMzLCAxNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MCwgMTUxLCAwLCA0NywgCisgICAgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgMTMzLCAxMzMsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIAorICAgIDE1MiwgMTUyLCA3OSwgMCwgMCwgMTM3LCAxMzcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIAorICAgIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxNDMsIDQ3LCAxMzcsIDE1MywgMTQ1LCAxMzcsIDE0NCwgMTM3LCAKKyAgICAxMzcsIDAsIDE1MywgMTQ1LCAxNDUsIDAsIDE0NSwgMTQ1LCAxMzMsIDE0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAKKyAgICAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCAwLCA0NywgNDcsIDEzMywgMTMzLCAwLCAwLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDAsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTM3LCAxMzcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAKKyAgICA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDE0NCwgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzMsIDEzMywgCisgICAgMCwgMTM3LCAxMzcsIDEzNywgMCwgMTQ1LCAxNDUsIDE0NSwgMTQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgMTMzLCAxMzMsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMCwgMCwgMCwgNzksIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDEzNywgMTM3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDAsIDAsIDAsIDE1NCwgMCwgMCwgMCwgMCwgMTQ0LCAxMzcsIDEzNywgMTMzLCAxMzMsIDEzMywgMCwgMTMzLCAKKyAgICAwLCAxMzcsIDEzNywgMTQ1LCAxMzcsIDE0NSwgMTQ1LCAxNDUsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM3LCAxMzcsIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIDQ3LCAxNTUsIDEzMywgMTMzLCAKKyAgICAxMzMsIDEzMywgMTU2LCAxNTYsIDE0MCwgMCwgMCwgMCwgMCwgMTQ2LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA1MiwgCisgICAgMTMzLCAxNTcsIDE1NywgMTU3LCAxNTcsIDEzMywgMTMzLCAxMzMsIDgyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDgyLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCAKKyAgICAwLCA0NywgMCwgMCwgNDcsIDQ3LCAwLCA0NywgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgMCwgNDcsIDAsIDQ3LCAwLCAwLCA0NywgNDcsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIDQ3LCAxNTUsIDEzMywgMTMzLCAxMzMsIDEzMywgMTU4LCAxNTgsIDAsIDEzMywgCisgICAgMTMzLCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA1MiwgMCwgMTU5LCAxNTksIDE1OSwgMTU5LCAxMzMsIAorICAgIDEzMywgMCwgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAwLCAwLCAxNTUsIAorICAgIDE1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDc5LCA3OSwgNzksIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIAorICAgIDgyLCA4MiwgMTYwLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA3OSwgNzksIDc5LCA3OSwgNzksIDg0LCA4NCwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDcsIAorICAgIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDc5LCA4NCwgNzksIDg0LCA3OSwgMTYxLCAKKyAgICAxNjIsIDE2MywgMTYyLCAxNjMsIDEzNywgMTM3LCA0NywgNDcsIDQ3LCAxNDEsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIAorICAgIDQ3LCA0NywgMTQxLCA0NywgNDcsIDQ3LCA0NywgMTQxLCA0NywgNDcsIDQ3LCA0NywgMTQxLCA0NywgNDcsIDQ3LCA0NywgCisgICAgMTQxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNDEsIDQ3LCA0NywgNDcsIDAsIAorICAgIDAsIDAsIDAsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY2LCAxNjYsIDE2OCwgMTY2LCAxNjgsIDE2NSwgMTY1LCAxNjUsIDE2NSwgCisgICAgMTMzLCAxMzcsIDE2NSwgMTY2LCA4MCwgODAsIDE0MCwgODIsIDgwLCA4MCwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIAorICAgIDEzMywgMTMzLCAxMzMsIDE2NiwgMTMzLCAxMzMsIDEzMywgMTMzLCAwLCAxMzMsIDEzMywgMTMzLCAxMzMsIDE2NiwgMTMzLCAKKyAgICAxMzMsIDEzMywgMTMzLCAxNjYsIDEzMywgMTMzLCAxMzMsIDEzMywgMTY2LCAxMzMsIDEzMywgMTMzLCAxMzMsIDE2NiwgCisgICAgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTY2LCAxMzMsIAorICAgIDEzMywgMTMzLCAwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDg0LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICAwLCA3OSwgNzksIDgyLCA4MiwgODIsIDgyLCA4MiwgNzksIDc5LCA3OSwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM4LCA0NywgNDcsIDQ3LCA0NywgMTM3LCAxMzcsIDEzMywgMTQ4LCAxMzMsIAorICAgIDEzMywgMTM3LCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTQzLCAxMzcsIDE0MCwgMTQwLCAxMzcsIDEzNywgMTMzLCAKKyAgICAxMzMsIDQ3LCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDgyLCA4MiwgODIsIAorICAgIDgyLCA4MiwgODIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNywgMTM3LCAxMzMsIDEzMywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDEzMywgMTMzLCAxMzMsIDQ3LCAxMzcsIDEzNywgMTM3LCA0NywgNDcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIAorICAgIDEzNywgNDcsIDQ3LCA0NywgMTMzLCAxMzMsIDEzMywgMTMzLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMTMzLCAxMzcsIDEzNywgMTMzLCAxMzMsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIAorICAgIDg0LCA0NywgMTM3LCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDEzNywgMTM3LCAKKyAgICAxMzcsIDEzMywgNzksIDc5LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA4MiwgNTAsIDAsIDAsIDAsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDQ3LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgCisgICAgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgODAsIAorICAgIDc5LCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgCisgICAgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAwLCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDgyLCA4MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAxNzEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCAxNjMsIDAsIDAsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDgyLCA4MiwgODIsIDE3MiwgMTcyLCAxNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMTMzLCAxMzMsIDE0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMzLCAxMzMsIDE0MCwgODIsIAorICAgIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIDEzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIAorICAgIDAsIDEzMywgMTMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTczLCAxNzMsIDEzNywgMTMzLCAxMzMsIDEzMywgCisgICAgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTMzLCAxMzcsIAorICAgIDEzNywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTQwLCAxMzMsIDgyLCA4MiwgODIsIAorICAgIDUyLCA4MiwgODIsIDgyLCAxNDYsIDQ3LCA4MCwgMCwgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgCisgICAgMTUyLCAxNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDgzLCAxMzYsIDEzNiwgCisgICAgMTM2LCAxMzYsIDEzMywgMTMzLCAxMzMsIDE3MSwgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIAorICAgIDE0MiwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDUyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA4NiwgNDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDAsIDAsIDAsIDEzMywgMTMzLCAxMzMsIDEzNywgMTM3LCAxMzcsIDEzNywgMTMzLCAxMzMsIDEzNywgMTM3LCAKKyAgICAxMzcsIDAsIDAsIDAsIDAsIDEzNywgMTM3LCAxMzMsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDg1LCA4MCwgODQsIAorICAgIDAsIDAsIDAsIDAsIDI3LCAwLCAwLCAwLCAxMzYsIDEzNiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMTQyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgMCwgMCwgMCwgMCwgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAKKyAgICAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzcsIDEzNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIAorICAgIDAsIDAsIDAsIDEzNiwgMTM2LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgODAsIDg0LCAxMzcsIDEzNywgMTM3LCAwLCAwLCA4MiwgODIsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM3LCAxMzMsIDEzNywgCisgICAgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAwLCAxNDAsIDEzNywgMTMzLCAxMzcsIDEzNywgMTMzLCAxMzMsIAorICAgIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzMywgMTMzLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDg0LCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIAorICAgIDE0MiwgMTQyLCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDUyLCA4MiwgODIsIDgyLCAKKyAgICA4MiwgODIsIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzNywgNDcsIAorICAgIDEzOCwgNDcsIDEzOCwgNDcsIDEzOCwgNDcsIDEzOCwgNDcsIDEzOCwgNDcsIDQ3LCA0NywgMTM4LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNDMsIDE0NCwgMTMzLCAxMzMsIDEzMywgMTMzLCAKKyAgICAxMzMsIDE0NSwgMTMzLCAxNDUsIDEzNywgMTM3LCAxNDUsIDE0NSwgMTMzLCAxNDUsIDE3NCwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCisgICAgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA4MCwgCisgICAgODQsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAwLCAwLCAKKyAgICAwLCAxMzMsIDEzMywgMTM3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzcsIDEzMywgCisgICAgMTMzLCAxMzMsIDEzMywgMTM3LCAxMzcsIDEzMywgMTMzLCAxNzQsIDAsIDAsIDAsIDQ3LCA0NywgMTQyLCAxNDIsIDE0MiwgCisgICAgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTMzLCAKKyAgICAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzNywgMTM3LCAxMzMsIDE0MywgMCwgMCwgMCwgODIsIDgyLCAKKyAgICA4MiwgODIsIDgyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDAsIDAsIDAsIAorICAgIDQ3LCA0NywgNDcsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgODIsIDgyLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MiwgMTc1LCA4NCwgODQsIDg0LCA4NCwgODQsIDgwLCA4MCwgODQsIAorICAgIDg0LCA4NCwgODQsIDgwLCAxMzcsIDE3NSwgMTc1LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDE3NSwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDg0LCA0NywgNDcsIDQ3LCA0NywgMTM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDUwLCA1MCwgNTAsIDUyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA1MCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA4MCwgODAsIDg0LCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODQsIDgwLCA4MCwgMTc2LCAxNzcsIDg0LCAxNzgsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NCwgODAsIDg0LCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgMzUsIDE3OSwgNDYsIDQ2LCA0NCwgNDYsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgCisgICAgNDYsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgCisgICAgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCAwLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAwLCAwLCA0MywgNDMsIDQzLCA0MywgCisgICAgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgCisgICAgNDMsIDQzLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDAsIDAsIDM4LCAKKyAgICAzOCwgMzgsIDM4LCAzOCwgMzgsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgMzgsIDAsIDM4LCAKKyAgICAwLCAzOCwgMCwgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIAorICAgIDM4LCA0MywgMTgwLCA0MywgMTgwLCA0MywgMTgwLCA0MywgMTgwLCA0MywgMTgwLCA0MywgMTgwLCA0MywgMTgwLCAwLCAwLCAKKyAgICA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAKKyAgICA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAKKyAgICA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAKKyAgICA0MywgNDMsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTgyLCAxODEsIDU3LCAxODAsIDU3LCA1NywgNzUsIAorICAgIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4MiwgMzgsIDE4MiwgMTgxLCA3NSwgNzUsIDc1LCA0MywgNDMsIDQzLCAKKyAgICAxODAsIDAsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTgyLCAwLCA3NSwgNzUsIDc1LCA0MywgNDMsIDQzLCAxODAsIDQzLCAKKyAgICA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODIsIDM4LCA3NSwgMTgzLCAxODMsIDAsIDAsIDQzLCA0MywgNDMsIDAsIDQzLCAKKyAgICA0MywgMzgsIDE4MiwgMzgsIDE4MiwgMTgxLCAxODMsIDU3LCAwLCAxODQsIDE4NCwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIAorICAgIDE4NSwgMTg1LCAxODUsIDE4NSwgMTMxLCAxMzEsIDEzMSwgMTczLCAxODYsIDE4NywgMTg4LCA4MywgMTg3LCAxODcsIDE4NywgCisgICAgMjIsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTAsIDE5MSwgMTkyLCAxOTMsIDIyLCAyMiwgMjIsIDEzNiwgMTk0LCAKKyAgICAxOTQsIDE5NCwgMjIsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjEsIDIwMiwgMTA4LCAyMDIsIDIwMywgCisgICAgMjA0LCAyMiwgMTg5LCAxODksIDEzNiwgMjksIDM2LCAyMiwgMTg5LCAxMzYsIDE5NCwgMjA1LCAyMDUsIDEzNiwgMTM2LCAKKyAgICAxMzYsIDIwNiwgMTYyLCAxNjMsIDE4OSwgMTg5LCAxODksIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgCisgICAgMTM2LCA3NywgMTM2LCAyMDUsIDEzNiwgMTM2LCAxODksIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTg1LCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMjA3LCA1MCwgMCwgMCwgMzQsIDIwNywgMjA3LCAyMDcsIDIwNywgMjA3LCAyMDgsIDIwOCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAKKyAgICAyMDcsIDM0LCAzNCwgMzQsIDM0LCAyMDcsIDIwNywgMjA3LCAyMDcsIDIwNywgMjA4LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAKKyAgICAxNDYsIDE0NiwgMTQ2LCAxNDYsIDIxMywgMjE0LCAxNDYsIDE0NiwgMjMsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIAorICAgIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgMTc1LCAxNzUsIDgwLCA4MCwgODAsIDgwLCAxNzUsIDE3NSwgCisgICAgMTc1LCA4MCwgODAsIDgxLCA4MSwgODEsIDgxLCA4MCwgODEsIDgxLCA4MSwgMTc1LCAxNzUsIDgwLCA4NCwgODAsIDE3NSwgCisgICAgMTc1LCA4NCwgODQsIDg0LCA4NCwgODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDIxNSwgMjE1LCA0OCwgMjE2LCAyNywgMjE2LCAyMTUsIDQ4LCAyNywgMjE2LCAzNSwgNDgsIDQ4LCA0OCwgMzUsIDM1LCA0OCwgCisgICAgNDgsIDQ4LCAyOCwgMjcsIDQ4LCAyMTYsIDI3LCAyNywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAyNywgMjcsIDIxNSwgMjE2LCAKKyAgICAyMTYsIDI3LCA0OCwgMjcsIDIxNywgMjcsIDQ4LCAyNywgMTgyLCAyMTcsIDQ4LCA0OCwgMjE4LCAzNSwgNDgsIDQ4LCA0NCwgCisgICAgNDgsIDM1LCAxNTUsIDE1NSwgMTU1LCAxNTUsIDM1LCAyNywgMjE1LCAzNSwgMzUsIDQ4LCA0OCwgMjE5LCA3NywgNzcsIDc3LCAKKyAgICA3NywgNDgsIDM1LCAzNSwgMzUsIDM1LCAyNywgNzcsIDI3LCAyNywgNDYsIDc5LCAyMjAsIDIyMCwgMjIwLCAzNywgMzcsIAorICAgIDIyMCwgMjIwLCAyMjAsIDIyMCwgMjIwLCAyMjAsIDM3LCAzNywgMzcsIDM3LCAyMjAsIDIyMSwgMjIxLCAyMjEsIDIyMSwgCisgICAgMjIxLCAyMjEsIDIyMSwgMjIxLCAyMjEsIDIyMSwgMjIxLCAyMjEsIDIyMiwgMjIyLCAyMjIsIDIyMiwgMjIxLCAyMjEsIAorICAgIDIyMSwgMjIxLCAyMjEsIDIyMSwgMjIxLCAyMjEsIDIyMSwgMjIxLCAyMjIsIDIyMiwgMjIyLCAyMjIsIDIyMiwgMjIyLCAKKyAgICAxNzIsIDE3MiwgMTcyLCA0NCwgNDYsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgCisgICAgNDAsIDQwLCA0MCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyMjMsIDIyMywgMjcsIDI3LCAyNywgMjcsIDc3LCAyNywgMjcsIDc3LCAKKyAgICAyNywgMjcsIDc3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjIzLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyMjQsIDIyMywgMjIzLCAyNywgMjcsIDQwLCAyNywgNDAsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAKKyAgICA3NywgNzcsIDc3LCA0MCwgMjI1LCAyMjYsIDIyNiwgMjI3LCA3NywgNzcsIDQwLCAyMjYsIDIyNywgMjI1LCAyMjYsIDIyNywgCisgICAgMjI1LCA3NywgNDAsIDc3LCAyMjYsIDIyOCwgMjI5LCA3NywgMjI2LCAyMjUsIDc3LCA3NywgNzcsIDIyNiwgMjI1LCAyMjUsIAorICAgIDIyNiwgNDAsIDIyNiwgMjI2LCAyMjUsIDIyNSwgNDAsIDIyNywgNDAsIDIyNywgNDAsIDQwLCA0MCwgNDAsIDIyNiwgMjMwLCAKKyAgICAyMTksIDIyNiwgMjE5LCAyMTksIDIyNSwgMjI1LCAyMjUsIDQwLCA0MCwgNDAsIDQwLCA3NywgMjI1LCA3NywgMjI1LCAyMjYsIAorICAgIDIyNiwgMjI1LCAyMjUsIDIyNSwgMjI3LCAyMjUsIDIyNSwgMjI3LCAyMjUsIDIyNSwgMjI3LCAyMjYsIDIyNywgMjI1LCAKKyAgICAyMjUsIDIyNiwgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjYsIDIyNSwgMjI1LCAyMjUsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDIyNSwgMjMxLCA0MCwgMjI3LCA3NywgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjUsIDIyNSwgMjI2LCAKKyAgICAyMjYsIDc3LCAyMjMsIDIzMSwgMjMxLCAyMjcsIDIyNywgMjI1LCAyMjUsIDIyNywgMjI3LCAyMjUsIDIyNSwgMjI3LCAyMjcsIAorICAgIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNywgMjI3LCAyMjYsIDIyNiwgMjI3LCAyMjcsIDIyNiwgMjI2LCAKKyAgICAyMjcsIDIyNywgMjI1LCAyMjUsIDIyNSwgNzcsIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDc3LCA3NywgNDAsIDc3LCA3NywgCisgICAgMjI1LCA0MCwgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjUsIDIyNSwgNzcsIDQwLCAyMjUsIDIyNSwgMjI1LCAKKyAgICAyMjUsIDIyNSwgMjI1LCAyMjcsIDIyNywgMjI3LCAyMjcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgCisgICAgMjI1LCAyMjUsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI1LCAyMjYsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDIyNSwgMjI1LCA3NywgNzcsIDc3LCA3NywgMjI1LCAyMjUsIAorICAgIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjcsIDIyNywgMjI3LCAyMjcsIDIyNSwgMjI1LCAKKyAgICAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNywgMjI3LCAyMjcsIDIyNywgNzcsIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgCisgICAgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjI1LCAyMjUsIDIyNSwgMjI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDIyNSwgMjI1LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjMyLCAyMzMsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgMjcsIDc3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCA3OSwgMjcsIDI3LCAyNywgMjcsIDI3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCiAgICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMCwgMCwgNDIsIDYyLCA2MiwgNjIsIDYyLCA2MiwgNjIsIDAsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDAsIDYyLCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgNjQsIDYwLCA2MCwgNjAsIDYwLCA2NCwgNjAsIDYwLCA2MCwgNjUsIDY0LCAKLSAgICA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2MCwgNjAsIDY0LCA2MCwgNjAsIDY1LCAKLSAgICA2NiwgNjAsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCAKLSAgICA4MiwgODMsIDg0LCA4MiwgNjAsIDY0LCA4MiwgNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg1LCA4NSwgODUsIDg1LCAKLSAgICA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAKLSAgICA4NSwgODUsIDg1LCA4NSwgODUsIDAsIDAsIDAsIDAsIDAsIDg1LCA4NSwgODUsIDgyLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgODYsIDg2LCA4NiwgODYsIDAsIDAsIDU4LCA1OCwgODcsIDg4LCA4OCwgODksIDkwLCA5MSwgMjcsIAotICAgIDI3LCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDkyLCA5MywgOTQsIDkxLCAwLCAwLCA5MSwgOTEsIDAsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NiwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk3LCA5OCwgOTksIDkyLCA5MywgOTQsIDEwMCwgMTAxLCA2MCwgNjAsIDY0LCA2NCwgNjAsIAotICAgIDYwLCA2MCwgNjAsIDYwLCA2NCwgNjAsIDYwLCAwLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgCi0gICAgMTAyLCAxMDIsIDg4LCAxMDMsIDEwMywgOTEsIDk1LCA5NSwgMTA0LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5MSwgOTUsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA4NiwgNjEsIDYwLCA2MCwgNjAsIDYwLCA2NCwgNjAsIAotICAgIDk2LCA5NiwgNjAsIDYwLCAyNywgNjQsIDYwLCA2MCwgNjQsIDk1LCA5NSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCi0gICAgMTA1LCAxMDUsIDEwNSwgMTA1LCA5NSwgOTUsIDk1LCAxMDYsIDEwNiwgOTUsIDkxLCA5MSwgOTEsIDkxLCA5MSwgOTEsIDkxLCAKLSAgICA5MSwgOTEsIDkxLCA5MSwgOTEsIDkxLCA5MSwgMCwgMTA3LCA5NSwgMTA4LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA2MCwgNjQsIDYwLCA2MCwgNjQsIDYwLCA2MCwgNjQsIDY0LCA2NCwgNjAsIDY0LCA2NCwgCi0gICAgNjAsIDY0LCA2MCwgNjAsIDYwLCA2NCwgNjAsIDY0LCA2MCwgNjQsIDYwLCA2NCwgNjAsIDYwLCAwLCAwLCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDEwOSwgMTA5LCAxMDksIAotICAgIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCA5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCA4NSwgODUsIDg1LCAKLSAgICA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAKLSAgICA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCAKLSAgICA2MCwgNjQsIDYwLCAxMTEsIDExMSwgMjcsIDU3LCA1NywgNTcsIDExMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA5LCAxMDksIDExMiwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMTEzLCA0MCwgMTEyLCAKLSAgICAxMTIsIDExMiwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDExMiwgMTEyLCAxMTIsIDExMiwgCi0gICAgMTE0LCAwLCAwLCA0MCwgNjAsIDY0LCA2MCwgNjAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCAxMDksIDEwOSwgNjIsIDYyLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKLSAgICAxMTUsIDYyLCA0MiwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMTA5LCAxMTIsIAotICAgIDExMiwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCA0MCwgNDAsIDAsIDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAKLSAgICAxMTMsIDQwLCAxMTIsIDExMiwgMTEyLCAxMDksIDEwOSwgMTA5LCAxMDksIDAsIDAsIDExMiwgMTEyLCAwLCAwLCAxMTIsIAotICAgIDExMiwgMTE0LCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDAsIDQwLCA0MCwgCi0gICAgNDAsIDEwOSwgMTA5LCAwLCAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDQwLCAKLSAgICA0MCwgMTE2LCAxMTYsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDU5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMDksIAotICAgIDEwOSwgMTEyLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDAsIDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCAwLCA0MCwgNDAsIDAsIDQwLCA0MCwgCi0gICAgMCwgMCwgMTEzLCAwLCAxMTIsIDExMiwgMTEyLCAxMDksIDEwOSwgMCwgMCwgMCwgMCwgMTA5LCAxMDksIDAsIDAsIDEwOSwgCi0gICAgMTA5LCAxMTQsIDAsIDAsIDAsIDEwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDEwOSwgCi0gICAgMTA5LCA0MCwgNDAsIDQwLCAxMDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwOSwgMTA5LCAxMTIsIDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDExMywgCi0gICAgNDAsIDExMiwgMTEyLCAxMTIsIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAwLCAxMDksIDEwOSwgMTEyLCAwLCAxMTIsIAotICAgIDExMiwgMTE0LCAwLCAwLCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCAKLSAgICAxMDksIDEwOSwgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAwLCAxMTYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwOSwgMTEyLCAxMTIsIDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgNDAsIDQwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAxMTMsIDQwLCAxMTIsIAotICAgIDEwOSwgMTEyLCAxMDksIDEwOSwgMTA5LCAxMDksIDAsIDAsIDExMiwgMTEyLCAwLCAwLCAxMTIsIDExMiwgMTE0LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxMDksIDExMiwgMCwgMCwgMCwgMCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCAxMDksIDEwOSwgCi0gICAgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCA1OSwgNDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwOSwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCA0MCwgNDAsIDAsIDQwLCAwLCAKLSAgICA0MCwgNDAsIDAsIDAsIDAsIDQwLCA0MCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgMTEyLCAxMTIsIDEwOSwgMTEyLCAxMTIsIDAsIAotICAgIDAsIDAsIDExMiwgMTEyLCAxMTIsIDAsIDExMiwgMTEyLCAxMTIsIDExNCwgMCwgMCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAotICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTcsIDExNywgMTE3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAxMTYsIDI3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxMTIsIDExMiwgMTEyLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIAotICAgIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgNDAsIDEwOSwgMTA5LCAxMDksIDExMiwgMTEyLCAxMTIsIAotICAgIDExMiwgMCwgMTA5LCAxMDksIDEwOSwgMCwgMTA5LCAxMDksIDEwOSwgMTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTgsIAotICAgIDExOSwgMCwgNDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDEwOSwgMTA5LCAwLCAwLCAxMTUsIDExNSwgMTE1LCAKLSAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMCwgMTIwLCAxMjAsIAotICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgNTksIDAsIDAsIDExMiwgMTEyLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMTEzLCA0MCwgMTEyLCAxMjEsIDExMiwgMTEyLCAKLSAgICAxMTIsIDExMiwgMTEyLCAwLCAxMjEsIDExMiwgMTEyLCAwLCAxMTIsIDExMiwgMTA5LCAxMTQsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDExMiwgMTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgMCwgNDAsIDQwLCAxMDksIDEwOSwgMCwgMCwgMTE1LCAKLSAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAwLCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMiwgMTEyLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDQwLCAxMTIsIDExMiwgMTEyLCAxMDksIDEwOSwgCi0gICAgMTA5LCAxMDksIDAsIDExMiwgMTEyLCAxMTIsIDAsIDExMiwgMTEyLCAxMTIsIDExNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDEwOSwgMTA5LCAwLCAwLCAxMTUsIDExNSwgMTE1LCAKLSAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDAsIDAsIDAsIAotICAgIDU5LCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAxMTIsIDExMiwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDAsIDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAxMTQsIDAsIDAsIDAsIDAsIDExMiwgMTEyLCAxMTIsIDEwOSwgMTA5LCAxMDksIAotICAgIDAsIDEwOSwgMCwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMiwgMTEyLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTA5LCA0MCwgNDAsIDEwOSwgCi0gICAgMTA5LCAxMDksIDEwOSwgMTIyLCAxMjIsIDExNCwgMCwgMCwgMCwgMCwgMTE2LCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MiwgMTA5LCAxMjMsIDEyMywgMTIzLCAxMjMsIDEwOSwgMTA5LCAxMDksIDYyLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCi0gICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDYyLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDAsIDQwLCAwLCA0MCwgMCwgMCwgNDAsIDQwLCAwLCA0MCwgMCwgMCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgMCwgNDAsIDAsIDQwLCAwLCAwLCAKLSAgICA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAxMDksIDQwLCA0MCwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMjQsIDEyNCwgMCwgCi0gICAgMTA5LCAxMDksIDQwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQyLCAwLCAxMjUsIDEyNSwgMTI1LCAxMjUsIAotICAgIDEwOSwgMTA5LCAwLCAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIDAsIAotICAgIDQwLCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDU5LCA1OSwgNTksIDYyLCA2MiwgNjIsIDYyLCA2MiwgCi0gICAgNjIsIDYyLCA2MiwgNjIsIDYyLCA2MiwgNjIsIDYyLCA2MiwgNjIsIDU5LCA1OSwgNTksIDU5LCA1OSwgNjQsIDY0LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgNTksIDY0LCA1OSwgNjQsIDU5LCAKLSAgICAxMjYsIDEyNywgMTI4LCAxMjcsIDEyOCwgMTEyLCAxMTIsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgCi0gICAgMCwgMCwgMTI5LCAxMzAsIDEwOSwgMTMxLCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMDksIDExMiwgMTMwLCAxMDksIDYwLCA2MCwgMTE0LCA2MiwgNjAsIDYwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgCi0gICAgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDAsIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIAotICAgIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAKLSAgICAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgCi0gICAgMTA5LCAxMDksIDAsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNjQsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDAsIDU5LCA1OSwgNjIsIDYyLCA2MiwgNjIsIDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTEyLCAxMTIsIDEwOSwgMTA5LCAxMDksIDEwOSwgCi0gICAgMTEyLCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTEzLCAxMTIsIDExNCwgMTE0LCAxMTIsIDExMiwgMTA5LCAxMDksIDQwLCAKLSAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDYyLCA2MiwgNjIsIDYyLCA2MiwgNjIsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDExMiwgMTEyLCAxMDksIDEwOSwgNDAsIDQwLCA0MCwgNDAsIDEwOSwgMTA5LCAKLSAgICAxMDksIDQwLCAxMTIsIDExMiwgMTEyLCA0MCwgNDAsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgNDAsIAotICAgIDQwLCA0MCwgMTA5LCAxMDksIDEwOSwgMTA5LCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgMTA5LCAxMTIsIDExMiwgMTA5LCAxMDksIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDY0LCA0MCwgCi0gICAgMTEyLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIDAsIDAsIDAsIDU5LCAKLSAgICA1OSwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNjIsIAotICAgIDQyLCAwLCAwLCAwLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAwLCAwLCAwLCAwLCAxMzIsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIAotICAgIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCA2MCwgNTksIDYyLCA2MiwgNjIsIDYyLCAKLSAgICA2MiwgNjIsIDYyLCA2MiwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNjIsIDYyLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEzMywgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMjcsIDEyOCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNjIsIAotICAgIDYyLCA2MiwgMTM0LCAxMzQsIDEzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAxMDksIAotICAgIDEwOSwgMTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMDksIDEwOSwgMTE0LCA2MiwgNjIsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDEwOSwgMTA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgMCwgMTA5LCAxMDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMzUsIDEzNSwgMTEyLCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAKLSAgICAxMDksIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMDksIDExMiwgMTEyLCAxMDksIDEwOSwgCi0gICAgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMTQsIDEwOSwgNjIsIDYyLCA2MiwgNDIsIDYyLCA2MiwgNjIsIAotICAgIDExNiwgNDAsIDYwLCAwLCAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNTcsIDU3LCA1NywgNTcsIDU3LCA1NywgNjMsIDU3LCA1NywgNTcsIDU3LCAxMDksIDEwOSwgMTA5LCAxMzMsIAotICAgIDAsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MiwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNjYsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDEwOSwgMTA5LCAKLSAgICAxMDksIDExMiwgMTEyLCAxMTIsIDExMiwgMTA5LCAxMDksIDExMiwgMTEyLCAxMTIsIDAsIDAsIDAsIDAsIDExMiwgMTEyLCAKLSAgICAxMDksIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDY1LCA2MCwgNjQsIDAsIDAsIDAsIDAsIDI3LCAwLCAwLCAwLCAKLSAgICA1NywgNTcsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTIsIDExMiwgMTEyLCAKLSAgICAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDExMiwgMTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIAotICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIDAsIDAsIDAsIDU3LCA1NywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDYwLCA2NCwgMTEyLCAxMTIsIAotICAgIDExMiwgMCwgMCwgNjIsIDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDksIDEwOSwgMTA5LCAxMDksIDExMiwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMTMsIDExMiwgMTA5LCAxMDksIDEwOSwgMTA5LCAKLSAgICAxMDksIDExMiwgMTA5LCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTA5LCAxMTIsIDEzNiwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDAsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCi0gICAgNjIsIDYyLCA2MiwgNjIsIDYyLCA2MiwgNjIsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA2MCwgCi0gICAgNjQsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAwLCAwLCAKLSAgICAwLCAxMDksIDEwOSwgMTEyLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMTIsIDEwOSwgCi0gICAgMTA5LCAxMDksIDEwOSwgMTEyLCAxMTIsIDEwOSwgMTA5LCAxMzYsIDAsIDAsIDAsIDQwLCA0MCwgMTE1LCAxMTUsIDExNSwgCi0gICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTA5LCAKLSAgICAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDExMiwgMTEyLCAxMDksIDExMywgMCwgMCwgMCwgNjIsIDYyLCAKLSAgICA2MiwgNjIsIDYyLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIDAsIDAsIAotICAgIDQwLCA0MCwgNDAsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNjIsIDYyLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIAotICAgIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIAotICAgIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIAotICAgIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA0MiwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDQyLCA0MiwgNDIsIAotICAgIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIAotICAgIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA2MCwgNjAsIAotICAgIDY0LCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjQsIDYwLCA2MCwgMTM3LCAxMzgsIDY0LCAxMzksIDYwLCA2MCwgCi0gICAgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgCi0gICAgNjAsIDYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA2MCwgNjQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIAotICAgIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMCwgMCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAwLCAwLCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAwLCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDAsIDM3LCAwLCAzNywgMCwgMzcsIDAsIDM3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAwLCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIAotICAgIDQxLCA0MSwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDAsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDQxLCA0NCwgMzQsIDQ0LCA0NCwgNDQsIDM0LCAzNCwgCi0gICAgMzQsIDAsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDQxLCA0NCwgNDQsIDQ0LCAzNCwgMzQsIDM0LCAzNCwgMCwgMCwgMzQsIAotICAgIDM0LCAzNywgMzcsIDM3LCAzNywgMCwgNDQsIDQ0LCA0NCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDQ0LCA0NCwgNDQsIDAsIDAsIDM0LCAzNCwgMzQsIDAsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIAotICAgIDQxLCA0NCwgNDQsIDAsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMzUsIDE0MCwgMTQxLCA2MywgNjMsIDE0MSwgMTQxLCAxNDEsIDIyLCA1NywgMTQyLCAxNDMsIAotICAgIDE0NCwgMTQ1LCAxNDIsIDE0MywgMTQ0LCAxNDUsIDIyLCAyMiwgMjIsIDU3LCAyMiwgMjIsIDIyLCAyMiwgMTQ2LCAxNDcsIAotICAgIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAyMSwgMTUzLCA4OCwgMTUzLCAxNTMsIDg4LCAyMiwgNTcsIDU3LCA1NywgMjksIAotICAgIDM1LCAyMiwgNTcsIDU3LCAyMiwgMTU0LCAxNTQsIDU3LCA1NywgNTcsIDE1NSwgMTI3LCAxMjgsIDU3LCA1NywgNTcsIDU3LCAKLSAgICA1NywgNTcsIDU3LCA1NywgNTcsIDU3LCA1NywgNTgsIDU3LCAxNTQsIDU3LCA1NywgNTcsIDU3LCA1NywgNTcsIDU3LCA1NywgCi0gICAgNTcsIDU3LCAxMzMsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxNTYsIDM0LCAwLCAwLCAzMywgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NywgMTU3LCA1OCwgMTI3LCAKLSAgICAxMjgsIDI4LCAxNTYsIDMzLCAzMywgMzMsIDMzLCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU3LCAxNTcsIDU4LCAxMjcsIAotICAgIDEyOCwgMCwgNDIsIDQyLCA0MiwgNDIsIDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTYsIDExNiwgCi0gICAgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxNTgsIDExNiwgMTE2LCAyMywgMTE2LCAxMTYsIDExNiwgMTE2LCAKLSAgICAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjAsIDYwLCAxNTksIDE1OSwgNjAsIDYwLCA2MCwgNjAsIDE1OSwgMTU5LCAKLSAgICAxNTksIDYwLCA2MCwgNjEsIDYxLCA2MSwgNjEsIDYwLCA2MSwgNjEsIDYxLCAxNTksIDE1OSwgNjAsIDY0LCA2MCwgMTU5LCAKLSAgICAxNTksIDY0LCA2NCwgNjQsIDY0LCA2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIAotICAgIDI3LCAzNywgMjUsIDI3LCAyNSwgMjcsIDM3LCAyNywgMjUsIDM0LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM3LCAzNywgMzcsIAotICAgIDI4LCAyNywgMzcsIDI1LCAyNywgMjcsIDM3LCAzNywgMzcsIDM3LCAzNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMzcsIAotICAgIDI3LCAzOCwgMjcsIDM3LCAyNywgMzcsIDM4LCAzNywgMzcsIDE2MCwgMzQsIDM3LCAzNywgMzcsIDM3LCAzNCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDM0LCAyNywgMjcsIDM0LCAzNCwgMzcsIDM3LCAxNjEsIDU4LCA1OCwgNTgsIDU4LCAzNywgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDI3LCA1OCwgMjcsIDI3LCAzNCwgNTksIDAsIDAsIDAsIDM2LCAzNiwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAotICAgIDEyMCwgMzYsIDM2LCAzNiwgMzYsIDEyMCwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIDE2MiwgCi0gICAgMTYyLCAxNjIsIDE2MiwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxNjIsIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIAotICAgIDE2MiwgMTYyLCAxNjIsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDM3LCAzNCwgMTM0LCAKLSAgICAxMzQsIDEzNCwgMTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOSwgMzksIDM5LCAzOSwgMzksIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgNTgsIDU4LCAyNywgMjcsIDI3LCAyNywgNTgsIDI3LCAyNywgNTgsIDI3LCAyNywgNTgsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCA1OCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDU4LCAKLSAgICA1OCwgMjcsIDI3LCAzOSwgMjcsIDM5LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMzksIDE2MSwgMTYzLCAxNjMsIAotICAgIDE2MSwgNTgsIDU4LCAzOSwgMTYzLCAxNjEsIDE2MSwgMTYzLCAxNjEsIDE2MSwgNTgsIDM5LCA1OCwgMTYzLCAxNTcsIDE2NCwgCi0gICAgNTgsIDE2MywgMTYxLCA1OCwgNTgsIDU4LCAxNjMsIDE2MSwgMTYxLCAxNjMsIDM5LCAxNjMsIDE2MywgMTYxLCAxNjEsIDM5LCAKLSAgICAxNjEsIDM5LCAxNjEsIDM5LCAzOSwgMzksIDM5LCAxNjMsIDE2MywgMTYxLCAxNjMsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAzOSwgMzksIDM5LCAzOSwgNTgsIDE2MSwgNTgsIDE2MSwgMTYzLCAxNjMsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYzLCAxNjEsIDE2MSwgMTYxLCAxNjMsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgMTYzLCAxNjEsIDE2MSwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCAxNjEsIDE2MywgMzksIAotICAgIDE2MSwgNTgsIDE2MywgMTYzLCAxNjMsIDE2MywgMTYxLCAxNjEsIDE2MywgMTYzLCA1OCwgNTgsIDE2MywgMTYzLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjMsIDE2MywgMTYxLCAxNjEsIDE2MywgMTYzLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgNTgsIAotICAgIDU4LCAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCA1OCwgMzksIDU4LCA1OCwgMTYxLCAzOSwgNTgsIDU4LCA1OCwgNTgsIDU4LCAKLSAgICA1OCwgNTgsIDU4LCAxNjEsIDE2MSwgNTgsIDM5LCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCA1OCwgNTgsIDU4LCAKLSAgICA1OCwgMTYxLCAxNjMsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCA1OCwgNTgsIDE2MSwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgNTgsIDU4LCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDE2MSwgMTYxLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMTY1LCAxNjYsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgMjcsIDU4LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1OSwgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAKLSAgICAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAKLSAgICAzNiwgMzYsIDM2LCAzNiwgMzYsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAKLSAgICAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgCi0gICAgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIAotICAgIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAKLSAgICAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgCi0gICAgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIAotICAgIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTIwLCAzNiwgCi0gICAgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgCi0gICAgMzYsIDM2LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjUsIDI1LCAyNywgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjUsIDI1LCAyNywgMjcsIDI1LCAzOSwgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI3LCAyNSwgMzksIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI1LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNSwgMjUsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjUsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgCi0gICAgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgCi0gICAgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjUsIDI1LCAyNSwgCi0gICAgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjUsIDI1LCAyNywgMzksIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1OSwgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMCwgMjcsIDI3LCAKLSAgICAyNywgMjcsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDI3LCAwLCAyNywgMjcsIDI3LCAKLSAgICAyNywgMCwgMCwgMCwgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMTI3LCAxMjgsIDEyNywgMTI4LCAxMjcsIDEyOCwgMTI3LCAxMjgsIDEyNywgMTI4LCAxMjcsIDEyOCwgMTI3LCAKLSAgICAxMjgsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCi0gICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAotICAgIDEyMCwgMjcsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMTYxLCA1OCwgNTgsIDE2MSwgMTYxLCAxMjcsIDEyOCwgNTgsIDE2MSwgCi0gICAgMTYxLCA1OCwgMCwgMTYxLCAwLCAwLCAwLCA1OCwgNTgsIDU4LCAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCA1OCwgNTgsIDU4LCAKLSAgICA1OCwgMTYxLCAxNjEsIDE2MSwgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAKLSAgICA5LCAxMCwgMTI3LCAxMjgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCAxMjcsIDEyOCwgOSwgMTAsIDEyNywgMTI4LCAKLSAgICAxMjcsIDEyOCwgMTI3LCAxMjgsIDEyNywgMTI4LCAxMjcsIDEyOCwgMTI3LCAxMjgsIDEyNywgMTI4LCAxMjcsIDEyOCwgCi0gICAgMTI3LCAxMjgsIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCAxNjEsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKLSAgICA1OCwgNTgsIDU4LCAxNjEsIDU4LCA1OCwgNTgsIDU4LCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgNTgsIDE2MSwgMTYxLCAKLSAgICA1OCwgNTgsIDEyNywgMTI4LCAxMjcsIDEyOCwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgMTYxLCA1OCwgMTYxLCAxNjEsIDE2MSwgCi0gICAgNTgsIDU4LCAxNjEsIDE2MSwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDU4LCA1OCwgMTI3LCAxMjgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCAKLSAgICA1OCwgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgNTgsIDU4LCAxNjEsIDU4LCAKLSAgICAxNjEsIDU4LCA1OCwgMTYxLCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgNTgsIDE2MSwgMTYxLCAKLSAgICA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCAxNjEsIDE2MSwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCAxNjEsIDE2MSwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCAxNjEsIDE2MSwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgNTgsIDE2MSwgMTYxLCA1OCwgNTgsIDE2MSwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCA1OCwgCi0gICAgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgNTgsIDE2MSwgNTgsIDE2MSwgNTgsIAotICAgIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDE2MSwgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCAxNjEsIDU4LCA1OCwgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMjcsIDI3LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAwLCAzNywgMzQsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM3LCAzNywgMCwgCi0gICAgMzQsIDM3LCAzNCwgMzQsIDM3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgNDIsIDAsIDAsIDM3LCAzNCwgMzcsIDM0LCAKLSAgICAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAKLSAgICAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAKLSAgICAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAKLSAgICAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAKLSAgICAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAKLSAgICAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTcsIDU3LCA1NywgNTcsIDEyMCwgNTcsIDU3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgMCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIAotICAgIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIAotICAgIDYwLCA1NywgNTcsIDI5LCAzNSwgMjksIDM1LCA1NywgNTcsIDU3LCAyOSwgMzUsIDU3LCAyOSwgMzUsIDU3LCA1NywgNTcsIAotICAgIDU3LCA1NywgNTcsIDU3LCA1NywgNTcsIDYzLCA1NywgNTcsIDYzLCA1NywgMjksIDM1LCA1NywgNTcsIDI5LCAzNSwgMTI3LCAKLSAgICAxMjgsIDEyNywgMTI4LCAxMjcsIDEyOCwgMTI3LCAxMjgsIDU3LCA1NywgNTcsIDU3LCA1NywgNDMsIDU3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMCwgMCwgMCwgMCwgMTY5LCAxNzAsIDE3MCwgMTcwLCAxNjgsIDE3MSwgMTMyLCAxNzIsIDE2NSwgMTY2LCAxNjUsIAotICAgIDE2NiwgMTY1LCAxNjYsIDE2NSwgMTY2LCAxNjUsIDE2NiwgMTY4LCAxNjgsIDE2NSwgMTY2LCAxNjUsIDE2NiwgMTY1LCAKLSAgICAxNjYsIDE2NSwgMTY2LCAxNzMsIDE3NCwgMTc1LCAxNzUsIDE2OCwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgCi0gICAgMTcyLCAxNzIsIDE3MiwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MCwgMTczLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAotICAgIDE3MSwgMTY4LCAxNjgsIDE3MiwgMTcyLCAxNzIsIDE3MSwgMTMyLCAxNzAsIDE2OCwgMjcsIDAsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAwLCAKLSAgICAxODEsIDE4MSwgMTgyLCAxODIsIDE3MSwgMTcxLCAxMzIsIDE3MywgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTcwLCAxNzEsIDE3MSwgMTcxLCAxMzIsIDAsIDAsIDAsIDAsIDAsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAwLCAwLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDAsIDE4MywgMTgzLCAxODQsIDE4NCwgMTg0LCAxODQsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTY4LCAxNjgsIDAsIDE4NCwgMTg0LCAxODQsIAotICAgIDE4NCwgMTg0LCAxODQsIDE4NCwgMTg0LCAxODQsIDE4NCwgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OCwgMTg1LCAKLSAgICAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxODMsIDE4NCwgMTg0LCAxODQsIDE4NCwgMTg0LCAxODQsIDE4NCwgMTg0LCAxODQsIDE4NCwgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTg1LCAxODUsIDE4NSwgCi0gICAgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMCwgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTY4LCAxNjgsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTY4LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxNzEsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDAsIDAsIDAsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDIsIDU3LCA1NywgNTcsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMTUsIDExNSwgMTE1LCAKLSAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDQwLCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAwLCAwLCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCA0MCwgNjAsIAotICAgIDYxLCA2MSwgNjEsIDU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MCwgNjAsIDU3LCA0MywgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKLSAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAKLSAgICA0MywgNDMsIDQzLCA0NCwgNDQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzQsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDQyLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDQzLCAKLSAgICAxODYsIDE4NiwgMzcsIDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgMTA5LCA0MCwgNDAsIDQwLCAxMTQsIDQwLCA0MCwgNDAsIDQwLCAxMDksIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgMTEyLCAxMTIsIDEwOSwgMTA5LCAxMTIsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNTcsIDU3LCA1NywgNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMiwgCi0gICAgMTEyLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDExMiwgMTEyLCAKLSAgICAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgCi0gICAgMTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MiwgNjIsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAotICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1LCAxMTUsIAotICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDY0LCA2NCwgNjQsIDYyLCA2MiwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTEyLCAxMzYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDExMiwgMTEyLCAxMDksIDEwOSwgCi0gICAgMTEyLCAxMTIsIDEwOSwgMTA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCAxMDksIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTA5LCAxMTIsIDAsIDAsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAotICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMCwgMCwgNjIsIDYyLCA2MiwgNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAwLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAwLCAwLCAwLCAwLCAwLCA4NSwgMTg5LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgCi0gICAgODUsIDg1LCA4NSwgMTU3LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMCwgCi0gICAgODUsIDg1LCA4NSwgODUsIDg1LCAwLCA4NSwgMCwgODUsIDg1LCAwLCA4NSwgODUsIDAsIDg1LCA4NSwgODUsIDg1LCA4NSwgCi0gICAgODUsIDg1LCA4NSwgODUsIDg1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDE0NCwgMTkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgMCwgMCwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgODksIDI3LCAKLSAgICAwLCAwLCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzQsIDE3NSwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MCwgCi0gICAgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzMsIDE3MywgMTkxLCAKLSAgICAxOTEsIDE3NCwgMTc1LCAxNzQsIDE3NSwgMTc0LCAxNzUsIDE3NCwgMTc1LCAxNzQsIDE3NSwgMTc0LCAxNzUsIDE3NCwgCi0gICAgMTc1LCAxNzQsIDE3NSwgMTcwLCAxNzAsIDE3NCwgMTc1LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE5MSwgMTkxLCAxOTEsIAotICAgIDE5MiwgMTcwLCAxOTIsIDAsIDE3MCwgMTkyLCAxNzAsIDE3MCwgMTczLCAxNjUsIDE2NiwgMTY1LCAxNjYsIDE2NSwgMTY2LCAKLSAgICAxOTMsIDE3MCwgMTcwLCAxOTQsIDE5NSwgMTk2LCAxOTYsIDE5NywgMCwgMTcwLCAxOTgsIDE5MywgMTcwLCAwLCAwLCAwLCAKLSAgICAwLCA5NSwgOTUsIDk1LCA5NSwgOTUsIDAsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDAsIDAsIDEwNywgMCwgCi0gICAgMTk5LCAxOTksIDIwMCwgMjAxLCAyMDAsIDE5OSwgMTk5LCAyMDIsIDIwMywgMTk5LCAyMDQsIDIwNSwgMjA2LCAyMDUsIAotICAgIDIwNSwgMjA3LCAyMDcsIDIwNywgMjA3LCAyMDcsIDIwNywgMjA3LCAyMDcsIDIwNywgMjA3LCAyMDUsIDE5OSwgMjA4LCAKLSAgICAyMDksIDIwOCwgMTk5LCAxOTksIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgCi0gICAgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIAotICAgIDIxMCwgMjEwLCAyMDIsIDE5OSwgMjAzLCAyMTEsIDIxMiwgMjExLCAyMTMsIDIxMywgMjEzLCAyMTMsIDIxMywgMjEzLCAKLSAgICAyMTMsIDIxMywgMjEzLCAyMTMsIDIxMywgMjEzLCAyMTMsIDIxMywgMjEzLCAyMTMsIDIxMywgMjEzLCAyMTMsIDIxMywgCi0gICAgMjEzLCAyMTMsIDIxMywgMjEzLCAyMTMsIDIxMywgMjAyLCAyMDksIDIwMywgMjA5LCAyMDIsIDIwMywgMjE0LCAyMTUsIAotICAgIDIxNiwgMjE0LCAyMTQsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE4LCAKLSAgICAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgCi0gICAgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIAotICAgIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAKLSAgICAyMTcsIDIxNywgMjE3LCAyMTgsIDIxOCwgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgCi0gICAgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIAotICAgIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAwLCAwLCAwLCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgCi0gICAgMjE3LCAwLCAwLCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAwLCAwLCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgCi0gICAgMjE3LCAwLCAwLCAyMTcsIDIxNywgMjE3LCAwLCAwLCAwLCAyMDEsIDIwMSwgMjA5LCAyMTEsIDIxOSwgMjAxLCAyMDEsIDAsIAotICAgIDIyMCwgMjIxLCAyMjEsIDIyMSwgMjIxLCAyMjAsIDIyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIyLCAKLSAgICAyMjIsIDIyMiwgMjcsIDI1LCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgMCwgNjIsIDU3LCAKLSAgICA1OSwgMCwgMCwgMCwgMCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMCwgMCwgMCwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIAotICAgIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAKLSAgICAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgCi0gICAgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDEyMCwgMTIwLCAxMjAsIAotICAgIDEyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAxMjAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgMCwgMTE3LCAxMTcsIDExNywgMTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDEzNCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDYyLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDYyLCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICAwLCAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDAsIDAsIDg1LCAwLCA4NSwgODUsIDg1LCAKLSAgICA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAKLSAgICA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAKLSAgICA4NSwgODUsIDg1LCA4NSwgODUsIDAsIDg1LCA4NSwgMCwgMCwgMCwgODUsIDAsIDAsIDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4NSwgODUsIAotICAgIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMjI0LCAKLSAgICAyMjQsIDIyNCwgMjI0LCAwLCAwLCAwLCAwLCAwLCA1NywgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIAotICAgIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAwLCAwLCAwLCAKLSAgICAwLCAwLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgODUsIDEwOSwgMTA5LCAxMDksIDAsIDEwOSwgMTA5LCAwLCAwLCAwLCAwLCAwLCAxMDksIDY0LCAxMDksIDYwLCAKLSAgICA4NSwgODUsIDg1LCA4NSwgMCwgODUsIDg1LCA4NSwgMCwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIAotICAgIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMCwgMCwgCi0gICAgMCwgMCwgNjAsIDE1OSwgNjQsIDAsIDAsIDAsIDAsIDExNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAKLSAgICAyMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAKLSAgICAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgCi0gICAgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIAotICAgIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAKLSAgICAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgCi0gICAgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIAotICAgIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAKLSAgICAxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyLCA2MiwgNjIsIDYyLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAwLCAwLCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCAyMjUsIDIyNSwgMTU5LCAxNTksIDE1OSwgNTksIDU5LCA1OSwgMjI2LCAyMjUsIDIyNSwgCi0gICAgMjI1LCAyMjUsIDIyNSwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDY0LCA2NCwgNjQsIDY0LCAKLSAgICA2NCwgNjQsIDY0LCA2NCwgNTksIDU5LCA2MCwgNjAsIDYwLCA2MCwgNjAsIDY0LCA2NCwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNjAsIDYwLCA2MCwgNjAsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDYwLCA2MCwgNjAsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAwLCAzNywgMzcsIDAsIDAsIDM3LCAwLCAwLCAzNywgMzcsIDAsIDAsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAwLCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzQsIDM0LCAwLCAzNCwgMCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAKLSAgICAzNywgMCwgMzcsIDM3LCAzNywgMzcsIDAsIDAsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMCwgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAwLCAzNywgCi0gICAgMzcsIDM3LCAzNywgMCwgMzcsIDM3LCAzNywgMzcsIDM3LCAwLCAzNywgMCwgMCwgMCwgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAogICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAwLCAwLCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMjI3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMjI4LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMjI3LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMjI4LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMjI3LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMjI4LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMjI3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMjI4LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMjI3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMjI4LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNywgMzQsIDAsIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAKKyAgICAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIAorICAgIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAKKyAgICAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIAorICAgIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjIwLCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAKKyAgICAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjcsIDI1LCAKKyAgICA0MCwgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI3LCAyNSwgNDAsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI1LCAKKyAgICAyNywgMjcsIDI1LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAKKyAgICA3NywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjUsIDI1LCAyNSwgMjcsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNywgMjUsIDI1LCAyNywgNDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDc5LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAwLCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMjUsIDAsIDAsIDAsIDAsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDAsIDI3LCAyNywgMjcsIDI3LCAwLCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAyNywgMjUsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMTYyLCAxNjMsIAorICAgIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAxNjMsIDIzNSwgMjM1LCAKKyAgICAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgCisgICAgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDI3LCAKKyAgICAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDIyNSwgNzcsIDc3LCAyMjUsIDIyNSwgMTYyLCAxNjMsIDc3LCAyMjUsIDIyNSwgNzcsIAorICAgIDAsIDIyNSwgMCwgMCwgMCwgNzcsIDc3LCA3NywgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNSwgCisgICAgMjI1LCAyMjUsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgOSwgMTAsIDksIDEwLCA5LCAxMCwgOSwgMTAsIAorICAgIDE2MiwgMTYzLCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDE2MiwgMTYzLCA5LCAxMCwgMTYyLCAxNjMsIDE2MiwgMTYzLCAxNjIsIAorICAgIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgNzcsIDc3LCAKKyAgICAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgCisgICAgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNSwgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDc3LCA3NywgNzcsIAorICAgIDIyNSwgNzcsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgMjI1LCAyMjUsIDc3LCA3NywgMTYyLCAKKyAgICAxNjMsIDE2MiwgMTYzLCAyMjUsIDc3LCA3NywgNzcsIDc3LCAyMjUsIDc3LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDIyNSwgCisgICAgMjI1LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIAorICAgIDIyNSwgNzcsIDc3LCAxNjIsIDE2MywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgMjI1LCAyMjUsIDIxOSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIAorICAgIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDIyNSwgNzcsIDIyNSwgCisgICAgNzcsIDc3LCAyMjUsIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI1LCAyMjUsIDc3LCAKKyAgICA3NywgNzcsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCAyMjUsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCA3NywgNzcsIDc3LCA3NywgMjI1LCAKKyAgICAyMjUsIDIyNSwgMjI1LCA3NywgMjI1LCAyMjUsIDc3LCA3NywgMjI1LCAyMTksIDIwOSwgMjA5LCA3NywgNzcsIDIyNSwgCisgICAgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIAorICAgIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAKKyAgICAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIAorICAgIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAKKyAgICAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgCisgICAgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIAorICAgIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIDc3LCA3NywgNzcsIDc3LCAyMzYsIDc3LCAyMjUsIDc3LCAKKyAgICA3NywgNzcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCAyMjUsIDc3LCAKKyAgICA3NywgNzcsIDc3LCAyMjUsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgMjI1LCA3NywgNzcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDI3LCAyNywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NCwgNDYsIAorICAgIDQ0LCA0NCwgNDQsIDQ2LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ0LCA0NCwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ2LCA0NCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMzUsIDUwLCA0NCwgNDQsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NiwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNDQsIDQ2LCA0NCwgNDYsIDgwLCA4MCwgODAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTUyLCAxMzYsIDEzNiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgMTM2LCAxMzYsIDI5LCAzNiwgMjksIDM2LCAxMzYsIDEzNiwgMTM2LCAyOSwgMzYsIDEzNiwgMjksIAorICAgIDM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCA4MywgMTM2LCAxMzYsIDgzLCAxMzYsIAorICAgIDI5LCAzNiwgMTM2LCAxMzYsIDI5LCAzNiwgMTYyLCAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAxNjMsIDEzNiwgCisgICAgMTM2LCAxMzYsIDEzNiwgMTM2LCA1MSwgMTM2LCAxMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNywgMjM3LCAyMzcsIDIzNywgCisgICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAwLCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzOCwgMjM3LCAKKyAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCisgICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKKyAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCisgICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzOCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzcsIDIzNywgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAwLCAwLCAwLCAwLCAyMzksIDI0MCwgMjQwLCAyNDAsIAorICAgIDIzNywgMjQxLCAxNjksIDI0MiwgMjQzLCAyNDQsIDI0MywgMjQ0LCAyNDMsIDI0NCwgMjQzLCAyNDQsIDI0MywgMjQ0LCAKKyAgICAyMzcsIDIzNywgMjQzLCAyNDQsIDI0MywgMjQ0LCAyNDMsIDI0NCwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0NywgCisgICAgMjM3LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDgsIDI0OSwgMjUwLCAyNTEsIAorICAgIDI1MiwgMjUyLCAyNDUsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyMzgsIDIzNywgMjUzLCAyNTMsIDI1MywgMjQxLCAKKyAgICAxNjksIDI0MCwgMjM3LCAyNywgMCwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDI1NCwgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgCisgICAgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDE2OSwgMjU0LCAxNjksIAorICAgIDI1NCwgMTY5LCAyNTQsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDI1NCwgMjU0LCAxNjksIDI1NCwgMjU0LCAKKyAgICAxNjksIDI1NCwgMjU0LCAxNjksIDI1NCwgMjU0LCAxNjksIDI1NCwgMjU0LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDI1NCwgMTY5LCAxNjksIDAsIDAsIDI1NSwgMjU1LCAyNTYsIDI1NiwgMjQxLCAyNTcsIDI1OCwgCisgICAgMjQ1LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMjU0LCAxNjksIAorICAgIDI1NCwgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAKKyAgICAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIDE2OSwgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMjU0LCAyNTQsIDE2OSwgMjU0LCAyNTQsIDE2OSwgMjU0LCAyNTQsIAorICAgIDE2OSwgMjU0LCAyNTQsIDE2OSwgMjU0LCAyNTQsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMjU0LCAxNjksIDE2OSwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNDAsIDI0MSwgMjQxLCAyNTcsIDI1OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDAsIDAsIDAsIAorICAgIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAKKyAgICAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgCisgICAgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIAorICAgIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAKKyAgICAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgCisgICAgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIAorICAgIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMCwgMjU5LCAyNTksIDI2MCwgMjYwLCAKKyAgICAyNjAsIDI2MCwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzcsIDIzNywgCisgICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKKyAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyMzgsIDIzOCwgMCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjM4LCAyNjMsIDI2MywgMjYzLCAKKyAgICAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDI1OSwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgCisgICAgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyMzgsIDIzOCwgMjM4LCAyMzgsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAwLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyMzgsIDIzOCwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyMzgsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAyNDEsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAwLCAwLCAwLCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKKyAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCisgICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKKyAgICAyMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA4MiwgODIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDUyLCAxMzYsIDEzNiwgCisgICAgMTM2LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTQyLCAKKyAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgCisgICAgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgCisgICAgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgMCwgMCwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCAKKyAgICA0NiwgNDcsIDgwLCA4MSwgODEsIDgxLCAxMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgMTM2LCA1MSwgNDQsIAorICAgIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIAorICAgIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgCisgICAgMTcyLCAxNzIsIDE3MiwgODAsIDgwLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCAKKyAgICA1MywgNTMsIDUzLCA1MywgNTMsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUzLCA1MywgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NiwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNTAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNTEsIDI2NCwgMjY0LCA0NCwgNDYsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIDQ3LCA0NywgCisgICAgNDcsIDE0MCwgNDcsIDQ3LCA0NywgNDcsIDEzMywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzcsIDEzNywgMTMzLCAxMzMsIDEzNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDc5LCA3OSwgMTQ2LCAKKyAgICAyMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNywgMTM3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNywgMTM3LCAxMzcsIDEzNywgCisgICAgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTQwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA4MiwgODIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIAorICAgIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgODIsIDgyLCA4MiwgNDcsIDAsIDAsIDAsIAorICAgIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCA4NCwgODQsIDg0LCA4MiwgODIsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzNywgCisgICAgMTc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MiwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDAsIDAsIDAsIDEzMywgMTMzLCAxMzMsIDEzNywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNDMsIDEzNywgMTM3LCAxMzMsIDEzMywgMTMzLCAKKyAgICAxMzMsIDEzNywgMTM3LCAxMzMsIDEzNywgMTM3LCAxMzcsIDE3NCwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCAKKyAgICA4MiwgODIsIDgyLCA4MiwgODIsIDAsIDUyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDAsIDAsIDAsIDAsIDgyLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIAorICAgIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIDEzNywgMTMzLCAxMzMsIDEzNywgMTM3LCAxMzMsIDEzMywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgMTMzLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzMywgCisgICAgMTM3LCAwLCAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDAsIDAsIDgyLCAKKyAgICA4MiwgODIsIDgyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNTIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDc5LCA3OSwgNzksIDQ3LCAxMzcsIDAsIDAsIDAsIDAsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDgwLCA0NywgODAsIDgwLCA4NCwgNDcsIDQ3LCA4MCwgCisgICAgODAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgODAsIDgwLCA0NywgODAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDUyLCA4MiwgODIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM3LCAxMzcsIDEzMywgCisgICAgMTM3LCAxMzcsIDEzMywgMTM3LCAxMzcsIDgyLCAxMzcsIDE0MCwgMCwgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIAorICAgIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAKKyAgICAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgCisgICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIAorICAgIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAKKyAgICAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgCisgICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIAorICAgIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAKKyAgICAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgCisgICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIAorICAgIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAKKyAgICAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgCisgICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIAorICAgIDI1NCwgMjU0LCAyNTQsIDI1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDAsIDAsIDAsIDAsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMCwgMCwgMCwgMCwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDE2OSwgMTY5LCAyNjcsIDE2OSwgMjY3LCAKKyAgICAxNjksIDE2OSwgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAxNjksIDI2NywgCisgICAgMTY5LCAyNjcsIDE2OSwgMTY5LCAyNjcsIDI2NywgMTY5LCAxNjksIDE2OSwgMjY3LCAyNjcsIDI2NywgMjY3LCAwLCAwLCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMCwgMCwgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNjgsIDI2OSwgMjY4LCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyMDgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDAsIDI2OCwgMCwgMjY4LCAyNjgsIDAsIDI2OCwgMjY4LCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNzAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDE5MiwgMjcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDAsIDAsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDI3MiwgMjcsIDAsIDAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3NCwgMjc1LCAKKyAgICAyNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAyNzMsIDI3NiwgMjc2LCAyNzcsIDI3NywgMjc0LCAyNzUsIDI3NCwgMjc1LCAyNzQsIDI3NSwgMjc0LCAyNzUsIAorICAgIDI3NCwgMjc1LCAyNzQsIDI3NSwgMjc0LCAyNzUsIDI3NCwgMjc1LCAyNDAsIDI0MCwgMjc0LCAyNzUsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjc3LCAyNzcsIDI3NywgMjc4LCAyNzMsIDI3OCwgMCwgMjczLCAyNzgsIDI3MywgMjczLCAyNzYsIDI3OSwgCisgICAgMjgwLCAyNzksIDI4MCwgMjc5LCAyODAsIDI4MSwgMjczLCAyNzMsIDI4MiwgMjgzLCAyODQsIDI4NCwgMjg1LCAwLCAyNzMsIAorICAgIDI4NiwgMjgxLCAyNzMsIDAsIDAsIDAsIDAsIDEyOCwgMTI4LCAxMjgsIDExNSwgMTI4LCAwLCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAwLCAwLCAxMzEsIDAsIDI4NywgMjg3LCAyODgsIDI4OSwgMjg4LCAyODcsIAorICAgIDI4NywgMjkwLCAyOTEsIDI4NywgMjkyLCAyOTMsIDI5NCwgMjkzLCAyOTMsIDI5NSwgMjk1LCAyOTUsIDI5NSwgMjk1LCAKKyAgICAyOTUsIDI5NSwgMjk1LCAyOTUsIDI5NSwgMjkzLCAyODcsIDI5NiwgMjk3LCAyOTYsIDI4NywgMjg3LCAyOTgsIDI5OCwgCisgICAgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIAorICAgIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjkwLCAyODcsIDI5MSwgMjk5LCAKKyAgICAzMDAsIDI5OSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgCisgICAgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIAorICAgIDI5MCwgMjk3LCAyOTEsIDI5NywgMjkwLCAyOTEsIDMwMiwgMzAzLCAzMDQsIDMwMiwgMzAyLCAzMDUsIDMwNSwgMzA1LCAKKyAgICAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNiwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgCisgICAgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIAorICAgIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAKKyAgICAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA2LCAzMDYsIDMwNSwgCisgICAgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIAorICAgIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAKKyAgICAzMDUsIDMwNSwgMCwgMCwgMCwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMCwgMCwgMzA1LCAzMDUsIDMwNSwgCisgICAgMzA1LCAzMDUsIDMwNSwgMCwgMCwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMCwgMCwgMzA1LCAzMDUsIDMwNSwgCisgICAgMCwgMCwgMCwgMjg5LCAyODksIDI5NywgMjk5LCAzMDcsIDI4OSwgMjg5LCAwLCAzMDgsIDMwOSwgMzA5LCAzMDksIDMwOSwgCisgICAgMzA4LCAzMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMCwgMzEwLCAzMTAsIDI3LCAyNSwgMCwgMCwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDgyLCAxMzYsIDc5LCAwLCAwLCAwLCAwLCAxNDcsIDE0NywgCisgICAgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIAorICAgIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAKKyAgICAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgCisgICAgMTQ3LCAwLCAwLCAwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAzMTEsIDMxMSwgMzExLCAzMTEsIAorICAgIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAKKyAgICAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgCisgICAgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIAorICAgIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMTUyLCAxNTIsIDE1MiwgMTUyLCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDE1MiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgODQsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAxNDcsIDE0NywgMTQ3LCAxNDcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTcyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE3MiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgODIsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgODIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMCwgMCwgMTA1LCAwLCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAogICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKICAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCi0gICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDI3LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAwLCAxMDUsIDEwNSwgMCwgMCwgMCwgMTA1LCAwLCAwLCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMTAyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIDMxMiwgMzEyLCAKKyAgICAzMTIsIDMxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAzMTIsIDMxMiwgMzEyLCAzMTIsIDMxMiwgMzEyLCAwLCAwLCAwLCAxMzYsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAwLCAwLCAwLCAwLCAwLCAxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNSwgMTMzLCAxMzMsIDEzMywgMCwgMTMzLCAxMzMsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEzMywgODQsIDEzMywgODAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMTA1LCAxMDUsIDEwNSwgMCwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMCwgMCwgMCwgODAsIDE3NSwgCisgICAgODQsIDAsIDAsIDAsIDAsIDE0MCwgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAzMTIsIDMxMiwgMTAyLCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAwLCAwLCAwLCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMCwgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMCwgMCwgMCwgMCwgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIDMxMiwgCisgICAgMzEyLCAzMTIsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAxMzMsIDEzMywgCisgICAgMTM3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzOCwgNDcsIDEzOCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzgsIDQ3LCA0NywgNDcsIDQ3LCAxMzcsIDEzNywgMTM3LCAxMzMsIDEzMywgMTMzLCAKKyAgICAxMzMsIDEzNywgMTM3LCAxNDAsIDEzOSwgODIsIDgyLCAxNzMsIDgyLCA4MiwgODIsIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgCisgICAgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIAorICAgIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAKKyAgICAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgCisgICAgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIAorICAgIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAKKyAgICAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgCisgICAgMTcyLCAxNzIsIDE3MiwgMTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MiwgODIsIDgyLCAKKyAgICA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgMCwgMCwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAzMTQsIDMxNCwgMzE0LCAzMTQsIDMxNCwgCisgICAgMzE0LCAzMTQsIDMxNSwgMzE1LCAxNzUsIDE3NSwgMTc1LCA3OSwgNzksIDc5LCAzMTYsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCisgICAgMzE1LCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAorICAgIDg0LCA3OSwgNzksIDgwLCA4MCwgODAsIDgwLCA4MCwgODQsIDg0LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA4MCwgODAsIDgwLCA4MCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDMxNCwgMzE0LCAzMTQsIDMxNCwgMzE0LCAzMTQsIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgODAsIDgwLCA4MCwgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAKKyAgICAxNDcsIDE0NywgMTQ3LCAxNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDAsIDQ4LCA0OCwgMCwgMCwgNDgsIDAsIDAsIDQ4LCAKKyAgICA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDAsIDM1LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIAorICAgIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzMTcsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAyMTksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzMTcsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAyMTksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAzMTcsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMTksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAzMTcsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMTksIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzMTcsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMTksIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCAzNSwgMCwgMCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIAorICAgIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAKKyAgICAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgCisgICAgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKQEAgLTIwNTUsODEgKzI0MTMsNzggQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAwLCAwLCAwLCAwLCAwLCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAKKyAgICAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAzMTksIDAsIDAsIDIzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjM0LCAwLCAyMzQsIDAsIDAsIDIzNCwgMCwgMCwgMCwgMjM0LCAwLCAwLCAwLCAyMzQsIDIzNCwgMjM0LCAKKyAgICAyMzQsIDIzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MiwgMCwgCisgICAgMjYyLCAyNjIsIDAsIDAsIDI2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYyLCAyNjIsIDI2MiwgMjYyLCAwLCAKKyAgICAwLCAyMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAwLCAwLCAKIH07CiAKIC8qIGRlY29tcG9zaXRpb24gZGF0YSAqLwpAQCAtMjM2Niw1NTIgKzI3MjEsNTU1IEBACiAgICAgNjksIDI2MiwgNzAsIDI2MiwgNzcsIDI2MiwgMTExLCAyNTgsIDE0ODgsIDI1OCwgMTQ4OSwgMjU4LCAxNDkwLCAyNTgsIAogICAgIDE0OTEsIDI2MiwgMTA1LCA3NzAsIDcwLCA2NSwgODgsIDI2MiwgOTYwLCAyNjIsIDk0NywgMjYyLCA5MTUsIDI2MiwgOTI4LCAKICAgICAyNjIsIDg3MjEsIDI2MiwgNjgsIDI2MiwgMTAwLCAyNjIsIDEwMSwgMjYyLCAxMDUsIDI2MiwgMTA2LCA3NzIsIDQ5LCAKLSAgICA4MjYwLCA1MSwgNzcyLCA1MCwgODI2MCwgNTEsIDc3MiwgNDksIDgyNjAsIDUzLCA3NzIsIDUwLCA4MjYwLCA1MywgNzcyLCAKLSAgICA1MSwgODI2MCwgNTMsIDc3MiwgNTIsIDgyNjAsIDUzLCA3NzIsIDQ5LCA4MjYwLCA1NCwgNzcyLCA1MywgODI2MCwgNTQsIAotICAgIDc3MiwgNDksIDgyNjAsIDU2LCA3NzIsIDUxLCA4MjYwLCA1NiwgNzcyLCA1MywgODI2MCwgNTYsIDc3MiwgNTUsIDgyNjAsIAotICAgIDU2LCA1MTYsIDQ5LCA4MjYwLCAyNTgsIDczLCA1MTQsIDczLCA3MywgNzcwLCA3MywgNzMsIDczLCA1MTQsIDczLCA4NiwgCi0gICAgMjU4LCA4NiwgNTE0LCA4NiwgNzMsIDc3MCwgODYsIDczLCA3MywgMTAyNiwgODYsIDczLCA3MywgNzMsIDUxNCwgNzMsIDg4LCAKLSAgICAyNTgsIDg4LCA1MTQsIDg4LCA3MywgNzcwLCA4OCwgNzMsIDczLCAyNTgsIDc2LCAyNTgsIDY3LCAyNTgsIDY4LCAyNTgsIAotICAgIDc3LCAyNTgsIDEwNSwgNTE0LCAxMDUsIDEwNSwgNzcwLCAxMDUsIDEwNSwgMTA1LCA1MTQsIDEwNSwgMTE4LCAyNTgsIDExOCwgCi0gICAgNTE0LCAxMTgsIDEwNSwgNzcwLCAxMTgsIDEwNSwgMTA1LCAxMDI2LCAxMTgsIDEwNSwgMTA1LCAxMDUsIDUxNCwgMTA1LCAKLSAgICAxMjAsIDI1OCwgMTIwLCA1MTQsIDEyMCwgMTA1LCA3NzAsIDEyMCwgMTA1LCAxMDUsIDI1OCwgMTA4LCAyNTgsIDk5LCAyNTgsIAotICAgIDEwMCwgMjU4LCAxMDksIDUxMiwgODU5MiwgODI0LCA1MTIsIDg1OTQsIDgyNCwgNTEyLCA4NTk2LCA4MjQsIDUxMiwgODY1NiwgCi0gICAgODI0LCA1MTIsIDg2NjAsIDgyNCwgNTEyLCA4NjU4LCA4MjQsIDUxMiwgODcwNywgODI0LCA1MTIsIDg3MTIsIDgyNCwgNTEyLCAKLSAgICA4NzE1LCA4MjQsIDUxMiwgODczOSwgODI0LCA1MTIsIDg3NDEsIDgyNCwgNTE0LCA4NzQ3LCA4NzQ3LCA3NzAsIDg3NDcsIAotICAgIDg3NDcsIDg3NDcsIDUxNCwgODc1MCwgODc1MCwgNzcwLCA4NzUwLCA4NzUwLCA4NzUwLCA1MTIsIDg3NjQsIDgyNCwgNTEyLCAKLSAgICA4NzcxLCA4MjQsIDUxMiwgODc3MywgODI0LCA1MTIsIDg3NzYsIDgyNCwgNTEyLCA2MSwgODI0LCA1MTIsIDg4MDEsIDgyNCwgCi0gICAgNTEyLCA4NzgxLCA4MjQsIDUxMiwgNjAsIDgyNCwgNTEyLCA2MiwgODI0LCA1MTIsIDg4MDQsIDgyNCwgNTEyLCA4ODA1LCAKLSAgICA4MjQsIDUxMiwgODgxOCwgODI0LCA1MTIsIDg4MTksIDgyNCwgNTEyLCA4ODIyLCA4MjQsIDUxMiwgODgyMywgODI0LCA1MTIsIAotICAgIDg4MjYsIDgyNCwgNTEyLCA4ODI3LCA4MjQsIDUxMiwgODgzNCwgODI0LCA1MTIsIDg4MzUsIDgyNCwgNTEyLCA4ODM4LCAKLSAgICA4MjQsIDUxMiwgODgzOSwgODI0LCA1MTIsIDg4NjYsIDgyNCwgNTEyLCA4ODcyLCA4MjQsIDUxMiwgODg3MywgODI0LCA1MTIsIAotICAgIDg4NzUsIDgyNCwgNTEyLCA4ODI4LCA4MjQsIDUxMiwgODgyOSwgODI0LCA1MTIsIDg4NDksIDgyNCwgNTEyLCA4ODUwLCAKLSAgICA4MjQsIDUxMiwgODg4MiwgODI0LCA1MTIsIDg4ODMsIDgyNCwgNTEyLCA4ODg0LCA4MjQsIDUxMiwgODg4NSwgODI0LCAyNTYsIAotICAgIDEyMjk2LCAyNTYsIDEyMjk3LCAyNjMsIDQ5LCAyNjMsIDUwLCAyNjMsIDUxLCAyNjMsIDUyLCAyNjMsIDUzLCAyNjMsIDU0LCAKLSAgICAyNjMsIDU1LCAyNjMsIDU2LCAyNjMsIDU3LCA1MTksIDQ5LCA0OCwgNTE5LCA0OSwgNDksIDUxOSwgNDksIDUwLCA1MTksIAotICAgIDQ5LCA1MSwgNTE5LCA0OSwgNTIsIDUxOSwgNDksIDUzLCA1MTksIDQ5LCA1NCwgNTE5LCA0OSwgNTUsIDUxOSwgNDksIDU2LCAKLSAgICA1MTksIDQ5LCA1NywgNTE5LCA1MCwgNDgsIDc3MCwgNDAsIDQ5LCA0MSwgNzcwLCA0MCwgNTAsIDQxLCA3NzAsIDQwLCA1MSwgCi0gICAgNDEsIDc3MCwgNDAsIDUyLCA0MSwgNzcwLCA0MCwgNTMsIDQxLCA3NzAsIDQwLCA1NCwgNDEsIDc3MCwgNDAsIDU1LCA0MSwgCi0gICAgNzcwLCA0MCwgNTYsIDQxLCA3NzAsIDQwLCA1NywgNDEsIDEwMjYsIDQwLCA0OSwgNDgsIDQxLCAxMDI2LCA0MCwgNDksIDQ5LCAKLSAgICA0MSwgMTAyNiwgNDAsIDQ5LCA1MCwgNDEsIDEwMjYsIDQwLCA0OSwgNTEsIDQxLCAxMDI2LCA0MCwgNDksIDUyLCA0MSwgCi0gICAgMTAyNiwgNDAsIDQ5LCA1MywgNDEsIDEwMjYsIDQwLCA0OSwgNTQsIDQxLCAxMDI2LCA0MCwgNDksIDU1LCA0MSwgMTAyNiwgCi0gICAgNDAsIDQ5LCA1NiwgNDEsIDEwMjYsIDQwLCA0OSwgNTcsIDQxLCAxMDI2LCA0MCwgNTAsIDQ4LCA0MSwgNTE0LCA0OSwgNDYsIAotICAgIDUxNCwgNTAsIDQ2LCA1MTQsIDUxLCA0NiwgNTE0LCA1MiwgNDYsIDUxNCwgNTMsIDQ2LCA1MTQsIDU0LCA0NiwgNTE0LCA1NSwgCi0gICAgNDYsIDUxNCwgNTYsIDQ2LCA1MTQsIDU3LCA0NiwgNzcwLCA0OSwgNDgsIDQ2LCA3NzAsIDQ5LCA0OSwgNDYsIDc3MCwgNDksIAotICAgIDUwLCA0NiwgNzcwLCA0OSwgNTEsIDQ2LCA3NzAsIDQ5LCA1MiwgNDYsIDc3MCwgNDksIDUzLCA0NiwgNzcwLCA0OSwgNTQsIAotICAgIDQ2LCA3NzAsIDQ5LCA1NSwgNDYsIDc3MCwgNDksIDU2LCA0NiwgNzcwLCA0OSwgNTcsIDQ2LCA3NzAsIDUwLCA0OCwgNDYsIAotICAgIDc3MCwgNDAsIDk3LCA0MSwgNzcwLCA0MCwgOTgsIDQxLCA3NzAsIDQwLCA5OSwgNDEsIDc3MCwgNDAsIDEwMCwgNDEsIDc3MCwgCi0gICAgNDAsIDEwMSwgNDEsIDc3MCwgNDAsIDEwMiwgNDEsIDc3MCwgNDAsIDEwMywgNDEsIDc3MCwgNDAsIDEwNCwgNDEsIDc3MCwgCi0gICAgNDAsIDEwNSwgNDEsIDc3MCwgNDAsIDEwNiwgNDEsIDc3MCwgNDAsIDEwNywgNDEsIDc3MCwgNDAsIDEwOCwgNDEsIDc3MCwgCi0gICAgNDAsIDEwOSwgNDEsIDc3MCwgNDAsIDExMCwgNDEsIDc3MCwgNDAsIDExMSwgNDEsIDc3MCwgNDAsIDExMiwgNDEsIDc3MCwgCi0gICAgNDAsIDExMywgNDEsIDc3MCwgNDAsIDExNCwgNDEsIDc3MCwgNDAsIDExNSwgNDEsIDc3MCwgNDAsIDExNiwgNDEsIDc3MCwgCi0gICAgNDAsIDExNywgNDEsIDc3MCwgNDAsIDExOCwgNDEsIDc3MCwgNDAsIDExOSwgNDEsIDc3MCwgNDAsIDEyMCwgNDEsIDc3MCwgCi0gICAgNDAsIDEyMSwgNDEsIDc3MCwgNDAsIDEyMiwgNDEsIDI2MywgNjUsIDI2MywgNjYsIDI2MywgNjcsIDI2MywgNjgsIDI2MywgCi0gICAgNjksIDI2MywgNzAsIDI2MywgNzEsIDI2MywgNzIsIDI2MywgNzMsIDI2MywgNzQsIDI2MywgNzUsIDI2MywgNzYsIDI2MywgCi0gICAgNzcsIDI2MywgNzgsIDI2MywgNzksIDI2MywgODAsIDI2MywgODEsIDI2MywgODIsIDI2MywgODMsIDI2MywgODQsIDI2MywgCi0gICAgODUsIDI2MywgODYsIDI2MywgODcsIDI2MywgODgsIDI2MywgODksIDI2MywgOTAsIDI2MywgOTcsIDI2MywgOTgsIDI2MywgCi0gICAgOTksIDI2MywgMTAwLCAyNjMsIDEwMSwgMjYzLCAxMDIsIDI2MywgMTAzLCAyNjMsIDEwNCwgMjYzLCAxMDUsIDI2MywgMTA2LCAKLSAgICAyNjMsIDEwNywgMjYzLCAxMDgsIDI2MywgMTA5LCAyNjMsIDExMCwgMjYzLCAxMTEsIDI2MywgMTEyLCAyNjMsIDExMywgCi0gICAgMjYzLCAxMTQsIDI2MywgMTE1LCAyNjMsIDExNiwgMjYzLCAxMTcsIDI2MywgMTE4LCAyNjMsIDExOSwgMjYzLCAxMjAsIAotICAgIDI2MywgMTIxLCAyNjMsIDEyMiwgMjYzLCA0OCwgMTAyNiwgODc0NywgODc0NywgODc0NywgODc0NywgNzcwLCA1OCwgNTgsIAotICAgIDYxLCA1MTQsIDYxLCA2MSwgNzcwLCA2MSwgNjEsIDYxLCA1MTIsIDEwOTczLCA4MjQsIDI2MSwgMTA2LCAyNTksIDg2LCAKLSAgICAyNTksIDExNjE3LCAyNTgsIDI3NTk3LCAyNTgsIDQwODYzLCAyNTgsIDE5OTY4LCAyNTgsIDIwMDA4LCAyNTgsIDIwMDIyLCAKLSAgICAyNTgsIDIwMDMxLCAyNTgsIDIwMDU3LCAyNTgsIDIwMTAxLCAyNTgsIDIwMTA4LCAyNTgsIDIwMTI4LCAyNTgsIDIwMTU0LCAKLSAgICAyNTgsIDIwNzk5LCAyNTgsIDIwODM3LCAyNTgsIDIwODQzLCAyNTgsIDIwODY2LCAyNTgsIDIwODg2LCAyNTgsIDIwOTA3LCAKLSAgICAyNTgsIDIwOTYwLCAyNTgsIDIwOTgxLCAyNTgsIDIwOTkyLCAyNTgsIDIxMTQ3LCAyNTgsIDIxMjQxLCAyNTgsIDIxMjY5LCAKLSAgICAyNTgsIDIxMjc0LCAyNTgsIDIxMzA0LCAyNTgsIDIxMzEzLCAyNTgsIDIxMzQwLCAyNTgsIDIxMzUzLCAyNTgsIDIxMzc4LCAKLSAgICAyNTgsIDIxNDMwLCAyNTgsIDIxNDQ4LCAyNTgsIDIxNDc1LCAyNTgsIDIyMjMxLCAyNTgsIDIyMzAzLCAyNTgsIDIyNzYzLCAKLSAgICAyNTgsIDIyNzg2LCAyNTgsIDIyNzk0LCAyNTgsIDIyODA1LCAyNTgsIDIyODIzLCAyNTgsIDIyODk5LCAyNTgsIDIzMzc2LCAKLSAgICAyNTgsIDIzNDI0LCAyNTgsIDIzNTQ0LCAyNTgsIDIzNTY3LCAyNTgsIDIzNTg2LCAyNTgsIDIzNjA4LCAyNTgsIDIzNjYyLCAKLSAgICAyNTgsIDIzNjY1LCAyNTgsIDI0MDI3LCAyNTgsIDI0MDM3LCAyNTgsIDI0MDQ5LCAyNTgsIDI0MDYyLCAyNTgsIDI0MTc4LCAKLSAgICAyNTgsIDI0MTg2LCAyNTgsIDI0MTkxLCAyNTgsIDI0MzA4LCAyNTgsIDI0MzE4LCAyNTgsIDI0MzMxLCAyNTgsIDI0MzM5LCAKLSAgICAyNTgsIDI0NDAwLCAyNTgsIDI0NDE3LCAyNTgsIDI0NDM1LCAyNTgsIDI0NTE1LCAyNTgsIDI1MDk2LCAyNTgsIDI1MTQyLCAKLSAgICAyNTgsIDI1MTYzLCAyNTgsIDI1OTAzLCAyNTgsIDI1OTA4LCAyNTgsIDI1OTkxLCAyNTgsIDI2MDA3LCAyNTgsIDI2MDIwLCAKLSAgICAyNTgsIDI2MDQxLCAyNTgsIDI2MDgwLCAyNTgsIDI2MDg1LCAyNTgsIDI2MzUyLCAyNTgsIDI2Mzc2LCAyNTgsIDI2NDA4LCAKLSAgICAyNTgsIDI3NDI0LCAyNTgsIDI3NDkwLCAyNTgsIDI3NTEzLCAyNTgsIDI3NTcxLCAyNTgsIDI3NTk1LCAyNTgsIDI3NjA0LCAKLSAgICAyNTgsIDI3NjExLCAyNTgsIDI3NjYzLCAyNTgsIDI3NjY4LCAyNTgsIDI3NzAwLCAyNTgsIDI4Nzc5LCAyNTgsIDI5MjI2LCAKLSAgICAyNTgsIDI5MjM4LCAyNTgsIDI5MjQzLCAyNTgsIDI5MjQ3LCAyNTgsIDI5MjU1LCAyNTgsIDI5MjczLCAyNTgsIDI5Mjc1LCAKLSAgICAyNTgsIDI5MzU2LCAyNTgsIDI5NTcyLCAyNTgsIDI5NTc3LCAyNTgsIDI5OTE2LCAyNTgsIDI5OTI2LCAyNTgsIDI5OTc2LCAKLSAgICAyNTgsIDI5OTgzLCAyNTgsIDI5OTkyLCAyNTgsIDMwMDAwLCAyNTgsIDMwMDkxLCAyNTgsIDMwMDk4LCAyNTgsIDMwMzI2LCAKLSAgICAyNTgsIDMwMzMzLCAyNTgsIDMwMzgyLCAyNTgsIDMwMzk5LCAyNTgsIDMwNDQ2LCAyNTgsIDMwNjgzLCAyNTgsIDMwNjkwLCAKLSAgICAyNTgsIDMwNzA3LCAyNTgsIDMxMDM0LCAyNTgsIDMxMTYwLCAyNTgsIDMxMTY2LCAyNTgsIDMxMzQ4LCAyNTgsIDMxNDM1LCAKLSAgICAyNTgsIDMxNDgxLCAyNTgsIDMxODU5LCAyNTgsIDMxOTkyLCAyNTgsIDMyNTY2LCAyNTgsIDMyNTkzLCAyNTgsIDMyNjUwLCAKLSAgICAyNTgsIDMyNzAxLCAyNTgsIDMyNzY5LCAyNTgsIDMyNzgwLCAyNTgsIDMyNzg2LCAyNTgsIDMyODE5LCAyNTgsIDMyODk1LCAKLSAgICAyNTgsIDMyOTA1LCAyNTgsIDMzMjUxLCAyNTgsIDMzMjU4LCAyNTgsIDMzMjY3LCAyNTgsIDMzMjc2LCAyNTgsIDMzMjkyLCAKLSAgICAyNTgsIDMzMzA3LCAyNTgsIDMzMzExLCAyNTgsIDMzMzkwLCAyNTgsIDMzMzk0LCAyNTgsIDMzNDAwLCAyNTgsIDM0MzgxLCAKLSAgICAyNTgsIDM0NDExLCAyNTgsIDM0ODgwLCAyNTgsIDM0ODkyLCAyNTgsIDM0OTE1LCAyNTgsIDM1MTk4LCAyNTgsIDM1MjExLCAKLSAgICAyNTgsIDM1MjgyLCAyNTgsIDM1MzI4LCAyNTgsIDM1ODk1LCAyNTgsIDM1OTEwLCAyNTgsIDM1OTI1LCAyNTgsIDM1OTYwLCAKLSAgICAyNTgsIDM1OTk3LCAyNTgsIDM2MTk2LCAyNTgsIDM2MjA4LCAyNTgsIDM2Mjc1LCAyNTgsIDM2NTIzLCAyNTgsIDM2NTU0LCAKLSAgICAyNTgsIDM2NzYzLCAyNTgsIDM2Nzg0LCAyNTgsIDM2Nzg5LCAyNTgsIDM3MDA5LCAyNTgsIDM3MTkzLCAyNTgsIDM3MzE4LCAKLSAgICAyNTgsIDM3MzI0LCAyNTgsIDM3MzI5LCAyNTgsIDM4MjYzLCAyNTgsIDM4MjcyLCAyNTgsIDM4NDI4LCAyNTgsIDM4NTgyLCAKLSAgICAyNTgsIDM4NTg1LCAyNTgsIDM4NjMyLCAyNTgsIDM4NzM3LCAyNTgsIDM4NzUwLCAyNTgsIDM4NzU0LCAyNTgsIDM4NzYxLCAKLSAgICAyNTgsIDM4ODU5LCAyNTgsIDM4ODkzLCAyNTgsIDM4ODk5LCAyNTgsIDM4OTEzLCAyNTgsIDM5MDgwLCAyNTgsIDM5MTMxLCAKLSAgICAyNTgsIDM5MTM1LCAyNTgsIDM5MzE4LCAyNTgsIDM5MzIxLCAyNTgsIDM5MzQwLCAyNTgsIDM5NTkyLCAyNTgsIDM5NjQwLCAKLSAgICAyNTgsIDM5NjQ3LCAyNTgsIDM5NzE3LCAyNTgsIDM5NzI3LCAyNTgsIDM5NzMwLCAyNTgsIDM5NzQwLCAyNTgsIDM5NzcwLCAKLSAgICAyNTgsIDQwMTY1LCAyNTgsIDQwNTY1LCAyNTgsIDQwNTc1LCAyNTgsIDQwNjEzLCAyNTgsIDQwNjM1LCAyNTgsIDQwNjQzLCAKLSAgICAyNTgsIDQwNjUzLCAyNTgsIDQwNjU3LCAyNTgsIDQwNjk3LCAyNTgsIDQwNzAxLCAyNTgsIDQwNzE4LCAyNTgsIDQwNzIzLCAKLSAgICAyNTgsIDQwNzM2LCAyNTgsIDQwNzYzLCAyNTgsIDQwNzc4LCAyNTgsIDQwNzg2LCAyNTgsIDQwODQ1LCAyNTgsIDQwODYwLCAKLSAgICAyNTgsIDQwODY0LCAyNjQsIDMyLCAyNTgsIDEyMzA2LCAyNTgsIDIxMzEzLCAyNTgsIDIxMzE2LCAyNTgsIDIxMzE3LCA1MTIsIAotICAgIDEyMzYzLCAxMjQ0MSwgNTEyLCAxMjM2NSwgMTI0NDEsIDUxMiwgMTIzNjcsIDEyNDQxLCA1MTIsIDEyMzY5LCAxMjQ0MSwgCi0gICAgNTEyLCAxMjM3MSwgMTI0NDEsIDUxMiwgMTIzNzMsIDEyNDQxLCA1MTIsIDEyMzc1LCAxMjQ0MSwgNTEyLCAxMjM3NywgCi0gICAgMTI0NDEsIDUxMiwgMTIzNzksIDEyNDQxLCA1MTIsIDEyMzgxLCAxMjQ0MSwgNTEyLCAxMjM4MywgMTI0NDEsIDUxMiwgCi0gICAgMTIzODUsIDEyNDQxLCA1MTIsIDEyMzg4LCAxMjQ0MSwgNTEyLCAxMjM5MCwgMTI0NDEsIDUxMiwgMTIzOTIsIDEyNDQxLCAKLSAgICA1MTIsIDEyMzk5LCAxMjQ0MSwgNTEyLCAxMjM5OSwgMTI0NDIsIDUxMiwgMTI0MDIsIDEyNDQxLCA1MTIsIDEyNDAyLCAKLSAgICAxMjQ0MiwgNTEyLCAxMjQwNSwgMTI0NDEsIDUxMiwgMTI0MDUsIDEyNDQyLCA1MTIsIDEyNDA4LCAxMjQ0MSwgNTEyLCAKLSAgICAxMjQwOCwgMTI0NDIsIDUxMiwgMTI0MTEsIDEyNDQxLCA1MTIsIDEyNDExLCAxMjQ0MiwgNTEyLCAxMjM1OCwgMTI0NDEsIAotICAgIDUxNCwgMzIsIDEyNDQxLCA1MTQsIDMyLCAxMjQ0MiwgNTEyLCAxMjQ0NSwgMTI0NDEsIDUyMSwgMTI0MjQsIDEyNDI2LCAKLSAgICA1MTIsIDEyNDU5LCAxMjQ0MSwgNTEyLCAxMjQ2MSwgMTI0NDEsIDUxMiwgMTI0NjMsIDEyNDQxLCA1MTIsIDEyNDY1LCAKLSAgICAxMjQ0MSwgNTEyLCAxMjQ2NywgMTI0NDEsIDUxMiwgMTI0NjksIDEyNDQxLCA1MTIsIDEyNDcxLCAxMjQ0MSwgNTEyLCAKLSAgICAxMjQ3MywgMTI0NDEsIDUxMiwgMTI0NzUsIDEyNDQxLCA1MTIsIDEyNDc3LCAxMjQ0MSwgNTEyLCAxMjQ3OSwgMTI0NDEsIAotICAgIDUxMiwgMTI0ODEsIDEyNDQxLCA1MTIsIDEyNDg0LCAxMjQ0MSwgNTEyLCAxMjQ4NiwgMTI0NDEsIDUxMiwgMTI0ODgsIAotICAgIDEyNDQxLCA1MTIsIDEyNDk1LCAxMjQ0MSwgNTEyLCAxMjQ5NSwgMTI0NDIsIDUxMiwgMTI0OTgsIDEyNDQxLCA1MTIsIAotICAgIDEyNDk4LCAxMjQ0MiwgNTEyLCAxMjUwMSwgMTI0NDEsIDUxMiwgMTI1MDEsIDEyNDQyLCA1MTIsIDEyNTA0LCAxMjQ0MSwgCi0gICAgNTEyLCAxMjUwNCwgMTI0NDIsIDUxMiwgMTI1MDcsIDEyNDQxLCA1MTIsIDEyNTA3LCAxMjQ0MiwgNTEyLCAxMjQ1NCwgCi0gICAgMTI0NDEsIDUxMiwgMTI1MjcsIDEyNDQxLCA1MTIsIDEyNTI4LCAxMjQ0MSwgNTEyLCAxMjUyOSwgMTI0NDEsIDUxMiwgCi0gICAgMTI1MzAsIDEyNDQxLCA1MTIsIDEyNTQxLCAxMjQ0MSwgNTIxLCAxMjQ2NywgMTI0ODgsIDI1OCwgNDM1MiwgMjU4LCA0MzUzLCAKLSAgICAyNTgsIDQ1MjIsIDI1OCwgNDM1NCwgMjU4LCA0NTI0LCAyNTgsIDQ1MjUsIDI1OCwgNDM1NSwgMjU4LCA0MzU2LCAyNTgsIAotICAgIDQzNTcsIDI1OCwgNDUyOCwgMjU4LCA0NTI5LCAyNTgsIDQ1MzAsIDI1OCwgNDUzMSwgMjU4LCA0NTMyLCAyNTgsIDQ1MzMsIAotICAgIDI1OCwgNDM3OCwgMjU4LCA0MzU4LCAyNTgsIDQzNTksIDI1OCwgNDM2MCwgMjU4LCA0Mzg1LCAyNTgsIDQzNjEsIDI1OCwgCi0gICAgNDM2MiwgMjU4LCA0MzYzLCAyNTgsIDQzNjQsIDI1OCwgNDM2NSwgMjU4LCA0MzY2LCAyNTgsIDQzNjcsIDI1OCwgNDM2OCwgCi0gICAgMjU4LCA0MzY5LCAyNTgsIDQzNzAsIDI1OCwgNDQ0OSwgMjU4LCA0NDUwLCAyNTgsIDQ0NTEsIDI1OCwgNDQ1MiwgMjU4LCAKLSAgICA0NDUzLCAyNTgsIDQ0NTQsIDI1OCwgNDQ1NSwgMjU4LCA0NDU2LCAyNTgsIDQ0NTcsIDI1OCwgNDQ1OCwgMjU4LCA0NDU5LCAKLSAgICAyNTgsIDQ0NjAsIDI1OCwgNDQ2MSwgMjU4LCA0NDYyLCAyNTgsIDQ0NjMsIDI1OCwgNDQ2NCwgMjU4LCA0NDY1LCAyNTgsIAotICAgIDQ0NjYsIDI1OCwgNDQ2NywgMjU4LCA0NDY4LCAyNTgsIDQ0NjksIDI1OCwgNDQ0OCwgMjU4LCA0MzcyLCAyNTgsIDQzNzMsIAotICAgIDI1OCwgNDU1MSwgMjU4LCA0NTUyLCAyNTgsIDQ1NTYsIDI1OCwgNDU1OCwgMjU4LCA0NTYzLCAyNTgsIDQ1NjcsIDI1OCwgCi0gICAgNDU2OSwgMjU4LCA0MzgwLCAyNTgsIDQ1NzMsIDI1OCwgNDU3NSwgMjU4LCA0MzgxLCAyNTgsIDQzODIsIDI1OCwgNDM4NCwgCi0gICAgMjU4LCA0Mzg2LCAyNTgsIDQzODcsIDI1OCwgNDM5MSwgMjU4LCA0MzkzLCAyNTgsIDQzOTUsIDI1OCwgNDM5NiwgMjU4LCAKLSAgICA0Mzk3LCAyNTgsIDQzOTgsIDI1OCwgNDM5OSwgMjU4LCA0NDAyLCAyNTgsIDQ0MDYsIDI1OCwgNDQxNiwgMjU4LCA0NDIzLCAKLSAgICAyNTgsIDQ0MjgsIDI1OCwgNDU5MywgMjU4LCA0NTk0LCAyNTgsIDQ0MzksIDI1OCwgNDQ0MCwgMjU4LCA0NDQxLCAyNTgsIAotICAgIDQ0ODQsIDI1OCwgNDQ4NSwgMjU4LCA0NDg4LCAyNTgsIDQ0OTcsIDI1OCwgNDQ5OCwgMjU4LCA0NTAwLCAyNTgsIDQ1MTAsIAotICAgIDI1OCwgNDUxMywgMjU5LCAxOTk2OCwgMjU5LCAyMDEwOCwgMjU5LCAxOTk3NywgMjU5LCAyMjIzNSwgMjU5LCAxOTk3OCwgCi0gICAgMjU5LCAyMDAxMywgMjU5LCAxOTk3OSwgMjU5LCAzMDAwMiwgMjU5LCAyMDA1NywgMjU5LCAxOTk5MywgMjU5LCAxOTk2OSwgCi0gICAgMjU5LCAyMjgyNSwgMjU5LCAyMjMyMCwgMjU5LCAyMDE1NCwgNzcwLCA0MCwgNDM1MiwgNDEsIDc3MCwgNDAsIDQzNTQsIDQxLCAKLSAgICA3NzAsIDQwLCA0MzU1LCA0MSwgNzcwLCA0MCwgNDM1NywgNDEsIDc3MCwgNDAsIDQzNTgsIDQxLCA3NzAsIDQwLCA0MzU5LCAKLSAgICA0MSwgNzcwLCA0MCwgNDM2MSwgNDEsIDc3MCwgNDAsIDQzNjMsIDQxLCA3NzAsIDQwLCA0MzY0LCA0MSwgNzcwLCA0MCwgCi0gICAgNDM2NiwgNDEsIDc3MCwgNDAsIDQzNjcsIDQxLCA3NzAsIDQwLCA0MzY4LCA0MSwgNzcwLCA0MCwgNDM2OSwgNDEsIDc3MCwgCi0gICAgNDAsIDQzNzAsIDQxLCAxMDI2LCA0MCwgNDM1MiwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzU0LCA0NDQ5LCA0MSwgMTAyNiwgCi0gICAgNDAsIDQzNTUsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM1NywgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzU4LCA0NDQ5LCA0MSwgCi0gICAgMTAyNiwgNDAsIDQzNTksIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2MSwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzYzLCA0NDQ5LCAKLSAgICA0MSwgMTAyNiwgNDAsIDQzNjQsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2NiwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzY3LCAKLSAgICA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjgsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2OSwgNDQ0OSwgNDEsIDEwMjYsIDQwLCAKLSAgICA0MzcwLCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjQsIDQ0NjIsIDQxLCAxNzk0LCA0MCwgNDM2MywgNDQ1NywgNDM2NCwgCi0gICAgNDQ1MywgNDUyMywgNDEsIDE1MzgsIDQwLCA0MzYzLCA0NDU3LCA0MzcwLCA0NDYyLCA0MSwgNzcwLCA0MCwgMTk5NjgsIDQxLCAKLSAgICA3NzAsIDQwLCAyMDEwOCwgNDEsIDc3MCwgNDAsIDE5OTc3LCA0MSwgNzcwLCA0MCwgMjIyMzUsIDQxLCA3NzAsIDQwLCAKLSAgICAyMDExNiwgNDEsIDc3MCwgNDAsIDIwODQ1LCA0MSwgNzcwLCA0MCwgMTk5NzEsIDQxLCA3NzAsIDQwLCAyMDg0MywgNDEsIAotICAgIDc3MCwgNDAsIDIwMDYxLCA0MSwgNzcwLCA0MCwgMjEzMTMsIDQxLCA3NzAsIDQwLCAyNjM3NiwgNDEsIDc3MCwgNDAsIAotICAgIDI4Nzc5LCA0MSwgNzcwLCA0MCwgMjc3MDAsIDQxLCA3NzAsIDQwLCAyNjQwOCwgNDEsIDc3MCwgNDAsIDM3MzI5LCA0MSwgCi0gICAgNzcwLCA0MCwgMjIzMDMsIDQxLCA3NzAsIDQwLCAyNjA4NSwgNDEsIDc3MCwgNDAsIDI2NjY2LCA0MSwgNzcwLCA0MCwgCi0gICAgMjYzNzcsIDQxLCA3NzAsIDQwLCAzMTAzOCwgNDEsIDc3MCwgNDAsIDIxNTE3LCA0MSwgNzcwLCA0MCwgMjkzMDUsIDQxLCAKLSAgICA3NzAsIDQwLCAzNjAwMSwgNDEsIDc3MCwgNDAsIDMxMDY5LCA0MSwgNzcwLCA0MCwgMjExNzIsIDQxLCA3NzAsIDQwLCAKLSAgICAyMDE5NSwgNDEsIDc3MCwgNDAsIDIxNjI4LCA0MSwgNzcwLCA0MCwgMjMzOTgsIDQxLCA3NzAsIDQwLCAzMDQzNSwgNDEsIAotICAgIDc3MCwgNDAsIDIwMjI1LCA0MSwgNzcwLCA0MCwgMzYwMzksIDQxLCA3NzAsIDQwLCAyMTMzMiwgNDEsIDc3MCwgNDAsIAotICAgIDMxMDg1LCA0MSwgNzcwLCA0MCwgMjAyNDEsIDQxLCA3NzAsIDQwLCAzMzI1OCwgNDEsIDc3MCwgNDAsIDMzMjY3LCA0MSwgCi0gICAgNzc4LCA4MCwgODQsIDY5LCA1MTksIDUwLCA0OSwgNTE5LCA1MCwgNTAsIDUxOSwgNTAsIDUxLCA1MTksIDUwLCA1MiwgNTE5LCAKLSAgICA1MCwgNTMsIDUxOSwgNTAsIDU0LCA1MTksIDUwLCA1NSwgNTE5LCA1MCwgNTYsIDUxOSwgNTAsIDU3LCA1MTksIDUxLCA0OCwgCi0gICAgNTE5LCA1MSwgNDksIDUxOSwgNTEsIDUwLCA1MTksIDUxLCA1MSwgNTE5LCA1MSwgNTIsIDUxOSwgNTEsIDUzLCAyNjMsIAotICAgIDQzNTIsIDI2MywgNDM1NCwgMjYzLCA0MzU1LCAyNjMsIDQzNTcsIDI2MywgNDM1OCwgMjYzLCA0MzU5LCAyNjMsIDQzNjEsIAotICAgIDI2MywgNDM2MywgMjYzLCA0MzY0LCAyNjMsIDQzNjYsIDI2MywgNDM2NywgMjYzLCA0MzY4LCAyNjMsIDQzNjksIDI2MywgCi0gICAgNDM3MCwgNTE5LCA0MzUyLCA0NDQ5LCA1MTksIDQzNTQsIDQ0NDksIDUxOSwgNDM1NSwgNDQ0OSwgNTE5LCA0MzU3LCA0NDQ5LCAKLSAgICA1MTksIDQzNTgsIDQ0NDksIDUxOSwgNDM1OSwgNDQ0OSwgNTE5LCA0MzYxLCA0NDQ5LCA1MTksIDQzNjMsIDQ0NDksIDUxOSwgCi0gICAgNDM2NCwgNDQ0OSwgNTE5LCA0MzY2LCA0NDQ5LCA1MTksIDQzNjcsIDQ0NDksIDUxOSwgNDM2OCwgNDQ0OSwgNTE5LCA0MzY5LCAKLSAgICA0NDQ5LCA1MTksIDQzNzAsIDQ0NDksIDEyODcsIDQzNjYsIDQ0NDksIDQ1MzUsIDQzNTIsIDQ0NTcsIDEwMzEsIDQzNjQsIAotICAgIDQ0NjIsIDQzNjMsIDQ0NjgsIDUxOSwgNDM2MywgNDQ2MiwgMjYzLCAxOTk2OCwgMjYzLCAyMDEwOCwgMjYzLCAxOTk3NywgCi0gICAgMjYzLCAyMjIzNSwgMjYzLCAyMDExNiwgMjYzLCAyMDg0NSwgMjYzLCAxOTk3MSwgMjYzLCAyMDg0MywgMjYzLCAyMDA2MSwgCi0gICAgMjYzLCAyMTMxMywgMjYzLCAyNjM3NiwgMjYzLCAyODc3OSwgMjYzLCAyNzcwMCwgMjYzLCAyNjQwOCwgMjYzLCAzNzMyOSwgCi0gICAgMjYzLCAyMjMwMywgMjYzLCAyNjA4NSwgMjYzLCAyNjY2NiwgMjYzLCAyNjM3NywgMjYzLCAzMTAzOCwgMjYzLCAyMTUxNywgCi0gICAgMjYzLCAyOTMwNSwgMjYzLCAzNjAwMSwgMjYzLCAzMTA2OSwgMjYzLCAyMTE3MiwgMjYzLCAzMTE5MiwgMjYzLCAzMDAwNywgCi0gICAgMjYzLCAyMjg5OSwgMjYzLCAzNjk2OSwgMjYzLCAyMDc3OCwgMjYzLCAyMTM2MCwgMjYzLCAyNzg4MCwgMjYzLCAzODkxNywgCi0gICAgMjYzLCAyMDI0MSwgMjYzLCAyMDg4OSwgMjYzLCAyNzQ5MSwgMjYzLCAxOTk3OCwgMjYzLCAyMDAxMywgMjYzLCAxOTk3OSwgCi0gICAgMjYzLCAyNDAzOCwgMjYzLCAyMTQ5MSwgMjYzLCAyMTMwNywgMjYzLCAyMzQ0NywgMjYzLCAyMzM5OCwgMjYzLCAzMDQzNSwgCi0gICAgMjYzLCAyMDIyNSwgMjYzLCAzNjAzOSwgMjYzLCAyMTMzMiwgMjYzLCAyMjgxMiwgNTE5LCA1MSwgNTQsIDUxOSwgNTEsIDU1LCAKLSAgICA1MTksIDUxLCA1NiwgNTE5LCA1MSwgNTcsIDUxOSwgNTIsIDQ4LCA1MTksIDUyLCA0OSwgNTE5LCA1MiwgNTAsIDUxOSwgNTIsIAotICAgIDUxLCA1MTksIDUyLCA1MiwgNTE5LCA1MiwgNTMsIDUxOSwgNTIsIDU0LCA1MTksIDUyLCA1NSwgNTE5LCA1MiwgNTYsIDUxOSwgCi0gICAgNTIsIDU3LCA1MTksIDUzLCA0OCwgNTE0LCA0OSwgMjYzNzYsIDUxNCwgNTAsIDI2Mzc2LCA1MTQsIDUxLCAyNjM3NiwgNTE0LCAKLSAgICA1MiwgMjYzNzYsIDUxNCwgNTMsIDI2Mzc2LCA1MTQsIDU0LCAyNjM3NiwgNTE0LCA1NSwgMjYzNzYsIDUxNCwgNTYsIAotICAgIDI2Mzc2LCA1MTQsIDU3LCAyNjM3NiwgNzcwLCA0OSwgNDgsIDI2Mzc2LCA3NzAsIDQ5LCA0OSwgMjYzNzYsIDc3MCwgNDksIAotICAgIDUwLCAyNjM3NiwgNTIyLCA3MiwgMTAzLCA3NzgsIDEwMSwgMTE0LCAxMDMsIDUyMiwgMTAxLCA4NiwgNzc4LCA3NiwgODQsIAotICAgIDY4LCAyNjMsIDEyNDUwLCAyNjMsIDEyNDUyLCAyNjMsIDEyNDU0LCAyNjMsIDEyNDU2LCAyNjMsIDEyNDU4LCAyNjMsIAotICAgIDEyNDU5LCAyNjMsIDEyNDYxLCAyNjMsIDEyNDYzLCAyNjMsIDEyNDY1LCAyNjMsIDEyNDY3LCAyNjMsIDEyNDY5LCAyNjMsIAotICAgIDEyNDcxLCAyNjMsIDEyNDczLCAyNjMsIDEyNDc1LCAyNjMsIDEyNDc3LCAyNjMsIDEyNDc5LCAyNjMsIDEyNDgxLCAyNjMsIAotICAgIDEyNDg0LCAyNjMsIDEyNDg2LCAyNjMsIDEyNDg4LCAyNjMsIDEyNDkwLCAyNjMsIDEyNDkxLCAyNjMsIDEyNDkyLCAyNjMsIAotICAgIDEyNDkzLCAyNjMsIDEyNDk0LCAyNjMsIDEyNDk1LCAyNjMsIDEyNDk4LCAyNjMsIDEyNTAxLCAyNjMsIDEyNTA0LCAyNjMsIAotICAgIDEyNTA3LCAyNjMsIDEyNTEwLCAyNjMsIDEyNTExLCAyNjMsIDEyNTEyLCAyNjMsIDEyNTEzLCAyNjMsIDEyNTE0LCAyNjMsIAotICAgIDEyNTE2LCAyNjMsIDEyNTE4LCAyNjMsIDEyNTIwLCAyNjMsIDEyNTIxLCAyNjMsIDEyNTIyLCAyNjMsIDEyNTIzLCAyNjMsIAotICAgIDEyNTI0LCAyNjMsIDEyNTI1LCAyNjMsIDEyNTI3LCAyNjMsIDEyNTI4LCAyNjMsIDEyNTI5LCAyNjMsIDEyNTMwLCAxMDM0LCAKLSAgICAxMjQ1MCwgMTI0OTcsIDEyNTQwLCAxMjQ4OCwgMTAzNCwgMTI0NTAsIDEyNTIzLCAxMjUwMSwgMTI0NDksIDEwMzQsIAotICAgIDEyNDUwLCAxMjUzMSwgMTI1MDYsIDEyNDUwLCA3NzgsIDEyNDUwLCAxMjU0MCwgMTI1MjMsIDEwMzQsIDEyNDUyLCAxMjQ5MSwgCi0gICAgMTI1MzEsIDEyNDY0LCA3NzgsIDEyNDUyLCAxMjUzMSwgMTI0ODEsIDc3OCwgMTI0NTQsIDEyNDU3LCAxMjUzMSwgMTI5MCwgCi0gICAgMTI0NTYsIDEyNDczLCAxMjQ2MywgMTI1NDAsIDEyNDg5LCAxMDM0LCAxMjQ1NiwgMTI1NDAsIDEyNDU5LCAxMjU0MCwgNzc4LCAKLSAgICAxMjQ1OCwgMTI1MzEsIDEyNDczLCA3NzgsIDEyNDU4LCAxMjU0MCwgMTI1MTIsIDc3OCwgMTI0NTksIDEyNDUyLCAxMjUyMiwgCi0gICAgMTAzNCwgMTI0NTksIDEyNTIxLCAxMjQ4MywgMTI0ODgsIDEwMzQsIDEyNDU5LCAxMjUyNSwgMTI1MjIsIDEyNTQwLCA3NzgsIAotICAgIDEyNDYwLCAxMjUyNSwgMTI1MzEsIDc3OCwgMTI0NjAsIDEyNTMxLCAxMjUxMCwgNTIyLCAxMjQ2MiwgMTI0NjAsIDc3OCwgCi0gICAgMTI0NjIsIDEyNDkxLCAxMjU0MCwgMTAzNCwgMTI0NjEsIDEyNTE3LCAxMjUyMiwgMTI1NDAsIDEwMzQsIDEyNDYyLCAKLSAgICAxMjUyMywgMTI0ODAsIDEyNTQwLCA1MjIsIDEyNDYxLCAxMjUyNSwgMTI5MCwgMTI0NjEsIDEyNTI1LCAxMjQ2NCwgMTI1MjEsIAotICAgIDEyNTEyLCAxNTQ2LCAxMjQ2MSwgMTI1MjUsIDEyNTEzLCAxMjU0MCwgMTI0ODgsIDEyNTIzLCAxMjkwLCAxMjQ2MSwgCi0gICAgMTI1MjUsIDEyNTI3LCAxMjQ4MywgMTI0ODgsIDc3OCwgMTI0NjQsIDEyNTIxLCAxMjUxMiwgMTI5MCwgMTI0NjQsIDEyNTIxLCAKLSAgICAxMjUxMiwgMTI0ODgsIDEyNTMxLCAxMjkwLCAxMjQ2MywgMTI1MjMsIDEyNDc2LCAxMjQ1MiwgMTI1MjUsIDEwMzQsIAotICAgIDEyNDYzLCAxMjUyNSwgMTI1NDAsIDEyNDkzLCA3NzgsIDEyNDY1LCAxMjU0MCwgMTI0NzMsIDc3OCwgMTI0NjcsIDEyNTIzLCAKLSAgICAxMjQ5MCwgNzc4LCAxMjQ2NywgMTI1NDAsIDEyNTA5LCAxMDM0LCAxMjQ2OSwgMTI0NTIsIDEyNDYzLCAxMjUyMywgMTI5MCwgCi0gICAgMTI0NjksIDEyNTMxLCAxMjQ4MSwgMTI1NDAsIDEyNTEyLCAxMDM0LCAxMjQ3MSwgMTI1MjIsIDEyNTMxLCAxMjQ2NCwgNzc4LCAKLSAgICAxMjQ3NSwgMTI1MzEsIDEyNDgxLCA3NzgsIDEyNDc1LCAxMjUzMSwgMTI0ODgsIDc3OCwgMTI0ODAsIDEyNTQwLCAxMjQ3MywgCi0gICAgNTIyLCAxMjQ4NywgMTI0NzEsIDUyMiwgMTI0ODksIDEyNTIzLCA1MjIsIDEyNDg4LCAxMjUzMSwgNTIyLCAxMjQ5MCwgCi0gICAgMTI0OTQsIDc3OCwgMTI0OTQsIDEyNDgzLCAxMjQ4OCwgNzc4LCAxMjQ5NSwgMTI0NTIsIDEyNDg0LCAxMjkwLCAxMjQ5NywgCi0gICAgMTI1NDAsIDEyNDc1LCAxMjUzMSwgMTI0ODgsIDc3OCwgMTI0OTcsIDEyNTQwLCAxMjQ4NCwgMTAzNCwgMTI0OTYsIDEyNTQwLCAKLSAgICAxMjUyNCwgMTI1MjMsIDEyOTAsIDEyNTAwLCAxMjQ1MCwgMTI0NzMsIDEyNDg4LCAxMjUyMywgNzc4LCAxMjUwMCwgMTI0NjMsIAotICAgIDEyNTIzLCA1MjIsIDEyNTAwLCAxMjQ2NywgNTIyLCAxMjQ5OSwgMTI1MjMsIDEyOTAsIDEyNTAxLCAxMjQ0OSwgMTI1MjEsIAotICAgIDEyNDgzLCAxMjQ4OSwgMTAzNCwgMTI1MDEsIDEyNDUxLCAxMjU0MCwgMTI0ODgsIDEyOTAsIDEyNTAyLCAxMjQ4MywgCi0gICAgMTI0NzEsIDEyNDU1LCAxMjUyMywgNzc4LCAxMjUwMSwgMTI1MjEsIDEyNTMxLCAxMjkwLCAxMjUwNCwgMTI0NjMsIDEyNDc5LCAKLSAgICAxMjU0MCwgMTI1MjMsIDUyMiwgMTI1MDYsIDEyNDc3LCA3NzgsIDEyNTA2LCAxMjQ5MSwgMTI0OTgsIDc3OCwgMTI1MDQsIAotICAgIDEyNTIzLCAxMjQ4NCwgNzc4LCAxMjUwNiwgMTI1MzEsIDEyNDczLCA3NzgsIDEyNTA2LCAxMjU0MCwgMTI0NzIsIDc3OCwgCi0gICAgMTI1MDUsIDEyNTQwLCAxMjQ3OSwgMTAzNCwgMTI1MDksIDEyNDUyLCAxMjUzMSwgMTI0ODgsIDc3OCwgMTI1MDgsIDEyNTIzLCAKLSAgICAxMjQ4OCwgNTIyLCAxMjUwNywgMTI1MzEsIDc3OCwgMTI1MDksIDEyNTMxLCAxMjQ4OSwgNzc4LCAxMjUwNywgMTI1NDAsIAotICAgIDEyNTIzLCA3NzgsIDEyNTA3LCAxMjU0MCwgMTI1MzEsIDEwMzQsIDEyNTEwLCAxMjQ1MiwgMTI0NjMsIDEyNTI1LCA3NzgsIAotICAgIDEyNTEwLCAxMjQ1MiwgMTI1MjMsIDc3OCwgMTI1MTAsIDEyNDgzLCAxMjQ5NSwgNzc4LCAxMjUxMCwgMTI1MjMsIDEyNDYzLCAKLSAgICAxMjkwLCAxMjUxMCwgMTI1MzEsIDEyNDcxLCAxMjUxOSwgMTI1MzEsIDEwMzQsIDEyNTExLCAxMjQ2MywgMTI1MjUsIAotICAgIDEyNTMxLCA1MjIsIDEyNTExLCAxMjUyMiwgMTI5MCwgMTI1MTEsIDEyNTIyLCAxMjQ5NiwgMTI1NDAsIDEyNTIzLCA1MjIsIAotICAgIDEyNTEzLCAxMjQ2MCwgMTAzNCwgMTI1MTMsIDEyNDYwLCAxMjQ4OCwgMTI1MzEsIDEwMzQsIDEyNTEzLCAxMjU0MCwgCi0gICAgMTI0ODgsIDEyNTIzLCA3NzgsIDEyNTE2LCAxMjU0MCwgMTI0ODksIDc3OCwgMTI1MTYsIDEyNTQwLCAxMjUyMywgNzc4LCAKLSAgICAxMjUxOCwgMTI0NTAsIDEyNTMxLCAxMDM0LCAxMjUyMiwgMTI0ODMsIDEyNDg4LCAxMjUyMywgNTIyLCAxMjUyMiwgMTI1MjEsIAotICAgIDc3OCwgMTI1MjMsIDEyNTAwLCAxMjU0MCwgMTAzNCwgMTI1MjMsIDEyNTQwLCAxMjUwMiwgMTI1MjMsIDUyMiwgMTI1MjQsIAotICAgIDEyNTEyLCAxMjkwLCAxMjUyNCwgMTI1MzEsIDEyNDg4LCAxMjQ2NiwgMTI1MzEsIDc3OCwgMTI1MjcsIDEyNDgzLCAxMjQ4OCwgCi0gICAgNTE0LCA0OCwgMjg4NTcsIDUxNCwgNDksIDI4ODU3LCA1MTQsIDUwLCAyODg1NywgNTE0LCA1MSwgMjg4NTcsIDUxNCwgNTIsIAotICAgIDI4ODU3LCA1MTQsIDUzLCAyODg1NywgNTE0LCA1NCwgMjg4NTcsIDUxNCwgNTUsIDI4ODU3LCA1MTQsIDU2LCAyODg1NywgCi0gICAgNTE0LCA1NywgMjg4NTcsIDc3MCwgNDksIDQ4LCAyODg1NywgNzcwLCA0OSwgNDksIDI4ODU3LCA3NzAsIDQ5LCA1MCwgCi0gICAgMjg4NTcsIDc3MCwgNDksIDUxLCAyODg1NywgNzcwLCA0OSwgNTIsIDI4ODU3LCA3NzAsIDQ5LCA1MywgMjg4NTcsIDc3MCwgCi0gICAgNDksIDU0LCAyODg1NywgNzcwLCA0OSwgNTUsIDI4ODU3LCA3NzAsIDQ5LCA1NiwgMjg4NTcsIDc3MCwgNDksIDU3LCAKLSAgICAyODg1NywgNzcwLCA1MCwgNDgsIDI4ODU3LCA3NzAsIDUwLCA0OSwgMjg4NTcsIDc3MCwgNTAsIDUwLCAyODg1NywgNzcwLCAKLSAgICA1MCwgNTEsIDI4ODU3LCA3NzAsIDUwLCA1MiwgMjg4NTcsIDc3OCwgMTA0LCA4MCwgOTcsIDUyMiwgMTAwLCA5NywgNTIyLCAKLSAgICA2NSwgODUsIDc3OCwgOTgsIDk3LCAxMTQsIDUyMiwgMTExLCA4NiwgNTIyLCAxMTIsIDk5LCA1MjIsIDEwMCwgMTA5LCA3NzgsIAotICAgIDEwMCwgMTA5LCAxNzgsIDc3OCwgMTAwLCAxMDksIDE3OSwgNTIyLCA3MywgODUsIDUyMiwgMjQxNzksIDI1MTA0LCA1MjIsIAotICAgIDI2MTU3LCAyMTY0NCwgNTIyLCAyMjgyMywgMjc0OTEsIDUyMiwgMjYxMjYsIDI3ODM1LCAxMDM0LCAyNjY2NiwgMjQzMzUsIAotICAgIDIwMjUwLCAzMTAzOCwgNTIyLCAxMTIsIDY1LCA1MjIsIDExMCwgNjUsIDUyMiwgOTU2LCA2NSwgNTIyLCAxMDksIDY1LCAKLSAgICA1MjIsIDEwNywgNjUsIDUyMiwgNzUsIDY2LCA1MjIsIDc3LCA2NiwgNTIyLCA3MSwgNjYsIDc3OCwgOTksIDk3LCAxMDgsIAotICAgIDEwMzQsIDEwNywgOTksIDk3LCAxMDgsIDUyMiwgMTEyLCA3MCwgNTIyLCAxMTAsIDcwLCA1MjIsIDk1NiwgNzAsIDUyMiwgCi0gICAgOTU2LCAxMDMsIDUyMiwgMTA5LCAxMDMsIDUyMiwgMTA3LCAxMDMsIDUyMiwgNzIsIDEyMiwgNzc4LCAxMDcsIDcyLCAxMjIsIAotICAgIDc3OCwgNzcsIDcyLCAxMjIsIDc3OCwgNzEsIDcyLCAxMjIsIDc3OCwgODQsIDcyLCAxMjIsIDUyMiwgOTU2LCA4NDY3LCAKLSAgICA1MjIsIDEwOSwgODQ2NywgNTIyLCAxMDAsIDg0NjcsIDUyMiwgMTA3LCA4NDY3LCA1MjIsIDEwMiwgMTA5LCA1MjIsIDExMCwgCi0gICAgMTA5LCA1MjIsIDk1NiwgMTA5LCA1MjIsIDEwOSwgMTA5LCA1MjIsIDk5LCAxMDksIDUyMiwgMTA3LCAxMDksIDc3OCwgMTA5LCAKLSAgICAxMDksIDE3OCwgNzc4LCA5OSwgMTA5LCAxNzgsIDUyMiwgMTA5LCAxNzgsIDc3OCwgMTA3LCAxMDksIDE3OCwgNzc4LCAxMDksIAotICAgIDEwOSwgMTc5LCA3NzgsIDk5LCAxMDksIDE3OSwgNTIyLCAxMDksIDE3OSwgNzc4LCAxMDcsIDEwOSwgMTc5LCA3NzgsIDEwOSwgCi0gICAgODcyNSwgMTE1LCAxMDM0LCAxMDksIDg3MjUsIDExNSwgMTc4LCA1MjIsIDgwLCA5NywgNzc4LCAxMDcsIDgwLCA5NywgNzc4LCAKLSAgICA3NywgODAsIDk3LCA3NzgsIDcxLCA4MCwgOTcsIDc3OCwgMTE0LCA5NywgMTAwLCAxMjkwLCAxMTQsIDk3LCAxMDAsIDg3MjUsIAotICAgIDExNSwgMTU0NiwgMTE0LCA5NywgMTAwLCA4NzI1LCAxMTUsIDE3OCwgNTIyLCAxMTIsIDExNSwgNTIyLCAxMTAsIDExNSwgCi0gICAgNTIyLCA5NTYsIDExNSwgNTIyLCAxMDksIDExNSwgNTIyLCAxMTIsIDg2LCA1MjIsIDExMCwgODYsIDUyMiwgOTU2LCA4NiwgCi0gICAgNTIyLCAxMDksIDg2LCA1MjIsIDEwNywgODYsIDUyMiwgNzcsIDg2LCA1MjIsIDExMiwgODcsIDUyMiwgMTEwLCA4NywgNTIyLCAKLSAgICA5NTYsIDg3LCA1MjIsIDEwOSwgODcsIDUyMiwgMTA3LCA4NywgNTIyLCA3NywgODcsIDUyMiwgMTA3LCA5MzcsIDUyMiwgNzcsIAotICAgIDkzNywgMTAzNCwgOTcsIDQ2LCAxMDksIDQ2LCA1MjIsIDY2LCAxMTMsIDUyMiwgOTksIDk5LCA1MjIsIDk5LCAxMDAsIAotICAgIDEwMzQsIDY3LCA4NzI1LCAxMDcsIDEwMywgNzc4LCA2NywgMTExLCA0NiwgNTIyLCAxMDAsIDY2LCA1MjIsIDcxLCAxMjEsIAotICAgIDUyMiwgMTA0LCA5NywgNTIyLCA3MiwgODAsIDUyMiwgMTA1LCAxMTAsIDUyMiwgNzUsIDc1LCA1MjIsIDc1LCA3NywgNTIyLCAKLSAgICAxMDcsIDExNiwgNTIyLCAxMDgsIDEwOSwgNTIyLCAxMDgsIDExMCwgNzc4LCAxMDgsIDExMSwgMTAzLCA1MjIsIDEwOCwgCi0gICAgMTIwLCA1MjIsIDEwOSwgOTgsIDc3OCwgMTA5LCAxMDUsIDEwOCwgNzc4LCAxMDksIDExMSwgMTA4LCA1MjIsIDgwLCA3MiwgCi0gICAgMTAzNCwgMTEyLCA0NiwgMTA5LCA0NiwgNzc4LCA4MCwgODAsIDc3LCA1MjIsIDgwLCA4MiwgNTIyLCAxMTUsIDExNCwgNTIyLCAKLSAgICA4MywgMTE4LCA1MjIsIDg3LCA5OCwgNzc4LCA4NiwgODcyNSwgMTA5LCA3NzgsIDY1LCA4NzI1LCAxMDksIDUxNCwgNDksIAotICAgIDI2MDg1LCA1MTQsIDUwLCAyNjA4NSwgNTE0LCA1MSwgMjYwODUsIDUxNCwgNTIsIDI2MDg1LCA1MTQsIDUzLCAyNjA4NSwgCi0gICAgNTE0LCA1NCwgMjYwODUsIDUxNCwgNTUsIDI2MDg1LCA1MTQsIDU2LCAyNjA4NSwgNTE0LCA1NywgMjYwODUsIDc3MCwgNDksIAotICAgIDQ4LCAyNjA4NSwgNzcwLCA0OSwgNDksIDI2MDg1LCA3NzAsIDQ5LCA1MCwgMjYwODUsIDc3MCwgNDksIDUxLCAyNjA4NSwgCi0gICAgNzcwLCA0OSwgNTIsIDI2MDg1LCA3NzAsIDQ5LCA1MywgMjYwODUsIDc3MCwgNDksIDU0LCAyNjA4NSwgNzcwLCA0OSwgNTUsIAotICAgIDI2MDg1LCA3NzAsIDQ5LCA1NiwgMjYwODUsIDc3MCwgNDksIDU3LCAyNjA4NSwgNzcwLCA1MCwgNDgsIDI2MDg1LCA3NzAsIAotICAgIDUwLCA0OSwgMjYwODUsIDc3MCwgNTAsIDUwLCAyNjA4NSwgNzcwLCA1MCwgNTEsIDI2MDg1LCA3NzAsIDUwLCA1MiwgCi0gICAgMjYwODUsIDc3MCwgNTAsIDUzLCAyNjA4NSwgNzcwLCA1MCwgNTQsIDI2MDg1LCA3NzAsIDUwLCA1NSwgMjYwODUsIDc3MCwgCi0gICAgNTAsIDU2LCAyNjA4NSwgNzcwLCA1MCwgNTcsIDI2MDg1LCA3NzAsIDUxLCA0OCwgMjYwODUsIDc3MCwgNTEsIDQ5LCAKLSAgICAyNjA4NSwgNzc4LCAxMDMsIDk3LCAxMDgsIDI1OSwgNDI4NjMsIDI1NiwgMzU5MTIsIDI1NiwgMjYzNTYsIDI1NiwgMzY1NTQsIAotICAgIDI1NiwgMzYwNDAsIDI1NiwgMjgzNjksIDI1NiwgMjAwMTgsIDI1NiwgMjE0NzcsIDI1NiwgNDA4NjAsIDI1NiwgNDA4NjAsIAotICAgIDI1NiwgMjI4NjUsIDI1NiwgMzczMjksIDI1NiwgMjE4OTUsIDI1NiwgMjI4NTYsIDI1NiwgMjUwNzgsIDI1NiwgMzAzMTMsIAotICAgIDI1NiwgMzI2NDUsIDI1NiwgMzQzNjcsIDI1NiwgMzQ3NDYsIDI1NiwgMzUwNjQsIDI1NiwgMzcwMDcsIDI1NiwgMjcxMzgsIAotICAgIDI1NiwgMjc5MzEsIDI1NiwgMjg4ODksIDI1NiwgMjk2NjIsIDI1NiwgMzM4NTMsIDI1NiwgMzcyMjYsIDI1NiwgMzk0MDksIAotICAgIDI1NiwgMjAwOTgsIDI1NiwgMjEzNjUsIDI1NiwgMjczOTYsIDI1NiwgMjkyMTEsIDI1NiwgMzQzNDksIDI1NiwgNDA0NzgsIAotICAgIDI1NiwgMjM4ODgsIDI1NiwgMjg2NTEsIDI1NiwgMzQyNTMsIDI1NiwgMzUxNzIsIDI1NiwgMjUyODksIDI1NiwgMzMyNDAsIAotICAgIDI1NiwgMzQ4NDcsIDI1NiwgMjQyNjYsIDI1NiwgMjYzOTEsIDI1NiwgMjgwMTAsIDI1NiwgMjk0MzYsIDI1NiwgMzcwNzAsIAotICAgIDI1NiwgMjAzNTgsIDI1NiwgMjA5MTksIDI1NiwgMjEyMTQsIDI1NiwgMjU3OTYsIDI1NiwgMjczNDcsIDI1NiwgMjkyMDAsIAotICAgIDI1NiwgMzA0MzksIDI1NiwgMzI3NjksIDI1NiwgMzQzMTAsIDI1NiwgMzQzOTYsIDI1NiwgMzYzMzUsIDI1NiwgMzg3MDYsIAotICAgIDI1NiwgMzk3OTEsIDI1NiwgNDA0NDIsIDI1NiwgMzA4NjAsIDI1NiwgMzExMDMsIDI1NiwgMzIxNjAsIDI1NiwgMzM3MzcsIAotICAgIDI1NiwgMzc2MzYsIDI1NiwgNDA1NzUsIDI1NiwgMzU1NDIsIDI1NiwgMjI3NTEsIDI1NiwgMjQzMjQsIDI1NiwgMzE4NDAsIAotICAgIDI1NiwgMzI4OTQsIDI1NiwgMjkyODIsIDI1NiwgMzA5MjIsIDI1NiwgMzYwMzQsIDI1NiwgMzg2NDcsIDI1NiwgMjI3NDQsIAotICAgIDI1NiwgMjM2NTAsIDI1NiwgMjcxNTUsIDI1NiwgMjgxMjIsIDI1NiwgMjg0MzEsIDI1NiwgMzIwNDcsIDI1NiwgMzIzMTEsIAotICAgIDI1NiwgMzg0NzUsIDI1NiwgMjEyMDIsIDI1NiwgMzI5MDcsIDI1NiwgMjA5NTYsIDI1NiwgMjA5NDAsIDI1NiwgMzEyNjAsIAotICAgIDI1NiwgMzIxOTAsIDI1NiwgMzM3NzcsIDI1NiwgMzg1MTcsIDI1NiwgMzU3MTIsIDI1NiwgMjUyOTUsIDI1NiwgMjcxMzgsIAotICAgIDI1NiwgMzU1ODIsIDI1NiwgMjAwMjUsIDI1NiwgMjM1MjcsIDI1NiwgMjQ1OTQsIDI1NiwgMjk1NzUsIDI1NiwgMzAwNjQsIAotICAgIDI1NiwgMjEyNzEsIDI1NiwgMzA5NzEsIDI1NiwgMjA0MTUsIDI1NiwgMjQ0ODksIDI1NiwgMTk5ODEsIDI1NiwgMjc4NTIsIAotICAgIDI1NiwgMjU5NzYsIDI1NiwgMzIwMzQsIDI1NiwgMjE0NDMsIDI1NiwgMjI2MjIsIDI1NiwgMzA0NjUsIDI1NiwgMzM4NjUsIAotICAgIDI1NiwgMzU0OTgsIDI1NiwgMjc1NzgsIDI1NiwgMzY3ODQsIDI1NiwgMjc3ODQsIDI1NiwgMjUzNDIsIDI1NiwgMzM1MDksIAotICAgIDI1NiwgMjU1MDQsIDI1NiwgMzAwNTMsIDI1NiwgMjAxNDIsIDI1NiwgMjA4NDEsIDI1NiwgMjA5MzcsIDI1NiwgMjY3NTMsIAotICAgIDI1NiwgMzE5NzUsIDI1NiwgMzMzOTEsIDI1NiwgMzU1MzgsIDI1NiwgMzczMjcsIDI1NiwgMjEyMzcsIDI1NiwgMjE1NzAsIAotICAgIDI1NiwgMjI4OTksIDI1NiwgMjQzMDAsIDI1NiwgMjYwNTMsIDI1NiwgMjg2NzAsIDI1NiwgMzEwMTgsIDI1NiwgMzgzMTcsIAotICAgIDI1NiwgMzk1MzAsIDI1NiwgNDA1OTksIDI1NiwgNDA2NTQsIDI1NiwgMjExNDcsIDI1NiwgMjYzMTAsIDI1NiwgMjc1MTEsIAotICAgIDI1NiwgMzY3MDYsIDI1NiwgMjQxODAsIDI1NiwgMjQ5NzYsIDI1NiwgMjUwODgsIDI1NiwgMjU3NTQsIDI1NiwgMjg0NTEsIAotICAgIDI1NiwgMjkwMDEsIDI1NiwgMjk4MzMsIDI1NiwgMzExNzgsIDI1NiwgMzIyNDQsIDI1NiwgMzI4NzksIDI1NiwgMzY2NDYsIAotICAgIDI1NiwgMzQwMzAsIDI1NiwgMzY4OTksIDI1NiwgMzc3MDYsIDI1NiwgMjEwMTUsIDI1NiwgMjExNTUsIDI1NiwgMjE2OTMsIAotICAgIDI1NiwgMjg4NzIsIDI1NiwgMzUwMTAsIDI1NiwgMzU0OTgsIDI1NiwgMjQyNjUsIDI1NiwgMjQ1NjUsIDI1NiwgMjU0NjcsIAotICAgIDI1NiwgMjc1NjYsIDI1NiwgMzE4MDYsIDI1NiwgMjk1NTcsIDI1NiwgMjAxOTYsIDI1NiwgMjIyNjUsIDI1NiwgMjM1MjcsIAotICAgIDI1NiwgMjM5OTQsIDI1NiwgMjQ2MDQsIDI1NiwgMjk2MTgsIDI1NiwgMjk4MDEsIDI1NiwgMzI2NjYsIDI1NiwgMzI4MzgsIAotICAgIDI1NiwgMzc0MjgsIDI1NiwgMzg2NDYsIDI1NiwgMzg3MjgsIDI1NiwgMzg5MzYsIDI1NiwgMjAzNjMsIDI1NiwgMzExNTAsIAotICAgIDI1NiwgMzczMDAsIDI1NiwgMzg1ODQsIDI1NiwgMjQ4MDEsIDI1NiwgMjAxMDIsIDI1NiwgMjA2OTgsIDI1NiwgMjM1MzQsIAotICAgIDI1NiwgMjM2MTUsIDI1NiwgMjYwMDksIDI1NiwgMjcxMzgsIDI1NiwgMjkxMzQsIDI1NiwgMzAyNzQsIDI1NiwgMzQwNDQsIAotICAgIDI1NiwgMzY5ODgsIDI1NiwgNDA4NDUsIDI1NiwgMjYyNDgsIDI1NiwgMzg0NDYsIDI1NiwgMjExMjksIDI1NiwgMjY0OTEsIAotICAgIDI1NiwgMjY2MTEsIDI1NiwgMjc5NjksIDI1NiwgMjgzMTYsIDI1NiwgMjk3MDUsIDI1NiwgMzAwNDEsIDI1NiwgMzA4MjcsIAotICAgIDI1NiwgMzIwMTYsIDI1NiwgMzkwMDYsIDI1NiwgMjA4NDUsIDI1NiwgMjUxMzQsIDI1NiwgMzg1MjAsIDI1NiwgMjA1MjMsIAotICAgIDI1NiwgMjM4MzMsIDI1NiwgMjgxMzgsIDI1NiwgMzY2NTAsIDI1NiwgMjQ0NTksIDI1NiwgMjQ5MDAsIDI1NiwgMjY2NDcsIAotICAgIDI1NiwgMjk1NzUsIDI1NiwgMzg1MzQsIDI1NiwgMjEwMzMsIDI1NiwgMjE1MTksIDI1NiwgMjM2NTMsIDI1NiwgMjYxMzEsIAotICAgIDI1NiwgMjY0NDYsIDI1NiwgMjY3OTIsIDI1NiwgMjc4NzcsIDI1NiwgMjk3MDIsIDI1NiwgMzAxNzgsIDI1NiwgMzI2MzMsIAotICAgIDI1NiwgMzUwMjMsIDI1NiwgMzUwNDEsIDI1NiwgMzczMjQsIDI1NiwgMzg2MjYsIDI1NiwgMjEzMTEsIDI1NiwgMjgzNDYsIAotICAgIDI1NiwgMjE1MzMsIDI1NiwgMjkxMzYsIDI1NiwgMjk4NDgsIDI1NiwgMzQyOTgsIDI1NiwgMzg1NjMsIDI1NiwgNDAwMjMsIAotICAgIDI1NiwgNDA2MDcsIDI1NiwgMjY1MTksIDI1NiwgMjgxMDcsIDI1NiwgMzMyNTYsIDI1NiwgMzE0MzUsIDI1NiwgMzE1MjAsIAotICAgIDI1NiwgMzE4OTAsIDI1NiwgMjkzNzYsIDI1NiwgMjg4MjUsIDI1NiwgMzU2NzIsIDI1NiwgMjAxNjAsIDI1NiwgMzM1OTAsIAotICAgIDI1NiwgMjEwNTAsIDI1NiwgMjA5OTksIDI1NiwgMjQyMzAsIDI1NiwgMjUyOTksIDI1NiwgMzE5NTgsIDI1NiwgMjM0MjksIAotICAgIDI1NiwgMjc5MzQsIDI1NiwgMjYyOTIsIDI1NiwgMzY2NjcsIDI1NiwgMzQ4OTIsIDI1NiwgMzg0NzcsIDI1NiwgMzUyMTEsIAotICAgIDI1NiwgMjQyNzUsIDI1NiwgMjA4MDAsIDI1NiwgMjE5NTIsIDI1NiwgMjI2MTgsIDI1NiwgMjYyMjgsIDI1NiwgMjA5NTgsIAotICAgIDI1NiwgMjk0ODIsIDI1NiwgMzA0MTAsIDI1NiwgMzEwMzYsIDI1NiwgMzEwNzAsIDI1NiwgMzEwNzcsIDI1NiwgMzExMTksIAotICAgIDI1NiwgMzg3NDIsIDI1NiwgMzE5MzQsIDI1NiwgMzI3MDEsIDI1NiwgMzQzMjIsIDI1NiwgMzU1NzYsIDI1NiwgMzY5MjAsIAotICAgIDI1NiwgMzcxMTcsIDI1NiwgMzkxNTEsIDI1NiwgMzkxNjQsIDI1NiwgMzkyMDgsIDI1NiwgNDAzNzIsIDI1NiwgMjAzOTgsIAotICAgIDI1NiwgMjA3MTEsIDI1NiwgMjA4MTMsIDI1NiwgMjExOTMsIDI1NiwgMjEyMjAsIDI1NiwgMjEzMjksIDI1NiwgMjE5MTcsIAotICAgIDI1NiwgMjIwMjIsIDI1NiwgMjIxMjAsIDI1NiwgMjI1OTIsIDI1NiwgMjI2OTYsIDI1NiwgMjM2NTIsIDI1NiwgMjM2NjIsIAotICAgIDI1NiwgMjQ3MjQsIDI1NiwgMjQ5MzYsIDI1NiwgMjQ5NzQsIDI1NiwgMjUwNzQsIDI1NiwgMjU5MzUsIDI1NiwgMjYwODIsIAotICAgIDI1NiwgMjYyNTcsIDI1NiwgMjY3NTcsIDI1NiwgMjgwMjMsIDI1NiwgMjgxODYsIDI1NiwgMjg0NTAsIDI1NiwgMjkwMzgsIAotICAgIDI1NiwgMjkyMjcsIDI1NiwgMjk3MzAsIDI1NiwgMzA4NjUsIDI1NiwgMzEwMzgsIDI1NiwgMzEwNDksIDI1NiwgMzEwNDgsIAotICAgIDI1NiwgMzEwNTYsIDI1NiwgMzEwNjIsIDI1NiwgMzEwNjksIDI1NiwgMzExMTcsIDI1NiwgMzExMTgsIDI1NiwgMzEyOTYsIAotICAgIDI1NiwgMzEzNjEsIDI1NiwgMzE2ODAsIDI1NiwgMzIyNDQsIDI1NiwgMzIyNjUsIDI1NiwgMzIzMjEsIDI1NiwgMzI2MjYsIAotICAgIDI1NiwgMzI3NzMsIDI1NiwgMzMyNjEsIDI1NiwgMzM0MDEsIDI1NiwgMzM0MDEsIDI1NiwgMzM4NzksIDI1NiwgMzUwODgsIAotICAgIDI1NiwgMzUyMjIsIDI1NiwgMzU1ODUsIDI1NiwgMzU2NDEsIDI1NiwgMzYwNTEsIDI1NiwgMzYxMDQsIDI1NiwgMzY3OTAsIAotICAgIDI1NiwgMzY5MjAsIDI1NiwgMzg2MjcsIDI1NiwgMzg5MTEsIDI1NiwgMzg5NzEsIDI1NiwgMjAwMDYsIDI1NiwgMjA5MTcsIAotICAgIDI1NiwgMjA4NDAsIDI1NiwgMjAzNTIsIDI1NiwgMjA4MDUsIDI1NiwgMjA4NjQsIDI1NiwgMjExOTEsIDI1NiwgMjEyNDIsIAotICAgIDI1NiwgMjE5MTcsIDI1NiwgMjE4NDUsIDI1NiwgMjE5MTMsIDI1NiwgMjE5ODYsIDI1NiwgMjI2MTgsIDI1NiwgMjI3MDcsIAotICAgIDI1NiwgMjI4NTIsIDI1NiwgMjI4NjgsIDI1NiwgMjMxMzgsIDI1NiwgMjMzMzYsIDI1NiwgMjQyNzQsIDI1NiwgMjQyODEsIAotICAgIDI1NiwgMjQ0MjUsIDI1NiwgMjQ0OTMsIDI1NiwgMjQ3OTIsIDI1NiwgMjQ5MTAsIDI1NiwgMjQ4NDAsIDI1NiwgMjQ5NzQsIAotICAgIDI1NiwgMjQ5MjgsIDI1NiwgMjUwNzQsIDI1NiwgMjUxNDAsIDI1NiwgMjU1NDAsIDI1NiwgMjU2MjgsIDI1NiwgMjU2ODIsIAotICAgIDI1NiwgMjU5NDIsIDI1NiwgMjYyMjgsIDI1NiwgMjYzOTEsIDI1NiwgMjYzOTUsIDI1NiwgMjY0NTQsIDI1NiwgMjc1MTMsIAotICAgIDI1NiwgMjc1NzgsIDI1NiwgMjc5NjksIDI1NiwgMjgzNzksIDI1NiwgMjgzNjMsIDI1NiwgMjg0NTAsIDI1NiwgMjg3MDIsIAotICAgIDI1NiwgMjkwMzgsIDI1NiwgMzA2MzEsIDI1NiwgMjkyMzcsIDI1NiwgMjkzNTksIDI1NiwgMjk0ODIsIDI1NiwgMjk4MDksIAotICAgIDI1NiwgMjk5NTgsIDI1NiwgMzAwMTEsIDI1NiwgMzAyMzcsIDI1NiwgMzAyMzksIDI1NiwgMzA0MTAsIDI1NiwgMzA0MjcsIAotICAgIDI1NiwgMzA0NTIsIDI1NiwgMzA1MzgsIDI1NiwgMzA1MjgsIDI1NiwgMzA5MjQsIDI1NiwgMzE0MDksIDI1NiwgMzE2ODAsIAotICAgIDI1NiwgMzE4NjcsIDI1NiwgMzIwOTEsIDI1NiwgMzIyNDQsIDI1NiwgMzI1NzQsIDI1NiwgMzI3NzMsIDI1NiwgMzM2MTgsIAotICAgIDI1NiwgMzM3NzUsIDI1NiwgMzQ2ODEsIDI1NiwgMzUxMzcsIDI1NiwgMzUyMDYsIDI1NiwgMzUyMjIsIDI1NiwgMzU1MTksIAotICAgIDI1NiwgMzU1NzYsIDI1NiwgMzU1MzEsIDI1NiwgMzU1ODUsIDI1NiwgMzU1ODIsIDI1NiwgMzU1NjUsIDI1NiwgMzU2NDEsIAotICAgIDI1NiwgMzU3MjIsIDI1NiwgMzYxMDQsIDI1NiwgMzY2NjQsIDI1NiwgMzY5NzgsIDI1NiwgMzcyNzMsIDI1NiwgMzc0OTQsIAotICAgIDI1NiwgMzg1MjQsIDI1NiwgMzg2MjcsIDI1NiwgMzg3NDIsIDI1NiwgMzg4NzUsIDI1NiwgMzg5MTEsIDI1NiwgMzg5MjMsIAotICAgIDI1NiwgMzg5NzEsIDI1NiwgMzk2OTgsIDI1NiwgNDA4NjAsIDI1NiwgMTQxMzg2LCAyNTYsIDE0MTM4MCwgMjU2LCAKLSAgICAxNDQzNDEsIDI1NiwgMTUyNjEsIDI1NiwgMTY0MDgsIDI1NiwgMTY0NDEsIDI1NiwgMTUyMTM3LCAyNTYsIDE1NDgzMiwgCi0gICAgMjU2LCAxNjM1MzksIDI1NiwgNDA3NzEsIDI1NiwgNDA4NDYsIDUxNCwgMTAyLCAxMDIsIDUxNCwgMTAyLCAxMDUsIDUxNCwgCi0gICAgMTAyLCAxMDgsIDc3MCwgMTAyLCAxMDIsIDEwNSwgNzcwLCAxMDIsIDEwMiwgMTA4LCA1MTQsIDM4MywgMTE2LCA1MTQsIAotICAgIDExNSwgMTE2LCA1MTQsIDEzOTYsIDEzOTgsIDUxNCwgMTM5NiwgMTM4MSwgNTE0LCAxMzk2LCAxMzg3LCA1MTQsIDE0MDYsIAotICAgIDEzOTgsIDUxNCwgMTM5NiwgMTM4OSwgNTEyLCAxNDk3LCAxNDYwLCA1MTIsIDE1MjIsIDE0NjMsIDI2MiwgMTUwNiwgMjYyLCAKLSAgICAxNDg4LCAyNjIsIDE0OTEsIDI2MiwgMTQ5MiwgMjYyLCAxNDk5LCAyNjIsIDE1MDAsIDI2MiwgMTUwMSwgMjYyLCAxNTEyLCAKLSAgICAyNjIsIDE1MTQsIDI2MiwgNDMsIDUxMiwgMTUxMywgMTQ3MywgNTEyLCAxNTEzLCAxNDc0LCA1MTIsIDY0MzI5LCAxNDczLCAKLSAgICA1MTIsIDY0MzI5LCAxNDc0LCA1MTIsIDE0ODgsIDE0NjMsIDUxMiwgMTQ4OCwgMTQ2NCwgNTEyLCAxNDg4LCAxNDY4LCA1MTIsIAotICAgIDE0ODksIDE0NjgsIDUxMiwgMTQ5MCwgMTQ2OCwgNTEyLCAxNDkxLCAxNDY4LCA1MTIsIDE0OTIsIDE0NjgsIDUxMiwgMTQ5MywgCi0gICAgMTQ2OCwgNTEyLCAxNDk0LCAxNDY4LCA1MTIsIDE0OTYsIDE0NjgsIDUxMiwgMTQ5NywgMTQ2OCwgNTEyLCAxNDk4LCAxNDY4LCAKLSAgICA1MTIsIDE0OTksIDE0NjgsIDUxMiwgMTUwMCwgMTQ2OCwgNTEyLCAxNTAyLCAxNDY4LCA1MTIsIDE1MDQsIDE0NjgsIDUxMiwgCi0gICAgMTUwNSwgMTQ2OCwgNTEyLCAxNTA3LCAxNDY4LCA1MTIsIDE1MDgsIDE0NjgsIDUxMiwgMTUxMCwgMTQ2OCwgNTEyLCAxNTExLCAKLSAgICAxNDY4LCA1MTIsIDE1MTIsIDE0NjgsIDUxMiwgMTUxMywgMTQ2OCwgNTEyLCAxNTE0LCAxNDY4LCA1MTIsIDE0OTMsIDE0NjUsIAotICAgIDUxMiwgMTQ4OSwgMTQ3MSwgNTEyLCAxNDk5LCAxNDcxLCA1MTIsIDE1MDgsIDE0NzEsIDUxNCwgMTQ4OCwgMTUwMCwgMjY3LCAKLSAgICAxNjQ5LCAyNjgsIDE2NDksIDI2NywgMTY1OSwgMjY4LCAxNjU5LCAyNjksIDE2NTksIDI3MCwgMTY1OSwgMjY3LCAxNjYyLCAKLSAgICAyNjgsIDE2NjIsIDI2OSwgMTY2MiwgMjcwLCAxNjYyLCAyNjcsIDE2NjQsIDI2OCwgMTY2NCwgMjY5LCAxNjY0LCAyNzAsIAotICAgIDE2NjQsIDI2NywgMTY1OCwgMjY4LCAxNjU4LCAyNjksIDE2NTgsIDI3MCwgMTY1OCwgMjY3LCAxNjYzLCAyNjgsIDE2NjMsIAotICAgIDI2OSwgMTY2MywgMjcwLCAxNjYzLCAyNjcsIDE2NTcsIDI2OCwgMTY1NywgMjY5LCAxNjU3LCAyNzAsIDE2NTcsIDI2NywgCi0gICAgMTcwMCwgMjY4LCAxNzAwLCAyNjksIDE3MDAsIDI3MCwgMTcwMCwgMjY3LCAxNzAyLCAyNjgsIDE3MDIsIDI2OSwgMTcwMiwgCi0gICAgMjcwLCAxNzAyLCAyNjcsIDE2NjgsIDI2OCwgMTY2OCwgMjY5LCAxNjY4LCAyNzAsIDE2NjgsIDI2NywgMTY2NywgMjY4LCAKLSAgICAxNjY3LCAyNjksIDE2NjcsIDI3MCwgMTY2NywgMjY3LCAxNjcwLCAyNjgsIDE2NzAsIDI2OSwgMTY3MCwgMjcwLCAxNjcwLCAKLSAgICAyNjcsIDE2NzEsIDI2OCwgMTY3MSwgMjY5LCAxNjcxLCAyNzAsIDE2NzEsIDI2NywgMTY3NywgMjY4LCAxNjc3LCAyNjcsIAotICAgIDE2NzYsIDI2OCwgMTY3NiwgMjY3LCAxNjc4LCAyNjgsIDE2NzgsIDI2NywgMTY3MiwgMjY4LCAxNjcyLCAyNjcsIDE2ODgsIAotICAgIDI2OCwgMTY4OCwgMjY3LCAxNjgxLCAyNjgsIDE2ODEsIDI2NywgMTcwNSwgMjY4LCAxNzA1LCAyNjksIDE3MDUsIDI3MCwgCi0gICAgMTcwNSwgMjY3LCAxNzExLCAyNjgsIDE3MTEsIDI2OSwgMTcxMSwgMjcwLCAxNzExLCAyNjcsIDE3MTUsIDI2OCwgMTcxNSwgCi0gICAgMjY5LCAxNzE1LCAyNzAsIDE3MTUsIDI2NywgMTcxMywgMjY4LCAxNzEzLCAyNjksIDE3MTMsIDI3MCwgMTcxMywgMjY3LCAKLSAgICAxNzIyLCAyNjgsIDE3MjIsIDI2NywgMTcyMywgMjY4LCAxNzIzLCAyNjksIDE3MjMsIDI3MCwgMTcyMywgMjY3LCAxNzI4LCAKLSAgICAyNjgsIDE3MjgsIDI2NywgMTcyOSwgMjY4LCAxNzI5LCAyNjksIDE3MjksIDI3MCwgMTcyOSwgMjY3LCAxNzI2LCAyNjgsIAotICAgIDE3MjYsIDI2OSwgMTcyNiwgMjcwLCAxNzI2LCAyNjcsIDE3NDYsIDI2OCwgMTc0NiwgMjY3LCAxNzQ3LCAyNjgsIDE3NDcsIAotICAgIDI2NywgMTcwOSwgMjY4LCAxNzA5LCAyNjksIDE3MDksIDI3MCwgMTcwOSwgMjY3LCAxNzM1LCAyNjgsIDE3MzUsIDI2NywgCi0gICAgMTczNCwgMjY4LCAxNzM0LCAyNjcsIDE3MzYsIDI2OCwgMTczNiwgMjY3LCAxNjU1LCAyNjcsIDE3MzksIDI2OCwgMTczOSwgCi0gICAgMjY3LCAxNzMzLCAyNjgsIDE3MzMsIDI2NywgMTczNywgMjY4LCAxNzM3LCAyNjcsIDE3NDQsIDI2OCwgMTc0NCwgMjY5LCAKLSAgICAxNzQ0LCAyNzAsIDE3NDQsIDI2OSwgMTYwOSwgMjcwLCAxNjA5LCA1MjMsIDE1NzQsIDE1NzUsIDUyNCwgMTU3NCwgMTU3NSwgCi0gICAgNTIzLCAxNTc0LCAxNzQ5LCA1MjQsIDE1NzQsIDE3NDksIDUyMywgMTU3NCwgMTYwOCwgNTI0LCAxNTc0LCAxNjA4LCA1MjMsIAotICAgIDE1NzQsIDE3MzUsIDUyNCwgMTU3NCwgMTczNSwgNTIzLCAxNTc0LCAxNzM0LCA1MjQsIDE1NzQsIDE3MzQsIDUyMywgMTU3NCwgCi0gICAgMTczNiwgNTI0LCAxNTc0LCAxNzM2LCA1MjMsIDE1NzQsIDE3NDQsIDUyNCwgMTU3NCwgMTc0NCwgNTI1LCAxNTc0LCAxNzQ0LCAKLSAgICA1MjMsIDE1NzQsIDE2MDksIDUyNCwgMTU3NCwgMTYwOSwgNTI1LCAxNTc0LCAxNjA5LCAyNjcsIDE3NDAsIDI2OCwgMTc0MCwgCi0gICAgMjY5LCAxNzQwLCAyNzAsIDE3NDAsIDUyMywgMTU3NCwgMTU4MCwgNTIzLCAxNTc0LCAxNTgxLCA1MjMsIDE1NzQsIDE2MDUsIAotICAgIDUyMywgMTU3NCwgMTYwOSwgNTIzLCAxNTc0LCAxNjEwLCA1MjMsIDE1NzYsIDE1ODAsIDUyMywgMTU3NiwgMTU4MSwgNTIzLCAKLSAgICAxNTc2LCAxNTgyLCA1MjMsIDE1NzYsIDE2MDUsIDUyMywgMTU3NiwgMTYwOSwgNTIzLCAxNTc2LCAxNjEwLCA1MjMsIDE1NzgsIAotICAgIDE1ODAsIDUyMywgMTU3OCwgMTU4MSwgNTIzLCAxNTc4LCAxNTgyLCA1MjMsIDE1NzgsIDE2MDUsIDUyMywgMTU3OCwgMTYwOSwgCi0gICAgNTIzLCAxNTc4LCAxNjEwLCA1MjMsIDE1NzksIDE1ODAsIDUyMywgMTU3OSwgMTYwNSwgNTIzLCAxNTc5LCAxNjA5LCA1MjMsIAotICAgIDE1NzksIDE2MTAsIDUyMywgMTU4MCwgMTU4MSwgNTIzLCAxNTgwLCAxNjA1LCA1MjMsIDE1ODEsIDE1ODAsIDUyMywgMTU4MSwgCi0gICAgMTYwNSwgNTIzLCAxNTgyLCAxNTgwLCA1MjMsIDE1ODIsIDE1ODEsIDUyMywgMTU4MiwgMTYwNSwgNTIzLCAxNTg3LCAxNTgwLCAKLSAgICA1MjMsIDE1ODcsIDE1ODEsIDUyMywgMTU4NywgMTU4MiwgNTIzLCAxNTg3LCAxNjA1LCA1MjMsIDE1ODksIDE1ODEsIDUyMywgCi0gICAgMTU4OSwgMTYwNSwgNTIzLCAxNTkwLCAxNTgwLCA1MjMsIDE1OTAsIDE1ODEsIDUyMywgMTU5MCwgMTU4MiwgNTIzLCAxNTkwLCAKLSAgICAxNjA1LCA1MjMsIDE1OTEsIDE1ODEsIDUyMywgMTU5MSwgMTYwNSwgNTIzLCAxNTkyLCAxNjA1LCA1MjMsIDE1OTMsIDE1ODAsIAotICAgIDUyMywgMTU5MywgMTYwNSwgNTIzLCAxNTk0LCAxNTgwLCA1MjMsIDE1OTQsIDE2MDUsIDUyMywgMTYwMSwgMTU4MCwgNTIzLCAKLSAgICAxNjAxLCAxNTgxLCA1MjMsIDE2MDEsIDE1ODIsIDUyMywgMTYwMSwgMTYwNSwgNTIzLCAxNjAxLCAxNjA5LCA1MjMsIDE2MDEsIAotICAgIDE2MTAsIDUyMywgMTYwMiwgMTU4MSwgNTIzLCAxNjAyLCAxNjA1LCA1MjMsIDE2MDIsIDE2MDksIDUyMywgMTYwMiwgMTYxMCwgCi0gICAgNTIzLCAxNjAzLCAxNTc1LCA1MjMsIDE2MDMsIDE1ODAsIDUyMywgMTYwMywgMTU4MSwgNTIzLCAxNjAzLCAxNTgyLCA1MjMsIAotICAgIDE2MDMsIDE2MDQsIDUyMywgMTYwMywgMTYwNSwgNTIzLCAxNjAzLCAxNjA5LCA1MjMsIDE2MDMsIDE2MTAsIDUyMywgMTYwNCwgCi0gICAgMTU4MCwgNTIzLCAxNjA0LCAxNTgxLCA1MjMsIDE2MDQsIDE1ODIsIDUyMywgMTYwNCwgMTYwNSwgNTIzLCAxNjA0LCAxNjA5LCAKLSAgICA1MjMsIDE2MDQsIDE2MTAsIDUyMywgMTYwNSwgMTU4MCwgNTIzLCAxNjA1LCAxNTgxLCA1MjMsIDE2MDUsIDE1ODIsIDUyMywgCi0gICAgMTYwNSwgMTYwNSwgNTIzLCAxNjA1LCAxNjA5LCA1MjMsIDE2MDUsIDE2MTAsIDUyMywgMTYwNiwgMTU4MCwgNTIzLCAxNjA2LCAKLSAgICAxNTgxLCA1MjMsIDE2MDYsIDE1ODIsIDUyMywgMTYwNiwgMTYwNSwgNTIzLCAxNjA2LCAxNjA5LCA1MjMsIDE2MDYsIDE2MTAsIAotICAgIDUyMywgMTYwNywgMTU4MCwgNTIzLCAxNjA3LCAxNjA1LCA1MjMsIDE2MDcsIDE2MDksIDUyMywgMTYwNywgMTYxMCwgNTIzLCAKLSAgICAxNjEwLCAxNTgwLCA1MjMsIDE2MTAsIDE1ODEsIDUyMywgMTYxMCwgMTU4MiwgNTIzLCAxNjEwLCAxNjA1LCA1MjMsIDE2MTAsIAotICAgIDE2MDksIDUyMywgMTYxMCwgMTYxMCwgNTIzLCAxNTg0LCAxNjQ4LCA1MjMsIDE1ODUsIDE2NDgsIDUyMywgMTYwOSwgMTY0OCwgCi0gICAgNzc5LCAzMiwgMTYxMiwgMTYxNywgNzc5LCAzMiwgMTYxMywgMTYxNywgNzc5LCAzMiwgMTYxNCwgMTYxNywgNzc5LCAzMiwgCi0gICAgMTYxNSwgMTYxNywgNzc5LCAzMiwgMTYxNiwgMTYxNywgNzc5LCAzMiwgMTYxNywgMTY0OCwgNTI0LCAxNTc0LCAxNTg1LCAKLSAgICA1MjQsIDE1NzQsIDE1ODYsIDUyNCwgMTU3NCwgMTYwNSwgNTI0LCAxNTc0LCAxNjA2LCA1MjQsIDE1NzQsIDE2MDksIDUyNCwgCi0gICAgMTU3NCwgMTYxMCwgNTI0LCAxNTc2LCAxNTg1LCA1MjQsIDE1NzYsIDE1ODYsIDUyNCwgMTU3NiwgMTYwNSwgNTI0LCAxNTc2LCAKLSAgICAxNjA2LCA1MjQsIDE1NzYsIDE2MDksIDUyNCwgMTU3NiwgMTYxMCwgNTI0LCAxNTc4LCAxNTg1LCA1MjQsIDE1NzgsIDE1ODYsIAotICAgIDUyNCwgMTU3OCwgMTYwNSwgNTI0LCAxNTc4LCAxNjA2LCA1MjQsIDE1NzgsIDE2MDksIDUyNCwgMTU3OCwgMTYxMCwgNTI0LCAKLSAgICAxNTc5LCAxNTg1LCA1MjQsIDE1NzksIDE1ODYsIDUyNCwgMTU3OSwgMTYwNSwgNTI0LCAxNTc5LCAxNjA2LCA1MjQsIDE1NzksIAotICAgIDE2MDksIDUyNCwgMTU3OSwgMTYxMCwgNTI0LCAxNjAxLCAxNjA5LCA1MjQsIDE2MDEsIDE2MTAsIDUyNCwgMTYwMiwgMTYwOSwgCi0gICAgNTI0LCAxNjAyLCAxNjEwLCA1MjQsIDE2MDMsIDE1NzUsIDUyNCwgMTYwMywgMTYwNCwgNTI0LCAxNjAzLCAxNjA1LCA1MjQsIAotICAgIDE2MDMsIDE2MDksIDUyNCwgMTYwMywgMTYxMCwgNTI0LCAxNjA0LCAxNjA1LCA1MjQsIDE2MDQsIDE2MDksIDUyNCwgMTYwNCwgCi0gICAgMTYxMCwgNTI0LCAxNjA1LCAxNTc1LCA1MjQsIDE2MDUsIDE2MDUsIDUyNCwgMTYwNiwgMTU4NSwgNTI0LCAxNjA2LCAxNTg2LCAKLSAgICA1MjQsIDE2MDYsIDE2MDUsIDUyNCwgMTYwNiwgMTYwNiwgNTI0LCAxNjA2LCAxNjA5LCA1MjQsIDE2MDYsIDE2MTAsIDUyNCwgCi0gICAgMTYwOSwgMTY0OCwgNTI0LCAxNjEwLCAxNTg1LCA1MjQsIDE2MTAsIDE1ODYsIDUyNCwgMTYxMCwgMTYwNSwgNTI0LCAxNjEwLCAKLSAgICAxNjA2LCA1MjQsIDE2MTAsIDE2MDksIDUyNCwgMTYxMCwgMTYxMCwgNTI1LCAxNTc0LCAxNTgwLCA1MjUsIDE1NzQsIDE1ODEsIAotICAgIDUyNSwgMTU3NCwgMTU4MiwgNTI1LCAxNTc0LCAxNjA1LCA1MjUsIDE1NzQsIDE2MDcsIDUyNSwgMTU3NiwgMTU4MCwgNTI1LCAKLSAgICAxNTc2LCAxNTgxLCA1MjUsIDE1NzYsIDE1ODIsIDUyNSwgMTU3NiwgMTYwNSwgNTI1LCAxNTc2LCAxNjA3LCA1MjUsIDE1NzgsIAotICAgIDE1ODAsIDUyNSwgMTU3OCwgMTU4MSwgNTI1LCAxNTc4LCAxNTgyLCA1MjUsIDE1NzgsIDE2MDUsIDUyNSwgMTU3OCwgMTYwNywgCi0gICAgNTI1LCAxNTc5LCAxNjA1LCA1MjUsIDE1ODAsIDE1ODEsIDUyNSwgMTU4MCwgMTYwNSwgNTI1LCAxNTgxLCAxNTgwLCA1MjUsIAotICAgIDE1ODEsIDE2MDUsIDUyNSwgMTU4MiwgMTU4MCwgNTI1LCAxNTgyLCAxNjA1LCA1MjUsIDE1ODcsIDE1ODAsIDUyNSwgMTU4NywgCi0gICAgMTU4MSwgNTI1LCAxNTg3LCAxNTgyLCA1MjUsIDE1ODcsIDE2MDUsIDUyNSwgMTU4OSwgMTU4MSwgNTI1LCAxNTg5LCAxNTgyLCAKLSAgICA1MjUsIDE1ODksIDE2MDUsIDUyNSwgMTU5MCwgMTU4MCwgNTI1LCAxNTkwLCAxNTgxLCA1MjUsIDE1OTAsIDE1ODIsIDUyNSwgCi0gICAgMTU5MCwgMTYwNSwgNTI1LCAxNTkxLCAxNTgxLCA1MjUsIDE1OTIsIDE2MDUsIDUyNSwgMTU5MywgMTU4MCwgNTI1LCAxNTkzLCAKLSAgICAxNjA1LCA1MjUsIDE1OTQsIDE1ODAsIDUyNSwgMTU5NCwgMTYwNSwgNTI1LCAxNjAxLCAxNTgwLCA1MjUsIDE2MDEsIDE1ODEsIAotICAgIDUyNSwgMTYwMSwgMTU4MiwgNTI1LCAxNjAxLCAxNjA1LCA1MjUsIDE2MDIsIDE1ODEsIDUyNSwgMTYwMiwgMTYwNSwgNTI1LCAKLSAgICAxNjAzLCAxNTgwLCA1MjUsIDE2MDMsIDE1ODEsIDUyNSwgMTYwMywgMTU4MiwgNTI1LCAxNjAzLCAxNjA0LCA1MjUsIDE2MDMsIAotICAgIDE2MDUsIDUyNSwgMTYwNCwgMTU4MCwgNTI1LCAxNjA0LCAxNTgxLCA1MjUsIDE2MDQsIDE1ODIsIDUyNSwgMTYwNCwgMTYwNSwgCi0gICAgNTI1LCAxNjA0LCAxNjA3LCA1MjUsIDE2MDUsIDE1ODAsIDUyNSwgMTYwNSwgMTU4MSwgNTI1LCAxNjA1LCAxNTgyLCA1MjUsIAotICAgIDE2MDUsIDE2MDUsIDUyNSwgMTYwNiwgMTU4MCwgNTI1LCAxNjA2LCAxNTgxLCA1MjUsIDE2MDYsIDE1ODIsIDUyNSwgMTYwNiwgCi0gICAgMTYwNSwgNTI1LCAxNjA2LCAxNjA3LCA1MjUsIDE2MDcsIDE1ODAsIDUyNSwgMTYwNywgMTYwNSwgNTI1LCAxNjA3LCAxNjQ4LCAKLSAgICA1MjUsIDE2MTAsIDE1ODAsIDUyNSwgMTYxMCwgMTU4MSwgNTI1LCAxNjEwLCAxNTgyLCA1MjUsIDE2MTAsIDE2MDUsIDUyNSwgCi0gICAgMTYxMCwgMTYwNywgNTI2LCAxNTc0LCAxNjA1LCA1MjYsIDE1NzQsIDE2MDcsIDUyNiwgMTU3NiwgMTYwNSwgNTI2LCAxNTc2LCAKLSAgICAxNjA3LCA1MjYsIDE1NzgsIDE2MDUsIDUyNiwgMTU3OCwgMTYwNywgNTI2LCAxNTc5LCAxNjA1LCA1MjYsIDE1NzksIDE2MDcsIAotICAgIDUyNiwgMTU4NywgMTYwNSwgNTI2LCAxNTg3LCAxNjA3LCA1MjYsIDE1ODgsIDE2MDUsIDUyNiwgMTU4OCwgMTYwNywgNTI2LCAKLSAgICAxNjAzLCAxNjA0LCA1MjYsIDE2MDMsIDE2MDUsIDUyNiwgMTYwNCwgMTYwNSwgNTI2LCAxNjA2LCAxNjA1LCA1MjYsIDE2MDYsIAotICAgIDE2MDcsIDUyNiwgMTYxMCwgMTYwNSwgNTI2LCAxNjEwLCAxNjA3LCA3ODIsIDE2MDAsIDE2MTQsIDE2MTcsIDc4MiwgMTYwMCwgCi0gICAgMTYxNSwgMTYxNywgNzgyLCAxNjAwLCAxNjE2LCAxNjE3LCA1MjMsIDE1OTEsIDE2MDksIDUyMywgMTU5MSwgMTYxMCwgNTIzLCAKLSAgICAxNTkzLCAxNjA5LCA1MjMsIDE1OTMsIDE2MTAsIDUyMywgMTU5NCwgMTYwOSwgNTIzLCAxNTk0LCAxNjEwLCA1MjMsIDE1ODcsIAotICAgIDE2MDksIDUyMywgMTU4NywgMTYxMCwgNTIzLCAxNTg4LCAxNjA5LCA1MjMsIDE1ODgsIDE2MTAsIDUyMywgMTU4MSwgMTYwOSwgCi0gICAgNTIzLCAxNTgxLCAxNjEwLCA1MjMsIDE1ODAsIDE2MDksIDUyMywgMTU4MCwgMTYxMCwgNTIzLCAxNTgyLCAxNjA5LCA1MjMsIAotICAgIDE1ODIsIDE2MTAsIDUyMywgMTU4OSwgMTYwOSwgNTIzLCAxNTg5LCAxNjEwLCA1MjMsIDE1OTAsIDE2MDksIDUyMywgMTU5MCwgCi0gICAgMTYxMCwgNTIzLCAxNTg4LCAxNTgwLCA1MjMsIDE1ODgsIDE1ODEsIDUyMywgMTU4OCwgMTU4MiwgNTIzLCAxNTg4LCAxNjA1LCAKLSAgICA1MjMsIDE1ODgsIDE1ODUsIDUyMywgMTU4NywgMTU4NSwgNTIzLCAxNTg5LCAxNTg1LCA1MjMsIDE1OTAsIDE1ODUsIDUyNCwgCi0gICAgMTU5MSwgMTYwOSwgNTI0LCAxNTkxLCAxNjEwLCA1MjQsIDE1OTMsIDE2MDksIDUyNCwgMTU5MywgMTYxMCwgNTI0LCAxNTk0LCAKLSAgICAxNjA5LCA1MjQsIDE1OTQsIDE2MTAsIDUyNCwgMTU4NywgMTYwOSwgNTI0LCAxNTg3LCAxNjEwLCA1MjQsIDE1ODgsIDE2MDksIAotICAgIDUyNCwgMTU4OCwgMTYxMCwgNTI0LCAxNTgxLCAxNjA5LCA1MjQsIDE1ODEsIDE2MTAsIDUyNCwgMTU4MCwgMTYwOSwgNTI0LCAKLSAgICAxNTgwLCAxNjEwLCA1MjQsIDE1ODIsIDE2MDksIDUyNCwgMTU4MiwgMTYxMCwgNTI0LCAxNTg5LCAxNjA5LCA1MjQsIDE1ODksIAotICAgIDE2MTAsIDUyNCwgMTU5MCwgMTYwOSwgNTI0LCAxNTkwLCAxNjEwLCA1MjQsIDE1ODgsIDE1ODAsIDUyNCwgMTU4OCwgMTU4MSwgCi0gICAgNTI0LCAxNTg4LCAxNTgyLCA1MjQsIDE1ODgsIDE2MDUsIDUyNCwgMTU4OCwgMTU4NSwgNTI0LCAxNTg3LCAxNTg1LCA1MjQsIAotICAgIDE1ODksIDE1ODUsIDUyNCwgMTU5MCwgMTU4NSwgNTI1LCAxNTg4LCAxNTgwLCA1MjUsIDE1ODgsIDE1ODEsIDUyNSwgMTU4OCwgCi0gICAgMTU4MiwgNTI1LCAxNTg4LCAxNjA1LCA1MjUsIDE1ODcsIDE2MDcsIDUyNSwgMTU4OCwgMTYwNywgNTI1LCAxNTkxLCAxNjA1LCAKLSAgICA1MjYsIDE1ODcsIDE1ODAsIDUyNiwgMTU4NywgMTU4MSwgNTI2LCAxNTg3LCAxNTgyLCA1MjYsIDE1ODgsIDE1ODAsIDUyNiwgCi0gICAgMTU4OCwgMTU4MSwgNTI2LCAxNTg4LCAxNTgyLCA1MjYsIDE1OTEsIDE2MDUsIDUyNiwgMTU5MiwgMTYwNSwgNTI0LCAxNTc1LCAKLSAgICAxNjExLCA1MjMsIDE1NzUsIDE2MTEsIDc4MSwgMTU3OCwgMTU4MCwgMTYwNSwgNzgwLCAxNTc4LCAxNTgxLCAxNTgwLCA3ODEsIAotICAgIDE1NzgsIDE1ODEsIDE1ODAsIDc4MSwgMTU3OCwgMTU4MSwgMTYwNSwgNzgxLCAxNTc4LCAxNTgyLCAxNjA1LCA3ODEsIAotICAgIDE1NzgsIDE2MDUsIDE1ODAsIDc4MSwgMTU3OCwgMTYwNSwgMTU4MSwgNzgxLCAxNTc4LCAxNjA1LCAxNTgyLCA3ODAsIAotICAgIDE1ODAsIDE2MDUsIDE1ODEsIDc4MSwgMTU4MCwgMTYwNSwgMTU4MSwgNzgwLCAxNTgxLCAxNjA1LCAxNjEwLCA3ODAsIAotICAgIDE1ODEsIDE2MDUsIDE2MDksIDc4MSwgMTU4NywgMTU4MSwgMTU4MCwgNzgxLCAxNTg3LCAxNTgwLCAxNTgxLCA3ODAsIAotICAgIDE1ODcsIDE1ODAsIDE2MDksIDc4MCwgMTU4NywgMTYwNSwgMTU4MSwgNzgxLCAxNTg3LCAxNjA1LCAxNTgxLCA3ODEsIAotICAgIDE1ODcsIDE2MDUsIDE1ODAsIDc4MCwgMTU4NywgMTYwNSwgMTYwNSwgNzgxLCAxNTg3LCAxNjA1LCAxNjA1LCA3ODAsIAotICAgIDE1ODksIDE1ODEsIDE1ODEsIDc4MSwgMTU4OSwgMTU4MSwgMTU4MSwgNzgwLCAxNTg5LCAxNjA1LCAxNjA1LCA3ODAsIAotICAgIDE1ODgsIDE1ODEsIDE2MDUsIDc4MSwgMTU4OCwgMTU4MSwgMTYwNSwgNzgwLCAxNTg4LCAxNTgwLCAxNjEwLCA3ODAsIAotICAgIDE1ODgsIDE2MDUsIDE1ODIsIDc4MSwgMTU4OCwgMTYwNSwgMTU4MiwgNzgwLCAxNTg4LCAxNjA1LCAxNjA1LCA3ODEsIAotICAgIDE1ODgsIDE2MDUsIDE2MDUsIDc4MCwgMTU5MCwgMTU4MSwgMTYwOSwgNzgwLCAxNTkwLCAxNTgyLCAxNjA1LCA3ODEsIAotICAgIDE1OTAsIDE1ODIsIDE2MDUsIDc4MCwgMTU5MSwgMTYwNSwgMTU4MSwgNzgxLCAxNTkxLCAxNjA1LCAxNTgxLCA3ODEsIAotICAgIDE1OTEsIDE2MDUsIDE2MDUsIDc4MCwgMTU5MSwgMTYwNSwgMTYxMCwgNzgwLCAxNTkzLCAxNTgwLCAxNjA1LCA3ODAsIAotICAgIDE1OTMsIDE2MDUsIDE2MDUsIDc4MSwgMTU5MywgMTYwNSwgMTYwNSwgNzgwLCAxNTkzLCAxNjA1LCAxNjA5LCA3ODAsIAotICAgIDE1OTQsIDE2MDUsIDE2MDUsIDc4MCwgMTU5NCwgMTYwNSwgMTYxMCwgNzgwLCAxNTk0LCAxNjA1LCAxNjA5LCA3ODAsIAotICAgIDE2MDEsIDE1ODIsIDE2MDUsIDc4MSwgMTYwMSwgMTU4MiwgMTYwNSwgNzgwLCAxNjAyLCAxNjA1LCAxNTgxLCA3ODAsIAotICAgIDE2MDIsIDE2MDUsIDE2MDUsIDc4MCwgMTYwNCwgMTU4MSwgMTYwNSwgNzgwLCAxNjA0LCAxNTgxLCAxNjEwLCA3ODAsIAotICAgIDE2MDQsIDE1ODEsIDE2MDksIDc4MSwgMTYwNCwgMTU4MCwgMTU4MCwgNzgwLCAxNjA0LCAxNTgwLCAxNTgwLCA3ODAsIAotICAgIDE2MDQsIDE1ODIsIDE2MDUsIDc4MSwgMTYwNCwgMTU4MiwgMTYwNSwgNzgwLCAxNjA0LCAxNjA1LCAxNTgxLCA3ODEsIAotICAgIDE2MDQsIDE2MDUsIDE1ODEsIDc4MSwgMTYwNSwgMTU4MSwgMTU4MCwgNzgxLCAxNjA1LCAxNTgxLCAxNjA1LCA3ODAsIAotICAgIDE2MDUsIDE1ODEsIDE2MTAsIDc4MSwgMTYwNSwgMTU4MCwgMTU4MSwgNzgxLCAxNjA1LCAxNTgwLCAxNjA1LCA3ODEsIAotICAgIDE2MDUsIDE1ODIsIDE1ODAsIDc4MSwgMTYwNSwgMTU4MiwgMTYwNSwgNzgxLCAxNjA1LCAxNTgwLCAxNTgyLCA3ODEsIAotICAgIDE2MDcsIDE2MDUsIDE1ODAsIDc4MSwgMTYwNywgMTYwNSwgMTYwNSwgNzgxLCAxNjA2LCAxNTgxLCAxNjA1LCA3ODAsIAotICAgIDE2MDYsIDE1ODEsIDE2MDksIDc4MCwgMTYwNiwgMTU4MCwgMTYwNSwgNzgxLCAxNjA2LCAxNTgwLCAxNjA1LCA3ODAsIAotICAgIDE2MDYsIDE1ODAsIDE2MDksIDc4MCwgMTYwNiwgMTYwNSwgMTYxMCwgNzgwLCAxNjA2LCAxNjA1LCAxNjA5LCA3ODAsIAotICAgIDE2MTAsIDE2MDUsIDE2MDUsIDc4MSwgMTYxMCwgMTYwNSwgMTYwNSwgNzgwLCAxNTc2LCAxNTgyLCAxNjEwLCA3ODAsIAotICAgIDE1NzgsIDE1ODAsIDE2MTAsIDc4MCwgMTU3OCwgMTU4MCwgMTYwOSwgNzgwLCAxNTc4LCAxNTgyLCAxNjEwLCA3ODAsIAotICAgIDE1NzgsIDE1ODIsIDE2MDksIDc4MCwgMTU3OCwgMTYwNSwgMTYxMCwgNzgwLCAxNTc4LCAxNjA1LCAxNjA5LCA3ODAsIAotICAgIDE1ODAsIDE2MDUsIDE2MTAsIDc4MCwgMTU4MCwgMTU4MSwgMTYwOSwgNzgwLCAxNTgwLCAxNjA1LCAxNjA5LCA3ODAsIAotICAgIDE1ODcsIDE1ODIsIDE2MDksIDc4MCwgMTU4OSwgMTU4MSwgMTYxMCwgNzgwLCAxNTg4LCAxNTgxLCAxNjEwLCA3ODAsIAotICAgIDE1OTAsIDE1ODEsIDE2MTAsIDc4MCwgMTYwNCwgMTU4MCwgMTYxMCwgNzgwLCAxNjA0LCAxNjA1LCAxNjEwLCA3ODAsIAotICAgIDE2MTAsIDE1ODEsIDE2MTAsIDc4MCwgMTYxMCwgMTU4MCwgMTYxMCwgNzgwLCAxNjEwLCAxNjA1LCAxNjEwLCA3ODAsIAotICAgIDE2MDUsIDE2MDUsIDE2MTAsIDc4MCwgMTYwMiwgMTYwNSwgMTYxMCwgNzgwLCAxNjA2LCAxNTgxLCAxNjEwLCA3ODEsIAotICAgIDE2MDIsIDE2MDUsIDE1ODEsIDc4MSwgMTYwNCwgMTU4MSwgMTYwNSwgNzgwLCAxNTkzLCAxNjA1LCAxNjEwLCA3ODAsIAotICAgIDE2MDMsIDE2MDUsIDE2MTAsIDc4MSwgMTYwNiwgMTU4MCwgMTU4MSwgNzgwLCAxNjA1LCAxNTgyLCAxNjEwLCA3ODEsIAotICAgIDE2MDQsIDE1ODAsIDE2MDUsIDc4MCwgMTYwMywgMTYwNSwgMTYwNSwgNzgwLCAxNjA0LCAxNTgwLCAxNjA1LCA3ODAsIAotICAgIDE2MDYsIDE1ODAsIDE1ODEsIDc4MCwgMTU4MCwgMTU4MSwgMTYxMCwgNzgwLCAxNTgxLCAxNTgwLCAxNjEwLCA3ODAsIAotICAgIDE2MDUsIDE1ODAsIDE2MTAsIDc4MCwgMTYwMSwgMTYwNSwgMTYxMCwgNzgwLCAxNTc2LCAxNTgxLCAxNjEwLCA3ODEsIAotICAgIDE2MDMsIDE2MDUsIDE2MDUsIDc4MSwgMTU5MywgMTU4MCwgMTYwNSwgNzgxLCAxNTg5LCAxNjA1LCAxNjA1LCA3ODAsIAotICAgIDE1ODcsIDE1ODIsIDE2MTAsIDc4MCwgMTYwNiwgMTU4MCwgMTYxMCwgNzc5LCAxNTg5LCAxNjA0LCAxNzQ2LCA3NzksIAotICAgIDE2MDIsIDE2MDQsIDE3NDYsIDEwMzUsIDE1NzUsIDE2MDQsIDE2MDQsIDE2MDcsIDEwMzUsIDE1NzUsIDE2MDMsIDE1NzYsIAotICAgIDE1ODUsIDEwMzUsIDE2MDUsIDE1ODEsIDE2MDUsIDE1ODMsIDEwMzUsIDE1ODksIDE2MDQsIDE1OTMsIDE2MDUsIDEwMzUsIAotICAgIDE1ODUsIDE1ODcsIDE2MDgsIDE2MDQsIDEwMzUsIDE1OTMsIDE2MDQsIDE2MTAsIDE2MDcsIDEwMzUsIDE2MDgsIDE1ODcsIAotICAgIDE2MDQsIDE2MDUsIDc3OSwgMTU4OSwgMTYwNCwgMTYwOSwgNDYxOSwgMTU4OSwgMTYwNCwgMTYwOSwgMzIsIDE1NzUsIAotICAgIDE2MDQsIDE2MDQsIDE2MDcsIDMyLCAxNTkzLCAxNjA0LCAxNjEwLCAxNjA3LCAzMiwgMTYwOCwgMTU4NywgMTYwNCwgMTYwNSwgCi0gICAgMjA1OSwgMTU4MCwgMTYwNCwgMzIsIDE1ODAsIDE2MDQsIDE1NzUsIDE2MDQsIDE2MDcsIDEwMzUsIDE1ODUsIDE3NDAsIAotICAgIDE1NzUsIDE2MDQsIDI2NSwgNDQsIDI2NSwgMTIyODksIDI2NSwgMTIyOTAsIDI2NSwgNTgsIDI2NSwgNTksIDI2NSwgMzMsIAotICAgIDI2NSwgNjMsIDI2NSwgMTIzMTAsIDI2NSwgMTIzMTEsIDI2NSwgODIzMCwgMjY1LCA4MjI5LCAyNjUsIDgyMTIsIDI2NSwgCi0gICAgODIxMSwgMjY1LCA5NSwgMjY1LCA5NSwgMjY1LCA0MCwgMjY1LCA0MSwgMjY1LCAxMjMsIDI2NSwgMTI1LCAyNjUsIDEyMzA4LCAKLSAgICAyNjUsIDEyMzA5LCAyNjUsIDEyMzA0LCAyNjUsIDEyMzA1LCAyNjUsIDEyMjk4LCAyNjUsIDEyMjk5LCAyNjUsIDEyMjk2LCAKLSAgICAyNjUsIDEyMjk3LCAyNjUsIDEyMzAwLCAyNjUsIDEyMzAxLCAyNjUsIDEyMzAyLCAyNjUsIDEyMzAzLCAyNjUsIDkxLCAyNjUsIAotICAgIDkzLCAyNTgsIDgyNTQsIDI1OCwgODI1NCwgMjU4LCA4MjU0LCAyNTgsIDgyNTQsIDI1OCwgOTUsIDI1OCwgOTUsIDI1OCwgCi0gICAgOTUsIDI3MSwgNDQsIDI3MSwgMTIyODksIDI3MSwgNDYsIDI3MSwgNTksIDI3MSwgNTgsIDI3MSwgNjMsIDI3MSwgMzMsIAotICAgIDI3MSwgODIxMiwgMjcxLCA0MCwgMjcxLCA0MSwgMjcxLCAxMjMsIDI3MSwgMTI1LCAyNzEsIDEyMzA4LCAyNzEsIDEyMzA5LCAKLSAgICAyNzEsIDM1LCAyNzEsIDM4LCAyNzEsIDQyLCAyNzEsIDQzLCAyNzEsIDQ1LCAyNzEsIDYwLCAyNzEsIDYyLCAyNzEsIDYxLCAKLSAgICAyNzEsIDkyLCAyNzEsIDM2LCAyNzEsIDM3LCAyNzEsIDY0LCA1MjMsIDMyLCAxNjExLCA1MjYsIDE2MDAsIDE2MTEsIDUyMywgCi0gICAgMzIsIDE2MTIsIDUyMywgMzIsIDE2MTMsIDUyMywgMzIsIDE2MTQsIDUyNiwgMTYwMCwgMTYxNCwgNTIzLCAzMiwgMTYxNSwgCi0gICAgNTI2LCAxNjAwLCAxNjE1LCA1MjMsIDMyLCAxNjE2LCA1MjYsIDE2MDAsIDE2MTYsIDUyMywgMzIsIDE2MTcsIDUyNiwgCi0gICAgMTYwMCwgMTYxNywgNTIzLCAzMiwgMTYxOCwgNTI2LCAxNjAwLCAxNjE4LCAyNjcsIDE1NjksIDI2NywgMTU3MCwgMjY4LCAKLSAgICAxNTcwLCAyNjcsIDE1NzEsIDI2OCwgMTU3MSwgMjY3LCAxNTcyLCAyNjgsIDE1NzIsIDI2NywgMTU3MywgMjY4LCAxNTczLCAKLSAgICAyNjcsIDE1NzQsIDI2OCwgMTU3NCwgMjY5LCAxNTc0LCAyNzAsIDE1NzQsIDI2NywgMTU3NSwgMjY4LCAxNTc1LCAyNjcsIAotICAgIDE1NzYsIDI2OCwgMTU3NiwgMjY5LCAxNTc2LCAyNzAsIDE1NzYsIDI2NywgMTU3NywgMjY4LCAxNTc3LCAyNjcsIDE1NzgsIAotICAgIDI2OCwgMTU3OCwgMjY5LCAxNTc4LCAyNzAsIDE1NzgsIDI2NywgMTU3OSwgMjY4LCAxNTc5LCAyNjksIDE1NzksIDI3MCwgCi0gICAgMTU3OSwgMjY3LCAxNTgwLCAyNjgsIDE1ODAsIDI2OSwgMTU4MCwgMjcwLCAxNTgwLCAyNjcsIDE1ODEsIDI2OCwgMTU4MSwgCi0gICAgMjY5LCAxNTgxLCAyNzAsIDE1ODEsIDI2NywgMTU4MiwgMjY4LCAxNTgyLCAyNjksIDE1ODIsIDI3MCwgMTU4MiwgMjY3LCAKLSAgICAxNTgzLCAyNjgsIDE1ODMsIDI2NywgMTU4NCwgMjY4LCAxNTg0LCAyNjcsIDE1ODUsIDI2OCwgMTU4NSwgMjY3LCAxNTg2LCAKLSAgICAyNjgsIDE1ODYsIDI2NywgMTU4NywgMjY4LCAxNTg3LCAyNjksIDE1ODcsIDI3MCwgMTU4NywgMjY3LCAxNTg4LCAyNjgsIAotICAgIDE1ODgsIDI2OSwgMTU4OCwgMjcwLCAxNTg4LCAyNjcsIDE1ODksIDI2OCwgMTU4OSwgMjY5LCAxNTg5LCAyNzAsIDE1ODksIAotICAgIDI2NywgMTU5MCwgMjY4LCAxNTkwLCAyNjksIDE1OTAsIDI3MCwgMTU5MCwgMjY3LCAxNTkxLCAyNjgsIDE1OTEsIDI2OSwgCi0gICAgMTU5MSwgMjcwLCAxNTkxLCAyNjcsIDE1OTIsIDI2OCwgMTU5MiwgMjY5LCAxNTkyLCAyNzAsIDE1OTIsIDI2NywgMTU5MywgCi0gICAgMjY4LCAxNTkzLCAyNjksIDE1OTMsIDI3MCwgMTU5MywgMjY3LCAxNTk0LCAyNjgsIDE1OTQsIDI2OSwgMTU5NCwgMjcwLCAKLSAgICAxNTk0LCAyNjcsIDE2MDEsIDI2OCwgMTYwMSwgMjY5LCAxNjAxLCAyNzAsIDE2MDEsIDI2NywgMTYwMiwgMjY4LCAxNjAyLCAKLSAgICAyNjksIDE2MDIsIDI3MCwgMTYwMiwgMjY3LCAxNjAzLCAyNjgsIDE2MDMsIDI2OSwgMTYwMywgMjcwLCAxNjAzLCAyNjcsIAotICAgIDE2MDQsIDI2OCwgMTYwNCwgMjY5LCAxNjA0LCAyNzAsIDE2MDQsIDI2NywgMTYwNSwgMjY4LCAxNjA1LCAyNjksIDE2MDUsIAotICAgIDI3MCwgMTYwNSwgMjY3LCAxNjA2LCAyNjgsIDE2MDYsIDI2OSwgMTYwNiwgMjcwLCAxNjA2LCAyNjcsIDE2MDcsIDI2OCwgCi0gICAgMTYwNywgMjY5LCAxNjA3LCAyNzAsIDE2MDcsIDI2NywgMTYwOCwgMjY4LCAxNjA4LCAyNjcsIDE2MDksIDI2OCwgMTYwOSwgCi0gICAgMjY3LCAxNjEwLCAyNjgsIDE2MTAsIDI2OSwgMTYxMCwgMjcwLCAxNjEwLCA1MjMsIDE2MDQsIDE1NzAsIDUyNCwgMTYwNCwgCi0gICAgMTU3MCwgNTIzLCAxNjA0LCAxNTcxLCA1MjQsIDE2MDQsIDE1NzEsIDUyMywgMTYwNCwgMTU3MywgNTI0LCAxNjA0LCAxNTczLCAKLSAgICA1MjMsIDE2MDQsIDE1NzUsIDUyNCwgMTYwNCwgMTU3NSwgMjY0LCAzMywgMjY0LCAzNCwgMjY0LCAzNSwgMjY0LCAzNiwgCi0gICAgMjY0LCAzNywgMjY0LCAzOCwgMjY0LCAzOSwgMjY0LCA0MCwgMjY0LCA0MSwgMjY0LCA0MiwgMjY0LCA0MywgMjY0LCA0NCwgCi0gICAgMjY0LCA0NSwgMjY0LCA0NiwgMjY0LCA0NywgMjY0LCA0OCwgMjY0LCA0OSwgMjY0LCA1MCwgMjY0LCA1MSwgMjY0LCA1MiwgCi0gICAgMjY0LCA1MywgMjY0LCA1NCwgMjY0LCA1NSwgMjY0LCA1NiwgMjY0LCA1NywgMjY0LCA1OCwgMjY0LCA1OSwgMjY0LCA2MCwgCi0gICAgMjY0LCA2MSwgMjY0LCA2MiwgMjY0LCA2MywgMjY0LCA2NCwgMjY0LCA2NSwgMjY0LCA2NiwgMjY0LCA2NywgMjY0LCA2OCwgCi0gICAgMjY0LCA2OSwgMjY0LCA3MCwgMjY0LCA3MSwgMjY0LCA3MiwgMjY0LCA3MywgMjY0LCA3NCwgMjY0LCA3NSwgMjY0LCA3NiwgCi0gICAgMjY0LCA3NywgMjY0LCA3OCwgMjY0LCA3OSwgMjY0LCA4MCwgMjY0LCA4MSwgMjY0LCA4MiwgMjY0LCA4MywgMjY0LCA4NCwgCi0gICAgMjY0LCA4NSwgMjY0LCA4NiwgMjY0LCA4NywgMjY0LCA4OCwgMjY0LCA4OSwgMjY0LCA5MCwgMjY0LCA5MSwgMjY0LCA5MiwgCi0gICAgMjY0LCA5MywgMjY0LCA5NCwgMjY0LCA5NSwgMjY0LCA5NiwgMjY0LCA5NywgMjY0LCA5OCwgMjY0LCA5OSwgMjY0LCAxMDAsIAotICAgIDI2NCwgMTAxLCAyNjQsIDEwMiwgMjY0LCAxMDMsIDI2NCwgMTA0LCAyNjQsIDEwNSwgMjY0LCAxMDYsIDI2NCwgMTA3LCAKLSAgICAyNjQsIDEwOCwgMjY0LCAxMDksIDI2NCwgMTEwLCAyNjQsIDExMSwgMjY0LCAxMTIsIDI2NCwgMTEzLCAyNjQsIDExNCwgCi0gICAgMjY0LCAxMTUsIDI2NCwgMTE2LCAyNjQsIDExNywgMjY0LCAxMTgsIDI2NCwgMTE5LCAyNjQsIDEyMCwgMjY0LCAxMjEsIAotICAgIDI2NCwgMTIyLCAyNjQsIDEyMywgMjY0LCAxMjQsIDI2NCwgMTI1LCAyNjQsIDEyNiwgMjY0LCAxMDYyOSwgMjY0LCAxMDYzMCwgCi0gICAgMjcyLCAxMjI5MCwgMjcyLCAxMjMwMCwgMjcyLCAxMjMwMSwgMjcyLCAxMjI4OSwgMjcyLCAxMjUzOSwgMjcyLCAxMjUzMCwgCi0gICAgMjcyLCAxMjQ0OSwgMjcyLCAxMjQ1MSwgMjcyLCAxMjQ1MywgMjcyLCAxMjQ1NSwgMjcyLCAxMjQ1NywgMjcyLCAxMjUxNSwgCi0gICAgMjcyLCAxMjUxNywgMjcyLCAxMjUxOSwgMjcyLCAxMjQ4MywgMjcyLCAxMjU0MCwgMjcyLCAxMjQ1MCwgMjcyLCAxMjQ1MiwgCi0gICAgMjcyLCAxMjQ1NCwgMjcyLCAxMjQ1NiwgMjcyLCAxMjQ1OCwgMjcyLCAxMjQ1OSwgMjcyLCAxMjQ2MSwgMjcyLCAxMjQ2MywgCi0gICAgMjcyLCAxMjQ2NSwgMjcyLCAxMjQ2NywgMjcyLCAxMjQ2OSwgMjcyLCAxMjQ3MSwgMjcyLCAxMjQ3MywgMjcyLCAxMjQ3NSwgCi0gICAgMjcyLCAxMjQ3NywgMjcyLCAxMjQ3OSwgMjcyLCAxMjQ4MSwgMjcyLCAxMjQ4NCwgMjcyLCAxMjQ4NiwgMjcyLCAxMjQ4OCwgCi0gICAgMjcyLCAxMjQ5MCwgMjcyLCAxMjQ5MSwgMjcyLCAxMjQ5MiwgMjcyLCAxMjQ5MywgMjcyLCAxMjQ5NCwgMjcyLCAxMjQ5NSwgCi0gICAgMjcyLCAxMjQ5OCwgMjcyLCAxMjUwMSwgMjcyLCAxMjUwNCwgMjcyLCAxMjUwNywgMjcyLCAxMjUxMCwgMjcyLCAxMjUxMSwgCi0gICAgMjcyLCAxMjUxMiwgMjcyLCAxMjUxMywgMjcyLCAxMjUxNCwgMjcyLCAxMjUxNiwgMjcyLCAxMjUxOCwgMjcyLCAxMjUyMCwgCi0gICAgMjcyLCAxMjUyMSwgMjcyLCAxMjUyMiwgMjcyLCAxMjUyMywgMjcyLCAxMjUyNCwgMjcyLCAxMjUyNSwgMjcyLCAxMjUyNywgCi0gICAgMjcyLCAxMjUzMSwgMjcyLCAxMjQ0MSwgMjcyLCAxMjQ0MiwgMjcyLCAxMjY0NCwgMjcyLCAxMjU5MywgMjcyLCAxMjU5NCwgCi0gICAgMjcyLCAxMjU5NSwgMjcyLCAxMjU5NiwgMjcyLCAxMjU5NywgMjcyLCAxMjU5OCwgMjcyLCAxMjU5OSwgMjcyLCAxMjYwMCwgCi0gICAgMjcyLCAxMjYwMSwgMjcyLCAxMjYwMiwgMjcyLCAxMjYwMywgMjcyLCAxMjYwNCwgMjcyLCAxMjYwNSwgMjcyLCAxMjYwNiwgCi0gICAgMjcyLCAxMjYwNywgMjcyLCAxMjYwOCwgMjcyLCAxMjYwOSwgMjcyLCAxMjYxMCwgMjcyLCAxMjYxMSwgMjcyLCAxMjYxMiwgCi0gICAgMjcyLCAxMjYxMywgMjcyLCAxMjYxNCwgMjcyLCAxMjYxNSwgMjcyLCAxMjYxNiwgMjcyLCAxMjYxNywgMjcyLCAxMjYxOCwgCi0gICAgMjcyLCAxMjYxOSwgMjcyLCAxMjYyMCwgMjcyLCAxMjYyMSwgMjcyLCAxMjYyMiwgMjcyLCAxMjYyMywgMjcyLCAxMjYyNCwgCi0gICAgMjcyLCAxMjYyNSwgMjcyLCAxMjYyNiwgMjcyLCAxMjYyNywgMjcyLCAxMjYyOCwgMjcyLCAxMjYyOSwgMjcyLCAxMjYzMCwgCi0gICAgMjcyLCAxMjYzMSwgMjcyLCAxMjYzMiwgMjcyLCAxMjYzMywgMjcyLCAxMjYzNCwgMjcyLCAxMjYzNSwgMjcyLCAxMjYzNiwgCi0gICAgMjcyLCAxMjYzNywgMjcyLCAxMjYzOCwgMjcyLCAxMjYzOSwgMjcyLCAxMjY0MCwgMjcyLCAxMjY0MSwgMjcyLCAxMjY0MiwgCi0gICAgMjcyLCAxMjY0MywgMjY0LCAxNjIsIDI2NCwgMTYzLCAyNjQsIDE3MiwgMjY0LCAxNzUsIDI2NCwgMTY2LCAyNjQsIDE2NSwgCi0gICAgMjY0LCA4MzYxLCAyNzIsIDk0NzQsIDI3MiwgODU5MiwgMjcyLCA4NTkzLCAyNzIsIDg1OTQsIDI3MiwgODU5NSwgMjcyLCAKLSAgICA5NjMyLCAyNzIsIDk2NzUsIDUxMiwgMTE5MTI3LCAxMTkxNDEsIDUxMiwgMTE5MTI4LCAxMTkxNDEsIDUxMiwgMTE5MTM1LCAKKyAgICA4MjYwLCA1NSwgNzcyLCA0OSwgODI2MCwgNTcsIDEwMjgsIDQ5LCA4MjYwLCA0OSwgNDgsIDc3MiwgNDksIDgyNjAsIDUxLCAKKyAgICA3NzIsIDUwLCA4MjYwLCA1MSwgNzcyLCA0OSwgODI2MCwgNTMsIDc3MiwgNTAsIDgyNjAsIDUzLCA3NzIsIDUxLCA4MjYwLCAKKyAgICA1MywgNzcyLCA1MiwgODI2MCwgNTMsIDc3MiwgNDksIDgyNjAsIDU0LCA3NzIsIDUzLCA4MjYwLCA1NCwgNzcyLCA0OSwgCisgICAgODI2MCwgNTYsIDc3MiwgNTEsIDgyNjAsIDU2LCA3NzIsIDUzLCA4MjYwLCA1NiwgNzcyLCA1NSwgODI2MCwgNTYsIDUxNiwgCisgICAgNDksIDgyNjAsIDI1OCwgNzMsIDUxNCwgNzMsIDczLCA3NzAsIDczLCA3MywgNzMsIDUxNCwgNzMsIDg2LCAyNTgsIDg2LCAKKyAgICA1MTQsIDg2LCA3MywgNzcwLCA4NiwgNzMsIDczLCAxMDI2LCA4NiwgNzMsIDczLCA3MywgNTE0LCA3MywgODgsIDI1OCwgODgsIAorICAgIDUxNCwgODgsIDczLCA3NzAsIDg4LCA3MywgNzMsIDI1OCwgNzYsIDI1OCwgNjcsIDI1OCwgNjgsIDI1OCwgNzcsIDI1OCwgCisgICAgMTA1LCA1MTQsIDEwNSwgMTA1LCA3NzAsIDEwNSwgMTA1LCAxMDUsIDUxNCwgMTA1LCAxMTgsIDI1OCwgMTE4LCA1MTQsIAorICAgIDExOCwgMTA1LCA3NzAsIDExOCwgMTA1LCAxMDUsIDEwMjYsIDExOCwgMTA1LCAxMDUsIDEwNSwgNTE0LCAxMDUsIDEyMCwgCisgICAgMjU4LCAxMjAsIDUxNCwgMTIwLCAxMDUsIDc3MCwgMTIwLCAxMDUsIDEwNSwgMjU4LCAxMDgsIDI1OCwgOTksIDI1OCwgMTAwLCAKKyAgICAyNTgsIDEwOSwgNzcyLCA0OCwgODI2MCwgNTEsIDUxMiwgODU5MiwgODI0LCA1MTIsIDg1OTQsIDgyNCwgNTEyLCA4NTk2LCAKKyAgICA4MjQsIDUxMiwgODY1NiwgODI0LCA1MTIsIDg2NjAsIDgyNCwgNTEyLCA4NjU4LCA4MjQsIDUxMiwgODcwNywgODI0LCA1MTIsIAorICAgIDg3MTIsIDgyNCwgNTEyLCA4NzE1LCA4MjQsIDUxMiwgODczOSwgODI0LCA1MTIsIDg3NDEsIDgyNCwgNTE0LCA4NzQ3LCAKKyAgICA4NzQ3LCA3NzAsIDg3NDcsIDg3NDcsIDg3NDcsIDUxNCwgODc1MCwgODc1MCwgNzcwLCA4NzUwLCA4NzUwLCA4NzUwLCA1MTIsIAorICAgIDg3NjQsIDgyNCwgNTEyLCA4NzcxLCA4MjQsIDUxMiwgODc3MywgODI0LCA1MTIsIDg3NzYsIDgyNCwgNTEyLCA2MSwgODI0LCAKKyAgICA1MTIsIDg4MDEsIDgyNCwgNTEyLCA4NzgxLCA4MjQsIDUxMiwgNjAsIDgyNCwgNTEyLCA2MiwgODI0LCA1MTIsIDg4MDQsIAorICAgIDgyNCwgNTEyLCA4ODA1LCA4MjQsIDUxMiwgODgxOCwgODI0LCA1MTIsIDg4MTksIDgyNCwgNTEyLCA4ODIyLCA4MjQsIDUxMiwgCisgICAgODgyMywgODI0LCA1MTIsIDg4MjYsIDgyNCwgNTEyLCA4ODI3LCA4MjQsIDUxMiwgODgzNCwgODI0LCA1MTIsIDg4MzUsIAorICAgIDgyNCwgNTEyLCA4ODM4LCA4MjQsIDUxMiwgODgzOSwgODI0LCA1MTIsIDg4NjYsIDgyNCwgNTEyLCA4ODcyLCA4MjQsIDUxMiwgCisgICAgODg3MywgODI0LCA1MTIsIDg4NzUsIDgyNCwgNTEyLCA4ODI4LCA4MjQsIDUxMiwgODgyOSwgODI0LCA1MTIsIDg4NDksIAorICAgIDgyNCwgNTEyLCA4ODUwLCA4MjQsIDUxMiwgODg4MiwgODI0LCA1MTIsIDg4ODMsIDgyNCwgNTEyLCA4ODg0LCA4MjQsIDUxMiwgCisgICAgODg4NSwgODI0LCAyNTYsIDEyMjk2LCAyNTYsIDEyMjk3LCAyNjMsIDQ5LCAyNjMsIDUwLCAyNjMsIDUxLCAyNjMsIDUyLCAKKyAgICAyNjMsIDUzLCAyNjMsIDU0LCAyNjMsIDU1LCAyNjMsIDU2LCAyNjMsIDU3LCA1MTksIDQ5LCA0OCwgNTE5LCA0OSwgNDksIAorICAgIDUxOSwgNDksIDUwLCA1MTksIDQ5LCA1MSwgNTE5LCA0OSwgNTIsIDUxOSwgNDksIDUzLCA1MTksIDQ5LCA1NCwgNTE5LCA0OSwgCisgICAgNTUsIDUxOSwgNDksIDU2LCA1MTksIDQ5LCA1NywgNTE5LCA1MCwgNDgsIDc3MCwgNDAsIDQ5LCA0MSwgNzcwLCA0MCwgNTAsIAorICAgIDQxLCA3NzAsIDQwLCA1MSwgNDEsIDc3MCwgNDAsIDUyLCA0MSwgNzcwLCA0MCwgNTMsIDQxLCA3NzAsIDQwLCA1NCwgNDEsIAorICAgIDc3MCwgNDAsIDU1LCA0MSwgNzcwLCA0MCwgNTYsIDQxLCA3NzAsIDQwLCA1NywgNDEsIDEwMjYsIDQwLCA0OSwgNDgsIDQxLCAKKyAgICAxMDI2LCA0MCwgNDksIDQ5LCA0MSwgMTAyNiwgNDAsIDQ5LCA1MCwgNDEsIDEwMjYsIDQwLCA0OSwgNTEsIDQxLCAxMDI2LCAKKyAgICA0MCwgNDksIDUyLCA0MSwgMTAyNiwgNDAsIDQ5LCA1MywgNDEsIDEwMjYsIDQwLCA0OSwgNTQsIDQxLCAxMDI2LCA0MCwgNDksIAorICAgIDU1LCA0MSwgMTAyNiwgNDAsIDQ5LCA1NiwgNDEsIDEwMjYsIDQwLCA0OSwgNTcsIDQxLCAxMDI2LCA0MCwgNTAsIDQ4LCA0MSwgCisgICAgNTE0LCA0OSwgNDYsIDUxNCwgNTAsIDQ2LCA1MTQsIDUxLCA0NiwgNTE0LCA1MiwgNDYsIDUxNCwgNTMsIDQ2LCA1MTQsIDU0LCAKKyAgICA0NiwgNTE0LCA1NSwgNDYsIDUxNCwgNTYsIDQ2LCA1MTQsIDU3LCA0NiwgNzcwLCA0OSwgNDgsIDQ2LCA3NzAsIDQ5LCA0OSwgCisgICAgNDYsIDc3MCwgNDksIDUwLCA0NiwgNzcwLCA0OSwgNTEsIDQ2LCA3NzAsIDQ5LCA1MiwgNDYsIDc3MCwgNDksIDUzLCA0NiwgCisgICAgNzcwLCA0OSwgNTQsIDQ2LCA3NzAsIDQ5LCA1NSwgNDYsIDc3MCwgNDksIDU2LCA0NiwgNzcwLCA0OSwgNTcsIDQ2LCA3NzAsIAorICAgIDUwLCA0OCwgNDYsIDc3MCwgNDAsIDk3LCA0MSwgNzcwLCA0MCwgOTgsIDQxLCA3NzAsIDQwLCA5OSwgNDEsIDc3MCwgNDAsIAorICAgIDEwMCwgNDEsIDc3MCwgNDAsIDEwMSwgNDEsIDc3MCwgNDAsIDEwMiwgNDEsIDc3MCwgNDAsIDEwMywgNDEsIDc3MCwgNDAsIAorICAgIDEwNCwgNDEsIDc3MCwgNDAsIDEwNSwgNDEsIDc3MCwgNDAsIDEwNiwgNDEsIDc3MCwgNDAsIDEwNywgNDEsIDc3MCwgNDAsIAorICAgIDEwOCwgNDEsIDc3MCwgNDAsIDEwOSwgNDEsIDc3MCwgNDAsIDExMCwgNDEsIDc3MCwgNDAsIDExMSwgNDEsIDc3MCwgNDAsIAorICAgIDExMiwgNDEsIDc3MCwgNDAsIDExMywgNDEsIDc3MCwgNDAsIDExNCwgNDEsIDc3MCwgNDAsIDExNSwgNDEsIDc3MCwgNDAsIAorICAgIDExNiwgNDEsIDc3MCwgNDAsIDExNywgNDEsIDc3MCwgNDAsIDExOCwgNDEsIDc3MCwgNDAsIDExOSwgNDEsIDc3MCwgNDAsIAorICAgIDEyMCwgNDEsIDc3MCwgNDAsIDEyMSwgNDEsIDc3MCwgNDAsIDEyMiwgNDEsIDI2MywgNjUsIDI2MywgNjYsIDI2MywgNjcsIAorICAgIDI2MywgNjgsIDI2MywgNjksIDI2MywgNzAsIDI2MywgNzEsIDI2MywgNzIsIDI2MywgNzMsIDI2MywgNzQsIDI2MywgNzUsIAorICAgIDI2MywgNzYsIDI2MywgNzcsIDI2MywgNzgsIDI2MywgNzksIDI2MywgODAsIDI2MywgODEsIDI2MywgODIsIDI2MywgODMsIAorICAgIDI2MywgODQsIDI2MywgODUsIDI2MywgODYsIDI2MywgODcsIDI2MywgODgsIDI2MywgODksIDI2MywgOTAsIDI2MywgOTcsIAorICAgIDI2MywgOTgsIDI2MywgOTksIDI2MywgMTAwLCAyNjMsIDEwMSwgMjYzLCAxMDIsIDI2MywgMTAzLCAyNjMsIDEwNCwgMjYzLCAKKyAgICAxMDUsIDI2MywgMTA2LCAyNjMsIDEwNywgMjYzLCAxMDgsIDI2MywgMTA5LCAyNjMsIDExMCwgMjYzLCAxMTEsIDI2MywgCisgICAgMTEyLCAyNjMsIDExMywgMjYzLCAxMTQsIDI2MywgMTE1LCAyNjMsIDExNiwgMjYzLCAxMTcsIDI2MywgMTE4LCAyNjMsIAorICAgIDExOSwgMjYzLCAxMjAsIDI2MywgMTIxLCAyNjMsIDEyMiwgMjYzLCA0OCwgMTAyNiwgODc0NywgODc0NywgODc0NywgODc0NywgCisgICAgNzcwLCA1OCwgNTgsIDYxLCA1MTQsIDYxLCA2MSwgNzcwLCA2MSwgNjEsIDYxLCA1MTIsIDEwOTczLCA4MjQsIDI2MSwgMTA2LCAKKyAgICAyNTksIDg2LCAyNTksIDExNjE3LCAyNTgsIDI3NTk3LCAyNTgsIDQwODYzLCAyNTgsIDE5OTY4LCAyNTgsIDIwMDA4LCAyNTgsIAorICAgIDIwMDIyLCAyNTgsIDIwMDMxLCAyNTgsIDIwMDU3LCAyNTgsIDIwMTAxLCAyNTgsIDIwMTA4LCAyNTgsIDIwMTI4LCAyNTgsIAorICAgIDIwMTU0LCAyNTgsIDIwNzk5LCAyNTgsIDIwODM3LCAyNTgsIDIwODQzLCAyNTgsIDIwODY2LCAyNTgsIDIwODg2LCAyNTgsIAorICAgIDIwOTA3LCAyNTgsIDIwOTYwLCAyNTgsIDIwOTgxLCAyNTgsIDIwOTkyLCAyNTgsIDIxMTQ3LCAyNTgsIDIxMjQxLCAyNTgsIAorICAgIDIxMjY5LCAyNTgsIDIxMjc0LCAyNTgsIDIxMzA0LCAyNTgsIDIxMzEzLCAyNTgsIDIxMzQwLCAyNTgsIDIxMzUzLCAyNTgsIAorICAgIDIxMzc4LCAyNTgsIDIxNDMwLCAyNTgsIDIxNDQ4LCAyNTgsIDIxNDc1LCAyNTgsIDIyMjMxLCAyNTgsIDIyMzAzLCAyNTgsIAorICAgIDIyNzYzLCAyNTgsIDIyNzg2LCAyNTgsIDIyNzk0LCAyNTgsIDIyODA1LCAyNTgsIDIyODIzLCAyNTgsIDIyODk5LCAyNTgsIAorICAgIDIzMzc2LCAyNTgsIDIzNDI0LCAyNTgsIDIzNTQ0LCAyNTgsIDIzNTY3LCAyNTgsIDIzNTg2LCAyNTgsIDIzNjA4LCAyNTgsIAorICAgIDIzNjYyLCAyNTgsIDIzNjY1LCAyNTgsIDI0MDI3LCAyNTgsIDI0MDM3LCAyNTgsIDI0MDQ5LCAyNTgsIDI0MDYyLCAyNTgsIAorICAgIDI0MTc4LCAyNTgsIDI0MTg2LCAyNTgsIDI0MTkxLCAyNTgsIDI0MzA4LCAyNTgsIDI0MzE4LCAyNTgsIDI0MzMxLCAyNTgsIAorICAgIDI0MzM5LCAyNTgsIDI0NDAwLCAyNTgsIDI0NDE3LCAyNTgsIDI0NDM1LCAyNTgsIDI0NTE1LCAyNTgsIDI1MDk2LCAyNTgsIAorICAgIDI1MTQyLCAyNTgsIDI1MTYzLCAyNTgsIDI1OTAzLCAyNTgsIDI1OTA4LCAyNTgsIDI1OTkxLCAyNTgsIDI2MDA3LCAyNTgsIAorICAgIDI2MDIwLCAyNTgsIDI2MDQxLCAyNTgsIDI2MDgwLCAyNTgsIDI2MDg1LCAyNTgsIDI2MzUyLCAyNTgsIDI2Mzc2LCAyNTgsIAorICAgIDI2NDA4LCAyNTgsIDI3NDI0LCAyNTgsIDI3NDkwLCAyNTgsIDI3NTEzLCAyNTgsIDI3NTcxLCAyNTgsIDI3NTk1LCAyNTgsIAorICAgIDI3NjA0LCAyNTgsIDI3NjExLCAyNTgsIDI3NjYzLCAyNTgsIDI3NjY4LCAyNTgsIDI3NzAwLCAyNTgsIDI4Nzc5LCAyNTgsIAorICAgIDI5MjI2LCAyNTgsIDI5MjM4LCAyNTgsIDI5MjQzLCAyNTgsIDI5MjQ3LCAyNTgsIDI5MjU1LCAyNTgsIDI5MjczLCAyNTgsIAorICAgIDI5Mjc1LCAyNTgsIDI5MzU2LCAyNTgsIDI5NTcyLCAyNTgsIDI5NTc3LCAyNTgsIDI5OTE2LCAyNTgsIDI5OTI2LCAyNTgsIAorICAgIDI5OTc2LCAyNTgsIDI5OTgzLCAyNTgsIDI5OTkyLCAyNTgsIDMwMDAwLCAyNTgsIDMwMDkxLCAyNTgsIDMwMDk4LCAyNTgsIAorICAgIDMwMzI2LCAyNTgsIDMwMzMzLCAyNTgsIDMwMzgyLCAyNTgsIDMwMzk5LCAyNTgsIDMwNDQ2LCAyNTgsIDMwNjgzLCAyNTgsIAorICAgIDMwNjkwLCAyNTgsIDMwNzA3LCAyNTgsIDMxMDM0LCAyNTgsIDMxMTYwLCAyNTgsIDMxMTY2LCAyNTgsIDMxMzQ4LCAyNTgsIAorICAgIDMxNDM1LCAyNTgsIDMxNDgxLCAyNTgsIDMxODU5LCAyNTgsIDMxOTkyLCAyNTgsIDMyNTY2LCAyNTgsIDMyNTkzLCAyNTgsIAorICAgIDMyNjUwLCAyNTgsIDMyNzAxLCAyNTgsIDMyNzY5LCAyNTgsIDMyNzgwLCAyNTgsIDMyNzg2LCAyNTgsIDMyODE5LCAyNTgsIAorICAgIDMyODk1LCAyNTgsIDMyOTA1LCAyNTgsIDMzMjUxLCAyNTgsIDMzMjU4LCAyNTgsIDMzMjY3LCAyNTgsIDMzMjc2LCAyNTgsIAorICAgIDMzMjkyLCAyNTgsIDMzMzA3LCAyNTgsIDMzMzExLCAyNTgsIDMzMzkwLCAyNTgsIDMzMzk0LCAyNTgsIDMzNDAwLCAyNTgsIAorICAgIDM0MzgxLCAyNTgsIDM0NDExLCAyNTgsIDM0ODgwLCAyNTgsIDM0ODkyLCAyNTgsIDM0OTE1LCAyNTgsIDM1MTk4LCAyNTgsIAorICAgIDM1MjExLCAyNTgsIDM1MjgyLCAyNTgsIDM1MzI4LCAyNTgsIDM1ODk1LCAyNTgsIDM1OTEwLCAyNTgsIDM1OTI1LCAyNTgsIAorICAgIDM1OTYwLCAyNTgsIDM1OTk3LCAyNTgsIDM2MTk2LCAyNTgsIDM2MjA4LCAyNTgsIDM2Mjc1LCAyNTgsIDM2NTIzLCAyNTgsIAorICAgIDM2NTU0LCAyNTgsIDM2NzYzLCAyNTgsIDM2Nzg0LCAyNTgsIDM2Nzg5LCAyNTgsIDM3MDA5LCAyNTgsIDM3MTkzLCAyNTgsIAorICAgIDM3MzE4LCAyNTgsIDM3MzI0LCAyNTgsIDM3MzI5LCAyNTgsIDM4MjYzLCAyNTgsIDM4MjcyLCAyNTgsIDM4NDI4LCAyNTgsIAorICAgIDM4NTgyLCAyNTgsIDM4NTg1LCAyNTgsIDM4NjMyLCAyNTgsIDM4NzM3LCAyNTgsIDM4NzUwLCAyNTgsIDM4NzU0LCAyNTgsIAorICAgIDM4NzYxLCAyNTgsIDM4ODU5LCAyNTgsIDM4ODkzLCAyNTgsIDM4ODk5LCAyNTgsIDM4OTEzLCAyNTgsIDM5MDgwLCAyNTgsIAorICAgIDM5MTMxLCAyNTgsIDM5MTM1LCAyNTgsIDM5MzE4LCAyNTgsIDM5MzIxLCAyNTgsIDM5MzQwLCAyNTgsIDM5NTkyLCAyNTgsIAorICAgIDM5NjQwLCAyNTgsIDM5NjQ3LCAyNTgsIDM5NzE3LCAyNTgsIDM5NzI3LCAyNTgsIDM5NzMwLCAyNTgsIDM5NzQwLCAyNTgsIAorICAgIDM5NzcwLCAyNTgsIDQwMTY1LCAyNTgsIDQwNTY1LCAyNTgsIDQwNTc1LCAyNTgsIDQwNjEzLCAyNTgsIDQwNjM1LCAyNTgsIAorICAgIDQwNjQzLCAyNTgsIDQwNjUzLCAyNTgsIDQwNjU3LCAyNTgsIDQwNjk3LCAyNTgsIDQwNzAxLCAyNTgsIDQwNzE4LCAyNTgsIAorICAgIDQwNzIzLCAyNTgsIDQwNzM2LCAyNTgsIDQwNzYzLCAyNTgsIDQwNzc4LCAyNTgsIDQwNzg2LCAyNTgsIDQwODQ1LCAyNTgsIAorICAgIDQwODYwLCAyNTgsIDQwODY0LCAyNjQsIDMyLCAyNTgsIDEyMzA2LCAyNTgsIDIxMzEzLCAyNTgsIDIxMzE2LCAyNTgsIAorICAgIDIxMzE3LCA1MTIsIDEyMzYzLCAxMjQ0MSwgNTEyLCAxMjM2NSwgMTI0NDEsIDUxMiwgMTIzNjcsIDEyNDQxLCA1MTIsIAorICAgIDEyMzY5LCAxMjQ0MSwgNTEyLCAxMjM3MSwgMTI0NDEsIDUxMiwgMTIzNzMsIDEyNDQxLCA1MTIsIDEyMzc1LCAxMjQ0MSwgCisgICAgNTEyLCAxMjM3NywgMTI0NDEsIDUxMiwgMTIzNzksIDEyNDQxLCA1MTIsIDEyMzgxLCAxMjQ0MSwgNTEyLCAxMjM4MywgCisgICAgMTI0NDEsIDUxMiwgMTIzODUsIDEyNDQxLCA1MTIsIDEyMzg4LCAxMjQ0MSwgNTEyLCAxMjM5MCwgMTI0NDEsIDUxMiwgCisgICAgMTIzOTIsIDEyNDQxLCA1MTIsIDEyMzk5LCAxMjQ0MSwgNTEyLCAxMjM5OSwgMTI0NDIsIDUxMiwgMTI0MDIsIDEyNDQxLCAKKyAgICA1MTIsIDEyNDAyLCAxMjQ0MiwgNTEyLCAxMjQwNSwgMTI0NDEsIDUxMiwgMTI0MDUsIDEyNDQyLCA1MTIsIDEyNDA4LCAKKyAgICAxMjQ0MSwgNTEyLCAxMjQwOCwgMTI0NDIsIDUxMiwgMTI0MTEsIDEyNDQxLCA1MTIsIDEyNDExLCAxMjQ0MiwgNTEyLCAKKyAgICAxMjM1OCwgMTI0NDEsIDUxNCwgMzIsIDEyNDQxLCA1MTQsIDMyLCAxMjQ0MiwgNTEyLCAxMjQ0NSwgMTI0NDEsIDUyMSwgCisgICAgMTI0MjQsIDEyNDI2LCA1MTIsIDEyNDU5LCAxMjQ0MSwgNTEyLCAxMjQ2MSwgMTI0NDEsIDUxMiwgMTI0NjMsIDEyNDQxLCAKKyAgICA1MTIsIDEyNDY1LCAxMjQ0MSwgNTEyLCAxMjQ2NywgMTI0NDEsIDUxMiwgMTI0NjksIDEyNDQxLCA1MTIsIDEyNDcxLCAKKyAgICAxMjQ0MSwgNTEyLCAxMjQ3MywgMTI0NDEsIDUxMiwgMTI0NzUsIDEyNDQxLCA1MTIsIDEyNDc3LCAxMjQ0MSwgNTEyLCAKKyAgICAxMjQ3OSwgMTI0NDEsIDUxMiwgMTI0ODEsIDEyNDQxLCA1MTIsIDEyNDg0LCAxMjQ0MSwgNTEyLCAxMjQ4NiwgMTI0NDEsIAorICAgIDUxMiwgMTI0ODgsIDEyNDQxLCA1MTIsIDEyNDk1LCAxMjQ0MSwgNTEyLCAxMjQ5NSwgMTI0NDIsIDUxMiwgMTI0OTgsIAorICAgIDEyNDQxLCA1MTIsIDEyNDk4LCAxMjQ0MiwgNTEyLCAxMjUwMSwgMTI0NDEsIDUxMiwgMTI1MDEsIDEyNDQyLCA1MTIsIAorICAgIDEyNTA0LCAxMjQ0MSwgNTEyLCAxMjUwNCwgMTI0NDIsIDUxMiwgMTI1MDcsIDEyNDQxLCA1MTIsIDEyNTA3LCAxMjQ0MiwgCisgICAgNTEyLCAxMjQ1NCwgMTI0NDEsIDUxMiwgMTI1MjcsIDEyNDQxLCA1MTIsIDEyNTI4LCAxMjQ0MSwgNTEyLCAxMjUyOSwgCisgICAgMTI0NDEsIDUxMiwgMTI1MzAsIDEyNDQxLCA1MTIsIDEyNTQxLCAxMjQ0MSwgNTIxLCAxMjQ2NywgMTI0ODgsIDI1OCwgCisgICAgNDM1MiwgMjU4LCA0MzUzLCAyNTgsIDQ1MjIsIDI1OCwgNDM1NCwgMjU4LCA0NTI0LCAyNTgsIDQ1MjUsIDI1OCwgNDM1NSwgCisgICAgMjU4LCA0MzU2LCAyNTgsIDQzNTcsIDI1OCwgNDUyOCwgMjU4LCA0NTI5LCAyNTgsIDQ1MzAsIDI1OCwgNDUzMSwgMjU4LCAKKyAgICA0NTMyLCAyNTgsIDQ1MzMsIDI1OCwgNDM3OCwgMjU4LCA0MzU4LCAyNTgsIDQzNTksIDI1OCwgNDM2MCwgMjU4LCA0Mzg1LCAKKyAgICAyNTgsIDQzNjEsIDI1OCwgNDM2MiwgMjU4LCA0MzYzLCAyNTgsIDQzNjQsIDI1OCwgNDM2NSwgMjU4LCA0MzY2LCAyNTgsIAorICAgIDQzNjcsIDI1OCwgNDM2OCwgMjU4LCA0MzY5LCAyNTgsIDQzNzAsIDI1OCwgNDQ0OSwgMjU4LCA0NDUwLCAyNTgsIDQ0NTEsIAorICAgIDI1OCwgNDQ1MiwgMjU4LCA0NDUzLCAyNTgsIDQ0NTQsIDI1OCwgNDQ1NSwgMjU4LCA0NDU2LCAyNTgsIDQ0NTcsIDI1OCwgCisgICAgNDQ1OCwgMjU4LCA0NDU5LCAyNTgsIDQ0NjAsIDI1OCwgNDQ2MSwgMjU4LCA0NDYyLCAyNTgsIDQ0NjMsIDI1OCwgNDQ2NCwgCisgICAgMjU4LCA0NDY1LCAyNTgsIDQ0NjYsIDI1OCwgNDQ2NywgMjU4LCA0NDY4LCAyNTgsIDQ0NjksIDI1OCwgNDQ0OCwgMjU4LCAKKyAgICA0MzcyLCAyNTgsIDQzNzMsIDI1OCwgNDU1MSwgMjU4LCA0NTUyLCAyNTgsIDQ1NTYsIDI1OCwgNDU1OCwgMjU4LCA0NTYzLCAKKyAgICAyNTgsIDQ1NjcsIDI1OCwgNDU2OSwgMjU4LCA0MzgwLCAyNTgsIDQ1NzMsIDI1OCwgNDU3NSwgMjU4LCA0MzgxLCAyNTgsIAorICAgIDQzODIsIDI1OCwgNDM4NCwgMjU4LCA0Mzg2LCAyNTgsIDQzODcsIDI1OCwgNDM5MSwgMjU4LCA0MzkzLCAyNTgsIDQzOTUsIAorICAgIDI1OCwgNDM5NiwgMjU4LCA0Mzk3LCAyNTgsIDQzOTgsIDI1OCwgNDM5OSwgMjU4LCA0NDAyLCAyNTgsIDQ0MDYsIDI1OCwgCisgICAgNDQxNiwgMjU4LCA0NDIzLCAyNTgsIDQ0MjgsIDI1OCwgNDU5MywgMjU4LCA0NTk0LCAyNTgsIDQ0MzksIDI1OCwgNDQ0MCwgCisgICAgMjU4LCA0NDQxLCAyNTgsIDQ0ODQsIDI1OCwgNDQ4NSwgMjU4LCA0NDg4LCAyNTgsIDQ0OTcsIDI1OCwgNDQ5OCwgMjU4LCAKKyAgICA0NTAwLCAyNTgsIDQ1MTAsIDI1OCwgNDUxMywgMjU5LCAxOTk2OCwgMjU5LCAyMDEwOCwgMjU5LCAxOTk3NywgMjU5LCAKKyAgICAyMjIzNSwgMjU5LCAxOTk3OCwgMjU5LCAyMDAxMywgMjU5LCAxOTk3OSwgMjU5LCAzMDAwMiwgMjU5LCAyMDA1NywgMjU5LCAKKyAgICAxOTk5MywgMjU5LCAxOTk2OSwgMjU5LCAyMjgyNSwgMjU5LCAyMjMyMCwgMjU5LCAyMDE1NCwgNzcwLCA0MCwgNDM1MiwgNDEsIAorICAgIDc3MCwgNDAsIDQzNTQsIDQxLCA3NzAsIDQwLCA0MzU1LCA0MSwgNzcwLCA0MCwgNDM1NywgNDEsIDc3MCwgNDAsIDQzNTgsIAorICAgIDQxLCA3NzAsIDQwLCA0MzU5LCA0MSwgNzcwLCA0MCwgNDM2MSwgNDEsIDc3MCwgNDAsIDQzNjMsIDQxLCA3NzAsIDQwLCAKKyAgICA0MzY0LCA0MSwgNzcwLCA0MCwgNDM2NiwgNDEsIDc3MCwgNDAsIDQzNjcsIDQxLCA3NzAsIDQwLCA0MzY4LCA0MSwgNzcwLCAKKyAgICA0MCwgNDM2OSwgNDEsIDc3MCwgNDAsIDQzNzAsIDQxLCAxMDI2LCA0MCwgNDM1MiwgNDQ0OSwgNDEsIDEwMjYsIDQwLCAKKyAgICA0MzU0LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNTUsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM1NywgNDQ0OSwgNDEsIDEwMjYsIAorICAgIDQwLCA0MzU4LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNTksIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2MSwgNDQ0OSwgNDEsIAorICAgIDEwMjYsIDQwLCA0MzYzLCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjQsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2NiwgNDQ0OSwgCisgICAgNDEsIDEwMjYsIDQwLCA0MzY3LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjgsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2OSwgCisgICAgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzcwLCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjQsIDQ0NjIsIDQxLCAxNzk0LCA0MCwgCisgICAgNDM2MywgNDQ1NywgNDM2NCwgNDQ1MywgNDUyMywgNDEsIDE1MzgsIDQwLCA0MzYzLCA0NDU3LCA0MzcwLCA0NDYyLCA0MSwgCisgICAgNzcwLCA0MCwgMTk5NjgsIDQxLCA3NzAsIDQwLCAyMDEwOCwgNDEsIDc3MCwgNDAsIDE5OTc3LCA0MSwgNzcwLCA0MCwgCisgICAgMjIyMzUsIDQxLCA3NzAsIDQwLCAyMDExNiwgNDEsIDc3MCwgNDAsIDIwODQ1LCA0MSwgNzcwLCA0MCwgMTk5NzEsIDQxLCAKKyAgICA3NzAsIDQwLCAyMDg0MywgNDEsIDc3MCwgNDAsIDIwMDYxLCA0MSwgNzcwLCA0MCwgMjEzMTMsIDQxLCA3NzAsIDQwLCAKKyAgICAyNjM3NiwgNDEsIDc3MCwgNDAsIDI4Nzc5LCA0MSwgNzcwLCA0MCwgMjc3MDAsIDQxLCA3NzAsIDQwLCAyNjQwOCwgNDEsIAorICAgIDc3MCwgNDAsIDM3MzI5LCA0MSwgNzcwLCA0MCwgMjIzMDMsIDQxLCA3NzAsIDQwLCAyNjA4NSwgNDEsIDc3MCwgNDAsIAorICAgIDI2NjY2LCA0MSwgNzcwLCA0MCwgMjYzNzcsIDQxLCA3NzAsIDQwLCAzMTAzOCwgNDEsIDc3MCwgNDAsIDIxNTE3LCA0MSwgCisgICAgNzcwLCA0MCwgMjkzMDUsIDQxLCA3NzAsIDQwLCAzNjAwMSwgNDEsIDc3MCwgNDAsIDMxMDY5LCA0MSwgNzcwLCA0MCwgCisgICAgMjExNzIsIDQxLCA3NzAsIDQwLCAyMDE5NSwgNDEsIDc3MCwgNDAsIDIxNjI4LCA0MSwgNzcwLCA0MCwgMjMzOTgsIDQxLCAKKyAgICA3NzAsIDQwLCAzMDQzNSwgNDEsIDc3MCwgNDAsIDIwMjI1LCA0MSwgNzcwLCA0MCwgMzYwMzksIDQxLCA3NzAsIDQwLCAKKyAgICAyMTMzMiwgNDEsIDc3MCwgNDAsIDMxMDg1LCA0MSwgNzcwLCA0MCwgMjAyNDEsIDQxLCA3NzAsIDQwLCAzMzI1OCwgNDEsIAorICAgIDc3MCwgNDAsIDMzMjY3LCA0MSwgMjYzLCAyMTgzOSwgMjYzLCAyNDE4OCwgMjYzLCAyNTk5MSwgMjYzLCAzMTYzMSwgNzc4LCAKKyAgICA4MCwgODQsIDY5LCA1MTksIDUwLCA0OSwgNTE5LCA1MCwgNTAsIDUxOSwgNTAsIDUxLCA1MTksIDUwLCA1MiwgNTE5LCA1MCwgCisgICAgNTMsIDUxOSwgNTAsIDU0LCA1MTksIDUwLCA1NSwgNTE5LCA1MCwgNTYsIDUxOSwgNTAsIDU3LCA1MTksIDUxLCA0OCwgNTE5LCAKKyAgICA1MSwgNDksIDUxOSwgNTEsIDUwLCA1MTksIDUxLCA1MSwgNTE5LCA1MSwgNTIsIDUxOSwgNTEsIDUzLCAyNjMsIDQzNTIsIAorICAgIDI2MywgNDM1NCwgMjYzLCA0MzU1LCAyNjMsIDQzNTcsIDI2MywgNDM1OCwgMjYzLCA0MzU5LCAyNjMsIDQzNjEsIDI2MywgCisgICAgNDM2MywgMjYzLCA0MzY0LCAyNjMsIDQzNjYsIDI2MywgNDM2NywgMjYzLCA0MzY4LCAyNjMsIDQzNjksIDI2MywgNDM3MCwgCisgICAgNTE5LCA0MzUyLCA0NDQ5LCA1MTksIDQzNTQsIDQ0NDksIDUxOSwgNDM1NSwgNDQ0OSwgNTE5LCA0MzU3LCA0NDQ5LCA1MTksIAorICAgIDQzNTgsIDQ0NDksIDUxOSwgNDM1OSwgNDQ0OSwgNTE5LCA0MzYxLCA0NDQ5LCA1MTksIDQzNjMsIDQ0NDksIDUxOSwgNDM2NCwgCisgICAgNDQ0OSwgNTE5LCA0MzY2LCA0NDQ5LCA1MTksIDQzNjcsIDQ0NDksIDUxOSwgNDM2OCwgNDQ0OSwgNTE5LCA0MzY5LCA0NDQ5LCAKKyAgICA1MTksIDQzNzAsIDQ0NDksIDEyODcsIDQzNjYsIDQ0NDksIDQ1MzUsIDQzNTIsIDQ0NTcsIDEwMzEsIDQzNjQsIDQ0NjIsIAorICAgIDQzNjMsIDQ0NjgsIDUxOSwgNDM2MywgNDQ2MiwgMjYzLCAxOTk2OCwgMjYzLCAyMDEwOCwgMjYzLCAxOTk3NywgMjYzLCAKKyAgICAyMjIzNSwgMjYzLCAyMDExNiwgMjYzLCAyMDg0NSwgMjYzLCAxOTk3MSwgMjYzLCAyMDg0MywgMjYzLCAyMDA2MSwgMjYzLCAKKyAgICAyMTMxMywgMjYzLCAyNjM3NiwgMjYzLCAyODc3OSwgMjYzLCAyNzcwMCwgMjYzLCAyNjQwOCwgMjYzLCAzNzMyOSwgMjYzLCAKKyAgICAyMjMwMywgMjYzLCAyNjA4NSwgMjYzLCAyNjY2NiwgMjYzLCAyNjM3NywgMjYzLCAzMTAzOCwgMjYzLCAyMTUxNywgMjYzLCAKKyAgICAyOTMwNSwgMjYzLCAzNjAwMSwgMjYzLCAzMTA2OSwgMjYzLCAyMTE3MiwgMjYzLCAzMTE5MiwgMjYzLCAzMDAwNywgMjYzLCAKKyAgICAyMjg5OSwgMjYzLCAzNjk2OSwgMjYzLCAyMDc3OCwgMjYzLCAyMTM2MCwgMjYzLCAyNzg4MCwgMjYzLCAzODkxNywgMjYzLCAKKyAgICAyMDI0MSwgMjYzLCAyMDg4OSwgMjYzLCAyNzQ5MSwgMjYzLCAxOTk3OCwgMjYzLCAyMDAxMywgMjYzLCAxOTk3OSwgMjYzLCAKKyAgICAyNDAzOCwgMjYzLCAyMTQ5MSwgMjYzLCAyMTMwNywgMjYzLCAyMzQ0NywgMjYzLCAyMzM5OCwgMjYzLCAzMDQzNSwgMjYzLCAKKyAgICAyMDIyNSwgMjYzLCAzNjAzOSwgMjYzLCAyMTMzMiwgMjYzLCAyMjgxMiwgNTE5LCA1MSwgNTQsIDUxOSwgNTEsIDU1LCA1MTksIAorICAgIDUxLCA1NiwgNTE5LCA1MSwgNTcsIDUxOSwgNTIsIDQ4LCA1MTksIDUyLCA0OSwgNTE5LCA1MiwgNTAsIDUxOSwgNTIsIDUxLCAKKyAgICA1MTksIDUyLCA1MiwgNTE5LCA1MiwgNTMsIDUxOSwgNTIsIDU0LCA1MTksIDUyLCA1NSwgNTE5LCA1MiwgNTYsIDUxOSwgNTIsIAorICAgIDU3LCA1MTksIDUzLCA0OCwgNTE0LCA0OSwgMjYzNzYsIDUxNCwgNTAsIDI2Mzc2LCA1MTQsIDUxLCAyNjM3NiwgNTE0LCA1MiwgCisgICAgMjYzNzYsIDUxNCwgNTMsIDI2Mzc2LCA1MTQsIDU0LCAyNjM3NiwgNTE0LCA1NSwgMjYzNzYsIDUxNCwgNTYsIDI2Mzc2LCAKKyAgICA1MTQsIDU3LCAyNjM3NiwgNzcwLCA0OSwgNDgsIDI2Mzc2LCA3NzAsIDQ5LCA0OSwgMjYzNzYsIDc3MCwgNDksIDUwLCAKKyAgICAyNjM3NiwgNTIyLCA3MiwgMTAzLCA3NzgsIDEwMSwgMTE0LCAxMDMsIDUyMiwgMTAxLCA4NiwgNzc4LCA3NiwgODQsIDY4LCAKKyAgICAyNjMsIDEyNDUwLCAyNjMsIDEyNDUyLCAyNjMsIDEyNDU0LCAyNjMsIDEyNDU2LCAyNjMsIDEyNDU4LCAyNjMsIDEyNDU5LCAKKyAgICAyNjMsIDEyNDYxLCAyNjMsIDEyNDYzLCAyNjMsIDEyNDY1LCAyNjMsIDEyNDY3LCAyNjMsIDEyNDY5LCAyNjMsIDEyNDcxLCAKKyAgICAyNjMsIDEyNDczLCAyNjMsIDEyNDc1LCAyNjMsIDEyNDc3LCAyNjMsIDEyNDc5LCAyNjMsIDEyNDgxLCAyNjMsIDEyNDg0LCAKKyAgICAyNjMsIDEyNDg2LCAyNjMsIDEyNDg4LCAyNjMsIDEyNDkwLCAyNjMsIDEyNDkxLCAyNjMsIDEyNDkyLCAyNjMsIDEyNDkzLCAKKyAgICAyNjMsIDEyNDk0LCAyNjMsIDEyNDk1LCAyNjMsIDEyNDk4LCAyNjMsIDEyNTAxLCAyNjMsIDEyNTA0LCAyNjMsIDEyNTA3LCAKKyAgICAyNjMsIDEyNTEwLCAyNjMsIDEyNTExLCAyNjMsIDEyNTEyLCAyNjMsIDEyNTEzLCAyNjMsIDEyNTE0LCAyNjMsIDEyNTE2LCAKKyAgICAyNjMsIDEyNTE4LCAyNjMsIDEyNTIwLCAyNjMsIDEyNTIxLCAyNjMsIDEyNTIyLCAyNjMsIDEyNTIzLCAyNjMsIDEyNTI0LCAKKyAgICAyNjMsIDEyNTI1LCAyNjMsIDEyNTI3LCAyNjMsIDEyNTI4LCAyNjMsIDEyNTI5LCAyNjMsIDEyNTMwLCAxMDM0LCAxMjQ1MCwgCisgICAgMTI0OTcsIDEyNTQwLCAxMjQ4OCwgMTAzNCwgMTI0NTAsIDEyNTIzLCAxMjUwMSwgMTI0NDksIDEwMzQsIDEyNDUwLCAKKyAgICAxMjUzMSwgMTI1MDYsIDEyNDUwLCA3NzgsIDEyNDUwLCAxMjU0MCwgMTI1MjMsIDEwMzQsIDEyNDUyLCAxMjQ5MSwgMTI1MzEsIAorICAgIDEyNDY0LCA3NzgsIDEyNDUyLCAxMjUzMSwgMTI0ODEsIDc3OCwgMTI0NTQsIDEyNDU3LCAxMjUzMSwgMTI5MCwgMTI0NTYsIAorICAgIDEyNDczLCAxMjQ2MywgMTI1NDAsIDEyNDg5LCAxMDM0LCAxMjQ1NiwgMTI1NDAsIDEyNDU5LCAxMjU0MCwgNzc4LCAxMjQ1OCwgCisgICAgMTI1MzEsIDEyNDczLCA3NzgsIDEyNDU4LCAxMjU0MCwgMTI1MTIsIDc3OCwgMTI0NTksIDEyNDUyLCAxMjUyMiwgMTAzNCwgCisgICAgMTI0NTksIDEyNTIxLCAxMjQ4MywgMTI0ODgsIDEwMzQsIDEyNDU5LCAxMjUyNSwgMTI1MjIsIDEyNTQwLCA3NzgsIDEyNDYwLCAKKyAgICAxMjUyNSwgMTI1MzEsIDc3OCwgMTI0NjAsIDEyNTMxLCAxMjUxMCwgNTIyLCAxMjQ2MiwgMTI0NjAsIDc3OCwgMTI0NjIsIAorICAgIDEyNDkxLCAxMjU0MCwgMTAzNCwgMTI0NjEsIDEyNTE3LCAxMjUyMiwgMTI1NDAsIDEwMzQsIDEyNDYyLCAxMjUyMywgCisgICAgMTI0ODAsIDEyNTQwLCA1MjIsIDEyNDYxLCAxMjUyNSwgMTI5MCwgMTI0NjEsIDEyNTI1LCAxMjQ2NCwgMTI1MjEsIDEyNTEyLCAKKyAgICAxNTQ2LCAxMjQ2MSwgMTI1MjUsIDEyNTEzLCAxMjU0MCwgMTI0ODgsIDEyNTIzLCAxMjkwLCAxMjQ2MSwgMTI1MjUsIAorICAgIDEyNTI3LCAxMjQ4MywgMTI0ODgsIDc3OCwgMTI0NjQsIDEyNTIxLCAxMjUxMiwgMTI5MCwgMTI0NjQsIDEyNTIxLCAxMjUxMiwgCisgICAgMTI0ODgsIDEyNTMxLCAxMjkwLCAxMjQ2MywgMTI1MjMsIDEyNDc2LCAxMjQ1MiwgMTI1MjUsIDEwMzQsIDEyNDYzLCAKKyAgICAxMjUyNSwgMTI1NDAsIDEyNDkzLCA3NzgsIDEyNDY1LCAxMjU0MCwgMTI0NzMsIDc3OCwgMTI0NjcsIDEyNTIzLCAxMjQ5MCwgCisgICAgNzc4LCAxMjQ2NywgMTI1NDAsIDEyNTA5LCAxMDM0LCAxMjQ2OSwgMTI0NTIsIDEyNDYzLCAxMjUyMywgMTI5MCwgMTI0NjksIAorICAgIDEyNTMxLCAxMjQ4MSwgMTI1NDAsIDEyNTEyLCAxMDM0LCAxMjQ3MSwgMTI1MjIsIDEyNTMxLCAxMjQ2NCwgNzc4LCAxMjQ3NSwgCisgICAgMTI1MzEsIDEyNDgxLCA3NzgsIDEyNDc1LCAxMjUzMSwgMTI0ODgsIDc3OCwgMTI0ODAsIDEyNTQwLCAxMjQ3MywgNTIyLCAKKyAgICAxMjQ4NywgMTI0NzEsIDUyMiwgMTI0ODksIDEyNTIzLCA1MjIsIDEyNDg4LCAxMjUzMSwgNTIyLCAxMjQ5MCwgMTI0OTQsIAorICAgIDc3OCwgMTI0OTQsIDEyNDgzLCAxMjQ4OCwgNzc4LCAxMjQ5NSwgMTI0NTIsIDEyNDg0LCAxMjkwLCAxMjQ5NywgMTI1NDAsIAorICAgIDEyNDc1LCAxMjUzMSwgMTI0ODgsIDc3OCwgMTI0OTcsIDEyNTQwLCAxMjQ4NCwgMTAzNCwgMTI0OTYsIDEyNTQwLCAxMjUyNCwgCisgICAgMTI1MjMsIDEyOTAsIDEyNTAwLCAxMjQ1MCwgMTI0NzMsIDEyNDg4LCAxMjUyMywgNzc4LCAxMjUwMCwgMTI0NjMsIDEyNTIzLCAKKyAgICA1MjIsIDEyNTAwLCAxMjQ2NywgNTIyLCAxMjQ5OSwgMTI1MjMsIDEyOTAsIDEyNTAxLCAxMjQ0OSwgMTI1MjEsIDEyNDgzLCAKKyAgICAxMjQ4OSwgMTAzNCwgMTI1MDEsIDEyNDUxLCAxMjU0MCwgMTI0ODgsIDEyOTAsIDEyNTAyLCAxMjQ4MywgMTI0NzEsIAorICAgIDEyNDU1LCAxMjUyMywgNzc4LCAxMjUwMSwgMTI1MjEsIDEyNTMxLCAxMjkwLCAxMjUwNCwgMTI0NjMsIDEyNDc5LCAxMjU0MCwgCisgICAgMTI1MjMsIDUyMiwgMTI1MDYsIDEyNDc3LCA3NzgsIDEyNTA2LCAxMjQ5MSwgMTI0OTgsIDc3OCwgMTI1MDQsIDEyNTIzLCAKKyAgICAxMjQ4NCwgNzc4LCAxMjUwNiwgMTI1MzEsIDEyNDczLCA3NzgsIDEyNTA2LCAxMjU0MCwgMTI0NzIsIDc3OCwgMTI1MDUsIAorICAgIDEyNTQwLCAxMjQ3OSwgMTAzNCwgMTI1MDksIDEyNDUyLCAxMjUzMSwgMTI0ODgsIDc3OCwgMTI1MDgsIDEyNTIzLCAxMjQ4OCwgCisgICAgNTIyLCAxMjUwNywgMTI1MzEsIDc3OCwgMTI1MDksIDEyNTMxLCAxMjQ4OSwgNzc4LCAxMjUwNywgMTI1NDAsIDEyNTIzLCAKKyAgICA3NzgsIDEyNTA3LCAxMjU0MCwgMTI1MzEsIDEwMzQsIDEyNTEwLCAxMjQ1MiwgMTI0NjMsIDEyNTI1LCA3NzgsIDEyNTEwLCAKKyAgICAxMjQ1MiwgMTI1MjMsIDc3OCwgMTI1MTAsIDEyNDgzLCAxMjQ5NSwgNzc4LCAxMjUxMCwgMTI1MjMsIDEyNDYzLCAxMjkwLCAKKyAgICAxMjUxMCwgMTI1MzEsIDEyNDcxLCAxMjUxOSwgMTI1MzEsIDEwMzQsIDEyNTExLCAxMjQ2MywgMTI1MjUsIDEyNTMxLCA1MjIsIAorICAgIDEyNTExLCAxMjUyMiwgMTI5MCwgMTI1MTEsIDEyNTIyLCAxMjQ5NiwgMTI1NDAsIDEyNTIzLCA1MjIsIDEyNTEzLCAxMjQ2MCwgCisgICAgMTAzNCwgMTI1MTMsIDEyNDYwLCAxMjQ4OCwgMTI1MzEsIDEwMzQsIDEyNTEzLCAxMjU0MCwgMTI0ODgsIDEyNTIzLCA3NzgsIAorICAgIDEyNTE2LCAxMjU0MCwgMTI0ODksIDc3OCwgMTI1MTYsIDEyNTQwLCAxMjUyMywgNzc4LCAxMjUxOCwgMTI0NTAsIDEyNTMxLCAKKyAgICAxMDM0LCAxMjUyMiwgMTI0ODMsIDEyNDg4LCAxMjUyMywgNTIyLCAxMjUyMiwgMTI1MjEsIDc3OCwgMTI1MjMsIDEyNTAwLCAKKyAgICAxMjU0MCwgMTAzNCwgMTI1MjMsIDEyNTQwLCAxMjUwMiwgMTI1MjMsIDUyMiwgMTI1MjQsIDEyNTEyLCAxMjkwLCAxMjUyNCwgCisgICAgMTI1MzEsIDEyNDg4LCAxMjQ2NiwgMTI1MzEsIDc3OCwgMTI1MjcsIDEyNDgzLCAxMjQ4OCwgNTE0LCA0OCwgMjg4NTcsIAorICAgIDUxNCwgNDksIDI4ODU3LCA1MTQsIDUwLCAyODg1NywgNTE0LCA1MSwgMjg4NTcsIDUxNCwgNTIsIDI4ODU3LCA1MTQsIDUzLCAKKyAgICAyODg1NywgNTE0LCA1NCwgMjg4NTcsIDUxNCwgNTUsIDI4ODU3LCA1MTQsIDU2LCAyODg1NywgNTE0LCA1NywgMjg4NTcsIAorICAgIDc3MCwgNDksIDQ4LCAyODg1NywgNzcwLCA0OSwgNDksIDI4ODU3LCA3NzAsIDQ5LCA1MCwgMjg4NTcsIDc3MCwgNDksIDUxLCAKKyAgICAyODg1NywgNzcwLCA0OSwgNTIsIDI4ODU3LCA3NzAsIDQ5LCA1MywgMjg4NTcsIDc3MCwgNDksIDU0LCAyODg1NywgNzcwLCAKKyAgICA0OSwgNTUsIDI4ODU3LCA3NzAsIDQ5LCA1NiwgMjg4NTcsIDc3MCwgNDksIDU3LCAyODg1NywgNzcwLCA1MCwgNDgsIAorICAgIDI4ODU3LCA3NzAsIDUwLCA0OSwgMjg4NTcsIDc3MCwgNTAsIDUwLCAyODg1NywgNzcwLCA1MCwgNTEsIDI4ODU3LCA3NzAsIAorICAgIDUwLCA1MiwgMjg4NTcsIDc3OCwgMTA0LCA4MCwgOTcsIDUyMiwgMTAwLCA5NywgNTIyLCA2NSwgODUsIDc3OCwgOTgsIDk3LCAKKyAgICAxMTQsIDUyMiwgMTExLCA4NiwgNTIyLCAxMTIsIDk5LCA1MjIsIDEwMCwgMTA5LCA3NzgsIDEwMCwgMTA5LCAxNzgsIDc3OCwgCisgICAgMTAwLCAxMDksIDE3OSwgNTIyLCA3MywgODUsIDUyMiwgMjQxNzksIDI1MTA0LCA1MjIsIDI2MTU3LCAyMTY0NCwgNTIyLCAKKyAgICAyMjgyMywgMjc0OTEsIDUyMiwgMjYxMjYsIDI3ODM1LCAxMDM0LCAyNjY2NiwgMjQzMzUsIDIwMjUwLCAzMTAzOCwgNTIyLCAKKyAgICAxMTIsIDY1LCA1MjIsIDExMCwgNjUsIDUyMiwgOTU2LCA2NSwgNTIyLCAxMDksIDY1LCA1MjIsIDEwNywgNjUsIDUyMiwgNzUsIAorICAgIDY2LCA1MjIsIDc3LCA2NiwgNTIyLCA3MSwgNjYsIDc3OCwgOTksIDk3LCAxMDgsIDEwMzQsIDEwNywgOTksIDk3LCAxMDgsIAorICAgIDUyMiwgMTEyLCA3MCwgNTIyLCAxMTAsIDcwLCA1MjIsIDk1NiwgNzAsIDUyMiwgOTU2LCAxMDMsIDUyMiwgMTA5LCAxMDMsIAorICAgIDUyMiwgMTA3LCAxMDMsIDUyMiwgNzIsIDEyMiwgNzc4LCAxMDcsIDcyLCAxMjIsIDc3OCwgNzcsIDcyLCAxMjIsIDc3OCwgCisgICAgNzEsIDcyLCAxMjIsIDc3OCwgODQsIDcyLCAxMjIsIDUyMiwgOTU2LCA4NDY3LCA1MjIsIDEwOSwgODQ2NywgNTIyLCAxMDAsIAorICAgIDg0NjcsIDUyMiwgMTA3LCA4NDY3LCA1MjIsIDEwMiwgMTA5LCA1MjIsIDExMCwgMTA5LCA1MjIsIDk1NiwgMTA5LCA1MjIsIAorICAgIDEwOSwgMTA5LCA1MjIsIDk5LCAxMDksIDUyMiwgMTA3LCAxMDksIDc3OCwgMTA5LCAxMDksIDE3OCwgNzc4LCA5OSwgMTA5LCAKKyAgICAxNzgsIDUyMiwgMTA5LCAxNzgsIDc3OCwgMTA3LCAxMDksIDE3OCwgNzc4LCAxMDksIDEwOSwgMTc5LCA3NzgsIDk5LCAxMDksIAorICAgIDE3OSwgNTIyLCAxMDksIDE3OSwgNzc4LCAxMDcsIDEwOSwgMTc5LCA3NzgsIDEwOSwgODcyNSwgMTE1LCAxMDM0LCAxMDksIAorICAgIDg3MjUsIDExNSwgMTc4LCA1MjIsIDgwLCA5NywgNzc4LCAxMDcsIDgwLCA5NywgNzc4LCA3NywgODAsIDk3LCA3NzgsIDcxLCAKKyAgICA4MCwgOTcsIDc3OCwgMTE0LCA5NywgMTAwLCAxMjkwLCAxMTQsIDk3LCAxMDAsIDg3MjUsIDExNSwgMTU0NiwgMTE0LCA5NywgCisgICAgMTAwLCA4NzI1LCAxMTUsIDE3OCwgNTIyLCAxMTIsIDExNSwgNTIyLCAxMTAsIDExNSwgNTIyLCA5NTYsIDExNSwgNTIyLCAKKyAgICAxMDksIDExNSwgNTIyLCAxMTIsIDg2LCA1MjIsIDExMCwgODYsIDUyMiwgOTU2LCA4NiwgNTIyLCAxMDksIDg2LCA1MjIsIAorICAgIDEwNywgODYsIDUyMiwgNzcsIDg2LCA1MjIsIDExMiwgODcsIDUyMiwgMTEwLCA4NywgNTIyLCA5NTYsIDg3LCA1MjIsIDEwOSwgCisgICAgODcsIDUyMiwgMTA3LCA4NywgNTIyLCA3NywgODcsIDUyMiwgMTA3LCA5MzcsIDUyMiwgNzcsIDkzNywgMTAzNCwgOTcsIDQ2LCAKKyAgICAxMDksIDQ2LCA1MjIsIDY2LCAxMTMsIDUyMiwgOTksIDk5LCA1MjIsIDk5LCAxMDAsIDEwMzQsIDY3LCA4NzI1LCAxMDcsIAorICAgIDEwMywgNzc4LCA2NywgMTExLCA0NiwgNTIyLCAxMDAsIDY2LCA1MjIsIDcxLCAxMjEsIDUyMiwgMTA0LCA5NywgNTIyLCA3MiwgCisgICAgODAsIDUyMiwgMTA1LCAxMTAsIDUyMiwgNzUsIDc1LCA1MjIsIDc1LCA3NywgNTIyLCAxMDcsIDExNiwgNTIyLCAxMDgsIAorICAgIDEwOSwgNTIyLCAxMDgsIDExMCwgNzc4LCAxMDgsIDExMSwgMTAzLCA1MjIsIDEwOCwgMTIwLCA1MjIsIDEwOSwgOTgsIDc3OCwgCisgICAgMTA5LCAxMDUsIDEwOCwgNzc4LCAxMDksIDExMSwgMTA4LCA1MjIsIDgwLCA3MiwgMTAzNCwgMTEyLCA0NiwgMTA5LCA0NiwgCisgICAgNzc4LCA4MCwgODAsIDc3LCA1MjIsIDgwLCA4MiwgNTIyLCAxMTUsIDExNCwgNTIyLCA4MywgMTE4LCA1MjIsIDg3LCA5OCwgCisgICAgNzc4LCA4NiwgODcyNSwgMTA5LCA3NzgsIDY1LCA4NzI1LCAxMDksIDUxNCwgNDksIDI2MDg1LCA1MTQsIDUwLCAyNjA4NSwgCisgICAgNTE0LCA1MSwgMjYwODUsIDUxNCwgNTIsIDI2MDg1LCA1MTQsIDUzLCAyNjA4NSwgNTE0LCA1NCwgMjYwODUsIDUxNCwgNTUsIAorICAgIDI2MDg1LCA1MTQsIDU2LCAyNjA4NSwgNTE0LCA1NywgMjYwODUsIDc3MCwgNDksIDQ4LCAyNjA4NSwgNzcwLCA0OSwgNDksIAorICAgIDI2MDg1LCA3NzAsIDQ5LCA1MCwgMjYwODUsIDc3MCwgNDksIDUxLCAyNjA4NSwgNzcwLCA0OSwgNTIsIDI2MDg1LCA3NzAsIAorICAgIDQ5LCA1MywgMjYwODUsIDc3MCwgNDksIDU0LCAyNjA4NSwgNzcwLCA0OSwgNTUsIDI2MDg1LCA3NzAsIDQ5LCA1NiwgCisgICAgMjYwODUsIDc3MCwgNDksIDU3LCAyNjA4NSwgNzcwLCA1MCwgNDgsIDI2MDg1LCA3NzAsIDUwLCA0OSwgMjYwODUsIDc3MCwgCisgICAgNTAsIDUwLCAyNjA4NSwgNzcwLCA1MCwgNTEsIDI2MDg1LCA3NzAsIDUwLCA1MiwgMjYwODUsIDc3MCwgNTAsIDUzLCAKKyAgICAyNjA4NSwgNzcwLCA1MCwgNTQsIDI2MDg1LCA3NzAsIDUwLCA1NSwgMjYwODUsIDc3MCwgNTAsIDU2LCAyNjA4NSwgNzcwLCAKKyAgICA1MCwgNTcsIDI2MDg1LCA3NzAsIDUxLCA0OCwgMjYwODUsIDc3MCwgNTEsIDQ5LCAyNjA4NSwgNzc4LCAxMDMsIDk3LCAxMDgsIAorICAgIDI1OSwgNDI4NjMsIDI1NiwgMzU5MTIsIDI1NiwgMjYzNTYsIDI1NiwgMzY1NTQsIDI1NiwgMzYwNDAsIDI1NiwgMjgzNjksIAorICAgIDI1NiwgMjAwMTgsIDI1NiwgMjE0NzcsIDI1NiwgNDA4NjAsIDI1NiwgNDA4NjAsIDI1NiwgMjI4NjUsIDI1NiwgMzczMjksIAorICAgIDI1NiwgMjE4OTUsIDI1NiwgMjI4NTYsIDI1NiwgMjUwNzgsIDI1NiwgMzAzMTMsIDI1NiwgMzI2NDUsIDI1NiwgMzQzNjcsIAorICAgIDI1NiwgMzQ3NDYsIDI1NiwgMzUwNjQsIDI1NiwgMzcwMDcsIDI1NiwgMjcxMzgsIDI1NiwgMjc5MzEsIDI1NiwgMjg4ODksIAorICAgIDI1NiwgMjk2NjIsIDI1NiwgMzM4NTMsIDI1NiwgMzcyMjYsIDI1NiwgMzk0MDksIDI1NiwgMjAwOTgsIDI1NiwgMjEzNjUsIAorICAgIDI1NiwgMjczOTYsIDI1NiwgMjkyMTEsIDI1NiwgMzQzNDksIDI1NiwgNDA0NzgsIDI1NiwgMjM4ODgsIDI1NiwgMjg2NTEsIAorICAgIDI1NiwgMzQyNTMsIDI1NiwgMzUxNzIsIDI1NiwgMjUyODksIDI1NiwgMzMyNDAsIDI1NiwgMzQ4NDcsIDI1NiwgMjQyNjYsIAorICAgIDI1NiwgMjYzOTEsIDI1NiwgMjgwMTAsIDI1NiwgMjk0MzYsIDI1NiwgMzcwNzAsIDI1NiwgMjAzNTgsIDI1NiwgMjA5MTksIAorICAgIDI1NiwgMjEyMTQsIDI1NiwgMjU3OTYsIDI1NiwgMjczNDcsIDI1NiwgMjkyMDAsIDI1NiwgMzA0MzksIDI1NiwgMzI3NjksIAorICAgIDI1NiwgMzQzMTAsIDI1NiwgMzQzOTYsIDI1NiwgMzYzMzUsIDI1NiwgMzg3MDYsIDI1NiwgMzk3OTEsIDI1NiwgNDA0NDIsIAorICAgIDI1NiwgMzA4NjAsIDI1NiwgMzExMDMsIDI1NiwgMzIxNjAsIDI1NiwgMzM3MzcsIDI1NiwgMzc2MzYsIDI1NiwgNDA1NzUsIAorICAgIDI1NiwgMzU1NDIsIDI1NiwgMjI3NTEsIDI1NiwgMjQzMjQsIDI1NiwgMzE4NDAsIDI1NiwgMzI4OTQsIDI1NiwgMjkyODIsIAorICAgIDI1NiwgMzA5MjIsIDI1NiwgMzYwMzQsIDI1NiwgMzg2NDcsIDI1NiwgMjI3NDQsIDI1NiwgMjM2NTAsIDI1NiwgMjcxNTUsIAorICAgIDI1NiwgMjgxMjIsIDI1NiwgMjg0MzEsIDI1NiwgMzIwNDcsIDI1NiwgMzIzMTEsIDI1NiwgMzg0NzUsIDI1NiwgMjEyMDIsIAorICAgIDI1NiwgMzI5MDcsIDI1NiwgMjA5NTYsIDI1NiwgMjA5NDAsIDI1NiwgMzEyNjAsIDI1NiwgMzIxOTAsIDI1NiwgMzM3NzcsIAorICAgIDI1NiwgMzg1MTcsIDI1NiwgMzU3MTIsIDI1NiwgMjUyOTUsIDI1NiwgMjcxMzgsIDI1NiwgMzU1ODIsIDI1NiwgMjAwMjUsIAorICAgIDI1NiwgMjM1MjcsIDI1NiwgMjQ1OTQsIDI1NiwgMjk1NzUsIDI1NiwgMzAwNjQsIDI1NiwgMjEyNzEsIDI1NiwgMzA5NzEsIAorICAgIDI1NiwgMjA0MTUsIDI1NiwgMjQ0ODksIDI1NiwgMTk5ODEsIDI1NiwgMjc4NTIsIDI1NiwgMjU5NzYsIDI1NiwgMzIwMzQsIAorICAgIDI1NiwgMjE0NDMsIDI1NiwgMjI2MjIsIDI1NiwgMzA0NjUsIDI1NiwgMzM4NjUsIDI1NiwgMzU0OTgsIDI1NiwgMjc1NzgsIAorICAgIDI1NiwgMzY3ODQsIDI1NiwgMjc3ODQsIDI1NiwgMjUzNDIsIDI1NiwgMzM1MDksIDI1NiwgMjU1MDQsIDI1NiwgMzAwNTMsIAorICAgIDI1NiwgMjAxNDIsIDI1NiwgMjA4NDEsIDI1NiwgMjA5MzcsIDI1NiwgMjY3NTMsIDI1NiwgMzE5NzUsIDI1NiwgMzMzOTEsIAorICAgIDI1NiwgMzU1MzgsIDI1NiwgMzczMjcsIDI1NiwgMjEyMzcsIDI1NiwgMjE1NzAsIDI1NiwgMjI4OTksIDI1NiwgMjQzMDAsIAorICAgIDI1NiwgMjYwNTMsIDI1NiwgMjg2NzAsIDI1NiwgMzEwMTgsIDI1NiwgMzgzMTcsIDI1NiwgMzk1MzAsIDI1NiwgNDA1OTksIAorICAgIDI1NiwgNDA2NTQsIDI1NiwgMjExNDcsIDI1NiwgMjYzMTAsIDI1NiwgMjc1MTEsIDI1NiwgMzY3MDYsIDI1NiwgMjQxODAsIAorICAgIDI1NiwgMjQ5NzYsIDI1NiwgMjUwODgsIDI1NiwgMjU3NTQsIDI1NiwgMjg0NTEsIDI1NiwgMjkwMDEsIDI1NiwgMjk4MzMsIAorICAgIDI1NiwgMzExNzgsIDI1NiwgMzIyNDQsIDI1NiwgMzI4NzksIDI1NiwgMzY2NDYsIDI1NiwgMzQwMzAsIDI1NiwgMzY4OTksIAorICAgIDI1NiwgMzc3MDYsIDI1NiwgMjEwMTUsIDI1NiwgMjExNTUsIDI1NiwgMjE2OTMsIDI1NiwgMjg4NzIsIDI1NiwgMzUwMTAsIAorICAgIDI1NiwgMzU0OTgsIDI1NiwgMjQyNjUsIDI1NiwgMjQ1NjUsIDI1NiwgMjU0NjcsIDI1NiwgMjc1NjYsIDI1NiwgMzE4MDYsIAorICAgIDI1NiwgMjk1NTcsIDI1NiwgMjAxOTYsIDI1NiwgMjIyNjUsIDI1NiwgMjM1MjcsIDI1NiwgMjM5OTQsIDI1NiwgMjQ2MDQsIAorICAgIDI1NiwgMjk2MTgsIDI1NiwgMjk4MDEsIDI1NiwgMzI2NjYsIDI1NiwgMzI4MzgsIDI1NiwgMzc0MjgsIDI1NiwgMzg2NDYsIAorICAgIDI1NiwgMzg3MjgsIDI1NiwgMzg5MzYsIDI1NiwgMjAzNjMsIDI1NiwgMzExNTAsIDI1NiwgMzczMDAsIDI1NiwgMzg1ODQsIAorICAgIDI1NiwgMjQ4MDEsIDI1NiwgMjAxMDIsIDI1NiwgMjA2OTgsIDI1NiwgMjM1MzQsIDI1NiwgMjM2MTUsIDI1NiwgMjYwMDksIAorICAgIDI1NiwgMjcxMzgsIDI1NiwgMjkxMzQsIDI1NiwgMzAyNzQsIDI1NiwgMzQwNDQsIDI1NiwgMzY5ODgsIDI1NiwgNDA4NDUsIAorICAgIDI1NiwgMjYyNDgsIDI1NiwgMzg0NDYsIDI1NiwgMjExMjksIDI1NiwgMjY0OTEsIDI1NiwgMjY2MTEsIDI1NiwgMjc5NjksIAorICAgIDI1NiwgMjgzMTYsIDI1NiwgMjk3MDUsIDI1NiwgMzAwNDEsIDI1NiwgMzA4MjcsIDI1NiwgMzIwMTYsIDI1NiwgMzkwMDYsIAorICAgIDI1NiwgMjA4NDUsIDI1NiwgMjUxMzQsIDI1NiwgMzg1MjAsIDI1NiwgMjA1MjMsIDI1NiwgMjM4MzMsIDI1NiwgMjgxMzgsIAorICAgIDI1NiwgMzY2NTAsIDI1NiwgMjQ0NTksIDI1NiwgMjQ5MDAsIDI1NiwgMjY2NDcsIDI1NiwgMjk1NzUsIDI1NiwgMzg1MzQsIAorICAgIDI1NiwgMjEwMzMsIDI1NiwgMjE1MTksIDI1NiwgMjM2NTMsIDI1NiwgMjYxMzEsIDI1NiwgMjY0NDYsIDI1NiwgMjY3OTIsIAorICAgIDI1NiwgMjc4NzcsIDI1NiwgMjk3MDIsIDI1NiwgMzAxNzgsIDI1NiwgMzI2MzMsIDI1NiwgMzUwMjMsIDI1NiwgMzUwNDEsIAorICAgIDI1NiwgMzczMjQsIDI1NiwgMzg2MjYsIDI1NiwgMjEzMTEsIDI1NiwgMjgzNDYsIDI1NiwgMjE1MzMsIDI1NiwgMjkxMzYsIAorICAgIDI1NiwgMjk4NDgsIDI1NiwgMzQyOTgsIDI1NiwgMzg1NjMsIDI1NiwgNDAwMjMsIDI1NiwgNDA2MDcsIDI1NiwgMjY1MTksIAorICAgIDI1NiwgMjgxMDcsIDI1NiwgMzMyNTYsIDI1NiwgMzE0MzUsIDI1NiwgMzE1MjAsIDI1NiwgMzE4OTAsIDI1NiwgMjkzNzYsIAorICAgIDI1NiwgMjg4MjUsIDI1NiwgMzU2NzIsIDI1NiwgMjAxNjAsIDI1NiwgMzM1OTAsIDI1NiwgMjEwNTAsIDI1NiwgMjA5OTksIAorICAgIDI1NiwgMjQyMzAsIDI1NiwgMjUyOTksIDI1NiwgMzE5NTgsIDI1NiwgMjM0MjksIDI1NiwgMjc5MzQsIDI1NiwgMjYyOTIsIAorICAgIDI1NiwgMzY2NjcsIDI1NiwgMzQ4OTIsIDI1NiwgMzg0NzcsIDI1NiwgMzUyMTEsIDI1NiwgMjQyNzUsIDI1NiwgMjA4MDAsIAorICAgIDI1NiwgMjE5NTIsIDI1NiwgMjI2MTgsIDI1NiwgMjYyMjgsIDI1NiwgMjA5NTgsIDI1NiwgMjk0ODIsIDI1NiwgMzA0MTAsIAorICAgIDI1NiwgMzEwMzYsIDI1NiwgMzEwNzAsIDI1NiwgMzEwNzcsIDI1NiwgMzExMTksIDI1NiwgMzg3NDIsIDI1NiwgMzE5MzQsIAorICAgIDI1NiwgMzI3MDEsIDI1NiwgMzQzMjIsIDI1NiwgMzU1NzYsIDI1NiwgMzY5MjAsIDI1NiwgMzcxMTcsIDI1NiwgMzkxNTEsIAorICAgIDI1NiwgMzkxNjQsIDI1NiwgMzkyMDgsIDI1NiwgNDAzNzIsIDI1NiwgMjAzOTgsIDI1NiwgMjA3MTEsIDI1NiwgMjA4MTMsIAorICAgIDI1NiwgMjExOTMsIDI1NiwgMjEyMjAsIDI1NiwgMjEzMjksIDI1NiwgMjE5MTcsIDI1NiwgMjIwMjIsIDI1NiwgMjIxMjAsIAorICAgIDI1NiwgMjI1OTIsIDI1NiwgMjI2OTYsIDI1NiwgMjM2NTIsIDI1NiwgMjM2NjIsIDI1NiwgMjQ3MjQsIDI1NiwgMjQ5MzYsIAorICAgIDI1NiwgMjQ5NzQsIDI1NiwgMjUwNzQsIDI1NiwgMjU5MzUsIDI1NiwgMjYwODIsIDI1NiwgMjYyNTcsIDI1NiwgMjY3NTcsIAorICAgIDI1NiwgMjgwMjMsIDI1NiwgMjgxODYsIDI1NiwgMjg0NTAsIDI1NiwgMjkwMzgsIDI1NiwgMjkyMjcsIDI1NiwgMjk3MzAsIAorICAgIDI1NiwgMzA4NjUsIDI1NiwgMzEwMzgsIDI1NiwgMzEwNDksIDI1NiwgMzEwNDgsIDI1NiwgMzEwNTYsIDI1NiwgMzEwNjIsIAorICAgIDI1NiwgMzEwNjksIDI1NiwgMzExMTcsIDI1NiwgMzExMTgsIDI1NiwgMzEyOTYsIDI1NiwgMzEzNjEsIDI1NiwgMzE2ODAsIAorICAgIDI1NiwgMzIyNDQsIDI1NiwgMzIyNjUsIDI1NiwgMzIzMjEsIDI1NiwgMzI2MjYsIDI1NiwgMzI3NzMsIDI1NiwgMzMyNjEsIAorICAgIDI1NiwgMzM0MDEsIDI1NiwgMzM0MDEsIDI1NiwgMzM4NzksIDI1NiwgMzUwODgsIDI1NiwgMzUyMjIsIDI1NiwgMzU1ODUsIAorICAgIDI1NiwgMzU2NDEsIDI1NiwgMzYwNTEsIDI1NiwgMzYxMDQsIDI1NiwgMzY3OTAsIDI1NiwgMzY5MjAsIDI1NiwgMzg2MjcsIAorICAgIDI1NiwgMzg5MTEsIDI1NiwgMzg5NzEsIDI1NiwgMjQ2OTMsIDI1NiwgMTQ4MjA2LCAyNTYsIDMzMzA0LCAyNTYsIDIwMDA2LCAKKyAgICAyNTYsIDIwOTE3LCAyNTYsIDIwODQwLCAyNTYsIDIwMzUyLCAyNTYsIDIwODA1LCAyNTYsIDIwODY0LCAyNTYsIDIxMTkxLCAKKyAgICAyNTYsIDIxMjQyLCAyNTYsIDIxOTE3LCAyNTYsIDIxODQ1LCAyNTYsIDIxOTEzLCAyNTYsIDIxOTg2LCAyNTYsIDIyNjE4LCAKKyAgICAyNTYsIDIyNzA3LCAyNTYsIDIyODUyLCAyNTYsIDIyODY4LCAyNTYsIDIzMTM4LCAyNTYsIDIzMzM2LCAyNTYsIDI0Mjc0LCAKKyAgICAyNTYsIDI0MjgxLCAyNTYsIDI0NDI1LCAyNTYsIDI0NDkzLCAyNTYsIDI0NzkyLCAyNTYsIDI0OTEwLCAyNTYsIDI0ODQwLCAKKyAgICAyNTYsIDI0OTc0LCAyNTYsIDI0OTI4LCAyNTYsIDI1MDc0LCAyNTYsIDI1MTQwLCAyNTYsIDI1NTQwLCAyNTYsIDI1NjI4LCAKKyAgICAyNTYsIDI1NjgyLCAyNTYsIDI1OTQyLCAyNTYsIDI2MjI4LCAyNTYsIDI2MzkxLCAyNTYsIDI2Mzk1LCAyNTYsIDI2NDU0LCAKKyAgICAyNTYsIDI3NTEzLCAyNTYsIDI3NTc4LCAyNTYsIDI3OTY5LCAyNTYsIDI4Mzc5LCAyNTYsIDI4MzYzLCAyNTYsIDI4NDUwLCAKKyAgICAyNTYsIDI4NzAyLCAyNTYsIDI5MDM4LCAyNTYsIDMwNjMxLCAyNTYsIDI5MjM3LCAyNTYsIDI5MzU5LCAyNTYsIDI5NDgyLCAKKyAgICAyNTYsIDI5ODA5LCAyNTYsIDI5OTU4LCAyNTYsIDMwMDExLCAyNTYsIDMwMjM3LCAyNTYsIDMwMjM5LCAyNTYsIDMwNDEwLCAKKyAgICAyNTYsIDMwNDI3LCAyNTYsIDMwNDUyLCAyNTYsIDMwNTM4LCAyNTYsIDMwNTI4LCAyNTYsIDMwOTI0LCAyNTYsIDMxNDA5LCAKKyAgICAyNTYsIDMxNjgwLCAyNTYsIDMxODY3LCAyNTYsIDMyMDkxLCAyNTYsIDMyMjQ0LCAyNTYsIDMyNTc0LCAyNTYsIDMyNzczLCAKKyAgICAyNTYsIDMzNjE4LCAyNTYsIDMzNzc1LCAyNTYsIDM0NjgxLCAyNTYsIDM1MTM3LCAyNTYsIDM1MjA2LCAyNTYsIDM1MjIyLCAKKyAgICAyNTYsIDM1NTE5LCAyNTYsIDM1NTc2LCAyNTYsIDM1NTMxLCAyNTYsIDM1NTg1LCAyNTYsIDM1NTgyLCAyNTYsIDM1NTY1LCAKKyAgICAyNTYsIDM1NjQxLCAyNTYsIDM1NzIyLCAyNTYsIDM2MTA0LCAyNTYsIDM2NjY0LCAyNTYsIDM2OTc4LCAyNTYsIDM3MjczLCAKKyAgICAyNTYsIDM3NDk0LCAyNTYsIDM4NTI0LCAyNTYsIDM4NjI3LCAyNTYsIDM4NzQyLCAyNTYsIDM4ODc1LCAyNTYsIDM4OTExLCAKKyAgICAyNTYsIDM4OTIzLCAyNTYsIDM4OTcxLCAyNTYsIDM5Njk4LCAyNTYsIDQwODYwLCAyNTYsIDE0MTM4NiwgMjU2LCAxNDEzODAsIAorICAgIDI1NiwgMTQ0MzQxLCAyNTYsIDE1MjYxLCAyNTYsIDE2NDA4LCAyNTYsIDE2NDQxLCAyNTYsIDE1MjEzNywgMjU2LCAKKyAgICAxNTQ4MzIsIDI1NiwgMTYzNTM5LCAyNTYsIDQwNzcxLCAyNTYsIDQwODQ2LCA1MTQsIDEwMiwgMTAyLCA1MTQsIDEwMiwgCisgICAgMTA1LCA1MTQsIDEwMiwgMTA4LCA3NzAsIDEwMiwgMTAyLCAxMDUsIDc3MCwgMTAyLCAxMDIsIDEwOCwgNTE0LCAzODMsIAorICAgIDExNiwgNTE0LCAxMTUsIDExNiwgNTE0LCAxMzk2LCAxMzk4LCA1MTQsIDEzOTYsIDEzODEsIDUxNCwgMTM5NiwgMTM4NywgCisgICAgNTE0LCAxNDA2LCAxMzk4LCA1MTQsIDEzOTYsIDEzODksIDUxMiwgMTQ5NywgMTQ2MCwgNTEyLCAxNTIyLCAxNDYzLCAyNjIsIAorICAgIDE1MDYsIDI2MiwgMTQ4OCwgMjYyLCAxNDkxLCAyNjIsIDE0OTIsIDI2MiwgMTQ5OSwgMjYyLCAxNTAwLCAyNjIsIDE1MDEsIAorICAgIDI2MiwgMTUxMiwgMjYyLCAxNTE0LCAyNjIsIDQzLCA1MTIsIDE1MTMsIDE0NzMsIDUxMiwgMTUxMywgMTQ3NCwgNTEyLCAKKyAgICA2NDMyOSwgMTQ3MywgNTEyLCA2NDMyOSwgMTQ3NCwgNTEyLCAxNDg4LCAxNDYzLCA1MTIsIDE0ODgsIDE0NjQsIDUxMiwgCisgICAgMTQ4OCwgMTQ2OCwgNTEyLCAxNDg5LCAxNDY4LCA1MTIsIDE0OTAsIDE0NjgsIDUxMiwgMTQ5MSwgMTQ2OCwgNTEyLCAxNDkyLCAKKyAgICAxNDY4LCA1MTIsIDE0OTMsIDE0NjgsIDUxMiwgMTQ5NCwgMTQ2OCwgNTEyLCAxNDk2LCAxNDY4LCA1MTIsIDE0OTcsIDE0NjgsIAorICAgIDUxMiwgMTQ5OCwgMTQ2OCwgNTEyLCAxNDk5LCAxNDY4LCA1MTIsIDE1MDAsIDE0NjgsIDUxMiwgMTUwMiwgMTQ2OCwgNTEyLCAKKyAgICAxNTA0LCAxNDY4LCA1MTIsIDE1MDUsIDE0NjgsIDUxMiwgMTUwNywgMTQ2OCwgNTEyLCAxNTA4LCAxNDY4LCA1MTIsIDE1MTAsIAorICAgIDE0NjgsIDUxMiwgMTUxMSwgMTQ2OCwgNTEyLCAxNTEyLCAxNDY4LCA1MTIsIDE1MTMsIDE0NjgsIDUxMiwgMTUxNCwgMTQ2OCwgCisgICAgNTEyLCAxNDkzLCAxNDY1LCA1MTIsIDE0ODksIDE0NzEsIDUxMiwgMTQ5OSwgMTQ3MSwgNTEyLCAxNTA4LCAxNDcxLCA1MTQsIAorICAgIDE0ODgsIDE1MDAsIDI2NywgMTY0OSwgMjY4LCAxNjQ5LCAyNjcsIDE2NTksIDI2OCwgMTY1OSwgMjY5LCAxNjU5LCAyNzAsIAorICAgIDE2NTksIDI2NywgMTY2MiwgMjY4LCAxNjYyLCAyNjksIDE2NjIsIDI3MCwgMTY2MiwgMjY3LCAxNjY0LCAyNjgsIDE2NjQsIAorICAgIDI2OSwgMTY2NCwgMjcwLCAxNjY0LCAyNjcsIDE2NTgsIDI2OCwgMTY1OCwgMjY5LCAxNjU4LCAyNzAsIDE2NTgsIDI2NywgCisgICAgMTY2MywgMjY4LCAxNjYzLCAyNjksIDE2NjMsIDI3MCwgMTY2MywgMjY3LCAxNjU3LCAyNjgsIDE2NTcsIDI2OSwgMTY1NywgCisgICAgMjcwLCAxNjU3LCAyNjcsIDE3MDAsIDI2OCwgMTcwMCwgMjY5LCAxNzAwLCAyNzAsIDE3MDAsIDI2NywgMTcwMiwgMjY4LCAKKyAgICAxNzAyLCAyNjksIDE3MDIsIDI3MCwgMTcwMiwgMjY3LCAxNjY4LCAyNjgsIDE2NjgsIDI2OSwgMTY2OCwgMjcwLCAxNjY4LCAKKyAgICAyNjcsIDE2NjcsIDI2OCwgMTY2NywgMjY5LCAxNjY3LCAyNzAsIDE2NjcsIDI2NywgMTY3MCwgMjY4LCAxNjcwLCAyNjksIAorICAgIDE2NzAsIDI3MCwgMTY3MCwgMjY3LCAxNjcxLCAyNjgsIDE2NzEsIDI2OSwgMTY3MSwgMjcwLCAxNjcxLCAyNjcsIDE2NzcsIAorICAgIDI2OCwgMTY3NywgMjY3LCAxNjc2LCAyNjgsIDE2NzYsIDI2NywgMTY3OCwgMjY4LCAxNjc4LCAyNjcsIDE2NzIsIDI2OCwgCisgICAgMTY3MiwgMjY3LCAxNjg4LCAyNjgsIDE2ODgsIDI2NywgMTY4MSwgMjY4LCAxNjgxLCAyNjcsIDE3MDUsIDI2OCwgMTcwNSwgCisgICAgMjY5LCAxNzA1LCAyNzAsIDE3MDUsIDI2NywgMTcxMSwgMjY4LCAxNzExLCAyNjksIDE3MTEsIDI3MCwgMTcxMSwgMjY3LCAKKyAgICAxNzE1LCAyNjgsIDE3MTUsIDI2OSwgMTcxNSwgMjcwLCAxNzE1LCAyNjcsIDE3MTMsIDI2OCwgMTcxMywgMjY5LCAxNzEzLCAKKyAgICAyNzAsIDE3MTMsIDI2NywgMTcyMiwgMjY4LCAxNzIyLCAyNjcsIDE3MjMsIDI2OCwgMTcyMywgMjY5LCAxNzIzLCAyNzAsIAorICAgIDE3MjMsIDI2NywgMTcyOCwgMjY4LCAxNzI4LCAyNjcsIDE3MjksIDI2OCwgMTcyOSwgMjY5LCAxNzI5LCAyNzAsIDE3MjksIAorICAgIDI2NywgMTcyNiwgMjY4LCAxNzI2LCAyNjksIDE3MjYsIDI3MCwgMTcyNiwgMjY3LCAxNzQ2LCAyNjgsIDE3NDYsIDI2NywgCisgICAgMTc0NywgMjY4LCAxNzQ3LCAyNjcsIDE3MDksIDI2OCwgMTcwOSwgMjY5LCAxNzA5LCAyNzAsIDE3MDksIDI2NywgMTczNSwgCisgICAgMjY4LCAxNzM1LCAyNjcsIDE3MzQsIDI2OCwgMTczNCwgMjY3LCAxNzM2LCAyNjgsIDE3MzYsIDI2NywgMTY1NSwgMjY3LCAKKyAgICAxNzM5LCAyNjgsIDE3MzksIDI2NywgMTczMywgMjY4LCAxNzMzLCAyNjcsIDE3MzcsIDI2OCwgMTczNywgMjY3LCAxNzQ0LCAKKyAgICAyNjgsIDE3NDQsIDI2OSwgMTc0NCwgMjcwLCAxNzQ0LCAyNjksIDE2MDksIDI3MCwgMTYwOSwgNTIzLCAxNTc0LCAxNTc1LCAKKyAgICA1MjQsIDE1NzQsIDE1NzUsIDUyMywgMTU3NCwgMTc0OSwgNTI0LCAxNTc0LCAxNzQ5LCA1MjMsIDE1NzQsIDE2MDgsIDUyNCwgCisgICAgMTU3NCwgMTYwOCwgNTIzLCAxNTc0LCAxNzM1LCA1MjQsIDE1NzQsIDE3MzUsIDUyMywgMTU3NCwgMTczNCwgNTI0LCAxNTc0LCAKKyAgICAxNzM0LCA1MjMsIDE1NzQsIDE3MzYsIDUyNCwgMTU3NCwgMTczNiwgNTIzLCAxNTc0LCAxNzQ0LCA1MjQsIDE1NzQsIDE3NDQsIAorICAgIDUyNSwgMTU3NCwgMTc0NCwgNTIzLCAxNTc0LCAxNjA5LCA1MjQsIDE1NzQsIDE2MDksIDUyNSwgMTU3NCwgMTYwOSwgMjY3LCAKKyAgICAxNzQwLCAyNjgsIDE3NDAsIDI2OSwgMTc0MCwgMjcwLCAxNzQwLCA1MjMsIDE1NzQsIDE1ODAsIDUyMywgMTU3NCwgMTU4MSwgCisgICAgNTIzLCAxNTc0LCAxNjA1LCA1MjMsIDE1NzQsIDE2MDksIDUyMywgMTU3NCwgMTYxMCwgNTIzLCAxNTc2LCAxNTgwLCA1MjMsIAorICAgIDE1NzYsIDE1ODEsIDUyMywgMTU3NiwgMTU4MiwgNTIzLCAxNTc2LCAxNjA1LCA1MjMsIDE1NzYsIDE2MDksIDUyMywgMTU3NiwgCisgICAgMTYxMCwgNTIzLCAxNTc4LCAxNTgwLCA1MjMsIDE1NzgsIDE1ODEsIDUyMywgMTU3OCwgMTU4MiwgNTIzLCAxNTc4LCAxNjA1LCAKKyAgICA1MjMsIDE1NzgsIDE2MDksIDUyMywgMTU3OCwgMTYxMCwgNTIzLCAxNTc5LCAxNTgwLCA1MjMsIDE1NzksIDE2MDUsIDUyMywgCisgICAgMTU3OSwgMTYwOSwgNTIzLCAxNTc5LCAxNjEwLCA1MjMsIDE1ODAsIDE1ODEsIDUyMywgMTU4MCwgMTYwNSwgNTIzLCAxNTgxLCAKKyAgICAxNTgwLCA1MjMsIDE1ODEsIDE2MDUsIDUyMywgMTU4MiwgMTU4MCwgNTIzLCAxNTgyLCAxNTgxLCA1MjMsIDE1ODIsIDE2MDUsIAorICAgIDUyMywgMTU4NywgMTU4MCwgNTIzLCAxNTg3LCAxNTgxLCA1MjMsIDE1ODcsIDE1ODIsIDUyMywgMTU4NywgMTYwNSwgNTIzLCAKKyAgICAxNTg5LCAxNTgxLCA1MjMsIDE1ODksIDE2MDUsIDUyMywgMTU5MCwgMTU4MCwgNTIzLCAxNTkwLCAxNTgxLCA1MjMsIDE1OTAsIAorICAgIDE1ODIsIDUyMywgMTU5MCwgMTYwNSwgNTIzLCAxNTkxLCAxNTgxLCA1MjMsIDE1OTEsIDE2MDUsIDUyMywgMTU5MiwgMTYwNSwgCisgICAgNTIzLCAxNTkzLCAxNTgwLCA1MjMsIDE1OTMsIDE2MDUsIDUyMywgMTU5NCwgMTU4MCwgNTIzLCAxNTk0LCAxNjA1LCA1MjMsIAorICAgIDE2MDEsIDE1ODAsIDUyMywgMTYwMSwgMTU4MSwgNTIzLCAxNjAxLCAxNTgyLCA1MjMsIDE2MDEsIDE2MDUsIDUyMywgMTYwMSwgCisgICAgMTYwOSwgNTIzLCAxNjAxLCAxNjEwLCA1MjMsIDE2MDIsIDE1ODEsIDUyMywgMTYwMiwgMTYwNSwgNTIzLCAxNjAyLCAxNjA5LCAKKyAgICA1MjMsIDE2MDIsIDE2MTAsIDUyMywgMTYwMywgMTU3NSwgNTIzLCAxNjAzLCAxNTgwLCA1MjMsIDE2MDMsIDE1ODEsIDUyMywgCisgICAgMTYwMywgMTU4MiwgNTIzLCAxNjAzLCAxNjA0LCA1MjMsIDE2MDMsIDE2MDUsIDUyMywgMTYwMywgMTYwOSwgNTIzLCAxNjAzLCAKKyAgICAxNjEwLCA1MjMsIDE2MDQsIDE1ODAsIDUyMywgMTYwNCwgMTU4MSwgNTIzLCAxNjA0LCAxNTgyLCA1MjMsIDE2MDQsIDE2MDUsIAorICAgIDUyMywgMTYwNCwgMTYwOSwgNTIzLCAxNjA0LCAxNjEwLCA1MjMsIDE2MDUsIDE1ODAsIDUyMywgMTYwNSwgMTU4MSwgNTIzLCAKKyAgICAxNjA1LCAxNTgyLCA1MjMsIDE2MDUsIDE2MDUsIDUyMywgMTYwNSwgMTYwOSwgNTIzLCAxNjA1LCAxNjEwLCA1MjMsIDE2MDYsIAorICAgIDE1ODAsIDUyMywgMTYwNiwgMTU4MSwgNTIzLCAxNjA2LCAxNTgyLCA1MjMsIDE2MDYsIDE2MDUsIDUyMywgMTYwNiwgMTYwOSwgCisgICAgNTIzLCAxNjA2LCAxNjEwLCA1MjMsIDE2MDcsIDE1ODAsIDUyMywgMTYwNywgMTYwNSwgNTIzLCAxNjA3LCAxNjA5LCA1MjMsIAorICAgIDE2MDcsIDE2MTAsIDUyMywgMTYxMCwgMTU4MCwgNTIzLCAxNjEwLCAxNTgxLCA1MjMsIDE2MTAsIDE1ODIsIDUyMywgMTYxMCwgCisgICAgMTYwNSwgNTIzLCAxNjEwLCAxNjA5LCA1MjMsIDE2MTAsIDE2MTAsIDUyMywgMTU4NCwgMTY0OCwgNTIzLCAxNTg1LCAxNjQ4LCAKKyAgICA1MjMsIDE2MDksIDE2NDgsIDc3OSwgMzIsIDE2MTIsIDE2MTcsIDc3OSwgMzIsIDE2MTMsIDE2MTcsIDc3OSwgMzIsIDE2MTQsIAorICAgIDE2MTcsIDc3OSwgMzIsIDE2MTUsIDE2MTcsIDc3OSwgMzIsIDE2MTYsIDE2MTcsIDc3OSwgMzIsIDE2MTcsIDE2NDgsIDUyNCwgCisgICAgMTU3NCwgMTU4NSwgNTI0LCAxNTc0LCAxNTg2LCA1MjQsIDE1NzQsIDE2MDUsIDUyNCwgMTU3NCwgMTYwNiwgNTI0LCAxNTc0LCAKKyAgICAxNjA5LCA1MjQsIDE1NzQsIDE2MTAsIDUyNCwgMTU3NiwgMTU4NSwgNTI0LCAxNTc2LCAxNTg2LCA1MjQsIDE1NzYsIDE2MDUsIAorICAgIDUyNCwgMTU3NiwgMTYwNiwgNTI0LCAxNTc2LCAxNjA5LCA1MjQsIDE1NzYsIDE2MTAsIDUyNCwgMTU3OCwgMTU4NSwgNTI0LCAKKyAgICAxNTc4LCAxNTg2LCA1MjQsIDE1NzgsIDE2MDUsIDUyNCwgMTU3OCwgMTYwNiwgNTI0LCAxNTc4LCAxNjA5LCA1MjQsIDE1NzgsIAorICAgIDE2MTAsIDUyNCwgMTU3OSwgMTU4NSwgNTI0LCAxNTc5LCAxNTg2LCA1MjQsIDE1NzksIDE2MDUsIDUyNCwgMTU3OSwgMTYwNiwgCisgICAgNTI0LCAxNTc5LCAxNjA5LCA1MjQsIDE1NzksIDE2MTAsIDUyNCwgMTYwMSwgMTYwOSwgNTI0LCAxNjAxLCAxNjEwLCA1MjQsIAorICAgIDE2MDIsIDE2MDksIDUyNCwgMTYwMiwgMTYxMCwgNTI0LCAxNjAzLCAxNTc1LCA1MjQsIDE2MDMsIDE2MDQsIDUyNCwgMTYwMywgCisgICAgMTYwNSwgNTI0LCAxNjAzLCAxNjA5LCA1MjQsIDE2MDMsIDE2MTAsIDUyNCwgMTYwNCwgMTYwNSwgNTI0LCAxNjA0LCAxNjA5LCAKKyAgICA1MjQsIDE2MDQsIDE2MTAsIDUyNCwgMTYwNSwgMTU3NSwgNTI0LCAxNjA1LCAxNjA1LCA1MjQsIDE2MDYsIDE1ODUsIDUyNCwgCisgICAgMTYwNiwgMTU4NiwgNTI0LCAxNjA2LCAxNjA1LCA1MjQsIDE2MDYsIDE2MDYsIDUyNCwgMTYwNiwgMTYwOSwgNTI0LCAxNjA2LCAKKyAgICAxNjEwLCA1MjQsIDE2MDksIDE2NDgsIDUyNCwgMTYxMCwgMTU4NSwgNTI0LCAxNjEwLCAxNTg2LCA1MjQsIDE2MTAsIDE2MDUsIAorICAgIDUyNCwgMTYxMCwgMTYwNiwgNTI0LCAxNjEwLCAxNjA5LCA1MjQsIDE2MTAsIDE2MTAsIDUyNSwgMTU3NCwgMTU4MCwgNTI1LCAKKyAgICAxNTc0LCAxNTgxLCA1MjUsIDE1NzQsIDE1ODIsIDUyNSwgMTU3NCwgMTYwNSwgNTI1LCAxNTc0LCAxNjA3LCA1MjUsIDE1NzYsIAorICAgIDE1ODAsIDUyNSwgMTU3NiwgMTU4MSwgNTI1LCAxNTc2LCAxNTgyLCA1MjUsIDE1NzYsIDE2MDUsIDUyNSwgMTU3NiwgMTYwNywgCisgICAgNTI1LCAxNTc4LCAxNTgwLCA1MjUsIDE1NzgsIDE1ODEsIDUyNSwgMTU3OCwgMTU4MiwgNTI1LCAxNTc4LCAxNjA1LCA1MjUsIAorICAgIDE1NzgsIDE2MDcsIDUyNSwgMTU3OSwgMTYwNSwgNTI1LCAxNTgwLCAxNTgxLCA1MjUsIDE1ODAsIDE2MDUsIDUyNSwgMTU4MSwgCisgICAgMTU4MCwgNTI1LCAxNTgxLCAxNjA1LCA1MjUsIDE1ODIsIDE1ODAsIDUyNSwgMTU4MiwgMTYwNSwgNTI1LCAxNTg3LCAxNTgwLCAKKyAgICA1MjUsIDE1ODcsIDE1ODEsIDUyNSwgMTU4NywgMTU4MiwgNTI1LCAxNTg3LCAxNjA1LCA1MjUsIDE1ODksIDE1ODEsIDUyNSwgCisgICAgMTU4OSwgMTU4MiwgNTI1LCAxNTg5LCAxNjA1LCA1MjUsIDE1OTAsIDE1ODAsIDUyNSwgMTU5MCwgMTU4MSwgNTI1LCAxNTkwLCAKKyAgICAxNTgyLCA1MjUsIDE1OTAsIDE2MDUsIDUyNSwgMTU5MSwgMTU4MSwgNTI1LCAxNTkyLCAxNjA1LCA1MjUsIDE1OTMsIDE1ODAsIAorICAgIDUyNSwgMTU5MywgMTYwNSwgNTI1LCAxNTk0LCAxNTgwLCA1MjUsIDE1OTQsIDE2MDUsIDUyNSwgMTYwMSwgMTU4MCwgNTI1LCAKKyAgICAxNjAxLCAxNTgxLCA1MjUsIDE2MDEsIDE1ODIsIDUyNSwgMTYwMSwgMTYwNSwgNTI1LCAxNjAyLCAxNTgxLCA1MjUsIDE2MDIsIAorICAgIDE2MDUsIDUyNSwgMTYwMywgMTU4MCwgNTI1LCAxNjAzLCAxNTgxLCA1MjUsIDE2MDMsIDE1ODIsIDUyNSwgMTYwMywgMTYwNCwgCisgICAgNTI1LCAxNjAzLCAxNjA1LCA1MjUsIDE2MDQsIDE1ODAsIDUyNSwgMTYwNCwgMTU4MSwgNTI1LCAxNjA0LCAxNTgyLCA1MjUsIAorICAgIDE2MDQsIDE2MDUsIDUyNSwgMTYwNCwgMTYwNywgNTI1LCAxNjA1LCAxNTgwLCA1MjUsIDE2MDUsIDE1ODEsIDUyNSwgMTYwNSwgCisgICAgMTU4MiwgNTI1LCAxNjA1LCAxNjA1LCA1MjUsIDE2MDYsIDE1ODAsIDUyNSwgMTYwNiwgMTU4MSwgNTI1LCAxNjA2LCAxNTgyLCAKKyAgICA1MjUsIDE2MDYsIDE2MDUsIDUyNSwgMTYwNiwgMTYwNywgNTI1LCAxNjA3LCAxNTgwLCA1MjUsIDE2MDcsIDE2MDUsIDUyNSwgCisgICAgMTYwNywgMTY0OCwgNTI1LCAxNjEwLCAxNTgwLCA1MjUsIDE2MTAsIDE1ODEsIDUyNSwgMTYxMCwgMTU4MiwgNTI1LCAxNjEwLCAKKyAgICAxNjA1LCA1MjUsIDE2MTAsIDE2MDcsIDUyNiwgMTU3NCwgMTYwNSwgNTI2LCAxNTc0LCAxNjA3LCA1MjYsIDE1NzYsIDE2MDUsIAorICAgIDUyNiwgMTU3NiwgMTYwNywgNTI2LCAxNTc4LCAxNjA1LCA1MjYsIDE1NzgsIDE2MDcsIDUyNiwgMTU3OSwgMTYwNSwgNTI2LCAKKyAgICAxNTc5LCAxNjA3LCA1MjYsIDE1ODcsIDE2MDUsIDUyNiwgMTU4NywgMTYwNywgNTI2LCAxNTg4LCAxNjA1LCA1MjYsIDE1ODgsIAorICAgIDE2MDcsIDUyNiwgMTYwMywgMTYwNCwgNTI2LCAxNjAzLCAxNjA1LCA1MjYsIDE2MDQsIDE2MDUsIDUyNiwgMTYwNiwgMTYwNSwgCisgICAgNTI2LCAxNjA2LCAxNjA3LCA1MjYsIDE2MTAsIDE2MDUsIDUyNiwgMTYxMCwgMTYwNywgNzgyLCAxNjAwLCAxNjE0LCAxNjE3LCAKKyAgICA3ODIsIDE2MDAsIDE2MTUsIDE2MTcsIDc4MiwgMTYwMCwgMTYxNiwgMTYxNywgNTIzLCAxNTkxLCAxNjA5LCA1MjMsIDE1OTEsIAorICAgIDE2MTAsIDUyMywgMTU5MywgMTYwOSwgNTIzLCAxNTkzLCAxNjEwLCA1MjMsIDE1OTQsIDE2MDksIDUyMywgMTU5NCwgMTYxMCwgCisgICAgNTIzLCAxNTg3LCAxNjA5LCA1MjMsIDE1ODcsIDE2MTAsIDUyMywgMTU4OCwgMTYwOSwgNTIzLCAxNTg4LCAxNjEwLCA1MjMsIAorICAgIDE1ODEsIDE2MDksIDUyMywgMTU4MSwgMTYxMCwgNTIzLCAxNTgwLCAxNjA5LCA1MjMsIDE1ODAsIDE2MTAsIDUyMywgMTU4MiwgCisgICAgMTYwOSwgNTIzLCAxNTgyLCAxNjEwLCA1MjMsIDE1ODksIDE2MDksIDUyMywgMTU4OSwgMTYxMCwgNTIzLCAxNTkwLCAxNjA5LCAKKyAgICA1MjMsIDE1OTAsIDE2MTAsIDUyMywgMTU4OCwgMTU4MCwgNTIzLCAxNTg4LCAxNTgxLCA1MjMsIDE1ODgsIDE1ODIsIDUyMywgCisgICAgMTU4OCwgMTYwNSwgNTIzLCAxNTg4LCAxNTg1LCA1MjMsIDE1ODcsIDE1ODUsIDUyMywgMTU4OSwgMTU4NSwgNTIzLCAxNTkwLCAKKyAgICAxNTg1LCA1MjQsIDE1OTEsIDE2MDksIDUyNCwgMTU5MSwgMTYxMCwgNTI0LCAxNTkzLCAxNjA5LCA1MjQsIDE1OTMsIDE2MTAsIAorICAgIDUyNCwgMTU5NCwgMTYwOSwgNTI0LCAxNTk0LCAxNjEwLCA1MjQsIDE1ODcsIDE2MDksIDUyNCwgMTU4NywgMTYxMCwgNTI0LCAKKyAgICAxNTg4LCAxNjA5LCA1MjQsIDE1ODgsIDE2MTAsIDUyNCwgMTU4MSwgMTYwOSwgNTI0LCAxNTgxLCAxNjEwLCA1MjQsIDE1ODAsIAorICAgIDE2MDksIDUyNCwgMTU4MCwgMTYxMCwgNTI0LCAxNTgyLCAxNjA5LCA1MjQsIDE1ODIsIDE2MTAsIDUyNCwgMTU4OSwgMTYwOSwgCisgICAgNTI0LCAxNTg5LCAxNjEwLCA1MjQsIDE1OTAsIDE2MDksIDUyNCwgMTU5MCwgMTYxMCwgNTI0LCAxNTg4LCAxNTgwLCA1MjQsIAorICAgIDE1ODgsIDE1ODEsIDUyNCwgMTU4OCwgMTU4MiwgNTI0LCAxNTg4LCAxNjA1LCA1MjQsIDE1ODgsIDE1ODUsIDUyNCwgMTU4NywgCisgICAgMTU4NSwgNTI0LCAxNTg5LCAxNTg1LCA1MjQsIDE1OTAsIDE1ODUsIDUyNSwgMTU4OCwgMTU4MCwgNTI1LCAxNTg4LCAxNTgxLCAKKyAgICA1MjUsIDE1ODgsIDE1ODIsIDUyNSwgMTU4OCwgMTYwNSwgNTI1LCAxNTg3LCAxNjA3LCA1MjUsIDE1ODgsIDE2MDcsIDUyNSwgCisgICAgMTU5MSwgMTYwNSwgNTI2LCAxNTg3LCAxNTgwLCA1MjYsIDE1ODcsIDE1ODEsIDUyNiwgMTU4NywgMTU4MiwgNTI2LCAxNTg4LCAKKyAgICAxNTgwLCA1MjYsIDE1ODgsIDE1ODEsIDUyNiwgMTU4OCwgMTU4MiwgNTI2LCAxNTkxLCAxNjA1LCA1MjYsIDE1OTIsIDE2MDUsIAorICAgIDUyNCwgMTU3NSwgMTYxMSwgNTIzLCAxNTc1LCAxNjExLCA3ODEsIDE1NzgsIDE1ODAsIDE2MDUsIDc4MCwgMTU3OCwgMTU4MSwgCisgICAgMTU4MCwgNzgxLCAxNTc4LCAxNTgxLCAxNTgwLCA3ODEsIDE1NzgsIDE1ODEsIDE2MDUsIDc4MSwgMTU3OCwgMTU4MiwgCisgICAgMTYwNSwgNzgxLCAxNTc4LCAxNjA1LCAxNTgwLCA3ODEsIDE1NzgsIDE2MDUsIDE1ODEsIDc4MSwgMTU3OCwgMTYwNSwgCisgICAgMTU4MiwgNzgwLCAxNTgwLCAxNjA1LCAxNTgxLCA3ODEsIDE1ODAsIDE2MDUsIDE1ODEsIDc4MCwgMTU4MSwgMTYwNSwgCisgICAgMTYxMCwgNzgwLCAxNTgxLCAxNjA1LCAxNjA5LCA3ODEsIDE1ODcsIDE1ODEsIDE1ODAsIDc4MSwgMTU4NywgMTU4MCwgCisgICAgMTU4MSwgNzgwLCAxNTg3LCAxNTgwLCAxNjA5LCA3ODAsIDE1ODcsIDE2MDUsIDE1ODEsIDc4MSwgMTU4NywgMTYwNSwgCisgICAgMTU4MSwgNzgxLCAxNTg3LCAxNjA1LCAxNTgwLCA3ODAsIDE1ODcsIDE2MDUsIDE2MDUsIDc4MSwgMTU4NywgMTYwNSwgCisgICAgMTYwNSwgNzgwLCAxNTg5LCAxNTgxLCAxNTgxLCA3ODEsIDE1ODksIDE1ODEsIDE1ODEsIDc4MCwgMTU4OSwgMTYwNSwgCisgICAgMTYwNSwgNzgwLCAxNTg4LCAxNTgxLCAxNjA1LCA3ODEsIDE1ODgsIDE1ODEsIDE2MDUsIDc4MCwgMTU4OCwgMTU4MCwgCisgICAgMTYxMCwgNzgwLCAxNTg4LCAxNjA1LCAxNTgyLCA3ODEsIDE1ODgsIDE2MDUsIDE1ODIsIDc4MCwgMTU4OCwgMTYwNSwgCisgICAgMTYwNSwgNzgxLCAxNTg4LCAxNjA1LCAxNjA1LCA3ODAsIDE1OTAsIDE1ODEsIDE2MDksIDc4MCwgMTU5MCwgMTU4MiwgCisgICAgMTYwNSwgNzgxLCAxNTkwLCAxNTgyLCAxNjA1LCA3ODAsIDE1OTEsIDE2MDUsIDE1ODEsIDc4MSwgMTU5MSwgMTYwNSwgCisgICAgMTU4MSwgNzgxLCAxNTkxLCAxNjA1LCAxNjA1LCA3ODAsIDE1OTEsIDE2MDUsIDE2MTAsIDc4MCwgMTU5MywgMTU4MCwgCisgICAgMTYwNSwgNzgwLCAxNTkzLCAxNjA1LCAxNjA1LCA3ODEsIDE1OTMsIDE2MDUsIDE2MDUsIDc4MCwgMTU5MywgMTYwNSwgCisgICAgMTYwOSwgNzgwLCAxNTk0LCAxNjA1LCAxNjA1LCA3ODAsIDE1OTQsIDE2MDUsIDE2MTAsIDc4MCwgMTU5NCwgMTYwNSwgCisgICAgMTYwOSwgNzgwLCAxNjAxLCAxNTgyLCAxNjA1LCA3ODEsIDE2MDEsIDE1ODIsIDE2MDUsIDc4MCwgMTYwMiwgMTYwNSwgCisgICAgMTU4MSwgNzgwLCAxNjAyLCAxNjA1LCAxNjA1LCA3ODAsIDE2MDQsIDE1ODEsIDE2MDUsIDc4MCwgMTYwNCwgMTU4MSwgCisgICAgMTYxMCwgNzgwLCAxNjA0LCAxNTgxLCAxNjA5LCA3ODEsIDE2MDQsIDE1ODAsIDE1ODAsIDc4MCwgMTYwNCwgMTU4MCwgCisgICAgMTU4MCwgNzgwLCAxNjA0LCAxNTgyLCAxNjA1LCA3ODEsIDE2MDQsIDE1ODIsIDE2MDUsIDc4MCwgMTYwNCwgMTYwNSwgCisgICAgMTU4MSwgNzgxLCAxNjA0LCAxNjA1LCAxNTgxLCA3ODEsIDE2MDUsIDE1ODEsIDE1ODAsIDc4MSwgMTYwNSwgMTU4MSwgCisgICAgMTYwNSwgNzgwLCAxNjA1LCAxNTgxLCAxNjEwLCA3ODEsIDE2MDUsIDE1ODAsIDE1ODEsIDc4MSwgMTYwNSwgMTU4MCwgCisgICAgMTYwNSwgNzgxLCAxNjA1LCAxNTgyLCAxNTgwLCA3ODEsIDE2MDUsIDE1ODIsIDE2MDUsIDc4MSwgMTYwNSwgMTU4MCwgCisgICAgMTU4MiwgNzgxLCAxNjA3LCAxNjA1LCAxNTgwLCA3ODEsIDE2MDcsIDE2MDUsIDE2MDUsIDc4MSwgMTYwNiwgMTU4MSwgCisgICAgMTYwNSwgNzgwLCAxNjA2LCAxNTgxLCAxNjA5LCA3ODAsIDE2MDYsIDE1ODAsIDE2MDUsIDc4MSwgMTYwNiwgMTU4MCwgCisgICAgMTYwNSwgNzgwLCAxNjA2LCAxNTgwLCAxNjA5LCA3ODAsIDE2MDYsIDE2MDUsIDE2MTAsIDc4MCwgMTYwNiwgMTYwNSwgCisgICAgMTYwOSwgNzgwLCAxNjEwLCAxNjA1LCAxNjA1LCA3ODEsIDE2MTAsIDE2MDUsIDE2MDUsIDc4MCwgMTU3NiwgMTU4MiwgCisgICAgMTYxMCwgNzgwLCAxNTc4LCAxNTgwLCAxNjEwLCA3ODAsIDE1NzgsIDE1ODAsIDE2MDksIDc4MCwgMTU3OCwgMTU4MiwgCisgICAgMTYxMCwgNzgwLCAxNTc4LCAxNTgyLCAxNjA5LCA3ODAsIDE1NzgsIDE2MDUsIDE2MTAsIDc4MCwgMTU3OCwgMTYwNSwgCisgICAgMTYwOSwgNzgwLCAxNTgwLCAxNjA1LCAxNjEwLCA3ODAsIDE1ODAsIDE1ODEsIDE2MDksIDc4MCwgMTU4MCwgMTYwNSwgCisgICAgMTYwOSwgNzgwLCAxNTg3LCAxNTgyLCAxNjA5LCA3ODAsIDE1ODksIDE1ODEsIDE2MTAsIDc4MCwgMTU4OCwgMTU4MSwgCisgICAgMTYxMCwgNzgwLCAxNTkwLCAxNTgxLCAxNjEwLCA3ODAsIDE2MDQsIDE1ODAsIDE2MTAsIDc4MCwgMTYwNCwgMTYwNSwgCisgICAgMTYxMCwgNzgwLCAxNjEwLCAxNTgxLCAxNjEwLCA3ODAsIDE2MTAsIDE1ODAsIDE2MTAsIDc4MCwgMTYxMCwgMTYwNSwgCisgICAgMTYxMCwgNzgwLCAxNjA1LCAxNjA1LCAxNjEwLCA3ODAsIDE2MDIsIDE2MDUsIDE2MTAsIDc4MCwgMTYwNiwgMTU4MSwgCisgICAgMTYxMCwgNzgxLCAxNjAyLCAxNjA1LCAxNTgxLCA3ODEsIDE2MDQsIDE1ODEsIDE2MDUsIDc4MCwgMTU5MywgMTYwNSwgCisgICAgMTYxMCwgNzgwLCAxNjAzLCAxNjA1LCAxNjEwLCA3ODEsIDE2MDYsIDE1ODAsIDE1ODEsIDc4MCwgMTYwNSwgMTU4MiwgCisgICAgMTYxMCwgNzgxLCAxNjA0LCAxNTgwLCAxNjA1LCA3ODAsIDE2MDMsIDE2MDUsIDE2MDUsIDc4MCwgMTYwNCwgMTU4MCwgCisgICAgMTYwNSwgNzgwLCAxNjA2LCAxNTgwLCAxNTgxLCA3ODAsIDE1ODAsIDE1ODEsIDE2MTAsIDc4MCwgMTU4MSwgMTU4MCwgCisgICAgMTYxMCwgNzgwLCAxNjA1LCAxNTgwLCAxNjEwLCA3ODAsIDE2MDEsIDE2MDUsIDE2MTAsIDc4MCwgMTU3NiwgMTU4MSwgCisgICAgMTYxMCwgNzgxLCAxNjAzLCAxNjA1LCAxNjA1LCA3ODEsIDE1OTMsIDE1ODAsIDE2MDUsIDc4MSwgMTU4OSwgMTYwNSwgCisgICAgMTYwNSwgNzgwLCAxNTg3LCAxNTgyLCAxNjEwLCA3ODAsIDE2MDYsIDE1ODAsIDE2MTAsIDc3OSwgMTU4OSwgMTYwNCwgCisgICAgMTc0NiwgNzc5LCAxNjAyLCAxNjA0LCAxNzQ2LCAxMDM1LCAxNTc1LCAxNjA0LCAxNjA0LCAxNjA3LCAxMDM1LCAxNTc1LCAKKyAgICAxNjAzLCAxNTc2LCAxNTg1LCAxMDM1LCAxNjA1LCAxNTgxLCAxNjA1LCAxNTgzLCAxMDM1LCAxNTg5LCAxNjA0LCAxNTkzLCAKKyAgICAxNjA1LCAxMDM1LCAxNTg1LCAxNTg3LCAxNjA4LCAxNjA0LCAxMDM1LCAxNTkzLCAxNjA0LCAxNjEwLCAxNjA3LCAxMDM1LCAKKyAgICAxNjA4LCAxNTg3LCAxNjA0LCAxNjA1LCA3NzksIDE1ODksIDE2MDQsIDE2MDksIDQ2MTksIDE1ODksIDE2MDQsIDE2MDksIAorICAgIDMyLCAxNTc1LCAxNjA0LCAxNjA0LCAxNjA3LCAzMiwgMTU5MywgMTYwNCwgMTYxMCwgMTYwNywgMzIsIDE2MDgsIDE1ODcsIAorICAgIDE2MDQsIDE2MDUsIDIwNTksIDE1ODAsIDE2MDQsIDMyLCAxNTgwLCAxNjA0LCAxNTc1LCAxNjA0LCAxNjA3LCAxMDM1LCAKKyAgICAxNTg1LCAxNzQwLCAxNTc1LCAxNjA0LCAyNjUsIDQ0LCAyNjUsIDEyMjg5LCAyNjUsIDEyMjkwLCAyNjUsIDU4LCAyNjUsIAorICAgIDU5LCAyNjUsIDMzLCAyNjUsIDYzLCAyNjUsIDEyMzEwLCAyNjUsIDEyMzExLCAyNjUsIDgyMzAsIDI2NSwgODIyOSwgMjY1LCAKKyAgICA4MjEyLCAyNjUsIDgyMTEsIDI2NSwgOTUsIDI2NSwgOTUsIDI2NSwgNDAsIDI2NSwgNDEsIDI2NSwgMTIzLCAyNjUsIDEyNSwgCisgICAgMjY1LCAxMjMwOCwgMjY1LCAxMjMwOSwgMjY1LCAxMjMwNCwgMjY1LCAxMjMwNSwgMjY1LCAxMjI5OCwgMjY1LCAxMjI5OSwgCisgICAgMjY1LCAxMjI5NiwgMjY1LCAxMjI5NywgMjY1LCAxMjMwMCwgMjY1LCAxMjMwMSwgMjY1LCAxMjMwMiwgMjY1LCAxMjMwMywgCisgICAgMjY1LCA5MSwgMjY1LCA5MywgMjU4LCA4MjU0LCAyNTgsIDgyNTQsIDI1OCwgODI1NCwgMjU4LCA4MjU0LCAyNTgsIDk1LCAKKyAgICAyNTgsIDk1LCAyNTgsIDk1LCAyNzEsIDQ0LCAyNzEsIDEyMjg5LCAyNzEsIDQ2LCAyNzEsIDU5LCAyNzEsIDU4LCAyNzEsIAorICAgIDYzLCAyNzEsIDMzLCAyNzEsIDgyMTIsIDI3MSwgNDAsIDI3MSwgNDEsIDI3MSwgMTIzLCAyNzEsIDEyNSwgMjcxLCAxMjMwOCwgCisgICAgMjcxLCAxMjMwOSwgMjcxLCAzNSwgMjcxLCAzOCwgMjcxLCA0MiwgMjcxLCA0MywgMjcxLCA0NSwgMjcxLCA2MCwgMjcxLCAKKyAgICA2MiwgMjcxLCA2MSwgMjcxLCA5MiwgMjcxLCAzNiwgMjcxLCAzNywgMjcxLCA2NCwgNTIzLCAzMiwgMTYxMSwgNTI2LCAKKyAgICAxNjAwLCAxNjExLCA1MjMsIDMyLCAxNjEyLCA1MjMsIDMyLCAxNjEzLCA1MjMsIDMyLCAxNjE0LCA1MjYsIDE2MDAsIDE2MTQsIAorICAgIDUyMywgMzIsIDE2MTUsIDUyNiwgMTYwMCwgMTYxNSwgNTIzLCAzMiwgMTYxNiwgNTI2LCAxNjAwLCAxNjE2LCA1MjMsIDMyLCAKKyAgICAxNjE3LCA1MjYsIDE2MDAsIDE2MTcsIDUyMywgMzIsIDE2MTgsIDUyNiwgMTYwMCwgMTYxOCwgMjY3LCAxNTY5LCAyNjcsIAorICAgIDE1NzAsIDI2OCwgMTU3MCwgMjY3LCAxNTcxLCAyNjgsIDE1NzEsIDI2NywgMTU3MiwgMjY4LCAxNTcyLCAyNjcsIDE1NzMsIAorICAgIDI2OCwgMTU3MywgMjY3LCAxNTc0LCAyNjgsIDE1NzQsIDI2OSwgMTU3NCwgMjcwLCAxNTc0LCAyNjcsIDE1NzUsIDI2OCwgCisgICAgMTU3NSwgMjY3LCAxNTc2LCAyNjgsIDE1NzYsIDI2OSwgMTU3NiwgMjcwLCAxNTc2LCAyNjcsIDE1NzcsIDI2OCwgMTU3NywgCisgICAgMjY3LCAxNTc4LCAyNjgsIDE1NzgsIDI2OSwgMTU3OCwgMjcwLCAxNTc4LCAyNjcsIDE1NzksIDI2OCwgMTU3OSwgMjY5LCAKKyAgICAxNTc5LCAyNzAsIDE1NzksIDI2NywgMTU4MCwgMjY4LCAxNTgwLCAyNjksIDE1ODAsIDI3MCwgMTU4MCwgMjY3LCAxNTgxLCAKKyAgICAyNjgsIDE1ODEsIDI2OSwgMTU4MSwgMjcwLCAxNTgxLCAyNjcsIDE1ODIsIDI2OCwgMTU4MiwgMjY5LCAxNTgyLCAyNzAsIAorICAgIDE1ODIsIDI2NywgMTU4MywgMjY4LCAxNTgzLCAyNjcsIDE1ODQsIDI2OCwgMTU4NCwgMjY3LCAxNTg1LCAyNjgsIDE1ODUsIAorICAgIDI2NywgMTU4NiwgMjY4LCAxNTg2LCAyNjcsIDE1ODcsIDI2OCwgMTU4NywgMjY5LCAxNTg3LCAyNzAsIDE1ODcsIDI2NywgCisgICAgMTU4OCwgMjY4LCAxNTg4LCAyNjksIDE1ODgsIDI3MCwgMTU4OCwgMjY3LCAxNTg5LCAyNjgsIDE1ODksIDI2OSwgMTU4OSwgCisgICAgMjcwLCAxNTg5LCAyNjcsIDE1OTAsIDI2OCwgMTU5MCwgMjY5LCAxNTkwLCAyNzAsIDE1OTAsIDI2NywgMTU5MSwgMjY4LCAKKyAgICAxNTkxLCAyNjksIDE1OTEsIDI3MCwgMTU5MSwgMjY3LCAxNTkyLCAyNjgsIDE1OTIsIDI2OSwgMTU5MiwgMjcwLCAxNTkyLCAKKyAgICAyNjcsIDE1OTMsIDI2OCwgMTU5MywgMjY5LCAxNTkzLCAyNzAsIDE1OTMsIDI2NywgMTU5NCwgMjY4LCAxNTk0LCAyNjksIAorICAgIDE1OTQsIDI3MCwgMTU5NCwgMjY3LCAxNjAxLCAyNjgsIDE2MDEsIDI2OSwgMTYwMSwgMjcwLCAxNjAxLCAyNjcsIDE2MDIsIAorICAgIDI2OCwgMTYwMiwgMjY5LCAxNjAyLCAyNzAsIDE2MDIsIDI2NywgMTYwMywgMjY4LCAxNjAzLCAyNjksIDE2MDMsIDI3MCwgCisgICAgMTYwMywgMjY3LCAxNjA0LCAyNjgsIDE2MDQsIDI2OSwgMTYwNCwgMjcwLCAxNjA0LCAyNjcsIDE2MDUsIDI2OCwgMTYwNSwgCisgICAgMjY5LCAxNjA1LCAyNzAsIDE2MDUsIDI2NywgMTYwNiwgMjY4LCAxNjA2LCAyNjksIDE2MDYsIDI3MCwgMTYwNiwgMjY3LCAKKyAgICAxNjA3LCAyNjgsIDE2MDcsIDI2OSwgMTYwNywgMjcwLCAxNjA3LCAyNjcsIDE2MDgsIDI2OCwgMTYwOCwgMjY3LCAxNjA5LCAKKyAgICAyNjgsIDE2MDksIDI2NywgMTYxMCwgMjY4LCAxNjEwLCAyNjksIDE2MTAsIDI3MCwgMTYxMCwgNTIzLCAxNjA0LCAxNTcwLCAKKyAgICA1MjQsIDE2MDQsIDE1NzAsIDUyMywgMTYwNCwgMTU3MSwgNTI0LCAxNjA0LCAxNTcxLCA1MjMsIDE2MDQsIDE1NzMsIDUyNCwgCisgICAgMTYwNCwgMTU3MywgNTIzLCAxNjA0LCAxNTc1LCA1MjQsIDE2MDQsIDE1NzUsIDI2NCwgMzMsIDI2NCwgMzQsIDI2NCwgMzUsIAorICAgIDI2NCwgMzYsIDI2NCwgMzcsIDI2NCwgMzgsIDI2NCwgMzksIDI2NCwgNDAsIDI2NCwgNDEsIDI2NCwgNDIsIDI2NCwgNDMsIAorICAgIDI2NCwgNDQsIDI2NCwgNDUsIDI2NCwgNDYsIDI2NCwgNDcsIDI2NCwgNDgsIDI2NCwgNDksIDI2NCwgNTAsIDI2NCwgNTEsIAorICAgIDI2NCwgNTIsIDI2NCwgNTMsIDI2NCwgNTQsIDI2NCwgNTUsIDI2NCwgNTYsIDI2NCwgNTcsIDI2NCwgNTgsIDI2NCwgNTksIAorICAgIDI2NCwgNjAsIDI2NCwgNjEsIDI2NCwgNjIsIDI2NCwgNjMsIDI2NCwgNjQsIDI2NCwgNjUsIDI2NCwgNjYsIDI2NCwgNjcsIAorICAgIDI2NCwgNjgsIDI2NCwgNjksIDI2NCwgNzAsIDI2NCwgNzEsIDI2NCwgNzIsIDI2NCwgNzMsIDI2NCwgNzQsIDI2NCwgNzUsIAorICAgIDI2NCwgNzYsIDI2NCwgNzcsIDI2NCwgNzgsIDI2NCwgNzksIDI2NCwgODAsIDI2NCwgODEsIDI2NCwgODIsIDI2NCwgODMsIAorICAgIDI2NCwgODQsIDI2NCwgODUsIDI2NCwgODYsIDI2NCwgODcsIDI2NCwgODgsIDI2NCwgODksIDI2NCwgOTAsIDI2NCwgOTEsIAorICAgIDI2NCwgOTIsIDI2NCwgOTMsIDI2NCwgOTQsIDI2NCwgOTUsIDI2NCwgOTYsIDI2NCwgOTcsIDI2NCwgOTgsIDI2NCwgOTksIAorICAgIDI2NCwgMTAwLCAyNjQsIDEwMSwgMjY0LCAxMDIsIDI2NCwgMTAzLCAyNjQsIDEwNCwgMjY0LCAxMDUsIDI2NCwgMTA2LCAKKyAgICAyNjQsIDEwNywgMjY0LCAxMDgsIDI2NCwgMTA5LCAyNjQsIDExMCwgMjY0LCAxMTEsIDI2NCwgMTEyLCAyNjQsIDExMywgCisgICAgMjY0LCAxMTQsIDI2NCwgMTE1LCAyNjQsIDExNiwgMjY0LCAxMTcsIDI2NCwgMTE4LCAyNjQsIDExOSwgMjY0LCAxMjAsIAorICAgIDI2NCwgMTIxLCAyNjQsIDEyMiwgMjY0LCAxMjMsIDI2NCwgMTI0LCAyNjQsIDEyNSwgMjY0LCAxMjYsIDI2NCwgMTA2MjksIAorICAgIDI2NCwgMTA2MzAsIDI3MiwgMTIyOTAsIDI3MiwgMTIzMDAsIDI3MiwgMTIzMDEsIDI3MiwgMTIyODksIDI3MiwgMTI1MzksIAorICAgIDI3MiwgMTI1MzAsIDI3MiwgMTI0NDksIDI3MiwgMTI0NTEsIDI3MiwgMTI0NTMsIDI3MiwgMTI0NTUsIDI3MiwgMTI0NTcsIAorICAgIDI3MiwgMTI1MTUsIDI3MiwgMTI1MTcsIDI3MiwgMTI1MTksIDI3MiwgMTI0ODMsIDI3MiwgMTI1NDAsIDI3MiwgMTI0NTAsIAorICAgIDI3MiwgMTI0NTIsIDI3MiwgMTI0NTQsIDI3MiwgMTI0NTYsIDI3MiwgMTI0NTgsIDI3MiwgMTI0NTksIDI3MiwgMTI0NjEsIAorICAgIDI3MiwgMTI0NjMsIDI3MiwgMTI0NjUsIDI3MiwgMTI0NjcsIDI3MiwgMTI0NjksIDI3MiwgMTI0NzEsIDI3MiwgMTI0NzMsIAorICAgIDI3MiwgMTI0NzUsIDI3MiwgMTI0NzcsIDI3MiwgMTI0NzksIDI3MiwgMTI0ODEsIDI3MiwgMTI0ODQsIDI3MiwgMTI0ODYsIAorICAgIDI3MiwgMTI0ODgsIDI3MiwgMTI0OTAsIDI3MiwgMTI0OTEsIDI3MiwgMTI0OTIsIDI3MiwgMTI0OTMsIDI3MiwgMTI0OTQsIAorICAgIDI3MiwgMTI0OTUsIDI3MiwgMTI0OTgsIDI3MiwgMTI1MDEsIDI3MiwgMTI1MDQsIDI3MiwgMTI1MDcsIDI3MiwgMTI1MTAsIAorICAgIDI3MiwgMTI1MTEsIDI3MiwgMTI1MTIsIDI3MiwgMTI1MTMsIDI3MiwgMTI1MTQsIDI3MiwgMTI1MTYsIDI3MiwgMTI1MTgsIAorICAgIDI3MiwgMTI1MjAsIDI3MiwgMTI1MjEsIDI3MiwgMTI1MjIsIDI3MiwgMTI1MjMsIDI3MiwgMTI1MjQsIDI3MiwgMTI1MjUsIAorICAgIDI3MiwgMTI1MjcsIDI3MiwgMTI1MzEsIDI3MiwgMTI0NDEsIDI3MiwgMTI0NDIsIDI3MiwgMTI2NDQsIDI3MiwgMTI1OTMsIAorICAgIDI3MiwgMTI1OTQsIDI3MiwgMTI1OTUsIDI3MiwgMTI1OTYsIDI3MiwgMTI1OTcsIDI3MiwgMTI1OTgsIDI3MiwgMTI1OTksIAorICAgIDI3MiwgMTI2MDAsIDI3MiwgMTI2MDEsIDI3MiwgMTI2MDIsIDI3MiwgMTI2MDMsIDI3MiwgMTI2MDQsIDI3MiwgMTI2MDUsIAorICAgIDI3MiwgMTI2MDYsIDI3MiwgMTI2MDcsIDI3MiwgMTI2MDgsIDI3MiwgMTI2MDksIDI3MiwgMTI2MTAsIDI3MiwgMTI2MTEsIAorICAgIDI3MiwgMTI2MTIsIDI3MiwgMTI2MTMsIDI3MiwgMTI2MTQsIDI3MiwgMTI2MTUsIDI3MiwgMTI2MTYsIDI3MiwgMTI2MTcsIAorICAgIDI3MiwgMTI2MTgsIDI3MiwgMTI2MTksIDI3MiwgMTI2MjAsIDI3MiwgMTI2MjEsIDI3MiwgMTI2MjIsIDI3MiwgMTI2MjMsIAorICAgIDI3MiwgMTI2MjQsIDI3MiwgMTI2MjUsIDI3MiwgMTI2MjYsIDI3MiwgMTI2MjcsIDI3MiwgMTI2MjgsIDI3MiwgMTI2MjksIAorICAgIDI3MiwgMTI2MzAsIDI3MiwgMTI2MzEsIDI3MiwgMTI2MzIsIDI3MiwgMTI2MzMsIDI3MiwgMTI2MzQsIDI3MiwgMTI2MzUsIAorICAgIDI3MiwgMTI2MzYsIDI3MiwgMTI2MzcsIDI3MiwgMTI2MzgsIDI3MiwgMTI2MzksIDI3MiwgMTI2NDAsIDI3MiwgMTI2NDEsIAorICAgIDI3MiwgMTI2NDIsIDI3MiwgMTI2NDMsIDI2NCwgMTYyLCAyNjQsIDE2MywgMjY0LCAxNzIsIDI2NCwgMTc1LCAyNjQsIDE2NiwgCisgICAgMjY0LCAxNjUsIDI2NCwgODM2MSwgMjcyLCA5NDc0LCAyNzIsIDg1OTIsIDI3MiwgODU5MywgMjcyLCA4NTk0LCAyNzIsIAorICAgIDg1OTUsIDI3MiwgOTYzMiwgMjcyLCA5Njc1LCA1MTIsIDY5Nzg1LCA2OTgxOCwgNTEyLCA2OTc4NywgNjk4MTgsIDUxMiwgCisgICAgNjk3OTcsIDY5ODE4LCA1MTIsIDExOTEyNywgMTE5MTQxLCA1MTIsIDExOTEyOCwgMTE5MTQxLCA1MTIsIDExOTEzNSwgCiAgICAgMTE5MTUwLCA1MTIsIDExOTEzNSwgMTE5MTUxLCA1MTIsIDExOTEzNSwgMTE5MTUyLCA1MTIsIDExOTEzNSwgMTE5MTUzLCAKICAgICA1MTIsIDExOTEzNSwgMTE5MTU0LCA1MTIsIDExOTIyNSwgMTE5MTQxLCA1MTIsIDExOTIyNiwgMTE5MTQxLCA1MTIsIAogICAgIDExOTIyNywgMTE5MTUwLCA1MTIsIDExOTIyOCwgMTE5MTUwLCA1MTIsIDExOTIyNywgMTE5MTUxLCA1MTIsIDExOTIyOCwgCkBAIC0zMDQ5LDcxICszNDA3LDkxIEBACiAgICAgMjYyLCA0OSwgMjYyLCA1MCwgMjYyLCA1MSwgMjYyLCA1MiwgMjYyLCA1MywgMjYyLCA1NCwgMjYyLCA1NSwgMjYyLCA1NiwgCiAgICAgMjYyLCA1NywgMjYyLCA0OCwgMjYyLCA0OSwgMjYyLCA1MCwgMjYyLCA1MSwgMjYyLCA1MiwgMjYyLCA1MywgMjYyLCA1NCwgCiAgICAgMjYyLCA1NSwgMjYyLCA1NiwgMjYyLCA1NywgMjYyLCA0OCwgMjYyLCA0OSwgMjYyLCA1MCwgMjYyLCA1MSwgMjYyLCA1MiwgCi0gICAgMjYyLCA1MywgMjYyLCA1NCwgMjYyLCA1NSwgMjYyLCA1NiwgMjYyLCA1NywgMjU2LCAyMDAyOSwgMjU2LCAyMDAyNCwgMjU2LCAKLSAgICAyMDAzMywgMjU2LCAxMzEzNjIsIDI1NiwgMjAzMjAsIDI1NiwgMjAzOTgsIDI1NiwgMjA0MTEsIDI1NiwgMjA0ODIsIDI1NiwgCi0gICAgMjA2MDIsIDI1NiwgMjA2MzMsIDI1NiwgMjA3MTEsIDI1NiwgMjA2ODcsIDI1NiwgMTM0NzAsIDI1NiwgMTMyNjY2LCAyNTYsIAotICAgIDIwODEzLCAyNTYsIDIwODIwLCAyNTYsIDIwODM2LCAyNTYsIDIwODU1LCAyNTYsIDEzMjM4MCwgMjU2LCAxMzQ5NywgMjU2LCAKLSAgICAyMDgzOSwgMjU2LCAyMDg3NywgMjU2LCAxMzI0MjcsIDI1NiwgMjA4ODcsIDI1NiwgMjA5MDAsIDI1NiwgMjAxNzIsIDI1NiwgCi0gICAgMjA5MDgsIDI1NiwgMjA5MTcsIDI1NiwgMTY4NDE1LCAyNTYsIDIwOTgxLCAyNTYsIDIwOTk1LCAyNTYsIDEzNTM1LCAyNTYsIAotICAgIDIxMDUxLCAyNTYsIDIxMDYyLCAyNTYsIDIxMTA2LCAyNTYsIDIxMTExLCAyNTYsIDEzNTg5LCAyNTYsIDIxMTkxLCAyNTYsIAotICAgIDIxMTkzLCAyNTYsIDIxMjIwLCAyNTYsIDIxMjQyLCAyNTYsIDIxMjUzLCAyNTYsIDIxMjU0LCAyNTYsIDIxMjcxLCAyNTYsIAotICAgIDIxMzIxLCAyNTYsIDIxMzI5LCAyNTYsIDIxMzM4LCAyNTYsIDIxMzYzLCAyNTYsIDIxMzczLCAyNTYsIDIxMzc1LCAyNTYsIAotICAgIDIxMzc1LCAyNTYsIDIxMzc1LCAyNTYsIDEzMzY3NiwgMjU2LCAyODc4NCwgMjU2LCAyMTQ1MCwgMjU2LCAyMTQ3MSwgMjU2LCAKLSAgICAxMzM5ODcsIDI1NiwgMjE0ODMsIDI1NiwgMjE0ODksIDI1NiwgMjE1MTAsIDI1NiwgMjE2NjIsIDI1NiwgMjE1NjAsIDI1NiwgCi0gICAgMjE1NzYsIDI1NiwgMjE2MDgsIDI1NiwgMjE2NjYsIDI1NiwgMjE3NTAsIDI1NiwgMjE3NzYsIDI1NiwgMjE4NDMsIDI1NiwgCi0gICAgMjE4NTksIDI1NiwgMjE4OTIsIDI1NiwgMjE4OTIsIDI1NiwgMjE5MTMsIDI1NiwgMjE5MzEsIDI1NiwgMjE5MzksIDI1NiwgCi0gICAgMjE5NTQsIDI1NiwgMjIyOTQsIDI1NiwgMjIwMjIsIDI1NiwgMjIyOTUsIDI1NiwgMjIwOTcsIDI1NiwgMjIxMzIsIDI1NiwgCi0gICAgMjA5OTksIDI1NiwgMjI3NjYsIDI1NiwgMjI0NzgsIDI1NiwgMjI1MTYsIDI1NiwgMjI1NDEsIDI1NiwgMjI0MTEsIDI1NiwgCi0gICAgMjI1NzgsIDI1NiwgMjI1NzcsIDI1NiwgMjI3MDAsIDI1NiwgMTM2NDIwLCAyNTYsIDIyNzcwLCAyNTYsIDIyNzc1LCAyNTYsIAotICAgIDIyNzkwLCAyNTYsIDIyODEwLCAyNTYsIDIyODE4LCAyNTYsIDIyODgyLCAyNTYsIDEzNjg3MiwgMjU2LCAxMzY5MzgsIDI1NiwgCi0gICAgMjMwMjAsIDI1NiwgMjMwNjcsIDI1NiwgMjMwNzksIDI1NiwgMjMwMDAsIDI1NiwgMjMxNDIsIDI1NiwgMTQwNjIsIDI1NiwgCi0gICAgMTQwNzYsIDI1NiwgMjMzMDQsIDI1NiwgMjMzNTgsIDI1NiwgMjMzNTgsIDI1NiwgMTM3NjcyLCAyNTYsIDIzNDkxLCAyNTYsIAotICAgIDIzNTEyLCAyNTYsIDIzNTI3LCAyNTYsIDIzNTM5LCAyNTYsIDEzODAwOCwgMjU2LCAyMzU1MSwgMjU2LCAyMzU1OCwgMjU2LCAKLSAgICAyNDQwMywgMjU2LCAyMzU4NiwgMjU2LCAxNDIwOSwgMjU2LCAyMzY0OCwgMjU2LCAyMzY2MiwgMjU2LCAyMzc0NCwgMjU2LCAKLSAgICAyMzY5MywgMjU2LCAxMzg3MjQsIDI1NiwgMjM4NzUsIDI1NiwgMTM4NzI2LCAyNTYsIDIzOTE4LCAyNTYsIDIzOTE1LCAyNTYsIAotICAgIDIzOTMyLCAyNTYsIDI0MDMzLCAyNTYsIDI0MDM0LCAyNTYsIDE0MzgzLCAyNTYsIDI0MDYxLCAyNTYsIDI0MTA0LCAyNTYsIAotICAgIDI0MTI1LCAyNTYsIDI0MTY5LCAyNTYsIDE0NDM0LCAyNTYsIDEzOTY1MSwgMjU2LCAxNDQ2MCwgMjU2LCAyNDI0MCwgMjU2LCAKLSAgICAyNDI0MywgMjU2LCAyNDI0NiwgMjU2LCAyNDI2NiwgMjU2LCAxNzI5NDYsIDI1NiwgMjQzMTgsIDI1NiwgMTQwMDgxLCAyNTYsIAotICAgIDE0MDA4MSwgMjU2LCAzMzI4MSwgMjU2LCAyNDM1NCwgMjU2LCAyNDM1NCwgMjU2LCAxNDUzNSwgMjU2LCAxNDQwNTYsIDI1NiwgCi0gICAgMTU2MTIyLCAyNTYsIDI0NDE4LCAyNTYsIDI0NDI3LCAyNTYsIDE0NTYzLCAyNTYsIDI0NDc0LCAyNTYsIDI0NTI1LCAyNTYsIAotICAgIDI0NTM1LCAyNTYsIDI0NTY5LCAyNTYsIDI0NzA1LCAyNTYsIDE0NjUwLCAyNTYsIDE0NjIwLCAyNTYsIDI0NzI0LCAyNTYsIAotICAgIDE0MTAxMiwgMjU2LCAyNDc3NSwgMjU2LCAyNDkwNCwgMjU2LCAyNDkwOCwgMjU2LCAyNDkxMCwgMjU2LCAyNDkwOCwgMjU2LCAKLSAgICAyNDk1NCwgMjU2LCAyNDk3NCwgMjU2LCAyNTAxMCwgMjU2LCAyNDk5NiwgMjU2LCAyNTAwNywgMjU2LCAyNTA1NCwgMjU2LCAKLSAgICAyNTA3NCwgMjU2LCAyNTA3OCwgMjU2LCAyNTEwNCwgMjU2LCAyNTExNSwgMjU2LCAyNTE4MSwgMjU2LCAyNTI2NSwgMjU2LCAKLSAgICAyNTMwMCwgMjU2LCAyNTQyNCwgMjU2LCAxNDIwOTIsIDI1NiwgMjU0MDUsIDI1NiwgMjUzNDAsIDI1NiwgMjU0NDgsIDI1NiwgCi0gICAgMjU0NzUsIDI1NiwgMjU1NzIsIDI1NiwgMTQyMzIxLCAyNTYsIDI1NjM0LCAyNTYsIDI1NTQxLCAyNTYsIDI1NTEzLCAyNTYsIAotICAgIDE0ODk0LCAyNTYsIDI1NzA1LCAyNTYsIDI1NzI2LCAyNTYsIDI1NzU3LCAyNTYsIDI1NzE5LCAyNTYsIDE0OTU2LCAyNTYsIAotICAgIDI1OTM1LCAyNTYsIDI1OTY0LCAyNTYsIDE0MzM3MCwgMjU2LCAyNjA4MywgMjU2LCAyNjM2MCwgMjU2LCAyNjE4NSwgMjU2LCAKLSAgICAxNTEyOSwgMjU2LCAyNjI1NywgMjU2LCAxNTExMiwgMjU2LCAxNTA3NiwgMjU2LCAyMDg4MiwgMjU2LCAyMDg4NSwgMjU2LCAKLSAgICAyNjM2OCwgMjU2LCAyNjI2OCwgMjU2LCAzMjk0MSwgMjU2LCAxNzM2OSwgMjU2LCAyNjM5MSwgMjU2LCAyNjM5NSwgMjU2LCAKLSAgICAyNjQwMSwgMjU2LCAyNjQ2MiwgMjU2LCAyNjQ1MSwgMjU2LCAxNDQzMjMsIDI1NiwgMTUxNzcsIDI1NiwgMjY2MTgsIDI1NiwgCi0gICAgMjY1MDEsIDI1NiwgMjY3MDYsIDI1NiwgMjY3NTcsIDI1NiwgMTQ0NDkzLCAyNTYsIDI2NzY2LCAyNTYsIDI2NjU1LCAyNTYsIAotICAgIDI2OTAwLCAyNTYsIDE1MjYxLCAyNTYsIDI2OTQ2LCAyNTYsIDI3MDQzLCAyNTYsIDI3MTE0LCAyNTYsIDI3MzA0LCAyNTYsIAotICAgIDE0NTA1OSwgMjU2LCAyNzM1NSwgMjU2LCAxNTM4NCwgMjU2LCAyNzQyNSwgMjU2LCAxNDU1NzUsIDI1NiwgMjc0NzYsIDI1NiwgCi0gICAgMTU0MzgsIDI1NiwgMjc1MDYsIDI1NiwgMjc1NTEsIDI1NiwgMjc1NzgsIDI1NiwgMjc1NzksIDI1NiwgMTQ2MDYxLCAyNTYsIAotICAgIDEzODUwNywgMjU2LCAxNDYxNzAsIDI1NiwgMjc3MjYsIDI1NiwgMTQ2NjIwLCAyNTYsIDI3ODM5LCAyNTYsIDI3ODUzLCAKLSAgICAyNTYsIDI3NzUxLCAyNTYsIDI3OTI2LCAyNTYsIDI3OTY2LCAyNTYsIDI4MDIzLCAyNTYsIDI3OTY5LCAyNTYsIDI4MDA5LCAKLSAgICAyNTYsIDI4MDI0LCAyNTYsIDI4MDM3LCAyNTYsIDE0NjcxOCwgMjU2LCAyNzk1NiwgMjU2LCAyODIwNywgMjU2LCAyODI3MCwgCi0gICAgMjU2LCAxNTY2NywgMjU2LCAyODM2MywgMjU2LCAyODM1OSwgMjU2LCAxNDcxNTMsIDI1NiwgMjgxNTMsIDI1NiwgMjg1MjYsIAotICAgIDI1NiwgMTQ3Mjk0LCAyNTYsIDE0NzM0MiwgMjU2LCAyODYxNCwgMjU2LCAyODcyOSwgMjU2LCAyODcwMiwgMjU2LCAyODY5OSwgCi0gICAgMjU2LCAxNTc2NiwgMjU2LCAyODc0NiwgMjU2LCAyODc5NywgMjU2LCAyODc5MSwgMjU2LCAyODg0NSwgMjU2LCAxMzIzODksIAotICAgIDI1NiwgMjg5OTcsIDI1NiwgMTQ4MDY3LCAyNTYsIDI5MDg0LCAyNTYsIDE0ODM5NSwgMjU2LCAyOTIyNCwgMjU2LCAyOTIzNywgCi0gICAgMjU2LCAyOTI2NCwgMjU2LCAxNDkwMDAsIDI1NiwgMjkzMTIsIDI1NiwgMjkzMzMsIDI1NiwgMTQ5MzAxLCAyNTYsIAotICAgIDE0OTUyNCwgMjU2LCAyOTU2MiwgMjU2LCAyOTU3OSwgMjU2LCAxNjA0NCwgMjU2LCAyOTYwNSwgMjU2LCAxNjA1NiwgMjU2LCAKLSAgICAxNjA1NiwgMjU2LCAyOTc2NywgMjU2LCAyOTc4OCwgMjU2LCAyOTgwOSwgMjU2LCAyOTgyOSwgMjU2LCAyOTg5OCwgMjU2LCAKLSAgICAxNjE1NSwgMjU2LCAyOTk4OCwgMjU2LCAxNTA1ODIsIDI1NiwgMzAwMTQsIDI1NiwgMTUwNjc0LCAyNTYsIDMwMDY0LCAyNTYsIAotICAgIDEzOTY3OSwgMjU2LCAzMDIyNCwgMjU2LCAxNTE0NTcsIDI1NiwgMTUxNDgwLCAyNTYsIDE1MTYyMCwgMjU2LCAxNjM4MCwgCi0gICAgMjU2LCAxNjM5MiwgMjU2LCAzMDQ1MiwgMjU2LCAxNTE3OTUsIDI1NiwgMTUxNzk0LCAyNTYsIDE1MTgzMywgMjU2LCAKLSAgICAxNTE4NTksIDI1NiwgMzA0OTQsIDI1NiwgMzA0OTUsIDI1NiwgMzA0OTUsIDI1NiwgMzA1MzgsIDI1NiwgMTY0NDEsIDI1NiwgCi0gICAgMzA2MDMsIDI1NiwgMTY0NTQsIDI1NiwgMTY1MzQsIDI1NiwgMTUyNjA1LCAyNTYsIDMwNzk4LCAyNTYsIDMwODYwLCAyNTYsIAotICAgIDMwOTI0LCAyNTYsIDE2NjExLCAyNTYsIDE1MzEyNiwgMjU2LCAzMTA2MiwgMjU2LCAxNTMyNDIsIDI1NiwgMTUzMjg1LCAKLSAgICAyNTYsIDMxMTE5LCAyNTYsIDMxMjExLCAyNTYsIDE2Njg3LCAyNTYsIDMxMjk2LCAyNTYsIDMxMzA2LCAyNTYsIDMxMzExLCAKLSAgICAyNTYsIDE1Mzk4MCwgMjU2LCAxNTQyNzksIDI1NiwgMTU0Mjc5LCAyNTYsIDMxNDcwLCAyNTYsIDE2ODk4LCAyNTYsIAotICAgIDE1NDUzOSwgMjU2LCAzMTY4NiwgMjU2LCAzMTY4OSwgMjU2LCAxNjkzNSwgMjU2LCAxNTQ3NTIsIDI1NiwgMzE5NTQsIDI1NiwgCi0gICAgMTcwNTYsIDI1NiwgMzE5NzYsIDI1NiwgMzE5NzEsIDI1NiwgMzIwMDAsIDI1NiwgMTU1NTI2LCAyNTYsIDMyMDk5LCAyNTYsIAotICAgIDE3MTUzLCAyNTYsIDMyMTk5LCAyNTYsIDMyMjU4LCAyNTYsIDMyMzI1LCAyNTYsIDE3MjA0LCAyNTYsIDE1NjIwMCwgMjU2LCAKLSAgICAxNTYyMzEsIDI1NiwgMTcyNDEsIDI1NiwgMTU2Mzc3LCAyNTYsIDMyNjM0LCAyNTYsIDE1NjQ3OCwgMjU2LCAzMjY2MSwgCi0gICAgMjU2LCAzMjc2MiwgMjU2LCAzMjc3MywgMjU2LCAxNTY4OTAsIDI1NiwgMTU2OTYzLCAyNTYsIDMyODY0LCAyNTYsIAorICAgIDI2MiwgNTMsIDI2MiwgNTQsIDI2MiwgNTUsIDI2MiwgNTYsIDI2MiwgNTcsIDUxNCwgNDgsIDQ2LCA1MTQsIDQ4LCA0NCwgCisgICAgNTE0LCA0OSwgNDQsIDUxNCwgNTAsIDQ0LCA1MTQsIDUxLCA0NCwgNTE0LCA1MiwgNDQsIDUxNCwgNTMsIDQ0LCA1MTQsIDU0LCAKKyAgICA0NCwgNTE0LCA1NSwgNDQsIDUxNCwgNTYsIDQ0LCA1MTQsIDU3LCA0NCwgNzcwLCA0MCwgNjUsIDQxLCA3NzAsIDQwLCA2NiwgCisgICAgNDEsIDc3MCwgNDAsIDY3LCA0MSwgNzcwLCA0MCwgNjgsIDQxLCA3NzAsIDQwLCA2OSwgNDEsIDc3MCwgNDAsIDcwLCA0MSwgCisgICAgNzcwLCA0MCwgNzEsIDQxLCA3NzAsIDQwLCA3MiwgNDEsIDc3MCwgNDAsIDczLCA0MSwgNzcwLCA0MCwgNzQsIDQxLCA3NzAsIAorICAgIDQwLCA3NSwgNDEsIDc3MCwgNDAsIDc2LCA0MSwgNzcwLCA0MCwgNzcsIDQxLCA3NzAsIDQwLCA3OCwgNDEsIDc3MCwgNDAsIAorICAgIDc5LCA0MSwgNzcwLCA0MCwgODAsIDQxLCA3NzAsIDQwLCA4MSwgNDEsIDc3MCwgNDAsIDgyLCA0MSwgNzcwLCA0MCwgODMsIAorICAgIDQxLCA3NzAsIDQwLCA4NCwgNDEsIDc3MCwgNDAsIDg1LCA0MSwgNzcwLCA0MCwgODYsIDQxLCA3NzAsIDQwLCA4NywgNDEsIAorICAgIDc3MCwgNDAsIDg4LCA0MSwgNzcwLCA0MCwgODksIDQxLCA3NzAsIDQwLCA5MCwgNDEsIDc3MCwgMTIzMDgsIDgzLCAxMjMwOSwgCisgICAgMjYzLCA2NywgMjYzLCA4MiwgNTE5LCA2NywgNjgsIDUxOSwgODcsIDkwLCAyNjYsIDY2LCAyNjYsIDc4LCAyNjYsIDgwLCAKKyAgICAyNjYsIDgzLCAyNjYsIDg3LCA1MjIsIDcyLCA4NiwgNTIyLCA3NywgODYsIDUyMiwgODMsIDY4LCA1MjIsIDgzLCA4MywgCisgICAgNzc4LCA4MCwgODAsIDg2LCA1MjIsIDY4LCA3NCwgNTIyLCAxMjQxMSwgMTIzNjMsIDI2NiwgMjUxNjMsIDI2NiwgMjMzODMsIAorICAgIDI2NiwgMjE0NTIsIDI2NiwgMTI0ODcsIDI2NiwgMjAxMDgsIDI2NiwgMjI4MTAsIDI2NiwgMzUyOTksIDI2NiwgMjI4MjUsIAorICAgIDI2NiwgMjAxMzIsIDI2NiwgMjYxNDQsIDI2NiwgMjg5NjEsIDI2NiwgMjYwMDksIDI2NiwgMjEwNjksIDI2NiwgMjQ0NjAsIAorICAgIDI2NiwgMjA4NzcsIDI2NiwgMjYwMzIsIDI2NiwgMjEwMjEsIDI2NiwgMzIwNjYsIDI2NiwgMjk5ODMsIDI2NiwgMzYwMDksIAorICAgIDI2NiwgMjI3NjgsIDI2NiwgMjE1NjEsIDI2NiwgMjg0MzYsIDI2NiwgMjUyMzcsIDI2NiwgMjU0MjksIDI2NiwgMTk5NjgsIAorICAgIDI2NiwgMTk5NzcsIDI2NiwgMzY5MzgsIDI2NiwgMjQwMzgsIDI2NiwgMjAwMTMsIDI2NiwgMjE0OTEsIDI2NiwgMjUzNTEsIAorICAgIDI2NiwgMzYyMDgsIDI2NiwgMjUxNzEsIDc3MCwgMTIzMDgsIDI2NDEyLCAxMjMwOSwgNzcwLCAxMjMwOCwgMTk5NzcsIAorICAgIDEyMzA5LCA3NzAsIDEyMzA4LCAyMDEwOCwgMTIzMDksIDc3MCwgMTIzMDgsIDIzNDMzLCAxMjMwOSwgNzcwLCAxMjMwOCwgCisgICAgMjg4NTcsIDEyMzA5LCA3NzAsIDEyMzA4LCAyNTE3MSwgMTIzMDksIDc3MCwgMTIzMDgsIDMwNDIzLCAxMjMwOSwgNzcwLCAKKyAgICAxMjMwOCwgMjEyMTMsIDEyMzA5LCA3NzAsIDEyMzA4LCAyNTk0MywgMTIzMDksIDI1NiwgMjAwMjksIDI1NiwgMjAwMjQsIAorICAgIDI1NiwgMjAwMzMsIDI1NiwgMTMxMzYyLCAyNTYsIDIwMzIwLCAyNTYsIDIwMzk4LCAyNTYsIDIwNDExLCAyNTYsIDIwNDgyLCAKKyAgICAyNTYsIDIwNjAyLCAyNTYsIDIwNjMzLCAyNTYsIDIwNzExLCAyNTYsIDIwNjg3LCAyNTYsIDEzNDcwLCAyNTYsIDEzMjY2NiwgCisgICAgMjU2LCAyMDgxMywgMjU2LCAyMDgyMCwgMjU2LCAyMDgzNiwgMjU2LCAyMDg1NSwgMjU2LCAxMzIzODAsIDI1NiwgMTM0OTcsIAorICAgIDI1NiwgMjA4MzksIDI1NiwgMjA4NzcsIDI1NiwgMTMyNDI3LCAyNTYsIDIwODg3LCAyNTYsIDIwOTAwLCAyNTYsIDIwMTcyLCAKKyAgICAyNTYsIDIwOTA4LCAyNTYsIDIwOTE3LCAyNTYsIDE2ODQxNSwgMjU2LCAyMDk4MSwgMjU2LCAyMDk5NSwgMjU2LCAxMzUzNSwgCisgICAgMjU2LCAyMTA1MSwgMjU2LCAyMTA2MiwgMjU2LCAyMTEwNiwgMjU2LCAyMTExMSwgMjU2LCAxMzU4OSwgMjU2LCAyMTE5MSwgCisgICAgMjU2LCAyMTE5MywgMjU2LCAyMTIyMCwgMjU2LCAyMTI0MiwgMjU2LCAyMTI1MywgMjU2LCAyMTI1NCwgMjU2LCAyMTI3MSwgCisgICAgMjU2LCAyMTMyMSwgMjU2LCAyMTMyOSwgMjU2LCAyMTMzOCwgMjU2LCAyMTM2MywgMjU2LCAyMTM3MywgMjU2LCAyMTM3NSwgCisgICAgMjU2LCAyMTM3NSwgMjU2LCAyMTM3NSwgMjU2LCAxMzM2NzYsIDI1NiwgMjg3ODQsIDI1NiwgMjE0NTAsIDI1NiwgMjE0NzEsIAorICAgIDI1NiwgMTMzOTg3LCAyNTYsIDIxNDgzLCAyNTYsIDIxNDg5LCAyNTYsIDIxNTEwLCAyNTYsIDIxNjYyLCAyNTYsIDIxNTYwLCAKKyAgICAyNTYsIDIxNTc2LCAyNTYsIDIxNjA4LCAyNTYsIDIxNjY2LCAyNTYsIDIxNzUwLCAyNTYsIDIxNzc2LCAyNTYsIDIxODQzLCAKKyAgICAyNTYsIDIxODU5LCAyNTYsIDIxODkyLCAyNTYsIDIxODkyLCAyNTYsIDIxOTEzLCAyNTYsIDIxOTMxLCAyNTYsIDIxOTM5LCAKKyAgICAyNTYsIDIxOTU0LCAyNTYsIDIyMjk0LCAyNTYsIDIyMDIyLCAyNTYsIDIyMjk1LCAyNTYsIDIyMDk3LCAyNTYsIDIyMTMyLCAKKyAgICAyNTYsIDIwOTk5LCAyNTYsIDIyNzY2LCAyNTYsIDIyNDc4LCAyNTYsIDIyNTE2LCAyNTYsIDIyNTQxLCAyNTYsIDIyNDExLCAKKyAgICAyNTYsIDIyNTc4LCAyNTYsIDIyNTc3LCAyNTYsIDIyNzAwLCAyNTYsIDEzNjQyMCwgMjU2LCAyMjc3MCwgMjU2LCAyMjc3NSwgCisgICAgMjU2LCAyMjc5MCwgMjU2LCAyMjgxMCwgMjU2LCAyMjgxOCwgMjU2LCAyMjg4MiwgMjU2LCAxMzY4NzIsIDI1NiwgMTM2OTM4LCAKKyAgICAyNTYsIDIzMDIwLCAyNTYsIDIzMDY3LCAyNTYsIDIzMDc5LCAyNTYsIDIzMDAwLCAyNTYsIDIzMTQyLCAyNTYsIDE0MDYyLCAKKyAgICAyNTYsIDE0MDc2LCAyNTYsIDIzMzA0LCAyNTYsIDIzMzU4LCAyNTYsIDIzMzU4LCAyNTYsIDEzNzY3MiwgMjU2LCAyMzQ5MSwgCisgICAgMjU2LCAyMzUxMiwgMjU2LCAyMzUyNywgMjU2LCAyMzUzOSwgMjU2LCAxMzgwMDgsIDI1NiwgMjM1NTEsIDI1NiwgMjM1NTgsIAorICAgIDI1NiwgMjQ0MDMsIDI1NiwgMjM1ODYsIDI1NiwgMTQyMDksIDI1NiwgMjM2NDgsIDI1NiwgMjM2NjIsIDI1NiwgMjM3NDQsIAorICAgIDI1NiwgMjM2OTMsIDI1NiwgMTM4NzI0LCAyNTYsIDIzODc1LCAyNTYsIDEzODcyNiwgMjU2LCAyMzkxOCwgMjU2LCAyMzkxNSwgCisgICAgMjU2LCAyMzkzMiwgMjU2LCAyNDAzMywgMjU2LCAyNDAzNCwgMjU2LCAxNDM4MywgMjU2LCAyNDA2MSwgMjU2LCAyNDEwNCwgCisgICAgMjU2LCAyNDEyNSwgMjU2LCAyNDE2OSwgMjU2LCAxNDQzNCwgMjU2LCAxMzk2NTEsIDI1NiwgMTQ0NjAsIDI1NiwgMjQyNDAsIAorICAgIDI1NiwgMjQyNDMsIDI1NiwgMjQyNDYsIDI1NiwgMjQyNjYsIDI1NiwgMTcyOTQ2LCAyNTYsIDI0MzE4LCAyNTYsIDE0MDA4MSwgCisgICAgMjU2LCAxNDAwODEsIDI1NiwgMzMyODEsIDI1NiwgMjQzNTQsIDI1NiwgMjQzNTQsIDI1NiwgMTQ1MzUsIDI1NiwgMTQ0MDU2LCAKKyAgICAyNTYsIDE1NjEyMiwgMjU2LCAyNDQxOCwgMjU2LCAyNDQyNywgMjU2LCAxNDU2MywgMjU2LCAyNDQ3NCwgMjU2LCAyNDUyNSwgCisgICAgMjU2LCAyNDUzNSwgMjU2LCAyNDU2OSwgMjU2LCAyNDcwNSwgMjU2LCAxNDY1MCwgMjU2LCAxNDYyMCwgMjU2LCAyNDcyNCwgCisgICAgMjU2LCAxNDEwMTIsIDI1NiwgMjQ3NzUsIDI1NiwgMjQ5MDQsIDI1NiwgMjQ5MDgsIDI1NiwgMjQ5MTAsIDI1NiwgMjQ5MDgsIAorICAgIDI1NiwgMjQ5NTQsIDI1NiwgMjQ5NzQsIDI1NiwgMjUwMTAsIDI1NiwgMjQ5OTYsIDI1NiwgMjUwMDcsIDI1NiwgMjUwNTQsIAorICAgIDI1NiwgMjUwNzQsIDI1NiwgMjUwNzgsIDI1NiwgMjUxMDQsIDI1NiwgMjUxMTUsIDI1NiwgMjUxODEsIDI1NiwgMjUyNjUsIAorICAgIDI1NiwgMjUzMDAsIDI1NiwgMjU0MjQsIDI1NiwgMTQyMDkyLCAyNTYsIDI1NDA1LCAyNTYsIDI1MzQwLCAyNTYsIDI1NDQ4LCAKKyAgICAyNTYsIDI1NDc1LCAyNTYsIDI1NTcyLCAyNTYsIDE0MjMyMSwgMjU2LCAyNTYzNCwgMjU2LCAyNTU0MSwgMjU2LCAyNTUxMywgCisgICAgMjU2LCAxNDg5NCwgMjU2LCAyNTcwNSwgMjU2LCAyNTcyNiwgMjU2LCAyNTc1NywgMjU2LCAyNTcxOSwgMjU2LCAxNDk1NiwgCisgICAgMjU2LCAyNTkzNSwgMjU2LCAyNTk2NCwgMjU2LCAxNDMzNzAsIDI1NiwgMjYwODMsIDI1NiwgMjYzNjAsIDI1NiwgMjYxODUsIAorICAgIDI1NiwgMTUxMjksIDI1NiwgMjYyNTcsIDI1NiwgMTUxMTIsIDI1NiwgMTUwNzYsIDI1NiwgMjA4ODIsIDI1NiwgMjA4ODUsIAorICAgIDI1NiwgMjYzNjgsIDI1NiwgMjYyNjgsIDI1NiwgMzI5NDEsIDI1NiwgMTczNjksIDI1NiwgMjYzOTEsIDI1NiwgMjYzOTUsIAorICAgIDI1NiwgMjY0MDEsIDI1NiwgMjY0NjIsIDI1NiwgMjY0NTEsIDI1NiwgMTQ0MzIzLCAyNTYsIDE1MTc3LCAyNTYsIDI2NjE4LCAKKyAgICAyNTYsIDI2NTAxLCAyNTYsIDI2NzA2LCAyNTYsIDI2NzU3LCAyNTYsIDE0NDQ5MywgMjU2LCAyNjc2NiwgMjU2LCAyNjY1NSwgCisgICAgMjU2LCAyNjkwMCwgMjU2LCAxNTI2MSwgMjU2LCAyNjk0NiwgMjU2LCAyNzA0MywgMjU2LCAyNzExNCwgMjU2LCAyNzMwNCwgCisgICAgMjU2LCAxNDUwNTksIDI1NiwgMjczNTUsIDI1NiwgMTUzODQsIDI1NiwgMjc0MjUsIDI1NiwgMTQ1NTc1LCAyNTYsIDI3NDc2LCAKKyAgICAyNTYsIDE1NDM4LCAyNTYsIDI3NTA2LCAyNTYsIDI3NTUxLCAyNTYsIDI3NTc4LCAyNTYsIDI3NTc5LCAyNTYsIDE0NjA2MSwgCisgICAgMjU2LCAxMzg1MDcsIDI1NiwgMTQ2MTcwLCAyNTYsIDI3NzI2LCAyNTYsIDE0NjYyMCwgMjU2LCAyNzgzOSwgMjU2LCAKKyAgICAyNzg1MywgMjU2LCAyNzc1MSwgMjU2LCAyNzkyNiwgMjU2LCAyNzk2NiwgMjU2LCAyODAyMywgMjU2LCAyNzk2OSwgMjU2LCAKKyAgICAyODAwOSwgMjU2LCAyODAyNCwgMjU2LCAyODAzNywgMjU2LCAxNDY3MTgsIDI1NiwgMjc5NTYsIDI1NiwgMjgyMDcsIDI1NiwgCisgICAgMjgyNzAsIDI1NiwgMTU2NjcsIDI1NiwgMjgzNjMsIDI1NiwgMjgzNTksIDI1NiwgMTQ3MTUzLCAyNTYsIDI4MTUzLCAyNTYsIAorICAgIDI4NTI2LCAyNTYsIDE0NzI5NCwgMjU2LCAxNDczNDIsIDI1NiwgMjg2MTQsIDI1NiwgMjg3MjksIDI1NiwgMjg3MDIsIDI1NiwgCisgICAgMjg2OTksIDI1NiwgMTU3NjYsIDI1NiwgMjg3NDYsIDI1NiwgMjg3OTcsIDI1NiwgMjg3OTEsIDI1NiwgMjg4NDUsIDI1NiwgCisgICAgMTMyMzg5LCAyNTYsIDI4OTk3LCAyNTYsIDE0ODA2NywgMjU2LCAyOTA4NCwgMjU2LCAxNDgzOTUsIDI1NiwgMjkyMjQsIAorICAgIDI1NiwgMjkyMzcsIDI1NiwgMjkyNjQsIDI1NiwgMTQ5MDAwLCAyNTYsIDI5MzEyLCAyNTYsIDI5MzMzLCAyNTYsIDE0OTMwMSwgCisgICAgMjU2LCAxNDk1MjQsIDI1NiwgMjk1NjIsIDI1NiwgMjk1NzksIDI1NiwgMTYwNDQsIDI1NiwgMjk2MDUsIDI1NiwgMTYwNTYsIAorICAgIDI1NiwgMTYwNTYsIDI1NiwgMjk3NjcsIDI1NiwgMjk3ODgsIDI1NiwgMjk4MDksIDI1NiwgMjk4MjksIDI1NiwgMjk4OTgsIAorICAgIDI1NiwgMTYxNTUsIDI1NiwgMjk5ODgsIDI1NiwgMTUwNTgyLCAyNTYsIDMwMDE0LCAyNTYsIDE1MDY3NCwgMjU2LCAzMDA2NCwgCisgICAgMjU2LCAxMzk2NzksIDI1NiwgMzAyMjQsIDI1NiwgMTUxNDU3LCAyNTYsIDE1MTQ4MCwgMjU2LCAxNTE2MjAsIDI1NiwgCisgICAgMTYzODAsIDI1NiwgMTYzOTIsIDI1NiwgMzA0NTIsIDI1NiwgMTUxNzk1LCAyNTYsIDE1MTc5NCwgMjU2LCAxNTE4MzMsIAorICAgIDI1NiwgMTUxODU5LCAyNTYsIDMwNDk0LCAyNTYsIDMwNDk1LCAyNTYsIDMwNDk1LCAyNTYsIDMwNTM4LCAyNTYsIDE2NDQxLCAKKyAgICAyNTYsIDMwNjAzLCAyNTYsIDE2NDU0LCAyNTYsIDE2NTM0LCAyNTYsIDE1MjYwNSwgMjU2LCAzMDc5OCwgMjU2LCAzMDg2MCwgCisgICAgMjU2LCAzMDkyNCwgMjU2LCAxNjYxMSwgMjU2LCAxNTMxMjYsIDI1NiwgMzEwNjIsIDI1NiwgMTUzMjQyLCAyNTYsIAorICAgIDE1MzI4NSwgMjU2LCAzMTExOSwgMjU2LCAzMTIxMSwgMjU2LCAxNjY4NywgMjU2LCAzMTI5NiwgMjU2LCAzMTMwNiwgMjU2LCAKKyAgICAzMTMxMSwgMjU2LCAxNTM5ODAsIDI1NiwgMTU0Mjc5LCAyNTYsIDE1NDI3OSwgMjU2LCAzMTQ3MCwgMjU2LCAxNjg5OCwgCisgICAgMjU2LCAxNTQ1MzksIDI1NiwgMzE2ODYsIDI1NiwgMzE2ODksIDI1NiwgMTY5MzUsIDI1NiwgMTU0NzUyLCAyNTYsIDMxOTU0LCAKKyAgICAyNTYsIDE3MDU2LCAyNTYsIDMxOTc2LCAyNTYsIDMxOTcxLCAyNTYsIDMyMDAwLCAyNTYsIDE1NTUyNiwgMjU2LCAzMjA5OSwgCisgICAgMjU2LCAxNzE1MywgMjU2LCAzMjE5OSwgMjU2LCAzMjI1OCwgMjU2LCAzMjMyNSwgMjU2LCAxNzIwNCwgMjU2LCAxNTYyMDAsIAorICAgIDI1NiwgMTU2MjMxLCAyNTYsIDE3MjQxLCAyNTYsIDE1NjM3NywgMjU2LCAzMjYzNCwgMjU2LCAxNTY0NzgsIDI1NiwgCisgICAgMzI2NjEsIDI1NiwgMzI3NjIsIDI1NiwgMzI3NzMsIDI1NiwgMTU2ODkwLCAyNTYsIDE1Njk2MywgMjU2LCAzMjg2NCwgMjU2LCAKICAgICAxNTcwOTYsIDI1NiwgMzI4ODAsIDI1NiwgMTQ0MjIzLCAyNTYsIDE3MzY1LCAyNTYsIDMyOTQ2LCAyNTYsIDMzMDI3LCAyNTYsIAogICAgIDE3NDE5LCAyNTYsIDMzMDg2LCAyNTYsIDIzMjIxLCAyNTYsIDE1NzYwNywgMjU2LCAxNTc2MjEsIDI1NiwgMTQ0Mjc1LCAKICAgICAyNTYsIDE0NDI4NCwgMjU2LCAzMzI4MSwgMjU2LCAzMzI4NCwgMjU2LCAzNjc2NiwgMjU2LCAxNzUxNSwgMjU2LCAzMzQyNSwgCkBAIC0zMTU3LDcgKzM1MzUsNyBAQAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIAotICAgIDQxLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA0MSwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNDIsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIApAQCAtMzE2NSw4ICszNTQzLDkgQEAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA0MiwgNywgNywgNDMsIDQ0LCAKLSAgICA0NSwgNDYsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDQzLCA3LCA3LCA0NCwgNDUsIAorICAgIDQ2LCA0NywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNDgsIDQ5LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKQEAgLTMxNzcsOCArMzU1Niw3IEBACiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNDcsIDQ4LCA0OSwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNTAsIDUxLCA1MiwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCkBAIC0zNjAzLDMwICszOTgxLDMyIEBACiAgICAgMCwgMzI3MSwgMCwgMzI3MywgMCwgMzI3NSwgMCwgMzI3NywgMzI3OSwgMzI4MSwgMzI4MywgMCwgMzI4NSwgMzI4NywgCiAgICAgMzI4OSwgMCwgMzI5MSwgMzI5MywgMzI5NSwgMzI5NywgMzI5OSwgMzMwMSwgMzMwMywgMCwgMzMwNSwgMzMwOSwgMzMxMSwgCiAgICAgMzMxMywgMzMxNSwgMzMxNywgMCwgMCwgMCwgMCwgMzMxOSwgMzMyMSwgMzMyMywgMzMyNSwgMzMyNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzMyOSwgMzMzMywgMzMzNywgMzM0MSwgMzM0NSwgMzM0OSwgMzM1MywgMzM1NywgMzM2MSwgCi0gICAgMzM2NSwgMzM2OSwgMzM3MywgMzM3NywgMzM4MCwgMzM4MiwgMzM4NSwgMzM4OSwgMzM5MiwgMzM5NCwgMzM5NywgMzQwMSwgCi0gICAgMzQwNiwgMzQwOSwgMzQxMSwgMzQxNCwgMzQxOCwgMzQyMCwgMzQyMiwgMzQyNCwgMzQyNiwgMzQyOCwgMzQzMSwgMzQzNSwgCi0gICAgMzQzOCwgMzQ0MCwgMzQ0MywgMzQ0NywgMzQ1MiwgMzQ1NSwgMzQ1NywgMzQ2MCwgMzQ2NCwgMzQ2NiwgMzQ2OCwgMzQ3MCwgCisgICAgMCwgMCwgMzMyOSwgMzMzMywgMzMzNywgMzM0MiwgMzM0NiwgMzM1MCwgMzM1NCwgMzM1OCwgMzM2MiwgMzM2NiwgMzM3MCwgCisgICAgMzM3NCwgMzM3OCwgMzM4MiwgMzM4NiwgMzM5MCwgMzM5MywgMzM5NSwgMzM5OCwgMzQwMiwgMzQwNSwgMzQwNywgMzQxMCwgCisgICAgMzQxNCwgMzQxOSwgMzQyMiwgMzQyNCwgMzQyNywgMzQzMSwgMzQzMywgMzQzNSwgMzQzNywgMzQzOSwgMzQ0MSwgMzQ0NCwgCisgICAgMzQ0OCwgMzQ1MSwgMzQ1MywgMzQ1NiwgMzQ2MCwgMzQ2NSwgMzQ2OCwgMzQ3MCwgMzQ3MywgMzQ3NywgMzQ3OSwgMzQ4MSwgCisgICAgMzQ4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMzQ4OSwgMzQ5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMzQ5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ5OCwgMzUwMSwgMzUwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzQ3MiwgMzQ3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzQ3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ4MSwgMzQ4NCwgMzQ4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUwNywgMCwgCisgICAgMCwgMCwgMCwgMzUxMCwgMCwgMCwgMzUxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUxNiwgMCwgMzUxOSwgMCwgMCwgMCwgMCwgMCwgMzUyMiwgMzUyNSwgMCwgCisgICAgMzUyOSwgMzUzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUzNiwgMCwgMCwgCisgICAgMzUzOSwgMCwgMCwgMzU0MiwgMCwgMzU0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU0OCwgMCwgMzU1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU1NCwgCisgICAgMzU1NywgMzU2MCwgMzU2MywgMzU2NiwgMCwgMCwgMzU2OSwgMzU3MiwgMCwgMCwgMzU3NSwgMzU3OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMzU4MSwgMzU4NCwgMCwgMCwgMzU4NywgMzU5MCwgMCwgMCwgMzU5MywgMzU5NiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ5MCwgMCwgMCwgMCwgMCwgCi0gICAgMzQ5MywgMCwgMCwgMzQ5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzQ5OSwgMCwgMzUwMiwgMCwgMCwgMCwgMCwgMCwgMzUwNSwgMzUwOCwgMCwgMzUxMiwgMzUxNSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUxOSwgMCwgMCwgMzUyMiwgMCwgMCwgCi0gICAgMzUyNSwgMCwgMzUyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzUzMSwgMCwgMzUzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUzNywgMzU0MCwgMzU0MywgCi0gICAgMzU0NiwgMzU0OSwgMCwgMCwgMzU1MiwgMzU1NSwgMCwgMCwgMzU1OCwgMzU2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMzU2NCwgCi0gICAgMzU2NywgMCwgMCwgMzU3MCwgMzU3MywgMCwgMCwgMzU3NiwgMzU3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMzU5OSwgMzYwMiwgMzYwNSwgMzYwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzU4MiwgMzU4NSwgMzU4OCwgMzU5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYxMSwgMzYxNCwgMzYxNywgMzYyMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMzYyMywgMzYyNiwgMzYyOSwgMzYzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU5NCwgMzU5NywgMzYwMCwgMzYwMywgMCwgMCwgMCwgMCwgMCwgMCwgMzYwNiwgCi0gICAgMzYwOSwgMzYxMiwgMzYxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYzNSwgCisgICAgMzYzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYxOCwgMzYyMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0zNjM3LDQ4ICs0MDE3LDQ5IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzYzOSwgMzY0MSwgMzY0MywgMzY0NSwgMzY0NywgMzY0OSwgMzY1MSwgMzY1MywgMzY1NSwgMzY1NywgMzY2MCwgMzY2MywgCisgICAgMzY2NiwgMzY2OSwgMzY3MiwgMzY3NSwgMzY3OCwgMzY4MSwgMzY4NCwgMzY4NywgMzY5MCwgMzY5NCwgMzY5OCwgMzcwMiwgCisgICAgMzcwNiwgMzcxMCwgMzcxNCwgMzcxOCwgMzcyMiwgMzcyNiwgMzczMSwgMzczNiwgMzc0MSwgMzc0NiwgMzc1MSwgMzc1NiwgCisgICAgMzc2MSwgMzc2NiwgMzc3MSwgMzc3NiwgMzc4MSwgMzc4NCwgMzc4NywgMzc5MCwgMzc5MywgMzc5NiwgMzc5OSwgMzgwMiwgCisgICAgMzgwNSwgMzgwOCwgMzgxMiwgMzgxNiwgMzgyMCwgMzgyNCwgMzgyOCwgMzgzMiwgMzgzNiwgMzg0MCwgMzg0NCwgMzg0OCwgCisgICAgMzg1MiwgMzg1NiwgMzg2MCwgMzg2NCwgMzg2OCwgMzg3MiwgMzg3NiwgMzg4MCwgMzg4NCwgMzg4OCwgMzg5MiwgMzg5NiwgCisgICAgMzkwMCwgMzkwNCwgMzkwOCwgMzkxMiwgMzkxNiwgMzkyMCwgMzkyNCwgMzkyOCwgMzkzMiwgMzkzNiwgMzk0MCwgMzk0NCwgCisgICAgMzk0OCwgMzk1MiwgMzk1NiwgMzk1OCwgMzk2MCwgMzk2MiwgMzk2NCwgMzk2NiwgMzk2OCwgMzk3MCwgMzk3MiwgMzk3NCwgCisgICAgMzk3NiwgMzk3OCwgMzk4MCwgMzk4MiwgMzk4NCwgMzk4NiwgMzk4OCwgMzk5MCwgMzk5MiwgMzk5NCwgMzk5NiwgMzk5OCwgCisgICAgNDAwMCwgNDAwMiwgNDAwNCwgNDAwNiwgNDAwOCwgNDAxMCwgNDAxMiwgNDAxNCwgNDAxNiwgNDAxOCwgNDAyMCwgNDAyMiwgCisgICAgNDAyNCwgNDAyNiwgNDAyOCwgNDAzMCwgNDAzMiwgNDAzNCwgNDAzNiwgNDAzOCwgNDA0MCwgNDA0MiwgNDA0NCwgNDA0NiwgCisgICAgNDA0OCwgNDA1MCwgNDA1MiwgNDA1NCwgNDA1NiwgNDA1OCwgNDA2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYyMiwgMzYyNCwgMzYyNiwgCi0gICAgMzYyOCwgMzYzMCwgMzYzMiwgMzYzNCwgMzYzNiwgMzYzOCwgMzY0MCwgMzY0MywgMzY0NiwgMzY0OSwgMzY1MiwgMzY1NSwgCi0gICAgMzY1OCwgMzY2MSwgMzY2NCwgMzY2NywgMzY3MCwgMzY3MywgMzY3NywgMzY4MSwgMzY4NSwgMzY4OSwgMzY5MywgMzY5NywgCi0gICAgMzcwMSwgMzcwNSwgMzcwOSwgMzcxNCwgMzcxOSwgMzcyNCwgMzcyOSwgMzczNCwgMzczOSwgMzc0NCwgMzc0OSwgMzc1NCwgCi0gICAgMzc1OSwgMzc2NCwgMzc2NywgMzc3MCwgMzc3MywgMzc3NiwgMzc3OSwgMzc4MiwgMzc4NSwgMzc4OCwgMzc5MSwgMzc5NSwgCi0gICAgMzc5OSwgMzgwMywgMzgwNywgMzgxMSwgMzgxNSwgMzgxOSwgMzgyMywgMzgyNywgMzgzMSwgMzgzNSwgMzgzOSwgMzg0MywgCi0gICAgMzg0NywgMzg1MSwgMzg1NSwgMzg1OSwgMzg2MywgMzg2NywgMzg3MSwgMzg3NSwgMzg3OSwgMzg4MywgMzg4NywgMzg5MSwgCi0gICAgMzg5NSwgMzg5OSwgMzkwMywgMzkwNywgMzkxMSwgMzkxNSwgMzkxOSwgMzkyMywgMzkyNywgMzkzMSwgMzkzNSwgMzkzOSwgCi0gICAgMzk0MSwgMzk0MywgMzk0NSwgMzk0NywgMzk0OSwgMzk1MSwgMzk1MywgMzk1NSwgMzk1NywgMzk1OSwgMzk2MSwgMzk2MywgCi0gICAgMzk2NSwgMzk2NywgMzk2OSwgMzk3MSwgMzk3MywgMzk3NSwgMzk3NywgMzk3OSwgMzk4MSwgMzk4MywgMzk4NSwgMzk4NywgCi0gICAgMzk4OSwgMzk5MSwgMzk5MywgMzk5NSwgMzk5NywgMzk5OSwgNDAwMSwgNDAwMywgNDAwNSwgNDAwNywgNDAwOSwgNDAxMSwgCi0gICAgNDAxMywgNDAxNSwgNDAxNywgNDAxOSwgNDAyMSwgNDAyMywgNDAyNSwgNDAyNywgNDAyOSwgNDAzMSwgNDAzMywgNDAzNSwgCi0gICAgNDAzNywgNDAzOSwgNDA0MSwgNDA0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA0NSwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA2NywgNDA3MSwgNDA3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDA1MCwgNDA1NCwgNDA1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA3OCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA4MSwgNDA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDA2NCwgNDA2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA4NSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0zNjg4LDQyMyArNDA2OSw0NTggQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0MDcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MDg5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDkxLCA0MDkzLCA0MDk1LCA0MDk3LCA0MDk5LCAKKyAgICA0MTAxLCA0MTAzLCA0MTA1LCA0MTA3LCA0MTA5LCA0MTExLCA0MTEzLCA0MTE1LCA0MTE3LCA0MTE5LCA0MTIxLCA0MTIzLCAKKyAgICA0MTI1LCA0MTI3LCA0MTI5LCA0MTMxLCA0MTMzLCA0MTM1LCA0MTM3LCA0MTM5LCA0MTQxLCA0MTQzLCA0MTQ1LCA0MTQ3LCAKKyAgICA0MTQ5LCA0MTUxLCA0MTUzLCA0MTU1LCA0MTU3LCA0MTU5LCA0MTYxLCA0MTYzLCA0MTY1LCA0MTY3LCA0MTY5LCA0MTcxLCAKKyAgICA0MTczLCA0MTc1LCA0MTc3LCA0MTc5LCA0MTgxLCA0MTgzLCA0MTg1LCA0MTg3LCA0MTg5LCA0MTkxLCA0MTkzLCA0MTk1LCAKKyAgICA0MTk3LCA0MTk5LCA0MjAxLCA0MjAzLCA0MjA1LCA0MjA3LCA0MjA5LCA0MjExLCA0MjEzLCA0MjE1LCA0MjE3LCA0MjE5LCAKKyAgICA0MjIxLCA0MjIzLCA0MjI1LCA0MjI3LCA0MjI5LCA0MjMxLCA0MjMzLCA0MjM1LCA0MjM3LCA0MjM5LCA0MjQxLCA0MjQzLCAKKyAgICA0MjQ1LCA0MjQ3LCA0MjQ5LCA0MjUxLCA0MjUzLCA0MjU1LCA0MjU3LCA0MjU5LCA0MjYxLCA0MjYzLCA0MjY1LCA0MjY3LCAKKyAgICA0MjY5LCA0MjcxLCA0MjczLCA0Mjc1LCA0Mjc3LCA0Mjc5LCA0MjgxLCA0MjgzLCA0Mjg1LCA0Mjg3LCA0Mjg5LCA0MjkxLCAKKyAgICA0MjkzLCA0Mjk1LCA0Mjk3LCA0Mjk5LCA0MzAxLCA0MzAzLCA0MzA1LCA0MzA3LCA0MzA5LCA0MzExLCA0MzEzLCA0MzE1LCAKKyAgICA0MzE3LCA0MzE5LCA0MzIxLCA0MzIzLCA0MzI1LCA0MzI3LCA0MzI5LCA0MzMxLCA0MzMzLCA0MzM1LCA0MzM3LCA0MzM5LCAKKyAgICA0MzQxLCA0MzQzLCA0MzQ1LCA0MzQ3LCA0MzQ5LCA0MzUxLCA0MzUzLCA0MzU1LCA0MzU3LCA0MzU5LCA0MzYxLCA0MzYzLCAKKyAgICA0MzY1LCA0MzY3LCA0MzY5LCA0MzcxLCA0MzczLCA0Mzc1LCA0Mzc3LCA0Mzc5LCA0MzgxLCA0MzgzLCA0Mzg1LCA0Mzg3LCAKKyAgICA0Mzg5LCA0MzkxLCA0MzkzLCA0Mzk1LCA0Mzk3LCA0Mzk5LCA0NDAxLCA0NDAzLCA0NDA1LCA0NDA3LCA0NDA5LCA0NDExLCAKKyAgICA0NDEzLCA0NDE1LCA0NDE3LCA0NDE5LCA0NDIxLCA0NDIzLCA0NDI1LCA0NDI3LCA0NDI5LCA0NDMxLCA0NDMzLCA0NDM1LCAKKyAgICA0NDM3LCA0NDM5LCA0NDQxLCA0NDQzLCA0NDQ1LCA0NDQ3LCA0NDQ5LCA0NDUxLCA0NDUzLCA0NDU1LCA0NDU3LCA0NDU5LCAKKyAgICA0NDYxLCA0NDYzLCA0NDY1LCA0NDY3LCA0NDY5LCA0NDcxLCA0NDczLCA0NDc1LCA0NDc3LCA0NDc5LCA0NDgxLCA0NDgzLCAKKyAgICA0NDg1LCA0NDg3LCA0NDg5LCA0NDkxLCA0NDkzLCA0NDk1LCA0NDk3LCA0NDk5LCA0NTAxLCA0NTAzLCA0NTA1LCA0NTA3LCAKKyAgICA0NTA5LCA0NTExLCA0NTEzLCA0NTE1LCA0NTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0NTE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDcyLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDc0LCA0MDc2LCA0MDc4LCA0MDgwLCA0MDgyLCA0MDg0LCA0MDg2LCA0MDg4LCAKLSAgICA0MDkwLCA0MDkyLCA0MDk0LCA0MDk2LCA0MDk4LCA0MTAwLCA0MTAyLCA0MTA0LCA0MTA2LCA0MTA4LCA0MTEwLCA0MTEyLCAKLSAgICA0MTE0LCA0MTE2LCA0MTE4LCA0MTIwLCA0MTIyLCA0MTI0LCA0MTI2LCA0MTI4LCA0MTMwLCA0MTMyLCA0MTM0LCA0MTM2LCAKLSAgICA0MTM4LCA0MTQwLCA0MTQyLCA0MTQ0LCA0MTQ2LCA0MTQ4LCA0MTUwLCA0MTUyLCA0MTU0LCA0MTU2LCA0MTU4LCA0MTYwLCAKLSAgICA0MTYyLCA0MTY0LCA0MTY2LCA0MTY4LCA0MTcwLCA0MTcyLCA0MTc0LCA0MTc2LCA0MTc4LCA0MTgwLCA0MTgyLCA0MTg0LCAKLSAgICA0MTg2LCA0MTg4LCA0MTkwLCA0MTkyLCA0MTk0LCA0MTk2LCA0MTk4LCA0MjAwLCA0MjAyLCA0MjA0LCA0MjA2LCA0MjA4LCAKLSAgICA0MjEwLCA0MjEyLCA0MjE0LCA0MjE2LCA0MjE4LCA0MjIwLCA0MjIyLCA0MjI0LCA0MjI2LCA0MjI4LCA0MjMwLCA0MjMyLCAKLSAgICA0MjM0LCA0MjM2LCA0MjM4LCA0MjQwLCA0MjQyLCA0MjQ0LCA0MjQ2LCA0MjQ4LCA0MjUwLCA0MjUyLCA0MjU0LCA0MjU2LCAKLSAgICA0MjU4LCA0MjYwLCA0MjYyLCA0MjY0LCA0MjY2LCA0MjY4LCA0MjcwLCA0MjcyLCA0Mjc0LCA0Mjc2LCA0Mjc4LCA0MjgwLCAKLSAgICA0MjgyLCA0Mjg0LCA0Mjg2LCA0Mjg4LCA0MjkwLCA0MjkyLCA0Mjk0LCA0Mjk2LCA0Mjk4LCA0MzAwLCA0MzAyLCA0MzA0LCAKLSAgICA0MzA2LCA0MzA4LCA0MzEwLCA0MzEyLCA0MzE0LCA0MzE2LCA0MzE4LCA0MzIwLCA0MzIyLCA0MzI0LCA0MzI2LCA0MzI4LCAKLSAgICA0MzMwLCA0MzMyLCA0MzM0LCA0MzM2LCA0MzM4LCA0MzQwLCA0MzQyLCA0MzQ0LCA0MzQ2LCA0MzQ4LCA0MzUwLCA0MzUyLCAKLSAgICA0MzU0LCA0MzU2LCA0MzU4LCA0MzYwLCA0MzYyLCA0MzY0LCA0MzY2LCA0MzY4LCA0MzcwLCA0MzcyLCA0Mzc0LCA0Mzc2LCAKLSAgICA0Mzc4LCA0MzgwLCA0MzgyLCA0Mzg0LCA0Mzg2LCA0Mzg4LCA0MzkwLCA0MzkyLCA0Mzk0LCA0Mzk2LCA0Mzk4LCA0NDAwLCAKLSAgICA0NDAyLCA0NDA0LCA0NDA2LCA0NDA4LCA0NDEwLCA0NDEyLCA0NDE0LCA0NDE2LCA0NDE4LCA0NDIwLCA0NDIyLCA0NDI0LCAKLSAgICA0NDI2LCA0NDI4LCA0NDMwLCA0NDMyLCA0NDM0LCA0NDM2LCA0NDM4LCA0NDQwLCA0NDQyLCA0NDQ0LCA0NDQ2LCA0NDQ4LCAKLSAgICA0NDUwLCA0NDUyLCA0NDU0LCA0NDU2LCA0NDU4LCA0NDYwLCA0NDYyLCA0NDY0LCA0NDY2LCA0NDY4LCA0NDcwLCA0NDcyLCAKLSAgICA0NDc0LCA0NDc2LCA0NDc4LCA0NDgwLCA0NDgyLCA0NDg0LCA0NDg2LCA0NDg4LCA0NDkwLCA0NDkyLCA0NDk0LCA0NDk2LCAKLSAgICA0NDk4LCA0NTAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTAyLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTIxLCAwLCA0NTIzLCA0NTI1LCA0NTI3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTI5LCAwLCA0NTMyLCAwLCA0NTM1LCAwLCA0NTM4LCAKKyAgICAwLCA0NTQxLCAwLCA0NTQ0LCAwLCA0NTQ3LCAwLCA0NTUwLCAwLCA0NTUzLCAwLCA0NTU2LCAwLCA0NTU5LCAwLCA0NTYyLCAKKyAgICAwLCAwLCA0NTY1LCAwLCA0NTY4LCAwLCA0NTcxLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTc0LCA0NTc3LCAwLCA0NTgwLCAKKyAgICA0NTgzLCAwLCA0NTg2LCA0NTg5LCAwLCA0NTkyLCA0NTk1LCAwLCA0NTk4LCA0NjAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjA0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NjA3LCA0NjEwLCAwLCA0NjEzLCA0NjE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjE5LCAwLCAKKyAgICA0NjIyLCAwLCA0NjI1LCAwLCA0NjI4LCAwLCA0NjMxLCAwLCA0NjM0LCAwLCA0NjM3LCAwLCA0NjQwLCAwLCA0NjQzLCAwLCAKKyAgICA0NjQ2LCAwLCA0NjQ5LCAwLCA0NjUyLCAwLCAwLCA0NjU1LCAwLCA0NjU4LCAwLCA0NjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NjY0LCA0NjY3LCAwLCA0NjcwLCA0NjczLCAwLCA0Njc2LCA0Njc5LCAwLCA0NjgyLCA0Njg1LCAwLCA0Njg4LCA0NjkxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0Njk0LCAKKyAgICAwLCAwLCA0Njk3LCA0NzAwLCA0NzAzLCA0NzA2LCAwLCAwLCAwLCA0NzA5LCA0NzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzE1LCA0NzE3LCA0NzE5LCAKKyAgICA0NzIxLCA0NzIzLCA0NzI1LCA0NzI3LCA0NzI5LCA0NzMxLCA0NzMzLCA0NzM1LCA0NzM3LCA0NzM5LCA0NzQxLCA0NzQzLCAKKyAgICA0NzQ1LCA0NzQ3LCA0NzQ5LCA0NzUxLCA0NzUzLCA0NzU1LCA0NzU3LCA0NzU5LCA0NzYxLCA0NzYzLCA0NzY1LCA0NzY3LCAKKyAgICA0NzY5LCA0NzcxLCA0NzczLCA0Nzc1LCA0Nzc3LCA0Nzc5LCA0NzgxLCA0NzgzLCA0Nzg1LCA0Nzg3LCA0Nzg5LCA0NzkxLCAKKyAgICA0NzkzLCA0Nzk1LCA0Nzk3LCA0Nzk5LCA0ODAxLCA0ODAzLCA0ODA1LCA0ODA3LCA0ODA5LCA0ODExLCA0ODEzLCA0ODE1LCAKKyAgICA0ODE3LCA0ODE5LCA0ODIxLCA0ODIzLCA0ODI1LCA0ODI3LCA0ODI5LCA0ODMxLCA0ODMzLCA0ODM1LCA0ODM3LCA0ODM5LCAKKyAgICA0ODQxLCA0ODQzLCA0ODQ1LCA0ODQ3LCA0ODQ5LCA0ODUxLCA0ODUzLCA0ODU1LCA0ODU3LCA0ODU5LCA0ODYxLCA0ODYzLCAKKyAgICA0ODY1LCA0ODY3LCA0ODY5LCA0ODcxLCA0ODczLCA0ODc1LCA0ODc3LCA0ODc5LCA0ODgxLCA0ODgzLCA0ODg1LCA0ODg3LCAKKyAgICA0ODg5LCA0ODkxLCA0ODkzLCA0ODk1LCA0ODk3LCA0ODk5LCA0OTAxLCAwLCAwLCAwLCA0OTAzLCA0OTA1LCA0OTA3LCAKKyAgICA0OTA5LCA0OTExLCA0OTEzLCA0OTE1LCA0OTE3LCA0OTE5LCA0OTIxLCA0OTIzLCA0OTI1LCA0OTI3LCA0OTI5LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0NTA0LCAwLCA0NTA2LCA0NTA4LCA0NTEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTEyLCAwLCA0NTE1LCAwLCA0NTE4LCAwLCA0NTIxLCAwLCA0NTI0LCAwLCA0NTI3LCAKLSAgICAwLCA0NTMwLCAwLCA0NTMzLCAwLCA0NTM2LCAwLCA0NTM5LCAwLCA0NTQyLCAwLCA0NTQ1LCAwLCAwLCA0NTQ4LCAwLCAKLSAgICA0NTUxLCAwLCA0NTU0LCAwLCAwLCAwLCAwLCAwLCAwLCA0NTU3LCA0NTYwLCAwLCA0NTYzLCA0NTY2LCAwLCA0NTY5LCAKLSAgICA0NTcyLCAwLCA0NTc1LCA0NTc4LCAwLCA0NTgxLCA0NTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTg3LCAwLCAwLCAwLCAwLCAwLCAwLCA0NTkwLCA0NTkzLCAwLCAKLSAgICA0NTk2LCA0NTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjAyLCAwLCA0NjA1LCAwLCA0NjA4LCAKLSAgICAwLCA0NjExLCAwLCA0NjE0LCAwLCA0NjE3LCAwLCA0NjIwLCAwLCA0NjIzLCAwLCA0NjI2LCAwLCA0NjI5LCAwLCA0NjMyLCAKLSAgICAwLCA0NjM1LCAwLCAwLCA0NjM4LCAwLCA0NjQxLCAwLCA0NjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA0NjQ3LCA0NjUwLCAwLCAKLSAgICA0NjUzLCA0NjU2LCAwLCA0NjU5LCA0NjYyLCAwLCA0NjY1LCA0NjY4LCAwLCA0NjcxLCA0Njc0LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0Njc3LCAwLCAwLCA0NjgwLCAKLSAgICA0NjgzLCA0Njg2LCA0Njg5LCAwLCAwLCAwLCA0NjkyLCA0Njk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0Njk4LCA0NzAwLCA0NzAyLCA0NzA0LCA0NzA2LCAKLSAgICA0NzA4LCA0NzEwLCA0NzEyLCA0NzE0LCA0NzE2LCA0NzE4LCA0NzIwLCA0NzIyLCA0NzI0LCA0NzI2LCA0NzI4LCA0NzMwLCAKLSAgICA0NzMyLCA0NzM0LCA0NzM2LCA0NzM4LCA0NzQwLCA0NzQyLCA0NzQ0LCA0NzQ2LCA0NzQ4LCA0NzUwLCA0NzUyLCA0NzU0LCAKLSAgICA0NzU2LCA0NzU4LCA0NzYwLCA0NzYyLCA0NzY0LCA0NzY2LCA0NzY4LCA0NzcwLCA0NzcyLCA0Nzc0LCA0Nzc2LCA0Nzc4LCAKLSAgICA0NzgwLCA0NzgyLCA0Nzg0LCA0Nzg2LCA0Nzg4LCA0NzkwLCA0NzkyLCA0Nzk0LCA0Nzk2LCA0Nzk4LCA0ODAwLCA0ODAyLCAKLSAgICA0ODA0LCA0ODA2LCA0ODA4LCA0ODEwLCA0ODEyLCA0ODE0LCA0ODE2LCA0ODE4LCA0ODIwLCA0ODIyLCA0ODI0LCA0ODI2LCAKLSAgICA0ODI4LCA0ODMwLCA0ODMyLCA0ODM0LCA0ODM2LCA0ODM4LCA0ODQwLCA0ODQyLCA0ODQ0LCA0ODQ2LCA0ODQ4LCA0ODUwLCAKLSAgICA0ODUyLCA0ODU0LCA0ODU2LCA0ODU4LCA0ODYwLCA0ODYyLCA0ODY0LCA0ODY2LCA0ODY4LCA0ODcwLCA0ODcyLCA0ODc0LCAKLSAgICA0ODc2LCA0ODc4LCA0ODgwLCA0ODgyLCA0ODg0LCAwLCAwLCAwLCA0ODg2LCA0ODg4LCA0ODkwLCA0ODkyLCA0ODk0LCAKLSAgICA0ODk2LCA0ODk4LCA0OTAwLCA0OTAyLCA0OTA0LCA0OTA2LCA0OTA4LCA0OTEwLCA0OTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTMxLCAKKyAgICA0OTM1LCA0OTM5LCA0OTQzLCA0OTQ3LCA0OTUxLCA0OTU1LCA0OTU5LCA0OTYzLCA0OTY3LCA0OTcxLCA0OTc1LCA0OTc5LCAKKyAgICA0OTgzLCA0OTg3LCA0OTkyLCA0OTk3LCA1MDAyLCA1MDA3LCA1MDEyLCA1MDE3LCA1MDIyLCA1MDI3LCA1MDMyLCA1MDM3LCAKKyAgICA1MDQyLCA1MDQ3LCA1MDUyLCA1MDU3LCA1MDYyLCA1MDcwLCAwLCA1MDc3LCA1MDgxLCA1MDg1LCA1MDg5LCA1MDkzLCAKKyAgICA1MDk3LCA1MTAxLCA1MTA1LCA1MTA5LCA1MTEzLCA1MTE3LCA1MTIxLCA1MTI1LCA1MTI5LCA1MTMzLCA1MTM3LCA1MTQxLCAKKyAgICA1MTQ1LCA1MTQ5LCA1MTUzLCA1MTU3LCA1MTYxLCA1MTY1LCA1MTY5LCA1MTczLCA1MTc3LCA1MTgxLCA1MTg1LCA1MTg5LCAKKyAgICA1MTkzLCA1MTk3LCA1MjAxLCA1MjA1LCA1MjA5LCA1MjEzLCA1MjE3LCA1MjIxLCA1MjIzLCA1MjI1LCA1MjI3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA1MjI5LCA1MjMzLCA1MjM2LCA1MjM5LCA1MjQyLCA1MjQ1LCA1MjQ4LCA1MjUxLCA1MjU0LCAKKyAgICA1MjU3LCA1MjYwLCA1MjYzLCA1MjY2LCA1MjY5LCA1MjcyLCA1Mjc1LCA1Mjc4LCA1MjgwLCA1MjgyLCA1Mjg0LCA1Mjg2LCAKKyAgICA1Mjg4LCA1MjkwLCA1MjkyLCA1Mjk0LCA1Mjk2LCA1Mjk4LCA1MzAwLCA1MzAyLCA1MzA0LCA1MzA2LCA1MzA5LCA1MzEyLCAKKyAgICA1MzE1LCA1MzE4LCA1MzIxLCA1MzI0LCA1MzI3LCA1MzMwLCA1MzMzLCA1MzM2LCA1MzM5LCA1MzQyLCA1MzQ1LCA1MzQ4LCAKKyAgICA1MzU0LCA1MzU5LCAwLCA1MzYyLCA1MzY0LCA1MzY2LCA1MzY4LCA1MzcwLCA1MzcyLCA1Mzc0LCA1Mzc2LCA1Mzc4LCAKKyAgICA1MzgwLCA1MzgyLCA1Mzg0LCA1Mzg2LCA1Mzg4LCA1MzkwLCA1MzkyLCA1Mzk0LCA1Mzk2LCA1Mzk4LCA1NDAwLCA1NDAyLCAKKyAgICA1NDA0LCA1NDA2LCA1NDA4LCA1NDEwLCA1NDEyLCA1NDE0LCA1NDE2LCA1NDE4LCA1NDIwLCA1NDIyLCA1NDI0LCA1NDI2LCAKKyAgICA1NDI4LCA1NDMwLCA1NDMyLCA1NDM0LCA1NDM2LCA1NDM4LCA1NDQwLCA1NDQyLCA1NDQ0LCA1NDQ2LCA1NDQ4LCA1NDUwLCAKKyAgICA1NDUyLCA1NDU0LCA1NDU2LCA1NDU4LCA1NDYwLCA1NDYzLCA1NDY2LCA1NDY5LCA1NDcyLCA1NDc1LCA1NDc4LCA1NDgxLCAKKyAgICA1NDg0LCA1NDg3LCA1NDkwLCA1NDkzLCA1NDk2LCA1NDk5LCA1NTAyLCA1NTA1LCA1NTA4LCA1NTExLCA1NTE0LCA1NTE3LCAKKyAgICA1NTIwLCA1NTIzLCA1NTI2LCA1NTI5LCA1NTMyLCA1NTM2LCA1NTQwLCA1NTQ0LCA1NTQ3LCA1NTUxLCA1NTU0LCA1NTU4LCAKKyAgICA1NTYwLCA1NTYyLCA1NTY0LCA1NTY2LCA1NTY4LCA1NTcwLCA1NTcyLCA1NTc0LCA1NTc2LCA1NTc4LCA1NTgwLCA1NTgyLCAKKyAgICA1NTg0LCA1NTg2LCA1NTg4LCA1NTkwLCA1NTkyLCA1NTk0LCA1NTk2LCA1NTk4LCA1NjAwLCA1NjAyLCA1NjA0LCA1NjA2LCAKKyAgICA1NjA4LCA1NjEwLCA1NjEyLCA1NjE0LCA1NjE2LCA1NjE4LCA1NjIwLCA1NjIyLCA1NjI0LCA1NjI2LCA1NjI4LCA1NjMwLCAKKyAgICA1NjMyLCA1NjM0LCA1NjM2LCA1NjM4LCA1NjQwLCA1NjQyLCA1NjQ0LCA1NjQ2LCA1NjQ4LCA1NjUwLCAwLCA1NjUyLCAKKyAgICA1NjU3LCA1NjYyLCA1NjY3LCA1NjcxLCA1Njc2LCA1NjgwLCA1Njg0LCA1NjkwLCA1Njk1LCA1Njk5LCA1NzAzLCA1NzA3LCAKKyAgICA1NzEyLCA1NzE3LCA1NzIxLCA1NzI1LCA1NzI4LCA1NzMyLCA1NzM3LCA1NzQyLCA1NzQ1LCA1NzUxLCA1NzU4LCA1NzY0LCAKKyAgICA1NzY4LCA1Nzc0LCA1NzgwLCA1Nzg1LCA1Nzg5LCA1NzkzLCA1Nzk3LCA1ODAyLCA1ODA4LCA1ODEzLCA1ODE3LCA1ODIxLCAKKyAgICA1ODI1LCA1ODI4LCA1ODMxLCA1ODM0LCA1ODM3LCA1ODQxLCA1ODQ1LCA1ODUxLCA1ODU1LCA1ODYwLCA1ODY2LCA1ODcwLCAKKyAgICA1ODczLCA1ODc2LCA1ODgyLCA1ODg3LCA1ODkzLCA1ODk3LCA1OTAzLCA1OTA2LCA1OTEwLCA1OTE0LCA1OTE4LCA1OTIyLCAKKyAgICA1OTI2LCA1OTMxLCA1OTM1LCA1OTM4LCA1OTQyLCA1OTQ2LCA1OTUwLCA1OTU1LCA1OTU5LCA1OTYzLCA1OTY3LCA1OTczLCAKKyAgICA1OTc4LCA1OTgxLCA1OTg3LCA1OTkwLCA1OTk1LCA2MDAwLCA2MDA0LCA2MDA4LCA2MDEyLCA2MDE3LCA2MDIwLCA2MDI0LCAKKyAgICA2MDI5LCA2MDMyLCA2MDM4LCA2MDQyLCA2MDQ1LCA2MDQ4LCA2MDUxLCA2MDU0LCA2MDU3LCA2MDYwLCA2MDYzLCA2MDY2LCAKKyAgICA2MDY5LCA2MDcyLCA2MDc2LCA2MDgwLCA2MDg0LCA2MDg4LCA2MDkyLCA2MDk2LCA2MTAwLCA2MTA0LCA2MTA4LCA2MTEyLCAKKyAgICA2MTE2LCA2MTIwLCA2MTI0LCA2MTI4LCA2MTMyLCA2MTM2LCA2MTM5LCA2MTQyLCA2MTQ2LCA2MTQ5LCA2MTUyLCA2MTU1LCAKKyAgICA2MTU5LCA2MTYzLCA2MTY2LCA2MTY5LCA2MTcyLCA2MTc1LCA2MTc4LCA2MTgzLCA2MTg2LCA2MTg5LCA2MTkyLCA2MTk1LCAKKyAgICA2MTk4LCA2MjAxLCA2MjA0LCA2MjA3LCA2MjExLCA2MjE2LCA2MjE5LCA2MjIyLCA2MjI1LCA2MjI4LCA2MjMxLCA2MjM0LCAKKyAgICA2MjM3LCA2MjQxLCA2MjQ1LCA2MjQ5LCA2MjUzLCA2MjU2LCA2MjU5LCA2MjYyLCA2MjY1LCA2MjY4LCA2MjcxLCA2Mjc0LCAKKyAgICA2Mjc3LCA2MjgwLCA2MjgzLCA2Mjg3LCA2MjkxLCA2Mjk0LCA2Mjk4LCA2MzAyLCA2MzA2LCA2MzA5LCA2MzEzLCA2MzE3LCAKKyAgICA2MzIyLCA2MzI1LCA2MzI5LCA2MzMzLCA2MzM3LCA2MzQxLCA2MzQ3LCA2MzU0LCA2MzU3LCA2MzYwLCA2MzYzLCA2MzY2LCAKKyAgICA2MzY5LCA2MzcyLCA2Mzc1LCA2Mzc4LCA2MzgxLCA2Mzg0LCA2Mzg3LCA2MzkwLCA2MzkzLCA2Mzk2LCA2Mzk5LCA2NDAyLCAKKyAgICA2NDA1LCA2NDA4LCA2NDEzLCA2NDE2LCA2NDE5LCA2NDIyLCA2NDI3LCA2NDMxLCA2NDM0LCA2NDM3LCA2NDQwLCA2NDQzLCAKKyAgICA2NDQ2LCA2NDQ5LCA2NDUyLCA2NDU1LCA2NDU4LCA2NDYxLCA2NDY1LCA2NDY4LCA2NDcxLCA2NDc1LCA2NDc5LCA2NDgyLCAKKyAgICA2NDg3LCA2NDkxLCA2NDk0LCA2NDk3LCA2NTAwLCA2NTAzLCA2NTA3LCA2NTExLCA2NTE0LCA2NTE3LCA2NTIwLCA2NTIzLCAKKyAgICA2NTI2LCA2NTI5LCA2NTMyLCA2NTM1LCA2NTM4LCA2NTQyLCA2NTQ2LCA2NTUwLCA2NTU0LCA2NTU4LCA2NTYyLCA2NTY2LCAKKyAgICA2NTcwLCA2NTc0LCA2NTc4LCA2NTgyLCA2NTg2LCA2NTkwLCA2NTk0LCA2NTk4LCA2NjAyLCA2NjA2LCA2NjEwLCA2NjE0LCAKKyAgICA2NjE4LCA2NjIyLCA2NjI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTE0LCA0OTE4LCA0OTIyLCAKLSAgICA0OTI2LCA0OTMwLCA0OTM0LCA0OTM4LCA0OTQyLCA0OTQ2LCA0OTUwLCA0OTU0LCA0OTU4LCA0OTYyLCA0OTY2LCA0OTcwLCAKLSAgICA0OTc1LCA0OTgwLCA0OTg1LCA0OTkwLCA0OTk1LCA1MDAwLCA1MDA1LCA1MDEwLCA1MDE1LCA1MDIwLCA1MDI1LCA1MDMwLCAKLSAgICA1MDM1LCA1MDQwLCA1MDQ1LCA1MDUzLCAwLCA1MDYwLCA1MDY0LCA1MDY4LCA1MDcyLCA1MDc2LCA1MDgwLCA1MDg0LCAKLSAgICA1MDg4LCA1MDkyLCA1MDk2LCA1MTAwLCA1MTA0LCA1MTA4LCA1MTEyLCA1MTE2LCA1MTIwLCA1MTI0LCA1MTI4LCA1MTMyLCAKLSAgICA1MTM2LCA1MTQwLCA1MTQ0LCA1MTQ4LCA1MTUyLCA1MTU2LCA1MTYwLCA1MTY0LCA1MTY4LCA1MTcyLCA1MTc2LCA1MTgwLCAKLSAgICA1MTg0LCA1MTg4LCA1MTkyLCA1MTk2LCA1MjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjA0LCAKLSAgICA1MjA4LCA1MjExLCA1MjE0LCA1MjE3LCA1MjIwLCA1MjIzLCA1MjI2LCA1MjI5LCA1MjMyLCA1MjM1LCA1MjM4LCA1MjQxLCAKLSAgICA1MjQ0LCA1MjQ3LCA1MjUwLCA1MjUzLCA1MjU1LCA1MjU3LCA1MjU5LCA1MjYxLCA1MjYzLCA1MjY1LCA1MjY3LCA1MjY5LCAKLSAgICA1MjcxLCA1MjczLCA1Mjc1LCA1Mjc3LCA1Mjc5LCA1MjgxLCA1Mjg0LCA1Mjg3LCA1MjkwLCA1MjkzLCA1Mjk2LCA1Mjk5LCAKLSAgICA1MzAyLCA1MzA1LCA1MzA4LCA1MzExLCA1MzE0LCA1MzE3LCA1MzIwLCA1MzIzLCA1MzI5LCA1MzM0LCAwLCA1MzM3LCAKLSAgICA1MzM5LCA1MzQxLCA1MzQzLCA1MzQ1LCA1MzQ3LCA1MzQ5LCA1MzUxLCA1MzUzLCA1MzU1LCA1MzU3LCA1MzU5LCA1MzYxLCAKLSAgICA1MzYzLCA1MzY1LCA1MzY3LCA1MzY5LCA1MzcxLCA1MzczLCA1Mzc1LCA1Mzc3LCA1Mzc5LCA1MzgxLCA1MzgzLCA1Mzg1LCAKLSAgICA1Mzg3LCA1Mzg5LCA1MzkxLCA1MzkzLCA1Mzk1LCA1Mzk3LCA1Mzk5LCA1NDAxLCA1NDAzLCA1NDA1LCA1NDA3LCA1NDA5LCAKLSAgICA1NDExLCA1NDEzLCA1NDE1LCA1NDE3LCA1NDE5LCA1NDIxLCA1NDIzLCA1NDI1LCA1NDI3LCA1NDI5LCA1NDMxLCA1NDMzLCAKLSAgICA1NDM1LCA1NDM4LCA1NDQxLCA1NDQ0LCA1NDQ3LCA1NDUwLCA1NDUzLCA1NDU2LCA1NDU5LCA1NDYyLCA1NDY1LCA1NDY4LCAKLSAgICA1NDcxLCA1NDc0LCA1NDc3LCA1NDgwLCA1NDgzLCA1NDg2LCA1NDg5LCA1NDkyLCA1NDk1LCA1NDk4LCA1NTAxLCA1NTA0LCAKLSAgICA1NTA3LCA1NTExLCA1NTE1LCA1NTE5LCA1NTIyLCA1NTI2LCA1NTI5LCA1NTMzLCA1NTM1LCA1NTM3LCA1NTM5LCA1NTQxLCAKLSAgICA1NTQzLCA1NTQ1LCA1NTQ3LCA1NTQ5LCA1NTUxLCA1NTUzLCA1NTU1LCA1NTU3LCA1NTU5LCA1NTYxLCA1NTYzLCA1NTY1LCAKLSAgICA1NTY3LCA1NTY5LCA1NTcxLCA1NTczLCA1NTc1LCA1NTc3LCA1NTc5LCA1NTgxLCA1NTgzLCA1NTg1LCA1NTg3LCA1NTg5LCAKLSAgICA1NTkxLCA1NTkzLCA1NTk1LCA1NTk3LCA1NTk5LCA1NjAxLCA1NjAzLCA1NjA1LCA1NjA3LCA1NjA5LCA1NjExLCA1NjEzLCAKLSAgICA1NjE1LCA1NjE3LCA1NjE5LCA1NjIxLCA1NjIzLCA1NjI1LCAwLCA1NjI3LCA1NjMyLCA1NjM3LCA1NjQyLCA1NjQ2LCAKLSAgICA1NjUxLCA1NjU1LCA1NjU5LCA1NjY1LCA1NjcwLCA1Njc0LCA1Njc4LCA1NjgyLCA1Njg3LCA1NjkyLCA1Njk2LCA1NzAwLCAKLSAgICA1NzAzLCA1NzA3LCA1NzEyLCA1NzE3LCA1NzIwLCA1NzI2LCA1NzMzLCA1NzM5LCA1NzQzLCA1NzQ5LCA1NzU1LCA1NzYwLCAKLSAgICA1NzY0LCA1NzY4LCA1NzcyLCA1Nzc3LCA1NzgzLCA1Nzg4LCA1NzkyLCA1Nzk2LCA1ODAwLCA1ODAzLCA1ODA2LCA1ODA5LCAKLSAgICA1ODEyLCA1ODE2LCA1ODIwLCA1ODI2LCA1ODMwLCA1ODM1LCA1ODQxLCA1ODQ1LCA1ODQ4LCA1ODUxLCA1ODU3LCA1ODYyLCAKLSAgICA1ODY4LCA1ODcyLCA1ODc4LCA1ODgxLCA1ODg1LCA1ODg5LCA1ODkzLCA1ODk3LCA1OTAxLCA1OTA2LCA1OTEwLCA1OTEzLCAKLSAgICA1OTE3LCA1OTIxLCA1OTI1LCA1OTMwLCA1OTM0LCA1OTM4LCA1OTQyLCA1OTQ4LCA1OTUzLCA1OTU2LCA1OTYyLCA1OTY1LCAKLSAgICA1OTcwLCA1OTc1LCA1OTc5LCA1OTgzLCA1OTg3LCA1OTkyLCA1OTk1LCA1OTk5LCA2MDA0LCA2MDA3LCA2MDEzLCA2MDE3LCAKLSAgICA2MDIwLCA2MDIzLCA2MDI2LCA2MDI5LCA2MDMyLCA2MDM1LCA2MDM4LCA2MDQxLCA2MDQ0LCA2MDQ3LCA2MDUxLCA2MDU1LCAKLSAgICA2MDU5LCA2MDYzLCA2MDY3LCA2MDcxLCA2MDc1LCA2MDc5LCA2MDgzLCA2MDg3LCA2MDkxLCA2MDk1LCA2MDk5LCA2MTAzLCAKLSAgICA2MTA3LCA2MTExLCA2MTE0LCA2MTE3LCA2MTIxLCA2MTI0LCA2MTI3LCA2MTMwLCA2MTM0LCA2MTM4LCA2MTQxLCA2MTQ0LCAKLSAgICA2MTQ3LCA2MTUwLCA2MTUzLCA2MTU4LCA2MTYxLCA2MTY0LCA2MTY3LCA2MTcwLCA2MTczLCA2MTc2LCA2MTc5LCA2MTgyLCAKLSAgICA2MTg2LCA2MTkxLCA2MTk0LCA2MTk3LCA2MjAwLCA2MjAzLCA2MjA2LCA2MjA5LCA2MjEyLCA2MjE2LCA2MjIwLCA2MjI0LCAKLSAgICA2MjI4LCA2MjMxLCA2MjM0LCA2MjM3LCA2MjQwLCA2MjQzLCA2MjQ2LCA2MjQ5LCA2MjUyLCA2MjU1LCA2MjU4LCA2MjYyLCAKLSAgICA2MjY2LCA2MjY5LCA2MjczLCA2Mjc3LCA2MjgxLCA2Mjg0LCA2Mjg4LCA2MjkyLCA2Mjk3LCA2MzAwLCA2MzA0LCA2MzA4LCAKLSAgICA2MzEyLCA2MzE2LCA2MzIyLCA2MzI5LCA2MzMyLCA2MzM1LCA2MzM4LCA2MzQxLCA2MzQ0LCA2MzQ3LCA2MzUwLCA2MzUzLCAKLSAgICA2MzU2LCA2MzU5LCA2MzYyLCA2MzY1LCA2MzY4LCA2MzcxLCA2Mzc0LCA2Mzc3LCA2MzgwLCA2MzgzLCA2Mzg4LCA2MzkxLCAKLSAgICA2Mzk0LCA2Mzk3LCA2NDAyLCA2NDA2LCA2NDA5LCA2NDEyLCA2NDE1LCA2NDE4LCA2NDIxLCA2NDI0LCA2NDI3LCA2NDMwLCAKLSAgICA2NDMzLCA2NDM2LCA2NDQwLCA2NDQzLCA2NDQ2LCA2NDUwLCA2NDU0LCA2NDU3LCA2NDYyLCA2NDY2LCA2NDY5LCA2NDcyLCAKLSAgICA2NDc1LCA2NDc4LCA2NDgyLCA2NDg2LCA2NDg5LCA2NDkyLCA2NDk1LCA2NDk4LCA2NTAxLCA2NTA0LCA2NTA3LCA2NTEwLCAKLSAgICA2NTEzLCA2NTE3LCA2NTIxLCA2NTI1LCA2NTI5LCA2NTMzLCA2NTM3LCA2NTQxLCA2NTQ1LCA2NTQ5LCA2NTUzLCA2NTU3LCAKLSAgICA2NTYxLCA2NTY1LCA2NTY5LCA2NTczLCA2NTc3LCA2NTgxLCA2NTg1LCA2NTg5LCA2NTkzLCA2NTk3LCA2NjAxLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjMwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2NjMyLCA2NjM0LCA2NjM2LCA2NjM4LCA2NjQwLCA2NjQyLCA2NjQ0LCA2NjQ2LCA2NjQ4LCA2NjUwLCA2NjUyLCA2NjU0LCAKKyAgICA2NjU2LCA2NjU4LCA2NjYwLCA2NjYyLCA2NjY0LCA2NjY2LCA2NjY4LCA2NjcwLCA2NjcyLCA2Njc0LCA2Njc2LCA2Njc4LCAKKyAgICA2NjgwLCA2NjgyLCA2Njg0LCA2Njg2LCA2Njg4LCA2NjkwLCA2NjkyLCA2Njk0LCA2Njk2LCA2Njk4LCA2NzAwLCA2NzAyLCAKKyAgICA2NzA0LCA2NzA2LCA2NzA4LCA2NzEwLCA2NzEyLCA2NzE0LCA2NzE2LCA2NzE4LCA2NzIwLCA2NzIyLCA2NzI0LCA2NzI2LCAKKyAgICA2NzI4LCA2NzMwLCA2NzMyLCA2NzM0LCA2NzM2LCA2NzM4LCA2NzQwLCA2NzQyLCA2NzQ0LCA2NzQ2LCA2NzQ4LCA2NzUwLCAKKyAgICA2NzUyLCA2NzU0LCA2NzU2LCA2NzU4LCA2NzYwLCA2NzYyLCA2NzY0LCA2NzY2LCA2NzY4LCA2NzcwLCA2NzcyLCA2Nzc0LCAKKyAgICA2Nzc2LCA2Nzc4LCA2NzgwLCA2NzgyLCA2Nzg0LCA2Nzg2LCA2Nzg4LCA2NzkwLCA2NzkyLCA2Nzk0LCA2Nzk2LCA2Nzk4LCAKKyAgICA2ODAwLCA2ODAyLCA2ODA0LCA2ODA2LCA2ODA4LCA2ODEwLCA2ODEyLCA2ODE0LCA2ODE2LCA2ODE4LCA2ODIwLCA2ODIyLCAKKyAgICA2ODI0LCA2ODI2LCA2ODI4LCA2ODMwLCA2ODMyLCA2ODM0LCA2ODM2LCA2ODM4LCA2ODQwLCA2ODQyLCA2ODQ0LCA2ODQ2LCAKKyAgICA2ODQ4LCA2ODUwLCA2ODUyLCA2ODU0LCA2ODU2LCA2ODU4LCA2ODYwLCA2ODYyLCA2ODY0LCA2ODY2LCA2ODY4LCA2ODcwLCAKKyAgICA2ODcyLCA2ODc0LCA2ODc2LCA2ODc4LCA2ODgwLCA2ODgyLCA2ODg0LCA2ODg2LCA2ODg4LCA2ODkwLCA2ODkyLCA2ODk0LCAKKyAgICA2ODk2LCA2ODk4LCA2OTAwLCA2OTAyLCA2OTA0LCA2OTA2LCA2OTA4LCA2OTEwLCA2OTEyLCA2OTE0LCA2OTE2LCA2OTE4LCAKKyAgICA2OTIwLCA2OTIyLCA2OTI0LCA2OTI2LCA2OTI4LCA2OTMwLCA2OTMyLCA2OTM0LCA2OTM2LCA2OTM4LCA2OTQwLCA2OTQyLCAKKyAgICA2OTQ0LCA2OTQ2LCA2OTQ4LCA2OTUwLCA2OTUyLCA2OTU0LCA2OTU2LCA2OTU4LCA2OTYwLCA2OTYyLCA2OTY0LCA2OTY2LCAKKyAgICA2OTY4LCA2OTcwLCA2OTcyLCA2OTc0LCA2OTc2LCA2OTc4LCA2OTgwLCA2OTgyLCA2OTg0LCA2OTg2LCA2OTg4LCA2OTkwLCAKKyAgICA2OTkyLCA2OTk0LCA2OTk2LCA2OTk4LCA3MDAwLCA3MDAyLCA3MDA0LCA3MDA2LCA3MDA4LCA3MDEwLCA3MDEyLCA3MDE0LCAKKyAgICA3MDE2LCA3MDE4LCA3MDIwLCA3MDIyLCA3MDI0LCA3MDI2LCA3MDI4LCA3MDMwLCA3MDMyLCA3MDM0LCA3MDM2LCA3MDM4LCAKKyAgICA3MDQwLCA3MDQyLCA3MDQ0LCA3MDQ2LCA3MDQ4LCA3MDUwLCA3MDUyLCA3MDU0LCA3MDU2LCA3MDU4LCA3MDYwLCA3MDYyLCAKKyAgICA3MDY0LCA3MDY2LCA3MDY4LCA3MDcwLCA3MDcyLCA3MDc0LCA3MDc2LCA3MDc4LCA3MDgwLCA3MDgyLCA3MDg0LCA3MDg2LCAKKyAgICA3MDg4LCA3MDkwLCA3MDkyLCA3MDk0LCA3MDk2LCA3MDk4LCA3MTAwLCA3MTAyLCA3MTA0LCA3MTA2LCA3MTA4LCA3MTEwLCAKKyAgICA3MTEyLCA3MTE0LCA3MTE2LCA3MTE4LCA3MTIwLCA3MTIyLCA3MTI0LCA3MTI2LCA3MTI4LCA3MTMwLCA3MTMyLCA3MTM0LCAKKyAgICA3MTM2LCA3MTM4LCA3MTQwLCA3MTQyLCA3MTQ0LCA3MTQ2LCA3MTQ4LCA3MTUwLCA3MTUyLCA3MTU0LCA3MTU2LCA3MTU4LCAKKyAgICA3MTYwLCA3MTYyLCA3MTY0LCA3MTY2LCA3MTY4LCA3MTcwLCAwLCAwLCA3MTcyLCAwLCA3MTc0LCAwLCAwLCA3MTc2LCAKKyAgICA3MTc4LCA3MTgwLCA3MTgyLCA3MTg0LCA3MTg2LCA3MTg4LCA3MTkwLCA3MTkyLCA3MTk0LCAwLCA3MTk2LCAwLCA3MTk4LCAKKyAgICAwLCAwLCA3MjAwLCA3MjAyLCAwLCAwLCAwLCA3MjA0LCA3MjA2LCA3MjA4LCA3MjEwLCAwLCAwLCA3MjEyLCA3MjE0LCAKKyAgICA3MjE2LCA3MjE4LCA3MjIwLCA3MjIyLCA3MjI0LCA3MjI2LCA3MjI4LCA3MjMwLCA3MjMyLCA3MjM0LCA3MjM2LCA3MjM4LCAKKyAgICA3MjQwLCA3MjQyLCA3MjQ0LCA3MjQ2LCA3MjQ4LCA3MjUwLCA3MjUyLCA3MjU0LCA3MjU2LCA3MjU4LCA3MjYwLCA3MjYyLCAKKyAgICA3MjY0LCA3MjY2LCA3MjY4LCA3MjcwLCA3MjcyLCA3Mjc0LCA3Mjc2LCA3Mjc4LCA3MjgwLCA3MjgyLCA3Mjg0LCA3Mjg2LCAKKyAgICA3Mjg4LCA3MjkwLCA3MjkyLCA3Mjk0LCA3Mjk2LCA3Mjk4LCA3MzAwLCA3MzAyLCA3MzA0LCA3MzA2LCA3MzA4LCA3MzEwLCAKKyAgICA3MzEyLCA3MzE0LCA3MzE2LCA3MzE4LCA3MzIwLCA3MzIyLCA3MzI0LCA3MzI2LCA3MzI4LCA3MzMwLCA3MzMyLCA3MzM0LCAKKyAgICAwLCAwLCA3MzM2LCA3MzM4LCA3MzQwLCA3MzQyLCA3MzQ0LCA3MzQ2LCA3MzQ4LCA3MzUwLCA3MzUyLCA3MzU0LCA3MzU2LCAKKyAgICA3MzU4LCA3MzYwLCA3MzYyLCA3MzY0LCA3MzY2LCA3MzY4LCA3MzcwLCA3MzcyLCA3Mzc0LCA3Mzc2LCA3Mzc4LCA3MzgwLCAKKyAgICA3MzgyLCA3Mzg0LCA3Mzg2LCA3Mzg4LCA3MzkwLCA3MzkyLCA3Mzk0LCA3Mzk2LCA3Mzk4LCA3NDAwLCA3NDAyLCA3NDA0LCAKKyAgICA3NDA2LCA3NDA4LCA3NDEwLCA3NDEyLCA3NDE0LCA3NDE2LCA3NDE4LCA3NDIwLCA3NDIyLCA3NDI0LCA3NDI2LCA3NDI4LCAKKyAgICA3NDMwLCA3NDMyLCA3NDM0LCA3NDM2LCA3NDM4LCA3NDQwLCA3NDQyLCA3NDQ0LCA3NDQ2LCA3NDQ4LCA3NDUwLCA3NDUyLCAKKyAgICA3NDU0LCA3NDU2LCA3NDU4LCA3NDYwLCA3NDYyLCA3NDY0LCA3NDY2LCA3NDY4LCA3NDcwLCA3NDcyLCA3NDc0LCA3NDc2LCAKKyAgICA3NDc4LCA3NDgwLCA3NDgyLCA3NDg0LCA3NDg2LCA3NDg4LCA3NDkwLCA3NDkyLCA3NDk0LCA3NDk2LCA3NDk4LCA3NTAwLCAKKyAgICA3NTAyLCA3NTA0LCA3NTA2LCA3NTA4LCA3NTEwLCA3NTEyLCA3NTE0LCA3NTE2LCA3NTE4LCA3NTIwLCA3NTIyLCA3NTI0LCAKKyAgICA3NTI2LCA3NTI4LCA3NTMwLCA3NTMyLCA3NTM0LCA3NTM2LCA3NTM4LCA3NTQwLCA3NTQyLCA3NTQ0LCA3NTQ2LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTQ4LCA3NTUxLCA3NTU0LCA3NTU3LCA3NTYxLCA3NTY1LCAKKyAgICA3NTY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTcxLCA3NTc0LCA3NTc3LCA3NTgwLCA3NTgzLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3NTg2LCAwLCA3NTg5LCA3NTkyLCA3NTk0LCA3NTk2LCA3NTk4LCA3NjAwLCA3NjAyLCA3NjA0LCAKKyAgICA3NjA2LCA3NjA4LCA3NjEwLCA3NjEyLCA3NjE1LCA3NjE4LCA3NjIxLCA3NjI0LCA3NjI3LCA3NjMwLCA3NjMzLCA3NjM2LCAKKyAgICA3NjM5LCA3NjQyLCA3NjQ1LCA3NjQ4LCAwLCA3NjUxLCA3NjU0LCA3NjU3LCA3NjYwLCA3NjYzLCAwLCA3NjY2LCAwLCAKKyAgICA3NjY5LCA3NjcyLCAwLCA3Njc1LCA3Njc4LCAwLCA3NjgxLCA3Njg0LCA3Njg3LCA3NjkwLCA3NjkzLCA3Njk2LCA3Njk5LCAKKyAgICA3NzAyLCA3NzA1LCA3NzA4LCA3NzExLCA3NzEzLCA3NzE1LCA3NzE3LCA3NzE5LCA3NzIxLCA3NzIzLCA3NzI1LCA3NzI3LCAKKyAgICA3NzI5LCA3NzMxLCA3NzMzLCA3NzM1LCA3NzM3LCA3NzM5LCA3NzQxLCA3NzQzLCA3NzQ1LCA3NzQ3LCA3NzQ5LCA3NzUxLCAKKyAgICA3NzUzLCA3NzU1LCA3NzU3LCA3NzU5LCA3NzYxLCA3NzYzLCA3NzY1LCA3NzY3LCA3NzY5LCA3NzcxLCA3NzczLCA3Nzc1LCAKKyAgICA3Nzc3LCA3Nzc5LCA3NzgxLCA3NzgzLCA3Nzg1LCA3Nzg3LCA3Nzg5LCA3NzkxLCA3NzkzLCA3Nzk1LCA3Nzk3LCA3Nzk5LCAKKyAgICA3ODAxLCA3ODAzLCA3ODA1LCA3ODA3LCA3ODA5LCA3ODExLCA3ODEzLCA3ODE1LCA3ODE3LCA3ODE5LCA3ODIxLCA3ODIzLCAKKyAgICA3ODI1LCA3ODI3LCA3ODI5LCA3ODMxLCA3ODMzLCA3ODM1LCA3ODM3LCA3ODM5LCA3ODQxLCA3ODQzLCA3ODQ1LCA3ODQ3LCAKKyAgICA3ODQ5LCA3ODUxLCA3ODUzLCA3ODU1LCA3ODU3LCA3ODU5LCA3ODYxLCA3ODYzLCA3ODY1LCA3ODY3LCA3ODY5LCA3ODcxLCAKKyAgICA3ODczLCA3ODc1LCA3ODc3LCA3ODc5LCA3ODgxLCA3ODgzLCA3ODg1LCA3ODg3LCA3ODg5LCA3ODkxLCA3ODkzLCA3ODk1LCAKKyAgICA3ODk3LCA3ODk5LCA3OTAxLCA3OTAzLCA3OTA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTA3LCA3OTA5LCAKKyAgICA3OTExLCA3OTEzLCA3OTE1LCA3OTE3LCA3OTE5LCA3OTIxLCA3OTIzLCA3OTI1LCA3OTI3LCA3OTI5LCA3OTMxLCA3OTMzLCAKKyAgICA3OTM1LCA3OTM3LCA3OTM5LCA3OTQxLCA3OTQzLCA3OTQ1LCA3OTQ3LCA3OTQ5LCA3OTUxLCA3OTUzLCA3OTU2LCA3OTU5LCAKKyAgICA3OTYyLCA3OTY1LCA3OTY4LCA3OTcxLCA3OTc0LCA3OTc3LCA3OTgwLCA3OTgzLCA3OTg2LCA3OTg5LCA3OTkyLCA3OTk1LCAKKyAgICA3OTk4LCA4MDAxLCA4MDA0LCA4MDA3LCA4MDA5LCA4MDExLCA4MDEzLCA4MDE1LCA4MDE4LCA4MDIxLCA4MDI0LCA4MDI3LCAKKyAgICA4MDMwLCA4MDMzLCA4MDM2LCA4MDM5LCA4MDQyLCA4MDQ1LCA4MDQ4LCA4MDUxLCA4MDU0LCA4MDU3LCA4MDYwLCA4MDYzLCAKKyAgICA4MDY2LCA4MDY5LCA4MDcyLCA4MDc1LCA4MDc4LCA4MDgxLCA4MDg0LCA4MDg3LCA4MDkwLCA4MDkzLCA4MDk2LCA4MDk5LCAKKyAgICA4MTAyLCA4MTA1LCA4MTA4LCA4MTExLCA4MTE0LCA4MTE3LCA4MTIwLCA4MTIzLCA4MTI2LCA4MTI5LCA4MTMyLCA4MTM1LCAKKyAgICA4MTM4LCA4MTQxLCA4MTQ0LCA4MTQ3LCA4MTUwLCA4MTUzLCA4MTU2LCA4MTU5LCA4MTYyLCA4MTY1LCA4MTY4LCA4MTcxLCAKKyAgICA4MTc0LCA4MTc3LCA4MTgwLCA4MTgzLCA4MTg2LCA4MTg5LCA4MTkyLCA4MTk1LCA4MTk4LCA4MjAxLCA4MjA0LCA4MjA3LCAKKyAgICA4MjEwLCA4MjEzLCA4MjE2LCA4MjE5LCA4MjIyLCA4MjI1LCA4MjI4LCA4MjMxLCA4MjM0LCA4MjM3LCA4MjQwLCA4MjQzLCAKKyAgICA4MjQ2LCA4MjQ5LCA4MjUyLCA4MjU1LCA4MjU4LCA4MjYxLCA4MjY0LCA4MjY3LCA4MjcwLCA4MjczLCA4Mjc2LCA4Mjc5LCAKKyAgICA4MjgyLCA4Mjg1LCA4Mjg4LCA4MjkxLCA4Mjk0LCA4Mjk3LCA4MzAxLCA4MzA1LCA4MzA5LCA4MzEzLCA4MzE3LCA4MzIxLCAKKyAgICA4MzI0LCA4MzI3LCA4MzMwLCA4MzMzLCA4MzM2LCA4MzM5LCA4MzQyLCA4MzQ1LCA4MzQ4LCA4MzUxLCA4MzU0LCA4MzU3LCAKKyAgICA4MzYwLCA4MzYzLCA4MzY2LCA4MzY5LCA4MzcyLCA4Mzc1LCA4Mzc4LCA4MzgxLCA4Mzg0LCA4Mzg3LCA4MzkwLCA4MzkzLCAKKyAgICA4Mzk2LCA4Mzk5LCA4NDAyLCA4NDA1LCA4NDA4LCA4NDExLCA4NDE0LCA4NDE3LCA4NDIwLCA4NDIzLCA4NDI2LCA4NDI5LCAKKyAgICA4NDMyLCA4NDM1LCA4NDM4LCA4NDQxLCA4NDQ0LCA4NDQ3LCA4NDUwLCA4NDUzLCA4NDU2LCA4NDU5LCA4NDYyLCA4NDY1LCAKKyAgICA4NDY4LCA4NDcxLCA4NDc0LCA4NDc3LCA4NDgwLCA4NDgzLCA4NDg2LCA4NDg5LCA4NDkyLCA4NDk1LCA4NDk4LCA4NTAxLCAKKyAgICA4NTA0LCA4NTA3LCA4NTEwLCA4NTEzLCA4NTE2LCA4NTE5LCA4NTIyLCA4NTI1LCA4NTI4LCA4NTMxLCA4NTM0LCA4NTM3LCAKKyAgICA4NTQwLCA4NTQzLCA4NTQ2LCA4NTQ5LCA4NTUyLCA4NTU1LCA4NTU4LCA4NTYxLCA4NTY0LCA4NTY3LCA4NTcwLCA4NTczLCAKKyAgICA4NTc2LCA4NTc5LCA4NTgyLCA4NTg1LCA4NTg4LCA4NTkxLCA4NTk0LCA4NTk3LCA4NjAwLCA4NjAzLCA4NjA2LCA4NjA5LCAKKyAgICA4NjEyLCA4NjE1LCA4NjE4LCA4NjIxLCA4NjI0LCA4NjI3LCA4NjMwLCA4NjMzLCA4NjM2LCA4NjM5LCA4NjQyLCA4NjQ1LCAKKyAgICA4NjQ4LCA4NjUxLCA4NjU0LCA4NjU3LCA4NjYwLCA4NjYzLCA4NjY2LCA4NjY5LCA4NjcyLCA4Njc1LCA4Njc4LCA4NjgxLCAKKyAgICA4Njg0LCA4Njg3LCA4NjkwLCA4NjkzLCA4Njk2LCA4Njk5LCA4NzAyLCA4NzA1LCA4NzA4LCA4NzExLCA4NzE0LCA4NzE3LCAKKyAgICA4NzIwLCA4NzIzLCA4NzI2LCA4NzI5LCA4NzMyLCA4NzM1LCA4NzM4LCA4NzQxLCA4NzQ0LCA4NzQ3LCA4NzUxLCA4NzU1LCAKKyAgICA4NzU5LCA4NzYyLCA4NzY1LCA4NzY4LCA4NzcxLCA4Nzc0LCA4Nzc3LCA4NzgwLCA4NzgzLCA4Nzg2LCA4Nzg5LCA4NzkyLCAKKyAgICA4Nzk1LCA4Nzk4LCA4ODAxLCA4ODA0LCA4ODA3LCA4ODEwLCA4ODEzLCA4ODE2LCA4ODE5LCA4ODIyLCA4ODI1LCA4ODI4LCAKKyAgICA4ODMxLCA4ODM0LCA4ODM3LCA4ODQwLCA4ODQzLCA4ODQ2LCA4ODQ5LCA4ODUyLCA4ODU1LCA4ODU4LCA4ODYxLCA4ODY0LCAKKyAgICA4ODY3LCA4ODcwLCA4ODczLCA4ODc2LCA4ODc5LCA4ODgyLCA4ODg1LCA4ODg4LCA4ODkxLCA4ODk0LCA4ODk3LCA4OTAwLCAKKyAgICA4OTAzLCA4OTA2LCA4OTA5LCA4OTEyLCA4OTE1LCA4OTE4LCA4OTIxLCA4OTI0LCA4OTI3LCA4OTMwLCA4OTMzLCA4OTM2LCAKKyAgICA4OTM5LCA4OTQyLCA4OTQ1LCA4OTQ4LCA4OTUxLCA4OTU0LCA4OTU3LCA4OTYwLCA4OTYzLCA4OTY2LCA4OTY5LCA4OTcyLCAKKyAgICA4OTc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTc4LCA4OTgyLCAKKyAgICA4OTg2LCA4OTkwLCA4OTk0LCA4OTk4LCA5MDAyLCA5MDA2LCA5MDEwLCA5MDE0LCA5MDE4LCA5MDIyLCA5MDI2LCA5MDMwLCAKKyAgICA5MDM0LCA5MDM4LCA5MDQyLCA5MDQ2LCA5MDUwLCA5MDU0LCA5MDU4LCA5MDYyLCA5MDY2LCA5MDcwLCA5MDc0LCA5MDc4LCAKKyAgICA5MDgyLCA5MDg2LCA5MDkwLCA5MDk0LCA5MDk4LCA5MTAyLCA5MTA2LCA5MTEwLCA5MTE0LCA5MTE4LCA5MTIyLCA5MTI2LCAKKyAgICA5MTMwLCA5MTM0LCA5MTM4LCA5MTQyLCA5MTQ2LCA5MTUwLCA5MTU0LCA5MTU4LCA5MTYyLCA5MTY2LCA5MTcwLCA5MTc0LCAKKyAgICA5MTc4LCA5MTgyLCA5MTg2LCA5MTkwLCA5MTk0LCA5MTk4LCA5MjAyLCA5MjA2LCA5MjEwLCA5MjE0LCA5MjE4LCA5MjIyLCAKKyAgICA5MjI2LCA5MjMwLCAwLCAwLCA5MjM0LCA5MjM4LCA5MjQyLCA5MjQ2LCA5MjUwLCA5MjU0LCA5MjU4LCA5MjYyLCA5MjY2LCAKKyAgICA5MjcwLCA5Mjc0LCA5Mjc4LCA5MjgyLCA5Mjg2LCA5MjkwLCA5Mjk0LCA5Mjk4LCA5MzAyLCA5MzA2LCA5MzEwLCA5MzE0LCAKKyAgICA5MzE4LCA5MzIyLCA5MzI2LCA5MzMwLCA5MzM0LCA5MzM4LCA5MzQyLCA5MzQ2LCA5MzUwLCA5MzU0LCA5MzU4LCA5MzYyLCAKKyAgICA5MzY2LCA5MzcwLCA5Mzc0LCA5Mzc4LCA5MzgyLCA5Mzg2LCA5MzkwLCA5Mzk0LCA5Mzk4LCA5NDAyLCA5NDA2LCA5NDEwLCAKKyAgICA5NDE0LCA5NDE4LCA5NDIyLCA5NDI2LCA5NDMwLCA5NDM0LCA5NDM4LCA5NDQyLCA5NDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDUwLCA5NDU0LCA5NDU4LCA5NDYzLCA5NDY4LCA5NDczLCA5NDc4LCAKKyAgICA5NDgzLCA5NDg4LCA5NDkzLCA5NDk3LCA5NTE2LCA5NTI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTMwLCA5NTMyLCA5NTM0LCA5NTM2LCA5NTM4LCA5NTQwLCA5NTQyLCA5NTQ0LCAKKyAgICA5NTQ2LCA5NTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA5NTUwLCA5NTUyLCA5NTU0LCA5NTU2LCA5NTU4LCA5NTYwLCA5NTYyLCA5NTY0LCA5NTY2LCA5NTY4LCA5NTcwLCAKKyAgICA5NTcyLCA5NTc0LCA5NTc2LCA5NTc4LCA5NTgwLCA5NTgyLCA5NTg0LCA5NTg2LCA5NTg4LCA5NTkwLCAwLCAwLCA5NTkyLCAKKyAgICA5NTk0LCA5NTk2LCA5NTk4LCA5NjAwLCA5NjAyLCA5NjA0LCA5NjA2LCA5NjA4LCA5NjEwLCA5NjEyLCA5NjE0LCAwLCAKKyAgICA5NjE2LCA5NjE4LCA5NjIwLCA5NjIyLCA5NjI0LCA5NjI2LCA5NjI4LCA5NjMwLCA5NjMyLCA5NjM0LCA5NjM2LCA5NjM4LCAKKyAgICA5NjQwLCA5NjQyLCA5NjQ0LCA5NjQ2LCA5NjQ4LCA5NjUwLCA5NjUyLCAwLCA5NjU0LCA5NjU2LCA5NjU4LCA5NjYwLCAwLCAKKyAgICAwLCAwLCAwLCA5NjYyLCA5NjY1LCA5NjY4LCAwLCA5NjcxLCAwLCA5Njc0LCA5Njc3LCA5NjgwLCA5NjgzLCA5Njg2LCAKKyAgICA5Njg5LCA5NjkyLCA5Njk1LCA5Njk4LCA5NzAxLCA5NzA0LCA5NzA2LCA5NzA4LCA5NzEwLCA5NzEyLCA5NzE0LCA5NzE2LCAKKyAgICA5NzE4LCA5NzIwLCA5NzIyLCA5NzI0LCA5NzI2LCA5NzI4LCA5NzMwLCA5NzMyLCA5NzM0LCA5NzM2LCA5NzM4LCA5NzQwLCAKKyAgICA5NzQyLCA5NzQ0LCA5NzQ2LCA5NzQ4LCA5NzUwLCA5NzUyLCA5NzU0LCA5NzU2LCA5NzU4LCA5NzYwLCA5NzYyLCA5NzY0LCAKKyAgICA5NzY2LCA5NzY4LCA5NzcwLCA5NzcyLCA5Nzc0LCA5Nzc2LCA5Nzc4LCA5NzgwLCA5NzgyLCA5Nzg0LCA5Nzg2LCA5Nzg4LCAKKyAgICA5NzkwLCA5NzkyLCA5Nzk0LCA5Nzk2LCA5Nzk4LCA5ODAwLCA5ODAyLCA5ODA0LCA5ODA2LCA5ODA4LCA5ODEwLCA5ODEyLCAKKyAgICA5ODE0LCA5ODE2LCA5ODE4LCA5ODIwLCA5ODIyLCA5ODI0LCA5ODI2LCA5ODI4LCA5ODMwLCA5ODMyLCA5ODM0LCA5ODM2LCAKKyAgICA5ODM4LCA5ODQwLCA5ODQyLCA5ODQ0LCA5ODQ2LCA5ODQ4LCA5ODUwLCA5ODUyLCA5ODU0LCA5ODU2LCA5ODU4LCA5ODYwLCAKKyAgICA5ODYyLCA5ODY0LCA5ODY2LCA5ODY4LCA5ODcwLCA5ODcyLCA5ODc0LCA5ODc2LCA5ODc4LCA5ODgwLCA5ODgyLCA5ODg0LCAKKyAgICA5ODg2LCA5ODg4LCA5ODkwLCA5ODkyLCA5ODk0LCA5ODk2LCA5ODk4LCA5OTAwLCA5OTAyLCA5OTA0LCA5OTA2LCA5OTA4LCAKKyAgICA5OTEwLCA5OTEyLCA5OTE0LCA5OTE2LCA5OTE4LCA5OTIwLCA5OTIyLCA5OTI0LCA5OTI2LCA5OTI4LCA5OTMwLCA5OTMyLCAKKyAgICA5OTM0LCA5OTM2LCA5OTM4LCA5OTQxLCA5OTQ0LCA5OTQ3LCA5OTUwLCA5OTUzLCA5OTU2LCA5OTU5LCAwLCAwLCAwLCAwLCAKKyAgICA5OTYyLCA5OTY0LCA5OTY2LCA5OTY4LCA5OTcwLCA5OTcyLCA5OTc0LCA5OTc2LCA5OTc4LCA5OTgwLCA5OTgyLCA5OTg0LCAKKyAgICA5OTg2LCA5OTg4LCA5OTkwLCA5OTkyLCA5OTk0LCA5OTk2LCA5OTk4LCAxMDAwMCwgMTAwMDIsIDEwMDA0LCAxMDAwNiwgCisgICAgMTAwMDgsIDEwMDEwLCAxMDAxMiwgMTAwMTQsIDEwMDE2LCAxMDAxOCwgMTAwMjAsIDEwMDIyLCAxMDAyNCwgMTAwMjYsIAorICAgIDEwMDI4LCAxMDAzMCwgMTAwMzIsIDEwMDM0LCAxMDAzNiwgMTAwMzgsIDEwMDQwLCAxMDA0MiwgMTAwNDQsIDEwMDQ2LCAKKyAgICAxMDA0OCwgMTAwNTAsIDEwMDUyLCAxMDA1NCwgMTAwNTYsIDEwMDU4LCAxMDA2MCwgMTAwNjIsIDEwMDY0LCAxMDA2NiwgCisgICAgMTAwNjgsIDEwMDcwLCAxMDA3MiwgMTAwNzQsIDEwMDc2LCAxMDA3OCwgMTAwODAsIDEwMDgyLCAxMDA4NCwgMTAwODYsIAorICAgIDEwMDg4LCAxMDA5MCwgMTAwOTIsIDEwMDk0LCAxMDA5NiwgMTAwOTgsIDEwMTAwLCAxMDEwMiwgMTAxMDQsIDEwMTA2LCAKKyAgICAxMDEwOCwgMTAxMTAsIDEwMTEyLCAxMDExNCwgMTAxMTYsIDEwMTE4LCAxMDEyMCwgMTAxMjIsIDEwMTI0LCAxMDEyNiwgCisgICAgMTAxMjgsIDEwMTMwLCAxMDEzMiwgMTAxMzQsIDEwMTM2LCAxMDEzOCwgMTAxNDAsIDEwMTQyLCAxMDE0NCwgMTAxNDYsIAorICAgIDEwMTQ4LCAxMDE1MCwgMTAxNTIsIDEwMTU0LCAxMDE1NiwgMTAxNTgsIDEwMTYwLCAxMDE2MiwgMTAxNjQsIDEwMTY2LCAKKyAgICAxMDE2OCwgMTAxNzAsIDEwMTcyLCAxMDE3NCwgMTAxNzYsIDEwMTc4LCAxMDE4MCwgMTAxODIsIDEwMTg0LCAxMDE4NiwgCisgICAgMTAxODgsIDEwMTkwLCAxMDE5MiwgMTAxOTQsIDEwMTk2LCAxMDE5OCwgMTAyMDAsIDEwMjAyLCAxMDIwNCwgMTAyMDYsIAorICAgIDEwMjA4LCAxMDIxMCwgMTAyMTIsIDEwMjE0LCAxMDIxNiwgMTAyMTgsIDEwMjIwLCAxMDIyMiwgMTAyMjQsIDEwMjI2LCAKKyAgICAxMDIyOCwgMTAyMzAsIDEwMjMyLCAxMDIzNCwgMTAyMzYsIDEwMjM4LCAxMDI0MCwgMTAyNDIsIDEwMjQ0LCAxMDI0NiwgCisgICAgMTAyNDgsIDEwMjUwLCAxMDI1MiwgMTAyNTQsIDEwMjU2LCAxMDI1OCwgMTAyNjAsIDEwMjYyLCAxMDI2NCwgMTAyNjYsIAorICAgIDEwMjY4LCAxMDI3MCwgMTAyNzIsIDEwMjc0LCAxMDI3NiwgMTAyNzgsIDEwMjgwLCAxMDI4MiwgMTAyODQsIDEwMjg2LCAKKyAgICAxMDI4OCwgMTAyOTAsIDEwMjkyLCAxMDI5NCwgMTAyOTYsIDEwMjk4LCAxMDMwMCwgMTAzMDIsIDEwMzA0LCAxMDMwNiwgCisgICAgMTAzMDgsIDEwMzEwLCAxMDMxMiwgMTAzMTQsIDEwMzE2LCAxMDMxOCwgMTAzMjAsIDEwMzIyLCAxMDMyNCwgMTAzMjYsIAorICAgIDEwMzI4LCAxMDMzMCwgMTAzMzIsIDEwMzM0LCAxMDMzNiwgMTAzMzgsIDEwMzQwLCAwLCAwLCAwLCAxMDM0MiwgMTAzNDQsIAorICAgIDEwMzQ2LCAxMDM0OCwgMTAzNTAsIDEwMzUyLCAwLCAwLCAxMDM1NCwgMTAzNTYsIDEwMzU4LCAxMDM2MCwgMTAzNjIsIAorICAgIDEwMzY0LCAwLCAwLCAxMDM2NiwgMTAzNjgsIDEwMzcwLCAxMDM3MiwgMTAzNzQsIDEwMzc2LCAwLCAwLCAxMDM3OCwgCisgICAgMTAzODAsIDEwMzgyLCAwLCAwLCAwLCAxMDM4NCwgMTAzODYsIDEwMzg4LCAxMDM5MCwgMTAzOTIsIDEwMzk0LCAxMDM5NiwgCisgICAgMCwgMTAzOTgsIDEwNDAwLCAxMDQwMiwgMTA0MDQsIDEwNDA2LCAxMDQwOCwgMTA0MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2MDcsIDY2MDksIDY2MTEsIDY2MTMsIAotICAgIDY2MTUsIDY2MTcsIDY2MTksIDY2MjEsIDY2MjMsIDY2MjUsIDY2MjcsIDY2MjksIDY2MzEsIDY2MzMsIDY2MzUsIDY2MzcsIAotICAgIDY2MzksIDY2NDEsIDY2NDMsIDY2NDUsIDY2NDcsIDY2NDksIDY2NTEsIDY2NTMsIDY2NTUsIDY2NTcsIDY2NTksIDY2NjEsIAotICAgIDY2NjMsIDY2NjUsIDY2NjcsIDY2NjksIDY2NzEsIDY2NzMsIDY2NzUsIDY2NzcsIDY2NzksIDY2ODEsIDY2ODMsIDY2ODUsIAotICAgIDY2ODcsIDY2ODksIDY2OTEsIDY2OTMsIDY2OTUsIDY2OTcsIDY2OTksIDY3MDEsIDY3MDMsIDY3MDUsIDY3MDcsIDY3MDksIAotICAgIDY3MTEsIDY3MTMsIDY3MTUsIDY3MTcsIDY3MTksIDY3MjEsIDY3MjMsIDY3MjUsIDY3MjcsIDY3MjksIDY3MzEsIDY3MzMsIAotICAgIDY3MzUsIDY3MzcsIDY3MzksIDY3NDEsIDY3NDMsIDY3NDUsIDY3NDcsIDY3NDksIDY3NTEsIDY3NTMsIDY3NTUsIDY3NTcsIAotICAgIDY3NTksIDY3NjEsIDY3NjMsIDY3NjUsIDY3NjcsIDY3NjksIDY3NzEsIDY3NzMsIDY3NzUsIDY3NzcsIDY3NzksIDY3ODEsIAotICAgIDY3ODMsIDY3ODUsIDY3ODcsIDY3ODksIDY3OTEsIDY3OTMsIDY3OTUsIDY3OTcsIDY3OTksIDY4MDEsIDY4MDMsIDY4MDUsIAotICAgIDY4MDcsIDY4MDksIDY4MTEsIDY4MTMsIDY4MTUsIDY4MTcsIDY4MTksIDY4MjEsIDY4MjMsIDY4MjUsIDY4MjcsIDY4MjksIAotICAgIDY4MzEsIDY4MzMsIDY4MzUsIDY4MzcsIDY4MzksIDY4NDEsIDY4NDMsIDY4NDUsIDY4NDcsIDY4NDksIDY4NTEsIDY4NTMsIAotICAgIDY4NTUsIDY4NTcsIDY4NTksIDY4NjEsIDY4NjMsIDY4NjUsIDY4NjcsIDY4NjksIDY4NzEsIDY4NzMsIDY4NzUsIDY4NzcsIAotICAgIDY4NzksIDY4ODEsIDY4ODMsIDY4ODUsIDY4ODcsIDY4ODksIDY4OTEsIDY4OTMsIDY4OTUsIDY4OTcsIDY4OTksIDY5MDEsIAotICAgIDY5MDMsIDY5MDUsIDY5MDcsIDY5MDksIDY5MTEsIDY5MTMsIDY5MTUsIDY5MTcsIDY5MTksIDY5MjEsIDY5MjMsIDY5MjUsIAotICAgIDY5MjcsIDY5MjksIDY5MzEsIDY5MzMsIDY5MzUsIDY5MzcsIDY5MzksIDY5NDEsIDY5NDMsIDY5NDUsIDY5NDcsIDY5NDksIAotICAgIDY5NTEsIDY5NTMsIDY5NTUsIDY5NTcsIDY5NTksIDY5NjEsIDY5NjMsIDY5NjUsIDY5NjcsIDY5NjksIDY5NzEsIDY5NzMsIAotICAgIDY5NzUsIDY5NzcsIDY5NzksIDY5ODEsIDY5ODMsIDY5ODUsIDY5ODcsIDY5ODksIDY5OTEsIDY5OTMsIDY5OTUsIDY5OTcsIAotICAgIDY5OTksIDcwMDEsIDcwMDMsIDcwMDUsIDcwMDcsIDcwMDksIDcwMTEsIDcwMTMsIDcwMTUsIDcwMTcsIDcwMTksIDcwMjEsIAotICAgIDcwMjMsIDcwMjUsIDcwMjcsIDcwMjksIDcwMzEsIDcwMzMsIDcwMzUsIDcwMzcsIDcwMzksIDcwNDEsIDcwNDMsIDcwNDUsIAotICAgIDcwNDcsIDcwNDksIDcwNTEsIDcwNTMsIDcwNTUsIDcwNTcsIDcwNTksIDcwNjEsIDcwNjMsIDcwNjUsIDcwNjcsIDcwNjksIAotICAgIDcwNzEsIDcwNzMsIDcwNzUsIDcwNzcsIDcwNzksIDcwODEsIDcwODMsIDcwODUsIDcwODcsIDcwODksIDcwOTEsIDcwOTMsIAotICAgIDcwOTUsIDcwOTcsIDcwOTksIDcxMDEsIDcxMDMsIDcxMDUsIDcxMDcsIDcxMDksIDcxMTEsIDcxMTMsIDcxMTUsIDcxMTcsIAotICAgIDcxMTksIDcxMjEsIDcxMjMsIDcxMjUsIDcxMjcsIDcxMjksIDcxMzEsIDcxMzMsIDcxMzUsIDcxMzcsIDcxMzksIDcxNDEsIAotICAgIDcxNDMsIDcxNDUsIDAsIDAsIDcxNDcsIDAsIDcxNDksIDAsIDAsIDcxNTEsIDcxNTMsIDcxNTUsIDcxNTcsIDcxNTksIAotICAgIDcxNjEsIDcxNjMsIDcxNjUsIDcxNjcsIDcxNjksIDAsIDcxNzEsIDAsIDcxNzMsIDAsIDAsIDcxNzUsIDcxNzcsIDAsIDAsIAotICAgIDAsIDcxNzksIDcxODEsIDcxODMsIDcxODUsIDAsIDAsIDcxODcsIDcxODksIDcxOTEsIDcxOTMsIDcxOTUsIDcxOTcsIAotICAgIDcxOTksIDcyMDEsIDcyMDMsIDcyMDUsIDcyMDcsIDcyMDksIDcyMTEsIDcyMTMsIDcyMTUsIDcyMTcsIDcyMTksIDcyMjEsIAotICAgIDcyMjMsIDcyMjUsIDcyMjcsIDcyMjksIDcyMzEsIDcyMzMsIDcyMzUsIDcyMzcsIDcyMzksIDcyNDEsIDcyNDMsIDcyNDUsIAotICAgIDcyNDcsIDcyNDksIDcyNTEsIDcyNTMsIDcyNTUsIDcyNTcsIDcyNTksIDcyNjEsIDcyNjMsIDcyNjUsIDcyNjcsIDcyNjksIAotICAgIDcyNzEsIDcyNzMsIDcyNzUsIDcyNzcsIDcyNzksIDcyODEsIDcyODMsIDcyODUsIDcyODcsIDcyODksIDcyOTEsIDcyOTMsIAotICAgIDcyOTUsIDcyOTcsIDcyOTksIDczMDEsIDczMDMsIDAsIDAsIDAsIDAsIDAsIDczMDUsIDczMDcsIDczMDksIDczMTEsIAotICAgIDczMTMsIDczMTUsIDczMTcsIDczMTksIDczMjEsIDczMjMsIDczMjUsIDczMjcsIDczMjksIDczMzEsIDczMzMsIDczMzUsIAotICAgIDczMzcsIDczMzksIDczNDEsIDczNDMsIDczNDUsIDczNDcsIDczNDksIDczNTEsIDczNTMsIDczNTUsIDczNTcsIDczNTksIAotICAgIDczNjEsIDczNjMsIDczNjUsIDczNjcsIDczNjksIDczNzEsIDczNzMsIDczNzUsIDczNzcsIDczNzksIDczODEsIDczODMsIAotICAgIDczODUsIDczODcsIDczODksIDczOTEsIDczOTMsIDczOTUsIDczOTcsIDczOTksIDc0MDEsIDc0MDMsIDc0MDUsIDc0MDcsIAotICAgIDc0MDksIDc0MTEsIDc0MTMsIDc0MTUsIDc0MTcsIDc0MTksIDc0MjEsIDc0MjMsIDc0MjUsIDc0MjcsIDc0MjksIDc0MzEsIAotICAgIDc0MzMsIDc0MzUsIDc0MzcsIDc0MzksIDc0NDEsIDc0NDMsIDc0NDUsIDc0NDcsIDc0NDksIDc0NTEsIDc0NTMsIDc0NTUsIAotICAgIDc0NTcsIDc0NTksIDc0NjEsIDc0NjMsIDc0NjUsIDc0NjcsIDc0NjksIDc0NzEsIDc0NzMsIDc0NzUsIDc0NzcsIDc0NzksIAotICAgIDc0ODEsIDc0ODMsIDc0ODUsIDc0ODcsIDc0ODksIDc0OTEsIDc0OTMsIDc0OTUsIDc0OTcsIDc0OTksIDc1MDEsIDc1MDMsIAotICAgIDc1MDUsIDc1MDcsIDc1MDksIDc1MTEsIDc1MTMsIDc1MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNDEyLCAwLCAKKyAgICAxMDQxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0MTgsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEwNDIxLCAxMDQyNCwgMTA0MjcsIDEwNDMwLCAxMDQzMywgMTA0MzYsIDEwNDM5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQ0MiwgMTA0NDUsIDEwNDQ4LCAxMDQ1MSwgMTA0NTQsIDEwNDU3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQ2MCwgMTA0NjIsIDEwNDY0LCAxMDQ2NiwgCisgICAgMTA0NjgsIDEwNDcwLCAxMDQ3MiwgMTA0NzQsIDEwNDc2LCAxMDQ3OCwgMTA0ODAsIDEwNDgyLCAxMDQ4NCwgMTA0ODYsIAorICAgIDEwNDg4LCAxMDQ5MCwgMTA0OTIsIDEwNDk0LCAxMDQ5NiwgMTA0OTgsIDEwNTAwLCAxMDUwMiwgMTA1MDQsIDEwNTA2LCAKKyAgICAxMDUwOCwgMTA1MTAsIDEwNTEyLCAxMDUxNCwgMTA1MTYsIDEwNTE4LCAxMDUyMCwgMTA1MjIsIDEwNTI0LCAxMDUyNiwgCisgICAgMTA1MjgsIDEwNTMwLCAxMDUzMiwgMTA1MzQsIDEwNTM2LCAxMDUzOCwgMTA1NDAsIDEwNTQyLCAxMDU0NCwgMTA1NDYsIAorICAgIDEwNTQ4LCAxMDU1MCwgMTA1NTIsIDEwNTU0LCAxMDU1NiwgMTA1NTgsIDEwNTYwLCAxMDU2MiwgMTA1NjQsIDEwNTY2LCAKKyAgICAxMDU2OCwgMTA1NzAsIDEwNTcyLCAxMDU3NCwgMTA1NzYsIDEwNTc4LCAxMDU4MCwgMTA1ODIsIDEwNTg0LCAxMDU4NiwgCisgICAgMTA1ODgsIDEwNTkwLCAxMDU5MiwgMTA1OTQsIDEwNTk2LCAxMDU5OCwgMTA2MDAsIDEwNjAyLCAxMDYwNCwgMTA2MDYsIAorICAgIDEwNjA4LCAxMDYxMCwgMTA2MTIsIDEwNjE0LCAxMDYxNiwgMTA2MTgsIDEwNjIwLCAxMDYyMiwgMTA2MjQsIDEwNjI2LCAKKyAgICAxMDYyOCwgMCwgMTA2MzAsIDEwNjMyLCAxMDYzNCwgMTA2MzYsIDEwNjM4LCAxMDY0MCwgMTA2NDIsIDEwNjQ0LCAxMDY0NiwgCisgICAgMTA2NDgsIDEwNjUwLCAxMDY1MiwgMTA2NTQsIDEwNjU2LCAxMDY1OCwgMTA2NjAsIDEwNjYyLCAxMDY2NCwgMTA2NjYsIAorICAgIDEwNjY4LCAxMDY3MCwgMTA2NzIsIDEwNjc0LCAxMDY3NiwgMTA2NzgsIDEwNjgwLCAxMDY4MiwgMTA2ODQsIDEwNjg2LCAKKyAgICAxMDY4OCwgMTA2OTAsIDEwNjkyLCAxMDY5NCwgMTA2OTYsIDEwNjk4LCAxMDcwMCwgMTA3MDIsIDEwNzA0LCAxMDcwNiwgCisgICAgMTA3MDgsIDEwNzEwLCAxMDcxMiwgMTA3MTQsIDEwNzE2LCAxMDcxOCwgMTA3MjAsIDEwNzIyLCAxMDcyNCwgMTA3MjYsIAorICAgIDEwNzI4LCAxMDczMCwgMTA3MzIsIDEwNzM0LCAxMDczNiwgMTA3MzgsIDEwNzQwLCAxMDc0MiwgMTA3NDQsIDEwNzQ2LCAKKyAgICAxMDc0OCwgMTA3NTAsIDEwNzUyLCAxMDc1NCwgMTA3NTYsIDEwNzU4LCAxMDc2MCwgMTA3NjIsIDEwNzY0LCAxMDc2NiwgCisgICAgMTA3NjgsIDEwNzcwLCAwLCAxMDc3MiwgMTA3NzQsIDAsIDAsIDEwNzc2LCAwLCAwLCAxMDc3OCwgMTA3ODAsIDAsIDAsIAorICAgIDEwNzgyLCAxMDc4NCwgMTA3ODYsIDEwNzg4LCAwLCAxMDc5MCwgMTA3OTIsIDEwNzk0LCAxMDc5NiwgMTA3OTgsIDEwODAwLCAKKyAgICAxMDgwMiwgMTA4MDQsIDEwODA2LCAxMDgwOCwgMTA4MTAsIDEwODEyLCAwLCAxMDgxNCwgMCwgMTA4MTYsIDEwODE4LCAKKyAgICAxMDgyMCwgMTA4MjIsIDEwODI0LCAxMDgyNiwgMTA4MjgsIDAsIDEwODMwLCAxMDgzMiwgMTA4MzQsIDEwODM2LCAxMDgzOCwgCisgICAgMTA4NDAsIDEwODQyLCAxMDg0NCwgMTA4NDYsIDEwODQ4LCAxMDg1MCwgMTA4NTIsIDEwODU0LCAxMDg1NiwgMTA4NTgsIAorICAgIDEwODYwLCAxMDg2MiwgMTA4NjQsIDEwODY2LCAxMDg2OCwgMTA4NzAsIDEwODcyLCAxMDg3NCwgMTA4NzYsIDEwODc4LCAKKyAgICAxMDg4MCwgMTA4ODIsIDEwODg0LCAxMDg4NiwgMTA4ODgsIDEwODkwLCAxMDg5MiwgMTA4OTQsIDEwODk2LCAxMDg5OCwgCisgICAgMTA5MDAsIDEwOTAyLCAxMDkwNCwgMTA5MDYsIDEwOTA4LCAxMDkxMCwgMTA5MTIsIDEwOTE0LCAxMDkxNiwgMTA5MTgsIAorICAgIDEwOTIwLCAxMDkyMiwgMTA5MjQsIDEwOTI2LCAxMDkyOCwgMTA5MzAsIDEwOTMyLCAxMDkzNCwgMTA5MzYsIDEwOTM4LCAKKyAgICAxMDk0MCwgMTA5NDIsIDEwOTQ0LCAxMDk0NiwgMTA5NDgsIDEwOTUwLCAxMDk1MiwgMTA5NTQsIDEwOTU2LCAxMDk1OCwgMCwgCisgICAgMTA5NjAsIDEwOTYyLCAxMDk2NCwgMTA5NjYsIDAsIDAsIDEwOTY4LCAxMDk3MCwgMTA5NzIsIDEwOTc0LCAxMDk3NiwgCisgICAgMTA5NzgsIDEwOTgwLCAxMDk4MiwgMCwgMTA5ODQsIDEwOTg2LCAxMDk4OCwgMTA5OTAsIDEwOTkyLCAxMDk5NCwgMTA5OTYsIAorICAgIDAsIDEwOTk4LCAxMTAwMCwgMTEwMDIsIDExMDA0LCAxMTAwNiwgMTEwMDgsIDExMDEwLCAxMTAxMiwgMTEwMTQsIDExMDE2LCAKKyAgICAxMTAxOCwgMTEwMjAsIDExMDIyLCAxMTAyNCwgMTEwMjYsIDExMDI4LCAxMTAzMCwgMTEwMzIsIDExMDM0LCAxMTAzNiwgCisgICAgMTEwMzgsIDExMDQwLCAxMTA0MiwgMTEwNDQsIDExMDQ2LCAxMTA0OCwgMTEwNTAsIDExMDUyLCAwLCAxMTA1NCwgMTEwNTYsIAorICAgIDExMDU4LCAxMTA2MCwgMCwgMTEwNjIsIDExMDY0LCAxMTA2NiwgMTEwNjgsIDExMDcwLCAwLCAxMTA3MiwgMCwgMCwgMCwgCisgICAgMTEwNzQsIDExMDc2LCAxMTA3OCwgMTEwODAsIDExMDgyLCAxMTA4NCwgMTEwODYsIDAsIDExMDg4LCAxMTA5MCwgMTEwOTIsIAorICAgIDExMDk0LCAxMTA5NiwgMTEwOTgsIDExMTAwLCAxMTEwMiwgMTExMDQsIDExMTA2LCAxMTEwOCwgMTExMTAsIDExMTEyLCAKKyAgICAxMTExNCwgMTExMTYsIDExMTE4LCAxMTEyMCwgMTExMjIsIDExMTI0LCAxMTEyNiwgMTExMjgsIDExMTMwLCAxMTEzMiwgCisgICAgMTExMzQsIDExMTM2LCAxMTEzOCwgMTExNDAsIDExMTQyLCAxMTE0NCwgMTExNDYsIDExMTQ4LCAxMTE1MCwgMTExNTIsIAorICAgIDExMTU0LCAxMTE1NiwgMTExNTgsIDExMTYwLCAxMTE2MiwgMTExNjQsIDExMTY2LCAxMTE2OCwgMTExNzAsIDExMTcyLCAKKyAgICAxMTE3NCwgMTExNzYsIDExMTc4LCAxMTE4MCwgMTExODIsIDExMTg0LCAxMTE4NiwgMTExODgsIDExMTkwLCAxMTE5MiwgCisgICAgMTExOTQsIDExMTk2LCAxMTE5OCwgMTEyMDAsIDExMjAyLCAxMTIwNCwgMTEyMDYsIDExMjA4LCAxMTIxMCwgMTEyMTIsIAorICAgIDExMjE0LCAxMTIxNiwgMTEyMTgsIDExMjIwLCAxMTIyMiwgMTEyMjQsIDExMjI2LCAxMTIyOCwgMTEyMzAsIDExMjMyLCAKKyAgICAxMTIzNCwgMTEyMzYsIDExMjM4LCAxMTI0MCwgMTEyNDIsIDExMjQ0LCAxMTI0NiwgMTEyNDgsIDExMjUwLCAxMTI1MiwgCisgICAgMTEyNTQsIDExMjU2LCAxMTI1OCwgMTEyNjAsIDExMjYyLCAxMTI2NCwgMTEyNjYsIDExMjY4LCAxMTI3MCwgMTEyNzIsIAorICAgIDExMjc0LCAxMTI3NiwgMTEyNzgsIDExMjgwLCAxMTI4MiwgMTEyODQsIDExMjg2LCAxMTI4OCwgMTEyOTAsIDExMjkyLCAKKyAgICAxMTI5NCwgMTEyOTYsIDExMjk4LCAxMTMwMCwgMTEzMDIsIDExMzA0LCAxMTMwNiwgMTEzMDgsIDExMzEwLCAxMTMxMiwgCisgICAgMTEzMTQsIDExMzE2LCAxMTMxOCwgMTEzMjAsIDExMzIyLCAxMTMyNCwgMTEzMjYsIDExMzI4LCAxMTMzMCwgMTEzMzIsIAorICAgIDExMzM0LCAxMTMzNiwgMTEzMzgsIDExMzQwLCAxMTM0MiwgMTEzNDQsIDExMzQ2LCAxMTM0OCwgMTEzNTAsIDExMzUyLCAKKyAgICAxMTM1NCwgMTEzNTYsIDExMzU4LCAxMTM2MCwgMTEzNjIsIDExMzY0LCAxMTM2NiwgMTEzNjgsIDExMzcwLCAxMTM3MiwgCisgICAgMTEzNzQsIDExMzc2LCAxMTM3OCwgMTEzODAsIDExMzgyLCAxMTM4NCwgMTEzODYsIDExMzg4LCAxMTM5MCwgMTEzOTIsIAorICAgIDExMzk0LCAxMTM5NiwgMTEzOTgsIDExNDAwLCAxMTQwMiwgMTE0MDQsIDExNDA2LCAxMTQwOCwgMTE0MTAsIDExNDEyLCAKKyAgICAxMTQxNCwgMTE0MTYsIDExNDE4LCAxMTQyMCwgMTE0MjIsIDExNDI0LCAxMTQyNiwgMTE0MjgsIDExNDMwLCAxMTQzMiwgCisgICAgMTE0MzQsIDExNDM2LCAxMTQzOCwgMTE0NDAsIDExNDQyLCAxMTQ0NCwgMTE0NDYsIDExNDQ4LCAxMTQ1MCwgMTE0NTIsIAorICAgIDExNDU0LCAxMTQ1NiwgMTE0NTgsIDExNDYwLCAxMTQ2MiwgMTE0NjQsIDExNDY2LCAxMTQ2OCwgMTE0NzAsIDExNDcyLCAKKyAgICAxMTQ3NCwgMTE0NzYsIDExNDc4LCAxMTQ4MCwgMTE0ODIsIDExNDg0LCAxMTQ4NiwgMTE0ODgsIDExNDkwLCAxMTQ5MiwgCisgICAgMTE0OTQsIDExNDk2LCAxMTQ5OCwgMTE1MDAsIDExNTAyLCAxMTUwNCwgMTE1MDYsIDExNTA4LCAxMTUxMCwgMTE1MTIsIAorICAgIDExNTE0LCAxMTUxNiwgMTE1MTgsIDExNTIwLCAxMTUyMiwgMTE1MjQsIDExNTI2LCAxMTUyOCwgMTE1MzAsIDExNTMyLCAKKyAgICAxMTUzNCwgMTE1MzYsIDExNTM4LCAxMTU0MCwgMTE1NDIsIDExNTQ0LCAxMTU0NiwgMTE1NDgsIDExNTUwLCAxMTU1MiwgCisgICAgMTE1NTQsIDExNTU2LCAxMTU1OCwgMTE1NjAsIDExNTYyLCAxMTU2NCwgMTE1NjYsIDExNTY4LCAxMTU3MCwgMTE1NzIsIAorICAgIDExNTc0LCAxMTU3NiwgMTE1NzgsIDExNTgwLCAxMTU4MiwgMTE1ODQsIDExNTg2LCAxMTU4OCwgMTE1OTAsIDExNTkyLCAKKyAgICAxMTU5NCwgMTE1OTYsIDExNTk4LCAxMTYwMCwgMTE2MDIsIDExNjA0LCAxMTYwNiwgMTE2MDgsIDExNjEwLCAxMTYxMiwgCisgICAgMTE2MTQsIDExNjE2LCAxMTYxOCwgMTE2MjAsIDExNjIyLCAxMTYyNCwgMTE2MjYsIDExNjI4LCAxMTYzMCwgMTE2MzIsIAorICAgIDExNjM0LCAxMTYzNiwgMTE2MzgsIDExNjQwLCAxMTY0MiwgMTE2NDQsIDExNjQ2LCAxMTY0OCwgMTE2NTAsIDExNjUyLCAKKyAgICAxMTY1NCwgMTE2NTYsIDExNjU4LCAxMTY2MCwgMTE2NjIsIDExNjY0LCAxMTY2NiwgMTE2NjgsIDExNjcwLCAxMTY3MiwgCisgICAgMTE2NzQsIDExNjc2LCAxMTY3OCwgMTE2ODAsIDExNjgyLCAxMTY4NCwgMTE2ODYsIDExNjg4LCAxMTY5MCwgMTE2OTIsIAorICAgIDExNjk0LCAxMTY5NiwgMTE2OTgsIDExNzAwLCAxMTcwMiwgMTE3MDQsIDExNzA2LCAxMTcwOCwgMTE3MTAsIDExNzEyLCAKKyAgICAxMTcxNCwgMTE3MTYsIDExNzE4LCAxMTcyMCwgMTE3MjIsIDExNzI0LCAxMTcyNiwgMTE3MjgsIDExNzMwLCAxMTczMiwgCisgICAgMTE3MzQsIDExNzM2LCAxMTczOCwgMTE3NDAsIDExNzQyLCAxMTc0NCwgMTE3NDYsIDExNzQ4LCAxMTc1MCwgMTE3NTIsIAorICAgIDExNzU0LCAxMTc1NiwgMTE3NTgsIDExNzYwLCAxMTc2MiwgMTE3NjQsIDExNzY2LCAwLCAwLCAxMTc2OCwgMTE3NzAsIAorICAgIDExNzcyLCAxMTc3NCwgMTE3NzYsIDExNzc4LCAxMTc4MCwgMTE3ODIsIDExNzg0LCAxMTc4NiwgMTE3ODgsIDExNzkwLCAKKyAgICAxMTc5MiwgMTE3OTQsIDExNzk2LCAxMTc5OCwgMTE4MDAsIDExODAyLCAxMTgwNCwgMTE4MDYsIDExODA4LCAxMTgxMCwgCisgICAgMTE4MTIsIDExODE0LCAxMTgxNiwgMTE4MTgsIDExODIwLCAxMTgyMiwgMTE4MjQsIDExODI2LCAxMTgyOCwgMTE4MzAsIAorICAgIDExODMyLCAxMTgzNCwgMTE4MzYsIDExODM4LCAxMTg0MCwgMTE4NDIsIDExODQ0LCAxMTg0NiwgMTE4NDgsIDExODUwLCAKKyAgICAxMTg1MiwgMTE4NTQsIDExODU2LCAxMTg1OCwgMTE4NjAsIDExODYyLCAxMTg2NCwgMTE4NjYsIDExODY4LCAxMTg3MCwgCisgICAgMTE4NzIsIDExODc0LCAxMTg3NiwgMTE4NzgsIDExODgwLCAxMTg4MiwgMTE4ODQsIDExODg2LCAxMTg4OCwgMTE4OTAsIAorICAgIDExODkyLCAxMTg5NCwgMTE4OTYsIDExODk4LCAxMTkwMCwgMTE5MDIsIDExOTA0LCAxMTkwNiwgMTE5MDgsIDExOTEwLCAKKyAgICAxMTkxMiwgMTE5MTQsIDExOTE2LCAxMTkxOCwgMTE5MjAsIDExOTIyLCAxMTkyNCwgMTE5MjYsIDExOTI4LCAxMTkzMCwgCisgICAgMTE5MzIsIDExOTM0LCAxMTkzNiwgMTE5MzgsIDExOTQwLCAxMTk0MiwgMTE5NDQsIDExOTQ2LCAxMTk0OCwgMTE5NTAsIAorICAgIDExOTUyLCAxMTk1NCwgMTE5NTYsIDExOTU4LCAxMTk2MCwgMTE5NjIsIDExOTY0LCAxMTk2NiwgMTE5NjgsIDExOTcwLCAKKyAgICAxMTk3MiwgMTE5NzQsIDExOTc2LCAxMTk3OCwgMTE5ODAsIDExOTgyLCAxMTk4NCwgMTE5ODYsIDExOTg4LCAxMTk5MCwgCisgICAgMTE5OTIsIDExOTk0LCAxMTk5NiwgMTE5OTgsIDEyMDAwLCAxMjAwMiwgMTIwMDQsIDEyMDA2LCAxMjAwOCwgMTIwMTAsIAorICAgIDEyMDEyLCAxMjAxNCwgMTIwMTYsIDEyMDE4LCAxMjAyMCwgMTIwMjIsIDEyMDI0LCAxMjAyNiwgMTIwMjgsIDEyMDMwLCAKKyAgICAxMjAzMiwgMTIwMzQsIDEyMDM2LCAxMjAzOCwgMTIwNDAsIDEyMDQyLCAxMjA0NCwgMTIwNDYsIDEyMDQ4LCAxMjA1MCwgCisgICAgMTIwNTIsIDEyMDU0LCAxMjA1NiwgMTIwNTgsIDEyMDYwLCAxMjA2MiwgMTIwNjQsIDEyMDY2LCAxMjA2OCwgMTIwNzAsIAorICAgIDEyMDcyLCAxMjA3NCwgMTIwNzYsIDEyMDc4LCAxMjA4MCwgMTIwODIsIDEyMDg0LCAxMjA4NiwgMTIwODgsIDEyMDkwLCAKKyAgICAxMjA5MiwgMTIwOTQsIDEyMDk2LCAxMjA5OCwgMTIxMDAsIDEyMTAyLCAxMjEwNCwgMTIxMDYsIDEyMTA4LCAxMjExMCwgCisgICAgMTIxMTIsIDEyMTE0LCAxMjExNiwgMTIxMTgsIDEyMTIwLCAxMjEyMiwgMTIxMjQsIDEyMTI2LCAxMjEyOCwgMTIxMzAsIAorICAgIDEyMTMyLCAxMjEzNCwgMTIxMzYsIDEyMTM4LCAxMjE0MCwgMTIxNDIsIDEyMTQ0LCAxMjE0NiwgMTIxNDgsIDEyMTUwLCAKKyAgICAxMjE1MiwgMTIxNTQsIDEyMTU2LCAxMjE1OCwgMTIxNjAsIDEyMTYyLCAxMjE2NCwgMTIxNjYsIDEyMTY4LCAxMjE3MCwgCisgICAgMTIxNzIsIDEyMTc0LCAxMjE3NiwgMTIxNzgsIDEyMTgwLCAxMjE4MiwgMTIxODQsIDEyMTg2LCAxMjE4OCwgMTIxOTAsIAorICAgIDEyMTkyLCAxMjE5NCwgMTIxOTYsIDEyMTk4LCAxMjIwMCwgMTIyMDIsIDEyMjA0LCAxMjIwNiwgMTIyMDgsIDEyMjEwLCAKKyAgICAxMjIxMiwgMTIyMTQsIDEyMjE2LCAxMjIxOCwgMTIyMjAsIDEyMjIyLCAxMjIyNCwgMTIyMjYsIDEyMjI4LCAxMjIzMCwgCisgICAgMTIyMzIsIDEyMjM0LCAxMjIzNiwgMTIyMzgsIDEyMjQwLCAxMjI0MiwgMTIyNDQsIDEyMjQ2LCAxMjI0OCwgMTIyNTAsIAorICAgIDEyMjUyLCAxMjI1NCwgMTIyNTYsIDEyMjU4LCAxMjI2MCwgMTIyNjIsIDEyMjY0LCAxMjI2NiwgMTIyNjgsIDEyMjcwLCAKKyAgICAxMjI3MiwgMTIyNzQsIDEyMjc2LCAxMjI3OCwgMTIyODAsIDEyMjgyLCAxMjI4NCwgMTIyODYsIDEyMjg4LCAxMjI5MCwgCisgICAgMTIyOTIsIDEyMjk0LCAxMjI5NiwgMTIyOTgsIDEyMzAwLCAxMjMwMiwgMTIzMDQsIDEyMzA2LCAxMjMwOCwgMTIzMTAsIAorICAgIDEyMzEyLCAxMjMxNCwgMTIzMTYsIDEyMzE4LCAxMjMyMCwgMTIzMjIsIDEyMzI0LCAxMjMyNiwgMTIzMjgsIDEyMzMwLCAKKyAgICAxMjMzMiwgMTIzMzQsIDEyMzM2LCAxMjMzOCwgMTIzNDAsIDEyMzQyLCAxMjM0NCwgMTIzNDYsIDEyMzQ4LCAxMjM1MCwgMCwgCisgICAgMCwgMTIzNTIsIDEyMzU0LCAxMjM1NiwgMTIzNTgsIDEyMzYwLCAxMjM2MiwgMTIzNjQsIDEyMzY2LCAxMjM2OCwgMTIzNzAsIAorICAgIDEyMzcyLCAxMjM3NCwgMTIzNzYsIDEyMzc4LCAxMjM4MCwgMTIzODIsIDEyMzg0LCAxMjM4NiwgMTIzODgsIDEyMzkwLCAKKyAgICAxMjM5MiwgMTIzOTQsIDEyMzk2LCAxMjM5OCwgMTI0MDAsIDEyNDAyLCAxMjQwNCwgMTI0MDYsIDEyNDA4LCAxMjQxMCwgCisgICAgMTI0MTIsIDEyNDE0LCAxMjQxNiwgMTI0MTgsIDEyNDIwLCAxMjQyMiwgMTI0MjQsIDEyNDI2LCAxMjQyOCwgMTI0MzAsIAorICAgIDEyNDMyLCAxMjQzNCwgMTI0MzYsIDEyNDM4LCAxMjQ0MCwgMTI0NDIsIDEyNDQ0LCAxMjQ0NiwgMTI0NDgsIDEyNDUwLCAKKyAgICAxMjQ1MiwgMTI0NTUsIDEyNDU4LCAxMjQ2MSwgMTI0NjQsIDEyNDY3LCAxMjQ3MCwgMTI0NzMsIDEyNDc2LCAxMjQ3OSwgCisgICAgMTI0ODIsIDAsIDAsIDAsIDAsIDAsIDEyNDg1LCAxMjQ4OSwgMTI0OTMsIDEyNDk3LCAxMjUwMSwgMTI1MDUsIDEyNTA5LCAKKyAgICAxMjUxMywgMTI1MTcsIDEyNTIxLCAxMjUyNSwgMTI1MjksIDEyNTMzLCAxMjUzNywgMTI1NDEsIDEyNTQ1LCAxMjU0OSwgCisgICAgMTI1NTMsIDEyNTU3LCAxMjU2MSwgMTI1NjUsIDEyNTY5LCAxMjU3MywgMTI1NzcsIDEyNTgxLCAxMjU4NSwgMTI1ODksIAorICAgIDEyNTkzLCAxMjU5NSwgMTI1OTcsIDEyNjAwLCAwLCAwLCAxMjYwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTI2MDUsIDAsIDEyNjA3LCAwLCAwLCAxMjYwOSwgMCwgMCwgMCwgMTI2MTEsIDAsIDAsIDAsIDEyNjEzLCAxMjYxNiwgCisgICAgMTI2MTksIDEyNjIyLCAxMjYyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNzUxNywgNzUyMCwgNzUyMywgNzUyNiwgNzUzMCwgNzUzNCwgNzUzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzU0MCwgNzU0MywgNzU0NiwgNzU0OSwgNzU1MiwgMCwgMCwgMCwgMCwgMCwgNzU1NSwgMCwgNzU1OCwgCi0gICAgNzU2MSwgNzU2MywgNzU2NSwgNzU2NywgNzU2OSwgNzU3MSwgNzU3MywgNzU3NSwgNzU3NywgNzU3OSwgNzU4MSwgNzU4NCwgCi0gICAgNzU4NywgNzU5MCwgNzU5MywgNzU5NiwgNzU5OSwgNzYwMiwgNzYwNSwgNzYwOCwgNzYxMSwgNzYxNCwgNzYxNywgMCwgCi0gICAgNzYyMCwgNzYyMywgNzYyNiwgNzYyOSwgNzYzMiwgMCwgNzYzNSwgMCwgNzYzOCwgNzY0MSwgMCwgNzY0NCwgNzY0NywgMCwgCi0gICAgNzY1MCwgNzY1MywgNzY1NiwgNzY1OSwgNzY2MiwgNzY2NSwgNzY2OCwgNzY3MSwgNzY3NCwgNzY3NywgNzY4MCwgNzY4MiwgCi0gICAgNzY4NCwgNzY4NiwgNzY4OCwgNzY5MCwgNzY5MiwgNzY5NCwgNzY5NiwgNzY5OCwgNzcwMCwgNzcwMiwgNzcwNCwgNzcwNiwgCi0gICAgNzcwOCwgNzcxMCwgNzcxMiwgNzcxNCwgNzcxNiwgNzcxOCwgNzcyMCwgNzcyMiwgNzcyNCwgNzcyNiwgNzcyOCwgNzczMCwgCi0gICAgNzczMiwgNzczNCwgNzczNiwgNzczOCwgNzc0MCwgNzc0MiwgNzc0NCwgNzc0NiwgNzc0OCwgNzc1MCwgNzc1MiwgNzc1NCwgCi0gICAgNzc1NiwgNzc1OCwgNzc2MCwgNzc2MiwgNzc2NCwgNzc2NiwgNzc2OCwgNzc3MCwgNzc3MiwgNzc3NCwgNzc3NiwgNzc3OCwgCi0gICAgNzc4MCwgNzc4MiwgNzc4NCwgNzc4NiwgNzc4OCwgNzc5MCwgNzc5MiwgNzc5NCwgNzc5NiwgNzc5OCwgNzgwMCwgNzgwMiwgCi0gICAgNzgwNCwgNzgwNiwgNzgwOCwgNzgxMCwgNzgxMiwgNzgxNCwgNzgxNiwgNzgxOCwgNzgyMCwgNzgyMiwgNzgyNCwgNzgyNiwgCi0gICAgNzgyOCwgNzgzMCwgNzgzMiwgNzgzNCwgNzgzNiwgNzgzOCwgNzg0MCwgNzg0MiwgNzg0NCwgNzg0NiwgNzg0OCwgNzg1MCwgCi0gICAgNzg1MiwgNzg1NCwgNzg1NiwgNzg1OCwgNzg2MCwgNzg2MiwgNzg2NCwgNzg2NiwgNzg2OCwgNzg3MCwgNzg3MiwgNzg3NCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg3NiwgNzg3OCwgNzg4MCwgNzg4MiwgNzg4NCwgNzg4NiwgNzg4OCwgCi0gICAgNzg5MCwgNzg5MiwgNzg5NCwgNzg5NiwgNzg5OCwgNzkwMCwgNzkwMiwgNzkwNCwgNzkwNiwgNzkwOCwgNzkxMCwgNzkxMiwgCi0gICAgNzkxNCwgNzkxNiwgNzkxOCwgNzkyMCwgNzkyMiwgNzkyNSwgNzkyOCwgNzkzMSwgNzkzNCwgNzkzNywgNzk0MCwgNzk0MywgCi0gICAgNzk0NiwgNzk0OSwgNzk1MiwgNzk1NSwgNzk1OCwgNzk2MSwgNzk2NCwgNzk2NywgNzk3MCwgNzk3MywgNzk3NiwgNzk3OCwgCi0gICAgNzk4MCwgNzk4MiwgNzk4NCwgNzk4NywgNzk5MCwgNzk5MywgNzk5NiwgNzk5OSwgODAwMiwgODAwNSwgODAwOCwgODAxMSwgCi0gICAgODAxNCwgODAxNywgODAyMCwgODAyMywgODAyNiwgODAyOSwgODAzMiwgODAzNSwgODAzOCwgODA0MSwgODA0NCwgODA0NywgCi0gICAgODA1MCwgODA1MywgODA1NiwgODA1OSwgODA2MiwgODA2NSwgODA2OCwgODA3MSwgODA3NCwgODA3NywgODA4MCwgODA4MywgCi0gICAgODA4NiwgODA4OSwgODA5MiwgODA5NSwgODA5OCwgODEwMSwgODEwNCwgODEwNywgODExMCwgODExMywgODExNiwgODExOSwgCi0gICAgODEyMiwgODEyNSwgODEyOCwgODEzMSwgODEzNCwgODEzNywgODE0MCwgODE0MywgODE0NiwgODE0OSwgODE1MiwgODE1NSwgCi0gICAgODE1OCwgODE2MSwgODE2NCwgODE2NywgODE3MCwgODE3MywgODE3NiwgODE3OSwgODE4MiwgODE4NSwgODE4OCwgODE5MSwgCi0gICAgODE5NCwgODE5NywgODIwMCwgODIwMywgODIwNiwgODIwOSwgODIxMiwgODIxNSwgODIxOCwgODIyMSwgODIyNCwgODIyNywgCi0gICAgODIzMCwgODIzMywgODIzNiwgODIzOSwgODI0MiwgODI0NSwgODI0OCwgODI1MSwgODI1NCwgODI1NywgODI2MCwgODI2MywgCi0gICAgODI2NiwgODI3MCwgODI3NCwgODI3OCwgODI4MiwgODI4NiwgODI5MCwgODI5MywgODI5NiwgODI5OSwgODMwMiwgODMwNSwgCi0gICAgODMwOCwgODMxMSwgODMxNCwgODMxNywgODMyMCwgODMyMywgODMyNiwgODMyOSwgODMzMiwgODMzNSwgODMzOCwgODM0MSwgCi0gICAgODM0NCwgODM0NywgODM1MCwgODM1MywgODM1NiwgODM1OSwgODM2MiwgODM2NSwgODM2OCwgODM3MSwgODM3NCwgODM3NywgCi0gICAgODM4MCwgODM4MywgODM4NiwgODM4OSwgODM5MiwgODM5NSwgODM5OCwgODQwMSwgODQwNCwgODQwNywgODQxMCwgODQxMywgCi0gICAgODQxNiwgODQxOSwgODQyMiwgODQyNSwgODQyOCwgODQzMSwgODQzNCwgODQzNywgODQ0MCwgODQ0MywgODQ0NiwgODQ0OSwgCi0gICAgODQ1MiwgODQ1NSwgODQ1OCwgODQ2MSwgODQ2NCwgODQ2NywgODQ3MCwgODQ3MywgODQ3NiwgODQ3OSwgODQ4MiwgODQ4NSwgCi0gICAgODQ4OCwgODQ5MSwgODQ5NCwgODQ5NywgODUwMCwgODUwMywgODUwNiwgODUwOSwgODUxMiwgODUxNSwgODUxOCwgODUyMSwgCi0gICAgODUyNCwgODUyNywgODUzMCwgODUzMywgODUzNiwgODUzOSwgODU0MiwgODU0NSwgODU0OCwgODU1MSwgODU1NCwgODU1NywgCi0gICAgODU2MCwgODU2MywgODU2NiwgODU2OSwgODU3MiwgODU3NSwgODU3OCwgODU4MSwgODU4NCwgODU4NywgODU5MCwgODU5MywgCi0gICAgODU5NiwgODU5OSwgODYwMiwgODYwNSwgODYwOCwgODYxMSwgODYxNCwgODYxNywgODYyMCwgODYyMywgODYyNiwgODYyOSwgCi0gICAgODYzMiwgODYzNSwgODYzOCwgODY0MSwgODY0NCwgODY0NywgODY1MCwgODY1MywgODY1NiwgODY1OSwgODY2MiwgODY2NSwgCi0gICAgODY2OCwgODY3MSwgODY3NCwgODY3NywgODY4MCwgODY4MywgODY4NiwgODY4OSwgODY5MiwgODY5NSwgODY5OCwgODcwMSwgCi0gICAgODcwNCwgODcwNywgODcxMCwgODcxMywgODcxNiwgODcyMCwgODcyNCwgODcyOCwgODczMSwgODczNCwgODczNywgODc0MCwgCi0gICAgODc0MywgODc0NiwgODc0OSwgODc1MiwgODc1NSwgODc1OCwgODc2MSwgODc2NCwgODc2NywgODc3MCwgODc3MywgODc3NiwgCi0gICAgODc3OSwgODc4MiwgODc4NSwgODc4OCwgODc5MSwgODc5NCwgODc5NywgODgwMCwgODgwMywgODgwNiwgODgwOSwgODgxMiwgCi0gICAgODgxNSwgODgxOCwgODgyMSwgODgyNCwgODgyNywgODgzMCwgODgzMywgODgzNiwgODgzOSwgODg0MiwgODg0NSwgODg0OCwgCi0gICAgODg1MSwgODg1NCwgODg1NywgODg2MCwgODg2MywgODg2NiwgODg2OSwgODg3MiwgODg3NSwgODg3OCwgODg4MSwgODg4NCwgCi0gICAgODg4NywgODg5MCwgODg5MywgODg5NiwgODg5OSwgODkwMiwgODkwNSwgODkwOCwgODkxMSwgODkxNCwgODkxNywgODkyMCwgCi0gICAgODkyMywgODkyNiwgODkyOSwgODkzMiwgODkzNSwgODkzOCwgODk0MSwgODk0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk0NywgODk1MSwgODk1NSwgODk1OSwgODk2MywgODk2NywgODk3MSwgCi0gICAgODk3NSwgODk3OSwgODk4MywgODk4NywgODk5MSwgODk5NSwgODk5OSwgOTAwMywgOTAwNywgOTAxMSwgOTAxNSwgOTAxOSwgCi0gICAgOTAyMywgOTAyNywgOTAzMSwgOTAzNSwgOTAzOSwgOTA0MywgOTA0NywgOTA1MSwgOTA1NSwgOTA1OSwgOTA2MywgOTA2NywgCi0gICAgOTA3MSwgOTA3NSwgOTA3OSwgOTA4MywgOTA4NywgOTA5MSwgOTA5NSwgOTA5OSwgOTEwMywgOTEwNywgOTExMSwgOTExNSwgCi0gICAgOTExOSwgOTEyMywgOTEyNywgOTEzMSwgOTEzNSwgOTEzOSwgOTE0MywgOTE0NywgOTE1MSwgOTE1NSwgOTE1OSwgOTE2MywgCi0gICAgOTE2NywgOTE3MSwgOTE3NSwgOTE3OSwgOTE4MywgOTE4NywgOTE5MSwgOTE5NSwgOTE5OSwgMCwgMCwgOTIwMywgOTIwNywgCi0gICAgOTIxMSwgOTIxNSwgOTIxOSwgOTIyMywgOTIyNywgOTIzMSwgOTIzNSwgOTIzOSwgOTI0MywgOTI0NywgOTI1MSwgOTI1NSwgCi0gICAgOTI1OSwgOTI2MywgOTI2NywgOTI3MSwgOTI3NSwgOTI3OSwgOTI4MywgOTI4NywgOTI5MSwgOTI5NSwgOTI5OSwgOTMwMywgCi0gICAgOTMwNywgOTMxMSwgOTMxNSwgOTMxOSwgOTMyMywgOTMyNywgOTMzMSwgOTMzNSwgOTMzOSwgOTM0MywgOTM0NywgOTM1MSwgCi0gICAgOTM1NSwgOTM1OSwgOTM2MywgOTM2NywgOTM3MSwgOTM3NSwgOTM3OSwgOTM4MywgOTM4NywgOTM5MSwgOTM5NSwgOTM5OSwgCi0gICAgOTQwMywgOTQwNywgOTQxMSwgOTQxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTI2MjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk0MTksIDk0MjMsIDk0MjcsIDk0MzIsIDk0MzcsIDk0NDIsIDk0NDcsIDk0NTIsIDk0NTcsIDk0NjIsIDk0NjYsIDk0ODUsIAotICAgIDk0OTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk0OTksIAotICAgIDk1MDEsIDk1MDMsIDk1MDUsIDk1MDcsIDk1MDksIDk1MTEsIDk1MTMsIDk1MTUsIDk1MTcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1MTksIDk1MjEsIDk1MjMsIDk1MjUsIAotICAgIDk1MjcsIDk1MjksIDk1MzEsIDk1MzMsIDk1MzUsIDk1MzcsIDk1MzksIDk1NDEsIDk1NDMsIDk1NDUsIDk1NDcsIDk1NDksIAotICAgIDk1NTEsIDk1NTMsIDk1NTUsIDk1NTcsIDk1NTksIDAsIDAsIDk1NjEsIDk1NjMsIDk1NjUsIDk1NjcsIDk1NjksIDk1NzEsIAotICAgIDk1NzMsIDk1NzUsIDk1NzcsIDk1NzksIDk1ODEsIDk1ODMsIDAsIDk1ODUsIDk1ODcsIDk1ODksIDk1OTEsIDk1OTMsIAotICAgIDk1OTUsIDk1OTcsIDk1OTksIDk2MDEsIDk2MDMsIDk2MDUsIDk2MDcsIDk2MDksIDk2MTEsIDk2MTMsIDk2MTUsIDk2MTcsIAotICAgIDk2MTksIDk2MjEsIDAsIDk2MjMsIDk2MjUsIDk2MjcsIDk2MjksIDAsIDAsIDAsIDAsIDk2MzEsIDk2MzQsIDk2MzcsIDAsIAotICAgIDk2NDAsIDAsIDk2NDMsIDk2NDYsIDk2NDksIDk2NTIsIDk2NTUsIDk2NTgsIDk2NjEsIDk2NjQsIDk2NjcsIDk2NzAsIAotICAgIDk2NzMsIDk2NzUsIDk2NzcsIDk2NzksIDk2ODEsIDk2ODMsIDk2ODUsIDk2ODcsIDk2ODksIDk2OTEsIDk2OTMsIDk2OTUsIAotICAgIDk2OTcsIDk2OTksIDk3MDEsIDk3MDMsIDk3MDUsIDk3MDcsIDk3MDksIDk3MTEsIDk3MTMsIDk3MTUsIDk3MTcsIDk3MTksIAotICAgIDk3MjEsIDk3MjMsIDk3MjUsIDk3MjcsIDk3MjksIDk3MzEsIDk3MzMsIDk3MzUsIDk3MzcsIDk3MzksIDk3NDEsIDk3NDMsIAotICAgIDk3NDUsIDk3NDcsIDk3NDksIDk3NTEsIDk3NTMsIDk3NTUsIDk3NTcsIDk3NTksIDk3NjEsIDk3NjMsIDk3NjUsIDk3NjcsIAotICAgIDk3NjksIDk3NzEsIDk3NzMsIDk3NzUsIDk3NzcsIDk3NzksIDk3ODEsIDk3ODMsIDk3ODUsIDk3ODcsIDk3ODksIDk3OTEsIAotICAgIDk3OTMsIDk3OTUsIDk3OTcsIDk3OTksIDk4MDEsIDk4MDMsIDk4MDUsIDk4MDcsIDk4MDksIDk4MTEsIDk4MTMsIDk4MTUsIAotICAgIDk4MTcsIDk4MTksIDk4MjEsIDk4MjMsIDk4MjUsIDk4MjcsIDk4MjksIDk4MzEsIDk4MzMsIDk4MzUsIDk4MzcsIDk4MzksIAotICAgIDk4NDEsIDk4NDMsIDk4NDUsIDk4NDcsIDk4NDksIDk4NTEsIDk4NTMsIDk4NTUsIDk4NTcsIDk4NTksIDk4NjEsIDk4NjMsIAotICAgIDk4NjUsIDk4NjcsIDk4NjksIDk4NzEsIDk4NzMsIDk4NzUsIDk4NzcsIDk4NzksIDk4ODEsIDk4ODMsIDk4ODUsIDk4ODcsIAotICAgIDk4ODksIDk4OTEsIDk4OTMsIDk4OTUsIDk4OTcsIDk4OTksIDk5MDEsIDk5MDMsIDk5MDUsIDk5MDcsIDk5MTAsIDk5MTMsIAotICAgIDk5MTYsIDk5MTksIDk5MjIsIDk5MjUsIDk5MjgsIDAsIDAsIDAsIDAsIDk5MzEsIDk5MzMsIDk5MzUsIDk5MzcsIDk5MzksIAotICAgIDk5NDEsIDk5NDMsIDk5NDUsIDk5NDcsIDk5NDksIDk5NTEsIDk5NTMsIDk5NTUsIDk5NTcsIDk5NTksIDk5NjEsIDk5NjMsIAotICAgIDk5NjUsIDk5NjcsIDk5NjksIDk5NzEsIDk5NzMsIDk5NzUsIDk5NzcsIDk5NzksIDk5ODEsIDk5ODMsIDk5ODUsIDk5ODcsIAotICAgIDk5ODksIDk5OTEsIDk5OTMsIDk5OTUsIDk5OTcsIDk5OTksIDEwMDAxLCAxMDAwMywgMTAwMDUsIDEwMDA3LCAxMDAwOSwgCi0gICAgMTAwMTEsIDEwMDEzLCAxMDAxNSwgMTAwMTcsIDEwMDE5LCAxMDAyMSwgMTAwMjMsIDEwMDI1LCAxMDAyNywgMTAwMjksIAotICAgIDEwMDMxLCAxMDAzMywgMTAwMzUsIDEwMDM3LCAxMDAzOSwgMTAwNDEsIDEwMDQzLCAxMDA0NSwgMTAwNDcsIDEwMDQ5LCAKLSAgICAxMDA1MSwgMTAwNTMsIDEwMDU1LCAxMDA1NywgMTAwNTksIDEwMDYxLCAxMDA2MywgMTAwNjUsIDEwMDY3LCAxMDA2OSwgCi0gICAgMTAwNzEsIDEwMDczLCAxMDA3NSwgMTAwNzcsIDEwMDc5LCAxMDA4MSwgMTAwODMsIDEwMDg1LCAxMDA4NywgMTAwODksIAotICAgIDEwMDkxLCAxMDA5MywgMTAwOTUsIDEwMDk3LCAxMDA5OSwgMTAxMDEsIDEwMTAzLCAxMDEwNSwgMTAxMDcsIDEwMTA5LCAKLSAgICAxMDExMSwgMTAxMTMsIDEwMTE1LCAxMDExNywgMTAxMTksIDEwMTIxLCAxMDEyMywgMTAxMjUsIDEwMTI3LCAxMDEyOSwgCi0gICAgMTAxMzEsIDEwMTMzLCAxMDEzNSwgMTAxMzcsIDEwMTM5LCAxMDE0MSwgMTAxNDMsIDEwMTQ1LCAxMDE0NywgMTAxNDksIAotICAgIDEwMTUxLCAxMDE1MywgMTAxNTUsIDEwMTU3LCAxMDE1OSwgMTAxNjEsIDEwMTYzLCAxMDE2NSwgMTAxNjcsIDEwMTY5LCAKLSAgICAxMDE3MSwgMTAxNzMsIDEwMTc1LCAxMDE3NywgMTAxNzksIDEwMTgxLCAxMDE4MywgMTAxODUsIDEwMTg3LCAxMDE4OSwgCi0gICAgMTAxOTEsIDEwMTkzLCAxMDE5NSwgMTAxOTcsIDEwMTk5LCAxMDIwMSwgMTAyMDMsIDEwMjA1LCAxMDIwNywgMTAyMDksIAotICAgIDEwMjExLCAxMDIxMywgMTAyMTUsIDEwMjE3LCAxMDIxOSwgMTAyMjEsIDEwMjIzLCAxMDIyNSwgMTAyMjcsIDEwMjI5LCAKLSAgICAxMDIzMSwgMTAyMzMsIDEwMjM1LCAxMDIzNywgMTAyMzksIDEwMjQxLCAxMDI0MywgMTAyNDUsIDEwMjQ3LCAxMDI0OSwgCi0gICAgMTAyNTEsIDEwMjUzLCAxMDI1NSwgMTAyNTcsIDEwMjU5LCAxMDI2MSwgMTAyNjMsIDEwMjY1LCAxMDI2NywgMTAyNjksIAotICAgIDEwMjcxLCAxMDI3MywgMTAyNzUsIDEwMjc3LCAxMDI3OSwgMTAyODEsIDEwMjgzLCAxMDI4NSwgMTAyODcsIDEwMjg5LCAKLSAgICAxMDI5MSwgMTAyOTMsIDEwMjk1LCAxMDI5NywgMTAyOTksIDEwMzAxLCAxMDMwMywgMTAzMDUsIDEwMzA3LCAxMDMwOSwgMCwgCi0gICAgMCwgMCwgMTAzMTEsIDEwMzEzLCAxMDMxNSwgMTAzMTcsIDEwMzE5LCAxMDMyMSwgMCwgMCwgMTAzMjMsIDEwMzI1LCAKLSAgICAxMDMyNywgMTAzMjksIDEwMzMxLCAxMDMzMywgMCwgMCwgMTAzMzUsIDEwMzM3LCAxMDMzOSwgMTAzNDEsIDEwMzQzLCAKLSAgICAxMDM0NSwgMCwgMCwgMTAzNDcsIDEwMzQ5LCAxMDM1MSwgMCwgMCwgMCwgMTAzNTMsIDEwMzU1LCAxMDM1NywgMTAzNTksIAotICAgIDEwMzYxLCAxMDM2MywgMTAzNjUsIDAsIDEwMzY3LCAxMDM2OSwgMTAzNzEsIDEwMzczLCAxMDM3NSwgMTAzNzcsIDEwMzc5LCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjYzMiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2MzUsIDEyNjM3LCAxMjYzOSwgMTI2NDEsIDEyNjQzLCAxMjY0NSwgCisgICAgMTI2NDcsIDEyNjQ5LCAxMjY1MSwgMTI2NTMsIDEyNjU1LCAxMjY1NywgMTI2NTksIDEyNjYxLCAxMjY2MywgMTI2NjUsIAorICAgIDEyNjY3LCAxMjY2OSwgMTI2NzEsIDEyNjczLCAxMjY3NSwgMTI2NzcsIDEyNjc5LCAxMjY4MSwgMTI2ODMsIDEyNjg1LCAKKyAgICAxMjY4NywgMTI2ODksIDEyNjkxLCAxMjY5MywgMTI2OTUsIDEyNjk3LCAxMjY5OSwgMTI3MDEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzAzLCAxMjcwNywgMTI3MTEsIDEyNzE1LCAxMjcxOSwgMTI3MjMsIDEyNzI3LCAKKyAgICAxMjczMSwgMTI3MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMzgxLCAxMDM4NCwgMTAzODcsIDEwMzkwLCAKLSAgICAxMDM5MywgMTAzOTYsIDEwMzk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQwMiwgCi0gICAgMTA0MDUsIDEwNDA4LCAxMDQxMSwgMTA0MTQsIDEwNDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMDQyMCwgMTA0MjIsIDEwNDI0LCAxMDQyNiwgMTA0MjgsIDEwNDMwLCAxMDQzMiwgMTA0MzQsIDEwNDM2LCAKLSAgICAxMDQzOCwgMTA0NDAsIDEwNDQyLCAxMDQ0NCwgMTA0NDYsIDEwNDQ4LCAxMDQ1MCwgMTA0NTIsIDEwNDU0LCAxMDQ1NiwgCi0gICAgMTA0NTgsIDEwNDYwLCAxMDQ2MiwgMTA0NjQsIDEwNDY2LCAxMDQ2OCwgMTA0NzAsIDEwNDcyLCAxMDQ3NCwgMTA0NzYsIAotICAgIDEwNDc4LCAxMDQ4MCwgMTA0ODIsIDEwNDg0LCAxMDQ4NiwgMTA0ODgsIDEwNDkwLCAxMDQ5MiwgMTA0OTQsIDEwNDk2LCAKLSAgICAxMDQ5OCwgMTA1MDAsIDEwNTAyLCAxMDUwNCwgMTA1MDYsIDEwNTA4LCAxMDUxMCwgMTA1MTIsIDEwNTE0LCAxMDUxNiwgCi0gICAgMTA1MTgsIDEwNTIwLCAxMDUyMiwgMTA1MjQsIDEwNTI2LCAxMDUyOCwgMTA1MzAsIDEwNTMyLCAxMDUzNCwgMTA1MzYsIAotICAgIDEwNTM4LCAxMDU0MCwgMTA1NDIsIDEwNTQ0LCAxMDU0NiwgMTA1NDgsIDEwNTUwLCAxMDU1MiwgMTA1NTQsIDEwNTU2LCAKLSAgICAxMDU1OCwgMTA1NjAsIDEwNTYyLCAxMDU2NCwgMTA1NjYsIDEwNTY4LCAxMDU3MCwgMTA1NzIsIDEwNTc0LCAxMDU3NiwgCi0gICAgMTA1NzgsIDEwNTgwLCAxMDU4MiwgMTA1ODQsIDEwNTg2LCAxMDU4OCwgMCwgMTA1OTAsIDEwNTkyLCAxMDU5NCwgMTA1OTYsIAotICAgIDEwNTk4LCAxMDYwMCwgMTA2MDIsIDEwNjA0LCAxMDYwNiwgMTA2MDgsIDEwNjEwLCAxMDYxMiwgMTA2MTQsIDEwNjE2LCAKLSAgICAxMDYxOCwgMTA2MjAsIDEwNjIyLCAxMDYyNCwgMTA2MjYsIDEwNjI4LCAxMDYzMCwgMTA2MzIsIDEwNjM0LCAxMDYzNiwgCi0gICAgMTA2MzgsIDEwNjQwLCAxMDY0MiwgMTA2NDQsIDEwNjQ2LCAxMDY0OCwgMTA2NTAsIDEwNjUyLCAxMDY1NCwgMTA2NTYsIAotICAgIDEwNjU4LCAxMDY2MCwgMTA2NjIsIDEwNjY0LCAxMDY2NiwgMTA2NjgsIDEwNjcwLCAxMDY3MiwgMTA2NzQsIDEwNjc2LCAKLSAgICAxMDY3OCwgMTA2ODAsIDEwNjgyLCAxMDY4NCwgMTA2ODYsIDEwNjg4LCAxMDY5MCwgMTA2OTIsIDEwNjk0LCAxMDY5NiwgCi0gICAgMTA2OTgsIDEwNzAwLCAxMDcwMiwgMTA3MDQsIDEwNzA2LCAxMDcwOCwgMTA3MTAsIDEwNzEyLCAxMDcxNCwgMTA3MTYsIAotICAgIDEwNzE4LCAxMDcyMCwgMTA3MjIsIDEwNzI0LCAxMDcyNiwgMTA3MjgsIDEwNzMwLCAwLCAxMDczMiwgMTA3MzQsIDAsIDAsIAotICAgIDEwNzM2LCAwLCAwLCAxMDczOCwgMTA3NDAsIDAsIDAsIDEwNzQyLCAxMDc0NCwgMTA3NDYsIDEwNzQ4LCAwLCAxMDc1MCwgCi0gICAgMTA3NTIsIDEwNzU0LCAxMDc1NiwgMTA3NTgsIDEwNzYwLCAxMDc2MiwgMTA3NjQsIDEwNzY2LCAxMDc2OCwgMTA3NzAsIAotICAgIDEwNzcyLCAwLCAxMDc3NCwgMCwgMTA3NzYsIDEwNzc4LCAxMDc4MCwgMTA3ODIsIDEwNzg0LCAxMDc4NiwgMTA3ODgsIDAsIAotICAgIDEwNzkwLCAxMDc5MiwgMTA3OTQsIDEwNzk2LCAxMDc5OCwgMTA4MDAsIDEwODAyLCAxMDgwNCwgMTA4MDYsIDEwODA4LCAKLSAgICAxMDgxMCwgMTA4MTIsIDEwODE0LCAxMDgxNiwgMTA4MTgsIDEwODIwLCAxMDgyMiwgMTA4MjQsIDEwODI2LCAxMDgyOCwgCi0gICAgMTA4MzAsIDEwODMyLCAxMDgzNCwgMTA4MzYsIDEwODM4LCAxMDg0MCwgMTA4NDIsIDEwODQ0LCAxMDg0NiwgMTA4NDgsIAotICAgIDEwODUwLCAxMDg1MiwgMTA4NTQsIDEwODU2LCAxMDg1OCwgMTA4NjAsIDEwODYyLCAxMDg2NCwgMTA4NjYsIDEwODY4LCAKLSAgICAxMDg3MCwgMTA4NzIsIDEwODc0LCAxMDg3NiwgMTA4NzgsIDEwODgwLCAxMDg4MiwgMTA4ODQsIDEwODg2LCAxMDg4OCwgCi0gICAgMTA4OTAsIDEwODkyLCAxMDg5NCwgMTA4OTYsIDEwODk4LCAxMDkwMCwgMTA5MDIsIDEwOTA0LCAxMDkwNiwgMTA5MDgsIAotICAgIDEwOTEwLCAxMDkxMiwgMTA5MTQsIDEwOTE2LCAxMDkxOCwgMCwgMTA5MjAsIDEwOTIyLCAxMDkyNCwgMTA5MjYsIDAsIDAsIAotICAgIDEwOTI4LCAxMDkzMCwgMTA5MzIsIDEwOTM0LCAxMDkzNiwgMTA5MzgsIDEwOTQwLCAxMDk0MiwgMCwgMTA5NDQsIDEwOTQ2LCAKLSAgICAxMDk0OCwgMTA5NTAsIDEwOTUyLCAxMDk1NCwgMTA5NTYsIDAsIDEwOTU4LCAxMDk2MCwgMTA5NjIsIDEwOTY0LCAxMDk2NiwgCi0gICAgMTA5NjgsIDEwOTcwLCAxMDk3MiwgMTA5NzQsIDEwOTc2LCAxMDk3OCwgMTA5ODAsIDEwOTgyLCAxMDk4NCwgMTA5ODYsIAotICAgIDEwOTg4LCAxMDk5MCwgMTA5OTIsIDEwOTk0LCAxMDk5NiwgMTA5OTgsIDExMDAwLCAxMTAwMiwgMTEwMDQsIDExMDA2LCAKLSAgICAxMTAwOCwgMTEwMTAsIDExMDEyLCAwLCAxMTAxNCwgMTEwMTYsIDExMDE4LCAxMTAyMCwgMCwgMTEwMjIsIDExMDI0LCAKLSAgICAxMTAyNiwgMTEwMjgsIDExMDMwLCAwLCAxMTAzMiwgMCwgMCwgMCwgMTEwMzQsIDExMDM2LCAxMTAzOCwgMTEwNDAsIAotICAgIDExMDQyLCAxMTA0NCwgMTEwNDYsIDAsIDExMDQ4LCAxMTA1MCwgMTEwNTIsIDExMDU0LCAxMTA1NiwgMTEwNTgsIDExMDYwLCAKLSAgICAxMTA2MiwgMTEwNjQsIDExMDY2LCAxMTA2OCwgMTEwNzAsIDExMDcyLCAxMTA3NCwgMTEwNzYsIDExMDc4LCAxMTA4MCwgCi0gICAgMTEwODIsIDExMDg0LCAxMTA4NiwgMTEwODgsIDExMDkwLCAxMTA5MiwgMTEwOTQsIDExMDk2LCAxMTA5OCwgMTExMDAsIAotICAgIDExMTAyLCAxMTEwNCwgMTExMDYsIDExMTA4LCAxMTExMCwgMTExMTIsIDExMTE0LCAxMTExNiwgMTExMTgsIDExMTIwLCAKLSAgICAxMTEyMiwgMTExMjQsIDExMTI2LCAxMTEyOCwgMTExMzAsIDExMTMyLCAxMTEzNCwgMTExMzYsIDExMTM4LCAxMTE0MCwgCi0gICAgMTExNDIsIDExMTQ0LCAxMTE0NiwgMTExNDgsIDExMTUwLCAxMTE1MiwgMTExNTQsIDExMTU2LCAxMTE1OCwgMTExNjAsIAotICAgIDExMTYyLCAxMTE2NCwgMTExNjYsIDExMTY4LCAxMTE3MCwgMTExNzIsIDExMTc0LCAxMTE3NiwgMTExNzgsIDExMTgwLCAKLSAgICAxMTE4MiwgMTExODQsIDExMTg2LCAxMTE4OCwgMTExOTAsIDExMTkyLCAxMTE5NCwgMTExOTYsIDExMTk4LCAxMTIwMCwgCi0gICAgMTEyMDIsIDExMjA0LCAxMTIwNiwgMTEyMDgsIDExMjEwLCAxMTIxMiwgMTEyMTQsIDExMjE2LCAxMTIxOCwgMTEyMjAsIAotICAgIDExMjIyLCAxMTIyNCwgMTEyMjYsIDExMjI4LCAxMTIzMCwgMTEyMzIsIDExMjM0LCAxMTIzNiwgMTEyMzgsIDExMjQwLCAKLSAgICAxMTI0MiwgMTEyNDQsIDExMjQ2LCAxMTI0OCwgMTEyNTAsIDExMjUyLCAxMTI1NCwgMTEyNTYsIDExMjU4LCAxMTI2MCwgCi0gICAgMTEyNjIsIDExMjY0LCAxMTI2NiwgMTEyNjgsIDExMjcwLCAxMTI3MiwgMTEyNzQsIDExMjc2LCAxMTI3OCwgMTEyODAsIAotICAgIDExMjgyLCAxMTI4NCwgMTEyODYsIDExMjg4LCAxMTI5MCwgMTEyOTIsIDExMjk0LCAxMTI5NiwgMTEyOTgsIDExMzAwLCAKLSAgICAxMTMwMiwgMTEzMDQsIDExMzA2LCAxMTMwOCwgMTEzMTAsIDExMzEyLCAxMTMxNCwgMTEzMTYsIDExMzE4LCAxMTMyMCwgCi0gICAgMTEzMjIsIDExMzI0LCAxMTMyNiwgMTEzMjgsIDExMzMwLCAxMTMzMiwgMTEzMzQsIDExMzM2LCAxMTMzOCwgMTEzNDAsIAotICAgIDExMzQyLCAxMTM0NCwgMTEzNDYsIDExMzQ4LCAxMTM1MCwgMTEzNTIsIDExMzU0LCAxMTM1NiwgMTEzNTgsIDExMzYwLCAKLSAgICAxMTM2MiwgMTEzNjQsIDExMzY2LCAxMTM2OCwgMTEzNzAsIDExMzcyLCAxMTM3NCwgMTEzNzYsIDExMzc4LCAxMTM4MCwgCi0gICAgMTEzODIsIDExMzg0LCAxMTM4NiwgMTEzODgsIDExMzkwLCAxMTM5MiwgMTEzOTQsIDExMzk2LCAxMTM5OCwgMTE0MDAsIAotICAgIDExNDAyLCAxMTQwNCwgMTE0MDYsIDExNDA4LCAxMTQxMCwgMTE0MTIsIDExNDE0LCAxMTQxNiwgMTE0MTgsIDExNDIwLCAKLSAgICAxMTQyMiwgMTE0MjQsIDExNDI2LCAxMTQyOCwgMTE0MzAsIDExNDMyLCAxMTQzNCwgMTE0MzYsIDExNDM4LCAxMTQ0MCwgCi0gICAgMTE0NDIsIDExNDQ0LCAxMTQ0NiwgMTE0NDgsIDExNDUwLCAxMTQ1MiwgMTE0NTQsIDExNDU2LCAxMTQ1OCwgMTE0NjAsIAotICAgIDExNDYyLCAxMTQ2NCwgMTE0NjYsIDExNDY4LCAxMTQ3MCwgMTE0NzIsIDExNDc0LCAxMTQ3NiwgMTE0NzgsIDExNDgwLCAKLSAgICAxMTQ4MiwgMTE0ODQsIDExNDg2LCAxMTQ4OCwgMTE0OTAsIDExNDkyLCAxMTQ5NCwgMTE0OTYsIDExNDk4LCAxMTUwMCwgCi0gICAgMTE1MDIsIDExNTA0LCAxMTUwNiwgMTE1MDgsIDExNTEwLCAxMTUxMiwgMTE1MTQsIDExNTE2LCAxMTUxOCwgMTE1MjAsIAotICAgIDExNTIyLCAxMTUyNCwgMTE1MjYsIDExNTI4LCAxMTUzMCwgMTE1MzIsIDExNTM0LCAxMTUzNiwgMTE1MzgsIDExNTQwLCAKLSAgICAxMTU0MiwgMTE1NDQsIDExNTQ2LCAxMTU0OCwgMTE1NTAsIDExNTUyLCAxMTU1NCwgMTE1NTYsIDExNTU4LCAxMTU2MCwgCi0gICAgMTE1NjIsIDExNTY0LCAxMTU2NiwgMTE1NjgsIDExNTcwLCAxMTU3MiwgMTE1NzQsIDExNTc2LCAxMTU3OCwgMTE1ODAsIAotICAgIDExNTgyLCAxMTU4NCwgMTE1ODYsIDExNTg4LCAxMTU5MCwgMTE1OTIsIDExNTk0LCAxMTU5NiwgMTE1OTgsIDExNjAwLCAKLSAgICAxMTYwMiwgMTE2MDQsIDExNjA2LCAxMTYwOCwgMTE2MTAsIDExNjEyLCAxMTYxNCwgMTE2MTYsIDExNjE4LCAxMTYyMCwgCi0gICAgMTE2MjIsIDExNjI0LCAxMTYyNiwgMTE2MjgsIDExNjMwLCAxMTYzMiwgMTE2MzQsIDExNjM2LCAxMTYzOCwgMTE2NDAsIAotICAgIDExNjQyLCAxMTY0NCwgMTE2NDYsIDExNjQ4LCAxMTY1MCwgMTE2NTIsIDExNjU0LCAxMTY1NiwgMTE2NTgsIDExNjYwLCAKLSAgICAxMTY2MiwgMTE2NjQsIDExNjY2LCAxMTY2OCwgMTE2NzAsIDExNjcyLCAxMTY3NCwgMTE2NzYsIDExNjc4LCAxMTY4MCwgCi0gICAgMTE2ODIsIDExNjg0LCAxMTY4NiwgMTE2ODgsIDExNjkwLCAxMTY5MiwgMTE2OTQsIDExNjk2LCAxMTY5OCwgMTE3MDAsIAotICAgIDExNzAyLCAxMTcwNCwgMTE3MDYsIDExNzA4LCAxMTcxMCwgMTE3MTIsIDExNzE0LCAxMTcxNiwgMTE3MTgsIDExNzIwLCAKLSAgICAxMTcyMiwgMTE3MjQsIDExNzI2LCAwLCAwLCAxMTcyOCwgMTE3MzAsIDExNzMyLCAxMTczNCwgMTE3MzYsIDExNzM4LCAKLSAgICAxMTc0MCwgMTE3NDIsIDExNzQ0LCAxMTc0NiwgMTE3NDgsIDExNzUwLCAxMTc1MiwgMTE3NTQsIDExNzU2LCAxMTc1OCwgCi0gICAgMTE3NjAsIDExNzYyLCAxMTc2NCwgMTE3NjYsIDExNzY4LCAxMTc3MCwgMTE3NzIsIDExNzc0LCAxMTc3NiwgMTE3NzgsIAotICAgIDExNzgwLCAxMTc4MiwgMTE3ODQsIDExNzg2LCAxMTc4OCwgMTE3OTAsIDExNzkyLCAxMTc5NCwgMTE3OTYsIDExNzk4LCAKLSAgICAxMTgwMCwgMTE4MDIsIDExODA0LCAxMTgwNiwgMTE4MDgsIDExODEwLCAxMTgxMiwgMTE4MTQsIDExODE2LCAxMTgxOCwgCi0gICAgMTE4MjAsIDExODIyLCAxMTgyNCwgMTE4MjYsIDExODI4LCAxMTgzMCwgMTE4MzIsIDExODM0LCAxMTgzNiwgMTE4MzgsIAotICAgIDExODQwLCAxMTg0MiwgMTE4NDQsIDExODQ2LCAxMTg0OCwgMTE4NTAsIDExODUyLCAxMTg1NCwgMTE4NTYsIDExODU4LCAKLSAgICAxMTg2MCwgMTE4NjIsIDExODY0LCAxMTg2NiwgMTE4NjgsIDExODcwLCAxMTg3MiwgMTE4NzQsIDExODc2LCAxMTg3OCwgCi0gICAgMTE4ODAsIDExODgyLCAxMTg4NCwgMTE4ODYsIDExODg4LCAxMTg5MCwgMTE4OTIsIDExODk0LCAxMTg5NiwgMTE4OTgsIAotICAgIDExOTAwLCAxMTkwMiwgMTE5MDQsIDExOTA2LCAxMTkwOCwgMTE5MTAsIDExOTEyLCAxMTkxNCwgMTE5MTYsIDExOTE4LCAKLSAgICAxMTkyMCwgMTE5MjIsIDExOTI0LCAxMTkyNiwgMTE5MjgsIDExOTMwLCAxMTkzMiwgMTE5MzQsIDExOTM2LCAxMTkzOCwgCi0gICAgMTE5NDAsIDExOTQyLCAxMTk0NCwgMTE5NDYsIDExOTQ4LCAxMTk1MCwgMTE5NTIsIDExOTU0LCAxMTk1NiwgMTE5NTgsIAotICAgIDExOTYwLCAxMTk2MiwgMTE5NjQsIDExOTY2LCAxMTk2OCwgMTE5NzAsIDExOTcyLCAxMTk3NCwgMTE5NzYsIDExOTc4LCAKLSAgICAxMTk4MCwgMTE5ODIsIDExOTg0LCAxMTk4NiwgMTE5ODgsIDExOTkwLCAxMTk5MiwgMTE5OTQsIDExOTk2LCAxMTk5OCwgCi0gICAgMTIwMDAsIDEyMDAyLCAxMjAwNCwgMTIwMDYsIDEyMDA4LCAxMjAxMCwgMTIwMTIsIDEyMDE0LCAxMjAxNiwgMTIwMTgsIAotICAgIDEyMDIwLCAxMjAyMiwgMTIwMjQsIDEyMDI2LCAxMjAyOCwgMTIwMzAsIDEyMDMyLCAxMjAzNCwgMTIwMzYsIDEyMDM4LCAKLSAgICAxMjA0MCwgMTIwNDIsIDEyMDQ0LCAxMjA0NiwgMTIwNDgsIDEyMDUwLCAxMjA1MiwgMTIwNTQsIDEyMDU2LCAxMjA1OCwgCi0gICAgMTIwNjAsIDEyMDYyLCAxMjA2NCwgMTIwNjYsIDEyMDY4LCAxMjA3MCwgMTIwNzIsIDEyMDc0LCAxMjA3NiwgMTIwNzgsIAotICAgIDEyMDgwLCAxMjA4MiwgMTIwODQsIDEyMDg2LCAxMjA4OCwgMTIwOTAsIDEyMDkyLCAxMjA5NCwgMTIwOTYsIDEyMDk4LCAKLSAgICAxMjEwMCwgMTIxMDIsIDEyMTA0LCAxMjEwNiwgMTIxMDgsIDEyMTEwLCAxMjExMiwgMTIxMTQsIDEyMTE2LCAxMjExOCwgCi0gICAgMTIxMjAsIDEyMTIyLCAxMjEyNCwgMTIxMjYsIDEyMTI4LCAxMjEzMCwgMTIxMzIsIDEyMTM0LCAxMjEzNiwgMTIxMzgsIAotICAgIDEyMTQwLCAxMjE0MiwgMTIxNDQsIDEyMTQ2LCAxMjE0OCwgMTIxNTAsIDEyMTUyLCAxMjE1NCwgMTIxNTYsIDEyMTU4LCAKLSAgICAxMjE2MCwgMTIxNjIsIDEyMTY0LCAxMjE2NiwgMTIxNjgsIDEyMTcwLCAxMjE3MiwgMTIxNzQsIDEyMTc2LCAxMjE3OCwgCi0gICAgMTIxODAsIDEyMTgyLCAxMjE4NCwgMTIxODYsIDEyMTg4LCAxMjE5MCwgMTIxOTIsIDEyMTk0LCAxMjE5NiwgMTIxOTgsIAotICAgIDEyMjAwLCAxMjIwMiwgMTIyMDQsIDEyMjA2LCAxMjIwOCwgMTIyMTAsIDEyMjEyLCAxMjIxNCwgMTIyMTYsIDEyMjE4LCAKLSAgICAxMjIyMCwgMTIyMjIsIDEyMjI0LCAxMjIyNiwgMTIyMjgsIDEyMjMwLCAxMjIzMiwgMTIyMzQsIDEyMjM2LCAxMjIzOCwgCi0gICAgMTIyNDAsIDEyMjQyLCAxMjI0NCwgMTIyNDYsIDEyMjQ4LCAxMjI1MCwgMTIyNTIsIDEyMjU0LCAxMjI1NiwgMTIyNTgsIAotICAgIDEyMjYwLCAxMjI2MiwgMTIyNjQsIDEyMjY2LCAxMjI2OCwgMTIyNzAsIDEyMjcyLCAxMjI3NCwgMTIyNzYsIDEyMjc4LCAKLSAgICAxMjI4MCwgMTIyODIsIDEyMjg0LCAxMjI4NiwgMTIyODgsIDEyMjkwLCAxMjI5MiwgMTIyOTQsIDEyMjk2LCAxMjI5OCwgCi0gICAgMTIzMDAsIDEyMzAyLCAxMjMwNCwgMTIzMDYsIDEyMzA4LCAxMjMxMCwgMCwgMCwgMTIzMTIsIDEyMzE0LCAxMjMxNiwgCi0gICAgMTIzMTgsIDEyMzIwLCAxMjMyMiwgMTIzMjQsIDEyMzI2LCAxMjMyOCwgMTIzMzAsIDEyMzMyLCAxMjMzNCwgMTIzMzYsIAotICAgIDEyMzM4LCAxMjM0MCwgMTIzNDIsIDEyMzQ0LCAxMjM0NiwgMTIzNDgsIDEyMzUwLCAxMjM1MiwgMTIzNTQsIDEyMzU2LCAKLSAgICAxMjM1OCwgMTIzNjAsIDEyMzYyLCAxMjM2NCwgMTIzNjYsIDEyMzY4LCAxMjM3MCwgMTIzNzIsIDEyMzc0LCAxMjM3NiwgCi0gICAgMTIzNzgsIDEyMzgwLCAxMjM4MiwgMTIzODQsIDEyMzg2LCAxMjM4OCwgMTIzOTAsIDEyMzkyLCAxMjM5NCwgMTIzOTYsIAotICAgIDEyMzk4LCAxMjQwMCwgMTI0MDIsIDEyNDA0LCAxMjQwNiwgMTI0MDgsIDEyNDEwLCAxMjQxMiwgMTI0MTQsIDEyNDE2LCAKLSAgICAxMjQxOCwgMTI0MjAsIDEyNDIyLCAxMjQyNCwgMTI0MjYsIDEyNDI4LCAxMjQzMCwgMTI0MzIsIDEyNDM0LCAxMjQzNiwgCi0gICAgMTI0MzgsIDEyNDQwLCAxMjQ0MiwgMTI0NDQsIDEyNDQ2LCAxMjQ0OCwgMTI0NTAsIDEyNDUyLCAxMjQ1NCwgMTI0NTYsIAotICAgIDEyNDU4LCAxMjQ2MCwgMTI0NjIsIDEyNDY0LCAxMjQ2NiwgMTI0NjgsIDEyNDcwLCAxMjQ3MiwgMTI0NzQsIDEyNDc2LCAKLSAgICAxMjQ3OCwgMTI0ODAsIDEyNDgyLCAxMjQ4NCwgMTI0ODYsIDEyNDg4LCAxMjQ5MCwgMTI0OTIsIDEyNDk0LCAxMjQ5NiwgCi0gICAgMTI0OTgsIDEyNTAwLCAxMjUwMiwgMTI1MDQsIDEyNTA2LCAxMjUwOCwgMTI1MTAsIDEyNTEyLCAxMjUxNCwgMTI1MTYsIAotICAgIDEyNTE4LCAxMjUyMCwgMTI1MjIsIDEyNTI0LCAxMjUyNiwgMTI1MjgsIDEyNTMwLCAxMjUzMiwgMTI1MzQsIDEyNTM2LCAKLSAgICAxMjUzOCwgMTI1NDAsIDEyNTQyLCAxMjU0NCwgMTI1NDYsIDEyNTQ4LCAxMjU1MCwgMTI1NTIsIDEyNTU0LCAxMjU1NiwgCi0gICAgMTI1NTgsIDEyNTYwLCAxMjU2MiwgMTI1NjQsIDEyNTY2LCAxMjU2OCwgMTI1NzAsIDEyNTcyLCAxMjU3NCwgMTI1NzYsIAotICAgIDEyNTc4LCAxMjU4MCwgMTI1ODIsIDEyNTg0LCAxMjU4NiwgMTI1ODgsIDEyNTkwLCAxMjU5MiwgMTI1OTQsIDEyNTk2LCAKLSAgICAxMjU5OCwgMTI2MDAsIDEyNjAyLCAxMjYwNCwgMTI2MDYsIDEyNjA4LCAxMjYxMCwgMTI2MTIsIDEyNjE0LCAxMjYxNiwgCi0gICAgMTI2MTgsIDEyNjIwLCAxMjYyMiwgMTI2MjQsIDEyNjI2LCAxMjYyOCwgMTI2MzAsIDEyNjMyLCAxMjYzNCwgMTI2MzYsIAotICAgIDEyNjM4LCAxMjY0MCwgMTI2NDIsIDEyNjQ0LCAxMjY0NiwgMTI2NDgsIDEyNjUwLCAxMjY1MiwgMTI2NTQsIDEyNjU2LCAKLSAgICAxMjY1OCwgMTI2NjAsIDEyNjYyLCAxMjY2NCwgMTI2NjYsIDEyNjY4LCAxMjY3MCwgMTI2NzIsIDEyNjc0LCAxMjY3NiwgCi0gICAgMTI2NzgsIDEyNjgwLCAxMjY4MiwgMTI2ODQsIDEyNjg2LCAxMjY4OCwgMTI2OTAsIDEyNjkyLCAxMjY5NCwgMTI2OTYsIAotICAgIDEyNjk4LCAxMjcwMCwgMTI3MDIsIDEyNzA0LCAxMjcwNiwgMTI3MDgsIDEyNzEwLCAxMjcxMiwgMTI3MTQsIDEyNzE2LCAKLSAgICAxMjcxOCwgMTI3MjAsIDEyNzIyLCAxMjcyNCwgMTI3MjYsIDEyNzI4LCAxMjczMCwgMTI3MzIsIDEyNzM0LCAxMjczNiwgCi0gICAgMTI3MzgsIDEyNzQwLCAxMjc0MiwgMTI3NDQsIDEyNzQ2LCAxMjc0OCwgMTI3NTAsIDEyNzUyLCAxMjc1NCwgMTI3NTYsIAotICAgIDEyNzU4LCAxMjc2MCwgMTI3NjIsIDEyNzY0LCAxMjc2NiwgMTI3NjgsIDEyNzcwLCAxMjc3MiwgMTI3NzQsIDEyNzc2LCAKLSAgICAxMjc3OCwgMTI3ODAsIDEyNzgyLCAxMjc4NCwgMTI3ODYsIDEyNzg4LCAxMjc5MCwgMTI3OTIsIDEyNzk0LCAxMjc5NiwgCi0gICAgMTI3OTgsIDEyODAwLCAxMjgwMiwgMTI4MDQsIDEyODA2LCAxMjgwOCwgMTI4MTAsIDEyODEyLCAxMjgxNCwgMTI4MTYsIAotICAgIDEyODE4LCAxMjgyMCwgMTI4MjIsIDEyODI0LCAxMjgyNiwgMTI4MjgsIDEyODMwLCAxMjgzMiwgMTI4MzQsIDEyODM2LCAKLSAgICAxMjgzOCwgMTI4NDAsIDEyODQyLCAxMjg0NCwgMTI4NDYsIDEyODQ4LCAxMjg1MCwgMTI4NTIsIDEyODU0LCAxMjg1NiwgCi0gICAgMTI4NTgsIDEyODYwLCAxMjg2MiwgMTI4NjQsIDEyODY2LCAxMjg2OCwgMTI4NzAsIDEyODcyLCAxMjg3NCwgMTI4NzYsIAotICAgIDEyODc4LCAxMjg4MCwgMTI4ODIsIDEyODg0LCAxMjg4NiwgMTI4ODgsIDEyODkwLCAxMjg5MiwgMTI4OTQsIDEyODk2LCAKLSAgICAxMjg5OCwgMTI5MDAsIDEyOTAyLCAxMjkwNCwgMTI5MDYsIDEyOTA4LCAxMjkxMCwgMTI5MTIsIDEyOTE0LCAxMjkxNiwgCi0gICAgMTI5MTgsIDEyOTIwLCAxMjkyMiwgMTI5MjQsIDEyOTI2LCAxMjkyOCwgMTI5MzAsIDEyOTMyLCAxMjkzNCwgMTI5MzYsIAotICAgIDEyOTM4LCAxMjk0MCwgMTI5NDIsIDEyOTQ0LCAxMjk0NiwgMTI5NDgsIDEyOTUwLCAxMjk1MiwgMTI5NTQsIDEyOTU2LCAKLSAgICAxMjk1OCwgMTI5NjAsIDEyOTYyLCAxMjk2NCwgMTI5NjYsIDEyOTY4LCAxMjk3MCwgMTI5NzIsIDEyOTc0LCAxMjk3NiwgCi0gICAgMTI5NzgsIDEyOTgwLCAxMjk4MiwgMTI5ODQsIDEyOTg2LCAxMjk4OCwgMTI5OTAsIDEyOTkyLCAxMjk5NCwgMTI5OTYsIAotICAgIDEyOTk4LCAxMzAwMCwgMTMwMDIsIDEzMDA0LCAxMzAwNiwgMTMwMDgsIDEzMDEwLCAxMzAxMiwgMTMwMTQsIDEzMDE2LCAKLSAgICAxMzAxOCwgMTMwMjAsIDEzMDIyLCAxMzAyNCwgMTMwMjYsIDEzMDI4LCAxMzAzMCwgMTMwMzIsIDEzMDM0LCAxMzAzNiwgCi0gICAgMTMwMzgsIDEzMDQwLCAxMzA0MiwgMTMwNDQsIDEzMDQ2LCAxMzA0OCwgMTMwNTAsIDEzMDUyLCAxMzA1NCwgMTMwNTYsIAotICAgIDEzMDU4LCAxMzA2MCwgMTMwNjIsIDEzMDY0LCAxMzA2NiwgMTMwNjgsIDEzMDcwLCAxMzA3MiwgMTMwNzQsIDEzMDc2LCAKLSAgICAxMzA3OCwgMTMwODAsIDEzMDgyLCAxMzA4NCwgMTMwODYsIDEzMDg4LCAxMzA5MCwgMTMwOTIsIDEzMDk0LCAxMzA5NiwgCi0gICAgMTMwOTgsIDEzMTAwLCAxMzEwMiwgMTMxMDQsIDEzMTA2LCAxMzEwOCwgMTMxMTAsIDEzMTEyLCAxMzExNCwgMTMxMTYsIAotICAgIDEzMTE4LCAxMzEyMCwgMTMxMjIsIDEzMTI0LCAxMzEyNiwgMTMxMjgsIDEzMTMwLCAxMzEzMiwgMTMxMzQsIDEzMTM2LCAKLSAgICAxMzEzOCwgMTMxNDAsIDEzMTQyLCAxMzE0NCwgMTMxNDYsIDEzMTQ4LCAxMzE1MCwgMTMxNTIsIDEzMTU0LCAxMzE1NiwgCi0gICAgMTMxNTgsIDEzMTYwLCAxMzE2MiwgMTMxNjQsIDEzMTY2LCAxMzE2OCwgMTMxNzAsIDEzMTcyLCAxMzE3NCwgMTMxNzYsIAotICAgIDEzMTc4LCAxMzE4MCwgMTMxODIsIDEzMTg0LCAxMzE4NiwgMTMxODgsIDEzMTkwLCAxMzE5MiwgMTMxOTQsIDEzMTk2LCAKLSAgICAxMzE5OCwgMTMyMDAsIDEzMjAyLCAxMzIwNCwgMTMyMDYsIDEzMjA4LCAxMzIxMCwgMTMyMTIsIDEzMjE0LCAxMzIxNiwgCi0gICAgMTMyMTgsIDEzMjIwLCAxMzIyMiwgMTMyMjQsIDEzMjI2LCAxMzIyOCwgMTMyMzAsIDEzMjMyLCAxMzIzNCwgMTMyMzYsIAotICAgIDEzMjM4LCAxMzI0MCwgMTMyNDIsIDEzMjQ0LCAxMzI0NiwgMTMyNDgsIDEzMjUwLCAxMzI1MiwgMTMyNTQsIDEzMjU2LCAKLSAgICAxMzI1OCwgMTMyNjAsIDEzMjYyLCAxMzI2NCwgMTMyNjYsIDEzMjY4LCAxMzI3MCwgMTMyNzIsIDEzMjc0LCAxMzI3NiwgCi0gICAgMTMyNzgsIDEzMjgwLCAxMzI4MiwgMTMyODQsIDEzMjg2LCAxMzI4OCwgMTMyOTAsIDEzMjkyLCAxMzI5NCwgMTMyOTYsIAotICAgIDEzMjk4LCAxMzMwMCwgMTMzMDIsIDEzMzA0LCAxMzMwNiwgMTMzMDgsIDEzMzEwLCAxMzMxMiwgMTMzMTQsIDEzMzE2LCAKLSAgICAxMzMxOCwgMTMzMjAsIDEzMzIyLCAxMzMyNCwgMTMzMjYsIDEzMzI4LCAxMzMzMCwgMTMzMzIsIDEzMzM0LCAxMzMzNiwgCi0gICAgMTMzMzgsIDEzMzQwLCAxMzM0MiwgMTMzNDQsIDEzMzQ2LCAxMzM0OCwgMTMzNTAsIDEzMzUyLCAxMzM1NCwgMTMzNTYsIAotICAgIDEzMzU4LCAxMzM2MCwgMTMzNjIsIDEzMzY0LCAxMzM2NiwgMTMzNjgsIDEzMzcwLCAxMzM3MiwgMTMzNzQsIDEzMzc2LCAKLSAgICAxMzM3OCwgMTMzODAsIDEzMzgyLCAxMzM4NCwgMTMzODYsIDEzMzg4LCAxMzM5MCwgMTMzOTIsIDEzMzk0LCAxMzM5NiwgCi0gICAgMTMzOTgsIDEzNDAwLCAxMzQwMiwgMTM0MDQsIDEzNDA2LCAxMzQwOCwgMTM0MTAsIDEzNDEyLCAxMzQxNCwgMTM0MTYsIAotICAgIDEzNDE4LCAxMzQyMCwgMTM0MjIsIDEzNDI0LCAxMzQyNiwgMTM0MjgsIDEzNDMwLCAxMzQzMiwgMTM0MzQsIDEzNDM2LCAKLSAgICAxMzQzOCwgMTM0NDAsIDEzNDQyLCAxMzQ0NCwgMTM0NDYsIDEzNDQ4LCAxMzQ1MCwgMTM0NTIsIDEzNDU0LCAxMzQ1NiwgCi0gICAgMTM0NTgsIDEzNDYwLCAxMzQ2MiwgMTM0NjQsIDEzNDY2LCAxMzQ2OCwgMTM0NzAsIDEzNDcyLCAxMzQ3NCwgMTM0NzYsIAotICAgIDEzNDc4LCAxMzQ4MCwgMTM0ODIsIDEzNDg0LCAxMzQ4NiwgMTM0ODgsIDEzNDkwLCAxMzQ5MiwgMTM0OTQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzM5LCAxMjc0MSwgCisgICAgMTI3NDMsIDEyNzQ1LCAxMjc0NywgMTI3NDksIDEyNzUxLCAxMjc1MywgMTI3NTUsIDEyNzU3LCAxMjc1OSwgMTI3NjEsIAorICAgIDEyNzYzLCAxMjc2NSwgMTI3NjcsIDEyNzY5LCAxMjc3MSwgMTI3NzMsIDEyNzc1LCAxMjc3NywgMTI3NzksIDEyNzgxLCAKKyAgICAxMjc4MywgMTI3ODUsIDEyNzg3LCAxMjc4OSwgMTI3OTEsIDEyNzkzLCAxMjc5NSwgMTI3OTcsIDEyNzk5LCAxMjgwMSwgCisgICAgMTI4MDMsIDEyODA1LCAxMjgwNywgMTI4MDksIDEyODExLCAxMjgxMywgMTI4MTUsIDEyODE3LCAxMjgxOSwgMTI4MjEsIAorICAgIDEyODIzLCAxMjgyNSwgMTI4MjcsIDEyODI5LCAxMjgzMSwgMTI4MzMsIDEyODM1LCAxMjgzNywgMTI4MzksIDEyODQxLCAKKyAgICAxMjg0MywgMTI4NDUsIDEyODQ3LCAxMjg0OSwgMTI4NTEsIDEyODUzLCAxMjg1NSwgMTI4NTcsIDEyODU5LCAxMjg2MSwgCisgICAgMTI4NjMsIDEyODY1LCAxMjg2NywgMTI4NjksIDEyODcxLCAxMjg3MywgMTI4NzUsIDEyODc3LCAxMjg3OSwgMTI4ODEsIAorICAgIDEyODgzLCAxMjg4NSwgMTI4ODcsIDEyODg5LCAxMjg5MSwgMTI4OTMsIDEyODk1LCAxMjg5NywgMTI4OTksIDEyOTAxLCAKKyAgICAxMjkwMywgMTI5MDUsIDEyOTA3LCAxMjkwOSwgMTI5MTEsIDEyOTEzLCAxMjkxNSwgMTI5MTcsIDEyOTE5LCAxMjkyMSwgCisgICAgMTI5MjMsIDEyOTI1LCAxMjkyNywgMTI5MjksIDEyOTMxLCAxMjkzMywgMTI5MzUsIDEyOTM3LCAxMjkzOSwgMTI5NDEsIAorICAgIDEyOTQzLCAxMjk0NSwgMTI5NDcsIDEyOTQ5LCAxMjk1MSwgMTI5NTMsIDEyOTU1LCAxMjk1NywgMTI5NTksIDEyOTYxLCAKKyAgICAxMjk2MywgMTI5NjUsIDEyOTY3LCAxMjk2OSwgMTI5NzEsIDEyOTczLCAxMjk3NSwgMTI5NzcsIDEyOTc5LCAxMjk4MSwgCisgICAgMTI5ODMsIDEyOTg1LCAxMjk4NywgMTI5ODksIDEyOTkxLCAxMjk5MywgMTI5OTUsIDEyOTk3LCAxMjk5OSwgMTMwMDEsIAorICAgIDEzMDAzLCAxMzAwNSwgMTMwMDcsIDEzMDA5LCAxMzAxMSwgMTMwMTMsIDEzMDE1LCAxMzAxNywgMTMwMTksIDEzMDIxLCAKKyAgICAxMzAyMywgMTMwMjUsIDEzMDI3LCAxMzAyOSwgMTMwMzEsIDEzMDMzLCAxMzAzNSwgMTMwMzcsIDEzMDM5LCAxMzA0MSwgCisgICAgMTMwNDMsIDEzMDQ1LCAxMzA0NywgMTMwNDksIDEzMDUxLCAxMzA1MywgMTMwNTUsIDEzMDU3LCAxMzA1OSwgMTMwNjEsIAorICAgIDEzMDYzLCAxMzA2NSwgMTMwNjcsIDEzMDY5LCAxMzA3MSwgMTMwNzMsIDEzMDc1LCAxMzA3NywgMTMwNzksIDEzMDgxLCAKKyAgICAxMzA4MywgMTMwODUsIDEzMDg3LCAxMzA4OSwgMTMwOTEsIDEzMDkzLCAxMzA5NSwgMTMwOTcsIDEzMDk5LCAxMzEwMSwgCisgICAgMTMxMDMsIDEzMTA1LCAxMzEwNywgMTMxMDksIDEzMTExLCAxMzExMywgMTMxMTUsIDEzMTE3LCAxMzExOSwgMTMxMjEsIAorICAgIDEzMTIzLCAxMzEyNSwgMTMxMjcsIDEzMTI5LCAxMzEzMSwgMTMxMzMsIDEzMTM1LCAxMzEzNywgMTMxMzksIDEzMTQxLCAKKyAgICAxMzE0MywgMTMxNDUsIDEzMTQ3LCAxMzE0OSwgMTMxNTEsIDEzMTUzLCAxMzE1NSwgMTMxNTcsIDEzMTU5LCAxMzE2MSwgCisgICAgMTMxNjMsIDEzMTY1LCAxMzE2NywgMTMxNjksIDEzMTcxLCAxMzE3MywgMTMxNzUsIDEzMTc3LCAxMzE3OSwgMTMxODEsIAorICAgIDEzMTgzLCAxMzE4NSwgMTMxODcsIDEzMTg5LCAxMzE5MSwgMTMxOTMsIDEzMTk1LCAxMzE5NywgMTMxOTksIDEzMjAxLCAKKyAgICAxMzIwMywgMTMyMDUsIDEzMjA3LCAxMzIwOSwgMTMyMTEsIDEzMjEzLCAxMzIxNSwgMTMyMTcsIDEzMjE5LCAxMzIyMSwgCisgICAgMTMyMjMsIDEzMjI1LCAxMzIyNywgMTMyMjksIDEzMjMxLCAxMzIzMywgMTMyMzUsIDEzMjM3LCAxMzIzOSwgMTMyNDEsIAorICAgIDEzMjQzLCAxMzI0NSwgMTMyNDcsIDEzMjQ5LCAxMzI1MSwgMTMyNTMsIDEzMjU1LCAxMzI1NywgMTMyNTksIDEzMjYxLCAKKyAgICAxMzI2MywgMTMyNjUsIDEzMjY3LCAxMzI2OSwgMTMyNzEsIDEzMjczLCAxMzI3NSwgMTMyNzcsIDEzMjc5LCAxMzI4MSwgCisgICAgMTMyODMsIDEzMjg1LCAxMzI4NywgMTMyODksIDEzMjkxLCAxMzI5MywgMTMyOTUsIDEzMjk3LCAxMzI5OSwgMTMzMDEsIAorICAgIDEzMzAzLCAxMzMwNSwgMTMzMDcsIDEzMzA5LCAxMzMxMSwgMTMzMTMsIDEzMzE1LCAxMzMxNywgMTMzMTksIDEzMzIxLCAKKyAgICAxMzMyMywgMTMzMjUsIDEzMzI3LCAxMzMyOSwgMTMzMzEsIDEzMzMzLCAxMzMzNSwgMTMzMzcsIDEzMzM5LCAxMzM0MSwgCisgICAgMTMzNDMsIDEzMzQ1LCAxMzM0NywgMTMzNDksIDEzMzUxLCAxMzM1MywgMTMzNTUsIDEzMzU3LCAxMzM1OSwgMTMzNjEsIAorICAgIDEzMzYzLCAxMzM2NSwgMTMzNjcsIDEzMzY5LCAxMzM3MSwgMTMzNzMsIDEzMzc1LCAxMzM3NywgMTMzNzksIDEzMzgxLCAKKyAgICAxMzM4MywgMTMzODUsIDEzMzg3LCAxMzM4OSwgMTMzOTEsIDEzMzkzLCAxMzM5NSwgMTMzOTcsIDEzMzk5LCAxMzQwMSwgCisgICAgMTM0MDMsIDEzNDA1LCAxMzQwNywgMTM0MDksIDEzNDExLCAxMzQxMywgMTM0MTUsIDEzNDE3LCAxMzQxOSwgMTM0MjEsIAorICAgIDEzNDIzLCAxMzQyNSwgMTM0MjcsIDEzNDI5LCAxMzQzMSwgMTM0MzMsIDEzNDM1LCAxMzQzNywgMTM0MzksIDEzNDQxLCAKKyAgICAxMzQ0MywgMTM0NDUsIDEzNDQ3LCAxMzQ0OSwgMTM0NTEsIDEzNDUzLCAxMzQ1NSwgMTM0NTcsIDEzNDU5LCAxMzQ2MSwgCisgICAgMTM0NjMsIDEzNDY1LCAxMzQ2NywgMTM0NjksIDEzNDcxLCAxMzQ3MywgMTM0NzUsIDEzNDc3LCAxMzQ3OSwgMTM0ODEsIAorICAgIDEzNDgzLCAxMzQ4NSwgMTM0ODcsIDEzNDg5LCAxMzQ5MSwgMTM0OTMsIDEzNDk1LCAxMzQ5NywgMTM0OTksIDEzNTAxLCAKKyAgICAxMzUwMywgMTM1MDUsIDEzNTA3LCAxMzUwOSwgMTM1MTEsIDEzNTEzLCAxMzUxNSwgMTM1MTcsIDEzNTE5LCAxMzUyMSwgCisgICAgMTM1MjMsIDEzNTI1LCAxMzUyNywgMTM1MjksIDEzNTMxLCAxMzUzMywgMTM1MzUsIDEzNTM3LCAxMzUzOSwgMTM1NDEsIAorICAgIDEzNTQzLCAxMzU0NSwgMTM1NDcsIDEzNTQ5LCAxMzU1MSwgMTM1NTMsIDEzNTU1LCAxMzU1NywgMTM1NTksIDEzNTYxLCAKKyAgICAxMzU2MywgMTM1NjUsIDEzNTY3LCAxMzU2OSwgMTM1NzEsIDEzNTczLCAxMzU3NSwgMTM1NzcsIDEzNTc5LCAxMzU4MSwgCisgICAgMTM1ODMsIDEzNTg1LCAxMzU4NywgMTM1ODksIDEzNTkxLCAxMzU5MywgMTM1OTUsIDEzNTk3LCAxMzU5OSwgMTM2MDEsIAorICAgIDEzNjAzLCAxMzYwNSwgMTM2MDcsIDEzNjA5LCAxMzYxMSwgMTM2MTMsIDEzNjE1LCAxMzYxNywgMTM2MTksIDEzNjIxLCAKKyAgICAxMzYyMywgMTM2MjUsIDEzNjI3LCAxMzYyOSwgMTM2MzEsIDEzNjMzLCAxMzYzNSwgMTM2MzcsIDEzNjM5LCAxMzY0MSwgCisgICAgMTM2NDMsIDEzNjQ1LCAxMzY0NywgMTM2NDksIDEzNjUxLCAxMzY1MywgMTM2NTUsIDEzNjU3LCAxMzY1OSwgMTM2NjEsIAorICAgIDEzNjYzLCAxMzY2NSwgMTM2NjcsIDEzNjY5LCAxMzY3MSwgMTM2NzMsIDEzNjc1LCAxMzY3NywgMTM2NzksIDEzNjgxLCAKKyAgICAxMzY4MywgMTM2ODUsIDEzNjg3LCAxMzY4OSwgMTM2OTEsIDEzNjkzLCAxMzY5NSwgMTM2OTcsIDEzNjk5LCAxMzcwMSwgCisgICAgMTM3MDMsIDEzNzA1LCAxMzcwNywgMTM3MDksIDEzNzExLCAxMzcxMywgMTM3MTUsIDEzNzE3LCAxMzcxOSwgMTM3MjEsIAorICAgIDEzNzIzLCAxMzcyNSwgMTM3MjcsIDEzNzI5LCAxMzczMSwgMTM3MzMsIDEzNzM1LCAxMzczNywgMTM3MzksIDEzNzQxLCAKKyAgICAxMzc0MywgMTM3NDUsIDEzNzQ3LCAxMzc0OSwgMTM3NTEsIDEzNzUzLCAxMzc1NSwgMTM3NTcsIDEzNzU5LCAxMzc2MSwgCisgICAgMTM3NjMsIDEzNzY1LCAxMzc2NywgMTM3NjksIDEzNzcxLCAxMzc3MywgMTM3NzUsIDEzNzc3LCAxMzc3OSwgMTM3ODEsIAorICAgIDEzNzgzLCAxMzc4NSwgMTM3ODcsIDEzNzg5LCAxMzc5MSwgMTM3OTMsIDEzNzk1LCAxMzc5NywgMTM3OTksIDEzODAxLCAKKyAgICAxMzgwMywgMTM4MDUsIDEzODA3LCAxMzgwOSwgMTM4MTEsIDEzODEzLCAxMzgxNSwgMTM4MTcsIDEzODE5LCAxMzgyMSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC00MTE0LDM1MiArNDUzMCwzOTAgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKIH07CiAKIC8qIE5GQyBwYWlycyAqLwotI2RlZmluZSBDT01QX1NISUZUIDMKKyNkZWZpbmUgQ09NUF9TSElGVCAyCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgY29tcF9pbmRleFtdID0gewotICAgIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIAotICAgIDAsIDAsIDAsIDgsIDAsIDksIDEwLCAwLCAwLCAxMSwgMTIsIDEzLCAxNCwgMCwgMCwgMCwgMCwgMTUsIDE2LCAxNywgMCwgMCwgCi0gICAgMCwgMTgsIDE5LCAyMCwgMjEsIDAsIDAsIDAsIDIyLCAwLCAwLCAwLCAwLCAwLCAyMywgMjQsIDI1LCAyNiwgMCwgMCwgMCwgCi0gICAgMjcsIDI4LCAyOSwgMzAsIDAsIDAsIDAsIDMxLCAzMiwgMzMsIDM0LCAwLCAwLCAwLCAzNSwgMCwgMCwgMCwgMCwgMCwgMzYsIAotICAgIDAsIDM3LCAzOCwgMzksIDAsIDAsIDQwLCA0MSwgNDIsIDQzLCAwLCAwLCAwLCA0NCwgNDUsIDQ2LCAwLCAwLCAwLCAwLCA0NywgCi0gICAgNDgsIDQ5LCA1MCwgMCwgMCwgNTEsIDUyLCA1MywgNTQsIDAsIDAsIDAsIDU1LCA1NiwgMCwgMCwgMCwgMCwgMCwgNTcsIDU4LCAKLSAgICA1OSwgNjAsIDAsIDAsIDAsIDYxLCA2MiwgNjMsIDAsIDAsIDAsIDAsIDY0LCA2NSwgNjYsIDY3LCAwLCAwLCA2OCwgNjksIAotICAgIDcwLCA3MSwgMCwgMCwgMCwgNzIsIDAsIDczLCAwLCAwLCAwLCAwLCA3NCwgMCwgNzUsIDAsIDAsIDAsIDAsIDc2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3NywgNzgsIDc5LCAwLCAwLCAwLCAwLCA4MCwgODEsIDgyLCA4MywgMCwgMCwgMCwgODQsIDg1LCA4NiwgMCwgCi0gICAgMCwgMCwgMCwgODcsIDg4LCAwLCA4OSwgMCwgMCwgOTAsIDkxLCAwLCA5MiwgMCwgMCwgMCwgMCwgOTMsIDk0LCA5NSwgMCwgCi0gICAgMCwgMCwgOTYsIDk3LCA5OCwgOTksIDAsIDAsIDAsIDEwMCwgMCwgMCwgMCwgMCwgMCwgMTAxLCAxMDIsIDAsIDEwMywgMCwgCi0gICAgMCwgMCwgMTA0LCAxMDUsIDEwNiwgMTA3LCAwLCAwLCAwLCAxMDgsIDEwOSwgMTEwLCAxMTEsIDAsIDAsIDAsIDExMiwgMTEzLCAKLSAgICAwLCAwLCAwLCAwLCAxMTQsIDExNSwgMTE2LCAxMTcsIDAsIDAsIDAsIDExOCwgMTE5LCAxMjAsIDEyMSwgMCwgMCwgMCwgCi0gICAgMTIyLCAwLCAxMjMsIDAsIDAsIDAsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LCAwLCAwLCAxMjksIDEzMCwgMTMxLCAxMzIsIAotICAgIDAsIDAsIDAsIDEzMywgMTM0LCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNiwgMTM3LCAxMzgsIDAsIDAsIDEzOSwgMTQwLCAKLSAgICAxNDEsIDE0MiwgMCwgMCwgMCwgMCwgMTQzLCAxNDQsIDE0NSwgMCwgMCwgMCwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAwLCAwLCAKLSAgICAwLCAxNTAsIDAsIDE1MSwgMCwgMCwgMCwgMTUyLCAxNTMsIDE1NCwgMCwgMCwgMCwgMCwgMCwgMTU1LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxNTYsIDE1NywgMTU4LCAwLCAwLCAwLCAwLCAxNTksIDE2MCwgMTYxLCAxNjIsIDAsIDAsIDE2MywgMCwgMCwgMCwgCi0gICAgMTY0LCAwLCAwLCAxNjUsIDE2NiwgMCwgMCwgMCwgMCwgMCwgMTY3LCAwLCAwLCAwLCAwLCAwLCAwLCAxNjgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDE2OSwgMTcwLCAwLCAwLCAwLCAwLCAwLCAxNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MiwgMTczLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxNzQsIDAsIDAsIDAsIDAsIDAsIDE3NSwgMTc2LCAwLCAwLCAwLCAwLCAwLCAxNzcsIDE3OCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTc5LCAwLCAwLCAwLCAwLCAwLCAwLCAxODAsIDAsIDAsIDAsIDAsIDAsIDE4MSwgMTgyLCAxODMsIDAsIDAsIDAsIDAsIAotICAgIDE4NCwgMTg1LCAwLCAwLCAwLCAwLCAwLCAxODYsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NywgMCwgMCwgMCwgMCwgMCwgMTg4LCAKLSAgICAxODksIDAsIDAsIDAsIDAsIDAsIDE5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMTkxLCAxOTIsIDAsIDAsIDAsIDAsIDAsIDE5MywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTk0LCAxOTUsIDAsIDAsIDAsIDAsIDAsIDE5NiwgMTk3LCAwLCAwLCAwLCAwLCAwLCAxOTgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE5OSwgMCwgMCwgMCwgMCwgMCwgMjAwLCAyMDEsIDIwMiwgMCwgMCwgMCwgMCwgMjAzLCAyMDQsIAotICAgIDAsIDAsIDAsIDAsIDAsIDIwNSwgMjA2LCAwLCAwLCAwLCAwLCAwLCAyMDcsIDAsIDAsIDAsIDAsIDAsIDIwOCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMjA5LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxMSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjEyLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjE1LCAwLCAwLCAwLCAwLCAwLCAyMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNywgMCwgMCwgMCwgMCwgMCwgMCwgMjE4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyMTksIDAsIDAsIDAsIDAsIDAsIDIyMCwgMjIxLCAyMjIsIDAsIDAsIDAsIDAsIDIyMywgMjI0LCAKLSAgICAyMjUsIDAsIDAsIDAsIDAsIDIyNiwgMjI3LCAyMjgsIDAsIDAsIDAsIDAsIDIyOSwgMjMwLCAyMzEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDIzMiwgMCwgMCwgMCwgMCwgMCwgMjMzLCAwLCAwLCAwLCAwLCAwLCAyMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMjM2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMzcsIDAsIDAsIDAsIDAsIDAsIDIzOCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjM5LCAwLCAwLCAwLCAwLCAwLCAwLCAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjQyLCAwLCAyNDMsIDI0NCwgMCwgMCwgMCwgMjQ1LCAyNDYsIDAsIDAsIDAsIDAsIDI0NywgMCwgMjQ4LCAwLCAyNDksIDAsIAotICAgIDAsIDI1MCwgMjUxLCAyNTIsIDAsIDAsIDAsIDAsIDI1MywgMCwgMjU0LCAwLCAwLCAwLCAwLCAwLCAyNTUsIDAsIDAsIDAsIAotICAgIDAsIDI1NiwgMjU3LCAyNTgsIDAsIDAsIDAsIDAsIDI1OSwgMCwgMjYwLCAwLCAyNjEsIDAsIDAsIDAsIDAsIDAsIDI2MiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjYzLCAwLCAwLCAyNjQsIDI2NSwgMjY2LCAwLCAyNjcsIDAsIDAsIDI2OCwgMCwgMjY5LCAwLCAwLCAKLSAgICAwLCAwLCAyNzAsIDAsIDI3MSwgMjcyLCAwLCAwLCAwLCAyNzMsIDI3NCwgMCwgMjc1LCAwLCAwLCAyNzYsIDAsIDI3NywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjc4LCAwLCAwLCAwLCAwLCAyNzksIDI4MCwgMjgxLCAyODIsIDAsIDAsIDAsIDI4MywgMjg0LCAwLCAKLSAgICAyODUsIDAsIDAsIDI4NiwgMCwgMCwgMCwgMjg3LCAwLCAwLCAyODgsIDAsIDAsIDAsIDI4OSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjkwLCAwLCAwLCAwLCAyOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMjkzLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMjk2LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAyOTcsIDAsIDAsIDAsIDAsIDAsIDI5OCwgMjk5LCAwLCAwLCAwLCAwLCAwLCAzMDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDMwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMzAyLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDMsIDAsIDAsIDAsIDAsIDAsIDMwNCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAzMDYsIDAsIDAsIDAsIDAsIDAsIDMwNywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzA4LCAwLCAwLCAwLCAwLCAwLCAwLCAzMDksIDAsIDAsIDAsIDAsIDAsIDAsIDMxMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzExLCAzMTIsIDAsIDAsIDAsIDAsIDAsIDMxMywgMCwgMCwgMCwgMCwgMCwgMCwgMzE0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAzMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNiwgMCwgMCwgMCwgMCwgMCwgMzE3LCAwLCAwLCAwLCAwLCAwLCAwLCAzMTgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDMxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMzIwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDMyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMzIzLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjQsIDAsIDAsIDAsIDAsIAotICAgIDAsIDMyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI2LCAwLCAwLCAwLCAwLCAwLCAwLCAzMjcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDMyOCwgMCwgMCwgMCwgMCwgMCwgMzI5LCAwLCAwLCAwLCAwLCAwLCAwLCAzMzAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDMzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMzMyLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzMsIDAsIDAsIDAsIDAsIDAsIDMzNCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMzM1LCAwLCAwLCAwLCAwLCAwLCAwLCAzMzYsIDMzNywgMCwgMCwgMCwgMCwgMCwgMCwgMzM4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAzMzksIDAsIDAsIDAsIDAsIDAsIDAsIDM0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAzNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MywgMCwgMCwgMCwgMCwgMCwgMzQ0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAzNDUsIDM0NiwgMCwgMCwgMCwgMCwgMCwgMzQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAzNDgsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDM0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzUwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTEsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDM1MiwgMCwgMCwgMCwgMCwgMCwgMzUzLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzU2LCAwLCAwLCAwLCAwLCAwLCAzNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDM1OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzU5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjAsIDAsIDAsIDAsIDAsIDAsIDM2MSwgMzYyLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAzNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzNjYsIDAsIDAsIDAsIDAsIDAsIDM2NywgMCwgMCwgMCwgMCwgMCwgMCwgMzY4LCAwLCAwLCAwLCAwLCAwLCAzNjksIAotICAgIDM3MCwgMCwgMCwgMCwgMCwgMCwgMzcxLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDM3MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMzc0LCAwLCAwLCAwLCAwLCAwLCAwLCAzNzUsIDAsIDAsIDM3NiwgMCwgMCwgMCwgMzc3LCAwLCAwLCAKLSAgICAzNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDM3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzgwLCAwLCAwLCAwLCAwLCAwLCAzODEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDM4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMzgzLCAwLCAwLCAwLCAwLCAwLCAwLCAzODQsIDAsIDAsIAotICAgIDM4NSwgMCwgMCwgMzg2LCAwLCAwLCAwLCAzODcsIDAsIDAsIDM4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMzg5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzOTAsIDAsIDAsIDAsIDAsIDAsIDM5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMzkyLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NCwgMCwgMCwgMzk1LCAwLCAwLCAwLCAwLCAwLCAwLCAzOTYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDM5NywgMCwgMCwgMCwgMCwgMCwgMCwgMzk4LCAwLCAwLCAwLCAwLCAwLCAwLCAzOTksIDAsIDAsIDQwMCwgMCwgMCwgCi0gICAgMCwgNDAxLCAwLCAwLCA0MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMywgMCwgMCwgMCwgMCwgMCwgMCwgNDA0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNiwgMCwgMCwgMCwgMCwgMCwgMCwgNDA3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0MDgsIDAsIDAsIDQwOSwgMCwgMCwgNDEwLCAwLCAwLCAwLCA0MTEsIDAsIDAsIDQxMiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDEzLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTQsIDAsIDAsIDAsIDAsIDAsIDQxNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDE2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDQxOCwgMCwgMCwgNDE5LCAwLCAwLCA0MjAsIDAsIDAsIDAsIAotICAgIDQyMSwgMCwgMCwgNDIyLCAwLCAwLCA0MjMsIDAsIDAsIDAsIDQyNCwgMCwgMCwgNDI1LCAwLCAwLCAwLCA0MjYsIDAsIDAsIAotICAgIDQyNywgMCwgMCwgMCwgMCwgMCwgMCwgNDI4LCAwLCAwLCAwLCAwLCAwLCA0MjksIDAsIDAsIDAsIDAsIDAsIDAsIDQzMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDMxLCAwLCAwLCA0MzIsIDAsIDAsIDAsIDQzMywgMCwgMCwgNDM0LCAwLCAwLCA0MzUsIDAsIDAsIAotICAgIDAsIDQzNiwgMCwgMCwgNDM3LCAwLCAwLCAwLCA0MzgsIDAsIDAsIDQzOSwgMCwgMCwgNDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MiwgMCwgMCwgMCwgMCwgMCwgMCwgNDQzLCAwLCAwLCAwLCAwLCAwLCA0NDQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ0NSwgMCwgMCwgMCwgMCwgMCwgMCwgNDQ2LCAwLCAwLCA0NDcsIDAsIDAsIDAsIDQ0OCwgMCwgMCwgCi0gICAgNDQ5LCAwLCAwLCA0NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1MSwgMCwgMCwgMCwgMCwgMCwgMCwgNDUyLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0NTMsIDAsIDAsIDAsIDAsIDAsIDQ1NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1NywgMCwgMCwgMCwgMCwgMCwgNDU4LCAwLCAwLCAwLCAwLCAwLCAwLCA0NTksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ2MCwgMCwgMCwgNDYxLCAwLCAwLCAwLCA0NjIsIDAsIDAsIDAsIDAsIDAsIDQ2MywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDY0LCAwLCAwLCA0NjUsIDAsIDAsIDAsIDQ2NiwgMCwgMCwgMCwgMCwgMCwgNDY3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0NjgsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2OSwgMCwgMCwgMCwgMCwgMCwgMCwgNDcwLCAwLCAwLCAwLCAwLCAwLCA0NzEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ3MiwgMCwgMCwgMCwgMCwgMCwgMCwgNDczLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQ3NSwgMCwgMCwgMCwgMCwgMCwgMCwgNDc2LCAwLCAwLCAwLCAwLCAwLCAwLCA0NzcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ3OCwgMCwgMCwgMCwgMCwgMCwgNDc5LCAwLCAwLCAwLCAwLCAwLCAwLCA0ODAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgNDgyLCAwLCAwLCAwLCAwLCAwLCA0ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDg1LCAwLCAwLCAwLCAwLCAwLCAwLCA0ODYsIDAsIDAsIDAsIDAsIDAsIDQ4NywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDg4LCAwLCAwLCAwLCAwLCAwLCAwLCA0ODksIDAsIDAsIDAsIDAsIDAsIDAsIDQ5MCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDkxLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5MywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDk0LCAwLCAwLCAwLCAwLCAwLCA0OTUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NiwgMCwgMCwgMCwgMCwgMCwgMCwgNDk3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0OTgsIDAsIDAsIDAsIDAsIDAsIDQ5OSwgMCwgMCwgMCwgMCwgMCwgMCwgNTAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA1MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMiwgMCwgMCwgMCwgMCwgMCwgNTAzLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA1MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDUwNSwgMCwgMCwgMCwgMCwgMCwgMCwgNTA2LCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwOCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA1MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxMSwgMCwgMCwgMCwgMCwgMCwgNTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE1LCAwLCAwLCAwLCAwLCAwLCA1MTYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDUxNywgMCwgMCwgMCwgMCwgMCwgMCwgNTE4LCAwLCAwLCAwLCAwLCAwLCAwLCA1MTksIDAsIDAsIAotICAgIDAsIDAsIDAsIDUyMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjIsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDUyMywgMCwgMCwgMCwgMCwgMCwgNTI0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MjUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDUyNiwgMCwgMCwgMCwgMCwgMCwgMCwgNTI3LCAwLCAwLCAwLCAwLCAwLCA1MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDUyOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNTMwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzEsIDAsIDAsIDAsIDAsIDAsIDUzMiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNTMzLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNTM2LCAwLCAwLCAwLCAwLCAwLCAwLCA1MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDUzOCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTM5LCAwLCAwLCAwLCAwLCAwLCA1NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0MSwgMCwgMCwgMCwgMCwgMCwgMCwgNTQyLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1NDMsIDAsIDAsIDAsIDAsIDAsIDU0NCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ1LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA1NDYsIDAsIDAsIDAsIDAsIDAsIDAsIDU0NywgMCwgMCwgMCwgMCwgMCwgNTQ4LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA1NDksIDAsIDAsIDAsIDAsIDAsIDAsIDU1MCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUxLCAwLCAwLCAwLCAwLCAwLCA1NTIsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU1MywgMCwgMCwgMCwgMCwgMCwgMCwgNTU0LCAwLCAwLCAwLCAwLCAwLCAwLCA1NTUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwLCAwLCAwLCAxMSwgMCwgMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzLCAxNCwgCisgICAgMTUsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxLCAzMiwgMzMsIDAsIDAsIDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAwLCAKKyAgICA1MCwgMCwgNTEsIDUyLCA1MywgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDU1LCA1NiwgNTcsIDU4LCA1OSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNjAsIDYxLCAwLCAwLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjMsIDY0LCA2NSwgMCwgCisgICAgNjYsIDY3LCA2OCwgMCwgMCwgMCwgMCwgMCwgMCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDc2LCAwLCA3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgsIDc5LCAwLCA4MCwgODEsIDgyLCAKKyAgICA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQsIDg1LCA4NiwgMCwgODcsIDg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA4OSwgOTAsIDAsIDkxLCA5MiwgOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAxLCAwLCAwLCAxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMywgCisgICAgMTA0LCAwLCAwLCAxMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTA3LCAxMDgsIDEwOSwgMCwgMTEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTEsIDExMiwgCisgICAgMCwgMTEzLCAxMTQsIDAsIDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyLCAwLCAwLCAxMjMsIDAsIDEyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1LCAKKyAgICAxMjYsIDEyNywgMTI4LCAwLCAxMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgMCwgMTMxLCAxMzIsIDEzMywgCisgICAgMTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQzLCAxNDQsIDE0NSwgMTQ2LCAwLCAKKyAgICAxNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksIDE2MCwgMTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjIsIAorICAgIDAsIDE2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY0LCAwLCAwLCAxNjUsIDE2NiwgMTY3LCAwLCAxNjgsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE2OSwgMCwgMCwgMTcwLCAxNzEsIDE3MiwgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNzQsIDE3NSwgMCwgMCwgMTc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzcsIDE3OCwgMTc5LCAxODAsIDAsIDE4MSwgCisgICAgMTgyLCAxODMsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAwLCAxODksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE5MCwgMTkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOTIsIDE5MywgMTk0LCAKKyAgICAxOTUsIDE5NiwgMTk3LCAxOTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5OSwgMjAwLCAyMDEsIDAsIDIwMiwgMjAzLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNywgMCwgMCwgMCwgCisgICAgMjE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTksIDIyMCwgMjIxLCAyMjIsIDAsIDIyMywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjUsIDIyNiwgMjI3LCAwLCAKKyAgICAyMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyOSwgMjMwLCAyMzEsIDAsIDIzMiwgMCwgMjMzLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyMzQsIDIzNSwgMCwgMCwgMCwgMCwgMCwgMjM2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMzcsIDIzOCwgMjM5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDI0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NCwgMjQ1LCAyNDYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjQ4LCAyNDksIDI1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUxLCAyNTIsIDI1MywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNTUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1NiwgMjU3LCAwLCAyNTgsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI1OSwgMjYwLCAyNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjY2LCAyNjcsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzAsIDI3MSwgMjcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAyNzMsIDI3NCwgMjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc4LCAyNzksIAorICAgIDAsIDI4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgxLCAyODIsIDI4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjg0LCAyODUsIDI4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjg3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODgsIDI4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkzLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyOTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5OCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAzMDMsIDAsIDAsIDMwNCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMzA1LCAzMDYsIDMwNywgMCwgMzA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDksIAorICAgIDMxMCwgMzExLCAwLCAzMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMywgMCwgMzE0LCAwLCAzMTUsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDMxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAzMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMzI2LCAzMjcsIDAsIDMyOCwgMzI5LCAwLCAwLCAzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzMSwgMCwgCisgICAgMCwgMzMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzMsIDMzNCwgMCwgMCwgMzM1LCAwLCAwLCAwLCAzMzYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDMzNywgMzM4LCAzMzksIDAsIDM0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQxLCAwLCAwLCAKKyAgICAzNDIsIDM0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAzNDUsIDM0NiwgMzQ3LCAwLCAzNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0OSwgMCwgMCwgMCwgCisgICAgMzUwLCAwLCAwLCAzNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MiwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUzLCAwLCAwLCAwLCAwLCAwLCAzNTQsIDM1NSwgMzU2LCAwLCAzNTcsIDAsIAorICAgIDAsIDM1OCwgMzU5LCAwLCAwLCAwLCAwLCAwLCAzNjAsIDAsIDAsIDAsIDM2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzYyLCAwLCAwLCAzNjMsIDM2NCwgMCwgMCwgMzY1LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjYsIDM2NywgMCwgMzY4LCAwLCAwLCAKKyAgICAwLCAzNjksIDAsIDAsIDAsIDAsIDAsIDM3MCwgMzcxLCAwLCAwLCAzNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDM3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzc0LCAzNzUsIDM3NiwgMzc3LCAzNzgsIDAsIDAsIAorICAgIDM3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzgwLCAwLCAwLCAzODEsIDAsIDAsIDAsIDM4MiwgMCwgMCwgMCwgMCwgMCwgMzgzLCAKKyAgICAzODQsIDAsIDAsIDAsIDAsIDAsIDM4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMzg2LCAwLCAwLCAwLCAwLCAwLCAwLCAzODcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMzg5LCAzOTAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMzkyLCAzOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMzk1LCAzOTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAzOTksIDQwMCwgNDAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA0LCAKKyAgICA0MDUsIDQwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEwLCA0MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEzLCA0MTQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTcsIDQxOCwgNDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyMSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIyLCA0MjMsIDQyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA0MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzMywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA0MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQzLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQ2LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0OCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1MSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTMsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDU1LCA0NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1NywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjIsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2OSwgMCwgCisgICAgNDcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDQ3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDczLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc2LCA0NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDg1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA0ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ5MywgMCwgMCwgMCwgMCwgMCwgMCwgNDk0LCAwLCAwLCAwLCAwLCAwLCAwLCA0OTUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0OTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5OSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDEsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMiwgMCwgMCwgMCwgMCwgMCwgMCwgNTAzLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwNSwgCisgICAgNTA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDUwOCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA5LCAwLCAwLCAwLCAwLCAwLCAwLCA1MTAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDUxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTE4LCAwLCAwLCAwLCAwLCAwLCAwLCA1MTksIDAsIDAsIDAsIDAsIDAsIDAsIDUyMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDUyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyNiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI3LCAwLCAwLCAwLCAwLCAwLCAwLCA1MjgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDUyOSwgMCwgMCwgMCwgMCwgMCwgMCwgNTMwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUzMiwgNTMzLCAwLCAwLCAwLCAwLCAwLCA1MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTM2LCAwLCAwLCAwLCAwLCAwLCAwLCA1MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzOCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM5LCA1NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDU0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA1NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDU0NCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ1LCAwLCAwLCAwLCAwLCAwLCA1NDYsIAorICAgIDU0NywgMCwgMCwgMCwgMCwgMCwgNTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCA1NDksIDAsIDAsIDAsIDAsIDAsIDAsIDU1MCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNTUxLCAwLCAwLCAwLCAwLCAwLCAwLCA1NTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDU1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1NiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NTgsIDAsIDAsIDAsIDAsIDAsIDU1OSwgMCwgMCwgMCwgMCwgMCwgMCwgNTYwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDU2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTYzLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDU2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2OCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA1NzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNTcyLCAwLCAwLCAwLCAwLCAwLCA1NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA1NzYsIDAsIDAsIDAsIDAsIDAsIDU3NywgNTc4LCAwLCAwLCAwLCAwLCAwLCA1NzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA1ODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NiwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNTkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDU5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTk2LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5OCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA2MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwMSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDMsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNjA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDYwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjA4LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA2MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDYyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI2LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDYyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA2MzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzMSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2MzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNjM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzYsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzksIDY0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDY0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQ3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA2NTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1MiwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNjU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjAsIDY2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjY1LCA2NjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjksIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDY3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjc0LCAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjb21wX2RhdGFbXSA9IHsKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODE0LCAwLCAwLCAwLCAwLCAwLCA4ODAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODE1LCAwLCAwLCAxOTIsIDE5MywgMTk0LCAxOTUsIDI1NiwgMjU4LCA1NTAsIAotICAgIDE5NiwgNzg0MiwgMTk3LCAwLCA0NjEsIDUxMiwgNTE0LCAwLCAwLCAwLCA3ODQwLCAwLCA3NjgwLCAwLCAwLCAyNjAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2ODIsIDAsIDAsIDc2ODQsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc2ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MiwgMjY0LCAwLCAwLCAwLCAyNjYsIAotICAgIDAsIDAsIDAsIDAsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTk5LCAwLCAwLCAwLCAwLCAwLCAwLCA3NjkwLCAKLSAgICAwLCAwLCAwLCAwLCAyNzAsIDAsIDAsIDAsIDAsIDAsIDc2OTIsIDAsIDAsIDAsIDc2OTYsIDAsIDc2OTgsIDAsIDAsIDc2OTQsIAotICAgIDAsIDAsIDAsIDIwMCwgMjAxLCAyMDIsIDc4NjgsIDI3NCwgMjc2LCAyNzgsIDIwMywgNzg2NiwgMCwgMCwgMjgyLCA1MTYsIAotICAgIDUxOCwgMCwgMCwgMCwgNzg2NCwgMCwgMCwgMCwgNTUyLCAyODAsIDc3MDQsIDAsIDc3MDYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc3MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMCwgMjg0LCAwLCA3NzEyLCAyODYsIDI4OCwgMCwgCi0gICAgMCwgMCwgMCwgNDg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDI5MiwgMCwgMCwgMCwgNzcxNCwgNzcxOCwgMCwgMCwgMCwgNTQyLCAwLCAwLCAwLCAwLCAwLCA3NzE2LCAwLCAwLCAwLCAKLSAgICA3NzIwLCAwLCAwLCA3NzIyLCAwLCAwLCAwLCAwLCAwLCAyMDQsIDIwNSwgMjA2LCAyOTYsIDI5OCwgMzAwLCAzMDQsIDIwNywgCi0gICAgNzg4MCwgMCwgMCwgNDYzLCA1MjAsIDUyMiwgMCwgMCwgMCwgNzg4MiwgMCwgMCwgMCwgMCwgMzAyLCAwLCAwLCA3NzI0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAzMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3MjgsIDAsIDQ4OCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzczMCwgMCwgMCwgMCwgMzEwLCAwLCAwLCAwLCAwLCA3NzMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAzMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNywgMCwgMCwgMCwgMCwgMCwgNzczNCwgMCwgCi0gICAgMCwgMCwgMzE1LCAwLCA3NzQwLCAwLCAwLCA3NzM4LCAwLCAwLCAwLCAwLCA3NzQyLCAwLCAwLCAwLCAwLCA3NzQ0LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzQ2LCAwLCAwLCAwLCAwLCA1MDQsIDMyMywgMCwgMjA5LCAwLCAwLCA3NzQ4LCAKLSAgICAwLCAwLCAwLCAwLCAzMjcsIDAsIDAsIDAsIDAsIDAsIDc3NTAsIDAsIDAsIDAsIDMyNSwgMCwgNzc1NCwgMCwgMCwgNzc1MiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEwLCAyMTEsIDIxMiwgMjEzLCAzMzIsIDMzNCwgNTU4LCAyMTQsIAotICAgIDc4ODYsIDAsIDMzNiwgNDY1LCA1MjQsIDUyNiwgMCwgMCwgNDE2LCA3ODg0LCAwLCAwLCAwLCAwLCA0OTAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDc3NjQsIDAsIDAsIDAsIDAsIDc3NjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MCwgMCwgMCwgCi0gICAgMCwgMCwgNzc2OCwgMCwgMCwgMCwgMCwgMzQ0LCA1MjgsIDUzMCwgMCwgMCwgMCwgNzc3MCwgMCwgMCwgMCwgMzQyLCAwLCAwLCAKLSAgICAwLCAwLCA3Nzc0LCAwLCAwLCAwLCAwLCAzNDYsIDM0OCwgMCwgMCwgMCwgNzc3NiwgMCwgMCwgMCwgMCwgMzUyLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3Nzc4LCAwLCAwLCA1MzYsIDM1MCwgMCwgMCwgMCwgMCwgMCwgMCwgNzc4NiwgMCwgMCwgMCwgMCwgMzU2LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA3Nzg4LCAwLCAwLCA1MzgsIDM1NCwgMCwgNzc5MiwgMCwgMCwgNzc5MCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMjE3LCAyMTgsIDIxOSwgMzYwLCAzNjIsIDM2NCwgMCwgMjIwLCA3OTEwLCAzNjYsIDM2OCwgCi0gICAgNDY3LCA1MzIsIDUzNCwgMCwgMCwgNDMxLCA3OTA4LCA3Nzk0LCAwLCAwLCAwLCAzNzAsIDc3OTgsIDAsIDc3OTYsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDc4MDQsIDAsIDAsIDAsIDAsIDAsIDc4MDYsIDAsIDAsIDAsIDAsIDc4MDgsIDc4MTAsIDM3MiwgMCwgCi0gICAgMCwgMCwgNzgxNCwgNzgxMiwgMCwgNzgxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgxOCwgNzgyMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNzkyMiwgMjIxLCAzNzQsIDc5MjgsIDU2MiwgMCwgNzgyMiwgMzc2LCA3OTI2LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3OTI0LCAwLCAwLCAwLCAwLCAwLCAzNzcsIDc4MjQsIDAsIDAsIDAsIDM3OSwgMCwgMCwgMCwgMCwgCi0gICAgMzgxLCAwLCAwLCAwLCAwLCAwLCA3ODI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODI4LCAwLCAwLCAwLCAyMjQsIAotICAgIDIyNSwgMjI2LCAyMjcsIDI1NywgMjU5LCA1NTEsIDIyOCwgNzg0MywgMjI5LCAwLCA0NjIsIDUxMywgNTE1LCAwLCAwLCAwLCAKLSAgICA3ODQxLCAwLCA3NjgxLCAwLCAwLCAyNjEsIDAsIDAsIDAsIDAsIDAsIDc2ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDc2ODUsIDc2ODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MywgMjY1LCAwLCAwLCAwLCAKLSAgICAyNjcsIDAsIDAsIDAsIDAsIDI2OSwgMCwgMjMxLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjkxLCAwLCAwLCAwLCAwLCAyNzEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc2OTMsIDAsIDAsIDAsIDc2OTcsIDAsIDc2OTksIDAsIDAsIDc2OTUsIDAsIDAsIDAsIDIzMiwgMjMzLCAKLSAgICAyMzQsIDc4NjksIDI3NSwgMjc3LCAyNzksIDIzNSwgNzg2NywgMCwgMCwgMjgzLCA1MTcsIDUxOSwgMCwgMCwgMCwgNzg2NSwgCi0gICAgMCwgMCwgMCwgNTUzLCAyODEsIDc3MDUsIDAsIDc3MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3MTEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMSwgMjg1LCAwLCA3NzEzLCAyODcsIDI4OSwgMCwgMCwgMCwgMCwgNDg3LCAwLCAKLSAgICAyOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MywgMCwgMCwgMCwgNzcxNSwgNzcxOSwgMCwgMCwgMCwgCi0gICAgNTQzLCAwLCAwLCAwLCAwLCAwLCA3NzE3LCAwLCAwLCAwLCA3NzIxLCAwLCAwLCA3NzIzLCAwLCA3ODMwLCAwLCAwLCAwLCAKLSAgICAyMzYsIDIzNywgMjM4LCAyOTcsIDI5OSwgMzAxLCAwLCAyMzksIDc4ODEsIDAsIDAsIDQ2NCwgNTIxLCA1MjMsIDAsIDAsIDAsIAotICAgIDc4ODMsIDAsIDAsIDAsIDAsIDMwMywgMCwgMCwgNzcyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMzA5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3MjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ4OSwgMCwgMCwgMCwgMCwgMCwgNzczMSwgMCwgMCwgMCwgMzExLCAwLCAwLCAwLCAwLCA3NzMzLCAwLCAwLCAwLCAKLSAgICAwLCAzMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxOCwgMCwgMCwgMCwgMCwgMCwgNzczNSwgMCwgMCwgMCwgCi0gICAgMzE2LCAwLCA3NzQxLCAwLCAwLCA3NzM5LCAwLCAwLCAwLCAwLCA3NzQzLCAwLCAwLCAwLCAwLCA3NzQ1LCAwLCAwLCA3NzQ3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDUsIDMyNCwgMCwgMjQxLCAwLCAwLCA3NzQ5LCAwLCAwLCAKLSAgICAwLCAwLCAzMjgsIDAsIDAsIDAsIDAsIDAsIDc3NTEsIDAsIDAsIDAsIDMyNiwgMCwgNzc1NSwgMCwgMCwgNzc1MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAzMzMsIDMzNSwgNTU5LCAyNDYsIDc4ODcsIAotICAgIDAsIDMzNywgNDY2LCA1MjUsIDUyNywgMCwgMCwgNDE3LCA3ODg1LCAwLCAwLCAwLCAwLCA0OTEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDc3NjUsIDAsIDAsIDAsIDAsIDc3NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MSwgMCwgMCwgMCwgMCwgCi0gICAgNzc2OSwgMCwgMCwgMCwgMCwgMzQ1LCA1MjksIDUzMSwgMCwgMCwgMCwgNzc3MSwgMCwgMCwgMCwgMzQzLCAwLCAwLCAwLCAwLCAKLSAgICA3Nzc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDcsIDM0OSwgMCwgMCwgMCwgNzc3NywgMCwgMCwgCi0gICAgMCwgMCwgMzUzLCAwLCAwLCAwLCAwLCAwLCA3Nzc5LCAwLCAwLCA1MzcsIDM1MSwgMCwgMCwgMCwgMCwgMCwgMCwgNzc4NywgCi0gICAgNzgzMSwgMCwgMCwgMCwgMzU3LCAwLCAwLCAwLCAwLCAwLCA3Nzg5LCAwLCAwLCA1MzksIDM1NSwgMCwgNzc5MywgMCwgMCwgCi0gICAgNzc5MSwgMCwgMCwgMCwgMjQ5LCAyNTAsIDI1MSwgMzYxLCAzNjMsIDM2NSwgMCwgMjUyLCA3OTExLCAzNjcsIDM2OSwgNDY4LCAKLSAgICA1MzMsIDUzNSwgMCwgMCwgNDMyLCA3OTA5LCA3Nzk1LCAwLCAwLCAwLCAzNzEsIDc3OTksIDAsIDc3OTcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDc4MDUsIDAsIDAsIDAsIDAsIDAsIDc4MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc4MDksIDc4MTEsIDM3MywgMCwgMCwgMCwgNzgxNSwgNzgxMywgMCwgNzgzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgxNywgCi0gICAgMCwgMCwgNzgxOSwgNzgyMSwgMCwgMCwgMCwgMCwgMCwgMCwgNzkyMywgMjUzLCAzNzUsIDc5MjksIDU2MywgMCwgNzgyMywgCi0gICAgMjU1LCA3OTI3LCA3ODMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTI1LCAwLCAwLCAwLCAwLCAwLCAzNzgsIDc4MjUsIDAsIAotICAgIDAsIDAsIDM4MCwgMCwgMCwgMCwgMCwgMzgyLCAwLCAwLCAwLCAwLCAwLCA3ODI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3ODI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTczLCA5MDEsIDAsIDAsIDgxMjksIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDc4NDYsIDc4NDQsIDAsIDc4NTAsIDAsIDAsIDAsIDAsIDc4NDgsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ3OCwgMCwgMCwgNTA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDgsIDAsIAotICAgIDAsIDQ4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzY4OCwgMCwgMCwgMCwgMCwgNzg3MiwgNzg3MCwgMCwgCi0gICAgNzg3NiwgMCwgMCwgMCwgMCwgNzg3NCwgMCwgMCwgMCwgMCwgMCwgMCwgNzcyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzg5MCwgNzg4OCwgMCwgNzg5NCwgMCwgMCwgMCwgMCwgNzg5MiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzc1NiwgMCwgMCwgNTU2LCAwLCAwLCA3NzU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NTQsIDAsIDAsIAotICAgIDUxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc1LCA0NzEsIDAsIDAsIDQ2OSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODQ3LCA3ODQ1LCAwLCA3ODUxLCAwLCAwLCAwLCAwLCAKLSAgICA3ODQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzksIDAsIDAsIDUwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNTA5LCAwLCAwLCA0ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2ODksIDAsIDAsIAotICAgIDAsIDAsIDc4NzMsIDc4NzEsIDAsIDc4NzcsIDAsIDAsIDAsIDAsIDc4NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDc3MjcsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4OTEsIDc4ODksIDAsIDc4OTUsIDAsIDAsIDAsIDAsIDc4OTMsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDc3NTcsIDAsIDAsIDU1NywgMCwgMCwgNzc1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNTU1LCAwLCAwLCA1MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3NiwgNDcyLCAwLCAwLCAKLSAgICA0NzAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg1NiwgNzg1NCwgMCwgCi0gICAgNzg2MCwgMCwgMCwgMCwgMCwgNzg1OCwgMCwgMCwgMCwgMCwgMCwgNzg1NywgNzg1NSwgMCwgNzg2MSwgMCwgMCwgMCwgMCwgCi0gICAgNzg1OSwgMCwgMCwgMCwgMCwgMCwgNzcwMCwgNzcwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzcwMSwgNzcwMywgMCwgMCwgMCwgMCwgNzc2MCwgNzc2MiwgMCwgMCwgMCwgMCwgNzc2MSwgNzc2MywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNzc4MCwgMCwgMCwgMCwgMCwgMCwgNzc4MSwgMCwgMCwgMCwgMCwgMCwgNzc4MiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzc4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzgwMSwgMCwgMCwgMCwgNzgwMiwgMCwgMCwgMCwgMCwgMCwgNzgwMywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNzgzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkwMCwgNzg5OCwgMCwgNzkwNCwgMCwgMCwgCi0gICAgMCwgMCwgNzkwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkwNiwgMCwgMCwgMCwgMCwgNzkwMSwgNzg5OSwgMCwgCi0gICAgNzkwNSwgMCwgMCwgMCwgMCwgNzkwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkwNywgMCwgMCwgMCwgMCwgNzkxNCwgCi0gICAgNzkxMiwgMCwgNzkxOCwgMCwgMCwgMCwgMCwgNzkxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkyMCwgMCwgMCwgMCwgCi0gICAgMCwgNzkxNSwgNzkxMywgMCwgNzkxOSwgMCwgMCwgMCwgMCwgNzkxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkyMSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk0LCAwLCAwLCAwLCAwLCAwLCAwLCA0OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ5MywgMCwgMCwgMCwgMCwgMCwgNDgwLCAwLCAwLCAwLCAwLCAwLCA0ODEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc3MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3MDksIDAsIDAsIDAsIDAsIDU2MCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTUsIDAsIDAsIDgxMjIsIAotICAgIDkwMiwgMCwgMCwgODEyMSwgODEyMCwgNzk0NCwgNzk0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODEyNCwgODEzNiwgOTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTYwLCA3OTYxLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA4MTM4LCA5MDUsIDAsIDAsIDAsIDAsIDc5NzYsIDc5NzcsIDAsIDAsIDAsIDAsIDAsIDgxNDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDgxNTQsIDkwNiwgMCwgMCwgODE1MywgODE1MiwgMCwgOTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3OTkyLCA3OTkzLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTg0LCA5MDgsIDAsIDAsIDAsIDAsIDgwMDgsIDgwMDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDgxNzAsIDkxMCwgMCwgMCwgCi0gICAgODE2OSwgODE2OCwgMCwgOTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDI1LCAwLCAwLCAwLCAwLCAwLCAwLCA4MTg2LCAKLSAgICA5MTEsIDAsIDAsIDAsIDAsIDgwNDAsIDgwNDEsIDAsIDAsIDAsIDAsIDAsIDgxODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDgxMTYsIDAsIDAsIDAsIDAsIDAsIDgxMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNDgsIAotICAgIDk0MCwgMCwgMCwgODExMywgODExMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkzNiwgNzkzNywgMCwgMCwgMCwgMCwgCi0gICAgODExOCwgODExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODA1MCwgOTQxLCAwLCAwLCAwLCAwLCA3OTUyLCA3OTUzLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA4MDUyLCA5NDIsIDAsIDAsIDAsIDAsIDc5NjgsIDc5NjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDgxMzQsIDgxMzEsIDgwNTQsIDk0MywgMCwgMCwgODE0NSwgODE0NCwgMCwgOTcwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3OTg0LCA3OTg1LCAwLCAwLCAwLCAwLCA4MTUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDU2LCA5NzIsIAotICAgIDAsIDAsIDAsIDAsIDgwMDAsIDgwMDEsIDAsIDAsIDAsIDAsIDgxNjQsIDgxNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNTgsIAotICAgIDk3MywgMCwgMCwgODE2MSwgODE2MCwgMCwgOTcxLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDE2LCA4MDE3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTY2LCAwLCA4MDYwLCA5NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDgwMzIsIDgwMzMsIDAsIDAsIDAsIDAsIDgxODIsIDgxNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxNDYsIAotICAgIDkxMiwgMCwgMCwgODE1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODE2MiwgOTQ0LCAwLCAwLCA4MTY3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTgwLCAwLCA5NzksIDAsIDAsIDAsIDAsIDAsIDk4MCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTAzMSwgMCwgMCwgMCwgMTIzMiwgMCwgMTIzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyNywgMCwgCi0gICAgMCwgMCwgMCwgMTAyNCwgMCwgMCwgMCwgMCwgMTIzOCwgMCwgMTAyNSwgMCwgMCwgMCwgMTIxNywgMCwgMTI0NCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMTAzNywgMCwgMCwgMCwgMTI1MCwgMTA0OSwgMCwgMTI1MiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTAzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1NCwgMCwgMCwgCi0gICAgMTI2MiwgMTAzOCwgMCwgMTI2NCwgMCwgMCwgMTI2NiwgMCwgMCwgMTI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTI3MiwgMCwgMCwgMCwgMCwgMCwgMTI2MCwgMCwgMCwgMCwgMTIzMywgMCwgMTIzNSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTEwNywgMCwgMCwgMCwgMCwgMTEwNCwgMCwgMCwgMCwgMCwgMTIzOSwgMCwgMTEwNSwgMCwgMCwgMCwgCi0gICAgMTIxOCwgMCwgMTI0NSwgMCwgMCwgMCwgMCwgMCwgMTI0NywgMCwgMCwgMCwgMCwgMCwgMCwgMTExNywgMCwgMCwgMCwgCi0gICAgMTI1MSwgMTA4MSwgMCwgMTI1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTExNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI1NSwgMCwgMCwgMTI2MywgMTExOCwgMCwgMTI2NSwgMCwgMCwgMTI2NywgMCwgMCwgMTI2OSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MywgMCwgMCwgMCwgMCwgMCwgMTI2MSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTExMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0MiwgMCwgMCwgMCwgMCwgMCwgMTE0MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MiwgMCwgMCwgMCwgMCwgMCwgMTI0MywgMCwgMCwgMCwgMCwgMCwgMTI1OCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1OSwgMCwgMCwgMCwgMCwgMTU3MCwgMTU3MSwgMTU3MywgMCwgCi0gICAgMCwgMCwgMCwgMTU3MiwgMCwgMCwgMCwgMCwgMCwgMTU3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTczMCwgMCwgMCwgMCwgMCwgMCwgMTc0NywgMCwgMCwgMCwgMCwgMCwgMTcyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjM0NSwgMCwgMCwgMCwgMCwgMCwgMjM1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM1NiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMjUwNywgMjUwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMjg5MSwgMjg4OCwgMjg5MiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjk2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAxOCwgMzAyMCwgMCwgCi0gICAgMCwgMCwgMCwgMzAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI2NCwgMCwgCi0gICAgMCwgMCwgMCwgMzI3NCwgMzI3MSwgMzI3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI3NSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMzQwMiwgMzQwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQwMywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU0NiwgMzU0OCwgMzU1MCwgMCwgMCwgMCwgMzU0OSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDEzNCwgMCwgMCwgMCwgMCwgMCwgMCwgNjkxOCwgMCwgMCwgMCwgMCwgMCwgNjkyMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjkyMiwgMCwgMCwgMCwgMCwgMCwgNjkyNCwgMCwgMCwgMCwgMCwgMCwgNjkyNiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNjkzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjk3MSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNjk3MywgMCwgMCwgMCwgMCwgMCwgNjk3NiwgMCwgMCwgMCwgMCwgMCwgNjk3NywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjk3OSwgMCwgMCwgMCwgMCwgMCwgMCwgNzczNiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzczNywgMCwgMCwgMCwgMCwgMCwgNzc3MiwgMCwgMCwgMCwgMCwgMCwgNzc3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzc4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzc4NSwgMCwgNzg1MiwgMCwgMCwgNzg2MiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg1MywgMCwgMCwgNzg2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNzg3OCwgMCwgMCwgMCwgMCwgMCwgNzg3OSwgMCwgMCwgMCwgMCwgMCwgNzg5NiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg5NywgMCwgMCwgMCwgNzkzOCwgNzk0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNzk0MiwgODA2NCwgNzkzOSwgNzk0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk0MywgODA2NSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgODA2NiwgMCwgMCwgMCwgMCwgMCwgODA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgODA2OCwgMCwgMCwgMCwgMCwgMCwgODA2OSwgMCwgMCwgMCwgMCwgMCwgODA3MCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODA3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk0NiwgNzk0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzk1MCwgODA3MiwgNzk0NywgNzk0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk1MSwgODA3MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgODA3NCwgMCwgMCwgMCwgMCwgMCwgODA3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgODA3NiwgMCwgMCwgMCwgMCwgMCwgODA3NywgMCwgMCwgMCwgMCwgMCwgODA3OCwgMCwgMCwgMCwgMCwgMCwgODA3OSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk1NCwgNzk1NiwgMCwgMCwgMCwgMCwgNzk1NSwgNzk1NywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk2MiwgNzk2NCwgMCwgMCwgMCwgMCwgNzk2MywgNzk2NSwgMCwgMCwgMCwgMCwgCi0gICAgNzk3MCwgNzk3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk3NCwgODA4MCwgNzk3MSwgNzk3MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk3NSwgODA4MSwgMCwgMCwgMCwgMCwgMCwgODA4MiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODA4NCwgMCwgMCwgMCwgMCwgMCwgODA4NSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgODA4NiwgMCwgMCwgMCwgMCwgMCwgODA4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk3OCwgCi0gICAgNzk4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk4MiwgODA4OCwgNzk3OSwgNzk4MSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNzk4MywgODA4OSwgMCwgMCwgMCwgMCwgMCwgODA5MCwgMCwgMCwgMCwgMCwgMCwgODA5MSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODA5MiwgMCwgMCwgMCwgMCwgMCwgODA5MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgODA5NCwgMCwgMCwgMCwgMCwgMCwgODA5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk4NiwgNzk4OCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk5MCwgMCwgNzk4NywgNzk4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzk5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk5NCwgNzk5NiwgMCwgMCwgNzk5OCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk5NSwgNzk5NywgMCwgMCwgNzk5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODAwMiwgODAwNCwgMCwgMCwgMCwgMCwgODAwMywgODAwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODAxMCwgODAxMiwgMCwgMCwgMCwgMCwgODAxMSwgODAxMywgMCwgMCwgMCwgMCwgODAxOCwgODAyMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgODAyMiwgMCwgODAxOSwgODAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAyNywgODAyOSwgMCwgMCwgODAzMSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgODAzNCwgODAzNiwgMCwgMCwgODAzOCwgODA5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAzNSwgCi0gICAgODAzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAzOSwgODA5NywgMCwgMCwgMCwgMCwgMCwgODA5OCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgODA5OSwgMCwgMCwgMCwgMCwgMCwgODEwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODEwMSwgMCwgMCwgMCwgMCwgMCwgODEwMiwgMCwgMCwgMCwgMCwgMCwgODEwMywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODA0MiwgODA0NCwgMCwgMCwgODA0NiwgODEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODA0MywgODA0NSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODA0NywgODEwNSwgMCwgMCwgMCwgMCwgMCwgODEwNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODEwNywgMCwgMCwgMCwgMCwgMCwgODEwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODEwOSwgMCwgMCwgMCwgMCwgMCwgODExMCwgMCwgMCwgMCwgMCwgMCwgODExMSwgMCwgMCwgMCwgMCwgMCwgODExNCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEzMCwgMCwgMCwgMCwgMCwgMCwgODE3OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODExOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODE0MSwgODE0MiwgMCwgMCwgODE0MywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEzNSwgMCwgMCwgMCwgMCwgMCwgODE4MywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgODE1NywgODE1OCwgMCwgMCwgODE1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODYwMiwgMCwgMCwgMCwgMCwgMCwgODYwMywgMCwgMCwgMCwgMCwgMCwgODYyMiwgMCwgMCwgMCwgMCwgMCwgODY1MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODY1NSwgMCwgMCwgMCwgMCwgMCwgODY1NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODcwOCwgMCwgMCwgMCwgMCwgMCwgODcxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODcxNiwgMCwgMCwgMCwgMCwgMCwgODc0MCwgMCwgMCwgMCwgMCwgMCwgODc0MiwgMCwgMCwgMCwgMCwgMCwgODc2OSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODc3MiwgMCwgMCwgMCwgMCwgMCwgODc3NSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODc3NywgMCwgMCwgMCwgMCwgMCwgODgxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODgwMiwgMCwgMCwgMCwgMCwgMCwgODgxNiwgMCwgMCwgMCwgMCwgMCwgODgxNywgMCwgMCwgMCwgMCwgMCwgODgyMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODgyMSwgMCwgMCwgMCwgMCwgMCwgODgyNCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODgyNSwgMCwgMCwgMCwgMCwgMCwgODgzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODgzMywgMCwgMCwgMCwgMCwgMCwgODkyOCwgMCwgMCwgMCwgMCwgMCwgODkyOSwgMCwgMCwgMCwgMCwgMCwgODgzNiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODgzNywgMCwgMCwgMCwgMCwgMCwgODg0MCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODg0MSwgMCwgMCwgMCwgMCwgMCwgODkzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODkzMSwgMCwgMCwgMCwgMCwgMCwgODg3NiwgMCwgMCwgMCwgMCwgMCwgODg3NywgMCwgMCwgMCwgMCwgMCwgODg3OCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg3OSwgMCwgMCwgMCwgMCwgMCwgODkzOCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODkzOSwgMCwgMCwgMCwgMCwgMCwgODk0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODk0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MzYsIDAsIDAsIDAsIDAsIDAsIDEyMzY0LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjM2NiwgMCwgMCwgMCwgMCwgMCwgMTIzNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMzcwLCAwLCAwLCAwLCAwLCAwLCAxMjM3MiwgMCwgMCwgMCwgMCwgMCwgMTIzNzQsIDAsIDAsIDAsIDAsIDAsIDEyMzc2LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM3OCwgMCwgMCwgMCwgMCwgMCwgMTIzODAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyMzgyLCAwLCAwLCAwLCAwLCAwLCAxMjM4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTIzODYsIDAsIDAsIDAsIDAsIDAsIDEyMzg5LCAwLCAwLCAwLCAwLCAwLCAxMjM5MSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIzOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDAwLCAxMjQwMSwgMCwgMCwgMCwgMCwgCi0gICAgMTI0MDMsIDEyNDA0LCAwLCAwLCAwLCAwLCAxMjQwNiwgMTI0MDcsIDAsIDAsIDAsIDAsIDEyNDA5LCAxMjQxMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MTIsIDEyNDEzLCAwLCAwLCAwLCAwLCAxMjQ0NiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTI1MzIsIDAsIDAsIDAsIDAsIDAsIDEyNDYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjQ2MiwgMCwgMCwgMCwgMCwgMCwgMTI0NjQsIDAsIDAsIDAsIDAsIDAsIDEyNDY2LCAwLCAwLCAwLCAwLCAwLCAxMjQ2OCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0NzAsIDAsIDAsIDAsIDAsIDAsIDEyNDcyLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMjQ3NCwgMCwgMCwgMCwgMCwgMCwgMTI0NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyNDc4LCAwLCAwLCAwLCAwLCAwLCAxMjQ4MCwgMCwgMCwgMCwgMCwgMCwgMTI0ODIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyNDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQ4NywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI0ODksIDAsIDAsIDAsIDAsIDAsIDEyNDk2LCAxMjQ5NywgMCwgMCwgMCwgMCwgMTI0OTksIDEyNTAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjUwMiwgMTI1MDMsIDAsIDAsIDAsIDAsIDEyNTA1LCAxMjUwNiwgMCwgMCwgMCwgCi0gICAgMCwgMTI1MDgsIDEyNTA5LCAwLCAwLCAwLCAwLCAxMjUzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTI1MzYsIDAsIDAsIDAsIDAsIDAsIDEyNTM3LCAwLCAwLCAwLCAwLCAwLCAxMjUzOCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI1NDIsIDAsIAorc3RhdGljIHVuc2lnbmVkIGludCBjb21wX2RhdGFbXSA9IHsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODE0LCAwLCAwLCA4ODAwLCAwLCAwLCA4ODE1LCAwLCAwLCAwLCAxOTIsIDE5MywgCisgICAgMTk0LCAxOTUsIDI1NiwgMjU4LCA1NTAsIDE5NiwgNzg0MiwgMTk3LCAwLCA0NjEsIDUxMiwgNTE0LCAwLCAwLCAwLCA3ODQwLCAKKyAgICAwLCA3NjgwLCAwLCAwLCAyNjAsIDAsIDAsIDc2ODIsIDAsIDAsIDc2ODQsIDAsIDAsIDAsIDAsIDc2ODYsIDAsIDI2MiwgCisgICAgMjY0LCAwLCAwLCAwLCAyNjYsIDAsIDAsIDAsIDAsIDI2OCwgMCwgMTk5LCAwLCAwLCAwLCA3NjkwLCAwLCAwLCAwLCAwLCAKKyAgICAyNzAsIDAsIDAsIDAsIDAsIDAsIDc2OTIsIDAsIDAsIDAsIDc2OTYsIDAsIDc2OTgsIDAsIDAsIDc2OTQsIDAsIDAsIDAsIDAsIAorICAgIDIwMCwgMjAxLCAyMDIsIDc4NjgsIDI3NCwgMjc2LCAyNzgsIDIwMywgNzg2NiwgMCwgMCwgMjgyLCA1MTYsIDUxOCwgMCwgMCwgCisgICAgMCwgNzg2NCwgMCwgMCwgMCwgNTUyLCAyODAsIDc3MDQsIDAsIDc3MDYsIDAsIDAsIDAsIDc3MTAsIDAsIDUwMCwgMjg0LCAwLCAKKyAgICA3NzEyLCAyODYsIDI4OCwgMCwgMCwgMCwgMCwgNDg2LCAwLCAyOTAsIDAsIDAsIDAsIDI5MiwgMCwgMCwgMCwgNzcxNCwgCisgICAgNzcxOCwgMCwgMCwgMCwgNTQyLCAwLCAwLCAwLCAwLCAwLCA3NzE2LCAwLCAwLCAwLCA3NzIwLCAwLCAwLCA3NzIyLCAwLCAwLCAKKyAgICAyMDQsIDIwNSwgMjA2LCAyOTYsIDI5OCwgMzAwLCAzMDQsIDIwNywgNzg4MCwgMCwgMCwgNDYzLCA1MjAsIDUyMiwgMCwgMCwgCisgICAgMCwgNzg4MiwgMCwgMCwgMCwgMCwgMzAyLCAwLCAwLCA3NzI0LCAwLCAwLCAwLCAzMDgsIDAsIDc3MjgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDQ4OCwgMCwgNzczMCwgMCwgMCwgMCwgMzEwLCAwLCAwLCAwLCAwLCA3NzMyLCAwLCAwLCAwLCAwLCAwLCAzMTMsIDAsIAorICAgIDMxNywgMCwgMCwgMCwgMCwgMCwgNzczNCwgMCwgMCwgMCwgMzE1LCAwLCA3NzQwLCAwLCAwLCA3NzM4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3NzQyLCAwLCAwLCAwLCAwLCA3NzQ0LCAwLCAwLCA3NzQ2LCAwLCA1MDQsIDMyMywgMCwgMjA5LCAwLCAwLCA3NzQ4LCAKKyAgICAwLCAwLCAwLCAwLCAzMjcsIDAsIDc3NTAsIDAsIDAsIDAsIDMyNSwgMCwgNzc1NCwgMCwgMCwgNzc1MiwgMCwgMCwgMCwgMCwgCisgICAgMjEwLCAyMTEsIDIxMiwgMjEzLCAzMzIsIDMzNCwgNTU4LCAyMTQsIDc4ODYsIDAsIDMzNiwgNDY1LCA1MjQsIDUyNiwgMCwgCisgICAgMCwgNDE2LCA3ODg0LCAwLCAwLCAwLCAwLCA0OTAsIDAsIDAsIDAsIDAsIDAsIDc3NjQsIDc3NjYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDM0MCwgMCwgMCwgMCwgMCwgNzc2OCwgMzQ0LCA1MjgsIDUzMCwgMCwgMCwgMCwgNzc3MCwgMCwgMCwgMCwgMzQyLCAwLCAwLCAKKyAgICAwLCAwLCA3Nzc0LCAwLCAzNDYsIDM0OCwgMCwgMCwgMCwgNzc3NiwgMCwgMCwgMCwgMCwgMzUyLCAwLCA3Nzc4LCAwLCAwLCAKKyAgICA1MzYsIDM1MCwgMCwgMCwgMCwgNzc4NiwgMCwgMCwgMCwgMCwgMzU2LCAwLCA3Nzg4LCAwLCAwLCA1MzgsIDM1NCwgMCwgCisgICAgNzc5MiwgMCwgMCwgNzc5MCwgMCwgMCwgMCwgMCwgMjE3LCAyMTgsIDIxOSwgMzYwLCAzNjIsIDM2NCwgMCwgMjIwLCA3OTEwLCAKKyAgICAzNjYsIDM2OCwgNDY3LCA1MzIsIDUzNCwgMCwgMCwgNDMxLCA3OTA4LCA3Nzk0LCAwLCAwLCAwLCAzNzAsIDc3OTgsIDAsIAorICAgIDc3OTYsIDc4MDQsIDAsIDAsIDAsIDAsIDAsIDc4MDYsIDAsIDc4MDgsIDc4MTAsIDM3MiwgMCwgMCwgMCwgNzgxNCwgNzgxMiwgCisgICAgMCwgNzgxNiwgMCwgMCwgMCwgNzgxOCwgNzgyMCwgMCwgMCwgMCwgNzkyMiwgMjIxLCAzNzQsIDc5MjgsIDU2MiwgMCwgCisgICAgNzgyMiwgMzc2LCA3OTI2LCAwLCAwLCAwLCAwLCA3OTI0LCAwLCAwLCAzNzcsIDc4MjQsIDAsIDAsIDAsIDM3OSwgMzgxLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3ODI2LCAwLCAwLCAwLCAwLCA3ODI4LCAyMjQsIDIyNSwgMjI2LCAyMjcsIDI1NywgMjU5LCA1NTEsIAorICAgIDIyOCwgNzg0MywgMjI5LCAwLCA0NjIsIDUxMywgNTE1LCAwLCAwLCAwLCA3ODQxLCAwLCA3NjgxLCAwLCAwLCAyNjEsIDAsIAorICAgIDAsIDc2ODMsIDAsIDAsIDc2ODUsIDAsIDAsIDAsIDAsIDc2ODcsIDAsIDAsIDAsIDAsIDAsIDI2MywgMjY1LCAwLCAwLCAwLCAKKyAgICAyNjcsIDAsIDAsIDAsIDAsIDI2OSwgMCwgMCwgMCwgMCwgMCwgMjMxLCAwLCAwLCAwLCA3NjkxLCAyNzEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDc2OTMsIDAsIDAsIDAsIDc2OTcsIDAsIDc2OTksIDAsIDAsIDc2OTUsIDIzMiwgMjMzLCAyMzQsIDc4NjksIDI3NSwgCisgICAgMjc3LCAyNzksIDIzNSwgNzg2NywgMCwgMCwgMjgzLCA1MTcsIDUxOSwgMCwgMCwgMCwgNzg2NSwgMCwgMCwgMCwgNTUzLCAKKyAgICAyODEsIDc3MDUsIDAsIDc3MDcsIDAsIDAsIDAsIDc3MTEsIDAsIDAsIDAsIDAsIDAsIDUwMSwgMjg1LCAwLCA3NzEzLCAyODcsIAorICAgIDI4OSwgMCwgMCwgMCwgMCwgNDg3LCAwLCAwLCAwLCAwLCAwLCAyOTEsIDAsIDAsIDAsIDI5MywgMCwgMCwgMCwgNzcxNSwgCisgICAgNzcxOSwgMCwgMCwgMCwgNTQzLCAwLCAwLCAwLCAwLCAwLCA3NzE3LCAwLCAwLCAwLCA3NzIxLCAwLCAwLCA3NzIzLCAwLCAKKyAgICA3ODMwLCAyMzYsIDIzNywgMjM4LCAyOTcsIDI5OSwgMzAxLCAwLCAyMzksIDc4ODEsIDAsIDAsIDQ2NCwgNTIxLCA1MjMsIDAsIAorICAgIDAsIDAsIDc4ODMsIDAsIDAsIDAsIDAsIDMwMywgMCwgMCwgNzcyNSwgMCwgMCwgMCwgMzA5LCAwLCAwLCAwLCAwLCA0OTYsIAorICAgIDAsIDAsIDAsIDAsIDc3MjksIDAsIDQ4OSwgMCwgMCwgMCwgMCwgMCwgNzczMSwgMCwgMCwgMCwgMzExLCA3NzMzLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAzMTQsIDAsIDMxOCwgMCwgMCwgMCwgMCwgMCwgNzczNSwgMCwgMCwgMCwgMzE2LCAwLCA3NzQxLCAwLCAwLCAKKyAgICA3NzM5LCAwLCA3NzQzLCAwLCAwLCAwLCAwLCA3NzQ1LCAwLCAwLCA3NzQ3LCAwLCAwLCAwLCAwLCAwLCA1MDUsIDMyNCwgMCwgCisgICAgMjQxLCAwLCAwLCA3NzQ5LCAwLCAwLCAwLCAwLCAzMjgsIDAsIDc3NTEsIDAsIDAsIDAsIDMyNiwgMCwgNzc1NSwgMCwgMCwgCisgICAgNzc1MywgMCwgMCwgMCwgMCwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAzMzMsIDMzNSwgNTU5LCAyNDYsIDc4ODcsIDAsIDMzNywgCisgICAgNDY2LCA1MjUsIDUyNywgMCwgMCwgNDE3LCA3ODg1LCA0OTEsIDAsIDAsIDAsIDAsIDAsIDc3NjUsIDAsIDAsIDAsIDAsIAorICAgIDc3NjcsIDAsIDM0MSwgMCwgMCwgMCwgMCwgNzc2OSwgMCwgMCwgMCwgMCwgMzQ1LCA1MjksIDUzMSwgMCwgMCwgMCwgNzc3MSwgCisgICAgMCwgMCwgMCwgMzQzLCAwLCAwLCAwLCAwLCA3Nzc1LCAwLCAzNDcsIDM0OSwgMCwgMCwgMCwgNzc3NywgMCwgMCwgMCwgMCwgCisgICAgMzUzLCAwLCA3Nzc5LCAwLCAwLCA1MzcsIDM1MSwgMCwgMCwgMCwgNzc4NywgNzgzMSwgMCwgMCwgMCwgMzU3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3Nzg5LCAwLCAwLCA1MzksIDM1NSwgMCwgNzc5MywgMCwgMCwgNzc5MSwgMCwgMCwgMCwgMCwgMjQ5LCAyNTAsIAorICAgIDI1MSwgMzYxLCAzNjMsIDM2NSwgMCwgMjUyLCA3OTExLCAzNjcsIDM2OSwgNDY4LCA1MzMsIDUzNSwgMCwgMCwgNDMyLCAKKyAgICA3OTA5LCA3Nzk1LCAwLCAwLCAwLCAzNzEsIDc3OTksIDAsIDc3OTcsIDAsIDAsIDAsIDAsIDc4MDUsIDAsIDc4MDcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDc4MDksIDc4MTEsIDM3MywgMCwgMCwgMCwgNzgxNSwgNzgxMywgMCwgNzgzMiwgMCwgMCwgMCwgNzgxNywgMCwgCisgICAgMCwgMCwgNzgxOSwgNzgyMSwgMCwgMCwgMCwgNzkyMywgMjUzLCAzNzUsIDc5MjksIDU2MywgMCwgNzgyMywgMjU1LCA3OTI3LCAKKyAgICA3ODMzLCAwLCAwLCAwLCA3OTI1LCAwLCAwLCAzNzgsIDc4MjUsIDAsIDAsIDAsIDM4MCwgMCwgMCwgMCwgMCwgMzgyLCAwLCAKKyAgICA3ODI3LCAwLCAwLCAwLCAwLCA3ODI5LCAwLCAwLCAwLCAwLCA4MTczLCA5MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDgxMjksIDAsIAorICAgIDAsIDc4NDYsIDc4NDQsIDAsIDc4NTAsIDAsIDAsIDAsIDAsIDc4NDgsIDAsIDAsIDQ3OCwgMCwgMCwgMCwgNTA2LCAwLCAwLCAKKyAgICA1MDgsIDAsIDAsIDQ4MiwgMCwgMCwgMCwgNzY4OCwgMCwgNzg3MiwgNzg3MCwgMCwgNzg3NiwgMCwgMCwgMCwgMCwgNzg3NCwgCisgICAgMCwgMCwgMCwgNzcyNiwgMCwgMCwgMCwgMCwgMCwgNzg5MCwgNzg4OCwgMCwgNzg5NCwgMCwgMCwgMCwgMCwgNzg5MiwgMCwgCisgICAgMCwgMCwgNzc1NiwgMCwgMCwgNTU2LCAwLCAwLCA3NzU4LCAwLCAwLCAwLCA1NTQsIDAsIDAsIDAsIDUxMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDc1LCA0NzEsIDAsIDAsIDQ2OSwgMCwgMCwgNDczLCAwLCAwLCAwLCA3ODQ3LCA3ODQ1LCAwLCA3ODUxLCAwLCAwLCAKKyAgICAwLCAwLCA3ODQ5LCAwLCAwLCA0NzksIDAsIDAsIDAsIDUwNywgMCwgMCwgNTA5LCAwLCAwLCA0ODMsIDAsIDAsIDAsIDc2ODksIAorICAgIDAsIDc4NzMsIDc4NzEsIDAsIDc4NzcsIDAsIDAsIDAsIDAsIDc4NzUsIDAsIDAsIDAsIDc3MjcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDc4OTEsIDc4ODksIDAsIDc4OTUsIDAsIDAsIDAsIDAsIDc4OTMsIDAsIDAsIDAsIDc3NTcsIDAsIDAsIDU1NywgMCwgMCwgCisgICAgNzc1OSwgMCwgMCwgMCwgNTU1LCAwLCAwLCAwLCA1MTEsIDAsIDAsIDAsIDAsIDAsIDQ3NiwgNDcyLCAwLCAwLCA0NzAsIDAsIAorICAgIDAsIDQ3NCwgMCwgMCwgMCwgNzg1NiwgNzg1NCwgMCwgNzg2MCwgMCwgMCwgMCwgMCwgNzg1OCwgMCwgMCwgNzg1NywgNzg1NSwgCisgICAgMCwgNzg2MSwgMCwgMCwgMCwgMCwgNzg1OSwgMCwgMCwgNzcwMCwgNzcwMiwgMCwgMCwgMCwgMCwgMCwgNzcwMSwgNzcwMywgCisgICAgMCwgMCwgMCwgMCwgMCwgNzc2MCwgNzc2MiwgMCwgNzc2MSwgNzc2MywgMCwgMCwgMCwgNzc4MCwgMCwgMCwgNzc4MSwgMCwgCisgICAgMCwgNzc4MiwgMCwgMCwgMCwgMCwgMCwgMCwgNzc4MywgMCwgNzgwMCwgMCwgMCwgNzgwMSwgMCwgMCwgMCwgMCwgNzgwMiwgCisgICAgMCwgMCwgNzgwMywgMCwgMCwgMCwgMCwgMCwgNzgzNSwgMCwgMCwgMCwgMCwgNzkwMCwgNzg5OCwgMCwgNzkwNCwgMCwgMCwgCisgICAgMCwgMCwgNzkwMiwgNzkwNiwgMCwgMCwgMCwgMCwgMCwgNzkwMSwgNzg5OSwgMCwgNzkwNSwgMCwgMCwgMCwgMCwgNzkwMywgCisgICAgMCwgMCwgMCwgMCwgNzkwNywgMCwgNzkxNCwgNzkxMiwgMCwgNzkxOCwgMCwgMCwgMCwgMCwgNzkxNiwgMCwgMCwgMCwgMCwgCisgICAgNzkyMCwgMCwgNzkxNSwgNzkxMywgMCwgNzkxOSwgNzkxNywgMCwgMCwgMCwgMCwgNzkyMSwgMCwgMCwgMCwgMCwgNDk0LCAwLCAKKyAgICAwLCAwLCA0OTIsIDAsIDAsIDQ5MywgMCwgMCwgNDgwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODEsIDAsIDAsIDAsIDc3MDgsIDAsIAorICAgIDAsIDc3MDksIDAsIDU2MCwgMCwgMCwgMCwgMCwgMCwgMCwgNTYxLCAwLCA0OTUsIDAsIDAsIDAsIDgxMjIsIDkwMiwgMCwgMCwgCisgICAgODEyMSwgODEyMCwgMCwgMCwgMCwgMCwgNzk0NCwgNzk0NSwgMCwgMCwgMCwgMCwgMCwgODEyNCwgMCwgODEzNiwgOTA0LCAwLCAKKyAgICAwLCAwLCAwLCA3OTYwLCA3OTYxLCAwLCAwLCAwLCA4MTM4LCA5MDUsIDAsIDAsIDAsIDAsIDc5NzYsIDc5NzcsIDAsIDgxNDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDgxNTQsIDkwNiwgMCwgMCwgODE1MywgODE1MiwgMCwgOTM4LCAwLCAwLCA3OTkyLCA3OTkzLCAwLCAKKyAgICAwLCAwLCA4MTg0LCA5MDgsIDAsIDAsIDAsIDAsIDgwMDgsIDgwMDksIDAsIDAsIDAsIDAsIDAsIDAsIDgxNzIsIDAsIDAsIDAsIAorICAgIDgxNzAsIDkxMCwgMCwgMCwgODE2OSwgODE2OCwgMCwgOTM5LCAwLCAwLCAwLCA4MDI1LCAwLCAwLCAwLCA4MTg2LCA5MTEsIAorICAgIDgwNDAsIDgwNDEsIDAsIDAsIDAsIDAsIDAsIDgxODgsIDAsIDAsIDgxMTYsIDAsIDAsIDgxMzIsIDAsIDAsIDAsIDAsIDAsIAorICAgIDgwNDgsIDk0MCwgMCwgMCwgODExMywgODExMiwgMCwgMCwgMCwgMCwgNzkzNiwgNzkzNywgMCwgMCwgMCwgMCwgODExOCwgCisgICAgODExNSwgMCwgMCwgMCwgMCwgMCwgODA1MCwgOTQxLCA3OTUyLCA3OTUzLCAwLCAwLCAwLCA4MDUyLCA5NDIsIDAsIDAsIDAsIAorICAgIDAsIDc5NjgsIDc5NjksIDAsIDAsIDAsIDAsIDgxMzQsIDgxMzEsIDAsIDgwNTQsIDk0MywgMCwgMCwgODE0NSwgODE0NCwgMCwgCisgICAgOTcwLCAwLCAwLCA3OTg0LCA3OTg1LCA4MTUwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDU2LCA5NzIsIDAsIDAsIDAsIDAsIAorICAgIDgwMDAsIDgwMDEsIDAsIDgxNjQsIDgxNjUsIDAsIDAsIDAsIDgwNTgsIDk3MywgMCwgMCwgODE2MSwgODE2MCwgMCwgOTcxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA4MDE2LCA4MDE3LCAwLCAwLCAwLCAwLCA4MTY2LCAwLCAwLCA4MDYwLCA5NzQsIDAsIDAsIDAsIAorICAgIDAsIDgwMzIsIDgwMzMsIDgxODIsIDgxNzksIDAsIDAsIDAsIDAsIDAsIDgxNDYsIDkxMiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgODE1MSwgMCwgMCwgODE2MiwgOTQ0LCAwLCAwLCA4MTY3LCAwLCAwLCAwLCA4MTgwLCAwLCAwLCA5NzksIDAsIDAsIDAsIDAsIAorICAgIDAsIDk4MCwgMCwgMCwgMTAzMSwgMCwgMCwgMCwgMCwgMTIzMiwgMCwgMTIzNCwgMCwgMCwgMCwgMCwgMTAyNywgMCwgMTAyNCwgCisgICAgMCwgMCwgMCwgMCwgMTIzOCwgMCwgMTAyNSwgMTIxNywgMCwgMTI0NCwgMCwgMCwgMTI0NiwgMCwgMCwgMCwgMTAzNywgMCwgCisgICAgMCwgMCwgMTI1MCwgMTA0OSwgMCwgMTI1MiwgMCwgMCwgMCwgMCwgMTAzNiwgMCwgMCwgMCwgMCwgMTI1NCwgMCwgMCwgMCwgCisgICAgMTI2MiwgMTAzOCwgMCwgMTI2NCwgMCwgMCwgMTI2NiwgMCwgMCwgMCwgMTI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MiwgCisgICAgMCwgMCwgMTI2MCwgMCwgMCwgMCwgMCwgMTIzMywgMCwgMTIzNSwgMCwgMCwgMCwgMCwgMTEwNywgMCwgMTEwNCwgMCwgMCwgCisgICAgMCwgMCwgMTIzOSwgMCwgMTEwNSwgMTIxOCwgMCwgMTI0NSwgMCwgMCwgMTI0NywgMCwgMCwgMCwgMTExNywgMCwgMCwgMCwgCisgICAgMTI1MSwgMTA4MSwgMCwgMTI1MywgMCwgMCwgMCwgMCwgMTExNiwgMCwgMCwgMCwgMCwgMTI1NSwgMCwgMCwgMCwgMTI2MywgCisgICAgMTExOCwgMCwgMTI2NSwgMCwgMCwgMTI2NywgMCwgMCwgMCwgMTI2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MywgMCwgMCwgCisgICAgMTI2MSwgMCwgMCwgMTExMSwgMCwgMCwgMCwgMTE0MiwgMCwgMCwgMTE0MywgMCwgMCwgMCwgMCwgMCwgMTI0MiwgMCwgMCwgCisgICAgMTI0MywgMCwgMCwgMTI1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1OSwgMCwgMTU3MCwgMTU3MSwgMTU3MywgMCwgMTU3MiwgCisgICAgMCwgMCwgMTU3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczMCwgMCwgMCwgMTc0NywgMCwgMCwgMTcyOCwgMCwgMCwgMCwgMCwgCisgICAgMjM0NSwgMCwgMCwgMjM1MywgMCwgMCwgMjM1NiwgMCwgMCwgMCwgMjUwNywgMjUwOCwgMCwgMCwgMCwgMjg5MSwgMjg4OCwgCisgICAgMjg5MiwgMjk2NCwgMCwgMCwgMCwgMCwgMCwgMzAxOCwgMzAyMCwgMCwgMzAxOSwgMCwgMCwgMCwgMCwgMzE0NCwgMCwgMCwgCisgICAgMCwgMCwgMzI2NCwgMCwgMzI3NCwgMzI3MSwgMzI3MiwgMCwgMzI3NSwgMCwgMCwgMCwgMCwgMzQwMiwgMzQwNCwgMCwgCisgICAgMzQwMywgMCwgMCwgMCwgMCwgMzU0NiwgMzU0OCwgMzU1MCwgMCwgMCwgMCwgMCwgMzU0OSwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDEzNCwgMCwgMCwgMCwgNjkxOCwgMCwgMCwgNjkyMCwgMCwgMCwgNjkyMiwgMCwgMCwgNjkyNCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNjkyNiwgMCwgMCwgNjkzMCwgMCwgMCwgNjk3MSwgMCwgMCwgNjk3MywgMCwgMCwgMCwgMCwgMCwgMCwgNjk3NiwgMCwgCisgICAgMCwgNjk3NywgMCwgMCwgNjk3OSwgMCwgMCwgMCwgNzczNiwgMCwgMCwgNzczNywgMCwgMCwgMCwgMCwgMCwgMCwgNzc3MiwgCisgICAgMCwgMCwgNzc3MywgMCwgMCwgMCwgMCwgNzc4NCwgMCwgMCwgNzc4NSwgMCwgMCwgNzg1MiwgMCwgMCwgNzg2MiwgMCwgMCwgCisgICAgMCwgNzg1MywgMCwgMCwgNzg2MywgMCwgMCwgMCwgNzg3OCwgMCwgMCwgNzg3OSwgMCwgMCwgNzg5NiwgMCwgMCwgNzg5NywgCisgICAgMCwgMCwgMCwgMCwgNzkzOCwgNzk0MCwgMCwgMCwgNzk0MiwgODA2NCwgMCwgNzkzOSwgNzk0MSwgMCwgMCwgNzk0MywgCisgICAgODA2NSwgMCwgMCwgODA2NiwgMCwgMCwgMCwgMCwgMCwgMCwgODA2NywgMCwgMCwgODA2OCwgMCwgMCwgODA2OSwgMCwgMCwgCisgICAgODA3MCwgMCwgMCwgMCwgMCwgMCwgMCwgODA3MSwgMCwgNzk0NiwgNzk0OCwgMCwgMCwgNzk1MCwgODA3MiwgMCwgNzk0NywgCisgICAgNzk0OSwgMCwgMCwgNzk1MSwgODA3MywgMCwgMCwgODA3NCwgMCwgMCwgMCwgMCwgMCwgMCwgODA3NSwgMCwgMCwgODA3NiwgCisgICAgMCwgMCwgODA3NywgMCwgMCwgODA3OCwgMCwgMCwgMCwgMCwgMCwgMCwgODA3OSwgMCwgNzk1NCwgNzk1NiwgMCwgNzk1NSwgCisgICAgNzk1NywgMCwgMCwgMCwgMCwgMCwgNzk2MiwgNzk2NCwgMCwgMCwgMCwgMCwgMCwgNzk2MywgNzk2NSwgMCwgNzk3MCwgCisgICAgNzk3MiwgMCwgMCwgNzk3NCwgODA4MCwgMCwgNzk3MSwgNzk3MywgMCwgMCwgNzk3NSwgODA4MSwgMCwgMCwgODA4MiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgODA4MywgMCwgMCwgODA4NCwgMCwgMCwgODA4NSwgMCwgMCwgODA4NiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgODA4NywgMCwgNzk3OCwgNzk4MCwgMCwgMCwgNzk4MiwgODA4OCwgMCwgNzk3OSwgNzk4MSwgMCwgMCwgNzk4MywgCisgICAgODA4OSwgMCwgMCwgODA5MCwgMCwgMCwgMCwgMCwgMCwgMCwgODA5MSwgMCwgMCwgODA5MiwgMCwgMCwgODA5MywgMCwgMCwgCisgICAgODA5NCwgMCwgMCwgMCwgMCwgMCwgMCwgODA5NSwgMCwgNzk4NiwgNzk4OCwgMCwgMCwgNzk5MCwgMCwgMCwgNzk4NywgCisgICAgNzk4OSwgMCwgMCwgNzk5MSwgMCwgMCwgMCwgMCwgMCwgMCwgNzk5NCwgNzk5NiwgMCwgMCwgMCwgMCwgMCwgMCwgNzk5OCwgCisgICAgMCwgMCwgNzk5NSwgNzk5NywgMCwgMCwgNzk5OSwgMCwgMCwgODAwMiwgODAwNCwgMCwgODAwMywgODAwNSwgMCwgMCwgMCwgCisgICAgMCwgMCwgODAxMCwgODAxMiwgMCwgMCwgMCwgMCwgMCwgODAxMSwgODAxMywgMCwgODAxOCwgODAyMCwgMCwgMCwgODAyMiwgCisgICAgMCwgMCwgODAxOSwgODAyMSwgMCwgMCwgODAyMywgMCwgMCwgMCwgMCwgMCwgMCwgODAyNywgODAyOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgODAzMSwgMCwgMCwgODAzNCwgODAzNiwgMCwgMCwgODAzOCwgODA5NiwgMCwgODAzNSwgODAzNywgMCwgMCwgCisgICAgODAzOSwgODA5NywgMCwgMCwgODA5OCwgMCwgMCwgODA5OSwgMCwgMCwgMCwgMCwgMCwgMCwgODEwMCwgMCwgMCwgODEwMSwgCisgICAgMCwgMCwgODEwMiwgMCwgMCwgODEwMywgMCwgMCwgMCwgMCwgMCwgODA0MiwgODA0NCwgMCwgMCwgODA0NiwgODEwNCwgMCwgCisgICAgODA0MywgODA0NSwgMCwgMCwgODA0NywgODEwNSwgMCwgMCwgODEwNiwgMCwgMCwgODEwNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgODEwOCwgMCwgMCwgODEwOSwgMCwgMCwgODExMCwgMCwgMCwgODExMSwgMCwgMCwgMCwgMCwgMCwgMCwgODExNCwgMCwgMCwgCisgICAgODEzMCwgMCwgMCwgODE3OCwgMCwgMCwgODExOSwgMCwgMCwgMCwgMCwgMCwgODE0MSwgODE0MiwgMCwgMCwgODE0MywgMCwgCisgICAgMCwgMCwgODEzNSwgMCwgMCwgODE4MywgMCwgMCwgMCwgMCwgMCwgODE1NywgODE1OCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgODE1OSwgMCwgODYwMiwgMCwgMCwgODYwMywgMCwgMCwgMCwgMCwgMCwgMCwgODYyMiwgMCwgMCwgODY1MywgMCwgMCwgCisgICAgODY1NSwgMCwgMCwgODY1NCwgMCwgMCwgMCwgMCwgMCwgMCwgODcwOCwgMCwgMCwgODcxMywgMCwgMCwgODcxNiwgMCwgMCwgCisgICAgODc0MCwgMCwgMCwgMCwgMCwgMCwgMCwgODc0MiwgMCwgMCwgODc2OSwgMCwgMCwgODc3MiwgMCwgMCwgODc3NSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgODc3NywgMCwgMCwgODgxMywgMCwgMCwgODgwMiwgMCwgMCwgODgxNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgODgxNywgMCwgMCwgODgyMCwgMCwgMCwgODgyMSwgMCwgMCwgODgyNCwgMCwgMCwgMCwgMCwgMCwgMCwgODgyNSwgMCwgMCwgCisgICAgODgzMiwgMCwgMCwgODgzMywgMCwgMCwgODkyOCwgMCwgMCwgMCwgMCwgMCwgMCwgODkyOSwgMCwgMCwgODgzNiwgMCwgMCwgCisgICAgODgzNywgMCwgMCwgODg0MCwgMCwgMCwgMCwgMCwgMCwgMCwgODg0MSwgMCwgMCwgODkzMCwgMCwgMCwgODkzMSwgMCwgMCwgCisgICAgODg3NiwgMCwgMCwgMCwgMCwgMCwgMCwgODg3NywgMCwgMCwgODg3OCwgMCwgMCwgODg3OSwgMCwgMCwgODkzOCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgODkzOSwgMCwgMCwgODk0MCwgMCwgMCwgODk0MSwgMCwgMCwgMCwgMTI0MzYsIDAsIDAsIDEyMzY0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMjM2NiwgMCwgMCwgMTIzNjgsIDAsIDAsIDEyMzcwLCAwLCAwLCAxMjM3MiwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTIzNzQsIDAsIDAsIDEyMzc2LCAwLCAwLCAxMjM3OCwgMCwgMCwgMTIzODAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyMzgyLCAwLCAwLCAxMjM4NCwgMCwgMCwgMTIzODYsIDAsIDAsIDEyMzg5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM5MSwgMCwgCisgICAgMCwgMTIzOTMsIDAsIDAsIDEyNDAwLCAxMjQwMSwgMCwgMTI0MDMsIDEyNDA0LCAwLCAwLCAwLCAwLCAwLCAxMjQwNiwgCisgICAgMTI0MDcsIDAsIDAsIDAsIDAsIDAsIDEyNDA5LCAxMjQxMCwgMCwgMTI0MTIsIDEyNDEzLCAwLCAxMjQ0NiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTI1MzIsIDAsIDAsIDEyNDYwLCAwLCAwLCAxMjQ2MiwgMCwgMCwgMTI0NjQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyNDY2LCAwLCAwLCAxMjQ2OCwgMCwgMCwgMTI0NzAsIDAsIDAsIDEyNDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQ3NCwgMCwgCisgICAgMCwgMTI0NzYsIDAsIDAsIDEyNDc4LCAwLCAwLCAxMjQ4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0ODIsIDAsIDAsIDEyNDg1LCAKKyAgICAwLCAwLCAxMjQ4NywgMCwgMCwgMTI0ODksIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDk2LCAxMjQ5NywgMCwgMCwgMCwgMCwgMCwgCisgICAgMTI0OTksIDEyNTAwLCAwLCAxMjUwMiwgMTI1MDMsIDAsIDEyNTA1LCAxMjUwNiwgMCwgMCwgMCwgMCwgMCwgMTI1MDgsIAorICAgIDEyNTA5LCAwLCAwLCAwLCAwLCAwLCAxMjUzNSwgMCwgMCwgMTI1MzYsIDAsIDAsIDEyNTM3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjUzOCwgMCwgMCwgMTI1NDIsIDAsIDAsIDAsIDAsIDY5Nzg2LCAwLCAwLCA2OTc4OCwgMCwgMCwgNjk4MDMsIAogfTsKIAogc3RhdGljIGNvbnN0IGNoYW5nZV9yZWNvcmQgY2hhbmdlX3JlY29yZHNfM18yXzBbXSA9IHsKQEAgLTQ0NzUsNiArNDkyOSwxMSBAQAogCXsgMjU1LCAyOSwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMjYsIDI1NSwgMjU1LCAwIH0sCiAJeyA1LCAyNTUsIDI1NSwgMjU1LCAwIH0sCisJeyAyNTUsIDI1NSwgMjU1LCAyNTUsIDEuMCB9LAorCXsgMjU1LCAyNTUsIDI1NSwgMjU1LCAyLjAgfSwKKwl7IDI1NSwgMjU1LCAyNTUsIDI1NSwgMy4wIH0sCisJeyAyNTUsIDI1NSwgMjU1LCAyNTUsIDQuMCB9LAorCXsgMjU1LCAyNTUsIDI1NSwgMjU1LCAtMSB9LAogCXsgMTQsIDI1NSwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMjU1LCAyNTUsIDAsIDAgfSwKIAl7IDI1NSwgNywgMSwgMjU1LCAwIH0sCkBAIC00NTA0LDM4ICs0OTYzLDQ2IEBACiAJeyAyNTUsIDIzLCAyNTUsIDI1NSwgMCB9LAogCXsgOSwgMjU1LCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAyMCwgMjU1LCAyNTUsIDAgfSwKKwl7IDI1NSwgMjU1LCAyNTUsIDI1NSwgMWUrMTYgfSwKKwl7IDI1NSwgMjU1LCAyNTUsIDI1NSwgMWUrMjAgfSwKIAl7IDI1NSwgMTksIDI1NSwgMjU1LCAwIH0sCi0JeyAyNTUsIDI1NSwgMjU1LCAyNTUsIC0xIH0sCiAJeyAxNSwgMjU1LCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAxOSwgMjU1LCAyNTUsIC0xIH0sCisJeyAxLCAyNTUsIDI1NSwgMCwgMCB9LAogfTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNoYW5nZXNfM18yXzBfaW5kZXhbXSA9IHsKLSAgICAwLCAxLCAyLCAyLCAzLCA0LCA1LCA2LCAyLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMiwgMiwgMTQsIDE1LCAxNiwgMTcsIAotICAgIDE4LCAxOSwgMjAsIDIxLCAyMiwgMiwgMiwgMiwgMjMsIDI0LCAyNSwgMjYsIDIsIDIsIDI3LCAyOCwgMjksIDMwLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAzMSwgMiwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMiwgMzgsIDM5LCA0MCwgMiwgNDEsIDQyLCAyLCA0MywgCi0gICAgMiwgMiwgNDQsIDQ1LCA0NiwgNDcsIDQ4LCAyLCAyLCA0OSwgNTAsIDUxLCAyLCAyLCA1MiwgNTMsIDIsIDU0LCA1NSwgNTUsIAotICAgIDIsIDIsIDIsIDIsIDU2LCAyLCA1NywgNTgsIDU5LCA2MCwgNjEsIDIsIDIsIDIsIDIsIDYyLCA2MywgNjQsIDY1LCA2NiwgCi0gICAgNjcsIDY4LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAwLCAxLCAyLCAyLCAzLCA0LCA1LCA2LCAyLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDIsIDE1LCAxNiwgMTcsIAorICAgIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDIsIDIsIDIsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAKKyAgICAzNCwgMiwgMiwgMiwgMzUsIDM2LCAyLCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCAKKyAgICA0OSwgMiwgNTAsIDIsIDIsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMiwgMiwgNTYsIDU3LCA1OCwgMiwgMiwgNTksIDYwLCA2MSwgCisgICAgNjIsIDYzLCA2MywgMiwgMiwgMiwgMiwgNjQsIDIsIDY1LCA2NiwgNjcsIDY4LCA2OSwgMiwgMiwgMiwgMiwgNzAsIDcxLCAKKyAgICA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgMiwgMiwgMiwgMiwgMiwgMiwgNzksIDIsIDIsIDIsIDIsIDIsIDgwLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCA2OSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgODEsIDIsIDgyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4MywgCisgICAgODQsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDg1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4NiwgODcsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDg4LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4OSwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkxLCA5MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTMsIDQ4LCA0OCwgCisgICAgOTQsIDk1LCA0OCwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDIsIDEwMywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTA0LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCA3MCwgNzEsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQxLCA0MSwgNzIsIDczLCA0MSwgNzQsIDc1LCA3NiwgNzcsIAotICAgIDIsIDc4LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMiwgMiwgMiwgMiwgMTEwLCAxMTEsIDIsIDExMiwgMTEzLCAxMTQsIAorICAgIDExNSwgMTE2LCAxMTcsIDIsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyLCAyLCAyLCAyLCAyLCAyLCAxMjMsIDIsIDEyNCwgCisgICAgMiwgMTI1LCAyLCAxMjYsIDIsIDEyNywgMiwgMiwgMiwgMTI4LCAyLCAyLCAyLCAyLCAxMjksIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzMCwgMiwgMTMxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNzksIDgwLCA4MSwgODIsIDgzLCAyLCAyLCAyLCAKLSAgICAyLCA4NCwgODUsIDIsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDIsIDkyLCA5MywgOTQsIDk1LCA5NiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgOTcsIDIsIDk4LCAyLCA5OSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgMTAwLCAyLCAxMDEsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNDU0NSwzOCArNTAxMiwzMiBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDEzMywgMiwgMTM0LCAyLCAxMzUsIDIsIDIsIDEzNiwgMiwgMiwgMiwgMTM3LCAxMzgsIDEzOSwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMTAyLCAyLCAxMDMsIDIsIDEwNCwgMiwgMiwgMTA1LCAyLCAyLCAyLCAxMDYsIDEwNywgMTA4LCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxMDksIDExMCwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTQwLCAxNDEsIDE0MiwgMTQzLCAKKyAgICAxNDQsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDE0NSwgMTQ2LCA5MCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgNzksIDE0NywgMiwgMTQ4LCAxNDksIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDE1MCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTUxLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxNTIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDE1MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAxNTQsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDExMSwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTUwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTQ4MTAsOCArNTI3MSw5IEBACiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgNDEsIDExMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDgsIAorICAgIDE1NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC00ODc0LDcgKzUzMzYsNyBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2hhbmdlc18zXzJfMF9kYXRhW10gPSB7CkBAIC00OTIyLDcgKzUzODQsNyBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNDk1MiwzODAgKzU0MTQsMzg5IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDEyLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDcsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEzLCAxMywgMTMsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCA3LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCA3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMywgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDIzLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIAotICAgIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAotICAgIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4LCAwLCAwLCAwLCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAKLSAgICAxLCAxLCAwLCAwLCAwLCAwLCAyOCwgNiwgNCwgNSwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMSwgMSwgMCwgMCwgMCwgMCwgCi0gICAgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDM2LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNywgMzgsIDEwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIAotICAgIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIAotICAgIDM5LCAzOSwgMzksIDM5LCAzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDcsIDcsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgNywgNywgNywgNywgNywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgCi0gICAgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgCi0gICAgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIAorICAgIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgCisgICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDE4LCAxOCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcsIDcsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgsIDI4LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgCi0gICAgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzLCA4LCAwLCAKKyAgICAwLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCAxLCAxLCAwLCAwLCAwLCA4LCAzMywgNiwgNCwgNSwgMzQsIDM1LCAzNiwgMzcsIAorICAgIDM4LCAzOSwgMSwgMSwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgCisgICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxLCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0MiwgNDMsIDEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgCi0gICAgNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgNDIsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMiwgMzIsIAorICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIAorICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIAorICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIAorICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIAorICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIAorICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIAorICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTUzMzMsODYgKzU4MDQsMjM3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMsIDEzLCAxMywgMTMsIDEzLCAKLSAgICAxMywgMCwgMCwgMCwgMSwgMSwgMTMsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAKLSAgICAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDQzLCA0MywgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgMCwgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgCi0gICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyLCAwLCAKKyAgICAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgCisgICAgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMCwgMCwgMCwgMSwgMSwgMTgsIAorICAgIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCAwLCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCA3LCA3LCAwLCAwLCAwLCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCAwLCAwLCAwLCA3LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKLSAgICAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCAwLCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKQEAgLTU0MjQsNjYgKzYwNDYsMTM1IEBACiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCA3LCAwLCAwLCA3LCAwLCAKKyAgICAwLCAwLCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCAwLCA3LCA3LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAKKyAgICA3LCA3LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhbmdlX3JlY29yZCogZ2V0X2NoYW5nZV8zXzJfMChQeV9VQ1M0IG4pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmggYi9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKaW5kZXggOTBkMjVjNi4uMWEyNGNjZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCisrKyBiL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaApAQCAtNiwxNTIyOSArNiwxNzI1MSBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgbGV4aWNvbltdID0gewogICAgIDc2LCA2OSwgODQsIDg0LCA2OSwgMjEwLCA4NywgNzMsIDg0LCAyMDAsIDgzLCA3NywgNjUsIDc2LCAyMDQsIDgzLCA4OSwgCiAgICAgNzYsIDc2LCA2NSwgNjYsIDc2LCAxOTcsIDgzLCA3MywgNzEsIDIwNiwgNjcsIDY1LCA4MCwgNzMsIDg0LCA2NSwgMjA0LCAKLSAgICA3NiwgNjUsIDg0LCA3MywgMjA2LCA4OSwgMjAxLCA2NywgNzQsIDIwMywgNjUsIDgyLCA2NSwgNjYsIDczLCAxOTUsIDY3LCAKLSAgICA3OSwgNzcsIDgwLCA2NSwgODQsIDczLCA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNzcsIDY1LCA4NCwgNzIsIDY5LCA3NywgCi0gICAgNjUsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDY3LCA4NSwgNzgsIDY5LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA4MywgODksIDc3LCAKLSAgICA2NiwgNzksIDIwNCwgNzAsIDc5LCA4MiwgNzcsIDEyOCwgNjcsIDY1LCA3OCwgNjUsIDY4LCA3MywgNjUsIDIwNiwgODMsIAotICAgIDg5LCA3NiwgNzYsIDY1LCA2NiwgNzMsIDY3LCAyMTEsIDY2LCA3OSwgNzYsIDE5NiwgNzEsIDgyLCA2OSwgNjksIDIwMywgCi0gICAgNzYsIDczLCA3MSwgNjUsIDg0LCA4NSwgODIsIDE5NywgNjgsIDczLCA3MSwgNzMsIDIxMiwgNjUsIDc4LCAxOTYsIDc3LCAKLSAgICA4NSwgODMsIDczLCA2NywgNjUsIDIwNCwgODQsIDczLCA3NywgNjksIDIxMSwgNjksIDg0LCA3MiwgNzMsIDc5LCA4MCwgNzMsIAotICAgIDE5NSwgNzIsIDY1LCA3OCwgNzEsIDg1LCAyMDQsIDczLCA4NCwgNjUsIDc2LCA3MywgMTk1LCA2NywgODksIDgyLCA3MywgCi0gICAgNzYsIDc2LCA3MywgMTk1LCA4MiwgNjUsIDY4LCA3MywgNjcsIDY1LCAyMDQsIDgzLCA2NSwgNzgsIDgzLCA0NSwgODMsIDY5LCAKLSAgICA4MiwgNzMsIDE5OCwgODYsIDc5LCA4NywgNjksIDIwNCwgNzAsIDc5LCAyMTAsIDY3LCA3MywgODIsIDY3LCA3NiwgNjksIAotICAgIDE5NiwgODYsIDY1LCAyMDEsIDcwLCA3MywgNzgsIDY1LCAyMDQsIDY3LCA3OSwgNzcsIDY2LCA3MywgNzgsIDczLCA3OCwgCi0gICAgMTk5LCA4MywgODEsIDg1LCA2NSwgODIsIDE5NywgODYsIDY1LCA4MiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY2LCAKLSAgICA4MiwgNjUsIDczLCA3NiwgNzYsIDE5NywgODAsIDY1LCA4NCwgODQsIDY5LCA4MiwgMjA2LCA4MiwgNzMsIDcxLCA3MiwgCi0gICAgMjEyLCA3NiwgNjksIDcwLCAyMTIsIDY2LCA4OSwgOTAsIDY1LCA3OCwgODQsIDczLCA3OCwgMTk3LCA3MywgODMsIDc5LCAKLSAgICA3NiwgNjUsIDg0LCA2OSwgMTk2LCAxOTQsIDY1LCA2NiwgNzksIDg2LCA2OSwgMTI4LCA2OCwgNzksIDg1LCA2NiwgNzYsIAotICAgIDE5NywgNzUsIDY1LCA4NCwgNjUsIDc1LCA2NSwgNzgsIDE5MywgNzUsIDY1LCA3OCwgNzEsIDg4LCAyMDEsIDc2LCA3MywgCi0gICAgNzgsIDY5LCA2NSwgMjEwLCA2NiwgNjksIDc2LCA3OSwgODcsIDEyOCwgNzcsIDc5LCA2OCwgNzMsIDcwLCA3MywgNjksIAotICAgIDIxMCwgODMsIDczLCA3MSwgNzgsIDEyOCwgODQsIDczLCA2NiwgNjksIDg0LCA2NSwgMjA2LCA3NywgNjksIDY5LCAyMDUsIAotICAgIDY4LCA3OSwgMjEyLCA2NSwgMTI4LCA2NSwgODIsIDgyLCA3OSwgODcsIDEyOCwgNzMsIDc4LCA3MywgODQsIDczLCA2NSwgCi0gICAgMjA0LCA2NywgNjUsIDgyLCA4MiwgNzMsIDY5LCAyMTAsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDg5LCAKLSAgICA2OSwgMjAwLCA4NywgNzIsIDczLCA4NCwgMTk3LCA2NSwgNjYsIDc5LCA4NiwgMTk3LCA3OCwgODUsIDc3LCA2NiwgNjksIAotICAgIDIxMCwgODUsIDEyOCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNzcsIDc5LCA3OCwgNzEsIDc5LCA3NiwgNzMsIDY1LCAyMDYsIAotICAgIDc3LCA4OSwgNjUsIDc4LCA3NywgNjUsIDIxMCwgNjcsIDc5LCA4MCwgODQsIDczLCAxOTUsIDc1LCA3MiwgNzcsIDY5LCAKLSAgICAyMTAsIDc5LCAxMjgsIDczLCAxMjgsIDg0LCA3MywgNzYsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDEyOCwgNjYsIDc5LCAyMTYsIAotICAgIDcyLCA2OSwgNjYsIDgyLCA2OSwgMjE1LCA4MCwgNzYsIDg1LCAyMTEsIDY4LCA4MiwgNjUsIDg3LCA3MywgNzgsIDcxLCAKLSAgICAyMTEsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCisgICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjcsIDc0LCAyMDMsIDY5LCA3MSwgODksIDgwLCA4NCwgNzMsIDY1LCAKKyAgICAyMDYsIDcyLCA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDIwMCwgNjUsIDgyLCA2NSwgNjYsIDczLCAxOTUsIAorICAgIDY3LCA3OSwgNzcsIDgwLCA2NSwgODQsIDczLCA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNzcsIDY1LCA4NCwgNzIsIDY5LCAKKyAgICA3NywgNjUsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDY3LCA4NSwgNzgsIDY5LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA4MywgODksIAorICAgIDc3LCA2NiwgNzksIDIwNCwgNzAsIDc5LCA4MiwgNzcsIDEyOCwgNjcsIDY1LCA3OCwgNjUsIDY4LCA3MywgNjUsIDIwNiwgCisgICAgODMsIDg5LCA3NiwgNzYsIDY1LCA2NiwgNzMsIDY3LCAyMTEsIDY4LCA3MywgNzEsIDczLCAyMTIsIDY2LCA3OSwgNzYsIAorICAgIDE5NiwgNzIsIDY1LCA3OCwgNzEsIDg1LCAyMDQsIDcxLCA4MiwgNjksIDY5LCAyMDMsIDc2LCA3MywgNzEsIDY1LCA4NCwgCisgICAgODUsIDgyLCAxOTcsIDY1LCA3OCwgMTk2LCA3NywgODUsIDgzLCA3MywgNjcsIDY1LCAyMDQsIDg0LCA3MywgNzcsIDY5LCAKKyAgICAyMTEsIDY5LCA4NCwgNzIsIDczLCA3OSwgODAsIDczLCAxOTUsIDg2LCA3OSwgODcsIDY5LCAyMDQsIDczLCA4NCwgNjUsIAorICAgIDc2LCA3MywgMTk1LCA2NywgODksIDgyLCA3MywgNzYsIDc2LCA3MywgMTk1LCA4MiwgNjUsIDY4LCA3MywgNjcsIDY1LCAKKyAgICAyMDQsIDgzLCA2NSwgNzgsIDgzLCA0NSwgODMsIDY5LCA4MiwgNzMsIDE5OCwgNjcsIDczLCA4MiwgNjcsIDc2LCA2OSwgCisgICAgMTk2LCA3MCwgNzksIDIxMCwgNjcsIDc5LCA3NywgNjYsIDczLCA3OCwgNzMsIDc4LCAxOTksIDg0LCA2NSwgMjAxLCA4NiwgCisgICAgNjUsIDIwMSwgNzAsIDczLCA3OCwgNjUsIDIwNCwgODMsIDgxLCA4NSwgNjUsIDgyLCAxOTcsIDg2LCA2NSwgODIsIDczLCAKKyAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA3NiwgNjksIDcwLCAyMTIsIDY2LCA4MiwgNjUsIDczLCA3NiwgNzYsIDE5NywgODAsIAorICAgIDY1LCA4NCwgODQsIDY5LCA4MiwgMjA2LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA2NiwgODksIDkwLCA2NSwgNzgsIDg0LCA3MywgCisgICAgNzgsIDE5NywgNzMsIDgzLCA3OSwgNzYsIDY1LCA4NCwgNjksIDE5NiwgMTk0LCA2NSwgNjYsIDc5LCA4NiwgNjksIDEyOCwgCisgICAgNjgsIDc5LCA4NSwgNjYsIDc2LCAxOTcsIDc1LCA2NSwgODQsIDY1LCA3NSwgNjUsIDc4LCAxOTMsIDc1LCA2NSwgNzgsIDcxLCAKKyAgICA4OCwgMjAxLCA3OCwgODUsIDc3LCA2NiwgNjksIDIxMCwgODMsIDczLCA3MSwgNzgsIDEyOCwgNjYsIDY5LCA3NiwgNzksIAorICAgIDg3LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA3NywgNzksIDY4LCA3MywgNzAsIDczLCA2OSwgMjEwLCA4NCwgCisgICAgNzMsIDY2LCA2OSwgODQsIDY1LCAyMDYsIDY1LCAxMjgsIDY4LCA3OSwgMjEyLCA3NywgNjksIDY5LCAyMDUsIDc3LCA4OSwgCisgICAgNjUsIDc4LCA3NywgNjUsIDIxMCwgNjcsIDY1LCA4MiwgODIsIDczLCA2OSwgMjEwLCA2NSwgODIsIDgyLCA3OSwgODcsIAorICAgIDEyOCwgNzMsIDc4LCA3MywgODQsIDczLCA2NSwgMjA0LCA4NywgNzIsIDczLCA4NCwgMTk3LCA4NSwgMTI4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA4OSwgNjksIDIwMCwgNjUsIDY2LCA3OSwgODYsIDE5NywgNzMsIDEyOCwgNzksIAorICAgIDEyOCwgNjcsIDc5LCA4MCwgODQsIDczLCAxOTUsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc3LCA3OSwgNzgsIDcxLCA3OSwgCisgICAgNzYsIDczLCA2NSwgMjA2LCA3NywgNjUsIDgyLCA3NSwgMTI4LCA3NSwgNzIsIDc3LCA2OSwgMjEwLCA2OCwgNjksIDg2LCAKKyAgICA2NSwgNzgsIDY1LCA3MSwgNjUsIDgyLCAyMDEsIDg0LCA3MywgNzYsIDE5NywgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIAorICAgIDY5LCA4MywgNzMsIDkwLCA2OSwgMTk2LCA4NCwgNzIsIDY1LCAyMDUsIDY2LCA3NiwgNjUsIDY3LCAyMDMsIDc0LCA3OSwgCisgICAgNzgsIDcxLCA4MywgNjksIDc5LCA3OCwgMTk5LCA2NiwgNzksIDIxNiwgNzIsIDY5LCA2NiwgODIsIDY5LCAyMTUsIDgwLCAKKyAgICA3NiwgODUsIDIxMSwgNjgsIDgyLCA2NSwgODcsIDczLCA3OCwgNzEsIDIxMSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIAorICAgIDgyLCA2OCwgMjExLCA2NywgNzIsIDc5LCA4MywgNjksIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKICAgICAxMjgsIDcyLCA2NSwgNzYsIDcwLCA4NywgNzMsIDY4LCA4NCwgMjAwLCA2NiwgNjUsIDc2LCA3MywgNzgsIDY5LCA4MywgCi0gICAgMTk3LCA2NiwgNzYsIDY1LCA2NywgMjAzLCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgMjA2LCA3MiwgNzksIDc5LCAKLSAgICA3NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA3MywgMTk1LCA4NCwgNjUsIDIwMSwgNjUsIDc2LCA2OSwgMTk4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgCi0gICAgNjksIDgzLCA3MywgOTAsIDY5LCAxOTYsIDY4LCA2OSwgODYsIDY1LCA3OCwgNjUsIDcxLCA2NSwgODIsIDIwMSwgODMsIDY3LCAKLSAgICA4MiwgNzMsIDgwLCAyMTIsIDg0LCA3OSwgMTI4LCAyMTMsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDEyOCwgODUsIDIwOCwgCi0gICAgNzAsIDg1LCA3NiwgNzYsIDg3LCA3MywgNjgsIDg0LCAyMDAsIDcyLCA2NSwgMjAwLCA2OCwgNzksIDg3LCAyMDYsIDY2LCAKLSAgICA4MiwgNjUsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDY5LCA4MSwgODUsIDY1LCAyMDQsIDc5LCAxOTgsIDc5LCA4NiwgNjksIAotICAgIDIxMCwgODQsIDY1LCAxOTksIDY4LCA3OSwgNzcsIDczLCA3OCwgMjA3LCA3MCwgODIsIDY1LCA3NSwgODQsIDg1LCAyMTAsIAotICAgIDc4LCA4NSwgNzcsIDY5LCA4MiwgNzMsIDE5NSwgNzIsIDY5LCA2NSwgODYsIDIxNywgODQsIDg3LCA3OSwgMTI4LCA3NywgCi0gICAgNjUsIDc2LCA2NSwgODksIDY1LCA3NiwgNjUsIDIwNSwgNzEsIDc2LCA2NSwgNzEsIDc5LCA3NiwgNzMsIDg0LCA3MywgMTk1LCAKLSAgICA2NywgNzIsIDY1LCA4MiwgNjUsIDY3LCA4NCwgNjksIDIxMCwgNzYsIDY5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY4LCAyMTEsIAotICAgIDc5LCA3OCwgNjksIDEyOCwgODQsIDY5LCA3NiwgODUsIDcxLCAyMTMsIDY1LCA4MiwgNzcsIDY5LCA3OCwgNzMsIDY1LCAKLSAgICAyMDYsIDY2LCA2OSwgNzgsIDcxLCA2NSwgNzYsIDIwMSwgNjcsIDcyLCA3OSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzQsIAotICAgIDY5LCA2OSwgMjA1LCA3NywgNjksIDY4LCA3MywgNjUsIDIwNCwgNjYsIDY1LCA4MiwgMTI4LCA3MiwgNzMsIDgyLCA2NSwgCi0gICAgNzEsIDY1LCA3OCwgMTkzLCA4NywgNjksIDgzLCA4NCwgNDUsIDY3LCA4MiwgNjksIDE5NywgODQsIDcyLCA2NSwgMjAxLCAKLSAgICA3NSwgNjUsIDc4LCA3OCwgNjUsIDY4LCAxOTMsIDY3LCA3MiwgNjksIDgyLCA3OSwgNzUsIDY5LCAxOTcsIDcyLCA2NSwgNzYsIAotICAgIDE5OCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDc5LCA4MiwgNzMsIDg5LCAxOTMsIDg0LCA4NywgCi0gICAgMjA3LCA2NywgNzIsIDY1LCAyMDUsIDcxLCA4NSwgNzQsIDY1LCA4MiwgNjUsIDg0LCAyMDEsIDc0LCA3OSwgNzgsIDcxLCAKLSAgICA4MywgNjksIDc5LCA3OCwgMTk5LCA3OCwgNjksIDIxNSwgODIsIDg1LCA3OCwgNzMsIDE5NSwgODMsIDY1LCA4NSwgODIsIAotICAgIDY1LCA4MywgNzIsIDg0LCA4MiwgMTkzLCA4NCwgNjksIDg0LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIDY5LCA4MywgCi0gICAgNjksIDgyLCA2OSwgMjEyLCA3NiwgODUsIDE5NywgODMsIDczLCA3OCwgNzIsIDY1LCA3NiwgMTkzLCA3MSwgODUsIDgyLCAKLSAgICA3NywgODUsIDc1LCA3MiwgMjAxLCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MywgODksIDgyLCA3MywgNjUsIAotICAgIDE5NSwgODQsIDcyLCA4MiwgNjksIDE5NywgODYsIDc5LCA2NywgNjUsIDc2LCA3MywgMTk1LCA3MiwgNjUsIDEyOCwgNjUsIAotICAgIDY3LCA4NSwgODQsIDY5LCAxMjgsIDc2LCA2OSwgODAsIDY3LCA3MiwgMTkzLCA3NiwgNzMsIDcxLCA3MiwgMjEyLCA3MCwgCi0gICAgNzksIDg1LCA4MiwgMTI4LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCA0NSwgODMsIDg0LCA4MiwgODUsIDY3LCAyMDMsIDg0LCAKLSAgICA2NSwgNzcsIDczLCAyMDQsIDY1LCA4MCwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIAotICAgIDcyLCA2NSwgNzcsIDkwLCAxOTMsIDc3LCA2NSwgODIsIDIwMywgODQsIDcyLCA4MiwgNjksIDY5LCAxMjgsIDg0LCA2OSwgCi0gICAgNzYsIDY5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3OSwgNzgsIDE5NywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgMjA0LCA3NCwgODUsIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNjYsIDY1LCA4MiwgMTk0LCA2OCwgNjUsIAotICAgIDgzLCA3MywgMTkzLCA3MCwgNzMsIDg2LCA2OSwgMTI4LCA3NiwgNzMsIDc3LCA2NiwgMjEzLCA3NywgNjUsIDc1LCA4MywgCi0gICAgODUsIDgyLCAxOTMsIDY2LCA3OSwgODAsIDc5LCA3NywgNzksIDcwLCAyMDcsIDc1LCA2NSwgMTI4LCA3NSwgNzIsIDY1LCAKLSAgICA4MiwgNzksIDgzLCA3MiwgODQsIDcyLCAyMDEsIDc2LCA2NSwgMjA3LCA4NCwgMjA3LCA3MiwgNjksIDg4LCA2NSwgNzEsIAotICAgIDgyLCA2NSwgMjA1LCA3NiwgNzksIDc4LCAxOTksIDgzLCA3MywgODgsIDEyOCwgNzYsIDc5LCAyMTUsIDgwLCA4MywgNzMsIAotICAgIDc2LCAyMDEsIDY5LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgMTkzLCA3NywgNzksIDc4LCA3OSwgODMsIDgwLCA2NSwgCi0gICAgNjcsIDE5NywgNzgsIDc5LCAyMTIsIDg5LCA2NSwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgMTI4LCA4MywgMTI4LCA4MywgNjksIAotICAgIDg2LCA2OSwgNzgsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCAxOTcsIDg2LCAxMjgsIDY4LCA3OSwgODQsIDIxMSwgNzcsIAotICAgIDY1LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCAxOTYsIDcyLCA3MywgNzEsIDIwMCwgNzUsIDcyLCA2NSwgCi0gICAgMjAwLCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3OCwgNzUsIDIwNywgODQsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDg0LCA3OSwgCi0gICAgNzgsIDE5NywgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgMjA0LCA4MiwgNjUsIDEyOCwgODQsIDg1LCA4MiwgNzgsIDY5LCAKLSAgICAxOTYsIDY1LCA2OSwgNzEsIDY5LCA2NSwgMjA2LCA3MiwgMTI4LCA4MCwgNjUsIDEyOCwgNzEsIDEyOCwgNzYsIDY1LCA3MSwgCi0gICAgNjUsIDE5NCwgODAsIDcyLCA2NSwgNzEsIDgzLCA0NSwgODAsIDE5MywgNjcsIDg5LCA4MCwgODIsIDczLCA3OSwgMjEyLCAKLSAgICA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDgzLCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY5LCA4MywgCi0gICAgMTk3LCA4NCwgNzMsIDcwLCA3MywgNzgsIDY1LCA3MSwgMjAwLCA2OCwgMTI4LCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCAKLSAgICA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgCi0gICAgNjYsIDg5LCA2OSwgNzYsIDc5LCA4MiwgODUsIDgzLCA4MywgNzMsIDY1LCA3OCwgNDUsIDg1LCA3NSwgODIsIDY1LCA3MywgCi0gICAgNzgsIDczLCA2NSwgMjA2LCA2NywgNjksIDc5LCA3OCwgNzEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNzcsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgwLCA2NSwgODMsIDgzLCA3MywgODYsIDY5LCA0NSwgODAsIDg1LCAKLSAgICA3NiwgNzYsIDQ1LCA4NSwgODAsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNjUsIDc4LCA4NCwgNzMsIDY3LCA3NiwgCi0gICAgNzksIDY3LCA3NSwgODcsIDczLCA4MywgNjksIDQ1LCA4MiwgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDY3LCA2OSwgNzksIAotICAgIDc4LCA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCA3NywgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCAKLSAgICA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCAKLSAgICA2NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgCi0gICAgNjksIDg1LCA4MCwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDc5LCA4MCwgNjksIDc4LCA0NSwgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCAKLSAgICA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNjcsIDY5LCA3OSwgNzgsIDcxLCA2NywgNzIsIDczLCA2OSwgODUsIDc3LCA2NywgCi0gICAgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MywgNzMsIDc5LCAKLSAgICA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgCi0gICAgODUsIDc3LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzMsIAotICAgIDc1LCA2OSwgODUsIDg0LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAKLSAgICA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgNjUsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgCi0gICAgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIAotICAgIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKLSAgICA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCi0gICAgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIAotICAgIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCAKLSAgICA4NSwgNzcsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgCi0gICAgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIAotICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCAKLSAgICA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgCi0gICAgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCAKLSAgICA4NCwgODcsIDczLCA3MSwgNDUsIDY2LCA3NCwgNjUsIDgyLCA3NSwgNjUsIDIwNiwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDc1LCA2NSwgODQsIDY1LCA3NSwgNjUsIAotICAgIDc4LCA2NSwgNDUsIDcyLCA3MywgODIsIDY1LCA3MSwgNjUsIDc4LCAxOTMsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDg5LCA2OSwgODMsIDczLCA2OSwgODUsIDc4LCA3MSwgCi0gICAgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDY3LCA2OSwgNzksIDc4LCA3MSwgNjcsIDcyLCA3MywgNjksIAotICAgIDg1LCA3NywgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKLSAgICA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDQ4LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDQ4LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCAKLSAgICA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgCi0gICAgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIAotICAgIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDU0LCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDQ4LCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAotICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKLSAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKLSAgICA0NSwgNDgsIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDUwLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDUwLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCAKLSAgICA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgCi0gICAgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIAotICAgIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUxLCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUyLCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAotICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKLSAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKLSAgICA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDUzLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDUzLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCAKLSAgICA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgCi0gICAgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIAotICAgIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ4LCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ5LCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgCi0gICAgODQsIDc5LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIAotICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgCi0gICAgNjksIDg1LCA3NywgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIAotICAgIDcxLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDgzLCA3OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OSwgNDUsIDcwLCAKLSAgICA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgODMsIDczLCA3MCwgCi0gICAgNzMsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDcyLCA3MywgNjksIAotICAgIDg1LCA4MCwgNzIsIDEyOCwgNjUsIDc4LCA4NCwgNzMsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzMsIDc5LCAKLSAgICA3OCwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIAotICAgIDY1LCA3OCwgODQsIDczLCA3NSwgNjksIDc4LCA3OSwgNzUsIDg5LCA3NiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNjcsIDY5LCAKLSAgICA3OSwgNzgsIDcxLCA2NywgNzIsIDczLCA2OSwgODUsIDc3LCA4MywgNzMsIDc5LCA4MywgMTI4LCA2NywgNzIsIDczLCA2OSwgCi0gICAgODUsIDY3LCA3MiwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDY3LCA3MiwgNzMsIDg0LCA4NSwgNjksIAotICAgIDg1LCA3NywgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDc0LCA2NSwgNzYsIDc2LCA2NSwgNzQsIDY1LCA3NiwgNjUsIDc2LCA3OSwgODUsIAotICAgIDcyLCA3OSwgODUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCAKLSAgICA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgODksIDgwLCA3OSwgODIsIDgyLCA3OSwgNzksIDc4LCAxMjgsIAotICAgIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgNzcsIDczLCAKLSAgICA2OSwgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MCwgNjksIDg0LCA2NSwgCi0gICAgODMsIDg0LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIAotICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCAKLSAgICA3NiwgODksIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDgzLCA4OSwgCi0gICAgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIAotICAgIDczLCA3OSwgODMsIDEyOCwgODQsIDY5LCA2NSwgODIsIDY4LCA4MiwgNzksIDgwLCA0NSwgODMsIDcyLCA2NSwgNzgsIDc1LCAKLSAgICA2OSwgMTk2LCA4MCwgODIsIDc5LCA4MywgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODQsIAotICAgIDY5LCA2NSwgODIsIDY4LCA4MiwgNzksIDgwLCA0NSwgODMsIDgwLCA3OSwgNzUsIDY5LCAxOTYsIDY2LCA3NiwgNjUsIDY3LCAKLSAgICA3NSwgNDUsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCA2OSwgMTk2LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgCi0gICAgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgNjcsIDc5LCA3OCwgNzEsIDgyLCA2NSwgODQsIDg1LCA3NiwgNjUsIAotICAgIDg0LCA3MywgNzksIDc4LCAxMjgsIDcyLCA3MywgNzEsIDcyLCA0NSwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCAKLSAgICA0NSwgMTg1LCA2NSwgNzAsIDc5LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCA3MywgNzksIDc4LCA2OSwgNjgsIDEyOCwgNjUsIAotICAgIDgyLCA3OSwgODUsIDc4LCA2OCwgNDUsIDgwLCA4MiwgNzksIDcwLCA3MywgNzYsIDY5LCAxMjgsIDY3LCA3OSwgNzgsIDY3LCAKLSAgICA2NSwgODYsIDY5LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgMTk2LCA3MSwgNzksIDgyLCA3MSwgNzksIDgzLCA4OSwgCi0gICAgNzgsIDg0LCA3MiwgNjksIDg0LCA3OSwgNzgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNzAsIDczLCA2NywgNjUsIAotICAgIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTcsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIAotICAgIDcyLCA0NSwgNzksIDgzLCAyMTEsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDgzLCAKLSAgICA3OSwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4OSwgODIsIDEyOCwgNzcsIAotICAgIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCAKLSAgICA4NCwgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgNjksIDgzLCA4MSwgODUsIDczLCA4MSwgCi0gICAgODUsIDY1LCA2OCwgODIsIDY1LCA4NCwgNjksIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIAotICAgIDQ1LCA3NywgNjUsIDY4LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCAKLSAgICA4NSwgMTk2LCA4MywgNzMsIDc5LCA4MywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODQsIAotICAgIDY5LCA2NSwgODIsIDY4LCA4MiwgNzksIDgwLCA0NSwgNjYsIDY1LCA4MiwgNjYsIDY5LCAxOTYsIDg0LCA4MiwgNzksIDc3LCAKLSAgICA3MywgNzUsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgCi0gICAgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIAotICAgIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCAKLSAgICA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIAotICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCAKLSAgICA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIAotICAgIDQ4LCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCAKLSAgICA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNDksIDEyOCwgODYsIAotICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCAKLSAgICA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIAotICAgIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCAKLSAgICA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgODYsIAotICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCAKLSAgICA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIAotICAgIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCAKLSAgICA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgODYsIAotICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCAKLSAgICA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIAotICAgIDUxLCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCAKLSAgICA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIAotICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCAKLSAgICA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIAotICAgIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCAKLSAgICA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIAotICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCAKLSAgICA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIAotICAgIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCAKLSAgICA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgODYsIAotICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCAKLSAgICA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIAotICAgIDU0LCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCAKLSAgICA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIAotICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCAKLSAgICA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIAotICAgIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDg3LCA3MiwgNzMsIDg0LCA2OSwgNDUsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAKLSAgICA2OSwgMTk2LCA4OSwgODAsIDc5LCA3MSwgNjksIDcxLCA4MiwgNjUsIDc3LCA3NywgNjksIDc4LCA3MywgMTI4LCA4MiwgNzMsIAotICAgIDcxLCA3MiwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCAKLSAgICA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgCi0gICAgNzksIDg3LCA2OSwgMTk2LCA2NiwgNjUsIDc2LCA3NiwgNzksIDc5LCA3OCwgNDUsIDgzLCA4MCwgNzksIDc1LCA2OSwgMTk2LCAKLSAgICA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgCi0gICAgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzIsIAotICAgIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA2NSwgODIsIDcxLCA3OSwgODMsIDg5LCA3OCwgODQsIDcyLCA2OSwgODQsIDc5LCAKLSAgICA3OCwgMTI4LCA2NSwgODMsIDg5LCA3NywgODAsIDg0LCA3OSwgODQsIDczLCA2NywgNjUsIDc2LCA3NiwgMjE3LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCAKLSAgICA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDc5LCA3MSwgCi0gICAgODIsIDY1LCA3NywgMTI4LCA4MCwgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIDY1LCA4MiwgMTI4LCAKLSAgICA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgCi0gICAgODAsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzIsIAotICAgIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgODIsIDY5LCA4MCwgNzksIDc4LCA2OCwgNjksIDgyLCA2NSwgNzgsIDY3LCAKLSAgICA2OSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4NCwgNjksIAotICAgIDg0LCA2NSwgODIsIDg0LCA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAKLSAgICA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MiwgCi0gICAgNzksIDg1LCA3OCwgMTk2LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCAKLSAgICA2NSwgODYsIDY1LCA3NSwgODIsIDY1LCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg5LCA2NSwgMTI4LCA2NiwgNzksIDg0LCA4NCwgCi0gICAgNzksIDc3LCA0NSwgNzYsIDczLCA3MSwgNzIsIDg0LCA2OSwgMTk2LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgNDUsIAotICAgIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDY3LCA3MywgNjksIDg1LCAKLSAgICA2NywgMTI4LCA2NywgNzIsIDgyLCA4OSwgODMsIDY1LCA3OCwgODQsIDcyLCA2OSwgNzcsIDg1LCA3NywgMTI4LCA2NywgNzksIAotICAgIDc4LCA4NCwgNjksIDc3LCA4MCwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OSwgNzcsIDY2LCA2OSwgNzYsIDc2LCA3MywgODMsIDcyLCA3NywgCi0gICAgNjksIDc4LCA4NCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCAKLSAgICA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgCi0gICAgNzEsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzIsIAotICAgIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgyLCA3MywgNjksIDg1LCAKLSAgICA3NiwgMTI4LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA2NSwgMjEwLCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCAKLSAgICA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzIsIDczLCA2OSwgCi0gICAgODUsIDY3LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCAKLSAgICA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc5LCA4MywgMjExLCA4MywgNzIsIDc5LCA4MiwgCi0gICAgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDgzLCA3OSwgMjA0LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIAotICAgIDczLCA3MSwgNDUsIDg0LCA4OSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDg5LCAKLSAgICA4MiwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzMsIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCA4MywgODQsIAotICAgIDgyLCA3MywgNzUsIDY5LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA4NCwgNzIsIDY5LCA4MiwgNzcsIDc5LCAKLSAgICA2OCwgODksIDc4LCA2NSwgNzcsIDczLCA2NywgMTI4LCA4OSwgODUsIDg1LCA3NSwgNjUsIDc2LCA2OSwgNjUsIDgwLCA3MywgCi0gICAgNzgsIDg0LCA4NSwgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDY1LCAKLSAgICA3OCwgODQsIDczLCA2NywgNzYsIDc5LCA2NywgNzUsIDg3LCA3MywgODMsIDE5NywgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MCwgCi0gICAgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIAotICAgIDc4LCAxMjgsIDY1LCA4MCwgODAsIDgyLCA3OSwgODgsIDczLCA3NywgNjUsIDg0LCA2OSwgNzYsIDIxNywgNjgsIDczLCA3MCwgCi0gICAgNzAsIDY5LCA4MiwgNjksIDc4LCA4NCwgNzMsIDY1LCA3NiwgMTI4LCA2OCwgNzksIDg3LCA3OCwgNDUsIDgwLCA3OSwgNzMsIAotICAgIDc4LCA4NCwgNzMsIDc4LCAxOTksIDgwLCA2NSwgODIsIDY5LCA4MywgODQsIDczLCA3MSwgNzcsIDY5LCA3OCwgNzksIDIwNiwgCi0gICAgNjcsIDgyLCA4OSwgODAsIDg0LCA3OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA3MywgMTk1LCA2OSwgNzEsIDg5LCA4MCwgODQsIAotICAgIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDQ1LCA3NywgNzMsIDc4LCAKLSAgICA4NSwgODMsIDEyOCwgNjcsIDc5LCA3OCwgNjcsIDY1LCA4NiwgNjksIDQ1LCA4MywgNzMsIDY4LCA2OSwgMTk2LCA3NiwgNjksIAotICAgIDcwLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDgyLCA3MywgNzEsIDcyLCAyMTIsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCAKLSAgICA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCi0gICAgMTI4LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzksIDQ1LCA3NiwgNjksIDcwLCAyMTIsIDg0LCA4MiwgNjUsIDc4LCAKLSAgICA4MywgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgNjcsIDgyLCA3OSwgODMsIDgzLCA2OSwgNjgsIDQ1LCA4NCwgCi0gICAgNjUsIDczLCA3NiwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDQ5LCAxMjgsIDY4LCAKLSAgICA4MiwgNzksIDgwLCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgNzEsIDY1LCA2OSwgODQsIDg0LCA2NSwgCi0gICAgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgNzYsIAotICAgIDc2LCAyMTcsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDgyLCA4MCwgNzksIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA3NSwgNzMsIAotICAgIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgCi0gICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4NCwgNzIsIDczLCA4MiwgODQsIAotICAgIDg5LCA0NSwgODMsIDY5LCA2NywgNzksIDc4LCAxOTYsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA2OSwgNzMsIDcxLCAKLSAgICA3MiwgODQsIDIwMCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDg0LCA3MiwgODIsIDY5LCA2OSwgMTI4LCA2NSwgNjcsIAotICAgIDY3LCA4NSwgNzcsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDc3LCAKLSAgICA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNjUsIDc1LCA4NCwgNzMsIDY5LCA4MywgNjksIDc2LCA4MywgNzUsIDY1LCA2NiwgCi0gICAgMTI4LCA2NSwgNzgsIDY1LCA4NCwgODIsIDczLCA2NywgNzIsIDczLCA4MywgNzcsIDY1LCAxMjgsIDY1LCA4NSwgODIsIDY1LCAKLSAgICA3NywgNjUsIDkwLCA2OCwgNjUsIDY1LCA0NSwgNTAsIDEyOCwgNjUsIDg1LCA4MiwgNjUsIDc3LCA2NSwgOTAsIDY4LCA2NSwgCi0gICAgNjUsIDcyLCA2NSwgMTI4LCA2NiwgODIsIDY5LCA2NSwgNzUsIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIDY2LCAKLSAgICA4MiwgNjksIDg2LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgCi0gICAgODUsIDc3LCA4MywgNzMsIDc5LCA4MywgMTI4LCA2NywgODksIDc2LCA3MywgNzgsIDY4LCA4MiwgNzMsIDY3LCA3MywgODQsIAotICAgIDg5LCAxMjgsIDY4LCA2OSwgNjcsIDczLCA4MywgNzMsIDg2LCA2OSwgNzgsIDY5LCA4MywgODMsIDEyOCwgNjgsIDY5LCA3MCwgCi0gICAgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgNzgsIDY5LCA4MywgMjExLCA2OCwgNzMsIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIAotICAgIDg0LCA3MywgNjksIDgzLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgNzMsIDgzLCA3MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgCi0gICAgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIAotICAgIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDUxLCAxMjgsIDY4LCA3MywgODMsIDY3LCA3OSwgNzgsIDg0LCA3MywgNzgsIDg1LCAKLSAgICA3OSwgODUsIDIxMSwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKLSAgICA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgCi0gICAgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY5LCAKLSAgICA4NSwgODIsIDc5LCA0NSwgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgNjcsIDIxNywgNzAsIDc2LCA2OSwgODUsIDgyLCA0NSwgCi0gICAgNjgsIDY5LCA0NSwgNzYsIDczLCA4MywgMTI4LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIAotICAgIDc4LCAxMjgsIDcxLCA4MiwgNzksIDc4LCA4NCwgNzIsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzIsIDg5LCA4MCwgCi0gICAgNzksIDY4LCA3MywgNjUsIDgzLCA4NCwgNzksIDc2LCA2OSwgMTI4LCA3MywgNjcsIDY5LCA3NiwgNjUsIDc4LCA2OCwgNzMsIAotICAgIDY3LCA0NSwgODksIDgyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgCi0gICAgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCA3MywgMTk1LCA3NCwgODUsIDY4LCA2OSwgNzksIAotICAgIDQ1LCA4MywgODAsIDY1LCA3OCwgNzMsIDgzLCAyMDAsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MiwgNzMsIDY5LCAKLSAgICA4NSwgNzYsIDEyOCwgNzYsIDY1LCA2NiwgNzMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NywgNjUsIAotICAgIDY3LCA4MiwgNzksIDc4LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCAKLSAgICA2NiwgODIsIDY5LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgCi0gICAgMTI4LCA3NywgNzMsIDc4LCA4NSwgODMsIDQ1LCA3OSwgODIsIDQ1LCA4MCwgNzYsIDg1LCAyMTEsIDc3LCA3OSwgODIsIDgwLCAKLSAgICA3MiwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3OSwgODUsIDg0LCA3NiwgCi0gICAgNzMsIDc4LCA2OSwgMTk2LCA4MCwgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgyLCAKLSAgICA4NSwgNzYsIDY5LCA0NSwgNjgsIDY5LCA3NiwgNjUsIDg5LCA2OSwgNjgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIAotICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTMsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU0LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIAotICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTEsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIAotICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDksIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NiwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUwLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIAotICAgIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTcsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDU0LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDQ4LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIAotICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTUsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MiwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU2LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDU3LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIAotICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTMsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDQ4LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU0LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIAotICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTEsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUyLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIAotICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNDksIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NiwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUwLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIAotICAgIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTcsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1NCwgCi0gICAgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDY1LCAyMTAsIDgzLCA3MywgNzksIDgzLCAKLSAgICA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzIsIDczLCA2OSwgCi0gICAgODUsIDc1LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDcxLCA3MSwgCi0gICAgNzMsIDgzLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgODQsIDc4LCA2OSwgODMsIAotICAgIDgzLCAxMjgsIDg0LCA3MiwgODUsIDc4LCA2OCwgNjksIDgyLCA4MywgODQsIDc5LCA4MiwgNzcsIDEyOCwgODQsIDczLCA3NSwgCi0gICAgNjksIDg1LCA4NCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIAotICAgIDgzLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA2OSwgNzMsIDcxLCA3MiwgODQsIDEyOCwgCi0gICAgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDgzLCA2OSwgODYsIDY5LCA3OCwgMTI4LCA4NiwgNzksIDg3LCA2OSwgNzYsIAotICAgIDQ1LCA2NywgNjUsIDgyLCA4MiwgNzMsIDY5LCAyMTAsIDg4LCA4MywgNzIsIDY1LCA2NSwgODksIDY1LCA4NCwgNzIsIDczLCAKLSAgICA4OSwgNjUsIDEyOCwgODksIDc5LCA4NSwgODQsIDcyLCA3MCwgODUsIDc2LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODIsIAotICAgIDY5LCA2NSwgODQsIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDIwNiwgNzMsIDc4LCA4MywgODQsIDgyLCA4NSwgNzcsIDY5LCAKLSAgICA3OCwgODQsIDY1LCAyMDQsIDY1LCA4MiwgNjUsIDY2LCA3MywgNjcsIDQ1LCA3MywgNzgsIDY4LCA3MywgMTk1LCA4MCwgODIsIAotICAgIDY5LCA4MywgNjksIDc4LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCAKLSAgICA2OSwgNzgsIDczLCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCA4MywgMTI4LCA2NywgNDUsIAotICAgIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIDE5NiwgODAsIDg1LCA3OCwgNjcsIDg0LCA4NSwgNjUsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA2NywgNjUsIAotICAgIDc4LCA2OCwgODIsIDY1LCA2NiwgNzMsIDc4LCA2OCwgODUsIDEyOCwgNjksIDgyLCA4MiwgNzksIDgyLCA0NSwgNjYsIDY1LCAKLSAgICA4MiwgODIsIDY5LCAxOTYsIDgzLCA4NSwgNjYsIDgzLCA4NCwgNzMsIDg0LCA4NSwgODQsIDczLCA3OSwgMjA2LCA2NiwgNzYsIAotICAgIDY1LCA2NywgNzUsIDQ1LCA3NiwgNjksIDg0LCA4NCwgNjksIDIxMCwgNjUsIDgwLCA4MCwgODIsIDc5LCA4OCwgNzMsIDc3LCAKLSAgICA2NSwgODQsIDY5LCAxMjgsIDY3LCA2NSwgNzgsIDg0LCA3MywgNzYsIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgNzUsIAotICAgIDcwLCA3OSwgNzgsIDczLCA4NCwgNzMsIDc1LCA3OSwgNzgsIDEyOCwgNzQsIDQ1LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCAKLSAgICA3MCwgNzMsIDY5LCAxOTYsIDc3LCA3MywgNjgsIDY4LCA3NiwgNjksIDQ1LCA4NywgNjksIDc2LCA4MywgMjAwLCA4MiwgNzMsIAotICAgIDY5LCA4NSwgNzYsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDc5LCA4NSwgODQsIDcyLCA0NSwgODMsIDc2LCAKLSAgICA2NSwgODYsIDY5LCAyMTcsIDY1LCA2NiwgNjYsIDgyLCA2OSwgODYsIDczLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgODMsIAotICAgIDg0LCA4MiwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNzEsIDY1LCA4OSwgNjUsIDc4LCA4NSwgNzUsIDczLCAKLSAgICA4NCwgODQsIDY1LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3OCwgNzMsIAotICAgIDY5LCA4NSwgNzgsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzIsIDczLCAKLSAgICA2OSwgODUsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCA4MiwgNzMsIAotICAgIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCAKLSAgICA2OSwgODUsIDgwLCAxMjgsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MywgODMsIAotICAgIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNjUsIDY3LCA3NSwgNzgsIDc5LCA4NywgNzYsIDY5LCAKLSAgICA2OCwgNzEsIDY5LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIAotICAgIDg0LCA2OSwgODIsIDgyLCA3OSwgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCAKLSAgICA4NCwgNzMsIDc4LCAxOTksIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MSwgODUsIAotICAgIDczLCA3OCwgNjgsIDczLCA2NywgNjksIDgzLCA3MywgNzcsIDE5MywgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzgsIDczLCAKLSAgICA2OSwgODUsIDc4LCAxMjgsIDgzLCA3MywgODgsIDg0LCA4OSwgNDUsIDcwLCA3OSwgODUsIDgyLCA4NCwgMjAwLCA4NCwgODIsIAotICAgIDczLCA4NCwgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDcwLCAKLSAgICA3OSwgODUsIDgyLCAxMjgsIDg3LCA2OSwgNjgsIDcxLCA2OSwgNDUsIDg0LCA2NSwgNzMsIDc2LCA2OSwgMTk2LCA2NSwgNjksIAotICAgIDgzLCA2NywgODUsIDc2LCA2NSwgODAsIDczLCA4NSwgODMsIDEyOCwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDY1LCA3NywgNjUsIDc2LCA3MSwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgODAsIAotICAgIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjUsIDg1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDY1LCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDY3LCA2NSwgNzgsIDY3LCA2OSwgNzYsIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNzMsIAotICAgIDY5LCA4NSwgNjcsIDQ1LCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjcsIDc5LCA3OCwgNzQsIDg1LCA3OCwgNjcsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzgsIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIAotICAgIDc4LCA4NCwgODIsIDY1LCA4MiwgNzMsIDY5LCA4NCwgODksIDEyOCwgNjcsIDc5LCA4MiwgODAsIDc5LCA4MiwgNjUsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgODUsIDc4LCA4NCwgNjksIDgyLCA2NiwgNzksIDgyLCA2OSwgMTI4LCA2NywgNzksIAotICAgIDg1LCA3OCwgODQsIDY5LCA4MiwgODMsIDczLCA3OCwgNzUsIDEyOCwgNjgsIDY1LCA3MiwgODksIDY1LCA2NSwgODUsIDgzLCAKLSAgICA3MiwgNDUsIDUwLCAxMjgsIDY4LCA2OSwgNjcsIDgyLCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3OSwgMTI4LCA2OCwgNjksIAotICAgIDc2LCA3MywgODYsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAKLSAgICA4NCwgNzksIDgyLCAxMjgsIDY4LCA2OSwgODIsIDY5LCA4NCwgNDUsIDcyLCA3MywgNjgsIDY5LCA4NCwgMTI4LCA2OCwgNjksIAotICAgIDg2LCA2OSwgNzYsIDc5LCA4MCwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjgsIDczLCA4MywgODQsIDczLCA3OCwgNzEsIDg1LCAKLSAgICA3MywgODMsIDcyLCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIDY5LCA2OSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKLSAgICA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKLSAgICA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCAKLSAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCAKLSAgICA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCAKLSAgICA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCAKLSAgICA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDY5LCAKLSAgICA3OCwgNjgsIDY5LCAxOTYsIDY5LCA2NSwgNzcsIDcyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgNzgsIAotICAgIDc2LCA2NSwgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjksIDg4LCA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDc4LCA2NSwgNzMsIDc2LCA4MywgMTI4LCA3MCwgODIsIAotICAgIDc5LCA3OCwgODQsIDQ1LCA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgNjgsIDc4LCAKLSAgICA2OSwgODMsIDgzLCAxMjgsIDcyLCA2NSwgODUsIDgwLCA4NCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3MiwgNzMsIAotICAgIDY5LCA4NSwgNzIsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzgsIDczLCAKLSAgICA2OSwgODUsIDc4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MiwgNzMsIAotICAgIDY5LCA4NSwgNzIsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgNzYsIDc2LCAyMTcsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3MywgNjksIAotICAgIDg1LCA3OCwgNzEsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDczLCAKLSAgICA2OSwgODUsIDgwLCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIAotICAgIDg0LCA2OSwgODIsIDY3LCA2NSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgNzQsIDczLCA3MiwgODYsIDY1LCA3NywgODUsIDc2LCAKLSAgICA3MywgODksIDY1LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NiwgNjUsIAotICAgIDc1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIDg5LCA2NSwgNzksIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzIsIDczLCAKLSAgICA2OSwgODUsIDcyLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NywgODUsIAotICAgIDg1LCA4MywgNzMsIDc1LCA2NSwgODQsIDc5LCA2NSwgNzgsIDEyOCwgNzgsIDY1LCA2NSwgNzUsIDgzLCA3MywgNzUsIDg5LCAKLSAgICA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgODMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjksIAotICAgIDY2LCA2OSwgNzgsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDczLCAKLSAgICA2OSwgODUsIDgwLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA2NiwgODIsIDY5LCA2NSwgNzUsIDczLCA3OCwgMTk5LCA3OSwgNjYsIAotICAgIDgzLCA4NCwgODIsIDg1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCAKLSAgICA3MywgNzUsIDczLCAxMjgsIDgwLCA2OSwgNzgsIDY5LCA4NCwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIAotICAgIDgyLCA4MywgODAsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzgsIDczLCAKLSAgICA2OSwgODUsIDc4LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MCwgNzksIAotICAgIDgzLCA4NCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNzMsIAotICAgIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgODIsIDczLCA3OCwgNzAsIDc5LCA4MiwgOTAsIDY1LCAKLSAgICA3OCwgNjgsIDc5LCAxMjgsIDgyLCA3OSwgODUsIDc4LCA2OCwgNDUsIDg0LCA3MywgODAsIDgwLCA2OSwgMTk2LCA4MywgNjUsIAotICAgIDcxLCA3MywgODQsIDg0LCA2NSwgODIsIDczLCA4NSwgODMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTMsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTcsIDEyOCwgODMsIDY5LCA3NywgNzMsIDgzLCA2OSwgODgsIDg0LCAKLSAgICA3MywgNzYsIDY5LCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIDcxLCA2OSwgODMsIDY1LCA3OCwgMTk5LCA4MywgODUsIAotICAgIDgwLCA2OSwgODIsIDczLCA3NywgODAsIDc5LCA4MywgNjksIDE5NiwgODQsIDY5LCA4NCwgODIsIDY1LCA3MCwgNzksIDc4LCAKLSAgICA3MywgNjUsIDgzLCAxMjgsIDg0LCA3MiwgNjUsIDc4LCA4NCwgNzIsIDY1LCA3NSwgNzIsIDY1LCA4NCwgMTI4LCA4NCwgNzIsIAotICAgIDgyLCA2OSwgNjksIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgODQsIDc5LCA2NSwgNzgsIDY4LCA2NSwgNzUsIDcyLCAKLSAgICA3MywgNjUsIDg0LCAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCA4MywgODMsIDczLCA3OSwgMjA2LCA4NCwgODcsIAotICAgIDY5LCA3OCwgODQsIDg5LCA0NSwgNzAsIDczLCA4NiwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDc4LCAKLSAgICA3MywgNzgsIDY5LCAxMjgsIDg1LCA3OCwgNjUsIDgzLCA4MCwgNzMsIDgyLCA2NSwgODQsIDY5LCA2OCwgMTI4LCA4NSwgODAsIAotICAgIDY1LCA2OCwgNzIsIDc3LCA2NSwgNzgsIDczLCA4OSwgNjUsIDEyOCwgODAsIDg1LCA3OCwgNjcsIDg0LCA4NSwgNjUsIDg0LCAKLSAgICA3MywgNzksIDIwNiwgNjcsIDczLCA4MiwgNjcsIDg1LCA3NywgNzAsIDc2LCA2OSwgODgsIDEyOCwgODMsIDg1LCA4MCwgNjksIAotICAgIDgyLCA4MywgNjcsIDgyLCA3MywgODAsIDIxMiwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDEyOCwgCi0gICAgNjksIDg4LCA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA2OCwgNjksIDgwLCA2OSwgNzgsIAotICAgIDY4LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIDIwMSwgNjgsIDY5LCA4MywgCi0gICAgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgNzksIDIwNiwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIAotICAgIDIxMSwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzcsIDY1LCA3MiwgNjUsIDY1LCA4MCwgCi0gICAgODIsIDY1LCA2NSwgNzgsIDE5MywgNjUsIDgwLCA3OSwgODMsIDg0LCA4MiwgNzksIDgwLCA3MiwgNjksIDEyOCwgNjcsIDcyLCAKLSAgICA2NSwgODIsIDY1LCA2NywgODQsIDY5LCA4MiwgODMsIDEyOCwgODUsIDgwLCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgCi0gICAgNzgsIDE5OSwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzMsIDc3LCA4MCwgNjksIDgyLCAKLSAgICA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgNjUsIAotICAgIDgyLCA4MiwgNzksIDg3LCA0NSwgODQsIDY1LCA3MywgNzYsIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCAKLSAgICA3NywgNjksIDE5NywgNjUsIDY5LCA3NiwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjUsIDc2LCA4NCwgNjksIAotICAgIDgyLCA3OCwgNjUsIDg0LCA3MywgODYsIDE5NywgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzMsIAotICAgIDc4LCA2OSwgNjUsIDIxMCwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgNzksIDgwLCA4MCwgCi0gICAgNzksIDgzLCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDczLCA3OSwgODMsIAotICAgIDEyOCwgODMsIDY5LCA3NywgNzMsIDQ1LCA4NiwgNzksIDczLCA2NywgNjksIDE5NiwgODMsIDgzLCA2NSwgNzgsIDcxLCA3MywgCi0gICAgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDg1LCA4MCwgODIsIDY1LCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgNjUsIDY5LCAKLSAgICA2OCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjcsIDc5LCA3OCwgODMsIDY5LCA2NywgODUsIDg0LCA3MywgCi0gICAgODYsIDE5NywgNjgsIDczLCA4NiwgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCAKLSAgICA4MCwgODIsIDczLCA4MywgNjksIDEyOCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgNzcsIAotICAgIDc5LCA3OCwgNzksIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDc3LCAKLSAgICA3NywgNzksIDIxMSwgNzgsIDY1LCA2NSwgODMsIDczLCA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIDczLCA2OSwgODUsIAotICAgIDc4LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgODAsIDgwLCA3MywgNzgsIDE5OSwgCi0gICAgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDE5MywgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIAotICAgIDg0LCA3MywgNzUsIDIwMSwgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgODIsIDgzLCA3MiwgNzMsIDIwOCwgODAsIDY5LCA4MiwgCi0gICAgNjcsIDg1LCA4MywgODMsIDczLCA4NiwgNjksIDEyOCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDIxMCwgODIsIDY5LCA2NywgODQsIDczLCA3NiwgCi0gICAgNzMsIDc4LCA2OSwgNjUsIDIxMCwgODIsIDY5LCA4MCwgNzYsIDY1LCA2NywgNjksIDc3LCA2OSwgNzgsIDIxMiwgODMsIDY1LCAKLSAgICA3NiwgNzYsIDY1LCA3NiwgNzYsIDY1LCA3MiwgNzksIDIxMywgODMsIDczLCA3OSwgODMsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgCi0gICAgNzgsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODMsIAotICAgIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODQsIDY1LCA2NiwgODUsIDc2LCA2NSwgODQsIDczLCAKLSAgICA3OSwgNzgsIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgODQsIDcyLCA2OSwgNzcsIAotICAgIDY1LCA4NCwgNzMsIDgzLCA3NywgNzksIDIxMSwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDc5LCA3OCwgNjksIDEyOCwgCi0gICAgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDg0LCA4NywgNzksIDEyOCwgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIAotICAgIDg0LCA3MywgNzksIDIwNiwgNjUsIDc4LCA3MSwgNzUsIDcyLCA2NSwgNzgsIDc1LCA3MiwgODUsIDEyOCwgNjUsIDc4LCA4NCwgCi0gICAgNzMsIDc1LCA2OSwgNzgsIDc5LCA3NywgNjUsIDEyOCwgNjUsIDc4LCA4NSwgODMsIDg2LCA2NSwgODIsIDY1LCA4OSwgNjUsIAotICAgIDEyOCwgNjUsIDgwLCA3OSwgODMsIDg0LCA4MiwgNzksIDcwLCA3OSwgODMsIDEyOCwgNjUsIDgzLCA4NCwgNjksIDgyLCA3MywgCi0gICAgODMsIDY3LCA4NSwgODMsIDEyOCwgNjUsIDg1LCA4MiwgNjUsIDc3LCA2NSwgOTAsIDY4LCA2NSwgNjUsIDEyOCwgNjYsIDY1LCAKLSAgICA2NywgNzUsIDQ1LCA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNjYsIDY1LCA4MiwgNzMsIDg5LCA3OSwgNzksIDgzLCA2NSwgCi0gICAgNzgsIDEyOCwgNjYsIDY1LCA4NCwgNzIsIDY1LCA3NywgNjUsIDgzLCA2NSwgODQsIDEyOCwgNjcsIDczLCA4MiwgNjcsIDg1LCAKLSAgICA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjcsIDc2LCA4NSwgNjYsIDQ1LCA4MywgODAsIDc5LCA3NSwgNjksIDE5NiwgNjcsIAotICAgIDc5LCA3NywgODAsIDc2LCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjcsIDc5LCA3NywgODAsIDc2LCA3MywgNjUsIDc4LCAKLSAgICA2NywgNjksIDEyOCwgNjcsIDc5LCA3NywgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgNjcsIDc5LCA3OCwgODQsIAotICAgIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIDc5LCA4MiwgODIsIDY5LCA4MywgODAsIDc5LCA3OCwgNjgsIDIxMSwgCi0gICAgNjcsIDgyLCA3OSwgODMsIDgzLCA2NiwgNzksIDc4LCA2OSwgODMsIDEyOCwgNjgsIDY1LCA3MSwgNjYsIDY1LCA4MywgNzMsIAotICAgIDc4LCA3OCwgNjUsIDEyOCwgNjgsIDY5LCA3MCwgNzMsIDc4LCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDY5LCA3OCwgCi0gICAgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA5MCwgNjksIAotICAgIDE5NiwgNjgsIDczLCA3NywgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgCi0gICAgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA4MywgODAsIDY5LCA4MiwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCAKLSAgICA4MywgODQsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4NiwgNjksIDgyLCA3MSwgNjksIDc4LCA2NywgCi0gICAgNjksIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKLSAgICA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAotICAgIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAKLSAgICA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIAotICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgCi0gICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MCwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKLSAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjksIDc1LCA4MywgODQsIDgyLCA2OSwgODAsIDg0LCA3OSwgNzgsIDEyOCwgNjksIAotICAgIDc3LCA2NiwgODIsIDc5LCA3MywgNjgsIDY5LCA4MiwgODksIDEyOCwgNjksIDc4LCA2NywgNzksIDg1LCA3OCwgODQsIDY5LCAKLSAgICA4MiwgODMsIDEyOCwgNjksIDc4LCA4NCwgNzIsIDg1LCA4MywgNzMsIDY1LCA4MywgNzcsIDEyOCwgNjksIDgxLCA4NSwgNzMsIAotICAgIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDIxMCwgNjksIDg4LCA3MiwgNjUsIDg1LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgNzAsIDY1LCA3MiwgODIsIDY5LCA3OCwgNzIsIDY5LCA3MywgODQsIDEyOCwgNzAsIDY5LCA3NiwgNzYsIDc5LCA4NywgODMsIAotICAgIDcyLCA3MywgODAsIDEyOCwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgODQsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4NSwgCi0gICAgODIsIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MywgODQsIDgyLCA3MywgNzgsIAotICAgIDE5OSwgNzEsIDY2LCA2NSwgNzUsIDg1LCA4MiwgODUsIDc4LCA2OSwgNzgsIDEyOCwgNzIsIDY2LCA2NSwgODMsIDY1LCA0NSwgCi0gICAgNjksIDgzLCA2NSwgODMsIDE5MywgNzIsIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCA3MywgNjcsIDEyOCwgNzIsIDg5LCAKLSAgICA4MCwgNzIsIDY5LCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc3LCA3MywgNjgsIDczLCA2NSwgODIsIDcxLCA3OSwgCi0gICAgNzgsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCA3MCwgNzksIDgyLCAKLSAgICA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzksIDY3LCA3NSwgNjksIDE5NiwgNzUsIAotICAgIDczLCA4MiwgNzksIDcxLCA4NSwgODIsIDY1LCA3NywgODUsIDEyOCwgNzUsIDg1LCA3OCwgNjgsIDY4LCA2NSwgNzYsIDczLCAKLSAgICA4OSwgNjUsIDEyOCwgNzYsIDY1LCA3NCwgNjUsIDc4LCA4OSwgNjUsIDc2LCA2NSwgNzgsIDEyOCwgNzYsIDY5LCA3MCwgODQsIAotICAgIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgNjksIDc4LCA2OSwgODIsIDEyOCwgCi0gICAgNzYsIDczLCA3NywgNzMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgODMsIAotICAgIDcyLCA3MywgODAsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzgsIDY1LCA3OCwgCi0gICAgNzEsIDc3LCA3OSwgNzgsIDg0LCA3MiwgNzksIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDc0LCA3OSwgNzMsIDc4LCA2OSwgODIsIAotICAgIDEyOCwgNzgsIDc5LCA3OCwgNzAsIDc5LCA4MiwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNzksIDgwLCA4MCwgODIsIDY5LCA4MywgCi0gICAgODMsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCA5MCwgNjksIDE5NiwgODAsIDY1LCAKLSAgICA3OCwgNjUsIDY5LCA3NiwgNjUsIDY5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNjksIDg1LCA3NiwgNjksIDg1LCA3OCwgCi0gICAgNzEsIDEyOCwgODAsIDY1LCA4NCwgNzIsIDY1LCA3NywgNjUsIDgzLCA2NSwgODQsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCAKLSAgICA4NCwgODIsIDczLCA2NSwgNzgsIDEyOCwgODAsIDc5LCA4MywgODMsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODAsIAotICAgIDgyLCA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgNzQsIDY5LCA2NywgODQsIDczLCAKLSAgICA4NiwgNjksIDEyOCwgODIsIDY1LCA2OCwgNzMsIDc5LCA2NSwgNjcsIDg0LCA3MywgODYsIDE5NywgODIsIDY1LCA3MiwgNzcsIAotICAgIDY1LCA4NCwgODUsIDc2LCA3NiwgNjUsIDIwMCwgODIsIDY5LCA4MywgNzMsIDgzLCA4NCwgNjUsIDc4LCA2NywgNjksIDEyOCwgCi0gICAgODIsIDY5LCA4MywgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4NiwgNzksIDc2LCA4NSwgODQsIAotICAgIDczLCA3OSwgNzgsIDEyOCwgODMsIDY1LCA2NywgODIsIDczLCA3MCwgNzMsIDY3LCA3MywgNjUsIDIwNCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTcsIDEyOCwgODMsIDcyLCA2NSwgNzYsIDgzLCA3MiwgNjksIDc2LCA2OSwgODQsIDEyOCwgODMsIAotICAgIDczLCA3OSwgODMsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MywgNjksIDg1LCAKLSAgICA3OCwgNzEsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODMsIDgzLCA2NSwgNzgsIAotICAgIDcxLCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgODMsIDg0LCA2NSwgNzgsIDY4LCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgCi0gICAgODMsIDg1LCA2NiwgODAsIDg1LCA3OCwgNjcsIDg0LCA3MywgODMsIDEyOCwgODMsIDg1LCA2NiwgODMsIDg0LCA3MywgODQsIAotICAgIDg1LCA4NCwgNjksIDEyOCwgODMsIDg5LCA3OCwgNjcsIDcyLCA4MiwgNzksIDc4LCA3OSwgODUsIDIxMSwgODQsIDY5LCA4MiwgCi0gICAgNzcsIDczLCA3OCwgNjUsIDg0LCA3OSwgODIsIDEyOCwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgNDUsIDc5LCA3OCwgNjksIAotICAgIDEyOCwgODQsIDc5LCA4MCwgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgNjksIDE5NiwgODQsIDgyLCA2NSwgNzgsIDgzLCA4NiwgCi0gICAgNjksIDgyLCA4MywgNjUsIDIwNCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDgzLCA3MywgODgsIDEyOCwgODYsIDY5LCAKLSAgICA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA3NiwgODksIDEyOCwgODcsIDczLCA2OCwgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgCi0gICAgNjksIDE5NiwgNjUsIDY3LCA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NywgNzMsIDgyLCA2NywgODUsIDc3LCAKLSAgICA3MCwgNzYsIDY5LCAyMTYsIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA2OSwgODIsIDEyOCwgODAsIDcyLCA3OSwgNjksIAotICAgIDc4LCA3MywgNjcsIDczLCA2NSwgMjA2LCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDY1LCA3OCwgCi0gICAgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDgxLCA4NSwgNzMsIDg2LCA2NSwgNzYsIDY5LCA3OCwgMjEyLCAKLSAgICA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDg0LCA4NywgNzksIDQ1LCA3MiwgNjksIDY1LCA2OCwgCi0gICAgNjksIDE5NiwgNjUsIDgyLCA4MiwgNzksIDg3LCA3MiwgNjksIDY1LCA2OCwgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCAKLSAgICA4MiwgNjgsIDgzLCAxMjgsIDY1LCA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNjksIDg4LCA4NCwgNjksIAotICAgIDc4LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDc4LCA4NCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgwLCA3MiwgCi0gICAgNjUsIDgyLCA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgODAsIDgyLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTk3LCAKLSAgICA4MywgNjksIDc3LCA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDg0LCA4NSwgODIsIDc4LCA4MywgODQsIDczLCA3NiwgCi0gICAgNjksIDEyOCwgNjUsIDc3LCA4MCwgNjksIDgyLCA4MywgNjUsIDc4LCA2OCwgMTI4LCA3NiwgNjksIDcwLCA4NCwgODcsIDY1LCAKLSAgICA4MiwgNjgsIDgzLCAxMjgsIDg0LCA4MiwgNzksIDY5LCA5MCwgNjksIDc4LCA3MywgNjUsIDIwNiwgNjcsIDc5LCA3NywgNzcsIAotICAgIDY5LCA4MiwgNjcsIDczLCA2NSwgMjA0LCA2OSwgODAsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIDgzLCA2OSwgCi0gICAgNzcsIDczLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDIxMiwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCA3OCwgMTI4LCAKLSAgICA4NywgNzksIDc5LCA2OCwgODMsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDY2LCA2NSwgNjcsIDc1LCA4MywgNzYsIDY1LCA4MywgCi0gICAgNzIsIDEyOCwgNjgsIDczLCA2NSwgNzYsIDg5LCA4NCwgNzMsIDc1LCA2NSwgMTI4LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCAKLSAgICA3MiwgNzMsIDcxLCAyMDAsIDcwLCA3MywgODgsIDY5LCA2OCwgNDUsIDcwLCA3OSwgODIsIDIwNSwgNzMsIDc3LCA4MCwgNjksIAotICAgIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA3MywgNzgsIDY4LCA3MywgNjcsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDgyLCA2OSwgCi0gICAgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgNjksIDEyOCwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCAKLSAgICA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCi0gICAgNzYsIDIxNywgNjcsIDc5LCA3OCwgODQsIDY1LCA3MywgNzgsIDczLCA3OCwgMTk5LCA2OCwgNjksIDc2LCA3MywgNzcsIDczLCAKLSAgICA4NCwgNjksIDgyLCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNjksIDgwLCA3MywgNjgsIAotICAgIDY1LCA4NSwgODIsIDY5LCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNzMsIDc5LCA3OCwgNzMsIDY1LCAyMDYsIDcyLCA3OSwgCi0gICAgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgODMsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA4MiwgNjUsIDc4LCA2NSwgMTI4LCAKLSAgICA4MywgNjksIDc3LCA3MywgNjYsIDgyLCA2OSwgODYsIDczLCAyMTEsIDgzLCA2OSwgNzcsIDczLCA3NywgNzMsIDc4LCA3MywgCi0gICAgNzcsIDE5MywgODMsIDc4LCA3OSwgODcsIDcwLCA3NiwgNjUsIDc1LCA2OSwgMTI4LCA2NSwgODAsIDc5LCA4MywgODQsIDgyLCAKLSAgICA3OSwgNzAsIDc5LCAyMDEsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIDc5LCA3MCwgNzksIDIxMSwgNjUsIDgyLCA4MCwgNjksIAotICAgIDcxLCA3MSwgNzMsIDY1LCA4NCwgMjA3LCA2NSwgODQsIDcyLCA2NSwgODAsIDY1LCA4MywgNjcsIDY1LCAyMDYsIDY3LCA2OSwgCi0gICAgNzgsIDg0LCA4MiwgNjksIDc2LCA3MywgNzgsIDE5NywgNjcsIDcyLCA2NSwgODIsIDY1LCA2NywgODQsIDY5LCA4MiwgMTI4LCAKLSAgICA2NywgNzksIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDY3LCA4MiwgNzksIDgzLCA4MywgNzIsIDY1LCA4NCwgCi0gICAgNjcsIDIwMCwgNjcsIDg1LCA2NSwgODQsIDgyLCA3MywgNzYsIDc2LCA3OSwgMTI4LCA2OCwgNjksIDgzLCA2NywgNjksIDc4LCAKLSAgICA2OCwgNzMsIDc4LCAxOTksIDY5LCA3NywgNjYsIDY5LCA2OCwgNjgsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDczLCA3OCwgNjUsIAotICAgIDc4LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA3MCwgNzksIDc2LCA3NiwgNzksIDg3LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA4MiwgCi0gICAgNjksIDg0LCA2NiwgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzEsIDY5LCA4MiwgODMsIDcyLCA2NSwgODksIDczLCA3NywgMTI4LCAKLSAgICA3MSwgNzksIDgyLCA4NCwgNzIsIDc3LCA3MywgNzUsIDc5LCAyMDYsIDczLCA2NywgNzIsIDczLCA3NywgNjUsIDg0LCA3OSwgCi0gICAgODMsIDEyOCwgNzUsIDcyLCA2NSwgNzUsIDY1LCA4MywgODMsIDczLCA2NSwgMjA2LCA4MCwgNjUsIDY1LCA0NSwgODAsIDczLCAKLSAgICA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCA4MiwgNjUsIAotICAgIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjksIDc4LCA4NCwgNjUsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDgwLCA3MiwgCi0gICAgNzMsIDc2LCA3MywgODAsIDgwLCA3MywgNzgsIDE5NywgODMsIDY5LCA3NywgNzMsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCAKLSAgICA4MywgODUsIDc3LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA4NSwgODAsIDY5LCA4MiwgODYsIDczLCA4MywgCi0gICAgNjksIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKLSAgICA0NSwgNDksIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTEsIDEyOCwgODMsIDg5LCA3NywgNjYsIAotICAgIDc5LCA3NiwgNDUsIDQ5LCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDU1LCAxMjgsIDgzLCA4OSwgCi0gICAgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1NywgMTI4LCAKLSAgICA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgCi0gICAgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKLSAgICA0NSwgNTMsIDQ5LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MywgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIAotICAgIDc5LCA3NiwgNDUsIDUzLCA1MSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDUyLCAxMjgsIDg0LCA2OSwgCi0gICAgNzYsIDY5LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCA4MywgNjksIDc3LCA2OSwgMTI4LCAKLSAgICA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDQ5LCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgCi0gICAgNTAsIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MSwgMTI4LCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCAKLSAgICA3NywgNzcsIDc5LCAyMTEsIDg0LCA4MiwgNzksIDc1LCA4NSwgODQsIDY1LCA4MywgODQsIDIwMSwgODYsIDczLCA4MywgNzMsIAotICAgIDcxLCA3OSwgODQsIDcyLCA3MywgMTk1LCA2NSwgNjUsIDY2LCA2NSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDY1LCA2NiwgCi0gICAgODUsIDc4LCA2OCwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDc2LCA0NSwgNzYsIDY1LCA3NSwgODUsIDc4LCA2NSwgMTI4LCAKLSAgICA2NSwgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDY1LCA3OCwgODQsIDczLCA3MCwgNzksIDc4LCA3MywgCi0gICAgNjUsIDEyOCwgNjUsIDgwLCA4MCwgODIsIDc5LCA2NSwgNjcsIDcyLCA2OSwgMjExLCA2NSwgODIsIDQ1LCA4MiwgNjUsIDcyLCAKLSAgICA2OSwgNjksIDc3LCAxMjgsIDY1LCA4MywgODMsIDY5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjUsIDg0LCA4NCwgNjksIAotICAgIDc4LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NiwgNjUsIDY3LCA3NSwgODMsIDgwLCA2NSwgNjcsIDY5LCAxMjgsIDY2LCA2OSwgCi0gICAgNzEsIDczLCA3OCwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNjYsIDczLCA2NiwgNzYsIDY5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCAKLSAgICA2NiwgNzksIDc5LCA3NywgNjksIDgyLCA2NSwgNzgsIDcxLCAxMjgsIDY3LCA2NSwgODAsIDgyLCA3MywgNjcsIDc5LCA4MiwgCi0gICAgNzgsIDEyOCwgNjcsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA2NywgNzYsIDc5LCA4MywgNjksIDc4LCAKLSAgICA2OSwgODMsIDgzLCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCA2OSwgNjgsIDEyOCwgNjcsIDc5LCA3OCwgNzQsIAotICAgIDc5LCA3MywgNzgsIDczLCA3OCwgMTk5LCA2NywgNzksIDc4LCA4MywgODQsIDY1LCA3OCwgNjcsIDg5LCAxMjgsIDY3LCA3OSwgCi0gICAgODAsIDg5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNjgsIDY1LCA3MiwgODksIDY1LCA2NSwgODUsIDgzLCA3MiwgMTI4LCAKLSAgICA2OCwgNjUsIDgyLCA3NSwgNjksIDc4LCA3MywgNzgsIDcxLCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgCi0gICAgNjksIDEyOCwgNjgsIDczLCA3MCwgNzAsIDY5LCA4MiwgNjksIDc4LCA2NywgMTk3LCA2OCwgNzMsIDcwLCA3MCwgNzMsIDY3LCAKLSAgICA4NSwgNzYsIDg0LCAyMTcsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgCi0gICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NSwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MCwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjksIDY5LCA2NiwgNjksIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCAKLSAgICA3MywgNjcsIDY1LCAyMDQsIDY5LCA3OCwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNzksIDIxMSwgNjksIDc4LCA2OCwgNjksIAotICAgIDY1LCA4NiwgNzksIDg1LCA4MiwgMTI4LCA2OSwgNzgsIDY4LCA3OSwgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDY5LCA4MywgCi0gICAgODQsIDczLCA3NywgNjUsIDg0LCA2OSwgODMsIDEyOCwgNjksIDg4LCA2NywgNjksIDc2LCA3NiwgNjksIDc4LCA4NCwgMTI4LCAKLSAgICA2OSwgODksIDY2LCA2OSwgODksIDcwLCA3MywgNzYsIDczLCAxMjgsIDcwLCA3OSwgNzksIDg0LCA4MywgODQsIDc5LCA3OSwgCi0gICAgNzYsIDEyOCwgNzAsIDc5LCA4MywgODQsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCAKLSAgICA3MywgODYsIDY5LCAxMjgsIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzEsIDY5LCA3NywgNzMsIAotICAgIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgNzgsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDcxLCA3OSwgCi0gICAgODIsIDcxLCA3OSwgODQsIDY5LCA4MiwgNzMsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCAKLSAgICA3MSwgODUsIDgyLCA2NSwgNzcsIDg1LCA4NCwgNzksIDc4LCAxMjgsIDcyLCA2OSwgNzUsIDg1LCA4NCwgNjUsIDY1LCA4MiwgCi0gICAgODUsIDEyOCwgNzIsIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCA3MywgMTk1LCA3MiwgODksIDgzLCA4NCwgNjksIDgyLCAKLSAgICA2OSwgODMsIDczLCAyMTEsIDczLCA3NiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDc3LCA3MywgNzAsIAotICAgIDg0LCA3MiwgNzksIDgyLCA2NSwgMTI4LCA3MywgNzgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCAxOTcsIDczLCA3OCwgCi0gICAgNjcsIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzMsIDc4LCA2OCwgODUsIDgzLCA4NCwgODIsIDczLCA2NSwgMjA0LCAKLSAgICA3MywgNzgsIDcwLCA3NiwgODUsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDczLCA3OCwgNzgsIDc5LCA2NywgNjksIDc4LCA2NywgCi0gICAgNjksIDEyOCwgNzMsIDgyLCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NCwgNjksIDgyLCA4NSwgODMsIDY1LCAKLSAgICA3NiwgNjksIDc3LCAxMjgsIDc1LCA2NSwgODQsIDY1LCA4NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDY5LCA3NywgODAsIAotICAgIDcyLCA4MiwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDc1LCA3MywgCi0gICAgODIsIDc5LCA4NywgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCAKLSAgICA3NSwgODUsIDgyLCA4NSwgOTAsIDY5LCA3MywgODIsIDc5LCAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4NSwgODIsIDczLCA3OCwgCi0gICAgNzEsIDEyOCwgNzYsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDc4LCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDc3LCA2NSwgNzMsIDg0LCA2NSwgNzMsIDc1LCA3MiwgODUsIDEyOCwgNzcsIDY1LCA4NCwgNjksIAotICAgIDgyLCA3MywgNjUsIDc2LCA4MywgMTI4LCA3NywgNjksIDg0LCA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAxMjgsIDc3LCA3MywgCi0gICAgODIsIDczLCA2NiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDgzLCA4NCwgNjUsIDY2LCA3NiwgMTk3LCAKLSAgICA3NywgNzksIDc5LCA4MywgNjksIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc3LCA4NSwgNDUsIDcxLCA2NSwgNjUsIDcyLCA3NiwgCi0gICAgNjUsIDE5MywgNzcsIDg1LCA3NSwgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgMTI4LCA3OCwgNzMsIDcxLCA3MSwgNjUsIDcyLCAKLSAgICA3MywgODQsIDY1LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDY5LCA4MywgNzIsIDEyOCwgNzgsIDczLCA3MSwgNzMsIAotICAgIDY4LCA2NSwgNzcsIDczLCA3OCwgMTI4LCA3OSwgNjUsIDY2LCA3OSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCA3OSwgCi0gICAgNjYsIDc5LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDgyLCA4NCwgNzIsIDc5LCA3MSwgNzksIDc4LCA2NSwgMjA0LCAKLSAgICA4MCwgNjUsIDczLCA4OSwgNjUsIDc4LCA3OCwgNzksIDczLCAxMjgsIDgwLCA2NSwgNzcsIDczLCA3OCwgNzEsIDc1LCA2NSwgCi0gICAgNzYsIDEyOCwgODAsIDY1LCA3NywgODUsIDc4LCA3MSwgNzUsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDY1LCAKLSAgICA4OSwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA4NywgNzMsIDgzLCA2NSwgNjgsIDEyOCwgODAsIDY1LCA4MiwgNjUsIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgMTI4LCA4MCwgNzMsIDY1LCA4MywgODUsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgwLCA3MywgCi0gICAgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgNzUsIDEyOCwgODAsIDczLCA5MCwgOTAsIDczLCA2NywgNjUsIDg0LCA3OSwgMTI4LCAKLSAgICA4MCwgNzYsIDg1LCA4MywgNDUsIDc3LCA3MywgNzgsIDg1LCAyMTEsIDgwLCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCA4NSwgCi0gICAgODMsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCA3OCwgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCAKLSAgICA4NSwgNzksIDg5LCAxMjgsIDgwLCA4MiwgNzksIDg0LCA3OSwgODYsIDY1LCA4MiwgODksIDIxMSwgODEsIDg1LCA2NSwgODQsIAotICAgIDY5LCA4MiwgNzgsIDczLCA3OSwgMjA2LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDY5LCAxOTYsIDgxLCA4NSwgCi0gICAgODMsIDcyLCA4MywgNzIsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY5LCA3MSwgNzMsIDgzLCA4NCwgNjksIDgyLCA2OSwgMTk2LCAKLSAgICA4MiwgNjksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgODAsIDgyLCA2OSwgODMsIDY5LCA3OCwgCi0gICAgODQsIDEyOCwgODIsIDY5LCA4MywgNzMsIDY4LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCA4NSwgODAsIDczLCAKLSAgICA3OCwgODUsIDgzLCAxMjgsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgODMsIDY3LCA2NSwgNzgsIAotICAgIDY4LCA3MywgNjcsIDg1LCA4MywgMTI4LCA4MywgNjksIDgwLCA4NCwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDgzLCA2OSwgCi0gICAgODMsIDg0LCA2OSwgODIsIDg0LCA3MywgODUsIDIxMSwgODMsIDY5LCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCAKLSAgICA4MywgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjksIDc4LCA2OSwgCi0gICAgODIsIDEyOCwgODMsIDcyLCA3OSwgODUsIDc2LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MywgNzMsIDg4LCA0NSwgODAsIDY5LCAKLSAgICA4MiwgNDUsIDY5LCAyMDUsIDgzLCA3MywgODgsIDQ1LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgODMsIDg0LCA4MiwgNzksIAotICAgIDc1LCA2OSwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDQ5LCAxMjgsIDgzLCA4NSwgCi0gICAgNjYsIDgzLCA4NCwgNzMsIDg0LCA4NSwgODQsIDE5NywgODMsIDg1LCA4MCwgNjksIDgyLCA3MCwgNzMsIDg4LCA2OSwgMTk2LCAKLSAgICA4MywgODUsIDgzLCA4MCwgNjksIDc4LCA4MywgNzMsIDc5LCAyMDYsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgCi0gICAgNDgsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1MywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKLSAgICA0NSwgNDksIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNDgsIDEyOCwgODMsIDg5LCA3NywgNjYsIAotICAgIDc5LCA3NiwgNDUsIDUwLCA0OSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDUwLCAxMjgsIDgzLCA4OSwgCi0gICAgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1NCwgMTI4LCAKLSAgICA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDU1LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgCi0gICAgNTcsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKLSAgICA0NSwgNTEsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIDg5LCA3NywgNjYsIAotICAgIDc5LCA3NiwgNDUsIDUxLCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDU2LCAxMjgsIDgzLCA4OSwgCi0gICAgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgNTcsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA0OCwgMTI4LCAKKyAgICAxOTcsIDcxLCA2OSwgNzksIDgyLCA3MSwgNzMsIDY1LCAyMDYsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCAyMDUsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIDY1LCA3NiwgCisgICAgNjksIDE5OCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgMTI4LCA4NCwgNzksIDEyOCwgODMsIDY3LCA4MiwgNzMsIDgwLCAKKyAgICAyMTIsIDg0LCA4NywgNzksIDEyOCwgNzksIDg2LCA2OSwgMjEwLCAyMTMsIDcyLCA2OSwgNjUsIDg2LCAyMTcsIDc5LCA3OCwgCisgICAgNjksIDEyOCwgODUsIDIwOCwgNzYsIDc5LCAyMTUsIDcwLCA4NSwgNzYsIDc2LCA4NywgNzMsIDY4LCA4NCwgMjAwLCA3MiwgCisgICAgNjUsIDIwMCwgNjgsIDc5LCA4NywgMjA2LCA2OSwgODEsIDg1LCA2NSwgMjA0LCA2NiwgODIsIDY1LCA2NywgNzUsIDY5LCAKKyAgICA4NCwgMTI4LCA3MiwgNzMsIDcxLCAyMDAsIDc5LCAxOTgsIDg0LCA2NSwgMTk5LCA2OCwgNzksIDc3LCA3MywgNzgsIDIwNywgCisgICAgNzgsIDg1LCA3NywgNjksIDgyLCA3MywgMTk1LCA3MCwgODIsIDY1LCA3NSwgODQsIDg1LCAyMTAsIDc0LCA4NSwgNzgsIDcxLCAKKyAgICA4MywgNjksIDc5LCA3OCwgMTk5LCA3NywgNjUsIDc2LCA2NSwgODksIDY1LCA3NiwgNjUsIDIwNSwgODQsIDg3LCAyMDcsIAorICAgIDcxLCA3NiwgNjUsIDcxLCA3OSwgNzYsIDczLCA4NCwgNzMsIDE5NSwgNjcsIDcyLCA2NSwgODIsIDY1LCA2NywgODQsIDY5LCAKKyAgICAyMTAsIDc2LCA2OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OCwgMjExLCA3NywgNjksIDY4LCA3MywgNjUsIDIwNCwgODQsIAorICAgIDY5LCA3NiwgODUsIDcxLCAyMTMsIDY2LCA2OSwgNzgsIDcxLCA2NSwgNzYsIDIwMSwgNzksIDc4LCAxOTcsIDY1LCA4MiwgCisgICAgNzcsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDc0LCA2NSwgODYsIDY1LCA3OCwgNjksIDgzLCAxOTcsIDc0LCA2OSwgNjksIAorICAgIDIwNSwgNjYsIDY1LCA4MiwgMTI4LCA3MiwgNzMsIDgyLCA2NSwgNzEsIDY1LCA3OCwgMTkzLCA4NywgNjksIDgzLCA4NCwgCisgICAgNDUsIDY3LCA4MiwgNjksIDE5NywgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDY2LCA2NSwgNzcsIDg1LCAKKyAgICAyMDUsIDg0LCA3MiwgNjUsIDIwMSwgNzUsIDY1LCA3OCwgNzgsIDY1LCA2OCwgMTkzLCA2NywgNzIsIDY5LCA4MiwgNzksIAorICAgIDc1LCA2OSwgMTk3LCA3MiwgNjUsIDc2LCAxOTgsIDg0LCA3OSwgNzgsIDE5NywgNzgsIDY5LCAyMTUsIDc5LCA4MiwgNzMsIAorICAgIDg5LCAxOTMsIDg0LCA3MiwgODIsIDY5LCAxOTcsIDY3LCA3MiwgNjUsIDIwNSwgNzEsIDg1LCA3NCwgNjUsIDgyLCA2NSwgCisgICAgODQsIDIwMSwgNzYsIDg1LCAxOTcsIDcwLCA3OSwgODUsIDgyLCAxMjgsIDcyLCA2NSwgMTI4LCA4MiwgODUsIDc4LCA3MywgCisgICAgMTk1LCA4MywgNjUsIDg1LCA4MiwgNjUsIDgzLCA3MiwgODQsIDgyLCAxOTMsIDg0LCA2OSwgODQsIDgyLCA2NSwgNzEsIDgyLCAKKyAgICA2NSwgMjA1LCA4NCwgNzIsIDgyLCA2OSwgNjksIDEyOCwgNjgsIDY5LCA4MywgNjksIDgyLCA2OSwgMjEyLCA4MywgNzMsIAorICAgIDc4LCA3MiwgNjUsIDc2LCAxOTMsIDcxLCA4NSwgODIsIDc3LCA4NSwgNzUsIDcyLCAyMDEsIDc3LCA2NSwgODIsIDIwMywgCisgICAgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODMsIDg5LCA4MiwgNzMsIDY1LCAxOTUsIDg2LCA3OSwgNjcsIDY1LCAKKyAgICA3NiwgNzMsIDE5NSwgNjUsIDY3LCA4NSwgODQsIDY5LCAxMjgsIDc2LCA2OSwgODAsIDY3LCA3MiwgMTkzLCA3NiwgNzMsIAorICAgIDcxLCA3MiwgMjEyLCA3NiwgNzksIDc4LCAxOTksIDg0LCA4NSwgODIsIDc1LCA3MywgMTk1LCA2OCwgNzksIDg1LCA2NiwgCisgICAgNzYsIDY5LCA0NSwgODMsIDg0LCA4MiwgODUsIDY3LCAyMDMsIDcwLCA3MywgODYsIDY5LCAxMjgsIDc1LCA2NSwgMTI4LCAKKyAgICA4NCwgNjUsIDc3LCA3MywgMjA0LCA4NiwgNzMsIDY5LCAyMTIsIDY1LCA4MCwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIAorICAgIDczLCA3OSwgNzgsIDY1LCAyMDQsIDcyLCA2NSwgNzcsIDkwLCAxOTMsIDgzLCA3MywgODgsIDEyOCwgODQsIDY5LCA3NiwgCisgICAgNjksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDg5LCA2NSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgMjA0LCA4MCwgNjUsIDEyOCwgNjgsIDc5LCA4NCwgMjExLCA3OCwgNzMsIAorICAgIDc4LCA2OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDEyOCwgNjYsIDY1LCA4MiwgMTk0LCA2OCwgNjUsIDgzLCA3MywgCisgICAgMTkzLCA3NSwgNjUsIDczLCA4NCwgNzIsIDIwMSwgNzYsIDczLCA3NywgNjYsIDIxMywgNzcsIDY1LCAxMjgsIDc3LCA2NSwgCisgICAgNzUsIDgzLCA4NSwgODIsIDE5MywgODMsIDEyOCwgODQsIDIwNywgNjYsIDc5LCA4MCwgNzksIDc3LCA3OSwgNzAsIDIwNywgCisgICAgNzUsIDcyLCA2NSwgODIsIDc5LCA4MywgNzIsIDg0LCA3MiwgMjAxLCA3NiwgNjUsIDIwNywgODIsIDY1LCAxMjgsIDgzLCAKKyAgICA4MSwgODUsIDY1LCA4MiwgNjksIDE5NiwgNzIsIDY5LCA4OCwgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNzUsIDE5MywgNzgsIAorICAgIDY1LCAxMjgsIDgwLCA4MywgNzMsIDc2LCAyMDEsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCAxOTYsIDc3LCA3OSwgCisgICAgNzgsIDc5LCA4MywgODAsIDY1LCA2NywgMTk3LCA3OCwgNzksIDIxMiwgODMsIDY1LCA3NywgNjUsIDgyLCA3MywgODQsIDY1LCAKKyAgICAyMDYsIDgzLCA4NCwgODIsIDc5LCA3NSwgMTk3LCA4NCwgODUsIDgyLCA3OCwgNjksIDE5NiwgODYsIDEyOCwgOTAsIDkwLCAKKyAgICA4OSwgODgsIDEyOCwgOTAsIDkwLCA4OSwgODQsIDEyOCwgOTAsIDkwLCA4OSwgODIsIDg4LCAxMjgsIDkwLCA5MCwgODksIAorICAgIDgyLCAxMjgsIDkwLCA5MCwgODksIDgwLCAxMjgsIDkwLCA5MCwgODksIDEyOCwgOTAsIDkwLCA4NSwgODgsIDEyOCwgOTAsIAorICAgIDkwLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA5MCwgODUsIDgyLCAxMjgsIDkwLCA5MCwgODUsIDgwLCAxMjgsIDkwLCA5MCwgCisgICAgODUsIDEyOCwgOTAsIDkwLCA3OSwgODgsIDEyOCwgOTAsIDkwLCA3OSwgODAsIDEyOCwgOTAsIDkwLCA3OSwgMTI4LCA5MCwgCisgICAgOTAsIDczLCA4OCwgMTI4LCA5MCwgOTAsIDczLCA4NCwgMTI4LCA5MCwgOTAsIDczLCA4MCwgMTI4LCA5MCwgOTAsIDczLCAKKyAgICA2OSwgODgsIDEyOCwgOTAsIDkwLCA3MywgNjksIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4MCwgMTI4LCA5MCwgOTAsIAorICAgIDczLCA2OSwgMTI4LCA5MCwgOTAsIDczLCAxMjgsIDkwLCA5MCwgNjksIDg4LCAxMjgsIDkwLCA5MCwgNjksIDgwLCAxMjgsIAorICAgIDkwLCA5MCwgNjksIDY5LCAxMjgsIDkwLCA5MCwgNjksIDEyOCwgOTAsIDkwLCA2NSwgODgsIDEyOCwgOTAsIDkwLCA2NSwgCisgICAgODQsIDEyOCwgOTAsIDkwLCA2NSwgODAsIDEyOCwgOTAsIDkwLCA2NSwgNjUsIDEyOCwgOTAsIDkwLCA2NSwgMTI4LCA5MCwgCisgICAgODksIDcxLCA3OSwgODMsIDEyOCwgOTAsIDg3LCA2NSwgODIsIDY1LCA3NSwgNjUsIDg5LCAxMjgsIDkwLCA4NywgNjUsIAorICAgIDEyOCwgOTAsIDg1LCA4NCwgMTI4LCA5MCwgODUsIDc5LCA4OCwgMTI4LCA5MCwgODUsIDc5LCA4MCwgMTI4LCA5MCwgODUsIAorICAgIDc5LCAxMjgsIDkwLCA4NSwgNzcsIDEyOCwgOTAsIDg1LCA2NiwgODUsIDgyLCAxMjgsIDkwLCA4NSwgNTMsIDEyOCwgOTAsIAorICAgIDg1LCAxODEsIDkwLCA4MiwgNjUsIDEyOCwgOTAsIDgxLCA2NSwgODAsIDcyLCAxOTMsIDkwLCA3OSwgODQsIDEyOCwgOTAsIAorICAgIDc5LCA3OSwgMTI4LCA5MCwgNzksIDY1LCAxMjgsIDkwLCA3NiwgNjUsIDc3LCAxOTMsIDkwLCA3NiwgNjUsIDEyOCwgOTAsIAorICAgIDc2LCAxOTMsIDkwLCA3NCwgNjksIDEyOCwgOTAsIDczLCA5MCwgNTAsIDEyOCwgOTAsIDczLCA4MSwgNjUsIDY1LCAxMjgsIAorICAgIDkwLCA3MywgNzgsIDc5LCA4MiwgMTI4LCA5MCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgOTAsIDczLCA3MSwgOTAsIDY1LCAKKyAgICAxOTksIDkwLCA3MywgNzEsIDEyOCwgOTAsIDczLCA2OCwgMTkzLCA5MCwgNzMsIDY2LCAxMjgsIDkwLCA3MywgMTk0LCA5MCwgCisgICAgNzMsIDUxLCAxMjgsIDkwLCAyMDEsIDkwLCA3MiwgODksIDg4LCAxMjgsIDkwLCA3MiwgODksIDg0LCAxMjgsIDkwLCA3MiwgCisgICAgODksIDgyLCA4OCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgMTI4LCA5MCwgNzIsIDg5LCA4MCwgMTI4LCA5MCwgNzIsIDg5LCAKKyAgICAxMjgsIDkwLCA3MiwgODcsIDY5LCAxMjgsIDkwLCA3MiwgODcsIDY1LCAxMjgsIDkwLCA3MiwgODUsIDg4LCAxMjgsIDkwLCAKKyAgICA3MiwgODUsIDg0LCAxMjgsIDkwLCA3MiwgODUsIDgyLCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4MiwgMTI4LCA5MCwgNzIsIAorICAgIDg1LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA3MiwgCisgICAgODUsIDc5LCAxMjgsIDkwLCA3MiwgODUsIDEyOCwgOTAsIDcyLCA3OSwgODgsIDEyOCwgOTAsIDcyLCA3OSwgODQsIDEyOCwgCisgICAgOTAsIDcyLCA3OSwgODAsIDEyOCwgOTAsIDcyLCA3OSwgNzksIDEyOCwgOTAsIDcyLCA3OSwgMTI4LCA5MCwgNzIsIDczLCAKKyAgICA4NiwgNjksIDg0LCA2OSwgMTI4LCA5MCwgNzIsIDczLCAxMjgsIDkwLCA3MiwgNjksIDg4LCAxMjgsIDkwLCA3MiwgNjksIAorICAgIDg0LCAxMjgsIDkwLCA3MiwgNjksIDgwLCAxMjgsIDkwLCA3MiwgNjksIDY5LCAxMjgsIDkwLCA3MiwgNjksIDEyOCwgOTAsIAorICAgIDcyLCAxOTcsIDkwLCA3MiwgNjUsIDg4LCAxMjgsIDkwLCA3MiwgNjUsIDg0LCAxMjgsIDkwLCA3MiwgNjUsIDgyLCAxMjgsIAorICAgIDkwLCA3MiwgNjUsIDgwLCAxMjgsIDkwLCA3MiwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNzIsIDY1LCA2NSwgMTI4LCA5MCwgCisgICAgNzIsIDY1LCAxMjgsIDkwLCA3MiwgMTI4LCA5MCwgNjksIDg0LCA2NSwgMTI4LCA5MCwgNjksIDgyLCA3OSwgMTI4LCA5MCwgCisgICAgNjksIDgyLCAyMDcsIDkwLCA2OSwgNzgsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDg5LCA2NSwgMTI4LCA5MCwgNjksIDc3LCAKKyAgICA3NiwgNzQsIDY1LCAxMjgsIDkwLCA2OSwgNTAsIDEyOCwgOTAsIDE5NywgOTAsIDY1LCA4OSwgNzgsIDEyOCwgOTAsIDY1LCAKKyAgICA4OSwgNzMsIDc4LCAxMjgsIDkwLCA2NSwgODksIDczLCAyMDYsIDkwLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCisgICAgMTI4LCA5MCwgNjUsIDg0LCA2NSwgMTI4LCA5MCwgNjUsIDgyLCA4MSwgNjUsIDEyOCwgOTAsIDY1LCA4MSwgNjksIDE5OCwgCisgICAgOTAsIDY1LCA3NywgODgsIDEyOCwgOTAsIDY1LCAyMDQsIDkwLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA2NSwgNzMsIDIwNiwgCisgICAgOTAsIDY1LCA3MywgMTI4LCA5MCwgNjUsIDcyLCAxMjgsIDkwLCA2NSwgMjAwLCA5MCwgNjUsIDcxLCAxMjgsIDkwLCA2NSwgCisgICAgNjksIDcwLCAxMjgsIDkwLCA0OCwgNDksIDU0LCA3MiwgMTI4LCA5MCwgNDgsIDQ5LCA1NCwgNzEsIDEyOCwgOTAsIDQ4LCAKKyAgICA0OSwgNTQsIDcwLCAxMjgsIDkwLCA0OCwgNDksIDU0LCA2OSwgMTI4LCA5MCwgNDgsIDQ5LCA1NCwgNjgsIDEyOCwgOTAsIAorICAgIDQ4LCA0OSwgNTQsIDY3LCAxMjgsIDkwLCA0OCwgNDksIDU0LCA2NiwgMTI4LCA5MCwgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgCisgICAgOTAsIDQ4LCA0OSwgNTQsIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDczLCAxMjgsIDkwLCA0OCwgNDksIDUzLCA3MiwgMTI4LCAKKyAgICA5MCwgNDgsIDQ5LCA1MywgNzEsIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDcwLCAxMjgsIDkwLCA0OCwgNDksIDUzLCA2OSwgCisgICAgMTI4LCA5MCwgNDgsIDQ5LCA1MywgNjgsIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDY3LCAxMjgsIDkwLCA0OCwgNDksIDUzLCAKKyAgICA2NiwgMTI4LCA5MCwgNDgsIDQ5LCA1MywgNjUsIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDEyOCwgOTAsIDQ4LCA0OSwgNTIsIAorICAgIDEyOCwgOTAsIDQ4LCA0OSwgNTEsIDEyOCwgOTAsIDQ4LCA0OSwgNTAsIDEyOCwgOTAsIDQ4LCA0OSwgNDksIDEyOCwgOTAsIAorICAgIDQ4LCA0OSwgNDgsIDEyOCwgOTAsIDQ4LCA0OCwgNTcsIDEyOCwgOTAsIDQ4LCA0OCwgNTYsIDEyOCwgOTAsIDQ4LCA0OCwgCisgICAgNTUsIDEyOCwgOTAsIDQ4LCA0OCwgNTQsIDEyOCwgOTAsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDkwLCA0OCwgNDgsIDUzLCAKKyAgICAxMjgsIDkwLCA0OCwgNDgsIDUyLCA2NSwgMTI4LCA5MCwgNDgsIDQ4LCA1MiwgMTI4LCA5MCwgNDgsIDQ4LCA1MSwgNjYsIAorICAgIDEyOCwgOTAsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDkwLCA0OCwgNDgsIDUxLCAxMjgsIDkwLCA0OCwgNDgsIDUwLCA2OCwgCisgICAgMTI4LCA5MCwgNDgsIDQ4LCA1MCwgNjcsIDEyOCwgOTAsIDQ4LCA0OCwgNTAsIDY2LCAxMjgsIDkwLCA0OCwgNDgsIDUwLCAKKyAgICA2NSwgMTI4LCA5MCwgNDgsIDQ4LCA1MCwgMTI4LCA5MCwgNDgsIDQ4LCA0OSwgMTI4LCA5MCwgMTI4LCAyMTgsIDg5LCA4OSwgCisgICAgODgsIDEyOCwgODksIDg5LCA4NCwgMTI4LCA4OSwgODksIDgyLCA4OCwgMTI4LCA4OSwgODksIDgyLCAxMjgsIDg5LCA4OSwgCisgICAgODAsIDEyOCwgODksIDg5LCA2OSwgMTI4LCA4OSwgODksIDY1LCAxMjgsIDg5LCA4OSwgMTI4LCA4OSwgODcsIDc5LCA3OSwgCisgICAgMTI4LCA4OSwgODcsIDc5LCAxMjgsIDg5LCA4NywgNzMsIDczLCAxMjgsIDg5LCA4NywgNzMsIDEyOCwgODksIDg3LCA2OSwgCisgICAgMTI4LCA4OSwgODcsIDY1LCA2NSwgMTI4LCA4OSwgODcsIDY1LCAxMjgsIDg5LCA4NiwgMTI4LCA4OSwgODUsIDg4LCAxMjgsIAorICAgIDg5LCA4NSwgODUsIDc1LCA2NSwgNzYsIDY5LCA2NSwgODAsIDczLCA3OCwgODQsIDg1LCAxMjgsIDg5LCA4NSwgODQsIDEyOCwgCisgICAgODksIDg1LCA4MywgMTI4LCA4OSwgODUsIDIxMSwgODksIDg1LCA4MiwgODgsIDEyOCwgODksIDg1LCA4MiwgMTI4LCA4OSwgCisgICAgODUsIDgxLCAxMjgsIDg5LCA4NSwgODAsIDEyOCwgODksIDg1LCA3OSwgODgsIDEyOCwgODksIDg1LCA3OSwgODQsIDEyOCwgCisgICAgODksIDg1LCA3OSwgODAsIDEyOCwgODksIDg1LCA3OSwgMTI4LCA4OSwgODUsIDY4LCA3MiwgMTI4LCA4OSwgODUsIDY4LCAKKyAgICAyMDAsIDg5LCA4NSwgNjUsIDc4LCAxMjgsIDg5LCA4NSwgNDUsIDg5LCA2OSwgNzksIDEyOCwgODksIDg1LCA0NSwgODksIAorICAgIDY5LCAxMjgsIDg5LCA4NSwgNDUsIDg1LCAxMjgsIDg5LCA4NSwgNDUsIDc5LCAxMjgsIDg5LCA4NSwgNDUsIDczLCAxMjgsIAorICAgIDg5LCA4NSwgNDUsIDY5LCA3OSwgMTI4LCA4OSwgODUsIDQ1LCA2OSwgMTI4LCA4OSwgODUsIDQ1LCA2NSwgNjksIDEyOCwgCisgICAgODksIDg1LCA0NSwgNjUsIDEyOCwgODksIDg1LCAxMjgsIDg5LCAyMTMsIDg5LCA4MCwgODMsIDczLCA3NiwgNzMsIDEyOCwgCisgICAgODksIDgwLCA3OSwgODIsIDgyLCA3OSwgNzMsIDEyOCwgODksIDgwLCA3OSwgNzUsIDgyLCA3MywgODMsIDczLCA4MywgMTI4LCAKKyAgICA4OSwgODAsIDc5LCA3NSwgODIsIDczLCA4MywgNzMsIDIxMSwgODksIDgwLCA3OSwgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgCisgICAgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODksIDc5LCA4OSwgMTI4LCA4OSwgNzksIDg4LCAxMjgsIDg5LCA3OSwgODUsIDg0LCAKKyAgICA3MiwgNzAsIDg1LCA3NiwgNzgsIDY5LCA4MywgODMsIDEyOCwgODksIDc5LCA4NSwgODQsIDcyLCA3MCwgODUsIDIwNCwgODksIAorICAgIDc5LCA4NCwgMTI4LCA4OSwgNzksIDgyLCA3MywgMTI4LCA4OSwgNzksIDgxLCAxMjgsIDg5LCA3OSwgODAsIDEyOCwgODksIAorICAgIDc5LCA3OSwgMTI4LCA4OSwgNzksIDc3LCA3OSwgMTI4LCA4OSwgNzksIDcxLCA3MiwgMTI4LCA4OSwgNzksIDY4LCA3MiwgCisgICAgMTI4LCA4OSwgNzksIDY4LCAxMjgsIDg5LCA3OSwgMTk2LCA4OSwgNzksIDY1LCAxMjgsIDg5LCA3OSwgNDUsIDg5LCA2OSwgCisgICAgNzksIDEyOCwgODksIDc5LCA0NSwgODksIDY1LCA2OSwgMTI4LCA4OSwgNzksIDQ1LCA4OSwgNjUsIDEyOCwgODksIDc5LCAKKyAgICA0NSwgNzksIDEyOCwgODksIDc5LCA0NSwgNzMsIDEyOCwgODksIDc5LCA0NSwgNjksIDc5LCAxMjgsIDg5LCA3OSwgNDUsIAorICAgIDY1LCA2OSwgMTI4LCA4OSwgNzksIDQ1LCA2NSwgMTI4LCA4OSwgNzksIDEyOCwgODksIDIwNywgODksIDczLCA5MCwgNjksIAorICAgIDg0LCAxMjgsIDg5LCA3MywgODgsIDEyOCwgODksIDczLCA4NywgNzgsIDEyOCwgODksIDczLCA4NCwgMTI4LCA4OSwgNzMsIAorICAgIDgwLCAxMjgsIDg5LCA3MywgNzgsIDcxLCAxMjgsIDg5LCA3MywgNzMsIDEyOCwgODksIDczLCAxOTksIDg5LCA3MywgNjksIAorICAgIDg4LCAxMjgsIDg5LCA3MywgNjksIDg0LCAxMjgsIDg5LCA3MywgNjksIDgwLCAxMjgsIDg5LCA3MywgNjksIDEyOCwgODksIAorICAgIDczLCA2OCwgNjgsIDczLCA4MywgMjAwLCA4OSwgNzMsIDQ1LCA4NSwgMTI4LCA4OSwgNzMsIDEyOCwgODksIDcwLCA2OSwgCisgICAgODMsIDczLCA4MywgMTI4LCA4OSwgNzAsIDY5LCA4MywgNzMsIDIxMSwgODksIDcwLCA2OSwgMjA2LCA4OSwgNjksIDg5LCAKKyAgICAxMjgsIDg5LCA2OSwgODcsIDEyOCwgODksIDY5LCA4NCwgNzMsIDg2LCAxMjgsIDg5LCA2OSwgODMsIDg0LCA4NSwgMTI4LCAKKyAgICA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4OSwgNjksIDgzLCA3MywgCisgICAgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4OSwgNjksIDgzLCA3MywgNjksIAorICAgIDg1LCA3OCwgNzEsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCAKKyAgICA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDg5LCA2OSwgODMsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4OSwgNjksIAorICAgIDgyLCA4NSwgMTI4LCA4OSwgNjksIDgyLCAyMTMsIDg5LCA2OSwgODIsIDczLCAxMjgsIDg5LCA2OSwgODIsIDY1LCAyMDAsIAorICAgIDg5LCA2OSwgODIsIDEyOCwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDg5LCA2OSwgCisgICAgNzksIDQ1LCA4OSwgNjUsIDEyOCwgODksIDY5LCA3OSwgNDUsIDg1LCAxMjgsIDg5LCA2OSwgNzksIDQ1LCA3OSwgMTI4LCAKKyAgICA4OSwgNjksIDc4LCA3MywgODMsIDY5LCAyMDEsIDg5LCA2OSwgNzgsIDY1LCA4MCwgMTI4LCA4OSwgNjksIDIwNiwgODksIAorICAgIDY5LCA3NiwgNzYsIDc5LCA4NywgMTI4LCA4OSwgNjksIDcyLCAxMjgsIDg5LCA2OSwgNjksIDEyOCwgODksIDY5LCA2NSwgCisgICAgMjEwLCA4OSwgNjksIDY1LCAxMjgsIDg5LCA2NSwgOTAsIDkwLCAxMjgsIDg5LCA2NSwgOTAsIDcyLCAxMjgsIDg5LCA2NSwgCisgICAgOTAsIDEyOCwgODksIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODksIDY1LCA4OSwgMTI4LCA4OSwgNjUsIDg3LCAKKyAgICAxMjgsIDg5LCA2NSwgODYsIDEyOCwgODksIDY1LCA4NCwgODQsIDEyOCwgODksIDY1LCA4NCwgNzMsIDEyOCwgODksIDY1LCAKKyAgICA4NCwgNzIsIDEyOCwgODksIDY1LCA4NCwgMTI4LCA4OSwgNjUsIDgzLCA4MywgMTI4LCA4OSwgNjUsIDgzLCA3MiwgMTI4LCAKKyAgICA4OSwgNjUsIDgzLCAxMjgsIDg5LCA2NSwgODIsIDgyLCAxMjgsIDg5LCA2NSwgODIsIDEyOCwgODksIDY1LCAyMTAsIDg5LCAKKyAgICA2NSwgODEsIDEyOCwgODksIDY1LCA4MCwgMTI4LCA4OSwgNjUsIDc4LCA3MSwgMTI4LCA4OSwgNjUsIDc4LCAxOTksIDg5LCAKKyAgICA2NSwgNzgsIDEyOCwgODksIDY1LCA3NywgNzksIDc1LCAxMjgsIDg5LCA2NSwgNzcsIDY1LCA3NSwgNzUsIDY1LCA3OCwgCisgICAgMTI4LCA4OSwgNjUsIDc3LCAxMjgsIDg5LCA2NSwgNzYsIDEyOCwgODksIDY1LCA3NSwgNzIsIDcyLCAxMjgsIDg5LCA2NSwgCisgICAgNzUsIDcyLCAxMjgsIDg5LCA2NSwgNzUsIDY1LCA4MywgNzIsIDEyOCwgODksIDY1LCA3NSwgMTI4LCA4OSwgNjUsIDc0LCAKKyAgICA4NSwgODIsIDg2LCA2OSwgNjgsIDczLCAxOTUsIDg5LCA2NSwgNzQsIDEyOCwgODksIDY1LCA3MiwgNzIsIDEyOCwgODksIAorICAgIDY1LCA3MiwgMTI4LCA4OSwgNjUsIDcxLCA3OCwgMTI4LCA4OSwgNjUsIDcxLCA3MiwgNzIsIDEyOCwgODksIDY1LCA3MSwgCisgICAgNzIsIDEyOCwgODksIDY1LCA3MSwgMTI4LCA4OSwgNjUsIDcwLCAxMjgsIDg5LCA2NSwgNjgsIDcyLCAxMjgsIDg5LCA2NSwgCisgICAgNjgsIDY4LCA3MiwgMTI4LCA4OSwgNjUsIDY4LCA2OCwgMTI4LCA4OSwgNjUsIDY4LCAxMjgsIDg5LCA2NSwgNjcsIDcyLCAKKyAgICAxMjgsIDg5LCA2NSwgNjYsIDcyLCAxMjgsIDg5LCA2NSwgNjYsIDEyOCwgODksIDY1LCA2NSwgODIsIDg1LCAxMjgsIDg5LCAKKyAgICA2NSwgNjUsIDczLCAxMjgsIDg5LCA2NSwgNjUsIDY4LCA3OSwgMTI4LCA4OSwgNjUsIDY1LCAxMjgsIDg5LCA2NSwgNDUsIAorICAgIDg5LCA3OSwgMTI4LCA4OSwgNjUsIDQ1LCA4NSwgMTI4LCA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA4OSwgNDgsIDQ4LCA1NiwgCisgICAgMTI4LCA4OSwgNDgsIDQ4LCA1NSwgMTI4LCA4OSwgNDgsIDQ4LCA1NCwgMTI4LCA4OSwgNDgsIDQ4LCA1MywgMTI4LCA4OSwgCisgICAgNDgsIDQ4LCA1MiwgMTI4LCA4OSwgNDgsIDQ4LCA1MSwgMTI4LCA4OSwgNDgsIDQ4LCA1MCwgMTI4LCA4OSwgNDgsIDQ4LCAKKyAgICA0OSwgNjUsIDEyOCwgODksIDQ4LCA0OCwgNDksIDEyOCwgODksIDQ1LCA2NywgODIsIDY5LCAxOTcsIDg4LCA4OSwgODgsIAorICAgIDEyOCwgODgsIDg5LCA4NSwgMTI4LCA4OCwgODksIDg0LCAxMjgsIDg4LCA4OSwgODIsIDg4LCAxMjgsIDg4LCA4OSwgODIsIAorICAgIDEyOCwgODgsIDg5LCA4MCwgMTI4LCA4OCwgODksIDc5LCAxMjgsIDg4LCA4OSwgNzMsIDEyOCwgODgsIDg5LCA2OSwgNjksIAorICAgIDEyOCwgODgsIDg5LCA2OSwgMTI4LCA4OCwgODksIDY1LCA2NSwgMTI4LCA4OCwgODksIDY1LCAxMjgsIDg4LCA4OSwgMTI4LCAKKyAgICA4OCwgODcsIDczLCAxMjgsIDg4LCA4NywgNjksIDY5LCAxMjgsIDg4LCA4NywgNjksIDEyOCwgODgsIDg3LCA2NSwgNjUsIAorICAgIDEyOCwgODgsIDg3LCA2NSwgMTI4LCA4OCwgODYsIDY5LCAxMjgsIDg4LCA4NiwgNjUsIDEyOCwgODgsIDg1LCA3OSwgODgsIAorICAgIDEyOCwgODgsIDg1LCA3OSwgMTI4LCA4OCwgODUsIDEyOCwgODgsIDgzLCA3MiwgNjUsIDY1LCA4OSwgNjUsIDg0LCA3MiwgCisgICAgNzMsIDg5LCA2NSwgMTI4LCA4OCwgNzksIDg4LCAxMjgsIDg4LCA3OSwgODQsIDEyOCwgODgsIDc5LCA4MiwgMTI4LCA4OCwgCisgICAgNzksIDgwLCAxMjgsIDg4LCA3OSwgNjUsIDEyOCwgODgsIDc5LCAxMjgsIDg4LCA3MywgODgsIDEyOCwgODgsIDczLCA4NCwgCisgICAgMTI4LCA4OCwgNzMsIDgyLCA3OSwgMjA2LCA4OCwgNzMsIDgwLCAxMjgsIDg4LCA3MywgNjksIDg4LCAxMjgsIDg4LCA3MywgCisgICAgNjksIDg0LCAxMjgsIDg4LCA3MywgNjksIDgwLCAxMjgsIDg4LCA3MywgNjksIDEyOCwgODgsIDczLCAxMjgsIDg4LCA3MSwgCisgICAgMTI4LCA4OCwgNjksIDgzLCA4NCwgNjksIDIxMSwgODgsIDY5LCA3MiwgMTI4LCA4OCwgNjksIDY5LCAxMjgsIDg4LCA2OSwgCisgICAgMTI4LCA4OCwgNjUsIDc4LCAxMjgsIDg4LCA2NSwgNjUsIDEyOCwgODgsIDY1LCAxMjgsIDg4LCA0OCwgNDgsIDU2LCA2NSwgCisgICAgMTI4LCA4OCwgNDgsIDQ4LCA1NiwgMTI4LCA4OCwgNDgsIDQ4LCA1NSwgMTI4LCA4OCwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgCisgICAgODgsIDQ4LCA0OCwgNTQsIDEyOCwgODgsIDQ4LCA0OCwgNTMsIDEyOCwgODgsIDQ4LCA0OCwgNTIsIDY2LCAxMjgsIDg4LCAKKyAgICA0OCwgNDgsIDUyLCA2NSwgMTI4LCA4OCwgNDgsIDQ4LCA1MiwgMTI4LCA4OCwgNDgsIDQ4LCA1MSwgMTI4LCA4OCwgNDgsIAorICAgIDQ4LCA1MCwgMTI4LCA4OCwgNDgsIDQ4LCA0OSwgMTI4LCA4NywgOTAsIDEyOCwgODcsIDg5LCA3OCwgNzgsIDEyOCwgODcsIAorICAgIDg5LCA3OCwgMjA2LCA4NywgODYsIDEyOCwgODcsIDg1LCA3OSwgODgsIDEyOCwgODcsIDg1LCA3OSwgODAsIDEyOCwgODcsIAorICAgIDg1LCA3OSwgMTI4LCA4NywgODUsIDc4LCA3NCwgMjA3LCA4NywgODUsIDc4LCAxMjgsIDg3LCA4NSwgNzYsIDg1LCAxMjgsIAorICAgIDg3LCA4NSwgNzYsIDIxMywgODcsIDg1LCA2OSwgMTI4LCA4NywgODUsIDEyOCwgODcsIDgyLCA3OSwgNzgsIDcxLCAxMjgsIAorICAgIDg3LCA4MiwgNzMsIDg0LCA3MywgNzgsIDE5OSwgODcsIDgyLCA2OSwgNjUsIDg0LCAyMDAsIDg3LCA4MiwgNjUsIDgwLCAKKyAgICAxMjgsIDg3LCA3OSwgODgsIDEyOCwgODcsIDc5LCA4MiwgNzUsIDEyOCwgODcsIDc5LCA4MiwgMjAzLCA4NywgNzksIDgyLCAKKyAgICA2OCwgODMsIDgwLCA2NSwgNjcsIDY5LCAxMjgsIDg3LCA3OSwgODIsIDE5NiwgODcsIDc5LCA4MCwgMTI4LCA4NywgNzksIAorICAgIDc5LCA3OCwgMTI4LCA4NywgNzksIDc5LCA3NiwgMTI4LCA4NywgNzksIDc5LCA2OCwgODMsIDQ1LCA2NywgODIsIDY5LCAKKyAgICAxOTcsIDg3LCA3OSwgNzksIDY4LCAxMjgsIDg3LCA3OSwgNzgsIDEyOCwgODcsIDc5LCAyMDYsIDg3LCA3OSwgNzcsIDY1LCAKKyAgICA3OCwgMTI4LCA4NywgNzksIDc2LCA3OSwgODMsIDc5LCAxMjgsIDg3LCA3OSwgNjksIDEyOCwgODcsIDc5LCA2NSwgMTI4LCAKKyAgICA4NywgNzMsIDg0LCA3MiwgNzksIDg1LCAyMTIsIDg3LCA3MywgNzgsIDg0LCA2OSwgODIsIDEyOCwgODcsIDczLCA3OCwgNzQsIAorICAgIDY1LCAxMjgsIDg3LCA3MywgNzgsIDY5LCAxMjgsIDg3LCA3MywgNzgsIDY4LCA4NSwgMTI4LCA4NywgNzMsIDc4LCA2OCwgCisgICAgMTI4LCA4NywgNzMsIDc4LCAxMjgsIDg3LCA3MywgNzEsIDc4LCA4OSwgNjUsIDc4LCAxMjgsIDg3LCA3MywgNzEsIDcxLCAKKyAgICA3NiwgMjE3LCA4NywgNzMsIDY4LCA2OSwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA4NywgNzMsIDY4LCAxOTcsIAorICAgIDg3LCA3MywgNjUsIDc4LCA3MSwgODcsIDY1LCA2NSwgNzUsIDEyOCwgODcsIDczLCA2NSwgNzgsIDcxLCAxMjgsIDg3LCA3MiwgCisgICAgNzksIDc2LCAxOTcsIDg3LCA3MiwgNzMsIDg0LCA2OSwgNDUsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCA2OSwgMTk2LCAKKyAgICA4NywgNzIsIDczLCA4NCwgNjksIDEyOCwgODcsIDcyLCA2OSwgNjksIDc2LCA2OSwgMTk2LCA4NywgNzIsIDY5LCA2OSwgNzYsIAorICAgIDY3LCA3MiwgNjUsIDczLCAyMTAsIDg3LCA3MiwgNjksIDY5LCA3NiwgMTI4LCA4NywgNzIsIDY5LCA2OSwgMjA0LCA4NywgCisgICAgNzIsIDY5LCA2NSwgODQsIDEyOCwgODcsIDcxLCAxMjgsIDg3LCA2OSwgODgsIDEyOCwgODcsIDY5LCA4MywgODQsIDY5LCAKKyAgICA4MiwgMjA2LCA4NywgNjksIDgzLCA4NCwgMTI4LCA4NywgNjksIDgzLCAyMTIsIDg3LCA2OSwgODAsIDEyOCwgODcsIDY5LCAKKyAgICA3OSwgMTI4LCA4NywgNjksIDc4LCAxMjgsIDg3LCA2OSwgNzYsIDc2LCAxMjgsIDg3LCA2OSwgNzMsIDcxLCA3MiwgMjEyLCAKKyAgICA4NywgNjksIDY5LCA3OCwgMTI4LCA4NywgNjksIDY4LCA3MSwgNjksIDQ1LCA4NCwgNjUsIDczLCA3NiwgNjksIDE5NiwgODcsIAorICAgIDY5LCA2NSwgODAsIDc5LCA3OCwgMTI4LCA4NywgNjYsIDEyOCwgODcsIDY1LCA4OSwgMTI4LCA4NywgNjUsIDIxNywgODcsIAorICAgIDY1LCA4OCwgMTI4LCA4NywgNjUsIDg3LCA0NSwgNjUsIDg5LCA3MywgNzgsIDQ1LCA4MiwgNjksIDgzLCA3MiwgMTI4LCA4NywgCisgICAgNjUsIDg3LCAxMjgsIDg3LCA2NSwgMjE1LCA4NywgNjUsIDg2LCAyMTcsIDg3LCA2NSwgODYsIDY5LCAxMjgsIDg3LCA2NSwgCisgICAgODYsIDE5NywgODcsIDY1LCA4NSwgMTI4LCA4NywgNjUsIDg0LCA4NCwgNzksIDEyOCwgODcsIDY1LCA4NCwgNjksIDgyLCAKKyAgICAxMjgsIDg3LCA2NSwgODQsIDY5LCAyMTAsIDg3LCA2NSwgODQsIDY3LCA3MiwgMTI4LCA4NywgNjUsIDg0LCAxMjgsIDg3LCAKKyAgICA2NSwgODMsIDg0LCA3MywgNzgsIDcxLCAxMjgsIDg3LCA2NSwgODMsIDgzLCA2NSwgNzYsIDc2LCA2NSwgNzcsIDEyOCwgODcsIAorICAgIDY1LCA4MywgNzYsIDY1LCAxMjgsIDg3LCA2NSwgODMsIDc2LCAxOTMsIDg3LCA2NSwgODMsIDY1LCA3NiwgNzYsIDY1LCA3NywgCisgICAgMTI4LCA4NywgNjUsIDgzLCA2NSwgNzYsIDc2LCA2NSwgMjA1LCA4NywgNjUsIDgyLCA3OCwgNzMsIDc4LCAxOTksIDg3LCAKKyAgICA2NSwgODAsIDEyOCwgODcsIDY1LCA3OCwgNjgsIDY5LCA4MiwgNjksIDgyLCAxMjgsIDg3LCA2NSwgNzgsIDEyOCwgODcsIAorICAgIDY1LCA3NiwgNzYsIDEyOCwgODcsIDY1LCA3NiwgNzUsIDEyOCwgODcsIDY1LCA3NiwgMjAzLCA4NywgNjUsIDczLCA4NCwgCisgICAgNzMsIDc4LCA3MSwgMTI4LCA4NywgNjUsIDczLCAxMjgsIDg3LCA2NSwgNjksIDc4LCAxMjgsIDg3LCA2NSwgNjksIDEyOCwgCisgICAgODcsIDY1LCA2NSwgODYsIDg1LCAxMjgsIDg3LCA0OCwgNTAsIDUzLCAxMjgsIDg3LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCAKKyAgICA4NywgNDgsIDUwLCA1MiwgMTI4LCA4NywgNDgsIDUwLCA1MSwgMTI4LCA4NywgNDgsIDUwLCA1MCwgMTI4LCA4NywgNDgsIAorICAgIDUwLCA0OSwgMTI4LCA4NywgNDgsIDUwLCA0OCwgMTI4LCA4NywgNDgsIDQ5LCA1NywgMTI4LCA4NywgNDgsIDQ5LCA1NiwgCisgICAgNjUsIDEyOCwgODcsIDQ4LCA0OSwgNTYsIDEyOCwgODcsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDg3LCA0OCwgNDksIDU1LCAKKyAgICAxMjgsIDg3LCA0OCwgNDksIDU0LCAxMjgsIDg3LCA0OCwgNDksIDUzLCAxMjgsIDg3LCA0OCwgNDksIDUyLCA2NSwgMTI4LCAKKyAgICA4NywgNDgsIDQ5LCA1MiwgMTI4LCA4NywgNDgsIDQ5LCA1MSwgMTI4LCA4NywgNDgsIDQ5LCA1MCwgMTI4LCA4NywgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA4NywgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgODcsIDQ4LCA0OSwgNDgsIDEyOCwgODcsIDQ4LCA0OCwgCisgICAgNTcsIDY1LCAxMjgsIDg3LCA0OCwgNDgsIDU3LCAxMjgsIDg3LCA0OCwgNDgsIDU2LCAxMjgsIDg3LCA0OCwgNDgsIDU1LCAKKyAgICAxMjgsIDg3LCA0OCwgNDgsIDU0LCAxMjgsIDg3LCA0OCwgNDgsIDUzLCAxMjgsIDg3LCA0OCwgNDgsIDUyLCAxMjgsIDg3LCAKKyAgICA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4NywgNDgsIDQ4LCA1MSwgMTI4LCA4NywgNDgsIDQ4LCA1MCwgMTI4LCA4NywgNDgsIAorICAgIDQ4LCA0OSwgMTI4LCA4NiwgOTAsIDc3LCA2OSwgODQsIDEyOCwgODYsIDg5LCA4OCwgMTI4LCA4NiwgODksIDg0LCAxMjgsIAorICAgIDg2LCA4OSwgODIsIDg4LCAxMjgsIDg2LCA4OSwgODIsIDEyOCwgODYsIDg5LCA4MCwgMTI4LCA4NiwgODksIDEyOCwgODYsIAorICAgIDg3LCA2NSwgMTI4LCA4NiwgODUsIDg4LCAxMjgsIDg2LCA4NSwgODQsIDEyOCwgODYsIDg1LCA4MiwgODgsIDEyOCwgODYsIAorICAgIDg1LCA4MiwgMTI4LCA4NiwgODUsIDgwLCAxMjgsIDg2LCA4NSwgNzYsIDcxLCA2NSwgMjEwLCA4NiwgODIsIDY1LCA2NywgCisgICAgNzIsIDg5LCAxMjgsIDg2LCA3OSwgODgsIDEyOCwgODYsIDc5LCA4NywgNjksIDc2LCA0NSwgNjcsIDY1LCA4MiwgODIsIDczLCAKKyAgICA2OSwgMjEwLCA4NiwgNzksIDg3LCAxMjgsIDg2LCA3OSwgODUsIDEyOCwgODYsIDc5LCA4NCwgMTI4LCA4NiwgNzksIDgwLCAKKyAgICAxMjgsIDg2LCA3OSwgNzksIDEyOCwgODYsIDc5LCA3NiwgODUsIDc3LCAxOTcsIDg2LCA3OSwgNzYsIDg0LCA2NSwgNzEsIAorICAgIDE5NywgODYsIDc5LCA3MywgMTk2LCA4NiwgNzksIDczLCA2NywgNzMsIDc4LCA3MSwgMTI4LCA4NiwgNzksIDczLCA2NywgCisgICAgNjksIDc2LCA2OSwgODMsIDIxMSwgODYsIDc5LCA3MywgNjcsIDY5LCAxOTYsIDg2LCA3OSwgNjcsIDY1LCAyMDQsIDg2LCAKKyAgICA3OSwgMTI4LCA4NiwgNzMsIDg4LCAxMjgsIDg2LCA3MywgODQsIDEyOCwgODYsIDczLCA4MywgNzMsIDcxLCA3OSwgODQsIAorICAgIDcyLCA3MywgMTk1LCA4NiwgNzMsIDgzLCA2NSwgODIsIDcxLCA2NSwgODksIDY1LCAxMjgsIDg2LCA3MywgODMsIDY1LCA4MiwgCisgICAgNzEsIDY1LCAxMjgsIDg2LCA3MywgODMsIDY1LCA4MiwgNzEsIDE5MywgODYsIDczLCA4MiwgNzMsIDY1LCA3NywgMTI4LCAKKyAgICA4NiwgNzMsIDgyLCA3MSwgNzksIDEyOCwgODYsIDczLCA4MiwgNzEsIDY1LCAxMjgsIDg2LCA3MywgODIsIDY1LCA3NywgNjUsIAorICAgIDEyOCwgODYsIDczLCA4MCwgMTI4LCA4NiwgNzMsIDc4LCA2OSwgMTI4LCA4NiwgNzMsIDc4LCAxMjgsIDg2LCA3MywgNzYsIAorICAgIDc2LCA2NSwgNzEsIDY5LCAxMjgsIDg2LCA3MywgNjksIDg4LCAxMjgsIDg2LCA3MywgNjksIDg3LCA2OCwgNjUsIDg0LCAKKyAgICAxOTMsIDg2LCA3MywgNjksIDg0LCAxMjgsIDg2LCA3MywgNjksIDgwLCAxMjgsIDg2LCA3MywgNjksIDEyOCwgODYsIDczLCAKKyAgICA2OCwgNjUsIDEyOCwgODYsIDczLCA2NywgODQsIDc5LCA4MiwgMjE3LCA4NiwgNzMsIDEyOCwgODYsIDY5LCA4OCwgMTI4LCAKKyAgICA4NiwgNjksIDg3LCAxMjgsIDg2LCA2OSwgMjE1LCA4NiwgNjksIDgzLCA4NCwgNjUsIDEyOCwgODYsIDY5LCA4MywgODMsIAorICAgIDY5LCAyMDQsIDg2LCA2OSwgODIsIDIxNywgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA3NiwgODksIDEyOCwgCisgICAgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA3NiwgMjE3LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCAKKyAgICA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MiwgCisgICAgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgCisgICAgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCAKKyAgICA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MywgCisgICAgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgCisgICAgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCAKKyAgICA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1NCwgCisgICAgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgCisgICAgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCAKKyAgICA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OCwgCisgICAgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgCisgICAgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCAKKyAgICA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OSwgCisgICAgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgCisgICAgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCAKKyAgICA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MCwgCisgICAgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgCisgICAgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCAKKyAgICA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MSwgCisgICAgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgCisgICAgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCAKKyAgICA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MiwgCisgICAgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgCisgICAgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCAxMjgsIDg2LCA2OSwgCisgICAgODIsIDgzLCA3MywgNjcsIDc2LCA2OSwgMTI4LCA4NiwgNjksIDgyLCA4MywgMTk3LCA4NiwgNjksIDgyLCA3MSwgNjksIAorICAgIDEyOCwgODYsIDY5LCA4MCwgMTI4LCA4NiwgNjksIDc4LCA2OCwgMTI4LCA4NiwgNjksIDcyLCAxMjgsIDg2LCA2OSwgMjAwLCAKKyAgICA4NiwgNjksIDY5LCAxMjgsIDg2LCA2OSwgMTk3LCA4NiwgNjksIDY4LCA2OSwgMTI4LCA4NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDIxMCwgODYsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODYsIDY1LCA4OCwgMTI4LCA4NiwgNjUsIDg2LCAxMjgsIAorICAgIDg2LCA2NSwgMjE0LCA4NiwgNjUsIDg0LCA3MiwgODksIDEyOCwgODYsIDY1LCA4NCwgMTI4LCA4NiwgNjUsIDgzLCA4NCwgCisgICAgNzgsIDY5LCA4MywgMjExLCA4NiwgNjUsIDgzLCA3MywgODMsIDEyOCwgODYsIDY1LCA4MiwgODksIDIxMSwgODYsIDY1LCAKKyAgICA4MiwgNzMsIDc1LCA2NSwgMTI4LCA4NiwgNjUsIDgyLCA3MywgNjUsIDc4LCAyMTIsIDg2LCA2NSwgODIsIDczLCA2NSwgCisgICAgMTI4LCA4NiwgNjUsIDgyLCA3MywgMTkzLCA4NiwgNjUsIDgyLCA2OSwgNzMsIDY1LCAyMDEsIDg2LCA2NSwgODIsIDY5LCAKKyAgICA3MywgMTkzLCA4NiwgNjUsIDgwLCAxMjgsIDg2LCA2NSwgNzgsIDY5LCAxMjgsIDg2LCA2NSwgNzcsIDY1LCA3MSwgNzksIAorICAgIDc3LCA4NSwgNzUsIDcyLCA2NSwgMTI4LCA4NiwgNjUsIDc3LCA2NSwgNzEsIDc5LCA3NywgODUsIDc1LCA3MiwgMTkzLCA4NiwgCisgICAgNjUsIDc2LCA3NiwgNjksIDg5LCAxMjgsIDg2LCA2NSwgNjUsIDg2LCA4NSwgMTI4LCA4NiwgNjUsIDY1LCAxMjgsIDg2LCAKKyAgICA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA4NiwgNDgsIDUyLCA0OCwgMTI4LCA4NiwgNDgsIDUxLCA1NywgMTI4LCA4NiwgNDgsIAorICAgIDUxLCA1NiwgMTI4LCA4NiwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgODYsIDQ4LCA1MSwgNTUsIDEyOCwgODYsIDQ4LCA1MSwgCisgICAgNTQsIDEyOCwgODYsIDQ4LCA1MSwgNTMsIDEyOCwgODYsIDQ4LCA1MSwgNTIsIDEyOCwgODYsIDQ4LCA1MSwgNTEsIDY1LCAKKyAgICAxMjgsIDg2LCA0OCwgNTEsIDUxLCAxMjgsIDg2LCA0OCwgNTEsIDUwLCAxMjgsIDg2LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCAKKyAgICA4NiwgNDgsIDUxLCA0OSwgMTI4LCA4NiwgNDgsIDUxLCA0OCwgNjUsIDEyOCwgODYsIDQ4LCA1MSwgNDgsIDEyOCwgODYsIAorICAgIDQ4LCA1MCwgNTcsIDY1LCAxMjgsIDg2LCA0OCwgNTAsIDU3LCAxMjgsIDg2LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA4NiwgCisgICAgNDgsIDUwLCA1NiwgMTI4LCA4NiwgNDgsIDUwLCA1NSwgMTI4LCA4NiwgNDgsIDUwLCA1NCwgMTI4LCA4NiwgNDgsIDUwLCAKKyAgICA1MywgMTI4LCA4NiwgNDgsIDUwLCA1MiwgMTI4LCA4NiwgNDgsIDUwLCA1MSwgNjUsIDEyOCwgODYsIDQ4LCA1MCwgNTEsIAorICAgIDEyOCwgODYsIDQ4LCA1MCwgNTAsIDEyOCwgODYsIDQ4LCA1MCwgNDksIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDc2LCAxMjgsIAorICAgIDg2LCA0OCwgNTAsIDQ4LCA3NSwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNzQsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDczLCAKKyAgICAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA3MiwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNzEsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIAorICAgIDcwLCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA2OSwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNjgsIDEyOCwgODYsIDQ4LCA1MCwgCisgICAgNDgsIDY3LCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA2NiwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgODYsIDQ4LCAKKyAgICA1MCwgNDgsIDEyOCwgODYsIDQ4LCA0OSwgNTcsIDEyOCwgODYsIDQ4LCA0OSwgNTYsIDEyOCwgODYsIDQ4LCA0OSwgNTUsIAorICAgIDEyOCwgODYsIDQ4LCA0OSwgNTQsIDEyOCwgODYsIDQ4LCA0OSwgNTMsIDEyOCwgODYsIDQ4LCA0OSwgNTIsIDEyOCwgODYsIAorICAgIDQ4LCA0OSwgNTEsIDEyOCwgODYsIDQ4LCA0OSwgNTAsIDY2LCAxMjgsIDg2LCA0OCwgNDksIDUwLCA2NSwgMTI4LCA4NiwgCisgICAgNDgsIDQ5LCA1MCwgMTI4LCA4NiwgNDgsIDQ5LCA0OSwgNjcsIDEyOCwgODYsIDQ4LCA0OSwgNDksIDY2LCAxMjgsIDg2LCAKKyAgICA0OCwgNDksIDQ5LCA2NSwgMTI4LCA4NiwgNDgsIDQ5LCA0OSwgMTI4LCA4NiwgNDgsIDQ5LCA0OCwgMTI4LCA4NiwgNDgsIAorICAgIDQ4LCA1NywgMTI4LCA4NiwgNDgsIDQ4LCA1NiwgMTI4LCA4NiwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgODYsIDQ4LCA0OCwgCisgICAgNTUsIDY1LCAxMjgsIDg2LCA0OCwgNDgsIDU1LCAxMjgsIDg2LCA0OCwgNDgsIDU0LCAxMjgsIDg2LCA0OCwgNDgsIDUzLCAKKyAgICAxMjgsIDg2LCA0OCwgNDgsIDUyLCAxMjgsIDg2LCA0OCwgNDgsIDUxLCAxMjgsIDg2LCA0OCwgNDgsIDUwLCA2NSwgMTI4LCAKKyAgICA4NiwgNDgsIDQ4LCA1MCwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNzMsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDcyLCAxMjgsIAorICAgIDg2LCA0OCwgNDgsIDQ5LCA3MSwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNzAsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDY5LCAKKyAgICAxMjgsIDg2LCA0OCwgNDgsIDQ5LCA2OCwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNjcsIDEyOCwgODYsIDQ4LCA0OCwgNDksIAorICAgIDY2LCAxMjgsIDg2LCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgMTI4LCA4NSwgOTAsIDg1LCAxMjgsIAorICAgIDg1LCA5MCwgNTEsIDEyOCwgODUsIDkwLCAxNzksIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODUsIDg5LCAxMjgsIAorICAgIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg1LCA4NSwgODUsIDg1LCAxMjgsIDg1LCA4NSwgODUsIDUxLCAKKyAgICAxMjgsIDg1LCA4NSwgODUsIDUwLCAxMjgsIDg1LCA4NSwgNjksIDEyOCwgODUsIDg0LCA4NSwgNzUsIDczLCAxMjgsIDg1LCAKKyAgICA4MywgODMsIDg1LCA1MSwgMTI4LCA4NSwgODMsIDgzLCA4NSwgMTI4LCA4NSwgODMsIDcyLCA4OCwgMTI4LCA4NSwgODMsIAorICAgIDcyLCA4NSwgNzcsIDg4LCAxMjgsIDg1LCA4MywgNzIsIDUwLCAxMjgsIDg1LCA4MywgNzIsIDEyOCwgODUsIDgzLCAyMDAsIAorICAgIDg1LCA4MywgNjksIDE5NiwgODUsIDgzLCA2OSwgMTI4LCA4NSwgODIsIDg1LCAyMTgsIDg1LCA4MiwgODUsIDgzLCAxMjgsIAorICAgIDg1LCA4MiwgODUsIDY4LCA2NSwgMTI4LCA4NSwgODIsIDg1LCA2OCwgMTkzLCA4NSwgODIsIDg1LCAxMjgsIDg1LCA4MiwgCisgICAgMjEzLCA4NSwgODIsIDc4LCAxMjgsIDg1LCA4MiwgNzMsIDUxLCAxMjgsIDg1LCA4MiwgNzMsIDEyOCwgODUsIDgyLCA2NSwgCisgICAgNzgsIDg1LCA4MywgMTI4LCA4NSwgODIsIDY1LCAxMjgsIDg1LCA4MiwgNTIsIDEyOCwgODUsIDgyLCA1MCwgMTI4LCA4NSwgCisgICAgODIsIDE3OCwgODUsIDgwLCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgODUsIDgwLCA4NywgNjUsIDgyLCA2OCwgMjExLCAKKyAgICA4NSwgODAsIDg3LCA2NSwgODIsIDY4LCAxMjgsIDg1LCA4MCwgODcsIDY1LCA4MiwgMTk2LCA4NSwgODAsIDg0LCA4NSwgODIsIAorICAgIDc4LCAxMjgsIDg1LCA4MCwgODMsIDczLCA3NiwgNzksIDc4LCAxMjgsIDg1LCA4MCwgODMsIDczLCA3NiwgNzksIDIwNiwgCisgICAgODUsIDgwLCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA4NSwgODAsIDgwLCA2OSwgMjEwLCA4NSwgODAsIDY1LCA2OCwgNzIsIDc3LCAKKyAgICA2NSwgNzgsIDczLCA4OSwgNjUsIDEyOCwgODUsIDgwLCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgODUsIAorICAgIDc5LCA3OCwgMTI4LCA4NSwgNzgsIDc4LCAxMjgsIDg1LCA3OCwgNzcsIDY1LCA4MiwgODIsIDczLCA2OSwgMTk2LCA4NSwgCisgICAgNzgsIDczLCA4NiwgNjksIDgyLCA4MywgNjUsIDIwNCwgODUsIDc4LCA3MywgODQsIDg5LCAxMjgsIDg1LCA3OCwgNzMsIDg0LCAKKyAgICAxMjgsIDg1LCA3OCwgNzMsIDIxMiwgODUsIDc4LCA3MywgNzksIDc4LCAxMjgsIDg1LCA3OCwgNzMsIDc5LCAyMDYsIDg1LCAKKyAgICA3OCwgNzMsIDcwLCA3MywgNjksIDE5NiwgODUsIDc4LCA2OCwgMjA3LCA4NSwgNzgsIDY4LCA2OSwgODIsIDg0LCA3MywgNjksIAorICAgIDEyOCwgODUsIDc4LCA2OCwgNjksIDgyLCA3NiwgNzMsIDc4LCAxOTcsIDg1LCA3OCwgNjgsIDY5LCA4MiwgNjgsIDc5LCA4NCwgCisgICAgMTI4LCA4NSwgNzgsIDY4LCA2OSwgODIsIDY2LCA2NSwgODIsIDEyOCwgODUsIDc4LCA2OCwgNjksIDIxMCwgODUsIDc4LCAKKyAgICA2NywgNzMsIDE5MywgODUsIDc4LCA2NSwgODMsIDgwLCA3MywgODIsIDY1LCA4NCwgNjksIDY4LCAxMjgsIDg1LCA3OCwgNjUsIAorICAgIDgwLCAxMjgsIDg1LCA3OCwgNjUsIDEyOCwgODUsIDIwNiwgODUsIDc3LCA4NSwgNzcsIDEyOCwgODUsIDc3LCA4NSwgMjA1LCAKKyAgICA4NSwgNzcsIDY2LCA4MiwgNjksIDc2LCA3NiwgNjUsIDEyOCwgODUsIDc3LCA2NiwgODIsIDY5LCA3NiwgNzYsIDE5MywgODUsIAorICAgIDc3LCA2NiwgNzMsIDc4LCAxMjgsIDg1LCA3NSwgODUsIDEyOCwgODUsIDc1LCA4MiwgNjUsIDczLCA3OCwgNzMsIDY1LCAKKyAgICAyMDYsIDg1LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA4NSwgNzUsIDY1LCA4MiwgMTkzLCA4NSwgNzUsIDEyOCwgODUsIDczLCAKKyAgICA3NiwgNzYsIDY5LCA2NSwgNzgsIDc4LCAxMjgsIDg1LCA3MywgNzEsIDcyLCA4NSwgMjEwLCA4NSwgNzEsIDY1LCA4MiwgNzMsIAorICAgIDg0LCA3MywgMTk1LCA4NSwgNjksIDg5LCAxMjgsIDg1LCA2OSwgNjksIDEyOCwgODUsIDY5LCA2NSwgMTI4LCA4NSwgNjgsIAorICAgIDg1LCA3MSwgMTI4LCA4NSwgNjgsIDY1LCA4NCwgODQsIDY1LCAxMjgsIDg1LCA2OCwgNjUsIDg0LCA4NCwgMTkzLCA4NSwgCisgICAgNjgsIDY1LCA2NSwgODQsIDEyOCwgODUsIDY4LCAxMjgsIDg1LCAxOTYsIDg1LCA2NywgMTI4LCA4NSwgNjYsIDg1LCA3MCwgCisgICAgNzMsIDc2LCA3MywgMTI4LCA4NSwgNjYsIDcyLCA2NSwgODksIDY1LCA4NCwgMjA3LCA4NSwgNjYsIDY1LCA2OCwgNjUsIDc3LCAKKyAgICA2NSwgMTI4LCA4NSwgNjYsIDEyOCwgODUsIDY1LCA4NCwgNzIsIDEyOCwgODUsIDY1LCAxMjgsIDg1LCAxNzgsIDg1LCA0OCwgCisgICAgNTIsIDUwLCAxMjgsIDg1LCA0OCwgNTIsIDQ5LCAxMjgsIDg1LCA0OCwgNTIsIDQ4LCAxMjgsIDg1LCA0OCwgNTEsIDU3LCAKKyAgICAxMjgsIDg1LCA0OCwgNTEsIDU2LCAxMjgsIDg1LCA0OCwgNTEsIDU1LCAxMjgsIDg1LCA0OCwgNTEsIDU0LCAxMjgsIDg1LCAKKyAgICA0OCwgNTEsIDUzLCAxMjgsIDg1LCA0OCwgNTEsIDUyLCAxMjgsIDg1LCA0OCwgNTEsIDUxLCAxMjgsIDg1LCA0OCwgNTEsIAorICAgIDUwLCA2NSwgMTI4LCA4NSwgNDgsIDUxLCA1MCwgMTI4LCA4NSwgNDgsIDUxLCA0OSwgMTI4LCA4NSwgNDgsIDUxLCA0OCwgCisgICAgMTI4LCA4NSwgNDgsIDUwLCA1NywgNjUsIDEyOCwgODUsIDQ4LCA1MCwgNTcsIDEyOCwgODUsIDQ4LCA1MCwgNTYsIDEyOCwgCisgICAgODUsIDQ4LCA1MCwgNTUsIDEyOCwgODUsIDQ4LCA1MCwgNTQsIDEyOCwgODUsIDQ4LCA1MCwgNTMsIDEyOCwgODUsIDQ4LCAKKyAgICA1MCwgNTIsIDEyOCwgODUsIDQ4LCA1MCwgNTEsIDY1LCAxMjgsIDg1LCA0OCwgNTAsIDUxLCAxMjgsIDg1LCA0OCwgNTAsIAorICAgIDUwLCAxMjgsIDg1LCA0OCwgNTAsIDQ5LCAxMjgsIDg1LCA0OCwgNTAsIDQ4LCAxMjgsIDg1LCA0OCwgNDksIDU3LCAxMjgsIAorICAgIDg1LCA0OCwgNDksIDU2LCAxMjgsIDg1LCA0OCwgNDksIDU1LCAxMjgsIDg1LCA0OCwgNDksIDU0LCAxMjgsIDg1LCA0OCwgCisgICAgNDksIDUzLCAxMjgsIDg1LCA0OCwgNDksIDUyLCAxMjgsIDg1LCA0OCwgNDksIDUxLCAxMjgsIDg1LCA0OCwgNDksIDUwLCAKKyAgICAxMjgsIDg1LCA0OCwgNDksIDQ5LCAxMjgsIDg1LCA0OCwgNDksIDQ4LCAxMjgsIDg1LCA0OCwgNDgsIDU3LCAxMjgsIDg1LCAKKyAgICA0OCwgNDgsIDU2LCAxMjgsIDg1LCA0OCwgNDgsIDU1LCAxMjgsIDg1LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA4NSwgNDgsIAorICAgIDQ4LCA1NCwgNjUsIDEyOCwgODUsIDQ4LCA0OCwgNTQsIDEyOCwgODUsIDQ4LCA0OCwgNTMsIDEyOCwgODUsIDQ4LCA0OCwgCisgICAgNTIsIDEyOCwgODUsIDQ4LCA0OCwgNTEsIDEyOCwgODUsIDQ4LCA0OCwgNTAsIDEyOCwgODUsIDQ4LCA0OCwgNDksIDEyOCwgCisgICAgODUsIDQ1LCA3MywgNDUsIDczLCAxMjgsIDg1LCA0NSwgNjksIDc5LCA0NSwgNjksIDg1LCAxMjgsIDg0LCA5MCwgODUsIAorICAgIDEyOCwgODQsIDkwLCA3OSwgNjUsIDEyOCwgODQsIDkwLCA3OSwgMTI4LCA4NCwgOTAsIDczLCAyMTAsIDg0LCA5MCwgNzMsIAorICAgIDEyOCwgODQsIDkwLCA2OSwgNjksIDEyOCwgODQsIDkwLCA2OSwgMTI4LCA4NCwgOTAsIDY1LCA2NSwgMTI4LCA4NCwgOTAsIAorICAgIDY1LCAxMjgsIDg0LCA5MCwgMTI4LCA4NCwgODksIDIxMCwgODQsIDg5LCA4MCwgNjksIDQ1LCAxODMsIDg0LCA4OSwgODAsIAorICAgIDY5LCA0NSwgMTgyLCA4NCwgODksIDgwLCA2OSwgNDUsIDE4MSwgODQsIDg5LCA4MCwgNjksIDQ1LCAxODAsIDg0LCA4OSwgCisgICAgODAsIDY5LCA0NSwgMTc5LCA4NCwgODksIDgwLCA2OSwgNDUsIDE3OCwgODQsIDg5LCA4MCwgNjksIDQ1LCAxNzcsIDg0LCAKKyAgICA4OSwgODAsIDE5NywgODQsIDg5LCA3OSwgMTI4LCA4NCwgODksIDczLCAxMjgsIDg0LCA4OSwgNjksIDEyOCwgODQsIDg5LCAKKyAgICA2NSwgMTI4LCA4NCwgODcsIDc5LCA3OSwgMTI4LCA4NCwgODcsIDc5LCA0NSwgODcsIDY1LCAyMTcsIDg0LCA4NywgNzksIAorICAgIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDg0LCA4NywgNzksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODQsIDg3LCA3MywgCisgICAgNzMsIDEyOCwgODQsIDg3LCA3MywgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgODQsIDg3LCA3OSwgMTI4LCAKKyAgICA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgODQsIDcyLCA4MiwgNjksIDY5LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgCisgICAgODksIDQ1LCA4MywgNzMsIDg4LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4MywgNjksIDg2LCA2OSwgNzgsIAorICAgIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDc5LCA3OCwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgCisgICAgNDUsIDc4LCA3MywgNzgsIDY5LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA3MCwgNzksIDg1LCA4MiwgMTI4LCAKKyAgICA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgNzAsIDczLCA4NiwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgCisgICAgNDUsIDY5LCA3MywgNzEsIDcyLCA4NCwgMjAwLCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgNjksIDczLCA3MSwgNzIsIAorICAgIDg0LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCAyMTcsIDg0LCA4NywgCisgICAgNjksIDc2LCA4NiwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzYsIDg2LCAxOTcsIDg0LCA4NywgNjksIDEyOCwgODQsIDg3LCAKKyAgICA2NSwgNjUsIDEyOCwgODQsIDg3LCA2NSwgMTI4LCA4NCwgODYsIDgyLCA3MywgNjgsIDc5LCAxMjgsIDg0LCA4NiwgNzMsIAorICAgIDc3LCA2NSwgNjgsIDg1LCAyMTAsIDg0LCA4NSwgODgsIDEyOCwgODQsIDg1LCA4NSwgNzcsIDg1LCAxMjgsIDg0LCA4NSwgCisgICAgODQsIDY5LCA4OSwgNjUsIDgzLCA2NSwgODQsIDEyOCwgODQsIDg1LCA4NCwgMTI4LCA4NCwgODUsIDgyLCA4OCwgMTI4LCAKKyAgICA4NCwgODUsIDgyLCA4NSwgMTI4LCA4NCwgODUsIDgyLCA4NCwgNzYsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc5LCA1MCwgCisgICAgMTI4LCA4NCwgODUsIDgyLCA3OCwgODMsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDIwNiwgODQsIDg1LCAKKyAgICA4MiwgNjYsIDY1LCA3OCwgMTI4LCA4NCwgODUsIDgyLCAxMjgsIDg0LCA4NSwgODAsIDEyOCwgODQsIDg1LCA3OSwgODgsIAorICAgIDEyOCwgODQsIDg1LCA3OSwgODQsIDEyOCwgODQsIDg1LCA3OSwgODAsIDEyOCwgODQsIDg1LCA3OSwgMTI4LCA4NCwgODUsIAorICAgIDc4LCA3OCwgODksIDEyOCwgODQsIDg1LCA3NywgNjksIDg0LCA2OSwgODMsIDEyOCwgODQsIDg1LCA3NywgMTI4LCA4NCwgCisgICAgODUsIDc1LCA4NywgNjksIDc4LCA4NCwgNzMsIDgzLCAxMjgsIDg0LCA4NSwgNzUsIDEyOCwgODQsIDg1LCA3MSwgODIsIDczLCAKKyAgICAyMDMsIDg0LCA4NSwgNzEsIDUwLCAxMjgsIDg0LCA4NSwgNzEsIDE3OCwgODQsIDg1LCA2NSwgODIsIDY5LCAxOTksIDg0LCAKKyAgICA4NCwgODUsIDY4LCA2OCwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDY1LCA3MSwgMTI4LCA4NCwgODQsIAorICAgIDg1LCAxMjgsIDg0LCA4NCwgODQsIDcyLCA2NSwgMTI4LCA4NCwgODQsIDgzLCA4NSwgMTI4LCA4NCwgODQsIDgzLCA3OSwgCisgICAgMTI4LCA4NCwgODQsIDgzLCA3MywgMTI4LCA4NCwgODQsIDgzLCA2OSwgNjksIDEyOCwgODQsIDg0LCA4MywgNjksIDEyOCwgCisgICAgODQsIDg0LCA4MywgNjUsIDEyOCwgODQsIDg0LCA3MywgMTI4LCA4NCwgODQsIDcyLCA4NywgNjksIDEyOCwgODQsIDg0LCAKKyAgICA3MiwgNzksIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDczLCAxMjgsIDg0LCA4NCwgNzIsIAorICAgIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY1LCA2NSwgMTI4LCA4NCwgODQsIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgCisgICAgNzIsIDEyOCwgODQsIDg0LCA2OSwgNzIsIDY5LCAyMDAsIDg0LCA4NCwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDIwMCwgCisgICAgODQsIDg0LCA2OSwgNjksIDEyOCwgODQsIDg0LCA2OSwgMTI4LCA4NCwgODQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgODQsIDg0LCA2NSwgNjUsIDEyOCwgODQsIDg0LCA1MCwgMTI4LCA4NCwgODMsIDg3LCA2OSwgMTI4LCA4NCwgODMsIAorICAgIDg3LCA2NSwgMTI4LCA4NCwgODMsIDg2LCAxMjgsIDg0LCA4MywgODMsIDY5LCAxMjgsIDg0LCA4MywgNzIsIDg1LCA3MSwgCisgICAgODMsIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCA3NSwgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDIwMywgODQsIDgzLCAKKyAgICA3MiwgNjksIDgzLCAxMjgsIDg0LCA4MywgNzIsIDY5LCA3MSwgMTI4LCA4NCwgODMsIDcyLCA2OSwgMTk5LCA4NCwgODMsIAorICAgIDcyLCA2OSwgMTI4LCA4NCwgODMsIDcyLCA2NSwgMTI4LCA4NCwgODMsIDY5LCA4MiwgNjksIDEyOCwgODQsIDgzLCA2NSwgCisgICAgNjgsIDczLCAxMjgsIDg0LCA4MywgNjUsIDY4LCAyMDEsIDg0LCA4MywgNjUsIDY1LCA2OCwgNzMsIDg5LCAxMjgsIDg0LCAKKyAgICA4MywgNjUsIDY1LCAxMjgsIDg0LCA4MywgMTkzLCA4NCwgODIsIDg5LCA2NiwgNzYsIDczLCA3OSwgMjA2LCA4NCwgODIsIAorICAgIDg1LCA4NCwgNzIsIDEyOCwgODQsIDgyLCA4NSwgNzgsIDc1LCAxMjgsIDg0LCA4MiwgODUsIDc4LCA2NywgNjUsIDg0LCA2OSwgCisgICAgMTk2LCA4NCwgODIsIDg1LCA2OSwgMTI4LCA4NCwgODIsIDg1LCA2NywgNzUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCAKKyAgICA3NSwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgCisgICAgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgNjUsIAorICAgIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDc4LCAKKyAgICAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAyMDYsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA3NiwgODksIAorICAgIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NSwgODUsIDg0LCA2NSwgODMsIDg0LCAyMDEsIDg0LCA4MiwgCisgICAgNzksIDY5LCA5MCwgNjksIDc4LCA3MywgNjUsIDIwNiwgODQsIDgyLCA3MywgODQsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDg0LCAKKyAgICA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgODQsIAorICAgIDgyLCA3MywgODMsIDY5LCA3NywgNjksIDEyOCwgODQsIDgyLCA3MywgODAsIDc5LCA2OCwgMTI4LCA4NCwgODIsIDczLCA4MCwgCisgICAgNzYsIDczLCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgMTk3LCA4NCwgODIsIDczLCA3OSwgMjA2LCA4NCwgODIsIDczLCAKKyAgICA3MywgODMsIDY1LCA4MCwgMTI4LCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIAorICAgIDcxLCA4MiwgNjUsIDIwNSwgODQsIDgyLCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA3MCwgCisgICAgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzYsIDczLCA2NSwgODQsIDE5NywgODQsIDgyLCAKKyAgICA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDIxMCwgODQsIAorICAgIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODIsIDc5LCA4NSwgNzgsIDE5NiwgODQsIDgyLCA3MywgNjUsIDc4LCAKKyAgICA3MSwgNzYsIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgCisgICAgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4NCwgODIsIDczLCA2NSwgMTI4LCA4NCwgODIsIDczLCAKKyAgICAxMjgsIDg0LCA4MiwgNjksIDgzLCA3MywgNzYsIDc2LCA3OSwgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIAorICAgIDUxLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTAsIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgCisgICAgNzksIDQ1LCA0OSwgMTI4LCA4NCwgODIsIDY5LCA2OSwgMTI4LCA4NCwgODIsIDY5LCAxOTcsIDg0LCA4MiwgNjksIDY1LCAKKyAgICA2OCwgNzMsIDc4LCA3MSwgMTI4LCA4NCwgODIsIDY1LCA4MCwgNjksIDkwLCA3MywgODUsIDc3LCAxMjgsIDg0LCA4MiwgNjUsIAorICAgIDc4LCA4MywgODYsIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg0LCA4MiwgNjUsIDc4LCA4MywgODAsIDc5LCA4MywgNzMsIDg0LCAKKyAgICA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIAorICAgIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIDgzLCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzAsIDcwLCA3MywgNjcsIDEyOCwgCisgICAgODQsIDgyLCA2NSwgNjgsIDE5NywgODQsIDgyLCA2NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgMTI4LCA4NCwgNzksIDg4LCAKKyAgICAxMjgsIDg0LCA3OSwgODUsIDgyLCA3OCwgNzksIDczLCAyMTEsIDg0LCA3OSwgODQsIDY1LCAyMDQsIDg0LCA3OSwgODQsIAorICAgIDEyOCwgODQsIDc5LCA4MiwgODQsIDc5LCA3MywgODMsIDE5NywgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDgzLCAKKyAgICAxMjgsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCAyMTEsIDg0LCA3OSwgODAsIDY2LCA2NSwgODIsIDEyOCwgODQsIAorICAgIDc5LCA4MCwgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgNjksIDE5NiwgODQsIDc5LCA4MCwgMTI4LCA4NCwgNzksIDIwOCwgCisgICAgODQsIDc5LCA3OSwgODQsIDcyLCAxMjgsIDg0LCA3OSwgNzksIDEyOCwgODQsIDc5LCA3OCwgNzksIDgzLCAxMjgsIDg0LCAKKyAgICA3OSwgNzgsIDcxLCA4NSwgNjksIDEyOCwgODQsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NCwgCisgICAgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUzLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTIsIDEyOCwgODQsIDc5LCAKKyAgICA3OCwgNjksIDQ1LCA1MSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUwLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNDksIAorICAgIDEyOCwgODQsIDc5LCA3OCwgNjksIDEyOCwgODQsIDc5LCA3OCwgNjUsIDIwNCwgODQsIDc5LCA3NiwgNzksIDc4LCA3MSwgCisgICAgMTI4LCA4NCwgNzksIDcxLCA2OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgODQsIDc5LCA2OCwgMjA3LCA4NCwgNzksIDY1LCAKKyAgICA3OCwgNjgsIDY1LCA3NSwgNzIsIDczLCA2NSwgODQsIDEyOCwgODQsIDc5LCA2NSwgMTI4LCA4NCwgNzgsIDEyOCwgODQsIAorICAgIDc2LCA4NiwgMTI4LCA4NCwgNzYsIDg1LCAxMjgsIDg0LCA3NiwgNzksIDEyOCwgODQsIDc2LCA3MywgMTI4LCA4NCwgNzYsIAorICAgIDcyLCA4NywgNjksIDEyOCwgODQsIDc2LCA3MiwgODUsIDEyOCwgODQsIDc2LCA3MiwgNzksIDc5LCAxMjgsIDg0LCA3NiwgCisgICAgNzIsIDc5LCAxMjgsIDg0LCA3NiwgNzIsIDczLCAxMjgsIDg0LCA3NiwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgNzYsIDcyLCAKKyAgICA2OSwgMTI4LCA4NCwgNzYsIDcyLCA2NSwgMTI4LCA4NCwgNzYsIDY5LCA2OSwgMTI4LCA4NCwgNzYsIDY1LCAxMjgsIDg0LCAKKyAgICA3NCwgNjksIDEyOCwgODQsIDczLCA4OCwgMTI4LCA4NCwgNzMsIDg3LCA3OCwgMTI4LCA4NCwgNzMsIDg3LCA2NSwgMjE4LCAKKyAgICA4NCwgNzMsIDg0LCA3NiwgNzksIDEyOCwgODQsIDczLCA4NCwgMTI4LCA4NCwgNzMsIDgyLCA4OSwgNjUsIDc1LCAxMjgsIAorICAgIDg0LCA3MywgODIsIDg0LCAxOTMsIDg0LCA3MywgODIsIDc5LCA3OCwgNzMsIDY1LCAyMDYsIDg0LCA3MywgODIsIDEyOCwgCisgICAgODQsIDczLCAyMTAsIDg0LCA3MywgODAsIDgwLCA3MywgMTI4LCA4NCwgNzMsIDgwLCA2OSwgNzIsIDY1LCAxMjgsIDg0LCAKKyAgICA3MywgODAsIDEyOCwgODQsIDczLCAyMDgsIDg0LCA3MywgNzgsIDg5LCAxMjgsIDg0LCA3MywgNzgsIDIxNywgODQsIDczLCAKKyAgICA3OCwgNzgsIDY5LCAxMjgsIDg0LCA3MywgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg0LCA3MywgNzcsIDY5LCA4MywgCisgICAgMTI4LCA4NCwgNzMsIDc3LCA2OSwgMTI4LCA4NCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgODQsIDczLCA3NiwgNjgsIDE5NywgCisgICAgODQsIDczLCA3NiwgMTI4LCA4NCwgNzMsIDIwNCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDg0LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgODQsIDcyLCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgCisgICAgODksIDY5LCA3OSwgNzUsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDg0LCAKKyAgICA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgCisgICAgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNzcsIDczLCA2OSwgODUsIAorICAgIDc3LCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDg0LCA3MywgCisgICAgNzUsIDY5LCA4NSwgODQsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIAorICAgIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODQsIDczLCA3NSwgCisgICAgNjksIDg1LCAyMTIsIDg0LCA3MywgNzMsIDEyOCwgODQsIDczLCA3MSwgNzIsIDIxMiwgODQsIDczLCA3MSwgNjksIDgyLCAKKyAgICAxMjgsIDg0LCA3MywgNzAsIDczLCA3OCwgNjUsIDcxLCAyMDAsIDg0LCA3MywgNjksIDg4LCAxMjgsIDg0LCA3MywgNjksIAorICAgIDgwLCAxMjgsIDg0LCA3MywgMTk3LCA4NCwgNzMsIDY3LCA3NSwgMTI4LCA4NCwgNzMsIDY3LCAyMDMsIDg0LCA3MywgNjUsIAorICAgIDgyLCA2NSwgMTI4LCA4NCwgNzIsIDkwLCAxMjgsIDg0LCA3MiwgODksIDc5LCA3OSwgMjA1LCA4NCwgNzIsIDg3LCA3OSwgCisgICAgNzksIDEyOCwgODQsIDcyLCA4NywgNzksIDEyOCwgODQsIDcyLCA4NywgNzMsIDczLCAxMjgsIDg0LCA3MiwgODcsIDczLCAKKyAgICAxMjgsIDg0LCA3MiwgODcsIDY5LCA2OSwgMTI4LCA4NCwgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODQsIDcyLCA4NywgNjUsIAorICAgIDEyOCwgODQsIDcyLCA4NSwgODIsIDIxMSwgODQsIDcyLCA4NSwgODIsIDczLCA4MywgNjUsIDIxOCwgODQsIDcyLCA4NSwgCisgICAgNzgsIDcxLCAxMjgsIDg0LCA3MiwgODUsIDc4LCA2OCwgNjksIDgyLCA4MywgODQsIDc5LCA4MiwgNzcsIDEyOCwgODQsIDcyLCAKKyAgICA4NSwgNzgsIDY4LCA2OSwgODIsIDEyOCwgODQsIDcyLCA4NSwgNzgsIDY4LCA2OSwgMjEwLCA4NCwgNzIsIDg1LCAxMjgsIAorICAgIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDIwMCwgODQsIDcyLCA4MiwgCisgICAgNjksIDY5LCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDg0LCA3MiwgODIsIDY5LCA2OSwgNDUsIDc2LCA3MywgNzgsIAorICAgIDE5NywgODQsIDcyLCA4MiwgNjksIDY5LCA0NSwgMTk2LCA4NCwgNzIsIDgyLCA2OSwgNjUsIDY4LCAxMjgsIDg0LCA3MiwgCisgICAgNzksIDg1LCA4MywgNjUsIDc4LCA2OCwgMjExLCA4NCwgNzIsIDc5LCA4NSwgODMsIDY1LCA3OCwgNjgsIDEyOCwgODQsIDcyLCAKKyAgICA3OSwgODUsIDgzLCA2NSwgNzgsIDE5NiwgODQsIDcyLCA3OSwgODUsIDEyOCwgODQsIDcyLCA3OSwgODIsIDc4LCAxMjgsIAorICAgIDg0LCA3MiwgNzksIDgyLCAyMDYsIDg0LCA3MiwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzIsIDc5LCA2NSwgMTI4LCA4NCwgCisgICAgNzIsIDIwNywgODQsIDcyLCA3MywgODUsIDg0LCA3MiwgMTI4LCA4NCwgNzIsIDczLCA4NCwgNjUsIDEyOCwgODQsIDcyLCAKKyAgICA3MywgODIsIDg0LCA4OSwgNDUsIDgzLCA2OSwgNjcsIDc5LCA3OCwgMTk2LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCA0NSwgCisgICAgNzksIDc4LCA2OSwgMTI4LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCA4NCwgMjE3LCAKKyAgICA4NCwgNzIsIDczLCA4MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgODQsIDcyLCA3MywgODIsIDg0LCA2OSwgNjksIDIwNiwgODQsIAorICAgIDcyLCA3MywgODIsIDY4LCA4MywgMTI4LCA4NCwgNzIsIDczLCA4MiwgNjgsIDIxMSwgODQsIDcyLCA3MywgODIsIDY4LCAKKyAgICAxMjgsIDg0LCA3MiwgNzMsIDgyLCAxOTYsIDg0LCA3MiwgNzMsIDIwNiwgODQsIDcyLCA3MywgNzMsIDEyOCwgODQsIDcyLCAKKyAgICA3MywgNzEsIDcyLCAxMjgsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDIwMCwgODQsIDcyLCA2OSwgODksIDEyOCwgODQsIAorICAgIDcyLCA2OSwgODQsIDcyLCA2OSwgMTI4LCA4NCwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgODQsIDcyLCA2OSwgODQsIDY1LCAKKyAgICAxMjgsIDg0LCA3MiwgNjksIDg0LCAxOTMsIDg0LCA3MiwgNjksIDgzLCA4MCwgNzMsIDY1LCAyMDYsIDg0LCA3MiwgNjksIAorICAgIDgzLCA2OSwgNzksIDgzLCAxMjgsIDg0LCA3MiwgNjksIDgzLCA2OSwgNzksIDIxMSwgODQsIDcyLCA2OSwgMjExLCA4NCwgCisgICAgNzIsIDY5LCA4MiwgNzcsIDc5LCA2OCwgODksIDc4LCA2NSwgNzcsIDczLCA2NywgMTI4LCA4NCwgNzIsIDY5LCA4MiwgNjksIAorICAgIDcwLCA3OSwgODIsIDY5LCAxMjgsIDg0LCA3MiwgNjksIDgyLCAxOTcsIDg0LCA3MiwgNjksIDIwNiwgODQsIDcyLCA2OSwgCisgICAgNzcsIDY1LCA4NCwgNzMsIDgzLCA3NywgNzksIDIxMSwgODQsIDcyLCA2OSwgNzcsIDY1LCAxMjgsIDg0LCA3MiwgNjksIDc3LCAKKyAgICAxOTMsIDg0LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA3MiwgNjksIDIwMCwgODQsIDcyLCA2OSwgNjksIDEyOCwgODQsIDcyLCAKKyAgICAxOTcsIDg0LCA3MiwgNjUsIDg3LCAxMjgsIDg0LCA3MiwgNjUsIDc4LCA4NCwgNzIsIDY1LCA3NSwgNzIsIDY1LCA4NCwgCisgICAgMTI4LCA4NCwgNzIsIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDg0LCA3MiwgNjUsIDIwNiwgCisgICAgODQsIDcyLCA2NSwgNzYsIDEyOCwgODQsIDcyLCA2NSwgMjA0LCA4NCwgNzIsIDY1LCA3MiwgNjUsIDc4LCAxMjgsIDg0LCAKKyAgICA3MiwgNjUsIDY1LCA3OCwgMTkzLCA4NCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAxMjgsIDg0LCA3MiwgNDUsIDY3LCA4MiwgNjksIAorICAgIDE5NywgODQsIDY5LCA4OCwgODQsIDEyOCwgODQsIDY5LCA4OCwgMTI4LCA4NCwgNjksIDg2LCA3MywgODIsIDEyOCwgODQsIAorICAgIDY5LCA4NCwgODIsIDY1LCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCA4MywgNjksIDc3LCAKKyAgICA2OSwgMTI4LCA4NCwgNjksIDg0LCA4MiwgNjUsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCA3MCwgNzksIAorICAgIDc4LCA3MywgNjUsIDgzLCAxMjgsIDg0LCA2OSwgODQsIDcyLCAxMjgsIDg0LCA2OSwgODQsIDIwMCwgODQsIDY5LCA4NCwgCisgICAgNjUsIDgyLCA4NCwgNzksIDIxMSwgODQsIDY5LCA4NCwgNjUsIDgyLCA4NCwgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODQsIDY5LCA4NCwgMTI4LCA4NCwgNjksIDIxMiwgODQsIDY5LCA4MywgODMsIDY5LCA4MiwgNjUsIDEyOCwgODQsIAorICAgIDY5LCA4MywgODMsIDY5LCA4MiwgMTkzLCA4NCwgNjksIDgzLCA4MywgNjUsIDgyLCA3OSwgMjA2LCA4NCwgNjksIDgzLCAKKyAgICAyMDAsIDg0LCA2OSwgODIsIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDg0LCA2OSwgODAsIDEyOCwgODQsIAorICAgIDY5LCA3OCwgODUsIDg0LCA3OSwgMTI4LCA4NCwgNjksIDc4LCA4NSwgMTI4LCA4NCwgNjksIDc4LCAyMTMsIDg0LCA2OSwgCisgICAgNzgsIDg0LCA3MiwgMTI4LCA4NCwgNjksIDc4LCA4NCwgMTI4LCA4NCwgNjksIDc4LCAyMTEsIDg0LCA2OSwgNzgsIDcxLCAKKyAgICAxOTcsIDg0LCA2OSwgNzgsIDEyOCwgODQsIDY5LCAyMDYsIDg0LCA2OSwgNzcsIDgwLCA4NSwgMjExLCA4NCwgNjksIDc2LCAKKyAgICA4NSwgMTI4LCA4NCwgNjksIDc2LCA3OSwgODUsIDIxMSwgODQsIDY5LCA3NiwgNzMsIDgzLCA3MiwgMTkzLCA4NCwgNjksIAorICAgIDc2LCA2OSwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA2OSwgNzYsIDY5LCA4MCwgNzIsIDc5LCA3OCwgMTk3LCA4NCwgCisgICAgNjksIDc2LCA2OSwgNzMsIDY1LCAxMjgsIDg0LCA2OSwgNzMsIDg3LCA4MywgMTI4LCA4NCwgNjksIDcxLCA2OSwgNzIsIAorICAgIDEyOCwgODQsIDY5LCAxOTcsIDg0LCA2OSwgNjgsIDg1LCA3OCwgNzEsIDEyOCwgODQsIDY5LCA2NSwgODIsIDY4LCA4MiwgCisgICAgNzksIDgwLCA0NSwgODMsIDgwLCA3OSwgNzUsIDY5LCAxOTYsIDg0LCA2OSwgNjUsIDgyLCA2OCwgODIsIDc5LCA4MCwgNDUsIAorICAgIDgzLCA3MiwgNjUsIDc4LCA3NSwgNjksIDE5NiwgODQsIDY5LCA2NSwgODIsIDY4LCA4MiwgNzksIDgwLCA0NSwgNjYsIDY1LCAKKyAgICA4MiwgNjYsIDY5LCAxOTYsIDg0LCA2OSwgNDUsIDg1LCAxMjgsIDg0LCA2NywgNzIsIDY5LCA3MiwgNjksIDcyLCAxMjgsIAorICAgIDg0LCA2NywgNzIsIDY5LCA3MiwgNjksIDIwMCwgODQsIDY3LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA2NywgNzIsIDY5LCAKKyAgICAyMDAsIDg0LCA2NywgNzIsIDY5LCAxMjgsIDg0LCAxOTUsIDg0LCA2NSwgODksIDEyOCwgODQsIDY1LCA4OCwgMTI4LCA4NCwgCisgICAgNjUsIDg3LCA2OSwgNzYsIDc2LCA2OSwgNzcsIDY5LCAyMTIsIDg0LCA2NSwgODcsIDY1LCAxMjgsIDg0LCA2NSwgODcsIAorICAgIDEyOCwgODQsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDg0LCA2NSwgODYsIDEyOCwgODQsIDY1LCAyMTQsIAorICAgIDg0LCA2NSwgODUsIDgyLCA4NSwgODMsIDEyOCwgODQsIDY1LCA4NSwgMTI4LCA4NCwgNjUsIDIxMywgODQsIDY1LCA4NCwgCisgICAgODcsIDY5LCA2OSwgNzYsIDEyOCwgODQsIDY1LCA4NCwgODcsIDY5LCA2OSwgMjA0LCA4NCwgNjUsIDg0LCA4NCwgNzksIDc5LCAKKyAgICA2OSwgMTk2LCA4NCwgNjUsIDg0LCAxMjgsIDg0LCA2NSwgODIsIDg1LCA3OCwgNzEsIDEyOCwgODQsIDY1LCA4MiwgMTI4LCAKKyAgICA4NCwgNjUsIDgwLCA2OSwgODIsIDEyOCwgODQsIDY1LCA4MCwgMTk3LCA4NCwgNjUsIDgwLCAxMjgsIDg0LCA2NSwgNzksIAorICAgIDEyOCwgODQsIDY1LCA3OCwgNzgsIDY5LCAxOTYsIDg0LCA2NSwgNzgsIDE5OSwgODQsIDY1LCA3OCwgMTI4LCA4NCwgNjUsIAorICAgIDc3LCA3MywgNzgsIDcxLCAxMjgsIDg0LCA2NSwgNzcsIDEyOCwgODQsIDY1LCA3NiwgNzYsIDEyOCwgODQsIDY1LCA3NiwgCisgICAgMjA0LCA4NCwgNjUsIDc2LCA3MywgNzgsIDcxLCAxMjgsIDg0LCA2NSwgNzYsIDczLCA3OCwgMTk5LCA4NCwgNjUsIDc2LCAKKyAgICA2OSwgNzgsIDg0LCA4MywgMTI4LCA4NCwgNjUsIDc2LCA2OSwgNzgsIDIxMiwgODQsIDY1LCA3NSwgNzIsIDY1LCA3NiwgNzYsIAorICAgIDg1LCA4MywgMTI4LCA4NCwgNjUsIDc1LCA2OSwgMTI4LCA4NCwgNjUsIDc1LCA1MiwgMTI4LCA4NCwgNjUsIDc1LCAxMjgsIAorICAgIDg0LCA2NSwgNzMsIDgzLCA4OSwgNzksIDg1LCAxMjgsIDg0LCA2NSwgNzMsIDc2LCA3NiwgNjksIDgzLCAyMTEsIDg0LCA2NSwgCisgICAgNzMsIDc2LCAxMjgsIDg0LCA2NSwgNzMsIDIwNCwgODQsIDY1LCA3MiwgMTI4LCA4NCwgNjUsIDIwMCwgODQsIDY1LCA3MSwgCisgICAgNjYsIDY1LCA3OCwgODcsIDE5MywgODQsIDY1LCA3MSwgNjUsIDc2LCA3OSwgMTk5LCA4NCwgNjUsIDcxLCAxMjgsIDg0LCAKKyAgICA2NSwgNjksIDEyOCwgODQsIDY1LCA2NywgNzUsIDEyOCwgODQsIDY1LCA2NywgMjAzLCA4NCwgNjUsIDY2LCA4NSwgNzYsIAorICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4NCwgNjUsIDY2LCA3NiwgNjksIDEyOCwgODQsIDY1LCA2NiwgMTI4LCA4NCwgCisgICAgNjUsIDE5NCwgODQsIDY1LCA2NSwgNzYsIDg1LCA3NCwgMTkzLCA4NCwgNjUsIDY1LCA3MywgMTI4LCA4NCwgNjUsIDY1LCAKKyAgICA3MCwgMTI4LCA4NCwgNjUsIDUwLCAxMjgsIDg0LCA2NSwgNDUsIDgyLCA3OSwgNzYsIDEyOCwgODQsIDQ4LCA1MSwgNTQsIAorICAgIDEyOCwgODQsIDQ4LCA1MSwgNTMsIDEyOCwgODQsIDQ4LCA1MSwgNTIsIDEyOCwgODQsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIAorICAgIDg0LCA0OCwgNTEsIDUxLCAxMjgsIDg0LCA0OCwgNTEsIDUwLCA2NSwgMTI4LCA4NCwgNDgsIDUxLCA1MCwgMTI4LCA4NCwgCisgICAgNDgsIDUxLCA0OSwgMTI4LCA4NCwgNDgsIDUxLCA0OCwgMTI4LCA4NCwgNDgsIDUwLCA1NywgMTI4LCA4NCwgNDgsIDUwLCAKKyAgICA1NiwgMTI4LCA4NCwgNDgsIDUwLCA1NSwgMTI4LCA4NCwgNDgsIDUwLCA1NCwgMTI4LCA4NCwgNDgsIDUwLCA1MywgMTI4LCAKKyAgICA4NCwgNDgsIDUwLCA1MiwgMTI4LCA4NCwgNDgsIDUwLCA1MSwgMTI4LCA4NCwgNDgsIDUwLCA1MCwgMTI4LCA4NCwgNDgsIAorICAgIDUwLCA0OSwgMTI4LCA4NCwgNDgsIDUwLCA0OCwgMTI4LCA4NCwgNDgsIDQ5LCA1NywgMTI4LCA4NCwgNDgsIDQ5LCA1NiwgCisgICAgMTI4LCA4NCwgNDgsIDQ5LCA1NSwgMTI4LCA4NCwgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgODQsIDQ4LCA0OSwgNTQsIDEyOCwgCisgICAgODQsIDQ4LCA0OSwgNTMsIDEyOCwgODQsIDQ4LCA0OSwgNTIsIDEyOCwgODQsIDQ4LCA0OSwgNTEsIDEyOCwgODQsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgODQsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDg0LCA0OCwgNDksIDQ5LCAxMjgsIDg0LCA0OCwgNDksIAorICAgIDQ4LCAxMjgsIDg0LCA0OCwgNDgsIDU3LCA2NSwgMTI4LCA4NCwgNDgsIDQ4LCA1NywgMTI4LCA4NCwgNDgsIDQ4LCA1NiwgCisgICAgNjUsIDEyOCwgODQsIDQ4LCA0OCwgNTYsIDEyOCwgODQsIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIDg0LCA0OCwgNDgsIDU1LCAKKyAgICAxMjgsIDg0LCA0OCwgNDgsIDU0LCAxMjgsIDg0LCA0OCwgNDgsIDUzLCAxMjgsIDg0LCA0OCwgNDgsIDUyLCAxMjgsIDg0LCAKKyAgICA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4NCwgNDgsIDQ4LCA1MSwgMTI4LCA4NCwgNDgsIDQ4LCA1MCwgMTI4LCA4NCwgNDgsIAorICAgIDQ4LCA0OSwgMTI4LCA4MywgOTAsIDkwLCAxMjgsIDgzLCA5MCwgODcsIDcxLCAxMjgsIDgzLCA5MCwgODcsIDY1LCAxMjgsIAorICAgIDgzLCA5MCwgODUsIDEyOCwgODMsIDkwLCA3OSwgMTI4LCA4MywgOTAsIDczLCAxMjgsIDgzLCA5MCwgNjksIDY5LCAxMjgsIAorICAgIDgzLCA5MCwgNjksIDEyOCwgODMsIDkwLCA2NSwgNjUsIDEyOCwgODMsIDkwLCA2NSwgMTI4LCA4MywgOTAsIDEyOCwgODMsIAorICAgIDg5LCA4OCwgMTI4LCA4MywgODksIDg0LCAxMjgsIDgzLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA4OSwgODIsIDc3LCA2NSwgCisgICAgODQsIDczLCA3NSwgNzMsIDEyOCwgODMsIDg5LCA4MiwgNzcsIDY1LCAxMjgsIDgzLCA4OSwgODIsIDEyOCwgODMsIDg5LCAKKyAgICA4MCwgMTI4LCA4MywgODksIDc5LCA4NSwgODcsIDY1LCAxMjgsIDgzLCA4OSwgNzgsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIAorICAgIDgzLCA4OSwgNzgsIDY4LCA2OSwgODMsIDc3LCA3OSwgMjExLCA4MywgODksIDc4LCA2NywgNzIsIDgyLCA3OSwgNzgsIDc5LCAKKyAgICA4NSwgMjExLCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCAxOTMsIDgzLCA4OSwgNzgsIDY1LCA3MCwgNzMsIDEyOCwgODMsIAorICAgIDg5LCA3NywgNzcsIDY5LCA4NCwgODIsIDg5LCAxMjgsIDgzLCA4OSwgNzcsIDc3LCA2OSwgODQsIDgyLCA3MywgMTk1LCA4MywgCisgICAgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTcsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDU2LCAxMjgsIDgzLCAKKyAgICA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTQsIDEyOCwgODMsIAorICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUzLCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDUxLCAKKyAgICAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MywgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIAorICAgIDUzLCA0OSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgCisgICAgNzYsIDQ1LCA1MywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCAKKyAgICA3OSwgNzYsIDQ1LCA1MiwgNTYsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1NSwgMTI4LCA4MywgODksIAorICAgIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDUzLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTEsIDEyOCwgCiAgICAgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1MCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIAotICAgIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCi0gICAgNDUsIDUyLCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCAKLSAgICA3OSwgNzYsIDQ1LCA1MiwgNTcsIDEyOCwgODMsIDg5LCA4MiwgNzcsIDY1LCA4NCwgNzMsIDc1LCA3MywgMTI4LCA4NCwgNjUsIAotICAgIDc1LCA3MiwgNjUsIDc2LCA3NiwgODUsIDgzLCAxMjgsIDg0LCA2NSwgODcsIDY5LCA3NiwgNzYsIDY5LCA3NywgNjksIDIxMiwgCi0gICAgODQsIDcyLCA2OSwgODIsIDY5LCA3MCwgNzksIDgyLCA2OSwgMTI4LCA4NCwgNzIsIDgyLCA2OSwgNjksIDQ1LCA3NiwgNzMsIAotICAgIDc4LCAxOTcsIDg0LCA4MiwgNjUsIDgwLCA2OSwgOTAsIDczLCA4NSwgNzcsIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3NiwgCi0gICAgNzMsIDY1LCA4NCwgMTk3LCA4NCwgODIsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDg0LCA4MiwgNzMsIDcxLCAKLSAgICA3OSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgODQsIDg1LCA4NCwgNjksIDg5LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4NiwgNzMsIAotICAgIDgzLCA2NSwgODIsIDcxLCA2NSwgODksIDY1LCAxMjgsIDg3LCA2NSwgODMsIDgzLCA2NSwgNzYsIDc2LCA2NSwgNzcsIDEyOCwgCi0gICAgODcsIDcyLCA2OSwgNjksIDc2LCA2NywgNzIsIDY1LCA3MywgMjEwLCA4NywgNzksIDgyLCA2OCwgODMsIDgwLCA2NSwgNjcsIAotICAgIDY5LCAxMjgsIDg5LCA4MCwgNzksIDc1LCA4MiwgNzMsIDgzLCA3MywgODMsIDEyOCwgODMsIDg1LCA2NiwgNzQsIDc5LCA3MywgCi0gICAgNzgsIDY5LCAxOTYsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgMjA2LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCAKLSAgICA4MiwgNjgsIDIxMSwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIAotICAgIDc2LCA2OSwgMTI4LCA2NywgNzksIDc4LCA4MywgNzksIDc4LCA2NSwgNzgsIDIxMiwgODMsIDg1LCA2NiwgODMsIDY3LCA4MiwgCi0gICAgNzMsIDgwLCAyMTIsIDg0LCA3MiwgNzksIDg1LCA4MywgNjUsIDc4LCA2OCwgMTI4LCA4NSwgNzgsIDY4LCA2OSwgODIsIDY2LCAKLSAgICA2NSwgODIsIDEyOCwgNjUsIDgzLCA4NCwgNjksIDgyLCA3MywgODMsIDc1LCAxMjgsIDgxLCA4NSwgNzksIDg0LCA2NSwgODQsIAotICAgIDczLCA3OSwgMjA2LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgODIsIDY5LCA4NCwgODIsIDc5LCA3MCwgCi0gICAgNzYsIDY5LCAyMTYsIDY1LCA4MiwgNjcsIDcyLCA2NSwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCAKLSAgICA4MywgNzMsIDIxMSwgNjYsIDc2LCA2NSwgNjcsIDc1LCA3MCwgNzksIDc5LCAyMTIsIDY4LCA2OSwgNzgsIDg0LCA3MywgODMsIAotICAgIDg0LCA4MiwgMjE3LCA2NSwgNzgsIDg1LCA4MywgODYsIDY1LCA4MiwgNjUsIDEyOCwgNjgsIDczLCA2NSwgNzYsIDg5LCA4NCwgCi0gICAgNzMsIDc1LCAxOTMsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA3NiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCAKLSAgICA2NSwgNzYsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgODQsIDY5LCAyMDUsIDgxLCA4NSwgNjUsIDY4LCA4MiwgODUsIAotICAgIDgwLCA3NiwgMTk3LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA3MywgNzgsIDE5OSwgNjUsIDgyLCA4MiwgNzksIDg3LCA3MiwgCi0gICAgNjksIDY1LCAxOTYsIDY1LCA2NiwgNzUsIDcyLCA2NSwgODMsIDczLCA2NSwgMjA2LCA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNDUsIDIwOCwgNjgsIDc5LCA2OCwgNjksIDc1LCA2NSwgODQsIDY1LCAxMjgsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIAotICAgIDczLCA4MywgMTI4LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgODQsIDEyOCwgNjUsIDg2LCA2NSwgNzEsIDgyLCA2NSwgCi0gICAgNzIsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OSwgNzgsIDY3LCA3NiwgNzksIDgzLCAKLSAgICA3MywgNzgsIDE5OSwgNzksIDg2LCA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDgwLCA3NiwgNjUsIDgzLCA4NCwgNzMsIAotICAgIDY3LCA4MywgMTI4LCA3MywgODQsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDc5LCA4NCwgNjksIDcyLCA2OSwgCi0gICAgNjUsIDY4LCAxMjgsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDg0LCA3OSwgMjEwLCA4MywgODUsIDgwLCA2OSwgODIsIDgzLCAKLSAgICA2OSwgODQsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3NiwgNjUsIDg0LCA4NCwgNjksIAotICAgIDc4LCA2OSwgMTk2LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MiwgCi0gICAgNjUsIDc4LCAxOTYsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCA3OCwgMTI4LCA4NCwgNzIsIDczLCA4MiwgODQsIDY5LCAKLSAgICA2OSwgNzgsIDEyOCwgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIAotICAgIDY1LCA3NiwgMTI4LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCA3NiwgNzksIDIxNSwgNzAsIDc2LCA3OSwgODIsIDY5LCA4NCwgCi0gICAgODQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCAKLSAgICA2NSwgODQsIDE5MywgNzcsIDc5LCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIAotICAgIDY1LCA4MCwgMjAwLCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNjUsIDg0LCA3MywgCi0gICAgNzksIDc4LCAxMjgsIDgzLCA2NywgNzMsIDgzLCA4MywgNzksIDgyLCA4MywgMTI4LCA4MywgNjksIDY2LCA2NSwgODQsIDY2LCAKLSAgICA2OSwgNzMsIDIxMiwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCAyMTAsIDY4LCA2OCwgNjUsIDg5LCA2NSwgNzgsIAotICAgIDc4LCA2NSwgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNzAsIDY1LCA3OCwgNjksIDgyLCA3OSwgCi0gICAgODMsIDczLCAyMTEsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCA3NSwgMTI4LCA3MywgNzgsIDcwLCA3MywgNzgsIDczLCAKLSAgICA4NCwgODksIDEyOCwgNzMsIDc4LCA4NiwgNzMsIDgzLCA3MywgNjYsIDc2LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgMjAwLCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA3NywgCi0gICAgNjUsIDgwLCAxMjgsIDc3LCA4NSwgODUsIDgyLCA2OCwgNzIsIDY1LCA3NCwgMTkzLCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCAKLSAgICA2OSwgNzYsIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDgzLCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIAotICAgIDY5LCA2OCwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDIwMCwgODMsIDgwLCA3MiwgNjksIDgyLCA3MywgCi0gICAgNjcsIDY1LCAyMDQsIDgzLCA4NSwgNjYsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MywgODUsIDY3LCA2NywgNjksIDY5LCAKLSAgICA2OCwgODMsIDEyOCwgODMsIDg1LCA3NywgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDg0LCA2OSwgNzYsIDY5LCA4MCwgNzIsIAotICAgIDc5LCA3OCwgMTk3LCA4NCwgNzIsIDc5LCA4NSwgODMsIDY1LCA3OCwgNjgsIDIxMSwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgCi0gICAgNzgsIDcxLCAxMjgsIDY1LCA3NiwgNzYsIDczLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NiwgNzMsIDc4LCA3OSwgNjcsIDg1LCAKLSAgICA3NiwgNjUsIDIxMCwgNjcsIDY1LCA4NSwgNzYsIDY4LCA4MiwgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzgsIDgzLCA4NCwgNjUsIAotICAgIDc4LCA4NCwgMTI4LCA2NywgODUsIDY1LCA4NCwgODIsIDczLCA3NiwgNzYsIDIwNywgNjgsIDczLCA3MCwgNzksIDc4LCA3MywgCi0gICAgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCAKLSAgICA2NSwgODMsIDEyOCwgNzAsIDc2LCA3OSwgODUsIDgyLCA3MywgODMsIDcyLCAxMjgsIDcxLCA2NSwgODIsIDgzLCA3MiwgODUsIAotICAgIDc4LCA3MywgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzEsIDc2LCA3MywgODMsIDgzLCA2NSwgCi0gICAgNzgsIDY4LCAyMDcsIDcxLCA4MiwgNjksIDcxLCA3OSwgODIsIDczLCA2NSwgMjA2LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCAKLSAgICA4MywgNjksIDEyOCwgNzMsIDc4LCA4MywgNjksIDgyLCA4NCwgNzMsIDc5LCAyMDYsIDczLCA4MywgNDUsIDgwLCA3MywgNzYsIAotICAgIDc2LCA2NSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgODIsIDczLCA2OCwgNjksIDEyOCwgNzksIDg5LCA4MiwgNjUsIDc4LCA3MywgCi0gICAgODMsIDc3LCAxOTMsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCA2NSwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCAKLSAgICA2NSwgNzYsIDEyOCwgODAsIDc4LCA2OSwgODUsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIAotICAgIDg1LCA3OSwgMjA2LCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDIxNywgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgCi0gICAgNzMsIDc4LCAxOTksIDgwLCA4MiwgNzksIDc2LCA3OSwgNzgsIDcxLCA2OSwgMTk2LCA4MCwgODIsIDc5LCA4MCwgNjksIDc2LCAKLSAgICA3NiwgNjksIDIxMCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgyLCA2OSwgODMsIDc5LCA4NSwgODIsIAotICAgIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCA4MCwgNzksIDc4LCA4MywgNjksIDEyOCwgODMsIDY1LCA3NiwgODQsIDczLCA3NiwgCi0gICAgNzYsIDc5LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA4NiwgNzksIDg3LCA2OSwgMjA0LCA4MywgODUsIDY2LCA3MSwgODIsIDc5LCAKLSAgICA4NSwgODAsIDEyOCwgODMsIDg3LCA2NSwgODAsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIAotICAgIDQ1LCA0OSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCi0gICAgNDUsIDUyLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKLSAgICA0NSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDU2LCAxMjgsIDgzLCA4OSwgNzcsIDc3LCA2OSwgODQsIAotICAgIDgyLCA3MywgMTk1LCA4NCwgNzksIDcxLCA2OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgODQsIDgyLCA2OSwgODMsIDczLCA3NiwgCi0gICAgNzYsIDc5LCAxMjgsIDg0LCA4MiwgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA4MywgNzMsIDc3LCAKLSAgICA3OSwgODUsIDEyOCwgODQsIDg0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIAotICAgIDY1LCA3MSwgMTI4LCA4NSwgNzgsIDY4LCA2OSwgODIsIDc2LCA3MywgNzgsIDE5NywgODUsIDc4LCA2OCwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY5LCAxMjgsIDg1LCA3OCwgNzMsIDg2LCA2OSwgODIsIDgzLCA2NSwgMjA0LCA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCAKLSAgICA4MywgNjksIDE5NiwgNjUsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3MywgODIsIDgwLCA3NiwgNjUsIAotICAgIDc4LCA2OSwgMTI4LCA2NSwgNzgsIDg1LCA2OCwgNjUsIDg0LCA4NCwgNjUsIDEyOCwgNjUsIDgwLCA3OSwgNjgsIDY5LCA4OCwgCi0gICAgNzMsIDY1LCAxMjgsIDY1LCA4MCwgNzksIDg0LCA3MiwgNjksIDc3LCA2NSwgMTI4LCA2NSwgODAsIDgwLCA4MiwgNzksIDY1LCAKLSAgICA2NywgNzIsIDEyOCwgNjUsIDgxLCA4NSwgNjUsIDgyLCA3MywgODUsIDgzLCAxMjgsIDY1LCA4MiwgNDUsIDgyLCA2NSwgNzIsIAotICAgIDc3LCA2NSwgMjA2LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA2OSwgNzksIDEyOCwgNjUsIDgyLCA3MSwgNzksIDg0LCA2OSwgCi0gICAgODIsIDczLCAxMjgsIDY1LCA4MiwgNzMsIDgzLCA4NCwgNjksIDgyLCA2NSwgMTI4LCA2NSwgODMsIDY3LCA2OSwgNzgsIDY4LCAKLSAgICA3MywgNzgsIDE5OSwgNjUsIDgzLCA4MCwgNzMsIDgyLCA2NSwgODQsIDY5LCAxOTYsIDY1LCA4MywgODQsIDY5LCA4MiwgNzMsIAotICAgIDgzLCA3NSwgMjExLCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCA4MywgNzcsIDEyOCwgNjUsIDg0LCA4NCwgNzIsIDY1LCA2NywgCi0gICAgNjUsIDc4LCAxMjgsIDY2LCA2NSwgNjcsIDc1LCA4MywgNzYsIDY1LCA4MywgMjAwLCA2NiwgNjksIDg2LCA2OSwgODIsIDY1LCAKLSAgICA3MSwgNjksIDEyOCwgNjYsIDczLCA3OSwgNzIsIDY1LCA5MCwgNjUsIDgyLCAxOTYsIDY2LCA3MywgODMsIDY5LCA2NywgODQsIAotICAgIDczLCA3OCwgMTk5LCA2NiwgNzMsIDgzLCA3NywgNzMsIDc2LCA3NiwgNjUsIDIwMCwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgCi0gICAgNzMsIDc4LCAxOTksIDY2LCA4NSwgNzYsIDc2LCA4MywgNjksIDg5LCA2OSwgMTI4LCA2NiwgODUsIDgzLCA4MywgODksIDY5LCAKLSAgICA4MiwgODUsIDEyOCwgNjcsIDY1LCA2OCwgODUsIDY3LCA2OSwgODUsIDgzLCAxMjgsIDY3LCA2NSwgODIsIDgwLCA2OSwgNzgsIAotICAgIDg0LCA4MiwgMjE3LCA2NywgNjUsIDgyLCA4OSwgODMsIDg0LCA3MywgNjUsIDIwNiwgNjcsIDY5LCA3OCwgODQsIDg1LCA4MiwgCi0gICAgNzMsIDY1LCAyMDQsIDY3LCA3MiwgNjUsIDc3LCA3MywgNzYsIDc5LCA3OCwgMTI4LCA2NywgNzIsIDY1LCA4NCwgODQsIDY1LCAKLSAgICA4NywgNjUsIDEyOCwgNjcsIDczLCA4NiwgNzMsIDc2LCA3MywgNjUsIDc4LCAxMjgsIDY3LCA3NiwgNzMsIDc3LCA2NSwgNjcsIAotICAgIDg1LCA4MywgMTI4LCA2NywgNzksIDc4LCA3MCwgNzYsIDczLCA2NywgODQsIDEyOCwgNjcsIDc5LCA3OCwgNzEsIDgyLCA4NSwgCi0gICAgNjksIDc4LCAyMTIsIDY3LCA3OSwgNzgsIDc0LCA4NSwgNzEsIDY1LCA4NCwgMTk3LCA2NywgNzksIDc4LCA4NCwgNzksIDg1LCAKLSAgICA4MiwgNjksIDE5NiwgNjcsIDc5LCA4MCwgODksIDgyLCA3MywgNzEsIDcyLCAyMTIsIDY3LCA4MiwgNjksIDgzLCA2NywgNjksIAotICAgIDc4LCA4NCwgMTI4LCA2OCwgNjUsIDc3LCA3NywgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNjgsIDY1LCA4MiwgNzUsIDY5LCA3OCwgCi0gICAgNzMsIDc4LCAxOTksIDY4LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA2OCwgNjksIDY3LCA2OSwgNzcsIDY2LCAKLSAgICA2OSwgODIsIDEyOCwgNjgsIDY5LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIAotICAgIDg0LCA2OSwgMjEwLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIDIxMSwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgCi0gICAgNzksIDc4LCAxMjgsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCAKLSAgICA3OSwgNzgsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKLSAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCi0gICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCAKLSAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIAotICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgNzYsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgCi0gICAgNDUsIDc4LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA4MCwgMTI4LCA2OCwgODUsIDgwLCA3OSwgNzgsIDY4LCAKLSAgICA3MywgODUsIDIxMSwgNjgsIDg1LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA4NiwgNzMsIDgzLCA4NiwgNjUsIAotICAgIDgyLCA2NSwgMTI4LCA2OSwgNjgsIDczLCA4NCwgNzksIDgyLCA3MywgNjUsIDIwNCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgCi0gICAgODAsIDY5LCAxMjgsIDY5LCA4MCwgNjksIDcxLCA2OSwgODIsIDc3LCA2NSwgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCAKLSAgICA4NCwgNjksIDE5NiwgNjksIDgzLCA4NSwgNzUsIDg1LCA4NSwgNjgsIDc5LCAxMjgsIDY5LCA4NCwgNjksIDgyLCA3OCwgNzMsIAotICAgIDg0LCA4OSwgMTI4LCA3MCwgNjUsIDY3LCA4MywgNzMsIDc3LCA3MywgNzYsIDE5NywgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgCi0gICAgNjUsIDc4LCAxMjgsIDcwLCA2OSwgNjYsIDgyLCA4NSwgNjUsIDgyLCA4OSwgMTI4LCA3MCwgNjksIDgzLCA4NCwgNzMsIDg2LCAKLSAgICA2NSwgNzYsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIAotICAgIDQ1LCA1MCwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA3NiwgCi0gICAgNzMsIDc4LCAxOTcsIDcwLCA3NiwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MCwgNzksIDg1LCA4MiwgNDUsIDc2LCAKLSAgICA3MywgNzgsIDE5NywgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIDcxLCA4MiwgNjUsIAotICAgIDc4LCA4NCwgMTI4LCA3MCwgODUsIDc2LCA3NiwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgCi0gICAgNzksIDc4LCAxMjgsIDcxLCA2NSwgODUsIDc4LCA4NCwgNzYsIDY5LCA4NCwgMTI4LCA3MSwgNjksIDc4LCA3MywgODQsIDczLCAKLSAgICA4NiwgNjksIDEyOCwgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCAxOTUsIDcyLCA2NSwgNzgsIDQ1LCA2NSwgNzUsIAotICAgIDY1LCA4NCwgMTI4LCA3MiwgNjUsIDgyLCA2OCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgCi0gICAgNzMsIDY3LCAxMjgsIDcyLCA2OSwgODIsIDc3LCA3MywgODQsIDczLCA2NSwgMjA2LCA3MiwgODUsIDY1LCA4MiwgNjUsIDY4LCAKLSAgICA2OCwgNzksIDEyOCwgNzMsIDc2LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3NywgNzMsIDcwLCA3OSwgNzgsIAotICAgIDc5LCA3OCwgMTI4LCA3MywgNzgsIDY3LCA3NiwgODUsIDY4LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgCi0gICAgODMsIDY5LCAyMTEsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCA2OCwgMTI4LCA3MywgODIsIDg1LCA4OSwgNjUsIDc4LCAKLSAgICA3OCwgNjUsIDEyOCwgNzQsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIAotICAgIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNzMsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDY5LCA4OSwgNjYsIDc5LCA2NSwgCi0gICAgODIsIDY4LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIDc3LCA2NSwgMTI4LCA3NSwgODIsIDY5LCA3NywgNjUsIDgzLCAKLSAgICA4NCwgNzMsIDEyOCwgNzYsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIAotICAgIDczLCA2OCwgMTk3LCA3NiwgNzMsIDY1LCA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgCi0gICAgODYsIDY5LCAxMjgsIDc2LCA3OSwgODIsIDgyLCA2NSwgNzMsIDc4LCA2OSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDY1LCAKLSAgICA3NSwgNzIsIDEyOCwgNzcsIDY1LCA3MywgNzcsIDY1LCA3NiwgNjUsIDczLCAxMjgsIDc3LCA2NSwgNzMsIDg5LCA2NSwgNzcsIAotICAgIDc5LCA3NSwgMTI4LCA3NywgNjUsIDc4LCA2NSwgNjcsIDc2LCA2OSwgODMsIDEyOCwgNzcsIDY1LCA3OCwgNzEsIDY1LCA3NiwgCi0gICAgNjUsIDc3LCAxMjgsIDc3LCA2NSwgODMsIDY3LCA4NSwgNzYsIDczLCA3OCwgMTk3LCA3NywgNjksIDY4LCA3MywgNjcsIDczLCAKLSAgICA3OCwgNjksIDEyOCwgNzcsIDY5LCA4MywgODMsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDc3LCA3MywgNzgsIDczLCA4MywgODQsIAotICAgIDY5LCA4MiwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgODQsIDEyOCwgNzgsIDczLCA3NSwgNzIsIDY1LCA3MiwgCi0gICAgNzMsIDg0LCAxMjgsIDc4LCA3OSwgODIsIDg0LCA3MiwgODcsIDY5LCA4MywgMjEyLCA3OCwgNzksIDg2LCA2OSwgNzcsIDY2LCAKLSAgICA2OSwgODIsIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgNzMsIDY4LCAxMjgsIDgwLCA2NSwgNjUsIDgzLCA2OSwgNzgsIAotICAgIDg0LCA3OSwgMTI4LCA4MCwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIDEyOCwgODAsIDY1LCA3NywgNjksIDc4LCA2OSwgCi0gICAgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA2OCwgODAsIDc5LCA2OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzIsIDg1LCAKLSAgICA3NiwgODUsIDEyOCwgODAsIDY1LCA3OCwgNzksIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIAotICAgIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjksIDY3LCA2OSwgNzUsIDEyOCwgODAsIDY1LCA4MiwgNzMsIDY3LCA3MiwgCi0gICAgNzksIDc4LCAxMjgsIDgwLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCAKLSAgICA3OSwgNzgsIDEyOCwgODAsIDY5LCA4MiwgNzcsIDY1LCA3OCwgNjksIDc4LCAyMTIsIDgwLCA3MiwgNjUsIDY1LCA4MiwgNzUsIAotICAgIDY1LCA2NSwgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIDcwLCA3OSwgODIsIDIwMywgODAsIDc2LCA2OSwgODQsIDcyLCA4MiwgCi0gICAgNzksIDc4LCAxMjgsIDgwLCA3OSwgNzUsIDgyLCA4OSwgODQsIDczLCA2OSwgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIDY3LCAKLSAgICA4NCwgODUsIDIxMSwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgNjksIDczLCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIAotICAgIDczLCA3MywgMTI4LCA4MCwgODIsIDc5LCA3MCwgNzksIDg1LCA3OCwgNjgsIDEyOCwgODAsIDgyLCA3OSwgNzEsIDgyLCA2OSwgCi0gICAgODMsIDgzLCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgMjA2LCA4MSwgNjUsIDczLCA4MiwgODQsIDcyLCAKLSAgICA4MiwgNjUsIDEyOCwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA2NSwgODIsIAotICAgIDczLCA4NSwgMjExLCA4MSwgODUsIDczLCA3OCwgNjcsIDg1LCA3OCwgODgsIDEyOCwgODIsIDY5LCA2NywgNjksIDgwLCA4NCwgCi0gICAgNzMsIDg2LCAxOTcsIDgyLCA2OSwgNjcsIDc5LCA4MiwgNjgsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCAKLSAgICA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIDgyLCA2OSwgNzAsIDY5LCA4MiwgNjksIAotICAgIDc4LCA2NywgMTk3LCA4MiwgNjksIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3OCwgODQsIDc5LCA3MSwgCi0gICAgNjksIDc4LCAxMjgsIDgyLCA3MywgNzEsIDcyLCA4NCwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgODUsIDc1LCA3NSwgNjUsIDc1LCAKLSAgICA3MiwgNjUsIDEyOCwgODMsIDY1LCA3NywgNjUsIDgyLCA3MywgODQsIDY1LCAyMDYsIDgzLCA2NSwgNzgsIDg0LCA3MywgNzMsIAotICAgIDc3LCA4NSwgMTI4LCA4MywgNjUsIDg4LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDY3LCA2NSwgNzgsIDY4LCA3MywgCi0gICAgNjcsIDg1LCAyMTEsIDgzLCA2NywgNzksIDgyLCA4MCwgNzMsIDg1LCA4MywgMTI4LCA4MywgNjksIDc3LCA3MywgNjcsIDc5LCAKLSAgICA3NiwgNzksIDIwNiwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA3MiwgNjUsIDc3LCA4MiwgNzksIAotICAgIDY3LCA3NSwgMTI4LCA4MywgNzIsIDY5LCA0NSwgNzEsIDc5LCA2NSwgODQsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3NiwgCi0gICAgNjUsIDc3LCAxMjgsIDgzLCA3MywgNjcsIDc1LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgODAsIDc2LCA3MywgODQsIDg0LCAKLSAgICA3MywgNzgsIDE5OSwgODMsIDg0LCA2NSwgNzYsIDc2LCA3MywgNzksIDc4LCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNjUsIAotICAgIDcxLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3OCwgCi0gICAgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY5LCA3OCwgNzEsIDg0LCA3MiwgMTI4LCA4MywgODQsIDgyLCA2OSwgODQsIDY3LCAKLSAgICA3MiwgNjksIDE5NiwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1MCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTEsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDUyLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTQsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU1LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1NiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTcsIDEyOCwgODMsIDg1LCA3MywgODQsIDY1LCA2NiwgCi0gICAgNzYsIDY5LCAxMjgsIDgzLCA4NSwgODIsIDgyLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKLSAgICA0NSwgNTEsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIAotICAgIDQ1LCA1NywgMTI4LCA4MywgODksIDc3LCA3NywgNjksIDg0LCA4MiwgODksIDEyOCwgODMsIDg5LCA3OCwgNjgsIDY5LCA4MywgCi0gICAgNzcsIDc5LCAyMTEsIDg0LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4NCwgNjksIDg0LCA4MiwgNjUsIDgwLCAKLSAgICA3NiwgNzMsIDEyOCwgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDgzLCAxMjgsIDg0LCA4MiwgNjksIDY1LCA2OCwgNzMsIAotICAgIDc4LCA3MSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA4NSwgNzgsIDY3LCA2NSwgCi0gICAgODQsIDY5LCAxOTYsIDg1LCA3MywgNzYsIDc2LCA2OSwgNjUsIDc4LCA3OCwgMTI4LCA4NSwgNzcsIDY2LCA4MiwgNjksIDc2LCAKLSAgICA3NiwgNjUsIDEyOCwgODUsIDc4LCA2OCwgNjksIDgyLCA2OCwgNzksIDg0LCAxMjgsIDg1LCA3OCwgNzcsIDY1LCA4MiwgODIsIAotICAgIDczLCA2OSwgMTk2LCA4NiwgNjksIDgyLCA4MywgNzMsIDY3LCA3NiwgNjksIDEyOCwgODYsIDc5LCA3MywgNjcsIDY5LCA3NiwgCi0gICAgNjksIDgzLCAyMTEsIDg3LCA2NSwgNzgsIDY4LCA2OSwgODIsIDY5LCA4MiwgMTI4LCA4NywgNjUsIDgzLCA2NSwgNzYsIDc2LCAKLSAgICA2NSwgNzcsIDEyOCwgODksIDY1LCA3NywgNjUsIDc1LCA3NSwgNjUsIDc4LCAxMjgsIDg5LCA4MCwgNzksIDc1LCA4MiwgNzMsIAotICAgIDgzLCA3MywgMjExLCA5MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgOTAsIDg3LCA2NSwgODIsIDY1LCA3NSwgCi0gICAgNjUsIDg5LCAxMjgsIDgwLCA3MiwgNjUsIDczLCA4MywgODQsIDc5LCAyMTEsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCAKLSAgICAxOTYsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIDg2LCAxOTcsIDg1LCA3MSwgNjUsIDgyLCA3MywgODQsIDczLCAxOTUsIAotICAgIDY2LCA4NSwgNzEsIDczLCA3OCwgNjksIDgzLCAxOTcsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDcyLCA4NSwgCi0gICAgNzgsIDY4LCA4MiwgNjksIDY4LCAxMjgsIDcwLCA4MiwgNjUsIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA4MiwgNzksIDgzLCAKLSAgICA4MywgNzMsIDc4LCAxOTksIDY3LCA2OSwgNjgsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIAotICAgIDc2LCAxOTcsIDY5LCA4OCwgODQsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCAKLSAgICAyMDYsIDgzLCA4NSwgODAsIDY5LCA4MiwgODMsIDY5LCAyMTIsIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCAxOTYsIAotICAgIDY3LCA3OSwgODUsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDg0LCA2NSwgNzEsIDY2LCA2NSwgNzgsIDg3LCAxOTMsIDc5LCA4NiwgCi0gICAgNjksIDgyLCA3NiwgNjUsIDg5LCAxMjgsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCAyMTIsIDg0LCA3OSwgODIsIDg0LCAKLSAgICA3OSwgNzMsIDgzLCAxOTcsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDY4LCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIAotICAgIDY4LCAxMjgsIDg1LCA4MCwgODMsIDczLCA3NiwgNzksIDc4LCAxMjgsIDczLCA3OSwgODQsIDczLCA3MCwgNzMsIDY5LCAKLSAgICAxOTYsIDc3LCA2NSwgODIsIDg0LCA4OSwgODIsIDczLCAxOTMsIDc5LCA4NiwgNjksIDgyLCA2NiwgNjUsIDgyLCAxMjgsIAotICAgIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIDc4LCAxMjgsIDcyLCA2NSwgNzgsIDcxLCA5MCwgNzIsIDc5LCAyMTMsIDczLCA3OCwgCi0gICAgODQsIDY5LCA3MSwgODIsIDY1LCAyMDQsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxOTYsIDc5LCA3NywgNzMsIDY3LCAKLSAgICA4MiwgNzksIDc4LCAxMjgsIDg2LCA3MywgODMsIDY1LCA4MiwgNzEsIDY1LCAxMjgsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIAotICAgIDc4LCAyMTIsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDgzLCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIDc4LCAKLSAgICAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAyMTEsIDgzLCA4NSwgNjcsIDY3LCA2OSwgNjksIDY4LCAyMTEsIAotICAgIDg0LCA3MiwgNjksIDgzLCA4MCwgNzMsIDY1LCAyMDYsIDY2LCA2NSwgNzcsIDY2LCA3OSwgNzksIDgzLCAxMjgsIDY3LCA3MywgCi0gICAgODIsIDY3LCA3NiwgNjksIDgzLCAxMjgsIDY3LCA3OSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAyMTEsIDY4LCA3MywgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCAxMjgsIDc3LCA2OSwgODQsIDgyLCA3MywgNjcsIDY1LCAyMDQsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIAotICAgIDY1LCAyMDUsIDgzLCA3MywgNjgsIDY5LCA4NywgNjUsIDg5LCAyMTEsIDg0LCA3MiwgNzksIDg1LCA4MywgNjUsIDc4LCAKLSAgICAxOTYsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDc4LCAxOTksIAotICAgIDgzLCA3MywgNzcsIDY1LCA3OCwgODMsIDczLCAyMTEsIDgzLCA4NCwgNjUsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgzLCA4NSwgCi0gICAgNjYsIDg1LCA3OCwgNzMsIDg0LCAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDY5LCAxMjgsIDg0LCA2NSwgNzYsIDY5LCAKLSAgICA3OCwgODQsIDgzLCAxMjgsIDY2LCA2NSwgODIsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDY4LCA3MywgNzEsIDY1LCA3NywgNzcsIAotICAgIDY1LCAxMjgsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCAyMDYsIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIDY5LCAKLSAgICAyMDQsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzMsIDcxLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCAxMjgsIAotICAgIDgzLCA4NSwgNjYsIDcxLCA4MiwgNzksIDg1LCAyMDgsIDgzLCA4NSwgODIsIDgyLCA3OSwgODUsIDc4LCAxOTYsIDg1LCA4MCwgCi0gICAgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDgyLCAxMjgsIDcwLCA3MywgNzAsIDg0LCAKLSAgICA2OSwgNjksIDc4LCAxMjgsIDc5LCA4MiwgNzMsIDcxLCA3MywgNzgsIDY1LCAyMDQsIDgyLCA3OSwgODQsIDg1LCA3OCwgNjgsIAotICAgIDY1LCAxMjgsIDY1LCA4MywgODQsIDY5LCA4MiwgNzMsIDgzLCAyMDMsIDY4LCA3MywgNjUsIDgzLCA4NCwgNzksIDc2LCAKLSAgICAyMDEsIDY4LCA4MiwgNjUsIDg1LCA3MSwgNzIsIDg0LCAyMTEsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIDY5LCAxMjgsIAotICAgIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIDY1LCAyMDYsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDY1LCAxMjgsIDc3LCA3MywgCi0gICAgNzYsIDc2LCA3MywgNzksIDc4LCAyMTEsIDc3LCA4OSwgODMsIDc2LCA3MywgODQsIDY5LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCAKLSAgICA4NCwgNjksIDgyLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCAxMjgsIDgzLCA4MSwgODUsIDczLCA3MSwgNzEsIAotICAgIDc2LCAxOTcsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCAyMTIsIDY1LCA4MywgODMsIDg5LCA4MiwgNzMsIDY1LCAKLSAgICAyMDYsIDY2LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY3LCA3MiwgODIsIDc5LCA3OCwgNzksIDc4LCAxMjgsIAotICAgIDY4LCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDgzLCAxMjgsIDcwLCA3MywgCi0gICAgNzgsIDcxLCA2OSwgODIsIDY5LCAxOTYsIDcxLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcyLCA2NSwgODIsIDc1LCAKLSAgICA3NiwgNjksIDY1LCAyMDYsIDcyLCA2OSwgODgsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIAotICAgIDY1LCAxMjgsIDc0LCA2OSwgNzEsIDc5LCA3MSwgNjUsIDc4LCAxMjgsIDc1LCA3OSwgODIsIDc5LCA3OCwgNzMsIDgzLCAKLSAgICAxMjgsIDc2LCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIDY1LCAxMjgsIAotICAgIDc4LCA3OSwgNDUsIDY2LCA4MiwgNjksIDY1LCAyMDMsIDgwLCA3MywgNzgsIDg3LCA3MiwgNjksIDY5LCAyMDQsIDgxLCA4NSwgCi0gICAgNjUsIDgyLCA4NCwgNjksIDgyLCAyMTEsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDY5LCAxOTYsIDgzLCA2NSwgODksIDY1LCAKLSAgICA3OCwgNzgsIDY1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAyMTAsIDg0LCA2OSwgODQsIDY1LCA4MiwgODQsIAotICAgIDc5LCAyMTEsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAyMDYsIDY1LCA2NywgODQsIDczLCA4NiwgNjUsIDg0LCAKLSAgICAxOTcsIDY1LCA2NywgODQsIDg1LCA2NSwgNzYsIDc2LCAyMTcsIDY1LCA3NSwgNzIsIDc3LCA3MywgNzcsIDczLCAxOTUsIAotICAgIDY1LCA4MCwgNzksIDY4LCA2OSwgODIsIDc3LCAxOTMsIDY1LCA4MiwgNzMsIDgzLCA4NCwgNjksIDgyLCAxOTMsIDY2LCA2OSwgCi0gICAgODQsIDg3LCA2OSwgNjksIDc4LCAxMjgsIDY2LCA3MywgNzYsIDY1LCA2NiwgNzMsIDY1LCAyMDQsIDY3LCA2NSwgODksIDY1LCAKLSAgICA3OCwgNzgsIDY1LCAxMjgsIDY3LCA2OSwgNzMsIDc2LCA3MywgNzgsIDcxLCAxMjgsIDY3LCA3MiwgNjUsIDgyLCA3MywgNzksIAotICAgIDg0LCAxMjgsIDY3LCA3MiwgNzksIDgyLCA2OSwgODYsIDc3LCAxOTMsIDY3LCA3MiwgODIsIDc5LCA3OCwgNzksIDg1LCAKLSAgICAxMjgsIDY3LCA3NiwgNzksIDg0LCA3MiwgNjksIDgzLCAxMjgsIDY3LCA3OSwgODIsIDc4LCA2OSwgODIsIDgzLCAxMjgsIAotICAgIDY4LCA2NSwgNzcsIDc3LCA2NSwgODQsIDY1LCAyMDYsIDY4LCA2NSwgODAsIDQ1LCA2NiwgODUsIDc5LCAyMDYsIDY4LCA2NSwgCi0gICAgODAsIDQ1LCA3NywgODUsIDc5LCAyMTcsIDY4LCA2NSwgODAsIDQ1LCA4MCwgODIsIDY1LCAyMDUsIDY4LCA2OSwgODksIDg0LCAKLSAgICA2OSwgODIsIDc5LCAyMTEsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDc2LCAyMTcsIDY4LCA3MywgODMsIDczLCA3NywgNzksIAotICAgIDg1LCAxMjgsIDY5LCA3NywgODAsIDcyLCA2NSwgODMsIDczLCAyMTEsIDcwLCA2OSwgNzcsIDczLCA3OCwgNzMsIDc4LCAKLSAgICAxOTcsIDcwLCA2OSwgODIsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAyMDMsIAotICAgIDcxLCA3NiwgNjUsIDcxLCA3OSwgNzYsIDczLCAxMjgsIDczLCA3OCwgNzIsIDY5LCA4MiwgNjksIDc4LCAyMTIsIDczLCA3OCwgCi0gICAgODQsIDY5LCA4MiwgNzMsIDc5LCAyMTAsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCAyMDYsIDc1LCA2NSwgODksIDY1LCAKLSAgICA3OCwgNzgsIDY1LCAxMjgsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDY1LCAxMjgsIDc2LCA0NSwgODMsIDcyLCA2NSwgODAsIAotICAgIDY5LCAxOTYsIDc2LCA2NSwgODQsIDczLCA3OCwgNjUsIDg0LCAxOTcsIDc2LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDc2LCA3NCwgODUsIDY4LCA3MywgNzQsIDY5LCAxMjgsIDc2LCA3OSwgNzEsIDc5LCA4NCwgODksIDgwLCAxOTcsIAotICAgIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCAxOTcsIDc3LCA4NSwgCi0gICAgNzYsIDg0LCA3MywgODMsIDY5LCAyMTIsIDc4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA4NSwgODQsIDczLCAKLSAgICA3NiwgNzYsIDg1LCAxMjgsIDc5LCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCAyMDYsIDgwLCA2NSwgODksIDY1LCA3OCwgNzgsIAotICAgIDY1LCAxMjgsIDgwLCA2NSwgODksIDY5LCA4MiwgNzksIDc1LCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDY1LCAKLSAgICAyMDQsIDgwLCA2OSwgODQsIDY1LCA3NiwgNzYsIDY5LCAxOTYsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCAyMDEsIAotICAgIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCAyMDEsIDgyLCA3MSwgODksIDczLCA3OCwgNzEsIDgzLCAxMjgsIDgzLCA0NSwgCi0gICAgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIDgzLCA2OSwgNzcsIDczLCA4MywgNzksIDcwLCAyMTIsIDgzLCA2OSwgNzcsIDc1LCAKLSAgICA2NSwgODQsIDcyLCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDg5LCAxMjgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDgzLCA3MiwgODQsIDY1LCA4MCwgNzMsIDY3LCAxMjgsIDgzLCA3OSwgNjcsIDczLCA2OSwgODQsIDg5LCAKLSAgICAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCAxMjgsIDgzLCA4MCwgNjksIDY3LCA3MywgNjUsIDc2LCAxMjgsIAotICAgIDgzLCA4MSwgODUsIDczLCA4MiwgODIsIDY5LCAyMDQsIDgzLCA4NCwgNjUsIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgCi0gICAgODIsIDc5LCA3NSwgNjksIDgzLCAxMjgsIDg0LCA3MiwgNjksIDgzLCA2OSwgNzksIDgzLCAxMjgsIDg0LCA3MiwgODUsIDc4LCAKLSAgICA2OCwgNjksIDgyLCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDg1LCA2NiwgNjUsIDY4LCA2NSwgNzcsIAotICAgIDY1LCAxMjgsIDg3LCA2NSwgNzMsIDg0LCA3MywgNzgsIDcxLCAxMjgsIDkwLCA3MiwgNzMsIDg2LCA2OSwgODQsIDY5LCAKLSAgICAxMjgsIDY1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2NiwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIAotICAgIDY1LCA2OCwgODYsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3MywgCi0gICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3NiwgNjksIDc3LCA2NiwgNzMsIDY3LCAxMjgsIDY1LCA3NiwgODYsIDY5LCAKLSAgICA3OSwgNzYsIDY1LCAyMTAsIDY1LCA3OCwgNzEsIDgzLCA4NCwgODIsIDc5LCAyMDUsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIAotICAgIDgyLCAxMjgsIDY1LCA3OCwgODUsIDgzLCA4NiwgNjUsIDgyLCAxOTMsIDY1LCA4MCwgNzksIDg0LCA3MiwgNjksIDgzLCAKLSAgICAxMjgsIDY1LCA4MiwgNjUsIDY5LCA2NSwgNDUsIDczLCAxMjgsIDY1LCA4MiwgNjUsIDY5LCA2NSwgNDUsIDg1LCAxMjgsIAotICAgIDY1LCA4MiwgNjcsIDcyLCA2NSwgNzMsIDc5LCAyMDYsIDY1LCA4MiwgNzksIDg1LCA4MywgNzMsIDc4LCAxOTksIDY1LCA4NSwgCi0gICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY2LCA2NSwgNjUsIDgyLCA2OSwgODIsIDg1LCAxMjgsIDY2LCA2NSwgNzMsIDgyLCAKLSAgICA3NSwgNjUsIDc4LCAxMjgsIDY2LCA2NSwgODIsIDgyLCA2OSwgNzUsIDcyLCAxMjgsIDY2LCA2NSwgODIsIDgyLCA3MywgNjksIAotICAgIDgyLCAxMjgsIDY2LCA2NSwgODQsIDcyLCA4NCwgODUsIDY2LCAxMjgsIDY2LCA2OSwgNjcsIDY1LCA4NSwgODMsIDY5LCAKLSAgICAxMjgsIDY2LCA2OSwgNjksIDcyLCA3MywgODYsIDY5LCAxMjgsIDY2LCA2OSwgNzYsIDcxLCA4NCwgNzIsIDc5LCAyMTAsIAotICAgIDY2LCA2OSwgODIsIDc1LCA2NSwgNzgsIDY1LCAyMDYsIDY2LCA3MywgNjgsIDY5LCA3OCwgODQsIDY1LCAyMDQsIDY2LCA3OSwgCi0gICAgODUsIDc4LCA2OCwgNjUsIDgyLCAyMTcsIDY2LCA4MiwgNjUsIDc1LCA2NywgNjksIDg0LCAxMjgsIDY2LCA4MiwgNzMsIDgzLCAKLSAgICA4NCwgNzYsIDY5LCAxMjgsIDY2LCA4NSwgODUsIDc3LCA3MywgODMsIDcyLCAxMjgsIDY3LCA2NSwgNjksIDgzLCA4NSwgODIsIAotICAgIDY1LCAxMjgsIDY3LCA2NSwgODAsIDczLCA4NCwgNjUsIDc2LCAxMjgsIDY3LCA2NSwgODAsIDg0LCA3MywgODYsIDY5LCAKLSAgICAxMjgsIDY3LCA2NSwgODIsIDgyLCA3MywgNjUsIDcxLCAxOTcsIDY3LCA2OSwgNzYsIDgzLCA3MywgODUsIDgzLCAxMjgsIAotICAgIDY3LCA3MiwgNjUsIDc3LCA3MywgNzYsIDczLCAxMjgsIDY3LCA3NiwgNzMsIDc4LCA3MSwgNzMsIDc4LCAxOTksIDY3LCA3OSwgCi0gICAgNzcsIDgwLCA2NSwgODIsIDY5LCAxMjgsIDY3LCA3OSwgNzgsIDgzLCA4NCwgNjUsIDc4LCAyMTIsIDY3LCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgNjcsIDg0LCAxMjgsIDY3LCA3OSwgODIsIDc5LCA3OCwgNzMsIDgzLCAxMjgsIDY3LCA3OSwgODIsIDgyLCA2OSwgNjcsIAotICAgIDg0LCAxMjgsIDY3LCA4MiwgNjksIDY1LCA4NCwgNzMsIDg2LCAxOTcsIDY3LCA4MiwgNjksIDgzLCA2NywgNjksIDc4LCAKLSAgICAyMTIsIDY3LCA4MiwgODUsIDkwLCA2OSwgNzMsIDgyLCAyMDcsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDg0LCAxMjgsIAotICAgIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDY5LCAyMTAsIDY3LCA4NywgNjksIDc5LCA4MiwgODQsIDcyLCAxMjgsIDY3LCA4OSwgCi0gICAgODAsIDY5LCA4MiwgODUsIDgzLCAxMjgsIDY3LCA4OSwgODIsIDY5LCA3OCwgNjUsIDczLCAxOTUsIDY4LCA2NSwgNzEsIDY1LCAKLSAgICA3NiwgNzEsIDY1LCAxMjgsIDY4LCA2OSwgNjcsIDY1LCA4OSwgNjksIDY4LCAxMjgsIDY4LCA2OSwgNzgsIDY1LCA4MiwgNzMsIAotICAgIDg1LCAyMTEsIDY4LCA2OSwgODksIDg0LCA2OSwgODIsIDc5LCAyMTMsIDY4LCA3MiwgNjUsIDc2LCA2NSwgODQsIDcyLCAKLSAgICAxMjgsIDY4LCA3MywgNjUsIDc3LCA2OSwgODQsIDY5LCAyMTAsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDc5LCAyMDYsIAotICAgIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzcsIDc3LCA3MywgNzgsIDcxLCAxMjgsIDY4LCA3MywgCi0gICAgODAsIDc2LCA3OSwgODUsIDc4LCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDgzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTUsIDU2LCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCAxMjgsIAotICAgIDY4LCA4MiwgNjUsIDcwLCA4NCwgNzMsIDc4LCAxOTksIDY5LCA2NSwgNjYsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCA2NSwgCi0gICAgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCA2NiwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA3MywgNzEsIDcyLCAKLSAgICA4NCwgNjksIDY5LCAyMDYsIDY5LCA3NiwgNjUsIDcwLCA4MiwgNzksIDc4LCAxMjgsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIAotICAgIDczLCAxOTUsIDY5LCA3NywgODAsIDcyLCA2NSwgODQsIDczLCAxOTUsIDY5LCA3OCwgODEsIDg1LCA3MywgODIsIDg5LCAKLSAgICAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY5LCA4NCwgNzgsIDY1LCA3MiwgODQsIDY1LCAxMjgsIAotICAgIDY5LCA4NiwgNjksIDc4LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA2NSwgNzMsIDc2LCA4NSwgODIsIDY5LCAxMjgsIDcwLCA2NSwgCi0gICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA3MywgODMsIDcyLCAKLSAgICA2OSwgODksIDY5LCAxMjgsIDcwLCA3OSwgNzgsIDcxLCA3NywgNjUsIDc4LCAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIAotICAgIDg0LCAxOTcsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA4MiwgNzksIDg3LCA3OCwgNzMsIDc4LCAKLSAgICAxOTksIDcxLCA2NSwgODIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDc4LCAxMjgsIAotICAgIDcxLCA3MywgODIsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNjksIDc3LCAxOTcsIDcyLCA2NSwgCi0gICAgNzAsIDg1LCA3NSwgNzIsIDY1LCAxMjgsIDcyLCA2NSwgNzYsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgNzYsIDY2LCAKLSAgICA2OSwgODIsIDY4LCAxMjgsIDcyLCA2NSwgODMsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgODksIDY1LCA3OCwgNzgsIAotICAgIDY1LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCA3MywgNzgsIDcxLCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDc2LCAKLSAgICAyMTcsIDczLCA0NSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDczLCA2NiwgNzMsIDcwLCA3MywgNzYsIDczLCAxMjgsIAotICAgIDczLCA2NywgNzIsIDY1LCA2OCwgNzMsIDc4LCAxMjgsIDczLCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3NiwgCi0gICAgNzMsIDc3LCA3NywgODUsIDUxLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDczLCA3OCwgNjgsIDczLCAKLSAgICA4MiwgNjksIDY3LCAyMTIsIDczLCA3OCwgNzAsIDczLCA3OCwgNzMsIDg0LCAyMTcsIDczLCA3OCwgODQsIDY5LCA4MiwgNjksIAotICAgIDgzLCAyMTIsIDczLCA3OSwgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDc0LCA2NSwgNzgsIDg1LCA2NSwgODIsIDg5LCAKLSAgICAxMjgsIDc0LCA2NSwgODAsIDY1LCA3OCwgNjksIDgzLCAxOTcsIDc0LCA4NSwgODAsIDczLCA4NCwgNjksIDgyLCAxMjgsIAotICAgIDc1LCA2NSwgNzUsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc1LCA2NSwgODIsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA2NSwgCi0gICAgODIsIDc5LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA2OSwgNzcsIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCA3MywgNzgsIDgzLCAKLSAgICA3MiwgNzMsIDgwLCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIDc3LCAxOTMsIDc1LCA3OSwgNzksIDc3LCA4NSwgODUsIAotICAgIDg0LCAxMjgsIDc1LCA4NSwgODIsIDc5LCA3OSwgNzgsIDY5LCAxMjgsIDc2LCA2NSwgNzgsIDcxLCA4NSwgNjUsIDcxLCAKLSAgICAxOTcsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc3LCA2NSwgNzMsIDc1LCA4NSwgODIsIDc5LCAxMjgsIAotICAgIDc3LCA2NSwgNzMsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA2NSwgNzgsIDgzLCA4OSwgNzksIDc4LCAxMjgsIDc3LCA2NSwgCi0gICAgODIsIDY2LCA4NSwgODQsIDY1LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDc3LCA2NSwgODIsIDgyLCAKLSAgICA3MywgNjUsIDcxLCAxOTcsIDc3LCA2NSwgODIsIDgyLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgODMsIDgzLCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDc3LCA2NSwgODQsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDc3LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4NCwgNzksIDc4LCAxMjgsIDc3LCA2OSwgODIsIDY3LCA4NSwgODIsIDg5LCAxMjgsIAotICAgIDc3LCA2OSwgODQsIDgyLCA2OSwgODQsIDY5LCAyMTEsIDc3LCA3MywgNzUsIDg1LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA3OSwgCi0gICAgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCA3OSwgNzIsIDY1LCA3NywgNzcsIDY1LCAxOTYsIDc3LCA3OSwgODIsIDc4LCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDc4LCA2OSwgODAsIDg0LCA4NSwgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODcsIDc2LCA3MywgNzgsIDY5LCAKLSAgICAxMjgsIDc4LCA3MSwgNjksIDY1LCA2OCwgNjUsIDc2LCAxMjgsIDc4LCA3MywgNzUsIDY1LCA3MiwgNzMsIDg0LCAxMjgsIAotICAgIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCAyMDYsIDc4LCA4OSwgNzMsIDc4LCA0NSwgNjgsIDc5LCAxMjgsIDc5LCA2NiwgCi0gICAgNzksIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAxMjgsIDc5LCA3OCwgNjksIDQ1LCAKLSAgICA3NiwgNzMsIDc4LCAxOTcsIDc5LCA3OCwgNjksIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDc5LCA3OSwgODksIDY1LCA3OCwgNzgsIAotICAgIDY1LCAxMjgsIDc5LCA4MiwgODQsIDcyLCA3OSwgNjgsIDc5LCAyMTYsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAKLSAgICAxMjgsIDgwLCA2NSwgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODcsIDY1LCAxMjgsIAotICAgIDgwLCA2NSwgNzcsIDY1LCA2NSwgNjksIDcyLCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA4MCwgNjksIDg0LCAxMjgsIDgwLCA2NSwgCi0gICAgNzgsIDg5LCA3MywgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIDgwLCA2NSwgODAsIDg5LCAKLSAgICA4MiwgODUsIDgzLCAxMjgsIDgwLCA2NSwgODIsIDY5LCA4MiwgNjksIDc4LCAxMjgsIDgwLCA2NSwgODQsIDg0LCA2OSwgODIsIAotICAgIDc4LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAyMDYsIDgwLCA2OSwgODQsIDY1LCA4MywgNzcsIDY1LCAKLSAgICAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIDczLCAxMjgsIDgwLCA3MiwgNzMsIDc4LCA4NCwgNzIsIDg1LCAxMjgsIAotICAgIDgwLCA3MiwgODUsIDg0LCA3MiwgNjUsIDc5LCAxMjgsIDgwLCA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA4MiwgCi0gICAgNjksIDY3LCA2OSwgNjgsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAxOTYsIDgwLCA4MiwgNjksIDg2LCAKLSAgICA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNzMsIDg2LCA2NSwgODQsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDgwLCA2OSwgODIsIAotICAgIDg0LCAyMTcsIDgyLCA2NSwgNzUsIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDgyLCA2NSwgODAsIDczLCA4MywgNzcsIDY1LCAKLSAgICAxMjgsIDgyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgyLCA2OSwgNjUsIDcyLCA3NywgODUsIDc1LCAxMjgsIAotICAgIDgyLCA2OSwgNzYsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDgyLCA2OSwgODIsIDY5LCA3NSwgNjUsIDc4LCAxMjgsIDgyLCA2OSwgCi0gICAgODQsIDgyLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA3MywgODQsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgyLCA3OSwgODMsIDY5LCAKLSAgICA4NCwgODQsIDY5LCAxMjgsIDgyLCA4NSwgODUsIDY2LCA4NSwgODIsIDg1LCAxMjgsIDgzLCA2NSwgNzMsIDc1LCA4NSwgODIsIAotICAgIDg1LCAxMjgsIDgzLCA2NSwgNzYsIDg0LCA3MywgODIsIDY5LCAxMjgsIDgzLCA2NSwgNzcsIDgwLCA3MiwgNjUsIDc5LCAKLSAgICAxMjgsIDgzLCA2NSwgNzgsIDg5LCA3OSwgNzksIDcxLCAxOTMsIDgzLCA2NywgNzIsIDc5LCA3NiwgNjUsIDgyLCAxMjgsIAotICAgIDgzLCA2NywgODIsIDg1LCA4MCwgNzYsIDY5LCAxMjgsIDgzLCA2OSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgzLCA2OSwgCi0gICAgNzcsIDg1LCA3OCwgNjcsIDczLCAxOTMsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAxMjgsIDgzLCA3MywgNzgsIDc1LCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MywgODIsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDgzLCA3MywgODgsIDQ1LCA3NiwgNzMsIAotICAgIDc4LCAxOTcsIDgzLCA3NiwgNjUsIDg2LCA3OSwgNzgsIDczLCAxOTUsIDgzLCA3OCwgNzksIDg3LCA3NywgNjUsIDc4LCAKLSAgICAxMjgsIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgNzEsIDgzLCAxMjgsIAotICAgIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg1LCA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgCi0gICAgNjUsIDg2LCA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDg1LCAxMjgsIDgzLCA4NCwgODIsIDY1LCAKLSAgICA4NCwgNzMsIDY1LCAyMDYsIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDc2LCAyMTcsIDgzLCA4NSwgNjYsIDc0LCA2OSwgNjcsIAotICAgIDg0LCAxMjgsIDgzLCA4NSwgNjcsIDY3LCA2OSwgNjksIDY4LCAxMjgsIDgzLCA4OSwgNzgsIDY5LCA4NiwgNzcsIDY1LCAKLSAgICAxMjgsIDg0LCA2NSwgNzMsIDc2LCA3NiwgNjksIDgzLCAyMTEsIDg0LCA2NSwgNzMsIDgzLCA4OSwgNzksIDg1LCAxMjgsIAotICAgIDg0LCA2NSwgODQsIDg0LCA3OSwgNzksIDY5LCAxOTYsIDg0LCA2NSwgODQsIDg3LCA2OSwgNjksIDc2LCAxMjgsIDg0LCA2NywgCi0gICAgNzIsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA2OSwgODMsIDgzLCA2NSwgODIsIDc5LCAyMDYsIDg0LCA2OSwgODMsIDgzLCAKLSAgICA2OSwgODIsIDY1LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCA4NCwgNjksIDY5LCAyMDYsIDg0LCA3MiwgODUsIDgyLCA3MywgODMsIAotICAgIDY1LCAyMTgsIDg0LCA3MywgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg0LCA3MywgODIsIDc5LCA3OCwgNzMsIDY1LCAKLSAgICAyMDYsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCAyMTEsIDg0LCA4MiwgNzMsIDczLCA4MywgNjUsIDgwLCAxMjgsIAotICAgIDg0LCA4MiwgODksIDY2LCA3NiwgNzMsIDc5LCAyMDYsIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDcxLCAxMjgsIDg0LCA4NiwgCi0gICAgNzMsIDc3LCA2NSwgNjgsIDg1LCAyMTAsIDg0LCA4NywgNzksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDg1LCA0NSwgNjksIDc5LCAKLSAgICA0NSwgNjksIDg1LCAxMjgsIDg1LCA2NiwgODUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDg1LCA3NywgNjYsIDgyLCA2OSwgNzYsIAotICAgIDc2LCAxOTMsIDg2LCA2NSwgODMsIDg0LCA3OCwgNjksIDgzLCAyMTEsIDg2LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDg2LCA3MywgNjksIDg3LCA2OCwgNjUsIDg0LCAxOTMsIDg2LCA3MywgNzYsIDc2LCA2NSwgNzEsIDY5LCAxMjgsIAotICAgIDg2LCA3OSwgNzMsIDY3LCA3MywgNzgsIDcxLCAxMjgsIDg3LCA2NSwgODMsIDY1LCA3NiwgNzYsIDY1LCAyMDUsIDg3LCA2NSwgCi0gICAgODMsIDg0LCA3MywgNzgsIDcxLCAxMjgsIDg5LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg5LCA3OSwgODUsIDg0LCAKLSAgICA3MiwgNzAsIDg1LCAyMDQsIDg5LCA4MCwgNzksIDgyLCA4MiwgNzksIDczLCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIAotICAgIDIwNiwgODAsIDY5LCA4MiwgODMsIDczLCA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNzMsIDY1LCAyMDYsIDg1LCA4MCwgCi0gICAgODcsIDY1LCA4MiwgNjgsIDIxMSwgNzcsIDY1LCA3MiwgNzQsIDc5LCA3OCwgMTk5LCA2NywgNzMsIDgyLCA2NywgNzYsIDY5LCAKLSAgICAxMjgsIDc5LCA4MywgNzcsIDY1LCA3OCwgODksIDE5MywgNjYsIDgyLCA2NSwgNjcsIDc1LCA2OSwgMjEyLCA4NSwgODAsIAotICAgIDgzLCA3MywgNzYsIDc5LCAyMDYsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIDEyOCwgNjgsIDczLCA3OCwgNzEsIDY2LCA2NSwgCi0gICAgMjEyLCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAxMjgsIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIDIwNiwgODMsIDc2LCAKLSAgICA2NSwgNzgsIDg0LCA2OSwgMTk2LCA4NiwgNjUsIDgyLCA3MywgNjUsIDc4LCAyMTIsIDcxLCA3NiwgNzksIDg0LCA4NCwgNjUsIAotICAgIDIwNCwgNzIsIDY1LCA3OCwgODUsIDc4LCA3OSwgMjA3LCA2OCwgNjUsIDcxLCA2OSwgODMsIDcyLCAxMjgsIDg0LCA2NSwgCi0gICAgNzEsIDY1LCA3NiwgNzksIDE5OSwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgMjA2LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCAKLSAgICAyMDQsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDE5NywgNzMsIDc4LCA4MywgODUsIDc2LCA2NSwgMjEwLCA3OCwgNjUsIAotICAgIDgzLCA3NSwgNjUsIDgwLCAyMDEsIDY3LCA3OSwgODIsIDc4LCA2OSwgODIsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgCi0gICAgMTk2LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCAyMDAsIDg2LCA3MywgODIsIDY1LCA3NywgNjUsIDEyOCwgNjksIDc2LCAKLSAgICA2OSwgNzcsIDY5LCA3OCwgMjEyLCA2NiwgODUsIDc2LCA3NiwgNjksIDg0LCAxMjgsIDY4LCA3OSwgODQsIDc2LCA2OSwgODMsIAotICAgIDIxMSwgNzksIDcxLCA3OSwgNzgsIDY5LCA3NSwgMTI4LCA4NCwgNjksIDY4LCA4NSwgNzgsIDcxLCAxMjgsIDc1LCA3MywgCi0gICAgODIsIDcxLCA3MiwgNzMsIDIxOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTk2LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCAKLSAgICAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDIxMCwgODMsIDc5LCA3NiwgNzMsIDY4LCA4NSwgMjExLCA2OCwgNzksIAotICAgIDg1LCA2NiwgNzYsIDY5LCAxMjgsIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDE5NiwgNzMsIDc4LCA4MywgNzMsIDY4LCA2OSwgCi0gICAgMTI4LCA3OCwgNjksIDczLCA4NCwgNzIsIDY5LCAyMTAsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDIxMCwgODMsIDczLCAKLSAgICA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4MywgODUsIDY2LCA4MywgNjksIDg0LCAxMjgsIDg3LCA2OSwgODMsIDg0LCA2OSwgODIsIAotICAgIDIwNiwgNjcsIDcyLCA3MywgNzgsIDY5LCA4MywgMTk3LCA3OCwgODUsIDc4LCA2NSwgODYsIDczLCAyMDMsIDg0LCA3MiwgCi0gICAgNDUsIDY3LCA4MiwgNjksIDE5NywgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2NSwgODIsIDc1LCA4NCwgNzMsIDc1LCAKLSAgICAyMDcsIDY5LCA3NiwgNjksIDg2LCA2OSwgNzgsIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgMTI4LCA3NywgNjUsIAotICAgIDgyLCA3NSwgNjksIDgyLCAxMjgsIDc5LCA4MCwgNjksIDc4LCA3MywgNzgsIDE5OSwgODQsIDg3LCA2OSwgNzYsIDg2LCA2OSwgCi0gICAgMTI4LCA2NSwgODIsIDgyLCA3OSwgODcsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNjksIDczLCAKLSAgICA3MSwgNzIsIDg0LCA3MiwgMjExLCA3NSwgNjUsIDgzLCA3NSwgNjUsIDc2LCAxMjgsIDc5LCA2NiwgNzYsIDczLCA4MSwgODUsIAotICAgIDE5NywgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgMjA0LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDg2LCA4MiwgCi0gICAgNjUsIDY3LCA3MiwgODksIDEyOCwgNjUsIDgyLCA2NywgNzIsIDY1LCA3MywgMTk1LCA3MCwgNjUsIDc2LCA3NiwgNzMsIDc4LCAKLSAgICAxOTksIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDE5NywgODAsIDY5LCA4MiwgNjcsIDY5LCA3OCwgMjEyLCA2NywgNjksIAotICAgIDY4LCA3MywgNzYsIDc2LCAxOTMsIDY3LCA3OSwgNzgsIDg0LCA4MiwgNzksIDIwNCwgNjcsIDg1LCA4MiwgODYsIDczLCA3OCwgCi0gICAgMTk5LCA2OCwgNzMsIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDY5LCA4MSwgODUsIDY1LCA3NiwgODMsIDEyOCwgNzAsIDczLCAKLSAgICA3NiwgNzYsIDY5LCA4MiwgMTI4LCA3MSwgNjUsIDc4LCA3MSwgNzMsIDY1LCAxMjgsIDczLCA3OCwgODYsIDY5LCA4MiwgODMsIAotICAgIDE5NywgNzMsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCAxOTMsIDgyLCA3OSwgCi0gICAgODUsIDc4LCA2OCwgNjksIDE5NiwgODMsIDY1LCA3OCwgODksIDY1LCA3NSwgMTkzLCA4NCwgNjcsIDcyLCA2OSwgNzIsIDY5LCAKLSAgICAyMDAsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTAsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MSwgMTI4LCA4NCwgNzksIAotICAgIDc4LCA2OSwgNDUsIDUzLCAxMjgsIDg0LCA3OSwgODAsIDY2LCA2NSwgODIsIDEyOCwgODQsIDg1LCA4MiwgODQsIDc2LCA2OSwgCi0gICAgMTI4LCA4OSwgNzMsIDY4LCA2OCwgNzMsIDgzLCAyMDAsIDQ1LCA3NSwgNzIsIDg5LCA3MywgNzYsIDEyOCwgNjUsIDgzLCAKLSAgICA3MiwgNzEsIDY1LCA2NiwgMTI4LCA2NiwgNjUsIDc3LCA2NiwgNzksIDc5LCAxMjgsIDY2LCA3OSwgODQsIDg0LCA3OSwgNzcsIAotICAgIDEyOCwgNjcsIDY5LCA3OCwgODQsIDgyLCA2OSwgMTI4LCA2NywgNjksIDc4LCA4NCwgODIsIDY5LCAxOTYsIDY3LCA3OSwgCi0gICAgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNjcsIDc5LCA3OCwgODQsIDc5LCA4NSwgMjEwLCA2NywgNzksIDg1LCA3OCwgNjcsIDczLCAKLSAgICAyMDQsIDY3LCA4MiwgNzksIDgzLCA4MywgNjksIDE5NiwgNjgsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA2OCwgNzMsIAotICAgIDg2LCA3MywgNjgsIDY5LCAxOTYsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDEyOCwgNjksIDY1LCA4MywgODQsIDY5LCA4MiwgCi0gICAgMjA2LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDgzLCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDEyOCwgNzUsIDc5LCAKLSAgICA3NywgNjYsIDg1LCA4NiwgMTkzLCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA4NSwgODMsIDcyLCA4NSwgNTAsIAotICAgIDEyOCwgNzYsIDY5LCA2NSwgNjgsIDY5LCA4MiwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIDg0LCAxOTMsIDc3LCA2OSwgCi0gICAgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIDY1LCA4NCwgODUsIDgyLCA2NSwgMjA0LCA3OCwgNzMsIDc4LCA2OSwgODQsIDg5LCAKLSAgICAxMjgsIDgwLCA2OSwgNzgsIDY3LCA3MywgNzYsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCA4MywgMTI4LCA4MywgNzUsIAotICAgIDc2LCA3MywgODIsIDc5LCAyMDYsIDgzLCA3OSwgNzEsIDY4LCA3MywgNjUsIDIwNiwgODMsIDg0LCA3MywgNzEsIDc3LCA2NSwgCi0gICAgMTI4LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCAxOTMsIDg0LCA2NSwgNjUsIDc2LCA4NSwgNzQsIDE5MywgODQsIDcyLCAKLSAgICA2OSwgODMsIDY5LCA3OSwgMjExLCA4NCwgNzksIDc4LCA3MSwgODUsIDY5LCAxMjgsIDY1LCA2NywgNjUsIDY4LCA2OSwgNzcsIAotICAgIDIxNywgNjUsIDY3LCA2NywgNzksIDg1LCA3OCwgMjEyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDgyLCAxMjgsIDY1LCA3OCwgCi0gICAgNjcsIDc5LCA4MiwgNjUsIDEyOCwgNjUsIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCA2NiwgNjUsIDc2LCA4NSwgNjgsIDY1LCAKLSAgICAxMjgsIDY2LCA2NSwgODMsIDcyLCA3NSwgNzMsIDIxMCwgNjYsIDY5LCA3OCwgOTAsIDY5LCA3OCwgMTk3LCA2NiwgNzMsIAotICAgIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY2LCA3MywgODMsIDcyLCA3OSwgODAsIDEyOCwgNjYsIDc2LCA2OSwgNzgsIDY4LCA2OSwgCi0gICAgMTk2LCA2NiwgNzksIDg3LCA4NCwgNzMsIDY5LCAxMjgsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDEyOCwgNjcsIDY5LCAKLSAgICA4MiwgNDUsIDg3LCA2NSwgMTI4LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCAyMDAsIDY3LCA3MiwgODIsIDczLCA4NiwgNzMsIAotICAgIDEyOCwgNjcsIDc2LCA4NSwgODMsIDg0LCA2OSwgMjEwLCA2OCwgNjUsIDcxLCA3MSwgNjksIDgyLCAxMjgsIDY4LCA2NSwgCi0gICAgODAsIDQ1LCA2NiwgNjksIDIwMSwgNjgsIDY1LCA4MCwgNDUsIDgwLCA3MywgMjAxLCA2OCwgNjksIDY3LCA3MywgNzcsIDY1LCAKLSAgICAyMDQsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDc0LCA2OSwgODIsIDg2LCA3MywgMTI4LCA2OCwgNzksIAotICAgIDg1LCA2NiwgNzYsIDY5LCAxOTYsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDE5MywgNjksIDY1LCA4MiwgODQsIDcyLCA3NiwgCi0gICAgMjE3LCA2OSwgNzMsIDcxLCA3MiwgODQsIDg5LCAxMjgsIDY5LCA4MywgNjcsIDY1LCA4MCwgNjksIDEyOCwgNzAsIDY5LCAKLSAgICA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNzYsIDY5LCA4OCwgODUsIDgzLCAxMjgsIDcxLCA2OSwgODIsIDY5LCA4MywgNzIsIAotICAgIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCAyMTAsIDcyLCA2OSwgCi0gICAgNzYsIDc3LCA2OSwgODQsIDEyOCwgNzIsIDc5LCA3NiwgNjgsIDczLCA3OCwgMTk5LCA3MywgNzgsIDcyLCA3MywgNjYsIDczLCAKLSAgICAyMTIsIDczLCA4MywgODMsIDcyLCA2NSwgODIsIDEyOCwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgMTkzLCA3NSwgNjUsIAotICAgIDg2LCA4OSwgNzUsIDY1LCAxMjgsIDc1LCA2OSwgNjksIDgwLCA3MywgNzgsIDE5OSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgCi0gICAgMjAwLCA3NSwgNzMsIDgzLCA3MywgNzcsIDUzLCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDc4LCAKLSAgICA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgNzksIDgyLCA2NSwgNzgsIDczLCAxOTUsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIAotICAgIDIxMSwgNzcsIDY1LCA3NiwgNjUsIDc1LCA3OSwgMjA2LCA3NywgNjUsIDgyLCA3NSwgNDUsIDQ5LCAxMjgsIDc3LCA2NSwgCi0gICAgODIsIDc1LCA0NSwgNTAsIDEyOCwgNzcsIDc5LCA4MiwgODQsIDY1LCA4MiwgMTI4LCA3NywgODUsIDY3LCA2NSwgNjUsIDY4LCAKLSAgICAxMjgsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNjksIDE5NiwgNzgsIDY5LCA4NSwgODQsIDgyLCA2NSwgMjA0LCA3OCwgNzksIAotICAgIDg0LCA2NywgNzIsIDY5LCAxOTYsIDc5LCA4MiwgNjgsIDczLCA3OCwgNjUsIDIwNCwgODAsIDY1LCA3NiwgNjUsIDg1LCA3OCwgCi0gICAgMTk5LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAyMDAsIDgwLCA3MiwgODIsIDY1LCA4MywgNjksIDEyOCwgODAsIDczLCAKLSAgICA3NiwgNjcsIDgyLCA3OSwgMjE1LCA4MCwgNzYsIDY1LCA3MSwgNzMsIDc5LCAyMTEsIDgwLCA3NiwgNzksIDgwLCA3MiwgODUsIAotICAgIDEyOCwgODAsIDc5LCA3NSwgNzksIDc0LCA3MywgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDc4LCAxMjgsIDgyLCA3MywgCi0gICAgNzUsIDgyLCA3MywgNzUsIDEyOCwgODMsIDY5LCA4MiwgNzMsIDcwLCA4MywgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAKLSAgICAxOTMsIDgzLCA3MiwgNjUsIDgwLCA2OSwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNzYsIAotICAgIDc5LCA4MCwgNzMsIDc4LCAxOTksIDgzLCA3NywgNjUsIDc2LCA3NiwgNjksIDIxMCwgODMsIDc3LCA3MywgNzYsIDczLCA3OCwgCi0gICAgMTk5LCA4MywgODAsIDY5LCA2OSwgNjcsIDcyLCAxMjgsIDgzLCA4MCwgNzMsIDY4LCA2OSwgODIsIDIxNywgODMsIDg1LCAKLSAgICA4MiwgNjUsIDc4LCA3MSwgMTI4LCA4NCwgNjUsIDQ1LCA4MiwgNzksIDc2LCAxMjgsIDg0LCA2NSwgNzcsIDczLCA3OCwgNzEsIAotICAgIDEyOCwgODQsIDY5LCA3NiwgNjksIDczLCA2NSwgMTI4LCA4NCwgNjksIDc2LCA3MywgODMsIDcyLCAxOTMsIDg0LCA2OSwgCi0gICAgODMsIDgzLCA2OSwgODIsIDE5MywgODQsIDcyLCA2OSwgODQsIDcyLCA2OSwgMTI4LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKLSAgICAyMDAsIDg0LCA3MiwgODIsIDY5LCA2NSwgNjgsIDEyOCwgODQsIDcyLCA4MiwgNjksIDY5LCA0NSwgMTk2LCA4NCwgNzksIAotICAgIDc4LCA2OSwgNDUsIDUyLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTQsIDEyOCwgODQsIDg2LCA4MiwgNzMsIDY4LCA3OSwgCi0gICAgMTI4LCA4NSwgODAsIDg0LCA4NSwgODIsIDc4LCAxMjgsIDg3LCA3OSwgNzYsIDc5LCA4MywgNzksIDEyOCwgODksIDY5LCAKLSAgICA3NiwgNzYsIDc5LCA4NywgMTI4LCA4OSwgNzksIDQ1LCA4OSwgNjUsIDY5LCAxMjgsIDg5LCA4NSwgNDUsIDg5LCA2OSwgNzksIAotICAgIDEyOCwgOTAsIDY5LCA3NywgNzYsIDc0LCA2NSwgMTI4LCA5MCwgNjksIDc3LCA3NiwgODksIDY1LCAxMjgsIDY1LCA2NiwgCi0gICAgODksIDgzLCA3NywgNjUsIDIwNCwgNjUsIDcwLCA3MSwgNzIsIDY1LCA3OCwgMjAxLCA2NSwgNzAsIDgyLCA3MywgNjcsIDY1LCAKLSAgICAyMDYsIDY1LCA3MiwgNjUsIDcxLCA3MSwgNjUsIDIxMCwgNjUsIDczLCA3MiwgODYsIDg1LCA4MywgMTI4LCA2NSwgNzMsIAotICAgIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3MywgODYsIDczLCA3NiwgNzMsIDIwMywgNjUsIDc2LCA2NSwgODksIDcyLCA2OSwgCi0gICAgMTI4LCA2NSwgNzYsIDczLCA3MSwgNzgsIDY5LCAxOTYsIDY1LCA3OCwgNzgsIDg1LCA3MywgODQsIDIxNywgNjUsIDgwLCAKLSAgICA2NSwgNjUsIDg0LCA3OSwgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDY5LCAxMjgsIDY1LCA4MiwgNzcsIDc5LCA4NSwgODIsIAotICAgIDEyOCwgNjUsIDgyLCA4MiwgNzMsIDg2LCA2OSwgMTI4LCA2NSwgODIsIDgzLCA2OSwgNzksIDgzLCAxMjgsIDY1LCA4MiwgCi0gICAgODUsIDcyLCA4NSwgNjUsIDEyOCwgNjUsIDgzLCA2NywgNjksIDc4LCA4NCwgMTI4LCA2NSwgODUsIDcxLCA4NSwgODMsIDg0LCAKLSAgICAxMjgsIDY1LCA4NSwgODMsIDg0LCA4MiwgNjUsIDIwNCwgNjUsIDg1LCA4NCwgODUsIDc3LCA3OCwgMTI4LCA2NSwgODYsIAotICAgIDY5LCA4MiwgNjUsIDcxLCAxOTcsIDY2LCA2NSwgNjgsIDcxLCA2OSwgODIsIDEyOCwgNjYsIDY1LCA3MiwgNjUsIDgyLCA1MCwgCi0gICAgMTI4LCA2NiwgNjUsIDczLCA3NywgNjUsIDczLCAxMjgsIDY2LCA2NSwgNzgsIDg0LCA3OSwgNjcsIDEyOCwgNjYsIDY1LCAKLSAgICA4MiwgNzYsIDY5LCA4OSwgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNjksIDY5LCAxMjgsIDY2LCA2OSwgODQsIDg3LCA2OSwgNjksIAotICAgIDIwNiwgNjYsIDY5LCA4OSwgODksIDY1LCA3NiwgMTI4LCA2NiwgNzMsIDg0LCA4NCwgNjksIDgyLCAxMjgsIDY2LCA3OSwgCi0gICAgODIsIDg1LCA4NCwgNzksIDEyOCwgNjYsIDgyLCA2OSwgODYsIDczLCA4MywgMTI4LCA2NiwgODIsIDc5LCA3OCwgOTAsIDY5LCAKLSAgICAxMjgsIDY2LCA4NSwgNjcsIDc1LCA3NiwgNjksIDEyOCwgNjcsIDY1LCA3OCwgNjcsIDY5LCA3NiwgMTI4LCA2NywgNjUsIAotICAgIDc4LCA2NywgNjksIDgyLCAxMjgsIDY3LCA2NSwgNzgsIDY4LCA4MiwgNjUsIDEyOCwgNjcsIDY1LCA4NCwgNjUsIDg3LCA2NSwgCi0gICAgMTI4LCA2NywgNjUsIDg1LCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA3MiwgNjUsIDc3LCA3NSwgNzksIDEyOCwgNjcsIDcyLCAKLSAgICA2NSwgNzgsIDcxLCA2OSwgMTI4LCA2NywgNzIsIDY1LCA4MiwgNzMsIDc5LCAyMTIsIDY3LCA3MiwgNjksIDg2LCA4MiwgNzksIAotICAgIDIwNiwgNjcsIDcyLCA3MywgODIsIDY5LCA4NCwgMTI4LCA2NywgNzIsIDczLCA4MiwgNzksIDc4LCAxMjgsIDY3LCA3MiwgCi0gICAgODUsIDgyLCA2NywgNzIsIDEyOCwgNjcsIDc2LCA2OSwgNzAsIDQ1LCA0OSwgMTI4LCA2NywgNzYsIDY5LCA3MCwgNDUsIDUwLCAKLSAgICAxMjgsIDY3LCA3NiwgNzMsIDg2LCA3MywgODMsIDEyOCwgNjcsIDc2LCA3OSwgODMsIDY5LCA2OCwgMTI4LCA2NywgNzksIAotICAgIDcwLCA3MCwgNzMsIDc4LCAxMjgsIDY3LCA3OSwgNzYsIDg1LCA3NywgNzgsIDEyOCwgNjcsIDc5LCA3OCwgNzMsIDY3LCA2NSwgCi0gICAgMjA0LCA2NywgNzksIDgyLCA4MCwgODMsIDY5LCAxMjgsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDIxMiwgNjgsIDY1LCAKLSAgICA2NSwgNjgsIDcyLCA4NSwgMTI4LCA2OCwgNjUsIDc2LCA2NSwgODQsIDcyLCAxMjgsIDY4LCA2NSwgNzcsIDY1LCA4MiwgODUsIAotICAgIDEyOCwgNjgsIDY1LCA4MywgNjksIDczLCA2NSwgMTI4LCA2OCwgNjgsIDY1LCA3MiwgNjUsIDc2LCAxMjgsIDY4LCA2OSwgCi0gICAgNzYsIDY5LCA4NCwgNjksIDEyOCwgNjgsIDY5LCA3NiwgODAsIDcyLCA3MywgMTk1LCA2OCwgNjksIDc4LCA3OCwgNjksIDc4LCAKLSAgICAxMjgsIDY4LCA3MiwgNjUsIDY1LCA3NiwgODUsIDEyOCwgNjgsIDcyLCA2NSwgODIsIDc3LCA2NSwgMTI4LCA2OCwgNzMsIAotICAgIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgNzcsIDczLCA2OCwgNzMsIDE5MywgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgCi0gICAgMTI4LCA2OCwgNzMsIDg2LCA3OSwgODIsIDY3LCAxOTcsIDY4LCA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU2LCAKLSAgICAxMjgsIDY4LCA4NSwgODQsIDczLCA2OSwgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMTI4LCA2OSwgNzgsIAotICAgIDY1LCA4MiwgODgsIDczLCAyMTEsIDY5LCA4OCwgNjcsIDY5LCA4MywgODMsIDEyOCwgNjksIDg4LCA3MywgODMsIDg0LCA4MywgCi0gICAgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDY1LCAKLSAgICA2NywgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUyLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTMsIAotICAgIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1NCwgMTI4LCA3MCwgNjUsIDc3LCA3MywgNzYsIDg5LCAxMjgsIDcwLCA2NSwgCi0gICAgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY5LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCAKLSAgICAxOTMsIDcwLCA3MywgNzAsIDg0LCA2OSwgNjksIDIwNiwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA0OSwgMTI4LCA3MCwgNzYsIAotICAgIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTEsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MiwgCi0gICAgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUzLCAxMjgsIDcwLCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIDc2LCAKLSAgICA3OSwgODcsIDY5LCA4MiwgMTI4LCA3MCwgNzksIDgyLCA2NywgNjksIDgzLCAxMjgsIDcwLCA4NSwgNzgsIDY5LCA4MiwgNjUsIAotICAgIDIwNCwgNzEsIDY1LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA3MSwgNjksIDY4LCA3OSwgNzYsIDY1LCAxMjgsIDcxLCA2OSwgCi0gICAgNzcsIDczLCA3OCwgNzMsIDEyOCwgNzEsIDY5LCA3OCwgNjksIDgyLCA3MywgMTk1LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCAKLSAgICAyMDYsIDcxLCA3MiwgNjUsIDczLCA3OCwgODUsIDEyOCwgNzEsIDcyLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgODIsIAotICAgIDY1LCA4NCwgNjksIDgyLCAxMjgsIDcxLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY1LCA3OCwgCi0gICAgMjAxLCA3MSwgODUsIDgyLCA4NSwgODMsIDcyLCAxMjgsIDcyLCA2NSwgNzAsIDg1LCA3NSwgNzIsIDEyOCwgNzIsIDY5LCAKLSAgICA3MywgODMsIDY5LCA3MywgMTI4LCA3MiwgNjksIDgyLCA2NSwgNjksIDg1LCAyMDUsIDcyLCA2OSwgODIsIDc3LCA2OSwgODMsIAotICAgIDEyOCwgNzIsIDY5LCA4MiwgODUsIDg0LCA4NSwgMTI4LCA3MiwgODIsIDg5LCA4NiwgNzgsIDczLCAxOTMsIDcyLCA4NSwgCi0gICAgNzMsIDczLCA4NCwgNzksIDEyOCwgNzMsIDQ1LCA2NiwgNjksIDY1LCA3NywgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCAKLSAgICAxMjgsIDczLCA3NywgNzMsIDgzLCA2OSwgNzksIDIxMSwgNzMsIDc4LCA3MSwgODcsIDY1LCA5MCwgMTI4LCA3MywgNzgsIAotICAgIDczLCA3OCwgNzEsIDg1LCAxMjgsIDczLCA3OCwgODMsIDY5LCA2NywgODQsIDEyOCwgNzQsIDc5LCA3MywgNzgsIDY5LCA2OCwgCi0gICAgMTI4LCA3NSwgNjUsIDc4LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA2NSwgNzgsIDg0LCA2NSwgNzQsIDE5MywgNzUsIDY5LCAKLSAgICA3MCwgODUsIDc2LCA2NSwgMTI4LCA3NSwgNjksIDc3LCA4MCwgNzYsIDczLCAxMjgsIDc1LCA2OSwgNzcsIDgwLCA4NSwgNzYsIAotICAgIDEyOCwgNzUsIDY5LCA4OSwgNjcsIDY1LCA4MCwgMTI4LCA3NSwgNzIsIDc5LCA3NywgODUsIDg0LCAxMjgsIDc1LCA3NiwgCi0gICAgNzMsIDg0LCA3OSwgNzgsIDEyOCwgNzUsIDc5LCA4MiwgODUsIDc4LCA2NSwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIDU2LCAKLSAgICAxMjgsIDc1LCA4OSwgNjUsIDg0LCA3MiwgNzksIDIxMSwgNzUsIDg5LCA4NSwgODIsIDczLCA3MywgMTI4LCA3NiwgNjUsIAotICAgIDcyLCA4MywgNzIsIDg1LCAxMjgsIDc2LCA2NSwgNzcsIDY1LCA2OCwgNzIsIDEyOCwgNzYsIDY1LCA4NCwgNjksIDgyLCA2NSwgCi0gICAgMjA0LCA3NiwgNjksIDcxLCA3MywgNzksIDc4LCAxMjgsIDc2LCA2OSwgNzMsIDc3LCA3NywgNjUsIDEyOCwgNzYsIDY5LCAKLSAgICA4NCwgODQsIDY5LCA4MiwgMTI4LCA3NiwgNzMsIDc2LCA3MywgODQsIDcyLCAxMjgsIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIAotICAgIDE5NiwgNzYsIDczLCA3NywgNzcsIDg1LCA1MCwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDc2LCA3MywgCi0gICAgNzgsIDY5LCA0NSwgNTEsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU3LCAKLSAgICAxMjgsIDc2LCA3MywgNzgsIDc1LCA3MywgNzgsIDE5OSwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgMTk3LCA3NywgNjUsIAotICAgIDczLCA2OCwgNjksIDc4LCAxMjgsIDc3LCA2NSwgNzYsIDg0LCA2OSwgODMsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MSwgCi0gICAgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUyLCAxMjgsIDc3LCA2NSwgODIsIDg1LCA3NSwgODUsIDEyOCwgNzcsIDY1LCAKLSAgICA4NCwgODIsIDczLCA4OCwgMTI4LCA3NywgNjUsIDg4LCA3MywgNzcsIDY1LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA4NSwgNzcsIAotICAgIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDc2LCA3MywgMTI4LCA3NywgNjksIDgyLCA3NSwgNzIsIDY1LCAxMjgsIDc3LCA2OSwgCi0gICAgODQsIDgyLCA3MywgNjUsIDEyOCwgNzcsIDczLCA2OCwgNzYsIDczLCA3OCwgMTk3LCA3NywgNzMsIDc2LCA3NiwgNjksIDg0LCAKLSAgICAxMjgsIDc3LCA3MywgNzgsIDczLCA3NywgNjUsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCA4MywgMTI4LCA3NywgNzksIAotICAgIDg0LCA3MiwgNjksIDgyLCAxMjgsIDc3LCA4NSwgNzgsIDgzLCA4NSwgNjYsIDEyOCwgNzcsIDg1LCA4MSwgNjgsIDY1LCA3NywgCi0gICAgMTI4LCA3NywgODUsIDgyLCA3MSwgODUsIDUwLCAxMjgsIDc4LCA2NSwgODUsIDg0LCA3MiwgODMsIDEyOCwgNzgsIDY5LCAKLSAgICA3OCwgNjUsIDc4LCA3OSwgMTI4LCA3OCwgNjksIDg1LCA4NCwgNjksIDgyLCAxMjgsIDc4LCA3MywgNzgsIDY4LCA2NSwgNTAsIAotICAgIDEyOCwgNzgsIDczLCA4MiwgODUsIDcxLCA4NSwgMTI4LCA3OCwgNzksIDc1LCA3MiwgODUsIDc1LCAxMjgsIDc4LCA3OSwgCi0gICAgNzcsIDczLCA3OCwgNjUsIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgODUsIDc4LCA2NSwgODYsIDg1LCAKLSAgICAyMTIsIDc5LCA2NiwgNjksIDc2LCA3OSwgODMsIDEyOCwgNzksIDc3LCA2NSwgNzYsIDc5LCA3OCwgMTI4LCA3OSwgODAsIAotICAgIDY5LCA3OCwgNDUsIDgwLCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgNzksIDgyLCA2NywgNzIsIDczLCA2OCwgCi0gICAgMTI4LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCAxMjgsIDc5LCA4NCwgNzIsIDY1LCA3NiwgNjUsIDIwNiwgODAsIDY1LCAKLSAgICA3NiwgNzYsIDY1LCA4MywgMTI4LCA4MCwgNjUsIDc2LCA4NSwgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzcsIDY1LCA2OCwgNjUsIAotICAgIDEyOCwgODAsIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjksIDc4LCA3MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgCi0gICAgODIsIDgzLCA3OSwgNzgsIDEyOCwgODAsIDczLCA3NSwgODUsIDgyLCA4NSwgMTI4LCA4MCwgNzMsIDgwLCA3MywgNzgsIDcxLCAKLSAgICAxMjgsIDgwLCA3MywgODMsIDY3LCA2OSwgODMsIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCA3OSwgMTI4LCA4MCwgODIsIAotICAgIDY5LCA2NywgNjksIDY4LCAxOTcsIDgwLCA4MiwgNjksIDcwLCA2NSwgNjcsIDE5NywgODAsIDgyLCA3OSwgNjgsIDg1LCA2NywgCi0gICAgMjEyLCA4MCwgODUsIDgyLCA3MywgODQsIDg5LCAxMjgsIDgwLCA4NSwgODMsIDcyLCA3MywgNzgsIDE5OSwgODEsIDY5LCAKLSAgICA4NCwgNjUsIDc4LCA2NSwgMTI4LCA4MSwgODUsIDY2LCA4NSwgODQsIDgzLCAxMjgsIDgyLCA2NSwgNzcsIDY2LCA2NSwgODQsIAotICAgIDEyOCwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNzMsIDg0LCA4NSwgNjUsIDc2LCAxMjgsIDgyLCA4NSwgCi0gICAgNzgsIDc5LCA4NSwgODQsIDEyOCwgODMsIDY1LCA2NSwgNjgsIDcyLCA4NSwgMTI4LCA4MywgNjUsIDc0LCA2OCwgNjUsIDcyLCAKLSAgICAxMjgsIDgzLCA2NSwgNzcsIDY5LCA3NSwgNzIsIDEyOCwgODMsIDY1LCA3OCwgNzEsIDY1LCA1MCwgMTI4LCA4MywgNjUsIAotICAgIDc4LCA3OCwgODksIDY1LCAxMjgsIDgzLCA2NSwgODQsIDg1LCA4MiwgNzgsIDEyOCwgODMsIDY3LCA2NSwgNzYsIDY5LCA4MywgCi0gICAgMTI4LCA4MywgNjcsIDgyLCA2OSwgNjksIDc4LCAxMjgsIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDEyOCwgODMsIDY5LCAKLSAgICA2NSwgNzEsIDg1LCA3NiwgMjA0LCA4MywgNjksIDY3LCA3OSwgNzgsIDY4LCAxMjgsIDgzLCA2OSwgNjcsIDgyLCA2OSwgODQsIAotICAgIDEyOCwgODMsIDY5LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDczLCA4MywgNzcsIDY1LCAxMjgsIDgzLCA2OSwgCi0gICAgODIsIDg2LCA3MywgNjcsIDE5NywgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgMjE3LCA4MywgNjksIDg4LCA4NCwgNjUsIDc4LCAKLSAgICAyMTEsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNzUsIDg0LCA3MywgMTI4LCA4MywgNzIsIAotICAgIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNTAsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgCi0gICAgMTk5LCA4MywgNzIsIDczLCA2OSwgNzYsIDY4LCAxMjgsIDgzLCA3MiwgNzMsIDc4LCA3MywgNzEsIDEyOCwgODMsIDcyLCAKLSAgICA3OSwgODIsIDg0LCA4MywgMTI4LCA4MywgNzIsIDg1LCA2NiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDcwLCA3MCwgNzYsIAotICAgIDE5NywgODMsIDczLCA2NywgNzUsIDc2LCA2OSwgMTI4LCA4MywgNzMsIDc2LCA3MywgODEsIDg1LCAxOTMsIDgzLCA3MywgCi0gICAgODgsIDg0LCA3MiwgODMsIDEyOCwgODMsIDc2LCA3OSwgODcsIDc2LCA4OSwgMTI4LCA4MywgODAsIDY1LCA2NywgNzMsIDc4LCAKLSAgICAxOTksIDgzLCA4MCwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgODMsIDgwLCA3MywgODIsIDY1LCA3NiwgMTI4LCA4MywgODAsIAotICAgIDczLCA4MiwgNzMsIDg0LCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDgwLCA4MiwgNzksIDg1LCA4NCwgCi0gICAgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCAyMTEsIDgzLCA4NCwgODIsIDY1LCA3MywgNzAsIDEyOCwgODMsIDg0LCAKLSAgICA4MiwgNzMsIDY4LCA2OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAyMTEsIDgzLCA4NSwgNjYsIDczLCA4NCwgNzksIAotICAgIDEyOCwgODMsIDg1LCA2NywgNjcsIDY5LCA2OSwgMTk2LCA4MywgODUsIDc3LCA2NSwgODMsIDcyLCAxMjgsIDgzLCA4NSwgCi0gICAgNzcsIDc3LCA2OSwgODIsIDEyOCwgODMsIDg1LCA4MiwgNzAsIDY1LCA2NywgMTk3LCA4MywgODcsIDc5LCA4MiwgNjgsIDgzLCAKLSAgICAxMjgsIDgzLCA4OSwgNzgsIDY1LCA3MCwgNzMsIDEyOCwgODMsIDg5LCA3OSwgODUsIDg3LCA2NSwgMTI4LCA4NCwgNjUsIAotICAgIDc2LCA3MywgNzgsIDcxLCAxMjgsIDg0LCA2NSwgODQsIDg3LCA2OSwgNjksIDIwNCwgODQsIDY1LCA4NSwgODIsIDg1LCA4MywgCi0gICAgMTI4LCA4NCwgNjksIDc4LCA4NSwgODQsIDc5LCAxMjgsIDg0LCA3MiwgNjUsIDY1LCA3NiwgODUsIDEyOCwgODQsIDcyLCAKLSAgICA2NSwgNzIsIDY1LCA3OCwgMTI4LCA4NCwgNzIsIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCA2OCwgODMsIAotICAgIDEyOCwgODQsIDcyLCA3MywgODUsIDg0LCA3MiwgMTI4LCA4NCwgNzMsIDgwLCA2OSwgNzIsIDY1LCAxMjgsIDg0LCA3OSwgCi0gICAgNzgsIDY5LCA0NSwgNDksIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCA3MywgMTI4LCA4NCwgODIsIDczLCA4MCwgNzksIDY4LCAKLSAgICAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgNzUsIDEyOCwgODQsIDgzLCA3MiwgODUsIDcxLCA4MywgMTI4LCA4NCwgODQsIAotICAgIDY5LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA4NSwgODIsIDY2LCA2NSwgNzgsIDEyOCwgODUsIDgwLCA4MiwgNzMsIDcxLCA3MiwgCi0gICAgMjEyLCA4NSwgODAsIDg3LCA2NSwgODIsIDY4LCAxMjgsIDg1LCA4MiwgNjUsIDc4LCA4NSwgODMsIDEyOCwgODUsIDgzLCAKLSAgICA3MiwgODUsIDc3LCA4OCwgMTI4LCA4NiwgNjUsIDc2LCA3NiwgNjksIDg5LCAxMjgsIDg2LCA2NSwgODIsIDY5LCA3MywgNjUsIAotICAgIDIwMSwgODYsIDY1LCA4MiwgNzMsIDc1LCA2NSwgMTI4LCA4NiwgNzMsIDY3LCA4NCwgNzksIDgyLCAyMTcsIDg2LCA3MywgCi0gICAgODIsIDczLCA2NSwgNzcsIDEyOCwgODYsIDczLCA4MywgNjUsIDgyLCA3MSwgMTkzLCA4NiwgNzksIDc2LCA4NCwgNjUsIDcxLCAKLSAgICAxOTcsIDg3LCA2NSwgODIsIDc4LCA3MywgNzgsIDE5OSwgODcsIDY5LCA2NSwgODAsIDc5LCA3OCwgMTI4LCA4NywgNzIsIAotICAgIDY5LCA2OSwgNzYsIDY5LCAxOTYsIDg3LCA3MywgNzgsIDg0LCA2OSwgODIsIDEyOCwgODcsIDgyLCA3MywgODQsIDczLCA3OCwgCi0gICAgMTk5LCA4OSwgNjUsIDc1LCA2NSwgODMsIDcyLCAxMjgsIDg5LCA3MCwgNjksIDgzLCA3MywgODMsIDEyOCwgODksIDc5LCAKLSAgICA0NSwgODksIDY5LCA3OSwgMTI4LCA4OSwgODAsIDgzLCA3MywgNzYsIDczLCAxMjgsIDg0LCA3MiwgNjUsIDY1LCA3OCwgCi0gICAgMTkzLCA2NywgNjUsIDgyLCA3MywgNjUsIDIwNiwgODYsIDY1LCA4MiwgNzMsIDY1LCAxMjgsIDgzLCA4OSwgNzYsIDc5LCAKLSAgICA4NCwgMjAxLCA2NywgNjUsIDgyLCA3OSwgNzgsIDEyOCwgNzcsIDczLCA2OCwgNjgsIDc2LCAxOTcsIDY2LCA3NiwgNjUsIAotICAgIDY3LCA3NSwgMTI4LCA4MiwgNjksIDc0LCA2NSwgNzgsIDE5OSwgNjUsIDY3LCA2NywgNjksIDc4LCAyMTIsIDg0LCA4MiwgCi0gICAgNzMsIDgwLCA3NiwgMTk3LCA2OCwgNzksIDg0LCA4NCwgNjksIDE5NiwgNjksIDgxLCA4NSwgNjUsIDc2LCAyMTEsIDc2LCAKLSAgICA4OSwgNjcsIDczLCA2NSwgMjA2LCA4NiwgNjksIDgzLCA4MywgNjksIDIwNCwgNzYsIDg5LCA2OCwgNzMsIDY1LCAyMDYsIAotICAgIDc1LCA3MywgODMsIDczLCA3NywgMTgxLCA2NywgNzYsIDc5LCA4MywgNjksIDE5NiwgNjYsIDc5LCA4NCwgODQsIDc5LCAKLSAgICAyMDUsIDc3LCA2OSwgNjgsIDczLCA4NSwgMjA1LCA4MywgNzMsIDc4LCA3MSwgNzYsIDE5NywgNzIsIDY5LCA2NSwgODYsIAotICAgIDg5LCAxMjgsIDc3LCA2NSwgNzgsIDY3LCA3MiwgMjEzLCA2NiwgNzYsIDc5LCA2NywgNzUsIDEyOCwgNjcsIDc5LCA3NywgCi0gICAgNzcsIDY1LCAxMjgsIDc5LCA3NywgNjksIDcxLCA2NSwgMTI4LCA4NCwgNzksIDc4LCA3OSwgODMsIDEyOCwgNjUsIDc2LCAKLSAgICA4MCwgNzIsIDY1LCAxMjgsIDcwLCA4NCwgNzIsIDc5LCA4MiwgMTkzLCA4MywgNzMsIDcxLCA3NywgNjUsIDEyOCwgNjgsIAotICAgIDY1LCA4MywgNzMsIDY1LCAxMjgsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA4MywgODUsIDY2LCA4MywgNjksIDIxMiwgCi0gICAgNjUsIDc2LCA3NywgNzksIDgzLCAyMTIsIDY3LCA3OSwgODIsIDc4LCA2OSwgMjEwLCA4NiwgODUsIDc2LCA3MSwgNjUsIAotICAgIDIxMCwgNjksIDgxLCA4NSwgNjUsIDc2LCAxMjgsIDc2LCA2NSwgNzcsIDY4LCA2NSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgCi0gICAgNzksIDIwNiwgNjcsIDgyLCA3OSwgODMsIDgzLCAxMjgsIDczLCA2NywgNzIsIDc5LCA4MywgMTI4LCA3OCwgNzMsIDc4LCAKLSAgICA2OCwgNjUsIDE3OCwgODMsIDY1LCA4OSwgNzMsIDgzLCAyMDEsIDg0LCA3MiwgNjksIDg0LCA2NSwgMTI4LCA4NywgNzIsIAotICAgIDczLCA4NCwgNjksIDEyOCwgNzUsIDY1LCA4MCwgODAsIDY1LCAxMjgsIDc4LCA4NSwgNjYsIDczLCA2NSwgMjA2LCA4OSwgCi0gICAgNDUsIDY3LCA4MiwgNjksIDE5NywgNjYsIDY5LCA4MywgNzMsIDY4LCAxOTcsIDY3LCA2OSwgNzgsIDg0LCA4MiwgMTk3LCAKLSAgICA4MywgNzIsIDY1LCA2OCwgNjgsIDE5MywgODQsIDg3LCA2OSwgNzgsIDg0LCAyMTcsIDY5LCA2NSwgODIsIDg0LCA3MiwgCi0gICAgMTI4LCA3MCwgNzMsIDcwLCA4NCwgODksIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCAyMDAsIDc2LCA3MywgODQsIDg0LCAKLSAgICA3NiwgMTk3LCA3NiwgODUsIDc4LCA2NSwgODQsIDE5NywgNzgsIDc5LCA4MiwgNzcsIDY1LCAyMDQsIDgyLCA2NSwgNzMsIAotICAgIDgzLCA2OSwgMTk2LCA4NCwgNzIsIDczLCA4MiwgODQsIDIxNywgNjcsIDY1LCA3OCwgNjgsIDgyLCAxOTMsIDY4LCA2NSwgCi0gICAgNzgsIDY4LCA2NSwgMTI4LCA2OCwgNjUsIDgzLCA3MiwgNjksIDE5NiwgNjgsIDczLCA3MSwgODIsIDY1LCAyMDUsIDcxLCAKLSAgICA2OSwgODMsIDcyLCA1MCwgMTI4LCA4MCwgODIsIDczLCA3NywgNjksIDEyOCwgODIsIDczLCA4MywgNzMsIDc4LCAxOTksIAotICAgIDgzLCA3MiwgNjUsIDgyLCA1MCwgMTI4LCA4NSwgNzgsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4MCwgNjksIDY1LCAKLSAgICAyMTIsIDg0LCA2OSwgNzcsIDgwLCA4NSwgMjExLCA4NCwgODUsIDY1LCA4MiwgNjksIDE5OSwgNjYsIDY1LCA4MiwgODIsIAotICAgIDY5LCAxOTcsIDc4LCA4NSwgNzUsIDg0LCA2NSwgMTI4LCA4MCwgNzksIDg3LCA2OSwgODIsIDIxMSwgODIsIDg0LCA2NSwgCi0gICAgNzEsIDgzLCAxMjgsIDgzLCA2NSwgODMsIDY1LCA3NSwgMTI4LCA2NywgNzIsIDczLCA3NiwgNzYsIDIxMywgNjgsIDczLCAKLSAgICA2OSwgODMsIDczLCAyMTEsIDY4LCA3MywgODAsIDc2LCA3MywgMTI4LCA3MywgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzUsIAotICAgIDc5LCA4MCwgODAsIDY1LCAxMjgsIDc4LCA2NSwgNjYsIDc2LCA2NSwgMTI4LCA3OSwgODQsIDg0LCA2NSwgODYsIDE5MywgCi0gICAgODMsIDY1LCA3NywgODAsIDczLCAxMjgsIDgzLCA2NywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNzIsIDczLCA3NywgNjUsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDg5LCA3MCwgNjksIDgzLCA3MywgMjExLCA2NiwgNjUsIDc2LCA3NiwgCi0gICAgNzksIDIxMiwgNjYsIDgyLCA3OSwgNzUsIDY5LCAyMDYsIDY3LCA3NiwgNzMsIDY3LCA3NSwgMTI4LCA2NywgODUsIDY2LCAKLSAgICA2OSwgNjgsIDEyOCwgNjcsIDg1LCA4MiwgODYsIDY5LCAxOTYsIDcwLCA2OSwgNzcsIDY1LCA3NiwgMTk3LCA3MCwgNjksIAotICAgIDc4LCA2NywgNjksIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg1LCAxMjgsIDc1LCA2NSwgODMsIDc1LCA2NSwgMjA0LCA3NSwgCi0gICAgNzksIDgyLCA2OSwgNjUsIDIwNiwgNzYsIDY1LCA3MSwgNjUsIDY2LCAxMjgsIDc2LCA2OSwgNzMsIDc3LCA3NywgMTkzLCAKLSAgICA3OCwgNjksIDgzLCA4NCwgNjksIDE5NiwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA4NCwgODIsIDY5LCA4MywgCi0gICAgMjExLCA4NCwgNzMsIDc3LCA2OSwgODMsIDEyOCwgODUsIDczLCA3MSwgNzIsIDg1LCAyMTAsIDg3LCA2NSwgODQsIDY5LCAKLSAgICA4MiwgMTI4LCA4NywgNjksIDczLCA3MSwgNzIsIDIxMiwgOTAsIDczLCA3MSwgOTAsIDY1LCAxOTksIDY1LCA3NiwgNjUsIAotICAgIDg5LCA3MiwgMTk3LCA2NiwgNjUsIDc2LCA2NSwgNzEsIDEyOCwgNjYsIDY1LCA4MywgODMsIDY1LCAxMjgsIDY2LCA4MiwgCi0gICAgNzMsIDY4LCA3MSwgMTk3LCA2NywgNzIsIDgyLCA3OSwgNzcsIDE5MywgNjgsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDY4LCAKLSAgICA2OSwgNzEsIDgyLCA2OSwgMTk3LCA2OCwgNjksIDg2LCA3MywgNjcsIDE5NywgNjgsIDc5LCA3NiwgNzYsIDY1LCAyMTAsIAotICAgIDY4LCA5MCwgNjksIDc2LCA3OSwgMTI4LCA2OSwgODIsIDczLCA3OCwgNTAsIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDc2LCAKLSAgICAxMjgsIDgwLCA2NSwgNzMsIDgyLCA2OSwgMTk2LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDczLCA2OSwgNjcsIAotICAgIDY5LCAxMjgsIDgwLCA3OSwgNjksIDg0LCA4MiwgMjE3LCA4MSwgODUsIDczLCA3NiwgNzYsIDEyOCwgODMsIDc1LCA2OSwgCi0gICAgODcsIDY5LCAxOTYsIDg0LCA4NCwgNjksIDcyLCA2OSwgMjAwLCA4NywgNzMsIDcxLCA3MSwgNzYsIDIxNywgNjUsIDgyLCAKLSAgICA3OSwgODUsIDc4LCAxOTYsIDY1LCA4MiwgODMsIDY5LCA3OSwgMjExLCA2NiwgODUsIDc2LCA4NSwgNzEsIDEyOCwgNjcsIAotICAgIDY1LCA4MiwgNjksIDg0LCAxMjgsIDY3LCA3NiwgNzMsIDcwLCA3MCwgMTI4LCA2NywgNzYsIDc5LCA4NCwgNzIsIDEyOCwgCi0gICAgNjgsIDY1LCA3MSwgNjksIDgzLCAyMDAsIDY4LCA3NCwgNjksIDgyLCA4NiwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjUsIAotICAgIDIwNCwgNzAsIDc5LCA4MiwgODQsIDg5LCAxMjgsIDcyLCA2OSwgNjUsIDgyLCA4NCwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgCi0gICAgNjgsIDEyOCwgNzcsIDY1LCA4MCwgNzMsIDgxLCAxMjgsIDc4LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3OSwgNzEsIDc5LCAKLSAgICA3OCwgNjksIDIwMywgODAsIDc5LCA3MywgNzgsIDg0LCAxMjgsIDgwLCA3OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgODQsIAotICAgIDcyLCA2NSwgNzIsIDE5MywgODMsIDY3LCA3MiwgNjksIDc3LCAxOTMsIDgzLCA2OSwgNzEsIDc5LCA3NiwgMTI4LCA4MywgCi0gICAgNzIsIDY1LCA2OCwgNjksIDEyOCwgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3NywgNjUsIDc2LCA3NiwgMTI4LCAKLSAgICA4NCwgNjUsIDc2LCA3MywgNzgsIDE5OSwgODQsIDcyLCA3MywgODIsIDY4LCAyMTEsIDg0LCA3MiwgNzksIDgyLCA3OCwgCi0gICAgMTI4LCA4NCwgNzMsIDg0LCA3NiwgNzksIDEyOCwgODQsIDc5LCA3OSwgODQsIDcyLCAxMjgsIDg0LCA4MywgNzIsIDY5LCAKLSAgICA3MSwgMTI4LCA4NiwgNjUsIDgyLCA2OSwgNzMsIDE5MywgODcsIDcyLCA2OSwgNjUsIDg0LCAxMjgsIDg3LCA3OSwgNzcsIAotICAgIDY1LCA3OCwgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgNjUsIDc2LCA2NSwgODAsIDcyLCAxMjgsIDY2LCA2OSwgCi0gICAgNjUsIDc3LCA2OSwgMTk2LCA2NiwgNjksIDgyLCA2NiwgNjksIDIxMCwgNjYsIDczLCA3OCwgNjUsIDgyLCAyMTcsIDY2LCAKLSAgICA3MywgNzgsIDY4LCA3MywgMTI4LCA2NiwgNzksIDg3LCA4NCwgNzMsIDE5NywgNjcsIDcyLCA2OSwgNjcsIDc1LCAxMjgsIAotICAgIDY3LCA3MiwgNzMsIDc2LCA2OCwgMTI4LCA2NywgODUsIDgyLCA4NiwgNjksIDEyOCwgNjgsIDY1LCA3NiwgNjgsIDY1LCAKLSAgICAxMjgsIDY4LCA2NSwgNzYsIDY5LCA4NCwgMTI4LCA2OCwgNjgsIDY1LCA3MiwgNjUsIDIwNCwgNjgsIDY5LCA2NSwgODQsIAotICAgIDcyLCAxMjgsIDY4LCA3OSwgNjYsIDgyLCA3OSwgMTI4LCA2OSwgODMsIDcyLCA2OSwgNTEsIDEyOCwgNjksIDg0LCA2OSwgCi0gICAgODIsIDc5LCAyMDYsIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDg0LCA3MiwgNjUsIDEyOCwgNzAsIDczLCAKLSAgICA3MSwgODUsIDgyLCAxOTcsIDcwLCA3NiwgNzksIDc5LCA4MiwgMTI4LCA3MCwgNzYsIDg1LCA4NCwgNjksIDEyOCwgNzAsIAotICAgIDc5LCA4MiwgNzUsIDY5LCAxOTYsIDcwLCA4MiwgNzMsIDg0LCA4NSwgMTI4LCA3MSwgNjUsIDgwLCA4MCwgNjksIDE5NiwgCi0gICAgNzEsIDY5LCA3OCwgNzMsIDc1LCAyMDEsIDcxLCA3MiwgNjUsIDczLCA3OCwgMTI4LCA3MSwgNzIsIDc5LCA4MywgODQsIAotICAgIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCAxOTMsIDcxLCA3OCwgODksIDczLCA4MywgMTI4LCA3MSwgNzksIDgyLCA3MSwgCi0gICAgNzMsIDEyOCwgNzIsIDY1LCA3NywgNzcsIDY5LCAyMTAsIDcyLCA2NSwgNzcsIDkwLCA2NSwgMTI4LCA3MiwgNzMsIDgyLCAKLSAgICA3MywgODEsIDEyOCwgNzIsIDc5LCA3NiwgNjUsIDc3LCAxMjgsIDcyLCA3OSwgODIsIDgzLCA2OSwgMTI4LCA3MiwgODcsIAotICAgIDY1LCA3MywgODIsIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCAyMDYsIDczLCA2NSwgODUsIDY4LCA2NSwgMTI4LCA3NSwgCi0gICAgNjUsIDgzLCA4MiwgNjUsIDEyOCwgNzUsIDY1LCA5MCwgNjUsIDc1LCAyMDAsIDc1LCA3MywgODksIDY5LCA3OSwgMjAzLCAKLSAgICA3NSwgNzYsIDY1LCA4MywgNzcsIDE5MywgNzYsIDY1LCA2NiwgNzksIDgyLCAxMjgsIDc2LCA2NSwgNzEsIDY1LCA4MiwgCi0gICAgMTI4LCA3NiwgNjUsIDgyLCA3MSwgNjksIDIxMCwgNzYsIDY1LCA4NSwgNzYsIDY1LCAxMjgsIDc2LCA2OSwgNzgsIDcxLCAKLSAgICA2NSwgMTI4LCA3NiwgNjksIDgzLCA4MywgNjksIDIxMCwgNzYsIDc5LCA3OCwgNzEsIDY1LCAxMjgsIDc3LCA2NSwgODMsIAotICAgIDcyLCA1MCwgMTI4LCA3NywgNjksIDg0LCA2NSwgNzYsIDEyOCwgNzcsIDc5LCA4NSwgODQsIDcyLCAxMjgsIDc4LCA2NSwgCi0gICAgODMsIDcyLCA3MywgMTI4LCA3OCwgNzksIDg0LCA2NywgNzIsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDgzLCAxMjgsIDc4LCAKLSAgICA4NSwgNzgsIDg1LCA5MCwgMTI4LCA3OSwgNzYsIDczLCA3MSwgNzksIDIwNiwgNzksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIAotICAgIDgwLCA3MywgNjUsIDgzLCA3NywgMTkzLCA4MCwgNzMsIDgyLCA3MywgNzEsIDEyOCwgODAsIDc2LCA2NSwgNzgsIDY3LCAKLSAgICAyMDMsIDgwLCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MCwgODIsIDc5LCA4NCwgNzksIDIxMSwgODEsIDY1LCA4NCwgNjUsIAotICAgIDc4LCAxMjgsIDgxLCA4NSwgNjksIDY5LCA3OCwgMTI4LCA4MiwgNjksIDY1LCA2NywgNzIsIDEyOCwgODIsIDcxLCA4OSwgCi0gICAgNjUsIDc4LCAxMjgsIDgyLCA3MywgODQsIDgzLCA3MywgMTI4LCA4MiwgNzgsIDg5LCA3MywgNzgsIDE5OSwgODMsIDY3LCAKLSAgICA4MiwgNjksIDY5LCAyMDYsIDgzLCA2OSwgNzEsIDc4LCA3OSwgMTI4LCA4MywgNjksIDgyLCA3MywgNzAsIDIxMSwgODMsIAotICAgIDY5LCA4MywgNjUsIDc3LCAxOTcsIDgzLCA3MiwgNjUsIDc4LCA3MSwgMTI4LCA4MywgNzIsIDY1LCA4MiwgODAsIDEyOCwgCi0gICAgODMsIDcyLCA2OSwgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3NiwgNzYsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgMjExLCA4MywgNzIsIDg3LCA2NSwgCi0gICAgNjUsIDEyOCwgODMsIDcyLCA4NywgNzMsIDczLCAxMjgsIDgzLCA3MiwgODcsIDc5LCA3OSwgMTI4LCA4MywgNzMsIDcxLCAKLSAgICA3OCwgODMsIDEyOCwgODMsIDczLCA3NiwgNjUsIDUxLCAxMjgsIDgzLCA3MywgNzgsIDY4LCA3MiwgMjAxLCA4MywgNzMsIAotICAgIDg4LCA4NCwgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDg5LCAxMjgsIDgzLCA3NiwgNzksIDg2LCA3OSwgMTI4LCA4MywgCi0gICAgODAsIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA3MywgODIsIDczLCAyMTIsIDgzLCA4NCwgNzksIDY3LCA3NSwgMTI4LCAKLSAgICA4MywgODQsIDg1LCA2OCwgODksIDEyOCwgODMsIDg1LCA3MiwgODUsIDgyLCAxMjgsIDgzLCA4NSwgNzUsIDg1LCA3OCwgCi0gICAgMTI4LCA4NCwgNjUsIDc4LCA3OCwgNjksIDE5NiwgODQsIDY5LCA3NiwgNzksIDg1LCAyMTEsIDg0LCA3MiwgODcsIDY1LCAKLSAgICA2NSwgMTI4LCA4NCwgNzMsIDcxLCA2OSwgODIsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCAyMTIsIDg0LCA4MiwgODUsIAotICAgIDc4LCA3NSwgMTI4LCA4NCwgODMsIDY1LCA2OCwgNzMsIDEyOCwgODQsIDgzLCA3MiwgNjksIDgzLCAxMjgsIDg0LCA4NywgCi0gICAgNjksIDc2LCA4NiwgMTk3LCA4NSwgODIsIDg1LCA2OCwgNjUsIDEyOCwgODcsIDY1LCA4NCwgNjcsIDcyLCAxMjgsIDg5LCAKLSAgICA2OSwgODMsIDg0LCA4NSwgMTI4LCA4OSwgNzksIDQ1LCA4OSwgNjUsIDEyOCwgODksIDg1LCA0NSwgODksIDY5LCAxMjgsIAotICAgIDkwLCA5MCwgNzMsIDY5LCA4NCwgMTI4LCA0NSwgNjcsIDcyLCA2NSwgNzYsIDEyOCwgNDUsIDc1LCA3MiwgODksIDg1LCAKLSAgICAxOTYsIDQ1LCA4MCwgNzIsIDgyLCA4NSwgMTI4LCA2NSwgNjgsIDY4LCA2NSwgNzUsIDEyOCwgNjUsIDcxLCA2NSwgNzMsIAotICAgIDc4LCAxMjgsIDY1LCA3MiwgODMsIDY4LCA2NSwgMTI4LCA2NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDc2LCA2OSwgCi0gICAgODAsIDcyLCAxMjgsIDY1LCA3NiwgNzMsIDcwLCA4NSwgMTI4LCA2NSwgNzcsIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDc4LCAKLSAgICA4MCwgNjksIDY1LCAxMjgsIDY1LCA3OCwgODMsIDcyLCA2OSwgMTI4LCA2NSwgODAsIDY1LCA4MiwgODQsIDEyOCwgNjUsIAotICAgIDgwLCA4MiwgNzMsIDc2LCAxMjgsIDY1LCA4MiwgNjksIDgwLCA2NSwgMTI4LCA2NSwgODIsIDczLCA2OSwgODMsIDEyOCwgCi0gICAgNjUsIDgyLCA3NSwgNjUsIDY2LCAxMjgsIDY1LCA4MiwgNzYsIDY1LCA4NSwgMTk5LCA2NSwgODIsIDc5LCA4NSwgODIsIAotICAgIDE5MywgNjUsIDgyLCA4MiwgNjUsIDg5LCAxMjgsIDY1LCA4MiwgODQsIDY1LCA2NiwgMTk3LCA2NSwgODMsIDY1LCA3NiwgCi0gICAgNTAsIDEyOCwgNjUsIDgzLCA4OSwgODUsIDgyLCAxOTMsIDY2LCA2NSwgODIsIDY1LCA1MCwgMTI4LCA2NiwgNjYsIDczLCAKLSAgICA2OSwgODAsIDEyOCwgNjYsIDY2LCA3MywgNjksIDg0LCAxMjgsIDY2LCA2NiwgNzMsIDY5LCA4OCwgMTI4LCA2NiwgNjYsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNjYsIDY2LCA4NSwgNzksIDg4LCAxMjgsIDY2LCA2NiwgODUsIDgyLCA4OCwgMTI4LCA2NiwgCi0gICAgNjksIDY5LCA4NCwgNjUsIDEyOCwgNjYsIDY5LCA3MCwgNzksIDgyLCAxOTcsIDY2LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCAKLSAgICA2NiwgNjksIDczLCA4NCwgNzIsIDEyOCwgNjYsIDY5LCA3OCwgNjgsIDY5LCAxMjgsIDY2LCA3MiwgNjksIDg0LCA3MiwgCi0gICAgMTI4LCA2NiwgNzMsIDgyLCA3MSwgNjUsIDEyOCwgNjYsIDczLCA4MywgNjUsIDcyLCAxMjgsIDY2LCA3MywgODQsIDczLCAKLSAgICA3OCwgMTk5LCA2NiwgNzYsIDY1LCA3OCwgNzUsIDEyOCwgNjYsIDc2LCA3OSwgNzksIDY4LCAxMjgsIDY2LCA4MiwgNjUsIAotICAgIDY3LCA2OSwgMTI4LCA2NiwgODIsIDY1LCA3OCwgNjcsIDIwMCwgNjYsIDgyLCA2OSwgNjUsIDg0LCAyMDAsIDY2LCA4MiwgCi0gICAgODUsIDgzLCA3MiwgMTI4LCA2NiwgODMsIDg0LCA2NSwgODIsIDEyOCwgNjYsIDg1LCA3NiwgNzYsIDY5LCAyMTIsIDY3LCAKLSAgICA2NSwgNzYsIDg5LCA2NSwgMTI4LCA2NywgNjUsIDc3LCA3OCwgODUsIDE5NSwgNjcsIDY1LCA3OCwgNjcsIDY5LCAyMDQsIAotICAgIDY3LCA2NSwgODUsIDY4LCA2NSwgMTI4LCA2NywgNjcsIDcyLCA2NSwgNjUsIDEyOCwgNjcsIDY3LCA3MiwgNjksIDY5LCAKLSAgICAxMjgsIDY3LCA2OSwgNjUsIDc2LCA2NywgMTI4LCA2NywgNjksIDY3LCA2OSwgNzUsIDEyOCwgNjcsIDY5LCA3MywgODIsIAotICAgIDg0LCAxMjgsIDY3LCA2OSwgODIsIDY5LCA4MywgMTI4LCA2NywgNzIsIDY1LCA2OCwgNjUsIDEyOCwgNjcsIDcyLCA2NSwgCi0gICAgNzMsIDgyLCAxMjgsIDY3LCA3MiwgNjUsIDc4LCA3MSwgMTI4LCA2NywgNzIsIDczLCA3OCwgNzEsIDEyOCwgNjcsIDcyLCAKLSAgICA3OSwgNzUsIDY5LCAxMjgsIDY3LCA3MiwgODUsIDc2LCA2NSwgMTI4LCA2NywgNzIsIDg1LCA3OSwgODAsIDEyOCwgNjcsIAotICAgIDcyLCA4NSwgNzksIDg0LCAxMjgsIDY3LCA3MiwgODUsIDc5LCA4OCwgMTI4LCA2NywgNzIsIDg1LCA4MiwgODgsIDEyOCwgCi0gICAgNjcsIDcyLCA4OSwgODIsIDg4LCAxMjgsIDY3LCA3NiwgNzksIDg1LCA2OCwgMTI4LCA2NywgNzksIDY5LCA3OCwgNzEsIAotICAgIDEyOCwgNjcsIDc5LCA3NiwgNzksIDgyLCAxMjgsIDY3LCA3OSwgNzcsIDY5LCA4NCwgMTI4LCA2NywgNzksIDc3LCA3MywgCi0gICAgNzgsIDE5OSwgNjcsIDc5LCA3NywgNzcsIDc5LCAyMDYsIDY3LCA3OSwgODYsIDY5LCA4MiwgMTI4LCA2NywgODIsIDY5LCAKLSAgICA2OCwgNzMsIDIxMiwgNjcsIDgyLCA3OSwgNzMsIDg4LCAxMjgsIDY4LCA2NSwgNjUsIDgzLCA4NSwgMTI4LCA2OCwgNjUsIAotICAgIDY5LCA3OCwgNzEsIDEyOCwgNjgsIDY1LCA3MywgNzgsIDcxLCAxMjgsIDY4LCA2NSwgNzYsIDY1LCA4NCwgMjAwLCA2OCwgCi0gICAgNjUsIDgyLCA2NSwgNTEsIDEyOCwgNjgsIDY1LCA4MiwgNjUsIDUyLCAxMjgsIDY4LCA2NSwgODIsIDcxLCA2NSwgMTI4LCAKLSAgICA2OCwgNjUsIDg2LCA3MywgNjgsIDEyOCwgNjgsIDY4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OCwgNzMsIDY5LCA4MCwgCi0gICAgMTI4LCA2OCwgNjgsIDczLCA2OSwgODgsIDEyOCwgNjgsIDY4LCA4NSwgNzksIDgwLCAxMjgsIDY4LCA2OCwgODUsIDc5LCAKLSAgICA4OCwgMTI4LCA2OCwgNjgsIDg1LCA4MiwgODgsIDEyOCwgNjgsIDY5LCA3NiwgNjksIDg0LCAxOTcsIDY4LCA2OSwgODIsIAotICAgIDY5LCA4NCwgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgCi0gICAgNzIsIDc5LCA3OSwgMTI4LCA2OCwgNzMsIDcwLCA2NSwgODQsIDEyOCwgNjgsIDczLCA4MCwgODQsIDY5LCAxMjgsIDY4LCAKLSAgICA3MywgODYsIDczLCA2OCwgMTk3LCA2OCwgNzksIDc3LCA2NSwgNzMsIDIwNiwgNjgsIDc5LCA3OSwgNzgsIDcxLCAxMjgsIAotICAgIDY4LCA3OSwgODUsIDY2LCA4NCwgMTI4LCA2OCwgODIsIDczLCA4NiwgNjksIDEyOCwgNjgsIDgyLCA3OSwgODAsIDgzLCAKLSAgICAxMjgsIDY4LCA4NSwgNzEsIDg1LCA2OCwgMTI4LCA2OSwgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY5LCA3NSwgNjUsIAotICAgIDY1LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgMjE3LCA2OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjksIDc2LCA2OSwgCi0gICAgODYsIDY5LCAyMDYsIDY5LCA3NiwgNzMsIDcwLCA3MywgMTI4LCA2OSwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNjksIDc4LCAKLSAgICA4NCwgNjksIDgyLCAxMjgsIDY5LCA3OSwgNzYsIDcyLCA4OCwgMTI4LCA2OSwgODEsIDg1LCA3MywgNjgsIDEyOCwgNjksIAotICAgIDgzLCA0NSwgODQsIDY5LCAxMjgsIDY5LCA4MywgNzIsIDQ5LCA1NCwgMTI4LCA2OSwgODMsIDcyLCA1MCwgNDksIDEyOCwgCi0gICAgNjksIDg1LCA0NSwgNjksIDg1LCAxMjgsIDY5LCA4OCwgNzMsIDgzLCA4NCwgMTI4LCA3MCwgNjUsIDY1LCA3MCwgODUsIAotICAgIDEyOCwgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCA2OSwgNjUsIDgyLCA3OCwgMTI4LCA3MCwgNjksIDY5LCA3OCwgCi0gICAgNzEsIDEyOCwgNzAsIDcyLCA4NCwgNzksIDgyLCAxOTMsIDcwLCA3MywgNjksIDc2LCA2OCwgMTI4LCA3MCwgNzMsIDcwLCAKLSAgICA4NCwgNzIsIDEyOCwgNzAsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3MywgNzYsIDc2LCA2OSwgMTk2LCA3MCwgNzMsIAotICAgIDc4LCA3MywgODQsIDE5NywgNzAsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDcwLCA3OSwgNzYsIDc2LCA4OSwgMTI4LCA3MCwgCi0gICAgNzksIDgyLCA2NywgNjksIDEyOCwgNzAsIDc5LCA4MiwgODQsIDY5LCAxMjgsIDcwLCA4MiwgNjUsIDc3LCA2OSwgMTI4LCAKLSAgICA3MCwgODIsIDY5LCA3OCwgNjcsIDIwMCwgNzAsIDgyLCA3OSwgODcsIDc4LCAxMjgsIDcxLCA2NSwgNjUsIDcwLCA4NSwgCi0gICAgMTI4LCA3MSwgNjUsIDY4LCA3OSwgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDc2LCAKLSAgICA2NSwgMTI4LCA3MSwgNjUsIDc4LCA3NywgNjUsIDEyOCwgNzEsIDY1LCA4MiwgNzksIDc4LCAxMjgsIDcxLCA2OSwgNzgsIAotICAgIDg0LCA3NiwgMTk3LCA3MSwgNjksIDgyLCA2OSwgODMsIDIwMCwgNzEsIDY5LCA4MiwgNzcsIDY1LCAyMDYsIDcxLCA3MSwgCi0gICAgNzMsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDcxLCAKLSAgICA3MSwgODUsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgODIsIDg4LCAxMjgsIAotICAgIDcxLCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA2OSwgNjksIDEyOCwgNzEsIDczLCA2OCwgNzMsIDc3LCAKLSAgICAxMjgsIDcxLCA3MywgNzcsIDY5LCA3NiwgMTI4LCA3MSwgNzMsIDc4LCA3MywgNzMsIDEyOCwgNzEsIDczLCA4MywgNjUsIAotICAgIDc2LCAxMjgsIDcxLCA3NiwgNjksIDczLCA2NywgMjAwLCA3MSwgODIsIDY1LCA2NywgNjksIDEyOCwgNzEsIDgyLCA2NSwgCi0gICAgNzMsIDc4LCAxMjgsIDcxLCA4MiwgNjUsIDgzLCA4MywgMTI4LCA3MSwgODUsIDgyLCA4NSwgNzgsIDEyOCwgNzIsIDQ1LCAKLSAgICA4NCwgODksIDgwLCAxOTcsIDcyLCA2NSwgNDUsIDcyLCA2NSwgMTI4LCA3MiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIAotICAgIDY1LCA3MSwgNzYsIDY1LCAyMTgsIDcyLCA2NSwgNzMsIDg0LCA4NSwgMTI4LCA3MiwgNjUsIDc4LCA2OCwgODMsIDEyOCwgCi0gICAgNzIsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgMjA2LCA3MiwgNzMsIDY4LCA3MywgNzgsIAotICAgIDE5OSwgNzIsIDc2LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgCi0gICAgODAsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NiwgODUsIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg5LCAKLSAgICA4MiwgODgsIDEyOCwgNzIsIDc3LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NywgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzcsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NywgODUsIDgyLCA4OCwgMTI4LCA3MiwgCi0gICAgNzcsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4NCwgMTI4LCAKLSAgICA3MiwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc4LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA3OSwgNzksIDgyLCA4NSwgCi0gICAgMTI4LCA3MiwgNzksIDg1LCA4MywgNjksIDEyOCwgNzIsIDg1LCA3NywgNjUsIDc4LCAxMjgsIDcyLCA4NSwgODIsIDY1LCAKLSAgICA3OCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg0LCAxMjgsIDcyLCA4OCwgNzMsIAotICAgIDY5LCA4OCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4OCwgCi0gICAgODUsIDc5LCA4OCwgMTI4LCA3MiwgOTAsIDkwLCA5MCwgNzEsIDEyOCwgNzMsIDY3LCA3MiwgNzksIDg1LCAxMjgsIDczLCAKLSAgICA3MSwgNzEsIDg3LCA4MywgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDIxMywgNzMsIDc3LCA3MywgNzgsIDUxLCAxMjgsIAotICAgIDczLCA3OCwgNzgsIDY5LCA4MiwgMTI4LCA3MywgODMsIDY1LCA3NSwgNzMsIDE5MywgNzQsIDc0LCA3MywgNjksIDgwLCAKLSAgICAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzQsIDc0LCA4NSwgNzksIAotICAgIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzQsIDc5LCA3NSwgCi0gICAgNjksIDgyLCAxMjgsIDc0LCA3OSwgODksIDc5LCA4NSwgMjExLCA3NCwgODUsIDY4LCA3MSwgNjksIDEyOCwgNzQsIDg1LCAKLSAgICA2OSwgODUsIDczLCAxMjgsIDc1LCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3NSwgNjUsIDczLCA4MiwgNzMsIDEyOCwgNzUsIAotICAgIDY1LCA4MCwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODQsIDY1LCA4NiwgMTkzLCA3NSwgNjUsIDg1LCA3OCwgNjUsIDEyOCwgCi0gICAgNzUsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2OSwgNjksIDgzLCA4NSwgMTI4LCA3NSwgNjksIDcyLCA2OSwgNzIsIAotICAgIDEyOCwgNzUsIDY5LCA3NiwgODYsIDczLCAyMDYsIDc1LCA2OSwgNzcsIDgwLCA3NiwgMjAxLCA3NSwgNjksIDc3LCA4MCwgCi0gICAgODUsIDIwNCwgNzUsIDY5LCA3OCwgNjUsIDg0LCAxMjgsIDc1LCA2OSwgODMsIDcyLCA1MCwgMTI4LCA3NSwgNzIsIDY1LCAKLSAgICA3OCwgNjgsIDE5MywgNzUsIDcyLCA2NSwgODAsIDcyLCAxMjgsIDc1LCA3MiwgODUsIDY1LCA4NCwgMTI4LCA3NSwgNzIsIAotICAgIDg3LCA2NSwgNzMsIDEyOCwgNzUsIDczLCA4MywgNjUsIDc2LCAxMjgsIDc1LCA3OCwgNzMsIDcwLCA2OSwgMTI4LCA3NSwgCi0gICAgNzksIDc5LCA4MCwgNzksIDEyOCwgNzUsIDg1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4OCwgODcsIDY1LCA2NSwgMTI4LCAKLSAgICA3NSwgODgsIDg3LCA2OSwgNjksIDEyOCwgNzYsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDc2LCA2NSwgNjUsIDc3LCA4NSwgCi0gICAgMTI4LCA3NiwgNjUsIDcxLCA4NSwgODMsIDEyOCwgNzYsIDY1LCA3NywgNjYsIDY4LCAxOTMsIDc2LCA2NSwgODQsIDczLCAKLSAgICA3NSwgMTI4LCA3NiwgNjUsIDg1LCA3NSwgNjUsIDIxOCwgNzYsIDY5LCA3NywgNzksIDczLCAxMjgsIDc2LCA3MywgNjYsIAotICAgIDgyLCA2NSwgMTI4LCA3NiwgNzMsIDc3LCA3MywgODQsIDEyOCwgNzYsIDczLCA3OCwgNjksIDgzLCAxMjgsIDc2LCA3MywgCi0gICAgODEsIDg1LCA3MywgMTk2LCA3NiwgNzksIDg0LCA4NSwgODMsIDEyOCwgNzYsIDc5LCA4NSwgODIsIDY5LCAxMjgsIDc3LCAKLSAgICA2NSwgNjgsIDY4LCA2NSwgMTI4LCA3NywgNjUsIDY4LCA2OCwgNjUsIDIwMCwgNzcsIDY1LCA3MiwgNzIsIDY1LCAxMjgsIAotICAgIDc3LCA2NSwgNzMsIDgyLCA4NSwgMTI4LCA3NywgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAyMTgsIDc3LCA2NSwgODEsIDY1LCA3MCwgMTI4LCA3NywgNjUsIDgyLCA2NywgNzIsIDEyOCwgNzcsIDY1LCA4MywgNzksIAotICAgIDgyLCAxOTMsIDc3LCA2OSwgNjksIDc3LCA4NSwgMTI4LCA3NywgNjksIDczLCA5MCwgNzMsIDEyOCwgNzcsIDY5LCA3NiwgCi0gICAgNzksIDc4LCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgMjEwLCA3NywgNjksIDgyLCA3NSwgNzIsIDE5MywgNzcsIDY5LCAKLSAgICA4NCwgNjksIDcxLCAxMjgsIDc3LCA2OSwgOTAsIDkwLCA3OSwgMTI4LCA3NywgNzEsIDY2LCA2OSwgNjksIDEyOCwgNzcsIAotICAgIDcxLCA2NiwgNzksIDc5LCAxMjgsIDc3LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgODAsIDEyOCwgCi0gICAgNzcsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3NywgNzMsIDc1LCA4MiwgNzMsIAotICAgIDEyOCwgNzcsIDczLCA3NSwgODIsIDc5LCAyMDYsIDc3LCA3MywgODIsIDY5LCA2OCwgMTI4LCA3NywgNzMsIDgzLCA4MiwgCi0gICAgNjUsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAxMjgsIDc3LCA3OSwgNjgsIDg1LCA3NiwgMjA3LCA3NywgNzksIDc4LCAKLSAgICA4NCwgNzIsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDc3LCA4NSwgNzgsIDY1LCA3MiwgMTI4LCA3NywgODUsIAotICAgIDgzLCA3MiwgNTEsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDY3LCAxMjgsIDc4LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3OCwgCi0gICAgNjUsIDgyLCA4MiwgNzksIDIxNSwgNzgsIDY1LCA4NSwgNjgsIDczLCAyMTgsIDc4LCA2NSwgODgsIDczLCA2NSwgMjA2LCAKLSAgICA3OCwgNjYsIDczLCA2OSwgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2NiwgODUsIDgyLCA4OCwgCi0gICAgMTI4LCA3OCwgNjYsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2OCwgODUsIDgyLCAKLSAgICA4OCwgMTI4LCA3OCwgNzEsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIAotICAgIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgNzksIDEyOCwgNzgsIDcxLCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MSwgCi0gICAgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDc5LCA2OSwgNzIsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg0LCAxMjgsIDc4LCAKLSAgICA3MSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDIxNywgNzgsIDczLCA4MywgNjUsIDcxLCAxMjgsIAotICAgIDc4LCA3NCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg4LCAKLSAgICAxMjgsIDc4LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDc0LCA4OSwgODIsIAotICAgIDg4LCAxMjgsIDc4LCA3OCwgNzEsIDY1LCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA3MywgNzMsIDEyOCwgNzgsIDc4LCA3MSwgCi0gICAgNzksIDc5LCAxMjgsIDc4LCA3OSwgNzksIDc4LCA4NSwgMTI4LCA3OCwgNzksIDg0LCA4NCwgNzksIDEyOCwgNzgsIDgyLCAKLSAgICA4NSwgODIsIDg4LCAxMjgsIDc4LCA4MiwgODksIDgyLCA4OCwgMTI4LCA3OCwgODUsIDc3LCA2OSwgODIsIDIwNywgNzgsIAotICAgIDg5LCA3MywgNjksIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgODksIDczLCA2OSwgODgsIDEyOCwgCi0gICAgNzgsIDg5LCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODAsIAotICAgIDEyOCwgNzgsIDkwLCA3MywgNjksIDg4LCAxMjgsIDc4LCA5MCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgCi0gICAgODgsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDg4LCAxMjgsIDc5LCA2NiwgNzQsIDY5LCA2NywgMjEyLCA3OSwgNzQsIDY5LCAKLSAgICA3OSwgNzgsIDEyOCwgNzksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDc5LCA3NiwgNzMsIDg2LCA2OSwgMTI4LCA3OSwgNzgsIAotICAgIDc1LCA2NSwgODIsIDEyOCwgNzksIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDc5LCA4NCwgNzIsIDY1LCA3NiwgMTI4LCA3OSwgCi0gICAgODUsIDc4LCA3NSwgNzMsIDE5MywgNzksIDg4LCA2OSwgNzMsIDY1LCAyMDEsIDgwLCA2NSwgNjUsIDg0LCA4NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA4NCwgNzMsIDEyOCwgODAsIDY1LCA4MywgNjksIDgxLCAxMjgsIDgwLCA2NSwgODMsIDg1LCA4MSwgCi0gICAgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzUsIDEyOCwgODAsIDY1LCA5MCwgNjksIDgyLCAxMjgsIDgwLCA2OSwgNjUsIDY3LCAKLSAgICA2OSwgMTI4LCA4MCwgNjksIDY5LCA5MCwgNzMsIDEyOCwgODAsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDgwLCA2OSwgNzMsIAotICAgIDg0LCA3MiwgMTI4LCA4MCwgNjksIDc4LCA4MywgODUsIDEyOCwgODAsIDY5LCA3OSwgODIsIDg0LCAyMDAsIDgwLCA2OSwgCi0gICAgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjksIDgyLCA4NCwgNzIsIDIwNywgODAsIDY5LCA4MywgNjksIDg0LCAxOTMsIDgwLCAKLSAgICA2OSwgODMsIDcyLCA1MCwgMTI4LCA4MCwgNzIsIDc4LCA2NSwgNjksIDIwMywgODAsIDcyLCA4NSwgNzgsIDcxLCAxMjgsIAotICAgIDgwLCA3MywgNjUsIDc4LCA3OSwgMTI4LCA4MCwgNzYsIDg1LCA3NywgNjksIDE5NiwgODAsIDc2LCA4NSwgODQsIDc5LCAKLSAgICAxMjgsIDgwLCA3OSwgNjksIDg0LCA3MywgMTk1LCA4MCwgNzksIDc4LCA2OCwgNzksIDEyOCwgODAsIDgyLCA3MywgNzgsIAotICAgIDg0LCAxMjgsIDgwLCA4MiwgNzksIDc5LCA3MCwgMTI4LCA4MCwgODIsIDc5LCA4NiwgNjksIDEyOCwgODEsIDY1LCA2NSwgCi0gICAgNzAsIDg1LCAxMjgsIDgxLCA2NSwgNjgsIDc3LCA2NSwgMTI4LCA4MSwgNjUsIDc3LCA2NSwgODQsIDIxMSwgODEsIDY1LCAKLSAgICA4MiwgNzgsIDY5LCAyMTcsIDgxLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDg3LCA2OSwgNjksIDEyOCwgODIsIAotICAgIDQ1LCA2NywgODIsIDY5LCAxOTcsIDgyLCA2NSwgNzMsIDY4LCA2NSwgMTI4LCA4MiwgNjUsIDgzLCA3MiwgNjUsIDEyOCwgCi0gICAgODIsIDY1LCA4MywgNzksIDg1LCAyMDQsIDgyLCA2NSwgODQsIDczLCA3OSwgMTI4LCA4MiwgNjksIDY3LCA3OSwgODIsIAotICAgIDE5NiwgODIsIDY5LCA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgMjA2LCA4MiwgNjksIDg2LCA3MywgCi0gICAgNjUsIDEyOCwgODIsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDgyLCA3MiwgNzksIDg0LCA3MywgMTk1LCA4MiwgNzMsIDY3LCAKLSAgICA2OSwgNzcsIDEyOCwgODIsIDczLCA4NiwgNjksIDgyLCAxMjgsIDgyLCA3OCwgNzksIDc5LCA3OCwgMTI4LCA4MiwgNzksIAotICAgIDY2LCA2NSwgODQsIDEyOCwgODIsIDgyLCA4NSwgNzksIDg4LCAxMjgsIDgyLCA4MiwgODUsIDgyLCA4OCwgMTI4LCA4MiwgCi0gICAgODIsIDg5LCA4MiwgODgsIDEyOCwgODIsIDg1LCA4MCwgNzMsIDczLCAxMjgsIDgyLCA4NywgNjUsIDcyLCA2NSwgMTI4LCAKLSAgICA4MywgNjUsIDY4LCA3MiwgNjksIDEyOCwgODMsIDY1LCA3MCwgNzIsIDY1LCAxMjgsIDgzLCA2NSwgNzcsIDY5LCA3NSwgCi0gICAgMjAwLCA4MywgNjUsIDc3LCA3NSwgNjUsIDEyOCwgODMsIDY1LCA3NywgODksIDc5LCAyMDMsIDgzLCA2NSwgNzgsIDY1LCAKLSAgICA3MiwgMTI4LCA4MywgNjUsIDg1LCA3MywgNzYsIDEyOCwgODMsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA2OSwgNzMsIAotICAgIDgzLCA3NywgMTkzLCA4MywgNjksIDc4LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjYsIDU0LCAxMjgsIDgzLCA3MiwgCi0gICAgNjksIDY5LCA3OCwgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgODMsIDcyLCA2OSwgODEsIDY5LCAyMDQsIDgzLCAKLSAgICA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDczLCA3MywgNzgsIDEyOCwgODMsIDcyLCA3MywgODQsIDY1LCAxMjgsIAotICAgIDgzLCA3MiwgNzksIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDEyOCwgODMsIDcyLCA4NSwgNzksIDgwLCAKLSAgICAxMjgsIDgzLCA3MiwgODUsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgODgsIDEyOCwgODMsIDcyLCA4OSwgODIsIAotICAgIDg4LCAxMjgsIDgzLCA3MywgODgsIDg0LCA3MiwgMjExLCA4MywgNzYsIDY1LCA4NiwgNjksIDEyOCwgODMsIDc2LCA3MywgCi0gICAgNjcsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzYsIDc5LCA4MCwgNjksIDEyOCwgODMsIDc3LCAKLSAgICA2OSwgNjUsIDgyLCAxMjgsIDgzLCA3NywgNzMsIDc2LCA2OSwgMTI4LCA4MywgNzgsIDY1LCA3NSwgNjksIDEyOCwgODMsIAotICAgIDc4LCA3OSwgODUsIDg0LCAxMjgsIDgzLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgNzksIDg3LCA3MywgNzYsIDIwNywgCi0gICAgODMsIDgwLCA3MywgNjcsIDY5LCAxMjgsIDgzLCA4MCwgNzksIDc5LCA3OCwgMTI4LCA4MywgODAsIDg1LCA3OCwgNzEsIAotICAgIDIxMSwgODMsIDgxLCA4NSwgNzMsIDgzLCAyMDAsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCA4MywgODMsIDczLCA2OSwgCi0gICAgODgsIDEyOCwgODMsIDgzLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCAKLSAgICA4MiwgNzUsIDEyOCwgODMsIDg0LCA2OSwgNjUsIDc3LCAxMjgsIDgzLCA4NCwgNzksIDc4LCA2OSwgMTI4LCA4MywgODQsIAotICAgIDc5LCA4NiwgNjksIDEyOCwgODMsIDg3LCA2OSwgNjksIDg0LCAxMjgsIDgzLCA4NywgNzksIDgyLCA2OCwgMTI4LCA4MywgCi0gICAgODksIDgyLCA3NywgNjUsIDEyOCwgODQsIDY1LCA3NiwgNjksIDc4LCAyMTIsIDg0LCA2NSwgODAsIDY5LCA4MiwgMTI4LCAKLSAgICA4NCwgNjcsIDcyLCA2OSwgNzIsIDEyOCwgODQsIDY5LCA3MSwgNjksIDcyLCAxMjgsIDg0LCA2OSwgNzMsIDg3LCA4MywgCi0gICAgMTI4LCA4NCwgNjksIDg2LCA3MywgODIsIDEyOCwgODQsIDcyLCA3MywgNzEsIDcyLCAxMjgsIDg0LCA3MiwgNzMsIDgyLCAKLSAgICA2OCwgMTI4LCA4NCwgNzIsIDczLCA4NCwgNjUsIDEyOCwgODQsIDcyLCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3MiwgODUsIAotICAgIDc4LCA3MSwgMTI4LCA4NCwgNzIsIDg5LCA3OSwgNzksIDIwNSwgODQsIDczLCA2NSwgODIsIDY1LCAxMjgsIDg0LCA3MywgCi0gICAgNzgsIDc4LCA2OSwgMTI4LCA4NCwgNzMsIDgwLCA4MCwgNzMsIDEyOCwgODQsIDc2LCA3MiwgNjksIDY5LCAxMjgsIDg0LCAKLSAgICA4MiwgNjUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDczLCA4NCwgNzksIDIxMSwgODQsIDgyLCA4NSwgODQsIDcyLCAxMjgsIAotICAgIDg0LCA4MywgNjksIDgyLCA2OSwgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDIwMywgODQsIDg0LCA4MywgNjksIDY5LCAKLSAgICAxMjgsIDg0LCA4NCwgODQsIDcyLCA2NSwgMTI4LCA4NCwgODUsIDcxLCA4MiwgNzMsIDIwMywgODQsIDg1LCA3OCwgNzgsIAotICAgIDg5LCAxMjgsIDg0LCA4NSwgODIsIDc5LCA1MCwgMTI4LCA4NCwgODUsIDg1LCA3NywgODUsIDEyOCwgODQsIDg5LCA4MCwgCi0gICAgNjksIDQ1LCAxNzcsIDg0LCA4OSwgODAsIDY5LCA0NSwgMTc4LCA4NCwgODksIDgwLCA2OSwgNDUsIDE3OSwgODQsIDg5LCAKLSAgICA4MCwgNjksIDQ1LCAxODAsIDg0LCA4OSwgODAsIDY5LCA0NSwgMTgxLCA4NCwgODksIDgwLCA2OSwgNDUsIDE4MiwgODQsIAotICAgIDg5LCA4MCwgNjksIDQ1LCAxODMsIDg1LCA2OCwgNjUsIDY1LCA4NCwgMTI4LCA4NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgCi0gICAgODUsIDc3LCA2NiwgNzMsIDc4LCAxMjgsIDg1LCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA4NSwgODAsIDg3LCA2NSwgODIsIAotICAgIDE5NiwgODUsIDgzLCA4MywgODUsIDUxLCAxMjgsIDg1LCA4NCwgODUsIDc1LCA3MywgMTI4LCA4NiwgNjUsIDY1LCA4NiwgCi0gICAgODUsIDEyOCwgODYsIDY1LCA4MywgNzMsIDgzLCAxMjgsIDg2LCA2NSwgODQsIDcyLCA4OSwgMTI4LCA4NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDIxMCwgODYsIDY5LCA4MiwgNzEsIDY5LCAxMjgsIDg2LCA2OSwgODMsIDg0LCA2NSwgMTI4LCA4NiwgNzMsIAotICAgIDgyLCA3MSwgNjUsIDEyOCwgODYsIDczLCA4MiwgNzEsIDc5LCAxMjgsIDg2LCA3OSwgNzYsIDg1LCA3NywgMTk3LCA4NiwgCi0gICAgOTAsIDc3LCA2OSwgODQsIDEyOCwgODcsIDY1LCA2NSwgODYsIDg1LCAxMjgsIDg3LCA2NSwgODMsIDc2LCA2NSwgMTI4LCAKLSAgICA4NywgNzIsIDY5LCA2OSwgNzYsIDEyOCwgODcsIDczLCA3OCwgNjgsIDg1LCAxMjgsIDg3LCA3MywgNzgsIDc0LCA2NSwgCi0gICAgMTI4LCA4NywgODIsIDY5LCA2NSwgODQsIDIwMCwgODcsIDgyLCA3OSwgNzgsIDcxLCAxMjgsIDg4LCA2OSwgODMsIDg0LCAKLSAgICA2OSwgMjExLCA4OSwgNjUsIDQ1LCA4OSwgNzksIDEyOCwgODksIDY1LCA2NSwgNjgsIDc5LCAxMjgsIDg5LCA2NSwgNjUsIAotICAgIDgyLCA4NSwgMTI4LCA4OSwgNjUsIDY4LCA2OCwgNzIsIDEyOCwgODksIDY1LCA3MSwgNzIsIDcyLCAxMjgsIDg5LCA2NSwgCi0gICAgNzUsIDcyLCA3MiwgMTI4LCA4OSwgNjksIDc5LCA0NSwgNzksIDEyOCwgODksIDY5LCA3OSwgNDUsIDg1LCAxMjgsIDg5LCAKLSAgICA2OSwgODQsIDczLCA4NiwgMTI4LCA4OSwgNzMsIDkwLCA2OSwgODQsIDEyOCwgODksIDg1LCA0NSwgNjksIDc5LCAxMjgsIAotICAgIDkwLCA2NSwgODIsIDgxLCA2NSwgMTI4LCA5MCwgNjUsIDg5LCA3MywgNzgsIDEyOCwgOTAsIDcyLCA2NSwgNzMsIDc4LCAKLSAgICAxMjgsIDkwLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODIsIAotICAgIDg4LCAxMjgsIDkwLCA3MiwgODksIDgyLCA4OCwgMTI4LCA5MCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgOTAsIDczLCA3OCwgCi0gICAgNzksIDgyLCAxMjgsIDkwLCA4NSwgNjYsIDg1LCA4MiwgMTI4LCA5MCwgODksIDcxLCA3OSwgODMsIDEyOCwgOTAsIDkwLCAKLSAgICA3MywgNjksIDgwLCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgOTAsIAotICAgIDkwLCA4OSwgODIsIDg4LCAxMjgsIDg1LCA4MCwgODAsIDY5LCAyMTAsIDgyLCA3OSwgNzcsIDY1LCAyMDYsIDc1LCA2NSwgCi0gICAgODksIDY1LCAyMDAsIDY1LCA3NiwgODAsIDcyLCAxOTMsIDgzLCA4NCwgNzksIDgwLCAxMjgsIDY3LCA3MiwgNzMsIDc1LCAKLSAgICAyMDEsIDc5LCA3NywgNjksIDcxLCAxOTMsIDc5LCA4OCwgNzMsIDY1LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAyMTIsIDkwLCAKLSAgICA2OSwgODIsIDc5LCAxMjgsIDc4LCA2NSwgNzEsIDgyLCAyMDEsIDg0LCA3MywgNzYsIDY4LCAxOTcsIDgzLCA3MiwgNjksIAotICAgIDY5LCAyMDYsIDcxLCA4NSwgNzgsIDg1LCAxMjgsIDg0LCA2OSwgNzgsIDg1LCAxMjgsIDc2LCA2OSwgNzAsIDg0LCAxMjgsIAotICAgIDc4LCA3OSwgODIsIDg0LCAyMDAsIDc5LCA3MSwgNzIsIDY1LCAyMDUsIDg2LCA3OSwgNjcsIDY1LCAyMDQsIDY3LCA4NSwgCi0gICAgODIsIDc2LCAyMTcsIDY1LCA4NCwgODQsIDczLCAxOTUsIDgzLCA3OSwgODUsIDg0LCAyMDAsIDgwLCA3OSwgNzMsIDc4LCAKLSAgICAyMTIsIDY2LCA2OSwgNzYsIDc5LCAyMTUsIDY2LCA4NSwgNzIsIDczLCAxOTYsIDczLCA3OSwgODQsIDY1LCAxMjgsIDgyLCAKLSAgICA2OSwgODMsIDg0LCAxMjgsIDg0LCA2NSwgNjcsIDc1LCAxMjgsIDY4LCA2NSwgODMsIDcyLCAxMjgsIDY4LCA3OSwgODcsIAotICAgIDc4LCAxMjgsIDc1LCA2NSwgODIsIDY5LCAyMDYsIDc4LCA0NSwgNjUsIDgyLCAyMTcsIDgzLCA2OSwgODYsIDY5LCAyMDYsIAotICAgIDY4LCA3MywgODMsIDcyLCAxMjgsIDcxLCA3MiwgNjUsIDczLCAyMDYsIDgzLCA3MiwgNjksIDc2LCAyMDQsIDY1LCA2NywgCi0gICAgODUsIDg0LCAxOTcsIDY2LCA2OSwgODQsIDY1LCAxMjgsIDY2LCA4MiwgNjksIDg2LCAxOTcsIDY3LCA3OSwgNzcsIDc3LCAKLSAgICAxOTMsIDcxLCA4MiwgNjUsIDg2LCAxOTcsIDc1LCA3OSwgNjksIDg0LCAxMjgsIDg2LCA2NSwgODIsIDczLCAxOTMsIDY3LCAKLSAgICA4NSwgODIsIDc2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAxMjgsIDcyLCA2NSwgNzYsIDcwLCAxMjgsIDc2LCA2NSwgNzEsIAotICAgIDY1LCAyMTAsIDkwLCA2OSwgODQsIDY1LCAxMjgsIDY1LCA3NiwgNjksIDcwLCAxMjgsIDY3LCA3MiwgNjksIDgzLCAyMTEsIAotICAgIDcwLCA2NSwgODIsIDgzLCAyMDEsIDc4LCA4NSwgNzgsIDg1LCAyMTgsIDg0LCA3MiwgNjksIDg0LCAxOTMsIDgwLCA3NiwgCi0gICAgODUsIDgzLCAxMjgsIDgzLCA3OSwgODUsIDc4LCAxOTYsIDg1LCA3OCwgNzMsIDc5LCAyMDYsIDY1LCA4NCwgODQsIDY1LCAKLSAgICAyMDMsIDcwLCA3OSwgODIsIDg0LCAyMTcsIDc2LCA2NSwgODIsIDcxLCAxOTcsIDc4LCA3OSwgODQsIDY5LCAxMjgsIDg0LCAKLSAgICA2NSwgNzUsIDUyLCAxMjgsIDg0LCA3OSwgNzgsIDY1LCAyMDQsIDcwLCA3MywgNzAsIDg0LCAyMTcsIDczLCA3NywgNjUsIAotICAgIDcxLCAxOTcsIDc1LCA2OSwgNzIsIDY5LCAyMDAsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDY1LCA3MSwgNzksIDcxLCAyMDEsIAotICAgIDY5LCA3NywgODAsIDg0LCAyMTcsIDcyLCA2OSwgNjUsIDgyLCAyMTIsIDgzLCA3MywgNzEsIDc3LCAxOTMsIDgzLCA4NSwgCi0gICAgNzMsIDg0LCAxMjgsIDg3LCA3MywgNzgsIDY4LCAxMjgsIDcwLCA3MywgNzYsIDc2LCAxMjgsIDc1LCA2NSwgODQsIDc5LCAKLSAgICAxMjgsIDc2LCA3OSwgNzksIDgwLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCAxMjgsIDY2LCA2OSwgNzEsIDczLCAyMDYsIDY3LCAKLSAgICA2NSwgODIsIDY5LCAyMTIsIDcwLCA3MywgODIsIDY5LCAxMjgsIDcxLCA3MywgODMsIDcyLCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCAxMjgsIDc1LCA2NSwgODAsIDgwLCAxOTMsIDc3LCA3OSwgNzksIDc4LCAxMjgsIDgzLCA3MiwgNjksIDczLCAxMjgsIAotICAgIDgzLCA4NCwgNjksIDc3LCAxMjgsIDgzLCA4NSwgNzgsIDcxLCAxMjgsIDg0LCA3MywgNjcsIDc1LCAxMjgsIDY2LCA2NSwgCi0gICAgNjcsIDc1LCAxMjgsIDY2LCA2NSwgNzgsIDUwLCAxMjgsIDY3LCA3NiwgNjksIDcwLCAxMjgsIDY3LCA4MiwgNzksIDgzLCAKLSAgICAyMTEsIDcwLCA2NSwgODQsIDcyLCAxOTMsIDcwLCA3MywgODIsIDgzLCAyMTIsIDcwLCA3MywgODQsIDY1LCAxMjgsIDcxLCAKLSAgICA4MiwgNjksIDY1LCAyMTIsIDc3LCA2NSwgNjgsIDY4LCAxOTMsIDc3LCA4NSwgODMsIDcyLCAxMjgsIDc4LCA2OCwgNzksIAotICAgIDc2LCAxOTcsIDgxLCA4NSwgNjUsIDY4LCAxMjgsIDgyLCA3OSwgNzksIDg0LCAxMjgsIDgyLCA4NSwgODAsIDY5LCAxOTcsIAotICAgIDgzLCA3MiwgNjUsIDgyLCAyMDgsIDg0LCA2NywgNzIsIDY5LCAyMDAsIDg0LCA3MiwgNjksIDY5LCAxMjgsIDg0LCA3MiwgCi0gICAgNzMsIDgyLCAxOTYsIDg0LCA4MywgNzIsIDY1LCAxMjgsIDg0LCA4MywgNzIsIDY5LCAxOTksIDg5LCA2NSwgNzgsIDcxLCAKLSAgICAxMjgsIDY1LCA3NiwgODQsIDY1LCAxMjgsIDY2LCA2OSwgNzIsIDY5LCAyMDAsIDY3LCA3MiwgNjksIDY3LCAyMDMsIDY3LCAKLSAgICA4MiwgNzksIDgwLCAxMjgsIDY4LCA2NSwgNzcsIDc3LCAxOTMsIDcxLCA2NSwgNzgsIDUwLCAxMjgsIDcxLCA3MywgODIsIAotICAgIDUwLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAxMjgsIDczLCA5MCwgNzIsIDY5LCAxMjgsIDc0LCA3OSwgNzMsIDc4LCAxMjgsIAotICAgIDc1LCA2NSwgNjgsIDUxLCAxMjgsIDc1LCA2NSwgODAsIDY1LCAxMjgsIDc1LCA2NSwgODMsIDgyLCAxOTMsIDc1LCA3MiwgCi0gICAgNjksIDczLCAxMjgsIDc1LCA4NywgNjUsIDY1LCAxMjgsIDc3LCA4NSwgODMsIDcyLCAxNzksIDc4LCA3MSwgNzksIDY5LCAKLSAgICAyMDAsIDc5LCA2NiwgNzksIDc2LCAyMTEsIDgwLCA2OSwgNzIsIDY5LCAyMDAsIDgwLCA3MywgODIsIDczLCAxOTksIDgyLCAKLSAgICA2NSwgNzAsIDY5LCAxMjgsIDgyLCA3OCwgNzksIDc5LCAyMDYsIDgyLCA4NCwgNjUsIDcxLCAyMTEsIDgzLCA2NywgNzIsIAotICAgIDg3LCAxOTMsIDgzLCA3MiwgNzMsIDY4LCAxMjgsIDgzLCA3MiwgODcsIDY5LCAxMjgsIDg0LCA3MiwgNjUsIDY1LCAxMjgsIAotICAgIDg0LCA3MiwgNzksIDgyLCAyMDYsIDg0LCA4NSwgNzEsIDUwLCAxMjgsIDg2LCA2NSwgNzgsIDY5LCAxMjgsIDg3LCA2NSwgCi0gICAgODYsIDY5LCAxMjgsIDkwLCA3MiwgNjksIDY5LCAxMjgsIDY1LCA3NiwgNzYsIDc5LCAxMjgsIDY2LCA3MywgODIsIDY4LCAKLSAgICAxMjgsIDY3LCA2NSwgODIsIDczLCAyMDMsIDY3LCA2NSwgODIsIDc5LCAyMDYsIDY3LCA2NywgNzIsIDY5LCAxMjgsIDY3LCAKLSAgICA3MiwgNjUsIDgyLCAxMjgsIDY3LCA3MiwgNzMsIDc4LCAxMjgsIDY3LCA3MiwgODIsIDc5LCAxOTMsIDY3LCA3MywgNjksIAotICAgIDg1LCAxOTUsIDY3LCA4NywgNjUsIDY1LCAxMjgsIDY4LCA2OSwgNzYsIDg0LCAxOTMsIDcwLCA3OSwgNzksIDg0LCAxMjgsIAotICAgIDcxLCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA3OSwgNzYsIDY4LCAxMjgsIDcxLCA4MiwgNjUsIDgzLCAyMTEsIDcyLCA2NSwgCi0gICAgODQsIDY1LCAxOTgsIDczLCA2OSwgODUsIDc4LCAxOTksIDc0LCA3MiwgNjUsIDc4LCAxMjgsIDc1LCA2OSwgODQsIDg0LCAKLSAgICAyMDEsIDc1LCA3MiwgNjUsIDgyLCAxMjgsIDc2LCA3MywgODMsIDcyLCAxMjgsIDc2LCA3NiwgNzYsIDY1LCAxMjgsIDc2LCAKLSAgICA4NSwgNzEsIDY1LCAyMDQsIDc3LCA3OCwgNjUsIDgzLCAxMjgsIDc3LCA4NSwgODIsIDY4LCAxOTMsIDc3LCA4NSwgODMsIAotICAgIDczLCAxOTUsIDc3LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA2NSwgNzEsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIAotICAgIDc5LCA4NSwgODQsIDY5LCAyMTAsIDc5LCA4OCwgNjksIDczLCAxOTMsIDgwLCA2NSwgODAsIDY5LCAyMTAsIDgwLCA2OSwgCi0gICAgNjgsIDY1LCAyMDQsIDgwLCA3MiwgNjUsIDgyLCAxMjgsIDgwLCA3OSwgNzYsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDc3LCAKLSAgICAxOTcsIDgwLCA4NywgNjUsIDY1LCAxMjgsIDgzLCA2OSwgNjksIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCAxOTMsIDgzLCA3MiwgODcsIAotICAgIDY1LCAxMjgsIDgzLCA3MywgNzYsIDc1LCAxMjgsIDgzLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA4NCwgNjUsIDgyLCAyMTIsIAotICAgIDgzLCA4NywgNjUsIDY1LCAxMjgsIDgzLCA4NywgNjUsIDgzLCAyMDAsIDg0LCA3MiwgNzMsIDczLCAxMjgsIDg0LCA3MiwgCi0gICAgNzksIDc5LCAxMjgsIDg0LCA4MiwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCAxMjgsIDg0LCA4NywgNjUsIDY1LCAKLSAgICAxMjgsIDg3LCA3MywgNzgsIDY5LCAxMjgsIDg5LCA2NSwgNzEsIDcyLCAxMjgsIDg5LCA2NSwgOTAsIDcyLCAxMjgsIDg5LCAKLSAgICA3MywgODcsIDc4LCAxMjgsIDg5LCA4NywgNjUsIDY1LCAxMjgsIDkwLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIAotICAgIDgyLCAxMjgsIDQ1LCA2OCwgOTAsIDg1LCAxOTYsIDY1LCA3NiwgNjksIDg1LCAyMTIsIDY1LCA3NiwgNzAsIDY1LCAxMjgsIAotICAgIDY1LCA3NywgNjUsIDgyLCAxMjgsIDY1LCA4MCwgNjksIDgzLCAyMDcsIDY1LCA4MiwgNzEsIDczLCAxMjgsIDY2LCA2NiwgCi0gICAgODUsIDg0LCAxMjgsIDY2LCA2OSwgNjUsIDg0LCAxMjgsIDY2LCA3NiwgNjUsIDY4LCAxOTcsIDY2LCA3NiwgODUsIDY5LCAKLSAgICAxMjgsIDY2LCA3OSwgNzgsIDY5LCAxMjgsIDY2LCA4MiwgNzksIDY1LCAxOTYsIDY2LCA4MiwgODUsIDgzLCAyMDAsIDY2LCAKLSAgICA4NSwgNzUsIDg5LCAxMjgsIDY2LCA5MCwgODUsIDc4LCAxOTksIDY3LCA2NSwgODIsIDg0LCAxMjgsIDY3LCA4NSwgNzksIAotICAgIDgwLCAxMjgsIDY3LCA4NSwgODIsIDg2LCAxOTcsIDY3LCA4NywgNzMsIDczLCAxMjgsIDY3LCA4NywgNzksIDc5LCAxMjgsIAotICAgIDY4LCA2NSwgNzYsIDY5LCAyMTIsIDY4LCA2NSwgNzgsIDcxLCAxMjgsIDY4LCA2OCwgODUsIDgyLCAxMjgsIDY4LCA2OSwgCi0gICAgNjksIDgyLCAxMjgsIDY4LCA3MywgNzcsIDUwLCAxMjgsIDY4LCA5MCwgNzIsIDY1LCAxMjgsIDY4LCA5MCwgNzIsIDY5LCAKLSAgICAxMjgsIDY4LCA5MCwgNzQsIDY5LCAxMjgsIDY4LCA5MCwgODcsIDY5LCAxMjgsIDY4LCA5MCwgOTAsIDY5LCAxMjgsIDY5LCAKLSAgICA2NSwgODIsIDg0LCAyMDAsIDY5LCA4MiwgNjUsIDgzLCAxOTcsIDcwLCA2OSwgNjksIDY4LCAxMjgsIDcwLCA3MywgODMsIAotICAgIDcyLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCAxMjgsIDcwLCA3NiwgNjUsIDg0LCAxMjgsIDcwLCA4MiwgNzksIDcxLCAxMjgsIAotICAgIDcwLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA2NSwgNjYsIDY1LCAxMjgsIDcxLCA2NSwgODQsIDY5LCAxMjgsIDcxLCA2NywgCi0gICAgNzMsIDcxLCAxMjgsIDcxLCA3MSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgODUsIDc5LCAxMjgsIDcxLCA3MiwgNjUsIDY4LCAKLSAgICAxMjgsIDcxLCA3MiwgNzIsIDY1LCAxMjgsIDcxLCA3MywgNzcsIDY5LCAyMDQsIDcxLCA3OSwgNjUsIDc2LCAxMjgsIDcxLCAKLSAgICA4MiwgNjUsIDY3LCAxOTcsIDcxLCA4MywgODUsIDc3LCAxMjgsIDcxLCA4NSwgODIsIDU1LCAxMjgsIDcxLCA4OSwgNjUsIAotICAgIDgzLCAxMjgsIDcxLCA4OSwgNzksIDc4LCAxMjgsIDcyLCA2NSwgODQsIDY5LCAxMjgsIDcyLCA2NSwgODYsIDY5LCAxMjgsIAotICAgIDcyLCA2NiwgNjUsIDgzLCAxOTMsIDcyLCA2OSwgNzgsIDcxLCAxMjgsIDcyLCA2OSwgODIsIDg1LCAxMjgsIDcyLCA3MiwgCi0gICAgNjUsIDY1LCAxMjgsIDcyLCA3MywgNjksIDg1LCAyMDAsIDcyLCA4NSwgNjYsIDUwLCAxMjgsIDcyLCA4OCwgNzMsIDg0LCAKLSAgICAxMjgsIDcyLCA4OCwgNzksIDgwLCAxMjgsIDcyLCA4OCwgODUsIDc5LCAxMjgsIDczLCA3NywgNzMsIDc4LCAxMjgsIDc0LCAKLSAgICA2NSwgNjgsIDY5LCAxMjgsIDc0LCA2OSwgNjksIDc3LCAxMjgsIDc0LCA3MiwgNjksIDcyLCAxMjgsIDc0LCA3NCwgNzMsIAotICAgIDY5LCAxMjgsIDc0LCA3NCwgODUsIDg0LCAxMjgsIDc1LCA2NSwgNjgsIDUwLCAxMjgsIDc1LCA2NSwgNjgsIDUzLCAxMjgsIAotICAgIDc1LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA3MiwgNjUsIDcyLCAxMjgsIDc1LCA3MiwgNjUsIDc4LCAxOTksIDc1LCA3MiwgCi0gICAgNzIsIDY1LCAxMjgsIDc1LCA3OCwgNzMsIDcwLCAxOTcsIDc1LCA4MywgODMsIDY1LCAxMjgsIDc1LCA4NywgNzMsIDczLCAKLSAgICAxMjgsIDc1LCA4NywgNzksIDc5LCAxMjgsIDc2LCA2OSwgNjUsIDcwLCAxMjgsIDc2LCA2OSwgNzgsIDcxLCAxOTMsIDc2LCAKLSAgICA3MywgODcsIDc4LCAxMjgsIDc2LCA3OSwgNzgsIDcxLCAxOTMsIDc2LCA3OSwgODcsIDQ1LCAxODUsIDc2LCA4NywgNjUsIAotICAgIDY1LCAxMjgsIDc2LCA4NywgNzMsIDczLCAxMjgsIDc2LCA4NywgNzksIDc5LCAxMjgsIDc3LCA2OSwgNjUsIDg0LCAxMjgsIAotICAgIDc3LCA2OSwgNjksIDc3LCAxMjgsIDc3LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2OSwgODMsIDc5LCAxMjgsIDc3LCA3MywgCi0gICAgNjksIDg1LCAyMDUsIDc3LCA3MywgNzYsIDc2LCAxOTcsIDc3LCA3OSwgODUsIDc4LCAxOTYsIDc3LCA4NywgNzMsIDczLCAKLSAgICAxMjgsIDc3LCA4NywgNzksIDc5LCAxMjgsIDc4LCA2NSwgNzcsIDY5LCAxMjgsIDc4LCA2NSwgNzgsIDY1LCAxMjgsIDc4LCAKLSAgICA2NiwgNzMsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCAxMjgsIDc4LCA3MywgNjksIDg1LCAyMDYsIDc4LCA3OCwgNzgsIAotICAgIDY1LCAxMjgsIDc4LCA3OSwgNjgsIDY5LCAxMjgsIDc4LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA4OSwgNzMsIDgwLCAxMjgsIAotICAgIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCA5MCwgODUsIDgwLCAxMjgsIDgwLCA2NSwgODcsIDc4LCAxMjgsIDgwLCA3MywgCi0gICAgNjksIDg1LCAyMDgsIDgwLCA3MywgODcsIDgyLCAxMjgsIDgwLCA3NiwgNjUsIDY3LCAxOTcsIDgwLCA3OSwgODUsIDc4LCAKLSAgICAxOTYsIDgwLCA4NywgNzMsIDczLCAxMjgsIDgwLCA4NywgNzksIDc5LCAxMjgsIDgxLCA4NSwgNzksIDg0LCAxOTcsIDgyLCAKLSAgICA2NSwgODksIDgzLCAxMjgsIDgyLCA2NiwgNjUsIDgzLCAxOTMsIDgyLCA3MywgNjksIDg1LCAyMDQsIDgyLCA3OSwgNzksIAotICAgIDc1LCAxMjgsIDgyLCA4NSwgNzcsIDY1LCAyMDEsIDgyLCA4NywgNjUsIDY1LCAxMjgsIDgzLCA2NSwgNjgsIDY5LCAxMjgsIAotICAgIDgzLCA2NSwgNzYsIDc2LCAxOTMsIDgzLCA2NSwgNzYsIDg0LCAxMjgsIDgzLCA2OSwgNjUsIDc2LCAxMjgsIDgzLCA3MiwgCi0gICAgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg0LCAxMjgsIDgzLCA3MiwgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDcwLCAKLSAgICAyMTIsIDgzLCA3MiwgNzksIDcxLCAyMDEsIDgzLCA3MiwgNzksIDc5LCAxMjgsIDgzLCA3MiwgODUsIDgyLCAxMjgsIDgzLCAKLSAgICA3MiwgODcsIDczLCAxMjgsIDgzLCA3MiwgODcsIDc5LCAxMjgsIDgzLCA3MywgNzEsIDUyLCAxMjgsIDgzLCA3NiwgODUsIAotICAgIDgyLCAxMjgsIDgzLCA3NywgNjUsIDgzLCAyMDAsIDgzLCA3OCwgNzksIDg1LCAyMTIsIDgzLCA4MCwgNjUsIDY4LCAxOTcsIAotICAgIDgzLCA4MSwgODUsIDY1LCAyMTIsIDgzLCA4NCwgNjUsIDcwLCAxOTgsIDgzLCA4NSwgNzUsIDg1LCAyMDYsIDgzLCA4NywgCi0gICAgNzMsIDczLCAxMjgsIDgzLCA4NywgNzksIDc5LCAxMjgsIDg0LCA2NywgNzIsIDY5LCAxMjgsIDg0LCA2OSwgODgsIDg0LCAKLSAgICAxMjgsIDg0LCA3MiwgNjksIDgyLCAxOTcsIDg0LCA3MywgNzcsIDY5LCAxMjgsIDg0LCA3MywgODcsIDc4LCAxMjgsIDg0LCAKLSAgICA3NiwgNzIsIDY1LCAxMjgsIDg0LCA3NiwgNzIsIDY5LCAxMjgsIDg0LCA3NiwgNzIsIDczLCAxMjgsIDg0LCA3NiwgNzIsIAotICAgIDc5LCAxMjgsIDg0LCA4MiwgODUsIDY5LCAxMjgsIDg0LCA4MywgNzIsIDY5LCAxMjgsIDg0LCA4MywgODMsIDY5LCAxMjgsIAotICAgIDg0LCA4MywgODcsIDY5LCAxMjgsIDg0LCA4NywgNzMsIDczLCAxMjgsIDg0LCA4NywgNzksIDc5LCAxMjgsIDg1LCA3OCwgCi0gICAgNjgsIDY5LCAyMTAsIDg2LCA2OSwgNjgsIDY5LCAxMjgsIDg2LCA2OSwgNzgsIDY4LCAxMjgsIDg2LCA3MywgNjgsIDY1LCAKLSAgICAxMjgsIDg3LCA2NSwgNzYsIDc1LCAxMjgsIDg3LCA2NSwgODMsIDc2LCAxOTMsIDg3LCA2NSwgODQsIDY5LCAyMTAsIDg3LCAKLSAgICA3MiwgNzksIDc2LCAxOTcsIDg3LCA3OSwgNzksIDY4LCAxMjgsIDg3LCA3OSwgNzksIDc2LCAxMjgsIDg3LCA4OSwgNzgsIAotICAgIDc4LCAxMjgsIDg5LCA2NSwgNzUsIDcyLCAxMjgsIDg5LCA2NSwgODQsIDczLCAxMjgsIDg5LCA2OSwgODIsIDczLCAxMjgsIAotICAgIDg5LCA3OSwgNDUsIDczLCAxMjgsIDg5LCA3OSwgNzEsIDcyLCAxMjgsIDg5LCA4NSwgNDUsIDczLCAxMjgsIDg5LCA4NywgCi0gICAgNzMsIDczLCAxMjgsIDg5LCA4NywgNzksIDc5LCAxMjgsIDkwLCA2NSwgODEsIDY5LCAxOTgsIDkwLCA2NSwgODQsIDY1LCAKLSAgICAxMjgsIDkwLCA3MiwgODcsIDY5LCAxMjgsIDkwLCA3NiwgNjUsIDc3LCAxOTMsIDQ1LCA2NywgNzIsIDY1LCAyMTAsIDY1LCAKLSAgICA2OCwgNjksIDcxLCAxMjgsIDY1LCA2OSwgODMsIDY3LCAxMjgsIDY1LCA3MCwgODQsIDY5LCAyMTAsIDY1LCA3MiwgNjUsIAotICAgIDY4LCAxMjgsIDY1LCA3MiwgODMsIDY1LCAxMjgsIDY1LCA3MywgNzYsIDc3LCAxMjgsIDY1LCA3MywgNzgsIDc4LCAxMjgsIAotICAgIDY1LCA3NSwgNjUsIDgyLCAxOTMsIDY1LCA3NSwgNjYsIDY1LCAyMTAsIDY1LCA3NiwgNzEsIDczLCAyMTgsIDY1LCA3NiwgCi0gICAgNzYsIDY1LCAyMDAsIDY1LCA3NiwgODAsIDY1LCAxMjgsIDY1LCA3NywgODAsIDgzLCAxMjgsIDY1LCA3OCwgNzIsIDg1LCAKLSAgICAxMjgsIDY1LCA3OCwgNzUsIDcyLCAxMjgsIDY1LCA3OCwgODMsIDg1LCAyMTgsIDY1LCA4MCwgNzMsIDc4LCAxMjgsIDY1LCAKLSAgICA4MiwgNjUsIDY4LCAxMjgsIDY1LCA4MiwgNzcsIDg5LCAxMjgsIDY1LCA4MywgNzIsIDU3LCAxMjgsIDY1LCA4NCwgNzgsIAotICAgIDY1LCAyMDAsIDY1LCA4NSwgNzgsIDc4LCAxMjgsIDY1LCA4OSwgNjUsIDcyLCAxMjgsIDY2LCA0OCwgNDksIDU2LCAxMjgsIAotICAgIDY2LCA0OCwgNDksIDU3LCAxMjgsIDY2LCA0OCwgNTAsIDUwLCAxMjgsIDY2LCA0OCwgNTEsIDUyLCAxMjgsIDY2LCA0OCwgCi0gICAgNTIsIDU1LCAxMjgsIDY2LCA0OCwgNTIsIDU3LCAxMjgsIDY2LCA0OCwgNTMsIDU0LCAxMjgsIDY2LCA0OCwgNTQsIDUxLCAKLSAgICAxMjgsIDY2LCA0OCwgNTQsIDUyLCAxMjgsIDY2LCA0OCwgNTUsIDU3LCAxMjgsIDY2LCA0OCwgNTYsIDUwLCAxMjgsIDY2LCAKLSAgICA0OCwgNTYsIDUxLCAxMjgsIDY2LCA0OCwgNTYsIDU0LCAxMjgsIDY2LCA0OCwgNTYsIDU3LCAxMjgsIDY2LCA0OSwgNDgsIAotICAgIDUzLCAxOTgsIDY2LCA0OSwgNDgsIDUzLCAyMDUsIDY2LCA0OSwgNDgsIDU0LCAxOTgsIDY2LCA0OSwgNDgsIDU0LCAyMDUsIAotICAgIDY2LCA0OSwgNDgsIDU1LCAxOTgsIDY2LCA0OSwgNDgsIDU1LCAyMDUsIDY2LCA0OSwgNDgsIDU2LCAxOTgsIDY2LCA0OSwgCi0gICAgNDgsIDU2LCAyMDUsIDY2LCA0OSwgNDgsIDU3LCAxOTgsIDY2LCA0OSwgNDgsIDU3LCAyMDUsIDY2LCA0OSwgNTEsIDUwLCAKLSAgICAxMjgsIDY2LCA0OSwgNTIsIDUwLCAxMjgsIDY2LCA0OSwgNTIsIDU0LCAxMjgsIDY2LCA0OSwgNTMsIDQ4LCAxMjgsIDY2LCAKLSAgICA0OSwgNTMsIDUwLCAxMjgsIDY2LCA0OSwgNTMsIDUxLCAxMjgsIDY2LCA0OSwgNTMsIDUyLCAxMjgsIDY2LCA0OSwgNTMsIAotICAgIDUzLCAxMjgsIDY2LCA0OSwgNTMsIDU1LCAxMjgsIDY2LCA0OSwgNTMsIDU2LCAxMjgsIDY2LCA0OSwgNTQsIDQ4LCAxMjgsIAotICAgIDY2LCA0OSwgNTQsIDQ5LCAxMjgsIDY2LCA0OSwgNTQsIDUyLCAxMjgsIDY2LCA0OSwgNTQsIDUzLCAxMjgsIDY2LCA0OSwgCi0gICAgNTQsIDU0LCAxMjgsIDY2LCA0OSwgNTQsIDU1LCAxMjgsIDY2LCA0OSwgNTQsIDU2LCAxMjgsIDY2LCA0OSwgNTQsIDU3LCAKLSAgICAxMjgsIDY2LCA0OSwgNTUsIDQ4LCAxMjgsIDY2LCA0OSwgNTUsIDQ5LCAxMjgsIDY2LCA0OSwgNTUsIDUwLCAxMjgsIDY2LCAKLSAgICA0OSwgNTUsIDUyLCAxMjgsIDY2LCA0OSwgNTUsIDU1LCAxMjgsIDY2LCA0OSwgNTUsIDU2LCAxMjgsIDY2LCA0OSwgNTUsIAotICAgIDU3LCAxMjgsIDY2LCA0OSwgNTYsIDQ4LCAxMjgsIDY2LCA0OSwgNTYsIDQ5LCAxMjgsIDY2LCA0OSwgNTYsIDUwLCAxMjgsIAotICAgIDY2LCA0OSwgNTYsIDUxLCAxMjgsIDY2LCA0OSwgNTYsIDUyLCAxMjgsIDY2LCA0OSwgNTYsIDUzLCAxMjgsIDY2LCA0OSwgCi0gICAgNTYsIDU3LCAxMjgsIDY2LCA0OSwgNTcsIDQ4LCAxMjgsIDY2LCA1MCwgNDgsIDQ4LCAxMjgsIDY2LCA1MCwgNDgsIDQ5LCAKLSAgICAxMjgsIDY2LCA1MCwgNDgsIDUwLCAxMjgsIDY2LCA1MCwgNDgsIDUxLCAxMjgsIDY2LCA1MCwgNDgsIDUyLCAxMjgsIDY2LCAKLSAgICA1MCwgNDgsIDUzLCAxMjgsIDY2LCA1MCwgNDgsIDU0LCAxMjgsIDY2LCA1MCwgNDgsIDU1LCAxMjgsIDY2LCA1MCwgNDgsIAotICAgIDU2LCAxMjgsIDY2LCA1MCwgNDgsIDU3LCAxMjgsIDY2LCA1MCwgNDksIDQ4LCAxMjgsIDY2LCA1MCwgNDksIDQ5LCAxMjgsIAotICAgIDY2LCA1MCwgNDksIDUwLCAxMjgsIDY2LCA1MCwgNDksIDUxLCAxMjgsIDY2LCA1MCwgNDksIDUyLCAxMjgsIDY2LCA1MCwgCi0gICAgNDksIDUzLCAxMjgsIDY2LCA1MCwgNDksIDU0LCAxMjgsIDY2LCA1MCwgNDksIDU1LCAxMjgsIDY2LCA1MCwgNDksIDU2LCAKLSAgICAxMjgsIDY2LCA1MCwgNDksIDU3LCAxMjgsIDY2LCA1MCwgNTAsIDQ5LCAxMjgsIDY2LCA1MCwgNTAsIDUwLCAxMjgsIDY2LCAKLSAgICA1MCwgNTAsIDU0LCAxMjgsIDY2LCA1MCwgNTAsIDU1LCAxMjgsIDY2LCA1MCwgNTAsIDU2LCAxMjgsIDY2LCA1MCwgNTAsIAotICAgIDU3LCAxMjgsIDY2LCA1MCwgNTEsIDUwLCAxMjgsIDY2LCA1MCwgNTEsIDUyLCAxMjgsIDY2LCA1MCwgNTEsIDU0LCAxMjgsIAotICAgIDY2LCA1MCwgNTIsIDUzLCAxMjgsIDY2LCA1MCwgNTIsIDU0LCAxMjgsIDY2LCA1MCwgNTIsIDU2LCAxMjgsIDY2LCA1MCwgCi0gICAgNTIsIDU3LCAxMjgsIDY2LCA1MCwgNTMsIDQ4LCAxMjgsIDY2LCA1MCwgNTMsIDQ5LCAxMjgsIDY2LCA1MCwgNTMsIDUwLCAKLSAgICAxMjgsIDY2LCA1MCwgNTMsIDUxLCAxMjgsIDY2LCA1MCwgNTMsIDUzLCAxMjgsIDY2LCA1MCwgNTMsIDU0LCAxMjgsIDY2LCAKLSAgICA1MCwgNTMsIDU1LCAxMjgsIDY2LCA1MCwgNTMsIDU2LCAxMjgsIDY2LCA1MCwgNTMsIDU3LCAxMjgsIDY2LCA1MSwgNDgsIAotICAgIDUzLCAxMjgsIDY2LCA2NSwgNzEsIDUxLCAxMjgsIDY2LCA2NSwgNzEsIDY1LCAxMjgsIDY2LCA2NSwgNzIsIDg0LCAxMjgsIAotICAgIDY2LCA2NSwgNzgsIDY4LCAxMjgsIDY2LCA2NSwgODIsIDgzLCAxMjgsIDY2LCA2NSwgODMsIDY5LCAxMjgsIDY2LCA2NiwgCi0gICAgNjUsIDgwLCAxMjgsIDY2LCA2NiwgNjUsIDg0LCAxMjgsIDY2LCA2NiwgNjUsIDg4LCAxMjgsIDY2LCA2NiwgNjksIDgwLCAKLSAgICAxMjgsIDY2LCA2NiwgNjksIDg4LCAxMjgsIDY2LCA2NiwgNzMsIDY5LCAxMjgsIDY2LCA2NiwgNzMsIDgwLCAxMjgsIDY2LCAKLSAgICA2NiwgNzMsIDg0LCAxMjgsIDY2LCA2NiwgNzMsIDg4LCAxMjgsIDY2LCA2NiwgNzksIDgwLCAxMjgsIDY2LCA2NiwgNzksIAotICAgIDg0LCAxMjgsIDY2LCA2NiwgNzksIDg4LCAxMjgsIDY2LCA2NiwgODUsIDc5LCAxMjgsIDY2LCA2NiwgODUsIDgwLCAxMjgsIAotICAgIDY2LCA2NiwgODUsIDgyLCAxMjgsIDY2LCA2NiwgODUsIDg4LCAxMjgsIDY2LCA2NiwgODksIDgwLCAxMjgsIDY2LCA2NiwgCi0gICAgODksIDg0LCAxMjgsIDY2LCA2NiwgODksIDg4LCAxMjgsIDY2LCA2NywgNjUsIDY4LCAxMjgsIDY2LCA2OSwgNjUsIDc4LCAKLSAgICAxMjgsIDY2LCA2OSwgNjksIDcyLCAxMjgsIDY2LCA2OSwgNzYsIDc2LCAxMjgsIDY2LCA2OSwgNzYsIDg0LCAxMjgsIDY2LCAKLSAgICA2OSwgNzgsIDY4LCAxMjgsIDY2LCA2OSwgNzksIDgyLCAxOTUsIDY2LCA2OSwgODQsIDcyLCAxMjgsIDY2LCA3MiwgNjksIAotICAgIDY5LCAxMjgsIDY2LCA3MiwgNzksIDc5LCAxMjgsIDY2LCA3MywgODIsIDg1LCAxMjgsIDY2LCA3NiwgNjUsIDc4LCAyMDMsIAotICAgIDY2LCA3OSwgNjUsIDgyLCAxMjgsIDY2LCA3OSwgNjUsIDg0LCAxMjgsIDY2LCA3OSwgNjgsIDg5LCAxMjgsIDY2LCA4MywgCi0gICAgNjgsIDg1LCAyMTEsIDY2LCA4MywgNzUsIDY1LCAxNzMsIDY2LCA4MywgNzUsIDg1LCAyMTAsIDY2LCA4NSwgNzYsIDc2LCAKLSAgICAxMjgsIDY2LCA4NSwgNzYsIDc2LCAyMTEsIDY2LCA4NSwgNzYsIDg1LCAxOTksIDY2LCA4NSwgNzcsIDgwLCAyMTcsIDY2LCAKLSAgICA4NSwgODIsIDUwLCAxMjgsIDY2LCA4NywgNjksIDY5LCAxMjgsIDY3LCA0NSwgNDksIDU2LCAxMjgsIDY3LCA0NSwgNTEsIAotICAgIDU3LCAxMjgsIDY3LCA2NSwgNjUsIDczLCAxMjgsIDY3LCA2NSwgNzYsIDY3LCAxMjgsIDY3LCA2NSwgNzYsIDc2LCAxMjgsIAotICAgIDY3LCA2NSwgNzYsIDg5LCAxOTMsIDY3LCA2NSwgODAsIDc5LCAxMjgsIDY3LCA2NSwgODYsIDY5LCAxMjgsIDY3LCA2NSwgCi0gICAgODksIDc4LCAxMjgsIDY3LCA2NywgNjUsIDY1LCAxMjgsIDY3LCA2NywgNjksIDY5LCAxMjgsIDY3LCA2NywgNzIsIDY1LCAKLSAgICAxMjgsIDY3LCA2NywgNzIsIDczLCAxMjgsIDY3LCA2NywgNzIsIDc5LCAxMjgsIDY3LCA2NywgNzIsIDg1LCAxMjgsIDY3LCAKLSAgICA3MiwgNjUsIDc4LCAxMjgsIDY3LCA3MiwgNjUsIDgwLCAxMjgsIDY3LCA3MiwgNjUsIDg0LCAxMjgsIDY3LCA3MiwgNjUsIAotICAgIDg4LCAxMjgsIDY3LCA3MiwgNjksIDgwLCAxMjgsIDY3LCA3MiwgNjksIDg0LCAxMjgsIDY3LCA3MiwgNjksIDg4LCAxMjgsIAotICAgIDY3LCA3MiwgNzIsIDY1LCAxMjgsIDY3LCA3MiwgNzksIDY1LCAxMjgsIDY3LCA3MiwgNzksIDY5LCAxMjgsIDY3LCA3MiwgCi0gICAgNzksIDgwLCAxMjgsIDY3LCA3MiwgNzksIDg0LCAxMjgsIDY3LCA3MiwgNzksIDg4LCAxMjgsIDY3LCA3MiwgODUsIDc5LCAKLSAgICAxMjgsIDY3LCA3MiwgODUsIDgwLCAxMjgsIDY3LCA3MiwgODUsIDgyLCAxMjgsIDY3LCA3MiwgODUsIDg4LCAxMjgsIDY3LCAKLSAgICA3MiwgODksIDgwLCAxMjgsIDY3LCA3MiwgODksIDgyLCAxMjgsIDY3LCA3MiwgODksIDg0LCAxMjgsIDY3LCA3MiwgODksIAotICAgIDg4LCAxMjgsIDY3LCA3MywgNjksIDgwLCAxMjgsIDY3LCA3MywgNjksIDg0LCAxMjgsIDY3LCA3MywgNjksIDg4LCAxMjgsIAotICAgIDY3LCA3NiwgNjUsIDc4LCAxMjgsIDY3LCA3NiwgNjUsIDg3LCAxMjgsIDY3LCA3NiwgNjksIDY1LCAyMTAsIDY3LCA3NiwgCi0gICAgNzksIDgzLCAxOTcsIDY3LCA3NiwgODUsIDY2LCAxMjgsIDY3LCA3OSwgNjgsIDY1LCAxMjgsIDY3LCA3OSwgNzYsIDc2LCAKLSAgICAxMjgsIDY3LCA3OSwgNzcsIDY2LCAxMjgsIDY3LCA3OSwgODAsIDg5LCAxMjgsIDY3LCA4NSwgNzksIDg4LCAxMjgsIDY3LCAKLSAgICA4NSwgODIsIDg4LCAxMjgsIDY3LCA4OSwgODIsIDg4LCAxMjgsIDY4LCA2NSwgNzEsIDY1LCAyMTgsIDY4LCA2NSwgNzEsIAotICAgIDgzLCAxMjgsIDY4LCA2NSwgNzMsIDgyLCAxMjgsIDY4LCA2NSwgNzcsIDgwLCAxMjgsIDY4LCA2NSwgODIsIDg0LCAxMjgsIAotICAgIDY4LCA2OCwgNjUsIDY1LCAxMjgsIDY4LCA2OCwgNjUsIDc2LCAxMjgsIDY4LCA2OCwgNjUsIDgwLCAxMjgsIDY4LCA2OCwgCi0gICAgNjUsIDg0LCAxMjgsIDY4LCA2OCwgNjUsIDg4LCAxMjgsIDY4LCA2OCwgNjgsIDY1LCAxMjgsIDY4LCA2OCwgNjksIDY5LCAKLSAgICAxMjgsIDY4LCA2OCwgNjksIDgwLCAxMjgsIDY4LCA2OCwgNjksIDg4LCAxMjgsIDY4LCA2OCwgNzIsIDc5LCAxMjgsIDY4LCAKLSAgICA2OCwgNzMsIDY5LCAxMjgsIDY4LCA2OCwgNzMsIDgwLCAxMjgsIDY4LCA2OCwgNzMsIDg0LCAxMjgsIDY4LCA2OCwgNzMsIAotICAgIDg4LCAxMjgsIDY4LCA2OCwgNzksIDY1LCAxMjgsIDY4LCA2OCwgNzksIDgwLCAxMjgsIDY4LCA2OCwgNzksIDg0LCAxMjgsIAotICAgIDY4LCA2OCwgNzksIDg4LCAxMjgsIDY4LCA2OCwgODUsIDc5LCAxMjgsIDY4LCA2OCwgODUsIDgwLCAxMjgsIDY4LCA2OCwgCi0gICAgODUsIDg0LCAxMjgsIDY4LCA2OCwgODUsIDg4LCAxMjgsIDY4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA2OSwgNjUsIDY4LCAKLSAgICAxMjgsIDY4LCA2OSwgNjYsIDczLCAyMTIsIDY4LCA2OSwgNjksIDc2LCAxMjgsIDY4LCA2OSwgNzIsIDczLCAxMjgsIDY4LCAKLSAgICA2OSwgNzUsIDY1LCAxMjgsIDY4LCA2OSwgNzYsIDg0LCAxMjgsIDY4LCA2OSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgODMsIAotICAgIDczLCAxMjgsIDY4LCA3MiwgNjUsIDc2LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIAotICAgIDY4LCA3MiwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDczLCAxMjgsIDY4LCA3MiwgNzIsIDc5LCAxMjgsIDY4LCA3MiwgCi0gICAgNzIsIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MywgODAsIDc2LCAyMDEsIDY4LCA3MywgODQsIDg0LCAKLSAgICAyMDcsIDY4LCA3NSwgNjUsIDgyLCAxMjgsIDY4LCA3NiwgNjksIDY5LCAxMjgsIDY4LCA3OSwgNDUsIDc5LCAxMjgsIDY4LCAKLSAgICA3OSwgNzMsIDg0LCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzksIDgyLCAxMjgsIDY4LCA3OSwgODIsIAotICAgIDg1LCAxMjgsIDY4LCA3OSwgODYsIDY5LCAxMjgsIDY4LCA4MiwgODUsIDc3LCAxMjgsIDY4LCA4NSwgNjYsIDUwLCAxMjgsIAotICAgIDY4LCA4NSwgNzgsIDUxLCAxMjgsIDY4LCA4NSwgNzgsIDUyLCAxMjgsIDY4LCA4NSwgODIsIDUwLCAxMjgsIDY4LCA4OSwgCi0gICAgNjksIDcyLCAxMjgsIDY4LCA5MCwgNjksIDY5LCAxMjgsIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2OCwgNzMsIDc4LCAKLSAgICAxMjgsIDY5LCA3MSwgNzMsIDgyLCAxMjgsIDY5LCA3MiwgODcsIDY1LCAyMTgsIDY5LCA3NCwgNjksIDY3LCAyMTIsIDY5LCAKLSAgICA3OCwgODQsIDY5LCAyMTAsIDY5LCA4NCwgNzIsIDY5LCAyMDQsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgNzYsIAotICAgIDY5LCAyMTAsIDY5LCA5MCwgNjksIDc4LCAxMjgsIDcwLCA2NSwgNjUsIDczLCAxMjgsIDcwLCA2NSwgNzgsIDcxLCAxMjgsIAotICAgIDcwLCA3NiwgNzMsIDgwLCAxMjgsIDcwLCA3OSwgODIsIDc3LCAyMTEsIDcwLCA4MiwgNjUsIDc4LCAxOTUsIDcwLCA4NSwgCi0gICAgODIsIDg4LCAxMjgsIDcwLCA4NSwgODMsIDY5LCAxMjgsIDcwLCA4NywgNjksIDY5LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCAKLSAgICAyMDQsIDcxLCA2NSwgNzcsIDc2LCAxMjgsIDcxLCA2NSwgODIsIDUxLCAxMjgsIDcxLCA2NiwgNjksIDc4LCAxMjgsIDcxLCAKLSAgICA2NiwgNzksIDc4LCAxMjgsIDcxLCA2OCwgNjUsIDc4LCAxMjgsIDcxLCA2OSwgNjUsIDgyLCAxMjgsIDcxLCA2OSwgNjgsIAotICAgIDY5LCAxMjgsIDcxLCA3MSwgNjUsIDY1LCAxMjgsIDcxLCA3MSwgNjUsIDgwLCAxMjgsIDcxLCA3MSwgNjUsIDg0LCAxMjgsIAotICAgIDcxLCA3MSwgNjUsIDg4LCAxMjgsIDcxLCA3MSwgNjksIDgwLCAxMjgsIDcxLCA3MSwgNjksIDg0LCAxMjgsIDcxLCA3MSwgCi0gICAgNjksIDg4LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCAxMjgsIDcxLCA3MSwgNzMsIDg0LCAxMjgsIDcxLCA3MSwgNzMsIDg4LCAKLSAgICAxMjgsIDcxLCA3MSwgNzksIDg0LCAxMjgsIDcxLCA3MSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgODUsIDgwLCAxMjgsIDcxLCAKLSAgICA3MSwgODUsIDgyLCAxMjgsIDcxLCA3MSwgODUsIDg0LCAxMjgsIDcxLCA3MSwgODUsIDg4LCAxMjgsIDcxLCA3MSwgODcsIAotICAgIDY1LCAxMjgsIDcxLCA3MSwgODcsIDY5LCAxMjgsIDcxLCA3MSwgODcsIDczLCAxMjgsIDcxLCA3MiwgNjksIDY5LCAxMjgsIAotICAgIDcxLCA3MiwgODcsIDY1LCAxMjgsIDcxLCA3MywgNjYsIDY1LCAxMjgsIDcxLCA3MywgNjksIDg0LCAxMjgsIDcxLCA3MywgCi0gICAgNzEsIDY1LCAxMjgsIDcxLCA3MywgODIsIDUxLCAxMjgsIDcxLCA3OSwgNzMsIDc4LCAxOTksIDcxLCA3OSwgNzgsIDcxLCAKLSAgICAxMjgsIDcxLCA3OSwgODIsIDY1LCAxMjgsIDcxLCA3OSwgODIsIDg0LCAxMjgsIDcxLCA4MiwgNjksIDY5LCAyMDYsIDcxLCAKLSAgICA4NSwgNjksIDcyLCAxMjgsIDcxLCA4OSwgNjUsIDY1LCAxMjgsIDcxLCA4OSwgNjksIDY5LCAxMjgsIDcyLCA2NSwgNjksIAotICAgIDcxLCAyMDQsIDcyLCA2NSwgNzEsIDc2LCAxMjgsIDcyLCA2NSwgODMsIDY5LCAyMTAsIDcyLCA2OSwgNzcsIDgwLCAxMjgsIAotICAgIDcyLCA3MiwgODcsIDY1LCAxMjgsIDcyLCA3MywgNjgsIDY5LCAxMjgsIDcyLCA3MywgNjksIDg4LCAxMjgsIDcyLCA3MywgCi0gICAgOTAsIDY2LCAxMjgsIDcyLCA3NiwgNjUsIDgwLCAxMjgsIDcyLCA3NiwgNjUsIDg0LCAxMjgsIDcyLCA3NiwgNjUsIDg4LCAKLSAgICAxMjgsIDcyLCA3NiwgNjksIDgwLCAxMjgsIDcyLCA3NiwgNjksIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDY5LCAxMjgsIDcyLCAKLSAgICA3NiwgNzMsIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDg0LCAxMjgsIDcyLCA3NiwgNzMsIDg4LCAxMjgsIDcyLCA3NiwgNzksIAotICAgIDgwLCAxMjgsIDcyLCA3NiwgNzksIDg4LCAxMjgsIDcyLCA3NiwgODUsIDc5LCAxMjgsIDcyLCA3NiwgODUsIDgwLCAxMjgsIAotICAgIDcyLCA3NiwgODUsIDgyLCAxMjgsIDcyLCA3NiwgODUsIDg0LCAxMjgsIDcyLCA3NiwgODUsIDg4LCAxMjgsIDcyLCA3NiwgCi0gICAgODksIDgwLCAxMjgsIDcyLCA3NiwgODksIDgyLCAxMjgsIDcyLCA3NiwgODksIDg0LCAxMjgsIDcyLCA3NiwgODksIDg4LCAKLSAgICAxMjgsIDcyLCA3NywgNjUsIDgwLCAxMjgsIDcyLCA3NywgNjUsIDg0LCAxMjgsIDcyLCA3NywgNjUsIDg4LCAxMjgsIDcyLCAKLSAgICA3NywgNzMsIDY5LCAxMjgsIDcyLCA3NywgNzMsIDgwLCAxMjgsIDcyLCA3NywgNzMsIDg0LCAxMjgsIDcyLCA3NywgNzMsIAotICAgIDg4LCAxMjgsIDcyLCA3NywgNzksIDgwLCAxMjgsIDcyLCA3NywgNzksIDg0LCAxMjgsIDcyLCA3NywgNzksIDg4LCAxMjgsIAotICAgIDcyLCA3NywgODUsIDc5LCAxMjgsIDcyLCA3NywgODUsIDgwLCAxMjgsIDcyLCA3NywgODUsIDgyLCAxMjgsIDcyLCA3NywgCi0gICAgODUsIDg0LCAxMjgsIDcyLCA3NywgODUsIDg4LCAxMjgsIDcyLCA3NywgODksIDgwLCAxMjgsIDcyLCA3NywgODksIDgyLCAKLSAgICAxMjgsIDcyLCA3NywgODksIDg4LCAxMjgsIDcyLCA3OCwgNjUsIDgwLCAxMjgsIDcyLCA3OCwgNjUsIDg0LCAxMjgsIDcyLCAKLSAgICA3OCwgNjUsIDg4LCAxMjgsIDcyLCA3OCwgNjksIDgwLCAxMjgsIDcyLCA3OCwgNjksIDg4LCAxMjgsIDcyLCA3OCwgNzMsIAotICAgIDY5LCAxMjgsIDcyLCA3OCwgNzMsIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDg0LCAxMjgsIDcyLCA3OCwgNzMsIDg4LCAxMjgsIAotICAgIDcyLCA3OCwgNzksIDgwLCAxMjgsIDcyLCA3OCwgNzksIDg0LCAxMjgsIDcyLCA3OCwgNzksIDg4LCAxMjgsIDcyLCA3OCwgCi0gICAgODUsIDc5LCAxMjgsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDcyLCA3OSwgNzYsIDY1LCAyMDUsIDcyLCA3OSwgNzksIDc4LCAKLSAgICAxMjgsIDcyLCA3OSwgODQsIDY1LCAxMjgsIDcyLCA4MCwgODcsIDcxLCAxMjgsIDcyLCA4NSwgNzYsIDUwLCAxMjgsIDcyLCAKLSAgICA4NSwgNzcsIDY1LCAyMDYsIDcyLCA4OCwgNjUsIDgwLCAxMjgsIDcyLCA4OCwgNjUsIDg0LCAxMjgsIDcyLCA4OCwgNjUsIAotICAgIDg4LCAxMjgsIDcyLCA4OCwgNjksIDgwLCAxMjgsIDcyLCA4OCwgNjksIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAxMjgsIAotICAgIDcyLCA4OCwgNzMsIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDg4LCAxMjgsIDcyLCA4OCwgNzksIDg0LCAxMjgsIDcyLCA4OCwgCi0gICAgNzksIDg4LCAxMjgsIDcyLCA4OCwgODcsIDcxLCAxMjgsIDcyLCA5MCwgODcsIDcxLCAxMjgsIDcyLCA5MCwgOTAsIDgwLCAKLSAgICAxMjgsIDcyLCA5MCwgOTAsIDkwLCAxMjgsIDczLCA0NSwgNjksIDg1LCAxMjgsIDczLCA0NSwgODksIDY1LCAxMjgsIDczLCAKLSAgICA2OCwgNzYsIDY5LCAxMjgsIDczLCA3MCwgNzMsIDc4LCAxMjgsIDczLCA3NSwgNjUsIDgyLCAxOTMsIDczLCA3NiwgODUsIAotICAgIDg0LCAxMjgsIDczLCA3NiwgODUsIDg5LCAxMjgsIDczLCA3OCwgNjcsIDcyLCAxMjgsIDczLCA3OCwgNzgsIDY5LCAyMTAsIAotICAgIDczLCA3OCwgNzgsIDc4LCAxMjgsIDczLCA3OCwgODQsIDczLCAxMjgsIDczLCA4MywgNzksIDc4LCAxMjgsIDczLCA4NCwgCi0gICAgNjksIDc3LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAxMjgsIDc0LCA2OSwgODIsIDY1LCAxMjgsIDc0LCA2OSwgODIsIDY1LCAKLSAgICAyMDYsIDc0LCA3NCwgNjksIDY5LCAxMjgsIDc0LCA3NCwgNzMsIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDg0LCAxMjgsIDc0LCAKLSAgICA3NCwgNzMsIDg4LCAxMjgsIDc0LCA3NCwgNzksIDgwLCAxMjgsIDc0LCA3NCwgNzksIDg0LCAxMjgsIDc0LCA3NCwgNzksIAotICAgIDg4LCAxMjgsIDc0LCA3NCwgODUsIDc5LCAxMjgsIDc0LCA3NCwgODUsIDgwLCAxMjgsIDc0LCA3NCwgODUsIDgyLCAxMjgsIAotICAgIDc0LCA3NCwgODUsIDg4LCAxMjgsIDc0LCA3NCwgODksIDgwLCAxMjgsIDc0LCA3NCwgODksIDg0LCAxMjgsIDc0LCA3NCwgCi0gICAgODksIDg4LCAxMjgsIDc0LCA3OSwgNzgsIDcxLCAxMjgsIDc0LCA4NSwgNzYsIDg5LCAxMjgsIDc0LCA4NSwgNzgsIDY5LCAKLSAgICAxMjgsIDc0LCA4NSwgNzgsIDc5LCAxMjgsIDc0LCA4NSwgNzksIDg0LCAxMjgsIDc1LCA2NSwgNjUsIDcwLCAxMjgsIDc1LCAKLSAgICA2NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgNjgsIDUyLCAxMjgsIDc1LCA2NSwgNzcsIDUwLCAxMjgsIDc1LCA2NSwgNzcsIAotICAgIDUyLCAxMjgsIDc1LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCA2NSwgODAsIDcyLCAxMjgsIDc1LCA2NSwgODAsIDc5LCAxMjgsIAotICAgIDc1LCA2NywgNjUsIDc2LCAxMjgsIDc1LCA3MiwgNjUsIDY1LCAxMjgsIDc1LCA3MiwgNjUsIDczLCAxMjgsIDc1LCA3MiwgCi0gICAgNjUsIDc4LCAxMjgsIDc1LCA3MiwgNjksIDY5LCAxMjgsIDc1LCA3MiwgNzksIDc4LCAxMjgsIDc1LCA3MywgNjcsIDc1LCAKLSAgICAxMjgsIDc1LCA3MywgNjksIDgwLCAxMjgsIDc1LCA3MywgNjksIDg4LCAxMjgsIDc1LCA3MywgODIsIDc5LCAxMjgsIDc1LCAKLSAgICA3MywgODMsIDcyLCAxMjgsIDc1LCA3NSwgNjksIDY5LCAxMjgsIDc1LCA3OSwgNzcsIDY2LCAyMTMsIDc1LCA3OSwgODQsIAotICAgIDc5LCAxMjgsIDc1LCA4MCwgNjUsIDc4LCAxMjgsIDc1LCA4MCwgNjksIDY5LCAxMjgsIDc1LCA4MCwgNjksIDc4LCAxMjgsIAotICAgIDc1LCA4MCwgNzksIDc5LCAxMjgsIDc1LCA4NSwgNzgsIDcxLCAxMjgsIDc1LCA4NSwgNzksIDgwLCAxMjgsIDc1LCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDc1LCA4NSwgODIsIDg0LCAxMjgsIDc1LCA4NSwgODIsIDg4LCAxMjgsIDc1LCA4NSwgODUsIDcyLCAKLSAgICAxMjgsIDc1LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4OCwgNjUsIDY1LCAxMjgsIDc1LCA4OCwgNjksIDY5LCAxMjgsIDc1LCAKLSAgICA4OCwgODcsIDY1LCAxMjgsIDc1LCA4OCwgODcsIDY5LCAxMjgsIDc1LCA4OCwgODcsIDczLCAxMjgsIDc1LCA4OSwgNjUsIAotICAgIDY1LCAxMjgsIDc1LCA4OSwgNjksIDY5LCAxMjgsIDc2LCA2NSwgNjUsIDczLCAxMjgsIDc2LCA2NSwgNjUsIDc4LCAxMjgsIAotICAgIDc2LCA2NSwgNjcsIDY1LCAxMjgsIDc2LCA2NSwgNjksIDg2LCAxMjgsIDc2LCA2NSwgNzcsIDY4LCAxMjgsIDc2LCA2NSwgCi0gICAgNzcsIDY5LCAxMjgsIDc2LCA2NSwgNzcsIDY5LCAxOTYsIDc2LCA2OCwgNjUsIDc4LCAxMjgsIDc2LCA2OSwgNjksIDc1LCAKLSAgICAxMjgsIDc2LCA2OSwgNzEsIDgzLCAxMjgsIDc2LCA2OSwgODYsIDY5LCAyMDQsIDc2LCA2OSwgOTAsIDcyLCAxMjgsIDc2LCAKLSAgICA3MiwgNjUsIDY1LCAxMjgsIDc2LCA3MiwgNzMsIDczLCAxMjgsIDc2LCA3MiwgNzksIDc5LCAxMjgsIDc2LCA3MywgNjksIAotICAgIDg0LCAxMjgsIDc2LCA3MywgNzAsIDY5LCAxMjgsIDc2LCA3MywgNzYsIDg5LCAxMjgsIDc2LCA3MywgODQsIDgyLCAxOTMsIAotICAgIDc2LCA3OSwgNzYsIDc2LCAxMjgsIDc2LCA3OSwgNzksIDg0LCAxMjgsIDc2LCA4NSwgNzMsIDgzLCAxMjgsIDc2LCA4NSwgCi0gICAgNzksIDg0LCAxMjgsIDc3LCA2NSwgNjUsIDczLCAxMjgsIDc3LCA2NSwgNjgsIDg1LCAxMjgsIDc3LCA2NSwgODIsIDY5LCAKLSAgICAxMjgsIDc3LCA2NiwgNjksIDY5LCAxMjgsIDc3LCA2OSwgODIsIDczLCAxMjgsIDc3LCA2OSwgODMsIDcyLCAxMjgsIDc3LCAKLSAgICA2OSwgODMsIDczLCAxMjgsIDc3LCA3MSwgNjUsIDgwLCAxMjgsIDc3LCA3MSwgNjUsIDg0LCAxMjgsIDc3LCA3MSwgNjUsIAotICAgIDg4LCAxMjgsIDc3LCA3MSwgNjYsIDY1LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDczLCAxMjgsIAotICAgIDc3LCA3MSwgNjYsIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDg1LCAxMjgsIDc3LCA3MSwgNjksIDgwLCAxMjgsIDc3LCA3MSwgCi0gICAgNjksIDg4LCAxMjgsIDc3LCA3MSwgNzMsIDY5LCAxMjgsIDc3LCA3MSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgNzksIDg0LCAKLSAgICAxMjgsIDc3LCA3MSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgODUsIDc5LCAxMjgsIDc3LCA3MSwgODUsIDgwLCAxMjgsIDc3LCAKLSAgICA3MSwgODUsIDgyLCAxMjgsIDc3LCA3MSwgODUsIDg0LCAxMjgsIDc3LCA3MSwgODUsIDg4LCAxMjgsIDc3LCA3MywgNjcsIAotICAgIDgyLCAyMDcsIDc3LCA3MywgNzMsIDc4LCAxMjgsIDc3LCA3MywgNzcsIDY5LCAxMjgsIDc3LCA3MywgNzgsIDg5LCAxMjgsIAotICAgIDc3LCA3MywgODIsIDczLCAxMjgsIDc3LCA3OCwgODksIDY1LCAyMDUsIDc3LCA3OSwgNzgsIDg0LCAyMDAsIDc3LCA3OSwgCi0gICAgODUsIDg0LCAyMDAsIDc3LCA3OSwgODYsIDY5LCAxOTYsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCAKLSAgICAyMDEsIDc3LCA4NSwgNzksIDg0LCAxMjgsIDc3LCA4NywgNjksIDY5LCAxMjgsIDc4LCA2NSwgNjUsIDczLCAxMjgsIDc4LCAKLSAgICA2NSwgNzMsIDgyLCAxOTMsIDc4LCA2NSwgNzcsIDUwLCAxMjgsIDc4LCA2NSwgNzgsIDY4LCAxMjgsIDc4LCA2NiwgNjUsIAotICAgIDgwLCAxMjgsIDc4LCA2NiwgNjUsIDg0LCAxMjgsIDc4LCA2NiwgNjUsIDg4LCAxMjgsIDc4LCA2NiwgNzMsIDgwLCAxMjgsIAotICAgIDc4LCA2NiwgNzMsIDg0LCAxMjgsIDc4LCA2NiwgNzMsIDg4LCAxMjgsIDc4LCA2NiwgNzksIDgwLCAxMjgsIDc4LCA2NiwgCi0gICAgNzksIDg0LCAxMjgsIDc4LCA2NiwgNzksIDg4LCAxMjgsIDc4LCA2NiwgODUsIDgwLCAxMjgsIDc4LCA2NiwgODUsIDgyLCAKLSAgICAxMjgsIDc4LCA2NiwgODUsIDg0LCAxMjgsIDc4LCA2NiwgODUsIDg4LCAxMjgsIDc4LCA2NiwgODksIDgwLCAxMjgsIDc4LCAKLSAgICA2NiwgODksIDgyLCAxMjgsIDc4LCA2NiwgODksIDg0LCAxMjgsIDc4LCA2NiwgODksIDg4LCAxMjgsIDc4LCA2OCwgNjUsIAotICAgIDgwLCAxMjgsIDc4LCA2OCwgNjUsIDg0LCAxMjgsIDc4LCA2OCwgNjUsIDg4LCAxMjgsIDc4LCA2OCwgNjksIDY5LCAxMjgsIAotICAgIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCA2OCwgNzMsIDgwLCAxMjgsIDc4LCA2OCwgNzMsIDg0LCAxMjgsIDc4LCA2OCwgCi0gICAgNzMsIDg4LCAxMjgsIDc4LCA2OCwgNzksIDc5LCAxMjgsIDc4LCA2OCwgNzksIDgwLCAxMjgsIDc4LCA2OCwgNzksIDg0LCAKLSAgICAxMjgsIDc4LCA2OCwgNzksIDg4LCAxMjgsIDc4LCA2OCwgODUsIDgwLCAxMjgsIDc4LCA2OCwgODUsIDgyLCAxMjgsIDc4LCAKLSAgICA2OCwgODUsIDg0LCAxMjgsIDc4LCA2OCwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgNjUsIAotICAgIDc4LCAxMjgsIDc4LCA3MSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNjUsIDg0LCAxMjgsIDc4LCA3MSwgNjUsIDg4LCAxMjgsIAotICAgIDc4LCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNjksIDgwLCAxMjgsIDc4LCA3MSwgNjksIDg4LCAxMjgsIDc4LCA3MSwgCi0gICAgNzEsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDczLCAxMjgsIDc4LCA3MSwgNzEsIDc5LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCAKLSAgICAxMjgsIDc4LCA3MSwgNzMsIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDY1LCAxMjgsIDc4LCA3MSwgNzksIDc4LCAxMjgsIDc4LCAKLSAgICA3MSwgNzksIDgwLCAxMjgsIDc4LCA3MSwgNzksIDg0LCAxMjgsIDc4LCA3MSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgODUsIAotICAgIDc5LCAxMjgsIDc4LCA3MiwgNzQsIDY1LCAxMjgsIDc4LCA3MiwgODUsIDY5LCAxMjgsIDc4LCA3NCwgNjksIDY5LCAxMjgsIAotICAgIDc4LCA3NCwgNzMsIDY5LCAxMjgsIDc4LCA3NCwgNzMsIDgwLCAxMjgsIDc4LCA3NCwgNzMsIDg0LCAxMjgsIDc4LCA3NCwgCi0gICAgNzMsIDg4LCAxMjgsIDc4LCA3NCwgNzksIDc5LCAxMjgsIDc4LCA3NCwgNzksIDgwLCAxMjgsIDc4LCA3NCwgNzksIDg0LCAKLSAgICAxMjgsIDc4LCA3NCwgNzksIDg4LCAxMjgsIDc4LCA3NCwgODUsIDc5LCAxMjgsIDc4LCA3NCwgODUsIDgwLCAxMjgsIDc4LCAKLSAgICA3NCwgODUsIDgyLCAxMjgsIDc4LCA3NCwgODUsIDg4LCAxMjgsIDc4LCA3NCwgODksIDgwLCAxMjgsIDc4LCA3NCwgODksIAotICAgIDgyLCAxMjgsIDc4LCA3NCwgODksIDg0LCAxMjgsIDc4LCA3NCwgODksIDg4LCAxMjgsIDc4LCA3OCwgNzEsIDY1LCAxMjgsIAotICAgIDc4LCA3OCwgNzEsIDczLCAxMjgsIDc4LCA3OCwgNzEsIDc5LCAxMjgsIDc4LCA3OSwgODMsIDY5LCAxMjgsIDc4LCA4MiwgCi0gICAgNjUsIDgwLCAxMjgsIDc4LCA4MiwgNjUsIDg0LCAxMjgsIDc4LCA4MiwgNjUsIDg4LCAxMjgsIDc4LCA4MiwgNjksIDgwLCAKLSAgICAxMjgsIDc4LCA4MiwgNjksIDg0LCAxMjgsIDc4LCA4MiwgNjksIDg4LCAxMjgsIDc4LCA4MiwgNzksIDgwLCAxMjgsIDc4LCAKLSAgICA4MiwgNzksIDg4LCAxMjgsIDc4LCA4MiwgODUsIDgwLCAxMjgsIDc4LCA4MiwgODUsIDgyLCAxMjgsIDc4LCA4MiwgODUsIAotICAgIDg0LCAxMjgsIDc4LCA4MiwgODUsIDg4LCAxMjgsIDc4LCA4MiwgODksIDgwLCAxMjgsIDc4LCA4MiwgODksIDgyLCAxMjgsIAotICAgIDc4LCA4MiwgODksIDg0LCAxMjgsIDc4LCA4MiwgODksIDg4LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgCi0gICAgNzYsIDc2LCAxMjgsIDc4LCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAKLSAgICAxMjgsIDc4LCA4OSwgNjUsIDY1LCAxMjgsIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjksIDcyLCAxMjgsIDc4LCAKLSAgICA4OSwgNzMsIDY5LCAxMjgsIDc4LCA4OSwgNzMsIDg0LCAxMjgsIDc4LCA4OSwgNzMsIDg4LCAxMjgsIDc4LCA4OSwgNzQsIAotICAgIDY1LCAxMjgsIDc4LCA4OSwgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDc5LCAxMjgsIDc4LCA4OSwgNzksIDg0LCAxMjgsIAotICAgIDc4LCA4OSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgODUsIDc5LCAxMjgsIDc4LCA4OSwgODUsIDgwLCAxMjgsIDc4LCA4OSwgCi0gICAgODUsIDg0LCAxMjgsIDc4LCA4OSwgODUsIDg4LCAxMjgsIDc4LCA4OSwgODcsIDY1LCAxMjgsIDc4LCA5MCwgNjUsIDgwLCAKLSAgICAxMjgsIDc4LCA5MCwgNjUsIDg0LCAxMjgsIDc4LCA5MCwgNjUsIDg4LCAxMjgsIDc4LCA5MCwgNjksIDg4LCAxMjgsIDc4LCAKLSAgICA5MCwgNzMsIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDg0LCAxMjgsIDc4LCA5MCwgNzMsIAotICAgIDg4LCAxMjgsIDc4LCA5MCwgNzksIDgwLCAxMjgsIDc4LCA5MCwgNzksIDg4LCAxMjgsIDc4LCA5MCwgODUsIDc5LCAxMjgsIAotICAgIDc4LCA5MCwgODUsIDgyLCAxMjgsIDc4LCA5MCwgODUsIDg4LCAxMjgsIDc4LCA5MCwgODksIDgwLCAxMjgsIDc4LCA5MCwgCi0gICAgODksIDgyLCAxMjgsIDc4LCA5MCwgODksIDg0LCAxMjgsIDc4LCA5MCwgODksIDg4LCAxMjgsIDc5LCA0NSwgNjksIDc5LCAKLSAgICAxMjgsIDc5LCA0NSwgODksIDY5LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCAxOTMsIDc5LCA3OCwgODMsIDg1LCAxMjgsIDc5LCAKLSAgICA3OSwgNzcsIDg1LCAxMjgsIDc5LCA3OSwgOTAsIDY5LCAxMjgsIDc5LCA4NSwgNzgsIDY3LCAxOTcsIDgwLCA2NSwgNjUsIAotICAgIDczLCAxMjgsIDgwLCA2NSwgNjgsIDc3LCAxOTMsIDgwLCA2NSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgODIsIDY1LCAxMjgsIAotICAgIDgwLCA2OSwgNjUsIDY3LCAxOTcsIDgwLCA2OSwgNjksIDgwLCAxMjgsIDgwLCA2OSwgNzgsIDc4LCAyMTcsIDgwLCA2OSwgCi0gICAgODAsIDY5LCAyMTIsIDgwLCA2OSwgODMsIDc5LCAxMjgsIDgwLCA3MiwgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDc4LCAKLSAgICAxMjgsIDgwLCA3MiwgNjksIDY5LCAxMjgsIDgwLCA3MiwgNzksIDY1LCAxMjgsIDgwLCA3MiwgODcsIDY1LCAxMjgsIDgwLCAKLSAgICA3MywgNjcsIDc1LCAxMjgsIDgwLCA3MywgNjksIDgwLCAxMjgsIDgwLCA3MywgNjksIDg4LCAxMjgsIDgwLCA3MywgNzUsIAotICAgIDc5LCAxMjgsIDgwLCA3NiwgNjUsIDc1LCAxMjgsIDgwLCA3NiwgNjUsIDc4LCAxOTcsIDgwLCA3NiwgNzksIDg3LCAxMjgsIAotICAgIDgwLCA3NiwgODUsIDc1LCAxMjgsIDgwLCA3NiwgODUsIDc3LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA4MiwgCi0gICAgNzMsIDc4LCAyMTIsIDgwLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA4NSwgNzksIDgwLCAxMjgsIDgwLCA4NSwgNzksIDg4LCAKLSAgICAxMjgsIDgwLCA4NSwgODIsIDg4LCAxMjgsIDgwLCA4NywgNjksIDY5LCAxMjgsIDgwLCA4OSwgODIsIDg4LCAxMjgsIDgxLCAKLSAgICA2NSwgNjUsIDcwLCAxMjgsIDgxLCA2NSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgODAsIDcyLCAxMjgsIDgxLCA3MiwgNjUsIAotICAgIDY1LCAxMjgsIDgxLCA3MiwgNjksIDY5LCAxMjgsIDgxLCA3MiwgODcsIDY1LCAxMjgsIDgxLCA3MiwgODcsIDY5LCAxMjgsIAotICAgIDgxLCA3MiwgODcsIDczLCAxMjgsIDgxLCA3MywgNjksIDgwLCAxMjgsIDgxLCA3MywgNjksIDg0LCAxMjgsIDgxLCA3MywgCi0gICAgNjksIDg4LCAxMjgsIDgxLCA3OSwgODAsIDY1LCAxMjgsIDgxLCA4NSwgNzksIDgwLCAxMjgsIDgxLCA4NSwgNzksIDg0LCAKLSAgICAxMjgsIDgxLCA4NSwgNzksIDg4LCAxMjgsIDgxLCA4NSwgODIsIDg4LCAxMjgsIDgxLCA4NSwgODUsIDg2LCAxMjgsIDgxLCAKLSAgICA4NywgNjUsIDY1LCAxMjgsIDgxLCA4NywgNjksIDY5LCAxMjgsIDgxLCA4OSwgNjUsIDY1LCAxMjgsIDgxLCA4OSwgNjksIAotICAgIDY5LCAxMjgsIDgxLCA4OSwgODIsIDg4LCAxMjgsIDgyLCA2NSwgNjUsIDczLCAxMjgsIDgyLCA2NSwgNzMsIDY4LCAyMDcsIAotICAgIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDgyLCA2OSwgNzcsIDg1LCAxMjgsIDgyLCA3MywgNjcsIDY5LCAxMjgsIDgyLCA3MywgCi0gICAgNjksIDc2LCAxMjgsIDgyLCA3MywgODIsIDY1LCAxMjgsIDgyLCA3OSwgNjUsIDgyLCAxMjgsIDgyLCA3OSwgODMsIDcyLCAKLSAgICAxMjgsIDgyLCA4MiwgNjUsIDg4LCAxMjgsIDgyLCA4MiwgNjksIDcyLCAxMjgsIDgyLCA4MiwgNjksIDgwLCAxMjgsIDgyLCAKLSAgICA4MiwgNjksIDg0LCAxMjgsIDgyLCA4MiwgNjksIDg4LCAxMjgsIDgyLCA4MiwgNzksIDgwLCAxMjgsIDgyLCA4MiwgNzksIAotICAgIDg0LCAxMjgsIDgyLCA4MiwgNzksIDg4LCAxMjgsIDgyLCA4MiwgODUsIDc5LCAxMjgsIDgyLCA4MiwgODUsIDgwLCAxMjgsIAotICAgIDgyLCA4MiwgODUsIDgyLCAxMjgsIDgyLCA4MiwgODUsIDg0LCAxMjgsIDgyLCA4MiwgODUsIDg4LCAxMjgsIDgyLCA4MiwgCi0gICAgODksIDgwLCAxMjgsIDgyLCA4MiwgODksIDgyLCAxMjgsIDgyLCA4MiwgODksIDg0LCAxMjgsIDgyLCA4MiwgODksIDg4LCAKLSAgICAxMjgsIDgyLCA4NSwgNzMsIDgzLCAxMjgsIDgyLCA4NSwgNzYsIDY5LCAxMjgsIDgyLCA4NSwgNzksIDgwLCAxMjgsIDgyLCAKLSAgICA4NSwgODMsIDczLCAxMjgsIDgzLCA2NSwgNDUsIDczLCAxMjgsIDgzLCA2NSwgNjUsIDczLCAxMjgsIDgzLCA2NSwgNzEsIAotICAgIDY1LCAxMjgsIDgzLCA2NSwgNzMsIDc2LCAxMjgsIDgzLCA2NSwgNzYsIDY1LCAxMjgsIDgzLCA2NSwgNzYsIDY1LCAyMDUsIAotICAgIDgzLCA2NSwgODAsIDY1LCAxMjgsIDgzLCA2NSwgODIsIDczLCAxMjgsIDgzLCA2NiwgODIsIDg1LCAyMDQsIDgzLCA2NywgCi0gICAgODcsIDY1LCAxMjgsIDgzLCA2OCwgNzksIDc4LCAxOTksIDgzLCA2OSwgNzcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAKLSAgICAxMjgsIDgzLCA3MiwgNjUsIDgwLCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIDg4LCAxMjgsIDgzLCAKLSAgICA3MiwgNjksIDc4LCAxMjgsIDgzLCA3MiwgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDg0LCAxMjgsIDgzLCA3MiwgNjksIAotICAgIDg4LCAxMjgsIDgzLCA3MiwgNzMsIDczLCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAxOTMsIAotICAgIDgzLCA3MiwgNzMsIDgyLCAxMjgsIDgzLCA3MiwgNzksIDY1LCAxMjgsIDgzLCA3MiwgNzksIDg0LCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDg4LCAxMjgsIDgzLCA3MiwgODUsIDc5LCAxMjgsIDgzLCA3MiwgODUsIDgwLCAxMjgsIDgzLCA3MiwgODUsIDg0LCAKLSAgICAxMjgsIDgzLCA3MiwgODUsIDg4LCAxMjgsIDgzLCA3MiwgODksIDY1LCAxMjgsIDgzLCA3MiwgODksIDgwLCAxMjgsIDgzLCAKLSAgICA3MiwgODksIDgyLCAxMjgsIDgzLCA3MiwgODksIDg0LCAxMjgsIDgzLCA3MiwgODksIDg4LCAxMjgsIDgzLCA3MywgNzEsIAotICAgIDY5LCAyMDQsIDgzLCA3MywgNzUsIDUwLCAxMjgsIDgzLCA3MywgNzUsIDczLCAxMjgsIDgzLCA3MywgODgsIDg0LCAyMTcsIAotICAgIDgzLCA3NSwgNzMsIDc4LCAxMjgsIDgzLCA3NSwgODUsIDc2LCAyMDQsIDgzLCA3NSwgODcsIDY1LCAxMjgsIDgzLCA3OCwgCi0gICAgNjUsIDc1LCAxOTcsIDgzLCA4MCwgNzksIDg0LCAxMjgsIDgzLCA4MCwgODcsIDY1LCAxMjgsIDgzLCA4MywgNjUsIDY1LCAKLSAgICAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDg4LCAxMjgsIDgzLCAKLSAgICA4MywgNjksIDY5LCAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNzMsIAotICAgIDY5LCAxMjgsIDgzLCA4MywgNzMsIDgwLCAxMjgsIDgzLCA4MywgNzMsIDg0LCAxMjgsIDgzLCA4MywgNzMsIDg4LCAxMjgsIAotICAgIDgzLCA4MywgNzksIDgwLCAxMjgsIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIDg4LCAxMjgsIDgzLCA4MywgCi0gICAgODUsIDgwLCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODksIDgwLCAKLSAgICAxMjgsIDgzLCA4MywgODksIDgyLCAxMjgsIDgzLCA4MywgODksIDg0LCAxMjgsIDgzLCA4MywgODksIDg4LCAxMjgsIDgzLCAKLSAgICA4NCwgNjUsIDc4LCAxMjgsIDgzLCA4NCwgNjksIDgwLCAxMjgsIDgzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCA4NCwgNzMsIAotICAgIDc2LCAyMDQsIDgzLCA4NCwgODcsIDY1LCAxMjgsIDgzLCA4NSwgNjgsIDUwLCAxMjgsIDgzLCA4NSwgNzUsIDg1LCAxMjgsIAotICAgIDgzLCA4NSwgNzksIDgwLCAxMjgsIDgzLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA4NSwgODIsIDU3LCAxMjgsIDgzLCA4NSwgCi0gICAgODIsIDg4LCAxMjgsIDgzLCA4NywgODUsIDc4LCAxOTksIDgzLCA5MCwgNjUsIDY1LCAxMjgsIDgzLCA5MCwgNjksIDY5LCAKLSAgICAxMjgsIDgzLCA5MCwgODcsIDY1LCAxMjgsIDgzLCA5MCwgODcsIDcxLCAxMjgsIDg0LCA2NSwgNjUsIDczLCAxMjgsIDg0LCAKLSAgICA2NSwgNzUsIDY5LCAxMjgsIDg0LCA2NSwgNzYsIDc2LCAxMjgsIDg0LCA2OSwgNDUsIDg1LCAxMjgsIDg0LCA2OSwgNzgsIAotICAgIDg0LCAxMjgsIDg0LCA2OSwgODQsIDcyLCAxMjgsIDg0LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA3MiwgNjksIDc3LCAxOTMsIAotICAgIDg0LCA3MiwgNjksIDg5LCAxMjgsIDg0LCA3MiwgNzksIDY1LCAxMjgsIDg0LCA3MiwgODUsIDgyLCAyMTEsIDg0LCA3MiwgCi0gICAgODcsIDY1LCAxMjgsIDg0LCA3MywgNjksIDgwLCAxMjgsIDg0LCA3MywgNjksIDg4LCAxMjgsIDg0LCA3MywgNzEsIDcyLCAKLSAgICAyMTIsIDg0LCA3MywgNzgsIDg5LCAxMjgsIDg0LCA3MywgODcsIDY1LCAyMTgsIDg0LCA3NiwgNjksIDY5LCAxMjgsIDg0LCAKLSAgICA3NiwgNzIsIDg1LCAxMjgsIDg0LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgODQsIDY1LCAyMDQsIDg0LCA4MiwgNjUsIAotICAgIDY4LCAxOTcsIDg0LCA4MiwgNzMsIDc5LCAyMDYsIDg0LCA4MywgNjUsIDY1LCAxMjgsIDg0LCA4MywgNjUsIDY4LCAyMDEsIAotICAgIDg0LCA4MywgODcsIDY1LCAxMjgsIDg0LCA4NCwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNjksIDY5LCAxMjgsIDg0LCA4NCwgCi0gICAgNjksIDcyLCAxMjgsIDg0LCA4NCwgNzIsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDczLCAxMjgsIDg0LCA4NCwgODMsIDY1LCAKLSAgICAxMjgsIDg0LCA4NCwgODMsIDY5LCAxMjgsIDg0LCA4NCwgODMsIDczLCAxMjgsIDg0LCA4NCwgODMsIDc5LCAxMjgsIDg0LCAKLSAgICA4NCwgODMsIDg1LCAxMjgsIDg0LCA4NSwgNzksIDgwLCAxMjgsIDg0LCA4NSwgNzksIDg0LCAxMjgsIDg0LCA4NSwgNzksIAotICAgIDg4LCAxMjgsIDg0LCA4NSwgODIsIDg4LCAxMjgsIDg0LCA5MCwgNjUsIDY1LCAxMjgsIDg0LCA5MCwgNjksIDY5LCAxMjgsIAotICAgIDg0LCA5MCwgNzksIDY1LCAxMjgsIDg1LCA0NSwgNjUsIDY5LCAxMjgsIDg1LCA2NSwgODQsIDcyLCAxMjgsIDg1LCA2OCwgCi0gICAgODUsIDcxLCAxMjgsIDg1LCA3NSwgNjUsIDgyLCAxOTMsIDg1LCA3NywgODUsIDc3LCAxMjgsIDg1LCA4MiwgNzMsIDUxLCAKLSAgICAxMjgsIDg1LCA4MiwgODUsIDY4LCAxOTMsIDg1LCA4MywgNzIsIDUwLCAxMjgsIDg1LCA4MywgNzIsIDg4LCAxMjgsIDg1LCAKLSAgICA4MywgODMsIDg1LCAxMjgsIDg1LCA4NSwgODUsIDUwLCAxMjgsIDg1LCA4NSwgODUsIDUxLCAxMjgsIDg1LCA4NSwgODUsIAotICAgIDg1LCAxMjgsIDg2LCA3MywgNjksIDgwLCAxMjgsIDg2LCA3MywgNjksIDg0LCAxMjgsIDg2LCA3MywgNjksIDg4LCAxMjgsIAotICAgIDg2LCA3MywgNzgsIDY5LCAxMjgsIDg2LCA4NSwgODIsIDg4LCAxMjgsIDg2LCA4OSwgODIsIDg4LCAxMjgsIDg3LCA2NSwgCi0gICAgNjksIDc4LCAxMjgsIDg3LCA2NSwgNzYsIDc2LCAxMjgsIDg3LCA2OSwgNzYsIDc2LCAxMjgsIDg3LCA2OSwgODMsIDg0LCAKLSAgICAxMjgsIDg3LCA3OSwgNzksIDc4LCAxMjgsIDg3LCA3OSwgODIsIDc1LCAxMjgsIDg3LCA4MiwgNjUsIDgwLCAxMjgsIDg3LCAKLSAgICA4NSwgNzgsIDc0LCAyMDcsIDg3LCA4NSwgNzksIDgwLCAxMjgsIDg3LCA4NSwgNzksIDg4LCAxMjgsIDg4LCA3MywgODIsIAotICAgIDc5LCAyMDYsIDg4LCA4OSwgNjUsIDY1LCAxMjgsIDg4LCA4OSwgNjksIDY5LCAxMjgsIDg4LCA4OSwgODIsIDg4LCAxMjgsIAotICAgIDg5LCA2NSwgNDUsIDc5LCAxMjgsIDg5LCA2NSwgNjUsIDczLCAxMjgsIDg5LCA2NSwgNjYsIDcyLCAxMjgsIDg5LCA2NSwgCi0gICAgNjcsIDcyLCAxMjgsIDg5LCA2NSwgNjgsIDY4LCAxMjgsIDg5LCA2NSwgNjgsIDcyLCAxMjgsIDg5LCA2NSwgNzEsIDc4LCAKLSAgICAxMjgsIDg5LCA2NSwgNzIsIDcyLCAxMjgsIDg5LCA2NSwgODIsIDgyLCAxMjgsIDg5LCA2NSwgODMsIDcyLCAxMjgsIDg5LCAKLSAgICA2NSwgODMsIDgzLCAxMjgsIDg5LCA2NSwgODQsIDcyLCAxMjgsIDg5LCA2NSwgODQsIDg0LCAxMjgsIDg5LCA2NSwgOTAsIAotICAgIDkwLCAxMjgsIDg5LCA2OSwgODIsIDY1LCAyMDAsIDg5LCA3MywgNDUsIDg1LCAxMjgsIDg5LCA3MywgNzgsIDcxLCAxMjgsIAotICAgIDg5LCA3OSwgNDUsIDc5LCAxMjgsIDg5LCA3OSwgNzcsIDc5LCAxMjgsIDg5LCA3OSwgODIsIDczLCAxMjgsIDg5LCA4NSwgCi0gICAgNDUsIDY1LCAxMjgsIDg5LCA4NSwgNDUsIDY5LCAxMjgsIDg5LCA4NSwgNDUsIDg1LCAxMjgsIDg5LCA4NSwgNjUsIDc4LCAKLSAgICAxMjgsIDg5LCA4NSwgNjgsIDcyLCAxMjgsIDg5LCA4NSwgNzksIDg0LCAxMjgsIDg5LCA4NSwgODIsIDg4LCAxMjgsIDg5LCAKLSAgICA4OSwgODIsIDg4LCAxMjgsIDkwLCA2NSwgNzcsIDg4LCAxMjgsIDkwLCA2NSwgODksIDczLCAyMDYsIDkwLCA3MiwgNjUsIAotICAgIDY1LCAxMjgsIDkwLCA3MiwgNjUsIDgwLCAxMjgsIDkwLCA3MiwgNjUsIDg0LCAxMjgsIDkwLCA3MiwgNjUsIDg4LCAxMjgsIAotICAgIDkwLCA3MiwgNjksIDgwLCAxMjgsIDkwLCA3MiwgNjksIDg0LCAxMjgsIDkwLCA3MiwgNjksIDg4LCAxMjgsIDkwLCA3MiwgCi0gICAgNzksIDc5LCAxMjgsIDkwLCA3MiwgNzksIDgwLCAxMjgsIDkwLCA3MiwgNzksIDg0LCAxMjgsIDkwLCA3MiwgNzksIDg4LCAKLSAgICAxMjgsIDkwLCA3MiwgODUsIDc5LCAxMjgsIDkwLCA3MiwgODUsIDgwLCAxMjgsIDkwLCA3MiwgODUsIDgyLCAxMjgsIDkwLCAKLSAgICA3MiwgODUsIDg0LCAxMjgsIDkwLCA3MiwgODUsIDg4LCAxMjgsIDkwLCA3MiwgODcsIDY1LCAxMjgsIDkwLCA3MiwgODksIAotICAgIDgwLCAxMjgsIDkwLCA3MiwgODksIDgyLCAxMjgsIDkwLCA3MiwgODksIDg0LCAxMjgsIDkwLCA3MiwgODksIDg4LCAxMjgsIAotICAgIDkwLCA3MywgOTAsIDUwLCAxMjgsIDkwLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCA5MCwgCi0gICAgNjUsIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAxMjgsIDkwLCA5MCwgNjksIDY5LCAKLSAgICAxMjgsIDkwLCA5MCwgNjksIDgwLCAxMjgsIDkwLCA5MCwgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCAxMjgsIDkwLCAKLSAgICA5MCwgNzMsIDgwLCAxMjgsIDkwLCA5MCwgNzMsIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDg4LCAxMjgsIDkwLCA5MCwgNzksIAotICAgIDgwLCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIDkwLCA5MCwgODUsIDgwLCAxMjgsIDkwLCA5MCwgODUsIDgyLCAxMjgsIAotICAgIDkwLCA5MCwgODUsIDg4LCAxMjgsIDkwLCA5MCwgODksIDgwLCAxMjgsIDkwLCA5MCwgODksIDgyLCAxMjgsIDkwLCA5MCwgCi0gICAgODksIDg0LCAxMjgsIDkwLCA5MCwgODksIDg4LCAxMjgsIDc5LCA4MCwgNjksIDIwNiwgNjgsIDczLCA4MywgMTk1LCA3MCwgCi0gICAgNzMsIDg2LCAxOTcsIDcwLCA3OSwgODUsIDIxMCwgNzAsIDg1LCA3NiwgMjA0LCA4MywgNjksIDY5LCAyMDYsIDgzLCA3MiwgCi0gICAgNjUsIDIwNiwgNzMsIDc5LCA4NCwgMTkzLCA2OSwgNjUsIDgzLCAyMTIsIDcwLCA4MiwgNzksIDIwNSwgODQsIDc5LCA2OCwgCi0gICAgMjA3LCA4NCwgNjksIDc4LCAxMjgsIDcyLCA3OSwgODUsIDIxMCwgODksIDg1LCA4MywgMTI4LCA4MywgNzMsIDY2LCAxOTcsIAotICAgIDY4LCA2NSwgODMsIDIwMCwgODEsIDg1LCA2NSwgMTk2LCA2OSwgOTAsIDY5LCAyMDYsIDc4LCA2OSwgNzksIDEyOCwgNzgsIAotICAgIDg1LCA3OCwgMTI4LCA4MCwgNzIsIDczLCAxMjgsIDY2LCA3MiwgNjUsIDEyOCwgNzEsIDY1LCA3OCwgMTc4LCA3MSwgNzIsIAotICAgIDY1LCAxMjgsIDgwLCA4MywgNzMsIDEyOCwgODQsIDcyLCA2OSwgMjAwLCA2NiwgNjUsIDY4LCAxMjgsIDc1LCA3OSwgNzcsIAotICAgIDIwMSwgODIsIDcyLCA3OSwgMTI4LCA3OSwgODgsIDczLCAxOTMsIDgyLCA3OSwgNjcsIDEyOCwgODQsIDY1LCA4NSwgMTI4LCAKLSAgICA3NCwgNzIsIDY1LCAxMjgsIDgzLCA2NSwgODIsIDE5MywgODQsIDY1LCA2NywgMjAzLCA2OCwgNzksIDY5LCAyMTEsIDc1LCAKLSAgICA4NSwgODIsIDEyOCwgODIsIDgyLCA2NSwgMTI4LCA4MywgNzIsIDczLCAyMDUsIDgyLCA2OCwgNjksIDIwNCwgODUsIDc4LCAKLSAgICA3MywgMjEyLCA3MywgNzEsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDE3OSwgODQsIDY1LCA3MywgMjA0LCA4NCwgNjksIDc4LCAKLSAgICAyMTEsIDg3LCA2NSwgODYsIDIxNywgODcsIDczLCA2OCwgMTk3LCA3MSwgNzMsIDgzLCAyMDAsIDgzLCA3MiwgNzMsIDIwNiwgCi0gICAgODMsIDcyLCA3OSwgMTI4LCA5MCwgNjUsIDczLCAyMDYsIDY4LCA3MywgNzEsIDE5MywgNjgsIDkwLCA2NSwgMTI4LCA2OCwgCi0gICAgOTAsIDY5LCAxMjgsIDc1LCA2NSwgNzAsIDEyOCwgNzYsIDY1LCA3NiwgMTI4LCA3NiwgNjksIDcxLCAxMjgsIDc3LCA4NSwgCi0gICAgODMsIDIwMCwgODcsIDc5LCA4MiwgMTk2LCA2NSwgODIsIDY3LCAxMjgsIDcxLCA3MiwgNjksIDEyOCwgNzUsIDY1LCA3NSwgCi0gICAgMTI4LCA3OCwgODksIDc5LCAxMjgsIDgzLCA4NCwgNzksIDIwOCwgODQsIDY1LCA3NywgMTI4LCA4NywgNjUsIDg2LCAxOTcsIAotICAgIDg5LCA2NSwgNzgsIDE5OSwgODksIDY1LCA4NCwgMTI4LCA5MCwgNjksIDgyLCAyMDcsIDY4LCA4NSwgNzgsIDE3OSwgNzEsIAotICAgIDczLCA4MiwgMTc5LCA3MSwgNzksIDY1LCAyMDQsIDcxLCA4NCwgNjksIDIxMCwgNzEsIDg1LCA3OCwgMjEzLCA3MiwgODUsIAotICAgIDY2LCAxNzgsIDc3LCA2OSwgNzcsIDEyOCwgNzgsIDY1LCA3MSwgMTkzLCA3OCwgNzQsIDY5LCAxMjgsIDc4LCA4OSwgNzMsIAotICAgIDEyOCwgODAsIDY1LCA4MCwgMTI4LCA4MiwgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDIxMCwgODMsIDg0LCA2NSwgMjEwLCAKLSAgICA4MywgODUsIDc4LCAxMjgsIDg0LCA4NywgNjksIDEyOCwgODcsIDY1LCA4NywgMTI4LCA4OSwgNzksIDY4LCAxMjgsIDY1LCAKLSAgICA4MCwgNzYsIDIwMSwgNjYsIDY2LCA2NSwgMTI4LCA2NiwgNjksIDY5LCAyMDAsIDY2LCA3OSwgODcsIDEyOCwgNjcsIDc2LCAKLSAgICA2OSwgMTk4LCA2OCwgNzQsIDY5LCAxMjgsIDY4LCA3NSwgNjUsIDIxMCwgNjgsIDg5LCA2OSwgMjAwLCA2OSwgNzMsIDY5LCAKLSAgICAxMjgsIDcwLCA2OSwgNzIsIDEyOCwgNzAsIDczLCA4MywgMjAwLCA3MSwgNzMsIDUyLCAxMjgsIDcxLCA4NSwgNjksIDIwMCwgCi0gICAgNzIsIDczLCA2OSwgMTI4LCA3MywgNjgsIDczLCAyMDUsIDc1LCA4MywgNzMsIDEyOCwgNzUsIDg1LCA1MSwgMTI4LCA3NiwgCi0gICAgNjUsIDc3LCAxOTcsIDc2LCA3NCwgNjksIDEyOCwgNzYsIDc5LCA3OSwgMTI4LCA3NywgNzEsIDc5LCAxMjgsIDc3LCA4NSwgCi0gICAgNjcsIDIwMCwgNzcsIDg3LCA2NSwgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgODIsIDEyOCwgNzgsIDc5LCA4NywgCi0gICAgMTI4LCA3OCwgODcsIDY1LCAxMjgsIDc4LCA4OSwgNjksIDIwMCwgNzgsIDg5LCA3MywgMjExLCA3OSwgNzksIDg1LCAxMjgsIAotICAgIDgwLCA3MiwgNzksIDEyOCwgODIsIDY1LCA2NSwgMTI4LCA4MywgNjUsIDgyLCAxMjgsIDgzLCA3MSwgNjUsIDIxNSwgODMsIAotICAgIDc5LCA3OSwgMTI4LCA4NCwgNjUsIDcxLCAxMjgsIDg0LCA3MiwgNjksIDIwNiwgODQsIDczLCA2NywgMjAzLCA4NCwgNzksIAotICAgIDc5LCAxMjgsIDg0LCA4NCwgNjksIDIwMCwgODQsIDg1LCA3MSwgMTc4LCA4NCwgODUsIDgyLCAxMjgsIDg2LCA2OSwgNjksIAotICAgIDEyOCwgODYsIDY5LCA4MiwgMjE3LCA4OSwgNjksIDgyLCAxMjgsIDg5LCA2OSwgODIsIDIxMywgNjYsIDY1LCA3NiwgMTI4LCAKLSAgICA2NiwgNjUsIDgzLCAxOTcsIDY2LCA5MCwgNzIsIDIwMSwgNjcsIDc5LCA3OSwgMTI4LCA2NywgNzksIDg3LCAxMjgsIDY3LCAKLSAgICA4NywgNzMsIDEyOCwgNjgsIDc5LCA3OCwgMTI4LCA2OCwgODUsIDY2LCAxMjgsIDY4LCA4NywgNjksIDEyOCwgNzAsIDY1LCAKLSAgICA2NSwgMTI4LCA3MCwgNjksIDY5LCAxMjgsIDcwLCA3NiwgNjUsIDIxMiwgNzAsIDgyLCA2OSwgMTk3LCA3MiwgNjUsIDY5LCAKLSAgICAxMjgsIDc0LCA3MywgNzYsIDEyOCwgNzQsIDc5LCA3OCwgMTkzLCA3NSwgNjksIDcyLCAxMjgsIDc1LCA3MiwgNzMsIDEyOCwgCi0gICAgNzUsIDcyLCA3OSwgMTI4LCA3NSwgNzMsIDY4LCAxMjgsIDc1LCA3NSwgNjUsIDEyOCwgNzUsIDc5LCA3OSwgMTI4LCA3NSwgCi0gICAgODcsIDY5LCAxMjgsIDc1LCA4NywgNzMsIDEyOCwgNzYsIDg1LCA1MCwgMTI4LCA3NiwgODUsIDc2LCAxMjgsIDc2LCA4NywgCi0gICAgNjUsIDEyOCwgNzcsIDY5LCA3OCwgMTI4LCA3NywgNzksIDc5LCAxMjgsIDc3LCA3OSwgNzksIDIwNiwgNzcsIDg3LCA2OSwgCi0gICAgMTI4LCA3NywgODcsIDczLCAxMjgsIDc4LCA2NSwgNjUsIDEyOCwgNzgsIDY5LCA2OSwgMTI4LCA3OCwgNzksIDc5LCAxMjgsIAotICAgIDc4LCA4OSwgODUsIDEyOCwgODAsIDY1LCA4MiwgMTI4LCA4MCwgNjksIDcyLCAxMjgsIDgwLCA4NywgNjksIDEyOCwgODAsIAotICAgIDg3LCA3MywgMTI4LCA4MSwgNjUsIDY1LCAxMjgsIDgxLCA2NSwgODIsIDEyOCwgODIsIDY1LCA2OSwgMTI4LCA4MiwgNjksIAotICAgIDgwLCAxOTMsIDgzLCA3MiwgNzksIDE5NywgODMsIDgzLCA3MywgMTI4LCA4MywgODMsIDc5LCAxMjgsIDgzLCA4NSwgODIsIAotICAgIDEyOCwgODQsIDY1LCA2NiwgMTI4LCA4NCwgNjksIDg0LCAxMjgsIDg0LCA3MiwgNjUsIDIwNCwgODUsIDc3LCA4NSwgMjA1LCAKLSAgICA4NiwgNjUsIDg2LCAxMjgsIDg2LCA3MywgNzgsIDEyOCwgODcsIDY1LCA2OSwgMTI4LCA4NywgNjUsIDc2LCAyMDMsIDg3LCAKLSAgICA2NSwgODUsIDEyOCwgODcsIDY5LCA3OSwgMTI4LCA4OCwgNjUsIDc4LCAxMjgsIDg4LCA2OSwgNzIsIDEyOCwgODksIDY1LCAKLSAgICA3NSwgMTI4LCA4OSwgODksIDY1LCAxMjgsIDkwLCA3MiwgNzMsIDEyOCwgOTAsIDcyLCA3OSwgMTI4LCA5MCwgNzIsIDg1LCAKLSAgICAxMjgsIDY1LCA3NiwgNzYsIDIwMSwgNjUsIDgzLCA3MiwgMTc4LCA2NSwgODgsIDY5LCAxMjgsIDY1LCA4OSwgNjYsIDEyOCwgCi0gICAgNjUsIDkwLCA4NSwgMTI4LCA2NiwgNjUsIDY1LCAxMjgsIDY2LCA2NSwgNjcsIDIwMywgNjYsIDY1LCA3OCwgMTc4LCA2NiwgCi0gICAgNjYsIDY5LCAxMjgsIDY2LCA2OSwgNzIsIDEyOCwgNjYsIDY5LCA4NCwgMTI4LCA2NiwgNzIsIDc5LCAxMjgsIDY2LCA3OSwgCi0gICAgNzYsIDIxMiwgNjYsIDgyLCA2OCwgMTkzLCA2NiwgODcsIDY1LCAxMjgsIDY3LCA2NSwgODQsIDEyOCwgNjcsIDczLCA4MCwgCi0gICAgMTI4LCA2NywgNzYsIDg1LCAxOTQsIDY3LCA3OSwgNzgsIDEyOCwgNjcsIDg1LCA2NiwgMTk3LCA2NywgODUsIDgwLCAxMjgsIAotICAgIDY3LCA4NywgNjksIDEyOCwgNjcsIDg3LCA3OSwgMTI4LCA2NywgODksIDgwLCAxMjgsIDY3LCA4OSwgODQsIDEyOCwgNjgsIAotICAgIDY1LCA3OCwgMTk5LCA2OCwgNjUsIDgyLCAxMjgsIDY4LCA2NSwgODQsIDE5NywgNjgsIDY4LCA2NSwgMjA0LCA2OCwgNjgsIAotICAgIDY5LCAxMjgsIDY4LCA2OCwgNzMsIDEyOCwgNjgsIDY4LCA4NSwgMTI4LCA2OCwgNjksIDczLCAxMjgsIDY4LCA3MywgNjYsIAotICAgIDEyOCwgNjgsIDc0LCA2NSwgMTI4LCA2OCwgNzYsIDY1LCAxMjgsIDY4LCA3OSwgNzEsIDEyOCwgNjgsIDgyLCA4NSwgMjA1LCAKLSAgICA2OCwgODUsIDc4LCAxMjgsIDY5LCA4MiwgODIsIDEyOCwgNjksIDg3LCA2OSwgMTI4LCA3MCwgNjksIDczLCAxMjgsIDcwLCAKLSAgICA3NiwgODksIDEyOCwgNzAsIDc5LCA3OSwgMTI4LCA3MCwgODUsIDgyLCAxMjgsIDcwLCA4NSwgODMsIDE5MywgNzAsIDg3LCAKLSAgICA2NSwgMTI4LCA3MSwgNjUsIDY4LCAxMjgsIDcxLCA2NSwgODksIDEyOCwgNzEsIDcyLCA3OSwgMTI4LCA3MSwgNzMsIDc3LCAKLSAgICAxMjgsIDcxLCA3MywgODIsIDE3OCwgNzEsIDc0LCA2OSwgMTI4LCA3MiwgNjUsIDgyLCAxOTYsIDcyLCA3NiwgNjUsIDEyOCwgCi0gICAgNzIsIDc3LCA3OSwgMTI4LCA3MiwgNzgsIDY1LCAxMjgsIDczLCA3NywgNzMsIDIwNiwgNzMsIDgzLCA3OSwgMjA2LCA3NCwgCi0gICAgNzQsIDY1LCAxMjgsIDc0LCA3NCwgNzMsIDEyOCwgNzQsIDc0LCA3OSwgMTI4LCA3NCwgNzQsIDg1LCAxMjgsIDc0LCA3NCwgCi0gICAgODksIDEyOCwgNzUsIDY1LCA1MCwgMTI4LCA3NSwgNjUsIDY2LCAxOTMsIDc1LCA2NSwgNzMsIDEyOCwgNzUsIDY5LCA3OCwgCi0gICAgMTI4LCA3NSwgNzIsIDY5LCAxMjgsIDc1LCA3MywgODQsIDEyOCwgNzUsIDc0LCA2OSwgMTI4LCA3NSwgODAsIDY1LCAxMjgsIAotICAgIDc1LCA4NSwgNzYsIDEyOCwgNzUsIDg2LCA2NSwgMTI4LCA3NSwgODcsIDc5LCAxMjgsIDc2LCA3MywgNjgsIDEyOCwgNzYsIAotICAgIDg3LCA2OSwgMTI4LCA3NiwgODcsIDczLCAxMjgsIDc2LCA4NywgNzksIDEyOCwgNzcsIDY1LCA2NSwgMTI4LCA3NywgNjYsIAotICAgIDY1LCAxMjgsIDc3LCA2OCwgODUsIDIwNiwgNzcsIDgwLCA2NSwgMTI4LCA3NywgODUsIDcxLCAxMjgsIDc3LCA4NywgNzksIAotICAgIDEyOCwgNzgsIDcxLCA2NSwgMjExLCA3OCwgNzMsIDY2LCAxMjgsIDc4LCA3NCwgNzMsIDEyOCwgNzgsIDc0LCA3OSwgMTI4LCAKLSAgICA3OCwgNzQsIDg1LCAxMjgsIDc4LCA4MiwgNjUsIDEyOCwgNzgsIDg3LCA2OSwgMTI4LCA3OCwgODksIDY5LCAxMjgsIDc5LCAKLSAgICA3MiwgNzcsIDEyOCwgNzksIDczLCA3NiwgMTI4LCA3OSwgNzUsIDg0LCAyMDcsIDc5LCA3OCwgNzgsIDEyOCwgNzksIDg0LCAKLSAgICA4NSwgMTI4LCA4MCwgNjUsIDY1LCAxMjgsIDgwLCA2NSwgODIsIDIxMiwgODAsIDY1LCA4NCwgMjAwLCA4MCwgNzIsIDg1LCAKLSAgICAyMTAsIDgwLCA3NiwgNjUsIDEyOCwgODAsIDc5LCA3NiwgMjAxLCA4MCwgODUsIDg0LCAxMjgsIDgwLCA4NywgNzksIDEyOCwgCi0gICAgODAsIDg5LCA4NCwgMTI4LCA4MSwgNjUsIDczLCAxMjgsIDgxLCA3MywgNzMsIDEyOCwgODEsIDc5LCA3MCwgMTI4LCA4MSwgCi0gICAgNzksIDg0LCAxMjgsIDgxLCA4NSwgNzksIDEyOCwgODEsIDg1LCA4NSwgMTI4LCA4MiwgNzEsIDg5LCAxOTMsIDgyLCA3OCwgCi0gICAgNjUsIDIwNSwgODIsIDc5LCA3OSwgMTI4LCA4MiwgODIsIDY5LCAyMDAsIDgyLCA4MiwgNzksIDEyOCwgODMsIDY5LCA3MiwgCi0gICAgMTI4LCA4MywgNzEsIDY1LCAxOTQsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDc5LCAxOTksIAotICAgIDgzLCA3MiwgODksIDEyOCwgODMsIDczLCA3MSwgMTI4LCA4MywgNzMsIDcxLCAxODAsIDgzLCA3MywgNzksIDIxMSwgODMsIAotICAgIDc0LCA2OSwgMTI4LCA4MywgNzksIDg1LCAxMjgsIDgzLCA4NywgNzMsIDEyOCwgODMsIDg3LCA3OSwgMTI4LCA4NCwgNjUsIAotICAgIDg0LCAxMjgsIDg0LCA2NSwgODYsIDEyOCwgODQsIDczLCA4MiwgMTI4LCA4NCwgNzQsIDY5LCAxMjgsIDg0LCA3NiwgNjUsIAotICAgIDEyOCwgODQsIDc2LCA3MywgMTI4LCA4NCwgNzYsIDg1LCAxMjgsIDg0LCA3OSwgODQsIDEyOCwgODQsIDgyLCA2OSwgMTk3LCAKLSAgICA4NCwgODQsIDczLCAxMjgsIDg0LCA4NSwgNzUsIDEyOCwgODQsIDg1LCA3NywgMTI4LCA4NCwgODcsIDczLCAxMjgsIDg1LCAKLSAgICA4MywgNjksIDE5NiwgODYsIDY5LCA4MCwgMTI4LCA4NiwgNjksIDg3LCAxMjgsIDg2LCA3OSwgODUsIDEyOCwgODYsIDg1LCAKLSAgICA4MiwgMTI4LCA4OCwgODYsIDY1LCAxMjgsIDg5LCA2NSwgNzQsIDEyOCwgODksIDY1LCA4MSwgMTI4LCA4OSwgNjUsIDkwLCAKLSAgICAxMjgsIDg5LCA2OSwgNjUsIDIxMCwgODksIDcwLCA2OSwgMjA2LCA4OSwgODcsIDY5LCAxMjgsIDg5LCA4NywgNzMsIDEyOCwgCi0gICAgODksIDg3LCA3OSwgMTI4LCA5MCwgNzMsIDY4LCAxOTMsIDkwLCA3OSwgNzksIDEyOCwgOTAsIDc5LCA4NCwgMTI4LCA5MCwgCi0gICAgOTAsIDY1LCAxMjgsIDkwLCA5MCwgNzMsIDEyOCwgOTAsIDkwLCA4NSwgMTI4LCA2NSwgNjUsIDc0LCAxMjgsIDY1LCA2NSwgCi0gICAgNzUsIDEyOCwgNjUsIDY1LCA3NywgMTI4LCA2NSwgNjUsIDg3LCAxMjgsIDY1LCA2NSwgODksIDEyOCwgNjUsIDY4LCA2NSwgCi0gICAgMjAzLCA2NSwgNjgsIDY5LCAxOTksIDY1LCA3NywgNjUsIDIxMCwgNjUsIDc3LCA2NiwgMTkzLCA2NSwgODIsIDY1LCAxOTYsIAotICAgIDY1LCA4MiwgNjcsIDIwMCwgNjUsIDg0LCA3OSwgMjA1LCA2NSwgODUsIDY5LCAxMjgsIDY1LCA4NywgNjksIDEyOCwgNjUsIAotICAgIDg5LCA2OSwgMjEwLCA2NiwgNDgsIDQ4LCAxNzcsIDY2LCA0OCwgNDgsIDE3OCwgNjYsIDQ4LCA0OCwgMTc5LCA2NiwgNDgsIAotICAgIDQ4LCAxODAsIDY2LCA0OCwgNDgsIDE4MSwgNjYsIDQ4LCA0OCwgMTgyLCA2NiwgNDgsIDQ4LCAxODMsIDY2LCA0OCwgNDgsIAotICAgIDE4NCwgNjYsIDQ4LCA0OCwgMTg1LCA2NiwgNDgsIDQ5LCAxNzYsIDY2LCA0OCwgNDksIDE3NywgNjYsIDQ4LCA0OSwgMTc4LCAKLSAgICA2NiwgNDgsIDQ5LCAxNzksIDY2LCA0OCwgNDksIDE4MCwgNjYsIDQ4LCA0OSwgMTgxLCA2NiwgNDgsIDQ5LCAxODIsIDY2LCAKLSAgICA0OCwgNDksIDE4MywgNjYsIDQ4LCA1MCwgMTc2LCA2NiwgNDgsIDUwLCAxNzcsIDY2LCA0OCwgNTAsIDE3OSwgNjYsIDQ4LCAKLSAgICA1MCwgMTgwLCA2NiwgNDgsIDUwLCAxODEsIDY2LCA0OCwgNTAsIDE4MiwgNjYsIDQ4LCA1MCwgMTgzLCA2NiwgNDgsIDUwLCAKLSAgICAxODQsIDY2LCA0OCwgNTAsIDE4NSwgNjYsIDQ4LCA1MSwgMTc2LCA2NiwgNDgsIDUxLCAxNzcsIDY2LCA0OCwgNTEsIDE3OCwgCi0gICAgNjYsIDQ4LCA1MSwgMTc5LCA2NiwgNDgsIDUxLCAxODIsIDY2LCA0OCwgNTEsIDE4MywgNjYsIDQ4LCA1MSwgMTg0LCA2NiwgCi0gICAgNDgsIDUxLCAxODUsIDY2LCA0OCwgNTIsIDE3NiwgNjYsIDQ4LCA1MiwgMTc3LCA2NiwgNDgsIDUyLCAxNzgsIDY2LCA0OCwgCi0gICAgNTIsIDE3OSwgNjYsIDQ4LCA1MiwgMTgwLCA2NiwgNDgsIDUyLCAxODEsIDY2LCA0OCwgNTIsIDE4MiwgNjYsIDQ4LCA1MiwgCi0gICAgMTg0LCA2NiwgNDgsIDUzLCAxNzYsIDY2LCA0OCwgNTMsIDE3NywgNjYsIDQ4LCA1MywgMTc4LCA2NiwgNDgsIDUzLCAxNzksIAotICAgIDY2LCA0OCwgNTMsIDE4MCwgNjYsIDQ4LCA1MywgMTgxLCA2NiwgNDgsIDUzLCAxODMsIDY2LCA0OCwgNTMsIDE4NCwgNjYsIAotICAgIDQ4LCA1MywgMTg1LCA2NiwgNDgsIDU0LCAxNzYsIDY2LCA0OCwgNTQsIDE3NywgNjYsIDQ4LCA1NCwgMTc4LCA2NiwgNDgsIAotICAgIDU0LCAxODEsIDY2LCA0OCwgNTQsIDE4MiwgNjYsIDQ4LCA1NCwgMTgzLCA2NiwgNDgsIDU0LCAxODQsIDY2LCA0OCwgNTQsIAotICAgIDE4NSwgNjYsIDQ4LCA1NSwgMTc2LCA2NiwgNDgsIDU1LCAxNzcsIDY2LCA0OCwgNTUsIDE3OCwgNjYsIDQ4LCA1NSwgMTc5LCAKLSAgICA2NiwgNDgsIDU1LCAxODAsIDY2LCA0OCwgNTUsIDE4MSwgNjYsIDQ4LCA1NSwgMTgyLCA2NiwgNDgsIDU1LCAxODMsIDY2LCAKLSAgICA0OCwgNTUsIDE4NCwgNjYsIDQ4LCA1NiwgMTc2LCA2NiwgNDgsIDU2LCAxNzcsIDY2LCA0OCwgNTYsIDE4MSwgNjYsIDQ4LCAKLSAgICA1NiwgMTgzLCA2NiwgNDgsIDU3LCAxNzYsIDY2LCA0OCwgNTcsIDE3NywgNjYsIDQ5LCA0OCwgMTc2LCA2NiwgNDksIDQ4LCAKLSAgICAxNzgsIDY2LCA0OSwgNDgsIDE4MCwgNjYsIDQ5LCA0OCwgMTgxLCA2NiwgNDksIDUwLCAxNzYsIDY2LCA0OSwgNTAsIDE3NywgCi0gICAgNjYsIDQ5LCA1MCwgMTc4LCA2NiwgNDksIDUwLCAxNzksIDY2LCA0OSwgNTAsIDE4MSwgNjYsIDQ5LCA1MCwgMTgzLCA2NiwgCi0gICAgNDksIDUwLCAxODQsIDY2LCA0OSwgNTEsIDE3NiwgNjYsIDQ5LCA1MSwgMTc3LCA2NiwgNDksIDUxLCAxNzksIDY2LCA0OSwgCi0gICAgNTEsIDE4MSwgNjYsIDQ5LCA1MiwgMTc2LCA2NiwgNDksIDUyLCAxNzcsIDY2LCA0OSwgNTIsIDE4MSwgNjYsIDQ5LCA1MywgCi0gICAgMTc3LCA2NiwgNDksIDUzLCAxODIsIDY2LCA0OSwgNTMsIDE4NSwgNjYsIDQ5LCA1NCwgMTc4LCA2NiwgNDksIDU0LCAxNzksIAotICAgIDY2LCA0OSwgNTUsIDE3OSwgNjYsIDQ5LCA1NSwgMTgyLCA2NiwgNDksIDU3LCAxNzcsIDY2LCA1MCwgNTAsIDE3NiwgNjYsIAotICAgIDUwLCA1MCwgMTgxLCA2NiwgNTAsIDUxLCAxNzYsIDY2LCA1MCwgNTEsIDE3NywgNjYsIDUwLCA1MSwgMTc5LCA2NiwgNTAsIAotICAgIDUyLCAxNzYsIDY2LCA1MCwgNTIsIDE3NywgNjYsIDUwLCA1MiwgMTc4LCA2NiwgNTAsIDUyLCAxNzksIDY2LCA1MCwgNTIsIAotICAgIDE4MywgNjYsIDUwLCA1MywgMTgwLCA2NiwgNjUsIDc4LCAyMDMsIDY2LCA2NiwgNzMsIDEyOCwgNjYsIDY2LCA3OSwgMTI4LCAKLSAgICA2NiwgNjYsIDg1LCAxMjgsIDY2LCA2NiwgODksIDEyOCwgNjYsIDY3LCA2NSwgMTk2LCA2NiwgNjksIDc2LCAyMDQsIDY2LCAKLSAgICA2OSwgNzYsIDIxMiwgNjYsIDY5LCA4NCwgMTkzLCA2NiwgNzIsIDY5LCAxMjgsIDY2LCA3MiwgNzMsIDEyOCwgNjYsIDcyLCAKLSAgICA4NSwgMTI4LCA2NiwgNzMsIDY2LCAxMjgsIDY2LCA3MywgNzEsIDEyOCwgNjYsIDc1LCA2NSwgMTczLCA2NiwgNzksIDY1LCAKLSAgICAxMjgsIDY2LCA4NSwgODIsIDIxMywgNjYsIDg3LCA2OSwgMTI4LCA2NiwgODcsIDczLCAxMjgsIDY2LCA4OCwgNzEsIDEyOCwgCi0gICAgNjcsIDY1LCA2OCwgMTkzLCA2NywgNjUsIDc4LCAxOTksIDY3LCA2NSwgODIsIDE5NywgNjcsIDY1LCA4OCwgMTI4LCA2NywgCi0gICAgNjcsIDY1LCAxMjgsIDY3LCA2NywgNjksIDEyOCwgNjcsIDY3LCA3MywgMTI4LCA2NywgNjcsIDc5LCAxMjgsIDY3LCA2NywgCi0gICAgODUsIDEyOCwgNjcsIDY5LCA2OCwgMjAxLCA2NywgNjksIDc4LCAxMjgsIDY3LCA2OSwgODAsIDEyOCwgNjcsIDY5LCA4OCwgCi0gICAgMTI4LCA2NywgNzIsIDY1LCAxOTYsIDY3LCA3MiwgNjksIDIwNiwgNjcsIDczLCA2OSwgMTI4LCA2NywgNzMsIDczLCAxMjgsIAotICAgIDY3LCA3MywgODQsIDEyOCwgNjcsIDczLCA4OCwgMTI4LCA2NywgNzksIDY1LCAxMjgsIDY3LCA3OSwgODAsIDEyOCwgNjcsIAotICAgIDc5LCA4NCwgMTI4LCA2NywgNzksIDg4LCAxMjgsIDY3LCA4NSwgNzksIDEyOCwgNjcsIDg1LCA4MiwgMTI4LCA2NywgODUsIAotICAgIDg0LCAxMjgsIDY3LCA4NSwgODgsIDEyOCwgNjcsIDg5LCA2NSwgMTI4LCA2NywgODksIDgyLCAxMjgsIDY3LCA4OSwgODgsIAotICAgIDEyOCwgNjgsIDY1LCA2OCwgMTI4LCA2OCwgNjUsIDY5LCAxOTksIDY4LCA2NSwgNzcsIDIwOCwgNjgsIDY1LCA4MiwgMjAzLCAKLSAgICA2OCwgNjksIDc1LCAxMjgsIDY4LCA2OSwgOTAsIDIwMCwgNjgsIDcyLCA3MywgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCAKLSAgICA3NiwgNzksIDEyOCwgNjgsIDc2LCA4NSwgMTI4LCA2OCwgODIsIDczLCAyMDQsIDY4LCA4MiwgODksIDEyOCwgNjgsIDg1LCAKLSAgICA3MiwgMTI4LCA2OCwgODUsIDc2LCAxMjgsIDY4LCA4NSwgNzcsIDEyOCwgNjgsIDg3LCA3OSwgMTI4LCA2OCwgODksIDc5LCAKLSAgICAxMjgsIDY4LCA5MCwgNzMsIDEyOCwgNjgsIDkwLCA3OSwgMTI4LCA2OCwgOTAsIDg1LCAxMjgsIDY5LCA2OCwgNjgsIDEyOCwgCi0gICAgNjksIDcxLCA3MSwgMTI4LCA2OSwgNzMsIDgzLCAxMjgsIDY5LCA3NSwgODMsIDEyOCwgNjksIDc4LCA3OCwgMTI4LCA2OSwgCi0gICAgNzgsIDc5LCAyMTEsIDY5LCA3OSwgNzIsIDEyOCwgNjksIDgyLCA3MSwgMTI4LCA2OSwgODMsIDcyLCAxNzgsIDY5LCA4NSwgCi0gICAgODIsIDIwNywgNjksIDg4LCA3OSwgMTI4LCA3MCwgNjUsIDc4LCAxMjgsIDcwLCA2NSwgODAsIDEyOCwgNzAsIDY1LCA4OCwgCi0gICAgMTI4LCA3MCwgNjksIDY5LCAxOTYsIDcwLCA2OSwgNzIsIDIxMywgNzAsIDY5LCA3OCwgMTk5LCA3MCwgNjksIDc5LCAyMDAsIAotICAgIDcwLCA3MCwgNzMsIDEyOCwgNzAsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIDczLCAxMjgsIDcwLCA3MywgNzYsIDE5NywgNzAsIAotICAgIDczLCA3NiwgMjA0LCA3MCwgNzMsIDgwLCAxMjgsIDcwLCA3MywgODQsIDEyOCwgNzAsIDczLCA4OCwgMTI4LCA3MCwgNzYsIAotICAgIDY1LCAxMjgsIDcwLCA3OSwgODAsIDEyOCwgNzAsIDc5LCA4OCwgMTI4LCA3MCwgODUsIDgwLCAxMjgsIDcwLCA4NSwgODQsIAotICAgIDEyOCwgNzAsIDg1LCA4OCwgMTI4LCA3MCwgODcsIDY5LCAxMjgsIDcwLCA4NywgNzMsIDEyOCwgNzAsIDg5LCA2NSwgMTI4LCAKLSAgICA3MCwgODksIDgwLCAxMjgsIDcwLCA4OSwgODQsIDEyOCwgNzAsIDg5LCA4OCwgMTI4LCA3MSwgNjUsIDY2LCAxOTMsIDcxLCAKLSAgICA2NSwgNzAsIDEyOCwgNzEsIDY1LCA3MSwgMTI4LCA3MSwgNjUsIDc3LCAxMjgsIDcxLCA2NywgNjUsIDIwNiwgNzEsIDY5LCAKLSAgICA2NiwgMTkzLCA3MSwgNjksIDY2LCAyMDcsIDcxLCA2OSwgODQsIDE5MywgNzEsIDcyLCA3MywgMTI4LCA3MSwgNzIsIDg1LCAKLSAgICAxMjgsIDcxLCA3MiwgOTAsIDEyOCwgNzEsIDczLCA4MCwgMTI4LCA3MSwgNzYsIDY1LCAxMjgsIDcxLCA3OSwgNjUsIDEyOCwgCi0gICAgNzEsIDgwLCA2NSwgMTI4LCA3MSwgODMsIDg1LCAyMDUsIDcxLCA4NSwgNzYsIDEyOCwgNzEsIDg1LCA3NywgMTI4LCA3MSwgCi0gICAgODksIDY1LCAxMjgsIDcxLCA4OSwgNjksIDEyOCwgNzEsIDg5LCA3MCwgMjEzLCA3MSwgODksIDczLCAxMjgsIDcxLCA4OSwgCi0gICAgNzksIDEyOCwgNzEsIDg5LCA4NSwgMTI4LCA3MiwgNjksIDc2LCAyMDUsIDcyLCA2OSwgNzgsIDE5OSwgNzIsIDc2LCA2OSwgCi0gICAgMTI4LCA3MiwgNzYsIDczLCAxMjgsIDcyLCA3NiwgNzksIDEyOCwgNzIsIDc2LCA4NSwgMTI4LCA3MiwgNzYsIDg5LCAxMjgsIAotICAgIDcyLCA3NywgNzMsIDEyOCwgNzIsIDc3LCA4NSwgMTI4LCA3MiwgNzcsIDg5LCAxMjgsIDcyLCA3OCwgNjksIDEyOCwgNzIsIAotICAgIDc4LCA3MywgMTI4LCA3MiwgODAsIDY1LCAxMjgsIDcyLCA4NSwgNzgsIDEyOCwgNzIsIDg3LCA4NSwgMTI4LCA3MiwgODgsIAotICAgIDY1LCAxMjgsIDcyLCA4OCwgNjksIDEyOCwgNzIsIDg4LCA3MywgMTI4LCA3MiwgODgsIDc5LCAxMjgsIDcyLCA5MCwgNzEsIAotICAgIDEyOCwgNzIsIDkwLCA4NCwgMTI4LCA3MiwgOTAsIDg3LCAxMjgsIDcyLCA5MCwgOTAsIDEyOCwgNzMsIDQ1LCA2NSwgMTI4LCAKLSAgICA3MywgNDUsIDc5LCAxMjgsIDczLCA3NiwgNTAsIDEyOCwgNzMsIDc5LCA4MiwgMTI4LCA3NCwgNjUsIDY1LCAxMjgsIDc0LCAKLSAgICA2NSwgODIsIDEyOCwgNzQsIDY5LCA3MiwgMTI4LCA3NCwgNjksIDgyLCAxMjgsIDc0LCA3MiwgNzksIDEyOCwgNzQsIDczLCAKLSAgICA2NSwgMTI4LCA3NCwgNzQsIDY5LCAxMjgsIDc0LCA3OSwgNjUsIDEyOCwgNzQsIDc5LCA4OSwgMTI4LCA3NCwgODcsIDY1LCAKLSAgICAxMjgsIDc1LCA2NSwgNjgsIDE3OSwgNzUsIDY1LCA2OCwgMTgxLCA3NSwgNjUsIDgwLCAxMjgsIDc1LCA2NSwgODUsIDIwNiwgCi0gICAgNzUsIDY1LCA4OCwgMTI4LCA3NSwgNjksIDgwLCAxMjgsIDc1LCA2OSwgODgsIDEyOCwgNzUsIDY5LCA4OSwgMTI4LCA3NSwgCi0gICAgNzIsIDc5LCAyMTIsIDc1LCA3MiwgOTAsIDEyOCwgNzUsIDczLCA2OSwgMTI4LCA3NSwgNzMsIDcyLCAxMjgsIDc1LCA3MywgCi0gICAgNzMsIDEyOCwgNzUsIDczLCA4MCwgMTI4LCA3NSwgNzMsIDg4LCAxMjgsIDc1LCA3NSwgNjksIDEyOCwgNzUsIDc1LCA3MywgCi0gICAgMTI4LCA3NSwgNzUsIDc5LCAxMjgsIDc1LCA3NSwgODUsIDEyOCwgNzUsIDc2LCA2NSwgMTI4LCA3NSwgNzksIDY1LCAxMjgsIAotICAgIDc1LCA3OSwgNzIsIDEyOCwgNzUsIDc5LCA4MCwgMTI4LCA3NSwgNzksIDg0LCAxMjgsIDc1LCA3OSwgODgsIDEyOCwgNzUsIAotICAgIDgwLCA2OSwgMTI4LCA3NSwgODAsIDczLCAxMjgsIDc1LCA4MCwgNzksIDEyOCwgNzUsIDgwLCA4NSwgMTI4LCA3NSwgODUsIAotICAgIDUyLCAxMjgsIDc1LCA4NSwgNTUsIDEyOCwgNzUsIDg1LCA3OSwgMTI4LCA3NSwgODUsIDgwLCAxMjgsIDc1LCA4NSwgODQsIAotICAgIDEyOCwgNzUsIDg1LCA4OCwgMTI4LCA3NSwgODgsIDY1LCAxMjgsIDc1LCA4OCwgNjksIDEyOCwgNzUsIDg4LCA3MywgMTI4LCAKLSAgICA3NSwgODgsIDc5LCAxMjgsIDc1LCA4OCwgODUsIDEyOCwgNzUsIDg5LCA2NSwgMTI4LCA3NSwgODksIDY5LCAxMjgsIDc1LCAKLSAgICA4OSwgNzMsIDEyOCwgNzUsIDg5LCA3OSwgMTI4LCA3NSwgODksIDg1LCAxMjgsIDc2LCA2NSwgNjksIDEyOCwgNzYsIDY1LCAKLSAgICA3MSwgMjEzLCA3NiwgNjUsIDgzLCAyMTIsIDc2LCA2NSwgODQsIDE5NywgNzYsIDY1LCA5MCwgMjE3LCA3NiwgNjgsIDUwLCAKLSAgICAxMjgsIDc2LCA2OSwgNzksIDEyOCwgNzYsIDcyLCA2NSwgMTk5LCA3NiwgNzMsIDczLCAxMjgsIDc2LCA3MywgNzYsIDEyOCwgCi0gICAgNzYsIDczLCA3OCwgMjAzLCA3NiwgNzMsIDgyLCAxOTMsIDc2LCA3OSwgNjUsIDEyOCwgNzYsIDc5LCA3MSwgMTI4LCA3NiwgCi0gICAgNzksIDcxLCAyMTAsIDc2LCA3OSwgODQsIDEyOCwgNzYsIDg1LCA1MSwgMTI4LCA3NiwgODUsIDcyLCAxMjgsIDc2LCA4OSwgCi0gICAgODksIDEyOCwgNzcsIDY1LCA1MCwgMTI4LCA3NywgNjUsIDcyLCAxMjgsIDc3LCA2NSwgODMsIDIxMywgNzcsIDY1LCA4OSwgCi0gICAgMTI4LCA3NywgNjYsIDUwLCAxMjgsIDc3LCA2NiwgNTEsIDEyOCwgNzcsIDY2LCA1MiwgMTI4LCA3NywgNjYsIDY5LCAxMjgsIAotICAgIDc3LCA2NiwgNzMsIDEyOCwgNzcsIDY2LCA3OSwgMTI4LCA3NywgNjYsIDg1LCAxMjgsIDc3LCA2NywgNzIsIDIxMywgNzcsIAotICAgIDY5LCA4NCwgMTkzLCA3NywgNjksIDg4LCAxMjgsIDc3LCA3MSwgNjUsIDEyOCwgNzcsIDcxLCA2OSwgMTI4LCA3NywgNzEsIAotICAgIDg1LCAxMjgsIDc3LCA3MiwgOTAsIDEyOCwgNzcsIDczLCA3MywgMTI4LCA3NywgNzMsIDc2LCAxMjgsIDc3LCA3MywgNzYsIAotICAgIDIwNCwgNzcsIDczLCA3NywgMTI4LCA3NywgNzksIDY1LCAxMjgsIDc3LCA3OSwgNzYsIDEyOCwgNzcsIDg1LCA2OSwgMTI4LCAKLSAgICA3NywgODksIDY1LCAxMjgsIDc3LCA4OSwgODQsIDEyOCwgNzgsIDY1LCA1MCwgMTI4LCA3OCwgNjUsIDcxLCAxMjgsIDc4LCAKLSAgICA2NSwgNzcsIDEyOCwgNzgsIDY1LCA3OSwgMjExLCA3OCwgNjYsIDY1LCAxMjgsIDc4LCA2NiwgNzMsIDEyOCwgNzgsIDY2LCAKLSAgICA3OSwgMTI4LCA3OCwgNjYsIDg1LCAxMjgsIDc4LCA2NiwgODksIDEyOCwgNzgsIDY5LCA4NCwgMTI4LCA3OCwgNjksIDg4LCAKLSAgICAyMTIsIDc4LCA3MSwgNzEsIDEyOCwgNzgsIDcyLCA2NSwgMTI4LCA3OCwgNzMsIDUwLCAxMjgsIDc4LCA3MywgNzcsIDEyOCwgCi0gICAgNzgsIDc0LCA4OSwgMTI4LCA3OCwgNzgsIDcxLCAxMjgsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc5LCA2NSwgMTI4LCA3OCwgCi0gICAgODIsIDY5LCAxMjgsIDc4LCA4MiwgNzksIDEyOCwgNzgsIDgyLCA4NSwgMTI4LCA3OCwgODIsIDg5LCAxMjgsIDc4LCA4NSwgCi0gICAgNjksIDEyOCwgNzgsIDg1LCA3NiwgMjA0LCA3OCwgODUsIDc3LCAxMjgsIDc4LCA4NSwgODAsIDEyOCwgNzgsIDg1LCA4MiwgCi0gICAgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4OSwgNjksIDIxMiwgNzgsIDkwLCA2NSwgMTI4LCA3OCwgOTAsIDczLCAxMjgsIAotICAgIDc4LCA5MCwgODUsIDEyOCwgNzgsIDkwLCA4OSwgMTI4LCA3OSwgNDUsIDY5LCAxMjgsIDc5LCA2NSwgNzUsIDEyOCwgNzksIAotICAgIDY1LCA4OSwgMTI4LCA3OSwgNjYsIDc5LCAyMDQsIDc5LCA4NCwgODQsIDEyOCwgODAsIDY1LCA2OCwgMTI4LCA4MCwgNjUsIAotICAgIDc2LCAyMDUsIDgwLCA2NSwgODQsIDEyOCwgODAsIDY1LCA4OCwgMTI4LCA4MCwgNzMsIDY5LCAxMjgsIDgwLCA3MywgNzEsIAotICAgIDEyOCwgODAsIDczLCA4MCwgMTI4LCA4MCwgNzMsIDg0LCAxMjgsIDgwLCA3MywgODgsIDEyOCwgODAsIDc5LCA2NSwgMTI4LCAKLSAgICA4MCwgNzksIDgwLCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgODAsIDgwLCA3NywgMTI4LCA4MCwgODUsIDUwLCAxMjgsIDgwLCAKLSAgICA4NSwgNzksIDEyOCwgODAsIDg1LCA4MCwgMTI4LCA4MCwgODUsIDgyLCAxMjgsIDgwLCA4NSwgODgsIDEyOCwgODAsIDg5LCAKLSAgICA4MCwgMTI4LCA4MCwgODksIDgyLCAxMjgsIDgwLCA4OSwgODgsIDEyOCwgODEsIDY1LCA3NiwgMTkzLCA4MSwgNjUsIDgxLCAKLSAgICAxMjgsIDgxLCA2NSwgODUsIDEyOCwgODEsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDY1LCAxMjgsIDgxLCA3MiwgNjksIDEyOCwgCi0gICAgODEsIDcyLCA3MywgMTI4LCA4MSwgNzIsIDc5LCAxMjgsIDgxLCA3MiwgODUsIDEyOCwgODEsIDczLCA2OSwgMTI4LCA4MSwgCi0gICAgNzMsIDgwLCAxMjgsIDgxLCA3MywgODQsIDEyOCwgODEsIDczLCA4OCwgMTI4LCA4MSwgNzksIDY1LCAxMjgsIDgxLCA3OSwgCi0gICAgNzksIDEyOCwgODEsIDc5LCA4MCwgMTI4LCA4MSwgNzksIDg4LCAxMjgsIDgxLCA4NSwgNjUsIDEyOCwgODEsIDg1LCA2OSwgCi0gICAgMTI4LCA4MSwgODUsIDczLCAxMjgsIDgxLCA4NSwgNzUsIDEyOCwgODEsIDg1LCA4MCwgMTI4LCA4MSwgODUsIDgyLCAxMjgsIAotICAgIDgxLCA4NSwgODQsIDEyOCwgODEsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg4LCAxMjgsIDgxLCA4NywgNjUsIDEyOCwgODEsIAotICAgIDg3LCA2OSwgMTI4LCA4MSwgODcsIDczLCAxMjgsIDgxLCA4OSwgNjUsIDEyOCwgODEsIDg5LCA2OSwgMTI4LCA4MSwgODksIAotICAgIDczLCAxMjgsIDgxLCA4OSwgNzksIDEyOCwgODEsIDg5LCA4MCwgMTI4LCA4MSwgODksIDgyLCAxMjgsIDgxLCA4OSwgODQsIAotICAgIDEyOCwgODEsIDg5LCA4NSwgMTI4LCA4MSwgODksIDg4LCAxMjgsIDgyLCA2NSwgNjYsIDEyOCwgODIsIDY1LCA2OCwgMjAxLCAKLSAgICA4MiwgNjUsIDczLCAyMDYsIDgyLCA2NSwgNzcsIDIxMSwgODIsIDY5LCA3MywgMTk2LCA4MiwgNzMsIDgwLCAxMjgsIDgyLCAKLSAgICA3NCwgNjksIDEyOCwgODIsIDc0LCA2OSwgMjExLCA4MiwgNzksIDY1LCAxMjgsIDgyLCA4MiwgNjksIDEyOCwgODIsIDgyLCAKLSAgICA4NSwgMTI4LCA4MiwgODIsIDg5LCAxMjgsIDgyLCA4NSwgNjUsIDEyOCwgODIsIDg3LCA2NSwgMTI4LCA4MiwgODksIDY1LCAKLSAgICAxMjgsIDgyLCA4OSwgODksIDEyOCwgODMsIDQ1LCA4NywgMTI4LCA4MywgNjUsIDg3LCAxMjgsIDgzLCA2NSwgODksIDEyOCwgCi0gICAgODMsIDY2LCA4NSwgMTk0LCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgODIsIDE5MywgODMsIDcyLCA4NSwgMTc4LCA4MywgCi0gICAgNzMsIDczLCAxMjgsIDgzLCA3MywgNzUsIDE3OCwgODMsIDczLCA3OCwgMTk3LCA4MywgNzUsIDg3LCAxMjgsIDgzLCA3OCwgCi0gICAgNjUsIDIwOCwgODMsIDc5LCA2NSwgMTI4LCA4MywgNzksIDg3LCAxMjgsIDgzLCA4MywgODksIDEyOCwgODMsIDg0LCA1MCwgCi0gICAgMTI4LCA4MywgODUsIDY1LCAxMjgsIDgzLCA4NSwgNjgsIDEyOCwgODMsIDg1LCA3NSwgMjEzLCA4MywgODUsIDc5LCAxMjgsIAotICAgIDgzLCA4NywgNzEsIDEyOCwgODMsIDg3LCA5MCwgMTI4LCA4MywgODksIDY1LCAxMjgsIDgzLCA5MCwgNjUsIDEyOCwgODMsIAotICAgIDkwLCA2OSwgMTI4LCA4MywgOTAsIDczLCAxMjgsIDgzLCA5MCwgNzksIDEyOCwgODMsIDkwLCA4NSwgMTI4LCA4MywgOTAsIAotICAgIDkwLCAxMjgsIDg0LCA2NSwgNTAsIDEyOCwgODQsIDY1LCA3NiwgMjA0LCA4NCwgNjUsIDc5LCAxMjgsIDg0LCA2NSwgODAsIAotICAgIDEyOCwgODQsIDY1LCA4MCwgMTk3LCA4NCwgNjUsIDg3LCAxMjgsIDg0LCA2NSwgODgsIDEyOCwgODQsIDY5LCA3OCwgMjEzLCAKLSAgICA4NCwgNjksIDgzLCAyMDAsIDg0LCA2OSwgODQsIDIwMCwgODQsIDY5LCA4OCwgMTI4LCA4NCwgNzIsIDY5LCAyMTEsIDg0LCAKLSAgICA3MiwgNzMsIDIwNiwgODQsIDcyLCA5MCwgMTI4LCA4NCwgNzMsIDczLCAxMjgsIDg0LCA3MywgNzYsIDEyOCwgODQsIDczLCAKLSAgICA4MCwgMTI4LCA4NCwgNzMsIDg0LCAxMjgsIDg0LCA3MywgODgsIDEyOCwgODQsIDc2LCA4NiwgMTI4LCA4NCwgNzksIDY1LCAKLSAgICAxMjgsIDg0LCA3OSwgODgsIDEyOCwgODQsIDgyLCA3MywgMTI4LCA4NCwgODMsIDg2LCAxMjgsIDg0LCA4NCwgNTAsIDEyOCwgCi0gICAgODQsIDg0LCA3MiwgMTI4LCA4NCwgODQsIDg1LCAxMjgsIDg0LCA4NSwgNzksIDEyOCwgODQsIDg1LCA4MCwgMTI4LCA4NCwgCi0gICAgODUsIDg0LCAxMjgsIDg0LCA4NSwgODgsIDEyOCwgODQsIDg5LCA2NSwgMTI4LCA4NCwgODksIDY5LCAxMjgsIDg0LCA4OSwgCi0gICAgNzMsIDEyOCwgODQsIDg5LCA3OSwgMTI4LCA4NCwgOTAsIDY1LCAxMjgsIDg0LCA5MCwgNjksIDEyOCwgODQsIDkwLCA3MywgCi0gICAgMTI4LCA4NCwgOTAsIDczLCAyMTAsIDg0LCA5MCwgNzksIDEyOCwgODQsIDkwLCA4NSwgMTI4LCA4NSwgNjksIDY5LCAxMjgsIAotICAgIDg1LCA2OSwgODksIDEyOCwgODUsIDc4LCA2OCwgMjA3LCA4NSwgODIsIDUyLCAxMjgsIDg1LCA4MiwgNzMsIDEyOCwgODUsIAotICAgIDgyLCA4NSwgMjE4LCA4NSwgOTAsIDUxLCAxMjgsIDg1LCA5MCwgODUsIDEyOCwgODYsIDY1LCA2NSwgMTI4LCA4NiwgNjUsIAotICAgIDgwLCAxMjgsIDg2LCA2NSwgODQsIDEyOCwgODYsIDY1LCA4OCwgMTI4LCA4NiwgNjksIDcyLCAxMjgsIDg2LCA2OSwgODgsIAotICAgIDEyOCwgODYsIDczLCA2OSwgMTI4LCA4NiwgNzMsIDgwLCAxMjgsIDg2LCA3MywgODQsIDEyOCwgODYsIDczLCA4OCwgMTI4LCAKLSAgICA4NiwgNzksIDczLCAxOTYsIDg2LCA3OSwgNzksIDEyOCwgODYsIDc5LCA4MCwgMTI4LCA4NiwgNzksIDg0LCAxMjgsIDg2LCAKLSAgICA3OSwgODcsIDEyOCwgODYsIDc5LCA4OCwgMTI4LCA4NiwgODUsIDgwLCAxMjgsIDg2LCA4NSwgODQsIDEyOCwgODYsIDg1LCAKLSAgICA4OCwgMTI4LCA4NiwgODcsIDY1LCAxMjgsIDg2LCA4OSwgODAsIDEyOCwgODYsIDg5LCA4MiwgMTI4LCA4NiwgODksIDg0LCAKLSAgICAxMjgsIDg2LCA4OSwgODgsIDEyOCwgODcsIDY1LCA3OCwgMTI4LCA4NywgNjUsIDgwLCAxMjgsIDg3LCA2NSwgODQsIDEyOCwgCi0gICAgODcsIDY1LCA4OCwgMTI4LCA4NywgNjksIDc4LCAxMjgsIDg3LCA2OSwgODAsIDEyOCwgODcsIDY5LCA4OCwgMTI4LCA4NywgCi0gICAgNzMsIDc4LCAxMjgsIDg3LCA3OSwgNjUsIDEyOCwgODcsIDc5LCA2OSwgMTI4LCA4NywgNzksIDc4LCAxMjgsIDg3LCA3OSwgCi0gICAgODAsIDEyOCwgODcsIDc5LCA4MiwgMjAzLCA4NywgNzksIDg4LCAxMjgsIDg3LCA4NSwgNzgsIDEyOCwgODcsIDg1LCA3OSwgCi0gICAgMTI4LCA4NywgODksIDc4LCAyMDYsIDg4LCA3OSwgNjUsIDEyOCwgODgsIDc5LCA4MiwgMTI4LCA4OCwgODksIDY1LCAxMjgsIAotICAgIDg4LCA4OSwgNjksIDEyOCwgODgsIDg5LCA3MywgMTI4LCA4OCwgODksIDc5LCAxMjgsIDg4LCA4OSwgODAsIDEyOCwgODgsIAotICAgIDg5LCA4MiwgMTI4LCA4OCwgODksIDg0LCAxMjgsIDg4LCA4OSwgODUsIDEyOCwgODgsIDg5LCA4OCwgMTI4LCA4OSwgNjUsIAotICAgIDY2LCAxMjgsIDg5LCA2NSwgNjgsIDEyOCwgODksIDY1LCA3MCwgMTI4LCA4OSwgNjUsIDcxLCAxMjgsIDg5LCA2NSwgNzcsIAotICAgIDEyOCwgODksIDY1LCA4MCwgMTI4LCA4OSwgNjUsIDg2LCAxMjgsIDg5LCA2NSwgODcsIDEyOCwgODksIDY1LCA4OSwgMTI4LCAKLSAgICA4OSwgNjksIDY1LCAxMjgsIDg5LCA2OSwgODcsIDEyOCwgODksIDY5LCA4OSwgMTI4LCA4OSwgNzMsIDczLCAxMjgsIDg5LCAKLSAgICA4NSwgNjgsIDIwMCwgODksIDg1LCA4MiwgMTI4LCA4OSwgODksIDgwLCAxMjgsIDg5LCA4OSwgODIsIDEyOCwgODksIDg5LCAKLSAgICA4NCwgMTI4LCA4OSwgODksIDg4LCAxMjgsIDkwLCA2NSwgNzEsIDEyOCwgOTAsIDY1LCA3MiwgMTI4LCA5MCwgNjUsIDczLCAKLSAgICAxMjgsIDkwLCA2OSwgNTAsIDEyOCwgOTAsIDcyLCA4OSwgMTI4LCA5MCwgNzMsIDUxLCAxMjgsIDkwLCA3MywgNjYsIDEyOCwgCi0gICAgOTAsIDczLCA3MSwgMTI4LCA5MCwgNzYsIDY1LCAxMjgsIDkwLCA4MiwgNjUsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgCi0gICAgODUsIDc3LCAxMjgsIDkwLCA4NSwgODQsIDEyOCwgOTAsIDkwLCA4OSwgMTI4LCA3MSwgNjUsIDE3OCwgNzUsIDY1LCAxOTgsIAotICAgIDY2LCA2OSwgMjAwLCA2OCwgNjUsIDIxNywgODQsIDcyLCAxOTcsIDcwLCA2OSwgMjAwLCA3NiwgODUsIDE3OCwgNjgsIDY1LCAKLSAgICAxOTYsIDY4LCA2NSwgMTk5LCA4MywgNjUsIDE5NiwgODQsIDY1LCAyMDAsIDgzLCA2NSwgMTk5LCA2OSwgNzgsIDE5NiwgODEsIAotICAgIDY1LCAxOTgsIDgyLCA3OSwgMTk2LCA2NSwgNjYsIDE3OCwgODMsIDczLCAyMTYsIDc4LCA4NSwgMjA2LCA2NSwgODIsIDE5NSwgCi0gICAgNzMsIDcxLCAyMDEsIDc4LCA3OSwgMjEwLCA2NiwgNzMsIDE5OSwgODAsIDg3LCAyMDcsIDg0LCA2OSwgMjA2LCA4NywgNjUsIAotICAgIDIxNSwgODksIDczLCAxOTksIDc2LCA2OSwgMjAzLCA3NywgNzEsIDIwNywgNzksIDY3LCAyMTAsIDgzLCA3MiwgMTk3LCA3MSwgCi0gICAgNzIsIDE5NywgODIsIDcyLCAyMDcsIDY3LCA3MiwgMTk3LCA2NSwgODIsIDIwNSwgNjYsIDg1LCAyMTIsIDY3LCA4NSwgMjA1LCAKLSAgICA3MSwgNjUsIDE5NiwgNzgsIDY5LCAyMDcsIDg0LCA3MywgMjA4LCA4NSwgODIsIDE3OCwgNzEsIDY1LCAxOTgsIDc1LCA3MiwgCi0gICAgMjA3LCA5MCwgNjUsIDIwMCwgNjgsIDczLCAxOTcsIDgwLCA3MiwgMjAxLCA5MCwgNzIsIDE5NywgNzEsIDg1LCAxNzgsIDcxLCAKLSAgICA4NSwgMTk2LCA4MCwgNzIsIDIwNywgODEsIDczLCAxMjgsIDgxLCA4NSwgMTI4LCA4NCwgNjUsIDE5NCwgODQsIDczLCAyMTAsIAotICAgIDY3LCA3MiwgMjA3LCA3MCwgNzksIDEyOCwgNzUsIDY1LCAyMDEsIDc3LCA2OSwgMjA2LCA3NywgNzMsIDE5NiwgNzgsIDY1LCAKLSAgICAxOTksIDc4LCA2OSwgMjEyLCA3OSwgNjgsIDE5NiwgODAsIDY5LCAyMDAsIDgxLCA3OSwgMTI4LCA4NiwgNjksIDIwMCwgODksIAotICAgIDc5LCAxOTYsIDY2LCA2NSwgMTk5LCA2NiwgNjksIDIxMiwgNjgsIDg5LCAyMDcsIDcxLCA3MywgMTgwLCA3MiwgNjUsIDE5MywgCi0gICAgNzUsIDc1LCAxMjgsIDc2LCA2NSwgMjA0LCA3NiwgODUsIDIwNSwgODEsIDY5LCAxMjgsIDgzLCA3MywgMjA2LCA4NSwgNzYsIAotICAgIDIxMywgODYsIDY1LCAyMTQsIDQ1LCA4NSwgMjA1LCA2NiwgODUsIDIxMCwgNjcsIDcyLCAyMDEsIDY4LCA2NSwgMjA4LCA2OCwgCi0gICAgODUsIDIwNCwgNjgsIDkwLCAxMjgsIDY5LCA4OCwgMjA3LCA3MSwgODIsIDIxMywgNzEsIDg1LCAxOTksIDcyLCA3MSwgMTI4LCAKLSAgICA3MiwgODAsIDEyOCwgNzIsIDg2LCAxMjgsIDczLCA3NCwgMTI4LCA3MywgODUsIDEyOCwgNzMsIDg5LCAxMjgsIDc0LCA2OSwgCi0gICAgMjAwLCA3NCwgNzksIDIxMiwgNzUsIDY1LCAyMDMsIDc1LCA2OSwgMjE3LCA3NSwgNzEsIDEyOCwgNzUsIDg1LCAyMDQsIDc2LCAKLSAgICA3NCwgMTI4LCA3NywgNzMsIDE5OSwgNzcsIDc3LCAxMjgsIDc4LCA3MywgMjA1LCA3OCwgNzQsIDEyOCwgNzgsIDg2LCAxMjgsIAotICAgIDc4LCA4OSwgMjAxLCA3OSwgNzIsIDIwNSwgNzksIDg2LCAxMjgsIDgwLCA2NSwgMjE1LCA4MSwgNzksIDIwNywgODIsIDY4LCAKLSAgICAyMDcsIDgzLCA3MiwgMjEzLCA4MywgODUsIDIwNiwgODMsIDg3LCAxMjgsIDg0LCA5MCwgMTI4LCA4NywgNzksIDIwNiwgODksIAotICAgIDY5LCAyMDYsIDg5LCA4NSwgMjExLCA2NSwgNzgsIDIwNywgNjYsIDY1LCAyMDQsIDY2LCA2OSwgMjA2LCA2NiwgNzksIDIxNSwgCi0gICAgNjYsIDgxLCAxMjgsIDY3LCA3NywgMTI4LCA2NywgODUsIDIxMiwgNjgsIDczLCAyMDYsIDY4LCA3NiwgMTI4LCA2OCwgNzcsIAotICAgIDEyOCwgNjgsIDgyLCAyMTcsIDY4LCA4NSwgMTk0LCA2OCwgODYsIDEyOCwgNjksIDY3LCAyMDAsIDcwLCA3NywgMTI4LCA3MCwgCi0gICAgODksIDEyOCwgNzEsIDY2LCAxMjgsIDcxLCA4NSwgMjA1LCA3MSwgODYsIDEyOCwgNzEsIDg5LCAxMjgsIDcyLCA3NSwgMTI4LCAKLSAgICA3MywgODMsIDIxMSwgNzUsIDY1LCAxNzgsIDc1LCA2NiwgMTI4LCA3NSwgNzMsIDE5NiwgNzUsIDczLCAyMDgsIDc1LCA3NiwgCi0gICAgMTI4LCA3NSwgNzcsIDEyOCwgNzUsIDg0LCAxMjgsIDc1LCA4NSwgMTc5LCA3NSwgODUsIDE4MCwgNzUsIDg2LCAxMjgsIDc2LCAKLSAgICA2NSwgMjE1LCA3NiwgNjcsIDE5NywgNzYsIDY3LCAyMDEsIDc2LCA3MiwgMTI4LCA3NiwgNzgsIDEyOCwgNzYsIDg4LCAxMjgsIAotICAgIDc3LCA2OSwgMjA1LCA3NywgNzEsIDEyOCwgNzcsIDcyLCAxMjgsIDc3LCA4MywgMTI4LCA3NywgODUsIDE5OSwgNzcsIDg2LCAKLSAgICAxMjgsIDc3LCA4NywgMTI4LCA3OCwgNjUsIDE5MywgNzgsIDcwLCAxMjgsIDc4LCA3MSwgMjA3LCA3OCwgNzIsIDEyOCwgNzgsIAotICAgIDc3LCAxMjgsIDc4LCA4NywgMTI4LCA3OCwgODksIDE5NiwgNzksIDY2LCAxMjgsIDgwLCA1MCwgMTI4LCA4MCwgNjUsIDIwOCwgCi0gICAgODAsIDY3LCAxMjgsIDgwLCA2OCwgMTI4LCA4MCwgNjksIDIxMSwgODAsIDcwLCAxMjgsIDgwLCA3MSwgMTI4LCA4MCwgNzksIAotICAgIDIwOCwgODAsIDgyLCAxMjgsIDgwLCA4NiwgMTI4LCA4MCwgODcsIDEyOCwgODAsIDkwLCAxMjgsIDgxLCA3OSwgMTk4LCA4MSwgCi0gICAgODksIDEyOCwgODIsIDczLCAyMDYsIDgyLCA3NCwgMTk3LCA4MiwgODUsIDE5NCwgODMsIDcxLCAxMjgsIDgzLCA3OCwgMTkzLCAKLSAgICA4MywgNzksIDE5OCwgODMsIDgwLCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODUsIDIxMCwgODMsIDkwLCAxMjgsIDg0LCA2NSwgCi0gICAgMjEzLCA4NCwgNjUsIDIxNCwgODQsIDY5LCAxOTcsIDg0LCA2OSwgMjEyLCA4NCwgNzgsIDEyOCwgODQsIDgyLCAxMjgsIDg1LCAKLSAgICA5MCwgMTc5LCA4NiwgNjksIDE5NywgODYsIDY5LCAyMTUsIDg3LCA2NiwgMTI4LCA4NywgODYsIDEyOCwgODgsIDg5LCAxMjgsIAotICAgIDg5LCA2NSwgMjEwLCA4OSwgODYsIDEyOCwgOTAsIDY1LCAyMDQsIDkwLCA3MywgMTk0LCA5MCwgNzYsIDE5MywgOTAsIDg1LCAKLSAgICAxODEsIDY2LCAyMTcsIDY1LCAxOTcsIDY5LCAxNzgsIDg5LCAyMTMsIDY2LCAyMDEsIDY4LCAyMTgsIDkwLCAxOTcsIDY4LCAKLSAgICAyMTMsIDc1LCAyMDUsIDY3LCAyMDUsIDY4LCAyMDUsIDc3LCAyMDUsIDY3LCAxOTMsIDY4LCAxOTQsIDc2LCAyMTgsIDc3LCAKLSAgICAxOTQsIDc3LCAyMDcsIDc3LCAyMTQsIDc3LCAyMTUsIDgwLCAyMDcsIDgxLCAyMDgsIDg0LCAxOTUsIDkwLCAyMDEsIDIwMiwgCi0gICAgMjA5LCAKKyAgICA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIAorICAgIDUxLCA1NywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDU2LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgCisgICAgNzYsIDQ1LCA1MSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgODksIDc3LCAKKyAgICA2NiwgNzksIDc2LCA0NSwgNTEsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIAorICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTcsIDEyOCwgCisgICAgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIAorICAgIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCisgICAgNDUsIDUwLCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCAKKyAgICA3OSwgNzYsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA0OSwgMTI4LCA4MywgODksIAorICAgIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgMTI4LCA4MywgCisgICAgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTYsIAorICAgIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgCisgICAgNDksIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCAKKyAgICA3NiwgNDUsIDQ5LCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDUxLCAxMjgsIDgzLCA4OSwgNzcsIAorICAgIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgCisgICAgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgMTI4LCAKKyAgICA4MywgODksIDc2LCA3OSwgODQsIDIwMSwgODMsIDg5LCA2NSwgMTI4LCA4MywgODksIDEyOCwgODMsIDg3LCA5MCwgMTI4LCAKKyAgICA4MywgODcsIDg1LCA3OCwgMTk5LCA4MywgODcsIDc5LCA4MiwgNjgsIDgzLCAxMjgsIDgzLCA4NywgNzksIDgyLCA2OCwgCisgICAgMTI4LCA4MywgODcsIDc5LCA3OSwgMTI4LCA4MywgODcsIDc5LCAxMjgsIDgzLCA4NywgNzMsIDczLCAxMjgsIDgzLCA4NywgCisgICAgNzMsIDEyOCwgODMsIDg3LCA3MSwgMTI4LCA4MywgODcsIDY5LCA2OSwgODQsIDEyOCwgODMsIDg3LCA2NSwgODMsIDIwMCwgCisgICAgODMsIDg3LCA2NSwgODAsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NywgNjUsIDY1LCAxMjgsIDgzLCA4NywgMTI4LCAKKyAgICA4MywgODYsIDY1LCA4MywgODQsIDIwMSwgODMsIDg2LCA2NSwgODIsIDczLCA4NCwgNjUsIDEyOCwgODMsIDg2LCA2NSwgODIsIAorICAgIDczLCA4NCwgMTkzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4NSwgODUsIDEyOCwgODMsIDg1LCA4NCwgMTI4LCA4MywgODUsIAorICAgIDgzLCA4MCwgNjksIDc4LCA4MywgNzMsIDc5LCAyMDYsIDgzLCA4NSwgODIsIDg4LCAxMjgsIDgzLCA4NSwgODIsIDgyLCA3OSwgCisgICAgODUsIDc4LCA2OCwgMTI4LCA4MywgODUsIDgyLCA4MiwgNzksIDg1LCA3OCwgMTk2LCA4MywgODUsIDgyLCA3MCwgNjUsIDY3LCAKKyAgICAxOTcsIDgzLCA4NSwgODIsIDY5LCAxMjgsIDgzLCA4NSwgODIsIDY1LCA3OCwgNzEsIDEyOCwgODMsIDg1LCA4MiwgNTcsIAorICAgIDEyOCwgODMsIDg1LCA4MiwgMTI4LCA4MywgODUsIDIxMCwgODMsIDg1LCA4MCwgODIsIDY1LCA3NiwgNzMsIDc4LCA2OSwgCisgICAgNjUsIDIxMCwgODMsIDg1LCA4MCwgNjksIDgyLCA4NiwgNzMsIDgzLCA2OSwgMTI4LCA4MywgODUsIDgwLCA2OSwgODIsIDgzLCAKKyAgICA2OSwgODQsIDEyOCwgODMsIDg1LCA4MCwgNjksIDgyLCA4MywgNjksIDIxMiwgODMsIDg1LCA4MCwgNjksIDgyLCA4MywgNjcsIAorICAgIDgyLCA3MywgODAsIDIxMiwgODMsIDg1LCA4MCwgNjksIDgyLCA3MywgNzcsIDgwLCA3OSwgODMsIDY5LCAxOTYsIDgzLCA4NSwgCisgICAgODAsIDY5LCA4MiwgNzAsIDczLCA4OCwgNjksIDE5NiwgODMsIDg1LCA4MCwgMTI4LCA4MywgODUsIDc5LCA4OCwgMTI4LCAKKyAgICA4MywgODUsIDc5LCA4MCwgMTI4LCA4MywgODUsIDc5LCAxMjgsIDgzLCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA4NSwgNzgsIAorICAgIDY4LCA2NSwgNzgsIDY5LCA4MywgMTk3LCA4MywgODUsIDc4LCAxMjgsIDgzLCA4NSwgMjA2LCA4MywgODUsIDc3LCA3NywgCisgICAgNjksIDgyLCAxMjgsIDgzLCA4NSwgNzcsIDc3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg1LCA3NywgNzcsIDY1LCAKKyAgICA4NCwgNzMsIDc5LCAyMDYsIDgzLCA4NSwgNzcsIDY1LCA4MywgNzIsIDEyOCwgODMsIDg1LCA3NywgMTI4LCA4MywgODUsIAorICAgIDc1LCA4NSwgNzgsIDEyOCwgODMsIDg1LCA3NSwgODUsIDIwNiwgODMsIDg1LCA3NSwgODUsIDEyOCwgODMsIDg1LCA3NSwgCisgICAgMjEzLCA4MywgODUsIDczLCA4NCwgNjUsIDY2LCA3NiwgNjksIDEyOCwgODMsIDg1LCA3MywgODQsIDEyOCwgODMsIDg1LCAKKyAgICA3MiwgODUsIDgyLCAxMjgsIDgzLCA4NSwgNjgsIDUwLCAxMjgsIDgzLCA4NSwgNjgsIDEyOCwgODMsIDg1LCA2NywgNjcsIAorICAgIDY5LCA2OSwgNjgsIDgzLCAxMjgsIDgzLCA4NSwgNjcsIDY3LCA2OSwgNjksIDY4LCAyMTEsIDgzLCA4NSwgNjcsIDY3LCA2OSwgCisgICAgNjksIDY4LCAxMjgsIDgzLCA4NSwgNjcsIDY3LCA2OSwgNjksIDE5NiwgODMsIDg1LCA2NiwgODUsIDc4LCA3MywgODQsIAorICAgIDEyOCwgODMsIDg1LCA2NiwgODMsIDg0LCA3MywgODQsIDg1LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA4NSwgNjYsIDgzLCA4NCwgCisgICAgNzMsIDg0LCA4NSwgODQsIDY5LCAxMjgsIDgzLCA4NSwgNjYsIDgzLCA4NCwgNzMsIDg0LCA4NSwgODQsIDE5NywgODMsIDg1LCAKKyAgICA2NiwgODMsIDY5LCA4NCwgMTI4LCA4MywgODUsIDY2LCA4MywgNjksIDIxMiwgODMsIDg1LCA2NiwgODMsIDY3LCA4MiwgNzMsIAorICAgIDgwLCAyMTIsIDgzLCA4NSwgNjYsIDgwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDgzLCAxMjgsIDgzLCA4NSwgNjYsIDc2LCA3MywgCisgICAgNzgsIDY5LCA2NSwgMjEwLCA4MywgODUsIDY2LCA3NCwgNzksIDczLCA3OCwgNjksIDE5NiwgODMsIDg1LCA2NiwgNzQsIDY5LCAKKyAgICA2NywgODQsIDEyOCwgODMsIDg1LCA2NiwgNzMsIDg0LCA3OSwgMTI4LCA4MywgODUsIDY2LCA3MSwgODIsIDc5LCA4NSwgODAsIAorICAgIDEyOCwgODMsIDg1LCA2NiwgNzEsIDgyLCA3OSwgODUsIDIwOCwgODMsIDg1LCA2NSwgMTI4LCA4MywgMjEzLCA4MywgODQsIAorICAgIDg3LCA2NSwgMTI4LCA4MywgODQsIDg1LCA2OCwgODksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgODMsIDEyOCwgCisgICAgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMjExLCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTcsIDEyOCwgODMsIDg0LCAKKyAgICA4MiwgNzksIDc1LCA2OSwgNDUsIDU2LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NSwgMTI4LCA4MywgODQsIAorICAgIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTQsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUzLCAxMjgsIDgzLCA4NCwgCisgICAgODIsIDc5LCA3NSwgNjksIDQ1LCA1MiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTEsIDEyOCwgODMsIDg0LCAKKyAgICA4MiwgNzksIDc1LCA2OSwgNDUsIDUwLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgNDksIDEyOCwgODMsIAorICAgIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDEyOCwgCisgICAgODMsIDg0LCA4MiwgNzMsIDgwLCA2OSwgMTI4LCA4MywgODQsIDgyLCA3MywgNzUsIDY5LCA4NCwgNzIsIDgyLCA3OSwgODUsIAorICAgIDcxLCA3MiwgMTI4LCA4MywgODQsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDc2LCAKKyAgICAyMTcsIDgzLCA4NCwgODIsIDY5LCA4NCwgNjcsIDcyLCA2OSwgMTk2LCA4MywgODQsIDgyLCA2OSwgODMsIDIxMSwgODMsIAorICAgIDg0LCA4MiwgNjksIDc4LCA3MSwgODQsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgNzMsIDY1LCAyMDYsIDgzLCA4NCwgCisgICAgODIsIDY1LCA3MywgNzgsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgODQsIDc4LCA2OSwgODMsIAorICAgIDgzLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCAyMTIsIDgzLCA4NCwgODIsIDY1LCA3MywgNzAsIDEyOCwgCisgICAgODMsIDg0LCA4MiwgNjUsIDcxLCA3MSwgNzMsIDgzLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MywgODQsIDc5LCA4NiwgNjksIAorICAgIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNjUsIDcxLCA2OSwgCisgICAgMTI4LCA4MywgODQsIDc5LCA4MCwgMTI4LCA4MywgODQsIDc5LCAyMDgsIDgzLCA4NCwgNzksIDc4LCA2OSwgMTI4LCA4MywgCisgICAgODQsIDc5LCA2NywgNzUsIDEyOCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA4MywgODQsIDczLCA3NiwgMjA0LCAKKyAgICA4MywgODQsIDczLCA3NiwgMTk3LCA4MywgODQsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCA4NCwgNjksIDgwLCAxMjgsIAorICAgIDgzLCA4NCwgNjksIDc3LCAxMjgsIDgzLCA4NCwgNjksIDIwNSwgODMsIDg0LCA2OSwgNjUsIDc3LCAxMjgsIDgzLCA4NCwgCisgICAgNjUsIDg2LCA4MiwgNzksIDg1LCAxMjgsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg2LCAKKyAgICA4MiwgNzksIDIxMSwgODMsIDg0LCA2NSwgODUsIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCA4MiwgODMsIAorICAgIDEyOCwgODMsIDg0LCA2NSwgODIsIDIxMiwgODMsIDg0LCA2NSwgODIsIDc1LCAxMjgsIDgzLCA4NCwgNjUsIDgyLCAxMjgsIAorICAgIDgzLCA4NCwgNjUsIDIxMCwgODMsIDg0LCA2NSwgNzgsIDY4LCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgODMsIDg0LCA2NSwgCisgICAgNzgsIDY4LCA2NSwgODIsIDE5NiwgODMsIDg0LCA2NSwgNzgsIDY4LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCAxMjgsIDgzLCAKKyAgICA4NCwgNjUsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMTI4LCA4MywgODQsIDY1LCA3MCwgNzAsIDEyOCwgODMsIDg0LCA2NSwgNzAsIAorICAgIDE5OCwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3MywgCisgICAgODMsIDgzLCA3MywgNzcsIDc5LCAxMjgsIDgzLCA4NCwgNTAsIDEyOCwgODMsIDgzLCA4OSwgODgsIDEyOCwgODMsIDgzLCAKKyAgICA4OSwgODQsIDEyOCwgODMsIDgzLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA4MywgODksIDgyLCAxMjgsIDgzLCA4MywgODksIAorICAgIDgwLCAxMjgsIDgzLCA4MywgODksIDEyOCwgODMsIDgzLCA4NSwgODgsIDEyOCwgODMsIDgzLCA4NSwgODQsIDEyOCwgODMsIAorICAgIDgzLCA4NSwgODAsIDEyOCwgODMsIDgzLCA3OSwgODgsIDEyOCwgODMsIDgzLCA3OSwgODQsIDEyOCwgODMsIDgzLCA3OSwgCisgICAgODAsIDEyOCwgODMsIDgzLCA3OSwgMTI4LCA4MywgODMsIDczLCA4OCwgMTI4LCA4MywgODMsIDczLCA4NCwgMTI4LCA4MywgCisgICAgODMsIDczLCA4MCwgMTI4LCA4MywgODMsIDczLCA2OSwgODgsIDEyOCwgODMsIDgzLCA3MywgNjksIDgwLCAxMjgsIDgzLCAKKyAgICA4MywgNzMsIDY5LCAxMjgsIDgzLCA4MywgNzMsIDEyOCwgODMsIDgzLCA3MiwgNjksIDEyOCwgODMsIDgzLCA2OSwgODgsIAorICAgIDEyOCwgODMsIDgzLCA2OSwgODAsIDEyOCwgODMsIDgzLCA2OSwgNjksIDEyOCwgODMsIDgzLCA2NSwgODgsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4OSwgNjksIDc5LCA4MiwgCisgICAgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIAorICAgIDg0LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCAKKyAgICA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgzLCA4MywgNjUsIAorICAgIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDc4LCAKKyAgICA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgCisgICAgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIAorICAgIDc5LCA4MywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA4MywgNjUsIAorICAgIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAKKyAgICAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIAorICAgIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgCisgICAgODMsIDY1LCA3OCwgNzEsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIAorICAgIDg1LCA2NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCAKKyAgICA2NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY1LCA4MiwgNjUsIDY5LCA2NSwgMTI4LCA4MywgODMsIDY1LCA2NSwgCisgICAgMTI4LCA4MywgODMsIDY1LCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgODMsIDIwMCwgODMsIDgxLCA4NSwgCisgICAgNzMsIDgyLCA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCA3MSwgNzYsIDE5NywgODMsIDgxLCA4NSwgNjUsIAorICAgIDIxMiwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgNjgsIDEyOCwgCisgICAgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTI4LCA4MywgODAsIDg3LCA2NSwgMTI4LCA4MywgODAsIDg1LCA3OCwgNzEsIAorICAgIDIxMSwgODMsIDgwLCA4MiwgNzksIDg1LCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MywgCisgICAgODAsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIDcxLCA2OSwgODMsIDY1LCA3OCwgMTk5LCAKKyAgICA4MywgODAsIDc5LCA4NCwgMTI4LCA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCA3NiwgNzMsIDg0LCA4NCwgNzMsIAorICAgIDc4LCAxOTksIDgzLCA4MCwgNzMsIDgyLCA3MywgODQsIDg1LCAyMTEsIDgzLCA4MCwgNzMsIDgyLCA3MywgODQsIDEyOCwgCisgICAgODMsIDgwLCA3MywgODIsIDczLCAyMTIsIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCAKKyAgICA2NSwgNzYsIDEyOCwgODMsIDgwLCA3MywgNjgsIDY5LCA4MiwgMjE3LCA4MywgODAsIDczLCA2NywgNjksIDEyOCwgODMsIAorICAgIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCAyMDQsIDgzLCA4MCwgNjksIDgzLCA3NywgNzMsIDc2LCAyMDcsIDgzLCA4MCwgCisgICAgNjksIDY5LCA2NywgNzIsIDEyOCwgODMsIDgwLCA2OSwgNjcsIDczLCA2NSwgNzYsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDgyLCAKKyAgICAxMjgsIDgzLCA4MCwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDEyOCwgODMsIAorICAgIDgwLCA2NSwgNjgsIDE5NywgODMsIDgwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA4MywgODAsIDEyOCwgODMsIDc5LCA4OSwgCisgICAgMTI4LCA4MywgNzksIDg3LCA3MywgNzYsIDIwNywgODMsIDc5LCA4NywgMTI4LCA4MywgNzksIDg1LCA4NCwgNzIsIDQ1LCAKKyAgICA4MywgNzYsIDY1LCA4NiwgNjksIDIxNywgODMsIDc5LCA4NSwgODQsIDIwMCwgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgCisgICAgMTI4LCA4MywgNzksIDg1LCA3OCwgNjgsIDEyOCwgODMsIDc5LCA4NSwgNzgsIDE5NiwgODMsIDc5LCA4NSwgNzgsIDY1LCAKKyAgICA4MCwgMTI4LCA4MywgNzksIDg1LCAxMjgsIDgzLCA3OSwgNzksIDEyOCwgODMsIDc5LCA3OCwgNzEsIDEyOCwgODMsIDc5LCAKKyAgICA3OCwgMTI4LCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCA4MywgMTI4LCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCAyMTEsIAorICAgIDgzLCA3OSwgNzEsIDY4LCA3MywgNjUsIDIwNiwgODMsIDc5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY5LCA0NSwgNzAsIDg1LCAKKyAgICA3OCwgNjcsIDg0LCA3MywgNzksIDIwNiwgODMsIDc5LCA3MCwgMjEyLCA4MywgNzksIDE5OCwgODMsIDc5LCA2NywgNzMsIAorICAgIDY5LCA4NCwgODksIDEyOCwgODMsIDc5LCA2NywgNjcsIDY5LCAyMTAsIDgzLCA3OSwgNjUsIDEyOCwgODMsIDIwNywgODMsIAorICAgIDc4LCA3OSwgODcsIDc3LCA2NSwgNzgsIDEyOCwgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgMjA2LCA4MywgNzgsIDc5LCA4NywgCisgICAgNzAsIDc2LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3OCwgNzksIDg3LCAxMjgsIDgzLCA3OCwgNzksIDg1LCA4NCwgMTI4LCAKKyAgICA4MywgNzgsIDc5LCA4NSwgMjEyLCA4MywgNzgsIDY1LCAyMDgsIDgzLCA3OCwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIAorICAgIDY1LCA3NSwgMTk3LCA4MywgNzgsIDE5MywgODMsIDc3LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgCisgICAgNjksIDEyOCwgODMsIDc3LCA2OSwgNjUsIDgyLCAxMjgsIDgzLCA3NywgNjUsIDgzLCAyMDAsIDgzLCA3NywgNjUsIDc2LCAKKyAgICA3NiwgNjksIDIxMCwgODMsIDc3LCA2NSwgNzYsIDc2LCAxMjgsIDgzLCA3NiwgODUsIDgyLCAxMjgsIDgzLCA3NiwgNzksIAorICAgIDg3LCA3NiwgODksIDEyOCwgODMsIDc2LCA3OSwgMjE1LCA4MywgNzYsIDc5LCA4NiwgNzksIDEyOCwgODMsIDc2LCA3OSwgCisgICAgODAsIDczLCA3OCwgMTk5LCA4MywgNzYsIDc5LCA4MCwgNjksIDEyOCwgODMsIDc2LCA3MywgNzgsIDcxLCAxMjgsIDgzLCAKKyAgICA3NiwgNzMsIDY4LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY3LCA2OSwgMTI4LCA4MywgNzYsIDY1LCA4NiwgNzksIAorICAgIDc4LCA3MywgMTk1LCA4MywgNzYsIDY1LCA4NiwgNjksIDEyOCwgODMsIDc2LCA2NSwgODMsIDcyLCAxMjgsIDgzLCA3NiwgCisgICAgNjUsIDgzLCAyMDAsIDgzLCA3NiwgNjUsIDc4LCA4NCwgNjksIDE5NiwgODMsIDc1LCA4NywgNjUsIDEyOCwgODMsIDc1LCAKKyAgICA4NywgMTI4LCA4MywgNzUsIDg1LCA3NiwgMjA0LCA4MywgNzUsIDc2LCA3MywgODIsIDc5LCAyMDYsIDgzLCA3NSwgNzMsIAorICAgIDc4LCAxMjgsIDgzLCA3NSwgNzMsIDY5LCA4MiwgMTI4LCA4MywgNzUsIDY5LCA4NywgNjksIDE5NiwgODMsIDc1LCA2NSwgCisgICAgODQsIDY5LCAxMjgsIDgzLCA3NSwgMTI4LCA4MywgNzQsIDY5LCAxMjgsIDgzLCA3MywgODgsIDg0LCA4OSwgNDUsIDcwLCAKKyAgICA3OSwgODUsIDgyLCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgODksIDEyOCwgODMsIDczLCA4OCwgODQsIDIxNywgODMsIAorICAgIDczLCA4OCwgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgNzIsIDIxMSwgODMsIDczLCA4OCwgODQsIDcyLCAKKyAgICAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIAorICAgIDc4LCA4NCwgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA2OSwgCisgICAgNjksIDc4LCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDIwNiwgODMsIDczLCA4OCwgNDUsIDgzLCA4NCwgODIsIDczLCAKKyAgICA3OCwgMTk5LCA4MywgNzMsIDg4LCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDgzLCA3MywgODgsIDQ1LCA3NiwgNzMsIAorICAgIDc4LCAxOTcsIDgzLCA3MywgMjE2LCA4MywgNzMsIDg0LCA2OSwgMTI4LCA4MywgNzMsIDgyLCA3MywgNzgsIDcxLCA4NSwgCisgICAgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCAKKyAgICA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgyLCA3MywgCisgICAgNjksIDg1LCA3NiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc1LCA3MywgODksIAorICAgIDY5LCA3OSwgNzUsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MywgCisgICAgNzMsIDc5LCA4MywgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzgsIAorICAgIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIAorICAgIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDczLCAKKyAgICA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgNzMsIAorICAgIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNjcsIDcyLCAxMjgsIDgzLCA3MywgNzksIDIxMSwgODMsIDczLCA3OCwgNzUsIDczLCA3OCwgNzEsIDEyOCwgODMsIAorICAgIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4MywgCisgICAgNzMsIDc4LCA3MSwgNzYsIDE5NywgODMsIDczLCA3OCwgNzEsIDY1LCA2NSwgODQsIDEyOCwgODMsIDczLCA3OCwgMTk3LCAKKyAgICA4MywgNzMsIDc4LCA2OCwgNzIsIDIwMSwgODMsIDczLCAyMDYsIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIAorICAgIDE5NiwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgODIsIDEyOCwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgMjEwLCA4MywgCisgICAgNzMsIDc3LCA2NSwgNzgsIDgzLCA3MywgMjExLCA4MywgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDc2LCA3NSwgMTI4LCAKKyAgICA4MywgNzMsIDc2LCA3MywgODEsIDg1LCAxOTMsIDgzLCA3MywgNzYsIDY1LCA1MSwgMTI4LCA4MywgNzMsIDc1LCA3MywgCisgICAgMTI4LCA4MywgNzMsIDc1LCA1MCwgMTI4LCA4MywgNzMsIDc1LCAxNzgsIDgzLCA3MywgNzMsIDEyOCwgODMsIDczLCA3MSwgCisgICAgNzgsIDgzLCAxMjgsIDgzLCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDcxLCA3NywgMTkzLCA4MywgNzMsIDcxLCAKKyAgICA2OSwgMjA0LCA4MywgNzMsIDcxLCA1MiwgMTI4LCA4MywgNzMsIDcxLCAxODAsIDgzLCA3MywgNzEsIDEyOCwgODMsIDczLCAKKyAgICA2OCwgNjksIDg3LCA2NSwgODksIDIxMSwgODMsIDczLCA2NywgNzUsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCA3MywgNjcsIAorICAgIDc1LCA3NiwgNjksIDEyOCwgODMsIDczLCA2NiwgMTk3LCA4MywgMjAxLCA4MywgNzIsIDg5LCA4OCwgMTI4LCA4MywgNzIsIAorICAgIDg5LCA4NCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgODgsIDEyOCwgODMsIDcyLCA4OSwgODIsIDEyOCwgODMsIDcyLCA4OSwgCisgICAgODAsIDEyOCwgODMsIDcyLCA4OSwgNjksIDEyOCwgODMsIDcyLCA4OSwgNjUsIDEyOCwgODMsIDcyLCA4OSwgMTI4LCA4MywgCisgICAgNzIsIDg3LCA3OSwgODksIDEyOCwgODMsIDcyLCA4NywgNzksIDc5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCAxMjgsIDgzLCAKKyAgICA3MiwgODcsIDczLCA3MywgMTI4LCA4MywgNzIsIDg3LCA3MywgMTI4LCA4MywgNzIsIDg3LCA2OSwgMTI4LCA4MywgNzIsIAorICAgIDg3LCA2NSwgNjUsIDEyOCwgODMsIDcyLCA4NywgNjUsIDEyOCwgODMsIDcyLCA4NSwgODgsIDEyOCwgODMsIDcyLCA4NSwgCisgICAgODQsIDEyOCwgODMsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDgwLCAKKyAgICAxMjgsIDgzLCA3MiwgODUsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIAorICAgIDEyOCwgODMsIDcyLCA4NSwgNzAsIDcwLCA3NiwgMTk3LCA4MywgNzIsIDg1LCA2NiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgCisgICAgODUsIDUwLCAxMjgsIDgzLCA3MiwgODUsIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgNzIsIDIxMywgODMsIDcyLCA4NCwgCisgICAgNjUsIDgwLCA3MywgNjcsIDEyOCwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA4MiwgNzMsIDc4LCA2OSwgMTI4LCAKKyAgICA4MywgNzIsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDc5LCA4NSwgNzYsIDY4LCA2OSwgODIsIAorICAgIDY5LCAxOTYsIDgzLCA3MiwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgODMsIDEyOCwgODMsIDcyLCA3OSwgCisgICAgODIsIDg0LCAyMTEsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjksIDc4LCA2OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCAKKyAgICA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgCisgICAgNzEsIDQ1LCA4NCwgODksIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4MywgNzksIAorICAgIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OSwgODMsIDIxMSwgODMsIDcyLCA3OSwgCisgICAgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OCwgNjUsIDg1LCAxOTYsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIAorICAgIDg0LCA4NywgNzMsIDcxLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCAKKyAgICA3MSwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgCisgICAgNDUsIDY2LCA3NCwgNjUsIDgyLCA3NSwgNjUsIDIwNiwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIAorICAgIDQ1LCA2NSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDEyOCwgODMsIDcyLCA3OSwgODIsIDIxMiwgODMsIDcyLCA3OSwgCisgICAgODAsIDEyOCwgODMsIDcyLCA3OSwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDc5LCAxMjgsIDgzLCA3MiwgNzksIDcxLCAKKyAgICAyMDEsIDgzLCA3MiwgNzksIDE5OSwgODMsIDcyLCA3OSwgMTk3LCA4MywgNzIsIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCAKKyAgICAxMjgsIDgzLCA3MiwgNzMsIDg5LCA4OSwgNjUsIDY1LCA3NiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgCisgICAgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgNzIsIDczLCA4MiwgMTI4LCA4MywgNzIsIDczLCAyMTAsIDgzLCA3MiwgCisgICAgNzMsIDgwLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCA4NCwgMjA3LCA4MywgNzIsIDczLCA3OCwgNzMsIDcxLCAxMjgsIDgzLCAKKyAgICA3MiwgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIAorICAgIDc3LCAxOTMsIDgzLCA3MiwgNzMsIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIAorICAgIDgzLCA3MiwgNzMsIDczLCAxMjgsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgCisgICAgODMsIDcyLCA3MywgNjgsIDEyOCwgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDczLCAxMjgsIDgzLCA3MiwgNzIsIDY1LCAKKyAgICAxMjgsIDgzLCA3MiwgNjksIDg4LCAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgODgsIAorICAgIDEyOCwgODMsIDcyLCA2OSwgODQsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3NiwgNjUsIDc3LCAxMjgsIDgzLCA3MiwgCisgICAgNjksIDgzLCA3MiwgNzMsIDcxLCAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzMsIDE5OSwgODMsIDcyLCA2OSwgODMsIDcyLCAKKyAgICA1MCwgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDEyOCwgODMsIDcyLCA2OSwgODEsIDY5LCAyMDQsIDgzLCA3MiwgNjksIAorICAgIDgwLCAxMjgsIDgzLCA3MiwgNjksIDc4LCAxMjgsIDgzLCA3MiwgNjksIDc2LCA3NiwgMTI4LCA4MywgNzIsIDY5LCA3NiwgCisgICAgMjA0LCA4MywgNzIsIDY5LCA3NiwgNzAsIDEyOCwgODMsIDcyLCA2OSwgNzMsIDEyOCwgODMsIDcyLCA2OSwgNzEsIDU3LCAKKyAgICAxMjgsIDgzLCA3MiwgNjksIDY5LCA4MCwgMTI4LCA4MywgNzIsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA3MiwgNjksIAorICAgIDY5LCA3OCwgMTI4LCA4MywgNzIsIDY5LCA2OSwgMjA2LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA4MywgNzIsIDY5LCA0NSwgCisgICAgNzEsIDc5LCA2NSwgODQsIDEyOCwgODMsIDcyLCAxOTcsIDgzLCA3MiwgNjcsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICA4OSwgMTI4LCA4MywgNzIsIDY1LCA4OCwgMTI4LCA4MywgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIAorICAgIDgzLCA3MiwgNjUsIDg2LCA3MywgNjUsIDIwNiwgODMsIDcyLCA2NSwgODQsIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIDgyLCA4MCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCAKKyAgICA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDUwLCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIAorICAgIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgODAsIDEyOCwgODMsIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgCisgICAgODMsIDcyLCA2NSwgNzcsIDgyLCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIAorICAgIDg0LCAxMjgsIDgzLCA3MiwgNjUsIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgCisgICAgODMsIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCAKKyAgICAxOTMsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA2NSwgNjYsIDU0LCAxMjgsIDgzLCAKKyAgICA3MiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDE3OSwgODMsIDcxLCA4MiwgMTkzLCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjUsIDIxNSwgODMsIDcxLCA2NSwgMTk0LCAKKyAgICA4MywgNzEsIDEyOCwgODMsIDY5LCA4OCwgODQsIDg1LCA3NiwgMTkzLCA4MywgNjksIDg4LCA4NCwgNzMsIDc2LCA2OSwgCisgICAgMTI4LCA4MywgNjksIDg4LCA4NCwgNjUsIDc4LCAyMTEsIDgzLCA2OSwgODYsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIAorICAgIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgMjE3LCA4MywgCisgICAgNjksIDg2LCA2OSwgNzgsIDg0LCA3MiwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDgzLCAKKyAgICA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNjksIDg2LCA2OSwgMjA2LCA4MywgNjksIDg1LCA4OCwgCisgICAgMTI4LCA4MywgNjksIDgzLCA4NCwgNjksIDgyLCA4NCwgNzMsIDg1LCAyMTEsIDgzLCA2OSwgODMsIDgxLCA4NSwgNzMsIDgxLCAKKyAgICA4NSwgNjUsIDY4LCA4MiwgNjUsIDg0LCA2OSwgMTI4LCA4MywgNjksIDgzLCA2NSwgNzcsIDE5NywgODMsIDY5LCA4MiwgODYsIAorICAgIDczLCA2NywgMTk3LCA4MywgNjksIDgyLCA3MywgNzAsIDgzLCAxMjgsIDgzLCA2OSwgODIsIDczLCA3MCwgMjExLCA4MywgCisgICAgNjksIDgwLCA4NCwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgODIsIAorICAgIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCAyMTAsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MywgCisgICAgNjksIDc4LCA4NCwgNzMsIDEyOCwgODMsIDY5LCA3NywgODUsIDc4LCA2NywgNzMsIDE5MywgODMsIDY5LCA3NywgNzUsIDY1LCAKKyAgICA4NCwgNzIsIDEyOCwgODMsIDY5LCA3NywgNzUsIDEyOCwgODMsIDY5LCA3NywgNzMsIDg2LCA3OSwgODcsIDY5LCAyMDQsIAorICAgIDgzLCA2OSwgNzcsIDczLCA4MywgNzksIDcwLCAyMTIsIDgzLCA2OSwgNzcsIDczLCA4MywgNjksIDg4LCA4NCwgNzMsIDc2LCAKKyAgICA2OSwgMTI4LCA4MywgNjksIDc3LCA3MywgNzcsIDczLCA3OCwgNzMsIDc3LCAxOTMsIDgzLCA2OSwgNzcsIDczLCA2OCwgNzMsIAorICAgIDgyLCA2OSwgNjcsIDIxMiwgODMsIDY5LCA3NywgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4MywgNjksIDc3LCA3MywgCisgICAgNjcsIDc5LCA3NiwgNzksIDIwNiwgODMsIDY5LCA3NywgNzMsIDY3LCA3MywgODIsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgzLCAKKyAgICA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgODMsIDY5LCA3NywgNzMsIDY2LCA4MiwgNjksIDg2LCA3MywgCisgICAgMjExLCA4MywgNjksIDc3LCA3MywgNDUsIDg2LCA3OSwgNzMsIDY3LCA2OSwgMTk2LCA4MywgNjksIDc2LCA3MCwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA0OSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU3LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1NiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU0LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUxLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDQ4LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTYsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTMsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTAsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTQsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgCisgICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgCisgICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgCisgICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MSwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU2LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUzLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUwLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTUsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDUwLCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ5LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTcsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MywgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAKKyAgICA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTcsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgCisgICAgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MCwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTQsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MCwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDUwLCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTQsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTEsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU1LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTEsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgCisgICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgCisgICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTcsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTcsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTQsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTQsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgCisgICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1NCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIAorICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTEsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTEsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDgsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUyLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDgsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIAorICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NiwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAKKyAgICA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ5LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgCisgICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDQ4LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCAyMTAsIDgzLCA2OSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODMsIDY5LCA3MywgODMsIDc3LCAKKyAgICAxOTMsIDgzLCA2OSwgNzIsIDEyOCwgODMsIDY5LCA3MSwgNzksIDc2LCAxMjgsIDgzLCA2OSwgNzEsIDc4LCA3OSwgMTI4LCAKKyAgICA4MywgNjksIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA4MywgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDY5LCA2OSwgNzgsIAorICAgIDEyOCwgODMsIDY5LCA2OSwgMjA2LCA4MywgNjksIDY3LCA4NCwgNzksIDgyLCAxMjgsIDgzLCA2OSwgNjcsIDg0LCA3MywgCisgICAgNzksIDc4LCAxMjgsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgODMsIDY5LCA2NywgODIsIDY5LCA4NCwgMTI4LCAKKyAgICA4MywgNjksIDY3LCA3OSwgNzgsIDY4LCAxMjgsIDgzLCA2OSwgNjYsIDY1LCA4NCwgNjYsIDY5LCA3MywgMjEyLCA4MywgNjksIAorICAgIDY1LCA3NiwgMTI4LCA4MywgNjksIDY1LCA3MSwgODUsIDc2LCAyMDQsIDgzLCA2OCwgNzksIDc4LCAxOTksIDgzLCA2OCwgCisgICAgMTI4LCA4MywgNjcsIDg3LCA2NSwgMTI4LCA4MywgNjcsIDgyLCA4NSwgODAsIDc2LCA2OSwgMTI4LCA4MywgNjcsIDgyLCAKKyAgICA3MywgODAsIDg0LCAxMjgsIDgzLCA2NywgODIsIDY5LCA2OSwgNzgsIDEyOCwgODMsIDY3LCA4MiwgNjksIDY5LCAyMDYsIAorICAgIDgzLCA2NywgNzksIDgyLCA4MCwgNzMsIDg1LCA4MywgMTI4LCA4MywgNjcsIDczLCA4MywgODMsIDc5LCA4MiwgODMsIDEyOCwgCisgICAgODMsIDY3LCA3MiwgODcsIDY1LCAxMjgsIDgzLCA2NywgNzIsIDg3LCAxOTMsIDgzLCA2NywgNzIsIDgyLCA3OSwgNjksIDY4LCAKKyAgICA2OSwgODIsIDEyOCwgODMsIDY3LCA3MiwgNzksIDc5LCA3NiwgMTI4LCA4MywgNjcsIDcyLCA3OSwgNzYsIDY1LCA4MiwgCisgICAgMTI4LCA4MywgNjcsIDcyLCA2OSwgNzcsIDE5MywgODMsIDY3LCA2NSwgNzgsIDY4LCA3MywgNjcsIDg1LCA4MywgMTI4LCAKKyAgICA4MywgNjcsIDY1LCA3OCwgNjgsIDczLCA2NywgODUsIDIxMSwgODMsIDY3LCA2NSwgMjA2LCA4MywgNjcsIDY1LCA3NiwgNjksIAorICAgIDgzLCAxMjgsIDgzLCA2NiwgODUsIDE5NCwgODMsIDY2LCA4MiwgODUsIDIwNCwgODMsIDY1LCA4OSwgNzMsIDgzLCAyMDEsIAorICAgIDgzLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgzLCA2NSwgODksIDEyOCwgODMsIDY1LCA4OCwgNzMsIDc3LCA2NSwgCisgICAgODQsIDY1LCAxMjgsIDgzLCA2NSwgODcsIDY1LCA3OCwgMTI4LCA4MywgNjUsIDg3LCAxMjgsIDgzLCA2NSwgODUsIDczLCAKKyAgICA3NiwgMTI4LCA4MywgNjUsIDg0LCA4NSwgODIsIDc4LCAxMjgsIDgzLCA2NSwgODQsIDc1LCA2NSwgNjUsIDc4LCA3NSwgODUsIAorICAgIDg1LCAxMjgsIDgzLCA2NSwgODQsIDc1LCA2NSwgNjUsIDc4LCAxMjgsIDgzLCA2NSwgODMsIDY1LCA3NSwgMTI4LCA4MywgCisgICAgNjUsIDgyLCA3MywgMTI4LCA4MywgNjUsIDgyLCAxOTMsIDgzLCA2NSwgODIsIDEyOCwgODMsIDY1LCA4MCwgNjUsIDEyOCwgCisgICAgODMsIDY1LCA3OCwgODksIDc5LCA3OSwgNzEsIDE5MywgODMsIDY1LCA3OCwgODksIDY1LCA3NSwgMTkzLCA4MywgNjUsIDc4LCAKKyAgICA4NCwgNzMsIDczLCA3NywgODUsIDEyOCwgODMsIDY1LCA3OCwgNzgsIDg5LCA2NSwgMTI4LCA4MywgNjUsIDc4LCA3MSwgNjUsIAorICAgIDUwLCAxMjgsIDgzLCA2NSwgNzgsIDY1LCA3MiwgMTI4LCA4MywgNjUsIDc4LCAxMjgsIDgzLCA2NSwgNzcsIDg5LCA3OSwgCisgICAgMjAzLCA4MywgNjUsIDc3LCA4MCwgNzMsIDEyOCwgODMsIDY1LCA3NywgODAsIDcyLCA2NSwgNzksIDEyOCwgODMsIDY1LCAKKyAgICA3NywgNzUsIDY1LCAxMjgsIDgzLCA2NSwgNzcsIDY5LCA3NSwgNzIsIDEyOCwgODMsIDY1LCA3NywgNjksIDc1LCAyMDAsIAorICAgIDgzLCA2NSwgNzcsIDY2LCA2NSwgMTI4LCA4MywgNjUsIDc3LCAxMjgsIDgzLCA2NSwgNzYsIDg0LCA3MywgODIsIDY5LCAKKyAgICAxMjgsIDgzLCA2NSwgNzYsIDg0LCA3MywgNzYsIDc2LCA3OSwgMTI4LCA4MywgNjUsIDc2LCA4NCwgMTI4LCA4MywgNjUsIAorICAgIDc2LCA3NiwgNjUsIDc2LCA3NiwgNjUsIDcyLCA3OSwgMjEzLCA4MywgNjUsIDc2LCA3NiwgMTkzLCA4MywgNjUsIDc2LCA2NSwgCisgICAgMjA1LCA4MywgNjUsIDc2LCA2NSwgMTI4LCA4MywgNjUsIDc2LCAxMjgsIDgzLCA2NSwgNzUsIDc5LCA4NCwgMTI4LCA4MywgCisgICAgNjUsIDc0LCA2OCwgNjUsIDcyLCAxMjgsIDgzLCA2NSwgNzMsIDc2LCA2NiwgNzksIDY1LCA4NCwgMTI4LCA4MywgNjUsIDczLCAKKyAgICA3NiwgMTI4LCA4MywgNjUsIDczLCA3NSwgODUsIDgyLCA4NSwgMTI4LCA4MywgNjUsIDcxLCA3MywgODQsIDg0LCA2NSwgODIsIAorICAgIDczLCA4NSwgODMsIDEyOCwgODMsIDY1LCA3MSwgNjUsIDEyOCwgODMsIDY1LCA3MSwgMTI4LCA4MywgNjUsIDE5OSwgODMsIAorICAgIDY1LCA3MCwgNzIsIDY1LCAxMjgsIDgzLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA4MywgNjUsIDY4LCA2OSwgMTI4LCA4MywgCisgICAgNjUsIDY4LCAxMjgsIDgzLCA2NSwgMTk2LCA4MywgNjUsIDY3LCA4MiwgNzMsIDcwLCA3MywgNjcsIDczLCA2NSwgMjA0LCAKKyAgICA4MywgNjUsIDY1LCA3MywgMTI4LCA4MywgNjUsIDY1LCA2OCwgNzIsIDg1LCAxMjgsIDgzLCA2NSwgNDUsIDczLCAxMjgsIAorICAgIDgzLCA0OCwgNTIsIDU0LCAxMjgsIDgzLCA0OCwgNTIsIDUzLCAxMjgsIDgzLCA0OCwgNTIsIDUyLCAxMjgsIDgzLCA0OCwgCisgICAgNTIsIDUxLCAxMjgsIDgzLCA0OCwgNTIsIDUwLCAxMjgsIDgzLCA0OCwgNTIsIDQ5LCAxMjgsIDgzLCA0OCwgNTIsIDQ4LCAKKyAgICAxMjgsIDgzLCA0OCwgNTEsIDU3LCAxMjgsIDgzLCA0OCwgNTEsIDU2LCAxMjgsIDgzLCA0OCwgNTEsIDU1LCAxMjgsIDgzLCAKKyAgICA0OCwgNTEsIDU0LCAxMjgsIDgzLCA0OCwgNTEsIDUzLCA2NSwgMTI4LCA4MywgNDgsIDUxLCA1MywgMTI4LCA4MywgNDgsIAorICAgIDUxLCA1MiwgMTI4LCA4MywgNDgsIDUxLCA1MSwgMTI4LCA4MywgNDgsIDUxLCA1MCwgMTI4LCA4MywgNDgsIDUxLCA0OSwgCisgICAgMTI4LCA4MywgNDgsIDUxLCA0OCwgMTI4LCA4MywgNDgsIDUwLCA1NywgMTI4LCA4MywgNDgsIDUwLCA1NiwgMTI4LCA4MywgCisgICAgNDgsIDUwLCA1NSwgMTI4LCA4MywgNDgsIDUwLCA1NCwgNjYsIDEyOCwgODMsIDQ4LCA1MCwgNTQsIDY1LCAxMjgsIDgzLCAKKyAgICA0OCwgNTAsIDU0LCAxMjgsIDgzLCA0OCwgNTAsIDUzLCAxMjgsIDgzLCA0OCwgNTAsIDUyLCAxMjgsIDgzLCA0OCwgNTAsIAorICAgIDUxLCAxMjgsIDgzLCA0OCwgNTAsIDUwLCAxMjgsIDgzLCA0OCwgNTAsIDQ5LCAxMjgsIDgzLCA0OCwgNTAsIDQ4LCAxMjgsIAorICAgIDgzLCA0OCwgNDksIDU3LCAxMjgsIDgzLCA0OCwgNDksIDU2LCAxMjgsIDgzLCA0OCwgNDksIDU1LCA2NSwgMTI4LCA4MywgCisgICAgNDgsIDQ5LCA1NSwgMTI4LCA4MywgNDgsIDQ5LCA1NCwgMTI4LCA4MywgNDgsIDQ5LCA1MywgMTI4LCA4MywgNDgsIDQ5LCAKKyAgICA1MiwgNjYsIDEyOCwgODMsIDQ4LCA0OSwgNTIsIDY1LCAxMjgsIDgzLCA0OCwgNDksIDUyLCAxMjgsIDgzLCA0OCwgNDksIAorICAgIDUxLCAxMjgsIDgzLCA0OCwgNDksIDUwLCAxMjgsIDgzLCA0OCwgNDksIDQ5LCAxMjgsIDgzLCA0OCwgNDksIDQ4LCAxMjgsIAorICAgIDgzLCA0OCwgNDgsIDU3LCAxMjgsIDgzLCA0OCwgNDgsIDU2LCAxMjgsIDgzLCA0OCwgNDgsIDU1LCAxMjgsIDgzLCA0OCwgCisgICAgNDgsIDU0LCA2NSwgMTI4LCA4MywgNDgsIDQ4LCA1NCwgMTI4LCA4MywgNDgsIDQ4LCA1MywgMTI4LCA4MywgNDgsIDQ4LCAKKyAgICA1MiwgMTI4LCA4MywgNDgsIDQ4LCA1MSwgMTI4LCA4MywgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgODMsIDQ4LCA0OCwgNTAsIAorICAgIDEyOCwgODMsIDQ4LCA0OCwgNDksIDEyOCwgODMsIDQ1LCA4NywgMTI4LCA4MywgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgCisgICAgMTk2LCA4MiwgODksIDg5LCAxMjgsIDgyLCA4OSwgODgsIDEyOCwgODIsIDg5LCA4NCwgMTI4LCA4MiwgODksIDgyLCA4OCwgCisgICAgMTI4LCA4MiwgODksIDgyLCAxMjgsIDgyLCA4OSwgODAsIDEyOCwgODIsIDg5LCA2NSwgMTI4LCA4MiwgODcsIDc5LCA3OSwgCisgICAgMTI4LCA4MiwgODcsIDc5LCAxMjgsIDgyLCA4NywgNzMsIDczLCAxMjgsIDgyLCA4NywgNzMsIDEyOCwgODIsIDg3LCA2OSwgCisgICAgNjksIDEyOCwgODIsIDg3LCA2OSwgMTI4LCA4MiwgODcsIDY1LCA3MiwgNjUsIDEyOCwgODIsIDg3LCA2NSwgNjUsIDEyOCwgCisgICAgODIsIDg3LCA2NSwgMTI4LCA4MiwgODUsIDg4LCAxMjgsIDgyLCA4NSwgODUsIDY2LCA4NSwgODIsIDg1LCAxMjgsIDgyLCAKKyAgICA4NSwgODQsIDEyOCwgODIsIDg1LCA4MywgNzMsIDEyOCwgODIsIDg1LCA4MiwgODgsIDEyOCwgODIsIDg1LCA4MiwgMTI4LCAKKyAgICA4MiwgODUsIDgwLCA3MywgNzMsIDEyOCwgODIsIDg1LCA4MCwgNjksIDE5NywgODIsIDg1LCA4MCwgMTI4LCA4MiwgODUsIAorICAgIDc5LCA4OCwgMTI4LCA4MiwgODUsIDc5LCA4MCwgMTI4LCA4MiwgODUsIDc5LCAxMjgsIDgyLCA4NSwgNzgsIDc5LCA4NSwgCisgICAgODQsIDEyOCwgODIsIDg1LCA3OCwgMTI4LCA4MiwgODUsIDc3LCAyMDEsIDgyLCA4NSwgNzcsIDY1LCAyMDEsIDgyLCA4NSwgCisgICAgNzcsIDEyOCwgODIsIDg1LCAyMDUsIDgyLCA4NSwgNzYsIDY5LCA0NSwgNjgsIDY5LCA3NiwgNjUsIDg5LCA2OSwgNjgsIAorICAgIDEyOCwgODIsIDg1LCA3NiwgNjksIDEyOCwgODIsIDg1LCA3NSwgNzUsIDY1LCA3NSwgNzIsIDY1LCAxMjgsIDgyLCA4NSwgCisgICAgNzMsIDgzLCAxMjgsIDgyLCA4NSwgMTk0LCA4MiwgODUsIDY1LCAxMjgsIDgyLCA4NCwgNzIsIDY1LCA3OCwgMTk5LCA4MiwgCisgICAgODQsIDY1LCA3MSwgODMsIDEyOCwgODIsIDg0LCA2NSwgNzEsIDIxMSwgODIsIDgyLCA4OSwgODgsIDEyOCwgODIsIDgyLCAKKyAgICA4OSwgODQsIDEyOCwgODIsIDgyLCA4OSwgODIsIDg4LCAxMjgsIDgyLCA4MiwgODksIDgyLCAxMjgsIDgyLCA4MiwgODksIAorICAgIDgwLCAxMjgsIDgyLCA4MiwgODksIDEyOCwgODIsIDgyLCA4NSwgODgsIDEyOCwgODIsIDgyLCA4NSwgODQsIDEyOCwgODIsIAorICAgIDgyLCA4NSwgODIsIDg4LCAxMjgsIDgyLCA4MiwgODUsIDgyLCAxMjgsIDgyLCA4MiwgODUsIDgwLCAxMjgsIDgyLCA4MiwgCisgICAgODUsIDc5LCA4OCwgMTI4LCA4MiwgODIsIDg1LCA3OSwgMTI4LCA4MiwgODIsIDg1LCAxMjgsIDgyLCA4MiwgNzksIDg4LCAKKyAgICAxMjgsIDgyLCA4MiwgNzksIDg0LCAxMjgsIDgyLCA4MiwgNzksIDgwLCAxMjgsIDgyLCA4MiwgNzksIDEyOCwgODIsIDgyLCAKKyAgICA2OSwgODgsIDEyOCwgODIsIDgyLCA2OSwgODQsIDEyOCwgODIsIDgyLCA2OSwgODAsIDEyOCwgODIsIDgyLCA2OSwgNzIsIAorICAgIDEyOCwgODIsIDgyLCA2OSwgMjAwLCA4MiwgODIsIDY5LCAxMjgsIDgyLCA4MiwgNjUsIDg4LCAxMjgsIDgyLCA4MiwgNjUsIAorICAgIDEyOCwgODIsIDc5LCA4NSwgNzgsIDY4LCA2OSwgMTk2LCA4MiwgNzksIDg1LCA3OCwgNjgsIDQ1LCA4NCwgNzMsIDgwLCA4MCwgCisgICAgNjksIDE5NiwgODIsIDc5LCA4NCwgODUsIDc4LCA2OCwgNjUsIDEyOCwgODIsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCAKKyAgICA4MiwgNzksIDgzLCA3MiwgMTI4LCA4MiwgNzksIDgzLCA2OSwgODQsIDg0LCA2OSwgMTI4LCA4MiwgNzksIDc5LCA4NCwgCisgICAgMTI4LCA4MiwgNzksIDc5LCA3NSwgMTI4LCA4MiwgNzksIDc5LCA3MCwgMTI4LCA4MiwgNzksIDc5LCAxMjgsIDgyLCA3OSwgCisgICAgNzcsIDY1LCAyMDYsIDgyLCA3OSwgMTk2LCA4MiwgNzksIDY3LCAxMjgsIDgyLCA3OSwgNjYsIDY1LCA4NCwgMTI4LCA4MiwgCisgICAgNzksIDY1LCA4MiwgMTI4LCA4MiwgNzksIDY1LCAxMjgsIDgyLCA3OCwgODksIDczLCA3OCwgMTk5LCA4MiwgNzgsIDc5LCAKKyAgICA3OSwgNzgsIDEyOCwgODIsIDc4LCA3OSwgNzksIDIwNiwgODIsIDc4LCA2NSwgMjA1LCA4MiwgNzQsIDY5LCAyMTEsIDgyLCAKKyAgICA3NCwgNjksIDEyOCwgODIsIDc0LCAxOTcsIDgyLCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNzMsIDg0LCA4NSwgNjUsIAorICAgIDc2LCAxMjgsIDgyLCA3MywgODQsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgyLCA3MywgODQsIDgzLCA3MywgMTI4LCA4MiwgCisgICAgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDczLCA4MywgNzIsIDEyOCwgODIsIDczLCA4MiwgNjUsIDEyOCwgODIsIDczLCAKKyAgICA4MCwgMTI4LCA4MiwgNzMsIDc4LCA3MSwgMjExLCA4MiwgNzMsIDc4LCA3MCwgNzksIDgyLCA5MCwgNjUsIDc4LCA2OCwgNzksIAorICAgIDEyOCwgODIsIDczLCAyMDYsIDgyLCA3MywgNzUsIDgyLCA3MywgNzUsIDEyOCwgODIsIDczLCA3MywgMTI4LCA4MiwgNzMsIAorICAgIDcxLCA4NiwgNjksIDY4LCA3MywgMTk1LCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA4MiwgCisgICAgNzMsIDcxLCA3MiwgODQsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODQsIDc5LCA0NSwgNzYsIAorICAgIDY5LCA3MCwgMjEyLCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIDgyLCA3MywgNzEsIDcyLCA4NCwgCisgICAgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIAorICAgIDY4LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA4MiwgCisgICAgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcwLCA2NSwgNjcsIAorICAgIDczLCA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIDY5LCA4MywgCisgICAgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIAorICAgIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKKyAgICA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCisgICAgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgODQsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgCisgICAgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIAorICAgIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAKKyAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCisgICAgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAorICAgIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCAKKyAgICA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgCisgICAgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIAorICAgIDg1LCA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgCisgICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAorICAgIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCAKKyAgICA3MywgNjksIDg1LCA3NywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCisgICAgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAorICAgIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKKyAgICA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIAorICAgIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDczLCAKKyAgICA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIAorICAgIDY5LCA4NSwgNzYsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODIsIDczLCA2OSwgODUsIDIwNCwgODIsIDczLCA2OSwgCisgICAgNzYsIDEyOCwgODIsIDczLCA2OSwgNjksIDEyOCwgODIsIDczLCA2NywgNjksIDc3LCAxMjgsIDgyLCA3MywgNjcsIDY5LCAKKyAgICAxMjgsIDgyLCA3MywgNjUsIDIwNCwgODIsIDcyLCA3OSwgODQsIDczLCAxOTUsIDgyLCA3MiwgNzksIDEyOCwgODIsIDcyLCAKKyAgICAyMDcsIDgyLCA3MiwgNjUsIDEyOCwgODIsIDcxLCA4OSwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODIsIDcxLCA4OSwgNjUsIAorICAgIDc4LCAxMjgsIDgyLCA3MSwgODksIDE5MywgODIsIDY5LCA4NiwgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgODIsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDgyLCA2OSwgODYsIDczLCA2NSwgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCAKKyAgICA2OSwgNjgsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgMTk3LCA4MiwgNjksIDg1LCA4OCwgMTI4LCA4MiwgNjksIAorICAgIDg0LCA4NSwgODIsIDc4LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgMjA2LCA4MiwgNjksIDg0LCA4MiwgNzksIDcwLCA3NiwgCisgICAgNjksIDIxNiwgODIsIDY5LCA4NCwgODIsIDY5LCA2NSwgODQsIDEyOCwgODIsIDY5LCA4MywgODUsIDgwLCA3MywgNzgsIDg1LCAKKyAgICA4MywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDY5LCAxOTYsIDgyLCA2OSwgODMsIDg0LCAxMjgsIAorICAgIDgyLCA2OSwgODMsIDgwLCA3OSwgNzgsIDgzLCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgCisgICAgODIsIDY5LCA4MywgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4MywgNzMsIDgzLCA4NCwgNjUsIAorICAgIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgNzMsIDY4LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCAKKyAgICAyMDAsIDgyLCA2OSwgODIsIDY5LCA3OCwgNzEsIDcxLCA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MiwgNjksIDc1LCA2NSwgNzgsIAorICAgIDEyOCwgODIsIDY5LCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA3NiwgNjUsIDY3LCA2OSwgCisgICAgNzcsIDY5LCA3OCwgMjEyLCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCAKKyAgICAxMjgsIDgyLCA2OSwgODAsIDY5LCA2NSwgMjEyLCA4MiwgNjksIDgwLCA2NSwgMTI4LCA4MiwgNjksIDgwLCAxOTMsIDgyLCAKKyAgICA2OSwgNzgsIDg0LCA3OSwgNzEsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDc4LCAxMjgsIDgyLCA2OSwgNzcsIDg1LCAxMjgsIAorICAgIDgyLCA2OSwgNzYsIDczLCA3MSwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDc2LCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA4MiwgCisgICAgNjksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA4MiwgNjksIDc2LCA2NSwgNjUsIDEyOCwgODIsIDY5LCA3NCwgNjUsIDc4LCAxOTksIDgyLCA2OSwgNzMsIDE5NiwgODIsIAorICAgIDY5LCA3MSwgNzMsIDgzLCA4NCwgNjksIDgyLCA2OSwgMTk2LCA4MiwgNjksIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgCisgICAgODIsIDY5LCA2OCwgODUsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA2NywgODksIAorICAgIDY3LCA3NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgyLCA2OSwgNjcsIDg0LCA3MywgCisgICAgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDgyLCAKKyAgICA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgNjksIDEyOCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIAorICAgIDgyLCA2OSwgNjcsIDc5LCA4MiwgNjgsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCA2OSwgODIsIDEyOCwgCisgICAgODIsIDY5LCA2NywgNzksIDgyLCAxOTYsIDgyLCA2OSwgNjcsIDY5LCA4MCwgODQsIDczLCA4NiwgMTk3LCA4MiwgNjksIDY1LCAKKyAgICA3MiwgNzcsIDg1LCA3NSwgMTI4LCA4MiwgNjksIDY1LCA2NywgNzIsIDEyOCwgODIsIDY4LCAyMDcsIDgyLCA2OCwgNjksIAorICAgIDIwNCwgODIsIDY2LCA2NSwgODMsIDE5MywgODIsIDY1LCA4OSwgODMsIDEyOCwgODIsIDY1LCA4OSwgNjUsIDc4LCA3OCwgCisgICAgNjUsIDEyOCwgODIsIDY1LCA4OSwgMTI4LCA4MiwgNjUsIDg0LCA3MywgNzksIDEyOCwgODIsIDY1LCA4NCwgNzIsIDY1LCAKKyAgICAxMjgsIDgyLCA2NSwgODQsIDcyLCAxOTMsIDgyLCA2NSwgODQsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDEyOCwgODIsIDY1LCAKKyAgICA4MywgODcsIDY1LCA2OCwgNzMsIDEyOCwgODIsIDY1LCA4MywgNzksIDg1LCAyMDQsIDgyLCA2NSwgODMsIDcyLCA2NSwgCisgICAgMTI4LCA4MiwgNjUsIDgwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA4MiwgNjUsIDc4LCAKKyAgICA2NSwgMTI4LCA4MiwgNjUsIDc4LCAxMjgsIDgyLCA2NSwgNzcsIDIxMSwgODIsIDY1LCA3NywgNjYsIDY1LCA4NCwgMTI4LCAKKyAgICA4MiwgNjUsIDc3LCAxMjgsIDgyLCA2NSwgNzUsIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNzMsIDgzLCA2OSwgCisgICAgMTk2LCA4MiwgNjUsIDczLCA3OCwgMTI4LCA4MiwgNjUsIDczLCAyMDYsIDgyLCA2NSwgNzMsIDY4LCAyMDcsIDgyLCA2NSwgCisgICAgNzMsIDY4LCA2NSwgMTI4LCA4MiwgNjUsIDczLCAxMjgsIDgyLCA2NSwgNzIsIDc3LCA2NSwgODQsIDg1LCA3NiwgNzYsIDY1LCAKKyAgICAyMDAsIDgyLCA2NSwgNzAsIDY5LCAxMjgsIDgyLCA2NSwgNjksIDEyOCwgODIsIDY1LCA2OCwgNzMsIDc5LCA2NSwgNjcsIAorICAgIDg0LCA3MywgODYsIDE5NywgODIsIDY1LCA2OCwgMjAxLCA4MiwgNjUsIDY4LCAxMjgsIDgyLCA2NSwgMTk2LCA4MiwgNjUsIAorICAgIDY2LCAxMjgsIDgyLCA2NSwgNjUsIDczLCAxMjgsIDgyLCA2NSwgNjUsIDEyOCwgODIsIDY1LCA1MSwgMTI4LCA4MiwgNjUsIAorICAgIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDU3LCAxMjgsIDgyLCA0OCwgNTAsIDU2LCAxMjgsIDgyLCA0OCwgNTAsIDU1LCAxMjgsIAorICAgIDgyLCA0OCwgNTAsIDU0LCAxMjgsIDgyLCA0OCwgNTAsIDUzLCAxMjgsIDgyLCA0OCwgNTAsIDUyLCAxMjgsIDgyLCA0OCwgCisgICAgNTAsIDUxLCAxMjgsIDgyLCA0OCwgNTAsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDQ5LCAxMjgsIDgyLCA0OCwgNTAsIDQ4LCAKKyAgICAxMjgsIDgyLCA0OCwgNDksIDU3LCAxMjgsIDgyLCA0OCwgNDksIDU2LCAxMjgsIDgyLCA0OCwgNDksIDU1LCAxMjgsIDgyLCAKKyAgICA0OCwgNDksIDU0LCA2NSwgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgMTI4LCA4MiwgNDgsIDQ5LCA1MywgMTI4LCA4MiwgNDgsIAorICAgIDQ5LCA1MiwgMTI4LCA4MiwgNDgsIDQ5LCA1MSwgMTI4LCA4MiwgNDgsIDQ5LCA1MCwgMTI4LCA4MiwgNDgsIDQ5LCA0OSwgCisgICAgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDEyOCwgODIsIDQ4LCA0OCwgNTcsIDEyOCwgCisgICAgODIsIDQ4LCA0OCwgNTYsIDEyOCwgODIsIDQ4LCA0OCwgNTUsIDEyOCwgODIsIDQ4LCA0OCwgNTQsIDEyOCwgODIsIDQ4LCAKKyAgICA0OCwgNTMsIDEyOCwgODIsIDQ4LCA0OCwgNTIsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDY2LCAxMjgsIDgyLCA0OCwgNDgsIAorICAgIDUxLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgMTI4LCA4MiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgCisgICAgNTAsIDEyOCwgODIsIDQ4LCA0OCwgNDksIDEyOCwgODIsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDgxLCA4OSwgODgsIDEyOCwgCisgICAgODEsIDg5LCA4NSwgMTI4LCA4MSwgODksIDg0LCAxMjgsIDgxLCA4OSwgODIsIDg4LCAxMjgsIDgxLCA4OSwgODIsIDEyOCwgCisgICAgODEsIDg5LCA4MCwgMTI4LCA4MSwgODksIDc5LCAxMjgsIDgxLCA4OSwgNzMsIDEyOCwgODEsIDg5LCA2OSwgNjksIDEyOCwgCisgICAgODEsIDg5LCA2OSwgMTI4LCA4MSwgODksIDY1LCA2NSwgMTI4LCA4MSwgODksIDY1LCAxMjgsIDgxLCA4OSwgMTI4LCA4MSwgCisgICAgODcsIDczLCAxMjgsIDgxLCA4NywgNjksIDY5LCAxMjgsIDgxLCA4NywgNjksIDEyOCwgODEsIDg3LCA2NSwgNjUsIDEyOCwgCisgICAgODEsIDg3LCA2NSwgMTI4LCA4MSwgODUsIDg4LCAxMjgsIDgxLCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgODYsIDEyOCwgCisgICAgODEsIDg1LCA4NSwgMTI4LCA4MSwgODUsIDg0LCAxMjgsIDgxLCA4NSwgODMsIDcyLCA4MywgNzIsIDY1LCA4OSwgNjUsIAorICAgIDEyOCwgODEsIDg1LCA4MiwgODgsIDEyOCwgODEsIDg1LCA4MiwgMTI4LCA4MSwgODUsIDgwLCAxMjgsIDgxLCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDgxLCA4NSwgNzksIDg0LCAxOTcsIDgxLCA4NSwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MSwgCisgICAgODUsIDc5LCA4NCwgMTI4LCA4MSwgODUsIDc5LCA4MCwgMTI4LCA4MSwgODUsIDc5LCAxMjgsIDgxLCA4NSwgNzUsIDEyOCwgCisgICAgODEsIDg1LCA3MywgNzgsIDY4LCA3MywgNjcsIDY5LCA4MywgNzMsIDc3LCAxOTMsIDgxLCA4NSwgNzMsIDc4LCA2NywgODUsIAorICAgIDc4LCA4OCwgMTI4LCA4MSwgODUsIDczLCA3OCwgNjUsIDgyLCA3MywgODUsIDIxMSwgODEsIDg1LCA3MywgNzYsIDc2LCAKKyAgICAxMjgsIDgxLCA4NSwgNzMsIDEyOCwgODEsIDg1LCA3MCwgMTI4LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIAorICAgIDY5LCAxOTYsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgCisgICAgMjA2LCA4MSwgODUsIDY5LCA2OSwgNzgsIDEyOCwgODEsIDg1LCA2OSwgMTI4LCA4MSwgODUsIDY2LCA4NSwgODQsIDgzLCAKKyAgICAxMjgsIDgxLCA4NSwgNjUsIDg0LCA2OSwgODIsIDc4LCA3MywgNzksIDIwNiwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIAorICAgIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCAyMTEsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCAKKyAgICAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDIxMCwgODEsIDg1LCA2NSwgNzgsIDg0LCA3MywgODQsIDIxNywgODEsIAorICAgIDg1LCA2NSwgNjgsIDgyLCA4NSwgODAsIDc2LCAxOTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MSwgCisgICAgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgMjEyLCA4MSwgODUsIDY1LCA2OCwgMTI4LCA4MSwgODUsIDY1LCAxOTYsIDgxLCAKKyAgICA4NSwgNjUsIDEyOCwgODEsIDg1LCAxMjgsIDgxLCAyMDgsIDgxLCA3OSwgODgsIDEyOCwgODEsIDc5LCA4NCwgMTI4LCA4MSwgCisgICAgNzksIDgwLCA3MiwgMTI4LCA4MSwgNzksIDgwLCA2NSwgMTI4LCA4MSwgNzksIDgwLCAxMjgsIDgxLCA3OSwgNzksIDEyOCwgCisgICAgODEsIDc5LCAyMDcsIDgxLCA3OSwgNzAsIDEyOCwgODEsIDc5LCAxOTgsIDgxLCA3OSwgNjUsIDEyOCwgODEsIDc5LCAxMjgsIAorICAgIDgxLCA3OCwgMTI4LCA4MSwgNzMsIDg4LCAxMjgsIDgxLCA3MywgODQsIDgzLCA2NSwgMTI4LCA4MSwgNzMsIDg0LCAxMjgsIAorICAgIDgxLCA3MywgODAsIDEyOCwgODEsIDczLCA3MywgMTI4LCA4MSwgNzMsIDY5LCA4OCwgMTI4LCA4MSwgNzMsIDY5LCA4NCwgCisgICAgMTI4LCA4MSwgNzMsIDY5LCA4MCwgMTI4LCA4MSwgNzMsIDY5LCAxMjgsIDgxLCA3MywgMTI4LCA4MSwgNzIsIDg3LCA3MywgCisgICAgMTI4LCA4MSwgNzIsIDg3LCA2OSwgNjksIDEyOCwgODEsIDcyLCA4NywgNjksIDEyOCwgODEsIDcyLCA4NywgNjUsIDY1LCAKKyAgICAxMjgsIDgxLCA3MiwgODcsIDY1LCAxMjgsIDgxLCA3MiwgODUsIDEyOCwgODEsIDcyLCA3OSwgMTI4LCA4MSwgNzIsIDczLCAKKyAgICAxMjgsIDgxLCA3MiwgNjksIDY5LCAxMjgsIDgxLCA3MiwgNjksIDEyOCwgODEsIDcyLCA2NSwgNjUsIDEyOCwgODEsIDcyLCAKKyAgICA2NSwgMTI4LCA4MSwgNjksIDg0LCA2NSwgNzgsIDY1LCAxMjgsIDgxLCA2OSwgNjksIDEyOCwgODEsIDY5LCAxMjgsIDgxLCAKKyAgICA2NSwgODUsIDEyOCwgODEsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDgxLCA2NSwgODIsIDc4LCA2OSwgMjE3LCA4MSwgNjUsIAorICAgIDgyLCAxMjgsIDgxLCA2NSwgODEsIDEyOCwgODEsIDY1LCA4MCwgNzIsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCA4MywgCisgICAgMTI4LCA4MSwgNjUsIDc3LCA2NSwgODQsIDIxMSwgODEsIDY1LCA3NiwgMTkzLCA4MSwgNjUsIDczLCA4MiwgODQsIDcyLCAKKyAgICA4MiwgNjUsIDEyOCwgODEsIDY1LCA3MywgMTI4LCA4MSwgNjUsIDcwLCAxMjgsIDgxLCA2NSwgMTk4LCA4MSwgNjUsIDY4LCAKKyAgICA3NywgNjUsIDEyOCwgODEsIDY1LCA2NSwgNzMsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDgxLCA2NSwgNjUsIAorICAgIDcwLCAxMjgsIDgxLCA0OCwgNDgsIDU1LCAxMjgsIDgxLCA0OCwgNDgsIDU0LCAxMjgsIDgxLCA0OCwgNDgsIDUzLCAxMjgsIAorICAgIDgxLCA0OCwgNDgsIDUyLCAxMjgsIDgxLCA0OCwgNDgsIDUxLCAxMjgsIDgxLCA0OCwgNDgsIDUwLCAxMjgsIDgxLCA0OCwgCisgICAgNDgsIDQ5LCAxMjgsIDIwOSwgODAsIDkwLCAxMjgsIDgwLCA4OSwgODgsIDEyOCwgODAsIDg5LCA4NCwgMTI4LCA4MCwgODksIAorICAgIDgyLCA4OCwgMTI4LCA4MCwgODksIDgyLCAxMjgsIDgwLCA4OSwgODAsIDEyOCwgODAsIDg5LCAxMjgsIDgwLCA4NywgNzksIAorICAgIDg5LCAxMjgsIDgwLCA4NywgNzksIDc5LCAxMjgsIDgwLCA4NywgNzksIDEyOCwgODAsIDg3LCAyMDcsIDgwLCA4NywgNzMsIAorICAgIDczLCAxMjgsIDgwLCA4NywgNzMsIDEyOCwgODAsIDg3LCA2OSwgNjksIDEyOCwgODAsIDg3LCA2OSwgMTI4LCA4MCwgODcsIAorICAgIDY1LCA2NSwgMTI4LCA4MCwgODcsIDEyOCwgODAsIDg2LCAxMjgsIDgwLCA4NSwgODgsIDEyOCwgODAsIDg1LCA4NCwgMTI4LCAKKyAgICA4MCwgODUsIDgzLCA3MiwgODAsIDczLCA3NSwgNjUsIDEyOCwgODAsIDg1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MCwgODUsIAorICAgIDgyLCA4OCwgMTI4LCA4MCwgODUsIDgyLCA3MywgODQsIDg5LCAxMjgsIDgwLCA4NSwgODIsIDEyOCwgODAsIDg1LCA4MCwgCisgICAgMTI4LCA4MCwgODUsIDc5LCA4OCwgMTI4LCA4MCwgODUsIDc5LCA4MCwgMTI4LCA4MCwgODUsIDc5LCAxMjgsIDgwLCA4NSwgCisgICAgNzgsIDcxLCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDc4LCAKKyAgICA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODUsIDc3LCA4MCwgMTI4LCA4MCwgODUsIDY5LCAxMjgsIAorICAgIDgwLCA4NSwgNjUsIDY5LCAxMjgsIDgwLCA4NSwgNTAsIDEyOCwgODAsIDg1LCAxMjgsIDgwLCA4NCwgNzIsIDY1LCA3MiwgCisgICAgMTkzLCA4MCwgODQsIDY5LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCAKKyAgICA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgCisgICAgNjksIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCAyMDYsIDgwLCA4MywgNzMsIDcwLCAKKyAgICA3MywgODMsIDg0LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgMTI4LCA4MCwgODMsIAorICAgIDEyOCwgODAsIDgyLCA3OSwgODYsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDg0LCA3OSwgODYsIDY1LCA4MiwgODksIDIxMSwgCisgICAgODAsIDgyLCA3OSwgODQsIDc5LCAyMTEsIDgwLCA4MiwgNzksIDgzLCA3MSwgNjksIDcxLCA4MiwgNjUsIDc3LCA3NywgNjksIAorICAgIDc4LCA3MywgMTI4LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDgyLCA3OSwgCisgICAgODAsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgODAsIDY5LCA4MiwgODQsIDIxNywgODAsIDgyLCAKKyAgICA3OSwgODAsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDgwLCA4MiwgNzksIDc5LCA3MCwgMTI4LCA4MCwgODIsIDc5LCA3NiwgNzksIAorICAgIDc4LCA3MSwgNjksIDE5NiwgODAsIDgyLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTk3LCA4MCwgODIsIDc5LCA3NCwgCisgICAgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA4MCwgODIsIDc5LCA3MSwgODIsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3OSwgNzAsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIAorICAgIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDIxMiwgODAsIDgyLCA3MywgCisgICAgODYsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA3MywgODMsIDcyLCA4NCwgNzIsIDY1LCA3NywgNjUsIDg0LCA4MiwgMTkzLCAKKyAgICA4MCwgODIsIDczLCA3OCwgODQsIDEyOCwgODAsIDgyLCA3MywgNzgsIDIxMiwgODAsIDgyLCA3MywgNzcsIDY5LCAxMjgsIAorICAgIDgwLCA4MiwgNzMsIDc3LCAxOTcsIDgwLCA4MiwgNjksIDg2LCA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNjksIDgzLCA2OSwgCisgICAgNzgsIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgNzksIAorICAgIDIwNiwgODAsIDgyLCA2OSwgODAsIDc5LCA3OCwgNjgsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgODAsIDgyLCA2OSwgCisgICAgNzgsIDc1LCA3MiwgNjUsIDEyOCwgODAsIDgyLCA2OSwgNzAsIDY1LCA2NywgMTk3LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCAKKyAgICA3MywgNzgsIDE5OSwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDgzLCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIAorICAgIDY5LCAyMTEsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAxOTYsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAKKyAgICAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDE5NywgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIDczLCAxMjgsIAorICAgIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCAyMDEsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgODksIDEyOCwgCisgICAgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCAyMTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgNzgsIAorICAgIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCAyMDYsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCA3MywgCisgICAgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgMjAxLCA4MCwgODIsIDY1LCA3NywgMTI4LCA4MCwgODIsIDY1LCAKKyAgICAyMDUsIDgwLCA4MiwgMTI4LCA4MCwgODAsIDg2LCAxMjgsIDgwLCA4MCwgNzcsIDEyOCwgODAsIDgwLCA2NSwgMTI4LCA4MCwgCisgICAgNzksIDg5LCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgODAsIDc5LCA4NywgNjksIDgyLCAyMTEsIDgwLCA3OSwgODcsIDY5LCAKKyAgICA4MiwgMTI4LCA4MCwgNzksIDg1LCA3OCwgMTk2LCA4MCwgNzksIDgzLCA4NCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIAorICAgIDIwNiwgODAsIDc5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA3OSwgODMsIDgzLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIAorICAgIDg1LCAyMTEsIDgwLCA3OSwgODAsIDEyOCwgODAsIDc5LCAyMDgsIDgwLCA3OSwgNzksIDEyOCwgODAsIDc5LCA3OCwgNjgsIAorICAgIDc5LCAxMjgsIDgwLCA3OSwgNzYsIDIwMSwgODAsIDc5LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3NSwgODIsIDg5LCA4NCwgCisgICAgNzMsIDY5LCAxMjgsIDgwLCA3OSwgNzUsIDc5LCA3NCwgNzMsIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCA3OSwgMTI4LCAKKyAgICA4MCwgNzksIDczLCA3OCwgODQsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDgwLCA3OSwgNzMsIAorICAgIDc4LCA4NCwgMTI4LCA4MCwgNzksIDczLCA3OCwgMjEyLCA4MCwgNzksIDY5LCA4NCwgODIsIDIxNywgODAsIDc5LCA2OSwgCisgICAgODQsIDczLCAxOTUsIDgwLCA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgNjUsIDEyOCwgODAsIDc5LCAKKyAgICAxMjgsIDgwLCAyMDcsIDgwLCA3OCwgNjksIDg1LCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MCwgNzYsIDg1LCA4NCwgNzksIAorICAgIDEyOCwgODAsIDc2LCA4NSwgODMsIDQ1LCA3NywgNzMsIDc4LCA4NSwgMjExLCA4MCwgNzYsIDg1LCA4MywgMTI4LCA4MCwgCisgICAgNzYsIDg1LCA3NywgNjksIDE5NiwgODAsIDc2LCA4NSwgNzcsIDEyOCwgODAsIDc2LCA4NSwgNzUsIDEyOCwgODAsIDc2LCAKKyAgICA3OSwgODcsIDEyOCwgODAsIDc2LCA3OSwgODAsIDcyLCA4NSwgMTI4LCA4MCwgNzYsIDY5LCA4NCwgNzIsIDgyLCA3OSwgNzgsIAorICAgIDEyOCwgODAsIDc2LCA2NSwgODMsIDg0LCA3MywgNjcsIDgzLCAxMjgsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA4MCwgCisgICAgNzYsIDY1LCA3OCwgMTk3LCA4MCwgNzYsIDY1LCA3OCwgNjcsIDIwMywgODAsIDc2LCA2NSwgNzUsIDEyOCwgODAsIDc2LCAKKyAgICA2NSwgNzEsIDczLCA3OSwgMjExLCA4MCwgNzYsIDY1LCA2NywgNjksIDcyLCA3OSwgNzYsIDY4LCA2OSwgMjEwLCA4MCwgNzYsIAorICAgIDY1LCA2NywgMTk3LCA4MCwgNzYsIDY1LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA3MywgNjcsIDY1LCA4NCwgNzksIDEyOCwgCisgICAgODAsIDczLCA4OCwgMTI4LCA4MCwgNzMsIDg3LCA4MiwgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIDcwLCA3OSwgODIsIDc1LCAKKyAgICAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgMjAzLCA4MCwgNzMsIDg0LCAxMjgsIDgwLCA3MywgODMsIAorICAgIDY5LCA3NiwgNjksIDcyLCAxMjgsIDgwLCA3MywgODMsIDY3LCA2OSwgODMsIDEyOCwgODAsIDczLCA4MiwgNzMsIDcxLCAKKyAgICAxMjgsIDgwLCA3MywgODIsIDczLCAxOTksIDgwLCA3MywgODAsIDczLCA3OCwgNzEsIDEyOCwgODAsIDczLCA4MCwgMTI4LCAKKyAgICA4MCwgNzMsIDc4LCA4NywgNzIsIDY5LCA2OSwgMjA0LCA4MCwgNzMsIDc2LCA2NywgODIsIDc5LCAyMTUsIDgwLCA3MywgNzUsIAorICAgIDg1LCA4MiwgODUsIDEyOCwgODAsIDczLCA3NSwgNzksIDEyOCwgODAsIDczLCA3MSwgMTI4LCA4MCwgNzMsIDY5LCA4OCwgCisgICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCAKKyAgICA4NSwgODAsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgCisgICAgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCAKKyAgICA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgCisgICAgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCAKKyAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgCisgICAgODAsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzgsIDczLCA2OSwgODUsIAorICAgIDc4LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgCisgICAgODAsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzMsIAorICAgIDY5LCA4NSwgNjcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgCisgICAgODAsIDczLCA2OSwgODUsIDIwOCwgODAsIDczLCA2OSwgODAsIDEyOCwgODAsIDczLCA2OSwgNjcsIDY5LCAxMjgsIDgwLCAKKyAgICA3MywgNjksIDEyOCwgODAsIDczLCA2NywgNzUsIDEyOCwgODAsIDczLCA2NSwgODMsIDg1LCA4NCwgNzksIDgyLCA4NSwgCisgICAgMTI4LCA4MCwgNzMsIDY1LCA4MywgNzcsIDE5MywgODAsIDczLCA2NSwgNzgsIDc5LCAxMjgsIDgwLCAyMDEsIDgwLCA3MiwgCisgICAgODcsIDY1LCAxMjgsIDgwLCA3MiwgODUsIDg0LCA3MiwgNjUsIDc5LCAxMjgsIDgwLCA3MiwgODUsIDIxMCwgODAsIDcyLCAKKyAgICA4NSwgNzgsIDcxLCAxMjgsIDgwLCA3MiwgODIsIDY1LCA4MywgNjksIDEyOCwgODAsIDcyLCA3OSwgNjksIDc4LCA3MywgNjcsIAorICAgIDczLCA2NSwgMjA2LCA4MCwgNzIsIDc5LCA2NSwgMTI4LCA4MCwgNzIsIDc5LCAxMjgsIDgwLCA3MiwgMjA3LCA4MCwgNzIsIAorICAgIDc4LCA2NSwgNjksIDIwMywgODAsIDcyLCA3MywgNzgsIDg0LCA3MiwgODUsIDEyOCwgODAsIDcyLCA3MywgNzYsIDczLCA4MCwgCisgICAgODAsIDczLCA3OCwgMTk3LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIAorICAgIDcyLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDcyLCA3MywgCisgICAgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAorICAgIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgMjAwLCA4MCwgNzIsIDczLCAKKyAgICAxMjgsIDgwLCA3MiwgMjAxLCA4MCwgNzIsIDY5LCA2OSwgMTI4LCA4MCwgNzIsIDY5LCAxMjgsIDgwLCA3MiwgNjUsIDgyLCAKKyAgICA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgODAsIDcyLCA2NSwgODIsIDEyOCwgODAsIDcyLCA2NSwgNzgsIDEyOCwgODAsIAorICAgIDcyLCA2NSwgNzcsIDEyOCwgODAsIDcyLCA2NSwgNzMsIDgzLCA4NCwgNzksIDIxMSwgODAsIDcyLCA2NSwgNzEsIDgzLCA0NSwgCisgICAgODAsIDE5MywgODAsIDcyLCA2NSwgNjUsIDgyLCA3NSwgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDY1LCAxMjgsIDgwLCAKKyAgICA3MiwgNjUsIDEyOCwgODAsIDcxLCAxMjgsIDgwLCA3MCwgMTI4LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA4MCwgNjksIDg0LCAKKyAgICA2NSwgODMsIDg0LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgCisgICAgODQsIDczLCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA3NiwgNzYsIDY5LCAKKyAgICAxOTYsIDgwLCA2OSwgODMsIDc5LCAxMjgsIDgwLCA2OSwgODMsIDIwNywgODAsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgwLCAKKyAgICA2OSwgODMsIDY5LCA4NCwgMTkzLCA4MCwgNjksIDIxMSwgODAsIDY5LCA4MiwgODQsIDcyLCAyMDcsIDgwLCA2OSwgODIsIAorICAgIDgzLCA4MCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgCisgICAgODIsIDgzLCA3OSwgMjA2LCA4MCwgNjksIDgyLCA4MywgNzMsIDY1LCAyMDYsIDgwLCA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCAKKyAgICA3MywgNjcsIDg1LCA3NiwgNjUsIDgyLCAxMjgsIDgwLCA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgCisgICAgNjUsIDIxMCwgODAsIDY5LCA4MiwgNzcsIDY1LCA3OCwgNjksIDc4LCAyMTIsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCAKKyAgICA3NywgNjksIDc4LCA3MywgMTI4LCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgMjAxLCA4MCwgNjksIAorICAgIDgyLCA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAxMjgsIDgwLCA2OSwgCisgICAgODIsIDcwLCA2OSwgNjcsIDg0LCAxOTMsIDgwLCA2OSwgODIsIDY3LCA4NSwgODMsIDgzLCA3MywgODYsIDY5LCAxMjgsIDgwLCAKKyAgICA2OSwgODIsIDY3LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MCwgNjksIDg0LCAxMjgsIDgwLCA2OSwgODAsIDY5LCAyMTIsIAorICAgIDgwLCA2OSwgNzksIDgyLCA4NCwgMjAwLCA4MCwgNjksIDc4LCA4NCwgNjUsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDgwLCA2OSwgCisgICAgNzgsIDg0LCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA4MywgODUsIDEyOCwgODAsIDY5LCA3OCwgNzgsIAorICAgIDIxNywgODAsIDY5LCA3OCwgNzMsIDcyLCA3MywgMTI4LCA4MCwgNjksIDc4LCA3MSwgNzUsIDY1LCA3NiwgMTI4LCA4MCwgCisgICAgNjksIDc4LCA2OSwgODQsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgNjcsIDczLCA3NiwgMTI4LCAKKyAgICA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIDIwNiwgODAsIAorICAgIDY5LCA3MywgODQsIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgMjAwLCA4MCwgCisgICAgNjksIDcyLCAxMjgsIDgwLCA2OSwgMjAwLCA4MCwgNjksIDY5LCA5MCwgNzMsIDEyOCwgODAsIDY5LCA2OSwgODAsIDEyOCwgCisgICAgODAsIDY5LCA2OSwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCA3OCwgMTI4LCA4MCwgNjksIDY4LCAKKyAgICA2OSwgODMsIDg0LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDY5LCA2OCwgNjUsIAorICAgIDIwNCwgODAsIDY5LCA2NSwgNjcsIDY5LCAxMjgsIDgwLCA2OSwgNjUsIDY3LCAxOTcsIDgwLCA2OCwgMTI4LCA4MCwgNjcsIAorICAgIDEyOCwgODAsIDY1LCA5MCwgNjksIDgyLCAxMjgsIDgwLCA2NSwgODksIDY5LCA4MiwgNzksIDc1LCAxMjgsIDgwLCA2NSwgCisgICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgwLCA2NSwgODksIDEyOCwgODAsIDY1LCA4OCwgMTI4LCA4MCwgNjUsIDg3LCAKKyAgICA3OCwgMTI4LCA4MCwgNjUsIDIxNSwgODAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDgwLCA2NSwgODQsIAorICAgIDg0LCA2OSwgODIsIDc4LCAxMjgsIDgwLCA2NSwgODQsIDcyLCA2NSwgNzcsIDY1LCA4MywgNjUsIDg0LCAxMjgsIDgwLCA2NSwgCisgICAgODQsIDIwMCwgODAsIDY1LCA4NCwgNjUsIDc1LCAxMjgsIDgwLCA2NSwgODQsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDg0LCAKKyAgICAxMjgsIDgwLCA2NSwgODMsIDg1LCA4MSwgMTI4LCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCA2OSwgNDUsIDgwLCA4NSwgNzYsIAorICAgIDc2LCA0NSwgODUsIDgwLCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDgwLCA2NSwgODMsIDgzLCA3MywgODYsIDY5LCAKKyAgICA0NSwgODAsIDg1LCA3NiwgNzYsIDQ1LCA2OCwgNzksIDg3LCA3OCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgCisgICAgNjUsIDgzLCA3MiwgODQsIDY1LCAxMjgsIDgwLCA2NSwgODMsIDY5LCA4MSwgMTI4LCA4MCwgNjUsIDgyLCA4NCwgNzgsIDY5LCAKKyAgICA4MiwgODMsIDcyLCA3MywgMjA4LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDY1LCA3NiwgNzYsIDg5LCA0NSwgODIsIDY5LCA2NywgCisgICAgODksIDY3LCA3NiwgNjksIDE5NiwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgMjA0LCA4MCwgNjUsIDgyLCA4NCwgNzIsIDczLCAKKyAgICA2NSwgMjA2LCA4MCwgNjUsIDgyLCAyMTIsIDgwLCA2NSwgODIsIDczLCA2NywgNzIsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIAorICAgIDgyLCA2OSwgODMsIDg0LCA3MywgNzEsIDc3LCA2OSwgNzgsIDc5LCAyMDYsIDgwLCA2NSwgODIsIDY5LCA4MiwgNjksIDc4LCAKKyAgICAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIAorICAgIDg0LCA3MiwgNjksIDgzLCA3MywgMjExLCA4MCwgNjUsIDgyLCA2NSwgODAsIDcyLCA4MiwgNjUsIDgzLCAxOTcsIDgwLCA2NSwgCisgICAgODIsIDY1LCA3NiwgNzYsIDY5LCA3NiwgNzksIDcxLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIAorICAgIDY5LCA3NiwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgMjA0LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDc2LCA3MywgCisgICAgODQsIDczLCA3NSwgNzMsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDIwMSwgODAsIDY1LCAKKyAgICA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDE5MywgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNzksIDgzLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDcxLCAKKyAgICA4MiwgNjUsIDgwLCAyMDAsIDgwLCA2NSwgODIsIDY1LCAxMjgsIDgwLCA2NSwgODIsIDEyOCwgODAsIDY1LCA4MCwgODksIAorICAgIDgyLCA4NSwgODMsIDEyOCwgODAsIDY1LCA4MCwgNjksIDIxMCwgODAsIDY1LCA4MCwgMTI4LCA4MCwgNjUsIDIwOCwgODAsIAorICAgIDY1LCAyMDcsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA3MywgNzUsIDg1LCAKKyAgICAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc4LCA3MSwgNzEsIAorICAgIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4NCwgNzMsIDEyOCwgCisgICAgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDY1LCA3OCwgODMsIAorICAgIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKKyAgICA4MCwgNjUsIDc4LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDg3LCA3MywgODMsIDY1LCA2OCwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODIsIDY1LCA3OCwgNzEsIDc1LCA2OSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc2LCAKKyAgICA2NSwgODksIDY1LCA4MiwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzUsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzUsIAorICAgIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzIsIDg1LCA3NiwgODUsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDEyOCwgCisgICAgODAsIDY1LCA3OCwgNjksIDg1LCA3NiwgNjksIDg1LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNjUsIDY5LCA3NiwgNjUsIAorICAgIDY5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNzgsIDcxLCA3NSwgNjUsIDcyLCAKKyAgICAxMjgsIDgwLCA2NSwgNzcsIDg1LCA2OCwgODAsIDc5LCA2OCwgMTI4LCA4MCwgNjUsIDc3LCA4MCwgNzIsIDg5LCA3NiwgNzMsIAorICAgIDY1LCAyMDYsIDgwLCA2NSwgNzcsIDczLCA3OCwgNzEsIDc1LCA2NSwgNzYsIDEyOCwgODAsIDY1LCA3NywgNjksIDgwLCA2OSwgCisgICAgODQsIDEyOCwgODAsIDY1LCA3NywgNjksIDc4LCA2OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzcsIDY1LCA2OCwgNjUsIAorICAgIDEyOCwgODAsIDY1LCA3NywgNjUsIDY1LCA2OSwgNzIsIDEyOCwgODAsIDY1LCA3NiwgODUsIDg0LCA2NSwgMTI4LCA4MCwgCisgICAgNjUsIDc2LCA3OSwgNjcsIDcyLCA3NSwgNjUsIDEyOCwgODAsIDY1LCA3NiwgMjA1LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDg3LCAKKyAgICA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDgzLCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NSwgNzgsIDE5OSwgODAsIAorICAgIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCA5MCwgNjksIDE5NiwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCAKKyAgICA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDIwNCwgODAsIDY1LCA3MywgODksIAorICAgIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIDEyOCwgODAsIDY1LCA3MywgCisgICAgODIsIDY5LCAxOTYsIDgwLCA2NSwgNzIsIDc2LCA2NSwgODYsIDIwMSwgODAsIDY1LCA2OCwgNzcsIDE5MywgODAsIDY1LCAKKyAgICA2OCwgMTkzLCA4MCwgNjUsIDY4LCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjUsIAorICAgIDg0LCA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODAsIDY1LCA2NSwgNzMsIDEyOCwgCisgICAgODAsIDY1LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA4MCwgNjUsIDY1LCAxMjgsIDgwLCA1MCwgMTI4LCAKKyAgICA4MCwgNDgsIDQ5LCA0OSwgMTI4LCA4MCwgNDgsIDQ5LCA0OCwgMTI4LCA4MCwgNDgsIDQ4LCA1NywgMTI4LCA4MCwgNDgsIAorICAgIDQ4LCA1NiwgMTI4LCA4MCwgNDgsIDQ4LCA1NSwgMTI4LCA4MCwgNDgsIDQ4LCA1NCwgMTI4LCA4MCwgNDgsIDQ4LCA1MywgCisgICAgMTI4LCA4MCwgNDgsIDQ4LCA1MiwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNTEsIDEyOCwgCisgICAgODAsIDQ4LCA0OCwgNTAsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCAKKyAgICA4OSwgODIsIDY1LCA3OCwgNzMsIDgzLCA3NywgMTkzLCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA4OCwgNzMsIAorICAgIDY1LCAxMjgsIDc5LCA4OCwgNzMsIDE5MywgNzksIDg4LCA2OSwgNzMsIDY1LCAyMDEsIDc5LCA4OCwgNjksIDczLCAxOTMsIAorICAgIDc5LCA4NiwgNjksIDgyLCA4MiwgNzMsIDY4LCA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDc5LCA3OCwgMTk5LCA3OSwgCisgICAgODYsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgODksIDEyOCwgNzksIDg2LCAKKyAgICA2OSwgODIsIDc2LCA2NSwgODAsIDgwLCA3MywgNzgsIDE5OSwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgNzMsIDY4LCAxMjgsIAorICAgIDc5LCA4NiwgNjksIDgyLCA2NiwgNjUsIDgyLCAxMjgsIDc5LCA4NiwgNjUsIDIwNCwgNzksIDg2LCAxMjgsIDc5LCA4NSwgCisgICAgODQsIDc2LCA3MywgNzgsIDY5LCAxOTYsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc5LCA4NSwgODQsIDY5LCAKKyAgICAyMTAsIDc5LCA4NSwgNzgsIDc1LCA3MywgMTkzLCA3OSwgODUsIDc4LCA2NywgMTk3LCA3OSwgODQsIDg1LCAxMjgsIDc5LCAKKyAgICA4NCwgODQsIDY1LCA4NiwgMTkzLCA3OSwgODQsIDg0LCAxMjgsIDc5LCA4NCwgNzIsIDY1LCA3NiwgNjUsIDIwNiwgNzksIAorICAgIDg0LCA3MiwgNjUsIDc2LCAxMjgsIDc5LCA4MywgNzcsIDY1LCA3OCwgODksIDE5MywgNzksIDgyLCA4NCwgNzIsIDc5LCA3MSwgCisgICAgNzksIDc4LCA2NSwgMjA0LCA3OSwgODIsIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODIsIDc4LCA2NSwgODQsIAorICAgIDE5NywgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCAKKyAgICAyMTIsIDc5LCA4MiwgNzUsIDcyLCA3OSwgMjA2LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIAorICAgIDczLCA3MSwgNzMsIDc4LCAxMjgsIDc5LCA4MiwgNjgsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCA2NywgNzIsIDczLCA2OCwgCisgICAgMTI4LCA3OSwgODAsIDg0LCA3MywgNzksIDIwNiwgNzksIDgwLCA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgNzksIDgwLCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzksIDgwLCA4MCwgNzksIDgzLCA3MywgCisgICAgNzgsIDE5OSwgNzksIDgwLCA4MCwgNzksIDgzLCA2OSwgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgODIsIAorICAgIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIDIxMCwgNzksIDgwLCA2OSwgNzgsIDczLCA3OCwgMTk5LCA3OSwgCisgICAgODAsIDY5LCA3OCwgNDUsIDgwLCAxMjgsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIAorICAgIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCA2NywgCisgICAgNzMsIDgyLCA2NywgODUsIDczLCA4NCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA3OSwgODAsIDY5LCAyMDYsIDc5LCAKKyAgICA3OSwgOTAsIDY5LCAxMjgsIDc5LCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA3OSwgODUsIDEyOCwgNzksIAorICAgIDc5LCA3NywgODUsIDEyOCwgNzksIDc5LCA2NiwgNzksIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgNzgsIDg1LCAKKyAgICAxMjgsIDc5LCA3OCwgODMsIDg1LCAxMjgsIDc5LCA3OCwgNzgsIDEyOCwgNzksIDc4LCA3NSwgNjUsIDgyLCAxMjgsIDc5LCAKKyAgICA3OCwgNjksIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA4NywgNjUsIDIxNywgNzksIDc4LCA2OSwgNDUsIAorICAgIDc2LCA3MywgNzgsIDE5NywgNzksIDc4LCA2NSwgODAsIDEyOCwgNzksIDc3LCA3MywgODMsIDgzLCA3MywgNzksIDIwNiwgCisgICAgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgMjA2LCA3OSwgNzcsIDY5LCAKKyAgICA3MSwgNjUsIDEyOCwgNzksIDc3LCA2OSwgNzEsIDE5MywgNzksIDc3LCA2NSwgNzYsIDc5LCA3OCwgMTI4LCA3OSwgNzcsIAorICAgIDEyOCwgNzksIDc2LCA3MywgODYsIDY5LCAxMjgsIDc5LCA3NiwgNzMsIDcxLCA3OSwgMjA2LCA3OSwgNzYsIDY4LCAxMjgsIAorICAgIDc5LCA3NSwgODQsIDIwNywgNzksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCAxOTMsIDc5LCA3NCwgCisgICAgNzMsIDY2LCA4NywgNjUsIDIxNywgNzksIDc0LCA2OSwgNzksIDc4LCAxMjgsIDc5LCA3MywgNzYsIDEyOCwgNzksIDcyLCAKKyAgICA3NywgMTI4LCA3OSwgNzIsIDIwNSwgNzksIDcyLCAxMjgsIDc5LCA3MSwgNzksIDc4LCA2OSwgNzUsIDEyOCwgNzksIDcxLCAKKyAgICA3OSwgNzgsIDY5LCAyMDMsIDc5LCA3MSwgNzIsIDY1LCAyMDUsIDc5LCA2OSwgNzUsIDEyOCwgNzksIDY4LCAxOTYsIDc5LCAKKyAgICA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAxMjgsIDc5LCA2NywgMjEwLCA3OSwgNjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzksIAorICAgIDc4LCAxMjgsIDc5LCA2NiwgODMsIDg0LCA4MiwgODUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OSwgNjYsIDc5LCA3NiwgCisgICAgMjExLCA3OSwgNjYsIDc5LCAyMDQsIDc5LCA2NiwgNzksIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCA2NiwgNzYsIDczLCAKKyAgICA4MSwgODUsIDE5NywgNzksIDY2LCA3NCwgNjksIDY3LCAyMTIsIDc5LCA2NiwgNjksIDc2LCA4NSwgODMsIDEyOCwgNzksIAorICAgIDY2LCA2OSwgNzYsIDc5LCA4MywgMTI4LCA3OSwgNjYsIDEyOCwgNzksIDY1LCA4OSwgMTI4LCA3OSwgNjUsIDc1LCAxMjgsIAorICAgIDc5LCA2NSwgNjYsIDc5LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDE5MywgNzksIDQ4LCA1MywgNDksIDEyOCwgCisgICAgNzksIDQ4LCA1MywgNDgsIDY2LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgMTI4LCAKKyAgICA3OSwgNDgsIDUyLCA1NywgMTI4LCA3OSwgNDgsIDUyLCA1NiwgMTI4LCA3OSwgNDgsIDUyLCA1NSwgMTI4LCA3OSwgNDgsIAorICAgIDUyLCA1NCwgMTI4LCA3OSwgNDgsIDUyLCA1MywgMTI4LCA3OSwgNDgsIDUyLCA1MiwgMTI4LCA3OSwgNDgsIDUyLCA1MSwgCisgICAgMTI4LCA3OSwgNDgsIDUyLCA1MCwgMTI4LCA3OSwgNDgsIDUyLCA0OSwgMTI4LCA3OSwgNDgsIDUyLCA0OCwgMTI4LCA3OSwgCisgICAgNDgsIDUxLCA1NywgMTI4LCA3OSwgNDgsIDUxLCA1NiwgMTI4LCA3OSwgNDgsIDUxLCA1NSwgMTI4LCA3OSwgNDgsIDUxLCAKKyAgICA1NCwgNjgsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIAorICAgIDUxLCA1NCwgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDEyOCwgNzksIDQ4LCA1MSwgNTMsIDEyOCwgNzksIDQ4LCA1MSwgCisgICAgNTIsIDEyOCwgNzksIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDUxLCAxMjgsIDc5LCA0OCwgNTEsIDUwLCAKKyAgICAxMjgsIDc5LCA0OCwgNTEsIDQ5LCAxMjgsIDc5LCA0OCwgNTEsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA0OCwgMTI4LCAKKyAgICA3OSwgNDgsIDUwLCA1NywgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTcsIDEyOCwgNzksIDQ4LCA1MCwgNTYsIDEyOCwgNzksIAorICAgIDQ4LCA1MCwgNTUsIDEyOCwgNzksIDQ4LCA1MCwgNTQsIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNTAsIDUzLCAxMjgsIDc5LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1MiwgMTI4LCA3OSwgNDgsIDUwLCAKKyAgICA1MSwgMTI4LCA3OSwgNDgsIDUwLCA1MCwgMTI4LCA3OSwgNDgsIDUwLCA0OSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgNjUsIAorICAgIDEyOCwgNzksIDQ4LCA1MCwgNDgsIDEyOCwgNzksIDQ4LCA0OSwgNTcsIDY1LCAxMjgsIDc5LCA0OCwgNDksIDU3LCAxMjgsIAorICAgIDc5LCA0OCwgNDksIDU2LCAxMjgsIDc5LCA0OCwgNDksIDU1LCAxMjgsIDc5LCA0OCwgNDksIDU0LCAxMjgsIDc5LCA0OCwgCisgICAgNDksIDUzLCAxMjgsIDc5LCA0OCwgNDksIDUyLCAxMjgsIDc5LCA0OCwgNDksIDUxLCAxMjgsIDc5LCA0OCwgNDksIDUwLCAKKyAgICAxMjgsIDc5LCA0OCwgNDksIDQ5LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NywgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjYsIAorICAgIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCAxMjgsIDc5LCA0OCwgNDgsIDU3LCAxMjgsIAorICAgIDc5LCA0OCwgNDgsIDU2LCAxMjgsIDc5LCA0OCwgNDgsIDU1LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA3MCwgMTI4LCA3OSwgCisgICAgNDgsIDQ4LCA1NCwgNjksIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY4LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NywgMTI4LCAKKyAgICA3OSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCAxMjgsIAorICAgIDc5LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA1MywgMTI4LCA3OSwgNDgsIDQ4LCA1MiwgMTI4LCA3OSwgCisgICAgNDgsIDQ4LCA1MSwgMTI4LCA3OSwgNDgsIDQ4LCA1MCwgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA0OCwgNDksIDEyOCwgNzksIDQ1LCA4OSwgNjksIDEyOCwgNzksIDQ1LCA3OSwgNDUsIDczLCAxMjgsIDc5LCA0NSwgNjksIAorICAgIDEyOCwgNzgsIDkwLCA4OSwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODQsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDg4LCAxMjgsIAorICAgIDc4LCA5MCwgODksIDgyLCAxMjgsIDc4LCA5MCwgODksIDgwLCAxMjgsIDc4LCA5MCwgODksIDEyOCwgNzgsIDkwLCA4NSwgCisgICAgODgsIDEyOCwgNzgsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA5MCwgODUsIDgyLCAxMjgsIDc4LCA5MCwgODUsIDgwLCAKKyAgICAxMjgsIDc4LCA5MCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgMTI4LCA3OCwgOTAsIDg1LCAxMjgsIDc4LCAKKyAgICA5MCwgNzksIDg4LCAxMjgsIDc4LCA5MCwgNzksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDg4LCAxMjgsIDc4LCA5MCwgNzMsIAorICAgIDg0LCAxMjgsIDc4LCA5MCwgNzMsIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgCisgICAgODAsIDEyOCwgNzgsIDkwLCA3MywgNjksIDEyOCwgNzgsIDkwLCA3MywgMTI4LCA3OCwgOTAsIDY5LCA4OCwgMTI4LCA3OCwgCisgICAgOTAsIDY5LCAxMjgsIDc4LCA5MCwgNjUsIDg4LCAxMjgsIDc4LCA5MCwgNjUsIDg0LCAxMjgsIDc4LCA5MCwgNjUsIDgwLCAKKyAgICAxMjgsIDc4LCA5MCwgNjUsIDEyOCwgNzgsIDg5LCA4NywgNjUsIDEyOCwgNzgsIDg5LCA4NSwgODgsIDEyOCwgNzgsIDg5LCAKKyAgICA4NSwgODQsIDEyOCwgNzgsIDg5LCA4NSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgODUsIAorICAgIDc5LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCAxMjgsIDc4LCA4OSwgNzksIDg4LCAxMjgsIAorICAgIDc4LCA4OSwgNzksIDg0LCAxMjgsIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCA4OSwgNzksIDc5LCAxMjgsIDc4LCA4OSwgCisgICAgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDEyOCwgNzgsIDg5LCA3NCwgNjUsIDEyOCwgNzgsIDg5LCA3MywgODgsIDEyOCwgCisgICAgNzgsIDg5LCA3MywgODQsIDEyOCwgNzgsIDg5LCA3MywgMjExLCA3OCwgODksIDczLCA4MCwgMTI4LCA3OCwgODksIDczLCAKKyAgICA3OCwgNDUsIDY4LCA3OSwgMTI4LCA3OCwgODksIDczLCA2OSwgODgsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg0LCAxMjgsIAorICAgIDc4LCA4OSwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgODksIDczLCA2OSwgMTI4LCA3OCwgODksIDczLCAxMjgsIDc4LCA4OSwgCisgICAgMjAxLCA3OCwgODksIDY5LCAyMTIsIDc4LCA4OSwgNjksIDcyLCAxMjgsIDc4LCA4OSwgNjksIDIwMCwgNzgsIDg5LCA2OSwgCisgICAgNjksIDEyOCwgNzgsIDg5LCA2OSwgMTI4LCA3OCwgODksIDE5NiwgNzgsIDg5LCA2NywgNjUsIDEyOCwgNzgsIDg5LCA2NSwgCisgICAgNjUsIDEyOCwgNzgsIDg3LCA3OSwgNzksIDEyOCwgNzgsIDg3LCA3OSwgMTI4LCA3OCwgODcsIDczLCA3MywgMTI4LCA3OCwgCisgICAgODcsIDczLCAxMjgsIDc4LCA4NywgNjksIDEyOCwgNzgsIDg3LCA2NSwgNjUsIDEyOCwgNzgsIDg3LCA2NSwgMTI4LCA3OCwgCisgICAgODcsIDEyOCwgNzgsIDg2LCAxMjgsIDc4LCA4NSwgODgsIDEyOCwgNzgsIDg1LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCA4NCwgCisgICAgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODUsIDgyLCAKKyAgICAxMjgsIDc4LCA4NSwgODAsIDEyOCwgNzgsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDg1LCA3OSwgODAsIDEyOCwgNzgsIDg1LCAKKyAgICA3OSwgMTI4LCA3OCwgODUsIDc4LCA4NSwgOTAsIDEyOCwgNzgsIDg1LCA3OCwgODUsIDIxOCwgNzgsIDg1LCA3OCwgNzEsIAorICAgIDEyOCwgNzgsIDg1LCA3OCwgNjUsIDg2LCA4NSwgMjEyLCA3OCwgODUsIDc4LCA2NSwgODYsIDczLCAyMDMsIDc4LCA4NSwgCisgICAgNzgsIDEyOCwgNzgsIDg1LCAyMDYsIDc4LCA4NSwgNzcsIDY5LCA4MiwgMjA3LCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCAKKyAgICA4NCwgNzksIDIxMCwgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgMjA0LCA3OCwgODUsIDc3LCA2NiwgNjksIDgyLCAxMjgsIAorICAgIDc4LCA4NSwgNzcsIDEyOCwgNzgsIDg1LCA3NiwgNzYsIDEyOCwgNzgsIDg1LCA3NiwgMjA0LCA3OCwgODUsIDc1LCA4NCwgCisgICAgNjUsIDEyOCwgNzgsIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCA2NiwgNzMsIDY1LCAKKyAgICAyMDYsIDc4LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA1MCwgNjUsIAorICAgIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgCisgICAgNDgsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NiwgNjUsIDEyOCwgNzgsIDg1LCAKKyAgICA0OCwgNDksIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIAorICAgIDg1LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTEsIDEyOCwgCisgICAgNzgsIDg1LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ5LCAKKyAgICAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA4NSwgNDgsIAorICAgIDQ4LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA4NSwgCisgICAgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUyLCAxMjgsIDc4LCAKKyAgICA4NSwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDQ5LCAxMjgsIAorICAgIDc4LCA4NCwgODUsIDg1LCAxMjgsIDc4LCA4NCwgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDY1LCAxMjgsIDc4LCA4MiwgCisgICAgODksIDg4LCAxMjgsIDc4LCA4MiwgODksIDg0LCAxMjgsIDc4LCA4MiwgODksIDgyLCA4OCwgMTI4LCA3OCwgODIsIDg5LCAKKyAgICA4MiwgMTI4LCA3OCwgODIsIDg5LCA4MCwgMTI4LCA3OCwgODIsIDg5LCAxMjgsIDc4LCA4MiwgODUsIDg4LCAxMjgsIDc4LCAKKyAgICA4MiwgODUsIDg0LCAxMjgsIDc4LCA4MiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgMTI4LCA3OCwgODIsIAorICAgIDg1LCA4MCwgMTI4LCA3OCwgODIsIDg1LCAxMjgsIDc4LCA4MiwgNzksIDg4LCAxMjgsIDc4LCA4MiwgNzksIDgwLCAxMjgsIAorICAgIDc4LCA4MiwgNzksIDEyOCwgNzgsIDgyLCA2OSwgODgsIDEyOCwgNzgsIDgyLCA2OSwgODQsIDEyOCwgNzgsIDgyLCA2OSwgCisgICAgODAsIDEyOCwgNzgsIDgyLCA2OSwgMTI4LCA3OCwgODIsIDY1LCA4OCwgMTI4LCA3OCwgODIsIDY1LCA4NCwgMTI4LCA3OCwgCisgICAgODIsIDY1LCA4MCwgMTI4LCA3OCwgODIsIDY1LCAxMjgsIDc4LCA3OSwgODksIDEyOCwgNzgsIDc5LCA4OCwgMTI4LCA3OCwgCisgICAgNzksIDg2LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA4NCwgODQsIDc5LCAxMjgsIDc4LCA3OSwgODQsIDY5LCAKKyAgICA4MywgMTI4LCA3OCwgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgNjgsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIAorICAgIDE5NiwgNzgsIDc5LCA4NCwgNjksIDEyOCwgNzgsIDc5LCA4NCwgMTk3LCA3OCwgNzksIDg0LCA2NywgNzIsIDY5LCAxOTYsIAorICAgIDc4LCA3OSwgODQsIDY3LCA3MiwgMTI4LCA3OCwgNzksIDg0LCAxMjgsIDc4LCA3OSwgODMsIDY5LCAxMjgsIDc4LCA3OSwgCisgICAgODIsIDg0LCA3MiwgODcsIDY5LCA4MywgMjEyLCA3OCwgNzksIDgyLCA4NCwgMjAwLCA3OCwgNzksIDgyLCA3NywgNjUsIAorICAgIDIwNCwgNzgsIDc5LCAyMTAsIDc4LCA3OSwgODAsIDEyOCwgNzgsIDc5LCA3OSwgNzgsIDg1LCAxMjgsIDc4LCA3OSwgNzksIAorICAgIDEyOCwgNzgsIDc5LCA3OCwgNzAsIDc5LCA4MiwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDc0LCA3OSwgCisgICAgNzMsIDc4LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDY2LCA4MiwgNjksIDY1LCA3NSwgNzMsIDc4LCAxOTksIDc4LCAKKyAgICA3OSwgNzcsIDczLCA3OCwgNjUsIDIwNCwgNzgsIDc5LCA3NSwgNzIsIDg1LCA3NSwgMTI4LCA3OCwgNzksIDY4LCA2OSwgCisgICAgMTI4LCA3OCwgNzksIDY1LCAxMjgsIDc4LCA3OSwgNDUsIDY2LCA4MiwgNjksIDY1LCAyMDMsIDc4LCA3OCwgNzksIDEyOCwgCisgICAgNzgsIDc4LCA3OCwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDc5LCAxMjgsIDc4LCAKKyAgICA3OCwgNzEsIDczLCA3MywgMTI4LCA3OCwgNzgsIDcxLCA3MywgMTI4LCA3OCwgNzgsIDcxLCA2NSwgNjUsIDEyOCwgNzgsIAorICAgIDc4LCA3MSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgMTI4LCA3OCwgNzcsIDEyOCwgNzgsIDc2LCA0OCwgNTAsIDQ4LCAxMjgsIAorICAgIDc4LCA3NiwgNDgsIDQ5LCA1NywgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCA2NSwgCisgICAgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU0LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCAKKyAgICA1MywgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA3NiwgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA3NiwgCisgICAgNDgsIDQ4LCA1NywgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCAKKyAgICA3NiwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgCisgICAgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCAKKyAgICA1MCwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDc1LCAyMDcsIDc4LCA3NCwgODksIDg4LCAxMjgsIDc4LCAKKyAgICA3NCwgODksIDg0LCAxMjgsIDc4LCA3NCwgODksIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgMTI4LCA3OCwgNzQsIAorICAgIDg5LCA4MCwgMTI4LCA3OCwgNzQsIDg5LCAxMjgsIDc4LCA3NCwgODUsIDg4LCAxMjgsIDc4LCA3NCwgODUsIDgyLCA4OCwgCisgICAgMTI4LCA3OCwgNzQsIDg1LCA4MiwgMTI4LCA3OCwgNzQsIDg1LCA4MCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgCisgICAgNzgsIDc0LCA4NSwgNzksIDEyOCwgNzgsIDc0LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODUsIDEyOCwgNzgsIDc0LCAKKyAgICA3OSwgODgsIDEyOCwgNzgsIDc0LCA3OSwgODQsIDEyOCwgNzgsIDc0LCA3OSwgODAsIDEyOCwgNzgsIDc0LCA3OSwgNzksIAorICAgIDEyOCwgNzgsIDc0LCA3OSwgMTI4LCA3OCwgNzQsIDczLCA4OCwgMTI4LCA3OCwgNzQsIDczLCA4NCwgMTI4LCA3OCwgNzQsIAorICAgIDczLCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc4LCA3NCwgCisgICAgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgMTI4LCA3OCwgNzQsIDczLCAxMjgsIDc4LCA3NCwgNjksIDY5LCAKKyAgICAxMjgsIDc4LCA3NCwgNjksIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCA3NiwgNzMsIDEyOCwgNzgsIDc0LCA2NSwgNjksIAorICAgIDc3LCAxMjgsIDc4LCA3NCwgMTI4LCA3OCwgNzMsIDg4LCAxMjgsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCA3OCwgNzMsIAorICAgIDgyLCA4NSwgNzEsIDg1LCAxMjgsIDc4LCA3MywgODAsIDEyOCwgNzgsIDczLCA3OCwgODQsIDcyLCAxMjgsIDc4LCA3MywgCisgICAgNzgsIDY5LCA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCAyMTcsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCAKKyAgICA3OCwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgMjA2LCA3OCwgNzMsIDc4LCAxOTcsIDc4LCA3MywgNzgsIAorICAgIDY4LCA2NSwgNTAsIDEyOCwgNzgsIDczLCA3OCwgNjgsIDY1LCAxNzgsIDc4LCA3MywgNzcsIDEyOCwgNzgsIDczLCAyMDUsIAorICAgIDc4LCA3MywgNzUsIDcyLCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgCisgICAgNzMsIDczLCAxMjgsIDc4LCA3MywgNzIsIDgzLCA3MiwgODYsIDY1LCA4MywgNjUsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCAKKyAgICA2NSwgNzcsIDczLCA3OCwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA2OSwgODMsIDcyLCAxMjgsIDc4LCA3MywgNzEsIAorICAgIDcyLCA4NCwgMTI4LCA3OCwgNzMsIDcxLCA3MSwgNjUsIDcyLCA3MywgODQsIDY1LCAxMjgsIDc4LCA3MywgNjksIDg4LCAKKyAgICAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDczLCA2OSwgODUsIAorICAgIDc4LCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODMsIDczLCAKKyAgICA3OSwgODMsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc4LCA3MywgNjksIAorICAgIDg1LCA3OCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNjUsIDc4LCAKKyAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIAorICAgIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCAKKyAgICA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgCisgICAgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDIwNiwgNzgsIDczLCA2OSwgODAsIDEyOCwgNzgsIDczLCA2OSwgMTI4LCA3OCwgCisgICAgNzMsIDY2LCAxMjgsIDc4LCA3MywgNjUsIDEyOCwgNzgsIDczLCA1MCwgMTI4LCA3OCwgNzIsIDg1LCA2OSwgMTI4LCA3OCwgCisgICAgNzIsIDc0LCA2NSwgMTI4LCA3OCwgNzIsIDY1LCAxMjgsIDc4LCA3MiwgMTI4LCA3OCwgNzEsIDg5LCA2OSwgMTI4LCA3OCwgCisgICAgNzEsIDg2LCA2OSwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg0LCAxMjgsIDc4LCAKKyAgICA3MSwgODUsIDc5LCAxMjgsIDc4LCA3MSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgNzksIDg1LCAxMjgsIDc4LCA3MSwgNzksIAorICAgIDIxMywgNzgsIDcxLCA3OSwgODQsIDEyOCwgNzgsIDcxLCA3OSwgODAsIDEyOCwgNzgsIDcxLCA3OSwgNzgsIDEyOCwgNzgsIAorICAgIDcxLCA3OSwgNjksIDcyLCAxMjgsIDc4LCA3MSwgNzksIDY5LCAyMDAsIDc4LCA3MSwgMjA3LCA3OCwgNzEsIDc1LCA4NywgCisgICAgNjUsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCA2NSwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzgsIDcxLCAKKyAgICA3MywgNjksIDgwLCAxMjgsIDc4LCA3MSwgNzMsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCAxMjgsIDc4LCA3MSwgNzEsIAorICAgIDc5LCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3MywgMTI4LCA3OCwgNzEsIDcxLCA2OSwgCisgICAgNzgsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDEyOCwgCisgICAgNzgsIDcxLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA2OSwgODAsIDEyOCwgNzgsIDcxLCA2OSwgNzgsIDEyOCwgNzgsIDcxLCAKKyAgICA2OSwgNjUsIDY4LCA2NSwgNzYsIDEyOCwgNzgsIDcxLCA2OSwgMTI4LCA3OCwgNzEsIDY1LCA4OCwgMTI4LCA3OCwgNzEsIAorICAgIDY1LCA4NCwgMTI4LCA3OCwgNzEsIDY1LCAyMTEsIDc4LCA3MSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNjUsIDc4LCAxMjgsIAorICAgIDc4LCA3MSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDE5MywgNzgsIDcwLCAxMjgsIAorICAgIDc4LCA2OSwgODgsIDIxMiwgNzgsIDY5LCA4OCwgMTI4LCA3OCwgNjksIDg3LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OCwgCisgICAgNjksIDg1LCA4NCwgODIsIDY1LCAyMDQsIDc4LCA2OSwgODUsIDg0LCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NCwgMTI4LCAKKyAgICA3OCwgNjksIDIxMiwgNzgsIDY5LCA4MywgODQsIDY5LCAxOTYsIDc4LCA2OSwgODEsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIAorICAgIDc4LCA2OSwgODAsIDg0LCA4NSwgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODAsIDEyOCwgNzgsIDY5LCA3OSwgMTI4LCA3OCwgCisgICAgNjksIDIwNywgNzgsIDY5LCA3OCwgNjUsIDc4LCA3OSwgMTI4LCA3OCwgNjksIDc4LCAxMjgsIDc4LCA2OSwgNzMsIDg0LCAKKyAgICA3MiwgNjksIDIxMCwgNzgsIDY5LCA3MSwgNjUsIDg0LCA3MywgODYsIDE5NywgNzgsIDY5LCA3MSwgNjUsIDg0LCA3MywgNzksIAorICAgIDIwNiwgNzgsIDY5LCA3MSwgNjUsIDg0LCA2OSwgMTk2LCA3OCwgNjksIDY5LCAxMjgsIDc4LCA2OSwgNjYsIDY5LCA3OCwgCisgICAgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3OCwgNjgsIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCAKKyAgICA3OCwgNjgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODIsIDEyOCwgNzgsIDY4LCA4NSwgODAsIDEyOCwgNzgsIAorICAgIDY4LCA3OSwgODgsIDEyOCwgNzgsIDY4LCA3OSwgODQsIDEyOCwgNzgsIDY4LCA3OSwgODAsIDEyOCwgNzgsIDY4LCA3OSwgCisgICAgNzksIDEyOCwgNzgsIDY4LCA3OSwgNzYsIDE5NywgNzgsIDY4LCA3MywgODgsIDEyOCwgNzgsIDY4LCA3MywgODQsIDEyOCwgCisgICAgNzgsIDY4LCA3MywgODAsIDEyOCwgNzgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCAKKyAgICA2OCwgNzMsIDEyOCwgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNzgsIDY4LCA2OSwgNjksIAorICAgIDEyOCwgNzgsIDY4LCA2OSwgMTI4LCA3OCwgNjgsIDY1LCA4OCwgMTI4LCA3OCwgNjgsIDY1LCA4NCwgMTI4LCA3OCwgNjgsIAorICAgIDY1LCA4MCwgMTI4LCA3OCwgNjgsIDY1LCA2NSwgMTI4LCA3OCwgNjYsIDg5LCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4NCwgCisgICAgMTI4LCA3OCwgNjYsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODIsIDEyOCwgNzgsIDY2LCA4OSwgODAsIDEyOCwgCisgICAgNzgsIDY2LCA4OSwgMTI4LCA3OCwgNjYsIDg1LCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4NCwgMTI4LCA3OCwgNjYsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgNzgsIDY2LCA4NSwgODIsIDEyOCwgNzgsIDY2LCA4NSwgODAsIDEyOCwgNzgsIDY2LCA4NSwgMTI4LCAKKyAgICA3OCwgNjYsIDc5LCA4OCwgMTI4LCA3OCwgNjYsIDc5LCA4NCwgMTI4LCA3OCwgNjYsIDc5LCA4MCwgMTI4LCA3OCwgNjYsIAorICAgIDc5LCAxMjgsIDc4LCA2NiwgNzMsIDg4LCAxMjgsIDc4LCA2NiwgNzMsIDg0LCAxMjgsIDc4LCA2NiwgNzMsIDgwLCAxMjgsIAorICAgIDc4LCA2NiwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDEyOCwgCisgICAgNzgsIDY2LCA3MywgMTI4LCA3OCwgNjYsIDY1LCA4OCwgMTI4LCA3OCwgNjYsIDY1LCA4NCwgMTI4LCA3OCwgNjYsIDY1LCAKKyAgICA4MCwgMTI4LCA3OCwgNjYsIDY1LCAxMjgsIDc4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgODksIAorICAgIDEyOCwgNzgsIDY1LCA4OCwgNzMsIDY1LCAyMDYsIDc4LCA2NSwgODgsIDEyOCwgNzgsIDY1LCA4NSwgODQsIDcyLCA4MywgCisgICAgMTI4LCA3OCwgNjUsIDg1LCA2OCwgNzMsIDIxOCwgNzgsIDY1LCA4NCwgODUsIDgyLCA2NSwgMjA0LCA3OCwgNjUsIDg0LCAKKyAgICA3MywgNzksIDc4LCA2NSwgMjA0LCA3OCwgNjUsIDgzLCA3NSwgNjUsIDgwLCAyMDEsIDc4LCA2NSwgODMsIDcyLCA3MywgCisgICAgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDY1LCA4MiwgODIsIDc5LCAKKyAgICAyMTUsIDc4LCA2NSwgODIsIDEyOCwgNzgsIDY1LCA3OSwgMjExLCA3OCwgNjUsIDc4LCA3MSwgNzcsIDc5LCA3OCwgODQsIAorICAgIDcyLCA3OSwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgMTI4LCA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDc3LCA2OSwgCisgICAgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgNzcsIDUwLCAxMjgsIDc4LCA2NSwgNzcsIDEyOCwgNzgsIDY1LCA3MywgCisgICAgODIsIDE5MywgNzgsIDY1LCA3MSwgODIsIDIwMSwgNzgsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgNzEsIDY1LCAKKyAgICAxMjgsIDc4LCA2NSwgNzEsIDE5MywgNzgsIDY1LCA3MSwgMTI4LCA3OCwgNjUsIDE5OSwgNzgsIDY1LCA2NiwgNzYsIDY1LCAKKyAgICAxMjgsIDc4LCA2NSwgNjUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDc1LCA4MywgNzMsIAorICAgIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNjUsIDY1LCAxMjgsIDc4LCA2NSwgCisgICAgMTkzLCA3OCwgNjUsIDUwLCAxMjgsIDc4LCA0OCwgNTIsIDUwLCAxMjgsIDc4LCA0OCwgNTIsIDQ5LCAxMjgsIDc4LCA0OCwgCisgICAgNTIsIDQ4LCAxMjgsIDc4LCA0OCwgNTEsIDU3LCAxMjgsIDc4LCA0OCwgNTEsIDU2LCAxMjgsIDc4LCA0OCwgNTEsIDU1LCAKKyAgICA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgMTI4LCA3OCwgNDgsIDUxLCA1NCwgMTI4LCA3OCwgNDgsIDUxLCA1MywgNjUsIAorICAgIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDEyOCwgNzgsIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDUyLCAxMjgsIAorICAgIDc4LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MSwgMTI4LCA3OCwgNDgsIDUxLCA1MCwgMTI4LCA3OCwgCisgICAgNDgsIDUxLCA0OSwgMTI4LCA3OCwgNDgsIDUxLCA0OCwgMTI4LCA3OCwgNDgsIDUwLCA1NywgMTI4LCA3OCwgNDgsIDUwLCAKKyAgICA1NiwgMTI4LCA3OCwgNDgsIDUwLCA1NSwgMTI4LCA3OCwgNDgsIDUwLCA1NCwgMTI4LCA3OCwgNDgsIDUwLCA1MywgNjUsIAorICAgIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDEyOCwgNzgsIDQ4LCA1MCwgNTIsIDEyOCwgNzgsIDQ4LCA1MCwgNTEsIDEyOCwgNzgsIAorICAgIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDQ4LCA0OSwgCisgICAgNTcsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDY2LCAxMjgsIDc4LCA0OCwgNDksIDU2LCA2NSwgMTI4LCA3OCwgNDgsIDQ5LCAKKyAgICA1NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNDgsIDQ5LCA1MywgMTI4LCAKKyAgICA3OCwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA3OCwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNDgsIDQ4LCA1NywgMTI4LCA3OCwgNDgsIDQ4LCA1NiwgCisgICAgMTI4LCA3OCwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgCisgICAgNDgsIDQ4LCA1MiwgMTI4LCA3OCwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgNDgsIDQ4LCAKKyAgICA0OSwgMTI4LCA3OCwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzgsIDQ1LCA2NSwgODIsIDIxNywgNzcsIDg5LCA4OCwgMTI4LCAKKyAgICA3NywgODksIDg0LCAxMjgsIDc3LCA4OSwgODMsIDc2LCA3MywgODQsIDY5LCAxMjgsIDc3LCA4OSwgODAsIDEyOCwgNzcsIAorICAgIDg5LCA2NSwgMTI4LCA3NywgODksIDE5MywgNzcsIDg5LCAxMjgsIDc3LCA4NywgNzksIDc5LCAxMjgsIDc3LCA4NywgNzksIAorICAgIDEyOCwgNzcsIDg3LCA3MywgNzMsIDEyOCwgNzcsIDg3LCA3MywgMTI4LCA3NywgODcsIDY5LCA2OSwgMTI4LCA3NywgODcsIAorICAgIDY5LCAxMjgsIDc3LCA4NywgNjUsIDY1LCAxMjgsIDc3LCA4NywgNjUsIDEyOCwgNzcsIDg3LCAxMjgsIDc3LCAyMTUsIDc3LCAKKyAgICA4NiwgMTI4LCA3NywgMjE0LCA3NywgODUsIDg4LCAxMjgsIDc3LCA4NSwgODUsIDgzLCA3MywgNzUsIDY1LCA4NCwgNzksIAorICAgIDY1LCA3OCwgMTI4LCA3NywgODUsIDg1LCA4MiwgNjgsIDcyLCA2NSwgNzQsIDE5MywgNzcsIDg1LCA4NCwgMTI4LCA3NywgCisgICAgODUsIDgzLCA3MywgNjcsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDE5NSwgNzcsIDg1LCA4MywgNzIsIDUxLCAxMjgsIDc3LCAKKyAgICA4NSwgODMsIDcyLCAxNzksIDc3LCA4NSwgODMsIDcyLCAxMjgsIDc3LCA4NSwgODMsIDIwMCwgNzcsIDg1LCA4MiwgODgsIAorICAgIDEyOCwgNzcsIDg1LCA4MiwgNzEsIDg1LCA1MCwgMTI4LCA3NywgODUsIDgyLCA2OSwgMTI4LCA3NywgODUsIDgyLCA2OCwgCisgICAgNjUsIDEyOCwgNzcsIDg1LCA4MiwgNjgsIDE5MywgNzcsIDg1LCA4MiwgMTI4LCA3NywgODUsIDgxLCA2OCwgNjUsIDc3LCAKKyAgICAxMjgsIDc3LCA4NSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDg1LCA3OSwgODQsIDEyOCwgNzcsIDg1LCAKKyAgICA3OSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgMTI4LCA3NywgODUsIDc4LCA4MywgODUsIDY2LCAxMjgsIDc3LCA4NSwgNzgsIAorICAgIDY1LCA3MiwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgODQsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgCisgICAgNjksIDIxMiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc3LCAKKyAgICA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc3LCA4NSwgNzYsIDg0LCA3MywgCisgICAgODAsIDc2LCAxOTcsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA4NSwgNzYsIDg0LCAKKyAgICA3MywgNzcsIDY1LCA4MCwgMTI4LCA3NywgODUsIDc2LCA4NCwgMjAxLCA3NywgODUsIDc1LCA4MCwgNzIsIDgyLCA2OSwgNzgsIAorICAgIDcxLCAxMjgsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIDc3LCA4NSwgNzEsIDEyOCwgNzcsIDg1LCAxOTksIDc3LCA4NSwgNjksIAorICAgIDEyOCwgNzcsIDg1LCA2NywgMjAwLCA3NywgODUsIDY3LCA2NSwgNjUsIDY4LCAxMjgsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIAorICAgIDc3LCA4NSwgNDUsIDcxLCA2NSwgNjUsIDcyLCA3NiwgNjUsIDE5MywgNzcsIDIxMywgNzcsIDgzLCAxMjgsIDc3LCA4MCwgCisgICAgNjUsIDEyOCwgNzcsIDc5LCA4OCwgMTI4LCA3NywgNzksIDg2LCA2OSwgMTk2LCA3NywgNzksIDg1LCA4NCwgNzIsIDEyOCwgCisgICAgNzcsIDc5LCA4NSwgODQsIDIwMCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCAKKyAgICA2OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgMTk2LCA3NywgNzksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDc3LCA3OSwgODQsIAorICAgIDEyOCwgNzcsIDc5LCA4MiwgODQsIDY1LCA4MiwgMTI4LCA3NywgNzksIDgyLCA4MCwgNzIsIDc5LCA3NiwgNzksIDcxLCA3MywgCisgICAgNjcsIDY1LCAyMDQsIDc3LCA3OSwgODIsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDc3LCA3OSwgODAsIDEyOCwgNzcsIDc5LCAKKyAgICA3OSwgODMsIDY5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3NywgNzksIDc5LCA3OCwgMTI4LCA3NywgNzksIDc5LCAyMDYsIAorICAgIDc3LCA3OSwgNzksIDEyOCwgNzcsIDc5LCA3OCwgODQsIDcyLCAxMjgsIDc3LCA3OSwgNzgsIDg0LCAyMDAsIDc3LCA3OSwgCisgICAgNzgsIDc5LCA4MywgODQsIDY1LCA2NiwgNzYsIDE5NywgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDc3LCAKKyAgICA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCAyMDUsIAorICAgIDc3LCA3OSwgNzgsIDc5LCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA2NywgODUsIDc2LCAKKyAgICA2NSwgMjEwLCA3NywgNzksIDIwNiwgNzcsIDc5LCA3NiwgMTI4LCA3NywgNzksIDcyLCA2NSwgNzcsIDc3LCA2NSwgMTk2LCAKKyAgICA3NywgNzksIDY4LCA4NSwgNzYsIDIwNywgNzcsIDc5LCA2OCwgNjksIDgzLCA4NCwgODksIDEyOCwgNzcsIDc5LCA2OCwgNjksIAorICAgIDc2LCA4MywgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIDEyOCwgNzcsIDc5LCA2NSwgMTI4LCA3NywgMjA3LCA3NywgNzgsIAorICAgIDg5LCA2NSwgMjA1LCA3NywgNzgsIDY1LCA4MywgMTI4LCA3NywgNzcsIDEyOCwgNzcsIDIwNSwgNzcsIDc2LCA2NSwgMTI4LCAKKyAgICA3NywgNzYsIDEyOCwgNzcsIDczLCA4OCwgMTI4LCA3NywgNzMsIDg0LCAxMjgsIDc3LCA3MywgMjEyLCA3NywgNzMsIDgzLCAKKyAgICA4MiwgNjUsIDEyOCwgNzcsIDczLCA4MiwgNzMsIDY2LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgCisgICAgMTI4LCA3NywgNzMsIDgyLCA2OSwgNjgsIDEyOCwgNzcsIDczLCA4MCwgMTI4LCA3NywgNzMsIDc4LCA4OSwgMTI4LCA3NywgCisgICAgNzMsIDc4LCA4NSwgODMsIDQ1LCA3OSwgODIsIDQ1LCA4MCwgNzYsIDg1LCAyMTEsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCAKKyAgICA3NywgNzMsIDc4LCA3MywgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgNzMsIAorICAgIDc3LCA2OSwgMTI4LCA3NywgNzMsIDc3LCAxMjgsIDc3LCA3MywgNzYsIDc2LCA3MywgNzksIDc4LCAyMTEsIDc3LCA3MywgCisgICAgNzYsIDc2LCA2OSwgODQsIDEyOCwgNzcsIDczLCA3NiwgNzYsIDE5NywgNzcsIDczLCA3NiwgMjA0LCA3NywgNzMsIDc2LCAKKyAgICAxMjgsIDc3LCA3MywgNzUsIDg1LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA3MywgNzUsIDgyLCA3OSwgMjA2LCA3NywgNzMsIAorICAgIDc1LCA4MiwgNzMsIDEyOCwgNzcsIDczLCA3MywgNzgsIDEyOCwgNzcsIDczLCA3MywgMTI4LCA3NywgNzMsIDE5OSwgNzcsIAorICAgIDczLCA2OSwgODgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NywgCisgICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIAorICAgIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCAKKyAgICA3NywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgCisgICAgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgCisgICAgODUsIDc3LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDY3LCA3MywgNjksIAorICAgIDg1LCA2NywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NywgCisgICAgNzMsIDY5LCA4NSwgMjA1LCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3NywgNzMsIDY5LCAxMjgsIDc3LCA3MywgNjgsIDc2LCAKKyAgICA3MywgNzgsIDE5NywgNzcsIDczLCA2OCwgNjgsIDc2LCA2OSwgNDUsIDg3LCA2OSwgNzYsIDgzLCAyMDAsIDc3LCA3MywgNjgsIAorICAgIDY4LCA3NiwgMTk3LCA3NywgNzMsIDE5NiwgNzcsIDczLCA2NywgODIsIDIwNywgNzcsIDczLCAxMjgsIDc3LCA3MiwgOTAsIAorICAgIDEyOCwgNzcsIDcyLCAxMjgsIDc3LCA3MSwgODUsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDg0LCAxMjgsIDc3LCA3MSwgODUsIAorICAgIDgyLCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgMTI4LCA3NywgNzEsIDg1LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgCisgICAgODgsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCAxMjgsIDc3LCA3MSwgODUsIDEyOCwgCisgICAgNzcsIDcxLCA3OSwgODgsIDEyOCwgNzcsIDcxLCA3OSwgODQsIDEyOCwgNzcsIDcxLCA3OSwgODAsIDEyOCwgNzcsIDcxLCAKKyAgICA3OSwgMTI4LCA3NywgNzEsIDIwNywgNzcsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MSwgNzMsIDY5LCAxMjgsIDc3LCAKKyAgICA3MSwgNjksIDg4LCAxMjgsIDc3LCA3MSwgNjksIDgwLCAxMjgsIDc3LCA3MSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgODUsIAorICAgIDEyOCwgNzcsIDcxLCA2NiwgNzksIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDczLCAxMjgsIAorICAgIDc3LCA3MSwgNjYsIDY5LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2NSwgMTI4LCA3NywgCisgICAgNzEsIDY1LCA4OCwgMTI4LCA3NywgNzEsIDY1LCA4NCwgMTI4LCA3NywgNzEsIDY1LCA4MCwgMTI4LCA3NywgNzEsIDY1LCAKKyAgICAxMjgsIDc3LCA3MSwgMTI4LCA3NywgNjksIDkwLCA5MCwgNzksIDEyOCwgNzcsIDY5LCA4OCwgMTI4LCA3NywgNjksIDg0LCAKKyAgICA4MiwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNjksIDg0LCA4MiwgNzMsIDY1LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA2OSwgODQsIAorICAgIDY5LCAyMTEsIDc3LCA2OSwgODQsIDc5LCA2NiwgNjksIDc2LCA4NSwgODMsIDEyOCwgNzcsIDY5LCA4NCwgNjksIDcxLCAKKyAgICAxMjgsIDc3LCA2OSwgODQsIDY1LCA3NiwgMTI4LCA3NywgNjksIDg0LCAxOTMsIDc3LCA2OSwgODMsIDgzLCA2OSwgNzgsIAorICAgIDczLCA2NSwgMjA2LCA3NywgNjksIDgzLCA3OSwgMTI4LCA3NywgNjksIDgzLCA3MywgMTI4LCA3NywgNjksIDgzLCA3MiwgCisgICAgMTI4LCA3NywgNjksIDgyLCA3NSwgNzIsIDY1LCAxMjgsIDc3LCA2OSwgODIsIDc1LCA3MiwgMTkzLCA3NywgNjksIDgyLCAKKyAgICA3MywgMTI4LCA3NywgNjksIDgyLCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgODksIDEyOCwgNzcsIAorICAgIDY5LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3NywgNjksIDc4LCAxMjgsIDc3LCA2OSwgMjA2LCA3NywgNjksIDc3LCA2NiwgCisgICAgNjksIDgyLCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc3LCA2OSwgNzcsIDY2LCAKKyAgICA2OSwgMjEwLCA3NywgNjksIDc3LCA0NSwgODEsIDc5LCA4MCwgNzIsIDEyOCwgNzcsIDY5LCA3NywgMTI4LCA3NywgNjksIAorICAgIDIwNSwgNzcsIDY5LCA3NiwgNzksIDc4LCAxMjgsIDc3LCA2OSwgNzYsIDc5LCA2OCwgNzMsIDE5NSwgNzcsIDY5LCA3NiwgCisgICAgNzMsIDc1LCAxMjgsIDc3LCA2OSwgNzMsIDkwLCA3MywgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgMTI4LCAKKyAgICA3NywgNjksIDcxLCA2NSwgNzYsIDczLCAxMjgsIDc3LCA2OSwgNjksIDg0LCA3OSwgODIsIDg1LCAxMjgsIDc3LCA2OSwgNjksIAorICAgIDg0LCA2OSwgMjAxLCA3NywgNjksIDY5LCA4NCwgMTI4LCA3NywgNjksIDY5LCA3NywgODUsIDEyOCwgNzcsIDY5LCA2OSwgCisgICAgNzcsIDEyOCwgNzcsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjksIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDg1LCAKKyAgICA3NywgMTI4LCA3NywgNjksIDY4LCA3MywgODUsIDIwNSwgNzcsIDY5LCA2OCwgNzMsIDY3LCA3MywgNzgsIDY5LCAxMjgsIAorICAgIDc3LCA2OSwgNjUsIDg0LCAxMjgsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxOTYsIDc3LCA2OSwgNjUsIDgzLCA4NSwgCisgICAgODIsIDY5LCAxMjgsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDE5NywgNzcsIDY4LCA4NSwgMjA2LCA3NywgNjcsIDcyLCAKKyAgICAyMTMsIDc3LCA2NiwgODUsIDEyOCwgNzcsIDY2LCA3OSwgNzksIDEyOCwgNzcsIDY2LCA3OSwgMTI4LCA3NywgNjYsIDczLCAKKyAgICAxMjgsIDc3LCA2NiwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNjksIDY5LCAxMjgsIDc3LCA2NiwgNjksIDEyOCwgNzcsIDY2LCAKKyAgICA2NSwgNjUsIDEyOCwgNzcsIDY2LCA1MiwgMTI4LCA3NywgNjYsIDUxLCAxMjgsIDc3LCA2NiwgNTAsIDEyOCwgNzcsIDY2LCAKKyAgICAxMjgsIDc3LCAxOTQsIDc3LCA2NSwgODksIDY5LCAyMDMsIDc3LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc3LCAKKyAgICA2NSwgODksIDEyOCwgNzcsIDY1LCA4OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgNjUsIDg4LCAxMjgsIDc3LCA2NSwgODQsIAorICAgIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDc3LCA2NSwgODQsIDgyLCA3MywgODgsIDEyOCwgNzcsIDY1LCA4NCwgNjksIDgyLCA3MywgCisgICAgNjUsIDc2LCA4MywgMTI4LCA3NywgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDIxMywgNzcsIDY1LCA4MywgODMsIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgNzcsIDY1LCA4MywgNzksIDgyLCAxOTMsIDc3LCA2NSwgODMsIDcyLCA3MCwgNjUsIDY1LCA4NCwgCisgICAgMTI4LCA3NywgNjUsIDgzLCA3MiwgNTAsIDEyOCwgNzcsIDY1LCA4MywgNjcsIDg1LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCAKKyAgICA2NSwgODIsIDg1LCA3NSwgODUsIDEyOCwgNzcsIDY1LCA4MiwgODQsIDg5LCA4MiwgNzMsIDE5MywgNzcsIDY1LCA4MiwgODIsIAorICAgIDg5LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA4MiwgODIsIDczLCA2NSwgNzEsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDY5LCA4MiwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUyLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTEsIDEyOCwgNzcsIDY1LCAKKyAgICA4MiwgNzUsIDQ1LCA1MCwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDQ5LCAxMjgsIDc3LCA2NSwgODIsIDY5LCAxMjgsIAorICAgIDc3LCA2NSwgODIsIDY3LCA3MiwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgNDUsIDgzLCA4NCwgNjUsIDY3LCAKKyAgICA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIAorICAgIDg0LCA2NSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIDg0LCAxOTMsIDc3LCA2NSwgODIsIDEyOCwgNzcsIDY1LCA4MSwgCisgICAgNjUsIDcwLCAxMjgsIDc3LCA2NSwgODAsIDczLCA4MSwgMTI4LCA3NywgNjUsIDIwOCwgNzcsIDY1LCA3OCwgODMsIDg5LCAKKyAgICA3OSwgNzgsIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAyMTgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIAorICAgIDc4LCA3MSwgNjUsIDc2LCA2NSwgNzcsIDEyOCwgNzcsIDY1LCA3OCwgNjcsIDcyLCAyMTMsIDc3LCA2NSwgNzgsIDY1LCA2NywgCisgICAgNzYsIDY5LCA4MywgMTI4LCA3NywgNjUsIDc2LCA4NCwgNjksIDgzLCAxOTcsIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDc3LCAKKyAgICA2NSwgNzYsIDE5NywgNzcsIDY1LCA3NiwgNjUsIDc1LCA3OSwgMjA2LCA3NywgNjUsIDc1LCA4MywgODUsIDgyLCA2NSwgCisgICAgMTI4LCA3NywgNjUsIDczLCA4OSwgNjUsIDc3LCA3OSwgNzUsIDEyOCwgNzcsIDY1LCA3MywgODQsIDY1LCA3MywgNzUsIDcyLCAKKyAgICA4NSwgMTI4LCA3NywgNjUsIDczLCA4MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgNzcsIDg1LCA2NSwgNzgsIDEyOCwgNzcsIAorICAgIDY1LCA3MywgNzcsIDY1LCA3NiwgNjUsIDczLCAxMjgsIDc3LCA2NSwgNzMsIDc1LCA4NSwgODIsIDc5LCAxMjgsIDc3LCA2NSwgCisgICAgNzMsIDY4LCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA3MiwgNzQsIDc5LCA3OCwgMTk5LCA3NywgNjUsIDcyLCA3MiwgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDY1LCA3NSwgCisgICAgNzIsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNzcsIDY1LCA3MiwgMTI4LCAKKyAgICA3NywgNjUsIDY4LCA4OSwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgODUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAyMDAsIAorICAgIDc3LCA2NSwgNjgsIDY4LCA2NSwgMTI4LCA3NywgNjUsIDY4LCA2OCwgMTkzLCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgCisgICAgNzEsIDgyLCA2NSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NiwgODIsIDY5LCA4NiwgNjksIAorICAgIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgCisgICAgNzksIDc4LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgMjA2LCA3NywgNjUsIDY1LCA3MywgMTI4LCA3NywgNjUsIDY1LCAKKyAgICAxMjgsIDc3LCA2NSwgNTAsIDEyOCwgNzcsIDQ4LCA1MiwgNTIsIDEyOCwgNzcsIDQ4LCA1MiwgNTEsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MiwgNTAsIDEyOCwgNzcsIDQ4LCA1MiwgNDksIDEyOCwgNzcsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNTIsIAorICAgIDQ4LCAxMjgsIDc3LCA0OCwgNTEsIDU3LCAxMjgsIDc3LCA0OCwgNTEsIDU2LCAxMjgsIDc3LCA0OCwgNTEsIDU1LCAxMjgsIAorICAgIDc3LCA0OCwgNTEsIDU0LCAxMjgsIDc3LCA0OCwgNTEsIDUzLCAxMjgsIDc3LCA0OCwgNTEsIDUyLCAxMjgsIDc3LCA0OCwgCisgICAgNTEsIDUxLCA2NiwgMTI4LCA3NywgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MSwgNTAsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIDY1LCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCAxMjgsIDc3LCA0OCwgNTEsIAorICAgIDQ4LCAxMjgsIDc3LCA0OCwgNTAsIDU3LCAxMjgsIDc3LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1NiwgCisgICAgMTI4LCA3NywgNDgsIDUwLCA1NSwgMTI4LCA3NywgNDgsIDUwLCA1NCwgMTI4LCA3NywgNDgsIDUwLCA1MywgMTI4LCA3NywgCisgICAgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTIsIDEyOCwgNzcsIDQ4LCA1MCwgNTEsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MCwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDUwLCAxMjgsIDc3LCA0OCwgNTAsIDQ5LCAxMjgsIDc3LCA0OCwgNTAsIAorICAgIDQ4LCAxMjgsIDc3LCA0OCwgNDksIDU3LCAxMjgsIDc3LCA0OCwgNDksIDU2LCAxMjgsIDc3LCA0OCwgNDksIDU1LCA2NSwgCisgICAgMTI4LCA3NywgNDgsIDQ5LCA1NSwgMTI4LCA3NywgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDEyOCwgCisgICAgNzcsIDQ4LCA0OSwgNTMsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUzLCAxMjgsIDc3LCA0OCwgNDksIDUyLCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDUxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MiwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzEsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNTAsIDcwLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2OSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjgsIDEyOCwgCisgICAgNzcsIDQ4LCA0OSwgNTAsIDY3LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NiwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjUsIAorICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDEyOCwgNzcsIDQ4LCA0OSwgNDksIDEyOCwgNzcsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIAorICAgIDc3LCA0OCwgNDksIDQ4LCAxMjgsIDc3LCA0OCwgNDgsIDU3LCAxMjgsIDc3LCA0OCwgNDgsIDU2LCAxMjgsIDc3LCA0OCwgCisgICAgNDgsIDU1LCAxMjgsIDc3LCA0OCwgNDgsIDU0LCAxMjgsIDc3LCA0OCwgNDgsIDUzLCAxMjgsIDc3LCA0OCwgNDgsIDUyLCAKKyAgICAxMjgsIDc3LCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgMTI4LCA3NywgNDgsIDQ4LCA1MCwgMTI4LCAKKyAgICA3NywgNDgsIDQ4LCA0OSwgNjYsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCAxMjgsIAorICAgIDc2LCAyMTgsIDc2LCA4OSwgODksIDEyOCwgNzYsIDg5LCA4OCwgMTI4LCA3NiwgODksIDg0LCAxMjgsIDc2LCA4OSwgODIsIAorICAgIDg4LCAxMjgsIDc2LCA4OSwgODIsIDEyOCwgNzYsIDg5LCA4MCwgMTI4LCA3NiwgODksIDY4LCA3MywgNjUsIDIwNiwgNzYsIAorICAgIDg5LCA2NywgNzMsIDY1LCAyMDYsIDc2LCA4OCwgMTI4LCA3NiwgODcsIDc5LCA3OSwgMTI4LCA3NiwgODcsIDc5LCAxMjgsIAorICAgIDc2LCA4NywgNzMsIDczLCAxMjgsIDc2LCA4NywgNzMsIDEyOCwgNzYsIDg3LCA2OSwgMTI4LCA3NiwgODcsIDY1LCA2NSwgCisgICAgMTI4LCA3NiwgODcsIDY1LCAxMjgsIDc2LCA4NSwgODgsIDEyOCwgNzYsIDg1LCA4NCwgMTI4LCA3NiwgODUsIDgyLCA4OCwgCisgICAgMTI4LCA3NiwgODUsIDgwLCAxMjgsIDc2LCA4NSwgNzksIDg4LCAxMjgsIDc2LCA4NSwgNzksIDg0LCAxMjgsIDc2LCA4NSwgCisgICAgNzksIDgwLCAxMjgsIDc2LCA4NSwgNzksIDEyOCwgNzYsIDg1LCA3OCwgNzEsIDgzLCA3MywgMTI4LCA3NiwgODUsIDc4LCAKKyAgICA2NSwgODQsIDE5NywgNzYsIDg1LCAyMDUsIDc2LCA4NSwgNzYsIDEyOCwgNzYsIDg1LCA3MywgODMsIDEyOCwgNzYsIDg1LCAKKyAgICA3MiwgODUsIDgyLCAxMjgsIDc2LCA4NSwgNzIsIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDc2LCAxMjgsIDc2LCA4NSwgNzEsIAorICAgIDY1LCAyMDQsIDc2LCA4NSwgNjksIDEyOCwgNzYsIDg1LCA1MSwgMTI4LCA3NiwgODUsIDUwLCAxMjgsIDc2LCA4NSwgMTc4LCAKKyAgICA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCA2OSwgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCAxOTcsIDc2LCA3OSwgODgsIAorICAgIDEyOCwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzYsIDc5LCA4NywgNDUsIDE4NSwgNzYsIDc5LCA4NSwgODIsIDY5LCAxMjgsIAorICAgIDc2LCA3OSwgODQsIDg1LCA4MywgMTI4LCA3NiwgNzksIDg0LCAxMjgsIDc2LCA3OSwgODIsIDgyLCA2NSwgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA3NiwgNzksIDgxLCAxMjgsIDc2LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgODQsIDEyOCwgNzYsIDc5LCA3OSwgCisgICAgODAsIDEyOCwgNzYsIDc5LCA3OSwgMTI4LCA3NiwgNzksIDc4LCA4MywgODUsIDc3LCAxMjgsIDc2LCA3OSwgNzgsIDcxLCAKKyAgICA2NSwgMTI4LCA3NiwgNzksIDc4LCA3MSwgMTkzLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIAorICAgIDQ1LCA4OSwgODIsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODMsIDc5LCAKKyAgICAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc5LCA4MywgMjExLCA3NiwgNzksIAorICAgIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3NywgNjUsIDY4LCAyMTAsIDc2LCA3OSwgNzgsIDcxLCAKKyAgICA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA3NiwgNzksIDc4LCA3MSwgCisgICAgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA2NSwgMjEwLCA3NiwgNzksIDc2LCA3NiwgMTI4LCA3NiwgNzksIDcxLCAKKyAgICAyMTAsIDc2LCA3OSwgNzEsIDc5LCA4NCwgODksIDgwLCAxOTcsIDc2LCA3OSwgNzEsIDc5LCA3MSwgODIsIDY1LCAyMDUsIAorICAgIDc2LCA3OSwgNzEsIDEyOCwgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDY1LCA4NCwgCisgICAgNzMsIDc5LCAyMDYsIDc2LCA3OSwgNjUsIDEyOCwgNzYsIDc4LCAxMjgsIDc2LCA3NywgMTI4LCA3NiwgNzYsIDc2LCA2NSwgCisgICAgMTI4LCA3NiwgNzQsIDg1LCA2OCwgNzMsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDY5LCAxMjgsIDc2LCA3NCwgMTI4LCA3NiwgCisgICAgNzMsIDg4LCAxMjgsIDc2LCA3MywgODcsIDc4LCAxMjgsIDc2LCA3MywgODYsIDgyLCAxOTcsIDc2LCA3MywgODQsIDg0LCAKKyAgICA3NiwgMTk3LCA3NiwgNzMsIDg0LCA4MiwgMTkzLCA3NiwgNzMsIDg0LCAxMjgsIDc2LCA3MywgODMsIDIxMywgNzYsIDczLCAKKyAgICA4MywgNzIsIDEyOCwgNzYsIDczLCA4MiwgMTkzLCA3NiwgNzMsIDgxLCA4NSwgNzMsIDE5NiwgNzYsIDczLCA4MCwgMTI4LCAKKyAgICA3NiwgNzMsIDc4LCA3NSwgNzMsIDc4LCAxOTksIDc2LCA3MywgNzgsIDIwMywgNzYsIDczLCA3OCwgNzEsIDgzLCA2NSwgCisgICAgMTI4LCA3NiwgNzMsIDc4LCA2OSwgODMsIDEyOCwgNzYsIDczLCA3OCwgNjksIDIxMSwgNzYsIDczLCA3OCwgNjksIDQ1LCAKKyAgICA1NywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNTEsIDEyOCwgNzYsIAorICAgIDczLCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgCisgICAgNTAsIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDc2LCA3MywgNzcsIDc3LCAyMTMsIDc2LCA3MywgNzcsIDczLCAKKyAgICA4NCwgNjksIDE5NiwgNzYsIDczLCA3NywgNzMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzYsIDczLCA3NywgNzMsIAorICAgIDg0LCAxMjgsIDc2LCA3MywgNzYsIDg5LCAxMjgsIDc2LCA3MywgNzYsIDczLCA4NCwgNzIsIDEyOCwgNzYsIDczLCA3NiwgCisgICAgMTI4LCA3NiwgNzMsIDczLCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzYsIDczLCAKKyAgICA3MSwgNzIsIDg0LCA3MiwgNzksIDg1LCA4MywgNjksIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCA3MywgNzAsIAorICAgIDY5LCAxMjgsIDc2LCA3MywgNjksIDg4LCAxMjgsIDc2LCA3MywgNjksIDg0LCAxMjgsIDc2LCA3MywgNjksIDgwLCAxMjgsIAorICAgIDc2LCA3MywgNjksIDEyOCwgNzYsIDczLCA2OCwgMTI4LCA3NiwgNzMsIDY2LCA4MiwgNjUsIDEyOCwgNzYsIDczLCA2NSwgCisgICAgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDc2LCA3MiwgNzMsIDczLCAxMjgsIDc2LCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCAKKyAgICA3OCwgNzMsIDEyOCwgNzYsIDcyLCA2NSwgMTk5LCA3NiwgNzIsIDY1LCA2NSwgMTI4LCA3NiwgNzIsIDEyOCwgNzYsIDY5LCAKKyAgICA5MCwgNzIsIDEyOCwgNzYsIDY5LCA4OCwgMTI4LCA3NiwgNjksIDg2LCA2OSwgMjA0LCA3NiwgNjksIDg0LCA4NCwgNjksIAorICAgIDgyLCAxMjgsIDc2LCA2OSwgODMsIDgzLCA2OSwgMjEwLCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDc4LCAKKyAgICAxMjgsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgMjA2LCA3NiwgNjksIDgwLCAxMjgsIDc2LCA2OSwgNzksIAorICAgIDEyOCwgNzYsIDY5LCA3OCwgODQsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NiwgNjksIDc4LCA3MywgODMsIDEyOCwgCisgICAgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgNjksIDc4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCAyMDAsIDc2LCAKKyAgICA2OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgNjksIDc4LCA3MSwgMTkzLCA3NiwgNjksIDc3LCA3OSwgNzMsIDEyOCwgNzYsIAorICAgIDY5LCA3NiwgNjksIDg0LCAxMjgsIDc2LCA2OSwgNzYsIDY5LCAyMTIsIDc2LCA2OSwgMjAzLCA3NiwgNjksIDczLCA3NywgCisgICAgNzcsIDY1LCAxMjgsIDc2LCA2OSwgNzMsIDc3LCA3NywgMTkzLCA3NiwgNjksIDcxLCA4MywgMTI4LCA3NiwgNjksIDcxLCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIDIxMSwgNzYsIDY5LCA3MSwgMTI4LCA3NiwgNjksIAorICAgIDcwLCA4NCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODQsIDc5LCA0NSwgODIsIDczLCAKKyAgICA3MSwgNzIsIDIxMiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgODQsIDY5LCAyMDUsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIAorICAgIDczLCA2OCwgMTk3LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgCisgICAgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCAKKyAgICA3NiwgNjksIDcwLCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA3NiwgNjksIDcwLCA4NCwgMTI4LCA3NiwgNjksIAorICAgIDY5LCA3NSwgMTI4LCA3NiwgNjksIDY5LCA2OSwgNjksIDEyOCwgNzYsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgCisgICAgNzYsIDY5LCA2NSwgNzAsIDEyOCwgNzYsIDY5LCA2NSwgNjgsIDY5LCA4MiwgMTI4LCA3NiwgNjgsIDY1LCA3OCwgMTI4LCAKKyAgICA3NiwgNjgsIDUwLCAxMjgsIDc2LCA2NywgMjAxLCA3NiwgNjcsIDE5NywgNzYsIDY1LCA5MCwgMjE3LCA3NiwgNjUsIDg5LCAKKyAgICA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NiwgNjUsIDg4LCAxMjgsIDc2LCA2NSwgMjE1LCA3NiwgNjUsIDg1LCA3NiwgNjUsIAorICAgIDEyOCwgNzYsIDY1LCA4NSwgNzUsIDY1LCAyMTgsIDc2LCA2NSwgODQsIDczLCA3OCwgNjUsIDg0LCAxOTcsIDc2LCA2NSwgCisgICAgODQsIDczLCA3NSwgMTI4LCA3NiwgNjUsIDg0LCA2OSwgODIsIDY1LCAyMDQsIDc2LCA2NSwgODQsIDE5NywgNzYsIDY1LCAKKyAgICA4NCwgMTI4LCA3NiwgNjUsIDgzLCAyMTIsIDc2LCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCA2NSwgMjA0LCA3NiwgNjUsIAorICAgIDgyLCA3MSwgNjksIDIxMCwgNzYsIDY1LCA4MiwgNzEsIDE5NywgNzYsIDY1LCA4MCwgMTI4LCA3NiwgNjUsIDc4LCA3MSwgCisgICAgODUsIDY1LCA3MSwgMTk3LCA3NiwgNjUsIDc4LCA2OSwgODMsIDEyOCwgNzYsIDY1LCA3NywgNjksIDY4LCA3MiwgMTI4LCAKKyAgICA3NiwgNjUsIDc3LCA2OSwgNjgsIDEyOCwgNzYsIDY1LCA3NywgNjksIDE5NiwgNzYsIDY1LCA3NywgNjksIDEyOCwgNzYsIAorICAgIDY1LCA3NywgMTk3LCA3NiwgNjUsIDc3LCA2OCwgNjUsIDEyOCwgNzYsIDY1LCA3NywgNjgsIDEyOCwgNzYsIDY1LCA3NywgCisgICAgNjYsIDY4LCAxOTMsIDc2LCA2NSwgNzcsIDY1LCA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NiwgMTI4LCA3NiwgNjUsIDIwNCwgCisgICAgNzYsIDY1LCA3NSwgNzUsIDcyLCA2NSwgNzgsIDcxLCA4OSwgNjUsIDc5LCAxMjgsIDc2LCA2NSwgNzQsIDY1LCA3OCwgODksIAorICAgIDY1LCA3NiwgNjUsIDc4LCAxMjgsIDc2LCA2NSwgMjAxLCA3NiwgNjUsIDcyLCA4MywgNzIsIDg1LCAxMjgsIDc2LCA2NSwgCisgICAgNzEsIDg1LCA4MywgMTI4LCA3NiwgNjUsIDcxLCAyMTMsIDc2LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3NiwgNjUsIDcxLCAKKyAgICA2NSwgMjEwLCA3NiwgNjUsIDcxLCA2NSwgNjYsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDE5NCwgNzYsIDY1LCA2OSwgODYsIAorICAgIDEyOCwgNzYsIDY1LCA2OSwgMTI4LCA3NiwgNjUsIDY3LCA3NSwgMTI4LCA3NiwgNjUsIDY3LCA2NSwgMTI4LCA3NiwgNjUsIAorICAgIDY2LCA3OSwgODUsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4MiwgMTI4LCA3NiwgNjUsIDY2LCA3MywgCisgICAgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc2LCA2NSwgNjYsIDY1LCA4NCwgMTI4LCA3NiwgNjUsIDY1LCAKKyAgICA3OCwgMTI4LCA3NiwgNjUsIDY1LCA3NywgODUsIDEyOCwgNzYsIDY1LCA2NSwgNzMsIDEyOCwgNzYsIDQ4LCA0OCwgNTQsIAorICAgIDY1LCAxMjgsIDc2LCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA3NiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzYsIDQ1LCA4MywgCisgICAgNzIsIDY1LCA4MCwgNjksIDE5NiwgNzUsIDg5LCA4NSwgODIsIDczLCA3MywgMTI4LCA3NSwgODksIDg1LCAxMjgsIDc1LCAKKyAgICA4OSwgNzksIDEyOCwgNzUsIDg5LCA3NiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg5LCA3MywgMTI4LCA3NSwgODksIAorICAgIDY5LCA2OSwgMTI4LCA3NSwgODksIDY5LCAxMjgsIDc1LCA4OSwgNjUsIDg0LCA3MiwgNzksIDIxMSwgNzUsIDg5LCA2NSwgCisgICAgNjUsIDEyOCwgNzUsIDg5LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA3MywgMTI4LCA3NSwgODgsIDg3LCA2OSwgNjksIDEyOCwgCisgICAgNzUsIDg4LCA4NywgNjksIDEyOCwgNzUsIDg4LCA4NywgNjUsIDY1LCAxMjgsIDc1LCA4OCwgODcsIDY1LCAxMjgsIDc1LCAKKyAgICA4OCwgODUsIDEyOCwgNzUsIDg4LCA3OSwgMTI4LCA3NSwgODgsIDczLCAxMjgsIDc1LCA4OCwgNjksIDY5LCAxMjgsIDc1LCAKKyAgICA4OCwgNjksIDEyOCwgNzUsIDg4LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCA2NSwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIAorICAgIDU2LCAxMjgsIDc1LCA4NywgNzksIDc5LCAxMjgsIDc1LCA4NywgNzksIDEyOCwgNzUsIDg3LCA3MywgNzMsIDEyOCwgNzUsIAorICAgIDg3LCA3MywgMTI4LCA3NSwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODcsIDY5LCAxMjgsIDc1LCA4NywgNjUsIDg5LCAxMjgsIAorICAgIDc1LCA4NywgNjUsIDY1LCAxMjgsIDc1LCA4NiwgNjUsIDEyOCwgNzUsIDg2LCAxMjgsIDc1LCA4NSwgODgsIDEyOCwgNzUsIAorICAgIDg1LCA4NSwgNzIsIDEyOCwgNzUsIDg1LCA4NCwgMTI4LCA3NSwgODUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg1LCA4MywgCisgICAgNzIsIDg1LCA1MCwgMTI4LCA3NSwgODUsIDgyLCA4OCwgMTI4LCA3NSwgODUsIDgyLCA4NSwgOTAsIDY5LCA3MywgODIsIDc5LCAKKyAgICAxMjgsIDc1LCA4NSwgODIsIDg0LCAxMjgsIDc1LCA4NSwgODIsIDc5LCA3OSwgNzgsIDY5LCAxMjgsIDc1LCA4NSwgODIsIAorICAgIDEyOCwgNzUsIDg1LCAyMTAsIDc1LCA4NSwgODAsIDEyOCwgNzUsIDg1LCA3OSwgODgsIDEyOCwgNzUsIDg1LCA3OSwgODAsIAorICAgIDEyOCwgNzUsIDg1LCA3OSwgMTI4LCA3NSwgODUsIDc4LCA3MSwgMTI4LCA3NSwgODUsIDc4LCA2OCwgNjgsIDY1LCA3NiwgCisgICAgNzMsIDg5LCA2NSwgMTI4LCA3NSwgODUsIDc2LCAxMjgsIDc1LCA4NSwgMjA0LCA3NSwgODUsIDU1LCAxMjgsIDc1LCA4NSwgCisgICAgNTIsIDEyOCwgNzUsIDg1LCAxODAsIDc1LCA4NSwgNTEsIDEyOCwgNzUsIDg1LCAxNzksIDc1LCA4NCwgMTI4LCA3NSwgODMsIAorICAgIDgzLCA2NSwgMTI4LCA3NSwgODMsIDczLCAxMjgsIDc1LCA4MiwgNjksIDc3LCA2NSwgODMsIDg0LCA3MywgMTI4LCA3NSwgCisgICAgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgODksIDgwLCA3OSwgODIsIDgyLCA3OSwgNzksIDc4LCAxMjgsIDc1LCA4MiwgNjUsIAorICAgIDg0LCA3MywgNzcsIDc5LCA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCAKKyAgICA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA4MCwgODUsIDEyOCwgNzUsIAorICAgIDgwLCA3OSwgNzksIDEyOCwgNzUsIDgwLCA3OSwgMTI4LCA3NSwgODAsIDczLCAxMjgsIDc1LCA4MCwgNjksIDc4LCAxMjgsIAorICAgIDc1LCA4MCwgNjksIDY5LCAxMjgsIDc1LCA4MCwgNjksIDEyOCwgNzUsIDgwLCA2NSwgNzgsIDEyOCwgNzUsIDgwLCA2NSwgCisgICAgMTI4LCA3NSwgNzksIDg4LCAxMjgsIDc1LCA3OSwgODYsIDg1LCA4NSwgMTI4LCA3NSwgNzksIDg0LCA3OSwgMTI4LCA3NSwgCisgICAgNzksIDgyLCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA3OSwgODIsIDc5LCA3OCwgNzMsIDgzLCAxMjgsIDc1LCA3OSwgODIsIDY5LCAKKyAgICA2NSwgMjA2LCA3NSwgNzksIDgyLCA2NSwgNzgsIDczLCAxOTUsIDc1LCA3OSwgODEsIDc4LCA2OCwgNzksIDc4LCAxMjgsIAorICAgIDc1LCA3OSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDgwLCAxMjgsIDc1LCA3OSwgNzksIDgwLCA3OSwgMTI4LCA3NSwgCisgICAgNzksIDc5LCA3NywgODUsIDg1LCA4NCwgMTI4LCA3NSwgNzksIDc5LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIDc3LCAKKyAgICA2NSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgMTkzLCA3NSwgNzksIDc3LCAyMDEsIDc1LCA3OSwgNzcsIAorICAgIDY2LCA4NSwgODYsIDY1LCAxMjgsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDE5MywgNzUsIDc5LCA3NywgNjYsIDIxMywgCisgICAgNzUsIDc5LCA3NSwgMTI4LCA3NSwgNzksIDIwMywgNzUsIDc5LCA3MywgMTI4LCA3NSwgNzksIDIwMSwgNzUsIDc5LCA3MiwgCisgICAgMTI4LCA3NSwgNzksIDcxLCA3MiwgNzksIDc3LCAxMjgsIDc1LCA3OSwgNjksIDg0LCAxMjgsIDc1LCA3OSwgNjUsIDEyOCwgCisgICAgNzUsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgNzgsIDczLCA3MCwgNjksIDEyOCwgNzUsIDc4LCA3MywgNzAsIAorICAgIDE5NywgNzUsIDc3LCAxMjgsIDc1LCAyMDUsIDc1LCA3NiwgNzMsIDg0LCA3OSwgNzgsIDEyOCwgNzUsIDc2LCA2NSwgODMsIAorICAgIDc3LCA2NSwgMTI4LCA3NSwgNzYsIDY1LCA4MywgNzcsIDE5MywgNzUsIDc2LCA2NSwgMTI4LCA3NSwgNzYsIDEyOCwgNzUsIAorICAgIDc1LCA4NSwgMTI4LCA3NSwgNzUsIDc5LCAxMjgsIDc1LCA3NSwgNzMsIDEyOCwgNzUsIDc1LCA2OSwgNjksIDEyOCwgNzUsIAorICAgIDc1LCA2OSwgMTI4LCA3NSwgNzUsIDY1LCAxMjgsIDc1LCA3NSwgMTI4LCA3NSwgNzQsIDY5LCAxMjgsIDc1LCA3MywgODksIAorICAgIDY5LCA3OSwgNzUsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKKyAgICA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODAsIDczLCA2OSwgODUsIAorICAgIDgwLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgNzUsIDczLCA4OSwgCisgICAgNjksIDc5LCA3NSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAorICAgIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDIwMywgNzUsIDczLCA4OCwgCisgICAgMTI4LCA3NSwgNzMsIDg0LCAxMjgsIDc1LCA3MywgODMsIDczLCA3NywgNTMsIDEyOCwgNzUsIDczLCA4MywgNzMsIDc3LCAKKyAgICAxODEsIDc1LCA3MywgODMsIDcyLCAxMjgsIDc1LCA3MywgODMsIDY1LCA3NiwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgODcsIAorICAgIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NSwgCisgICAgNzMsIDgyLCA3OSwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgMTI4LCA3NSwgNzMsIDgyLCAKKyAgICA3MSwgNzIsIDczLCAyMTgsIDc1LCA3MywgODAsIDEyOCwgNzUsIDczLCAyMDgsIDc1LCA3MywgNzgsIDgzLCA3MiwgNzMsIAorICAgIDgwLCAxMjgsIDc1LCA3MywgNzgsIDY4LCA2OSwgODIsIDcxLCA2NSwgODIsIDg0LCA2OSwgNzgsIDEyOCwgNzUsIDczLCA3MywgCisgICAgMTI4LCA3NSwgNzMsIDcyLCAxMjgsIDc1LCA3MywgNjksIDg4LCAxMjgsIDc1LCA3MywgNjksIDgwLCAxMjgsIDc1LCA3MywgCisgICAgNjksIDEyOCwgNzUsIDczLCA2OCwgMTI4LCA3NSwgNzMsIDE5NiwgNzUsIDczLCA2NywgNzUsIDEyOCwgNzUsIDcyLCA5MCwgCisgICAgMTI4LCA3NSwgNzIsIDg3LCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA4NSwgNjksIDc4LCA0NSwgNzYsIDg1LCAxOTcsIDc1LCAKKyAgICA3MiwgODUsIDY5LCAyMDYsIDc1LCA3MiwgODUsIDY1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCA4NSwgMTI4LCA3NSwgNzIsIAorICAgIDc5LCAyMTIsIDc1LCA3MiwgNzksIDc4LCAxMjgsIDc1LCA3MiwgNzksIDc3LCA4NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgCisgICAgMTI4LCA3NSwgNzIsIDIwNywgNzUsIDcyLCA3MywgODQsIDEyOCwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgMjAwLCA3NSwgCisgICAgNzIsIDczLCAxMjgsIDc1LCA3MiwgNzIsIDc5LCAxMjgsIDc1LCA3MiwgNzIsIDY1LCAxMjgsIDc1LCA3MiwgNjksIDg0LCAKKyAgICA3MiwgMTI4LCA3NSwgNzIsIDY5LCA3MywgMTI4LCA3NSwgNzIsIDY5LCA2OSwgMTI4LCA3NSwgNzIsIDY5LCAxMjgsIDc1LCAKKyAgICA3MiwgNjUsIDgyLCAxMjgsIDc1LCA3MiwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNzIsIDY1LCA3OCwgMTk5LCA3NSwgNzIsIAorICAgIDY1LCA3OCwgNjgsIDE5MywgNzUsIDcyLCA2NSwgNzgsIDEyOCwgNzUsIDcyLCA2NSwgNzcsIDg0LCAyMDEsIDc1LCA3MiwgCisgICAgNjUsIDc1LCA2NSwgODMsIDgzLCA3MywgNjUsIDIwNiwgNzUsIDcyLCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA2NSwgNzIsIAorICAgIDEyOCwgNzUsIDcyLCA2NSwgMjAwLCA3NSwgNzIsIDY1LCA2NSwgMTI4LCA3NSwgNzEsIDEyOCwgNzUsIDY5LCA4OSwgNjcsIAorICAgIDY1LCA4MCwgMTI4LCA3NSwgNjksIDg5LCA2NiwgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzUsIDY5LCA4OSwgMTI4LCA3NSwgCisgICAgNjksIDIxNywgNzUsIDY5LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg0LCA4NCwgMjAxLCA3NSwgCisgICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzUsIDY5LCA4MiwgNjksIDg0LCAxMjgsIDc1LCA2OSwgNzksIDg3LCAxMjgsIDc1LCAKKyAgICA2OSwgNzgsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCAxOTMsIAorICAgIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDE5MywgNzUsIDY5LCA3OCwgNjUsIDg0LCAxMjgsIDc1LCA2OSwgNzgsIDEyOCwgCisgICAgNzUsIDY5LCA3NywgODAsIDg1LCA3NiwgMTI4LCA3NSwgNjksIDc3LCA4MCwgODUsIDIwNCwgNzUsIDY5LCA3NywgODAsIDc2LCAKKyAgICA3MywgMTI4LCA3NSwgNjksIDc3LCA4MCwgNzYsIDIwMSwgNzUsIDY5LCA3NywgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgCisgICAgMTI4LCA3NSwgNjksIDc3LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgNjksIDc2LCA4NiwgNzMsIDIwNiwgNzUsIDY5LCAKKyAgICA3MiwgNjksIDcyLCAxMjgsIDc1LCA2OSwgNzIsIDY5LCAyMDAsIDc1LCA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MCwgODUsIAorICAgIDc2LCA2NSwgMTI4LCA3NSwgNjksIDY5LCA4MywgODUsIDEyOCwgNzUsIDY5LCA2OSwgODAsIDczLCA3OCwgMTk5LCA3NSwgCisgICAgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY3LCA2NSwgNzYsIDEyOCwgNzUsIDY2LCAxMjgsIDc1LCA2NSwgOTAsIDY1LCAKKyAgICA3NSwgMjAwLCA3NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg5LCA2NSwgMjAwLCA3NSwgNjUsIAorICAgIDg4LCAxMjgsIDc1LCA2NSwgODcsIDczLCAxMjgsIDc1LCA2NSwgODYsIDg5LCA3NSwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgCisgICAgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODUsIDIwNiwgNzUsIDY1LCA4NCwgNzksIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDczLCAKKyAgICA4MywgODQsIDczLCAxMjgsIDc1LCA2NSwgODQsIDcyLCA2NSwgNzUsIDE5MywgNzUsIDY1LCA4NCwgNjUsIDg2LCA2NSwgODMsIAorICAgIDc3LCA2NSwgMTI4LCA3NSwgNjUsIDg0LCA2NSwgODYsIDE5MywgNzUsIDY1LCA4NCwgNjUsIDc1LCA2NSwgNzgsIDY1LCA0NSwgCisgICAgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgNzgsIDE5MywgNzUsIDY1LCA4MywgODIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDc1LCAKKyAgICA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCAyMDYsIDc1LCA2NSwgODMsIDgyLCA2NSwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgCisgICAgMTkzLCA3NSwgNjUsIDgzLCA3NSwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODMsIDc1LCA2NSwgMjA0LCA3NSwgNjUsIDgzLCAKKyAgICA3MiwgNzcsIDczLCA4MiwgMjAxLCA3NSwgNjUsIDgyLCA4MywgNzIsIDY1LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4MiwgNzksIAorICAgIDgyLCA3MywgNzMsIDEyOCwgNzUsIDY1LCA4MiwgNjksIDIwNiwgNzUsIDY1LCA4MiwgNjUsIDg0LCA4NCwgNzksIDEyOCwgCisgICAgNzUsIDY1LCA4MiwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODMsIDgzLCA2NSwgNzgsIAorICAgIDcxLCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MiwgNzMsIDY5LCAKKyAgICA4NSwgNzYsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgCisgICAgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3NSwgNjUsIDgwLCAKKyAgICA4MCwgNjUsIDEyOCwgNzUsIDY1LCA4MCwgODAsIDE5MywgNzUsIDY1LCA4MCwgNzksIDEyOCwgNzUsIDY1LCA4MCwgNzIsIAorICAgIDEyOCwgNzUsIDY1LCA4MCwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODAsIDY1LCAxMjgsIDc1LCA2NSwgODAsIDEyOCwgNzUsIAorICAgIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA3NSwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgNjUsIDc4LCAxOTksIDc1LCA2NSwgCisgICAgNzgsIDY1LCA3NSwgNzksIDEyOCwgNzUsIDY1LCA3NywgNTIsIDEyOCwgNzUsIDY1LCA3NywgNTAsIDEyOCwgNzUsIDY1LCAKKyAgICA3NSwgNzksIDEyOCwgNzUsIDY1LCA3NSwgNjUsIDY2LCA2NSwgODQsIDEyOCwgNzUsIDY1LCA3NSwgMTI4LCA3NSwgNjUsIAorICAgIDIwMywgNzUsIDY1LCA3MywgODIsIDczLCAxMjgsIDc1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCAyMDEsIDc1LCA2NSwgNzAsIAorICAgIDEyOCwgNzUsIDY1LCAxOTgsIDc1LCA2NSwgNjgsIDUzLCAxMjgsIDc1LCA2NSwgNjgsIDE4MSwgNzUsIDY1LCA2OCwgNTIsIAorICAgIDEyOCwgNzUsIDY1LCA2OCwgNTEsIDEyOCwgNzUsIDY1LCA2OCwgMTc5LCA3NSwgNjUsIDY4LCA1MCwgMTI4LCA3NSwgNjUsIAorICAgIDY2LCAxOTMsIDc1LCA2NSwgNjYsIDEyOCwgNzUsIDY1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIAorICAgIDc1LCA2NSwgNjUsIDcwLCAxMjgsIDc1LCA2NSwgNTAsIDEyOCwgNzUsIDY1LCAxNzgsIDc1LCA0OCwgNDgsIDU2LCAxMjgsIAorICAgIDc1LCA0OCwgNDgsIDU1LCAxMjgsIDc1LCA0OCwgNDgsIDU0LCAxMjgsIDc1LCA0OCwgNDgsIDUzLCAxMjgsIDc1LCA0OCwgCisgICAgNDgsIDUyLCAxMjgsIDc1LCA0OCwgNDgsIDUxLCAxMjgsIDc1LCA0OCwgNDgsIDUwLCAxMjgsIDc1LCA0OCwgNDgsIDQ5LCAKKyAgICAxMjgsIDc0LCA4NywgNjUsIDEyOCwgNzQsIDg1LCA4NSwgMTI4LCA3NCwgODUsIDg0LCAxMjgsIDc0LCA4NSwgODAsIDczLCAKKyAgICA4NCwgNjksIDgyLCAxMjgsIDc0LCA4NSwgNzksIDg0LCAxMjgsIDc0LCA4NSwgNzksIDgwLCAxMjgsIDc0LCA4NSwgNzgsIAorICAgIDc5LCAxMjgsIDc0LCA4NSwgNzgsIDY5LCAxMjgsIDc0LCA4NSwgNzYsIDg5LCAxMjgsIDc0LCA4NSwgNjksIDg1LCA3MywgCisgICAgMTI4LCA3NCwgODUsIDY4LCA3MSwgNjksIDEyOCwgNzQsIDg1LCA2OCwgNjksIDc5LCA0NSwgODMsIDgwLCA2NSwgNzgsIDczLCAKKyAgICA4MywgMjAwLCA3NCwgNzksIDg5LCA3OSwgODUsIDIxMSwgNzQsIDc5LCA4OSwgMTI4LCA3NCwgNzksIDIxMiwgNzQsIDc5LCAKKyAgICA3OCwgNzEsIDEyOCwgNzQsIDc5LCA3OCwgMTkzLCA3NCwgNzksIDc1LCA2OSwgODIsIDEyOCwgNzQsIDc5LCA3MywgNzgsIAorICAgIDY5LCA2OCwgMTI4LCA3NCwgNzksIDczLCA3OCwgMTI4LCA3NCwgNzksIDY1LCAxMjgsIDc0LCA3NCwgODksIDg4LCAxMjgsIAorICAgIDc0LCA3NCwgODksIDg0LCAxMjgsIDc0LCA3NCwgODksIDgwLCAxMjgsIDc0LCA3NCwgODksIDEyOCwgNzQsIDc0LCA4NSwgCisgICAgODgsIDEyOCwgNzQsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc0LCA3NCwgODUsIDgyLCAKKyAgICAxMjgsIDc0LCA3NCwgODUsIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODAsIAorICAgIDEyOCwgNzQsIDc0LCA4NSwgNzksIDEyOCwgNzQsIDc0LCA4NSwgMTI4LCA3NCwgNzQsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIAorICAgIDc5LCA4NCwgMTI4LCA3NCwgNzQsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDc5LCAxMjgsIDc0LCA3NCwgNzMsIDg4LCAxMjgsIAorICAgIDc0LCA3NCwgNzMsIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3NCwgCisgICAgNzQsIDczLCA2OSwgODQsIDEyOCwgNzQsIDc0LCA3MywgNjksIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCAxMjgsIDc0LCAKKyAgICA3NCwgNzMsIDEyOCwgNzQsIDc0LCA2OSwgNjksIDEyOCwgNzQsIDc0LCA2OSwgMTI4LCA3NCwgNzQsIDY1LCAxMjgsIDc0LCAKKyAgICA3MywgNzYsIDEyOCwgNzQsIDczLCA3MiwgODYsIDY1LCA3NywgODUsIDc2LCA3MywgODksIDY1LCAxMjgsIDc0LCA3MywgNjUsIAorICAgIDEyOCwgNzQsIDcyLCA3OSwgMTI4LCA3NCwgNzIsIDY5LCA3MiwgMTI4LCA3NCwgNzIsIDY1LCA3OCwgMTI4LCA3NCwgNzIsIAorICAgIDY1LCA3NywgMTI4LCA3NCwgNzIsIDY1LCAxMjgsIDc0LCA2OSwgODUsIDEyOCwgNzQsIDY5LCA4MiwgODUsIDgzLCA2NSwgCisgICAgNzYsIDY5LCA3NywgMTI4LCA3NCwgNjksIDgyLCA2NSwgMjA2LCA3NCwgNjksIDgyLCA2NSwgMTI4LCA3NCwgNjksIDgyLCAKKyAgICAxMjgsIDc0LCA2OSwgNzIsIDEyOCwgNzQsIDY5LCAyMDAsIDc0LCA2OSwgNzEsIDc5LCA3MSwgNjUsIDc4LCAxMjgsIDc0LCAKKyAgICA2OSwgNjksIDc3LCAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc0LCA2NSwgODYsIDczLCA4OSwgNjUsIAorICAgIDc4LCA3MywgMTI4LCA3NCwgNjUsIDgyLCAxMjgsIDc0LCA2NSwgODAsIDY1LCA3OCwgNjksIDgzLCAxOTcsIDc0LCA2NSwgCisgICAgNzgsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDc0LCA2NSwgNzYsIDc2LCA2NSwgNzQsIDY1LCA3NiwgNjUsIDc2LCA3OSwgODUsIAorICAgIDcyLCA3OSwgODUsIDEyOCwgNzQsIDY1LCA2OCwgNjksIDEyOCwgNzQsIDY1LCA2NSwgMTI4LCA3NCwgNDUsIDgzLCA3MywgCisgICAgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIDE5NiwgMjAyLCA3MywgOTAsIDcyLCA3MywgODQsIDgzLCA2NSwgMTI4LCAKKyAgICA3MywgOTAsIDcyLCA3MywgODQsIDgzLCAxOTMsIDczLCA5MCwgNzIsIDY5LCAxMjgsIDczLCA4OSwgNjksIDc1LCAxMjgsIAorICAgIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDg1LCA3NCwgNjUsIDEyOCwgNzMsIDg1LCAxMjgsIDczLCA4NCwgCisgICAgNjksIDgyLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgODQsIDY5LCA3NywgMTI4LCA3MywgODMsIDgzLCA3MiwgNjUsIDgyLCAKKyAgICAxMjgsIDczLCA4MywgMjExLCA3MywgODMsIDc5LCA3OCwgMTI4LCA3MywgODMsIDc5LCAyMDYsIDczLCA4MywgNjksIDc4LCAKKyAgICA0NSwgNzMsIDgzLCA2OSwgNzgsIDEyOCwgNzMsIDgzLCA2NSwgNzUsIDczLCAxOTMsIDczLCA4MywgNDUsIDgwLCA3MywgNzYsIAorICAgIDc2LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODUsIDg5LCA2NSwgCisgICAgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzksIDg0LCA3MywgNzAsIDczLCA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgODQsIDY5LCAKKyAgICAxOTYsIDczLCA3OSwgODQsIDY1LCAxMjgsIDczLCA3OSwgODQsIDE5MywgNzMsIDc5LCA4MiwgMTI4LCA3MywgNzksIDY4LCAKKyAgICA3MiwgNjUsIDY4LCA3MiwgMTI4LCA3MywgNzgsIDg2LCA3MywgODMsIDczLCA2NiwgNzYsIDE5NywgNzMsIDc4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNjksIDY4LCAxMjgsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCAxOTYsIDczLCA3OCwgODYsIDY5LCA4MiwgCisgICAgODMsIDE5NywgNzMsIDc4LCA4NCwgNzMsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCAKKyAgICA3MywgMTk1LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIAorICAgIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCAKKyAgICA3MywgNzgsIDE5OSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MiwgNzksIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDczLCA3OCwgODQsIAorICAgIDY5LCA4MiwgODAsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzksIDY3LCAKKyAgICA3NSwgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgNzMsIDc4LCA4NCwgNjksIAorICAgIDgyLCA3MywgNzksIDIxMCwgNzMsIDc4LCA4NCwgNjksIDgyLCA2OSwgODMsIDIxMiwgNzMsIDc4LCA4NCwgNjksIDgyLCA2NywgCisgICAgNjUsIDc2LCA2NSwgODQsIDY5LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgCisgICAgNzYsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDIwNCwgNzMsIDc4LCA4MywgODUsIDc2LCA2NSwgMjEwLCAKKyAgICA3MywgNzgsIDgzLCA4NCwgODIsIDg1LCA3NywgNjksIDc4LCA4NCwgNjUsIDIwNCwgNzMsIDc4LCA4MywgNzMsIDY4LCA2OSwgCisgICAgMTI4LCA3MywgNzgsIDgzLCA2OSwgODIsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4MywgNjksIDY3LCA4NCwgMTI4LCAKKyAgICA3MywgNzgsIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDczLCA3OCwgNzgsIDc5LCA2NywgCisgICAgNjksIDc4LCA2NywgNjksIDEyOCwgNzMsIDc4LCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDgyLCAxMjgsIDczLCAKKyAgICA3OCwgNzgsIDY5LCAyMTAsIDczLCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3MywgNzgsIDcxLCA4NSwgMTI4LCA3MywgNzgsIAorICAgIDczLCAxMjgsIDczLCA3OCwgNzIsIDczLCA2NiwgNzMsIDIxMiwgNzMsIDc4LCA3MiwgNjksIDgyLCA2OSwgNzgsIDIxMiwgCisgICAgNzMsIDc4LCA3MSwgODcsIDY1LCA5MCwgMTI4LCA3MywgNzgsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA3MywgNzgsIDcwLCA3NiwgODUsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDczLCA3OCwgNzAsIDczLCA3OCwgNzMsIDg0LCA4OSwgCisgICAgMTI4LCA3MywgNzgsIDcwLCA3MywgNzgsIDczLCA4NCwgMjE3LCA3MywgNzgsIDY4LCA4NSwgODMsIDg0LCA4MiwgNzMsIDY1LCAKKyAgICAyMDQsIDczLCA3OCwgNjgsIDczLCA4MiwgNjksIDY3LCAyMTIsIDczLCA3OCwgNjgsIDczLCA2NywgNjUsIDg0LCA3OSwgODIsIAorICAgIDEyOCwgNzMsIDc4LCA2OCwgNzMsIDE5NSwgNzMsIDc4LCA2OCwgNjksIDg4LCAxMjgsIDczLCA3OCwgNjgsIDY5LCA4MCwgCisgICAgNjksIDc4LCA2OCwgNjksIDc4LCAyMTIsIDczLCA3OCwgNjcsIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzMsIDc4LCAKKyAgICA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAyMTEsIDczLCA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA3MywgNzgsIAorICAgIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCAxOTcsIDczLCA3OCwgNjcsIDc2LCA4NSwgNjgsIDczLCA3OCwgMTk5LCA3MywgCisgICAgNzgsIDY3LCA3MiwgMTI4LCA3MywgNzgsIDY1LCA4MCwgMTI4LCA3MywgNzgsIDQ1LCA2NSwgNzYsIDY1LCA3MCwgMTI4LCAKKyAgICA3MywgNzcsIDgwLCA2OSwgODIsIDczLCA2NSwgMjA0LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA4NSwgCisgICAgMjA1LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA2NSwgMTI4LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCAKKyAgICA2OSwgNjcsIDg0LCAxOTMsIDczLCA3NywgNzMsIDgzLCA2OSwgNzksIDIxMSwgNzMsIDc3LCA3MywgNzgsIDUxLCAxMjgsIAorICAgIDczLCA3NywgNzMsIDc4LCAxMjgsIDczLCA3NywgNzMsIDIwNiwgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIDgyLCA3OSwgCisgICAgNzgsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIDgyLCA2NSwgMTI4LCA3MywgNzcsIDczLCA3MCwgNzksIDc4LCAKKyAgICA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNjgsIDczLCA2NSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA2NSwgNzEsIAorICAgIDE5NywgNzMsIDc2LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3NiwgODUsIDg5LCAxMjgsIDczLCA3NiwgCisgICAgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDc2LCA4NSwgODQsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCAKKyAgICA4NSwgNTIsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTEsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgCisgICAgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDIxMywgNzMsIDc2LCA1MCwgMTI4LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgCisgICAgNzMsIDc1LCA2NSwgODIsIDE5MywgNzMsIDc0LCAxMjgsIDczLCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCAKKyAgICA3MSwgNzMsIDEyOCwgNzMsIDcxLCAyMDEsIDczLCA3MSwgNzEsIDg3LCA4MywgMTI4LCA3MywgNzAsIDczLCA3OCwgMTI4LCAKKyAgICA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgCisgICAgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgzLCA4MywgNjUsIAorICAgIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MiwgNzMsIDY5LCAKKyAgICA4NSwgNzYsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDczLCA2OSwgODUsIAorICAgIDc4LCA3MSwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgCisgICAgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDczLCA2OSwgODUsIDc4LCAKKyAgICA3MSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCAxOTksIDczLCA2OCwgNzYsIAorICAgIDY5LCAxMjgsIDczLCA2OCwgNzMsIDc3LCAxMjgsIDczLCA2OCwgNzMsIDIwNSwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKKyAgICA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKKyAgICA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTcsIDQ4LCAKKyAgICA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA2OCwgNTUsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDU1LCA2OCwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1NSwgNTQsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCAKKyAgICA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OSwgNTAsIDQ5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDgsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDcwLCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1NCwgNTQsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUzLCAKKyAgICA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgNTcsIDU3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1NCwgNTAsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUwLCAKKyAgICA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTIsIDY2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNzAsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY4LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MywgNjYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDU3LCAKKyAgICA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NywgNDksIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTYsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MSwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MywgNTEsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCAKKyAgICA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTIsIDY4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDQ5LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MiwgNjksIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCAKKyAgICA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDU3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNzAsIAorICAgIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3MywgCisgICAgNjcsIDcyLCA3OSwgODUsIDEyOCwgNzMsIDY3LCA3MiwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIDczLCA3NywgNjUsIDg0LCAKKyAgICA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgNjUsIDY4LCA3MywgNzgsIDEyOCwgNzMsIDY3LCA2OSwgNzYsIDY1LCA3OCwgNjgsIAorICAgIDczLCA2NywgNDUsIDg5LCA4MiwgMTI4LCA3MywgNjYsIDczLCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3MywgNjUsIDg1LCA2OCwgCisgICAgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNTMsIDEyOCwgNzMsIDQ4LCA0OSwgNTIsIDEyOCwgNzMsIDQ4LCA0OSwgNTEsIDEyOCwgCisgICAgNzMsIDQ4LCA0OSwgNTAsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ5LCAxMjgsIDczLCAKKyAgICA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OCwgMTI4LCA3MywgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNzMsIAorICAgIDQ4LCA0OCwgNTcsIDEyOCwgNzMsIDQ4LCA0OCwgNTYsIDEyOCwgNzMsIDQ4LCA0OCwgNTUsIDEyOCwgNzMsIDQ4LCA0OCwgCisgICAgNTQsIDEyOCwgNzMsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDczLCA0OCwgNDgsIDUzLCAxMjgsIDczLCA0OCwgNDgsIDUyLCAKKyAgICAxMjgsIDczLCA0OCwgNDgsIDUxLCAxMjgsIDczLCA0OCwgNDgsIDUwLCAxMjgsIDczLCA0OCwgNDgsIDQ5LCAxMjgsIDczLCAKKyAgICA0NSwgODksIDg1LCAxMjgsIDczLCA0NSwgODksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCA3OSwgMTI4LCA3MywgNDUsIAorICAgIDg5LCA2OSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA3MywgCisgICAgNDUsIDg5LCA2NSwgMTI4LCA3MywgNDUsIDc5LCA0NSwgNzMsIDEyOCwgNzMsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDY5LCAKKyAgICA4NSwgMTI4LCA3MywgNDUsIDY2LCA2OSwgNjUsIDc3LCAxMjgsIDczLCA0NSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIAorICAgIDczLCA0NSwgNjUsIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDcxLCAxMjgsIDcyLCA5MCwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgCisgICAgOTAsIDgwLCAxMjgsIDcyLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA4NywgNzEsIDEyOCwgNzIsIDkwLCA4NywgMTI4LCA3MiwgCisgICAgOTAsIDg0LCAxMjgsIDcyLCA5MCwgNzEsIDEyOCwgNzIsIDg5LCA4MywgODQsIDY5LCA4MiwgNjksIDgzLCA3MywgMjExLCAKKyAgICA3MiwgODksIDgwLCA3OSwgNjgsIDczLCA2NSwgODMsIDg0LCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgCisgICAgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDQ1LCA3NywgNzMsIDc4LCA4NSwgODMsIAorICAgIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDIwNiwgNzIsIDg4LCA4NywgCisgICAgNzEsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDg1LCAKKyAgICA3OSwgODAsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDEyOCwgNzIsIDg4LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA3OSwgODQsIAorICAgIDEyOCwgNzIsIDg4LCA3OSwgODAsIDEyOCwgNzIsIDg4LCA3OSwgMTI4LCA3MiwgODgsIDczLCA4OCwgMTI4LCA3MiwgODgsIAorICAgIDczLCA4NCwgMTI4LCA3MiwgODgsIDczLCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDg4LCA3MywgCisgICAgNjksIDg0LCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgMTI4LCA3MiwgODgsIDczLCAKKyAgICAxMjgsIDcyLCA4OCwgNjksIDg4LCAxMjgsIDcyLCA4OCwgNjksIDgwLCAxMjgsIDcyLCA4OCwgNjksIDEyOCwgNzIsIDg4LCAKKyAgICA2NSwgODgsIDEyOCwgNzIsIDg4LCA2NSwgODQsIDEyOCwgNzIsIDg4LCA2NSwgODAsIDEyOCwgNzIsIDg4LCA2NSwgMTI4LCAKKyAgICA3MiwgODcsIDg1LCAxMjgsIDcyLCA4NywgNjUsIDczLCA4MiwgMTI4LCA3MiwgODYsIDEyOCwgNzIsIDg1LCA4MiwgNjUsIAorICAgIDc4LCAxMjgsIDcyLCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDY4LCAxMjgsIDcyLCA4NSwgCisgICAgNzgsIDY4LCA4MiwgNjksIDE5NiwgNzIsIDg1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCA2NSwgNzgsIDEyOCwgNzIsIDg1LCAKKyAgICA3NywgNjUsIDIwNiwgNzIsIDg1LCA3NiwgNTAsIDEyOCwgNzIsIDg1LCA3MywgNzMsIDg0LCA3OSwgMTI4LCA3MiwgODUsIAorICAgIDY2LCA1MCwgMTI4LCA3MiwgODUsIDY2LCAxNzgsIDcyLCA4NSwgNjYsIDEyOCwgNzIsIDg1LCA2NSwgODIsIDY1LCA2OCwgCisgICAgNjgsIDc5LCAxMjgsIDcyLCA4MiwgODksIDg2LCA3OCwgNzMsIDE5MywgNzIsIDgwLCA4NywgNzEsIDEyOCwgNzIsIDgwLCAKKyAgICA2NSwgMTI4LCA3MiwgODAsIDEyOCwgNzIsIDc5LCA4NSwgODIsIDcxLCA3NiwgNjUsIDgzLCA4MywgMTI4LCA3MiwgNzksIAorICAgIDg1LCAyMTAsIDcyLCA3OSwgODQsIDY1LCAxMjgsIDcyLCA3OSwgODIsIDgzLCA2OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgCisgICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNzYsIDIxNywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIAorICAgIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCAKKyAgICA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgCisgICAgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDgsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTQsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTIsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIAorICAgIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCAKKyAgICA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCisgICAgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTEsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTAsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNDksIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNDksIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIAorICAgIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCAKKyAgICA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgCisgICAgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTQsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTMsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDEyOCwgNzIsIDc5LCA4MiwgMTkzLCA3MiwgNzksIAorICAgIDc5LCA4MiwgODUsIDEyOCwgNzIsIDc5LCA3OSwgNzgsIDEyOCwgNzIsIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCA3MywgCisgICAgNjcsIDEyOCwgNzIsIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCA3MywgMTk1LCA3MiwgNzksIDc2LCA2OSwgMTI4LCAKKyAgICA3MiwgNzksIDc2LCA2OCwgNzMsIDc4LCAxOTksIDcyLCA3OSwgNzYsIDY1LCA3NywgMTI4LCA3MiwgNzksIDc2LCA2NSwgCisgICAgMjA1LCA3MiwgNzksIDc1LCA2NSwgMTI4LCA3MiwgNzksIDczLCAxMjgsIDcyLCA3OSwgNjksIDEyOCwgNzIsIDc4LCA4NSwgCisgICAgODQsIDEyOCwgNzIsIDc4LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA3OCwgODUsIDc5LCAxMjgsIDcyLCA3OCwgNzksIDg4LCAKKyAgICAxMjgsIDcyLCA3OCwgNzksIDg0LCAxMjgsIDcyLCA3OCwgNzksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDg4LCAxMjgsIDcyLCAKKyAgICA3OCwgNzMsIDg0LCAxMjgsIDcyLCA3OCwgNzMsIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzgsIAorICAgIDczLCA2OSwgODQsIDEyOCwgNzIsIDc4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAxMjgsIDcyLCA3OCwgCisgICAgNzMsIDEyOCwgNzIsIDc4LCA2OSwgODgsIDEyOCwgNzIsIDc4LCA2OSwgODAsIDEyOCwgNzIsIDc4LCA2OSwgMTI4LCA3MiwgCisgICAgNzgsIDY1LCA4OCwgMTI4LCA3MiwgNzgsIDY1LCA4NCwgMTI4LCA3MiwgNzgsIDY1LCA4MCwgMTI4LCA3MiwgNzgsIDY1LCAKKyAgICAxMjgsIDcyLCA3NywgODksIDg4LCAxMjgsIDcyLCA3NywgODksIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgMTI4LCAKKyAgICA3MiwgNzcsIDg5LCA4MCwgMTI4LCA3MiwgNzcsIDg5LCAxMjgsIDcyLCA3NywgODUsIDg4LCAxMjgsIDcyLCA3NywgODUsIAorICAgIDg0LCAxMjgsIDcyLCA3NywgODUsIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgMTI4LCA3MiwgNzcsIDg1LCA4MCwgCisgICAgMTI4LCA3MiwgNzcsIDg1LCA3OSwgODgsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAKKyAgICAxMjgsIDcyLCA3NywgODUsIDEyOCwgNzIsIDc3LCA3OSwgODgsIDEyOCwgNzIsIDc3LCA3OSwgODQsIDEyOCwgNzIsIDc3LCAKKyAgICA3OSwgODAsIDEyOCwgNzIsIDc3LCA3OSwgMTI4LCA3MiwgNzcsIDczLCA4OCwgMTI4LCA3MiwgNzcsIDczLCA4NCwgMTI4LCAKKyAgICA3MiwgNzcsIDczLCA4MCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc3LCA3MywgNjksIDgwLCAxMjgsIAorICAgIDcyLCA3NywgNzMsIDY5LCAxMjgsIDcyLCA3NywgNzMsIDEyOCwgNzIsIDc3LCA2OSwgMTI4LCA3MiwgNzcsIDY1LCA4OCwgCisgICAgMTI4LCA3MiwgNzcsIDY1LCA4NCwgMTI4LCA3MiwgNzcsIDY1LCA4MCwgMTI4LCA3MiwgNzcsIDY1LCAxMjgsIDcyLCA3NiwgCisgICAgODksIDg4LCAxMjgsIDcyLCA3NiwgODksIDg0LCAxMjgsIDcyLCA3NiwgODksIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg5LCAKKyAgICA4MiwgMTI4LCA3MiwgNzYsIDg5LCA4MCwgMTI4LCA3MiwgNzYsIDg5LCAxMjgsIDcyLCA3NiwgODUsIDg4LCAxMjgsIDcyLCAKKyAgICA3NiwgODUsIDg0LCAxMjgsIDcyLCA3NiwgODUsIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgMTI4LCA3MiwgNzYsIAorICAgIDg1LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NiwgCisgICAgODUsIDc5LCAxMjgsIDcyLCA3NiwgODUsIDEyOCwgNzIsIDc2LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA3OSwgODAsIDEyOCwgCisgICAgNzIsIDc2LCA3OSwgMTI4LCA3MiwgNzYsIDczLCA4OCwgMTI4LCA3MiwgNzYsIDczLCA4NCwgMTI4LCA3MiwgNzYsIDczLCAKKyAgICA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc2LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NiwgNzMsIAorICAgIDY5LCAxMjgsIDcyLCA3NiwgNzMsIDEyOCwgNzIsIDc2LCA2OSwgODgsIDEyOCwgNzIsIDc2LCA2OSwgODAsIDEyOCwgNzIsIAorICAgIDc2LCA2OSwgMTI4LCA3MiwgNzYsIDY1LCA4OCwgMTI4LCA3MiwgNzYsIDY1LCA4NCwgMTI4LCA3MiwgNzYsIDY1LCA4MCwgCisgICAgMTI4LCA3MiwgNzYsIDY1LCAxMjgsIDcyLCA3NSwgMTI4LCA3MiwgNzMsIDkwLCA2NiwgMTI4LCA3MiwgNzMsIDgzLCA4NCwgCisgICAgNzksIDgyLCA3MywgMTk1LCA3MiwgNzMsIDgyLCA3MywgODEsIDEyOCwgNzIsIDczLCA3MSwgNzIsIDQ1LCA4MiwgNjksIDg2LCAKKyAgICA2OSwgODIsIDgzLCA2OSwgNjgsIDQ1LCAxODUsIDcyLCA3MywgNjksIDg4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIAorICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MiwgCisgICAgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzgsIAorICAgIDczLCA2OSwgODUsIDc4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3MiwgCisgICAgNzMsIDY5LCA4NSwgMjAwLCA3MiwgNzMsIDY5LCAxMjgsIDcyLCA3MywgNjgsIDczLCA3OCwgMTk5LCA3MiwgNzMsIDY4LCAKKyAgICA2OSwgODQsIDEyOCwgNzIsIDczLCA2OCwgNjksIDEyOCwgNzIsIDcyLCA4NywgNjUsIDEyOCwgNzIsIDcyLCA4NSwgMTI4LCAKKyAgICA3MiwgNzIsIDczLCAxMjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDcyLCA3MiwgNjksIDEyOCwgNzIsIDcyLCA2NSwgNjUsIAorICAgIDEyOCwgNzIsIDcxLCAxMjgsIDcyLCA2OSwgODgsIDczLCA3MCwgNzksIDgyLCAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgCisgICAgNzksIDc4LCAxMjgsIDcyLCA2OSwgODIsIDg1LCA4NCwgODUsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDEyOCwgNzIsIDY5LCAKKyAgICA4MiwgNzcsIDczLCA4NCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA3MywgNzksIDc4LCA3MywgNjUsIDIwNiwgNzIsIAorICAgIDY5LCA4MiwgNzcsIDY5LCA4MywgMTI4LCA3MiwgNjksIDgyLCA2NSwgNjksIDg1LCAyMDUsIDcyLCA2OSwgNzgsIDcxLCAKKyAgICAxMjgsIDcyLCA2OSwgNzgsIDE5OSwgNzIsIDY5LCA3NywgODAsIDEyOCwgNzIsIDY5LCA3NiwgNzcsIDY5LCA4NCwgMTI4LCAKKyAgICA3MiwgNjksIDc2LCA3NywgNjksIDIxMiwgNzIsIDY5LCA3NiwgMjA1LCA3MiwgNjksIDc1LCA4NSwgODQsIDY1LCA2NSwgODIsIAorICAgIDg1LCAxMjgsIDcyLCA2OSwgNzMsIDgzLCA2OSwgNzMsIDEyOCwgNzIsIDY5LCA2NSwgODYsIDg5LCAxMjgsIDcyLCA2OSwgCisgICAgNjUsIDg2LCA2OSwgNzgsIDc2LCAyMTcsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCAKKyAgICAyMDYsIDcyLCA2OSwgNjUsIDgyLCA4NCwgMTI4LCA3MiwgNjksIDY1LCA4MiwgMjEyLCA3MiwgNjksIDY1LCA2OCwgODMsIAorICAgIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCA3OSwgNzgsIDE5NywgNzIsIDY5LCA2NSwgCisgICAgNjgsIDczLCA3OCwgNzEsIDEyOCwgNzIsIDY2LCA2NSwgODMsIDY1LCA0NSwgNjksIDgzLCA2NSwgODMsIDE5MywgNzIsIDY2LCAKKyAgICA2NSwgODMsIDE5MywgNzIsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzIsIDY1LCA4NiwgNjksIDEyOCwgNzIsIAorICAgIDY1LCA4NSwgODAsIDg0LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDcyLCA3MywgMTI4LCA3MiwgCisgICAgNjUsIDg0LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA2NSwgMTk4LCA3MiwgNjUsIDgzLCA2OSwgMjEwLCA3MiwgNjUsIDgzLCAKKyAgICA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCA3OCwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIAorICAgIDc5LCAyMDYsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA2NywgMTI4LCA3MiwgNjUsIDgyLCA3NSwgNzYsIDY5LCA2NSwgCisgICAgMjA2LCA3MiwgNjUsIDgyLCA2OCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzIsIDY1LCA4MiwgMTk2LCA3MiwgNjUsIDc4LCAKKyAgICA4NSwgNzgsIDc5LCAyMDcsIDcyLCA2NSwgNzgsIDcxLCA5MCwgNzIsIDc5LCAyMTMsIDcyLCA2NSwgNzgsIDY4LCA4MywgCisgICAgMTI4LCA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMTI4LCA3MiwgNjUsIDc4LCAKKyAgICA0NSwgNjUsIDc1LCA2NSwgODQsIDEyOCwgNzIsIDY1LCA3NywgOTAsIDY1LCAxMjgsIDcyLCA2NSwgNzcsIDc3LCA2OSwgCisgICAgMjEwLCA3MiwgNjUsIDc2LCA3MCwgMTI4LCA3MiwgNjUsIDc2LCA2NiwgNjksIDgyLCA2OCwgMTI4LCA3MiwgNjUsIDc2LCAKKyAgICA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDczLCA4NCwgODUsIDEyOCwgNzIsIDY1LCA3MywgODIsIDEyOCwgNzIsIAorICAgIDY1LCA3MSwgNzYsIDY1LCAyMTgsIDcyLCA2NSwgNzEsIDc2LCAxMjgsIDcyLCA2NSwgNzAsIDg1LCA3NSwgNzIsIDY1LCAKKyAgICAxMjgsIDcyLCA2NSwgNzAsIDg1LCA3NSwgNzIsIDEyOCwgNzIsIDY1LCA2OSwgNzEsIDIwNCwgNzIsIDY1LCA2OSwgMTI4LCAKKyAgICA3MiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY1LCA2NSwgNzcsIDEyOCwgNzIsIDY1LCAxOTMsIDcyLCA2NSwgNDUsIAorICAgIDcyLCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NiwgMTI4LCA3MiwgNDgsIDQ4LCA1NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgCisgICAgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIDEyOCwgNzIsIDQ4LCA0OCwgNTMsIDEyOCwgNzIsIDQ4LCA0OCwgNTIsIDEyOCwgCisgICAgNzIsIDQ4LCA0OCwgNTEsIDEyOCwgNzIsIDQ4LCA0OCwgNTAsIDEyOCwgNzIsIDQ4LCA0OCwgNDksIDEyOCwgNzIsIDQ1LCAKKyAgICA4NCwgODksIDgwLCAxOTcsIDcxLCA4OSwgODUsIDEyOCwgNzEsIDg5LCA3OSwgNzgsIDEyOCwgNzEsIDg5LCA3OSwgMTI4LCAKKyAgICA3MSwgODksIDczLCAxMjgsIDcxLCA4OSwgNzAsIDIxMywgNzEsIDg5LCA2OSwgNjksIDEyOCwgNzEsIDg5LCA2NSwgODMsIAorICAgIDEyOCwgNzEsIDg5LCA2NSwgNjUsIDEyOCwgNzEsIDg5LCA2NSwgMTI4LCA3MSwgODksIDEyOCwgNzEsIDg3LCA4NSwgMTI4LCAKKyAgICA3MSwgODcsIDczLCAxMjgsIDcxLCA4NywgNjksIDY5LCAxMjgsIDcxLCA4NywgNjksIDEyOCwgNzEsIDg3LCA2NSwgNjUsIAorICAgIDEyOCwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgODYsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDgzLCA3MiwgMTI4LCA3MSwgODUsIAorICAgIDgyLCA4NSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA1NSwgCisgICAgMTI4LCA3MSwgODUsIDc4LCA4NSwgMTI4LCA3MSwgODUsIDc4LCAyMTMsIDcxLCA4NSwgNzcsIDEyOCwgNzEsIDg1LCAyMDUsIAorICAgIDcxLCA4NSwgNzYsIDEyOCwgNzEsIDg1LCAxOTksIDcxLCA4NSwgNjksIDcyLCAxMjgsIDcxLCA4NSwgNjksIDIwMCwgNzEsIAorICAgIDg1LCA2OCwgMTI4LCA3MSwgODUsIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgNjgsIDc4LCA2OSwgODMsIDgzLCAKKyAgICAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2NSwgNzgsIDIwMSwgNzEsIDg1LCAxNzgsIDcxLCA4NCwgNjksIDIxMCwgNzEsIDgzLCAKKyAgICA4NSwgNzcsIDEyOCwgNzEsIDgzLCA4NSwgMjA1LCA3MSwgODIsIDIxMywgNzEsIDgyLCA3OSwgODUsIDc4LCA2OCwgMTI4LCAKKyAgICA3MSwgODIsIDc5LCA3OCwgODQsIDcyLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcxLCA4MiwgNjksIDcxLCA3OSwgCisgICAgODIsIDczLCA2NSwgMjA2LCA3MSwgODIsIDY5LCA2OSwgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAKKyAgICAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDgyLCA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIAorICAgIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDIxMCwgNzEsIDgyLCA2OSwgCisgICAgNjUsIDIxMiwgNzEsIDgyLCA2NSwgODYsIDY5LCA4OSwgNjUsIDgyLCAxOTYsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDc3LCAKKyAgICA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgCisgICAgNzEsIDgyLCA2NSwgODYsIDY5LCAxMjgsIDcxLCA4MiwgNjUsIDg2LCAxOTcsIDcxLCA4MiwgNjUsIDg0LCA2OSwgODIsIAorICAgIDEyOCwgNzEsIDgyLCA2NSwgODMsIDgzLCAxMjgsIDcxLCA4MiwgNjUsIDgzLCAyMTEsIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNjksIDc3LCAxOTcsIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA3MSwgODIsIDY1LCA3MywgNzgsIDEyOCwgNzEsIDgyLCAKKyAgICA2NSwgNjcsIDY5LCAxMjgsIDcxLCA4MiwgNjUsIDY3LCAxOTcsIDcxLCA4MCwgNjUsIDEyOCwgNzEsIDc5LCA4MiwgODQsIAorICAgIDcyLCA3NywgNzMsIDc1LCA3OSwgMjA2LCA3MSwgNzksIDgyLCA4NCwgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDg0LCA2OSwgCisgICAgODIsIDczLCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODMsIDg5LCA3OCwgODQsIDcyLCA2OSwgODQsIDc5LCA3OCwgMTI4LCAKKyAgICA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNzEsIDc5LCA4MiwgNzEsIDczLCAxMjgsIDcxLCA3OSwgODIsIDY1LCAxMjgsIAorICAgIDcxLCA3OSwgNzgsIDcxLCAxMjgsIDcxLCA3OSwgNzYsIDY4LCAxMjgsIDcxLCA3OSwgNzUsIDEyOCwgNzEsIDc5LCA3MywgCisgICAgNzgsIDE5OSwgNzEsIDc5LCA2NSwgNzYsIDEyOCwgNzEsIDc5LCA2NSwgMjA0LCA3MSwgNzksIDY1LCAxMjgsIDcxLCA3OCwgCisgICAgODksIDczLCA4MywgMTI4LCA3MSwgNzgsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDcxLCA3NiwgNzksIDg0LCAKKyAgICA4NCwgNjUsIDIwNCwgNzEsIDc2LCA3MywgODMsIDgzLCA2NSwgNzgsIDY4LCAyMDcsIDcxLCA3NiwgNjksIDczLCA2NywgCisgICAgMjAwLCA3MSwgNzYsIDY1LCA3MSwgNzksIDc2LCA3MywgMTI4LCA3MSwgNzYsIDY1LCAxMjgsIDcxLCA3NCwgNjksIDEyOCwgCisgICAgNzEsIDczLCA4OCwgMTI4LCA3MSwgNzMsIDg0LCAxMjgsIDcxLCA3MywgODMsIDcyLCAxMjgsIDcxLCA3MywgODMsIDIwMCwgCisgICAgNzEsIDczLCA4MywgNjUsIDc2LCAxMjgsIDcxLCA3MywgODIsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDcxLCA3MywgODIsIDUxLCAKKyAgICAxMjgsIDcxLCA3MywgODIsIDE3OSwgNzEsIDczLCA4MiwgNTAsIDEyOCwgNzEsIDczLCA4MiwgMTc4LCA3MSwgNzMsIDgwLCAKKyAgICAxMjgsIDcxLCA3MywgNzgsIDczLCA3MywgMTI4LCA3MSwgNzMsIDc3LCA2OSwgNzYsIDEyOCwgNzEsIDczLCA3NywgNjksIAorICAgIDIwNCwgNzEsIDczLCA3NywgMTI4LCA3MSwgNzMsIDcxLCA2NSwgMTI4LCA3MSwgNzMsIDY5LCA4NCwgMTI4LCA3MSwgNzMsIAorICAgIDY4LCA3MywgNzcsIDEyOCwgNzEsIDczLCA2NiwgNjUsIDEyOCwgNzEsIDczLCA1MiwgMTI4LCA3MSwgNzMsIDE4MCwgNzEsIAorICAgIDcyLCA5MCwgMTI4LCA3MSwgNzIsIDg3LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIDY1LCAxMjgsIDcxLCA3MiwgCisgICAgODUsIDc4LCA3OCwgMTkzLCA3MSwgNzIsIDg1LCAxMjgsIDcxLCA3MiwgNzksIDg1LCAxMjgsIDcxLCA3MiwgNzksIDgzLCAKKyAgICA4NCwgMTI4LCA3MSwgNzIsIDc5LCAxMjgsIDcxLCA3MiwgNzMsIDEyOCwgNzEsIDcyLCA3MiwgNjUsIDEyOCwgNzEsIDcyLCAKKyAgICA2OSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgMTI4LCA3MSwgNzIsIDE5NywgNzEsIDcyLCA2NSwgODksIDc4LCAxMjgsIDcxLCAKKyAgICA3MiwgNjUsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDc4LCA4NSwgCisgICAgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDIwNiwgNzEsIDcyLCA2NSwgNjgsIDEyOCwgCisgICAgNzEsIDcyLCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA3MywgMTI4LCA3MSwgNzEsIDg3LCA2OSwgNjksIDEyOCwgNzEsIDcxLCAKKyAgICA4NywgNjksIDEyOCwgNzEsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA3MSwgODcsIDY1LCAxMjgsIDcxLCA3MSwgODUsIAorICAgIDg4LCAxMjgsIDcxLCA3MSwgODUsIDg0LCAxMjgsIDcxLCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgCisgICAgMTI4LCA3MSwgNzEsIDg1LCA4MCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg0LCAKKyAgICAxMjgsIDcxLCA3MSwgODUsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgMTI4LCA3MSwgNzEsIDc5LCA4OCwgMTI4LCAKKyAgICA3MSwgNzEsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA4OCwgMTI4LCA3MSwgNzEsIAorICAgIDczLCA4NCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA3MywgNjksIDgwLCAxMjgsIDcxLCA3MSwgCisgICAgNzMsIDY5LCAxMjgsIDcxLCA3MSwgNjksIDg4LCAxMjgsIDcxLCA3MSwgNjksIDg0LCAxMjgsIDcxLCA3MSwgNjksIDgwLCAKKyAgICAxMjgsIDcxLCA3MSwgNjUsIDg4LCAxMjgsIDcxLCA3MSwgNjUsIDg0LCAxMjgsIDcxLCA3MSwgNjUsIDgwLCAxMjgsIDcxLCAKKyAgICA3MSwgNjUsIDY1LCAxMjgsIDcxLCA2OSwgODQsIDE5MywgNzEsIDY5LCA4MywgNzIsIDg1LCAxMjgsIDcxLCA2OSwgODMsIAorICAgIDcyLCA4NCwgNzMsIDc4LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDIwNiwgNzEsIDY5LCA4MywgNzIsIDUwLCAKKyAgICAxMjgsIDcxLCA2OSwgODIsIDgzLCA3MiwgNjUsIDg5LCA3MywgNzcsIDEyOCwgNzEsIDY5LCA4MiwgNzcsIDY1LCAyMDYsIAorICAgIDcxLCA2OSwgODIsIDY5LCA4MywgNzIsIDEyOCwgNzEsIDY5LCA4MiwgNjksIDgzLCAyMDAsIDcxLCA2OSwgNzksIDc3LCA2OSwgCisgICAgODQsIDgyLCA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCAxOTUsIDcxLCAKKyAgICA2OSwgNzgsIDg0LCA3NiwgMTk3LCA3MSwgNjksIDc4LCA3MywgODQsIDczLCA4NiwgNjksIDEyOCwgNzEsIDY5LCA3OCwgNzMsIAorICAgIDc1LCAyMDEsIDcxLCA2OSwgNzgsIDY5LCA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3NywgNzMsIDc4LCA3MywgMTI4LCA3MSwgCisgICAgNjksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA2OSwgNjgsIDc5LCA3NiwgNjUsIDEyOCwgNzEsIDY5LCAKKyAgICA2OCwgNjksIDEyOCwgNzEsIDY5LCA2NiwgMjA3LCA3MSwgNjksIDY2LCAxOTMsIDcxLCA2OSwgNjUsIDgyLCAxMjgsIDcxLCAKKyAgICA2OSwgNjUsIDIxMCwgNzEsIDY4LCA2NSwgNzgsIDEyOCwgNzEsIDY3LCA3MywgNzEsIDEyOCwgNzEsIDY3LCA2NSwgMjA2LCAKKyAgICA3MSwgNjYsIDc5LCA3OCwgMTI4LCA3MSwgNjYsIDY5LCA3OCwgMTI4LCA3MSwgNjYsIDY1LCA3NSwgODUsIDgyLCA4NSwgNzgsIAorICAgIDY5LCA3OCwgMTI4LCA3MSwgNjYsIDEyOCwgNzEsIDY1LCA4OSwgNjUsIDc4LCA4NSwgNzUsIDczLCA4NCwgODQsIDY1LCAKKyAgICAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcxLCA2NSwgODksIDEyOCwgNzEsIDY1LCA4NSwgNzgsIAorICAgIDg0LCA3NiwgNjksIDg0LCAxMjgsIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzEsIDY1LCA4NCwgCisgICAgNzIsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcxLCA2NSwgODQsIDY5LCAxMjgsIDcxLCA2NSwgODMsIDcyLCA2NSwgNzgsIAorICAgIDEyOCwgNzEsIDY1LCA4MiwgODMsIDcyLCA4NSwgNzgsIDczLCAxMjgsIDcxLCA2NSwgODIsIDc5LCA3OCwgMTI4LCA3MSwgCisgICAgNjUsIDgyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MSwgNjUsIDgyLCA1MSwgMTI4LCA3MSwgNjUsIDgwLCA4MCwgNjksIAorICAgIDE5NiwgNzEsIDY1LCAyMDgsIDcxLCA2NSwgNzgsIDc3LCA2NSwgMTI4LCA3MSwgNjUsIDc4LCA3MSwgNzMsIDY1LCAxMjgsIAorICAgIDcxLCA2NSwgNzgsIDY4LCAxOTMsIDcxLCA2NSwgNzgsIDUwLCAxMjgsIDcxLCA2NSwgNzgsIDE3OCwgNzEsIDY1LCA3NywgCisgICAgNzcsIDY1LCAxMjgsIDcxLCA2NSwgNzcsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDc3LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCAKKyAgICA2NSwgNzgsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCAyMDQsIDcxLCA2NSwgNzcsIAorICAgIDEyOCwgNzEsIDY1LCA3MSwgMTI4LCA3MSwgNjUsIDcwLCAxMjgsIDcxLCA2NSwgMTk4LCA3MSwgNjUsIDY5LCA4NCwgODQsIAorICAgIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDcxLCA2NSwgNjgsIDc5LCA3NiwgMTI4LCA3MSwgNjUsIDY4LCAKKyAgICAxMjgsIDcxLCA2NSwgMTk2LCA3MSwgNjUsIDY2LCA2NSwgMTI4LCA3MSwgNjUsIDY2LCAxOTMsIDcxLCA2NSwgNjUsIDcwLCAKKyAgICA4NSwgMTI4LCA3MSwgNjUsIDE3OCwgNzEsIDQ4LCA1MywgNTIsIDEyOCwgNzEsIDQ4LCA1MywgNTEsIDEyOCwgNzEsIDQ4LCAKKyAgICA1MywgNTAsIDEyOCwgNzEsIDQ4LCA1MywgNDksIDEyOCwgNzEsIDQ4LCA1MywgNDgsIDEyOCwgNzEsIDQ4LCA1MiwgNTcsIAorICAgIDEyOCwgNzEsIDQ4LCA1MiwgNTYsIDEyOCwgNzEsIDQ4LCA1MiwgNTUsIDEyOCwgNzEsIDQ4LCA1MiwgNTQsIDEyOCwgNzEsIAorICAgIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDcxLCA0OCwgNTIsIDUzLCAxMjgsIDcxLCA0OCwgNTIsIDUyLCAxMjgsIDcxLCA0OCwgCisgICAgNTIsIDUxLCA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MSwgMTI4LCA3MSwgNDgsIDUyLCA1MCwgMTI4LCA3MSwgNDgsIDUyLCAKKyAgICA0OSwgMTI4LCA3MSwgNDgsIDUyLCA0OCwgMTI4LCA3MSwgNDgsIDUxLCA1NywgMTI4LCA3MSwgNDgsIDUxLCA1NiwgMTI4LCAKKyAgICA3MSwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIAorICAgIDcxLCA0OCwgNTEsIDU0LCAxMjgsIDcxLCA0OCwgNTEsIDUzLCAxMjgsIDcxLCA0OCwgNTEsIDUyLCAxMjgsIDcxLCA0OCwgCisgICAgNTEsIDUxLCAxMjgsIDcxLCA0OCwgNTEsIDUwLCAxMjgsIDcxLCA0OCwgNTEsIDQ5LCAxMjgsIDcxLCA0OCwgNTEsIDQ4LCAKKyAgICAxMjgsIDcxLCA0OCwgNTAsIDU3LCAxMjgsIDcxLCA0OCwgNTAsIDU2LCAxMjgsIDcxLCA0OCwgNTAsIDU1LCAxMjgsIDcxLCAKKyAgICA0OCwgNTAsIDU0LCA2NSwgMTI4LCA3MSwgNDgsIDUwLCA1NCwgMTI4LCA3MSwgNDgsIDUwLCA1MywgMTI4LCA3MSwgNDgsIAorICAgIDUwLCA1MiwgMTI4LCA3MSwgNDgsIDUwLCA1MSwgMTI4LCA3MSwgNDgsIDUwLCA1MCwgMTI4LCA3MSwgNDgsIDUwLCA0OSwgCisgICAgMTI4LCA3MSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDEyOCwgNzEsIDQ4LCA0OSwgNTcsIDEyOCwgCisgICAgNzEsIDQ4LCA0OSwgNTYsIDEyOCwgNzEsIDQ4LCA0OSwgNTUsIDEyOCwgNzEsIDQ4LCA0OSwgNTQsIDEyOCwgNzEsIDQ4LCAKKyAgICA0OSwgNTMsIDEyOCwgNzEsIDQ4LCA0OSwgNTIsIDEyOCwgNzEsIDQ4LCA0OSwgNTEsIDEyOCwgNzEsIDQ4LCA0OSwgNTAsIAorICAgIDEyOCwgNzEsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDcxLCA0OCwgNDksIDQ5LCAxMjgsIDcxLCA0OCwgNDksIDQ4LCAxMjgsIAorICAgIDcxLCA0OCwgNDgsIDU3LCAxMjgsIDcxLCA0OCwgNDgsIDU2LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA3MSwgCisgICAgNDgsIDQ4LCA1NSwgNjUsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcxLCAKKyAgICA0OCwgNDgsIDU0LCAxMjgsIDcxLCA0OCwgNDgsIDUzLCAxMjgsIDcxLCA0OCwgNDgsIDUyLCAxMjgsIDcxLCA0OCwgNDgsIAorICAgIDUxLCAxMjgsIDcxLCA0OCwgNDgsIDUwLCAxMjgsIDcxLCA0OCwgNDgsIDQ5LCAxMjgsIDcwLCA4OSwgODgsIDEyOCwgNzAsIAorICAgIDg5LCA4NCwgMTI4LCA3MCwgODksIDgwLCAxMjgsIDcwLCA4OSwgNjUsIDEyOCwgNzAsIDg5LCAxMjgsIDcwLCA4NywgNzMsIAorICAgIDEyOCwgNzAsIDg3LCA2OSwgNjksIDEyOCwgNzAsIDg3LCA2OSwgMTI4LCA3MCwgODcsIDY1LCA2NSwgMTI4LCA3MCwgODcsIAorICAgIDY1LCAxMjgsIDcwLCA4NSwgODgsIDEyOCwgNzAsIDg1LCA4NCwgMTI4LCA3MCwgODUsIDgzLCA2OSwgMTI4LCA3MCwgODUsIAorICAgIDgzLCAxOTMsIDcwLCA4NSwgODIsIDg4LCAxMjgsIDcwLCA4NSwgODIsIDEyOCwgNzAsIDg1LCA4MCwgMTI4LCA3MCwgODUsIAorICAgIDc4LCA2OSwgODIsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MCwgODUsIDc2LCA3NiwgCisgICAgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDg1LCA3NiwgMjA0LCA3MCwgODUsIDY5LCAyMDQsIDcwLCA4NCwgNzIsIDc5LCAKKyAgICA4MiwgMTkzLCA3MCwgODIsIDc5LCA4NywgNzgsIDczLCA3OCwgMTk5LCA3MCwgODIsIDc5LCA4NywgNzgsIDEyOCwgNzAsIAorICAgIDgyLCA3OSwgNzgsIDg0LCA0NSwgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDcwLCA4MiwgNzksIDIwNSwgNzAsIDgyLCA3OSwgCisgICAgNzEsIDEyOCwgNzAsIDgyLCA3MywgODQsIDg1LCAxMjgsIDcwLCA4MiwgNzMsIDY3LCA2NSwgODQsIDczLCA4NiwgNjksIAorICAgIDEyOCwgNzAsIDgyLCA2OSwgODQsIDY2LCA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3MCwgODIsIDY5LCA3OCwgNjcsIDIwMCwgCisgICAgNzAsIDgyLCA2OSwgMTk3LCA3MCwgODIsIDY1LCA3OCwgMTk1LCA3MCwgODIsIDY1LCA3NywgNjksIDEyOCwgNzAsIDgyLCAKKyAgICA2NSwgNzEsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MCwgODIsIAorICAgIDY1LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MCwgNzksIDg4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCA3OCwgCisgICAgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgMjA2LCA3MCwgNzksIDg1LCA4MiwgNDUsIDgzLCA4NCwgODIsIDczLCAKKyAgICA3OCwgMTk5LCA3MCwgNzksIDg1LCA4MiwgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA3MCwgNzksIDg1LCA4MiwgNDUsIAorICAgIDc2LCA3MywgNzgsIDE5NywgNzAsIDc5LCA4NSwgMjEwLCA3MCwgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDEyOCwgCisgICAgNzAsIDc5LCA4MywgODQsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA4NCwgODksIDEyOCwgNzAsIDc5LCAKKyAgICA4MiwgODQsIDIxNywgNzAsIDc5LCA4MiwgODQsIDY5LCAxMjgsIDcwLCA3OSwgODIsIDc3LCAyMTEsIDcwLCA3OSwgODIsIAorICAgIDc3LCA2NSwgODQsIDg0LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgODIsIDc1LCA2OSwgMTk2LCA3MCwgNzksIDgyLCA2NywgCisgICAgNjksIDgzLCAxMjgsIDcwLCA3OSwgODIsIDY3LCA2OSwgMTI4LCA3MCwgNzksIDgwLCAxMjgsIDcwLCA3OSwgNzksIDg0LCAKKyAgICA4MywgODQsIDc5LCA3OSwgNzYsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDc4LCA3OSwgODQsIDE5NywgNzAsIDc5LCA3OSwgODQsIAorICAgIDEyOCwgNzAsIDc5LCA3OSwgMTI4LCA3MCwgNzksIDc4LCA3MSwgNzcsIDY1LCA3OCwgMTI4LCA3MCwgNzksIDc3LCAxMjgsIAorICAgIDcwLCA3OSwgNzYsIDc2LCA4OSwgMTI4LCA3MCwgNzksIDc2LCA3NiwgNzksIDg3LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgCisgICAgMTI4LCA3MCwgNzcsIDEyOCwgNzAsIDc2LCA4OSwgMTI4LCA3MCwgNzYsIDg1LCA4NCwgNjksIDEyOCwgNzAsIDc2LCA3OSwgCisgICAgODcsIDY5LCA4MiwgMTI4LCA3MCwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzAsIDc2LCA3OSwgODUsIDgyLCA3MywgODMsIDcyLCAKKyAgICAxMjgsIDcwLCA3NiwgNzksIDgyLCA2OSwgODQsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjUsIDIwNCwgNzAsIAorICAgIDc2LCA3OSwgNzksIDgyLCAxMjgsIDcwLCA3NiwgNzMsIDgwLCAxMjgsIDcwLCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgCisgICAgNzAsIDc2LCA2OSwgODgsIDg1LCA4MywgMTI4LCA3MCwgNzYsIDY5LCA4NSwgODIsIDQ1LCA2OCwgNjksIDQ1LCA3NiwgNzMsIAorICAgIDgzLCAxMjgsIDcwLCA3NiwgNjUsIDg0LCA4NCwgNjksIDc4LCA2OSwgMTk2LCA3MCwgNzYsIDY1LCA4NCwgNzgsIDY5LCA4MywgCisgICAgODMsIDEyOCwgNzAsIDc2LCA2NSwgODQsIDEyOCwgNzAsIDc2LCA2NSwgMjEyLCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUzLCAKKyAgICAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTIsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MSwgMTI4LCA3MCwgNzYsIAorICAgIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNDksIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDEyOCwgCisgICAgNzAsIDc2LCA2NSwgMTk5LCA3MCwgNzYsIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIDg4LCA2OSwgNjgsIDQ1LCAKKyAgICA3MCwgNzksIDgyLCAyMDUsIDcwLCA3MywgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIAorICAgIDcwLCA3MywgODYsIDE5NywgNzAsIDczLCA4NCwgNjUsIDEyOCwgNzAsIDczLCA4NCwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgCisgICAgNzIsIDc5LCA3OSwgNzUsIDEyOCwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIDIwMywgNzAsIDczLCA4MywgNzIsIDY5LCAKKyAgICA4OSwgNjksIDEyOCwgNzAsIDczLCA4MywgNzIsIDEyOCwgNzAsIDczLCA4MywgMjAwLCA3MCwgNzMsIDgyLCA4MywgMjEyLCAKKyAgICA3MCwgNzMsIDgyLCA2OSwgMTI4LCA3MCwgNzMsIDgwLCAxMjgsIDcwLCA3MywgNzgsIDczLCA4NCwgMTk3LCA3MCwgNzMsIAorICAgIDc4LCA3MSwgNjksIDgyLCA3OCwgNjUsIDczLCA3NiwgODMsIDEyOCwgNzAsIDczLCA3OCwgNzEsIDY5LCA4MiwgNjksIDE5NiwgCisgICAgNzAsIDczLCA3OCwgNjUsIDc4LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA3MCwgNzMsIDc2LCA3NiwgNjksIDgyLCAxMjgsIDcwLCAKKyAgICA3MywgNzYsIDc2LCA2OSwgMTk2LCA3MCwgNzMsIDc2LCA3NiwgMTI4LCA3MCwgNzMsIDc2LCAyMDQsIDcwLCA3MywgNzYsIAorICAgIDE5NywgNzAsIDczLCA3MywgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDczLCA3MSwgCisgICAgODUsIDgyLCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNzMsIDcxLCAKKyAgICA4NSwgODIsIDE5NywgNzAsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3MywgNzAsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIAorICAgIDcwLCA4NCwgMjE3LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDgzLCAxMjgsIDcwLCA3MywgNzAsIDg0LCA3MiwgMTI4LCA3MCwgCisgICAgNzMsIDcwLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA3MywgNjksIDc2LCAKKyAgICA2OCwgMTI4LCA3MCwgNzIsIDg0LCA3OSwgODIsIDE5MywgNzAsIDcwLCA3NiwgMTI4LCA3MCwgNzAsIDczLCAxMjgsIDcwLCAKKyAgICA2OSwgODMsIDg0LCA3MywgODYsIDY1LCA3NiwgMTI4LCA3MCwgNjksIDgyLCA4MiwgODksIDEyOCwgNzAsIDY5LCA4MiwgNzcsIAorICAgIDY1LCA4NCwgNjUsIDEyOCwgNzAsIDY5LCA4MiwgNzcsIDY1LCA4NCwgMTkzLCA3MCwgNjksIDc5LCAyMDAsIDcwLCA2OSwgCisgICAgNzgsIDE5OSwgNzAsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDczLCA3OCwgNzMsIDc4LCAxOTcsIDcwLCAKKyAgICA2OSwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzAsIDY5LCA3NywgNjUsIDc2LCAxOTcsIDcwLCA2OSwgNzYsIDc2LCA3OSwgODcsIAorICAgIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDcwLCA2OSwgNzMsIDEyOCwgNzAsIDY5LCA3MiwgMjEzLCA3MCwgNjksIDcyLCAxMjgsIAorICAgIDcwLCA2OSwgMjAwLCA3MCwgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzAsIDY5LCA2OSwgNjgsIDEyOCwgNzAsIDY5LCA2OSwgCisgICAgMTk2LCA3MCwgNjksIDY5LCAxMjgsIDcwLCA2OSwgNjYsIDgyLCA4NSwgNjUsIDgyLCA4OSwgMTI4LCA3MCwgNjksIDY1LCAKKyAgICA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2OSwgNjUsIDgyLCA3OCwgCisgICAgMTI4LCA3MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MCwgNjUsIDg4LCAxMjgsIDcwLCA2NSwgODQsIDcyLCAKKyAgICA2OSwgODIsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIAorICAgIDY1LCAyMDYsIDcwLCA2NSwgODQsIDcyLCA2NSwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgMTkzLCA3MCwgNjUsIDg0LCAxMjgsIAorICAgIDcwLCA2NSwgODIsIDgzLCAyMDEsIDcwLCA2NSwgODAsIDEyOCwgNzAsIDY1LCA3OCwgNzEsIDEyOCwgNzAsIDY1LCA3OCwgCisgICAgNjksIDgyLCA3OSwgODMsIDczLCAyMTEsIDcwLCA2NSwgNzgsIDEyOCwgNzAsIDY1LCA3NywgNzMsIDc2LCA4OSwgMTI4LCAKKyAgICA3MCwgNjUsIDc2LCA3NiwgNzMsIDc4LCAxOTksIDcwLCA2NSwgNzMsIDc2LCA4NSwgODIsIDY5LCAxMjgsIDcwLCA2NSwgNzMsIAorICAgIDcyLCA4NSwgMTI4LCA3MCwgNjUsIDcyLCA4MiwgNjksIDc4LCA3MiwgNjksIDczLCA4NCwgMTI4LCA3MCwgNjUsIDY3LCA4NCwgCisgICAgNzksIDIxMCwgNzAsIDY1LCA2NywgODMsIDczLCA3NywgNzMsIDc2LCAxOTcsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTQsIAorICAgIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MywgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUyLCAxMjgsIDcwLCA2NSwgCisgICAgNjcsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDQ5LCAKKyAgICAxMjgsIDcwLCA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzAsIDY1LCA2NSwgNzMsIDEyOCwgNzAsIDY1LCA2NSwgNzAsIAorICAgIDg1LCAxMjgsIDcwLCA2NSwgNjUsIDEyOCwgNzAsIDQ4LCA1MywgNTEsIDEyOCwgNzAsIDQ4LCA1MywgNTAsIDEyOCwgNzAsIAorICAgIDQ4LCA1MywgNDksIDY3LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NiwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjUsIDEyOCwgCisgICAgNzAsIDQ4LCA1MywgNDksIDEyOCwgNzAsIDQ4LCA1MywgNDgsIDEyOCwgNzAsIDQ4LCA1MiwgNTcsIDEyOCwgNzAsIDQ4LCAKKyAgICA1MiwgNTYsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCAxMjgsIDcwLCA0OCwgNTIsIAorICAgIDU0LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgMTI4LCA3MCwgNDgsIDUyLCA1MywgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgCisgICAgNTMsIDEyOCwgNzAsIDQ4LCA1MiwgNTIsIDEyOCwgNzAsIDQ4LCA1MiwgNTEsIDEyOCwgNzAsIDQ4LCA1MiwgNTAsIDEyOCwgCisgICAgNzAsIDQ4LCA1MiwgNDksIDEyOCwgNzAsIDQ4LCA1MiwgNDgsIDEyOCwgNzAsIDQ4LCA1MSwgNTcsIDEyOCwgNzAsIDQ4LCAKKyAgICA1MSwgNTYsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCAxMjgsIDcwLCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIAorICAgIDUxLCA1NSwgMTI4LCA3MCwgNDgsIDUxLCA1NCwgMTI4LCA3MCwgNDgsIDUxLCA1MywgMTI4LCA3MCwgNDgsIDUxLCA1MiwgCisgICAgMTI4LCA3MCwgNDgsIDUxLCA1MSwgMTI4LCA3MCwgNDgsIDUxLCA1MCwgMTI4LCA3MCwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgCisgICAgNzAsIDQ4LCA1MSwgNDksIDEyOCwgNzAsIDQ4LCA1MSwgNDgsIDEyOCwgNzAsIDQ4LCA1MCwgNTcsIDEyOCwgNzAsIDQ4LCAKKyAgICA1MCwgNTYsIDEyOCwgNzAsIDQ4LCA1MCwgNTUsIDEyOCwgNzAsIDQ4LCA1MCwgNTQsIDEyOCwgNzAsIDQ4LCA1MCwgNTMsIAorICAgIDEyOCwgNzAsIDQ4LCA1MCwgNTIsIDEyOCwgNzAsIDQ4LCA1MCwgNTEsIDEyOCwgNzAsIDQ4LCA1MCwgNTAsIDEyOCwgNzAsIAorICAgIDQ4LCA1MCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCAxMjgsIDcwLCA0OCwgNTAsIDQ4LCAxMjgsIDcwLCA0OCwgCisgICAgNDksIDU3LCAxMjgsIDcwLCA0OCwgNDksIDU2LCAxMjgsIDcwLCA0OCwgNDksIDU1LCAxMjgsIDcwLCA0OCwgNDksIDU0LCAKKyAgICAxMjgsIDcwLCA0OCwgNDksIDUzLCAxMjgsIDcwLCA0OCwgNDksIDUyLCAxMjgsIDcwLCA0OCwgNDksIDUxLCA2NSwgMTI4LCAKKyAgICA3MCwgNDgsIDQ5LCA1MSwgMTI4LCA3MCwgNDgsIDQ5LCA1MCwgMTI4LCA3MCwgNDgsIDQ5LCA0OSwgMTI4LCA3MCwgNDgsIAorICAgIDQ5LCA0OCwgMTI4LCA3MCwgNDgsIDQ4LCA1NywgMTI4LCA3MCwgNDgsIDQ4LCA1NiwgMTI4LCA3MCwgNDgsIDQ4LCA1NSwgCisgICAgMTI4LCA3MCwgNDgsIDQ4LCA1NCwgMTI4LCA3MCwgNDgsIDQ4LCA1MywgMTI4LCA3MCwgNDgsIDQ4LCA1MiwgMTI4LCA3MCwgCisgICAgNDgsIDQ4LCA1MSwgMTI4LCA3MCwgNDgsIDQ4LCA1MCwgMTI4LCA3MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCAKKyAgICA0OCwgNDksIDEyOCwgNjksIDkwLCAyMDAsIDY5LCA5MCwgNjksIDc4LCAxMjgsIDY5LCA5MCwgNjksIDIwNiwgNjksIDkwLCAKKyAgICAxMjgsIDY5LCA4OSwgNjYsIDY5LCA4OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgCisgICAgMTI4LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCA3NiwgNzksIDIxNSwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgNzIsIDczLCAKKyAgICA3MSwgMjAwLCA2OSwgODgsIDg0LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgODQsIDY5LCA3OCwgNjgsIAorICAgIDY5LCAxOTYsIDY5LCA4OCwgODAsIDc5LCA3OCwgNjksIDc4LCAyMTIsIDY5LCA4OCwgNzksIDEyOCwgNjksIDg4LCAyMDcsIAorICAgIDY5LCA4OCwgNzMsIDgzLCA4NCwgODMsIDEyOCwgNjksIDg4LCA3MywgODMsIDg0LCAxMjgsIDY5LCA4OCwgNzIsIDY1LCA4NSwgCisgICAgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA2OSwgODgsIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgODgsIDY3LCA2OSwgODMsIDgzLCAxMjgsIAorICAgIDY5LCA4OCwgNjcsIDY5LCA3NiwgNzYsIDY5LCA3OCwgODQsIDEyOCwgNjksIDg3LCA2OSwgMTI4LCA2OSwgODYsIDY5LCA3OCwgCisgICAgNzMsIDc4LCA3MSwgMTI4LCA2OSwgODUsIDgyLCA3OSwgNDUsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDY3LCAyMTcsIDY5LCAKKyAgICA4NSwgODIsIDIwNywgNjksIDg1LCA3NiwgNjksIDIxMCwgNjksIDg1LCA0NSwgODUsIDEyOCwgNjksIDg1LCA0NSwgNzksIAorICAgIDEyOCwgNjksIDg1LCA0NSwgNjksIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA3OSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgCisgICAgMTI4LCA2OSwgODUsIDQ1LCA2NSwgMTI4LCA2OSwgODQsIDc4LCA2NSwgNzIsIDg0LCA2NSwgMTI4LCA2OSwgODQsIDcyLCAKKyAgICA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIDIwNiwgNjksIDg0LCA2OSwgODIsIDc4LCA3MywgODQsIDg5LCAxMjgsIAorICAgIDY5LCA4MywgODUsIDc1LCA4NSwgODUsIDY4LCA3OSwgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjksIDgzLCAKKyAgICAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCA2OSwgMTk2LCA2OSwgODMsIDcyLCA2OSwgNTEsIDEyOCwgNjksIAorICAgIDgzLCA3MiwgNTAsIDQ5LCAxMjgsIDY5LCA4MywgNzIsIDE3OCwgNjksIDgzLCA3MiwgNDksIDU0LCAxMjgsIDY5LCA4MywgCisgICAgNjcsIDY1LCA4MCwgNjksIDEyOCwgNjksIDgzLCA0NSwgODQsIDY5LCAxMjgsIDY5LCA4MiwgODIsIDc5LCA4MiwgNDUsIDY2LCAKKyAgICA2NSwgODIsIDgyLCA2OSwgMTk2LCA2OSwgODIsIDgyLCAxMjgsIDY5LCA4MiwgNzMsIDc4LCA1MCwgMTI4LCA2OSwgODIsIAorICAgIDcxLCAxMjgsIDY5LCA4MiwgNjUsIDgzLCAxOTcsIDY5LCA4MSwgODUsIDczLCA4NiwgNjUsIDc2LCA2OSwgNzgsIDIxMiwgCisgICAgNjksIDgxLCA4NSwgNzMsIDY4LCAxMjgsIDY5LCA4MSwgODUsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDY5LCAKKyAgICA4MSwgODUsIDY1LCA3NiwgODMsIDEyOCwgNjksIDgxLCA4NSwgNjUsIDc2LCAyMTEsIDY5LCA4MSwgODUsIDY1LCA3NiwgCisgICAgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCA3OCwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCAyMDYsIDY5LCAKKyAgICA4MCwgNzMsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzMsIDE5NSwgNjksIDgwLCA3MywgNjgsIDY1LCA4NSwgODIsIDY5LCA2NSwgCisgICAgMjA2LCA2OSwgODAsIDY5LCA3OCwgODQsIDcyLCA2OSwgODQsIDczLCAxOTUsIDY5LCA4MCwgNjksIDcxLCA2OSwgODIsIDc3LCAKKyAgICA2NSwgMTI4LCA2OSwgNzksIDc2LCA3MiwgODgsIDEyOCwgNjksIDc5LCA3MiwgMTI4LCA2OSwgNzgsIDg5LCAxMjgsIDY5LCAKKyAgICA3OCwgODYsIDY5LCA3NiwgNzksIDgwLCA2OSwgMTI4LCA2OSwgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgODQsIDczLCA3OSwgCisgICAgMjA2LCA2OSwgNzgsIDg0LCA4MiwgODksIDQ1LCA1MCwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIDQ1LCA0OSwgMTI4LCAKKyAgICA2OSwgNzgsIDg0LCA4MiwgODksIDEyOCwgNjksIDc4LCA4NCwgNzIsIDg1LCA4MywgNzMsIDY1LCA4MywgNzcsIDEyOCwgNjksIAorICAgIDc4LCA4NCwgNjksIDgyLCA4MCwgODIsIDczLCA4MywgNjksIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgCisgICAgNjksIDc4LCA4NCwgNjksIDgyLCAxMjgsIDY5LCA3OCwgODQsIDY5LCAyMTAsIDY5LCA3OCwgODEsIDg1LCA3MywgODIsIDg5LCAKKyAgICAxMjgsIDY5LCA3OCwgNzksIDIxMSwgNjksIDc4LCA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgODIsIDcxLCA2OSwgNzcsIAorICAgIDY5LCA3OCwgODQsIDEyOCwgNjksIDc4LCA2OCwgNzksIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA2OSwgNzgsIDY4LCA3MywgCisgICAgNzgsIDE5OSwgNjksIDc4LCA2OCwgNjksIDgwLCAxMjgsIDY5LCA3OCwgNjgsIDY5LCA2NSwgODYsIDc5LCA4NSwgODIsIAorICAgIDEyOCwgNjksIDc4LCAxOTYsIDY5LCA3OCwgNjcsIDc5LCA4NSwgNzgsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDY5LCA3OCwgCisgICAgNjcsIDc2LCA3OSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNjksIDc4LCA2NywgNzYsIDc5LCA4MywgNzMsIDc4LCAxOTksIDY5LCAKKyAgICA3OCwgNjcsIDEyOCwgNjksIDc4LCA2NSwgODIsIDg4LCA3MywgMjExLCA2OSwgNzgsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIAorICAgIDc5LCAyMTEsIDY5LCA3NywgODAsIDg0LCAyMTcsIDY5LCA3NywgODAsIDcyLCA2NSwgODQsIDczLCAxOTUsIDY5LCA3NywgCisgICAgODAsIDcyLCA2NSwgODMsIDczLCAyMTEsIDY5LCA3NywgNjYsIDgyLCA3OSwgNzMsIDY4LCA2OSwgODIsIDg5LCAxMjgsIDY5LCAKKyAgICA3NywgNjYsIDY5LCA3NiwgNzYsIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA2OCwgCisgICAgNjgsIDczLCA3OCwgNzEsIDEyOCwgNjksIDc2LCA4NCwgMTI4LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCA3MywgODMsIAorICAgIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAxMjgsIDY5LCA3NiwgCisgICAgNjksIDg2LCA2OSwgNzgsIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIDc3LCA2OSwgNzgsIAorICAgIDIxMiwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCA3MywgCisgICAgMTk1LCA2OSwgNzYsIDY1LCA3MCwgODIsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCA4NCwgODIsIDY5LCA4MCwgODQsIDc5LCAKKyAgICA3OCwgMTI4LCA2OSwgNzUsIDgzLCAxMjgsIDY5LCA3NSwgNzAsIDc5LCA3OCwgNzMsIDg0LCA3MywgNzUsIDc5LCA3OCwgCisgICAgMTI4LCA2OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjksIDc0LCA2OSwgNjcsIDIxMiwgNjksIDczLCA4MywgMTI4LCA2OSwgCisgICAgNzMsIDcxLCA3MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgMjE3LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAKKyAgICA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAyMTEsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDEyOCwgNjksIAorICAgIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCAyMDYsIDY5LCA3MywgCisgICAgNjksIDEyOCwgNjksIDcyLCA4NywgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCAKKyAgICA2NSwgMjA0LCA2OSwgNzEsIDczLCA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIAorICAgIDY1LCAxMjgsIDY5LCA2OSwgNzUsIDY1LCA2NSwgMTI4LCA2OSwgNjksIDY2LCA2OSwgNjksIDcwLCA3MywgNzYsIDczLCAKKyAgICAxMjgsIDY5LCA2OCwgNzMsIDg0LCA3OSwgODIsIDczLCA2NSwgMjA0LCA2OSwgNjgsIDczLCA3OCwgMTI4LCA2OSwgNjgsIAorICAgIDY4LCAxMjgsIDY5LCA2NywgMjAwLCA2OSwgNjYsIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgNjUsIDgzLCA4NCwgCisgICAgNjksIDgyLCAyMDYsIDY5LCA2NSwgODMsIDIxMiwgNjksIDY1LCA4MiwgODQsIDcyLCA3NiwgMjE3LCA2OSwgNjUsIDgyLCAKKyAgICA4NCwgNzIsIDEyOCwgNjksIDY1LCA4MiwgODQsIDIwMCwgNjksIDY1LCA4MiwgNzYsIDIxNywgNjksIDY1LCA3NywgNzIsIAorICAgIDY1LCA3OCwgNjcsIDcyLCA3OSwgNzYsIDc2LCAxMjgsIDY5LCA2NSwgNzEsIDc2LCA2OSwgMTI4LCA2OSwgNjUsIDY4LCA3MiwgCisgICAgNjUsIDY4LCA3MiwgMTI4LCA2OSwgNjUsIDY2LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgMTc4LCA2OSwgNDgsIDUxLCAKKyAgICA1NiwgMTI4LCA2OSwgNDgsIDUxLCA1NSwgMTI4LCA2OSwgNDgsIDUxLCA1NCwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgNjUsIAorICAgIDEyOCwgNjksIDQ4LCA1MSwgNTIsIDEyOCwgNjksIDQ4LCA1MSwgNTEsIDEyOCwgNjksIDQ4LCA1MSwgNTAsIDEyOCwgNjksIAorICAgIDQ4LCA1MSwgNDksIDEyOCwgNjksIDQ4LCA1MSwgNDgsIDEyOCwgNjksIDQ4LCA1MCwgNTcsIDEyOCwgNjksIDQ4LCA1MCwgCisgICAgNTYsIDY1LCAxMjgsIDY5LCA0OCwgNTAsIDU2LCAxMjgsIDY5LCA0OCwgNTAsIDU1LCAxMjgsIDY5LCA0OCwgNTAsIDU0LCAKKyAgICAxMjgsIDY5LCA0OCwgNTAsIDUzLCAxMjgsIDY5LCA0OCwgNTAsIDUyLCAxMjgsIDY5LCA0OCwgNTAsIDUxLCAxMjgsIDY5LCAKKyAgICA0OCwgNTAsIDUwLCAxMjgsIDY5LCA0OCwgNTAsIDQ5LCAxMjgsIDY5LCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA2OSwgNDgsIAorICAgIDUwLCA0OCwgMTI4LCA2OSwgNDgsIDQ5LCA1NywgMTI4LCA2OSwgNDgsIDQ5LCA1NiwgMTI4LCA2OSwgNDgsIDQ5LCA1NSwgCisgICAgNjUsIDEyOCwgNjksIDQ4LCA0OSwgNTUsIDEyOCwgNjksIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU0LCAKKyAgICAxMjgsIDY5LCA0OCwgNDksIDUzLCAxMjgsIDY5LCA0OCwgNDksIDUyLCAxMjgsIDY5LCA0OCwgNDksIDUxLCAxMjgsIDY5LCAKKyAgICA0OCwgNDksIDUwLCAxMjgsIDY5LCA0OCwgNDksIDQ5LCAxMjgsIDY5LCA0OCwgNDksIDQ4LCAxMjgsIDY5LCA0OCwgNDgsIAorICAgIDU3LCA2NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NywgMTI4LCA2OSwgNDgsIDQ4LCA1NiwgNjUsIDEyOCwgNjksIDQ4LCA0OCwgCisgICAgNTYsIDEyOCwgNjksIDQ4LCA0OCwgNTUsIDEyOCwgNjksIDQ4LCA0OCwgNTQsIDEyOCwgNjksIDQ4LCA0OCwgNTMsIDEyOCwgCisgICAgNjksIDQ4LCA0OCwgNTIsIDEyOCwgNjksIDQ4LCA0OCwgNTEsIDEyOCwgNjksIDQ4LCA0OCwgNTAsIDEyOCwgNjksIDQ4LCAKKyAgICA0OCwgNDksIDEyOCwgNjgsIDkwLCA5MCwgNjksIDEyOCwgNjgsIDkwLCA4NywgNjksIDEyOCwgNjgsIDkwLCA4NSwgMTI4LCAKKyAgICA2OCwgOTAsIDc5LCAxMjgsIDY4LCA5MCwgNzQsIDY5LCAxMjgsIDY4LCA5MCwgNzMsIDEyOCwgNjgsIDkwLCA3MiwgNjksIAorICAgIDEyOCwgNjgsIDkwLCA3MiwgNjUsIDEyOCwgNjgsIDkwLCA2OSwgNzYsIDc5LCAxMjgsIDY4LCA5MCwgNjksIDY5LCAxMjgsIAorICAgIDY4LCA5MCwgNjksIDEyOCwgNjgsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDEyOCwgNjgsIDIxOCwgNjgsIDg5LCA3OSwgMTI4LCAKKyAgICA2OCwgODksIDIwNywgNjgsIDg5LCA2OSwgNzIsIDEyOCwgNjgsIDg5LCA2OSwgMjAwLCA2OCwgODcsIDc5LCAxMjgsIDY4LCAKKyAgICA4NywgNjksIDEyOCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgODYsIDczLCA4MywgODYsIDY1LCA4MiwgNjUsIDEyOCwgNjgsIAorICAgIDg2LCAxMjgsIDY4LCA4NSwgODQsIDczLCA2OSwgODMsIDEyOCwgNjgsIDg1LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDY4LCA4NSwgODIsIDUwLCAxMjgsIDY4LCA4NSwgODAsIDc5LCA3OCwgNjgsIDczLCA4NSwgMjExLCA2OCwgODUsIAorICAgIDc5LCA4OCwgMTI4LCA2OCwgODUsIDc5LCAxMjgsIDY4LCA4NSwgNzgsIDUyLCAxMjgsIDY4LCA4NSwgNzgsIDUxLCAxMjgsIAorICAgIDY4LCA4NSwgNzgsIDE3OSwgNjgsIDg1LCA3OCwgMTI4LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NSwgNzYsIDEyOCwgNjgsIAorICAgIDg1LCAyMDQsIDY4LCA4NSwgNzIsIDEyOCwgNjgsIDg1LCA3MSwgODUsIDY4LCAxMjgsIDY4LCA4NSwgNjYsIDUwLCAxMjgsIAorICAgIDY4LCA4NSwgNjYsIDEyOCwgNjgsIDg1LCAxOTQsIDY4LCAyMTMsIDY4LCA4MiwgODksIDEyOCwgNjgsIDgyLCAyMTcsIDY4LCAKKyAgICA4MiwgODUsIDc3LCAxMjgsIDY4LCA4MiwgODUsIDIwNSwgNjgsIDgyLCA3OSwgODAsIDgzLCAxMjgsIDY4LCA4MiwgNzksIAorICAgIDgwLCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgNjgsIDgyLCA3MywgODYsIDY5LCAxMjgsIDY4LCA4MiwgCisgICAgNzMsIDg2LCAxOTcsIDY4LCA4MiwgNzMsIDIwNCwgNjgsIDgyLCA2NSwgODUsIDcxLCA3MiwgODQsIDIxMSwgNjgsIDgyLCAKKyAgICA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIDY1LCA3MCwgODQsIDczLCA3OCwgMTk5LCA2OCwgODIsIDY1LCA2NywgNzIsIAorICAgIDc3LCA2NSwgODMsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgCisgICAgMTkzLCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCAKKyAgICA2OCwgMjExLCA2OCwgNzksIDg3LCA3OCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDY4LCA3OSwgODcsIAorICAgIDc4LCAxMjgsIDY4LCA3OSwgODYsIDY5LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA4NCwgMTI4LCA2OCwgNzksIDg1LCA2NiwgCisgICAgNzYsIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDY4LCA3OSwgODUsIDY2LCAKKyAgICA3NiwgNjksIDQ1LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDg0LCA2OSwgNjgsIDQ1LCA4MCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgNzgsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODQsIDY5LCA2OCwgNDUsIDc2LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCAKKyAgICAxOTYsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAorICAgIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCisgICAgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAorICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCisgICAgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIAorICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAorICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCisgICAgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCAKKyAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIAorICAgIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCisgICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCisgICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgCisgICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgMTI4LCA2OCwgNzksIDg0LCA4MywgMTI4LCA2OCwgNzksIDg0LCA3NiwgCisgICAgNjksIDgzLCAyMTEsIDY4LCA3OSwgODIsIDg1LCAxMjgsIDY4LCA3OSwgNzksIDgyLCAxMjgsIDY4LCA3OSwgNzksIDc4LCAKKyAgICA3MSwgMTI4LCA2OCwgNzksIDc4LCA3MSwgMTI4LCA2OCwgNzksIDc3LCA2NSwgNzMsIDIwNiwgNjgsIDc5LCA3NiwgNzYsIAorICAgIDY1LCAyMTAsIDY4LCA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgMTI4LCA2OCwgCisgICAgNzksIDczLCA4NCwgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgNjksIDIxMSwgNjgsIDc5LCA2OCwgNjksIDc1LCAKKyAgICA2NSwgODQsIDY1LCAxMjgsIDY4LCA3OSwgNjYsIDgyLCA3OSwgMTI4LCA2OCwgNzksIDY1LCA2NywgNzIsIDY1LCA4MywgNzIsIAorICAgIDc3LCA2OSwgNjksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCA3NywgNjksIDE5NywgNjgsIDc5LCA2NSwgCisgICAgMTI4LCA2OCwgNzksIDQ1LCA3OSwgMTI4LCA2OCwgNzcsIDEyOCwgNjgsIDIwNSwgNjgsIDc2LCA4NSwgMTI4LCA2OCwgNzYsIAorICAgIDc5LCAxMjgsIDY4LCA3NiwgNzMsIDEyOCwgNjgsIDc2LCA2OSwgNjksIDEyOCwgNjgsIDc2LCA2NSwgMTI4LCA2OCwgNzYsIAorICAgIDEyOCwgNjgsIDc1LCA2NSwgODIsIDEyOCwgNjgsIDc1LCA2NSwgMjEwLCA2OCwgNzQsIDY5LCA4MiwgODYsIDczLCAxMjgsIAorICAgIDY4LCA3NCwgNjksIDgyLCA4NiwgMTI4LCA2OCwgNzQsIDY5LCAxMjgsIDY4LCA3NCwgNjUsIDEyOCwgNjgsIDc0LCAxMjgsIAorICAgIDY4LCA3MywgODYsIDc5LCA4MiwgNjcsIDE5NywgNjgsIDczLCA4NiwgNzMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgCisgICAgODYsIDczLCA4MywgNzMsIDc5LCAyMDYsIDY4LCA3MywgODYsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCAKKyAgICA3MywgODYsIDczLCA2OCwgNjksIDgzLCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDgyLCAxMjgsIDY4LCA3MywgODYsIAorICAgIDczLCA2OCwgNjksIDE5NiwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDE5NywgCisgICAgNjgsIDczLCA4NiwgNjksIDgyLCA3MSwgNjksIDc4LCA2NywgNjksIDEyOCwgNjgsIDczLCA4NCwgODQsIDIwNywgNjgsIDczLCAKKyAgICA4MywgODQsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgODQsIDczLCA3OCwgNzEsIDg1LCA3MywgCisgICAgODMsIDcyLCAxMjgsIDY4LCA3MywgODMsIDgwLCA2OSwgODIsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDczLCAKKyAgICA3NywgNzksIDg1LCAxMjgsIDY4LCA3MywgODMsIDcyLCAxMjgsIDY4LCA3MywgODMsIDY3LCA3OSwgNzgsIDg0LCA3MywgNzgsIAorICAgIDg1LCA3OSwgODUsIDIxMSwgNjgsIDczLCA4MywgMTk1LCA2OCwgNzMsIDgzLCA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgCisgICAgNzMsIDgyLCA3MSwgMTkzLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3NiwgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCAKKyAgICA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDgwLCA4NCwgNjksIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgCisgICAgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCAKKyAgICA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIDY2LCA2NSwgMjEyLCA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIAorICAgIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgCisgICAgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDUwLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIAorICAgIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCAKKyAgICA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIDczLCAxOTMsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIAorICAgIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgCisgICAgNzMsIDc2LCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIAorICAgIDIwMCwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCAKKyAgICAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIAorICAgIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNjgsIDczLCA3MSwgNjUsIDc3LCA3NywgNjUsIDEyOCwgNjgsIDczLCA3MSwgCisgICAgMTkzLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIDIxMSwgNjgsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAKKyAgICAxMjgsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDIxNywgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIAorICAgIDc2LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgNzgsIDg0LCA3MywgNjUsIDc2LCAKKyAgICAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgNjgsIDczLCA3MCwgNjUsIDg0LCAxMjgsIAorICAgIDY4LCA3MywgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MywgNjksIDgwLCAKKyAgICAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIDY2LCAxMjgsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDc5LCAyMDYsIDY4LCAKKyAgICA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCA3NiwgMjAxLCA2OCwgNzMsIAorICAgIDY1LCA3NywgNzksIDc4LCA2OCwgMTI4LCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCAxOTYsIDY4LCA3MywgNjUsIDc3LCA2OSwgCisgICAgODQsIDY5LCAyMTAsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgNjUsIDEyOCwgNjgsIDczLCA2NSwgNzYsIDg5LCAKKyAgICA4NCwgNzMsIDc1LCAxOTMsIDY4LCA3MywgNjUsIDc2LCA2OSwgNjcsIDg0LCA0NSwgMjA4LCA2OCwgNzMsIDY1LCA3MSwgNzksIAorICAgIDc4LCA2NSwgNzYsIDEyOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgCisgICAgODMsIDczLCA5MCwgNjksIDE5NiwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA4MywgMTI4LCA2OCwgNzMsIDY1LCAKKyAgICA2OSwgODIsIDY5LCA4MywgNzMsIDIxMSwgNjgsIDcyLCA3OSwgODUsIDEyOCwgNjgsIDcyLCA3OSwgNzksIDEyOCwgNjgsIAorICAgIDcyLCA3OSwgMTI4LCA2OCwgNzIsIDczLCAxMjgsIDY4LCA3MiwgNzIsIDg1LCAxMjgsIDY4LCA3MiwgNzIsIDc5LCA3OSwgCisgICAgMTI4LCA2OCwgNzIsIDcyLCA3OSwgMTI4LCA2OCwgNzIsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgCisgICAgNjgsIDcyLCA3MiwgNjksIDEyOCwgNjgsIDcyLCA3MiwgNjUsIDEyOCwgNjgsIDcyLCA2OSwgNjksIDEyOCwgNjgsIDcyLCAKKyAgICA2NSwgODIsIDc3LCA2NSwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgNjksIDg0LCA3MiwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgNjUsIAorICAgIDg0LCA3MiwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgMTI4LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgCisgICAgNjUsIDY1LCA3NiwgODUsIDEyOCwgNjgsIDcyLCA2NSwgMTI4LCA2OCwgNjksIDkwLCAyMDAsIDY4LCA2OSwgODksIDg0LCAKKyAgICA2OSwgODIsIDc5LCAyMTMsIDY4LCA2OSwgODksIDg0LCA2OSwgODIsIDc5LCAyMTEsIDY4LCA2OSwgODgsIDczLCA2NSwgCisgICAgMTI4LCA2OCwgNjksIDg2LCA3MywgNjcsIDE5NywgNjgsIDY5LCA4NiwgNjksIDc2LCA3OSwgODAsIDc3LCA2OSwgNzgsIDg0LCAKKyAgICAxMjgsIDY4LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA2OCwgNjksIDgzLCA3MywgMTI4LCA2OCwgNjksIDgzLCA2NywgODIsIAorICAgIDczLCA4MCwgODQsIDczLCA3OSwgMjA2LCA2OCwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgCisgICAgODMsIDY3LCA2OSwgNzgsIDY4LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA4MiwgNjksIDg0LCA0NSwgNzIsIDczLCA2OCwgNjksIAorICAgIDg0LCAxMjgsIDY4LCA2OSwgODIsIDY5LCA4NCwgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA4NSwgODIsIDY5LCAKKyAgICAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDczLCA3OCwgMTk5LCA2OCwgNjksIDc4LCA4NCwgNzMsIDgzLCA4NCwgODIsIAorICAgIDIxNywgNjgsIDY5LCA3OCwgODQsIDY1LCAyMDQsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgODQsIDc5LCA4MiwgCisgICAgMTI4LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3OSwgMjEwLCA2OCwgNjksIDc4LCA3OCwgNjksIDc4LCAKKyAgICAxMjgsIDY4LCA2OSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgNzgsIDE5NywgNjgsIDY5LCA3OCwgNjUsIDgyLCA3MywgODUsIAorICAgIDIxMSwgNjgsIDY5LCA3NiwgODQsIDY1LCAxMjgsIDY4LCA2OSwgNzYsIDg0LCAxOTMsIDY4LCA2OSwgNzYsIDg0LCAxMjgsIAorICAgIDY4LCA2OSwgNzYsIDgwLCA3MiwgNzMsIDE5NSwgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAKKyAgICAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA3NiwgNzMsIDc3LCA3MywgODQsIAorICAgIDY5LCAyMTAsIDY4LCA2OSwgNzYsIDY5LCA4NCwgNjksIDEyOCwgNjgsIDY5LCA3NiwgNjksIDg0LCAxOTcsIDY4LCA2OSwgCisgICAgNzUsIDY1LCAxMjgsIDY4LCA2OSwgNzUsIDEyOCwgNjgsIDY5LCA3MywgMTI4LCA2OCwgNjksIDcyLCA3MywgMTI4LCA2OCwgCisgICAgNjksIDcxLCA4MiwgNjksIDE5NywgNjgsIDY5LCA3MCwgNzMsIDc4LCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDY5LCAKKyAgICA3MCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgNzgsIDY5LCA4MywgMjExLCA2OCwgNjksIDY5LCA4MiwgMTI4LCA2OCwgNjksIAorICAgIDY5LCA3NiwgMTI4LCA2OCwgNjksIDY3LCA4MiwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNzksIDEyOCwgNjgsIDY5LCA2NywgCisgICAgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDY4LCA2OSwgNjcsIDczLCA4MywgNzMsIDg2LCA2OSwgNzgsIDY5LCA4MywgODMsIAorICAgIDEyOCwgNjgsIDY5LCA2NywgNzMsIDc3LCA2NSwgMjA0LCA2OCwgNjksIDY3LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgCisgICAgNjgsIDY5LCA2NywgNjUsIDg5LCA2OSwgNjgsIDEyOCwgNjgsIDY5LCA2NiwgNzMsIDIxMiwgNjgsIDY5LCA2NSwgODQsIDcyLCAKKyAgICAxMjgsIDY4LCA2OSwgNjUsIDY4LCAxMjgsIDY4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA2OCwgODUsIDg4LCAxMjgsIDY4LCAKKyAgICA2OCwgODUsIDg0LCAxMjgsIDY4LCA2OCwgODUsIDgyLCA4OCwgMTI4LCA2OCwgNjgsIDg1LCA4MiwgMTI4LCA2OCwgNjgsIAorICAgIDg1LCA4MCwgMTI4LCA2OCwgNjgsIDg1LCA3OSwgODgsIDEyOCwgNjgsIDY4LCA4NSwgNzksIDgwLCAxMjgsIDY4LCA2OCwgCisgICAgODUsIDc5LCAxMjgsIDY4LCA2OCwgODUsIDEyOCwgNjgsIDY4LCA3OSwgODgsIDEyOCwgNjgsIDY4LCA3OSwgODQsIDEyOCwgCisgICAgNjgsIDY4LCA3OSwgODAsIDEyOCwgNjgsIDY4LCA3OSwgNjUsIDEyOCwgNjgsIDY4LCA3MywgODgsIDEyOCwgNjgsIDY4LCAKKyAgICA3MywgODQsIDEyOCwgNjgsIDY4LCA3MywgODAsIDEyOCwgNjgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDY4LCA2OCwgNzMsIAorICAgIDY5LCA4MCwgMTI4LCA2OCwgNjgsIDczLCA2OSwgMTI4LCA2OCwgNjgsIDczLCAxMjgsIDY4LCA2OCwgNzIsIDc5LCAxMjgsIAorICAgIDY4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OCwgNjksIDg4LCAxMjgsIDY4LCA2OCwgNjksIDgwLCAxMjgsIDY4LCA2OCwgCisgICAgNjksIDY5LCAxMjgsIDY4LCA2OCwgNjksIDEyOCwgNjgsIDY4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OCwgNjgsIDY1LCAKKyAgICAxMjgsIDY4LCA2OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OCwgNjgsIDY1LCA4OCwgMTI4LCA2OCwgNjgsIAorICAgIDY1LCA4NCwgMTI4LCA2OCwgNjgsIDY1LCA4MCwgMTI4LCA2OCwgNjgsIDY1LCA3NiwgMTI4LCA2OCwgNjgsIDY1LCAyMDQsIAorICAgIDY4LCA2OCwgNjUsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDY4LCA2NSwgNzIsIDY1LCAyMDQsIDY4LCA2OCwgNjUsIDY1LCAKKyAgICAxMjgsIDY4LCAxOTQsIDY4LCA2NSwgMjE3LCA2OCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNjgsIDY1LCAKKyAgICA4NiwgNzMsIDY4LCAxMjgsIDY4LCA2NSwgODQsIDE5NywgNjgsIDY1LCA4MywgNzMsIDY1LCAxMjgsIDY4LCA2NSwgODMsIAorICAgIDcyLCA2OSwgMTk2LCA2OCwgNjUsIDgzLCA3MiwgMTI4LCA2OCwgNjUsIDgzLCAyMDAsIDY4LCA2NSwgODMsIDY5LCA3MywgCisgICAgNjUsIDEyOCwgNjgsIDY1LCA4MiwgODQsIDEyOCwgNjgsIDY1LCA4MiwgNzUsIDY5LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCAKKyAgICA2OCwgNjUsIDgyLCA3NSwgNjksIDc4LCA3MywgNzgsIDE5OSwgNjgsIDY1LCA4MiwgMjAzLCA2OCwgNjUsIDgyLCA3MSwgNjUsIAorICAgIDEyOCwgNjgsIDY1LCA4MiwgNjUsIDUyLCAxMjgsIDY4LCA2NSwgODIsIDY1LCA1MSwgMTI4LCA2OCwgNjUsIDgyLCAxMjgsIAorICAgIDY4LCA2NSwgODAsIDQ1LCA4MCwgODIsIDY1LCAyMDUsIDY4LCA2NSwgODAsIDQ1LCA4MCwgNzMsIDIwMSwgNjgsIDY1LCA4MCwgCisgICAgNDUsIDc3LCA4NSwgNzksIDIxNywgNjgsIDY1LCA4MCwgNDUsIDY2LCA4NSwgNzksIDIwNiwgNjgsIDY1LCA4MCwgNDUsIDY2LCAKKyAgICA2OSwgMjAxLCA2OCwgNjUsIDIwOCwgNjgsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA2OCwgNjUsIDc4LCA3MSwgMTI4LCAKKyAgICA2OCwgNjUsIDc4LCAxOTksIDY4LCA2NSwgNzgsIDY4LCA2NSwgMTI4LCA2OCwgNjUsIDc3LCA4MCwgMTI4LCA2OCwgNjUsIAorICAgIDc3LCAyMDgsIDY4LCA2NSwgNzcsIDc3LCA2NSwgODQsIDY1LCA3OCwgMTI4LCA2OCwgNjUsIDc3LCA3NywgNjUsIDg0LCA2NSwgCisgICAgMjA2LCA2OCwgNjUsIDc3LCA3NywgNjUsIDEyOCwgNjgsIDY1LCA3NywgNzcsIDE5MywgNjgsIDY1LCA3NywgNjUsIDgyLCAKKyAgICA4NSwgMTI4LCA2OCwgNjUsIDc2LCA2OSwgODQsIDcyLCAxMjgsIDY4LCA2NSwgNzYsIDY5LCA4NCwgMTI4LCA2OCwgNjUsIAorICAgIDc2LCA2OSwgMjEyLCA2OCwgNjUsIDc2LCA2OCwgNjUsIDEyOCwgNjgsIDY1LCA3NiwgNjUsIDg0LCA3MiwgMTI4LCA2OCwgCisgICAgNjUsIDc2LCA2NSwgODQsIDIwMCwgNjgsIDY1LCA3NiwgNjUsIDg0LCAxMjgsIDY4LCA2NSwgNzMsIDgyLCAxMjgsIDY4LCAKKyAgICA2NSwgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNjUsIDcyLCA4OSwgNjUsIDY1LCA4NSwgODMsIDcyLCA0NSwgNTAsIDEyOCwgNjgsIAorICAgIDY1LCA3MiwgODksIDY1LCA2NSwgODUsIDgzLCA3MiwgMTI4LCA2OCwgNjUsIDcxLCA4MywgMTI4LCA2OCwgNjUsIDcxLCA3MSwgCisgICAgNjksIDgyLCAxMjgsIDY4LCA2NSwgNzEsIDY5LCA4MywgNzIsIDEyOCwgNjgsIDY1LCA3MSwgNjksIDgzLCAyMDAsIDY4LCAKKyAgICA2NSwgNzEsIDY2LCA2NSwgODMsIDczLCA3OCwgNzgsIDY1LCAxMjgsIDY4LCA2NSwgNzEsIDY1LCAyMTgsIDY4LCA2NSwgNzEsIAorICAgIDY1LCA3NiwgNzEsIDY1LCAxMjgsIDY4LCA2NSwgMTk5LCA2OCwgNjUsIDY5LCA3OCwgNzEsIDEyOCwgNjgsIDY1LCA2OSwgCisgICAgMTk5LCA2OCwgNjUsIDY4LCAxMjgsIDY4LCA2NSwgMTk2LCA2OCwgNjUsIDY1LCA4MywgODUsIDEyOCwgNjgsIDY1LCA2NSwgCisgICAgNjgsIDcyLCA4NSwgMTI4LCA2OCwgNDgsIDU0LCA1NSwgNzIsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDcxLCAxMjgsIDY4LCAKKyAgICA0OCwgNTQsIDU1LCA3MCwgMTI4LCA2OCwgNDgsIDU0LCA1NSwgNjksIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDY4LCAxMjgsIAorICAgIDY4LCA0OCwgNTQsIDU1LCA2NywgMTI4LCA2OCwgNDgsIDU0LCA1NSwgNjYsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDY1LCAKKyAgICAxMjgsIDY4LCA0OCwgNTQsIDU1LCAxMjgsIDY4LCA0OCwgNTQsIDU0LCAxMjgsIDY4LCA0OCwgNTQsIDUzLCAxMjgsIDY4LCAKKyAgICA0OCwgNTQsIDUyLCAxMjgsIDY4LCA0OCwgNTQsIDUxLCAxMjgsIDY4LCA0OCwgNTQsIDUwLCAxMjgsIDY4LCA0OCwgNTQsIAorICAgIDQ5LCAxMjgsIDY4LCA0OCwgNTQsIDQ4LCAxMjgsIDY4LCA0OCwgNTMsIDU3LCAxMjgsIDY4LCA0OCwgNTMsIDU2LCAxMjgsIAorICAgIDY4LCA0OCwgNTMsIDU1LCAxMjgsIDY4LCA0OCwgNTMsIDU0LCAxMjgsIDY4LCA0OCwgNTMsIDUzLCAxMjgsIDY4LCA0OCwgCisgICAgNTMsIDUyLCA2NSwgMTI4LCA2OCwgNDgsIDUzLCA1MiwgMTI4LCA2OCwgNDgsIDUzLCA1MSwgMTI4LCA2OCwgNDgsIDUzLCAKKyAgICA1MCwgNjUsIDEyOCwgNjgsIDQ4LCA1MywgNTAsIDEyOCwgNjgsIDQ4LCA1MywgNDksIDEyOCwgNjgsIDQ4LCA1MywgNDgsIAorICAgIDczLCAxMjgsIDY4LCA0OCwgNTMsIDQ4LCA3MiwgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNzEsIDEyOCwgNjgsIDQ4LCA1MywgCisgICAgNDgsIDcwLCAxMjgsIDY4LCA0OCwgNTMsIDQ4LCA2OSwgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNjgsIDEyOCwgNjgsIDQ4LCAKKyAgICA1MywgNDgsIDY3LCAxMjgsIDY4LCA0OCwgNTMsIDQ4LCA2NiwgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNjUsIDEyOCwgNjgsIAorICAgIDQ4LCA1MywgNDgsIDEyOCwgNjgsIDQ4LCA1MiwgNTcsIDEyOCwgNjgsIDQ4LCA1MiwgNTYsIDY1LCAxMjgsIDY4LCA0OCwgCisgICAgNTIsIDU2LCAxMjgsIDY4LCA0OCwgNTIsIDU1LCAxMjgsIDY4LCA0OCwgNTIsIDU0LCA2NSwgMTI4LCA2OCwgNDgsIDUyLCAKKyAgICA1NCwgMTI4LCA2OCwgNDgsIDUyLCA1MywgMTI4LCA2OCwgNDgsIDUyLCA1MiwgMTI4LCA2OCwgNDgsIDUyLCA1MSwgMTI4LCAKKyAgICA2OCwgNDgsIDUyLCA1MCwgMTI4LCA2OCwgNDgsIDUyLCA0OSwgMTI4LCA2OCwgNDgsIDUyLCA0OCwgMTI4LCA2OCwgNDgsIAorICAgIDUxLCA1NywgMTI4LCA2OCwgNDgsIDUxLCA1NiwgMTI4LCA2OCwgNDgsIDUxLCA1NSwgMTI4LCA2OCwgNDgsIDUxLCA1NCwgCisgICAgMTI4LCA2OCwgNDgsIDUxLCA1MywgMTI4LCA2OCwgNDgsIDUxLCA1MiwgNjUsIDEyOCwgNjgsIDQ4LCA1MSwgNTIsIDEyOCwgCisgICAgNjgsIDQ4LCA1MSwgNTEsIDEyOCwgNjgsIDQ4LCA1MSwgNTAsIDEyOCwgNjgsIDQ4LCA1MSwgNDksIDY1LCAxMjgsIDY4LCAKKyAgICA0OCwgNTEsIDQ5LCAxMjgsIDY4LCA0OCwgNTEsIDQ4LCAxMjgsIDY4LCA0OCwgNTAsIDU3LCAxMjgsIDY4LCA0OCwgNTAsIAorICAgIDU2LCAxMjgsIDY4LCA0OCwgNTAsIDU1LCA2NSwgMTI4LCA2OCwgNDgsIDUwLCA1NSwgMTI4LCA2OCwgNDgsIDUwLCA1NCwgCisgICAgMTI4LCA2OCwgNDgsIDUwLCA1MywgMTI4LCA2OCwgNDgsIDUwLCA1MiwgMTI4LCA2OCwgNDgsIDUwLCA1MSwgMTI4LCA2OCwgCisgICAgNDgsIDUwLCA1MCwgMTI4LCA2OCwgNDgsIDUwLCA0OSwgMTI4LCA2OCwgNDgsIDUwLCA0OCwgMTI4LCA2OCwgNDgsIDQ5LCAKKyAgICA1NywgMTI4LCA2OCwgNDgsIDQ5LCA1NiwgMTI4LCA2OCwgNDgsIDQ5LCA1NSwgMTI4LCA2OCwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA2OCwgNDgsIDQ5LCA1MywgMTI4LCA2OCwgNDgsIDQ5LCA1MiwgMTI4LCA2OCwgNDgsIDQ5LCA1MSwgMTI4LCA2OCwgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA2OCwgNDgsIDQ5LCA0OSwgMTI4LCA2OCwgNDgsIDQ5LCA0OCwgMTI4LCA2OCwgNDgsIDQ4LCA1NywgCisgICAgMTI4LCA2OCwgNDgsIDQ4LCA1NiwgNjUsIDEyOCwgNjgsIDQ4LCA0OCwgNTYsIDEyOCwgNjgsIDQ4LCA0OCwgNTUsIDEyOCwgCisgICAgNjgsIDQ4LCA0OCwgNTQsIDEyOCwgNjgsIDQ4LCA0OCwgNTMsIDEyOCwgNjgsIDQ4LCA0OCwgNTIsIDEyOCwgNjgsIDQ4LCAKKyAgICA0OCwgNTEsIDEyOCwgNjgsIDQ4LCA0OCwgNTAsIDEyOCwgNjgsIDQ4LCA0OCwgNDksIDEyOCwgNjcsIDg5LCA4OCwgMTI4LCAKKyAgICA2NywgODksIDg0LCAxMjgsIDY3LCA4OSwgODIsIDg4LCAxMjgsIDY3LCA4OSwgODIsIDY5LCA3OCwgNjUsIDczLCAxOTUsIAorICAgIDY3LCA4OSwgODIsIDEyOCwgNjcsIDg5LCA4MCwgODIsIDczLCA3OSwgMjEyLCA2NywgODksIDgwLCA2OSwgODIsIDg1LCA4MywgCisgICAgMTI4LCA2NywgODksIDgwLCAxMjgsIDY3LCA4OSwgNzYsIDczLCA3OCwgNjgsIDgyLCA3MywgNjcsIDczLCA4NCwgODksIAorICAgIDEyOCwgNjcsIDg5LCA2NSwgMTI4LCA2NywgODksIDEyOCwgNjcsIDg3LCA3OSwgNzksIDEyOCwgNjcsIDg3LCA3OSwgMTI4LCAKKyAgICA2NywgODcsIDczLCA3MywgMTI4LCA2NywgODcsIDczLCAxMjgsIDY3LCA4NywgNjksIDc5LCA4MiwgODQsIDcyLCAxMjgsIAorICAgIDY3LCA4NywgNjksIDEyOCwgNjcsIDg3LCA2NSwgNjUsIDEyOCwgNjcsIDg1LCA4OCwgMTI4LCA2NywgODUsIDg0LCAxMjgsIAorICAgIDY3LCA4NSwgMjEyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA2OSwgMjEwLCA2NywgODUsIDgyLCA4OCwgMTI4LCA2NywgCisgICAgODUsIDgyLCA4NiwgNzMsIDc4LCAxOTksIDY3LCA4NSwgODIsIDg2LCA2OSwgMTk2LCA2NywgODUsIDgyLCA4NiwgNjksIAorICAgIDEyOCwgNjcsIDg1LCA4MiwgODYsIDE5NywgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgODQsIDEyOCwgNjcsIDg1LCA4MiwgCisgICAgODIsIDY5LCA3OCwgMjEyLCA2NywgODUsIDgyLCA3NiwgMjE3LCA2NywgODUsIDgyLCA3NiwgMTI4LCA2NywgODUsIDgyLCAKKyAgICAxMjgsIDY3LCA4NSwgODAsIDEyOCwgNjcsIDg1LCAyMDgsIDY3LCA4NSwgNzksIDg4LCAxMjgsIDY3LCA4NSwgNzksIDgwLCAKKyAgICAxMjgsIDY3LCA4NSwgNzksIDEyOCwgNjcsIDg1LCAyMDUsIDY3LCA4NSwgNjYsIDY5LCA2OCwgMTI4LCA2NywgODUsIDY2LCAKKyAgICAxOTcsIDY3LCA4NSwgNjUsIDg0LCA4MiwgNzMsIDc2LCA3NiwgNzksIDEyOCwgNjcsIDg1LCA2NSwgODQsIDgyLCA3MywgNzYsIAorICAgIDc2LCAyMDcsIDY3LCA4NSwgMTI4LCA2NywgODIsIDg5LCA4MCwgODQsIDc5LCA3MSwgODIsIDY1LCA3NywgNzcsIDczLCAKKyAgICAxOTUsIDY3LCA4MiwgODUsIDkwLCA2OSwgNzMsIDgyLCAyMDcsIDY3LCA4MiwgNzksIDgzLCA4MywgNzMsIDc4LCAxOTksIAorICAgIDY3LCA4MiwgNzksIDgzLCA4MywgNzIsIDY1LCA4NCwgNjcsIDIwMCwgNjcsIDgyLCA3OSwgODMsIDgzLCA2OSwgNjgsIDQ1LCAKKyAgICA4NCwgNjUsIDczLCA3NiwgMTI4LCA2NywgODIsIDc5LCA4MywgODMsIDY5LCAxOTYsIDY3LCA4MiwgNzksIDgzLCA4MywgNjYsIAorICAgIDc5LCA3OCwgNjksIDgzLCAxMjgsIDY3LCA4MiwgNzksIDgzLCA4MywgMTI4LCA2NywgODIsIDc5LCA4MywgMjExLCA2NywgCisgICAgODIsIDc5LCA4MCwgMTI4LCA2NywgODIsIDc5LCA3MywgODgsIDEyOCwgNjcsIDgyLCA2OSwgODMsIDY3LCA2OSwgNzgsIDg0LCAKKyAgICAxMjgsIDY3LCA4MiwgNjksIDgzLCA2NywgNjksIDc4LCAyMTIsIDY3LCA4MiwgNjksIDY4LCA3MywgMjEyLCA2NywgODIsIAorICAgIDY5LCA2NSwgODQsIDczLCA4NiwgMTk3LCA2NywgNzksIDg4LCAxMjgsIDY3LCA3OSwgODcsIDEyOCwgNjcsIDc5LCA4NiwgCisgICAgNjksIDgyLCAxMjgsIDY3LCA3OSwgODUsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDY3LCA3OSwgODUsIDc4LCA4NCwgNjksIDgyLCAKKyAgICA4MywgNzMsIDc4LCA3NSwgMTI4LCA2NywgNzksIDg1LCA3OCwgODQsIDY5LCA4MiwgNjYsIDc5LCA4MiwgNjksIDEyOCwgNjcsIAorICAgIDc5LCA4NSwgNzgsIDY3LCA3MywgMjA0LCA2NywgNzksIDg0LCAxMjgsIDY3LCA3OSwgODIsIDgyLCA2OSwgODMsIDgwLCA3OSwgCisgICAgNzgsIDY4LCAyMTEsIDY3LCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCAxMjgsIDY3LCA3OSwgODIsIDgwLCA4MywgNjksIAorICAgIDEyOCwgNjcsIDc5LCA4MiwgODAsIDc5LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgODIsIDc5LCA3OCwgCisgICAgNzMsIDgzLCAxMjgsIDY3LCA3OSwgODIsIDc4LCA2OSwgODIsIDgzLCAxMjgsIDY3LCA3OSwgODIsIDc4LCA2OSwgODIsIAorICAgIDEyOCwgNjcsIDc5LCA4MiwgNzgsIDY5LCAyMTAsIDY3LCA3OSwgODAsIDg5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgCisgICAgNjcsIDc5LCA4MCwgODksIDgyLCA3MywgNzEsIDcyLCAyMTIsIDY3LCA3OSwgODAsIDg5LCAxMjgsIDY3LCA3OSwgODAsIDgyLCAKKyAgICA3OSwgNjgsIDg1LCA2NywgODQsIDEyOCwgNjcsIDc5LCA4MCwgMTI4LCA2NywgNzksIDc5LCAxMjgsIDY3LCA3OSwgNzgsIAorICAgIDg2LCA2OSwgODIsIDcxLCA3MywgNzgsIDE5OSwgNjcsIDc5LCA3OCwgODQsIDgyLCA3OSwgMjA0LCA2NywgNzksIDc4LCA4NCwgCisgICAgODIsIDY1LCA4MiwgNzMsIDY5LCA4NCwgODksIDEyOCwgNjcsIDc5LCA3OCwgODQsIDgyLCA2NSwgNjcsIDg0LCA3MywgNzksIAorICAgIDc4LCAxMjgsIDY3LCA3OSwgNzgsIDg0LCA3OSwgODUsIDgyLCA2OSwgMTk2LCA2NywgNzksIDc4LCA4NCwgNzksIDg1LCAKKyAgICAyMTAsIDY3LCA3OSwgNzgsIDg0LCA2OSwgNzgsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzgsIDg0LCA2OSwgNzcsIAorICAgIDgwLCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAyMTEsIDY3LCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzMsIDc4LCA3MywgNzgsIDE5OSwgNjcsIDc5LCA3OCwgODQsIDY1LCA3MywgMjA2LCA2NywgNzksIDc4LCAKKyAgICA4NCwgNjUsIDY3LCA4NCwgMTI4LCA2NywgNzksIDc4LCA4MywgODQsIDY1LCA3OCwgODQsIDEyOCwgNjcsIDc5LCA3OCwgODMsIAorICAgIDg0LCA2NSwgNzgsIDIxMiwgNjcsIDc5LCA3OCwgODMsIDg0LCA2NSwgNzgsIDY3LCA4OSwgMTI4LCA2NywgNzksIDc4LCA4MywgCisgICAgNzksIDc4LCA2NSwgNzgsIDIxMiwgNjcsIDc5LCA3OCwgODMsIDY5LCA2NywgODUsIDg0LCA3MywgODYsIDE5NywgNjcsIDc5LCAKKyAgICA3OCwgNzQsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzgsIDc0LCA4NSwgNzEsIDY1LCA4NCwgCisgICAgMTk3LCA2NywgNzksIDc4LCA3NCwgNzksIDczLCA3OCwgNzMsIDc4LCAxOTksIDY3LCA3OSwgNzgsIDczLCA2NywgNjUsIAorICAgIDIwNCwgNjcsIDc5LCA3OCwgNzEsIDgyLCA4NSwgNjksIDc4LCAyMTIsIDY3LCA3OSwgNzgsIDcxLCA4MiwgNjUsIDg0LCA4NSwgCisgICAgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCA3MCwgNzYsIDczLCA2NywgODQsIDEyOCwgNjcsIDc5LCAKKyAgICA3OCwgNjcsIDY1LCA4NiwgNjksIDQ1LCA4MywgNzMsIDY4LCA2OSwgMTk2LCA2NywgNzksIDc4LCA2NywgNjUsIDg2LCA2OSwgCisgICAgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDE5NiwgNjcsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc3LCA4MCwgNzksIDgzLCAKKyAgICA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIDc5LCA3NywgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgNjcsIAorICAgIDc5LCA3NywgODAsIDc2LCA3MywgNjUsIDc4LCA2NywgNjksIDEyOCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIDY5LCA2OCwgMTI4LCA2NywgNzksIDc3LCA4MCwgNzYsIAorICAgIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA2NywgNzksIDc3LCA4MCwgNjUsIDgyLCA2OSwgMTI4LCA2NywgNzksIDc3LCA3NywgCisgICAgNzksIDIwNiwgNjcsIDc5LCA3NywgNzcsIDY5LCA4MiwgNjcsIDczLCA2NSwgMjA0LCA2NywgNzksIDc3LCA3NywgNjUsIAorICAgIDEyOCwgNjcsIDc5LCA3NywgNzcsIDE5MywgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDY3LCA3OSwgNzcsIDY5LCA4NCwgCisgICAgMTI4LCA2NywgNzksIDc3LCA2NiwgMTI4LCA2NywgNzksIDc2LCA4NSwgNzcsIDc4LCAxMjgsIDY3LCA3OSwgNzYsIDc5LCAKKyAgICA4MiwgMTI4LCA2NywgNzksIDc2LCA3NiwgMTI4LCA2NywgNzksIDcwLCA3MCwgNzMsIDc4LCAxMjgsIDY3LCA3OSwgNjksIAorICAgIDc4LCA3MSwgMTI4LCA2NywgNzksIDY4LCA2NSwgMTI4LCA2NywgNzksIDY1LCAxMjgsIDY3LCA3OSwgMTI4LCA2NywgNzcsIAorICAgIDEyOCwgNjcsIDIwNSwgNjcsIDc2LCA4NSwgODMsIDg0LCA2OSwgMjEwLCA2NywgNzYsIDg1LCA2NiwgNDUsIDgzLCA4MCwgCisgICAgNzksIDc1LCA2OSwgMTk2LCA2NywgNzYsIDg1LCA2NiwgMTI4LCA2NywgNzYsIDg1LCAxOTQsIDY3LCA3NiwgNzksIDg1LCAKKyAgICA2OCwgMTI4LCA2NywgNzYsIDc5LCA4NSwgMTk2LCA2NywgNzYsIDc5LCA4NCwgNzIsIDY5LCA4MywgMTI4LCA2NywgNzYsIAorICAgIDc5LCA4NCwgNzIsIDEyOCwgNjcsIDc2LCA3OSwgODMsIDY5LCA3OCwgNjksIDgzLCA4MywgMTI4LCA2NywgNzYsIDc5LCA4MywgCisgICAgNjksIDY4LCAxMjgsIDY3LCA3NiwgNzksIDgzLCA2OSwgMTk2LCA2NywgNzYsIDc5LCA4MywgMTk3LCA2NywgNzYsIDc5LCAKKyAgICA2NywgNzUsIDg3LCA3MywgODMsIDE5NywgNjcsIDc2LCA3MywgODYsIDczLCA4MywgMTI4LCA2NywgNzYsIDczLCA3OCwgNzEsIAorICAgIDczLCA3OCwgMTk5LCA2NywgNzYsIDczLCA3NywgNjUsIDY3LCA4NSwgODMsIDEyOCwgNjcsIDc2LCA3MywgNzAsIDcwLCAKKyAgICAxMjgsIDY3LCA3NiwgNzMsIDY3LCA3NSwgMTI4LCA2NywgNzYsIDY5LCA3MCwgNDUsIDUwLCAxMjgsIDY3LCA3NiwgNjksIAorICAgIDcwLCA0NSwgNDksIDEyOCwgNjcsIDc2LCA2OSwgNzAsIDEyOCwgNjcsIDc2LCA2OSwgMTk4LCA2NywgNzYsIDY5LCA2NSwgCisgICAgMjEwLCA2NywgNzYsIDY1LCA4NywgMTI4LCA2NywgNzYsIDY1LCA3OCwgMTI4LCA2NywgNzMsIDg4LCAxMjgsIDY3LCA3MywgCisgICAgODYsIDczLCA3NiwgNzMsIDY1LCA3OCwgMTI4LCA2NywgNzMsIDg0LCAxMjgsIDY3LCA3MywgODIsIDY3LCA4NSwgNzcsIDcwLCAKKyAgICA3NiwgNjksIDg4LCAxMjgsIDY3LCA3MywgODIsIDY3LCA4NSwgNzcsIDcwLCA3NiwgNjksIDIxNiwgNjcsIDczLCA4MiwgNjcsIAorICAgIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjcsIDczLCA4MiwgNjcsIDc2LCA2OSwgODMsIDEyOCwgNjcsIDczLCA4MiwgCisgICAgNjcsIDc2LCA2OSwgMTI4LCA2NywgNzMsIDgwLCAxMjgsIDY3LCA3MywgNzMsIDEyOCwgNjcsIDczLCA2OSwgODgsIDEyOCwgCisgICAgNjcsIDczLCA2OSwgODUsIDY3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNjcsIAorICAgIDczLCA2OSwgODUsIDY3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDY3LCA3MywgNjksIDg1LCA2NywgNDUsIDczLCAKKyAgICA2OSwgODUsIDc4LCA3MSwgMTI4LCA2NywgNzMsIDY5LCA4NSwgMTk1LCA2NywgNzMsIDY5LCA4NCwgMTI4LCA2NywgNzMsIAorICAgIDY5LCA4MCwgMTI4LCA2NywgNzMsIDY5LCAxMjgsIDY3LCA3MywgMTI4LCA2NywgNzIsIDg5LCA4OCwgMTI4LCA2NywgNzIsIAorICAgIDg5LCA4NCwgMTI4LCA2NywgNzIsIDg5LCA4MiwgODgsIDEyOCwgNjcsIDcyLCA4OSwgODIsIDEyOCwgNjcsIDcyLCA4OSwgCisgICAgODAsIDEyOCwgNjcsIDcyLCA4NSwgODgsIDEyOCwgNjcsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDY3LCA3MiwgODUsIDgyLCAKKyAgICA2NywgNzIsIDEyOCwgNjcsIDcyLCA4NSwgODIsIDEyOCwgNjcsIDcyLCA4NSwgODAsIDEyOCwgNjcsIDcyLCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDY3LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA2NywgNzIsIDg1LCA3OSwgODAsIDEyOCwgNjcsIDcyLCA4NSwgCisgICAgNzksIDEyOCwgNjcsIDcyLCA4NSwgNzYsIDY1LCAxMjgsIDY3LCA3MiwgODUsIDEyOCwgNjcsIDcyLCA4MiwgODksIDgzLCAKKyAgICA2NSwgNzgsIDg0LCA3MiwgNjksIDc3LCA4NSwgNzcsIDEyOCwgNjcsIDcyLCA4MiwgNzksIDc4LCA3OSwgODUsIDEyOCwgNjcsIAorICAgIDcyLCA4MiwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNjcsIDcyLCA4MiwgNzksIDc3LCAxOTMsIDY3LCA3MiwgODIsIDc5LCAKKyAgICAxOTMsIDY3LCA3MiwgODIsIDczLCA4NiwgNzMsIDEyOCwgNjcsIDcyLCA3OSwgODgsIDEyOCwgNjcsIDcyLCA3OSwgODQsIAorICAgIDEyOCwgNjcsIDcyLCA3OSwgODIsIDY5LCA4NiwgNzcsIDE5MywgNjcsIDcyLCA3OSwgODAsIDEyOCwgNjcsIDcyLCA3OSwgCisgICAgNzUsIDY5LCAxMjgsIDY3LCA3MiwgNzksIDY5LCAxMjgsIDY3LCA3MiwgNzksIDY1LCAxMjgsIDY3LCA3MiwgNzksIDEyOCwgCisgICAgNjcsIDcyLCAyMDcsIDY3LCA3MiwgNzMsIDg0LCA4NSwgNjksIDg1LCA3NywgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIAorICAgIDc5LCA4MywgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCAKKyAgICA2OSwgODUsIDY3LCAxMjgsIDY3LCA3MiwgNzMsIDg0LCA4NSwgNjksIDg1LCA3NywgODMsIDczLCA3OSwgODMsIDEyOCwgNjcsIAorICAgIDcyLCA3MywgODQsIDg1LCA2OSwgODUsIDc3LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNjcsIDcyLCA3MywgODQsIDg1LCAKKyAgICA2OSwgODUsIDc3LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA2NywgNzIsIDczLCA4MiwgNzksIDc4LCAxMjgsIAorICAgIDY3LCA3MiwgNzMsIDgyLCA2OSwgODQsIDEyOCwgNjcsIDcyLCA3MywgNzgsIDcxLCAxMjgsIDY3LCA3MiwgNzMsIDc4LCA2OSwgCisgICAgODMsIDE5NywgNjcsIDcyLCA3MywgNzgsIDEyOCwgNjcsIDcyLCA3MywgNzYsIDc2LCAyMTMsIDY3LCA3MiwgNzMsIDc2LCAKKyAgICA2OCwgMTI4LCA2NywgNzIsIDczLCA3NiwgMTI4LCA2NywgNzIsIDczLCA3NSwgMjAxLCA2NywgNzIsIDczLCA2OSwgODUsIAorICAgIDY3LCA3MiwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAKKyAgICA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDIwMCwgNjcsIDcyLCA3MywgCisgICAgMTI4LCA2NywgNzIsIDIwMSwgNjcsIDcyLCA3MiwgNjUsIDEyOCwgNjcsIDcyLCA2OSwgODgsIDEyOCwgNjcsIDcyLCA2OSwgCisgICAgODYsIDgyLCA3OSwgMjA2LCA2NywgNzIsIDY5LCA4NCwgMTI4LCA2NywgNzIsIDY5LCA4MywgMjExLCA2NywgNzIsIDY5LCAKKyAgICA4MCwgMTI4LCA2NywgNzIsIDY5LCAyMDYsIDY3LCA3MiwgNjksIDczLCA3OCwgNjUsIDgwLCAxMjgsIDY3LCA3MiwgNjksIAorICAgIDczLCA3NSwgNzIsIDY5LCA3MywgMTI4LCA2NywgNzIsIDY5LCA2OSwgMTI4LCA2NywgNzIsIDY5LCA2NywgNzUsIDEyOCwgCisgICAgNjcsIDcyLCA2OSwgNjcsIDIwMywgNjcsIDcyLCAxOTcsIDY3LCA3MiwgNjUsIDg4LCAxMjgsIDY3LCA3MiwgNjUsIDg2LCAKKyAgICA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNjcsIDcyLCA2NSwgODQsIDg0LCA2NSwgODcsIDY1LCAxMjgsIDY3LCA3MiwgNjUsIAorICAgIDg0LCAxMjgsIDY3LCA3MiwgNjUsIDgyLCA3MywgNzksIDg0LCAxMjgsIDY3LCA3MiwgNjUsIDgyLCA3MywgNzksIDIxMiwgCisgICAgNjcsIDcyLCA2NSwgODIsIDY1LCA2NywgODQsIDY5LCA4MiwgODMsIDEyOCwgNjcsIDcyLCA2NSwgODIsIDY1LCA2NywgODQsIAorICAgIDY5LCA4MiwgMTI4LCA2NywgNzIsIDY1LCA4MiwgMTI4LCA2NywgNzIsIDY1LCA4MCwgMTI4LCA2NywgNzIsIDY1LCA3OCwgCisgICAgNzEsIDY5LCAxMjgsIDY3LCA3MiwgNjUsIDc4LCA3MSwgMTI4LCA2NywgNzIsIDY1LCA3OCwgMTI4LCA2NywgNzIsIDY1LCAKKyAgICA3NywgNzUsIDc5LCAxMjgsIDY3LCA3MiwgNjUsIDc3LCA3MywgNzYsIDc5LCA3OCwgMTI4LCA2NywgNzIsIDY1LCA3NywgNzMsIAorICAgIDc2LCA3MywgMTI4LCA2NywgNzIsIDY1LCA3MywgODIsIDEyOCwgNjcsIDcyLCA2NSwgNzMsIDc4LCA4MywgMTI4LCA2NywgCisgICAgNzIsIDY1LCA2OCwgNjUsIDEyOCwgNjcsIDcyLCA2NSwgMTk2LCA2NywgNzIsIDY1LCA2NSwgMTI4LCA2NywgNjksIDg4LCAKKyAgICAxMjgsIDY3LCA2OSwgODIsIDY5LCA4MywgMTI4LCA2NywgNjksIDgyLCA2OSwgNzUsIDEyOCwgNjcsIDY5LCA4MiwgNDUsIAorICAgIDg3LCA2NSwgMTI4LCA2NywgNjksIDgwLCAxMjgsIDY3LCA2OSwgNzksIDc4LCA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCA3NywgCisgICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA2NywgNjksIDc5LCA3OCwgNzEsIDY3LCA3MiwgNzMsIAorICAgIDY5LCA4NSwgNzcsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDY3LCA2OSwgNzksIDc4LCAKKyAgICA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCA3NywgODMsIDczLCA3OSwgODMsIDEyOCwgNjcsIDY5LCA3OSwgNzgsIDcxLCA2NywgCisgICAgNzIsIDczLCA2OSwgODUsIDc3LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNjcsIDY5LCA3OSwgNzgsIDcxLCA2NywgNzIsIAorICAgIDczLCA2OSwgODUsIDc3LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA2NywgNjksIDc4LCA4NCwgODUsIDgyLCAKKyAgICA3MywgNjUsIDIwNCwgNjcsIDY5LCA3OCwgODQsIDgyLCA2OSwgNzYsIDczLCA3OCwgMTk3LCA2NywgNjksIDc4LCA4NCwgODIsIAorICAgIDY5LCAxOTYsIDY3LCA2OSwgNzgsIDg0LCA4MiwgNjksIDEyOCwgNjcsIDY5LCA3OCwgODQsIDgyLCAxOTcsIDY3LCA2OSwgCisgICAgNzgsIDEyOCwgNjcsIDY5LCA3NiwgODMsIDczLCA4NSwgODMsIDEyOCwgNjcsIDY5LCA3MywgODIsIDg0LCAxMjgsIDY3LCAKKyAgICA2OSwgNzMsIDc2LCA3MywgNzgsIDcxLCAxMjgsIDY3LCA2OSwgNjksIDEyOCwgNjcsIDY5LCA2OCwgNzMsIDc2LCA3NiwgNjUsIAorICAgIDEyOCwgNjcsIDY5LCA2OCwgNzMsIDc2LCA3NiwgMTkzLCA2NywgNjksIDY4LCAyMDEsIDY3LCA2OSwgNjcsIDY5LCA3NSwgCisgICAgMTI4LCA2NywgNjksIDY3LCA2NSwgNzUsIDEyOCwgNjcsIDY5LCA2NywgNjUsIDIwMywgNjcsIDY5LCA2NSwgNzYsIDY3LCAKKyAgICAxMjgsIDY3LCA2NywgODUsIDEyOCwgNjcsIDY3LCA3OSwgMTI4LCA2NywgNjcsIDczLCAxMjgsIDY3LCA2NywgNzIsIDg1LCAKKyAgICAxMjgsIDY3LCA2NywgNzIsIDc5LCAxMjgsIDY3LCA2NywgNzIsIDczLCAxMjgsIDY3LCA2NywgNzIsIDY5LCA2OSwgMTI4LCAKKyAgICA2NywgNjcsIDcyLCA2OSwgMTI4LCA2NywgNjcsIDcyLCA2NSwgNjUsIDEyOCwgNjcsIDY3LCA3MiwgNjUsIDEyOCwgNjcsIAorICAgIDY3LCA2OSwgNjksIDEyOCwgNjcsIDY3LCA2OSwgMTI4LCA2NywgNjcsIDY1LCA2NSwgMTI4LCA2NywgNjcsIDY1LCAxMjgsIAorICAgIDY3LCA2NSwgODksIDc4LCAxMjgsIDY3LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY3LCA2NSwgODgsIDEyOCwgCisgICAgNjcsIDY1LCA4NiwgNjksIDEyOCwgNjcsIDY1LCA4NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNjUsIDg1LCA3NiwgNjgsIDgyLCAKKyAgICA3OSwgNzgsIDEyOCwgNjcsIDY1LCA4NSwgNjgsIDY1LCAxMjgsIDY3LCA2NSwgODQsIDY1LCA4NywgNjUsIDEyOCwgNjcsIAorICAgIDY1LCA4NCwgMTI4LCA2NywgNjUsIDgzLCA4NCwgNzYsIDY5LCAxMjgsIDY3LCA2NSwgODIsIDg5LCA4MywgODQsIDczLCA2NSwgCisgICAgMjA2LCA2NywgNjUsIDgyLCA4NCwgMTI4LCA2NywgNjUsIDgyLCA4MiwgNzMsIDY1LCA3MSwgMTk3LCA2NywgNjUsIDgyLCAKKyAgICA4MCwgNjksIDc4LCA4NCwgODIsIDIxNywgNjcsIDY1LCA4MiwgNzksIDc4LCAxMjgsIDY3LCA2NSwgODIsIDc5LCAyMDYsIAorICAgIDY3LCA2NSwgODIsIDczLCAyMDMsIDY3LCA2NSwgODIsIDczLCA2NSwgMjA2LCA2NywgNjUsIDgyLCA2OSwgODQsIDEyOCwgCisgICAgNjcsIDY1LCA4MiwgNjksIDIxMiwgNjcsIDY1LCA4MiwgMTk3LCA2NywgNjUsIDgyLCAxMjgsIDY3LCA2NSwgMjEwLCA2NywgCisgICAgNjUsIDgwLCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA2NywgNjUsIDgwLCA4MiwgNzMsIDY3LCA3OSwgODIsIDc4LCAxMjgsIDY3LCAKKyAgICA2NSwgODAsIDc5LCAxMjgsIDY3LCA2NSwgODAsIDczLCA4NCwgNjUsIDc2LCAxMjgsIDY3LCA2NSwgNzgsIDg0LCA3MywgNzYsIAorICAgIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNjUsIDc4LCAxOTksIDY3LCA2NSwgNzgsIDY4LCA4MiwgNjUsIDY2LCA3MywgCisgICAgNzgsIDY4LCA4NSwgMTI4LCA2NywgNjUsIDc4LCA2OCwgODIsIDY1LCA2NiwgNzMsIDc4LCA2OCwgMjEzLCA2NywgNjUsIDc4LCAKKyAgICA2OCwgODIsIDY1LCAxMjgsIDY3LCA2NSwgNzgsIDY4LCA4MiwgMTkzLCA2NywgNjUsIDc4LCA2NywgNjksIDgyLCAxMjgsIAorICAgIDY3LCA2NSwgNzgsIDY3LCA2OSwgNzYsIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNjUsIDc4LCA2NywgNjksIDc2LCAKKyAgICAxMjgsIDY3LCA2NSwgNzgsIDY3LCA2OSwgMjA0LCA2NywgNjUsIDc4LCAxMjgsIDY3LCA2NSwgNzcsIDc4LCA4NSwgMTk1LCAKKyAgICA2NywgNjUsIDc2LCA4OSwgNjUsIDEyOCwgNjcsIDY1LCA3NiwgODksIDE5MywgNjcsIDY1LCA3NiwgNzYsIDEyOCwgNjcsIAorICAgIDY1LCA3NiwgNjcsIDEyOCwgNjcsIDY1LCA3NSwgODIsIDY1LCAxMjgsIDY3LCA2NSwgNjksIDgzLCA4NSwgODIsIDY1LCAKKyAgICAxMjgsIDY3LCA2NSwgNjgsIDg1LCA2NywgNjksIDg1LCA4MywgMTI4LCA2NywgNjUsIDY4LCAxOTMsIDY3LCA2NSwgNjUsIAorICAgIDc4LCA3MSwgMTI4LCA2NywgNjUsIDY1LCA3MywgMTI4LCA2NywgMTkzLCA2NywgNDgsIDUwLCA1MiwgMTI4LCA2NywgNDgsIAorICAgIDUwLCA1MSwgMTI4LCA2NywgNDgsIDUwLCA1MCwgMTI4LCA2NywgNDgsIDUwLCA0OSwgMTI4LCA2NywgNDgsIDUwLCA0OCwgCisgICAgMTI4LCA2NywgNDgsIDQ5LCA1NywgMTI4LCA2NywgNDgsIDQ5LCA1NiwgMTI4LCA2NywgNDgsIDQ5LCA1NSwgMTI4LCA2NywgCisgICAgNDgsIDQ5LCA1NCwgMTI4LCA2NywgNDgsIDQ5LCA1MywgMTI4LCA2NywgNDgsIDQ5LCA1MiwgMTI4LCA2NywgNDgsIDQ5LCAKKyAgICA1MSwgMTI4LCA2NywgNDgsIDQ5LCA1MCwgMTI4LCA2NywgNDgsIDQ5LCA0OSwgMTI4LCA2NywgNDgsIDQ5LCA0OCwgNjUsIAorICAgIDEyOCwgNjcsIDQ4LCA0OSwgNDgsIDEyOCwgNjcsIDQ4LCA0OCwgNTcsIDEyOCwgNjcsIDQ4LCA0OCwgNTYsIDEyOCwgNjcsIAorICAgIDQ4LCA0OCwgNTUsIDEyOCwgNjcsIDQ4LCA0OCwgNTQsIDEyOCwgNjcsIDQ4LCA0OCwgNTMsIDEyOCwgNjcsIDQ4LCA0OCwgCisgICAgNTIsIDEyOCwgNjcsIDQ4LCA0OCwgNTEsIDEyOCwgNjcsIDQ4LCA0OCwgNTAsIDY3LCAxMjgsIDY3LCA0OCwgNDgsIDUwLCAKKyAgICA2NiwgMTI4LCA2NywgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgNjcsIDQ4LCA0OCwgNTAsIDEyOCwgNjcsIDQ4LCA0OCwgNDksIAorICAgIDEyOCwgNjcsIDQ1LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDY3LCA0NSwgNTEsIDU3LCAKKyAgICAxMjgsIDY3LCA0NSwgNDksIDU2LCAxMjgsIDY2LCA5MCwgODUsIDc4LCAxOTksIDY2LCA5MCwgNzIsIDIwMSwgNjYsIDg5LCAKKyAgICA2OSwgNzYsIDc5LCA4MiwgODUsIDgzLCA4MywgNzMsIDY1LCA3OCwgNDUsIDg1LCA3NSwgODIsIDY1LCA3MywgNzgsIDczLCAKKyAgICA2NSwgMjA2LCA2NiwgMjE3LCA2NiwgODgsIDcxLCAxMjgsIDY2LCA4NywgNzMsIDEyOCwgNjYsIDg3LCA2OSwgNjksIDEyOCwgCisgICAgNjYsIDg3LCA2OSwgMTI4LCA2NiwgODcsIDY1LCAxMjgsIDY2LCA4NSwgODUsIDc3LCA3MywgODMsIDcyLCAxMjgsIDY2LCAKKyAgICA4NSwgMjEyLCA2NiwgODUsIDgzLCA4MywgODksIDY5LCA4MiwgODUsIDEyOCwgNjYsIDg1LCA4MiwgMjEzLCA2NiwgODUsIAorICAgIDgyLCA1MCwgMTI4LCA2NiwgODUsIDIxMCwgNjYsIDg1LCA3OSwgODgsIDEyOCwgNjYsIDg1LCA3OSwgODAsIDEyOCwgNjYsIAorICAgIDg1LCA3OSwgMTI4LCA2NiwgODUsIDc3LCA4MCwgMjE3LCA2NiwgODUsIDc2LCA4NSwgNzEsIDEyOCwgNjYsIDg1LCA3NiwgCisgICAgODUsIDE5OSwgNjYsIDg1LCA3NiwgNzYsIDgzLCA2OSwgODksIDY5LCAxMjgsIDY2LCA4NSwgNzYsIDc2LCAyMTEsIDY2LCAKKyAgICA4NSwgNzYsIDc2LCA2OSwgODQsIDEyOCwgNjYsIDg1LCA3NiwgNzYsIDY5LCAyMTIsIDY2LCA4NSwgNzYsIDc2LCAxMjgsIAorICAgIDY2LCA4NSwgNzUsIDg5LCAxMjgsIDY2LCA4NSwgNzIsIDczLCAxOTYsIDY2LCA4NSwgNzEsIDczLCA3OCwgNjksIDgzLCAKKyAgICAxOTcsIDY2LCA4NSwgNjcsIDc1LCA3NiwgNjksIDEyOCwgNjYsIDgzLCA4NCwgNjUsIDgyLCAxMjgsIDY2LCA4MywgNzUsIAorICAgIDg1LCAyMTAsIDY2LCA4MywgNzUsIDY1LCAxNzMsIDY2LCA4MywgNjgsIDg1LCAyMTEsIDY2LCA4MiwgODUsIDgzLCA3MiwgCisgICAgMTI4LCA2NiwgODIsIDg1LCA4MywgMjAwLCA2NiwgODIsIDc5LCA3OCwgOTAsIDY5LCAxMjgsIDY2LCA4MiwgNzksIDc1LCAKKyAgICA2OSwgMjA2LCA2NiwgODIsIDc5LCA2NSwgMTk2LCA2NiwgODIsIDczLCA4MywgODQsIDc2LCA2OSwgMTI4LCA2NiwgODIsIAorICAgIDczLCA2OCwgNzEsIDE5NywgNjYsIDgyLCA2OSwgODYsIDczLCA4MywgMTI4LCA2NiwgODIsIDY5LCA4NiwgNjksIDQ1LCA3NywgCisgICAgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY2LCA4MiwgNjksIDg2LCAxOTcsIDY2LCA4MiwgNjksIDY1LCA4NCwgMjAwLCAKKyAgICA2NiwgODIsIDY5LCA2NSwgNzUsIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIDY2LCA4MiwgNjgsIDE5MywgNjYsIAorICAgIDgyLCA2NSwgNzgsIDY3LCA3MiwgNzMsIDc4LCAxOTksIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDEyOCwgNjYsIDgyLCA2NSwgCisgICAgNzgsIDY3LCAyMDAsIDY2LCA4MiwgNjUsIDc1LCA2NywgNjksIDg0LCAxMjgsIDY2LCA4MiwgNjUsIDY3LCA3NSwgNjksIDg0LCAKKyAgICA2OSwgMTk2LCA2NiwgODIsIDY1LCA2NywgNzUsIDY5LCAyMTIsIDY2LCA4MiwgNjUsIDY3LCA2OSwgMTI4LCA2NiwgODEsIAorICAgIDEyOCwgNjYsIDc5LCA4NywgODQsIDczLCA2OSwgMTI4LCA2NiwgNzksIDg3LCA4NCwgNzMsIDE5NywgNjYsIDc5LCA4NywgCisgICAgMTI4LCA2NiwgNzksIDIxNSwgNjYsIDc5LCA4NSwgNzgsIDY4LCA2NSwgODIsIDIxNywgNjYsIDc5LCA4NCwgODQsIDc5LCAKKyAgICA3NywgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgNjksIDE5NiwgNjYsIDc5LCA4NCwgODQsIDc5LCA3NywgMTI4LCA2NiwgNzksIAorICAgIDg0LCA4NCwgNzksIDIwNSwgNjYsIDc5LCA4MiwgODUsIDg0LCA3OSwgMTI4LCA2NiwgNzksIDc5LCA3NywgNjksIDgyLCA2NSwgCisgICAgNzgsIDcxLCAxMjgsIDY2LCA3OSwgNzgsIDY5LCAxMjgsIDY2LCA3OSwgNzYsIDIxMiwgNjYsIDc5LCA2OCwgODksIDEyOCwgCisgICAgNjYsIDc5LCA2NSwgODIsIDEyOCwgNjYsIDc5LCA2NSwgMTI4LCA2NiwgNzYsIDg1LCA2OSwgMTI4LCA2NiwgNzYsIDc5LCAKKyAgICA3OSwgNjgsIDEyOCwgNjYsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDY2LCA3NiwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjYsIAorICAgIDc2LCA2NSwgNzgsIDc1LCAxMjgsIDY2LCA3NiwgNjUsIDc4LCAyMDMsIDY2LCA3NiwgNjUsIDY4LCAxOTcsIDY2LCA3NiwgCisgICAgNjUsIDY3LCA3NSwgNzAsIDc5LCA3OSwgMjEyLCA2NiwgNzYsIDY1LCA2NywgNzUsIDQ1LCA3NiwgNjksIDg0LCA4NCwgNjksIAorICAgIDIxMCwgNjYsIDc2LCA2NSwgNjcsIDc1LCA0NSwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDY5LCAxOTYsIDY2LCA3NiwgCisgICAgNjUsIDY3LCA3NSwgMTI4LCA2NiwgNzUsIDY1LCAxNzMsIDY2LCA3MywgODQsIDg0LCA2OSwgODIsIDEyOCwgNjYsIDczLCAKKyAgICA4NCwgNzMsIDc4LCAxOTksIDY2LCA3MywgODMsIDc3LCA3MywgNzYsIDc2LCA2NSwgMjAwLCA2NiwgNzMsIDgzLCA3MiwgNzksIAorICAgIDgwLCAxMjgsIDY2LCA3MywgODMsIDY5LCA2NywgODQsIDczLCA3OCwgMTk5LCA2NiwgNzMsIDgzLCA2NSwgNzIsIDEyOCwgCisgICAgNjYsIDczLCA4MiwgODUsIDEyOCwgNjYsIDczLCA4MiwgNzEsIDY1LCAxMjgsIDY2LCA3MywgODIsIDY4LCAxMjgsIDY2LCAKKyAgICA3MywgNzksIDcyLCA2NSwgOTAsIDY1LCA4MiwgMTk2LCA2NiwgNzMsIDc4LCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNjYsIAorICAgIDczLCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2NiwgNzMsIDc4LCA2OCwgNzMsIDEyOCwgNjYsIDczLCA3OCwgNjUsIDgyLCAKKyAgICAyMTcsIDY2LCA3MywgNzYsIDY1LCA2NiwgNzMsIDY1LCAyMDQsIDY2LCA3MywgNzEsIDEyOCwgNjYsIDczLCAxOTksIDY2LCAKKyAgICA3MywgNjksIDg0LCAxMjgsIDY2LCA3MywgNjgsIDY5LCA3OCwgODQsIDY1LCAyMDQsIDY2LCA3MywgNjYsIDc2LCA2OSwgNDUsIAorICAgIDY3LCA4MiwgNjksIDE5NywgNjYsIDczLCA2NiwgMTI4LCA2NiwgMjAxLCA2NiwgNzIsIDg1LCAxMjgsIDY2LCA3MiwgNzksIAorICAgIDc5LCAxMjgsIDY2LCA3MiwgNzksIDEyOCwgNjYsIDcyLCA3MywgMTI4LCA2NiwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgNjYsIAorICAgIDcyLCA2OSwgNjksIDEyOCwgNjYsIDcyLCA2OSwgMTI4LCA2NiwgNzIsIDY1LCA3NywgMTI4LCA2NiwgNzIsIDY1LCAxMjgsIAorICAgIDY2LCA2OSwgODksIDg5LCA2NSwgNzYsIDEyOCwgNjYsIDY5LCA4OCwgMTI4LCA2NiwgNjksIDg2LCA2OSwgODIsIDY1LCA3MSwgCisgICAgNjksIDEyOCwgNjYsIDY5LCA4NCwgODcsIDY5LCA2OSwgNzgsIDEyOCwgNjYsIDY5LCA4NCwgODcsIDY5LCA2OSwgMjA2LCAKKyAgICA2NiwgNjksIDg0LCA3MiwgMTI4LCA2NiwgNjksIDg0LCA2NSwgMTI4LCA2NiwgNjksIDg0LCAxOTMsIDY2LCA2OSwgODQsIAorICAgIDEyOCwgNjYsIDY5LCAyMTIsIDY2LCA2OSwgODMsIDczLCA2OCwgMTk3LCA2NiwgNjksIDgyLCA3NSwgNjUsIDc4LCA2NSwgCisgICAgMjA2LCA2NiwgNjksIDgyLCA2NiwgNjksIDIxMCwgNjYsIDY5LCA4MCwgMTI4LCA2NiwgNjksIDc5LCA4MiwgMTk1LCA2NiwgCisgICAgNjksIDc4LCA5MCwgNjksIDc4LCAxOTcsIDY2LCA2OSwgNzgsIDY4LCA2OSwgMTI4LCA2NiwgNjksIDc4LCA2OCwgMTI4LCAKKyAgICA2NiwgNjksIDIwNiwgNjYsIDY5LCA3NiwgODQsIDEyOCwgNjYsIDY5LCA3NiwgMjEyLCA2NiwgNjksIDc2LCA3OSwgMjE1LCAKKyAgICA2NiwgNjksIDc2LCA3NiwgMTI4LCA2NiwgNjksIDc2LCAyMDQsIDY2LCA2OSwgNzYsIDcxLCA4NCwgNzIsIDc5LCAyMTAsIAorICAgIDY2LCA2OSwgNzMsIDg0LCA3MiwgMTI4LCA2NiwgNjksIDcyLCA3MywgNzgsIDE5NiwgNjYsIDY5LCA3MiwgNjksIDcyLCAKKyAgICAxMjgsIDY2LCA2OSwgNzIsIDY5LCAyMDAsIDY2LCA2OSwgNzIsIDEyOCwgNjYsIDY5LCAyMDAsIDY2LCA2OSwgNzEsIDczLCAKKyAgICA3OCwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNjYsIDY5LCA3MSwgNzMsIDIwNiwgNjYsIDY5LCA3MCwgNzksIDgyLCAxOTcsIAorICAgIDY2LCA2OSwgNjksIDg0LCA2NSwgMTI4LCA2NiwgNjksIDY5LCA3MiwgNzMsIDg2LCA2OSwgMTI4LCA2NiwgNjksIDY5LCA3MiwgCisgICAgMTI4LCA2NiwgNjksIDY5LCAyMDAsIDY2LCA2OSwgNjcsIDY1LCA4NSwgODMsIDY5LCAxMjgsIDY2LCA2OSwgNjUsIDg2LCAKKyAgICA2OSwgMjEwLCA2NiwgNjksIDY1LCA4NCwgMTI4LCA2NiwgNjksIDY1LCA3OCwgMTI4LCA2NiwgNjksIDY1LCA3NywgNjksIAorICAgIDE5NiwgNjYsIDY3LCA2NSwgNjgsIDEyOCwgNjYsIDY3LCA2NSwgMTk2LCA2NiwgNjYsIDg5LCA4OCwgMTI4LCA2NiwgNjYsIAorICAgIDg5LCA4NCwgMTI4LCA2NiwgNjYsIDg5LCA4MCwgMTI4LCA2NiwgNjYsIDg5LCAxMjgsIDY2LCA2NiwgODUsIDg4LCAxMjgsIAorICAgIDY2LCA2NiwgODUsIDg0LCAxMjgsIDY2LCA2NiwgODUsIDgyLCA4OCwgMTI4LCA2NiwgNjYsIDg1LCA4MiwgMTI4LCA2NiwgCisgICAgNjYsIDg1LCA4MCwgMTI4LCA2NiwgNjYsIDg1LCA3OSwgODgsIDEyOCwgNjYsIDY2LCA4NSwgNzksIDgwLCAxMjgsIDY2LCAKKyAgICA2NiwgODUsIDc5LCAxMjgsIDY2LCA2NiwgODUsIDEyOCwgNjYsIDY2LCA3OSwgODgsIDEyOCwgNjYsIDY2LCA3OSwgODQsIAorICAgIDEyOCwgNjYsIDY2LCA3OSwgODAsIDEyOCwgNjYsIDY2LCA3OSwgMTI4LCA2NiwgNjYsIDczLCA4OCwgMTI4LCA2NiwgNjYsIAorICAgIDczLCA4NCwgMTI4LCA2NiwgNjYsIDczLCA4MCwgMTI4LCA2NiwgNjYsIDczLCA2OSwgODgsIDEyOCwgNjYsIDY2LCA3MywgCisgICAgNjksIDg0LCAxMjgsIDY2LCA2NiwgNzMsIDY5LCA4MCwgMTI4LCA2NiwgNjYsIDczLCA2OSwgMTI4LCA2NiwgNjYsIDczLCAKKyAgICAxMjgsIDY2LCA2NiwgNjksIDg4LCAxMjgsIDY2LCA2NiwgNjksIDgwLCAxMjgsIDY2LCA2NiwgNjksIDEyOCwgNjYsIDY2LCAKKyAgICA2NSwgODgsIDEyOCwgNjYsIDY2LCA2NSwgODQsIDEyOCwgNjYsIDY2LCA2NSwgODAsIDEyOCwgNjYsIDY2LCA2NSwgMTI4LCAKKyAgICA2NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NiwgNjUsIDg1LCAxMjgsIDY2LCA2NSwgODQsIDcyLCA4NCwgODUsIAorICAgIDY2LCAxMjgsIDY2LCA2NSwgODQsIDcyLCA2NSwgNzcsIDY1LCA4MywgNjUsIDg0LCAxMjgsIDY2LCA2NSwgODMsIDgzLCA2NSwgCisgICAgMTI4LCA2NiwgNjUsIDgzLCA3MiwgNzUsIDczLCAyMTAsIDY2LCA2NSwgODMsIDcyLCAxMjgsIDY2LCA2NSwgODMsIDY5LCAKKyAgICA2NiwgNjUsIDc2LCA3NiwgMTI4LCA2NiwgNjUsIDgzLCA2OSwgMTI4LCA2NiwgNjUsIDgzLCAxOTcsIDY2LCA2NSwgODIsIAorICAgIDgzLCAxMjgsIDY2LCA2NSwgODIsIDgyLCA3MywgNjksIDgyLCAxMjgsIDY2LCA2NSwgODIsIDgyLCA2OSwgNzUsIDcyLCAKKyAgICAxMjgsIDY2LCA2NSwgODIsIDgyLCA2OSwgNjksIDEyOCwgNjYsIDY1LCA4MiwgODIsIDY5LCAxOTcsIDY2LCA2NSwgODIsIAorICAgIDc2LCA3MywgNzgsIDY5LCAxMjgsIDY2LCA2NSwgODIsIDc2LCA2OSwgODksIDEyOCwgNjYsIDY1LCA4MiwgNzMsIDg5LCA3OSwgCisgICAgNzksIDgzLCA2NSwgNzgsIDEyOCwgNjYsIDY1LCA4MiwgNjUsIDUwLCAxMjgsIDY2LCA2NSwgMjEwLCA2NiwgNjUsIDc4LCAKKyAgICA4NCwgNzksIDY3LCAxMjgsIDY2LCA2NSwgNzgsIDIwMywgNjYsIDY1LCA3OCwgNjgsIDEyOCwgNjYsIDY1LCA3OCwgNTAsIAorICAgIDEyOCwgNjYsIDY1LCA3OCwgMTc4LCA2NiwgNjUsIDc3LCA2NiwgNzksIDc5LCA4MywgMTI4LCA2NiwgNjUsIDc3LCA2NiwgCisgICAgNzksIDc5LCAxMjgsIDY2LCA2NSwgNzYsIDg1LCA2OCwgNjUsIDEyOCwgNjYsIDY1LCA3NiwgNzYsIDc5LCAyMTIsIDY2LCAKKyAgICA2NSwgNzYsIDc2LCA3OSwgNzksIDc4LCA0NSwgODMsIDgwLCA3OSwgNzUsIDY5LCAxOTYsIDY2LCA2NSwgNzYsIDY1LCA3MSwgCisgICAgMTI4LCA2NiwgNjUsIDc2LCAxMjgsIDY2LCA2NSwgMjA0LCA2NiwgNjUsIDczLCA4MiwgNzUsIDY1LCA3OCwgMTI4LCA2NiwgCisgICAgNjUsIDczLCA3NywgNjUsIDczLCAxMjgsIDY2LCA2NSwgNzIsIDg0LCAxMjgsIDY2LCA2NSwgNzIsIDczLCA4MiwgNzEsIDc5LCAKKyAgICA3NywgODUsIDc1LCA3MiwgNjUsIDEyOCwgNjYsIDY1LCA3MiwgNjUsIDgyLCA1MCwgMTI4LCA2NiwgNjUsIDcxLCA2NSwgCisgICAgMTI4LCA2NiwgNjUsIDcxLCA1MSwgMTI4LCA2NiwgNjUsIDE5OSwgNjYsIDY1LCA2OCwgNzEsIDY5LCA4MiwgMTI4LCA2NiwgCisgICAgNjUsIDY4LCAxMjgsIDY2LCA2NSwgNjcsIDc1LCA4MywgODAsIDY1LCA2NywgNjksIDEyOCwgNjYsIDY1LCA2NywgNzUsIDgzLCAKKyAgICA3NiwgNjUsIDgzLCA3MiwgMTI4LCA2NiwgNjUsIDY3LCA3NSwgODMsIDc2LCA2NSwgODMsIDIwMCwgNjYsIDY1LCA2NywgNzUsIAorICAgIDQ1LCA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNjYsIDY1LCA2NywgNzUsIDEyOCwgNjYsIDY1LCA2NywgMjAzLCA2NiwgCisgICAgNjUsIDY1LCA4MiwgNjksIDgyLCA4NSwgMTI4LCA2NiwgNTEsIDQ4LCA1MywgMTI4LCA2NiwgNTAsIDUzLCA1NywgMTI4LCAKKyAgICA2NiwgNTAsIDUzLCA1NiwgMTI4LCA2NiwgNTAsIDUzLCA1NSwgMTI4LCA2NiwgNTAsIDUzLCA1NCwgMTI4LCA2NiwgNTAsIAorICAgIDUzLCA1MywgMTI4LCA2NiwgNTAsIDUzLCAxODAsIDY2LCA1MCwgNTMsIDUxLCAxMjgsIDY2LCA1MCwgNTMsIDUwLCAxMjgsIAorICAgIDY2LCA1MCwgNTMsIDQ5LCAxMjgsIDY2LCA1MCwgNTMsIDQ4LCAxMjgsIDY2LCA1MCwgNTIsIDU3LCAxMjgsIDY2LCA1MCwgCisgICAgNTIsIDU2LCAxMjgsIDY2LCA1MCwgNTIsIDE4MywgNjYsIDUwLCA1MiwgNTQsIDEyOCwgNjYsIDUwLCA1MiwgNTMsIDEyOCwgCisgICAgNjYsIDUwLCA1MiwgMTc5LCA2NiwgNTAsIDUyLCAxNzgsIDY2LCA1MCwgNTIsIDE3NywgNjYsIDUwLCA1MiwgMTc2LCA2NiwgCisgICAgNTAsIDUxLCA1NCwgMTI4LCA2NiwgNTAsIDUxLCA1MiwgMTI4LCA2NiwgNTAsIDUxLCAxNzksIDY2LCA1MCwgNTEsIDUwLCAKKyAgICAxMjgsIDY2LCA1MCwgNTEsIDE3NywgNjYsIDUwLCA1MSwgMTc2LCA2NiwgNTAsIDUwLCA1NywgMTI4LCA2NiwgNTAsIDUwLCAKKyAgICA1NiwgMTI4LCA2NiwgNTAsIDUwLCA1NSwgMTI4LCA2NiwgNTAsIDUwLCA1NCwgMTI4LCA2NiwgNTAsIDUwLCAxODEsIDY2LCAKKyAgICA1MCwgNTAsIDUwLCAxMjgsIDY2LCA1MCwgNTAsIDQ5LCAxMjgsIDY2LCA1MCwgNTAsIDE3NiwgNjYsIDUwLCA0OSwgNTcsIAorICAgIDEyOCwgNjYsIDUwLCA0OSwgNTYsIDEyOCwgNjYsIDUwLCA0OSwgNTUsIDEyOCwgNjYsIDUwLCA0OSwgNTQsIDEyOCwgNjYsIAorICAgIDUwLCA0OSwgNTMsIDEyOCwgNjYsIDUwLCA0OSwgNTIsIDEyOCwgNjYsIDUwLCA0OSwgNTEsIDEyOCwgNjYsIDUwLCA0OSwgCisgICAgNTAsIDEyOCwgNjYsIDUwLCA0OSwgNDksIDEyOCwgNjYsIDUwLCA0OSwgNDgsIDEyOCwgNjYsIDUwLCA0OCwgNTcsIDEyOCwgCisgICAgNjYsIDUwLCA0OCwgNTYsIDEyOCwgNjYsIDUwLCA0OCwgNTUsIDEyOCwgNjYsIDUwLCA0OCwgNTQsIDEyOCwgNjYsIDUwLCAKKyAgICA0OCwgNTMsIDEyOCwgNjYsIDUwLCA0OCwgNTIsIDEyOCwgNjYsIDUwLCA0OCwgNTEsIDEyOCwgNjYsIDUwLCA0OCwgNTAsIAorICAgIDEyOCwgNjYsIDUwLCA0OCwgNDksIDEyOCwgNjYsIDUwLCA0OCwgNDgsIDEyOCwgNjYsIDQ5LCA1NywgMTc3LCA2NiwgNDksIAorICAgIDU3LCA0OCwgMTI4LCA2NiwgNDksIDU2LCA1NywgMTI4LCA2NiwgNDksIDU2LCA1MywgMTI4LCA2NiwgNDksIDU2LCA1MiwgCisgICAgMTI4LCA2NiwgNDksIDU2LCA1MSwgMTI4LCA2NiwgNDksIDU2LCA1MCwgMTI4LCA2NiwgNDksIDU2LCA0OSwgMTI4LCA2NiwgCisgICAgNDksIDU2LCA0OCwgMTI4LCA2NiwgNDksIDU1LCA1NywgMTI4LCA2NiwgNDksIDU1LCA1NiwgMTI4LCA2NiwgNDksIDU1LCAKKyAgICA1NSwgMTI4LCA2NiwgNDksIDU1LCAxODIsIDY2LCA0OSwgNTUsIDUyLCAxMjgsIDY2LCA0OSwgNTUsIDE3OSwgNjYsIDQ5LCAKKyAgICA1NSwgNTAsIDEyOCwgNjYsIDQ5LCA1NSwgNDksIDEyOCwgNjYsIDQ5LCA1NSwgNDgsIDEyOCwgNjYsIDQ5LCA1NCwgNTcsIAorICAgIDEyOCwgNjYsIDQ5LCA1NCwgNTYsIDEyOCwgNjYsIDQ5LCA1NCwgNTUsIDEyOCwgNjYsIDQ5LCA1NCwgNTQsIDEyOCwgNjYsIAorICAgIDQ5LCA1NCwgNTMsIDEyOCwgNjYsIDQ5LCA1NCwgNTIsIDEyOCwgNjYsIDQ5LCA1NCwgMTc5LCA2NiwgNDksIDU0LCAxNzgsIAorICAgIDY2LCA0OSwgNTQsIDQ5LCAxMjgsIDY2LCA0OSwgNTQsIDQ4LCAxMjgsIDY2LCA0OSwgNTMsIDE4NSwgNjYsIDQ5LCA1MywgCisgICAgNTYsIDEyOCwgNjYsIDQ5LCA1MywgNTUsIDEyOCwgNjYsIDQ5LCA1MywgMTgyLCA2NiwgNDksIDUzLCA1MywgMTI4LCA2NiwgCisgICAgNDksIDUzLCA1MiwgMTI4LCA2NiwgNDksIDUzLCA1MSwgMTI4LCA2NiwgNDksIDUzLCA1MCwgMTI4LCA2NiwgNDksIDUzLCAKKyAgICAxNzcsIDY2LCA0OSwgNTMsIDQ4LCAxMjgsIDY2LCA0OSwgNTIsIDU0LCAxMjgsIDY2LCA0OSwgNTIsIDE4MSwgNjYsIDQ5LCAKKyAgICA1MiwgNTAsIDEyOCwgNjYsIDQ5LCA1MiwgMTc3LCA2NiwgNDksIDUyLCAxNzYsIDY2LCA0OSwgNTEsIDE4MSwgNjYsIDQ5LCAKKyAgICA1MSwgMTc5LCA2NiwgNDksIDUxLCA1MCwgMTI4LCA2NiwgNDksIDUxLCAxNzcsIDY2LCA0OSwgNTEsIDE3NiwgNjYsIDQ5LCAKKyAgICA1MCwgMTg0LCA2NiwgNDksIDUwLCAxODMsIDY2LCA0OSwgNTAsIDE4MSwgNjYsIDQ5LCA1MCwgMTc5LCA2NiwgNDksIDUwLCAKKyAgICAxNzgsIDY2LCA0OSwgNTAsIDE3NywgNjYsIDQ5LCA1MCwgMTc2LCA2NiwgNDksIDQ4LCA1NywgMjA1LCA2NiwgNDksIDQ4LCAKKyAgICA1NywgMTk4LCA2NiwgNDksIDQ4LCA1NiwgMjA1LCA2NiwgNDksIDQ4LCA1NiwgMTk4LCA2NiwgNDksIDQ4LCA1NSwgMjA1LCAKKyAgICA2NiwgNDksIDQ4LCA1NSwgMTk4LCA2NiwgNDksIDQ4LCA1NCwgMjA1LCA2NiwgNDksIDQ4LCA1NCwgMTk4LCA2NiwgNDksIAorICAgIDQ4LCA1MywgMjA1LCA2NiwgNDksIDQ4LCA1MywgMTk4LCA2NiwgNDksIDQ4LCAxODEsIDY2LCA0OSwgNDgsIDE4MCwgNjYsIAorICAgIDQ5LCA0OCwgMTc4LCA2NiwgNDksIDQ4LCAxNzYsIDY2LCA0OCwgNTcsIDE3NywgNjYsIDQ4LCA1NywgMTc2LCA2NiwgNDgsIAorICAgIDU2LCA1NywgMTI4LCA2NiwgNDgsIDU2LCAxODMsIDY2LCA0OCwgNTYsIDU0LCAxMjgsIDY2LCA0OCwgNTYsIDE4MSwgNjYsIAorICAgIDQ4LCA1NiwgNTEsIDEyOCwgNjYsIDQ4LCA1NiwgNTAsIDEyOCwgNjYsIDQ4LCA1NiwgMTc3LCA2NiwgNDgsIDU2LCAxNzYsIAorICAgIDY2LCA0OCwgNTUsIDU3LCAxMjgsIDY2LCA0OCwgNTUsIDE4NCwgNjYsIDQ4LCA1NSwgMTgzLCA2NiwgNDgsIDU1LCAxODIsIAorICAgIDY2LCA0OCwgNTUsIDE4MSwgNjYsIDQ4LCA1NSwgMTgwLCA2NiwgNDgsIDU1LCAxNzksIDY2LCA0OCwgNTUsIDE3OCwgNjYsIAorICAgIDQ4LCA1NSwgMTc3LCA2NiwgNDgsIDU1LCAxNzYsIDY2LCA0OCwgNTQsIDE4NSwgNjYsIDQ4LCA1NCwgMTg0LCA2NiwgNDgsIAorICAgIDU0LCAxODMsIDY2LCA0OCwgNTQsIDE4MiwgNjYsIDQ4LCA1NCwgMTgxLCA2NiwgNDgsIDU0LCA1MiwgMTI4LCA2NiwgNDgsIAorICAgIDU0LCA1MSwgMTI4LCA2NiwgNDgsIDU0LCAxNzgsIDY2LCA0OCwgNTQsIDE3NywgNjYsIDQ4LCA1NCwgMTc2LCA2NiwgNDgsIAorICAgIDUzLCAxODUsIDY2LCA0OCwgNTMsIDE4NCwgNjYsIDQ4LCA1MywgMTgzLCA2NiwgNDgsIDUzLCA1NCwgMTI4LCA2NiwgNDgsIAorICAgIDUzLCAxODEsIDY2LCA0OCwgNTMsIDE4MCwgNjYsIDQ4LCA1MywgMTc5LCA2NiwgNDgsIDUzLCAxNzgsIDY2LCA0OCwgNTMsIAorICAgIDE3NywgNjYsIDQ4LCA1MywgMTc2LCA2NiwgNDgsIDUyLCA1NywgMTI4LCA2NiwgNDgsIDUyLCAxODQsIDY2LCA0OCwgNTIsIAorICAgIDU1LCAxMjgsIDY2LCA0OCwgNTIsIDE4MiwgNjYsIDQ4LCA1MiwgMTgxLCA2NiwgNDgsIDUyLCAxODAsIDY2LCA0OCwgNTIsIAorICAgIDE3OSwgNjYsIDQ4LCA1MiwgMTc4LCA2NiwgNDgsIDUyLCAxNzcsIDY2LCA0OCwgNTIsIDE3NiwgNjYsIDQ4LCA1MSwgMTg1LCAKKyAgICA2NiwgNDgsIDUxLCAxODQsIDY2LCA0OCwgNTEsIDE4MywgNjYsIDQ4LCA1MSwgMTgyLCA2NiwgNDgsIDUxLCA1MiwgMTI4LCAKKyAgICA2NiwgNDgsIDUxLCAxNzksIDY2LCA0OCwgNTEsIDE3OCwgNjYsIDQ4LCA1MSwgMTc3LCA2NiwgNDgsIDUxLCAxNzYsIDY2LCAKKyAgICA0OCwgNTAsIDE4NSwgNjYsIDQ4LCA1MCwgMTg0LCA2NiwgNDgsIDUwLCAxODMsIDY2LCA0OCwgNTAsIDE4MiwgNjYsIDQ4LCAKKyAgICA1MCwgMTgxLCA2NiwgNDgsIDUwLCAxODAsIDY2LCA0OCwgNTAsIDE3OSwgNjYsIDQ4LCA1MCwgNTAsIDEyOCwgNjYsIDQ4LCAKKyAgICA1MCwgMTc3LCA2NiwgNDgsIDUwLCAxNzYsIDY2LCA0OCwgNDksIDU3LCAxMjgsIDY2LCA0OCwgNDksIDU2LCAxMjgsIDY2LCAKKyAgICA0OCwgNDksIDE4MywgNjYsIDQ4LCA0OSwgMTgyLCA2NiwgNDgsIDQ5LCAxODEsIDY2LCA0OCwgNDksIDE4MCwgNjYsIDQ4LCAKKyAgICA0OSwgMTc5LCA2NiwgNDgsIDQ5LCAxNzgsIDY2LCA0OCwgNDksIDE3NywgNjYsIDQ4LCA0OSwgMTc2LCA2NiwgNDgsIDQ4LCAKKyAgICA1NywgMTI4LCA2NiwgNDgsIDQ4LCAxODUsIDY2LCA0OCwgNDgsIDU2LCAxMjgsIDY2LCA0OCwgNDgsIDE4NCwgNjYsIDQ4LCAKKyAgICA0OCwgNTUsIDEyOCwgNjYsIDQ4LCA0OCwgMTgzLCA2NiwgNDgsIDQ4LCA1NCwgMTI4LCA2NiwgNDgsIDQ4LCAxODIsIDY2LCAKKyAgICA0OCwgNDgsIDUzLCA2NSwgMTI4LCA2NiwgNDgsIDQ4LCA1MywgMTI4LCA2NiwgNDgsIDQ4LCAxODEsIDY2LCA0OCwgNDgsIAorICAgIDUyLCAxMjgsIDY2LCA0OCwgNDgsIDE4MCwgNjYsIDQ4LCA0OCwgNTEsIDEyOCwgNjYsIDQ4LCA0OCwgMTc5LCA2NiwgNDgsIAorICAgIDQ4LCA1MCwgMTI4LCA2NiwgNDgsIDQ4LCAxNzgsIDY2LCA0OCwgNDgsIDQ5LCAxMjgsIDY2LCA0OCwgNDgsIDE3NywgNjUsIAorICAgIDkwLCA4NSwgMTI4LCA2NSwgODksIDY5LCAyMTAsIDY1LCA4OSwgNjYsIDEyOCwgNjUsIDg5LCA2NSwgNzIsIDEyOCwgNjUsIAorICAgIDg4LCA2OSwgMTI4LCA2NSwgODcsIDY5LCAxMjgsIDY1LCA4NiwgNjksIDgzLCA4NCwgNjUsIDIwNiwgNjUsIDg2LCA2OSwgCisgICAgODIsIDY1LCA3MSwgMTk3LCA2NSwgODYsIDY1LCA3NSwgODIsIDY1LCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg5LCA2NSwgMTI4LCAKKyAgICA2NSwgODYsIDY1LCA3MSwgODIsIDY1LCA3MiwgNjUsIDEyOCwgNjUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIAorICAgIDg1LCA4NCwgODUsIDc3LCA3OCwgMTI4LCA2NSwgODUsIDgzLCA4NCwgODIsIDY1LCAyMDQsIDY1LCA4NSwgODIsIDY1LCA3NywgCisgICAgNjUsIDkwLCA2OCwgNjUsIDY1LCA3MiwgNjUsIDEyOCwgNjUsIDg1LCA4MiwgNjUsIDc3LCA2NSwgOTAsIDY4LCA2NSwgNjUsIAorICAgIDQ1LCA1MCwgMTI4LCA2NSwgODUsIDgyLCA2NSwgNzcsIDY1LCA5MCwgNjgsIDY1LCA2NSwgMTI4LCA2NSwgODUsIDc4LCA3OCwgCisgICAgMTI4LCA2NSwgODUsIDcxLCA4NSwgODMsIDg0LCAxMjgsIDY1LCA4NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA2NSwgODQsIDczLCAKKyAgICA3OSwgMjA2LCA2NSwgODUsIDY5LCAxMjgsIDY1LCA4NCwgODQsIDczLCAxOTUsIDY1LCA4NCwgODQsIDcyLCA2NSwgNjcsIAorICAgIDY1LCA3OCwgMTI4LCA2NSwgODQsIDg0LCA2OSwgNzgsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA4NCwgODQsIDY1LCAKKyAgICAyMDMsIDY1LCA4NCwgNzksIDIwNSwgNjUsIDg0LCA3OCwgNjUsIDIwMCwgNjUsIDg0LCA3NywgNjUsIDY1LCA4NSwgMTI4LCAKKyAgICA2NSwgODQsIDczLCA4OSwgNjUsIDEyOCwgNjUsIDg0LCA3MiwgNjUsIDgyLCA4NiwgNjUsIDg2LCA2OSwgNjgsIDczLCAxOTUsIAorICAgIDY1LCA4NCwgNzIsIDY1LCA4MCwgNjUsIDgzLCA2NywgNjUsIDIwNiwgNjUsIDgzLCA4OSwgODUsIDgyLCAxOTMsIDY1LCA4MywgCisgICAgODksIDc3LCA4MCwgODQsIDc5LCA4NCwgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDY1LCA4MywgODQsIDgyLCA3OSwgNzYsIAorICAgIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCA4MywgNzcsIDEyOCwgNjUsIDgzLCA4NCwgCisgICAgNjksIDgyLCA3MywgODMsIDc1LCAyMTEsIDY1LCA4MywgODQsIDY5LCA4MiwgNzMsIDgzLCA3NSwgMTI4LCA2NSwgODMsIDg0LCAKKyAgICA2OSwgODIsIDczLCA4MywgMjAzLCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCA4MywgNjcsIDg1LCA4MywgMTI4LCA2NSwgODMsIAorICAgIDgzLCA4OSwgODIsIDczLCA2NSwgMjA2LCA2NSwgODMsIDgzLCA2OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA4MywgCisgICAgODAsIDczLCA4MiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgODMsIDgwLCA2OSwgODIsIDEyOCwgNjUsIDgzLCA3MiwgNzEsIDY1LCAKKyAgICA2NiwgMTI4LCA2NSwgODMsIDcyLCA1NywgMTI4LCA2NSwgODMsIDcyLCAxNzgsIDY1LCA4MywgNjcsIDY5LCA3OCwgODQsIAorICAgIDEyOCwgNjUsIDgzLCA2NywgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY1LCA4MywgNjUsIDc2LCA1MCwgMTI4LCA2NSwgCisgICAgODIsIDg1LCA3MiwgODUsIDY1LCAxMjgsIDY1LCA4MiwgODQsIDY1LCA2NiwgMTk3LCA2NSwgODIsIDgzLCA2OSwgNzksIDgzLCAKKyAgICAxMjgsIDY1LCA4MiwgODMsIDY5LCA3OSwgMjExLCA2NSwgODIsIDgyLCA3OSwgODcsIDgzLCAxMjgsIDY1LCA4MiwgODIsIAorICAgIDc5LCA4NywgNzIsIDY5LCA2NSwgNjgsIDEyOCwgNjUsIDgyLCA4MiwgNzksIDg3LCA3MiwgNjksIDY1LCAxOTYsIDY1LCA4MiwgCisgICAgODIsIDc5LCA4NywgNDUsIDg0LCA2NSwgNzMsIDc2LCAxMjgsIDY1LCA4MiwgODIsIDczLCA4NiwgNjksIDEyOCwgNjUsIDgyLCAKKyAgICA4MiwgNjUsIDg5LCAxMjgsIDY1LCA4MiwgODAsIDY5LCA3MSwgNzEsIDczLCA2NSwgODQsIDIwNywgNjUsIDgyLCA3OSwgODUsIAorICAgIDgzLCA3MywgNzgsIDE5OSwgNjUsIDgyLCA3OSwgODUsIDgyLCAxOTMsIDY1LCA4MiwgNzksIDg1LCA3OCwgNjgsIDQ1LCA4MCwgCisgICAgODIsIDc5LCA3MCwgNzMsIDc2LCA2OSwgMTI4LCA2NSwgODIsIDc5LCA4NSwgNzgsIDE5NiwgNjUsIDgyLCA3NywgODksIAorICAgIDEyOCwgNjUsIDgyLCA3NywgNzksIDg1LCA4MiwgMTI4LCA2NSwgODIsIDIwNSwgNjUsIDgyLCA3NiwgNjUsIDg1LCAxOTksIAorICAgIDY1LCA4MiwgNzUsIDg0LCA3MywgNzUsIDIwNywgNjUsIDgyLCA3NSwgNjUsIDY2LCAxMjgsIDY1LCA4MiwgNzUsIDY1LCA2NSwgCisgICAgNzgsIDg1LCAxMjgsIDY1LCA4MiwgNzMsIDgzLCA4NCwgNjksIDgyLCA2NSwgMTI4LCA2NSwgODIsIDczLCA4MywgODQsIDY5LCAKKyAgICA4MiwgMTkzLCA2NSwgODIsIDczLCA2OSwgODMsIDEyOCwgNjUsIDgyLCA3MSwgNzksIDg0LCA2OSwgODIsIDczLCAxMjgsIAorICAgIDY1LCA4MiwgNzEsIDc5LCA4MywgODksIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzksIDc4LCAxMjgsIDY1LCA4MiwgNzEsIDczLCAKKyAgICAxMjgsIDY1LCA4MiwgNjksIDgwLCA2NSwgMTI4LCA2NSwgODIsIDY4LCA3MiwgNjUsIDg2LCA3MywgODMsIDY1LCA4MiwgNzEsIAorICAgIDY1LCAxMjgsIDY1LCA4MiwgNjcsIDcyLCA2NSwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgODIsIDY3LCA3MiwgNjUsIDczLCA3OSwgCisgICAgMjA2LCA2NSwgODIsIDY3LCA3MiwgNjUsIDczLCAxOTUsIDY1LCA4MiwgNjcsIDIwMCwgNjUsIDgyLCA2NywgMTI4LCA2NSwgCisgICAgODIsIDE5NSwgNjUsIDgyLCA2NSwgNzcsIDY1LCA3MywgMTk1LCA2NSwgODIsIDY1LCA2OSwgNjUsIDY5LCAxMjgsIDY1LCAKKyAgICA4MiwgNjUsIDY5LCA2NSwgNDUsIDg1LCAxMjgsIDY1LCA4MiwgNjUsIDY5LCA2NSwgNDUsIDczLCAxMjgsIDY1LCA4MiwgNjUsIAorICAgIDY5LCA2NSwgNDUsIDY5LCA3OSwgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA2OSwgMTI4LCA2NSwgODIsIDY1LCA2OSwgCisgICAgNjUsIDQ1LCA2NSwgMTI4LCA2NSwgODIsIDY1LCA2OCwgMTI4LCA2NSwgODIsIDY1LCAxOTYsIDY1LCA4MiwgNjUsIDY2LCAKKyAgICA3MywgNjcsIDQ1LCA3MywgNzgsIDY4LCA3MywgMTk1LCA2NSwgODIsIDY1LCA2NiwgNzMsIDY1LCAyMDYsIDY1LCA4MiwgNDUsIAorICAgIDgyLCA2NSwgNzIsIDc3LCA2NSwgMjA2LCA2NSwgODIsIDQ1LCA4MiwgNjUsIDcyLCA2OSwgNjksIDc3LCAxMjgsIDY1LCA4MSwgCisgICAgODUsIDY1LCA4MiwgNzMsIDg1LCA4MywgMTI4LCA2NSwgODAsIDg1LCAyMDYsIDY1LCA4MCwgODIsIDczLCA3NiwgMTI4LCAKKyAgICA2NSwgODAsIDgwLCA4MiwgNzksIDg4LCA3MywgNzcsIDY1LCA4NCwgNjksIDc2LCAyMTcsIDY1LCA4MCwgODAsIDgyLCA3OSwgCisgICAgODgsIDczLCA3NywgNjUsIDg0LCA2OSwgMTI4LCA2NSwgODAsIDgwLCA4MiwgNzksIDY1LCA2NywgNzIsIDY5LCAyMTEsIDY1LCAKKyAgICA4MCwgODAsIDgyLCA3OSwgNjUsIDY3LCA3MiwgMTI4LCA2NSwgODAsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgCisgICAgNzgsIDEyOCwgNjUsIDgwLCA3OSwgODQsIDcyLCA2OSwgODMsIDEyOCwgNjUsIDgwLCA3OSwgODQsIDcyLCA2OSwgNzcsIDY1LCAKKyAgICAxMjgsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIDc5LCA4MCwgNzIsIDY5LCAxMjgsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIAorICAgIDc5LCA3MCwgNzksIDgzLCAxMjgsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIDc5LCA3MCwgNzksIDIxMSwgNjUsIDgwLCA3OSwgCisgICAgODMsIDg0LCA4MiwgNzksIDcwLCA3OSwgMjAxLCA2NSwgODAsIDc5LCA2OCwgNjksIDg4LCA3MywgNjUsIDEyOCwgNjUsIDgwLCAKKyAgICA3OSwgNjgsIDY5LCA4MiwgNzcsIDE5MywgNjUsIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCA2NSwgODAsIDc2LCAyMDEsIAorICAgIDY1LCA4MCwgNzMsIDc4LCAxMjgsIDY1LCA4MCwgNjksIDgzLCAyMDcsIDY1LCA4MCwgNjUsIDgyLCA4NCwgMTI4LCA2NSwgCisgICAgODAsIDY1LCA2NSwgODQsIDc5LCAxMjgsIDY1LCA3OCwgODUsIDgzLCA4NiwgNjUsIDgyLCA2NSwgODksIDY1LCAxMjgsIDY1LCAKKyAgICA3OCwgODUsIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzgsIDg1LCA4MywgODYsIDY1LCA4MiwgMTkzLCA2NSwgNzgsIAorICAgIDg1LCA2OCwgNjUsIDg0LCA4NCwgNjUsIDEyOCwgNjUsIDc4LCA4NSwgNjgsIDY1LCA4NCwgODQsIDE5MywgNjUsIDc4LCA4NCwgCisgICAgNzMsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNzgsIDg0LCA3MywgNzUsIAorICAgIDY5LCA3OCwgNzksIDc3LCA2NSwgMTI4LCA2NSwgNzgsIDg0LCA3MywgNzUsIDY5LCA3OCwgNzksIDc1LCA4OSwgNzYsIDczLCAKKyAgICA4MywgNzcsIDY1LCAxMjgsIDY1LCA3OCwgODQsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDEyOCwgNjUsIDc4LCA4NCwgNzMsIAorICAgIDY3LCA3NiwgNzksIDY3LCA3NSwgODcsIDczLCA4MywgNjksIDQ1LCA4MiwgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDY1LCAKKyAgICA3OCwgODQsIDczLCA2NywgNzYsIDc5LCA2NywgNzUsIDg3LCA3MywgODMsIDE5NywgNjUsIDc4LCA4NCwgNjUsIDgyLCA3MSwgCisgICAgNzksIDc3LCA4NSwgNzUsIDcyLCA2NSwgMTI4LCA2NSwgNzgsIDgzLCA4NSwgMjE4LCA2NSwgNzgsIDgzLCA3MiwgNjksIAorICAgIDEyOCwgNjUsIDc4LCA4MCwgNjksIDY1LCAxMjgsIDY1LCA3OCwgMjA3LCA2NSwgNzgsIDc4LCA4NSwgNzMsIDg0LCAyMTcsIAorICAgIDY1LCA3OCwgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDc4LCA3OCwgNjUsIDY1LCA4NSwgMTI4LCA2NSwgCisgICAgNzgsIDc1LCA3MiwgMTI4LCA2NSwgNzgsIDcyLCA4NSwgMTI4LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCA4MiwgMTI4LCAKKyAgICA2NSwgNzgsIDcxLCA4MywgODQsIDgyLCA3OSwgMjA1LCA2NSwgNzgsIDcxLCA3NSwgNzIsIDY1LCA3OCwgNzUsIDcyLCA4NSwgCisgICAgMTI4LCA2NSwgNzgsIDcxLCA2OSwgNjgsIDEyOCwgNjUsIDc4LCA2OCwgNjUsIDgwLCAxMjgsIDY1LCA3OCwgNjcsIDc5LCAKKyAgICA4MiwgNjUsIDEyOCwgNjUsIDc4LCA2NywgNzIsIDc5LCA4MiwgMTI4LCA2NSwgNzgsIDY1LCA4NCwgODIsIDczLCA2NywgNzIsIAorICAgIDczLCA4MywgNzcsIDY1LCAxMjgsIDY1LCA3OCwgNjUsIDgwLCAxMjgsIDY1LCA3NywgODAsIDgzLCAxMjgsIDY1LCA3NywgCisgICAgODAsIDY5LCA4MiwgODMsIDY1LCA3OCwgNjgsIDEyOCwgNjUsIDc3LCA3OSwgODUsIDc4LCAyMTIsIDY1LCA3NywgNjYsIAorICAgIDE5MywgNjUsIDc3LCA2NSwgODIsIDEyOCwgNjUsIDc3LCA2NSwgMjEwLCA2NSwgNzcsIDY1LCA3NiwgNzEsIDY1LCA3NywgCisgICAgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDc2LCA4NiwgNjksIDc5LCA3NiwgNjUsIDIxMCwgNjUsIDc2LCA4NCwgNjksIDgyLCAKKyAgICA3OCwgNjUsIDg0LCA3MywgODYsIDE5NywgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIAorICAgIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIDY1LCA3NiwgODQsIDY1LCAxMjgsIDY1LCA3NiwgODAsIDcyLCA2NSwgCisgICAgMTI4LCA2NSwgNzYsIDgwLCA3MiwgMTkzLCA2NSwgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDY1LCAKKyAgICA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNjUsIDc2LCA4MCwgNjUsIDEyOCwgNjUsIDc2LCA3NywgNzksIAorICAgIDgzLCAyMTIsIDY1LCA3NiwgNzYsIDc5LCAxMjgsIDY1LCA3NiwgNzYsIDczLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgCisgICAgNzYsIDc2LCAyMDEsIDY1LCA3NiwgNzYsIDY1LCAyMDAsIDY1LCA3NiwgNzMsIDcxLCA3OCwgNjksIDE5NiwgNjUsIDc2LCAKKyAgICA3MywgNzAsIDg1LCAxMjgsIDY1LCA3NiwgNzEsIDczLCAyMTgsIDY1LCA3NiwgNzAsIDY1LCAxMjgsIDY1LCA3NiwgNjksIAorICAgIDg1LCAyMTIsIDY1LCA3NiwgNjksIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDY5LCA3NywgNjYsIDczLCA2NywgMTI4LCA2NSwgCisgICAgNzYsIDY5LCA3MCwgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDY5LCAxMjgsIDY1LCA3NiwgNjUsIDg5LCA3MiwgMTk3LCAKKyAgICA2NSwgNzYsIDY1LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCA0NSwgNzYsIDY1LCA3NSwgODUsIDc4LCA2NSwgMTI4LCA2NSwgNzUsIAorICAgIDg0LCA3MywgNjksIDgzLCA2OSwgNzYsIDgzLCA3NSwgNjUsIDY2LCAxMjgsIDY1LCA3NSwgNzIsIDc3LCA3MywgNzcsIDczLCAKKyAgICAxOTUsIDY1LCA3NSwgNjYsIDY1LCAyMTAsIDY1LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzUsIDY1LCA4MiwgMTkzLCAKKyAgICA2NSwgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzMsIDg2LCA3MywgNzYsIDczLCAyMDMsIDY1LCA3MywgODQsIAorICAgIDc5LCAyMDYsIDY1LCA3MywgODIsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA2NSwgNzMsIDc4LCA3OCwgMTI4LCA2NSwgCisgICAgNzMsIDc2LCA3NywgMTI4LCA2NSwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3MywgNzIsIDg2LCA4NSwgODMsIAorICAgIDEyOCwgNjUsIDcyLCA4MywgNjgsIDY1LCAxMjgsIDY1LCA3MiwgODMsIDY1LCAxMjgsIDY1LCA3MiwgNjUsIDcxLCA3MSwgCisgICAgNjUsIDIxMCwgNjUsIDcyLCA2NSwgNjgsIDEyOCwgNjUsIDcxLCA4NSwgNzgsIDcxLCAxMjgsIDY1LCA3MSwgNzksIDcxLCAKKyAgICAyMDEsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNzEsIDcxLCA4MiwgNjUsIAorICAgIDg2LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA3MSwgNjUsIDczLCA3OCwgMTI4LCA2NSwgNzAsIDg0LCA2OSwgMjEwLCA2NSwgCisgICAgNzAsIDgzLCA2NSwgNjUsIDgxLCAxMjgsIDY1LCA3MCwgODIsIDczLCA2NywgNjUsIDIwNiwgNjUsIDcwLCA3OSwgODIsIDY5LCAKKyAgICA3NywgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgNjksIDY4LCAxMjgsIDY1LCA3MCwgNzEsIDcyLCA2NSwgNzgsIDIwMSwgNjUsIAorICAgIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA4OSwgMTI4LCA2NSwgNjksIDg0LCAxMjgsIDY1LCA2OSwgCisgICAgODMsIDY3LCA4NSwgNzYsIDY1LCA4MCwgNzMsIDg1LCA4MywgMTI4LCA2NSwgNjksIDgzLCA2NywgMTI4LCA2NSwgNjksIDgzLCAKKyAgICAxMjgsIDY1LCA2OSwgODIsIDEyOCwgNjUsIDY5LCA3NiwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjUsIAorICAgIDY5LCA3NiwgMTI4LCA2NSwgNjksIDc1LCAxMjgsIDY1LCA2OSwgNzEsIDY5LCA2NSwgMjA2LCA2NSwgNjksIDcxLCAxMjgsIAorICAgIDY1LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDY5LCAxMjgsIDY1LCA2OSwgNjgsIDY1LCA0NSwgCisgICAgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY1LCA2OSwgNjgsIDEyOCwgNjUsIDY5LCA2NiwgMTI4LCA2NSwgMTk3LCA2NSwgCisgICAgNjgsIDg2LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjgsIDY5LCA3MSwgMTI4LCA2NSwgNjgsIDY5LCAxOTksIDY1LCAKKyAgICA2OCwgNjgsIDgyLCA2OSwgODMsIDgzLCA2OSwgMTk2LCA2NSwgNjgsIDY4LCA2NSwgNzUsIDEyOCwgNjUsIDY4LCA2NSwgCisgICAgMjAzLCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY1LCA2NywgODUsIDg0LCAKKyAgICA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgCisgICAgMTk3LCA2NSwgNjcsIDg0LCA4NSwgNjUsIDc2LCA3NiwgMjE3LCA2NSwgNjcsIDg0LCA3MywgODYsIDY1LCA4NCwgMTk3LCAKKyAgICA2NSwgNjcsIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDczLCAxOTUsIDY1LCA2NywgNzUsIDc4LCA3OSwgODcsIDc2LCA2OSwgCisgICAgNjgsIDcxLCA2OSwgMTI4LCA2NSwgNjcsIDY3LCA4NSwgNzcsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCAKKyAgICA2NywgNjcsIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgCisgICAgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgMjEyLCAKKyAgICA2NSwgNjcsIDY1LCA2OCwgNjksIDc3LCAyMTcsIDY1LCA2NiwgODksIDgzLCA3NywgNjUsIDIwNCwgNjUsIDY2LCA4NSwgNzgsIAorICAgIDY4LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjYsIDc1LCA3MiwgNjUsIDgzLCA3MywgNjUsIDIwNiwgNjUsIDY2LCA2NiwgCisgICAgODIsIDY5LCA4NiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA2NiwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDY1LCAKKyAgICA2NiwgMTc4LCA2NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjUsIDg5LCAxMjgsIDY1LCA2NSwgODcsIAorICAgIDEyOCwgNjUsIDY1LCA3OSwgMTI4LCA2NSwgNjUsIDc0LCAxMjgsIDY1LCA2NSwgNjYsIDY1LCA2NSwgNzAsIDczLCA3NiwgCisgICAgNzMsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCAKKyAgICA1MSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NiwgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA1MCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MywgMTI4LCA2NSwgCisgICAgNjUsIDQ4LCA1MCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MCwgMTI4LCAKKyAgICA2NSwgNjUsIDQ4LCA1MCwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NywgCisgICAgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCAKKyAgICA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUyLCAxMjgsIDY1LCA2NSwgNDgsIAorICAgIDQ5LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDQ5LCAxMjgsIDY1LCA2NSwgCisgICAgNDgsIDQ5LCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU2LCAxMjgsIDY1LCAKKyAgICA2NSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIAorICAgIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgCisgICAgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCAKKyAgICA0OCwgNDksIDEyOCwgNjUsIDQ4LCA1NSwgNDgsIDEyOCwgNjUsIDQ4LCA1NCwgNTcsIDEyOCwgNjUsIDQ4LCA1NCwgNTYsIAorICAgIDEyOCwgNjUsIDQ4LCA1NCwgNTUsIDEyOCwgNjUsIDQ4LCA1NCwgNTQsIDEyOCwgNjUsIDQ4LCA1NCwgNTMsIDEyOCwgNjUsIAorICAgIDQ4LCA1NCwgNTIsIDEyOCwgNjUsIDQ4LCA1NCwgNTEsIDEyOCwgNjUsIDQ4LCA1NCwgNTAsIDEyOCwgNjUsIDQ4LCA1NCwgCisgICAgNDksIDEyOCwgNjUsIDQ4LCA1NCwgNDgsIDEyOCwgNjUsIDQ4LCA1MywgNTcsIDEyOCwgNjUsIDQ4LCA1MywgNTYsIDEyOCwgCisgICAgNjUsIDQ4LCA1MywgNTUsIDEyOCwgNjUsIDQ4LCA1MywgNTQsIDEyOCwgNjUsIDQ4LCA1MywgNTMsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MywgNTIsIDEyOCwgNjUsIDQ4LCA1MywgNTEsIDEyOCwgNjUsIDQ4LCA1MywgNTAsIDEyOCwgNjUsIDQ4LCA1MywgNDksIAorICAgIDEyOCwgNjUsIDQ4LCA1MywgNDgsIDEyOCwgNjUsIDQ4LCA1MiwgNTcsIDEyOCwgNjUsIDQ4LCA1MiwgNTYsIDEyOCwgNjUsIAorICAgIDQ4LCA1MiwgNTUsIDEyOCwgNjUsIDQ4LCA1MiwgNTQsIDEyOCwgNjUsIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDY1LCA0OCwgCisgICAgNTIsIDUzLCAxMjgsIDY1LCA0OCwgNTIsIDUyLCAxMjgsIDY1LCA0OCwgNTIsIDUxLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCAKKyAgICA1MSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTAsIDEyOCwgNjUsIDQ4LCA1MiwgNDksIAorICAgIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDQ4LCAxMjgsIDY1LCA0OCwgNTEsIDU3LCAxMjgsIAorICAgIDY1LCA0OCwgNTEsIDU2LCAxMjgsIDY1LCA0OCwgNTEsIDU1LCAxMjgsIDY1LCA0OCwgNTEsIDU0LCAxMjgsIDY1LCA0OCwgCisgICAgNTEsIDUzLCAxMjgsIDY1LCA0OCwgNTEsIDUyLCAxMjgsIDY1LCA0OCwgNTEsIDUxLCAxMjgsIDY1LCA0OCwgNTEsIDUwLCAKKyAgICA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNjUsIDQ4LCA0OSwgNTIsIDY1LCAxMjgsIDY1LCA0OCwgNDgsIAorICAgIDU0LCA2NiwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDY1LCA0NSwgCisgICAgNjksIDg1LCAxMjgsIDQ1LCA4NSwgMjA1LCA0NSwgODAsIDcyLCA4MiwgODUsIDEyOCwgNDUsIDc1LCA3MiwgODksIDg1LCAKKyAgICAxOTYsIDQ1LCA3NSwgNzIsIDg5LCA3MywgNzYsIDEyOCwgNDUsIDY4LCA5MCwgODUsIDE5NiwgNDUsIDY3LCA3MiwgNjUsIAorICAgIDIxMCwgNDUsIDY3LCA3MiwgNjUsIDc2LCAxMjgsIAogfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGxleGljb25fb2Zmc2V0W10gPSB7Ci0gICAgMCwgMCwgNiwgMTAsIDE1LCAyMywgMjcsIDM0LCAzOSwgNDEsIDQ0LCA1MCwgNjMsIDc1LCA4NCwgOTAsIDk1LCAxMDMsIAotICAgIDExMiwgMTE2LCAxMjEsIDEyOSwgMTM0LCAxMzcsIDE0NCwgMTQ5LCAxNTcsIDE2MywgMTY5LCAxNzcsIDE4NCwgMTk0LCAKLSAgICAxOTksIDIwMiwgMjA5LCAyMTIsIDIxNywgMjI2LCAyMzIsIDI0MSwgMjQ4LCAyNTUsIDI2MCwgMjY0LCAyNzMsIDI4MSwgCi0gICAgMjgyLCAyODgsIDI5NCwgMzAyLCAzMDgsIDMxNCwgMzIwLCAzMjgsIDMzMywgMzQwLCAzNDQsIDM0NywgMzQ5LCAzNTUsIAotICAgIDM2MiwgMzY5LCAzNzcsIDM4MCwgMzg1LCAzOTAsIDM5NiwgMzk4LCA0MDMsIDQxMiwgNDE5LCA0MjUsIDI4NiwgNDMwLCAKLSAgICA0MzIsIDQzNCwgNDM4LCA0NDMsIDQ0NiwgNDUyLCA0NTYsIDQ2NCwgNDc0LCA0ODEsIDExMywgNDkwLCA0OTgsIDUwMywgCi0gICAgNTExLCA1MTYsIDUyNCwgNTM1LCA1MzgsIDU0MiwgNTU1LCA1NjUsIDU3MSwgNTc0LCA1NzUsIDU4MiwgNTg0LCA1OTMsIAotICAgIDMwMSwgNTk2LCA2MDAsIDYwOCwgNjEzLCA2MTUsIDYxOSwgNjIyLCA2MjgsIDYzNSwgNjQyLCA2NDcsIDY1MSwgNjYwLCAKLSAgICA2NzAsIDY3OSwgNjg4LCA2OTIsIDY5OCwgNzA2LCA3MTMsIDcyMSwgNzI1LCA3MzEsIDczNSwgNzQzLCA3NTIsIDc1NiwgCi0gICAgNjI3LCA3NjMsIDc3MSwgNzc1LCA3ODQsIDc4OSwgNzkyLCA3OTYsIDgwNCwgODEzLCA4MTYsIDgyMSwgODMxLCA4NDAsIAotICAgIDg0NywgMjAwLCA3MzMsIDg1MCwgODU3LCA1ODAsIDg2NSwgODczLCA4NzksIDg4NCwgODkxLCA4OTQsIDkwMCwgOTA2LCAKLSAgICA5MTEsIDkxNiwgOTI5LCAyMiwgOTM0LCA5MzcsIDk0NywgOTUyLCA5NTYsIDk2MiwgOTcxLCA5NzQsIDk4NCwgOTkzLCA5OTcsIAotICAgIDEwMDIsIDEwMDcsIDEwMTIsIDEwMTksIDEwMjcsIDEwMzAsIDEwNDAsIDEwNDMsIDEwNDUsIDEwNTMsIDEwNTcsIDEwNjEsIAotICAgIDkzLCAxMDY0LCAxMDY5LCAxMDc1LCAxMDc3LCAxMDg2LCAxMDg5LCAxMDkyLCAxMDk3LCAxMDk5LCAxMTA1LCAxMTExLCAKLSAgICAxMTEzLCAxMTE3LCAzMzEsIDExMjAsIDExMjgsIDExMzIsIDExMzYsIDExNDEsIDExNDQsIDExNTAsIDExNTQsIDExNjEsIAotICAgIDExNjQsIDExNzAsIDgwLCAxMTc2LCAxMTc4LCAxMTgxLCAxMTgzLCA2NTcsIDExODgsIDExOTYsIDEyMDMsIDEyMTMsIAotICAgIDEyMjIsIDEyMzAsIDEyMzIsIDEyNTYsIDEyNzgsIDEzMDAsIDEzMjIsIDEzNDMsIDEzNjQsIDEzODQsIDE0MDQsIDE0MjMsIAotICAgIDE0NDIsIDE0NjEsIDE0ODAsIDE0OTksIDE1MTgsIDE1MzcsIDE1NTYsIDE1NzQsIDE1OTIsIDE2MTAsIDE2MjgsIDE2NDYsIAotICAgIDE2NjQsIDE2ODIsIDE3MDAsIDE3MTgsIDE3MzYsIDE3NTQsIDE3NzIsIDE3OTAsIDE4MDcsIDE4MjQsIDE4NDEsIDE4NTgsIAotICAgIDE4NzUsIDE4OTIsIDE5MDksIDE5MjYsIDE5NDMsIDE5NjAsIDE5NzcsIDE5OTQsIDIwMTEsIDIwMjgsIDIwNDUsIDIwNjIsIAotICAgIDIwNzksIDIwOTYsIDIxMTMsIDIxMzAsIDIxNDcsIDIxNjQsIDIxODEsIDIxOTgsIDIyMTUsIDIyMzIsIDIyNDksIDIyNjYsIAotICAgIDIyODMsIDIzMDAsIDIzMTcsIDIzMzQsIDIzNTEsIDIzNjgsIDIzODUsIDI0MDIsIDI0MTksIDI0MzYsIDI0NTMsIDI0NzAsIAotICAgIDI0ODcsIDI1MDQsIDI1MjEsIDI1MzgsIDI1NTUsIDI1NzIsIDI1ODksIDI2MDYsIDI2MjMsIDI2NDAsIDI2NTcsIDI2NzQsIAotICAgIDI2OTEsIDI3MDgsIDI3MjUsIDI3NDIsIDI3NTksIDI3NzYsIDI3OTMsIDI4MTAsIDI4MjYsIDI4NDIsIDI4NTgsIDI4NzQsIAotICAgIDI4OTAsIDI5MDYsIDI5MjIsIDI5MzgsIDI5NTQsIDI5NzAsIDI5ODYsIDMwMDIsIDMwMTgsIDMwMzQsIDMwNTAsIDMwNjYsIAotICAgIDMwODIsIDMwOTgsIDMxMTQsIDMxMzAsIDMxNDYsIDMxNjIsIDMxNzgsIDMxOTQsIDMyMTAsIDMyMjYsIDMyNDIsIDMyNTgsIAotICAgIDMyNzQsIDMyOTAsIDMzMDYsIDMzMjIsIDMzMzgsIDMzNTQsIDMzNzAsIDMzODYsIDM0MDIsIDM0MTgsIDM0MzQsIDM0NTAsIAotICAgIDM0NjYsIDM0ODIsIDM0OTgsIDM1MTQsIDM1MzAsIDM1NDYsIDM1NjIsIDM1NzgsIDM1OTQsIDM2MTAsIDM2MjYsIDM2NDIsIAotICAgIDM2NTgsIDM2NzQsIDM2OTAsIDM3MDYsIDM3MjIsIDM3MzgsIDM3NTQsIDM3NzAsIDM3ODYsIDM4MDIsIDM4MTgsIDM4MzQsIAotICAgIDM4NTAsIDM4NjYsIDM4ODIsIDM4OTgsIDM5MTQsIDM5MzAsIDM5NDYsIDM5NjIsIDM5NzgsIDM5OTQsIDQwMTAsIDQwMjYsIAotICAgIDQwNDIsIDQwNTgsIDQwNzQsIDQwOTAsIDQxMDYsIDQxMjIsIDQxMzgsIDQxNTQsIDQxNzAsIDQxODYsIDQyMDIsIDQyMTgsIAotICAgIDQyMzQsIDQyNTAsIDQyNjYsIDQyODIsIDQyOTgsIDQzMTQsIDQzMzAsIDQzNDYsIDQzNjIsIDQzNzgsIDQzOTQsIDQ0MTAsIAotICAgIDQ0MjYsIDQ0NDIsIDQ0NTgsIDQ0NzQsIDQ0OTAsIDQ1MDYsIDQ1MjIsIDQ1MzgsIDQ1NTQsIDQ1NzAsIDQ1ODYsIDQ2MDIsIAotICAgIDQ2MTgsIDQ2MzQsIDQ2NTAsIDQ2NjYsIDQ2ODIsIDQ2OTgsIDQ3MTQsIDQ3MzAsIDQ3NDYsIDQ3NjIsIDQ3NzgsIDQ3OTQsIAotICAgIDQ4MTAsIDQ4MjYsIDQ4NDIsIDQ4NTgsIDQ4NzQsIDQ4OTAsIDQ5MDYsIDQ5MjIsIDQ5MzgsIDQ5NTQsIDQ5NzAsIDQ5ODYsIAotICAgIDUwMDIsIDUwMTgsIDUwMzQsIDUwNTAsIDUwNjYsIDUwODIsIDUwOTgsIDUxMTQsIDUxMzAsIDUxNDYsIDUxNjIsIDUxNzgsIAotICAgIDUxOTQsIDUyMTAsIDUyMjYsIDUyNDIsIDUyNTgsIDUyNzQsIDUyOTAsIDUzMDYsIDUzMjIsIDUzMzgsIDUzNTQsIDUzNzAsIAotICAgIDUzODYsIDU0MDIsIDU0MTgsIDU0MzQsIDU0NTAsIDU0NjYsIDU0ODIsIDU0OTgsIDU1MTQsIDU1MzAsIDU1NDYsIDU1NjIsIAotICAgIDU1NzgsIDU1OTQsIDU2MTAsIDU2MjYsIDU2NDIsIDU2NTgsIDU2NzQsIDU2OTAsIDU3MDYsIDU3MjIsIDU3MzgsIDU3NTQsIAotICAgIDU3NzAsIDU3ODYsIDU4MDIsIDU4MTgsIDU4MzQsIDU4NTAsIDU4NjYsIDU4ODIsIDU4OTgsIDU5MTQsIDU5MzAsIDU5NDYsIAotICAgIDU5NjIsIDU5NzgsIDU5OTQsIDYwMTAsIDYwMjYsIDYwNDIsIDYwNTgsIDYwNzQsIDYwOTAsIDYxMDYsIDYxMjIsIDYxMzgsIAotICAgIDYxNTQsIDYxNzAsIDYxODYsIDYyMDIsIDYyMTgsIDYyMzQsIDYyNTAsIDYyNjYsIDYyODIsIDYyOTgsIDYzMTQsIDYzMzAsIAotICAgIDYzNDYsIDYzNjIsIDYzNzgsIDYzOTQsIDY0MTAsIDY0MjYsIDY0NDIsIDY0NTgsIDY0NzQsIDY0OTAsIDY1MDYsIDY1MjIsIAotICAgIDY1MzgsIDY1NTQsIDY1NzAsIDY1ODYsIDY2MDIsIDY2MTgsIDY2MzQsIDY2NTAsIDY2NjYsIDY2ODIsIDY2OTgsIDY3MTQsIAotICAgIDY3MzAsIDY3NDYsIDY3NjIsIDY3NzgsIDY3OTQsIDY4MTAsIDY4MjYsIDY4NDIsIDY4NTgsIDY4NzQsIDY4OTAsIDY5MDYsIAotICAgIDY5MjIsIDY5MzgsIDY5NTQsIDY5NzAsIDY5ODYsIDcwMDIsIDcwMTgsIDcwMzQsIDcwNTAsIDcwNjYsIDcwODIsIDcwOTgsIAotICAgIDcxMTQsIDcxMzAsIDcxNDYsIDcxNjIsIDcxNzgsIDcxOTQsIDcyMTAsIDcyMjYsIDcyNDIsIDcyNTgsIDcyNzQsIDcyOTAsIAotICAgIDczMDYsIDczMjIsIDczMzgsIDczNTQsIDczNzAsIDczODYsIDc0MDIsIDc0MTgsIDc0MzQsIDc0NTAsIDc0NjYsIDc0ODIsIAotICAgIDc0OTgsIDc1MTQsIDc1MzAsIDc1NDYsIDc1NjIsIDc1NzgsIDc1OTQsIDc2MTAsIDc2MjYsIDc2NDIsIDc2NTgsIDc2NzQsIAotICAgIDc2OTAsIDc3MDYsIDc3MjIsIDc3MzgsIDc3NTQsIDc3NzAsIDc3ODYsIDc4MDIsIDc4MTgsIDc4MzQsIDc4NTAsIDc4NjYsIAotICAgIDc4ODIsIDc4OTgsIDc5MTQsIDc5MzAsIDc5NDYsIDc5NjIsIDc5NzgsIDc5OTQsIDgwMTAsIDgwMjYsIDgwNDIsIDgwNTgsIAotICAgIDgwNzQsIDgwOTAsIDgxMDYsIDgxMjIsIDgxMzgsIDgxNTQsIDgxNzAsIDgxODYsIDgyMDIsIDgyMTgsIDgyMzQsIDgyNTAsIAotICAgIDgyNjYsIDgyODIsIDgyOTgsIDgzMTQsIDgzMzAsIDgzNDYsIDgzNjIsIDgzNzgsIDgzOTQsIDg0MTAsIDg0MjYsIDg0NDIsIAotICAgIDg0NTgsIDg0NzQsIDg0OTAsIDg1MDYsIDg1MjIsIDg1MzgsIDg1NTQsIDg1NzAsIDg1ODYsIDg2MDIsIDg2MTgsIDg2MzQsIAotICAgIDg2NTAsIDg2NjYsIDg2ODIsIDg2OTgsIDg3MTQsIDg3MzAsIDg3NDYsIDg3NjIsIDg3NzgsIDg3OTQsIDg4MTAsIDg4MjYsIAotICAgIDg4NDIsIDg4NTgsIDg4NzQsIDg4OTAsIDg5MDYsIDg5MjIsIDg5MzgsIDg5NTQsIDg5NzAsIDg5ODYsIDkwMDIsIDkwMTgsIAotICAgIDkwMzQsIDkwNTAsIDkwNjYsIDkwODIsIDkwOTgsIDkxMTQsIDkxMzAsIDkxNDYsIDkxNjIsIDkxNzgsIDkxOTQsIDkyMTAsIAotICAgIDkyMjYsIDkyNDIsIDkyNTgsIDkyNzQsIDkyOTAsIDkzMDYsIDkzMjIsIDkzMzgsIDkzNTQsIDkzNzAsIDkzODYsIDk0MDIsIAotICAgIDk0MTgsIDk0MzQsIDk0NTAsIDk0NjYsIDk0ODIsIDk0OTgsIDk1MTQsIDk1MzAsIDk1NDYsIDk1NjIsIDk1NzgsIDk1OTQsIAotICAgIDk2MTAsIDk2MjYsIDk2NDIsIDk2NTgsIDk2NzQsIDk2OTAsIDk3MDYsIDk3MjIsIDk3MzgsIDk3NTQsIDk3NzAsIDk3ODYsIAotICAgIDk4MDIsIDk4MTgsIDk4MzQsIDk4NTAsIDk4NjYsIDk4ODIsIDk4OTgsIDk5MTQsIDk5MzAsIDk5NDYsIDk5NjIsIDk5NzgsIAotICAgIDk5OTQsIDEwMDEwLCAxMDAyNiwgMTAwNDIsIDEwMDU4LCAxMDA3NCwgMTAwOTAsIDEwMTA2LCAxMDEyMiwgMTAxMzgsIAotICAgIDEwMTU0LCAxMDE3MCwgMTAxODYsIDEwMjAyLCAxMDIxOCwgMTAyMzQsIDEwMjUwLCAxMDI2NiwgMTAyODIsIDEwMjk4LCAKLSAgICAxMDMxNCwgMTAzMzAsIDEwMzQ2LCAxMDM2MiwgMTAzNzgsIDEwMzk0LCAxMDQxMCwgMTA0MjYsIDEwNDQyLCAxMDQ1OCwgCi0gICAgMTA0NzQsIDEwNDkwLCAxMDUwNiwgMTA1MjIsIDEwNTM4LCAxMDU1NCwgMTA1NzAsIDEwNTg2LCAxMDYwMiwgMTA2MTgsIAotICAgIDEwNjM0LCAxMDY1MCwgMTA2NjYsIDEwNjgyLCAxMDY5OCwgMTA3MTQsIDEwNzMwLCAxMDc0NiwgMTA3NjIsIDEwNzc4LCAKLSAgICAxMDc5NCwgMTA4MTAsIDEwODI2LCAxMDg0MiwgMTA4NTgsIDEwODc0LCAxMDg5MCwgMTA5MDYsIDEwOTIyLCAxMDkzOCwgCi0gICAgMTA5NTQsIDEwOTcwLCAxMDk4NiwgMTEwMDIsIDExMDE4LCAxMTAzNCwgMTEwNTAsIDExMDY2LCAxMTA4MiwgMTEwOTgsIAotICAgIDExMTE0LCAxMTEzMCwgMTExNDYsIDExMTYyLCAxMTE3OCwgMTExOTQsIDExMjEwLCAxMTIyNiwgMTEyNDIsIDExMjU4LCAKLSAgICAxMTI3NCwgMTEyOTAsIDExMzA2LCAxMTMyMiwgMTEzMzgsIDExMzU0LCAxMTM3MCwgMTEzODYsIDExNDAyLCAxMTQxOCwgCi0gICAgMTE0MzQsIDExNDUwLCAxMTQ2NiwgMTE0ODIsIDExNDk4LCAxMTUxNCwgMTE1MzAsIDExNTQ2LCAxMTU2MiwgMTE1NzgsIAotICAgIDExNTk0LCAxMTYxMCwgMTE2MjYsIDExNjQyLCAxMTY1OCwgMTE2NzQsIDExNjkwLCAxMTcwNiwgMTE3MjIsIDExNzM4LCAKLSAgICAxMTc1NCwgMTE3NzAsIDExNzg1LCAxMTgwMCwgMTE4MTUsIDExODMwLCAxMTg0NSwgMTE4NjAsIDExODc1LCAxMTg5MCwgCi0gICAgMTE5MDUsIDExOTIwLCAxMTkzNSwgMTE5NTAsIDExOTY1LCAxMTk4MCwgMTE5OTUsIDEyMDEwLCAxMjAyNSwgMTIwNDAsIAotICAgIDEyMDU1LCAxMjA3MCwgMTIwODUsIDEyMTAwLCAxMjExNSwgMTIxMzAsIDEyMTQ1LCAxMjE2MCwgMTIxNzUsIDEyMTkwLCAKLSAgICAxMjIwNSwgMTIyMjAsIDEyMjM1LCAxMjI1MCwgMTIyNjUsIDEyMjgwLCAxMjI5NSwgMTIzMTAsIDEyMzI1LCAxMjM0MCwgCi0gICAgMTIzNTUsIDEyMzcwLCAxMjM4NSwgMTI0MDAsIDEyNDE1LCAxMjQzMCwgMTI0NDUsIDEyNDYwLCAxMjQ3NSwgMTI0OTAsIAotICAgIDEyNTA1LCAxMjUyMCwgMTI1MzUsIDEyNTUwLCAxMjU2NSwgMTI1ODAsIDEyNTk1LCAxMjYxMCwgMTI2MjUsIDEyNjQwLCAKLSAgICAxMjY1NSwgMTI2NzAsIDEyNjg1LCAxMjcwMCwgMTI3MTUsIDEyNzMwLCAxMjc0NSwgMTI3NjAsIDEyNzc1LCAxMjc5MCwgCi0gICAgMTI4MDUsIDEyODIwLCAxMjgzNSwgMTI4NTAsIDEyODY1LCAxMjg4MCwgMTI4OTUsIDEyOTEwLCAxMjkyNSwgMTI5NDAsIAotICAgIDEyOTU1LCAxMjk3MCwgMTI5ODUsIDEzMDAwLCAxMzAxNSwgMTMwMzAsIDEzMDQ1LCAxMzA2MCwgMTMwNzUsIDEzMDkwLCAKLSAgICAxMzEwNSwgMTMxMjAsIDEzMTM1LCAxMzE1MCwgMTMxNjUsIDEzMTgwLCAxMzE5NSwgMTMyMTAsIDEzMjI1LCAxMzI0MCwgCi0gICAgMTMyNTUsIDEzMjcwLCAxMzI4NSwgMTMzMDAsIDEzMzE1LCAxMzMzMCwgMTMzNDUsIDEzMzYwLCAxMzM3NSwgMTMzOTAsIAotICAgIDEzNDA1LCAxMzQyMCwgMTM0MzUsIDEzNDUwLCAxMzQ2NSwgMTM0ODAsIDEzNDk1LCAxMzUxMCwgMTM1MjUsIDEzNTQwLCAKLSAgICAxMzU1NSwgMTM1NzAsIDEzNTg1LCAxMzYwMCwgMTM2MTUsIDEzNjMwLCAxMzY0NSwgMTM2NjAsIDEzNjc1LCAxMzY5MCwgCi0gICAgMTM3MDUsIDEzNzIwLCAxMzczNSwgMTM3NTAsIDEzNzY1LCAxMzc4MCwgMTM3OTUsIDEzODEwLCAxMzgyNSwgMTM4NDAsIAotICAgIDEzODU1LCAxMzg3MCwgMTM4ODUsIDEzOTAwLCAxMzkxNSwgMTM5MzAsIDEzOTQ1LCAxMzk2MCwgMTM5NzUsIDEzOTkwLCAKLSAgICAxNDAwNSwgMTQwMjAsIDE0MDM1LCAxNDA1MCwgMTQwNjUsIDE0MDgwLCAxNDA5NSwgMTQxMTAsIDE0MTI1LCAxNDE0MCwgCi0gICAgMTQxNTUsIDE0MTcwLCAxNDE4NSwgMTQyMDAsIDE0MjE1LCAxNDIzMCwgMTQyNDUsIDE0MjYwLCAxNDI3NSwgMTQyOTAsIAotICAgIDE0MzA1LCAxNDMyMCwgMTQzMzUsIDE0MzUwLCAxNDM2NSwgMTQzODAsIDE0Mzk1LCAxNDQxMCwgMTQ0MjUsIDE0NDQwLCAKLSAgICAxNDQ1NSwgMTQ0NzAsIDE0NDg1LCAxNDUwMCwgMTQ1MTUsIDE0NTMwLCAxNDU0NSwgMTQ1NjAsIDE0NTc1LCAxNDU5MCwgCi0gICAgMTQ2MDUsIDE0NjIwLCAxNDYzNSwgMTQ2NTAsIDE0NjY1LCAxNDY4MCwgMTQ2OTUsIDE0NzEwLCAxNDcyNSwgMTQ3NDAsIAotICAgIDE0NzU1LCAxNDc3MCwgMTQ3ODUsIDE0ODAwLCAxNDgxNSwgMTQ4MzAsIDE0ODQ1LCAxNDg2MCwgMTQ4NzUsIDE0ODkwLCAKLSAgICAxNDkwNSwgMTQ5MjAsIDE0OTM1LCAxNDk1MCwgMTQ5NjUsIDE0OTgwLCAxNDk5NSwgMTUwMTAsIDE1MDI1LCAxNTA0MCwgCi0gICAgMTUwNTUsIDE1MDcwLCAxNTA4NSwgMTUxMDAsIDE1MTE1LCAxNTEzMCwgMTUxNDUsIDE1MTYwLCAxNTE3NSwgMTUxOTAsIAotICAgIDE1MjA1LCAxNTIyMCwgMTUyMzUsIDE1MjUwLCAxNTI2NSwgMTUyODAsIDE1Mjk1LCAxNTMxMCwgMTUzMjUsIDE1MzQwLCAKLSAgICAxNTM1NSwgMTUzNzAsIDE1Mzg1LCAxNTQwMCwgMTU0MTUsIDE1NDMwLCAxNTQ0NSwgMTU0NjAsIDE1NDc1LCAxNTQ5MCwgCi0gICAgMTU1MDUsIDE1NTIwLCAxNTUzNSwgMTU1NTAsIDE1NTY1LCAxNTU4MCwgMTU1OTUsIDE1NjEwLCAxNTYyNSwgMTU2NDAsIAotICAgIDE1NjU1LCAxNTY3MCwgMTU2ODUsIDE1NzAwLCAxNTcxNSwgMTU3MzAsIDE1NzQ1LCAxNTc2MCwgMTU3NzUsIDE1NzkwLCAKLSAgICAxNTgwNSwgMTU4MjAsIDE1ODM1LCAxNTg1MCwgMTU4NjUsIDE1ODgwLCAxNTg5NSwgMTU5MTAsIDE1OTI1LCAxNTk0MCwgCi0gICAgMTU5NTUsIDE1OTcwLCAxNTk4NSwgMTYwMDAsIDE2MDE1LCAxNjAzMCwgMTYwNDUsIDE2MDYwLCAxNjA3NSwgMTYwOTAsIAotICAgIDE2MTA1LCAxNjEyMCwgMTYxMzUsIDE2MTUwLCAxNjE2NSwgMTYxODAsIDE2MTk1LCAxNjIxMCwgMTYyMjUsIDE2MjQwLCAKLSAgICAxNjI1NSwgMTYyNzAsIDE2Mjg1LCAxNjMwMCwgMTYzMTUsIDE2MzMwLCAxNjM0NSwgMTYzNjAsIDE2Mzc1LCAxNjM5MCwgCi0gICAgMTY0MDUsIDE2NDIwLCAxNjQzNSwgMTY0NTAsIDE2NDY1LCAxNjQ4MCwgMTY0OTUsIDE2NTEwLCAxNjUyNSwgMTY1NDAsIAotICAgIDE2NTU1LCAxNjU3MCwgMTY1ODUsIDE2NjAwLCAxNjYxNSwgMTY2MzAsIDE2NjQ1LCAxNjY2MCwgMTY2NzUsIDE2NjkwLCAKLSAgICAxNjcwNSwgMTY3MjAsIDE2NzM1LCAxNjc1MCwgMTY3NjUsIDE2NzgwLCAxNjc5NSwgMTY4MTAsIDE2ODI1LCAxNjg0MCwgCi0gICAgMTY4NTUsIDE2ODcwLCAxNjg4NSwgMTY5MDAsIDE2OTE1LCAxNjkzMCwgMTY5NDUsIDE2OTYwLCAxNjk3NSwgMTY5OTAsIAotICAgIDE3MDA1LCAxNzAyMCwgMTcwMzUsIDE3MDUwLCAxNzA2NSwgMTcwODAsIDE3MDk1LCAxNzExMCwgMTcxMjUsIDE3MTQwLCAKLSAgICAxNzE1NSwgMTcxNzAsIDE3MTg1LCAxNzIwMCwgMTcyMTUsIDE3MjMwLCAxNzI0NSwgMTcyNjAsIDE3Mjc1LCAxNzI5MCwgCi0gICAgMTczMDUsIDE3MzIwLCAxNzMzNSwgMTczNTAsIDE3MzY1LCAxNzM4MCwgMTczOTUsIDE3NDEwLCAxNzQyNSwgMTc0NDAsIAotICAgIDE3NDU1LCAxNzQ3MCwgMTc0ODUsIDE3NTAwLCAxNzUxNSwgMTc1MzAsIDE3NTQ1LCAxNzU2MCwgMTc1NzUsIDE3NTkwLCAKLSAgICAxNzYwNSwgMTc2MjAsIDE3NjM1LCAxNzY1MCwgMTc2NjUsIDE3NjgwLCAxNzY5NSwgMTc3MTAsIDE3NzI1LCAxNzc0MCwgCi0gICAgMTc3NTUsIDE3NzcwLCAxNzc4NSwgMTc4MDAsIDE3ODE1LCAxNzgzMCwgMTc4NDUsIDE3ODYwLCAxNzg3NSwgMTc4OTAsIAotICAgIDE3OTA1LCAxNzkyMCwgMTc5MzUsIDE3OTUwLCAxNzk2NSwgMTc5ODAsIDE3OTk1LCAxODAxMCwgMTgwMjUsIDE4MDQwLCAKLSAgICAxODA1NSwgMTgwNzAsIDE4MDg1LCAxODEwMCwgMTgxMTUsIDE4MTMwLCAxODE0NSwgMTgxNjAsIDE4MTc1LCAxODE5MCwgCi0gICAgMTgyMDUsIDE4MjIwLCAxODIzNSwgMTgyNTAsIDE4MjY1LCAxODI4MCwgMTgyOTUsIDE4MzEwLCAxODMyNSwgMTgzNDAsIAotICAgIDE4MzU1LCAxODM3MCwgMTgzODUsIDE4NDAwLCAxODQxNSwgMTg0MzAsIDE4NDQ1LCAxODQ2MCwgMTg0NzUsIDE4NDkwLCAKLSAgICAxODUwNSwgMTg1MjAsIDE4NTM1LCAxODU1MCwgMTg1NjUsIDE4NTgwLCAxODU5NSwgMTg2MTAsIDE4NjI1LCAxODY0MCwgCi0gICAgMTg2NTUsIDE4NjcwLCAxODY4NSwgMTg3MDAsIDE4NzE1LCAxODczMCwgMTg3NDUsIDE4NzYwLCAxODc3NSwgMTg3OTAsIAotICAgIDE4ODA1LCAxODgyMCwgMTg4MzUsIDE4ODUwLCAxODg2NSwgMTg4ODAsIDE4ODk1LCAxODkxMCwgMTg5MjUsIDE4OTQwLCAKLSAgICAxODk1NSwgMTg5NzAsIDE4OTg1LCAxOTAwMCwgMTkwMTUsIDE5MDMwLCAxOTA0NSwgMTkwNjAsIDE5MDc1LCAxOTA5MCwgCi0gICAgMTkxMDUsIDE5MTIwLCAxOTEzNSwgMTkxNTAsIDE5MTY1LCAxOTE4MCwgMTkxOTUsIDE5MjEwLCAxOTIyNSwgMTkyNDAsIAotICAgIDE5MjU1LCAxOTI3MCwgMTkyODUsIDE5MzAwLCAxOTMxNSwgMTkzMzAsIDE5MzQ1LCAxOTM2MCwgMTkzNzUsIDE5MzkwLCAKLSAgICAxOTQwNSwgMTk0MjAsIDE5NDM1LCAxOTQ1MCwgMTk0NjUsIDE5NDgwLCAxOTQ5NSwgMTk1MTAsIDE5NTI1LCAxOTU0MCwgCi0gICAgMTk1NTUsIDE5NTcwLCAxOTU4NSwgMTk2MDAsIDE5NjE1LCAxOTYzMCwgMTk2NDUsIDE5NjYwLCAxOTY3NSwgMTk2OTAsIAotICAgIDE5NzA1LCAxOTcyMCwgMTk3MzUsIDE5NzUwLCAxOTc2NSwgMTk3ODAsIDE5Nzk1LCAxOTgxMCwgMTk4MjUsIDE5ODQwLCAKLSAgICAxOTg1NSwgMTk4NzAsIDE5ODg0LCAxOTg5OCwgMTk5MTIsIDE5OTI2LCAxOTk0MCwgMTM5MCwgMTk5NTQsIDE5OTY4LCAKLSAgICAxOTk4MiwgMTk5OTYsIDIwMDEwLCAyMDAyNCwgMjAwMzgsIDIwMDUyLCAyMDA2NiwgMjAwODAsIDIwMDk0LCAyMDEwOCwgCi0gICAgMjAxMjIsIDIwMTM2LCAyMDE1MCwgMjAxNjQsIDIwMTc4LCAyMDE5MiwgMjAyMDYsIDIwMjIwLCAyMDIzNCwgMjAyNDgsIAotICAgIDIwMjYyLCAyMDI3NiwgMjAyOTAsIDIwMzA0LCAyMDMxOCwgMTgyNywgMjAzMzIsIDIwMzQ2LCAyMDM2MCwgMjAzNzQsIAotICAgIDIwMzg4LCAyMDQwMiwgMjA0MTYsIDIwNDMwLCAyMDQ0NCwgMjA0NTgsIDIwNDcyLCAyMDQ4NiwgMjA1MDAsIDIwNTE0LCAKLSAgICAyMDUyOCwgMjA1NDIsIDIwNTU2LCAyMDU2OSwgMjA1ODIsIDIwNTk1LCAyMDYwOCwgMjA2MjEsIDIwNjM0LCAyMDY0NywgCi0gICAgMjA2NjAsIDIwNjczLCAyMDY4NiwgMjA2OTksIDIwNzEyLCAyMDcyNSwgMjA3MzgsIDIwNzUxLCAyMDc2NCwgMjA3NzcsIAotICAgIDIwNzkwLCAyMDgwMywgMjA4MTYsIDIwODI5LCAyMDg0MiwgMjA4NTUsIDIwODY4LCAxNzc3LCAyMDg4MSwgMjA4OTQsIAotICAgIDIwOTA3LCAyMDkyMCwgMjA5MzMsIDIwOTQ2LCAyMDk1OSwgMjA5NzIsIDIwOTg1LCAyMDk5OCwgMjEwMTEsIDIxMDI0LCAKLSAgICAyMTAzNywgMjEwNTAsIDIxMDYzLCAyMTA3NiwgMjEwODksIDIxMTAyLCAyMTExNSwgMjExMjgsIDIxMTQxLCAyMTE1NCwgCi0gICAgMjExNjcsIDIxMTgwLCAyMTE5MywgMjEyMDYsIDIxMjE5LCAyMTIzMiwgMjEyNDUsIDIxMjU4LCAyMTI3MSwgMjEyODQsIAotICAgIDIxMjk3LCAyMTMxMCwgMjEzMjMsIDIxMzM2LCAyMTM0OSwgMjEzNjIsIDIxMzc1LCAyMTM4OCwgMjE0MDEsIDIxNDE0LCAKLSAgICAyMTQyNywgMjE0NDAsIDE1MDUsIDIxNDUzLCAyMTQ2NiwgMjE0NzksIDIxNDkyLCAyMTUwNSwgMjE1MTgsIDIxNTMxLCAKLSAgICAyMTU0NCwgMjE1NTcsIDIxNTcwLCAyMTU4MywgMjE1OTYsIDIxNjA5LCAyMTYyMiwgMjE2MzUsIDIxNjQ4LCAyMTY2MSwgCi0gICAgMjE2NzQsIDIxNjg3LCAyMTcwMCwgMjE3MTMsIDIxNzI2LCAyMTczOSwgMjE3NTIsIDIxNzY1LCAyMTc3OCwgMjE3OTEsIAotICAgIDIxODA0LCAyMTgxNywgMjE4MzAsIDIxODQzLCAyMTg1NiwgMjE4NjksIDIxODgyLCAyMTg5NSwgMjE5MDgsIDIxOTIxLCAKLSAgICAyMTkzNCwgMjE5NDcsIDIxOTYwLCAyMTk3MywgMjE5ODYsIDIxOTk5LCAyMjAxMiwgMjIwMjUsIDIyMDM4LCAyMjA1MSwgCi0gICAgMjIwNjQsIDIyMDc3LCAyMjA5MCwgMjIxMDMsIDIyMTE2LCAyMjEyOSwgMjIxNDIsIDIyMTU1LCAyMjE2OCwgMjIxODEsIAotICAgIDIyMTk0LCAyMjIwNywgMjIyMjAsIDIyMjMzLCAyMjI0NiwgMjIyNTksIDIyMjcyLCAyMjI4NSwgMjIyOTgsIDIyMzExLCAKLSAgICAyMjMyNCwgMjIzMzcsIDIyMzUwLCAyMjM2MywgMjIzNzYsIDIyMzg5LCAyMjQwMiwgMjI0MTUsIDIyNDI4LCAyMjQ0MSwgCi0gICAgMjI0NTQsIDIyNDY3LCAyMjQ4MCwgMjI0OTMsIDIyNTA2LCAyMjUxOSwgMjI1MzIsIDIyNTQ1LCAyMjU1OCwgMjI1NzEsIAotICAgIDIyNTg0LCAyMjU5NywgMjI2MTAsIDIyNjIzLCAyMjYzNiwgMjI2NDksIDIyNjYyLCAyMjY3NSwgMjI2ODgsIDIyNzAxLCAKLSAgICAyMjcxNCwgMjI3MjcsIDIyNzQwLCAyMjc1MywgMjI3NjYsIDIyNzc5LCAyMjc5MiwgMjI4MDUsIDIyODE4LCAyMjgzMSwgCi0gICAgMjI4NDQsIDIyODU3LCAyMjg3MCwgMjI4ODMsIDIyODk2LCAyMjkwOSwgMjI5MjIsIDIyOTM1LCAyMjk0OCwgMjI5NjEsIAotICAgIDIyOTc0LCAyMjk4NywgMjMwMDAsIDIzMDEzLCAyMzAyNiwgMjMwMzksIDIzMDUyLCAyMzA2NSwgMjMwNzgsIDIzMDkxLCAKLSAgICAyMzEwNCwgMjMxMTcsIDIzMTMwLCAyMzE0MywgMjMxNTYsIDIzMTY5LCAyMzE4MiwgMjMxOTUsIDIzMjA4LCAyMzIyMSwgCi0gICAgMjMyMzQsIDIzMjQ3LCAyMzI2MCwgMjMyNzMsIDIzMjg2LCAyMzI5OSwgMjMzMTIsIDIzMzI1LCAyMzMzOCwgMjMzNTEsIAotICAgIDIzMzY0LCAyMzM3NywgMjMzOTAsIDIzNDAzLCAyMzQxNiwgMjM0MjksIDIzNDQyLCAyMzQ1NSwgMjM0NjgsIDIzNDgxLCAKLSAgICAyMzQ5NCwgMjM1MDcsIDIzNTIwLCAyMzUzMywgMjM1NDYsIDIzNTU5LCAyMzU3MiwgMjM1ODUsIDIzNTk4LCAyMzYxMSwgCi0gICAgMjM2MjQsIDIzNjM3LCAyMzY1MCwgMjM2NjMsIDIzNjc2LCAyMzY4OSwgMjM3MDIsIDIzNzE1LCAyMzcyOCwgMjM3NDEsIAotICAgIDIzNzU0LCAyMzc2NiwgMjM3NzgsIDIzNzkwLCAyMzgwMiwgMjM4MTQsIDIzODI2LCAyMzgzOCwgMjM4NTAsIDIzODYyLCAKLSAgICAyMzg3NCwgMjM4ODYsIDIzODk4LCAyMzkxMCwgMjM5MjIsIDIzOTM0LCAyMzk0NiwgMjM5NTgsIDIzOTcwLCAyMzk4MiwgCi0gICAgMTY4OCwgMjM5OTQsIDI0MDA2LCAyNDAxOCwgMTU5OCwgMjQwMzAsIDI0MDQyLCAyNDA1NCwgMjQwNjYsIDI0MDc4LCAKLSAgICAyNDA5MCwgMjQxMDIsIDE0ODcsIDE1ODAsIDI0MTE0LCAxNjE2LCAyNDEyNiwgMjQxMzgsIDI0MTUwLCAyNDE2MiwgMjQxNzQsIAotICAgIDI0MTg2LCAyNDE5OCwgMjQyMTAsIDI0MjIyLCAyNDIzNCwgMjQyNDYsIDI0MjU4LCAyNDI3MCwgMjQyODIsIDI0Mjk0LCAKLSAgICAyNDMwNiwgMjQzMTgsIDI0MzMwLCAyNDM0MiwgMjQzNTQsIDI0MzY2LCAyNDM3OCwgMjQzOTAsIDI0NDAyLCAyNDQxNCwgCi0gICAgMjQ0MjYsIDI0NDM4LCAyNDQ1MCwgMjQ0NjIsIDI0NDc0LCAyNDQ4NiwgMjQ0OTgsIDI0NTEwLCAyNDUyMiwgMjQ1MzQsIAotICAgIDI0NTQ2LCAyNDU1OCwgMjQ1NzAsIDI0NTgyLCAyNDU5NCwgMjQ2MDYsIDI0NjE4LCAyNDYzMCwgMjQ2NDIsIDI0NjU0LCAKLSAgICAyNDY2NiwgMjQ2NzgsIDI0NjkwLCAyNDcwMiwgMjQ3MTQsIDI0NzI2LCAyNDczOCwgMjQ3NTAsIDI0NzYyLCAyNDc3NCwgCi0gICAgMjQ3ODYsIDI0Nzk4LCAyNDgxMCwgMjQ4MjIsIDI0ODM0LCAyNDg0NiwgMjQ4NTgsIDI0ODcwLCAyNDg4MiwgMjQ4OTQsIAotICAgIDI0OTA2LCAyNDkxOCwgMjQ5MzAsIDI0OTQyLCAyNDk1NCwgMjQ5NjYsIDI0OTc4LCAyNDk5MCwgMjUwMDIsIDI1MDE0LCAKLSAgICAyNTAyNiwgMjUwMzgsIDI1MDUwLCAyNTA2MiwgMjUwNzQsIDI1MDg2LCAyNTA5OCwgMjUxMTAsIDI1MTIyLCAyNTEzNCwgCi0gICAgMjUxNDYsIDI1MTU4LCAyNTE3MCwgMjUxODIsIDI1MTk0LCAxMzcyLCAyNTIwNiwgMjUyMTgsIDI1MjMwLCAxNzQyLCAKLSAgICAyNTI0MiwgMjUyNTQsIDI1MjY2LCAyNTI3OCwgMjUyOTAsIDI1MzAyLCAyNTMxNCwgMjUzMjYsIDI1MzM4LCAyNTM1MCwgCi0gICAgMjUzNjIsIDI1Mzc0LCAyNTM4NiwgMjUzOTgsIDI1NDEwLCAyNTQyMiwgMjU0MzQsIDI1NDQ2LCAyNTQ1OCwgMjU0NzAsIAotICAgIDI1NDgyLCAyNTQ5NCwgMjU1MDYsIDI1NTE4LCAyNTUzMCwgMjU1NDIsIDI1NTU0LCAyNTU2NiwgMjU1NzgsIDI1NTkwLCAKLSAgICAyNTYwMiwgMjU2MTQsIDI1NjI2LCAyNTYzOCwgMjU2NTAsIDI1NjYyLCAyNTY3NCwgMjU2ODYsIDI1Njk4LCAyNTcxMCwgCi0gICAgMjU3MjIsIDI1NzM0LCAyNTc0NiwgMjU3NTgsIDI1NzcwLCAyNTc4MiwgMjU3OTQsIDI1ODA2LCAyNTgxOCwgMjU4MzAsIAotICAgIDI1ODQyLCAyNTg1NCwgMjU4NjYsIDI1ODc4LCAyNTg5MCwgMjU5MDIsIDI1OTE0LCAyNTkyNiwgMjU5MzgsIDI1OTUwLCAKLSAgICAyNTk2MiwgMjU5NzQsIDI1OTg2LCAyNTk5OCwgMjYwMTAsIDI2MDIyLCAyNjAzNCwgMjYwNDYsIDI2MDU4LCAyNjA3MCwgCi0gICAgMjYwODIsIDI2MDk0LCAyNjEwNiwgMjYxMTgsIDI2MTMwLCAyNjE0MiwgMjYxNTQsIDI2MTY2LCAyNjE3OCwgMjYxOTAsIAotICAgIDI2MjAyLCAyNjIxNCwgMjYyMjYsIDI2MjM4LCAyNjI1MCwgMjYyNjIsIDI2Mjc0LCAyNjI4NiwgMjYyOTgsIDI2MzEwLCAKLSAgICAyNjMyMiwgMjYzMzQsIDI2MzQ2LCAyNjM1OCwgMjYzNzAsIDI2MzgyLCAyNjM5NCwgMjY0MDYsIDI2NDE4LCAyNjQzMCwgCi0gICAgMjY0NDIsIDI2NDU0LCAyNjQ2NiwgMjY0NzgsIDI2NDkwLCAyNjUwMiwgMjY1MTQsIDI2NTI2LCAyNjUzOCwgMjY1NTAsIAotICAgIDI2NTYyLCAyNjU3NCwgMjY1ODUsIDI2NTk2LCAyNjYwNywgMjY2MTgsIDI2NjI5LCAyNjY0MCwgMjY2NTEsIDI2NjYyLCAKLSAgICAyNjY3MywgMjY2ODQsIDI2Njk1LCAyNjcwNiwgMjY3MTcsIDI2NzI4LCAyNjczOSwgMjY3NTAsIDI2NzYxLCAyNjc3MiwgCi0gICAgMTgxMywgMjY3ODMsIDI2Nzk0LCAyNjgwNSwgMjY4MTYsIDI2ODI3LCAyNjgzOCwgMjY4NDksIDI2ODYwLCAyNjg3MSwgCi0gICAgMjczMSwgMTI4OSwgMjY4ODIsIDE0MTIsIDI2ODkzLCAyNjkwNCwgMjY5MTUsIDI2OTI2LCAyNjkzNywgMjY5NDgsIDI3NDgsIAotICAgIDI2OTU5LCAyNjk3MCwgMjY5ODEsIDI2OTkyLCAyNzAwMywgMjcwMTQsIDI3MDI1LCAyNzAzNiwgMjcwNDcsIDI3MDU4LCAKLSAgICAyNzA2OSwgMjcwODAsIDI3MDkxLCAyNzEwMiwgMjcxNCwgMjcxMTMsIDI3MTI0LCAyNzEzNSwgMjcxNDYsIDI3MTU3LCAKLSAgICAyNzE2OCwgMjcxNzksIDI3MTkwLCAyNzIwMSwgMjcyMTIsIDI3MjIzLCAyNzIzNCwgMjcyNDUsIDI3MjU2LCAyNzI2NywgCi0gICAgMjcyNzgsIDI3Mjg5LCAyNzMwMCwgMjczMTEsIDI3MzIyLCAyNzMzMywgMjczNDQsIDI3MzU1LCAyNzM2NiwgMjczNzcsIAotICAgIDI3Mzg4LCAyNzM5OSwgMjc0MTAsIDI3NDIxLCAyNzQzMiwgMjc0NDMsIDI3NDU0LCAyNzQ2NSwgMjc0NzYsIDI3NDg3LCAKLSAgICAyNzQ5OCwgMjc1MDksIDI3NTIwLCAyNzUzMSwgMjc1NDIsIDI3NTUzLCAyNzU2NCwgMjc1NzUsIDI3NTg2LCAyNzU5NywgCi0gICAgMjc2MDgsIDI3NjE5LCAyNzYzMCwgMjc2NDEsIDI3NjUyLCAyNzY2MywgMjc2NzQsIDI3Njg1LCAyNzY5NiwgMjc3MDcsIAotICAgIDI3NzE4LCAyNzcyOSwgMjc3NDAsIDI3NzUxLCAyNzc2MiwgMjc3NzMsIDI3Nzg0LCAyNzc5NSwgMjc4MDYsIDI3ODE3LCAKLSAgICAyNzgyOCwgMjc4MzksIDI3ODUwLCAyNzg2MSwgMjc4NzIsIDI3ODgzLCAyNzg5NCwgMjc5MDUsIDI3OTE2LCAyNzkyNywgCi0gICAgMjc5MzgsIDI3OTQ5LCAyNzk2MCwgMjc5NzEsIDI3OTgyLCAyNzk5MywgMjgwMDQsIDI4MDE1LCAyODAyNiwgMjgwMzcsIAotICAgIDI4MDQ4LCAyODA1OSwgMjgwNzAsIDI4MDgxLCAyODA5MiwgMjgxMDMsIDI4MTE0LCAyODEyNSwgMjgxMzYsIDI4MTQ3LCAKLSAgICAyODE1OCwgMjgxNjksIDI4MTgwLCAyODE5MSwgMjgyMDIsIDI4MjEzLCAyODIyNCwgMjgyMzUsIDI4MjQ2LCAyODI1NywgCi0gICAgMjgyNjgsIDI4Mjc5LCAyODI5MCwgMjAxODEsIDI4MzAxLCAyODMxMiwgMjgzMjMsIDI4MzM0LCAyODM0NSwgMjgzNTYsIAotICAgIDI4MzY3LCAyODM3OCwgMjgzODksIDI4NDAwLCAyODQxMSwgMjg0MjIsIDI4NDMzLCAyODQ0NCwgMjg0NTUsIDI4NDY2LCAKLSAgICAyODQ3NywgMjg0ODgsIDI4NDk5LCAyODUxMCwgMjg1MjEsIDI4NTMyLCAyODU0MywgMjg1NTQsIDI4NTY1LCAyODU3NiwgCi0gICAgMjg1ODcsIDI4NTk4LCAyODYwOSwgMjg2MjAsIDI4NjMxLCAyODY0MiwgMjg2NTMsIDI4NjY0LCAyODY3NSwgMjg2ODYsIAotICAgIDI4Njk3LCAyODcwOCwgMjg3MTksIDI4NzMwLCAyODc0MSwgMjg3NTIsIDI4NzYzLCAyODc3NCwgMjg3ODUsIDI4Nzk2LCAKLSAgICAyODgwNywgMjg4MTgsIDI4ODI5LCAyODg0MCwgMjg4NTEsIDI4ODYyLCAyODg3MywgMjg4ODQsIDI4ODk1LCAyODkwNiwgCi0gICAgMjg5MTYsIDI4OTI2LCAyODkzNiwgMjg5NDYsIDI4OTU2LCAyODk2NiwgMjg5NzYsIDI4OTg2LCAyODk5NiwgMjkwMDYsIAotICAgIDI5MDE2LCAyOTAyNiwgMjkwMzYsIDI5MDQ2LCAyOTA1NiwgMjkwNjYsIDI5MDc2LCAyOTA4NiwgMjkwOTYsIDI5MTA2LCAKLSAgICAyOTExNiwgMjkxMjYsIDI5MTM2LCAyOTE0NiwgMjM4MjgsIDI5MTU2LCAyOTE2NiwgMjkxNzYsIDI5MTg2LCAyOTE5NiwgCi0gICAgMjkyMDYsIDI5MjE2LCAyOTIyNiwgMjkyMzYsIDEzNTQsIDI5MjQ2LCAyOTI1NiwgMjkyNjYsIDI5Mjc2LCAyOTI4NiwgCi0gICAgMjkyOTYsIDI5MzA2LCAyOTMxNiwgMjkzMjYsIDI5MzM2LCAyOTM0NiwgMjkzNTYsIDI5MzY2LCAyOTM3NiwgMjkzODYsIAotICAgIDI5Mzk2LCAyOTQwNiwgMjk0MTYsIDI5NDI2LCAyOTQzNiwgMjk0NDYsIDI5NDU2LCAyOTQ2NiwgMjk0NzYsIDI5NDg2LCAKLSAgICAyOTQ5NiwgMjk1MDYsIDI5NTE2LCAyOTUyNiwgMjk1MzYsIDI5NTQ2LCAyOTU1NiwgMjk1NjYsIDI5NTc2LCAyOTU4NiwgCi0gICAgMjk1OTYsIDI5NjA2LCAyOTYxNiwgMjk2MjYsIDI5NjM2LCAyOTY0NiwgMjk2NTYsIDI5NjY2LCAyOTY3NiwgMjk2ODYsIAotICAgIDI5Njk2LCAyOTcwNiwgMjk3MTYsIDI5NzI2LCAyOTczNiwgMjk3NDYsIDI5NzU2LCAyOTc2NiwgMjk3NzYsIDI5Nzg2LCAKLSAgICAyOTc5NiwgMjk4MDYsIDI5ODE2LCAyOTgyNiwgMjk4MzYsIDI5ODQ2LCAyOTg1NiwgMjk4NjYsIDI5ODc2LCAyOTg4NiwgCi0gICAgMjk4OTYsIDI5OTA2LCAyOTkxNiwgMjk5MjYsIDI5OTM2LCAyOTk0NiwgMjk5NTYsIDI5OTY2LCAyOTk3NiwgMjk5ODYsIAotICAgIDI5OTk2LCAzMDAwNiwgMzAwMTYsIDMwMDI2LCAyMTE1NywgMzAwMzYsIDI0NDI4LCAzMDA0NiwgMzAwNTYsIDMwMDY2LCAKLSAgICAzMDA3NiwgMzAwODYsIDMwMDk2LCAzMDEwNiwgMzAxMTYsIDMwMTI2LCAzMDEzNiwgMzAxNDYsIDMwMTU2LCAzMDE2NiwgCi0gICAgMzAxNzYsIDMwMTg2LCAzMDE5NiwgMzAyMDYsIDMwMjE2LCAzMDIyNiwgMzAyMzYsIDMwMjQ2LCAzMDI1NiwgMzAyNjYsIAotICAgIDMwMjc2LCAzMDI4NiwgMzAyOTYsIDMwMzA2LCAzMDMxNiwgMzAzMjYsIDMwMzM2LCAzMDM0NiwgMzAzNTYsIDMwMzY2LCAKLSAgICAzMDM3NiwgMzAzODYsIDMwMzk2LCAzMDQwNiwgMzA0MTYsIDMwNDI2LCAzMDQzNiwgMzA0NDYsIDMwNDU2LCAzMDQ2NiwgCi0gICAgMzA0NzYsIDMwNDg2LCAzMDQ5NiwgMzA1MDYsIDMwNTE2LCAzMDUyNiwgMzA1MzYsIDMwNTQ2LCAzMDU1NiwgMzA1NjYsIAotICAgIDMwNTc2LCAzMDU4NiwgMzA1OTYsIDMwNjA2LCAzMDYxNiwgMzA2MjYsIDMwNjM2LCAzMDY0NiwgMzA2NTYsIDMwNjY2LCAKLSAgICAzMDY3NiwgMzA2ODYsIDMwNjk2LCAzMDcwNiwgMzA3MTYsIDMwNzI2LCAzMDczNiwgMzA3NDYsIDMwNzU2LCAzMDc2NiwgCi0gICAgMzA3NzYsIDMwNzg2LCAzMDc5NiwgMzA4MDYsIDMwODE2LCAzMDgyNiwgMzA4MzYsIDMwODQ2LCAzMDg1NiwgMzA4NjYsIAotICAgIDMwODc2LCAzMDg4NiwgMzA4OTYsIDMwOTA2LCAzMDkxNiwgMzA5MjYsIDMwOTM2LCAzMDk0NiwgMzA5NTYsIDMwOTY2LCAKLSAgICAzMDk3NiwgMzA5ODYsIDMwOTk2LCAzMTAwNiwgMzEwMTYsIDMxMDI2LCAzMTAzNiwgMzEwNDYsIDMxMDU2LCAzMTA2NiwgCi0gICAgMzEwNzYsIDMxMDg2LCAzMTA5NiwgMzExMDYsIDMxMTE2LCAzMTEyNiwgMzExMzYsIDMxMTQ2LCAzMTE1NiwgMzExNjYsIAotICAgIDMxMTc2LCAzMTE4NiwgMzExOTYsIDMxMjA2LCAzMTIxNiwgMzEyMjYsIDMxMjM2LCAzMTI0NiwgMzEyNTYsIDMxMjY2LCAKLSAgICAzMTI3NiwgMzEyODYsIDMxMjk2LCAzMTMwNiwgMzEzMTYsIDMxMzI2LCAzMTMzNiwgMzEzNDYsIDMxMzU2LCAzMTM2NiwgCi0gICAgMzEzNzYsIDMxMzg2LCAzMTM5NiwgMzE0MDYsIDMxNDE2LCAzMTQyNiwgMzE0MzYsIDMxNDQ2LCAyODAwLCAzMTQ1NiwgCi0gICAgMzE0NjYsIDMxNDc2LCAzMTQ4NiwgMzE0OTYsIDMxNTA2LCAzMTUxNiwgMzE1MjYsIDMxNTM2LCAzMTU0NiwgMzE1NTYsIAotICAgIDMxNTY2LCAzMTU3NiwgMzE1ODYsIDMxNTk2LCAzMTYwNiwgMzE2MTYsIDMxNjI2LCAzMTYzNiwgMzE2NDYsIDMxNjU2LCAKLSAgICAzMTY2NiwgMzE2NzYsIDMxNjg2LCAzMTY5NiwgMzE3MDYsIDMxNzE2LCAzMTcyNiwgMzE3MzYsIDMxNzQ2LCAzMTc1NiwgCi0gICAgMzE3NjYsIDMxNzc2LCAzMTc4NiwgMzE3OTYsIDMxODA2LCAzMTgxNiwgMzE4MjYsIDMxODM2LCAzMTg0NiwgMzE4NTYsIAotICAgIDMxODY2LCAzMTg3NiwgMzE4ODYsIDMxODk2LCAzMTkwNiwgMzE5MTYsIDMxOTI2LCAzMTkzNiwgMzE5NDYsIDMxOTU2LCAKLSAgICAzMTk2NiwgMzE5NzYsIDMxOTg2LCAzMTk5NiwgMzIwMDYsIDMyMDE2LCAzMjAyNiwgMzIwMzYsIDMyMDQ2LCAzMjA1NiwgCi0gICAgMzIwNjYsIDMyMDc1LCAzMjA4NCwgMzIwOTMsIDMyMTAyLCAzMjExMSwgMzIxMjAsIDMyMTI5LCAzMjEzOCwgMzIxNDcsIAotICAgIDMyMTU2LCAzMjE2NSwgMzIxNzQsIDMyMTgzLCAzMjE5MiwgMzIyMDEsIDMyMjEwLCAzMjIxOSwgMzIyMjgsIDMyMjM3LCAKLSAgICAyMDU3MywgMzIyNDYsIDMyMjU1LCAzMjI2NCwgMzIyNzMsIDMyMjgyLCAzMjI5MSwgMzIzMDAsIDMyMzA5LCAzMjMxOCwgCi0gICAgMzIzMjcsIDMyMzM2LCAzMjM0NSwgMzIzNTQsIDMyMzYzLCAzMjM3MiwgMzIzODEsIDMyMzkwLCAzMjM5OSwgMzI0MDgsIAotICAgIDMyNDE3LCAzMjQyNiwgMzI0MzUsIDMyNDQ0LCAzMjQ1MywgMzI0NjIsIDMyNDcxLCAzMjQ4MCwgMzI0ODksIDMyNDk4LCAKLSAgICAzMjUwNywgMzI1MTYsIDMyNTI1LCAzMjUzNCwgMzI1NDMsIDMyNTUyLCAzMjU2MSwgMzI1NzAsIDMyNTc5LCAzMjU4OCwgCi0gICAgMzI1OTcsIDMyNjA2LCAzMjYxNSwgMzI2MjQsIDMyNjMzLCAzMjY0MiwgMzI2NTEsIDMyNjYwLCAzMjY2OSwgMzI2NzgsIAotICAgIDI2NzQxLCAzMjY4NywgMzI2OTYsIDMyNzA1LCAzMjcxNCwgMzI3MjMsIDMyNzMyLCAzMjc0MSwgMzI3NTAsIDMyNzU5LCAKLSAgICAzMjc2OCwgMzI3NzcsIDMyNzg2LCAzMjc5NSwgMzI4MDQsIDMyODEzLCAzMjgyMiwgMzI4MzEsIDMyODQwLCAzMjg0OSwgCi0gICAgMzI4NTgsIDMyODY3LCAzMjg3NiwgMzI4ODUsIDMyODk0LCAzMjkwMywgMzI5MTIsIDMyOTIxLCAzMjkzMCwgMzI5MzksIAotICAgIDMyOTQ4LCAyNjk1MCwgMzI5NTcsIDMyOTY2LCAzMjk3NSwgMzI5ODQsIDMyOTkzLCAzMzAwMiwgMzMwMTEsIDMzMDIwLCAKLSAgICAzMzAyOSwgMzMwMzgsIDMzMDQ3LCAzMzA1NiwgMzMwNjUsIDMzMDc0LCAzMzA4MywgMzMwOTIsIDMzMTAxLCAzMzExMCwgCi0gICAgMzMxMTksIDMzMTI4LCAzMzEzNywgMzMxNDYsIDMzMTU1LCAzMzE2NCwgMzMxNzMsIDMzMTgyLCAxMjY5LCAzMzE5MSwgCi0gICAgMzMyMDAsIDMzMjA5LCAzMzIxOCwgMzMyMjcsIDMzMjM2LCAzMzI0NSwgMzMyNTQsIDMzMjYzLCAzMzI3MiwgMzMyODEsIAotICAgIDMzMjkwLCAzMzI5OSwgMzMzMDgsIDMzMzE3LCAzMzMyNiwgMzMzMzUsIDMyMDI3LCAzMzM0NCwgMzMzNTMsIDMzMzYyLCAKLSAgICAzMzM3MSwgMzMzODAsIDMzMzg5LCAzMzM5OCwgMzM0MDcsIDMzNDE2LCAzMzQyNSwgMzM0MzQsIDMzNDQzLCAzMzQ1MiwgCi0gICAgMzM0NjEsIDMzNDcwLCAzMzQ3OSwgMzM0ODgsIDMzNDk3LCAzMzUwNiwgMzM1MTUsIDMzNTI0LCAzMzUzMywgMzM1NDIsIAotICAgIDMzNTUxLCAzMzU2MCwgMzM1NjksIDMzNTc4LCAzMzU4NywgMzM1OTYsIDMzNjA1LCAzMzYxNCwgMzM2MjMsIDMzNjMyLCAKLSAgICAzMzY0MSwgMzM2NTAsIDMzNjU5LCAzMzY2OCwgMzM2NzcsIDMzNjg2LCAzMzY5NSwgMzM3MDQsIDMzNzEzLCAzMzcyMiwgCi0gICAgMzM3MzEsIDMzNzQwLCAzMzc0OSwgMzM3NTgsIDMzNzY3LCAzMzc3NiwgMzM3ODUsIDMzNzk0LCAzMzgwMywgMzM4MTIsIAotICAgIDMzODIxLCAzMzgzMCwgMzM4MzksIDMzODQ4LCAzMzg1NywgMzM4NjYsIDMzODc1LCAzMzg4NCwgMzM4OTMsIDMzOTAyLCAKLSAgICAzMzkxMSwgMzM5MjAsIDMzOTI5LCAzMzkzOCwgMzM5NDcsIDMzOTU2LCAzMzk2NSwgMzM5NzQsIDMzOTgzLCAzMzk5MiwgCi0gICAgMzQwMDEsIDM0MDEwLCAzNDAxOSwgMzQwMjgsIDM0MDM3LCAzNDA0NiwgMzQwNTUsIDM0MDY0LCAzNDA3MywgMzQwODIsIAotICAgIDM0MDkxLCAzNDEwMCwgMzQxMDksIDM0MTE4LCAzNDEyNywgMzQxMzYsIDM0MTQ1LCAzNDE1NCwgMzQxNjMsIDM0MTcyLCAKLSAgICAzNDE4MSwgMzQxOTAsIDM0MTk5LCAzNDIwOCwgMzQyMTcsIDM0MjI2LCAzNDIzNSwgMzQyNDQsIDM0MjUzLCAzNDI2MiwgCi0gICAgMzQyNzEsIDM0MjgwLCAzNDI4OSwgMzQyOTgsIDM0MzA3LCAzNDMxNiwgMzQzMjUsIDM0MzM0LCAzNDM0MywgMzQzNTIsIAotICAgIDM0MzYxLCAzNDM3MCwgMzQzNzksIDM0Mzg4LCAzNDM5NywgMzQ0MDYsIDM0NDE1LCAzNDQyNCwgMzQ0MzMsIDM0NDQyLCAKLSAgICAzNDQ1MSwgMzQ0NjAsIDM0NDY5LCAzNDQ3OCwgMzQ0ODcsIDM0NDk2LCAzNDUwNSwgMzQ1MTQsIDM0NTIzLCAzNDUzMiwgCi0gICAgMzQ1NDEsIDM0NTUwLCAzNDU1OSwgMTE2MTcsIDM0NTY4LCAzNDU3NywgMzQ1ODYsIDM0NTk1LCAzNDYwNCwgMzQ2MTMsIAotICAgIDM0NjIyLCAzNDYzMSwgMzQ2NDAsIDM0NjQ5LCAzNDY1OCwgMzQ2NjcsIDM0Njc2LCAzNDY4NSwgMzQ2OTQsIDM0NzAzLCAKLSAgICAzNDcxMiwgMzQ3MjEsIDM0NzMwLCAzNDczOSwgMzQ3NDgsIDM0NzU3LCAzNDc2NiwgMzQ3NzUsIDM0Nzg0LCAzNDc5MywgCi0gICAgMzQ4MDIsIDM0ODExLCAzNDgyMCwgMzQ4MjksIDM0ODM4LCAzNDg0NywgMzQ4NTYsIDM0ODY1LCAzNDg3NCwgMzQ4ODMsIAotICAgIDM0ODkyLCAzNDkwMSwgMzQ5MTAsIDM0OTE5LCAzNDkyOCwgMzQ5MzcsIDM0OTQ2LCAzNDk1NSwgMzQ5NjQsIDM0OTczLCAKLSAgICAzNDk4MiwgMzQ5OTEsIDM1MDAwLCAzNTAwOSwgMzUwMTgsIDM1MDI3LCAzNTAzNiwgMzUwNDUsIDM1MDU0LCAzNTA2MywgCi0gICAgMzUwNzIsIDM1MDgxLCAzNTA5MCwgMzUwOTksIDM1MTA4LCAzNTExNywgMzUxMjYsIDM1MTM1LCAzNTE0NCwgMzUxNTMsIAotICAgIDM1MTYyLCAyNjk5LCAzNTE3MSwgMzUxODAsIDM1MTg5LCAzNTE5OCwgMzUyMDcsIDM1MjE2LCAzNTIyNSwgMzUyMzQsIAotICAgIDM1MjQzLCAzNTI1MiwgMzUyNjEsIDM1MjcwLCAzNTI3OSwgMzUyODgsIDM1Mjk3LCAzNTMwNiwgMzUzMTUsIDM1MzI0LCAKLSAgICAzNTMzMywgMzUzNDIsIDM1MzUxLCAzNTM2MCwgMzUzNjksIDM1Mzc4LCAzNTM4NywgMzUzOTYsIDM1NDA1LCAzNTQxNCwgCi0gICAgMzU0MjMsIDM1NDMyLCAzNTQ0MSwgMzU0NTAsIDM1NDU5LCAzNTQ2OCwgMzU0NzcsIDM1NDg2LCAzNTQ5NSwgMzU1MDQsIAotICAgIDM1NTEzLCAzNTUyMiwgMzU1MzEsIDM1NTM5LCAzNTU0NywgMzU1NTUsIDM1NTYzLCAzNTU3MSwgMzU1NzksIDM1NTg3LCAKLSAgICAzNTU5NSwgMTk4OTAsIDM1NjAzLCAzNTYxMSwgMzU2MTksIDM1NjI3LCAzNTYzNSwgMzU2NDMsIDM1NjUxLCAzNTY1OSwgCi0gICAgMzU2NjcsIDM1Njc1LCAzNTY4MywgMzU2OTEsIDM1Njk5LCAzNTcwNywgMzU3MTUsIDM1NzIzLCAzNTczMSwgMzU3MzksIAotICAgIDM1NzQ3LCAzNTc1NSwgMzU3NjMsIDM1NzcxLCAyOTQyOCwgMzU3NzksIDM1Nzg3LCAzNTc5NSwgMzU4MDMsIDM1ODExLCAKLSAgICAzNTgxOSwgMzU4MjcsIDM1ODM1LCAzNTg0MywgMzU4NTEsIDIxMjc2LCAzNTg1OSwgMzU4NjcsIDM1ODc1LCAzNTg4MywgCi0gICAgMzU4OTEsIDM1ODk5LCAzNTkwNywgMzU5MTUsIDM1OTIzLCAzNTkzMSwgMzU5MzksIDIxNDg0LCAxOTkxOCwgMzU5NDcsIAotICAgIDM1OTU1LCAxNDUzLCAzNTk2MywgMzU5NzEsIDI4OTgsIDM1OTc5LCAyODE4LCAzNTk4NywgMzU5OTUsIDM2MDAzLCAzNjAxMSwgCi0gICAgMTk5NzQsIDM2MDE5LCAzNjAyNywgMzYwMzUsIDM2MDQzLCAzNjA1MSwgMjA2MDAsIDM2MDU5LCAyNDEwNiwgMzYwNjcsIAotICAgIDM2MDc1LCAzNjA4MywgMzYwOTEsIDM2MDk5LCAzNjEwNywgMzYxMTUsIDM2MTIzLCAzNjEzMSwgMzYxMzksIDM2MTQ3LCAKLSAgICAzNjE1NSwgMzYxNjMsIDM2MTcxLCAzMjU4OSwgMzYxNzksIDM2MTg3LCAzNjE5NSwgMzYyMDMsIDM2MjExLCAzNjIxOSwgCi0gICAgMzYyMjcsIDM2MjM1LCAzNjI0MywgMzYyNTEsIDM2MjU5LCAzNjI2NywgMTgzMywgMzYyNzUsIDM2MjgzLCAzNjI5MSwgCi0gICAgMzYyOTksIDM2MzA3LCAzNjMxNSwgMzYzMjMsIDM2MzMxLCAzNjMzOSwgMzYzNDcsIDM2MzU1LCAzNjM2MywgMzYzNzEsIAotICAgIDM2Mzc5LCAzNjM4NywgMzYzOTUsIDM2NDAzLCAzNjQxMSwgMzY0MTksIDM2NDI3LCAzNjQzNSwgMzY0NDMsIDM2NDUxLCAKLSAgICAzNjQ1OSwgMzY0NjcsIDM2NDc1LCAzNjQ4MywgMzY0OTEsIDM2NDk5LCAzNjUwNywgMzY1MTUsIDM2NTIzLCAzNjUzMSwgCi0gICAgMzY1MzksIDM2NTQ3LCAzNjU1NSwgMzY1NjMsIDM2NTcxLCAzNjU3OSwgMzY1ODcsIDM2NTk1LCAzNjYwMywgMzY2MTEsIAotICAgIDM2NjE5LCAzNjYyNywgMzY2MzUsIDM2NjQzLCAzNjY1MSwgMzY2NTksIDM2NjY3LCAzNjY3NSwgMzY2ODMsIDI5MjA4LCAKLSAgICAzNjY5MSwgMzY2OTksIDM2NzA3LCAzNjcxNSwgMzY3MjMsIDM2NzMxLCAzNjczOSwgMzY3NDcsIDM2NzU1LCAzNjc2MywgCi0gICAgMzY3NzEsIDM2Nzc5LCAzNjc4NywgMzY3OTUsIDM2ODAzLCAzNjgxMSwgMzMxNzQsIDM2ODE5LCAzNjgyNywgMzY4MzUsIAotICAgIDM2ODQzLCAzNjg1MSwgMzY4NTksIDM2ODY3LCAzNjg3NSwgMzY4ODMsIDM2ODkxLCAzNjg5OSwgMzY5MDcsIDM2OTE1LCAKLSAgICAzNjkyMywgMzY5MzEsIDM2OTM5LCAzNjk0NywgMzY5NTUsIDM2OTYzLCAzNjk3MSwgMzY5NzksIDM2OTg3LCAzNjk5NSwgCi0gICAgMzcwMDMsIDM3MDExLCAzNzAxOSwgMzcwMjcsIDM3MDM1LCAzNzA0MywgMzcwNTEsIDM3MDU5LCAzNzA2NywgMzcwNzUsIAotICAgIDM3MDgzLCAzNzA5MSwgMzcwOTksIDM3MTA3LCAzNzExNSwgMzcxMjMsIDM3MTMxLCAzNzEzOSwgMzcxNDcsIDM3MTU1LCAKLSAgICAyOTI4OCwgMzcxNjMsIDM3MTcxLCAzNzE3OSwgMzcxODcsIDM3MTk1LCAzNzIwMywgMzcyMTEsIDM3MjE5LCAzNzIyNywgCi0gICAgMzcyMzUsIDM3MjQzLCAzNzI1MSwgMzcyNTksIDM3MjY3LCAzNzI3NSwgMzcyODMsIDM3MjkxLCAzNzI5OSwgMzczMDcsIAotICAgIDI4MzA0LCAzNzMxNSwgMzczMjMsIDM3MzMxLCAzNzMzOSwgMzczNDcsIDM3MzU1LCAzNzM2MywgMzczNzEsIDM3Mzc5LCAKLSAgICAzNzM4NywgMzczOTUsIDM3NDAzLCAzNzQxMSwgMzc0MTksIDM3NDI3LCAzNzQzNSwgMzc0NDMsIDM3NDUxLCAzNzQ1OSwgCi0gICAgMzc0NjcsIDM3NDc1LCAzNzQ4MywgMzc0OTEsIDM3NDk5LCAzNzUwNywgMzc1MTUsIDM3NTIzLCAzNzUzMSwgMzc1MzksIAotICAgIDM3NTQ3LCAzNzU1NSwgMzc1NjMsIDM3NTcxLCAzNzU3OSwgMzc1ODcsIDM3NTk1LCAzNzYwMywgMzc2MTEsIDMzMjI4LCAKLSAgICAzNzYxOSwgMzc2MjcsIDM3NjM1LCAzNzY0MywgMzc2NTEsIDM3NjU5LCAzNzY2NywgMzc2NzUsIDM3NjgzLCAzNzY5MSwgCi0gICAgMzc2OTksIDM3NzA3LCAzNzcxNSwgMzc3MjMsIDI4NDU4LCAzNzczMSwgMzc3MzksIDI3ODUsIDM3NzQ3LCAzNzc1NSwgCi0gICAgMzc3NjMsIDM3NzcxLCAzNzc3OSwgMzc3ODcsIDM3Nzk1LCAzNzgwMywgMzc4MTEsIDM1MTM2LCAzNzgxOSwgMzc4MjcsIAotICAgIDM3ODM1LCAzNzg0MywgMzc4NTEsIDM3ODU5LCAzNzg2NywgMzc4NzUsIDM3ODgzLCAzNzg5MSwgMzc4OTksIDM3OTA3LCAKLSAgICAzNzkxNSwgMzc5MjMsIDM3OTMxLCAzNzkzOSwgMzc5NDcsIDM3OTU1LCAzNzk2MywgMzc5NzEsIDM3OTc5LCAzNzk4NywgCi0gICAgMzc5OTUsIDI4NjYsIDM4MDAzLCAzODAxMSwgMTE3MTQsIDM4MDE5LCAzODAyNywgMzgwMzUsIDM4MDQzLCAzODA1MSwgCi0gICAgMzgwNTksIDM4MDY3LCAzODA3NSwgMzgwODMsIDM4MDkxLCAyNTA3OCwgMzgwOTksIDM4MTA3LCAzODExNSwgMzgxMjMsIAotICAgIDM4MTMxLCAzODEzOSwgMzgxNDcsIDM4MTU1LCAzODE2MywgMzgxNzEsIDM4MTc5LCAzODE4NywgMzgxOTUsIDM4MjAzLCAKLSAgICAzODIxMSwgMzgyMTksIDM4MjI3LCAzODIzNSwgMzgyNDMsIDM4MjUxLCAzODI1OSwgMzgyNjcsIDM4Mjc1LCAzODI4MywgCi0gICAgMzgyOTEsIDM4Mjk5LCAzODMwNywgMzgzMTUsIDM4MzIzLCAzODMzMSwgMzgzMzksIDM4MzQ3LCAzODM1NSwgMzgzNjMsIAotICAgIDM4MzcxLCAzODM3OSwgMzgzODcsIDIwNzY5LCAzODM5NSwgMzg0MDMsIDM4NDExLCAzODQxOSwgMzg0MjcsIDM4NDM1LCAKLSAgICAzODQ0MywgMzg0NTEsIDM4NDU5LCAxNzI4LCAzODQ2NywgMzg0NzUsIDM4NDgzLCAzODQ5MSwgMzg0OTksIDM4NTA3LCAKLSAgICAzODUxNSwgMzg1MjMsIDM4NTMxLCAzODUzOSwgMzg1NDcsIDM4NTU1LCAzODU2MywgMzg1NzEsIDI2NDM0LCAzODU3OSwgCi0gICAgMzg1ODcsIDM4NTk1LCAzODYwMywgMzg2MTEsIDM4NjE5LCAzODYyNywgMzg2MzUsIDM4NjQzLCAzODY1MSwgMzg2NTksIAotICAgIDM4NjY3LCAzODY3NSwgMzg2ODMsIDM4NjkxLCAzODY5OSwgMzg3MDcsIDM4NzE1LCAzODcyMywgMzg3MzEsIDM4NzM5LCAKLSAgICAzODc0NywgMzg3NTUsIDM4NzYzLCAzODc3MSwgMjA1MjAsIDM4Nzc5LCAzODc4NywgMzg3OTUsIDM4ODAzLCAzODgxMSwgCi0gICAgMzg4MTksIDM4ODI3LCAzODgzNSwgMzg4NDMsIDM4ODUxLCAzODg1OSwgMzg4NjcsIDMwOTk4LCAzODg3NSwgMzg4ODMsIAotICAgIDM4ODkxLCAzODg5OSwgMzg5MDcsIDM4OTE1LCAzODkyMywgMzg5MzEsIDM4OTM5LCAzODk0NywgMzg5NTUsIDM4OTYyLCAKLSAgICAyMDk2NSwgMzg5NjksIDM4OTc2LCAzODk4MywgMzg5OTAsIDM4OTk3LCAzOTAwNCwgMzkwMTEsIDM5MDE4LCAzOTAyNSwgCi0gICAgMjA2NzksIDM5MDMyLCAzOTAzOSwgMzkwNDYsIDM5MDUzLCAzOTA2MCwgMzkwNjcsIDM5MDc0LCAzOTA4MSwgMzkwODgsIAotICAgIDM5MDk1LCAzOTEwMiwgMzkxMDksIDM5MTE2LCAzOTEyMywgMzkxMzAsIDM5MTM3LCAzOTE0NCwgMzkxNTEsIDM5MTU4LCAKLSAgICAzOTE2NSwgMzkxNzIsIDM5MTc5LCAzOTE4NiwgMTE4OTgsIDM5MTkzLCAzOTIwMCwgMzkyMDcsIDM5MjE0LCAzOTIyMSwgCi0gICAgMzkyMjgsIDM5MjM1LCAzOTI0MiwgMzkyNDksIDM5MjU2LCAzOTI2MywgMzkyNzAsIDM5Mjc3LCAzOTI4NCwgMzkyOTEsIAotICAgIDM5Mjk4LCAzOTMwNSwgMzkzMTIsIDM5MzE5LCAzOTMyNiwgMzkzMzMsIDM5MzQwLCAzOTM0NywgMzkzNTQsIDM5MzYxLCAKLSAgICAzOTM2OCwgMTQ5MiwgMzkzNzUsIDM5MzgyLCAzOTM4OSwgMTU4NSwgMzkzOTYsIDM5NDAzLCAzOTQxMCwgMzk0MTcsIAotICAgIDM5NDI0LCAzOTQzMSwgMzk0MzgsIDM5NDQ1LCAzOTQ1MiwgMzk0NTksIDM5NDY2LCAzOTQ3MywgMzk0ODAsIDM5NDg3LCAKLSAgICAzOTQ5NCwgMTMzNiwgMzk1MDEsIDM5NTA4LCAzOTUxNSwgMzk1MjIsIDM5NTI5LCAzOTUzNiwgMzk1NDMsIDM5NTUwLCAKLSAgICAzOTU1NywgMzk1NjQsIDM5NTcxLCAzOTU3OCwgMzk1ODUsIDM5NTkyLCAzOTU5OSwgMzIzNTYsIDM5NjA2LCAzOTYxMywgCi0gICAgMzk2MjAsIDM5NjI3LCAzOTYzNCwgMzk2NDEsIDM5NjQ4LCAzOTY1NSwgMzk2NjIsIDM5NjY5LCAyODQ0OCwgMzk2NzYsIAotICAgIDM5NjgzLCAzOTY5MCwgMzk2OTcsIDM5NzA0LCAzOTcxMSwgMzk3MTgsIDM5NzI1LCAzOTczMiwgMzk3MzksIDIzODU1LCAKLSAgICAzOTc0NiwgMzk3NTMsIDM5NzYwLCAzOTc2NywgMzk3NzQsIDM5NzgxLCAzOTc4OCwgMzk3OTUsIDM5ODAyLCAzOTgwOSwgCi0gICAgMzk4MTYsIDM5ODIzLCAzOTgzMCwgMzk4MzcsIDM5ODQ0LCAzOTg1MSwgMzk4NTgsIDM5ODY1LCAzOTg3MiwgMzk4NzksIAotICAgIDM5ODg2LCAzOTg5MywgMzk5MDAsIDM5OTA3LCAzOTkxNCwgMzk5MjEsIDM5OTI4LCAzOTkzNSwgMzk5NDIsIDM5OTQ5LCAKLSAgICAzOTk1NiwgMzk5NjMsIDM5OTcwLCAzOTk3NywgMzk5ODQsIDM5OTkxLCAzOTk5OCwgNDAwMDUsIDQwMDEyLCA0MDAxOSwgCi0gICAgNDAwMjYsIDQwMDMzLCA0MDA0MCwgNDAwNDcsIDQwMDU0LCA0MDA2MSwgNDAwNjgsIDQwMDc1LCA0MDA4MiwgNDAwODksIAotICAgIDQwMDk2LCA0MDEwMywgNDAxMTAsIDQwMTE3LCA0MDEyNCwgNDAxMzEsIDQwMTM4LCA0MDE0NSwgNDAxNTIsIDQwMTU5LCAKLSAgICA0MDE2NiwgNDAxNzMsIDQwMTgwLCA0MDE4NywgNDAxOTQsIDQwMjAxLCA0MDIwOCwgNDAyMTUsIDQwMjIyLCA0MDIyOSwgCi0gICAgNDAyMzYsIDQwMjQzLCA0MDI1MCwgNDAyNTcsIDQwMjY0LCA0MDI3MSwgNDAyNzgsIDQwMjg1LCAzMzAyMiwgNDAyOTIsIAotICAgIDQwMjk5LCA0MDMwNiwgNDAzMTMsIDQwMzIwLCA0MDMyNywgNDAzMzQsIDQwMzQxLCA0MDM0OCwgNDAzNTUsIDQwMzYyLCAKLSAgICA0MDM2OSwgNDAzNzYsIDQwMzgzLCA0MDM5MCwgNDAzOTcsIDQwNDA0LCA0MDQxMSwgNDA0MTgsIDQwNDI1LCA0MDQzMiwgCi0gICAgNDA0MzksIDQwNDQ2LCA0MDQ1MywgNDA0NjAsIDQwNDY3LCA0MDQ3NCwgNDA0ODEsIDQwNDg4LCA0MDQ5NSwgNDA1MDIsIAotICAgIDI3MTA2LCA0MDUwOSwgNDA1MTYsIDQwNTIzLCA0MDUzMCwgNDA1MzcsIDQwNTQ0LCA0MDU1MSwgNDA1NTgsIDQwNTY1LCAKLSAgICA0MDU3MiwgNDA1NzksIDQwNTg2LCAzMjU5MCwgNDA1OTMsIDQwNjAwLCA0MDYwNywgNDA2MTQsIDQwNjIxLCA0MDYyOCwgCi0gICAgNDA2MzUsIDQwNjQyLCA0MDY0OSwgMTc2NSwgNDA2NTYsIDQwNjYzLCA0MDY3MCwgNDA2NzcsIDQwNjg0LCA0MDY5MSwgCi0gICAgNDA2OTgsIDQwNzA1LCA0MDcxMiwgNDA3MTksIDQwNzI2LCA0MDczMywgNDA3NDAsIDQwNzQ3LCA0MDc1NCwgNDA3NjEsIAotICAgIDQwNzY4LCA0MDc3NSwgNDA3ODIsIDQwNzg5LCA0MDc5NiwgNDA4MDMsIDQwODEwLCA0MDgxNywgNDA4MjQsIDQwODMxLCAKLSAgICA0MDgzOCwgNDA4NDUsIDQwODUyLCA0MDg1OSwgNDA4NjYsIDQwODczLCA0MDg4MCwgNDA4ODcsIDQwODk0LCA0MDkwMSwgCi0gICAgNDA5MDgsIDQwOTE1LCA0MDkyMiwgNDA5MjksIDQwOTM2LCA0MDk0MywgNDA5NTAsIDQwOTU3LCA0MDk2NCwgNDA5NzEsIAotICAgIDQwOTc4LCA0MDk4NSwgNDA5OTIsIDQwOTk5LCA0MTAwNiwgNDEwMTMsIDQxMDIwLCAzMzIyOSwgNDEwMjcsIDQxMDM0LCAKLSAgICA0MTA0MSwgNDEwNDgsIDQxMDU1LCA0MTA2MiwgNDEwNjksIDQxMDc2LCA0MTA4MywgNDEwOTAsIDQxMDk3LCA0MTEwNCwgCi0gICAgNDExMTEsIDQxMTE4LCA0MTEyNSwgNDExMzIsIDQxMTM5LCA0MTE0NiwgNDExNTMsIDQxMTYwLCAzMTIzOSwgNDExNjcsIAotICAgIDQxMTc0LCA0MTE4MSwgNDExODgsIDQxMTk1LCA0MTIwMiwgNDEyMDksIDQxMjE2LCA0MTIyMywgNDEyMzAsIDI4MzQ5LCAKLSAgICA0MTIzNywgNDEyNDQsIDQxMjUxLCA0MTI1OCwgNDEyNjUsIDQxMjcyLCA0MTI3OSwgNDEyODYsIDQxMjkzLCA0MTMwMCwgCi0gICAgNDEzMDcsIDQxMzE0LCA0MTMyMSwgNDEzMjgsIDM2OTAwLCA0MTMzNSwgNDEzNDIsIDQxMzQ5LCA0MTM1NiwgNDEzNjMsIAotICAgIDQxMzcwLCA0MTM3NywgNDEzODQsIDQxMzkxLCA0MTM5OCwgNDE0MDUsIDQxNDEyLCA0MTQxOSwgNDE0MjYsIDQxNDMzLCAKLSAgICA0MTQ0MCwgNDE0NDcsIDQxNDU0LCA0MTQ2MSwgNDE0NjgsIDQxNDc1LCA0MTQ4MiwgMzc4NzYsIDQxNDg5LCA0MTQ5NiwgCi0gICAgNDE1MDMsIDQxNTEwLCA0MTUxNywgNDE1MjQsIDQxNTMxLCA0MTUzOCwgNDE1NDUsIDQxNTUyLCA0MTU1OSwgNDE1NjYsIAotICAgIDQxNTczLCA0MTU4MCwgNDE1ODcsIDQxNTk0LCA0MTYwMSwgNDE2MDgsIDQxNjE1LCA0MTYyMiwgNDE2MjksIDQxNjM2LCAKLSAgICA0MTY0MywgNDE2NTAsIDQxNjU3LCA0MTY2NCwgNDE2NzEsIDQxNjc4LCA0MTY4NSwgNDE2OTIsIDQxNjk5LCA0MTcwNiwgCi0gICAgNDE3MTMsIDQxNzIwLCA0MTcyNywgMzExOTksIDQxNzM0LCA0MTc0MSwgNDE3NDgsIDQxNzU1LCA0MTc2MiwgNDE3NjksIAotICAgIDM4MjUyLCA0MTc3NiwgNDE3ODMsIDQxNzkwLCA0MTc5NywgNDE4MDQsIDQxODExLCA0MTgxOCwgNDE4MjUsIDQxODMyLCAKLSAgICA0MTgzOSwgNDE4NDYsIDQxODUzLCA0MTg2MCwgMzU3MDgsIDQxODY3LCA0MTg3NCwgNDE4ODEsIDQxODg4LCA0MTg5NSwgCi0gICAgNDE5MDIsIDQxOTA5LCA0MTkxNiwgNDE5MjMsIDQxOTMwLCA0MTkzNywgNDE5NDQsIDQxOTUxLCA0MTk1OCwgNDE5NjUsIAotICAgIDQxOTcyLCA0MTk3OSwgNDE5ODYsIDQxOTkzLCA0MjAwMCwgNDIwMDcsIDQyMDE0LCA0MjAyMSwgNDIwMjgsIDQyMDM1LCAKLSAgICA0MjA0MiwgNDIwNDksIDQyMDU2LCA0MjA2MywgNDIwNzAsIDQyMDc3LCA0MjA4NCwgNDIwOTEsIDQyMDk4LCA0MjEwNSwgCi0gICAgNDIxMTIsIDQyMTE5LCA0MjEyNiwgNDIxMzMsIDQyMTQwLCA0MjE0NywgNDIxNTQsIDQyMTYxLCA0MjE2OCwgNDIxNzUsIAotICAgIDQyMTgyLCAyNDkzNSwgNDIxODksIDQyMTk2LCA0MjIwMywgNDIyMTAsIDQyMjE3LCA0MjIyNCwgNDIyMzEsIDQyMjM4LCAKLSAgICA0MjI0NSwgNDIyNTIsIDQyMjU5LCA0MjI2NiwgNDIyNzMsIDQyMjgwLCA0MjI4NywgNDIyOTQsIDQyMzAxLCA0MjMwOCwgCi0gICAgNDIzMTUsIDQyMzIyLCA0MjMyOSwgNDIzMzYsIDQyMzQzLCA0MjM1MCwgNDIzNTcsIDQyMzY0LCA0MjM3MSwgNDIzNzgsIAotICAgIDMzMjQ3LCA0MjM4NSwgNDIzOTIsIDQyMzk5LCA0MjQwNiwgMzA5OTksIDQyNDEzLCA0MjQyMCwgNDI0MjcsIDQyNDM0LCAKLSAgICA0MjQ0MSwgNDI0NDgsIDQyNDU1LCA0MjQ2MiwgNDI0NjksIDQyNDc2LCA0MjQ4MywgNDI0OTAsIDQyNDk3LCA0MjUwNCwgCi0gICAgNDI1MTEsIDQyNTE4LCAxNjc2LCA0MjUyNSwgNDI1MzEsIDQyNTM3LCAyOTYwMCwgMzAwNDAsIDQyNTQzLCA0MjU0OSwgCi0gICAgNDI1NTUsIDQyNTYxLCAyMTQzNCwgNDI1NjcsIDQyNTczLCA0MjU3OSwgNDI1ODUsIDQyNTkxLCA0MjU5NywgNDI2MDMsIAotICAgIDI5ODQwLCA0MjYwOSwgNDI2MTUsIDQxMTQwLCA0MjYyMSwgNDI2MjcsIDQyNjMzLCAzNTk2NSwgNDI2MzksIDQyNjQ1LCAKLSAgICA0MjY1MSwgNDI2NTcsIDI5MDcwLCA0MjY2MywgNDI2NjksIDI5OTQwLCA0MjY3NSwgNDI2ODEsIDQyNjg3LCA0MjY5MywgCi0gICAgNDI2OTksIDQyNzA1LCA0MjcxMSwgNDI1MTksIDQyNzE3LCA0MjcyMywgNDI3MjksIDQyNzM1LCA0Mjc0MSwgNDI3NDcsIAotICAgIDI5MTcwLCA0Mjc1MywgNDI3NTksIDQyNzY1LCA0Mjc3MSwgNDI3NzcsIDQyNzgzLCA0Mjc4OSwgNDI3OTUsIDQyODAxLCAKLSAgICA0MjgwNywgNDI4MTMsIDQyODE5LCA0MjgyNSwgMjkyMzAsIDQyODMxLCA0MjgzNywgNDI4NDMsIDQyODQ5LCA0Mjg1NSwgCi0gICAgNDI4NjEsIDQyODY3LCA0Mjg3MywgMjY4NzYsIDQyODc5LCA0Mjg4NSwgNDI4OTEsIDQyODk3LCAyMDkyNywgNDI5MDMsIAotICAgIDQyOTA5LCA0MjkxNSwgNDI5MjEsIDQyOTI3LCAyMzg4MCwgMjk0NjAsIDQyOTMzLCA0MjkzOSwgNDI5NDUsIDQyOTUxLCAKLSAgICAyMDY5MywgNDI5NTcsIDQyOTYzLCA0Mjk2OSwgNDI5NzUsIDQyOTgxLCAxMjk0LCA0Mjk4NywgNDI5OTMsIDE1MzEsIAotICAgIDI0MzM2LCA0Mjk5OSwgNDMwMDUsIDE5OTQ4LCA0MzAxMSwgMjQyMDQsIDQzMDE3LCAxMzk4LCAyMDM2OCwgNDMwMjMsIAotICAgIDQzMDI5LCAyMDkxNCwgNDMwMzUsIDQzMDQxLCA0MzA0NywgNDMwNTMsIDQzMDU5LCA0MzA2NSwgNDMwNzEsIDQzMDc3LCAKLSAgICA0MzA4MywgNDMwODksIDQzMDk1LCAzNjE4MSwgNDMxMDEsIDQzMTA3LCA0MzExMywgNDMxMTksIDQzMTI1LCA0MzEzMSwgCi0gICAgMjkwODAsIDQzMTM3LCA0MzE0MywgNDMxNDksIDQzMTU1LCA0MzE2MSwgNDMxNjcsIDQzMTczLCA0MzE3OSwgNDMxODUsIAotICAgIDQzMTkxLCA0MzE5NywgNDMyMDMsIDQzMjA5LCA0MzIxNSwgNDMyMjEsIDQzMjI3LCA0MzIzMywgMjQyMTYsIDExODI0LCAKLSAgICAzMjA2OSwgNDMyMzksIDQzMjQ1LCA0MzI1MSwgNDMyNTcsIDQzMjYzLCA0MzI2OSwgNDMyNzUsIDQzMjgxLCA0MzI4NywgCi0gICAgNDMyOTMsIDQzMjk5LCA0MzMwNSwgNDMzMTEsIDQzMzE3LCA0MzMyMywgNDMzMjksIDQzMzM1LCA0MzM0MSwgNDMzNDcsIAotICAgIDQzMzUzLCA0MzM1OSwgNDMzNjUsIDQzMzcxLCA0MzM3NywgNDMzODMsIDQzMzg5LCA0MzM5NSwgNDM0MDEsIDQzNDA3LCAKLSAgICA0MzQxMywgNDM0MTksIDQzNDI1LCA0MzQzMSwgNDM0MzcsIDQzNDQzLCA0MzQ0OSwgNDM0NTUsIDQzNDYxLCA0MzQ2NywgCi0gICAgNDM0NzMsIDQzNDc5LCA0MzQ4NSwgNDM0OTEsIDI4Nzc5LCA0MzQ5NywgNDM1MDMsIDQzNTA5LCA0MzUxNSwgNDM1MjEsIAotICAgIDQzNTI3LCA0MzUzMywgNDM1MzksIDQzNTQ1LCA0MzU1MSwgNDM1NTcsIDQzNTYzLCAzMzI1NywgMjkxNDAsIDQzNTY5LCAKLSAgICA0MzU3NSwgNDM1ODEsIDQzNTg3LCA0MzU5MywgNDM1OTksIDQzNjA1LCA0MzYxMSwgNDM2MTcsIDQzNjIzLCA0MzYyOSwgCi0gICAgNDM2MzUsIDQzNjQxLCA0MzY0NywgNDM2NTMsIDQzNjU5LCA0MzY2NSwgNDM2NzEsIDQzNjc3LCA0MzY4MywgNDM2ODksIAotICAgIDQzNjk1LCA0MzcwMSwgNDM3MDcsIDQzNzEzLCA0MzcxOSwgNDM3MjUsIDQzNzMxLCA0MzczNywgNDM3NDMsIDQzNzQ5LCAKLSAgICA0Mzc1NSwgNDM3NjEsIDQzNzY3LCA0Mzc3MywgNDM3NzksIDQzNzg1LCA0Mzc5MSwgMjkzNTAsIDQzNzk3LCA0MzgwMywgCi0gICAgNDM4MDksIDQzODE1LCA0MzgyMSwgNDM4MjcsIDQzODMzLCA0MzgzOSwgNDM4NDUsIDQzODUxLCA0Mzg1NywgNDM4NjMsIAotICAgIDQzODY5LCA0Mzg3NSwgNDM4ODEsIDQzODg3LCA0Mzg5MywgNDM4OTksIDQzOTA1LCA0MzkxMSwgNDM5MTcsIDQzOTIzLCAKLSAgICA0MzkyOSwgNDM5MzUsIDQzOTQxLCA0Mzk0NywgNDM5NTMsIDQzOTU5LCA0Mzk2NSwgNDM5NzEsIDQzOTc3LCA0Mzk4MywgCi0gICAgNDM5ODksIDQzOTk1LCA0NDAwMSwgNDQwMDcsIDQ0MDEzLCA0NDAxOSwgNDQwMjUsIDQ0MDMxLCA0NDAzNywgNDQwNDMsIAotICAgIDQ0MDQ5LCA0NDA1NSwgMzUzMDksIDQ0MDYxLCA0NDA2NywgNDQwNzMsIDQ0MDc5LCA0NDA4NSwgNDQwOTEsIDQ0MDk3LCAKLSAgICA0NDEwMywgNDQxMDksIDQ0MTE1LCA0NDEyMSwgNDQxMjcsIDQ0MTMzLCA0NDEzOSwgNDQxNDUsIDQ0MTUxLCA0NDE1NywgCi0gICAgNDQxNjMsIDQ0MTY5LCA0NDE3NSwgNDQxODEsIDQ0MTg3LCA0NDE5MywgNDQxOTksIDQ0MjA1LCA0NDIxMSwgNDQyMTcsIAotICAgIDQ0MjIzLCA0NDIyOSwgNDQyMzUsIDI4MzA2LCA0NDI0MSwgNDQyNDcsIDQ0MjUzLCA0NDI1OSwgNDQyNjUsIDQ0MjcxLCAKLSAgICA0NDI3NywgNDQyODMsIDQ0Mjg5LCA0NDI5NSwgNDQzMDEsIDQ0MzA3LCA0NDMxMywgNDQzMTksIDQ0MzI1LCA0NDMzMSwgCi0gICAgNDQzMzcsIDQ0MzQzLCA0NDM0OSwgNDQzNTUsIDQ0MzYxLCA0NDM2NywgNDQzNzMsIDQ0Mzc5LCA0NDM4NSwgNDQzOTEsIAotICAgIDQ0Mzk3LCA0NDQwMywgNDQ0MDksIDI5MzQwLCA0NDQxNSwgNDQ0MjEsIDQ0NDI3LCA0NDQzMywgNDQ0MzksIDQ0NDQ1LCAKLSAgICA0NDQ1MSwgNDQ0NTcsIDQ0NDYzLCA0NDQ2OSwgNDQ0NzUsIDQ0NDgxLCA0NDQ4NywgNDQ0OTMsIDQ0NDk5LCA0NDUwNSwgCi0gICAgNDQ1MTEsIDQ0NTE3LCA0NDUyMywgNDQ1MjksIDQ0NTM1LCA0NDU0MSwgNDQ1NDcsIDQ0NTUzLCA0NDU1OSwgNDQ1NjUsIAotICAgIDQ0NTcxLCA0NDU3NywgNDQ1ODMsIDQ0NTg5LCA0NDU5NSwgNDQ2MDEsIDQ0NjA3LCA0NDYxMywgNDQ2MTksIDQwODYwLCAKLSAgICA0NDYyNSwgNDQ2MzEsIDQ0NjM3LCA0NDY0MywgNDQ2NDksIDQ0NjU1LCA0NDY2MSwgNDQ2NjcsIDQ0NjczLCA0NDY3OSwgCi0gICAgNDQ2ODUsIDQ0NjkxLCA0NDY5NywgMzcwNjksIDQ0NzAzLCA0NDcwOSwgNDQ3MTUsIDQ0NzIxLCA0NDcyNywgNDQ3MzMsIAotICAgIDQ0NzM5LCA0NDc0NSwgNDQ3NTEsIDQ0NzU3LCA0NDc2MywgNDQ3NjksIDQ0Nzc1LCA0NDc4MSwgNDQ3ODcsIDQ0NzkzLCAKLSAgICA0NDc5OSwgNDQ4MDUsIDQ0ODExLCA0NDgxNywgNDQ4MjMsIDM4ODUzLCA0NDgyOSwgNDQ4MzUsIDQ0ODQxLCA0NDg0NywgCi0gICAgNDQ4NTMsIDQ0ODU5LCA0NDg2NSwgNDQ4NzEsIDQ0ODc3LCA0NDg4MywgNDQ4ODksIDQ0ODk1LCA0NDkwMSwgNDQ5MDcsIAotICAgIDQ0OTEzLCA0NDkxOSwgNDQ5MjUsIDQ0OTMxLCA0NDkzNywgNDQ5NDMsIDQ0OTQ5LCA0NDk1NSwgNDQ5NjEsIDQ0OTY3LCAKLSAgICA0NDk3MywgNDQ5NzksIDM0NjYxLCA0NDk4NSwgNDQ5OTEsIDQ0OTk3LCA0NTAwMywgNDUwMDksIDQ1MDE1LCA0NTAyMSwgCi0gICAgNDUwMjcsIDQ1MDMzLCA0NTAzOSwgNDUwNDUsIDQ1MDUxLCA0NTA1NywgNDUwNjMsIDQ1MDY5LCA0NTA3NSwgNDUwODEsIAotICAgIDQ1MDg3LCA0NTA5MywgNDUwOTksIDQ1MTA1LCA0NTExMSwgMzczMjUsIDQ1MTE3LCA0NTEyMywgNDUxMjksIDQ1MTM1LCAKLSAgICA0NTE0MSwgNDUxNDcsIDQ1MTUzLCA0NTE1OSwgNDUxNjUsIDQ1MTcxLCAyNDQ2OCwgNDUxNzcsIDQ1MTgzLCA0NTE4OSwgCi0gICAgNDUxOTUsIDQ1MjAxLCA0NTIwNywgNDUyMTMsIDQ1MjE5LCA0NTIyNSwgNDUyMzEsIDQ1MjM3LCA0NTI0MywgNDUyNDksIAotICAgIDQ1MjU1LCA0NTI2MSwgNDUyNjcsIDQ1MjczLCA0NTI3OSwgNDUyODUsIDQ1MjkxLCA0NTI5NywgNDUzMDMsIDQ1MzA5LCAKLSAgICA0NTMxNSwgNDUzMjEsIDQ1MzI3LCA0NTMzMywgNDUzMzksIDQ1MzQ1LCA0NTM1MSwgNDA0ODIsIDQ1MzU3LCA0NTM2MywgCi0gICAgNDUzNjksIDQ1Mzc1LCA0NTM4MSwgNDUzODcsIDQ1MzkzLCA0NTM5OSwgNDU0MDUsIDQ1NDExLCA0NTQxNywgNDU0MjMsIAotICAgIDQ1NDI5LCA0NTQzNSwgNDU0NDEsIDQ1NDQ3LCA0NTQ1MywgNDU0NTksIDQ1NDY1LCA0NTQ3MSwgNDU0NzcsIDQ1NDgzLCAKLSAgICA0NTQ4OSwgNDU0OTUsIDQ1NTAxLCA0NTUwNywgNDU1MTMsIDQ1NTE5LCA0NTUyNSwgNDU1MzEsIDQ1NTM3LCA0NTU0MywgCi0gICAgNDU1NDksIDQ1NTU1LCA0NTU2MSwgNDU1NjcsIDQ1NTczLCA0NTU3OSwgNDU1ODUsIDQ1NTkxLCA0NTU5NywgNDU2MDMsIAotICAgIDQ1NjA5LCA0NTYxNSwgNDU2MjEsIDQ1NjI3LCA0MTMwMSwgNDU2MzMsIDQ1NjM5LCA0NTY0NSwgNDU2NTEsIDQ1NjU3LCAKLSAgICA0NTY2MywgNDU2NjksIDQ1Njc1LCA0NTY4MSwgNDU2ODcsIDQ1NjkzLCA0NTY5OSwgNDU3MDUsIDQ1NzExLCA0NTcxNywgCi0gICAgNDU3MjMsIDQ1NzI5LCA0NTczNSwgNDU3NDEsIDQ1NzQ3LCA0NTc1MywgNDU3NTksIDQ1NzY1LCA0NTc3MSwgNDU3NzcsIAotICAgIDQ1NzgzLCA0NTc4OSwgNDU3OTUsIDQ1ODAxLCA0NTgwNywgNDU4MTMsIDQ1ODE5LCA0NTgyNSwgNDU4MzEsIDQ1ODM3LCAKLSAgICA0NTg0MywgNDU4NDksIDQ1ODU1LCA0NTg2MSwgNDU4NjcsIDQ1ODczLCA0NTg3OSwgNDU4ODUsIDQ1ODkxLCA0NTg5NywgCi0gICAgNDU5MDMsIDQ1OTA5LCA0NTkxNSwgNDU5MjEsIDQ1OTI3LCA0NTkzMywgNDU5MzksIDQ1OTQ1LCA0NTk1MSwgNDU5NTcsIAotICAgIDQ1OTYzLCA0MDA5NywgNDU5NjksIDQ1OTc1LCA0NTk4MSwgNDU5ODcsIDQ1OTkzLCA0NTk5OSwgNDYwMDUsIDQ2MDExLCAKLSAgICA0NjAxNywgNDYwMjMsIDQ2MDI5LCA0NjAzNSwgNDYwNDEsIDQ2MDQ3LCA0NjA1MywgNDYwNTksIDQ2MDY1LCA0NjA3MSwgCi0gICAgNDYwNzcsIDQ2MDgzLCA0NjA4OSwgNDYwOTUsIDQ2MTAxLCA0NjEwNywgNDYxMTMsIDQ2MTE5LCA0NjEyNSwgNDYxMzEsIAotICAgIDQ2MTM3LCA0NjE0MywgNDYxNDksIDQ2MTU1LCA0NjE2MSwgNDYxNjcsIDQ2MTczLCA0NjE3OSwgNDYxODUsIDQ2MTkxLCAKLSAgICA0NjE5NywgNDYyMDMsIDQ2MjA5LCA0NjIxNSwgNDYyMjEsIDQ2MjI3LCA0NjIzMywgNDYyMzksIDQ2MjQ1LCA0NjI1MSwgCi0gICAgNDYyNTcsIDQ2MjYzLCA0NjI2OSwgNDYyNzUsIDQ2MjgxLCA0NjI4NywgMzMyMzksIDQ2MjkzLCA0NjI5OSwgNDYzMDUsIAotICAgIDQ2MzExLCA0NjMxNywgNDYzMjMsIDQ2MzI5LCA0NjMzNSwgNDYzNDEsIDQ2MzQ3LCA0NjM1MywgNDYzNTksIDQ2MzY1LCAKLSAgICA0NjM3MSwgNDYzNzcsIDQ2MzgzLCA0NjM4OSwgNDYzOTUsIDQ2NDAxLCA0NjQwNywgNDY0MTMsIDQ2NDE5LCA0NjQyNSwgCi0gICAgNDY0MzEsIDQ2NDM3LCA0NjQ0MywgNDY0NDksIDQ2NDU1LCA0NjQ2MSwgNDY0NjcsIDQ2NDczLCA0NjQ3OSwgNDY0ODUsIAotICAgIDQ2NDkxLCA0NjQ5NywgNDY1MDMsIDQ2NTA5LCA0NjUxNSwgNDY1MjEsIDQ2NTI3LCA0NjUzMywgNDY1MzksIDQ2NTQ1LCAKLSAgICAzNDc1MSwgNDY1NTEsIDQ2NTU3LCA0NjU2MywgNDY1NjksIDQ2NTc1LCA0NjU4MSwgNDY1ODcsIDQ2NTkzLCA0NjU5OSwgCi0gICAgNDY2MDUsIDQ2NjExLCA0NjYxNywgNDY2MjMsIDQ2NjI5LCA0NjYzNSwgNDY2NDEsIDQ2NjQ3LCA0NjY1MywgNDY2NTksIAotICAgIDQ2NjY1LCA0NjY3MSwgNDY2NzcsIDQ2NjgzLCA0NjY4OSwgNDY2OTUsIDExNzk0LCA0NjcwMSwgNDY3MDcsIDQ2NzEzLCAKLSAgICA0NjcxOSwgNDY3MjUsIDQ2NzMxLCA0NjczNywgNDY3NDMsIDQ2NzQ5LCA0Njc1NSwgNDY3NjEsIDQ2NzY3LCA0Njc3MywgCi0gICAgNDY3NzksIDI0MjUyLCA0Njc4NSwgNDY3OTEsIDQ2Nzk3LCA0NjgwMywgNDIzNzIsIDQ2ODA5LCA0NjgxNSwgMzMyNjYsIAotICAgIDQ2ODIxLCA0NjgyNywgNDY4MzMsIDQ2ODM5LCA0Njg0NSwgNDY4NTEsIDQ2ODU3LCA0Njg2MywgNDY4NjksIDQ2ODc1LCAKLSAgICA0Njg4MSwgNDY4ODcsIDQ2ODkzLCA0Njg5OSwgNDY5MDUsIDQ2OTExLCA0NjkxNywgNDY5MjMsIDQ2OTI5LCA0NjkzNSwgCi0gICAgNDY5NDEsIDQ2OTQ3LCA0Njk1MywgNDY5NTksIDQ2OTY1LCA0Njk3MSwgNDY5NzcsIDQ2OTgzLCA0Njk4OSwgNDY5OTUsIAotICAgIDQ3MDAxLCA0NzAwNywgNDcwMTMsIDQ3MDE5LCA0NzAyNSwgNDcwMzEsIDQ3MDM3LCA0NzA0MywgNDcwNDksIDQ3MDU1LCAKLSAgICA0NzA2MSwgNDcwNjcsIDQ3MDczLCA0NzA3OSwgNDcwODUsIDQ3MDkxLCA0NzA5NywgMzExMjAsIDQ3MTAzLCA0NzEwOSwgCi0gICAgNDcxMTUsIDQ3MTIxLCA0NzEyNywgNDcxMzMsIDQ3MTM5LCA0NzE0NSwgNDcxNTEsIDQ3MTU3LCA0NzE2MywgNDcxNjksIAotICAgIDQ3MTc1LCA0NzE4MSwgNDcxODcsIDQ3MTkzLCA0NzE5OSwgNDcyMDUsIDQ3MjExLCA0NzIxNywgNDcyMjMsIDQ3MjI5LCAKLSAgICA0NzIzNSwgNDcyNDEsIDQ3MjQ3LCA0NzI1MywgNDcyNTksIDQ3MjY1LCA0NzI3MSwgNDcyNzcsIDQ3MjgzLCA0NzI4OSwgCi0gICAgNDcyOTUsIDM1MDEzLCA0NzMwMCwgNDczMDUsIDQ3MzEwLCA0NzMxNSwgNDczMjAsIDQ3MzI1LCA0NzMzMCwgNDczMzUsIAotICAgIDQ3MzQwLCA0NzM0NSwgNDczNTAsIDQ3MzU1LCA0NzM2MCwgNDczNjUsIDQ3MzcwLCAyMDc4NSwgNDczNzUsIDQ3MzgwLCAKLSAgICA0NzM4NSwgNDczOTAsIDMyMzY3LCA0NDQyMiwgNDczOTUsIDQ3NDAwLCA0MzE2MiwgNDc0MDUsIDQ3NDEwLCA0NzQxNSwgCi0gICAgNDc0MjAsIDMwODkxLCA0NzQyNSwgNDc0MzAsIDQ2OTE4LCA0NzQzNSwgNDc0NDAsIDQ3NDQ1LCA0NzQ1MCwgNDc0NTUsIAotICAgIDQ3NDYwLCA0NzQ2NSwgNDc0NzAsIDQ3NDc1LCA0NzQ4MCwgNDc0ODUsIDQ3NDkwLCA0NzQ5NSwgNDc1MDAsIDQ3NTA1LCAKLSAgICA0NDY2MiwgNDY3NTYsIDQ3NTEwLCA0NzUxNSwgNDc1MjAsIDQ3NTI1LCAzMTQxMSwgNDc1MzAsIDQ3NTM1LCA0NzU0MCwgCi0gICAgNDc1NDUsIDQ3NTUwLCA0NzU1NSwgNDM0NDQsIDQ3NTYwLCA0NzU2NSwgNDc1NzAsIDQ3NTc1LCA0NzU4MCwgNDc1ODUsIAotICAgIDQ3NTkwLCA0NzU5NSwgNDc2MDAsIDQ3NjA1LCA0NzYxMCwgNDc2MTUsIDQ3NjIwLCA0NzYyNSwgMzUxMTIsIDQ3NjMwLCAKLSAgICA0NzYzNSwgNDc2NDAsIDQ3NjQ1LCA0NzY1MCwgNDc2NTUsIDQ3NjYwLCA0NzY2NSwgNDc2NzAsIDQzNzg2LCA0NzY3NSwgCi0gICAgNDc2ODAsIDQ3Njg1LCA0NzY5MCwgNDc2OTUsIDQ3NzAwLCA0NzcwNSwgNDc3MTAsIDEzNTksIDQ3NzE1LCA0NzcyMCwgCi0gICAgNDc3MjUsIDQ3NzMwLCA0NzczNSwgMzg1MTAsIDQ3NzQwLCA0Nzc0NSwgNDIwNjUsIDE4NzcwLCA0Nzc1MCwgNDc3NTUsIAotICAgIDQ3NzYwLCA0Nzc2NSwgMjkwMDEsIDQ3NzcwLCA0Nzc3NSwgNDc3ODAsIDQ3Nzg1LCA0Nzc5MCwgNDc3OTUsIDQ3ODAwLCAKLSAgICAzOTY5MiwgNDc4MDUsIDQ3ODEwLCA0NzgxNSwgNDc4MjAsIDQ3ODI1LCA0NzgzMCwgNDc4MzUsIDQ3ODQwLCA0Nzg0NSwgCi0gICAgNDQ0NjQsIDQ3ODUwLCA0Nzg1NSwgNDc4NjAsIDQ3ODY1LCA0Nzg3MCwgNDc4NzUsIDQ3ODgwLCA0Nzg4NSwgNDc4OTAsIAotICAgIDQ3ODk1LCA0NzkwMCwgMjg0NjEsIDQ3OTA1LCAzNDc5NywgNDIyMjYsIDQ3OTEwLCA0NzkxNSwgNDc5MjAsIDQ3OTI1LCAKLSAgICA0NzkzMCwgNDc5MzUsIDQ3OTQwLCA0Nzk0NSwgNDc5NTAsIDQ3OTU1LCA0Nzk2MCwgNDMyODIsIDQ3OTY1LCA0Nzk3MCwgCi0gICAgNDc5NzUsIDQ3OTgwLCA0Nzk4NSwgNDg1LCAzMzQzOCwgNDc5OTAsIDQ3OTk1LCA0ODAwMCwgNDgwMDUsIDQ4MDEwLCAKLSAgICA0ODAxNSwgNDgwMjAsIDQ4MDI1LCA0ODAzMCwgNDgwMzUsIDQ4MDQwLCA0ODA0NSwgMTEwMCwgNDgwNTAsIDQ4MDU1LCAKLSAgICA0ODA2MCwgNDgwNjUsIDQ4MDcwLCA0ODA3NSwgNDgwODAsIDQ4MDg1LCA0ODA5MCwgNDgwOTUsIDQ4MTAwLCA0ODEwNSwgCi0gICAgNDI2NzAsIDQ4MTEwLCA0ODExNSwgNDgxMjAsIDQ4MTI1LCA0ODEzMCwgNDgxMzUsIDQ4MTQwLCA0ODE0NSwgNDgxNTAsIAotICAgIDQ4MTU1LCA0ODE2MCwgMzMwNjksIDQ4MTY1LCA0ODE3MCwgNDgxNzUsIDQ0MjM2LCA0ODE4MCwgNDgxODUsIDQ4MTkwLCAKLSAgICA0ODE5NSwgNDgyMDAsIDQ4MjA1LCA0ODIxMCwgNDgyMTUsIDQ4MjIwLCA0ODIyNSwgNDgyMzAsIDIwNTY0LCA0ODIzNSwgCi0gICAgNDgyNDAsIDQ4MjQ1LCA0ODI1MCwgNDgyNTUsIDQ4MjYwLCA0ODI2NSwgNDgyNzAsIDQ4Mjc1LCA0ODI4MCwgNDgyODUsIAotICAgIDQ4MjkwLCA0ODI5NSwgNDgzMDAsIDQ4MzA1LCA0ODMxMCwgNDgzMTUsIDQ4MzIwLCA0NzIxMiwgNDgzMjUsIDQxMjk1LCAKLSAgICA0ODMzMCwgNDgzMzUsIDQ4MzQwLCA0ODM0NSwgNDgzNTAsIDQ4MzU1LCA0ODM2MCwgNDgzNjUsIDQ4MzcwLCA0Njc5OCwgCi0gICAgMjEwNzEsIDQ4Mzc1LCA0ODM4MCwgNDgzODUsIDQ4MzkwLCA0MzU1OCwgNDgzOTUsIDQ4NDAwLCA0ODQwNSwgNDg0MTAsIAotICAgIDQ4NDE1LCA0ODQyMCwgNDg0MjUsIDQ4NDMwLCA0ODQzNSwgNDg0NDAsIDQ4NDQ1LCA0ODQ1MCwgMjgyNzQsIDQ4NDU1LCAKLSAgICA0ODQ2MCwgNDg0NjUsIDQ4NDcwLCAzMTM5MSwgNDg0NzUsIDQ4NDgwLCA0ODQ4NSwgNDg0OTAsIDQ4NDk1LCA0ODUwMCwgCi0gICAgNDg1MDUsIDQ4NTEwLCA0ODUxNSwgNDg1MjAsIDQ4NTI1LCA0ODUzMCwgNDg1MzUsIDQ4NTQwLCA0ODU0NSwgNDg1NTAsIAotICAgIDQ4NTU1LCA0ODU2MCwgNDg1NjUsIDQ4NTcwLCA0ODU3NSwgNDI3NzgsIDQ4NTgwLCA0ODU4NSwgNDg1OTAsIDQ4NTk1LCAKLSAgICA0ODYwMCwgNDg2MDUsIDQ4NjEwLCA0ODYxNSwgNDg2MjAsIDQ4NjI1LCA0ODYzMCwgNDg2MzUsIDQ4NjQwLCA0ODY0NSwgCi0gICAgNDg2NTAsIDQ4NjU1LCA0ODY2MCwgNDg2NjUsIDQ4NjcwLCA0ODY3NSwgNDg2ODAsIDQ4Njg1LCAyOTM2MSwgNDg2OTAsIAotICAgIDQ4Njk1LCA0NTM1OCwgMzYzOTgsIDQ4NzAwLCA0ODcwNSwgNDg3MTAsIDQ4NzE1LCA0ODcyMCwgNDg3MjUsIDQ4NzMwLCAKLSAgICA0ODczNSwgNDg3NDAsIDQ4NzQ1LCA0ODc1MCwgNDg3NTUsIDQ4NzYwLCA0ODc2NSwgNDg3NzAsIDQ4Nzc1LCA0ODc4MCwgCi0gICAgNDg3ODUsIDQ4NzkwLCA0ODc5NSwgNDg4MDAsIDQ4ODA1LCA0NjQ1MCwgNDg4MTAsIDQ4ODE1LCA0ODgyMCwgNDg4MjUsIAotICAgIDM1MTg0LCA0ODgzMCwgNDg4MzUsIDQ4ODQwLCA0ODg0NSwgNDg4NTAsIDQ4ODU1LCA0ODg2MCwgNDg4NjUsIDQ1MTEyLCAKLSAgICA0ODg3MCwgNDg4NzUsIDQwMDA3LCA0ODg4MCwgMzI4NTMsIDQ4ODg1LCAyMDE3MywgNDg4OTAsIDQ4ODk1LCA0ODkwMCwgCi0gICAgNDg5MDUsIDQ4OTEwLCA0ODkxNSwgMzgyNDYsIDQ4OTIwLCA0ODkyNSwgNDg5MzAsIDQ4OTM1LCA0ODk0MCwgNDg5NDUsIAotICAgIDM5ODYwLCA0MTc5OSwgNDg5NTAsIDQ4OTU1LCA0ODk2MCwgNDg5NjUsIDQ4OTcwLCA0ODk3NSwgNDg5ODAsIDQ4OTg1LCAKLSAgICA0ODk5MCwgNDg5OTUsIDQ5MDAwLCA0OTAwNSwgNDkwMTAsIDQ5MDE1LCA0OTAyMCwgNDkwMjUsIDQ5MDMwLCA0OTAzNSwgCi0gICAgNDkwNDAsIDQ5MDQ1LCA0OTA1MCwgNDkwNTUsIDQ5MDYwLCA0NjkxMiwgNDkwNjUsIDQ5MDcwLCA0OTA3NSwgNDAyMzEsIAotICAgIDQ5MDgwLCA0OTA4NSwgNDkwOTAsIDQ5MDk1LCA0OTEwMCwgMzkxMDQsIDQ5MTA1LCA0OTExMCwgNDkxMTUsIDQ5MTIwLCAKLSAgICA0OTEyNSwgNDkxMzAsIDQ5MTM1LCA0OTE0MCwgNDkxNDUsIDQ5MTUwLCA0OTE1NSwgNDkxNjAsIDQ5MTY1LCA0OTE3MCwgCi0gICAgNDkxNzUsIDQ5MTgwLCA0OTE4NSwgNDkxOTAsIDQ5MTk1LCA0OTIwMCwgNDkyMDUsIDMwOTcxLCA0OTIxMCwgNDkyMTUsIAotICAgIDQ5MjIwLCA0OTIyNSwgNDkyMzAsIDQ5MjM1LCA0OTI0MCwgNDEyMDQsIDQ5MjQ1LCA0OTI1MCwgMjgzNzMsIDQ5MjU1LCAKLSAgICA0OTI2MCwgNDkyNjUsIDQ5MjcwLCA0OTI3NSwgNDkyODAsIDQ5Mjg1LCA0OTI5MCwgMzUzODIsIDQ5Mjk1LCA0OTMwMCwgCi0gICAgMjczMjgsIDQ5MzA1LCA0OTMxMCwgNDkzMTUsIDQ5MzIwLCA0OTMyNSwgNDkzMzAsIDQ5MzM1LCA0OTM0MCwgNDkzNDUsIAotICAgIDQ5MzUwLCA0OTM1NSwgNDkzNjAsIDQ5MzY1LCA0OTM3MCwgNDkzNzUsIDQ5MzgwLCA0OTM4NSwgNDkzOTAsIDQ5Mzk1LCAKLSAgICA0OTQwMCwgNDk0MDUsIDQ5NDEwLCA0OTQxNSwgNDk0MjAsIDQ5NDI1LCA0OTQzMCwgNDk0MzUsIDQ5NDQwLCA0OTQ0NSwgCi0gICAgNDk0NTAsIDQ5NDU1LCA0OTQ2MCwgNDk0NjUsIDQ5NDcwLCA0OTQ3NSwgNDk0ODAsIDQ5NDg1LCA0OTQ5MCwgNDk0OTUsIAotICAgIDQ5NTAwLCA0OTUwNSwgNDk1MTAsIDQ5NTE1LCA0OTUyMCwgNDk1MjUsIDQ5NTMwLCA0OTUzNSwgNDk1NDAsIDQ5NTQ1LCAKLSAgICA0OTU1MCwgNDk1NTUsIDQ5NTYwLCA0OTU2NSwgNDk1NzAsIDQ5NTc1LCA0OTU4MCwgNDk1ODUsIDQ5NTkwLCA0OTU5NSwgCi0gICAgNDk2MDAsIDQ5NjA1LCA0OTYxMCwgNDk2MTUsIDQ5NjIwLCA0OTYyNSwgNDk2MzAsIDQ5NjM1LCA0OTY0MCwgNDk2NDUsIAotICAgIDQ5NjUwLCA0OTY1NSwgNDk2NjAsIDQ5NjY1LCA0OTY3MCwgNDk2NzUsIDQ5NjgwLCA0OTY4NSwgNDk2OTAsIDQ5Njk1LCAKLSAgICA0OTcwMCwgNDk3MDUsIDQ5NzEwLCA0OTcxNSwgNDk3MjAsIDQ5NzI1LCA0OTczMCwgNDk3MzUsIDQ5NzQwLCA0OTc0NSwgCi0gICAgNDk3NTAsIDQ5NzU1LCA0OTc2MCwgNDk3NjUsIDQ5NzcwLCA0OTc3NSwgNDk3ODAsIDQ5Nzg1LCA0OTc5MCwgNDk3OTUsIAotICAgIDQ5ODAwLCA0OTgwNSwgNDk4MTAsIDQ5ODE1LCA0OTgyMCwgNDk4MjUsIDQ5ODMwLCA0OTgzNSwgNDk4NDAsIDI0MTU3LCAKLSAgICA0OTg0NSwgNDk4NTAsIDQ5ODU1LCA0OTg2MCwgNDk4NjUsIDQ5ODcwLCA0OTg3NSwgNDk4ODAsIDQ5ODg1LCA0OTg5MCwgCi0gICAgNDk4OTUsIDQ5OTAwLCA0OTkwNSwgNDk5MTAsIDQ5OTE1LCA0OTkyMCwgNDk5MjUsIDQ5OTMwLCA0OTkzNSwgNDk5NDAsIAotICAgIDQ5OTQ1LCA0OTk1MCwgNDk5NTUsIDQ5OTYwLCA0OTk2NSwgNDk5NzAsIDQ5OTc1LCA0OTk4MCwgNDk5ODUsIDQ5OTkwLCAKLSAgICA0OTk5NSwgNDQyOTYsIDQ0MzAyLCA0NDMwOCwgNTAwMDAsIDUwMDA1LCA1MDAxMCwgNTAwMTUsIDUwMDIwLCA1MDAyNSwgCi0gICAgNTAwMzAsIDUwMDM1LCA1MDA0MCwgNTAwNDUsIDUwMDUwLCA1MDA1NSwgMzE0MzEsIDQ0MzE0LCA0NDMyMCwgNTAwNjAsIAotICAgIDQ0MzI2LCA1MDA2NSwgNDU4OTgsIDUwMDcwLCA1MDA3NSwgNTAwODAsIDUwMDg1LCA1MDA5MCwgNTAwOTUsIDUwMTAwLCAKLSAgICA1MDEwNSwgNTAxMTAsIDUwMTE1LCA1MDEyMCwgNTAxMjUsIDUwMTMwLCA1MDEzNSwgNTAxNDAsIDQ0NDU4LCA1MDE0NSwgCi0gICAgNTAxNTAsIDUwMTU1LCA1MDE2MCwgNTAxNjUsIDUwMTcwLCA1MDE3NSwgNTAxODAsIDUwMTg1LCA1MDE5MCwgNTAxOTUsIAotICAgIDUwMjAwLCA1MDIwNSwgNTAyMTAsIDUwMjE1LCA1MDIyMCwgNTAyMjUsIDQzMDMwLCA1MDIzMCwgNTAyMzUsIDUwMjQwLCAKLSAgICA1MDI0NSwgNTAyNTAsIDUwMjU1LCA1MDI2MCwgNTAyNjUsIDUwMjcwLCA1MDI3NSwgNTAyODAsIDUwMjg1LCA1MDI5MCwgCi0gICAgNTAyOTUsIDUwMzAwLCA1MDMwNSwgNTAzMTAsIDUwMzE1LCA1MDMyMCwgNTAzMjUsIDUwMzMwLCA1MDMzNSwgNTAzNDAsIAotICAgIDUwMzQ1LCA1MDM1MCwgNTAzNTUsIDUwMzYwLCA1MDM2NSwgNTAzNzAsIDUwMzc1LCA1MDM4MCwgNTAzODUsIDUwMzkwLCAKLSAgICA1MDM5NSwgNTA0MDAsIDUwNDA1LCA1MDQxMCwgNTA0MTUsIDUwNDIwLCA1MDQyNSwgNTA0MzAsIDUwNDM1LCA1MDQ0MCwgCi0gICAgNTA0NDUsIDUwNDUwLCA1MDQ1NSwgNTA0NjAsIDUwNDY1LCA1MDQ3MCwgNTA0NzUsIDUwNDgwLCA1MDQ4NSwgNTA0OTAsIAotICAgIDUwNDk1LCA1MDUwMCwgNTA1MDUsIDUwNTEwLCA1MDUxNSwgNTA1MjAsIDUwNTI1LCA1MDUzMCwgNTA1MzUsIDUwNTQwLCAKLSAgICA0NDY2OCwgNDQ2NzQsIDI5NDcxLCA1MDU0NSwgNTA1NTAsIDUwNTU1LCA1MDU2MCwgNTA1NjUsIDUwNTcwLCA1MDU3NSwgCi0gICAgNTA1ODAsIDUwNTg1LCA1MDU5MCwgNTA1OTUsIDUwNjAwLCA1MDYwNSwgNTA2MTAsIDM5MTgxLCA0NDY4NiwgNTA2MTUsIAotICAgIDQ0NjkyLCA1MDYyMCwgNTA2MjUsIDUwNjMwLCAzMjg5OCwgNTA2MzUsIDUwNjQwLCA1MDY0NSwgNTA2NTAsIDUwNjU1LCAKLSAgICA0NzE3NiwgNDcxODIsIDM4MzM0LCA1MDY2MCwgNTA2NjUsIDUwNjcwLCA1MDY3NSwgNTA2ODAsIDUwNjg1LCA1MDY5MCwgCi0gICAgNTA2OTUsIDUwNzAwLCA1MDcwNSwgNTA3MTAsIDUwNzE1LCA1MDcyMCwgNTA3MjUsIDUwNzMwLCA0NTc1NCwgNTA3MzUsIAotICAgIDUwNzQwLCA0NTc2MCwgNTA3NDUsIDUwNzUwLCA1MDc1NSwgNTA3NjAsIDUwNzY1LCA1MDc3MCwgNTA3NzUsIDQ1OTIyLCAKLSAgICA1MDc4MCwgNTA3ODUsIDUwNzkwLCA1MDc5NSwgNTA4MDAsIDUwODA1LCA1MDgxMCwgNTA4MTUsIDUwODIwLCA1MDgyNSwgCi0gICAgNTA4MzAsIDUwODM1LCA1MDg0MCwgNTA4NDUsIDUwODUwLCA1MDg1NSwgNTA4NjAsIDUwODY1LCA0NTAyOCwgNTA4NzAsIAotICAgIDQ1MDM0LCA1MDg3NSwgNTA4ODAsIDUwODg1LCA1MDg5MCwgNTA4OTUsIDUwOTAwLCAyMDA0NywgNTA5MDUsIDM2MDA2LCAKLSAgICA1MDkxMCwgNDUwNDAsIDQ1MDQ2LCA0NTA1MiwgNDUwNTgsIDQ1MDY0LCA0NTA3MCwgNTA5MTUsIDUwOTIwLCA1MDkyNSwgCi0gICAgNTA5MzAsIDQ0NTAwLCA1MDkzNSwgNTA5NDAsIDQ0MzYyLCA0NDcxNiwgNTA5NDUsIDUwOTUwLCA1MDk1NSwgNDY4MjIsIAotICAgIDUwOTYwLCA1MDk2NSwgNTA5NzAsIDUwOTc1LCA1MDk4MCwgNTA5ODUsIDUwOTkwLCA1MDk5NSwgNTEwMDAsIDUxMDA1LCAKLSAgICA1MTAxMCwgNTEwMTUsIDUxMDIwLCA1MTAyNSwgNTEwMzAsIDUxMDM1LCA1MTA0MCwgNTEwNDUsIDUxMDUwLCA1MTA1NSwgCi0gICAgNTEwNjAsIDUxMDY1LCA1MTA3MCwgNTEwNzUsIDUxMDgwLCA1MTA4NSwgNTEwOTAsIDUxMDk1LCA1MTEwMCwgNTExMDUsIAotICAgIDUxMTEwLCA1MTExNSwgNTExMjAsIDUxMTI1LCA1MTEzMCwgNTExMzUsIDUxMTQwLCA1MTE0NSwgNTExNTAsIDUxMTU1LCAKLSAgICA1MTE2MCwgNTExNjUsIDUxMTcwLCA1MTE3NSwgNTExODAsIDUxMTg1LCA1MTE5MCwgNTExOTUsIDUxMjAwLCA1MTIwNSwgCi0gICAgNTEyMTAsIDUxMjE1LCA1MTIyMCwgNTEyMjUsIDUxMjMwLCA1MTIzNSwgNTEyNDAsIDUxMjQ1LCA1MTI1MCwgNDYyODIsIAotICAgIDQ0NTMwLCA0NDUzNiwgNDQ1NDIsIDQ2MzY2LCA1MTI1NSwgNTEyNjAsIDUxMjY1LCA1MTI3MCwgNTEyNzUsIDUxMjgwLCAKLSAgICA1MTI4NSwgNTEyOTAsIDUxMjk1LCA1MTMwMCwgNTEzMDUsIDUxMzEwLCA1MTMxNSwgNTEzMjAsIDUxMzI1LCA1MTMzMCwgCi0gICAgNDUwNzYsIDUxMzM1LCA1MTM0MCwgNTEzNDUsIDUxMzUwLCA1MTM1NSwgNTEzNjAsIDUxMzY1LCA1MTM3MCwgNTEzNzUsIAotICAgIDUxMzgwLCA1MTM4NSwgNTEzOTAsIDUxMzk1LCA1MTQwMCwgNDUzODIsIDQ1Mzg4LCA0NTM5NCwgNTE0MDUsIDUxNDEwLCAKLSAgICA1MTQxNSwgNTE0MjAsIDUxNDI1LCA1MTQzMCwgNTE0MzUsIDUxNDQwLCA1MTQ0NSwgNTE0NTAsIDUxNDU1LCA1MTQ2MCwgCi0gICAgNTE0NjUsIDUxNDcwLCA1MTQ3NSwgNTE0ODAsIDUxNDg1LCA1MTQ5MCwgNDU0MDAsIDUxNDk1LCA0NTQwNiwgNDU0MTIsIAotICAgIDQ2MDEyLCA1MTUwMCwgNTE1MDUsIDUxNTEwLCA1MTUxNSwgNTE1MjAsIDUxNTI1LCA1MTUzMCwgNTE1MzUsIDUxNTQwLCAKLSAgICA1MTU0NSwgNTE1NTAsIDUxNTU1LCA1MTU2MCwgNTE1NjUsIDUxNTcwLCA1MTU3NSwgNTE1ODAsIDUxNTg1LCA1MTU5MCwgCi0gICAgNTE1OTUsIDUxNjAwLCA1MTYwNSwgNTE2MTAsIDUxNjE1LCA1MTYyMCwgNTE2MjUsIDUxNjMwLCA1MTYzNSwgNTE2NDAsIAotICAgIDUxNjQ1LCA1MTY1MCwgNTE2NTUsIDUxNjYwLCA1MTY2NSwgNTE2NzAsIDUxNjc1LCA1MTY4MCwgNTE2ODUsIDUxNjkwLCAKLSAgICA1MTY5NSwgNTE3MDAsIDUxNzA1LCA1MTcxMCwgNDI1NjIsIDUxNzE1LCA1MTcyMCwgNTE3MjUsIDUxNzMwLCA1MTczNSwgCi0gICAgNTE3NDAsIDUxNzQ1LCA1MTc1MCwgNTE3NTUsIDUxNzYwLCA0Njg3NiwgNTE3NjUsIDUxNzcwLCA0NTE4NCwgNTE3NzUsIAotICAgIDQ1MTkwLCA1MTc4MCwgNTE3ODUsIDUxNzkwLCA1MTc5NSwgNTE4MDAsIDUxODA1LCA0NTE5NiwgNTE4MTAsIDQ1MjAyLCAKLSAgICA0NTIwOCwgNDUyMTQsIDUxODE1LCA1MTgyMCwgNDEwODUsIDUxODI1LCA1MTgzMCwgMzk1ODAsIDUxODM1LCA1MTg0MCwgCi0gICAgNTE4NDUsIDUxODUwLCA1MTg1NSwgNTE4NjAsIDUxODY1LCA1MTg3MCwgNTE4NzUsIDUxODgwLCA1MTg4NSwgNTE4OTAsIAotICAgIDUxODk1LCA1MTkwMCwgNTE5MDUsIDUxOTEwLCA1MTkxNSwgNTE5MjAsIDUxOTI1LCA1MTkzMCwgNTE5MzUsIDUxOTQwLCAKLSAgICA1MTk0NSwgNDUyMjAsIDQ1MjI2LCA1MTk1MCwgNTE5NTUsIDUxOTYwLCA1MTk2NSwgNTE5NzAsIDUxOTc1LCA1MTk4MCwgCi0gICAgNTE5ODUsIDM4MDMwLCA1MTk5MCwgNTE5OTUsIDQ1MjMyLCA1MjAwMCwgNDUyMzgsIDMxNDQxLCA0NTI0NCwgNTIwMDUsIAotICAgIDUyMDEwLCA1MjAxNSwgNTIwMjAsIDUyMDI1LCA0MTY3MywgNTIwMzAsIDUyMDM1LCA1MjA0MCwgNTIwNDUsIDUyMDUwLCAKLSAgICA1MjA1NSwgNTIwNjAsIDUyMDY1LCA1MjA3MCwgNTIwNzUsIDUyMDgwLCA1MjA4NSwgNTIwOTAsIDUyMDk1LCA1MjEwMCwgCi0gICAgNTIxMDUsIDUyMTEwLCA1MjExNSwgNTIxMjAsIDUyMTI1LCA1MjEzMCwgNDQ4MTgsIDQzMDAwLCA1MjEzNSwgNTIxNDAsIAotICAgIDUyMTQ1LCA1MjE1MCwgNTIxNTUsIDUyMTYwLCA1MjE2NSwgNTIxNzAsIDUyMTc1LCA1MjE4MCwgNTIxODUsIDUyMTkwLCAKLSAgICA0NjAxOCwgNTIxOTUsIDUyMjAwLCA1MjIwNSwgNTIyMTAsIDUyMjE1LCA1MjIyMCwgNTIyMjUsIDUyMjMwLCA1MjIzNSwgCi0gICAgNTIyNDAsIDUyMjQ1LCA1MjI1MCwgNTIyNTUsIDQ2MDI0LCA1MjI2MCwgNTIyNjUsIDQ2MDMwLCA1MjI3MCwgNTIyNzUsIAotICAgIDUyMjgwLCAzOTc5MCwgNTIyODUsIDUyMjkwLCA1MjI5NSwgNDUyNTYsIDQ1MjY4LCA0MjkyOCwgNTIzMDAsIDUyMzA1LCAKLSAgICA1MjMxMCwgNTIzMTUsIDUyMzIwLCA1MjMyNSwgNTIzMzAsIDUyMzM1LCA1MjM0MCwgNTIzNDUsIDUyMzUwLCA1MjM1NSwgCi0gICAgNTIzNjAsIDUyMzY1LCA1MjM3MCwgNTIzNzUsIDUyMzgwLCA1MjM4NSwgNTIzOTAsIDUyMzk1LCA0MTk1MywgNTI0MDAsIAotICAgIDUyNDA1LCA1MjQxMCwgNTI0MTUsIDUyNDIwLCA1MjQyNSwgNTI0MzAsIDUyNDM1LCA1MjQ0MCwgNTI0NDUsIDUyNDUwLCAKLSAgICA1MjQ1NSwgNTI0NjAsIDUyNDY1LCA1MjQ3MCwgNTI0NzUsIDUyNDgwLCA1MjQ4NSwgNTI0OTAsIDUyNDk1LCA0NTI3NCwgCi0gICAgNTI1MDAsIDUyNTA1LCA1MjUxMCwgNTI1MTUsIDUyNTIwLCA1MjUyNSwgNTI1MzAsIDUyNTM1LCA1MjU0MCwgNTI1NDUsIAotICAgIDUyNTUwLCA1MjU1NSwgNTI1NjAsIDUyNTY1LCA1MjU3MCwgNTI1NzUsIDUyNTgwLCA1MjU4NSwgNTI1OTAsIDUyNTk1LCAKLSAgICA1MjYwMCwgNTI2MDUsIDUyNjEwLCA1MjYxNSwgNTI2MjAsIDUyNjI1LCA1MjYzMCwgNTI2MzUsIDUyNjQwLCA1MjY0NSwgCi0gICAgNTI2NTAsIDUyNjU1LCA1MjY2MCwgNTI2NjUsIDUyNjcwLCA1MjY3NSwgNTI2ODAsIDUyNjg1LCA1MjY5MCwgNTI2OTUsIAotICAgIDUyNzAwLCA1MjcwNSwgNTI3MTAsIDUyNzE1LCA1MjcyMCwgNTI3MjUsIDUyNzMwLCA1MjczNSwgNTI3NDAsIDUyNzQ1LCAKLSAgICA1Mjc1MCwgNTI3NTUsIDUyNzYwLCA1Mjc2NSwgNTI3NzAsIDUyNzc1LCA1Mjc4MCwgNTI3ODUsIDUyNzkwLCA1Mjc5NSwgCi0gICAgNTI4MDAsIDUyODA1LCA1MjgxMCwgNTI4MTUsIDUyODIwLCA1MjgyNSwgNTI4MzAsIDUyODM1LCA1Mjg0MCwgNTI4NDUsIAotICAgIDUyODUwLCA1Mjg1NSwgNTI4NjAsIDUyODY1LCA1Mjg3MCwgNTI4NzUsIDUyODgwLCA1Mjg4NSwgNTI4OTAsIDUyODk1LCAKLSAgICA1MjkwMCwgNTI5MDUsIDUyOTEwLCA1MjkxNSwgNTI5MjAsIDUyOTI1LCA1MjkzMCwgNTI5MzUsIDUyOTQwLCA1Mjk0NSwgCi0gICAgNTI5NTAsIDUyOTU1LCA1Mjk2MCwgNTI5NjUsIDUyOTcwLCA1Mjk3NSwgNTI5ODAsIDUyOTg1LCA1Mjk5MCwgNTI5OTUsIAotICAgIDUzMDAwLCA1MzAwNSwgNTMwMTAsIDQ2MzI0LCA1MzAxNSwgNTMwMjAsIDUzMDI1LCA1MzAzMCwgNTMwMzUsIDUzMDQwLCAKLSAgICA1MzA0NSwgNTMwNTAsIDUzMDU1LCA1MzA2MCwgNTMwNjUsIDUzMDcwLCA1MzA3NSwgNTMwODAsIDUzMDg1LCA1MzA5MCwgCi0gICAgNTMwOTUsIDUzMTAwLCA1MzEwNSwgNTMxMTAsIDUzMTE1LCA0NjQ2MiwgNDYwNDgsIDUzMTIwLCA0NjA1NCwgNTMxMjUsIAotICAgIDUzMTMwLCA1MzEzNSwgNTMxNDAsIDUzMTQ1LCA1MzE1MCwgNTMxNTUsIDUzMTYwLCA1MzE2NSwgNTMxNzAsIDUzMTc1LCAKLSAgICA1MzE4MCwgNTMxODUsIDUzMTkwLCA1MzE5NSwgNTMyMDAsIDUzMjA1LCA1MzIxMCwgNTMyMTUsIDUzMjIwLCA1MzIyNSwgCi0gICAgNTMyMzAsIDUzMjM1LCAyODIxOSwgNTMyNDAsIDUzMjQ1LCA1MzI1MCwgNTMyNTUsIDUzMjYwLCA1MzI2NSwgNTMyNzAsIAotICAgIDUzMjc1LCA1MzI4MCwgNTMyODUsIDUzMjkwLCA1MzI5NSwgNTMzMDAsIDQ2NzIwLCA0NjcyNiwgNTMzMDUsIDUzMzEwLCAKLSAgICA1MzMxNSwgNTMzMjAsIDUzMzI1LCA1MzMzMCwgNTMzMzUsIDMzMzc1LCA1MzM0MCwgMTA4MSwgNTMzNDUsIDUzMzUwLCAKLSAgICA1MzM1NSwgNTMzNjAsIDUzMzY1LCA1MzM3MCwgNTMzNzUsIDUzMzgwLCA1MzM4NSwgNTMzOTAsIDUzMzk1LCA1MzQwMCwgCi0gICAgNTM0MDUsIDUzNDEwLCA1MzQxNSwgNTM0MjAsIDUzNDI1LCA1MzQzMCwgNTM0MzUsIDUzNDQwLCA1MzQ0NSwgNTM0NTAsIAotICAgIDUzNDU1LCA1MzQ2MCwgNTM0NjUsIDUzNDcwLCA1MzQ3NSwgNTM0ODAsIDUzNDg1LCA1MzQ5MCwgNTM0OTUsIDUzNTAwLCAKLSAgICA1MzUwNSwgMjkyOTEsIDUzNTEwLCA1MzUxNSwgNDY3MzIsIDUzNTIwLCA1MzUyNSwgNTM1MzAsIDUzNTM1LCA1MzU0MCwgCi0gICAgNTM1NDUsIDUzNTUwLCAzMzQ5MiwgNTM1NTUsIDUzNTYwLCA1MzU2NSwgNDYxNjIsIDUzNTcwLCA1MzU3NSwgNTM1ODAsIAotICAgIDUzNTg1LCA1MzU5MCwgNTM1OTUsIDUzNjAwLCA1MzYwNSwgNTM2MTAsIDI2NDM3LCAyODIzMCwgNTM2MTUsIDUzNjIwLCAKLSAgICA1MzYyNSwgNTM2MzAsIDUzNjM1LCA1MzY0MCwgNTM2NDUsIDQxNjAzLCA1MzY1MCwgNTM2NTUsIDUzNjYwLCA1MzY2NSwgCi0gICAgNTM2NzAsIDUzNjc1LCA1MzY4MCwgNTM2ODUsIDUzNjkwLCA1MzY5NSwgNTM3MDAsIDUzNzA1LCA1MzcxMCwgNTM3MTUsIAotICAgIDUzNzIwLCA1MzcyNSwgNTM3MzAsIDUzNzM1LCA1Mzc0MCwgNTM3NDUsIDUzNzUwLCA1Mzc1NSwgNDQxNDAsIDUzNzYwLCAKLSAgICA1Mzc2NSwgNTM3NzAsIDUzNzc1LCAzODU3NCwgMzU5MzQsIDUzNzgwLCA1Mzc4NSwgNDIyODIsIDUzNzkwLCA1Mzc5NSwgCi0gICAgNTM4MDAsIDUzODA1LCA1MzgxMCwgNTM4MTUsIDMxNDUxLCA1MzgyMCwgNTM4MjUsIDUzODMwLCA1MzgzNSwgNTM4NDAsIAotICAgIDUzODQ1LCA1Mzg1MCwgNTM4NTUsIDM2Mzc0LCA1Mzg2MCwgNTM4NjUsIDM2Mjc4LCA1Mzg3MCwgNTM4NzUsIDUzODgwLCAKLSAgICA1Mzg4NSwgNTM4OTAsIDUzODk1LCA0NTMwNCwgNDUzMTAsIDQ1MzE2LCA1MzkwMCwgNDUzMzQsIDQ1NTY4LCA0NTU3NCwgCi0gICAgNTM5MDUsIDUzOTEwLCA1MzkxNSwgNTM5MjAsIDUzOTI1LCA1MzkzMCwgNTM5MzUsIDUzOTQwLCA1Mzk0NSwgNTM5NTAsIAotICAgIDUzOTU1LCA1Mzk2MCwgNTM5NjUsIDUzOTcwLCA1Mzk3NSwgNTM5ODAsIDUzOTg1LCA1Mzk5MCwgNTM5OTUsIDQ2MDY2LCAKLSAgICA0NjA3MiwgNDYwNzgsIDU0MDAwLCA1NDAwNSwgNTQwMTAsIDU0MDE1LCA1NDAyMCwgNTQwMjUsIDU0MDMwLCA1NDAzNSwgCi0gICAgNTQwNDAsIDQ2MDg0LCA1NDA0NSwgNDYwOTAsIDU0MDUwLCA1NDA1NSwgNTQwNjAsIDU0MDY1LCA1NDA3MCwgNTQwNzUsIAotICAgIDU0MDgwLCA1NDA4NSwgNTQwOTAsIDU0MDk1LCA1NDEwMCwgNTQxMDUsIDU0MTEwLCA1NDExNSwgNTQxMjAsIDU0MTI1LCAKLSAgICA1NDEzMCwgNTQxMzUsIDU0MTQwLCA1NDE0NSwgNTQxNTAsIDU0MTU1LCA1NDE2MCwgNTQxNjUsIDU0MTcwLCA0NjA5NiwgCi0gICAgNDYxMDIsIDU0MTc1LCA1NDE4MCwgNDYxMDgsIDQ2MTE0LCA0NjEyMCwgNTQxODUsIDU0MTkwLCA1NDE5NSwgNTQyMDAsIAotICAgIDU0MjA1LCA1NDIxMCwgNTQyMTUsIDU0MjIwLCA1NDIyNSwgNTQyMzAsIDU0MjM1LCA1NDI0MCwgNTQyNDUsIDU0MjUwLCAKLSAgICA1NDI1NSwgNTQyNjAsIDU0MjY1LCA1NDI3MCwgNTQyNzUsIDU0MjgwLCA0Nzk0MSwgNTQyODUsIDU0Mjg5LCA1NDI5MywgCi0gICAgNTQyOTcsIDcwOSwgNTQzMDEsIDU0MzA1LCAzNTQ0NiwgNDYzODUsIDU0MzA5LCAyNjY4MCwgNTQzMTMsIDQzNzY5LCAKLSAgICA1NDMxNywgMzY1MjcsIDU0MzIxLCA0MzU5NSwgMjgyNTMsIDU0MzI1LCA0MzQyMSwgMjkxNzIsIDM1MDU5LCA1NDMyOSwgCi0gICAgNTQzMzMsIDIwMjAyLCA0MjY4MywgNTQzMzcsIDM0NzI2LCA1NDM0MSwgNDQyMTksIDU0MzQ1LCA0Nzk3MSwgNTQzNDksIAotICAgIDQzMTg3LCAyNDAyNiwgNDIwNDUsIDU0MzUzLCA1NDM1NywgNTQzNjEsIDQ0NjYzLCA0Mzc1MSwgNTQzNjUsIDU0MzY5LCAKLSAgICA1MDEzMSwgNTQzNzMsIDU0Mzc3LCAyNzQyOCwgNTQzODEsIDU0Mzg1LCA1NDM4OSwgNTQzOTMsIDM2NTExLCA1NDM5NywgCi0gICAgNTQ0MDEsIDU0NDA1LCA1NDQwOSwgNTQ0MTMsIDU0NDE3LCA1NDQyMSwgMzYxMDMsIDQ4MDE2LCA1NDQyNSwgNDI3NzksIAotICAgIDU0NDI5LCA1NDQzMywgNTQ0MzcsIDQ4NDIxLCAzMjY1NiwgMjA4MjUsIDU0NDQxLCAzNjczNSwgMjg0NDAsIDU0NDQ1LCAKLSAgICAyOTA5MiwgNDk5MTEsIDMxMjcyLCA0NDc3NywgNTQ0NDksIDQzMDg1LCA1NDQ1MywgNTQ0NTcsIDU0NDYxLCA1NDQ2NSwgCi0gICAgNTQ0NjksIDMzMzY3LCA0NDM2MywgNTQ0NzMsIDU0NDc3LCA1NDQ4MSwgNDE0MjksIDQwMzUxLCA1MzcwMSwgMzAwNTIsIAotICAgIDU0NDg1LCA0Nzg3NiwgNDE2NzQsIDU0NDg5LCA1NDQ5MywgNTQ0OTcsIDI4NDk1LCA1NDUwMSwgNTQ1MDUsIDU0NTA5LCAKLSAgICAzNzcxOSwgNTQ1MTMsIDQ1MDk1LCA0MjE1MCwgNTQ1MTcsIDI0MTU4LCA1NDUyMSwgNDIxMDEsIDQzMjQxLCA1NDUyNSwgCi0gICAgNDQ0NTksIDUxNDMxLCA1NDUyOSwgNDkwNDEsIDUyODIxLCA1NDUzMywgNTQ1MzcsIDQ4NTM2LCA1NDU0MSwgNTQ1NDUsIAotICAgIDU0NTQ5LCA1NDU1MywgNTA2MjEsIDU0NTU3LCA0NTc1NSwgNTAxMzYsIDUwMzgxLCA1NDU2MSwgMzYyMzksIDU0NTY1LCAKLSAgICA1NDU2OSwgNTQ1NzMsIDU0NTc3LCA1NDU4MSwgNTE0MDYsIDM1NTAwLCAyOTgsIDU0NTg1LCA1NDU4OSwgNTQ1OTMsIAotICAgIDU0NTk3LCA1NDYwMSwgNTE2MTYsIDUzMzUxLCA1NDYwNSwgMjczMTgsIDQ2OTEzLCA0MzgwNSwgNTQ2MDksIDU0NjEzLCAKLSAgICA1NDYxNywgNDMyNTMsIDQwMTQxLCAzMzIwNSwgNDM4OTUsIDU0NjIxLCA1NDYyNSwgNDA0MjEsIDQ4ODExLCA1NDYyOSwgCi0gICAgNTA2MjYsIDU0NjMzLCA1NDYzNywgNTQ2NDEsIDU0NjQ1LCA1NDY0OSwgNTQ2NTMsIDU0NjU3LCA1NDY2MSwgNTQ2NjUsIAotICAgIDUxNzU2LCA1NDY2OSwgNTQ2NzMsIDQ4NzkxLCA1NDY3NywgNTQ2ODEsIDQwODYyLCA1NDY4NSwgNTQ2ODksIDU0NjkzLCAKLSAgICA1NDY5NywgNTQ3MDEsIDU0NzA1LCA1NDcwOSwgNTQ3MTMsIDU0NzE3LCA1NDcyMSwgNTQ3MjUsIDU0NzI5LCA1MjM5NiwgCi0gICAgNTQ3MzMsIDU0NzM3LCA1NDc0MSwgNTQ3NDUsIDU0NzQ5LCA1NDc1MywgNTQ3NTcsIDU0NzYxLCAyOTQwMiwgNTQ3NjUsIAotICAgIDU0NzY5LCA1NDc3MywgNTM2NzYsIDU0Nzc3LCA1NDc4MSwgNTQ3ODUsIDU0Nzg5LCA1NDc5MywgNTQ3OTcsIDU0ODAxLCAKLSAgICA1NDgwNSwgNDM5NzMsIDQzOTg1LCA1MDkxNiwgNTQ4MDksIDU0ODEzLCA1NDgxNywgNDIzODEsIDU0ODIxLCA1NDgyNSwgCi0gICAgNTAxNDEsIDM5NzM1LCA1NDgyOSwgNTQ4MzMsIDUzMTcxLCA1NDgzNywgMzQ0NjUsIDU0ODQxLCA1NDg0NSwgNTM3NjYsIAotICAgIDU0ODQ5LCA0NDAyNywgMzg0ODcsIDQwMjk1LCA0NDgwNywgNTQ4NTMsIDU0ODU3LCA1NDg2MSwgNTQ4NjUsIDQ2MDE5LCAKLSAgICA0NTkyMywgNTQ4NjksIDQwMDUwLCAyNjQ4NiwgMzIyODcsIDQ0NDY1LCA1MDE5MSwgNDc5NjEsIDQxMTg0LCA1NDg3MywgCi0gICAgNTQ4NzcsIDMxMzMyLCA1NDg4MSwgNTQ4ODUsIDU0ODg5LCA1NDg5MywgNTMzMjYsIDU0ODk3LCA1NDkwMSwgNTMzMzYsIAotICAgIDU0OTA1LCA1NDkwOSwgNDY0MDksIDQxNzc5LCA1MDU2MSwgNTQ5MTMsIDU0OTE3LCA1NDkyMSwgMjQ1MDYsIDU0OTI1LCAKLSAgICAzMTI4MiwgNTQ5MjksIDU0OTMzLCA1NDkzNywgNTQ5NDEsIDU0OTQ1LCAzNjA1NSwgNTQ5NDksIDUyMzkxLCA1NDk1MywgCi0gICAgNTEyMDYsIDU0OTU3LCA0MTkxOSwgNTQ5NjEsIDU0OTY1LCA1MTYyNiwgNTQ5NjksIDU0OTczLCA1NDk3NywgNTQ5ODEsIAotICAgIDU0OTg1LCAyMDA0OCwgNTI0MDYsIDk1OCwgNTMwMjYsIDU0OTg5LCA0NTk3NywgNTQ5OTMsIDU0OTk3LCA1NTAwMSwgCi0gICAgNTM4MDEsIDU1MDA1LCA1MzY2NiwgNTM2NzEsIDU1MDA5LCAzMzU3NCwgNTUwMTMsIDU1MDE3LCAyMzc2MiwgMzgzNzUsIAotICAgIDQ3MzE2LCA1MzcxMSwgNTM3MTYsIDMxMTIyLCA1MzQ4MSwgMzY2MTUsIDU1MDIxLCA1NTAyNSwgNTUwMjksIDU1MDMzLCAKLSAgICA1NTAzNywgNTUwNDEsIDQ1MDcxLCA1NTA0NSwgNTUwNDksIDU1MDUzLCA0OTMyMSwgNTUwNTcsIDQwNDI4LCA0NzIxMywgCi0gICAgNTI1NTEsIDUyNTg2LCA1NTA2MSwgNTA2NzYsIDU1MDY1LCA1NTA2OSwgNTUwNzMsIDQzNDI3LCA1NTA3NywgNTUwODEsIAotICAgIDU1MDg1LCA1NTA4OSwgNTUwOTMsIDU1MDk3LCA1NTEwMSwgNTUxMDUsIDU1MTA5LCA1NTExMywgNTA3MzYsIDU1MTE3LCAKLSAgICA1NTEyMSwgNTUxMjUsIDU1MTI5LCAzMjk3MSwgNTUxMzMsIDUwMTE2LCA0MTM4MCwgNTUxMzcsIDUwMTIxLCAzNzIxNSwgCi0gICAgNTUxNDEsIDU1MTQ1LCA1NTE0OSwgNTUxNTMsIDU1MTU3LCA1NTE2MSwgNTUxNjUsIDU1MTY5LCA1NTE3MywgMzg4MzEsIAotICAgIDU1MTc3LCA1NTE4MSwgNTUxODUsIDU1MTg5LCA1NTE5MywgNTUxOTcsIDU1MjAxLCA1NTIwNSwgNTAzOTYsIDU1MjA5LCAKLSAgICAzNzg1NSwgNTUyMTMsIDU1MjE3LCA1NTIyMSwgNTUyMjUsIDU1MjI5LCA1NTIzMywgNTUyMzcsIDMzNDMwLCA1NTI0MSwgCi0gICAgNTUyNDUsIDU1MjQ5LCA1NTI1MywgNTUyNTcsIDU1MjYxLCA0MTk0NywgNTUyNjUsIDU1MjY5LCA1MTg2NiwgNTA3ODEsIAotICAgIDUyMjM2LCA1MjI0MSwgNTIyNDYsIDUyMjUxLCA1NTI3MywgNTUyNzcsIDU1MjgxLCA1NTI4NSwgNTA4MTEsIDUwODI2LCAKLSAgICA1NTI4OSwgNDc3MTEsIDUwMTcxLCA1NTI5MywgNTUyOTcsIDU1MzAxLCAzNDgyNSwgNDQ3MjMsIDQ2NjQzLCA1NTMwNSwgCi0gICAgMjQ0OTQsIDU1MzA5LCA1NTMxMywgNTUzMTcsIDU1MzIxLCA1NTMyNSwgNTUzMjksIDU1MzMzLCAzNDg2MSwgNTUzMzcsIAotICAgIDU1MzQxLCAzNTUyNywgNTE1OTYsIDU1MzQ1LCA1NTM0OSwgNTUzNTMsIDU1MzU3LCA1NTM2MSwgNTUzNjUsIDU1MzY5LCAKLSAgICA1NTM3MywgMzIwMzIsIDQ5MDUxLCA0OTA1NiwgNTUzNzcsIDUwOTkxLCA1NTM4MSwgNTUzODUsIDU1Mzg5LCA1MTA1MSwgCi0gICAgNTUzOTMsIDU1Mzk3LCA1NTQwMSwgNTExMDEsIDU1NDA1LCA1NTQwOSwgMzI5ODAsIDU1NDEzLCA0NDM1NywgNDM1MTcsIAotICAgIDI0NDM0LCAyMzg3MCwgNTU0MTcsIDU1NDIxLCA0NTA4OSwgNTU0MjUsIDU1NDI5LCA1NTQzMywgMzc3MjcsIDU1NDM3LCAKLSAgICA1NTQ0MSwgNTU0NDUsIDU1NDQ5LCA1NTQ1MywgNTU0NTcsIDQ4MDYxLCA1NTQ2MSwgNDYwMzcsIDU1NDY1LCA1NTQ2OSwgCi0gICAgNTU0NzMsIDU1NDc3LCAyNjcwMiwgNTU0ODEsIDM0OTE1LCA1NTQ4NSwgNTU0ODksIDM2NDcxLCA1NTQ5MywgNTU0OTcsIAotICAgIDU1NTAxLCA0NTY5NSwgNTU1MDUsIDU1NTA5LCA1NTUxMywgNTU1MTcsIDU1NTIxLCA1NTUyNSwgNTI0MTEsIDU1NTI5LCAKLSAgICA1NTUzMywgNTU1MzcsIDU1NTQxLCA1NTU0NSwgNTA1OTYsIDUzMzU2LCA1NTU0OSwgMzI0MTMsIDU1NTUzLCA1NTU1NywgCi0gICAgNTU1NjEsIDU1NTY1LCA1NTU2OSwgNTU1NzMsIDU1NTc3LCA1NTU4MSwgNTU1ODUsIDU1NTg5LCA0OTA3MSwgNDkwNzYsIAotICAgIDU1NTkzLCA1NTU5NywgNTU2MDEsIDU1NjA1LCA1NTYwOSwgNTU2MTMsIDU1NjE3LCAzNzA5NSwgNTU2MjEsIDQzNDUxLCAKLSAgICA1NTYyNSwgNTU2MjksIDU1NjMzLCAzMjUwMywgNTU2MzcsIDU1NjQxLCA1NTY0NSwgNDY0MTUsIDU1NjQ5LCAzODMxOSwgCi0gICAgNDkzMTYsIDU1NjUzLCA1NTY1NywgNTU2NjEsIDU1NjY1LCA1NTY2OSwgNDM5NzksIDU1NjczLCA1NTY3NywgNDM4ODksIAotICAgIDU1NjgxLCA1NTY4NSwgNTU2ODksIDU1NjkzLCA1MjUzMSwgNTI1NTYsIDU1Njk3LCA1NTcwMSwgNTU3MDUsIDUzNTIxLCAKLSAgICA1NTcwOSwgNDg0MzEsIDU1NzEzLCA1NTcxNywgNDg4MjYsIDUyNjQ2LCA1NTcyMSwgNDg0NDEsIDU1NzI1LCA0NTc0OSwgCi0gICAgNTU3MjksIDUzOTIxLCAzNjk2NywgNDU5MTcsIDU1NzMzLCA1NTczNywgNTU3NDEsIDU1NzQ1LCA1NTc0OSwgMTgzNTEsIAotICAgIDU1NzUzLCA1NTc1NywgNDcxNDcsIDMzMzg1LCA0MzcwMywgNDc1MjEsIDU1NzYxLCA1NTc2NSwgMzU0MjgsIDU1NzY5LCAKLSAgICA1NTc3MywgMzcxNjcsIDU1Nzc3LCA1NTc4MSwgNTU3ODUsIDU1Nzg5LCA1NTc5MywgNTU3OTcsIDU1ODAxLCA1NTgwNSwgCi0gICAgNTU4MDksIDU1ODEzLCA1NTgxNywgNTU4MjEsIDU1ODI1LCA1NTgyOSwgNTU4MzMsIDU1ODM3LCA1NTg0MSwgNTU4NDUsIAotICAgIDU1ODQ5LCA1NTg1MywgNTU4NTcsIDU1ODYxLCA1NTg2NSwgNTU4NjksIDU1ODczLCA1NTg3NywgNTU4ODEsIDU1ODg1LCAKLSAgICA1NTg4OSwgNTU4OTMsIDU1ODk3LCA1NTkwMSwgNTU5MDUsIDU1OTA5LCA1NTkxMywgNTU5MTcsIDU1OTIxLCA1NTkyNSwgCi0gICAgNTU5MjksIDU1OTMzLCA1NTkzNywgNTU5NDEsIDU1OTQ1LCA1NTk0OSwgNTU5NTMsIDU1OTU3LCA1NTk2MSwgNTU5NjUsIAotICAgIDU1OTY5LCA1NTk3MywgNTU5NzcsIDU1OTgxLCA1NTk4NSwgNTU5ODksIDU1OTkzLCA1NTk5NywgNTYwMDEsIDU2MDA1LCAKLSAgICA1NjAwOSwgNTYwMTMsIDU2MDE3LCA1NjAyMSwgNTYwMjUsIDU2MDI5LCA1NjAzMywgNTYwMzcsIDU2MDQxLCA1NjA0NSwgCi0gICAgNTYwNDksIDU2MDUzLCA1NjA1NywgNTYwNjEsIDU2MDY1LCA1NjA2OSwgNTYwNzMsIDU2MDc3LCA1NjA4MSwgNTYwODUsIAotICAgIDU2MDg5LCA1NjA5MywgNTYwOTcsIDU2MTAxLCA1NjEwNSwgNTYxMDksIDU2MTEzLCA1NjExNywgNTYxMjEsIDU2MTI1LCAKLSAgICA1NjEyOSwgNTYxMzMsIDU2MTM3LCA1NjE0MSwgNTYxNDUsIDU2MTQ5LCA1NjE1MywgNTYxNTcsIDU2MTYxLCA1NjE2NSwgCi0gICAgNTYxNjksIDU2MTczLCA1NjE3NywgNTYxODEsIDU2MTg1LCA1NjE4OSwgNTYxOTMsIDU2MTk3LCA1NjIwMSwgNTYyMDUsIAotICAgIDU2MjA5LCA1NjIxMywgNTYyMTcsIDU2MjIxLCA1NjIyNSwgNTYyMjksIDU2MjMzLCA1NjIzNywgNDk4NTYsIDM3OTQzLCAKLSAgICA0OTg2NiwgNTYyNDEsIDU2MjQ1LCA1NjI0OSwgNTYyNTMsIDU2MjU3LCAzNDkwNiwgNTYyNjEsIDU2MjY1LCA0OTg3MSwgCi0gICAgNTYyNjksIDQ5ODc2LCA1NjI3MywgNTYyNzcsIDU2MjgxLCA1NjI4NSwgNDg3ODYsIDU2Mjg5LCA0OTg4NiwgNDk4OTEsIAotICAgIDQ5ODk2LCA1NjI5MywgNDMwMTMsIDU2Mjk3LCAzOTU4MSwgNDk5MDEsIDQ5OTA2LCA0OTkxNiwgNDk5MjEsIDU2MzAxLCAKLSAgICA0ODMyNiwgNDk5MzEsIDU2MzA1LCA1NjMwOSwgNTYzMTMsIDQ5OTM2LCA1MjEwMSwgNDk5NDEsIDQ5OTQ2LCA1NjMxNywgCi0gICAgMzIyNTEsIDU2MzIxLCA1NjMyNSwgNTYzMjksIDU2MzMzLCA1NjMzNywgNTYzNDEsIDU2MzQ1LCA1NjM0OSwgNTYzNTMsIAotICAgIDU2MzU3LCA1NjM2MSwgNTYzNjUsIDU2MzY5LCA1NjM3MywgMzkzOTksIDU2Mzc3LCA1NjM4MSwgNTYzODUsIDU2Mzg5LCAKLSAgICA1NjM5MywgNTYzOTcsIDU2NDAxLCA1NjQwNSwgNTY0MDksIDU2NDEzLCA1NjQxNywgNTY0MjEsIDU2NDI1LCA1NjQyOSwgCi0gICAgNTY0MzMsIDI3Mjk2LCA1NjQzNywgNTY0NDEsIDM4MTkxLCA0MTY1MywgNTY0NDUsIDUwMzYxLCA1NjQ0OSwgNTAzNjYsIAotICAgIDM4ODk1LCA1MDM3MSwgNTY0NTMsIDQ1ODE1LCA0NDgxOSwgNDMwMDEsIDU2NDU3LCA0NjQ5MywgNTY0NjEsIDQwODM0LCAKLSAgICA1MDQwMSwgNDUwNzcsIDUwNDA2LCAzOTU2MCwgNTA0MTEsIDUwNDE2LCA1MTMzNiwgNTY0NjUsIDU2NDY5LCA1NjQ3MywgCi0gICAgNTA0MjEsIDUzMTc2LCA1MjE1NiwgNTA0MjYsIDUwNDM2LCA1NjQ3NywgNTY0ODEsIDU2NDg1LCA1NjQ4OSwgNTY0OTMsIAotICAgIDUwNDQxLCA1MDQ0NiwgNDg0MDYsIDUwNDUxLCA1MDQ1NiwgNTA0NjEsIDU2NDk3LCA1NjUwMSwgNTY1MDUsIDU2NTA5LCAKLSAgICA1NjUxMywgNTY1MTcsIDI5MTUyLCA1NjUyMSwgNTY1MjUsIDU2NTI5LCA1NjUzMywgNTY1MzcsIDU2NTQxLCA1NjU0NSwgCi0gICAgMjY3MTMsIDU2NTQ5LCA0ODc0NiwgNTY1NTMsIDU2NTU3LCA1NjU2MSwgNTY1NjUsIDQ0NzI5LCA1NjU2OSwgNTY1NzMsIAotICAgIDU2NTc3LCA1NjU4MSwgNTY1ODUsIDU2NTg5LCA1NjU5MywgNTY1OTcsIDU2NjAxLCA1NjYwNSwgNTY2MDksIDU2NjEzLCAKLSAgICA1NjYxNywgNTY2MjEsIDU2NjI1LCA1NjYyOSwgNTY2MzMsIDU2NjM3LCA1NjY0MSwgNTY2NDUsIDU2NjQ5LCA1NjY1MywgCi0gICAgNTY2NTcsIDU2NjYxLCA1NjY2NSwgNTY2NjksIDU2NjczLCA1NjY3NywgNTY2ODEsIDUwNzY2LCA1MDc3MSwgNTA3NzYsIAotICAgIDUxODcxLCA1MTg3NiwgNTE4ODEsIDUxODg2LCA1NjY4NSwgNTY2ODksIDU2NjkzLCAzNTA0MSwgMzk5MTcsIDUwNzg2LCAKLSAgICA1NjY5NywgNTA3OTEsIDU2NzAxLCA1NjcwNSwgNTY3MDksIDUwNzk2LCA1NjcxMywgNTA4MDEsIDUwODA2LCA1NjcxNywgCi0gICAgNTY3MjEsIDQ1OTM1LCA0ODUwMSwgNTA4MTYsIDU2NzI1LCA1MjAsIDU2NzI5LCA0MTY2MCwgNTY3MzMsIDU2NzM3LCAKLSAgICA0ODUwNiwgNTA4MjEsIDUwODMxLCA1MDgzNiwgNTA4NDEsIDUwODQ2LCA1MDg1MSwgNTY3NDEsIDU2NzQ1LCA1Njc0OSwgCi0gICAgNTY3NTMsIDU2NzU3LCA1Njc2MSwgNDg2NTYsIDMyMDQyLCAyMDU2NSwgNTAxNTEsIDUwMTYxLCAzODc1MSwgNTY3NjUsIAotICAgIDM5MzIyLCA1Njc2OSwgNTAxNjYsIDUwMTc2LCA0NTY3MSwgNTA1MjEsIDUwNTI2LCA1MDUzMSwgNTA1MzYsIDQ4MjM2LCAKLSAgICA0NzY3MSwgMjgyMjAsIDM0NzE3LCA1Njc3MywgNTY3NzcsIDU2NzgxLCA1Njc4NSwgNTY3ODksIDM3NTgzLCA1Njc5MywgCi0gICAgNTY3OTcsIDU2ODAxLCA1NjgwNSwgNTY4MDksIDUwMTg2LCAzOTg2MSwgNTAyMDEsIDUwMjA2LCA1NjgxMywgMzc2NzEsIAotICAgIDU2ODE3LCA1MDIxMSwgNDMwMzEsIDQ4OTU2LCA0ODk2MSwgNTY4MjEsIDU2ODI1LCA1NjgyOSwgNTY4MzMsIDU2ODM3LCAKLSAgICA1Njg0MSwgNTY4NDUsIDU2ODQ5LCA1Njg1MywgNTY4NTcsIDU2ODYxLCA1Mzk5NiwgMjg1MjgsIDQ0Mjk3LCA0NDE0NywgCi0gICAgNDQzMDksIDU2ODY1LCAyODIzMSwgNDkyNDEsIDUxOTYxLCA1Njg2OSwgNDU0NDksIDM4NzgzLCA1MzYyMSwgNTY4NzMsIAotICAgIDU2ODc3LCA1Njg4MSwgNTY4ODUsIDU2ODg5LCA1Njg5MywgNDg2MzEsIDUxNDExLCA1MTQxNiwgNTE0MjEsIDU2ODk3LCAKLSAgICA1NjkwMSwgNTIzMjYsIDUxNDI2LCA1MTQzNiwgNTY5MDUsIDUxNDQxLCA1MTQ0NiwgNTE0NTEsIDQ4NjM2LCA1MTQ1NiwgCi0gICAgNTY5MDksIDUxNDYxLCA1MjM3MSwgNTE0NjYsIDUxNDcxLCAyMDk4MSwgNTY5MTMsIDU2OTE3LCAzMTM0MiwgNTY5MjEsIAotICAgIDM0NDI5LCA1NjkyNSwgNTY5MjksIDU2OTMzLCA2MDQsIDU2OTM3LCA1Njk0MSwgNTY5NDUsIDI3MjQxLCA1Njk0OSwgCi0gICAgNTY5NTMsIDU2OTU3LCA1Njk2MSwgNTY5NjUsIDU2OTY5LCA1Njk3MywgNTY5NzcsIDU2OTgxLCA1Njk4NSwgNTY5ODksIAotICAgIDU2OTkzLCA1Njk5NywgMjM5NDIsIDU3MDAxLCA1NzAwNSwgNTcwMDksIDU3MDEzLCA1NzAxNywgNTcwMjEsIDU3MDI1LCAKLSAgICAzNDgwNywgNTcwMjksIDU3MDMzLCA0NDA1NywgNTcwMzcsIDU3MDQxLCA1NzA0NSwgNTcwNDksIDU3MDUzLCA1NzA1NywgCi0gICAgNTcwNjEsIDU3MDY1LCA1NzA2OSwgNTcwNzMsIDU3MDc3LCA1NzA4MSwgNTcwODUsIDU3MDg5LCA1NzA5MywgNTcwOTcsIAotICAgIDUwOTY2LCA1NzEwMSwgNDg0NzEsIDU3MTA1LCA1MDk3NiwgNTcxMDksIDU3MTEzLCA1NzExNywgNTA5ODEsIDM1NDczLCAKLSAgICAyNjU5MiwgNTcxMjEsIDQ5MDQ2LCA1MzYzMSwgNTcxMjUsIDU3MTI5LCA1NzEzMywgNTA2OTEsIDU3MTM3LCA1MTAwMSwgCi0gICAgNTEwMDYsIDU3MTQxLCA1NzE0NSwgNTcxNDksIDUxMDExLCA1NzE1MywgMzE2LCA1MTAxNiwgNTcxNTcsIDU3MTYxLCAKLSAgICA1MTAyMSwgNTEwMjYsIDQ4OTcxLCA1MTAzNiwgNTEwNDEsIDUxMDQ2LCA1MTA1NiwgNTEwNjEsIDU3MTY1LCA1NzE2OSwgCi0gICAgNTcxNzMsIDMyNjY1LCA0ODMxMSwgNTcxNzcsIDUxMDcxLCA1MTA3NiwgNTcxODEsIDU3MTg1LCA1NzE4OSwgNTcxOTMsIAotICAgIDU3MTk3LCA1NzIwMSwgNTcyMDUsIDU3MjA5LCA1NzIxMywgNDEyNjgsIDU3MjE3LCA1NzIyMSwgNTcyMjUsIDU3MjI5LCAKLSAgICA1NzIzMywgNTcyMzcsIDUxMDgxLCA1NzI0MSwgNTcyNDUsIDU3MjQ5LCA1NzI1MywgNTEwODYsIDQ1NjI5LCA1MTA5NiwgCi0gICAgNDQ5OTMsIDU3MjU3LCA1NzI2MSwgNTExMDYsIDUxMTExLCA1NzI2NSwgMjAyNTgsIDUxMTE2LCA1MTEyMSwgNTExMjYsIAotICAgIDQxMzg3LCA1MTEzNiwgNTcyNjksIDUxMTQxLCA1NzI3MywgNTExNTEsIDU3Mjc3LCA1NzI4MSwgNDU4MzksIDU3Mjg1LCAKLSAgICA1NzI4OSwgNTExNTYsIDE5MDU2LCA1MTE2NiwgNTcyOTMsIDU3Mjk3LCA1NzMwMSwgNTczMDUsIDU3MzA5LCAyODI2NCwgCi0gICAgNTExNzEsIDU3MzEzLCA1MTE3NiwgNTczMTcsIDM1OTQzLCA1NzMyMSwgMzg1OTksIDU3MzI1LCA1NzMyOSwgMjk4OTIsIAotICAgIDUxMTgxLCA1NzMzMywgNTExODYsIDM1OTM1LCA1MTE5NiwgNDcxMTcsIDU3MzM3LCA1NzM0MSwgNTczNDUsIDU3MzQ5LCAKLSAgICA1MTIwMSwgNDcyNTUsIDUxMjExLCA1NzM1MywgNTczNTcsIDU3MzYxLCA1NzM2NSwgNTczNjksIDU3MzczLCA1NzM3NywgCi0gICAgNTEyMTYsIDU3MzgxLCA1NzM4NSwgNTEyMjEsIDU3Mzg5LCA1NzM5MywgNTczOTcsIDQwNjczLCA1NzQwMSwgNTc0MDUsIAotICAgIDU3NDA5LCA1NzQxMywgNDcxNzcsIDQ3MTgzLCA1NzQxNywgNTc0MjEsIDU3NDI1LCAyMTMzMiwgMzQ3OTgsIDExNjM4LCAKLSAgICA1NzQyOSwgNTc0MzMsIDU3NDM3LCA1MTYxMSwgNTc0NDEsIDU3NDQ1LCA0ODMxNiwgNDAyMTgsIDU3NDQ5LCA1NzQ1MywgCi0gICAgNTc0NTcsIDU3NDYxLCA1NzQ2NSwgNTc0NjksIDU3NDczLCA1MzM0NiwgNTc0NzcsIDQyNzkxLCA1NzQ4MSwgNDQ3MzUsIAotICAgIDU3NDg1LCA1NzQ4OSwgNTc0OTMsIDU3NDk3LCA1NzUwMSwgNTc1MDUsIDU3NTA5LCA1NzUxMywgNTc1MTcsIDU3NTIxLCAKLSAgICA1NzUyNSwgNTc1MjksIDU3NTMzLCA1NzUzNywgNTc1NDEsIDU3NTQ1LCA1NzU0OSwgNTc1NTMsIDU3NTU3LCA1NzU2MSwgCi0gICAgNTc1NjUsIDU3NTY5LCA1NzU3MywgNTc1NzcsIDU3NTgxLCA1NzU4NSwgNTc1ODksIDU3NTkzLCA1NzU5NywgNTc2MDEsIAotICAgIDU3NjA1LCA1NzYwOSwgNTc2MTMsIDU3NjE3LCA1NzYyMSwgNTc2MjUsIDU3NjI5LCA1NzYzMywgNTc2MzcsIDU3NjQxLCAKLSAgICA1NzY0NSwgNTc2NDksIDU3NjUzLCA1NzY1NywgNTc2NjEsIDU3NjY1LCA0NDI5MSwgNDQ2MzksIDU3NjY5LCA0OTI5NiwgCi0gICAgNTc2NzMsIDU3Njc3LCA1NzY4MSwgNDUyOTksIDUyNDE2LCA0NDI2NywgMzU1ODMsIDU3Njg1LCA1MjQyMSwgNDUwMTcsIAotICAgIDUyNDMxLCAzMTA0MiwgMzc5NTksIDU3Njg5LCA1NzY5MywgNTc2OTcsIDQ2OTM3LCA1NzcwMSwgNDc4NTEsIDUzMDUxLCAKLSAgICA1MjQ0MSwgNTc3MDUsIDU3NzA5LCA1NzcxMywgNTc3MTcsIDQ1MTI1LCA1MzA2MSwgNTI0NDYsIDUyNDUxLCA1MjQ1NiwgCi0gICAgNTI0NjEsIDU3NzIxLCA1NzcyNSwgNTI0NjYsIDUyNDcxLCA1MjQ3NiwgNTI0ODEsIDU3NzI5LCA1NzczMywgMzEzNjIsIAotICAgIDM4ODE1LCAyNzMyOSwgNTc3MzcsIDUzMzcxLCA1Nzc0MSwgNTc3NDUsIDUzMzgxLCA1MzM4NiwgNTc3NDksIDU3NzUzLCAKLSAgICA0MjA2NiwgNTc3NTcsIDUzMzkxLCA1Nzc2MSwgNTc3NjUsIDU3NzY5LCA1MzM5NiwgNTM0MDEsIDU3NzczLCA1Nzc3NywgCi0gICAgNTc3ODEsIDQxODE0LCA1MzQxMSwgNTM0MTYsIDU3Nzg1LCA1MzQyMSwgNTc3ODksIDU3NzkzLCAzMjI2MCwgNTc3OTcsIAotICAgIDU3ODAxLCA1NzgwNSwgNTc4MDksIDUzNDI2LCA1MzQzMSwgNTM0MzYsIDU3ODEzLCA1NzgxNywgNTc4MjEsIDUzNDQxLCAKLSAgICA1MzQ0NiwgNTM0NTEsIDUzNDU2LCA1NzgyNSwgNTc4MjksIDU3ODMzLCA1NzgzNywgNTc4NDEsIDU3ODQ1LCA1Nzg0OSwgCi0gICAgNDYyMDUsIDU3ODUzLCA1Nzg1NywgNTc4NjEsIDU3ODY1LCA1Nzg2OSwgNTc4NzMsIDUzNjgxLCA1Nzg3NywgNTM0NjYsIAotICAgIDU3ODgxLCA1Nzg4NSwgNTc4ODksIDU3ODkzLCA1Nzg5NywgNTc5MDEsIDU3OTA1LCA1NzkwOSwgNTc5MTMsIDU3OTE3LCAKLSAgICA1NzkyMSwgNTc5MjUsIDU3OTI5LCAyODA2LCA1NzkzMywgNTc5MzcsIDU3OTQxLCA1Nzk0NSwgNTc5NDksIDU3OTUzLCAKLSAgICA1Nzk1NywgNTc5NjEsIDU3OTY1LCA1Nzk2OSwgNTc5NzMsIDU3OTc3LCA1Nzk4MSwgNTc5ODUsIDU3OTg5LCA1Nzk5MywgCi0gICAgNTc5OTcsIDU4MDAxLCA1ODAwNSwgNTgwMDksIDU0MDIxLCA1MDY2NiwgNTgwMTMsIDU4MDE3LCAzNDc4OSwgMjk4NzIsIAotICAgIDU4MDIxLCAzMTQzMiwgNDQzMTUsIDQ0MzIxLCA1MDA2MSwgNTgwMjUsIDM2MjYzLCA1ODAyOSwgNDAyMzIsIDM4NTExLCAKLSAgICA1ODAzMywgMzcwMzksIDUzODE2LCA1ODAzNywgNTgwNDEsIDU4MDQ1LCA1ODA0OSwgNTgwNTMsIDU4MDU3LCA1ODA2MSwgCi0gICAgNTgwNjUsIDU4MDY5LCA1ODA3MywgNTgwNzcsIDU4MDgxLCA1ODA4NSwgNTgwODksIDU4MDkzLCA1ODA5NywgNTgxMDEsIAotICAgIDU4MTA1LCA1ODEwOSwgNTgxMTMsIDU4MTE3LCA1ODEyMSwgNTgxMjUsIDU4MTI5LCA1ODEzMywgNTgxMzcsIDU4MTQxLCAKLSAgICA1ODE0NSwgNTgxNDksIDU4MTUzLCA1ODE1NywgNTgxNjEsIDU4MTY1LCA1ODE2OSwgNTgxNzMsIDU4MTc3LCA1ODE4MSwgCi0gICAgNTgxODUsIDU4MTg5LCA1ODE5MywgNTgxOTcsIDU4MjAxLCA1ODIwNSwgNTE2NjYsIDUxNjcxLCA1MTI4MSwgNTEyODYsIAotICAgIDQ4NTk2LCA1MTI5MSwgNTgyMDksIDQ4NjAxLCA1ODIxMywgNTEyOTYsIDUxMzAxLCA0ODYwNiwgNTE2NzYsIDUxNjgxLCAKLSAgICA1MTY4NiwgNTgyMTcsIDU4MjIxLCA1ODIyNSwgNTgyMjksIDU4MjMzLCA1ODIzNywgNTgyNDEsIDU4MjQ1LCA1ODI0OSwgCi0gICAgNTgyNTMsIDU4MjU3LCA1ODI2MSwgNTgyNjUsIDQwNjQ1LCA1ODI2OSwgNTgyNzMsIDMxMzUyLCA0ODU0NiwgNTgyNzcsIAotICAgIDU4MjgxLCA1ODI4NSwgNTgyODksIDU4MjkzLCA1ODI5NywgNTI1MjYsIDU4MzAxLCA0ODgxNiwgNTI1MzYsIDUyNTQ2LCAKLSAgICA0ODgyMSwgNTI1NjEsIDU4MzA1LCA1MjU2NiwgNTI1NzEsIDU4MzA5LCA1MjU3NiwgNTI1ODEsIDU4MzEzLCA1ODMxNywgCi0gICAgNTgzMjEsIDU4MzI1LCA1ODMyOSwgNTgzMzMsIDU4MzM3LCA1MjU5MSwgNTI1OTYsIDUyNjAxLCA1ODM0MSwgNTQyMTEsIAotICAgIDUyNjA2LCA1ODM0NSwgNTgzNDksIDU4MzUzLCA1MjYxMSwgNTgzNTcsIDUyNjE2LCA1MjYyMSwgNTI2MjYsIDU4MzYxLCAKLSAgICA1Mzc1MSwgNTI2MzEsIDUyNjM2LCA1ODM2NSwgNTgzNjksIDU4MzczLCA1MjY0MSwgNTgzNzcsIDUyNjUxLCA1MzUzMSwgCi0gICAgNTI2NTYsIDUyNjYxLCA1MjY2NiwgNTI2NzEsIDU4MzgxLCA1ODM4NSwgMjA4MjYsIDI3NDI5LCAyMTMyMCwgNjQyMywgCi0gICAgMzYxMDQsIDM1Nzg0LCA0NjI2NiwgMzk1MTksIDMzNDk0LCA3MTAsIDU0NzkwLCA1OTExLCA1NjU1LCA0MDQzNiwgNTgzODgsIAotICAgIDYxNjcsIDM0OTE2LCA1ODM5MSwgNTgzOTQsIDQ5MjUyLCAzOTU4MiwgMzQ2MzcsIDU0NDEwLCA0MzAyNiwgNTM4MTcsIAotICAgIDU1NTQyLCA0MzY4MCwgNDEyMDYsIDU0NTM4LCAyODM1MywgNTgzOTcsIDk1OSwgMTEwMiwgNTQ5NTgsIDY5MzUsIDU4NDAwLCAKLSAgICA1ODQwMywgNTg0MDYsIDU4NDA5LCA1Njc5NCwgNTg0MTIsIDU4NDE1LCA1NjMwMiwgMzY1NzYsIDM5NjEwLCAyNDg2NywgCi0gICAgMzExNDMsIDY4OSwgMTE3ODIsIDUzOTYyLCA0Nzk2MiwgNDcxNDIsIDI2NzAzLCA1ODQxOCwgMzMzNzcsIDU4NDIxLCAKLSAgICAzNDIzMiwgNTg0MjQsIDU4NDI3LCAyNTA4MywgNTcxOSwgMjA1NjYsIDQ3OCwgMjUyMTUsIDQxNjc1LCA4OTcsIDY0OCwgCi0gICAgNTg0MzAsIDQzNTE4LCAyNDkzOSwgMjA1MTEsIDUwMTkyLCA0NjMyNiwgNTg0MzMsIDIwNTUzLCAxNDAxLCAxMTQ3LCAKLSAgICAyODQ0MSwgMzQ3OTAsIDU4NDM2LCA0Mzg5NiwgNDA0MDgsIDQ0NjE2LCA0ODk1NywgNTQ1OTgsIDU4NDM5LCA1MTg3NywgCi0gICAgMjM4NzEsIDU4NDQyLCA0MDcyMywgMzgzMTIsIDQ3MjA4LCAyNDM5OSwgMzA5NDMsIDU2ODM0LCA0MzY2OCwgMzg2MDAsIAotICAgIDQxODA4LCAyOTg1MywgNTg0NDUsIDM0NTQ3LCA0NDU2MiwgNDA2NzQsIDU4NDQ4LCA1MTg4NywgMjk0NTMsIDQ1NTU4LCAKLSAgICA1ODQ1MSwgMjY5NDUsIDU4NDU0LCA1ODQ1NywgNTg0NjAsIDQ4MTU3LCAyNDQzNSwgMzI2ODQsIDI3MjQyLCA1ODQ2MywgCi0gICAgNDg4OTIsIDU4NDY2LCA1ODQ2OSwgNTg0NzIsIDQ1NzUwLCA1NjM0NiwgNTg0NzUsIDQ0NTkyLCAyNDE1OSwgNTg0NzgsIAotICAgIDM5NzkyLCA0NTcyMCwgNTk3NSwgNTg0ODEsIDQwNDcxLCA0NzA3NiwgMzMyMDYsIDI5NTEzLCAzMTI4MywgMTE4ODcsIAotICAgIDI0NDU5LCA1NzAyNiwgNTY4MjYsIDU4NDg0LCA1ODQ4NywgNTg0OTAsIDI5OTEzLCA0MjI1NiwgNTg0OTMsIDU1MzIyLCAKLSAgICA1ODQ5NiwgNDYyNjAsIDU4NDk5LCA1ODUwMiwgMjg1LCAzMzQzMSwgNTUwOTQsIDUxODgyLCAyODM5NywgMzg4NTYsIAotICAgIDU2NDU4LCA1ODUwNSwgMjQxMzUsIDQwMjI2LCA1ODUwOCwgMjgwNywgMzk2OTQsIDQ0MDIyLCA1NjgyMiwgNTg1MTEsIAotICAgIDMxMzQzLCAyMDYzMSwgMjY0ODcsIDM1NTI4LCA1ODUxNCwgMjExMTIsIDM2NjA4LCA1NTMyNiwgMTE2MDcsIDU4NTE3LCAKLSAgICAyNDIwNywgNTQwNjcsIDU4NTIwLCA2NzU5LCA2MDUsIDU4NTIzLCA1ODUyNiwgMzk1ODksIDQ3Mjk3LCA1ODUyOSwgNTg1MzIsIAotICAgIDU4NTM1LCAzNTY0MCwgNTg1MzgsIDE5OTc5LCA1ODU0MSwgMzg0NjQsIDM5OTA0LCA0NzAzNCwgMjAwNDksIDYyMzEsIAotICAgIDU4NTQ0LCA1NjM0MiwgMzgyOTYsIDM2MzY4LCA0MzMzMiwgNjk5OSwgNTg1NDcsIDQzNzA0LCA1ODU1MCwgNTg1NTMsIAotICAgIDU4NTU2LCA1ODU1OSwgNTg1NjIsIDM1NDI5LCA1ODU2NSwgMzEzMjMsIDU4NTY4LCA1ODU3MSwgMjQ0OTUsIDkxMywgCi0gICAgNDgzNTcsIDU4NTc0LCA1ODU3NywgNTUyNywgNTY3MSwgMTIsIDI1MDk1LCA1NTAyNiwgNTg1ODAsIDU4NTgzLCA1NjM1MCwgCi0gICAgNTQ0NDIsIDU4NTg2LCA0MjkzNiwgMzQ5MDcsIDMzMzA1LCA0NDIwMiwgNDgxMDcsIDU4NTg5LCA1ODU5MiwgMTIxMCwgCi0gICAgNTg1OTUsIDU4NTk4LCA1ODYwMSwgMjg4OTIsIDU2NTQyLCAzNTQ0NywgMzY3MTIsIDU4NjA0LCA1NTc3MCwgMjg4NzAsIAotICAgIDU4NjA3LCAyMTA4NiwgNDA1NjksIDUzOTgyLCA0MDU1NSwgNTg2MTAsIDE5OTUxLCA1ODYxMywgNDI2NDgsIDUwMTEyLCAKLSAgICA1NzE2NiwgNTQwMjIsIDU4NjE2LCA1NzAzLCAyNjQ1MSwgMzY3MDQsIDU4NjE5LCA1NjI1NCwgMTQ1OCwgNTg2MjIsIAotICAgIDMwMDMzLCA1ODYyNSwgNTQ2OTAsIDU4NjI4LCA1ODYzMSwgNjU1MSwgMzQ4MTcsIDU1NjYyLCA1ODYzNCwgNTg2MzcsIAotICAgIDU4NjQwLCA1ODY0MywgNTY5NDYsIDU4NjQ2LCA1ODY0OSwgNTY3MTAsIDU1MjEwLCA1Njk1OCwgNTg2NTIsIDQ2Mzk4LCAKLSAgICA1ODY1NSwgNTg2NTgsIDU4NjYxLCA1ODY2NCwgNTg2NjcsIDQzMTA0LCA1ODY3MCwgNTg2NzMsIDU4Njc2LCA1MDAzNywgCi0gICAgNTc3NzQsIDU4Njc5LCAzMzI5NiwgNTAzMDIsIDU4NjgyLCA1ODY4NSwgNTg2ODgsIDU4NjkxLCA1ODY5NCwgNTg2OTcsIAotICAgIDUwMTg3LCA1ODcwMCwgMzk4NjIsIDU4NzAzLCAzMTcsIDU4NzA2LCA1ODcwOSwgNTg3MTIsIDU1MjI2LCAyODE1NSwgCi0gICAgNTg3MTUsIDU4NzE4LCA1Nzk0MiwgNTg3MjEsIDQwMDU4LCA2MzIsIDU4NzI0LCAzNzAzMiwgNTEzNTcsIDU4NzI3LCAKLSAgICA1NTA4NiwgNTY1NTgsIDU4NzMwLCAxODk4MiwgNTg3MzMsIDU1NDMsIDUzNjYyLCAzMzE4OCwgNDI5NzgsIDU4NzM2LCAKLSAgICAzMjY2NiwgNTU2ODIsIDI2NDc1LCA0OTg2NywgNTg3MzksIDU4NzQyLCA1MzkzMiwgNTg3NDUsIDU4NzQ4LCAyOTQwMywgCi0gICAgNjE5OSwgNjIxNSwgNTg3NTEsIDU4NzU0LCA2Mjk1LCA2NDM5LCA1ODc1NywgNTg3NjAsIDU4NzYzLCA1ODc2NiwgNTg3NjksIAotICAgIDU4NzcyLCA2Njc5LCA1ODc3NSwgNDM5NDQsIDUxNzE3LCAyNjU5MywgNzAxNSwgNTY1OTQsIDU4Nzc4LCA1ODc4MSwgCi0gICAgNDc5NzcsIDU4Nzg0LCA1NjUyMiwgMzMwLCA1ODc4NywgNTg3OTAsIDU4NzkzLCA0MzU2MCwgNTg3OTYsIDQyMTkzLCAKLSAgICAzNTk5MiwgMjA3ODcsIDI4MjIxLCAyMTM4NSwgNTg3OTksIDI4MjEwLCAxMDU4LCA1NTMzMCwgNTMzMTIsIDU4ODAyLCAKLSAgICA1ODgwNSwgNDU3MzgsIDg2MiwgNTg4MDgsIDU4ODExLCA1ODgxNCwgNTg4MTcsIDU4ODIwLCA1ODgyMywgNTg4MjYsIAotICAgIDU4ODI5LCA1ODgzMiwgNTg4MzUsIDU4ODM4LCA0MjA4MSwgNTg4NDEsIDQ5MjM3LCA1ODg0NCwgNTc5MjYsIDU4ODQ3LCAKLSAgICA0MTYsIDQzNTAwLCA1ODg1MCwgNTg4NTMsIDU4ODU2LCA1MDcyNywgNTg4NTksIDU4ODYyLCA1ODg2NSwgNTg4NjgsIAotICAgIDQ5MzAyLCA1ODg3MSwgNTU1MzQsIDI5MDkzLCA1ODg3NCwgNDg2OTcsIDU4ODc3LCA1ODg4MCwgNTg4ODMsIDQzOTkyLCAKLSAgICA1ODg4NiwgMzkwMDEsIDU4ODg5LCA1ODg5MiwgNDQzMjIsIDMxNDQzLCA1ODg5NSwgNTg4OTgsIDU4OTAxLCA1ODkwNCwgCi0gICAgNTg5MDcsIDU4OTEwLCA1ODkxMywgMjgyMywgNTc0ODIsIDU4OTE2LCA1ODkxOSwgNDQ3NzIsIDU4OTIyLCA1ODkyNSwgCi0gICAgNTAzMDcsIDU4OTI4LCA1ODkzMSwgNTg5MzQsIDExODEyLCA1ODkzNywgNTg5NDAsIDU4OTQzLCA1ODk0NiwgMzIxNTMsIAotICAgIDU4OTQ5LCA1ODk1MiwgNTg5NTUsIDU4OTU4LCA1ODk2MSwgNTc3OTAsIDU4OTY0LCA1ODk2NywgNTg5NzAsIDU4OTczLCAKLSAgICA1ODk3NiwgNDM1MjQsIDU4OTc5LCA1ODk4MiwgMjA0ODMsIDEyOTcsIDQ4NTA3LCAyMDY5NiwgNTg5ODUsIDU4OTg4LCAKLSAgICA1ODk5MSwgNTg5OTQsIDUxMjQyLCA1ODk5NywgNTYzMTQsIDU3MDcwLCA1OTAwMCwgNTkwMDMsIDU5MDA2LCA1OTAwOSwgCi0gICAgNDgyNzIsIDU5MDEyLCA1OTAxNSwgNTkwMTgsIDU3NDEwLCA2MDYsIDEwNTksIDMxMTIsIDQ0MSwgMTQwMiwgNzExLCA4OCwgCi0gICAgMjEwNzQsIDMxNzYsIDU1Njc5LCA0MTMxOSwgMTI5OCwgMzE4LCA0MzM2OSwgMjEsIDM3LCAzNTEyNCwgMzkxMjEsIDg2MywgCi0gICAgMTE4NiwgNTU0MTksIDkwNCwgNTkwMjEsIDM3Nzc3LCA0NTM2MSwgMTkwNTgsIDMyLCAxMDEwLCAxOTcsIDM4MywgMzQyLCAKLSAgICAyOTIxNCwgNTkwMjMsIDEwMSwgMzkwMzAsIDc2MSwgNTkwMjUsIDQ2MjYxLCA1NDQzOSwgNTQ5OTUsIDIzOSwgODI5LCAKLSAgICA0ODMxOCwgNTkwMjcsIDIxMCwgNDc2MjgsIDg1NSwgMjY2NDksIDM2NjE3LCA1Nzc1OSwgNTg5NjgsIDU5MDI5LCA1OTAzMSwgCi0gICAgMTAyNSwgNDM1MjUsIDU3ODA3LCAzMjgyMCwgNDI5ODUsIDIyNCwgMTE5NCwgMjY3NDgsIDYzMywgNTkwMzMsIDMyODgzLCAKLSAgICA1OTAzNSwgMzg1NDUsIDI3MDM0LCA1OTAzNywgMjcxLCA2MjYsIDU3MTc5LCAzODgsIDk1MCwgODc3LCAzNjI3MywgNTg2MTQsIAotICAgIDU5MDM5LCA1OTA0MSwgNCwgMTQ3LCAyODkyNCwgMjY2NzEsIDExNDIsIDI0MTk2LCA1NDM5NSwgNTkwNDMsIDMwMCwgCi0gICAgNTMxOTgsIDI4Mjc3LCA0Mjc3NSwgNTg1ODcsIDMyMjg5LCA1NTMzOSwgNTY2OTUsIDU5MDQ1LCA1OTA0NywgNTQwLCAzNzgsIAotICAgIDExOSwgNDg2NzMsIDU4NDY3LCA2OTYsIDQzMTc3LCA0MjY1NSwgOTMyLCAzMjA0NCwgMzI2NzYsIDExMDksIDQyNTk1LCAKLSAgICA1OTA0OSwgNTkwNTEsIDU5MDUzLCA1OTA1NSwgNTkwNTcsIDM5MDcyLCAyNjk3OSwgNDQ0LCA1OTA1OSwgNTkwNjEsIAotICAgIDM3MjI1LCA1OTA2MywgOCwgODAyLCAxMTE1LCA0ODc5OCwgNDU0LCA3OTAsIDU5MDY1LCA0MCwgMzg3ODYsIDUsIDE0LCAKLSAgICAxMTEsIDI2LCAxMzMsIDQ5LCAxMTUsIDYyLCAyMjUsIDksIDQzLCA4MywgNTg2MTUsIDU4MywgNDAyLCAxOTMsIDU5MDY3LCAKLSAgICA0NDUsIDU5MDY4LCAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGV4aWNvbl9vZmZzZXRbXSA9IHsKKyAgICAwLCAwLCA2LCAxMCwgMTUsIDIzLCAyNywgMzQsIDM5LCA0MSwgNDQsIDUyLCA2MiwgNjgsIDgxLCA5MywgMTAyLCAxMDgsIAorICAgIDExMywgMTIxLCAxMzAsIDEzNSwgMTM5LCAxNDUsIDE1MCwgMTU4LCAxNjEsIDE2OCwgMTczLCAxODEsIDE4NiwgMTkyLCAKKyAgICAyMDAsIDIwNywgMjE3LCAyMjQsIDIyNywgMjM2LCAyMzksIDI0MiwgMjQ3LCAyNTMsIDI2MiwgMjY2LCAyNzMsIDI4MCwgCisgICAgMjg1LCAyOTQsIDEzNiwgMzAyLCAzMDMsIDMwOSwgMzE1LCAzMjMsIDMyOSwgMzM1LCAzNDAsIDM0NiwgMzUyLCAzNjAsIAorICAgIDM2NywgMzY5LCAzNzIsIDM3NiwgMzgzLCAzOTAsIDM5NiwgNDAzLCA0MDgsIDQxMCwgNDE4LCA0MjEsIDQyNiwgMzA3LCAKKyAgICA0MjgsIDQzMCwgNDM2LCA0NDEsIDQ1MCwgNDU1LCA0NjAsIDQ3MCwgNDc0LCA0ODcsIDQ5MSwgNDk2LCA1MDUsIDUwOCwgCisgICAgNTE0LCA1MTgsIDUyNiwgNTM2LCA1NDQsIDU1MSwgNTYwLCA1NjgsIDU3NiwgNTgxLCA1ODksIDYwMCwgNjA0LCA2MTEsIAorICAgIDYxNCwgNjIwLCA2MjQsIDYyOCwgNjI5LCA2MzQsIDYzOCwgNjQwLCA2NDMsIDY1MiwgMzIyLCA2NTUsIDY1OSwgNjY0LCAKKyAgICA2NzIsIDY3NiwgNjc4LCA2ODEsIDY4NywgNjk0LCA3MDEsIDcxMCwgNzE5LCA3MjIsIDczMiwgNzQxLCA3NTAsIDc1NiwgCisgICAgNzYyLCA3NjksIDc3MiwgNzgwLCA3ODgsIDc5MiwgNzk2LCA4MDQsIDgxMywgODIyLCA4MjcsIDgzMSwgNjg2LCA4MzgsIAorICAgIDg0NiwgODUwLCA4NTQsIDg1NywgODYyLCA4NjcsIDg3MSwgODc5LCA3OTQsIDYwOSwgODgyLCA4ODcsIDIyNSwgODkwLCAKKyAgICA4OTUsIDkwNSwgOTE0LCA5MjAsIDkyNywgOTM0LCA5NDIsIDk0NiwgOTU0LCA5NjAsIDk2NywgOTczLCA5NzksIDk4NCwgCisgICAgOTg4LCA5OTQsIDEwMDcsIDEwMTIsIDEwMTUsIDEwMjAsIDIyLCAxMDI0LCAxMDI3LCAxMDM3LCAxMDQyLCAxMDQ2LCAxMDU1LCAKKyAgICAxMDU4LCAxMDY0LCAxMDc0LCAxMDc3LCAxMTEsIDEwODEsIDEwODYsIDEwOTIsIDEwOTYsIDExMDEsIDExMDcsIDExMTIsIAorICAgIDExMTUsIDExMjIsIDExMjQsIDExMjYsIDExMzQsIDExNDQsIDExNDcsIDExNTAsIDExNTcsIDExNjUsIDMzOCwgMTE2NywgCisgICAgMTE3MCwgMTE3NSwgMTE4MywgMTE5MiwgMTE5NSwgMTIwNCwgMTIxMCwgMTIxNiwgMTIxOCwgMTIyMywgMTIyOCwgMTIzNCwgCisgICAgMTIzOSwgMTI0NCwgMTI0OCwgMTI1MywgMTI1OSwgMTI2NCwgMTI2OSwgMTI3MywgMTI3OCwgMTI4MywgMTI4NywgMTI5MiwgCisgICAgMTI5NywgMTMwMiwgMTMwOCwgMTMxNCwgMTMyMCwgMTMyNSwgMTMyOSwgMTMzNCwgMTMzOSwgMTM0NCwgMTM0OCwgMTM1MywgCisgICAgMTM1OCwgMTM2MywgMTM2OCwgMTIxOSwgMTIyNCwgMTIyOSwgMTIzNSwgMTI0MCwgMTM3MiwgMTI0NSwgMTM3OCwgMTM4NywgCisgICAgMTI0OSwgMTM5MSwgMTI1NCwgMTI2MCwgMTI2NSwgMTM5NSwgMTQwMCwgMTQwNSwgMTQwOSwgMTQxMywgMTQxOSwgMTQyMywgCisgICAgMTI3MCwgMTQyNiwgMTQzMCwgMTI3NCwgMTQzNiwgMTI3OSwgMTQ0MCwgMTQ0NCwgMTI4NCwgMTQ0OCwgMTQ1MywgMTQ1NywgCisgICAgMTQ2MCwgMTQ2NCwgMTI4OCwgMTI5MywgMTQ2OSwgMTI5OCwgMTQ3NSwgMTQ4MSwgMTQ4NywgMTQ5MywgMTMwMywgMTMxNSwgCisgICAgMTMyMSwgMTQ5NywgMTUwMSwgMTUwNSwgMTUwOCwgMTMyNiwgMTUxMiwgMTUxNCwgMTUxOSwgMTUyNCwgMTUzMCwgMTUzNSwgCisgICAgMTU0MCwgMTU0NCwgMTU0OSwgMTU1NCwgMTU1OSwgMTU2NCwgMTU3MCwgMTU3NSwgMTU4MCwgMTU4NiwgMTU5MiwgMTU5NywgCisgICAgMTYwMSwgMTYwNiwgMTYxMSwgMTYxNiwgMTYyMSwgMTYyNSwgMTYzMywgMTYzNywgMTY0MiwgMTY0NywgMTY1MiwgMTY1NywgCisgICAgMTY2MSwgMTY2NCwgMTY2OSwgMTY3NCwgMTY3OSwgMTY4NCwgMTY5MCwgMTY5NSwgMTY5OSwgMTMzMCwgMTcwMiwgMTcwNywgCisgICAgMTcxMiwgMTMzNSwgMTcxNiwgMTcyMCwgMTcyNywgMTM0MCwgMTczNCwgMTM0NSwgMTczOCwgMTc0MCwgMTc0NSwgMTc1MSwgCisgICAgMTM0OSwgMTc1NiwgMTc2NSwgMTM1NCwgMTc3MCwgMTc3NiwgMTM1OSwgMTc4MSwgMTc4NiwgMTc4OSwgMTc5NCwgMTc5OCwgCisgICAgMTgwMiwgMTgwNiwgMTgwOSwgMTgxMywgMTM2NCwgMTM2OSwgMTA0MCwgMTgxOCwgMTgyNCwgMTgzMCwgMTgzNiwgMTg0MiwgCisgICAgMTg0OCwgMTg1NCwgMTg2MCwgMTg2NiwgMTg3MSwgMTg3NywgMTg4MywgMTg4OSwgMTg5NSwgMTkwMSwgMTkwNywgMTkxMywgCisgICAgMTkxOSwgMTkyNSwgMTkzMCwgMTkzNSwgMTk0MCwgMTk0NSwgMTk1MCwgMTk1NSwgMTk2MCwgMTk2NSwgMTk3MCwgMTk3NSwgCisgICAgMTk4MSwgMTk4NiwgMTk5MiwgMTk5NywgMjAwMywgMjAwOSwgMjAxNCwgMjAyMCwgMjAyNiwgMjAzMiwgMjAzOCwgMjA0MywgCisgICAgMjA0OCwgMjA1MCwgMjA1MSwgMjA1NSwgMjA1OSwgMjA2NCwgMjA2OCwgMjA3MiwgMjA3NiwgMjA4MCwgMjA4MywgMjA4OCwgCisgICAgMjA5MiwgMjA5NywgMjEwMSwgMjEwNSwgMjExMCwgMjExNCwgMjExNywgMjEyMSwgMjEzNSwgMjEzOSwgMjE0MywgMjE0NiwgCisgICAgMjE1MSwgMjE1NSwgMjE1OSwgMjE2MywgMjE2OCwgMjE3MywgMjE3OCwgMjE4MiwgMjE4NywgMjE5MSwgMjE5NiwgMjIwMywgCisgICAgMjIwOSwgMjIxNCwgMjIxOSwgMjIyNCwgMjIzMCwgMjIzNSwgMjI0MSwgMjI0NiwgMjI0OSwgMTIzNiwgMjI1MSwgMjI1OCwgCisgICAgMjI2NiwgMjI3NiwgMjI4NSwgMjI5OSwgMjMwMywgMjMwNywgMjMyMCwgMjMyOCwgMjMzMiwgMjMzNywgMjM0MSwgMjM0NSwgCisgICAgMjM0OSwgMjM1NCwgMjM1OSwgMjM2NCwgMjM2OCwgMjM3MSwgMjM3NSwgMjM4MiwgMjM4OSwgMjM5NSwgMjQwMCwgMjQwNSwgCisgICAgMjQxMSwgMjQxNywgMjQyMiwgMjQyNSwgMTc0MiwgMjQyNywgMjQzMywgMjQzNywgMjQ0MiwgMjQ0NiwgMjQ1MCwgMTc0NywgCisgICAgMTc1MywgMjQ1NSwgMjQ1OSwgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ3NywgMjQ4MSwgMjQ4OCwgMjQ5MywgMjQ5NiwgMjUwMywgCisgICAgMjUwOSwgMjUxMywgMjUxNywgMjUyMSwgMjUyNywgMjUzMywgMjU0NywgMjU2NCwgMjU3OSwgMjU5NCwgMjYwMywgMjYwOCwgCisgICAgMjYxMiwgMjYxNywgMjYyMiwgMjYyNiwgMjYzOCwgMjY0NSwgMjY1MSwgMjE5OSwgMjY1NywgMjY2NCwgMjY3MCwgMjY3MywgCisgICAgMjY4MCwgMjY4NCwgMjY4OCwgMjY5MiwgMjA3MywgMjY5NiwgMjcwMSwgMjcwNiwgMjcxMCwgMjcxOCwgMjcyMiwgMjcyNiwgCisgICAgMjczMCwgMjczNSwgMjc0MCwgMjc0NSwgMjc0OSwgMjc1NCwgMjc1OSwgMjc2MywgMjc2OCwgMjc3MiwgMjc3NSwgMjc3OSwgCisgICAgMjc4MywgMjc4OCwgMjc5MiwgMjc5NiwgMjgwMiwgMjgxMSwgMjgxNSwgMjgxOSwgMjgyNSwgMjgzMCwgMjgzNywgMjg0MSwgCisgICAgMjg1MSwgMjg1NSwgMjg2MCwgMjg2NCwgMjg2OSwgMjg3NSwgMjg4MCwgMjg4NCwgMjM4NSwgMjg4OCwgMjg5MywgMjg5OSwgCisgICAgMjkwNCwgMjkwOCwgMjkxMywgMjkxOCwgMjkyMiwgMjkyOCwgMjkzMywgMjkzOSwgMjk0MywgMjk0OSwgMjk1NCwgMjk1OSwgCisgICAgMjk2NCwgMjk2OSwgMjk3NCwgMjk3OSwgMjk4NCwgMjk4OSwgMjk5NCwgMzAwMCwgMzAwNSwgMTI0NiwgODAsIDMwMTEsIAorICAgIDMwMTUsIDMwMTksIDMwMjMsIDMwMjgsIDMwMzIsIDMwMzYsIDMwNDAsIDMwNDQsIDMwNDksIDMwNTMsIDMwNTgsIDMwNjIsIAorICAgIDMwNjUsIDMwNjksIDMwNzQsIDMwNzgsIDMwODMsIDMwODcsIDMwOTEsIDMwOTUsIDMxMDAsIDMxMDQsIDMxMDcsIDMxMjAsIAorICAgIDMxMjQsIDMxMjgsIDMxMzIsIDMxMzYsIDMxNDAsIDMxNDMsIDMxNDcsIDMxNTEsIDMxNTYsIDMxNjAsIDMxNjUsIDMxNzAsIAorICAgIDMxNzUsIDMxNzksIDMxODIsIDMxODUsIDMxOTEsIDMxOTUsIDMxOTksIDMyMDIsIDMyMDYsIDMyMTAsIDMyMTMsIDMyMTksIAorICAgIDMyMjQsIDMyMjksIDMyMzUsIDMyNDAsIDMyNDUsIDMyNTEsIDMyNTcsIDMyNjIsIDMyNjcsIDMyNzIsIDEwNDQsIDUwNywgCisgICAgMzI3NywgMzI4MCwgMzI4NSwgMzI4OSwgMzI5MiwgMzI5NywgMzMwMiwgMzMwNiwgMzMxMSwgMzMxNSwgMzMyMCwgMzMyNCwgCisgICAgMzMyOCwgMzMzMSwgMzMzNywgMzM0NCwgMzM1MCwgMzM1NSwgMzM1OSwgMzM2NCwgMzM2OCwgMzM3OCwgMzM4MiwgMzM4NiwgCisgICAgMzM5MSwgMzM5NiwgMzQwNiwgMjA4NCwgMzQxMSwgMzQxNSwgMzQxOCwgMzQyNCwgMzQzMSwgMzQzNSwgNjIxLCA3MjAsIAorICAgIDM0MzksIDM0NDYsIDM0NTMsIDM0NTksIDM0NjQsIDM0NzAsIDM0NzUsIDIwOTMsIDM0NzksIDM0ODcsIDU1NSwgMzQ5MywgCisgICAgMzUwNCwgMzUwOCwgMzUxOCwgMjA5OCwgMzUyNCwgMzUyOSwgMzU0NCwgMzU1MCwgMzU1NywgMzU2NywgMzU3MywgMzU3OCwgCisgICAgMzU4NCwgMzU4NywgMzU5MSwgMzU5OCwgMzYwMywgMzYwNywgMzYxMSwgMzYxNSwgMzYxOSwgMzYyNCwgMzYzMCwgMzA3MCwgCisgICAgMzYzNSwgMzY0NywgMTU0NiwgMzY1NCwgMzY1NywgMzY2MSwgMzY2NCwgMzY2OCwgMzY4MiwgMzY4NiwgMzY4OSwgMzY5MywgCisgICAgMzY5OCwgMzcwMiwgMzcwNiwgMzcxMiwgMzcxOCwgMzcyMywgMzcyOSwgMzczMywgMzc0MSwgMzc1MSwgMzc1NywgMzc2MiwgCisgICAgMzc3MSwgMzc3OSwgMzc4NiwgMzc5MCwgMzc5OSwgMzgwMywgMzgwOCwgMzgxMywgMzgxNywgMzgyNSwgMzgyOSwgMzgzNCwgCisgICAgMzgzOCwgMjEwNiwgMTM4OCwgMzg0NCwgMzg0OSwgMzg1NSwgMzg2MCwgMzg2NSwgMzg3MCwgMzg3NSwgMzg4MCwgMzg4NSwgCisgICAgMzg5MSwgMzg5NiwgMzkwMiwgMzkwNywgMzkxMiwgMzkxNywgMzkyMywgMzkyOCwgMzkzMywgMzkzOCwgMzk0MywgMzk0OSwgCisgICAgMzk1NCwgMzk2MCwgMzk2NSwgMzk3MCwgMzk3NSwgMzk4MCwgMzk4NSwgMzk5MCwgMzk5NiwgNDAwMSwgNDAwNiwgMzQ0LCAKKyAgICA0NDAsIDQwMTEsIDQwMTcsIDQwMjEsIDQwMjUsIDQwMzAsIDQwMzQsIDQwMzgsIDQwNDEsIDQwNDUsIDQwNDksIDQwNTMsIAorICAgIDQwNTgsIDQwNjIsIDQwNjYsIDM4NDEsIDQwNzIsIDQwNzksIDQwODMsIDQwOTYsIDQxMDAsIDQxMDQsIDQxMDgsIDQxMTIsIAorICAgIDQxMTYsIDQxMjIsIDQxMjksIDQxMzMsIDQxNDEsIDQxNTAsIDQxNTYsIDQxNjEsIDQxNjQsIDQxNjgsIDQxNzIsIDQxODIsIAorICAgIDQxOTIsIDQyMDAsIDQyMDcsIDQyMTQsIDQyMjAsIDQyMjYsIDQyMzMsIDQyMzcsIDQyNDIsIDQyNDYsIDQyNTQsIDQyNTksIAorICAgIDQyNjcsIDQyNzIsIDQyNzcsIDQyODEsIDQyODYsIDQyOTMsIDQyOTYsIDQzMDAsIDQzMDQsIDQzMDcsIDQzMTMsIDQzMTksIAorICAgIDQzMjMsIDQzMzQsIDQzNDQsIDQzNTksIDQzNzQsIDQzODksIDQ0MDQsIDQ0MTksIDQ0MzQsIDQ0NDksIDQ0NjQsIDQ0NzksIAorICAgIDQ0OTQsIDQ1MDksIDQ1MjQsIDQ1MzksIDQ1NTQsIDQ1NjksIDQ1ODQsIDQ1OTksIDQ2MTQsIDQ2MjksIDQ2NDQsIDQ2NTksIAorICAgIDQ2NzQsIDQ2ODksIDQ3MDQsIDQ3MTksIDQ3MzQsIDQ3NDksIDQ3NjQsIDQ3NzksIDQ3OTQsIDQ4MDksIDQ4MjQsIDQ4MzksIAorICAgIDQ4NTQsIDQ4NjksIDQ4ODQsIDQ4OTksIDQ5MTQsIDQ5MjksIDQ5NDQsIDQ5NTksIDQ5NzQsIDQ5ODksIDUwMDQsIDUwMTksIAorICAgIDUwMzQsIDUwNDksIDUwNjQsIDUwNzksIDUwODgsIDUwOTcsIDUxMDIsIDUxMDgsIDUxMTIsIDUxMTcsIDUxMjEsIDUxMjQsIAorICAgIDUxMjgsIDI4NDYsIDUxMzEsIDUxMzYsIDMwNiwgNDI0LCA1MTQyLCA1MTUwLCA1MTU0LCA1MTU4LCA1MTYxLCA1MTY3LCAKKyAgICA1MTcxLCA1MTc5LCA1MTg1LCA1MTkwLCA1MTk3LCA1MjA0LCA1MjEwLCA1MjE1LCA1MjIyLCA1MjI4LCA1MjMyLCA1MjM3LCAKKyAgICA1MjQ5LCA1MjYwLCA1MjY3LCA1MjczLCAzMDkyLCA1Mjc3LCA1MjgzLCA1Mjg4LCA1MjkzLCA1Mjk4LCA1MzA0LCA1MzA5LCAKKyAgICA1MzE0LCA1MzE5LCA1MzI0LCA1MzMwLCA1MzM1LCA1MzQwLCA1MzQ2LCA1MzUxLCA1MzU3LCA1MzYyLCA1MzY4LCA1MzczLCAKKyAgICA1Mzc5LCA1Mzg0LCA1Mzg5LCA1Mzk0LCA1Mzk5LCA1NDA0LCA1NDEwLCA1NDE1LCA1NDIwLCA1NDI1LCA1NDMxLCA1NDM3LCAKKyAgICA1NDQzLCA1NDQ5LCA1NDU1LCA1NDYxLCA1NDY3LCA1NDczLCA1NDc5LCA1NDg1LCA1NDkxLCA1NDk3LCA1NTAyLCA1NTA3LCAKKyAgICA1NTEyLCA1NTE3LCA1NTIyLCA1NTI3LCA1NTMyLCA1NTM3LCA1NTQzLCA1NTQ5LCA1NTU0LCA1NTYwLCA1NTY2LCA1NTcyLCAKKyAgICA1NTc3LCA1NTgyLCA1NTg3LCA1NTkyLCA1NTk4LCA1NjA0LCA1NjA5LCA1NjE0LCA1NjE5LCA1NjI0LCA1NjI5LCA1NjM1LCAKKyAgICA1NjQwLCA1NjQ2LCA1NjUyLCA1NjU4LCA1NjY0LCA1NjcwLCA1Njc2LCA1NjgyLCA1Njg4LCA1Njk0LCA1MTYwLCA1Njk5LCAKKyAgICA1NzAzLCA1NzA3LCA1NzEwLCA1NzE3LCA1NzIwLCA1NzI4LCA1NzMzLCA1NzM4LCA1NzI5LCA1NzQzLCA1NzMwLCA1NzQ3LCAKKyAgICA1NzUzLCA1NzU5LCA1NzY0LCA1NzY5LCA1Nzc2LCA1NzgxLCA1Nzg1LCA1Nzg4LCA1NzkyLCAyMTQwLCA1MTYsIDU3OTYsIAorICAgIDU4MDAsIDU4MDUsIDU4MTEsIDU4MTYsIDU4MjAsIDU4MjMsIDU4MjcsIDU4MzIsIDU4MzYsIDU4NDMsIDU4NDcsIDU4NTEsIAorICAgIDU4NTUsIDg4NCwgNjk5LCA1ODU4LCA1ODY2LCA1ODczLCA1ODgwLCA1ODg2LCA1ODkzLCA1OTAxLCA1OTA4LCA1OTE1LCAKKyAgICA1OTIwLCA1OTMyLCAxMjY2LCAxMzk2LCAxNDAxLCA1OTQzLCAxNDA2LCA1OTQ3LCA1OTUxLCA1OTYwLCA1OTY5LCA1OTc1LCAKKyAgICA1OTgwLCA1OTg0LCA1OTkwLCA1OTk1LCA2MDAyLCA2MDA2LCA2MDE1LCA2MDI0LCA2MDMzLCA2MDQyLCA2MDQ3LCA2MDUyLCAKKyAgICA2MDY0LCA2MDY5LCAzMzEyLCA2MDczLCA2MDc1LCA2MDgwLCA2MDg0LCA2MDkzLCA2MTAxLCAxNDEwLCA4MjUsIDMzMTYsIAorICAgIDMzMjEsIDYxMDcsIDYxMTEsIDYxMjAsIDYxMjYsIDYxMzEsIDYxMzQsIDYxNDMsIDI1OTEsIDYxNDksIDYxNTcsIDYxNjEsIAorICAgIDYxNjUsIDMzMjUsIDYxNjksIDYxNzQsIDYxODEsIDYxODcsIDYxOTMsIDYxOTYsIDYxOTgsIDYyMDEsIDYyMDksIDYyMTcsIAorICAgIDYyMjUsIDYyMjgsIDYyMzMsIDU3NDAsIDYyMzYsIDYyMzgsIDYyNDMsIDYyNDgsIDYyNTMsIDYyNTgsIDYyNjMsIDYyNjgsIAorICAgIDYyNzMsIDYyNzgsIDYyODMsIDYyODgsIDYyOTQsIDYyOTksIDYzMDQsIDYzMDksIDYzMTUsIDYzMjAsIDYzMjUsIDYzMzAsIAorICAgIDYzMzUsIDYzNDAsIDYzNDUsIDYzNTEsIDYzNTYsIDYzNjEsIDYzNjYsIDYzNzEsIDYzNzYsIDYzODEsIDYzODYsIDYzOTEsIAorICAgIDYzOTYsIDY0MDEsIDY0MDYsIDY0MTEsIDY0MTYsIDY0MjEsIDY0MjYsIDY0MzEsIDY0MzYsIDY0NDIsIDY0NDgsIDY0NTMsIAorICAgIDY0NTgsIDY0NjMsIDY0NjgsIDY0NzMsIDIxOTcsIDIyMDQsIDIyMTAsIDY0NzgsIDY0ODQsIDIyMzYsIDIyNDIsIDY0OTIsIAorICAgIDY0OTYsIDY1MDEsIDY1MDUsIDY1MDksIDY1MTMsIDY1MTgsIDY1MjIsIDY1MjcsIDY1MzEsIDY1MzQsIDY1MzcsIDY1NDMsIAorICAgIDY1NDksIDY1NTUsIDY1NjEsIDY1NjcsIDY1NzMsIDY1NzksIDY1ODMsIDY1ODcsIDY1OTEsIDY1OTUsIDY1OTksIDY2MDQsIAorICAgIDY2MTEsIDY2MTksIDY2MjksIDY2MzQsIDY2MzgsIDY2NDksIDY2NjIsIDY2NzMsIDY2ODYsIDY2OTcsIDY3MDksIDY3MjEsIAorICAgIDY3MzMsIDY3NDYsIDY3NTksIDY3NjYsIDY3NzIsIDY3NzksIDY3ODUsIDY3ODksIDY3OTQsIDY3OTgsIDY4MDUsIDY4MTMsIAorICAgIDY4MTcsIDY4MjMsIDY4MzMsIDY4MzcsIDY4NDIsIDY4NDcsIDY4NTQsIDY4NjAsIDU4ODgsIDY4NzAsIDY4NzQsIDY4ODEsIAorICAgIDY5OCwgNjg4NSwgNjg4OSwgNjg5NCwgNjg5OSwgNjkwNCwgNjkwOCwgNjkxNCwgNjkyMiwgNjkyNiwgNjkzNiwgNjk0MCwgCisgICAgNjk0NiwgNjk1MSwgNjk1NSwgMjEzMiwgNjk2MSwgNjk2OSwgNjk3OCwgNjk4MiwgNjk4OCwgNjk5MywgNjk5OCwgNzAwMywgCisgICAgNzAwOSwgNzAxNCwgMzcwOCwgNzAxOSwgNzAyMywgNzAyOSwgNzAzNSwgNzA0MCwgNzA0NSwgNzA1MCwgNjk4MywgNzA1NiwgCisgICAgNzA2MCwgNzA2NywgNzA3MywgNzA3OCwgNzA4MiwgNzA4NywgNzA5MSwgNzEwMCwgNjE3NywgNjE4NCwgNzEwNSwgMjczMiwgCisgICAgNzEwOSwgNzExNCwgNzExOSwgNjk4OSwgNzEyMywgNjk5NCwgNjk5OSwgNzEyOCwgNzEzNSwgNzE0MiwgNzE0OCwgNzE1NCwgCisgICAgNzE2MCwgNzE2NSwgNzE3MCwgNzE3NSwgNzAwNCwgNzAxMCwgNzE4MSwgNzE4NywgNzE5MiwgNzIwMCwgNzAxNSwgNzIwNSwgCisgICAgMTA3OSwgNzIwOCwgNzIxNiwgNzIyMiwgNzIyOCwgNzIzNywgNzI0MiwgNzI0OCwgNzI2MywgNzI4MCwgNzI5OSwgNzMwOCwgCisgICAgNzMxNiwgNzMzMSwgNzM0MSwgNzM1MSwgNzM1NywgNzM2OSwgNzM3OCwgNzM4NiwgNzM5MywgNzQwMCwgNzQwNiwgNzQxMSwgCisgICAgNzQxOSwgNzQyOSwgNzQzNiwgNzQ0NiwgNzQ1NiwgNzQ2NiwgNzQ3NSwgNzQ4NSwgNzQ5OSwgNzUxNCwgNzUyMywgNzUzMSwgCisgICAgNzUzNiwgNzU0MCwgNzU0OSwgNzU1OSwgNzU2OSwgNzU3OSwgNzU4NCwgNzU4OCwgNzU5NywgNzYwNywgNzYxOCwgNzYzMSwgCisgICAgNzY0NCwgNzY1NiwgNzY2NCwgNzY2OSwgNzY3NSwgNzY3OCwgNzY4MiwgNzY5MCwgNzY5NSwgNzY5OSwgNzcwNywgNzcxNiwgCisgICAgNzcyNCwgNzczMSwgNzc0MiwgNzc0NiwgNzc0OSwgNzc1NSwgNzc1OSwgNzc2NSwgNzc3MiwgNzc3NywgNzc4NCwgNzc5MSwgCisgICAgNzc5OCwgNzgwNSwgNzgxMiwgNzgxOSwgNzgyNCwgNzI3NiwgNzgyOSwgNzgzNiwgNzg0NSwgNzg0OSwgNzg2MSwgNzg2NSwgCisgICAgNzg2OCwgNzg3MiwgNzg3NiwgNzg4MCwgNzg4NCwgNzg5MCwgNzg5NSwgNzkwMSwgNzkwNiwgNzkxMSwgNzkxNywgNzkyMiwgCisgICAgNzkyNywgNjg1MCwgNzkzMiwgNzkzNiwgNzk0MCwgNzk0NCwgNzk0OSwgNzk1NCwgNzk2MCwgNzk2NCwgNzk3MSwgNzk3NiwgCisgICAgNzk4NCwgNzk4OCwgNzk5MSwgNzk5NywgODAwNCwgODAwOCwgODAxMSwgODAxNiwgODAyMCwgMzczNiwgODAyNiwgODAzNCwgCisgICAgODA0MCwgNjg2NSwgODA0NSwgODA1MSwgODA1NiwgODA2MCwgODA2MywgODA3OCwgODA5NywgODEwOSwgODEyMiwgODEzNSwgCisgICAgODE0OCwgODE2MiwgODE3NSwgODE5MCwgODE5NywgODIwMywgODIwNywgODIxMiwgODIxOCwgODIyNiwgODIzMSwgNjAxMSwgCisgICAgODIzNiwgODIzOSwgODI0NCwgODI0OCwgMjczNywgODc3LCA4MjU0LCA4MjU4LCA4MjY0LCA4MjcwLCA4Mjc1LCA4MjgxLCAKKyAgICA4Mjg2LCA3MDI0LCA4MjkyLCA4Mjk4LCA4MzAzLCA4MzA4LCA4MzE2LCA4MzIyLCA4MzM1LCA4MzQzLCA4MzUwLCA4MzU0LCAKKyAgICA4MzYyLCA4MzY5LCA4MzgxLCA4MzkxLCA4Mzk4LCA4NDA1LCA4NDE0LCA4NDIzLCA4NDMxLCA4NDM2LCA4NDQyLCA3MDMwLCAKKyAgICA4NDQ3LCA4NDUzLCA3MDM2LCA4NDU4LCA4NDYxLCA4NDY4LCA4NDc0LCA4NDg3LCA4NDk4LCA4NTA1LCA4NTExLCA4NTIwLCAKKyAgICA4NTI4LCA4NTM1LCA4NTQxLCA4NTQ3LCA4NTUyLCA4NTU2LCA4NTYxLCA4MDcwLCA4NTY3LCA3MDQxLCA4NTc0LCA4NTc5LCAKKyAgICA4NTg2LCA4NTkyLCA4NTk4LCA4NjAzLCA4NjExLCA4NjE5LCA4NjI2LCA4NjMwLCA4NjQ0LCA4NjU0LCA4NjU5LCA4NjYzLCAKKyAgICA4Njc0LCA4NjgwLCA4Njg1LCA4NjkwLCA4Njk0LCA3MDQ2LCA4Njk5LCA4NzAyLCA4NzA3LCA4NzE5LCA4NzI2LCA4NzMxLCAKKyAgICA4NzM1LCA4NzQwLCA4NzQ0LCA4NzUxLCA4NzU3LCA3MDUxLCA2OTg0LCA4NzY0LCAyNzQyLCA4LCA4NzcxLCA4Nzc2LCAKKyAgICA4NzgwLCA4Nzg2LCA4Nzk3LCA4ODA3LCA4ODE2LCA4ODI4LCA4ODMzLCA4ODM3LCA4ODQ1LCA4ODU5LCA4ODYzLCA4ODY2LCAKKyAgICA4ODc0LCA4ODgxLCA4ODg5LCA4ODkzLCA4OTA0LCA4OTA4LCA4OTE1LCA4OTIwLCA4OTI0LCA4OTMwLCA4OTM1LCA4OTM5LCAKKyAgICA4OTQ0LCA4OTQ4LCA4OTUxLCA4OTU3LCA4OTYyLCA4OTY4LCA4OTc1LCA4OTg1LCA4OTk0LCA5MDAxLCA3MDYxLCA3MDY4LCAKKyAgICA3MDc0LCA3MDc5LCA5MDA3LCA3MDgzLCA5MDEzLCA5MDE2LCA5MDIzLCA5MDM4LCA5MDU0LCA5MDY5LCA5NzAsIDQwNiwgCisgICAgOTA3NCwgOTA4MiwgOTA4OSwgOTA5NSwgOTEwMCwgOTEwNSwgNzA5MiwgOTEwNywgOTExMSwgOTExNSwgOTEyNSwgOTEzMCwgCisgICAgOTEzNCwgOTE0MywgOTE0NywgOTE1MCwgOTE1NywgOTE2MSwgOTE2NCwgOTE3MiwgOTE3OSwgOTE4NywgOTE5MSwgOTE5OCwgCisgICAgOTIwMiwgOTIwOCwgOTIxMiwgOTIxNiwgOTIyMCwgOTIyNiwgOTIzMCwgOTIzNCwgOTI0MSwgOTI0NSwgOTI1MCwgOTI1NCwgCisgICAgOTI2MSwgOTI2NywgOTI3NSwgOTI4MSwgOTI5MSwgOTI5NiwgOTMwMSwgOTMwNSwgOTMxMywgMzY0MSwgOTMyMSwgOTMyNiwgCisgICAgOTMzMCwgOTMzNCwgOTMzNywgOTM0NSwgOTM1MiwgOTM1NiwgOTM2MCwgOTM2NSwgOTM2OSwgOTM4MCwgOTM4NiwgOTM5MCwgCisgICAgOTM5MywgOTQwMCwgOTQwNSwgNzEwMSwgOTQxMCwgOTQxNCwgMTcwNCwgNDI2NSwgOTQyMSwgOTQyNiwgOTQzMSwgOTQzNiwgCisgICAgOTQ0MiwgOTQ0NywgOTQ1MywgOTQ1OCwgOTQ2MywgOTQ2OCwgOTQ3MywgOTQ3OCwgOTQ4MywgOTQ4OCwgOTQ5MywgOTQ5OCwgCisgICAgOTUwMywgOTUwOCwgOTUxMywgOTUxOCwgOTUyMywgOTUyOCwgOTUzMywgOTUzOSwgOTU0NCwgOTU0OSwgOTU1NCwgOTU1OSwgCisgICAgOTU2NCwgOTU3MCwgOTU3NSwgOTU4MCwgOTU4NiwgOTU5MSwgOTU5NywgOTYwMiwgOTYwOCwgOTYxMywgOTYxOCwgOTYyMywgCisgICAgOTYyOCwgOTYzNCwgOTYzOSwgOTY0NCwgNjcwLCAxMzQsIDk2NDksIDk2NTMsIDk2NTgsIDk2NjMsIDk2NjcsIDk2NzEsIAorICAgIDk2NzUsIDk2ODAsIDk2ODQsIDk2ODksIDk2OTMsIDk2OTYsIDk3MDAsIDk3MDQsIDk3MDksIDk3MTksIDk3MjUsIDk3MjksIAorICAgIDk3MzMsIDk3NDAsIDk3NDgsIDk3NTcsIDk3NjgsIDk3NzUsIDk3ODIsIDk3OTEsIDk4MDAsIDk4MDksIDk4MTgsIDk4MjcsIAorICAgIDk4MzYsIDk4NDYsIDk4NTYsIDk4NjYsIDk4NzYsIDk4ODYsIDk4OTUsIDk5MDUsIDk5MTUsIDk5MjUsIDk5MzUsIDk5NDUsIAorICAgIDk5NTUsIDk5NjUsIDk5NzQsIDk5ODQsIDk5OTQsIDEwMDA0LCAxMDAxNCwgMTAwMjQsIDEwMDM0LCAxMDA0MywgMTAwNTMsIAorICAgIDEwMDYzLCAxMDA3MywgMTAwODMsIDEwMDkzLCAxMDEwMywgMTAxMTMsIDEwMTIzLCAxMDEzMywgMTAxNDIsIDEwMTUyLCAKKyAgICAxMDE2MiwgMTAxNzIsIDEwMTgyLCAxMDE5MiwgMTAyMDIsIDEwMjEyLCAxMDIyMiwgMTAyMzIsIDEwMjQyLCAxMDI1MSwgCisgICAgMTAyNTcsIDEwMjYxLCAxMDI2NCwgMTAyNjgsIDEwMjczLCAxMDI4MCwgMTAyODYsIDEwMjkxLCAxMDI5NSwgMTAzMDAsIAorICAgIDEwMzA0LCAxMDMwOCwgNzExMCwgMTAzMTQsIDEwMzE5LCAxMDMyOCwgNzExNSwgMTAzMzMsIDEwMzM2LCAxMDM0MiwgCisgICAgMTAzNTAsIDcxMjAsIDEwMzU3LCAxMDM2MSwgMTAzNjUsIDEwMzY5LCAxMDM3OSwgMTAzODQsIDEwMzkzLCAxMDQwMSwgCisgICAgMTA0MDgsIDEwNDEzLCAxMDQyMCwgMTA0MjUsIDEwNDI5LCAxMDQzMiwgMTA0NDMsIDEwNDUzLCAxMDQ2MiwgMTA0NzAsIAorICAgIDEwNDgxLCAxMDQ5MywgMTA1MDMsIDEwNTA3LCAxMDUxMiwgMTA1MTcsIDEwNTIxLCAxMDUyNiwgMTA1MzUsIDEwNTM5LCAKKyAgICAxMDU0MiwgMTA1NDksIDEwNTU5LCAxMDU2OCwgMTA1NzUsIDEwNTc5LCAxMDU4NSwgMTA1OTAsIDEwNTk1LCAxMDU5OSwgCisgICAgMTA2MDgsIDEwNjEzLCAxMDYxOSwgMTA2MjQsIDEwNjI4LCAxMDYzNywgMTA2NDUsIDEwNjUzLCAxMDY2MCwgMTA2NjgsIAorICAgIDEwNjgwLCAxMDY5MSwgMTA3MDEsIDEwNzA4LCAxMDcxNCwgMTA3MjMsIDEwNzM0LCAxMDc0MywgMTA3NTIsIDEwNzYwLCAKKyAgICAxMDc2NywgMTA3NzYsIDEwNzg0LCA1NzYxLCAxMDc4OCwgMTA3OTAsIDEwNzk1LCAxMDgwMSwgMTA4MDksIDEwODE2LCAKKyAgICAxMDgyNSwgMTA4MzQsIDEwODQzLCAxMDg1MiwgMTA4NjEsIDEwODcwLCAxMDg3OSwgMTA4ODgsIDEwODk4LCAxMDkwOCwgCisgICAgMTA5MTcsIDEwOTI0LCAxMDkzOCwgMTA5NDUsIDEwOTUzLCAxMDk2MiwgMTA5NjgsIDEwOTc3LCAxMDk4NSwgMTA5OTQsIAorICAgIDExMDA3LCAxMTAxNSwgMTEwMjIsIDExMDM1LCAxMTA0MSwgMTEwNTAsIDExMDU5LCAxMTA2NCwgMTEwNjgsIDExMDc0LCAKKyAgICAxMTA4MCwgMTEwODcsIDY4NjQsIDExMDkyLCAxMTA5NywgMTExMDQsIDExMTA5LCAxMTExNCwgMTExMTgsIDExMTI0LCAKKyAgICAxMTEzMiwgMTExNDAsIDExMTQ3LCAxMTE1NSwgMTExNjMsIDExMTY4LCAxMTE3NCwgMTExNzksIDExMTgzLCAxMTE5NCwgCisgICAgMTEyMDIsIDExMjA4LCAxMTIxMywgMTEyMjIsIDExMjI4LCAxMTIzMywgMTEyNDIsIDExMjU2LCAzNjAwLCAxMTI2MCwgCisgICAgMTEyNjUsIDExMjcwLCAxMTI3NiwgMTEyODEsIDExMjg2LCAxMTI5MCwgMTEyOTUsIDExMzAwLCA1NzYwLCAxMTMwNSwgCisgICAgMTEzMTAsIDExMzE1LCAxMTMyMCwgMTEzMjQsIDExMzI5LCAxMTMzNCwgMTEzMzksIDExMzQ1LCAxMTM1MSwgMTEzNTYsIAorICAgIDExMzYwLCAxMTM2NSwgMTEzNzAsIDExMzc1LCA3MTI0LCAxMTM4MCwgMTEzODUsIDExMzkwLCAxMTM5NSwgMTE0MTIsIAorICAgIDExNDMwLCAxMTQ0MiwgMTE0NTUsIDExNDcyLCAxMTQ4OCwgMTE1MDUsIDExNTE1LCAxMTUzNCwgMTE1NDUsIDExNTU2LCAKKyAgICAxMTU2NywgMTE1NzgsIDExNTkwLCAxMTYwMSwgMTE2MTIsIDExNjI5LCAxMTY0MCwgMTE2NTEsIDExNjU2LCAyMzE3LCAKKyAgICAxMTY2MCwgMTE2NjMsIDExNjY5LCAxMTY3NywgMTE2ODUsIDExNjkwLCAxMTY5OCwgMTE3MDYsIDExNzEzLCAxMTcxOCwgCisgICAgMTE3MjQsIDExNzMxLCAxMTczOSwgMTE3NDYsIDExNzU4LCAxMTc2MywgOTAzMiwgMTE3NjksIDExNzc4LCAxMTc4NiwgCisgICAgMTE3OTMsIDExNzk5LCAxMTgwNywgMTE4MTQsIDExODIxLCAxMTgyNywgMTE4MzYsIDExODQ0LCAxMTg1MSwgMTE4NTksIAorICAgIDExODY1LCAxMTg3MiwgMTE4ODAsIDExODg1LCAzMzcyLCAxMTg3LCAxMTg5MiwgMTE4OTUsIDExMzA2LCAxMTg5OSwgCisgICAgMTE5MDUsIDExOTA5LCAxMTkyMSwgMTE5MjYsIDExOTMzLCAxMTkzOSwgMTE5NDQsIDExOTUxLCAxMTMxMSwgMTEzMTYsIAorICAgIDExOTU1LCAxMTk1OSwgMTE5NjQsIDExOTY4LCAxMTk3NiwgMTE5ODMsIDExOTkwLCAxMjAwNywgMTIwMTEsIDEyMDE0LCAKKyAgICAxMjAyMiwgMTIwMjgsIDM0MjgsIDEyMDMyLCAxMjAzNCwgMTIwNDIsIDEyMDQ5LCAxMjA1OSwgMTIwNjQsIDEyMDcwLCAKKyAgICAxMjA3NSwgMTIwNzksIDEyMDg1LCAxMjA5MCwgMTIwOTMsIDEyMTAwLCAxMjEwNiwgMTIxMTIsIDEyMTE3LCAxMjEyNCwgCisgICAgMTIxMzAsIDEyMTM1LCAxMjE0MiwgMTIxNDYsIDEyMTUyLCAxMjE1OSwgMTIxNjUsIDEyMTcxLCAxMjE3OSwgMTIxODUsIAorICAgIDEyMTkzLCAxMjE5OSwgMTIyMDUsIDEyMjEwLCAxMjIxNywgMTIyMjIsIDEyMjI2LCAxMjIzMSwgMTIyMzgsIDEyMjQzLCAKKyAgICAxMjI0OSwgMTIyNTUsIDEyMjYxLCAxMjI2NCwgMTIyNjgsIDEyMjgwLCAxMjI4NiwgMTIyOTEsIDEyMjk4LCAxMjMwNCwgCisgICAgMTIzMTAsIDEyMzIxLCAxMjMzMSwgMTIzNDAsIDEyMzQ4LCAxMjM1NSwgMTIzNjUsIDEyMzc1LCAxMjM4MywgMTIzODYsIAorICAgIDExMzMwLCAxMjM5MSwgMTEzMzUsIDExNDYwLCAxMjM5OSwgMTI0MTIsIDEyNDI3LCAxMjQzOCwgMTE0NzcsIDEyNDU2LCAKKyAgICAxMjQ2OSwgMTI0ODIsIDEyNDkzLCA4MDg1LCAxMjUwNCwgMTI1MTcsIDEyNTM2LCAxMjU0NywgMTI1NTgsIDEyNTY5LCAKKyAgICAyNTQyLCAxMjU4MiwgMTI1ODYsIDEyNTk0LCAxMjYwNSwgMTI2MTIsIDEyNjE4LCAxMjYyNiwgMTI2MzAsIDEyNjM2LCAKKyAgICAxMjYzOSwgMTI2NDksIDEyNjU3LCAxMjY2NCwgMTI2NzIsIDEyNjc3LCAxMjY4MiwgMTI2ODksIDEyNjk1LCAxMjcwMCwgCisgICAgMTI3MDUsIDEyNzA5LCAxMjcxMywgMTI3MTksIDEyNzI1LCAxMjczMCwgMTI3MzUsIDEyNzQwLCAxMjc0NCwgMTEzNDAsIAorICAgIDExMzQ2LCAxMTM1MiwgMTI3NDgsIDEyNzU2LCAxMjc2NSwgMTI3NzIsIDcwMDAsIDEyNzc2LCAxMjc3OCwgMTI3ODMsIAorICAgIDEyNzg4LCAxMjc5NCwgMTI3OTksIDEyODA0LCAxMjgwOSwgMTI4MTQsIDEyODE4LCAxMjgyNCwgMTI4MzAsIDEyODM1LCAKKyAgICAxMjg0MSwgMTI4NDYsIDEyODUxLCAxMjg1NywgMTI4NjIsIDEyODY3LCAxMjg3MiwgMTI4NzgsIDEyODgzLCAxMjg4OCwgCisgICAgMTI4OTQsIDEyOTAwLCAxMjkwNSwgMTI5MTIsIDEyOTE5LCAxMjkyNCwgMTI5MjgsIDEyOTMyLCAxMjkzNSwgMTI5NDMsIAorICAgIDEyOTQ4LCAxMjk1NSwgMTI5NjAsIDEyOTY1LCAxMjk3NSwgMTI5ODAsIDEyOTg3LCAxMjk5MywgMTMwMDMsIDEzMDE3LCAKKyAgICAxMzAzMSwgMTMwNDUsIDEzMDU5LCAxMzA3NCwgMTMwODksIDEzMTA2LCAxMzEyNCwgMTMxMzcsIDEzMTQzLCAxMzE0OCwgCisgICAgMTMxNTMsIDEzMTU5LCAxMzE2NCwgMTMxNjksIDEzMTczLCAxMzE3NywgMTMxODIsIDEzMTg2LCAxMzE5NywgMTMyMDMsIAorICAgIDEzMjA4LCAxMzIxMywgMTMyMTcsIDEzMjIyLCAxMzIyOCwgMTMyMzUsIDEzMjQwLCAxMzI0NCwgMTMyNTAsIDEzMjU1LCAKKyAgICAxMzI2MCwgMTMyNjQsIDEzMjcwLCAxMzI3NSwgMTMyODAsIDEzMjg3LCAxMzI5MiwgMTMyOTYsIDEzMzAwLCAxMzMwNSwgCisgICAgMTMzMTAsIDEzMzE2LCAxMzMyMiwgMTMzMjcsIDEzMzM2LCAxMzM0NCwgMTMzNTEsIDEzMzU4LCAxMzM2NCwgMTMzNzAsIAorICAgIDEzMzc1LCAxMzM4MCwgMTMzODYsIDEzMzkxLCAxMzM5NywgMTM0MDIsIDEzNDA4LCAxMzQxNCwgMTM0MjEsIDEzNDI3LCAKKyAgICAxMzQzMiwgMTM0MzcsIDcxNjYsIDEzNDQ2LCAxMzQ0OSwgMTM0NTUsIDEzNDYwLCAxMzQ2NSwgMTM0NzUsIDEzNDgyLCAKKyAgICAxMzQ4NywgMTM0OTMsIDEzNDk4LCAxMzUwNCwgMTM1MDksIDEzNTE1LCAxMzUyMSwgMTM1MjYsIDEzNTM0LCAxMzU0MSwgCisgICAgMTM1NDYsIDEzNTUyLCAxMzU1NywgMTM1NjEsIDEzNTcwLCAxMzU4MSwgMTM1ODgsIDEzNTk2LCAxMzYwMiwgMTM2MDksIAorICAgIDEzNjE1LCAxMzYyMCwgMTM2MjQsIDEzNjMwLCAxMzYzNSwgMTM2NDAsIDEzNjQ1LCA3MTcxLCA1Nzc3LCAyNzU2LCAxMzY0OSwgCisgICAgMTM2NTMsIDEzNjU3LCAxMzY2MSwgMTM2NjUsIDEzNjY4LCAxMzY3NSwgMTM2ODMsIDExMzY2LCAxMzY5MCwgMTM3MDAsIAorICAgIDEzNzA4LCAxMzcxNSwgMTM3MjMsIDEzNzMzLCAxMzc0MiwgMTM3NDcsIDEwNDU4LCAxMDQ2NywgMTM3NTIsIDEzNzYyLCAKKyAgICAxMzc3NywgMTM3ODMsIDEzNzkwLCAxMzc5NywgMTM4MDMsIDEzODEzLCAxMzgyMywgMTEzNzEsIDEzODMyLCAxMzgzOCwgCisgICAgMTM4NDQsIDEzODUyLCAxMzg2MCwgMTM4NjUsIDEzODc0LCAxMzg4MiwgMTM4OTQsIDEzOTA0LCAxMzkxNCwgMTM5MjQsIAorICAgIDEzOTMzLCAxMzk0NSwgMTM5NTUsIDEzOTY1LCAxMzk3NiwgMTM5ODEsIDEzOTkzLCAxNDAwNSwgMTQwMTcsIDE0MDI5LCAKKyAgICAxNDA0MSwgMTQwNTMsIDE0MDY1LCAxNDA3NywgMTQwODksIDE0MTAxLCAxNDExMiwgMTQxMjQsIDE0MTM2LCAxNDE0OCwgCisgICAgMTQxNjAsIDE0MTcyLCAxNDE4NCwgMTQxOTYsIDE0MjA4LCAxNDIyMCwgMTQyMzIsIDE0MjQzLCAxNDI1NSwgMTQyNjcsIAorICAgIDE0Mjc5LCAxNDI5MSwgMTQzMDMsIDE0MzE1LCAxNDMyNywgMTQzMzksIDE0MzUxLCAxNDM2MywgMTQzNzQsIDE0Mzg2LCAKKyAgICAxNDM5OCwgMTQ0MTAsIDE0NDIyLCAxNDQzNCwgMTQ0NDYsIDE0NDU4LCAxNDQ3MCwgMTQ0ODIsIDE0NDk0LCAxNDUwNSwgCisgICAgMTQ1MTcsIDE0NTI5LCAxNDU0MSwgMTQ1NTMsIDE0NTY1LCAxNDU3NywgMTQ1ODksIDE0NjAxLCAxNDYxMywgMTQ2MjUsIAorICAgIDE0NjM2LCAxNDY0OCwgMTQ2NjAsIDE0NjcyLCAxNDY4NCwgMTQ2OTYsIDE0NzA4LCAxNDcyMCwgMTQ3MzIsIDE0NzQ0LCAKKyAgICAxNDc1NiwgMTQ3NjcsIDE0Nzc5LCAxNDc5MSwgMTQ4MDMsIDE0ODE1LCAxNDgyNywgMTQ4MzksIDE0ODUxLCAxNDg2MywgCisgICAgMTQ4NzUsIDE0ODg3LCAxNDg5OCwgMTQ5MTAsIDE0OTIyLCAxNDkzNCwgMTQ5NDYsIDE0OTU5LCAxNDk3MiwgMTQ5ODUsIAorICAgIDE0OTk4LCAxNTAxMSwgMTUwMjQsIDE1MDM3LCAxNTA0OSwgMTUwNjIsIDE1MDc1LCAxNTA4OCwgMTUxMDEsIDE1MTE0LCAKKyAgICAxNTEyNywgMTUxNDAsIDE1MTUzLCAxNTE2NiwgMTUxNzksIDE1MTkxLCAxNTIwNCwgMTUyMTcsIDE1MjMwLCAxNTI0MywgCisgICAgMTUyNTYsIDE1MjY5LCAxNTI4MiwgMTUyOTUsIDE1MzA4LCAxNTMyMSwgMTUzMzMsIDE1MzQ2LCAxNTM1OSwgMTUzNzIsIAorICAgIDE1Mzg1LCAxNTM5OCwgMTU0MTEsIDE1NDI0LCAxNTQzNywgMTU0NTAsIDE1NDYzLCAxNTQ3NSwgMTU0ODgsIDE1NTAxLCAKKyAgICAxNTUxNCwgMTU1MjcsIDE1NTQwLCAxNTU1MywgMTU1NjYsIDE1NTc5LCAxNTU5MiwgMTU2MDUsIDE1NjE3LCAxNTYzMCwgCisgICAgMTU2NDMsIDE1NjU2LCAxNTY2OSwgMTU2ODIsIDE1Njk1LCAxNTcwOCwgMTU3MjEsIDE1NzM0LCAxNTc0NywgMTU3NTksIAorICAgIDE1NzcwLCAxNTc4MywgMTU3OTYsIDE1ODA5LCAxNTgyMiwgMTU4MzUsIDE1ODQ4LCAxNTg2MSwgMTU4NzQsIDE1ODg3LCAKKyAgICAxNTkwMCwgMTU5MTIsIDE1OTI1LCAxNTkzOCwgMTU5NTEsIDE1OTY0LCAxNTk3NywgMTU5OTAsIDE2MDAzLCAxNjAxNiwgCisgICAgMTYwMjksIDE2MDQyLCAxNjA1NCwgMTYwNjcsIDE2MDgwLCAxNjA5MywgMTYxMDYsIDE2MTE5LCAxNjEzMiwgMTYxNDUsIAorICAgIDE2MTU4LCAxNjE3MSwgMTYxODQsIDE2MTk2LCAxNjIwOSwgMTYyMjIsIDE2MjM1LCAxNjI0OCwgMTYyNjEsIDE2Mjc0LCAKKyAgICAxNjI4NywgMTYzMDAsIDE2MzEzLCAxNjMyNiwgMTYzMzgsIDE2MzUxLCAxNjM2NCwgMTYzNzcsIDE2MzkwLCAxNjQwMywgCisgICAgMTY0MTYsIDE2NDI5LCAxNjQ0MiwgMTY0NTUsIDE2NDY4LCAxNjQ4MCwgMTY0OTMsIDE2NTA2LCAxNjUxOSwgMTY1MzIsIAorICAgIDE2NTQ1LCAxNjU1OCwgMTY1NzEsIDE2NTg0LCAxNjU5NywgMTY2MTAsIDE2NjIyLCAxNjYzNSwgMTY2NDgsIDE2NjYxLCAKKyAgICAxNjY3NCwgMTY2ODcsIDE2NzAwLCAxNjcxMywgMTY3MjYsIDE2NzM5LCAxNjc1MiwgMTY3NjQsIDE2Nzc3LCAxNjc5MCwgCisgICAgMTY4MDMsIDE2ODE2LCAxNjgyOSwgMTY4NDIsIDE2ODU1LCAxNjg2OCwgMTY4ODEsIDE2ODk0LCAxNjkwNiwgMTY5MTksIAorICAgIDE2OTMyLCAxNjk0NSwgMTY5NTgsIDE2OTcxLCAxNjk4NCwgMTY5OTcsIDE3MDEwLCAxNzAyMywgMTcwMzYsIDE3MDQ4LCAKKyAgICAxNzA2MSwgMTcwNzQsIDE3MDg3LCAxNzEwMCwgMTcxMTMsIDE3MTI2LCAxNzEzOSwgMTcxNTIsIDE3MTY1LCAxNzE3OCwgCisgICAgMTcxOTAsIDE3MjAxLCAxNzIwOSwgMTcyMTYsIDE3MjIyLCAxNzIyNiwgMTcyMzIsIDE3MjM4LCAxNzI0NiwgMTcyNTIsIAorICAgIDE3MjU3LCA3MDA1LCAxNzI2MSwgMTcyNjgsIDE3Mjc2LCAxNzI4MywgMTcyOTAsIDg0ODEsIDE3Mjk3LCAxNzMwNiwgCisgICAgMTczMTEsIDU3OTMsIDE3MzE4LCAxNzMyMywgMTczMjYsIDE3MzMxLCAxNzMzOSwgMTczNDYsIDE3MzUzLCAxNzM1OSwgCisgICAgMTczNjgsIDE3Mzc3LCAxNzM4MywgMTczODgsIDE3Mzk4LCAxNzQwNSwgMTc0MTMsIDE3NDE5LCAxNzQyOSwgMTc0MzgsIAorICAgIDE3NDQyLCAxNzQ0OSwgMTc0NTMsIDE3NDU4LCAxNzQ2NCwgMTc0NzIsIDE3NDc2LCAxMTM4MSwgMTc0ODUsIDE3NDkxLCAKKyAgICAxNzQ5NSwgMTc1MDEsIDE3NTA4LCAxNzUxOSwgNjgyOSwgMTc1MjcsIDE3NTMzLCAxNzUzOCwgMTc1NDIsIDE3NTQ2LCAKKyAgICA3NDE1LCAxNzU1MSwgMTc1NTksIDE3NTY2LCAxNzU3NSwgMTc1ODIsIDE3NTg5LCAxNzU5NSwgMTc1OTksIDE3NjA1LCAKKyAgICAxNzYxMSwgMTc2MTksIDE3NjI1LCAxNzYzMiwgMTc2MzgsIDE3NjQ0LCAxNzY0OCwgMTc2NTYsIDE3NjY1LCAxNzY3MCwgCisgICAgMTc2ODEsIDE3Njg2LCAxNzY5MSwgMTc2OTYsIDU5NjYsIDE3NzAwLCAxNzcwNiwgMTc3MTMsIDE3NzIyLCAxNzcyNywgCisgICAgMTc3MzUsIDE3NzQ3LCAxNzc1MiwgMTc3NTYsIDE3NzU5LCAxNzc2NSwgMTc3NzEsIDE3Nzc2LCAxNzc4MCwgMTc3ODMsIAorICAgIDE3Nzk0LCAxNzc5OSwgNzIwMSwgMTc4MDYsIDcwMTYsIDcyMDYsIDE3ODExLCAxNzgxNiwgMTc4MjEsIDE3ODI2LCAxNzgzMSwgCisgICAgMTc4MzYsIDE3ODQxLCAxNzg0NiwgMTc4NTEsIDE3ODU2LCAxNzg2MSwgMTc4NjYsIDE3ODcyLCAxNzg3NywgMTc4ODIsIAorICAgIDE3ODg3LCAxNzg5MiwgMTc4OTcsIDE3OTAyLCAxNzkwNywgMTc5MTIsIDE3OTE3LCAxNzkyMywgMTc5MjksIDE3OTM0LCAKKyAgICAxNzkzOSwgMTc5NDQsIDE3OTQ5LCAxNzk1NCwgMTc5NTksIDE3OTY0LCAxNzk2OSwgMTc5NzQsIDE3OTgwLCAxNzk4NSwgCisgICAgMTc5OTAsIDE3OTk1LCAxODAwMSwgMTgwMDcsIDE4MDEyLCAxODAxNywgMTgwMjIsIDE4MDI3LCAxODAzMiwgMTgwMzcsIAorICAgIDE4MDQyLCAxODA0NywgMTgwNTMsIDE4MDU4LCAxODA2MywgMTgwNjgsIDE4MDczLCAxODA3OSwgMTgwODQsIDE4MDg5LCAKKyAgICAxODA5MywgMTI5LCAxODEwMSwgMTgxMDUsIDE4MTA5LCAxODExMywgMTgxMTgsIDE4MTIyLCAxODEyNiwgOTc4OCwgMTgxMzAsIAorICAgIDE4MTM1LCAxODEzOSwgMTgxNDQsIDE4MTQ4LCAxODE1MywgMTgxNTcsIDE4MTYzLCAxODE2OCwgMTgxNzIsIDE4MTc2LCAKKyAgICAxODE4NCwgMTgxODgsIDE4MTkzLCAxODE5OCwgMTgyMDIsIDE4MjA4LCAxODIxMywgMTgyMTcsIDE4MjIyLCAxODIyNywgCisgICAgMTgyMzEsIDE4MjM4LCAxODI0MiwgMTgyNDYsIDE4MjUxLCAxODI1NSwgMTgyNTgsIDE4MjcxLCAxODI3NiwgMTgyODUsIAorICAgIDcyMzgsIDE4MjkwLCAxODI5MywgMjYwNSwgMjYxMCwgMTgyOTcsIDE4MzAzLCAxODMwOSwgMTgzMTQsIDE4MzE5LCAxODMyNCwgCisgICAgMTgzMzAsIDE4MzM1LCAxODM0MCwgMTgzNDQsIDE4MzQ5LCAxODM1NCwgMTgzNjAsIDE4MzY1LCAxODM3MCwgMTgzNzYsIAorICAgIDE4MzgxLCAxODM4NSwgMTgzOTAsIDE4Mzk1LCAxODQwMCwgMTg0MDQsIDE4NDA5LCAxODQxNCwgMTg0MTksIDE4NDI0LCAKKyAgICAxODQyOCwgMTg0MzIsIDE4NDM3LCAyNzY1LCAxODM4NiwgMTg0NDEsIDE4NDQ4LCA3NDk0LCAxODQ2MCwgMTg0NjgsIAorICAgIDE4MzkxLCAxODQ3NSwgMTg0ODAsIDE4Mzk2LCAxODQ4OCwgMTg0OTMsIDE4NDk4LCAxODUwMywgMTg1MDcsIDE4NTEyLCAKKyAgICAxODUxNSwgMTg1MTksIDE4NTI1LCAxODUzMCwgNjg1NiwgMTcwOSwgMTcxNCwgMTg1MzQsIDE4NTQwLCAxODU0NiwgMTg1NTEsIAorICAgIDE4NTU1LCAxODU1OSwgMTg1NjMsIDE4NTY2LCAxODU3MiwgMTg1NzksIDE4NTg3LCAxODU5MywgMTg1OTksIDE4NjA0LCAKKyAgICAxODYwOSwgMTg2MTMsIDExNzQxLCAxMjM2MSwgMTg2MTgsIDE4NjMwLCAxODYzMywgMTg2NDAsIDE4NjQ0LCAxODY1MiwgCisgICAgMTg2NjMsIDE4NjcyLCAxODY4NSwgMTg2OTUsIDE4NzA5LCAxODcyMSwgMTg3MzUsIDE4NzQ1LCAxODc1NywgMTg3NjMsIAorICAgIDE4Nzc4LCAxODgwMiwgMTg4MjAsIDE4ODM5LCAxODg1MiwgMTg4NjYsIDE4ODg0LCAxODkwMCwgMTg5MTcsIDE4OTM1LCAKKyAgICAxODk0NiwgMTg5NjUsIDE4OTgyLCAxOTAwMiwgMTkwMjAsIDE5MDMyLCAxOTA0NiwgMTkwNjAsIDE5MDcyLCAxOTA4OSwgCisgICAgMTkxMDgsIDE5MTI2LCAxOTEzOCwgMTkxNTYsIDE5MTc1LCAxMTUyMCwgMTkxODgsIDE5MjA4LCAxOTIyMCwgODExNiwgCisgICAgMTkyMzIsIDE5MjM3LCAxOTI0MiwgMTkyNDcsIDE5MjUzLCAxOTI1OCwgMjMzNCwgMTkyNjIsIDE5MjY4LCAxOTI3MiwgCisgICAgMTkyNzUsIDE5Mjc5LCAxOTI4NywgMTkyOTMsIDE4NDA1LCAxOTI5NywgMTkzMDgsIDE5MzE0LCAxOTMyMCwgMTkzMjksIAorICAgIDE5MzM2LCAxOTM0MSwgMTkzNDgsIDE5MzU0LCAxOTM2MywgMTkzNzEsIDE5MzgxLCAxOTM5MSwgMTkzOTYsIDE5NDA1LCAKKyAgICAxOTQxNCwgMTk0MjUsIDE5NDM2LCAzNjc3LCAxOTQ0NiwgMTk0NTAsIDE5NDYwLCAxOTQ2OCwgMTk0NzgsIDE5NDg5LCAKKyAgICAxOTQ5NywgMTk1MDQsIDE5NTEwLCAxOTUxNSwgMTg0MTUsIDE5NTE5LCAxOTUyOCwgMTk1MzIsIDE5NTM3LCAxOTU0NiwgCisgICAgMTk1NTQsIDE5NTY0LCAxOTU3MywgMTk1NzksIDE5NTg1LCAxODQyMCwgMTg0MjUsIDE5NTg5LCAxOTU5OSwgOTE2LCAKKyAgICAxOTYwOCwgMTE3MDIsIDExNTQsIDE5NjIyLCAxOTYzMSwgMTk2MzksIDE5NjUwLCAxOTY2MSwgMTk2NzEsIDE5NjgwLCAKKyAgICAxOTY4OSwgMTk2OTgsIDE5NzA0LCAxOTcxMywgMTk3MjEsIDcxNzgsIDE5NzI3LCAxOTczMCwgMTk3MzQsIDE5NzM5LCAKKyAgICAxOTc0NCwgMTk3NTIsIDE4NDMzLCAxOTc1NiwgMTk3NjIsIDE5NzY4LCAxOTc3MywgMTk3NzgsIDE5NzgyLCAxOTc5MCwgCisgICAgMTk3OTYsIDE5ODAyLCAzMzUxLCAxOTgxMCwgMTk4MTUsIDE5ODIwLCAxOTgyNCwgMTk4MjgsIDE5ODM1LCAxOTgzOSwgCisgICAgMTk4NDcsIDE5ODUzLCAxOTg1OCwgMTk4NjIsIDE5ODY3LCAxOTg3MywgMTk4NzcsIDE5ODg4LCAxOTg5MywgMTk4OTcsIAorICAgIDE5OTA4LCAxOTkxMiwgMTk5MTYsIDE5OTE5LCAxOTkyMywgMTk5MjgsIDE5OTMyLCAxOTkzNiwgOTAzLCAxOTk0MCwgCisgICAgMTk5NDUsIDE5OTUwLCAxOTk1NSwgMTk5NjAsIDE5OTY1LCAxOTk3MCwgMTk5NzUsIDE5OTgwLCAxOTk4NSwgMTk5OTAsIAorICAgIDE5OTk1LCAyMDAwMCwgMjAwMDUsIDIwMDExLCAyMDAxNiwgMjAwMjEsIDIwMDI2LCAyMDAzMSwgMjAwMzYsIDIwMDQxLCAKKyAgICAyMDA0NywgMjAwNTIsIDIwMDU3LCAyMDA2MiwgMjAwNjcsIDIwMDcyLCAyMDA3NywgMjAwODIsIDIwMDg4LCAyMDA5NCwgCisgICAgMjAwOTksIDIwMTA1LCAyMDExMCwgMjAxMTUsIDUsIDIwMTIxLCAyMDEyNSwgMjAxMjksIDIwMTMzLCAyMDEzOCwgMjAxNDIsIAorICAgIDIwMTQ2LCAyMDE1MCwgMjAxNTQsIDIwMTU5LCAyMDE2MywgMjAxNjgsIDIwMTcyLCAyMDE3NSwgMjAxNzksIDIwMTg0LCAKKyAgICAyMDE4OCwgMjAxOTMsIDIwMTk3LCAyMDIwMSwgMjAyMDUsIDIwMjEwLCAyMDIxNCwgMjAyMTgsIDIwMjI4LCAyMDIzMywgCisgICAgMjAyMzcsIDIwMjQxLCAyMDI0NiwgMjAyNTEsIDIwMjYwLCAyMDI2NSwgMjAyNzAsIDIwMjc0LCAyMDI3OCwgMjAyOTAsIAorICAgIDIwMjk5LCAyMDMwOCwgMjAzMTQsIDIwMzE4LCAyMDMyMiwgMjAzMzIsIDIwMzQxLCAyMDM0OSwgMjAzNTUsIDIwMzU5LCAKKyAgICAyMDM2NiwgMjAzNzYsIDIwMzg1LCAyMDM5MywgMjA0MDEsIDIwNDA4LCAyMDQxNiwgMjA0MjUsIDIwNDM0LCAyMDQ0MiwgCisgICAgMjA0NDcsIDIwNDUxLCAyMDQ1NSwgMjA0NTgsIDIwNDYwLCAyMDQ2NCwgMjA0NjgsIDIwNDczLCAyMDQ3OCwgMjA0ODIsIAorICAgIDIwNDg2LCAyMDQ4OSwgMjA0OTMsIDIwNDk2LCAyMDUwMCwgMjA1MDMsIDIwNTA2LCAyMDUxMCwgMjA1MTYsIDIwNTIwLCAKKyAgICAyMDUyNCwgMjA1MjgsIDIwNTMzLCAyMDUzOCwgMjA1NDMsIDIwNTQ3LCAyMDU1MCwgMjA1NTUsIDIwNTYxLCAyMDU2NiwgCisgICAgMjA1NzIsIDIwNTc3LCAyMDU4MSwgMjA1ODUsIDIwNTg5LCAyMDU5NCwgMjA1OTgsIDIwNjAzLCAyMDYwNywgMjA2MTQsIAorICAgIDIwNjE4LCAyMDYyMSwgMjA2MjUsIDIwNjMxLCAyMDYzNywgMjA2NDEsIDIwNjQ1LCAyMDY1MCwgMjA2NTcsIDIwNjYzLCAKKyAgICAyMDY2NywgMjA2NzYsIDIwNjgwLCAyMDY4NCwgMjA2ODcsIDIwNjkzLCAyMDY5OCwgMjA3MDQsIDE0NzEsIDE3NzMsIAorICAgIDIwNzA5LCAyMDcxNCwgMjA3MTksIDIwNzI0LCAyMDcyOSwgMjA3MzQsIDIwNzM5LCAyMTU3LCAyMDc0NCwgMjA3NDUsIAorICAgIDIwNzQ4LCAyMDc1MiwgMjA3NTYsIDIwNzYxLCAyMDc2NSwgMjA3NjksIDIwNzcyLCAyMDc3NywgMjA3ODIsIDIwNzg2LCAKKyAgICAyMDc4OSwgMjA3OTQsIDIwNzk4LCAyMDgwMywgMjA4MDcsIDExNzE0LCAyMDgxMiwgMjA4MTUsIDIwODE4LCAyMDgyMiwgCisgICAgMjA4MjYsIDIwODM1LCAyMDg0MiwgMjA4NDcsIDIwODU0LCAyMDg1OCwgMjA4NjIsIDIwODY3LCAyMDg3MiwgMjA4NzYsIAorICAgIDIwODgxLCAyMDg5MywgMjA5MDQsIDIwOTA5LCAyMDkxMywgMjA5MTgsIDIwOTIyLCAyMDkyNSwgMjA5MzEsIDU4OTQsIAorICAgIDIyNTIsIDIwOTM1LCAyMDk1MSwgNzI3MCwgMjA5NzEsIDIwOTgwLCAyMDk5NiwgMjEwMDAsIDIxMDAzLCAyMTAwOSwgCisgICAgMjEwMTksIDIxMDI1LCAyMTA0MCwgMjEwNTIsIDIxMDYzLCAyMTA3MSwgMjEwODAsIDIxMDg2LCAyMTA5NSwgMjExMDUsIAorICAgIDIxMTE2LCAyMTEyNywgMjExMzYsIDIxMTQ1LCAyMTE1MywgMjExNjAsIDIxMTY4LCAyMTE4MSwgMjExODcsIDIxMTkyLCAKKyAgICAyMTE5OCwgMjEyMDMsIDIxMjExLCAyMTIyMywgMjEyMzUsIDIxMjQ5LCAyMTI1NywgMjEyNjQsIDIxMjczLCAyMTI4MiwgCisgICAgMjEyOTAsIDIxMjk4LCAyMTMwNiwgMjEzMTMsIDIxMzIyLCAyMTMzMCwgMjEzNDAsIDIxMzQ5LCAyMTM1OSwgMjEzNjgsIAorICAgIDIxMzc3LCAyMTM4NSwgMjEzOTAsIDIxMzk0LCAyMTM5NywgMjE0MDEsIDIxNDA1LCAyMTQwOSwgMjE0MTMsIDIxNDE3LCAKKyAgICAyMTQyMywgMjE0MjksIDExNzU5LCAyMTQzNCwgMjE0NDYsIDIxNDUyLCA3NjIzLCAyMTQ2MywgMjE0NzMsIDIxNDgyLCAKKyAgICAyMTQ4NiwgMjE0ODksIDIxNDkzLCAyMTQ5OSwgMjE1MDMsIDIxNTA4LCAyMTUxNywgMjE1MjQsIDU5MzUsIDIxNTMxLCAKKyAgICAyMTUzOSwgMjE1NDYsIDIxNTUyLCAyMTU1NywgMjE1NjMsIDIxNTY5LCAyMTU3NywgMjE1ODEsIDIxNTg0LCAyMTU4NiwgCisgICAgMjE0MDIsIDIxNTk1LCAyMTYwMSwgMjE2MTEsIDIxNjE2LCAyMTYyMiwgMjE2MjcsIDIxNjMyLCAyMTYzNywgMjE2NDQsIAorICAgIDIxNjUzLCAyMTY2MiwgMjE2NjgsIDIxNjczLCAyMTY3OSwgMjE2ODQsIDIxNjkxLCAyMTcwMiwgMjE3MDcsIDIxNzExLCAKKyAgICAyMTcyMSwgMjE3MjUsIDIxNzMwLCAyMTc0MCwgMjE3NDksIDIxNzUzLCAyMTc2MSwgMjE3NjgsIDIxNzc0LCAyMTc3OSwgCisgICAgMjE3ODYsIDIxNzkwLCAxMDMyMywgMjE3OTgsIDIxODA1LCAyMTgxMiwgMTgyMDQsIDIxMzI3LCAyMTgxNywgMjE4MjEsIAorICAgIDE4OTUyLCAyMTgyNiwgMjE4NDAsIDIxODU2LCAyMTg3NCwgMjE4OTMsIDIxOTEwLCAyMTkyOCwgMTg5NzEsIDIxOTQ1LCAKKyAgICAyMTk2NSwgMTg5ODgsIDIxOTc3LCAyMTk4OSwgMTI0NDMsIDIyMDAxLCAxOTAwOCwgMjIwMTUsIDIyMDI3LCA4MTI5LCAKKyAgICAyMjA0MSwgMjIwNDYsIDIyMDUxLCAyMjA1NywgMjIwNjEsIDIyMDY2LCAyMjA3NiwgMjIwODIsIDc5OTQsIDIyMDg4LCAKKyAgICAyMjA5MCwgMjIwOTUsIDIyMTAzLCAyMjEwNywgMjE2NDAsIDIyMTEzLCAyMjEyMCwgMjIxMzAsIDIyMTM1LCAyMjEzOSwgCisgICAgMjIxNDIsIDIyMTQ4LCAyMjE1NiwgMjIxNjYsIDIyMTgyLCAyMjE5NSwgMjIyMDksIDEyNDYxLCAyMjIyMywgMjIyMzAsIAorICAgIDIyMjM0LCAyMjIzNywgMjIyNDIsIDIyMjQ2LCAyMjI1NiwgMjIyNjEsIDIyMjY2LCAyMjI3MSwgMjIyNzksIDIyMjg3LCAKKyAgICAyMjI5NiwgMjIzMDEsIDEyNDY2LCAyMjMwNSwgMjIzMDgsIDIyMzExLCAyMjMxNiwgMjIzMzIsIDIyMzQwLCAyMjM0OCwgCisgICAgMjIzNTYsIDIyMzYxLCAyMjM2NSwgMjIzNzEsIDIyMzc3LCAyMjM4MCwgMjIzODYsIDIyMzk4LCAyMjQwNSwgMjI0MTEsIAorICAgIDIyNDE4LCAyMjQzMiwgMjI0NDUsIDIyNDU0LCAyMjQ2NiwgMjI0NzcsIDIyNDg2LCAyMjQ5NSwgMjI1MDMsIDIyNTE0LCAKKyAgICA1OTE3LCAyMjUyMSwgMjI1MjcsIDIyNTMyLCAyMjUzOCwgMjI1NDgsIDIyNTU3LCAyMjU2MywgMjI1NjgsIDIyNTc1LCAKKyAgICAyMjU4MywgMjI1OTUsIDIyNjAyLCAyMjYxMSwgMjI2MTksIDIyNjI1LCAyMjYzMSwgMjI2MzYsIDIyNjQwLCAyMjY0MywgCisgICAgMjI2NDksIDIyNjU0LCAyMjY1OCwgMjI2NjksIDIyNjc4LCAyMjY4NiwgMjI2OTEsIDIyNjk3LCAxMDkyMSwgNjU4MSwgCisgICAgMjI3MDIsIDIyNzA1LCAyMjcwOCwgMjI3MTQsIDIyNzIyLCAyMjczMCwgMjI3MzQsIDIyNzM4LCAyMjc0MywgMjI3NDYsIAorICAgIDIyNzU1LCAyMjc2MywgMjI3NzQsIDIyNzc4LCAyMjc4NCwgMjI3OTAsIDIyNzk0LCAyMjgwMCwgMjI4MjIsIDIyODQ2LCAKKyAgICAyMjg1MywgMjI4NTksIDIyODcwLCAyMjg4OCwgMjI4OTUsIDIyOTAzLCAyMjkwNywgMjI5MTYsIDIyOTI5LCAyMjkzNywgCisgICAgMjI5NDksIDIyOTYwLCAyMjk3MCwgMjI5ODQsIDIyOTkzLCAyMzAwMSwgMjMwMTMsIDcyODcsIDIzMDI0LCAyMzAzNSwgCisgICAgMjMwNDcsIDIzMDU3LCAyMzA2NiwgMjMwNzEsIDIzMDc1LCAyMzA4MywgMjMwODgsIDIzMDkyLCAyMzA5NSwgMjMwOTgsIAorICAgIDIzMTA2LCAyMzExNCwgMjMxMjMsIDIzMTMzLCAyMzE0MiwgMjMxNDgsIDIzMTYyLCAyNTU2LCAyMzE4NCwgMjMxOTMsIAorICAgIDIzMjAzLCAyMzIxNSwgMjMyMjUsIDIzMjMzLCAyMzI0MSwgMjMyNTAsIDIzMjU1LCAyMzI2NiwgMjMyNzcsIDIzMjgxLCAKKyAgICAyMzI5MSwgMjMzMDAsIDIzMzEwLCAyMzMyMCwgMjMzMjgsIDIzMzM3LCAyMzM0NCwgMjMzNTIsIDIzMzU5LCAyMzM2OCwgCisgICAgMjMzNzIsIDIzMzgwLCAyMzM4NywgMjMzOTQsIDIzNDA1LCAyMzQyMCwgMjM0MjcsIDIzNDM3LCAyMzQ0NiwgMjM0NTIsIAorICAgIDExMDU0LCAyMzQ1OSwgMjM0NjQsIDIzNDY4LCAyMzQ3MiwgMjM0ODAsIDIzNDg2LCAyMzQ5NSwgMjM1MDAsIDIzNTEwLCAKKyAgICAxOTUxNywgMjM1MTQsIDIzNTE3LCAyMzUyMiwgMjM1MjcsIDIzNTMyLCAyMzUzNywgMjM1NDIsIDIzNTQ3LCAyMzU1MiwgCisgICAgMjM1NTcsIDIzNTYzLCAyMzU2OCwgMjM1NzMsIDIzNTc5LCAxMjQyLCA2MzksIDIzNTg0LCAyMzU5MywgMjMwMCwgMjM2MDAsIAorICAgIDIzNjA1LCAyMzYwOSwgMjM2MTUsIDEyNzUsIDUwNiwgMzQzLCAyMzYyMCwgMjM2MjksIDIzNjM3LCAyMzY0NiwgMjM2NTQsIAorICAgIDIzNjY1LCAyMzY3NCwgMjM2ODIsIDIzNjg2LCAyMzY4OSwgMjM2OTcsIDIzNzA1LCAxMTcyNywgMjM3MTAsIDIzNzE2LCAKKyAgICA0MTAxLCAyMzcyMSwgMjM3MjUsIDIzNzMxLCAyMzczNSwgMjM3NDIsIDE0MzcsIDIzNzQ4LCA3MzU1LCAyMzc1NSwgMjM3NjUsIAorICAgIDIzNzczLCAyMzc3OSwgMjM3ODgsIDIzNzk2LCAyMzgwMiwgMjM4MTAsIDIzODE3LCAyMzgyNCwgMTQ3OCwgMjMzOCwgCisgICAgMjM4MzEsIDIzODM3LCAyMzg0OCwgMjM4NTksIDIzODY3LCAyMzg3NCwgMjM4ODMsIDIzODkxLCAyMzg5OCwgMjM5MDUsIAorICAgIDIzOTE4LCAyMzkyOSwgMjM5NDgsIDEyODAsIDIzOTUyLCAyMzk1NywgMjM5NjUsIDMzODcsIDIzOTY5LCAyMzk3NCwgMTQ0MSwgCisgICAgMjA0ODcsIDIzOTg0LCAyMzk4OCwgMjM5OTMsIDIzOTk3LCAzMzMzLCAyNDAwMywgMjQwMTEsIDI0MDE4LCAyNDAyNiwgCisgICAgMzM4OCwgMjYwLCAyNDAzMSwgMjQwMzksIDI0MDQ3LCAyNDA1NCwgMjQwNjAsIDI0MDY1LCAyNDA3MiwgMjQwNzUsIDI0MDgxLCAKKyAgICAyMTUwNCwgMjQwODcsIDEwNiwgMjQwOTEsIDI0MDk1LCAyNDEwMSwgMjQxMDYsIDI0MTEzLCAyNDExOSwgMjI2MywgMjQxMjMsIAorICAgIDI0MTI3LCAyNDEzMCwgMjQxMzMsIDI0MTQwLCAyNDE0NiwgMTg1MDAsIDI0MTUxLCAzNDMyLCAxMzE3NSwgMjQxNTUsIAorICAgIDI0MTU4LCAyNDE2NiwgMjQxNjksIDI0MTc5LCAyNDE5MSwgMjQxOTYsIDI0MjAwLCAyNDIwOCwgMjQyMTUsIDI0MjIxLCAKKyAgICAyNDIyOCwgMjQyMzUsIDI0MjM4LCAyNDI0MiwgMjQyNDYsIDE0NDUsIDI0MjU2LCAyNDI1OCwgMjQyNjMsIDI0MjY5LCAKKyAgICAyNDI3NSwgMjQyODAsIDI0Mjg1LCAyNDI5MCwgMjQyOTUsIDI0MzAwLCAyNDMwNSwgMjQzMTAsIDI0MzE1LCAyNDMyMCwgCisgICAgMjQzMjUsIDI0MzMwLCAyNDMzNSwgMjQzNDAsIDI0MzQ1LCAyNDM1MSwgMjQzNTcsIDI0MzYzLCAyNDM2OSwgMjQzNzQsIAorICAgIDI0Mzc5LCAyNDM4NCwgMjQzOTAsIDI0Mzk1LCAyNDQwMCwgMjQ0MDUsIDI0NDExLCAyNDQxNiwgMjQ0MjIsIDI0NDI3LCAKKyAgICAyNDQzMiwgMjQ0MzcsIDI0NDQyLCAyNDQ0OCwgMjQ0NTMsIDI0NDU5LCAyNDQ2NCwgMjQ0NjksIDI0NDc0LCAyNDQ3OSwgCisgICAgMjQ0ODUsIDI0NDkwLCAyNDQ5NiwgMjQ1MDEsIDI0NTA2LCAyNDUxMSwgMjQ1MTYsIDI0NTIxLCAyNDUyNiwgMjQ1MzEsIAorICAgIDI0NTM2LCAyNDU0MSwgMjQ1NDcsIDI0NTUzLCAyNDU1OSwgMjQ1NjQsIDI0NTY5LCAyNDU3NCwgMjQ1NzksIDI0NTg1LCAKKyAgICAyNDU5MSwgMjQ1OTcsIDI0NjAzLCAyNDYwOSwgMjQ2MTUsIDI0NjIwLCAyNDYyNiwgMjQ2MzEsIDI0NjM2LCAyNDY0MSwgCisgICAgMjQ2NDYsIDI0NjUyLCAyMzc2LCAyNDY1NywgMjM4MywgMjM5MCwgMjY0NywgMjQ2NjIsIDIzOTYsIDI0MDYsIDI0NjY4LCAKKyAgICAyNDY3MiwgMjQ2NzcsIDI0NjgyLCAyNDY4OCwgMjQ2OTMsIDI0Njk4LCAyNDcwMiwgMjQ3MDcsIDI0NzEzLCAyNDcxOCwgCisgICAgMjQ3MjMsIDI0NzI5LCAyNDczNCwgMjQ3MzgsIDI0NzQzLCAyNDc0OCwgMjQ3NTMsIDI0NzU4LCAyNDc2MywgMjQ3NjksIAorICAgIDI0Nzc1LCAyNDc4MCwgMjQ3ODQsIDI0Nzg5LCAyNDc5MywgMjQ3OTgsIDI0ODAzLCAyNDgwOCwgMjQ4MTIsIDI0ODE3LCAKKyAgICAyNDgyMiwgMjQ4MjcsIDI0ODMyLCAyNDgzOCwgMjQ4NDQsIDI0ODQ5LCAyNDg1MywgMjQ4NTgsIDI0ODYzLCAyNDg2OCwgCisgICAgMjQ4NzMsIDI0ODc4LCAyNDg4MiwgMjQ4ODcsIDI0ODkyLCAyNDg5NywgMjQ5MDEsIDI0OTA2LCAyNDkxNCwgMjQ5MjAsIAorICAgIDI0OTI2LCAyNDkzMiwgMjQ5MzcsIDI0OTQxLCAyNDk0NCwgMjQ5NDgsIDI0OTUzLCAyNDk1NywgMjQ5NjIsIDI0OTY2LCAKKyAgICAyNDk2OSwgMjQ5NzQsIDE3NTc4LCAyMzc1MiwgMjQ5NzksIDI0OTg0LCAyNDk4OCwgMjQ5OTMsIDI0OTk3LCAyNTAwMSwgCisgICAgMjUwMDYsIDI1MDEwLCAyNTAxMywgMjUwMTYsIDI1MDIwLCAyNTAyNSwgMjUwMzMsIDI1MDM3LCAyNTA0MiwgMjUwNDYsIAorICAgIDI1MDUwLCAyNTA1NSwgMjUwNjAsIDI1MDY0LCAyNTA3MCwgMjUwNzUsIDI1MDgwLCAyNTA4NywgMjUwOTQsIDI1MDk4LCAKKyAgICAyNTEwMSwgMjUxMDcsIDI1MTE2LCAyNTEyMywgMjUxMzAsIDI1MTM0LCAyNTEzOSwgMjUxNDMsIDI1MTQ5LCAyNTE1NSwgCisgICAgMjUxNTksIDI1MTY1LCAyNTE3MCwgMjUxNzUsIDI1MTgyLCAyNTE4OCwgMjUxOTQsIDI1MjAwLCAyNTIwNiwgMjUyMTMsIAorICAgIDI1MjE5LCAyNTIyNSwgMjUyMzEsIDI1MjM3LCAyNTI0MywgMjUyNDksIDI1MjU1LCAyNTI2MiwgMjUyNjgsIDI1Mjc1LCAKKyAgICAyNTI4MSwgMjUyODcsIDI1MjkzLCAyNTI5OSwgMjUzMDUsIDI1MzExLCAyNTMxNywgMjUzMjMsIDI1MzI5LCA4OTE3LCAKKyAgICAyNTMzNSwgMjUzNDAsIDI1MzQ1LCAxMjcxNiwgMjUzNTAsIDI1MzU1LCAyNTM2MCwgMjUzNjYsIDI1MzcxLCAyNTM3NiwgCisgICAgMjUzODAsIDI1Mzg1LCAyNTM5MCwgMjUzOTYsIDI1NDAxLCAyNTQwNiwgMjU0MTAsIDI1NDE1LCAyNTQyMCwgMjU0MjQsIAorICAgIDI1NDI5LCAyNTQzNCwgMjU0MzksIDI1NDQzLCAyNTQ0OCwgMjU0NTMsIDI1NDU4LCAyNTQ2MiwgMjU0NjYsIDEyMDYwLCAKKyAgICAyNTQ3MCwgMjU0NzksIDI1NDg1LCAyNTQ5MSwgMjU1MDAsIDI1NTA4LCAyNTUxMywgMjU1MTcsIDI1NTI0LCAyNTUzMCwgCisgICAgMjU1MzQsIDI1NTM5LCAyNTU0OCwgMjU1NTMsIDE0NzcsIDI1NTU5LCAyNTU2MiwgMjU1NjYsIDE4NTQxLCAxODU0NywgCisgICAgMjU1NzIsIDI1NTc2LCAyNTU4NywgMjU1OTgsIDI1NjEwLCAyNTYxNywgMjU2MjQsIDI1NjI5LCAyNTYzMywgMTcyMzUsIAorICAgIDY4NSwgMTc1NzcsIDI1NjQxLCAyNTY0NSwgMjU2NTAsIDI1NjU2LCAyNTY2MSwgMjU2NjcsIDI1NjcyLCAyNTY3OCwgCisgICAgMjU2ODMsIDgwMjIsIDI3MTQsIDMyODIsIDI1Njg3LCAyNTY5MCwgMjU2OTYsIDI1NzAyLCAyNTcwOCwgMjU3MTUsIDI1NzIxLCAKKyAgICAyNTcyNywgMjU3MzMsIDI1NzM5LCAyNTc0NSwgMjU3NTEsIDI1NzU3LCAyNTc2MywgMjU3NjksIDI1Nzc1LCAyNTc4MSwgCisgICAgMjU3ODcsIDI1Nzk0LCAyNTgwMCwgMjU4MDYsIDI1ODEyLCAyNTgxOCwgMjU4MjQsIDI1ODI3LCAyNTgzMiwgMjU4MzcsIAorICAgIDI1ODQzLCAyNTg0OCwgMjU4NTMsIDI1ODU3LCAyNTg2MiwgMjU4NjgsIDI1ODczLCAyNTg3OCwgMjU4ODQsIDI1ODg5LCAKKyAgICAyNTg5NSwgMjU4OTksIDI1OTA0LCAyNTkwOSwgMjU5MTQsIDI1OTE5LCAyNTkyMywgMjU5MjgsIDI1OTMzLCAyNTkzOCwgCisgICAgMjU5NDQsIDI1OTUwLCAyNTk1NiwgMjU5NjEsIDI1OTY1LCAyNTk3MCwgMjU5NzQsIDI1OTgyLCAzNDU1LCAyNTk4OCwgCisgICAgMjU5OTEsIDU5NzYsIDI1OTk1LCAyNjAwMSwgMjYwMDgsIDU5ODUsIDI2MDEyLCAyNjAxOCwgMjYwMjUsIDI2MDMxLCAKKyAgICAyNjA0MCwgMjYwNDgsIDI2MDUyLCAyNjA1OSwgMjYwNjUsIDI2MDY5LCAyNjA3MiwgMjYwODEsIDI2MDg5LCAyNjA5MywgCisgICAgMjYxMDMsIDI2MTEzLCAyNjEyMywgMjYxMjksIDI2MTM5LCAyNjE0NCwgMjYxNTcsIDI2MTcxLCAyNjE4MiwgMjYxOTQsIAorICAgIDI2MjA2LCAyNjIyMCwgMjYyMzMsIDI2MjQ1LCAyNjI1NywgMTE1NjEsIDI2MjcxLCAyNjI3NiwgMjYyODEsIDI2Mjg1LCAKKyAgICAyNjI4OSwgMjYyOTMsIDE3NjIsIDIyNDc1LCAyNjI5NywgMjYzMDIsIDI2MzA3LCAyNjMxMSwgMjYzMTQsIDI2MzE5LCAKKyAgICAyNjMyNCwgMjYzMzAsIDI2MzM2LCA3NzY3LCAxMjM5NSwgMjYzNDEsIDI2MzQ2LCAyNjM1MSwgMjYzNTUsIDI2MzYwLCAKKyAgICAyNTY1MSwgMjYzNjUsIDI2MzcwLCAyNjM3NiwgMjU2NTcsIDI2MzgxLCAyNjM4NCwgMjYzOTIsIDI1NjYyLCAyNjM5NywgCisgICAgMjY0MDMsIDI2NDA5LCAyNTY2OCwgMjY0MTQsIDI2NDE5LCAyNjQyNSwgMjY0MzAsIDI2NDM1LCAyNjQ0MSwgMjY0NDcsIAorICAgIDIzMTI4LCAyNjQ1MiwgMjY0NTYsIDI2NDYxLCAyNjQ2NiwgMjY0NzEsIDI2NDc5LCAyNjQ4MywgMjY0ODgsIDI2NDkzLCAKKyAgICAyNjQ5NywgMjY1MDIsIDI2NTA3LCAyNjUxMiwgMjU2NzMsIDI1Njc5LCAyNjUxOCwgMjQ1MiwgMjM0LCAyNjUyMSwgMjY1MjQsIAorICAgIDI2NTI4LCAyNjUzMiwgMjY1NDAsIDI2NTQ3LCAyNjU1NCwgMjY1NTgsIDI2NTYxLCAyNjU2NywgMjY1NzUsIDI2NTgzLCAKKyAgICAyNjU4NywgMjY1OTEsIDI2NTk0LCAyNjYwMSwgMjY2MDUsIDI2NjEyLCAyNjYyMCwgMjY2MjgsIDI2NjM1LCAyNjYzOSwgCisgICAgNjM1LCAyOTIsIDI2NjUxLCAyNjY1NiwgMjY2NjEsIDI2NjY3LCAyNjY3MiwgMzQ2NiwgMjY2NzcsIDI2NjgyLCAyNjY4NywgCisgICAgMjY2OTIsIDI2Njk3LCAxODYyNiwgMjY3MDIsIDI2NzA3LCAyNjcxMiwgMjY3MTcsIDI2NzIzLCAyNjcyOCwgMjY3MzIsIAorICAgIDI2NzM3LCAyNjc0MiwgMjY3NDcsIDI2NzUxLCAyNjc1NiwgMjY3NjEsIDI2NzY2LCAxODQ2NCwgMzQ3MiwgMjY3NzEsIAorICAgIDI2Nzc2LCAyNjc4MSwgMjY3ODcsIDI2NzkyLCAyNjc5NywgMjY4MDEsIDI2ODA2LCAyNjgxMSwgMjY4MTcsIDI2ODIyLCAKKyAgICAyNjgyNywgMjY4MzEsIDI2ODM2LCAyNjg0MSwgMjY4NDYsIDI2ODUwLCAyNjg1NSwgMjY4NjAsIDI2ODY1LCAyNjg3MSwgCisgICAgMjY4NzcsIDI2ODgyLCAyNjg4NiwgMjY4OTEsIDI2ODk2LCAyNjkwMSwgMjY5MDUsIDI2OTEzLCAyNjkxNywgMjY5MjMsIAorICAgIDI2OTI3LCAyNjkzNCwgMTMwNzAsIDI2OTQwLCAyNjk0NywgMjY5NTUsIDI2OTYyLCAyNjk2OCwgMjY5ODAsIDI2OTg2LCAKKyAgICAyNjY2LCAyNjk5MCwgMjY1OTYsIDI2OTk0LCAyNzAwNSwgMjcwMTAsIDI3MDE1LCAyNzAyMCwgMjcwMjQsIDI3MDI5LCAKKyAgICAxODU1MiwgMjcwMzMsIDE3NTkxLCAyNzAzOCwgMjcwNDMsIDI3MDQ5LCAyNzA1NCwgMjcwNTgsIDI3MDYyLCAyNzA2NSwgCisgICAgMjcwNzEsIDI3MDgyLCAyNzA5NCwgMjcwOTksIDI3MTAzLCAyNzEwNiwgMzIxLCAyNzExMCwgMjcxMTUsIDI3MTIwLCAKKyAgICAyNzEyNSwgMjcxMzAsIDI3MTM1LCAyNzE0MSwgMjcxNDYsIDI3MTUxLCAyNzE1NywgMjcxNjIsIDI3MTY4LCAyNzE3MywgCisgICAgMjcxNzksIDI3MTg0LCAyNzE4OSwgMjcxOTQsIDI3MTk5LCAyNzIwNCwgMjcyMDksIDI3MjE0LCAyNzIxOSwgMjcyMjUsIAorICAgIDI3MjMwLCAyNzIzNSwgMjcyNDAsIDI3MjQ1LCAyNzI1MCwgMjcyNTUsIDI3MjYwLCAyNzI2NiwgMjcyNzIsIDI3Mjc3LCAKKyAgICAyNzI4MiwgMjcyODcsIDI3MjkyLCAyNzI5NywgMjczMDIsIDI3MzA3LCAyNzMxMiwgMjczMTcsIDI3MzIyLCAyNzMyNywgCisgICAgMjczMzIsIDI3MzM3LCAyNzM0MiwgMjczNDcsIDI3MzUyLCAyNzM1NywgMjczNjIsIDI3MzY4LCAyNiwgMjczNzMsIDI3Mzc3LCAKKyAgICAyNzM4MSwgMjczODksIDI3MzkzLCAyNzM5NywgMjc0MDAsIDI3NDAzLCAyNzQwOCwgMjc0MTIsIDI3NDE3LCAyNzQyMSwgCisgICAgMjc0MjYsIDI3NDMwLCAyNzQzNSwgMjc0MzksIDI3NDQyLCAyNzQ0NCwgMjc0NDcsIDI3NDQ5LCAyNzQ1MywgMjc0NjUsIAorICAgIDI3NDc0LCAyNzQ3OCwgMjc0ODQsIDI3NDg5LCAyNzQ5NSwgMjc1MDAsIDI3NTA1LCAyNzUwOSwgMjc1MTQsIDI3NTIxLCAKKyAgICAyNzUyNiwgMjc1MzIsIDI3NTM3LCAyNzU0MSwgMjc1NDgsIDIxMzM1LCAyMTM0NSwgMjc1NTIsIDI3NTU3LCAyNzU2MiwgCisgICAgMjc1NjcsIDI3NTcxLCAyNzU3OCwgNjA3NiwgMjc1ODQsIDI3NTkzLCAyNzYwMSwgMjc2MTYsIDI3NjMwLCAyNzYzOCwgCisgICAgMjc2NDksIDI3NjU4LCAyNzY2MywgNTI0MywgMjc2NzMsIDI3Njc4LCAyNzY4MiwgMjc2ODUsIDI3Njg5LCAyNzY5MywgCisgICAgMjc3MDAsIDI3NzA1LCA2ODIwLCAyNzcxNSwgMjc3MTcsIDI3NzIwLCAyNzcyNCwgMjc3MjgsIDI3NzMzLCAyNzczOSwgCisgICAgMjc3NDQsIDI3NzUzLCAyNzc1OSwgMjc3NjQsIDI3NzcxLCAyNzc3NSwgMjc3ODIsIDI3Nzk1LCAyNzgwMywgMjc4MDcsIAorICAgIDI3ODE3LCAyNzgyMiwgMjc4MjYsIDI3ODMwLCAyNzgzNiwgMjc4NDEsIDI3ODUxLCAyNzg2MCwgMjc4NzEsIDI3ODc5LCAKKyAgICAyNzg5MCwgMjc4OTksIDI3OTAyLCAyNzkwNiwgMjc5MTQsIDI3OTIwLCAyNzkyOCwgMjc5MzUsIDI3OTQxLCAyMzUxLCAKKyAgICAyNzk0NSwgMjc5NDcsIDI3OTUyLCAyNzk1NywgMjc5NjAsIDI3OTYyLCAyNzk2NiwgMjc5NjksIDI3OTczLCAyNzk3NywgCisgICAgMjc5ODAsIDI3OTg2LCAyNzk5NiwgMjgwMDEsIDI4MDA3LCAyODAxMSwgMjgwMTYsIDI4MDI5LCAyMTYwNiwgMjgwMzUsIAorICAgIDI4MDQ0LCAxMzg5OCwgMjYxMDksIDI4MDUxLCAyODA1NiwgMjgwNjAsIDI4MDY4LCAyODA3NSwgMjgwODAsIDI4MDg0LCAKKyAgICAyODA4OCwgMjgwOTYsIDI4MTAyLCAyODEwOCwgMjgxMTMsIDI4MTE3LCAyODEyMCwgMjgxMjUsIDI4MTM4LCAyODE1NCwgCisgICAgMTkwNzgsIDI4MTcxLCAyODE4MywgMjgyMDAsIDI4MjEyLCAyODIyNiwgMTkwOTUsIDE5MTE0LCAyODIzOCwgMjgyNTAsIAorICAgIDI1NzMsIDI4MjY0LCAyODI2OSwgMjgyNzQsIDI4Mjc4LCAyODI4NSwgMjgyOTcsIDI4MzAzLCAyODMwNiwgMjgzMTEsIAorICAgIDE4MjQ0LCAyODMxNCwgMjgzMTgsIDI4MzIxLCAyODMyNiwgMjgzMzEsIDI4MzM3LCAyODM0MiwgMjgzNDcsIDI4MzUzLCAKKyAgICAyODM1OSwgMjgzNjQsIDI4MzY4LCAyODM3MywgMjgzNzgsIDI4MzgzLCAyODM4NywgMjgzOTAsIDI4Mzk2LCAyODQwMSwgCisgICAgMjg0MDYsIDI4NDExLCAyODQxNSwgMjg0MjAsIDI4NDI2LCAyODQzMSwgMjg0MzYsIDI4NDQyLCAyODQ0NywgMjg0NTIsIAorICAgIDI4NDU3LCAyODQ2MiwgMjg0NjcsIDI4NDcxLCAyODQ3NCwgMjg0ODAsIDI4NDg0LCAyODQ5MiwgMjg0OTksIDI4NTA3LCAKKyAgICAyODUxNywgMjg1MjMsIDI4NTI5LCAyODUzMywgMjg1NDIsIDI4NTQ3LCAyODU1MiwgODAzNiwgMjg1NTcsIDI4NTY0LCAKKyAgICAyODU3MCwgMjg1NzUsIDI4NTgxLCAyODU4OSwgMjg1OTYsIDI4NjAwLCAyODYwMywgMjg2MTQsIDI4NjIxLCAyODYyNywgCisgICAgMjg2MzYsIDI4NjQwLCAyODY0MywgMjg2NDksIDI4NjU2LCAyODY2MiwgMjg2NjgsIDI4Njc2LCAyNDA1NSwgMjg2ODMsIAorICAgIDI4NjkxLCAyODY5NywgMjg3MDIsIDI4NzA4LCAyODcxMywgMjg3MTksIDI4NzIzLCAyODczMCwgMjg3MzYsIDIxNjE5LCAKKyAgICAyODc0NSwgMjg3NTAsIDI4NzU4LCAyODc2NiwgNzM4MywgNDEyMCwgMjg3NzMsIDI4Nzc3LCAyODc4MSwgMjg3ODUsIAorICAgIDI4NzkwLCAyODc5NCwgMjg3OTgsIDI4ODAzLCAyODgwOCwgMjg4MTIsIDE3NjQwLCAyODgxNywgMjg4MjEsIDI4ODI1LCAKKyAgICAyODgyOSwgMjg4MzIsIDI4ODM0LCAyODgzOSwgMjg4NDcsIDI4ODUxLCAyODg1OCwgMjg4NjIsIDI4ODcwLCAyODg3NywgCisgICAgMjg4ODcsIDI4ODkxLCAyODg5NSwgMjg5MDMsIDI4OTA5LCAyODkxOCwgMTA1NzAsIDI4OTI0LCAyODkzMywgMjg5NDAsIAorICAgIDI4OTQ4LCAyODk1NiwgMjg5NjQsIDI4OTcxLCAyODk3OCwgMjg5ODUsIDI4OTkyLCAyODk5OSwgMjkwMDQsIDI5MDEwLCAKKyAgICAyOTAyNywgMjkwMzUsIDI5MDQzLCAyOTA1MCwgMzgwLCAyOTA1NCwgMjkwNjAsIDI3NjU0LCAyOTA2NiwgMjkwNjksIAorICAgIDI5MDc3LCAyOTA4MywgMjkwODksIDI5MDk4LCAyOTEwNCwgMzQyMCwgMTIwNDYsIDI5MTEzLCAyOTEyMCwgMjkxMjUsIAorICAgIDI5MTI5LCAyOTEzNiwgMjkxNDQsIDI5MTUzLCAyOTE2MywgMjkxNjksIDI5MTc3LCAyOTE4NiwgMjkxOTQsIDE4MjQ4LCAKKyAgICAyOTIwMSwgMjkyMDgsIDI5MjE0LCAyOTIyNCwgMjkyMzMsIDI5MjQ0LCAyOTI0OCwgMjkyNTQsIDI5MjU5LCAyOTI2NSwgCisgICAgMjkyNzEsIDI5Mjc2LCAyOTI4OSwgMjkzMDIsIDI5MzE1LCAyOTMyMiwgMjkzMjgsIDI5MzMzLCAyOTMzNywgMTQ1MSwgCisgICAgMjkzNDEsIDI5MzQ2LCAyOTM1MSwgMjkzNTYsIDI5MzYxLCAyOTM2NywgMjkzNzIsIDI5Mzc3LCAyOTM4MiwgMjkzODcsIAorICAgIDI5MzkyLCAyOTM5NywgMjk0MDIsIDI5NDA4LCAyOTQxNCwgMjk0MTksIDI5NDI0LCAyOTQzMCwgMjk0MzUsIDI5NDQwLCAKKyAgICAyOTQ0NSwgMjk0NTEsIDI5NDU2LCAyOTQ2MSwgMjk0NjYsIDI5NDcxLCAyOTQ3NywgMjk0ODIsIDI5NDg3LCAyOTQ5MywgCisgICAgMjk0OTgsIDI5NTAzLCAyOTUwOCwgMjk1MTMsIDI5NTE4LCAyOTUyNCwgMjk1MjksIDI5NTM1LCAyOTU0MCwgMjk1NDYsIAorICAgIDI5NTUxLCAyOTU1NiwgMjk1NjEsIDI5NTY3LCAyOTU3MywgMjk1NzksIDI5NTg1LCAyOTU5MSwgMjk1OTcsIDI5NjAzLCAKKyAgICAyOTYwOSwgMjk2MTQsIDI5NjE5LCAyOTYyNSwgMjk2MzAsIDI5NjM1LCAyOTY0MCwgMjk2NDUsIDI5NjUwLCAyOTY1NSwgCisgICAgMjk2NjAsIDI5NjY2LCAyOTY3MSwgMjk2NzYsIDI5NjgyLCAyOTY4OCwgMTAxLCAyOTY5MywgMjk2OTUsIDI5Njk5LCAKKyAgICAyOTcwMywgMjk3MDcsIDI5NzEyLCAyOTcxNiwgNzMyMywgMjk3MjAsIDI5NzI2LCA0MzMxLCAyOTczMiwgMjk3MzUsIAorICAgIDI5NzQwLCAyOTc0NCwgMjk3NDksIDI5NzUzLCAyOTc1NywgMjk3NjIsIDc4NjksIDI5NzY2LCAyOTc3MCwgMjk3NzQsIAorICAgIDEyMTMxLCAyOTc3OSwgMjk3ODMsIDI5Nzg4LCAyOTc5MywgMjk3OTgsIDI5ODAyLCAyOTgwOSwgMjE2MjMsIDI5ODE1LCAKKyAgICAyOTgxOCwgMjk4MjIsIDI5ODI3LCAyOTgzMywgMjk4MzcsIDI5ODQzLCAyOTg0OCwgMjk4NTIsIDI5ODU2LCAyOTg2MCwgCisgICAgMzMxNywgMzMyMiwgMjQxOTQsIDI5ODYzLCAyOTg3MSwgMjk4NzgsIDI5ODgyLCAyOTg4NywgMzQyLCAyOTg5MiwgMjk4OTgsIAorICAgIDI5OTA0LCAyOTkwOCwgMjk5MTcsIDI5OTIxLCAyOTkyNSwgMjk5MzAsIDI5OTM1LCAyOTkzOSwgMjk5NDYsIDI5OTUyLCAKKyAgICAyOTk1NywgMjk5NzIsIDI5OTg3LCAzMDAwMiwgMzAwMTgsIDMwMDM2LCA3ODMxLCAzMDA1MCwgMzAwNTUsIDMwMDU5LCAKKyAgICAzMDA2NywgMjc3ODgsIDMwMDc1LCAzMDA3OSwgMzAwODgsIDMwMDk2LCA3NTQ2LCAxMTg0MiwgMzAxMDAsIDMwMTAzLCAKKyAgICAzMDEwNiwgNjA4OSwgMzYyMSwgMzAxMTEsIDMwMTE5LCAzMDEyMywgMzAxMjYsIDMwMTMwLCAzMDEzNSwgMzAxNDAsIAorICAgIDMwMTQ2LCAzMDE1MSwgMzAxNTUsIDMwMTU5LCAzMDE2NCwgMzAxNjgsIDMwMTc0LCAzMDE3OCwgMzAxODUsIDMwMTg5LCAKKyAgICA5MjU2LCAzMDE5NiwgMzAyMDIsIDMwMjA3LCAzMDIxNCwgMzAyMjEsIDMwMjI4LCAyMzY0MSwgNjAyMCwgMzAyMzUsIAorICAgIDMwMjQyLCAzMDI0OSwgMzAyNTUsIDMwMjYwLCAzMDI2NywgMzAyNzgsIDMwMjg0LCAzMDI4OSwgMzAyOTYsIDMwMzAwLCAKKyAgICAzMDMwNCwgMzAzMTQsIDMwMzI1LCAzMDMzMSwgMzAzMzYsIDMwMzQxLCAzMDM0NiwgMzAzNTEsIDMwMzU1LCAzMDM1OSwgCisgICAgMzAzNjUsIDIyNTUsIDc2NywgNzg5MSwgNzg5NiwgNzkwMiwgMzAzNzQsIDc5MDcsIDc5MTIsIDc5MTgsIDMwMzc5LCAKKyAgICAzMDM4OSwgMzAzOTMsIDc5MjMsIDMwMzk4LCAzMDQwMSwgMzA0MDYsIDMwNDEwLCAzMDQxNSwgMzA0MjIsIDMwNDI4LCAKKyAgICAzMDQzOCwgNDE0NiwgMzA0NDcsIDMwNDUxLCAzMDQ1NSwgMzA0NjUsIDMwNDcxLCAzMDQ4MiwgMzA0ODgsIDMwNDk0LCAKKyAgICAzMDQ5OSwgMzA1MDUsIDMwNTExLCAzMDUxNiwgMzA1MTksIDMwNTI2LCAzMDUzMiwgMzA1MzcsIDMwNTQ0LCAzMDU1MSwgCisgICAgMzA1NTUsIDMwNTY1LCAzMDU3OCwgMzA1ODcsIDMwNTk2LCAzMDYwNywgMzA2MjAsIDMwNjI5LCAzMDY0MCwgMzA2NDUsIAorICAgIDMwNjUwLCA3OTI4LCAzMDY1NiwgMzA2NjQsIDMwNjY5LCA1MDk0LCAyMSwgMzA2NzYsIDMwNjgxLCAxMzI4NCwgMzA2ODUsIAorICAgIDMwNjg4LCAzMDY5MSwgMjMyMTksIDMwNjk1LCAyMzY1MCwgMzA3MDMsIDMwNzA3LCAzMDcxMCwgMzA3MTYsIDMwNzIyLCAKKyAgICAzMDczMCwgMzA3MzYsIDMwNzQzLCAzMDc0NywgMzA3NTEsIDIzMzgzLCAzMDc1NSwgMzA3NjQsIDMwNzcwLCAzMDc3NSwgCisgICAgMzA3NzksIDMwNzg3LCAyMTY2OSwgMzA3OTMsIDMwODAwLCAzMDgwNiwgMzA4MTEsIDMwODE2LCAzMDgyMCwgMzA4MjYsIAorICAgIDMwODMxLCAzMDgzNywgMzc0NywgNzE2LCAzMDg0NCwgMzA4NDgsIDMwODUxLCAxMjA1NCwgMzA4NjMsIDI5MTgyLCAzMDg3NCwgCisgICAgMzA4NzcsIDMwODg0LCAzMDg5MCwgMzA4OTQsIDMwOTAwLCAzMDkwNSwgMzA5MTEsIDMwOTE2LCAzMDkyMSwgMzA5MjUsIAorICAgIDMwOTMwLCAzMDkzNSwgMzA5NDUsIDMwOTUxLCAzMDk2NCwgMzA5NzAsIDMwOTc1LCAzMDk4MSwgMTMxOTMsIDE0NTQsIDkzMiwgCisgICAgMjU3NzAsIDI1Nzc2LCAzMDk4NiwgMjU3ODIsIDI1Nzk1LCAyNTgwMSwgMjU4MDcsIDMwOTkyLCAyNTgxMywgMjU4MTksIAorICAgIDMwOTk4LCAzMTAwNCwgMTQsIDMxMDEyLCAzMTAxOSwgMzEwMjMsIDMxMDI3LCAzMTAzNSwgMzEwMzksIDMxMDQ0LCAzMTA0OCwgCisgICAgMzEwNTUsIDMxMDYwLCAzMTA2NCwgMzEwNjksIDMxMDc1LCAzMTA4MCwgMzEwODYsIDMxMDkxLCAzMTA5NSwgMzEwOTksIAorICAgIDMxMTAzLCAzMTEwOCwgMzExMTIsIDMxMTE3LCAzMTEyMSwgMzExMjgsIDMxMTMzLCAzMTEzNywgMzExNDIsIDMxMTQ2LCAKKyAgICAzMTE1MSwgMzExNTUsIDMxMTYwLCAxMjIxOCwgMTIyMjMsIDMxMTY1LCAzMTE2OSwgMzExNzIsIDMxMTc2LCAzMTE4MSwgCisgICAgMzExODUsIDMxMTkxLCAzMTE5OCwgMzEyMDMsIDMxMjEzLCAzMTIxOCwgMzEyMjYsIDMxMjMwLCAzMTIzMywgMzEyMzcsIAorICAgIDMxMjQyLCAzMTI0NywgMzEyNTEsIDMxMjU2LCAxMDU4MSwgMzEyNjcsIDMxMjcxLCAzMTI3NCwgMzEyNzgsIDMxMjgyLCAKKyAgICAzMTI4NSwgMzEyODksIDYxMDgsIDEwNTk3LCAzMTI5MiwgMzEyOTUsIDMxMzAwLCAzMTMwNCwgMzEzMTMsIDMxMzI5LCAKKyAgICAzMTM0NSwgMzEzNTUsIDIzMTM4LCAzMTM2MiwgMzEzNjYsIDMxMzcxLCAzMTM3NSwgMzEzNzksIDMxMzg0LCAzMTM4OSwgCisgICAgMzEzOTMsIDMxMzk4LCAzMTQwMiwgMzE0MDYsIDIyMzIzLCAzMTQxMiwgMTc3MDIsIDMxNDE3LCAzMTQyNCwgMzE0MzIsIAorICAgIDMxNDM4LCAzMTQ0NSwgMzE0NTMsIDMxNDU5LCAzMTQ2MywgMzE0NjksIDMxNDc3LCAzMTQ4MSwgMzE0OTAsIDczMDQsIAorICAgIDMxNDk4LCAzMTUwMiwgMzE1MTAsIDMxNTE3LCAzMTUyMiwgMzE1MjYsIDMxNTI5LCAzMTUzMywgMzE1MzYsIDMxNTQwLCAKKyAgICAzMTU0NywgMzE1NTIsIDIxODE0LCAyNTgyNSwgMzE1NTYsIDMxNTYzLCAzMTU2OSwgMzE1NzQsIDMxNTc3LCAzMTU3OSwgCisgICAgMzE1ODYsIDMxNTkzLCAzMTU5OSwgMzE2MDMsIDMxNjA2LCAzMTYxMCwgMzE2MTQsIDMxNjE4LCAzMTYyMywgMzE2MjcsIAorICAgIDMxNjMxLCAzMTYzNCwgMzE2MzgsIDMxNjUyLCAxOTE0NCwgMzE2NzEsIDMxNjg0LCAzMTY5NywgMzE3MTAsIDE5MTYyLCAKKyAgICAzMTcyNSwgODA5MCwgMzE3NDAsIDMxNzQ2LCAzMTc1MCwgMzE3NTQsIDMxNzYxLCAzMTc2NywgMzE3NzIsIDMxNzc4LCAKKyAgICAzMTc4OCwgMzE4MDAsIDMxODExLCAzMTgxNiwgMzE4MjMsIDMxODI3LCAzMTgzMCwgMTI1ODksIDMxODM4LCAxMjIzOSwgCisgICAgMzE4NTEsIDMxODU1LCAzMTg1OSwgMzE4NjQsIDMxODY5LCAzMTg3MywgMzE4NzcsIDMxODgwLCA1NzUwLCAyMzAyMiwgCisgICAgMzE4ODUsIDMxODg5LCAzMTg5NSwgMzE5MDQsIDMxOTA5LCAyOTE1OSwgMzE5MTUsIDMxOTIwLCAzMTkyNCwgMzE5MjksIAorICAgIDMxOTM2LCAzMTk0MCwgMzE5NDMsIDExNTI2LCAzMTk0OCwgMzE5NTUsIDkzOSwgMzE5NTksIDMxOTY0LCAzMTk2OSwgCisgICAgMzE5NzUsIDMxOTgwLCAzMTk4NSwgMzE5ODksIDMxOTk0LCAzMjAwMCwgMzIwMDUsIDMyMDExLCAzMjAxNiwgMzIwMjIsIAorICAgIDMyMDMyLCAzMjAzNywgMzIwNDIsIDMyMDQ2LCA1MjQ1LCA1MjU3LCAzMjA1MSwgMzIwNTQsIDMyMDYxLCAzMjA3MCwgCisgICAgMzIwNzQsIDMyMDc3LCAzMjA4MSwgMzIwODYsIDY2OCwgMzIwOTEsIDMyMDk3LCAyMzIxMSwgMzIxMDMsIDMyMTA4LCAKKyAgICAzMjExOCwgMzIxMjcsIDMyMTM0LCAzMjE0MCwgMzIxNDQsIDMyMTUxLCAzMjE1NywgMzIxNjQsIDMyMTcwLCAzMjE4MCwgCisgICAgMzIxODgsIDMyMTk0LCAzMjIwMCwgMzIyMDUsIDMyMjA5LCAzMjIxNiwgMzIyMjIsIDMyMjI5LCAzMTYxOSwgNTQ4LCAxMjA4LCAKKyAgICAzMjIzNSwgMzIyNDAsIDMyMjQzLCAzMjI0OSwgMzIyNTcsIDEzODMsIDMyMjYyLCAzMjI2NiwgMzIyNzEsIDMyMjc4LCAKKyAgICAzMjI4NCwgMzIyODgsIDMyMjkzLCAzMjMwMiwgMzIzMDksIDMyMzE5LCAzMjMyNSwgMjMyMzcsIDMyMzQyLCAzMjM1MSwgCisgICAgMzIzNTksIDMyMzY1LCAzMjM3MCwgMzIzNzcsIDMyMzgzLCAzMjM5MSwgMzI0MDAsIDMyNDA4LCAzMjQxMywgMzI0MjEsIAorICAgIDMyNDI3LCAzMjQ0NiwgMTI1MjIsIDMyNDYwLCAzMjQ3NiwgMzI0OTAsIDMyNDk2LCAzMjUwMSwgMzI1MDYsIDMyNTExLCAKKyAgICAzMjUxNywgMzI1MjIsIDMyNTI2LCAzMjUzMywgMzI1MzgsIDMyNTQyLCAzMTksIDI4MDcsIDMyNTQ5LCAzMjU1NCwgMjI1NzksIAorICAgIDMyMzgwLCAzMjU1OSwgMzI1NjQsIDMyNTcyLCAzMjU3NiwgMzI1NzksIDMyNTg1LCAzMjU4OSwgMjMyODcsIDMyNTkyLCAKKyAgICAzMjU5NiwgMzI1OTksIDMyNjA0LCAzMjYwOCwgMzI2MTMsIDMyNjE4LCAzMjYyMiwgMzI2MjcsIDMyNjMxLCAxNzUxMSwgCisgICAgMTc1MjIsIDMyNjM1LCAzMjY0MCwgMzI2NDYsIDIyMjkyLCAzMjY1MSwgMzI2NTUsIDEyNzAyLCAzMjY1OCwgMzI2NjMsIAorICAgIDMyNjY4LCAzMjY3MywgMzI2NzgsIDMyNjgzLCAzMjY4OCwgMzI2OTMsIDQ1MywgNDMsIDI1ODI4LCAyNTgzMywgMjU4MzgsIAorICAgIDI1ODQ0LCAyNTg0OSwgMjU4NTQsIDMyNjk4LCAyNTg1OCwgMzI3MDIsIDMyNzA2LCAyNTg2MywgMjU4NjksIDMyNzEwLCAKKyAgICAyNTg3NCwgMjU4NzksIDMyNzE4LCAzMjcyMywgMjU4ODUsIDMyNzI4LCAzMjczMywgMzI3MzgsIDMyNzQzLCAzMjc0OSwgCisgICAgMzI3NTUsIDI1ODk2LCAzMjc2OCwgMzI3NzQsIDI1OTAwLCAyNTkwNSwgMzI3NzgsIDI1OTEwLCAyNTkxNSwgMzI3ODEsIAorICAgIDMyNzg2LCAzMjc5MCwgMjU1OTEsIDMyNzk2LCAxMDc0NiwgMzI4MDMsIDMyODA4LCAyNTkyMCwgMzI4MTIsIDMyODE3LCAKKyAgICAzMjgyMiwgMzI4MjcsIDMyODMxLCAzMjgzNiwgMzI4NDEsIDMyODQ3LCAzMjg1MiwgMzI4NTcsIDMyODYzLCAzMjg2OSwgCisgICAgMzI4NzQsIDMyODc4LCAzMjg4MywgMzI4ODgsIDMyODkzLCAzMjg5NywgMzI5MDIsIDMyOTA3LCAzMjkxMiwgMzI5MTgsIAorICAgIDMyOTI0LCAzMjkzMCwgMzI5MzUsIDMyOTM5LCAzMjk0NCwgMzI5NDgsIDI1OTI0LCAyNTkyOSwgMjU5MzQsIDMyOTUyLCAKKyAgICAzMjk1NiwgMjU5MzksIDI1OTQ1LCAyNTk1MSwgMjU5NTcsIDMyOTY4LCAyMTUyMSwgMzI5NzIsIDMyOTc2LCAzMjk4MSwgCisgICAgMzI5ODYsIDMyOTkxLCAzMjk5NSwgMzI5OTksIDMzMDA5LCAzMzAxNCwgMzMwMTksIDMzMDIzLCAzMzAyNywgMzMwMzAsIAorICAgIDMzMDM4LCAyNTk2NiwgMTQ2MSwgMzMwNDMsIDMzMDUxLCAzMzA2MCwgMzMwNjQsIDMzMDcyLCAzMzA4MCwgMzMwOTYsIAorICAgIDMzMTAxLCAxNzMxLCA5Mzk4LCAzMzEwNSwgMjg1MywgMzMxMTcsIDMzMTE4LCAzMzEyNiwgMzMxMzMsIDMzMTM4LCAzMzE0MywgCisgICAgNzE5NywgMTA0MywgNzk1MCwgMzMxNTAsIDMzMTU1LCAzMzE1OCwgMzMxNjcsIDEyOTQsIDMzMTcyLCAzMzE3OSwgMzMxODIsIAorICAgIDMzMTg3LCAxODYwMCwgMjQ4NSwgMzMxOTEsIDgzMTIsIDMzMjAxLCAzMzIwNywgMjI3MywgMjI4MywgMzMyMTYsIDMzMjI1LCAKKyAgICAyNzk5NywgNzk4NSwgMzU2NSwgMjkwNjMsIDEyOTksIDMzMjM1LCAzMzI0MywgMzMyNTAsIDMzMjU1LCAzMzI1OSwgMzMyNjMsIAorICAgIDE5NzU5LCA4MDEyLCAzMzI3MSwgMzMyODAsIDMzMjg5LCAzMzI5NywgMzMzMDQsIDMzMzA5LCAzMzMyMiwgMzMzMzUsIAorICAgIDMzMzQ3LCAzMzM1OSwgMzMzNzEsIDMzMzg0LCAzMzM5NSwgMzM0MDYsIDMzNDE0LCAzMzQyMiwgMzM0MzQsIDMzNDQ2LCAKKyAgICAzMzQ1NywgMzM0NjYsIDMzNDc0LCAzMzQ4MSwgMzM0OTMsIDMzNTAwLCAzMzUwOSwgMzM1MTYsIDMzNTI5LCAzMzUzOSwgCisgICAgMzM1NDQsIDMzNTUwLCAzMzU1NSwgMzM1NTksIDMzNTY2LCAzMzU3MCwgMzM1NzcsIDMzNTg1LCAyNDUxLCAzMzU5MiwgCisgICAgMzM2MDMsIDMzNjEzLCAzMzYyMiwgMzM2MzAsIDMzNjQwLCAzMzY0OCwgMzM2NTgsIDMzNjYzLCAzMzY2OSwgMzM2ODAsIAorICAgIDMzNjkwLCAzMzY5OSwgMzM3MDgsIDMzNzE4LCAzMzcyNywgMzM3MzIsIDMzNzM3LCAxNjg3LCAzNywgMzM3NDUsIDMzNzUzLCAKKyAgICAzMzc2NCwgMzM3NzUsIDMzNzg1LCAzMzc5MiwgMzM3OTgsIDMzODAzLCAzMzgwNywgMzM4MTgsIDMzODI4LCAzMzgzNywgCisgICAgMzM4NDgsIDEzMjU3LCAxMzI2MiwgMzM4NTMsIDMzODYyLCAzMzg2NywgMzM4NzcsIDMzODgyLCAzMzg5MCwgMzM4OTgsIAorICAgIDMzOTA1LCAzMzkxMSwgODA1NywgMTAxOCwgMzM5MTUsIDMzOTIxLCAzMzkyNiwgMzM5MjksIDIwOTQsIDMxODU2LCAzMzkzNywgCisgICAgMzM5NDEsIDMzOTQ0LCAxNDk0LCAzMzk1MCwgMTEwMTksIDEzMDQsIDMzOTU1LCAzMzk2OCwgMzM5ODIsIDI1MzYsIDM0MDAwLCAKKyAgICAzNDAxMiwgMzQwMjQsIDI1NTAsIDI1NjcsIDM0MDM4LCAzNDA1MSwgMjU4MiwgMzQwNjUsIDM0MDc3LCAyNTk3LCAzNDA5MSwgCisgICAgMTMxMCwgMTMxNiwgMTMyMiwgODIzNywgMzQwOTYsIDM0MTAxLCAzNDEwNiwgMzQxMTAsIDM0MTI1LCAzNDE0MCwgMzQxNTUsIAorICAgIDM0MTcwLCAzNDE4NSwgMzQyMDAsIDM0MjE1LCAzNDIzMCwgMzQyNDUsIDM0MjYwLCAzNDI3NSwgMzQyOTAsIDM0MzA1LCAKKyAgICAzNDMyMCwgMzQzMzUsIDM0MzUwLCAzNDM2NSwgMzQzODAsIDM0Mzk1LCAzNDQxMCwgMzQ0MjUsIDM0NDQwLCAzNDQ1NSwgCisgICAgMzQ0NzAsIDM0NDg1LCAzNDUwMCwgMzQ1MTUsIDM0NTMwLCAzNDU0NSwgMzQ1NjAsIDM0NTc1LCAzNDU5MCwgMzQ2MDUsIAorICAgIDM0NjIwLCAzNDYzNSwgMzQ2NTAsIDM0NjY1LCAzNDY4MCwgMzQ2OTUsIDM0NzEwLCAzNDcyNSwgMzQ3NDAsIDM0NzU1LCAKKyAgICAzNDc3MCwgMzQ3ODUsIDM0ODAwLCAzNDgxNSwgMzQ4MzAsIDM0ODQ1LCAzNDg2MCwgMzQ4NzUsIDM0ODkwLCAzNDkwNSwgCisgICAgMzQ5MjAsIDM0OTM1LCAzNDk1MCwgMzQ5NjUsIDM0OTgwLCAzNDk5NSwgMzUwMTAsIDM1MDI1LCAzNTA0MCwgMzUwNTUsIAorICAgIDM1MDcwLCAzNTA4NSwgMzUxMDAsIDM1MTE1LCAzNTEzMCwgMzUxNDUsIDM1MTYwLCAzNTE3NSwgMzUxOTAsIDM1MjA1LCAKKyAgICAzNTIyMCwgMzUyMzUsIDM1MjUwLCAzNTI2NSwgMzUyODAsIDM1Mjk1LCAzNTMxMCwgMzUzMjUsIDM1MzQwLCAzNTM1NSwgCisgICAgMzUzNzAsIDM1Mzg1LCAzNTQwMCwgMzU0MTUsIDM1NDMwLCAzNTQ0NSwgMzU0NjAsIDM1NDc1LCAzNTQ5MCwgMzU1MDUsIAorICAgIDM1NTIwLCAzNTUzNSwgMzU1NTAsIDM1NTY1LCAzNTU4MCwgMzU1OTUsIDM1NjEwLCAzNTYyNSwgMzU2NDAsIDM1NjU1LCAKKyAgICAzNTY3MCwgMzU2ODUsIDM1NzAwLCAzNTcxNSwgMzU3MzAsIDM1NzQ1LCAzNTc2MCwgMzU3NzUsIDM1NzkwLCAzNTgwNSwgCisgICAgMzU4MjAsIDM1ODM1LCAzNTg1MCwgMzU4NjUsIDM1ODgwLCAzNTg5NSwgMzU5MTAsIDM1OTI1LCAzNTk0MCwgMzU5NTUsIAorICAgIDM1OTcwLCAzNTk4NSwgMzYwMDAsIDM2MDE1LCAzNjAzMCwgMzYwNDUsIDM2MDYwLCAzNjA3NSwgMzYwOTAsIDM2MTA1LCAKKyAgICAzNjEyMCwgMzYxMzUsIDM2MTUwLCAzNjE2NSwgMzYxODAsIDM2MTk1LCAzNjIxMCwgMzYyMjUsIDM2MjQwLCAzNjI1NSwgCisgICAgMzYyNzAsIDM2Mjg1LCAzNjMwMCwgMzYzMTUsIDM2MzMwLCAzNjM0NSwgMzYzNjAsIDM2Mzc1LCAzNjM5MCwgMzY0MDUsIAorICAgIDM2NDIwLCAzNjQzNSwgMzY0NTAsIDM2NDY1LCAzNjQ4MCwgMzY0OTUsIDM2NTEwLCAzNjUyNSwgMzY1NDAsIDM2NTU1LCAKKyAgICAzNjU3MCwgMzY1ODUsIDM2NjAwLCAzNjYxNSwgMzY2MzAsIDM2NjQ1LCAzNjY2MCwgMzY2NzUsIDM2NjkwLCAzNjcwNSwgCisgICAgMzY3MjAsIDM2NzM1LCAzNjc1MCwgMzY3NjUsIDM2NzgwLCAzNjc5NSwgMzY4MTAsIDM2ODI1LCAzNjg0MCwgMzY4NTUsIAorICAgIDM2ODcwLCAzNjg4NSwgMzY5MDAsIDM2OTE1LCAzNjkzMCwgMzY5NDUsIDM2OTYwLCAzNjk3NSwgMzY5OTAsIDM3MDA1LCAKKyAgICAzNzAyMCwgMzcwMzUsIDM3MDUwLCAzNzA2NSwgMzcwODAsIDM3MDk1LCAzNzExMCwgMzcxMjUsIDM3MTQwLCAzNzE1NSwgCisgICAgMzcxNzAsIDM3MTg1LCAzNzIwMCwgMzcyMTUsIDM3MjMwLCAzNzI0NSwgMzcyNjAsIDM3Mjc1LCAzNzI5MCwgMzczMDUsIAorICAgIDM3MzIwLCAzNzMzNSwgMzczNTAsIDM3MzY1LCAzNzM4MCwgMzczOTUsIDM3NDEwLCAzNzQyNSwgMzc0NDAsIDM3NDU1LCAKKyAgICAzNzQ3MCwgMzc0ODUsIDM3NTAwLCAzNzUxNSwgMzc1MzAsIDM3NTQ1LCAzNzU2MCwgMzc1NzUsIDM3NTkwLCAzNzYwNSwgCisgICAgMzc2MjAsIDM3NjM1LCAzNzY1MCwgMzc2NjUsIDM3NjgwLCAzNzY5NSwgMzc3MTAsIDM3NzI1LCAzNzc0MCwgMzc3NTUsIAorICAgIDM3NzcwLCAzNzc4NSwgMzc4MDAsIDM3ODE1LCAzNzgzMCwgMzc4NDUsIDM3ODYwLCAzNzg3NSwgMzc4OTAsIDM3OTA1LCAKKyAgICAzNzkyMCwgMzc5MzUsIDM3OTUwLCAzNzk2NSwgMzc5ODAsIDM3OTk1LCAzODAxMCwgMzgwMjUsIDM4MDQwLCAzODA1NSwgCisgICAgMzgwNzAsIDM4MDg1LCAzODEwMCwgMzgxMTUsIDM4MTMwLCAzODE0NSwgMzgxNjAsIDM4MTc1LCAzODE5MCwgMzgyMDUsIAorICAgIDM4MjIwLCAzODIzNSwgMzgyNTAsIDM4MjY1LCAzODI4MCwgMzgyOTUsIDM4MzEwLCAzODMyNSwgMzgzNDAsIDM4MzU1LCAKKyAgICAzODM3MCwgMzgzODUsIDM4NDAwLCAzODQxNSwgMzg0MzAsIDM4NDQ1LCAzODQ2MCwgMzg0NzUsIDM4NDkwLCAzODUwNSwgCisgICAgMzg1MjAsIDM4NTM1LCAzODU1MCwgMzg1NjUsIDM4NTgwLCAzODU5NSwgMzg2MTAsIDM4NjI1LCAzODY0MCwgMzg2NTUsIAorICAgIDM4NjcwLCAzODY4NSwgMzg3MDAsIDM4NzE1LCAzODczMCwgMzg3NDUsIDM4NzYwLCAzODc3NSwgMzg3OTAsIDM4ODA1LCAKKyAgICAzODgyMCwgMzg4MzUsIDM4ODUwLCAzODg2NSwgMzg4ODAsIDM4ODk1LCAzODkxMCwgMzg5MjUsIDM4OTQwLCAzODk1NSwgCisgICAgMzg5NzAsIDM4OTg1LCAzOTAwMCwgMzkwMTUsIDM5MDMwLCAzOTA0NSwgMzkwNjAsIDM5MDc1LCAzOTA5MCwgMzkxMDUsIAorICAgIDM5MTIwLCAzOTEzNSwgMzkxNTAsIDM5MTY1LCAzOTE4MCwgMzkxOTUsIDM5MjEwLCAzOTIyNSwgMzkyNDAsIDM5MjU1LCAKKyAgICAzOTI3MCwgMzkyODUsIDM5MzAwLCAzOTMxNSwgMzkzMzAsIDM5MzQ1LCAzOTM2MCwgMzkzNzUsIDM5MzkwLCAzOTQwNSwgCisgICAgMzk0MjAsIDM5NDM1LCAzOTQ1MCwgMzk0NjUsIDM5NDgwLCAzOTQ5NSwgMzk1MTAsIDM5NTI1LCAzOTU0MCwgMzk1NTUsIAorICAgIDM5NTcwLCAzOTU4NSwgMzk2MDAsIDM5NjE1LCAzOTYzMCwgMzk2NDUsIDM5NjYwLCAzOTY3NSwgMzk2OTAsIDM5NzA1LCAKKyAgICAzOTcyMCwgMzk3MzUsIDM5NzUwLCAzOTc2NSwgMzk3ODAsIDM5Nzk1LCAzOTgxMCwgMzk4MjUsIDM5ODQwLCAzOTg1NSwgCisgICAgMzk4NzAsIDM5ODg1LCAzOTkwMCwgMzk5MTUsIDM5OTMwLCAzOTk0NSwgMzk5NjAsIDM5OTc1LCAzOTk5MCwgNDAwMDUsIAorICAgIDQwMDIwLCA0MDAzNSwgNDAwNTAsIDQwMDY1LCA0MDA4MCwgNDAwOTUsIDQwMTEwLCA0MDEyNSwgNDAxNDAsIDQwMTU1LCAKKyAgICA0MDE3MCwgNDAxODUsIDQwMjAwLCA0MDIxNSwgNDAyMzAsIDQwMjQ1LCA0MDI2MCwgNDAyNzUsIDQwMjkwLCA0MDMwNSwgCisgICAgNDAzMjAsIDQwMzM1LCA0MDM1MCwgNDAzNjUsIDQwMzgwLCA0MDM5NSwgNDA0MTAsIDQwNDI1LCA0MDQ0MCwgNDA0NTUsIAorICAgIDQwNDcwLCA0MDQ4NSwgNDA1MDAsIDQwNTE1LCA0MDUzMCwgNDA1NDUsIDQwNTYwLCA0MDU3NSwgNDA1OTAsIDQwNjA1LCAKKyAgICA0MDYyMCwgNDA2MzUsIDQwNjUwLCA0MDY2NSwgNDA2ODAsIDQwNjk1LCA0MDcxMCwgNDA3MjUsIDQwNzQwLCA0MDc1NSwgCisgICAgNDA3NzAsIDQwNzg1LCA0MDgwMCwgNDA4MTUsIDQwODMwLCA0MDg0NSwgNDA4NjAsIDQwODc1LCA0MDg5MCwgNDA5MDUsIAorICAgIDQwOTIwLCA0MDkzNSwgNDA5NTAsIDQwOTY1LCA0MDk4MCwgNDA5OTUsIDQxMDEwLCA0MTAyNSwgNDEwNDAsIDQxMDU1LCAKKyAgICA0MTA3MCwgNDEwODUsIDQxMTAwLCA0MTExNSwgNDExMzAsIDQxMTQ1LCA0MTE2MCwgNDExNzUsIDQxMTkwLCA0MTIwNSwgCisgICAgNDEyMjAsIDQxMjM1LCA0MTI1MCwgNDEyNjUsIDQxMjgwLCA0MTI5NSwgNDEzMTAsIDQxMzI1LCA0MTM0MCwgNDEzNTUsIAorICAgIDQxMzcwLCA0MTM4NSwgNDE0MDAsIDQxNDE1LCA0MTQzMCwgNDE0NDUsIDQxNDYwLCA0MTQ3NSwgNDE0OTAsIDQxNTA1LCAKKyAgICA0MTUyMCwgNDE1MzUsIDQxNTUwLCA0MTU2NSwgNDE1ODAsIDQxNTk1LCA0MTYxMCwgNDE2MjUsIDQxNjQwLCA0MTY1NSwgCisgICAgNDE2NzAsIDQxNjg1LCA0MTcwMCwgNDE3MTUsIDQxNzMwLCA0MTc0NSwgNDE3NjEsIDQxNzc3LCA0MTc5MywgNDE4MDksIAorICAgIDQxODI1LCA0MTg0MSwgNDE4NTcsIDQxODczLCA0MTg4OSwgNDE5MDUsIDQxOTIxLCA0MTkzNywgNDE5NTMsIDQxOTY5LCAKKyAgICA0MTk4NSwgNDIwMDEsIDQyMDE3LCA0MjAzMywgNDIwNDksIDQyMDY1LCA0MjA4MSwgNDIwOTcsIDQyMTEzLCA0MjEyOSwgCisgICAgNDIxNDUsIDQyMTYxLCA0MjE3NywgNDIxOTMsIDQyMjA5LCA0MjIyNSwgNDIyNDEsIDQyMjU3LCA0MjI3MywgNDIyODksIAorICAgIDQyMzA1LCA0MjMyMSwgNDIzMzcsIDQyMzUzLCA0MjM2OSwgNDIzODUsIDQyNDAxLCA0MjQxNywgNDI0MzMsIDQyNDQ5LCAKKyAgICA0MjQ2NSwgNDI0ODEsIDQyNDk3LCA0MjUxMywgNDI1MjksIDQyNTQ1LCA0MjU2MSwgNDI1NzcsIDQyNTkzLCA0MjYwOSwgCisgICAgNDI2MjUsIDQyNjQxLCA0MjY1NywgNDI2NzMsIDQyNjg5LCA0MjcwNSwgNDI3MjEsIDQyNzM3LCA0Mjc1MywgNDI3NjksIAorICAgIDQyNzg1LCA0MjgwMSwgNDI4MTcsIDQyODMzLCA0Mjg0OSwgNDI4NjUsIDQyODgxLCA0Mjg5NywgNDI5MTMsIDQyOTI5LCAKKyAgICA0Mjk0NSwgNDI5NjEsIDQyOTc3LCA0Mjk5MywgNDMwMDksIDQzMDI1LCA0MzA0MSwgNDMwNTcsIDQzMDczLCA0MzA4OSwgCisgICAgNDMxMDUsIDQzMTIxLCA0MzEzNywgNDMxNTMsIDQzMTY5LCA0MzE4NSwgNDMyMDEsIDQzMjE3LCA0MzIzMywgNDMyNDksIAorICAgIDQzMjY1LCA0MzI4MSwgNDMyOTcsIDQzMzEzLCA0MzMyOSwgNDMzNDUsIDQzMzYxLCA0MzM3NywgNDMzOTMsIDQzNDA5LCAKKyAgICA0MzQyNSwgNDM0NDEsIDQzNDU3LCA0MzQ3MywgNDM0ODksIDQzNTA1LCA0MzUyMSwgNDM1MzcsIDQzNTUzLCA0MzU2OSwgCisgICAgNDM1ODUsIDQzNjAxLCA0MzYxNywgNDM2MzMsIDQzNjQ5LCA0MzY2NSwgNDM2ODEsIDQzNjk3LCA0MzcxMywgNDM3MjksIAorICAgIDQzNzQ1LCA0Mzc2MSwgNDM3NzcsIDQzNzkzLCA0MzgwOSwgNDM4MjUsIDQzODQxLCA0Mzg1NywgNDM4NzMsIDQzODg5LCAKKyAgICA0MzkwNSwgNDM5MjEsIDQzOTM3LCA0Mzk1MywgNDM5NjksIDQzOTg1LCA0NDAwMSwgNDQwMTcsIDQ0MDMzLCA0NDA0OSwgCisgICAgNDQwNjUsIDQ0MDgxLCA0NDA5NywgNDQxMTMsIDQ0MTI5LCA0NDE0NSwgNDQxNjEsIDQ0MTc3LCA0NDE5MywgNDQyMDksIAorICAgIDQ0MjI1LCA0NDI0MSwgNDQyNTcsIDQ0MjczLCA0NDI4OSwgNDQzMDUsIDQ0MzIxLCA0NDMzNywgNDQzNTMsIDQ0MzY5LCAKKyAgICA0NDM4NSwgNDQ0MDEsIDQ0NDE3LCA0NDQzMywgNDQ0NDksIDQ0NDY1LCA0NDQ4MSwgNDQ0OTcsIDQ0NTEzLCA0NDUyOSwgCisgICAgNDQ1NDUsIDQ0NTYxLCA0NDU3NywgNDQ1OTMsIDQ0NjA5LCA0NDYyNSwgNDQ2NDEsIDQ0NjU3LCA0NDY3MywgNDQ2ODksIAorICAgIDQ0NzA1LCA0NDcyMSwgNDQ3MzcsIDQ0NzUzLCA0NDc2OSwgNDQ3ODUsIDQ0ODAxLCA0NDgxNywgNDQ4MzMsIDQ0ODQ5LCAKKyAgICA0NDg2NSwgNDQ4ODEsIDQ0ODk3LCA0NDkxMywgNDQ5MjksIDQ0OTQ1LCA0NDk2MSwgNDQ5NzcsIDQ0OTkzLCA0NTAwOSwgCisgICAgNDUwMjUsIDQ1MDQxLCA0NTA1NywgNDUwNzMsIDQ1MDg5LCA0NTEwNSwgNDUxMjEsIDQ1MTM3LCA0NTE1MywgNDUxNjksIAorICAgIDQ1MTg1LCA0NTIwMSwgNDUyMTcsIDQ1MjMzLCA0NTI0OSwgNDUyNjUsIDQ1MjgxLCA0NTI5NywgNDUzMTMsIDQ1MzI5LCAKKyAgICA0NTM0NSwgNDUzNjEsIDQ1Mzc3LCA0NTM5MywgNDU0MDksIDQ1NDI1LCA0NTQ0MSwgNDU0NTcsIDQ1NDczLCA0NTQ4OSwgCisgICAgNDU1MDUsIDQ1NTIxLCA0NTUzNywgNDU1NTMsIDQ1NTY5LCA0NTU4NSwgNDU2MDEsIDQ1NjE3LCA0NTYzMywgNDU2NDksIAorICAgIDQ1NjY1LCA0NTY4MSwgNDU2OTcsIDQ1NzEzLCA0NTcyOSwgNDU3NDUsIDQ1NzYxLCA0NTc3NywgNDU3OTMsIDQ1ODA5LCAKKyAgICA0NTgyNSwgNDU4NDEsIDQ1ODU3LCA0NTg3MywgNDU4ODksIDQ1OTA1LCA0NTkyMSwgNDU5MzcsIDQ1OTUzLCA0NTk2OSwgCisgICAgNDU5ODUsIDQ2MDAxLCA0NjAxNywgNDYwMzMsIDQ2MDQ5LCA0NjA2NSwgNDYwODEsIDQ2MDk3LCA0NjExMywgNDYxMjksIAorICAgIDQ2MTQ1LCA0NjE2MSwgNDYxNzcsIDQ2MTkzLCA0NjIwOSwgNDYyMjUsIDQ2MjQxLCA0NjI1NywgNDYyNzMsIDQ2Mjg5LCAKKyAgICA0NjMwNSwgNDYzMjEsIDQ2MzM3LCA0NjM1MywgNDYzNjksIDQ2Mzg1LCA0NjQwMSwgNDY0MTcsIDQ2NDMzLCA0NjQ0OSwgCisgICAgNDY0NjUsIDQ2NDgxLCA0NjQ5NywgNDY1MTMsIDQ2NTI5LCA0NjU0NSwgNDY1NjEsIDQ2NTc3LCA0NjU5MywgNDY2MDksIAorICAgIDQ2NjI1LCA0NjY0MSwgNDY2NTcsIDQ2NjczLCA0NjY4OSwgNDY3MDUsIDQ2NzIxLCA0NjczNywgNDY3NTMsIDQ2NzY5LCAKKyAgICA0Njc4NSwgNDY4MDEsIDQ2ODE3LCA0NjgzMywgNDY4NDksIDQ2ODY1LCA0Njg4MSwgNDY4OTcsIDQ2OTEzLCA0NjkyOSwgCisgICAgNDY5NDUsIDQ2OTYxLCA0Njk3NywgNDY5OTMsIDQ3MDA5LCA0NzAyNSwgNDcwNDEsIDQ3MDU3LCA0NzA3MywgNDcwODksIAorICAgIDQ3MTA1LCA0NzEyMSwgNDcxMzcsIDQ3MTUzLCA0NzE2OSwgNDcxODUsIDQ3MjAxLCA0NzIxNywgNDcyMzMsIDQ3MjQ5LCAKKyAgICA0NzI2NSwgNDcyODEsIDQ3Mjk3LCA0NzMxMywgNDczMjksIDQ3MzQ1LCA0NzM2MSwgNDczNzcsIDQ3MzkzLCA0NzQwOSwgCisgICAgNDc0MjUsIDQ3NDQxLCA0NzQ1NywgNDc0NzMsIDQ3NDg5LCA0NzUwNSwgNDc1MjEsIDQ3NTM3LCA0NzU1MywgNDc1NjksIAorICAgIDQ3NTg1LCA0NzYwMSwgNDc2MTcsIDQ3NjMzLCA0NzY0OSwgNDc2NjUsIDQ3NjgxLCA0NzY5NywgNDc3MTMsIDQ3NzI5LCAKKyAgICA0Nzc0NSwgNDc3NjEsIDQ3Nzc3LCA0Nzc5MywgNDc4MDksIDQ3ODI1LCA0Nzg0MSwgNDc4NTcsIDQ3ODczLCA0Nzg4OSwgCisgICAgNDc5MDUsIDQ3OTIxLCA0NzkzNywgNDc5NTMsIDQ3OTY5LCA0Nzk4NSwgNDgwMDEsIDQ4MDE3LCA0ODAzMywgNDgwNDksIAorICAgIDQ4MDY1LCA0ODA4MSwgNDgwOTcsIDQ4MTEzLCA0ODEyOSwgNDgxNDUsIDQ4MTYxLCA0ODE3NywgNDgxOTMsIDQ4MjA5LCAKKyAgICA0ODIyNSwgNDgyNDEsIDQ4MjU3LCA0ODI3MywgNDgyODksIDQ4MzA1LCA0ODMyMSwgNDgzMzcsIDQ4MzUzLCA0ODM2OSwgCisgICAgNDgzODUsIDQ4NDAxLCA0ODQxNywgNDg0MzMsIDQ4NDQ5LCA0ODQ2NSwgNDg0ODEsIDQ4NDk3LCA0ODUxMywgNDg1MjksIAorICAgIDQ4NTQ1LCA0ODU2MSwgNDg1NzcsIDQ4NTkzLCA0ODYwOSwgNDg2MjUsIDQ4NjQxLCA0ODY1NywgNDg2NzMsIDQ4Njg5LCAKKyAgICA0ODcwNSwgNDg3MjEsIDQ4NzM3LCA0ODc1MywgNDg3NjksIDQ4Nzg1LCA0ODgwMSwgNDg4MTcsIDQ4ODMzLCA0ODg0OSwgCisgICAgNDg4NjUsIDQ4ODgxLCA0ODg5NywgNDg5MTMsIDQ4OTI5LCA0ODk0NSwgNDg5NjEsIDQ4OTc3LCA0ODk5MywgNDkwMDksIAorICAgIDQ5MDI1LCA0OTA0MSwgNDkwNTcsIDQ5MDczLCA0OTA4OSwgNDkxMDUsIDQ5MTIxLCA0OTEzNywgNDkxNTMsIDQ5MTY5LCAKKyAgICA0OTE4NSwgNDkyMDEsIDQ5MjE3LCA0OTIzMywgNDkyNDksIDQ5MjY1LCA0OTI4MSwgNDkyOTcsIDQ5MzEzLCA0OTMyOSwgCisgICAgNDkzNDUsIDQ5MzYxLCA0OTM3NywgNDkzOTMsIDQ5NDA5LCA0OTQyNSwgNDk0NDEsIDQ5NDU3LCA0OTQ3MywgNDk0ODksIAorICAgIDQ5NTA1LCA0OTUyMSwgNDk1MzcsIDQ5NTUzLCA0OTU2OSwgNDk1ODUsIDQ5NjAxLCA0OTYxNywgNDk2MzMsIDQ5NjQ5LCAKKyAgICA0OTY2NSwgNDk2ODEsIDQ5Njk3LCA0OTcxMywgNDk3MjksIDQ5NzQ1LCA0OTc2MSwgNDk3NzcsIDQ5NzkzLCA0OTgwOSwgCisgICAgNDk4MjUsIDQ5ODQxLCA0OTg1NywgNDk4NzMsIDQ5ODg5LCA0OTkwNSwgNDk5MjEsIDQ5OTM3LCA0OTk1MywgNDk5NjksIAorICAgIDQ5OTg1LCA1MDAwMSwgNTAwMTcsIDUwMDMzLCA1MDA0OSwgNTAwNjUsIDUwMDgxLCA1MDA5NywgNTAxMTMsIDUwMTI5LCAKKyAgICA1MDE0NSwgNTAxNjEsIDUwMTc3LCA1MDE5MywgNTAyMDksIDUwMjI1LCA1MDI0MSwgNTAyNTcsIDUwMjczLCA1MDI4OSwgCisgICAgNTAzMDUsIDUwMzIxLCA1MDMzNywgNTAzNTMsIDUwMzY5LCA1MDM4NSwgNTA0MDEsIDUwNDE3LCA1MDQzMiwgNTA0NDEsIAorICAgIDUwNDQ3LCA1MDQ1MywgNTA0NjMsIDUwNDcxLCAxMTgyMywgMTM3ODcsIDc2NjEsIDUwNDg0LCAxNTAyLCA1MDQ5MiwgCisgICAgMjI2NjUsIDUyMDcsIDUwNDk4LCA1MDUwMywgNTA1MDgsIDUwNTEzLCA1MDUxOCwgNTA1MjQsIDUwNTI5LCA1MDUzNSwgCisgICAgNTA1NDAsIDUwNTQ2LCA1MDU1MSwgNTA1NTYsIDUwNTYxLCA1MDU2NiwgNTA1NzIsIDUwNTc3LCA1MDU4MiwgNTA1ODcsIAorICAgIDUwNTkyLCA1MDU5NywgNTA2MDIsIDUwNjA3LCA1MDYxMywgNTA2MTgsIDUwNjI0LCA1MDYzMSwgMjQ4OSwgNTA2MzYsIAorICAgIDUwNjQyLCA2NDgwLCA1MDY0NiwgNTA2NTEsIDUwNjU4LCA1MDY2NiwgNDAsIDUwNjcwLCA1MDY3NiwgNTA2ODEsIDUwNjg2LCAKKyAgICA1MDY5MCwgNTA2OTUsIDUwNjk5LCA1MDcwMywgODI1NSwgNTA3MDcsIDUwNzE3LCA1MDczMCwgNTA3NDEsIDUwNzU0LCAKKyAgICA1MDc2MSwgNTA3NjcsIDUwNzcyLCA1MDc3OCwgNTA3ODQsIDUwNzkwLCA1MDc5NSwgNTA4MDAsIDUwODA1LCA1MDgxMCwgCisgICAgNTA4MTQsIDUwODE5LCA1MDgyNCwgNTA4MjksIDUwODM1LCA1MDg0MSwgNTA4NDcsIDUwODUyLCA1MDg1NiwgNTA4NjEsIAorICAgIDUwODY2LCA1MDg3MCwgNTA4NzUsIDUwODgwLCA1MDg4NSwgNTA4ODksIDgyNzEsIDgyODIsIDgyODcsIDE1NDUsIDUwODkzLCAKKyAgICAxNTUwLCA1MDg5OSwgNTA5MDIsIDE1ODEsIDUwOTA4LCAxNTg3LCAxNTkzLCA4MzE3LCA1MDkxMywgNTA5MjEsIDUwOTI4LCAKKyAgICA1MDkzMiwgNTA5MzgsIDUwOTQzLCAyNTYyMCwgNTA5NDgsIDUwOTU1LCA1MDk2MCwgNTA5NjQsIDUwOTY4LCAxNTk4LCAKKyAgICAxMjkzMywgMTI5NDQsIDUwOTc3LCA1MDk4NCwgNTA5ODksIDUwOTkzLCAxMjk1NiwgMTYwMiwgMzAzMTksIDUwOTk2LCAKKyAgICA1MTAwNiwgNTEwMTAsIDE2MDcsIDMxOTIxLCA1MTAxNSwgODQzNywgODQ0MywgNTEwMjEsIDUxMDMzLCA1MTA1MCwgNTEwNjcsIAorICAgIDUxMDg0LCA1MTEwMSwgNTExMTgsIDUxMTM1LCA1MTE1MiwgNTExNjksIDUxMTg2LCA1MTIwMywgNTEyMjAsIDUxMjM3LCAKKyAgICA1MTI1NCwgNTEyNzEsIDUxMjg4LCA1MTMwNSwgNTEzMjIsIDUxMzM5LCA1MTM1NiwgNTEzNzMsIDUxMzkwLCA1MTQwNywgCisgICAgNTE0MjQsIDUxNDQxLCA1MTQ1OCwgNTE0NzUsIDUxNDkyLCA1MTUwOSwgNTE1MjYsIDUxNTQzLCA1MTU2MCwgNTE1NzcsIAorICAgIDUxNTk0LCA1MTYxMSwgNTE2MjgsIDUxNjQ1LCA1MTY2MiwgNTE2NzksIDUxNjk2LCA1MTcxMywgNTE3MzAsIDUxNzQ3LCAKKyAgICA1MTc2NCwgNTE3ODEsIDUxNzk4LCA1MTgxNSwgNTE4MzIsIDUxODQ5LCA1MTg2NiwgNTE4NzcsIDUxODgyLCAxNjEyLCAKKyAgICA1MTg4NiwgNTE4OTIsIDcxNDQsIDE2MTcsIDIyOTEyLCA1MTg5NywgNTE5MDgsIDUxOTE4LCA1MTkyMywgNTE5MzAsIAorICAgIDUxOTM2LCA1MTk0MSwgNTE5NDYsIDUxOTUwLCA4NDU0LCAxNjIyLCA4NDU5LCA1MTk1NCwgNTE5NTksIDUxOTY1LCA1MTk3MCwgCisgICAgNTE5NzUsIDUxOTgwLCA1MTk4NSwgNTE5OTAsIDUxOTk1LCA1MjAwMCwgNTIwMDYsIDUyMDEyLCA1MjAxOCwgNTIwMjMsIAorICAgIDUyMDI3LCA1MjAzMiwgNTIwMzcsIDUyMDQxLCA1MjA0NiwgNTIwNTEsIDUyMDU2LCA1MjA2MCwgNTIwNjUsIDUyMDcxLCAKKyAgICA1MjA3NiwgNTIwODEsIDUyMDg1LCA1MjA5MCwgNTIwOTUsIDUyMTAxLCA1MjEwNiwgNTIxMTEsIDUyMTE3LCA1MjEyMywgCisgICAgNTIxMjgsIDUyMTMyLCA1MjEzNywgNTIxNDIsIDUyMTQ3LCA1MjE1MSwgNTIxNTYsIDUyMTYxLCA1MjE2NiwgNTIxNzIsIAorICAgIDUyMTc4LCA1MjE4MywgNTIxODcsIDUyMTkxLCA1MjE5NiwgNTIyMDEsIDUyMjA2LCAyNDEyNCwgNTIyMTAsIDUyMjE1LCAKKyAgICA1MjIyMCwgNTIyMjYsIDUyMjMxLCA1MjIzNiwgNTIyNDAsIDUyMjQ1LCA1MjI1MCwgNTIyNTYsIDUyMjYxLCA1MjI2NiwgCisgICAgNTIyNzIsIDUyMjc4LCA1MjI4MywgNTIyODcsIDUyMjkyLCA1MjI5NywgNTIzMDEsIDUyMzA2LCA1MjMxMSwgNTIzMTYsIAorICAgIDUyMzIyLCA1MjMyOCwgNTIzMzMsIDUyMzM3LCA1MjM0MiwgNTIzNDcsIDUyMzUxLCA1MjM1NiwgNTIzNjEsIDUyMzY2LCAKKyAgICA1MjM3MCwgNTIzNzMsIDI2MDc3LCA1MjM3OCwgNTIzODYsIDEzMjE4LCAxMzIzNiwgODU1NywgNTIzOTIsIDg1NjIsIAorICAgIDUyNDA3LCA1MjQxMiwgNTI0MjMsIDUyNDM1LCA1MjQ0NywgNTI0NTksIDI1ODgsIDUyNDcxLCA1MjQ3NiwgNTI0ODAsIAorICAgIDUyNDg2LCA1MjQ5MiwgMTYzNCwgOTQwLCA1MjQ5NywgNTI1MDIsIDMxOTYwLCA1MjUwNiwgNTI1MTAsIDUyNTE1LCA1MjUxOSwgCisgICAgMTMzMDEsIDUyNTI0LCA1MjUyNywgNTI1MzUsIDE2MzgsIDg1ODcsIDg1OTMsIDE2NDMsIDUyNTQzLCA1MjU1MCwgNTI1NTUsIAorICAgIDUyNTY0LCA1MjU3NCwgNTI1ODEsIDE2NDgsIDUyNTg4LCA1MjU5MywgMTMzNzYsIDUyNTk3LCA1MjYwMiwgNTI2MDksIAorICAgIDUyNjE1LCA1MjYxOSwgNTI2MjksIDEzMzk4LCA3MDYzLCA3MDcwLCAxNjUzLCA1MjYzNiwgNTI2NDIsIDUyNjUwLCA1MjY1NywgCisgICAgNTI2NjMsIDUyNjY5LCA1MjY3NCwgNTI2ODUsIDUyNjk0LCAzNDk4LCAyNTQ5NSwgMjU1MDQsIDEzNDM4LCAxNjU4LCAxNjYyLCAKKyAgICA1MjcwMiwgNTI3MTMsIDUyNzE4LCAxNjY1LCA1MjcyNiwgNTI3MzEsIDUyNzQzLCA1Mjc0OSwgNTI3NTQsIDE2NzAsIAorICAgIDUyNzU5LCA1Mjc2NCwgNTI3NzIsIDUyNzgwLCA1Mjc4NywgNTI3OTYsIDUyODA0LCA1MjgxMywgMTY3NSwgMTY4MCwgCisgICAgNTI4MTcsIDUyODI0LCAxMzU0NywgNTI4MzIsIDUyODM4LCA1Mjg0NiwgNTI4NTEsIDg3MjcsIDUyODYwLCA1Mjg2NiwgCisgICAgNTI4NzIsIDUyODc3LCA1Mjg4NSwgODczNiwgODc0MSwgNTI4OTMsIDUyODk5LCAzNTYzLCAzMjAzOCwgNTI5MDQsIDUyOTEwLCAKKyAgICA1MjkxNSwgNTI5MjMsIDUyOTMwLCA1MjkzNSwgNTI5MzksIDUyOTQ1LCAxNjkxLCA1Mjk1MCwgNTI5NTMsIDk3NywgNTI5NTksIAorICAgIDUyOTY0LCA1Mjk2OSwgNTI5NzUsIDUyOTgwLCA1Mjk4NSwgNTI5OTAsIDUyOTk1LCA1MzAwMCwgNTMwMDUsIDE3MDAsIDksIAorICAgIDUzMDExLCA1MzAxNSwgNTMwMjAsIDUzMDI0LCA1MzAyOCwgNTMwMzIsIDI2MzE1LCA1MzAzNywgNTMwNDIsIDUzMDQ3LCAKKyAgICA1MzA1MSwgNTMwNTQsIDUzMDU4LCA1MzA2MiwgNTMwNjcsIDUzMDcxLCA1MzA3NiwgNTMwODAsIDI4MzIyLCAyODMyNywgCisgICAgMjgzMzIsIDUzMDgzLCA1MzA5MCwgNTMwOTYsIDMxODA0LCA1MzEwNiwgMjgzMzgsIDI4MzQzLCAyNjMyNSwgMjYzMzEsIAorICAgIDI4MzU0LCAyNjMzNywgNTMxMTEsIDUzMTE2LCA1MzEyMCwgNTMxMjQsIDUzMTI3LCA1MzEzMSwgNTMxMzQsIDUzMTM5LCAKKyAgICA1MzE0MywgNTMxNDcsIDUzMTUwLCA1MzE2MiwgMjc1MTcsIDUzMTY5LCAxMjM5NiwgNzYwLCA1MzE3MiwgNTMxNzYsIAorICAgIDUzMTgxLCA1MzE4NSwgMTA3NzksIDUzMTg4LCA1MzE5NSwgNTMyMDgsIDUzMjE3LCA1MzIyMiwgNTMyMzIsIDUzMjQ1LCAKKyAgICA1MzI1NywgNTMyNjQsIDUzMjY5LCA1MzI3OCwgNTMyOTEsIDI5MjgzLCA1MzMwOSwgNTMzMTQsIDUzMzIxLCA1MzMyNywgCisgICAgNTMzMzIsIDUzMzQwLCAyMjk3OSwgNTg1LCA1MzM0NiwgNTMzNTIsIDUzMzU4LCA1MzM2MywgMjYzNDIsIDQxNzYsIDI2MzU2LCAKKyAgICA1MzM2NywgNTMzNzcsIDUzMzgyLCA1MzM5MiwgNTM0MDcsIDUzNDEzLCA1MzQxOSwgMjYzNjEsIDI1NjUyLCA1MzQyNCwgCisgICAgNTM0MjksIDUzNDM0LCA1MzQzOCwgNTM0NDMsIDUzNDQ4LCA1MzQ1MiwgNDIxNywgMjYzODIsIDUzNDU2LCA1MzQ2MiwgMzM3LCAKKyAgICA1MzQ3MiwgNTM0NzksIDUzNDg4LCA1MzQ5NCwgNTM1MDIsIDUzNTA2LCA1MzUxMCwgNTM1MTQsIDUzNTE4LCA1MzUyMywgCisgICAgNTM1MjcsIDUzNTMzLCA1MzU0MSwgNTM1NDYsIDUzNTUwLCA1MzU1NSwgNTM1NTksIDUzNTYzLCA1MzU2OSwgNTM1NzUsIAorICAgIDUzNTgwLCA1MzU4NCwgMjYzOTgsIDUzNTg5LCAyNjQwNCwgMjY0MTAsIDUzNTk0LCA1MzYwMCwgNTM2MDUsIDUzNjA5LCAKKyAgICAyNTY2OSwgMTMxNjcsIDUzNjEyLCA1MzYxNiwgNTM2MjEsIDUzNjI4LCA1MzYzNCwgNTM2MzgsIDUzNjQzLCA1MzY0OSwgCisgICAgNTM2NTMsIDUzNjU3LCA1MzY2MiwgNTM2NjcsIDUzNjcxLCA1MzY3NCwgNTM2ODAsIDUzNjg1LCA1MzY5MiwgNTM2OTksIAorICAgIDUzNzA1LCA1MzcxMCwgNTM3MTUsIDUzNzE5LCA1MzcyNCwgNTM3MzAsIDUzNzM1LCA1Mzc0MSwgNTM3NDYsIDUzNzUxLCAKKyAgICA1Mzc1NiwgNTM3NjIsIDUzNzY3LCA1Mzc3MiwgNTM3NzgsIDUzNzg0LCA1Mzc5MCwgMjY0MTUsIDUzNzk1LCA1MzgwMCwgCisgICAgNTM4MDUsIDI2NDI2LCA1MzgxMCwgNTM4MTUsIDUzODIwLCA1MzgyNiwgNTM4MzIsIDI2NDMxLCA1MzgzNywgNTM4NDIsIAorICAgIDUzODQ3LCAyNjQ0MiwgMjY0NDgsIDUzODUyLCA1Mzg1NywgNTM4NjIsIDUzODY3LCAyMzEyOSwgMjY0NTMsIDI2NDU3LCAKKyAgICA1Mzg3MiwgNTM4NDMsIDUzODc2LCA1Mzg4MiwgNTM4OTAsIDUzODk3LCA1MzkwMywgNTM5MTMsIDUzOTE5LCA1MzkyNiwgCisgICAgODIxNCwgMjY0NjIsIDUzOTMyLCA1Mzk0NSwgNTM5NTQsIDUzOTYwLCA1Mzk2OSwgNTM5NzUsIDE5NTI0LCA1Mzk4MiwgCisgICAgNTM5ODksIDI2NDQzLCA1Mzk5OSwgNTQwMDYsIDU0MDExLCA1NDAxNSwgNTQwMTksIDU0MDI0LCA0MjUxLCA1NDAyOCwgCisgICAgNTQwMzMsIDU0MDM4LCAyODQxNiwgMjg0MjEsIDU0MDQyLCAyODQyNywgMjg0MzIsIDU0MDQ3LCAyODQzNywgMjg0NDMsIAorICAgIDU0MDUyLCAyODQ0OCwgNTQwNjMsIDU0MDY2LCA1NDA3OCwgNTQwODYsIDI2NDg0LCA1NDA5MCwgNTQwOTksIDU0MTA5LCAKKyAgICA1NDExOCwgMjY0ODksIDU0MTIzLCA1NDEzMCwgNTQxMzksIDU0MTQ1LCA1NDE1MywgMjcwNDUsIDQwNjksIDU0MTU4LCAKKyAgICAyNjQ5OCwgNTQxNjQsIDU0MTY3LCA1NDE3MywgNTQxODAsIDU0MTg1LCA1NDE5MCwgMTk0NTYsIDU0MTk0LCA1NDIwMCwgCisgICAgNTQyMDYsIDU0MjExLCA1NDIxNywgNTQyMjMsIDU0MjI4LCA3NjUsIDI5MDkyLCAyOTgzOSwgMjk4NDUsIDU0MjMyLCAKKyAgICA1NDIzNiwgNTQyNDAsIDU0MjQzLCA1NDI1NiwgNTQyNjIsIDU0MjY2LCA1NDI2OSwgNTQyNzQsIDI3NzA4LCA1NDI3OCwgCisgICAgMjU2NzQsIDE3NTg1LCA1NDI4NCwgNDE5NywgNDIwNSwgNjk0OCwgNTQyODcsIDU0MjkyLCA1NDI5NywgNTQzMDIsIDU0MzA3LCAKKyAgICA1NDMxMiwgNTQzMTcsIDU0MzIyLCA1NDMyNywgNTQzMzIsIDU0MzM4LCA1NDM0MywgNTQzNDgsIDU0MzU0LCA1NDM1OSwgCisgICAgNTQzNjQsIDU0MzY5LCA1NDM3NCwgNTQzNzksIDU0Mzg0LCA1NDM5MCwgNTQzOTUsIDU0NDAxLCA1NDQwNiwgNTQ0MTEsIAorICAgIDU0NDE2LCA1NDQyMSwgNTQ0MjYsIDU0NDMxLCA1NDQzNiwgNTQ0NDEsIDU0NDQ2LCA1NDQ1MSwgNTQ0NTcsIDU0NDYyLCAKKyAgICA1NDQ2NywgNTQ0NzIsIDU0NDc3LCA1NDQ4MiwgNTQ0ODcsIDU0NDkzLCA1NDQ5OCwgNTQ1MDMsIDU0NTA4LCA1NDUxMywgCisgICAgNTQ1MTgsIDU0NTIzLCA1NDUyOCwgNTQ1MzMsIDU0NTM4LCA1NDU0NCwgNTQ1NDksIDU0NTU0LCA1NDU1OSwgNTQ1NjQsIAorICAgIDU0NTcwLCA1NDU3NiwgNTQ1ODEsIDU0NTg3LCA1NDU5MiwgNTQ1OTcsIDU0NjAyLCA1NDYwNywgNTQ2MTIsIDE0OTUsIDIzNSwgCisgICAgNTQ2MTcsIDU0NjIxLCA1NDYyNSwgNTQ2MjksIDU0NjMzLCA1NDYzNiwgNTQ2NDAsIDU0NjQ1LCA1NDY0OSwgNTQ2NTQsIAorICAgIDU0NjU4LCA1NDY2MiwgNTQ2NjYsIDU0NjcxLCA1NDY3NSwgNTQ2ODAsIDU0Njg0LCA1NDY4OCwgNTQ2OTUsIDExOTk5LCAKKyAgICA1NDcwNCwgNTQ3MTMsIDU0NzE3LCAyMDcwMSwgNTQ3MjEsIDU0NzI3LCA1NDczNSwgNTQ3NDEsIDU0NzUzLCA1NDc1NywgCisgICAgNTQ3NjIsIDU0NzY4LCA1NDc3OCwgNTQ3ODgsIDU0Nzk0LCA1NDc5OCwgNTQ4MDMsIDU0ODA5LCA1NDgxOCwgNTQ4MjcsIAorICAgIDU0ODM1LCAxMjI3NCwgNTQ4MzksIDU0ODQ4LCA1NDg1NiwgNTQ4NjcsIDU0ODc4LCA1NDg4NywgNTQ4OTEsIDU0OTAwLCAKKyAgICA1NDkxMCwgNTQ5MTYsIDU0OTIxLCA1NDkyNywgNTQ5MzIsIDk4LCAyNTU3OSwgNTQ5NDMsIDIxNzM1LCA1NDk0OSwgNTQ5NTYsIAorICAgIDU0OTYyLCA1NDk2NiwgNTQ5NzYsIDU0OTg0LCA1NDk4OSwgNTQ5OTMsIDU1MDAxLCA1NTAwNSwgNTUwMTEsIDU1MDIxLCAKKyAgICAxMTMyLCA1NTAyNCwgNTUwMjcsIDU1MDMxLCA1NTAzNywgNTUwNDQsIDU1MDUwLCA1NTA1OSwgNTUwNjgsIDU1MDc0LCAKKyAgICA1NTA4MCwgNTUwODUsIDU1MDkyLCA1NTA5OSwgNTUxMTIsIDU1MTIxLCA1NTEzMCwgNTUxMzUsIDU1MTM5LCA1NTE0NiwgCisgICAgNTUxNTMsIDU1MTYwLCA1NTE2NywgNTUxNzQsIDU1MTc5LCA1NTE4MywgNTUxODcsIDU1MTkwLCA1NTIwMCwgNTUyMDQsIAorICAgIDU1MjEzLCA1NTIxNywgNTUyMjIsIDU1MjI2LCA1NTIzNSwgNTUyNDMsIDU1MjUxLCA1NTI1NiwgNTUyNjAsIDU1MjY1LCAKKyAgICA1NTI3MCwgNTUyNzQsIDU1MjgwLCA1NTI5MiwgNTUzMDAsIDU1MzEwLCA1NTMxNywgNTUzMjMsIDU1MzI4LCA1NTMzMiwgCisgICAgNTUzMzYsIDU1MzQwLCA1NTM0OSwgNTUzNTgsIDU1MzY3LCA1NTM3MywgNTUzNzksIDU1Mzg1LCA1NTM5MCwgNTUzOTcsIAorICAgIDU1NDAzLCA1NTQxMSwgNTU0MTgsIDk3NzksIDU1NDI0LCA1NTQzMCwgNTU0MzQsIDExMjI1LCA1NTQzOCwgNTU0NDcsIAorICAgIDU1NDUzLCA1NTQ2MSwgNTU0NjgsIDU1NDcyLCA1NTQ3NiwgNTU0ODIsIDU1NDkwLCA1NTQ5NywgNTU1MDMsIDU1NTE0LCAKKyAgICA1NTUxOCwgNTU1MjIsIDU1NTI2LCA1NTUyOSwgNTU1MzUsIDU1NTQwLCA1NTU0NCwgNTU1NDgsIDU1NTU3LCA1NTU2NSwgCisgICAgNTU1NzIsIDE5ODkwLCAzMTU3MiwgNTU1NzgsIDU1NTg2LCA1NTU5MCwgNTU1OTcsIDU1NjA2LCA1NTYxNCwgNTU2MjAsIAorICAgIDU1NjI1LCA1NTYyOSwgNTU2MzQsIDU1NjM4LCA1NTY0MywgNTU2NTIsIDU1NjU2LCA1NTY2MywgNTU2NzAsIDU1Njc4LCAKKyAgICA1NTY4NCwgNTU2OTUsIDU1NzAxLCA1NTcxMCwgNTU3MTcsIDU1NzI0LCA1NTczMSwgNTU3MzgsIDU1NzQ1LCAzNDI4NSwgCisgICAgNTU3NTIsIDU1NzU5LCA1NTc2NCwgNTU3NzAsIDM3NDA3LCA1NTc3NCwgNTU3NzksIDU1Nzg0LCA1NTc5MCwgNTU3OTYsIAorICAgIDU1ODAyLCA1NTgwNywgNTU4MTIsIDU1ODE3LCA1NTgyMiwgNTU4MjgsIDU1ODMzLCA1NTgzOSwgNTU4NDQsIDU1ODUwLCAKKyAgICA1NTg1NSwgNTU4NjAsIDU1ODY1LCA1NTg3MCwgNTU4NzUsIDU1ODgwLCA1NTg4NSwgNTU4OTEsIDU1ODk2LCA1NTkwMiwgCisgICAgNTU5MDcsIDU1OTEyLCA1NTkxNywgNTU5MjIsIDU1OTI3LCA1NTkzMiwgNTU5MzgsIDU1OTQzLCA1NTk0OCwgNTU5NTMsIAorICAgIDU1OTU4LCA1NTk2MywgNTU5NjgsIDU1OTczLCA1NTk3OCwgNTU5ODMsIDU1OTg4LCA1NTk5NCwgNTU5OTksIDU2MDA0LCAKKyAgICA1NjAwOSwgNTYwMTQsIDU2MDE5LCA1NjAyNCwgNTYwMjksIDU2MDM0LCA1NjA0MCwgNTYwNDUsIDU2MDUwLCA1NjA1NSwgCisgICAgNTYwNjAsIDU2MDY1LCA1NjA3MCwgNTYwNzUsIDU2MDgwLCA1NjA4NSwgNTYwOTAsIDU2MDk1LCA1NjEwMCwgNTYxMDYsIAorICAgIDE4MTYsIDIxNiwgMzA0MDIsIDU2MTExLCA1NjExNCwgNTYxMTksIDU2MTIzLCA1NTI0NywgNTYxMjYsIDU2MTM2LCA1NjE0MywgCisgICAgNTYxNTIsIDU2MTYyLCA1NjE3MiwgNTYxODAsIDU2MTg4LCA1NjE5MiwgNTYxOTUsIDU2MjAyLCA1NjIwOCwgNTYyMTksIAorICAgIDU2MjMxLCA1NjI0MiwgNTYyNDksIDEzMDUsIDE5MzYxLCA1NjI1OSwgMjUxOCwgNTYyNjMsIDEwODcsIDEzNzQzLCAzMDkxOCwgCisgICAgNTYyNzEsIDU2Mjg0LCA1NjI4OCwgNTYyOTMsIDU2Mjk4LCA1NjMwMywgNTYzMDksIDU2MzE1LCA1NjMyMCwgNjQ4OSwgCisgICAgNTYzMjUsIDU2MzMzLCA4NTg4LCA1NjMzOCwgNTYzNDQsIDE3MDMsIDg2MDAsIDY2OSwgNTYzNTMsIDU2MzYyLCA1NjM3MiwgCisgICAgMjIzNTcsIDU2MzgxLCA1NjM4NywgMTMzNTMsIDU2MzkzLCA1NjM5NywgMzY3OCwgODg5MCwgNTY0MDMsIDUyNzA4LCAKKyAgICA1NjQxMCwgNjkxOSwgMTcxLCAxMTE1OSwgNTY0MTYsIDU2NDI4LCA1NjQzMiwgNTY0MzgsIDIyOTMyLCA1NjQ0MiwgODg3OCwgCisgICAgMjYyMywgNCwgNTY0NDcsIDU2NDU3LCA1NjQ2MywgNTY0NzQsIDU2NDgxLCA1NjQ4NywgNTY0OTMsIDU2NTAxLCA1NjUwOCwgCisgICAgNTY1MTgsIDU2NTI4LCA1NjUzOCwgMTMxNywgNTY1NDcsIDU2NTUzLCAyNjQ2LCAyNjUyLCA2NDg2LCAyMjAwLCA1NjU1NywgCisgICAgNTY1NjEsIDU2NTcwLCA1NjU4MSwgNTY1ODksIDU2NTk3LCA1NjYwMywgNTY2MTQsIDU2NjI1LCA1NjYzMywgNTY2MzksIAorICAgIDg5MzEsIDU2NjQ0LCA1NjY1MiwgNTY2NTYsIDU2NjYwLCAyMzI3MywgNTY2NzIsIDU2NjgyLCA1NjY4OCwgNTY2OTQsIAorICAgIDU2NzA0LCA1NjcwNywgNTY3MTgsIDU2NzI4LCA1NjczNywgNTY3NDEsIDU2NzQ4LCAxMDg5LCAyNTExLCA1Njc1OCwgCisgICAgNTY3NjMsIDU2NzcxLCA1Njc3OSwgNTY3OTAsIDU2ODA0LCAxMTExMSwgMzc0LCA1NjgxNCwgNTY4MTgsIDU2ODI3LCAKKyAgICA1NjgzNSwgNTY4NDEsIDU2ODQ4LCA1Njg1NCwgNTY4NjEsIDU2ODcxLCA1Njg3OSwgMzU3MCwgMTg0LCA1Njg4NywgNTY4OTgsIAorICAgIDU2OTAyLCA1NjkxNCwgMjMxMjAsIDE0OCwgNTY5MjAsIDU2OTI1LCA1NjkyOSwgNTY5MzYsIDU2OTQyLCA1Njk1MCwgCisgICAgNTY5NTcsIDY3NDAsIDU2OTY0LCA1Njk3MywgMzYyNSwgNTY5ODEsIDEzMzk5LCA1Njk4NSwgMjY4MSwgNDE5LCA1Njk5MCwgCisgICAgNTcwMDMsIDU3MDA4LCAxODE1LCA2MDIsIDU3MDEyLCAzNjMxLCA1NzAyMCwgNTcwMjYsIDkxNywgNTcwMzYsIDU3MDQ1LCAKKyAgICA1NzA1MCwgMTE4NDcsIDU3MDU0LCAzNzYxNywgNTcwNTcsIDM1ODAsIDE5NTA3LCA1NzA2NSwgNTcwNzIsIDE5NTQ5LCAKKyAgICA1NzA3NiwgNTcwODMsIDU3MDg5LCA1NzA5NCwgMTE4NjEsIDU3MDk5LCA1NzExMSwgNTcxMTcsIDU3MTI1LCAyNjkzLCAKKyAgICAxNzM1LCA1NzEzMywgNTcxMzUsIDU3MTQwLCA1NzE0NSwgNTcxNTAsIDU3MTU2LCA1NzE2MSwgNTcxNjYsIDU3MTcxLCAKKyAgICA1NzE3NiwgNTcxODEsIDU3MTg2LCA1NzE5MiwgNTcxOTcsIDU3MjAyLCA1NzIwNywgNTcyMTIsIDU3MjE3LCA1NzIyMiwgCisgICAgNTcyMjcsIDU3MjMyLCA1NzIzOCwgNTcyNDMsIDU3MjQ4LCA1NzI1MywgNTcyNTksIDU3MjY0LCA1NzI3MCwgNTcyNzUsIAorICAgIDU3MjgwLCA1NzI4NSwgNTcyOTAsIDU3Mjk1LCA1NzMwMCwgNTczMDUsIDU3MzExLCA1NzMxNiwgNTczMjIsIDU3MzI3LCAKKyAgICA1NzMzMiwgNTczMzcsIDU3MzQyLCA1NzM0NywgNTczNTIsIDU3MzU3LCA1NzM2MiwgNTczNjcsIDU3MzcyLCA1NzM3NiwgCisgICAgNTczODAsIDU3Mzg1LCA1NzM4OSwgNTczOTQsIDU3Mzk5LCA1NzQwNSwgNTc0MTAsIDU3NDE0LCA1NzQxOCwgNTc0MjEsIAorICAgIDU3NDIzLCA1NzQyNywgNTc0MzAsIDU3NDM1LCA1NzQzOSwgNTc0NDMsIDU3NDQ3LCA1NzQ1MSwgNTc0NjAsIDI2NjUyLCAKKyAgICA1NzQ2MywgMjY2NTcsIDI2NjYyLCA1NzQ3MCwgNTc0NzksIDI2NjY4LCA1NzQ4NCwgMjY2NzMsIDU3NDkzLCA1NzQ5OCwgCisgICAgOTAxOCwgNTc1MDIsIDU3NTA3LCA1NzUxMiwgNTc1MTYsIDU3NTIwLCA1NzUyNCwgNTc1MjgsIDU3NTMxLCA1NzUzNSwgCisgICAgNjE3MCwgNTc1NDEsIDU3NTQ2LCA1NzU1MCwgMzQ2NywgNTc1NTMsIDU3NTU1LCA1NzU1OSwgNTc1NjIsIDU3NTY3LCAKKyAgICA1NzU3MSwgNTc1NzcsIDU3NTkwLCA1NzU5NiwgNTc2MDEsIDU3NjA1LCA1NzYxMywgNTc2MjAsIDU3NjI4LCA1NzYzNywgCisgICAgNTc2NDUsIDI2Njc4LCA1NzY1MiwgNTc2NjIsIDU3NjcxLCA1NzY4NCwgNTc2ODksIDU3Njk0LCA1NzcwMCwgNTc3MDcsIAorICAgIDU3NzE4LCA1NzczMCwgNTc3MzcsIDU3NzQ2LCA1Nzc1NSwgNTc3NjQsIDU3NzcxLCA1Nzc3NywgNTc3ODQsIDU3NzkyLCAKKyAgICA1Nzc5OSwgNTc4MDcsIDU3ODE2LCA1NzgyNCwgNTc4MzEsIDU3ODM5LCA1Nzg0OCwgNTc4NTYsIDU3ODY1LCA1Nzg3NSwgCisgICAgNTc4ODQsIDU3ODkyLCA1Nzg5OSwgNTc5MDcsIDU3OTE2LCA1NzkyNCwgNTc5MzMsIDU3OTQzLCA1Nzk1MiwgNTc5NjAsIAorICAgIDU3OTY5LCA1Nzk3OSwgNTc5ODgsIDU3OTk4LCA1ODAwOSwgNTgwMTksIDU4MDI4LCA1ODAzNiwgNTgwNDMsIDU4MDUxLCAKKyAgICA1ODA2MCwgNTgwNjgsIDU4MDc3LCA1ODA4NywgNTgwOTYsIDU4MTA0LCA1ODExMywgNTgxMjMsIDU4MTMyLCA1ODE0MiwgCisgICAgNTgxNTMsIDU4MTYzLCA1ODE3MiwgNTgxODAsIDU4MTg5LCA1ODE5OSwgNTgyMDgsIDU4MjE4LCA1ODIyOSwgNTgyMzksIAorICAgIDU4MjQ4LCA1ODI1OCwgNTgyNjksIDU4Mjc5LCA1ODI5MCwgNTgzMDIsIDU4MzEzLCA1ODMyMywgNTgzMzIsIDU4MzQwLCAKKyAgICA1ODM0NywgNTgzNTUsIDU4MzY0LCA1ODM3MiwgNTgzODEsIDU4MzkxLCA1ODQwMCwgNTg0MDgsIDU4NDE3LCA1ODQyNywgCisgICAgNTg0MzYsIDU4NDQ2LCA1ODQ1NywgNTg0NjcsIDU4NDc2LCA1ODQ4NCwgNTg0OTMsIDU4NTAzLCA1ODUxMiwgNTg1MjIsIAorICAgIDU4NTMzLCA1ODU0MywgNTg1NTIsIDU4NTYyLCA1ODU3MywgNTg1ODMsIDU4NTk0LCA1ODYwNiwgNTg2MTcsIDU4NjI3LCAKKyAgICA1ODYzNiwgNTg2NDQsIDU4NjUzLCA1ODY2MywgNTg2NzIsIDU4NjgyLCA1ODY5MywgNTg3MDMsIDU4NzEyLCA1ODcyMiwgCisgICAgNTg3MzMsIDU4NzQzLCA1ODc1NCwgNTg3NjYsIDU4Nzc3LCA1ODc4NywgNTg3OTYsIDU4ODA2LCA1ODgxNywgNTg4MjcsIAorICAgIDU4ODM4LCA1ODg1MCwgNTg4NjEsIDU4ODcxLCA1ODg4MiwgNTg4OTQsIDU4OTA1LCA1ODkxNywgNTg5MzAsIDU4OTQyLCAKKyAgICA1ODk1MywgNTg5NjMsIDU4OTcyLCA1ODk4MCwgNTg5ODcsIDU4OTk1LCA1OTAwNCwgNTkwMTIsIDU5MDIxLCA1OTAzMSwgCisgICAgNTkwNDAsIDU5MDQ4LCA1OTA1NywgNTkwNjcsIDU5MDc2LCA1OTA4NiwgNTkwOTcsIDU5MTA3LCA1OTExNiwgNTkxMjQsIAorICAgIDU5MTMzLCA1OTE0MywgNTkxNTIsIDU5MTYyLCA1OTE3MywgNTkxODMsIDU5MTkyLCA1OTIwMiwgNTkyMTMsIDU5MjIzLCAKKyAgICA1OTIzNCwgNTkyNDYsIDU5MjU3LCA1OTI2NywgNTkyNzYsIDU5Mjg0LCA1OTI5MywgNTkzMDMsIDU5MzEyLCA1OTMyMiwgCisgICAgNTkzMzMsIDU5MzQzLCA1OTM1MiwgNTkzNjIsIDU5MzczLCA1OTM4MywgNTkzOTQsIDU5NDA2LCA1OTQxNywgNTk0MjcsIAorICAgIDU5NDM2LCA1OTQ0NiwgNTk0NTcsIDU5NDY3LCA1OTQ3OCwgNTk0OTAsIDU5NTAxLCA1OTUxMSwgNTk1MjIsIDU5NTM0LCAKKyAgICA1OTU0NSwgNTk1NTcsIDU5NTcwLCA1OTU4MiwgNTk1OTMsIDU5NjAzLCA1OTYxMiwgNTk2MjAsIDU5NjI5LCA1OTYzOSwgCisgICAgNTk2NDgsIDU5NjU4LCA1OTY2OSwgNTk2NzksIDU5Njg4LCA1OTY5OCwgNTk3MDksIDU5NzE5LCA1OTczMCwgNTk3NDIsIAorICAgIDU5NzUzLCA1OTc2MywgNTk3NzIsIDU5NzgyLCA1OTc5MywgNTk4MDMsIDU5ODE0LCA1OTgyNiwgNTk4MzcsIDU5ODQ3LCAKKyAgICA1OTg1OCwgNTk4NzAsIDU5ODgxLCA1OTg5MywgNTk5MDYsIDU5OTE4LCA1OTkyOSwgNTk5MzksIDU5OTQ4LCA1OTk1OCwgCisgICAgNTk5NjksIDU5OTc5LCA1OTk5MCwgNjAwMDIsIDYwMDEzLCA2MDAyMywgNjAwMzQsIDYwMDQ2LCA2MDA1NywgNjAwNjksIAorICAgIDYwMDgyLCA2MDA5NCwgNjAxMDUsIDYwMTE1LCA2MDEyNiwgNjAxMzgsIDYwMTQ5LCA2MDE2MSwgNjAxNzQsIDYwMTg2LCAKKyAgICA2MDE5NywgNjAyMDksIDYwMjIyLCA2MDIzNCwgNjAyNDcsIDYwMjYxLCA2MDI3NCwgNjAyODYsIDYwMjk3LCA2MDMwNywgCisgICAgNjAzMTYsIDYwMzI0LCA2MDMzMSwgNjAzMzYsIDYwMjksIDYwMzQzLCAyNjY4OCwgNjAzNDgsIDYwMzUzLCAyNjY5MywgCisgICAgNjAzNTksIDE3MzE5LCAzMTQ0OSwgNjAzNjQsIDYwMzcwLCA2MDM3NiwgNjAzODMsIDYwMzkwLCA2MDM5NSwgNjAzOTksIAorICAgIDYwNDAzLCA2MDQxMiwgNjA0MTgsIDYwNDMwLCA2MDQ0MSwgNjA0NDUsIDI5MzYsIDYwMDQsIDYwNDUwLCA2MDQ1MywgCisgICAgNjA0NTUsIDYwNDU5LCA2MDQ2MywgNjA0NjcsIDM0MDk3LCA2MDQ3MiwgNjA0NzYsIDYwNDc5LCA2MDQ4NCwgNjA0ODgsIAorICAgIDYwNDk1LCA2MDUwMSwgNjA1MDUsIDYwNTA5LCAyNjcwMywgNjA1MTIsIDYwNTE5LCA2MDUyOCwgNjA1MzYsIDYwNTQ3LCAKKyAgICA2MDU1NSwgNjA1NjMsIDYwNTcwLCA2MDU3NywgNjA1ODMsIDYwNTk0LCAyNjcwOCwgNjA1OTksIDYwNjEwLCA2MDYyMiwgCisgICAgNjA2MzMsIDYwNjQxLCAyNDg0LCA2MDY0NiwgNjA2NTksIDYwNjYzLCA2MDY3MSwgNjA2NzYsIDYwNjg0LCAxMzkwOCwgCisgICAgNjA2OTUsIDYwNzAxLCA2MDcwOCwgNjA3MTYsIDYwNzIyLCAyNjcxMywgNjA3MjcsIDc1OTIsIDUwNDY3LCA2MDczNCwgCisgICAgNjA3MzcsIDYwNzQ1LCA2MDc1OCwgNjA3NzEsIDYwNzg0LCA2MDc5NywgNjA4MDQsIDYwODE1LCA2MDgyNCwgMzQxMDIsIAorICAgIDM0MTA3LCA2MDgyOSwgNjA4MzMsIDYwODQxLCA2MDg0OCwgNjA4NTcsIDYwODY1LCA2MDg3MSwgNjA4ODAsIDYwODg4LCAKKyAgICA2MDg5NiwgNjA5MDAsIDYwOTA5LCA2MDkxOCwgNjA5MjgsIDYwOTQxLCA2MDk1NCwgNjA5NjQsIDI2NzE4LCA2MDk3MCwgCisgICAgNjA5NzcsIDYwOTgzLCAyNjcyNCwgNjA5ODgsIDYwOTkxLCA2MDk5NSwgNjEwMDMsIDYxMDEyLCAzMzg0MCwgNjEwMjAsIAorICAgIDYxMDI4LCA2MTAzNSwgNjEwNDMsIDYxMDUzLCA2MTA2MiwgNjEwNzEsIDYxMDgwLCA2MTA4OCwgNjEwOTksIDYxMTA5LCAKKyAgICA3MTg0LCAxNzgwMiwgNjExMTgsIDYxMTIzLCA2MTEyOCwgNjExMzIsIDYxMTM2LCA2MTE0MSwgNjExNDcsIDYxMTUyLCAKKyAgICA2MTE1NywgNjExNjMsIDYxMTY4LCA2MTE3MywgMTc3NjcsIDYxMTc4LCA2MTE4NSwgNjExOTMsIDYxMjAxLCA2MTIwNiwgCisgICAgNjEyMTMsIDYxMjIwLCA2MTIyNCwgNjEyMjgsIDYxMjM2LCA2MTI0NCwgMjY3MzMsIDYxMjUwLCA2MTI1NiwgNjEyNjgsIAorICAgIDYxMjc0LCA2MTI3OSwgNjEyOTAsIDYxMzAwLCA2MTMxMCwgNjEzMjIsIDYxMzI4LCA2MTMzOCwgMjY3MzgsIDYxMzQ3LCAKKyAgICA2MTM1NiwgNjEzNjIsIDYxMzc0LCA2MTM4NSwgNjEzOTIsIDYxMzk3LCA2MTQwMSwgNjE0MDksIDYxNDE1LCA2MTQyMCwgCisgICAgNjE0MjUsIDYxNDMyLCA2MTQ0NCwgNjE0NTQsIDYxNDYzLCA2MTQ3MCwgMjc5MzcsIDE5NzMxLCA2MTQ3NiwgNjE0ODEsIAorICAgIDYxNDg1LCA2MTQ4OSwgNjE0OTQsIDYxNTAwLCA2MTUxMSwgNjE1MjQsIDYxNTI5LCAyNjc0MywgNjE1MzQsIDYxNTQ2LCAKKyAgICA2MTU1NSwgNjE1NjgsIDYxNTc1LCA2MTU4NCwgNjE1OTIsIDYxNTk3LCA2MTYwMywgMTQ4NCwgNjE2MDgsIDYxNjEzLCAKKyAgICA2MTYxOCwgNjE2MjMsIDYxNjI5LCA2MTYzNCwgNjE2MzksIDYxNjQ1LCA2MTY1MSwgNjE2NTYsIDYxNjYwLCA2MTY2NSwgCisgICAgNjE2NzAsIDYxNjc1LCA1MDk3MywgNjE2ODAsIDYxNjg1LCA2MTY5MCwgNjE2OTUsIDYxNzAxLCA2MTcwNywgNjE3MTIsIAorICAgIDYxNzE2LCA2MTcyMSwgNjE3MjYsIDYxNzMxLCA2MTczNiwgNjE3NDEsIDYxNzQ1LCA2MTc1MSwgNjE3NTYsIDYxNzY1LCAKKyAgICA2MTc3MCwgNjE3NzUsIDYxNzgwLCA2MTc4NSwgNjE3ODksIDYxNzk2LCA2MTgwMiwgMTM2MDUsIDEzNjEyLCAzNzg3MiwgCisgICAgNjE4MDcsIDYxNzU3LCA2MTgwOSwgMjY3NTIsIDYxODEyLCA2MTgyMSwgNjE4MjcsIDQyNjMsIDI2NzU3LCA2MTgzMSwgCisgICAgNjE4MzcsIDYxODQzLCA2MTg0OCwgNjE4NTIsIDYxODU5LCA2MTg2NCwgNjE4NzQsIDYxODgzLCA2MTg4NywgNjE4OTMsIAorICAgIDYxODk5LCA2MTkwNSwgNjE5MDksIDYxOTE3LCA2MTkyNCwgNjE5MzIsIDYxOTQwLCAyNjc2MiwgNjE5NDcsIDYxOTUwLCAKKyAgICA2MTk1NywgNjE5NjIsIDYxOTY2LCA2MTk3MiwgNjE5NzcsIDYxOTgxLCA2MTk5MCwgNjE5OTgsIDYyMDA0LCA2MjAwOSwgCisgICAgMjc1NDQsIDYyMDE2LCA2MjAyMywgNjIwMjksIDYyMDM0LCA2MjA0MCwgNjIwNDcsIDYyMDUzLCAyNjQ3NSwgMjI2ODgsIAorICAgIDYyMDU5LCA2MjA2NCwgNjIwNzAsIDYyMDgyLCA2MTc5MCwgNjE3OTcsIDYyMDkyLCA2MjA5NywgNjIxMDQsIDYyMTExLCAKKyAgICA2MjExNywgNjIxMjgsIDYyMTMzLCA2OTY1LCA2MjE0MSwgNjIxNDQsIDYyMTUwLCA2MjE1NCwgNjIxNTgsIDYyMTYxLCAKKyAgICA2MjE2NywgMjY1NzEsIDQyODMsIDgzNiwgMTA2MjEsIDYyMTc0LCA2MjE4MCwgNjIxODYsIDYyMTkyLCA2MjE5OCwgNjIyMDQsIAorICAgIDYyMjEwLCA2MjIxNiwgNjIyMjIsIDYyMjI3LCA2MjIzMiwgNjIyMzcsIDYyMjQyLCA2MjI0NywgNjIyNTIsIDYyMjU3LCAKKyAgICA2MjI2MiwgNjIyNjcsIDYyMjcyLCA2MjI3NywgNjIyODIsIDYyMjg3LCA2MjI5MywgNjIyOTgsIDYyMzAzLCA2MjMwOSwgCisgICAgNjIzMTQsIDYyMzE5LCA2MjMyNSwgNjIzMzEsIDYyMzM3LCA2MjM0MywgNjIzNDksIDYyMzU1LCA2MjM2MSwgNjIzNjcsIAorICAgIDYyMzczLCA2MjM3OCwgNjIzODMsIDYyMzg5LCA2MjM5NCwgNjIzOTksIDYyNDA1LCA2MjQxMCwgNjI0MTUsIDYyNDIwLCAKKyAgICA2MjQyNSwgNjI0MzAsIDYyNDM1LCA2MjQ0MCwgNjI0NDUsIDYyNDUwLCA2MjQ1NSwgNjI0NjAsIDYyNDY1LCA2MjQ3MSwgCisgICAgNjI0NzYsIDYyNDgxLCA2MjQ4NiwgNjI0OTIsIDYyNDk3LCA2MjUwMiwgNjI1MDcsIDYyNTEyLCA2MjUxOCwgNjI1MjMsIAorICAgIDYyNTI4LCA2MjUzMywgNjI1MzgsIDYyNTQzLCA2MjU0OCwgNjI1NTMsIDYyNTU4LCA2MjU2MywgNjI1NjgsIDYyNTczLCAKKyAgICA2MjU3OCwgNjI1ODMsIDYyNTg4LCA2MjU5MywgNjI1OTgsIDYyNjAzLCA2MjYwOCwgNjI2MTMsIDYyNjE5LCA2MjYyNCwgCisgICAgNjI2MjksIDYyNjM0LCA2MjYzOSwgNjI2NDQsIDYyNjQ5LCA2MjY1NCwgMTg0NiwgMTM4LCA2MjY1OSwgNjI2NjMsIDYyNjY3LCAKKyAgICA2MjY3MiwgNjI2ODAsIDYyNjg0LCA2MjY5MSwgNjI2OTksIDYyNzAzLCA2MjcxNiwgNjI3MjAsIDYyNzIzLCA2MjcyOCwgCisgICAgNjI3MzIsIDYyNzM3LCA2Mjc0MSwgNjI3NDksIDYyNzUzLCAxNzMyNywgNjI3NTgsIDYyNzYyLCA2Mjc2NiwgNjI3NjksIAorICAgIDYyNzc3LCA2Mjc4MiwgNjI3ODksIDYyNzk1LCA2MjgwMSwgNjI4MDYsIDYyODE0LCA1NjI3NiwgNjI4MjEsIDYyODI2LCAKKyAgICA2MjgzMSwgNjI4MzUsIDYyODM5LCA2Mjg0MiwgNjI4NDcsIDYyODUyLCA2Mjg1NiwgNjI4NTksIDYyODY1LCA2Mjg2OSwgCisgICAgNjI4NzksIDYyODg4LCA2Mjg5MSwgNjI5MDQsIDYyOTEyLCA2MjkyMCwgNjI5MzAsIDYyOTQzLCA2Mjk1MCwgNjI5NjEsIAorICAgIDYyOTY3LCA2Mjk3MiwgNjI5NzcsIDYyOTgzLCA2Mjk5MiwgNjE1MzYsIDYzMDAwLCA2MzAwNiwgNjMwMTQsIDYzMDE4LCAKKyAgICA2MzAyMiwgNjMwMjgsIDYzMDM2LCA2MzA0OCwgNjMwNjAsIDYzMDY3LCA2MzA3MSwgNjMwODIsIDYzMDkwLCA2MzA5NywgCisgICAgNjMxMDksIDYzMTE3LCA2MzEyNSwgNjMxMzIsIDYzMTM4LCA2MzE0OCwgNjMxNTcsIDYzMTYyLCA2MzE3MiwgNjMxNzYsIAorICAgIDYzMTgwLCA2MzE5MCwgNjMxOTcsIDYzMjA5LCA2MzIyMSwgNjMyMzAsIDYwNjQ5LCA2MzIzNywgNjMyNDgsIDYzMjYyLCAKKyAgICA2MzI3MCwgNjMyODAsIDYzMjg3LCA2MzI5NSwgNjMzMDQsIDYzMzEyLCA2MzMyMiwgNjMzMzEsIDYzMzQyLCA2MzM1NCwgCisgICAgNjMzNjMsIDYzMzczLCA2MzM4MCwgNjMzODksIDYzNDA0LCA2MzQxMywgNjM0MjYsIDYzNDQxLCA2MzQ0NSwgNjM0NTcsIAorICAgIDYzNDY4LCA2MzQ3OSwgNjM0OTAsIDYzNTAwLCA2MzUxMSwgNjM1MTksIDYzNTI1LCA2MzUzNSwgNjM1NDEsIDYzNTQ2LCAKKyAgICA2MzU1MiwgNjM1NTgsIDYzNTYzLCA2MzU3MCwgNzQ2OSwgMTM5MjgsIDYzNTc2LCA2MzU4MSwgNjM1ODgsIDYzNTk0LCAKKyAgICA2MzU5OSwgNjM2MDMsIDYzNjA2LCA2MzYwOSwgNjM2MTEsIDYzNjE4LCA2MzYyOSwgNjM2MzQsIDYzNjM4LCA2MzY0NCwgCisgICAgNjM2NDksIDYzNjU3LCA1NjcyMCwgNTY3MzAsIDYzNjYzLCA2MzY3MywgNjM2ODAsIDYzNjg2LCA2MzY5MSwgNjM3MDAsIAorICAgIDYzNzA3LCA2MzcxNSwgNjM3MjQsIDYzNzMwLCA2MzczNiwgNjM3NDMsIDYzNzUwLCA2Mzc1NSwgNjM3NTksIDYzNzY0LCAKKyAgICA2Mzc2OSwgNjM3NzQsIDYzNzc4LCA2MjcxMSwgNjM3ODcsIDYzNzkxLCA2MzgwMiwgNjM4MTIsIDEzOTM3LCA2MzgyMywgCisgICAgNjM4MzEsIDEzOTQ5LCA2MzgzOCwgMjI1OTgsIDYzODQyLCA2Mzg0NiwgNjM4NTEsIDYzODY4LCA2Mzg4MCwgODE2OSwgCisgICAgNjM4OTIsIDYzODk3LCA2MzkwMiwgNjM5MDcsIDYzOTExLCA2MzkxNCwgNjM5MTksIDYzOTI0LCA2MzkzMCwgNjM5MzUsIAorICAgIDQwNzUsIDE3Mzc4LCA2Mzk0MCwgNjM5NDUsIDYzOTUxLCA2Mzk1OCwgNjM5NjMsIDYzOTY4LCA2Mzk3NCwgNjM5ODAsIAorICAgIDYzOTg2LCA2Mzk5MSwgNjM5OTcsIDY0MDAxLCA2NDAxNSwgNjQwMjMsIDY0MDMxLCA2NDAzNywgNjQwNDIsIDY0MDQ5LCAKKyAgICA2NDA1NCwgNjQwNTksIDY0MDY3LCA2NDA3MiwgNjQwNzgsIDY0MDgzLCA2NDA4OCwgNjQwOTIsIDY0MDk1LCA2NDExMywgCisgICAgNjQxMzIsIDY0MTQ1LCA2NDE1OSwgNjQxNzUsIDY0MTgyLCA2NDE4OSwgNjQxOTUsIDY0MjAyLCA2NDIwNywgNjQyMTMsIAorICAgIDY0MjE5LCA2NDIyNCwgNjQyMjksIDY0MjQ1LCA4MTgyLCA2NDI1OSwgNjQyNjYsIDY0MjcwLCA2NDI3MywgNjQyNzgsIAorICAgIDY0MjgzLCA2NDI5MCwgNjQyOTUsIDY0MzAwLCA2NDMwNSwgNjQzMDksIDY0MzE3LCA5MDkwLCA2NDMyNiwgNjQzMzEsIAorICAgIDY0MzM3LCA5MTAxLCA2NDM0MiwgNjQzNDUsIDY0MzUwLCA2NDM2MCwgNjQzNjksIDY0Mzc0LCA2NDM4MiwgNjQzODksIAorICAgIDY0NDAwLCA2NDQxMCwgNjQ0MTUsIDY0NDIwLCA2NDQyNywgNjQ0MzMsIDY0NDM4LCA2NDQ0NSwgNjQ0NTQsIDY0NDYyLCAKKyAgICA2NDQ2OCwgNjQ0NzUsIDY0NDgxLCA2NDQ4NSwgMTM0NTEsIDI5MTAsIDY0NDkwLCA2NDQ5NCwgNjQ1MDAsIDY0NTA2LCAKKyAgICA2NDUxMywgNjQ1MTcsIDY0NTM4LCA2NDU2MCwgNjQ1NzYsIDY0NTkzLCA2NDYxMiwgNjQ2MjEsIDY0NjMxLCA2NDYzOCwgCisgICAgNjQ2NDUsIDIyNTE3LCA2NDY1MSwgNjQ2NTUsIDY0NjYzLCA2NDY2OSwgNjQ2NzcsIDY0NjgxLCA2NDY4OSwgNjQ2OTYsIAorICAgIDY0NzAwLCA2NDcwNiwgNjQ3MTIsIDY0NzE3LCAzMzc1LCAzNDMwMiwgNjQ3MjMsIDY0NzI3LCA2NDczMSwgNjQ3MzUsIAorICAgIDY0NzQwLCA2NDc0NSwgNjQ3NTAsIDY0NzU2LCA2NDc2MSwgNjQ3NjcsIDY0NzcyLCA2NDc3NywgNjQ3ODEsIDY0Nzg2LCAKKyAgICAzNDMxNywgNjQ3OTAsIDY0Nzk1LCA2NDgwMywgNjQ4MDcsIDY0ODEyLCA2NDgxOSwgNjQ4MjgsIDY0ODM0LCA2NDg0MSwgCisgICAgNjQ4NDUsIDY0ODUyLCA2NDg2MSwgNjQ4NjYsIDY0ODc0LCA2NDg4MywgNjQ4ODksIDY0ODk0LCA2NDg5OSwgNjQ5MDUsIAorICAgIDY0OTExLCA2NDkxNiwgNjQ5MjAsIDY0OTI0LCA2NDkyNywgNjQ5MzUsIDY0OTQ1LCA2NDk1MCwgMzIwNTcsIDY0OTU4LCAKKyAgICA2NDk3MCwgNjQ5NzQsIDY0OTg2LCA2NDk5NywgNjUwMDQsIDY1MDEwLCA2NTAxNywgNjUwMjksIDY1MDM2LCA2NTA0MiwgCisgICAgMTc0MzksIDY1MDQ2LCA2NTA1MiwgNjUwNTgsIDY1MDYzLCA2NTA2OCwgNTA4NCwgNjUwNzMsIDY1MDc5LCA2NTA4NywgCisgICAgNjUwOTYsIDY1MTAwLCA2NTEwNiwgNjQ3ODIsIDI0OTcxLCA2NTExMSwgNjUxMTMsIDY1MTE4LCA2NTEyMywgNjUxMjgsIAorICAgIDY1MTMzLCA2NTEzOCwgNjUxNDMsIDY1MTQ4LCA2NTE1MywgNjUxNTgsIDY1MTYzLCA2NTE2OCwgNjUxNzMsIDY1MTc4LCAKKyAgICA2NTE4MywgNjUxODksIDY1MTk0LCA2NTE5OSwgNjUyMDQsIDY1MjA5LCA2NTIxNCwgNjUyMTksIDY1MjI0LCA2NTIyOSwgCisgICAgNjUyMzUsIDY1MjQxLCA2NTI0NywgNjUyNTIsIDY1MjU3LCA2NTI2OSwgNjUyNzQsIDE4NTIsIDY3LCA2NTI3OSwgNjUyODQsIAorICAgIDI2NzcyLCAyNjc3NywgMjY3ODIsIDI2Nzg4LCAyNjc5MywgNjUyODgsIDI2Nzk4LCA2NTMxMCwgNjUzMTIsIDY1MzE2LCAKKyAgICA2NTMyMCwgNjUzMjUsIDY1MzI5LCAyNjgwMiwgNjUzMzMsIDI2ODA3LCA2NTM0MSwgNjUzNDQsIDI2ODEyLCAxODE3OSwgCisgICAgNjUzNTMsIDY1MzU3LCAxNDE1LCA2NTM2MiwgMjY4MjMsIDY1MzY1LCA2NTM3MCwgMjEzNTQsIDIxMzY0LCA2NTM3NSwgCisgICAgNjUzNzksIDY1Mzg0LCA2NTM5MCwgNjUzOTUsIDY1NDA0LCA2NTQwOSwgNjU0MTYsIDY1NDIyLCA2NTQyNywgNjU0MzIsIAorICAgIDY1NDM3LCA2NTQ0NSwgMjY4MjgsIDExMTAsIDY1NDUyLCA2NTQ1OCwgNjU0NjMsIDY1NDY4LCA2NTQ3MywgNjU0NzksIAorICAgIDY1NDg0LCA2NTQ5MSwgNjU0OTcsIDY1NTAyLCA2NTUxMCwgNjU1MTYsIDEzOTU5LCA2NTUyMywgMjkyOTYsIDY1NTM2LCAKKyAgICA2NTU0MSwgNjU1NDcsIDY1NTYwLCA2NTU2NCwgNjU1NzMsIDY1NTgwLCA2NTU4NiwgNjU1OTQsIDY1NjAzLCA2NTYxMCwgCisgICAgNjU2MTYsIDI2ODMyLCA2NTYxOSwgNjU2MjYsIDY1NjMyLCA2NTYzNiwgNjU2MzksIDY1NjQ3LCA2NTY2MSwgNjU2NjgsIAorICAgIDI2ODM3LCA2NTY3NCwgMjY4NDIsIDY1NjgxLCAyODQyMiwgNjU2OTEsIDY1Njk2LCA2NTcwMCwgMTc3MTcsIDY1NzA1LCAKKyAgICA2NTcxMCwgMjY4NDcsIDU0MDEzLCA2NTcxNCwgNjU3MTksIDY1NzI1LCA2NTczMSwgNjU3MzgsIDY1NzQ0LCA2NTc0OSwgCisgICAgNjU3NTQsIDY1NzYzLCA2NTc3NSwgNjU3OTAsIDI3MDY3LCA2NTc5NiwgMTMxMTcsIDI2ODUxLCA2NTgwMCwgNjU4MDcsIAorICAgIDI2ODU2LCA2NTgxMywgNjU4MjIsIDY1ODI5LCA2NTgzOCwgNjU4NDQsIDY1ODQ5LCA2NTg1NSwgMjY4NjEsIDY1ODYwLCAKKyAgICA2NTg2OSwgNjU4NzgsIDY1ODg1LCA2NTg5MSwgNjU4OTcsIDY1OTA1LCA2NTkwOSwgMjY4NjYsIDY1OTEyLCAyNjg3MiwgCisgICAgMjY4NzgsIDY1OTE3LCA2NTkyNSwgNjU5MzUsIDI2ODgzLCA2NTkzOSwgNjU5NDEsIDY1OTQ1LCA2NTk1MCwgNjU5NTQsIAorICAgIDY1OTU4LCA2NTk2NCwgNjU5NjksIDY1OTczLCA2NTk3OCwgMjkxNSwgNjU5ODIsIDY1OTg5LCA2NTk5MywgNjYwMDIsIAorICAgIDY2MDEwLCA2NjAxNywgNjYwMjIsIDY2MDI3LCA2NjAzMSwgNjYwMzUsIDY2MDM4LCA2NjA0NCwgNjYwNTIsIDY2MDU4LCAKKyAgICA2NjA2MiwgNjYwNjcsIDY2MDc0LCA2NjA4MCwgMjg3OTksIDY2MDg1LCA2NjA4OCwgNjYwOTMsIDY2MDk3LCA2NjEwMiwgCisgICAgNjYxMDcsIDY2MTExLCA2NjExOSwgMjEzNzMsIDIxMzgyLCA2NjEyNSwgNjYxMzEsIDY2MTM3LCA2NjE0MiwgNjYxNDYsIAorICAgIDY2MTQ5LCA2NjE1OSwgNjYxNjQsIDY2MTcwLCA2NjE3NiwgNjYxODQsIDY2MTg5LCAyODQzOCwgNjYxOTMsIDY2MjAxLCAKKyAgICA2NjIwNywgNjYyMTIsIDY2MjE3LCA1MDY1MywgMjg0NDQsIDY2MjIzLCA2NjIyOCwgNjYyMzIsIDY2MjM3LCA2NjI0MiwgCisgICAgNjYyNDcsIDY2MjUxLCA2NjI1NiwgNjYyNjEsIDY2MjY3LCA2NjI3MiwgNjYyNzcsIDY2MjgzLCA2NjI4OSwgNjYyOTQsIAorICAgIDY2Mjk4LCA2NjMwMywgNjYzMDgsIDY2MzEzLCA2NjMxNywgNjYzMjIsIDY2MzI3LCA2NjMzMiwgNjYzMzgsIDY2MzQ0LCAKKyAgICA2NjM1MCwgNjYzNTUsIDY2MzU5LCA2NjM2NCwgNjYzNjksIDY2MzczLCA2NjM3OCwgNjYzODMsIDY2Mzg4LCA2NjM5MiwgCisgICAgMjY4ODcsIDY2NDAwLCA2NjQwNCwgNjY0MTIsIDE4NTIxLCA2NjQyMywgNjY0MjksIDY2NDM2LCA2NjQ0MSwgNjY0NTAsIAorICAgIDY2NDU1LCA2NjQ1OSwgNjY0NjQsIDY2NDcyLCA2NjQ4MCwgNjY0ODcsIDU2NDIyLCA2NjQ5MywgNjY1MDEsIDY2NTA4LCAKKyAgICA2NjUxOSwgNjY1MjUsIDI2ODk3LCA2NjUyOCwgNjY1MzUsIDMyMTgzLCA2NjUzOSwgNjY1NDQsIDY2NTQ5LCA2ODc3LCAKKyAgICA2NjU1MywgNjY1NjEsIDY2NTY4LCA2NjU3NSwgNjY1ODEsIDY2NDQ1LCA2NjU5NSwgNjY2MDEsIDY2NjA1LCA2NjYwOCwgCisgICAgNjY2MTYsIDY2NjIzLCA2NjYyOCwgNjY2NDEsIDY2NjQ4LCA2NjY1MywgNjY2NTgsIDY2NjYxLCA2NjY2OCwgNjY2NzIsIAorICAgIDY2NjgyLCA2NjY5MiwgNjY3MDEsIDY2NzEyLCA2NjcxNywgNjY3MjEsIDI4ODEzLCAxNzY0MSwgMzI2MjksIDY2NzI5LCAKKyAgICA2NjczNCwgNjY3MzksIDY2NzQ0LCA2Njc0OSwgNjY3NTQsIDY2NzU5LCA2Njc2MywgNjY3NjgsIDY2NzczLCA2Njc3OCwgCisgICAgNjY3ODMsIDY2Nzg4LCA2Njc5MywgNjY3OTcsIDY2ODAyLCA2NjgwNywgNjY4MTEsIDY2ODE1LCA2NjgxOSwgNjY4MjMsIAorICAgIDY2ODI4LCA2NjgzMywgNjY4MzcsIDY2ODQyLCA2Njg0NiwgNjY4NTAsIDY2ODU1LCA2Njg2MCwgNjY4NjUsIDY2ODcwLCAKKyAgICA2Njg3NCwgNjY4NzksIDY2ODg0LCA2Njg4OCwgNjY4OTMsIDY2ODk4LCA2NjkwMywgNjY5MDgsIDY2OTEzLCA2NjkxOCwgCisgICAgNjY5MjMsIDY2OTI4LCA2NjkzMywgNjY5MzgsIDY2OTQzLCA2Njk0OCwgNjY5NTMsIDY2OTU4LCA2Njk2MywgNjY5NjgsIAorICAgIDY2OTczLCA2Njk3OCwgNjY5ODMsIDY2OTg4LCA2Njk5MiwgNjY5OTcsIDY3MDAyLCA2NzAwNywgNjcwMTIsIDY3MDE3LCAKKyAgICA2NzAyMiwgNjcwMjcsIDY3MDMyLCA2NzAzNywgNjcwNDIsIDY3MDQ3LCA2NzA1MSwgNjcwNTYsIDY3MDYwLCA2NzA2NSwgCisgICAgNjcwNzAsIDY3MDc1LCA2NzA4MCwgNjcwODUsIDY3MDkwLCA2NzA5NSwgNjcxMDAsIDY3MTA1LCA2NzEwOSwgNjcxMTMsIAorICAgIDY3MTE4LCA2NzEyMywgNjcxMjcsIDY3MTMyLCA2NzEzNywgNjcxNDEsIDY3MTQ2LCA2NzE1MSwgNjcxNTYsIDY3MTYxLCAKKyAgICA2NzE2NSwgNjcxNzAsIDY3MTc1LCA2NzE3OSwgNjcxODQsIDY3MTg4LCA2NzE5MiwgNjcxOTYsIDY3MjAwLCA2NzIwNSwgCisgICAgNjcyMDksIDY3MjEzLCA2NzIxNywgNjcyMjEsIDY3MjI1LCA2NzIyOSwgNjcyMzMsIDY3MjM3LCA2NzI0MSwgNjcyNDYsIAorICAgIDY3MjUxLCA2NzI1NiwgNjcyNjEsIDY3MjY2LCA2NzI3MSwgNjcyNzYsIDY3MjgxLCA2NzI4NiwgNjcyOTEsIDY3Mjk1LCAKKyAgICA2NzI5OSwgNjczMDMsIDY3MzA3LCA2NzMxMSwgNjczMTUsIDY3MzIwLCA2NzMyNCwgNjczMjksIDY3MzMzLCA2NzMzOCwgCisgICAgNjczNDMsIDY3MzQ3LCA2NzM1MSwgNjczNTYsIDY3MzYwLCA2NzM2NCwgNjczNjgsIDY3MzcyLCA2NzM3NiwgNjczODAsIAorICAgIDY3Mzg0LCA2NzM4OCwgNjczOTIsIDY3Mzk2LCA2NzQwMCwgNjc0MDQsIDY3NDA4LCA2NzQxMiwgNjc0MTcsIDY3NDIyLCAKKyAgICA2NzQyNiwgNjc0MzAsIDY3NDM0LCA2NzQzOCwgNjc0NDIsIDY3NDQ2LCA2NzQ1MSwgNjc0NTUsIDY3NDU5LCA2NzQ2MywgCisgICAgNjc0NjcsIDY3NDcxLCA2NzQ3NSwgNjc0ODAsIDY3NDg0LCA2NzQ4OSwgNjc0OTMsIDY3NDk3LCA2NzUwMSwgNjc1MDUsIAorICAgIDY3NTA5LCA2NzUxMywgNjc1MTcsIDY3NTIxLCA2NzUyNSwgNjc1MjksIDY3NTMzLCA2NzUzOCwgNjc1NDIsIDY3NTQ2LCAKKyAgICA2NzU1MCwgNjc1NTQsIDY3NTU4LCA2NzU2MiwgNjc1NjYsIDY3NTcwLCA2NzU3NCwgNjc1NzgsIDY3NTgyLCA2NzU4NywgCisgICAgNjc1OTEsIDY3NTk1LCA2NzYwMCwgNjc2MDUsIDY3NjA5LCA2NzYxMywgNjc2MTcsIDY3NjIxLCA2NzYyNSwgNjc2MjksIAorICAgIDY3NjMzLCA2NzYzNywgNjc2NDIsIDY3NjQ2LCA2NzY1MSwgNjc2NTUsIDY3NjYwLCA2NzY2NCwgNjc2NjksIDY3NjczLCAKKyAgICA2NzY3OSwgNjc2ODQsIDY3Njg4LCA2NzY5MywgNjc2OTcsIDY3NzAyLCA2NzcwNiwgNjc3MTEsIDY3NzE1LCA2NzcyMCwgCisgICAgMTUwMywgNjc3MjQsIDE3NDEsIDE3NDYsIDY3NzI4LCA2NzczMiwgMjcxMSwgNjc3MzYsIDEzODQsIDY3NzQxLCAxMzUwLCAKKyAgICA2Nzc0NSwgNjc3NDksIDY3NzU2LCA2Nzc2MywgNjc3NzcsIDI3MjcsIDUxNTksIDY3Nzg2LCA2Nzc5NCwgNjc4MDEsIAorICAgIDY3ODA4LCA2NzgyMSwgNjc4MzQsIDY3ODQ1LCA2Nzg1MCwgNjc4NTcsIDY3ODY5LCAzNzAzLCA5MTYyLCA2Nzg3MywgCisgICAgNjc4NzgsIDY3ODg3LCA2Nzg5NywgNjc5MDIsIDY3OTA2LCA2NzkxMSwgNjc5MTgsIDY3OTI0LCA2NzkzNiwgMTM1NSwgCisgICAgMTE2ODgsIDY3OTQ2LCA2Nzk1MiwgNjc5NjYsIDY3OTc4LCA2Nzk4NywgNjc5OTYsIDY4MDA1LCA2ODAxMywgNjgwMjQsIAorICAgIDY4MDMyLCAzNzQyLCA2ODA0MiwgNjgwNTEsIDY4MDU3LCA2ODA2NCwgMjg5MTksIDY4MDY5LCAyNzU1LCAxMDMxNiwgCisgICAgNjgwNzMsIDY4MDgwLCA2ODI4LCA2ODA4OSwgMjc2MCwgMjY0OTUsIDY4MDk1LCA2ODEwMiwgNjgxMDgsIDY4MTE1LCAKKyAgICA2ODEyMSwgNjgxMjgsIDY4MTM4LCA2ODE0NywgNjgxNTgsIDY4MTY1LCA2ODE3MSwgNjgxODEsIDY4MTg5LCA2ODE5NSwgCisgICAgNjgyMTAsIDY4MjE2LCA2ODIyMSwgNjgyMjgsIDY4MjMxLCA2ODIzNywgNjgyNDQsIDY4MjUwLCA2ODI1OCwgNjgyNjcsIAorICAgIDY4Mjc1LCA2ODI4MSwgNjgyOTAsIDMzODQyLCA2ODMwNCwgNjgzMDksIDExNzA5LCA2ODMxNSwgNjgzMjgsIDY4MzM3LCAKKyAgICA2ODM0NSwgNjgzNTIsIDY4MzU2LCA2ODM2MCwgNjgzNjMsIDY4MzcwLCA2ODM3NywgNjgzODUsIDY4MzkzLCA2ODQwMiwgCisgICAgNjg0MTAsIDExNjQ1LCA2ODQxOCwgNjg0MjMsIDY4NDI3LCA2ODQzOSwgNjg0NDYsIDY4NDU1LCA3OTMsIDY4NDY1LCAyNzc2LCAKKyAgICA2ODQ3NCwgNjg0NzgsIDY4NDg0LCA2ODQ5NywgNjg1MDksIDY4NTE5LCA2ODUyOCwgNjg1NDAsIDY4NTQ4LCA2ODU1NywgCisgICAgNjg1NjgsIDY4NTc5LCA2ODU4OSwgNjg1OTksIDY4NjA4LCA2ODYxNiwgODgxMSwgNjg2MjMsIDY4NjI3LCA2ODYzMiwgCisgICAgNjg2MzcsIDY4NjQzLCAxMzYwLCA5MjE3LCA2ODY1MCwgNjg2NjEsIDY4NjcwLCA2ODY3OCwgNjg2ODcsIDY4Njk1LCAKKyAgICA2ODcxMSwgNjg3MjIsIDY4NzM4LCA2ODc0OCwgNjg3NjksIDY4NzgyLCA2ODc5NSwgNjg4MDAsIDY4ODA2LCAyMjA4NCwgCisgICAgNjg4MTIsIDY4ODE1LCA2ODgyMiwgNjg4MzIsIDYxMzksIDY4ODM5LCA2ODg0NCwgNjg4NDksIDY4ODU3LCA3NTE3LCA3NTI2LCAKKyAgICA2ODg2NSwgNjg4NzYsIDI3ODQsIDI3ODksIDY4ODgyLCA4NDE5LCA2ODg4OCwgNjg4OTUsIDY4OTAyLCA2ODkxNSwgMjE5MywgCisgICAgNTAsIDY4OTIwLCA2ODkyNSwgNjg5MzUsIDY4OTQxLCA2ODk0NSwgNjg5NTAsIDY4OTU0LCAyODEyLCA2ODk2NiwgNjg5NzQsIAorICAgIDY4OTg1LCA2ODk5NiwgNjkwMDUsIDY5MDEwLCA2OTAxNiwgNjkwMjEsIDY5MDMxLCA2OTA0MSwgNjkwNDYsIDY5MDUyLCAKKyAgICA2OTA1NywgNjkwNjYsIDE3Njc0LCA2OTA3MCwgMzgwNCwgMTIsIDY5MDc1LCA2OTA4MiwgNzY2LCA2OTA4OCwgNjkwOTMsIAorICAgIDUyODczLCA2OTA5OCwgNjkxMDMsIDY5MTA5LCA2OTExNywgNjkxMjIsIDY5MTI5LCA2OTEzNSwgMzA4NjksIDMzNzQwLCAKKyAgICA2OTE0MSwgMjgxNiwgMzIsIDY5MTUxLCA2OTE2NCwgNjkxNzIsIDY5MTc3LCA2OTE4MywgMjgzOCwgMjU2MzksIDY5MTg4LCAKKyAgICA2OTE5NiwgNjkyMDMsIDY5MjA4LCA1MDg5NSwgNTM2OTQsIDY5MjE3LCAxNjg2LCAxNzk1LCA2OTIyMiwgNjkyMjcsIAorICAgIDY5MjM0LCAxNzk5LCAyMzcsIDY5MjQxLCA2OTI0NywgNjkyNTIsIDY5MjU5LCAxODAzLCA2OTI2NCwgNjkyNzAsIDY5Mjc1LCAKKyAgICA2OTI4NywgNDI1MCwgNjkyOTcsIDE4MTAsIDY5MzAzLCA2OTMwOCwgNjkzMTUsIDY5MzIyLCA2OTMzNywgNjkzNDQsIAorICAgIDY5MzUyLCA2OTM1NiwgNjkzNjAsIDY5MzcyLCA2OTM3NywgNjkzODEsIDIzMjcyLCAzODMwLCA2OTM4NSwgNjkzOTYsIAorICAgIDY5NDAwLCA2OTQwNCwgNjk0MTAsIDY5NDE0LCA2OTQyMywgNjk0MjcsIDY5NDM4LCA2OTQ0MiwgMjIzOCwgNjk0NDYsIAorICAgIDY5NDQ4LCAyOTM1LCA3MTg5LCA2OTQ1NiwgNjk0NjEsIDY5NDY1LCA2OTQ3NCwgNjk0ODAsIDI5MDUsIDEzNjIyLCA2OTQ4NCwgCisgICAgNjk0OTcsIDY5NTE1LCA2OTUyMCwgNjk1MjgsIDY5NTM2LCA2OTU0NiwgNjk1NTgsIDY5NTcxLCA2OTU3OCwgNjk1OTQsIAorICAgIDY5NjAxLCA2OTYwNywgOTU4LCA2OTYxNCwgNjk2MjEsIDY5NjMxLCA2OTY0MCwgNjk2NTIsIDM0NzA2LCA2OTY2MCwgMjkxOSwgCisgICAgOTM5MSwgNjk2NjMsIDY5NjcxLCA2OTY3NSwgMjkyMywgNjk2NzksIDE3NTIzLCA1Mjk0NiwgMzUxNCwgNjk2ODMsIDI5MjksIAorICAgIDY5Njg3LCA2OTY5NywgNjk3MDMsIDY5NzA5LCA2OTcxNSwgNjk3MjEsIDY5NzI3LCA2OTczMywgNjk3MzksIDY5NzQ1LCAKKyAgICA2OTc1MSwgNjk3NTcsIDY5NzYzLCA2OTc2OSwgNjk3NzUsIDY5NzgxLCA2OTc4NywgNjk3OTMsIDY5Nzk5LCA2OTgwNSwgCisgICAgNjk4MTEsIDY5ODE3LCA2OTgyMywgNjk4MjksIDY5ODM1LCA2OTg0MSwgNjk4NDcsIDY5ODU0LCA2OTg2MSwgNjk4NjcsIAorICAgIDY5ODczLCA2OTg3OSwgNjk4ODUsIDY5ODkxLCA2OTg5NywgMTM2NSwgMTI2OTIsIDk0MTEsIDY5OTAzLCA2OTkwOCwgCisgICAgNjk5MTMsIDY5OTE4LCA2OTkyMywgNjk5MjgsIDY5OTMzLCA2OTkzOCwgNjk5NDMsIDY5OTQ4LCA2OTk1MywgNjk5NTgsIAorICAgIDY5OTYzLCA2OTk2OCwgNjk5NzMsIDY5OTc4LCA2OTk4MywgNjk5ODgsIDY5OTkzLCA2OTk5OCwgNzAwMDMsIDcwMDA4LCAKKyAgICA3MDAxMywgNzAwMTgsIDcwMDIzLCA3MDAyOCwgNzAwMzQsIDcwMDM5LCA3MDA0NCwgNzAwNTAsIDcwMDU1LCA3MDA2MSwgCisgICAgNzAwNjYsIDcwMDcxLCA3MDA3NywgNzAwODIsIDcwMDg3LCA3MDA5MiwgNzAwOTcsIDcwMTAyLCA3MDEwNywgNzAxMTIsIAorICAgIDcwMTE3LCA2OTY5OCwgNjk3MDQsIDY5NzEwLCA2OTcxNiwgNjk3MjIsIDY5NzI4LCA2OTczNCwgNjk3NDAsIDY5NzQ2LCAKKyAgICA2OTc1MiwgNjk3NTgsIDY5NzY0LCA2OTc3MCwgNjk3NzYsIDY5NzgyLCA3MDEyMywgNjk3ODgsIDY5Nzk0LCA2OTgwMCwgCisgICAgNzAxMjksIDY5ODA2LCA2OTgxMiwgNjk4MTgsIDY5ODI0LCA2OTgzMCwgNjk4MzYsIDY5ODQyLCA2OTg2MiwgNzAxMzUsIAorICAgIDcwMTQxLCA2OTg2OCwgNzAxNDcsIDY5ODc0LCA2OTg4MCwgNjk4ODYsIDY5ODkyLCA2OTg5OCwgMjk1MCwgMjk1NSwgCisgICAgNzAxNTMsIDcwMTU4LCA3MDE2MSwgNzAxNjcsIDcwMTczLCA3MDE4MCwgNzAxODUsIDcwMTkwLCAyMjQzLCAKIH07CiAKIC8qIGNvZGUtPm5hbWUgcGhyYXNlYm9vayAqLwogI2RlZmluZSBwaHJhc2Vib29rX3NoaWZ0IDcKLSNkZWZpbmUgcGhyYXNlYm9va19zaG9ydCAyMjIKKyNkZWZpbmUgcGhyYXNlYm9va19zaG9ydCAyMTYKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBocmFzZWJvb2tbXSA9IHsKLSAgICAwLCAyMzcsIDY5LCAyMjksIDE2NSwgNzYsIDIzMSwgMTk5LCA3NiwgNjUsIDUzLCAyMzcsIDE3OSwgNTMsIDIzNSwgODYsIAotICAgIDUzLCAyMzAsIDE0MiwgMjI5LCAxNzIsIDQyLCAyMjgsIDE4MCwgNDEsIDIyOCwgMTgwLCAyMzEsIDE5OCwgNzksIDUzLCAKLSAgICAyMzcsIDY3LCAyMjcsIDE5MywgMjQ2LCAxNjIsIDI0MCwgMTIxLCAyMzMsIDEwNCwgMjEsIDI0MCwgMTI2LCAyMSwgMTE4LCAKLSAgICAyMSwgMTEzLCAyMSwgMTY2LCAyMSwgMTU4LCAyMSwgMTczLCAyMSwgMTgzLCAyMSwgMTk0LCAyMSwgMTg3LCAyMSwgMTkyLCAKLSAgICAyMzcsIDY2LCAyMzAsIDE0MCwgMjMxLCAxOTAsIDUzLCAyMzcsIDUxLCA1MywgMjI4LCAxNzUsIDUzLCAyMzMsIDgyLCA3NiwgCi0gICAgMjMwLCAxNDUsIDI1MywgMTEzLCA3LCA2LCAxLCA1NywgNywgNiwgMSwgMjU0LCAxODUsIDcsIDYsIDEsIDI1NCwgMTk0LCA3LCAKLSAgICA2LCAxLCAyMjIsIDIyMiwgNywgNiwgMSwgNzIsIDcsIDYsIDEsIDI1NCwgMTkxLCA3LCA2LCAxLCAyMTQsIDcsIDYsIDEsIAotICAgIDIxMiwgNywgNiwgMSwgNzQsIDcsIDYsIDEsIDI1NCwgMTkyLCA3LCA2LCAxLCAyNTQsIDE4NiwgNywgNiwgMSwgMTQ5LCA3LCAKLSAgICA2LCAxLCAxODUsIDcsIDYsIDEsIDE5OSwgNywgNiwgMSwgNzMsIDcsIDYsIDEsIDI1NCwgMTg3LCA3LCA2LCAxLCAyNTQsIAotICAgIDE5NiwgNywgNiwgMSwgMTQ2LCA3LCA2LCAxLCAxOTMsIDcsIDYsIDEsIDI1NCwgMTgzLCA3LCA2LCAxLCA2NiwgNywgNiwgMSwgCi0gICAgMTk2LCA3LCA2LCAxLCAyNTQsIDE5NSwgNywgNiwgMSwgMjU0LCAxODQsIDcsIDYsIDEsIDI1NCwgMTkwLCA3LCA2LCAxLCAKLSAgICAyNTQsIDE5MywgNDIsIDM3LCAxMDQsIDIzNSwgMzcsIDIzMywgMTA0LCA0MSwgMzcsIDEwNCwgMjMwLCAxMjUsIDIzNSwgMjQsIAotICAgIDE4NCwgMjQwLCAxMzgsIDI0MCwgMTYzLCAyMzUsIDI0LCA3LCAzLCAxLCA1NywgNywgMywgMSwgMjU0LCAxODUsIDcsIDMsIAotICAgIDEsIDI1NCwgMTk0LCA3LCAzLCAxLCAyMjIsIDIyMiwgNywgMywgMSwgNzIsIDcsIDMsIDEsIDI1NCwgMTkxLCA3LCAzLCAxLCAKLSAgICAyMTQsIDcsIDMsIDEsIDIxMiwgNywgMywgMSwgNzQsIDcsIDMsIDEsIDI1NCwgMTkyLCA3LCAzLCAxLCAyNTQsIDE4NiwgNywgCi0gICAgMywgMSwgMTQ5LCA3LCAzLCAxLCAxODUsIDcsIDMsIDEsIDE5OSwgNywgMywgMSwgNzMsIDcsIDMsIDEsIDI1NCwgMTg3LCA3LCAKLSAgICAzLCAxLCAyNTQsIDE5NiwgNywgMywgMSwgMTQ2LCA3LCAzLCAxLCAxOTMsIDcsIDMsIDEsIDI1NCwgMTgzLCA3LCAzLCAxLCAKLSAgICA2NiwgNywgMywgMSwgMTk2LCA3LCAzLCAxLCAyNTQsIDE5NSwgNywgMywgMSwgMjU0LCAxODQsIDcsIDMsIDEsIDI1NCwgCi0gICAgMTkwLCA3LCAzLCAxLCAyNTQsIDE5MywgNDIsIDI0MCwgMTM3LCAxMDQsIDYxLCAyNDAsIDEzOCwgNDEsIDI0MCwgMTM3LCAKLSAgICAxMDQsIDIwNSwgMjMzLCAxNzMsIDIzNywgNjksIDIzMywgNzAsIDIyOSwgMTY1LCA3NiwgMjQ4LCA3LCA1MywgMjQxLCAyMTUsIAotICAgIDUzLCAyMzMsIDExMiwgNTMsIDI1NCwgMTksIDUzLCAyMzcsIDE1MCwgMTI1LCAyMzUsIDEzNSwgNTMsIDIxOSwgMjMyLCAKLSAgICAxMDMsIDUzLCAyMzMsIDIwNCwgMjM1LCAxOTcsIDIzMCwgMTU2LCAyMjcsIDE4NSwgNDcsIDI0MCwgMTE3LCAyMzEsIDE5OSwgCi0gICAgNzYsIDE5MCwgNTMsIDI0NiwgMjI3LCAyMzUsIDY5LCAyMzEsIDEzMSwgNTMsIDIzNSwgMTYsIDIzNywgMTc3LCA1MywgMjMxLCAKLSAgICAxMjIsIDUzLCAyMjksIDE2MywgMTEzLCAyMjksIDE2MywgMTY2LCAyNDAsIDE1OSwgMjM1LCAyNCwgMjQ0LCAxNDIsIDUzLCAKLSAgICAyMzUsIDIwMSwgNTMsIDIzNywgNDQsIDI0NiwgMTY0LCAyMzMsIDc5LCAyMjksIDE2MywgMTE4LCAyMzIsIDIyOCwgMjM1LCAKLSAgICAxOTcsIDIzMCwgMTU2LCAyMjcsIDEzMywgNDcsIDI0MCwgMTE3LCAyMzEsIDE5OSwgNzYsIDIzNywgODAsIDIzMywgNzYsIAotICAgIDE2OCwgMjMzLCAxNTUsIDIzNywgODAsIDIzMywgNzYsIDE2OCwgMjQwLCAxNzAsIDIzNywgODAsIDIzMywgNzYsIDE1MiwgCi0gICAgMjMyLCA0MSwgMjMzLCA3MCwgMjMzLCA4MiwgNzYsIDcsIDYsIDEsIDEwMiwgMiwgMjM3LCAzNiwgNywgNiwgMSwgMTAyLCAyLCAKLSAgICAxNTUsIDcsIDYsIDEsIDEwMiwgMiwgMjI5LCAxNjIsIDcsIDYsIDEsIDEwMiwgMiwgMjA1LCA3LCA2LCAxLCAxMDIsIDIsIAotICAgIDIxOSwgNywgNiwgMSwgMTAyLCAyLCAyNDYsIDE3NCwgNDYsIDcsIDYsIDEsIDI1MywgNCwgNywgNiwgMSwgMjU1LCA2MiwgMiwgCi0gICAgMjMzLCA3OSwgNywgNiwgMSwgMTYxLCAyLCAyMzcsIDM2LCA3LCA2LCAxLCAxNjEsIDIsIDE1NSwgNywgNiwgMSwgMTYxLCAyLCAKLSAgICAyMjksIDE2MiwgNywgNiwgMSwgMTYxLCAyLCAyMTksIDcsIDYsIDEsIDI1NSwgNTUsIDIsIDIzNywgMzYsIDcsIDYsIDEsIAotICAgIDI1NSwgNTUsIDIsIDE1NSwgNywgNiwgMSwgMjU1LCA1NSwgMiwgMjI5LCAxNjIsIDcsIDYsIDEsIDI1NSwgNTUsIDIsIDIxOSwgCi0gICAgNywgNiwgMSwgMjQ2LCAyNDIsIDcsIDYsIDEsIDI1NSwgNjAsIDIsIDIwNSwgNywgNiwgMSwgMTMwLCAyLCAyMzcsIDM2LCA3LCAKLSAgICA2LCAxLCAxMzAsIDIsIDE1NSwgNywgNiwgMSwgMTMwLCAyLCAyMjksIDE2MiwgNywgNiwgMSwgMTMwLCAyLCAyMDUsIDcsIDYsIAotICAgIDEsIDEzMCwgMiwgMjE5LCAyMjcsIDEzNCwgNTMsIDcsIDYsIDEsIDEzMCwgMiwgODIsIDcsIDYsIDEsIDk3LCAyLCAyMzcsIAotICAgIDM2LCA3LCA2LCAxLCA5NywgMiwgMTU1LCA3LCA2LCAxLCA5NywgMiwgMjI5LCAxNjIsIDcsIDYsIDEsIDk3LCAyLCAyMTksIAotICAgIDcsIDYsIDEsIDI1NSwgNjQsIDIsIDE1NSwgNywgNiwgMSwgMjM3LCAyMTksIDcsIDMsIDEsIDI0MCwgMjM1LCAxOTMsIDcsIAotICAgIDMsIDEsIDEwMiwgMiwgMjM3LCAzNiwgNywgMywgMSwgMTAyLCAyLCAxNTUsIDcsIDMsIDEsIDEwMiwgMiwgMjI5LCAxNjIsIAotICAgIDcsIDMsIDEsIDEwMiwgMiwgMjA1LCA3LCAzLCAxLCAxMDIsIDIsIDIxOSwgNywgMywgMSwgMTAyLCAyLCAyNDYsIDE3NCwgCi0gICAgNDYsIDcsIDMsIDEsIDI1MywgNCwgNywgMywgMSwgMjU1LCA2MiwgMiwgMjMzLCA3OSwgNywgMywgMSwgMTYxLCAyLCAyMzcsIAotICAgIDM2LCA3LCAzLCAxLCAxNjEsIDIsIDE1NSwgNywgMywgMSwgMTYxLCAyLCAyMjksIDE2MiwgNywgMywgMSwgMTYxLCAyLCAKLSAgICAyMTksIDcsIDMsIDEsIDI1NSwgNTUsIDIsIDIzNywgMzYsIDcsIDMsIDEsIDI1NSwgNTUsIDIsIDE1NSwgNywgMywgMSwgCi0gICAgMjU1LCA1NSwgMiwgMjI5LCAxNjIsIDcsIDMsIDEsIDI1NSwgNTUsIDIsIDIxOSwgNywgMywgMSwgMjQ2LCAyNDIsIDcsIDMsIAotICAgIDEsIDI1NSwgNjAsIDIsIDIwNSwgNywgMywgMSwgMTMwLCAyLCAyMzcsIDM2LCA3LCAzLCAxLCAxMzAsIDIsIDE1NSwgNywgMywgCi0gICAgMSwgMTMwLCAyLCAyMjksIDE2MiwgNywgMywgMSwgMTMwLCAyLCAyMDUsIDcsIDMsIDEsIDEzMCwgMiwgMjE5LCAyMzMsIAotICAgIDEzMCwgNTMsIDcsIDMsIDEsIDEzMCwgMiwgODIsIDcsIDMsIDEsIDk3LCAyLCAyMzcsIDM2LCA3LCAzLCAxLCA5NywgMiwgCi0gICAgMTU1LCA3LCAzLCAxLCA5NywgMiwgMjI5LCAxNjIsIDcsIDMsIDEsIDk3LCAyLCAyMTksIDcsIDMsIDEsIDI1NSwgNjQsIDIsIAotICAgIDE1NSwgNywgMywgMSwgMjM3LCAyMTksIDcsIDMsIDEsIDI1NSwgNjQsIDIsIDIxOSwgNywgNiwgMSwgMTAyLCAyLCAyMzUsIAotICAgIDE2LCA3LCAzLCAxLCAxMDIsIDIsIDIzNSwgMTYsIDcsIDYsIDEsIDEwMiwgMiwgMjM3LCA0NiwgNywgMywgMSwgMTAyLCAyLCAKLSAgICAyMzcsIDQ2LCA3LCA2LCAxLCAxMDIsIDIsIDIzNSwgNDcsIDcsIDMsIDEsIDEwMiwgMiwgMjM1LCA0NywgNywgNiwgMSwgCi0gICAgMjU1LCA2MiwgMiwgMTU1LCA3LCAzLCAxLCAyNTUsIDYyLCAyLCAxNTUsIDcsIDYsIDEsIDI1NSwgNjIsIDIsIDIyOSwgMTYyLCAKLSAgICA3LCAzLCAxLCAyNTUsIDYyLCAyLCAyMjksIDE2MiwgNywgNiwgMSwgMjU1LCA2MiwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIAotICAgIDYyLCAyLCA1NiwgNDYsIDcsIDYsIDEsIDI1NSwgNjIsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDI1NSwgNjIsIDIsIDIzNywgCi0gICAgNDMsIDcsIDYsIDEsIDI1NSwgNjMsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDI1NSwgNjMsIDIsIDIzNywgNDMsIDcsIDYsIDEsIAotICAgIDI1NSwgNjMsIDIsIDgyLCA3LCAzLCAxLCAyNTUsIDYzLCAyLCA4MiwgNywgNiwgMSwgMTYxLCAyLCAyMzUsIDE2LCA3LCAzLCAKLSAgICAxLCAxNjEsIDIsIDIzNSwgMTYsIDcsIDYsIDEsIDE2MSwgMiwgMjM3LCA0NiwgNywgMywgMSwgMTYxLCAyLCAyMzcsIDQ2LCAKLSAgICA3LCA2LCAxLCAxNjEsIDIsIDU2LCA0NiwgNywgMywgMSwgMTYxLCAyLCA1NiwgNDYsIDcsIDYsIDEsIDE2MSwgMiwgMjM1LCAKLSAgICA0NywgNywgMywgMSwgMTYxLCAyLCAyMzUsIDQ3LCA3LCA2LCAxLCAxNjEsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDE2MSwgMiwgCi0gICAgMjM3LCA0MywgNywgNiwgMSwgMjU1LCA2NSwgMiwgMjI5LCAxNjIsIDcsIDMsIDEsIDI1NSwgNjUsIDIsIDIyOSwgMTYyLCA3LCAKLSAgICA2LCAxLCAyNTUsIDY1LCAyLCAyMzcsIDQ2LCA3LCAzLCAxLCAyNTUsIDY1LCAyLCAyMzcsIDQ2LCA3LCA2LCAxLCAyNTUsIAotICAgIDY1LCAyLCA1NiwgNDYsIDcsIDMsIDEsIDI1NSwgNjUsIDIsIDU2LCA0NiwgNywgNiwgMSwgMjU1LCA2NSwgMiwgMjMzLCA3OSwgCi0gICAgNywgMywgMSwgMjU1LCA2NSwgMiwgMjMzLCA3OSwgNywgNiwgMSwgMjU1LCA2NiwgMiwgMjI5LCAxNjIsIDcsIDMsIDEsIAotICAgIDI1NSwgNjYsIDIsIDIyOSwgMTYyLCA3LCA2LCAxLCAyNTUsIDY2LCAyLCA4MiwgNywgMywgMSwgMjU1LCA2NiwgMiwgODIsIAotICAgIDcsIDYsIDEsIDI1NSwgNTUsIDIsIDIwNSwgNywgMywgMSwgMjU1LCA1NSwgMiwgMjA1LCA3LCA2LCAxLCAyNTUsIDU1LCAyLCAKLSAgICAyMzUsIDE2LCA3LCAzLCAxLCAyNTUsIDU1LCAyLCAyMzUsIDE2LCA3LCA2LCAxLCAyNTUsIDU1LCAyLCAyMzcsIDQ2LCA3LCAKLSAgICAzLCAxLCAyNTUsIDU1LCAyLCAyMzcsIDQ2LCA3LCA2LCAxLCAyNTUsIDU1LCAyLCAyMzUsIDQ3LCA3LCAzLCAxLCAyNTUsIAotICAgIDU1LCAyLCAyMzUsIDQ3LCA3LCA2LCAxLCAyNTUsIDU1LCAyLCA1NiwgNDYsIDcsIDMsIDEsIDIzNSwgNDYsIDc0LCA3LCA2LCAKLSAgICAyMCwgMjUzLCAyMzEsIDcsIDMsIDIwLCAyNTMsIDIzMSwgNywgNiwgMSwgMjU1LCA3MywgMiwgMjI5LCAxNjIsIDcsIDMsIDEsIAotICAgIDI1NSwgNzMsIDIsIDIyOSwgMTYyLCA3LCA2LCAxLCAyNTUsIDY3LCAyLCAyMzMsIDc5LCA3LCAzLCAxLCAyNTUsIDY3LCAyLCAKLSAgICAyMzMsIDc5LCA3LCAzLCAxLCAyNTAsIDE4NiwgNywgNiwgMSwgMjU1LCA1OCwgMiwgMTU1LCA3LCAzLCAxLCAyNTUsIDU4LCAKLSAgICAyLCAxNTUsIDcsIDYsIDEsIDI1NSwgNTgsIDIsIDIzMywgNzksIDcsIDMsIDEsIDI1NSwgNTgsIDIsIDIzMywgNzksIDcsIDYsIAotICAgIDEsIDI1NSwgNTgsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDI1NSwgNTgsIDIsIDIzNywgNDMsIDcsIDYsIDEsIDI1NSwgNTgsIAotICAgIDIsIDIzNywgNDQsIDI0NiwgMTY0LCA3LCAzLCAxLCAyNTUsIDU4LCAyLCAyMzcsIDQ0LCAyNDYsIDE2NCwgNywgNiwgMSwgCi0gICAgMjU1LCA1OCwgMiwgODIsIDcsIDMsIDEsIDI1NSwgNTgsIDIsIDgyLCA3LCA2LCAxLCAyNTUsIDYwLCAyLCAxNTUsIDcsIDMsIAotICAgIDEsIDI1NSwgNjAsIDIsIDE1NSwgNywgNiwgMSwgMjU1LCA2MCwgMiwgMjMzLCA3OSwgNywgMywgMSwgMjU1LCA2MCwgMiwgCi0gICAgMjMzLCA3OSwgNywgNiwgMSwgMjU1LCA2MCwgMiwgMjM3LCA0MywgNywgMywgMSwgMjU1LCA2MCwgMiwgMjM3LCA0MywgNywgCi0gICAgMywgMSwgMjU1LCA2MCwgMjM0LCAxOTcsIDI1NCwgMjA1LCAyMjksIDE3MiwgNywgNiwgMSwgMjQ3LCAwLCA3LCAzLCAxLCAKLSAgICAyNDcsIDAsIDcsIDYsIDEsIDEzMCwgMiwgMjM1LCAxNiwgNywgMywgMSwgMTMwLCAyLCAyMzUsIDE2LCA3LCA2LCAxLCAxMzAsIAotICAgIDIsIDIzNywgNDYsIDcsIDMsIDEsIDEzMCwgMiwgMjM3LCA0NiwgNywgNiwgMSwgMTMwLCAyLCA0NywgMTU1LCA3LCAzLCAxLCAKLSAgICAxMzAsIDIsIDQ3LCAxNTUsIDcsIDYsIDIwLCAyNTMsIDE1LCA3LCAzLCAyMCwgMjUzLCAxNSwgNywgNiwgMSwgMjU1LCA1NywgCi0gICAgMiwgMTU1LCA3LCAzLCAxLCAyNTUsIDU3LCAyLCAxNTUsIDcsIDYsIDEsIDI1NSwgNTcsIDIsIDIzMywgNzksIDcsIDMsIDEsIAotICAgIDI1NSwgNTcsIDIsIDIzMywgNzksIDcsIDYsIDEsIDI1NSwgNTcsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDI1NSwgNTcsIDIsIAotICAgIDIzNywgNDMsIDcsIDYsIDEsIDI1NSwgNTksIDIsIDE1NSwgNywgMywgMSwgMjU1LCA1OSwgMiwgMTU1LCA3LCA2LCAxLCAKLSAgICAyNTUsIDU5LCAyLCAyMjksIDE2MiwgNywgMywgMSwgMjU1LCA1OSwgMiwgMjI5LCAxNjIsIDcsIDYsIDEsIDI1NSwgNTksIDIsIAotICAgIDIzMywgNzksIDcsIDMsIDEsIDI1NSwgNTksIDIsIDIzMywgNzksIDcsIDYsIDEsIDI1NSwgNTksIDIsIDIzNywgNDMsIDcsIAotICAgIDMsIDEsIDI1NSwgNTksIDIsIDIzNywgNDMsIDcsIDYsIDEsIDI1NSwgNjEsIDIsIDIzMywgNzksIDcsIDMsIDEsIDI1NSwgCi0gICAgNjEsIDIsIDIzMywgNzksIDcsIDYsIDEsIDI1NSwgNjEsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDI1NSwgNjEsIDIsIDIzNywgCi0gICAgNDMsIDcsIDYsIDEsIDI1NSwgNjEsIDIsIDgyLCA3LCAzLCAxLCAyNTUsIDYxLCAyLCA4MiwgNywgNiwgMSwgOTcsIDIsIAotICAgIDIwNSwgNywgMywgMSwgOTcsIDIsIDIwNSwgNywgNiwgMSwgOTcsIDIsIDIzNSwgMTYsIDcsIDMsIDEsIDk3LCAyLCAyMzUsIAotICAgIDE2LCA3LCA2LCAxLCA5NywgMiwgMjM3LCA0NiwgNywgMywgMSwgOTcsIDIsIDIzNywgNDYsIDcsIDYsIDEsIDk3LCAyLCAKLSAgICAyNDYsIDE3NCwgNDYsIDcsIDMsIDEsIDk3LCAyLCAyNDYsIDE3NCwgNDYsIDcsIDYsIDEsIDk3LCAyLCA0NywgMTU1LCA3LCAKLSAgICAzLCAxLCA5NywgMiwgNDcsIDE1NSwgNywgNiwgMSwgOTcsIDIsIDIzNSwgNDcsIDcsIDMsIDEsIDk3LCAyLCAyMzUsIDQ3LCAKLSAgICA3LCA2LCAxLCAyNTUsIDcxLCAyLCAyMjksIDE2MiwgNywgMywgMSwgMjU1LCA3MSwgMiwgMjI5LCAxNjIsIDcsIDYsIDEsIAotICAgIDI1NSwgNjQsIDIsIDIyOSwgMTYyLCA3LCAzLCAxLCAyNTUsIDY0LCAyLCAyMjksIDE2MiwgNywgNiwgMSwgMjU1LCA2NCwgMiwgCi0gICAgMjE5LCA3LCA2LCAxLCAyNTUsIDU2LCAyLCAxNTUsIDcsIDMsIDEsIDI1NSwgNTYsIDIsIDE1NSwgNywgNiwgMSwgMjU1LCAKLSAgICA1NiwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIDU2LCAyLCA1NiwgNDYsIDcsIDYsIDEsIDI1NSwgNTYsIDIsIDIzNywgNDMsIAotICAgIDcsIDMsIDEsIDI1NSwgNTYsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDE4MiwgMTkzLCA3LCAzLCAxLCA0NSwgMiwgODIsIDcsIAotICAgIDYsIDEsIDQ1LCAyLCA4OCwgNywgNiwgMSwgNDUsIDIsIDIzNSwgMTA0LCA3LCAzLCAxLCA0NSwgMiwgMjM1LCAxMDQsIDcsIAotICAgIDYsIDEsIDIwNiwgMTgzLCA3LCAzLCAxLCAyMDYsIDE4MywgNywgNiwgMSwgMjQ2LCAxNTcsIDczLCA3LCA2LCAxLCAyNTUsIAotICAgIDYyLCAyLCA4OCwgNywgMywgMSwgMjU1LCA2MiwgMiwgODgsIDcsIDYsIDEsIDIzNSwgMjM5LCAyMjIsIDIyMiwgNywgNiwgMSwgCi0gICAgMjU1LCA2MywgMiwgODgsIDcsIDYsIDEsIDI1NSwgNjMsIDIsIDIzNSwgMTA0LCA3LCAzLCAxLCAyNTUsIDYzLCAyLCAyMzUsIAotICAgIDEwNCwgNywgMywgMSwgMjA5LCAyMzcsIDc1LCA3LCA2LCAxLCAyMDAsIDcyLCA3LCA2LCAxLCAyMzcsIDE0NCwgNywgNiwgMSwgCi0gICAgMjQ2LCAxNTcsIDcyLCA3LCA2LCAxLCAyNTUsIDcyLCAyLCA4OCwgNywgMywgMSwgMjU1LCA3MiwgMiwgODgsIDcsIDYsIDEsIAotICAgIDI1NSwgNjUsIDIsIDg4LCA3LCA2LCAxLCAyMzcsIDYxLCA3LCAzLCAxLCAyNTMsIDIyNywgNywgNiwgMSwgMjQwLCAxNDYsIAotICAgIDcsIDYsIDEsIDI1NSwgNTUsIDIsIDgyLCA3LCA2LCAxLCAyNTUsIDY3LCAyLCA4OCwgNywgMywgMSwgMjU1LCA2NywgMiwgCi0gICAgODgsIDcsIDMsIDEsIDI1NSwgNTgsIDIsIDEyNSwgNywgMywgMSwgMjM5LCA4MCwgMiwgODIsIDcsIDYsIDEsIDIwOSwgMTg1LCAKLSAgICA3LCA2LCAxLCAyNTUsIDYwLCAyLCA0MiwgODgsIDcsIDMsIDEsIDI1NSwgNjAsIDIsIDE4MiwgNDEsIDI0NywgMywgNywgNiwgCi0gICAgMSwgMTMwLCAyLCAyMzcsIDQ0LCAyMDUsIDcsIDYsIDEsIDEzMCwgMiwgMjQwLCAxNzksIDcsIDMsIDEsIDEzMCwgMiwgMjQwLCAKLSAgICAxNzksIDcsIDYsIDEsIDI1MywgMTU3LCA3LCAzLCAxLCAyNTMsIDE1NywgNywgNiwgMSwgMjU1LCA3MCwgMiwgODgsIDcsIDMsIAotICAgIDEsIDI1NSwgNzAsIDIsIDg4LCA3LCAxLCAyNTQsIDIwLCA3LCA2LCAxLCAyMDYsIDExMywgNywgMywgMSwgMjA2LCAxMTMsIAotICAgIDcsIDYsIDEsIDI0NiwgMjMyLCA3LCAxLCAyMDAsIDI1MywgMTQ2LCAyNDAsIDIwMiwgNywgMywgMSwgMjU1LCA2MSwgMiwgCi0gICAgMjM1LCAzNiwgODgsIDcsIDYsIDEsIDI1NSwgNjEsIDIsIDg4LCA3LCAzLCAxLCAyNTUsIDYxLCAyLCA4OCwgNywgNiwgMSwgCi0gICAgMjU1LCA2MSwgMiwgMjMxLCAyMDEsIDg4LCA3LCA2LCAxLCA5NywgMiwgMjQwLCAxNzksIDcsIDMsIDEsIDk3LCAyLCAyNDAsIAotICAgIDE3OSwgNywgNiwgMSwgMjMzLCA5MiwgNywgNiwgMSwgMjU1LCA2OSwgMiwgODgsIDcsIDYsIDEsIDI1NSwgNjQsIDIsIDg4LCAKLSAgICA3LCAzLCAxLCAyNTUsIDY0LCAyLCA4OCwgNywgNiwgMSwgMjU1LCA1NiwgMiwgODIsIDcsIDMsIDEsIDI1NSwgNTYsIDIsIAotICAgIDgyLCA3LCA2LCAxLCAyNDcsIDc0LCA3LCA2LCAxLCAyNTMsIDEwMSwgMjMyLCA1LCA3LCAzLCAxLCAyNTMsIDEwMSwgMjMyLCAKLSAgICA1LCA3LCAzLCAxLCAyNTMsIDEwMSwgMiwgMjQwLCAxMzMsIDcsIDEsIDEzNSwgMiwgODIsIDcsIDYsIDEsIDIwNiwgMTczLCAKLSAgICA3LCAzLCAxLCAyMDYsIDE3MywgNywgMSwgMjMzLCA3MCwgMjM1LCAzMSwgMjQ3LCAyMCwgMiwgODIsIDcsIDEsIDI0MiwgMjcsIAotICAgIDcsIDEsIDIzOCwgMTgxLCAyMzcsIDE1MSwgNywgMSwgMjM2LCAxMzAsIDIzNywgMTUxLCA3LCAxLCAyMzQsIDEsIDIzNywgCi0gICAgMTUxLCA3LCAxLCAyMzEsIDIwMSwgMjM3LCAxNTEsIDcsIDYsIDEsIDI1NCwgMjM1LCAyLCAyMzcsIDQzLCA3LCA2LCAxLCAKLSAgICAyNTUsIDYzLCAyLCAzLCAxLCAyNTUsIDU2LCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAyNTQsIDIzNSwgMiwgMjM3LCA0MywgNywgCi0gICAgNiwgMSwgMjUzLCAyNDQsIDcsIDYsIDEsIDI1NSwgNTgsIDIsIDMsIDEsIDI1NCwgMTkyLCA3LCAzLCAxLCAyNTMsIDI0NCwgCi0gICAgNywgNiwgMSwgMjUzLCAyNTAsIDcsIDYsIDEsIDI1NSwgNjAsIDIsIDMsIDEsIDI1NCwgMTkyLCA3LCAzLCAxLCAyNTMsIAotICAgIDI1MCwgNywgNiwgMSwgMTAyLCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAxMDIsIDIsIDIzNywgNDMsIDcsIDYsIDEsIDI1NSwgCi0gICAgNTUsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDI1NSwgNTUsIDIsIDIzNywgNDMsIDcsIDYsIDEsIDEzMCwgMiwgMjM3LCA0MywgCi0gICAgNywgMywgMSwgMTMwLCAyLCAyMzcsIDQzLCA3LCA2LCAxLCA5NywgMiwgMjM3LCA0MywgNywgMywgMSwgOTcsIDIsIDIzNywgCi0gICAgNDMsIDcsIDYsIDEsIDk3LCAyLCAyMzEsIDIwMywgMjIsIDIzNSwgMTYsIDcsIDMsIDEsIDk3LCAyLCAyMzEsIDIwMywgMjIsIAotICAgIDIzNSwgMTYsIDcsIDYsIDEsIDk3LCAyLCAyMzEsIDIwMywgMjIsIDE1NSwgNywgMywgMSwgOTcsIDIsIDIzMSwgMjAzLCAyMiwgCi0gICAgMTU1LCA3LCA2LCAxLCA5NywgMiwgMjMxLCAyMDMsIDIyLCAyMzcsIDQzLCA3LCAzLCAxLCA5NywgMiwgMjMxLCAyMDMsIDIyLCAKLSAgICAyMzcsIDQzLCA3LCA2LCAxLCA5NywgMiwgMjMxLCAyMDMsIDIyLCAyMzcsIDM2LCA3LCAzLCAxLCA5NywgMiwgMjMxLCAyMDMsIAotICAgIDIyLCAyMzcsIDM2LCA3LCAzLCAxLCAyMDksIDcyLCA3LCA2LCAxLCAxMDIsIDIsIDIzMSwgMjAzLCAyMiwgMjM1LCAxNiwgNywgCi0gICAgMywgMSwgMTAyLCAyLCAyMzEsIDIwMywgMjIsIDIzNSwgMTYsIDcsIDYsIDEsIDEwMiwgMiwgNTYsIDY0LCAyMiwgMjM1LCAKLSAgICAxNiwgNywgMywgMSwgMTAyLCAyLCA1NiwgNjQsIDIyLCAyMzUsIDE2LCA3LCA2LCAxLCAyNTQsIDIxNSwgMiwgMjM1LCAxNiwgCi0gICAgNywgMywgMSwgMjU0LCAyMTUsIDIsIDIzNSwgMTYsIDcsIDYsIDEsIDI1NSwgNjUsIDIsIDgyLCA3LCAzLCAxLCAyNTUsIDY1LCAKLSAgICAyLCA4MiwgNywgNiwgMSwgMjU1LCA2NSwgMiwgMjM3LCA0MywgNywgMywgMSwgMjU1LCA2NSwgMiwgMjM3LCA0MywgNywgNiwgCi0gICAgMSwgMjU1LCA2NywgMiwgMjM3LCA0MywgNywgMywgMSwgMjU1LCA2NywgMiwgMjM3LCA0MywgNywgNiwgMSwgMTMwLCAyLCAKLSAgICAyMzUsIDQ3LCA3LCAzLCAxLCAxMzAsIDIsIDIzNSwgNDcsIDcsIDYsIDEsIDEzMCwgMiwgMjM3LCAyMDgsIDIyLCAyMzUsIAotICAgIDE2LCA3LCAzLCAxLCAxMzAsIDIsIDIzNywgMjA4LCAyMiwgMjM1LCAxNiwgNywgNiwgMSwgMjUzLCAxMDEsIDIsIDIzNywgCi0gICAgNDMsIDcsIDMsIDEsIDI1MywgMTAxLCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAyNTUsIDczLCAyLCAyMzcsIDQzLCA3LCA2LCAxLCAKLSAgICAyNTMsIDIxNywgNywgNiwgMSwgMjU1LCA2MywgMiwgMywgMSwgMjU0LCAxOTMsIDcsIDMsIDEsIDI1MywgMjE3LCA3LCA2LCAKLSAgICAxLCAyNTUsIDY1LCAyLCAxNTUsIDcsIDMsIDEsIDI1NSwgNjUsIDIsIDE1NSwgNywgNiwgMSwgMjM4LCA5LCA3LCA2LCAxLCAKLSAgICAyNDIsIDI3LCA3LCA2LCAxLCAyNTUsIDYwLCAyLCAyMzcsIDM2LCA3LCAzLCAxLCAyNTUsIDYwLCAyLCAyMzcsIDM2LCA3LCAKLSAgICA2LCAxLCAxMDIsIDIsIDI0NiwgMTc0LCA2NCwgMjIsIDE1NSwgNywgMywgMSwgMTAyLCAyLCAyNDYsIDE3NCwgNjQsIDIyLCAKLSAgICAxNTUsIDcsIDYsIDEsIDI1NCwgMjE1LCAyLCAxNTUsIDcsIDMsIDEsIDI1NCwgMjE1LCAyLCAxNTUsIDcsIDYsIDEsIDEzMCwgCi0gICAgMiwgMTk1LCAyMiwgMTU1LCA3LCAzLCAxLCAxMzAsIDIsIDE5NSwgMjIsIDE1NSwgNywgNiwgMSwgMTAyLCAyLCA0NywgMjM3LCAKLSAgICAzNiwgNywgMywgMSwgMTAyLCAyLCA0NywgMjM3LCAzNiwgNywgNiwgMSwgMTAyLCAyLCAyMzMsIDcwLCAyMzcsIDQ2LCA3LCAKLSAgICAzLCAxLCAxMDIsIDIsIDIzMywgNzAsIDIzNywgNDYsIDcsIDYsIDEsIDE2MSwgMiwgNDcsIDIzNywgMzYsIDcsIDMsIDEsIAotICAgIDE2MSwgMiwgNDcsIDIzNywgMzYsIDcsIDYsIDEsIDE2MSwgMiwgMjMzLCA3MCwgMjM3LCA0NiwgNywgMywgMSwgMTYxLCAyLCAKLSAgICAyMzMsIDcwLCAyMzcsIDQ2LCA3LCA2LCAxLCAyNTUsIDU1LCAyLCA0NywgMjM3LCAzNiwgNywgMywgMSwgMjU1LCA1NSwgMiwgCi0gICAgNDcsIDIzNywgMzYsIDcsIDYsIDEsIDI1NSwgNTUsIDIsIDIzMywgNzAsIDIzNywgNDYsIDcsIDMsIDEsIDI1NSwgNTUsIDIsIAotICAgIDIzMywgNzAsIDIzNywgNDYsIDcsIDYsIDEsIDEzMCwgMiwgNDcsIDIzNywgMzYsIDcsIDMsIDEsIDEzMCwgMiwgNDcsIDIzNywgCi0gICAgMzYsIDcsIDYsIDEsIDEzMCwgMiwgMjMzLCA3MCwgMjM3LCA0NiwgNywgMywgMSwgMTMwLCAyLCAyMzMsIDcwLCAyMzcsIDQ2LCAKLSAgICA3LCA2LCAxLCAyNTUsIDU3LCAyLCA0NywgMjM3LCAzNiwgNywgMywgMSwgMjU1LCA1NywgMiwgNDcsIDIzNywgMzYsIDcsIDYsIAotICAgIDEsIDI1NSwgNTcsIDIsIDIzMywgNzAsIDIzNywgNDYsIDcsIDMsIDEsIDI1NSwgNTcsIDIsIDIzMywgNzAsIDIzNywgNDYsIAotICAgIDcsIDYsIDEsIDk3LCAyLCA0NywgMjM3LCAzNiwgNywgMywgMSwgOTcsIDIsIDQ3LCAyMzcsIDM2LCA3LCA2LCAxLCA5NywgMiwgCi0gICAgMjMzLCA3MCwgMjM3LCA0NiwgNywgMywgMSwgOTcsIDIsIDIzMywgNzAsIDIzNywgNDYsIDcsIDYsIDEsIDI1NSwgNTksIDIsIAotICAgIDI0MCwgMTYyLCA1MSwgNywgMywgMSwgMjU1LCA1OSwgMiwgMjQwLCAxNjIsIDUxLCA3LCA2LCAxLCAyNTUsIDYxLCAyLCAKLSAgICAyNDAsIDE2MiwgNTEsIDcsIDMsIDEsIDI1NSwgNjEsIDIsIDI0MCwgMTYyLCA1MSwgNywgNiwgMSwgMjQyLCAzMiwgNywgMywgCi0gICAgMSwgMjQyLCAzMiwgNywgNiwgMSwgMjU1LCA2NiwgMiwgMjM3LCA0MywgNywgMywgMSwgMjU1LCA2NiwgMiwgMjM3LCA0MywgCi0gICAgNywgNiwgMSwgMjU1LCA2MCwgMiwgMTgyLCA0MSwgMjQ3LCAzLCA3LCAzLCAxLCAyNTUsIDYzLCAyLCAyNDAsIDE2OCwgNywgCi0gICAgNiwgMSwgMjUzLCAxMTksIDcsIDMsIDEsIDI1MywgMTE5LCA3LCA2LCAxLCAyNTUsIDU2LCAyLCA4OCwgNywgMywgMSwgMjU1LCAKLSAgICA1NiwgMiwgODgsIDcsIDYsIDEsIDEwMiwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAxMDIsIDIsIDU2LCA0NiwgNywgNiwgMSwgCi0gICAgMTYxLCAyLCAyMzMsIDc5LCA3LCAzLCAxLCAxNjEsIDIsIDIzMywgNzksIDcsIDYsIDEsIDEzMCwgMiwgMjMxLCAyMDMsIDIyLCAKLSAgICAyMzUsIDE2LCA3LCAzLCAxLCAxMzAsIDIsIDIzMSwgMjAzLCAyMiwgMjM1LCAxNiwgNywgNiwgMSwgMTMwLCAyLCAyNDAsIAotICAgIDEyOCwgMjIsIDIzNSwgMTYsIDcsIDMsIDEsIDEzMCwgMiwgMjQwLCAxMjgsIDIyLCAyMzUsIDE2LCA3LCA2LCAxLCAxMzAsIAotICAgIDIsIDU2LCA0NiwgNywgMywgMSwgMTMwLCAyLCA1NiwgNDYsIDcsIDYsIDEsIDEzMCwgMiwgNTYsIDY0LCAyMiwgMjM1LCAxNiwgCi0gICAgNywgMywgMSwgMTMwLCAyLCA1NiwgNjQsIDIyLCAyMzUsIDE2LCA3LCA2LCAxLCAyNTUsIDY0LCAyLCAyMzUsIDE2LCA3LCAzLCAKLSAgICAxLCAyNTUsIDY0LCAyLCAyMzUsIDE2LCA3LCAzLCAxLCAyNTUsIDU4LCAyLCAyNDAsIDE2OCwgNywgMywgMSwgMjU1LCA2MCwgCi0gICAgMiwgMjQwLCAxNjgsIDcsIDMsIDEsIDI1NSwgNjEsIDIsIDI0MCwgMTY4LCA3LCAzLCAxLCAyMzUsIDQ2LCAyNTQsIDE5MiwgCi0gICAgNywgMywgMSwgMjU1LCAyMiwgMjMzLCAxMTMsIDcsIDMsIDEsIDI1NSwgNDUsIDIzMywgMTEzLCA3LCA2LCAxLCAxMDIsIDIsIAotICAgIDgyLCA3LCA2LCAxLCAyNTUsIDYyLCAyLCA4MiwgNywgMywgMSwgMjU1LCA2MiwgMiwgODIsIDcsIDYsIDEsIDI1NSwgNTgsIAotICAgIDIsIDEyNSwgNywgNiwgMSwgMjU1LCA2MSwgMiwgMjMzLCA3NCwgODIsIDcsIDMsIDEsIDI1NSwgNTksIDIsIDI0MSwgNzcsIAotICAgIDI0MCwgMTMzLCA3LCAzLCAxLCAyNTUsIDU2LCAyLCAyNDEsIDc3LCAyNDAsIDEzMywgNywgNiwgMSwgMjM1LCAzMSwgMjQwLCAKLSAgICAxMjEsIDcsIDMsIDEsIDIzNSwgMzEsIDI0MCwgMTIxLCA3LCA2LCAxLCA0NSwgMiwgODIsIDcsIDYsIDEsIDk3LCAxMjUsIDcsIAotICAgIDYsIDEsIDIwOSwgMTk2LCA3LCA2LCAxLCAxNjEsIDIsIDgyLCA3LCAzLCAxLCAxNjEsIDIsIDgyLCA3LCA2LCAxLCAyNTUsIAotICAgIDczLCAyLCA4MiwgNywgMywgMSwgMjU1LCA3MywgMiwgODIsIDcsIDYsIDEsIDMsIDI1NSwgNzUsIDIsIDI0NiwgMTcxLCAKLSAgICAyNDAsIDEzMywgNywgMywgMSwgMjU1LCA3NSwgMiwgMjQ2LCAxNzEsIDI0MCwgMTMzLCA3LCA2LCAxLCAyNTUsIDU3LCAyLCAKLSAgICA4MiwgNywgMywgMSwgMjU1LCA1NywgMiwgODIsIDcsIDYsIDEsIDI1NSwgNjQsIDIsIDgyLCA3LCAzLCAxLCAyNTUsIDY0LCAKLSAgICAyLCA4MiwgNywgMywgMSwgMjA5LCA1NywgNywgMywgMSwgMjM3LCA3MSwgNywgMywgMSwgMjA5LCAyMzcsIDcxLCA3LCAzLCAKLSAgICAxLCA0NSwgMiwgODgsIDcsIDMsIDEsIDI0NiwgMTU3LCA3MywgNywgMywgMSwgMjU1LCA2MiwgMiwgMjQwLCAxNjgsIDcsIDMsIAotICAgIDEsIDI1NSwgNjMsIDIsIDI0MCwgMTMzLCA3LCAzLCAxLCAyNTUsIDYzLCAyLCA4OCwgNywgMywgMSwgMjAwLCA3MiwgNywgMywgCi0gICAgMSwgMjM3LCAxNDQsIDcsIDMsIDEsIDI0MSwgMTQsIDIsIDg4LCA3LCAzLCAxLCAyNDYsIDE1NywgNzIsIDcsIDMsIDEsIAotICAgIDIwMCwgMjQ2LCAxNTcsIDcyLCA3LCAzLCAxLCAyMDAsIDI0NiwgMTU3LCAxNjEsIDIsIDg4LCA3LCAzLCAxLCAyMzcsIDU4LCAKLSAgICAyMDAsIDI0NiwgMTU3LCA3MiwgNywgMywgMSwgMjM1LCA0NiwgMjU1LCA3MywgMiwgODIsIDcsIDMsIDEsIDI1NSwgNjUsIDIsIAotICAgIDg4LCA3LCAzLCAxLCA5NSwgMjE0LCA3LCAxLCAzLCA2LCAyMTQsIDcsIDMsIDEsIDIzNywgNjEsIDcsIDMsIDEsIDI1MSwgCi0gICAgMTcyLCAyNDAsIDE3OSwgNywgMywgMSwgMjA5LCAyMTIsIDcsIDMsIDEsIDI1NSwgNjYsIDIsIDg4LCA3LCAzLCAxLCAyNTAsIAotICAgIDY3LCAyLCA4OCwgNywgMywgMSwgMjU1LCA1NSwgMiwgODIsIDcsIDMsIDEsIDI0MCwgMTQ2LCA3LCAxLCAzLCA2LCA3NCwgNywgCi0gICAgMywgMSwgMjU1LCA1OCwgMiwgMjM3LCA0NCwgMjA1LCA3LCAzLCAxLCAyNTUsIDU4LCAyLCAyNDIsIDE5OSwgNywgMywgMSwgCi0gICAgMjU1LCA1OCwgMiwgMjMxLCAyMDEsIDg4LCA3LCAzLCAxLCAyNDQsIDk1LCA3LCAzLCAxLCAyMDksIDE4NSwgNywgMywgMSwgCi0gICAgMjA5LCAyNTUsIDY4LCAyLCAxODIsIDI0NywgMywgNywgMywgMSwgMjU1LCA2OCwgMiwgODgsIDcsIDMsIDEsIDI1NSwgNjAsIAotICAgIDIsIDQyLCA4OCwgNywgMywgMSwgMjU1LCA2MCwgMiwgMjMxLCAyMDEsIDg4LCA3LCAxLCAzLCA2LCAxOTksIDcsIDMsIDEsIAotICAgIDIzNywgMTE4LCA3MywgNywgMSwgMywgNiwgMjUzLCAxNSwgNywgMywgMSwgMjM3LCA1OCwgMjM3LCA2OCwgNywgMywgMSwgCi0gICAgMjQ2LCAxOTgsIDcsIDMsIDEsIDIwOSwgMTQ2LCA3LCAzLCAxLCAyMDksIDI1NSwgNTcsIDIsIDE4MiwgMjQ3LCAzLCA3LCAzLCAKLSAgICAxLCAyMDksIDI1NSwgNTcsIDIsIDg4LCA3LCAzLCAxLCAyNTUsIDU3LCAyLCAxODIsIDI0NywgMywgNywgMywgMSwgMjU1LCAKLSAgICA1NywgMiwgMjQwLCAxMzMsIDcsIDMsIDEsIDI1NSwgNTcsIDIsIDIzMSwgMjUxLCA3LCAzLCAxLCAyMDAsIDI1NSwgNTcsIDIsIAotICAgIDIzMSwgMjUxLCA3LCAxLCAzLCA2LCAxNDYsIDcsIDEsIDMsIDYsIDIzMywgNzAsIDE0NiwgNywgMywgMSwgMjU1LCA1OSwgMiwgCi0gICAgODgsIDcsIDMsIDEsIDI0NiwgMjMyLCA3LCAzLCAxLCAyMzUsIDQ2LCAyNTUsIDczLCAyLCAxOTUsIDIyLCA4OCwgNywgMywgCi0gICAgMSwgMjQxLCAyNTAsIDIwMCwgMjQ2LCAyMzIsIDcsIDMsIDEsIDI1MywgMTQ2LCAyLCAyNDAsIDE2OCwgNywgMywgMSwgMjA5LCAKLSAgICAyNTQsIDE4MywgNywgMywgMSwgMjU1LCA2MSwgMiwgMjMxLCAyMDEsIDg4LCA3LCAzLCAxLCA5NywgMTI1LCA3LCAzLCAxLCAKLSAgICAyMzMsIDkyLCA3LCAzLCAxLCAyNTUsIDY5LCAyLCA4OCwgNywgMywgMSwgMjA5LCAxOTYsIDcsIDMsIDEsIDIwOSwgMjU0LCAKLSAgICAxOTUsIDcsIDMsIDEsIDIwOSwgMjU0LCAxOTAsIDcsIDEsIDMsIDYsIDI1NCwgMTkwLCA3LCAzLCAxLCAyNTUsIDU2LCAyLCAKLSAgICAyMzEsIDIwMSwgODgsIDcsIDMsIDEsIDI1NSwgNTYsIDIsIDI0MCwgMTY4LCA3LCAzLCAxLCAyNDcsIDc0LCA3LCAzLCAxLCAKLSAgICAyNTMsIDEwMSwgMiwgMjQwLCAxNjgsIDcsIDEsIDIzNSwgMzEsIDI0MCwgMTIxLCA3LCAxLCAyMzAsIDEzOCwgMjM3LCAxMDcsIAotICAgIDIzMSwgNzEsIDcsIDEsIDIzMywgNzAsIDIzNSwgMzEsIDI0MCwgMTIxLCA3LCAxLCAyMzMsIDM0LCAyNTQsIDE5NCwgNywgMSwgCi0gICAgMjMzLCAxODgsIDIzNywgMTUxLCA3LCAxLCAzLCA2LCAyNTQsIDE4NSwgNywgMywgMSwgMjM3LCA1OCwgMjQ2LCAxNTcsIDcyLCAKLSAgICA3LCAxLCAzLCA2LCAyNTUsIDY1LCAyLCA4OCwgNywgMSwgMywgNiwgMjEyLCA3LCAzLCAxLCAyNTUsIDczLCAyLCAyMjcsIAotICAgIDIwMCwgNywgMywgMSwgMjA5LCAyNTQsIDE4NiwgNywgMSwgMywgNiwgMTQ5LCA3LCAzLCAxLCAyNTUsIDc1LCAyLCA4OCwgNywgCi0gICAgMSwgMjM1LCAzMSwgMjQ3LCAyMCwgMiwgODIsIDcsIDEsIDIwMCwgMjM1LCAzMSwgMjQ3LCAyMCwgMiwgODIsIDcsIDMsIDEsIAotICAgIDI1NCwgMjM1LCAyMzMsIDExMywgNywgMywgMSwgMjQ5LCAxODgsIDIzMywgMTEzLCA3LCAzLCAxLCAyNTQsIDIzNSwgMjM1LCAKLSAgICA5MCwgMiwgMjQwLCAxNjgsIDcsIDMsIDEsIDI1NSwgNTAsIDIzMywgMTEzLCA3LCAzLCAxLCAyNTIsIDE0LCAyMzMsIDExMywgCi0gICAgNywgMywgMSwgMjU1LCA0NywgMjM1LCA5MCwgMiwgMjQwLCAxNjgsIDcsIDMsIDEsIDI0OSwgMjQzLCAyMzMsIDExMywgNywgCi0gICAgMywgMSwgMjU1LCAzNSwgMjMzLCAxMTMsIDcsIDMsIDEsIDI1NSwgMzYsIDIzMywgMTEzLCA3LCAxLCAyMzMsIDE4OCwgMjI5LCAKLSAgICAyMDksIDcsIDEsIDIzNCwgMjAsIDIyOSwgMjA5LCA3LCAzLCAxLCAyMDksIDI1NSwgNjYsIDIsIDIzMSwgMjUxLCA3LCAzLCAKLSAgICAxLCAyMDksIDI1NSwgNjYsIDIsIDIzMywgMjA2LCAyMiwgMjQwLCAxMzMsIDUyLCAxLCAzLCAyMTIsIDUyLCAxLCAzLCAyNTUsIAotICAgIDY2LCAyLCA4OCwgNTIsIDEsIDMsIDI1NCwgMTkyLCA1MiwgMSwgMywgMTQ2LCA1MiwgMSwgMywgMjA5LCAxNDYsIDUyLCAxLCAKLSAgICAzLCAyMDksIDI1NSwgNTcsIDIsIDg4LCA1MiwgMSwgMywgNiwgMjMzLCA3MCwgMTQ2LCA1MiwgMSwgMywgMjU0LCAxOTUsIAotICAgIDUyLCAxLCAzLCAyNTQsIDE5MCwgNTIsIDEsIDIzNywgMTE0LCA1MiwgMSwgNDcsIDIzNywgMTE0LCA1MiwgMSwgMjA5LCAKLSAgICAyMzcsIDY3LCA1MiwgMSwgMjI5LCAxNzIsIDUyLCAxLCAyMDAsIDIzNywgNjcsIDUyLCAxLCA0MSwgMTMyLCAyNDAsIDE0NywgCi0gICAgNTIsIDEsIDQyLCAxMzIsIDI0MCwgMTQ3LCA1MiwgMSwgMjM1LCAzMSwgMjQwLCAxMjEsIDUyLCAxLCAyMDAsIDIzNSwgMzEsIAotICAgIDI0MCwgMTIxLCA1MiwgMSwgNDIsIDIzMCwgMTMzLCA1MiwgMSwgNDEsIDIzMCwgMTMzLCA1MiwgMSwgOTksIDIzMCwgMTMzLCAKLSAgICA1MiwgMSwgMTAzLCAyMzAsIDEzMywgNTIsIDEsIDIzMCwgMTI1LCAyMzUsIDI0LCAyMzcsIDQzLCA1MiwgMSwgNjEsIDI0MCwgCi0gICAgMTM4LCA1MiwgMSwgMjM1LCAxNiwgNTIsIDEsIDI0MCwgMTU5LCAyMzUsIDI0LCA1MiwgMSwgMjQwLCAxNjMsIDIzNSwgMjQsIAotICAgIDUyLCAxLCAxODQsIDYxLCAyNDAsIDEzOCwgNTIsIDEsIDE4NCwgMjM1LCAxNiwgNTIsIDEsIDE4NCwgMjQwLCAxNjMsIDIzNSwgCi0gICAgMjQsIDUyLCAxLCAxODQsIDI0MCwgMTU5LCAyMzUsIDI0LCA1MiwgMSwgMjMwLCAxNjAsIDIzNywgNjYsIDUyLCAxLCAxMzIsIAotICAgIDIzMCwgMTYwLCAyMzcsIDY2LCA1MiwgMSwgMjM1LCAxMTIsIDQxLCAxMzIsIDI0MCwgMTQ3LCA1MiwgMSwgMjM1LCAxMTIsIAotICAgIDQyLCAxMzIsIDI0MCwgMTQ3LCA1MiwgMSwgOTksIDI0MCwgMTQ5LCA1MiwgMSwgMTAzLCAyNDAsIDE0OSwgNTIsIDEsIDc5LCAKLSAgICA1MywgNTIsIDEsIDI0MCwgMTcyLCA1MywgMjM3LCA0NiwgNTYsIDQ2LCAyNDYsIDE3NCwgNDYsIDIzNSwgNDcsIDMsIDIwNSwgCi0gICAgNDcsIDI0MCwgMTU5LCAyMzUsIDI0LCA1MiwgMSwgMjM5LCAyMjIsIDg4LCA1MiwgMSwgMjQwLCAyMjEsIDIzNSwgMjQsIDUyLCAKLSAgICAxLCAzLCAyMzcsIDYxLCA1MiwgMSwgMywgMTQ5LCA1MiwgMSwgMywgMTkzLCA1MiwgMSwgMywgMjU0LCAxODQsIDUyLCAxLCAKLSAgICAzLCAyMDAsIDIzNSwgMzEsIDI0MCwgMTIxLCA1MiwgMSwgMjMwLCAxNTMsIDIwNiwgMTI1LCA1MiwgMSwgMjAxLCAyMDYsIAotICAgIDEyNSwgNTIsIDEsIDI1MywgMTUyLCAyMDYsIDEyNSwgNTIsIDEsIDE4NCwgMjA2LCAxMjUsIDUyLCAxLCAyMzEsIDIzNywgCi0gICAgMjA2LCAxMjUsIDUyLCAxLCAyNTMsIDEyMiwgMjMxLCAyNDksIDIwNiwgNzYsIDUyLCAxLCAyNDcsIDI0LCAyMzEsIDI0OSwgCi0gICAgMjA2LCA3NiwgNTIsIDEsIDIzNSwgOCwgNTIsIDEsIDIyOSwgMTU5LCA1MiwgMSwgNDcsIDIyOSwgMTcyLCA1MiwgMSwgMTg0LCAKLSAgICAxMDMsIDIzMCwgMTMzLCA1MiwgMSwgMTg0LCA5OSwgMjMwLCAxMzMsIDUyLCAxLCAxODQsIDQyLCAyMzAsIDEzMywgNTIsIDEsIAotICAgIDE4NCwgNDEsIDIzMCwgMTMzLCA1MiwgMSwgMTg0LCAyNDAsIDE0NywgNTIsIDEsIDIzNywgNDQsIDI0MCwgMTYzLCAyMzUsIAotICAgIDI0LCA1MiwgMSwgMjM3LCA0NCwgNDcsIDI0MCwgMTYzLCAyMzUsIDI0LCA1MiwgMSwgMjM3LCA0NCwgNDcsIDI0MCwgMTU5LCAKLSAgICAyMzUsIDI0LCA1MiwgMSwgMTg0LCAyMDUsIDUyLCAxLCAyMzcsIDEwNSwgMjM3LCA2NiwgNTIsIDEsIDI0MCwgMjA1LCAyMDEsIAotICAgIDI0MCwgMTY3LCA1MiwgMSwgMjUyLCAyNTUsIDIwMSwgMjQwLCAxNjcsIDUyLCAxLCAyNDAsIDIwNSwgMTg0LCAyNDAsIDE2NywgCi0gICAgNTIsIDEsIDI1MiwgMjU1LCAxODQsIDI0MCwgMTY3LCA1MiwgMSwgMjM4LCA1MSwgNTIsIDEsIDI0NiwgMTU3LCAyMzgsIDUxLCAKLSAgICA1MiwgMSwgMTg0LCA0MiwgNTgsIDM2LCAyNDAsIDE2MywgMjM1LCAyNCwgMzYsIDI0MCwgMTU5LCAyMzUsIDI0LCAzNiwgCi0gICAgMjMwLCAxMjUsIDIzNSwgMjQsIDM2LCAyMDUsIDM2LCAyMzUsIDE2LCAzNiwgMjMxLCAyMjMsIDM2LCAyMzcsIDQ2LCAzNiwgCi0gICAgNTYsIDQ2LCAzNiwgMjE5LCAzNiwgMjQ2LCAxNzEsIDQ2LCAzNiwgMjQ2LCAxNzQsIDQ2LCAzNiwgNDcsIDI0MCwgMTU5LCAKLSAgICAyMzUsIDI0LCAzNiwgMjM3LCA0MywgMzYsIDYxLCAyNDYsIDE2NywgNDYsIDM2LCA0NywgNjEsIDI0NiwgMTY3LCA0NiwgMzYsIAotICAgIDQ3LCAyNDAsIDE2MywgMjM1LCAyNCwgMzYsIDIyOCwgMTg0LCAzNiwgMjMzLCA3MCwgMjM3LCA0NiwgMzYsIDIwOSwgMjQwLCAKLSAgICAxNjIsIDQ2LCAzNiwgMjQwLCAxNjIsIDQ2LCAzNiwgMjAwLCAyNDAsIDE2MiwgNDYsIDM2LCAyNDAsIDE2MiwgNjQsIDIzNywgCi0gICAgNDEsIDM2LCAyNDAsIDE2MywgMjM3LCA0OCwgNTEsIDM2LCAyNDAsIDE1OSwgMjM3LCA0OCwgNTEsIDM2LCA0MiwgMjQ2LCAKLSAgICAyMTUsIDUxLCAzNiwgNDEsIDI0NiwgMjE1LCA1MSwgMzYsIDQyLCAyNDAsIDExNywgNDYsIDM2LCAyNDAsIDE3OSwgMzYsIAotICAgIDQyLCAxMzIsIDI0NiwgMTc0LCA1MSwgMzYsIDk5LCAyNDYsIDIxNSwgNTEsIDM2LCAxMDMsIDI0NiwgMjE1LCA1MSwgMzYsIAotICAgIDc5LCA1LCA1MSwgMzYsIDI0MCwgMTcyLCA1LCA1MSwgMzYsIDIzMCwgODUsIDI0NiwgMTcxLCA1MSwgMzYsIDIzMSwgMjAxLCAKLSAgICAyNDYsIDE3MSwgNTEsIDM2LCA1NiwgNTEsIDM2LCAyMzEsIDIwMywgNTEsIDM2LCAyNDYsIDE3NCwgNTEsIDM2LCAyNDAsIAotICAgIDE2MiwgNTEsIDM2LCAyMzMsIDc5LCAzNiwgMjM1LCA0NywgMzYsIDYxLCAyNDYsIDE2NywgNTEsIDM2LCAyMzcsIDE3NCwgCi0gICAgNTEsIDM2LCAyMzMsIDcwLCA0NywgMjQ4LCAyMzgsIDUxLCAzNiwgMjQxLCAyOSwgNTEsIDM2LCAyMzAsIDEyNSwgMjM3LCAKLSAgICA0OCwgNTEsIDM2LCAyNDAsIDE2MSwgNTEsIDM2LCAyMzMsIDcwLCAyNDAsIDE2MSwgNTEsIDM2LCAyNDAsIDEyOCwgNTEsIAotICAgIDM2LCAyMzcsIDgzLCA1MSwgMzYsIDE4NCwgMjQwLCAxMzgsIDM2LCA0NywgMTg0LCAyNDAsIDEzOCwgMzYsIDI0MCwgMTI4LCAKLSAgICAyMzMsIDg3LCAzNiwgMjQwLCAxMjUsIDE5NSwgMjMzLCA4NywgMzYsIDE4MiwgMTk1LCAyMzMsIDg3LCAzNiwgMjQwLCAxMjUsIAotICAgIDIzNSwgNTQsIDIzMywgODcsIDM2LCAxODIsIDIzNSwgNTQsIDIzMywgODcsIDM2LCA0MSwgMTMyLCAyNDYsIDE3NCwgNTEsIAotICAgIDM2LCAyMzMsIDcwLCAyMzcsIDE3NCwgNTEsIDM2LCAzNywgNTEsIDM2LCAyMzYsIDIxMiwgNTEsIDM2LCAyNTUsIDc0LCA0NiwgCi0gICAgMzYsIDYxLCAyMDUsIDM2LCA0NywgMjMxLCAyMjMsIDM2LCAyNDAsIDE2MywgMjA2LCA3NiwgMzYsIDI0MCwgMTU5LCAyMDYsIAotICAgIDc2LCAzNiwgMTksIDIyOCwgMTc5LCAzNiwgMTksIDIzMywgMTcwLCAzNiwgMTksIDIzMSwgMjA3LCAyMzcsIDcwLCAzNiwgCi0gICAgMTksIDIyNywgMTMyLCAzNiwgMjM3LCAxNzQsIDQ2LCAzNiwgMjM3LCA1MSwgNSwgNTEsIDM2LCA0NywgNjEsIDI0NiwgMTY3LCAKLSAgICA1MSwgMzYsIDQyLCAyNDAsIDExNywgNTEsIDM2LCAxOTAsIDI0MCwgMTI4LCA0NiwgMzYsIDIzMSwgNzksIDQ2LCAzNiwgCi0gICAgMjM3LCA3OCwgMTA1LCAxODAsIDQ2LCAzNiwgNDIsIDQxLCA2NywgNTEsIDM2LCAyMzUsIDE4LCA2NywgNTEsIDM2LCAyMzQsIAotICAgIDExMywgMjM1LCAxMjQsIDM2LCA0MSwgMjMxLCAyMTQsIDQ2LCAzNiwgNDIsIDEzMiwgMjQ2LCAxNzQsIDQ2LCAzNiwgMjMzLCAKLSAgICAyMDUsIDM2LCAyNTUsIDc0LCA1MSwgMzYsIDQyLCAyMzEsIDIxNCwgNTEsIDM2LCA0MSwgMjMxLCAyMTQsIDUxLCAzNiwgNDEsIAotICAgIDIzMSwgMjE0LCAyMiwgOTksIDIzMSwgMjE0LCA1MSwgMzYsIDQxLCAxMzIsIDI0NiwgMTc0LCA0NiwgMzYsIDU2LCA2NCwgCi0gICAgMjM3LCA0MSwgMzYsIDIzMywgMTQ1LCA1MSwgMzYsIDQ3LCAyNDYsIDE3NCwgNTEsIDM2LCAyMzcsIDE3MCwgNDYsIDM2LCAKLSAgICA0NywgMjQwLCAxNjEsIDUxLCAzNiwgNDcsIDIzNywgNDYsIDM2LCA0NywgMjM1LCAxNiwgMzYsIDQ3LCAyMzcsIDgzLCA1MSwgCi0gICAgMzYsIDQ3LCAyMDUsIDM2LCA0NywgMjMzLCA3MCwgMjM3LCA0NiwgMzYsIDQ3LCA4MSwgNjcsIDUxLCAzNiwgNywgMywgMSwgCi0gICAgNTcsIDM2LCA3LCAzLCAxLCA3MiwgMzYsIDcsIDMsIDEsIDc0LCAzNiwgNywgMywgMSwgNzMsIDM2LCA3LCAzLCAxLCA2NiwgCi0gICAgMzYsIDcsIDMsIDEsIDI1NCwgMTk0LCAzNiwgNywgMywgMSwgMjIyLCAyMjIsIDM2LCA3LCAzLCAxLCAyMTIsIDM2LCA3LCAzLCAKLSAgICAxLCAxODUsIDM2LCA3LCAzLCAxLCAxNDYsIDM2LCA3LCAzLCAxLCAyNTQsIDE4MywgMzYsIDcsIDMsIDEsIDE5NiwgMzYsIDcsIAotICAgIDMsIDEsIDI1NCwgMTg0LCAxOSwgNiwgMSwgMjQxLCAxNTUsIDE5LCAzLCAxLCAyNDEsIDE1NSwgMTksIDYsIDEsIDIzNSwgCi0gICAgODMsIDIzNywgMTQzLCAxOSwgMywgMSwgMjM1LCA4MywgMjM3LCAxNDMsIDE5LCAyMDcsIDUzLCAxOSwgMjAzLCAyMDcsIDUzLCAKLSAgICAxOSwgNiwgMSwgMjMwLCAxOTEsIDIzMywgMTI5LCAxOSwgMywgMSwgMjMwLCAxOTEsIDIzMywgMTI5LCAxOSwgMjI3LCAxMzIsIAotICAgIDE5LCAzLCAyMDAsIDIzNywgMTAzLCAyNDAsIDE5NywgOTgsIDE5LCAzLCAyMzcsIDUwLCAyMzcsIDEwMywgMjQwLCAxOTcsIAotICAgIDk4LCAxOSwgMywgMjAwLCAyMzcsIDUwLCAyMzcsIDEwMywgMjQwLCAxOTcsIDk4LCAxOSwgMjMzLCA4MiwgNzYsIDE5LCAKLSAgICAyMzcsIDcwLCAxOSwgMjMxLCAyMDcsIDIzNywgNzAsIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgMjM3LCA3MCwgMTksIDI1NCwgCi0gICAgMjYsIDIzNSwgMjIwLCAxOSwgNiwgMSwgMjM1LCAyOCwgMiwgMjM3LCA3MCwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAyMzcsIAotICAgIDcwLCAxOSwgNiwgMSwgMjQ2LCAxNjgsIDIsIDIzNywgNzAsIDE5LCA2LCAxLCAyMzUsIDM1LCAyLCAyMzcsIDcwLCAxOSwgNiwgCi0gICAgMSwgMjM1LCAyMywgMiwgMjM3LCA3MCwgMTksIDYsIDEsIDI0MCwgMTIzLCAyLCAyMzcsIDcwLCAxOSwgMywgMSwgMjQ2LCAKLSAgICAxNjgsIDIsIDIzMSwgMjA3LCAyMiwgMjM3LCA3MCwgMTksIDYsIDEsIDIzNywgNzEsIDE5LCA2LCAxLCAyNDAsIDE2MCwgMTksIAotICAgIDYsIDEsIDIzNywgNjEsIDE5LCA2LCAxLCAyMzcsIDc1LCAxOSwgNiwgMSwgMjMzLCA5NiwgMTksIDYsIDEsIDI0MCwgMTczLCAKLSAgICAxOSwgNiwgMSwgMjQ2LCAyMTksIDE5LCA2LCAxLCAyMzcsIDg5LCAxOSwgNiwgMSwgMjQwLCAxNDYsIDE5LCA2LCAxLCAyMzcsIAotICAgIDkxLCAxOSwgNiwgMSwgMjM3LCA4MiwgMTksIDYsIDEsIDI1MiwgMjI5LCAxOSwgNiwgMSwgMjUyLCAyMjcsIDE5LCA2LCAxLCAKLSAgICAyNTMsIDM4LCAxOSwgNiwgMSwgMjMzLCAxMDAsIDE5LCA2LCAxLCAyNTIsIDIyMywgMTksIDYsIDEsIDI0NiwgMjA5LCAxOSwgCi0gICAgNiwgMSwgMjM3LCA3MywgMTksIDYsIDEsIDI0NiwgMjEyLCAxOSwgNiwgMSwgMjMzLCA5MiwgMTksIDYsIDEsIDI0NiwgMTk4LCAKLSAgICAxOSwgNiwgMSwgMjQ2LCAyMDAsIDE5LCA2LCAxLCAyNDYsIDIwNCwgMTksIDYsIDEsIDIzNywgNjgsIDE5LCA2LCAxLCAyNDYsIAotICAgIDE2OCwgMiwgMjMwLCAxNTIsIDE5LCA2LCAxLCAyMzUsIDIzLCAyLCAyMzAsIDE1MiwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAKLSAgICAyMzcsIDcwLCAxOSwgMywgMSwgMjM1LCAyOCwgMiwgMjM3LCA3MCwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAyMzcsIDcwLCAKLSAgICAxOSwgMywgMSwgMjQ2LCAxNjgsIDIsIDIzNywgNzAsIDE5LCAzLCAxLCAyMzUsIDIzLCAyLCAyMzEsIDIwNywgMjIsIDIzNywgCi0gICAgNzAsIDE5LCAzLCAxLCAyMzcsIDcxLCAxOSwgMywgMSwgMjQwLCAxNjAsIDE5LCAzLCAxLCAyMzcsIDYxLCAxOSwgMywgMSwgCi0gICAgMjM3LCA3NSwgMTksIDMsIDEsIDIzMywgOTYsIDE5LCAzLCAxLCAyNDAsIDE3MywgMTksIDMsIDEsIDI0NiwgMjE5LCAxOSwgCi0gICAgMywgMSwgMjM3LCA4OSwgMTksIDMsIDEsIDI0MCwgMTQ2LCAxOSwgMywgMSwgMjM3LCA5MSwgMTksIDMsIDEsIDIzNywgODIsIAotICAgIDE5LCAzLCAxLCAyNTIsIDIyOSwgMTksIDMsIDEsIDI1MiwgMjI3LCAxOSwgMywgMSwgMjUzLCAzOCwgMTksIDMsIDEsIDIzMywgCi0gICAgMTAwLCAxOSwgMywgMSwgMjUyLCAyMjMsIDE5LCAzLCAxLCAyNDYsIDIwOSwgMTksIDMsIDEsIDM1LCAyMzcsIDczLCAxOSwgCi0gICAgMywgMSwgMjM3LCA3MywgMTksIDMsIDEsIDI0NiwgMjEyLCAxOSwgMywgMSwgMjMzLCA5MiwgMTksIDMsIDEsIDI0NiwgMTk4LCAKLSAgICAxOSwgMywgMSwgMjQ2LCAyMDAsIDE5LCAzLCAxLCAyNDYsIDIwNCwgMTksIDMsIDEsIDIzNywgNjgsIDE5LCAzLCAxLCAyNDYsIAotICAgIDE2OCwgMiwgMjMwLCAxNTIsIDE5LCAzLCAxLCAyMzUsIDIzLCAyLCAyMzAsIDE1MiwgMTksIDMsIDEsIDIzNSwgMzUsIDIsIAotICAgIDIzNywgNzAsIDE5LCAzLCAxLCAyMzUsIDIzLCAyLCAyMzcsIDcwLCAxOSwgMywgMSwgMjQwLCAxMjMsIDIsIDIzNywgNzAsIAotICAgIDE5LCA2LCAyNTMsIDE1MCwgOTgsIDE5LCAyNDksIDExMiwgOTgsIDE5LCAyNDAsIDE3OCwgOTgsIDE5LCAyMzUsIDIzLCAyLCAKLSAgICAyNDYsIDE3MSwgOTgsIDE5LCAyMzUsIDIzLCAyLCAyNDAsIDE1OSwgMjIsIDI0NiwgMTcxLCA5OCwgMTksIDIzNSwgMjMsIDIsIAotICAgIDIzMSwgMjAzLCAyMiwgMjQ2LCAxNzEsIDk4LCAxOSwgMjUzLCAxMjAsIDk4LCAxOSwgMjU0LCAyMDAsIDk4LCAxOSwgMjUzLCAKLSAgICAxNTAsIDk4LCAxOSwgMSwgMjM1LCA4MywgMjM3LCAxMzYsIDE5LCAzLCAxLCAyMzUsIDgzLCAyMzcsIDEzNiwgMTksIDEsIAotICAgIDIzNSwgMTM4LCAxOSwgMywgMSwgMjM1LCAxMzgsIDE5LCAxLCAyMzMsIDEyOSwgMTksIDMsIDEsIDIzMywgMTI5LCAxOSwgMSwgCi0gICAgMjM3LCAxMzYsIDE5LCAzLCAxLCAyMzcsIDEzNiwgMTksIDEsIDIzNywgMTQzLCAxOSwgMywgMSwgMjM3LCAxNDMsIDcwLCA2LCAKLSAgICAxLCAyNDAsIDIxMiwgNzAsIDMsIDEsIDI0MCwgMjEyLCA3MCwgNiwgMSwgMjQ4LCAzNywgNzAsIDMsIDEsIDI0OCwgMzcsIAotICAgIDcwLCA2LCAxLCAyNDEsIDEsIDcwLCAzLCAxLCAyNDEsIDEsIDcwLCA2LCAxLCAyNDAsIDIwOSwgNzAsIDMsIDEsIDI0MCwgCi0gICAgMjA5LCA3MCwgNiwgMSwgMjM1LCA5MywgNzAsIDMsIDEsIDIzNSwgOTMsIDcwLCA2LCAxLCAyMzcsIDE0NiwgNzAsIDMsIDEsIAotICAgIDIzNywgMTQ2LCA3MCwgNiwgMSwgMjQ4LCAyNSwgNzAsIDMsIDEsIDI0OCwgMjUsIDE5LCAyNDAsIDIxMCwgOTgsIDE5LCAKLSAgICAyNTMsIDcwLCA5OCwgMTksIDIzNywgMTAzLCAyNDAsIDE5NywgOTgsIDE5LCAxLCAyNDgsIDIwMywgMTksIDYsIDI0MCwgCi0gICAgMTc4LCA5OCwgMTksIDIzNywgMTAzLCAyMzUsIDI4LCA5OCwgMTksIDIwMCwgMjM3LCAxMDMsIDIzNSwgMjgsIDk4LCAxOSwgCi0gICAgNiwgMSwgMjQ2LCAyNDUsIDE5LCAzLCAxLCAyNDYsIDI0NSwgMTksIDYsIDIzNywgMTAzLCAyNDAsIDE5NywgOTgsIDE5LCA2LCAKLSAgICAxLCAyNDcsIDQ5LCAxOSwgMywgMSwgMjQ3LCA0OSwgMTksIDI1MywgNzAsIDIsIDE5NSwgOTgsIDE5LCA2LCAyMDAsIDIzNywgCi0gICAgMTAzLCAyNDAsIDE5NywgOTgsIDE5LCA2LCAyMzcsIDUwLCAyMzcsIDEwMywgMjQwLCAxOTcsIDk4LCAxOSwgNiwgMjAwLCAKLSAgICAyMzcsIDUwLCAyMzcsIDEwMywgMjQwLCAxOTcsIDk4LCAyOCwgNiwgMSwgMjU0LCAyMzcsIDIsIDIzNywgMzYsIDI4LCA2LCAKLSAgICAxLCAyNTMsIDIzMiwgMjgsIDYsIDEsIDI0NywgNzAsIDI4LCA2LCAxLCAyNDgsIDU1LCAyOCwgNiwgMSwgMjMyLCA2MSwgCi0gICAgMjUzLCA3NywgMjgsIDYsIDEsIDI0NiwgMjU1LCAyOCwgNiwgMSwgMjIyLCAyMjQsIDc0LCAyOCwgNiwgMSwgMjUzLCAyOCwgCi0gICAgMjgsIDYsIDEsIDI1MywgMTE3LCAyOCwgNiwgMSwgMjQ3LCA4NiwgMjgsIDYsIDEsIDI0NywgNDMsIDI4LCA2LCAxLCAyNDIsIAotICAgIDEwLCAyOCwgNiwgMSwgMjQ4LCA4NCwgMjgsIDYsIDEsIDI1NSwgNTUsIDIsIDIzNywgMzYsIDI4LCA2LCAxLCAyNDAsIDEyNSwgCi0gICAgNjYsIDI4LCA2LCAxLCAyNDEsIDEyMiwgMjgsIDYsIDEsIDU3LCAyOCwgNiwgMSwgMjUzLCA3MywgMjgsIDYsIDEsIDI1MywgCi0gICAgOTUsIDI4LCA2LCAxLCAyNDcsIDEzLCAyOCwgNiwgMSwgMjUzLCAyMCwgMjgsIDYsIDEsIDI1MywgNzcsIDI4LCA2LCAxLCAKLSAgICAyNDYsIDI1MSwgMjgsIDYsIDEsIDI1MywgNDYsIDI4LCA2LCAxLCA3NCwgMjgsIDYsIDEsIDI0MCwgMTI1LCA3NCwgMjgsIDYsIAotICAgIDEsIDE3NywgMjgsIDYsIDEsIDI1MywgNTgsIDI4LCA2LCAxLCAyNTMsIDg3LCAyOCwgNiwgMSwgMjUyLCAyMzIsIDI4LCA2LCAKLSAgICAxLCA3MywgMjgsIDYsIDEsIDI1MywgMCwgMjgsIDYsIDEsIDI1MywgOTksIDI4LCA2LCAxLCAyNTMsIDExNiwgMjgsIDYsIDEsIAotICAgIDI1MywgOSwgMjgsIDYsIDEsIDY2LCAyOCwgNiwgMSwgMjUzLCAxMjQsIDI4LCA2LCAxLCAxNTQsIDI4LCA2LCAxLCAyNDYsIAotICAgIDI0OCwgMjgsIDYsIDEsIDI0NiwgMjE3LCAyOCwgNiwgMSwgMjQ2LCAxNjUsIDI4LCA2LCAxLCAyMzcsIDIxNSwgMjgsIDYsIAotICAgIDEsIDI0OCwgNTgsIDUzLCAyOCwgNiwgMSwgMjQxLCAyNCwgMjgsIDYsIDEsIDI0NiwgMjI3LCA1MywgMjgsIDYsIDEsIDcyLCAKLSAgICAyOCwgNiwgMSwgMjUyLCAyMzMsIDI4LCA2LCAxLCAxOTEsIDI4LCAzLCAxLCA1NywgMjgsIDMsIDEsIDI1MywgNzMsIDI4LCAKLSAgICAzLCAxLCAyNTMsIDk1LCAyOCwgMywgMSwgMjQ3LCAxMywgMjgsIDMsIDEsIDI1MywgMjAsIDI4LCAzLCAxLCAyNTMsIDc3LCAKLSAgICAyOCwgMywgMSwgMjQ2LCAyNTEsIDI4LCAzLCAxLCAyNTMsIDQ2LCAyOCwgMywgMSwgNzQsIDI4LCAzLCAxLCAyNDAsIDEyNSwgCi0gICAgNzQsIDI4LCAzLCAxLCAxNzcsIDI4LCAzLCAxLCAyNTMsIDU4LCAyOCwgMywgMSwgMjUzLCA4NywgMjgsIDMsIDEsIDI1MiwgCi0gICAgMjMyLCAyOCwgMywgMSwgNzMsIDI4LCAzLCAxLCAyNTMsIDAsIDI4LCAzLCAxLCAyNTMsIDk5LCAyOCwgMywgMSwgMjUzLCAKLSAgICAxMTYsIDI4LCAzLCAxLCAyNTMsIDksIDI4LCAzLCAxLCA2NiwgMjgsIDMsIDEsIDI1MywgMTI0LCAyOCwgMywgMSwgMTU0LCAKLSAgICAyOCwgMywgMSwgMjQ2LCAyNDgsIDI4LCAzLCAxLCAyNDYsIDIxNywgMjgsIDMsIDEsIDI0NiwgMTY1LCAyOCwgMywgMSwgCi0gICAgMjM3LCAyMTUsIDI4LCAzLCAxLCAyNDgsIDU4LCA1MywgMjgsIDMsIDEsIDI0MSwgMjQsIDI4LCAzLCAxLCAyNDYsIDIyNywgCi0gICAgNTMsIDI4LCAzLCAxLCA3MiwgMjgsIDMsIDEsIDI1MiwgMjMzLCAyOCwgMywgMSwgMTkxLCAyOCwgMywgMSwgMjU0LCAyMzcsIAotICAgIDIsIDIzNywgMzYsIDI4LCAzLCAxLCAyNTMsIDIzMiwgMjgsIDMsIDEsIDI0NywgNzAsIDI4LCAzLCAxLCAyNDgsIDU1LCAyOCwgCi0gICAgMywgMSwgMjMyLCA2MSwgMjUzLCA3NywgMjgsIDMsIDEsIDI0NiwgMjU1LCAyOCwgMywgMSwgMjIyLCAyMjQsIDc0LCAyOCwgCi0gICAgMywgMSwgMjUzLCAyOCwgMjgsIDMsIDEsIDI1MywgMTE3LCAyOCwgMywgMSwgMjQ3LCA4NiwgMjgsIDMsIDEsIDI0NywgNDMsIAotICAgIDI4LCAzLCAxLCAyNDIsIDEwLCAyOCwgMywgMSwgMjQ4LCA4NCwgMjgsIDMsIDEsIDI1NSwgNTUsIDIsIDIzNywgMzYsIDI4LCAKLSAgICAzLCAxLCAyNDAsIDEyNSwgNjYsIDI4LCAzLCAxLCAyNDEsIDEyMiwgMjgsIDYsIDEsIDIzNywgNjgsIDI4LCAzLCAxLCAyMzcsIAotICAgIDY4LCAyOCwgNiwgMSwgMjQ3LCAyNSwgMjgsIDMsIDEsIDI0NywgMjUsIDI4LCA2LCAxLCAyMzMsIDkzLCA3MiwgMjgsIDMsIAotICAgIDEsIDIzMywgOTMsIDcyLCAyOCwgNiwgMSwgMjM3LCAxMDIsIDI0NiwgMTgzLCAyOCwgMywgMSwgMjM3LCAxMDIsIDI0NiwgCi0gICAgMTgzLCAyOCwgNiwgMSwgMjMzLCA5MywgMjM3LCAxMDIsIDI0NiwgMTgzLCAyOCwgMywgMSwgMjMzLCA5MywgMjM3LCAxMDIsIAotICAgIDI0NiwgMTgzLCAyOCwgNiwgMSwgMjUzLCA0NywgMjQ2LCAxODMsIDI4LCAzLCAxLCAyNTMsIDQ3LCAyNDYsIDE4MywgMjgsIAotICAgIDYsIDEsIDIzMywgOTMsIDI1MywgNDcsIDI0NiwgMTgzLCAyOCwgMywgMSwgMjMzLCA5MywgMjUzLCA0NywgMjQ2LCAxODMsIAotICAgIDI4LCA2LCAxLCAyNDcsIDgzLCAyOCwgMywgMSwgMjQ3LCA4MywgMjgsIDYsIDEsIDI0NiwgMjA0LCAyOCwgMywgMSwgMjQ2LCAKLSAgICAyMDQsIDI4LCA2LCAxLCAyNDAsIDIyNiwgMjgsIDMsIDEsIDI0MCwgMjI2LCAyOCwgNiwgMSwgMjMzLCAxNTEsIDI4LCAzLCAKLSAgICAxLCAyMzMsIDE1MSwgMjgsIDYsIDEsIDIzNSwgMTgwLCAyLCA0NywgMjQwLCAxNjMsIDIzNSwgMjQsIDI4LCAzLCAxLCAyMzUsIAotICAgIDE4MCwgMiwgNDcsIDI0MCwgMTYzLCAyMzUsIDI0LCAyOCwgNiwgMSwgMjUzLCAxMzcsIDI4LCAzLCAxLCAyNTMsIDEzNywgCi0gICAgMjgsIDYsIDEsIDI0MSwgMjI2LCAyMzcsIDY4LCAyOCwgMywgMSwgMjQxLCAyMjYsIDIzNywgNjgsIDI4LCA2LCAxLCAyNDAsIAotICAgIDEyMywgMiwgMjM3LCAyMjAsIDI4LCAzLCAxLCAyNDAsIDEyMywgMiwgMjM3LCAyMjAsIDI4LCA2LCAxLCAyNTMsIDE4OCwgCi0gICAgMjgsIDMsIDEsIDI1MywgMTg4LCAyOCwgNiwgMSwgMjM3LCAxMzYsIDI4LCAzLCAxLCAyMzcsIDEzNiwgMjgsIDIzMiwgMTIsIAotICAgIDUzLCAzNiwgMjgsIDIzNywgMjIwLCAzNiwgMjgsIDIyNywgNzQsIDM2LCAyOCwgMTcyLCAyMzIsIDM1LCAzNiwgMjgsIDE4NiwgCi0gICAgMjMyLCAzNSwgMzYsIDI4LCAyMzIsIDI1MiwgMzYsIDI4LCAyMzUsIDU2LCAyMzIsIDEyLCA1MywgMzYsIDI4LCAyMzMsIAotICAgIDE1MiwgNTMsIDI4LCA2LCAxLCAyNDAsIDEyNSwgMjU1LCA1NSwgMiwgMjQwLCAxMzMsIDI4LCAzLCAxLCAyNDAsIDEyNSwgCi0gICAgMjU1LCA1NSwgMiwgMjQwLCAxMzMsIDI4LCA2LCAxLCAyMzMsIDIzMywgNTMsIDI4LCAzLCAxLCAyMzMsIDIzMywgNTMsIDI4LCAKLSAgICA2LCAxLCAyNTUsIDUsIDIsIDI0MCwgMjE2LCAyOCwgMywgMSwgMjU1LCA1LCAyLCAyNDAsIDIxNiwgMjgsIDYsIDEsIDI1MywgCi0gICAgNjcsIDIsIDIzNSwgMjMwLCAyOCwgMywgMSwgMjUzLCA2NywgMiwgMjM1LCAyMzAsIDI4LCA2LCAxLCAyNTMsIDY3LCAyLCAKLSAgICA4MiwgMjgsIDMsIDEsIDI1MywgNjcsIDIsIDgyLCAyOCwgNiwgMSwgMjUzLCA2NywgMiwgMjM3LCA0NCwgODgsIDI4LCAzLCAKLSAgICAxLCAyNTMsIDY3LCAyLCAyMzcsIDQ0LCA4OCwgMjgsIDYsIDEsIDI1MywgMTIzLCAyLCAyMzAsIDEyNiwgMjgsIDMsIDEsIAotICAgIDI1MywgMTIzLCAyLCAyMzAsIDEyNiwgMjgsIDYsIDEsIDI1NCwgMjQ1LCAyLCAyMzAsIDEyNiwgMjgsIDMsIDEsIDI1NCwgCi0gICAgMjQ1LCAyLCAyMzAsIDEyNiwgMjgsIDYsIDEsIDE4OCwgMiwgMjMwLCAxMjYsIDI4LCAzLCAxLCAxODgsIDIsIDIzMCwgMTI2LCAKLSAgICAyOCwgNiwgMSwgMTg4LCAyLCA2MSwgODIsIDI4LCAzLCAxLCAxODgsIDIsIDYxLCA4MiwgMjgsIDYsIDEsIDE4OCwgMiwgODIsIAotICAgIDI4LCAzLCAxLCAxODgsIDIsIDgyLCAyOCwgNiwgMSwgMjM1LCAxNDksIDE3NywgMjgsIDMsIDEsIDIzNSwgMTQ5LCAxNzcsIAotICAgIDI4LCA2LCAxLCAyNTQsIDE5OSwgMiwgMjMwLCAxMjYsIDI4LCAzLCAxLCAyNTQsIDE5OSwgMiwgMjMwLCAxMjYsIDI4LCA2LCAKLSAgICAyMCwgMjU0LCAxOTksIDI0NywgMTMsIDI4LCAzLCAyMCwgMjU0LCAxOTksIDI0NywgMTMsIDI4LCA2LCAxLCAyNTQsIDIzMSwgCi0gICAgMiwgMjM3LCA0NCwgODgsIDI4LCAzLCAxLCAyNTQsIDIzMSwgMiwgMjM3LCA0NCwgODgsIDI4LCA2LCAxLCAyMzEsIDIxNSwgCi0gICAgMTU0LCAyOCwgMywgMSwgMjMxLCAyMTUsIDE1NCwgMjgsIDYsIDEsIDI1NSwgNiwgMiwgMjMwLCAxMjYsIDI4LCAzLCAxLCAKLSAgICAyNTUsIDYsIDIsIDIzMCwgMTI2LCAyOCwgNiwgMSwgMjU0LCAyMTIsIDIsIDIzMCwgMTI2LCAyOCwgMywgMSwgMjU0LCAyMTIsIAotICAgIDIsIDIzMCwgMTI2LCAyOCwgNiwgMSwgMjMzLCAxNTcsIDY2LCAyOCwgMywgMSwgMjMzLCAxNTcsIDY2LCAyOCwgNiwgMSwgCi0gICAgMjMzLCAxNTcsIDk3LCAyLCA4MiwgMjgsIDMsIDEsIDIzMywgMTU3LCA5NywgMiwgODIsIDI4LCA2LCAxLCAyNTQsIDIwNCwgCi0gICAgMiwgMjMwLCAxMjYsIDI4LCAzLCAxLCAyNTQsIDIwNCwgMiwgMjMwLCAxMjYsIDI4LCA2LCAyMCwgMjU0LCAyMTIsIDI0NiwgCi0gICAgMjQ4LCAyOCwgMywgMjAsIDI1NCwgMjEyLCAyNDYsIDI0OCwgMjgsIDYsIDEsIDI1MywgNzQsIDIsIDIzMCwgMTI2LCAyOCwgCi0gICAgMywgMSwgMjUzLCA3NCwgMiwgMjMwLCAxMjYsIDI4LCA2LCAxLCAyNTMsIDc0LCAyLCA2MSwgODIsIDI4LCAzLCAxLCAyNTMsIAotICAgIDc0LCAyLCA2MSwgODIsIDI4LCA2LCAxLCAyNDEsIDIzNiwgMjgsIDMsIDEsIDI0MSwgMjM2LCAyOCwgNiwgMSwgMjMxLCAKLSAgICAyMTUsIDI0NiwgMjE3LCAyOCwgMywgMSwgMjMxLCAyMTUsIDI0NiwgMjE3LCAyOCwgNiwgMSwgMjMxLCAyMTUsIDI1MywgNzQsIAotICAgIDIsIDIzMCwgMTI2LCAyOCwgMywgMSwgMjMxLCAyMTUsIDI1MywgNzQsIDIsIDIzMCwgMTI2LCAyOCwgMSwgMjMyLCAzMiwgCi0gICAgMjgsIDYsIDEsIDI1MywgMTIzLCAyLCAyMzcsIDQ2LCAyOCwgMywgMSwgMjUzLCAxMjMsIDIsIDIzNywgNDYsIDI4LCA2LCAxLCAKLSAgICAxODgsIDIsIDg4LCAyOCwgMywgMSwgMTg4LCAyLCA4OCwgMjgsIDYsIDEsIDI1NCwgMjExLCAyLCAyNDAsIDEzMywgMjgsIDMsIAotICAgIDEsIDI1NCwgMjExLCAyLCAyNDAsIDEzMywgMjgsIDYsIDEsIDI1NCwgMTk5LCAyLCA4OCwgMjgsIDMsIDEsIDI1NCwgMTk5LCAKLSAgICAyLCA4OCwgMjgsIDYsIDEsIDI1NCwgMTk5LCAyLCAyNDAsIDEzMywgMjgsIDMsIDEsIDI1NCwgMTk5LCAyLCAyNDAsIDEzMywgCi0gICAgMjgsIDYsIDEsIDIzMCwgMTg5LCAyNDYsIDIxNywgMjgsIDMsIDEsIDIzMCwgMTg5LCAyNDYsIDIxNywgMjgsIDYsIDEsIAotICAgIDI1NCwgMjEzLCAyLCAyNDAsIDEzMywgMjgsIDMsIDEsIDI1NCwgMjEzLCAyLCAyNDAsIDEzMywgMjgsIDMsIDEsIDIzMiwgCi0gICAgMzIsIDI4LCA2LCAxLCAxMDIsIDIsIDIzNywgNDYsIDI4LCAzLCAxLCAxMDIsIDIsIDIzNywgNDYsIDI4LCA2LCAxLCAxMDIsIAotICAgIDIsIDIxOSwgMjgsIDMsIDEsIDEwMiwgMiwgMjE5LCAyOCwgNiwgMjAsIDEwMiwgMjUzLCA3NywgMjgsIDMsIDIwLCAxMDIsIAotICAgIDI1MywgNzcsIDI4LCA2LCAxLCAyNTQsIDIzNywgMiwgMjM3LCA0NiwgMjgsIDMsIDEsIDI1NCwgMjM3LCAyLCAyMzcsIDQ2LCAKLSAgICAyOCwgNiwgMSwgMjM3LCAxNDQsIDI4LCAzLCAxLCAyMzcsIDE0NCwgMjgsIDYsIDEsIDI0MSwgMTQsIDIsIDIxOSwgMjgsIDMsIAotICAgIDEsIDI0MSwgMTQsIDIsIDIxOSwgMjgsIDYsIDEsIDI1MywgMTIzLCAyLCAyMTksIDI4LCAzLCAxLCAyNTMsIDEyMywgMiwgCi0gICAgMjE5LCAyOCwgNiwgMSwgMjU0LCAyNDUsIDIsIDIxOSwgMjgsIDMsIDEsIDI1NCwgMjQ1LCAyLCAyMTksIDI4LCA2LCAxLCAKLSAgICAyMzEsIDIxNSwgMjQ2LCAyNTUsIDI4LCAzLCAxLCAyMzEsIDIxNSwgMjQ2LCAyNTUsIDI4LCA2LCAxLCAyNTUsIDU1LCAyLCAKLSAgICAyMzUsIDE2LCAyOCwgMywgMSwgMjU1LCA1NSwgMiwgMjM1LCAxNiwgMjgsIDYsIDEsIDI1NSwgNTUsIDIsIDIxOSwgMjgsIDMsIAotICAgIDEsIDI1NSwgNTUsIDIsIDIxOSwgMjgsIDYsIDEsIDEzMCwgMiwgMjE5LCAyOCwgMywgMSwgMTMwLCAyLCAyMTksIDI4LCA2LCAKLSAgICAxLCAyMzcsIDExOCwgNzMsIDI4LCAzLCAxLCAyMzcsIDExOCwgNzMsIDI4LCA2LCAxLCAyMzcsIDExOCwgMTMwLCAyLCAyMTksIAotICAgIDI4LCAzLCAxLCAyMzcsIDExOCwgMTMwLCAyLCAyMTksIDI4LCA2LCAxLCAxNjEsIDIsIDIxOSwgMjgsIDMsIDEsIDE2MSwgMiwgCi0gICAgMjE5LCAyOCwgNiwgMSwgOTcsIDIsIDIzNSwgMTYsIDI4LCAzLCAxLCA5NywgMiwgMjM1LCAxNiwgMjgsIDYsIDEsIDk3LCAyLCAKLSAgICAyMTksIDI4LCAzLCAxLCA5NywgMiwgMjE5LCAyOCwgNiwgMSwgOTcsIDIsIDQ3LCAxNTUsIDI4LCAzLCAxLCA5NywgMiwgNDcsIAotICAgIDE1NSwgMjgsIDYsIDEsIDI1MywgNzQsIDIsIDIxOSwgMjgsIDMsIDEsIDI1MywgNzQsIDIsIDIxOSwgMjgsIDYsIDEsIDI1MywgCi0gICAgNjcsIDIsIDIzMCwgMTI2LCAyOCwgMywgMSwgMjUzLCA2NywgMiwgMjMwLCAxMjYsIDI4LCA2LCAxLCAyNDcsIDExOSwgMiwgCi0gICAgMjE5LCAyOCwgMywgMSwgMjQ3LCAxMTksIDIsIDIxOSwgMjgsIDYsIDEsIDI1MywgNjcsIDIsIDE5NSwgMjIsIDg4LCAyOCwgCi0gICAgMywgMSwgMjUzLCA2NywgMiwgMTk1LCAyMiwgODgsIDI4LCA2LCAxLCAyNTQsIDIwNCwgMiwgODgsIDI4LCAzLCAxLCAyNTQsIAotICAgIDIwNCwgMiwgODgsIDI4LCA2LCAxLCAyNTQsIDIwNCwgMiwgODIsIDI4LCAzLCAxLCAyNTQsIDIwNCwgMiwgODIsIDI4LCA2LCAKLSAgICAxLCAyNDYsIDIwNywgMjUzLCAyMCwgMjgsIDMsIDEsIDI0NiwgMjA3LCAyNTMsIDIwLCAyOCwgNiwgMSwgMjQ2LCAyMDcsIAotICAgIDI0NywgNzAsIDI4LCAzLCAxLCAyNDYsIDIwNywgMjQ3LCA3MCwgMjgsIDYsIDEsIDI0NiwgMjA3LCAyNDgsIDIwOSwgMjgsIAotICAgIDMsIDEsIDI0NiwgMjA3LCAyNDgsIDIwOSwgMjgsIDYsIDEsIDI0NiwgMjA3LCAyNDEsIDEyMywgMjgsIDMsIDEsIDI0NiwgCi0gICAgMjA3LCAyNDEsIDEyMywgMjgsIDYsIDEsIDI0NiwgMjA3LCAyNDcsIDg2LCAyOCwgMywgMSwgMjQ2LCAyMDcsIDI0NywgODYsIAotICAgIDI4LCA2LCAxLCAyNDYsIDIwNywgMjQ3LCA0MywgMjgsIDMsIDEsIDI0NiwgMjA3LCAyNDcsIDQzLCAyOCwgNiwgMSwgMjQ2LCAKLSAgICAyMDcsIDI0OCwgMTY0LCAyOCwgMywgMSwgMjQ2LCAyMDcsIDI0OCwgMTY0LCAyOCwgNiwgMSwgMjQ2LCAyMDcsIDI0OCwgCi0gICAgMTczLCAyOCwgMywgMSwgMjQ2LCAyMDcsIDI0OCwgMTczLCAyOCwgNiwgMSwgMjAwLCAyNTMsIDQ2LCAyOCwgMywgMSwgMjAwLCAKLSAgICAyNTMsIDQ2LCAyOCwgNiwgMSwgMjU0LCAyMTEsIDIsIDg4LCAyOCwgMywgMSwgMjU0LCAyMTEsIDIsIDg4LCAyOCwgNiwgMSwgCi0gICAgMjQ3LCAxNywgMjgsIDMsIDEsIDI0NywgMTcsIDI4LCA2LCAxLCAyNDcsIDQ4LCAyOCwgMywgMSwgMjQ3LCA0OCwgMjgsIDYsIAotICAgIDEsIDI0NywgNjEsIDI4LCAzLCAxLCAyNDcsIDYxLCAyOCwgNiwgMSwgMjUzLCAzNSwgMjgsIDMsIDEsIDI1MywgMzUsIDI4LCAKLSAgICA2LCAxLCAyNTIsIDI1MCwgMjgsIDMsIDEsIDI1MiwgMjUwLCAyOCwgNiwgMSwgMjQxLCA5MiwgMTc3LCAyOCwgMywgMSwgCi0gICAgMjQxLCA5MiwgMTc3LCAyOCwgNiwgMSwgMjU0LCAyMTEsIDIsIDIzNywgNDQsIDg4LCAyOCwgMywgMSwgMjU0LCAyMTEsIDIsIAotICAgIDIzNywgNDQsIDg4LCAyOCwgNiwgMSwgMjU0LCAxOTksIDIsIDIzNywgNDQsIDg4LCAyOCwgMywgMSwgMjU0LCAxOTksIDIsIAotICAgIDIzNywgNDQsIDg4LCAxMjAsIDYsIDEsIDI0NywgMjQ1LCAxMjAsIDYsIDEsIDI0NywgMjUyLCAxMjAsIDYsIDEsIDI0OCwgCi0gICAgNTMsIDEyMCwgNiwgMSwgMjUyLCAyMDMsIDEyMCwgNiwgMSwgMjQ3LCAxMzcsIDEyMCwgNiwgMSwgMjUyLCAyMjYsIDEyMCwgCi0gICAgNiwgMSwgMjUzLCAxNDQsIDEyMCwgNiwgMSwgMjUzLCAxMjUsIDEyMCwgNiwgMSwgOTYsIDEyMCwgNiwgMSwgMjQ2LCAyNTEsIAotICAgIDEyMCwgNiwgMSwgMjQ3LCAxNTIsIDEyMCwgNiwgMSwgMjQxLCAxODMsIDEyMCwgNiwgMSwgMjQ3LCAyMjksIDEyMCwgNiwgMSwgCi0gICAgMjUyLCAyMTUsIDEyMCwgNiwgMSwgMjQ4LCA4MSwgMTIwLCA2LCAxLCAyNTMsIDIxLCAxMjAsIDYsIDEsIDI1MiwgMjEzLCAKLSAgICAxMjAsIDYsIDEsIDI0MSwgMTQxLCAxMjAsIDYsIDEsIDI0MSwgMTA5LCAxMjAsIDYsIDEsIDI0NywgMTczLCAxMjAsIDYsIDEsIAotICAgIDI1MywgMjgsIDEyMCwgNiwgMSwgMjQ3LCA5NCwgMTIwLCA2LCAxLCAyNDYsIDE2NSwgMTIwLCA2LCAxLCAyNTMsIDEwOCwgCi0gICAgMTIwLCA2LCAxLCAyNDYsIDE3NiwgMTIwLCA2LCAxLCAyNDcsIDE4OCwgMTIwLCA2LCAxLCAyNDEsIDE2NSwgMTIwLCA2LCAxLCAKLSAgICAyMDgsIDEyMCwgNiwgMSwgMjQ4LCAxNTQsIDEyMCwgNiwgMSwgMjQ4LCAxOTEsIDEyMCwgNiwgMSwgMjQyLCAzLCAxMjAsIDYsIAotICAgIDEsIDI0NywgMTk4LCAxMjAsIDYsIDEsIDI1MywgNjYsIDEyMCwgNiwgMSwgMjQxLCA4NywgMTIwLCA2LCAxLCAyNDEsIDIxMywgCi0gICAgMTIwLCA2LCAxLCAyNDcsIDE1NiwgMTIwLCA2LCAxLCAyNTMsIDE4NywgMTIwLCA2LCAxLCAyNDcsIDc1LCAxMjAsIDUyLCAxLCAKLSAgICA0MiwgMTMyLCAyNDAsIDE0NywgMTIwLCAyMjksIDE3MiwgMTIwLCAyMzMsIDIwMywgNzYsIDEyMCwgMjI5LCAxNjUsIDc2LCAKLSAgICAxMjAsIDIzNywgNjcsIDEyMCwgMjMzLCA4MiwgNzYsIDEyMCwgMjI4LCAxOTYsIDc2LCAxMjAsIDMsIDEsIDI0NywgMjQ1LCAKLSAgICAxMjAsIDMsIDEsIDI0NywgMjUyLCAxMjAsIDMsIDEsIDI0OCwgNTMsIDEyMCwgMywgMSwgMjUyLCAyMDMsIDEyMCwgMywgMSwgCi0gICAgMjQ3LCAxMzcsIDEyMCwgMywgMSwgMjUyLCAyMjYsIDEyMCwgMywgMSwgMjUzLCAxNDQsIDEyMCwgMywgMSwgMjUzLCAxMjUsIAotICAgIDEyMCwgMywgMSwgOTYsIDEyMCwgMywgMSwgMjQ2LCAyNTEsIDEyMCwgMywgMSwgMjQ3LCAxNTIsIDEyMCwgMywgMSwgMjQxLCAKLSAgICAxODMsIDEyMCwgMywgMSwgMjQ3LCAyMjksIDEyMCwgMywgMSwgMjUyLCAyMTUsIDEyMCwgMywgMSwgMjQ4LCA4MSwgMTIwLCAKLSAgICAzLCAxLCAyNTMsIDIxLCAxMjAsIDMsIDEsIDI1MiwgMjEzLCAxMjAsIDMsIDEsIDI0MSwgMTQxLCAxMjAsIDMsIDEsIDI0MSwgCi0gICAgMTA5LCAxMjAsIDMsIDEsIDI0NywgMTczLCAxMjAsIDMsIDEsIDI1MywgMjgsIDEyMCwgMywgMSwgMjQ3LCA5NCwgMTIwLCAzLCAKLSAgICAxLCAyNDYsIDE2NSwgMTIwLCAzLCAxLCAyNTMsIDEwOCwgMTIwLCAzLCAxLCAyNDYsIDE3NiwgMTIwLCAzLCAxLCAyNDcsIAotICAgIDE4OCwgMTIwLCAzLCAxLCAyNDEsIDE2NSwgMTIwLCAzLCAxLCAyMDgsIDEyMCwgMywgMSwgMjQ4LCAxNTQsIDEyMCwgMywgMSwgCi0gICAgMjQ4LCAxOTEsIDEyMCwgMywgMSwgMjQyLCAzLCAxMjAsIDMsIDEsIDI0NywgMTk4LCAxMjAsIDMsIDEsIDI1MywgNjYsIAotICAgIDEyMCwgMywgMSwgMjQxLCA4NywgMTIwLCAzLCAxLCAyNDEsIDIxMywgMTIwLCAzLCAxLCAyNDcsIDE1NiwgMTIwLCAzLCAxLCAKLSAgICAyNTMsIDE4NywgMTIwLCAzLCAxLCAyNDcsIDc1LCAxMjAsIDMsIDIwLCAyNTQsIDUwLCAyNDEsIDg3LCAxMjAsIDI0NiwgCi0gICAgMTYyLCAyNDAsIDEyMSwgMTIwLCAyMzUsIDY5LCA3OCwgMjM3LCA0OCwgMjM0LCA5OCwgNzgsIDIzNywgNDgsIDIzNywgMjEzLCAKLSAgICA3OCwgMjM3LCA0OCwgMjMwLCAxMDgsIDc4LCAyMzcsIDQ4LCAyNDIsIDM2LCAyMzgsIDM4LCA3OCwgMjM3LCA0OCwgMjQyLCAKLSAgICAzNiwgMjM4LCAyMjksIDc4LCAyMzcsIDQ4LCAyMzcsIDYsIDc4LCAyMzcsIDQ4LCAyMzksIDIyMCwgNzgsIDIzNywgNDgsIAotICAgIDI0MCwgMTAxLCA3OCwgMjM3LCA0OCwgMjM2LCAxODQsIDc4LCAyMzcsIDQ4LCAyNDAsIDk4LCA3OCwgMjM3LCA0OCwgMjQwLCAKLSAgICAzNCwgNzgsIDIzNywgNDgsIDIzNSwgMTczLCA3OCwgMjM3LCA0OCwgMjM4LCAyMzYsIDIzNiwgMTYxLCA3OCwgMjM3LCA0OCwgCi0gICAgMjMwLCAxODYsIDc4LCAyMzcsIDQ4LCAyMzksIDIwOSwgMjQ1LCA2MSwgNzgsIDIzNywgNDgsIDIzNSwgMjIxLCAyMzYsIDkwLCAKLSAgICA3OCwgMjM3LCA0OCwgMjM5LCAxODQsIDc4LCAyMzcsIDQ4LCAyNDIsIDY2LCAyMzYsIDEwMSwgNzgsIDIzNywgNDgsIDIzOSwgCi0gICAgMTIxLCA3OCwgMjM3LCA0OCwgMjMyLCAyMjMsIDc4LCAyMzcsIDQ4LCAyMzYsIDE1MywgNzgsIDIzNywgNDgsIDIzOSwgMTA0LCAKLSAgICAyMzYsIDExOCwgNzgsIDIzNywgNDgsIDIzOCwgMTcyLCA3OCwgMjM3LCA0OCwgMjM5LCAyMDcsIDc4LCAyMzcsIDQ4LCAyMzUsIAotICAgIDIyMSwgMjM2LCAxOTcsIDc4LCAyMzcsIDQ4LCAyNDYsIDg3LCAyNTQsIDMyLCAyNDYsIDk0LCA3OCwgMjM3LCA0OCwgMjUxLCAKLSAgICA5NywgNzgsIDIzNywgNDgsIDI0NCwgNywgNzgsIDIzNywgNDgsIDI0MywgNTUsIDc4LCAyMzcsIDQ4LCAyNDAsIDEwOSwgNzgsIAotICAgIDE2NSwgMjM5LCA5OSwgMjM1LCAyMCwgNzgsIDI0MCwgMTQzLCAyMzksIDI0NywgNzgsIDI0MCwgMTQzLCAyNDEsIDQyLCAKLSAgICAyMzcsIDIxMywgNzgsIDI0MCwgMTQzLCAyNDEsIDQyLCAyMzcsIDE4NywgNzgsIDI0MCwgMTQzLCAyNDEsIDQyLCAyMzUsIAotICAgIDEzNCwgNzgsIDI0MCwgMTQzLCAyMzgsIDYsIDc4LCAyNDAsIDE0MywgMjQwLCA0OSwgNzgsIDI0MCwgMTQzLCAyMzcsIDIxMywgCi0gICAgNzgsIDI0MCwgMTQzLCAyMzcsIDE4NywgNzgsIDI0MCwgMTQzLCAyMzUsIDEzNCwgNzgsIDI0MCwgMTQzLCAyMzgsIDcsIDc4LCAKLSAgICAyNDAsIDE0MywgMjQzLCAyMzEsIDI0MywgMTcwLCAzMiwgMjQ3LCAyMjEsIDc4LCAyNDAsIDE0MywgMjM2LCAxOTgsIDc4LCAKLSAgICAyNDAsIDE0MywgMjM3LCAyMDAsIDE0NSwgMjM3LCAyMDYsIDc4LCAyNDAsIDE0MywgMjM5LCAxMDUsIDc4LCAyMjksIDE2MSwgCi0gICAgMjM5LCA5NywgNzgsIDI0MCwgMTQzLCAyNDEsIDExLCA3OCwgMjI5LCAxNjEsIDIzOSwgMTgxLCA3OCwgMjQwLCAxNDMsIAotICAgIDI0NiwgMjQ0LCAyNDYsIDE2NCwgNzgsIDI0MCwgMTQzLCAyNTMsIDE5MywgMjQ2LCAxNjQsIDc4LCAyMjksIDE2MSwgMjU0LCAKLSAgICAxNDksIDIzOSwgMTgyLCA3OCwgMTY1LCAyNDAsIDExNiwgMjQ2LCAxNjQsIDc4LCAxNjUsIDIwMywgMjQ2LCAxNjQsIDc4LCAKLSAgICAyMjksIDE2MSwgMjUzLCAyMywgMjM0LCAxMTQsIDc4LCAyNDAsIDE0MywgMjM5LCAyMDgsIDIzOCwgMzgsIDc4LCAxLCAyNDAsIAotICAgIDE3NCwgNzgsIDEsIDI0NywgMjUzLCA3OCwgMSwgMjM4LCAyNDcsIDc4LCAxLCAyMzcsIDIzOCwgNzgsIDEsIDI1MiwgMjUyLCAKLSAgICA3OCwgMSwgMjQ3LCAyMjEsIDc4LCAxLCAyNDAsIDEwMiwgNzgsIDEsIDI0OCwgNjAsIDc4LCAxLCAyNDcsIDIxMCwgNzgsIDEsIAotICAgIDI0NywgNjMsIDc4LCAxLCAzNSwgMjQ3LCAxLCA3OCwgMSwgMjQ3LCAxLCA3OCwgMSwgMjM3LCAyMDUsIDc4LCAxLCAzNSwgCi0gICAgMjQ3LCA0MSwgNzgsIDEsIDI0NywgNDEsIDc4LCAxLCAzNSwgMjQ2LCAxOTUsIDc4LCAxLCAyNDYsIDE5NSwgNzgsIDEsIAotICAgIDIzNiwgMjA1LCA3OCwgMSwgMjQxLCA5NywgNzgsIDEsIDM1LCAyNTMsIDAsIDc4LCAxLCAyNTMsIDAsIDc4LCAxLCAzNSwgCi0gICAgMjM4LCA3NywgNzgsIDEsIDIzOCwgNzcsIDc4LCAxLCAyNDgsIDE0MiwgNzgsIDEsIDI0MSwgMjIyLCA3OCwgMSwgMjQwLCAKLSAgICAyMDMsIDc4LCAxLCAyNDgsIDE3MSwgNzgsIDIwLCAyMzUsIDEwNiwgNDcsIDI0NywgMjIxLCA3OCwgMjAsIDIzNSwgMTA2LCAKLSAgICAyNTMsIDIwMCwgMjQ3LCA2MywgNzgsIDIwLCAyMzUsIDEwNiwgNDcsIDI0NywgNjMsIDc4LCAyMjksIDE2MSwgMjM1LCAxNzMsIAotICAgIDc4LCAyMjksIDE2MSwgMjMwLCAxODYsIDEwLCA2NSwgNTMsIDEwLCA1LCAyMzksIDIzNywgMTAsIDIzNCwgMTA1LCAyMzUsIAotICAgIDcwLCAxMCwgNSwgMjM5LCAyMzMsIDIyOCwgMTc3LCAyNDgsIDExLCAyNDAsIDIzMywgMjI4LCAxNzcsIDIzNywgMTgyLCAKLSAgICAyNDAsIDIzMywgMTAsIDI1MSwgMTc1LCAyMjgsIDE3NywgMjUzLCAxMjksIDI0MSwgMTk0LCA1MywgMjI4LCAxNzcsIDI1MywgCi0gICAgMTI5LCAyNTMsIDUzLCAyMzMsIDExNywgNTMsIDIzNSwgMjM4LCA1MywgMTAsIDIzNywgNjcsIDEwLCAyNDgsIDIwLCAyMzAsIAotICAgIDEzMSwgMTAsIDIzOSwgMjAxLCAyNDIsIDE5LCA1MywgMTAsIDUsIDIzOSwgMTE2LCAxMCwgNSwgMjI5LCAyMTQsIDIzNywgCi0gICAgMTcxLCAyMzEsIDE4NSwgMTAsIDUsIDIzNywgMTcxLCAyMzIsIDc5LCAxMCwgNSwgMjMwLCA5NCwgMjM1LCAyNDQsIDEwLCA1LCAKLSAgICAyNTEsIDE3MCwgMjM1LCAyNDYsIDI0MiwgNTcsIDEwLCA1LCAyMzEsIDE3NSwgMTAsIDMsIDIwMSwgMjQ3LCA1NSwgMTAsIDMsIAotICAgIDIwMSwgMjAsIDkyLCAyLCAyMTYsIDIsIDI0NywgMjYsIDEwLCAzLCAyMDEsIDI0MSwgODksIDEwLCAzLCAyMzcsIDI0NywgCi0gICAgMTAsIDMsIDIzNywgMTc2LCAxMCwgMywgMjM4LCAxMiwgMTAsIDIzMCwgMTQwLCAxMCwgMjM3LCA0OSwgNTYsIDIyOSwgMTYxLCAKLSAgICA3NiwgMTAsIDIzMywgODIsIDc2LCAxMCwgMSwgMjM4LCA1LCAxMCwgMSwgOTIsIDIsIDI0MCwgMjI5LCA0NiwgMTAsIDEsIAotICAgIDkyLCAyLCAxNjQsIDQ2LCAxMCwgMSwgMjUzLCA1NCwgMiwgMTY0LCA0NiwgMTAsIDEsIDkyLCAyLCAxNjQsIDUxLCAxMCwgMSwgCi0gICAgNjIsIDIsIDE2NCwgNDYsIDEwLCAxLCAyNDAsIDE3NCwgMTAsIDEsIDI0NywgMjUxLCAxMCwgMSwgMjUyLCAyMTAsIDIzNCwgCi0gICAgMTUwLCAxMCwgMSwgMjUyLCAxMSwgMTAsIDEsIDI0NSwgMjQzLCAxMCwgMSwgMjQxLCAxNjQsIDEwLCAxLCAyNTAsIDU5LCAKLSAgICAxMCwgMSwgMjQxLCAxNzEsIDEwLCAxLCAyNDksIDE3NiwgMTAsIDEsIDI0NSwgMjQyLCAxMCwgMSwgMjQ3LCAxOTgsIDEwLCAKLSAgICAxLCAyNDEsIDg5LCAxMCwgMSwgMjQxLCA2NywgMTAsIDEsIDIzOSwgMjQ0LCAxMCwgMSwgMjUxLCAyMDksIDEwLCAxLCAyNDksIAotICAgIDE3NCwgMTAsIDEsIDI0NywgNTUsIDEwLCAxLCAyNTIsIDE2NywgMTAsIDEsIDI0NiwgMjI0LCAxMCwgMSwgMjM3LCAyNTUsIAotICAgIDEwLCAxLCAyNDAsIDE5MSwgMiwgMTM1LCAxOTcsIDQ2LCAxMCwgMSwgMjQwLCAxOTEsIDIsIDE1MiwgMTk3LCA1MSwgMTAsIAotICAgIDEsIDI0MCwgMTc2LCA2MiwgMiwgMjMzLCA3MCwgMTk2LCAxMCwgMSwgMjQwLCAxNzYsIDYyLCAyLCAxMzUsIDE5NywgNDYsIAotICAgIDEwLCAxLCAyNDAsIDE3NiwgNjIsIDIsIDE1MiwgMTk3LCA0NiwgMTAsIDIzNCwgMjQxLCAxMCwgMSwgMjQ3LCA3NSwgMTAsIAotICAgIDEsIDI0OCwgMTM5LCAxMCwgMSwgMjQ3LCAxLCAxMCwgMSwgMjQ4LCA4OSwgMTAsIDEsIDI0MSwgMTkwLCAxMCwgMSwgMjQxLCAKLSAgICAyMDUsIDEwLCAxLCAyNTAsIDY0LCAxMCwgMSwgMjQ3LCA2MCwgMTAsIDEsIDkyLCAyMzMsIDE3MiwgMTAsIDEsIDI0NywgMjYsIAotICAgIDEwLCAyMzIsIDE4NCwgMTAsIDIzMiwgMTA1LCAxMCwgMjMyLCAyMTIsIDEwLCAyMzcsIDI0NywgMTAsIDIzNywgMTc2LCAxMCwgCi0gICAgMjM4LCAxMiwgMTAsIDIzNiwgMjIwLCAxMCwgMjM4LCA2OSwgMTAsIDIzOSwgOTIsIDQ2LCAxMCwgMTY0LCA0NiwgMTAsIAotICAgIDE2NCwgNTEsIDEwLCAyMzEsIDE5NSwgMjQwLCAxNzQsIDEwLCAyMzMsIDcwLCAyMzcsIDE3NiwgMTAsIDE2NSwgMjQ2LCAKLSAgICAxNTYsIDIzNSwgMTc0LCAxMCwgMjMzLCA2OCwgMTAsIDMxLCA1LCAzLCAyNTUsIDY5LCA0NiwgMTAsIDMxLCA1LCAyMzMsIAotICAgIDcwLCAzLCAyNTUsIDY5LCA0NiwgMTAsIDMxLCA1LCA1NiwgNTEsIDEwLCAyMDAsIDIzNywgMTc2LCAxMCwgMjQwLCAyMjQsIAotICAgIDIsIDEzNSwgMjQwLCAxNjksIDIyOCwgMTc3LCAyMSwgMjQwLCAxMjYsIDIyOCwgMTc3LCAyMSwgMTE4LCAyMjgsIDE3NywgCi0gICAgMjEsIDExMywgMjI4LCAxNzcsIDIxLCAxNjYsIDIyOCwgMTc3LCAyMSwgMTU4LCAyMjgsIDE3NywgMjEsIDE3MywgMjI4LCAKLSAgICAxNzcsIDIxLCAxODMsIDIyOCwgMTc3LCAyMSwgMTk0LCAyMjgsIDE3NywgMjEsIDE4NywgMjI4LCAxNzcsIDIxLCAxOTIsIAotICAgIDEwLCAyMzUsIDg2LCA1MywgMTAsIDIzNSwgMTYzLCAyMzAsIDEzMSwgMTAsIDIzMiwgMTIsIDIzMCwgMTMxLCAxMCwgMjQ2LCAKLSAgICAxNTksIDIzNSwgNTAsIDI0MCwgMTM5LCAxMCwgMSwgMjM1LCA0NiwgMjQ3LCAyNTEsIDEwLCAxLCAyMzUsIDQ2LCAyNDgsIAotICAgIDEzOSwgMTAsIDEsIDIyOSwgMTYzLCAyNDAsIDE3NCwgMTAsIDEsIDkyLCAyNDAsIDgyLCAxMCwgMSwgOTIsIDIsIDI0NiwgCi0gICAgMjM5LCAxNjQsIDQ2LCAxMCwgMSwgOTIsIDIsIDI0NiwgMjM5LCAxNjQsIDUxLCAxMCwgMSwgMjAxLCAyMzgsIDUsIDEwLCAxLCAKLSAgICAyMDEsIDE2NCwgMjQwLCAxNzQsIDEwLCAxLCAyMDEsIDE2NCwgMjQ3LCA2MCwgMTAsIDEsIDk3LCAyLCAxNjQsIDQ2LCAxMCwgCi0gICAgMSwgMjAxLCAxNjQsIDI0NywgMjYsIDEwLCAxLCAyNDYsIDEyLCAxMCwgMSwgMjM3LCAxMiwgMTAsIDEsIDI0MiwgMTk3LCAKLSAgICAxMCwgMSwgMjUyLCAyMTAsIDIsIDI0MCwgMTQ3LCAxMCwgMSwgMjUyLCAyMTAsIDIsIDE1MiwgMTk3LCA2NCwgMjMwLCAxMzQsIAotICAgIDEwLCAxLCAyNDcsIDE4OCwgMTAsIDEsIDI0MCwgMzIsIDEwLCAxLCAyMzgsIDExOSwgMTAsIDEsIDEwMSwgMiwgMTY0LCA0NiwgCi0gICAgMTAsIDEsIDEwMSwgMiwgMTM1LCAxOTcsIDYxLCA0NiwgMTAsIDEsIDI0NSwgMjAsIDEwLCAxLCAyNDMsIDg5LCAxMCwgMSwgCi0gICAgMTAxLCAyLCAxNTIsIDE5NywgNDYsIDEwLCAxLCAyNDAsIDMwLCAxMCwgMSwgMjM0LCAyNDIsIDEwLCAxLCAyNDMsIDMwLCAKLSAgICAxMCwgMSwgMjUzLCA1NiwgMiwgMjQwLCAxNDcsIDEwLCAxLCAyNTMsIDU2LCAyLCA1NiwgNTEsIDEwLCAxLCAyNTMsIDU2LCAKLSAgICAyLCA1NiwgMjQwLCAxNDQsIDIyLCAzLCAyNDcsIDU1LCAxMCwgMSwgMjM4LCAxNjcsIDEwLCAxLCAyMzYsIDQzLCAxMCwgMSwgCi0gICAgMjQ5LCAyMTAsIDEwLCAxLCAyNTMsIDU2LCAyLCAxNTIsIDE5NywgNjQsIDIzMCwgMTM0LCAxMCwgMSwgMjUzLCA1NiwgMiwgCi0gICAgMjQ2LCAxNjAsIDE5NywgNDYsIDEwLCAxLCAyNDUsIDEyMiwgMTAsIDEsIDI1MiwgMjI1LCAyLCAzLCAxOTYsIDEwLCAxLCAKLSAgICAyNTIsIDIyNSwgMiwgMjQwLCAxNDcsIDEwLCAxLCAyNTIsIDIyNSwgMiwgNTYsIDUxLCAxMCwgMSwgMjUyLCAyMjUsIDIsIDMsIAotICAgIDI1NSwgNjksIDUxLCAxMCwgMSwgMjUyLCAyMjUsIDIsIDU2LCAyNDAsIDE0NCwgMjIsIDU2LCA0NiwgMTAsIDEsIDI1MiwgCi0gICAgMjI1LCAyLCAxMzUsIDE5NywgNDYsIDEwLCAxLCAyNTAsIDEyNywgMTAsIDEsIDI1MiwgMjI1LCAyLCAyNDYsIDE2MCwgMTk3LCAKLSAgICA0NiwgMTAsIDEsIDI0NiwgMTYzLCAyLCA1NiwgMjQwLCAxNDQsIDIyLCA1NiwgNDYsIDEwLCAxLCAyNDYsIDE2MywgMiwgCi0gICAgMTUyLCAxOTcsIDUxLCAxMCwgMSwgMjQ2LCAxNjMsIDIsIDE1MiwgMTk3LCAyNDAsIDE0NCwgMjIsIDE1MiwgMTk3LCA0NiwgCi0gICAgMTAsIDEsIDI1MiwgMjQwLCAyLCAxMzUsIDE5NywgNTEsIDEwLCAxLCAyNTIsIDI0MCwgMiwgMTUyLCAxOTcsIDQ2LCAxMCwgCi0gICAgMSwgMjUyLCAyNDEsIDIsIDE1MiwgMTk3LCA0NiwgMTAsIDEsIDI1MiwgMjQ0LCAyLCAxNTIsIDE5NywgNDYsIDEwLCAxLCAKLSAgICAyMzUsIDQ2LCAyNDcsIDc1LCAxMCwgMSwgMjUyLCAyMzUsIDIsIDU2LCAyNDQsIDE1MiwgNTEsIDEwLCAxLCAyNTIsIDIzNSwgCi0gICAgMiwgNTYsIDUxLCAxMCwgMSwgMjUyLCA3MywgMTAsIDEsIDI1MiwgMjM1LCAyLCAxNTIsIDE5NywgNTEsIDEwLCAxLCAyMzksIAotICAgIDE4NywgMTAsIDEsIDI1MywgMSwgMiwgNTYsIDQ2LCAxMCwgMSwgMjUzLCAxLCAyLCAxNTIsIDE5NywgNDYsIDEwLCAxLCAKLSAgICAyMzksIDYxLCAxMCwgMSwgMjQxLCA3NywgMjQ3LCAxLCAxMCwgMSwgMjUyLCAyMTQsIDIsIDI0MCwgMTQ3LCAxMCwgMSwgCi0gICAgMjUyLCAyMTQsIDIsIDU2LCA0NiwgMTAsIDEsIDI1MywgNjksIDEwLCAxLCAyNTIsIDIxNCwgMiwgMTUyLCAxOTcsIDUxLCAKLSAgICAxMCwgMSwgMjUwLCAxMCwgMTAsIDEsIDI1MywgMTAyLCAyLCAyNDAsIDE0NywgMTAsIDEsIDIzOSwgMTQwLCAxMCwgMSwgCi0gICAgMjUzLCAxMDIsIDIsIDEzNSwgMTk3LCA1MSwgMTAsIDEsIDI0MywgMTU4LCAxMCwgMSwgMjUzLCAxMDIsIDIsIDE1MiwgMTk3LCAKLSAgICA0NiwgMTAsIDEsIDIxNiwgMiwgMywgMTk2LCAxMCwgMSwgMjE2LCAyLCA1NiwgNDYsIDEwLCAxLCAyMTYsIDIsIDE1MiwgCi0gICAgMTk3LCA0NiwgMTAsIDEsIDIxNiwgMiwgMTUyLCAxOTcsIDUxLCAxMCwgMSwgMjQ2LCAxNTYsIDIsIDU2LCA1MSwgMTAsIDEsIAotICAgIDI0NiwgMTU2LCAyMzUsIDE3NCwgMTAsIDEsIDIzOSwgMjI1LCAxMCwgMSwgMjQ2LCAxNTYsIDIsIDI0MCwgMTQ3LCAxMCwgMSwgCi0gICAgMjQ2LCAxNTYsIDIsIDE1MiwgMTk3LCA0NiwgMTAsIDEsIDI1MiwgMjA3LCAyMjgsIDI0MiwgMTAsIDEsIDI0MCwgMjM3LCAyLCAKLSAgICA1NiwgNDYsIDEwLCAxLCAyNTIsIDIwNywgMiwgNjIsIDQ2LCAxMCwgMSwgMjUyLCAyMDcsIDI0MSwgMTQ0LCAxMCwgMSwgCi0gICAgMjUyLCAyMDcsIDI0NywgMzQsIDIsIDE2NCwgNDYsIDEwLCAxLCAyNTIsIDIxMCwgMjM1LCAxMjksIDI0MSwgMTQ0LCAxMCwgCi0gICAgMSwgMjUzLCA1NCwgMiwgMjQwLCAxNDcsIDEwLCAxLCAyMzUsIDQ5LCAyNTMsIDE1LCAxMCwgMSwgMjUzLCAxNSwgMTAsIDEsIAotICAgIDY2LCAxMCwgMSwgMjUyLCAyMzMsIDEwLCAxLCAyMzUsIDQ5LCAyNTIsIDIzMywgMTAsIDEsIDI1MywgNTQsIDIsIDEzNSwgCi0gICAgMTk3LCA0NiwgMTAsIDEsIDI1MywgOTUsIDEwLCAxLCAyNDAsIDE3NiwgMjQ3LCAyNiwgMTAsIDEsIDYyLCAyLCAyNDAsIAotICAgIDEzMywgMTAsIDEsIDYyLCAyLCAzLCAxOTYsIDEwLCAxLCAyNTMsIDU0LCAyLCA1NiwgNDYsIDEwLCAxLCA3MiwgMTAsIDEsIAotICAgIDYyLCAyLCAxNTIsIDE5NywgNTEsIDEwLCAxLCA2MiwgMjM2LCA5LCAxMCwgMSwgNjIsIDIzNywgMTIzLCAyLCAxNjQsIDQ2LCAKLSAgICAxMCwgMjQ2LCAxNjIsIDI0MCwgMTIxLCAxMCwgMSwgMjUzLCA0LCAxMCwgMywgMjAxLCAyMCwgMjUyLCAyNDAsIDIsIDIxNiwgCi0gICAgMiwgOTIsIDIzMywgMTcyLCAxMCwgMywgMjAxLCAyMCwgMjUzLCAxLCAyLCAyMTYsIDIsIDkyLCAyMzMsIDE3MiwgMTAsIDMsIAotICAgIDIwMSwgNTUsIDU5LCAxNSwgMTAsIDMsIDIwMSwgMjE2LCAyNDAsIDE3NCwgMTAsIDMsIDIwMSwgMjQxLCAxNjQsIDEwLCAzLCAKLSAgICAyMDEsIDE1MiwgMjQwLCAxNjksIDEwLCAzLCAyMDEsIDI0MSwgNjcsIDEwLCAyNTIsIDI1NSwgMTA2LCAyNDIsIDY4LCAxMCwgCi0gICAgMjQxLCA3NSwgMTA2LCAyNTQsIDE0NSwgMjU0LCAyMTEsIDI0MywgMTc4LCAxMCwgMywgMjAxLCAyMzUsIDk4LCAyNDAsIAotICAgIDEyNiwgMTAsIDMsIDIwMSwgMjM3LCAxNSwgMjI5LCAyMTEsIDI0MCwgMTI2LCAxMCwgMywgMjAxLCAyMzUsIDQ2LCAyNDcsIAotICAgIDE0OCwgMTA2LCAyNDEsIDE3MSwgMTAsIDMsIDIwMSwgNTUsIDQ0LCAxNSwgMTAsIDMsIDE4NCwgMjQxLCA2NywgMTAsIDMsIAotICAgIDIwMSwgMjM5LCA5MSwgMTAsIDMsIDI0NywgNjAsIDEwLCAzLCAyNDcsIDI2LCAxMCwgMywgMjAxLCAyNDcsIDI2LCAxMCwgMywgCi0gICAgMjAxLCAyNDEsIDIwNSwgMTAsIDI0MSwgMjE0LCAxMDYsIDIzNiwgMjA0LCAxMCwgMjQwLCAxOTUsIDIzNywgOTUsIDE4NCwgCi0gICAgMjQwLCAxMjEsIDEwLCAyNDAsIDE5NSwgMjM3LCA5NSwgMjAxLCAyNDAsIDEyMSwgMTAsIDIzNSwgOTgsIDIwMSwgMjQ3LCAKLSAgICAyMCwgMiwgMjM4LCAyMTksIDIzNSwgMTExLCAxMCwgMywgMTg0LCAyNDEsIDE5MCwgMTAsIDEsIDI1MywgNTYsIDIsIDIzMywgCi0gICAgNzAsIDE5NiwgMTAsIDEsIDI1MiwgMjI1LCAyLCAyMzMsIDcwLCAxOTYsIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgMjQwLCAKLSAgICAxMjYsIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgMTE4LCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDExMywgMjMzLCA4MSwgCi0gICAgMjI4LCAxNzcsIDIxLCAxNjYsIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgMTU4LCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIAotICAgIDE3MywgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAxODMsIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgMTk0LCAyMzMsIDgxLCAKLSAgICAyMjgsIDE3NywgMjEsIDE4NywgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAxOTIsIDEwLCAxLCAyNDAsIDEyOSwgMiwgNTYsIAotICAgIDUxLCAxMCwgMSwgMjUyLCAyMzcsIDIsIDU2LCA1MSwgMTAsIDEsIDI0MCwgMTU3LCAyLCA1NiwgNTEsIDEwLCA1LCAyMzgsIAotICAgIDYwLCAyMzAsIDE0MiwgMTAsIDUsIDIzOCwgNjAsIDIyOSwgNTIsIDI0NywgMTczLCAxMCwgMSwgMjUyLCAyMDcsIDIsIDIzMywgCi0gICAgNzAsIDE5NiwgMTUxLCAyNTIsIDI1NSwgMTA2LCAyMzEsIDExOCwgMTUxLCAyMjksIDE5NCwgMjQ2LCAxNjIsIDI0MCwgMTIxLCAKLSAgICAxNTEsIDIzMiwgOCwgMjQ2LCAxNjIsIDI0MCwgMTIxLCAxNTEsIDIyOSwgMTk0LCAyMzcsIDY2LCAxNTEsIDIzMiwgOCwgCi0gICAgMjM3LCA2NiwgMTUxLCAxNjksIDIzNywgNjYsIDE1MSwgMjQwLCAxOTQsIDIzNywgMTkxLCAyNDAsIDEzMiwgMTUxLCAyNDAsIAotICAgIDE5NCwgMjM3LCAxOTEsIDIzNywgNDEsIDE1MSwgMjI5LCAxOTQsIDI0MCwgMTk0LCAyMzcsIDE5MSwgMjQwLCAxMzIsIDE1MSwgCi0gICAgMjMyLCA4LCAyNDAsIDE5NCwgMjM3LCAxOTEsIDIzNywgNDEsIDE1MSwgMjI4LCAyMzAsIDE1MSwgMjMzLCAxNjYsIDIzNiwgCi0gICAgMTczLCAxNTEsIDIzMywgMTY2LCAyMzEsIDEwMSwgMTUxLCAyMzMsIDE2NiwgMjI5LCAyMzEsIDE1MSwgMjI4LCAxOTYsIDc2LCAKLSAgICAxNTEsIDEsIDIzNywgMjI3LCAxNTEsIDEsIDIyOSwgMTYzLCAyMzcsIDIyNywgMTUxLCAxLCAyNDIsIDIwMiwgMTUxLCAxLCAKLSAgICAyMzgsIDIzMSwgMTUxLCAxLCAyNDMsIDExMywgMjMyLCAyMywgMTUxLCAxLCAyMzYsIDQwLCAxNTEsIDEsIDIzNSwgNDYsIAotICAgIDIzOCwgMTY5LCAyNDEsIDIyNCwgMTUxLCAxLCAyNTIsIDI1MiwgMTUxLCAxLCAyNDcsIDYwLCAxNTEsIDEsIDI0MSwgODksIAotICAgIDE1MSwgMSwgMjQzLCAxNzIsIDE1MSwgMSwgMjQ1LCAyNDEsIDE1MSwgMSwgMjUyLCAxNSwgMjMyLCAyMywgMTUxLCAxLCAKLSAgICAyNDYsIDEwMCwgMTUxLCAxLCAyNTIsIDE1NiwgMjUyLCAyNTIsIDE1MSwgMSwgMjQ0LCA0OSwgMTUxLCAxLCAyMzYsIDEyOSwgCi0gICAgMTUxLCAxLCAyNTEsIDE2LCAxNTEsIDEsIDI0NiwgMTk1LCAxNTEsIDEsIDIzMywgMjM0LCAxNTEsIDEsIDM1LCAyMzMsIAotICAgIDIzNCwgMTUxLCAxLCA3MiwgMTUxLCAxLCAyNTMsIDAsIDE1MSwgMSwgMjAwLCAyNTMsIDAsIDE1MSwgMSwgMjM5LCAyMzIsIAotICAgIDE1MSwgMSwgMjQ1LCA5MSwgMTUxLCAxLCAyNDEsIDIyNCwgMTUxLCAxLCAyNDAsIDIwMywgMTUxLCAxLCAyNTIsIDksIDE1MSwgCi0gICAgMSwgMjM1LCAxNSwgMjM4LCAxMjIsIDE1MSwgMSwgMjM1LCAxNSwgMjM2LCA5NSwgMTUxLCAxLCAyMzUsIDE1LCAyMzQsIDUwLCAKLSAgICAxNTEsIDIzNywgMjExLCA0NiwgMTUxLCAyMzcsIDIxMSwgNTEsIDE1MSwgMjM3LCAyMTEsIDIzNSwgMTIwLCAxNTEsIDIzNywgCi0gICAgMjI2LCA0NiwgMTUxLCAyMzcsIDIyNiwgNTEsIDE1MSwgMjM3LCAyMjYsIDIzNSwgMTIwLCAxNTEsIDI0MSwgMjIxLCA0NiwgCi0gICAgMTUxLCAyNDEsIDIyMSwgNTEsIDE1MSwgMjM3LCA1MCwgMjQyLCAzOSwgMjI5LCAxNjQsIDE1MSwgMjM3LCA1MCwgMjQyLCAKLSAgICAzOSwgMjM0LCAzLCAxNTEsIDI0MSwgMTUyLCA0NiwgMTUxLCAyNDEsIDE1MiwgNTEsIDE1MSwgMjMwLCA2NSwgMjM1LCAxMjAsIAotICAgIDE1MSwgMjQxLCAxMjgsIDQ2LCAxNTEsIDI0MSwgMTI4LCA1MSwgMTUxLCAyMzksIDIzMSwgMTUxLCAyMzMsIDIwNCwgMjQ2LCAKLSAgICAxNjQsIDE1MSwgMjMxLCAxMzAsIDE1MSwgMjMzLCAxNSwgMTUxLCAxMzUsIDYxLCAxOTcsIDQ2LCAxNTEsIDEzNSwgNjEsIAotICAgIDE5NywgNTEsIDE1MSwgMTUyLCAxOTcsIDQ2LCAxNTEsIDE1MiwgMTk3LCA1MSwgMTUxLCAyMzUsIDc4LCAyNDYsIDE2NywgCi0gICAgNDYsIDE1MSwgMjM1LCA3OCwgMjQ2LCAxNjcsIDUxLCAxNTEsIDIzOSwgMTIzLCAxNTEsIDIzNCwgMTMsIDE1MSwgMSwgMjM1LCAKLSAgICAxMzcsIDI0MCwgMTAzLCAxNTEsIDEsIDIzNSwgMTM3LCAyMzksIDY4LCAxNTEsIDEsIDIzNSwgMTM3LCAyNTMsIDE0NywgMTAsIAotICAgIDEsIDI1MiwgMjE3LCAyLCAxNTIsIDE5NywgMjI5LCAyNywgNTEsIDEwLCAxLCAyNTIsIDIxNywgMiwgNTYsIDI0MCwgMTQ0LCAKLSAgICAyMiwgMTUyLCAxOTcsIDQ2LCAxMCwgMSwgMjUyLCAyMTcsIDIsIDE1MiwgMTk3LCAyMzMsIDc4LCAyMzUsIDE4LCA1MSwgMTAsIAotICAgIDEsIDI1MiwgMjE3LCAyLCAxNTIsIDE5NywgMjMzLCA3OCwgMjM1LCAxOCwgMjQwLCAxNDQsIDIyLCAxMzUsIDE5NywgNDYsIAotICAgIDEwLCAxLCAyNTIsIDIxNywgMiwgMTM1LCAxOTcsIDI0MCwgMTQ0LCAyMiwgNTYsIDQ2LCAxMCwgMSwgMjUyLCAyMTcsIDIsIAotICAgIDIzMywgNzAsIDMsIDI1NSwgNjksIDUxLCAxMCwgMSwgMjUyLCAyMTcsIDIsIDMsIDE5NiwgMTAsIDEsIDEwMSwgMiwgMTM1LCAKLSAgICAxOTcsIDQ2LCAxMCwgMSwgMTAxLCAyLCAxNTIsIDE5NywgMjMzLCA3OCwgMjM1LCAxOCwgNTEsIDEwLCAxLCAyNTMsIDU2LCAKLSAgICAyLCAxMzUsIDE5NywgMjMwLCAxNjEsIDI0MCwgMTQ0LCAyMiwgMywgMjQ3LCA1NSwgMTAsIDEsIDI1MywgNTYsIDIsIDIzMywgCi0gICAgNzAsIDMsIDI1NSwgNjksIDUxLCAxMCwgMSwgMjUyLCAyMjUsIDIsIDgyLCAxMCwgMSwgMjQ2LCAxNjMsIDIsIDI0NiwgMTYwLCAKLSAgICAxOTcsIDQ2LCAxMCwgMSwgMjUyLCAyNDQsIDIsIDEzNSwgMTk3LCA0NiwgMTAsIDEsIDI1MiwgMjQ0LCAyLCAxNTIsIDE5NywgCi0gICAgMjMzLCA3OCwgMjMxLCAxOTEsIDQ2LCAxMCwgMSwgMjUyLCAyNDQsIDIsIDEzNSwgMTk3LCAyMzAsIDE2MSwgNDYsIDEwLCAxLCAKLSAgICAyNTIsIDIzNSwgMiwgMTM1LCAxOTcsIDUxLCAxMCwgMSwgMjUyLCAyMzUsIDIsIDE1MiwgMTk3LCAyMzMsIDc4LCAyMzUsIAotICAgIDE4LCA1MSwgMTAsIDEsIDI0MCwgMTkxLCAyLCA1NiwgNDYsIDEwLCAxLCAyNDAsIDE5MSwgMiwgMTUyLCAxOTcsIDQ2LCAxMCwgCi0gICAgMSwgMjQwLCAxOTEsIDIsIDE1MiwgMTk3LCAyMzMsIDc4LCAyMzUsIDE4LCA1MSwgMTAsIDEsIDU1LCAyLCA1NiwgNDYsIDEwLCAKLSAgICAxLCA1NSwgMiwgNTYsIDUxLCAxMCwgMSwgMjQ2LCAxNTYsIDIsIDEzNSwgMTk3LCA1MSwgMTAsIDEsIDI0NiwgMTU2LCAyLCAKLSAgICAzLCAyNDcsIDU1LCAxMCwgMSwgMjQ2LCAxNTYsIDIsIDMsIDE5NiwgMTAsIDEsIDIxNiwgMiwgMTI1LCAxMCwgMSwgMjUyLCAKLSAgICAyMjUsIDIsIDEzNSwgMTk3LCAyMzAsIDE2MSwgNDYsIDEwLCAxLCAyNTIsIDIyNSwgMiwgMTY0LCA0NiwgMTAsIDEsIDI0NiwgCi0gICAgMTYzLCAyLCAxMzUsIDE5NywgMjMwLCAxNjEsIDQ2LCAxMCwgMSwgMTAxLCAyLCAzLCAxMCwgMSwgMjUyLCAyNDEsIDUxLCAKLSAgICAxMCwgMSwgMTAxLCAyLCAzLCAxMCwgMSwgMjUyLCAyNDEsIDIyLCAxMzUsIDI0MCwgMTY5LCAxMCwgMSwgMjQ2LCAxNjMsIDIsIAotICAgIDMsIDEwLCAxLCAyNTIsIDI0MSwgMjIsIDEzNSwgMjQwLCAxNjksIDEwLCAxLCAyNTIsIDIyNSwgMiwgMywgMTAsIDEsIDI1MiwgCi0gICAgMjQxLCAyMiwgMTM1LCAyNDAsIDE2OSwgMTAsIDEsIDEwMSwgMiwgMywgMTAsIDEsIDI1MiwgMjQxLCA0NiwgMTAsIDEsIDkyLCAKLSAgICAyLCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDEzNSwgNDYsIDEwLCAxLCA5MiwgMiwgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAKLSAgICAxNTIsIDQ2LCAxMCwgMSwgMjQwLCAxNzYsIDYyLCAyLCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDEzNSwgNDYsIDEwLCAxLCAKLSAgICAyNDAsIDE3NiwgNjIsIDIsIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgMTUyLCA0NiwgMTAsIDEsIDI0MCwgMTc2LCA2MiwgMiwgCi0gICAgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAyNDYsIDE2MCwgNTEsIDEwLCAxLCAyNTMsIDU0LCAyLCAyMzMsIDgxLCAyMjgsIAotICAgIDE3NywgMjEsIDEzNSwgNDYsIDEwLCAxLCAyNTMsIDU0LCAyLCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDE1MiwgNDYsIDEwLCAKLSAgICAxLCA2MiwgMjM3LCAxMjMsIDIsIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgMTM1LCA0NiwgMTAsIDEsIDYyLCAyMzcsIDEyMywgCi0gICAgMiwgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAxNTIsIDQ2LCAxMCwgMSwgMTAxLCAyLCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIAotICAgIDI0NiwgMTYwLCA1MSwgMTAsIDEsIDI0NiwgMTYzLCAyLCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDI0NiwgMTYwLCA0NiwgCi0gICAgMTAsIDEsIDI0NiwgMTYzLCAyLCAyMzMsIDcwLCAxOTYsIDEwLCAxLCAyNTIsIDIxNCwgMiwgMTM1LCAxOTcsIDQ2LCAyMzcsIAotICAgIDM3LCAxLCAyNDcsIDE0LCAyMzcsIDM3LCAxLCAyMzEsIDE0MSwgMjM3LCAzNywgMSwgMjM5LCAxNTUsIDIzNywgMzcsIDEsIAotICAgIDI0NywgMTAwLCAyMzcsIDM3LCAxLCAyNDcsIDI0NywgMjM3LCAzNywgMSwgMjMxLCA5NywgMjM3LCAzNywgMSwgMjM5LCA1NCwgCi0gICAgMjM3LCAzNywgMSwgMjM4LCA5NCwgMjM3LCAzNywgMSwgMjQwLCA3MSwgMjM3LCAzNywgMSwgMjM5LCAxMDAsIDIzNywgMzcsIAotICAgIDEsIDIzOCwgMjExLCAyMzcsIDM3LCAxLCAyMzYsIDQ3LCAyMzcsIDM3LCAxLCAyNDEsIDE4LCAyMzcsIDM3LCAxLCAyMzksIAotICAgIDc4LCAyMzcsIDM3LCAxLCAyMzgsIDIyOCwgMjM3LCAzNywgMSwgMjMxLCA3NCwgMjM3LCAzNywgMSwgMjM5LCAyMzksIDIzNywgCi0gICAgMzcsIDEsIDIzMiwgMTA3LCAyMzcsIDM3LCAxLCAyMzMsIDY3LCAyMzcsIDM3LCAxLCAyMzMsIDUxLCAyMzcsIDM3LCAxLCAKLSAgICAyNDcsIDExNywgMjM3LCAzNywgMSwgMjMyLCAyNDYsIDIzNywgMzcsIDEsIDIzMiwgMjExLCAyMzcsIDM3LCAxLCAyMzAsIAotICAgIDIzNCwgMjM3LCAzNywgMSwgMjQ2LCAxMCwgMjM3LCAzNywgMSwgMjQxLCAxNTYsIDIzNywgMzcsIDEsIDI0NCwgNTIsIDIzNywgCi0gICAgMzcsIDEsIDIzNywgMSwgMjM3LCAzNywgMSwgMjQ4LCAyMDcsIDIzNywgMzcsIDEsIDIzNiwgMjIyLCAyMzcsIDM3LCAxLCAKLSAgICAyMzYsIDIwMywgMjM3LCAzNywgMSwgMjM2LCAzOSwgMjM3LCAzNywgMSwgOTYsIDIzNywgMzcsIDEsIDI1MywgNjUsIDIzNywgCi0gICAgMzcsIDEsIDI0MiwgNDksIDIzNywgMzcsIDEsIDIzNiwgOTQsIDIzNywgMzcsIDEsIDIzOSwgMjA2LCAyMzcsIDM3LCAxLCAKLSAgICAyNDAsIDgxLCAyMzcsIDM3LCAyMzMsIDI1MiwgMjM3LCAzNywgMjMwLCAyMjAsIDIzNywgMzcsIDIzNCwgMTIzLCAyMzcsIAotICAgIDM3LCAyMzEsIDYxLCAyMzcsIDM3LCAyMzUsIDEsIDIzNywgMzcsIDIzMSwgMTExLCAyMzcsIDM3LCAyMzQsIDkwLCAyMzcsIAotICAgIDM3LCAyMzEsIDY4LCAyMzcsIDM3LCAyMzQsIDE3MywgMjM3LCAzNywgMjMxLCAxMTAsIDIzNywgMzcsIDIzOCwgNjksIDIzNywgCi0gICAgMzcsIDEsIDI0NywgMTc5LCAyMDQsIDIxLCAyNDAsIDEyNiwgMjA0LCAyMSwgMTE4LCAyMDQsIDIxLCAxMTMsIDIwNCwgMjEsIAotICAgIDE2NiwgMjA0LCAyMSwgMTU4LCAyMDQsIDIxLCAxNzMsIDIwNCwgMjEsIDE4MywgMjA0LCAyMSwgMTk0LCAyMDQsIDIxLCAKLSAgICAxODcsIDIwNCwgMjEsIDE5MiwgMjA0LCAxLCA1NywgMjA0LCAxLCAyNTIsIDIzMSwgMjA0LCAxLCA3NCwgMjA0LCAxLCA3MiwgCi0gICAgMjA0LCAxLCA2NiwgMjA0LCAxLCAyNTIsIDIyMCwgMjA0LCAxLCA3MywgMjA0LCAxLCAyMjksIDI0NCwgMjA0LCAxLCAxOTksIAotICAgIDIwNCwgMSwgMjUyLCAyMTEsIDIwNCwgMSwgMjEzLCAyMDQsIDEsIDI1MiwgMjAyLCAyMDQsIDEsIDI1MiwgMjEzLCAyMDQsIAotICAgIDEsIDI0NiwgMTc2LCAyMDQsIDEsIDI1MiwgMjAzLCAyMDQsIDEsIDIwOCwgMjA0LCAxLCAyNDYsIDIyMSwgMjA0LCAxLCAKLSAgICAyNTIsIDIwNCwgMjA0LCAxLCAyNDgsIDQ2LCAyMDQsIDEsIDI1MiwgMjM0LCAyMDQsIDEsIDE3NywgMjA0LCAxLCAyNTIsIAotICAgIDIwMCwgMjA0LCAxLCAyNTUsIDEzLCAyMzUsIDIzMSwgMjA0LCAxLCAxOTgsIDIwNCwgMSwgMjQ2LCAxODEsIDIwNCwgMSwgCi0gICAgMjUyLCAyMDEsIDIwNCwgMSwgMTU0LCAyMDQsIDEsIDI1MiwgMjA4LCAyMDQsIDEsIDE5MSwgMjA0LCAxLCAyNTQsIDExOSwgCi0gICAgMjM1LCAyMzEsIDIwNCwgMSwgMjQ3LCAxNTQsIDI1MiwgMjEzLCAyMDQsIDEsIDI0NywgMTU0LCAyNDYsIDE3NiwgMjA0LCAxLCAKLSAgICAyNDcsIDE1NCwgMjA4LCAyMDQsIDM2LCAyNDAsIDEyNSwgMjAxLCAyNDAsIDE2NywgMjA0LCAzNiwgMjQwLCAxMjUsIDE4NCwgCi0gICAgMjQwLCAxNjcsIDIwNCwgMzYsIDI0MCwgMTI1LCAyMzcsIDExNSwgMjQwLCAxNjcsIDIwNCwgMzYsIDE4MiwgMjMwLCAxODEsIAotICAgIDI0MCwgMTY3LCAyMDQsIDM2LCAxODIsIDIwMSwgMjQwLCAxNjcsIDIwNCwgMzYsIDE4MiwgMTg0LCAyNDAsIDE2NywgMjA0LCAKLSAgICAzNiwgMTgyLCAyMzcsIDExNSwgMjQwLCAxNjcsIDIwNCwgMzYsIDIyOSwgNDAsIDc2LCAyMDQsIDM2LCA0NywgNTYsIDQ2LCAKLSAgICAyMDQsIDIwMSwgMjA2LCAyMjksIDE3MiwgMjA0LCAxODQsIDIwNiwgMjI5LCAxNzIsIDIwNCwgMTQsIDI1NSwgNDEsIDIzNiwgCi0gICAgNDYsIDIwNCwgMTQsIDIzMCwgNjQsIDIwNCwgMjM3LCA2NywgMjA0LCAyMjksIDE2NSwgNzYsIDIwNCwgMjMwLCA3NSwgOTQsIAotICAgIDUsIDIyOCwgMTg0LCA5NCwgNSwgMjMxLCAyMDYsIDk0LCA1LCAyMzMsIDEwMiwgOTQsIDEsIDI0MCwgMTI1LCA1NywgOTQsIAotICAgIDEsIDU3LCA5NCwgMSwgMjUyLCAyMTIsIDk0LCAxLCA3NCwgOTQsIDEsIDI1MiwgMjE2LCA5NCwgMSwgNjYsIDk0LCAxLCAKLSAgICAyNTIsIDIyNCwgOTQsIDEsIDE1MywgMTQ2LCA5NCwgMSwgMTUzLCAxNDksIDk0LCAxLCAyMzcsIDEwOCwgNzIsIDk0LCAxLCAKLSAgICAyNDAsIDEyNSwgNzIsIDk0LCAxLCA3MiwgOTQsIDEsIDI1MiwgMjIxLCA5NCwgMSwgMjM3LCAxMDgsIDczLCA5NCwgMSwgCi0gICAgMjQwLCAxMjUsIDczLCA5NCwgMSwgNzMsIDk0LCAxLCAyNTIsIDIyMiwgOTQsIDEsIDE3NywgOTQsIDEsIDI0NiwgMTc4LCAKLSAgICA5NCwgMSwgMjUyLCAyMDUsIDk0LCAxLCAyNDYsIDIwMiwgOTQsIDEsIDI0NiwgMTY5LCA5NCwgMSwgMjUyLCAyMTUsIDk0LCAKLSAgICAxLCAyNDYsIDE3NiwgOTQsIDEsIDI1MiwgMjEzLCA5NCwgMSwgMjQ2LCAyMTMsIDk0LCAxLCAyNDYsIDE4MSwgOTQsIDEsIAotICAgIDI0NiwgMTkxLCA5NCwgMSwgMjQwLCAxNTAsIDk0LCAxLCAyNDYsIDE5MiwgOTQsIDEsIDI0MCwgMTY2LCA5NCwgMSwgMjQ2LCAKLSAgICAyMDMsIDk0LCAxLCAyNTIsIDIwMiwgOTQsIDEsIDI0NiwgMTczLCA5NCwgMSwgMjUyLCAyMDMsIDk0LCAxLCAyNDYsIDE5NiwgCi0gICAgOTQsIDEsIDI1MiwgMjAxLCA5NCwgMSwgMjQxLCAyMDMsIDk0LCAxLCAyMTMsIDk0LCAxLCAyNDYsIDE4MiwgOTQsIDEsIAotICAgIDI1MiwgMjExLCA5NCwgMSwgMjQ2LCAxOTksIDk0LCAxLCAxOTgsIDk0LCAxLCAxOTEsIDk0LCAxLCAyMDgsIDk0LCAxLCAKLSAgICAyNDYsIDIyMSwgOTQsIDEsIDI1MiwgMjAwLCA5NCwgMSwgMjQ2LCAyMjUsIDk0LCAxLCAyNDEsIDQ4LCA5NCwgMSwgMjUyLCAKLSAgICAyNDMsIDk0LCAxLCAyNDYsIDE2NSwgOTQsIDEsIDI0NiwgMTkwLCA5NCwgMSwgMjUyLCAyMDQsIDk0LCAxLCAxNTQsIDk0LCAKLSAgICA1LCAyMzcsIDEyNSwgOTQsIDUsIDIzMSwgMjIwLCA5NCwgMzEsIDUsIDI1MiwgMjEyLCA5NCwgMzEsIDUsIDc0LCA5NCwgMzEsIAotICAgIDUsIDI1MiwgMjE2LCA5NCwgMzEsIDUsIDY2LCA5NCwgMzEsIDUsIDI1MiwgMjI0LCA5NCwgMzEsIDUsIDE1MywgMTQ2LCA5NCwgCi0gICAgMzEsIDUsIDE1MywgMjUyLCAyNDksIDk0LCAzMSwgNSwgMjM3LCAxMDgsIDcyLCA5NCwgMzEsIDUsIDI0MCwgMTI1LCA3MiwgCi0gICAgOTQsIDMxLCA1LCA3MiwgOTQsIDMxLCA1LCAyNTIsIDIyMSwgOTQsIDMxLCA1LCAyMzcsIDEwOCwgNzMsIDk0LCAzMSwgNSwgCi0gICAgMjQwLCAxMjUsIDczLCA5NCwgMzEsIDUsIDczLCA5NCwgMzEsIDUsIDI1MiwgMjIyLCA5NCwgNSwgMjM1LCA0MywgOTQsIAotICAgIDI1MywgMTI4LCA5NCwgMjM3LCAxNjUsIDUsIDIzNywgMTQsIDk0LCAyMzcsIDE2NSwgNSwgMjMyLCA2OCwgOTQsIDI0MCwgCi0gICAgMTYzLCAyMzUsIDI0LCA5NCwgMjQwLCAxNTksIDIzNSwgMjQsIDk0LCAxLCAyNTMsIDM1LCA5NCwgMSwgMjQxLCAxNzMsIDk0LCAKLSAgICAxLCAyNDEsIDE0MiwgOTQsIDEsIDI1MiwgMjI2LCA5NCwgMSwgMjM4LCAxNzQsIDk0LCAxLCAyNDcsIDQ4LCA5NCwgMSwgCi0gICAgMjUyLCAyMzQsIDk0LCAxLCAyNDcsIDIzNiwgOTQsIDEsIDE1MywgMjUyLCAyNDksIDk0LCAxLCAxNTMsIDI1MiwgMjQ1LCAKLSAgICA5NCwgMzEsIDUsIDE1MywgMTQ5LCA5NCwgMzEsIDUsIDE1MywgMjUyLCAyNDUsIDk0LCAyMzcsIDEwOSwgOTQsIDQ3LCAyMzcsIAotICAgIDEwOSwgOTQsIDIxLCAyNDAsIDEyNiwgOTQsIDIxLCAxMTgsIDk0LCAyMSwgMTEzLCA5NCwgMjEsIDE2NiwgOTQsIDIxLCAKLSAgICAxNTgsIDk0LCAyMSwgMTczLCA5NCwgMjEsIDE4MywgOTQsIDIxLCAxOTQsIDk0LCAyMSwgMTg3LCA5NCwgMjEsIDE5MiwgOTQsIAotICAgIDIyOCwgMTk2LCA1MywgOTQsIDUsIDIwMSwgMjM2LCAyMzQsIDI0NiwgMTY0LCA5NCwgMSwgMjM3LCAxMDgsIDU3LCA5NCwgMSwgCi0gICAgMjQ3LCA3NywgOTQsIDEsIDI0OCwgNzAsIDk0LCAxLCAyMzUsIDMxLCAyNDAsIDEyMSwgOTQsIDEsIDI0MywgMzQsIDk0LCAxLCAKLSAgICAyNDcsIDY2LCAxMjEsIDUsIDIyOCwgMTg0LCAxMjEsIDUsIDIzMSwgMjA2LCAxMjEsIDUsIDIzMywgMTAyLCAxMjEsIDEsIAotICAgIDU3LCAxMjEsIDEsIDI1MiwgMjEyLCAxMjEsIDEsIDc0LCAxMjEsIDEsIDI1MiwgMjE2LCAxMjEsIDEsIDY2LCAxMjEsIDEsIAotICAgIDI1MiwgMjI0LCAxMjEsIDEsIDE1MywgMTQ2LCAxMjEsIDEsIDE1MywgMTQ5LCAxMjEsIDEsIDcyLCAxMjEsIDEsIDI1MiwgCi0gICAgMjIxLCAxMjEsIDEsIDczLCAxMjEsIDEsIDI1MiwgMjIyLCAxMjEsIDEsIDE3NywgMTIxLCAxLCAyNDYsIDE3OCwgMTIxLCAxLCAKLSAgICAyNTIsIDIwNSwgMTIxLCAxLCAyNDYsIDIwMiwgMTIxLCAxLCAyNDYsIDE2OSwgMTIxLCAxLCAyNTIsIDIxNSwgMTIxLCAxLCAKLSAgICAyNDYsIDE3NiwgMTIxLCAxLCAyNTIsIDIxMywgMTIxLCAxLCAyNDYsIDIxMywgMTIxLCAxLCAyNDYsIDE4MSwgMTIxLCAxLCAKLSAgICAyNDYsIDE5MSwgMTIxLCAxLCAyNDAsIDE1MCwgMTIxLCAxLCAyNDYsIDE5MiwgMTIxLCAxLCAyNDAsIDE2NiwgMTIxLCAxLCAKLSAgICAyNDYsIDIwMywgMTIxLCAxLCAyNTIsIDIwMiwgMTIxLCAxLCAyNDYsIDE3MywgMTIxLCAxLCAyNTIsIDIwMywgMTIxLCAxLCAKLSAgICAyNDYsIDE5NiwgMTIxLCAxLCAyNTIsIDIwMSwgMTIxLCAxLCAyMTMsIDEyMSwgMSwgMjQ2LCAxODIsIDEyMSwgMSwgMjUyLCAKLSAgICAyMTEsIDEyMSwgMSwgMjQ2LCAxOTksIDEyMSwgMSwgMTk4LCAxMjEsIDEsIDE5MSwgMTIxLCAxLCAyMDgsIDEyMSwgMSwgCi0gICAgMjUyLCAyMDAsIDEyMSwgMSwgMjQ2LCAxNjUsIDEyMSwgMSwgMjQ2LCAxOTAsIDEyMSwgMSwgMjUyLCAyMDQsIDEyMSwgMSwgCi0gICAgMTU0LCAxMjEsIDUsIDIzNywgMTI1LCAxMjEsIDUsIDIzMSwgMjIwLCAxMjEsIDMxLCA1LCAyNTIsIDIxMiwgMTIxLCAzMSwgCi0gICAgNSwgNzQsIDEyMSwgMzEsIDUsIDI1MiwgMjE2LCAxMjEsIDMxLCA1LCA2NiwgMTIxLCAzMSwgNSwgMjUyLCAyMjQsIDEyMSwgCi0gICAgMzEsIDUsIDE1MywgMTQ2LCAxMjEsIDMxLCA1LCAxNTMsIDI1MiwgMjQ5LCAxMjEsIDMxLCA1LCA3MiwgMTIxLCAzMSwgNSwgCi0gICAgMjUyLCAyMjEsIDEyMSwgMzEsIDUsIDczLCAxMjEsIDMxLCA1LCAyNTIsIDIyMiwgMTIxLCA1LCAyMzUsIDQzLCAxMjEsIDEsIAotICAgIDIzOSwgNjcsIDI1MiwgMjAyLCAxMjEsIDI1NCwgMjMzLCAyMzcsIDEwMSwgNzYsIDEyMSwgMSwgMjQ2LCAyMjEsIDEyMSwgMSwgCi0gICAgMjQ3LCA0OCwgMTIxLCAxLCAyNDcsIDIzNiwgMTIxLCAxLCAxNTMsIDI1MiwgMjQ5LCAxMjEsIDEsIDE1MywgMjUyLCAyNDUsIAotICAgIDEyMSwgMzEsIDUsIDE1MywgMTQ5LCAxMjEsIDMxLCA1LCAxNTMsIDI1MiwgMjQ1LCAxMjEsIDIxLCAyNDAsIDEyNiwgMTIxLCAKLSAgICAyMSwgMTE4LCAxMjEsIDIxLCAxMTMsIDEyMSwgMjEsIDE2NiwgMTIxLCAyMSwgMTU4LCAxMjEsIDIxLCAxNzMsIDEyMSwgMjEsIAotICAgIDE4MywgMTIxLCAyMSwgMTk0LCAxMjEsIDIxLCAxODcsIDEyMSwgMjEsIDE5MiwgMTIxLCAxLCAyNTQsIDIyNCwgMiwgMjM3LCAKLSAgICA0NCwgMjMxLCAyMzYsIDEyMSwgMSwgMjU0LCAyMjQsIDIsIDIwMywgMjMxLCAyMzYsIDEyMSwgMjQwLCAyMzQsIDc2LCAxMjEsIAotICAgIDI0MCwgMjM0LCA1MywgMTIxLCAyMzMsIDExMiwgMjMxLCAyMjcsIDExOCwgMTIxLCAyMzMsIDExMiwgMjMxLCAyMjcsIDExMywgCi0gICAgMTIxLCAyMzMsIDExMiwgMjMxLCAyMjcsIDE2NiwgMTIxLCAyMzMsIDExMiwgMjMxLCAyMjcsIDE1OCwgMTIxLCAyMzMsIAotICAgIDExMiwgMjMxLCAyMjcsIDE2OCwgMjUwLCAyMTUsIDI0NywgMjEyLCAyNTIsIDIzMCwgMjI4LCAyMzgsIDEyMSwgMjMzLCAKLSAgICAxMTIsIDIyOSwgMjQ2LCAyMzMsIDEzNSwgMTIxLCAyMzUsIDE3OSwgMTQ4LCA1LCAyNDgsIDIyOCwgMjM3LCAyMzIsIDE0OCwgCi0gICAgNSwgMjM3LCAyMzIsIDE0OCwgNSwgMjMzLCAxMDIsIDE0OCwgMSwgNTcsIDE0OCwgMSwgMjUyLCAyMTIsIDE0OCwgMSwgNzQsIAotICAgIDE0OCwgMSwgMjUyLCAyMTYsIDE0OCwgMSwgNjYsIDE0OCwgMSwgMjUyLCAyMjQsIDE0OCwgMSwgMjUyLCAyMzEsIDE0OCwgMSwgCi0gICAgMjUyLCAyMjEsIDE0OCwgMSwgMjUyLCAyMjAsIDE0OCwgMSwgMjUyLCAyMjIsIDE0OCwgMSwgMTc3LCAxNDgsIDEsIDI0NiwgCi0gICAgMTc4LCAxNDgsIDEsIDI1MiwgMjA1LCAxNDgsIDEsIDI0NiwgMjAyLCAxNDgsIDEsIDI0NiwgMTY5LCAxNDgsIDEsIDI1MiwgCi0gICAgMjE1LCAxNDgsIDEsIDI0NiwgMTc2LCAxNDgsIDEsIDI1MiwgMjEzLCAxNDgsIDEsIDI0NiwgMjEzLCAxNDgsIDEsIDI0NiwgCi0gICAgMTgxLCAxNDgsIDEsIDI0NiwgMTkxLCAxNDgsIDEsIDI0MCwgMTUwLCAxNDgsIDEsIDI0NiwgMTkyLCAxNDgsIDEsIDI0MCwgCi0gICAgMTY2LCAxNDgsIDEsIDI0NiwgMjAzLCAxNDgsIDEsIDI1MiwgMjAyLCAxNDgsIDEsIDI0NiwgMTczLCAxNDgsIDEsIDI1MiwgCi0gICAgMjAzLCAxNDgsIDEsIDI0NiwgMTk2LCAxNDgsIDEsIDI1MiwgMjAxLCAxNDgsIDEsIDIxMywgMTQ4LCAxLCAyNDYsIDE4MiwgCi0gICAgMTQ4LCAxLCAyNTIsIDIxMSwgMTQ4LCAxLCAyNDYsIDE5OSwgMTQ4LCAxLCAxOTgsIDE0OCwgMSwgMTkxLCAxNDgsIDEsIAotICAgIDIwOCwgMTQ4LCAxLCAyNTIsIDIwMCwgMTQ4LCAxLCAyNDYsIDIyNSwgMTQ4LCAxLCAyNTIsIDI0MywgMTQ4LCAxLCAyNDYsIAotICAgIDE2NSwgMTQ4LCAxLCAyNTIsIDIwNCwgMTQ4LCAxLCAxNTQsIDE0OCwgNSwgMjM3LCAxMjUsIDE0OCwgMzEsIDUsIDI1MiwgCi0gICAgMjEyLCAxNDgsIDMxLCA1LCA3NCwgMTQ4LCAzMSwgNSwgMjUyLCAyMTYsIDE0OCwgMzEsIDUsIDY2LCAxNDgsIDMxLCA1LCAKLSAgICAyNTIsIDIyNCwgMTQ4LCAzMSwgNSwgMjUyLCAyMzEsIDE0OCwgMzEsIDUsIDI1MiwgMjIxLCAxNDgsIDMxLCA1LCAyNTIsIAotICAgIDIyMCwgMTQ4LCAzMSwgNSwgMjUyLCAyMjIsIDE0OCwgNSwgMjM1LCA0MywgMTQ4LCA1LCAyNDAsIDY0LCAxNDgsIDEsIDI0MSwgCi0gICAgMTczLCAxNDgsIDEsIDI0MSwgMTQyLCAxNDgsIDEsIDI1MiwgMjI2LCAxNDgsIDEsIDI0NiwgMjIxLCAxNDgsIDEsIDI1MiwgCi0gICAgMjM0LCAxNDgsIDIxLCAyNDAsIDEyNiwgMTQ4LCAyMSwgMTE4LCAxNDgsIDIxLCAxMTMsIDE0OCwgMjEsIDE2NiwgMTQ4LCAKLSAgICAyMSwgMTU4LCAxNDgsIDIxLCAxNzMsIDE0OCwgMjEsIDE4MywgMTQ4LCAyMSwgMTk0LCAxNDgsIDIxLCAxODcsIDE0OCwgMjEsIAotICAgIDE5MiwgMTQ4LCAyNDAsIDQ0LCAxNDgsIDIzOCwgODksIDE0OCwgMjUwLCAxMjIsIDE0OCwgMjUyLCA2MCwgMTQ4LCAyNTUsIAotICAgIDI1LCAyMzksIDE3NCwgMTQ4LCA1LCAyMzcsIDMyLCAxMzcsIDUsIDIyOCwgMTg0LCAxMzcsIDUsIDIzMSwgMjA2LCAxMzcsIAotICAgIDUsIDIzMywgMTAyLCAxMzcsIDEsIDU3LCAxMzcsIDEsIDI1MiwgMjEyLCAxMzcsIDEsIDc0LCAxMzcsIDEsIDI1MiwgMjE2LCAKLSAgICAxMzcsIDEsIDY2LCAxMzcsIDEsIDI1MiwgMjI0LCAxMzcsIDEsIDE1MywgMTQ2LCAxMzcsIDEsIDE1MywgMTQ5LCAxMzcsIAotICAgIDMxLCAyMzcsIDEwOCwgNzIsIDEzNywgMSwgNzIsIDEzNywgMSwgMjUyLCAyMjEsIDEzNywgMzEsIDIzNywgMTA4LCA3MywgCi0gICAgMTM3LCAxLCA3MywgMTM3LCAxLCAyNTIsIDIyMiwgMTM3LCAxLCAxNzcsIDEzNywgMSwgMjQ2LCAxNzgsIDEzNywgMSwgMjUyLCAKLSAgICAyMDUsIDEzNywgMSwgMjQ2LCAyMDIsIDEzNywgMSwgMjQ2LCAxNjksIDEzNywgMSwgMjUyLCAyMTUsIDEzNywgMSwgMjQ2LCAKLSAgICAxNzYsIDEzNywgMSwgMjUyLCAyMTMsIDEzNywgMSwgMjQ2LCAyMTMsIDEzNywgMSwgMjQ2LCAxODEsIDEzNywgMSwgMjQ2LCAKLSAgICAxOTEsIDEzNywgMSwgMjQwLCAxNTAsIDEzNywgMSwgMjQ2LCAxOTIsIDEzNywgMSwgMjQwLCAxNjYsIDEzNywgMSwgMjQ2LCAKLSAgICAyMDMsIDEzNywgMSwgMjUyLCAyMDIsIDEzNywgMSwgMjQ2LCAxNzMsIDEzNywgMSwgMjUyLCAyMDMsIDEzNywgMSwgMjQ2LCAKLSAgICAxOTYsIDEzNywgMSwgMjUyLCAyMDEsIDEzNywgMSwgMjEzLCAxMzcsIDEsIDI0NiwgMTgyLCAxMzcsIDEsIDI1MiwgMjExLCAKLSAgICAxMzcsIDEsIDI0NiwgMTk5LCAxMzcsIDEsIDE5OCwgMTM3LCAxLCAxOTEsIDEzNywgMSwgMjA4LCAxMzcsIDEsIDI1MiwgCi0gICAgMjAwLCAxMzcsIDEsIDI0NiwgMjI1LCAxMzcsIDEsIDI1MiwgMjQzLCAxMzcsIDEsIDI0NiwgMTY1LCAxMzcsIDEsIDI0NiwgCi0gICAgMTkwLCAxMzcsIDEsIDI1MiwgMjA0LCAxMzcsIDEsIDE1NCwgMTM3LCA1LCAyMzcsIDEyNSwgMTM3LCA1LCAyMzEsIDIyMCwgCi0gICAgMTM3LCAzMSwgNSwgMjUyLCAyMTIsIDEzNywgMzEsIDUsIDc0LCAxMzcsIDMxLCA1LCAyNTIsIDIxNiwgMTM3LCAzMSwgNSwgCi0gICAgNjYsIDEzNywgMzEsIDUsIDI1MiwgMjI0LCAxMzcsIDMxLCA1LCAxNTMsIDE0NiwgMTM3LCAzMSwgNSwgMTUzLCAyNTIsIAotICAgIDI0OSwgMTM3LCAzMSwgNSwgMjM3LCAxMDgsIDcyLCAxMzcsIDMxLCA1LCA3MiwgMTM3LCAzMSwgNSwgMjUyLCAyMjEsIDEzNywgCi0gICAgMzEsIDUsIDIzNywgMTA4LCA3MywgMTM3LCAzMSwgNSwgNzMsIDEzNywgMzEsIDUsIDI1MiwgMjIyLCAxMzcsIDUsIDIzNSwgCi0gICAgNDMsIDEzNywgMjUzLCAxMjgsIDEzNywgMSwgMTUzLCAyNTIsIDI0OSwgMTM3LCAxLCAxNTMsIDI1MiwgMjQ1LCAxMzcsIDMxLCAKLSAgICA1LCAxNTMsIDE0OSwgMTM3LCAzMSwgNSwgMTUzLCAyNTIsIDI0NSwgMTM3LCAyMSwgMjQwLCAxMjYsIDEzNywgMjEsIDExOCwgCi0gICAgMTM3LCAyMSwgMTEzLCAxMzcsIDIxLCAxNjYsIDEzNywgMjEsIDE1OCwgMTM3LCAyMSwgMTczLCAxMzcsIDIxLCAxODMsIAotICAgIDEzNywgMjEsIDE5NCwgMTM3LCAyMSwgMTg3LCAxMzcsIDIxLCAxOTIsIDEzNywgMjQwLCAyMzQsIDUzLCAxMzQsIDUsIDIyOCwgCi0gICAgMTg0LCAxMzQsIDUsIDIzMSwgMjA2LCAxMzQsIDUsIDIzMywgMTAyLCAxMzQsIDEsIDU3LCAxMzQsIDEsIDI1MiwgMjEyLCAKLSAgICAxMzQsIDEsIDc0LCAxMzQsIDEsIDI1MiwgMjE2LCAxMzQsIDEsIDY2LCAxMzQsIDEsIDI1MiwgMjI0LCAxMzQsIDEsIDE1MywgCi0gICAgMTQ2LCAxMzQsIDEsIDE1MywgMTQ5LCAxMzQsIDEsIDcyLCAxMzQsIDEsIDI1MiwgMjIxLCAxMzQsIDEsIDczLCAxMzQsIDEsIAotICAgIDI1MiwgMjIyLCAxMzQsIDEsIDE3NywgMTM0LCAxLCAyNDYsIDE3OCwgMTM0LCAxLCAyNTIsIDIwNSwgMTM0LCAxLCAyNDYsIAotICAgIDIwMiwgMTM0LCAxLCAyNDYsIDE2OSwgMTM0LCAxLCAyNTIsIDIxNSwgMTM0LCAxLCAyNDYsIDE3NiwgMTM0LCAxLCAyNTIsIAotICAgIDIxMywgMTM0LCAxLCAyNDYsIDIxMywgMTM0LCAxLCAyNDYsIDE4MSwgMTM0LCAxLCAyNDYsIDE5MSwgMTM0LCAxLCAyNDAsIAotICAgIDE1MCwgMTM0LCAxLCAyNDYsIDE5MiwgMTM0LCAxLCAyNDAsIDE2NiwgMTM0LCAxLCAyNDYsIDIwMywgMTM0LCAxLCAyNTIsIAotICAgIDIwMiwgMTM0LCAxLCAyNDYsIDE3MywgMTM0LCAxLCAyNTIsIDIwMywgMTM0LCAxLCAyNDYsIDE5NiwgMTM0LCAxLCAyNTIsIAotICAgIDIwMSwgMTM0LCAxLCAyMTMsIDEzNCwgMSwgMjQ2LCAxODIsIDEzNCwgMSwgMjUyLCAyMTEsIDEzNCwgMSwgMjQ2LCAxOTksIAotICAgIDEzNCwgMSwgMTk4LCAxMzQsIDEsIDE5MSwgMTM0LCAxLCAyMDgsIDEzNCwgMSwgMjUyLCAyMDAsIDEzNCwgMSwgMjQ2LCAKLSAgICAyMjUsIDEzNCwgMSwgMjUyLCAyNDMsIDEzNCwgMSwgMjQ2LCAxNjUsIDEzNCwgMSwgMjQ2LCAxOTAsIDEzNCwgMSwgMjUyLCAKLSAgICAyMDQsIDEzNCwgMSwgMTU0LCAxMzQsIDUsIDIzNywgMTI1LCAxMzQsIDUsIDIzMSwgMjIwLCAxMzQsIDMxLCA1LCAyNTIsIAotICAgIDIxMiwgMTM0LCAzMSwgNSwgNzQsIDEzNCwgMzEsIDUsIDI1MiwgMjE2LCAxMzQsIDMxLCA1LCA2NiwgMTM0LCAzMSwgNSwgCi0gICAgMjUyLCAyMjQsIDEzNCwgMzEsIDUsIDE1MywgMTQ2LCAxMzQsIDMxLCA1LCAxNTMsIDI1MiwgMjQ5LCAxMzQsIDMxLCA1LCAKLSAgICA3MiwgMTM0LCAzMSwgNSwgMjUyLCAyMjEsIDEzNCwgMzEsIDUsIDczLCAxMzQsIDMxLCA1LCAyNTIsIDIyMiwgMTM0LCA1LCAKLSAgICAyMzUsIDQzLCAxMzQsIDI1NCwgMjI3LCAyMzcsIDEwMSwgNzYsIDEzNCwgMjU0LCAyMzMsIDIzNywgMTAxLCA3NiwgMTM0LCAKLSAgICAxLCAyNDYsIDIyMSwgMTM0LCAxLCAyNDcsIDQ4LCAxMzQsIDEsIDI0NywgMjM2LCAxMzQsIDEsIDE1MywgMjUyLCAyNDksIAotICAgIDEzNCwgMSwgMTUzLCAyNTIsIDI0NSwgMTM0LCAzMSwgNSwgMTUzLCAxNDksIDEzNCwgMzEsIDUsIDE1MywgMjUyLCAyNDUsIAotICAgIDEzNCwgMjEsIDI0MCwgMTI2LCAxMzQsIDIxLCAxMTgsIDEzNCwgMjEsIDExMywgMTM0LCAyMSwgMTY2LCAxMzQsIDIxLCAKLSAgICAxNTgsIDEzNCwgMjEsIDE3MywgMTM0LCAyMSwgMTgzLCAxMzQsIDIxLCAxOTQsIDEzNCwgMjEsIDE4NywgMTM0LCAyMSwgCi0gICAgMTkyLCAxMzQsIDIzNSwgMTc5LCAxMzQsIDEsIDI1MiwgMjA4LCAxNjAsIDUsIDIzMSwgMjA2LCAxNjAsIDUsIDIzMywgMTAyLCAKLSAgICAxNjAsIDEsIDU3LCAxNjAsIDEsIDI1MiwgMjEyLCAxNjAsIDEsIDc0LCAxNjAsIDEsIDI1MiwgMjE2LCAxNjAsIDEsIDY2LCAKLSAgICAxNjAsIDEsIDI1MiwgMjI0LCAxNjAsIDEsIDcyLCAxNjAsIDEsIDI1MiwgMjMxLCAxNjAsIDEsIDI1MiwgMjIxLCAxNjAsIDEsIAotICAgIDczLCAxNjAsIDEsIDI1MiwgMjIwLCAxNjAsIDEsIDI1MiwgMjIyLCAxNjAsIDEsIDE3NywgMTYwLCAxLCAyNDYsIDE2OSwgCi0gICAgMTYwLCAxLCAyNTIsIDIxNSwgMTYwLCAxLCAyNTIsIDIxMywgMTYwLCAxLCAyNDYsIDE4MSwgMTYwLCAxLCAyNDYsIDE5MSwgCi0gICAgMTYwLCAxLCAyNDYsIDIwMywgMTYwLCAxLCAyNTIsIDIwMiwgMTYwLCAxLCAyNTIsIDIwMSwgMTYwLCAxLCAyNDEsIDIwMywgCi0gICAgMTYwLCAxLCAyMTMsIDE2MCwgMSwgMTk4LCAxNjAsIDEsIDE5MSwgMTYwLCAxLCAyMDgsIDE2MCwgMSwgMjQ2LCAyMjEsIAotICAgIDE2MCwgMSwgMjUyLCAyMDAsIDE2MCwgMSwgMjQ2LCAyMjUsIDE2MCwgMSwgMjQxLCA0OCwgMTYwLCAxLCAyNTIsIDI0MywgCi0gICAgMTYwLCAxLCAyNDYsIDE2NSwgMTYwLCAxLCAyNDYsIDE5MCwgMTYwLCAxLCAyNTIsIDIwNCwgMTYwLCAxLCAxNTQsIDE2MCwgCi0gICAgMzEsIDUsIDI1MiwgMjEyLCAxNjAsIDMxLCA1LCA3NCwgMTYwLCAzMSwgNSwgMjUyLCAyMTYsIDE2MCwgMzEsIDUsIDY2LCAKLSAgICAxNjAsIDMxLCA1LCAyNTIsIDIyNCwgMTYwLCAzMSwgNSwgNzIsIDE2MCwgMzEsIDUsIDI1MiwgMjMxLCAxNjAsIDMxLCA1LCAKLSAgICAyNTIsIDIyMSwgMTYwLCAzMSwgNSwgNzMsIDE2MCwgMzEsIDUsIDI1MiwgMjIwLCAxNjAsIDMxLCA1LCAyNTIsIDIyMiwgCi0gICAgMTYwLCA1LCAyMzUsIDQzLCAxNjAsIDI1MywgMTI4LCAxNjAsIDI1NCwgMjMzLCAyMzcsIDEwMSwgNzYsIDE2MCwgMjEsIAotICAgIDI0MCwgMTI2LCAxNjAsIDIxLCAxMTgsIDE2MCwgMjEsIDExMywgMTYwLCAyMSwgMTY2LCAxNjAsIDIxLCAxNTgsIDE2MCwgCi0gICAgMjEsIDE3MywgMTYwLCAyMSwgMTgzLCAxNjAsIDIxLCAxOTQsIDE2MCwgMjEsIDE4NywgMTYwLCAyMSwgMTkyLCAxNjAsIDY1LCAKLSAgICAyNDYsIDE3OSwgMTYwLCA2NSwgMTY4LCAyMzMsIDc1LCAxNjAsIDY1LCAxNjgsIDIzMSwgMTk2LCAxNjAsIDI1MiwgMjE4LCAKLSAgICA1MywgMTYwLCAyNDQsIDE1MCwgNTMsIDE2MCwgMjQ4LCAyMDAsIDUzLCAxNjAsIDI0MywgNTMsIDUzLCAxNjAsIDIzOCwgCi0gICAgMTYzLCA1MywgMTYwLCAyNTQsIDIwMywgNjQsIDUzLCAxNjAsIDI0MCwgMjM0LCA1MywgMTYwLCA2NSwgNTMsIDExOSwgNSwgCi0gICAgMjI4LCAxODQsIDExOSwgNSwgMjMxLCAyMDYsIDExOSwgNSwgMjMzLCAxMDIsIDExOSwgMSwgNTcsIDExOSwgMSwgMjUyLCAKLSAgICAyMTIsIDExOSwgMSwgNzQsIDExOSwgMSwgMjUyLCAyMTYsIDExOSwgMSwgNjYsIDExOSwgMSwgMjUyLCAyMjQsIDExOSwgMSwgCi0gICAgMTUzLCAxNDYsIDExOSwgMSwgMTUzLCAxNDksIDExOSwgMSwgNzIsIDExOSwgMSwgMjUyLCAyMzEsIDExOSwgMSwgMjUyLCAKLSAgICAyMjEsIDExOSwgMSwgNzMsIDExOSwgMSwgMjUyLCAyMjAsIDExOSwgMSwgMjUyLCAyMjIsIDExOSwgMSwgMTc3LCAxMTksIDEsIAotICAgIDI0NiwgMTc4LCAxMTksIDEsIDI1MiwgMjA1LCAxMTksIDEsIDI0NiwgMjAyLCAxMTksIDEsIDI0NiwgMTY5LCAxMTksIDEsIAotICAgIDI1MiwgMjE1LCAxMTksIDEsIDI0NiwgMTc2LCAxMTksIDEsIDI1MiwgMjEzLCAxMTksIDEsIDI0NiwgMjEzLCAxMTksIDEsIAotICAgIDI0NiwgMTgxLCAxMTksIDEsIDI0NiwgMTkxLCAxMTksIDEsIDI0MCwgMTUwLCAxMTksIDEsIDI0NiwgMTkyLCAxMTksIDEsIAotICAgIDI0MCwgMTY2LCAxMTksIDEsIDI0NiwgMjAzLCAxMTksIDEsIDI1MiwgMjAyLCAxMTksIDEsIDI0NiwgMTczLCAxMTksIDEsIAotICAgIDI1MiwgMjAzLCAxMTksIDEsIDI0NiwgMTk2LCAxMTksIDEsIDI1MiwgMjAxLCAxMTksIDEsIDIxMywgMTE5LCAxLCAyNDYsIAotICAgIDE4MiwgMTE5LCAxLCAyNTIsIDIxMSwgMTE5LCAxLCAyNDYsIDE5OSwgMTE5LCAxLCAxOTgsIDExOSwgMSwgMTkxLCAxMTksIAotICAgIDEsIDIwOCwgMTE5LCAxLCAyNDYsIDIyMSwgMTE5LCAxLCAyNTIsIDIwMCwgMTE5LCAxLCAyNDYsIDIyNSwgMTE5LCAxLCAKLSAgICAyNTIsIDI0MywgMTE5LCAxLCAyNDYsIDE2NSwgMTE5LCAxLCAyNDYsIDE5MCwgMTE5LCAxLCAyNTIsIDIwNCwgMTE5LCAxLCAKLSAgICAxNTQsIDExOSwgNSwgMjMxLCAyMjAsIDExOSwgMzEsIDUsIDI1MiwgMjEyLCAxMTksIDMxLCA1LCA3NCwgMTE5LCAzMSwgNSwgCi0gICAgMjUyLCAyMTYsIDExOSwgMzEsIDUsIDY2LCAxMTksIDMxLCA1LCAyNTIsIDIyNCwgMTE5LCAzMSwgNSwgMTUzLCAxNDYsIAotICAgIDExOSwgMzEsIDUsIDE1MywgMjUyLCAyNDksIDExOSwgMzEsIDUsIDcyLCAxMTksIDMxLCA1LCAyNTIsIDIzMSwgMTE5LCAzMSwgCi0gICAgNSwgMjUyLCAyMjEsIDExOSwgMzEsIDUsIDczLCAxMTksIDMxLCA1LCAyNTIsIDIyMCwgMTE5LCAzMSwgNSwgMjUyLCAyMjIsIAotICAgIDExOSwgNSwgMjM1LCA0MywgMTE5LCAyMzcsIDEwMSwgNzYsIDExOSwgMjU0LCAyMjcsIDIzNywgMTAxLCA3NiwgMTE5LCAxLCAKLSAgICAyNDYsIDIxNiwgMTE5LCAxLCAyNDYsIDI1NCwgMTE5LCAxLCAxNTMsIDI1MiwgMjQ5LCAxMTksIDEsIDE1MywgMjUyLCAyNDUsIAotICAgIDExOSwgMzEsIDUsIDE1MywgMTQ5LCAxMTksIDMxLCA1LCAxNTMsIDI1MiwgMjQ1LCAxMTksIDIxLCAyNDAsIDEyNiwgMTE5LCAKLSAgICAyMSwgMTE4LCAxMTksIDIxLCAxMTMsIDExOSwgMjEsIDE2NiwgMTE5LCAyMSwgMTU4LCAxMTksIDIxLCAxNzMsIDExOSwgMjEsIAotICAgIDE4MywgMTE5LCAyMSwgMTk0LCAxMTksIDIxLCAxODcsIDExOSwgMjEsIDE5MiwgMTE5LCAyMzMsIDc2LCAyMSwgMjQ3LCAyNywgCi0gICAgMzIsIDI1MywgMTU2LCAyMzcsIDEyNiwgMTA2LCAxNTgsIDExOSwgMjMzLCA3NiwgMjEsIDE2OCwgMzIsIDI1MywgMTU2LCAKLSAgICAyMzcsIDEyNiwgMTA2LCAxNTgsIDExOSwgMjMzLCA3NiwgMjEsIDEzNSwgMzIsIDI1MywgMTU2LCAyMzcsIDEyNiwgMTA2LCAKLSAgICAxNTgsIDExOSwgMjMzLCA3NiwgMjEsIDE1MiwgMzIsIDI1MywgMTU2LCAyMzcsIDEyNiwgMTA2LCAxNTgsIDExOSwgMjMzLCAKLSAgICA3NiwgMjEsIDE2OCwgMzIsIDI0NywgMTM4LCAyMzcsIDEyNiwgMTA2LCAxNTgsIDExOSwgMjMzLCA3NiwgMjEsIDEzNSwgMzIsIAotICAgIDI0NywgMTM4LCAyMzcsIDEyNiwgMTA2LCAxNTgsIDExOSwgMjMzLCA3NiwgMjEsIDE1MiwgMzIsIDI0NywgMTM4LCAyMzcsIAotICAgIDEyNiwgMTA2LCAxNTgsIDExOSwgNSwgMjQwLCA1NiwgMTI5LCA1LCAyMzEsIDIwNiwgMTI5LCA1LCAyMzMsIDEwMiwgMTI5LCAKLSAgICAxLCA1NywgMTI5LCAxLCAyNTIsIDIxMiwgMTI5LCAxLCA3NCwgMTI5LCAxLCAyNTIsIDIxNiwgMTI5LCAxLCA2NiwgMTI5LCAKLSAgICAxLCAyNTIsIDIyNCwgMTI5LCAxLCAxNTMsIDE0NiwgMTI5LCAxLCAxNTMsIDE0OSwgMTI5LCAxLCA3MiwgMTI5LCAxLCAyNTIsIAotICAgIDIzMSwgMTI5LCAxLCAyNTIsIDIyMSwgMTI5LCAxLCA3MywgMTI5LCAxLCAyNTIsIDIyMCwgMTI5LCAxLCAyNTIsIDIyMiwgCi0gICAgMTI5LCAxLCAxNzcsIDEyOSwgMSwgMjQ2LCAxNzgsIDEyOSwgMSwgMjUyLCAyMDUsIDEyOSwgMSwgMjQ2LCAyMDIsIDEyOSwgCi0gICAgMSwgMjQ2LCAxNjksIDEyOSwgMSwgMjUyLCAyMTUsIDEyOSwgMSwgMjQ2LCAxNzYsIDEyOSwgMSwgMjUyLCAyMTMsIDEyOSwgCi0gICAgMSwgMjQ2LCAyMTMsIDEyOSwgMSwgMjQ2LCAxODEsIDEyOSwgMSwgMjQ2LCAxOTEsIDEyOSwgMSwgMjQwLCAxNTAsIDEyOSwgCi0gICAgMSwgMjQ2LCAxOTIsIDEyOSwgMSwgMjQwLCAxNjYsIDEyOSwgMSwgMjQ2LCAyMDMsIDEyOSwgMSwgMjUyLCAyMDIsIDEyOSwgCi0gICAgMSwgMjQ2LCAxNzMsIDEyOSwgMSwgMjUyLCAyMDMsIDEyOSwgMSwgMjQ2LCAxOTYsIDEyOSwgMSwgMjUyLCAyMDEsIDEyOSwgCi0gICAgMSwgMjEzLCAxMjksIDEsIDI0NiwgMTgyLCAxMjksIDEsIDI1MiwgMjExLCAxMjksIDEsIDI0NiwgMTk5LCAxMjksIDEsIAotICAgIDE5OCwgMTI5LCAxLCAxOTEsIDEyOSwgMSwgMjA4LCAxMjksIDEsIDI0NiwgMjIxLCAxMjksIDEsIDI1MiwgMjAwLCAxMjksIAotICAgIDEsIDI0NiwgMjI1LCAxMjksIDEsIDI1MiwgMjQzLCAxMjksIDEsIDI0NiwgMTY1LCAxMjksIDEsIDI0NiwgMTkwLCAxMjksIAotICAgIDEsIDI1MiwgMjA0LCAxMjksIDEsIDE1NCwgMTI5LCA1LCAyMzcsIDEyNSwgMTI5LCA1LCAyMzEsIDIyMCwgMTI5LCAzMSwgNSwgCi0gICAgMjUyLCAyMTIsIDEyOSwgMzEsIDUsIDc0LCAxMjksIDMxLCA1LCAyNTIsIDIxNiwgMTI5LCAzMSwgNSwgNjYsIDEyOSwgMzEsIAotICAgIDUsIDI1MiwgMjI0LCAxMjksIDMxLCA1LCAxNTMsIDE0NiwgMTI5LCAzMSwgNSwgMTUzLCAyNTIsIDI0OSwgMTI5LCAzMSwgNSwgCi0gICAgNzIsIDEyOSwgMzEsIDUsIDI1MiwgMjMxLCAxMjksIDMxLCA1LCAyNTIsIDIyMSwgMTI5LCAzMSwgNSwgNzMsIDEyOSwgMzEsIAotICAgIDUsIDI1MiwgMjIwLCAxMjksIDMxLCA1LCAyNTIsIDIyMiwgMTI5LCA1LCAyMzUsIDQzLCAxMjksIDIzNywgMTAxLCA3NiwgCi0gICAgMTI5LCAyNTQsIDIyNywgMjM3LCAxMDEsIDc2LCAxMjksIDEsIDI1MiwgMjM0LCAxMjksIDEsIDE1MywgMjUyLCAyNDksIAotICAgIDEyOSwgMSwgMTUzLCAyNTIsIDI0NSwgMTI5LCAzMSwgNSwgMTUzLCAxNDksIDEyOSwgMzEsIDUsIDE1MywgMjUyLCAyNDUsIAotICAgIDEyOSwgMjEsIDI0MCwgMTI2LCAxMjksIDIxLCAxMTgsIDEyOSwgMjEsIDExMywgMTI5LCAyMSwgMTY2LCAxMjksIDIxLCAKLSAgICAxNTgsIDEyOSwgMjEsIDE3MywgMTI5LCAyMSwgMTgzLCAxMjksIDIxLCAxOTQsIDEyOSwgMjEsIDE4NywgMTI5LCAyMSwgCi0gICAgMTkyLCAxMjksIDUsIDIyOSwgMzMsIDEyOSwgNSwgMjI5LCAxNjAsIDExNCwgNSwgMjMxLCAyMDYsIDExNCwgNSwgMjMzLCAKLSAgICAxMDIsIDExNCwgMSwgNTcsIDExNCwgMSwgMjUyLCAyMTIsIDExNCwgMSwgNzQsIDExNCwgMSwgMjUyLCAyMTYsIDExNCwgMSwgCi0gICAgNjYsIDExNCwgMSwgMjUyLCAyMjQsIDExNCwgMSwgMTUzLCAxNDYsIDExNCwgMSwgMTUzLCAxNDksIDExNCwgMSwgNzIsIAotICAgIDExNCwgMSwgMjUyLCAyMzEsIDExNCwgMSwgMjUyLCAyMjEsIDExNCwgMSwgNzMsIDExNCwgMSwgMjUyLCAyMjAsIDExNCwgMSwgCi0gICAgMjUyLCAyMjIsIDExNCwgMSwgMTc3LCAxMTQsIDEsIDI0NiwgMTc4LCAxMTQsIDEsIDI1MiwgMjA1LCAxMTQsIDEsIDI0NiwgCi0gICAgMjAyLCAxMTQsIDEsIDI0NiwgMTY5LCAxMTQsIDEsIDI1MiwgMjE1LCAxMTQsIDEsIDI0NiwgMTc2LCAxMTQsIDEsIDI1MiwgCi0gICAgMjEzLCAxMTQsIDEsIDI0NiwgMjEzLCAxMTQsIDEsIDI0NiwgMTgxLCAxMTQsIDEsIDI0NiwgMTkxLCAxMTQsIDEsIDI0MCwgCi0gICAgMTUwLCAxMTQsIDEsIDI0NiwgMTkyLCAxMTQsIDEsIDI0MCwgMTY2LCAxMTQsIDEsIDI0NiwgMjAzLCAxMTQsIDEsIDI1MiwgCi0gICAgMjAyLCAxMTQsIDEsIDI0NiwgMTczLCAxMTQsIDEsIDI1MiwgMjAzLCAxMTQsIDEsIDI0NiwgMTk2LCAxMTQsIDEsIDI1MiwgCi0gICAgMjAxLCAxMTQsIDEsIDIxMywgMTE0LCAxLCAyNDYsIDE4MiwgMTE0LCAxLCAyNTIsIDIxMSwgMTE0LCAxLCAyNDYsIDE5OSwgCi0gICAgMTE0LCAxLCAxOTgsIDExNCwgMSwgMTkxLCAxMTQsIDEsIDIwOCwgMTE0LCAxLCAyNDYsIDIyMSwgMTE0LCAxLCAyNTIsIAotICAgIDIwMCwgMTE0LCAxLCAyNDYsIDIyNSwgMTE0LCAxLCAyNDEsIDQ4LCAxMTQsIDEsIDI1MiwgMjQzLCAxMTQsIDEsIDI0NiwgCi0gICAgMTY1LCAxMTQsIDEsIDI0NiwgMTkwLCAxMTQsIDEsIDI1MiwgMjA0LCAxMTQsIDEsIDE1NCwgMTE0LCA1LCAyMzEsIDIyMCwgCi0gICAgMTE0LCAzMSwgNSwgMjUyLCAyMTIsIDExNCwgMzEsIDUsIDc0LCAxMTQsIDMxLCA1LCAyNTIsIDIxNiwgMTE0LCAzMSwgNSwgCi0gICAgNjYsIDExNCwgMzEsIDUsIDI1MiwgMjI0LCAxMTQsIDMxLCA1LCAxNTMsIDE0NiwgMTE0LCAzMSwgNSwgMTUzLCAyNTIsIAotICAgIDI0OSwgMTE0LCAzMSwgNSwgNzIsIDExNCwgMzEsIDUsIDI1MiwgMjMxLCAxMTQsIDMxLCA1LCAyNTIsIDIyMSwgMTE0LCAzMSwgCi0gICAgNSwgNzMsIDExNCwgMzEsIDUsIDI1MiwgMjIwLCAxMTQsIDMxLCA1LCAyNTIsIDIyMiwgMTE0LCA1LCAyMzUsIDQzLCAxMTQsIAotICAgIDI1NCwgMjMzLCAyMzcsIDEwMSwgNzYsIDExNCwgMSwgMTUzLCAyNTIsIDI0OSwgMTE0LCAxLCAxNTMsIDI1MiwgMjQ1LCAKLSAgICAxMTQsIDMxLCA1LCAxNTMsIDE0OSwgMTE0LCAzMSwgNSwgMTUzLCAyNTIsIDI0NSwgMTE0LCAyMSwgMjQwLCAxMjYsIDExNCwgCi0gICAgMjEsIDExOCwgMTE0LCAyMSwgMTEzLCAxMTQsIDIxLCAxNjYsIDExNCwgMjEsIDE1OCwgMTE0LCAyMSwgMTczLCAxMTQsIDIxLCAKLSAgICAxODMsIDExNCwgMjEsIDE5NCwgMTE0LCAyMSwgMTg3LCAxMTQsIDIxLCAxOTIsIDExNCwgNjUsIDI0NiwgMTc5LCAxMTQsIAotICAgIDY1LCAxNjgsIDIzMywgNzUsIDExNCwgNjUsIDE2OCwgMjMxLCAxOTYsIDExNCwgMjMzLCA3NiwgMTY4LCAyMzMsIDE1NSwgCi0gICAgMTE0LCAyMzMsIDc2LCAxNjgsIDI0MCwgMTcwLCAxMTQsIDIzMywgNzYsIDE1MiwgMjMyLCA0MSwgMTE0LCAyNDgsIDIwLCAKLSAgICA3NiwgMTE0LCAxLCAyMzcsIDEyOSwgMjUzLCAxNTUsIDExNCwgMSwgMjM3LCAxMjksIDE5OSwgMTE0LCAxLCAyMzcsIDEyOSwgCi0gICAgMjUyLCAyNDksIDExNCwgMSwgMjM3LCAxMjksIDE0OSwgMTE0LCAxLCAyMzcsIDEyOSwgMjUyLCAyNDUsIDExNCwgMSwgMjM3LCAKLSAgICAxMjksIDI1NCwgMTg2LCAxNDcsIDUsIDIyOSwgMjI5LCAxNDcsIDUsIDIzMSwgMTg0LCAxNDcsIDEsIDIzNiwgMywgMTQ3LCAKLSAgICAxLCAyMzMsIDI1MSwgMTQ3LCAxLCAyMzMsIDI1NCwgMTQ3LCAxLCAyMzIsIDY2LCAxNDcsIDEsIDIzNiwgMTE0LCAxNDcsIDEsIAotICAgIDIzNCwgMTI1LCAxNDcsIDEsIDIzNywgMTksIDE0NywgMSwgMjM1LCAzLCAxNDcsIDEsIDIzMiwgMjEwLCAxNDcsIDEsIDIzMSwgCi0gICAgODgsIDE0NywgMSwgMjMyLCAyMDUsIDE0NywgMSwgMjMxLCA4MSwgMTQ3LCAxLCAyMzYsIDY3LCAxNDcsIDEsIDIzNCwgOTEsIAotICAgIDE0NywgMSwgMjMzLCAyNTUsIDE0NywgMSwgMjM2LCAxODAsIDE0NywgMSwgMjM0LCAxNzcsIDE0NywgMSwgMjM0LCAxMCwgCi0gICAgMTQ3LCAxLCAyMzAsIDEzNSwgMjMzLCAyMTEsIDE0NywgMSwgMjI5LCAxNzEsIDIzMywgMjExLCAxNDcsIDEsIDIzMCwgMTM1LCAKLSAgICAyMzMsIDE2NSwgMTQ3LCAxLCAyMjksIDE3MSwgMjMzLCAxNjUsIDE0NywgMSwgMjM2LCAxMTcsIDIyOSwgMjAzLCAxNDcsIDEsIAotICAgIDIzNSwgOTksIDIzMywgMTY1LCAxNDcsIDEsIDIzMCwgMTM1LCAyMzMsIDE4OSwgMTQ3LCAxLCAyMjksIDE3MSwgMjMzLCAKLSAgICAxODksIDE0NywgMSwgMjMwLCAxMzUsIDIzMywgMTY4LCAxNDcsIDEsIDIyOSwgMTcxLCAyMzMsIDE2OCwgMTQ3LCAxLCAyMzUsIAotICAgIDE0MCwgMjI5LCAyMDMsIDE0NywgMSwgMjM1LCAxNDAsIDIzNCwgMjE1LCAyMjksIDM5LCAxNDcsIDEsIDIzNSwgOTksIDIzMywgCi0gICAgMTY4LCAxNDcsIDEsIDIzMCwgMTM1LCAyMzIsIDU5LCAxNDcsIDEsIDIyOSwgMTcxLCAyMzIsIDU5LCAxNDcsIDEsIDIzMCwgCi0gICAgMTM1LCAyMzEsIDI0OCwgMTQ3LCAxLCAyMjksIDE3MSwgMjMxLCAyNDgsIDE0NywgMSwgMjMyLCAxLCAyMzMsIDIyMSwgMTQ3LCAKLSAgICAxLCAyMzUsIDk5LCAyMzEsIDI0OCwgMTQ3LCAxLCAyMzAsIDEzNSwgMjMzLCAyNDQsIDE0NywgMSwgMjI5LCAxNzEsIDIzMywgCi0gICAgMjQ0LCAxNDcsIDEsIDIzMCwgMTM1LCAyMzMsIDE2MSwgMTQ3LCAxLCAyMjksIDE3MSwgMjMzLCAxNjEsIDE0NywgMSwgMjM1LCAKLSAgICAxMTgsIDIzMywgMjIxLCAxNDcsIDEsIDIzNSwgOTksIDIzMywgMTYxLCAxNDcsIDEsIDIzMCwgMTM1LCAyMzMsIDIyNCwgCi0gICAgMTQ3LCAxLCAyMjksIDE3MSwgMjMzLCAyMjQsIDE0NywgMSwgMjMwLCAxMzUsIDIzMywgMTU5LCAxNDcsIDEsIDIyOSwgMTcxLCAKLSAgICAyMzMsIDE1OSwgMTQ3LCAxLCAyMzQsIDE1NiwgMTQ3LCAxLCAyNDgsIDIzNSwgMjMzLCAxNTksIDE0NywgMSwgMjM1LCAxMSwgCi0gICAgMTQ3LCAxLCAyMzQsIDIwMywgMTQ3LCAxLCAyMzUsIDExOCwgMjMzLCAyMTUsIDE0NywgMSwgMjM1LCA1LCAxNDcsIDEsIAotICAgIDIzNSwgMTQwLCAyMzMsIDE3OCwgMTQ3LCAxLCAyMzIsIDEsIDIzMywgMTc4LCAxNDcsIDEsIDIzNSwgMTE4LCAyMzMsIDE3OCwgCi0gICAgMTQ3LCAxLCAyMzQsIDExOCwgMTQ3LCAxLCAyMzIsIDEsIDIzMywgMjE1LCAxNDcsIDEsIDIzNCwgMTAxLCAxNDcsIDUsIAotICAgIDIzMCwgMjIyLCAxNDcsIDMxLCA1LCAyMjksIDE4MSwgMTQ3LCAzMSwgNSwgMjQxLCA0NSwgMjI5LCAxOTUsIDE0NywgMzEsIAotICAgIDUsIDI0NiwgMjUzLCAyMjksIDE5NSwgMTQ3LCAzMSwgNSwgMjQxLCA0NSwgMjMyLCAyOSwgMTQ3LCAzMSwgNSwgMjQ2LCAKLSAgICAyNTMsIDIzMiwgMjksIDE0NywgMzEsIDUsIDI0MSwgNDUsIDIzMCwgMTkwLCAxNDcsIDMxLCA1LCAyNDYsIDI1MywgMjMwLCAKLSAgICAxOTAsIDE0NywgMzEsIDUsIDIyNywgMjAzLCAxNDcsIDMxLCA1LCAyMzMsIDIxMiwgMTQ3LCAzMSwgNSwgMjQ2LCAyNTMsIAotICAgIDIzMywgMjEyLCAxNDcsIDMxLCA1LCAyNDQsIDYzLCAyNDMsIDU2LCAxNDcsIDMxLCA1LCAyMzUsIDEyNSwgMjUzLCAxODEsIAotICAgIDIyOSwgMTgxLCAxNDcsIDMxLCA1LCAyMzUsIDEyNSwgMjUzLCAxODEsIDI0NiwgMjUzLCAyMjksIDE4MSwgMTQ3LCAzMSwgNSwgCi0gICAgMjM1LCAxMjUsIDI1MywgMTgxLCAyMjgsIDE5OCwgMTQ3LCAzMSwgNSwgMjI4LCAxOTgsIDE0NywgMzEsIDUsIDI0NiwgMjUzLCAKLSAgICAyMjcsIDIwMywgMTQ3LCAzMSwgNSwgMjQ2LCAyNTMsIDIyOCwgMTk4LCAxNDcsIDIyOSwgMTYxLCAyMzAsIDc0LCAxMjgsIAotICAgIDExNiwgMjU1LCA5LCAyNDgsIDc4LCAxMjgsIDExNiwgMjUzLCAxMDUsIDI0NCwgNTMsIDEyOCwgMTE2LCAyNTMsIDEwNSwgCi0gICAgMjM5LCA2OSwgMTI4LCAxMTYsIDI1MywgMTA1LCAyMzksIDcwLCAxMjgsIDExNiwgMjUzLCAxMDUsIDI0NCwgNTYsIDEyOCwgCi0gICAgMTE2LCAyNTMsIDEwNSwgMjM0LCAyMDEsIDEyOCwgMTE2LCAyNTQsIDExNCwgMjUxLCA1NiwgMTI4LCAxMTYsIDI1MywgMTQyLCAKLSAgICAyNDIsIDI0MywgMTI4LCAxMTYsIDI1MywgMTQyLCAyMzgsIDE0OCwgMTI4LCAxMTYsIDI1MywgMTQyLCAyMzgsIDE0NywgCi0gICAgMTI4LCAxMTYsIDI1NCwgMjI1LCAyNTMsIDI1LCAxMjgsIDExNiwgMjUzLCAxNDIsIDI0MiwgMjUyLCAxMjgsIDExNiwgMjU1LCAKLSAgICAxNywgMjQ2LCA5MiwgMTI4LCAxMTYsIDI1NCwgMjQ2LCAyMzgsIDE0NSwgMTI4LCAxMTYsIDE4MCwgMjM5LCAxODMsIDEyOCwgCi0gICAgMTE2LCAyNTMsIDkyLCAyNDEsIDc4LCAxMjgsIDExNiwgMjUzLCA5MiwgMjMwLCA4MSwgMTI4LCAxMTYsIDI1MywgOTIsIAotICAgIDIzNCwgMTkzLCAxMjgsIDExNiwgMjU0LCAyNTIsIDI1MSwgNDksIDEyOCwgMTE2LCAyNTQsIDI0NiwgMjQ5LCAxODQsIDEyOCwgCi0gICAgMTE2LCAxODAsIDI1MiwgNiwgMTI4LCAxMTYsIDI1MywgOTIsIDI0MCwgNDAsIDEyOCwgMTE2LCAyNTMsIDkyLCAyMzcsIDIsIAotICAgIDEyOCwgMTE2LCAyNTMsIDkyLCAyNDAsIDM5LCAxMjgsIDExNiwgMjU0LCAyNTIsIDI1MiwgMjI3LCAxMjgsIDExNiwgMjU1LCAKLSAgICAyMCwgMjM2LCA2LCAxMjgsIDExNiwgMjU1LCA0NCwgMjQ4LCAxMzMsIDEyOCwgMTE2LCAyNTMsIDEzMCwgMjM5LCAxOTYsIAotICAgIDEyOCwgMTE2LCAyNTQsIDIzNiwgMjUyLCAyMzQsIDEyOCwgMTE2LCAyNTMsIDEzMCwgMjQ1LCA2OCwgMTI4LCAxMTYsIDI1NCwgCi0gICAgMjM2LCAyNDksIDIzNywgMTI4LCAxMTYsIDI1MywgMTMwLCAyMzQsIDIxNCwgMTI4LCAxMTYsIDI1NSwgMzgsIDE5OCwgMTI4LCAKLSAgICAxMTYsIDI1NSwgMTcsIDI0NywgMjMxLCAxMjgsIDExNiwgMjU1LCA0NiwgMjUxLCAxOTQsIDEyOCwgMTE2LCAyNTMsIDMsIAotICAgIDEyOCwgMTE2LCAyNTQsIDIzOSwgMjQxLCAxODIsIDEyOCwgMTE2LCAyNTMsIDIyLCAxMjgsIDExNiwgMjU1LCA1MywgMjQ2LCAKLSAgICA1MSwgMTI4LCAxMTYsIDI1NCwgMjI1LCAyNDUsIDE0OSwgMTI4LCAxMTYsIDI1NCwgMjI1LCAyNDUsIDE0MywgMTI4LCAxMTYsIAotICAgIDI1NCwgMjI1LCAyNTEsIDIzOSwgMTI4LCAxMTYsIDI1NCwgMjIwLCAyNTAsIDc3LCAxMjgsIDExNiwgMjU0LCAyMzksIDIzOCwgCi0gICAgMTUwLCAxMjgsIDExNiwgMTMwLCAyNDcsIDksIDEyOCwgMTE2LCAyNTQsIDIyMCwgMjM2LCAxNjgsIDEyOCwgMTE2LCAyMzEsIAotICAgIDExMywgMTI4LCAxMTYsIDI0NiwgMjE0LCA1NywgMTI4LCAxMTYsIDI1MywgNjEsIDIzMiwgMjAwLCAxMjgsIDExNiwgMjQ2LCAKLSAgICAyMTQsIDI1MiwgMjEyLCAxMjgsIDExNiwgMjQ2LCAyMTQsIDI1MywgMTQwLCAxMjgsIDExNiwgMjQ2LCAyMTQsIDc0LCAxMjgsIAotICAgIDExNiwgMjQ2LCAyMTQsIDI1MiwgMjE2LCAxMjgsIDExNiwgMjQ2LCAyMTQsIDI1MywgNzEsIDEyOCwgMTE2LCAyNDYsIDIxNCwgCi0gICAgMjUyLCA1MCwgMTI4LCAxMTYsIDI0NiwgMjE0LCA2NiwgMTI4LCAxMTYsIDI0NiwgMjE0LCAyNTIsIDIyNCwgMTI4LCAxMTYsIAotICAgIDIzNCwgMTkyLCAxMjgsIDIzMywgMTEyLCAxNCwgMjQyLCAxNzEsIDEyOCwgMTE2LCAyNDYsIDIxNCwgNzIsIDEyOCwgMTE2LCAKLSAgICAyNDYsIDIxNCwgMjUzLCA0LCAxMjgsIDExNiwgMjQ2LCAyMTQsIDczLCAxMjgsIDExNiwgMjQ2LCAyMTQsIDI1NCwgMjI3LCAKLSAgICAyMzQsIDE0OCwgMTI4LCAxMTYsIDI0NiwgMjE0LCAyNTQsIDIyNywgMjMyLCAyMjQsIDEyOCwgMTE2LCAyMjksIDM1LCAxMjgsIAotICAgIDExNiwgMjMyLCAyMjUsIDEyOCwgMTE2LCAyMzEsIDk5LCAxMjgsIDExNiwgMjUzLCA2MSwgMjUzLCAyMTksIDEyOCwgMTE2LCAKLSAgICAyNTMsIDYxLCAyNDYsIDIyOCwgMTI4LCAxMTYsIDI1MywgNjEsIDI1MiwgMjksIDEyOCwgMTE2LCAyNTMsIDYxLCAyMzIsIAotICAgIDk2LCAxMjgsIDExNiwgMjI5LCAxNTMsIDEyOCwgMTE2LCAyMzIsIDIzMywgMTI4LCAxMTYsIDIzMywgNjUsIDEyOCwgMTE2LCAKLSAgICAyMzQsIDEwNCwgMTI4LCAyMSwgMjQwLCAxMjYsIDEyOCwgMjEsIDExOCwgMTI4LCAyMSwgMTEzLCAxMjgsIDIxLCAxNjYsIAotICAgIDEyOCwgMjEsIDE1OCwgMTI4LCAyMSwgMTczLCAxMjgsIDIxLCAxODMsIDEyOCwgMjEsIDE5NCwgMTI4LCAyMSwgMTg3LCAKLSAgICAxMjgsIDIxLCAxOTIsIDEyOCwgMTE2LCAyMjksIDIyNywgMTI4LCAxMTYsIDIzNiwgMTIyLCAxNzksIDEsIDI1MywgMzMsIAotICAgIDE3OSwgMSwgMjUzLCAxMDUsIDI0MCwgMjE1LCAxNzksIDEsIDI1MywgMTA1LCAyNDcsIDIyLCAxNzksIDEsIDI0NywgOTMsIAotICAgIDE3OSwgMSwgMjUzLCA2NiwgMTc5LCAxLCAyNTQsIDIyNSwgMjQ3LCAyMiwgMTc5LCAxLCAyNDcsIDE5LCAxNzksIDEsIDI1MywgCi0gICAgNTcsIDE3OSwgMSwgOTYsIDE3OSwgMSwgMjUzLCA5MiwgMjQwLCAyMTUsIDE3OSwgMSwgMjUzLCA5MiwgMjQ3LCAyMiwgMTc5LCAKLSAgICAxLCAyNTMsIDgsIDE3OSwgMSwgMjUzLCA5OCwgMTc5LCAxLCAyNTMsIDUwLCAxNzksIDEsIDI1MywgMTMwLCAyNDAsIDIxNSwgCi0gICAgMTc5LCAxLCAyNTQsIDIzNiwgMjQ3LCAyMiwgMTc5LCAxLCAyNTMsIDEzMCwgMjQ3LCAyMiwgMTc5LCAxLCAyNTQsIDIzNiwgCi0gICAgMjQwLCAyMTUsIDE3OSwgMSwgMjUzLCAxNCwgMTc5LCAxLCAyNTIsIDI1MSwgMTc5LCAxLCAyNTQsIDIzOSwgMjQxLCAxODIsIAotICAgIDE3OSwgMSwgMjU0LCAyMzksIDI0NCwgMTA3LCAxNzksIDEsIDI1MywgMTAsIDE3OSwgMSwgMjU0LCAyMjUsIDI0MCwgMjE1LCAKLSAgICAxNzksIDEsIDI1NCwgMjIwLCAyNDAsIDIxNSwgMTc5LCAxLCA3MywgMTc5LCAxLCAyNTQsIDIyMCwgMjQ3LCAyMiwgMTc5LCAKLSAgICAyMzEsIDIxOCwgMTc5LCAzMSwgNSwgNTcsIDE3OSwgMzEsIDUsIDI1MywgNjEsIDI0NywgMzksIDE3OSwgMzEsIDUsIDI1MiwgCi0gICAgMjEyLCAxNzksIDMxLCA1LCAyNTMsIDE0MCwgMTc5LCAzMSwgNSwgNzQsIDE3OSwgMzEsIDUsIDI1MiwgMjE2LCAxNzksIDMxLCAKLSAgICA1LCAyNTQsIDE5MCwgMTc5LCAzMSwgNSwgMjUzLCAyMDMsIDE3OSwgMzEsIDUsIDY2LCAxNzksIDMxLCA1LCAyNTIsIDIyNCwgCi0gICAgMTc5LCAzMSwgNSwgMjUzLCA2MSwgMjUwLCAxNzgsIDE3OSwgMjMyLCA0NSwgNSwgMjUzLCA0OSwgMTc5LCAyMzIsIDQ1LCA1LCAKLSAgICAyNDcsIDE5LCAxNzksIDMxLCA1LCA3MiwgMTc5LCAzMSwgNSwgMjUzLCAxNzYsIDE3OSwgMzEsIDUsIDczLCAxNzksIDMxLCAKLSAgICA1LCAyNTMsIDExNCwgMTc5LCAzMSwgNSwgMjUyLCAyMjEsIDE3OSwgMjU1LCA5LCAyNTIsIDIwMCwgMTc5LCAyMDYsIDI1MywgCi0gICAgNjEsIDI1MywgMjE5LCAxNzksIDIwNiwgMjUzLCA2MSwgMjQ2LCAyMjgsIDE3OSwgMjA2LCAyNTMsIDYxLCAyNTMsIDQ0LCAKLSAgICAxNzksIDIwNiwgMjUzLCA2MSwgMjM2LCAyMSwgMTc5LCAyMjgsIDIyNywgNzYsIDE3OSwgMjMxLCAxMDcsIDE3OSwgMjEsIAotICAgIDI0MCwgMTI2LCAxNzksIDIxLCAxMTgsIDE3OSwgMjEsIDExMywgMTc5LCAyMSwgMTY2LCAxNzksIDIxLCAxNTgsIDE3OSwgCi0gICAgMjEsIDE3MywgMTc5LCAyMSwgMTgzLCAxNzksIDIxLCAxOTQsIDE3OSwgMjEsIDE4NywgMTc5LCAyMSwgMTkyLCAxNzksIAotICAgIDI1NCwgMjIwLCAyNTMsIDgsIDE3OSwgMjU0LCAyMjAsIDI1MywgMTQsIDU0LCA0LCAyNTMsIDEyOCwgNTQsIDE2NSwgMjQ3LCAKLSAgICAzNSwgMjUzLCA1NSwgMjUzLCA2MiwgMjMzLCA1NiwgNTcsIDU0LCAxNjUsIDI0NywgMzUsIDI1MywgNTUsIDI1MywgNjIsIAotICAgIDI1MywgMjA1LCAyNDgsIDE0OCwgMjQ5LCAxMDcsIDE5OCwgNTQsIDE2NSwgMjQ3LCAzNSwgMjUzLCA1NSwgMjUzLCA2MiwgCi0gICAgMjUzLCAyMDUsIDI0NywgMzUsIDI0MCwgMjQxLCAxOTgsIDU0LCAxNjUsIDU5LCAyNTMsIDU1LCAyNTMsIDYyLCAyNDgsIAotICAgIDEwMCwgMTk4LCA1NCwgMTY1LCAyMzUsIDExMywgMjUzLCA1NSwgMjUzLCA2MiwgMjQ4LCAxNTYsIDE5OCwgNTQsIDE2NSwgCi0gICAgMjQwLCAyMDYsIDI1MywgNTUsIDI1MywgNjIsIDI0OCwgMTMxLCAyNDgsIDE1NywgMTk4LCA1NCwgMTY1LCAyNTMsIDU1LCAKLSAgICAyNTMsIDYyLCAyNDAsIDI0MSwgMjQ4LCAxNTcsIDE5OCwgNTQsIDE2NSwgMjQ1LCAxNTMsIDI0MCwgMTkyLCA1NCwgMTY1LCAKLSAgICAyNDIsIDIxNSwgMjUzLCA1NSwgMjQ3LCA4OCwgNTQsIDE2NSwgMjQ5LCAxMjMsIDI0OCwgMTU5LCAyNTMsIDU1LCAyNDcsIAotICAgIDg4LCA1NCwgMTY1LCAyMjcsIDI0NiwgMjM3LCAyMjIsIDU0LCAxNjUsIDIzMiwgMTEwLCAyNDAsIDI0MSwgMjM4LCAxMzMsIAotICAgIDU0LCAxNjUsIDI0MCwgMTkyLCA1NCwgMTY1LCAyNDcsIDk3LCAyNDAsIDE5MiwgNTQsIDE2NSwgMjQwLCAyNDEsIDI0MCwgCi0gICAgMTkyLCA1NCwgMTY1LCAyNDcsIDk3LCAyNDAsIDI0MSwgMjQwLCAxOTIsIDU0LCAxNjUsIDI1NCwgMTQzLCAyNDksIDE1NiwgCi0gICAgMjQwLCAxNCwgMjQwLCAxOTIsIDU0LCAxNjUsIDI0OCwgMTQ3LCAyNTAsIDQxLCAyNDAsIDE5MiwgNTQsIDE2NSwgMjQwLCAKLSAgICAyMDYsIDI0MSwgOTEsIDI0MSwgMTMsIDI1NCwgMjA2LCAxODIsIDI0NiwgMjQxLCA1NCwgMTY1LCAyNDcsIDM1LCAyMzcsIAotICAgIDIyMiwgNTQsIDIzMywgMjE3LCA1LCAyNDksIDE1NSwgMjM3LCAxMjcsIDU0LCAyMzMsIDIxNywgNSwgMjUwLCAyMTcsIDIzNywgCi0gICAgMTI3LCA1NCwgMjI4LCAxOTcsIDUsIDI1MSwgMjE5LCAyNTAsIDIwLCAyNDIsIDQwLCAyMzcsIDEyNywgNTQsIDIyOCwgMTk3LCAKLSAgICA1LCAyMzgsIDg3LCAyMTMsIDU0LCAyMjgsIDE5NywgNSwgMjQ1LCAxNTUsIDIzNywgMTEsIDU0LCA1LCAyNDYsIDIyNiwgCi0gICAgMjQ3LCA3MSwgMjQxLCAxMzgsIDU0LCA1LCAyNDYsIDIyNiwgMjQ3LCA3MSwgMjM4LCAyLCA1NCwgNSwgMjQ2LCAyMjYsIAotICAgIDI0NywgNzEsIDI0MSwgMTQ2LCA1NCwgNSwgMjQ2LCAyMjYsIDI1MywgMTUzLCAyNDEsIDEzOCwgNTQsIDUsIDI0NiwgMjI2LCAKLSAgICAyNTMsIDE1MywgMjM4LCAyLCA1NCwgNSwgMjQ2LCAyMjYsIDI0NywgNzEsIDI0NiwgMjI2LCAyNTEsIDM3LCA1NCwgMjEsIAotICAgIDI0MCwgMTI2LCA1NCwgMjEsIDExOCwgNTQsIDIxLCAxMTMsIDU0LCAyMSwgMTY2LCA1NCwgMjEsIDE1OCwgNTQsIDIxLCAKLSAgICAxNzMsIDU0LCAyMSwgMTgzLCA1NCwgMjEsIDE5NCwgNTQsIDIxLCAxODcsIDU0LCAyMSwgMTkyLCA1NCwgMjEsIDEzMiwgCi0gICAgMTE4LCA1NCwgMjEsIDEzMiwgMTEzLCA1NCwgMjEsIDEzMiwgMTY2LCA1NCwgMjEsIDEzMiwgMTU4LCA1NCwgMjEsIDEzMiwgCi0gICAgMTczLCA1NCwgMjEsIDEzMiwgMTgzLCA1NCwgMjEsIDEzMiwgMTk0LCA1NCwgMjEsIDEzMiwgMTg3LCA1NCwgMjEsIDEzMiwgCi0gICAgMTkyLCA1NCwgMjEsIDEzMiwgMjQwLCAxMjYsIDU0LCAxNjUsIDI0MiwgMjEzLCAyMzcsIDEyNywgNTQsIDE2NSwgMjQ4LCAKLSAgICAxMTAsIDI0MSwgMTA3LCAyNTMsIDI1MiwgMjUyLCAxODMsIDU0LCAxNjUsIDI0MCwgMjA2LCAyNDEsIDkxLCAyNDEsIDEzLCAKLSAgICAyNDcsIDEyMywgMjUzLCAyNDcsIDI0NiwgMjQxLCA1NCwgMTY1LCAyNDgsIDExMCwgMjQxLCAxMDcsIDI1MSwgMjE4LCAyMzcsIAotICAgIDEyNywgNTQsIDE2NSwgMjUzLCA3NCwgMjQ3LCA4OCwgNTQsIDE2NSwgMjU0LCAxMSwgMjM4LCA4OCwgNTQsIDE2NSwgMjUzLCAKLSAgICAyMjMsIDI0MSwgMTMsIDI0MSwgMTQ5LCA1NCwgMTY1LCAyNTMsIDIyMywgMjQxLCAxMywgMjQxLCAxNDgsIDU0LCAxNjUsIAotICAgIDI1MywgMjA3LCAyNDEsIDE3MiwgMjQxLCAxNDksIDU0LCAxNjUsIDI1MywgMjA3LCAyNDEsIDE3MiwgMjQxLCAxNDgsIDU0LCAKLSAgICA1LCAyNTQsIDE3NSwgMjM4LCA3OCwgNTQsIDUsIDI1NCwgOTgsIDIzOCwgNzgsIDU0LCAxLCAxNzcsIDU0LCAxLCAyNDYsIAotICAgIDE3OCwgNTQsIDEsIDI1MiwgMjA1LCA1NCwgMSwgMjQ2LCAyMDIsIDU0LCAxLCAyNDYsIDE2OSwgNTQsIDEsIDI1MiwgMjE1LCAKLSAgICA1NCwgMSwgMjQ2LCAxNzYsIDU0LCAxLCAyNTIsIDIxMywgNTQsIDEsIDI0NiwgMTgxLCA1NCwgMSwgMjQ2LCAxOTEsIDU0LCAKLSAgICAxLCAyNDAsIDE1MCwgNTQsIDEsIDI0NiwgMTkyLCA1NCwgMSwgMjQwLCAxNjYsIDU0LCAxLCAyNDYsIDIwMywgNTQsIDEsIAotICAgIDI1MiwgMjAyLCA1NCwgMSwgMjQ2LCAxNzMsIDU0LCAxLCAyNTIsIDIwMywgNTQsIDEsIDI0NiwgMTk2LCA1NCwgMSwgMjUyLCAKLSAgICAyMDEsIDU0LCAxLCAyMTMsIDU0LCAxLCAyNDYsIDE4MiwgNTQsIDEsIDI1MiwgMjExLCA1NCwgMSwgMjQ2LCAxOTksIDU0LCAKLSAgICAxLCAxOTgsIDU0LCAxLCAyNDYsIDIxNiwgNTQsIDEsIDI0MCwgMjQwLCA1NCwgMSwgMjQ2LCAyNTQsIDU0LCAxLCAyNDEsIAotICAgIDEyMSwgNTQsIDEsIDI1MiwgMjA4LCA1NCwgMSwgMjQ2LCAyMjMsIDU0LCAxLCAyNTIsIDIyNiwgNTQsIDEsIDI1MywgMjA0LCAKLSAgICA1NCwgMSwgMTkxLCA1NCwgMSwgMjA4LCA1NCwgMSwgMjUyLCAyMDAsIDU0LCAxLCAyNDYsIDE2NSwgNTQsIDEsIDI0NiwgCi0gICAgMTkwLCA1NCwgMSwgMjUyLCAyMDQsIDU0LCAxLCAxNTQsIDU0LCAxLCA1NywgNTQsIDEsIDI0MSwgMTc1LCA1NCwgMSwgMjMwLCAKLSAgICAxNTQsIDIwOCwgNTQsIDEsIDI0NywgMTYxLCA1NCwgMSwgMjQ2LCAyMjEsIDU0LCAzMSwgNSwgMjUyLCAyMTIsIDU0LCAzMSwgCi0gICAgNSwgNzQsIDU0LCAzMSwgNSwgMjUyLCAyMTYsIDU0LCAzMSwgNSwgNjYsIDU0LCAzMSwgNSwgMjUyLCAyMjQsIDU0LCAzMSwgCi0gICAgNSwgMTUzLCAxNDYsIDU0LCAzMSwgNSwgMTUzLCAyNTIsIDI0OSwgNTQsIDMxLCA1LCAxNTMsIDE0OSwgNTQsIDMxLCA1LCAKLSAgICAxNTMsIDI1MiwgMjQ1LCA1NCwgMzEsIDUsIDcyLCA1NCwgMzEsIDUsIDI1MiwgMjMxLCA1NCwgMzEsIDUsIDczLCA1NCwgMzEsIAotICAgIDUsIDI1MiwgMjIwLCA1NCwgNSwgMjUxLCAxODUsIDI1NCwgMjUzLCAyNTQsIDExMywgMjUyLCAyNDYsIDU0LCA1LCAyNDgsIAotICAgIDE0OCwgMjQyLCAxOTUsIDU0LCAzMSwgNSwgMjAwLCA3NCwgNTQsIDMxLCA1LCAyMDAsIDI1MiwgMjE2LCA1NCwgNSwgMjUzLCAKLSAgICAyNTIsIDI1NCwgMTgwLCAyNTQsIDEwOSwgMjUyLCAyMDMsIDU0LCA1LCAyNTQsIDE0OCwgMjQ0LCA5MSwgNTQsIDE2NSwgCi0gICAgMjM0LCAxMTUsIDU0LCAxNjUsIDIzNiwgMTgyLCA1NCwgNSwgMjU0LCA5MSwgMjM3LCAxMjcsIDU0LCA1LCAyNDcsIDI0LCAKLSAgICAyMzcsIDEyNywgNTQsIDUsIDI1NCwgOTAsIDI1NCwgMTEsIDI0NiwgMjQxLCA1NCwgNSwgMjUxLCA0LCAyNDYsIDI0MSwgNTQsIAotICAgIDUsIDI1MywgMjIyLCAyNTQsIDM2LCAyMzMsIDIzMSwgNTQsIDUsIDI1MywgMjIyLCAyNTQsIDk5LCAyMzMsIDIzMSwgNTQsIAotICAgIDIzMSwgMTg5LCAxLCAxNzcsIDU0LCAyMzEsIDE4OSwgMSwgMjQ2LCAxNzgsIDU0LCAyMzEsIDE4OSwgMSwgMjUyLCAyMDUsIAotICAgIDU0LCAyMzEsIDE4OSwgMSwgMjQ2LCAyMDIsIDU0LCAyMzEsIDE4OSwgMSwgMjQ2LCAxNjksIDU0LCAyMzEsIDE4OSwgMSwgCi0gICAgMjUyLCAyMTUsIDU0LCAyMzEsIDE4OSwgMSwgMjQ2LCAxNzYsIDU0LCAyMzEsIDE4OSwgMSwgMjUyLCAyMTMsIDU0LCAyMzEsIAotICAgIDE4OSwgMSwgMjQ2LCAxODEsIDU0LCAyMzEsIDE4OSwgMSwgMjQ2LCAxOTEsIDU0LCAyMzEsIDE4OSwgMSwgMjQwLCAxNTAsIAotICAgIDU0LCAyMzEsIDE4OSwgMSwgMjQ2LCAxOTIsIDU0LCAyMzEsIDE4OSwgMSwgMjQwLCAxNjYsIDU0LCAyMzEsIDE4OSwgMSwgCi0gICAgMjQ2LCAyMDMsIDU0LCAyMzEsIDE4OSwgMSwgMjUyLCAyMDIsIDU0LCAyMzEsIDE4OSwgMSwgMjQ2LCAxNzMsIDU0LCAyMzEsIAotICAgIDE4OSwgMSwgMjUyLCAyMDMsIDU0LCAyMzEsIDE4OSwgMSwgMjQ2LCAxOTYsIDU0LCAyMzEsIDE4OSwgMSwgMjUyLCAyMDEsIAotICAgIDU0LCAyMzEsIDE4OSwgMSwgMjEzLCA1NCwgMjMxLCAxODksIDEsIDI0NiwgMTgyLCA1NCwgMjMxLCAxODksIDEsIDI1MiwgCi0gICAgMjExLCA1NCwgMjMxLCAxODksIDEsIDI0NiwgMTk5LCA1NCwgMjMxLCAxODksIDEsIDE5OCwgNTQsIDIzMSwgMTg5LCAxLCAKLSAgICAyNDYsIDIxNiwgNTQsIDIzMSwgMTg5LCAxLCAyNDAsIDI0MCwgNTQsIDIzMSwgMTg5LCAxLCAyNDYsIDI1NCwgNTQsIDIzMSwgCi0gICAgMTg5LCAxLCAyNDEsIDEyMSwgNTQsIDIzMSwgMTg5LCAxLCAyNTIsIDIwOCwgNTQsIDIzMSwgMTg5LCAxLCAyNDYsIDIyMywgCi0gICAgNTQsIDIzMSwgMTg5LCAxLCAyNTIsIDIyNiwgNTQsIDIzMSwgMTg5LCAxLCAyNTMsIDIwNCwgNTQsIDIzMSwgMTg5LCAxLCAKLSAgICAxOTEsIDU0LCAyMzEsIDE4OSwgMSwgMjA4LCA1NCwgMjMxLCAxODksIDEsIDI1MiwgMjAwLCA1NCwgMjMxLCAxODksIDEsIAotICAgIDI0NiwgMTY1LCA1NCwgMjMxLCAxODksIDEsIDI0NiwgMTkwLCA1NCwgMjMxLCAxODksIDEsIDI1MiwgMjA0LCA1NCwgMjMxLCAKLSAgICAxODksIDEsIDE1NCwgNTQsIDIzMSwgMTg5LCAxLCA1NywgNTQsIDIzMSwgMTg5LCAxLCAyNDEsIDE3NSwgNTQsIDIzMSwgCi0gICAgMTg5LCAxLCAyMzAsIDE1NCwgMjUyLCAyMDgsIDU0LCAyMzEsIDE4OSwgMSwgMjMwLCAxNTQsIDE5MSwgNTQsIDIzMSwgMTg5LCAKLSAgICAxLCAyMzAsIDE1NCwgMjA4LCA1NCwgMjU0LCAyMzgsIDI1NSwgMTQsIDI0NiwgMTc4LCA1NCwgMjU0LCAyMzgsIDI1NSwgMTQsIAotICAgIDI1NCwgNzksIDI0NywgMTIzLCAyNTMsIDI0NywgMjQ2LCAyNDEsIDU0LCAyMjgsIDE4OSwgNSwgMTEyLCAyNDEsIDEwMCwgCi0gICAgNTQsIDIyOCwgMTg5LCA1LCAxNTcsIDI0MSwgMTAwLCA1NCwgMjI4LCAxODksIDUsIDI0OSwgMTQzLCAyNDUsIDIzOSwgNTQsIAotICAgIDIyOCwgMTg5LCA1LCAyNTEsIDIxNSwgMjM4LCA4NiwgNTQsIDE0LCAyNDksIDIwNywgMjUzLCA0OCwgNTQsIDE0LCAyNTQsIAotICAgIDQsIDI1MSwgMTg0LCA1NCwgMTQsIDI0NSwgNTksIDI0MywgMTIwLCA1NCwgMTQsIDI1NCwgNCwgMjU0LCAxNDQsIDI0OCwgCi0gICAgMTQ3LCAyNDMsIDE1NSwgNTQsIDE0LCAyNDgsIDEzMSwgMjEzLCA1NCwgMTQsIDI1MywgNDMsIDI1MywgNDgsIDU0LCAxNCwgCi0gICAgMjUzLCA0MywgMjU0LCAyMTAsIDI0NywgOTcsIDIzNSwgMTA3LCA1NCwgMTQsIDI1MywgNDMsIDI1NCwgMjEwLCAyNTAsIDQyLCAKLSAgICAyMzUsIDEwNywgNTQsIDE0LCAyNTMsIDQzLCAyNTQsIDIxMCwgMjQ3LCAxMjMsIDIzNSwgMTA3LCA1NCwgNSwgMjQ2LCAyMjYsIAotICAgIDI1MywgMTUzLCAyNDYsIDIyNiwgMjQzLCA3MywgNTQsIDUsIDI0NiwgMjI2LCAyNTMsIDE1MywgMjQxLCAxNDYsIDU0LCAKLSAgICAxNjUsIDI0MiwgMjE0LCAyNDgsIDE1OSwgMjU0LCAyMjgsIDI1MywgNjIsIDIzOCwgNDEsIDU0LCAxNjUsIDI0NCwgMTQ5LCAKLSAgICAyNTMsIDU1LCAyNTQsIDIyOCwgMjUzLCA2MiwgMjM4LCA0MSwgNTQsIDE2NSwgMjQ3LCA5NywgMjM3LCAyMjIsIDU0LCAxNjUsIAotICAgIDU5LCAyNDgsIDAsIDIzOCwgNDMsIDI1MywgNTUsIDI1MywgNjIsIDI0OCwgMTAwLCAxOTgsIDU0LCAxNjUsIDIzNSwgMTEzLCAKLSAgICAyNDgsIDAsIDIzOCwgNDMsIDI1MywgNTUsIDI1MywgNjIsIDI0OCwgMTU2LCAxOTgsIDY5LCAxLCAxNzcsIDY5LCAxLCAyNDYsIAotICAgIDE3OCwgNjksIDEsIDI1MiwgMjA1LCA2OSwgMSwgMjQ2LCAyMDIsIDY5LCAxLCAyNDYsIDE2OSwgNjksIDEsIDI1MiwgMjE1LCAKLSAgICA2OSwgMSwgMjQ2LCAxNzYsIDY5LCAxLCAyNTIsIDIxMywgNjksIDEsIDI0NiwgMjEzLCA2OSwgMSwgMjQ2LCAxODEsIDY5LCAKLSAgICAxLCAyNDQsIDI1MCwgNjksIDEsIDI0NiwgMTkxLCA2OSwgMSwgMjQwLCAxNTAsIDY5LCAxLCAyNDYsIDE5MiwgNjksIDEsIAotICAgIDI0MCwgMTY2LCA2OSwgMSwgMjQ2LCAyMDMsIDY5LCAxLCAyNTIsIDIwMiwgNjksIDEsIDI0NiwgMTczLCA2OSwgMSwgMjUyLCAKLSAgICAyMDMsIDY5LCAxLCAyNDYsIDE5NiwgNjksIDEsIDI1MiwgMjAxLCA2OSwgMSwgMjEzLCA2OSwgMSwgMjQ2LCAxODIsIDY5LCAKLSAgICAxLCAyNTIsIDIxMSwgNjksIDEsIDI0NiwgMTk5LCA2OSwgMSwgMTk4LCA2OSwgMSwgMTkxLCA2OSwgMSwgMjA4LCA2OSwgMSwgCi0gICAgMjUyLCAyMDAsIDY5LCAxLCAyNTIsIDIwOCwgNjksIDEsIDI1MiwgMjA0LCA2OSwgMSwgMTU0LCA2OSwgMSwgMjQ2LCAyMjUsIAotICAgIDY5LCAxLCA1NywgNjksIDEsIDI0NiwgMTY2LCA1NywgNjksIDEsIDc0LCA2OSwgMSwgMjUyLCAyMTYsIDY5LCAxLCA2NiwgCi0gICAgNjksIDEsIDI1MiwgMjI0LCA2OSwgMSwgNzIsIDY5LCAxLCAyNTMsIDY4LCA3MiwgNjksIDEsIDczLCA2OSwgMSwgMjUyLCAKLSAgICAyMjIsIDY5LCAzMSwgNSwgMjUyLCA1LCAyNTIsIDIxMiwgNjksIDMxLCA1LCAyNTIsIDIxMiwgNjksIDMxLCA1LCA3NCwgNjksIAotICAgIDMxLCA1LCAyNTIsIDIxNiwgNjksIDMxLCA1LCA2NiwgNjksIDMxLCA1LCAyNTIsIDIyNCwgNjksIDMxLCA1LCA3MiwgNjksIAotICAgIDMxLCA1LCAyNTIsIDIyMSwgNjksIDMxLCA1LCAyNTMsIDY4LCAyNTIsIDIxNiwgNjksIDMxLCA1LCAyNTMsIDY4LCA3MywgCi0gICAgNjksIDMxLCA1LCAxNjEsIDQ2LCA2OSwgNSwgMjMxLCAyMDYsIDY5LCA1LCA1NiwgNTEsIDY5LCA1LCAyMzMsIDEwMiwgNjksIAotICAgIDUsIDIzNSwgNDMsIDY5LCA1LCAyNDIsIDY0LCA2OSwgMjMxLCAxOTQsIDUsIDEyNCwgMTkxLCA2OSwgMjMxLCAxOTQsIDUsIAotICAgIDEyNCwgMjA4LCA2OSwgMjMxLCAxOTQsIDUsIDEyNCwgMjUyLCAyMDgsIDY5LCAyMzEsIDE5NCwgNSwgMTI0LCAxNTQsIDY5LCAKLSAgICAxLCAyNDAsIDIyNywgMjUyLCAyMDQsIDY5LCAyMSwgMjQwLCAxMjYsIDY5LCAyMSwgMTE4LCA2OSwgMjEsIDExMywgNjksIAotICAgIDIxLCAxNjYsIDY5LCAyMSwgMTU4LCA2OSwgMjEsIDE3MywgNjksIDIxLCAxODMsIDY5LCAyMSwgMTk0LCA2OSwgMjEsIDE4NywgCi0gICAgNjksIDIxLCAxOTIsIDY5LCA1LCAyMzcsIDEwMiwgMjMzLCAxNDQsIDY5LCA1LCAyMzMsIDE0NCwgNjksIDE0LCAyMzIsIAotICAgIDIyMSwgNjksIDE0LCAyMzAsIDIzNiwgNjksIDE0LCAyMjUsIDExMCwgNjksIDE0LCAyMzIsIDE5OCwgNjksIDEsIDI0NiwgCi0gICAgMTY1LCA2OSwgMSwgMjQ2LCAxOTAsIDY5LCAxLCAxNTMsIDE0NiwgNjksIDEsIDE1MywgMjUyLCAyNDksIDY5LCAxLCAxNTMsIAotICAgIDE0OSwgNjksIDEsIDE1MywgMjUyLCAyNDUsIDY5LCAzMSwgNSwgMTUzLCAxNDYsIDY5LCAzMSwgNSwgMTUzLCAyNTIsIDI0OSwgCi0gICAgNjksIDMxLCA1LCAxNTMsIDE0OSwgNjksIDMxLCA1LCAxNTMsIDI1MiwgMjQ1LCA2OSwgMSwgMjUzLCA2OCwgMjQ2LCAxNjksIAotICAgIDY5LCAxLCAyNTMsIDY4LCAyNDYsIDIxMywgNjksIDEsIDI1MywgNjgsIDI0NywgNjYsIDY5LCAxLCAyNTMsIDY4LCAyNDcsIAotICAgIDI1MCwgNjksIDIzMSwgMTk0LCA1LCAyNTMsIDY4LCAxMjQsIDI1MiwgMjAxLCA2OSwgMjMxLCAxOTQsIDUsIDI1MywgNjgsIAotICAgIDEyNCwgMTk4LCA2OSwgMjMxLCAxOTQsIDUsIDI1MywgNjgsIDEyNCwgMjUyLCAyMDAsIDY5LCAxLCAyNDcsIDEwMywgMjQwLCAKLSAgICAxNTMsIDI0NiwgMTY1LCA2OSwgMzEsIDUsIDI0NywgMTAzLCAyNDAsIDE1MywgMjUzLCAxMDAsIDY5LCAyMDYsIDE2NSwgCi0gICAgMjQ3LCAxMDMsIDI0MCwgMTUzLCAyMzksIDYsIDY5LCAyMDYsIDE2NSwgMjQ3LCAxMDMsIDI0MCwgMTUzLCAyNTUsIDM0LCAKLSAgICAyNDcsIDk5LCA2OSwgMSwgMjM1LCA2MiwgMjUzLCA1MSwgMjQwLCAxNTMsIDI0NiwgMTczLCA2OSwgMSwgMjM1LCA2MiwgCi0gICAgMjUzLCA1MSwgMjQwLCAxNTMsIDI0NywgNDcsIDY5LCAzMSwgNSwgMjM1LCA2MiwgMjUzLCA1MSwgMjQwLCAxNTMsIDI1MywgCi0gICAgMTAwLCA2OSwgMzEsIDUsIDIzNSwgNjIsIDI1MywgNTEsIDI0MCwgMTUzLCAyNTMsIDcxLCA2OSwgNSwgMjM1LCA2MiwgMjUzLCAKLSAgICA1MSwgMjQwLCAxNTMsIDIzNywgNywgNjksIDUsIDIzNSwgNjIsIDI1MywgNTEsIDI0MCwgMTUzLCAyMzUsIDEwMSwgNjksIDUsIAotICAgIDIzNSwgNjIsIDI1MywgNTEsIDI0MCwgMTUzLCAyMzUsIDEwMiwgNjksIDUsIDIzNSwgNjIsIDI1MywgNTEsIDI0MCwgMTUzLCAKLSAgICAyMzUsIDIyNywgNjksIDUsIDIzNSwgNjIsIDI1MywgNTEsIDI0MCwgMTUzLCAyMzUsIDEwMywgNjksIDEsIDIzNSwgMTIxLCAKLSAgICAyNTMsIDUxLCAyNDAsIDE1MywgMjQ2LCAyMDMsIDY5LCAxLCAyMzUsIDEyMSwgMjUzLCA1MSwgMjQwLCAxNTMsIDI0NywgCi0gICAgMjM1LCA2OSwgMSwgMjM1LCAxMjEsIDI1MywgNTEsIDI0MCwgMTUzLCAyNDMsIDE0NCwgNjksIDMxLCA1LCAyNTAsIDIxLCAKLSAgICAyNDAsIDE1MywgNzQsIDY5LCAzMSwgNSwgMjQwLCAxMTksIDI1MywgMTUsIDY5LCAzMSwgNSwgMjQwLCAxMTksIDY2LCA2OSwgCi0gICAgMzEsIDUsIDI0MCwgMTE5LCAyNTIsIDIzMSwgNjksIDEsIDI0NiwgMTY2LCAxNzcsIDY5LCAxLCAyNDYsIDE2NiwgMjQ2LCAKLSAgICAxNzgsIDY5LCAxLCAyNDYsIDE2NiwgMjUyLCAyMDUsIDY5LCAxLCAyNDYsIDE2NiwgMjUyLCAyMTUsIDY5LCAxLCAyNDYsIAotICAgIDE2NiwgMjUyLCAyMjYsIDY5LCAxLCAyNDYsIDE2NiwgMjQ2LCAxODEsIDY5LCAxLCAyNDYsIDE2NiwgMjUyLCAyMDMsIDY5LCAKLSAgICAxLCAyNDYsIDE2NiwgMjUyLCAyMDEsIDY5LCAxLCAyNDYsIDE2NiwgMjQ2LCAxODIsIDY5LCAxLCAyNDYsIDE2NiwgMjUyLCAKLSAgICAyMzQsIDY5LCAxLCAyNDYsIDE2NiwgMjUyLCAyMTEsIDY5LCAxLCAyNDYsIDE2NiwgMjQ2LCAxNzMsIDY5LCAxLCAyNDYsIAotICAgIDE2NiwgMTU0LCA2OSwgMjMxLCAxOTQsIDUsIDI0NiwgMTY2LCAxMjQsIDI1MiwgMjA4LCA2OSwgMzEsIDUsIDI0NiwgMTY2LCAKLSAgICAyNTIsIDIxMiwgNjksIDMxLCA1LCAyNDYsIDE2NiwgNzIsIDY5LCAzMSwgNSwgMjQ2LCAxNjYsIDE2MSwgNDYsIDY5LCAzMSwgCi0gICAgNSwgMjQ2LCAxNjYsIDM1LCAyNTQsIDE5MCwgNjksIDUsIDI0NiwgMTY2LCAyMzUsIDEwMSwgNjksIDUsIDI0NiwgMTY2LCAKLSAgICAyMzUsIDEwMiwgNjksIDUsIDI0NiwgMTY2LCAyMzUsIDEwMywgNjksIDUsIDI0NiwgMTY2LCAyMzUsIDIyOCwgNjksIDUsIAotICAgIDI0NiwgMTY2LCAyMzUsIDExNiwgMjM1LCAxMDEsIDY5LCA1LCAyNDYsIDE2NiwgMjM1LCAxMTYsIDIzNSwgMTAyLCA2OSwgNSwgCi0gICAgMjQ2LCAxNjYsIDIzNSwgMTE2LCAyMzQsIDk1LCAyNDAsIDE2NywgNjksIDEsIDI0MSwgMjI3LCAyMzUsIDE5OCwgMjUyLCAKLSAgICAyMzQsIDY5LCA1LCAyNDEsIDIyNywgMjM1LCAxOTgsIDIzNSwgMTAzLCA2OSwgMjQ2LCAxNjYsIDIxLCAyNDAsIDEyNiwgNjksIAotICAgIDI0NiwgMTY2LCAyMSwgMTE4LCA2OSwgMjQ2LCAxNjYsIDIxLCAxMTMsIDY5LCAyNDYsIDE2NiwgMjEsIDE2NiwgNjksIDI0NiwgCi0gICAgMTY2LCAyMSwgMTU4LCA2OSwgMjQ2LCAxNjYsIDIxLCAxNzMsIDY5LCAyNDYsIDE2NiwgMjEsIDE4MywgNjksIDI0NiwgMTY2LCAKLSAgICAyMSwgMTk0LCA2OSwgMjQ2LCAxNjYsIDIxLCAxODcsIDY5LCAyNDYsIDE2NiwgMjEsIDE5MiwgNjksIDE0LCAyNDYsIDE2NiwgCi0gICAgMTE4LCA2OSwgMTQsIDI0NiwgMTY2LCAyMjksIDE4LCA4NywgNiwgMSwgMjUzLCA1LCA4NywgNiwgMSwgMjQ3LCAxMjEsIDg3LCAKLSAgICA2LCAxLCAyNDcsIDMyLCA4NywgNiwgMSwgMjQ3LCAxMzEsIDg3LCA2LCAxLCAyNTIsIDIzMiwgODcsIDYsIDEsIDI0NywgCi0gICAgMjIyLCA4NywgNiwgMSwgMjQ3LCAyMzcsIDg3LCA2LCAxLCAyNDcsIDIwOSwgODcsIDYsIDEsIDI1MywgNzksIDg3LCA2LCAxLCAKLSAgICAyNDcsIDM5LCA4NywgNiwgMSwgMjQ3LCAxNjcsIDg3LCA2LCAxLCAyNDcsIDQsIDg3LCA2LCAxLCAyNDcsIDkyLCA4NywgNiwgCi0gICAgMSwgMjUzLCAxMDYsIDg3LCA2LCAxLCAyNDcsIDE4NywgODcsIDYsIDEsIDI0MSwgOTAsIDg3LCA2LCAxLCAyNDcsIDE5NCwgCi0gICAgODcsIDYsIDEsIDI0NywgNDksIDg3LCA2LCAxLCAyNDcsIDU2LCA4NywgNiwgMSwgMjUzLCAxMjEsIDg3LCA2LCAxLCAyNDEsIAotICAgIDYxLCA4NywgNiwgMSwgMjQxLCA0NiwgODcsIDYsIDEsIDI0MSwgMzksIDg3LCA2LCAxLCAyNDcsIDE5MywgODcsIDYsIDEsIAotICAgIDI0MCwgMjAzLCA4NywgNiwgMSwgMjQxLCAzMiwgODcsIDYsIDEsIDI0NiwgMjQxLCA4NywgNiwgMSwgMjQ3LCAxNTMsIDg3LCAKLSAgICA2LCAxLCAyNDcsIDEyNSwgODcsIDYsIDEsIDI0MSwgMzEsIDg3LCA2LCAxLCAyNDcsIDIyOCwgODcsIDYsIDEsIDI0MSwgNDQsIAotICAgIDg3LCA2LCAxLCAyNDcsIDE0NSwgODcsIDYsIDEsIDI1MiwgMjUyLCA4NywgNiwgMSwgMjQ3LCA4MSwgODcsIDYsIDEsIDI1MiwgCi0gICAgMjUwLCA4NywgNiwgMSwgMjQ3LCAxNDYsIDg3LCA2LCAxLCAyNDcsIDE1MCwgODcsIDEsIDI1MywgNSwgODcsIDEsIDI0NywgCi0gICAgMTIxLCA4NywgMSwgMjQ3LCAzMiwgODcsIDEsIDI0NywgMTMxLCA4NywgMSwgMjUyLCAyMzIsIDg3LCAxLCAyNDcsIDIyMiwgCi0gICAgODcsIDEsIDI0NywgMjM3LCA4NywgMSwgMjQ3LCAyMDksIDg3LCAxLCAyNTMsIDc5LCA4NywgMSwgMjQ3LCAzOSwgODcsIDEsIAotICAgIDI0NywgMTY3LCA4NywgMSwgMjQ3LCA0LCA4NywgMSwgMjQ3LCA5MiwgODcsIDEsIDI1MywgMTA2LCA4NywgMSwgMjQ3LCAKLSAgICAxODcsIDg3LCAxLCAyNDEsIDkwLCA4NywgMSwgMjQ3LCAxOTQsIDg3LCAxLCAyNDcsIDQ5LCA4NywgMSwgMjQ3LCA1NiwgODcsIAotICAgIDEsIDI1MywgMTIxLCA4NywgMSwgMjQxLCA2MSwgODcsIDEsIDI0MSwgNDYsIDg3LCAxLCAyNDEsIDM5LCA4NywgMSwgMjQ3LCAKLSAgICAxOTMsIDg3LCAxLCAyNDAsIDIwMywgODcsIDEsIDI0MSwgMzIsIDg3LCAxLCAyNDYsIDI0MSwgODcsIDEsIDI0NywgMTUzLCAKLSAgICA4NywgMSwgMjQ3LCAxMjUsIDg3LCAxLCAyNDEsIDMxLCA4NywgMSwgMjQ3LCAyMjgsIDg3LCAxLCAyNDEsIDQ0LCA4NywgMSwgCi0gICAgMjQ3LCAxNDUsIDg3LCAxLCAyNTIsIDI1MiwgODcsIDEsIDI0NywgODEsIDg3LCAxLCAyNTIsIDI1MCwgODcsIDEsIDI0NywgCi0gICAgMTQ2LCA4NywgMSwgMjQ3LCAxNTAsIDg3LCAxLCAyNTMsIDg4LCA4NywgMSwgMjUzLCAyMDIsIDg3LCAxLCAyMzgsIDIwMCwgCi0gICAgODcsIDEsIDIwOSwgMjQ3LCAzMiwgODcsIDEsIDI0NiwgMjI0LCA4NywgMjMxLCAyNDIsIDIzMCwgMTMxLCA1MiwgMSwgODcsIAotICAgIDI0NywgOTIsIDI2LCAxMjIsIDIzNSwgNzcsIDI2LCAxMjIsIDIyOCwgMTk1LCAyNiwgMTIyLCAyMzcsIDEzOSwgMjYsIDEyMiwgCi0gICAgMjM1LCA4MSwgMjYsIDEyMiwgMjI4LCAyMDksIDI2LCAxMjIsIDIzNywgMTQyLCAyNiwgMTIyLCAyMzcsIDEzNywgMjYsIAotICAgIDEyMiwgMjM3LCAxNDEsIDI2LCAxMjIsIDIyOSwgMTkzLCAyNiwgMTIyLCAyNDAsIDIxMywgMjYsIDEyMiwgMjMwLCAxNTksIAotICAgIDI2LCAxMjIsIDIzNywgMTM0LCAyNiwgMTIyLCAyMzcsIDEzMCwgMjYsIDEyMiwgMjI5LCAxOTEsIDI2LCAxMjIsIDIzMywgCi0gICAgMTI4LCAyNiwgMTIyLCAyMzMsIDEzMSwgMjYsIDEyMiwgMjMzLCAxMzgsIDI2LCAxMjIsIDIzMywgMTMzLCAyNiwgMTIyLCAKLSAgICAyMzcsIDEzMywgMjYsIDEyMiwgMjI3LCAyMDcsIDI2LCAxMjIsIDIyOSwgMjE5LCAyNiwgMTIyLCAyMjcsIDE5NiwgMjYsIAotICAgIDEyMiwgMjI5LCA0MiwgMjYsIDEyMiwgMjI3LCAxNTMsIDI2LCAxMjIsIDIyOCwgMjE3LCAyNiwgMTIyLCAyMjksIDIyMCwgCi0gICAgMjYsIDEyMiwgMjI4LCAxOTMsIDI2LCAxMjIsIDIyNywgMTY5LCAyNiwgMTIyLCAyMjgsIDIwMCwgMjYsIDEyMiwgMjI3LCAKLSAgICAxMzcsIDI2LCAxMjIsIDIyNywgMjA4LCAyNiwgMTIyLCAyMjksIDUwLCAyNiwgMTIyLCAyMjcsIDIwOSwgMjYsIDEyMiwgCi0gICAgMjI5LCAxODAsIDI2LCAxMjIsIDIyMiwgMjM5LCAyNiwgMTIyLCAyMjIsIDI0MCwgMjYsIDEyMiwgMjIzLCA1MSwgMjYsIAotICAgIDEyMiwgMjI1LCA5OSwgMjYsIDEyMiwgMjIzLCA1MCwgMjYsIDEyMiwgMjI4LCAyMTUsIDI2LCAxMjIsIDIyNywgMTczLCAyNiwgCi0gICAgMTIyLCAyMjcsIDE0OSwgMjYsIDEyMiwgMjI3LCAxNDgsIDI2LCAxMjIsIDIyNywgMTM4LCAyNiwgMTIyLCAyMjIsIDIzMSwgCi0gICAgMjYsIDEyMiwgMjI4LCAyMDcsIDI2LCAxMjIsIDIyOSwgMjE2LCAyNiwgMTIyLCAyMjgsIDIwOCwgMjYsIDEyMiwgMjI5LCAKLSAgICAyMTcsIDI2LCAxMjIsIDIzMCwgMTExLCAyNiwgMTIyLCAyMjksIDE5MCwgMjYsIDEyMiwgMjIyLCAyNTEsIDI2LCAxMjIsIAotICAgIDIyNywgNzgsIDI2LCAxMjIsIDIzMCwgMTEwLCAyNiwgMTIyLCAyMjksIDIxNSwgMjYsIDEyMiwgMjI4LCAxNjEsIDI2LCAKLSAgICAxMjIsIDIyOCwgMTYyLCAyNiwgMTIyLCAyMjgsIDE2NCwgMjYsIDEyMiwgMjI4LCAxNjMsIDI2LCAxMjIsIDIzMCwgMTA5LCAKLSAgICAyNiwgMTIyLCAyMjcsIDIyMiwgMjYsIDEyMiwgMjIyLCAyNDQsIDI2LCAxMjIsIDIyMywgNjAsIDI2LCAxMjIsIDIyMiwgCi0gICAgMjI4LCAyNiwgMTIyLCAyMzMsIDE3NCwgMjYsIDEyMiwgMjI3LCAyMDUsIDI2LCAxMjIsIDIyNywgMjQ1LCAyNiwgMTIyLCAKLSAgICAyMjksIDI5LCAyNiwgMTIyLCAyMjksIDMwLCAyNiwgMTIyLCAyMzAsIDY4LCAyNiwgMTIyLCAyMjcsIDE2NiwgMjYsIDEyMiwgCi0gICAgMjI5LCAxOTIsIDI2LCAxMjIsIDIyOSwgMjgsIDI2LCAxMjIsIDIyNywgMTY0LCAyNiwgMTIyLCAyMjcsIDE2OCwgMjYsIAotICAgIDEyMiwgMjI3LCAxNjcsIDI2LCAxMjIsIDIzMiwgMTMsIDI2LCAxMjIsIDIyOCwgMjI4LCAyNiwgMTIyLCAyMjcsIDE1OSwgCi0gICAgMjYsIDEyMiwgMjIyLCAyMzQsIDI2LCAxMjIsIDIyMiwgMjU1LCAyNiwgMTIyLCAyMjIsIDIyNSwgMjYsIDEyMiwgMjIzLCAKLSAgICA2MSwgMjYsIDEyMiwgMjI3LCAxNTgsIDI2LCAxMjIsIDIyMywgNjIsIDI2LCAxMjIsIDIyMiwgMjMzLCAyNiwgMTIyLCAyMjcsIAotICAgIDE0NywgMjYsIDEyMiwgMjIzLCA1NiwgMjYsIDEyMiwgMjI5LCAyMTgsIDI2LCAxMjIsIDIyOCwgMjEwLCAyNiwgMTIyLCAKLSAgICAyMzUsIDkyLCAyNiwgMTcwLCAyMzUsIDkyLCAyNiwgMTcwLCA1NywgMjYsIDE3MCwgMjUzLCA0LCAyNiwgMTcwLCAxOTEsIAotICAgIDI2LCAxNzAsIDI0NywgNjEsIDI2LCAxNzAsIDI1MywgMTc3LCAyNiwgMTcwLCA3MiwgMjYsIDE3MCwgMjQ3LCAyMzIsIDI2LCAKLSAgICAxNzAsIDI1MywgOTYsIDI2LCAxNzAsIDczLCAyNiwgMTcwLCAyNTIsIDIwOCwgMjYsIDE3MCwgMjQ3LCAyMjMsIDI2LCAxNzAsIAotICAgIDI1MywgMTUsIDI2LCAxNzAsIDI1MiwgMjUxLCAyNiwgMTcwLCA2NiwgMjYsIDE3MCwgMjQ3LCAyMjcsIDI2LCAxNzAsIDI1MiwgCi0gICAgMjUwLCAyNiwgMTcwLCAyNTMsIDI3LCAyNiwgMTcwLCAyNTIsIDIzMywgMjYsIDE3MCwgMjUzLCAxMDAsIDI2LCAxNzAsIAotICAgIDI1MywgMjgsIDI2LCAxNzAsIDc0LCAyNiwgMTcwLCAyNDgsIDIxOSwgMjYsIDE3MCwgMjQ4LCAyMjAsIDI2LCAxNzAsIDI0NiwgCi0gICAgNzMsIDI2LCAxNzAsIDI0MCwgOTAsIDI2LCAxNzAsIDI0MywgOTgsIDI2LCAxNzAsIDI0MywgOTksIDI2LCAxNzAsIDIzOCwgCi0gICAgMjAzLCAyNiwgMTcwLCAyNDAsIDk2LCAyNiwgMTcwLCAyNDAsIDk3LCAyNiwgMTcwLCAyNDUsIDUxLCAyNiwgMTcwLCAyNTEsIAotICAgIDkxLCAyNiwgMTcwLCAyNDUsIDUyLCAyNiwgMTcwLCAyNTEsIDkyLCAyNiwgMTcwLCAyNTEsIDkzLCAyNiwgMTcwLCAyMzgsIAotICAgIDgzLCAyNiwgMTcwLCAyMzUsIDIzMywgMjYsIDE3MCwgMjM3LCAzNCwgMjYsIDE3MCwgMjQ2LCA5MywgMjYsIDE3MCwgMjQyLCAKLSAgICAzMSwgMjYsIDE3MCwgMjUyLCA0OCwgMjYsIDE3MCwgMjQ2LCAyNywgMjYsIDE3MCwgMjM1LCAwLCAyNiwgMTcwLCAyNDYsIAotICAgIDI4LCAyNiwgMTcwLCAyNTIsIDQ5LCAyNiwgMTcwLCAyNDYsIDk2LCAyNiwgMTcwLCAyNDAsIDEwMCwgMjYsIDE3MCwgMjQ2LCAKLSAgICA5NywgMjYsIDE3MCwgMjM1LCAyMzQsIDI2LCAxNzAsIDIzOCwgODQsIDI2LCAxNzAsIDI0NiwgOTgsIDI2LCAxNzAsIDI0MiwgCi0gICAgMzMsIDI2LCAxNzAsIDI0MywgMTAyLCAyNiwgMTcwLCAyMzgsIDIwOSwgMjYsIDE3MCwgMjQ2LCA4OCwgMjYsIDE3MCwgMjUwLCAKLSAgICAxMTAsIDI2LCAxNzAsIDI0NCwgMSwgMjYsIDE3MCwgMjUwLCAxMTEsIDI2LCAxNzAsIDI1MCwgMTEyLCAyNiwgMTcwLCAyNDQsIAotICAgIDAsIDI2LCAxNzAsIDIzNCwgMTIyLCAyNiwgMTcwLCAyMzcsIDIyOCwgMjYsIDE3MCwgMjMyLCA3NCwgMjYsIDE3MCwgMjM0LCAKLSAgICA3LCAyNiwgMTcwLCAyMzQsIDYsIDI2LCAxNzAsIDIzMCwgMTEyLCAyNiwgMTM4LCAyMzUsIDc3LCAyNiwgMTM4LCAyMjgsIAotICAgIDE5NSwgMjYsIDEzOCwgMjI4LCAxOTksIDI2LCAxMzgsIDIzNywgMTM5LCAyNiwgMTM4LCAyMjgsIDIwMSwgMjYsIDEzOCwgCi0gICAgMjI4LCAyMDIsIDI2LCAxMzgsIDIzNSwgODEsIDI2LCAxMzgsIDIzNywgMTQyLCAyNiwgMTM4LCAyMjcsIDE5NywgMjYsIAotICAgIDEzOCwgMjI4LCAyMDQsIDI2LCAxMzgsIDIyOCwgMjA1LCAyNiwgMTM4LCAyMjksIDE4OCwgMjYsIDEzOCwgMjI3LCAxNDAsIAotICAgIDI2LCAxMzgsIDIyNywgMTM5LCAyNiwgMTM4LCAyMjgsIDE5MywgMjYsIDEzOCwgMjM3LCAxMzcsIDI2LCAxMzgsIDIzNywgCi0gICAgMTQxLCAyNiwgMTM4LCAyMjksIDE4MCwgMjYsIDEzOCwgMjQwLCAyMTMsIDI2LCAxMzgsIDIzMCwgMTU5LCAyNiwgMTM4LCAKLSAgICAyMzcsIDEzNCwgMjYsIDEzOCwgMjM3LCAxMzAsIDI2LCAxMzgsIDIzMywgMTI4LCAyNiwgMTM4LCAyMzMsIDEzMSwgMjYsIAotICAgIDEzOCwgMjMzLCAxMzgsIDI2LCAxMzgsIDIzMywgMTMzLCAyNiwgMTM4LCAyMzcsIDEzMywgMjYsIDEzOCwgMjI3LCAyNDgsIAotICAgIDI2LCAxMzgsIDIyMiwgMjM1LCAyNiwgMTM4LCAyMjcsIDIwNywgMjYsIDEzOCwgMjI3LCAxOTYsIDI2LCAxMzgsIDIyOSwgCi0gICAgMjA0LCAyNiwgMTM4LCAyMjcsIDE0NCwgMjYsIDEzOCwgMjI3LCAxNzIsIDI2LCAxMzgsIDIyNywgMTUzLCAyNiwgMTM4LCAKLSAgICAyMjgsIDE2OCwgMjYsIDEzOCwgMjIyLCAyNDEsIDI2LCAxMzgsIDIyOCwgMjE3LCAyNiwgMTM4LCAyMjcsIDIxMCwgMjYsIAotICAgIDEzOCwgMjIyLCAyMzcsIDI2LCAxMzgsIDIyOSwgMjIwLCAyNiwgMTM4LCAyMjIsIDIzNiwgMjYsIDEzOCwgMjIzLCA1MiwgCi0gICAgMjYsIDEzOCwgMjIyLCAyNTMsIDI2LCAxMzgsIDIyMiwgMjQ5LCAyNiwgMTM4LCAyMjIsIDIzMCwgMjYsIDEzOCwgMjI1LCAKLSAgICAxMDIsIDI2LCAxMzgsIDIyNywgMTUxLCAyNiwgMTM4LCAyMjcsIDE3NCwgMjYsIDEzOCwgMjIyLCAyNDIsIDI2LCAxMzgsIAotICAgIDIyNywgMjUzLCAyNiwgMTM4LCAyMjksIDM3LCAyNiwgMTM4LCAyMjgsIDIwMCwgMjYsIDEzOCwgMjI5LCAyMDAsIDI2LCAKLSAgICAxMzgsIDIyNSwgOTcsIDI2LCAxMzgsIDIyNywgMTQzLCAyNiwgMTM4LCAyMjcsIDE3MSwgMjYsIDEzOCwgMjI5LCAzNiwgMjYsIAotICAgIDEzOCwgMjI3LCAxMzcsIDI2LCAxMzgsIDIyOSwgNTEsIDI2LCAxMzgsIDIyNywgMTQ4LCAyNiwgMTM4LCAyMjksIDQ5LCAyNiwgCi0gICAgMTM4LCAyMjcsIDEzOCwgMjYsIDEzOCwgMjI4LCAyMDcsIDI2LCAxMzgsIDIyOCwgMjA4LCAyNiwgMTM4LCAyMjksIDIxNywgCi0gICAgMjYsIDEzOCwgMjI5LCAxOTAsIDI2LCAxMzgsIDIzMywgMTc0LCAyNiwgMTM4LCAyMjcsIDIwNSwgMjYsIDEzOCwgMjIyLCAKLSAgICAyNDYsIDI2LCAxMzgsIDIyOSwgMTkyLCAyNiwgMTM4LCAyMjcsIDE2NSwgMjYsIDEzOCwgMjMyLCAxMywgMjYsIDEzOCwgCi0gICAgMjI3LCAxNTUsIDI2LCAxMzgsIDIyMiwgMjU0LCAyNiwgMTM4LCAyMjcsIDE0NywgMjYsIDEzOCwgMjIzLCA1NiwgMjYsIAotICAgIDEzOCwgMjI5LCAyNCwgMjYsIDEzOCwgMjI5LCAyNiwgMjYsIDEzOCwgMjI5LCAyMywgMjYsIDEzOCwgMjI5LCAyNSwgMjYsIAotICAgIDEzOCwgMjI4LCAyMTAsIDI1LCA0LCAxNTQsIDI1LCA0LCAyNTMsIDU5LCAyNSwgNCwgMjUzLCA0MSwgMjUsIDQsIDI0NywgCi0gICAgMTQsIDI1LCA0LCAyNDcsIDE0OSwgMjUsIDQsIDI1MiwgMjUyLCAyNSwgNCwgMjUzLCAyMSwgMjUsIDQsIDI1MCwgOTAsIDI1LCAKLSAgICA0LCAyNTIsIDIwMCwgMjUsIDQsIDI1MywgMjIsIDI1LCA0LCAyNTMsIDQyLCAyNSwgNCwgMjQ3LCAxNjYsIDI1LCA0LCAyNDcsIAotICAgIDE2OCwgMjUsIDQsIDI1MywgODAsIDI1LCA0LCAyNTMsIDQ5LCAyNSwgNCwgMjQ3LCAxNzEsIDI1LCA0LCAyNTAsIDcwLCAyNSwgCi0gICAgNCwgMjUwLCA3NCwgMjUsIDQsIDI1MCwgNzIsIDI1LCA0LCAyNDEsIDE1NiwgMjUsIDQsIDI0MywgMTczLCAyNSwgNCwgMjUwLCAKLSAgICA3MSwgMjUsIDQsIDI1MCwgNzMsIDI1LCA0LCAyNDMsIDE3NCwgMjUsIDQsIDE5OCwgMjUsIDQsIDI1MiwgMjI5LCAyNSwgNCwgCi0gICAgMjUyLCAyMzksIDI1LCA0LCAyNDgsIDk4LCAyNSwgNCwgMjQ3LCAxNzIsIDI1LCA0LCAyNTMsIDEzLCAyNSwgNCwgMjUzLCAKLSAgICAxNCwgMjUsIDQsIDI0NywgOTAsIDI1LCA0LCAyNTEsIDI1MywgMjUsIDQsIDI1MiwgMSwgMjUsIDQsIDI1MSwgMjU1LCAyNSwgCi0gICAgNCwgMjQ1LCAyMzEsIDI1LCA0LCAyNDUsIDIzMiwgMjUsIDQsIDI1MSwgMjU0LCAyNSwgNCwgMjUyLCAwLCAyNSwgNCwgMjQ1LCAKLSAgICAyMzMsIDI1LCA0LCAyMDgsIDI1LCA0LCAyNTMsIDMsIDI1LCA0LCAyNTMsIDM3LCAyNSwgNCwgMjQ3LCAxMDAsIDI1LCA0LCAKLSAgICAyNDcsIDE5NywgMjUsIDQsIDI1MywgMzYsIDI1LCA0LCAyNTIsIDI0NiwgMjUsIDQsIDI1MSwgMjAxLCAyNSwgNCwgMjUyLCAKLSAgICAyMDQsIDI1LCA0LCAyNTMsIDI2LCAyNSwgNCwgMjUzLCAyNCwgMjUsIDQsIDI0OCwgMTUzLCAyNSwgNCwgMjQ3LCA1MCwgMjUsIAotICAgIDQsIDI1MywgNTIsIDI1LCA0LCAyNTMsIDI1LCAyNSwgNCwgMjQ3LCAyMDYsIDI1LCA0LCAyNDYsIDE2NSwgMjUsIDQsIDI0NiwgCi0gICAgMjQ2LCAyNSwgNCwgMjQ3LCA1MSwgMjUsIDQsIDI0MSwgMjM0LCAyNSwgNCwgMjQxLCA3MCwgMjUsIDQsIDI0NiwgMTg2LCAKLSAgICAyNSwgNCwgMjQ2LCAyNDUsIDI1LCA0LCAyNDEsIDcyLCAyNSwgNCwgMjUzLCAzNSwgMjUsIDQsIDI1MywgMTMyLCAyNSwgNCwgCi0gICAgMjUzLCAxMzEsIDI1LCA0LCAyNDcsIDE5MiwgMjUsIDQsIDI1MSwgMTMxLCAyNSwgNCwgMjUzLCAxOTAsIDI1LCA0LCAyNTMsIAotICAgIDE1OSwgMjUsIDQsIDI1MSwgMTQxLCAyNSwgNCwgMjUxLCAxNTQsIDI1LCA0LCAyNTEsIDE1NiwgMjUsIDQsIDI0NSwgMTA2LCAKLSAgICAyNSwgNCwgMjQ1LCAxMDcsIDI1LCA0LCAyNTEsIDE1NSwgMjUsIDQsIDI1MSwgMTMyLCAyNSwgNCwgMjUxLCAxMzYsIDI1LCAKLSAgICA0LCAyNTEsIDEzNCwgMjUsIDQsIDI0NSwgOTIsIDI1LCA0LCAyNDUsIDkzLCAyNSwgNCwgMjUxLCAxMzMsIDI1LCA0LCAyNTEsIAotICAgIDEzNSwgMjUsIDQsIDI0NSwgOTQsIDI1LCA0LCAyNDUsIDk2LCAyNSwgNCwgMjM5LCAyMTAsIDI1LCA0LCAyMzksIDIxMSwgCi0gICAgMjUsIDQsIDI0NSwgOTUsIDI1LCA0LCAyNTIsIDIxMSwgMjUsIDQsIDI1MywgNDgsIDI1LCA0LCAyNTMsIDMwLCAyNSwgNCwgCi0gICAgMjQ3LCAyNDcsIDI1LCA0LCAyNDcsIDI4LCAyNSwgNCwgMjUzLCA3MywgMjUsIDQsIDI1MywgOTgsIDI1LCA0LCAyNDgsIDIsIAotICAgIDI1LCA0LCAyNTIsIDI0MywgMjUsIDQsIDI1MywgMTM5LCAyNSwgNCwgMjUzLCAxMzgsIDI1LCA0LCAyNTIsIDY5LCAyNSwgNCwgCi0gICAgMjQ3LCAxMTMsIDI1LCA0LCAyNTMsIDk1LCAyNSwgNCwgMjUzLCAxMDgsIDI1LCA0LCAyNTIsIDg4LCAyNSwgNCwgMjUyLCAKLSAgICAyMDIsIDI1LCA0LCAyNTMsIDE4LCAyNSwgNCwgMjUzLCA0NCwgMjUsIDQsIDI0NywgMjA3LCAyNSwgNCwgMjQ3LCAxMDYsIAotICAgIDI1LCA0LCAyNTMsIDksIDI1LCA0LCA5NiwgMjUsIDQsIDI0NywgMjE4LCAyNSwgNCwgMjUyLCAyMTUsIDI1LCA0LCAyNTMsIAotICAgIDE3MiwgMjUsIDQsIDI1MywgMTQzLCAyNSwgNCwgMjQ4LCAzLCAyNSwgNCwgMjQ4LCA2LCAyNSwgNCwgMjUzLCAxNDEsIDI1LCAKLSAgICA0LCAyNTMsIDY2LCAyNSwgNCwgMjQ3LCAxMjgsIDI1LCA0LCAyNTMsIDgzLCAyNSwgNCwgMjU0LCAxNzMsIDI1LCA0LCAyNTMsIAotICAgIDM4LCAyNSwgNCwgMjUyLCAxMTAsIDI1LCA0LCAyNTIsIDExMSwgMjUsIDQsIDI1NCwgMTcsIDI1LCA0LCAyNTQsIDE4LCAyNSwgCi0gICAgNCwgMjUyLCAxMTYsIDI1LCA0LCAyNTIsIDEyMiwgMjUsIDQsIDI1MiwgMTI0LCAyNSwgNCwgMjQ2LCA2OCwgMjUsIDQsIAotICAgIDI0NiwgNjksIDI1LCA0LCAyNTIsIDEyMywgMjUsIDQsIDI1MiwgMjAxLCAyNSwgNCwgMjUyLCAyMjcsIDI1LCA0LCAyNTIsIAotICAgIDI0OCwgMjUsIDQsIDI0NywgMTc5LCAyNSwgNCwgMjQ3LCAxODEsIDI1LCA0LCAyNTIsIDI0NywgMjUsIDQsIDI1MywgOCwgCi0gICAgMjUsIDQsIDI0NywgOTUsIDI1LCA0LCAyNDYsIDE4MSwgMjUsIDQsIDI0NywgMTg1LCAyNSwgNCwgMjQ3LCA0NCwgMjUsIDQsIAotICAgIDI0NSwgMTgsIDI1LCA0LCAyNDEsIDIwNiwgMjUsIDQsIDI0OCwgMTE5LCAyNSwgNCwgMjQ3LCAxOSwgMjUsIDQsIDI0NSwgCi0gICAgMzMsIDI1LCA0LCAyMzUsIDMxLCA1NywgMjUsIDQsIDIzNSwgMzEsIDY2LCAyNSwgNCwgMjM1LCAzMSwgNzQsIDI1LCA0LCAKLSAgICAyMzUsIDMxLCAyNTIsIDIxMiwgMjUsIDQsIDIzNSwgMzEsIDI1MiwgMjMxLCAyNSwgNCwgMjM1LCAzMSwgNzIsIDI1LCA0LCAKLSAgICAyMzUsIDMxLCA3MywgMjUsIDQsIDIzNSwgMzEsIDI1MiwgMjA4LCAyNSwgNCwgMTc3LCAyNSwgNCwgMjUzLCAzNCwgMjUsIDQsIAotICAgIDI1MywgNywgMjUsIDQsIDI0OCwgNzYsIDI1LCA0LCAyNDgsIDgwLCAyNSwgNCwgMjUzLCA2LCAyNSwgNCwgMjUzLCAzMywgCi0gICAgMjUsIDQsIDI1MCwgMTc2LCAyNSwgNCwgMjQ3LCAxNjMsIDI1LCA0LCAyNDcsIDE2NSwgMjUsIDQsIDI0MSwgMywgMjUsIDQsIAotICAgIDI0NCwgNzUsIDI1LCA0LCAyNDcsIDE2NCwgMjUsIDQsIDI1MCwgMTk0LCAyNSwgNCwgMjUwLCAxOTgsIDI1LCA0LCAyNTAsIAotICAgIDE5NiwgMjUsIDQsIDI0NCwgNzYsIDI1LCA0LCAyNDQsIDc3LCAyNSwgNCwgMjUwLCAxOTUsIDI1LCA0LCAyNTAsIDE5NywgCi0gICAgMjUsIDQsIDI0NCwgNzgsIDI1LCA0LCAyNDQsIDgwLCAyNSwgNCwgMjM5LCA3NSwgMjUsIDQsIDIzOSwgNzYsIDI1LCA0LCAKLSAgICAyNDQsIDc5LCAyNSwgNCwgMjUyLCAyMDgsIDI1LCA0LCAyNTMsIDEwOSwgMjUsIDQsIDI1MywgMjcsIDI1LCA0LCAyNDcsIAotICAgIDExNSwgMjUsIDQsIDI0NywgMjI2LCAyNSwgNCwgMjUyLCAyNTAsIDI1LCA0LCAyNTMsIDEwLCAyNSwgNCwgMjUyLCAxMDEsIAotICAgIDI1LCA0LCAyMzAsIDEzOCwgNTcsIDI1LCA0LCAyMzAsIDEzOCwgNjYsIDI1LCA0LCAyMzAsIDEzOCwgNzQsIDI1LCA0LCAKLSAgICAyMzAsIDEzOCwgMjUyLCAyMTIsIDI1LCA0LCAyMzAsIDEzOCwgMjUyLCAyMzEsIDI1LCA0LCAyMzAsIDEzOCwgNzIsIDI1LCAKLSAgICA0LCAyMzAsIDEzOCwgNzMsIDI1LCA0LCAyNTIsIDIyNiwgMjUsIDQsIDI1MywgOTcsIDI1LCA0LCAyNTMsIDcyLCAyNSwgNCwgCi0gICAgMjQ4LCAyMDcsIDI1LCA0LCAyNDcsIDY0LCAyNSwgNCwgMjUzLCA0NiwgMjUsIDQsIDI1MywgNjUsIDI1LCA0LCAyNTIsIAotICAgIDE5MywgMjUsIDQsIDI0NiwgMjIzLCAyNSwgNCwgMjQ3LCAyNDAsIDI1LCA0LCAyNDcsIDIzOCwgMjUsIDQsIDI0NiwgMTA4LCAKLSAgICAyNSwgNCwgMjQxLCAyNSwgMjUsIDQsIDI0NiwgMjUxLCAyNSwgNCwgMjQ3LCAyMzksIDI1LCA0LCAyNDYsIDEyNCwgMjUsIDQsIAotICAgIDE5MSwgMjUsIDQsIDI1MiwgMjMzLCAyNSwgNCwgMjUzLCAyOCwgMjUsIDQsIDI0NywgMTE3LCAyNSwgNCwgMjQ3LCA2MiwgCi0gICAgMjUsIDQsIDI1MywgOTYsIDI1LCA0LCAyNTIsIDI1MSwgMjUsIDQsIDI1MiwgMTUzLCAyNSwgNCwgMjUyLCAyMDMsIDI1LCA0LCAKLSAgICAyNTMsIDMxLCAyNSwgNCwgMjUzLCAxMiwgMjUsIDQsIDI0OSwgMTczLCAyNSwgNCwgMjQ3LCAzMCwgMjUsIDQsIDI1MywgMjAsIAotICAgIDI1LCA0LCAyNTMsIDU3LCAyNSwgNCwgMjQ5LCAyMTcsIDI1LCA0LCAyNDYsIDE5MiwgMjUsIDQsIDI0OCwgMjQsIDI1LCA0LCAKLSAgICAyNDgsIDIzLCAyNSwgNCwgMjQzLCAyOSwgMjUsIDQsIDI0MywgMzUsIDI1LCA0LCAyNDgsIDIyLCAyNSwgNCwgMjQ3LCAxMzAsIAotICAgIDI1LCA0LCAyNDMsIDUxLCAyNSwgNCwgMjUyLCAyMTMsIDI1LCA0LCAyNTMsIDExOCwgMjUsIDQsIDI1MywgMTA0LCAyNSwgNCwgCi0gICAgMjUwLCAxMjUsIDI1LCA0LCAyNDcsIDM4LCAyNSwgNCwgMjUzLCAxMTcsIDI1LCA0LCAyNTMsIDkwLCAyNSwgNCwgMjUwLCAKLSAgICAxNDYsIDI1LCA0LCAyNTIsIDIwNSwgMjUsIDQsIDI1MywgNDAsIDI1LCA0LCAyNTMsIDM5LCAyNSwgNCwgMjQ3LCAxNDMsIAotICAgIDI1LCA0LCAyNDcsIDE0NCwgMjUsIDQsIDI1MywgMTAzLCAyNSwgNCwgMjUzLCA3NiwgMjUsIDQsIDI1MCwgMzYsIDI1LCA0LCAKLSAgICAyNTAsIDUwLCAyNSwgNCwgMjUwLCA1MiwgMjUsIDQsIDI0MywgMTYzLCAyNSwgNCwgMjQzLCAxNjQsIDI1LCA0LCAyNTAsIAotICAgIDUxLCAyNSwgNCwgMjQ3LCA3NywgMjUsIDQsIDI0OCwgNTEsIDI1LCA0LCAyNDgsIDQ5LCAyNSwgNCwgMjQzLCAxMjMsIDI1LCAKLSAgICA0LCAyNDMsIDEyNywgMjUsIDQsIDI0OCwgNDgsIDI1LCA0LCAyNDgsIDUwLCAyNSwgNCwgMjM4LCAyNDQsIDI1LCA0LCAyNDYsIAotICAgIDE3MywgMjUsIDQsIDI0NywgMjEzLCAyNSwgNCwgMjQ3LCA3LCAyNSwgNCwgMjQxLCAxOCwgMjUsIDQsIDI0MCwgMjM4LCAyNSwgCi0gICAgNCwgMjQ2LCAyNDcsIDI1LCA0LCAyNDYsIDIyOCwgMjUsIDQsIDI0NSwgMjQ4LCAyNSwgNCwgMjQ2LCAxNzYsIDI1LCA0LCAKLSAgICAyNDcsIDEyNCwgMjUsIDQsIDI0NiwgMjAwLCAyNSwgNCwgMjQyLCAyNDIsIDI1LCA0LCAyNDAsIDI0NiwgMjUsIDQsIDI0NiwgCi0gICAgMjE3LCAyNSwgNCwgMjQ3LCAyOSwgMjUsIDQsIDI0MywgNCwgMjUsIDQsIDI0NiwgMTgyLCAyNSwgNCwgMjUxLCAxMDcsIDI1LCAKLSAgICA0LCAyNDYsIDE5OCwgMjUsIDQsIDI0NSwgNjcsIDI1LCA0LCAyNDUsIDY5LCAyNSwgNCwgMjQ4LCAxMzAsIDI1LCA0LCAyNDcsIAotICAgIDk5LCAyNSwgNCwgMjQ1LCA3MSwgMjUsIDQsIDI0NiwgMjE2LCAyNSwgNCwgMjQ3LCAyMTYsIDI1LCA0LCAyNDcsIDU4LCAyNSwgCi0gICAgNCwgMjQ2LCA3LCAyNSwgNCwgMjQyLCA5LCAyNSwgNCwgMjQ2LCAyNDgsIDI1LCA0LCAyNDcsIDIxNSwgMjUsIDQsIDI0NiwgCi0gICAgOSwgMjUsIDQsIDI1MiwgNDIsIDI1LCA0LCAyNTIsIDQ3LCAyNSwgNCwgMjUyLCA0NCwgMjUsIDQsIDI0NiwgMjQsIDI1LCA0LCAKLSAgICAyNDYsIDI1LCAyNSwgNCwgMjUyLCA0MywgMjUsIDQsIDI1MiwgNDYsIDI1LCA0LCAyNDYsIDI2LCAyNSwgNCwgMjUyLCAyMzQsIAotICAgIDI1LCA0LCAyNTMsIDE3OCwgMjUsIDQsIDI1MywgODgsIDI1LCA0LCAyNDcsIDEzOSwgMjUsIDQsIDI0NywgMTQwLCAyNSwgNCwgCi0gICAgMjUzLCAxNDcsIDI1LCA0LCAyNTMsIDE0OCwgMjUsIDQsIDI0OCwgNDIsIDI1LCA0LCAyMTMsIDI1LCA0LCAyNTMsIDgyLCAKLSAgICAyNSwgNCwgMjUyLCAyMjMsIDI1LCA0LCAyNDgsIDEyNywgMjUsIDQsIDI0NywgNDYsIDI1LCA0LCAyNTMsIDAsIDI1LCA0LCAKLSAgICAyNTMsIDUwLCAyNSwgNCwgMjQ3LCA0NywgMjUsIDQsIDI1MSwgMjAyLCAyNSwgNCwgMjUxLCAzMiwgMjUsIDQsIDI1MCwgNSwgCi0gICAgMjUsIDM2LCAyMzEsIDczLCA3NiwgMjUsIDIzNSwgMTM1LCA3NiwgMjUsIDIzMSwgMTg3LCAyNSwgMjQ2LCAxNjIsIDI0MCwgCi0gICAgMTIxLCAyNSwgMjM3LCA2NywgMjUsIDIzMCwgMTQwLCAyNSwgMjM3LCA2NiwgMjUsIDIzNiwgMTkyLCAyMzcsIDY2LCAyNSwgCi0gICAgMjMzLCA4MiwgNzYsIDI1LCAyMzEsIDI0MiwgMjMwLCAxMzEsIDI1LCAyMSwgMTE4LCAyNSwgMjEsIDExMywgMjUsIDIxLCAKLSAgICAxNjYsIDI1LCAyMSwgMTU4LCAyNSwgMjEsIDE3MywgMjUsIDIxLCAxODMsIDI1LCAyMSwgMTk0LCAyNSwgMjEsIDE4NywgMjUsIAotICAgIDIxLCAxOTIsIDI1LCA2NSwgMjQ2LCAxNzksIDI1LCA2NSwgMjM1LCA1MiwgMjUsIDY1LCAyMzUsIDgwLCAyNSwgNjUsIDIzNywgCi0gICAgMjAzLCAyNSwgNjUsIDIzNywgMTAwLCAyNSwgNjUsIDIzOCwgNjIsIDI1LCA2NSwgMjMzLCAyMzUsIDI1LCA2NSwgMjM1LCAKLSAgICAxNjksIDI1LCA2NSwgMjM1LCAxMzIsIDI1LCA2NSwgMjMzLCA3NSwgMjUsIDY1LCAyNTMsIDUzLCAyMzEsIDE5NiwgMjUsIDQsIAotICAgIDIzMSwgMjQ2LCAyNDcsIDkwLCAyNSwgNCwgMjQ3LCAxNzgsIDI1LCA0LCAyNDQsIDE2MSwgMjUsIDQsIDI0NywgMTc3LCAyNSwgCi0gICAgNCwgMjMxLCAyNDYsIDI0OCwgMiwgMjUsIDQsIDI0OSwgMTM1LCAyNSwgNCwgMjQyLCAyMjUsIDI1LCA0LCAyNDksIDEzNCwgCi0gICAgMjUsIDQsIDIzMSwgMjQ2LCAyNDgsIDQyLCAyNSwgNCwgMjUwLCA0LCAyNSwgNCwgMjQzLCAxMTIsIDI1LCA0LCAyNTAsIDMsIAotICAgIDI1LCA0LCAyMzEsIDI0NiwgMjQ3LCA0NywgMjUsIDQsIDI0NywgMTkxLCAyNSwgNCwgMjQ1LCA4NywgMjUsIDQsIDI0NywgCi0gICAgMTkwLCAyNSwgMjQwLCAxODgsIDE2NSwgMjQwLCA5OSwgMjUsIDI0MCwgMTg4LCAxNjUsIDIzOCwgMTgyLCAyNSwgMjQwLCAKLSAgICAxODgsIDE2NSwgMjM1LCAyMDYsIDI1LCAyNDAsIDE4OCwgMTY1LCAyNDAsIDEyNSwgMjM1LCAyMDYsIDI1LCAyNDAsIDE4OCwgCi0gICAgMTY1LCAyMzgsIDE4NiwgMjUsIDI0MCwgMTg4LCAxNjUsIDIzOSwgNjUsIDI1LCAyNDAsIDE4OCwgMTY1LCAyMzYsIDI3LCAKLSAgICAyNSwgMjQwLCAxODgsIDE2NSwgMjM5LCA4LCAyNSwgMjQwLCAxODgsIDE2NSwgMjI4LCAyMzksIDI1LCAyNDAsIDE4OCwgCi0gICAgMTY1LCAyNDQsIDcyLCAxMzEsIDEsIDU3LCAxMzEsIDEsIDcyLCAxMzEsIDEsIDc0LCAxMzEsIDEsIDczLCAxMzEsIDEsIDY2LCAKLSAgICAxMzEsIDEsIDE5NiwgMTMxLCAxLCAyNTIsIDIwNSwgMTMxLCAxLCAxNzcsIDEzMSwgMSwgMjUzLCAxMDMsIDEzMSwgMSwgCi0gICAgMjUzLCAzOSwgMTMxLCAxLCAyNTMsIDc2LCAxMzEsIDEsIDI1MywgNDAsIDEzMSwgMSwgMjU0LCA2MywgMTMxLCAxLCAxNTQsIAotICAgIDEzMSwgMSwgMjUyLCAyNTIsIDEzMSwgMSwgMjUzLCA0MSwgMTMxLCAxLCAyNTMsIDIxLCAxMzEsIDEsIDI1MywgNTksIDEzMSwgCi0gICAgMSwgMjUzLCAyMjcsIDEzMSwgMSwgMjUyLCAyMDAsIDEzMSwgMSwgMjUzLCA4MCwgMTMxLCAxLCAyNTMsIDQyLCAxMzEsIDEsIAotICAgIDI1MywgNDksIDEzMSwgMSwgMjUzLCAyMiwgMTMxLCAxLCAyNTQsIDk2LCAxMzEsIDEsIDE5OCwgMTMxLCAxLCAyNTMsIDEzLCAKLSAgICAxMzEsIDEsIDI1MiwgMjM5LCAxMzEsIDEsIDI1MywgMTQsIDEzMSwgMSwgMjUyLCAyMjksIDEzMSwgMSwgMjUyLCAyMDEsIAotICAgIDEzMSwgMSwgMjQ4LCA2MywgMTMxLCAxLCAyNTEsIDM4LCAxMzEsIDEsIDI1MiwgMjQ3LCAxMzEsIDEsIDI1MiwgMjQ4LCAKLSAgICAxMzEsIDEsIDI1MywgOCwgMTMxLCAxLCAyNTIsIDIyNywgMTMxLCAxLCAyNTMsIDI1MSwgMTMxLCAxLCAyNTEsIDE0NSwgCi0gICAgMTMxLCAxLCAyNTEsIDE0NiwgMTMxLCAxLCAyNTEsIDE0NywgMTMxLCAxLCAyNDgsIDE0NCwgMTMxLCAxLCAyNDgsIDE0NSwgCi0gICAgMTMxLCAxLCAyNTEsIDE1MiwgMTMxLCAxLCAyNTIsIDIwNCwgMTMxLCAxLCAxOTMsIDEzMSwgMSwgMjUzLCA1MiwgMTMxLCAxLCAKLSAgICAyNTMsIDI0LCAxMzEsIDEsIDI1MywgMjUsIDEzMSwgMSwgMjUzLCAyNiwgMTMxLCAxLCAyNTQsIDksIDEzMSwgMSwgMjUyLCAKLSAgICAyMDMsIDEzMSwgMSwgMjUyLCAyMDIsIDEzMSwgMSwgMjUzLCAyMCwgMTMxLCAxLCAyNTMsIDksIDEzMSwgMSwgMjUzLCAxMiwgCi0gICAgMTMxLCAxLCAyNTMsIDQ0LCAxMzEsIDEsIDI1MywgNTcsIDEzMSwgMSwgMjUzLCAzMSwgMTMxLCAxLCAyNTQsIDQ4LCAxMzEsIAotICAgIDEsIDI0OCwgMzAsIDEzMSwgMSwgMjQ4LCAxNzQsIDEzMSwgMSwgMjQ4LCAxNzUsIDEzMSwgMSwgMjQ4LCAxNzYsIDEzMSwgMSwgCi0gICAgMjQ4LCAxNzcsIDEzMSwgMSwgMjQ4LCAxNzgsIDEzMSwgMSwgMjUyLCAyNSwgMTMxLCAxLCAyNDYsIDIxNiwgMTMxLCAxLCAKLSAgICAyNDYsIDI0OCwgMTMxLCAxLCAyNDcsIDU4LCAxMzEsIDEsIDI0NywgMjE1LCAxMzEsIDEsIDI0NywgMjE2LCAxMzEsIDEsIAotICAgIDI1MiwgMzAsIDEzMSwgMSwgMjUyLCAyMDgsIDEzMSwgMSwgMjUyLCAyNTAsIDEzMSwgMSwgMjUzLCAyNywgMTMxLCAxLCAKLSAgICAyNTMsIDEwLCAxMzEsIDEsIDI1MywgMTA5LCAxMzEsIDEsIDI1NCwgMTcxLCAxMzEsIDEsIDE5MSwgMTMxLCAxLCAyNTMsIAotICAgIDk2LCAxMzEsIDEsIDI1MywgMjgsIDEzMSwgMSwgMjUyLCAyNTEsIDEzMSwgMSwgMjUyLCAyMzMsIDEzMSwgMSwgMjU0LCAKLSAgICAxNzYsIDE2LCAxNywgNzIsIDE2LCAxNywgMjQ4LCAyMjEsIDE2LCAxNywgNzQsIDE2LCAxNywgMjUyLCAyMTYsIDE2LCAxNywgCi0gICAgNzMsIDE2LCAxNywgMjUyLCAyMjAsIDE2LCAxNywgMjM3LCA5MywgMjUyLCAyMjAsIDE2LCAxNywgNjAsIDI1MiwgMjMxLCAKLSAgICAxNiwgMTcsIDYwLCA3NCwgMTYsIDE3LCA1NywgMTYsIDE3LCAyNTIsIDIxMiwgMTYsIDE3LCAyNTIsIDI1MCwgMTYsIDE3LCAKLSAgICAxMjcsIDI1MiwgMjUwLCAxNiwgMTcsIDI1MywgMjcsIDE2LCAxNywgMTI3LCAyNTMsIDI3LCAxNiwgMTcsIDI0OCwgMTk0LCAKLSAgICAxNiwgMTcsIDEyNywgMjQ4LCAxOTQsIDE2LCAxNywgMjUzLCAxMCwgMTYsIDE3LCAxMjcsIDI1MywgMTAsIDE2LCAxNywgCi0gICAgMjQ3LCAxMTYsIDE2LCAxNywgMTI3LCAyNDcsIDExNiwgMTYsIDE3LCAyMzUsIDM5LCAyNDcsIDExNiwgMTYsIDE3LCAyNTIsIAotICAgIDIwOCwgMTYsIDE3LCAxMjcsIDI1MiwgMjA4LCAxNiwgMTcsIDI0NywgMTE1LCAxNiwgMTcsIDEyNywgMjQ3LCAxMTUsIDE2LCAKLSAgICAxNywgMjM1LCAzOSwgMjQ3LCAxMTUsIDE2LCAxNywgMjUyLCAyMjEsIDE2LCAxNywgMjM3LCA5MywgMjU0LCAxOTUsIDE2LCAKLSAgICAxNywgMjM1LCAzMSwgMjQwLCAxMjEsIDE2LCAxNywgMzUsIDE1NSwgMTYsIDE3LCAzNSwgMjM3LCAzNiwgMTYsIDE3LCAzNSwgCi0gICAgMjM3LCA1OSwgMTMyLCAyNDAsIDE0NywgMTYsIDE3LCAzNSwgMjUyLCAyMjgsIDEzMiwgMjQwLCAxNDcsIDE2LCAxNywgMzUsIAotICAgIDQxLCAxMzIsIDI0MCwgMTQ3LCAxNiwgMTcsIDM1LCAyNDAsIDE0NywgMTYsIDE3LCAzNSwgNDcsIDE1NSwgMTYsIDE3LCAzNSwgCi0gICAgNDcsIDI0MCwgMTI1LCA2MSwgMjMzLCAyNDMsIDE2LCAxNywgMzUsIDIzNywgNDQsIDI0NiwgMTY0LCAxNiwgMTcsIDM1LCAKLSAgICAyNDAsIDEyNSwgMTY5LCA4MiwgMTYsIDE3LCAzNSwgMjQwLCAxODAsIDE2LCAxNywgMzUsIDEwMywgMjQwLCAxNDksIDE2LCAKLSAgICAxNywgMjUyLCAyMzIsIDE2LCAxNywgMjUzLCA3OSwgMTYsIDE3LCAyNTMsIDEwNiwgMTYsIDE3LCAyNTMsIDUsIDE2LCAxNywgCi0gICAgMjUzLCAwLCAxNiwgMTcsIDI0NSwgNTgsIDE2LCAxNywgMjUyLCAyMjMsIDE2LCAxNywgMjQ4LCAxMzIsIDE2LCAxNywgMjUzLCAKLSAgICA1MCwgMTYsIDE3LCAyNDcsIDE4OSwgMTYsIDE3LCAyMzcsIDkzLCAyNDcsIDE4OSwgMTYsIDE3LCA2MCwgMjQ3LCAxNDksIAotICAgIDE2LCAxNywgNjAsIDI1MywgNDEsIDE2LCAxNywgMjEzLCAxNiwgMTcsIDI0OCwgMTI3LCAxNiwgMTcsIDI0NywgMTkwLCAxNiwgCi0gICAgMTcsIDEyNywgMjQ3LCAxOTAsIDE2LCAxNywgMjQ3LCAxOTEsIDE2LCAxNywgMTI3LCAyNDcsIDE5MSwgMTYsIDE3LCAyNDEsIAotICAgIDIxNiwgMTYsIDE3LCAxMjcsIDI0MSwgMjE2LCAxNiwgMTcsIDI0OCwgMTM3LCAxNiwgMTcsIDEyNywgMjQ4LCAxMzcsIDE2LCAKLSAgICAxNywgMjQxLCAyMTcsIDE2LCAxNywgMTI3LCAyNDEsIDIxNywgMTYsIDE3LCAyNDcsIDQ3LCAxNiwgMTcsIDEyNywgMjQ3LCAKLSAgICA0NywgMTYsIDE3LCAyNDEsIDY1LCAxNiwgMTcsIDEyNywgMjQxLCA2NSwgMTYsIDE3LCAyMzcsIDkzLCAyNDEsIDY1LCAxNiwgCi0gICAgMTcsIDI1NCwgMTg3LCAxNiwgMTcsIDEyNywgMjU0LCAxODcsIDE2LCAxNywgNjAsIDIxMiwgMTYsIDE3LCAyNTMsIDksIDE2LCAKLSAgICAxNywgMjQ1LCAyMzUsIDE2LCAxNywgMjUzLCA0NCwgMTYsIDE3LCAyNTIsIDIwLCAxNiwgMTcsIDk2LCAxNiwgMTcsIDI0NywgCi0gICAgMTA5LCAxNiwgMTcsIDIzNywgOTMsIDI0NywgMTA5LCAxNiwgMTcsIDYwLCAyNDcsIDMwLCAxNiwgMTcsIDYwLCAyNTMsIDEyLCAKLSAgICAxNiwgMTcsIDI1MiwgMjAyLCAxNiwgMTcsIDI0NywgMjA3LCAxNiwgMTcsIDI0NywgNTksIDE2LCAxNywgMTI3LCAyNDcsIAotICAgIDU5LCAxNiwgMTcsIDI0OCwgMTg2LCAxNiwgMTcsIDEyNywgMjQ4LCAxODYsIDE2LCAxNywgMjQyLCAxNCwgMTYsIDE3LCAKLSAgICAxMjcsIDI0MiwgMTQsIDE2LCAxNywgMTEzLCAxNiwgMTcsIDEyNywgMTEzLCAxNiwgMTcsIDI0MiwgMTUsIDE2LCAxNywgCi0gICAgMTI3LCAyNDIsIDE1LCAxNiwgMTcsIDI0NywgMjE4LCAxNiwgMTcsIDEyNywgMjQ3LCAyMTgsIDE2LCAxNywgMjQxLCA4MywgCi0gICAgMTYsIDE3LCAxMjcsIDI0MSwgODMsIDE2LCAxNywgMjM1LCAzOSwgMjQxLCA4MywgMTYsIDE3LCAyNTQsIDE4MywgMTYsIDE3LCAKLSAgICAyNDgsIDE4MSwgMTYsIDE3LCAyNDgsIDE4MiwgMTYsIDE3LCAyNDcsIDIxNywgMTYsIDE3LCAyNDYsIDE5MSwgMTYsIDE3LCAKLSAgICAyNTMsIDYsIDE2LCAxNywgMjQ0LCA0NCwgMTYsIDE3LCAyNTMsIDcsIDE2LCAxNywgMjUwLCAxNjgsIDE2LCAxNywgMjUzLCAKLSAgICAzMywgMTYsIDE3LCAyNDcsIDE2MiwgMTYsIDE3LCAyMzcsIDkzLCAyNDcsIDE2MiwgMTYsIDE3LCAxNzcsIDE2LCAxNywgCi0gICAgMjQ4LCA3NiwgMTYsIDE3LCAyNDcsIDE2NCwgMTYsIDE3LCAxMjcsIDI0NywgMTY0LCAxNiwgMTcsIDI0NywgMTY1LCAxNiwgCi0gICAgMTcsIDEyNywgMjQ3LCAxNjUsIDE2LCAxNywgMjQxLCAxNzYsIDE2LCAxNywgMTI3LCAyNDEsIDE3NiwgMTYsIDE3LCAyNDgsIAotICAgIDg4LCAxNiwgMTcsIDEyNywgMjQ4LCA4OCwgMTYsIDE3LCAyNDEsIDE3NywgMTYsIDE3LCAxMjcsIDI0MSwgMTc3LCAxNiwgCi0gICAgMTcsIDI0NywgMTYzLCAxNiwgMTcsIDEyNywgMjQ3LCAxNjMsIDE2LCAxNywgMjQxLCAzLCAxNiwgMTcsIDEyNywgMjQxLCAzLCAKLSAgICAxNiwgMTcsIDIzNSwgMzksIDI0MSwgMywgMTYsIDE3LCAyNTQsIDE4NiwgMTYsIDE3LCAyNTMsIDI0MywgMTYsIDE3LCAyMjgsIAotICAgIDE5NCwgMjQ3LCAxNTYsIDE2LCAxNywgMjI4LCAxOTQsIDI1MCwgMTY3LCAxNiwgMTcsIDIyOCwgMTk0LCAyNTAsIDE3NywgCi0gICAgMTYsIDE3LCAyMjgsIDE5NCwgMjUwLCAxNTQsIDE2LCAxNywgMjUzLCAxNDEsIDE2LCAxNywgMjQyLCAyMjksIDE2LCAxNywgCi0gICAgMjUzLCAxNDMsIDE2LCAxNywgMjQ5LCAxNTksIDE2LCAxNywgMjUzLCA2NiwgMTYsIDE3LCAyNDcsIDEyNiwgMTYsIDE3LCAKLSAgICAyMzcsIDkzLCAyNDcsIDEyNiwgMTYsIDE3LCAyNTIsIDIxNSwgMTYsIDE3LCAyNDgsIDMsIDE2LCAxNywgMjQ4LCAxMywgMTYsIAotICAgIDE3LCAxMjcsIDI0OCwgMTMsIDE2LCAxNywgMjQ3LCAxMjksIDE2LCAxNywgMTI3LCAyNDcsIDEyOSwgMTYsIDE3LCAyNDEsIAotICAgIDExMywgMTYsIDE3LCAxMjcsIDI0MSwgMTEzLCAxNiwgMTcsIDI0OCwgMTQsIDE2LCAxNywgMTI3LCAyNDgsIDE0LCAxNiwgCi0gICAgMTcsIDI0MSwgMTE0LCAxNiwgMTcsIDEyNywgMjQxLCAxMTQsIDE2LCAxNywgMjQ3LCAxMjgsIDE2LCAxNywgMTI3LCAyNDcsIAotICAgIDEyOCwgMTYsIDE3LCAyNDEsIDM1LCAxNiwgMTcsIDEyNywgMjQxLCAzNSwgMTYsIDE3LCAyMzUsIDM5LCAyNDEsIDM1LCAxNiwgCi0gICAgMTcsIDI1NCwgMTk0LCAxNiwgMTcsIDIzNywgODgsIDI1MywgMTM1LCAxNiwgMTcsIDI1MywgMTMsIDE2LCAxNywgMjQ0LCAKLSAgICAxMTQsIDE2LCAxNywgMjUyLCAyMzksIDE2LCAxNywgMjUxLCAxMywgMTYsIDE3LCAyNTMsIDE0LCAxNiwgMTcsIDI0NywgCi0gICAgMTc1LCAxNiwgMTcsIDIzNywgOTMsIDI0NywgMTc1LCAxNiwgMTcsIDE5OCwgMTYsIDE3LCAyNDgsIDk4LCAxNiwgMTcsIAotICAgIDI0NywgMTc3LCAxNiwgMTcsIDEyNywgMjQ3LCAxNzcsIDE2LCAxNywgMjQ3LCAxNzgsIDE2LCAxNywgMTI3LCAyNDcsIDE3OCwgCi0gICAgMTYsIDE3LCAyNDEsIDE5NiwgMTYsIDE3LCAxMjcsIDI0MSwgMTk2LCAxNiwgMTcsIDI0OCwgMTA1LCAxNiwgMTcsIDEyNywgCi0gICAgMjQ4LCAxMDUsIDE2LCAxNywgMjQxLCAxOTcsIDE2LCAxNywgMTI3LCAyNDEsIDE5NywgMTYsIDE3LCAyNDcsIDkwLCAxNiwgCi0gICAgMTcsIDEyNywgMjQ3LCA5MCwgMTYsIDE3LCAyNDEsIDU0LCAxNiwgMTcsIDEyNywgMjQxLCA1NCwgMTYsIDE3LCAyMzUsIDM5LCAKLSAgICAyNDEsIDU0LCAxNiwgMTcsIDE4NSwgMTYsIDE3LCAxMjcsIDE4NSwgMTYsIDE3LCAyNTQsIDEwMiwgMTYsIDE3LCAyMzAsIAotICAgIDE3NSwgMTg1LCAxNiwgMTcsIDIzNywgODgsIDE4NSwgMTYsIDE3LCAyNTIsIDI0NywgMTYsIDE3LCAyNDQsIDE2MiwgMTYsIAotICAgIDE3LCAyNTIsIDI0OCwgMTYsIDE3LCAyNDgsIDExMiwgMTYsIDE3LCAyNTMsIDgsIDE2LCAxNywgMjQ3LCAxODMsIDE2LCAxNywgCi0gICAgMjM3LCA5MywgMjQ3LCAxODMsIDE2LCAxNywgMjUyLCAyMDEsIDE2LCAxNywgMjQ3LCAxNzksIDE2LCAxNywgMjQ4LCAxMTgsIAotICAgIDE2LCAxNywgMTI3LCAyNDgsIDExOCwgMTYsIDE3LCAyNDcsIDk1LCAxNiwgMTcsIDEyNywgMjQ3LCA5NSwgMTYsIDE3LCAKLSAgICAyNDEsIDU2LCAxNiwgMTcsIDEyNywgMjQxLCA1NiwgMTYsIDE3LCAyMzUsIDM5LCAyNDEsIDU2LCAxNiwgMTcsIDE5OSwgMTYsIAotICAgIDE3LCA2MCwgMjUzLCA2OSwgMTYsIDE3LCAyNTQsIDExNSwgMTYsIDE3LCAyNTMsIDgwLCAxNiwgMTcsIDI0NCwgODMsIDE2LCAKLSAgICAxNywgMjUzLCA0MiwgMTYsIDE3LCAyNTAsIDIyMCwgMTYsIDE3LCAyNTMsIDQ5LCAxNiwgMTcsIDI0NywgODcsIDE2LCAxNywgCi0gICAgMjM3LCA5MywgMjQ3LCA4NywgMTYsIDE3LCAyNTIsIDIwMCwgMTYsIDE3LCAyNDcsIDE2NiwgMTYsIDE3LCAyNDgsIDk0LCAKLSAgICAxNiwgMTcsIDEyNywgMjQ4LCA5NCwgMTYsIDE3LCAyNDgsIDk1LCAxNiwgMTcsIDEyNywgMjQ4LCA5NSwgMTYsIDE3LCAyNDEsIAotICAgIDE4NywgMTYsIDE3LCAxMjcsIDI0MSwgMTg3LCAxNiwgMTcsIDI0OCwgOTYsIDE2LCAxNywgMTI3LCAyNDgsIDk2LCAxNiwgCi0gICAgMTcsIDI0MSwgMTg4LCAxNiwgMTcsIDEyNywgMjQxLCAxODgsIDE2LCAxNywgMjQ3LCAxNzEsIDE2LCAxNywgMTI3LCAyNDcsIAotICAgIDE3MSwgMTYsIDE3LCAyNDEsIDE4NiwgMTYsIDE3LCAxMjcsIDI0MSwgMTg2LCAxNiwgMTcsIDE0OSwgMTYsIDE3LCAxMjcsIAotICAgIDE0OSwgMTYsIDE3LCAxMjQsIDE0OSwgMTYsIDE3LCAyNTMsIDUyLCAxNiwgMTcsIDI0NSwgMTQ2LCAxNiwgMTcsIDI1MywgCi0gICAgMjQsIDE2LCAxNywgMjUxLCAyMjMsIDE2LCAxNywgMjUzLCAyNSwgMTYsIDE3LCAyNDcsIDEwNCwgMTYsIDE3LCAyMzcsIDkzLCAKLSAgICAyNDcsIDEwNCwgMTYsIDE3LCAyNTIsIDIwNCwgMTYsIDE3LCAyNDgsIDE1MywgMTYsIDE3LCAyNDgsIDE2NywgMTYsIDE3LCAKLSAgICAxMjcsIDI0OCwgMTY3LCAxNiwgMTcsIDI0OCwgMTY4LCAxNiwgMTcsIDEyNywgMjQ4LCAxNjgsIDE2LCAxNywgMjQxLCAyNTMsIAotICAgIDE2LCAxNywgMTI3LCAyNDEsIDI1MywgMTYsIDE3LCAyNDgsIDE2OSwgMTYsIDE3LCAxMjcsIDI0OCwgMTY5LCAxNiwgMTcsIAotICAgIDI0MSwgMjU0LCAxNiwgMTcsIDEyNywgMjQxLCAyNTQsIDE2LCAxNywgMjQ3LCAyMDYsIDE2LCAxNywgMTI3LCAyNDcsIDIwNiwgCi0gICAgMTYsIDE3LCAyNDEsIDc2LCAxNiwgMTcsIDEyNywgMjQxLCA3NiwgMTYsIDE3LCAyMzUsIDM5LCAyNDEsIDc2LCAxNiwgMTcsIAotICAgIDE5MywgMTYsIDE3LCAyMzAsIDE3NSwgMTkzLCAxNiwgMTcsIDI1NCwgMTAsIDE2LCAxNywgMjMxLCAyMDQsIDE5MywgMTYsIAotICAgIDE3LCAyMzEsIDEwNCwgMjU0LCAxNDcsIDE2LCAxNywgMjM1LCAzOSwgMjUxLCAyMjgsIDE2LCAxNywgMjM1LCAzOSwgMjUxLCAKLSAgICAyMDgsIDE2LCAxNywgMjM1LCAzOSwgMjQ1LCAxOTUsIDE2LCAxNywgMjM1LCAzOSwgMjQ1LCAyMjEsIDE2LCAxNywgMjM1LCAKLSAgICAzOSwgMjQ1LCAxOTAsIDE2LCAxNywgMjM1LCAzOSwgMjQ1LCAxNTQsIDE2LCAxNywgMjQ2LCAxODYsIDE2LCAxNywgMjQ3LCAKLSAgICA1MSwgMTYsIDE3LCAyNDUsIDE2NSwgMTYsIDE3LCAyNDYsIDI0NSwgMTYsIDE3LCAyNDEsIDIzOSwgMTYsIDE3LCAyNDYsIAotICAgIDE2NSwgMTYsIDE3LCAyNDEsIDIzNCwgMTYsIDE3LCAyNDEsIDE2LCAxNiwgMTcsIDEyNywgMjQxLCAxNiwgMTYsIDE3LCAKLSAgICAyNDEsIDI0MywgMTYsIDE3LCAxMjcsIDI0MSwgMjQzLCAxNiwgMTcsIDIzOCwgNTYsIDE2LCAxNywgMTI3LCAyMzgsIDU2LCAKLSAgICAxNiwgMTcsIDI0MSwgMjQ0LCAxNiwgMTcsIDEyNywgMjQxLCAyNDQsIDE2LCAxNywgMjM4LCA1NywgMTYsIDE3LCAxMjcsIAotICAgIDIzOCwgNTcsIDE2LCAxNywgMjQxLCA3MiwgMTYsIDE3LCAxMjcsIDI0MSwgNzIsIDE2LCAxNywgMjM4LCA1NSwgMTYsIDE3LCAKLSAgICAxMjcsIDIzOCwgNTUsIDE2LCAxNywgMjUzLCAxNjAsIDE2LCAxNywgMjUzLCA5NiwgMTYsIDE3LCAyNDYsIDc0LCAxNiwgMTcsIAotICAgIDI1MywgMjgsIDE2LCAxNywgMjUyLCAxNTAsIDE2LCAxNywgMjUyLCAyNTEsIDE2LCAxNywgMjQ3LCAyMzQsIDE2LCAxNywgCi0gICAgMjM3LCA5MywgMjQ3LCAyMzQsIDE2LCAxNywgMTkxLCAxNiwgMTcsIDI0NywgMTE3LCAxNiwgMTcsIDI0OCwgMjA0LCAxNiwgCi0gICAgMTcsIDEyNywgMjQ4LCAyMDQsIDE2LCAxNywgMjQ4LCAyMDUsIDE2LCAxNywgMTI3LCAyNDgsIDIwNSwgMTYsIDE3LCAyNDIsIAotICAgIDM0LCAxNiwgMTcsIDEyNywgMjQyLCAzNCwgMTYsIDE3LCAyNDgsIDIwNiwgMTYsIDE3LCAxMjcsIDI0OCwgMjA2LCAxNiwgCi0gICAgMTcsIDI0MiwgMzUsIDE2LCAxNywgMTI3LCAyNDIsIDM1LCAxNiwgMTcsIDI0NywgMjM1LCAxNiwgMTcsIDEyNywgMjQ3LCAKLSAgICAyMzUsIDE2LCAxNywgMjQxLCA4OCwgMTYsIDE3LCAxMjcsIDI0MSwgODgsIDE2LCAxNywgMjM1LCAzOSwgMjQxLCA4OCwgMTYsIAotICAgIDE3LCAyNTQsIDE5MCwgMTYsIDE3LCAyMzAsIDIzMSwgMjU0LCAxOTAsIDE2LCAxNywgMTI3LCAyNTQsIDE5MCwgMTYsIDE3LCAKLSAgICAyMzcsIDg4LCAyNTMsIDI4LCAxNiwgMTcsIDI1MywgMzYsIDE2LCAxNywgMjM5LCAyMTIsIDI1MywgMzYsIDE2LCAxNywgCi0gICAgMTI3LCAyNTMsIDgwLCAxNiwgMTcsIDI0NSwgMTExLCAxNiwgMTcsIDI1MywgMzcsIDE2LCAxNywgMjUxLCAxODIsIDE2LCAKLSAgICAxNywgMjUyLCAyNDYsIDE2LCAxNywgMjQ4LCAxNDksIDE2LCAxNywgMTI3LCAyNTMsIDQ5LCAxNiwgMTcsIDIwOCwgMTYsIAotICAgIDE3LCAyNDcsIDEwMCwgMTYsIDE3LCAxMjcsIDI1MiwgMjAwLCAxNiwgMTcsIDI0MSwgMjI4LCAxNiwgMTcsIDEyNywgMjQxLCAKLSAgICAyMjgsIDE2LCAxNywgMTQ2LCAxNiwgMTcsIDEyNywgMTQ2LCAxNiwgMTcsIDEyNCwgMTQ2LCAxNiwgMTcsIDI1MywgMTQ3LCAKLSAgICAxNiwgMTcsIDI0MywgMTA1LCAxNiwgMTcsIDI1MywgODgsIDE2LCAxNywgMjQ5LCAyNDcsIDE2LCAxNywgMjUzLCAxNDgsIAotICAgIDE2LCAxNywgMjQ4LCAzOSwgMTYsIDE3LCAyNTIsIDIzNCwgMTYsIDE3LCAyNDcsIDEzOSwgMTYsIDE3LCAyNDEsIDEzNSwgCi0gICAgMTYsIDE3LCAxMjcsIDI0MSwgMTM1LCAxNiwgMTcsIDI1NCwgMTkxLCAxNiwgMTcsIDI0NiwgMjQ3LCAxNiwgMTcsIDIzNywgCi0gICAgMjA3LCAyNDYsIDI0NywgMTYsIDE3LCAyNDcsIDcsIDE2LCAxNywgMjM3LCAyMDcsIDI0NywgNywgMTYsIDE3LCAyNDEsIDc5LCAKLSAgICAxNiwgMTcsIDIzNywgMjA3LCAyNDEsIDc5LCAxNiwgMTcsIDI0NiwgMjI4LCAxNiwgMTcsIDI0MSwgODAsIDE2LCAxNywgCi0gICAgMjQ2LCAxNzMsIDE2LCAxNywgMjQxLCAxOCwgMTYsIDE3LCAyMzgsIDczLCAxNiwgMTcsIDEyNywgMjM4LCA3MywgMTYsIDE3LCAKLSAgICAyNTMsIDEzNSwgMTYsIDE3LCAyNDYsIDEzLCAxNiwgMTcsIDI0NiwgMTQsIDE2LCAxNywgMjQxLCA4MiwgMTYsIDE3LCAyNDAsIAotICAgIDE1MCwgMTYsIDE3LCAyNTIsIDMyLCAxNiwgMTcsIDI1MiwgMzksIDE2LCAxNywgMjUyLCA0MCwgMTYsIDE3LCAyNTIsIDQxLCAKLSAgICAxNiwgMTcsIDI1MiwgMzgsIDE2LCAxNywgMjM1LCA2NCwgMjUyLCAyNTIsIDE2LCAxNywgMjM1LCA2NCwgMjUzLCA0MSwgMTYsIAotICAgIDE3LCAyMzUsIDY0LCAyNTAsIDc1LCAxNiwgMTcsIDIzNSwgNjQsIDI1MywgMjEsIDE2LCAxNywgMjM1LCA2NCwgMjQ4LCA2NSwgCi0gICAgMTYsIDE3LCAyMzUsIDY0LCAxNTQsIDE2LCAxNywgMjM1LCA2NCwgMjQ3LCAxNCwgMTYsIDE3LCAyMzUsIDY0LCAyMTIsIDE2LCAKLSAgICAxNywgMjM2LCAxNzEsIDIxMiwgMTYsIDE3LCAyNTQsIDY2LCAxNiwgMTcsIDI0NSwgOTAsIDE2LCAxNywgMjUzLCAxMzEsIAotICAgIDE2LCAxNywgMjQ4LCAxNDEsIDE2LCAxNywgMjUzLCAxNTksIDE2LCAxNywgMjUxLCAxNDIsIDE2LCAxNywgMjUzLCAzNSwgCi0gICAgMTYsIDE3LCAyNDcsIDE5MiwgMTYsIDE3LCAyNTQsIDE5NiwgMTYsIDE3LCAyNDIsIDUsIDE2LCAxNywgMjQyLCA2LCAxNiwgCi0gICAgMTcsIDI0MiwgNywgMTYsIDE3LCAyNDIsIDQsIDE2LCAxNywgMTI3LCAyNTMsIDM2LCAxNiwgMTcsIDEyNywgMjUzLCAzNywgCi0gICAgMTYsIDE3LCAxMjcsIDI1MiwgMjQ2LCAxNiwgMTcsIDEyNywgMjA4LCAxNiwgMTcsIDIzOSwgMTM0LCAxNiwgMTcsIDI0NywgCi0gICAgMTgyLCAxNiwgMTcsIDI0NCwgMjE2LCAxNiwgMTcsIDI0NywgOTMsIDE2LCAxNywgMjQ0LCAyMTksIDE2LCAxNywgMjQ2LCAKLSAgICAxNjksIDE2LCAxNywgMjQ0LCAyMDIsIDE2LCAxNywgMjUzLCA2OSwgMTYsIDE3LCAyNTEsIDY3LCAxNiwgMTcsIDIzNywgODgsIAotICAgIDI0NiwgMTg2LCAxNiwgMTcsIDIzNywgODgsIDI0NywgNTEsIDE2LCAxNywgMjM3LCA4OCwgMjQ2LCAyNDUsIDE2LCAxNywgCi0gICAgMjM3LCA4OCwgMjQ2LCAxNjUsIDE2LCAxNywgMjMwLCAxNTAsIDI0NiwgMjQ3LCAxNiwgMTcsIDIzMCwgMTUwLCAyNDcsIDcsIAotICAgIDE2LCAxNywgMjMwLCAxNTAsIDI0NiwgMjI4LCAxNiwgMTcsIDIzMCwgMTUwLCAyNDYsIDE3MywgMTYsIDE3LCAyMzAsIDE1MCwgCi0gICAgMjUzLCAxMzUsIDE2LCAxNywgMjQ4LCA5MCwgMTYsIDE3LCAyNDQsIDk4LCAxNiwgMTcsIDI0OCwgOTEsIDE2LCAxNywgMjQ0LCAKLSAgICA5OSwgMTYsIDE3LCAyNDcsIDE3LCAxNiwgMTcsIDI0NCwgOTYsIDE2LCAxNywgMjU0LCA5MywgMTYsIDE3LCAyMzUsIDY1LCAKLSAgICAyNDYsIDI0NywgMTYsIDE3LCAyMzUsIDY1LCAyNDcsIDcsIDE2LCAxNywgMjM1LCA2NSwgMjQxLCA3OSwgMTYsIDE3LCAyMzUsIAotICAgIDY1LCAyNDYsIDIyOCwgMTYsIDE3LCAyMzUsIDY1LCAyNDEsIDgwLCAxNiwgMTcsIDIzNSwgNjUsIDI0NiwgMTczLCAxNiwgCi0gICAgMTcsIDIzNSwgNjUsIDI0MSwgMTgsIDE2LCAxNywgMjM1LCA2NSwgMjUzLCAxMzUsIDE2LCAxNywgMjM1LCAyNDMsIDI1NCwgCi0gICAgMTg1LCAxNiwgMTcsIDIzMSwgMjA0LCA3MiwgMTYsIDE3LCAyMzEsIDIwNCwgNzQsIDE2LCAxNywgMjMxLCAyMDQsIDczLCAKLSAgICAxNiwgMTcsIDIzMSwgMjA0LCA1NywgMTYsIDE3LCAyMzEsIDIwNCwgMjUyLCAyNTAsIDE2LCAxNywgMjMxLCAyMDQsIDI1MywgCi0gICAgMjcsIDE2LCAxNywgMjMxLCAyMDQsIDI1MywgMTAsIDE2LCAxNywgMjMxLCAyMDQsIDI1MiwgMjA4LCAxNiwgMTcsIDIzMSwgCi0gICAgMjA0LCAyNTIsIDI0NywgMTYsIDE3LCAyMzEsIDIwNCwgMjUyLCAyNDgsIDE2LCAxNywgMjMxLCAyMDQsIDI1MywgOCwgMTYsIAotICAgIDE3LCAyMzEsIDIwNCwgMjUyLCAyMDEsIDE2LCAxNywgMjMxLCAyMDQsIDI1MywgNiwgMTYsIDE3LCAyMzEsIDIwNCwgMjUzLCAKLSAgICA3LCAxNiwgMTcsIDIzMSwgMjA0LCAyNTMsIDMzLCAxNiwgMTcsIDIzMSwgMjA0LCAxNzcsIDE2LCAxNywgMjM3LCA4OCwgCi0gICAgMjUyLCAyNTIsIDE2LCAxNywgMjM3LCA4OCwgMjUzLCA0MSwgMTYsIDE3LCAyMzcsIDg4LCAyNTMsIDIxLCAxNiwgMTcsIAotICAgIDIzNywgODgsIDE1NCwgMTYsIDE3LCA2MCwgMjUwLCAyOSwgMTYsIDE3LCA2MCwgMjQ4LCA1MiwgMTYsIDE3LCA2MCwgMjQ3LCAKLSAgICAxMywgMTYsIDE3LCA2MCwgMjQzLCAxNDMsIDE2LCAxNywgNjAsIDI1MCwgMjgsIDE2LCAxNywgNjAsIDI0NiwgMjAyLCAxNiwgCi0gICAgMTcsIDYwLCAyNTMsIDMsIDE2LCAxNywgNjAsIDI1MiwgMjQ2LCAxNiwgMTcsIDYwLCAyNTMsIDM2LCAxNiwgMTcsIDYwLCAKLSAgICAyNDcsIDE5NywgMTYsIDE3LCA2MCwgMjUzLCAzNywgMTYsIDE3LCA2MCwgMjA4LCAxNiwgMTcsIDYwLCAyNTMsIDEwOSwgMTYsIAotICAgIDE3LCA2MCwgMjUzLCAxMCwgMTYsIDE3LCA2MCwgMjUyLCAyNTAsIDE2LCAxNywgNjAsIDI0NywgMjI2LCAxNiwgMTcsIDYwLCAKLSAgICAyNTMsIDI3LCAxNiwgMTcsIDYwLCAyNTIsIDIwOCwgMTYsIDE3LCA2MCwgMjUwLCAxMDEsIDE2LCAxNywgNjAsIDI1MCwgCi0gICAgMTAwLCAxNiwgMTcsIDYwLCAyNDcsIDE1MSwgMTYsIDE3LCA2MCwgMjQzLCAyNDEsIDE2LCAxNywgNjAsIDI1MCwgOTksIDE2LCAKLSAgICAxNywgNjAsIDI1MCwgOTgsIDE2LCAxNywgNjAsIDI0NywgMjEzLCAxNiwgMTcsIDYwLCAyNDYsIDIyOCwgMTYsIDE3LCA2MCwgCi0gICAgMjQ2LCAyNDcsIDE2LCAxNywgNjAsIDI0MCwgMjM4LCAxNiwgMTcsIDYwLCAyNDcsIDcsIDE2LCAxNywgNjAsIDI0NiwgMTczLCAKLSAgICAxNiwgMTcsIDYwLCAyNTIsIDMzLCAxNiwgMTcsIDYwLCAyNDcsIDIxNywgMTYsIDE3LCA2MCwgMjQ4LCAxODEsIDE2LCAxNywgCi0gICAgNjAsIDI0NiwgMTEsIDE2LCAxNywgNjAsIDI0OCwgMTgyLCAxNiwgMTcsIDYwLCAyNDYsIDE5MSwgMTYsIDE3LCA2MCwgMjUzLCAKLSAgICA4MiwgMTYsIDE3LCA2MCwgMjUzLCA1MCwgMTYsIDE3LCA2MCwgMjUzLCAwLCAxNiwgMTcsIDYwLCAyNDcsIDQ2LCAxNiwgMTcsIAotICAgIDYwLCAyNTIsIDIyMywgMTYsIDE3LCA2MCwgMjEzLCAxNiwgMTcsIDYwLCAyNTQsIDE4NywgMTYsIDE3LCA2MCwgMjUzLCA0MCwgCi0gICAgMTYsIDE3LCA2MCwgMjUzLCA3NiwgMTYsIDE3LCA2MCwgMjUzLCAxMDMsIDE2LCAxNywgNjAsIDI0NywgMTQ0LCAxNiwgMTcsIAotICAgIDYwLCAyNTMsIDM5LCAxNiwgMTcsIDYwLCAyNTIsIDIwNSwgMTYsIDE3LCA2MCwgMjUwLCAxNjQsIDE2LCAxNywgNjAsIDI0NywgCi0gICAgMTU4LCAxNiwgMTcsIDYwLCAyNDgsIDgyLCAxNiwgMTcsIDYwLCAyNDQsIDU1LCAxNiwgMTcsIDYwLCAyNDcsIDE1NywgMTYsIAotICAgIDE3LCA2MCwgMjQ2LCAxNzgsIDE2LCAxNywgNjAsIDI1MCwgMTc0LCAxNiwgMTcsIDYwLCAyNTAsIDE3MywgMTYsIDE3LCA2MCwgCi0gICAgMjUwLCAxNzEsIDE2LCAxNywgNjAsIDI0NCwgNjIsIDE2LCAxNywgNjAsIDI1MCwgMTcyLCAxNiwgMTcsIDYwLCAyNDcsIAotICAgIDE2MSwgMTYsIDE3LCA2MCwgMjUzLCAxODMsIDE2LCAxNywgNjAsIDI1MiwgMjI3LCAxNiwgMTcsIDYwLCAyNTMsIDgsIDE2LCAKLSAgICAxNywgNjAsIDI1MiwgMjQ3LCAxNiwgMTcsIDYwLCAyNDcsIDE4MSwgMTYsIDE3LCA2MCwgMjUyLCAyNDgsIDE2LCAxNywgNjAsIAotICAgIDI1MiwgMjAxLCAxNiwgMTcsIDYwLCAyNTIsIDIyOSwgMTYsIDE3LCA2MCwgMjUzLCAxNCwgMTYsIDE3LCA2MCwgMjUzLCAxMywgCi0gICAgMTYsIDE3LCA2MCwgMjQ3LCAxNzIsIDE2LCAxNywgNjAsIDI1MiwgMjM5LCAxNiwgMTcsIDYwLCAxOTgsIDE2LCAxNywgNjAsIAotICAgIDI1MiwgMjMzLCAxNiwgMTcsIDYwLCAyNTIsIDI1MSwgMTYsIDE3LCA2MCwgMjUzLCA5NiwgMTYsIDE3LCA2MCwgMjQ3LCA2MiwgCi0gICAgMTYsIDE3LCA2MCwgMjUzLCAyOCwgMTYsIDE3LCA2MCwgMTkxLCAxNiwgMTcsIDYwLCAyNTMsIDExOCwgMTYsIDE3LCAyMzcsIAotICAgIDg4LCAyNTMsIDExOCwgMTYsIDE3LCA2MCwgMjUzLCA5MCwgMTYsIDE3LCA2MCwgMjUzLCAxMTcsIDE2LCAxNywgNjAsIDI0NywgCi0gICAgMzgsIDE2LCAxNywgNjAsIDI1MywgMTA0LCAxNiwgMTcsIDIzNywgODgsIDI1MywgMTA0LCAxNiwgMTcsIDYwLCAyNTIsIAotICAgIDIxMywgMTYsIDE3LCA2MCwgMjQ4LCA3MywgMTYsIDE3LCA2MCwgMjQ4LCA3MiwgMTYsIDE3LCA2MCwgMjUwLCAxMzUsIDE2LCAKLSAgICAxNywgNjAsIDI0NCwgMjAsIDE2LCAxNywgNjAsIDI0OCwgNzEsIDE2LCAxNywgNjAsIDI0OCwgNzAsIDE2LCAxNywgNjAsIAotICAgIDI1MywgMjIsIDE2LCAxNywgNjAsIDI1MywgNDksIDE2LCAxNywgNjAsIDI1MywgODAsIDE2LCAxNywgNjAsIDI0NywgMTY4LCAKLSAgICAxNiwgMTcsIDYwLCAyNTMsIDQyLCAxNiwgMTcsIDYwLCAyNTIsIDIwMCwgMTYsIDE3LCA2MCwgMjQ5LCAyMDEsIDE2LCAxNywgCi0gICAgNjAsIDI0OSwgMjAwLCAxNiwgMTcsIDYwLCAyNDksIDE5OCwgMTYsIDE3LCA2MCwgMjQzLCA3NCwgMTYsIDE3LCA2MCwgMjQ5LCAKLSAgICAxOTksIDE2LCAxNywgNjAsIDI0OCwgMzAsIDE2LCAxNywgNjAsIDI1MCwgMjE5LCAxNiwgMTcsIDYwLCAyNDgsIDkxLCAxNiwgCi0gICAgMTcsIDYwLCAyNTAsIDIxOCwgMTYsIDE3LCA2MCwgMjQ0LCA5NywgMTYsIDE3LCA2MCwgMjQ4LCA5MCwgMTYsIDE3LCA2MCwgCi0gICAgMjQ3LCAxNywgMTYsIDE3LCA2MCwgMjQ2LCAxLCAxNiwgMTcsIDYwLCAyNDIsIDcsIDE2LCAxNywgNjAsIDI0MiwgNSwgMTYsIAotICAgIDE3LCA2MCwgMjQwLCA0NSwgMTYsIDE3LCA2MCwgMjQyLCA2LCAxNiwgMTcsIDYwLCAyNDIsIDQsIDE2LCAxNywgNjAsIDI0OCwgCi0gICAgMTc4LCAxNiwgMTcsIDYwLCAyNDgsIDE3NywgMTYsIDE3LCA2MCwgMjQ4LCAxNzUsIDE2LCAxNywgNjAsIDI0NiwgMCwgMTYsIAotICAgIDE3LCA2MCwgMjQ4LCAxNzYsIDE2LCAxNywgNjAsIDI0OCwgMTc0LCAxNiwgMTcsIDYwLCAyNTMsIDk3LCAxNiwgMTcsIDYwLCAKLSAgICAyNTMsIDY1LCAxNiwgMTcsIDYwLCAyNTMsIDQ2LCAxNiwgMTcsIDYwLCAyNDcsIDY0LCAxNiwgMTcsIDYwLCAyNTMsIDcyLCAKLSAgICAxNiwgMTcsIDYwLCAyNTIsIDIyNiwgMTYsIDE3LCA2MCwgMjU0LCAxOTMsIDE2LCAxNywgNjAsIDU5LCAyNTQsIDE5MywgMTYsIAotICAgIDE3LCA2MCwgMjQ5LCAyMjIsIDE2LCAxNywgNjAsIDI0OSwgMjIxLCAxNiwgMTcsIDYwLCAyNDYsIDI1NSwgMTYsIDE3LCA2MCwgCi0gICAgMjQzLCA5MCwgMTYsIDE3LCA2MCwgMjQ5LCAyMjAsIDE2LCAxNywgNjAsIDI0NiwgMjU0LCAxNiwgMTcsIDYwLCAyNTMsIDI2LCAKLSAgICAxNiwgMTcsIDYwLCAyNTMsIDI1LCAxNiwgMTcsIDYwLCAyNTMsIDUyLCAxNiwgMTcsIDYwLCAyNDcsIDUwLCAxNiwgMTcsIAotICAgIDYwLCAyNTMsIDI0LCAxNiwgMTcsIDYwLCAyNTIsIDIwNCwgMTYsIDE3LCA2MCwgMjQ2LCAyNDYsIDE2LCAxNywgNjAsIDI0NiwgCi0gICAgMjQ1LCAxNiwgMTcsIDYwLCAyNDYsIDE4NiwgMTYsIDE3LCA2MCwgMjQxLCA3MCwgMTYsIDE3LCA2MCwgMjQ3LCA1MSwgMTYsIAotICAgIDE3LCA2MCwgMjQ2LCAxNjUsIDE2LCAxNywgNjAsIDI1MywgMTYwLCAxNiwgMTcsIDYwLCAyNDcsIDIxNiwgMTYsIDE3LCA2MCwgCi0gICAgMjQ3LCAyMTUsIDE2LCAxNywgNjAsIDI0NiwgMjQ4LCAxNiwgMTcsIDYwLCAyNDIsIDksIDE2LCAxNywgNjAsIDI0NywgNTgsIAotICAgIDE2LCAxNywgNjAsIDI0NiwgMjE2LCAxNiwgMTcsIDYwLCAyNDcsIDEyNCwgMTYsIDE3LCA2MCwgMjQ3LCAyOSwgMTYsIDE3LCAKLSAgICA2MCwgMjQ2LCAyMTcsIDE2LCAxNywgNjAsIDI0MCwgMjQ2LCAxNiwgMTcsIDYwLCAyNDYsIDIwMCwgMTYsIDE3LCA2MCwgCi0gICAgMjQ2LCAxNzYsIDE2LCAxNywgNjAsIDI0NiwgMTksIDE2LCAxNywgNjAsIDI0NiwgMTgsIDE2LCAxNywgNjAsIDI0NiwgMTYsIAotICAgIDE2LCAxNywgNjAsIDI0MCwgNTEsIDE2LCAxNywgNjAsIDI0NiwgMTcsIDE2LCAxNywgNjAsIDI0NiwgMTUsIDE2LCAxNywgCi0gICAgMjUzLCAyMTIsIDUzLCAxNiwgMTcsIDI0NiwgMTYyLCAyNDAsIDEyMSwgMTYsIDE3LCAyNDgsIDE0MCwgMTYsIDE3LCAyNDQsIAotICAgIDIwMywgMTYsIDE3LCAyNDQsIDI0OCwgMTYsIDE3LCAyMzksIDE1MywgMTYsIDE3LCAyNDQsIDI0OSwgMTYsIDE3LCAyMzksIAotICAgIDE1NCwgMTYsIDE3LCAyNDQsIDI0NywgMTYsIDE3LCAyMzksIDE1MiwgMjQwLCAxMzUsIDI0NSwgMTkzLCA3NiwgMjQwLCAKLSAgICAxMzUsIDEsIDIzOCwgMTIwLCAyNDAsIDEzNSwgMSwgMjQ0LCAxMDgsIDI0MCwgMTM1LCAxLCAyMzgsIDIxMywgMjQwLCAxMzUsIAotICAgIDEsIDI0NSwgMTQ4LCAyNDAsIDEzNSwgMSwgMjQ0LCAyMjksIDI0MCwgMTM1LCAxLCAyNDYsIDI5LCAyNDAsIDEzNSwgMSwgCi0gICAgMjQzLCAyNiwgMjQwLCAxMzUsIDEsIDI0MCwgNDMsIDI0MCwgMTM1LCAxLCAyNDMsIDE4LCAyNDAsIDEzNSwgMSwgMjM4LCAKLSAgICAxNDMsIDI0MCwgMTM1LCAxLCAyNDQsIDE1NCwgMjQwLCAxMzUsIDEsIDI0MywgMTU0LCAyNDAsIDEzNSwgMSwgMjM0LCAxNjksIAotICAgIDI0MCwgMTM1LCAxLCAyMzYsIDI0MiwgMjQwLCAxMzUsIDEsIDI0NSwgMTM4LCAyNDAsIDEzNSwgMSwgMjQyLCA0NywgMjQwLCAKLSAgICAxMzUsIDEsIDI0OCwgMTI0LCAyNDAsIDEzNSwgMSwgMjUzLCAxNjEsIDI0MCwgMTM1LCAxLCAyMzQsIDg5LCAyNDAsIDEzNSwgCi0gICAgMSwgMjM0LCAxMzEsIDI0MCwgMTM1LCAxLCAyMzQsIDg4LCAyNDAsIDEzNSwgMSwgMjUzLCA4MSwgMjQwLCAxMzUsIDEsIAotICAgIDIzMywgNTcsIDI0MCwgMTM1LCAxLCAyNDQsIDQsIDI0MCwgMTM1LCAxLCAyMjksIDE2LCAyNDAsIDEzNSwgMSwgMjM5LCAKLSAgICAxODgsIDI0MCwgMTM1LCAyMzUsIDE3MSwgNzYsIDI0MCwgMTM1LCAyMDAsIDIzNSwgMTcxLCA3NiwgMTQwLCAxLCAyNDksIAotICAgIDI0MiwgMjQ5LCAyNDQsIDI1NSwgMjYsIDI1NCwgMTkxLCAxNDAsIDEsIDE5NiwgMTQwLCAxLCAyNTIsIDY0LCAyNTQsIDI0NCwgCi0gICAgNjYsIDE0MCwgMSwgMjU0LCAyMCwgMTQwLCAxLCAyNTQsIDE5MCwgMTQwLCAxLCAyNTQsIDE5NSwgMTQwLCAxLCAyMzQsIAotICAgIDI0NywgMjQ1LCAyNDcsIDIzNywgMjE5LCAxNDAsIDEsIDI0NiwgMjQyLCAxNDAsIDEsIDI0MiwgNTksIDU3LCAxNDAsIDEsIAotICAgIDI1NSwgNDIsIDczLCAxNDAsIDEsIDI1NSwgMCwgNTcsIDE0MCwgMSwgMjQyLCA0MywgMTQwLCAxLCAyMjcsIDcwLCA3MywgCi0gICAgMTQwLCAxLCAyMjcsIDE3NSwgNzMsIDE0MCwgMSwgNzMsIDE0MCwgMSwgMjUzLCAxNSwgMTQwLCAxLCAyNTMsIDEwNiwgMTQwLCAKLSAgICAxLCAyNDUsIDExMiwgMjUzLCAxOTEsIDI1MSwgMTc3LCAxNDYsIDE0MCwgMSwgMjM5LCA1OCwgMTQwLCAxLCAyNDksIDE1MiwgCi0gICAgMTQwLCAxLCAyNTAsIDE1NywgMjU0LCAxODYsIDE0MCwgMSwgMjE0LCAxNDAsIDEsIDI0NywgMCwgMTQwLCAxLCAyNTAsIDIyLCAKLSAgICAyNTAsIDU1LCAyMTQsIDE0MCwgMSwgMjQ2LCAxOTcsIDE0MCwgMSwgMjQ2LCA2MCwgMjUyLCAxMDksIDI1NCwgMTk1LCAxNDAsIAotICAgIDEsIDIzOSwgMywgMjEyLCAxNDAsIDEsIDI0MywgMTY3LCAyMTIsIDE0MCwgMSwgMjIyLCAyNDcsIDIxMiwgMTQwLCAxLCAKLSAgICAyMjMsIDUzLCAyMTIsIDE0MCwgMSwgMjM5LCAxMjYsIDI1NCwgMTIwLCAyNTEsIDQyLCAxOTksIDE0MCwgMSwgMjI3LCA3NywgCi0gICAgMTk5LCAxNDAsIDEsIDIzMiwgMTcyLCAxNDAsIDEsIDI1MCwgMTIzLCAyNTUsIDgsIDI1NCwgNzIsIDc0LCAxNDAsIDEsIDcyLCAKLSAgICAxNDAsIDEsIDI0NCwgMTYsIDI1NCwgMTkyLCAxNDAsIDEsIDI1MCwgMjQsIDE0MCwgMSwgMjI3LCAxNzAsIDI1MywgNCwgCi0gICAgMTQwLCAxLCAyMjgsIDE2MCwgNTcsIDE0MCwgMSwgMjUwLCAxMjQsIDI0OSwgMjMwLCAxNDAsIDEsIDIzOSwgMTkyLCAyMzksIAotICAgIDE5MCwgMjU0LCAxODcsIDE0MCwgMSwgMjQyLCA1MywgMjM4LCAyMDQsIDE0MCwgMSwgMjQwLCAxMCwgMTkzLCAxNDAsIDEsIAotICAgIDI0NSwgMTg0LCAyMjcsIDcxLCAxOTMsIDE0MCwgMSwgMjI3LCAxNzYsIDE5MywgMTQwLCAxLCAyNTQsIDE5NCwgMTQwLCAxLCAKLSAgICAyNTQsIDE5MywgMTQwLCAxLCAyNDUsIDI1NSwgMjUzLCAxMzYsIDI1NCwgMTYyLCAyNTQsIDE4MywgMTQwLCAxLCAyMjcsIAotICAgIDE3NywgMjU0LCAxODMsIDE0MCwgMSwgMjIyLCAyMjIsIDE0MCwgMSwgMjM0LCAxOSwgMjQyLCAyMDEsIDIzNiwgMTMsIDI1NCwgCi0gICAgMTg1LCAxNDAsIDEsIDIyMiwgMjUwLCAyNTQsIDE4NSwgMTQwLCAxLCAyMzIsIDE3MywgMTQwLCAxLCAyMzYsIDE3NSwgMTQwLCAKLSAgICAxLCAyNDMsIDk1LCAyNTUsIDI0LCA3MiwgMTQwLCAxLCAyMzksIDk2LCAyNTMsIDI0NSwgMTg1LCAxNDAsIDEsIDIyNSwgOTYsIAotICAgIDE4NSwgMTQwLCAxLCAyMjcsIDc2LCAxODUsIDE0MCwgMSwgMjM5LCA4MiwgMjUwLCAyMDUsIDI1MCwgMjI5LCAxNDksIDE0MCwgCi0gICAgMSwgMjMyLCAxNzEsIDE0MCwgMSwgMjM2LCAxMTEsIDE0MCwgMSwgMjUwLCAxMTgsIDE0MCwgMSwgMjQzLCAyNCwgMjQ5LCAKLSAgICAxNzUsIDIyMiwgMjIyLCAxNDAsIDEsIDIzNiwgMTc5LCAyNDMsIDEwMSwgNzMsIDE0MCwgMSwgMjQ3LCAxMzUsIDE0MCwgMSwgCi0gICAgMjUwLCAxMjEsIDE0MCwgMSwgMjM0LCA0MywgMTQwLCAxLCAyNDIsIDIzMCwgMTQwLCAxLCAyMzgsIDE0MSwgMTQwLCAxLCAKLSAgICAyNDUsIDIxNywgMTQwLCAxLCAyMjcsIDcyLCAxNDAsIDEsIDIyNywgMTc4LCAxNDAsIDEsIDIyNywgMjQ0LCAxNDAsIDEsIAotICAgIDI1NCwgMTk2LCAxNDAsIDEsIDI1NCwgMTg0LCAxNDAsIDIzNywgNjIsIDIyOCwgMTgyLCAxNDAsIDIzMywgMjE5LCAyMjgsIAotICAgIDE4MiwgMTQwLCAyNDAsIDIyMSwgMjI4LCAxODIsIDE0MCwgMjM4LCAxMDQsIDk4LCAxNDAsIDIzNCwgMjU0LCA5OCwgMTQwLCAKLSAgICAyMzQsIDE4LCA5OCwgMjM1LCAzNCwgMSwgNTcsIDIzNSwgMzQsIDEsIDc0LCAyMzUsIDM0LCAxLCA2NiwgMjM1LCAzNCwgMSwgCi0gICAgMTc3LCAyMzUsIDM0LCAxLCAyNTIsIDIwNSwgMjM1LCAzNCwgMSwgMjQ2LCAxNjksIDIzNSwgMzQsIDEsIDI1MiwgMjAyLCAKLSAgICAyMzUsIDM0LCAxLCAyNTIsIDIwMywgMjM1LCAzNCwgMSwgMjUyLCAyMDEsIDIzNSwgMzQsIDEsIDIxMywgMjM1LCAzNCwgMSwgCi0gICAgMjUyLCAyMTEsIDIzNSwgMzQsIDEsIDE5OCwgMjM1LCAzNCwgMSwgMTkxLCAyMzUsIDM0LCAxLCAyNTIsIDIwMCwgMjM1LCAKLSAgICAzNCwgMSwgMjUyLCAyMDgsIDIzNSwgMzQsIDEsIDI1MiwgMjA0LCAyMzUsIDM0LCAxLCAxNTQsIDIzNSwgMzQsIDMxLCA1LCAKLSAgICA3NCwgMjM1LCAzNCwgMzEsIDUsIDY2LCAyMzUsIDM0LCA1LCAyMzUsIDQzLCAyMzUsIDMyLCAxLCA1NywgMjM1LCAzMiwgMSwgCi0gICAgNzQsIDIzNSwgMzIsIDEsIDY2LCAyMzUsIDMyLCAxLCAxNzcsIDIzNSwgMzIsIDEsIDI1MiwgMjA1LCAyMzUsIDMyLCAxLCAKLSAgICAyNDYsIDE2OSwgMjM1LCAzMiwgMSwgMjUyLCAyMDIsIDIzNSwgMzIsIDEsIDI1MiwgMjAzLCAyMzUsIDMyLCAxLCAyNTIsIAotICAgIDIwMSwgMjM1LCAzMiwgMSwgMjEzLCAyMzUsIDMyLCAxLCAyNTIsIDIxMSwgMjM1LCAzMiwgMSwgMTk4LCAyMzUsIDMyLCAxLCAKLSAgICAxOTEsIDIzNSwgMzIsIDEsIDIwOCwgMjM1LCAzMiwgMSwgMjUyLCAyMDAsIDIzNSwgMzIsIDEsIDI1MiwgMjA4LCAyMzUsIAotICAgIDMyLCAxLCAyNTIsIDIwNCwgMjM1LCAzMiwgMSwgMTU0LCAyMzUsIDMyLCAzMSwgNSwgNzQsIDIzNSwgMzIsIDMxLCA1LCA2NiwgCi0gICAgMjM1LCAzMiwgNSwgMjMyLCAyNDAsIDIzMCwgMTk0LCAyMzcsIDYyLCAyMjgsIDE4MiwgMjMwLCAxOTQsIDQ3LCAyMjgsIAotICAgIDE4MiwgMjQwLCAxNDUsIDEsIDU3LCAyNDAsIDE0NSwgMSwgNzQsIDI0MCwgMTQ1LCAxLCA2NiwgMjQwLCAxNDUsIDEsIDE3NywgCi0gICAgMjQwLCAxNDUsIDEsIDI1MiwgMjA1LCAyNDAsIDE0NSwgMSwgMjQ2LCAxNjksIDI0MCwgMTQ1LCAxLCAyNTIsIDIwMiwgMjQwLCAKLSAgICAxNDUsIDEsIDI1MiwgMjAzLCAyNDAsIDE0NSwgMSwgMjUyLCAyMDEsIDI0MCwgMTQ1LCAxLCAyMTMsIDI0MCwgMTQ1LCAxLCAKLSAgICAyNTIsIDIxMSwgMjQwLCAxNDUsIDEsIDE5OCwgMjQwLCAxNDUsIDEsIDE5MSwgMjQwLCAxNDUsIDEsIDIwOCwgMjQwLCAxNDUsIAotICAgIDEsIDI1MiwgMjAwLCAyNDAsIDE0NSwgMSwgMjUyLCAyMDgsIDI0MCwgMTQ1LCAxLCAyNTIsIDIwNCwgMjQwLCAxNDUsIDEsIAotICAgIDE1NCwgMjQwLCAxNDUsIDMxLCA1LCA3NCwgMjQwLCAxNDUsIDMxLCA1LCA2NiwgMjMzLCA4NiwgMSwgNTcsIDIzMywgODYsIAotICAgIDEsIDc0LCAyMzMsIDg2LCAxLCA2NiwgMjMzLCA4NiwgMSwgMTc3LCAyMzMsIDg2LCAxLCAyNTIsIDIwNSwgMjMzLCA4NiwgMSwgCi0gICAgMjQ2LCAxNjksIDIzMywgODYsIDEsIDI1MiwgMjAyLCAyMzMsIDg2LCAxLCAyNTIsIDIwMywgMjMzLCA4NiwgMSwgMjUyLCAKLSAgICAyMDEsIDIzMywgODYsIDEsIDIxMywgMjMzLCA4NiwgMSwgMjUyLCAyMTEsIDIzMywgODYsIDEsIDE5OCwgMjMzLCA4NiwgMSwgCi0gICAgMTkxLCAyMzMsIDg2LCAxLCAyNTIsIDIwMCwgMjMzLCA4NiwgMSwgMjUyLCAyMDgsIDIzMywgODYsIDEsIDI1MiwgMjA0LCAKLSAgICAyMzMsIDg2LCAzMSwgNSwgNzQsIDIzMywgODYsIDMxLCA1LCA2NiwgNzEsIDEsIDE3NywgNzEsIDEsIDI0NiwgMTc4LCA3MSwgCi0gICAgMSwgMjUzLCAzMywgNzEsIDEsIDI0NywgMTU4LCA3MSwgMSwgMjQ3LCA5MywgNzEsIDEsIDI1MiwgMjE1LCA3MSwgMSwgMjQ2LCAKLSAgICAxNzYsIDcxLCAxLCAyNTMsIDY2LCA3MSwgMSwgMjQ3LCAyOSwgNzEsIDEsIDI0NywgMTksIDcxLCAxLCAyNTIsIDIwMywgNzEsIAotICAgIDEsIDI0MCwgMTUwLCA3MSwgMSwgMjUzLCA1NywgNzEsIDEsIDI0MSwgODIsIDcxLCAxLCAyNTEsIDY4LCA3MSwgMSwgMjUyLCAKLSAgICAyMDIsIDcxLCAxLCAyNDYsIDE3MywgNzEsIDEsIDk2LCA3MSwgMSwgMjQ2LCAyMjgsIDcxLCAxLCAyNTMsIDgsIDcxLCAxLCAKLSAgICAyNTIsIDIxMSwgNzEsIDEsIDI0NiwgMTgyLCA3MSwgMSwgMjUzLCA1MCwgNzEsIDEsIDI0NywgOTksIDcxLCAxLCAyNTMsIAotICAgIDE0LCA3MSwgMSwgMjUyLCAyNTEsIDcxLCAxLCAyNTIsIDI0NiwgNzEsIDEsIDI1MywgNDksIDcxLCAxLCAyNTMsIDEwOCwgCi0gICAgNzEsIDEsIDI0NiwgMTY1LCA3MSwgMSwgMjQ3LCAyMDMsIDcxLCAxLCAyNTIsIDIwNCwgNzEsIDEsIDE1NCwgNzEsIDEsIAotICAgIDI1MiwgMjAwLCA3MSwgMSwgMjUzLCAzNSwgNzEsIDIyOSwgMTY2LCAzMSwgMjUxLCAxMjksIDcxLCAyMjksIDE2NiwgMzEsIAotICAgIDI0NywgMTkyLCA3MSwgMjI5LCAxNjYsIDMxLCAyNTMsIDEzMSwgNzEsIDIyOSwgMTY2LCAzMSwgMjQ4LCAxNDEsIDcxLCAKLSAgICAyMjksIDE2NiwgMzEsIDI1MywgMTMyLCA3MSwgMjI5LCAxNjYsIDMxLCAyNTEsIDE0OCwgNzEsIDIyOSwgMTY2LCAzMSwgCi0gICAgMjQ4LCAxNDUsIDcxLCAyMjksIDE2NiwgMzEsIDI0NSwgMTA1LCA3MSwgMjI5LCAxNjYsIDMxLCAyNTQsIDYsIDcxLCAyMjksIAotICAgIDE2NiwgMzEsIDI1MSwgMjA3LCA3MSwgMjI5LCAxNjYsIDMxLCAyNTMsIDE4NiwgNzEsIDIyOSwgMTY2LCAzMSwgMjUwLCAKLSAgICAyNDQsIDcxLCAyMjksIDE2NiwgMzEsIDI1MywgMTkwLCA3MSwgMjI5LCAxNjYsIDMxLCAyNDgsIDE0MCwgNzEsIDIyOSwgCi0gICAgMTY2LCAzMSwgMjU0LCAzLCAyNDcsIDIxOSwgMTE4LCA3MSwgMjI5LCAxNjYsIDMxLCAyNTQsIDMsIDI0NywgMjE5LCAxMTMsIAotICAgIDcxLCAyMjksIDE2NiwgMzEsIDI1MSwgMTMwLCA3MSwgMzEsIDIzMywgMjA4LCAyNTQsIDI4LCA3MSwgMzEsIDIzMywgMjA4LCAKLSAgICAyNTIsIDIxMiwgNzEsIDMxLCA1LCAyNTIsIDIxMiwgNzEsIDMxLCA1LCA3NCwgNzEsIDMxLCA1LCAyNTIsIDIxNiwgNzEsIAotICAgIDMxLCA1LCAyNTQsIDE5MCwgNzEsIDMxLCA1LCAyNTMsIDIwMywgNzEsIDMxLCA1LCA2NiwgNzEsIDMxLCA1LCAyNTIsIDIyNCwgCi0gICAgNzEsIDMxLCA1LCAyNTMsIDE5NywgNzEsIDMxLCA1LCAyNTMsIDE1LCA3MSwgMzEsIDUsIDE5MSwgNzEsIDMxLCA1LCAyNTMsIAotICAgIDc3LCA3MSwgMzEsIDUsIDcyLCA3MSwgMzEsIDUsIDI1MywgNCwgNzEsIDMxLCA1LCAyNTIsIDIyMSwgNzEsIDMxLCA1LCAKLSAgICAyNTIsIDIyMCwgNzEsIDMxLCA1LCAyNTIsIDIyMiwgNzEsIDUsIDIzNCwgMTcwLCA3MSwgNSwgMjM0LCAyMDQsIDcxLCA1LCAKLSAgICAyMjcsIDE4MiwgNzEsIDUsIDIyOSwgMzgsIDcxLCA1LCAyMzQsIDI1MSwgNzEsIDUsIDIzNiwgNywgNzEsIDUsIDIzOSwgCi0gICAgMjI2LCA3MSwgNSwgMjI5LCAxNTUsIDcxLCA1LCAyMzQsIDEzNSwgNzEsIDUsIDIzOCwgOTEsIDcxLCA1LCAyMzksIDIzNiwgCi0gICAgMjM2LCAyMDcsIDcxLCA1LCAyMzcsIDI0LCA3MSwgNSwgMjM4LCAxNTcsIDcxLCA1LCAyMjksIDIzNSwgNzEsIDUsIDI0NCwgCi0gICAgNTQsIDcxLCA1LCAyMjksIDIzNCwgNzEsIDUsIDIzOCwgMTM2LCAyNTMsIDE4OSwgMjQ0LCA3NCwgNzEsIDUsIDI1MywgNjAsIAotICAgIDI0NywgMTA5LCA3MSwgNSwgMjM2LCAxMSwgNzEsIDUsIDIzOSwgMTk1LCAyNDQsIDE1MywgNzEsIDUsIDIzNCwgMTQxLCA3MSwgCi0gICAgMjMzLCAxMTIsIDE0LCAyNDUsIDExNiwgNzEsIDUsIDIyNywgMTU2LCA3MSwgNSwgMjMyLCA4MiwgNzEsIDIxLCAyNDAsIAotICAgIDEyNiwgNzEsIDIxLCAxMTgsIDcxLCAyMSwgMTEzLCA3MSwgMjEsIDE2NiwgNzEsIDIxLCAxNTgsIDcxLCAyMSwgMTczLCA3MSwgCi0gICAgMjEsIDE4MywgNzEsIDIxLCAxOTQsIDcxLCAyMSwgMTg3LCA3MSwgMjEsIDE5MiwgNzEsIDE0LCAyNTMsIDYwLCAyNDAsIAotICAgIDE4MywgMjUxLCAyMzEsIDcxLCAxNCwgMjUzLCA2MCwgMjQwLCAxODMsIDI0NCwgMTU5LCA3MSwgMTQsIDI1MywgNjAsIDI0MCwgCi0gICAgMTgzLCAyNDgsIDEzMiwgNzEsIDE0LCAyNTMsIDYwLCAyNDAsIDE4MywgMjQ5LCAxMDgsIDcxLCAxNCwgMjUzLCA2MCwgMjQwLCAKLSAgICAxODMsIDI0MiwgMjIwLCA3MSwgMTQsIDI1MywgNjAsIDI0MCwgMTgzLCAyNDUsIDgxLCA3MSwgMTQsIDI1MywgNjAsIDI0MCwgCi0gICAgMTgzLCAyMzEsIDEyNSwgNzEsIDE0LCAyNTMsIDYwLCAyNDAsIDE4MywgMjMyLCAyNTUsIDcxLCAxNCwgMjUzLCA2MCwgMjQwLCAKLSAgICAxODMsIDIzMiwgMjU0LCA3MSwgMTQsIDI1MywgNjAsIDI0MCwgMTgzLCAyMzEsIDEyNCwgNjgsIDIzOCwgMTIzLCA2OCwgCi0gICAgMjMxLCAyMTgsIDY4LCAyMzcsIDY3LCA2OCwgMjQ2LCAxNjIsIDI0MCwgMTIxLCA2OCwgMjM3LCA2NiwgNjgsIDI0NiwgMTYwLCAKLSAgICAyNDAsIDE2OSwgNjgsIDI0NiwgMTc1LCAyNDYsIDIyNywgMjM1LCA2OSwgNjgsIDI0NiwgMTg1LCA0LCAyMzQsIDIxLCAyMzUsIAotICAgIDcwLCA2OCwgMjM3LCA2NCwgMjM3LCA2NywgNjgsIDIzNywgNjQsIDI0NiwgMTYyLCAyNDAsIDEyMSwgNjgsIDIzNiwgMTY3LCAKLSAgICA2OCwgMjQ3LCAxNDIsIDM4LCAyMzMsIDE3OSwgMTE4LCA2OCwgMjQ3LCAxNDIsIDM4LCAyMzMsIDE3OSwgMTEzLCA2OCwgCi0gICAgMjQ3LCAxNDIsIDM4LCAyMzMsIDE3OSwgMTY2LCA2OCwgMzEsIDIzMCwgMTMxLCA2OCwgMjEsIDI0MCwgMTI2LCA2OCwgMjEsIAotICAgIDExOCwgNjgsIDIxLCAxMTMsIDY4LCAyMSwgMTY2LCA2OCwgMjEsIDE1OCwgNjgsIDIxLCAxNzMsIDY4LCAyMSwgMTgzLCA2OCwgCi0gICAgMjEsIDE5NCwgNjgsIDIxLCAxODcsIDY4LCAyMSwgMTkyLCA2OCwgMSwgNTcsIDY4LCAxLCA3MiwgNjgsIDEsIDc0LCA2OCwgCi0gICAgMSwgNzMsIDY4LCAxLCA2NiwgNjgsIDEsIDI1MywgMTUsIDY4LCAxLCAyNTMsIDcxLCA2OCwgMSwgMjUyLCAyMzEsIDY4LCAxLCAKLSAgICAyNTIsIDIwMSwgNjgsIDEsIDI0NywgOSwgNjgsIDEsIDI1MiwgMjExLCA2OCwgMSwgMjEzLCA2OCwgMSwgMjUzLCAzNSwgNjgsIAotICAgIDEsIDI1MiwgMjA1LCA2OCwgMSwgMTk4LCA2OCwgMSwgMjUyLCAyMDAsIDY4LCAxLCAyNTIsIDIwNCwgNjgsIDEsIDI0NiwgCi0gICAgMTY1LCA2OCwgMSwgMjUyLCAyMDIsIDY4LCAxLCAyNTIsIDIwMywgNjgsIDEsIDI0NiwgMTc2LCA2OCwgMSwgMjUyLCAyMTMsIAotICAgIDY4LCAxLCAxOTEsIDY4LCAxLCAyMDgsIDY4LCAxLCAyNTIsIDIwOCwgNjgsIDEsIDI1MiwgMjM0LCA2OCwgMSwgMTc3LCA2OCwgCi0gICAgMSwgMjQ2LCAxNzgsIDY4LCAxLCAyNDYsIDIxNiwgNjgsIDEsIDI1MiwgMjI2LCA2OCwgMSwgMjQ3LCAxNCwgNjgsIDEsIAotICAgIDI1MiwgMTg3LCA2OCwgMSwgMjQ3LCAxNywgNjgsIDEsIDI0NywgMjM4LCA2OCwgMSwgMjQ2LCAyMDAsIDY4LCAxLCAyNDYsIAotICAgIDE3NSwgMTgyLCAzMSwgNTMsIDY4LCAxLCAyNDYsIDE3NSwgNzIsIDY4LCAxLCAyNDYsIDE3NSwgNzQsIDY4LCAxLCAyNDYsIAotICAgIDE3NSwgNzMsIDY4LCAxLCAyNDYsIDE3NSwgNjYsIDY4LCAxLCAyNDYsIDE3NSwgMjUzLCAxNSwgNjgsIDEsIDI0NiwgMTc1LCAKLSAgICAyNTMsIDcxLCA2OCwgMSwgMjQ2LCAxNzUsIDI0NywgOSwgNjgsIDEsIDI0NiwgMTc1LCAyNTIsIDIxMSwgNjgsIDEsIDI0NiwgCi0gICAgMTc1LCAyMTMsIDY4LCAxLCAyNDYsIDE3NSwgMjUzLCAzNSwgNjgsIDEsIDI0NiwgMTc1LCAyNTIsIDIwNSwgNjgsIDEsIAotICAgIDI0NiwgMTc1LCAxOTgsIDY4LCAxLCAyNDYsIDE3NSwgMjUyLCAyMDIsIDY4LCAxLCAyNDYsIDE3NSwgMjUyLCAyMDMsIDY4LCAKLSAgICAxLCAyNDYsIDE3NSwgMjQ2LCAxNzYsIDY4LCAxLCAyNDYsIDE3NSwgMjUyLCAyMTMsIDY4LCAxLCAyNDYsIDE3NSwgMjQ2LCAKLSAgICAyMTYsIDY4LCAxLCAyNDYsIDE3NSwgMTkxLCA2OCwgMSwgMjQ2LCAxNzUsIDI1MiwgMjA4LCA2OCwgMSwgMjQ2LCAxNzUsIAotICAgIDE3NywgNjgsIDEsIDI0NiwgMTc1LCAyNDcsIDE0MywgNjgsIDEsIDI0NiwgMTc1LCAyNDcsIDE0LCA2OCwgMSwgMjQ2LCAKLSAgICAxNzUsIDI1MCwgMTMwLCA2OCwgMSwgMjQ2LCAxNzUsIDI1MSwgNTksIDY4LCAxLCAyNDYsIDE3NSwgMjQ2LCAyNTQsIDY4LCAKLSAgICAxLCAyNDYsIDE4NSwgNzIsIDY4LCAxLCAyNDYsIDE4NSwgNzQsIDY4LCAxLCAyNDYsIDE4NSwgMjUzLCAyMzQsIDY4LCAxLCAKLSAgICAyNDYsIDE4NSwgMjUzLCA3MSwgNjgsIDEsIDI0NiwgMTg1LCA2NiwgNjgsIDEsIDI0NiwgMTg1LCAyNDcsIDksIDY4LCAxLCAKLSAgICAyNDYsIDE4NSwgMTc3LCA2OCwgMSwgMjQ2LCAxODUsIDI1MiwgMjA1LCA2OCwgMSwgMjQ2LCAxODUsIDE1NCwgNjgsIDEsIAotICAgIDI0NiwgMTg1LCAyMTMsIDY4LCAxLCAyNDYsIDE4NSwgMjQ2LCAxNjUsIDY4LCAxLCAyNDYsIDE4NSwgMjUyLCAyMDIsIDY4LCAKLSAgICAxLCAyNDYsIDE4NSwgMjUyLCAyMDMsIDY4LCAxLCAyNDYsIDE4NSwgMjUyLCAyMTMsIDY4LCAxLCAyNDYsIDE4NSwgMjUyLCAKLSAgICAyMzQsIDY4LCAxLCAyNDYsIDE4NSwgMjQ3LCAxNDMsIDY4LCAxLCAyNDYsIDE4NSwgMjQ3LCAxNCwgNjgsIDEsIDI0NiwgCi0gICAgMTg1LCAyNDYsIDIxNiwgNjgsIDEsIDI0NiwgMTg1LCAyNTIsIDIyNiwgNjgsIDEsIDI0NiwgMTg1LCAyNDcsIDEwMCwgNjgsIAotICAgIDEsIDI0NiwgMTg1LCAyNDYsIDE3NiwgNjgsIDEsIDI0NiwgMTg1LCAyNDYsIDIyMywgNjgsIDEsIDIzNywgNjQsIDc0LCA2OCwgCi0gICAgMSwgMjM3LCA2NCwgMTc3LCA2OCwgMSwgMjM3LCA2NCwgMjA4LCA2OCwgMSwgMjM3LCA2NCwgMjUyLCAyMzQsIDY4LCAxLCAKLSAgICAyMzcsIDY0LCAyNDYsIDIyMywgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjM0LCA0LCAxMTgsIDY4LCAxLCAyNTIsIAotICAgIDIwOSwgMjQ2LCAxNjEsIDIzNywgMjUsIDExOCwgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjM2LCA0MSwgNjgsIDEsIAotICAgIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjMzLCAyNDgsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDIzMywgNzAsIDIzMywgCi0gICAgMjQ4LCA2OCwgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyMzUsIDE0OCwgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMTUyLCAKLSAgICAyMzUsIDE0OCwgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgNTcsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDc0LCAKLSAgICA2OCwgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAxNzcsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMTY5LCA2OCwgCi0gICAgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNTIsIDIxNSwgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjQ2LCAxOTEsIDY4LCAKLSAgICAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0MCwgMTUwLCA2OCwgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNDYsIDE5MiwgNjgsIAotICAgIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjQ2LCAyMDMsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI1MiwgMjAyLCA2OCwgCi0gICAgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNTIsIDIwMywgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjEzLCA2OCwgMSwgCi0gICAgMjUyLCAyMDksIDI0NiwgMTYxLCAyNDYsIDE4MiwgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjQ2LCAxOTAsIDY4LCAxLCAKLSAgICAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMjIzLCA2OCwgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNTIsIDIyNiwgNjgsIDEsIAotICAgIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjUzLCAxMTEsIDY4LCAxLCAyNDYsIDE3NSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNTIsIAotICAgIDIwMiwgNjgsIDEsIDI0NiwgMTc1LCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMjIzLCA2OCwgMSwgMjM3LCA2NCwgMjUyLCAKLSAgICAyMDksIDI0NiwgMTYxLCAyNDYsIDIwMiwgNjgsIDEsIDIzNywgNjQsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjQ2LCAxNjksIAotICAgIDY4LCAxLCAyMzcsIDY0LCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI1MiwgMjE1LCA2OCwgMSwgMjM3LCA2NCwgMjUyLCAyMDksIAotICAgIDI0NiwgMTYxLCAyNDYsIDIxMywgNjgsIDEsIDIzNywgNjQsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjQ2LCAxOTEsIDY4LCAxLCAKLSAgICAyMzcsIDY0LCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0MCwgMTY2LCA2OCwgMSwgMjM3LCA2NCwgMjUyLCAyMDksIDI0NiwgCi0gICAgMTYxLCAyNTIsIDIwMiwgNjgsIDEsIDIzNywgNjQsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjQ2LCAxOTYsIDY4LCAxLCAyMzcsIAotICAgIDY0LCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMTkwLCA2OCwgMSwgMjM3LCA2NCwgMjUyLCAyMDksIDI0NiwgMTYxLCAKLSAgICAyNDksIDE3MCwgNjgsIDEsIDIzNywgNjQsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjQ2LCAyMjMsIDY4LCAxLCAyMzcsIDY0LCAKLSAgICAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI1MiwgMjI2LCA2OCwgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAxMzIsIDY2LCA2OCwgMSwgCi0gICAgMjUyLCAyMDksIDI0NiwgMTYxLCAxMzIsIDE5MSwgNjgsIDEsIDIzNywgNjQsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjQ2LCAKLSAgICAxOTksIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDIzNCwgNDYsIDY4LCAxLCAyMzcsIDY0LCAyNTIsIDIwOSwgMjQ2LCAKLSAgICAxNjEsIDI0NywgMTcsIDE3NCwgMjI4LCAxNzIsIDIzNiwgMTMzLCAxNzQsIDEsIDE3NywgMTc0LCAxLCAyNDYsIDE3OCwgCi0gICAgMTc0LCAxLCAyNTIsIDIwNSwgMTc0LCAxLCAyNDYsIDIwMiwgMTc0LCAxLCAyNDYsIDE2OSwgMTc0LCAxLCAyNTIsIDIxNSwgCi0gICAgMTc0LCAxLCAyNDYsIDE3NiwgMTc0LCAxLCAyNTIsIDIxMywgMTc0LCAxLCAyNDYsIDIxMywgMTc0LCAxLCAyNDgsIDE5NywgCi0gICAgMTc0LCAxLCAyNTIsIDIwMiwgMTc0LCAxLCAyNDYsIDE3MywgMTc0LCAxLCAyNTIsIDIwMywgMTc0LCAxLCAyNDYsIDE5NiwgCi0gICAgMTc0LCAxLCAyNTIsIDIwMSwgMTc0LCAxLCAyMTMsIDE3NCwgMSwgMjQ2LCAxODIsIDE3NCwgMSwgMjUyLCAyMTEsIDE3NCwgCi0gICAgMSwgMjQ2LCAxOTksIDE3NCwgMSwgMTk4LCAxNzQsIDEsIDE5MSwgMTc0LCAxLCAyMDgsIDE3NCwgMSwgMjUyLCAyMDAsIAotICAgIDE3NCwgMSwgMjUyLCAyMDgsIDE3NCwgMSwgMjQ2LCAxNjUsIDE3NCwgMSwgMjQ2LCAxOTAsIDE3NCwgMSwgMjUyLCAyMDQsIAotICAgIDE3NCwgMSwgMTU0LCAxNzQsIDMxLCA1LCA1NywgMTc0LCAzMSwgNSwgNzQsIDE3NCwgMzEsIDUsIDY2LCAxNzQsIDMxLCA1LCAKLSAgICAyNTIsIDIzMSwgMTc0LCAzMSwgNSwgMjUyLCAyMjEsIDE3NCwgMzEsIDUsIDI1MiwgMjIwLCAxNzQsIDMxLCA1LCAyNTIsIAotICAgIDIyMiwgMTc0LCAzMSwgNSwgNzIsIDE3NCwgMzEsIDUsIDczLCAxNzQsIDIzMSwgMTg5LCAxLCAxOTEsIDE3NCwgMjMxLCAKLSAgICAxODksIDEsIDIwOCwgMTc0LCAyMzEsIDE4OSwgMSwgMjUyLCAyMDgsIDE3NCwgMywgMSwgMTc3LCAxNzQsIDMsIDEsIDI0NiwgCi0gICAgMTY5LCAxNzQsIDMsIDEsIDIzMSwgMjA2LCAxNzQsIDMsIDEsIDI1MiwgMjAyLCAxNzQsIDMsIDEsIDI1MiwgMjAxLCAxNzQsIAotICAgIDMsIDEsIDIxMywgMTc0LCAzLCAxLCAxOTgsIDE3NCwgMywgMSwgMjA4LCAxNzQsIDMsIDEsIDI1MiwgMjAwLCAxNzQsIDUsIAotICAgIDIzMSwgMTA2LCAxNzQsIDUsIDIzMSwgOTEsIDE3NCwgNSwgMjQ1LCAxNDUsIDE3NCwgNSwgMjQ3LCA4NywgMTc0LCAyMjksIAotICAgIDE2NSwgNzYsIDE3NCwgMjMzLCA4MiwgNzYsIDE3NCwgMjEsIDI0MCwgMTI2LCAxNzQsIDIxLCAxMTgsIDE3NCwgMjEsIDExMywgCi0gICAgMTc0LCAyMSwgMTY2LCAxNzQsIDIxLCAxNTgsIDE3NCwgMjEsIDE3MywgMTc0LCAyMSwgMTgzLCAxNzQsIDIxLCAxOTQsIAotICAgIDE3NCwgMjEsIDE4NywgMTc0LCAyMSwgMTkyLCA5MSwgMjU0LCAxOTcsIDEsIDE3NywgOTEsIDI1NCwgMTk3LCAxLCAyNTMsIAotICAgIDgzLCA5MSwgMjU0LCAxOTcsIDEsIDI0NiwgMTY5LCA5MSwgMjU0LCAxOTcsIDEsIDI0NiwgMjE2LCA5MSwgMjU0LCAxOTcsIAotICAgIDEsIDI1MiwgMjA0LCA5MSwgMjU0LCAxOTcsIDEsIDE5MSwgOTEsIDI1NCwgMTk3LCAxLCAyNTIsIDIwMiwgOTEsIDI1NCwgCi0gICAgMTk3LCAxLCAyNDYsIDE3MywgOTEsIDI1NCwgMTk3LCAxLCAyNTIsIDIwMCwgOTEsIDI1NCwgMTk3LCAxLCAyMTMsIDkxLCAKLSAgICAyNTQsIDE5NywgMSwgMjQ2LCAxODIsIDkxLCAyNTQsIDE5NywgMSwgMTk4LCA5MSwgMjU0LCAxOTcsIDEsIDI1MiwgMjM0LCAKLSAgICA5MSwgMjU0LCAxOTcsIDEsIDI1MiwgMjQzLCA5MSwgMjU0LCAxOTcsIDEsIDE1NCwgOTEsIDI1NCwgMTk3LCAxLCAyNTMsIAotICAgIDM1LCA5MSwgMjU0LCAxOTcsIDEsIDI0NiwgMTc4LCA5MSwgMjU0LCAxOTcsIDEsIDI0MCwgMjQwLCA5MSwgMjU0LCAxOTcsIAotICAgIDEsIDI1MiwgMjAxLCA5MSwgMjU0LCAxOTcsIDEsIDU3LCA5MSwgMjU0LCAxOTcsIDEsIDc0LCA5MSwgMjU0LCAxOTcsIDEsIAotICAgIDI1MiwgMjMxLCA5MSwgMjU0LCAxOTcsIDEsIDI1MywgMTQ0LCA5MSwgMjU0LCAxOTcsIDEsIDY2LCA5MSwgMjU0LCAxOTcsIAotICAgIDEsIDI1MiwgMjIwLCA5MSwgMjU0LCAxOTcsIDEsIDczLCA5MSwgMjU0LCAxOTcsIDEsIDI1MywgNzEsIDkxLCAyNTQsIDE5NywgCi0gICAgMSwgNzIsIDkxLCAyNTQsIDE5NywgMSwgMjQ4LCAyNDEsIDkxLCAyNTQsIDE5NywgMSwgMjUyLCAyMjEsIDkxLCAyNTQsIAotICAgIDE5NywgMSwgMjM1LCAxMDEsIDkxLCAyNTQsIDE5NywgMSwgMjM1LCAxMDIsIDkxLCAyNTQsIDE5NywgMSwgMjM1LCAyMjcsIAotICAgIDkxLCAyNTQsIDE5NywgMSwgMjM1LCAxMDMsIDkxLCAyNTQsIDE5NywgMSwgMjM1LCAyMjgsIDEzOSwgOTEsIDE0NCwgMSwgCi0gICAgMjAxLCAyNTMsIDM1LCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMjUzLCAzNSwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDE3NywgCi0gICAgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI1MywgODMsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyNDYsIDE2OSwgMTM5LCA5MSwgCi0gICAgMTQ0LCAxLCAxODQsIDE3NywgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDI1MywgODMsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAKLSAgICAyNDYsIDE2OSwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI0NiwgMjE2LCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjUyLCAyMDQsIAotICAgIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAxOTEsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAyNDYsIDIxNiwgMTM5LCA5MSwgMTQ0LCAKLSAgICAxLCAxODQsIDI1MiwgMjA0LCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMTkxLCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjUyLCAKLSAgICAyMDIsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyNDYsIDE3MywgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI1MiwgMjAxLCAxMzksIAotICAgIDkxLCAxNDQsIDEsIDE4NCwgMjUyLCAyMDIsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAyNDYsIDE3MywgMTM5LCA5MSwgMTQ0LCAKLSAgICAxLCAxODQsIDI1MiwgMjAxLCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjEzLCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjQ2LCAKLSAgICAxODIsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAxOTgsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAyMTMsIDEzOSwgOTEsIDE0NCwgCi0gICAgMSwgMTg0LCAyNDYsIDE4MiwgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDE5OCwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI1MiwgCi0gICAgMjM0LCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjUyLCAyNDMsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyNTIsIDIwMCwgMTM5LCAKLSAgICA5MSwgMTQ0LCAxLCAxODQsIDI1MiwgMjM0LCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMjUyLCAyNDMsIDEzOSwgOTEsIDE0NCwgCi0gICAgMSwgMTg0LCAyNTIsIDIwMCwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDE1NCwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI1MiwgCi0gICAgMjAzLCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjUyLCAyMTEsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAxNTQsIDEzOSwgOTEsIAotICAgIDE0NCwgMSwgMTg0LCAyNTIsIDIwMywgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDI1MiwgMjExLCAxMzksIDkxLCAxNDQsIDEsIAotICAgIDIwMSwgMjQ4LCA4NywgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI0OCwgMTk1LCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMjQ4LCAKLSAgICA4NywgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDI0OCwgMTk1LCAxMzksIDkxLCAxNDQsIDMxLCA1LCAzMSwgMjMxLCAxNDIsIAotICAgIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDI1MiwgMjEyLCAxMzksIDkxLCAxNDQsIDMxLCA1LCAyNTIsIDIxNiwgMTM5LCA5MSwgCi0gICAgMTQ0LCAzMSwgNSwgNjYsIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDI1MiwgMjI0LCAxMzksIDkxLCAxNDQsIDMxLCA1LCA3MiwgCi0gICAgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgMjUzLCA0LCAxMzksIDkxLCAxNDQsIDMxLCA1LCA3MywgMTM5LCA5MSwgMTQ0LCAzMSwgCi0gICAgNSwgMjUzLCAyNTMsIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDI1MywgNzEsIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDI1MywgMTE0LCAKLSAgICAxMzksIDkxLCAxNDQsIDMxLCA1LCAyNDgsIDIyNiwgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgMjU0LCAxNSwgMTM5LCA5MSwgCi0gICAgMTQ0LCAzMSwgNSwgMjU0LCAxMjMsIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDI1MSwgOTUsIDEzOSwgOTEsIDE0NCwgMzEsIDUsIAotICAgIDI1MiwgNTEsIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDI1MywgMjM0LCAxMzksIDkxLCAxNDQsIDEsIDM1LCAxOTYsIDEzOSwgCi0gICAgOTEsIDE0NCwgMSwgMzUsIDI1MywgNjksIDEzOSwgOTEsIDE0NCwgMSwgMzUsIDE5OSwgMTM5LCA5MSwgMTQ0LCAxLCAzNSwgCi0gICAgMTg1LCAxMzksIDkxLCAxNDQsIDEsIDM1LCAyNTQsIDE4NiwgMTM5LCA5MSwgMTQ0LCAxLCAzNSwgMjIyLCAyMjIsIDEzOSwgCi0gICAgOTEsIDE0NCwgMSwgMzUsIDI1NCwgMTg1LCAxMzksIDkxLCAxNDQsIDIwNiwgMjM1LCAxOTAsIDEzOSwgOTEsIDE0NCwgMjA2LCAKLSAgICAyMzUsIDE5MSwgMTM5LCA5MSwgMTQ0LCAyMSwgMjQwLCAxMjYsIDEzOSwgOTEsIDE0NCwgMjEsIDExOCwgMTM5LCA5MSwgCi0gICAgMTQ0LCAyMSwgMTEzLCAxMzksIDkxLCAxNDQsIDIxLCAxNjYsIDEzOSwgOTEsIDE0NCwgMjEsIDE1OCwgMTM5LCA5MSwgMTQ0LCAKLSAgICAyMSwgMTczLCAxMzksIDkxLCAxNDQsIDIxLCAxODMsIDEzOSwgOTEsIDE0NCwgMjEsIDE5NCwgMTM5LCA5MSwgMTQ0LCAyMSwgCi0gICAgMTg3LCAxMzksIDkxLCAxNDQsIDIxLCAxOTIsIDEzOSwgOTEsIDE0NCwgNSwgMjUwLCAyMDQsIDEzOSwgOTEsIDE0NCwgNSwgCi0gICAgMjQ0LCA4NywgNzEsIDE0LCAyMzAsIDg4LCA3MSwgMTQsIDI0OCwgMTA0LCAyNDAsIDE2NCwgNzEsIDE0LCAyNTMsIDE4OSwgCi0gICAgMjQwLCAxNjQsIDcxLCAxNCwgMjUzLCAyMDgsIDI0MCwgMTY0LCA3MSwgMTQsIDI0OCwgMSwgMjQwLCAxNjQsIDcxLCAxNCwgCi0gICAgMjQ4LCAxMzUsIDI0MCwgMTY0LCA3MSwgMTQsIDIzMiwgMzcsIDI0MCwgMTY0LCA3MSwgMTQsIDIzMywgMjMwLCAyNDAsIAotICAgIDE2NCwgNzEsIDE0LCAyMzMsIDIyOSwgMjQwLCAxNjQsIDcxLCAxNCwgMjMyLCAzNiwgMjQwLCAxNjQsIDcxLCAxNCwgMjUzLCAKLSAgICAyMTQsIDI0MCwgMTY0LCA3MSwgMTQsIDIzMywgMTk4LCAyNDAsIDE2NCwgNzEsIDE0LCAyMzUsIDE2MiwgMjQwLCAxNjQsIAotICAgIDcxLCAxNCwgMjM1LCAxNjEsIDI0MCwgMTY0LCA3MSwgMTQsIDIzMywgMTk3LCAyNDAsIDE2NCwgNzEsIDE0LCAyMzMsIDE5OSwgCi0gICAgMjQwLCAxNjQsIDcxLCAxNCwgMjMxLCAxODMsIDcxLCAxNCwgMjQ4LCAxMDQsIDI0NiwgMjExLCA3MSwgMTQsIDI1MywgMTg5LCAKLSAgICAyNDYsIDIxMSwgNzEsIDE0LCAyNTMsIDIwOCwgMjQ2LCAyMTEsIDcxLCAxNCwgMjQ4LCAxLCAyNDYsIDIxMSwgNzEsIDE0LCAKLSAgICAyNDgsIDEzNSwgMjQ2LCAyMTEsIDcxLCAxNCwgMjMyLCAzNywgMjQ2LCAyMTEsIDcxLCAxNCwgMjMzLCAyMzAsIDI0NiwgCi0gICAgMjExLCA3MSwgMTQsIDIzMywgMjI5LCAyNDYsIDIxMSwgNzEsIDE0LCAyMzIsIDM2LCAyNDYsIDIxMSwgNzEsIDE0LCAyNTMsIAotICAgIDIxNCwgMjQ2LCAyMTEsIDcxLCAxNCwgMjMzLCAxOTgsIDI0NiwgMjExLCA3MSwgMTQsIDIzNSwgMTYyLCAyNDYsIDIxMSwgCi0gICAgNzEsIDE0LCAyMzUsIDE2MSwgMjQ2LCAyMTEsIDcxLCAxNCwgMjMzLCAxOTcsIDI0NiwgMjExLCA3MSwgMTQsIDIzMywgMTk5LCAKLSAgICAyNDYsIDIxMSwgMjMzLCA3MywgMSwgMTc3LCAyMzMsIDczLCAxLCAyNTIsIDIwNSwgMjMzLCA3MywgMSwgMjQ2LCAxNjksIAotICAgIDIzMywgNzMsIDEsIDI0NCwgMjE3LCAyMzMsIDczLCAxLCAyMTMsIDIzMywgNzMsIDEsIDI1MiwgMjExLCAyMzMsIDczLCAxLCAKLSAgICAxOTgsIDIzMywgNzMsIDEsIDI0OCwgMTAyLCAyMzMsIDczLCAxLCAyNTIsIDIwMiwgMjMzLCA3MywgMSwgMjUyLCAyMDMsIAotICAgIDIzMywgNzMsIDEsIDI1MiwgMjAxLCAyMzMsIDczLCAxLCAyNDgsIDExNywgMjMzLCA3MywgMSwgMjUyLCAyMTUsIDIzMywgCi0gICAgNzMsIDEsIDI1MiwgMjEzLCAyMzMsIDczLCAxLCAyNDYsIDE4MSwgMjMzLCA3MywgMSwgMjQ1LCAxOSwgMjMzLCA3MywgMSwgCi0gICAgMTkxLCAyMzMsIDczLCAxLCAyMDgsIDIzMywgNzMsIDEsIDI1MiwgMjAwLCAyMzMsIDczLCAxLCAyNTIsIDI0MywgMjMzLCAKLSAgICA3MywgMSwgMjUyLCAyMDQsIDIzMywgNzMsIDEsIDU3LCAyMzMsIDczLCAxLCAxNTQsIDIzMywgNzMsIDMxLCA1LCA3NCwgCi0gICAgMjMzLCA3MywgMzEsIDUsIDY2LCAyMzMsIDczLCAzMSwgNSwgNzIsIDIzMywgNzMsIDMxLCA1LCA3MywgMjMzLCA3MywgMzEsIAotICAgIDUsIDI1MywgNCwgMjMzLCA3MywgMjM0LCAxODEsIDIzMywgNzMsIDI1MiwgMjU1LCAxMDYsIDIzMywgMTQ0LCA4NSwgNSwgCi0gICAgMjUzLCAxOTgsIDIzOSwgMjIzLCA4NSwgNSwgMjUzLCAxOTgsIDIzNiwgMjAsIDg1LCA1LCAyMzgsIDE0MiwgODUsIDUsIAotICAgIDIzNSwgMjE3LCA4NSwgNSwgMjM4LCAxMjQsIDg1LCAxLCAyMzgsIDkyLCA4NSwgMSwgMjQyLCA1MCwgMjM1LCA0OCwgODUsIAotICAgIDEsIDIzOSwgMzksIDg1LCAxLCAyNDQsIDUsIDIzNSwgNDgsIDg1LCAxLCAyNDAsIDY1LCA4NSwgMSwgMjQ2LCAzMSwgMjM1LCAKLSAgICA0OCwgODUsIDEsIDI1NCwgMjI0LCAyNDEsIDY2LCA4NSwgMSwgMjU0LCAyMjQsIDI0NywgMTk5LCAyMzUsIDQ4LCA4NSwgMSwgCi0gICAgMjU0LCAyMjksIDIzOCwgMjAsIDg1LCAxLCAyNTQsIDIyOSwgMjQxLCAxODAsIDIzNSwgNDgsIDg1LCAxLCAyMzgsIDE5OCwgCi0gICAgODUsIDEsIDIzNSwgMjQyLCA4NSwgMSwgMjM5LCAxNzIsIDg1LCAxLCAyNDUsIDUzLCAyMzUsIDQ4LCA4NSwgMSwgMTc3LCAKLSAgICA4NSwgMSwgMTg4LCAyMzAsIDE2OCwgODUsIDEsIDI1MiwgMjA1LCA4NSwgMSwgMjU0LCAyNDgsIDI0MywgMTUzLCA4NSwgMSwgCi0gICAgMjQ2LCAxNjksIDg1LCAxLCAyNTIsIDIxNSwgODUsIDEsIDI1NSwgMjEsIDI0NCwgODUsIDg1LCAxLCAyNTIsIDIxMywgODUsIAotICAgIDEsIDI1NSwgMzMsIDI0NCwgMTUsIDg1LCAxLCAyNDYsIDE4MSwgODUsIDEsIDI1NCwgMjE0LCAyMzksIDgxLCA4NSwgMSwgCi0gICAgMjU0LCAyMTQsIDI0MSwgNTIsIDIzMCwgMTY4LCA4NSwgMSwgMjU0LCAyMTgsIDI0MSwgNTIsIDIzMCwgMjIzLCA4NSwgMSwgCi0gICAgMjU0LCAyMTgsIDI0MSwgNTIsIDIzMCwgMTY4LCA4NSwgMSwgMjU1LCAxMywgMjM2LCAxOTksIDg1LCAxLCAyNTIsIDIwMiwgCi0gICAgODUsIDEsIDI1NCwgMjE0LCAyNDUsIDIzOCwgODUsIDEsIDI1MiwgMjAzLCA4NSwgMSwgMjU0LCAyMTgsIDI0NCwgMTE1LCAKLSAgICA4NSwgMSwgMjUyLCAyMDEsIDg1LCAxLCAyMTMsIDg1LCAxLCAyNTQsIDI0MiwgMjM5LCA1NiwgODUsIDEsIDI1MiwgMjExLCAKLSAgICA4NSwgMSwgMjU1LCAxOSwgMjM0LCAxMzgsIDg1LCAxLCAxOTgsIDg1LCAxLCAxOTEsIDg1LCAxLCAyMDgsIDg1LCAxLCAyNTIsIAotICAgIDIwMCwgODUsIDEsIDI1MiwgMjA4LCA4NSwgMSwgMjU1LCAxNSwgMjQ1LCAxNDcsIDg1LCAxLCAyNTUsIDE1LCAyNDUsIDE1MSwgCi0gICAgODUsIDEsIDI1MiwgMjA0LCA4NSwgMSwgMTU0LCA4NSwgNSwgMjM0LCAyMDcsIDg1LCAzMSwgNSwgMjM1LCA0OCwgODUsIDMxLCAKLSAgICA1LCAyNTIsIDUyLCA4NSwgMzEsIDUsIDI1MywgMTk4LCAyNDUsIDE1MiwgODUsIDMxLCA1LCAyNDUsIDIyMywgODUsIDMxLCAKLSAgICA1LCAyNTEsIDI0MSwgMjQ0LCA2LCA4NSwgMzEsIDUsIDI1NCwgMjI0LCAyNDEsIDY2LCA4NSwgMzEsIDUsIDI1NCwgMjI0LCAKLSAgICAyNDcsIDE5OSwgMjM1LCA0OCwgODUsIDMxLCA1LCAyNTQsIDIyOSwgMjM4LCAyMCwgODUsIDMxLCA1LCAyNTQsIDIyOSwgCi0gICAgMjQxLCAxODAsIDIzNSwgNDgsIDg1LCAzMSwgNSwgMjM2LCAyNTMsIDg1LCAzMSwgNSwgMjM3LCAyMTcsIDI0MSwgNjYsIDg1LCAKLSAgICAzMSwgNSwgMjM3LCAyMTcsIDIzNSwgNDgsIDg1LCAzMSwgNSwgMjM3LCAyMTcsIDI0NywgMTk5LCAyMzUsIDQ4LCA4NSwgMzEsIAotICAgIDUsIDIzOSwgMTkxLCA4NSwgMzEsIDUsIDI0NSwgNjUsIDIzNSwgNDgsIDg1LCAyNDgsIDIyOSwgMjQyLCA0MiwgODUsIDEsIAotICAgIDI1MiwgMjE0LCAyMzcsIDEyOCwgODUsIDEsIDI1MCwgMTYzLCAyMzcsIDEyOCwgODUsIDEsIDI1MiwgNDUsIDIzNywgMTI4LCAKLSAgICA4NSwgMSwgMjU1LCAyMywgMjM3LCAxMjgsIDg1LCAxLCAyNTQsIDI1NCwgMjM3LCAxMjgsIDg1LCAxLCAyNTQsIDE3NywgCi0gICAgMjM3LCAxMjgsIDg1LCAxLCAyMzgsIDEwOSwgMjM3LCAxMjgsIDg1LCAyMSwgMjQwLCAxMjYsIDg1LCAyMSwgMTE4LCA4NSwgCi0gICAgMjEsIDExMywgODUsIDIxLCAxNjYsIDg1LCAyMSwgMTU4LCA4NSwgMjEsIDE3MywgODUsIDIxLCAxODMsIDg1LCAyMSwgMTk0LCAKLSAgICA4NSwgMjEsIDE4NywgODUsIDIxLCAxOTIsIDg1LCAyMzksIDE4MCwgODUsIDIzNiwgMTgzLCA4NSwgMjQwLCA4NSwgODUsIAotICAgIDI0MSwgMjgsIDIzMSwgMTE1LCA4NSwgMjQxLCAyOCwgMjQ1LCAxODYsIDg1LCAyNDEsIDI4LCAyMzQsIDE4NywgODUsIDIzMiwgCi0gICAgMjM5LCA4NSwgMjMsIDE0LCAyNDMsIDc3LCA4NSwgMjMsIDE0LCAyNDMsIDU4LCA4NSwgMjMsIDE0LCAyNDMsIDg1LCA4NSwgCi0gICAgMjMsIDE0LCAyNDEsIDExNywgODUsIDIzLCAxNCwgMjQ4LCAxOCwgMjM1LCAyMTcsIDg1LCAyMywgMTQsIDI0MywgNzAsIDg1LCAKLSAgICAyMywgMTQsIDIzOCwgMTY2LCA4NSwgMjMsIDE0LCAyMzgsIDE4MywgODUsIDIzLCAxNCwgMjM4LCAxNjgsIDg1LCAyMywgMTQsIAotICAgIDI0OCwgMTgsIDI0MywgMTIyLCA4NSwgMjMsIDE0LCAzNiwgMjQwLCAzMSwgODUsIDIzLCAxNCwgMzYsIDIzOCwgMjAxLCA4NSwgCi0gICAgMjMsIDE0LCAzNiwgMjM2LCAxMjAsIDg1LCAyMywgMTQsIDM2LCAyMzYsIDExOSwgODUsIDIzLCAxNCwgMzYsIDIzMywgMTY5LCAKLSAgICA4NSwgMjMsIDE0LCAzNiwgMjM5LCA2NCwgMiwgMjMzLCAxNjksIDg1LCAyMywgMTQsIDM2LCAyMzksIDYzLCAyLCAyMzMsIAotICAgIDE2OSwgODUsIDIzLCAxNCwgMzYsIDIzOCwgMTIxLCA4NSwgMjMsIDE0LCAzNiwgMjQzLCAxNTIsIDg1LCAyMywgMTQsIDIzMCwgCi0gICAgMTU4LCAyNDYsIDE1NywgMjQ3LCAxMzMsIDg1LCAyMywgMTQsIDIzMCwgMTU4LCAyNDYsIDE1NywgMjQ4LCAxNywgODUsIDIzLCAKLSAgICAxNCwgMjMwLCAxNTgsIDIzNywgNTgsIDI0OCwgMTgzLCA4NSwgMjMsIDE0LCAyMzAsIDE1OCwgMjM3LCA1OCwgMjUyLCA0LCAKLSAgICA4NSwgMjMsIDE0LCAyMzEsIDIzMiwgMjQ2LCAxNTcsIDI0NSwgNjAsIDg1LCAyMywgMTQsIDIzMSwgMjMyLCAyNDYsIDE1NywgCi0gICAgMjQ1LCA4MywgODUsIDIzLCAxNCwgMjMxLCAyMzIsIDIzNywgNTgsIDI0NSwgNzYsIDg1LCAyMywgMTQsIDIzMSwgMjMyLCAKLSAgICAyMzcsIDU4LCAyNDUsIDc5LCA4NSwgMjMsIDE0LCAyMzEsIDIzMiwgMjQ2LCAxNTcsIDI0MSwgNjIsIDIyMCwgNSwgMjMyLCAKLSAgICAyNDQsIDIyMCwgNSwgMjMxLCAxMTYsIDIyMCwgNSwgMjMxLCAxMTcsIDIyMCwgMSwgNTcsIDIyMCwgMSwgNzQsIDIyMCwgMSwgCi0gICAgNjYsIDIyMCwgMSwgMjUzLCA0LCAyMjAsIDEsIDczLCAyMjAsIDEsIDcyLCAyMjAsIDEsIDI1MywgMTAwLCAyMjAsIDEsIAotICAgIDE3NywgMjIwLCAxLCAyNTMsIDM1LCAyMjAsIDEsIDI1MiwgMjA1LCAyMjAsIDEsIDI0NiwgMTY5LCAyMjAsIDEsIDI1MiwgCi0gICAgMjE1LCAyMjAsIDEsIDI1MiwgMjEzLCAyMjAsIDEsIDI1MiwgMjI2LCAyMjAsIDEsIDI0NiwgMTgxLCAyMjAsIDEsIDI1MiwgCi0gICAgMjAyLCAyMjAsIDEsIDI1MiwgMjAzLCAyMjAsIDEsIDI1MiwgMjAxLCAyMjAsIDEsIDIxMywgMjIwLCAxLCAyNTIsIDIzNCwgCi0gICAgMjIwLCAxLCAyNTIsIDI0MywgMjIwLCAxLCAyNTIsIDIxMSwgMjIwLCAxLCAxOTgsIDIyMCwgMSwgMTkxLCAyMjAsIDEsIAotICAgIDIwOCwgMjIwLCAxLCAyNTIsIDIwMCwgMjIwLCAxLCAyNTIsIDIwOCwgMjIwLCAxLCAyNTIsIDIwNCwgMjIwLCAxLCAyNTMsIAotICAgIDgzLCAyMjAsIDEsIDE1NCwgMjIwLCAyMzEsIDE5NCwgNSwgMjMxLCAxMTQsIDIyMCwgMjMxLCAxOTQsIDUsIDIzMiwgMjQzLCAKLSAgICAyMjAsIDIzMSwgMTk0LCA1LCAyMzQsIDE4NCwgMjIwLCAzMSwgNSwgMjMyLCAyNDEsIDIyMCwgMzEsIDUsIDIzNCwgMTg1LCAKLSAgICAyMjAsIDMxLCA1LCAyMzAsIDg2LCAyMjAsIDMxLCA1LCAyMzIsIDI0MiwgMjIwLCAzMSwgNSwgMjM0LCAxODMsIDIyMCwgMzEsIAotICAgIDUsIDIzMCwgODcsIDIyMCwgNSwgMjM0LCAxODIsIDIyMCwgMSwgMjQ2LCAxNzgsIDIyMCwgMSwgMjUxLCAyNDgsIDIyMCwgCi0gICAgMjEsIDI0MCwgMTI2LCAyMjAsIDIxLCAxMTgsIDIyMCwgMjEsIDExMywgMjIwLCAyMSwgMTY2LCAyMjAsIDIxLCAxNTgsIAotICAgIDIyMCwgMjEsIDE3MywgMjIwLCAyMSwgMTgzLCAyMjAsIDIxLCAxOTQsIDIyMCwgMjEsIDE4NywgMjIwLCAyMSwgMTkyLCAKLSAgICAxNTYsIDEsIDE3NywgMTU2LCAxLCAyNTAsIDE3NSwgMTU2LCAxLCAyNDYsIDE3OCwgMTU2LCAxLCAyNTIsIDIwNSwgMTU2LCAKLSAgICAxLCAyNTAsIDM1LCAxNTYsIDEsIDI0NiwgMTY5LCAxNTYsIDEsIDI1MiwgMjE1LCAxNTYsIDEsIDI0NiwgMTc2LCAxNTYsIDEsIAotICAgIDI1MiwgMjEzLCAxNTYsIDEsIDI0NiwgMTgxLCAxNTYsIDEsIDI1MiwgMjAyLCAxNTYsIDEsIDI0NiwgMTczLCAxNTYsIDEsIAotICAgIDI1MiwgMjAzLCAxNTYsIDEsIDI1MiwgMjAxLCAxNTYsIDEsIDIxMywgMTU2LCAxLCAyNDgsIDEzMywgMTU2LCAxLCAyNDYsIAotICAgIDE4MiwgMTU2LCAxLCAyNTIsIDIzNCwgMTU2LCAxLCAyNDksIDI1MywgMTU2LCAxLCAyNTIsIDIxMSwgMTU2LCAxLCAyNDksIAotICAgIDEyNCwgMTU2LCAxLCAxOTgsIDE1NiwgMSwgMjUxLCAyMCwgMTU2LCAxLCAyNDYsIDIxNiwgMTU2LCAxLCAyNDAsIDI0MCwgCi0gICAgMTU2LCAxLCAyNDYsIDI1NCwgMTU2LCAxLCAxOTEsIDE1NiwgMSwgMjA4LCAxNTYsIDEsIDI1MiwgMjAwLCAxNTYsIDEsIAotICAgIDE1NCwgMTU2LCAxLCAyNDgsIDYxLCAxNTYsIDEsIDI1MiwgMjQzLCAxNTYsIDEsIDI1MiwgMjA0LCAxNTYsIDEsIDI0NiwgCi0gICAgMTY1LCAxNTYsIDEsIDI1MiwgMjA4LCAxNTYsIDEsIDU3LCAxNTYsIDIzMSwgMTg5LCAxLCAxOTEsIDE1NiwgMjMxLCAxODksIAotICAgIDEsIDIwOCwgMTU2LCAzMSwgNSwgMjUyLCAyMTIsIDE1NiwgMzEsIDUsIDc0LCAxNTYsIDMxLCA1LCA3MywgMTU2LCAzMSwgNSwgCi0gICAgMjUyLCAyMjAsIDE1NiwgMzEsIDUsIDY2LCAxNTYsIDMxLCA1LCAyNTIsIDIyNCwgMTU2LCAzMSwgNSwgNzIsIDE1NiwgMjMxLCAKLSAgICAxOTQsIDUsIDI1NCwgMTg2LCAxNTYsIDIzMSwgMTk0LCA1LCAxODUsIDE1NiwgMjMxLCAxOTQsIDUsIDE0OSwgMTU2LCAyMzEsIAotICAgIDE5NCwgNSwgMTk5LCAxNTYsIDIzMSwgMTk0LCA1LCAyNTQsIDE4NywgMTU2LCAyMzEsIDE5NCwgNSwgMTQ2LCAxNTYsIDIzMSwgCi0gICAgMTk0LCA1LCAyNTQsIDE4MywgMTU2LCAyMzEsIDE5NCwgNSwgMjM0LCAxNzIsIDE1NiwgMjMxLCAxOTQsIDUsIDI0NCwgNDgsIAotICAgIDE1NiwgNSwgMjUxLCAxNzMsIDE1NiwgNSwgMjM3LCAxMjUsIDE1NiwgMjI5LCAxNjEsIDIzNSwgMjE4LCAxNTYsIDIyOSwgCi0gICAgMTYxLCAyNTEsIDg1LCAyNDAsIDQxLCAyMzUsIDIxOCwgMTU2LCAyMjksIDE2MSwgMjM1LCAxNTYsIDE1NiwgMjI5LCAxNjEsIAotICAgIDI0MCwgNTAsIDIzNSwgMTU2LCAxNTYsIDIyOSwgMTYxLCAyMzcsIDEwLCAxNTYsIDIxLCAyNDAsIDEyNiwgMTU2LCAyMSwgCi0gICAgMTE4LCAxNTYsIDIxLCAxMTMsIDE1NiwgMjEsIDE2NiwgMTU2LCAyMSwgMTU4LCAxNTYsIDIxLCAxNzMsIDE1NiwgMjEsIAotICAgIDE4MywgMTU2LCAyMSwgMTk0LCAxNTYsIDIxLCAxODcsIDE1NiwgMjEsIDE5MiwgMTU2LCAxLCAyNDYsIDE5MSwgMTU2LCAxLCAKLSAgICAyNDAsIDE1MCwgMTU2LCAxLCAyNDYsIDE5MiwgMjU0LCAxODksIDI0MCwgMTIyLCAyMSwgMjQwLCAxMjYsIDI1NCwgMTg5LCAKLSAgICAyNDAsIDEyMiwgMjEsIDExOCwgMjU0LCAxODksIDI0MCwgMTIyLCAyMSwgMTEzLCAyNTQsIDE4OSwgMjQwLCAxMjIsIDIxLCAKLSAgICAxNjYsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjEsIDE1OCwgMjU0LCAxODksIDI0MCwgMTIyLCAyMSwgMTczLCAyNTQsIDE4OSwgCi0gICAgMjQwLCAxMjIsIDIxLCAxODMsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjEsIDE5NCwgMjU0LCAxODksIDI0MCwgMTIyLCAyMSwgCi0gICAgMTg3LCAyNTQsIDE4OSwgMjQwLCAxMjIsIDIxLCAxOTIsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjUyLCAyMDAsIDI1NCwgCi0gICAgMTg5LCAyNDAsIDEyMiwgMSwgMjUzLCAxMTMsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjU0LCAyNCwgMjU0LCAxODksIAotICAgIDI0MCwgMTIyLCAxLCAyNDcsIDksIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjUzLCAxMTIsIDI1NCwgMTg5LCAyNDAsIDEyMiwgCi0gICAgMSwgMjQ3LCAxNjYsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjQ4LCAyMjMsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjQ4LCAKLSAgICAyMjIsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjQ4LCAyMjQsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjQ4LCAyMjUsIAotICAgIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjUzLCA0MiwgMjU0LCAxODksIDI0MCwgMTIyLCAxLCAyNTMsIDE4MiwgMjU0LCAKLSAgICAxODksIDI0MCwgMTIyLCAxLCAyNTMsIDIzMCwgMjU0LCAxODksIDI0MCwgMTIyLCAxLCAyNTAsIDEyMCwgMjU0LCAxODksIAotICAgIDI0MCwgMTIyLCAxLCAyNTMsIDE0OSwgMjU0LCAxODksIDI0MCwgMTIyLCAxLCAyNTMsIDIyLCAyNTQsIDE4OSwgMjQwLCAKLSAgICAxMjIsIDEsIDI1NCwgMTYzLCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI1MywgNDUsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgCi0gICAgMjQ4LCAxODgsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjU0LCAxNSwgMjU0LCAxODksIDI0MCwgMTIyLCAxLCAyNTMsIDgwLCAKLSAgICAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI1NCwgNTEsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjQ5LCAyMjMsIDI1NCwgCi0gICAgMTg5LCAyNDAsIDEyMiwgMSwgMjUyLCAyMzIsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjQ4LCAzNCwgMjU0LCAxODksIAotICAgIDI0MCwgMTIyLCAxLCAyNTMsIDQ5LCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI1MSwgMTAwLCAyNTQsIDE4OSwgMjQwLCAKLSAgICAxMjIsIDEsIDI1NCwgMTIxLCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI1NCwgMCwgMjU0LCAxODksIDI0MCwgMTIyLCAxLCAKLSAgICAyNTMsIDE4NywgMjU0LCAxODksIDI0MCwgMTIyLCAyNTQsIDIwNywgMjM0LCAyNTMsIDI1NCwgMTg5LCAyNDAsIDEyMiwgCi0gICAgMjM2LCA4OCwgMjMyLCA2MCwgMjU0LCAxODksIDI0MCwgMTIyLCAyMzEsIDEwNSwgMjMyLCA2MCwgMjU0LCAxODksIDI0MCwgCi0gICAgMTIyLCAyMzksIDIxOCwgMjU0LCAxODksIDI0MCwgMTIyLCAyMzIsIDI0OSwgMjU0LCAxODksIDI0MCwgMTIyLCAyNDIsIDQ1LCAKLSAgICAyNTQsIDE4OSwgMjQwLCAxMjIsIDIyOSwgMTYxLCAyMzUsIDE5MywgMjU0LCAxODksIDI0MCwgMTIyLCAyMjksIDE2MSwgNDcsIAotICAgIDIzNSwgMTkzLCA3LCAxLCAzLCA2LCA1NywgNywgMSwgMywgNiwgMjUzLCA0LCA3LCAzLCAxLCAyMDksIDI1MywgNCwgNywgMSwgCi0gICAgMywgNiwgMjM3LCAxMTgsIDI1NCwgMTg1LCA3LCAxLCAzLCA2LCAyNTQsIDE5NCwgNywgMSwgMywgNiwgMjIyLCAyMjIsIDcsIAotICAgIDEsIDMsIDYsIDI0NiwgMjQyLCA3LCAxLCAzLCA2LCA3MiwgNywgMywgMSwgMjA5LCAyNDYsIDE1NywgNzIsIDcsIDMsIDEsIAotICAgIDIwOSwgNzQsIDcsIDEsIDMsIDYsIDI1NCwgMTkyLCA3LCAxLCAzLCA2LCAyNTQsIDE4NiwgNywgMSwgMywgNiwgMjU1LCA1OCwgCi0gICAgMiwgODIsIDcsIDEsIDMsIDYsIDE4NSwgNywgMSwgMywgNiwgMjAwLCAxOTksIDcsIDEsIDMsIDYsIDczLCA3LCAxLCAzLCA2LCAKLSAgICAyNDYsIDE1NywgNzMsIDcsIDMsIDEsIDIzMywgMTE2LCA3MywgNywgMywgMSwgMjMzLCAxMTYsIDI0NiwgMTU3LCA3MywgNywgCi0gICAgMywgMSwgMjMzLCAxMTYsIDEzMCwgMiwgODIsIDcsIDMsIDEsIDIwOSwgMjUzLCAxNSwgNywgMSwgMywgNiwgMjUzLCAxMTksIAotICAgIDcsIDMsIDEsIDI1MiwgMjI4LCAxMzIsIDczLCA3LCAzLCAxLCAyMzcsIDU5LCAxMzIsIDczLCA3LCAxLCAzLCA2LCAyNTQsIAotICAgIDE4NywgNywgMSwgMywgNiwgMjAwLCAxNDYsIDcsIDEsIDMsIDYsIDIwOSwgMTQ2LCA3LCAxLCAzLCA2LCAyNTQsIDE4MywgNywgCi0gICAgMSwgMywgNiwgNjYsIDcsIDMsIDEsIDIzMywgMTE2LCA2NiwgNywgMywgMSwgMjMzLCAxMTYsIDIyOSwgMjQ3LCA2NiwgNywgCi0gICAgMywgMSwgMjMzLCAxMTYsIDIwOSwgMTg1LCA3LCAxLCAzLCA2LCAxOTYsIDcsIDEsIDMsIDYsIDI1NCwgMTk1LCA3LCAxLCAzLCAKLSAgICA2LCAyNTQsIDE5MywgNywgMSwgMywgNiwgMjQ3LCA3NCwgNywgMSwgMjM3LCAxMDcsIDIzMiwgMjE4LCAyMzQsIDIyNywgNywgCi0gICAgMSwgMjQ2LCAyMjQsIDE5LCAxLCAzLCA2LCAyMzcsIDYxLCAxOSwgMSwgMywgNiwgMjM3LCA4MiwgMTksIDEsIDMsIDYsIAotICAgIDI1MiwgMjIzLCAxOSwgMSwgMywgNiwgMjQ2LCAyMDksIDE5LCAxLCAzLCA2LCAyNDYsIDIwNCwgMjgsIDEsIDMsIDYsIDI1MywgCi0gICAgNTgsIDUyLCAxLCA2LCA1NywgNTIsIDEsIDYsIDI1MywgNCwgNTIsIDEsIDYsIDI1NCwgMTg1LCA1MiwgMSwgNiwgMjM3LCAKLSAgICAxMTgsIDI1NCwgMTg1LCA1MiwgMSwgNiwgMjIyLCAyMjIsIDUyLCAxLCA2LCA3MiwgNTIsIDEsIDYsIDIwMCwgNzIsIDUyLCAKLSAgICAxLCA2LCAyMTQsIDUyLCAxLCA2LCAyMTIsIDUyLCAxLCA2LCA3NCwgNTIsIDEsIDYsIDI1NCwgMTkyLCA1MiwgMSwgNiwgCi0gICAgMjU0LCAxODYsIDUyLCAxLCA2LCAxNDksIDUyLCAxLCA2LCAxODUsIDUyLCAxLCA2LCAxOTksIDUyLCAxLCA2LCAyMDAsIAotICAgIDE5OSwgNTIsIDEsIDYsIDczLCA1MiwgMSwgNiwgMjUzLCAxMTksIDUyLCAxLCA2LCAyNTQsIDE4NywgNTIsIDEsIDYsIDE0NiwgCi0gICAgNTIsIDEsIDYsIDI1NCwgMTgzLCA1MiwgMSwgNiwgNjYsIDUyLCAxLCA2LCAyNTQsIDE5NSwgNTIsIDEsIDMsIDU3LCA1MiwgCi0gICAgMSwgMywgMjA5LCA1NywgNTIsIDEsIDMsIDIzNywgNzEsIDUyLCAxLCAzLCAyMDksIDI1MywgNCwgNTIsIDEsIDMsIDI1NCwgCi0gICAgMTg1LCA1MiwgMSwgMywgMjIyLCAyMjIsIDUyLCAxLCAzLCA3MiwgNTIsIDEsIDMsIDIzNywgMTQ0LCA1MiwgMSwgMywgMjQ2LCAKLSAgICAxNTcsIDcyLCA1MiwgMSwgMywgMjA5LCAyNDYsIDE1NywgNzIsIDUyLCAxLCAzLCAyMTQsIDUyLCAxLCAzLCAyMDksIDc0LCAKLSAgICA1MiwgMSwgMywgMjU0LCAxODYsIDUyLCAxLCAzLCAxODUsIDUyLCAxLCAzLCAyNDcsIDAsIDUyLCAxLCAzLCA3MywgNTIsIDEsIAotICAgIDMsIDI0NiwgMTU3LCA3MywgNTIsIDEsIDMsIDI1MiwgMjI4LCAxMzIsIDczLCA1MiwgMSwgMywgMjM3LCA1OSwgMTMyLCA3MywgCi0gICAgNTIsIDEsIDMsIDI1NCwgMTg3LCA1MiwgMSwgMywgMjU0LCAxODMsIDUyLCAxLCAzLCA2NiwgNTIsIDEsIDMsIDIzMywgMTE2LCAKLSAgICA2NiwgNTIsIDEsIDMsIDIwOSwgMTg1LCA1MiwgMSwgMywgMTk2LCA1MiwgMSwgMywgMjQ2LCAyMjQsIDUyLCAxLCAzLCAyNDAsIAotICAgIDE2MCwgNTIsIDEsIDMsIDE5LCAyMzcsIDYxLCA1MiwgMSwgMywgMjM3LCA3NSwgNTIsIDEsIDMsIDE5LCAyNDYsIDE5OCwgCi0gICAgNTIsIDEsIDMsIDI0NiwgMjAwLCA3LCAyMzEsIDE5NSwgMywgMSwgNzQsIDcsIDIzMSwgMTk1LCAzLCAxLCAxNDYsIDcsIAotICAgIDIzMSwgMTk1LCAzLCAxLCA2NiwgNywgMjMxLCAxOTUsIDMsIDEsIDE5NiwgMTksIDIzMSwgMTk1LCAzLCAxLCAyNDAsIDE2MCwgCi0gICAgMTksIDIzMSwgMTk1LCAzLCAxLCAyMzcsIDYxLCAxOSwgMjMxLCAxOTUsIDMsIDEsIDI0NiwgMjA5LCAxOSwgMjMxLCAxOTUsIAotICAgIDMsIDEsIDI0NiwgMTk4LCAxOSwgMjMxLCAxOTUsIDMsIDEsIDI0NiwgMjAwLCA3LCAzLCAxLCAyNTMsIDcxLCA3LCAzLCAxLCAKLSAgICA0NSwgMiwgMjM3LCA0NCwgMjA1LCA3LCAzLCAxLCAyNTUsIDYzLCAyLCAyMzcsIDQ0LCAyMDUsIDcsIDMsIDEsIDI1NSwgNzIsIAotICAgIDIsIDIzNywgNDQsIDIwNSwgNywgMywgMSwgMjU1LCA2OCwgMiwgMjM3LCA0NCwgMjA1LCA3LCAzLCAxLCAyNTUsIDYwLCAyLCAKLSAgICAyMzcsIDQ0LCAyMDUsIDcsIDMsIDEsIDI1NSwgNzAsIDIsIDIzNywgNDQsIDIwNSwgNywgMywgMSwgMjU1LCA1NywgMiwgCi0gICAgMjM3LCA0NCwgMjA1LCA3LCAzLCAxLCAyNTUsIDU3LCAyLCAyMzMsIDIwNiwgMjIsIDIzNywgNDQsIDIwNSwgNywgMywgMSwgCi0gICAgMjU1LCA1OSwgMiwgMjM3LCA0NCwgMjA1LCA3LCAzLCAxLCAyNTUsIDYxLCAyLCAyMzcsIDQ0LCAyMDUsIDcsIDMsIDEsIAotICAgIDI1NSwgNTYsIDIsIDIzNywgNDQsIDIwNSwgNywgMywgMSwgMjA5LCAyMTQsIDUyLCAxLCAyOCwgMjUyLCAyMzIsIDcsIDMsIAotICAgIDEsIDIzNSwgMzgsIDIxNCwgNywgMywgMSwgMjU1LCA0OCwgMiwgMjI3LCAxODAsIDcsIDMsIDYsIDEsIDI1NSwgNTUsIDIsIAotICAgIDgyLCA3LCAzLCAxLCAyNDYsIDE2OCwgMiwgODIsIDcsIDMsIDEsIDI1NSwgNzAsIDIsIDgyLCA3LCAzLCA2LCAxLCA5NywgMiwgCi0gICAgODIsIDcsIDMsIDEsIDIzNSwgMjMsIDIsIDgyLCA3LCAzLCAxLCA0NSwgMiwgMjM1LCAzNiwgODgsIDcsIDMsIDEsIDI1NSwgCi0gICAgNjMsIDIsIDIzNSwgMzYsIDg4LCA3LCAzLCAxLCAyNTUsIDcyLCAyLCAyMzUsIDM2LCA4OCwgNywgMywgMSwgMjU1LCA2NSwgCi0gICAgMiwgMjM1LCAzNiwgODgsIDcsIDMsIDEsIDI1NSwgNjcsIDIsIDIzNSwgMzYsIDg4LCA3LCAzLCAxLCAyNTUsIDU4LCAyLCAKLSAgICAyMzUsIDM2LCA4OCwgNywgMywgMSwgMjU1LCA2OCwgMiwgMjM1LCAzNiwgODgsIDcsIDMsIDEsIDI1NSwgNjAsIDIsIDIzNSwgCi0gICAgMzYsIDg4LCA3LCAzLCAxLCAyNTUsIDcwLCAyLCAyMzUsIDM2LCA4OCwgNywgMywgMSwgMjU1LCA1NywgMiwgMjM1LCAzNiwgCi0gICAgODgsIDcsIDMsIDEsIDI1NSwgNTksIDIsIDIzNSwgMzYsIDg4LCA3LCAzLCAxLCAyNTMsIDE0NiwgMiwgMjM1LCAzNiwgODgsIAotICAgIDcsIDMsIDEsIDI1NSwgNjksIDIsIDIzNSwgMzYsIDg4LCA3LCAzLCAxLCAyNTUsIDc0LCAyLCAyMzUsIDM2LCA4OCwgNywgMywgCi0gICAgMSwgMjU1LCA1NiwgMiwgMjM1LCAzNiwgODgsIDcsIDMsIDEsIDEwMiwgMiwgMjMxLCAyMDEsIDg4LCA3LCAzLCAxLCAyNDAsIAotICAgIDEyMCwgMiwgMjMxLCAyMDEsIDg4LCA3LCAzLCAxLCAyNTUsIDYzLCAyLCAyNDYsIDE3MSwgMjIsIDI0MCwgMTMzLCA3LCAzLCAKLSAgICAxLCAxNjEsIDIsIDIzMSwgMjAxLCA4OCwgNywgMywgMSwgMjQ2LCAxNTcsIDE2MSwgMiwgMjMxLCAyMDEsIDg4LCA3LCAzLCAKLSAgICAxLCAyMDAsIDI0NiwgMTU3LCAxNjEsIDIsIDIzMSwgMjAxLCA4OCwgNywgMywgMSwgMjQxLCAxNCwgMiwgMjMxLCAyMDEsIAotICAgIDg4LCA3LCAzLCAxLCAyNTUsIDU1LCAyLCAyMzEsIDIwMSwgODgsIDcsIDMsIDEsIDI0NiwgMTU3LCAxMzAsIDIsIDIzMSwgCi0gICAgMjAxLCA4OCwgNywgMywgMSwgMjUzLCAxNDYsIDIsIDIzMSwgMjAxLCA4OCwgNywgMywgMSwgOTcsIDIsIDIzMSwgMjAxLCAKLSAgICA4OCwgNywgMywgMSwgMjUzLCAxMDEsIDIsIDIzMSwgMjAxLCA4OCwgNTIsIDEsIDMsIDIwOSwgMjM3LCA3MSwgNTIsIDEsIDMsIAotICAgIDI1NCwgMTk0LCA1MiwgMSwgMywgMjU1LCA2MiwgMiwgMjQwLCAxNjgsIDUyLCAxLCAzLCAyNDYsIDI0MiwgNTIsIDEsIDMsIAotICAgIDIwMCwgMjQ2LCAxNTcsIDcyLCA1MiwgMSwgMywgMjU0LCAxOTEsIDUyLCAxLCAzLCAyMzUsIDQ2LCAyNTUsIDczLCAyLCA4MiwgCi0gICAgNTIsIDEsIDMsIDk1LCAyMTQsIDUyLCAxLCAzLCAyMDksIDIxMiwgNTIsIDEsIDMsIDI1NSwgNTUsIDIsIDgyLCA1MiwgMSwgCi0gICAgMywgMjQwLCAxNDYsIDUyLCAxLCAzLCA2LCA3NCwgNTIsIDEsIDMsIDYsIDI1NSwgNTUsIDIsIDgyLCA1MiwgMSwgMywgMjU1LCAKLSAgICA3MywgMiwgMjI3LCAyMDAsIDUyLCAxLCAzLCAyNTUsIDU4LCAyLCAyMzEsIDIwMSwgODgsIDUyLCAxLCAzLCAyNTUsIDU4LCAKLSAgICAyLCAyMzUsIDM2LCA4OCwgNTIsIDEsIDMsIDYsIDE0OSwgNTIsIDEsIDMsIDI1NSwgNjgsIDIsIDg4LCA1MiwgMSwgMywgCi0gICAgMjA5LCAyNTUsIDY4LCAyLCAxODIsIDI0NywgMywgNTIsIDEsIDMsIDI1NSwgNjAsIDIsIDQyLCA4OCwgNTIsIDEsIDMsIAotICAgIDI1NSwgNjAsIDIsIDIzMSwgMjAxLCA4OCwgNTIsIDEsIDMsIDYsIDE5OSwgNTIsIDEsIDMsIDIzNywgMTE4LCA3MywgNTIsIAotICAgIDEsIDMsIDI0NiwgMTk4LCA1MiwgMSwgMywgMjU1LCA1OSwgMiwgODgsIDUyLCAxLCAzLCAyNDYsIDIzMiwgNTIsIDEsIDMsIAotICAgIDI1NSwgNjEsIDIsIDIzNSwgMzYsIDg4LCA1MiwgMSwgMywgOTcsIDEyNSwgNTIsIDEsIDMsIDIzMywgOTIsIDUyLCAxLCAzLCAKLSAgICA2LCA2NiwgNTIsIDEsIDMsIDI1NSwgNjksIDIsIDg4LCA1MiwgMSwgMywgMjA5LCAxOTYsIDUyLCAxLCAzLCAyNTQsIDE5MywgCi0gICAgNTIsIDEsIDMsIDI1NSwgNTYsIDIsIDIzMSwgMjAxLCA4OCwgNTIsIDEsIDMsIDI1NSwgNTYsIDIsIDI0MCwgMTY4LCA1MiwgCi0gICAgMSwgMywgMjQ3LCA3NCwgNTIsIDEsIDMsIDIzNywgODksIDM2LCAyMzcsIDUwLCAyNDAsIDE2MywgMjM1LCAyNCwgMzYsIAotICAgIDIzNywgNTAsIDI0MCwgMTU5LCAyMzUsIDI0LCAzNiwgMjQ1LCAxOTIsIDUxLCAzNiwgMjMxLCAxNTAsIDc2LCAzNiwgMjI3LCAKLSAgICAyNTAsIDM2LCAyMjcsIDI0MSwgMzYsIDIyNywgMjUyLCAzNiwgMjI3LCAyMTUsIDM2LCAyMjIsIDI0NSwgMzYsIDIyMiwgCi0gICAgMjQzLCAzNiwgNywgMywgMSwgMjU1LCA1NywgNTEsIDM2LCAyMjcsIDIyMSwgMzYsIDIyNywgMjUxLCAzNiwgNDcsIDIzMCwgCi0gICAgMTI1LCA0NiwgMzYsIDIzNywgMjA4LCA0NiwgMzYsIDIzNywgMTcwLCA1MSwgMzYsIDI1NSwgOCwgNTEsIDM2LCAyNTQsIAotICAgIDI0NCwgNDYsIDM2LCAyNTUsIDUyLCA0NiwgMzYsIDcsIDMsIDEsIDIzMSwgMjMwLCAyNDYsIDE1NywgMTAyLCA0NiwgMzYsIAotICAgIDcsIDMsIDEsIDI1MywgNCwgMzYsIDcsIDMsIDEsIDI1MywgMTY4LCAzNiwgNywgMywgMSwgMjUzLCAxNjksIDM2LCA3LCAzLCAKLSAgICAxLCAyNTUsIDYyLCAyMzMsIDc5LCAzNiwgNywgMywgMSwgMjM1LCAzOCwgMjIyLCAyMjIsIDM2LCA3LCAzLCAxLCAyNDYsIAotICAgIDI0MiwgMzYsIDcsIDMsIDEsIDIxNCwgMzYsIDcsIDEsIDMsIDYsIDIxNCwgMzYsIDcsIDMsIDEsIDI1NCwgMTg2LCAzNiwgNywgCi0gICAgMywgMSwgMTQ5LCAzNiwgNywgMSwgMywgNiwgMTQ5LCAzNiwgNywgMSwgMywgNiwgMTg1LCAzNiwgNywgMywgMSwgMTk5LCAKLSAgICAzNiwgNywgMSwgMywgNiwgMTk5LCAzNiwgNywgMSwgMywgNiwgMTQ2LCAzNiwgNywgMywgMSwgMjU1LCA1NywgMjMzLCAxNDMsIAotICAgIDM2LCA3LCAzLCAxLCAxOTMsIDM2LCA3LCAzLCAxLCAxODIsIDE5MywgMzYsIDcsIDMsIDEsIDI1NCwgMTkzLCAzNiwgNDIsIAotICAgIDIzMSwgMjE0LCA0NiwgMzYsIDQxLCAyMzEsIDIxNCwgMjIsIDEwMywgMjMxLCAyMTQsIDUxLCA3LCA2LCAxLCAxMDIsIDIsIAotICAgIDI0NiwgMTc0LCA1MSwgNywgMywgMSwgMTAyLCAyLCAyNDYsIDE3NCwgNTEsIDcsIDYsIDEsIDQ1LCAyLCA1NiwgNDYsIDcsIAotICAgIDMsIDEsIDQ1LCAyLCA1NiwgNDYsIDcsIDYsIDEsIDQ1LCAyLCA1NiwgNTEsIDcsIDMsIDEsIDQ1LCAyLCA1NiwgNTEsIDcsIAotICAgIDYsIDEsIDQ1LCAyLCAyNDYsIDE2NywgNTEsIDcsIDMsIDEsIDQ1LCAyLCAyNDYsIDE2NywgNTEsIDcsIDYsIDEsIDI1NSwgCi0gICAgNjIsIDIsIDIzNSwgODcsIDIyLCAxNTUsIDcsIDMsIDEsIDI1NSwgNjIsIDIsIDIzNSwgODcsIDIyLCAxNTUsIDcsIDYsIDEsIAotICAgIDI1NSwgNjMsIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA2MywgMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNTUsIDYzLCAyLCA1NiwgCi0gICAgNTEsIDcsIDMsIDEsIDI1NSwgNjMsIDIsIDU2LCA1MSwgNywgNiwgMSwgMjU1LCA2MywgMiwgMjQ2LCAxNjcsIDUxLCA3LCAzLCAKLSAgICAxLCAyNTUsIDYzLCAyLCAyNDYsIDE2NywgNTEsIDcsIDYsIDEsIDI1NSwgNjMsIDIsIDIzMywgNzksIDcsIDMsIDEsIDI1NSwgCi0gICAgNjMsIDIsIDIzMywgNzksIDcsIDYsIDEsIDI1NSwgNjMsIDIsIDIzMCwgMTI1LCA1MSwgNywgMywgMSwgMjU1LCA2MywgMiwgCi0gICAgMjMwLCAxMjUsIDUxLCA3LCA2LCAxLCAxNjEsIDIsIDIzNywgODMsIDIyLCAyMzcsIDM2LCA3LCAzLCAxLCAxNjEsIDIsIAotICAgIDIzNywgODMsIDIyLCAyMzcsIDM2LCA3LCA2LCAxLCAxNjEsIDIsIDIzNywgODMsIDIyLCAxNTUsIDcsIDMsIDEsIDE2MSwgMiwgCi0gICAgMjM3LCA4MywgMjIsIDE1NSwgNywgNiwgMSwgMTYxLCAyLCAyMzAsIDEyNSwgNTEsIDcsIDMsIDEsIDE2MSwgMiwgMjMwLCAKLSAgICAxMjUsIDUxLCA3LCA2LCAxLCAxNjEsIDIsIDI0MCwgMTI4LCA1MSwgNywgMywgMSwgMTYxLCAyLCAyNDAsIDEyOCwgNTEsIDcsIAotICAgIDYsIDEsIDE2MSwgMiwgMjM1LCA4NywgMjIsIDIzNywgNDYsIDcsIDMsIDEsIDE2MSwgMiwgMjM1LCA4NywgMjIsIDIzNywgCi0gICAgNDYsIDcsIDYsIDEsIDI1NSwgNzIsIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA3MiwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAKLSAgICAyNTUsIDY1LCAyLCAyMzUsIDE2LCA3LCAzLCAxLCAyNTUsIDY1LCAyLCAyMzUsIDE2LCA3LCA2LCAxLCAyNTUsIDY2LCAyLCAKLSAgICA1NiwgNDYsIDcsIDMsIDEsIDI1NSwgNjYsIDIsIDU2LCA0NiwgNywgNiwgMSwgMjU1LCA2NiwgMiwgNTYsIDUxLCA3LCAzLCAKLSAgICAxLCAyNTUsIDY2LCAyLCA1NiwgNTEsIDcsIDYsIDEsIDI1NSwgNjYsIDIsIDIxOSwgNywgMywgMSwgMjU1LCA2NiwgMiwgCi0gICAgMjE5LCA3LCA2LCAxLCAyNTUsIDY2LCAyLCAyMzMsIDc5LCA3LCAzLCAxLCAyNTUsIDY2LCAyLCAyMzMsIDc5LCA3LCA2LCAxLCAKLSAgICAyNTUsIDY2LCAyLCAyNDAsIDE2MSwgNTEsIDcsIDMsIDEsIDI1NSwgNjYsIDIsIDI0MCwgMTYxLCA1MSwgNywgNiwgMSwgCi0gICAgMjU1LCA1NSwgMiwgMjQwLCAxMjgsIDUxLCA3LCAzLCAxLCAyNTUsIDU1LCAyLCAyNDAsIDEyOCwgNTEsIDcsIDYsIDEsIAotICAgIDI1NSwgNTUsIDIsIDIzMSwgMjAzLCAyMiwgMTU1LCA3LCAzLCAxLCAyNTUsIDU1LCAyLCAyMzEsIDIwMywgMjIsIDE1NSwgNywgCi0gICAgNiwgMSwgMjU1LCA2NywgMiwgMTU1LCA3LCAzLCAxLCAyNTUsIDY3LCAyLCAxNTUsIDcsIDYsIDEsIDI1NSwgNjcsIDIsIDU2LCAKLSAgICA1MSwgNywgMywgMSwgMjU1LCA2NywgMiwgNTYsIDUxLCA3LCA2LCAxLCAyNTUsIDY3LCAyLCAyNDYsIDE2NywgNTEsIDcsIDMsIAotICAgIDEsIDI1NSwgNjcsIDIsIDI0NiwgMTY3LCA1MSwgNywgNiwgMSwgMjU1LCA1OCwgMiwgNTYsIDUxLCA3LCAzLCAxLCAyNTUsIAotICAgIDU4LCAyLCA1NiwgNTEsIDcsIDYsIDEsIDI1NSwgNTgsIDIsIDU2LCAyNDAsIDE0NCwgMjIsIDIzNSwgMTYsIDcsIDMsIDEsIAotICAgIDI1NSwgNTgsIDIsIDU2LCAyNDAsIDE0NCwgMjIsIDIzNSwgMTYsIDcsIDYsIDEsIDI1NSwgNTgsIDIsIDI0NiwgMTY3LCA1MSwgCi0gICAgNywgMywgMSwgMjU1LCA1OCwgMiwgMjQ2LCAxNjcsIDUxLCA3LCA2LCAxLCAyNTUsIDU4LCAyLCAyMzAsIDEyNSwgNTEsIDcsIAotICAgIDMsIDEsIDI1NSwgNTgsIDIsIDIzMCwgMTI1LCA1MSwgNywgNiwgMSwgMjU1LCA2OCwgMiwgMTU1LCA3LCAzLCAxLCAyNTUsIAotICAgIDY4LCAyLCAxNTUsIDcsIDYsIDEsIDI1NSwgNjgsIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA2OCwgMiwgNTYsIDQ2LCA3LCAKLSAgICA2LCAxLCAyNTUsIDY4LCAyLCA1NiwgNTEsIDcsIDMsIDEsIDI1NSwgNjgsIDIsIDU2LCA1MSwgNywgNiwgMSwgMjU1LCA2MCwgCi0gICAgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIDYwLCAyLCA1NiwgNDYsIDcsIDYsIDEsIDI1NSwgNjAsIDIsIDU2LCA1MSwgNywgCi0gICAgMywgMSwgMjU1LCA2MCwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyNTUsIDYwLCAyLCAyNDYsIDE2NywgNTEsIDcsIDMsIDEsIAotICAgIDI1NSwgNjAsIDIsIDI0NiwgMTY3LCA1MSwgNywgNiwgMSwgMjU1LCA2MCwgMiwgMjMwLCAxMjUsIDUxLCA3LCAzLCAxLCAKLSAgICAyNTUsIDYwLCAyLCAyMzAsIDEyNSwgNTEsIDcsIDYsIDEsIDEzMCwgMiwgMjQwLCAxMjgsIDIyLCAxNTUsIDcsIDMsIDEsIAotICAgIDEzMCwgMiwgMjQwLCAxMjgsIDIyLCAxNTUsIDcsIDYsIDEsIDEzMCwgMiwgMjQwLCAxMjgsIDIyLCAyMTksIDcsIDMsIDEsIAotICAgIDEzMCwgMiwgMjQwLCAxMjgsIDIyLCAyMTksIDcsIDYsIDEsIDEzMCwgMiwgMjM3LCA4MywgMjIsIDIzNywgMzYsIDcsIDMsIAotICAgIDEsIDEzMCwgMiwgMjM3LCA4MywgMjIsIDIzNywgMzYsIDcsIDYsIDEsIDEzMCwgMiwgMjM3LCA4MywgMjIsIDE1NSwgNywgMywgCi0gICAgMSwgMTMwLCAyLCAyMzcsIDgzLCAyMiwgMTU1LCA3LCA2LCAxLCAyNTUsIDcwLCAyLCAxNTUsIDcsIDMsIDEsIDI1NSwgNzAsIAotICAgIDIsIDE1NSwgNywgNiwgMSwgMjU1LCA3MCwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIDcwLCAyLCA1NiwgNDYsIDcsIDYsIAotICAgIDEsIDI1NSwgNTcsIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA1NywgMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNTUsIDU3LCAyLCAKLSAgICA1NiwgNTEsIDcsIDMsIDEsIDI1NSwgNTcsIDIsIDU2LCA1MSwgNywgNiwgMSwgMjU1LCA1NywgMiwgNTYsIDI0MCwgMTQ0LCAKLSAgICAyMiwgMjM1LCAxNiwgNywgMywgMSwgMjU1LCA1NywgMiwgNTYsIDI0MCwgMTQ0LCAyMiwgMjM1LCAxNiwgNywgNiwgMSwgCi0gICAgMjU1LCA1NywgMiwgMjQ2LCAxNjcsIDUxLCA3LCAzLCAxLCAyNTUsIDU3LCAyLCAyNDYsIDE2NywgNTEsIDcsIDYsIDEsIAotICAgIDI1NSwgNTksIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA1OSwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNTUsIDU5LCAyLCA1NiwgCi0gICAgNTEsIDcsIDMsIDEsIDI1NSwgNTksIDIsIDU2LCA1MSwgNywgNiwgMSwgMjU1LCA1OSwgMiwgMjQwLCAxNTksIDIyLCA1NiwgCi0gICAgNDYsIDcsIDMsIDEsIDI1NSwgNTksIDIsIDI0MCwgMTU5LCAyMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNTUsIDU5LCAyLCAyNDEsIAotICAgIDI5LCAyMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIDU5LCAyLCAyNDEsIDI5LCAyMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNTUsIAotICAgIDU5LCAyLCA1NiwgMjQwLCAxNDQsIDIyLCA1NiwgNDYsIDcsIDMsIDEsIDI1NSwgNTksIDIsIDU2LCAyNDAsIDE0NCwgMjIsIAotICAgIDU2LCA0NiwgNywgNiwgMSwgMjU1LCA2MSwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIDYxLCAyLCA1NiwgNDYsIDcsIDYsIAotICAgIDEsIDI1NSwgNjEsIDIsIDU2LCA1MSwgNywgMywgMSwgMjU1LCA2MSwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyNTUsIDYxLCAyLCAKLSAgICAyNDYsIDE2NywgNTEsIDcsIDMsIDEsIDI1NSwgNjEsIDIsIDI0NiwgMTY3LCA1MSwgNywgNiwgMSwgMjU1LCA2MSwgMiwgCi0gICAgMjMwLCAxMjUsIDUxLCA3LCAzLCAxLCAyNTUsIDYxLCAyLCAyMzAsIDEyNSwgNTEsIDcsIDYsIDEsIDk3LCAyLCAyMzEsIAotICAgIDIwMywgNTEsIDcsIDMsIDEsIDk3LCAyLCAyMzEsIDIwMywgNTEsIDcsIDYsIDEsIDk3LCAyLCAyNDAsIDEyOCwgNTEsIDcsIAotICAgIDMsIDEsIDk3LCAyLCAyNDAsIDEyOCwgNTEsIDcsIDYsIDEsIDk3LCAyLCAyMzAsIDEyNSwgNTEsIDcsIDMsIDEsIDk3LCAyLCAKLSAgICAyMzAsIDEyNSwgNTEsIDcsIDYsIDEsIDk3LCAyLCAyNDAsIDEyOCwgMjIsIDE1NSwgNywgMywgMSwgOTcsIDIsIDI0MCwgCi0gICAgMTI4LCAyMiwgMTU1LCA3LCA2LCAxLCA5NywgMiwgMjM3LCA4MywgMjIsIDIxOSwgNywgMywgMSwgOTcsIDIsIDIzNywgODMsIAotICAgIDIyLCAyMTksIDcsIDYsIDEsIDI1NSwgNjksIDIsIDIwNSwgNywgMywgMSwgMjU1LCA2OSwgMiwgMjA1LCA3LCA2LCAxLCAKLSAgICAyNTUsIDY5LCAyLCA1NiwgNTEsIDcsIDMsIDEsIDI1NSwgNjksIDIsIDU2LCA1MSwgNywgNiwgMSwgMjU1LCA3MSwgMiwgCi0gICAgMjM3LCAzNiwgNywgMywgMSwgMjU1LCA3MSwgMiwgMjM3LCAzNiwgNywgNiwgMSwgMjU1LCA3MSwgMiwgMTU1LCA3LCAzLCAxLCAKLSAgICAyNTUsIDcxLCAyLCAxNTUsIDcsIDYsIDEsIDI1NSwgNzEsIDIsIDIxOSwgNywgMywgMSwgMjU1LCA3MSwgMiwgMjE5LCA3LCAKLSAgICA2LCAxLCAyNTUsIDcxLCAyLCA1NiwgNDYsIDcsIDMsIDEsIDI1NSwgNzEsIDIsIDU2LCA0NiwgNywgNiwgMSwgMjU1LCA3MSwgCi0gICAgMiwgNTYsIDUxLCA3LCAzLCAxLCAyNTUsIDcxLCAyLCA1NiwgNTEsIDcsIDYsIDEsIDI1NSwgNzQsIDIsIDU2LCA0NiwgNywgCi0gICAgMywgMSwgMjU1LCA3NCwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNTUsIDc0LCAyLCAyMTksIDcsIDMsIDEsIDI1NSwgNzQsIDIsIAotICAgIDIxOSwgNywgNiwgMSwgMjU1LCA2NCwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIDY0LCAyLCA1NiwgNDYsIDcsIDYsIDEsIAotICAgIDI1NSwgNTYsIDIsIDIyOSwgMTYyLCA3LCAzLCAxLCAyNTUsIDU2LCAyLCAyMjksIDE2MiwgNywgNiwgMSwgMjU1LCA1NiwgMiwgCi0gICAgNTYsIDUxLCA3LCAzLCAxLCAyNTUsIDU2LCAyLCA1NiwgNTEsIDcsIDYsIDEsIDI1NSwgNTYsIDIsIDI0NiwgMTY3LCA1MSwgCi0gICAgNywgMywgMSwgMjU1LCA1NiwgMiwgMjQ2LCAxNjcsIDUxLCA3LCAzLCAxLCAyNTUsIDY2LCAyLCAyNDYsIDE2NywgNTEsIDcsIAotICAgIDMsIDEsIDI1NSwgNjEsIDIsIDIxOSwgNywgMywgMSwgMjU1LCA3MSwgMiwgMjQ2LCAxNzQsIDQ2LCA3LCAzLCAxLCAyNTUsIAotICAgIDY0LCAyLCAyNDYsIDE3NCwgNDYsIDcsIDMsIDEsIDEwMiwgMiwgNDEsIDEzMiwgMjQwLCAxNDcsIDcsIDMsIDEsIDE4MiwgCi0gICAgMjU1LCA1OSwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAxODIsIDI1NSwgNTksIDIsIDIzMywgNzQsIDgyLCA3LCAzLCAxLCAxODIsIAotICAgIDI1NSwgNTksIDIsIDIwMSwgODIsIDcsIDYsIDEsIDI0MCwgMjM1LCAxOTMsIDcsIDMsIDEsIDIzNywgNzUsIDcsIDYsIDEsIAotICAgIDEwMiwgMiwgNTYsIDUxLCA3LCAzLCAxLCAxMDIsIDIsIDU2LCA1MSwgNywgNiwgMSwgMTAyLCAyLCAyNDYsIDE3MSwgNDYsIAotICAgIDcsIDMsIDEsIDEwMiwgMiwgMjQ2LCAxNzEsIDQ2LCA3LCA2LCAxLCAxMDIsIDIsIDIzMCwgMTI1LCAyMiwgMTU1LCA3LCAzLCAKLSAgICAxLCAxMDIsIDIsIDIzMCwgMTI1LCAyMiwgMTU1LCA3LCA2LCAxLCAxMDIsIDIsIDIzMCwgMTI1LCAyMiwgMjM3LCAzNiwgNywgCi0gICAgMywgMSwgMTAyLCAyLCAyMzAsIDEyNSwgMjIsIDIzNywgMzYsIDcsIDYsIDEsIDEwMiwgMiwgMjMwLCAxMjUsIDIyLCAyNDYsIAotICAgIDE3MSwgNDYsIDcsIDMsIDEsIDEwMiwgMiwgMjMwLCAxMjUsIDIyLCAyNDYsIDE3MSwgNDYsIDcsIDYsIDEsIDEwMiwgMiwgCi0gICAgMjMwLCAxMjUsIDIyLCAyMDUsIDcsIDMsIDEsIDEwMiwgMiwgMjMwLCAxMjUsIDIyLCAyMDUsIDcsIDYsIDEsIDEwMiwgMiwgCi0gICAgMjMwLCAxMjUsIDIyLCA1NiwgNTEsIDcsIDMsIDEsIDEwMiwgMiwgMjMwLCAxMjUsIDIyLCA1NiwgNTEsIDcsIDYsIDEsIAotICAgIDEwMiwgMiwgMjQwLCAxNjEsIDIyLCAxNTUsIDcsIDMsIDEsIDEwMiwgMiwgMjQwLCAxNjEsIDIyLCAxNTUsIDcsIDYsIDEsIAotICAgIDEwMiwgMiwgMjQwLCAxNjEsIDIyLCAyMzcsIDM2LCA3LCAzLCAxLCAxMDIsIDIsIDI0MCwgMTYxLCAyMiwgMjM3LCAzNiwgNywgCi0gICAgNiwgMSwgMTAyLCAyLCAyNDAsIDE2MSwgMjIsIDI0NiwgMTcxLCA0NiwgNywgMywgMSwgMTAyLCAyLCAyNDAsIDE2MSwgMjIsIAotICAgIDI0NiwgMTcxLCA0NiwgNywgNiwgMSwgMTAyLCAyLCAyNDAsIDE2MSwgMjIsIDIwNSwgNywgMywgMSwgMTAyLCAyLCAyNDAsIAotICAgIDE2MSwgMjIsIDIwNSwgNywgNiwgMSwgMTAyLCAyLCAyNDAsIDE2MSwgMjIsIDU2LCA1MSwgNywgMywgMSwgMTAyLCAyLCAKLSAgICAyNDAsIDE2MSwgMjIsIDU2LCA1MSwgNywgNiwgMSwgMTYxLCAyLCA1NiwgNTEsIDcsIDMsIDEsIDE2MSwgMiwgNTYsIDUxLCAKLSAgICA3LCA2LCAxLCAxNjEsIDIsIDI0NiwgMTcxLCA0NiwgNywgMywgMSwgMTYxLCAyLCAyNDYsIDE3MSwgNDYsIDcsIDYsIDEsIAotICAgIDE2MSwgMiwgMjA1LCA3LCAzLCAxLCAxNjEsIDIsIDIwNSwgNywgNiwgMSwgMTYxLCAyLCAyMzAsIDEyNSwgMjIsIDE1NSwgNywgCi0gICAgMywgMSwgMTYxLCAyLCAyMzAsIDEyNSwgMjIsIDE1NSwgNywgNiwgMSwgMTYxLCAyLCAyMzAsIDEyNSwgMjIsIDIzNywgMzYsIAotICAgIDcsIDMsIDEsIDE2MSwgMiwgMjMwLCAxMjUsIDIyLCAyMzcsIDM2LCA3LCA2LCAxLCAxNjEsIDIsIDIzMCwgMTI1LCAyMiwgCi0gICAgMjQ2LCAxNzEsIDQ2LCA3LCAzLCAxLCAxNjEsIDIsIDIzMCwgMTI1LCAyMiwgMjQ2LCAxNzEsIDQ2LCA3LCA2LCAxLCAxNjEsIAotICAgIDIsIDIzMCwgMTI1LCAyMiwgMjA1LCA3LCAzLCAxLCAxNjEsIDIsIDIzMCwgMTI1LCAyMiwgMjA1LCA3LCA2LCAxLCAxNjEsIAotICAgIDIsIDIzMCwgMTI1LCAyMiwgNTYsIDUxLCA3LCAzLCAxLCAxNjEsIDIsIDIzMCwgMTI1LCAyMiwgNTYsIDUxLCA3LCA2LCAxLCAKLSAgICAyNTUsIDU1LCAyLCAyNDYsIDE3MSwgNDYsIDcsIDMsIDEsIDI1NSwgNTUsIDIsIDI0NiwgMTcxLCA0NiwgNywgNiwgMSwgCi0gICAgMjU1LCA1NSwgMiwgNTYsIDUxLCA3LCAzLCAxLCAyNTUsIDU1LCAyLCA1NiwgNTEsIDcsIDYsIDEsIDEzMCwgMiwgNTYsIDUxLCAKLSAgICA3LCAzLCAxLCAxMzAsIDIsIDU2LCA1MSwgNywgNiwgMSwgMTMwLCAyLCAyNDYsIDE3MSwgNDYsIDcsIDMsIDEsIDEzMCwgMiwgCi0gICAgMjQ2LCAxNzEsIDQ2LCA3LCA2LCAxLCAxMzAsIDIsIDIzMCwgMTI1LCAyMiwgMTU1LCA3LCAzLCAxLCAxMzAsIDIsIDIzMCwgCi0gICAgMTI1LCAyMiwgMTU1LCA3LCA2LCAxLCAxMzAsIDIsIDIzMCwgMTI1LCAyMiwgMjM3LCAzNiwgNywgMywgMSwgMTMwLCAyLCAKLSAgICAyMzAsIDEyNSwgMjIsIDIzNywgMzYsIDcsIDYsIDEsIDEzMCwgMiwgMjMwLCAxMjUsIDIyLCAyNDYsIDE3MSwgNDYsIDcsIDMsIAotICAgIDEsIDEzMCwgMiwgMjMwLCAxMjUsIDIyLCAyNDYsIDE3MSwgNDYsIDcsIDYsIDEsIDEzMCwgMiwgMjMwLCAxMjUsIDIyLCAKLSAgICAyMDUsIDcsIDMsIDEsIDEzMCwgMiwgMjMwLCAxMjUsIDIyLCAyMDUsIDcsIDYsIDEsIDEzMCwgMiwgMjMwLCAxMjUsIDIyLCAKLSAgICA1NiwgNTEsIDcsIDMsIDEsIDEzMCwgMiwgMjMwLCAxMjUsIDIyLCA1NiwgNTEsIDcsIDYsIDEsIDEzMCwgMiwgMjQ2LCAxODgsIAotICAgIDIyLCAxNTUsIDcsIDMsIDEsIDEzMCwgMiwgMjQ2LCAxODgsIDIyLCAxNTUsIDcsIDYsIDEsIDEzMCwgMiwgMjQ2LCAxODgsIAotICAgIDIyLCAyMzcsIDM2LCA3LCAzLCAxLCAxMzAsIDIsIDI0NiwgMTg4LCAyMiwgMjM3LCAzNiwgNywgNiwgMSwgMTMwLCAyLCAKLSAgICAyNDYsIDE4OCwgMjIsIDI0NiwgMTcxLCA0NiwgNywgMywgMSwgMTMwLCAyLCAyNDYsIDE4OCwgMjIsIDI0NiwgMTcxLCA0NiwgCi0gICAgNywgNiwgMSwgMTMwLCAyLCAyNDYsIDE4OCwgMjIsIDIwNSwgNywgMywgMSwgMTMwLCAyLCAyNDYsIDE4OCwgMjIsIDIwNSwgCi0gICAgNywgNiwgMSwgMTMwLCAyLCAyNDYsIDE4OCwgMjIsIDU2LCA1MSwgNywgMywgMSwgMTMwLCAyLCAyNDYsIDE4OCwgMjIsIDU2LCAKLSAgICA1MSwgNywgNiwgMSwgOTcsIDIsIDU2LCA1MSwgNywgMywgMSwgOTcsIDIsIDU2LCA1MSwgNywgNiwgMSwgOTcsIDIsIDI0NiwgCi0gICAgMTcxLCA0NiwgNywgMywgMSwgOTcsIDIsIDI0NiwgMTcxLCA0NiwgNywgNiwgMSwgOTcsIDIsIDI0NiwgMTg4LCAyMiwgMTU1LCAKLSAgICA3LCAzLCAxLCA5NywgMiwgMjQ2LCAxODgsIDIyLCAxNTUsIDcsIDYsIDEsIDk3LCAyLCAyNDYsIDE4OCwgMjIsIDIzNywgMzYsIAotICAgIDcsIDMsIDEsIDk3LCAyLCAyNDYsIDE4OCwgMjIsIDIzNywgMzYsIDcsIDYsIDEsIDk3LCAyLCAyNDYsIDE4OCwgMjIsIDI0NiwgCi0gICAgMTcxLCA0NiwgNywgMywgMSwgOTcsIDIsIDI0NiwgMTg4LCAyMiwgMjQ2LCAxNzEsIDQ2LCA3LCA2LCAxLCA5NywgMiwgMjQ2LCAKLSAgICAxODgsIDIyLCAyMDUsIDcsIDMsIDEsIDk3LCAyLCAyNDYsIDE4OCwgMjIsIDIwNSwgNywgNiwgMSwgOTcsIDIsIDI0NiwgCi0gICAgMTg4LCAyMiwgNTYsIDUxLCA3LCAzLCAxLCA5NywgMiwgMjQ2LCAxODgsIDIyLCA1NiwgNTEsIDcsIDYsIDEsIDI1NSwgNjQsIAotICAgIDIsIDIzNywgMzYsIDcsIDMsIDEsIDI1NSwgNjQsIDIsIDIzNywgMzYsIDcsIDYsIDEsIDI1NSwgNjQsIDIsIDU2LCA1MSwgNywgCi0gICAgMywgMSwgMjU1LCA2NCwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyNTUsIDY0LCAyLCAyNDYsIDE3MSwgNDYsIDcsIDMsIDEsIAotICAgIDI1NSwgNjQsIDIsIDI0NiwgMTcxLCA0NiwgNywgNiwgMSwgMjU1LCA2NCwgMiwgMjA1LCA3LCAzLCAxLCAyNTUsIDY0LCAyLCAKLSAgICAyMDUsIDcsIDYsIDEsIDIyOCwgMTkyLCAyNTIsIDI0NSwgNywgMywgMSwgMjI4LCAxOTIsIDI1MiwgMjQ1LCA3LCA2LCAxLCAKLSAgICAyMjgsIDE5MiwgMTk2LCA3LCAzLCAxLCAyMjgsIDE5MiwgMTk2LCA3LCA2LCAxLCAyNTUsIDY0LCAyLCAyNDAsIDIwMiwgNywgCi0gICAgMywgMSwgMjU1LCA2NCwgMiwgMjQwLCAyMDIsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMjM3LCA3NywgMTksIDMsIDEsIAotICAgIDI0MCwgMTIwLCAyLCAyMzcsIDc0LCAxOSwgMywgMSwgMjQwLCAxMjAsIDIsIDE4NiwgMjIsIDIzNywgMzksIDE5LCAzLCAxLCAKLSAgICAyNDAsIDEyMCwgMiwgMTcyLCAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAxODYsIDIyLCAyNDAsIDEyNCwgCi0gICAgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAxODYsIDIyLCAKLSAgICAyMjgsIDE3OSwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyMjgsIDE3OSwgMTksIDYsIDEsIDI0MCwgMTIwLCAKLSAgICAyLCAyMzcsIDc3LCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDIzNywgNzQsIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgMTg2LCAKLSAgICAyMiwgMjM3LCAzOSwgMTksIDYsIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyMzcsIDM5LCAxOSwgNiwgMSwgMjQwLCAxMjAsIAotICAgIDIsIDE4NiwgMjIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDE3MiwgMjIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgCi0gICAgMjQwLCAxMjAsIDIsIDE4NiwgMjIsIDIyOCwgMTc5LCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDE3MiwgMjIsIDIyOCwgMTc5LCAKLSAgICAxOSwgMywgMSwgMjM1LCAyOCwgMiwgMjM3LCA3NywgMTksIDMsIDEsIDIzNSwgMjgsIDIsIDIzNywgNzQsIDE5LCAzLCAxLCAKLSAgICAyMzUsIDI4LCAyLCAxODYsIDIyLCAyMzcsIDM5LCAxOSwgMywgMSwgMjM1LCAyOCwgMiwgMTcyLCAyMiwgMjM3LCAzOSwgMTksIAotICAgIDMsIDEsIDIzNSwgMjgsIDIsIDE4NiwgMjIsIDI0MCwgMTI0LCAxOSwgMywgMSwgMjM1LCAyOCwgMiwgMTcyLCAyMiwgMjQwLCAKLSAgICAxMjQsIDE5LCA2LCAxLCAyMzUsIDI4LCAyLCAyMzcsIDc3LCAxOSwgNiwgMSwgMjM1LCAyOCwgMiwgMjM3LCA3NCwgMTksIDYsIAotICAgIDEsIDIzNSwgMjgsIDIsIDE4NiwgMjIsIDIzNywgMzksIDE5LCA2LCAxLCAyMzUsIDI4LCAyLCAxNzIsIDIyLCAyMzcsIDM5LCAKLSAgICAxOSwgNiwgMSwgMjM1LCAyOCwgMiwgMTg2LCAyMiwgMjQwLCAxMjQsIDE5LCA2LCAxLCAyMzUsIDI4LCAyLCAxNzIsIDIyLCAKLSAgICAyNDAsIDEyNCwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAyMzcsIDc3LCAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIDIzNywgNzQsIAotICAgIDE5LCAzLCAxLCAyNTIsIDIwNiwgMiwgMTg2LCAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAxNzIsIDIyLCAKLSAgICAyMzcsIDM5LCAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIDE4NiwgMjIsIDI0MCwgMTI0LCAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIAotICAgIDE3MiwgMjIsIDI0MCwgMTI0LCAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIDE4NiwgMjIsIDIyOCwgMTc5LCAxOSwgMywgMSwgCi0gICAgMjUyLCAyMDYsIDIsIDE3MiwgMjIsIDIyOCwgMTc5LCAxOSwgNiwgMSwgMjUyLCAyMDYsIDIsIDIzNywgNzcsIDE5LCA2LCAxLCAKLSAgICAyNTIsIDIwNiwgMiwgMjM3LCA3NCwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAxODYsIDIyLCAyMzcsIDM5LCAxOSwgNiwgMSwgCi0gICAgMjUyLCAyMDYsIDIsIDE3MiwgMjIsIDIzNywgMzksIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMTg2LCAyMiwgMjQwLCAxMjQsIAotICAgIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMTcyLCAyMiwgMjQwLCAxMjQsIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMTg2LCAyMiwgCi0gICAgMjI4LCAxNzksIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMTcyLCAyMiwgMjI4LCAxNzksIDE5LCAzLCAxLCAyNDYsIDE2OCwgCi0gICAgMiwgMjM3LCA3NywgMTksIDMsIDEsIDI0NiwgMTY4LCAyLCAyMzcsIDc0LCAxOSwgMywgMSwgMjQ2LCAxNjgsIDIsIDE4NiwgCi0gICAgMjIsIDIzNywgMzksIDE5LCAzLCAxLCAyNDYsIDE2OCwgMiwgMTcyLCAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIDI0NiwgMTY4LCAKLSAgICAyLCAxODYsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDI0NiwgMTY4LCAyLCAxNzIsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIAotICAgIDI0NiwgMTY4LCAyLCAxODYsIDIyLCAyMjgsIDE3OSwgMTksIDMsIDEsIDI0NiwgMTY4LCAyLCAxNzIsIDIyLCAyMjgsIDE3OSwgCi0gICAgMTksIDYsIDEsIDI0NiwgMTY4LCAyLCAyMzcsIDc3LCAxOSwgNiwgMSwgMjQ2LCAxNjgsIDIsIDIzNywgNzQsIDE5LCA2LCAxLCAKLSAgICAyNDYsIDE2OCwgMiwgMTg2LCAyMiwgMjM3LCAzOSwgMTksIDYsIDEsIDI0NiwgMTY4LCAyLCAxNzIsIDIyLCAyMzcsIDM5LCAKLSAgICAxOSwgNiwgMSwgMjQ2LCAxNjgsIDIsIDE4NiwgMjIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjQ2LCAxNjgsIDIsIDE3MiwgMjIsIAotICAgIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjQ2LCAxNjgsIDIsIDE4NiwgMjIsIDIyOCwgMTc5LCAxOSwgNiwgMSwgMjQ2LCAxNjgsIAotICAgIDIsIDE3MiwgMjIsIDIyOCwgMTc5LCAxOSwgMywgMSwgMjM1LCAzNSwgMiwgMjM3LCA3NywgMTksIDMsIDEsIDIzNSwgMzUsIAotICAgIDIsIDIzNywgNzQsIDE5LCAzLCAxLCAyMzUsIDM1LCAyLCAxODYsIDIyLCAyMzcsIDM5LCAxOSwgMywgMSwgMjM1LCAzNSwgMiwgCi0gICAgMTcyLCAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIDIzNSwgMzUsIDIsIDE4NiwgMjIsIDI0MCwgMTI0LCAxOSwgMywgMSwgMjM1LCAKLSAgICAzNSwgMiwgMTcyLCAyMiwgMjQwLCAxMjQsIDE5LCA2LCAxLCAyMzUsIDM1LCAyLCAyMzcsIDc3LCAxOSwgNiwgMSwgMjM1LCAKLSAgICAzNSwgMiwgMjM3LCA3NCwgMTksIDYsIDEsIDIzNSwgMzUsIDIsIDE4NiwgMjIsIDIzNywgMzksIDE5LCA2LCAxLCAyMzUsIAotICAgIDM1LCAyLCAxNzIsIDIyLCAyMzcsIDM5LCAxOSwgNiwgMSwgMjM1LCAzNSwgMiwgMTg2LCAyMiwgMjQwLCAxMjQsIDE5LCA2LCAKLSAgICAxLCAyMzUsIDM1LCAyLCAxNzIsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDIzNSwgMjMsIDIsIDIzNywgNzcsIDE5LCAzLCAKLSAgICAxLCAyMzUsIDIzLCAyLCAyMzcsIDc0LCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMTg2LCAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIAotICAgIDIzNSwgMjMsIDIsIDE3MiwgMjIsIDIzNywgMzksIDE5LCAzLCAxLCAyMzUsIDIzLCAyLCAxODYsIDIyLCAyNDAsIDEyNCwgCi0gICAgMTksIDMsIDEsIDIzNSwgMjMsIDIsIDE3MiwgMjIsIDI0MCwgMTI0LCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMTg2LCAyMiwgCi0gICAgMjI4LCAxNzksIDE5LCAzLCAxLCAyMzUsIDIzLCAyLCAxNzIsIDIyLCAyMjgsIDE3OSwgMTksIDYsIDEsIDIzNSwgMjMsIDIsIAotICAgIDIzNywgNzQsIDE5LCA2LCAxLCAyMzUsIDIzLCAyLCAxNzIsIDIyLCAyMzcsIDM5LCAxOSwgNiwgMSwgMjM1LCAyMywgMiwgCi0gICAgMTcyLCAyMiwgMjQwLCAxMjQsIDE5LCA2LCAxLCAyMzUsIDIzLCAyLCAxNzIsIDIyLCAyMjgsIDE3OSwgMTksIDMsIDEsIAotICAgIDI0MCwgMTIzLCAyLCAyMzcsIDc3LCAxOSwgMywgMSwgMjQwLCAxMjMsIDIsIDIzNywgNzQsIDE5LCAzLCAxLCAyNDAsIDEyMywgCi0gICAgMiwgMTg2LCAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAxNzIsIDIyLCAyMzcsIDM5LCAxOSwgMywgMSwgCi0gICAgMjQwLCAxMjMsIDIsIDE4NiwgMjIsIDI0MCwgMTI0LCAxOSwgMywgMSwgMjQwLCAxMjMsIDIsIDE3MiwgMjIsIDI0MCwgMTI0LCAKLSAgICAxOSwgMywgMSwgMjQwLCAxMjMsIDIsIDE4NiwgMjIsIDIyOCwgMTc5LCAxOSwgMywgMSwgMjQwLCAxMjMsIDIsIDE3MiwgMjIsIAotICAgIDIyOCwgMTc5LCAxOSwgNiwgMSwgMjQwLCAxMjMsIDIsIDIzNywgNzcsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgMjM3LCA3NCwgCi0gICAgMTksIDYsIDEsIDI0MCwgMTIzLCAyLCAxODYsIDIyLCAyMzcsIDM5LCAxOSwgNiwgMSwgMjQwLCAxMjMsIDIsIDE3MiwgMjIsIAotICAgIDIzNywgMzksIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgMTg2LCAyMiwgMjQwLCAxMjQsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgCi0gICAgMTcyLCAyMiwgMjQwLCAxMjQsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgMTg2LCAyMiwgMjI4LCAxNzksIDE5LCA2LCAxLCAKLSAgICAyNDAsIDEyMywgMiwgMTcyLCAyMiwgMjI4LCAxNzksIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMjM3LCAzOSwgMTksIDMsIDEsIAotICAgIDI0MCwgMTIwLCAyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDIzNSwgMjgsIDIsIDIzNywgMzksIDE5LCAzLCAxLCAyMzUsIDI4LCAKLSAgICAyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAyMzcsIDM5LCAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIDI0MCwgCi0gICAgMTI0LCAxOSwgMywgMSwgMjQ2LCAxNjgsIDIsIDIzNywgMzksIDE5LCAzLCAxLCAyNDYsIDE2OCwgMiwgMjQwLCAxMjQsIDE5LCAKLSAgICAzLCAxLCAyMzUsIDM1LCAyLCAyMzcsIDM5LCAxOSwgMywgMSwgMjM1LCAzNSwgMiwgMjQwLCAxMjQsIDE5LCAzLCAxLCAyMzUsIAotICAgIDIzLCAyLCAyMzcsIDM5LCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMjQwLCAxMjQsIDE5LCAzLCAxLCAyNDAsIDEyMywgMiwgCi0gICAgMjM3LCAzOSwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAxODYsIDIyLCAKLSAgICAyMjcsIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIwLCAKLSAgICAyLCAxODYsIDIyLCAyNDAsIDE2NSwgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjQwLCAxMjAsIDIsIDE3MiwgMjIsIDI0MCwgCi0gICAgMTY1LCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMTg2LCAyMiwgMjQ2LCAyMTAsIDIyLCAyMjcsIAotICAgIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyNDYsIDIxMCwgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgCi0gICAgMjQwLCAxMjAsIDIsIDE4NiwgMjIsIDIyOSwgMTY3LCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMTcyLCAKLSAgICAyMiwgMjI5LCAxNjcsIDIyLCAyMjcsIDEzMiwgMTksIDYsIDEsIDI0MCwgMTIwLCAyLCAxODYsIDIyLCAyMjUsIDEwNCwgMTksIAotICAgIDYsIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyMjUsIDEwNCwgMTksIDYsIDEsIDI0MCwgMTIwLCAyLCAxODYsIDIyLCAKLSAgICAyNDAsIDE2NSwgMjIsIDIyNSwgMTA0LCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDE3MiwgMjIsIDI0MCwgMTY1LCAyMiwgCi0gICAgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgMTg2LCAyMiwgMjQ2LCAyMTAsIDIyLCAyMjUsIDEwNCwgMTksIDYsIAotICAgIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyNDYsIDIxMCwgMjIsIDIyNSwgMTA0LCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIAotICAgIDE4NiwgMjIsIDIyOSwgMTY3LCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgMTcyLCAyMiwgMjI5LCAKLSAgICAxNjcsIDIyLCAyMjUsIDEwNCwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAxODYsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIAotICAgIDI1MiwgMjA2LCAyLCAxNzIsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAxODYsIDIyLCAyNDAsIDE2NSwgCi0gICAgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIDE3MiwgMjIsIDI0MCwgMTY1LCAyMiwgMjI3LCAxMzIsIDE5LCAKLSAgICAzLCAxLCAyNTIsIDIwNiwgMiwgMTg2LCAyMiwgMjQ2LCAyMTAsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI1MiwgMjA2LCAKLSAgICAyLCAxNzIsIDIyLCAyNDYsIDIxMCwgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIDE4NiwgMjIsIDIyOSwgCi0gICAgMTY3LCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNTIsIDIwNiwgMiwgMTcyLCAyMiwgMjI5LCAxNjcsIDIyLCAyMjcsIAotICAgIDEzMiwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAxODYsIDIyLCAyMjUsIDEwNCwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAKLSAgICAxNzIsIDIyLCAyMjUsIDEwNCwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAxODYsIDIyLCAyNDAsIDE2NSwgMjIsIDIyNSwgCi0gICAgMTA0LCAxOSwgNiwgMSwgMjUyLCAyMDYsIDIsIDE3MiwgMjIsIDI0MCwgMTY1LCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAxLCAKLSAgICAyNTIsIDIwNiwgMiwgMTg2LCAyMiwgMjQ2LCAyMTAsIDIyLCAyMjUsIDEwNCwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAxNzIsIAotICAgIDIyLCAyNDYsIDIxMCwgMjIsIDIyNSwgMTA0LCAxOSwgNiwgMSwgMjUyLCAyMDYsIDIsIDE4NiwgMjIsIDIyOSwgMTY3LCAyMiwgCi0gICAgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMTcyLCAyMiwgMjI5LCAxNjcsIDIyLCAyMjUsIDEwNCwgMTksIDMsIAotICAgIDEsIDI0MCwgMTIzLCAyLCAxODYsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAxNzIsIDIyLCAyMjcsIAotICAgIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAxODYsIDIyLCAyNDAsIDE2NSwgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgCi0gICAgMjQwLCAxMjMsIDIsIDE3MiwgMjIsIDI0MCwgMTY1LCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMywgMiwgMTg2LCAKLSAgICAyMiwgMjQ2LCAyMTAsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAxNzIsIDIyLCAyNDYsIDIxMCwgMjIsIAotICAgIDIyNywgMTMyLCAxOSwgMywgMSwgMjQwLCAxMjMsIDIsIDE4NiwgMjIsIDIyOSwgMTY3LCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAKLSAgICAxLCAyNDAsIDEyMywgMiwgMTcyLCAyMiwgMjI5LCAxNjcsIDIyLCAyMjcsIDEzMiwgMTksIDYsIDEsIDI0MCwgMTIzLCAyLCAKLSAgICAxODYsIDIyLCAyMjUsIDEwNCwgMTksIDYsIDEsIDI0MCwgMTIzLCAyLCAxNzIsIDIyLCAyMjUsIDEwNCwgMTksIDYsIDEsIAotICAgIDI0MCwgMTIzLCAyLCAxODYsIDIyLCAyNDAsIDE2NSwgMjIsIDIyNSwgMTA0LCAxOSwgNiwgMSwgMjQwLCAxMjMsIDIsIDE3MiwgCi0gICAgMjIsIDI0MCwgMTY1LCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgMTg2LCAyMiwgMjQ2LCAyMTAsIDIyLCAKLSAgICAyMjUsIDEwNCwgMTksIDYsIDEsIDI0MCwgMTIzLCAyLCAxNzIsIDIyLCAyNDYsIDIxMCwgMjIsIDIyNSwgMTA0LCAxOSwgNiwgCi0gICAgMSwgMjQwLCAxMjMsIDIsIDE4NiwgMjIsIDIyOSwgMTY3LCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgCi0gICAgMTcyLCAyMiwgMjI5LCAxNjcsIDIyLCAyMjUsIDEwNCwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAyMzUsIDgyLCAxOSwgMywgCi0gICAgMSwgMjQwLCAxMjAsIDIsIDIzNSwgMTYsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMjQwLCAxNjUsIDIyLCAyMjcsIDEzMiwgCi0gICAgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAyNDYsIDIxMCwgMjIsIAotICAgIDIyNywgMTMyLCAxOSwgMywgMSwgMjQwLCAxMjAsIDIsIDIyOCwgMTc5LCAxOSwgMywgMSwgMjQwLCAxMjAsIDIsIDIyOSwgCi0gICAgMTY3LCAyMiwgMjI3LCAxMzIsIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgMjM1LCA4MiwgMTksIDYsIDEsIDI0MCwgMTIwLCAyLCAKLSAgICAyMzUsIDE2LCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDIzNywgMzksIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgMjQwLCAxMjQsIAotICAgIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgMjI1LCAxMDQsIDE5LCAyMzMsIDE3MCwgMTksIDIyNSwgMTA0LCAxOSwgMjM3LCA3NywgCi0gICAgMTksIDIyOCwgMTc5LCAxOSwgMjMxLCAyMDcsIDIyLCAyMjgsIDE3OSwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAyNDAsIAotICAgIDE2NSwgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjUyLCAyMDYsIAotICAgIDIsIDI0NiwgMjEwLCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNTIsIDIwNiwgMiwgMjI4LCAxNzksIDE5LCAzLCAxLCAKLSAgICAyNTIsIDIwNiwgMiwgMjI5LCAxNjcsIDIyLCAyMjcsIDEzMiwgMTksIDYsIDEsIDIzNSwgMjgsIDIsIDIzNywgMzksIDE5LCAKLSAgICA2LCAxLCAyMzUsIDI4LCAyLCAyNDAsIDEyNCwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAyMzcsIDM5LCAxOSwgNiwgMSwgCi0gICAgMjUyLCAyMDYsIDIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjUyLCAyMDYsIDIsIDIyNSwgMTA0LCAxOSwgMTg2LCAyMiwgMjM3LCAKLSAgICAzOSwgMTksIDE4NiwgMjIsIDI0MCwgMTI0LCAxOSwgMTg2LCAyMiwgMjI4LCAxNzksIDE5LCAzLCAxLCAyNDYsIDE2OCwgMiwgCi0gICAgMjM1LCA4MiwgMTksIDMsIDEsIDI0NiwgMTY4LCAyLCAyMzUsIDE2LCAxOSwgMywgMSwgMjQ2LCAxNjgsIDIsIDIzMSwgMjA3LCAKLSAgICAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIDI0NiwgMTY4LCAyLCAyMzEsIDIwNywgMjIsIDI0MCwgMTI0LCAxOSwgMywgMSwgCi0gICAgMjQ2LCAxNjgsIDIsIDIyOCwgMTc5LCAxOSwgMywgMSwgMjQ2LCAxNjgsIDIsIDIzMSwgMjA3LCAyMiwgMjI4LCAxNzksIDE5LCAKLSAgICA2LCAxLCAyNDYsIDE2OCwgMiwgMjM1LCA4MiwgMTksIDYsIDEsIDI0NiwgMTY4LCAyLCAyMzUsIDE2LCAxOSwgNiwgMSwgCi0gICAgMjQ2LCAxNjgsIDIsIDIzNywgMzksIDE5LCA2LCAxLCAyNDYsIDE2OCwgMiwgMjQwLCAxMjQsIDE5LCAxNzIsIDIyLCAyMzcsIAotICAgIDM5LCAxOSwgMTcyLCAyMiwgMjQwLCAxMjQsIDE5LCAxNzIsIDIyLCAyMjgsIDE3OSwgMTksIDMsIDEsIDIzNSwgMjMsIDIsIAotICAgIDIzNSwgODIsIDE5LCAzLCAxLCAyMzUsIDIzLCAyLCAyMzUsIDE2LCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMjMxLCAyMDcsIAotICAgIDIyLCAyMzcsIDM5LCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMjMxLCAyMDcsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDI1MywgCi0gICAgNzAsIDIsIDIzNywgNzcsIDE5LCAzLCAxLCAyNTMsIDcwLCAyLCAyMzcsIDc0LCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMjI4LCAKLSAgICAxNzksIDE5LCAzLCAxLCAyMzUsIDIzLCAyLCAyMzEsIDIwNywgMjIsIDIyOCwgMTc5LCAxOSwgNiwgMSwgMjM1LCAyMywgMiwgCi0gICAgMjM1LCA4MiwgMTksIDYsIDEsIDIzNSwgMjMsIDIsIDIzNSwgMTYsIDE5LCA2LCAxLCAyMzUsIDIzLCAyLCAyMzcsIDM5LCAKLSAgICAxOSwgNiwgMSwgMjM1LCAyMywgMiwgMjQwLCAxMjQsIDE5LCA2LCAxLCAyNTMsIDcwLCAyLCAyMzcsIDc0LCAxOSwgMjMxLCAKLSAgICAyMDcsIDIyLCAyMzcsIDM5LCAxOSwgMjMxLCAyMDcsIDIyLCAyNDAsIDEyNCwgMTksIDIzNywgMzksIDE5LCAzLCAxLCAyNDAsIAotICAgIDEyMywgMiwgMjQwLCAxNjUsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAyMjcsIDEzMiwgMTksIDMsIAotICAgIDEsIDI0MCwgMTIzLCAyLCAyNDYsIDIxMCwgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjQwLCAxMjMsIDIsIDIyOCwgMTc5LCAKLSAgICAxOSwgMywgMSwgMjQwLCAxMjMsIDIsIDIyOSwgMTY3LCAyMiwgMjI3LCAxMzIsIDE5LCA2LCAxLCAyMzUsIDM1LCAyLCAyMzcsIAotICAgIDM5LCAxOSwgNiwgMSwgMjM1LCAzNSwgMiwgMjQwLCAxMjQsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgMjM3LCAzOSwgMTksIAotICAgIDYsIDEsIDI0MCwgMTIzLCAyLCAyNDAsIDEyNCwgMTksIDYsIDEsIDI0MCwgMTIzLCAyLCAyMjUsIDEwNCwgMTksIDI0MCwgCi0gICAgMTI0LCAxOSwgMjM3LCA3NCwgMjU0LCAxOTksIDI0MCwgMjMyLCAyNTQsIDIxMywgMjQwLCAyMzIsIDI1NCwgMTk5LCAyMzcsIAotICAgIDY5LCAyNTQsIDIxMywgMjM3LCA2OSwgMjI5LCAxNTQsIDIzNywgNjksIDIzMCwgNjIsIDIzNywgNjksIDIzMSwgMTQ0LCAKLSAgICAyMzcsIDY5LCAyMzcsIDI0OCwgMjM3LCA2OSwgMjI5LCAxNjEsIDIzNywgNjksIDI1MiwgMTgsIDIzNywgNjksIDI1MCwgNjAsIAotICAgIDIzNywgNjksIDI0NywgMjcsIDI0MSwgMjMsIDIzNywgNjksIDI0NywgMjcsIDI0MSwgMjMsIDIzMCwgODIsIDI0NywgMjcsIAotICAgIDI0MSwgMjMsIDIzNSwgMTI0LCAyMjcsIDE5NSwgNzYsIDIyNywgMTk4LCA3NiwgMjM1LCA2OSwgMjI5LCA0MywgMjM1LCA2OSwgCi0gICAgMjM3LCAyNDgsIDI0MCwgMTUxLCAyNTQsIDE5OSwgMjQwLCAxNTEsIDI1NCwgMjEzLCAyNDAsIDE1MSwgMTY5LCAxMjUsIDQ3LCAKLSAgICA2MSwgMjQwLCAxMzgsIDQ3LCAxODQsIDI0MCwgMTM4LCA0MiwgMjM3LCA2MiwgMjMxLCAxOTksIDc2LCA0MSwgMjM3LCA2MiwgCi0gICAgMjMxLCAxOTksIDc2LCAyMzcsIDYyLCAyNDEsIDE4NSwgMjMxLCAxOTksIDc2LCAyMzcsIDYyLCAyMjUsIDEwOSwgMjMxLCAKLSAgICAxOTksIDc2LCA0MiwgNDcsIDIzMSwgMTk5LCA3NiwgNDEsIDQ3LCAyMzEsIDE5OSwgNzYsIDQ3LCAyNDEsIDE4NSwgMjMxLCAKLSAgICAxOTksIDc2LCA0NywgMjI1LCAxMDksIDIzMSwgMTk5LCA3NiwgMjM1LCAxNjAsIDQ3LCAyMzUsIDE2MCwgMjM1LCA0NSwgCi0gICAgMjMwLCAxNjAsIDIzNSwgNDUsIDE2OCwgNTYsIDIzNSwgMTI4LCAxMzUsIDU2LCAyMzUsIDEyOCwgMTY5LCAyMzEsIDIxOCwgCi0gICAgMjMwLCA2NywgMjM3LCAyMDksIDI0NiwgMTY3LCAyMzAsIDEzMSwgMjMxLCAyNDIsIDIzMCwgMTMxLCAyMjcsIDE5NSwgMjMwLCAKLSAgICAxODIsIDIyNywgMTk4LCAyMzAsIDE4MiwgMjU0LCAxMzMsIDIyOSwgMjQ5LCAyMzAsIDYxLCAyMjcsIDE5NSwgMjMyLCAzMCwgCi0gICAgMjI3LCAxOTgsIDIzMiwgMzAsIDIzOSwgMTI1LCAyMzMsIDE3MywgMjM3LCA2OSwgMjUzLCAxMjksIDI0MSwgMTk0LCA1MywgCi0gICAgMjUzLCAxMjksIDI1MywgNTMsIDIzMywgMTE3LCA1MywgMjM3LCAxMTQsIDQ3LCAyMzcsIDExNCwgMjM3LCA0OSwgMjM3LCAKLSAgICAxMTQsIDIwMCwgMjM3LCAxMTQsIDIwMCwgNDcsIDIzNywgMTE0LCAyMDAsIDIzNywgNDksIDIzNywgMTE0LCAyMzcsIDE5NywgCi0gICAgMjM3LCA2MiwgMjI3LCAxODUsIDI0MCwgMTE3LCAyMzEsIDE5OSwgNzYsIDIzNywgNjIsIDIyNywgMTMzLCAyNDAsIDExNywgCi0gICAgMjMxLCAxOTksIDc2LCAyMzMsIDExLCA3NiwgNDcsIDIyOSwgMTY1LCA3NiwgMjI4LCAyMTMsIDIzMSwgMjIzLCAyMzIsIDYzLCAKLSAgICAxMTYsIDI0NywgNTcsIDI0MCwgMjA2LCAyMzIsIDI4LCAyMzcsIDIwOSwgMjMyLCA4MSwgMjM4LCAxMCwgMjM1LCA0NSwgCi0gICAgMjMzLCA3NiwgMjM3LCA4NCwgNDIsIDM3LCAyMzUsIDIyLCAyLCAyMzcsIDE5MCwgNDEsIDM3LCAyMzUsIDIyLCAyLCAyMzcsIAotICAgIDE5MCwgNDcsIDIzMywgODIsIDc2LCAyMzMsIDgyLCAyMjksIDE2NSwgNzYsIDIyOSwgMTY1LCAyMzMsIDgyLCA3NiwgMjM0LCAKLSAgICAyNDksIDUsIDI1MywgMTI1LCAyMDAsIDIzNSwgMjAxLCA1MywgODYsIDExNywgMjM1LCA0NSwgODYsIDgxLCAyMzUsIDQ1LCAKLSAgICAxODQsIDIzMSwgMTk4LCAyMDAsIDIzMCwgMTQwLCAyNDMsIDE1LCAyNTMsIDE5LCAxMzUsIDIzMiwgODAsIDIzNSwgMjQ1LCAKLSAgICAyMzAsIDEyMiwgMjMwLCAxNDUsIDI0MCwgMTcyLCA1MywgMjQ1LCAyMjksIDI0MCwgMTUxLCAyMzMsIDcwLCAyMzIsIDYzLCAKLSAgICAyMzgsIDIyMSwgMjI5LCAxNjEsIDc2LCAxNTIsIDU2LCAyMjgsIDE4MiwgMjMxLCAyMTIsIDIzNywgMTE0LCAyNDYsIDE2MCwgCi0gICAgNTYsIDIyOCwgMTgyLCAyNDYsIDE1OSwgNTYsIDIyOCwgMTgyLCAxMzUsIDU2LCAyMjgsIDE4MiwgMjQ2LCAxNjAsIDU2LCAKLSAgICA3NiwgMjM3LCA1MCwgMjM3LCA4NSwgMjMyLCA1NywgNjEsIDI0NiwgMTYwLCAyNDAsIDE2OSwgMjM3LCA2MCwgMTIsIDIzNywgCi0gICAgNjksIDI0NywgOCwgMjM1LCAxMjQsIDIzNCwgMTA5LCAyMjgsIDIyNSwgMjMxLCAyNTMsIDIzNywgMTY2LCAyMzEsIDI1MywgCi0gICAgMjMwLCAxMzEsIDIzMSwgMjUzLCAyNDAsIDE4MCwgMjM1LCAxNzgsIDIzMiwgNTQsIDIzMiwgNDcsIDIzMywgMTgyLCAyMzIsIAotICAgIDU0LCAyMzIsIDQ3LCAyMzUsIDE3OCwgMTAsIDIxMSwgMjMzLCAyMzYsIDIzMywgMTgyLCAxMCwgMjExLCAyMzMsIDIzNiwgCi0gICAgMjM0LCAxNjUsIDIxLCAyMzUsIDIwOSwgMjM2LCAxNjksIDIxLCAyMzUsIDIwOSwgMjI5LCAxNjMsIDI0MCwgMTI2LCAyMjksIAotICAgIDE2MywgNywgMywgMSwgNzQsIDIyOSwgMTYzLCAxNTgsIDIyOSwgMTYzLCAxNzMsIDIyOSwgMTYzLCAxODMsIDIyOSwgMTYzLCAKLSAgICAxOTQsIDIyOSwgMTYzLCAxODcsIDIyOSwgMTYzLCAxOTIsIDIyOSwgMTYzLCA3OSwgNTMsIDIyOSwgMTYzLCAyMzcsIDEyNCwgCi0gICAgMjI5LCAxNjMsIDIzNywgNTEsIDUzLCAyMjksIDE2MywgNDIsIDIyOCwgMTgwLCAyMjksIDE2MywgNDEsIDIyOCwgMTgwLCAKLSAgICAyMjksIDE2MywgNywgMywgMSwgMTk5LCAyMzEsIDE5NSwgMjQwLCAxMjYsIDIzMSwgMTk1LCAxMTgsIDIzMSwgMTk1LCAxMTMsIAotICAgIDIzMSwgMTk1LCAxNjYsIDIzMSwgMTk1LCAxNTgsIDIzMSwgMTk1LCAxNzMsIDIzMSwgMTk1LCAxODMsIDIzMSwgMTk1LCAKLSAgICAxOTQsIDIzMSwgMTk1LCAxODcsIDIzMSwgMTk1LCAxOTIsIDIzMSwgMTk1LCA3OSwgNTMsIDIzMSwgMTk1LCAyMzcsIDEyNCwgCi0gICAgMjMxLCAxOTUsIDIzNywgNTEsIDUzLCAyMzEsIDE5NSwgNDIsIDIyOCwgMTgwLCAyMzEsIDE5NSwgNDEsIDIyOCwgMTgwLCA3LCAKLSAgICAyMzEsIDE5NSwgMywgMSwgNTcsIDcsIDIzMSwgMTk1LCAzLCAxLCA3MiwgNywgMjMxLCAxOTUsIDMsIDEsIDczLCA3LCAyMzEsIAotICAgIDE5NSwgMywgMSwgMjU0LCAxODQsIDcsIDIzMSwgMTk1LCAzLCAxLCAyMzcsIDE0NCwgMjI3LCAyMzksIDUzLCAyNDAsIDE5NCwgCi0gICAgNTMsIDIzNCwgNDAsIDUzLCAyMzgsIDIyNiwgMjQzLCAxMDksIDUzLCAyNTAsIDIyNCwgNTMsIDI1MSwgMTUsIDUzLCAyNDQsIAotICAgIDE2MywgNTMsIDIzOSwgMTkzLCA1MywgMjQwLCAyMzQsIDUzLCAyNTQsIDE2LCA1MywgMTM5LCAyMzksIDI0NiwgNTMsIDI0OSwgCi0gICAgMjAzLCA1MywgMjQ5LCAyMzUsIDUzLCAyNTQsIDgyLCA1MywgMjQwLCA1MywgNTMsIDIzNSwgMTY3LCA1MywgMjM4LCAyMzcsIAotICAgIDI0NSwgNjQsIDUzLCAyNTEsIDEwNiwgNTMsIDIzNiwgOTgsIDUzLCAyMzYsIDAsIDUzLCAyMzYsIDEwNiwgNTMsIDI0OSwgCi0gICAgMTUxLCA1MywgMzYsIDQyLCAyMzUsIDE0LCA0NiwgMzYsIDQxLCAyMzUsIDE0LCA0NiwgMzYsIDE4MiwgNjEsIDI0NiwgMTY3LCAKLSAgICAyMzMsIDg3LCAzNiwgMjQwLCAxMjUsIDYxLCAyNDYsIDE2NywgMjMzLCA4NywgMzYsIDIyNywgMTg0LCA2NywgNDYsIDM2LCAKLSAgICAyMzEsIDIwOSwgNjcsIDQ2LCAzNiwgNDIsIDY3LCA0NiwgMzYsIDQxLCA2NywgNDYsIDM2LCAyNDYsIDE3NCwgMjMzLCA4NywgCi0gICAgMzYsIDIzMSwgMjA5LCAyNDYsIDE3NCwgMjMzLCA4NywgMzYsIDIyNywgMTg0LCAyNDYsIDE3NCwgMjMzLCA4NywgMzYsIAotICAgIDE1MiwgMTk3LCA0NiwgMzYsIDI0NiwgMTYwLCAxOTcsIDQ2LCAzNiwgMjMxLCAyMjIsIDIzNSwgMjAsIDM2LCAyMzEsIDIyMiwgCi0gICAgMjM1LCAyNywgMzYsIDIzMSwgMjIyLCAyMzMsIDkwLCAzNiwgMjMxLCAyMjIsIDIzNywgNDAsIDIzMCwgMTUxLCAzNiwgNDIsIAotICAgIDQxLCA2NywgNDYsIDM2LCAyMzEsIDIyMiwgMjM2LCAyMTAsIDM2LCAyMzEsIDIyMiwgMjM2LCAxMjEsIDM2LCAyMzEsIDIyMiwgCi0gICAgMjQwLCA2OCwgMjMzLCA3OCwgMjMxLCAxOTMsIDM2LCAyMzUsIDM3LCAyMzUsIDU0LCAyMzMsIDg3LCAzNiwgNDcsIDYxLCAKLSAgICAxOTUsIDIzMywgODcsIDM2LCAyMzUsIDI0NywgOTgsIDM2LCAyMzcsIDQ5LCAyMzMsIDU5LCAzNiwgMjQ2LCAyNDAsIDIzNywgCi0gICAgMTc0LCA0NiwgMzYsIDExNywgNjcsIDIzMywgODcsIDM2LCAxODIsIDQ3LCAyMzUsIDU0LCAyMzMsIDg3LCAzNiwgODEsIAotICAgIDIzNSwgMTQsIDIsIDE3MSwgMjMwLCAxMzQsIDM2LCAxMTcsIDIzNSwgMTQsIDIsIDE3MSwgMjMwLCAxMzQsIDM2LCA0MiwgCi0gICAgNjcsIDUxLCAzNiwgNDEsIDY3LCA1MSwgMzYsIDIzMywgMTQ1LCA0NiwgMjM1LCAxNDQsIDI1MywgMTYsIDIzMiwgNjUsIAotICAgIDE4MCwgMjUyLCAyMzAsIDIzNCwgMjM1LCAxNTksIDYsIDI1NCwgMTk0LCAyMzcsIDE3NywgMjM0LCAyOSwgMjM3LCA5NSwgCi0gICAgMjQ2LCAxNjcsIDk4LCAyNDksIDE0NCwgMjUzLCAxNiwgMjQ5LCAxNDEsIDI1MiwgNTMsIDI0MywgMTAzLCAyMzIsIDE3LCAKLSAgICAyMzQsIDIxNywgMjM3LCAxNzcsIDIzMCwgNTksIDk1LCAzLCAyMTQsIDk1LCA2LCAyMTIsIDIyOCwgMTg3LCA2LCAyMTIsIAotICAgIDE1OSwgNiwgMjEyLCAyMzgsIDM1LCAyMzIsIDE3LCAyMzgsIDM1LCAyMzQsIDM0LCAxMDcsIDEzNSwgMjUyLCAyMjMsIDk1LCAKLSAgICA2LCA3NCwgMjI4LCAxODcsIDYsIDc0LCA5NSwgNiwgMTQ5LCA5NSwgMywgMTQ5LCAyNTUsIDU4LCA0NSwgMjUyLCAyMTksIAotICAgIDk4LCAxNTksIDYsIDE5OSwgMjM5LCAxNTksIDUzLCAyNDAsIDE4MSwgMjMzLCA5LCAyMzAsIDI0MCwgOTUsIDYsIDI1NCwgCi0gICAgMTg3LCAxNTksIDYsIDI1NCwgMTg3LCAxNTksIDYsIDI1NCwgMTk2LCA5NSwgNiwgMTQ2LCAyMjgsIDE4NywgNiwgMTQ2LCAKLSAgICAxNTksIDYsIDE0NiwgMjI5LCA1MywgMjQ1LCAyMzYsIDIzMiwgNDMsIDIzNiwgMjE3LCA3NiwgMjMyLCAxMSwgNTMsIDI0NiwgCi0gICAgNCwgMTY1LCA1MywgMjMzLCA2MSwgMTU5LCA2LCAyNTQsIDE5MywgMjQ1LCA1NywgNTMsIDI1MywgMjU0LCA1MywgMjMzLCAKLSAgICA3MCwgMjUzLCAyNTQsIDUzLCAyMjgsIDE4NywgNiwgMjU0LCAxOTMsIDIwOSwgMTksIDMsIDEsIDI0MCwgMTQ2LCAyMzksIAotICAgIDYyLCA1MywgMjM0LCAyLCA1MywgOTUsIDYsIDI1NCwgMTg1LCAyMjgsIDE4NywgNiwgMjU0LCAxOTQsIDIzMiwgMTgwLCA5OCwgCi0gICAgOTUsIDMsIDcyLCA5NSwgNiwgNzIsIDk1LCA2LCAyNTQsIDE5MSwgMjA5LCA2LCAyNTQsIDE5MSwgOTUsIDYsIDE4NSwgOTUsIAotICAgIDMsIDczLCA5MiwgOTgsIDI1MywgMTcxLCA5OCwgMjQxLCAxNDMsIDk4LCAyNDEsIDExNiwgOTgsIDIzMCwgNzEsIDIzNSwgCi0gICAgMjE0LCAyMzUsIDk3LCA2LCAyNTQsIDE5NiwgMjMyLCAxODMsIDUzLCAxNTksIDMsIDI1MiwgMjIzLCAxNTksIDMsIDIzNywgCi0gICAgNjEsIDE1OSwgNiwgMjM3LCA2MSwgMTU5LCA2LCAyNTIsIDIyMywgMTU5LCAyNDAsIDE1NCwgMjMwLCAxOTYsIDIwOSwgMzAsIAotICAgIDYsIDIxNCwgMjA5LCAzMCwgNiwgMTQ5LCAyMDAsIDMwLCA2LCAxNDksIDIwOSwgMzAsIDYsIDI1NCwgMTkwLCAxNTksIDI3LCAKLSAgICA2LCAyMjIsIDIyMiwgMTU5LCAyNywgMywgMjIyLCAyMjIsIDE1OSwgMjcsIDMsIDcyLCAxNTksIDI3LCAzLCA3NCwgMTU5LCAKLSAgICAyNywgMywgMjU0LCAxOTIsIDIzNCwgMjAwLCAyNDAsIDEzOCwgMjA5LCAyMzAsIDE0MiwgMjUzLCAxMjksIDUzLCAyMjcsIAotICAgIDIxNiwgMjA5LCAzLCAyNTQsIDE5MSwgMTQsIDMyLCAyMzMsIDE2LCAyMzUsIDIxNCwgMjM3LCA4MCwgMjMzLCA3NiwgMTY4LCAKLSAgICAyNDAsIDM3LCAyMzcsIDgwLCAyMzMsIDc2LCAxMzUsIDIzNywgNCwgMjM3LCA4MCwgMjMzLCA3NiwgMTY4LCAyMzgsIDIxNywgCi0gICAgMjM3LCA4MCwgMjMzLCA3NiwgMTM1LCAyMzUsIDEyMiwgMjM3LCA4MCwgMjMzLCA3NiwgMTUyLCAyMzUsIDEyMiwgMjM3LCAKLSAgICA4MCwgMjMzLCA3NiwgMjQ2LCAxNjAsIDIzNSwgMTIyLCAyMzcsIDgwLCAyMzMsIDc2LCAxNjgsIDIzOCwgNjEsIDIzNywgODAsIAotICAgIDIzMywgNzYsIDI0NiwgMTU5LCAyMzYsIDIzMiwgMjM3LCA4MCwgMjMzLCA3NiwgMTY4LCAyMzYsIDYzLCAyMzcsIDgwLCAKLSAgICAyMzMsIDc2LCAxNTIsIDIzMywgMTYzLCAyMzcsIDgwLCAyMzMsIDc2LCAyNDYsIDE1OSwgMjMzLCAxNjMsIDIzNywgODAsIAotICAgIDIzMywgNzYsIDI0MCwgMTU1LCAyMzMsIDE2MywgMjMzLCA3NiwgMjMxLCAyMjcsIDExOCwgMjQwLCAxMTgsIDIwNywgMTE4LCAKLSAgICAyNDAsIDExOCwgMjA3LCAxMTMsIDI0MCwgMTE4LCAyMDcsIDE2NiwgMjQwLCAxMTgsIDIwNywgMTU4LCAyNDAsIDExOCwgCi0gICAgMjA3LCAxNzMsIDI0MCwgMTE4LCAyMDcsIDE4MywgMjQwLCAxMTgsIDIwNywgMTk0LCAyNDAsIDExOCwgMjA3LCAxODcsIAotICAgIDI0MCwgMTE4LCAyMDcsIDE5MiwgMjQwLCAxMTgsIDIwNywgMjQ2LCAxNzksIDI0MCwgMTE4LCAyMDcsIDIzNSwgNjgsIDI0MCwgCi0gICAgMTE4LCAyMDcsIDIzNSwgNzIsIDI0MCwgMTE4LCAyMDcsIDIzNywgMTAwLCAyNDAsIDExOCwgMjA3LCAxNjgsIDIzMywgNzUsIAotICAgIDI0MCwgMTE4LCAyMDcsIDI0NiwgMTU5LCAyMzMsIDc1LCAyNDAsIDExOCwgMjA3LCAxNjgsIDIzMSwgMTk2LCAzLCAyNDAsIAotICAgIDExOCwgMjA3LCAxMTgsIDMsIDI0MCwgMTE4LCAyMDcsIDExMywgMywgMjQwLCAxMTgsIDIwNywgMTY2LCAzLCAyNDAsIDExOCwgCi0gICAgMjA3LCAxNTgsIDMsIDI0MCwgMTE4LCAyMDcsIDE3MywgMywgMjQwLCAxMTgsIDIwNywgMTgzLCAzLCAyNDAsIDExOCwgMjA3LCAKLSAgICAxOTQsIDMsIDI0MCwgMTE4LCAyMDcsIDE4NywgMywgMjQwLCAxMTgsIDIwNywgMTkyLCAzLCAyNDAsIDExOCwgMjA3LCAyNDYsIAotICAgIDE3OSwgMywgMjQwLCAxMTgsIDIwNywgMjM1LCA2OCwgMywgMjQwLCAxMTgsIDIwNywgMjM1LCA3MiwgMywgMjQwLCAxMTgsIAotICAgIDIwNywgMjM3LCAxMDAsIDMsIDI0MCwgMTE4LCAyMDcsIDE2OCwgMjMzLCA3NSwgMywgMjQwLCAxMTgsIDIwNywgMjQ2LCAKLSAgICAxNTksIDIzMywgNzUsIDMsIDI0MCwgMTE4LCAyMDcsIDE2OCwgMjMxLCAxOTYsIDI0MCwgMTE4LCAyMDcsIDE2OCwgMjMzLCAKLSAgICAxMTcsIDI1NSwgNjIsIDIyMiwgMjIyLCAyNDAsIDExOCwgMjA3LCAyNDYsIDE1OSwgMjMxLCAxOTYsIDI0MCwgMTE4LCAyMDcsIAotICAgIDI1MywgNTMsIDIzMSwgMTk2LCAyNDAsIDExOCwgMjA3LCAyMDAsIDE2OCwgMjMzLCA3NSwgNywgMywgMSwgMjAwLCAyNTQsIAotICAgIDE5NCwgMjQwLCAxMTgsIDIwNywgMjUzLCAxNywgMjUwLCAyMDksIDE1LCAyNDAsIDExOCwgMjA3LCAyNDAsIDE4OSwgMjQzLCAKLSAgICA5MSwgMTUsIDI0MCwgMTE4LCAyMDcsIDI0MCwgMTg5LCAyMzEsIDE5NiwgMjQwLCAxMTgsIDIwNywgMTY4LCAyMzUsIDU2LCAKLSAgICAyMzEsIDE5NiwgMTE3LCA1OCwgMjM1LCAxOCwgNTgsIDgxLCA1OCwgMjMxLCAxOTEsIDU4LCA0MiwgNDEsIDU4LCA5OSwgCi0gICAgMTAzLCA1OCwgMjQwLCAxMzQsIDI0NiwgMTg0LCA1OCwgMjQwLCAxMzQsIDI0NiwgMTcwLCA1OCwgMjQwLCAxNDEsIDI0NiwgCi0gICAgMTcwLCA1OCwgMjQwLCAxNDEsIDI0NiwgMTg0LCA1OCwgMTE3LCA2NywgMiwgODIsIDgxLCA2NywgMiwgODIsIDExNywgMjQ3LCAKLSAgICAyMywgNTgsIDgxLCAyNDcsIDIzLCA1OCwgMTE3LCAxMzUsIDIzNywgMTgzLCA1OCwgMjM1LCAxOCwgMTM1LCAyMzcsIDE4MywgCi0gICAgNTgsIDgxLCAxMzUsIDIzNywgMTgzLCA1OCwgMjMxLCAxOTEsIDEzNSwgMjM3LCAxODMsIDU4LCAxMTcsIDY3LCAyLCAyNDAsIAotICAgIDEzMywgODEsIDY3LCAyLCAyNDAsIDEzMywgMTE3LCA2NywgMjQ2LCAxNzIsIDEyNSwgMjM1LCAxOCwgNjcsIDI0NiwgMTcyLCAKLSAgICAxMjUsIDgxLCA2NywgMjQ2LCAxNzIsIDEyNSwgMjMxLCAxOTEsIDY3LCAyNDYsIDE3MiwgMTI1LCA5OSwgMTAzLCA2NywgMiwgCi0gICAgMjQyLCAxNzUsIDExNywgNjcsIDIsIDg4LCA4MSwgNjcsIDIsIDg4LCAxMTcsIDY3LCAyLCAyNDAsIDIwMiwgODEsIDY3LCAyLCAKLSAgICAyNDAsIDIwMiwgNDIsIDQxLCAyNDcsIDIzLCA1OCwgNDIsIDQxLCA2NywgMiwgODIsIDIzMSwgMTkxLCAyMzcsIDE3MCwgNTgsIAotICAgIDIzNSwgMTgsIDY3LCAyLCAyNTMsIDkzLCAyMzAsIDE0MywgMjM1LCAxOCwgNjcsIDIsIDI1MywgOTMsIDIyOSwgMTc3LCAKLSAgICAyMzEsIDE5MSwgNjcsIDIsIDI1MywgOTMsIDIzMCwgMTQzLCAyMzEsIDE5MSwgNjcsIDIsIDI1MywgOTMsIDIyOSwgMTc3LCAKLSAgICA4MSwgNjcsIDIsIDIzNywgNzksIDIzMCwgMTM0LCAyMzEsIDE5MSwgNjcsIDIsIDIzNywgNzksIDIzMCwgMTQzLCAyMjcsIAotICAgIDE4NCwgMjUyLCAyMjgsIDIzMCwgMTk1LCA1OCwgMjMxLCAyMDksIDI1MiwgMjI4LCAyMzAsIDE5NSwgNTgsIDI0MCwgMTM0LCAKLSAgICAyNDYsIDE4NCwgNjcsIDE4MCwgMTgyLCAxMjUsIDExNywgNjcsIDE4MCwgMjUyLCAyMTksIDEwNywgODEsIDY3LCAxODAsIAotICAgIDEyNSwgMjI3LCAxODQsIDI0NiwgMTU3LCAyMzcsIDQwLCA1OCwgMjMxLCAyMDksIDI0NiwgMTU3LCAyMzcsIDQwLCA1OCwgCi0gICAgMTE3LCAyMzUsIDE0LCAyLCAxNzEsIDIzMywgMTM5LCAxMTcsIDIzNSwgMTQsIDIsIDE3MSwgMjMwLCAxMzQsIDIzNSwgMTgsIAotICAgIDIzNSwgMTQsIDIsIDE3MSwgMjI5LCAxNzcsIDIzNSwgMTgsIDIzNSwgMTQsIDIsIDE3MSwgMjMwLCAxNDMsIDgxLCAyMzUsIAotICAgIDE0LCAyLCAxNzEsIDIzMywgMTM5LCA4MSwgMjM1LCAxNCwgMiwgMTcxLCAyMzAsIDEzNCwgMjMxLCAxOTEsIDIzNSwgMTQsIAotICAgIDIsIDE3MSwgMjI5LCAxNzcsIDIzMSwgMTkxLCAyMzUsIDE0LCAyLCAxNzEsIDIzMCwgMTQzLCA4MSwgNjcsIDEwNywgMTE3LCAKLSAgICA1OCwgMjM1LCAxOCwgNjcsIDExNywgMTA2LCAyMzEsIDE5MSwgNTgsIDExNywgNjcsIDEwNywgODEsIDU4LCAxMTcsIDIzNywgCi0gICAgMTg2LCAyMzUsIDczLCAyMzUsIDE4LCAyMzcsIDE4NiwgMjM1LCA3MywgODEsIDIzNywgMTg2LCAyMzUsIDczLCAyMzEsIAotICAgIDE5MSwgMjM3LCAxODYsIDIzNSwgNzMsIDExNywgMjM1LCAxNCwgMTA3LCA4MSwgMjMzLCAxMDUsIDgxLCAyMzUsIDE0LCAKLSAgICAxMDcsIDExNywgMjMzLCAxMDUsIDExNywgNDcsIDY3LCAyLCA4MiwgNDIsIDQxLCA0NywgNjcsIDIsIDgyLCA4MSwgNDcsIAotICAgIDY3LCAyLCA4MiwgMTE3LCA0NywgNTgsIDIzNSwgMTgsIDQ3LCA1OCwgODEsIDQ3LCA1OCwgMjMxLCAxOTEsIDQ3LCA1OCwgCi0gICAgNDIsIDQxLCA0NywgNTgsIDk5LCAxMDMsIDQ3LCA1OCwgMjQwLCAxMzQsIDI0NiwgMTg0LCA0NywgNTgsIDI0MCwgMTM0LCAKLSAgICAyNDYsIDE3MCwgNDcsIDU4LCAyNDAsIDE0MSwgMjQ2LCAxNzAsIDQ3LCA1OCwgMjQwLCAxNDEsIDI0NiwgMTg0LCA0NywgNTgsIAotICAgIDExNywgMjM3LCA0OSwgNTgsIDgxLCAyMzcsIDQ5LCA1OCwgMTE3LCAyMzMsIDE1NiwgNTgsIDgxLCAyMzMsIDE1NiwgNTgsIAotICAgIDIzNSwgMTgsIDY3LCAyLCA0NywgODIsIDIzMSwgMTkxLCA2NywgMiwgNDcsIDgyLCAxMTcsIDIzNywgMTEwLCA1OCwgMjM1LCAKLSAgICAxOCwgMjM3LCAxMTAsIDU4LCA4MSwgMjM3LCAxMTAsIDU4LCAyMzEsIDE5MSwgMjM3LCAxMTAsIDU4LCAxMTcsIDY3LCAxODAsIAotICAgIDEyNSwgODEsIDY3LCAxODAsIDEyNSwgMTE3LCA2MywgNTgsIDIzNSwgMTgsIDYzLCA1OCwgODEsIDYzLCA1OCwgMjMxLCAKLSAgICAxOTEsIDYzLCA1OCwgMjM1LCAxOCwgNjMsIDY3LCAyNDYsIDE3MiwgMTI1LCAyMzUsIDE4LCA2MywgNjcsIDI1NCwgMjIzLCAKLSAgICAyMzIsIDMzLCAyMzUsIDE4LCA2MywgNjcsIDI1NCwgMjIzLCAyMzMsIDIyNiwgMiwgMTY5LCAxMjUsIDIzNSwgMTgsIDYzLCAKLSAgICA2NywgMjU0LCAyMjMsIDIzMywgMjI2LCAyLCA2MSwgMTI1LCAyMzUsIDE4LCA2MywgNDcsIDU4LCAyMzUsIDE4LCA2MywgNDcsIAotICAgIDY3LCAyNTQsIDIyMywgMjMyLCAzMywgODEsIDYzLCA2NywgMjQ2LCAxNzIsIDI0NiwgNTIsIDI0MCwgMTM0LCAyNDYsIDE4NCwgCi0gICAgNjcsIDE4MCwgMjM1LCA0MCwgMjQwLCAxNDEsIDI0NiwgMTcwLCA2NywgMTgwLCAyMzUsIDQwLCA5OSwgMTAzLCA2MywgNTgsIAotICAgIDQxLCA2NywgMiwgMywgMjM1LCAyMCwgMjMxLCAxOTEsIDY3LCAxMTcsIDEwNiwgMjM1LCAxOCwgNTgsIDE1MiwgODEsIDIzNSwgCi0gICAgNzMsIDExNywgNjcsIDIsIDYxLCA4MiwgODEsIDY3LCAyLCA2MSwgODIsIDQyLCA0MSwgNjcsIDIsIDYxLCA4MiwgMTE3LCAKLSAgICA2NywgMiwgNDcsIDYxLCA4MiwgODEsIDY3LCAyLCA0NywgNjEsIDgyLCA0MiwgNDEsIDY3LCAyLCA0NywgNjEsIDgyLCAxMTcsIAotICAgIDIyOSwgMTg2LCA1OCwgODEsIDIyOSwgMTg2LCA1OCwgNDIsIDQxLCAyMjksIDE4NiwgNTgsIDMyLCAyNDcsIDI0MSwgMjI5LCAKLSAgICAyMzgsIDIzNSwgNzksIDIyNywgMTg4LCAyNDIsIDEsIDIzNiwgNjYsIDI0MiwgMSwgMjQ2LCAyMTgsIDE5MCwgMjM4LCAyMTAsIAotICAgIDI0MCwgMTk1LCAyNDgsIDE1NSwgMjMxLCA4NCwgMjM3LCAxMzgsIDIzNSwgNDQsIDI1MywgMTYsIDE5MCwgMjU0LCAyMTYsIAotICAgIDIzNSwgNDQsIDI1MywgMTYsIDMsIDIzNSwgNDQsIDI1MywgMTYsIDIzMywgMTExLCAyNTQsIDIwMywgMjM1LCAxMzAsIDI0NiwgCi0gICAgMjE4LCAxOTAsIDIzNSwgMTE0LCAyNTQsIDIwMywgMjM1LCAxMzAsIDMsIDIzMywgMTExLCAyNTQsIDIwMywgMjM1LCAxMzAsIAotICAgIDI1MiwgMjU1LCAxMDYsIDIzOSwgMjA0LCAyNDAsIDE1NCwgMjMzLCAxMDEsIDI0MCwgMTU0LCAyMzAsIDE3OCwgMjQwLCAKLSAgICAxNTQsIDIzMCwgMTk2LCAyNDAsIDE3MiwgNTMsIDIyNywgMjU0LCA1MywgNTYsIDI0MCwgMTgwLCAyMzMsIDEzMCwgMjM3LCAKLSAgICA4NCwgMjUzLCAxMzMsIDIzNywgMTI0LCAyMzMsIDE0NSwgMjMxLCAxOTIsIDI0NiwgMTc0LCAyMzEsIDE5MiwgMjM4LCAxMzQsIAotICAgIDIzMSwgMTkyLCAzNywgMjQwLCAyMzMsIDI0OCwgMTEsIDI0MCwgMjMzLCAyMzcsIDE4MiwgMjQwLCAyMzMsIDIyOSwgNTQsIAotICAgIDk2LCAyMzEsIDI1MiwgNDEsIDIzNywgOTgsIDIzNywgOTgsIDIzMywgOTksIDIzNywgOTgsIDIzMiwgNywgMjM3LCA5OCwgCi0gICAgMjM0LCA1NywgMjQ2LCAyMTgsIDE5MCwgMjM1LCAxNjQsIDIzMywgMTMyLCA5NiwgMTkwLCAyMzMsIDEzMiwgOTYsIDIzNSwgCi0gICAgMjYsIDI0NiwgMjMwLCAyMzUsIDI2LCAyNTMsIDgxLCAyMjcsIDE4NiwgMjM3LCAxMTcsIDIzMSwgMjA4LCA0NywgMjMxLCAKLSAgICAyMDgsIDIzNywgNDksIDIzMSwgMjA4LCAyMzUsIDExNSwgMjMxLCAyMDgsIDIzNiwgMjQ5LCAyMzEsIDIwOCwgMjQwLCA3OSwgCi0gICAgMjMxLCAyMDgsIDIzMSwgMjA5LCAyMzEsIDIwOCwgMjMxLCAyMDksIDIzNSwgMTE1LCAyMzEsIDIwOCwgMjI3LCAxODQsIAotICAgIDIzNSwgMTE1LCAyMzEsIDIwOCwgMjMxLCAxNzcsIDIzNCwgMTYsIDIzOSwgMjE2LCAyMjksIDIxMCwgNTYsIDIzNywgMTI0LCAKLSAgICAyMzYsIDY1LCAyMzIsIDE5OSwgMjI5LCAyMTAsIDIzMCwgNjYsIDI0MCwgMTI4LCAyMzEsIDE5MiwgMjAwLCAyMDUsIDIzMywgCi0gICAgNzAsIDI1MCwgMjExLCAxOTMsIDI1MSwgMjI1LCAyNDEsIDIyLCAyNDAsIDg3LCAyMzMsIDEwMSwgMTkwLCAyMDUsIDI0MCwgCi0gICAgMTcyLCAyMDUsIDIyNywgMTQyLCAxMDUsIDk2LCAxOTAsIDIyNywgMTQyLCAxMDUsIDk2LCAyMjcsIDE4NywgMTA1LCA5NiwgCi0gICAgMjI3LCAxODcsIDI1MywgODUsIDE5MCwgMjMzLCAxODMsIDEwNSwgOTYsIDIzNSwgNTgsIDIyNywgMTg3LCAyNTMsIDQzLCAKLSAgICAyMzMsIDE4MywgMTA1LCA5NiwgMjM3LCA3OCwgMTA1LCA5NiwgMTkwLCAyMzcsIDc4LCAxMDUsIDk2LCAyMzcsIDc4LCAxMDUsIAotICAgIDE0NSwgMTA1LCA5NiwgMjM3LCA0OSwgMjA1LCAyNTMsIDE2NywgMTA1LCA5NiwgMjMwLCAxMzAsIDk2LCAyMjcsIDIwNCwgCi0gICAgMjMwLCAxMzAsIDk2LCAyMzAsIDI0NSwgMjMzLCAxODcsIDIzMCwgMjI1LCAyNTIsIDIzMCwgMjM5LCA4NSwgMjI3LCAyMDQsIAotICAgIDEwNSwgOTYsIDIyNywgMTg3LCAxMDUsIDE4MCwgMTQ1LCAyNTIsIDIzMCwgMjQwLCAxOTAsIDI1MywgMTYsIDI0MCwgMTkwLCAKLSAgICAxMDYsIDE0NSwgMjI3LCAxODcsIDEwNSwgOTYsIDI0MCwgMTk0LCAyMzUsIDkxLCAyMzcsIDUxLCAyMzcsIDY2LCAyNDYsIAotICAgIDE3NCwgMjU0LCAxOTgsIDEwNSwgOTYsIDI0NiwgMTc0LCAxMDUsIDk2LCAyMjksIDI0MiwgOTYsIDIzMSwgNjYsIDIzMCwgCi0gICAgNTcsIDk2LCAyNDcsIDUzLCAyMzUsIDkxLCAyNDEsIDM2LCAxMDUsIDk2LCAxMDUsIDE4MCwgMjU0LCAyMDUsIDIyOSwgMjQ1LCAKLSAgICAyMzMsIDk5LCAyNTMsIDIxMCwgMjMxLCAxMjksIDEwNSwgOTYsIDE5MCwgMTA1LCA5NiwgMjMxLCAyMzksIDk2LCAxOTAsIAotICAgIDIzMSwgMjM5LCA5NiwgMjM0LCAyMzQsIDIzMCwgMTMwLCA5NiwgMjMxLCAxOTAsIDE0NSwgMTA1LCA5NiwgMjI4LCAxNzUsIAotICAgIDE0NSwgMTA1LCA5NiwgMjMxLCAxOTAsIDEwNywgMTA1LCA5NiwgMjI4LCAxNzUsIDEwNywgMTA1LCA5NiwgMjMxLCAxOTAsIAotICAgIDI1MywgODUsIDE5MCwgMTA1LCA5NiwgMjI4LCAxNzUsIDI1MywgODUsIDE5MCwgMTA1LCA5NiwgMjQ3LCA4OSwgMjMwLCAKLSAgICAxMjgsIDI0NywgODksIDIyNywgMTgzLCAyMzMsIDE4NywgMTkwLCAyMzAsIDEzMCwgOTYsIDE5MCwgMjMwLCAxMjgsIDE5MCwgCi0gICAgMjI3LCAxODMsIDIzNSwgNTgsIDIzMSwgMTkwLCAyNTMsIDQzLCAxMDUsIDk2LCAyMzUsIDU4LCAyMjgsIDE3NSwgMjUzLCAKLSAgICA0MywgMTA1LCA5NiwgMjMxLCAxOTAsIDE0NSwgMjMwLCAxMzAsIDk2LCAyMjgsIDE3NSwgMTQ1LCAyMzAsIDEzMCwgOTYsIAotICAgIDIzNSwgNTgsIDIzMSwgMTkwLCAyNTMsIDQzLCAyMzAsIDEzMCwgOTYsIDIzNSwgNTgsIDIyOCwgMTc1LCAyNTMsIDQzLCAKLSAgICAyMzAsIDEzMCwgOTYsIDIzMSwgMTkwLCAxNDUsIDIyNywgMTgzLCAyMjgsIDE3NSwgMTQ1LCAyMzAsIDEyOCwgMjM1LCA1OCwgCi0gICAgMjMxLCAxOTAsIDI1MywgNDMsIDIyNywgMTgzLCAyMzUsIDU4LCAyMjgsIDE3NSwgMjUzLCA0MywgMjMwLCAxMjgsIDIzMiwgCi0gICAgNCwgMjMyLCA5LCAyMzMsIDEwNiwgMTQ1LCAxMDUsIDk2LCAyMzMsIDEwNywgMTQ1LCAxMDUsIDk2LCAyMzMsIDEwNiwgMTQ1LCAKLSAgICAyMzAsIDEzMCwgOTYsIDIzMywgMTA3LCAxNDUsIDIzMCwgMTMwLCA5NiwgMjQ2LCAyMTgsIDE5MCwgMjM0LCAxOTYsIDI0NiwgCi0gICAgMjE4LCAxOTAsIDIzNCwgMjM2LCAyMzcsIDc2LCAyNTMsIDE2LCAyMzMsIDgzLCAyNTMsIDE2LCAxOTAsIDEwMiwgMjM3LCAKLSAgICA3NiwgMjUzLCAxNiwgMTkwLCAxMDIsIDIzMywgODMsIDI1MywgMTYsIDIzNywgNzYsIDEwNiwgMTQ1LCAxMDUsIDk2LCAyMzMsIAotICAgIDgzLCAxMDYsIDE0NSwgMTA1LCA5NiwgMjM1LCA1OCwgMTAyLCAyMzcsIDc2LCAxMDYsIDI1MywgNDMsIDEwNSwgOTYsIDIzNSwgCi0gICAgNTgsIDEwMiwgMjMzLCA4MywgMTA2LCAyNTMsIDQzLCAxMDUsIDk2LCAyMzcsIDc2LCAxMDYsIDIsIDE5MCwgMTA1LCA5NiwgCi0gICAgMjMzLCA4MywgMTA2LCAyLCAxOTAsIDEwNSwgOTYsIDIzMiwgMjMyLCAyMzMsIDIyMCwgMjI3LCA3MywgMjMzLCAyMjAsIAotICAgIDIzNywgMTE3LCAzNywgMjQwLCAxOTAsIDI1MywgMTYsIDM3LCAyMzMsIDE0MiwgMjUzLCAxNiwgMzcsIDI0MCwgMTkwLCAKLSAgICAxMDYsIDE0NSwgMTA1LCA5NiwgMzcsIDIzMywgMTQyLCAxMDYsIDE0NSwgMTA1LCA5NiwgMzcsIDI0OCwgNCwgMzcsIDI0OCwgCi0gICAgMTIsIDMzLCAyNDAsIDE4MCwgMzMsIDIzNywgMTI0LCAzMywgMjM3LCAxNjYsIDMzLCAyMzMsIDEzMCwgMjM3LCA4NCwgMzMsIAotICAgIDU2LCAyMzEsIDE5MiwgMzMsIDI0NiwgMTc0LCAyMzEsIDE5MiwgMzMsIDIzMywgMTQ1LCAyMzEsIDE5MiwgMzMsIDIzNSwgCi0gICAgOTEsIDMzLCAyNDAsIDE1MSwgMjM1LCA1MSwgMjQwLCAxODAsIDIzNSwgNTEsIDIzNywgMTI0LCAyMzUsIDUxLCAyMzcsIAotICAgIDE2NiwgMjM1LCA1MSwgNTYsIDIzMSwgMTkyLCA0MSwgMjQwLCAxNDksIDQyLCAyNDAsIDE0OSwgMTAzLCAyNDAsIDE0OSwgCi0gICAgOTksIDI0MCwgMTQ5LCAyMzAsIDIyNywgMjM2LCAxNTgsIDI0MiwgOCwgMjM2LCA4NiwgMjM3LCA0OSwgNjEsIDI1MiwgMjE5LCAKLSAgICA0MSwgMjMwLCAxNDEsIDQ3LCA2MSwgMjUyLCAyMTksIDQ3LCA0MSwgMjMwLCAxNDEsIDI0NiwgMjE4LCAxOTAsIDIzOSwgCi0gICAgMjA1LCAxOTAsIDI0MiwgOCwgMjQ2LCAyMTgsIDE5MCwgMjM4LCAyMjMsIDIzNSwgMTk0LCA0NywgNjEsIDI1MiwgMjE5LCAKLSAgICA0NywgNDEsIDIzMCwgMTQxLCAyMzMsIDEwNiwgMjQyLCAxNiwgMjMxLCAyNDQsIDIzMywgMTA3LCAyNDIsIDE2LCAyMzEsIAotICAgIDI0NCwgMjM3LCAxMDQsIDIzMywgMTM2LCAyNTMsIDE2LCAyMzMsIDExMSwgMjU0LCAyMDMsIDIzNywgMTA0LCAyMzIsIDQ2LCAKLSAgICAyMzcsIDEwNCwgMjMzLCAxMzYsIDEwNiwgMTQ1LCAxMDUsIDk2LCAyMzMsIDExMSwgMjU0LCAyMDMsIDIzNywgMTA0LCAyMzMsIAotICAgIDEzNiwgMTQ1LCAxMDUsIDk2LCAyMzMsIDE0MiwgMjUzLCAxNiwgMjQwLCAxOTAsIDI1MywgMTYsIDIzMiwgMCwgMjMyLCAKLSAgICAyMDMsIDIzMiwgMTAxLCAyMzYsIDE0OSwgMjI5LCAzMiwgMjUyLCAxMTgsIDI0NCwgMTY1LCAyNTEsIDcxLCA0MSwgMjQwLCAKLSAgICAxMTcsIDIsIDI0NywgMTAsIDQxLCAyMzEsIDE5MywgMjQwLCAxNTQsIDIzNSwgMjYsIDI0NiwgMjMwLCAyNDAsIDE1NCwgCi0gICAgMjM1LCAyNiwgMjUzLCA4MSwgMjQwLCAxNTQsIDIyNywgMTg2LCAyNDAsIDE1NCwgMjM3LCAxMTcsIDIzNSwgNDEsIDIzMSwgCi0gICAgMTkyLCA1NiwgMjMxLCAxOTIsIDI0NywgNTMsIDIzMSwgMTkyLCAyMzMsIDEzMCwgMjM3LCAxNjYsIDIzNSwgMTU0LCA0MiwgCi0gICAgMjM3LCAxMDQsIDIzNywgMjQ2LCAyMzAsIDE0NywgMjMzLCAxMDEsIDQxLCAyMzcsIDEwNCwgMjM3LCAyNDYsIDIzMCwgMTQ3LCAKLSAgICAyMzMsIDEwMSwgNDIsIDIzMCwgMTQ3LCAyMzMsIDEwMSwgNDEsIDIzMCwgMTQ3LCAyMzMsIDEwMSwgMjAwLCAyNDAsIDEyOCwgCi0gICAgMjM1LCA5MSwgMjQwLCAxMzcsIDIzNSwgMjYsIDI1MywgODEsIDI0MCwgMTM3LCAyMzUsIDI2LCAyNDYsIDIzMCwgNDcsIAotICAgIDIzNSwgNjEsIDQ3LCAyMzEsIDIyOCwgNDcsIDIyNywgMTg2LCA0NywgMjM3LCAxMTcsIDIzMSwgMTIwLCAxMDUsIDIyLCAKLSAgICAyMzMsIDEzMiwgOTYsIDIzMSwgMTkwLCAyLCAyNDYsIDE2NCwgMjI4LCAxNzUsIDIsIDI0NiwgMTY0LCAyNDcsIDExNCwgCi0gICAgMjQ3LCA4OSwgMjMwLCAxMjgsIDI0NywgMTE0LCAyNDcsIDg5LCAyMjcsIDE4MywgMjMxLCAxOTAsIDEwNSwgMTgwLCAxNDUsIAotICAgIDIyNywgMTgzLCAyMjgsIDE3NSwgMTA1LCAxODAsIDE0NSwgMjMwLCAxMjgsIDEwNSwgMTgwLCAxNDUsIDIzMCwgMTI4LCAKLSAgICAxMDUsIDE4MCwgMTQ1LCAyMjcsIDE4MywgMTA1LCAxODAsIDE0NSwgMjMyLCA0LCAxMDUsIDE4MCwgMTQ1LCAyMzIsIDksIAotICAgIDI0NiwgMjE4LCAxOTAsIDIzNiwgMTkxLCAxNDUsIDIzNywgODEsIDI0NiwgMjE4LCAxOTAsIDIzNiwgMjQ2LCAxNDUsIDIzNywgCi0gICAgODEsIDE5MCwgMzcsIDI0MCwgMTkwLCAxMDYsIDE0NSwgMTA1LCA5NiwgMTkwLCAzNywgMjMzLCAxNDIsIDEwNiwgMTQ1LCAKLSAgICAxMDUsIDk2LCAzNywgMjQwLCAxOTAsIDEwNiwgMTQ1LCAxOTAsIDEwNSwgOTYsIDM3LCAyMzMsIDE0MiwgMTA2LCAxNDUsIAotICAgIDE5MCwgMTA1LCA5NiwgMjMxLCAxOTAsIDI1MywgODUsIDE5MCwgMjMwLCAxMzAsIDk2LCAyMjgsIDE3NSwgMjUzLCA4NSwgCi0gICAgMTkwLCAyMzAsIDEzMCwgOTYsIDIzMywgMTA2LCAyNTMsIDg1LCAxOTAsIDIzMCwgMTMwLCA5NiwgMjMzLCAxMDcsIDI1MywgCi0gICAgODUsIDE5MCwgMjMwLCAxMzAsIDk2LCAxOTAsIDIzNywgMTA0LCAyMzMsIDEzNiwgMjUzLCAxNiwgMjQ2LCAyMTgsIDE5MCwgCi0gICAgMjM1LCAxMTQsIDI1NCwgMjAzLCAyMzcsIDEwNCwgMjMyLCA0NiwgMTkwLCAyMzcsIDEwNCwgMjMzLCAxMzYsIDEwNiwgMTQ1LCAKLSAgICAxMDUsIDk2LCAyNDYsIDIxOCwgMTkwLCAyMzUsIDExNCwgMjU0LCAyMDMsIDIzNywgMTA0LCAyMzMsIDEzNiwgMTQ1LCAyMzcsIAotICAgIDgxLCA2MSwgMjMxLCAyMTgsIDIzNiwgMTU1LCAxNjksIDIzMSwgMjE4LCA5OSwgNDEsIDIzMywgNzQsIDIzMSwgMjE4LCAKLSAgICAxMDMsIDQxLCAyMzMsIDc0LCAyMzEsIDIxOCwgMjM1LCA0NCwgMTA2LCAyLCAxODIsIDE2OSwgODIsIDIzNSwgNDQsIDEwNiwgCi0gICAgMiwgNjEsIDI1MiwgMjE5LCAyNTQsIDIxNywgMjUyLCAyNTUsIDEwNiwgMTY5LCA4MiwgMywgMjM1LCA0NCwgMTA2LCAyLCAKLSAgICA2MSwgMjUyLCAyMTksIDI1NCwgMjE3LCAyNTIsIDI1NSwgMTA2LCAxNjksIDgyLCAyMzUsIDQ0LCAxMDYsIDIsIDU2LCA0NiwgCi0gICAgMjM1LCA0NCwgMTA2LCAyLCAyMzMsIDk1LCAzLCAyMzUsIDQ0LCAxMDYsIDIsIDIzMywgOTUsIDIzNSwgNDQsIDEwNiwgMiwgCi0gICAgMjMxLCAxOTcsIDIzNSwgNDQsIDEwNiwgMiwgMTM1LCAxNjksIDIzMywgMjQzLCAyMzMsIDExMSwgMiwgMTgyLCAxNjksIDgyLCAKLSAgICAyMzMsIDExMSwgMiwgNjEsIDI1MiwgMjE5LCAyNTQsIDIxNywgMjUyLCAyNTUsIDEwNiwgMTY5LCA4MiwgMywgMjMzLCAxMTEsIAotICAgIDIsIDYxLCAyNTIsIDIxOSwgMjU0LCAyMTcsIDI1MiwgMjU1LCAxMDYsIDE2OSwgODIsIDIzMywgMTExLCAyLCAyMzMsIDk1LCAKLSAgICAzLCAyMzMsIDExMSwgMiwgMjMzLCA5NSwgMjU1LCA1NiwgMTUwLCAyNTMsIDE3MCwgMjMwLCA3OSwgMjM0LCA1MSwgNTMsIAotICAgIDIzNCwgOTQsIDU4LCAyMzksIDI3LCA5OSwgMjMwLCAxMzMsIDEwMywgMjMwLCAxMzMsIDIzMCwgOTIsIDIyOSwgNDgsIDI0NiwgCi0gICAgMjM5LCAyNDAsIDEzOCwgNDIsIDIzMywgMTkwLCA0MSwgMjMzLCAxOTAsIDQyLCAyMzcsIDI0OSwgNDEsIDIzNywgMjQ5LCAKLSAgICAyMzcsIDU5LCA0MSwgMjQwLCAyNDcsIDIzNywgNTksIDQyLCAyNDAsIDI0NywgMjUyLCAyMjgsIDQxLCAyNDAsIDI0NywgCi0gICAgMjUyLCAyMjgsIDQyLCAyNDAsIDI0NywgMjAwLCAxOTAsIDUzLCAzNywgMjMzLCAxMjMsIDI0NywgMTAsIDIzNCwgMjE4LCAKLSAgICAyMzYsIDIxNSwgMjMyLCAxMSwgMjMzLCA4LCAyMzQsIDE5NSwgMjMwLCAxNTYsIDIzNSwgNiwgMjM1LCAyNywgMjQxLCAyMTQsIAotICAgIDEwNiwgMjM0LCAxMzAsIDUzLCAyMDksIDE5MCwgNTMsIDIzOCwgODEsIDIzMCwgMTY3LCAyNTIsIDIyOCwgNDIsIDIzNSwgCi0gICAgNDAsIDI1MiwgMjI4LCA0MSwgMjM1LCA0MCwgMjM3LCA1OSwgNDIsIDIzNSwgNDAsIDIzNywgNTksIDQxLCAyMzUsIDQwLCAKLSAgICAyNTIsIDIyOCwgMTMyLCAyMzEsIDIwOCwgMjM3LCA1OSwgMTMyLCAyMzEsIDIwOCwgMjM4LCAyMjcsIDI0MCwgNiwgOTksIAotICAgIDIzMSwgMjE0LCAyMzYsIDEwLCAxMzUsIDE2OSwgMjQyLCAxNzQsIDIzOSwgMTc1LCAyNTAsIDE2MiwgMjQxLCAxMjcsIDE4MCwgCi0gICAgMjUyLCAyMzAsIDIzNywgNDEsIDI1NSwgNzQsIDI1NCwgMTk4LCAxMDIsIDIzMywgMTAsIDI0NiwgMjMxLCAyMzIsIDIxNCwgCi0gICAgMjI3LCAxODUsIDI0MCwgMTE3LCAxMDQsIDIyNywgMTMzLCAyNDAsIDExNywgMTA0LCAyNDEsIDEyNywgMTgwLCAyNTIsIAotICAgIDIzMCwgMjQwLCAxMzIsIDIzNSwgMTUwLCAyNDAsIDE0NywgMjI3LCAyMjMsIDI1MywgMTY3LCAyMjUsIDExMSwgMjMzLCA0OSwgCi0gICAgMjQ2LCAzLCAyMzYsIDIwMiwgMjMyLCAxMTMsIDIzNiwgMTc4LCAyMzYsIDM2LCAyNDAsIDI5LCAyNDAsIDQsIDIyOCwgMjMzLCAKLSAgICAyMjgsIDIzNCwgMTYyLCAxNjMsIDE0LCAyMzYsIDEwOCwgMTYyLCAxNjMsIDE0LCAyNDAsIDE1LCAyNDAsIDIzMiwgMTYyLCAKLSAgICAxNjMsIDE0LCAyNDYsIDE4OSwgMjM3LCA4MSwgMTYyLCAxNjMsIDE0LCAyNDYsIDE4OSwgMjM1LCAxNjQsIDE2MiwgMTYzLCAKLSAgICAxNCwgMjQ2LCAxODksIDIzMywgOTAsIDE2MiwgMTYzLCAxNCwgMjQ2LCAxODksIDI0NywgMTUsIDE2MiwgMTYzLCAxNCwgCi0gICAgMjQ2LCAxODksIDIzNSwgMjAsIDE2MiwgMTYzLCAxNCwgMjM3LCA0MCwgMjM3LCAxNjQsIDE2MiwgMTYzLCAxNCwgMjM3LCAKLSAgICA0MCwgMjQ3LCAxNSwgMTYyLCAxNjMsIDE0LCAyNDUsIDE5MSwgMTI1LCAxNjIsIDE2MywgMTQsIDIzMiwgODMsIDEyNSwgCi0gICAgMTYyLCAxNjMsIDE0LCAyNDYsIDE4OSwgMjM3LCA4NCwgMTYyLCAxNjMsIDE0LCAyNDYsIDE4OSwgMjMwLCAxNTEsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjQ2LCAxODksIDIzMCwgMTI4LCAxNjIsIDE2MywgMTQsIDI0NiwgMTg5LCAyMjcsIDE4MywgMTYyLCAxNjMsIAotICAgIDE0LCAxMTcsIDI0MSwgMjEsIDE2MiwgMTYzLCAxNCwgODEsIDI0MSwgMjEsIDE2MiwgMTYzLCAxNCwgMjQ2LCAxODksIDExNywgCi0gICAgNTgsIDE2MiwgMTYzLCAxNCwgMjQ2LCAxODksIDgxLCA1OCwgMTYyLCAxNjMsIDE0LCAyMzcsIDQwLCAyMzAsIDE1MSwgMTYyLCAKLSAgICAxNjMsIDE0LCAxMDMsIDI0NiwgMjE1LCAyMzEsIDE5NywgMTYyLCAxNjMsIDE0LCAyNDEsIDM2LCAyMzcsIDE2NCwgMTYyLCAKLSAgICAxNjMsIDE0LCAyNDYsIDE4OSwgMTAzLCAyMzcsIDE5NywgMTYyLCAxNjMsIDE0LCAyNDYsIDE4OSwgMjM3LCA3NSwgMTYyLCAKLSAgICAxNjMsIDE0LCAxMDMsIDI0NiwgMjE1LCAyNDcsIDE1LCAxNjIsIDE2MywgMTQsIDIzNSwgMTgsIDI0MSwgMjEsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjQ2LCAxODksIDIzNSwgMTgsIDU4LCAxNjIsIDE2MywgMTQsIDk5LCAyNDYsIDIxNSwgMjMzLCA5NSwgMTYyLCAKLSAgICAxNjMsIDE0LCAyNTMsIDE3MywgMjM3LCAxNjQsIDE2MiwgMTYzLCAxNCwgMjQ2LCAxODksIDk5LCAyMzcsIDE5NywgMTYyLCAKLSAgICAxNjMsIDE0LCAyNDYsIDE4OSwgMjQ5LCAxODUsIDE2MiwgMTYzLCAxNCwgOTksIDI0NiwgMjE1LCAyNDcsIDE1LCAxNjIsIAotICAgIDE2MywgMTQsIDIzMSwgMTkxLCAyNDEsIDIxLCAxNjIsIDE2MywgMTQsIDI0NiwgMTg5LCAyMzEsIDE5MSwgNTgsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjQxLCAyMTgsIDIzMSwgMTk3LCAxNjIsIDE2MywgMTQsIDI0MSwgMzYsIDIzMSwgMTk3LCAxNjIsIDE2MywgCi0gICAgMTQsIDIzNSwgNDEsIDIzMSwgMTk3LCAxNjIsIDE2MywgMTQsIDI1MywgMjM2LCAyMzEsIDE5NywgMTYyLCAxNjMsIDE0LCAKLSAgICAyMzcsIDQwLCAyMzEsIDE5NywgMTYyLCAxNjMsIDE0LCA5OSwgMjQ3LCAyMDEsIDI0NywgMTUsIDE2MiwgMTYzLCAxNCwgCi0gICAgMjQxLCAyMTgsIDI0MCwgMjMyLCAxNjIsIDE2MywgMTQsIDIzNywgNDAsIDI0MCwgMTM5LCAxNjIsIDE2MywgMTQsIDI0NiwgCi0gICAgMTg5LCAyMzcsIDY2LCAxNjIsIDE2MywgMTQsIDk5LCAyNDYsIDIxNSwgMjE5LCAxNjIsIDE2MywgMTQsIDI1MywgMTczLCAKLSAgICAyMTksIDE2MiwgMTYzLCAxNCwgMjQ3LCA1MywgMjE5LCAxNjIsIDE2MywgMTQsIDI1MywgMjM2LCAyMTksIDE2MiwgMTYzLCAKLSAgICAxNCwgMjM3LCA0MCwgMjE5LCAxNjIsIDE2MywgMTQsIDEwMywgMjQ3LCAyMDEsIDIzNywgMTY0LCAxNjIsIDE2MywgMTQsIAotICAgIDQyLCAyNDcsIDIwMSwgMjM3LCAxNjQsIDE2MiwgMTYzLCAxNCwgMjQwLCAxMjgsIDIxOSwgMTYyLCAxNjMsIDE0LCAyMjgsIAotICAgIDE3NSwgMjE5LCAxNjIsIDE2MywgMTQsIDI0MCwgMTYyLCAxMjUsIDE2MiwgMTYzLCAxNCwgMjUzLCAxNzMsIDIwNSwgMTYyLCAKLSAgICAxNjMsIDE0LCAyNDAsIDEwOCwgMTYyLCAxNjMsIDE0LCAyNDUsIDIxOSwgMjA1LCAxNjIsIDE2MywgMTQsIDIzMywgMjEsIAotICAgIDIzMSwgMTk3LCAxNjIsIDE2MywgMTQsIDI0NiwgMTg5LCAxOTAsIDIzNywgODEsIDE2MiwgMTYzLCAxNCwgMjQ2LCAxODksIAotICAgIDIzMywgNCwgMTYyLCAxNjMsIDE0LCAxMDMsIDI0MCwgMjA2LCAyMDUsIDE2MiwgMTYzLCAxNCwgOTksIDI0MCwgMjA2LCAKLSAgICAyMDUsIDE2MiwgMTYzLCAxNCwgMjQwLCAxNDYsIDE2MiwgMTYzLCAxNCwgMjQ2LCAyMDksIDE2MiwgMTYzLCAxNCwgMjM3LCAKLSAgICA2OCwgMTYyLCAxNjMsIDE0LCAyNDAsIDEyMCwgMjMxLCAxOTcsIDE2MiwgMTYzLCAxNCwgMjM1LCAyOCwgMjMxLCAxOTcsIAotICAgIDE2MiwgMTYzLCAxNCwgMjQ2LCAxNjgsIDIzMSwgMTk3LCAxNjIsIDE2MywgMTQsIDI0MCwgMTIzLCAyMzEsIDE5NywgMTYyLCAKLSAgICAxNjMsIDE0LCAyMzcsIDcxLCAxOTAsIDI0MCwgMjQ1LCA3NiwgNDEsIDI0MCwgMTE3LCAyLCAyMzEsIDE5MSwgMjM3LCAxNzAsIAotICAgIDU4LCAyMzEsIDE0MywgMjQ2LCAxNTcsIDI0NiwgMjMxLCAyNDksIDEwOSwgOTgsIDYxLCAyNDYsIDE2NywgMiwgMjM3LCA0NCwgCi0gICAgMjQ2LCAxNjQsIDIzMiwgMjgsIDk4LCAyMzAsIDIzOSwgMjMyLCA2MiwgOTgsIDIyNywgMjMwLCAyMzIsIDYyLCA5OCwgMjMzLCAKLSAgICAyMDMsIDk4LCAyMjksIDI0MCwgOTgsIDYzLCAzNywgMiwgMjM3LCA5NSwgNjEsIDI0MCwgMTM4LCAyNDMsIDk3LCA5OCwgCi0gICAgMjI5LCAxODIsIDI1MywgMjM5LCA5OCwgMjUwLCA2NSwgOTgsIDMzLCAxNjksIDI1MiwgMjE5LCAyLCAyMzgsIDI4LCAzMywgCi0gICAgMjMzLCA4MCwgMjQwLCAxNTIsIDIzNywgMTUwLCAyMzcsIDQwLCAyLCAyMzIsIDIzNCwgNTgsIDI1MiwgNTQsIDk4LCAyMzEsIAotICAgIDEwMywgOTgsIDIzMSwgODAsIDk4LCAyMjIsIDIzMiwgMjM5LCAwLCA5OCwgMjIyLCAyMzIsIDIzOSwgNzcsIDk4LCAyMjIsIAotICAgIDIyMywgOTgsIDIyMiwgMjI2LCA5OCwgMjM3LCAyNDIsIDIzNiwgMzgsIDE0LCAyMTEsIDExMywgMjIzLCA1NCwgOTgsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjQwLCAyMzIsIDIzNSwgMTYzLCAyMzEsIDI0NywgMjUzLCAyMzksIDk4LCAyMzQsIDE5OCwgMjQxLCAyMTAsIAotICAgIDI1MSwgNTMsIDI0MSwgMjEwLCAyNDUsIDgyLCAyMzgsIDQ0LCA5OCwgMjQzLCAxNCwgMjM4LCA0NCwgOTgsIDQyLCAyMjksIAotICAgIDE2OSwgMjQwLCAxMTYsIDg4LCA0MiwgMjI5LCAxNjksIDIzMCwgMTM2LCA0MiwgMjI5LCAxNjksIDIwMywgODgsIDQxLCAKLSAgICAyMjksIDE2OSwgMjQwLCAxMTYsIDg4LCA0MSwgMjI5LCAxNjksIDIzMCwgMTM2LCA0MSwgMjI5LCAxNjksIDIwMywgODgsIAotICAgIDQyLCAzNywgMjM1LCAyMiwgMjQwLCAxMTYsIDIzNSwgNDAsIDQyLCAzNywgMjM1LCAyMiwgMjMwLCAxMzYsIDQyLCAzNywgCi0gICAgMjM1LCAyMiwgMjAzLCAyMzUsIDQwLCA0MSwgMzcsIDIzNSwgMjIsIDI0MCwgMTE2LCAyMzUsIDQwLCA0MSwgMzcsIDIzNSwgCi0gICAgMjIsIDIzMCwgMTM2LCA0MSwgMzcsIDIzNSwgMjIsIDIwMywgMjM1LCA0MCwgNDIsIDI0MCwgMTM3LCAyMzUsIDIyLCAyNDAsIAotICAgIDExNiwgODgsIDQyLCAyNDAsIDEzNywgMjM1LCAyMiwgMjM3LCA0NCwgMjM3LCAxODgsIDQyLCAyNDAsIDEzNywgMjM1LCAyMiwgCi0gICAgMjAzLCA4OCwgMjQwLCAxMzcsIDIzNSwgMjIsIDIzMCwgMTM2LCA0MSwgMjQwLCAxMzcsIDIzNSwgMjIsIDI0MCwgMTE2LCAKLSAgICA4OCwgNDEsIDI0MCwgMTM3LCAyMzUsIDIyLCAyMzcsIDQ0LCAyMzcsIDE4OCwgNDEsIDI0MCwgMTM3LCAyMzUsIDIyLCAyMDMsIAotICAgIDg4LCAyMzMsIDk4LCAyMzAsIDEzNiwgMTY5LCAyNDYsIDE2NywgMjMwLCAxMzYsIDI0MCwgMTE2LCA0MiwgMTQ1LCAyMDMsIAotICAgIDQxLCAyNDAsIDEzNywgMjM1LCAyMiwgMjMzLCAxNDQsIDI0MCwgMTE2LCA0MSwgMTQ1LCAyMDMsIDQyLCAyNDAsIDEzNywgCi0gICAgMjM1LCAyMiwgMjMzLCAxNDQsIDIzMiwgMTAsIDI0NywgMjE0LCAyMzIsIDEwLCAyMzUsIDExMCwgMjUyLCAyMjgsIDM3LCAKLSAgICAxMDQsIDIzNywgNTksIDM3LCAxMDQsIDIzNywgNTksIDM3LCAyMzUsIDIyLCAxMDcsIDI1MiwgMjI4LCAzNywgMTA0LCAyOSwgCi0gICAgMTQsIDIzNSwgMTEwLCA0MiwgNjEsIDc3LCAyNDAsIDEzOCwgNDEsIDYxLCA3NywgMjQwLCAxMzgsIDE2OSwgMjQ3LCAxMDIsIAotICAgIDIzNiwgMTM4LCAxNjksIDI0NywgMTAyLCAyMzYsIDEzOSwgMTY5LCAyNDcsIDEwMiwgMjM2LCAxNDAsIDE2OSwgMjQ3LCAKLSAgICAxMDIsIDIzNiwgMTQxLCAyMzEsIDIwNSwgMTQsIDE1NywgNjEsIDIyLCAyNTIsIDIyOCwgMjM3LCA0MSwgMjMxLCAyMDUsIAotICAgIDE0LCAxNTcsIDYxLCAyMiwgMjM3LCA1OSwgMjM3LCA0MSwgMjMxLCAyMDUsIDE0LCAxNTcsIDYxLCAyLCAyMzUsIDIwLCAKLSAgICAyMzEsIDIwNSwgMTQsIDE1NywgMTAzLCAyMiwgMTY5LCAyLCAyMzUsIDIwLCAyMzEsIDIwNSwgMTQsIDE1NywgOTksIDIyLCAKLSAgICAxNjksIDIsIDIzNSwgMjAsIDIzMSwgMjA1LCAxNCwgMTU3LCA2MSwgMiwgMjMxLCAxOTMsIDIzMSwgMjA1LCAxNCwgMTU3LCAKLSAgICAxMDMsIDIyLCAxNjksIDIsIDIzMSwgMTkzLCAyMzEsIDIwNSwgMTQsIDE1NywgOTksIDIyLCAxNjksIDIsIDIzMSwgMTkzLCAKLSAgICAyMzEsIDIwNSwgMTQsIDE1NywgNjEsIDIyLCAyNDEsIDIyLCAyMzEsIDIwNSwgMTQsIDE1NywgMTAzLCAyMiwgMTY5LCAyLCAKLSAgICAyNDEsIDIyLCAyMzEsIDIwNSwgMTQsIDE1NywgOTksIDIyLCAxNjksIDIsIDI0MSwgMjIsIDIzMSwgMjA1LCAxNCwgMTU3LCAKLSAgICAxMDMsIDIyLCAyMjksIDE2NCwgMjMxLCAyMDUsIDE0LCAxNTcsIDk5LCAyMiwgMjI5LCAxNjQsIDIzMSwgMjA1LCAxNCwgCi0gICAgMTU3LCA2MSwgMjIsIDI1MiwgMjI4LCAyNDAsIDEzMiwgMjMxLCAyMDUsIDE0LCAxNTcsIDYxLCAyMiwgMjM3LCA1OSwgMjQwLCAKLSAgICAxMzIsIDM3LCAyNDEsIDM4LCAyMzksIDIxOSwgOTgsIDI0MywgOTYsIDk4LCA2MSwgMjQ2LCAxNjcsIDIzMCwgMTM2LCAyMzMsIAotICAgIDExNCwgMjM3LCA0NiwgMjMzLCAxMTQsIDE4MiwgMTA3LCAyMzksIDI1MSwgMjMzLCAxMTQsIDI0MCwgMTI1LCAxMDcsIDI0MSwgCi0gICAgNCwgMjMzLCAxMTQsIDE4MiwgMTA3LCAxMzUsIDIzNiwgMjI3LCAyMzMsIDExNCwgMTM1LCAyMzgsIDU0LCAxMDcsIDI0MSwgCi0gICAgNCwgMjMzLCAxMTQsIDEzNSwgMjM4LCA1NCwgMjM2LCAxMTUsIDIzMywgMTE0LCAyMzMsIDI0NywgMjMzLCAxMTQsIDIzMCwgCi0gICAgMjEzLCAyMzMsIDExNCwgMjMwLCAxOTMsIDI0MSwgMTI2LCAyMzYsIDk3LCAyNDMsIDExMSwgMjUyLCAyMjgsIDIyOCwgMTgwLCAKLSAgICAyMzcsIDU5LCAyMjgsIDE4MCwgMjUyLCAyMjgsIDI0MCwgMTM3LCAxMDQsIDIzNywgNTksIDI0MCwgMTM3LCAxMDQsIDI1MiwgCi0gICAgMjI4LCAyMzMsIDg5LCAyNDAsIDE1OCwgMTA0LCAyMzcsIDU5LCAyMzMsIDg5LCAyNDAsIDE1OCwgMTA0LCA2MywgMjMxLCAKLSAgICAxNzksIDIzNSwgMTUwLCAyNDYsIDE3NCwgMiwgMjM1LCAyMCwgMjI4LCAxNjYsIDIzMiwgMTkxLCAyNTUsIDAsIDIzNCwgNDEsIAotICAgIDIzMSwgNjIsIDIyNywgMTg2LCAxNCwgMzIsIDI0NSwgMTMsIDE0LCAzMiwgMjQxLCA3NSwgMTA2LCAyMzQsIDEyMCwgMTQsIAotICAgIDMyLCAyNDEsIDc1LCAxMDYsIDI0MiwgMCwgMTQsIDMyLCAyNTIsIDI1NSwgMTA2LCAyNDIsIDAsIDE0LCAzMiwgMjUyLCAKLSAgICAyNTUsIDEwNiwgMjI4LCAxNjksIDE0LCAzMiwgMjM0LCA5NiwgMTQsIDMyLCAyMjgsIDIxMSwgMTQsIDMyLCAyNDIsIDE5OCwgCi0gICAgMTQsIDMyLCAyMzAsIDIyOSwgMTQsIDMyLCAxNjksIDIyOSwgMjIxLCAxNCwgMzIsIDI0NiwgMTY3LCAyNDEsIDEyOSwgMTQsIAotICAgIDMyLCA2MSwgMjI5LCAyMjEsIDE0LCAzMiwgMjExLCAyNDEsIDEyOSwgMTQsIDMyLCAyMzQsIDI4LCAyMzUsIDIwNSwgMTQsIAotICAgIDMyLCAyNDEsIDIzNywgMjQ3LCAxODYsIDE0LCAzMiwgMjQxLCAyMzcsIDI1MywgNzksIDE0LCAzMiwgMjQ5LCAxODIsIDI1MCwgCi0gICAgMjIyLCAyMzUsIDE3MCwgMTQsIDMyLCAyMzcsIDE3OCwgMjM1LCA4OCwgMTE4LCAxNCwgMzIsIDIzNywgMTc4LCAyMzUsIDg4LCAKLSAgICAxMTMsIDE0LCAzMiwgMjM3LCAxNzgsIDIzNSwgODgsIDE2NiwgMTQsIDMyLCAyMzcsIDE3OCwgMjM1LCA4OCwgMTU4LCAxNCwgCi0gICAgMzIsIDIzMywgNzEsIDIyOCwgMjExLCAxNCwgMzIsIDIzMCwgMTE2LCAyNDQsIDMsIDE0LCAzMiwgMjUyLCAyNTUsIDEwNiwgCi0gICAgMjI5LCAxNTYsIDIzNywgNjUsIDE0LCAzMiwgMjM2LCAxOCwgMTQsIDMyLCAyNTIsIDI1NSwgMTA2LCAyMzYsIDE1MSwgMTQsIAotICAgIDMyLCAyMzAsIDExNSwgMTQsIDMyLCAyMzUsIDE3MCwgMTQsIDMyLCAyNDksIDI0OCwgMjMwLCAxMzEsIDE0LCAzMiwgMjQzLCAKLSAgICAxNTcsIDIzMCwgMTMxLCAxNCwgMzIsIDIzOSwgMjE3LCAyMzAsIDEzMSwgMTQsIDMyLCAyNDYsIDIyOSwgMjMwLCAxMzEsIAotICAgIDE0LCAzMiwgMjM3LCA2OSwgMTQsIDMyLCAyMzYsIDQ0LCAyNDIsIDIwOSwgOTgsIDI0NiwgMTU3LCAyNDYsIDIzMSwgMTQsIAotICAgIDMyLCAyMzQsIDE2OCwgMTQsIDMyLCAyMzgsIDE4MCwgMjExLCAxMTMsIDE0LCAzMiwgMjMxLCAxNDgsIDIxMSwgMTEzLCAKLSAgICAyNTMsIDYzLCA4OCwgMjUzLCA2MywgMjM4LCAxNDYsIDI1MywgNjMsIDI0MSwgMTMzLCAyNTMsIDYzLCAyMzMsIDcwLCAyNDEsIAotICAgIDEzMywgMjUzLCA2MywgMjQ5LCAxMTAsIDIzNiwgMTcsIDI1MywgNjMsIDI1NCwgMzQsIDI0NywgNTcsIDI1MywgNjMsIDIzOCwgCi0gICAgMTI5LCAyNDksIDk5LCAyMjUsIDExNCwgMjUzLCA2MywgMjM4LCA5NSwgMTA2LCAyMzcsIDIzNCwgMjUzLCA2MywgMjQwLCAKLSAgICAxNTEsIDI1MywgNjMsIDIzNCwgNDIsIDIzNSwgMTQ0LCAyMzYsIDE3MCwgMjUzLCA2MywgNDcsIDIzMCwgMTUxLCAzMywgMjEsIAotICAgIDExOCwgMzMsIDIxLCAxMTMsIDMzLCAyMSwgMTY2LCAzMywgMjEsIDE1OCwgMzMsIDIxLCAxNzMsIDMzLCAyMSwgMTgzLCAzMywgCi0gICAgMjEsIDE5NCwgMzMsIDIxLCAxODcsIDMzLCAyMSwgMTkyLCAzMywgNjUsIDI0NiwgMTc5LCAzMywgNjUsIDIzNSwgNjgsIDMzLCAKLSAgICA2NSwgMjM1LCA3MiwgMzMsIDY1LCAyMzEsIDIzNCwgMzMsIDY1LCAyMzEsIDIzMSwgMzMsIDY1LCAyMzMsIDE0MSwgMzMsIAotICAgIDY1LCAyMzMsIDEzNSwgMzMsIDY1LCAyMzAsIDE0OCwgMzMsIDY1LCAyMzEsIDIyOSwgMzMsIDY1LCAyMzEsIDIzMywgMzMsIAotICAgIDY1LCAyMzUsIDUyLCA5MywgMjEsIDExOCwgOTMsIDIxLCAxMTMsIDkzLCAyMSwgMTY2LCA5MywgMjEsIDE1OCwgOTMsIDIxLCAKLSAgICAxNzMsIDkzLCAyMSwgMTgzLCA5MywgMjEsIDE5NCwgOTMsIDIxLCAxODcsIDkzLCAyMSwgMTkyLCA5MywgNjUsIDI0NiwgCi0gICAgMTc5LCA5MywgNjUsIDIzNSwgNjgsIDkzLCA2NSwgMjM1LCA3MiwgOTMsIDY1LCAyMzEsIDIzNCwgOTMsIDY1LCAyMzEsIAotICAgIDIzMSwgOTMsIDY1LCAyMzMsIDE0MSwgOTMsIDY1LCAyMzMsIDEzNSwgOTMsIDY1LCAyMzAsIDE0OCwgOTMsIDY1LCAyMzEsIAotICAgIDIyOSwgOTMsIDY1LCAyMzEsIDIzMywgOTMsIDY1LCAyMzUsIDUyLCAyMSwgMTY4LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDIxLCAKLSAgICAxMzUsIDI0NiwgMTYyLCAyNDAsIDEyMSwgMjEsIDE1MiwgMjQ2LCAxNjIsIDI0MCwgMTIxLCAyMSwgMjQ2LCAxNjAsIDI0NiwgCi0gICAgMTYyLCAyNDAsIDEyMSwgMjEsIDI0NiwgMTU5LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDIxLCAyNTMsIDE3LCAyNDYsIDE2MiwgCi0gICAgMjQwLCAxMjEsIDIxLCAyNDAsIDE1NSwgMjQ2LCAxNjIsIDI0MCwgMTIxLCAyMSwgMjQwLCAxNDIsIDI0NiwgMTYyLCAyNDAsIAotICAgIDEyMSwgMjEsIDI0NiwgMjA4LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDY1LCAyNTMsIDUzLCAyNDYsIDE2MiwgMjQwLCAxMjEsIAotICAgIDY1LCAyMzgsIDE5OSwgMjQ2LCAxNjIsIDI0MCwgMTIxLCA2NSwgMjM4LCA3OSwgMjQ2LCAxNjIsIDI0MCwgMTIxLCA2NSwgCi0gICAgMjM0LCAyNDUsIDI0NiwgMTYyLCAyNDAsIDEyMSwgNjUsIDIzNCwgMTA3LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDY1LCAyMzYsIAotICAgIDc4LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDY1LCAyMzUsIDIxMCwgMjQ2LCAxNjIsIDI0MCwgMTIxLCA2NSwgMjMzLCAyMiwgCi0gICAgMjQ2LCAxNjIsIDI0MCwgMTIxLCA2NSwgMjM0LCA5MiwgMjQ2LCAxNjIsIDI0MCwgMTIxLCA2NSwgMjM0LCAxNzEsIDI0NiwgCi0gICAgMTYyLCAyNDAsIDEyMSwgNjUsIDIzNywgOTcsIDI0NiwgMTYyLCAyNDAsIDEyMSwgOTMsIDcsIDMsIDEsIDU3LCA5MywgNywgCi0gICAgMywgMSwgMjU0LCAxODUsIDkzLCA3LCAzLCAxLCAyNTQsIDE5NCwgOTMsIDcsIDMsIDEsIDIyMiwgMjIyLCA5MywgNywgMywgCi0gICAgMSwgNzIsIDkzLCA3LCAzLCAxLCAyNTQsIDE5MSwgOTMsIDcsIDMsIDEsIDIxNCwgOTMsIDcsIDMsIDEsIDIxMiwgOTMsIDcsIAotICAgIDMsIDEsIDc0LCA5MywgNywgMywgMSwgMjU0LCAxOTIsIDkzLCA3LCAzLCAxLCAyNTQsIDE4NiwgOTMsIDcsIDMsIDEsIDE0OSwgCi0gICAgOTMsIDcsIDMsIDEsIDE4NSwgOTMsIDcsIDMsIDEsIDE5OSwgOTMsIDcsIDMsIDEsIDczLCA5MywgNywgMywgMSwgMjU0LCAKLSAgICAxODcsIDkzLCA3LCAzLCAxLCAyNTQsIDE5NiwgOTMsIDcsIDMsIDEsIDE0NiwgOTMsIDcsIDMsIDEsIDE5MywgOTMsIDcsIDMsIAotICAgIDEsIDI1NCwgMTgzLCA5MywgNywgMywgMSwgNjYsIDkzLCA3LCAzLCAxLCAxOTYsIDkzLCA3LCAzLCAxLCAyNTQsIDE5NSwgCi0gICAgOTMsIDcsIDMsIDEsIDI1NCwgMTg0LCA5MywgNywgMywgMSwgMjU0LCAxOTAsIDkzLCA3LCAzLCAxLCAyNTQsIDE5MywgMzMsIAotICAgIDcsIDYsIDEsIDU3LCAzMywgNywgNiwgMSwgMjU0LCAxODUsIDMzLCA3LCA2LCAxLCAyNTQsIDE5NCwgMzMsIDcsIDYsIDEsIAotICAgIDIyMiwgMjIyLCAzMywgNywgNiwgMSwgNzIsIDMzLCA3LCA2LCAxLCAyNTQsIDE5MSwgMzMsIDcsIDYsIDEsIDIxNCwgMzMsIAotICAgIDcsIDYsIDEsIDIxMiwgMzMsIDcsIDYsIDEsIDc0LCAzMywgNywgNiwgMSwgMjU0LCAxOTIsIDMzLCA3LCA2LCAxLCAyNTQsIAotICAgIDE4NiwgMzMsIDcsIDYsIDEsIDE0OSwgMzMsIDcsIDYsIDEsIDE4NSwgMzMsIDcsIDYsIDEsIDE5OSwgMzMsIDcsIDYsIDEsIAotICAgIDczLCAzMywgNywgNiwgMSwgMjU0LCAxODcsIDMzLCA3LCA2LCAxLCAyNTQsIDE5NiwgMzMsIDcsIDYsIDEsIDE0NiwgMzMsIAotICAgIDcsIDYsIDEsIDE5MywgMzMsIDcsIDYsIDEsIDI1NCwgMTgzLCAzMywgNywgNiwgMSwgNjYsIDMzLCA3LCA2LCAxLCAxOTYsIAotICAgIDMzLCA3LCA2LCAxLCAyNTQsIDE5NSwgMzMsIDcsIDYsIDEsIDI1NCwgMTg0LCAzMywgNywgNiwgMSwgMjU0LCAxOTAsIDMzLCAKLSAgICA3LCA2LCAxLCAyNTQsIDE5MywgMzMsIDcsIDMsIDEsIDU3LCAzMywgNywgMywgMSwgMjU0LCAxODUsIDMzLCA3LCAzLCAxLCAKLSAgICAyNTQsIDE5NCwgMzMsIDcsIDMsIDEsIDIyMiwgMjIyLCAzMywgNywgMywgMSwgNzIsIDMzLCA3LCAzLCAxLCAyNTQsIDE5MSwgCi0gICAgMzMsIDcsIDMsIDEsIDIxNCwgMzMsIDcsIDMsIDEsIDIxMiwgMzMsIDcsIDMsIDEsIDc0LCAzMywgNywgMywgMSwgMjU0LCAKLSAgICAxOTIsIDMzLCA3LCAzLCAxLCAyNTQsIDE4NiwgMzMsIDcsIDMsIDEsIDE0OSwgMzMsIDcsIDMsIDEsIDE4NSwgMzMsIDcsIDMsIAotICAgIDEsIDE5OSwgMzMsIDcsIDMsIDEsIDczLCAzMywgNywgMywgMSwgMjU0LCAxODcsIDMzLCA3LCAzLCAxLCAyNTQsIDE5NiwgCi0gICAgMzMsIDcsIDMsIDEsIDE0NiwgMzMsIDcsIDMsIDEsIDE5MywgMzMsIDcsIDMsIDEsIDI1NCwgMTgzLCAzMywgNywgMywgMSwgCi0gICAgNjYsIDMzLCA3LCAzLCAxLCAxOTYsIDMzLCA3LCAzLCAxLCAyNTQsIDE5NSwgMzMsIDcsIDMsIDEsIDI1NCwgMTg0LCAzMywgCi0gICAgNywgMywgMSwgMjU0LCAxOTAsIDMzLCA3LCAzLCAxLCAyNTQsIDE5MywgMzMsIDIxLCAyNDAsIDEyNiwgMjMzLCA3MSwgMzMsIAotICAgIDY1LCAyMzUsIDY4LCAyMzMsIDcxLCAzMywgNjUsIDIzNSwgNzIsIDIzMywgNzEsIDMzLCA2NSwgMjMxLCAyMzQsIDIzMywgCi0gICAgNzEsIDMzLCA2NSwgMjMxLCAyMzEsIDIzMywgNzEsIDMzLCA2NSwgMjMzLCAxNDEsIDIzMywgNzEsIDMzLCA2NSwgMjMzLCAKLSAgICAxMzUsIDIzMywgNzEsIDMzLCA2NSwgMjMwLCAxNDgsIDIzMywgNzEsIDMzLCA2NSwgMjMxLCAyMjksIDIzMywgNzEsIDMzLCAKLSAgICA2NSwgMjMxLCAyMzMsIDIzMywgNzEsIDMzLCA2NSwgMjM1LCA1MiwgNDcsIDMzLCAyMSwgMTE4LCA0NywgMzMsIDIxLCAxMTMsIAotICAgIDQ3LCAzMywgMjEsIDE2NiwgNDcsIDMzLCAyMSwgMTU4LCA0NywgMzMsIDIxLCAxNzMsIDQ3LCAzMywgMjEsIDE4MywgNDcsIAotICAgIDMzLCAyMSwgMTk0LCA0NywgMzMsIDIxLCAxODcsIDQ3LCAzMywgMjEsIDE5MiwgNDcsIDMzLCA2NSwgMjQ2LCAxNzksIDIzMywgCi0gICAgNzEsIDMzLCAyMSwgMjQwLCAxMjYsIDc3LCA4MCwgMTU3LCAyMjksIDE2NCwgNzcsIDgwLCAxMTIsIDIyOSwgMTY0LCA3NywgCi0gICAgODAsIDE1NywgMjMxLCAyMTAsIDc3LCA4MCwgMTEyLCAyMzEsIDIxMCwgNzcsIDgwLCAxNTcsIDIzNywgNDksIDI0NiwgMTg3LCAKLSAgICAyMjksIDE2NCwgNzcsIDgwLCAxMTIsIDIzNywgNDksIDI0NiwgMTg3LCAyMjksIDE2NCwgNzcsIDgwLCAxNTcsIDIzNywgNDksIAotICAgIDI0NiwgMTg3LCAyMzEsIDIxMCwgNzcsIDgwLCAxMTIsIDIzNywgNDksIDI0NiwgMTg3LCAyMzEsIDIxMCwgNzcsIDgwLCAKLSAgICAxNTcsIDIzMSwgMjEyLCAyNDYsIDE4NywgMjI5LCAxNjQsIDc3LCA4MCwgMTEyLCAyMzEsIDIxMiwgMjQ2LCAxODcsIDIyOSwgCi0gICAgMTY0LCA3NywgODAsIDE1NywgMjMxLCAyMTIsIDI0NiwgMTg3LCAyMzEsIDIxMCwgNzcsIDgwLCAxMTIsIDIzMSwgMjEyLCAKLSAgICAyNDYsIDE4NywgMjMxLCAyMTAsIDc3LCA4MCwgMTU3LCAxMDMsIDIyLCAyMzcsIDQxLCA3NywgODAsIDEwMywgMTU3LCAyMiwgCi0gICAgNDEsIDIzNywgNjMsIDc3LCA4MCwgMTAzLCAxMTIsIDIyLCA0MSwgMjM3LCA1NywgNzcsIDgwLCAxMTIsIDEwMywgMjIsIAotICAgIDIzNywgNDEsIDc3LCA4MCwgMTU3LCAxMDMsIDIyLCAyNDAsIDEzMiwgNzcsIDgwLCAxMDMsIDE1NywgMjIsIDQyLCAyMzcsIAotICAgIDYzLCA3NywgODAsIDEwMywgMTEyLCAyMiwgNDIsIDIzNywgNTcsIDc3LCA4MCwgMTEyLCAxMDMsIDIyLCAyNDAsIDEzMiwgCi0gICAgNzcsIDgwLCAxNTcsIDk5LCAyMiwgMjM3LCA0MSwgNzcsIDgwLCA5OSwgMTU3LCAyMiwgNDEsIDIzNywgNjMsIDc3LCA4MCwgCi0gICAgOTksIDExMiwgMjIsIDQxLCAyMzcsIDU3LCA3NywgODAsIDExMiwgOTksIDIyLCAyMzcsIDQxLCA3NywgODAsIDE1NywgOTksIAotICAgIDIyLCAyNDAsIDEzMiwgNzcsIDgwLCA5OSwgMTU3LCAyMiwgNDIsIDIzNywgNjMsIDc3LCA4MCwgOTksIDExMiwgMjIsIDQyLCAKLSAgICAyMzcsIDU3LCA3NywgODAsIDExMiwgOTksIDIyLCAyNDAsIDEzMiwgNzcsIDgwLCAxNTcsIDYxLCAyMiwgMjM3LCA0MSwgNzcsIAotICAgIDgwLCA2MSwgMTU3LCAyMiwgNDEsIDIzNywgNjMsIDc3LCA4MCwgOTksIDExMiwgMjIsIDQxLCAxMDMsIDIzNywgNTcsIDc3LCAKLSAgICA4MCwgMTAzLCAxMTIsIDIyLCA0MSwgOTksIDIzNywgNTcsIDc3LCA4MCwgNjEsIDExMiwgMjIsIDQxLCAyMzcsIDU3LCA3NywgCi0gICAgODAsIDEwMywgMTU3LCAyMiwgNDEsIDk5LCAyMzcsIDYzLCA3NywgODAsIDk5LCAxNTcsIDIyLCA0MSwgMTAzLCAyMzcsIDYzLCAKLSAgICA3NywgODAsIDExMiwgNjEsIDIyLCAyMzcsIDQxLCA3NywgODAsIDE1NywgNjEsIDIyLCAyNDAsIDEzMiwgNzcsIDgwLCA2MSwgCi0gICAgMTU3LCAyMiwgNDIsIDIzNywgNjMsIDc3LCA4MCwgOTksIDExMiwgMjIsIDQyLCAxMDMsIDIzNywgNTcsIDc3LCA4MCwgMTAzLCAKLSAgICAxMTIsIDIyLCA0MiwgOTksIDIzNywgNTcsIDc3LCA4MCwgNjEsIDExMiwgMjIsIDQyLCAyMzcsIDU3LCA3NywgODAsIDEwMywgCi0gICAgMTU3LCAyMiwgNDIsIDk5LCAyMzcsIDYzLCA3NywgODAsIDk5LCAxNTcsIDIyLCA0MiwgMTAzLCAyMzcsIDYzLCA3NywgODAsIAotICAgIDExMiwgNjEsIDIyLCAyNDAsIDEzMiwgNzcsIDgwLCAxNTcsIDEwMywgMjIsIDIyOSwgMTY0LCA3NywgODAsIDQyLCAxMTIsIAotICAgIDIyLCA0MSwgMTAzLCAyMzcsIDU3LCA3NywgODAsIDQxLCAxMTIsIDIyLCA0MiwgMTAzLCAyMzcsIDU3LCA3NywgODAsIDEwMywgCi0gICAgMTU3LCAyMiwgMTY5LCAyMzcsIDYzLCA3NywgODAsIDEwMywgMTEyLCAyMiwgMTY5LCAyMzcsIDU3LCA3NywgODAsIDQxLCAKLSAgICAxNTcsIDIyLCA0MiwgMTAzLCAyMzcsIDYzLCA3NywgODAsIDQyLCAxNTcsIDIyLCA0MSwgMTAzLCAyMzcsIDYzLCA3NywgODAsIAotICAgIDExMiwgMTAzLCAyMiwgMjI5LCAxNjQsIDc3LCA4MCwgMTU3LCA5OSwgMjIsIDIyOSwgMTY0LCA3NywgODAsIDQyLCAxMTIsIAotICAgIDIyLCA0MSwgOTksIDIzNywgNTcsIDc3LCA4MCwgNDEsIDExMiwgMjIsIDQyLCA5OSwgMjM3LCA1NywgNzcsIDgwLCA5OSwgCi0gICAgMTU3LCAyMiwgMTY5LCAyMzcsIDYzLCA3NywgODAsIDk5LCAxMTIsIDIyLCAxNjksIDIzNywgNTcsIDc3LCA4MCwgNDEsIAotICAgIDE1NywgMjIsIDQyLCA5OSwgMjM3LCA2MywgNzcsIDgwLCA0MiwgMTU3LCAyMiwgNDEsIDk5LCAyMzcsIDYzLCA3NywgODAsIAotICAgIDExMiwgOTksIDIyLCAyMjksIDE2NCwgNzcsIDgwLCAxNTcsIDYxLCAyMiwgMjI5LCAxNjQsIDc3LCA4MCwgNDIsIDExMiwgCi0gICAgMjIsIDQxLCA2MSwgMjM3LCA1NywgNzcsIDgwLCA0MSwgMTEyLCAyMiwgNDIsIDYxLCAyMzcsIDU3LCA3NywgODAsIDYxLCAKLSAgICAxNTcsIDIyLCAxNjksIDIzNywgNjMsIDc3LCA4MCwgOTksIDExMiwgMjIsIDEwMywgMTY5LCAyMzcsIDU3LCA3NywgODAsIAotICAgIDEwMywgMTEyLCAyMiwgOTksIDE2OSwgMjM3LCA1NywgNzcsIDgwLCA2MSwgMTEyLCAyMiwgMTY5LCAyMzcsIDU3LCA3NywgCi0gICAgODAsIDQyLCA5OSwgMTEyLCAyMiwgNDEsIDEwMywgMjM3LCA1NywgNzcsIDgwLCA0MSwgOTksIDExMiwgMjIsIDQyLCAxMDMsIAotICAgIDIzNywgNTcsIDc3LCA4MCwgNDIsIDEwMywgMTEyLCAyMiwgNDEsIDk5LCAyMzcsIDU3LCA3NywgODAsIDQxLCAxMDMsIDExMiwgCi0gICAgMjIsIDQyLCA5OSwgMjM3LCA1NywgNzcsIDgwLCAxMDMsIDE1NywgMjIsIDk5LCAxNjksIDIzNywgNjMsIDc3LCA4MCwgOTksIAotICAgIDE1NywgMjIsIDEwMywgMTY5LCAyMzcsIDYzLCA3NywgODAsIDQxLCAxNTcsIDIyLCA0MiwgNjEsIDIzNywgNjMsIDc3LCA4MCwgCi0gICAgNDIsIDE1NywgMjIsIDQxLCA2MSwgMjM3LCA2MywgNzcsIDgwLCAxMTIsIDYxLCAyMiwgMjI5LCAxNjQsIDc3LCA4MCwgMTU3LCAKLSAgICA0NywgMjQ2LCAxODcsIDIyOSwgMTY0LCA3NywgODAsIDExMiwgNDcsIDI0NiwgMTg3LCAyMjksIDE2NCwgNzcsIDgwLCAxNTcsIAotICAgIDQ3LCAyNDYsIDE4NywgMjMxLCAyMTAsIDc3LCA4MCwgMTEyLCA0NywgMjQ2LCAxODcsIDIzMSwgMjEwLCA3NywgODAsIDQ3LCAKLSAgICAyMjksIDE2NCwgNzcsIDgwLCA0NywgMjMxLCAyMTAsIDc3LCA4MCwgMTAzLCAyMzcsIDYyLCAyMiwgNDEsIDIzNSwgNTUsIAotICAgIDc3LCA4MCwgMTAzLCA0NywgMjIsIDQxLCAyMzUsIDYwLCA3NywgODAsIDQ3LCAxMDMsIDIyLCAyMzcsIDQxLCA3NywgODAsIAotICAgIDEwMywgMjM3LCA2MiwgMjIsIDQyLCAyMzUsIDU1LCA3NywgODAsIDEwMywgNDcsIDIyLCA0MiwgMjM1LCA2MCwgNzcsIDgwLCAKLSAgICA0NywgMTAzLCAyMiwgMjQwLCAxMzIsIDc3LCA4MCwgOTksIDIzNywgNjIsIDIyLCA0MSwgMjM1LCA1NSwgNzcsIDgwLCA5OSwgCi0gICAgNDcsIDIyLCA0MSwgMjM1LCA2MCwgNzcsIDgwLCA0NywgOTksIDIyLCAyMzcsIDQxLCA3NywgODAsIDk5LCAyMzcsIDYyLCAKLSAgICAyMiwgNDIsIDIzNSwgNTUsIDc3LCA4MCwgOTksIDQ3LCAyMiwgNDIsIDIzNSwgNjAsIDc3LCA4MCwgNDcsIDk5LCAyMiwgCi0gICAgMjQwLCAxMzIsIDc3LCA4MCwgNjEsIDIzNywgNjIsIDIyLCA0MSwgMjM1LCA1NSwgNzcsIDgwLCA2MSwgNDcsIDIyLCA0MSwgCi0gICAgMjM1LCA2MCwgNzcsIDgwLCA0NywgNjEsIDIyLCAyMzcsIDQxLCA3NywgODAsIDYxLCAyMzcsIDYyLCAyMiwgNDIsIDIzNSwgCi0gICAgNTUsIDc3LCA4MCwgNjEsIDQ3LCAyMiwgNDIsIDIzNSwgNjAsIDc3LCA4MCwgNDcsIDYxLCAyMiwgMjQwLCAxMzIsIDc3LCAKLSAgICA4MCwgMTAzLCAyMzcsIDYyLCAyMiwgMTY5LCAyMzUsIDU1LCA3NywgODAsIDEwMywgNDcsIDIyLCAxNjksIDIzNSwgNjAsIAotICAgIDc3LCA4MCwgNDcsIDEwMywgMjIsIDIyOSwgMTY0LCA3NywgODAsIDk5LCAyMzcsIDYyLCAyMiwgMTY5LCAyMzUsIDU1LCA3NywgCi0gICAgODAsIDk5LCA0NywgMjIsIDE2OSwgMjM1LCA2MCwgNzcsIDgwLCA0NywgOTksIDIyLCAyMjksIDE2NCwgNzcsIDgwLCA2MSwgCi0gICAgMjM3LCA2MiwgMjIsIDE2OSwgMjM1LCA1NSwgNzcsIDgwLCA2MSwgNDcsIDIyLCAxNjksIDIzNSwgNjAsIDc3LCA4MCwgNDcsIAotICAgIDYxLCAyMiwgMjI5LCAxNjQsIDc3LCA4MCwgMTU3LCAyNTMsIDI5LCAxMDMsIDIyLCAyMzcsIDQxLCA3NywgODAsIDE1NywgCi0gICAgMjUzLCAyOSwgMTAzLCAyMiwgMjQwLCAxMzIsIDc3LCA4MCwgMTU3LCAyNTMsIDI5LCA5OSwgMjIsIDI0MCwgMTMyLCA3NywgCi0gICAgODAsIDE1NywgMjUzLCAyOSwgOTksIDIyLCAyMzcsIDQxLCA3NywgODAsIDE1NywgMjMzLCA3NCwgMjQwLCAxMTYsIDQxLCAKLSAgICAxODAsIDIwMywgMjQwLCAxMzIsIDc3LCA4MCwgMTU3LCAyMzMsIDc0LCAyNDAsIDExNiwgNDIsIDE4MCwgMjAzLCAyMzcsIAotICAgIDQxLCA3NywgODAsIDE1NywgMjMzLCA3NCwgMjM3LCA4NSwgNzcsIDgwLCAxNTcsIDI0MCwgMTMyLCA3NywgODAsIDE1NywgCi0gICAgMjUzLCAxOSwgNzcsIDgwLCAxNTcsIDIzNywgNDEsIDc3LCA4MCwgMTU3LCAyNDAsIDE1MiwgNzcsIDgwLCAxMTIsIDI0MCwgCi0gICAgMTMyLCA3NywgODAsIDExMiwgMjUzLCAxOSwgNzcsIDgwLCAxMTIsIDIzNywgNDEsIDc3LCA4MCwgMTEyLCAyNDAsIDE1MiwgCi0gICAgNzcsIDgwLCAxNTcsIDQyLCAyMiwgMTEyLCAyMzcsIDQxLCA3NywgODAsIDE1NywgOTksIDIyLCAxMTIsIDI0MCwgMTUyLCAKLSAgICA3NywgODAsIDExMiwgNDIsIDIyLCAxNTcsIDIzNywgNDEsIDc3LCA4MCwgMTEyLCA5OSwgMjIsIDE1NywgMjQwLCAxNTIsIAotICAgIDI0MCwgMTE2LCAxMzIsIDIzNywgNjUsIDIwMywgMTY4LCAyMzcsIDExMiwgMjM3LCA2NSwgMjAzLCAxNjgsIDIzNSwgNTMsIAotICAgIDIzNywgNjUsIDIwMywgMTUyLCAyMzUsIDc1LCAyMzcsIDY1LCAyMDMsIDEzMiwgMjM3LCA2NSwgMjAzLCAyNDYsIDE1OSwgCi0gICAgMjM1LCA3NSwgMjM3LCA2NSwgMjAzLCAxNTIsIDIzMywgMTc2LCAyMzcsIDY1LCAyMDMsIDI0MCwgMTU1LCAyMzUsIDc1LCAKLSAgICAyMzcsIDY1LCAyNDYsIDE2MiwgMjM3LCA2NSwgNDIsIDI0MCwgMTU1LCAyMzUsIDc1LCAyMzcsIDY1LCA0MiwgMTUyLCAyMzMsIAotICAgIDE3NiwgMjM3LCA2NSwgNDIsIDI0NiwgMTU5LCAyMzUsIDc1LCAyMzcsIDY1LCA0MiwgMTMyLCAyMzcsIDY1LCA0MiwgMTUyLCAKLSAgICAyMzUsIDc1LCAyMzcsIDY1LCA0MiwgMTY4LCAyMzUsIDUzLCAyMzcsIDY1LCA0MiwgMTY4LCAyMzcsIDExMiwgMjM3LCA2NSwgCi0gICAgNDEsIDEzMiwgMjM3LCA2NSwgMTU3LCAyMzcsIDIxNCwgMjM3LCA2MCwgMjM3LCAyMTQsIDI0OSwgMTgwLCAyMzcsIDIxNCwgCi0gICAgMjQwLCAxMTYsIDE2OCwgMjM3LCAxMTIsIDIzNywgNjUsIDQxLCAxNjgsIDIzNywgMTEyLCAyMzcsIDY1LCAyMzMsIDg4LCAKLSAgICAyMDMsIDI0MCwgMTMyLCAyMzMsIDg4LCAyMDMsIDIzNywgNDEsIDIzMywgODgsIDI0MCwgMTE2LCAyNDAsIDEzMiwgMjMzLCAKLSAgICA4OCwgMjQwLCAxMTYsIDQyLCAyMiwgMjAzLCA0MiwgMjIsIDIwMywgMjM3LCA0MSwgMjMzLCA4OCwgMjQwLCAxMTYsIDQyLCAKLSAgICAyMiwgMjAzLCAyMzcsIDQxLCAyMzMsIDg4LCAyNDAsIDExNiwgNDIsIDIyLCAyNDAsIDExNiwgNDEsIDIyLCAyMDMsIDI0MCwgCi0gICAgMTMyLCAyMzMsIDg4LCAyNDAsIDExNiwgNDIsIDIyLCAyNDAsIDExNiwgNDEsIDIyLCAyMDMsIDIzNywgNDEsIDIzMywgODgsIAotICAgIDI0MCwgMTE2LCAyMzcsIDQxLCAyMzMsIDg4LCAyNDAsIDExNiwgNDEsIDIyLCAyMDMsIDI0MCwgMTMyLCAyMzMsIDg4LCAKLSAgICAyNDAsIDExNiwgNDEsIDIyLCAyMDMsIDQyLCAyMiwgMjAzLCAyMzcsIDQxLCA4NiwgMjM1LCAyNywgNjMsIDIzNSwgMjcsIAotICAgIDYzLCAzNywgMiwgMjM1LCA5OCwgMjMzLCAxOTUsIDYzLCAzNywgMjMwLCAxNjIsIDg2LCAzLCAyMzUsIDI3LCAzNywgMiwgCi0gICAgMTY5LCAyNDAsIDIwMCwgMzcsIDIsIDYxLCAyNDAsIDIwMCwgMzcsIDIsIDIzMSwgMTEyLCAyMzAsIDE3OSwgMjQwLCAyMDAsIAotICAgIDM3LCAyLCAyNDAsIDExNiwgNDIsIDE4MCwgMjAzLCA0MSwgMjQwLCAyMDAsIDM3LCAyLCAyNDAsIDExNiwgNDEsIDE4MCwgCi0gICAgMjAzLCA0MiwgMjQwLCAyMDAsIDM3LCAyLCAyMzMsIDc0LCAyMzAsIDE3OSwgMjQwLCAyMDAsIDg2LCAzLCAyMzUsIDI3LCAKLSAgICA2MywgMywgMjM1LCAyNywgODYsIDIzMCwgMTU3LCA2MywgMjMwLCAxNTcsIDg2LCA2MSwgMjMwLCAxNTcsIDYzLCA2MSwgCi0gICAgMjMwLCAxNTcsIDg2LCAyMjcsIDE0NSwgNjMsIDIyNywgMTQ1LCA4NiwgMjI5LCAxNzQsIDIzMSwgMTkzLCA2MywgMjI5LCAKLSAgICAxNzQsIDIzMSwgMTkzLCA4NiwgMjI5LCAxNzQsIDMsIDIzMSwgMTkzLCA2MywgMjI5LCAxNzQsIDMsIDIzMSwgMTkzLCA4NiwgCi0gICAgMjI3LCAxMzMsIDIzMSwgMTkzLCA2MywgMjI3LCAxMzMsIDIzMSwgMTkzLCA4NiwgMjI3LCAxMzMsIDMsIDIzMSwgMTkzLCAKLSAgICA2MywgMjI3LCAxMzMsIDMsIDIzMSwgMTkzLCA4NiwgMjI3LCAxMzMsIDIzMywgMTU0LCA2MywgMjI3LCAxMzMsIDIzMywgCi0gICAgMTU0LCA4NiwgMjI3LCAxODksIDIzMSwgMTkzLCA2MywgMjI3LCAxODksIDIzMSwgMTkzLCA4NiwgMjI3LCAxODksIDMsIAotICAgIDIzMSwgMTkzLCA2MywgMjI3LCAxODksIDMsIDIzMSwgMTkzLCA4NiwgMjI3LCAxODUsIDIzMSwgMTkzLCA2MywgMjI3LCAKLSAgICAxODUsIDIzMSwgMTkzLCA4NiwgMjI3LCAxODUsIDMsIDIzMSwgMTkzLCA2MywgMjI3LCAxODUsIDMsIDIzMSwgMTkzLCA4NiwgCi0gICAgMjI3LCAxODUsIDIzMywgMTU0LCA2MywgMjI3LCAxODUsIDIzMywgMTU0LCA4NiwgMjMzLCA5MCwgNjMsIDIzMywgOTAsIDYzLCAKLSAgICAyMzUsIDQxLCAyMzAsIDE2MiwgODYsIDMsIDIzMywgOTAsIDIzNCwgMTAzLCAyMzMsIDEyMywgNjMsIDIzNSwgMjAsIDIzNywgCi0gICAgNTAsIDIzNSwgMjAsIDIzNywgNDAsIDIsIDYxLCAyNDAsIDIwMCwgMjMyLCA4OSwgODYsIDIzNSwgMjAsIDIzNywgNDAsIDIsIAotICAgIDQyLCAxMzIsIDIzNywgNDUsIDIzNywgNDAsIDIsIDQxLCAxMzIsIDIzNywgNDUsIDIzNywgNDAsIDIsIDIwMywgMTMyLCAKLSAgICAyMzcsIDQ1LCAyMzcsIDQwLCAyLCAyNDAsIDExNiwgMTMyLCAyMzcsIDQ1LCAyMzcsIDQwLCAyLCAyNDAsIDExNiwgNDEsIAotICAgIDIzMywgODgsIDIzNywgNDUsIDIzNywgNDAsIDIsIDI1MywgMTY3LCAyNTMsIDg1LCAyNDAsIDExNiwgNDIsIDIzMywgODgsIAotICAgIDIzNywgNDUsIDQyLCAxMzIsIDg2LCAyMzUsIDIwLCA0MSwgMTMyLCA4NiwgMjM1LCAyMCwgMjM1LCA5NCwgMjM1LCA0NSwgCi0gICAgMjM1LCA5NCwgNjMsIDIzNSwgMjAsIDI0MCwgMTE2LCAxMzIsIDIzNSwgOTQsIDYzLCAyMzUsIDIwLCAyMDMsIDEzMiwgMjM1LCAKLSAgICA5NCwgNjMsIDIzNSwgMjAsIDI0MCwgMTE2LCA0MiwgMjMzLCA4OCwgMjMzLCAxNDYsIDI0NywgMTAsIDI0MCwgMTE2LCA0MSwgCi0gICAgMjMzLCA4OCwgMjMzLCAxNDYsIDI0NywgMTAsIDIwMywgNDEsIDIzMywgODgsIDIzMywgMTQ2LCAyNDcsIDEwLCAyMDMsIDQyLCAKLSAgICAyMzMsIDg4LCAyMzMsIDE0NiwgMjQ3LCAxMCwgMjQwLCAxMTYsIDEzMiwgMjM1LCAyMCwgMjAzLCAxMzIsIDIzNSwgMjAsIAotICAgIDg2LCAyMDMsIDQxLCAyMzEsIDE5MywgODYsIDIwMywgNDIsIDIzMSwgMTkzLCA4NiwgMjQwLCAxMTYsIDQyLCAyMzEsIDE5MywgCi0gICAgODYsIDI0MCwgMTE2LCA0MSwgMjMxLCAxOTMsIDYzLCAyMzUsIDQ1LCAzNywgMiwgNDIsIDEzMiwgMjM3LCA0NSwgMzcsIDIsIAotICAgIDQxLCAxMzIsIDIzNywgNDUsIDM3LCAyLCAyNDAsIDExNiwgNDIsIDIzMywgNzQsIDEzMiwgMjM3LCA0NSwgMzcsIDIsIDIwMywgCi0gICAgNDEsIDIzMywgNzQsIDEzMiwgMjM3LCA0NSwgNjMsIDM3LCAyLCA2MSwgMjMyLCA4NiwgMjQwLCAxMzgsIDYzLCAyMjksIAotICAgIDE3NCwgMjMzLCA4MCwgMiwgMjQ2LCAxNjQsIDIyOSwgMTc0LCAyMzMsIDgwLCAyLCA0MiwgMTMyLCAyMzcsIDQ1LCAyMjksIAotICAgIDE3NCwgMjMzLCA4MCwgMiwgNDEsIDEzMiwgMjM3LCA0NSwgMjQwLCAxODUsIDIzNSwgMjAsIDYzLCAzNywgMiwgMjQwLCAKLSAgICAxMTYsIDQyLCAyMzEsIDIxOSwgNjMsIDM3LCAyLCAyMDMsIDQyLCAyMzEsIDIxOSwgNjMsIDM3LCAyLCAyMDMsIDQxLCAyMzEsIAotICAgIDIxOSwgNjMsIDM3LCAyLCAyNDAsIDExNiwgNDEsIDIzMSwgMjE5LCA2MywgMjM3LCA0MCwgMiwgMjQwLCAxMTYsIDQyLCAKLSAgICAyMzEsIDIxOSwgNjMsIDIzNywgNDAsIDIsIDIwMywgNDIsIDIzMSwgMjE5LCA2MywgMjM3LCA0MCwgMiwgMjAzLCA0MSwgCi0gICAgMjMxLCAyMTksIDYzLCAyMzcsIDQwLCAyLCAyNDAsIDExNiwgNDEsIDIzMSwgMjE5LCAyNDAsIDExNiwgNDIsIDIzMSwgMTkzLCAKLSAgICAyNDAsIDExNiwgNDEsIDIzMSwgMTkzLCAyMDMsIDQyLCAyMzEsIDE5MywgNjMsIDIzNywgNjAsIDIzNSwgMjcsIDg2LCAyMzcsIAotICAgIDYwLCAyMzUsIDI3LCA2MywgMjM3LCA2MCwgMywgMjM1LCAyNywgODYsIDIzNywgNjAsIDMsIDIzNSwgMjcsIDIwMywgNDEsIAotICAgIDIzMSwgMTkzLCA4NiwgMjU0LCA4LCAyLCAyNDEsIDIyMCwgMjM4LCAxNTYsIDIzMywgNTgsIDIzNCwgMjI2LCAyMzgsIDE1OSwgCi0gICAgODYsIDI0MCwgMTM5LCA2MywgMjQwLCAxMzksIDIzMSwgOTgsIDIyOCwgMTY3LCAyNDcsIDU0LCAyMzIsIDc3LCAyNDEsIAotICAgIDIwNCwgMjMwLCAxODEsIDI0MSwgMjA0LCAyMjgsIDIyOSwgMjI5LCAxODcsIDg2LCAyMzAsIDIxMiwgNjMsIDIzMCwgMjEyLCAKLSAgICAyMzcsIDE0OSwgMjQ2LCAyMzEsIDIzNywgMTQ5LCA3NywgMiwgMjM3LCAyMzQsIDIzNywgMTQ5LCA3NywgMiwgMjU0LCAxODQsIAotICAgIDIzNCwgMjEzLCAyMzUsIDIsIDIsIDI1MSwgMTcxLCAyMzgsIDE5MywgMjUzLCAyMjUsIDIzMiwgODQsIDYzLCAyNDEsIDIzOCwgCi0gICAgMjM3LCAxODgsIDg2LCAyNDEsIDIzOCwgMjM3LCAxODgsIDIzMywgMjMsIDIwMCwgMjM1LCA5NywgMjM3LCAyMDIsIDI0MCwgCi0gICAgMTk2LCAyMzUsIDQ1LCA4NiwgNDIsIDIzMywgNzgsIDIzNywgMTM1LCA4NiwgNDEsIDIzMywgNzgsIDIzNywgMTM1LCA2MywgCi0gICAgNDIsIDIzMywgNzgsIDIzNywgMTM1LCA2MywgOTksIDIzMywgNzgsIDIzNywgMTM1LCA2MywgNDEsIDIzMywgNzgsIDIzNywgCi0gICAgMTM1LCA2MywgMTAzLCAyMzMsIDc4LCAyMzcsIDEzNSwgMjQ1LCAxODksIDIyLCAyMjksIDI0MywgMjM2LCAyMiwgNTMsIAotICAgIDIzMCwgOTMsIDUzLCAyMzIsIDg1LCA1MywgMjMyLCA5MSwgMjQyLCA1OCwgMjM0LCAxNzgsIDIzNywgODUsIDI1MywgMjEyLCAKLSAgICAyNDYsIDIwOSwgMjQwLCAyMjEsIDEwNiwgMjMyLCAyMjIsIDI0MCwgMjIxLCAxMDYsIDIzMSwgODksIDI0NywgNTMsIDIyLCAKLSAgICAyMzIsIDEwNCwgMjQwLCAxNzYsIDk4LCAyNTQsIDIzLCAyMzYsIDIyMSwgMjM4LCA0LCAyMiwgMjM2LCAyMzAsIDI0NSwgNjIsIAotICAgIDk4LCAyNTMsIDEyMiwgMjQwLCAyNDIsIDIzNSwgNjYsIDMyLCAyMzUsIDEyMywgMjM1LCA2NiwgMzIsIDI0MSwgMTc4LCAKLSAgICAyMzUsIDY2LCAzMiwgMjQwLCAyMDcsIDIzNSwgNjYsIDMyLCAyMzMsIDI0NiwgMjM1LCA2NiwgMzIsIDI0MCwgMTk5LCAyMzUsIAotICAgIDY2LCAzMiwgMjM3LCAxNjgsIDIzNSwgNjYsIDMyLCAyMzEsIDI1NSwgMjM1LCA2NiwgMzIsIDIzNywgOTksIDI0NiwgNTYsIAotICAgIDEwNiwgMjM2LCA0OCwgNjMsIDIzNCwgMTA4LCAyNDAsIDIyMywgNjMsIDIzNSwgMjEzLCAyNDAsIDIyMywgODYsIDIzNSwgCi0gICAgMjEzLCAyNDAsIDIyMywgNjMsIDI1NCwgOCwgMiwgMjQxLCAyMjAsIDI0MCwgMjI1LCAyMzUsIDUzLCAyNDAsIDIxMSwgMjUwLCAKLSAgICAyMDcsIDIzNSwgNTMsIDI0MCwgMjExLCAyMzQsIDE1OSwgMjM3LCAxNTQsIDUzLCAyMzcsIDk5LCAyNDYsIDIzNSwgNTMsIAotICAgIDIzNCwgMTM0LCAyMzYsIDIwOCwgMjM3LCAxNywgMjM0LCAxNjcsIDIzOSwgMjAwLCAyMzgsIDEwMiwgMjM2LCAyNTUsIDIzNiwgCi0gICAgOTEsIDIzNiwgMTksIDI1MCwgMjEzLCAyNDAsIDc4LCAyMzksIDg0LCAyMzMsIDIwLCAyMjksIDU4LCAyMzAsIDIzMywgMjMyLCAKLSAgICA3MiwgMjM2LCAxODksIDYzLCAyNDAsIDE3NSwgMjQxLCAyLCA2MywgMjQwLCAxNzUsIDIzOCwgMzksIDYzLCAyNDAsIDE3NSwgCi0gICAgMjQxLCAyMjUsIDYzLCAyNDAsIDE3NSwgMjM1LCAxNTIsIDYzLCAyNDAsIDE3NSwgMjM1LCAxODYsIDYzLCAyNDAsIDE3NSwgCi0gICAgMjQxLCAyMTEsIDg2LCAyNDAsIDE3NSwgMjQxLCAyLCA4NiwgMjQwLCAxNzUsIDIzOCwgMzksIDg2LCAyNDAsIDE3NSwgMjQxLCAKLSAgICAyMjUsIDg2LCAyNDAsIDE3NSwgMjM1LCAxNTIsIDg2LCAyNDAsIDE3NSwgMjM1LCAxODYsIDg2LCAyNDAsIDE3NSwgMjQxLCAKLSAgICAyMTEsIDg2LCAyNDEsIDI0OSwgMjQwLCAxOTgsIDYzLCAyNDAsIDE5NiwgMjQwLCAxOTgsIDYzLCAyMzUsIDQxLCAyNDAsIAotICAgIDE5OCwgODYsIDI0OCwgOSwgMjQwLCAxOTgsIDYzLCAyNDEsIDI0OSwgMjQwLCAxOTgsIDg2LCAyNDAsIDE5NiwgMjQwLCAKLSAgICAxOTgsIDg2LCAyMzUsIDQxLCAyNDAsIDE5OCwgNjMsIDI0OCwgOSwgMjQwLCAxOTgsIDI1MywgMjI1LCAyMzQsIDIyOCwgCi0gICAgMjM1LCA1MywgMjQwLCAxODYsIDIzNywgMTEyLCAyNDAsIDE4NiwgMjM3LCAyMjksIDIzNywgMTEyLCAyMzgsIDI5LCAyMzcsIAotICAgIDIyOSwgMjMyLCA2LCAyMzgsIDI5LCAyNDEsIDUzLCAyNDcsIDE0MSwgNTMsIDI0MSwgNTMsIDIzNSwgMTMxLCA1MywgMjQxLCAKLSAgICA1MywgMjQwLCAyMzUsIDUzLCAyNDYsIDE4NCwgMTUxLCAyMzcsIDg1LCAyNDYsIDE3MCwgMTUxLCAyMzcsIDg1LCAyMzIsIAotICAgIDY0LCAyMzEsIDIxMywgOTgsIDIzMSwgMjEzLCAxNCwgMzIsIDI0MCwgNTcsIDIzMSwgMjI0LCAyMzEsIDIxMywgMTQsIDMyLCAKLSAgICAyNDAsIDU4LCAyMzEsIDIyNCwgMjMxLCAyMTMsIDE0LCAzMiwgMjQwLCA1OSwgMjMxLCAyMjQsIDIzMSwgMjEzLCAxNCwgMzIsIAotICAgIDI0MCwgNjAsIDIzMSwgMjI0LCAyMzEsIDIxMywgMTQsIDMyLCAyNDAsIDYxLCAyMzEsIDIyNCwgMjMxLCAyMTMsIDE0LCAzMiwgCi0gICAgMjQwLCA2MiwgMjMxLCAyMjQsIDIzMSwgMjEzLCAxNCwgMzIsIDI0MCwgNjMsIDIzMSwgMjI0LCAyMzEsIDIxMywgMTQsIDMyLCAKLSAgICAyMzYsIDkyLCAyMzEsIDEwMCwgODYsIDIzMiwgNjQsIDIzMSwgMjEzLCA5OCwgMjM0LCAyMDUsIDI0MSwgNTksIDk4LCAyMjIsIAotICAgIDI0OCwgMjQxLCA1OSwgOTgsIDIzMiwgMjQ4LCAyNDEsIDU5LCA1MywgMjMxLCAxODYsIDk4LCAyNTMsIDExNSwgMjM2LCA2OCwgCi0gICAgMjUzLCAxMTUsIDIzNiwgNjksIDI1MywgMTE1LCAyMzYsIDcwLCAyNTMsIDExNSwgMjM2LCA3MSwgMjUzLCAxMTUsIDIzNiwgCi0gICAgNzIsIDI1MywgMTE1LCAyMzYsIDczLCA2MywgMjM3LCA0MCwgMiwgNTYsIDIzNywgNDEsIDYzLCAyMzcsIDQwLCAyLCAxMzUsIAotICAgIDI0MCwgMTY5LCA4NiwgMjM3LCA0MCwgMiwgNjMsIDU2LCAyMzcsIDQxLCA4NiwgMjM3LCA0MCwgMiwgMTM1LCA2MywgMjQwLCAKLSAgICAxNjksIDIzMywgMTE1LCAzMiwgMjQwLCAyNDIsIDIzMywgMTE1LCAzMiwgMjQ3LCAyMzMsIDIzNywgMTExLCAzMiwgMjM1LCAKLSAgICAxNzUsIDI0MCwgMjQyLCAyMzcsIDExMSwgMzIsIDIzOCwgMjEsIDI0NywgMjMzLCAyMzcsIDExMSwgMzIsIDIzOCwgMjEsIAotICAgIDI0MCwgMjQyLCAyMzcsIDExMSwgMzIsIDIzNSwgMTc1LCAyNDcsIDIzMywgNjMsIDI0MSwgMTMxLCA4NiwgMjQxLCAxMzEsIAotICAgIDIzOCwgNCwgMjIsIDI0NSwgNzIsIDIzNSwgMTQ1LCAyMzUsIDExNywgMjM2LCAyNTAsIDI0MSwgMjUxLCAxMDYsIDIyOCwgCi0gICAgMjIyLCAyMzYsIDIwOSwgMjM0LCAwLCAyMzYsIDg1LCAyNDMsIDEyMSwgMjQxLCAyNTEsIDEwNiwgMjM2LCAxMDQsIDI0OCwgCi0gICAgMjQwLCA5OCwgMjI3LCAyNDAsIDIzMywgMTI0LCA2MywgMjQwLCAxMzksIDIzNywgMjcsIDUzLCAyMDEsIDIzNywgMjYsIDUzLCAKLSAgICAyMzUsIDE2NiwgMjM3LCAxNTQsIDUzLCAyMzUsIDE2NiwgMjQ2LCAyMzUsIDUzLCAyMzAsIDcyLCAyMzcsIDE1NCwgMjIsIAotICAgIDI0NiwgMjM1LCA1MywgMjQ2LCAyMzUsIDIyLCAyMzcsIDE1NCwgNTMsIDI0NiwgMjM1LCAyLCAxOTUsIDUzLCAyNDYsIDIzNSwgCi0gICAgMiwgMTk1LCAyMiwgMjQ2LCAyMzUsIDIyLCAyMzcsIDE1NCwgNTMsIDYxLCAyNDYsIDIzNSwgMiwgMTk1LCA1MywgMTY5LCAKLSAgICAyNDYsIDIzNSwgMiwgMTk1LCA1MywgMjM3LCA2MCwgNjMsIDIzNSwgMjAsIDIzNywgNjAsIDg2LCAyMzUsIDIwLCAyMzcsIAotICAgIDYwLCAzLCA2MywgMjM1LCAyMCwgMjM0LCAxNTIsIDk4LCAyMzYsIDUyLCA5OCwgMjMzLCA2MCwgMjI5LCAyMDgsIDk4LCAKLSAgICAyMzYsIDM0LCAyMzYsIDg3LCAyNTIsIDYyLCAyMzYsIDE2NSwgMjM4LCAxNDQsIDIzNiwgMTgxLCAyNDQsIDM3LCAyNDAsIAotICAgIDc2LCAyMzYsIDI4LCA4NiwgMjQ3LCAxNzYsIDIzNiwgMTM0LCAyMzQsIDIyMCwgMjI5LCAxNDksIDIzMywgNiwgMjI3LCA3NSwgCi0gICAgNjMsIDIzMywgMTQ4LCAyNDcsIDQsIDYzLCAyMzMsIDE0OCwgMjQxLCAyLCA4NiwgMjMzLCAxNDgsIDI0NywgNCwgODYsIAotICAgIDIzMywgMTQ4LCAyNDEsIDIsIDI0MCwgMTE2LCAyNDEsIDEwMSwgMjMxLCAyNDUsIDg2LCAyMzEsIDI0NSwgMjAzLCAyNDEsIAotICAgIDEwMSwgMjMxLCAyNDUsIDYzLCAyMzEsIDI0NSwgMjMyLCAxMSwgMjM0LCAxNDUsIDUzLCAyNTIsIDgsIDIzOCwgMTkyLCAKLSAgICAyMzIsIDY3LCAyMzIsIDE3OCwgMjM3LCAyMywgMjQwLCAyNTEsIDIzNywgMzEsIDI0MCwgMjUxLCAyMDMsIDQxLCAyMzUsIAotICAgIDEzMywgMjM1LCAxMzMsIDI0MCwgMTE2LCA0MSwgMjM1LCAxMzMsIDYzLCAyNDgsIDExMSwgODYsIDI0OCwgMTExLCAyNDAsIAotICAgIDI0NSwgNzYsIDExMiwgMjQwLCAyNDUsIDc2LCAyMjcsIDEzNCwgMjU0LCAxODQsIDExMiwgMjI3LCAxMzQsIDI1NCwgMTg0LCAKLSAgICAyMzcsIDE0OSwgMjU0LCAxODQsIDExMiwgMjM3LCAxNDksIDI1NCwgMTg0LCAyMzMsIDEyNCwgMTksIDIzNywgODUsIDExMiwgCi0gICAgMTksIDIzNywgODUsIDI0NiwgMTU3LCAyMzcsIDk1LCAyMzcsIDg1LCAxMTIsIDI0NiwgMTU3LCAyMzcsIDk1LCAyMzcsIDg1LCAKLSAgICA3LCAyMzcsIDg1LCAyMzMsIDEyNSwgNjMsIDcsIDIzNywgODUsIDIzMywgMTI0LCA3LCAyMzcsIDg1LCAyMzYsIDE0NSwgCi0gICAgMjM3LCA4NSwgMjQ3LCA1MywgMTA2LCAyMzgsIDE3MywgMjQ2LCAxNjAsIDIyNSwgMTA1LCAyMzEsIDE5OCwgMjQ2LCAxNjAsIAotICAgIDIyNywgMTM2LCAyMzEsIDE5OCwgMTEyLCAyNDYsIDE2MCwgMjI3LCAxMzYsIDIzMSwgMTk4LCAyNDYsIDE2MCwgMjI5LCAKLSAgICAyMzcsIDIzMSwgMTk4LCA4NiwgMjQ2LCAxNjAsIDIzNSwgNTAsIDI0MCwgMTM5LCA2MywgMjQ2LCAxNjAsIDIzNSwgNTAsIAotICAgIDI0MCwgMTM5LCAyMzcsIDE2NSwgMjMzLCAxMjQsIDYzLCAyNDAsIDEzOSwgMzMsIDYzLCAyNDAsIDEzOSwgMjQ2LCAxNTcsIAotICAgIDIzNywgOTUsIDg2LCAyNDAsIDEzOSwgODYsIDIzNywgOTUsIDYzLCAyNDAsIDEzOSwgMjMzLCAxMjQsIDg2LCAyNDAsIDEzOSwgCi0gICAgMTEyLCAyMzMsIDEyNCwgODYsIDI0MCwgMTM5LCAyMzMsIDE3NSwgMjQwLCAxMzksIDIzMywgMTI1LCA2MywgMjQwLCAxMzksIAotICAgIDExMiwgMjMxLCAxOTgsIDI0NiwgMTU3LCAyMzcsIDk1LCAyMzEsIDE5OCwgMjQwLCAxNDIsIDI0MCwgMTIsIDIzMSwgMTk4LCAKLSAgICAyNDAsIDE0MiwgMjM1LCA1MCwgODYsIDI0MCwgMTM5LCAyNDAsIDE0MiwgMjM1LCA1MCwgMjMzLCAxNzUsIDI0MCwgMTM5LCAKLSAgICAyNTMsIDE3LCAyMzUsIDUwLCA4NiwgMjQwLCAxMzksIDI0MCwgMTQyLCAyMzUsIDUwLCAyMjksIDIxMiwgODYsIDI0MCwgCi0gICAgMTM5LCAxMTIsIDI0MCwgMTQyLCAyMzUsIDUwLCAyMjksIDIxMiwgODYsIDI0MCwgMTM5LCAyMzgsIDc5LCAyMzUsIDUwLCAKLSAgICA4NiwgMjQwLCAxMzksIDIzNSwgMjEwLCAyMzUsIDUwLCAyMzEsIDE5OCwgMjI1LCAxMDUsIDIzMSwgMTk4LCAyNDYsIDE1NywgCi0gICAgMjM3LCA5NSwgMjI1LCAxMDUsIDIzMSwgMTk4LCAxMTIsIDIyNSwgMTA1LCAyMzEsIDE5OCwgMjUzLCAxNywgMjMzLCAyMjgsIAotICAgIDg2LCAyMiwgNjMsIDIzMSwgMjM4LCA4NiwgMjMxLCAyMzgsIDYzLCAyMzEsIDIzOCwgMjQwLCAxNDIsIDIzMywgMjI4LCAKLSAgICAyMzMsIDEyNCwgODYsIDIzMSwgMjM4LCAzMywgMjQ2LCAxNTcsIDIzNywgOTUsIDI0MCwgMTQyLCAyMzUsIDUwLCAyNDAsIAotICAgIDEzOSwgMTEyLCAyMjUsIDEwNSwgMjMzLCAxNzUsIDIzMSwgMTk4LCAyMzAsIDE3MSwgMjQ1LCAyNTEsIDIzMSwgMTgwLCAKLSAgICAyMzAsIDE3MSwgMTEyLCAyMzYsIDI2LCAyMzAsIDE3MSwgMjMzLCAyMzksIDExMiwgMjMzLCAyMzksIDIyNywgMTM2LCAyMzEsIAotICAgIDE5OCwgMjQwLCAxNDIsIDIyNSwgMTA1LCAyMzIsIDQwLCAyMzEsIDE5OCwgMTEyLCAyNDAsIDE0MiwgMjI1LCAxMDUsIDIzMiwgCi0gICAgNDAsIDIzMSwgMTk4LCAyMzMsIDEyNSwgNjMsIDIzNSwgMjAsIDIwMywgNDEsIDIyNywgMjAyLCA2MywgMjM1LCAyNywgMjQwLCAKLSAgICAxMTYsIDQxLCAyMjcsIDIwMiwgNjMsIDIzNSwgMjcsIDIwMywgNDEsIDIzMywgMTI1LCA2MywgMjM1LCAyNywgMjQwLCAxMTYsIAotICAgIDQxLCAyMzMsIDEyNSwgNjMsIDIzNSwgMjcsIDg2LCAyMzUsIDQxLCAyNDAsIDE3MiwgNjMsIDI1NCwgMTg0LCAxNTcsIDYxLCAKLSAgICAxMjUsIDIzNywgNjAsIDYxLCAxMjUsIDExMiwgNjEsIDEyNSwgMTEyLCAyMzcsIDYyLCAyMDksIDI0MCwgMTYyLCAyMzEsIAotICAgIDE5OSwgMTY1LCAyMzEsIDIwMCwgMTEyLCAyMzcsIDYyLCAyNDAsIDE2MiwgMjMxLCAxOTksIDE2NSwgMjMxLCAyMDAsIDExMiwgCi0gICAgNDcsIDIwOSwgMjQwLCAxNjIsIDIzMSwgMTk5LCAxNjUsIDIzMSwgMjAwLCAxMTIsIDQ3LCAyNDAsIDE2MiwgMjMxLCAxOTksIAotICAgIDE2NSwgMjMxLCAyMDAsIDIzNywgMTUzLCAyNTEsIDIzOCwgMjMxLCAyNDIsIDUsIDIzMSwgMjAwLCAxMTIsIDIyOSwgMTY1LCAKLSAgICAxNjUsIDIzMSwgMjAwLCAxMTIsIDI0MCwgMTk2LCAyMjksIDE2NSwgMTY1LCAyMzEsIDIwMCwgMTEyLCA4NiwgMjM3LCAyMDQsIAotICAgIDIzNSwgOTcsIDExMiwgODYsIDI0MCwgMTk2LCAyMzUsIDQ1LCAyMzcsIDIwMiwgMjM3LCAyMDQsIDIzNSwgOTcsIDIzNywgCi0gICAgMjAyLCAyNDAsIDE5NiwgMjM1LCA0NSwgMjM3LCA2MCwgNDIsIDIyOSwgMTY5LCAyMzEsIDIwMCwgMjM3LCA2MCwgNDEsIAotICAgIDIyOSwgMTY5LCAyMzEsIDIwMCwgMjM3LCA2MCwgMjMxLCAyMzAsIDQyLCAyMjksIDE2OSwgMjMxLCAyMDAsIDIzNywgNjAsIAotICAgIDIzMSwgMjMwLCA0MSwgMjI5LCAxNjksIDIzMSwgMjAwLCAyMzcsIDYwLCAyMjcsIDE4NSwgMjQwLCAxMTcsIDIzNSwgMjIsIAotICAgIDIzMSwgMjAwLCAyMzcsIDYwLCAyMjcsIDEzMywgMjQwLCAxMTcsIDIzNSwgMjIsIDIzMSwgMjAwLCAxMTIsIDIyNywgMTg1LCAKLSAgICAyNDAsIDExNywgMjMxLCAxOTksIDE2NSwgMjMxLCAyMDAsIDExMiwgMjI3LCAxMzMsIDI0MCwgMTE3LCAyMzEsIDE5OSwgCi0gICAgMTY1LCAyMzEsIDIwMCwgMTEyLCAyMjcsIDE4NSwgMjQwLCAxMTcsIDIzNSwgMjIsIDIzMSwgMjAwLCAxMTIsIDIyNywgMTMzLCAKLSAgICAyNDAsIDExNywgMjM1LCAyMiwgMjMxLCAyMDAsIDE1NywgNDIsIDIzMywgODksIDI0MCwgMTU4LCAyMzUsIDIyLCAyMzEsIAotICAgIDIwMCwgMTU3LCA0MSwgMjMzLCA4OSwgMjQwLCAxNTgsIDIzNSwgMjIsIDIzMSwgMjAwLCAyMzcsIDYwLCA0MiwgMjQwLCAKLSAgICAxMzcsIDIzNSwgMjIsIDIzMSwgMjAwLCAyMzcsIDYwLCA0MSwgMjQwLCAxMzcsIDIzNSwgMjIsIDIzMSwgMjAwLCAyMzUsIAotICAgIDI1LCAyMzMsIDcxLCAzMywgMjEsIDExOCwgMjM1LCAyNSwgMjMzLCA3MSwgMzMsIDIxLCAxMTMsIDIzNSwgMjUsIDIzMywgCi0gICAgNzEsIDMzLCAyMSwgMTY2LCAyMzUsIDI1LCAyMzMsIDcxLCAzMywgMjEsIDE1OCwgMjM1LCAyNSwgMjMzLCA3MSwgMzMsIDIxLCAKLSAgICAxNzMsIDIzNSwgMjUsIDIzMywgNzEsIDMzLCAyMSwgMTgzLCAyMzUsIDI1LCAyMzMsIDcxLCAzMywgMjEsIDE5NCwgMjM1LCAKLSAgICAyNSwgMjMzLCA3MSwgMzMsIDIxLCAxODcsIDIzNSwgMjUsIDIzMywgNzEsIDMzLCAyMSwgMTkyLCAyMzUsIDI1LCAyMzMsIAotICAgIDcxLCAzMywgNjUsIDI0NiwgMTc5LCAyMzUsIDI1LCAzMywgMzAsIDIxLCAxMTgsIDIzNSwgMjUsIDMzLCAzMCwgMjEsIDExMywgCi0gICAgMjM1LCAyNSwgMzMsIDMwLCAyMSwgMTY2LCAyMzUsIDI1LCAzMywgMzAsIDIxLCAxNTgsIDIzNSwgMjUsIDMzLCAzMCwgMjEsIAotICAgIDE3MywgMjM1LCAyNSwgMzMsIDMwLCAyMSwgMTgzLCAyMzUsIDI1LCAzMywgMzAsIDIxLCAxOTQsIDIzNSwgMjUsIDMzLCAzMCwgCi0gICAgMjEsIDE4NywgMjM1LCAyNSwgMzMsIDMwLCAyMSwgMTkyLCAyMzUsIDI1LCAzMywgMzAsIDY1LCAyNDYsIDE3OSwgMjM1LCAKLSAgICAyNSwgMjMzLCA3MSwgMzMsIDMwLCAyMSwgMTE4LCAyMzUsIDI1LCAyMzMsIDcxLCAzMywgMzAsIDIxLCAxMTMsIDIzNSwgMjUsIAotICAgIDIzMywgNzEsIDMzLCAzMCwgMjEsIDE2NiwgMjM1LCAyNSwgMjMzLCA3MSwgMzMsIDMwLCAyMSwgMTU4LCAyMzUsIDI1LCAKLSAgICAyMzMsIDcxLCAzMywgMzAsIDIxLCAxNzMsIDIzNSwgMjUsIDIzMywgNzEsIDMzLCAzMCwgMjEsIDE4MywgMjM1LCAyNSwgCi0gICAgMjMzLCA3MSwgMzMsIDMwLCAyMSwgMTk0LCAyMzUsIDI1LCAyMzMsIDcxLCAzMywgMzAsIDIxLCAxODcsIDIzNSwgMjUsIAotICAgIDIzMywgNzEsIDMzLCAzMCwgMjEsIDE5MiwgMjM1LCAyNSwgMjMzLCA3MSwgMzMsIDMwLCA2NSwgMjQ2LCAxNzksIDExMiwgCi0gICAgMjMwLCAxMjMsIDgxLCA1OCwgMTEyLCAyNDAsIDE0MSwgMjQ2LCAxNzAsIDU4LCAxMTIsIDgxLCA1OCwgMTEyLCAyNDAsIAotICAgIDEzNCwgMjQ2LCAxNzAsIDU4LCAyMzQsIDg3LCAyNDAsIDE0MywgODEsIDU4LCAxMTIsIDIyOSwgNTcsIDgxLCA1OCwgMjI1LCAKLSAgICAxMDcsIDgxLCA1OCwgMTEyLCAyMjUsIDEwNywgODEsIDU4LCAyMzcsIDExMCwgMjI1LCAxMDcsIDgxLCA1OCwgMTEyLCAyMzcsIAotICAgIDExMCwgMjI1LCAxMDcsIDgxLCA1OCwgODYsIDgxLCA1OCwgMjM1LCAyMjYsIDIzMCwgMTE5LCA4MSwgMjMwLCAxMzMsIDIzNSwgCi0gICAgMjI2LCAyMjcsIDE1NywgODEsIDIzMCwgMTMzLCA4NiwgODEsIDIzMCwgMTMzLCAxMTIsIDg2LCAyMzcsIDE1MywgMjMxLCAKLSAgICAxOTEsIDIyLCA4MSwgNTgsIDExMiwgODYsIDIzNywgMTUzLCAyMzUsIDE4LCAyMiwgODEsIDU4LCAyNDEsIDI1MCwgODYsIAotICAgIDgxLCA1OCwgMTEyLCAyMjUsIDExMiwgODYsIDgxLCA1OCwgMjI5LCA1NSwgNjMsIDgxLCA1OCwgMjMwLCA3NiwgNjMsIDgxLCAKLSAgICA1OCwgMjI5LCAyMzMsIDIzMywgMTI1LCA2MywgODEsIDU4LCAyMjksIDIwLCAyMzMsIDEyNSwgNjMsIDgxLCA1OCwgMTEyLCAKLSAgICAyMDMsIDIyNywgMTM1LCA2MywgODEsIDU4LCAxMTIsIDI0MCwgMTE2LCAyMjcsIDEzNSwgNjMsIDgxLCA1OCwgMjM1LCAxOTYsIAotICAgIDIwMywgMjI3LCAxMzUsIDYzLCA4MSwgNTgsIDIzNSwgMTk2LCAyNDAsIDExNiwgMjI3LCAxMzUsIDYzLCA4MSwgNTgsIDMzLCAKLSAgICAxMTIsIDYzLCA4MSwgNTgsIDIyNywgMTMxLCA4MSwgNTgsIDIyNSwgMTA2LCAyNDAsIDE0MSwgMjQ2LCAxNzAsIDU4LCAyMjUsIAotICAgIDEwNiwgODEsIDU4LCAyMjUsIDEwNiwgMjQwLCAxMzQsIDI0NiwgMTcwLCA1OCwgMTEyLCAyMjUsIDEwNiwgMjQwLCAxNDEsIAotICAgIDI0NiwgMTcwLCA1OCwgMTEyLCAyMjUsIDEwNiwgODEsIDU4LCAxMTIsIDIyNSwgMTA2LCAyNDAsIDEzNCwgMjQ2LCAxNzAsIAotICAgIDU4LCAyMjcsIDc5LCA4MSwgNTgsIDExMiwgMjI1LCAxMDMsIDgxLCA1OCwgMjI4LCAyMjEsIDgxLCA1OCwgMTEyLCAyMjgsIAotICAgIDIyMSwgODEsIDU4LCAyMjgsIDAsIDgxLCA1OCwgMTUyLCAyMjksIDI0OCwgMjM3LCA5OCwgNjMsIDIzMywgODAsIDIzMCwgCi0gICAgMTYyLCAzLCA2MywgMjMxLCAxOTMsIDIyNywgMTQ2LCAyNDYsIDE1NywgMjM1LCA2MSwgMjQ2LCAxNTcsIDIzMSwgMjI4LCAKLSAgICA0MiwgMjMzLCAyMzIsIDI1MywgMTcwLCAyMzAsIDE2MywgNDEsIDIzMywgMjMyLCAyNTMsIDE3MCwgMjMwLCAxNjMsIDE0NSwgCi0gICAgMiwgNTYsIDIzNSwgNTcsIDIzNSwgMzcsIDIzNSwgNTQsIDIzMiwgMzgsIDIzNSwgNjEsIDIzMywgODMsIDIzMiwgMzgsIAotICAgIDIzMywgMTA0LCA2MSwgMjUyLCAyMTksIDIsIDE2OSwgODIsIDE4MiwgMjMyLCAxMTQsIDYzLCAyMzUsIDQxLCAyLCAyMzUsIAotICAgIDExMiwgMjQ2LCAxNjQsIDIyLCAyLCAyNDYsIDE2NCwgMjM1LCA0NCwgMTA2LCAyMzUsIDcxLCAyMzMsIDEzOSwgMjAzLCA0MSwgCi0gICAgMjM3LCA3OSwgMiwgMjQ2LCAxNjQsIDI0MCwgMTE2LCA0MiwgMjM3LCA3OSwgMiwgMjQ2LCAxNjQsIDQyLCAyNDEsIDU3LCAKLSAgICAyNDAsIDI1MywgNDEsIDI0MSwgNTcsIDI0MCwgMjUzLCAyNDYsIDE2MiwgMjQxLCA1NywgMjQwLCAyNTMsIDI0MCwgMTg1LCAKLSAgICA5OSwgMjQwLCAxNDksIDI0MCwgMTg1LCAxMDMsIDI0MCwgMTQ5LCA0MiwgMjIsIDQxLCA0NywgMjMwLCAxNDEsIDQyLCAyMiwgCi0gICAgNDEsIDI0MCwgMTQ5LCA0MiwgMjMyLCAwLCAxODIsIDQxLCAyNDAsIDE0OSwgMTgyLCA0MiwgMjQwLCAxNDksIDk5LCAyNDYsIAotICAgIDIxNSwgMiwgMjM3LCA0MCwgNDYsIDIzNiwgMTQzLCAyMzUsIDExOSwgMjU0LCAyMDUsIDE2OSwgMjQ1LCAxMzksIDYzLCAKLSAgICAyMjcsIDE5NCwgMjMzLCA5MCwgNjMsIDIyNywgMTk0LCAyMzUsIDQxLCAyLCAxMTcsIDI0MCwgMjE2LCA2MywgMjI3LCAxOTQsIAotICAgIDIzNSwgNDEsIDIsIDgxLCAyNDAsIDIxNiwgNjMsIDM3LCAyLCAxMTcsIDI0MCwgMjE2LCA2MywgMzcsIDIsIDgxLCAyNDAsIAotICAgIDIxNiwgMTIsIDQyLCA2MywgMzcsIDEwNCwgMTIsIDQxLCA2MywgMzcsIDEwNCwgMTIsIDQyLCAyNDAsIDExNywgMTA0LCAxMiwgCi0gICAgNDEsIDI0MCwgMTE3LCAxMDQsIDEyLCA0MiwgNDcsIDI0MCwgMTE3LCAxMDQsIDEyLCA0MSwgNDcsIDI0MCwgMTE3LCAxMDQsIAotICAgIDEyLCA0MiwgNjMsIDIzMywgODksIDI0MCwgMTU4LCAxMDQsIDEyLCA0MSwgNjMsIDIzMywgODksIDI0MCwgMTU4LCAxMDQsIAotICAgIDEyLCA0MiwgMjMxLCAyMzAsIDIyOCwgMTgwLCAxMiwgNDEsIDIzMSwgMjMwLCAyMjgsIDE4MCwgMjM1LCAxOCwgMjMxLCAKLSAgICAyMTIsIDU4LCAyMzEsIDE5MSwgMjMxLCAyMTIsIDU4LCAyMjcsIDE4NCwgMjM3LCAyNTMsIDIzNywgNDAsIDU4LCAyMzEsIAotICAgIDIwOSwgMjM3LCAyNTMsIDIzNywgNDAsIDU4LCA0MSwgNjcsIDIsIDMzLCAyNDAsIDE4MCwgMTgyLCAxMTcsIDU4LCAxODIsIAotICAgIDgxLCA1OCwgMTgyLCA0MiwgNDEsIDU4LCAxODIsIDExNywgNDcsIDU4LCAxODIsIDgxLCA0NywgNTgsIDE4MiwgNDIsIDQxLCAKLSAgICA0NywgNTgsIDE4MiwgMTE3LCA2NywgMjQ2LCAxNzIsIDEyNSwgMTgyLCA4MSwgNjcsIDI0NiwgMTcyLCAxMjUsIDE4MiwgCi0gICAgMTE3LCA0NywgNjcsIDI0NiwgMTcyLCAxMjUsIDE4MiwgODEsIDQ3LCA2NywgMjQ2LCAxNzIsIDEyNSwgMTgyLCA4MSwgMjMzLCAKLSAgICAxNTYsIDU4LCAzOSwgNDAsIDIzOCwgMTI2LCAzOSwgNDAsIDIzNiwgNTQsIDM5LCA0MCwgMjM2LCA1NSwgMzksIDQwLCAyMzQsIAotICAgIDU4LCAzOSwgNDAsIDIzNiwgNTYsIDM5LCA0MCwgMjM0LCA1OSwgMzksIDQwLCAyMzQsIDY1LCAzOSwgNDAsIDIzMiwgMTE1LCAKLSAgICAzOSwgNDAsIDIzNiwgNTcsIDM5LCA0MCwgMjM0LCA2MCwgMzksIDQwLCAyMzQsIDY2LCAzOSwgNDAsIDIzMiwgMTE2LCAzOSwgCi0gICAgNDAsIDIzNCwgNzEsIDM5LCA0MCwgMjMyLCAxMjEsIDM5LCA0MCwgMjMyLCAxMzYsIDM5LCA0MCwgMjMwLCAyNDcsIDM5LCAKLSAgICA0MCwgMjM2LCA1OCwgMzksIDQwLCAyMzQsIDYxLCAzOSwgNDAsIDIzNCwgNjcsIDM5LCA0MCwgMjMyLCAxMTcsIDM5LCA0MCwgCi0gICAgMjM0LCA3MiwgMzksIDQwLCAyMzIsIDEyMiwgMzksIDQwLCAyMzIsIDEzNywgMzksIDQwLCAyMzAsIDI0OCwgMzksIDQwLCAKLSAgICAyMzQsIDc2LCAzOSwgNDAsIDIzMiwgMTI2LCAzOSwgNDAsIDIzMiwgMTQxLCAzOSwgNDAsIDIzMCwgMjUyLCAzOSwgNDAsIAotICAgIDIzMiwgMTUxLCAzOSwgNDAsIDIzMSwgNiwgMzksIDQwLCAyMzEsIDI2LCAzOSwgNDAsIDIyOSwgMjUzLCAzOSwgNDAsIDIzNiwgCi0gICAgNTksIDM5LCA0MCwgMjM0LCA2MiwgMzksIDQwLCAyMzQsIDY4LCAzOSwgNDAsIDIzMiwgMTE4LCAzOSwgNDAsIDIzNCwgNzMsIAotICAgIDM5LCA0MCwgMjMyLCAxMjMsIDM5LCA0MCwgMjMyLCAxMzgsIDM5LCA0MCwgMjMwLCAyNDksIDM5LCA0MCwgMjM0LCA3NywgCi0gICAgMzksIDQwLCAyMzIsIDEyNywgMzksIDQwLCAyMzIsIDE0MiwgMzksIDQwLCAyMzAsIDI1MywgMzksIDQwLCAyMzIsIDE1MiwgCi0gICAgMzksIDQwLCAyMzEsIDcsIDM5LCA0MCwgMjMxLCAyNywgMzksIDQwLCAyMjksIDI1NCwgMzksIDQwLCAyMzQsIDgwLCAzOSwgCi0gICAgNDAsIDIzMiwgMTMwLCAzOSwgNDAsIDIzMiwgMTQ1LCAzOSwgNDAsIDIzMSwgMCwgMzksIDQwLCAyMzIsIDE1NSwgMzksIDQwLCAKLSAgICAyMzEsIDEwLCAzOSwgNDAsIDIzMSwgMzAsIDM5LCA0MCwgMjMwLCAxLCAzOSwgNDAsIDIzMiwgMTYxLCAzOSwgNDAsIDIzMSwgCi0gICAgMTYsIDM5LCA0MCwgMjMxLCAzNiwgMzksIDQwLCAyMzAsIDcsIDM5LCA0MCwgMjMxLCA0NiwgMzksIDQwLCAyMzAsIDE3LCAKLSAgICAzOSwgNDAsIDIzMCwgMzIsIDM5LCA0MCwgMjI4LCAyNDMsIDM5LCA0MCwgMjM2LCA2MCwgMzksIDQwLCAyMzQsIDYzLCAzOSwgCi0gICAgNDAsIDIzNCwgNjksIDM5LCA0MCwgMjMyLCAxMTksIDM5LCA0MCwgMjM0LCA3NCwgMzksIDQwLCAyMzIsIDEyNCwgMzksIDQwLCAKLSAgICAyMzIsIDEzOSwgMzksIDQwLCAyMzAsIDI1MCwgMzksIDQwLCAyMzQsIDc4LCAzOSwgNDAsIDIzMiwgMTI4LCAzOSwgNDAsIAotICAgIDIzMiwgMTQzLCAzOSwgNDAsIDIzMCwgMjU0LCAzOSwgNDAsIDIzMiwgMTUzLCAzOSwgNDAsIDIzMSwgOCwgMzksIDQwLCAKLSAgICAyMzEsIDI4LCAzOSwgNDAsIDIyOSwgMjU1LCAzOSwgNDAsIDIzNCwgODEsIDM5LCA0MCwgMjMyLCAxMzEsIDM5LCA0MCwgCi0gICAgMjMyLCAxNDYsIDM5LCA0MCwgMjMxLCAxLCAzOSwgNDAsIDIzMiwgMTU2LCAzOSwgNDAsIDIzMSwgMTEsIDM5LCA0MCwgMjMxLCAKLSAgICAzMSwgMzksIDQwLCAyMzAsIDIsIDM5LCA0MCwgMjMyLCAxNjIsIDM5LCA0MCwgMjMxLCAxNywgMzksIDQwLCAyMzEsIDM3LCAKLSAgICAzOSwgNDAsIDIzMCwgOCwgMzksIDQwLCAyMzEsIDQ3LCAzOSwgNDAsIDIzMCwgMTgsIDM5LCA0MCwgMjMwLCAzMywgMzksIAotICAgIDQwLCAyMjgsIDI0NCwgMzksIDQwLCAyMzQsIDgzLCAzOSwgNDAsIDIzMiwgMTMzLCAzOSwgNDAsIDIzMiwgMTQ4LCAzOSwgCi0gICAgNDAsIDIzMSwgMywgMzksIDQwLCAyMzIsIDE1OCwgMzksIDQwLCAyMzEsIDEzLCAzOSwgNDAsIDIzMSwgMzMsIDM5LCA0MCwgCi0gICAgMjMwLCA0LCAzOSwgNDAsIDIzMiwgMTY0LCAzOSwgNDAsIDIzMSwgMTksIDM5LCA0MCwgMjMxLCAzOSwgMzksIDQwLCAyMzAsIAotICAgIDEwLCAzOSwgNDAsIDIzMSwgNDksIDM5LCA0MCwgMjMwLCAyMCwgMzksIDQwLCAyMzAsIDM1LCAzOSwgNDAsIDIyOCwgMjQ2LCAKLSAgICAzOSwgNDAsIDIzMiwgMTY3LCAzOSwgNDAsIDIzMSwgMjIsIDM5LCA0MCwgMjMxLCA0MiwgMzksIDQwLCAyMzAsIDEzLCAzOSwgCi0gICAgNDAsIDIzMSwgNTIsIDM5LCA0MCwgMjMwLCAyMywgMzksIDQwLCAyMzAsIDM4LCAzOSwgNDAsIDIyOCwgMjQ5LCAzOSwgNDAsIAotICAgIDIzMSwgNTYsIDM5LCA0MCwgMjMwLCAyNywgMzksIDQwLCAyMzAsIDQyLCAzOSwgNDAsIDIyOCwgMjUzLCAzOSwgNDAsIDIzMCwgCi0gICAgNDcsIDM5LCA0MCwgMjI5LCAyLCAzOSwgNDAsIDIyOSwgOCwgMzksIDQwLCAyMjcsIDIzMSwgMzksIDQwLCAyMzYsIDYxLCAKLSAgICAzOSwgNDAsIDIzNCwgNjQsIDM5LCA0MCwgMjM0LCA3MCwgMzksIDQwLCAyMzIsIDEyMCwgMzksIDQwLCAyMzQsIDc1LCAzOSwgCi0gICAgNDAsIDIzMiwgMTI1LCAzOSwgNDAsIDIzMiwgMTQwLCAzOSwgNDAsIDIzMCwgMjUxLCAzOSwgNDAsIDIzNCwgNzksIDM5LCAKLSAgICA0MCwgMjMyLCAxMjksIDM5LCA0MCwgMjMyLCAxNDQsIDM5LCA0MCwgMjMwLCAyNTUsIDM5LCA0MCwgMjMyLCAxNTQsIDM5LCAKLSAgICA0MCwgMjMxLCA5LCAzOSwgNDAsIDIzMSwgMjksIDM5LCA0MCwgMjMwLCAwLCAzOSwgNDAsIDIzNCwgODIsIDM5LCA0MCwgCi0gICAgMjMyLCAxMzIsIDM5LCA0MCwgMjMyLCAxNDcsIDM5LCA0MCwgMjMxLCAyLCAzOSwgNDAsIDIzMiwgMTU3LCAzOSwgNDAsIAotICAgIDIzMSwgMTIsIDM5LCA0MCwgMjMxLCAzMiwgMzksIDQwLCAyMzAsIDMsIDM5LCA0MCwgMjMyLCAxNjMsIDM5LCA0MCwgMjMxLCAKLSAgICAxOCwgMzksIDQwLCAyMzEsIDM4LCAzOSwgNDAsIDIzMCwgOSwgMzksIDQwLCAyMzEsIDQ4LCAzOSwgNDAsIDIzMCwgMTksIAotICAgIDM5LCA0MCwgMjMwLCAzNCwgMzksIDQwLCAyMjgsIDI0NSwgMzksIDQwLCAyMzQsIDg0LCAzOSwgNDAsIDIzMiwgMTM0LCAzOSwgCi0gICAgNDAsIDIzMiwgMTQ5LCAzOSwgNDAsIDIzMSwgNCwgMzksIDQwLCAyMzIsIDE1OSwgMzksIDQwLCAyMzEsIDE0LCAzOSwgNDAsIAotICAgIDIzMSwgMzQsIDM5LCA0MCwgMjMwLCA1LCAzOSwgNDAsIDIzMiwgMTY1LCAzOSwgNDAsIDIzMSwgMjAsIDM5LCA0MCwgMjMxLCAKLSAgICA0MCwgMzksIDQwLCAyMzAsIDExLCAzOSwgNDAsIDIzMSwgNTAsIDM5LCA0MCwgMjMwLCAyMSwgMzksIDQwLCAyMzAsIDM2LCAKLSAgICAzOSwgNDAsIDIyOCwgMjQ3LCAzOSwgNDAsIDIzMiwgMTY4LCAzOSwgNDAsIDIzMSwgMjMsIDM5LCA0MCwgMjMxLCA0MywgMzksIAotICAgIDQwLCAyMzAsIDE0LCAzOSwgNDAsIDIzMSwgNTMsIDM5LCA0MCwgMjMwLCAyNCwgMzksIDQwLCAyMzAsIDM5LCAzOSwgNDAsIAotICAgIDIyOCwgMjUwLCAzOSwgNDAsIDIzMSwgNTcsIDM5LCA0MCwgMjMwLCAyOCwgMzksIDQwLCAyMzAsIDQzLCAzOSwgNDAsIDIyOCwgCi0gICAgMjU0LCAzOSwgNDAsIDIzMCwgNDgsIDM5LCA0MCwgMjI5LCAzLCAzOSwgNDAsIDIyOSwgOSwgMzksIDQwLCAyMjcsIDIzMiwgCi0gICAgMzksIDQwLCAyMzQsIDg1LCAzOSwgNDAsIDIzMiwgMTM1LCAzOSwgNDAsIDIzMiwgMTUwLCAzOSwgNDAsIDIzMSwgNSwgMzksIAotICAgIDQwLCAyMzIsIDE2MCwgMzksIDQwLCAyMzEsIDE1LCAzOSwgNDAsIDIzMSwgMzUsIDM5LCA0MCwgMjMwLCA2LCAzOSwgNDAsIAotICAgIDIzMiwgMTY2LCAzOSwgNDAsIDIzMSwgMjEsIDM5LCA0MCwgMjMxLCA0MSwgMzksIDQwLCAyMzAsIDEyLCAzOSwgNDAsIDIzMSwgCi0gICAgNTEsIDM5LCA0MCwgMjMwLCAyMiwgMzksIDQwLCAyMzAsIDM3LCAzOSwgNDAsIDIyOCwgMjQ4LCAzOSwgNDAsIDIzMiwgMTY5LCAKLSAgICAzOSwgNDAsIDIzMSwgMjQsIDM5LCA0MCwgMjMxLCA0NCwgMzksIDQwLCAyMzAsIDE1LCAzOSwgNDAsIDIzMSwgNTQsIDM5LCAKLSAgICA0MCwgMjMwLCAyNSwgMzksIDQwLCAyMzAsIDQwLCAzOSwgNDAsIDIyOCwgMjUxLCAzOSwgNDAsIDIzMSwgNTgsIDM5LCA0MCwgCi0gICAgMjMwLCAyOSwgMzksIDQwLCAyMzAsIDQ0LCAzOSwgNDAsIDIyOCwgMjU1LCAzOSwgNDAsIDIzMCwgNDksIDM5LCA0MCwgMjI5LCAKLSAgICA0LCAzOSwgNDAsIDIyOSwgMTAsIDM5LCA0MCwgMjI3LCAyMzMsIDM5LCA0MCwgMjMyLCAxNzAsIDM5LCA0MCwgMjMxLCAyNSwgCi0gICAgMzksIDQwLCAyMzEsIDQ1LCAzOSwgNDAsIDIzMCwgMTYsIDM5LCA0MCwgMjMxLCA1NSwgMzksIDQwLCAyMzAsIDI2LCAzOSwgCi0gICAgNDAsIDIzMCwgNDEsIDM5LCA0MCwgMjI4LCAyNTIsIDM5LCA0MCwgMjMxLCA1OSwgMzksIDQwLCAyMzAsIDMwLCAzOSwgNDAsIAotICAgIDIzMCwgNDUsIDM5LCA0MCwgMjI5LCAwLCAzOSwgNDAsIDIzMCwgNTAsIDM5LCA0MCwgMjI5LCA1LCAzOSwgNDAsIDIyOSwgCi0gICAgMTEsIDM5LCA0MCwgMjI3LCAyMzQsIDM5LCA0MCwgMjMxLCA2MCwgMzksIDQwLCAyMzAsIDMxLCAzOSwgNDAsIDIzMCwgNDYsIAotICAgIDM5LCA0MCwgMjI5LCAxLCAzOSwgNDAsIDIzMCwgNTEsIDM5LCA0MCwgMjI5LCA2LCAzOSwgNDAsIDIyOSwgMTIsIDM5LCA0MCwgCi0gICAgMjI3LCAyMzUsIDM5LCA0MCwgMjMwLCA1MiwgMzksIDQwLCAyMjksIDcsIDM5LCA0MCwgMjI5LCAxMywgMzksIDQwLCAyMjcsIAotICAgIDIzNiwgMzksIDQwLCAyMjksIDE0LCAzOSwgNDAsIDIyNywgMjM3LCAzOSwgNDAsIDIyNywgMjM4LCAzOSwgNDAsIDIyNywgCi0gICAgMTYyLCA4MSwgMjMwLCAxMzIsIDY3LCAyLCA2MSwgODIsIDgxLCAyMzAsIDEzMiwgNjcsIDIsIDQ3LCA2MSwgODIsIDExNywgCi0gICAgNDcsIDY3LCAyLCA2MSwgODIsIDgxLCA0NywgNjcsIDIsIDYxLCA4MiwgNDIsIDQxLCA0NywgNjcsIDIsIDYxLCA4MiwgODEsIAotICAgIDIzMCwgMTMyLCA2NywgMjQ2LCAxNzIsIDEyNSwgMTE3LCA0NywgNjcsIDI0NiwgMTcyLCAxMjUsIDgxLCA0NywgNjcsIDI0NiwgCi0gICAgMTcyLCAxMjUsIDIzMSwgMTkxLCA2NywgMiwgMTY5LCA4MiwgMjM1LCAxOCwgNjcsIDIsIDE2OSwgODIsIDIzNSwgMTgsIAotICAgIDIzNywgNDksIDU4LCAyMzEsIDE5MSwgMjM3LCA0OSwgNTgsIDExNywgNDcsIDI0NiwgMTg3LCA1OCwgODEsIDQ3LCAyNDYsIAotICAgIDE4NywgNTgsIDExNywgMjM3LCA0OSwgMjQ2LCAxODcsIDU4LCA4MSwgMjM3LCA0OSwgMjQ2LCAxODcsIDU4LCA4MSwgMjMwLCAKLSAgICAxMzIsIDIzNywgNDksIDI0NiwgMTg3LCA1OCwgODEsIDY3LCAyLCAyMzcsIDUwLCAyNDAsIDIxNCwgMjM1LCAxOCwgNjcsIAotICAgIDE4MCwgMTI1LCAyMzEsIDE5MSwgNjcsIDE4MCwgMTI1LCA4MSwgNjcsIDIsIDI0NiwgMjM3LCAyLCA2MSwgODIsIDgxLCA2NywgCi0gICAgMiwgMjQ2LCAyMzcsIDIsIDQ3LCA2MSwgODIsIDgxLCAyMzAsIDEzMiwgNjcsIDIsIDI0MCwgMTMzLCA4MSwgMjMwLCAxMzIsIAotICAgIDY3LCAyLCAyNDYsIDIzNywgMiwgNjEsIDgyLCA4MSwgMjMwLCAxMzIsIDY3LCAyLCAyNDYsIDIzNywgMiwgNDcsIDYxLCA4MiwgCi0gICAgMTE3LCAyMjksIDE3OCwgODEsIDIyOSwgMTc4LCAxMTcsIDQ3LCAyMjksIDE3OCwgODEsIDQ3LCAyMjksIDE3OCwgMTE3LCAKLSAgICA2NywgMTgwLCA4NiwgMjMzLCA5MCwgODEsIDY3LCAxODAsIDg2LCAyMzMsIDkwLCAxMTcsIDY3LCAyNDYsIDE3MiwgMjUyLCAKLSAgICAyMTksIDE4MCwgODYsIDIzMywgOTAsIDgxLCA2NywgMjQ2LCAxNzIsIDI1MiwgMjE5LCAxODAsIDg2LCAyMzMsIDkwLCAyNDAsIAotICAgIDEzNCwgMjQ2LCAxODQsIDIyLCAyNDAsIDE0MSwgMjQ2LCAxNzAsIDU4LCAyNDAsIDEzNCwgMjQ2LCAxNzAsIDIyLCAyNDAsIAotICAgIDE0MSwgMjQ2LCAxODQsIDU4LCAyNDAsIDEzNCwgMjQ2LCAxODQsIDY3LCAyLCA4OCwgMjQwLCAxMzQsIDI0NiwgMTcwLCA2NywgCi0gICAgMiwgODgsIDI0MCwgMTQxLCAyNDYsIDE3MCwgNjcsIDIsIDg4LCAyNDAsIDE0MSwgMjQ2LCAxODQsIDY3LCAyLCA4OCwgMjQwLCAKLSAgICAxMzQsIDI0NiwgMTg0LCA2NywgMjIsIDI0MCwgMTM0LCAyNDYsIDE3MCwgNTgsIDI0MCwgMTM0LCAyNDYsIDE3MCwgNjcsIAotICAgIDIyLCAyNDAsIDE0MSwgMjQ2LCAxNzAsIDU4LCAyNDAsIDE0MSwgMjQ2LCAxNzAsIDY3LCAyMiwgMjQwLCAxNDEsIDI0NiwgCi0gICAgMTg0LCA1OCwgMjQwLCAxNDEsIDI0NiwgMTg0LCA2NywgMjIsIDI0MCwgMTM0LCAyNDYsIDE4NCwgNTgsIDIzNywgMTE1LCAKLSAgICAyMzMsIDc0LCAyMzMsIDc3LCAyMzUsIDg0LCAyMzEsIDIzNiwgMjM1LCA4NCwgMjMzLCA3NCwgMjMzLCA3NywgMjM3LCAxMTUsIAotICAgIDIzMSwgMjM2LCAyNDAsIDE0MSwgMjQ2LCAxNzAsIDY3LCAyMzMsIDc3LCAyNDAsIDEzNCwgMjQ2LCAxNzAsIDU4LCAyNDAsIAotICAgIDEzNCwgMjQ2LCAxNzAsIDY3LCAyMzMsIDc3LCAyNDAsIDE0MSwgMjQ2LCAxNzAsIDU4LCAyMzUsIDg0LCAyMzMsIDc0LCAKLSAgICAyMzMsIDc3LCAyNDAsIDEzNCwgMjQ2LCAxNzAsIDU4LCAyMzcsIDExNSwgMjMzLCA3NCwgMjMzLCA3NywgMjQwLCAxNDEsIAotICAgIDI0NiwgMTcwLCA1OCwgMjQwLCAxMzQsIDI0NiwgMTcwLCA2NywgMjMzLCA3NywgMjQwLCAxMzQsIDI0NiwgMTg0LCA1OCwgCi0gICAgMjQwLCAxMzQsIDI0NiwgMTg0LCA2NywgMjMzLCA3NywgMjQwLCAxMzQsIDI0NiwgMTcwLCA1OCwgMjQ3LCAyMywgNjcsIAotICAgIDIzMywgNzgsIDIzMywgMjAxLCAyMzcsIDQxLCA2NywgMjMzLCA3OCwgODEsIDI0NywgMTA3LCAyMzUsIDg5LCAyMzMsIDEzOSwgCi0gICAgNjcsIDIzMywgNzgsIDgxLCAyNDcsIDEwNywgMjM1LCA4OSwgMjMwLCAxMzQsIDY3LCAyMzMsIDc4LCAyMzEsIDE5MSwgMjQ3LCAKLSAgICAxMDcsIDIzNSwgODksIDIzMCwgMTQzLCA2NywgMjMzLCA3OCwgMjMxLCAxOTEsIDI0NywgMTA3LCAyMzUsIDg5LCAyMjksIAotICAgIDE3NywgMjMxLCAxMzYsIDI1MywgMjksIDIzMSwgMjA5LCA1OCwgMjMyLCAyMTksIDI1MywgMjksIDIyNywgMTg0LCA1OCwgCi0gICAgMjUyLCAyMjgsIDI1MywgMjksIDIyNywgMTg0LCA1OCwgMjM3LCA1OSwgMjUzLCAyOSwgMjI3LCAxODQsIDU4LCAyNTIsIAotICAgIDIyOCwgMjUzLCAyOSwgMjMxLCAyMDksIDY3LCAyLCAyMzcsIDEyNCwgMjUyLCAyMjgsIDI1MywgMjksIDIyNywgMTg0LCA2NywgCi0gICAgMiwgMjQwLCAxODAsIDIwMywgNDEsIDIyOCwgMjA2LCAyMzEsIDIwOSwgNTgsIDIwMywgNDIsIDIyOCwgMjA2LCAyMjcsIAotICAgIDE4NCwgNTgsIDIyNywgMTg0LCAyMzcsIDU4LCAyMzcsIDQwLCA1OCwgMjMxLCAyMDksIDIzNywgNTgsIDIzNywgNDAsIDU4LCAKLSAgICA4MSwgNjcsIDY0LCAyNDAsIDEyNSwgMTE3LCA1OCwgMTE3LCA2NywgNjQsIDI0MCwgMTI1LCA4MSwgNTgsIDI0MCwgMTI1LCAKLSAgICA4MSwgNjcsIDY0LCAxMTcsIDU4LCA4MSwgNjcsIDIsIDc5LCA1MSwgMTE3LCA2NywgMiwgNzksIDUxLCA4MSwgNjcsIDIzNSwgCi0gICAgNDIsIDI1NCwgMTg0LCA0MiwgNDEsIDY3LCAyMzUsIDQyLCAzLCAyMzUsIDIwLCAyMzUsIDE4LCAyMzAsIDEzMiwgNjcsIAotICAgIDI0NiwgMTcyLCAzLCAyMzUsIDIwLCA0MiwgMTcxLCA5OSwgNDEsIDE3MSwgMTAzLCAyMzMsIDEwNSwgNDIsIDE3MSwgMTAzLCAKLSAgICA0MSwgMTcxLCA5OSwgMjMzLCAxMDUsIDk5LCAxNzEsIDQxLCAxMDMsIDE3MSwgNDIsIDIzMywgMTA1LCA5OSwgMTcxLCA0MiwgCi0gICAgMTAzLCAxNzEsIDQxLCAyMzMsIDEwNSwgNDIsIDE3MSwgOTksIDQxLCAxNzEsIDk5LCAyMzMsIDEwNSwgOTksIDE3MSwgNDEsIAotICAgIDEwMywgMTcxLCA0MSwgMjMzLCAxMDUsIDQyLCAxNzEsIDEwMywgNDEsIDE3MSwgMTAzLCAyMzMsIDEwNSwgOTksIDE3MSwgCi0gICAgNDIsIDEwMywgMTcxLCA0MiwgMjMzLCAxMDUsIDExNywgMjM1LCAxNCwgMiwgMTcxLCA5OSwgMTgwLCAxMjUsIDgxLCAyMzUsIAotICAgIDE0LCAyLCAxNzEsIDk5LCAxODAsIDEyNSwgMjM1LCAxOCwgMjM1LCAxNCwgMiwgMTcxLCA0MSwgMTgwLCAxMjUsIDIzMSwgCi0gICAgMTkxLCAyMzUsIDE0LCAyLCAxNzEsIDQxLCAxODAsIDEyNSwgMTE3LCAyMzUsIDE0LCAyLCAxNzEsIDEwMywgMTgwLCAxMjUsIAotICAgIDgxLCAyMzUsIDE0LCAyLCAxNzEsIDEwMywgMTgwLCAxMjUsIDIzNSwgMTgsIDIzNSwgMTQsIDIsIDE3MSwgNDIsIDE4MCwgCi0gICAgMTI1LCAyMzEsIDE5MSwgMjM1LCAxNCwgMiwgMTcxLCA0MiwgMTgwLCAxMjUsIDExNywgMjM1LCAxNCwgMiwgMTcxLCA5OSwgCi0gICAgMjQ2LCAxNzIsIDEyNSwgODEsIDIzNSwgMTQsIDIsIDE3MSwgOTksIDI0NiwgMTcyLCAxMjUsIDIzNSwgMTgsIDIzNSwgMTQsIAotICAgIDIsIDE3MSwgNDEsIDI0NiwgMTcyLCAxMjUsIDIzMSwgMTkxLCAyMzUsIDE0LCAyLCAxNzEsIDQxLCAyNDYsIDE3MiwgMTI1LCAKLSAgICAxMTcsIDIzNSwgMTQsIDIsIDE3MSwgMTAzLCAyNDYsIDE3MiwgMTI1LCA4MSwgMjM1LCAxNCwgMiwgMTcxLCAxMDMsIDI0NiwgCi0gICAgMTcyLCAxMjUsIDIzNSwgMTgsIDIzNSwgMTQsIDIsIDE3MSwgNDIsIDI0NiwgMTcyLCAxMjUsIDIzMSwgMTkxLCAyMzUsIDE0LCAKLSAgICAyLCAxNzEsIDQyLCAyNDYsIDE3MiwgMTI1LCAxMTcsIDIzNSwgMTQsIDIsIDE3MSwgOTksIDY0LCAxMTcsIDIzNSwgMTQsIDIsIAotICAgIDE3MSwgMjQwLCAxNTIsIDIzNSwgMTgsIDIzNSwgMTQsIDIsIDE3MSwgNDIsIDIzNywgOTQsIDIzNSwgMTgsIDIzNSwgMTQsIAotICAgIDIsIDE3MSwgMjM3LCA0MSwgODEsIDIzNSwgMTQsIDIsIDE3MSwgOTksIDY0LCA4MSwgMjM1LCAxNCwgMiwgMTcxLCAyNDAsIAotICAgIDE1MiwgMjMxLCAxOTEsIDIzNSwgMTQsIDIsIDE3MSwgNDIsIDIzNywgOTQsIDIzMSwgMTkxLCAyMzUsIDE0LCAyLCAxNzEsIAotICAgIDIzNywgNDEsIDExNywgMjM1LCAxNCwgMiwgMTcxLCA5OSwgNjQsIDgxLCAyMzUsIDE0LCAyLCAxNzEsIDI1MywgMTksIDExNywgCi0gICAgMjM1LCAxNCwgMiwgMTcxLCAxMDMsIDY0LCA4MSwgMjM1LCAxNCwgMiwgMTcxLCAyNDAsIDE1MiwgODEsIDIzNSwgMTQsIDIsIAotICAgIDE3MSwgOTksIDY0LCAxMTcsIDIzNSwgMTQsIDIsIDE3MSwgMjUzLCAxOSwgODEsIDIzNSwgMTQsIDIsIDE3MSwgMTAzLCA2NCwgCi0gICAgMTE3LCAyMzUsIDE0LCAyLCAxNzEsIDI0MCwgMTUyLCAxMTcsIDIzNSwgMTQsIDIsIDE3MSwgOTksIDY0LCAxODIsIDI0MCwgCi0gICAgMTUxLCAxMTcsIDIzNSwgMTQsIDIsIDE3MSwgMTAzLCAyNDAsIDE0NCwgMTgyLCAyNDAsIDE1MSwgODEsIDIzNSwgMTQsIDIsIAotICAgIDE3MSwgOTksIDY0LCAxODIsIDI0MCwgMTUxLCA4MSwgMjM1LCAxNCwgMiwgMTcxLCAxMDMsIDI0MCwgMTQ0LCAxODIsIDI0MCwgCi0gICAgMTUxLCAyMzUsIDE4LCAyMzUsIDE0LCAyLCAxNzEsIDQyLCAyMzcsIDk0LCAyMzEsIDE5MSwgMjM1LCAxNCwgMiwgMTcxLCAKLSAgICAyMzcsIDQxLCAyMzEsIDE5MSwgMjM1LCAxNCwgMiwgMTcxLCA0MiwgMjM3LCA5NCwgMjM1LCAxOCwgMjM1LCAxNCwgMiwgCi0gICAgMTcxLCAyMzcsIDQxLCA0MSwgNDcsIDY3LCAyLCAyMzUsIDk4LCAyNDAsIDIyOCwgMjM3LCA1MSwgNSwgNjQsIDgxLCA1OCwgCi0gICAgMjQwLCAxMjgsIDIzMywgMTE4LCA2NCwgODEsIDU4LCAxMTcsIDY3LCA2NCwgMjQwLCAxMjgsIDIzMSwgMTkyLCA4MSwgNjcsIAotICAgIDY0LCAyNDAsIDEyOCwgMjMxLCAxOTIsIDgxLCA2NywgNjQsIDIzNywgNzgsIDEwNSwgOTYsIDIzMSwgMTkwLCA2NCwgMTE3LCAKLSAgICA1OCwgMTE3LCA2NywgMjM1LCA0MiwgMjMwLCAxMjgsIDIyOCwgMTc1LCA2NCwgODEsIDU4LCAyMzcsIDc2LCA2NCwgODEsIAotICAgIDU4LCAxMTcsIDY3LCAyMzUsIDQyLCAyMzUsIDYxLCAyMzMsIDgzLCA2NCwgMTE3LCA1OCwgNDIsIDI0NywgNzYsIDI0MCwgCi0gICAgMTMzLCA0MSwgMjQ3LCA3NiwgMjQwLCAxMzMsIDk5LCAyNDcsIDc2LCAyNDAsIDEzMywgMTAzLCAyNDcsIDc2LCAyNDAsIAotICAgIDEzMywgMjM3LCA0OSwgNjEsIDI1MiwgMjE5LCAyMzAsIDE2MywgMjU1LCA1NiwgMTUwLCAyNDUsIDE5NCwgMjU1LCA1NiwgCi0gICAgMTUwLCAyNDcsIDIxOSwgMjM3LCA2NiwgNDIsIDYzLCAyNDAsIDEzNywgMTA0LCA0MSwgNjMsIDI0MCwgMTM3LCAxMDQsIDQyLCAKLSAgICA2MywgMjI4LCAxODAsIDQxLCA2MywgMjI4LCAxODAsIDI1NSwgNTYsIDE1MCwgNDIsIDI0MCwgMTkwLCAxMDQsIDI1NSwgNTYsIAotICAgIDE1MCwgNDEsIDI0MCwgMTkwLCAxMDQsIDI1NSwgNTYsIDE1MCwgNDIsIDIzNSwgMTUxLCAxMDQsIDI1NSwgNTYsIDE1MCwgCi0gICAgNDEsIDIzNSwgMTUxLCAxMDQsIDQyLCAzNywgMjM1LCAyMiwgMiwgMjMxLCAxOTcsIDQxLCAzNywgMjM1LCAyMiwgMiwgMjMxLCAKLSAgICAxOTcsIDQyLCAzNywgMjM1LCAyMiwgMiwgMjQ3LCAxMDgsIDI1NCwgMTk4LCAyNTIsIDIyOCwgMjM1LCA0MCwgNDEsIDM3LCAKLSAgICAyMzUsIDIyLCAyLCAyNDcsIDEwOCwgMjU0LCAxOTgsIDIzNywgNTksIDIzNSwgNDAsIDQyLCAzNywgMjM1LCAyMiwgMiwgCi0gICAgMjQ3LCAxMDgsIDI1NCwgMTk4LCAyMzcsIDU5LCAyMzUsIDQwLCA0MSwgMzcsIDIzNSwgMjIsIDIsIDI0NywgMTA4LCAyNTQsIAotICAgIDE5OCwgMjUyLCAyMjgsIDIzNSwgNDAsIDQyLCAyNDAsIDExNywgMjM1LCAyMiwgMiwgMjQ2LCAxNjQsIDQxLCAyNDAsIDExNywgCi0gICAgMjM1LCAyMiwgMiwgMjQ2LCAxNjQsIDQyLCAyNTMsIDI5LCAyMzEsIDE5MCwgMTA0LCA0MSwgMjUzLCAyOSwgMjI4LCAxNzUsIAotICAgIDEwNCwgNDcsIDQyLCAyNTMsIDI5LCAyMjgsIDE3NSwgMTA0LCA0NywgNDEsIDI1MywgMjksIDIzMSwgMTkwLCAxMDQsIDQyLCAKLSAgICA4NiwgMjMzLCA4OSwgMjQwLCAxNTgsIDEwNCwgNDEsIDg2LCAyMzMsIDg5LCAyNDAsIDE1OCwgMTA0LCAyMzcsIDUwLCAyMzcsIAotICAgIDE1NSwgNjEsIDIzNywgMTcwLCAyNDAsIDEzOCwgMjMzLCA5OSwgMjQwLCAxMTcsIDIzNSwgNzEsIDI0MCwgMTMyLCA0MSwgCi0gICAgMjQwLCAxMTcsIDIzNSwgMzAsIDIsIDIzNSwgMjcsIDIzMywgOTksIDQxLCAyNDAsIDExNywgMiwgMjQ2LCAxNjQsIDI0MCwgCi0gICAgMTE3LCAyLCAyNTUsIDU5LCAyMzUsIDU3LCAyNDAsIDE1OSwgMjM3LCA5OCwgMjMyLCA3LCAyNDAsIDExNywgMjM1LCA3MSwgCi0gICAgMjQwLCAxMzIsIDIzMiwgNywgMjQwLCAxMTcsIDIzNSwgNzEsIDI1MywgMTksIDIwOSwgMjM3LCA5OCwgMjAwLCAyMzcsIDk4LCAKLSAgICAyNDAsIDExNywgMiwgMjMxLCAxOTcsIDIwMCwgMjQwLCAxMTcsIDIsIDIzMSwgMTk3LCAyMzUsIDc4LCAyNDAsIDExNywgCi0gICAgMjM1LCA3MSwgMjUzLCAxOSwgMjM1LCA3OCwgMjQwLCAxMTcsIDIzNSwgNzEsIDI0MCwgMTUyLCAyMzMsIDk5LCAyNDAsIAotICAgIDExNywgMiwgMjQ2LCAxNTcsIDI1MywgODQsIDIzNywgMTE5LCAyNTQsIDE5OCwgNjcsIDIzMywgNzgsIDk5LCAyMiwgMjM3LCAKLSAgICA0MSwgMjMzLCA5OSwgMjQwLCAxMTcsIDIsIDI0NiwgMTU3LCAyNTMsIDg0LCAyMzcsIDExOSwgMjU0LCAxOTgsIDY3LCAyMzMsIAotICAgIDc4LCA5OSwgMjIsIDI0MCwgMTMyLCAyMzMsIDk5LCAyNDAsIDExNywgMiwgMjQ2LCAxNTcsIDI1MywgODQsIDIzNywgMTE5LCAKLSAgICAyNTQsIDE5OCwgNjcsIDIzMywgNzgsIDEwMywgMjIsIDIzNywgNDEsIDIzMywgOTksIDI0MCwgMTE3LCAyLCAyNDYsIDE1NywgCi0gICAgMjUzLCA4NCwgMjM3LCAxMTksIDI1NCwgMTk4LCA2NywgMjMzLCA3OCwgMTAzLCAyMiwgMjQwLCAxMzIsIDIzMywgOTksIAotICAgIDI0MCwgMTE3LCAyLCAyNDYsIDE1NywgMjUzLCA4NCwgMjM3LCAxMTksIDI1NCwgMTk4LCA2NywgMjMzLCA3OCwgNDEsIDIyLCAKLSAgICAyNTMsIDE5LCAyMzMsIDk5LCAyNDAsIDExNywgMiwgMjQ2LCAxNTcsIDI1MywgODQsIDIzNywgMTE5LCAyNTQsIDE5OCwgNjcsIAotICAgIDIzMywgNzgsIDQyLCAyMiwgMjUzLCAxOSwgMjMzLCA5OSwgMjQwLCAxMTcsIDIsIDI0NiwgMTU3LCAyNTMsIDg0LCAyMzcsIAotICAgIDExOSwgMjU0LCAxOTgsIDY3LCAyMzMsIDc4LCA0MSwgMjIsIDI0MCwgMTUyLCAyMzMsIDk5LCAyNDAsIDExNywgMiwgMjQ2LCAKLSAgICAxNTcsIDI1MywgODQsIDIzNywgMTE5LCAyNTQsIDE5OCwgNjcsIDIzMywgNzgsIDQyLCAyMiwgMjQwLCAxNTIsIDIwMCwgCi0gICAgMjQwLCAxOTUsIDI0OCwgMTU1LCAyNDAsIDE5NSwgMjUzLCAxMzMsIDIsIDIzMywgOTUsIDI0MCwgMTk1LCAyNTMsIDEzMywgCi0gICAgMiwgMywgMjM3LCA0MCwgNDYsIDI0MCwgMTk1LCAyNTMsIDEzMywgMiwgNDEsIDY3LCA0NiwgMjQwLCAxOTUsIDI1MywgMTMzLCAKLSAgICAyLCA0MiwgNjcsIDQ2LCAyMzcsIDQwLCAyLCAxNjksIDEyNSwgMzMsIDYxLCAxMjUsIDMzLCAyMzIsIDIsIDMzLCAyMzUsIAotICAgIDM3LCAyMzMsIDEwNCwgMzMsIDIyNywgMTQ2LCAyMzcsIDQwLCAyMzUsIDExOSwgMjU0LCAyMDUsIDE2OSwgMjUyLCAyMTksIAotICAgIDIyLCAyNTIsIDIyOCwgMTMyLCAyMzUsIDExOSwgMjU0LCAyMDUsIDYxLCAxMjUsIDIzNywgNDAsIDIsIDIyOSwgMTUxLCAKLSAgICAyNTQsIDE4NCwgMzMsIDIyMiwgMjI3LCAyMzMsIDEzMCwgNTMsIDk5LCA2NywgMjM1LCA0MiwgMjM1LCAyMCwgMzMsIDYzLCAKLSAgICAyMzUsIDQ1LCAzMywgMjM1LCA0NSwgMzMsIDIzMCwgMTI4LCAzMywgMjI3LCAxODMsIDIzNywgNDAsIDIsIDMsIDIzNywgNDAsIAotICAgIDE4MCwgMjUyLCAyMzAsIDIzNywgNDEsIDIzNywgNDAsIDIsIDEzNSwgMTY5LCAyMzYsIDI0NCwgMTgwLCAyNTIsIDIzMCwgCi0gICAgMjM3LCA0MSwgMjM1LCA1MSwgMjM3LCAxMTUsIDIzMywgNzQsIDIzNywgODQsIDIzNSwgNTEsIDIzNSwgODQsIDIzMywgNzQsIAotICAgIDIzNywgODQsIDIzNSwgNTEsIDIzMSwgMTk4LCAyMzUsIDUxLCAzLCAyMzUsIDIwLCAyMzUsIDUxLCAyMzUsIDI3LCAxMzUsIAotICAgIDIzNywgMTg0LCAyMzQsIDIyOSwgMjMzLCA4MCwgMiwgNTYsIDQ2LCAyMzMsIDgwLCAyLCAyMzEsIDE5NywgMjU1LCA1OSwgCi0gICAgMjU0LCAxOTgsIDIzMSwgMTkzLCAyMzMsIDgwLCAyLCAyMzgsIDQ2LCAyNTQsIDIxNywgMjM1LCAxMTAsIDQxLCAyMzMsIDgwLCAKLSAgICA2NCwgNDIsIDIzMSwgMTkzLCA0MiwgMjMzLCA4MCwgMjM3LCA5NCwgNjEsIDEyNSwgNjEsIDI1MiwgMjE5LCAyMzcsIDk0LCAKLSAgICA0MSwgMjMxLCAxOTMsIDIzNywgMjMzLCAyLCA0MiwgMTMyLCAyMzcsIDQ1LCAyMzcsIDIzMywgMiwgNDEsIDEzMiwgMjM3LCAKLSAgICA0NSwgODYsIDIzNSwgMTU0LCAyNCwgMiwgNDIsIDEzMiwgMjM3LCA0NSwgMjQsIDIsIDQxLCAxMzIsIDIzNywgNDUsIDYzLCAKLSAgICAyMzAsIDE2NywgODYsIDIzMCwgMTY3LCA0MiwgMjM3LCAxOTMsIDIzNywgMTU1LCA0MSwgMjM3LCAxOTMsIDIzNywgMTU1LCAKLSAgICA0MiwgNDcsIDIzNywgMTkzLCAyMzcsIDE1NSwgNDEsIDQ3LCAyMzcsIDE5MywgMjM3LCAxNTUsIDIzMSwgODMsIDIzMSwgCi0gICAgMjUyLCAyNTQsIDE1OSwgMTA3LCAyMzEsIDI1MiwgMjM0LCAxMjksIDIzNSwgMTk0LCAyLCA2MSwgMTI1LCAyMjksIDE1LCAKLSAgICAyMzIsIDAsIDM3LCAyLCAyMzIsIDEwMiwgMjM0LCAxNzksIDIzMiwgMjA4LCAyNTQsIDI5LCAyMzYsIDIyOSwgMjMzLCAxMDEsIAotICAgIDIzNywgNTEsIDUsIDIyLCAyMzUsIDI5LCAyMzIsIDIsIDIzNywgNTEsIDUsIDIyLCAyMzUsIDI5LCAyMzMsIDEzMiwgMiwgCi0gICAgMjQwLCAxMjgsIDQ2LCAyMzEsIDIzOSwgMTgwLCAyMiwgMjM1LCAyOSwgMjMyLCAyLCAyMzgsIDI1MCwgMjQwLCAyMCwgMjI3LCAKLSAgICAxODEsIDIyNywgMTg5LCAyMzMsIDgwLCAyLCA0MiwgMTMyLCAyMzcsIDQ1LCAyMjcsIDE4OSwgMjMzLCA4MCwgMiwgNDEsIAotICAgIDEzMiwgMjM3LCA0NSwgODYsIDIzNSwgNDEsIDIsIDEwMywgNTgsIDg2LCAyMzMsIDEyMywgNjMsIDIzNywgNDAsIDIsIDEwMywgCi0gICAgNTgsIDg2LCAyMzcsIDQwLCAyLCAxMDMsIDU4LCAyMjgsIDE4NSwgNjMsIDIzNSwgMjcsIDIyOCwgMTg1LCA4NiwgMjM1LCAKLSAgICAyNywgMjI4LCAxODUsIDYzLCAyMzMsIDkwLCAyMjgsIDE4NSwgODYsIDIzMywgOTAsIDIyOCwgMTg1LCA2MywgMjM1LCAyMCwgCi0gICAgMjI4LCAxODUsIDg2LCAyMzUsIDIwLCAyMjgsIDIsIDIzNSwgMzcsIDIzNSwgNTQsIDIzMSwgMTkyLCAyMzUsIDU0LCAyLCAKLSAgICAyMzMsIDk1LCAyMzUsIDM3LCAyMzUsIDU0LCAyLCAxNjksIDgyLCAyNTMsIDQ3LCAyMzMsIDEwNCwgMjUzLCA0NywgMjM1LCAKLSAgICAzNywgMjMzLCAxMDQsIDQ3LCAyNDAsIDE4MCwgMjM3LCA0OSwgMjQwLCAxODAsIDIyNywgMTg1LCAyMzcsIDE1MywgMjQwLCAKLSAgICAxMTcsIDEwNCwgMjI3LCAxMzMsIDIzNywgMTUzLCAyNDAsIDExNywgMTA0LCAyNDUsIDI1NCwgMjQ0LCAxNDcsIDI0MCwgCi0gICAgMTU0LCAzMywgNTYsIDIzMSwgMTkyLCAyNDAsIDE1NCwgMzMsIDc5LCAyMzEsIDE5MiwgMjQwLCAxNTQsIDMzLCAyNCwgMjMxLCAKLSAgICAxOTIsIDI0MCwgMTU0LCAyNDAsIDE4MiwgMjMzLCAxMTgsIDIsIDI0NiwgMTY0LCAyNDAsIDE1NCwgMjQwLCAxODIsIDIzMywgCi0gICAgMTE4LCAyLCAyNDAsIDE4MCwgMjQwLCAxNTQsIDM3LCAyMjgsIDE4MywgMjMxLCAxOTIsIDI0MCwgMTU0LCAzNywgMjQwLCAKLSAgICAxODIsIDIzMSwgMTkyLCAxMzUsIDIzNSwgMjYsIDIyLCAyMzEsIDE5MiwgMTM1LCAyMzUsIDI2LCAxNDUsIDIzMSwgMTkyLCAKLSAgICAyNDAsIDE1NCwgMjQsIDIzMSwgMTkyLCAyMzksIDExOCwgMTM1LCAyNDcsIDIxLCAyMzIsIDEwLCAyLCAyMzEsIDIwOCwgCi0gICAgMjMxLCAyMTIsIDIzMywgOTgsIDIzMSwgMTkyLCAyMzgsIDIyMCwgMjQ4LCAxMjgsIDIzMSwgMjA4LCAyMzMsIDk4LCAyLCAKLSAgICA0NywgODIsIDIzMywgOTgsIDIzNiwgMiwgMiwgMjM3LCA4NCwgMjI5LCAyMzYsIDIzMiwgMTk2LCAyMjcsIDE4NCwgMjI5LCAKLSAgICAzMSwgMjQ2LCAxNjcsIDIyOSwgMTg0LCAyLCAyMjksIDIxMSwgMjQ4LCAxMjksIDIzNywgMTk0LCAyNDEsIDYzLCAyNDYsIAotICAgIDE2NywgMjI5LCAxODQsIDIsIDIyOCwgMjA2LCAyNDgsIDEyOSwgMjM3LCAxOTQsIDI0MSwgNjMsIDI0NiwgMTY3LCAyMjksIAotICAgIDE4NCwgMTkwLCAyMzIsIDIwNywgMjUyLCAyMzAsIDI0MSwgNjMsIDIzMywgOTgsIDIzNywgMTk0LCAxMDIsIDI0MCwgMTQzLCAKLSAgICAyMzEsIDE5MiwgMjMxLCAxMjgsIDIzMywgOTgsIDIzMSwgMTkyLCAyMzMsIDk4LCAyLCAxMTcsIDY3LCAyLCA4OCwgMjMzLCAKLSAgICA5OCwgMiwgMjQsIDUzLCAyMzMsIDk4LCAyLCAyMjcsIDE4NiwgMjMzLCA5OCwgMiwgMjM3LCAxMTcsIDIzMywgOTgsIDIsIAotICAgIDIzMywgOTUsIDIzMywgOTgsIDIsIDIzMSwgMTk3LCAyNDAsIDI1MywgMjQwLCAxODUsIDQyLCAyMzMsIDgwLCAyMzEsIDE5MiwgCi0gICAgMjU1LCA1NiwgMTUwLCAyMzcsIDIxMiwgMjI4LCAyMTIsIDI1NSwgNTYsIDE1MCwgMjM3LCAyMTIsIDIzNiwgMTg4LCAyNTUsIAotICAgIDU2LCAxNTAsIDIzNywgMjEyLCAyMzAsIDkxLCA3OSwgNSwgMiwgMywgMjM3LCA0MCwgNDYsIDc5LCA1LCAyLCAyMzAsIDEyNSwgCi0gICAgMjM3LCA0OCwgNDYsIDc5LCA1LCAyLCAyNDAsIDEyOCwgNDYsIDc5LCA1LCAyLCA1NiwgNTEsIDc5LCA1LCAyLCAyNDAsIAotICAgIDEyOCwgNTEsIDc5LCA1LCAyLCAyMzEsIDE5NSwgMTEzLCA3OSwgNSwgMiwgODYsIDIzMSwgMTkzLCAyNDAsIDE3MiwgNSwgMiwgCi0gICAgMjQwLCAxNjIsIDQ2LCAyNDAsIDE3MiwgNSwgMiwgNTYsIDUxLCAyNDAsIDE3MiwgNSwgMiwgMjM1LCA4NCwgMjQwLCAxNjksIAotICAgIDI0MCwgMTcyLCA1LCAyLCAyMzcsIDExNSwgMjQwLCAxNjksIDc5LCA1LCAyNTQsIDE5OCwgNDIsIDEzMiwgMjM1LCAyMCwgCi0gICAgNzksIDUsIDI1NCwgMTk4LCA0MSwgMTMyLCAyMzUsIDIwLCAyNDAsIDc0LCAxNDUsIDI0MCwgMjIxLCAyMzMsIDEwMSwgMjI3LCAKLSAgICAxMzQsIDUsIDIsIDU2LCA0NiwgMjI3LCAxMzQsIDUsIDIsIDIzMSwgMTk3LCAyMzAsIDE0NywgMjM2LCAxOTMsIDIsIDIzNywgCi0gICAgNTksIDIzNiwgMzMsIDI0MSwgMjQ3LCAyMzMsIDEwMSwgMjI3LCAxMzQsIDUsIDI1NCwgMTk4LCA0MiwgMTMyLCAyMzUsIDIwLCAKLSAgICAyMjcsIDEzNCwgNSwgMjU0LCAxOTgsIDQxLCAxMzIsIDIzNSwgMjAsIDMzLCAyMjcsIDEzNCwgNSwgMiwgMjMwLCAxMjUsIAotICAgIDIzNSwgMjQsIDIyNywgMTM0LCA1LCAyNTQsIDE5OCwgNDcsIDIzNSwgMjAsIDMzLCAyMzMsIDEzMCwgNTMsIDc5LCA1LCAKLSAgICAyNTQsIDE5OCwgMjMxLCAxOTMsIDI0MCwgMTcyLCA1LCAyNTQsIDE5OCwgMjMxLCAxOTMsIDIyNywgMTM0LCA1LCAyNTQsIAotICAgIDE5OCwgMjMxLCAxOTMsIDIzMywgMjA5LCAyMzMsIDEwMSwgMjMzLCAxNCwgMjMzLCAyMDksIDIzMywgMTAxLCAyNTUsIDU2LCAKLSAgICAxNTAsIDIzMSwgMTMyLCAyMjgsIDIxMiwgMjI4LCAyMjQsIDE0NSwgMjMwLCAxNzgsIDIyOCwgMTgzLCAyLCAyNDYsIDE2NCwgCi0gICAgMjQwLCAxODIsIDIsIDI0MCwgMTcyLCA1MywgMjQwLCAxODIsIDIsIDIzMywgOTUsIDIyOCwgMTgzLCAyLCAyMzMsIDk1LCAKLSAgICAyMjgsIDE4MywgMiwgMjM1LCAyNiwgMjQ2LCAyMzAsIDI0MCwgMTgyLCAyLCAyMzUsIDI2LCAyNTMsIDgxLCAyNDAsIDE4MiwgCi0gICAgNjQsIDIyNywgMTg2LCAyMjgsIDE4MywgNjQsIDIzNywgMTE3LCAyNDAsIDE4MiwgNjQsIDI1MiwgMjE5LCA2NCwgMjI3LCAKLSAgICAxODYsIDIyOCwgMTgzLCA2NCwgMjUyLCAyMTksIDY0LCAyMzcsIDExNywgMjQwLCAxODIsIDIzNywgOTQsIDIyLCAyMzcsIAotICAgIDE4NCwgMiwgMjM3LCAxMTcsIDIyOCwgMTgzLCAyMzcsIDk0LCAyMiwgMjM3LCAxODQsIDIsIDIyNywgMTg2LCAyMzcsIDU4LCAKLSAgICAyNDAsIDE4MiwgMiwgMjM1LCAyMDcsIDIzNywgNTgsIDIyOCwgMTgzLCAyLCAyMzUsIDIwNywgNDcsIDM3LCAyMjcsIDE4NiwgCi0gICAgNDcsIDM3LCAyMzcsIDExNywgMjM3LCA1OCwgMjQwLCAxODIsIDIsIDIzOCwgNDYsIDIyLCAyNDEsIDI0NywgMjMzLCAxMDEsIAotICAgIDIzNSwgMjYsIDIyLCAyLCA1NiwgNDYsIDIzNSwgMjYsIDE0NSwgMiwgNTYsIDQ2LCA0NywgMjM1LCAyNiwgMjQ2LCAyMzAsIAotICAgIDQ3LCAyMzUsIDI2LCAyNTMsIDgxLCAxMzUsIDIyOCwgMjE0LCAyMzUsIDI2LCAyNDYsIDIzMCwgMTM1LCAyMjgsIDIxNCwgCi0gICAgMjM1LCAyNiwgMjUzLCA4MSwgMjM1LCAyMTEsIDI0MCwgMTg1LCAyNTMsIDgxLCAyMzUsIDIxMSwgMjQwLCAxODUsIDI0NiwgCi0gICAgMjMwLCAyMzUsIDI2LCAxNDUsIDIyOSwgMjA1LCAyMzUsIDI2LCAyNDYsIDIzMCwgMjM1LCAyNiwgMjIsIDIsIDIzNywgNDQsIAotICAgIDI0MCwgMjE0LCAyMzUsIDI2LCAxNDUsIDIsIDIzNywgNDQsIDI0MCwgMjE0LCAyMzUsIDI2LCAyMiwgMiwgMTY5LCAyNDAsIAotICAgIDE1MSwgMjM1LCAyNiwgMTQ1LCAyLCAxNjksIDI0MCwgMTUxLCAyMzUsIDI2LCAyMiwgMiwgNDcsIDIzMywgOTUsIDIzNSwgCi0gICAgMjYsIDIyLCAyLCAyMzEsIDE5NywgMjM1LCAyNiwgMjIsIDIsIDQ3LCAyMzEsIDE5NywgMywgMjU0LCAxNjcsIDIsIDIzMSwgCi0gICAgMTk3LCAyMzUsIDI2LCAxNDUsIDIsIDQ3LCAyMzMsIDk1LCAyMzUsIDI2LCAxNDUsIDIsIDQ3LCAyMzEsIDE5NywgMjU1LCAKLSAgICA1NiwgMTUwLCAyMzgsIDE4OSwgMjIzLCA1NywgMjU1LCA1NiwgMTUwLCAyNDUsIDExMywgMjIzLCA1NywgMjM3LCA1MSwgNSwgCi0gICAgMiwgNTYsIDUxLCAyMzEsIDIzOSwgMiwgNTYsIDQ2LCAyMzcsIDQ5LCAxNjksIDI1MiwgMjE5LCAyLCA0NywgNjEsIDgyLCAKLSAgICAyMzcsIDQ5LCAxNjksIDI1MiwgMjE5LCAyLCAyMzcsIDQ5LCA2MSwgODIsIDI0MCwgMTI4LCAyMzMsIDExOCwgMiwgNTYsIAotICAgIDQ2LCAyNDAsIDEyOCwgMjMzLCAxMTgsIDIsIDIzNywgMTE1LCAyNDAsIDE2OSwgMjM1LCA1OSwgMjQwLCAxNzIsIDIzNCwgCi0gICAgMjIxLCAyMzIsIDEwMCwgMiwgNTYsIDQ2LCAyMzcsIDUxLCAyLCAyMzEsIDE5OCwgMjM3LCA3OCwgMTA1LCAxODAsIDIsIAotICAgIDIzMCwgMTI1LCAyMzUsIDI0LCAyMjcsIDE4NywgMTA1LCAxNDUsIDEwNSwgOTYsIDIzNywgNTEsIDUsIDY0LCA3OSwgNTMsIAotICAgIDc5LCA1LCA2NCwgMjM3LCA1MSwgNTMsIDIzNywgNTEsIDUsIDY0LCAyNDAsIDEyOCwgMjMxLCAxOTIsIDQ3LCAyNDAsIDE5NCwgCi0gICAgMjM3LCA4MSwgMTM1LCAyMjksIDE5NiwgMjM3LCA1MSwgMjM4LCA1OCwgMTUyLCAyMjksIDE5NiwgMjM3LCA1MSwgMjM4LCAKLSAgICA1OCwgMjM3LCA1MSwgNSwgMiwgMTM1LCAxOTcsIDY0LCAyMiwgMTM1LCAxOTcsIDUxLCAyMzAsIDEzMCwgMiwgMjQ2LCAxNjAsIAotICAgIDE5NywgNDYsIDIzMSwgMTkwLCAyLCAyMzcsIDQwLCAyMzUsIDU3LCAyMjgsIDE3NSwgMiwgMjM3LCA0MCwgMjM1LCA1NywgCi0gICAgMjMxLCAxOTAsIDIsIDIzMywgODIsIDE2NSwgNDYsIDIyOCwgMTc1LCAyLCAyMzMsIDgyLCAxNjUsIDQ2LCAyMzEsIDE5MCwgCi0gICAgMTQ1LCAyMzUsIDI5LCAxMDUsIDk2LCAyMjgsIDE3NSwgMTQ1LCAyMzUsIDI5LCAxMDUsIDk2LCAyMzEsIDE5MCwgMTQ1LCAKLSAgICAyMzUsIDI5LCAxMDUsIDE4MCwgMiwgNTYsIDIzNSwgNTcsIDIyOCwgMTc1LCAxNDUsIDIzNSwgMjksIDEwNSwgMTgwLCAyLCAKLSAgICA1NiwgMjM1LCA1NywgMjMxLCAxOTAsIDE0NSwgMjM1LCAyOSwgMTA1LCAxODAsIDIsIDU2LCA0NiwgMjI4LCAxNzUsIDE0NSwgCi0gICAgMjM1LCAyOSwgMTA1LCAxODAsIDIsIDU2LCA0NiwgMjMxLCAxOTAsIDE0NSwgMjM1LCAyOSwgMTA1LCAxODAsIDIsIDU2LCAKLSAgICA2NCwgMjM3LCA0MSwgMjI4LCAxNzUsIDE0NSwgMjM1LCAyOSwgMTA1LCAxODAsIDIsIDU2LCA2NCwgMjQwLCAxMzIsIDIzMSwgCi0gICAgMTkwLCAxNDUsIDIyOCwgMTg4LCAyMjgsIDE3NSwgMTQ1LCAyMjgsIDE4OCwgMjMxLCAxOTAsIDIyLCAyMjksIDE3NSwgMTkwLCAKLSAgICAxMDUsIDk2LCAyMjgsIDE3NSwgMjIsIDIyOSwgMTc1LCAxOTAsIDEwNSwgOTYsIDIzMSwgMTkwLCAyMiwgMTkwLCAyMjgsIAotICAgIDE4OCwgMjI4LCAxNzUsIDIyLCAxOTAsIDIyOCwgMTg4LCAyMzEsIDE5MCwgNjQsIDIyOSwgMTcwLCAxMDUsIDY0LCAyMjcsIAotICAgIDE4MywgMjI4LCAxNzUsIDY0LCAyMjksIDE3MCwgMTA1LCA2NCwgMjMwLCAxMjgsIDIzMSwgMTkwLCA2NCwgMjM1LCA1OSwgCi0gICAgMTQ1LCAyMzcsIDgxLCAyMjgsIDE3NSwgNjQsIDIzNSwgNTksIDE0NSwgMjM3LCA4MSwgMjMxLCAxOTAsIDY0LCAyMzUsIDU5LCAKLSAgICA2NCwgMjI3LCAxODMsIDIyOCwgMTc1LCA2NCwgMjM1LCA1OSwgNjQsIDIzMCwgMTI4LCAyMzEsIDE5MCwgNjQsIDIyOCwgCi0gICAgMTc1LCA2NCwgMjI5LCAxNzAsIDIzNywgODEsIDIyOCwgMTc1LCA2NCwgMjMxLCAxOTAsIDY0LCAyMjksIDE3MCwgMjM3LCAKLSAgICA4MSwgMjMxLCAxOTAsIDY0LCAyMzUsIDI5LCAxMDUsIDY0LCAyMjgsIDE3NSwgNjQsIDIzNSwgMjksIDIzNywgODEsIDIyOCwgCi0gICAgMTc1LCA2NCwgMjM1LCAyOSwgMTA1LCA2NCwgMjMxLCAxOTAsIDY0LCAyMzUsIDI5LCAyMzcsIDgxLCAyMzUsIDI5LCAxMDUsIAotICAgIDE4MCwgMTQ1LCAyMzAsIDEyOCwgMjM1LCAyOSwgMTA1LCAxODAsIDE0NSwgMjI3LCAxODMsIDIzNSwgMjksIDEwNSwgMTgwLCAKLSAgICAxNDUsIDIzMSwgMTkwLCAyLCA1NiwgMjM1LCA1NywgMjM1LCAyOSwgMTA1LCAxODAsIDE0NSwgMjI4LCAxNzUsIDIsIDU2LCAKLSAgICAyMzUsIDU3LCAyMjksIDE3MCwgMTA1LCAxODAsIDE0NSwgMjMwLCAxMjgsIDIyOSwgMTcwLCAxMDUsIDE4MCwgMTQ1LCAyMjcsIAotICAgIDE4MywgMjI5LCAxNzAsIDIzNSwgMjksIDEwNSwgMTgwLCAxNDUsIDIzMCwgMTI4LCAyMjksIDE3MCwgMjM1LCAyOSwgMTA1LCAKLSAgICAxODAsIDE0NSwgMjI3LCAxODMsIDIzNSwgNTksIDE0NSwgMjMwLCAxMjgsIDIzNSwgNTksIDE0NSwgMjI3LCAxODMsIDIzNSwgCi0gICAgNTksIDY0LCAyMzEsIDE5MCwgNjQsIDIzNywgNTEsIDUzLCAyMzUsIDU5LCA2NCwgMjI4LCAxNzUsIDY0LCAyMzcsIDUxLCAKLSAgICA1MywgNDcsIDIzNywgMTYyLCAyMzAsIDEyOCwgNDcsIDIzNywgMTYyLCAyMjcsIDE4MywgNDcsIDIzNywgMTYyLCAyMzEsIAotICAgIDE5MCwgMiwgMjMxLCAxOTcsIDIyOCwgMTc1LCAyMjksIDIwNSwgMjMwLCAxMjgsIDIyOCwgMTc1LCAyMzcsIDk0LCAyMzAsIAotICAgIDEyOCwgMjMxLCAxOTAsIDIzNywgNTgsIDI1NCwgMjA1LCAyMzcsIDIzNiwgMjI4LCAxNzUsIDIzNywgNTgsIDI1NCwgMjA1LCAKLSAgICAyMzcsIDIzNiwgMjMxLCAxOTAsIDIzNywgNTgsIDI1NCwgMjA1LCAyNDEsIDExMiwgNjQsIDIzNSwgMjksIDIzNywgODEsIAotICAgIDIyOCwgMTc1LCAyMzcsIDU4LCAyNTQsIDIwNSwgMjQxLCAxMTIsIDY0LCAyMzUsIDI5LCAyMzcsIDgxLCAyMzUsIDIxMiwgCi0gICAgMjQxLCA3OCwgMjM4LCAxOCwgMjQxLCA3OCwgMjM1LCAyMTIsIDI0NywgMjEyLCAxNDUsIDEwNSwgOTYsIDIzOCwgMTgsIAotICAgIDI0NywgMjEyLCAxNDUsIDEwNSwgOTYsIDIzNywgNTEsIDUsIDIsIDI0MiwgMjE5LCA0NiwgMjMzLCAxMDYsIDY0LCAyMjksIAotICAgIDE3NSwgMjM3LCA1MSwgNTMsIDIzMywgMTA3LCA2NCwgMjI5LCAxNzUsIDIzNywgNTEsIDUzLCAyMzMsIDEwNiwgNjQsIDIyOSwgCi0gICAgMTc1LCAxOTAsIDEwNSwgOTYsIDIzMywgMTA3LCA2NCwgMjI5LCAxNzUsIDE5MCwgMTA1LCA5NiwgMjMzLCAxMDYsIDY0LCAKLSAgICAyMzcsIDUxLCA1MywgMjMzLCAxMDcsIDY0LCAyMzcsIDUxLCA1MywgMjMzLCAxMDYsIDY0LCAxOTAsIDEwNSwgOTYsIDIzMywgCi0gICAgMTA3LCA2NCwgMTkwLCAxMDUsIDk2LCAyMzMsIDEwNiwgNjQsIDIzNywgNzgsIDEwNSwgOTYsIDIzMywgMTA3LCA2NCwgMjM3LCAKLSAgICA3OCwgMTA1LCA5NiwgMjMzLCAxMDYsIDY0LCAxOTAsIDIzNywgNzgsIDEwNSwgOTYsIDIzMywgMTA3LCA2NCwgMTkwLCAyMzcsIAotICAgIDc4LCAxMDUsIDk2LCA0NywgMjMyLCA0LCA0NywgMjMyLCA5LCAyMzcsIDc2LCAyLCAyNDYsIDE2NCwgMjMzLCA4MywgMiwgCi0gICAgMjQ2LCAxNjQsIDIzNywgNzYsIDIsIDc5LCA1LCA1MSwgMjMzLCA4MywgMiwgNzksIDUsIDUxLCAyMzcsIDc2LCAyLCAyMjcsIAotICAgIDEzNCwgNSwgNTEsIDIzMywgODMsIDIsIDIyNywgMTM0LCA1LCA1MSwgMjM3LCA3NiwgMTA2LCAxNDUsIDEwNSwgMTgwLCAyLCAKLSAgICA1NiwgNDYsIDIzMywgODMsIDEwNiwgMTQ1LCAxMDUsIDE4MCwgMiwgNTYsIDQ2LCAyMzcsIDc2LCAxMDYsIDY0LCAyMzcsIAotICAgIDUxLCA1MywgMjMzLCA4MywgMTA2LCA2NCwgMjM3LCA1MSwgNTMsIDIzNywgNzYsIDEwNiwgNjQsIDI0MCwgMTI4LCAyMzEsIAotICAgIDE5MiwgMjMzLCA4MywgMTA2LCA2NCwgMjQwLCAxMjgsIDIzMSwgMTkyLCAyMzcsIDc2LCAxMDYsIDY0LCAyMzcsIDc4LCAKLSAgICAxMDUsIDk2LCAyMzMsIDgzLCAxMDYsIDY0LCAyMzcsIDc4LCAxMDUsIDk2LCAyMzcsIDc2LCAxMDYsIDY0LCAxOTAsIDEwNSwgCi0gICAgOTYsIDIzMywgODMsIDEwNiwgNjQsIDE5MCwgMTA1LCA5NiwgMzcsIDQyLCAyNDYsIDE1NywgNzcsIDIzMSwgMTkyLCAzNywgCi0gICAgNDEsIDI0NiwgMTU3LCA3NywgMjMxLCAxOTIsIDIzNywgNTgsIDIzNSwgNjEsIDIzNywgNTgsIDIzMSwgMjI4LCAyMzcsIDU4LCAKLSAgICAyMzcsIDc2LCAxNDUsIDEwNSwgOTYsIDIzNywgNTgsIDIzMywgODMsIDE0NSwgMTA1LCA5NiwgMjM3LCA3NiwgNjQsIDIzMSwgCi0gICAgMjI4LCAyMzMsIDgzLCA2NCwgMjM1LCA2MSwgMjM3LCA3NiwgNjQsIDIzNSwgNjEsIDIzMywgODMsIDY0LCAyMzEsIDIyOCwgCi0gICAgMjMzLCA4MywgMjM3LCA5NCwgMjM1LCA2MSwgMjMzLCA4MywgMjM3LCA5NCwgMjIsIDIzNywgMTg0LCAyNTQsIDIwNSwgMjQ2LCAKLSAgICAxODcsIDIsIDIzNSwgNjEsIDIzNSwgNDQsIDEwNiwgMjM1LCA3MSwgMjMwLCAxMzQsIDIzMiwgMjUwLCAyLCAyNTQsIDE1NywgCi0gICAgMjQ3LCAyMTQsIDIzMCwgMTIwLCAyMjcsIDE4NiwgMjM0LCAxMDYsIDIzMCwgODMsIDI0MCwgMTI1LCA0MiwgMjQwLCAxNDksIAotICAgIDI0MCwgMTI1LCAxMDMsIDI0MCwgMTQ5LCAyNDAsIDEyNSwgOTksIDI0MCwgMTQ5LCAyMjgsIDEsIDIsIDE5MywgNjEsIDI1MiwgCi0gICAgMjE5LCAyMzcsIDQ5LCA0MSwgMjMwLCAxNDEsIDQ3LCA2MSwgMjUyLCAyMTksIDQyLCAyMzAsIDE0MSwgNjEsIDI1MiwgMjE5LCAKLSAgICA0NywgNDIsIDIzMCwgMTQxLCA0NywgNjEsIDI1MiwgMjE5LCA0NywgNDIsIDIzMCwgMTQxLCAxODIsIDI0NiwgMTg3LCAyNDYsIAotICAgIDE3MiwgNDIsIDIzOSwgMTAzLCAxMDYsIDQ3LCAyMzEsIDIxMCwgMjQwLCAxMjUsIDEwMywgMjQ2LCAyMTUsIDIsIDIzMywgCi0gICAgOTUsIDI0MCwgMTI1LCA5OSwgMjQ2LCAyMTUsIDIsIDIzMSwgMTk3LCAyNDAsIDEyNSwgOTksIDI0NiwgMjE1LCA2NCwgMjQwLCAKLSAgICAxMjUsIDEwMywgMjQwLCAxNDksIDQ3LCAxMDMsIDI0MCwgMTQ5LCA0NywgOTksIDI0MCwgMTQ5LCA0NywgMTk1LCAxOTAsIAotICAgIDUzLCAyMDAsIDQ3LCAxOTUsIDE5MCwgNTMsIDI0NiwgMjE4LCAxOTAsIDIzOCwgMTg4LCAyLCAyMDAsIDIzNCwgMTY2LCAKLSAgICAyMzcsIDg0LCA2MSwgMjQ2LCAxNjcsIDIsIDIzNywgNDAsIDQ2LCA2MSwgMjQ2LCAxNjcsIDIsIDIzNywgNDAsIDUxLCAxMDMsIAotICAgIDI0NiwgMjE1LCAyLCAyMzcsIDQwLCA1MSwgMjMzLCAxMzIsIDIsIDE2OSwgODIsIDIzMywgMTMyLCAyLCAyNDAsIDEyOCwgCi0gICAgMjMxLCAxOTIsIDIzNywgNDksIDYxLCAyNTIsIDIxOSwgMjM3LCAyMzEsIDIzMSwgMjQ0LCAyMzcsIDQ5LCA2MSwgMjUyLCAKLSAgICAyMTksIDIsIDE2OSwgODIsIDIzNywgNDksIDI0MCwgMTk0LCAyMzEsIDE5MiwgMjM3LCA0OSwgMjM3LCAxNjIsIDIzMCwgCi0gICAgMTI4LCAyMzcsIDQ5LCAyMzcsIDE2MiwgMjI3LCAxODMsIDIyOSwgMTcwLCAyMzUsIDI5LCAyMzEsIDE5MCwgMTQ1LCAxMDUsIAotICAgIDk2LCAyMjksIDE3MCwgMjM1LCAyOSwgMjI4LCAxNzUsIDE0NSwgMTA1LCA5NiwgMjM3LCA0OSwgMjM1LCA1NCwgMjM3LCAKLSAgICAyMzEsIDIzMSwgMjQ0LCAyNDAsIDE4NSwgMjM3LCA0OSwgNjEsIDI1MiwgMjE5LCAyMzEsIDE5MiwgNDcsIDIzNSwgNTQsIAotICAgIDIzMSwgMTkyLCA2MywgNjEsIDEyNSwgMjQwLCAxNTQsIDYzLCA2MSwgMTI1LCAyNDAsIDEzNCwgMjQ2LCAxNzAsIDYzLCA1OCwgCi0gICAgMjQwLCAxMzQsIDI0NiwgMTg0LCA2MywgNTgsIDI0MCwgMTQxLCAyNDYsIDE3MCwgNjMsIDU4LCAyNDAsIDE0MSwgMjQ2LCAKLSAgICAxODQsIDYzLCA1OCwgNDIsIDQxLCA2MywgNTgsIDExNywgODYsIDU4LCAyMzUsIDE4LCA4NiwgNTgsIDIzMSwgMTkxLCA4NiwgCi0gICAgNTgsIDI0MCwgMTM0LCAyNDYsIDE3MCwgODYsIDU4LCAyNDAsIDEzNCwgMjQ2LCAxODQsIDg2LCA1OCwgMjQwLCAxNDEsIAotICAgIDI0NiwgMTcwLCA4NiwgNTgsIDI0MCwgMTQxLCAyNDYsIDE4NCwgODYsIDU4LCA0MiwgNDEsIDg2LCA1OCwgOTksIDEwMywgCi0gICAgODYsIDU4LCA4MSwgNjcsIDIsIDI1MywgOTMsIDIzMCwgMTM0LCA4MSwgNjcsIDIsIDI1MywgOTMsIDIzMywgMTM5LCAxMTcsIAotICAgIDY3LCAyLCAyNTMsIDkzLCAyMzAsIDEzNCwgMTE3LCA2NywgMiwgMjUzLCA5MywgMjMzLCAxMzksIDM3LCAyLCAyNTIsIDIyOCwgCi0gICAgMTMyLCAyMzcsIDQ1LCAzNywgMiwgMjM3LCA1OSwgMTMyLCAyMzcsIDQ1LCAzNywgMiwgMjQwLCAxMTYsIDQxLCAyMzMsIDc0LCAKLSAgICAxMzIsIDIzNywgNDUsIDM3LCAyLCAyMDMsIDQyLCAyMzMsIDc0LCAxMzIsIDIzNywgNDUsIDIzNSwgNDEsIDIsIDQyLCAxMzIsIAotICAgIDIzNywgNDUsIDIzNSwgNDEsIDIsIDQxLCAxMzIsIDIzNywgNDUsIDIzNSwgNDEsIDIsIDI1MiwgMjI4LCAxMzIsIDIzNywgCi0gICAgNDUsIDIzNSwgNDEsIDIsIDIzNywgNTksIDEzMiwgMjM3LCA0NSwgMjM3LCA1MCwgMjM1LCAyNywgODYsIDI0MCwgMTg1LCAKLSAgICAyMzUsIDI3LCA2MywgMjQwLCAxODUsIDIzNSwgMjcsIDg2LCAyNDcsIDExNCwgMywgMjM1LCAyNywgNjMsIDI0NywgMTE0LCAKLSAgICAzLCAyMzUsIDI3LCA4NiwgMjMxLCAyNDMsIDYzLCAyMzEsIDI0MywgNjMsIDIzMywgMTY3LCA4NiwgMjMzLCAxNjcsIDE2OSwgCi0gICAgODYsIDIzMywgMTY3LCA4NiwgMjQwLCAxODUsIDIzNSwgMjAsIDg2LCAyMzcsIDYwLCAyMzMsIDkwLCA2MywgMjM3LCA2MCwgCi0gICAgMjMzLCA5MCwgODYsIDIzNywgNjAsIDIzMywgMTIzLCA2MywgMjM3LCA2MCwgMjMzLCAxMjMsIDg2LCAzLCAyMzMsIDkwLCAKLSAgICA4NiwgMywgMjMzLCAxMjMsIDYzLCAzLCAyMzMsIDEyMywgODYsIDE2OSwgMjMzLCAxNDksIDYzLCAxNjksIDIzMywgMTQ5LCAKLSAgICA4NiwgNjEsIDIzMywgMTQ5LCA2MywgNjEsIDIzMywgMTQ5LCA0MiwgNjcsIDIsIDMsIDIzNSwgMjAsIDE1MiwgMTE3LCAyMzUsIAotICAgIDczLCA0MiwgNjcsIDIsIDMzLCAyNDAsIDE4MCwgMTgyLCAxMTcsIDIzMywgMTU2LCA1OCwgMTE3LCAyMzAsIDEzMiwgNjcsIAotICAgIDIsIDYxLCA4MiwgMTE3LCAyMzAsIDEzMiwgNjcsIDIsIDQ3LCA2MSwgODIsIDExNywgMjMwLCAxMzIsIDY3LCAyNDYsIDE3MiwgCi0gICAgMTI1LCAxMTcsIDIzMCwgMTMyLCAyMzcsIDQ5LCAyNDYsIDE4NywgNTgsIDExNywgNjcsIDIsIDIzNywgNTAsIDI0MCwgMjE0LCAKLSAgICAxMTcsIDY3LCAyLCAyNDYsIDIzNywgMiwgNjEsIDgyLCAxMTcsIDY3LCAyLCAyNDYsIDIzNywgMiwgNDcsIDYxLCA4MiwgCi0gICAgMTE3LCAyMzAsIDEzMiwgNjcsIDIsIDI0MCwgMTMzLCAxMTcsIDIzMCwgMTMyLCA2NywgMiwgMjQ2LCAyMzcsIDIsIDYxLCAKLSAgICA4MiwgMTE3LCAyMzAsIDEzMiwgNjcsIDIsIDI0NiwgMjM3LCAyLCA0NywgNjEsIDgyLCAxMTcsIDY3LCAyMzUsIDQyLCAyNTQsIAotICAgIDE4NCwgMjQ3LCAyMywgNjcsIDIzMywgNzgsIDIzMywgMjAxLCAyNDAsIDEzMiwgMjM3LCA1MSwgNSwgNjQsIDExNywgNTgsIAotICAgIDIzNSwgMzcsIDI0MCwgMTI4LCAyMzMsIDExOCwgNjQsIDExNywgNTgsIDExNywgNjcsIDY0LCAyMzUsIDM3LCAyMzcsIDc4LCAKLSAgICAxMDUsIDk2LCA4MSwgNjcsIDIzNSwgNDIsIDIyNywgMTgzLCA4MSwgNjcsIDIzNSwgNDIsIDIzMSwgMjI4LCAxMTcsIDIzMSwgCi0gICAgMjEyLCA1OCwgODEsIDIzMSwgMjEyLCA1OCwgMjM1LCAzNywgMjQwLCAxMjgsIDIzMywgMTE4LCA2NCwgODEsIDU4LCA4MSwgCi0gICAgNjcsIDY0LCAyMzUsIDM3LCAyMzcsIDc4LCAxMDUsIDk2LCAyNDAsIDEyOCwgMjMzLCAxMTgsIDY0LCAxMTcsIDU4LCAxMTcsIAotICAgIDY3LCA2NCwgMjM3LCA3OCwgMTA1LCA5NiwgMTE3LCA2NywgNjQsIDIzNSwgMzcsIDI0MCwgMTI4LCAyMzEsIDE5MiwgODEsIAotICAgIDY3LCA2NCwgMjM1LCAzNywgMjQwLCAxMjgsIDIzMSwgMTkyLCA2MywgMjM3LCA2MCwgMjQwLCAxMzksIDg2LCAzLCAyNDAsIAotICAgIDEzOSwgNjMsIDMsIDI0MCwgMTM5LCA4NiwgMjI3LCAxMzMsIDIzMSwgMjQzLCA2MywgMjI3LCAxMzMsIDIzMSwgMjQzLCAKLSAgICAxMTUsIDYsIDEsIDI0NywgMjQ2LCAxMTUsIDYsIDEsIDI0MSwgMTA2LCAxMTUsIDYsIDEsIDI0MiwgMTcsIDExNSwgNiwgMSwgCi0gICAgMjMzLCAyMDcsIDExNSwgNiwgMSwgMjM3LCAyNDMsIDExNSwgNiwgMSwgMjM4LCA4MiwgMTE1LCA2LCAxLCAyMzMsIDI1MCwgCi0gICAgMTE1LCA2LCAxLCAyMzcsIDE4MCwgMTE1LCA2LCAxLCAyMzUsIDIzNSwgMTE1LCA2LCAxLCAyNDAsIDI1MiwgMTE1LCA2LCAxLCAKLSAgICA1OSwgMjQwLCAyNTIsIDExNSwgNiwgMSwgNzQsIDExNSwgNiwgMSwgMjM1LCAxNjUsIDExNSwgNiwgMSwgMjQxLCAxNzAsIAotICAgIDExNSwgNiwgMSwgMjMzLCAyMTYsIDExNSwgNiwgMSwgMjMzLCAxNTMsIDExNSwgNiwgMSwgMjM4LCAyNywgMTE1LCA2LCAxLCAKLSAgICAyNDgsIDEyNSwgMTE1LCA2LCAxLCAyMzUsIDIwNCwgMTE1LCA2LCAxLCAyMzgsIDQyLCAxMTUsIDYsIDEsIDIzOCwgNjMsIAotICAgIDExNSwgNiwgMSwgMjM1LCAyMjksIDExNSwgNiwgMSwgMjQ4LCAxODcsIDExNSwgNiwgMSwgMjM3LCAyNTIsIDExNSwgNiwgMSwgCi0gICAgMjQxLCAxNTQsIDExNSwgNiwgMSwgMjQ4LCAxMjYsIDExNSwgNiwgMSwgMjUzLCAwLCAxMTUsIDYsIDEsIDI0MSwgMjQxLCAKLSAgICAxMTUsIDYsIDEsIDI0NywgNTgsIDExNSwgNiwgMSwgMjM1LCAxNTgsIDExNSwgNiwgMSwgMjQ2LCAxNjUsIDExNSwgNiwgMSwgCi0gICAgMjQxLCAyNCwgMTE1LCA2LCAxLCAyNDIsIDMwLCAxMTUsIDYsIDEsIDI0MiwgMjksIDExNSwgNiwgMSwgMjM1LCAyMTYsIAotICAgIDE1NCwgMTE1LCA2LCAxLCAyNTIsIDIzMywgMTE1LCA2LCAxLCAzLCAyNDYsIDE4MywgMTE1LCA2LCAxLCAzLCAyNTQsIDIxLCAKLSAgICAyLCAyNDAsIDEzMywgMTE1LCA2LCAxLCAyNTIsIDI1MSwgMTE1LCA2LCAxLCAyMzUsIDk1LCAzLCAyNDYsIDE4MywgMTE1LCAKLSAgICA2LCAxLCAyNTMsIDQ3LCAyNDYsIDE4MywgMTE1LCA2LCAxLCAyMzUsIDk1LCAyNTMsIDQ3LCAyNDYsIDE4MywgMTE1LCA2LCAKLSAgICAxLCAyNDAsIDIyNiwgMTE1LCA2LCAxLCAyMzMsIDE1MSwgMTE1LCA2LCAxLCAyMzMsIDIzNywgMTE1LCA2LCAxLCAyMzAsIAotICAgIDIxOCwgNTcsIDExNSwgNiwgMSwgMjMzLCAyMTQsIDIzMywgMTUzLCAxMTUsIDMsIDEsIDI0NywgMjQ2LCAxMTUsIDMsIDEsIAotICAgIDI0MSwgMTA2LCAxMTUsIDMsIDEsIDI0MiwgMTcsIDExNSwgMywgMSwgMjMzLCAyMDcsIDExNSwgMywgMSwgMjM3LCAyNDMsIAotICAgIDExNSwgMywgMSwgMjM4LCA4MiwgMTE1LCAzLCAxLCAyMzMsIDI1MCwgMTE1LCAzLCAxLCAyMzcsIDE4MCwgMTE1LCAzLCAxLCAKLSAgICAyMzUsIDIzNSwgMTE1LCAzLCAxLCAyNDAsIDI1MiwgMTE1LCAzLCAxLCA1OSwgMjQwLCAyNTIsIDExNSwgMywgMSwgNzQsIAotICAgIDExNSwgMywgMSwgMjM1LCAxNjUsIDExNSwgMywgMSwgMjQxLCAxNzAsIDExNSwgMywgMSwgMjMzLCAyMTYsIDExNSwgMywgMSwgCi0gICAgMjMzLCAxNTMsIDExNSwgMywgMSwgMjM4LCAyNywgMTE1LCAzLCAxLCAyNDgsIDEyNSwgMTE1LCAzLCAxLCAyMzUsIDIwNCwgCi0gICAgMTE1LCAzLCAxLCAyMzgsIDQyLCAxMTUsIDMsIDEsIDIzOCwgNjMsIDExNSwgMywgMSwgMjM1LCAyMjksIDExNSwgMywgMSwgCi0gICAgMjQ4LCAxODcsIDExNSwgMywgMSwgMjM3LCAyNTIsIDExNSwgMywgMSwgMjQxLCAxNTQsIDExNSwgMywgMSwgMjQ4LCAxMjYsIAotICAgIDExNSwgMywgMSwgMjUzLCAwLCAxMTUsIDMsIDEsIDI0MSwgMjQxLCAxMTUsIDMsIDEsIDI0NywgNTgsIDExNSwgMywgMSwgCi0gICAgMjM1LCAxNTgsIDExNSwgMywgMSwgMjQ2LCAxNjUsIDExNSwgMywgMSwgMjQxLCAyNCwgMTE1LCAzLCAxLCAyNDIsIDMwLCAKLSAgICAxMTUsIDMsIDEsIDI0MiwgMjksIDExNSwgMywgMSwgMjM1LCAyMTYsIDE1NCwgMTE1LCAzLCAxLCAyNTIsIDIzMywgMTE1LCAKLSAgICAzLCAxLCAzLCAyNDYsIDE4MywgMTE1LCAzLCAxLCAzLCAyNTQsIDIxLCAyLCAyNDAsIDEzMywgMTE1LCAzLCAxLCAyNTIsIAotICAgIDI1MSwgMTE1LCAzLCAxLCAyMzUsIDk1LCAzLCAyNDYsIDE4MywgMTE1LCAzLCAxLCAyNTMsIDQ3LCAyNDYsIDE4MywgMTE1LCAKLSAgICAzLCAxLCAyMzUsIDk1LCAyNTMsIDQ3LCAyNDYsIDE4MywgMTE1LCAzLCAxLCAyNDAsIDIyNiwgMTE1LCAzLCAxLCAyMzMsIAotICAgIDE1MSwgMTE1LCAzLCAxLCAyMzMsIDIzNywgMTE1LCAzLCAxLCAyMzAsIDIxOCwgNTcsIDExNSwgMywgMSwgMjMzLCAyMTQsIAotICAgIDIzMywgMTUzLCA3LCA2LCAxLCAyNTUsIDU4LCAyLCA0NywgMTI1LCA3LCAzLCAxLCAyNTUsIDU4LCAyLCA0NywgMTI1LCA3LCAKLSAgICA2LCAxLCAyNTUsIDU4LCAyLCAyMzcsIDQ0LCAyMDUsIDcsIDYsIDEsIDI1NSwgNzAsIDIsIDgyLCA3LCA2LCAxLCAyNTUsIAotICAgIDU3LCAyLCAyNDAsIDEzMywgNywgMywgMSwgMTAyLCAyLCA4MiwgNywgMywgMSwgMjU1LCA2MSwgMiwgMjMzLCA3NCwgODIsIAotICAgIDcsIDYsIDEsIDI1NSwgNjYsIDIsIDIzMCwgMTI2LCA3LCAzLCAxLCAyNTUsIDY2LCAyLCAyMzAsIDEyNiwgNywgNiwgMSwgCi0gICAgMjU1LCA2NywgMiwgMjMwLCAxMjYsIDcsIDMsIDEsIDI1NSwgNjcsIDIsIDIzMCwgMTI2LCA3LCA2LCAxLCAyNTUsIDU2LCAyLCAKLSAgICAyMzAsIDEyNiwgNywgMywgMSwgMjU1LCA1NiwgMiwgMjMwLCAxMjYsIDcsIDYsIDEsIDIzNywgNzEsIDcsIDYsIDEsIDI1NSwgCi0gICAgNjgsIDIsIDg4LCA3LCA2LCAxLCAyMDksIDU3LCA3LCAzLCAxLCAyNTUsIDY5LCAyLCA0MSwgODgsIDcsIDYsIDEsIDI1NSwgCi0gICAgNzEsIDIsIDg4LCA3LCAzLCAxLCAyNTUsIDcxLCAyLCA4OCwgNywgMywgMSwgMjU1LCA2OSwgMiwgMjQwLCAxNjgsIDcsIDYsIAotICAgIDEsIDEzMiwgMjEyLCA3LCAzLCAxLCAxMzIsIDIxMiwgNywgMywgMSwgMjM0LCAyMzgsIDI0NiwgMTk4LCA3LCAzLCAxLCAKLSAgICAxNjEsIDIsIDIzOCwgMjgsIDcsIDMsIDEsIDIwOSwgMjU1LCA1NywgMiwgMjQwLCAxMzMsIDcsIDMsIDEsIDEzMCwgMiwgCi0gICAgMTg0LCAyNDYsIDE3NCwgMjM1LCA1NywgNywgMSwgMywgNiwgMjA5LCA3MiwgNywgMjMxLCAxOTUsIDMsIDEsIDI1NCwgMTkyLCAKLSAgICA1MiwgMSwgNiwgMTk2LCA3MCwgNiwgMSwgMjQxLCA5MywgNzAsIDMsIDEsIDI0MSwgOTMsIDcwLCA2LCAxLCAyNDIsIDIwLCAKLSAgICA3MCwgMywgMSwgMjQyLCAyMCwgNzAsIDYsIDEsIDIzNywgNjEsIDcwLCAzLCAxLCAyMzcsIDYxLCA3MCwgNiwgMSwgMjM3LCAKLSAgICAyMzcsIDcwLCAzLCAxLCAyMzcsIDIzNywgNzAsIDYsIDEsIDI0NywgNzMsIDcwLCAzLCAxLCAyNDcsIDczLCA3MCwgNiwgMSwgCi0gICAgMjQ4LCAxNjUsIDcwLCAzLCAxLCAyNDgsIDE2NSwgNzAsIDYsIDEsIDI0MiwgMzcsIDcwLCAzLCAxLCAyNDIsIDM3LCA3MCwgCi0gICAgNiwgMSwgMjQxLCAxNTAsIDcwLCAzLCAxLCAyNDEsIDE1MCwgNzAsIDYsIDEsIDIzNSwgMjIzLCA3MCwgMywgMSwgMjM1LCAKLSAgICAyMjMsIDcwLCA2LCAxLCAyMzgsIDExLCA3MCwgMywgMSwgMjM4LCAxMSwgNzAsIDYsIDEsIDI0MCwgMjU1LCA3MCwgMywgMSwgCi0gICAgMjQwLCAyNTUsIDcwLCA2LCAxLCAyMzgsIDE5LCA3MCwgMywgMSwgMjM4LCAxOSwgNzAsIDYsIDEsIDI1MiwgMjM5LCA3MCwgCi0gICAgMywgMSwgMjUyLCAyMzksIDcwLCA2LCAxLCAyNTIsIDI0OCwgNzAsIDMsIDEsIDI1MiwgMjQ4LCA3MCwgNiwgMSwgMjQ3LCAKLSAgICA4MywgNzAsIDMsIDEsIDI0NywgODMsIDcwLCA2LCAxLCA3MywgNzAsIDMsIDEsIDczLCA3MCwgNiwgMSwgMjUyLCAyMjMsIAotICAgIDcwLCAzLCAxLCAyNTIsIDIyMywgNzAsIDYsIDEsIDI1MiwgMjQ2LCA3MCwgMywgMSwgMjUyLCAyNDYsIDcwLCA2LCAxLCAKLSAgICAyNDEsIDc0LCA3MCwgMywgMSwgMjQxLCA3NCwgNzAsIDYsIDEsIDI0NiwgMjEyLCA3MCwgMywgMSwgMjQ2LCAyMTIsIDcwLCAKLSAgICA2LCAxLCAyNTMsIDE5NywgNzAsIDMsIDEsIDI1MywgMTk3LCA3MCwgNiwgMSwgMjUzLCA4OCwgNzAsIDMsIDEsIDI1MywgODgsIAotICAgIDcwLCA2LCAxLCAyNDcsIDE1NywgNzAsIDMsIDEsIDI0NywgMTU3LCA3MCwgNiwgMSwgMjQ2LCAyMDQsIDcwLCAzLCAxLCAKLSAgICAyNDYsIDIwNCwgNzAsIDYsIDEsIDI0NywgOTgsIDcwLCAzLCAxLCAyNDcsIDk4LCA3MCwgNiwgMSwgMjMxLCAyMTYsIDI0MCwgCi0gICAgMTc0LCA3MCwgMywgMSwgMjMxLCAyMTYsIDI0MCwgMTc0LCA3MCwgNiwgMSwgODQsIDcwLCAyNDYsIDIyNCwgNzAsIDMsIDEsIAotICAgIDg0LCA3MCwgMjQ2LCAyMjQsIDcwLCA2LCAxLCAyMjcsIDE5MSwgMjQ3LCA3MywgNzAsIDMsIDEsIDIyNywgMTkxLCAyNDcsIAotICAgIDczLCA3MCwgNiwgMSwgMjMxLCAyMTYsIDI0MCwgMjU1LCA3MCwgMywgMSwgMjMxLCAyMTYsIDI0MCwgMjU1LCA3MCwgNiwgMSwgCi0gICAgMjMxLCAyMTYsIDI1MiwgMjQ4LCA3MCwgMywgMSwgMjMxLCAyMTYsIDI1MiwgMjQ4LCA3MCwgNiwgMSwgMjI3LCAxOTEsIAotICAgIDI1MiwgMjQ4LCA3MCwgMywgMSwgMjI3LCAxOTEsIDI1MiwgMjQ4LCA3MCwgNiwgMSwgODQsIDcwLCAyNDcsIDk4LCA3MCwgMywgCi0gICAgMSwgODQsIDcwLCAyNDcsIDk4LCA3MCwgNiwgMSwgMjM3LCAxNDMsIDcwLCAzLCAxLCAyMzcsIDE0MywgNzAsIDYsIDEsIAotICAgIDIzNSwgMTE3LCAyNDAsIDIxMiwgNzAsIDMsIDEsIDIzNSwgMTE3LCAyNDAsIDIxMiwgNzAsIDYsIDEsIDg0LCA3MCwgMjQwLCAKLSAgICAyMTIsIDcwLCAzLCAxLCA4NCwgNzAsIDI0MCwgMjEyLCA3MCwgNiwgMSwgODQsIDcwLCAyNDYsIDIzMiwgNzAsIDMsIDEsIAotICAgIDg0LCA3MCwgMjQ2LCAyMzIsIDcwLCA2LCAxLCAyMzMsIDE4NCwgMjQxLCAxLCA3MCwgMywgMSwgMjMzLCAxODQsIDI0MSwgMSwgCi0gICAgNzAsIDYsIDEsIDIzMSwgMjE2LCAyNDAsIDIwOSwgNzAsIDMsIDEsIDIzMSwgMjE2LCAyNDAsIDIwOSwgNzAsIDYsIDEsIDg0LCAKLSAgICA3MCwgMjQwLCAyMDksIDcwLCAzLCAxLCA4NCwgNzAsIDI0MCwgMjA5LCA3MCwgNiwgMSwgODQsIDcwLCAxNTQsIDcwLCAzLCAKLSAgICAxLCA4NCwgNzAsIDE1NCwgNzAsIDYsIDEsIDIzMywgMjEzLCAxNTQsIDcwLCAzLCAxLCAyMzMsIDIxMywgMTU0LCA3MCwgNiwgCi0gICAgMSwgODQsIDcwLCAyNDgsIDU5LCA3MCwgMywgMSwgODQsIDcwLCAyNDgsIDU5LCA3MCwgNiwgMSwgODQsIDcwLCAyNDcsIAotICAgIDE0NywgNzAsIDMsIDEsIDg0LCA3MCwgMjQ3LCAxNDcsIDcwLCA2LCAxLCA4NCwgNzAsIDIzNSwgOTMsIDcwLCAzLCAxLCA4NCwgCi0gICAgNzAsIDIzNSwgOTMsIDcwLCA2LCAxLCA4NCwgNzAsIDI0OCwgMjksIDcwLCAzLCAxLCA4NCwgNzAsIDI0OCwgMjksIDcwLCA2LCAKLSAgICAxLCA4NCwgNzAsIDIzNywgMTQ2LCA3MCwgMywgMSwgODQsIDcwLCAyMzcsIDE0NiwgNzAsIDYsIDEsIDg0LCAyMzcsIDkyLCAKLSAgICAyMzcsIDE0NiwgNzAsIDMsIDEsIDg0LCAyMzcsIDkyLCAyMzcsIDE0NiwgNzAsIDYsIDEsIDg0LCAyMzcsIDkyLCAyNDcsIAotICAgIDE4MiwgNzAsIDMsIDEsIDg0LCAyMzcsIDkyLCAyNDcsIDE4MiwgNzAsIDYsIDEsIDg0LCAyMzcsIDkyLCAyNDcsIDQ0LCA3MCwgCi0gICAgMywgMSwgODQsIDIzNywgOTIsIDI0NywgNDQsIDcwLCA2LCAxLCA4NCwgMjM3LCA5MiwgMjQ3LCAyMjUsIDcwLCAzLCAxLCAKLSAgICA4NCwgMjM3LCA5MiwgMjQ3LCAyMjUsIDcwLCAxNCwgMjQ4LCA3OCwgNzAsIDE0LCAyNTUsIDExLCAyNTIsIDI0NiwgNzAsIAotICAgIDE0LCAyNTQsIDIwMCwgMjUyLCAyNDYsIDcwLCAxNCwgMjM0LCAyMzAsIDcwLCAxNCwgMjU0LCAxNTUsIDI1MiwgMjQ2LCA3MCwgCi0gICAgMTQsIDI1NCwgODAsIDI1MiwgMjQ2LCA3MCwgMTQsIDI0NSwgMTY3LCAyNDEsIDc0LCA3MCwgODQsIDIzNywgOTIsIDI0NiwgCi0gICAgMTYyLCAyNDAsIDEyMSwgNzAsIDg0LCAyMzcsIDkyLCAyMzcsIDI0MiwgMjMzLCA4MiwgNzYsIDcwLCA4NCwgMjM3LCA5MiwgCi0gICAgMjM0LCAxMjgsIDIzMywgODIsIDc2LCA3MCwgODQsIDIzNywgOTIsIDI0MiwgMTksIDIzMywgMTQwLCA3MCwgMjMzLCA3NiwgCi0gICAgMTY4LCAyNDAsIDE3MCwgNzAsIDI0NiwgMTYyLCAyNDAsIDEyMSwgNzAsIDIyNywgMjU1LCAyMzMsIDE0MCwgODcsIDMsIDEsIAotICAgIDI1MywgNSwgODcsIDMsIDEsIDI0NywgMTIxLCA4NywgMywgMSwgMjQ3LCAzMiwgODcsIDMsIDEsIDI0NywgMTMxLCA4NywgMywgCi0gICAgMSwgMjUyLCAyMzIsIDg3LCAzLCAxLCAyNDcsIDIyMiwgODcsIDMsIDEsIDI0NywgMjM3LCA4NywgMywgMSwgMjQ3LCAyMDksIAotICAgIDg3LCAzLCAxLCAyNTMsIDc5LCA4NywgMywgMSwgMjQ3LCAzOSwgODcsIDMsIDEsIDI0NywgMTY3LCA4NywgMywgMSwgMjQ3LCAKLSAgICA0LCA4NywgMywgMSwgMjQ3LCA5MiwgODcsIDMsIDEsIDI1MywgMTA2LCA4NywgMywgMSwgMjQ3LCAxODcsIDg3LCAzLCAxLCAKLSAgICAyNDEsIDkwLCA4NywgMywgMSwgMjQ3LCAxOTQsIDg3LCAzLCAxLCAyNDcsIDQ5LCA4NywgMywgMSwgMjQ3LCA1NiwgODcsIDMsIAotICAgIDEsIDI1MywgMTIxLCA4NywgMywgMSwgMjQxLCA2MSwgODcsIDMsIDEsIDI0MSwgNDYsIDg3LCAzLCAxLCAyNDEsIDM5LCA4NywgCi0gICAgMywgMSwgMjQ3LCAxOTMsIDg3LCAzLCAxLCAyNDAsIDIwMywgODcsIDMsIDEsIDI0MSwgMzIsIDg3LCAzLCAxLCAyNDYsIAotICAgIDI0MSwgODcsIDMsIDEsIDI0NywgMTUzLCA4NywgMywgMSwgMjQ3LCAxMjUsIDg3LCAzLCAxLCAyNDEsIDMxLCA4NywgMywgMSwgCi0gICAgMjQ3LCAyMjgsIDg3LCAzLCAxLCAyNDEsIDQ0LCA4NywgMywgMSwgMjQ3LCAxNDUsIDg3LCAzLCAxLCAyNTIsIDI1MiwgODcsIAotICAgIDMsIDEsIDI0NywgODEsIDg3LCAzLCAxLCAyNTIsIDI1MCwgODcsIDMsIDEsIDI0NywgMTQ2LCA4NywgMywgMSwgMjQ3LCAKLSAgICAxNTAsIDIyMSwgMSwgMTkxLCAyMjEsIDEsIDI1MiwgMTM0LCAyMjEsIDEsIDI0NiwgNzUsIDIyMSwgMSwgMjUyLCAxMzcsIAotICAgIDIyMSwgMSwgMjQwLCA5NCwgMjIxLCAxLCAyMzcsIDIzMCwgMjM1LCAxNDMsIDI0OCwgMTk2LCAyMjEsIDEsIDI0OCwgMTk2LCAKLSAgICAyMjEsIDEsIDI1MiwgMTM1LCAyMjEsIDEsIDI0NiwgNzgsIDIyMSwgMSwgMjQ2LCA3NywgMjIxLCAxLCAyNDAsIDkzLCAyMjEsIAotICAgIDEsIDI1MiwgMTQ4LCAyMjEsIDEsIDI1MiwgMTM2LCAyMjEsIDEsIDI0NywgMjMxLCAyMjEsIDEsIDIzNywgMTIyLCAyNDcsIAotICAgIDIzMSwgMjIxLCAxLCAyNDAsIDk1LCAyMjEsIDEsIDI0NywgMjMwLCAyMjEsIDEsIDIzNywgMjMwLCAyMzUsIDE0MywgMjQ3LCAKLSAgICAyMzAsIDIyMSwgMSwgMjM3LCAxMjIsIDI0NywgMjMwLCAyMjEsIDEsIDI0NiwgODAsIDIyMSwgMSwgMjQ3LCAxMTcsIDIyMSwgCi0gICAgMSwgMjQyLCAyOCwgMjIxLCAxLCAyMzcsIDEyMiwgMjQyLCAyOCwgMjIxLCAxLCAyNDgsIDE5OCwgMjIxLCAxLCAyMzcsIAotICAgIDEyMiwgMjQ4LCAxOTgsIDIyMSwgMSwgMjUzLCAyOCwgMjIxLCAxLCAyNDEsIDg2LCAyMjEsIDEsIDIzNSwgMjQwLCAyNDEsIAotICAgIDg2LCAyMjEsIDEsIDIzNywgMTIyLCAyNDEsIDg2LCAyMjEsIDEsIDI1MiwgMTM4LCAyMjEsIDEsIDI1MiwgMTM5LCAyMjEsIAotICAgIDEsIDI0OCwgMTk3LCAyMjEsIDEsIDIzNywgMTIyLCAyNDYsIDc5LCAyMjEsIDEsIDIzNywgMTIyLCAyNDAsIDI0MiwgMjIxLCAKLSAgICAxLCAyNTIsIDE0MCwgMjIxLCAxLCAyNTIsIDIzMywgMjIxLCAxLCAyNTIsIDE0MSwgMjIxLCAxLCAyNDYsIDgxLCAyMjEsIDEsIAotICAgIDI0MSwgODUsIDIyMSwgMSwgMjM3LCAxMjIsIDI0MSwgODUsIDIyMSwgMSwgMjQ4LCAyNDMsIDI0MSwgODUsIDIyMSwgMSwgCi0gICAgMjUyLCAxNDIsIDIyMSwgMSwgMjQ2LCA4MywgMjIxLCAxLCAyNDYsIDgyLCAyMjEsIDEsIDI0NywgMjUsIDIyMSwgMSwgMjQ2LCAKLSAgICA4NCwgMjIxLCAxLCAyNDYsIDc2LCAyMjEsIDEsIDI0NiwgODUsIDIyMSwgMSwgMjUyLCAxNDMsIDIyMSwgMSwgMjUyLCAxNDQsIAotICAgIDIyMSwgMSwgMjUyLCAxNDUsIDIyMSwgMSwgMjQ4LCAxOTksIDIyMSwgMSwgMjMxLCAxNzYsIDI0OCwgMTk5LCAyMjEsIDEsIAotICAgIDI0NiwgODYsIDIyMSwgNTIsIDEsIDIyNywgMjQ5LCA3NiwgMjUsIDQsIDI1MCwgMjI3LCAyNSwgNCwgMjUxLCAyMSwgMjUsIAotICAgIDQsIDI1MSwgMTg3LCAyNSwgNCwgMjUxLCAyMzAsIDI1LCA0LCAyNDUsIDE3MCwgMjUsIDQsIDI0OSwgMTI1LCAyNSwgNCwgCi0gICAgMjUyLCAyNiwgMjUsIDQsIDI0OSwgMTYyLCAyNSwgNCwgMjUxLCA2OSwgMjUsIDQsIDI0NSwgMjUsIDI1LCA0LCAyMzUsIDMxLCAKLSAgICAyNTMsIDI1MywgMjUsIDQsIDI1MiwgMTg0LCAyNSwgNCwgMjQ5LCAyMDIsIDI1LCA0LCAyNDMsIDQzLCAyNSwgNCwgMjUwLCAKLSAgICAxMzYsIDI1LCA0LCAyNDUsIDI0NiwgMjUsIDQsIDI0MiwgMjUxLCAyNSwgNCwgMjQ1LCA3MCwgMjUsIDQsIDI1MSwgMTEzLCAKLSAgICAyNSwgNCwgMjQzLCAxNDAsIDI1LCA0LCAyNDMsIDE0MiwgMjUsIDQsIDIzOCwgMjQ1LCAyNSwgNCwgMjQzLCAxNDEsIDI1LCAKLSAgICA0LCAyNDYsIDE5MCwgMjUsIDQsIDI0NywgMjA0LCAyNSwgNCwgMjQ3LCAyMDIsIDI1LCA0LCAyNDUsIDE5NiwgMjUsIDQsIAotICAgIDI0NSwgMjAwLCAyNSwgNCwgMjQ4LCAxNjYsIDI1LCA0LCAyNDcsIDIwMywgMjUsIDQsIDI0OSwgMTQ2LCAyNSwgNCwgMjQ5LCAKLSAgICAxNTAsIDI1LCA0LCAyNDksIDE0OCwgMjUsIDQsIDI0MiwgMjM2LCAyNSwgNCwgMjQyLCAyMzcsIDI1LCA0LCAyNDksIDE0NywgCi0gICAgMjUsIDQsIDI0OSwgMTQ5LCAyNSwgNCwgMjQ4LCAyMTQsIDI1LCA0LCAyNDgsIDIxOCwgMjUsIDQsIDI0OCwgMjE2LCAyNSwgCi0gICAgNCwgMjQ2LCAxMzYsIDI1LCA0LCAyNDYsIDE0MCwgMjUsIDQsIDI0OCwgMjE1LCAyNSwgNCwgMjQ4LCAyMTcsIDI1LCA0LCAKLSAgICAyNDIsIDIzOCwgMjUsIDQsIDI0MiwgMjQxLCAyNSwgNCwgMjQyLCAyMzksIDI1LCA0LCAyMzgsIDEzOSwgMjUsIDQsIDIzOCwgCi0gICAgMTQwLCAyNSwgNCwgMjQxLCAzMCwgMjUsIDQsIDI0MiwgMjQwLCAyNSwgNCwgMjUxLCAxNTcsIDI1LCA0LCAyNTEsIDE2NCwgCi0gICAgMjUsIDQsIDI1MSwgMTU5LCAyNSwgNCwgMjQ1LCAxMDgsIDI1LCA0LCAyNDUsIDEwOSwgMjUsIDQsIDI1MSwgMTU4LCAyNSwgCi0gICAgNCwgMjUxLCAxNjAsIDI1LCA0LCAyNTAsIDE5OSwgMjUsIDQsIDI1MCwgMjAzLCAyNSwgNCwgMjUwLCAyMDEsIDI1LCA0LCAKLSAgICAyNDQsIDgxLCAyNSwgNCwgMjQ0LCA4MiwgMjUsIDQsIDI1MCwgMjAwLCAyNSwgNCwgMjUwLCAyMDIsIDI1LCA0LCAyNTIsIAotICAgIDEyNSwgMjUsIDQsIDI1MiwgMTMyLCAyNSwgNCwgMjUyLCAxMjcsIDI1LCA0LCAyNDYsIDcwLCAyNSwgNCwgMjQ2LCA3MSwgCi0gICAgMjUsIDQsIDI1MiwgMTI2LCAyNSwgNCwgMjUyLCAxMjgsIDI1LCA0LCAyNTAsIDUzLCAyNSwgNCwgMjUwLCA1OCwgMjUsIDQsIAotICAgIDI1MCwgNTYsIDI1LCA0LCAyNDMsIDE2NSwgMjUsIDQsIDI0MywgMTY2LCAyNSwgNCwgMjUwLCA1NCwgMjUsIDQsIDI1MCwgCi0gICAgNTcsIDM2LCAyOCwgMSwgMjUzLCA3MywgMzYsIDI4LCAxLCAyNTMsIDk1LCAzNiwgMjgsIDEsIDI0NywgMTMsIDM2LCAyOCwgCi0gICAgMSwgMjUzLCAyMCwgMzYsIDI4LCAxLCAyNDYsIDI1MSwgMzYsIDI4LCAxLCAyNTMsIDQ2LCAzNiwgMjgsIDEsIDE3NywgMzYsIAotICAgIDI4LCAxLCAyNTMsIDU4LCAzNiwgMjgsIDEsIDI1MywgODcsIDM2LCAyOCwgMSwgMjUyLCAyMzIsIDM2LCAyOCwgMSwgNzMsIAotICAgIDM2LCAyOCwgMSwgMjUzLCAwLCAzNiwgMjgsIDEsIDI1MywgOTksIDM2LCAyOCwgMSwgMjUzLCAxMTYsIDM2LCAyOCwgMSwgCi0gICAgMjUzLCA5LCAzNiwgMjgsIDEsIDE1NCwgMzYsIDI4LCAxLCAyNDYsIDI0OCwgMzYsIDI4LCAxLCAyNDYsIDIxNywgMzYsIDI4LCAKLSAgICAxLCAyNDYsIDE2NSwgMzYsIDI4LCAxLCAyMzcsIDIxNSwgMzYsIDI4LCAxLCAyNDAsIDIyNiwgMzYsIDI4LCAxLCAyMzgsIAotICAgIDIwNiwgMzYsIDI4LCAxLCA1NywgMzYsIDI4LCAxLCAyNTMsIDc3LCAzNiwgMjgsIDEsIDIzNywgMjAxLCAzNiwgMjgsIDEsIAotICAgIDIzMSwgMjU0LCAyNTMsIDEzNywgMzYsIDI4LCAxLCAyNDcsIDI1LCAzNiwgMjgsIDEsIDI1MiwgMjMzLCAzNiwgMjgsIDEsIAotICAgIDIzMywgOTMsIDU3LCAzNiwgMjgsIDEsIDIzNywgMTAyLCAyNDYsIDE4MywgMzYsIDI4LCAxLCAyNTMsIDQ3LCAyNDYsIDE4MywgCi0gICAgMzYsIDI4LCAxLCAyMzMsIDkzLCAyNTMsIDQ3LCAyNDYsIDE4MywgNDEsIDI0MCwgMTE3LCAyMjgsIDE4NiwgMjM1LCA3MCwgCi0gICAgNDEsIDI0MCwgMTE3LCAyMzcsIDUwLCAyMjgsIDE4NiwgMjM1LCA3MCwgNDIsIDIyOCwgMTg2LCAxMDQsIDQxLCAyMjgsIAotICAgIDE4NiwgMTA0LCA0MiwgMjM3LCA1MCwgMjI4LCAxODYsIDEwNCwgNDEsIDIzNywgNTAsIDIyOCwgMTg2LCAxMDQsIDIzNywgCi0gICAgMTA1LCAyMjcsIDIwNiwgMjM1LCA3MCwgMjM3LCAxMDUsIDIzNywgNTAsIDIyNywgMjA2LCAyMzUsIDcwLCAyMzcsIDUwLCAKLSAgICAyMjcsIDE5OSwgMjM1LCA3MCwgNDIsIDIyNywgMTk5LCAxMDQsIDQxLCAyMjcsIDE5OSwgMTA0LCAyMzcsIDEwNSwgMjM1LCAKLSAgICAyNywgNDIsIDIzNywgMTA1LCAyMzMsIDIyMywgMTA0LCA0MSwgMjM3LCAxMDUsIDIzMywgMjIzLCAxMDQsIDIzMiwgMTc3LCAKLSAgICAyMzQsIDM2LCAyMjgsIDIwMywgMjM3LCAyNTEsIDIyOCwgMjAzLCAyMDAsIDIzNywgMjUxLCAyMjgsIDIwMywgMjI3LCAyNDMsIAotICAgIDIzNywgNTAsIDIzNiwgMTcyLCAyMzEsIDE5MSwgMjM1LCAxNDYsIDIzNSwgMTgsIDIzNSwgMTQ2LCAyMzcsIDUwLCAyMjcsIAotICAgIDEzMywgMjM3LCA5OCwgNDcsIDIzNSwgNzgsIDIzNSwgNjksIDIzMywgNzAsIDIyOCwgMjEzLCAyNTEsIDEwMiwgMjM1LCAKLSAgICAxNTUsIDIzOCwgMTAsIDIsIDIxOSwgMjQwLCAxMjgsIDIsIDI0NiwgMTc0LCA0NiwgNDIsIDE4NCwgMjMwLCAxOTIsIDEwNCwgCi0gICAgNDEsIDE4NCwgMjMwLCAxOTIsIDEwNCwgMjQwLCAxMjgsIDIsIDU2LCA0NiwgMjQwLCAxMjgsIDIsIDU2LCA1MSwgNDIsIDYxLCAKLSAgICAyNTIsIDIxOSwgMiwgMjM3LCAxOTAsIDQxLCA2MSwgMjUyLCAyMTksIDIsIDIzNywgMTkwLCAyNTIsIDIyOCwgNDIsIDEzMiwgCi0gICAgMTA0LCAyNTIsIDIyOCwgNDEsIDEzMiwgMTA0LCAyMzcsIDU5LCA0MiwgMTMyLCAxMDQsIDIzNywgNTksIDQxLCAxMzIsIAotICAgIDEwNCwgNDIsIDIzMywgMTE2LCA5NywgMTA0LCA0MSwgMjMzLCAxMTYsIDk3LCAxMDQsIDQyLCA0NywgMjI4LCAxODAsIDQxLCAKLSAgICA0NywgMjI4LCAxODAsIDEzNSwgMTk3LCAxMDcsIDE2OCwgNTYsIDIyOCwgMTgyLCAxNjgsIDU2LCAxMDcsIDEzNSwgMTk3LCAKLSAgICAyMjgsIDE4MiwgMjM1LCA1MSwgMjQ2LCAxNjAsIDU2LCAyMjgsIDE4MiwgMjQ2LCAxNTksIDU2LCA3NiwgMjAwLCAyMzMsIAotICAgIDgyLCA3NiwgNjEsIDIwNSwgMjQ2LCAxNzQsIDIzNywgMjA5LCA5LCAyOSwgMjM2LCAyMDAsIDksIDI5LCAyMzcsIDE5OCwgOSwgCi0gICAgMjksIDIzNywgMTQ1LCAxMTgsIDksIDI5LCAyMzcsIDE0NSwgMTEzLCA5LCAyOSwgMjM3LCAxNDUsIDE2NiwgOSwgMjksIAotICAgIDIzNiwgMTg2LCA5LCAyOSwgMjQ2LCAyMzEsIDksIDI5LCAyMzgsIDcwLCA5LCAyOSwgMjQxLCAxNzQsIDExOCwgOSwgMjksIAotICAgIDI0MSwgMTc0LCAxMTMsIDksIDI5LCAyMjksIDE5NywgOSwgMjksIDI0MSwgMjMyLCA5LCAyOSwgMywgMTE4LCA5LCAyOSwgMywgCi0gICAgMTEzLCA5LCAyOSwgMjQ3LCA4NSwgMTE4LCA5LCAyOSwgMjQ3LCA4NSwgMTEzLCA5LCAyOSwgMjQ3LCA4NSwgMTY2LCA5LCAKLSAgICAyOSwgMjQ3LCA4NSwgMTU4LCA5LCAyOSwgMjQwLCA3LCA5LCAyOSwgMjM1LCAyMjUsIDksIDI5LCAyNDEsIDI0OCwgMTE4LCAKLSAgICA5LCAyOSwgMjQxLCAyNDgsIDExMywgOSwgMjksIDI0MCwgMTk2LCAxMTgsIDksIDI5LCAyNDAsIDE5NiwgMTEzLCA5LCAyOSwgCi0gICAgMjQwLCAyNTEsIDksIDI5LCAyNDcsIDE5NiwgOSwgMjksIDIzOCwgMTQ5LCA5LCAyOSwgMjQ3LCA1NCwgOSwgMjksIDI0MCwgCi0gICAgMjExLCA5LCAyOSwgMjM3LCAyNDAsIDksIDI5LCAyMzYsIDE1OSwgOSwgMjksIDIzMiwgOTcsIDksIDI5LCAyNDIsIDIzLCAKLSAgICAxMTgsIDksIDI5LCAyNDIsIDIzLCAxMTMsIDksIDI5LCAyNDAsIDIwNywgOSwgMjksIDI1NCwgMiwgMTE4LCA5LCAyOSwgCi0gICAgMjU0LCAyLCAxMTMsIDksIDI5LCAyMzAsIDE0OSwgMTMyLCAyNDgsIDE4MCwgMjM4LCA3NiwgOSwgMjksIDI0NywgMTI3LCA5LCAKLSAgICAyOSwgMjQ4LCAzMSwgOSwgMjksIDI0MSwgMTYzLCA5LCAyOSwgMjQ3LCAyNTUsIDEwNiwgMjM3LCAxOTksIDksIDI5LCAyNDgsIAotICAgIDM2LCA5LCAyOSwgMjM4LCA2NSwgMTE4LCA5LCAyOSwgMjM4LCA2NSwgMTEzLCA5LCAyOSwgMjM1LCAxMDksIDksIDI5LCAKLSAgICAyNDEsIDczLCA5LCAyOSwgMjI4LCAxODEsIDI0MSwgNzMsIDksIDI5LCAyNTMsIDE1NCwgMTE4LCA5LCAyOSwgMjUzLCAxNTQsIAotICAgIDExMywgOSwgMjksIDI1MywgMTU0LCAxNjYsIDksIDI5LCAyNTMsIDE1NCwgMTU4LCA5LCAyOSwgMjQ0LCAxMjEsIDksIDI5LCAKLSAgICAyMzgsIDUwLCA5LCAyOSwgMjQ3LCAxOTUsIDksIDI5LCAyNDgsIDM1LCA5LCAyOSwgMjQ4LCAxMjMsIDksIDI5LCAyNDEsIAotICAgIDEwNSwgMTE4LCA5LCAyOSwgMjQxLCAxMDUsIDExMywgOSwgMjksIDI0MSwgMTg5LCA5LCAyOSwgMjM1LCAxOTIsIDksIDI5LCAKLSAgICAyNDEsIDQxLCAxMTgsIDksIDI5LCAyNDEsIDQxLCAxMTMsIDksIDI5LCAyNDEsIDQxLCAxNjYsIDksIDI5LCAyMzgsIDc0LCAKLSAgICA5LCAyOSwgMjMzLCAxOTQsIDksIDI5LCAyNDYsIDE4NCwgMTE4LCA5LCAyOSwgMjQ2LCAxODQsIDExMywgOSwgMjksIDIyOCwgCi0gICAgMTgxLCAyNDcsIDUwLCA5LCAyOSwgMjMwLCAxNDksIDI0MCwgMTc5LCA5LCAyOSwgMjQwLCAxNzksIDksIDI5LCAyMjgsIAotICAgIDE4MSwgMjM1LCAyMTUsIDksIDI5LCAyMjgsIDE4MSwgMjM4LCA1MiwgOSwgMjksIDI0MSwgMzgsIDksIDI5LCAyMjgsIDE4MSwgCi0gICAgMjQxLCAxMDgsIDksIDI5LCAyMzAsIDE0OSwgMjQyLCAyMSwgOSwgMjksIDI0NywgMjI0LCAxMTgsIDksIDI5LCAyNDcsIAotICAgIDIyNCwgMTEzLCA5LCAyOSwgMjQxLCAxMTAsIDksIDI5LCAyMjgsIDE4MSwgMjQxLCA0MCwgOSwgMjksIDE4MiwgMTE4LCA5LCAKLSAgICAyOSwgMTgyLCAxMTMsIDksIDI5LCAyMjgsIDE4MSwgMjQxLCA0LCA5LCAyOSwgMjI4LCAxODEsIDI0MSwgMTM3LCA5LCAyOSwgCi0gICAgMjQxLCAxOTUsIDExOCwgOSwgMjksIDI0MSwgMTk1LCAxMTMsIDksIDI5LCAyNDEsIDIxOSwgOSwgMjksIDI0MSwgMTAyLCA5LCAKLSAgICAyOSwgMjI4LCAxODEsIDIzOCwgNzEsIDIzMywgMTcxLCA5LCAyOSwgMjI4LCAxODEsIDI0MSwgMTc5LCA5LCAyOSwgMjI4LCAKLSAgICAxODEsIDI0MCwgMTk5LCA5LCAyOSwgMjI4LCAxODEsIDI0OCwgMzgsIDksIDI5LCAyNTMsIDE3NSwgMTE4LCA5LCAyOSwgCi0gICAgMjUzLCAxNzUsIDExMywgOSwgMjksIDI1MywgMTc1LCAxNjYsIDksIDI5LCAyMjgsIDE4MSwgMjQ3LCAxMzYsIDksIDI5LCAKLSAgICAyNDAsIDIyOCwgOSwgMjksIDIyOCwgMTgxLCAyMzgsIDgsIDksIDI5LCAyNDEsIDEwMywgOSwgMjksIDIzOCwgMCwgOSwgMjksIAotICAgIDIyOCwgMTgxLCAyNDEsIDEzMCwgOSwgMjksIDIyOCwgMTgxLCAyNDEsIDI3LCA5LCAyOSwgMjI4LCAxODEsIDI0MSwgMjMxLCAKLSAgICA5LCAyOSwgMjMwLCAxNDksIDIzNywgMjI0LCA5LCAyOSwgMjMwLCAxNDksIDIzNSwgMjMyLCA5LCAyOSwgMjI4LCAxODEsIAotICAgIDI0MSwgMTM0LCA5LCAyOSwgMjI4LCAxOTEsIDI0MSwgMzcsIDksIDI5LCAyMjgsIDE4MSwgMjQxLCAzNywgOSwgMjksIDIyOCwgCi0gICAgMTkxLCAyMzcsIDIyMSwgOSwgMjksIDIyOCwgMTgxLCAyMzcsIDIyMSwgOSwgMjksIDIyOCwgMTkxLCAyMzUsIDc0LCA5LCAKLSAgICAyOSwgMjI4LCAxODEsIDIzNSwgNzQsIDksIDI5LCAyMzUsIDEwNSwgOSwgMjksIDIyOCwgMTkxLCAyMzUsIDEwNSwgOSwgMjksIAotICAgIDIyOCwgMTgxLCAyMzUsIDEwNSwgNDksIDI5LCAxMTgsIDQ5LCAyOSwgMjQwLCAxMzgsIDQ5LCAyOSwgMjQ2LCAxNjQsIDQ5LCAKLSAgICAyOSwgMjM3LCA4NCwgNDksIDI5LCAyMzYsIDIxMywgNDksIDI5LCA4OCwgNDksIDI5LCAxMTMsIDQ5LCAyOSwgMjQ4LCA5MiwgCi0gICAgNDksIDI5LCAyNDcsIDQsIDQ5LCAyOSwgMjQ0LCA5MywgNDksIDI5LCAyMzgsIDIwMiwgNDksIDI5LCAxODcsIDQ5LCAyOSwgCi0gICAgMTAzLCAyNDYsIDIzMSwgNDksIDI5LCAyMzgsIDE2MiwgNDksIDI5LCAyNDgsIDY2LCA0OSwgMjksIDIzOCwgNzAsIDQ5LCAKLSAgICAyOSwgMjQ2LCAxNTcsIDI0NiwgMjMxLCA0OSwgMjksIDIzOSwgNzIsIDQ5LCAyOSwgMjM4LCAzNiwgNDksIDI5LCAyNDYsIAotICAgIDU5LCA0OSwgMjksIDI0MCwgMTMsIDQ5LCAyOSwgNDEsIDI0NiwgMTU3LCAyNDYsIDIzMSwgNDksIDI5LCAyMzksIDksIDIzMCwgCi0gICAgMTY0LCA0OSwgMjksIDI0NiwgMTc5LCA0OSwgMjksIDIyOSwgMTk3LCA0OSwgMjksIDI0MSwgMjMyLCA0OSwgMjksIDIzNywgCi0gICAgMTk4LCA0OSwgMjksIDIzNCwgMTk5LCA0OSwgMjksIDIzOCwgOTAsIDQ5LCAyOSwgMjM4LCAyNiwgNDksIDI5LCAyMzAsIAotICAgIDE2NCwgNDksIDI5LCAyMzcsIDk5LCA0OSwgMjksIDIzNCwgMjE2LCA0OSwgMjksIDI1MywgNzYsIDQ5LCAyOSwgMjU1LCAyNywgCi0gICAgMjM2LCAyMzMsIDQ5LCAyOSwgMjM0LCA5OSwgNDksIDI5LCAyNDksIDExOSwgNDksIDI5LCAyMzcsIDIyNSwgNDksIDI5LCAKLSAgICAyMzcsIDIzNSwgNDksIDI5LCAyNDUsIDExOSwgNDksIDI5LCAyNDQsIDgsIDQ5LCAyOSwgMjM3LCAyMTYsIDQ5LCAyOSwgCi0gICAgMjQ0LCA4OSwgNDksIDI5LCAyMzYsIDM3LCA0OSwgMjksIDIzNiwgMjM5LCA0OSwgMjksIDIzMSwgMjU1LCA0OSwgMjksIAotICAgIDIzOSwgMjI0LCA0OSwgMjksIDI0NiwgNTgsIDQ5LCAyOSwgMjM0LCAxNzYsIDQ5LCAyOSwgMjM3LCAxMywgNDksIDI5LCAKLSAgICAyNDksIDIwOCwgNDksIDI5LCAyNDAsIDEyNSwgMjM1LCAyMjUsIDQ5LCAyOSwgMjM3LCA1MCwgMjM3LCAxOTgsIDQ5LCAyOSwgCi0gICAgMTgyLCAyMzYsIDI0MywgNDksIDI5LCAxMzUsIDIzOSwgNSwgNDksIDI5LCAyMzksIDI1MCwgNDksIDI5LCAyNDcsIDY4LCAKLSAgICA0OSwgMjksIDI0MCwgOCwgNDksIDI5LCAyMzQsIDIzLCA0OSwgMjksIDI0NSwgMjE4LCA0OSwgMjksIDIzNywgMjA0LCA0OSwgCi0gICAgMjksIDIzNCwgMTE2LCA0OSwgMjksIDI0MywgNzgsIDQ5LCAyOSwgMjQwLCAyNTEsIDQ5LCAyOSwgMjM1LCAxNTUsIDQ5LCAKLSAgICAyOSwgMjQ3LCAxOTYsIDQ5LCAyOSwgMjM2LCAyMTEsIDQ5LCAyOSwgMjM2LCA1MSwgNDksIDI5LCAyNDcsIDI0NCwgNDksIAotICAgIDI5LCAyMzUsIDI3LCA0OSwgMjksIDI0NywgMTg0LCA0OSwgMjksIDI0NywgNTQsIDQ5LCAyOSwgMjUxLCAyMTQsIDQ5LCAyOSwgCi0gICAgMjQwLCAyMTEsIDQ5LCAyOSwgMjQxLCA4MSwgNDksIDI5LCAyNDQsIDg2LCA0OSwgMjksIDI0MCwgMTIxLCA0OSwgMjksIAotICAgIDIzNywgMjQwLCA0OSwgMjksIDIzNywgMjgsIDQ5LCAyOSwgMjU0LCAyNDYsIDI0NywgMTg0LCA0OSwgMjksIDIzNCwgMzMsIAotICAgIDQ5LCAyOSwgMjQ4LCA0MCwgNDksIDI5LCAyNDMsIDEyLCA0OSwgMjksIDI0MCwgMjEsIDQ5LCAyOSwgMjM3LCAxNjgsIDQ5LCAKLSAgICAyOSwgMjQwLCAyMDcsIDQ5LCAyOSwgMjQzLCAxMywgNDksIDI5LCAyMzYsIDc1LCA0OSwgMjksIDQ3LCAyNTQsIDE4NCwgNDksIAotICAgIDI5LCAxMzIsIDI0OCwgMTgwLCAyMzgsIDc2LCA0OSwgMjksIDI0MCwgMiwgNDksIDI5LCAyNDMsIDEwNiwgNDksIDI5LCAKLSAgICAyNDcsIDEyNywgNDksIDI5LCAyNDgsIDMxLCA0OSwgMjksIDIzMywgMCwgNDksIDI5LCAyNDEsIDE2MywgNDksIDI5LCAyMzksIAotICAgIDEwMiwgNDksIDI5LCAyNDUsIDI1MiwgNDksIDI5LCAyNDAsIDI0LCA0OSwgMjksIDI0NCwgMTAzLCA0OSwgMjksIDI1MiwgCi0gICAgNjUsIDQ5LCAyOSwgMjM4LCAyMTYsIDQ5LCAyOSwgMjQ3LCAyNTUsIDEwNiwgMjM3LCAxOTksIDQ5LCAyOSwgMjMzLCAyNiwgCi0gICAgNDksIDI5LCAyMzcsIDUwLCAyNDUsIDI0MCwgNDksIDI5LCAyMzcsIDkwLCA0OSwgMjksIDI0NSwgMTg4LCA0OSwgMjksIAotICAgIDI0MCwgMTU2LCA0OSwgMjksIDI0OCwgMzYsIDQ5LCAyOSwgMjM4LCA2NCwgNDksIDI5LCA1OCwgNDksIDI5LCAyNDAsIDIyLCAKLSAgICA0OSwgMjksIDIzNiwgMjM3LCA0OSwgMjksIDI0MCwgNDYsIDQ5LCAyOSwgMjM4LCAyNTIsIDQ5LCAyOSwgMjQyLCAyMzQsIAotICAgIDQ5LCAyOSwgMjQwLCAxOSwgNDksIDI5LCAyMzUsIDEwOSwgNDksIDI5LCAyNDUsIDExNSwgNDksIDI5LCAyNDEsIDczLCA0OSwgCi0gICAgMjksIDI1MCwgMTI2LCA0OSwgMjksIDI1MSwgNTEsIDQ5LCAyOSwgMjM4LCA1MCwgNDksIDI5LCAyMzQsIDEwMiwgNDksIDI5LCAKLSAgICAyNDgsIDEyMywgNDksIDI5LCAyNDYsIDIzMCwgNDksIDI5LCAyNDUsIDc4LCA0OSwgMjksIDI0NywgMTM1LCA0OSwgMjksIAotICAgIDIzOCwgMTMyLCA0OSwgMjksIDI0MSwgMTg5LCA0OSwgMjksIDIzMiwgMjMxLCA0OSwgMjksIDI0MSwgMjMzLCA0OSwgMjksIAotICAgIDIzNSwgMjUxLCA0OSwgMjksIDIzNSwgMTkyLCA0OSwgMjksIDIzNSwgMTQyLCA0OSwgMjksIDIzNiwgMTc2LCA0OSwgMjksIAotICAgIDI0MiwgMjExLCA0OSwgMjksIDIzMywgMzEsIDQ5LCAyOSwgMjM4LCAxNTgsIDQ5LCAyOSwgMjM4LCAyNTQsIDQ5LCAyOSwgCi0gICAgMjM4LCA3NCwgNDksIDI5LCAyMzYsIDExMywgNDksIDI5LCAyMzgsIDEyNywgNDksIDI5LCAyNDcsIDIyNCwgMjMwLCAxNjQsIAotICAgIDQ5LCAyOSwgMjMzLCAxOTQsIDQ5LCAyOSwgMjQ2LCA1NSwgNDksIDI5LCAyNDcsIDUwLCA0OSwgMjksIDI0MCwgMTc5LCA0OSwgCi0gICAgMjksIDIzNSwgMjE1LCA0OSwgMjksIDIzNywgMjAsIDQ5LCAyOSwgMjQyLCAxOTYsIDQ5LCAyOSwgMjUxLCAxMDksIDQ5LCAKLSAgICAyOSwgMjM2LCA0LCA0OSwgMjksIDIzOCwgNTIsIDQ5LCAyOSwgMjUxLCAxNzYsIDQ5LCAyOSwgMjUxLCAxOTUsIDQ5LCAyOSwgCi0gICAgMjQxLCAzOCwgNDksIDI5LCAyNDIsIDIxMiwgNDksIDI5LCAyNDEsIDEwOCwgNDksIDI5LCAyMzYsIDEyLCA0OSwgMjksIAotICAgIDIzNCwgMTY0LCA0OSwgMjksIDI0MiwgMjEsIDQ5LCAyOSwgMjQxLCAxMTAsIDQ5LCAyOSwgMjQxLCA4NCwgNDksIDI5LCAKLSAgICAyMjgsIDI0MSwgNDksIDI5LCAyMzUsIDcsIDQ5LCAyOSwgMjQxLCA0MCwgNDksIDI5LCAyNDEsIDQsIDQ5LCAyOSwgMjQxLCAKLSAgICAxMzcsIDQ5LCAyOSwgMjM5LCAxMjAsIDQ5LCAyOSwgMjQwLCAxLCA0OSwgMjksIDI0MCwgMTI1LCAyNDAsIDI3LCAyNDEsIAotICAgIDI3LCA0OSwgMjksIDI0MSwgMjE5LCA0OSwgMjksIDI0MSwgMTAyLCA0OSwgMjksIDI0MCwgODgsIDQ5LCAyOSwgMjQwLCAKLSAgICAyMjMsIDQ5LCAyOSwgMjMzLCAxNzEsIDQ5LCAyOSwgMjM4LCA3MSwgMjMzLCAxNzEsIDQ5LCAyOSwgMjQ0LCA5MiwgNDksIAotICAgIDI5LCAyNDAsIDksIDQ5LCAyOSwgMjQxLCAxNzksIDQ5LCAyOSwgMjQwLCAxOTksIDQ5LCAyOSwgMjQ4LCAzOCwgNDksIDI5LCAKLSAgICAyNDcsIDEzNiwgNDksIDI5LCAyNDAsIDIyOCwgNDksIDI5LCAyMzIsIDE5NCwgNDksIDI5LCAyMzgsIDgsIDQ5LCAyOSwgCi0gICAgMjQxLCAxMDMsIDQ5LCAyOSwgMjQ1LCAyMzcsIDQ5LCAyOSwgMjQzLCAxNjksIDQ5LCAyOSwgMjM4LCAyMTgsIDQ5LCAyOSwgCi0gICAgMjMwLCA5OCwgMjQxLCA4NCwgNDksIDI5LCAyMzIsIDE2LCA0OSwgMjksIDIzOCwgMCwgNDksIDI5LCAyNDEsIDEzMCwgNDksIAotICAgIDI5LCAyNDEsIDI3LCA0OSwgMjksIDI0MSwgMjMxLCA0OSwgMjksIDI0MSwgMTE5LCA0OSwgMjksIDIzNywgMjI0LCA0OSwgCi0gICAgMjksIDI0MywgMTcxLCA0OSwgMjksIDIzNSwgMjMyLCA0OSwgMjksIDIzNiwgMTU2LCA0OSwgMjksIDIzNywgNDUsIDQ5LCAKLSAgICAyOSwgMjMwLCA1NCwgNDksIDI5LCAyNDEsIDEzNCwgNDksIDI5LCAyMzcsIDksIDQ5LCAyOSwgMjQzLCA4MSwgNDksIDI5LCAKLSAgICAyNDgsIDE0NiwgNDksIDI5LCAyNDQsIDI1MSwgNDksIDI5LCAyNDEsIDM3LCA0OSwgMjksIDIzNywgMjIxLCA0OSwgMjksIAotICAgIDIzNSwgNzQsIDQ5LCAyOSwgMjM1LCAxMDUsIDQ5LCAyOSwgMjM3LCAyNTAsIDkwLCAyMjksIDE2OCwgMTE2LCA0MiwgMTgwLCAKLSAgICAyMzcsIDQxLCA5MCwgMjI5LCAxNjgsIDExNiwgNjQsIDE4MCwgNTEsIDkwLCAyMjksIDE2OCwgMTE2LCA0MiwgMTgwLCAyMzcsIAotICAgIDQ0LCAyMiwgMjM3LCA0MSwgOTAsIDIyOSwgMTY4LCAxMTYsIDY0LCAxODAsIDIzNywgNDQsIDIyLCA1MSwgOTAsIDIyOSwgCi0gICAgMTY4LCAxMTYsIDI0NiwgMTYyLCAyMzMsIDQ1LCA5MCwgMjI5LCAxNjgsIDExNiwgMjMzLCAxMzcsIDI0NiwgMTcyLCA0NiwgCi0gICAgOTAsIDIyOSwgMTY4LCAxMTYsIDIzMywgMTM3LCAyNDYsIDE3MiwgNTEsIDkwLCAyMjksIDE2OCwgMTE2LCAyMzMsIDEzNywgCi0gICAgMjQ2LCAxNzIsIDI0MCwgMTMyLCA5MCwgMjI5LCAxNjgsIDExNiwgMjMzLCAxMzcsIDI0NiwgMTcyLCAyNDAsIDExNiwgMjQwLCAKLSAgICAxMzIsIDkwLCAyMjksIDE2OCwgMTE2LCAyMzMsIDEzNywgMjQ2LCAxNzIsIDI0MCwgMTE2LCAyMzcsIDQxLCA5MCwgMjI5LCAKLSAgICAxNjgsIDExNiwgMjMzLCAxMzcsIDI0NiwgMTcyLCAyMDMsIDI0MCwgMTMyLCA5MCwgMjI5LCAxNjgsIDExNiwgMjMyLCAyMzYsIAotICAgIDkwLCAyMzcsIDY5LCA5MCwgMjM3LCA2NywgOTAsIDI0NiwgMTYyLCAyNDAsIDEyMSwgMjQzLCA3MiwgNzYsIDIzNCwgMTMzLCAKLSAgICAyMzEsIDg1LCAyMzMsIDI0MiwgOTgsIDkwLCAyMzEsIDIyNSwgNzYsIDkwLCAyMzUsIDExMywgNzYsIDkwLCA2NSwgMjQwLCAKLSAgICAxMjYsIDQyLCAyNDAsIDExNywgMTA0LCA0MSwgMjQwLCAxMTcsIDEwNCwgNDIsIDQ3LCAyNDAsIDExNywgMTA0LCA0MSwgNDcsIAotICAgIDI0MCwgMTE3LCAxMDQsIDQyLCAyMzcsIDc5LCAxMDQsIDQxLCAyMzcsIDc5LCAxMDQsIDQyLCA2MywgMjM3LCA3OSwgMTA0LCAKLSAgICA0MSwgNjMsIDIzNywgNzksIDEwNCwgNDIsIDg2LCAyMzAsIDEzNywgMTA0LCA0MSwgODYsIDIzMCwgMTM3LCAxMDQsIDIzNywgCi0gICAgMjEwLCA3NiwgMjUwLCAyNiwgNzYsIDQyLCAyMzMsIDg5LCAyNDAsIDE1OCwgMTA0LCA0MSwgMjMzLCA4OSwgMjQwLCAxNTgsIAotICAgIDEwNCwgNDIsIDYzLCAyMzAsIDEzNywgMTA0LCA0MSwgNjMsIDIzMCwgMTM3LCAxMDQsIDQyLCA2MywgMjMzLCA4OSwgMjQwLCAKLSAgICAxNTgsIDEwNCwgNDEsIDYzLCAyMzMsIDg5LCAyNDAsIDE1OCwgMTA0LCA0MiwgNjMsIDM3LCAxMDQsIDQxLCA2MywgMzcsIAotICAgIDEwNCwgMjQ3LCAyMywgMjQwLCAxNTEsIDIwMCwgNDcsIDI0MSwgNjQsIDIzMSwgMTk5LCA3NiwgNDcsIDI0MSwgNjQsIDIzMSwgCi0gICAgMTk5LCA3NiwgMTg0LCA0NywgMjQxLCA2NCwgMjMxLCAxOTksIDc2LCAyMzcsIDIxMCwgMTY1LCAyNDAsIDIyMywgMjMzLCAKLSAgICA5NywgMjA3LCAxMTgsIDIzMywgOTcsIDIwNywgMTEzLCAyMzMsIDk3LCAyMDcsIDE2NiwgMjMzLCA5NywgMjA3LCAxNTgsIAotICAgIDIzMywgOTcsIDIwNywgMTczLCAyMzMsIDk3LCAyMDcsIDE4MywgMjMzLCA5NywgMjA3LCAxOTQsIDIzMywgOTcsIDIwNywgCi0gICAgMTg3LCAyMzMsIDk3LCAyMDcsIDE5MiwgOTAsIDI0NCwgOTQsIDIwNiwgNzYsIDkwLCAyMzcsIDExNSwgMjA2LCA3NiwgOTAsIAotICAgIDIzMSwgMjQ5LCAyMDYsIDc2LCA5MCwgMjM0LCA5NywgMjA2LCA3NiwgMjYsIDIzNywgNjIsIDU2LCAyMDYsIDc2LCAyNiwgCi0gICAgNDcsIDU2LCAyMDYsIDc2LCAyNDYsIDIzOSwgMjQwLCAxNTEsIDYxLCAyNDcsIDQwLCAyMzcsIDEyMCwgNzYsIDYxLCAyNDcsIAotICAgIDQwLCAyMzcsIDEyMCwgMiwgMjM3LCAxMDcsIDI0MCwgMTgxLCA3NiwgNjEsIDI0NywgNDAsIDIzNywgMTIwLCAxNjUsIDI0MCwgCi0gICAgMTE2LCAyNDAsIDE3MCwgNjEsIDI0NywgNDAsIDIzNywgMTIwLCAyLCAyMzcsIDEwNywgMjQwLCAxODEsIDE2NSwgMjQwLCAKLSAgICAxMTYsIDI0MCwgMTcwLCA2MSwgMjQ3LCA0MCwgMjM3LCAxMjAsIDE2NSwgMjAzLCAyNDAsIDE3MCwgMzMsIDIzNywgMjEwLCAKLSAgICA3NiwgOTAsIDE2NywgMjQ2LCAxNjcsIDI0OSwgMjQxLCAyMzEsIDI0NywgOTgsIDIzMywgOTcsIDIwNywgMjQ2LCAxNzksIAotICAgIDIzMywgOTcsIDIwNywgMjM1LCA1MiwgMjMzLCA5NywgMjA3LCAyMzUsIDgwLCA2MSwgOTAsIDIzMSwgMjI1LCA3NiwgMjUwLCAKLSAgICAyNDksIDc2LCAyNDgsIDEyOCwgMjI5LCAyMjYsIDc2LCA5MCwgMzgsIDIzMCwgMTU2LCA5MCwgMTMyLCAyNDksIDI0OSwgCi0gICAgMjM3LCA2OSwgMTI2LCAxLCAzLCA1NywgMTI2LCAxLCA1NywgMTI2LCAxLCAzLCA3NCwgMTI2LCAxLCA3NCwgMTI2LCAxLCAzLCAKLSAgICA2NiwgMTI2LCAxLCA2NiwgMTI2LCAxLCAzLCA3MiwgMTI2LCAxLCA3MiwgMTI2LCAxLCAzLCA3MywgMTI2LCAxLCA3MywgCi0gICAgMTI2LCAxLCAxNzcsIDEyNiwgMSwgMjUyLCAyMDUsIDEyNiwgMSwgMjUzLCA3LCAxMjYsIDEsIDI1MywgMzksIDEyNiwgMSwgCi0gICAgMjUzLCAzNCwgMTI2LCAxLCAyNTMsIDQwLCAxMjYsIDEsIDI1MywgNiwgMTI2LCAxLCAyNTMsIDEwMywgMTI2LCAxLCAyNTMsIAotICAgIDMzLCAxMjYsIDEsIDI1MywgNzYsIDEyNiwgMSwgMjUyLCAyMDQsIDEyNiwgMSwgMjUyLCAyMjYsIDEyNiwgMSwgMjUzLCAyNCwgCi0gICAgMTI2LCAxLCAyNTMsIDcyLCAxMjYsIDEsIDI1MywgMjYsIDEyNiwgMSwgMjUzLCA5NywgMTI2LCAxLCAyNTMsIDUyLCAxMjYsIAotICAgIDEsIDI1MywgNDYsIDEyNiwgMSwgMjUzLCAyNSwgMTI2LCAxLCAyNTMsIDY1LCAxMjYsIDEsIDI1MiwgMjAyLCAxMjYsIDEsIAotICAgIDI1MiwgMjAzLCAxMjYsIDEsIDI1MywgNDQsIDEyNiwgMSwgMjUzLCAxMiwgMTI2LCAxLCAzLCAyNTMsIDE4LCAxMjYsIDEsIAotICAgIDI1MywgMTgsIDEyNiwgMSwgMjUzLCAzMSwgMTI2LCAxLCAyNTMsIDksIDEyNiwgMSwgMjUzLCAyMCwgMTI2LCAxLCA5NiwgCi0gICAgMTI2LCAxLCAyNTMsIDU3LCAxMjYsIDEsIDI1MiwgMjAxLCAxMjYsIDEsIDI1MiwgMjQ4LCAxMjYsIDEsIDI1MiwgMjI3LCAKLSAgICAxMjYsIDEsIDI1MiwgMjQ3LCAxMjYsIDEsIDI1MywgOCwgMTI2LCAxLCAxNTQsIDEyNiwgMSwgMjUyLCAyMTEsIDEyNiwgMSwgCi0gICAgMjEzLCAxMjYsIDEsIDI1MywgNDEsIDEyNiwgMSwgMjUzLCAzMCwgMTI2LCAxLCAyNTIsIDIyMywgMTI2LCAxLCAyNTMsIDU5LCAKLSAgICAxMjYsIDEsIDI1MywgNDgsIDEyNiwgMSwgMjUzLCA4MiwgMTI2LCAxLCAyNTIsIDI1MiwgMTI2LCAxLCAyNTMsIDczLCAxMjYsIAotICAgIDEsIDI1MywgMCwgMTI2LCAxLCAyNTMsIDIxLCAxMjYsIDEsIDI1MywgOTgsIDEyNiwgMSwgMjUzLCA1MCwgMTI2LCAxLCAKLSAgICAxOTgsIDEyNiwgMSwgMjUyLCAyMzksIDEyNiwgMSwgMjUyLCAyMjksIDEyNiwgMSwgMjUzLCAxMywgMTI2LCAxLCAyNTMsIAotICAgIDE0LCAxMjYsIDEsIDMsIDE5MSwgMTI2LCAxLCAxOTEsIDEyNiwgMSwgMywgMjUyLCAyMzMsIDEyNiwgMSwgMjUyLCAyMzMsIAotICAgIDEyNiwgMSwgMywgMjUyLCAyNTEsIDEyNiwgMSwgMjUyLCAyNTEsIDEyNiwgMSwgMjA4LCAxMjYsIDEsIDI1MywgMzcsIDEyNiwgCi0gICAgMSwgMjUzLCAzLCAxMjYsIDEsIDI1MywgMzYsIDEyNiwgMSwgMjUyLCAyNDYsIDEyNiwgMSwgMywgMjUyLCAyMDgsIDEyNiwgCi0gICAgMSwgMjUyLCAyMDgsIDEyNiwgMSwgMjUzLCAyNywgMTI2LCAxLCAyNTIsIDI1MCwgMTI2LCAxLCAyNTMsIDEwLCAxMjYsIDEsIAotICAgIDE5OSwgMTI2LCAxLCAyNTMsIDEzOSwgMTI2LCAxLCAzLCAxNzcsIDEyNiwgMSwgMywgMjUzLCA2LCAzNiwgMjIyLCAyNTIsIAotICAgIDIzNywgMTA3LCAyNDAsIDE4MSwgNzYsIDM2LCAyMjIsIDI1MiwgMjI5LCAxODksIDI0MCwgMTgxLCA3NiwgMjIyLCAyNTIsIAotICAgIDIzNywgMTA3LCAyNDAsIDE4MSwgNzYsIDIyMiwgMjUyLCAyMjksIDE4OSwgMjQwLCAxODEsIDc2LCAxMjYsIDIzMSwgMjI1LCAKLSAgICA3NiwgMTI2LCAyMzcsIDEwNywgMjMxLCAyMjUsIDc2LCAxMjYsIDIzNSwgOTAsIDI0NiwgOTUsIDIyMiwgMjUyLCA0NywgCi0gICAgMjM1LCA2OSwgNDgsIDEsIDMsIDU3LCA0OCwgMSwgNTcsIDQ4LCAxLCAzLCA3NCwgNDgsIDEsIDc0LCA0OCwgMSwgMywgNjYsIAotICAgIDQ4LCAxLCA2NiwgNDgsIDEsIDMsIDcyLCA0OCwgMSwgNzIsIDQ4LCAxLCAzLCA3MywgNDgsIDEsIDczLCA0OCwgMSwgMTc3LCAKLSAgICA0OCwgMSwgMjUyLCAyMDUsIDQ4LCAxLCAyNTMsIDcsIDQ4LCAxLCAyNTMsIDM5LCA0OCwgMSwgMjUzLCAzNCwgNDgsIDEsIAotICAgIDI1MywgNDAsIDQ4LCAxLCAyNTMsIDYsIDQ4LCAxLCAyNTMsIDEwMywgNDgsIDEsIDI1MywgMzMsIDQ4LCAxLCAyNTMsIDc2LCAKLSAgICA0OCwgMSwgMjUyLCAyMDQsIDQ4LCAxLCAyNTIsIDIyNiwgNDgsIDEsIDI1MywgMjQsIDQ4LCAxLCAyNTMsIDcyLCA0OCwgMSwgCi0gICAgMjUzLCAyNiwgNDgsIDEsIDI1MywgOTcsIDQ4LCAxLCAyNTMsIDUyLCA0OCwgMSwgMjUzLCA0NiwgNDgsIDEsIDI1MywgMjUsIAotICAgIDQ4LCAxLCAyNTMsIDY1LCA0OCwgMSwgMjUyLCAyMDIsIDQ4LCAxLCAyNTIsIDIwMywgNDgsIDEsIDI1MywgNDQsIDQ4LCAxLCAKLSAgICAyNTMsIDEyLCA0OCwgMSwgMywgMjUzLCAxOCwgNDgsIDEsIDI1MywgMTgsIDQ4LCAxLCAyNTMsIDMxLCA0OCwgMSwgMjUzLCAKLSAgICA5LCA0OCwgMSwgMjUzLCAyMCwgNDgsIDEsIDk2LCA0OCwgMSwgMjUzLCA1NywgNDgsIDEsIDI1MiwgMjAxLCA0OCwgMSwgCi0gICAgMjUyLCAyNDgsIDQ4LCAxLCAyNTIsIDIyNywgNDgsIDEsIDI1MiwgMjQ3LCA0OCwgMSwgMjUzLCA4LCA0OCwgMSwgMTU0LCAKLSAgICA0OCwgMSwgMjUyLCAyMTEsIDQ4LCAxLCAyMTMsIDQ4LCAxLCAyNTMsIDQxLCA0OCwgMSwgMjUzLCAzMCwgNDgsIDEsIDI1MiwgCi0gICAgMjIzLCA0OCwgMSwgMjUzLCA1OSwgNDgsIDEsIDI1MywgNDgsIDQ4LCAxLCAyNTMsIDgyLCA0OCwgMSwgMjUyLCAyNTIsIDQ4LCAKLSAgICAxLCAyNTMsIDczLCA0OCwgMSwgMjUzLCAwLCA0OCwgMSwgMjUzLCAyMSwgNDgsIDEsIDI1MywgOTgsIDQ4LCAxLCAyNTMsIAotICAgIDUwLCA0OCwgMSwgMTk4LCA0OCwgMSwgMjUyLCAyMzksIDQ4LCAxLCAyNTIsIDIyOSwgNDgsIDEsIDI1MywgMTMsIDQ4LCAxLCAKLSAgICAyNTMsIDE0LCA0OCwgMSwgMywgMTkxLCA0OCwgMSwgMTkxLCA0OCwgMSwgMywgMjUyLCAyMzMsIDQ4LCAxLCAyNTIsIDIzMywgCi0gICAgNDgsIDEsIDMsIDI1MiwgMjUxLCA0OCwgMSwgMjUyLCAyNTEsIDQ4LCAxLCAyMDgsIDQ4LCAxLCAyNTMsIDM3LCA0OCwgMSwgCi0gICAgMjUzLCAzLCA0OCwgMSwgMjUzLCAzNiwgNDgsIDEsIDI1MiwgMjQ2LCA0OCwgMSwgMywgMjUyLCAyMDgsIDQ4LCAxLCAyNTIsIAotICAgIDIwOCwgNDgsIDEsIDI1MywgMjcsIDQ4LCAxLCAyNTIsIDI1MCwgNDgsIDEsIDI1MywgMTAsIDQ4LCAxLCAxOTksIDQ4LCAxLCAKLSAgICAyNTMsIDEzOSwgNDgsIDEsIDMsIDE3NywgNDgsIDEsIDMsIDI1MywgNiwgNDgsIDEsIDI1MiwgMjQzLCA0OCwgMSwgMjUzLCAKLSAgICAxMzgsIDQ4LCAxLCAyNTMsIDk1LCA0OCwgMSwgMjUzLCAxMDgsIDQ4LCAyMzcsIDQ0LCAyNDYsIDE2NCwgMjIyLCAyNTIsIAotICAgIDIzMiwgMzksIDI0MCwgMTgxLCA3NiwgNDgsIDIzMSwgMjI1LCA3NiwgNDgsIDIzNywgMTA3LCAyMzEsIDIyNSwgNzYsIDQ4LCAKLSAgICAyMzUsIDkwLCAyNDQsIDY0LCAxNzYsIDEsIDI1NCwgMTg1LCAxNzYsIDEsIDI1NCwgMTg3LCAxNzYsIDEsIDE4NSwgMTc2LCAKLSAgICAxLCAyNTQsIDE5MSwgMTc2LCAxLCAyMjIsIDIyMiwgMTc2LCAxLCAyNTQsIDE4MywgMTc2LCAxLCAxOTksIDE3NiwgMSwgCi0gICAgMTQ5LCAxNzYsIDEsIDIxNCwgMTc2LCAxLCAyNTQsIDE4NiwgMTc2LCAxLCAyMTIsIDE3NiwgMSwgMjU0LCAxOTIsIDE3NiwgCi0gICAgMSwgMjU0LCAxOTYsIDE3NiwgMSwgMjU0LCAxODQsIDE3NiwgMSwgMjU0LCAxNzgsIDE3NiwgMSwgMjUzLCAyMTEsIDE3NiwgCi0gICAgMSwgMjUzLCAxNjAsIDE3NiwgMSwgMTQ2LCAxNzYsIDEsIDI1NCwgMTkzLCAxNzYsIDEsIDI1NCwgMTk0LCAxNzYsIDEsIAotICAgIDE5MywgMTc2LCAxLCA1NywgMTc2LCAxLCA3MywgMTc2LCAxLCA3MiwgMTc2LCAxLCAyNTMsIDE0NCwgMTc2LCAxLCAyNTIsIAotICAgIDIyMSwgMTc2LCAxLCAyNTMsIDE3NiwgMTc2LCAxLCAyNTIsIDIyMiwgMTc2LCAxLCAyNTMsIDExOSwgMTc2LCAxLCAyNTMsIAotICAgIDUsIDE3NiwgMSwgMjUyLCAyMzIsIDE3NiwgMSwgMjQ3LCA5LCAxNzYsIDEsIDI0NywgMCwgMTc2LCAxLCAyNTMsIDk5LCAKLSAgICAxNzYsIDEsIDc0LCAxNzYsIDEsIDY2LCAxNzYsIDEsIDI1MywgMjMzLCAxNzYsIDEsIDE5NiwgMTc2LCAxLCAyNTMsIDY5LCAKLSAgICAxNzYsIDEsIDI1NCwgNjEsIDE3NiwgMSwgMjUzLCAyMzAsIDI2LCAxLCAyMzUsIDc3LCAyNiwgMSwgMjI4LCAxOTUsIDI2LCAKLSAgICAxLCAyMjgsIDE5OSwgMjYsIDEsIDIzNywgMTM5LCAyNiwgMSwgMjI4LCAyMDEsIDI2LCAxLCAyMjgsIDIwMiwgMjYsIDEsIAotICAgIDIzNSwgODEsIDI2LCAxLCAyMjgsIDIwOSwgMjYsIDEsIDIzNywgMTQyLCAyNiwgMSwgMjI3LCAxOTcsIDI2LCAxLCAyMjgsIAotICAgIDIwNCwgMjYsIDEsIDIyOCwgMjA1LCAyNiwgMSwgMjI5LCAxODgsIDI2LCAxLCAyMjcsIDE0MCwgMjYsIDEsIDIyNywgMTM5LCAKLSAgICAyNiwgMSwgMjI4LCAxOTMsIDI2LCAxLCAyMzcsIDEzNywgMjYsIDEsIDIzNywgMTQxLCAyNiwgMSwgMjI5LCAxOTMsIDI2LCAKLSAgICAxLCAyMjksIDE4MCwgMjYsIDEsIDI0MCwgMjEzLCAyNiwgMSwgMjMwLCAxNTksIDI2LCAxLCAyMzcsIDEzNCwgMjYsIDEsIAotICAgIDIzNywgMTMwLCAyNiwgMSwgMjI5LCAxOTEsIDI2LCAxLCAyMzMsIDEyOCwgMjYsIDEsIDIzMywgMTMxLCAyNiwgMSwgMjMzLCAKLSAgICAxMzgsIDI2LCAxLCAyMzMsIDEzMywgMjYsIDEsIDIzNywgMTMzLCAyNiwgMSwgNTcsIDI2LCAxLCAyNTMsIDQsIDI2LCAxLCAKLSAgICAxOTEsIDI2LCAxLCAyNDcsIDYxLCAyNiwgMSwgMjUzLCAxNzcsIDI2LCAxLCA3MiwgMjYsIDEsIDI0NywgMjMyLCAyNiwgMSwgCi0gICAgMjUzLCA5NiwgMjYsIDEsIDczLCAyNiwgMSwgMjUyLCAyMDgsIDI2LCAxLCAyNDcsIDIyMywgMjYsIDEsIDI1MywgMTUsIDI2LCAKLSAgICAxLCAyNTIsIDI1MSwgMjYsIDEsIDY2LCAyNiwgMSwgMjQ3LCAyMjcsIDI2LCAxLCAyNTIsIDI1MCwgMjYsIDEsIDI1MywgMjcsIAotICAgIDI2LCAxLCAyNTIsIDIzMywgMjYsIDEsIDI1MywgMTAwLCAyNiwgMSwgMjUzLCAyOCwgMjYsIDEsIDc0LCAyNiwgMjM1LCA5MiwgCi0gICAgMjYsIDEsIDIyOSwgMjE5LCAyNiwgMSwgMjI3LCAxOTYsIDI2LCAxLCAyMjksIDIwNCwgMjYsIDEsIDIyNywgMTQ0LCAyNiwgCi0gICAgMSwgMjIyLCAyNDEsIDI2LCAxLCAyMjcsIDIxMCwgMjYsIDEsIDIyMiwgMjUzLCAyNiwgMSwgMjI3LCAxNTEsIDI2LCAxLCAKLSAgICAyMjIsIDI0MiwgMjYsIDEsIDIyOCwgMjAwLCAyNiwgMSwgMjI5LCAyMDAsIDI2LCAxLCAyMjcsIDE0MywgMjYsIDEsIDIyNywgCi0gICAgMTM3LCAyNiwgMSwgMjI3LCAyMDgsIDI2LCAxLCAyMjcsIDIwOSwgMjYsIDEsIDIyMiwgMjM5LCAyNiwgMSwgMjIyLCAyNDAsIAotICAgIDI2LCAxLCAyMjgsIDIxNSwgMjYsIDEsIDIyNywgMTQ5LCAyNiwgMSwgMjI3LCAxMzgsIDI2LCAxLCAyMjIsIDIzMSwgMjYsIAotICAgIDEsIDIyOCwgMjA3LCAyNiwgMSwgMjI5LCAyMTYsIDI2LCAxLCAyMjgsIDIwOCwgMjYsIDEsIDIyOSwgMTkwLCAyNiwgMSwgCi0gICAgMjI5LCAyMTUsIDI2LCAxLCAyMzMsIDE3NCwgMjYsIDEsIDIyOSwgMTkyLCAyNiwgMSwgMjMyLCAxMywgMjYsIDEsIDIyNywgCi0gICAgMTU1LCAyNiwgMSwgMjIyLCAyNTQsIDI2LCAxLCAyMjMsIDU2LCAyNiwgMSwgMjI5LCAyMTgsIDI2LCAxLCAyMjgsIDIxMCwgCi0gICAgMjYsIDEsIDIzOCwgODMsIDI2LCAxLCAyMzUsIDIzMywgMjYsIDEsIDI0MiwgMzEsIDI2LCAxLCAyMzUsIDIzNCwgMjYsIDEsIAotICAgIDIzOCwgODQsIDI2LCAxLCAyNDIsIDMzLCAyNiwgMSwgMjM3LCAyMjgsIDI2LCAxLCAyMzUsIDI0OSwgOTAsIDIzMCwgMTI5LCAKLSAgICAyMzYsIDE0MiwgNzYsIDkwLCAyMzAsIDEyOSwgMjM1LCAzNywgNzYsIDkwLCAyMzAsIDEyOSwgMTY4LCA3NiwgOTAsIDIzMCwgCi0gICAgMTI5LCAxMzUsIDc2LCA5MCwgMjMwLCAxMjksIDE1MiwgNzYsIDkwLCAyMzAsIDEyOSwgMjQ2LCAxNjAsIDc2LCA5MCwgMjMwLCAKLSAgICAxMjksIDI1MiwgMjI4LCA3NiwgOTAsIDIzMCwgMTI5LCAyMzcsIDQ0LCA3NiwgOTAsIDIzMCwgMTI5LCAyMzcsIDU5LCA3NiwgCi0gICAgOTAsIDIzMCwgMTI5LCAyNDAsIDIyNSwgNzYsIDkwLCAyMzAsIDEyOSwgMjM3LCAxNDUsIDc2LCA5MCwgMjMwLCAxMjksIAotICAgIDI0MCwgMjM5LCA3NiwgOTAsIDIzMCwgMTI5LCAyMzcsIDE4MiwgNzYsIDkwLCAyMzAsIDEyOSwgMjM5LCA3LCA3NiwgOTAsIAotICAgIDIzMCwgMTI5LCAyNDEsIDEyNiwgNzYsIDkwLCAyMzAsIDEyOSwgMjUzLCAyNDUsIDc2LCAxNzYsIDEsIDI1MywgNDgsIDE3NiwgCi0gICAgMSwgMjUzLCA3MiwgMTc2LCAxLCAyNTMsIDEwNCwgMTc2LCAxLCAyNTMsIDQwLCAxNzYsIDEsIDI1MiwgMjMxLCAxNzYsIDEsIAotICAgIDI0OSwgMjI4LCAxNzYsIDEsIDI1MiwgMjIwLCAxNzYsIDEsIDI0OCwgMTI0LCAxNzYsIDEsIDI1MywgMTQ5LCAxNzYsIDEsIAotICAgIDI0OCwgMjM2LCAxNzYsIDEsIDI1MCwgMTE5LCAxNzYsIDEsIDI0OCwgMTg4LCAxNzYsIDEsIDI1MywgNzgsIDE3NiwgMSwgCi0gICAgMjUxLCA1NSwgMTc2LCAxLCAyNDIsIDQ4LCAxNzYsIDEsIDI0MiwgNjcsIDE3NiwgMSwgMjUzLCAxNDAsIDE3NiwgMSwgMjUzLCAKLSAgICAxMjgsIDE3NiwgMSwgMjUxLCA5OCwgMTc2LCAxLCAyNDQsIDEwLCAxNzYsIDM1LCAxLCAyNTQsIDE4NywgMTc2LCAzNSwgMSwgCi0gICAgMjU0LCAxODMsIDE3NiwgMzUsIDEsIDI1NCwgMTg2LCAxNzYsIDM1LCAxLCAyMTIsIDksIDE5NSwgMjU0LCAxODMsIDksIAotICAgIDE5NSwgMjU0LCAxNzAsIDksIDE5NSwgMjU0LCAxNzIsIDksIDE5NSwgMjQ5LCAxMzYsIDksIDE5NSwgMjU0LCAxMCwgOSwgCi0gICAgMTk1LCAyNTAsIDEwOSwgOSwgMTk1LCAyNTAsIDEwNiwgOSwgMTk1LCAyNTMsIDIyNiwgOSwgMTk1LCAyNDMsIDI1MywgOSwgCi0gICAgMTk1LCAyNDUsIDIzNCwgOSwgMTk1LCAyNTAsIDEwNywgOSwgMTk1LCAyNDMsIDI1NCwgOSwgMTk1LCAyNDMsIDIzNCwgOSwgCi0gICAgMTk1LCAyNTAsIDEwOCwgOSwgMTk1LCAyNDMsIDI1NSwgOSwgMTk1LCAxOTksIDksIDE5NSwgMjEyLCA5LCAxOTUsIDE5MywgCi0gICAgOSwgMTk1LCAyNTQsIDE4NywgOSwgMTk1LCAyNTQsIDE1MCwgOSwgMTk1LCAyMjIsIDIyMiwgOSwgMTk1LCAyNTMsIDIyOCwgCi0gICAgOSwgMTk1LCAyNTMsIDIyNCwgOSwgMTk1LCAyNTQsIDE1NCwgOSwgMTk1LCAyNTEsIDI0NywgOSwgMTk1LCAyNTMsIDE5NSwgCi0gICAgOSwgMTk1LCAyNTQsIDE0NiwgOSwgMTk1LCAyNTQsIDEyNywgOSwgMTk1LCAyNTQsIDEzOSwgOSwgMTk1LCAyNTQsIDE2MCwgCi0gICAgOSwgMTk1LCAyNTIsIDIsIDksIDE5NSwgMjUxLCAyNDYsIDksIDE5NSwgMjQzLCAyNTIsIDksIDE5NSwgMjM5LCAzNiwgOSwgCi0gICAgMTk1LCAyNTQsIDEzMCwgOSwgMTk1LCAyNTQsIDE5NiwgNDgsIDEsIDMsIDI1MywgMzQsIDQ4LCAxLCAzLCAyNTMsIDI0LCAKLSAgICA0OCwgMSwgMywgMjUzLCAyNiwgNDgsIDEsIDMsIDk2LCA0OCwgMSwgMywgMjUyLCAyMjcsIDQ4LCAxLCAzLCAxNTQsIDQ4LCAKLSAgICAxLCAzLCAyNTMsIDQxLCA0OCwgMSwgMywgMjUzLCA1OSwgNDgsIDEsIDMsIDI1MiwgMjUyLCA0OCwgMSwgMywgMjUzLCAyMSwgCi0gICAgNDgsIDEsIDMsIDI1MiwgMjI5LCA0OCwgMSwgMywgMjA4LCA0OCwgMSwgMywgMjUzLCAzNywgNDgsIDEsIDMsIDI1MywgMywgCi0gICAgNDgsIDEsIDMsIDI1MywgMzYsIDQ4LCAxLCAzLCAyNTIsIDI0NiwgOTMsIDI2LCAyMzUsIDc3LCA5MywgMjYsIDIzNywgMTM5LCAKLSAgICA5MywgMjYsIDIzNSwgODEsIDkzLCAyNiwgMjM3LCAxNDIsIDkzLCAyNiwgMjM3LCAxMzcsIDkzLCAyNiwgMjM3LCAxNDEsIAotICAgIDkzLCAyNiwgMjQwLCAyMTMsIDkzLCAyNiwgMjM3LCAxMzQsIDkzLCAyNiwgMjM3LCAxMzAsIDkzLCAyNiwgMjMzLCAxMjgsIAotICAgIDkzLCAyNiwgMjMzLCAxMzEsIDkzLCAyNiwgMjMzLCAxMzgsIDkzLCAyNiwgMjMzLCAxMzMsIDkzLCAyNiwgMjM3LCAxMzMsIAotICAgIDkzLCAyNiwgMjM4LCAxNCwgNTcsIDkzLCAyNiwgMjQxLCAyMDIsIDU3LCA5MywgMjYsIDIzOCwgNzUsIDU3LCA5MywgMjYsIAotICAgIDI0MSwgMjIzLCA1NywgOTMsIDI2LCAyNDEsIDE5MywgNTcsIDkzLCAyNiwgMjQxLCAyMTIsIDU3LCA5MywgMjYsIDI0OCwgCi0gICAgMTYzLCA1NywgOTMsIDI2LCAyNDEsIDQzLCA1NywgOTMsIDI2LCAyNDEsIDM0LCA1NywgOTMsIDI2LCAyMzUsIDE1NywgNTcsIAotICAgIDkzLCAyNiwgMjM1LCAxODMsIDU3LCA5MywgMjYsIDIzNSwgMjI0LCA1NywgOTMsIDI2LCAyMzUsIDE5OSwgNTcsIDkzLCAyNiwgCi0gICAgMjQxLCAxNTcsIDU3LCA5MywgMjYsIDI0MSwgMzQsIDY2LCA5MywgMjM3LCAxNTksIDExNiwgMjM5LCAxNzEsIDkzLCAyMzcsIAotICAgIDE1OSwgMTE2LCAxMzAsIDI1MywgNTksIDkzLCAxMzMsIDExOCwgOTMsIDEzMywgMTEzLCA5MywgMTMzLCAxNjYsIDkzLCAKLSAgICAxMzMsIDE1OCwgOTMsIDEzMywgMTczLCA5MywgMTMzLCAxODMsIDkzLCAxMzMsIDE5NCwgOTMsIDEzMywgMTg3LCA5MywgCi0gICAgMTMzLCAxOTIsIDkzLCAxMzMsIDI0NiwgMTc5LCA5MywgMTMzLCAyNDAsIDIxMSwgOTMsIDEzMywgMjQwLCAyMDcsIDkzLCAKLSAgICAxMzMsIDIzNywgMTY4LCA5MywgMTMzLCAyNDIsIDI1LCA5MywgMTMzLCAyMzgsIDI0LCA5MywgMTMzLCAyMzcsIDk5LCA5MywgCi0gICAgMTMzLCAyNDcsIDU0LCA5MywgMTMzLCAyMzgsIDY2LCA5MywgMTMzLCAyNDEsIDE1MSwgOTMsIDEzMywgMjMzLCAyMzgsIDkzLCAKLSAgICAxMzMsIDI0MSwgMTk4LCA5MywgMTMzLCAyMzMsIDI0MCwgOTMsIDEzMywgMjMwLCAxODMsIDkzLCAxMzMsIDIyNSwgMTA4LCAKLSAgICA5MywgMTMzLCAyMzgsIDE2LCA5MywgMTMzLCAyMzEsIDEzMywgOTMsIDEzMywgMjQyLCAyMzEsIDkzLCAxMzMsIDIzOCwgNjcsIAotICAgIDkzLCAxMzMsIDIzMCwgMTk3LCA5MywgMTMzLCAyMjksIDE5OCwgOTMsIDEzMywgMjMyLCA0MiwgOTMsIDEzMywgMjMyLCAxNCwgCi0gICAgOTMsIDEzMywgMjMyLCAxODYsIDkzLCAxMzMsIDI0MCwgMTQ4LCA5MywgMTMzLCAyNDEsIDIzMywgOTMsIDEzMywgMjM4LCAKLSAgICA0MCwgMjI5LCAyMDgsIDUzLCAzMywgNjUsIDIzNywgOTcsIDExOCwgMzMsIDY1LCAyMzcsIDk3LCAxMTMsIDMzLCA2NSwgCi0gICAgMjM3LCA5NywgMTY2LCAzMywgNjUsIDIzNywgOTcsIDE1OCwgMzMsIDY1LCAyMzcsIDk3LCAxNzMsIDMzLCA2NSwgMjM3LCAKLSAgICA5NywgMTgzLCAzMywgNjUsIDIzNywgOTcsIDE5NCwgMzMsIDY1LCAyMzcsIDk3LCAxODcsIDMzLCA2NSwgMjM3LCA5NywgCi0gICAgMTkyLCAzMywgNjUsIDIzNSwgODAsIDMzLCA2NSwgMjM3LCAxMDYsIDExOCwgMzMsIDY1LCAyMzcsIDEwNiwgMTEzLCAzMywgCi0gICAgNjUsIDIzNywgMTA2LCAxNjYsIDMzLCA2NSwgMjM3LCAxMDYsIDE1OCwgMzMsIDY1LCAyMzcsIDEwNiwgMTczLCAzMywgMjYsIAotICAgIDIzNSwgNzcsIDMzLCAyNiwgMjM3LCAxMzksIDMzLCAyNiwgMjM1LCA4MSwgMzMsIDI2LCAyMzcsIDE0MiwgMzMsIDI2LCAKLSAgICAyMzcsIDEzNywgMzMsIDI2LCAyMzcsIDE0MSwgMzMsIDI2LCAyNDAsIDIxMywgMzMsIDI2LCAyMzcsIDEzNCwgMzMsIDI2LCAKLSAgICAyMzcsIDEzMCwgMzMsIDI2LCAyMzMsIDEyOCwgMzMsIDI2LCAyMzMsIDEzMSwgMzMsIDI2LCAyMzMsIDEzOCwgMzMsIDI2LCAKLSAgICAyMzMsIDEzMywgMzMsIDI2LCAyMzcsIDEzMywgMzMsIDI2LCAyMzgsIDE0LCA1NywgMzMsIDI2LCAyNDEsIDIwMiwgNTcsIAotICAgIDMzLCAyNiwgMjM4LCA3NSwgNTcsIDMzLCAyNiwgMjQxLCAyMjMsIDU3LCAzMywgMjYsIDI0MSwgMTkzLCA1NywgMzMsIDI2LCAKLSAgICAyNDEsIDIxMiwgNTcsIDMzLCAyNiwgMjQ4LCAxNjMsIDU3LCAzMywgMjYsIDI0MSwgNDMsIDU3LCAzMywgMjYsIDI0MSwgMzQsIAotICAgIDU3LCAzMywgMjYsIDIzNSwgMTU3LCA1NywgMzMsIDI2LCAyMzUsIDE4MywgNTcsIDMzLCAyNiwgMjM1LCAyMjQsIDU3LCAzMywgCi0gICAgMjYsIDIzNSwgMTk5LCA1NywgMzMsIDI2LCAyNDEsIDE1NywgNTcsIDMzLCAyMzcsIDE1OSwgMTE2LCAyMzYsIDIzLCAzMywgCi0gICAgMjM3LCAxNTksIDExNiwgMjM5LCA1MywgMzMsIDI2LCAyNDEsIDQzLCA2NiwgMjM3LCAxNTksIDIzMywgMjQyLCA5OCwgMzMsIAotICAgIDEzMywgMTE4LCAzMywgMTMzLCAxMTMsIDMzLCAxMzMsIDE2NiwgMzMsIDEzMywgMTU4LCAzMywgMTMzLCAxNzMsIDMzLCAKLSAgICAxMzMsIDE4MywgMzMsIDEzMywgMTk0LCAzMywgMTMzLCAxODcsIDMzLCAxMzMsIDE5MiwgMzMsIDEzMywgMjQ2LCAxNzksIAotICAgIDMzLCAxMzMsIDI0MCwgMjExLCAzMywgMTMzLCAyNDAsIDIwNywgMzMsIDEzMywgMjM3LCAxNjgsIDMzLCAxMzMsIDI0MiwgCi0gICAgMjUsIDMzLCAxMzMsIDIzOCwgMjQsIDMzLCAxMzMsIDIzNywgOTksIDMzLCAxMzMsIDI0NywgNTQsIDMzLCAxMzMsIDIzOCwgCi0gICAgNjYsIDMzLCAxMzMsIDI0MSwgMTUxLCAzMywgMTMzLCAyMzMsIDIzOCwgMzMsIDEzMywgMjQxLCAxOTgsIDMzLCAxMzMsIAotICAgIDIzMywgMjQwLCAzMywgMTMzLCAyMzAsIDE4MywgMzMsIDEzMywgMjI1LCAxMDgsIDMzLCAxMzMsIDIzOCwgMTYsIDMzLCAKLSAgICAxMzMsIDIzNiwgMjE0LCAzMywgMTMzLCAyNDQsIDExNiwgMzMsIDEzMywgMjM2LCA3NiwgMzMsIDEzMywgMjMzLCA0NCwgMzMsIAotICAgIDEzMywgMjMxLCA2NywgMzMsIDEzMywgMjM5LCAyMDMsIDMzLCAxMzMsIDIzMCwgMjI4LCAzMywgMTMzLCAyNDQsIDEzLCAzMywgCi0gICAgMTMzLCAyNDAsIDE0OCwgMzMsIDEzMywgMjQzLCAyMCwgMzMsIDEzMywgMjM0LCAzNywgMzMsIDEzMywgMjQzLCAxNzcsIDMzLCAKLSAgICAxMzMsIDIzNSwgMTExLCAzMywgMTMzLCAyNTAsIDIzMiwgMzMsIDEzMywgMjQwLCAxMzIsIDMzLCAxMzMsIDIzNywgNDEsIAotICAgIDMzLCAxMzMsIDIzMiwgMjI5LCAzMywgMTMzLCAyMzMsIDEyLCAzMywgMTMzLCAyMzgsIDY3LCAzMywgMTMzLCAyMzAsIDE5NywgCi0gICAgMzMsIDEzMywgMjI5LCAxOTgsIDMzLCAxMzMsIDIzMiwgNDIsIDMzLCAxMzMsIDIzMiwgMTQsIDMzLCAxMzMsIDIzOSwgMTQzLCAKLSAgICAzMywgNjUsIDIzNywgMTA2LCAxODMsIDMzLCA2NSwgMjM3LCAxMDYsIDE5NCwgMzMsIDY1LCAyMzcsIDEwNiwgMTg3LCAzMywgCi0gICAgNjUsIDIzNywgMTA2LCAxOTIsIDMzLCA2NSwgMjM3LCAyMDMsIDMzLCA2NSwgMjQwLCAxODQsIDExOCwgMzMsIDY1LCAyNDAsIAotICAgIDE4NCwgMTEzLCAzMywgNjUsIDI0MCwgMTg0LCAxNjYsIDMzLCA2NSwgMjQwLCAxODQsIDE1OCwgMzMsIDY1LCAyNDAsIDE4NCwgCi0gICAgMTczLCAzMywgNjUsIDI0MCwgMTg0LCAxODMsIDMzLCA2NSwgMjQwLCAxODQsIDE5NCwgMzMsIDY1LCAyNDAsIDE4NCwgMTg3LCAKLSAgICAzMywgNjUsIDI0MCwgMTg0LCAxOTIsIDMzLCA2NSwgMjM3LCAxMDAsIDkwLCAxNjcsIDE0LCAzMiwgMjM0LCAxMzIsIDkwLCAKLSAgICAxNjcsIDE0LCAzMiwgMjMyLCAxODUsIDkwLCAxNjcsIDE0LCAzMiwgMjM5LCA5OCwgOTAsIDE2NywgMTQsIDMyLCAyMzgsIAotICAgIDk5LCA5MCwgMTY3LCAxNCwgMzIsIDI1MCwgMjUyLCA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMzYsIDkwLCAxNjcsIDE0LCAzMiwgCi0gICAgMjQ0LCAzNSwgOTAsIDE2NywgMTQsIDMyLCAyMzUsIDI1NSwgOTAsIDE2NywgMTQsIDMyLCAyMzEsIDEzOCwgOTAsIDE2NywgCi0gICAgMTQsIDMyLCAyMzQsIDE3NCwgOTAsIDE2NywgMTQsIDMyLCAyMzIsIDIzNSwgOTAsIDE2NywgMTQsIDMyLCAyMzIsIDEwOCwgCi0gICAgMzcsIDI1MywgMjI0LCAzNywgMjQ5LCAyMzEsIDM3LCAyNTQsIDUyLCAyMzYsIDEzNSwgMjMyLCAyMjAsIDUzLCAzMywgNDgsIAotICAgIDU3LCAzMywgNDgsIDc0LCAzMywgNDgsIDY2LCAzMywgNDgsIDcyLCAzMywgNDgsIDczLCAzMywgNDgsIDE3NywgMzMsIDQ4LCAKLSAgICAyNTMsIDcsIDMzLCA0OCwgMjUzLCAzNCwgMzMsIDQ4LCAyNTMsIDYsIDMzLCA0OCwgMjUzLCAzMywgMzMsIDQ4LCAyNTIsIAotICAgIDIwNCwgMzMsIDQ4LCAyNTMsIDI0LCAzMywgNDgsIDI1MywgMjYsIDMzLCA0OCwgMjUzLCA1MiwgMzMsIDQ4LCAyNTMsIDI1LCAKLSAgICAzMywgNDgsIDI1MiwgMjAyLCAzMywgNDgsIDI1MywgNDQsIDMzLCA0OCwgMjUzLCAxOCwgMzMsIDQ4LCAyNTMsIDksIDMzLCAKLSAgICA0OCwgOTYsIDMzLCA0OCwgMjUyLCAyMDEsIDMzLCA0OCwgMjUyLCAyNDgsIDMzLCA0OCwgMjUyLCAyMjcsIDMzLCA0OCwgCi0gICAgMjUyLCAyNDcsIDMzLCA0OCwgMjUzLCA4LCAzMywgNDgsIDE1NCwgMzMsIDQ4LCAyNTMsIDQxLCAzMywgNDgsIDI1MywgNTksIAotICAgIDMzLCA0OCwgMjUyLCAyNTIsIDMzLCA0OCwgMjUzLCAyMSwgMzMsIDQ4LCAxOTgsIDMzLCA0OCwgMjUyLCAyMzksIDMzLCA0OCwgCi0gICAgMjUyLCAyMjksIDMzLCA0OCwgMjUzLCAxMywgMzMsIDQ4LCAyNTMsIDE0LCAzMywgNDgsIDE5MSwgMzMsIDQ4LCAyNTIsIAotICAgIDIzMywgMzMsIDQ4LCAyNTIsIDI1MSwgMzMsIDQ4LCAyMDgsIDMzLCA0OCwgMjUzLCAzNywgMzMsIDQ4LCAyNTMsIDMsIDMzLCAKLSAgICA0OCwgMjUzLCAzNiwgMzMsIDQ4LCAyNTIsIDI0NiwgMzMsIDQ4LCAyNTIsIDIwOCwgMzMsIDQ4LCAyNTMsIDI3LCAzMywgNDgsIAotICAgIDI1MiwgMjUwLCAzMywgNDgsIDI1MywgMTAsIDM3LCAyMzUsIDI0OCwgMzcsIDIzNSwgMjUzLCAzNywgMjM4LCA5NiwgMzcsIAotICAgIDI0MiwgNDEsIDM3LCAyMzYsIDExMiwgMzcsIDI0NCwgMTEsIDM3LCAyNTIsIDU1LCAzNywgMjMyLCAxODEsIDM3LCAyMzgsIAotICAgIDE5NiwgMzcsIDI0NSwgNTQsIDM3LCAyNDUsIDU1LCAzNywgMjM5LCA1NSwgMzcsIDIzNCwgMTM2LCAzNywgMjM0LCAxMzcsIAotICAgIDM3LCAyMzgsIDIzNCwgMzcsIDIzOCwgMjMzLCAzNywgMjQzLCAxNDksIDM3LCAyMzgsIDI0OCwgMzcsIDIzNiwgMTI3LCAzNywgCi0gICAgMjM0LCAxMTIsIDM3LCAyNDQsIDYwLCAzNywgMjMwLCA3MywgMzcsIDIyOSwgMzQsIDM3LCAyMzEsIDkzLCAzNywgMjM2LCAKLSAgICA5OSwgMzcsIDIzMSwgNzcsIDM3LCAyMzEsIDk1LCAzNywgMjM0LCAxNDIsIDM3LCAyMzksIDYwLCAzNywgMjM2LCAxMjQsIAotICAgIDM3LCAyMzksIDczLCAzNywgMjM0LCAyMTIsIDM3LCAyMzMsIDE3LCAzNywgMjM0LCAyMjMsIDM3LCAyMzksIDI0MSwgMzcsIAotICAgIDIzOSwgMjQyLCAzNywgMjM4LCAxNjUsIDM3LCAyNDMsIDU5LCAzNywgMjQzLCA3OSwgMzcsIDI1MiwgMjcsIDM3LCAyNDQsIAotICAgIDE2NiwgMzcsIDIzOSwgMTU2LCAzNywgMjM5LCA0LCAzNywgMjMyLCAyMzcsIDM3LCAyMzksIDE3OSwgMzcsIDIzNCwgMTEsIAotICAgIDM3LCAyMzEsIDExOSwgMzcsIDIzNiwgMTg3LCAzNywgMjQ1LCA3NSwgMzcsIDI0MiwgMjA4LCAzNywgMjMyLCAyMDQsIDM3LCAKLSAgICAyMzYsIDEwNywgMzcsIDIzMiwgOTAsIDM3LCAyMzksIDI5LCAzNywgMjMxLCA3OCwgMzcsIDI0NSwgNjYsIDM3LCAyMzYsIAotICAgIDE4NSwgMzcsIDIzNiwgMTA1LCAzNywgMjM5LCAxODksIDM3LCAyMzksIDE4NiwgMzcsIDIzOCwgMTE3LCAzNywgMjM2LCAKLSAgICAxOTAsIDM3LCAyMzYsIDE0LCAzNywgMjQ4LCA2NCwgMzcsIDIzOSwgMjAyLCAzNywgMjM5LCAyNiwgMzcsIDI0MywgMjMyLCAKLSAgICAzNywgMjM0LCAxNDcsIDM3LCAyMzksIDk0LCAzNywgMjM5LCA5MywgMzcsIDIzNiwgMTQ4LCAzNywgMjM0LCAxNDksIDM3LCAKLSAgICAyMzQsIDE2MSwgMzcsIDI0NCwgMTQ4LCAzNywgMjMxLCAxMDIsIDM3LCAyNDEsIDUwLCAzNywgMjM0LCAxNTgsIDM3LCAyMzQsIAotICAgIDE1NywgMzcsIDI0MCwgOTEsIDM3LCAyNDAsIDkyLCAzNywgMjQ2LCA5OSwgMzcsIDIzNCwgMjA5LCAzNywgMjQ1LCAxMTcsIAotICAgIDM3LCAyMzksIDIzMCwgMzcsIDIzNCwgMjExLCAzNywgMjQ1LCAxMTQsIDM3LCAyMzMsIDEzLCAzNywgMjQwLCA4MywgOTAsIAotICAgIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgMjQwLCAxMjYsIDkwLCAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDExOCwgOTAsIDE2NywgCi0gICAgMTQsIDMyLCAyNDYsIDE4MCwgMTEzLCA5MCwgMTY3LCAxNCwgMzIsIDI0NiwgMTgwLCAxNjYsIDkwLCAxNjcsIDE0LCAzMiwgCi0gICAgMjQ2LCAxODAsIDE1OCwgOTAsIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgMTczLCA5MCwgMTY3LCAxNCwgMzIsIDI0NiwgMTgwLCAKLSAgICAxODMsIDkwLCAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDE5NCwgOTAsIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgMTg3LCA5MCwgCi0gICAgMTY3LCAxNCwgMzIsIDI0NiwgMTgwLCAxOTIsIDkwLCAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDI0NiwgMTc5LCA5MCwgMTY3LCAKLSAgICAxNCwgMzIsIDI0NiwgMTgwLCAyMzUsIDY4LCA5MCwgMTY3LCAxNCwgMzIsIDI0NiwgMTgwLCAyMzUsIDcyLCA5MCwgMTY3LCAKLSAgICAxNCwgMzIsIDI0NiwgMTgwLCAyMzEsIDIzNCwgOTAsIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgMjMxLCAyMzEsIDkwLCAxNjcsIAotICAgIDE0LCAzMiwgMjQ2LCAxODAsIDIzMywgMTQxLCA5MCwgMTY3LCAxNCwgMzIsIDI0NiwgMTgwLCAyMzMsIDEzNSwgOTAsIDE2NywgCi0gICAgMTQsIDMyLCAyNDYsIDE4MCwgMjMwLCAxNDgsIDkwLCAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDIzMSwgMjI5LCA5MCwgMTY3LCAKLSAgICAxNCwgMzIsIDI0NiwgMTgwLCAyMzEsIDIzMywgOTAsIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgMjM1LCA1MiwgOTAsIDE2NywgCi0gICAgMTQsIDMyLCAyNDYsIDE4MCwgMjI5LCAyMjQsIDkwLCAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDIyOSwgMjI1LCA5MCwgMTY3LCAKLSAgICAxNCwgMzIsIDI0NiwgMTgwLCAyMjcsIDIxMywgOTAsIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgMjI4LCAyMjAsIDM3LCAyNTAsIAotICAgIDk0LCAzNywgMjUyLCAyMDMsIDM3LCAyNTIsIDIyMiwgMzcsIDEyNSwgMzcsIDI1NCwgMCwgMzcsIDI1NCwgMTI2LCAzNywgCi0gICAgMjU0LCA0NSwgMzcsIDI1NSwgNCwgMjMzLCA5MSwgMzcsIDI1NSwgNCwgMjM3LCAxNTIsIDM3LCAyNTMsIDIzMywgMzcsIAotICAgIDI1MywgMTQ1LCAyNDcsIDkxLCAyMzYsIDEwMiwgMzcsIDI1MywgMTQ1LCAyNDcsIDkxLCAyMzYsIDI1MiwgMzcsIDI1MywgCi0gICAgMTQ1LCAyNDcsIDkxLCAyMzQsIDIzOSwgMzcsIDI1MywgMTQ1LCAyNDcsIDkxLCAyMzksIDEwMSwgMzcsIDIyOCwgMjMyLCAKLSAgICAzNywgMjU0LCAyNDIsIDI0MiwgNTYsIDM3LCAyNTIsIDIwMSwgMzcsIDI1NCwgMjA3LCA1NywgMzcsIDE5OCwgMzcsIDE3NywgCi0gICAgMzcsIDI1NCwgNzgsIDM3LCAyNTMsIDI0NiwgMzcsIDI1NCwgNTksIDM3LCAyNDksIDE0MiwgMzcsIDI0NCwgNTEsIDM3LCAKLSAgICAyNTQsIDEyOSwgMzcsIDI1NCwgMTEyLCAzNywgMjU0LCAyMDcsIDI1NCwgMTkxLCAzNywgMjU0LCAyMDcsIDIxNCwgMzcsIAotICAgIDI1NCwgMTAxLCAzNywgMjUzLCAyNDAsIDM3LCAyNTMsIDIyOCwgMzcsIDI1MCwgMTY1LCAzNywgMjUxLCAxMSwgMzcsIDI1MCwgCi0gICAgMzAsIDM3LCAyNTIsIDE5LCAzNywgMjU0LCAyMDcsIDE0OSwgMzcsIDI1NCwgMTAzLCAzNywgMjU0LCA0NCwgMzcsIDI1NCwgCi0gICAgODMsIDM3LCAyNTQsIDU2LCAzNywgMjU0LCAxMTYsIDM3LCAyNTQsIDIwNywgMTg1LCAzNywgMjUzLCAyNDgsIDM3LCAyNTQsIAotICAgIDM5LCAzNywgMjU0LCA4NCwgMzcsIDI1NSwgMTIsIDIzMywgOTEsIDM3LCAyNTUsIDMsIDIzMywgOTEsIDM3LCAyNTUsIDY4LCAKLSAgICAyMzMsIDkxLCAzNywgMjU0LCAyNTAsIDIzMywgOTEsIDM3LCAyNTUsIDEyLCAyMzcsIDE1MiwgMzcsIDI1NSwgMywgMjM3LCAKLSAgICAxNTIsIDM3LCAyNTUsIDY4LCAyMzcsIDE1MiwgMzcsIDI1NCwgMjUwLCAyMzcsIDE1MiwgMzcsIDI1NSwgNjgsIDEwNywgCi0gICAgMTkzLCAzNywgMjU1LCA2OCwgMTA3LCAyNTUsIDU5LCAyMzMsIDkxLCAzNywgMjEzLCAzNywgMjQ4LCA4NSwgMzcsIDI0OCwgCi0gICAgMTAyLCAzNywgMjUwLCA0MCwgMzcsIDI1MSwgMTY5LCAzNywgMjUzLCAxOTEsIDEwNywgMTkzLCAzNywgMjUzLCAxOTEsIAotICAgIDEwNywgMjU1LCA1OSwgMjMzLCA5MSwgMzcsIDI1NCwgMTM1LCAzNywgMjU0LCAxMTcsIDM3LCAyNTQsIDIwNywgMTkzLCAzNywgCi0gICAgMjU0LCAxMDQsIDM3LCAyNTQsIDEzNiwgMzcsIDI1MywgMjUxLCAzNywgMjU0LCAyMDcsIDE5NiwgMzcsIDI1NCwgMTA2LCAKLSAgICAzNywgMjU0LCA4OCwgMzcsIDI1NSwgMzksIDI0MSwgNTAsIDM3LCAyNTQsIDEzNywgMzcsIDI1NCwgMTE4LCAzNywgMjU0LCAKLSAgICAyMDcsIDI1NCwgMTk1LCAzNywgMjU0LCAxMDcsIDM3LCAyNTMsIDI0MywgMzcsIDI1NSwgNDAsIDI0MSwgNTAsIDM3LCAyNTUsIAotICAgIDY3LCAyNDgsIDEyMCwgMzcsIDI1NSwgNjgsIDI0OCwgMTIwLCAzNywgMjUzLCAxNDAsIDM3LCAyNTQsIDM1LCAzNywgMjU0LCAKLSAgICAzNywgMzcsIDI1NCwgMzgsIDM3LCAyNTUsIDYyLCAxMDcsIDI1MywgMjQwLCAzNywgMjUzLCA2NiwgMzcsIDI1NCwgNDIsIAotICAgIDM3LCAyNTQsIDY0LCAzNywgMTU0LCAzNywgMjUzLCAyMjYsIDM3LCAyNTMsIDc5LCAzNywgMjUzLCAxODMsIDM3LCAyNTQsIAotICAgIDI1MCwgMjM0LCAyNiwgMzcsIDI1NCwgODUsIDM3LCAyNTQsIDk0LCAzNywgMjU0LCA5NSwgMzcsIDI1MCwgMjI4LCAzNywgCi0gICAgMjU0LCA5NywgMzcsIDI1NSwgMzcsIDIzNywgMjE2LCAzNywgMjUxLCAxNCwgMzcsIDI1MSwgMjIsIDM3LCAyNTQsIDEzMSwgCi0gICAgMzcsIDI1NCwgMTMyLCAzNywgMjUxLCAxMTgsIDM3LCAyNTQsIDEzNCwgMzcsIDI1NCwgMTUxLCAzNywgMjU0LCA5LCAzNywgCi0gICAgMjU0LCAxNjksIDM3LCAyNTUsIDY5LCAxMDcsIDE4NSwgMzcsIDEwMiwgMTA3LCAxODUsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAKLSAgICAyMTgsIDExOCwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMTEzLCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAxNjYsIAotICAgIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIDE1OCwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMTczLCA5MCwgMTY3LCAKLSAgICAxNCwgMzIsIDI1MiwgMjE4LCAxODMsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIDE5NCwgOTAsIDE2NywgMTQsIDMyLCAKLSAgICAyNTIsIDIxOCwgMTg3LCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAxOTIsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIAotICAgIDI0NiwgMTc5LCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAyMzUsIDY4LCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAKLSAgICAyMzUsIDcyLCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAyMzEsIDIzNCwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgCi0gICAgMjMxLCAyMzEsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIDIzMywgMTQxLCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAKLSAgICAyMzMsIDEzNSwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMjMwLCAxNDgsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIAotICAgIDIzMSwgMjI5LCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAyMzEsIDIzMywgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgCi0gICAgMjM1LCA1MiwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMjI5LCAyMjQsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIAotICAgIDIyOSwgMjI1LCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAyMjcsIDIxMywgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgCi0gICAgMjI4LCAyMjAsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIDIyOSwgMTU3LCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAKLSAgICAyMzAsIDEyMSwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMjI4LCAxNzEsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIAotICAgIDIyOCwgMTcwLCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAyMjksIDE1OCwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgCi0gICAgMjM1LCA4MCwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMjMwLCAxMTgsIDM3LCAyNDcsIDEyLCAxODEsIDMyLCAyNTIsIAotICAgIDIzMCwgMjM0LCAzOCwgMjM1LCAxMjMsIDE4MSwgMzIsIDI1MiwgMjMwLCAyMzMsIDcsIDIzNywgOTksIDE4MSwgMzIsIDIzMCwgCi0gICAgMjQ2LCAyNTQsIDIxNywgMjUyLCAyMzAsIDIzMCwgMjMwLCAxODEsIDMyLCAyMzUsIDEyLCAyMzgsIDIyMiwgMTgxLCAzMiwgCi0gICAgMjMzLCAyNDksIDE4MSwgMzIsIDIzMiwgOTksIDE4MSwgMzIsIDI1MiwgMjMwLCAyNDIsIDYzLCAxODEsIDMyLCAyMzUsIAotICAgIDE3NywgMjMyLCA1NSwgMTgxLCAzMiwgMywgMjM1LCAyMTksIDE4MSwgMzIsIDIzMywgNTQsIDE4MSwgMzIsIDIzOSwgMTg1LCAKLSAgICAxODEsIDMyLCAyMzAsIDExMywgMTgxLCAzMiwgMjMwLCA2MCwgMTgxLCAzMiwgMjQwLCAyMjcsIDIzMCwgOTAsIDE4MSwgMzIsIAotICAgIDIzNCwgMTYyLCAxODEsIDMyLCAyMzAsIDU2LCAxODEsIDMyLCAyMzAsIDE4NCwgMTgxLCAzMiwgMjUyLCAxMDUsIDI1NCwgCi0gICAgMjIzLCAyNTIsIDIzMCwgMjM0LCA0NywgMTgxLCAzMiwgMjMyLCA3MSwgMTgxLCAzMiwgMjI3LCAxNjEsIDE4MSwgMzIsIAotICAgIDIzOCwgMTI1LCAyMzQsIDI0NiwgMTgxLCAzMiwgMjM4LCAyNTEsIDE4MSwgMzIsIDIzMywgMjcsIDIzOCwgOTgsIDE4MSwgCi0gICAgMzIsIDIzNSwgMjA1LCAxODEsIDMyLCAyMzEsIDg3LCAxODEsIDMyLCAyNDAsIDIyNywgMjM1LCAyMTksIDE4MSwgMzIsIAotICAgIDI0NCwgMTUxLCAyMzMsIDE5NSwgMTgxLCAzMiwgMjQwLCAyMjcsIDIyNywgMTUwLCAxODEsIDMyLCAyNTIsIDIzMCwgMjM1LCAKLSAgICAyMzcsIDIzNywgMTY4LCAxODEsIDMyLCAyNTIsIDIzMCwgMjM0LCAzMSwgMjQwLCAyMDcsIDE4MSwgMzIsIDIzMSwgODYsIAotICAgIDE4MSwgMzIsIDIzMiwgMTc1LCAxODEsIDMyLCAyMzQsIDIwOCwgMTgxLCAzMiwgMjQwLCAyMjcsIDIzOCwgMzYsIDE4MSwgCi0gICAgMzIsIDIzMywgMSwgMTgxLCAzMiwgMjMyLCAxMDYsIDEwNiwgMjUyLCAyMzAsIDIzNywgNTcsIDE4MSwgMzIsIDI1MiwgMjMwLCAKLSAgICAyMzYsIDc0LCAxODEsIDMyLCAyMjksIDE4NywgMTgxLCAzMiwgMjI5LCA0NCwgMTgxLCAzMiwgMjI4LCAyMzcsIDE4MSwgMzIsIAotICAgIDIzMiwgMTA5LCAxODEsIDMyLCAyMzIsIDI3LCAxODEsIDMyLCAyMjcsIDIyMCwgMTgxLCAzMiwgMjM4LCAxNjAsIDE4MCwgCi0gICAgMjQxLCAxOTEsIDE4MSwgMzIsIDIzMiwgMjQsIDIzMiwgNTUsIDE4MSwgMzIsIDIzNiwgMTk2LCAyMzcsIDE2LCAxODEsIDMyLCAKLSAgICAyMzAsIDg0LCAxODEsIDMyLCAyNTIsIDIzMCwgMjQ2LCA1NCwgMTgxLCAzMiwgMjMwLCA5NywgMTgxLCAzMiwgMjUyLCAyMzAsIAotICAgIDIzMiwgMTYsIDE4MSwgMzIsIDI1MiwgMjMwLCAyMzQsIDksIDIzMywgMjQ2LCAxODEsIDMyLCAyNTIsIDIzMCwgMjM1LCAKLSAgICAxODIsIDI0NSwgMjIwLCAyMzEsIDI1NSwgMTgxLCAzMiwgMjI4LCAyNDAsIDE4MSwgMzIsIDI1MiwgMjMwLCAyMzQsIDE1MywgCi0gICAgMjM2LCAxNDQsIDE4MSwgMzIsIDIzMCwgMjIxLCAxODEsIDMyLCAyNTIsIDIzMCwgMjMzLCA2MywgMTgxLCAzMiwgMjUyLCAKLSAgICAyMzAsIDIzOCwgMjM1LCAyNDAsIDE5OSwgMTgxLCAzMiwgMjUyLCAyMzAsIDIzOSwgNTEsIDI0MSwgMTc4LCAxODEsIDMyLCAKLSAgICAyMjksIDI1MCwgMTgxLCAzMiwgMjMwLCA3OCwgMTgxLCAzMiwgMjQ0LCA5LCAyNDAsIDQ4LCAxODEsIDMyLCAzLCAyMjcsIAotICAgIDE1MCwgMTgxLCAzMiwgMjQyLCA0NCwgMjI5LCAxODMsIDE4MSwgMzIsIDIzOCwgMTE4LCAyMjksIDE4MywgOCwgNCwgMjU0LCAKLSAgICA3MywgOCwgNCwgMjU0LCA3NCwgOCwgNCwgNzQsIDgsIDQsIDI1NCwgNzAsIDgsIDQsIDI1MCwgMTE1LCA4LCA0LCAyNTAsIAotICAgIDExNiwgOCwgNCwgMjUzLCA3NywgOCwgNCwgMjUwLCAxMTQsIDgsIDQsIDI1MywgMTEzLCA4LCA0LCAyNTQsIDMwLCA4LCA0LCAKLSAgICA1NywgOCwgNCwgMjU0LCAyNywgOCwgNCwgMjUyLCA1NywgOCwgNCwgMjU0LCAxNjQsIDgsIDQsIDI1MiwgNTYsIDgsIDQsIAotICAgIDI1MywgMTg4LCA4LCA0LCAyNTQsIDEyMiwgOCwgNCwgNzMsIDgsIDQsIDI1MywgMjU1LCA4LCA0LCAyNTQsIDUzLCA4LCA0LCAKLSAgICA3MiwgOCwgNCwgMjUzLCAxMDksIDgsIDQsIDI0OSwgMTIxLCA4LCA0LCAyNDksIDEyMiwgOCwgNCwgMjUzLCAzMCwgOCwgNCwgCi0gICAgMjQ5LCAxMjAsIDgsIDQsIDI0MiwgMjA2LCA4LCA0LCAyNDIsIDIwNywgOCwgNCwgMjQ5LCAxMTgsIDgsIDQsIDI0MiwgMjA1LCAKLSAgICA4LCA0LCAyNDksIDEwMSwgOCwgNCwgMjQ5LCAxMDIsIDgsIDQsIDI1MiwgMjExLCA4LCA0LCAyNDksIDEwMCwgOCwgNCwgCi0gICAgMjQyLCAyMjIsIDgsIDQsIDI0OSwgMTI5LCA4LCA0LCAyNDIsIDIyMSwgOCwgNCwgMjQ5LCAxMjgsIDgsIDQsIDI0NiwgMjMxLCAKLSAgICA4LCA0LCAyNTMsIDk4LCA4LCA0LCAyNDksIDEyNywgOCwgNCwgMjQ5LCAxMTMsIDgsIDQsIDI1MywgNzMsIDgsIDQsIDI0OSwgCi0gICAgMTExLCA4LCA0LCAyNDksIDEzMiwgOCwgNCwgMjQ5LCAxMzMsIDgsIDQsIDI1MywgNDgsIDgsIDQsIDI0OSwgMTMwLCA4LCA0LCAKLSAgICAyNDIsIDIyNCwgOCwgNCwgMjQ3LCAxMSwgOCwgNCwgMjQ5LCAxMzksIDgsIDQsIDI0OSwgMTQwLCA4LCA0LCAyNTMsIDIxMCwgCi0gICAgOCwgNCwgMjQ5LCAxMzcsIDgsIDQsIDI0MiwgMjI2LCA4LCA0LCAyNDksIDEzOCwgOCwgNCwgMjUxLCAxMTEsIDgsIDQsIAotICAgIDI1MSwgMTEyLCA4LCA0LCAyNTIsIDIyMywgOCwgNCwgMjUxLCAxMTAsIDgsIDQsIDI0NSwgNzQsIDgsIDQsIDI1MSwgMTA4LCAKLSAgICA4LCA0LCAyNDUsIDczLCA4LCA0LCAyNTEsIDEwNCwgOCwgNCwgMjUxLCAxMDUsIDgsIDQsIDIxMywgOCwgNCwgMjQ3LCA0NSwgCi0gICAgOCwgNCwgMjQ1LCA4NSwgOCwgNCwgMjUxLCAxMjEsIDgsIDQsIDI0NSwgODQsIDgsIDQsIDI1MSwgMTE1LCA4LCA0LCAyNTEsIAotICAgIDExNiwgOCwgNCwgMjUzLCA1MCwgOCwgNCwgMjUxLCAxMTQsIDgsIDQsIDI0OCwgMTM2LCA4LCA0LCAyNTEsIDEyNCwgOCwgNCwgCi0gICAgMjUzLCA4MiwgOCwgNCwgMjUxLCAxMjIsIDgsIDQsIDI0NSwgODYsIDgsIDQsIDI1MSwgMTIzLCA4LCA0LCAyNDgsIDEzOCwgCi0gICAgOCwgNCwgMjUxLCAxMjcsIDgsIDQsIDI1NCwgMTM4LCA4LCA0LCAyNTEsIDEyNSwgOCwgNCwgMjQ1LCA4OCwgOCwgNCwgMjUxLCAKLSAgICAxMjYsIDgsIDQsIDI0MiwgMTgzLCA4LCA0LCAyNDIsIDE4NCwgOCwgNCwgMjQ5LCAxMDMsIDgsIDQsIDI0MiwgMTgyLCA4LCAKLSAgICA0LCAyMzgsIDExMiwgOCwgNCwgMjM4LCAxMTMsIDgsIDQsIDI0MiwgMTgxLCA4LCA0LCAyMzgsIDExMSwgOCwgNCwgMjQyLCAKLSAgICAxNzcsIDgsIDQsIDI0MiwgMTc4LCA4LCA0LCAyNDcsIDY2LCA4LCA0LCAyNDIsIDE3NiwgOCwgNCwgMjM4LCAxMTUsIDgsIDQsIAotICAgIDI0MiwgMTg4LCA4LCA0LCAyMzgsIDExNCwgOCwgNCwgMjQyLCAxODYsIDgsIDQsIDI0MiwgMTg3LCA4LCA0LCAyNDksIDEwNCwgCi0gICAgOCwgNCwgMjQyLCAxODUsIDgsIDQsIDI0MiwgMTgwLCA4LCA0LCAyNDcsIDI1MCwgOCwgNCwgMjQyLCAxNzksIDgsIDQsIAotICAgIDI0MSwgOTgsIDgsIDQsIDI0MiwgMTkxLCA4LCA0LCAyNDksIDEwNSwgOCwgNCwgMjQyLCAxODksIDgsIDQsIDIzOCwgMTE2LCAKLSAgICA4LCA0LCAyNDIsIDE5MCwgOCwgNCwgMjQyLCAxOTMsIDgsIDQsIDI0MiwgMTk0LCA4LCA0LCAyNDksIDEwNiwgOCwgNCwgCi0gICAgMjQyLCAxOTIsIDgsIDQsIDI0NCwgMTcxLCA4LCA0LCAyNDQsIDE3MiwgOCwgNCwgMjUxLCA0NSwgOCwgNCwgMjQ0LCAxNzAsIAotICAgIDgsIDQsIDIzOSwgMTI5LCA4LCA0LCAyNDEsIDIwMCwgOCwgNCwgMjM5LCAxMjgsIDgsIDQsIDI0NCwgMTY4LCA4LCA0LCAKLSAgICAyNDQsIDE2OSwgOCwgNCwgMjUxLCA0NCwgOCwgNCwgMjQ0LCAxNjcsIDgsIDQsIDI0NCwgMTc0LCA4LCA0LCAyNDQsIDE3NSwgCi0gICAgOCwgNCwgMjUxLCA0NiwgOCwgNCwgMjQ0LCAxNzMsIDgsIDQsIDI0NCwgMTc4LCA4LCA0LCAyNDQsIDE3OSwgOCwgNCwgMjUxLCAKLSAgICA0NywgOCwgNCwgMjQ0LCAxNzYsIDgsIDQsIDIzOSwgMTMwLCA4LCA0LCAyNDQsIDE3NywgOCwgNCwgMjQ0LCAxODIsIDgsIDQsIAotICAgIDI0NCwgMTgzLCA4LCA0LCAyNTEsIDQ4LCA4LCA0LCAyNDQsIDE4MCwgOCwgNCwgMjM5LCAxMzEsIDgsIDQsIDI0NCwgMTgxLCAKLSAgICA4LCA0LCAyNDMsIDIwNCwgOCwgNCwgMjQzLCAyMDUsIDgsIDQsIDI1MCwgODUsIDgsIDQsIDI0MywgMjAzLCA4LCA0LCAyMzksIAotICAgIDE3LCA4LCA0LCAyNDMsIDIwMiwgOCwgNCwgMjM5LCAxNiwgOCwgNCwgMjQzLCAyMDAsIDgsIDQsIDI0MywgMjAxLCA4LCA0LCAKLSAgICAyNTAsIDg0LCA4LCA0LCAyNDMsIDE5OSwgOCwgNCwgMjM5LCAxOSwgOCwgNCwgMjQzLCAyMDksIDgsIDQsIDIzOSwgMTgsIDgsIAotICAgIDQsIDI0MywgMjA3LCA4LCA0LCAyNDMsIDIwOCwgOCwgNCwgMjQ4LCA2MiwgOCwgNCwgMjQzLCAyMDYsIDgsIDQsIDI0MywgCi0gICAgMjEyLCA4LCA0LCAyNDMsIDIxMywgOCwgNCwgMjUwLCA4NiwgOCwgNCwgMjQzLCAyMTAsIDgsIDQsIDIzOSwgMjAsIDgsIDQsIAotICAgIDI0MywgMjExLCA4LCA0LCAyNDMsIDIxNiwgOCwgNCwgMjUwLCA4NywgOCwgNCwgMjQzLCAyMTQsIDgsIDQsIDIzOSwgMjEsIAotICAgIDgsIDQsIDI0MywgMjE1LCA4LCA0LCAyNTEsIDE4LCA4LCA0LCAyNTEsIDE5LCA4LCA0LCAyNTIsIDIzOSwgOCwgNCwgMjUxLCAKLSAgICAxNywgOCwgNCwgMjQ0LCAxNDQsIDgsIDQsIDI1MSwgMTIsIDgsIDQsIDI0NCwgMTQzLCA4LCA0LCAyNTAsIDI1MCwgOCwgNCwgCi0gICAgMjUwLCAyNTEsIDgsIDQsIDE5OCwgOCwgNCwgMjUwLCAyNDcsIDgsIDQsIDI0NCwgMTU3LCA4LCA0LCAyNDQsIDE1OCwgOCwgCi0gICAgNCwgMjUxLCAyNywgOCwgNCwgMjQ0LCAxNTYsIDgsIDQsIDI1MSwgMjMsIDgsIDQsIDI1MSwgMjQsIDgsIDQsIDI1MywgMTQsIAotICAgIDgsIDQsIDI0OCwgMTAxLCA4LCA0LCAyNTEsIDcsIDgsIDQsIDI1MywgMTMsIDgsIDQsIDI1MSwgMzAsIDgsIDQsIDI1MSwgCi0gICAgMzEsIDgsIDQsIDI1MiwgMjI5LCA4LCA0LCAyNTEsIDI4LCA4LCA0LCAyNDQsIDE2MCwgOCwgNCwgMjUxLCAyOSwgOCwgNCwgCi0gICAgMjUxLCAzNCwgOCwgNCwgMjUxLCAzNSwgOCwgNCwgMjU0LCAxMDgsIDgsIDQsIDI1MSwgMzMsIDgsIDQsIDI0OSwgMjUxLCA4LCAKLSAgICA0LCAyNDksIDI1MiwgOCwgNCwgMjUzLCA4OCwgOCwgNCwgMjQ5LCAyNTAsIDgsIDQsIDI0OSwgMjM5LCA4LCA0LCAyNDksIAotICAgIDI0MCwgOCwgNCwgMjUyLCAyMzQsIDgsIDQsIDI0OSwgMjM4LCA4LCA0LCAyNDksIDI1NSwgOCwgNCwgMjUzLCAxNDgsIDgsIAotICAgIDQsIDI0OSwgMjU0LCA4LCA0LCAyNTAsIDEsIDgsIDQsIDI1MCwgMiwgOCwgNCwgMjUzLCAxNzgsIDgsIDQsIDI1MCwgMCwgOCwgCi0gICAgNCwgMjQzLCAxMTAsIDgsIDQsIDI0OCwgNDAsIDgsIDQsIDI1MCwgNywgOCwgNCwgMjUwLCA4LCA4LCA0LCAyNTQsIDU3LCA4LCAKLSAgICA0LCAyNTAsIDYsIDgsIDQsIDI1MiwgNzcsIDgsIDQsIDI1MiwgNzgsIDgsIDQsIDI1MywgMTM4LCA4LCA0LCAyNTIsIDc2LCAKLSAgICA4LCA0LCAyNDYsIDQ2LCA4LCA0LCAyNDYsIDQ3LCA4LCA0LCAyNTIsIDc1LCA4LCA0LCAyNDYsIDQ1LCA4LCA0LCAyNTIsIAotICAgIDcxLCA4LCA0LCAyNTIsIDcyLCA4LCA0LCAyNTIsIDI0MywgOCwgNCwgMjUyLCA3MCwgOCwgNCwgMjUyLCA4MiwgOCwgNCwgCi0gICAgMjUyLCA4NCwgOCwgNCwgMjUzLCAxMDgsIDgsIDQsIDI1MiwgODEsIDgsIDQsIDI1MiwgNzQsIDgsIDQsIDI0OCwgMTkwLCA4LCAKLSAgICA0LCAyNTIsIDg2LCA4LCA0LCAyNTIsIDg3LCA4LCA0LCAyNTMsIDEzOSwgOCwgNCwgMjUyLCA4NSwgOCwgNCwgMjQ2LCA0OSwgCi0gICAgOCwgNCwgMjQ4LCAxOTMsIDgsIDQsIDI1MiwgOTEsIDgsIDQsIDI1MiwgOTIsIDgsIDQsIDI1MywgMjAxLCA4LCA0LCAyNTIsIAotICAgIDg5LCA4LCA0LCAyNDYsIDUwLCA4LCA0LCAyNTIsIDkwLCA4LCA0LCAyNDksIDE5NiwgOCwgNCwgMjQ5LCAxOTcsIDgsIDQsIAotICAgIDI1MywgMTIsIDgsIDQsIDI0OSwgMTk0LCA4LCA0LCAyNDMsIDY5LCA4LCA0LCAyNDksIDE5MiwgOCwgNCwgMjQzLCA2OCwgOCwgCi0gICAgNCwgMjQ5LCAxODEsIDgsIDQsIDI0OSwgMTgzLCA4LCA0LCAyNTIsIDIwMywgOCwgNCwgMjQ5LCAxNzksIDgsIDQsIDI0MywgCi0gICAgODYsIDgsIDQsIDI0OSwgMjEyLCA4LCA0LCAyNDYsIDE2NCwgOCwgNCwgMjQ5LCAyMDYsIDgsIDQsIDI1MywgNTcsIDgsIDQsIAotICAgIDI0OSwgMjA1LCA4LCA0LCAyNDksIDE4NywgOCwgNCwgMjUzLCAyMCwgOCwgNCwgMjQ5LCAxODYsIDgsIDQsIDI0OSwgMjE1LCAKLSAgICA4LCA0LCAyNDksIDIxNiwgOCwgNCwgMjUzLCAzMSwgOCwgNCwgMjQ5LCAyMTMsIDgsIDQsIDI0MywgODgsIDgsIDQsIDI0OSwgCi0gICAgMjE0LCA4LCA0LCAyNTIsIDIzLCA4LCA0LCAyNTIsIDI0LCA4LCA0LCAyNTMsIDQ0LCA4LCA0LCAyNTIsIDIyLCA4LCA0LCAKLSAgICAyNDUsIDI1MCwgOCwgNCwgMjQ3LCA1NywgOCwgNCwgMjQ1LCAyNDksIDgsIDQsIDI0OCwgMTcwLCA4LCA0LCAyNTIsIDEwLCAKLSAgICA4LCA0LCAyNTIsIDIwMiwgOCwgNCwgMjUyLCA3LCA4LCA0LCAyNDYsIDIxLCA4LCA0LCAyNDYsIDIyLCA4LCA0LCAyNTIsIAotICAgIDM0LCA4LCA0LCAyNDYsIDIwLCA4LCA0LCAyNDgsIDE3OSwgOCwgNCwgMjUyLCAyOCwgOCwgNCwgOTYsIDgsIDQsIDI0NywgCi0gICAgMjE0LCA4LCA0LCAyNTIsIDE2LCA4LCA0LCAyNTMsIDksIDgsIDQsIDI1MiwgMTMsIDgsIDQsIDI1MiwgMzYsIDgsIDQsIAotICAgIDI1MiwgMzcsIDgsIDQsIDI1MywgMTgsIDgsIDQsIDI1MiwgMzUsIDgsIDQsIDI0NiwgMjMsIDgsIDQsIDI0NywgMTEyLCA4LCAKLSAgICA0LCAyNDMsIDQxLCA4LCA0LCAyNDMsIDQyLCA4LCA0LCAyNDgsIDIzLCA4LCA0LCAyNDMsIDQwLCA4LCA0LCAyMzgsIDE3NiwgCi0gICAgOCwgNCwgMjQzLCAzOSwgOCwgNCwgMjM4LCAxNzUsIDgsIDQsIDI0MywgMzIsIDgsIDQsIDI0MywgMzMsIDgsIDQsIDI0NiwgCi0gICAgMTkyLCA4LCA0LCAyNDMsIDMxLCA4LCA0LCAyMzgsIDE3OCwgOCwgNCwgMjQzLCA0NywgOCwgNCwgMjM4LCAxNzcsIDgsIDQsIAotICAgIDI0MywgNDUsIDgsIDQsIDI0MywgNDYsIDgsIDQsIDI0NywgMTMwLCA4LCA0LCAyNDMsIDQ0LCA4LCA0LCAyNDMsIDM3LCA4LCAKLSAgICA0LCAyNDgsIDIyLCA4LCA0LCAyNDMsIDM2LCA4LCA0LCAyNDMsIDQ5LCA4LCA0LCAyNDMsIDUwLCA4LCA0LCAyNDgsIDI0LCAKLSAgICA4LCA0LCAyNDMsIDQ4LCA4LCA0LCAyMzgsIDE3OSwgOCwgNCwgMjQxLCAxMTgsIDgsIDQsIDI0NCwgMTkyLCA4LCA0LCAyNDQsIAotICAgIDE5MywgOCwgNCwgMjQ4LCAxMDcsIDgsIDQsIDI0NCwgMTkxLCA4LCA0LCAyMzksIDEzMiwgOCwgNCwgMjQ0LCAxOTAsIDgsIAotICAgIDQsIDI0NCwgMTg1LCA4LCA0LCAyNDQsIDE4NiwgOCwgNCwgMjQ3LCAxODAsIDgsIDQsIDI0NCwgMTg0LCA4LCA0LCAyNDQsIAotICAgIDE5NiwgOCwgNCwgMjQ0LCAxOTcsIDgsIDQsIDI0OCwgMTA4LCA4LCA0LCAyNDQsIDE5NSwgOCwgNCwgMjQ0LCAxODksIDgsIAotICAgIDQsIDI0OCwgMTA2LCA4LCA0LCAyNDQsIDE4OCwgOCwgNCwgMjQ0LCAyMDAsIDgsIDQsIDI0NCwgMjAxLCA4LCA0LCAyNDgsIAotICAgIDEwOSwgOCwgNCwgMjQ0LCAxOTgsIDgsIDQsIDIzOSwgMTMzLCA4LCA0LCAyNDQsIDE5OSwgOCwgNCwgMjQzLCAyMjQsIDgsIAotICAgIDQsIDI0MywgMjI1LCA4LCA0LCAyNTAsIDg5LCA4LCA0LCAyNDMsIDIyMywgOCwgNCwgMjM5LCAyMywgOCwgNCwgMjM5LCAyNCwgCi0gICAgOCwgNCwgMjQzLCAyMjIsIDgsIDQsIDIzOSwgMjIsIDgsIDQsIDI0MywgMjE4LCA4LCA0LCAyNDMsIDIxOSwgOCwgNCwgMjQ4LCAKLSAgICA2MywgOCwgNCwgMjQzLCAyMTcsIDgsIDQsIDIzOSwgMjUsIDgsIDQsIDI0MywgMjI5LCA4LCA0LCAyNDMsIDIyNywgOCwgNCwgCi0gICAgMjQzLCAyMjgsIDgsIDQsIDI0MywgMjI2LCA4LCA0LCAyNDMsIDIyMSwgOCwgNCwgMjUwLCA4OCwgOCwgNCwgMjQzLCAyMjAsIAotICAgIDgsIDQsIDI0MywgMjMwLCA4LCA0LCAyNTEsIDYzLCA4LCA0LCAyNTEsIDY0LCA4LCA0LCAyNTIsIDI0OCwgOCwgNCwgMjUxLCAKLSAgICA2MiwgOCwgNCwgMjQ0LCAyMjgsIDgsIDQsIDI1MSwgNjAsIDgsIDQsIDI0NCwgMjI3LCA4LCA0LCAyNTEsIDQzLCA4LCA0LCAKLSAgICAyNTIsIDIwMSwgOCwgNCwgMjUxLCA0MSwgOCwgNCwgMjQ1LCAxNSwgOCwgNCwgMjUxLCA4MCwgOCwgNCwgMjQ1LCAxNCwgOCwgCi0gICAgNCwgMjQ3LCAxODQsIDgsIDQsIDI1MSwgNzIsIDgsIDQsIDI1MywgOCwgOCwgNCwgMjUxLCA3MCwgOCwgNCwgMjUxLCA1MiwgCi0gICAgOCwgNCwgMjUyLCAyNDcsIDgsIDQsIDI1MSwgNTAsIDgsIDQsIDI1MSwgODMsIDgsIDQsIDI1MSwgODQsIDgsIDQsIDI1MiwgCi0gICAgMjI3LCA4LCA0LCAyNTEsIDgxLCA4LCA0LCAyNDUsIDE2LCA4LCA0LCAyNTEsIDgyLCA4LCA0LCAyNDMsIDE4NiwgOCwgNCwgCi0gICAgMjQzLCAxODcsIDgsIDQsIDI1MCwgODAsIDgsIDQsIDI0MywgMTg1LCA4LCA0LCAyMzksIDExLCA4LCA0LCAyNDMsIDE4NCwgCi0gICAgOCwgNCwgMjM5LCAxMCwgOCwgNCwgMjQzLCAxODAsIDgsIDQsIDI0MywgMTgxLCA4LCA0LCAyNDgsIDYxLCA4LCA0LCAyNDMsIAotICAgIDE3OSwgOCwgNCwgMjM5LCAxMywgOCwgNCwgMjQzLCAxOTAsIDgsIDQsIDIzOSwgMTIsIDgsIDQsIDI0MywgMTg5LCA4LCA0LCAKLSAgICAyNTAsIDgxLCA4LCA0LCAyNDMsIDE4OCwgOCwgNCwgMjQzLCAxODMsIDgsIDQsIDI1MCwgNzksIDgsIDQsIDI0MywgMTgyLCAKLSAgICA4LCA0LCAyNDMsIDE5MywgOCwgNCwgMjQzLCAxOTQsIDgsIDQsIDI1MCwgODIsIDgsIDQsIDI0MywgMTkxLCA4LCA0LCAyMzksIAotICAgIDE0LCA4LCA0LCAyNDMsIDE5MiwgOCwgNCwgMjQzLCAxOTcsIDgsIDQsIDI0MywgMTk4LCA4LCA0LCAyNTAsIDgzLCA4LCA0LCAKLSAgICAyNDMsIDE5NSwgOCwgNCwgMjM5LCAxNSwgOCwgNCwgMjQzLCAxOTYsIDgsIDQsIDI1MCwgMjI1LCA4LCA0LCAyNTAsIDIyNiwgCi0gICAgOCwgNCwgMjUzLCA0MiwgOCwgNCwgMjUwLCAyMjMsIDgsIDQsIDI0NCwgMTAxLCA4LCA0LCAyNDQsIDEwMiwgOCwgNCwgMjQ4LCAKLSAgICA5MywgOCwgNCwgMjQ0LCAxMDAsIDgsIDQsIDI1MCwgMjA4LCA4LCA0LCAyNTAsIDIxMCwgOCwgNCwgMjUyLCAyMDAsIDgsIDQsIAotICAgIDI1MCwgMjA2LCA4LCA0LCAyNDQsIDExMCwgOCwgNCwgMjQ0LCAxMTEsIDgsIDQsIDI1MCwgMjM2LCA4LCA0LCAyNDQsIDEwOSwgCi0gICAgOCwgNCwgMjUwLCAyMzEsIDgsIDQsIDI1MCwgMjMzLCA4LCA0LCAyNTMsIDQ5LCA4LCA0LCAyNTAsIDIzMCwgOCwgNCwgMjUwLCAKLSAgICAyMTYsIDgsIDQsIDI1MywgODAsIDgsIDQsIDI1MCwgMjE0LCA4LCA0LCAyNTAsIDIzOSwgOCwgNCwgMjUwLCAyNDAsIDgsIDQsIAotICAgIDI1MywgMjIsIDgsIDQsIDI1MCwgMjM3LCA4LCA0LCAyNDQsIDExMiwgOCwgNCwgMjUwLCAyMzgsIDgsIDQsIDI1MCwgMjQyLCAKLSAgICA4LCA0LCAyNTAsIDI0MywgOCwgNCwgMjUzLCAxODYsIDgsIDQsIDI1MCwgMjQxLCA4LCA0LCAyNDQsIDExMywgOCwgNCwgCi0gICAgMjQ4LCA5NywgOCwgNCwgMjUwLCAzMywgOCwgNCwgMjUwLCAzNCwgOCwgNCwgMjUzLCAzOSwgOCwgNCwgMjUwLCAzMiwgOCwgCi0gICAgNCwgMjQzLCAxNDcsIDgsIDQsIDI0MywgMTQ4LCA4LCA0LCAyNTAsIDMxLCA4LCA0LCAyNDMsIDE0NiwgOCwgNCwgMjUwLCAKLSAgICAxNCwgOCwgNCwgMjUwLCAxNSwgOCwgNCwgMjUyLCAyMDUsIDgsIDQsIDI1MCwgMTMsIDgsIDQsIDI0MywgMTYwLCA4LCA0LCAKLSAgICAyNDMsIDE2MSwgOCwgNCwgMjUwLCA0NiwgOCwgNCwgMjQzLCAxNTksIDgsIDQsIDI0OCwgNTYsIDgsIDQsIDI1MCwgMzksIDgsIAotICAgIDQsIDI1MywgNzYsIDgsIDQsIDI1MCwgMzgsIDgsIDQsIDI1MCwgMjUsIDgsIDQsIDI1MCwgMjcsIDgsIDQsIDI1MywgMTAzLCAKLSAgICA4LCA0LCAyNDgsIDQ3LCA4LCA0LCAyNTAsIDQ4LCA4LCA0LCAyNTAsIDQ5LCA4LCA0LCAyNTMsIDQwLCA4LCA0LCAyNTAsIAotICAgIDQ3LCA4LCA0LCAyNDMsIDE2MiwgOCwgNCwgMjQ4LCA1NywgOCwgNCwgMjQ4LCA4MywgOCwgNCwgMjUwLCAxNzAsIDgsIDQsIAotICAgIDI1MywgNywgOCwgNCwgMjUwLCAxNjksIDgsIDQsIDI0NCwgNTksIDgsIDQsIDI1MCwgMTY2LCA4LCA0LCAyNDQsIDU4LCA4LCAKLSAgICA0LCAyNTAsIDE1NiwgOCwgNCwgMjUwLCAxNTgsIDgsIDQsIDE3NywgOCwgNCwgMjUwLCAxNTUsIDgsIDQsIDI0NCwgNzEsIDgsIAotICAgIDQsIDI1MCwgMTkwLCA4LCA0LCAyNDQsIDcwLCA4LCA0LCAyNTAsIDE4MCwgOCwgNCwgMjUwLCAxODEsIDgsIDQsIDI1MywgCi0gICAgMzMsIDgsIDQsIDI1MCwgMTc5LCA4LCA0LCAyNTAsIDE2MCwgOCwgNCwgMjUwLCAxNjEsIDgsIDQsIDI1MywgNiwgOCwgNCwgCi0gICAgMjUwLCAxNTksIDgsIDQsIDI1MCwgMTkyLCA4LCA0LCAyNTAsIDE5MywgOCwgNCwgMjUzLCAzNCwgOCwgNCwgMjUwLCAxOTEsIAotICAgIDgsIDQsIDI0NCwgNzMsIDgsIDQsIDI0NiwgMjIwLCA4LCA0LCAyNDMsIDEzMiwgOCwgNCwgMjQzLCAxMzMsIDgsIDQsIDI0OCwgCi0gICAgNDksIDgsIDQsIDIzOCwgMjM5LCA4LCA0LCAyNDMsIDEzMSwgOCwgNCwgMjM4LCAyMzgsIDgsIDQsIDI0MywgMTI1LCA4LCA0LCAKLSAgICAyNDMsIDEyNiwgOCwgNCwgMjQ3LCA3NywgOCwgNCwgMjQzLCAxMjQsIDgsIDQsIDIzOCwgMjQxLCA4LCA0LCAyMzgsIDI0MiwgCi0gICAgOCwgNCwgMjQxLCAxNDAsIDgsIDQsIDIzOCwgMjQwLCA4LCA0LCAyNDMsIDEzNCwgOCwgNCwgMjQzLCAxMzUsIDgsIDQsIAotICAgIDI0OCwgNTAsIDgsIDQsIDI0MSwgMTM5LCA4LCA0LCAyNDMsIDEyOSwgOCwgNCwgMjQzLCAxMzAsIDgsIDQsIDI0OCwgNDgsIAotICAgIDgsIDQsIDI0MywgMTI4LCA4LCA0LCAyNDMsIDEzOCwgOCwgNCwgMjQzLCAxMzksIDgsIDQsIDI0OCwgNTEsIDgsIDQsIDI0MywgCi0gICAgMTM2LCA4LCA0LCAyMzgsIDI0MywgOCwgNCwgMjQzLCAxMzcsIDgsIDQsIDIzOSwgMTA5LCA4LCA0LCAyNDQsIDEzMywgOCwgCi0gICAgNCwgMjQ0LCAxMjQsIDgsIDQsIDI0NCwgMTI1LCA4LCA0LCAyNTEsIDgsIDgsIDQsIDI0NCwgMTIzLCA4LCA0LCAyMzksIAotICAgIDExMSwgOCwgNCwgMjQ0LCAxMzcsIDgsIDQsIDIzOSwgMTEwLCA4LCA0LCAyNDQsIDEzNSwgOCwgNCwgMjQ0LCAxMzYsIDgsIAotICAgIDQsIDI0NywgODgsIDgsIDQsIDI0NCwgMTM0LCA4LCA0LCAyNDQsIDEzMiwgOCwgNCwgMjUxLCA5LCA4LCA0LCAyNDQsIDEzMSwgCi0gICAgOCwgNCwgMjQ0LCAxNDAsIDgsIDQsIDI0NCwgMTQxLCA4LCA0LCAyNTEsIDEwLCA4LCA0LCAyNDQsIDEzOCwgOCwgNCwgMjM5LCAKLSAgICAxMTIsIDgsIDQsIDI0NCwgMTM5LCA4LCA0LCAyNDEsIDE1OSwgOCwgNCwgMjQzLCAyNDksIDgsIDQsIDI1MCwgMTA0LCA4LCAKLSAgICA0LCAyNDMsIDI0OCwgOCwgNCwgMjM5LCAzMSwgOCwgNCwgMjM5LCAzMiwgOCwgNCwgMjQzLCAyNDcsIDgsIDQsIDIzOSwgMzAsIAotICAgIDgsIDQsIDI0MywgMjQzLCA4LCA0LCAyNDMsIDI0NCwgOCwgNCwgMjUwLCAxMDIsIDgsIDQsIDI0MywgMjQyLCA4LCA0LCAKLSAgICAyMzksIDM0LCA4LCA0LCAyMzksIDM1LCA4LCA0LCAyNDEsIDE2MSwgOCwgNCwgMjM5LCAzMywgOCwgNCwgMjQzLCAyNTAsIDgsIAotICAgIDQsIDI0MywgMjUxLCA4LCA0LCAyNTAsIDEwNSwgOCwgNCwgMjQxLCAxNjAsIDgsIDQsIDI0MywgMjQ2LCA4LCA0LCAyNTAsIAotICAgIDEwMywgOCwgNCwgMjQzLCAyNDUsIDgsIDQsIDIzOSwgMTM5LCA4LCA0LCAyNDQsIDIxNSwgOCwgNCwgMjM5LCAxMzgsIDgsIAotICAgIDQsIDI0NCwgMjA2LCA4LCA0LCAyNDQsIDIwNywgOCwgNCwgMjQ2LCAxNjksIDgsIDQsIDI0NCwgMjA1LCA4LCA0LCAyMzksIAotICAgIDE0MSwgOCwgNCwgMjM5LCAxNDIsIDgsIDQsIDI0NCwgMjI0LCA4LCA0LCAyNDQsIDIyMSwgOCwgNCwgMjQ0LCAyMjIsIDgsIAotICAgIDQsIDI0NywgOTMsIDgsIDQsIDI0NCwgMjIwLCA4LCA0LCAyNDQsIDIxMCwgOCwgNCwgMjUxLCA1NCwgOCwgNCwgMjQ0LCAKLSAgICAyMDksIDgsIDQsIDI1MCwgNzgsIDgsIDQsIDI0MywgMTc2LCA4LCA0LCAyNDcsIDgxLCA4LCA0LCAyNDcsIDE0NywgOCwgNCwgCi0gICAgMjUwLCA2MywgOCwgNCwgMTU0LCA4LCA0LCAyNTAsIDYyLCA4LCA0LCAyNDMsIDIzOSwgOCwgNCwgMjQzLCAyNDAsIDgsIDQsIAotICAgIDI1MCwgOTcsIDgsIDQsIDI0MywgMjM4LCA4LCA0LCAyNTAsIDkyLCA4LCA0LCAyNTAsIDkzLCA4LCA0LCAyNTMsIDIxLCA4LCAKLSAgICA0LCAyNTAsIDkxLCA4LCA0LCAyNTAsIDY5LCA4LCA0LCAyNTIsIDI1MiwgOCwgNCwgMjUwLCA2OCwgOCwgNCwgMjUyLCA5NSwgCi0gICAgOCwgNCwgMjUyLCA5NiwgOCwgNCwgMjUyLCAyMDgsIDgsIDQsIDI1MiwgOTQsIDgsIDQsIDI0NiwgNjIsIDgsIDQsIDI1MiwgCi0gICAgMTA4LCA4LCA0LCAyNDYsIDYxLCA4LCA0LCAyNTIsIDEwNiwgOCwgNCwgMjUzLCAxMCwgOCwgNCwgMjUyLCAxMDQsIDgsIDQsIAotICAgIDI1MiwgOTksIDgsIDQsIDI1MiwgMjUwLCA4LCA0LCAyNTIsIDk4LCA4LCA0LCAyNTIsIDE4MSwgOCwgNCwgMjUyLCAxODIsIAotICAgIDgsIDQsIDI1MywgNzIsIDgsIDQsIDI1MiwgMTgwLCA4LCA0LCAyNDYsIDEzMCwgOCwgNCwgMjUyLCAxNzgsIDgsIDQsIDI0NiwgCi0gICAgMTI5LCA4LCA0LCAyNTIsIDE3MCwgOCwgNCwgMjUyLCAxNzEsIDgsIDQsIDI1MiwgMjI2LCA4LCA0LCAyNTIsIDE2OSwgOCwgCi0gICAgNCwgMjQ2LCAxMzMsIDgsIDQsIDI1MiwgMTkwLCA4LCA0LCAyNDYsIDEzMiwgOCwgNCwgMjQ4LCAyMTEsIDgsIDQsIDI1MiwgCi0gICAgMTg2LCA4LCA0LCAyNTMsIDY1LCA4LCA0LCAyNTIsIDE4NSwgOCwgNCwgMjUyLCAxNzQsIDgsIDQsIDI1MywgNDYsIDgsIDQsIAotICAgIDI1MiwgMTczLCA4LCA0LCAyNTIsIDE5MSwgOCwgNCwgMjUyLCAxOTIsIDgsIDQsIDI1MywgOTcsIDgsIDQsIDI0OCwgMjEyLCAKLSAgICA4LCA0LCAyNDYsIDEzNCwgOCwgNCwgMjQ4LCAyMTMsIDgsIDQsIDI1MiwgMTk2LCA4LCA0LCAyNTIsIDE5NywgOCwgNCwgCi0gICAgMjU0LCAxODIsIDgsIDQsIDI1MiwgMTk0LCA4LCA0LCAyNDYsIDEzNSwgOCwgNCwgMjUyLCAxOTUsIDgsIDQsIDI0OSwgMTYwLCAKLSAgICA4LCA0LCAyNDksIDE2MSwgOCwgNCwgMjUzLCAxNDMsIDgsIDQsIDI0OCwgOCwgOCwgNCwgMjQzLCAxMCwgOCwgNCwgMjQzLCAKLSAgICAxMSwgOCwgNCwgMjQ5LCAxNTgsIDgsIDQsIDI0MywgOSwgOCwgNCwgMjQ4LCA1LCA4LCA0LCAyNDksIDE0NSwgOCwgNCwgCi0gICAgMjUyLCAyMTUsIDgsIDQsIDI0OCwgNCwgOCwgNCwgMjQzLCAyMSwgOCwgNCwgMjQ5LCAxNjYsIDgsIDQsIDI0MSwgMTExLCA4LCAKLSAgICA0LCAyNDksIDE2NCwgOCwgNCwgMjQ5LCAxNjUsIDgsIDQsIDI1MywgNjYsIDgsIDQsIDI0OSwgMTYzLCA4LCA0LCAyNDksIAotICAgIDE1NCwgOCwgNCwgMjUzLCAxNDEsIDgsIDQsIDI0OSwgMTUzLCA4LCA0LCAyNDksIDE2OCwgOCwgNCwgMjQ5LCAxNjksIDgsIAotICAgIDQsIDI1MywgMTcyLCA4LCA0LCAyNDgsIDEyLCA4LCA0LCAyNDMsIDIyLCA4LCA0LCAyNDksIDE2NywgOCwgNCwgMjQ4LCAxNiwgCi0gICAgOCwgNCwgMjQ5LCAxNzIsIDgsIDQsIDI1MywgMjEzLCA4LCA0LCAyNDgsIDE1LCA4LCA0LCAyNDMsIDIzLCA4LCA0LCAyNDksIAotICAgIDE3MSwgOCwgNCwgMjQ2LCAxNDUsIDgsIDQsIDI0NiwgMTQ2LCA4LCA0LCAyNDgsIDIxNiwgOCwgNCwgMjQ2LCAxNDQsIDgsIAotICAgIDQsIDIzOCwgODUsIDgsIDQsIDI0MCwgMTEzLCA4LCA0LCAyNDYsIDE0MywgOCwgNCwgMjQwLCAxMTIsIDgsIDQsIDI0NiwgCi0gICAgMTM4LCA4LCA0LCAyNDYsIDEzOSwgOCwgNCwgMjQ4LCAyMTQsIDgsIDQsIDI0NiwgMTM3LCA4LCA0LCAyNDYsIDE0OCwgOCwgCi0gICAgNCwgMjQ4LCAyMTcsIDgsIDQsIDI0NiwgMTQ3LCA4LCA0LCAyNDYsIDE0MiwgOCwgNCwgMjQ4LCAyMTUsIDgsIDQsIDI0NiwgCi0gICAgMTQxLCA4LCA0LCAyNDYsIDE1MSwgOCwgNCwgMjQ4LCAyMTgsIDgsIDQsIDI0NiwgMTQ5LCA4LCA0LCAyNDAsIDExNCwgOCwgCi0gICAgNCwgMjQ2LCAxNTAsIDgsIDQsIDI0NiwgMTU0LCA4LCA0LCAyNDYsIDE1NSwgOCwgNCwgMjUyLCAxOTgsIDgsIDQsIDI0NiwgCi0gICAgMTUyLCA4LCA0LCAyNDAsIDExNSwgOCwgNCwgMjQ2LCAxNTMsIDgsIDQsIDI0NSwgNDAsIDgsIDQsIDI0NSwgNDEsIDgsIDQsIAotICAgIDI1MSwgODgsIDgsIDQsIDI0NSwgMzksIDgsIDQsIDIzOSwgMTY2LCA4LCA0LCAyNDUsIDM4LCA4LCA0LCAyMzksIDE2NSwgOCwgCi0gICAgNCwgMjQ1LCAzNSwgOCwgNCwgMjQ1LCAzNiwgOCwgNCwgMjUxLCA4NiwgOCwgNCwgMjQ1LCAzNCwgOCwgNCwgMjM5LCAxNjcsIAotICAgIDgsIDQsIDI0NSwgNDQsIDgsIDQsIDI0NSwgNDMsIDgsIDQsIDI0NSwgNDIsIDgsIDQsIDI0NSwgMzcsIDgsIDQsIDI1MSwgCi0gICAgODcsIDgsIDQsIDI0NSwgNDYsIDgsIDQsIDI1MSwgODksIDgsIDQsIDI0MSwgMjA5LCA4LCA0LCAyMzksIDE2OCwgOCwgNCwgCi0gICAgMjQ1LCA0NSwgOCwgNCwgMjQ1LCA0OSwgOCwgNCwgMjQ1LCA1MCwgOCwgNCwgMjUxLCA5MCwgOCwgNCwgMjQ1LCA0NywgOCwgCi0gICAgNCwgMjM5LCAxNjksIDgsIDQsIDI0NSwgNDgsIDgsIDQsIDI1MSwgMjI3LCA4LCA0LCAxODMsIDgsIDQsIDI1MywgMjQsIDgsIAotICAgIDQsIDI1MSwgMjI2LCA4LCA0LCAyNDUsIDE4MywgOCwgNCwgMjUxLCAyMjIsIDgsIDQsIDI0NSwgMTgyLCA4LCA0LCAyNTEsIAotICAgIDIxMSwgOCwgNCwgMjUxLCAyMTMsIDgsIDQsIDI1MiwgMjA0LCA4LCA0LCAyNTEsIDIxMCwgOCwgNCwgMjQ1LCAyMjUsIDgsIAotICAgIDQsIDI1MSwgMjQyLCA4LCA0LCAyNDUsIDIyNCwgOCwgNCwgMjUxLCAyMzMsIDgsIDQsIDI1MSwgMjM1LCA4LCA0LCAyNTMsIAotICAgIDI1LCA4LCA0LCAyNTEsIDIzMiwgOCwgNCwgMjUxLCAyMTcsIDgsIDQsIDI1MywgNTIsIDgsIDQsIDI1MSwgMjE2LCA4LCA0LCAKLSAgICAyNTEsIDI0NCwgOCwgNCwgMjUxLCAyNDUsIDgsIDQsIDI1MywgMjYsIDgsIDQsIDI1MSwgMjQzLCA4LCA0LCAyNDUsIDIyOCwgCi0gICAgOCwgNCwgMjQ3LCAyMDUsIDgsIDQsIDI1MSwgMjUxLCA4LCA0LCAyNTEsIDI1MiwgOCwgNCwgMjU0LCAxNTMsIDgsIDQsIAotICAgIDI1MSwgMjQ5LCA4LCA0LCAyNDUsIDIzMCwgOCwgNCwgMjUxLCAyNTAsIDgsIDQsIDI0NSwgMjA1LCA4LCA0LCAyNDUsIDIwNiwgCi0gICAgOCwgNCwgMjQ3LCAyMDIsIDgsIDQsIDI0NSwgMjA0LCA4LCA0LCAyNDAsIDE3LCA4LCA0LCAyNDUsIDIwMywgOCwgNCwgMjQwLCAKLSAgICAxNiwgOCwgNCwgMjQ1LCAxOTgsIDgsIDQsIDI0NSwgMTk5LCA4LCA0LCAyNDYsIDE5MCwgOCwgNCwgMjQ1LCAxOTcsIDgsIDQsIAotICAgIDI0NSwgMjA4LCA4LCA0LCAyNDUsIDIwOSwgOCwgNCwgMjQ3LCAyMDMsIDgsIDQsIDI0NSwgMjA3LCA4LCA0LCAyNDUsIDIwMiwgCi0gICAgOCwgNCwgMjQ4LCAxNjYsIDgsIDQsIDI0NSwgMjAxLCA4LCA0LCAyNDUsIDIxMSwgOCwgNCwgMjQ1LCAyMTIsIDgsIDQsIAotICAgIDI0NywgMjA0LCA4LCA0LCAyNDUsIDIxMCwgOCwgNCwgMjQ1LCAyMTUsIDgsIDQsIDI0NSwgMjE2LCA4LCA0LCAyNTEsIDIzNiwgCi0gICAgOCwgNCwgMjQ1LCAyMTMsIDgsIDQsIDI0MCwgMTgsIDgsIDQsIDI0NSwgMjE0LCA4LCA0LCAyNDYsIDExMCwgOCwgNCwgMjQ2LCAKLSAgICAxMTEsIDgsIDQsIDI0NiwgMjIzLCA4LCA0LCAyNDYsIDEwOSwgOCwgNCwgMjQwLCAxMDUsIDgsIDQsIDI0NiwgMTE5LCA4LCAKLSAgICA0LCAyNDAsIDEwNCwgOCwgNCwgMjQ2LCAxMTcsIDgsIDQsIDI0NiwgMTE4LCA4LCA0LCAyNDcsIDIzOSwgOCwgNCwgMjQ2LCAKLSAgICAxMTYsIDgsIDQsIDI0NiwgMTEzLCA4LCA0LCAyNDYsIDExNCwgOCwgNCwgMjQ2LCAyNTEsIDgsIDQsIDI0NiwgMTEyLCA4LCAKLSAgICA0LCAyNDYsIDEyMiwgOCwgNCwgMjQ2LCAxMjMsIDgsIDQsIDI0NywgMjQwLCA4LCA0LCAyNDYsIDEyMCwgOCwgNCwgMjQwLCAKLSAgICAxMDYsIDgsIDQsIDI0NiwgMTIxLCA4LCA0LCAyNDYsIDEyNywgOCwgNCwgMjQ2LCAxMjgsIDgsIDQsIDI1MiwgMTc1LCA4LCAKLSAgICA0LCAyNDYsIDEyNSwgOCwgNCwgMjQwLCAxMDcsIDgsIDQsIDI0NiwgMTI2LCA4LCA0LCAyNDIsIDI0NSwgOCwgNCwgMjQyLCAKLSAgICAyNDYsIDgsIDQsIDI0NiwgMTc2LCA4LCA0LCAyNDIsIDI0NCwgOCwgNCwgMjM4LCAxNTIsIDgsIDQsIDIzOCwgMTUzLCA4LCAKLSAgICA0LCAyNDMsIDAsIDgsIDQsIDIzOCwgMTUxLCA4LCA0LCAyNDIsIDI1NCwgOCwgNCwgMjQyLCAyNTUsIDgsIDQsIDI0NywgMjksIAotICAgIDgsIDQsIDI0MiwgMjUzLCA4LCA0LCAyNDIsIDI0OCwgOCwgNCwgMjQyLCAyNDksIDgsIDQsIDI0NiwgMjE3LCA4LCA0LCAKLSAgICAyNDIsIDI0NywgOCwgNCwgMjQzLCAzLCA4LCA0LCAyNDcsIDEyNCwgOCwgNCwgMjQzLCAxLCA4LCA0LCAyMzgsIDE1NCwgOCwgCi0gICAgNCwgMjQzLCAyLCA4LCA0LCAyNDMsIDcsIDgsIDQsIDI0MywgOCwgOCwgNCwgMjQ5LCAxNTcsIDgsIDQsIDI0MywgNSwgOCwgCi0gICAgNCwgMjM4LCAxNTUsIDgsIDQsIDI0MywgNiwgOCwgNCwgMjQ1LCAxMjEsIDgsIDQsIDI0NiwgMjIxLCA4LCA0LCAyMzksIAotICAgIDIyNywgOCwgNCwgMjQ1LCAxMjksIDgsIDQsIDI0NSwgMTI3LCA4LCA0LCAyNDUsIDEyOCwgOCwgNCwgMjQ4LCAxNTEsIDgsIAotICAgIDQsIDI0NSwgMTI2LCA4LCA0LCAyNDUsIDEyNCwgOCwgNCwgMjQ1LCAxMjUsIDgsIDQsIDI1MSwgMTkxLCA4LCA0LCAyNDUsIAotICAgIDEyMywgOCwgNCwgMjQ1LCAxMzIsIDgsIDQsIDI0NSwgMTMzLCA4LCA0LCAyNTEsIDE5MiwgOCwgNCwgMjQ1LCAxMzAsIDgsIAotICAgIDQsIDIzOSwgMjI4LCA4LCA0LCAyNDUsIDEzMSwgOCwgNCwgMjQ1LCAxMzYsIDgsIDQsIDI0NSwgMTM3LCA4LCA0LCAyNTEsIAotICAgIDE5MywgOCwgNCwgMjQ1LCAxMzQsIDgsIDQsIDIzOSwgMjI5LCA4LCA0LCAyNDUsIDEzNSwgOCwgNCwgMjQ0LCAyNTMsIDgsIAotICAgIDQsIDI0NCwgMjU0LCA4LCA0LCAyNDgsIDExNywgOCwgNCwgMjQ0LCAyNTIsIDgsIDQsIDI0NSwgMywgOCwgNCwgMjUxLCA3NCwgCi0gICAgOCwgNCwgMjQ1LCAyLCA4LCA0LCAyNDUsIDAsIDgsIDQsIDI0NSwgMSwgOCwgNCwgMjUxLCA3MywgOCwgNCwgMjQ0LCAyNTUsIAotICAgIDgsIDQsIDI0NSwgNiwgOCwgNCwgMjQ1LCA3LCA4LCA0LCAyNTEsIDc1LCA4LCA0LCAyNDUsIDQsIDgsIDQsIDIzOSwgMTU3LCAKLSAgICA4LCA0LCAyNDUsIDUsIDgsIDQsIDI0NSwgMTAsIDgsIDQsIDI0NSwgMTEsIDgsIDQsIDI1MSwgNzYsIDgsIDQsIDI0NSwgOCwgCi0gICAgOCwgNCwgMjM5LCAxNTgsIDgsIDQsIDI0NSwgOSwgOCwgNCwgMjQxLCAyMzUsIDgsIDQsIDI0NSwgMTYwLCA4LCA0LCAyNDYsIAotICAgIDE2NSwgOCwgNCwgMjQ1LCAxNTgsIDgsIDQsIDIzOSwgMjUzLCA4LCA0LCAyNDUsIDE3MywgOCwgNCwgMjM5LCAyNTIsIDgsIAotICAgIDQsIDI0NSwgMTcxLCA4LCA0LCAyNDUsIDE3MiwgOCwgNCwgMjQ2LCAyNDUsIDgsIDQsIDI0MSwgMjQwLCA4LCA0LCAyNDUsIAotICAgIDE2MywgOCwgNCwgMjQ1LCAxNjQsIDgsIDQsIDI0NiwgMTg2LCA4LCA0LCAyNDUsIDE2MiwgOCwgNCwgMjQ1LCAxNzUsIDgsIAotICAgIDQsIDI0NSwgMTc2LCA4LCA0LCAyNDYsIDI0NiwgOCwgNCwgMjQ1LCAxNzQsIDgsIDQsIDIzOSwgMjU0LCA4LCA0LCAyNDEsIAotICAgIDI0MiwgOCwgNCwgMjQ1LCAxODAsIDgsIDQsIDI0NSwgMTgxLCA4LCA0LCAyNDgsIDE2MCwgOCwgNCwgMjQ1LCAxNzgsIDgsIAotICAgIDQsIDIzOSwgMjU1LCA4LCA0LCAyNDUsIDE3OSwgOCwgNCwgMjQ4LCAxNDYsIDgsIDQsIDI1MSwgMTc0LCA4LCA0LCAyMDgsIAotICAgIDgsIDQsIDI0NywgMTk2LCA4LCA0LCAyNDUsIDE0MSwgOCwgNCwgMjUxLCAxOTYsIDgsIDQsIDI0NSwgMTQwLCA4LCA0LCAKLSAgICAyNTEsIDE4OSwgOCwgNCwgMjUxLCAxOTAsIDgsIDQsIDI1MiwgMjQ2LCA4LCA0LCAyNTEsIDE4OCwgOCwgNCwgMjUxLCAxODAsIAotICAgIDgsIDQsIDI1MywgMzYsIDgsIDQsIDI1MSwgMTc4LCA4LCA0LCAyNTEsIDE5OSwgOCwgNCwgMjUxLCAyMDAsIDgsIDQsIDI1MywgCi0gICAgMywgOCwgNCwgMjUxLCAxOTcsIDgsIDQsIDI0NSwgMTQyLCA4LCA0LCAyNTEsIDE5OCwgOCwgNCwgMjUxLCAyMDUsIDgsIDQsIAotICAgIDI1MSwgMjA2LCA4LCA0LCAyNTQsIDYsIDgsIDQsIDI1MSwgMjAzLCA4LCA0LCAyNDUsIDE0NCwgOCwgNCwgMjUxLCAyMDQsIAotICAgIDgsIDQsIDI1MCwgMTMzLCA4LCA0LCAyNTAsIDEzNCwgOCwgNCwgMjUzLCAxMDQsIDgsIDQsIDI1MCwgMTMyLCA4LCA0LCAKLSAgICAyNDQsIDE4LCA4LCA0LCAyNDQsIDE5LCA4LCA0LCAyNTAsIDEzMSwgOCwgNCwgMjQ0LCAxNywgOCwgNCwgMjQ0LCAzOSwgOCwgCi0gICAgNCwgMjQ0LCA0MCwgOCwgNCwgMjUwLCAxNDEsIDgsIDQsIDI0NCwgMzgsIDgsIDQsIDI0NywgMTUsIDgsIDQsIDI1MCwgMTM5LCAKLSAgICA4LCA0LCAyNTMsIDkwLCA4LCA0LCAyNTAsIDEzOCwgOCwgNCwgMjUwLCAxNDQsIDgsIDQsIDI1MCwgMTQ1LCA4LCA0LCAyNTMsIAotICAgIDExOCwgOCwgNCwgMjUwLCAxNDIsIDgsIDQsIDI0NCwgNDEsIDgsIDQsIDI1MCwgMTQzLCA4LCA0LCAyNTAsIDE0OSwgOCwgNCwgCi0gICAgMjUwLCAxNTAsIDgsIDQsIDI1NCwgNzUsIDgsIDQsIDI1MCwgMTQ3LCA4LCA0LCAyNDQsIDQyLCA4LCA0LCAyNTAsIDE0OCwgCi0gICAgOCwgNCwgMjUxLCAxMzksIDgsIDQsIDI1MSwgMTQwLCA4LCA0LCAyNTMsIDEzMSwgOCwgNCwgMjUxLCAxMzgsIDgsIDQsIAotICAgIDI0NSwgOTgsIDgsIDQsIDI0NSwgOTksIDgsIDQsIDI1MSwgMTM3LCA4LCA0LCAyNDUsIDk3LCA4LCA0LCAyNDUsIDEwMiwgOCwgCi0gICAgNCwgMjQ1LCAxMDMsIDgsIDQsIDI0OCwgMTQ0LCA4LCA0LCAyNDUsIDEwMSwgOCwgNCwgMjQ4LCAxNDMsIDgsIDQsIDI1MSwgCi0gICAgMTQ0LCA4LCA0LCAyNTMsIDE1OSwgOCwgNCwgMjUxLCAxNDMsIDgsIDQsIDI1MSwgMTUxLCA4LCA0LCAyNTEsIDE1MywgOCwgCi0gICAgNCwgMjUzLCAxMzIsIDgsIDQsIDI1MSwgMTQ5LCA4LCA0LCAyNDUsIDEwNCwgOCwgNCwgMjUxLCAxNTAsIDgsIDQsIDI1MSwgCi0gICAgMTYzLCA4LCA0LCAyNTEsIDE2NSwgOCwgNCwgMjU0LCAxNDEsIDgsIDQsIDI1MSwgMTYxLCA4LCA0LCAyNDUsIDExMCwgOCwgCi0gICAgNCwgMjUxLCAxNjIsIDgsIDQsIDI0NCwgMjIsIDgsIDQsIDI0NCwgMjMsIDgsIDQsIDI0OCwgNzEsIDgsIDQsIDI0NCwgMjEsIAotICAgIDgsIDQsIDIzOSwgNDUsIDgsIDQsIDIzOSwgNDYsIDgsIDQsIDI0MSwgMTY2LCA4LCA0LCAyMzksIDQ0LCA4LCA0LCAyMzksIAotICAgIDQ4LCA4LCA0LCAyNDQsIDI3LCA4LCA0LCAyMzksIDQ3LCA4LCA0LCAyNDQsIDI1LCA4LCA0LCAyNDQsIDI2LCA4LCA0LCAKLSAgICAyNDgsIDcyLCA4LCA0LCAyNDQsIDI0LCA4LCA0LCAyNDEsIDE2NywgOCwgNCwgMjQ0LCAzMCwgOCwgNCwgMjQ4LCA3MywgOCwgCi0gICAgNCwgMjQ0LCAyOCwgOCwgNCwgMjM5LCA0OSwgOCwgNCwgMjQ0LCAyOSwgOCwgNCwgMjQ0LCAzMiwgOCwgNCwgMjQ0LCAzMywgCi0gICAgOCwgNCwgMjQ4LCA3NCwgOCwgNCwgMjQ0LCAzMSwgOCwgNCwgMjQ0LCAyMzMsIDgsIDQsIDI0NCwgMjM0LCA4LCA0LCAyNDgsIAotICAgIDExMywgOCwgNCwgMjQ0LCAyMzIsIDgsIDQsIDIzOSwgMTQ3LCA4LCA0LCAyMzksIDE0OCwgOCwgNCwgMjQ0LCAyMzEsIDgsIAotICAgIDQsIDIzOSwgMTQ2LCA4LCA0LCAyMzksIDE0OSwgOCwgNCwgMjQ0LCAyMzksIDgsIDQsIDI0NCwgMjM3LCA4LCA0LCAyNDQsIAotICAgIDIzOCwgOCwgNCwgMjQ4LCAxMTQsIDgsIDQsIDI0NCwgMjM2LCA4LCA0LCAyNDQsIDI0MiwgOCwgNCwgMjQ4LCAxMTUsIDgsIAotICAgIDQsIDI0NCwgMjQwLCA4LCA0LCAyMzksIDE1MCwgOCwgNCwgMjQ0LCAyNDEsIDgsIDQsIDI0NCwgMjQ1LCA4LCA0LCAyNDQsIAotICAgIDI0NiwgOCwgNCwgMjUxLCA2NiwgOCwgNCwgMjQ0LCAyNDMsIDgsIDQsIDIzOSwgMTUxLCA4LCA0LCAyNDQsIDI0NCwgOCwgNCwgCi0gICAgMjQ1LCAyMiwgOCwgNCwgMjQ1LCAyMywgOCwgNCwgMjQ3LCA0NCwgOCwgNCwgMjQxLCAyMDcsIDgsIDQsIDIzOSwgMTYxLCA4LCAKLSAgICA0LCAyMzksIDE2MiwgOCwgNCwgMjQ1LCAyMSwgOCwgNCwgMjM5LCAxNjAsIDgsIDQsIDIzOSwgMTY0LCA4LCA0LCAyNDUsIAotICAgIDI5LCA4LCA0LCAyMzksIDE2MywgOCwgNCwgMjQ1LCAyNywgOCwgNCwgMjQ1LCAyOCwgOCwgNCwgMjQ3LCAxOSwgOCwgNCwgCi0gICAgMjQxLCAyMDgsIDgsIDQsIDI0NSwgMzEsIDgsIDQsIDI0NSwgMzIsIDgsIDQsIDI0NywgMTg1LCA4LCA0LCAyNDUsIDMwLCA4LCAKLSAgICA0LCAyNTIsIDExNCwgOCwgNCwgMjUyLCAxMTUsIDgsIDQsIDI1MywgMzgsIDgsIDQsIDI1MiwgMTEzLCA4LCA0LCAyNDYsIAotICAgIDY0LCA4LCA0LCAyNDYsIDY1LCA4LCA0LCAyNTIsIDExMiwgOCwgNCwgMjQ2LCA2MywgOCwgNCwgMjQ2LCA2NywgOCwgNCwgCi0gICAgMjUyLCAxMjEsIDgsIDQsIDI1MiwgMTE5LCA4LCA0LCAyNTIsIDEyMCwgOCwgNCwgMjU0LCAxOCwgOCwgNCwgMjUyLCAxMTcsIAotICAgIDgsIDQsIDI1MiwgMTMxLCA4LCA0LCAyNTIsIDEzMywgOCwgNCwgMjU0LCAxNzQsIDgsIDQsIDI1MiwgMTI5LCA4LCA0LCAKLSAgICAyNDYsIDcyLCA4LCA0LCAyNTIsIDEzMCwgOCwgNCwgMjQ4LCAyMDIsIDgsIDQsIDI1MiwgMTUyLCA4LCA0LCAyNTMsIDI4LCAKLSAgICA4LCA0LCAyNTIsIDE1MSwgOCwgNCwgMjQ2LCA5MCwgOCwgNCwgMjQ2LCA5MSwgOCwgNCwgMjUyLCAxNDksIDgsIDQsIDI0NiwgCi0gICAgODksIDgsIDQsIDI0NiwgMTAyLCA4LCA0LCAyNDYsIDEwMywgOCwgNCwgMjUyLCAxNTcsIDgsIDQsIDI0NiwgMTAxLCA4LCA0LCAKLSAgICAyNDgsIDIwMywgOCwgNCwgMjUyLCAxNTUsIDgsIDQsIDI1MiwgMjUxLCA4LCA0LCAyNTIsIDE1NCwgOCwgNCwgMjUyLCAxNjAsIAotICAgIDgsIDQsIDI1MiwgMTYxLCA4LCA0LCAyNTIsIDIzMywgOCwgNCwgMjUyLCAxNTgsIDgsIDQsIDI0NiwgMTA0LCA4LCA0LCAKLSAgICAyNTIsIDE1OSwgOCwgNCwgMjUyLCAxNjQsIDgsIDQsIDI1MiwgMTY1LCA4LCA0LCAyNTMsIDIwMywgOCwgNCwgMjUyLCAxNjIsIAotICAgIDgsIDQsIDI0NiwgMTA1LCA4LCA0LCAyNTIsIDE2MywgOCwgMjksIDI0OCwgMTQzLCA4LCAyOSwgMjUzLCA0MiwgOCwgMjksIAotICAgIDI0OCwgODMsIDgsIDI5LCAyNDEsIDIwNywgOCwgMjksIDI0OCwgMTUsIDgsIDI5LCAyNDcsIDIwMiwgOCwgMjksIDI0MSwgCi0gICAgMTM5LCA4LCAyOSwgMjQ4LCA0NywgOCwgMjksIDI1MiwgMjM5LCA4LCAyOSwgMjQxLCAxNTksIDgsIDI5LCAyNDgsIDk3LCA4LCAKLSAgICAyOSwgMjQxLCA5OCwgOCwgMjksIDI0OCwgMTAxLCA4LCAyOSwgMjUyLCAyNTEsIDgsIDI5LCAyNDgsIDEzNiwgOCwgMjksIAotICAgIDI0MSwgMTYxLCA4LCAyOSwgMjQ4LCAxNzAsIDgsIDI5LCAyNTIsIDIwNSwgOCwgMjksIDI0OCwgMjEyLCA4LCAyOSwgMjQ4LCAKLSAgICAxNiwgOCwgMjksIDI0MSwgMTE4LCA4LCAyOSwgMjQ3LCAxMSwgOCwgMjksIDI0MSwgMTQwLCA4LCAyOSwgMjQxLCAyMDgsIDgsIAotICAgIDI5LCAyNTMsIDE4LCA4LCAyOSwgMjUzLCAyNTUsIDgsIDI5LCAyNDEsIDE2NywgOCwgMjksIDI0OCwgMjExLCA4LCAyOSwgCi0gICAgMjQ4LCAxMzgsIDgsIDI5LCAyNDgsIDYyLCA4LCAyOSwgMjQ4LCAyMDIsIDgsIDI5LCAyNDgsIDE5MywgOCwgMjksIDI0OCwgCi0gICAgMTYwLCA4LCAyOSwgMjQ4LCAxOTAsIDgsIDI5LCAyNTIsIDIyNiwgOCwgMjksIDI1MywgOTAsIDgsIDI5LCAyNDEsIDIwOSwgCi0gICAgOCwgMjksIDI0OCwgNzQsIDgsIDI5LCAyNDgsIDU2LCA4LCAyOSwgMjQxLCAxNjYsIDgsIDI5LCAyNTMsIDEwLCA4LCAyOSwgCi0gICAgMjUzLCAzMSwgOCwgMjksIDI0MSwgMjQyLCA4LCAyOSwgMjQ4LCA5MywgOCwgMjksIDI1MywgMjEzLCA4LCAyOSwgMjQxLCAKLSAgICAxMTEsIDgsIDI5LCAyNDgsIDgsIDgsIDI5LCAyNDEsIDE2MCwgOCwgMjksIDI0MSwgMjM1LCA4LCAyOSwgMjQ4LCAyMTMsIDgsIAotICAgIDI5LCAyNDEsIDI0MCwgOCwgMjksIDI0NiwgMjE3LCA4LCAyOSwgMjM4LCA4NSwgOCwgMjksIDI0MSwgMjAwLCA4LCAyOSwgCi0gICAgMjUzLCA2LCAzNCwgNCwgMjUyLCAyMzEsIDM0LCA0LCAyNDksIDIyNCwgMzQsIDQsIDI0NywgMTQ5LCAzNCwgNCwgMjQ3LCAKLSAgICAyMjYsIDM0LCA0LCAyNDYsIDUzLCAzNCwgNCwgMjQ3LCA0NiwgMzQsIDQsIDI0MiwgMjAzLCAzNCwgNCwgMjQ3LCAyOCwgMzQsIAotICAgIDQsIDI0NCwgMTE4LCAzNCwgNCwgMjQ0LCA2NiwgMzQsIDQsIDIzOSwgMTA3LCAzNCwgNCwgMjQzLCAxMTYsIDM0LCA0LCAKLSAgICAyNDcsIDE0MCwgMzQsIDQsIDI0NywgMTEzLCAzNCwgNCwgMjQ3LCAxMDYsIDM0LCA0LCAyNDAsIDIzOCwgMzQsIDQsIDI0MywgCi0gICAgNjEsIDM0LCA0LCAyMzgsIDE4NCwgMzQsIDQsIDI0NywgMTY4LCAzNCwgNCwgMjQ3LCAxOTcsIDM0LCA0LCAyNDcsIDMwLCAKLSAgICAzNCwgNCwgMjQ0LCAxODcsIDM0LCA0LCAyNDcsIDUwLCAzNCwgNCwgMjQxLCA3MCwgMzQsIDQsIDI0NywgNjQsIDM0LCA0LCAKLSAgICAyNDEsIDI1LCAzNCwgNCwgMjQ4LCA2LCAzNCwgNCwgMjQ3LCAzOCwgMzQsIDQsIDI0NCwgMjMwLCAzNCwgNCwgMjQ3LCA2MiwgCi0gICAgMzQsIDQsIDI0OCwgODAsIDM0LCA0LCAyMzksIDEzNSwgMzQsIDQsIDI0NywgMTQ0LCAzNCwgNCwgMjQ3LCAxNzIsIDM0LCA0LCAKLSAgICAyNDcsIDE4MSwgMzQsIDQsIDI0MSwgMjA2LCAzNCwgNCwgNzQsIDM0LCA0LCAyNTMsIDc5LCAzNCwgNCwgMjUzLCA0MSwgMzQsIAotICAgIDQsIDI1MCwgNzYsIDM0LCA0LCAyNTMsIDI3LCAzNCwgNCwgMjUyLCAxMDAsIDM0LCA0LCAyNTIsIDIyMywgMzQsIDQsIDI0OSwgCi0gICAgMTE1LCAzNCwgNCwgMjUzLCAzMCwgMzQsIDQsIDI1MSwgMSwgMzQsIDQsIDI1MCwgMTgzLCAzNCwgNCwgMjQ0LCAxMjgsIDM0LCAKLSAgICA0LCAyNTAsIDE3LCAzNCwgNCwgMjUzLCA4OCwgMzQsIDQsIDI1MywgMTM4LCAzNCwgNCwgMjUzLCA0NCwgMzQsIDQsIDI0NywgCi0gICAgNywgMzQsIDQsIDI0OSwgMTkwLCAzNCwgNCwgMjQzLCA2NCwgMzQsIDQsIDI1MywgNDIsIDM0LCA0LCAyNTMsIDM3LCAzNCwgCi0gICAgNCwgMjUzLCAxMiwgMzQsIDQsIDI0OCwgMTA3LCAzNCwgNCwgMjUzLCAyNCwgMzQsIDQsIDI0NywgNTEsIDM0LCA0LCAyNTMsIAotICAgIDcyLCAzNCwgNCwgMjQ3LCAyMzgsIDM0LCA0LCAyNTMsIDE0MywgMzQsIDQsIDI1MywgMTA0LCAzNCwgNCwgMjQ4LCAxMTMsIAotICAgIDM0LCA0LCAyNTMsIDI4LCAzNCwgNCwgMjUzLCA3LCAzNCwgNCwgMjQ0LCAyMTIsIDM0LCA0LCAyNTMsIDM5LCAzNCwgNCwgCi0gICAgMjUyLCAyMzksIDM0LCA0LCAyNTIsIDI0OCwgMzQsIDQsIDI0NywgNDQsIDM0LCA0LCA1NywgMzQsIDQsIDI1MywgNSwgMzQsIAotICAgIDQsIDI0NCwgMjA0LCAzNCwgNCwgMTU0LCAzNCwgNCwgMjUwLCA2MSwgMzQsIDQsIDI1MiwgMjA4LCAzNCwgNCwgMjUyLCA5MywgCi0gICAgMzQsIDQsIDIxMywgMzQsIDQsIDI0NiwgMTk5LCAzNCwgNCwgMjUyLCAyMTEsIDM0LCA0LCAyNDgsIDk5LCAzNCwgNCwgMjQ4LCAKLSAgICA4NSwgMzQsIDQsIDI0NCwgNjUsIDM0LCA0LCAyNDQsIDEyNiwgMzQsIDQsIDI0OCwgNDYsIDM0LCA0LCAyNTIsIDIzNCwgMzQsIAotICAgIDQsIDI1MiwgMjQzLCAzNCwgNCwgMjUyLCAyMDIsIDM0LCA0LCAyNDYsIDE3MywgMzQsIDQsIDI0NiwgMTk2LCAzNCwgNCwgCi0gICAgMjQzLCA2MiwgMzQsIDQsIDI1MiwgMjAwLCAzNCwgNCwgMjA4LCAzNCwgNCwgMjUyLCAyMDMsIDM0LCA0LCAyNDcsIDE4MCwgCi0gICAgMzQsIDQsIDI1MiwgMjA0LCAzNCwgNCwgMjQ2LCAxNjUsIDM0LCA0LCAyNTIsIDIyNiwgMzQsIDQsIDI0NiwgMjIzLCAzNCwgCi0gICAgNCwgMjUyLCAyMTUsIDM0LCA0LCAyNTIsIDIxMywgMzQsIDQsIDI1MSwgNjUsIDM0LCA0LCAxOTEsIDM0LCA0LCAxNzcsIDM0LCAKLSAgICA0LCAyNDcsIDM5LCAzNCwgNCwgMjQxLCAyMDEsIDM0LCA0LCAyNTIsIDIwNSwgMzQsIDQsIDE5OCwgMzQsIDQsIDI1MiwgCi0gICAgMjAxLCAzNCwgNCwgMjQ2LCAxODEsIDM0LCA0LCAyNTIsIDIyMCwgMzQsIDQsIDI1MSwgOTksIDM0LCA0LCAyNDgsIDY1LCAKLSAgICAzNCwgNCwgMjQ3LCAxMTYsIDM0LCA0LCAyNDYsIDU3LCAzNCwgNCwgMjQ3LCAxODksIDM0LCA0LCAyNDIsIDIwNCwgMzQsIDQsIAotICAgIDI0OSwgMTI2LCAzNCwgNCwgMjQ0LCAxMTksIDM0LCA0LCAyNDQsIDY4LCAzNCwgNCwgMjM5LCAxMDgsIDM0LCA0LCAyNDMsIAotICAgIDExOSwgMzQsIDQsIDI0OCwgMzksIDM0LCA0LCAyNTIsIDgwLCAzNCwgNCwgMjQ3LCAxMDksIDM0LCA0LCAyNDEsIDgwLCAzNCwgCi0gICAgNCwgMjQzLCA2NywgMzQsIDQsIDIzOCwgMTg1LCAzNCwgNCwgMjQ3LCA4NywgMzQsIDQsIDI0OCwgMTQ5LCAzNCwgNCwgMjQ5LCAKLSAgICAyMDQsIDM0LCA0LCAyNDQsIDE5NCwgMzQsIDQsIDI0NywgMTA0LCAzNCwgNCwgMjQxLCAyMzksIDM0LCA0LCAyNDgsIDIxMCwgCi0gICAgMzQsIDQsIDI0NiwgMTE1LCAzNCwgNCwgMjQ3LCAxMjYsIDM0LCA0LCAyNTAsIDEzNywgMzQsIDQsIDI0NCwgMjM1LCAzNCwgCi0gICAgNCwgMjQ3LCAyMzQsIDM0LCA0LCAyNDcsIDE2MiwgMzQsIDQsIDIzOSwgMTM3LCAzNCwgNCwgMjUwLCAzNywgMzQsIDQsIAotICAgIDI0NywgMTc1LCAzNCwgNCwgMjQ3LCAxODMsIDM0LCA0LCAyNDUsIDI2LCAzNCwgNCwgNjYsIDM0LCA0LCAyNTMsIDEyMSwgCi0gICAgMzQsIDQsIDI1MywgNTksIDM0LCA0LCAyNTAsIDk2LCAzNCwgNCwgMjUzLCAxMDksIDM0LCA0LCAyNTIsIDEwNywgMzQsIDQsIAotICAgIDI1MywgODIsIDM0LCA0LCAyNDksIDExNiwgMzQsIDQsIDI1MywgNDgsIDM0LCA0LCAyNTEsIDMsIDM0LCA0LCAyNTAsIDE4NSwgCi0gICAgMzQsIDQsIDI0NCwgMTMwLCAzNCwgNCwgMjUwLCAxOSwgMzQsIDQsIDI1MywgMTc4LCAzNCwgNCwgMjUzLCAxMzksIDM0LCA0LCAKLSAgICAyNTMsIDE4LCAzNCwgNCwgMjQ3LCAyMTMsIDM0LCA0LCAyNDksIDE5MSwgMzQsIDQsIDI0MywgNjYsIDM0LCA0LCAyNTMsIAotICAgIDIyLCAzNCwgNCwgMjUzLCAzLCAzNCwgNCwgMjUzLCAzMSwgMzQsIDQsIDI0OCwgMTA5LCAzNCwgNCwgMjUzLCAyNiwgMzQsIAotICAgIDQsIDI0NiwgMjQ2LCAzNCwgNCwgMjUzLCA5NywgMzQsIDQsIDI0NywgMjQwLCAzNCwgNCwgMjUzLCAxNzIsIDM0LCA0LCAKLSAgICAyNTMsIDExOCwgMzQsIDQsIDI0OCwgMTE1LCAzNCwgNCwgMjUyLCAyMzMsIDM0LCA0LCAyNTMsIDM0LCAzNCwgNCwgMjQ0LCAKLSAgICAyMTQsIDM0LCA0LCAyNTMsIDQwLCAzNCwgNCwgMjUyLCAyMjksIDM0LCA0LCAyNTIsIDIyNywgMzQsIDQsIDI0NywgMTg1LCAKLSAgICAzNCwgNCwgNzMsIDM0LCA0LCAyNTMsIDEwNiwgMzQsIDQsIDI0NCwgMjE4LCAzNCwgNCwgMjUzLCAyMSwgMzQsIDQsIDI0OCwgCi0gICAgNjQsIDM0LCA0LCAyNTMsIDEwLCAzNCwgNCwgMjUyLCAxMDMsIDM0LCA0LCAyNTMsIDUwLCAzNCwgNCwgMjQ3LCAyNTQsIDM0LCAKLSAgICA0LCAyNTMsIDk4LCAzNCwgNCwgMjUxLCAyLCAzNCwgNCwgMjUwLCAxODQsIDM0LCA0LCAyNDQsIDEyOSwgMzQsIDQsIDI1MCwgCi0gICAgMTgsIDM0LCA0LCAyNDMsIDExOCwgMzQsIDQsIDI1MywgMTQ4LCAzNCwgNCwgMjUzLCAxMDgsIDM0LCA0LCA5NiwgMzQsIDQsIAotICAgIDI0NiwgMjI4LCAzNCwgNCwgMjQ4LCAyNiwgMzQsIDQsIDI0MywgNjUsIDM0LCA0LCAyNTMsIDQ5LCAzNCwgNCwgMjUyLCAKLSAgICAyNDYsIDM0LCA0LCAyNTMsIDU3LCAzNCwgNCwgMjQ4LCAxMDgsIDM0LCA0LCAyNTMsIDI1LCAzNCwgNCwgMjQ2LCAyNDUsIAotICAgIDM0LCA0LCAyNTMsIDY1LCAzNCwgNCwgMjQ3LCAyMzksIDM0LCA0LCAyNTMsIDY2LCAzNCwgNCwgMjUzLCA5MCwgMzQsIDQsIAotICAgIDI0OCwgMTE0LCAzNCwgNCwgMjUyLCAyNTEsIDM0LCA0LCAyNTMsIDMzLCAzNCwgNCwgMjQ0LCAyMTMsIDM0LCA0LCAyNTMsIAotICAgIDc2LCAzNCwgNCwgMjUzLCAxNCwgMzQsIDQsIDI1MywgOCwgMzQsIDQsIDI0NywgMTksIDM0LCA0LCA3MiwgMzQsIDQsIDI1MiwgCi0gICAgMjMyLCAzNCwgNCwgMjQ0LCAyMDgsIDM0LCA0LCAyNTIsIDI1MiwgMzQsIDQsIDI1MCwgNjYsIDM0LCA0LCAyNTIsIDI1MCwgCi0gICAgMzQsIDQsIDI1MiwgOTcsIDM0LCA0LCAyNTMsIDAsIDM0LCA0LCAyNDksIDExNCwgMzQsIDQsIDI1MywgNzMsIDM0LCA0LCAKLSAgICAyNTEsIDAsIDM0LCA0LCAyNTAsIDE4MiwgMzQsIDQsIDI0NCwgNjcsIDM0LCA0LCAyNDQsIDEyNywgMzQsIDQsIDI1MCwgMTYsIAotICAgIDM0LCA0LCAyNDMsIDExNywgMzQsIDQsIDI1MywgMTQ3LCAzNCwgNCwgMjUzLCA5NSwgMzQsIDQsIDI1MywgOSwgMzQsIDQsIAotICAgIDI0NiwgMjQ3LCAzNCwgNCwgMjQ5LCAxODksIDM0LCA0LCAyNDMsIDYzLCAzNCwgNCwgMjUzLCA4MCwgMzQsIDQsIDI1MywgCi0gICAgMzYsIDM0LCA0LCAyNTMsIDIwLCAzNCwgNCwgMjQ4LCAxMDYsIDM0LCA0LCAyNTMsIDUyLCAzNCwgNCwgMjQ2LCAxODYsIDM0LCAKLSAgICA0LCAyNTMsIDQ2LCAzNCwgNCwgMjQ2LCAyNTEsIDM0LCA0LCAyNTMsIDE0MSwgMzQsIDQsIDI1MywgMTE3LCAzNCwgNCwgCi0gICAgMjQ3LCA0MywgMzQsIDQsIDI1MywgOTYsIDM0LCA0LCAyNTMsIDYsIDM0LCA0LCAyNDQsIDIxMSwgMzQsIDQsIDIzOSwgMTM2LCAKLSAgICAzNCwgNCwgMjUzLCAxMDMsIDM0LCA0LCAyNTAsIDIzLCAzNCwgNCwgMjUzLCAxMywgMzQsIDQsIDI1MiwgMjQ3LCAzNCwgNCwgCi0gICAgMjQ4LCAxMTksIDM0LCA0LCAyNTMsIDY5LCAzNCwgNCwgMjMwLCA3NywgMzQsIDIzNywgNjcsIDM0LCAyNDYsIDE2MiwgMjQwLCAKLSAgICAxMjEsIDM0LCAyMzMsIDgyLCA3NiwgMzQsIDQsIDI0MCwgMjMxLCAyNTIsIDIzNCwgMzQsIDQsIDI0MCwgMjMxLCAxNzcsIAotICAgIDM0LCA0LCAyNDAsIDIzMSwgMjQ3LCAxMDQsIDM0LCAxNCwgMjM4LCAyMTQsIDM0LCAxNCwgMjM5LCA1OSwgMzQsIDE0LCAKLSAgICAyNDUsIDI1MywgMzQsIDE0LCAyNDgsIDExMiwgMzQsIDE0LCAyNDIsIDE3MywgMzQsIDE0LCAyNDcsIDEzOSwgMzQsIDE0LCAKLSAgICAyNDcsIDIwNywgMzQsIDE0LCAyNDEsIDExNywgMzQsIDE0LCAyMzgsIDE5MCwgMzQsIDE0LCAyNDQsIDY5LCAzNCwgMTQsIAotICAgIDI0NiwgMiwgMzQsIDE0LCAyNDMsIDc1LCAzNCwgMTQsIDI0NCwgMzQsIDM0LCAyMSwgMjQwLCAxMjYsIDM0LCAyMSwgMTE4LCAKLSAgICAzNCwgMjEsIDExMywgMzQsIDIxLCAxNjYsIDM0LCAyMSwgMTU4LCAzNCwgMjEsIDE3MywgMzQsIDIxLCAxODMsIDM0LCAyMSwgCi0gICAgMTk0LCAzNCwgMjEsIDE4NywgMzQsIDIxLCAxOTIsIDM0LCA0LCAyNDAsIDIzMSwgMTk4LCAzNCwgNCwgMjQwLCAyMzEsIAotICAgIDI1MywgNTcsIDI4LCA2LCAxLCAyMzUsIDIzNiwgMjgsIDMsIDEsIDIzNSwgMjM2LCAyOCwgNiwgMSwgMjM3LCAxODAsIDI4LCAKLSAgICAzLCAxLCAyMzcsIDE4MCwgMjgsIDYsIDEsIDIwMCwgMjQ2LCAyNTUsIDI4LCAzLCAxLCAyMDAsIDI0NiwgMjU1LCAyOCwgNiwgCi0gICAgMSwgMjQwLCAxNDYsIDI4LCAzLCAxLCAyNDAsIDE0NiwgMjgsIDYsIDEsIDIzNywgMjAxLCAyOCwgMywgMSwgMjM3LCAyMDEsIAotICAgIDI4LCA2LCAxLCAyMzEsIDI1NCwgMjUzLCAxMzcsIDI4LCAzLCAxLCAyMzEsIDI1NCwgMjUzLCAxMzcsIDI4LCA2LCAxLCAKLSAgICAyNDEsIDEwNCwgMjM3LCA2OCwgMjgsIDMsIDEsIDI0MSwgMTA0LCAyMzcsIDY4LCAyOCwgNiwgMSwgMjM1LCAxOTUsIDI0NywgCi0gICAgMTE4LCAyOCwgMywgMSwgMjM1LCAxOTUsIDI0NywgMTE4LCAyOCwgNiwgMSwgMjQ3LCAxMTksIDIsIDI0NywgMjQ4LCAyNDcsIAotICAgIDExOCwgMjgsIDMsIDEsIDI0NywgMTE5LCAyLCAyNDcsIDI0OCwgMjQ3LCAxMTgsIDI4LCA2LCAxLCAyMzMsIDkzLCAyNDcsIAotICAgIDI1LCAyOCwgMywgMSwgMjMzLCA5MywgMjQ3LCAyNSwgMjgsIDYsIDEsIDIwMCwgMjUyLCAyMzMsIDI4LCAzLCAxLCAyMDAsIAotICAgIDI1MiwgMjMzLCAyOCwgNiwgMSwgMjMzLCA5MywgNTcsIDI4LCAzLCAxLCAyMzMsIDkzLCA1NywgMjgsIDYsIDEsIDIzNywgCi0gICAgNTgsIDIzNywgMTAyLCAyNDYsIDE4MywgMjgsIDMsIDEsIDIzNywgNTgsIDIzNywgMTAyLCAyNDYsIDE4MywgMjgsIDYsIDEsIAotICAgIDIzNSwgMTUzLCAyNDYsIDE4MywgMjgsIDMsIDEsIDIzNSwgMTUzLCAyNDYsIDE4MywgMjgsIDYsIDEsIDIzMywgOTMsIDIzNywgCi0gICAgNTgsIDIzNywgMTAyLCAyNDYsIDE4MywgMjgsIDMsIDEsIDIzMywgOTMsIDIzNywgNTgsIDIzNywgMTAyLCAyNDYsIDE4MywgCi0gICAgMjgsIDYsIDEsIDI1MywgMjAyLCAyOCwgMywgMSwgMjUzLCAyMDIsIDI4LCA2LCAxLCAyNDYsIDIyNywgMjUzLCAyMCwgMjgsIAotICAgIDMsIDEsIDI0NiwgMjI3LCAyNTMsIDIwLCAyOCwgNiwgMSwgMjQ2LCAyMjcsIDI1MywgNTgsIDI4LCAzLCAxLCAyNDYsIDIyNywgCi0gICAgMjUzLCA1OCwgMjgsIDYsIDEsIDI0NiwgMjI3LCAyNTMsIDg3LCAyOCwgMywgMSwgMjQ2LCAyMjcsIDI1MywgODcsIDI4LCA2LCAKLSAgICAxLCAyMzEsIDI0MSwgNzMsIDI4LCAzLCAxLCAyMzEsIDI0MSwgNzMsIDI4LCA2LCAxLCAyMzIsIDE1LCA3MywgMjgsIDMsIDEsIAotICAgIDIzMiwgMTUsIDczLCAyOCwgNiwgMSwgNDcsIDIzMSwgMjQxLCA3MywgMjgsIDMsIDEsIDQ3LCAyMzEsIDI0MSwgNzMsIDI4LCAKLSAgICAxLCAyMzAsIDgwLCA3MywgMzYsIDI4LCAyNDAsIDgwLCAzNiwgMjgsIDI1MywgNTMsIDIzMywgMTUyLCA1MywgMzYsIDI4LCAKLSAgICAyMzUsIDU2LCAyMzMsIDE1MiwgNTMsIDM2LCAyOCwgMjMzLCAxMTcsIDIzMywgMTUyLCA1MywgMjM0LCAyMjUsIDIzMSwgCi0gICAgMTk4LCAzNiwgMjgsIDIzNSwgMTgxLCAzNiwgMjgsIDIzMywgMjI1LCAyOCwgMjM1LCAxODEsIDI4LCAyMzMsIDIyNSwgMjgsIAotICAgIDYsIDEsIDI0NywgMTM0LCAyOCwgMywgMSwgMjQ3LCAxMzQsIDI4LCA2LCAxLCAyNDEsIDEyNCwgMjgsIDMsIDEsIDI0MSwgCi0gICAgMTI0LCAyOCwgNiwgMSwgMjQyLCAzOCwgMjgsIDMsIDEsIDI0MiwgMzgsIDI4LCA2LCAxLCAyNDEsIDMwLCAyOCwgMywgMSwgCi0gICAgMjQxLCAzMCwgMjgsIDYsIDEsIDI0MSwgMTI1LCAyOCwgMywgMSwgMjQxLCAxMjUsIDI4LCA2LCAxLCAyNTQsIDIxMiwgMiwgCi0gICAgMjM3LCA0NCwgODgsIDI4LCAzLCAxLCAyNTQsIDIxMiwgMiwgMjM3LCA0NCwgODgsIDI4LCA2LCAxLCAyNDcsIDU5LCAyOCwgCi0gICAgMywgMSwgMjQ3LCA1OSwgMjgsIDYsIDEsIDI0MiwgMTIsIDI4LCAzLCAxLCAyNDIsIDEyLCAyOCwgNiwgMSwgMjQyLCAxMSwgCi0gICAgMjgsIDMsIDEsIDI0MiwgMTEsIDI4LCA2LCAxLCAyNDEsIDI1NSwgMjgsIDMsIDEsIDI0MSwgMjU1LCAyOCwgNiwgMSwgMjQ3LCAKLSAgICAxNTEsIDI4LCAzLCAxLCAyNDcsIDE1MSwgMjgsIDYsIDEsIDI0MSwgMTYsIDI4LCAzLCAxLCAyNDEsIDE2LCA1MiwgMSwgCi0gICAgMjM1LCA2MywgMjA2LCAyNTMsIDEyMiwgMjQxLCA2MiwgNTIsIDEsIDIzNSwgNjMsIDIwNiwgMjQ3LCAyNCwgMjQxLCA2MiwgCi0gICAgNTIsIDEsIDIzNSwgNjMsIDIwNiwgMjUzLCAxMjIsIDIzOCwgNDgsIDUyLCAxLCAyMzUsIDYzLCAyMDYsIDI0NywgMjQsIAotICAgIDIzOCwgNDgsIDUyLCAxLCAyMzUsIDYzLCAyMDYsIDI1MywgMTIyLCAyNTMsIDEzMiwgNTIsIDEsIDIzNSwgNjMsIDIwNiwgCi0gICAgMjQ3LCAyNCwgMjUzLCAxMzIsIDUyLCAxLCAyMzUsIDYzLCAyMDYsIDI1MywgMTIyLCAyNTMsIDMsIDUyLCAxLCAyMzUsIDYzLCAKLSAgICAyMDYsIDI0NywgMjQsIDI1MywgMywgNTIsIDEsIDIzMCwgMTUzLCAyMzcsIDUwLCAyMDYsIDEyNSwgNTIsIDEsIDIwMSwgCi0gICAgMjM3LCA1MCwgMjA2LCAxMjUsIDUyLCAxLCAyNTMsIDE1MiwgMjM3LCA1MCwgMjA2LCAxMjUsIDUyLCAxLCAxODQsIDIzNywgCi0gICAgNTAsIDIwNiwgMTI1LCA1MiwgMSwgMjMxLCAyMzcsIDIzNywgNTAsIDIwNiwgMTI1LCA1MiwgMSwgMjMwLCAxNTMsIDIzNywgCi0gICAgNTAsIDIzMSwgMjExLCAyMDYsIDEyNSwgNTIsIDEsIDIwMSwgMjM3LCA1MCwgMjMxLCAyMTEsIDIwNiwgMTI1LCA1MiwgMSwgCi0gICAgMjUzLCAxNTIsIDIzNywgNTAsIDIzMSwgMjExLCAyMDYsIDEyNSwgNTIsIDEsIDE4NCwgMjM3LCA1MCwgMjMxLCAyMTEsIAotICAgIDIwNiwgMTI1LCA1MiwgMSwgMjMxLCAyMzcsIDIzNywgNTAsIDIzMSwgMjExLCAyMDYsIDEyNSwgNTIsIDEsIDIzMCwgMTUzLCAKLSAgICAyMzEsIDIxMSwgMjA2LCAxMjUsIDUyLCAxLCAyMDEsIDIzMSwgMjExLCAyMDYsIDEyNSwgNTIsIDEsIDI1MywgMTUyLCAyMzEsIAotICAgIDIxMSwgMjA2LCAxMjUsIDUyLCAxLCAxODQsIDIzMSwgMjExLCAyMDYsIDEyNSwgNTIsIDEsIDIzMSwgMjM3LCAyMzEsIDIxMSwgCi0gICAgMjA2LCAxMjUsIDUyLCAxLCA1NiwgNjEsIDEyNSwgNTIsIDEsIDU2LCAyMzcsIDg0LCA1MiwgMSwgNTYsIDE2OSwgMTI1LCAKLSAgICA1MiwgMSwgMjAzLCA0MSwgMjM3LCA3OSwgMjM3LCA5OCwgNTIsIDEsIDIzNywgMTA1LCA5OSwgNTgsIDUyLCAxLCAyMzcsIAotICAgIDEwNSwgMTAzLCA1OCwgNTIsIDEsIDIzNywgMTA1LCAyMjksIDE2NSwgNzYsIDUyLCAxLCAyMzcsIDEwNSwgMjMzLCA3MCwgCi0gICAgMjI5LCAxNjUsIDc2LCA1MiwgMSwgMTg0LCAyMzMsIDcwLCAyMjksIDE2NSwgNzYsIDUyLCAxLCAyMzcsIDE2NSwgMjIsIAotICAgIDIwMSwgMjQwLCAxNjcsIDUyLCAxLCAyMzcsIDE2NSwgMjIsIDE4NCwgMjQwLCAxNjcsIDcsIDYsIDEsIDIyNywgMTkyLCAKLSAgICAyNDAsIDE3NCwgNywgMywgMSwgMjI3LCAxOTIsIDI0MCwgMTc0LCA3LCA2LCAxLCAyMjcsIDE5MiwgMjQ2LCAyMjQsIDcsIDMsIAotICAgIDEsIDIyNywgMTkyLCAyNDYsIDIyNCwgNywgNiwgMSwgMjQxLCAxNTMsIDcsIDMsIDEsIDI0MSwgMTUzLCA3LCA2LCAxLCAKLSAgICAyNTQsIDEzLCA3LCAzLCAxLCAyNTQsIDEzLCA3LCA2LCAxLCAyMzIsIDU2LCA3LCAzLCAxLCAyMzIsIDU2LCA3LCA2LCAxLCAKLSAgICAyMzAsIDE4MCwgNywgMywgMSwgMjMwLCAxODAsIDcsIDYsIDEsIDIzMiwgMTgsIDIsIDIzNywgNjcsIDcsIDMsIDEsIDIzMiwgCi0gICAgMTgsIDIsIDIzNywgNjcsIDcsIDEsIDMsIDYsIDI1NCwgMTkxLCA3LCAxLCAzLCA2LCAxOTMsIDcsIDYsIDEsIDI1MiwgMjEyLCAKLSAgICA3LCAzLCAxLCAyNTIsIDIxMiwgNywgNiwgMSwgMjUzLCAxNjgsIDcsIDMsIDEsIDI1MywgMTY4LCA3LCA2LCAxLCAyNTIsIAotICAgIDIyMiwgNywgMywgMSwgMjUyLCAyMjIsIDcsIDYsIDEsIDI1MywgMTY5LCA3LCAzLCAxLCAyNTMsIDE2OSwgNywgNiwgMSwgCi0gICAgMjU1LCAyLCAyLCAxNjksIDEyNSwgNywgMywgMSwgMjU1LCAyLCAyLCAxNjksIDEyNSwgNywgNiwgMSwgMjUzLCAxMTQsIDcsIAotICAgIDMsIDEsIDI1MywgMTE0LCA3LCA2LCAxLCAyMDAsIDI1NSwgNjIsIDIsIDI0NiwgMTY0LCA3LCAzLCAxLCAyMDAsIDI1NSwgCi0gICAgNjIsIDIsIDI0NiwgMTY0LCA3LCA2LCAxLCAyNTUsIDY3LCAyLCA4MiwgNywgMywgMSwgMjU1LCA2NywgMiwgODIsIDcsIDYsIAotICAgIDEsIDI1NSwgNjcsIDIsIDIzMywgNzQsIDgyLCA3LCAzLCAxLCAyNTUsIDY3LCAyLCAyMzMsIDc0LCA4MiwgNywgNiwgMSwgCi0gICAgMjU1LCA2NywgMiwgMTk1LCAyMiwgMjMzLCA3NCwgODIsIDcsIDMsIDEsIDI1NSwgNjcsIDIsIDE5NSwgMjIsIDIzMywgNzQsIAotICAgIDgyLCA3LCA2LCAxLCAyMzcsIDE1MCwgMTQ5LCA3LCAzLCAxLCAyMzcsIDE1MCwgMTQ5LCA3LCA2LCAxLCAyNTUsIDU4LCAyLCAKLSAgICAyMDEsIDgyLCA3LCAzLCAxLCAyNTUsIDU4LCAyLCAyMDEsIDgyLCA3LCA2LCAxLCAxMzAsIDIsIDE4MiwgMTk1LCAyMzMsIAotICAgIDg3LCA3LCAzLCAxLCAxMzAsIDIsIDE4MiwgMTk1LCAyMzMsIDg3LCA3LCA2LCAxLCAxMzAsIDIsIDI0MCwgMjAyLCA3LCAzLCAKLSAgICAxLCAxMzAsIDIsIDI0MCwgMjAyLCA3LCA2LCAxLCAyNTIsIDIyMCwgNywgMywgMSwgMjUyLCAyMjAsIDcsIDYsIDEsIDI1NSwgCi0gICAgNzAsIDIsIDE5NSwgMjM1LCA0MiwgMjMwLCAxMjYsIDcsIDMsIDEsIDI1NSwgNzAsIDIsIDE5NSwgMjM1LCA0MiwgMjMwLCAKLSAgICAxMjYsIDcsIDYsIDEsIDI1NSwgNzAsIDIsIDIzMiwgMjIsIDcsIDMsIDEsIDI1NSwgNzAsIDIsIDIzMiwgMjIsIDcsIDYsIDEsIAotICAgIDI1NSwgNzAsIDIsIDIzMywgMjQxLCAyNDAsIDEzMywgNywgMywgMSwgMjU1LCA3MCwgMiwgMjMzLCAyNDEsIDI0MCwgMTMzLCAKLSAgICA3LCA2LCAxLCAyNTUsIDc1LCAyLCAxOTUsIDIzNSwgNDIsIDIzMCwgMTI2LCA3LCAzLCAxLCAyNTUsIDc1LCAyLCAxOTUsIAotICAgIDIzNSwgNDIsIDIzMCwgMTI2LCA3LCA2LCAxLCAyNTUsIDc1LCAyLCAyMzMsIDc0LCA4MiwgNywgMywgMSwgMjU1LCA3NSwgMiwgCi0gICAgMjMzLCA3NCwgODIsIDcsIDYsIDEsIDI1NSwgNTcsIDIzMywgMTQzLCA3LCAzLCAxLCAyNTUsIDU3LCAyMzMsIDE0MywgNywgCi0gICAgNiwgMSwgMjU0LCA1LCAyMzMsIDE0MywgNywgMywgMSwgMjU0LCA1LCAyMzMsIDE0MywgNywgNiwgMSwgMjU1LCA2OSwgMiwgCi0gICAgMjMzLCA3NCwgODIsIDcsIDMsIDEsIDI1NSwgNjksIDIsIDIzMywgNzQsIDgyLCA3LCA2LCAxLCAyNTMsIDIwMSwgNywgMywgCi0gICAgMSwgMjUzLCAyMDEsIDcsIDYsIDEsIDIzMCwgMjE5LCAyNTQsIDE5MywgNywgMywgMSwgMjMwLCAyMTksIDI1NCwgMTkzLCA3LCAKLSAgICA2LCAxLCAyNDEsIDE5LCAyLCA4MiwgNywgMywgMSwgMjQxLCAxOSwgMiwgODIsIDcsIDYsIDEsIDI0MSwgMTksIDIsIDE5NSwgCi0gICAgMjM1LCA0MiwgMjMwLCAxMjYsIDcsIDMsIDEsIDI0MSwgMTksIDIsIDE5NSwgMjM1LCA0MiwgMjMwLCAxMjYsIDcsIDYsIDEsIAotICAgIDI0MiwgMTgsIDcsIDMsIDEsIDI0MiwgMTgsIDcsIDYsIDEsIDI1MywgMTI1LCA3LCAzLCAxLCAyNTMsIDEyNSwgNywgNiwgMSwgCi0gICAgMjUzLCAxODIsIDcsIDMsIDEsIDI1MywgMTgyLCA3LCA2LCAxLCAyNDgsIDEwLCA3LCAzLCAxLCAyNDgsIDEwLCA1MiwgMSwgCi0gICAgMjU0LCAxNjUsIDcsIDMsIDEsIDI0OSwgMjExLCA3LCAzLCAxLCAyNDcsIDE4LCA3LCAzLCAxLCAyNTEsIDI2LCA3LCAzLCAxLCAKLSAgICAyNTEsIDc5LCA3LCAzLCAxLCAyNDgsIDE1MiwgNywgMSwgMywgNiwgMjQ4LCAxNTIsIDcsIDMsIDEsIDI0OCwgMTg0LCA3LCAKLSAgICAzLCAxLCAyNTMsIDE5OSwgNywgNiwgMSwgMjM1LCAzOCwgMjIyLCAyMjIsIDcsIDMsIDEsIDIzNSwgMzgsIDIyMiwgMjIyLCAKLSAgICA3LCA2LCAxLCAyMzUsIDM4LCAyNTQsIDE5MSwgNywgMywgMSwgMjM1LCAzOCwgMjU0LCAxOTEsIDcsIDYsIDEsIDIzNSwgMzgsIAotICAgIDIxNCwgNywgNiwgMSwgMjA5LCAyMzUsIDM4LCAyMTQsIDcsIDMsIDEsIDIwOSwgMjM1LCAzOCwgMjE0LCA3LCA2LCAxLCAKLSAgICAyMDksIDE0OSwgNywgMywgMSwgMjA5LCAxNDksIDcsIDYsIDEsIDIzNSwgMzgsIDE0NiwgNywgMywgMSwgMjM1LCAzOCwgCi0gICAgMTQ2LCA3LCA2LCAxLCAyMzUsIDM4LCAxOTMsIDcsIDMsIDEsIDIzNSwgMzgsIDE5MywgNywgNiwgMSwgMjM1LCAzOCwgMjU0LCAKLSAgICAxODMsIDcsIDMsIDEsIDIzNSwgMzgsIDI1NCwgMTgzLCA1MiwgMSwgMTg0LCAyMzAsIDEyNSwgMjM1LCAyNCwgNTIsIDEsIAotICAgIDIzNywgNjYsIDUyLCAxLCAyNDAsIDEyNSwgMjM3LCA1MSwgNTMsIDcsIDYsIDEsIDIzMiwgNDQsIDcsIDMsIDEsIDIzMiwgCi0gICAgNDQsIDcsIDIzMCwgMTQ2LCAxLCAyMDAsIDI1NCwgMTkxLCA3LCAyMzAsIDE0NiwgMSwgMjAwLCAyNTQsIDE4NywgNywgMjMwLCAKLSAgICAxNDYsIDEsIDIzMywgNzAsIDE4NSwgNywgMjMwLCAxNDYsIDEsIDI1NSwgNTUsIDIzOCwgMjIsIDcsIDIzMCwgMTQ2LCAxLCAKLSAgICAyMzUsIDgzLCAxODUsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCA1NywgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDc0LCAyMzcsIAotICAgIDQyLCAyNDAsIDEyNywgNSwgMjMyLCAxNzYsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCA2NiwgMjM3LCA0MiwgMjQwLCAxMjcsIAotICAgIDEsIDcyLCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgNzMsIDIzNywgNDIsIDI0MCwgMTI3LCA1LCAyMzQsIDExNywgMjM3LCA0MiwgCi0gICAgMjQwLCAxMjcsIDEsIDI1MywgMzMsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAyNDcsIDE1OCwgMjM3LCA0MiwgMjQwLCAxMjcsIAotICAgIDEsIDI1MywgNzYsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAyNDgsIDUyLCAyMzcsIDQyLCAyNDAsIDEyNywgNSwgMjMxLCAKLSAgICAyMDYsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAyNTMsIDY2LCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjQ3LCAyOSwgMjM3LCAKLSAgICA0MiwgMjQwLCAxMjcsIDEsIDI1MywgOTAsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAyNTAsIDEyOSwgMjM3LCA0MiwgMjQwLCAKLSAgICAxMjcsIDEsIDI0NywgMjE3LCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjQxLCA4MiwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIAotICAgIDI0NywgMTMwLCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjQzLCAzOCwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDk2LCAyMzcsIAotICAgIDQyLCAyNDAsIDEyNywgMSwgMjQ2LCAyMjgsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAyNTMsIDU3LCAyMzcsIDQyLCAyNDAsIAotICAgIDEyNywgMSwgMjQ4LCAyNiwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDI1MywgOCwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDI1MywgCi0gICAgNTAsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAyNDcsIDk5LCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjUzLCA5OCwgMjM3LCAKLSAgICA0MiwgMjQwLCAxMjcsIDEsIDI0NywgMjU0LCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjUzLCAxNCwgMjM3LCA0MiwgMjQwLCAKLSAgICAxMjcsIDEsIDI1MiwgMjQ2LCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjUzLCA0OSwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIAotICAgIDI0OCwgMTUxLCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjUzLCAyNSwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDI1MywgMjEsIAotICAgIDIzNywgNDIsIDI0MCwgMTI3LCAzMSwgNSwgNTcsIDIzNywgNDIsIDI0MCwgMTI3LCAzMSwgNSwgNzQsIDIzNywgNDIsIDI0MCwgCi0gICAgMTI3LCAzMSwgNSwgNjYsIDIzNywgNDIsIDI0MCwgMTI3LCAzMSwgNSwgNzIsIDIzNywgNDIsIDI0MCwgMTI3LCAzMSwgNSwgCi0gICAgMjUyLCAyMjAsIDIzNywgNDIsIDI0MCwgMTI3LCAyMzcsIDE4OSwgMjM1LCAxOTAsIDIzNywgNDIsIDI0MCwgMTI3LCAyMzcsIAotICAgIDE4OSwgMjM1LCAxOTEsIDIzNywgNDIsIDI0MCwgMTI3LCAyMzcsIDE4OSwgMjM2LCAxNDYsIDIzNywgNDIsIDI0MCwgMTI3LCAKLSAgICAyMzcsIDE4OSwgMjM2LCAxNDcsIDIxNywgMSwgMTc3LCAyMTcsIDEsIDI0NiwgMTc4LCAyMTcsIDEsIDI1MiwgMjA1LCAyMTcsIAotICAgIDEsIDI0NiwgMTY5LCAyMTcsIDEsIDI1MiwgMjE1LCAyMTcsIDEsIDI0NiwgMTc2LCAyMTcsIDEsIDI1MiwgMjEzLCAyMTcsIAotICAgIDEsIDI0NiwgMTgxLCAyMTcsIDEsIDI1MiwgMjAyLCAyMTcsIDEsIDI0NiwgMTczLCAyMTcsIDEsIDI1MiwgMjAzLCAyMTcsIAotICAgIDEsIDI1MiwgMjAxLCAyMTcsIDEsIDIxMywgMjE3LCAxLCAyNDYsIDE4MiwgMjE3LCAxLCAyNTIsIDIxMSwgMjE3LCAxLCAKLSAgICAxOTgsIDIxNywgMSwgMjQ2LCAyMTYsIDIxNywgMSwgMjQwLCAyNDAsIDIxNywgMSwgMjQ2LCAyNTQsIDIxNywgMSwgMjUyLCAKLSAgICAyMDgsIDIxNywgMSwgMjQ2LCAyMjMsIDIxNywgMSwgMjUyLCAyMjYsIDIxNywgMSwgMywgNTcsIDIxNywgMSwgMTkxLCAyMTcsIAotICAgIDEsIDIwOCwgMjE3LCAxLCAyNTIsIDIwMCwgMjE3LCAxLCAyNDYsIDE2NSwgMjE3LCAxLCAyNTIsIDIwNCwgMjE3LCAxLCAKLSAgICAxNTQsIDIxNywgMSwgNTcsIDIxNywgMSwgNzQsIDIxNywgMSwgNjYsIDIxNywgMSwgNzIsIDIxNywgMSwgNzMsIDIxNywgMSwgCi0gICAgMjUzLCAzNSwgMjE3LCAxLCAyNTMsIDgzLCAyMTcsIDEsIDI1MiwgMjM0LCAyMTcsIDEsIDI0NywgNzcsIDIxNywgMSwgMjUyLCAKLSAgICAyMzEsIDIxNywgMjMxLCAxODksIDEsIDI1MiwgMjA4LCAyMTcsIDIzMSwgMTg5LCAxLCAxOTEsIDIxNywgMSwgMjQ2LCAxOTEsIAotICAgIDIxNywgMSwgMjQwLCAxNTAsIDIxNywgMSwgMjQ2LCAxOTIsIDIxNywgMSwgMjQ2LCAyMDMsIDIxNywgMSwgMjMxLCAyMzUsIAotICAgIDE5MSwgMjE3LCAxLCAyMzMsIDYyLCAyNDYsIDE2NSwgMjE3LCAxLCAyMzcsIDEwNywgMTU0LCAyMTcsIDEsIDIzMiwgNzgsIAotICAgIDI1MiwgMjM0LCAyMTcsIDIzMSwgMTg5LCAxLCAyMDgsIDIxNywgMjMxLCAxNDksIDEsIDIwOCwgMjE3LCAxLCAyMjgsIDE4NCwgCi0gICAgMjE3LCAyMzcsIDYyLCAyNDcsIDE0OCwgNzYsIDIxNywgNDcsIDI0NywgMTQ4LCA3NiwgMjE3LCAxNjUsIDI0MCwgMTkyLCAKLSAgICAyMTcsIDE2NSwgNDcsIDI0MCwgMTkyLCAxNDEsIDUsIDIzMSwgMjA2LCAxNDEsIDUsIDIzMywgMTAyLCAxNDEsIDEsIDU3LCAKLSAgICAxNDEsIDEsIDI1MiwgMjEyLCAxNDEsIDEsIDc0LCAxNDEsIDEsIDI1MiwgMjE2LCAxNDEsIDEsIDY2LCAxNDEsIDEsIDI1MiwgCi0gICAgMjI0LCAxNDEsIDEsIDE1MywgMTQ2LCAxNDEsIDEsIDE1MywgMjUyLCAyNDksIDE0MSwgMSwgMTUzLCAxNDksIDE0MSwgMSwgCi0gICAgMTUzLCAyNTIsIDI0NSwgMTQxLCAxLCA3MiwgMTQxLCAxLCAyNTIsIDIzMSwgMTQxLCAxLCAyNTIsIDIyMSwgMTQxLCAxLCAKLSAgICA3MywgMTQxLCAxLCAyNTIsIDIyMCwgMTQxLCAxLCAyNTIsIDIyMiwgMTQxLCAxLCAxNzcsIDE0MSwgMSwgMjQ2LCAxNzgsIAotICAgIDE0MSwgMSwgMjUyLCAyMDUsIDE0MSwgMSwgMjQ2LCAyMDIsIDE0MSwgMSwgMjQ2LCAxNjksIDE0MSwgMSwgMjUyLCAyMTUsIAotICAgIDE0MSwgMSwgMjQ2LCAxNzYsIDE0MSwgMSwgMjUyLCAyMTMsIDE0MSwgMSwgMjQ2LCAyMTMsIDE0MSwgMSwgMjQ2LCAxODEsIAotICAgIDE0MSwgMSwgMjQ2LCAxOTEsIDE0MSwgMSwgMjQwLCAxNTAsIDE0MSwgMSwgMjQ2LCAxOTIsIDE0MSwgMSwgMjQwLCAxNjYsIAotICAgIDE0MSwgMSwgMjQ2LCAyMDMsIDE0MSwgMSwgMjUyLCAyMDIsIDE0MSwgMSwgMjQ2LCAxNzMsIDE0MSwgMSwgMjUyLCAyMDMsIAotICAgIDE0MSwgMSwgMjQ2LCAxOTYsIDE0MSwgMSwgMjUyLCAyMDEsIDE0MSwgMSwgMjEzLCAxNDEsIDEsIDI0NiwgMTgyLCAxNDEsIAotICAgIDEsIDI1MiwgMjExLCAxNDEsIDEsIDI0NiwgMTk5LCAxNDEsIDEsIDE5OCwgMTQxLCAxLCAxOTEsIDE0MSwgMSwgMjA4LCAKLSAgICAxNDEsIDEsIDI1MiwgMjAwLCAxNDEsIDEsIDI1MiwgMjQzLCAxNDEsIDEsIDI0NiwgMTY1LCAxNDEsIDEsIDI0NiwgMTkwLCAKLSAgICAxNDEsIDEsIDI1MiwgMjA0LCAxNDEsIDEsIDE1NCwgMTQxLCAxLCAyNDYsIDIyNSwgMTQxLCAyMzEsIDE5NCwgNSwgMjM5LCAKLSAgICAyLCAxNDEsIDMxLCA1LCAyNTIsIDIxMiwgMTQxLCAzMSwgNSwgNzQsIDE0MSwgMzEsIDUsIDI1MiwgMjE2LCAxNDEsIDMxLCAKLSAgICA1LCA2NiwgMTQxLCAzMSwgNSwgMjUyLCAyMjQsIDE0MSwgMzEsIDUsIDE1MywgMTQ2LCAxNDEsIDMxLCA1LCAxNTMsIDI1MiwgCi0gICAgMjQ5LCAxNDEsIDMxLCA1LCAxNTMsIDE0OSwgMTQxLCAzMSwgNSwgMTUzLCAyNTIsIDI0NSwgMTQxLCAzMSwgNSwgNzIsIAotICAgIDE0MSwgMzEsIDUsIDI1MiwgMjMxLCAxNDEsIDMxLCA1LCAyNTIsIDIyMSwgMTQxLCAzMSwgNSwgNzMsIDE0MSwgMzEsIDUsIAotICAgIDI1MiwgMjIwLCAxNDEsIDMxLCA1LCAyNTIsIDIyMiwgMTQxLCA1LCAyMzUsIDQzLCAxNDEsIDIzNywgMTA5LCAxNDEsIDQ3LCAKLSAgICAyMzcsIDEwOSwgMTQxLCAyMSwgMjQwLCAxMjYsIDE0MSwgMjEsIDExOCwgMTQxLCAyMSwgMTEzLCAxNDEsIDIxLCAxNjYsIAotICAgIDE0MSwgMjEsIDE1OCwgMTQxLCAyMSwgMTczLCAxNDEsIDIxLCAxODMsIDE0MSwgMjEsIDE5NCwgMTQxLCAyMSwgMTg3LCAKLSAgICAxNDEsIDIxLCAxOTIsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMjEsIDI0MCwgMTI2LCAyNDAsIDExOSwgMjU0LCAxODgsIDIxLCAKLSAgICAxMTgsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMjEsIDExMywgMjQwLCAxMTksIDI1NCwgMTg4LCAyMSwgMTY2LCAyNDAsIDExOSwgCi0gICAgMjU0LCAxODgsIDIxLCAxNTgsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMjEsIDE3MywgMjQwLCAxMTksIDI1NCwgMTg4LCAyMSwgCi0gICAgMTgzLCAyNDAsIDExOSwgMjU0LCAxODgsIDIxLCAxOTQsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMjEsIDE4NywgMjQwLCAxMTksIAotICAgIDI1NCwgMTg4LCAyMSwgMTkyLCAyNDAsIDExOSwgMjU0LCAxODgsIDEsIDE3NywgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAKLSAgICAyNDYsIDE3OCwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyNTIsIDIwNSwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyNDYsIAotICAgIDE2OSwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyNTIsIDIwNCwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyNDYsIDE2NSwgCi0gICAgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyNTIsIDIyNiwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyNDYsIDE4MSwgMjQwLCAKLSAgICAxMTksIDI1NCwgMTg4LCAxLCAyNTIsIDIwMiwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyNTAsIDk1LCAyNDAsIDExOSwgCi0gICAgMjU0LCAxODgsIDEsIDI1MiwgMjAxLCAyNDAsIDExOSwgMjU0LCAxODgsIDEsIDIxMywgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAKLSAgICAyNDYsIDE4MiwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAxOTgsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUyLCAyMDMsIAotICAgIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUyLCAyMTEsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjA4LCAyNDAsIDExOSwgCi0gICAgMjU0LCAxODgsIDEsIDE5MSwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyNTIsIDIwMCwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAKLSAgICAyNTIsIDIwOCwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyNDYsIDE3MywgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAxNTQsIAotICAgIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUyLCAyNDMsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUyLCAyMTUsIDI0MCwgCi0gICAgMTE5LCAyNTQsIDE4OCwgMSwgNTcsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUzLCAxNSwgMjQwLCAxMTksIDI1NCwgMTg4LCAKLSAgICAxLCA3NCwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyNTIsIDIyMCwgMjQwLCAxMTksIDI1NCwgMTg4LCAzMSwgMjUzLCA3MSwgCi0gICAgMjQwLCAxMTksIDI1NCwgMTg4LCAzMSwgNzIsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMzEsIDY2LCAyNDAsIDExOSwgMjU0LCAKLSAgICAxODgsIDMxLCAyNTIsIDIzMSwgMjQwLCAxMTksIDI1NCwgMTg4LCAzMSwgNzMsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMjA2LCAKLSAgICAyMzUsIDIwMywgMjQwLCAxMTksIDI1NCwgMTg4LCAyMDYsIDIzOCwgMTM1LCAyNDAsIDExOSwgMjU0LCAxODgsIDIwNiwgCi0gICAgMjQyLCAyMzIsIDIzNSwgMjAzLCAyNDAsIDExOSwgMjU0LCAxODgsIDUsIDI0NywgMTI5LCAyNDAsIDExOSwgMjU0LCAxODgsIAotICAgIDUsIDI0NSwgMTc3LCAyMzcsIDQ3LCAxLCAxNzcsIDIzNywgNDcsIDEsIDI1MiwgMjA1LCAyMzcsIDQ3LCAxLCAyNDYsIDE2OSwgCi0gICAgMjM3LCA0NywgMSwgMjUyLCAyMDIsIDIzNywgNDcsIDEsIDI1MiwgMjAzLCAyMzcsIDQ3LCAxLCAyNTIsIDIwMSwgMjM3LCAKLSAgICA0NywgMSwgMjEzLCAyMzcsIDQ3LCAxLCAyNTIsIDIxMSwgMjM3LCA0NywgMSwgMTk4LCAyMzcsIDQ3LCAxLCAyNTIsIDIxNSwgCi0gICAgMjM3LCA0NywgMSwgMjUyLCAyMTMsIDIzNywgNDcsIDEsIDI0NiwgMTgxLCAyMzcsIDQ3LCAxLCAyNTIsIDIwNCwgMjM3LCAKLSAgICA0NywgMSwgMjA4LCAyMzcsIDQ3LCAxLCAyNTIsIDIwMCwgMjM3LCA0NywgMSwgMTkxLCAyMzcsIDQ3LCAxLCAyNTIsIDIwOCwgCi0gICAgMjM3LCA0NywgMSwgMTU0LCAyMzcsIDQ3LCAxLCAyNDgsIDk5LCAyMzcsIDQ3LCAxLCAyNDEsIDIwMSwgMjM3LCA0NywgMSwgCi0gICAgMjQ3LCAxODAsIDIzNywgNDcsIDEsIDI0NSwgMjQsIDIzNywgNDcsIDEsIDU3LCAyMzcsIDQ3LCAzMSwgNSwgNzQsIDIzNywgCi0gICAgNDcsIDMxLCA1LCA2NiwgMjM3LCA0NywgMzEsIDUsIDcyLCAyMzcsIDQ3LCAzMSwgNSwgMjUyLCAyMjEsIDIzNywgNDcsIDMxLCAKLSAgICA1LCA3MywgMjM3LCA0NywgMzEsIDUsIDI1MiwgMjIyLCAyMzcsIDQ3LCAzMSwgNSwgMjUzLCAxMDAsIDIzNywgNDcsIDMxLCAKLSAgICA1LCAyNTQsIDQ5LCAyMzcsIDQ3LCAyMzEsIDE5NCwgNSwgMjUzLCA2OSwgMjM3LCA0NywgMjMxLCAxOTQsIDUsIDE5OSwgCi0gICAgMjM3LCA0NywgMjMxLCAxOTQsIDUsIDE0NiwgMjM3LCA0NywgMjMxLCAxOTQsIDUsIDIxMiwgMjM3LCA0NywgMjM1LCA0MywgCi0gICAgMjM3LCA0NywgMjM1LCAxMzUsIDc2LCAxMzYsIDEsIDU3LCAxMzYsIDEsIDc0LCAxMzYsIDEsIDY2LCAxMzYsIDEsIDcyLCAKLSAgICAxMzYsIDEsIDI1MiwgMjIxLCAxMzYsIDEsIDczLCAxMzYsIDEsIDE3NywgMTM2LCAxLCAyNDYsIDE3OCwgMTM2LCAxLCAyNTIsIAotICAgIDIwNSwgMTM2LCAxLCAyNDYsIDIwMiwgMTM2LCAxLCAyNDQsIDIyMywgMTM2LCAxLCAyNDYsIDE2OSwgMTM2LCAxLCAyNDYsIAotICAgIDE3NiwgMTM2LCAxLCAyNDIsIDI1MCwgMTM2LCAxLCAyNTIsIDIxMywgMTM2LCAxLCAyNDYsIDIxMywgMTM2LCAxLCAyNDQsIAotICAgIDIyNiwgMTM2LCAxLCAyNTEsIDU3LCAxMzYsIDEsIDI0NCwgMjI1LCAxMzYsIDEsIDI1MiwgMjAyLCAxMzYsIDEsIDI0NiwgCi0gICAgMTczLCAxMzYsIDEsIDI1MiwgMjAzLCAxMzYsIDEsIDI0NiwgMTk2LCAxMzYsIDEsIDI1MSwgNzcsIDEzNiwgMSwgMjUyLCAKLSAgICAyMDEsIDEzNiwgMSwgMjQ2LCAxOTIsIDEzNiwgMSwgMjEzLCAxMzYsIDEsIDI1MSwgMTE3LCAxMzYsIDEsIDI0NiwgMTgyLCAKLSAgICAxMzYsIDEsIDI1MiwgMjExLCAxMzYsIDEsIDI0NiwgMTk5LCAxMzYsIDEsIDI1MSwgMjUsIDEzNiwgMSwgMTk4LCAxMzYsIDEsIAotICAgIDI0NywgNjYsIDEzNiwgMSwgMTkxLCAxMzYsIDEsIDIwOCwgMTM2LCAxLCAyNTIsIDIwMCwgMTM2LCAxLCAyNTIsIDI0MywgCi0gICAgMTM2LCAxLCAyNDYsIDE5MCwgMTM2LCAxLCAyNTIsIDIwNCwgMTM2LCAxLCAxNTQsIDEzNiwgMzEsIDUsIDI1MiwgMjEyLCAKLSAgICAxMzYsIDMxLCA1LCA3NCwgMTM2LCAzMSwgNSwgMjUyLCAyMTYsIDEzNiwgMzEsIDUsIDI1MywgMTc2LCAxMzYsIDMxLCA1LCAKLSAgICA2NiwgMTM2LCAzMSwgNSwgMjUzLCAxNSwgMTM2LCAzMSwgNSwgNzMsIDEzNiwgMzEsIDUsIDI1MiwgMjIxLCAxMzYsIDMxLCAKLSAgICA1LCAyNTIsIDIyMiwgMTM2LCAzMSwgNSwgMjUzLCA3MSwgMTM2LCAyMzEsIDE5NCwgNSwgMTkxLCAxMzYsIDIzMSwgMTk0LCAKLSAgICA1LCAyMDgsIDEzNiwgMjMxLCAxOTQsIDUsIDI1MiwgMjAwLCAxMzYsIDIzMSwgMTk0LCA1LCAyNTIsIDIwOCwgMTM2LCAxLCAKLSAgICAzNSwgMjU0LCAxODYsIDEzNiwgMSwgMzUsIDIxNCwgMTM2LCAxLCAzNSwgMjUzLCA2OSwgMTM2LCAyMzEsIDE5NCwgNSwgMzUsIAotICAgIDI1MywgNjksIDEzNiwgMSwgMzUsIDI1MywgMjExLCAxMzYsIDEsIDM1LCAyNTQsIDE4MywgMTM2LCAxLCAzNSwgMTk5LCAKLSAgICAxMzYsIDEsIDM1LCAyNTQsIDE4NywgMTM2LCAxLCAzNSwgMjU0LCAxOTAsIDEzNiwgMSwgMzUsIDE0NiwgMTM2LCAxLCAzNSwgCi0gICAgMTQ5LCAxMzYsIDEsIDM1LCAyNTMsIDE5NCwgMTM2LCAyMzEsIDE5NCwgNSwgMzUsIDE4NSwgMTM2LCAyMzEsIDE5NCwgNSwgCi0gICAgMzUsIDIxMiwgMTM2LCAyMSwgMjQwLCAxMjYsIDEzNiwgMjEsIDExOCwgMTM2LCAyMSwgMTEzLCAxMzYsIDIxLCAxNjYsIAotICAgIDEzNiwgMjEsIDE1OCwgMTM2LCAyMSwgMTczLCAxMzYsIDIxLCAxODMsIDEzNiwgMjEsIDE5NCwgMTM2LCAyMSwgMTg3LCAKLSAgICAxMzYsIDIxLCAxOTIsIDEzNiwgMjI5LCAxNjEsIDIzNiwgMjM2LCAxMzYsIDIyOSwgMTYxLCAyMzcsIDEwOSwgMTM2LCAyMjksIAotICAgIDE2MSwgNDcsIDIzNywgMTA5LCAxMzYsIDIyOSwgMTYxLCAyMzcsIDQ5LCAyMzcsIDEwOSwgOSwgMTEsIDIyNSwgMTE1LCA5LCAKLSAgICAxMSwgMjI1LCAxMTYsIDksIDExLCAyMjUsIDExNywgOSwgMTEsIDIyNSwgMTE4LCA5LCAxMSwgMjI1LCAxMTksIDksIDExLCAKLSAgICAyMjUsIDEyMCwgOSwgMTEsIDIyNSwgMTIxLCA5LCAxMSwgMjI1LCAxMjIsIDksIDExLCAyMjUsIDEyMywgOSwgMTEsIDIyNSwgCi0gICAgMTI0LCA5LCAxMSwgMjI1LCAxMjUsIDksIDExLCAyMjUsIDEyNiwgOSwgMTEsIDIyNSwgMTI3LCA5LCAxMSwgMjI1LCAxMjgsIAotICAgIDksIDExLCAyMjUsIDEyOSwgOSwgMTEsIDIyNSwgMTMwLCA5LCAxMSwgMjI1LCAxMzEsIDksIDExLCAyMjUsIDEzMiwgOSwgCi0gICAgMTEsIDIyNSwgMTMzLCA5LCAxMSwgMjI1LCAxMzQsIDksIDExLCAyMjUsIDEzNSwgOSwgMTEsIDIyNSwgMTM2LCA5LCAxMSwgCi0gICAgMjI1LCAxMzcsIDksIDExLCAyMjUsIDEzOCwgOSwgMTEsIDIyNSwgMTM5LCA5LCAxMSwgMjI1LCAxNDAsIDksIDExLCAyMjUsIAotICAgIDE0MSwgOSwgMTEsIDIyNSwgMTQyLCA5LCAxMSwgMjI1LCAxNDMsIDksIDExLCAyMjUsIDE0NCwgOSwgMTEsIDIyNSwgMTQ1LCAKLSAgICA5LCAxMSwgMjI1LCAxNDYsIDksIDExLCAyMjUsIDE0NywgOSwgMTEsIDIyNSwgMTQ4LCA5LCAxMSwgMjI1LCAxNDksIDksIAotICAgIDExLCAyMjUsIDE1MCwgOSwgMTEsIDIyNSwgMTUxLCA5LCAxMSwgMjI1LCAxNTIsIDksIDExLCAyMjUsIDE1MywgOSwgMTEsIAotICAgIDIyNSwgMTU0LCA5LCAxMSwgMjI1LCAxNTUsIDksIDExLCAyMjUsIDE1NiwgOSwgMTEsIDIyNSwgMTU3LCA5LCAxMSwgMjI1LCAKLSAgICAxNTgsIDksIDExLCAyMjUsIDE1OSwgOSwgMTEsIDIyNSwgMTYwLCA5LCAxMSwgMjI1LCAxNjEsIDksIDExLCAyMjUsIDE2MiwgCi0gICAgOSwgMTEsIDIyNSwgMTYzLCA5LCAxMSwgMjI1LCAxNjQsIDksIDExLCAyMjUsIDE2NSwgOSwgMTEsIDIyNSwgMTY2LCA5LCAKLSAgICAxMSwgMjI1LCAxNjcsIDksIDExLCAyMjUsIDE2OCwgOSwgMTEsIDIyNSwgMTY5LCA5LCAxMSwgMjI1LCAxNzAsIDksIDExLCAKLSAgICAyMjUsIDE3MSwgOSwgMTEsIDIyNSwgMTcyLCA5LCAxMSwgMjI1LCAxNzMsIDksIDExLCAyMjUsIDE3NCwgOSwgMTEsIDIyNSwgCi0gICAgMTc1LCA5LCAxMSwgMjI1LCAxNzYsIDksIDExLCAyMjUsIDE3NywgOSwgMTEsIDIyNSwgMTc4LCA5LCAxMSwgMjI1LCAxNzksIAotICAgIDksIDExLCAyMjUsIDE4MCwgOSwgMTEsIDIyNSwgMTgxLCA5LCAxMSwgMjI1LCAxODIsIDksIDExLCAyMjUsIDE4MywgOSwgCi0gICAgMTEsIDIyNSwgMTg0LCA5LCAxMSwgMjI1LCAxODUsIDksIDExLCAyMjUsIDE4NiwgOSwgMTEsIDIyNSwgMTg3LCA5LCAxMSwgCi0gICAgMjI1LCAxODgsIDksIDExLCAyMjUsIDE4OSwgOSwgMTEsIDIyNSwgMTkwLCA5LCAxMSwgMjI1LCAxOTEsIDksIDExLCAyMjUsIAotICAgIDE5MiwgOSwgMTEsIDIyNSwgMTkzLCA5LCAxMSwgMjI1LCAxOTQsIDksIDExLCAyMjUsIDE5NSwgOSwgMTEsIDIyNSwgMTk2LCAKLSAgICA5LCAxMSwgMjI1LCAxOTcsIDksIDExLCAyMjUsIDE5OCwgOSwgMTEsIDIyNSwgMTk5LCA5LCAxMSwgMjI1LCAyMDAsIDksIAotICAgIDExLCAyMjUsIDIwMSwgOSwgMTEsIDIyNSwgMjAyLCA5LCAxMSwgMjI1LCAyMDMsIDksIDExLCAyMjUsIDIwNCwgOSwgMTEsIAotICAgIDIyNSwgMjA1LCA5LCAxMSwgMjI1LCAyMDYsIDksIDExLCAyMjUsIDIwNywgOSwgMTEsIDIyNSwgMjA4LCA5LCAxMSwgMjI1LCAKLSAgICAyMDksIDksIDExLCAyMjUsIDIxMCwgOSwgMTEsIDIyNSwgMjExLCA5LCAxMSwgMjI1LCAyMTIsIDksIDExLCAyMjUsIDIxMywgCi0gICAgOSwgMTEsIDIyNSwgMjE0LCA5LCAxMSwgMjI1LCAyMTUsIDksIDExLCAyMjUsIDIxNiwgOSwgMTEsIDIyNSwgMjE3LCA5LCAKLSAgICAxMSwgMjI1LCAyMTgsIDksIDExLCAyMjUsIDIxOSwgOSwgMTEsIDIyNSwgMjIwLCA5LCAxMSwgMjI1LCAyMjEsIDksIDExLCAKLSAgICAyMjUsIDIyMiwgOSwgMTEsIDIyNSwgMjIzLCA5LCAxMSwgMjI1LCAyMjQsIDksIDExLCAyMjUsIDIyNSwgOSwgMTEsIDIyNSwgCi0gICAgMjI2LCA5LCAxMSwgMjI1LCAyMjcsIDksIDExLCAyMjUsIDIyOCwgOSwgMTEsIDIyNSwgMjI5LCA5LCAxMSwgMjI1LCAyMzAsIAotICAgIDksIDExLCAyMjUsIDIzMSwgOSwgMTEsIDIyNSwgMjMyLCA5LCAxMSwgMjI1LCAyMzMsIDksIDExLCAyMjUsIDIzNCwgOSwgCi0gICAgMTEsIDIyNSwgMjM1LCA5LCAxMSwgMjI1LCAyMzYsIDksIDExLCAyMjUsIDIzNywgOSwgMTEsIDIyNSwgMjM4LCA5LCAxMSwgCi0gICAgMjI1LCAyMzksIDksIDExLCAyMjUsIDI0MCwgOSwgMTEsIDIyNSwgMjQxLCA5LCAxMSwgMjI1LCAyNDIsIDksIDExLCAyMjUsIAotICAgIDI0MywgOSwgMTEsIDIyNSwgMjQ0LCA5LCAxMSwgMjI1LCAyNDUsIDksIDExLCAyMjUsIDI0NiwgOSwgMTEsIDIyNSwgMjQ3LCAKLSAgICA5LCAxMSwgMjI1LCAyNDgsIDksIDExLCAyMjUsIDI0OSwgOSwgMTEsIDIyNSwgMjUwLCA5LCAxMSwgMjI1LCAyNTEsIDksIAotICAgIDExLCAyMjUsIDI1MiwgOSwgMTEsIDIyNSwgMjUzLCA5LCAxMSwgMjI1LCAyNTQsIDksIDExLCAyMjUsIDI1NSwgOSwgMTEsIAotICAgIDIyNiwgMCwgOSwgMTEsIDIyNiwgMSwgOSwgMTEsIDIyNiwgMiwgOSwgMTEsIDIyNiwgMywgOSwgMTEsIDIyNiwgNCwgOSwgCi0gICAgMTEsIDIyNiwgNSwgOSwgMTEsIDIyNiwgNiwgOSwgMTEsIDIyNiwgNywgOSwgMTEsIDIyNiwgOCwgOSwgMTEsIDIyNiwgOSwgCi0gICAgOSwgMTEsIDIyNiwgMTAsIDksIDExLCAyMjYsIDExLCA5LCAxMSwgMjI2LCAxMiwgOSwgMTEsIDIyNiwgMTMsIDksIDExLCAKLSAgICAyMjYsIDE0LCA5LCAxMSwgMjI2LCAxNSwgOSwgMTEsIDIyNiwgMTYsIDksIDExLCAyMjYsIDE3LCA5LCAxMSwgMjI2LCAxOCwgCi0gICAgOSwgMTEsIDIyNiwgMTksIDksIDExLCAyMjYsIDIwLCA5LCAxMSwgMjI2LCAyMSwgOSwgMTEsIDIyNiwgMjIsIDksIDExLCAKLSAgICAyMjYsIDIzLCA5LCAxMSwgMjI2LCAyNCwgOSwgMTEsIDIyNiwgMjUsIDksIDExLCAyMjYsIDI2LCA5LCAxMSwgMjI2LCAyNywgCi0gICAgOSwgMTEsIDIyNiwgMjgsIDksIDExLCAyMjYsIDI5LCA5LCAxMSwgMjI2LCAzMCwgOSwgMTEsIDIyNiwgMzEsIDksIDExLCAKLSAgICAyMjYsIDMyLCA5LCAxMSwgMjI2LCAzMywgOSwgMTEsIDIyNiwgMzQsIDksIDExLCAyMjYsIDM1LCA5LCAxMSwgMjI2LCAzNiwgCi0gICAgOSwgMTEsIDIyNiwgMzcsIDksIDExLCAyMjYsIDM4LCA5LCAxMSwgMjI2LCAzOSwgOSwgMTEsIDIyNiwgNDAsIDksIDExLCAKLSAgICAyMjYsIDQxLCA5LCAxMSwgMjI2LCA0MiwgOSwgMTEsIDIyNiwgNDMsIDksIDExLCAyMjYsIDQ0LCA5LCAxMSwgMjI2LCA0NSwgCi0gICAgOSwgMTEsIDIyNiwgNDYsIDksIDExLCAyMjYsIDQ3LCA5LCAxMSwgMjI2LCA0OCwgOSwgMTEsIDIyNiwgNDksIDksIDExLCAKLSAgICAyMjYsIDUwLCA5LCAxMSwgMjI2LCA1MSwgOSwgMTEsIDIyNiwgNTIsIDksIDExLCAyMjYsIDUzLCA5LCAxMSwgMjI2LCA1NCwgCi0gICAgOSwgMTEsIDIyNiwgNTUsIDksIDExLCAyMjYsIDU2LCA5LCAxMSwgMjI2LCA1NywgOSwgMTEsIDIyNiwgNTgsIDksIDExLCAKLSAgICAyMjYsIDU5LCA5LCAxMSwgMjI2LCA2MCwgOSwgMTEsIDIyNiwgNjEsIDksIDExLCAyMjYsIDYyLCA5LCAxMSwgMjI2LCA2MywgCi0gICAgOSwgMTEsIDIyNiwgNjQsIDksIDExLCAyMjYsIDY1LCA5LCAxMSwgMjI2LCA2NiwgOSwgMTEsIDIyNiwgNjcsIDksIDExLCAKLSAgICAyMjYsIDY4LCA5LCAxMSwgMjI2LCA2OSwgOSwgMTEsIDIyNiwgNzAsIDksIDExLCAyMjYsIDcxLCA5LCAxMSwgMjI2LCA3MiwgCi0gICAgOSwgMTEsIDIyNiwgNzMsIDksIDExLCAyMjYsIDc0LCA5LCAxMSwgMjI2LCA3NSwgOSwgMTEsIDIyNiwgNzYsIDksIDExLCAKLSAgICAyMjYsIDc3LCA5LCAxMSwgMjI2LCA3OCwgOSwgMTEsIDIyNiwgNzksIDksIDExLCAyMjYsIDgwLCA5LCAxMSwgMjI2LCA4MSwgCi0gICAgOSwgMTEsIDIyNiwgODIsIDksIDExLCAyMjYsIDgzLCA5LCAxMSwgMjI2LCA4NCwgOSwgMTEsIDIyNiwgODUsIDksIDExLCAKLSAgICAyMjYsIDg2LCA5LCAxMSwgMjI2LCA4NywgOSwgMTEsIDIyNiwgODgsIDksIDExLCAyMjYsIDg5LCA5LCAxMSwgMjI2LCA5MCwgCi0gICAgOSwgMTEsIDIyNiwgOTEsIDksIDExLCAyMjYsIDkyLCA5LCAxMSwgMjI2LCA5MywgOSwgMTEsIDIyNiwgOTQsIDksIDExLCAKLSAgICAyMjYsIDk1LCA5LCAxMSwgMjI2LCA5NiwgOSwgMTEsIDIyNiwgOTcsIDksIDExLCAyMjYsIDk4LCA5LCAxMSwgMjI2LCA5OSwgCi0gICAgOSwgMTEsIDIyNiwgMTAwLCA5LCAxMSwgMjI2LCAxMDEsIDksIDExLCAyMjYsIDEwMiwgOSwgMTEsIDIyNiwgMTAzLCA5LCAKLSAgICAxMSwgMjI2LCAxMDQsIDksIDExLCAyMjYsIDEwNSwgOSwgMTEsIDIyNiwgMTA2LCA5LCAxMSwgMjI2LCAxMDcsIDksIDExLCAKLSAgICAyMjYsIDEwOCwgOSwgMTEsIDIyNiwgMTA5LCA5LCAxMSwgMjI2LCAxMTAsIDksIDExLCAyMjYsIDExMSwgOSwgMTEsIDIyNiwgCi0gICAgMTEyLCA5LCAxMSwgMjI2LCAxMTMsIDksIDExLCAyMjYsIDExNCwgOSwgMTEsIDIyNiwgMTE1LCA5LCAxMSwgMjI2LCAxMTYsIAotICAgIDksIDExLCAyMjYsIDExNywgOSwgMTEsIDIyNiwgMTE4LCA5LCAxMSwgMjI2LCAxMTksIDksIDExLCAyMjYsIDEyMCwgOSwgCi0gICAgMTEsIDIyNiwgMTIxLCA5LCAxMSwgMjI2LCAxMjIsIDksIDExLCAyMjYsIDEyMywgOSwgMTEsIDIyNiwgMTI0LCA5LCAxMSwgCi0gICAgMjI2LCAxMjUsIDksIDExLCAyMjYsIDEyNiwgOSwgMTEsIDIyNiwgMTI3LCA5LCAxMSwgMjI2LCAxMjgsIDksIDExLCAyMjYsIAotICAgIDEyOSwgOSwgMTEsIDIyNiwgMTMwLCA5LCAxMSwgMjI2LCAxMzEsIDksIDExLCAyMjYsIDEzMiwgOSwgMTEsIDIyNiwgMTMzLCAKLSAgICA5LCAxMSwgMjI2LCAxMzQsIDksIDExLCAyMjYsIDEzNSwgOSwgMTEsIDIyNiwgMTM2LCA5LCAxMSwgMjI2LCAxMzcsIDksIAotICAgIDExLCAyMjYsIDEzOCwgOSwgMTEsIDIyNiwgMTM5LCA5LCAxMSwgMjI2LCAxNDAsIDksIDExLCAyMjYsIDE0MSwgOSwgMTEsIAotICAgIDIyNiwgMTQyLCA5LCAxMSwgMjI2LCAxNDMsIDksIDExLCAyMjYsIDE0NCwgOSwgMTEsIDIyNiwgMTQ1LCA5LCAxMSwgMjI2LCAKLSAgICAxNDYsIDksIDExLCAyMjYsIDE0NywgOSwgMTEsIDIyNiwgMTQ4LCA5LCAxMSwgMjI2LCAxNDksIDksIDExLCAyMjYsIDE1MCwgCi0gICAgOSwgMTEsIDIyNiwgMTUxLCA5LCAxMSwgMjI2LCAxNTIsIDksIDExLCAyMjYsIDE1MywgOSwgMTEsIDIyNiwgMTU0LCA5LCAKLSAgICAxMSwgMjI2LCAxNTUsIDksIDExLCAyMjYsIDE1NiwgOSwgMTEsIDIyNiwgMTU3LCA5LCAxMSwgMjI2LCAxNTgsIDksIDExLCAKLSAgICAyMjYsIDE1OSwgOSwgMTEsIDIyNiwgMTYwLCA5LCAxMSwgMjI2LCAxNjEsIDksIDExLCAyMjYsIDE2MiwgOSwgMTEsIDIyNiwgCi0gICAgMTYzLCA5LCAxMSwgMjI2LCAxNjQsIDksIDExLCAyMjYsIDE2NSwgOSwgMTEsIDIyNiwgMTY2LCA5LCAxMSwgMjI2LCAxNjcsIAotICAgIDksIDExLCAyMjYsIDE2OCwgOSwgMTEsIDIyNiwgMTY5LCA5LCAxMSwgMjI2LCAxNzAsIDksIDExLCAyMjYsIDE3MSwgOSwgCi0gICAgMTEsIDIyNiwgMTcyLCA5LCAxMSwgMjI2LCAxNzMsIDksIDExLCAyMjYsIDE3NCwgOSwgMTEsIDIyNiwgMTc1LCA5LCAxMSwgCi0gICAgMjI2LCAxNzYsIDksIDExLCAyMjYsIDE3NywgOSwgMTEsIDIyNiwgMTc4LCA5LCAxMSwgMjI2LCAxNzksIDksIDExLCAyMjYsIAotICAgIDE4MCwgOSwgMTEsIDIyNiwgMTgxLCA5LCAxMSwgMjI2LCAxODIsIDksIDExLCAyMjYsIDE4MywgOSwgMTEsIDIyNiwgMTg0LCAKLSAgICA5LCAxMSwgMjI2LCAxODUsIDksIDExLCAyMjYsIDE4NiwgOSwgMTEsIDIyNiwgMTg3LCA5LCAxMSwgMjI2LCAxODgsIDksIAotICAgIDExLCAyMjYsIDE4OSwgOSwgMTEsIDIyNiwgMTkwLCA5LCAxMSwgMjI2LCAxOTEsIDksIDExLCAyMjYsIDE5MiwgOSwgMTEsIAotICAgIDIyNiwgMTkzLCA5LCAxMSwgMjI2LCAxOTQsIDksIDExLCAyMjYsIDE5NSwgOSwgMTEsIDIyNiwgMTk2LCA5LCAxMSwgMjI2LCAKLSAgICAxOTcsIDksIDExLCAyMjYsIDE5OCwgOSwgMTEsIDIyNiwgMTk5LCA5LCAxMSwgMjI2LCAyMDAsIDksIDExLCAyMjYsIDIwMSwgCi0gICAgOSwgMTEsIDIyNiwgMjAyLCA5LCAxMSwgMjI2LCAyMDMsIDksIDExLCAyMjYsIDIwNCwgOSwgMTEsIDIyNiwgMjA1LCA5LCAKLSAgICAxMSwgMjI2LCAyMDYsIDksIDExLCAyMjYsIDIwNywgOSwgMTEsIDIyNiwgMjA4LCA5LCAxMSwgMjI2LCAyMDksIDksIDExLCAKLSAgICAyMjYsIDIxMCwgOSwgMTEsIDIyNiwgMjExLCA5LCAxMSwgMjI2LCAyMTIsIDksIDExLCAyMjYsIDIxMywgOSwgMTEsIDIyNiwgCi0gICAgMjE0LCA5LCAxMSwgMjI2LCAyMTUsIDksIDExLCAyMjYsIDIxNiwgOSwgMTEsIDIyNiwgMjE3LCA5LCAxMSwgMjI2LCAyMTgsIAotICAgIDksIDExLCAyMjYsIDIxOSwgOSwgMTEsIDIyNiwgMjIwLCA5LCAxMSwgMjI2LCAyMjEsIDksIDExLCAyMjYsIDIyMiwgOSwgCi0gICAgMTEsIDIyNiwgMjIzLCA5LCAxMSwgMjI2LCAyMjQsIDksIDExLCAyMjYsIDIyNSwgOSwgMTEsIDIyNiwgMjI2LCA5LCAxMSwgCi0gICAgMjI2LCAyMjcsIDksIDExLCAyMjYsIDIyOCwgOSwgMTEsIDIyNiwgMjI5LCA5LCAxMSwgMjI2LCAyMzAsIDksIDExLCAyMjYsIAotICAgIDIzMSwgOSwgMTEsIDIyNiwgMjMyLCA5LCAxMSwgMjI2LCAyMzMsIDksIDExLCAyMjYsIDIzNCwgOSwgMTEsIDIyNiwgMjM1LCAKLSAgICA5LCAxMSwgMjI2LCAyMzYsIDksIDExLCAyMjYsIDIzNywgOSwgMTEsIDIyNiwgMjM4LCA5LCAxMSwgMjI2LCAyMzksIDksIAotICAgIDExLCAyMjYsIDI0MCwgOSwgMTEsIDIyNiwgMjQxLCA5LCAxMSwgMjI2LCAyNDIsIDksIDExLCAyMjYsIDI0MywgOSwgMTEsIAotICAgIDIyNiwgMjQ0LCA5LCAxMSwgMjI2LCAyNDUsIDksIDExLCAyMjYsIDI0NiwgOSwgMTEsIDIyNiwgMjQ3LCA5LCAxMSwgMjI2LCAKLSAgICAyNDgsIDksIDExLCAyMjYsIDI0OSwgOSwgMTEsIDIyNiwgMjUwLCA5LCAxMSwgMjI2LCAyNTEsIDksIDExLCAyMjYsIDI1MiwgCi0gICAgOSwgMTEsIDIyNiwgMjUzLCA5LCAxMSwgMjI2LCAyNTQsIDksIDExLCAyMjYsIDI1NSwgOSwgMTEsIDIyNywgMCwgOSwgMTEsIAotICAgIDIyNywgMSwgOSwgMTEsIDIyNywgMiwgOSwgMTEsIDIyNywgMywgOSwgMTEsIDIyNywgNCwgOSwgMTEsIDIyNywgNSwgOSwgCi0gICAgMTEsIDIyNywgNiwgOSwgMTEsIDIyNywgNywgOSwgMTEsIDIyNywgOCwgOSwgMTEsIDIyNywgOSwgOSwgMTEsIDIyNywgMTAsIAotICAgIDksIDExLCAyMjcsIDExLCA5LCAxMSwgMjI3LCAxMiwgOSwgMTEsIDIyNywgMTMsIDksIDExLCAyMjcsIDE0LCA5LCAxMSwgCi0gICAgMjI3LCAxNSwgOSwgMTEsIDIyNywgMTYsIDksIDExLCAyMjcsIDE3LCA5LCAxMSwgMjI3LCAxOCwgOSwgMTEsIDIyNywgMTksIAotICAgIDksIDExLCAyMjcsIDIwLCA5LCAxMSwgMjI3LCAyMSwgOSwgMTEsIDIyNywgMjIsIDksIDExLCAyMjcsIDIzLCA5LCAxMSwgCi0gICAgMjI3LCAyNCwgOSwgMTEsIDIyNywgMjUsIDksIDExLCAyMjcsIDI2LCA5LCAxMSwgMjI3LCAyNywgOSwgMTEsIDIyNywgMjgsIAotICAgIDksIDExLCAyMjcsIDI5LCA5LCAxMSwgMjI3LCAzMCwgOSwgMTEsIDIyNywgMzEsIDksIDExLCAyMjcsIDMyLCA5LCAxMSwgCi0gICAgMjI3LCAzMywgOSwgMTEsIDIyNywgMzQsIDksIDExLCAyMjcsIDM1LCA5LCAxMSwgMjI3LCAzNiwgOSwgMTEsIDIyNywgMzcsIAotICAgIDksIDExLCAyMjcsIDM4LCA5LCAxMSwgMjI3LCAzOSwgOSwgMTEsIDIyNywgNDAsIDksIDExLCAyMjcsIDQxLCA5LCAxMSwgCi0gICAgMjI3LCA0MiwgOSwgMTEsIDIyNywgNDMsIDksIDExLCAyMjcsIDQ0LCA5LCAxMSwgMjI3LCA0NSwgOSwgMTEsIDIyNywgNDYsIAotICAgIDksIDExLCAyMjcsIDQ3LCA5LCAxMSwgMjI3LCA0OCwgOSwgMTEsIDIyNywgNDksIDksIDExLCAyMjcsIDUwLCA5LCAxMSwgCi0gICAgMjI3LCA1MSwgOSwgMTEsIDIyNywgNTIsIDksIDExLCAyMjcsIDUzLCA5LCAxMSwgMjI3LCA1NCwgOSwgMTEsIDIyNywgNTUsIAotICAgIDksIDExLCAyMjcsIDU2LCA5LCAxMSwgMjI3LCA1NywgOSwgMTEsIDIyNywgNTgsIDksIDExLCAyMjcsIDU5LCA5LCAxMSwgCi0gICAgMjI3LCA2MCwgOSwgMTEsIDIyNywgNjEsIDksIDExLCAyMjcsIDYyLCA5LCAxMSwgMjI3LCA2MywgOSwgMTEsIDIyNywgNjQsIAotICAgIDksIDExLCAyMjcsIDY1LCA5LCAxMSwgMjI3LCA2NiwgOSwgMTEsIDIyNywgNjcsIDksIDExLCAyMjcsIDY4LCA5LCAxMSwgCi0gICAgMjI3LCA2OSwgNywgMywgMjAsIDI1NCwgNTQsIDcsIDMsIDIwLCAyNTMsIDg4LCA3LCAzLCAyMCwgMjU0LCA1NSwgNywgMywgCi0gICAgMjAsIDI0OSwgMjQ1LCA3LCAzLCAyMCwgMjQ5LCAyNDYsIDcsIDMsIDIwLCAxODIsIDI1NSwgNTksIDI1NCwgMTgzLCA3LCAzLCAKLSAgICAyMCwgMjUzLCAxOTUsIDEyMCwgMywgMjAsIDI1MywgMTUxLCAyNDcsIDk0LCAxMjAsIDMsIDIwLCAyNTMsIDE1MSwgMjQ3LCAKLSAgICAxMzcsIDEyMCwgMywgMjAsIDI1MywgMTUxLCAyNDcsIDE1MiwgMTIwLCAzLCAyMCwgMjU0LCAxNjgsIDI0NywgOTQsIDEyMCwgCi0gICAgMywgMjAsIDI1MywgMTUxLCAyNDcsIDIyOSwgNzgsIDEsIDI1MywgMTY0LCAyLCAyMzgsIDYsIDc4LCAyNDAsIDE0MywgMjI3LCAKLSAgICAyNDcsIDIzNywgMjIsIDc4LCAyMCwgMjM1LCAxMDYsIDI1MywgMTY0LCAyNTMsIDE2NCwgMjM3LCAxODcsIDc4LCAxLCAyMjksIAotICAgIDE4MiwgMjQxLCA5NywgNzgsIDEsIDI0NiwgMjQwLCAyNDAsIDE3NCwgNzgsIDEsIDI0NiwgMjQwLCAyMzcsIDIzOCwgNzgsIAotICAgIDEsIDI0NiwgMjQwLCAyNTIsIDI1MiwgNzgsIDEsIDI0NiwgMjQwLCAyNDcsIDEsIDc4LCAxLCAyNDYsIDI0MCwgMjM3LCAKLSAgICAyMDUsIDc4LCAxLCAyNDYsIDI0MCwgMzUsIDI0NywgNDEsIDc4LCAxLCAyNDYsIDI0MCwgMjQxLCAyMjIsIDc4LCAxLCAyNDYsIAotICAgIDI0MCwgMjQ4LCAxNzEsIDc4LCAxLCAyMjksIDE4MiwgNzksIDUzLCA3OCwgMSwgMjQ2LCAyNDQsIDIsIDI0NiwgMjQ0LCAKLSAgICAyNDYsIDE2NCwgNzgsIDEsIDI0NiwgMjQ0LCAyLCAyNTMsIDE5MywgMjQ2LCAxNjQsIDc4LCAxLCAyNDYsIDI0NCwgMiwgCi0gICAgMjM3LCAyMDAsIDIyLCAyNDYsIDI0NCwgMjQ2LCAxNjQsIDc4LCAxLCAyNDYsIDI0NCwgMiwgMjM3LCAyMDAsIDIyLCAyNTMsIAotICAgIDE5MywgMjQ2LCAxNjQsIDc4LCAxLCA5MiwgMiwgMjM3LCAxODcsIDc4LCAxLCA5MiwgMiwgMjM1LCAxMzQsIDc4LCAxLCA5MiwgCi0gICAgMiwgMjM3LCAyMDYsIDc4LCAxLCAyNTMsIDE3MSwgMiwgMjM1LCAzMywgNzgsIDEsIDI0MSwgMTQzLCAyLCAyMzUsIDMzLCAKLSAgICA3OCwgMSwgMjQxLCAxMTYsIDIsIDIzNSwgMzMsIDc4LCAxLCAyNTUsIDI5LCAyLCAyMzcsIDIwNiwgNzgsIDEsIDI1MywgCi0gICAgMjAwLCAyLCAyMzUsIDMzLCA3OCwgMSwgMjQ2LCAxMDcsIDIsIDIzNSwgMzMsIDc4LCAxLCAyNTQsIDE1OCwgMiwgMjM1LCAKLSAgICAzMywgNzgsIDEsIDI1MywgMTY0LCAyLCAyMzUsIDMzLCA3OCwgMSwgMzUsIDI1MiwgMjE0LCAyLCAyMzUsIDMzLCA3OCwgMSwgCi0gICAgMjUyLCAyMTQsIDIsIDIzNSwgMzMsIDc4LCAxLCAyNDQsIDkwLCAyLCAyMzUsIDMzLCA3OCwgMSwgMjU0LCAxMDAsIDIsIAotICAgIDIzNSwgMzMsIDc4LCAxLCAyNTMsIDIzLCAyLCAyMzUsIDMzLCA3OCwgMSwgMjM5LCAyMzQsIDIsIDIzNSwgMzMsIDc4LCAxLCAKLSAgICAzNSwgMjU0LCAyMzEsIDIsIDIzNSwgMzMsIDc4LCAxLCAyNTQsIDIzMSwgMiwgMjM1LCAzMywgNzgsIDEsIDI0NiwgOCwgMiwgCi0gICAgMjM1LCAzMywgNzgsIDEsIDI1NCwgMTQwLCAyLCAyMzUsIDMzLCA3OCwgMSwgMjUxLCAxNzksIDIsIDIzNSwgMzMsIDc4LCAxLCAKLSAgICAyNDYsIDI0NCwgMiwgMjM1LCAzMywgNzgsIDEsIDI1NCwgMTU2LCAyLCAyMzUsIDMzLCA3OCwgMSwgMjUzLCAyMDAsIDIsIAotICAgIDIzOCwgNywgNzgsIDEsIDI1MywgMTcxLCAyLCAyNDEsIDExLCA3OCwgMSwgMjUyLCAyMTQsIDIsIDI0MSwgMTEsIDc4LCAxLCAKLSAgICAyNTQsIDIzMSwgMiwgMjQxLCAxMSwgNzgsIDIwLCA5MiwgMjM3LCAyMDUsIDEwLCAxLCA5MiwgMjQyLCAyMiwgNDQsIDE1LCAKLSAgICAxMCwgMSwgOTIsIDI0MiwgMjIsIDM1LCAxNSwgMTAsIDEsIDI0NywgNjcsIDQ0LCAxNSwgMTAsIDEsIDI0NywgNjcsIDM1LCAKLSAgICAxNSwgMTAsIDEsIDI0NywgNjcsIDU5LCAxNSwgMTAsIDEsIDI0NywgNjcsIDEyNCwgMTUsIDEwLCAxLCAyNTMsIDE1OCwgNDQsIAotICAgIDE1LCAxMCwgMSwgMjUzLCAxNTgsIDM1LCAxNSwgMTAsIDEsIDI1MywgMTU4LCA1OSwgMTUsIDEwLCAxLCAyNTMsIDE1OCwgCi0gICAgMTI0LCAxNSwgMTAsIDEsIDI0MCwgMjQ0LCA0NCwgMTUsIDEwLCAxLCAyNDAsIDI0NCwgMzUsIDE1LCAxMCwgMSwgMjQwLCAKLSAgICAyNDQsIDU5LCAxNSwgMTAsIDEsIDI0MCwgMjQ0LCAxMjQsIDE1LCAxMCwgMSwgMjM3LCAxOTIsIDQ0LCAxNSwgMTAsIDEsIAotICAgIDIzNywgMTkyLCAzNSwgMTUsIDEwLCAxLCAyMzcsIDE5MiwgNTksIDE1LCAxMCwgMSwgMjM3LCAxOTIsIDEyNCwgMTUsIDEwLCAKLSAgICAxLCAyNDEsIDE3LCA0NCwgMTUsIDEwLCAxLCAyNDEsIDE3LCAzNSwgMTUsIDEwLCAxLCAyNDEsIDE3LCA1OSwgMTUsIDEwLCAKLSAgICAxLCAyNDEsIDE3LCAxMjQsIDE1LCAxMCwgMSwgMjQ3LCAxMTAsIDQ0LCAxNSwgMTAsIDEsIDI0NywgMTEwLCAzNSwgMTUsIAotICAgIDEwLCAxLCAyNDcsIDExMCwgNTksIDE1LCAxMCwgMSwgMjQ3LCAxMTAsIDEyNCwgMTUsIDEwLCAxLCAyNTMsIDE2MywgNDQsIAotICAgIDE1LCAxMCwgMSwgMjUzLCAxNjMsIDM1LCAxNSwgMTAsIDEsIDI1MywgMTYzLCA1OSwgMTUsIDEwLCAxLCAyNTMsIDE2MywgCi0gICAgMTI0LCAxNSwgMTAsIDEsIDI0MSwgOSwgNDQsIDE1LCAxMCwgMSwgMjQxLCA5LCAzNSwgMTUsIDEwLCAxLCAyNDEsIDksIDU5LCAKLSAgICAxNSwgMTAsIDEsIDI0MSwgOSwgMTI0LCAxNSwgMTAsIDEsIDI0NywgNzIsIDQ0LCAxNSwgMTAsIDEsIDI0NywgNzIsIDM1LCAKLSAgICAxNSwgMTAsIDEsIDI0NywgNzIsIDU5LCAxNSwgMTAsIDEsIDI0NywgNzIsIDEyNCwgMTUsIDEwLCAxLCAyNDcsIDk2LCA0NCwgCi0gICAgMTUsIDEwLCAxLCAyNDcsIDk2LCAzNSwgMTUsIDEwLCAxLCAyNDcsIDk2LCA1OSwgMTUsIDEwLCAxLCAyNDcsIDk2LCAxMjQsIAotICAgIDE1LCAxMCwgMSwgMjQwLCAyMzcsIDQ0LCAxNSwgMTAsIDEsIDI0MCwgMjM3LCAzNSwgMTUsIDEwLCAxLCAyNDAsIDIzNywgCi0gICAgNTksIDE1LCAxMCwgMSwgMjQwLCAyMzcsIDEyNCwgMTUsIDEwLCAxLCAyMzUsIDEwMCwgNDQsIDE1LCAxMCwgMSwgMjM1LCAKLSAgICAxMDAsIDM1LCAxNSwgMTAsIDEsIDIzNSwgMTAwLCA1OSwgMTUsIDEwLCAxLCAyMzUsIDEwMCwgMTI0LCAxNSwgMTAsIDEsIAotICAgIDIzNywgMjM5LCA0NCwgMTUsIDEwLCAxLCAyMzcsIDIzOSwgMzUsIDE1LCAxMCwgMSwgMjQxLCAxMTUsIDQ0LCAxNSwgMTAsIAotICAgIDEsIDI0MSwgMTE1LCAzNSwgMTUsIDEwLCAxLCAyNTMsIDIxNiwgNDQsIDE1LCAxMCwgMSwgMjUzLCAyMTYsIDM1LCAxNSwgCi0gICAgMTAsIDEsIDI0OCwgMjEsIDQ0LCAxNSwgMTAsIDEsIDI0OCwgMjEsIDM1LCAxNSwgMTAsIDEsIDI1MywgMjM1LCA0NCwgMTUsIAotICAgIDEwLCAxLCAyNTMsIDIzNSwgMzUsIDE1LCAxMCwgMSwgMjQ4LCAxNTAsIDQ0LCAxNSwgMTAsIDEsIDI0OCwgMTUwLCAzNSwgCi0gICAgMTUsIDEwLCAxLCAyNDAsIDE5MSwgNDQsIDE1LCAxMCwgMSwgMjQwLCAxOTEsIDM1LCAxNSwgMTAsIDEsIDI0MCwgMTkxLCAKLSAgICA1OSwgMTUsIDEwLCAxLCAyNDAsIDE5MSwgMTI0LCAxNSwgMTAsIDEsIDI1MywgMTAyLCA0NCwgMTUsIDEwLCAxLCAyNTMsIAotICAgIDEwMiwgMzUsIDE1LCAxMCwgMSwgMjUzLCAxMDIsIDU5LCAxNSwgMTAsIDEsIDI1MywgMTAyLCAxMjQsIDE1LCAxMCwgMSwgCi0gICAgMjQ3LCA3OSwgNDQsIDE1LCAxMCwgMSwgMjQ3LCA3OSwgMzUsIDE1LCAxMCwgMSwgMjQ3LCA3OSwgNTksIDE1LCAxMCwgMSwgCi0gICAgMjQ3LCA3OSwgMTI0LCAxNSwgMTAsIDEsIDI0MSwgNywgNDQsIDE1LCAxMCwgMSwgMjQxLCA3LCAzNSwgMTUsIDEwLCAxLCAKLSAgICAyNDEsIDcsIDU5LCAxNSwgMTAsIDEsIDI0MSwgNywgMTI0LCAxNSwgMTAsIDEsIDI0NiwgMTU2LCAyMzgsIDEsIDQ0LCAxNSwgCi0gICAgMTAsIDEsIDI0NiwgMTU2LCAyMzgsIDEsIDM1LCAxNSwgMTAsIDEsIDI0MSwgMTIsIDQ0LCAxNSwgMTAsIDEsIDI0MSwgMTIsIAotICAgIDM1LCAxNSwgMTAsIDEsIDI0MSwgMTIsIDU5LCAxNSwgMTAsIDEsIDI0MSwgMTIsIDEyNCwgMTUsIDEwLCAxLCAyNTIsIDIwNywgCi0gICAgMiwgNjIsIDY0LCA0NCwgMTUsIDEwLCAxLCAyNTIsIDIwNywgMiwgNjIsIDY0LCAzNSwgMTUsIDEwLCAxLCAyNTIsIDIwNywgCi0gICAgMjQ3LCAzNCwgNDQsIDE1LCAxMCwgMSwgMjUyLCAyMDcsIDI0NywgMzQsIDM1LCAxNSwgMTAsIDEsIDI1MiwgMjA3LCAyNDcsIAotICAgIDM0LCA1OSwgMTUsIDEwLCAxLCAyNTIsIDIwNywgMjQ3LCAzNCwgMTI0LCAxNSwgMTAsIDEsIDI1MiwgMjA3LCAyMjksIDE3OSwgCi0gICAgNDQsIDE1LCAxMCwgMSwgMjUyLCAyMDcsIDIyOSwgMTc5LCAzNSwgMTUsIDEwLCAxLCAyNTIsIDIwNywgMjI5LCAxNzksIDU5LCAKLSAgICAxNSwgMTAsIDEsIDI1MiwgMjA3LCAyMjksIDE3OSwgMTI0LCAxNSwgMTAsIDEsIDYyLCAyMzcsIDEyMywgNDQsIDE1LCAxMCwgCi0gICAgMSwgNjIsIDIzNywgMTIzLCAzNSwgMTUsIDEwLCAxLCA2MiwgMjM3LCAxMjMsIDIsIDE2NCwgNjQsIDQ0LCAxNSwgMTAsIDEsIAotICAgIDYyLCAyMzcsIDEyMywgMiwgMTY0LCA2NCwgMzUsIDE1LCAxMCwgMSwgMjU0LCAyNDEsIDQ0LCAxNSwgMTAsIDEsIDI1NCwgCi0gICAgMjQxLCAzNSwgMTUsIDEwLCAxLCAyNTQsIDI0MSwgNTksIDE1LCAxMCwgMSwgMjU0LCAyNDEsIDEyNCwgMTUsIDEwLCAxLCAKLSAgICA5NywgNDQsIDE1LCAxMCwgMSwgOTcsIDM1LCAxNSwgMTAsIDEsIDI1NCwgMjIyLCA0NCwgMTUsIDEwLCAxLCAyNTQsIDIyMiwgCi0gICAgMzUsIDE1LCAxMCwgMSwgMjU0LCAyMjYsIDQ0LCAxNSwgMTAsIDEsIDI1NCwgMjI2LCAzNSwgMTUsIDEwLCAxLCA5NywgMiwgCi0gICAgMTY0LCA2NCwgNDQsIDE1LCAxMCwgMSwgMjU0LCAyNTQsIDQ0LCAxNSwgMTAsIDEsIDI1NCwgMjU0LCAzNSwgMTUsIDEwLCAxLCAKLSAgICAyMzUsIDQ5LCAyNTQsIDIyMiwgNDQsIDE1LCAxMCwgMSwgMjM1LCA0OSwgMjU0LCAyMjIsIDM1LCAxNSwgMTAsIDEsIDIzNSwgCi0gICAgNDksIDI1NCwgMjI2LCA0NCwgMTUsIDEwLCAxLCAyMzUsIDQ5LCAyNTQsIDIyNiwgMzUsIDE1LCAxMCwgMSwgMTYxLCA0NCwgCi0gICAgMTUsIDEwLCAxLCAxNjEsIDM1LCAxNSwgMTAsIDEsIDE2MSwgNTksIDE1LCAxMCwgMSwgMTYxLCAxMjQsIDE1LCAxMCwgMSwgCi0gICAgMjM3LCAxNjcsIDIzOCwgMTMsIDIzNSwgNDksIDkyLCAxNzUsIDU5LCAxNSwgMTAsIDEsIDIzNywgMTY3LCAyMzgsIDEzLCAKLSAgICAyMzUsIDQ5LCA5MiwgMTc1LCAxMjQsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCA5MiwgNDQsIDE1LCAxMCwgMjAsIAotICAgIDYyLCAyLCAxNjQsIDY0LCAyLCA5MiwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAyNTQsIDIxNSwgNDQsIAotICAgIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAyNTQsIDIxNSwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAKLSAgICAyLCAyNTMsIDU0LCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDI1MywgNTQsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICA2MiwgMiwgMTY0LCA2NCwgMiwgOTcsIDQ0LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgOTcsIDM1LCAxNSwgMTAsIAotICAgIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMjU0LCAyMjIsIDQ0LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMjU0LCAKLSAgICAyMjIsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMjU0LCAyMjYsIDQ0LCAxNSwgMTAsIDIwLCA2MiwgMiwgCi0gICAgMTY0LCA2NCwgMiwgMjU0LCAyMjYsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMTYxLCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDE2MSwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAxNjEsIDU5LCAKLSAgICAxNSwgMTAsIDIwLCAyMzcsIDE2NywgMjM1LCA0OSwgNjIsIDIsIDE2NCwgNjQsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCAyMzcsIDE2NywgMjM1LCA0OSwgNjIsIDIsIDE2NCwgNjQsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyMzcsIAotICAgIDE2NywgMjM1LCA0OSwgNjIsIDIsIDE2NCwgNjQsIDIsIDkyLCAxNzUsIDU5LCAxNSwgMTAsIDEsIDI0MCwgMTc2LCA2MiwgCi0gICAgNDQsIDE1LCAxMCwgMSwgMjQwLCAxNzYsIDYyLCAzNSwgMTUsIDEwLCAxLCAyNDAsIDE3NiwgNjIsIDU5LCAxNSwgMTAsIDEsIAotICAgIDI0MCwgMTc2LCA2MiwgMTI0LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgCi0gICAgNjIsIDIsIDE2NCwgNjQsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCA1NSwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIAotICAgIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCAxMDEsIAotICAgIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIxNywgMiwgMjAyLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDU1LCA0NCwgCi0gICAgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIxNywgMiwgNjIsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDEwMSwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDI1MiwgMjEwLCAyLCAyMDIsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgNTUsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCAyNTIsIDIxMCwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCA2MiwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDI0NiwgMjA1LCAyLCAxMjMsIDQ0LCAxNSwgMTAsIDIwLCAyNDYsIDIwNSwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICAyNDYsIDIwNSwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDI0NiwgMjA1LCAyLCA2MiwgNDQsIDE1LCAxMCwgMjAsIAotICAgIDEyMywgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMTIzLCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDEwMSwgMiwgMTIzLCA0NCwgCi0gICAgMTUsIDEwLCAyMCwgMTAxLCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDIwMiwgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgMjAyLCAKLSAgICAyLCAxMDEsIDQ0LCAxNSwgMTAsIDIwLCAyMDIsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDEyMywgNDQsIAotICAgIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAxMDEsIDQ0LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgMjAyLCA0NCwgMTUsIAotICAgIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyNDAsIDIsIDEwMSwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDI1MiwgMjQwLCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjM3LCAyLCAxMjMsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICAyNTIsIDIzNywgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMzcsIDIsIDIwMiwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgCi0gICAgMjM3LCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjQxLCAyLCAxMDEsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDI0MSwgCi0gICAgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyNTMsIDExMCwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDI0NCwgMiwgMTIzLCAKLSAgICA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyNDQsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjQwLCAxNTcsIDIsIDEyMywgNDQsIAotICAgIDE1LCAxMCwgMjAsIDI0MCwgMTU3LCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjM1LCAyLCAxMjMsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDIzNSwgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMzUsIDIsIDIwMiwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDI1MiwgMjM1LCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjM1LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgMjUyLCAyMzUsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjUzLCAxLCAyLCAxMDEsIDQ0LCAxNSwgMTAsIDIwLCAyNTMsIAotICAgIDEsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjUzLCAxLCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjUzLCAxLCAyLCAKLSAgICA2MiwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCA5MiwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCAxMjMsIAotICAgIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDIwMiwgNDQsIAotICAgIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCAyMTYsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgNTUsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDIxNCwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCA2MiwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDIxNiwgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgMjE2LCAyLCAxMDEsIDQ0LCAxNSwgMTAsIDIwLCAyMTYsIDIsIAotICAgIDIwMiwgNDQsIDE1LCAxMCwgMjAsIDIxNiwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyMTYsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgNTUsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDU1LCAyLCAKLSAgICAxMDEsIDQ0LCAxNSwgMTAsIDIwLCA1NSwgMiwgMjAyLCA0NCwgMTUsIDEwLCAyMCwgNTUsIDIsIDU1LCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgNTUsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCA1NSwgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgCi0gICAgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCAKLSAgICAyMDIsIDQ0LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgOTIsIAotICAgIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCA2MiwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjA3LCAyLCAxMjMsIAotICAgIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIwNywgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIwNywgMiwgOTIsIDE3NSwgCi0gICAgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjA3LCAyLCA2MiwgNDQsIDE1LCAxMCwgMjAsIDYyLCAyLCAxMjMsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCA2MiwgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDIwMiwgNDQsIDE1LCAxMCwgMjAsIDYyLCAyLCA1NSwgCi0gICAgNDQsIDE1LCAxMCwgMjAsIDYyLCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDYyLCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgMjQ3LCAyMTEsIDIsIDIyOSwgMTYzLCA5MiwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjI1LCAyLCAyMjksIDE2MywgOTIsIAotICAgIDQ0LCAxNSwgMTAsIDIwLCA5MiwgMTc1LCAyLCAyMjksIDE2MywgOTIsIDQ0LCAxNSwgMTAsIDIwLCAyMzcsIDk2LCAyLCAKLSAgICAyMzMsIDE5NiwgNDQsIDE1LCAxMCwgMjAsIDIzNywgOTYsIDIsIDIzMywgMjEwLCA0NCwgMTUsIDEwLCAyMCwgMjM3LCA5NiwgCi0gICAgMiwgMjQwLCAyMjQsIDQ0LCAxNSwgMTAsIDIwLCAyMzcsIDk2LCAyLCAyNDAsIDI0OCwgNDQsIDE1LCAxMCwgMjAsIDIzNywgCi0gICAgOTYsIDIsIDI0MSwgMCwgNDQsIDE1LCAxMCwgMjAsIDIzNywgOTYsIDIsIDIyOSwgMTYzLCA5MiwgNDQsIDE1LCAxMCwgMjAsIAotICAgIDYyLCAyLCAxNjQsIDY0LCAyLCAyNTIsIDIyNSwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAyNDYsIDI1MCwgCi0gICAgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAKLSAgICAyNDYsIDE1NiwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgNjIsIAotICAgIDIsIDE2NCwgNjQsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDI1MiwgMjI1LCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyMTcsIDIsIDI0NiwgMjUwLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyMTcsIDIsIDI0NiwgMTU2LCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIAotICAgIDIwLCAyNTIsIDIxNywgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgMjUyLCAyMjUsIDM1LCAxNSwgMTAsIAotICAgIDIwLCAyNTIsIDIxMCwgMiwgMjQ2LCAyNTAsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgNTUsIDM1LCAxNSwgMTAsIAotICAgIDIwLCAyNTIsIDIxMCwgMiwgMjQ2LCAxNTYsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgOTIsIDE3NSwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDI1MiwgMjEwLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMjA1LCAyLCAyNTIsIDIyNSwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDI0NiwgMjA1LCAyLCAyNDYsIDI1MCwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMjA1LCAyLCA1NSwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDI0NiwgMjA1LCAyLCAyNDYsIDE1NiwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMjA1LCAyLCA5MiwgMTc1LCAzNSwgCi0gICAgMTUsIDEwLCAyMCwgMjQ2LCAyMDUsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMzUsIDIsIDkyLCAxNzUsIDM1LCAKLSAgICAxNSwgMTAsIDIwLCAyNTIsIDIzNSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNTMsIDEsIDIsIDkyLCAxNzUsIDM1LCAxNSwgCi0gICAgMTAsIDIwLCAyNTMsIDEsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDkyLCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyMTQsIDIsIDIxNiwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgCi0gICAgMjE0LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAKLSAgICA1NSwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgNjIsIDM1LCAxNSwgCi0gICAgMTAsIDIwLCA1NSwgMiwgOTIsIDM1LCAxNSwgMTAsIDIwLCA1NSwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgCi0gICAgMiwgMjUyLCAyMjUsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgMjQ2LCAyNTAsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIAotICAgIDE1NiwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgMjQ2LCAxNTYsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIAotICAgIDE1NiwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDkyLCAKLSAgICAxNzUsIDIsIDIyOSwgMTYzLCA5MiwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAyNTIsIDIyNSwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDYyLCAyLCAyNDYsIDI1MCwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAyNDYsIAotICAgIDE1NiwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDYyLCAzNSwgMTUsIAotICAgIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAxMDEsIAotICAgIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIAotICAgIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDI1MiwgMjA3LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAKLSAgICAyMTcsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxNywgCi0gICAgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIAotICAgIDI1MiwgMjA3LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCAKLSAgICAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDU1LCAKLSAgICA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDI1MiwgMjA3LCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAyMDUsIDIsIDU1LCAKLSAgICA1OSwgMTUsIDEwLCAyMCwgMTIzLCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAxMjMsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMTAxLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAxMDEsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjAyLCAyLCAxMjMsIDU5LCAKLSAgICAxNSwgMTAsIDIwLCAyMDIsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIAotICAgIDI0NiwgMTYzLCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAKLSAgICAxNjMsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyNDAsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjQwLCAKLSAgICAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDI0MCwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIzNywgMiwgCi0gICAgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMzcsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjM3LCAyLCAyMDIsIAotICAgIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIzNywgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDI0MSwgMiwgMTAxLCA1OSwgCi0gICAgMTUsIDEwLCAyMCwgMjUzLCAxMTAsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyNDQsIDIsIDEyMywgNTksIDE1LCAKLSAgICAxMCwgMjAsIDI1MiwgMjQ0LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI0MCwgMTU3LCAyLCAxMjMsIDU5LCAxNSwgMTAsIAotICAgIDIwLCAyNDAsIDE1NywgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIzNSwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyMzUsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjM1LCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIAotICAgIDIzNSwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTMsIDEsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDI1MywgMSwgMiwgCi0gICAgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDEwMSwgCi0gICAgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgMjE2LCA1OSwgCi0gICAgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAKLSAgICAyMTYsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDIxNiwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjE2LCAyLCA1NSwgNTksIAotICAgIDE1LCAxMCwgMjAsIDIxNiwgMiwgMjUyLCAyMDcsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgNTUsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDU1LCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgNTUsIDU5LCAKLSAgICAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDEwMSwgNTksIDE1LCAKLSAgICAxMCwgMjAsIDI0NiwgMTU2LCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgNTUsIDU5LCAxNSwgMTAsIAotICAgIDIwLCAyNDYsIDE1NiwgMiwgMjUyLCAyMDcsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIwNywgMiwgMTIzLCA1OSwgMTUsIDEwLCAKLSAgICAyMCwgMjUyLCAyMDcsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMDcsIDIsIDIyOSwgMTYzLCA5MiwgNTksIDE1LCAKLSAgICAxMCwgMjAsIDYyLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgNjIsIDIsIAotICAgIDIwMiwgNTksIDE1LCAxMCwgMjAsIDYyLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDYyLCAyLCAyNTIsIDIwNywgNTksIDE1LCAKLSAgICAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCA1NSwgMTI0LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMjUyLCAKLSAgICAyMDcsIDEyNCwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDU1LCAxMjQsIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCAyNTIsIAotICAgIDIwNywgMTI0LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgNTUsIDEyNCwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDI1MiwgCi0gICAgMjA3LCAxMjQsIDE1LCAxMCwgMjAsIDI0NiwgMjA1LCAyLCA1NSwgMTI0LCAxNSwgMTAsIDIwLCAyNDYsIDIwNSwgMiwgMjUyLCAKLSAgICAyMDcsIDEyNCwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDU1LCAxMjQsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAyNTIsIAotICAgIDIwNywgMTI0LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgMiwgNTUsIDEyNCwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDI1MiwgCi0gICAgMjA3LCAxMjQsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCAyMTYsIDEyNCwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDU1LCAKLSAgICAxMjQsIDE1LCAxMCwgMjAsIDIxNiwgMiwgNTUsIDEyNCwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDU1LCAxMjQsIDE1LCAKLSAgICAxMCwgMjAsIDI0NiwgMTU2LCAyLCAyNTIsIDIwNywgMTI0LCAxNSwgMTAsIDIwLCA2MiwgMiwgNTUsIDEyNCwgMTUsIDEwLCAKLSAgICAyMCwgNjIsIDIsIDI1MiwgMjA3LCAxMjQsIDE1LCAxMCwgMjAsIDIzNywgOTYsIDIsIDI0MCwgMjI0LCAxMjQsIDE1LCAxMCwgCi0gICAgMjAsIDIzNywgOTYsIDIsIDI0MCwgMjQ4LCAxMjQsIDE1LCAxMCwgMjAsIDIzNywgOTYsIDIsIDI0MSwgMCwgMTI0LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDI0MSwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjQxLCAyLCA2MiwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDI1MiwgMjQ0LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyNDQsIDIsIDYyLCA0NCwgMTUsIAotICAgIDEwLCAyMCwgMjQwLCAxNTcsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyNDAsIDE1NywgMiwgNjIsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyNDYsIDE2MywgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCA2MiwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDI0MCwgMTI5LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDYyLCA0NCwgMTUsIAotICAgIDEwLCAyMCwgMTAxLCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMTAxLCAyLCA2MiwgNDQsIDE1LCAxMCwgMjAsIDEyMywgCi0gICAgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDEyMywgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyMDIsIDIsIDkyLCAxNzUsIAotICAgIDQ0LCAxNSwgMTAsIDIwLCAyMDIsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyNDAsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDI0MCwgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIzNywgMiwgOTIsIDE3NSwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDI1MiwgMjM3LCAyLCA2MiwgNDQsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCAxMjMsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCAyNDAsIDEyOSwgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDIwMiwgNDQsIDE1LCAxMCwgMjAsIAotICAgIDI0MCwgMTI5LCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCAyNTIsIDIyNSwgNDQsIDE1LCAxMCwgMjAsIAotICAgIDI0NiwgMTYzLCAyLCAyNTIsIDIyNSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjQwLCAyLCAyNTIsIDIyNSwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDI1MiwgMjM3LCAyLCAyNTIsIDIyNSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjQxLCAyLCA5MiwgMTc1LCAzNSwgMTUsIAotICAgIDEwLCAyMCwgMjUyLCAyNDEsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyNDQsIDIsIDkyLCAxNzUsIDM1LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDI0NCwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNDAsIDE1NywgMiwgOTIsIDE3NSwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDI0MCwgMTU3LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCA5MiwgMTc1LCAzNSwgMTUsIAotICAgIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDkyLCAxNzUsIDM1LCAxNSwgCi0gICAgMTAsIDIwLCAyNDAsIDEyOSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAxMDEsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICAxMDEsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMTIzLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMTIzLCAyLCA2MiwgCi0gICAgMzUsIDE1LCAxMCwgMjAsIDIwMiwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDIwMiwgMiwgNjIsIDM1LCAxNSwgMTAsIAotICAgIDIwLCAyNTIsIDI0MCwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjQwLCAyLCA2MiwgMzUsIDE1LCAxMCwgCi0gICAgMjAsIDI1MiwgMjM3LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMzcsIDIsIDYyLCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjQwLCAxMjksIDIsIDEyMywgMzUsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCAxMDEsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICAyNDAsIDEyOSwgMiwgMjAyLCAzNSwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjQwLCAKLSAgICAxMjksIDIsIDI1MiwgMjI1LCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDI1MiwgMjI1LCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyNDAsIDIsIDI1MiwgMjI1LCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMzcsIDIsIDI1MiwgMjI1LCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjQwLCAxMjksIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAKLSAgICAyNDAsIDEyOSwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAKLSAgICAxNjMsIDIsIDI1MiwgMjA3LCA1OSwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDI1MiwgMjA3LCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyNDEsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDEyMywgMTI0LCAxNSwgMTAsIDIwLCAyNDYsIAotICAgIDE2MywgMiwgMTAxLCAxMjQsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAyMDIsIDEyNCwgMTUsIDEwLCAyMCwgMjQwLCAKLSAgICAxMjksIDIsIDEyMywgMTI0LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgMiwgMTAxLCAxMjQsIDE1LCAxMCwgMjAsIDI0MCwgCi0gICAgMTI5LCAyLCAyMDIsIDEyNCwgMTUsIDEwLCAyMCwgMjUyLCAyNDEsIDIsIDU1LCAxMjQsIDE1LCAxMCwgMjAsIDI1MywgMTEwLCAKLSAgICAyLCA1NSwgMTI0LCAxNSwgMTAsIDIwLCA5MiwgMiwgMjMzLCAxNTAsIDM1LCAxNSwgMTAsIDIwLCA5MiwgMiwgMjMzLCAxNTAsIAotICAgIDQ0LCAxNSwgMjM4LCAzMiwgNDIsIDIyOCwgMTgwLCAyMzgsIDMyLCA0MSwgMjI4LCAxODAsIDEwLCAyMCwgMjUyLCAyMTAsIAotICAgIDIsIDEyMywgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgMTAxLCAyLCAxMjMsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICAyNTIsIDIxMCwgMiwgMTAxLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgMTAxLCAyLCA1NSwgNTksIAotICAgIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCAyMDIsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDU1LCAyLCAKLSAgICAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgNTUsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAKLSAgICAyLCA1NSwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMTIzLCAyLCA1NSwgMiwgMTAxLCAzNSwgMTUsIDEwLCAyMCwgMTIzLCAKLSAgICAyLCA1NSwgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMTAxLCAyLCA1NSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAxMDEsIDIsIAotICAgIDU1LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDEwMSwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMjQ2LCAxNjMsIDIsIDEyMywgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDEyMywgMiwgOTIsIDE3NSwgCi0gICAgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCA1NSwgMiwgMTAxLCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDU1LCAKLSAgICAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgNTUsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDI0NiwgCi0gICAgMTYzLCAyLCA1NSwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgNTUsIDIsIDU1LCA1OSwgMTUsIDEwLCAKLSAgICAyMCwgMjUyLCAyNDAsIDIsIDEwMSwgMiwgMTAxLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyNDAsIDIsIDEwMSwgMiwgMTAxLCAKLSAgICA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyNDAsIDIsIDU1LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCAxMDEsIAotICAgIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDEwMSwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgCi0gICAgMiwgMTIzLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCA1NSwgMiwgMjAyLCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjQwLCAxMjksIDIsIDU1LCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgMiwgNTUsIDIsIDU1LCAzNSwgMTUsIAotICAgIDEwLCAyMCwgMjQwLCAxMjksIDIsIDU1LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjM3LCAyLCAxMDEsIDIsIDkyLCAKLSAgICAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIzNywgMiwgMjAyLCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjM3LCAKLSAgICAyLCAyMDIsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyNDEsIDIsIDU1LCAyLCAxMDEsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICAyNTIsIDI0MSwgMiwgNTUsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjQxLCAyLCA1NSwgMiwgNTUsIDU5LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDI0MSwgMiwgNTUsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyNDQsIDIsIDEyMywgMiwgNTUsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDI0NCwgMiwgNTUsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyNDQsIDIsIDU1LCAKLSAgICAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjQ0LCAyLCA1NSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI0MCwgCi0gICAgMTU3LCAyLCA1NSwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNDAsIDE1NywgMiwgNTUsIDIsIDYyLCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjQwLCAxNTcsIDIsIDU1LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMzUsIDIsIDIwMiwgMiwgNTUsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIzNSwgMiwgMjAyLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MywgMSwgMiwgNTUsIAotICAgIDIsIDEwMSwgMzUsIDE1LCAxMCwgMjAsIDI1MywgMSwgMiwgNTUsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAKLSAgICAxMDEsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAxMDEsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAKLSAgICAxMDEsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDEyMywgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMjE2LCAyLCAxMjMsIDIsIDEyMywgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgMjAyLCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDIxNiwgMiwgMjAyLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIxNiwgMiwgNTUsIDIsIDEwMSwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDIxNiwgMiwgNTUsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDU1LCAyLCAxMDEsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIAotICAgIDU1LCAyLCAxMDEsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgNTUsIDIsIDEwMSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCA1NSwgCi0gICAgMiwgMTIzLCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgMTIzLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDU1LCAyLCAKLSAgICAyMDIsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDU1LCAyLCAyMDIsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgNTUsIDIsIAotICAgIDEyMywgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMDcsIDIsIDU1LCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAKLSAgICAyNTIsIDIwNywgMiwgNTUsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDEwMSwgMiwgNTUsIDU5LCAxNSwgCi0gICAgMTAsIDIwLCAyNDYsIDE1NiwgMiwgMTAxLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDEyMywgCi0gICAgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgMTIzLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAKLSAgICAyLCAxMjMsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgNTUsIDIsIDYyLCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjQ2LCAxNTYsIDIsIDU1LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDU1LCAyLCA1NSwgMzUsIAotICAgIDE1LCAxMCwgMjAsIDYyLCAyLCA1NSwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxNywgMiwgMjAyLCAyLCA2MiwgCi0gICAgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCAxMjMsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIAotICAgIDEyMywgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCAyMDIsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyMTAsIDIsIDIwMiwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCA1NSwgMiwgNjIsIDM1LCAKLSAgICAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgNTUsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAxMjMsIDIsIDU1LCAyLCAKLSAgICA2MiwgMzUsIDE1LCAxMCwgMjAsIDEyMywgMiwgMTAxLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMTIzLCAyLCA1NSwgCi0gICAgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAyMDIsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICAyNTIsIDI0MCwgMiwgMTAxLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCAxMDEsIDIsIDYyLCAzNSwgMTUsIAotICAgIDEwLCAyMCwgMjUyLCAyMzcsIDIsIDEwMSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDEyMywgMiwgNjIsIDM1LCAKLSAgICAxNSwgMTAsIDIwLCAyMTYsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAxMDEsIDIsIDYyLCAzNSwgMTUsIAotICAgIDEwLCAyMCwgNjIsIDIsIDEyMywgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgNTUsIDIsIDYyLCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgNTUsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI1MywgMSwgMiwgNTUsIDIsIDYyLCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjQ2LCAxNTYsIDIsIDEwMSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNTMsIDEsIDIsIDU1LCAyLCAxMDEsIDU5LCAKLSAgICAxNSwgMTAsIDIwLCAyMTYsIDIsIDEwMSwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDI0NCwgMiwgNTUsIDIsIDYyLCAKLSAgICAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCAxMjMsIAotICAgIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDU1LCAyLCAyMDIsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAxMjMsIAotICAgIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDU1LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgCi0gICAgMTIzLCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCAxMjMsIDIsIDEwMSwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDEyMywgMiwgMTAxLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDEwMSwgMiwgMTIzLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDU1LCAyLCAxMjMsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMzUsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgCi0gICAgMjAsIDI1MiwgMjE3LCAyLCAxMDEsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDU1LCAyLCA1NSwgNTksIAotICAgIDE1LCAxMCwgMjAsIDI1MiwgMjQ0LCAyLCAxMjMsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyNDAsIDIsIDU1LCAyLCAKLSAgICA1NSwgNTksIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAyMDIsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIAotICAgIDEyMywgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNDEsIDIzMCwgMjQ4LCAxODksIDI1NCwgMjAzLCAyMzUsIDE4NywgMjQ3LCAKLSAgICAyMCwgNSwgNDQsIDE1LCAxMCwgMjAsIDI1MSwgMTI4LCAyNDgsIDE4OSwgMjU0LCAyMDMsIDIzNSwgMTg3LCAyNDcsIDIwLCAKLSAgICA1LCA0NCwgMTUsIDEwLCAyMCwgMjQyLCA1NCwgNDQsIDE1LCAxMCwgMjAsIDI0MiwgNTEsIDQ0LCAxNSwgMTAsIDIwLCAyMzQsIAotICAgIDE2MywgNDQsIDE1LCAxMCwgMjAsIDI0NSwgMTUwLCA0NCwgMTUsIDEwLCAyMCwgMjM5LCAyMTUsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICAyMzcsIDE3MSwgNDQsIDE1LCAxMCwgMjAsIDIzNSwgOSwgNDQsIDE1LCAxMCwgMjAsIDI0MSwgMjMwLCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgMjI5LCAyMTQsIDIzNywgMTcxLCAyMzMsIDY0LCAxMCwgMjAsIDIyNSwgOTMsIDI1MSwgMTgxLCA1MywgMTAsIDIwLCAKLSAgICAyMzIsIDg3LCAyMzIsIDczLCAyMzAsIDIyNiwgMzgsIDIzMCwgOTksIDM4LCAyMzAsIDEwMCwgMzgsIDIzMCwgMTAxLCAzOCwgCi0gICAgMjMwLCAxMDIsIDM4LCAyMzAsIDEwMywgMzgsIDIzMCwgMTA0LCAzOCwgMjMwLCAxMDUsIDM4LCAyMzAsIDEwNiwgMzgsIAotICAgIDIzMCwgMTA3LCAzOCwgMjI5LCA1OSwgMzgsIDIyOSwgNjAsIDM4LCAyMjksIDYxLCAzOCwgMjI5LCA2MiwgMzgsIDIyOSwgCi0gICAgNjMsIDM4LCAyMjksIDY0LCAzOCwgMjI5LCA2NSwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCAyMzcsIDY3LCAyMjgsIDE3OCwgCi0gICAgMjExLCAzMiwgNjEsIDkwLCAyMzcsIDY3LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDkwLCAyNDYsIDE2MiwgMjQwLCAxMjEsIAotICAgIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgMjM3LCA2NiwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCAyMzAsIDE0MCwgMjI4LCAKLSAgICAxNzgsIDIxMSwgMzIsIDYxLCAyMjksIDE2NSwgNzYsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgMjMzLCA4MiwgNzYsIDIyOCwgCi0gICAgMTc4LCAyMTEsIDMyLCA2MSwgNDIsIDYzLCAyMzAsIDEzNywgMTA0LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDQxLCA2MywgCi0gICAgMjMwLCAxMzcsIDIzNCwgMjIsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgMTY5LCAyMzEsIDIxOCwgMzYsIDIwLCA0MiwgMjQwLCAKLSAgICAxNzAsIDM2LCAyMCwgNDEsIDI0MCwgMTcwLCAzNiwgNDcsIDI0MCwgMTI4LCA0MiwgMjQwLCAxNzAsIDM2LCA0NywgMjQwLCAKLSAgICAxMjgsIDQxLCAyNDAsIDE3MCwgMzYsIDIzNywgODMsIDQyLCAyNDAsIDE3MCwgMzYsIDIzNywgODMsIDQxLCAyNDAsIDE3MCwgCi0gICAgMzYsIDIzMCwgMjM3LCAyMzUsIDE2LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDEzNSwgNTYsIDIzNSwgMTI4LCAyMjgsIAotICAgIDE3OCwgMjExLCAzMiwgNjEsIDI1NCwgMjEzLCAyNDAsIDE1MSwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCAyNTQsIDE5OSwgCi0gICAgMjQwLCAxNTEsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgMTg0LCAyNDAsIDEzOCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCAKLSAgICAyNDYsIDIzOSwgMTg0LCAyNDAsIDEzOCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA0MiwgMjI4LCAxODAsIDIyOCwgMTc4LCAKLSAgICAyMTEsIDMyLCA2MSwgNDEsIDIyOCwgMTgwLCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDQyLCAyNDAsIDEzNywgMTA0LCAyMjgsIAotICAgIDE3OCwgMjExLCAzMiwgNjEsIDQxLCAyNDAsIDEzNywgMTA0LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDQyLCAyMzMsIDg5LCAKLSAgICAyNDAsIDE1OCwgMTA0LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDQxLCAyMzMsIDg5LCAyNDAsIDE1OCwgMTA0LCAyMjgsIAotICAgIDE3OCwgMjExLCAzMiwgNjEsIDQyLCA4NiwgMjMwLCAxMzcsIDEwNCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA0MSwgODYsIAotICAgIDIzMCwgMTM3LCAxMDQsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgNDIsIDQ3LCAyNDAsIDExNywgMTA0LCAyMjgsIDE3OCwgCi0gICAgMjExLCAzMiwgNjEsIDQxLCA0NywgMjQwLCAxMTcsIDEwNCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA0MiwgMjQwLCAxMTcsIAotICAgIDEwNCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA0MSwgMjQwLCAxMTcsIDEwNCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA0MiwgCi0gICAgMjM3LCA3OSwgMTA0LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDQxLCAyMzcsIDc5LCAxMDQsIDIyOCwgMTc4LCAyMTEsIDMyLCAKLSAgICA2MSwgNDIsIDYzLCAyMzcsIDc5LCAxMDQsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgNDEsIDYzLCAyMzcsIDc5LCAxMDQsIAotICAgIDIzOCwgNDcsIDI0NiwgMTY0LCA2MywgMjM4LCA0NywgMjQ2LCAxNjQsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgNDIsIDM3LCAKLSAgICAxMDQsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgNDEsIDM3LCAxMDQsIDIzNywgMTEwLCAyMzEsIDIyMywgMjMwLCAxNzYsIAotICAgIDIzMSwgMjIzLCAyNDYsIDIzOSwgMjMxLCAyMjMsIDQ3LCAyNDYsIDIzOSwgMjMxLCAyMjMsIDIzNywgMTEwLCAxODQsIDI0MCwgCi0gICAgMTM4LCAyMzAsIDE3NiwgMTg0LCAyNDAsIDEzOCwgMjQ2LCAyMzksIDE4NCwgMjQwLCAxMzgsIDMsIDIzNywgNjcsIDMsIDkwLCAKLSAgICAyMzcsIDY3LCAzLCAyNDYsIDE2MiwgMjQwLCAxMjEsIDMsIDIzMCwgMTQwLCAzLCAyMzcsIDY2LCAzLCAyMzMsIDgyLCA3NiwgCi0gICAgMywgMjI5LCAxNjUsIDc2LCAzLCAyNTQsIDIxMywgMjQwLCAxNTEsIDMsIDQyLCAyMjgsIDE4MCwgMywgNDEsIDIyOCwgMTgwLCAKLSAgICAzLCA0MiwgMjQwLCAxMzcsIDEwNCwgMywgNDEsIDI0MCwgMTM3LCAxMDQsIDMsIDQyLCAyMzMsIDg5LCAyNDAsIDE1OCwgCi0gICAgMTA0LCAzLCA0MSwgMjMzLCA4OSwgMjQwLCAxNTgsIDEwNCwgMywgNjUsIDUzLCAzLCAyMzAsIDE0MiwgMywgMjMxLCAxOTgsIAotICAgIDMsIDc5LCA1MywgMywgMjI3LCAxOTMsIDMsIDIzMSwgMTkwLCA1MywgMywgMjI4LCAxNzUsIDUzLCAzLCAyMzcsIDUxLCA1MywgCi0gICAgMywgMjM1LCAzNywgMjMzLCAxMDQsIDMsIDIzNywgMTc5LCA1MywgMywgMjM1LCA4NiwgNTMsIDMsIDIzMCwgMTQ1LCAyNTMsIAotICAgIDExMywgMTAsIDIzMywgMTUwLCA0NCwgMTUsIDEwLCAyMzYsIDI1NCwgMiwgMjMzLCAxNTAsIDQ2LCAxMCwgMjMzLCAxOTYsIAotICAgIDQ0LCAxNSwgMTAsIDI0NiwgMjM3LCAyMzIsIDE5MywgMTAsIDIzMywgMjEwLCA0NCwgMTUsIDEwLCAyNDAsIDIyNCwgNDQsIAotICAgIDE1LCAxMCwgMjQwLCAyMjQsIDEyNCwgMTUsIDEwLCAyNDAsIDI0OCwgNDQsIDE1LCAxMCwgMjQwLCAyNDgsIDEyNCwgMTUsIAotICAgIDEwLCAyNDEsIDAsIDQ0LCAxNSwgMTAsIDI0MSwgMCwgMTI0LCAxNSwgMTAsIDIzNywgOTYsIDQ0LCAxNSwgMTAsIDIzNywgCi0gICAgOTYsIDEyNCwgMTUsIDEwLCAyNDEsIDI1MiwgNDQsIDE1LCAxMCwgMjQxLCAyNTIsIDEyNCwgMTUsIDEwLCAxLCAxNjQsIDQ0LCAKLSAgICAxNSwgMTAsIDEsIDkyLCAyLCAyNDAsIDIyOSwgNjQsIDQ0LCAxNSwgMTAsIDEsIDkyLCAyLCAyNDAsIDIyOSwgNjQsIDM1LCAKLSAgICAxNSwgMTAsIDEsIDkyLCAyLCAxNjQsIDY0LCA0NCwgMTUsIDEwLCAxLCA5MiwgMiwgMTY0LCA2NCwgMzUsIDE1LCAxMCwgMSwgCi0gICAgMjUzLCA1NCwgMiwgMTY0LCA2NCwgNDQsIDE1LCAxMCwgMSwgMjUzLCA1NCwgMiwgMTY0LCA2NCwgMzUsIDE1LCAxMCwgMSwgCi0gICAgOTIsIDIsIDE2NCwgMjQwLCAxNDQsIDQ0LCAxNSwgMTAsIDEsIDkyLCAyLCAxNjQsIDI0MCwgMTQ0LCAzNSwgMTUsIDEwLCAxLCAKLSAgICA2MiwgMiwgMTY0LCA2NCwgNDQsIDE1LCAxMCwgMSwgNjIsIDIsIDE2NCwgNjQsIDM1LCAxNSwgMTAsIDEsIDYyLCAyLCAxNjQsIAotICAgIDY0LCA1OSwgMTUsIDEwLCAxLCA2MiwgMiwgMTY0LCA2NCwgMTI0LCAxNSwgMTAsIDEsIDkyLCA0NCwgMTUsIDEwLCAxLCA5MiwgCi0gICAgMzUsIDE1LCAxMCwgMSwgMjUyLCAyMTcsIDQ0LCAxNSwgMTAsIDEsIDI1MiwgMjE3LCAzNSwgMTUsIDEwLCAxLCAyNTIsIAotICAgIDIxNywgNTksIDE1LCAxMCwgMSwgMjUyLCAyMTcsIDEyNCwgMTUsIDEwLCAxLCAyNTIsIDIxMCwgMjM1LCAxMjksIDQ0LCAxNSwgCi0gICAgMTAsIDEsIDI1MiwgMjEwLCAyMzUsIDEyOSwgMzUsIDE1LCAxMCwgMSwgMjUyLCAyMTAsIDQ0LCAxNSwgMTAsIDEsIDI1MiwgCi0gICAgMjEwLCAzNSwgMTUsIDEwLCAxLCAyNTIsIDIxMCwgNTksIDE1LCAxMCwgMSwgMjUyLCAyMTAsIDEyNCwgMTUsIDEwLCAxLCAKLSAgICAyNDYsIDIwNSwgNDQsIDE1LCAxMCwgMSwgMjQ2LCAyMDUsIDM1LCAxNSwgMTAsIDEsIDI0NiwgMjA1LCA1OSwgMTUsIDEwLCAKLSAgICAxLCAyNDYsIDIwNSwgMTI0LCAxNSwgMTAsIDEsIDEyMywgNDQsIDE1LCAxMCwgMSwgMTIzLCAzNSwgMTUsIDEwLCAxLCAxMjMsIAotICAgIDU5LCAxNSwgMTAsIDEsIDEyMywgMTI0LCAxNSwgMTAsIDEsIDEwMSwgNDQsIDE1LCAxMCwgMSwgMTAxLCAzNSwgMTUsIDEwLCAKLSAgICAxLCAxMDEsIDU5LCAxNSwgMTAsIDEsIDEwMSwgMTI0LCAxNSwgMTAsIDEsIDIwMiwgNDQsIDE1LCAxMCwgMSwgMjAyLCAzNSwgCi0gICAgMTUsIDEwLCAxLCAyMDIsIDU5LCAxNSwgMTAsIDEsIDIwMiwgMTI0LCAxNSwgMTAsIDEsIDI1MywgNTYsIDQ0LCAxNSwgMTAsIAotICAgIDEsIDI1MywgNTYsIDM1LCAxNSwgMTAsIDEsIDI0NywgMjExLCA0NCwgMTUsIDEwLCAxLCAyNDcsIDIxMSwgMzUsIDE1LCAxMCwgCi0gICAgMSwgMjUyLCAyMjUsIDQ0LCAxNSwgMTAsIDEsIDI1MiwgMjI1LCAzNSwgMTUsIDEwLCAxLCAyNDYsIDI1MCwgNDQsIDE1LCAKLSAgICAxMCwgMSwgMjQ2LCAyNTAsIDM1LCAxNSwgMTAsIDEsIDI0NiwgMTYzLCA0NCwgMTUsIDEwLCAxLCAyNDYsIDE2MywgMzUsIAotICAgIDE1LCAxMCwgMSwgMjQ2LCAxNjMsIDU5LCAxNSwgMTAsIDEsIDI0NiwgMTYzLCAxMjQsIDE1LCAxMCwgMSwgMjQwLCAxMjksIAotICAgIDQ0LCAxNSwgMTAsIDEsIDI0MCwgMTI5LCAzNSwgMTUsIDEwLCAxLCAyNDAsIDEyOSwgNTksIDE1LCAxMCwgMSwgMjQwLCAKLSAgICAxMjksIDEyNCwgMTUsIDEwLCAxLCAyNTIsIDI0MCwgNDQsIDE1LCAxMCwgMSwgMjUyLCAyNDAsIDM1LCAxNSwgMTAsIDEsIAotICAgIDI1MiwgMjQwLCA1OSwgMTUsIDEwLCAxLCAyNTIsIDI0MCwgMTI0LCAxNSwgMTAsIDEsIDI1MiwgMjM3LCA0NCwgMTUsIDEwLCAKLSAgICAxLCAyNTIsIDIzNywgMzUsIDE1LCAxMCwgMSwgMjUyLCAyMzcsIDU5LCAxNSwgMTAsIDEsIDI1MiwgMjM3LCAxMjQsIDE1LCAKLSAgICAxMCwgMSwgMjUyLCAyNDEsIDQ0LCAxNSwgMTAsIDEsIDI1MiwgMjQxLCAzNSwgMTUsIDEwLCAxLCAyNTIsIDI0MSwgNTksIAotICAgIDE1LCAxMCwgMSwgMjUyLCAyNDEsIDEyNCwgMTUsIDEwLCAxLCAyNTMsIDExMCwgNDQsIDE1LCAxMCwgMSwgMjUzLCAxMTAsIAotICAgIDM1LCAxNSwgMTAsIDEsIDI1MywgMTEwLCA1OSwgMTUsIDEwLCAxLCAyNTMsIDExMCwgMTI0LCAxNSwgMTAsIDEsIDI1MiwgCi0gICAgMjQ0LCA0NCwgMTUsIDEwLCAxLCAyNTIsIDI0NCwgMzUsIDE1LCAxMCwgMSwgMjUyLCAyNDQsIDU5LCAxNSwgMTAsIDEsIAotICAgIDI1MiwgMjQ0LCAxMjQsIDE1LCAxMCwgMSwgMjQwLCAxNTcsIDQ0LCAxNSwgMTAsIDEsIDI0MCwgMTU3LCAzNSwgMTUsIDEwLCAKLSAgICAxLCAyNDAsIDE1NywgNTksIDE1LCAxMCwgMSwgMjQwLCAxNTcsIDEyNCwgMTUsIDEwLCAxLCAyNTIsIDIzNSwgNDQsIDE1LCAKLSAgICAxMCwgMSwgMjUyLCAyMzUsIDM1LCAxNSwgMTAsIDEsIDI1MiwgMjM1LCA1OSwgMTUsIDEwLCAxLCAyNTIsIDIzNSwgMTI0LCAKLSAgICAxNSwgMTAsIDEsIDI1MywgMSwgNDQsIDE1LCAxMCwgMSwgMjUzLCAxLCAzNSwgMTUsIDEwLCAxLCAyNTMsIDEsIDU5LCAxNSwgCi0gICAgMTAsIDEsIDI1MywgMSwgMTI0LCAxNSwgMTAsIDEsIDI1MiwgMjE0LCA0NCwgMTUsIDEwLCAxLCAyNTIsIDIxNCwgMzUsIDE1LCAKLSAgICAxMCwgMSwgMjUyLCAyMTQsIDU5LCAxNSwgMTAsIDEsIDI1MiwgMjE0LCAxMjQsIDE1LCAxMCwgMSwgMjE2LCA0NCwgMTUsIAotICAgIDEwLCAxLCAyMTYsIDM1LCAxNSwgMTAsIDEsIDIxNiwgNTksIDE1LCAxMCwgMSwgMjE2LCAxMjQsIDE1LCAxMCwgMSwgNTUsIAotICAgIDQ0LCAxNSwgMTAsIDEsIDU1LCAzNSwgMTUsIDEwLCAxLCA1NSwgNTksIDE1LCAxMCwgMSwgNTUsIDEyNCwgMTUsIDEwLCAxLCAKLSAgICAyNDYsIDE1NiwgNDQsIDE1LCAxMCwgMSwgMjQ2LCAxNTYsIDM1LCAxNSwgMTAsIDEsIDI0NiwgMTU2LCA1OSwgMTUsIDEwLCAKLSAgICAxLCAyNDYsIDE1NiwgMTI0LCAxNSwgMTAsIDEsIDI1MiwgMjA3LCA0NCwgMTUsIDEwLCAxLCAyNTIsIDIwNywgMzUsIDE1LCAKLSAgICAxMCwgMSwgMjUyLCAyMDcsIDU5LCAxNSwgMTAsIDEsIDI1MiwgMjA3LCAxMjQsIDE1LCAxMCwgMSwgMjUzLCA1NCwgNDQsIAotICAgIDE1LCAxMCwgMSwgMjUzLCA1NCwgMzUsIDE1LCAxMCwgMSwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMSwgOTIsIDE3NSwgMzUsIAotICAgIDE1LCAxMCwgMSwgNjIsIDQ0LCAxNSwgMTAsIDEsIDYyLCAzNSwgMTUsIDEwLCAxLCA2MiwgNTksIDE1LCAxMCwgMSwgNjIsIAotICAgIDEyNCwgMTUsIDEwLCAyMCwgMjE2LCAyLCA5MiwgMiwgMjQwLCAyMjksIDY0LCA0NCwgMTUsIDEwLCAyMCwgMjE2LCAyLCA5MiwgCi0gICAgMiwgMjQwLCAyMjksIDY0LCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCA5MiwgMiwgMTY0LCA2NCwgNDQsIDE1LCAxMCwgMjAsIAotICAgIDIxNiwgMiwgOTIsIDIsIDE2NCwgNjQsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDkyLCAyLCAxNjQsIDI0MCwgMTQ0LCA0NCwgCi0gICAgMTUsIDEwLCAyMCwgMjE2LCAyLCA5MiwgMiwgMTY0LCAyNDAsIDE0NCwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgOTIsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCAyMTYsIDIsIDkyLCAzNSwgMTUsIDI0NywgMjcsIDI0MSwgMjMsIDIzMywgMTczLCAyMzcsIDY5LCAxMDAsIAotICAgIDIyOSwgMTY1LCA3NiwgMTAwLCAyMzEsIDE5OSwgNzYsIDEwMCwgNjUsIDUzLCAxMDAsIDIzNywgMTc5LCA1MywgMTAwLCAKLSAgICAyMzUsIDg2LCA1MywgMTAwLCAyMzAsIDE0MiwgMTAwLCAyMjksIDE3MiwgMTAwLCA0MiwgMjI4LCAxODAsIDEwMCwgNDEsIAotICAgIDIyOCwgMTgwLCAxMDAsIDIzMSwgMTk4LCAxMDAsIDc5LCA1MywgMTAwLCAyMzcsIDY3LCAxMDAsIDIyNywgMTkzLCAxMDAsIAotICAgIDI0NiwgMTYyLCAyNDAsIDEyMSwgMTAwLCAyMzMsIDEwNCwgMTAwLCAyMSwgMjQwLCAxMjYsIDEwMCwgMjEsIDExOCwgMTAwLCAKLSAgICAyMSwgMTEzLCAxMDAsIDIxLCAxNjYsIDEwMCwgMjEsIDE1OCwgMTAwLCAyMSwgMTczLCAxMDAsIDIxLCAxODMsIDEwMCwgMjEsIAotICAgIDE5NCwgMTAwLCAyMSwgMTg3LCAxMDAsIDIxLCAxOTIsIDEwMCwgMjM3LCA2NiwgMTAwLCAyMzAsIDE0MCwgMTAwLCAyMzEsIAotICAgIDE5MCwgNTMsIDEwMCwgMjM3LCA1MSwgNTMsIDEwMCwgMjI4LCAxNzUsIDUzLCAxMDAsIDIzMywgODIsIDc2LCAxMDAsIDIzMCwgCi0gICAgMTQ1LCAyNTMsIDExMywgMTAwLCA3LCA2LCAxLCA1NywgMTAwLCA3LCA2LCAxLCAyNTQsIDE4NSwgMTAwLCA3LCA2LCAxLCAKLSAgICAyNTQsIDE5NCwgMTAwLCA3LCA2LCAxLCAyMjIsIDIyMiwgMTAwLCA3LCA2LCAxLCA3MiwgMTAwLCA3LCA2LCAxLCAyNTQsIAotICAgIDE5MSwgMTAwLCA3LCA2LCAxLCAyMTQsIDEwMCwgNywgNiwgMSwgMjEyLCAxMDAsIDcsIDYsIDEsIDc0LCAxMDAsIDcsIDYsIAotICAgIDEsIDI1NCwgMTkyLCAxMDAsIDcsIDYsIDEsIDI1NCwgMTg2LCAxMDAsIDcsIDYsIDEsIDE0OSwgMTAwLCA3LCA2LCAxLCAKLSAgICAxODUsIDEwMCwgNywgNiwgMSwgMTk5LCAxMDAsIDcsIDYsIDEsIDczLCAxMDAsIDcsIDYsIDEsIDI1NCwgMTg3LCAxMDAsIDcsIAotICAgIDYsIDEsIDI1NCwgMTk2LCAxMDAsIDcsIDYsIDEsIDE0NiwgMTAwLCA3LCA2LCAxLCAxOTMsIDEwMCwgNywgNiwgMSwgMjU0LCAKLSAgICAxODMsIDEwMCwgNywgNiwgMSwgNjYsIDEwMCwgNywgNiwgMSwgMTk2LCAxMDAsIDcsIDYsIDEsIDI1NCwgMTk1LCAxMDAsIDcsIAotICAgIDYsIDEsIDI1NCwgMTg0LCAxMDAsIDcsIDYsIDEsIDI1NCwgMTkwLCAxMDAsIDcsIDYsIDEsIDI1NCwgMTkzLCAxMDAsIDQyLCAKLSAgICAzNywgMTA0LCAxMDAsIDIzNSwgMzcsIDIzMywgMTA0LCAxMDAsIDQxLCAzNywgMTA0LCAxMDAsIDIzMCwgMTI1LCAyMzUsIAotICAgIDI0LCAxMDAsIDE4NCwgMjQwLCAxMzgsIDEwMCwgMjQwLCAxNjMsIDIzNSwgMjQsIDEwMCwgNywgMywgMSwgNTcsIDEwMCwgNywgCi0gICAgMywgMSwgMjU0LCAxODUsIDEwMCwgNywgMywgMSwgMjU0LCAxOTQsIDEwMCwgNywgMywgMSwgMjIyLCAyMjIsIDEwMCwgNywgCi0gICAgMywgMSwgNzIsIDEwMCwgNywgMywgMSwgMjU0LCAxOTEsIDEwMCwgNywgMywgMSwgMjE0LCAxMDAsIDcsIDMsIDEsIDIxMiwgCi0gICAgMTAwLCA3LCAzLCAxLCA3NCwgMTAwLCA3LCAzLCAxLCAyNTQsIDE5MiwgMTAwLCA3LCAzLCAxLCAyNTQsIDE4NiwgMTAwLCA3LCAKLSAgICAzLCAxLCAxNDksIDEwMCwgNywgMywgMSwgMTg1LCAxMDAsIDcsIDMsIDEsIDE5OSwgMTAwLCA3LCAzLCAxLCA3MywgMTAwLCAKLSAgICA3LCAzLCAxLCAyNTQsIDE4NywgMTAwLCA3LCAzLCAxLCAyNTQsIDE5NiwgMTAwLCA3LCAzLCAxLCAxNDYsIDEwMCwgNywgMywgCi0gICAgMSwgMTkzLCAxMDAsIDcsIDMsIDEsIDI1NCwgMTgzLCAxMDAsIDcsIDMsIDEsIDY2LCAxMDAsIDcsIDMsIDEsIDE5NiwgMTAwLCAKLSAgICA3LCAzLCAxLCAyNTQsIDE5NSwgMTAwLCA3LCAzLCAxLCAyNTQsIDE4NCwgMTAwLCA3LCAzLCAxLCAyNTQsIDE5MCwgMTAwLCAKLSAgICA3LCAzLCAxLCAyNTQsIDE5MywgMTAwLCA0MiwgMjQwLCAxMzcsIDEwNCwgMTAwLCA2MSwgMjQwLCAxMzgsIDEwMCwgNDEsIAotICAgIDI0MCwgMTM3LCAxMDQsIDEwMCwgMjA1LCAxMDAsIDQyLCA2MywgMjI4LCAxODAsIDEwMCwgNDEsIDYzLCAyMjgsIDE4MCwgCi0gICAgODMsIDkwLCAyNDYsIDE2MiwgMjQwLCAxMjEsIDgzLCA0MiwgMjM3LCA3OSwgMTA0LCA4MywgNDEsIDIzNywgNzksIDEwNCwgCi0gICAgODMsIDkwLCAyMzcsIDY3LCA4MywgNDgsIDIzNywgNDQsIDI0NiwgMTY0LCA4MywgNDgsIDEsIDI1MywgMTAsIDgzLCA0OCwgCi0gICAgMSwgMywgNTcsIDgzLCA0OCwgMSwgMywgNzQsIDgzLCA0OCwgMSwgMywgNjYsIDgzLCA0OCwgMSwgMywgNzIsIDgzLCA0OCwgCi0gICAgMSwgMywgNzMsIDgzLCA0OCwgMSwgMywgMTkxLCA4MywgNDgsIDEsIDMsIDI1MiwgMjMzLCA4MywgNDgsIDEsIDMsIDI1MiwgCi0gICAgMjUxLCA4MywgNDgsIDEsIDMsIDI1MywgMTgsIDgzLCAyMjIsIDI1MiwgMjMyLCAzOSwgMjQwLCAxODEsIDc2LCA4MywgNDgsIAotICAgIDEsIDU3LCA4MywgNDgsIDEsIDc0LCA4MywgNDgsIDEsIDY2LCA4MywgNDgsIDEsIDcyLCA4MywgNDgsIDEsIDczLCA4MywgCi0gICAgNDgsIDEsIDE3NywgODMsIDQ4LCAxLCAyNTMsIDcsIDgzLCA0OCwgMSwgMjUzLCAzNCwgODMsIDQ4LCAxLCAyNTMsIDYsIDgzLCAKLSAgICA0OCwgMSwgMjUzLCAzMywgODMsIDQ4LCAxLCAyNTIsIDIwNCwgODMsIDQ4LCAxLCAyNTMsIDI0LCA4MywgNDgsIDEsIDI1MywgCi0gICAgMjYsIDgzLCA0OCwgMSwgMjUzLCA1MiwgODMsIDQ4LCAxLCAyNTMsIDI1LCA4MywgNDgsIDEsIDI1MiwgMjAyLCA4MywgNDgsIAotICAgIDEsIDI1MywgNDQsIDgzLCA0OCwgMSwgMjUzLCAxOCwgODMsIDQ4LCAxLCAyNTMsIDksIDgzLCA0OCwgMSwgOTYsIDgzLCA0OCwgCi0gICAgMSwgMjUyLCAyMDEsIDgzLCA0OCwgMSwgMjUyLCAyNDgsIDgzLCA0OCwgMSwgMjUyLCAyMjcsIDgzLCA0OCwgMSwgMjUyLCAKLSAgICAyNDcsIDgzLCA0OCwgMSwgMjUzLCA4LCA4MywgNDgsIDEsIDE1NCwgODMsIDQ4LCAxLCAyNTMsIDQxLCA4MywgNDgsIDEsIAotICAgIDI1MywgNTksIDgzLCA0OCwgMSwgMjUyLCAyNTIsIDgzLCA0OCwgMSwgMjUzLCAyMSwgODMsIDQ4LCAxLCAxOTgsIDgzLCA0OCwgCi0gICAgMSwgMjUyLCAyMzksIDgzLCA0OCwgMSwgMjUyLCAyMjksIDgzLCA0OCwgMSwgMjUzLCAxMywgODMsIDQ4LCAxLCAyNTMsIDE0LCAKLSAgICA4MywgNDgsIDEsIDE5MSwgODMsIDQ4LCAxLCAyNTIsIDIzMywgODMsIDQ4LCAxLCAyNTIsIDI1MSwgODMsIDQ4LCAxLCAyMDgsIAotICAgIDgzLCA0OCwgMSwgMjUzLCAzNywgODMsIDQ4LCAxLCAyNTMsIDMsIDgzLCA0OCwgMSwgMjUzLCAzNiwgODMsIDQ4LCAxLCAKLSAgICAyNTIsIDI0NiwgODMsIDQ4LCAxLCAyNTIsIDIwOCwgODMsIDQ4LCAxLCAxOTksIDgzLCA0OCwgMjM3LCAxMDcsIDI0MCwgCi0gICAgMTgxLCA3NiwgODMsIDQ4LCAyMjksIDE4OSwgMjQwLCAxODEsIDc2LCA4MywgMjYsIDIzNSwgOTIsIDgzLCAyNiwgMSwgMjM1LCAKLSAgICA3NywgODMsIDI2LCAxLCAyMjgsIDE5NSwgODMsIDI2LCAxLCAyMjgsIDE5OSwgODMsIDI2LCAxLCAyMzcsIDEzOSwgODMsIAotICAgIDI2LCAxLCAyMjgsIDIwMSwgODMsIDI2LCAxLCAyMjgsIDIwMiwgODMsIDI2LCAxLCAyMzUsIDgxLCA4MywgMjYsIDEsIDIyOCwgCi0gICAgMjA5LCA4MywgMjYsIDEsIDIzNywgMTQyLCA4MywgMjYsIDEsIDIyNywgMTk3LCA4MywgMjYsIDEsIDIyOCwgMjA0LCA4MywgCi0gICAgMjYsIDEsIDIyOCwgMjA1LCA4MywgMjYsIDEsIDIyOSwgMTg4LCA4MywgMjYsIDEsIDIyNywgMTQwLCA4MywgMjYsIDEsIAotICAgIDIyNywgMTM5LCA4MywgMjYsIDEsIDIyOCwgMTkzLCA4MywgMjYsIDEsIDIzNywgMTM3LCA4MywgMjYsIDEsIDIzNywgMTQxLCAKLSAgICA4MywgMjYsIDEsIDIyOSwgMTkzLCA4MywgMjYsIDEsIDIyOSwgMTgwLCA4MywgMjYsIDEsIDI0MCwgMjEzLCA4MywgMjYsIDEsIAotICAgIDIzMCwgMTU5LCA4MywgMjYsIDEsIDIzNywgMTM0LCA4MywgMjYsIDEsIDIzNywgMTMwLCA4MywgMjYsIDEsIDIyOSwgMTkxLCAKLSAgICA4MywgMjYsIDEsIDIzMywgMTI4LCA4MywgMjYsIDEsIDIzMywgMTMxLCA4MywgMjYsIDEsIDIzMywgMTM4LCA4MywgMjYsIDEsIAotICAgIDIzMywgMTMzLCA4MywgMjYsIDEsIDIzNywgMTMzLCA4MywgMjYsIDEsIDU3LCA4MywgMjYsIDEsIDI1MywgNCwgODMsIDI2LCAKLSAgICAxLCAxOTEsIDgzLCAyNiwgMSwgMjQ3LCA2MSwgODMsIDI2LCAxLCAyNTMsIDE3NywgODMsIDI2LCAxLCA3MiwgODMsIDI2LCAKLSAgICAxLCAyNDcsIDIzMiwgODMsIDI2LCAxLCAyNTMsIDk2LCA4MywgMjYsIDEsIDczLCA4MywgMjYsIDEsIDI1MiwgMjA4LCA4MywgCi0gICAgMjYsIDEsIDI0NywgMjIzLCA4MywgMjYsIDEsIDI1MywgMTUsIDgzLCAyNiwgMSwgMjUyLCAyNTEsIDgzLCAyNiwgMSwgNjYsIAotICAgIDgzLCAyNiwgMSwgMjQ3LCAyMjcsIDgzLCAyNiwgMSwgMjUyLCAyNTAsIDgzLCAyNiwgMSwgMjUzLCAyNywgODMsIDI2LCAxLCAKLSAgICAyNTIsIDIzMywgODMsIDI2LCAxLCAyNTMsIDEwMCwgODMsIDI2LCAxLCAyNTMsIDI4LCA4MywgMjYsIDEsIDc0LCAxMDAsIAotICAgIDI0OCwgNywgNTMsIDEwMCwgMjQxLCAyMTUsIDUzLCAxMDAsIDE5MCwgNTMsIDEwMCwgMjM1LCAxNiwgMTAwLCAyMzcsIDE1MCwgCi0gICAgMTI1LCAxMDAsIDI1NCwgMTksIDUzLCAxMDAsIDI1NCwgMTYsIDUzLCA4MywgMjQzLCAxMDgsIDE1NywgMjMxLCAyMTAsIDgzLCAKLSAgICAxMTcsIDU4LCA4MywgMjM1LCAxOCwgNTgsIDgzLCA4MSwgNTgsIDgzLCAyMzEsIDE5MSwgNTgsIDgzLCA4NiwgMjM1LCAyNywgCi0gICAgODMsIDYzLCAyMzUsIDIwLCAyMjksIDE4NSwgMjMwLCAxMjksIDIzNSwgMTQ1LCAyMjksIDE4NSwgMjMwLCAxMjksIDIzMCwgCi0gICAgMTMxLCAyMjksIDE4NSwgMjMwLCAxMjksIDIzMCwgMTE3LCAyMzksIDE3MCwgMjI5LCAyMTMsIDIzMCwgMTc3LCAyMjksIAotICAgIDIxMywgMjMwLCAxNzcsIDUwLCA0NSwgNCwgMjQ4LCAyNTEsIDU3LCA1MCwgNDUsIDQsIDI0OSwgMjAsIDcyLCA1MCwgNDUsIAotICAgIDQsIDI0OSwgMTIsIDc0LCA1MCwgNDUsIDQsIDI0OSwgNDAsIDczLCA1MCwgNDUsIDQsIDI0OCwgMjUzLCA2NiwgNTAsIDQ1LCAKLSAgICA0LCAyNDgsIDI0NCwgMjUyLCAyMDMsIDUwLCA0NSwgNCwgMjQ5LCAyNywgMjUzLCAyMCwgNTAsIDQ1LCA0LCAyNDgsIDI1MCwgCi0gICAgMjUzLCAxMiwgNTAsIDQ1LCA0LCAyNDksIDEsIDI1MywgNTcsIDUwLCA0NSwgNCwgMjQ5LCAzMSwgMjUzLCAzMSwgNTAsIDQ1LCAKLSAgICA0LCAyNDksIDM2LCAyNTIsIDIxMywgNTAsIDQ1LCA0LCAyNDksIDI4LCAyNTMsIDExNywgNTAsIDQ1LCA0LCAyNDksIDE4LCAKLSAgICAyNTMsIDkwLCA1MCwgNDUsIDQsIDI0OSwgNDIsIDI1MywgMTE4LCA1MCwgNDUsIDQsIDI0OSwgNTQsIDE3NywgNTAsIDQ1LCAKLSAgICA0LCAyNDksIDI2LCAyNTMsIDYsIDUwLCA0NSwgNCwgMjQ5LCA0NCwgMjUzLCA3LCA1MCwgNDUsIDQsIDI0OSwgNDcsIDI1MywgCi0gICAgMzMsIDUwLCA0NSwgNCwgMjQ5LCA1NywgMjUzLCAzNCwgNTAsIDQ1LCA0LCAyNDksIDU2LCAxOTgsIDUwLCA0NSwgNCwgMjQ5LCAKLSAgICAwLCAyNTMsIDEzLCA1MCwgNDUsIDQsIDI0OSwgNTAsIDI1MiwgMjM5LCA1MCwgNDUsIDQsIDI0OSwgMiwgMjUzLCAxNCwgNTAsIAotICAgIDQ1LCA0LCAyNDksIDcsIDI1MiwgMjI5LCA1MCwgNDUsIDQsIDI0OCwgMjQ5LCAyNTIsIDIwMSwgNTAsIDQ1LCA0LCAyNDksIAotICAgIDgsIDI1MiwgMjQ3LCA1MCwgNDUsIDQsIDI0OSwgMTQsIDI1MiwgMjQ4LCA1MCwgNDUsIDQsIDI0OSwgMzIsIDI1MywgOCwgCi0gICAgNTAsIDQ1LCA0LCAyNDksIDM1LCAyNTIsIDIyNywgNTAsIDQ1LCA0LCAyNDgsIDI0NiwgMjEzLCA1MCwgNDUsIDQsIDI0OSwgCi0gICAgNDksIDI1MywgMCwgNTAsIDQ1LCA0LCAyNDksIDIxLCAyNTIsIDIyMywgNTAsIDQ1LCA0LCAyNDgsIDI1NCwgMjUzLCA1MCwgCi0gICAgNTAsIDQ1LCA0LCAyNDksIDMwLCAyNTMsIDgyLCA1MCwgNDUsIDQsIDI0OSwgMywgMjUzLCAzNSwgNTAsIDQ1LCA0LCAyNDksIAotICAgIDU1LCAyNTMsIDE5MCwgNTAsIDQ1LCA0LCAyNDksIDYsIDI1MywgMTMxLCA1MCwgNDUsIDQsIDI0OSwgMTYsIDI1MywgMTU5LCAKLSAgICA1MCwgNDUsIDQsIDI0OSwgMzksIDIwOCwgNTAsIDQ1LCA0LCAyNDksIDExLCAyNTMsIDM2LCA1MCwgNDUsIDQsIDI0OSwgMzMsIAotICAgIDI1MywgMzcsIDUwLCA0NSwgNCwgMjQ4LCAyNDUsIDI1MiwgMjQ2LCA1MCwgNDUsIDQsIDI0OSwgMTAsIDI1MywgMywgNTAsIAotICAgIDQ1LCA0LCAyNDksIDE1LCAyNTIsIDIwNCwgNTAsIDQ1LCA0LCAyNDgsIDI1MiwgMjUzLCA1MiwgNTAsIDQ1LCA0LCAyNDksIAotICAgIDIzLCAyNTMsIDI0LCA1MCwgNDUsIDQsIDI0OCwgMjU1LCAyNTMsIDI1LCA1MCwgNDUsIDQsIDI0OSwgMzcsIDI1MywgMjYsIAotICAgIDUwLCA0NSwgNCwgMjQ5LCAzOCwgMjUyLCAyMDIsIDUwLCA0NSwgNCwgMjQ4LCAyNDcsIDI1MywgOSwgNTAsIDQ1LCA0LCAKLSAgICAyNDksIDE5LCAyNTMsIDQ0LCA1MCwgNDUsIDQsIDI0OCwgMjQ4LCA5NiwgNTAsIDQ1LCA0LCAyNDksIDQ2LCAyNTMsIDE4LCAKLSAgICA1MCwgNDUsIDQsIDI0OSwgMzQsIDI1MiwgMjA4LCA1MCwgNDUsIDQsIDI0OSwgNTIsIDI1MiwgMjUwLCA1MCwgNDUsIDQsIAotICAgIDI0OSwgMjIsIDI1MywgMjcsIDUwLCA0NSwgNCwgMjQ5LCAyNCwgMjUzLCAxMCwgNTAsIDQ1LCA0LCAyNDksIDQsIDI1MiwgCi0gICAgMjI2LCA1MCwgNDUsIDQsIDI0OSwgNTEsIDI1MywgNDYsIDUwLCA0NSwgNCwgMjQ5LCA1LCAyNTMsIDY1LCA1MCwgNDUsIDQsIAotICAgIDI0OSwgOSwgMjUzLCAxNjUsIDUwLCA0NSwgNCwgMjQ5LCAyNSwgMjU0LCAyMiwgNTAsIDQ1LCA0LCAyNDksIDU4LCAyNTIsIAotICAgIDIyMiwgNTAsIDQ1LCA0LCAyNDksIDQ4LCAyNDcsIDEzNCwgNTAsIDQ1LCA0LCAyNDksIDYwLCAyNDksIDIxOCwgNTAsIDQ1LCAKLSAgICA0LCAyNDksIDI5LCAyNDcsIDk1LCA1MCwgNDUsIDQsIDI0OSwgMTMsIDI1MSwgMTIwLCA1MCwgNDUsIDQsIDI0OSwgNDEsIAotICAgIDI1MSwgMTE5LCA1MCwgNDUsIDQsIDI0OSwgNTMsIDI1MSwgMTY2LCA1MCwgNDUsIDQsIDI0OSwgMTcsIDI1MSwgMTY3LCA1MCwgCi0gICAgNDUsIDQsIDI0OSwgNDUsIDI1MSwgMTg2LCA1MCwgNDUsIDQsIDI0OSwgNDMsIDI1MiwgMywgNTAsIDQ1LCA0LCAyNDksIDU5LCAKLSAgICAyNDcsIDU5LCA1MCwgNDUsIDQsIDI0OSwgNjEsIDExMywgNTAsIDQ1LCAxNCwgMjQyLCA2OSwgNTAsIDQ1LCAxNCwgMjQyLCAKLSAgICA3MCwgNTAsIDQ1LCAxNCwgMjQyLCA3MSwgNTAsIDQ1LCAxNCwgMjQyLCA3MiwgNTAsIDQ1LCAxNCwgMjQyLCA3MywgNTAsIAotICAgIDQ1LCAxNCwgMjQyLCA3NCwgNTAsIDQ1LCAxNCwgMjQyLCA3NSwgNTAsIDQ1LCAxNCwgMjQyLCA3NiwgNTAsIDQ1LCAxNCwgCi0gICAgMjQyLCA3NywgNTAsIDQ1LCAxNCwgMjQyLCA3OCwgNTAsIDQ1LCAxNCwgMjQyLCA3OSwgNTAsIDQ1LCAxNCwgMjQyLCA4MCwgCi0gICAgNTAsIDQ1LCAxNCwgMjQyLCA4MSwgNTAsIDQ1LCAxNCwgMjQyLCA4MiwgNTAsIDQ1LCA4OSwgMjQ5LCA2MiwgMjQ3LCA0LCAKLSAgICA1MCwgNDUsIDg5LCAyNDksIDYzLCAyMzcsIDIyNSwgNTAsIDQ1LCA4OSwgMjQ5LCA2NCwgMjQxLCAxMTksIDUwLCA0NSwgODksIAotICAgIDI0OSwgNjUsIDIzOCwgMjA1LCA1MCwgNDUsIDg5LCAyNDIsIDgzLCAyNDQsIDExNywgNTAsIDQ1LCA4OSwgMjQyLCA4NCwgCi0gICAgMjMzLCAyOSwgNTAsIDQ1LCA4OSwgMjQyLCA4NSwgMjQ4LCAzNSwgNTAsIDQ1LCA4OSwgMjQyLCA4NiwgMjQ3LCAxOTUsIDUwLCAKLSAgICA0NSwgODksIDI0MiwgODcsIDIzMywgMjQsIDUwLCA0NSwgODksIDI0MiwgODgsIDIzNCwgMTE5LCA1MCwgNDUsIDg5LCAyNDIsIAotICAgIDg5LCAyNTEsIDIzNCwgNTAsIDQ1LCA4OSwgMjQyLCA5MCwgMjQyLCAyMTAsIDUwLCA0NSwgODksIDI0MiwgOTEsIDI0NywgCi0gICAgMTI3LCA1MCwgNDUsIDg5LCAyNDIsIDkyLCAyNDIsIDIxNiwgNTAsIDQ1LCA4OSwgMjQ5LCA2NiwgMjM3LCAyMjQsIDUwLCAKLSAgICA0NSwgODksIDI0OSwgNjcsIDIzNiwgOCwgNTAsIDQ1LCA4OSwgMjQ5LCA2OCwgMjM5LCAxNzMsIDUwLCA0NSwgODksIDI0OSwgCi0gICAgNjksIDI0MCwgMTEsIDUwLCA0NSwgODksIDI0OSwgNzAsIDIzNCwgNDQsIDUwLCA0NSwgMjMzLCAxMTUsIDI0OSwgNzEsIAotICAgIDI0NCwgNTAsIDUwLCA0NSwgMjMzLCAxMTUsIDI0OSwgNzIsIDIzNiwgMTE2LCA1MCwgNDUsIDg5LCAyNDksIDczLCAyNDgsIAotICAgIDEyMSwgNTAsIDQ1LCA4OSwgMjQ5LCA3NCwgMjQxLCA4NCwgNTAsIDQ1LCA4OSwgMjQyLCA5MywgNTAsIDQ1LCAyMzMsIDExNSwgCi0gICAgMjQ5LCA3NSwgMjM4LCAxMDAsIDUwLCA0NSwgMjMzLCAxMTUsIDI0OSwgNzYsIDI0NCwgMTIwLCA1MCwgNDUsIDg5LCAyNDksIAotICAgIDc3LCAyMzYsIDE2LCA1MCwgNDUsIDg5LCAyNDksIDc4LCAyNDEsIDQwLCA1MCwgNDUsIDg5LCAyNDIsIDk0LCA1MCwgNDUsIAotICAgIDg5LCAyNDksIDc5LCAyNDIsIDI2LCA1MCwgNDUsIDg5LCAyNDIsIDk1LCA1MCwgNDUsIDg5LCAyNDIsIDk2LCA1MCwgNDUsIAotICAgIDg5LCAyNDksIDgwLCAyNDAsIDE3OSwgNTAsIDQ1LCA4OSwgMjQyLCA5NywgNTAsIDQ1LCA4OSwgMjQyLCA5OCwgNTAsIDQ1LCAKLSAgICA4OSwgMjQyLCA5OSwgNTAsIDQ1LCAyMzMsIDExNSwgMjQ5LCA4MSwgMjQwLCA1NSwgNTAsIDQ1LCA4OSwgMjQyLCAxMDEsIAotICAgIDUwLCA0NSwgODksIDI0MiwgMTAyLCA1MCwgNDUsIDg5LCAyNDksIDgyLCAyMzcsIDE5OSwgNTAsIDQ1LCA4OSwgMjQyLCAKLSAgICAxMDMsIDUwLCA0NSwgODksIDI0MiwgMTA0LCA1MCwgNDUsIDg5LCAyNDksIDgzLCAyMzQsIDExMCwgNTAsIDQ1LCA4OSwgCi0gICAgMjQ5LCA4NCwgMjM1LCAyNTAsIDUwLCA0NSwgODksIDI0MiwgMTA1LCA1MCwgNDUsIDg5LCAyNDIsIDEwNiwgNTAsIDQ1LCAKLSAgICA4OSwgMjQyLCAxMDcsIDUwLCA0NSwgODksIDI0MiwgMTA4LCA1MCwgNDUsIDg5LCAyNDIsIDEwOSwgNTAsIDQ1LCA4OSwgCi0gICAgMjQyLCAxMTAsIDUwLCA0NSwgODksIDI0MiwgMTExLCA1MCwgNDUsIDg5LCAyNDIsIDExMiwgNTAsIDQ1LCA4OSwgMjQyLCAKLSAgICAxMTMsIDUwLCA0NSwgODksIDI0OSwgODUsIDIzOSwgMTE5LCA1MCwgNDUsIDg5LCAyNDIsIDExNCwgNTAsIDQ1LCA4OSwgCi0gICAgMjQ5LCA4NiwgMjQxLCA4MSwgNTAsIDQ1LCA4OSwgMjQyLCAxMTUsIDUwLCA0NSwgODksIDI0MiwgMTE2LCA1MCwgNDUsIDg5LCAKLSAgICAyNDIsIDExNywgNTAsIDQ1LCA4OSwgMjQyLCAxMTgsIDUwLCA0NSwgODksIDI0MiwgMTE5LCA1MCwgNDUsIDg5LCAyNDIsIAotICAgIDEyMCwgNTAsIDQ1LCA4OSwgMjQyLCAxMjEsIDUwLCA0NSwgODksIDI0MiwgMTIyLCA1MCwgNDUsIDg5LCAyNDIsIDEyMywgCi0gICAgNTAsIDQ1LCA4OSwgMjQyLCAxMjQsIDUwLCA0NSwgODksIDI0MiwgMTI1LCA1MCwgNDUsIDg5LCAyNDksIDg3LCAyMzUsIAotICAgIDE3NiwgNTAsIDQ1LCA4OSwgMjQ5LCA4OCwgMjMxLCA2OSwgNTAsIDQ1LCA4OSwgMjQ5LCA4OSwgMjM0LCAxNSwgNTAsIDQ1LCAKLSAgICA4OSwgMjQ5LCA5MCwgMjM4LCA2NCwgNTAsIDQ1LCA4OSwgMjQ5LCA5MSwgNTgsIDUwLCA0NSwgODksIDI0MiwgMTUyLCA1MCwgCi0gICAgNDUsIDg5LCAyNDksIDkyLCAyNDAsIDI1LCA1MCwgNDUsIDg5LCAyNDIsIDE1MywgNTAsIDQ1LCA4OSwgMjQyLCAxNTQsIDUwLCAKLSAgICA0NSwgODksIDI0OSwgOTMsIDIzNywgMjksIDIzMywgMTkxLCA1MCwgNDUsIDg5LCAyNDksIDk0LCAyMzMsIDE5MSwgNTAsIAotICAgIDQ1LCA4OSwgMjQ5LCA5NSwgMjM2LCAyNSwgMjM4LCAyMjUsIDUwLCA0NSwgODksIDI0OSwgOTYsIDI0MCwgODQsIDUwLCA0NSwgCi0gICAgODksIDI0MiwgMTU1LCA1MCwgNDUsIDg5LCAyNDIsIDE1NiwgNTAsIDQ1LCAyMzMsIDExNSwgMjQ5LCA5NywgMjM4LCAxODcsIAotICAgIDUwLCA0NSwgODksIDI0MiwgMTU3LCA1MCwgNDUsIDg5LCAyNDIsIDE1OCwgNTAsIDQ1LCA4OSwgMjQyLCAxNjAsIDUwLCA0NSwgCi0gICAgODksIDI0MiwgMTYxLCA1MCwgNDUsIDg5LCAyNDIsIDE2MiwgNTAsIDQ1LCA4OSwgMjQ5LCA5OCwgMjQzLCAyOCwgNTAsIDQ1LCAKLSAgICA4OSwgMjQyLCAxNjMsIDUwLCA0NSwgODksIDI0MiwgMTY0LCA1MCwgNDUsIDg5LCAyNDIsIDE2NSwgNTAsIDQ1LCA4OSwgCi0gICAgMjQyLCAxNjYsIDUwLCA0NSwgODksIDI0MiwgMTY3LCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDEwMCwgNTAsIDQ1LCAKLSAgICA4OSwgMjM3LCA1MywgMjQyLCAxMjYsIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTI3LCA1MCwgNDUsIDg5LCAyMzcsIAotICAgIDUzLCAyNDIsIDEyOCwgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxMjksIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgCi0gICAgMTMwLCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDEzMSwgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxMzIsIDUwLCAKLSAgICA0NSwgODksIDIzNywgNTMsIDI0MiwgMTMzLCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDEzNCwgNTAsIDQ1LCA4OSwgCi0gICAgMjM3LCA1MywgMjQyLCAxMzUsIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTM2LCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAKLSAgICAyNDIsIDEzNywgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxMzgsIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTM5LCAKLSAgICA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDE0MCwgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxNDEsIDUwLCA0NSwgODksIAotICAgIDIzNywgNTMsIDI0MiwgMTQyLCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDE0MywgNTAsIDQ1LCA4OSwgMjM3LCA1MywgCi0gICAgMjQyLCAxNDQsIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTQ1LCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDE0NiwgCi0gICAgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxNDcsIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTQ4LCA1MCwgNDUsIDg5LCAKLSAgICAyMzcsIDUzLCAyNDIsIDE0OSwgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxNTAsIDUwLCA0NSwgODksIDIzNywgNTMsIAotICAgIDI0MiwgMTUxLCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDE1OSwgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxNjgsIAotICAgIDIxMCwgMjQ3LCA4LCAyMzEsIDI0NywgMjQwLCAxMzgsIDIxMCwgMjQ3LCA4LCAyMzEsIDI0NywgMjQ2LCAxNjQsIDIxMCwgCi0gICAgMjQwLCAyNDUsIDc2LCAyMTAsIDY1LCAxMTgsIDIxMCwgNjUsIDExMywgMjEwLCA2NSwgMTY2LCAyMTAsIDY1LCAxNTgsIAotICAgIDIxMCwgNjUsIDE3MywgMjEwLCA2NSwgMTgzLCAyMTAsIDY1LCAxOTQsIDIxMCwgNjUsIDE4NywgMjEwLCA2NSwgMTkyLCAKLSAgICAyMTAsIDY1LCAyNDYsIDE3OSwgMjEwLCA2NSwgMjM1LCA1MiwgMjEwLCA2NSwgMjM1LCA4MCwgMjEwLCA2NSwgMjM3LCAyMDMsIAotICAgIDIxMCwgNjUsIDIzNywgMTAwLCAyMTAsIDY1LCAyMzgsIDYyLCAyMTAsIDY1LCAyMzMsIDIzNSwgMjEwLCA2NSwgMjM1LCAKLSAgICAxNjksIDIxMCwgNjUsIDIzNSwgMTMyLCAyMTAsIDY1LCAxNjgsIDIzMywgNzUsIDIxMCwgNjUsIDEzNSwgMjMzLCA3NSwgCi0gICAgMjEwLCA2NSwgMTUyLCAyMzMsIDc1LCAyMTAsIDY1LCAyNDYsIDE2MCwgMjMzLCA3NSwgMjEwLCA2NSwgMjQ2LCAxNTksIAotICAgIDIzMywgNzUsIDIxMCwgNjUsIDI1MywgMTcsIDIzMywgNzUsIDIxMCwgNjUsIDI0MCwgMTU1LCAyMzMsIDc1LCAyMTAsIDY1LCAKLSAgICAyNDAsIDE0MiwgMjMzLCA3NSwgMjEwLCA2NSwgMjQ2LCAyMDgsIDIzMywgNzUsIDIxMCwgNjUsIDE2OCwgMjMxLCAxOTYsIAotICAgIDIxMCwgNjUsIDEzNSwgMjMxLCAxOTYsIDIxMCwgNjUsIDE1MiwgMjMxLCAxOTYsIDIxMCwgNjUsIDI0NiwgMTYwLCAyMzEsIAotICAgIDE5NiwgMjEwLCA2NSwgMjQ2LCAxNTksIDIzMSwgMTk2LCAyMTAsIDY1LCAyNTMsIDE3LCAyMzEsIDE5NiwgMjEwLCA2NSwgCi0gICAgMjQwLCAxNTUsIDIzMSwgMTk2LCAyMTAsIDY1LCAyNDAsIDE0MiwgMjMxLCAxOTYsIDIxMCwgNjUsIDI0NiwgMjA4LCAyMzEsIAotICAgIDE5NiwgMjEwLCA2NSwgMjUzLCA1MywgMjMxLCAxOTYsIDIxMCwgNjUsIDIzNywgOTcsIDIzMSwgMTk2LCAyMTAsIDY1LCAKLSAgICAyMzcsIDEwNiwgMjMxLCAxOTYsIDIxMCwgNjUsIDI0MCwgMTg0LCAyMzEsIDE5NiwgMjEwLCA2NSwgMjQwLCAxODksIDIzMSwgCi0gICAgMTk2LCAyMTAsIDY1LCAyNDUsIDE4NywgMjMxLCAxOTYsIDIxMCwgNjUsIDIzNiwgMjE4LCAyMzEsIDE5NiwgMjEwLCA2NSwgCi0gICAgMjM4LCAxOTcsIDIzMSwgMTk2LCAyMTAsIDY1LCAyMzksIDE0NCwgMjMxLCAxOTYsIDIxMCwgMjM3LCAxNjksIDI0NywgMTIyLCAKLSAgICAyNDYsIDM0LCAyMTAsIDIzNywgMTY5LCAyNDAsIDIyNSwgMjMzLCAxMjIsIDIxMCwgMjM3LCAxNjksIDIzNywgMTQ1LCAyMzMsIAotICAgIDEyMiwgMjEwLCAyMzcsIDE2OSwgMjQwLCAyMzksIDIzMywgMTIyLCAyMTAsIDIzNywgMTY5LCAyMzcsIDE4MiwgMjMzLCAKLSAgICAxMjIsIDIxMCwgMjU0LCA0NiwgMjM1LCA4NSwgMjQwLCAyMjUsIDIzMywgMTIyLCAyMTAsIDIzOSwgODgsIDIzNSwgODUsIAotICAgIDI0MCwgMjI1LCAyMzMsIDEyMiwgMjEwLCAyMzUsIDg1LCAyMzcsIDE0NSwgMjMzLCAxMjIsIDIxMCwgMjM1LCA4NSwgMjQwLCAKLSAgICAyMzksIDIzMywgMTIyLCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAxNjgsIDIzMywgMTU1LCAxOSwgMjMwLCAxMjQsIDI0MCwgCi0gICAgMTQwLCAxNjgsIDI0MCwgMTcwLCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAxNjgsIDIzNCwgODYsIDE5LCAyMzAsIDEyNCwgCi0gICAgMjQwLCAxNDAsIDE3MywgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMjM3LCAxMDAsIDE5LCAyMzAsIDEyNCwgMjQwLCAxNDAsIAotICAgIDI0NiwgMTU5LCAyMzMsIDc1LCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAyNDYsIDE1OSwgMjMxLCAxOTYsIDE5LCAyMzAsIAotICAgIDEyNCwgMjQwLCAxNDAsIDI0MCwgMTg5LCAyMzEsIDE5NiwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMjQ2LCAxNTksIDIzMywgCi0gICAgMTI2LCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAyNTMsIDUzLCAyMzMsIDEyNiwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgCi0gICAgMjQwLCAxODksIDIzMywgMTI2LCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAxNjgsIDIzNSwgNTYsIDIzMywgMTI2LCAxOSwgCi0gICAgMjMwLCAxMjQsIDI0MCwgMTQwLCAyNDYsIDE1OSwgMjM1LCA1NiwgMjMzLCAxMjYsIDE5LCAyMzAsIDEyNCwgMjQwLCAxNDAsIAotICAgIDE2OCwgMjMzLCAxMTcsIDIzMywgMTI2LCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAyNDYsIDE1OSwgMjMzLCAxMTcsIDIzMywgCi0gICAgMTI2LCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAyNDYsIDE1OSwgMjMzLCAxMjEsIDE5LCAyMzAsIDEyNCwgMjQwLCAxNDAsIAotICAgIDI1MywgNTMsIDIzMywgMTIxLCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAyNDAsIDE4OSwgMjMzLCAxMjEsIDE5LCAyMzAsIAotICAgIDEyNCwgMjQwLCAxNDAsIDE2OCwgMjM1LCA1NiwgMjMzLCAxMjEsIDE5LCAyMzAsIDEyNCwgMjQwLCAxNDAsIDI0NiwgMTU5LCAKLSAgICAyMzUsIDU2LCAyMzMsIDEyMSwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMTY4LCAyMzMsIDExNywgMjMzLCAxMjEsIDE5LCAKLSAgICAyMzAsIDEyNCwgMjQwLCAxNDAsIDI1MywgNTMsIDIzMywgMTE3LCAyMzMsIDEyMSwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgCi0gICAgMjQwLCAxODksIDIzMywgMTE3LCAyMzMsIDEyMSwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMjUzLCA1MywgMjQxLCA1MSwgCi0gICAgMTksIDIzMCwgMTI0LCAyMzYsIDEwMywgMTY4LCAyMzIsIDI1MSwgMTksIDIzMCwgMTI0LCAyMzMsIDEwOCwgMTE4LCAxOSwgCi0gICAgMjMwLCAxMjQsIDIzMCwgMTY2LCAxMTgsIDE5LCAyMzAsIDEyNCwgMjMwLCAxNjUsIDExMywgMTksIDIzMCwgMTI0LCAyMzMsIAotICAgIDEwOCwgMTEzLCAxOSwgMjMwLCAxMjQsIDIzNCwgNDUsIDEzNSwgMjMyLCAyMSwgMTksIDIzMCwgMTI0LCAyMzAsIDE2NSwgCi0gICAgMTM1LCAyMzIsIDIxLCAxOSwgMjMwLCAxMjQsIDIzMCwgMTQ0LCAxNzMsIDE5LCAyMzAsIDEyNCwgMjMwLCAxNDQsIDI0NiwgCi0gICAgMTc5LCAxOSwgMjMwLCAxMjQsIDIzMCwgMTQ0LCAyNTMsIDUzLCAyMzEsIDIzNSwgMTUsIDE5LCAyMzAsIDEyNCwgMjMwLCAKLSAgICAxNjYsIDI0NiwgMTc5LCAxOSwgMjMwLCAxMjQsIDIzMiwgMjMwLCAyNDYsIDE3OSwgMTksIDIzMCwgMTI0LCAyMzMsIDEwOCwgCi0gICAgMjQ2LCAxNzksIDE5LCAyMzAsIDEyNCwgMjMzLCAxMDgsIDIzNSwgODAsIDE5LCAyMzAsIDEyNCwgMjMwLCAxNDQsIDIzNywgCi0gICAgMTAwLCAxOSwgMjMwLCAxMjQsIDIzMCwgMTQ0LCAyNDAsIDE4OSwgMjMxLCAyMzUsIDE1LCAxOSwgMjMwLCAxMjQsIDIzMCwgCi0gICAgMTY2LCAyMzcsIDEwMCwgMTksIDIzMCwgMTI0LCAyMzMsIDEwOCwgMjM3LCAxMDAsIDE5LCAyMzAsIDEyNCwgMjMzLCAxMDgsIAotICAgIDE2OCwgMjMzLCA3NSwgMTksIDIzMCwgMTI0LCAyMzMsIDEwOCwgMTUyLCAyMzMsIDc1LCAxOSwgMjMwLCAxMjQsIDIzMCwgCi0gICAgMTY1LCAyNDYsIDE1OSwgMjMzLCA3NSwgMTksIDIzMCwgMTI0LCAyMzAsIDE0NCwgMjQ2LCAxNTksIDIzMywgNzUsIDE5LCAKLSAgICAyMzAsIDEyNCwgMjMzLCAxMDgsIDI0NiwgMTU5LCAyMzMsIDc1LCAxOSwgMjMwLCAxMjQsIDIzMiwgOTMsIDI0NiwgMTU5LCAKLSAgICAyMzMsIDc1LCAxOSwgMjMwLCAxMjQsIDIzOSwgMTI3LCAyNDYsIDE1OSwgMjMzLCA3NSwgMTksIDIzMCwgMTI0LCAyMzMsIAotICAgIDEwOCwgMTY4LCAyMzEsIDE5NiwgMTksIDIzMCwgMTI0LCAyMzMsIDEwOCwgMjQ2LCAxNTksIDIzMSwgMTk2LCAxOSwgMjMwLCAKLSAgICAxMjQsIDIzNiwgNDUsIDI0NiwgMTU5LCAyNDEsIDUxLCAxOSwgMjMwLCAxMjQsIDIzNCwgMjMzLCAyNDAsIDE4OSwgMjQxLCAKLSAgICA1MSwgMTksIDE2OCwgMTMyLCA1MywgMTksIDE2OCwgMTMyLCA1LCAyMzEsIDIzNSwgMTUsIDE5LCAxMzUsIDIzNywgMjE4LCAKLSAgICA1MywgMTksIDE1MiwgMjMzLCAxNzYsIDUzLCAxOSwgMjQ4LCAyMDAsIDUzLCAxOSwgMjQwLCAyOCwgNTMsIDE5LCAyMzUsIAotICAgIDE2NywgNTMsIDE5LCAyNTEsIDk2LCA1MywgMTksIDEzNSwgMjQxLCA4LCA1MywgMTksIDE1MiwgMjQxLCA4LCA1MywgMTksIAotICAgIDI0NiwgMTYwLCAyNDEsIDgsIDUzLCAxOSwgMjQ2LCAxNTksIDI0MSwgOCwgNTMsIDE5LCAyMzQsIDE2MCwgNTMsIDE5LCAKLSAgICAyMzYsIDEyNiwgMjQ3LCAxMjIsIDUzLCAxOSwgMjQ0LCAxMDUsIDUzLCAxOSwgMjM5LCAxNzcsIDUzLCAxOSwgMjQwLCA4OSwgCi0gICAgNTMsIDE5LCAyMzgsIDEwNywgNTMsIDE5LCAyMzgsIDEwNSwgNTMsIDE5LCAyMzgsIDI1MywgNTMsIDE5LCAyMzQsIDI1MiwgCi0gICAgMjQ3LCAxMjIsIDUzLCAxOSwgMjQ3LCAyNywgNTMsIDI0MCwgMTE4LCAyMzYsIDIxOSwgNTMsIDI0MCwgMTE4LCAyNDYsIDMzLCAKLSAgICA1MywgMjQwLCAxMTgsIDIzNCwgMjE5LCA1MywgMjQwLCAxMTgsIDIzNSwgMjA4LCA1MywgMjQwLCAxMTgsIDIzNiwgNTAsIAotICAgIDIzNSwgMjA4LCA1MywgMjQwLCAxMTgsIDIzNiwgMjMxLCA1MywgMjQwLCAxMTgsIDIzNCwgNDgsIDUzLCAyNDAsIDExOCwgCi0gICAgMjMzLCA1LCA1MywgMjQwLCAxMTgsIDIzMSwgMTM5LCA1MywgMjQwLCAxMTgsIDIzMiwgMTc0LCA1MywgMjQwLCAxMTgsIAotICAgIDI1NCwgMjAzLCA1MywgMjQwLCAxMTgsIDIzMiwgOTQsIDUzLCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjMwLCA4OSwgMjMzLCAKLSAgICA2OSwgMjQ2LCAxNTgsIDUsIDIzOSwgMTk5LCAyNDAsIDIyOCwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDIzNCwgMjQwLCAyNDAsIAotICAgIDIyOCwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDIzNCwgMjcsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzcsIDIzNSwgMjMzLCAKLSAgICA2OSwgMjQ2LCAxNTgsIDUsIDIzNywgMjI1LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjM1LCAxNzYsIDIzMywgNjksIDI0NiwgCi0gICAgMTU4LCA1LCAyMzIsIDE5NywgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDI0MCwgNDIsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAKLSAgICA1OCwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDI0NywgNjgsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzYsIDIyNSwgMjMzLCAKLSAgICA2OSwgMjQ2LCAxNTgsIDUsIDI0MywgMTYsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzIsIDIyNiwgMjMzLCA2OSwgMjQ2LCAKLSAgICAxNTgsIDUsIDIzNCwgMTU1LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjUxLCAyMTIsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAKLSAgICAyNDgsIDkyLCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjMwLCAyMzIsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzIsIDkyLCAKLSAgICAyMzksIDE5OCwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDIzNiwgNTMsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyNDMsIDE5LCAKLSAgICAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjQwLCAzLCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjM2LCAzNSwgMjMzLCA2OSwgCi0gICAgMjQ2LCAxNTgsIDUsIDIzNCwgMTcsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyNDUsIDE2OCwgMjMzLCA2OSwgMjQ2LCAxNTgsIAotICAgIDUsIDI0MCwgMTc5LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjQzLCAxNzUsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyNDIsIAotICAgIDIxNywgMjQ3LCAzLCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjQ4LCA1LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjQ3LCAKLSAgICAxOTUsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzgsIDE5NSwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDI0MywgODAsIDIzMywgCi0gICAgNjksIDI0NiwgMTU4LCA1LCAyNDAsIDU0LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjQ3LCAyOCwgMjMzLCA2OSwgMjQ2LCAKLSAgICAxNTgsIDUsIDI0NSwgNzcsIDI0MSwgODEsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyNDYsIDQ4LCAyMzMsIDY5LCAyNDYsIAotICAgIDE1OCwgNSwgMjM0LCAxODYsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzQsIDIxMCwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIAotICAgIDI0NCwgMTA0LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjU1LCA0MywgMjQwLCAyMTcsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAKLSAgICAyMzcsIDI1MCwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDIzNiwgOTYsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzMsIDMyLCAKLSAgICAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMywgMjQ3LCAyNDQsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyNDYsIDIzOSwgMjQyLCAKLSAgICAxNzIsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAzNiwgMjM1LCA3OCwgODIsIDIzNywgNTIsIDEsIDU3LCAyMzcsIDUyLCAxLCAKLSAgICA3MiwgMjM3LCA1MiwgMSwgMjU0LCAxODUsIDIzNywgNTIsIDEsIDI1NCwgMzMsIDIzNywgNTIsIDEsIDIxNCwgMjM3LCA1MiwgCi0gICAgMSwgMjIyLCAyMjIsIDIzNywgNTIsIDEsIDc0LCAyMzcsIDUyLCAxLCAyNTQsIDE5NSwgMjM3LCA1MiwgMSwgMjU0LCAxOTMsIAotICAgIDIzNywgNTIsIDEsIDI1MywgMTM1LCAyMzcsIDUyLCAxLCAyNTQsIDE5MiwgMjM3LCA1MiwgMSwgMjU0LCAxODYsIDIzNywgCi0gICAgNTIsIDEsIDI1NCwgMTk2LCAyMzcsIDUyLCAxLCAxNDksIDIzNywgNTIsIDEsIDE4NSwgMjM3LCA1MiwgMSwgMTk5LCAyMzcsIAotICAgIDUyLCAxLCAyNTMsIDI0OCwgMjM3LCA1MiwgMSwgMjUzLCAxNTUsIDIzNywgNTIsIDEsIDY2LCAyMzcsIDUyLCAxLCAyNTQsIAotICAgIDE4NywgMjM3LCA1MiwgMSwgMjUzLCAxODMsIDIzNywgNTIsIDEsIDE0NiwgMjM3LCA1MiwgMSwgMTkzLCAyMzcsIDUyLCAxLCAKLSAgICAyNTQsIDE4MywgMjM3LCA1MiwgMSwgMjUzLCAxOTYsIDIzNywgNTIsIDEsIDI1MywgNSwgMjM3LCA1MiwgMSwgMjUyLCAyMzIsIAotICAgIDIzNywgNTIsIDEsIDIxMiwgMjM3LCA1MiwgMSwgMjU0LCAxODQsIDIzNywgMzgsIDEsIDU3LCAyMzcsIDM4LCAxLCAyNTQsIAotICAgIDEyNCwgMjM3LCAzOCwgMSwgMjIyLCAyMjIsIDIzNywgMzgsIDEsIDE0OSwgMjM3LCAzOCwgMSwgMjUyLCA2NiwgMjM3LCAzOCwgCi0gICAgMSwgMTQ2LCAyMzcsIDM4LCAxLCAyNTQsIDkyLCAyMzcsIDM4LCAxLCAyNTMsIDE2NSwgMjM3LCAzOCwgMSwgMjU0LCAxOTYsIAotICAgIDIzNywgMzgsIDEsIDI1NCwgMTg1LCAyMzcsIDM4LCAxLCAxODUsIDIzNywgMzgsIDEsIDczLCAyMzcsIDM4LCAxLCAyNTQsIAotICAgIDQxLCAyMzcsIDM4LCAxLCAyNTQsIDE4MywgMjM3LCAzOCwgMSwgMjUzLCAxNjAsIDIzNywgMzgsIDEsIDI1MSwgMjIwLCAKLSAgICAyMzcsIDM4LCAxLCAxOTMsIDIzNywgMzgsIDEsIDI0MiwgMjI3LCAyMzcsIDM4LCAxLCA2NiwgMjM3LCAzOCwgMSwgMjUzLCAKLSAgICAxNTUsIDIzNywgMzgsIDEsIDI1NCwgMTg0LCAyMzcsIDM4LCAxLCAxOTksIDIzNywgMzgsIDEsIDI1MiwgMzEsIDIzNywgMzgsIAotICAgIDEsIDI1NCwgMTg3LCAyMzcsIDM4LCAxLCAyNTMsIDE5NCwgMjM3LCAzOCwgMSwgNzQsIDIzNywgMzgsIDEsIDcyLCAyMzcsIAotICAgIDM4LCAxLCAyNDYsIDQzLCAyMzcsIDM4LCAxLCAyNTQsIDE4NiwgMjM3LCAzOCwgMSwgMjU0LCA3NiwgMjM3LCAzOCwgMSwgCi0gICAgMjU0LCAxMTEsIDIzNywgMzgsIDEsIDI1MiwgMjI0LCAyMzcsIDM4LCAxLCAyMTQsIDIzNywgMzgsIDEsIDI1NCwgNTgsIAotICAgIDIzNywgMzgsIDEsIDI1MywgMTk1LCAyMzcsIDM4LCAxLCAyNTEsIDIzNywgMjM3LCAzOCwgMSwgMjUzLCA2OSwgMjM3LCAzOCwgCi0gICAgMSwgMjUyLCAyMTYsIDIzNywgMzgsIDEsIDI0MiwgMjI4LCAyMzcsIDM4LCAxLCAyNTMsIDE5NiwgMjM3LCAzOCwgMSwgMjQ2LCAKLSAgICA0MSwgMjM3LCAzOCwgMSwgMjUyLCAyNDksIDIzNywgMzgsIDEsIDI1MywgMjQ2LCAyMzcsIDM4LCAxLCAyNTAsIDI1MywgCi0gICAgMjM3LCAzOCwgMSwgMjUwLCAyNTQsIDIzNywgMzgsIDEsIDI1MCwgMjU1LCAyMzcsIDM4LCAxLCAyNTAsIDIxMiwgMjM3LCAKLSAgICAzOCwgMSwgMjUzLCAyMTgsIDIzNywgMzgsIDEsIDI0NiwgNDIsIDg0LCAyNywgMSwgNTcsIDg0LCAyNywgMSwgMjUzLCA3MywgCi0gICAgODQsIDI3LCAxLCAyNTMsIDYsIDg0LCAyNywgMSwgMjUzLCAyMCwgODQsIDI3LCAxLCA3MiwgODQsIDI3LCAxLCAyNTMsIDk1LCAKLSAgICA4NCwgMjcsIDEsIDI1MywgNDYsIDg0LCAyNywgMSwgMjUyLCAyNTIsIDg0LCAyNywgMSwgMjQ2LCAyNDcsIDg0LCAyNywgMSwgCi0gICAgNzQsIDg0LCAyNywgMSwgMTc3LCA4NCwgMjcsIDEsIDI1MywgNTgsIDg0LCAyNywgMSwgMjUzLCA4NywgODQsIDI3LCAxLCAKLSAgICAyNTIsIDIzMiwgODQsIDI3LCAxLCAyNDYsIDIzMiwgODQsIDI3LCAxLCA3MywgODQsIDI3LCAxLCAyNTMsIDAsIDg0LCAyNywgCi0gICAgMSwgMjQ2LCAxODYsIDg0LCAyNywgMSwgMjUzLCAzNCwgODQsIDI3LCAxLCAyNTMsIDk5LCA4NCwgMjcsIDEsIDI1MywgMTE2LCAKLSAgICA4NCwgMjcsIDEsIDI1MywgOSwgODQsIDI3LCAxLCA2NiwgODQsIDI3LCAxLCAyNDksIDIyNywgODQsIDI3LCAxLCAyNDgsIAotICAgIDEzMCwgODQsIDI3LCAxLCAyNDgsIDgyLCA4NCwgMjcsIDEsIDI1MywgMTI0LCA4NCwgMjcsIDEsIDI0OSwgMjMyLCA4NCwgCi0gICAgMjcsIDEsIDI0NiwgMjE3LCA4NCwgMjcsIDEsIDI1MiwgMjE2LCA4NCwgMjcsIDEsIDI1MiwgMjI0LCA4NCwgMjcsIDIwNywgCi0gICAgMTE4LCA4NCwgMjcsIDIwNywgMTczLCA4NCwgMjcsIDIwNywgMjQ2LCAxNzksIDg0LCAyNywgMjA3LCAyMzcsIDEwMCwgMjM3LCAKLSAgICA1NCwgMSwgMjQyLCA0NiwgMjM3LCA1NCwgMSwgMjM0LCAxMiwgMjM3LCA1NCwgMSwgMjQzLCAxNDUsIDIzNywgNTQsIDEsIAotICAgIDI0MywgMjUsIDIzNywgNTQsIDEsIDIzNSwgMjQxLCAyMzcsIDU0LCAxLCAyMzMsIDMsIDIzNywgNTQsIDEsIDI0NCwgMTQsIAotICAgIDIzNywgNTQsIDEsIDI0MywgMTY4LCAyMzcsIDU0LCAxLCAyMzcsIDUsIDIzNywgNTQsIDEsIDI0OSwgMjI2LCAyMzcsIDU0LCAKLSAgICAxLCAyMzksIDc0LCAyMzcsIDU0LCAxLCAyMzksIDc5LCAyMzcsIDU0LCAxLCAyMzksIDk1LCAyMzcsIDU0LCAxLCAyMzYsIAotICAgIDE2MywgMjM3LCA1NCwgMSwgMjUwLCAxMjgsIDIzNywgNTQsIDEsIDI0NiwgMzcsIDIzNywgNTQsIDEsIDIzMiwgMjM4LCAKLSAgICAyMzcsIDU0LCAxLCAyMzUsIDEzMiwgMjM3LCA1NCwgMSwgMjM5LCAyMTMsIDIzNywgNTQsIDEsIDIzOSwgMjM4LCAyMzcsIAotICAgIDU0LCAxLCAyNDAsIDMzLCAyMzcsIDU0LCAxLCAyNDAsIDg2LCAyMzcsIDU0LCAxLCAyMzgsIDIxMiwgMjM3LCA1NCwgMSwgCi0gICAgMjM5LCAzOCwgMjM3LCA1NCwgMSwgMjM4LCA5LCAyMzcsIDU0LCAxLCAyMzksIDE3NiwgMjM3LCA1NCwgMSwgMjQ2LCAyMDgsIAotICAgIDIzMywgNzUsIDIzMywgNzIsIDEsIDI0MiwgNTUsIDIzMywgNzIsIDEsIDI0MCwgMTYwLCAyMzMsIDcyLCAxLCAyMzgsIDIzMiwgCi0gICAgMjMzLCA3MiwgMSwgMjQ2LCAxNzgsIDIzMywgNzIsIDEsIDIzNywgNzUsIDIzMywgNzIsIDEsIDI1MywgMjEsIDIzMywgNzIsIAotICAgIDEsIDI1MywgMTAsIDIzMywgNzIsIDEsIDI0MCwgMTczLCAyMzMsIDcyLCAxLCAyNDMsIDIzMywgMjMzLCA3MiwgMSwgMjQ3LCAKLSAgICAyMTAsIDIzMywgNzIsIDEsIDI0NywgNjMsIDIzMywgNzIsIDEsIDI0NywgMSwgMjMzLCA3MiwgMSwgMjQwLCAyMDMsIDIzMywgCi0gICAgNzIsIDEsIDIzNywgODIsIDIzMywgNzIsIDEsIDI0NywgNDEsIDIzMywgNzIsIDEsIDI0MywgNjAsIDIzMywgNzIsIDEsIAotICAgIDI0NiwgMTk1LCAyMzMsIDcyLCAxLCAyNTMsIDk3LCAyMzMsIDcyLCAxLCAyMzksIDIzNSwgMjMzLCA3MiwgMSwgMjQ2LCAKLSAgICAyMjQsIDIzMywgNzIsIDEsIDI1MywgODIsIDIzMywgNzIsIDEsIDI0MSwgMjI5LCAyMzMsIDcyLCAxLCAyNDUsIDEwMCwgCi0gICAgMjMzLCA3MiwgMSwgMjM5LCAyMTQsIDIzMywgNzIsIDEsIDIzNywgMywgMjMzLCA3MiwgMSwgMjM3LCAyNTUsIDIzMywgNzIsIAotICAgIDEsIDk2LCAyMzMsIDcyLCAxLCA3NCwgMjMzLCA3MiwgMSwgNjYsIDIzMywgNzIsIDEsIDI0NywgMjA0LCAyMzMsIDcyLCAKLSAgICAyNDcsIDgsIDIzMywgMTQwLCA4NCwgMjM1LCAxNSwgNSwgNTcsIDg0LCAyMzUsIDE1LCA1LCA3NCwgODQsIDIzNSwgMTUsIDUsIAotICAgIDY2LCA4NCwgMjM1LCAxNSwgNSwgMTc3LCA4NCwgMjM1LCAxNSwgNSwgMjUzLCAzNCwgODQsIDIzNSwgMTUsIDUsIDI1MiwgCi0gICAgMjA1LCA4NCwgMjM1LCAxNSwgNSwgMjUzLCA0MCwgODQsIDIzNSwgMTUsIDUsIDI1MywgODMsIDg0LCAyMzUsIDE1LCA1LCAKLSAgICAyNTIsIDIxNSwgODQsIDIzNSwgMTUsIDUsIDI1MiwgMjEzLCA4NCwgMjM1LCAxNSwgNSwgMjUzLCAxMDQsIDg0LCAyMzUsIAotICAgIDE1LCA1LCAyNTIsIDIwMiwgODQsIDIzNSwgMTUsIDUsIDI1MywgMTgsIDg0LCAyMzUsIDE1LCA1LCAyNTIsIDIwMywgODQsIAotICAgIDIzNSwgMTUsIDUsIDI1MywgMTIsIDg0LCAyMzUsIDE1LCA1LCAyNTMsIDMxLCA4NCwgMjM1LCAxNSwgNSwgMjQ2LCAxNzMsIAotICAgIDg0LCAyMzUsIDE1LCA1LCAyMTMsIDg0LCAyMzUsIDE1LCA1LCAyNTIsIDIxMSwgODQsIDIzNSwgMTUsIDUsIDI1MiwgMjM0LCAKLSAgICA4NCwgMjM1LCAxNSwgNSwgMjUyLCAyMDEsIDg0LCAyMzUsIDE1LCA1LCAyNTIsIDIyNywgODQsIDIzNSwgMTUsIDUsIDE5OCwgCi0gICAgODQsIDIzNSwgMTUsIDUsIDI1MiwgMjM5LCA4NCwgMjM1LCAxNSwgNSwgMjUyLCAyMjksIDg0LCAyMzUsIDE1LCA1LCAxOTEsIAotICAgIDg0LCAyMzUsIDE1LCA1LCAyNTIsIDI0MywgODQsIDIzNSwgMTUsIDUsIDI1MywgMTM4LCA4NCwgMjM1LCAxNSwgNSwgMjA4LCAKLSAgICA4NCwgMjM1LCAxNSwgNSwgMjUzLCAzLCA4NCwgMjM1LCAxNSwgNSwgMjUyLCAyMDAsIDg0LCAyMzUsIDE1LCA1LCAyNTIsIAotICAgIDIwNCwgODQsIDIzNSwgMTUsIDUsIDI1MiwgMjI2LCA4NCwgMjM1LCAxNSwgNSwgMjQ2LCAxNjUsIDg0LCAyMzUsIDE1LCA1LCAKLSAgICAyNDYsIDE5MCwgODQsIDIzNSwgMTUsIDUsIDE1NCwgODQsIDIzNSwgMTUsIDUsIDIyOSwgMjMyLCA4NCwgMjM1LCAxNSwgNSwgCi0gICAgMjI3LCAyMTgsIDg0LCAyMzUsIDE1LCA1LCAyMjcsIDIxOSwgODQsIDIzNSwgMTUsIDUsIDIyOCwgMTczLCA4NCwgMjM1LCAKLSAgICAxNSwgNSwgMjMwLCAyNDIsIDg0LCAyMzUsIDE1LCA1LCAyMjgsIDIzNSwgODQsIDIzNSwgMTUsIDUsIDI0MiwgMTcwLCA4NCwgCi0gICAgMjM1LCAxNSwgNSwgMjM0LCAyNCwgODQsIDIzNSwgMTUsIDI0NywgOCwgMjMzLCAxNDAsIDg0LCAyMzUsIDE1LCA2NSwgMTE4LCAKLSAgICA4NCwgMjM1LCAxNSwgNjUsIDExMywgODQsIDIzNSwgMTUsIDY1LCAyNDYsIDE3OSwgODQsIDIzNSwgMTUsIDY1LCAyMzUsIAotICAgIDUyLCA4NCwgMjM1LCAxNSwgNjUsIDIzMywgNzUsIDE0MywgNiwgMSwgMTgyLCA3NCwgMTQzLCA2LCAxLCAxODIsIDcyLCAKLSAgICAxNDMsIDYsIDEsIDE4MiwgNTcsIDE0MywgNiwgMSwgMTgyLCAyNTMsIDExMSwgMTQzLCA2LCAxLCAxODIsIDczLCAxNDMsIDYsIAotICAgIDEsIDE4MiwgMjUyLCAyMjAsIDE0MywgNiwgMSwgMjQwLCAxMjUsIDc0LCAxNDMsIDYsIDEsIDI0MCwgMTI1LCA3MiwgMTQzLCAKLSAgICA2LCAxLCAyNDAsIDEyNSwgNTcsIDE0MywgNiwgMSwgMjQwLCAxMjUsIDI1MywgMTExLCAxNDMsIDYsIDEsIDI0MCwgMTI1LCAKLSAgICA3MywgMTQzLCA2LCAxLCAyNDAsIDEyNSwgMjUyLCAyMjAsIDE0MywgNiwgMSwgMjUzLCAxMTQsIDE0MywgNiwgMSwgMjU0LCAKLSAgICAxLCAxNDMsIDYsIDEsIDI1MywgMTA5LCAxNDMsIDYsIDEsIDI0NywgNjIsIDE0MywgNiwgMSwgMjEyLCAxNDMsIDYsIDEsIAotICAgIDI0NywgNDYsIDE0MywgNiwgMSwgMjQ3LCAyOCwgMTQzLCA2LCAxLCAyNDcsIDEwNiwgMTQzLCA2LCAxLCAyNDcsIDMwLCAKLSAgICAxNDMsIDYsIDEsIDI0MCwgMjQ2LCAxNDMsIDYsIDEsIDI0NywgMzgsIDE0MywgNiwgMSwgMjQ4LCA3OSwgMTQzLCA2LCAxLCAKLSAgICAyNDgsIDQ1LCAxNDMsIDYsIDEsIDI1MywgMTI0LCAxNDMsIDYsIDEsIDI0NywgMTEzLCAxNDMsIDYsIDEsIDI0NiwgMjQyLCAKLSAgICAxNDMsIDYsIDEsIDI0MCwgMjM4LCAxNDMsIDYsIDEsIDI1MywgMTE2LCAxNDMsIDYsIDEsIDI0NywgNjQsIDE0MywgNiwgMSwgCi0gICAgMjQ2LCAyMzIsIDE0MywgNiwgMSwgMjQxLCAyNSwgMTQzLCA2LCAxLCAyNTMsIDk5LCAxNDMsIDYsIDEsIDI1MywgNTgsIAotICAgIDE0MywgNiwgMSwgMjUzLCA4NywgMTQzLCA2LCAxLCAyNTIsIDIzMiwgMTQzLCA2LCAxLCAyNDcsIDAsIDE0MywgNiwgMSwgCi0gICAgMjUzLCAxNTcsIDE0MywgNiwgMSwgMjUzLCAyMjAsIDE0MywgMywgMSwgMTgyLCA3NCwgMTQzLCAzLCAxLCAxODIsIDcyLCAKLSAgICAxNDMsIDMsIDEsIDE4MiwgNTcsIDE0MywgMywgMSwgMTgyLCAyNTMsIDExMSwgMTQzLCAzLCAxLCAxODIsIDczLCAxNDMsIDMsIAotICAgIDEsIDE4MiwgMjUyLCAyMjAsIDE0MywgMywgMSwgMjQwLCAxMjUsIDc0LCAxNDMsIDMsIDEsIDI0MCwgMTI1LCA3MiwgMTQzLCAKLSAgICAzLCAxLCAyNDAsIDEyNSwgNTcsIDE0MywgMywgMSwgMjQwLCAxMjUsIDI1MywgMTExLCAxNDMsIDMsIDEsIDI0MCwgMTI1LCAKLSAgICA3MywgMTQzLCAzLCAxLCAyNDAsIDEyNSwgMjUyLCAyMjAsIDE0MywgMywgMSwgMjUzLCAxMTQsIDE0MywgMywgMSwgMjU0LCAKLSAgICAxLCAxNDMsIDMsIDEsIDI1MywgMTA5LCAxNDMsIDMsIDEsIDI0NywgNjIsIDE0MywgMywgMSwgMjEyLCAxNDMsIDMsIDEsIAotICAgIDI0NywgNDYsIDE0MywgMywgMSwgMjQ3LCAyOCwgMTQzLCAzLCAxLCAyNDcsIDEwNiwgMTQzLCAzLCAxLCAyNDcsIDMwLCAKLSAgICAxNDMsIDMsIDEsIDI0MCwgMjQ2LCAxNDMsIDMsIDEsIDI0NywgMzgsIDE0MywgMywgMSwgMjQ4LCA3OSwgMTQzLCAzLCAxLCAKLSAgICAyNDgsIDQ1LCAxNDMsIDMsIDEsIDI1MywgMTI0LCAxNDMsIDMsIDEsIDI0NywgMTEzLCAxNDMsIDMsIDEsIDI0NiwgMjQyLCAKLSAgICAxNDMsIDMsIDEsIDI0MCwgMjM4LCAxNDMsIDMsIDEsIDI1MywgMTE2LCAxNDMsIDMsIDEsIDI0NywgNjQsIDE0MywgMywgMSwgCi0gICAgMjQ2LCAyMzIsIDE0MywgMywgMSwgMjQxLCAyNSwgMTQzLCAzLCAxLCAyNTMsIDk5LCAxNDMsIDMsIDEsIDI1MywgNTgsIAotICAgIDE0MywgMywgMSwgMjUzLCA4NywgMTQzLCAzLCAxLCAyNTIsIDIzMiwgMTQzLCAzLCAxLCAyNDcsIDAsIDE0MywgMywgMSwgCi0gICAgMjUzLCAxNTcsIDE0MywgMywgMSwgMjUzLCAyMjAsIDIzNSwgMTcsIDEsIDI0NSwgNjMsIDIzNSwgMTcsIDEsIDI0OCwgMTc5LCAKLSAgICAyMzUsIDE3LCAxLCAyNDQsIDU3LCAyMzUsIDE3LCAxLCAyNDcsIDE0MCwgMjM1LCAxNywgMSwgMjQwLCAzNiwgMjM1LCAxNywgCi0gICAgMSwgMjUzLCAyNSwgMjM1LCAxNywgMSwgMjQ1LCAyMjcsIDIzNSwgMTcsIDEsIDIzNiwgMjksIDIzNSwgMTcsIDEsIDI1MiwgCi0gICAgMTQ2LCAyMzUsIDE3LCAxLCAyNDMsIDIzNywgMjM1LCAxNywgMSwgMjQ5LCAxMTcsIDIzNSwgMTcsIDEsIDI0MywgNTIsIAotICAgIDIzNSwgMTcsIDEsIDI1MCwgMTEsIDIzNSwgMTcsIDEsIDI1MiwgODMsIDIzNSwgMTcsIDEsIDI0NSwgMjQ1LCAyMzUsIDE3LCAKLSAgICAxLCAyNDgsIDIxMCwgMjM1LCAxNywgMSwgMjMzLCAyMTgsIDIzNSwgMTcsIDEsIDIzOSwgNTIsIDIzNSwgMTcsIDEsIDI1MiwgCi0gICAgMTAyLCAyMzUsIDE3LCAxLCAyMzksIDEsIDIzNSwgMTcsIDEsIDI0NCwgMTA2LCAyMzUsIDE3LCAxLCAyNDQsIDE0NiwgMjM1LCAKLSAgICAxNywgMSwgMjU0LCA2NywgMjM1LCAxNywgMSwgMjQ5LCAyMjUsIDIzNSwgMTcsIDEsIDI0NiwgMTc3LCAyMzUsIDE3LCAxLCAKLSAgICAyNDgsIDIzMCwgMjM1LCAxNywgMSwgMjUzLCAxMDYsIDIzNSwgMTcsIDEsIDI0MiwgMjYsIDIzNSwgMTcsIDEsIDI0NywgCi0gICAgMTg2LCAyMzUsIDE3LCAxLCAyNTMsIDExMSwgMjM1LCAxNywgMSwgMjQ1LCAxMTgsIDIzNSwgMTcsIDEsIDI0NiwgMTk1LCAKLSAgICAyMzUsIDE3LCAxLCAyNDcsIDEzNiwgMjM1LCAxNywgMSwgMjQ4LCAyMzEsIDIzNSwgMTcsIDEsIDI0OCwgNjYsIDIzNSwgMTcsIAotICAgIDEsIDI1MywgMTksIDIzNSwgMTcsIDEsIDI1MSwgOTQsIDIzNSwgMTcsIDEsIDI0NSwgNTYsIDIzNSwgMTcsIDEsIDI0OCwgCi0gICAgMTIxLCAyMzUsIDE3LCAxLCAyNDgsIDI0MiwgMjM1LCAxNywgMSwgMjQ4LCAyMzksIDIzNSwgMTcsIDEsIDI1MywgODEsIAotICAgIDIzNSwgMTcsIDEsIDI0OCwgMjMyLCAyMzUsIDE3LCAxLCAyNDgsIDM0LCAyMzUsIDE3LCAxLCAyMzgsIDEwNiwgMjM1LCAxNywgCi0gICAgMSwgMjQ3LCAxMzUsIDIzNSwgMTcsIDEsIDI1MCwgMTEzLCAyMzUsIDE3LCAxLCAyNTIsIDE0NywgMjM1LCAyMSwgMSwgMjQwLCAKLSAgICAxNzQsIDIzNSwgMjEsIDEsIDI1MiwgMjExLCAyMzUsIDIxLCAxLCAyNTIsIDIwMiwgMjM1LCAyMSwgMSwgMjUyLCAyMTMsIAotICAgIDIzNSwgMjEsIDEsIDI1MywgODMsIDIzNSwgMjEsIDEsIDI0NiwgMTc4LCAyMzUsIDIxLCAxLCAyNDMsIDU0LCAyMzUsIDIxLCAKLSAgICAxLCAyMDgsIDIzNSwgMjEsIDEsIDI1MiwgMjA0LCAyMzUsIDIxLCAxLCAyMzksIDI0OCwgMjM1LCAyMSwgMSwgMjQ2LCAxOTYsIAotICAgIDIzNSwgMjEsIDEsIDI0MiwgMjM1LCAyMzUsIDIxLCAxLCAyNTIsIDIwNSwgMjM1LCAyMSwgMSwgMjUyLCAyMzQsIDIzNSwgCi0gICAgMjEsIDEsIDI0NSwgODksIDIzNSwgMjEsIDEsIDI0NCwgNDMsIDIzNSwgMjEsIDEsIDI0NCwgODQsIDIzNSwgMjEsIDEsIAotICAgIDI0NCwgMTQ1LCAyMzUsIDIxLCAxLCAyNDUsIDE3LCAyMzUsIDIxLCAxLCAyNDcsIDYwLCAyMzUsIDIxLCAxLCAxNTQsIDIzNSwgCi0gICAgMjEsIDEsIDE5MSwgMjM1LCAyMSwgMSwgNTcsIDIzNSwgMjEsIDEsIDcyLCAyMzUsIDIxLCAxLCA3NCwgMjM1LCAyMSwgMSwgCi0gICAgNzMsIDIzNSwgMjEsIDEsIDY2LCAyMzUsIDIxLCAxLCAyNTIsIDIxMiwgMjM1LCAyMSwgMSwgMjUyLCAyMzEsIDIzNSwgMjEsIAotICAgIDEsIDI1MiwgMjIwLCAyMzUsIDIxLCAyMSwgMjQwLCAxMjYsIDIzNSwgMjEsIDIxLCAxMTgsIDIzNSwgMjEsIDIxLCAxMTMsIAotICAgIDIzNSwgMjEsIDIxLCAxNjYsIDIzNSwgMjEsIDIxLCAxNTgsIDIzNSwgMjEsIDIxLCAxNzMsIDIzNSwgMjEsIDIxLCAxODMsIAotICAgIDIzNSwgMjEsIDIxLCAxOTQsIDIzNSwgMjEsIDIxLCAxODcsIDIzNSwgMjEsIDIxLCAxOTIsIDIxOCwgNCwgNTcsIDIxOCwgNCwgCi0gICAgNzIsIDIxOCwgNCwgNzQsIDIxOCwgNCwgNzMsIDIxOCwgNCwgNjYsIDIxOCwgNCwgMjUyLCAyMTMsIDIxOCwgNCwgMjUzLCAKLSAgICA5MCwgMjE4LCA0LCAxNzcsIDIxOCwgNCwgMjUzLCA2LCAyMTgsIDQsIDI1MywgNywgMjE4LCA0LCAyNTMsIDMzLCAyMTgsIDQsIAotICAgIDI1MywgMzQsIDIxOCwgNCwgMjUyLCAyMDAsIDIxOCwgNCwgMjUzLCA4MCwgMjE4LCA0LCAyNTMsIDQyLCAyMTgsIDQsIDI1MywgCi0gICAgNDksIDIxOCwgNCwgMjUzLCAyMiwgMjE4LCA0LCAxOTgsIDIxOCwgNCwgMjUzLCAxMywgMjE4LCA0LCAyNTIsIDIzOSwgMjE4LCAKLSAgICA0LCAyNTMsIDE0LCAyMTgsIDQsIDI1MiwgMjI5LCAyMTgsIDQsIDI1MiwgMjAxLCAyMTgsIDQsIDI1MiwgMjQ3LCAyMTgsIDQsIAotICAgIDI1MiwgMjQ4LCAyMTgsIDQsIDI1MywgOCwgMjE4LCA0LCAyNTIsIDIyNywgMjE4LCA0LCAyMTMsIDIxOCwgNCwgMjUzLCAwLCAKLSAgICAyMTgsIDQsIDI1MiwgMjIzLCAyMTgsIDQsIDI1MywgNTAsIDIxOCwgNCwgMjUzLCA4MiwgMjE4LCA0LCAyMDgsIDIxOCwgNCwgCi0gICAgMjUzLCAzNiwgMjE4LCA0LCAyNTMsIDM3LCAyMTgsIDQsIDI1MiwgMjQ2LCAyMTgsIDQsIDI1MywgMywgMjE4LCA0LCAyNTIsIAotICAgIDIwNCwgMjE4LCA0LCAyNTMsIDUyLCAyMTgsIDQsIDI1MywgMjQsIDIxOCwgNCwgMjUzLCAyNSwgMjE4LCA0LCAyNTMsIDI2LCAKLSAgICAyMTgsIDQsIDI1MiwgMjAyLCAyMTgsIDQsIDI1MywgOSwgMjE4LCA0LCAyNTMsIDQ0LCAyMTgsIDQsIDk2LCAyMTgsIDQsIAotICAgIDI1MywgMTgsIDIxOCwgNCwgMjUyLCAyMDgsIDIxOCwgNCwgMjUyLCAyNTAsIDIxOCwgNCwgMjUzLCAyNywgMjE4LCA0LCAKLSAgICAyNTMsIDEwLCAyMTgsIDQsIDI1MywgODMsIDIxOCwgNCwgMjU0LCAxNywgMjE4LCA0LCAyNTIsIDIyNiwgMjE4LCA0LCAyNTMsIAotICAgIDY1LCAyMzAsIDEyNywgMSwgMjQ4LCAyMzMsIDIzMCwgMTI3LCAxLCAyNDcsIDI1MywgMjMwLCAxMjcsIDEsIDI0MywgMTE0LCAKLSAgICAyMzAsIDEyNywgMSwgMjQzLCA1NywgMjMwLCAxMjcsIDEsIDI1MiwgMjUyLCAyMzAsIDEyNywgMSwgMjQ3LCAyMjUsIDIzMCwgCi0gICAgMTI3LCAxLCAyNTIsIDE2OCwgMjMwLCAxMjcsIDEsIDI0OCwgNjAsIDIzMCwgMTI3LCAxLCAyNDcsIDIxMCwgMjMwLCAxMjcsIAotICAgIDEsIDI0NywgNjMsIDIzMCwgMTI3LCAxLCAyNDcsIDEsIDIzMCwgMTI3LCAxLCAyNDQsIDg4LCAyMzAsIDEyNywgMSwgMjQ3LCAKLSAgICA0MSwgMjMwLCAxMjcsIDEsIDI0NiwgMTk1LCAyMzAsIDEyNywgMSwgMjQ1LCAxNTYsIDIzMCwgMTI3LCAxLCAyNDYsIDIyNCwgCi0gICAgMjMwLCAxMjcsIDEsIDI1MywgMCwgMjMwLCAxMjcsIDEsIDI0MSwgMjI5LCAyMzAsIDEyNywgMSwgMjQ4LCAxNDIsIDIzMCwgCi0gICAgMTI3LCAxLCAyNDUsIDEyMCwgMjMwLCAxMjcsIDEsIDI0MCwgMjAzLCAyMzAsIDEyNywgMSwgMjQ2LCAyMTIsIDIzMCwgMTI3LCAKLSAgICA2NSwgMTE4LCAyMzAsIDEyNywgNjUsIDI0NiwgMTc5LCAyMzAsIDEyNywgNjUsIDIzNSwgNTIsIDIzMCwgMTI3LCA2NSwgCi0gICAgMTY4LCAyMzMsIDc1LCAyMzAsIDEyNywgMjQ3LCA4LCAyMzAsIDEzMSwgMjM3LCA1NSwgMSwgNTcsIDIzNywgNTUsIDEsIAotICAgIDI1NCwgMTg1LCAyMzcsIDU1LCAxLCAyMTQsIDIzNywgNTUsIDEsIDIyMiwgMjIyLCAyMzcsIDU1LCAxLCA3MiwgMjM3LCA1NSwgCi0gICAgMSwgMTk2LCAyMzcsIDU1LCAxLCA3NCwgMjM3LCA1NSwgMSwgMjU0LCAxOTAsIDIzNywgNTUsIDEsIDI1NCwgMTg2LCAyMzcsIAotICAgIDU1LCAxLCAxNDksIDIzNywgNTUsIDEsIDE4NSwgMjM3LCA1NSwgMSwgMTk5LCAyMzcsIDU1LCAxLCA3MywgMjM3LCA1NSwgMSwgCi0gICAgMTQ2LCAyMzcsIDU1LCAxLCAyNTMsIDE5NCwgMjM3LCA1NSwgMSwgMjU0LCAxODMsIDIzNywgNTUsIDEsIDY2LCAyMzcsIDU1LCAKLSAgICAxLCAyNTQsIDE5MSwgMjM3LCA1NSwgMSwgMjU0LCAxOTYsIDIzNywgNTUsIDEsIDE5MywgMjM3LCA1NSwgMSwgMjUzLCAxOTYsIAotICAgIDIzNywgNTUsIDEsIDI1MywgNSwgMjM3LCA1NSwgMSwgMjUyLCAyMzIsIDIzNywgNTUsIDEsIDI1MywgMTg2LCAyMzcsIDU1LCAKLSAgICAxLCAyNTMsIDE1NSwgMjM3LCA1NSwgMSwgMjU0LCAxOTQsIDIzNywgNTUsIDIzMCwgMTYwLCA3NiwgMTc4LCAxLCA1NywgCi0gICAgMTc4LCAzMSwgNSwgNzQsIDE3OCwgMzEsIDUsIDY2LCAxNzgsIDMxLCA1LCAxNTMsIDE0NiwgMTc4LCAzMSwgNSwgNzIsIAotICAgIDE3OCwgMzEsIDUsIDczLCAxNzgsIDMxLCAyMzcsIDEwMSwgNzYsIDE3OCwgNSwgNDcsIDI0NiwgMTc0LCA1MSwgMTc4LCA1LCAKLSAgICAyMzEsIDIwNiwgMTc4LCA1LCAyMzMsIDEwMiwgMTc4LCAxLCAxNzcsIDE3OCwgMSwgMjQ2LCAxNzgsIDE3OCwgMSwgMjUyLCAKLSAgICAyMDUsIDE3OCwgMSwgMjQ2LCAyMDIsIDE3OCwgMSwgMjUyLCAyMTUsIDE3OCwgMSwgMjQ2LCAxNzYsIDE3OCwgMSwgMjUyLCAKLSAgICAyMTMsIDE3OCwgMSwgMjQ2LCAxODEsIDE3OCwgMSwgMjQ2LCAxOTEsIDE3OCwgMSwgMjQwLCAxNTAsIDE3OCwgMSwgMjQ2LCAKLSAgICAxOTIsIDE3OCwgMSwgMjQwLCAxNjYsIDE3OCwgMSwgMjQ2LCAyMDMsIDE3OCwgMSwgMjUyLCAyMDIsIDE3OCwgMSwgMjQ2LCAKLSAgICAxNzMsIDE3OCwgMSwgMjUyLCAyMDMsIDE3OCwgMSwgMjQ2LCAxOTYsIDE3OCwgMSwgMjUyLCAyMDEsIDE3OCwgMSwgMjEzLCAKLSAgICAxNzgsIDEsIDI0NiwgMTgyLCAxNzgsIDEsIDI1MiwgMjExLCAxNzgsIDEsIDI0NiwgMTk5LCAxNzgsIDEsIDE5OCwgMTc4LCAKLSAgICAxLCAxOTEsIDE3OCwgMSwgMjA4LCAxNzgsIDEsIDI1MiwgMjAwLCAxNzgsIDEsIDI1MiwgMjQzLCAxNzgsIDEsIDI0NiwgCi0gICAgMTY1LCAxNzgsIDEsIDI0NiwgMTkwLCAxNzgsIDEsIDI1MiwgMjA0LCAxNzgsIDEsIDI1MiwgMjI2LCAxNzgsIDEsIDE1NCwgCi0gICAgMTc4LCAxLCAyNDcsIDE2MSwgMTc4LCAxLCAyNDAsIDUyLCAxNzgsIDUsIDI1MiwgMjE5LCA0NiwgMTc4LCA1LCAyMzgsIAotICAgIDEzOCwgMTc4LCA1LCA1NiwgNTEsIDE3OCwgMjM1LCA0MywgMTc4LCAyMSwgMTE4LCAxNzgsIDIxLCAxMTMsIDE3OCwgMjEsIAotICAgIDE2NiwgMTc4LCAyMSwgMTU4LCAxNzgsIDY1LCAyNDYsIDE3OSwgMTc4LCA2NSwgMjM1LCA1MiwgMTc4LCA2NSwgMTY4LCAKLSAgICAyMzMsIDc1LCAxNzgsIDY1LCAxNjgsIDIzMSwgMTk2LCAxNzgsIDIyOSwgMTYxLCAyNDYsIDE2NCwgMTc4LCAyMjksIDE2MSwgCi0gICAgMywgMjM1LCAyMCwgMTc4LCAyMjksIDE2MSwgMjM1LCAyMCwgMTc4LCAyMjksIDE2MSwgMjM0LCAzOSwgMTI1LCAxNzgsIAotICAgIDIyOSwgMTYxLCAyMzIsIDIyNywgMTc4LCAyMjksIDE2MSwgMjM5LCA4OSwgMTc4LCAyMjksIDE2MSwgMjM3LCAxMDksIDE3OCwgCi0gICAgMjI5LCAxNjEsIDQ3LCAyMzcsIDEwOSwgMTc4LCAyMjksIDE2MSwgMjM5LCA4NywgMTMsIDUsIDU3LCAxMywgNSwgMTAyLCAKLSAgICAyNCwgNTcsIDEzLCA1LCAxMDIsIDI0LCAyNDYsIDIwNiwgMTMsIDUsIDEwMiwgMjQsIDI0NiwgMjAxLCAyNDAsIDEzMSwgMTMsIAotICAgIDUsIDEwMiwgMjQsIDE1NCwgMTMsIDUsIDEwMiwgMjQsIDI0NiwgMjM0LCAxMywgNSwgMTAyLCAyNCwgMjQwLCAxNzEsIDI0MCwgCi0gICAgMTMwLCAxMywgNSwgMTAyLCAyNCwgMjQwLCAyMzAsIDEzLCA1LCAxMDIsIDI0LCAyNDcsIDIwMCwgMTMsIDUsIDI1MywgMTY1LCAKLSAgICAxMywgNSwgMjUzLCAxNjYsIDEzLCA1LCAyNTQsIDIwMiwgMjQsIDI0MCwgMjA0LCAxMywgNSwgMjU0LCAyMDIsIDI0LCAyNDcsIAotICAgIDMxLCAyNDAsIDEzMCwgMTMsIDUsIDI1NCwgMjAyLCAyNCwgMjQ3LCAxMiwgMTMsIDUsIDI1NCwgMjAyLCAyNCwgMjQ2LCAKLSAgICAyMDEsIDI0MCwgMTMxLCAxMywgNSwgMjU0LCAyMDIsIDI0LCAxNTQsIDEzLCA1LCAyNTQsIDIwMiwgMjQsIDI1MywgMzIsIAotICAgIDI0MCwgMTMwLCAxMywgNSwgMjU0LCAyMDIsIDI0LCAyNDEsIDE2MiwgMTMsIDUsIDI1NCwgMjAyLCAyNCwgMjM3LCAxNjAsIAotICAgIDEzLCA1LCAyNTQsIDIwMiwgMjQsIDIzOCwgNTMsIDEzLCA1LCAyNTQsIDIwMiwgMjQsIDk3LCA3OSwgOTcsIDc5LCA2NiwgCi0gICAgMTMsIDUsIDI1NCwgMjAyLCAyNDAsIDEzMCwgMTMsIDUsIDI0OCwgMjI3LCAxMywgNSwgMjUzLCAxMSwgMjQsIDIzNywgMTcyLCAKLSAgICAxMywgNSwgMjUzLCAxMSwgMjQsIDI0NiwgMjAxLCAyNDAsIDEzMSwgMTMsIDUsIDI1MywgMTEsIDI0LCAyNTQsIDIwNiwgNzksIAotICAgIDI1MiwgMjMyLCAxMywgNSwgMjUzLCAxMSwgMjQsIDI0MSwgNjgsIDEzLCA1LCAyNTMsIDExLCAyNCwgMjQwLCAxODcsIDEzLCAKLSAgICA1LCAyNTMsIDIwNiwgMTMsIDUsIDI1NCwgMjUsIDEzLCA1LCAyNTUsIDEsIDI0LCAyMzcsIDE4MSwgMTMsIDUsIDI1NSwgMSwgCi0gICAgMjQsIDI0MSwgNzEsIDc5LCAyNDAsIDIwOCwgMTMsIDUsIDI1MywgMTEyLCAxMywgNSwgMjU0LCAyMDksIDI0LCAyNTMsIAotICAgIDExMiwgMTMsIDUsIDI1NCwgMjA5LCAyNCwgMjQxLCAxMjAsIDEzLCA1LCAyNTQsIDIwOSwgMjQsIDI0MCwgMjA4LCAxMywgNSwgCi0gICAgMjU0LCAyMDksIDI0LCAxNTQsIDEzLCA1LCAyNTQsIDIwOSwgMjQsIDI0MCwgMjU0LCAxMywgNSwgMjU0LCAyMDksIDI0LCAKLSAgICAyNTMsIDcsIDEzLCA1LCAyNTQsIDIwOSwgMjQsIDI0NiwgMTg2LCAxMywgNSwgMjU0LCAyMDksIDI0LCAyNDYsIDI0OSwgMTMsIAotICAgIDUsIDI0MiwgNTIsIDEzLCA1LCAyMzgsIDkzLCAxMywgNSwgMjQxLCA5NCwgMTMsIDUsIDI0OCwgMjM0LCAyNCwgMjQ2LCAKLSAgICAxODYsIDEzLCA1LCAyNTMsIDUsIDEzLCA1LCAyNTQsIDIxNiwgMTA3LCAyNTMsIDUsIDEzLCA1LCAyNTQsIDIxNiwgMTUyLCAKLSAgICAyMzcsIDE2NiwgMTMsIDUsIDI1NCwgMjE2LCA3OSwgMjQ3LCA0MiwgMjMzLCAxMTksIDI1NCwgMjE2LCA3OSwgMjQxLCA1NSwgCi0gICAgMTMsIDUsIDI1NCwgMjE2LCA3OSwgMjQ3LCA0MiwgMjMzLCA5MSwgMTMsIDUsIDIzOCwgOTcsIDEzLCA1LCAyNDIsIDYwLCAKLSAgICAxMywgNSwgMjQyLCA2MiwgMTMsIDUsIDI0OCwgMjM3LCAyNCwgMjQ2LCAyMjAsIDEzLCA1LCAyMzgsIDEwMywgMTMsIDUsIAotICAgIDIzOCwgMTA4LCAxMywgNSwgMjQ2LCAxNzcsIDEzLCA1LCAyNTIsIDI1NCwgMjQ4LCAyMDgsIDI0MCwgMTMxLCAxMywgNSwgCi0gICAgMjUyLCAyNTQsIDI0OCwgNzcsIDI0MCwgMTMxLCAxMywgNSwgMjUyLCAyNTQsIDEwNywgMjUyLCAyNTQsIDI0NywgMTExLCAKLSAgICAxMDcsIDI0NywgMTExLCAyNDcsIDExMSwgMTA3LCAyNDcsIDExMSwgMjQ3LCA0NSwgMTMsIDUsIDI1MiwgMjU0LCAxMDcsIAotICAgIDI1MiwgMjU0LCAxMDcsIDI0NiwgMTc3LCAxMywgNSwgMjUyLCAyNTQsIDEwNywgMjUyLCAyNTQsIDEwNywgMjUyLCAyNTQsIAotICAgIDIzMywgNzcsIDI1MiwgMjU0LCAxMDcsIDI1MiwgMjU0LCAxMDcsIDI0NiwgMTc3LCAxMywgNSwgMjQwLCAyMDQsIDEzLCA1LCAKLSAgICAyMzUsIDEwOCwgMTMsIDUsIDI1MiwgMjExLCAxMywgNSwgMjQ2LCAyMDYsIDEzLCA1LCAyNDIsIDE2OSwgMTMsIDUsIDIzNiwgCi0gICAgNSwgMTMsIDUsIDI0NywgMTIwLCAxMywgNSwgMjU0LCAzMSwgMTA3LCAyNDcsIDEyMCwgMTMsIDUsIDIzNywgMTcyLCAxMywgCi0gICAgNSwgMTI1LCAxMywgNSwgMjM4LCAxMTAsIDEzLCA1LCAyNTMsIDMwLCAxMywgNSwgMjU0LCAyMzQsIDI0LCA1NywgMTMsIDUsIAotICAgIDI1NCwgMjM0LCAyNCwgMjQ2LCAxOTcsIDEzLCA1LCAyNTQsIDIzNCwgMjQsIDI1MywgMzIsIDI0MCwgMTMwLCAxMywgNSwgCi0gICAgMjUzLCA0OCwgMTMsIDUsIDI1NCwgMjEwLCAxMDcsIDI1NCwgMjEwLCAyNTMsIDE2NiwgMTMsIDUsIDI1NCwgMjEwLCAxMDcsIAotICAgIDI1NCwgMjEwLCAyNTMsIDEyMSwgMTMsIDUsIDI1NCwgMjEwLCAyMzMsIDc3LCAyNTMsIDQ4LCAxMywgNSwgMjM3LCAxOTYsIAotICAgIDEzLCA1LCAyNDIsIDIxOCwgMTA3LCAyMzcsIDE5NiwgMTMsIDUsIDI0NywgMTEsIDEzLCA1LCAyNDIsIDIyMywgMTMsIDUsIAotICAgIDI1MiwgMjAzLCAxMywgNSwgMjQ4LCAxNywgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMTAyLCA3OSwgMjQxLCA1LCAKLSAgICAxMywgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAyNDEsIDk0LCAxMywgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAyMzcsIAotICAgIDE3MiwgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjUzLCAzMCwgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgCi0gICAgMjUyLCAyMDUsIDEzLCA1LCAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIDI1NCwgMjQ4LCA3OSwgMjQxLCA1LCAxMywgNSwgMjUyLCAKLSAgICAyMzgsIDIzNywgNTYsIDI0LCAyNTMsIDM5LCAxMywgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAyNDAsIDI1MCwgMTMsIDUsIAotICAgIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjQ2LCAyMzMsIDEzLCA1LCAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIDE1NCwgMTMsIAotICAgIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjUzLCAxNDksIDEzLCA1LCAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIDI1NSwgCi0gICAgMzIsIDc5LCAyNTMsIDIyLCAxMywgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAyNDcsIDE2LCAxMywgNSwgMjUyLCAyMzgsIAotICAgIDIzNywgNTYsIDI0LCAyNTIsIDIwMCwgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjUzLCAyMiwgMTMsIDUsIDI1MiwgCi0gICAgMjM4LCAyMzcsIDU2LCAyNCwgMjU0LCAyNDAsIDc5LCAyMzgsIDIzLCAxMywgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAKLSAgICAyNDcsIDE4LCAxMywgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAyNTIsIDI0NywgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIAotICAgIDU2LCAyNCwgMjU0LCAxMjUsIDc5LCAyNDcsIDQ1LCAxMywgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAyNTMsIDI0LCAxMywgCi0gICAgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAyNDAsIDE4NywgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjU0LCAKLSAgICAyMzIsIDc5LCAyNDAsIDI1MCwgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjQ2LCAyNDksIDEzLCA1LCAyNDksIAotICAgIDE3NywgMTMsIDUsIDI0OCwgMTksIDEzLCA1LCAyMzgsIDE3MCwgMTMsIDUsIDIzOCwgMTcxLCAxMywgNSwgMjUzLCAxMiwgCi0gICAgMTMsIDUsIDI0OCwgMjcsIDEzLCA1LCAyNDksIDE5MywgMTMsIDUsIDI1MywgMjE1LCAyNCwgMjQ2LCAxODYsIDEzLCA1LCAKLSAgICAyNDEsIDEyMCwgMTMsIDUsIDI0OCwgMjgsIDEzLCA1LCAyNTQsIDQzLCAyMzcsIDE1OCwgOTcsIDI0NywgMzYsIDI0MCwgCi0gICAgMTU2LCAxMywgNSwgMjQwLCAxNTYsIDEzLCA1LCAyNTMsIDMxLCAxMywgNSwgMjU0LCAyNDcsIDEwNywgMjUzLCAzMSwgMTMsIAotICAgIDUsIDI1NCwgMjQ3LCAyNDAsIDEzMCwgMTMsIDUsIDI1NCwgMjQ3LCAyMzMsIDEzNCwgMTMsIDUsIDI0NywgMTMyLCAxMywgNSwgCi0gICAgMjU0LCA0NywgMjQsIDI0MCwgMjIyLCAxMywgNSwgMjQzLCA4MiwgMTMsIDUsIDI0NywgMTMzLCAxMywgNSwgMjM4LCAxOTQsIAotICAgIDEzLCA1LCAyNDksIDIwOSwgMTMsIDUsIDI0OCwgMzMsIDEzLCA1LCAyNDMsIDgzLCAxMywgNSwgMjQ3LCAzMSwgMjQwLCAKLSAgICAxMzAsIDEzLCA1LCAyNDcsIDMxLCAyNDcsIDM2LCAyNDAsIDEzMCwgMTMsIDUsIDI0MywgODQsIDEzLCA1LCAyNDMsIDg3LCAKLSAgICAxMywgNSwgNzIsIDEzLCA1LCAxNjEsIDI0LCAyNDcsIDQ1LCAxMywgNSwgMTYxLCAxMDcsIDE2MSwgMjUzLCAyMywgMTA3LCAKLSAgICAyNDYsIDE5NSwgMTMsIDUsIDI1MywgMjE4LCAxMywgNSwgMjU0LCAyMTksIDI0LCAxMDIsIDc5LCAyNTQsIDIwNCwgNzksIAotICAgIDI1MiwgMjAzLCAxMywgNSwgMjU0LCAyMTksIDI0LCAyNDYsIDE5NywgMTMsIDUsIDI1NCwgMjE5LCAyNCwgMjUyLCAyMzksIAotICAgIDEzLCA1LCAyNTQsIDIxOSwgMjQsIDI0NywgNiwgMTMsIDUsIDI1NCwgMjE5LCAyNCwgMjQ2LCAxODYsIDEzLCA1LCAyNTQsIAotICAgIDIxOSwgMjQsIDY2LCAxMywgNSwgMjQzLCA5MywgMTMsIDUsIDI0MywgOTQsIDEzLCA1LCAyNTMsIDU4LCAxMywgNSwgMjUyLCAKLSAgICAyMzIsIDEzLCA1LCAyNTQsIDE5OSwgMjQsIDI0MCwgMjQ5LCAxMywgNSwgMjU0LCAxOTksIDI0LCAyNDYsIDIwMSwgMjQwLCAKLSAgICAxMzEsIDEzLCA1LCAyNTQsIDE5OSwgMjQsIDI1MywgMTMsIDEzLCA1LCAyNTQsIDE5OSwgMjMzLCA3NywgMjUyLCAyMzIsIAotICAgIDEzLCA1LCAyNTQsIDE5OSwgMjMzLCAxMTksIDI1MiwgMjMyLCAxMywgNSwgMjU0LCAxOTksIDIzMywgOTEsIDEzLCA1LCAKLSAgICAyNDMsIDEwMCwgMTMsIDUsIDIzNywgMTgxLCAxMywgNSwgMjQwLCAyMjIsIDEzLCA1LCAyNDMsIDEwNCwgMTMsIDUsIDI0NiwgCi0gICAgMTkzLCAyNCwgNTcsIDEzLCA1LCAyNDYsIDE5MywgMjQsIDEwMiwgNzksIDI0NywgMiwgMTMsIDUsIDI0NiwgMTkzLCAyNCwgCi0gICAgMTAyLCA3OSwgMjUzLCAxODQsIDI0LCAyNDcsIDIsIDEzLCA1LCAyNDYsIDE5MywgMjQsIDI1MywgNSwgMTMsIDUsIDI0NiwgCi0gICAgMTkzLCAyNCwgMjQ2LCAyMDYsIDEzLCA1LCAyNDYsIDE5MywgMjQsIDI0NywgMzEsIDI0MCwgMTMwLCAxMywgNSwgMjQ2LCAKLSAgICAxOTMsIDI0LCAyNDcsIDMxLCAyNDcsIDM2LCAyNDAsIDEzMCwgMTMsIDUsIDI0NiwgMTkzLCAyNCwgMTU0LCAxMywgNSwgCi0gICAgMjQ2LCAxOTMsIDI0LCAyNTQsIDIwNCwgMjQwLCAxMzAsIDEzLCA1LCAyNDYsIDE5MywgMjQsIDI1MywgMzIsIDI0MCwgMTMwLCAKLSAgICAxMywgNSwgMjQ2LCAxOTMsIDI0LCAyMzUsIDc2LCAxMywgNSwgMjQ2LCAxOTMsIDI0LCAyMzcsIDE1OCwgMjMzLCA5MSwgMTMsIAotICAgIDUsIDI0NiwgMTkzLCAyNCwgMjQ3LCA4NCwgMTMsIDUsIDI0NiwgMTkzLCAyNCwgMjUyLCAyMDAsIDEzLCA1LCAyNDYsIDE5MywgCi0gICAgMjQsIDI1MywgMTg0LCAyNCwgMjQ3LCAyLCAxMywgNSwgMjQ2LCAxOTMsIDI0LCAyNTMsIDQyLCAxMywgNSwgMjQ2LCAxOTMsIAotICAgIDI0LCAyNTMsIDIyLCAxMywgNSwgMjQ2LCAxOTMsIDI0LCAyNTMsIDEwNywgMTMsIDUsIDI0NiwgMTkzLCAyNCwgMjUzLCA0NSwgCi0gICAgMTMsIDUsIDI1MiwgMjA1LCAxMywgNSwgMjU0LCAyNDgsIDI0MCwgMTMwLCAxMywgNSwgMjQ4LCA0MywgMTMsIDUsIDI1MiwgCi0gICAgMTk5LCAyNCwgMTAyLCA3OSwgMjU0LCAyMTgsIDc5LCAxNTQsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDEwMiwgNzksIDE1NCwgCi0gICAgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMTAyLCA3OSwgMjQ2LCAyMzQsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1MywgMTEsIAotICAgIDI1MiwgMTIsIDc5LCAyNDcsIDIwOCwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjUzLCA1LCAxMywgNSwgMjUyLCAxOTksIDI0LCAKLSAgICAyNDYsIDE3NywgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQ3LCAyNDMsIDc5LCAyNDcsIDEyLCAxMywgNSwgMjUyLCAxOTksIAotICAgIDI0LCAyNDYsIDIwNiwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjUyLCAyMTksIDc5LCAyMDgsIDEzLCA1LCAyNTIsIDE5OSwgCi0gICAgMjQsIDI0NywgMTEsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1MywgMjA5LCA3OSwgMjA4LCAxMywgNSwgMjUyLCAxOTksIDI0LCAKLSAgICAyNTIsIDIwMywgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjUzLCAxMiwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjUzLCAyMTUsIAotICAgIDI0LCAyNDYsIDE4NiwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQ3LCAxMzIsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1MywgCi0gICAgNTgsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1NCwgMjExLCA3OSwgMjUyLCAyMDAsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIAotICAgIDI1MiwgMjMyLCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTQsIDE5OSwgMjQsIDI0NiwgMjAxLCAyNDAsIDEzMSwgMTMsIDUsIAotICAgIDI1MiwgMTk5LCAyNCwgMjQ2LCAyMDEsIDI0MCwgMTMxLCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNDYsIDE5NywgMTMsIDUsIAotICAgIDI1MiwgMTk5LCAyNCwgMjUzLCAzOSwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQ3LCA3OCwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgCi0gICAgMjUzLCAxODAsIDc5LCA1NywgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQ4LCA1NCwgNzksIDI1MywgMjYsIDEzLCA1LCAyNTIsIAotICAgIDE5OSwgMjQsIDI1NCwgMjA0LCA3OSwgMjU0LCAyNDAsIDc5LCAyNDAsIDIyMiwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQ3LCAKLSAgICA4MCwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjU0LCA2NSwgNzksIDI1MiwgMjAwLCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTQsIAotICAgIDIwMSwgNzksIDI1MywgNDIsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0MSwgMTU4LCAxMywgNSwgMjUyLCAxOTksIDI0LCAKLSAgICAyNTMsIDMyLCAyNDAsIDEzMCwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjU0LCA3MSwgNzksIDI1NSwgMzAsIDc5LCAyNDYsIAotICAgIDE3NywgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQ3LCAxNiwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjM1LCA3NiwgMTMsIDUsIAotICAgIDI1MiwgMTk5LCAyNCwgMjQ3LCAxNTksIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1NCwgODEsIDc5LCAyNDcsIDIsIDEzLCA1LCAKLSAgICAyNTIsIDE5OSwgMjQsIDI1NCwgODYsIDc5LCAyNTMsIDUsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1MiwgMjAwLCAxMywgNSwgCi0gICAgMjUyLCAxOTksIDI0LCAyNTQsIDIwNiwgNzksIDI1MiwgMjMyLCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTIsIDIzOSwgMTMsIAotICAgIDUsIDI1MiwgMTk5LCAyNCwgMjQ2LCAxOTUsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1MywgMjMsIDEwNywgMjQ2LCAxOTUsIAotICAgIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDIxMywgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQ3LCA2LCAxMywgNSwgMjUyLCAxOTksIAotICAgIDI0LCAyNDcsIDEwMSwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQ2LCAxODYsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1MywgCi0gICAgNjQsIDc5LCAyNDcsIDExMiwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQxLCAxNSwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQ3LCAKLSAgICAyMSwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQwLCAxODcsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDY2LCAxMywgNSwgMjUyLCAKLSAgICAxOTksIDI0LCAyNTMsIDQ1LCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTQsIDIwOCwgNzksIDI1MywgMzEsIDEzLCA1LCAyNTIsIAotICAgIDE5OSwgMTA3LCAyNDgsIDQzLCAxMywgNSwgMjQxLCAxMzYsIDEzLCA1LCAyNTAsIDksIDIzMywgNzcsIDI0MSwgMTM2LCAxMywgCi0gICAgNSwgMjQ4LCA0NCwgMTMsIDUsIDI1MywgODksIDEwNywgMjUzLCA4OSwgMjUzLCA3NSwgMTA3LCAyNDYsIDE5NywgMTMsIDUsIAotICAgIDI0NywgMTIsIDEzLCA1LCAyNTMsIDE3OSwgMjUzLCA4OSwgMTA3LCAyNTMsIDg5LCAyNTMsIDc1LCAxMDcsIDI0NiwgMTk3LCAKLSAgICAxMywgNSwgMjM4LCAyMzAsIDEzLCA1LCAyNTAsIDEyLCAxMywgNSwgMjQ3LCAzMiwgMTMsIDUsIDI0MCwgMjQ5LCAxMywgNSwgCi0gICAgMjQ2LCAyMDEsIDI0MCwgMTMxLCAxMywgNSwgMjQ2LCAyMDEsIDEwNywgMjQwLCAyNDksIDEzLCA1LCAyNDYsIDIwMSwgMjMzLCAKLSAgICA3NywgMjQwLCAyNDksIDEzLCA1LCAyNDYsIDE5NywgMTMsIDUsIDI0MywgMTE1LCAxMywgNSwgMjM2LCA4OSwgMTMsIDUsIAotICAgIDIzNCwgMTExLCAxMywgNSwgMjM2LCA5MywgMjQsIDI0NiwgMjIwLCAxMywgNSwgMjUzLCAzOSwgMTMsIDUsIDI1NCwgMjI4LCAKLSAgICAyNCwgNzIsIDEzLCA1LCAyNTQsIDIyOCwgMjQsIDY2LCAxMywgNSwgMjU0LCAyMjgsIDIzMywgNzcsIDI1MywgMzksIDEzLCAKLSAgICA1LCAyNDcsIDc4LCAxMywgNSwgMjUzLCAxODAsIDEwNywgMjQ3LCA3OCwgMTMsIDUsIDI1MywgMTgwLCAyMzMsIDc3LCAyNDcsIAotICAgIDc4LCAxMywgNSwgMjM4LCAyNDYsIDEzLCA1LCAyNDAsIDI1MCwgMTMsIDUsIDI0OCwgNTQsIDI0MCwgMTMwLCAxMywgNSwgCi0gICAgMjQzLCAxNTAsIDEzLCA1LCAyNDcsIDMzLCAyNCwgMTAyLCA3OSwgMjQ2LCAyMzQsIDEzLCA1LCAyNDcsIDMzLCAyNCwgMjQ2LCAKLSAgICAyMDEsIDI0MCwgMTMxLCAxMywgNSwgMjQ3LCAzMywgMjQsIDI0NiwgMjM0LCAxMywgNSwgMjQ3LCAzMywgMjQsIDI1NCwgCi0gICAgMjQwLCA3OSwgMjQ2LCAyMzQsIDEzLCA1LCAyNDcsIDMzLCAyNCwgMjEzLCAxMywgNSwgMjM4LCAyNDksIDEzLCA1LCAyNDAsIAotICAgIDIwOCwgMTMsIDUsIDI0NiwgMjQzLCAyMzMsIDc3LCAyNDAsIDIwOCwgMTMsIDUsIDI0NiwgMjQzLCAyNCwgMjQ2LCAyMDYsIAotICAgIDEzLCA1LCAyNDYsIDI0MywgMjQsIDI0MCwgMTg3LCAxMywgNSwgMjQ2LCAyNDMsIDI0MCwgMTMxLCAxMywgNSwgMjUzLCA0MCwgCi0gICAgMTMsIDUsIDI1NSwgMjgsIDIzMywgNzcsIDI1MywgNDAsIDEzLCA1LCAyNTAsIDQzLCAxMywgNSwgMjUzLCAxMjYsIDI0LCAKLSAgICAyNDcsIDE2LCAxMywgNSwgMjUzLCAxMjYsIDI0LCAyNTMsIDIzNywgMjQsIDI1MywgMzIsIDI0MCwgMTMwLCAxMywgNSwgCi0gICAgMjUzLCAxMjYsIDI0LCAyNDYsIDE5NSwgMTMsIDUsIDI1MywgMTI2LCAyNCwgMjUzLCAxOTIsIDc5LCAyNDEsIDIwLCAxMywgCi0gICAgNSwgMjUzLCAxMjYsIDI0MCwgMTMwLCAxMywgNSwgMjQ2LCAyMzMsIDEzLCA1LCAyNTMsIDEyNywgMjQsIDEwMiwgNzksIAotICAgIDI0NiwgMjIwLCAxMywgNSwgMjUzLCAxMjcsIDI0LCAyNDYsIDIyMCwgMTMsIDUsIDI1MywgMTI3LCAxMDcsIDI1MywgMTI3LCAKLSAgICAyMzcsIDE4NSwgMTMsIDUsIDI1MCwgNDQsIDEzLCA1LCAyNTAsIDQ1LCAxMywgNSwgMjU0LCA2MiwgMjQsIDI0NiwgMTg2LCAKLSAgICAxMywgNSwgMjQ4LCA1NywgMTMsIDUsIDI0MSwgMTQ3LCAxMywgNSwgMjM4LCAyNTUsIDEzLCA1LCAyMzYsIDEwMCwgMTMsIDUsIAotICAgIDE1NCwgMTMsIDUsIDI1NCwgMjA0LCAyNDAsIDEzMSwgMTMsIDUsIDI1NCwgMjA0LCAyNDAsIDEzMCwgMTMsIDUsIDI0NywgCi0gICAgODAsIDEzLCA1LCAyNTMsIDQxLCAxMywgNSwgMjU0LCAyMDEsIDI0LCAyNDYsIDE3NywgMTMsIDUsIDI1NCwgMjAxLCAyNCwgCi0gICAgMjQwLCAyMDQsIDEzLCA1LCAyNTQsIDIwMSwgMjQsIDI0NiwgMjA2LCAxMywgNSwgMjU0LCAyMDEsIDI0LCAyNDAsIDE1NiwgCi0gICAgMTMsIDUsIDI1NCwgMjAxLCAyNCwgMjQ4LCA0NCwgMTMsIDUsIDI1NCwgMjAxLCAyNCwgMjQ3LCAxNjAsIDEzLCA1LCAyNTQsIAotICAgIDIwMSwgMjQsIDI0NiwgMTk1LCAxMywgNSwgMjU0LCAyMDEsIDI0LCAyNDYsIDE4NiwgMTMsIDUsIDI1NCwgMjAxLCAyNCwgCi0gICAgNjYsIDEzLCA1LCAyNTMsIDU5LCAxMywgNSwgMjQxLCAxNTgsIDEzLCA1LCAyNDcsIDM3LCAyNCwgMjUzLCA1LCAxMywgNSwgCi0gICAgMjQ3LCAzNywgMjQsIDI0NywgODAsIDEzLCA1LCAyNDcsIDM3LCAyNCwgMjM1LCA3NiwgMTMsIDUsIDI0NywgMzcsIDI0LCAKLSAgICAyNDEsIDQ3LCAxMywgNSwgMjQ3LCAzNywgMjQsIDI1MywgNDUsIDEzLCA1LCAyNDMsIDIzNSwgMTMsIDUsIDc0LCAxMywgNSwgCi0gICAgMjU1LCA1NSwgNTcsIDEzLCA1LCAyNTMsIDIyOSwgMTMsIDUsIDI0NCwgMiwgMTMsIDUsIDI0NywgODIsIDEwNywgMjQ3LCAKLSAgICA4MiwgMjQ3LCAxMSwgMTMsIDUsIDI0NywgODIsIDEwNywgMjQ3LCA4MiwgMjMzLCA5MSwgMTMsIDUsIDI1NCwgNjgsIDEzLCAKLSAgICA1LCAyNDYsIDIzNCwgMTMsIDUsIDI1MywgMzIsIDI0OCwgMjcsIDEzLCA1LCAyNTMsIDMyLCAyNTMsIDM3LCAxMywgNSwgCi0gICAgMjUzLCAzMiwgMTA3LCAyNTMsIDMyLCAyNDcsIDUyLCAxMDcsIDI0NywgNTIsIDI1NCwgMjA4LCAxMDcsIDI1MywgNDUsIDEzLCAKLSAgICA1LCAyNTMsIDMyLCAyNDAsIDEzMCwgMTMsIDUsIDI1NCwgNjksIDEzLCA1LCAyNTUsIDMxLCAyNCwgMjQ2LCAyMDEsIDI0MCwgCi0gICAgMTMxLCAxMywgNSwgMjUwLCAxMTcsIDEzLCA1LCAyNTMsIDc4LCAxMywgNSwgMjU0LCAyMjEsIDI0LCAyNDAsIDE4NywgMTMsIAotICAgIDUsIDI1NCwgMjIxLCAyMzMsIDc3LCAyNTMsIDc4LCAxMywgNSwgMjU0LCAyMjEsIDIzMywgMTE5LCAyNTMsIDc4LCAxMywgNSwgCi0gICAgMjU0LCAyMjEsIDIzMywgOTEsIDEzLCA1LCAyNDEsIDE2MiwgMTMsIDUsIDI1MywgNzksIDEzLCA1LCAyNTMsIDE0OSwgMTMsIAotICAgIDUsIDI0OCwgNjgsIDEzLCA1LCAxNzcsIDEzLCA1LCAxODgsIDI0LCA1NywgMTMsIDUsIDE4OCwgMjQsIDI1MywgMjA2LCAxMywgCi0gICAgNSwgMTg4LCAyNCwgMjU1LCAxOCwgNzksIDI0NywgODQsIDEzLCA1LCAxODgsIDI0LCAyNDAsIDIwNCwgMTMsIDUsIDE4OCwgCi0gICAgMjQsIDI0NiwgMjA2LCAxMywgNSwgMTg4LCAyNCwgMjM3LCAxNzIsIDEzLCA1LCAxODgsIDI0LCAxMjUsIDEzLCA1LCAxODgsIAotICAgIDI0LCAyNTMsIDMwLCAxMywgNSwgMTg4LCAyNCwgMjM3LCAxODEsIDEzLCA1LCAxODgsIDI0LCAyNDAsIDIyMiwgMTMsIDUsIAotICAgIDE4OCwgMjQsIDI1MiwgMjA1LCAxMywgNSwgMTg4LCAyNCwgMjQ3LCAxMiwgMTMsIDUsIDE4OCwgMjQsIDI0NiwgMjAxLCAKLSAgICAyNDAsIDEzMSwgMTMsIDUsIDE4OCwgMjQsIDI0NiwgMTk3LCAxMywgNSwgMTg4LCAyNCwgMjUzLCA3NSwgNzksIDI0NiwgCi0gICAgMjM2LCA3OSwgNTcsIDEzLCA1LCAxODgsIDI0LCAyNTMsIDM5LCAxMywgNSwgMTg4LCAyNCwgMjQwLCAyNTAsIDEzLCA1LCAKLSAgICAxODgsIDI0LCAyNDYsIDI0MywgNzksIDI0NywgMTAxLCAxMywgNSwgMTg4LCAyNCwgMjQ2LCAyNDMsIDIzMywgNzcsIDI0MCwgCi0gICAgMjA4LCAxMywgNSwgMTg4LCAyNCwgMjUzLCA0MCwgMTMsIDUsIDE4OCwgMjQsIDI0MSwgMTQ3LCAxMywgNSwgMTg4LCAyNCwgCi0gICAgMjQ2LCAyMzQsIDEzLCA1LCAxODgsIDI0LCAyNTMsIDc4LCAxMywgNSwgMTg4LCAyNCwgMjQ3LCAxNiwgMTMsIDUsIDE4OCwgCi0gICAgMjQsIDI1MywgNywgMTMsIDUsIDE4OCwgMjQsIDI0NywgMTU5LCAxMywgNSwgMTg4LCAyNCwgMjUzLCA0MiwgMTMsIDUsIAotICAgIDE4OCwgMjQsIDI1MywgMjIsIDEzLCA1LCAxODgsIDI0LCAyNTMsIDEzLCAxMywgNSwgMTg4LCAyNCwgMjU0LCAyMDYsIDc5LCAKLSAgICAyNTMsIDMxLCAxMywgNSwgMTg4LCAyNCwgMjU0LCAyMDYsIDc5LCAyNTMsIDM5LCAxMywgNSwgMTg4LCAyNCwgMjU0LCAyMDYsIAotICAgIDc5LCAyNTMsIDksIDEzLCA1LCAxODgsIDI0LCAyNTIsIDIzOSwgMTMsIDUsIDE4OCwgMjQsIDI1NSwgMTEsIDc5LCAyMzgsIAotICAgIDMwLCAxMywgNSwgMTg4LCAyNCwgMjUyLCAyNDcsIDEzLCA1LCAxODgsIDI0LCAyNDYsIDE5NSwgMTMsIDUsIDE4OCwgMjQsIAotICAgIDI1MiwgMjIzLCAxMywgNSwgMTg4LCAyNCwgMjUzLCAzLCAxMywgNSwgMTg4LCAyNCwgMjUyLCAyMDQsIDEzLCA1LCAxODgsIAotICAgIDI0LCAyNDcsIDEwMSwgMTMsIDUsIDE4OCwgMjQsIDI0NiwgMTY1LCAxMywgNSwgMTg4LCAyNCwgMjQ2LCAxODYsIDEzLCA1LCAKLSAgICAxODgsIDI0LCAyNDEsIDE1LCAxMywgNSwgMTg4LCAyNCwgMjQ2LCAyNDYsIDEzLCA1LCAxODgsIDI0LCAyNDgsIDE2MSwgMTMsIAotICAgIDUsIDE4OCwgMjQsIDIzOCwgNjgsIDEzLCA1LCAxODgsIDI0LCAyNDcsIDU2LCAxMywgNSwgMTg4LCAyNCwgNjYsIDEzLCA1LCAKLSAgICAxODgsIDI0LCAyNTMsIDEwNywgMTMsIDUsIDE4OCwgMjQsIDI1MywgNDUsIDEzLCA1LCAxODgsIDI0LCAyNDcsIDIyMCwgMjQsIAotICAgIDIxMywgMTMsIDUsIDE4OCwgMjQsIDI0NiwgMjQ5LCAxMywgNSwgMTg4LCAyNCwgMjUzLCA3MiwgMTMsIDUsIDI0OCwgNzUsIAotICAgIDEzLCA1LCAyNTQsIDc3LCAyMzMsIDc3LCAyNDgsIDc1LCAxMywgNSwgMjUwLCAxNTEsIDEzLCA1LCAyNDEsIDE2OCwgMTMsIAotICAgIDUsIDI0MCwgMjU0LCAxMywgNSwgMjQ0LCA0NSwgMTMsIDUsIDI0MSwgMTY5LCAxMywgNSwgMjUwLCAxNTMsIDEwNywgMjQxLCAKLSAgICAxNjksIDEzLCA1LCAyNDcsIDE2LCAxMywgNSwgMjUzLCAyMzcsIDI0LCAyNTMsIDMyLCAyNDAsIDEzMCwgMTMsIDUsIDI0NywgCi0gICAgMTU1LCAxMywgNSwgMjUzLCAyMzgsIDI0LCAyNDYsIDIwNiwgMTMsIDUsIDI1MywgMjM4LCAyMzMsIDc3LCAyNDcsIDE1NSwgCi0gICAgMTMsIDUsIDI0NCwgNDYsIDEzLCA1LCAyNDQsIDQ3LCAxMywgNSwgMjM1LCA3NiwgMTMsIDUsIDIzNywgMTU4LCAyMTUsIDI0LCAKLSAgICA5NywgMTA3LCAyMTUsIDI0LCA2NiwgMTMsIDUsIDIzNywgMTU4LCAxMDcsIDIzNywgMTU4LCAyMTUsIDI0LCA5NywgMTA3LCAKLSAgICAyMTUsIDI0LCA2NiwgMTMsIDUsIDIzOSwgNjYsIDEzLCA1LCAyNTMsIDcsIDEzLCA1LCAyNTQsIDI0OSwgMjQsIDI0NiwgCi0gICAgMjA2LCAxMywgNSwgMjU0LCAyNDksIDI0LCA2NiwgMTMsIDUsIDI1NCwgMjQ5LCAyNCwgMjUzLCA0NSwgMTMsIDUsIDI0NywgCi0gICAgMTU5LCAxMywgNSwgMjQ3LCAxNjAsIDEzLCA1LCAyMzksIDcxLCAxMywgNSwgMjQ0LCA2MSwgMTMsIDUsIDIzNSwgMTg0LCAKLSAgICAxMywgNSwgMjM3LCA1NiwgMTA3LCAyMzUsIDE4NCwgMTMsIDUsIDI1MywgMzQsIDEzLCA1LCAyNTQsIDIzOCwgMTA3LCAyNTQsIAotICAgIDIwMSwgMjQsIDI0NywgMjQzLCAyNTQsIDIzOCwgMTA3LCAyNTQsIDIwMSwgMjQsIDI0MCwgMjA0LCAxMywgNSwgMjQ3LCA4NCwgCi0gICAgMTMsIDUsIDI1MCwgMTg3LCAxMywgNSwgMjU0LCA4NywgMjM1LCAzMCwgMTUsIDEzLCA1LCAyNTAsIDE4OCwgMTMsIDUsIAotICAgIDI0OCwgODYsIDEzLCA1LCAyNTMsIDI0MSwgMjQwLCAxMzAsIDEzLCA1LCAyNTAsIDE4OSwgMTMsIDUsIDI0NiwgMjIwLCAxMywgCi0gICAgNSwgMjUzLCAyNDIsIDIzMywgMTE5LCAyNDYsIDIyMCwgMTMsIDUsIDIzNSwgMTI3LCAxMywgNSwgMjM2LCAxMjUsIDEzLCA1LCAKLSAgICAyNTIsIDIwMCwgMTMsIDUsIDIzNywgMTYwLCAxMywgNSwgMjE1LCAyNCwgNTcsIDEzLCA1LCAyMTUsIDI0LCAxMDIsIDc5LCAKLSAgICAyNTQsIDIxOCwgNzksIDE1NCwgMTMsIDUsIDIxNSwgMjQsIDEwMiwgNzksIDI0NiwgMTk3LCAxMywgNSwgMjE1LCAyNCwgCi0gICAgMTAyLCA3OSwgMjQ3LCAyLCAxMywgNSwgMjE1LCAyNCwgMjUzLCAxMTIsIDEzLCA1LCAyMTUsIDI0LCAyNTMsIDUsIDEzLCA1LCAKLSAgICAyMTUsIDI0LCAyNTIsIDI1NCwgMjQ4LCAyMDgsIDI0MCwgMTMxLCAxMywgNSwgMjE1LCAyNCwgMjQ2LCAyMDYsIDEzLCA1LCAKLSAgICAyMTUsIDI0LCAyNTMsIDMwLCAxMywgNSwgMjE1LCAyNCwgMjQ4LCAxOSwgMTMsIDUsIDIxNSwgMjQsIDI1MiwgMjMyLCAxMywgCi0gICAgNSwgMjE1LCAyNCwgMjUyLCAyMDUsIDEzLCA1LCAyMTUsIDI0LCAyNDYsIDE5NywgMTMsIDUsIDIxNSwgMjQsIDI0NiwgMjMzLCAKLSAgICAxMywgNSwgMjE1LCAyNCwgMjUzLCAxMjcsIDc5LCAyNDYsIDIzMywgMTMsIDUsIDIxNSwgMjQsIDE1NCwgMTMsIDUsIDIxNSwgCi0gICAgMjQsIDI0NywgODAsIDEzLCA1LCAyMTUsIDI0LCAyNTQsIDIwMSwgMjQsIDI0NiwgMTk1LCAxMywgNSwgMjE1LCAyNCwgMjUzLCAKLSAgICAzMiwgMjQwLCAxMzAsIDEzLCA1LCAyMTUsIDI0LCAyNTMsIDc4LCAxMywgNSwgMjE1LCAyNCwgMjU0LCAyMjEsIDc5LCAxNTQsIAotICAgIDEzLCA1LCAyMTUsIDI0LCAyNTQsIDIyMSwgNzksIDI1MywgMjIsIDEzLCA1LCAyMTUsIDI0LCAyNTMsIDcsIDEzLCA1LCAKLSAgICAyMTUsIDI0LCAyNDcsIDE2MCwgMTMsIDUsIDIxNSwgMjQsIDI0NywgODQsIDEzLCA1LCAyMTUsIDI0LCAyNDgsIDg2LCAxMywgCi0gICAgNSwgMjE1LCAyNCwgMjUzLCAyNDEsIDc5LCAyNTQsIDIwMSwgNzksIDU3LCAxMywgNSwgMjE1LCAyNCwgMjM3LCAxNjAsIDEzLCAKLSAgICA1LCAyMTUsIDI0LCAyNDEsIDQ3LCAxMywgNSwgMjE1LCAyNCwgMjUzLCAyMiwgMTMsIDUsIDIxNSwgMjQsIDI0NywgMTcwLCAKLSAgICAxMywgNSwgMjE1LCAyNCwgMjUzLCAxMywgMTMsIDUsIDIxNSwgMjQsIDI1NCwgMjA2LCA3OSwgMjUyLCAyMzIsIDEzLCA1LCAKLSAgICAyMTUsIDI0LCAyNDAsIDIzMCwgMTMsIDUsIDIxNSwgMjQsIDI1MiwgMjQ3LCAxMywgNSwgMjE1LCAyNCwgMjUzLCA2NCwgNzksIAotICAgIDI0NywgMjEsIDEzLCA1LCAyMTUsIDI0LCAyNDEsIDcxLCA3OSwgMjQ2LCAyNDMsIDc5LCAyMzcsIDE4MSwgMTMsIDUsIDIxNSwgCi0gICAgMjQsIDI0MSwgNzEsIDc5LCAyNDYsIDI0MywgMjQwLCAxMzEsIDEzLCA1LCAyMTUsIDI0LCAyNDAsIDIzNiwgMTMsIDUsIAotICAgIDIxNSwgMjQsIDI1MSwgMjIxLCA3OSwgMjQwLCAyMzYsIDEzLCA1LCAyMTUsIDI0LCAyNDcsIDIxLCAxMywgNSwgMjE1LCAyNCwgCi0gICAgMjQ3LCAxMDUsIDEzLCA1LCAyMTUsIDI0LCAyNDAsIDE4NywgMTMsIDUsIDIxNSwgMjQsIDI1NCwgMjEyLCA3OSwgMTAyLCAKLSAgICA3OSwgMjU0LCAyNTMsIDc5LCAyNTIsIDIwMSwgMTMsIDUsIDIxNSwgMjQsIDY2LCAxMywgNSwgMjE1LCAyNCwgOTcsIDc5LCAKLSAgICA1NywgMTMsIDUsIDIxNSwgMjQsIDk3LCA3OSwgOTcsIDc5LCA2NiwgMTMsIDUsIDIxNSwgMjQsIDI1NCwgMjMyLCA3OSwgCi0gICAgMjQ2LCAxNzcsIDEzLCA1LCAyMTUsIDI0LCAyNTMsIDQ1LCAxMywgNSwgMjE1LCAyNCwgMjQ2LCAyNDksIDEzLCA1LCAyMTUsIAotICAgIDIzMywgOTEsIDEzLCA1LCAyMzgsIDE3LCAxMywgNSwgMjQwLCAxNzEsIDI0LCAyNDYsIDE4NiwgMTMsIDUsIDI0MCwgMTcxLCAKLSAgICAyNCwgMjUzLCA2NCwgNzksIDI0NywgMjEsIDEzLCA1LCAyNDAsIDE3MSwgMjQwLCAxMzAsIDEzLCA1LCAyNDAsIDE3MSwgCi0gICAgMjQ3LCAzNiwgMTA3LCAyNDAsIDE3MSwgMjQ3LCAzNiwgMjQ2LCAxODYsIDEzLCA1LCAyMzYsIDEyOCwgMTMsIDUsIDI0NywgCi0gICAgMiwgMTMsIDUsIDI1MywgMTg0LCAyNCwgMjQ3LCAyLCAxMywgNSwgMjQ4LCA4OSwgMTMsIDUsIDIxNiwgMjQsIDI0NiwgMjIwLCAKLSAgICAxMywgNSwgMjE2LCAyNCwgMjUzLCAyNDIsIDc5LCAyNTMsIDMsIDEzLCA1LCAyNTMsIDQyLCAxMywgNSwgMjUwLCAyMjEsIAotICAgIDEzLCA1LCAyMzYsIDEzNiwgMTMsIDUsIDI0MSwgNDcsIDEzLCA1LCAyNTMsIDIyLCAxMywgNSwgMjU0LCAyNDAsIDI0LCAKLSAgICAyNDYsIDIwNiwgMTMsIDUsIDI0NywgMTY5LCAxMywgNSwgMjUyLCAyMzYsIDI0LCAyNTMsIDExMiwgMTMsIDUsIDI1MiwgCi0gICAgMjM2LCAyNCwgMjQ2LCAyMDYsIDEzLCA1LCAyNTIsIDIzNiwgMjQsIDI0MCwgMjIyLCAxMywgNSwgMjUyLCAyMzYsIDI0LCAKLSAgICAyNDksIDIzMywgMjQwLCAxMzEsIDEzLCA1LCAyNTIsIDIzNiwgMjQsIDI0NiwgMjAxLCAyNDAsIDEzMSwgMTMsIDUsIDI1MiwgCi0gICAgMjM2LCAyNCwgMjU0LCAyMDEsIDI0LCAyNDYsIDIwNiwgMTMsIDUsIDI1MiwgMjM2LCAyNCwgMjUzLCA3OCwgMTMsIDUsIAotICAgIDI1MiwgMjM2LCAyNCwgMjQxLCAxNjgsIDEzLCA1LCAyNTIsIDIzNiwgMjQsIDI0MCwgMjU0LCAxMywgNSwgMjUyLCAyMzYsIAotICAgIDI0LCAyNTAsIDE1MiwgNzksIDI0NiwgMTc3LCAxMywgNSwgMjUyLCAyMzYsIDI0LCAyNTMsIDcsIDEzLCA1LCAyNTIsIDIzNiwgCi0gICAgMjQsIDI1NCwgMjI5LCA3OSwgMjQ2LCAxNzcsIDEzLCA1LCAyNTIsIDIzNiwgMjQsIDIzNywgMTYwLCAxMywgNSwgMjUyLCAKLSAgICAyMzYsIDI0LCAyNTQsIDIwNiwgNzksIDI1MiwgMjMyLCAxMywgNSwgMjUyLCAyMzYsIDI0LCAyNTIsIDI0NywgMTMsIDUsIAotICAgIDI1MiwgMjM2LCAyNCwgMjUyLCAyMjcsIDEzLCA1LCAyNTIsIDIzNiwgMjQsIDI1NSwgMTYsIDc5LCAyNDYsIDE3NywgMTMsIAotICAgIDUsIDI1MiwgMjM2LCAyNCwgMjUxLCAyMjQsIDc5LCAyNTMsIDQ4LCAxMywgNSwgMjUyLCAyMzYsIDI0LCAyNDEsIDIwLCAxMywgCi0gICAgNSwgMjUyLCAyMzYsIDI0MCwgMTMxLCAxMywgNSwgMjUyLCAyMzYsIDIzMywgNzcsIDI0NywgMTY5LCAxMywgNSwgMjUyLCAKLSAgICAyMzYsIDIzMywgMTE5LCAyNDcsIDE2OSwgMTMsIDUsIDI1MiwgMjM2LCAyMzMsIDkxLCAxMywgNSwgMjUyLCAyMzYsIDIzMywgCi0gICAgMTM0LCAxMywgNSwgMjUwLCAyMzQsIDEzLCA1LCAyMzcsIDE4NSwgMTMsIDUsIDI0MSwgNDksIDEwNywgMjM3LCAxODUsIDEzLCAKLSAgICA1LCAyNDEsIDQ5LCAyMzMsIDExOSwgMjM3LCAxODUsIDEzLCA1LCAyNDEsIDQ5LCAyMzMsIDEzNCwgMTMsIDUsIDI1MCwgCi0gICAgMjM1LCAxMywgNSwgMjQ3LCAxNzAsIDEzLCA1LCAyNDcsIDE4LCAxMywgNSwgMjUzLCAxODUsIDEwNywgMjQ3LCAxOCwgMTMsIAotICAgIDUsIDI1MywgMTg1LCAxMDcsIDI1MywgMTg1LCAyNTMsIDc1LCAxMDcsIDI0NiwgMTk3LCAxMywgNSwgMTk4LCAxMywgNSwgCi0gICAgMjU1LCAxMCwgMjQsIDI0MCwgMTg3LCAxMywgNSwgMjU1LCAxMCwgMjQwLCAxMzAsIDEzLCA1LCAyNTAsIDI0NSwgMTMsIDUsIAotICAgIDI1MCwgMjQ2LCAxMywgNSwgMjUwLCAyNDgsIDEzLCA1LCAyNDEsIDUsIDEzLCA1LCAyMzgsIDIzLCAxMywgNSwgMjUzLCAxMywgCi0gICAgMTMsIDUsIDI1MSwgNSwgMTMsIDUsIDI1MiwgMjM5LCAxMywgNSwgMjQ3LCAxNzQsIDEzLCA1LCAyNTIsIDIyOSwgMTMsIDUsIAotICAgIDI1NCwgMjA3LCAxMDcsIDI1MiwgMjI5LCAxMywgNSwgMjQ4LCAxMDMsIDEzLCA1LCAyNTQsIDEwNSwgMjQwLCAxMzAsIDEzLCAKLSAgICA1LCAyMzYsIDE2MCwgMTMsIDUsIDIzNiwgMTYyLCAxMywgNSwgMjQwLCAyMzAsIDEzLCA1LCAyNDcsIDUsIDI0LCA1NywgMTMsIAotICAgIDUsIDI0NywgNSwgMjQsIDI0NiwgMjIwLCAxMywgNSwgMjQ3LCA1LCAyNCwgMjUyLCAyMjYsIDEzLCA1LCAyNDcsIDUsIDEwNywgCi0gICAgMjQwLCAyMzAsIDEzLCA1LCAyNDcsIDUsIDEwNywgMjQ3LCA1LCAyNCwgMTAyLCA3OSwgMjUyLCAyMDEsIDEzLCA1LCAyNDcsIAotICAgIDUsIDIzMywgNzcsIDI0MCwgMjMwLCAxMywgNSwgMjM5LCAxMjIsIDEzLCA1LCAyNDEsIDYsIDI0LCA1NywgMTMsIDUsIDI0MSwgCi0gICAgNiwgMjQsIDEwMiwgNzksIDI1MywgMTIsIDEzLCA1LCAyNDEsIDYsIDI0LCAyNTMsIDEyLCAxMywgNSwgMjQxLCA2LCAyNDAsIAotICAgIDEzMCwgMTMsIDUsIDI1MiwgMjAxLCAxMywgNSwgMjUxLCAzNiwgMTMsIDUsIDI0MSwgNTUsIDEzLCA1LCAyNDcsIDQyLCAKLSAgICAyMzIsIDIwOSwgMTMsIDUsIDI0NywgNDIsIDI0LCAyNTQsIDcsIDI0MCwgMTMxLCAxMywgNSwgMjQ3LCA0MiwgMjMzLCAxMTksIAotICAgIDI0MSwgNTUsIDEzLCA1LCAyMzksIDEyNCwgMTMsIDUsIDI1NCwgMTEwLCAyMzMsIDIyMiwgMTMsIDUsIDI1MSwgMzksIDEzLCAKLSAgICA1LCAyNDQsIDE2NCwgMTMsIDUsIDI1MiwgMjQ3LCAxMywgNSwgMjU0LCAyNTEsIDI0LCA1NywgMTMsIDUsIDI1NCwgMjUxLCAKLSAgICAyNCwgMjUzLCA0NSwgMTMsIDUsIDI1NCwgMjUxLCAyMzMsIDEzNCwgMTMsIDUsIDI1MiwgMjQ4LCAxMywgNSwgMjU0LCAyMzAsIAotICAgIDI0LCA3MiwgMTMsIDUsIDI1MSwgNTgsIDEzLCA1LCAyNTEsIDYxLCAxMywgNSwgMjUzLCAyNDksIDI0LCAyNDYsIDIwMSwgCi0gICAgMjQwLCAxMzEsIDEzLCA1LCAyNTMsIDI0OSwgMjQsIDI1MywgNzUsIDc5LCAyNDYsIDIwMSwgMjQwLCAxMzEsIDEzLCA1LCAKLSAgICAyMzYsIDE2NiwgMTMsIDUsIDIzNywgODcsIDI0LCAyNTMsIDUsIDEzLCA1LCAyMzcsIDg3LCAyNCwgMjQ2LCAxNzcsIDEzLCAKLSAgICA1LCAyMzcsIDg3LCAyNCwgMjUyLCAyNTQsIDc5LCAyNDYsIDE3NywgMTMsIDUsIDIzNywgODcsIDI0LCAyNDYsIDIzMywgMTMsIAotICAgIDUsIDIzNywgODcsIDI0LCAyNTQsIDIwNiwgNzksIDI0NiwgMjAxLCAyNDAsIDEzMSwgMTMsIDUsIDIzNywgODcsIDI0LCAKLSAgICAyNTIsIDI0NywgMTMsIDUsIDIzNywgODcsIDI0LCAyNDYsIDE5NSwgMTMsIDUsIDIzNywgODcsIDI0LCAyNDYsIDE4NiwgMTMsIAotICAgIDUsIDIzNywgODcsIDI0LCAyNTMsIDY0LCA3OSwgMTAyLCAyNTMsIDUsIDEzLCA1LCAyMzcsIDg3LCAyNCwgMjUzLCA2NCwgCi0gICAgNzksIDI0NiwgMTc3LCAxMywgNSwgMjM3LCA4NywgMjQsIDI1MywgNjQsIDc5LCAyNTIsIDI1NCwgNzksIDI0NiwgMTc3LCAKLSAgICAxMywgNSwgMjM3LCA4NywgMjQsIDI1NCwgMjMyLCA3OSwgMjQ2LCAxNzcsIDEzLCA1LCAyMzcsIDg3LCAyNCwgMjQ2LCAyNDksIAotICAgIDEzLCA1LCAyMzksIDE0NSwgMTMsIDUsIDI1MiwgMjI3LCAxMywgNSwgMjQ1LCAxMiwgMTMsIDUsIDI0NiwgMTk1LCAxMywgNSwgCi0gICAgMjUzLCAyMywgMjQwLCAxNzEsIDI0LCAyNDYsIDE5NywgMTMsIDUsIDI1MywgMjMsIDI0MCwgMTcxLCAyNCwgMjQxLCA1LCAKLSAgICAxMywgNSwgMjUzLCAyMywgMjQwLCAxNzEsIDI0LCAyNDcsIDYsIDEzLCA1LCAyNTMsIDIzLCAyNDAsIDE3MSwgMjQsIDI1MywgCi0gICAgMTkyLCAxMDcsIDI1MywgMjMsIDI0MCwgMTcxLCAyNCwgMjQ3LCA2LCAxMywgNSwgMjUzLCAyMywgMjQwLCAxNzEsIDI0LCAKLSAgICAyNDYsIDI0OSwgMTMsIDUsIDI1MywgMjMsIDI0MCwgMTMxLCAxMywgNSwgMjUzLCAyMywgMTA3LCAyNDYsIDE5NSwgMTMsIDUsIAotICAgIDI1MywgMjMsIDIzMywgNzcsIDI0NiwgMTk1LCAxMywgNSwgMjUzLCAyMywgMjMzLCA3NywgMjUzLCAyMywgMjQwLCAxNzEsIAotICAgIDEwNywgMjM4LCAxNywgMTMsIDUsIDIzOCwgMzAsIDEzLCA1LCAyNDAsIDE3NywgMjUzLCAxMSwgMjQsIDIzNSwgMTA4LCAxMywgCi0gICAgNSwgMjQwLCAxNzcsIDI1MywgMTEsIDI0LCAyNTMsIDMwLCAxMywgNSwgMjQwLCAxNzcsIDI1MywgMTEsIDI0LCAyNDcsIAotICAgIDEzMywgMTMsIDUsIDI0MCwgMTc3LCAyNTMsIDExLCAyNCwgMjQ2LCAyMzMsIDEzLCA1LCAyNDAsIDE3NywgMjUzLCAxMSwgCi0gICAgMjQsIDI1MywgMzIsIDI0MCwgMTMwLCAxMywgNSwgMjQwLCAxNzcsIDI1MywgMTEsIDI0LCAyNDAsIDI1NCwgMTMsIDUsIAotICAgIDI0MCwgMTc3LCAyNTMsIDExLCAyNCwgMjUyLCAyMDAsIDEzLCA1LCAyNDAsIDE3NywgMjUzLCAxMSwgMjQsIDI1MiwgMjQ3LCAKLSAgICAxMywgNSwgMjQwLCAxNzcsIDI1MywgMTEsIDI0LCAyMzgsIDU5LCAxMywgNSwgMjQwLCAxNzcsIDI1MywgMTEsIDI0LCAyNTMsIAotICAgIDEwNywgMTMsIDUsIDI0MCwgMTc3LCAyMzcsIDU2LCAyNCwgMjUzLCAzMCwgMTMsIDUsIDI0MCwgMTc3LCAyMzcsIDU2LCAyNCwgCi0gICAgMjU0LCAyMzQsIDY2LCAxMywgNSwgMjEzLCAxMywgNSwgMjUxLCAxMDEsIDEzLCA1LCAyNTEsIDEwMywgMTMsIDUsIDI0NywgCi0gICAgNDUsIDEzLCA1LCAyMzksIDE5NCwgMTMsIDUsIDI1MiwgMjIzLCAxMywgNSwgMjU0LCAyMDAsIDI0LCA1NywgMTMsIDUsIAotICAgIDI1NCwgMjAwLCAyNCwgMjUzLCAxNjYsIDEzLCA1LCAyNTQsIDIwMCwgMjQsIDI1MywgMzAsIDEzLCA1LCAyNTQsIDIwMCwgCi0gICAgMjQsIDI1MywgNDgsIDEzLCA1LCAyNTQsIDIwMCwgMjQsIDcyLCAxMywgNSwgMjU0LCAyMDAsIDI0LCA3NCwgMTMsIDUsIAotICAgIDI1NCwgMjAwLCAyNCwgMjUzLCAyMjksIDEzLCA1LCAyNTQsIDIwMCwgMjQsIDY2LCAxMywgNSwgMjU0LCAyMDAsIDI0LCAKLSAgICAyNTMsIDEwNywgMTMsIDUsIDI1NCwgMjAwLCAyMzMsIDc3LCAyNTIsIDIyMywgMTMsIDUsIDIzOCwgMzQsIDEzLCA1LCAyNDEsIAotICAgIDEwLCAyNCwgMjQ3LCAxNTUsIDEzLCA1LCAyNDEsIDEwLCAyNCwgMjUzLCA0NSwgMTMsIDUsIDI0MSwgMTAsIDI0LCAyNTIsIAotICAgIDIyNiwgMTMsIDUsIDI0MSwgMTAsIDIzMywgMTE5LCAyMzgsIDM0LCAxMywgNSwgMjA4LCAxMywgNSwgMjUxLCAxNjgsIDEzLCAKLSAgICA1LCAyNTMsIDM3LCAxMywgNSwgMjUzLCAzLCAxMywgNSwgMjUyLCAyMDQsIDEzLCA1LCAyNTIsIDI1MywgMjMzLCAyMjIsIAotICAgIDEzLCA1LCAyNDcsIDIwMCwgMTMsIDUsIDI1MiwgMjUzLCAyNCwgNTcsIDEzLCA1LCAyNTIsIDI1MywgMjQsIDI1MywgMzEsIAotICAgIDEzLCA1LCAyNTIsIDI1MywgMjQsIDI0NywgMTMyLCAxMywgNSwgMjUyLCAyNTMsIDI0LCAxNTQsIDEzLCA1LCAyNTIsIDI1MywgCi0gICAgMjQsIDI0NywgMTYsIDEzLCA1LCAyNTIsIDI1MywgMjQsIDI0NiwgMjIwLCAxMywgNSwgMjUyLCAyNTMsIDI0LCAyNDcsIDE4LCAKLSAgICAxMywgNSwgMjUyLCAyNTMsIDI0LCAyNTIsIDIzOSwgMTMsIDUsIDI1MiwgMjUzLCAyNCwgMjQ2LCAxOTUsIDEzLCA1LCAyNTIsIAotICAgIDI1MywgMjQsIDI0NywgNiwgMTMsIDUsIDI1MiwgMjUzLCAyNCwgMjQxLCAxNSwgMTMsIDUsIDI1MiwgMjUzLCAyNCwgMjQ3LCAKLSAgICAyMDgsIDEzLCA1LCAyNTIsIDI1MywgMjQsIDI1MywgMTA3LCAxMywgNSwgMjUyLCAyNTMsIDI0LCAyNTQsIDE0LCAxMywgNSwgCi0gICAgMjUyLCAyNTMsIDI0LCAyNTMsIDE5OSwgMTMsIDUsIDI1MiwgMjUzLCAyNCwgMjUzLCAxNjEsIDEzLCA1LCAyNTIsIDI1MywgCi0gICAgMjQsIDI0NiwgMjQ5LCAxMywgNSwgMjUyLCAyNTMsIDEwNywgMjQ3LCAyMDAsIDEzLCA1LCAyNTIsIDI1MywgMjQwLCAxMzAsIAotICAgIDEzLCA1LCAyNDcsIDYsIDEzLCA1LCAyNTMsIDE5MiwgMjE1LCAyNCwgMjQwLCAyMDQsIDEzLCA1LCAyMzYsIDIwNiwgMTMsIAotICAgIDUsIDI0NywgMTAxLCAxMywgNSwgMjQ2LCAxNjUsIDEzLCA1LCAyNDEsIDY4LCAxMywgNSwgMjQ2LCAyMzYsIDI0LCA1NywgCi0gICAgMTMsIDUsIDI0NiwgMjM2LCAyNCwgMjQ2LCAyMDYsIDEzLCA1LCAyNDYsIDIzNiwgMjQsIDI0MCwgMjA4LCAxMywgNSwgMjQ2LCAKLSAgICAyMzYsIDI0LCAyNTIsIDI0NywgMTMsIDUsIDI0NiwgMjM2LCAyNCwgMjQwLCAyMzYsIDEzLCA1LCAyNDYsIDIzNiwgMjQsIAotICAgIDI0NywgMTEyLCAxMywgNSwgMjQ2LCAyMzYsIDI0LCA2NiwgMTMsIDUsIDI0NiwgMjM2LCAyNCwgOTcsIDc5LCA1NywgMTMsIAotICAgIDUsIDI0NSwgMTU3LCAxMywgNSwgMjM5LCAyNDMsIDEzLCA1LCAyMzcsIDExNiwgMTMsIDUsIDI0NiwgMTg2LCAxMywgNSwgCi0gICAgMjUzLCA2NCwgMjUzLCA1OSwgMTMsIDUsIDI1MywgNjQsIDEwNywgMjUzLCA2NCwgMjUzLCA4OSwgMTA3LCAyNTMsIDg5LCAKLSAgICAyNTMsIDc1LCAxMDcsIDI0NiwgMTk3LCAxMywgNSwgMjUzLCA2NCwgMTA3LCAyNTMsIDY0LCAyNTMsIDEzNCwgMTA3LCAyNTMsIAotICAgIDEzNCwgMjUzLCA3NSwgMTA3LCAyNDYsIDE5NywgMTMsIDUsIDIzOSwgMjQ1LCAxMywgNSwgMjQ1LCAxNjEsIDEzLCA1LCAKLSAgICAyMzgsIDUzLCAxMywgNSwgMjM2LCAyMjMsIDEzLCA1LCAyMzMsIDI1LCAxMywgNSwgMjQxLCAxNSwgMTMsIDUsIDI0OCwgCi0gICAgMTU4LCAyNCwgNTcsIDEzLCA1LCAyNDgsIDE1OCwgMjQsIDI1MywgNzgsIDEzLCA1LCAyNDUsIDE2NiwgMTMsIDUsIDI0NiwgCi0gICAgMjIyLCAyNCwgNTcsIDEzLCA1LCAyNDYsIDIyMiwgMjQsIDI0NywgMTIwLCAxMywgNSwgMjQ2LCAyMjIsIDI0LCAyMzcsIAotICAgIDE5NiwgMTMsIDUsIDI0NiwgMjIyLCAyNCwgMjQ4LCAyOCwgMTMsIDUsIDI0NiwgMjIyLCAyNCwgMjQ2LCAxOTcsIDEzLCA1LCAKLSAgICAyNDYsIDIyMiwgMjQsIDI0NiwgMjM0LCAxMywgNSwgMjQ2LCAyMjIsIDI0LCAyNTMsIDMyLCAyNDAsIDEzMCwgMTMsIDUsIAotICAgIDI0NiwgMjIyLCAyNCwgMjM1LCAxMjcsIDEzLCA1LCAyNDYsIDIyMiwgMjQsIDI0NywgMTcwLCAxMywgNSwgMjQ2LCAyMjIsIAotICAgIDI0LCAyNDgsIDEwMywgMTMsIDUsIDI0NiwgMjIyLCAyNCwgMjQ3LCA2LCAxMywgNSwgMjM2LCAyMjYsIDEzLCA1LCAyNDUsIAotICAgIDE2OSwgMTMsIDUsIDI0NywgNTIsIDI0MCwgMTMxLCAxMywgNSwgMjQ3LCA1MiwgMTA3LCAyNDcsIDUyLCAyNTMsIDIwOSwgCi0gICAgMTA3LCAyNDcsIDExLCAxMywgNSwgMjM5LCAyNDksIDEzLCA1LCAyNDYsIDI0NiwgMTMsIDUsIDI1NCwgNywgMTA3LCAyMzMsIAotICAgIDcwLCAyNDYsIDI0NiwgMTMsIDUsIDI0MCwgMjM2LCAxMywgNSwgMjM2LCAyMjgsIDEzLCA1LCAyNTMsIDI0LCAxMywgNSwgCi0gICAgMjU1LCAxNiwgMjQwLCAxMzAsIDEzLCA1LCAyNDgsIDE2MSwgMTMsIDUsIDI0MSwgMjQ1LCAxMywgNSwgMjQ4LCAxNjIsIAotICAgIDEwNywgMjQ4LCAxNjIsIDI0MCwgMjM2LCAxMywgNSwgMjQ1LCAxODUsIDEzLCA1LCAyMzgsIDU5LCAxMywgNSwgMjUzLCAyNiwgCi0gICAgMTMsIDUsIDI1NCwgMjUzLCAxMDcsIDI1MywgMjYsIDEzLCA1LCAyNTEsIDI0MCwgMTMsIDUsIDI0NSwgMjIyLCAxMywgNSwgCi0gICAgMjM4LCA2OCwgMTMsIDUsIDI0NywgMjEsIDEzLCA1LCAyMzYsIDI0NywgMTMsIDUsIDI0NywgMjA1LCAxMywgNSwgMjQ1LCAKLSAgICAyMjYsIDEzLCA1LCAyNTIsIDIwMiwgMTMsIDUsIDI1NCwgMjE0LCAyMzEsIDE5OCwgMTMsIDUsIDI1NCwgMjE0LCAyNCwgCi0gICAgMjUzLCA0MSwgMTMsIDUsIDI1NCwgMjE0LCAyNCwgMjUyLCAyMzksIDEzLCA1LCAyNTQsIDIxNCwgMjQwLCAxMzAsIDEzLCA1LCAKLSAgICAyNDcsIDIwOCwgMTMsIDUsIDI1MywgMTM0LCAxMDcsIDI1MywgMTM0LCAyNTQsIDIzMCwgMTA3LCAyNTQsIDIzMCwgMjQ5LCAKLSAgICAxOTUsIDEwNywgMjQwLCAxNTYsIDEzLCA1LCAyNTMsIDEzNCwgMjMzLCA5MSwgMTMsIDUsIDI0NywgMTA1LCAxMywgNSwgCi0gICAgMTA4LCAyNCwgMjUzLCAzMCwgMTMsIDUsIDEwOCwgMjQsIDI0NiwgMjMzLCAxMywgNSwgMTA4LCAyNCwgMjQ2LCAxODYsIDEzLCAKLSAgICA1LCAxMDgsIDI0LCAyNDYsIDI0NiwgMTMsIDUsIDEwOCwgMjQsIDI0MSwgMjAsIDEzLCA1LCAxMDgsIDI0LCAyNTMsIDQ1LCAKLSAgICAxMywgNSwgMjQwLCAxODcsIDEzLCA1LCAyNDcsIDU2LCAxMywgNSwgMjUzLCA5LCAxMywgNSwgMjU0LCAyMTIsIDI0MCwgCi0gICAgMTMwLCAxMywgNSwgMjUzLCA0NCwgMTMsIDUsIDI1NSwgNDksIDI0MCwgMTMxLCAxMywgNSwgMjUyLCAyMSwgMTMsIDUsIAotICAgIDI0OCwgMTcyLCAxMywgNSwgMjUzLCAxMzYsIDI0LCAyNDAsIDE4NywgMTMsIDUsIDI1MywgMTM2LCAxMDcsIDI0OCwgMTcyLCAKLSAgICAxMywgNSwgMjUzLCAxMzYsIDEwNywgMjUzLCAxMzYsIDI1MywgODksIDEwNywgMjUzLCA4OSwgMjUzLCA3NSwgMTA3LCAyNDYsIAotICAgIDE5NywgMTMsIDUsIDI1MywgMTgsIDEzLCA1LCAyNDEsIDIwLCAxMywgNSwgMjQ4LCAxODMsIDEzLCA1LCAyNDgsIDE4NCwgCi0gICAgMTMsIDUsIDI0NywgMTEyLCAxMywgNSwgMjU0LCAxMiwgMTA3LCAyNTQsIDEyLCAyNTQsIDI1NSwgMTA3LCAyNTIsIDIyNiwgCi0gICAgMTMsIDUsIDY2LCAxMywgNSwgOTcsIDI0NiwgMjMzLCAxMywgNSwgOTcsIDk3LCA2NiwgMTMsIDUsIDk3LCAxMDcsIDk3LCAKLSAgICAyNTQsIDI0MiwgMTA3LCAyNTQsIDI0MiwgMjUzLCA3NSwgMTA3LCAyNDYsIDE5NywgMTMsIDUsIDk3LCAxMDcsIDk3LCAyNTQsIAotICAgIDE1MiwgMTA3LCAyNDcsIDIwNSwgMTMsIDUsIDk3LCAxMDcsIDk3LCA5NywgMjAwLCAxMDcsIDk3LCAyMzIsIDUsIDEzLCA1LCAKLSAgICAyNTMsIDEwNywgMTMsIDUsIDI1NCwgMTQsIDEzLCA1LCAyNTMsIDQ1LCAxMywgNSwgMjU0LCAyMDgsIDIzNSwgMTI3LCAxMywgCi0gICAgNSwgMjU0LCAyMDgsIDI0LCAyNDYsIDIwNiwgMTMsIDUsIDI1NCwgMjA4LCAyNCwgMjUyLCAyMzksIDEzLCA1LCAyNTQsIAotICAgIDIwOCwgMjQsIDk3LCA3OSwgOTcsIDc5LCA2NiwgMTMsIDUsIDI1NCwgMjA4LCAyNCwgOTcsIDc5LCA5NywgNzksIDk3LCAKLSAgICAyNDAsIDEzMCwgMTMsIDUsIDI1NCwgMjA4LCAyNDAsIDEzMCwgMTMsIDUsIDI1NCwgMjA4LCAyMzMsIDEzNCwgMTMsIDUsIAotICAgIDI1NCwgMjA4LCAyMzYsIDIyNCwgMjQsIDI0NiwgMjA2LCAxMywgNSwgMjQ2LCAzMCwgMTMsIDUsIDI1MywgMTk5LCAxMywgNSwgCi0gICAgMjU0LCAyNDMsIDI0LCAyMzcsIDE2MCwgMTMsIDUsIDI1NCwgMjQzLCAyNCwgMjU0LCAyMDYsIDc5LCAyNTIsIDIwMywgMTMsIAotICAgIDUsIDI1NCwgMjQzLCAyNCwgMjQxLCA2OCwgMTMsIDUsIDI1NCwgMjQzLCAyNCwgNjYsIDEzLCA1LCAyNDAsIDY2LCAxMywgNSwgCi0gICAgMjQ2LCAzMiwgMTMsIDUsIDI0NywgMjIwLCAyNCwgMjM1LCA3NiwgMTMsIDUsIDI0NywgMjIwLCAyNCwgMjEzLCAxMywgNSwgCi0gICAgMjUzLCAxMjEsIDEzLCA1LCAyNTUsIDUxLCAyNDAsIDEzMCwgMTMsIDUsIDI1MywgMTYxLCAxMywgNSwgMjU0LCAyNDQsIAotICAgIDIzMywgNzcsIDI1MywgMTYxLCAxMywgNSwgMjU0LCAyNDQsIDIzMywgMTM0LCAxMywgNSwgMjUyLCA1OCwgMTMsIDUsIDI1MywgCi0gICAgOTQsIDI0LCAxMDIsIDc5LCAxNTQsIDEzLCA1LCAyNTMsIDk0LCAyNCwgMTAyLCA3OSwgMjUyLCAyMDEsIDEzLCA1LCAyNTMsIAotICAgIDk0LCAyNCwgMjUzLCAxMTIsIDEzLCA1LCAyNTMsIDk0LCAyNCwgMTU0LCAxMywgNSwgMjUzLCA5NCwgMjQsIDI0NiwgMTk1LCAKLSAgICAxMywgNSwgMjUzLCA5NCwgMjQsIDI1MywgMTA3LCAxMywgNSwgMjUzLCA5NCwgMjQsIDI1NCwgMjMyLCA3OSwgMjQ2LCAxNzcsIAotICAgIDEzLCA1LCAyNTMsIDk0LCAyNCwgMjU0LCAyMzIsIDc5LCAyNTMsIDMwLCAxMywgNSwgMjUyLCA1OSwgMTMsIDUsIDI1MiwgCi0gICAgNjEsIDEzLCA1LCAyNDYsIDM1LCAxMywgNSwgMjUyLCA2MywgMTMsIDUsIDI1MiwgMjQyLCAyNCwgNTcsIDEzLCA1LCAyNTIsIAotICAgIDI0MiwgMjQsIDIzNSwgMTA4LCAxMywgNSwgMjUyLCAyNDIsIDI0LCAxMjUsIDEzLCA1LCAyNTIsIDI0MiwgMjQsIDI0OCwgCi0gICAgMzMsIDEzLCA1LCAyNTIsIDI0MiwgMjQsIDI1MiwgMjA1LCAxMywgNSwgMjUyLCAyNDIsIDI0LCAyNDcsIDEyLCAxMywgNSwgCi0gICAgMjUyLCAyNDIsIDI0LCAyNDYsIDIwMSwgMjQwLCAxMzEsIDEzLCA1LCAyNTIsIDI0MiwgMjQsIDI0NiwgMTk3LCAxMywgNSwgCi0gICAgMjUyLCAyNDIsIDI0LCAyNTMsIDQwLCAxMywgNSwgMjUyLCAyNDIsIDI0LCAxNTQsIDEzLCA1LCAyNTIsIDI0MiwgMjQsIAotICAgIDI0NiwgMjM0LCAxMywgNSwgMjUyLCAyNDIsIDI0LCAyNTMsIDc4LCAxMywgNSwgMjUyLCAyNDIsIDI0LCAyNDgsIDY4LCAxMywgCi0gICAgNSwgMjUyLCAyNDIsIDI0LCAyNTMsIDcsIDEzLCA1LCAyNTIsIDI0MiwgMjQsIDI0NywgMTgsIDEzLCA1LCAyNTIsIDI0MiwgCi0gICAgMjQsIDI0NywgMTc0LCAxMywgNSwgMjUyLCAyNDIsIDI0LCAyMTMsIDEzLCA1LCAyNTIsIDI0MiwgMjQsIDI0NiwgMTg2LCAKLSAgICAxMywgNSwgMjUyLCAyNDIsIDI0LCAyNDEsIDI0NSwgMTMsIDUsIDI1MiwgMjQyLCAyNCwgMjUzLCAxOCwgMTMsIDUsIDI1MiwgCi0gICAgMjQyLCAyNCwgOTcsIDc5LCAyNDYsIDIzMywgMTMsIDUsIDI1MiwgMjQyLCAyNCwgMjUzLCA0NSwgMTMsIDUsIDI1MiwgMjQyLCAKLSAgICAyNCwgMjM4LCA4MCwgMTMsIDUsIDIzOCwgODAsIDEzLCA1LCAyNDYsIDM2LCAyNCwgNjYsIDEzLCA1LCAyNDYsIDI0OSwgMTMsIAotICAgIDUsIDI1MywgMTYyLCAyNCwgNTcsIDEzLCA1LCAyNTMsIDE2MiwgMjQsIDI1MywgMzQsIDEzLCA1LCAyNTMsIDE2MiwgMjQsIAotICAgIDI0NiwgMjIwLCAxMywgNSwgMjUzLCAxNjIsIDI0LCAyNDAsIDE4NywgMTMsIDUsIDI0NiwgMzksIDEzLCA1LCAyNDYsIDM4LCAKLSAgICAxMywgNSwgMjM3LCAxOCwgMTMsIDUsIDI0MCwgNzAsIDEzLCA1LCAyNTIsIDY3LCAxMywgNSwgMjU0LCAxNjYsIDI0LCAyMzUsIAotICAgIDc2LCAxMywgNSwgMjUyLCA2OCwgMTMsIDUsIDI1MiwgMjI2LCAxMywgNSwgMjU0LCAyNTUsIDI0MCwgMTMxLCAxMywgNSwgCi0gICAgMjU0LCAyNTUsIDIzNSwgNTEsIDI0LCAyNDYsIDIyMCwgMTMsIDUsIDI1MiwgMTY2LCAxMywgNSwgMjQ2LCAxMDYsIDEzLCA1LCAKLSAgICAyNTIsIDE3MiwgMTMsIDUsIDI1MywgNzIsIDEzLCA1LCAyNTUsIDU0LCAxMDcsIDI1MywgNzIsIDEzLCA1LCAyNTIsIDE3NiwgCi0gICAgMTMsIDUsIDI1MiwgMTc3LCAxMywgNSwgMjU0LCAxNzksIDI0OCwgNzcsIDI0MCwgMTMxLCAxMywgNSwgMjUyLCAxNzksIDEzLCAKLSAgICA1LCAyNDYsIDEzMSwgMTMsIDUsIDI1MywgOTcsIDEzLCA1LCAyNTIsIDE4OCwgMTMsIDUsIDI1NCwgMTgxLCAyNCwgNTcsIAotICAgIDEzLCA1LCAyNDAsIDExMCwgMTMsIDUsIDI1MiwgMTg5LCAxMywgMTExLCA1LCAxMzUsIDI0NiwgMTc3LCAxMywgMTExLCA1LCAKLSAgICAxNTIsIDI0NiwgMTc3LCAxMywgMTExLCA1LCAyNDYsIDE2MCwgMjQ2LCAxNzcsIDEzLCAxMTEsIDUsIDI0NiwgMTU5LCAyNDYsIAotICAgIDE3NywgMTMsIDExMSwgNSwgMjUzLCAxNywgMjQ2LCAxNzcsIDEzLCAxMTEsIDUsIDI0MCwgMTU1LCAyNDYsIDE3NywgMTMsIAotICAgIDExMSwgNSwgMjQwLCAxNDIsIDI0NiwgMTc3LCAxMywgMTExLCA1LCAyNDYsIDIwOCwgMjQ2LCAxNzcsIDEzLCAxMTEsIDUsIAotICAgIDE1MiwgMjQwLCAxNTYsIDEzLCAxMTEsIDUsIDI0NiwgMTYwLCAyNDAsIDE1NiwgMTMsIDExMSwgNSwgMjQ2LCAxNTksIDI0MCwgCi0gICAgMTU2LCAxMywgMTExLCA1LCAyNTMsIDE3LCAyNDAsIDE1NiwgMTMsIDExMSwgNSwgMjQwLCAxNTUsIDI0MCwgMTU2LCAxMywgCi0gICAgMTExLCA1LCAyNDAsIDE0MiwgMjQwLCAxNTYsIDEzLCAxMTEsIDUsIDI0NiwgMjA4LCAyNDAsIDE1NiwgMTMsIDExMSwgNSwgCi0gICAgMjQ2LCAxNjAsIDY2LCAxMywgMTExLCA1LCAyNDYsIDE1OSwgNjYsIDEzLCAxMTEsIDUsIDI1MywgMTcsIDY2LCAxMywgMTExLCAKLSAgICA1LCAyNDAsIDE1NSwgNjYsIDEzLCAxMTEsIDUsIDI0MCwgMTQyLCA2NiwgMTMsIDExMSwgNSwgMjQ2LCAyMDgsIDY2LCAxMywgCi0gICAgMTExLCA1LCAxNjgsIDIzNywgMTEzLCAxMywgMTExLCA1LCAxMzUsIDIzNywgMTEzLCAxMywgMTExLCA1LCAxNTIsIDIzNywgCi0gICAgMTEzLCAxMywgMTExLCA1LCAyNDYsIDE2MCwgMjM3LCAxMTMsIDEzLCAxMTEsIDUsIDI0NiwgMTU5LCAyMzcsIDExMywgMTMsIAotICAgIDExMSwgNSwgMjUzLCAxNywgMjM3LCAxMTMsIDEzLCAxMTEsIDUsIDI0MCwgMTU1LCAyMzcsIDExMywgMTMsIDExMSwgNSwgCi0gICAgMjQwLCAxNDIsIDIzNywgMTEzLCAxMywgMTExLCA1LCAyNDYsIDIwOCwgMjM3LCAxMTMsIDEzLCAxMTEsIDUsIDE2OCwgMjM3LCAKLSAgICAxNTYsIDEzLCAxMTEsIDUsIDEzNSwgMjM3LCAxNTYsIDEzLCAxMTEsIDUsIDE1MiwgMjM3LCAxNTYsIDEzLCAxMTEsIDUsIAotICAgIDI0NiwgMTYwLCAyMzcsIDE1NiwgMTMsIDExMSwgNSwgMjQ2LCAxNTksIDIzNywgMTU2LCAxMywgMTExLCA1LCAxMzUsIDIzNywgCi0gICAgMTE2LCAxMywgMTExLCA1LCAxNTIsIDIzNywgMTE2LCAxMywgMTExLCA1LCAxNTIsIDI0MSwgNjksIDIzNSwgMzAsIDE1LCAKLSAgICAxMywgMTExLCA1LCAyNDYsIDE2MCwgMjM3LCAxMTYsIDEzLCAxMTEsIDUsIDI0NiwgMTU5LCAyMzcsIDExNiwgMTMsIDExMSwgCi0gICAgNSwgMjUzLCAxNywgMjM3LCAxMTYsIDEzLCAxMTEsIDUsIDI0MCwgMTU1LCAyMzcsIDExNiwgMTMsIDExMSwgNSwgMjQwLCAKLSAgICAxNDIsIDIzNywgMTE2LCAxMywgMTExLCA1LCAyNDYsIDIwOCwgMjM3LCAxMTYsIDEzLCAxMTEsIDUsIDE2OCwgMjM3LCAxNjMsIAotICAgIDEzLCAxMTEsIDUsIDEzNSwgMjM3LCAxNjMsIDEzLCAxMTEsIDUsIDE1MiwgMjM3LCAxNjMsIDEzLCAxMTEsIDUsIDE1MiwgCi0gICAgMjQ1LCAxNTksIDIzNSwgMzAsIDE1LCAxMywgMTExLCA1LCAyNDYsIDE2MCwgMjM3LCAxNjMsIDEzLCAxMTEsIDUsIDI0NiwgCi0gICAgMTU5LCAyMzcsIDE2MywgMTMsIDExMSwgNSwgMjQxLCA2OSwgMjQsIDI1MywgMTc5LCA3OSwgMjQwLCAxNTYsIDEzLCAxMTEsIAotICAgIDUsIDI0MSwgNjksIDI0LCAyNTMsIDE3OSwgNzksIDI0NywgMTc0LCAxMywgMTExLCA1LCAxNjgsIDI0MCwgMjE5LCAxMywgCi0gICAgMTExLCA1LCAxMzUsIDI0MCwgMjE5LCAxMywgMTExLCA1LCAxNTIsIDI0MCwgMjE5LCAxMywgMTExLCA1LCAxNTIsIDI0OSwgCi0gICAgMTMxLCAyMzUsIDMwLCAxNSwgMTMsIDExMSwgNSwgMjQ2LCAxNjAsIDI0MCwgMjE5LCAxMywgMTExLCA1LCAyNDYsIDE1OSwgCi0gICAgMjQwLCAyMTksIDEzLCAxMTEsIDUsIDE1MiwgMjM1LCAzMCwgMjExLCAyMzgsIDIwNywgMTMsIDExMSwgNSwgMTUyLCAyMzUsIAotICAgIDMwLCAyMTEsIDIzOCwgMjA4LCAxMywgMTExLCA1LCAyNDYsIDE2MCwgMjM1LCAzMCwgMjExLCAyMzksIDg2LCAxMywgMTExLCAKLSAgICA1LCAyNDYsIDE2MCwgMjM1LCAzMCwgMjExLCAyMzYsIDEzNywgMTMsIDExMSwgNSwgMjQ2LCAxNjAsIDIzNSwgMzAsIDIxMSwgCi0gICAgMjQxLCAxODEsIDU3LCAxMywgMTExLCA1LCAyNDYsIDE2MCwgMjM1LCAzMCwgMjExLCAyNDEsIDE4MSwgMjU0LCAxODUsIDEzLCAKLSAgICAxMTEsIDUsIDI1MywgMTcsIDIzNSwgMzAsIDIxMSwgMjQyLCA2NSwgMTMsIDExMSwgNSwgMjQwLCAxNTUsIDIzNSwgMzAsIAotICAgIDIxMSwgMjM5LCA0MSwgMTMsIDExMSwgNSwgMjQwLCAxNTUsIDIzNSwgMzAsIDIxMSwgMjQ4LCA2NywgNTcsIDEzLCAxMTEsIAotICAgIDUsIDI0MCwgMTU1LCAyMzUsIDMwLCAyMTEsIDI0OCwgNjcsIDI1NCwgMTg1LCAxMywgMTExLCA1LCAyNDAsIDE0MiwgMjM1LCAKLSAgICAzMCwgMjExLCAyNDYsIDQwLCAxMywgMTExLCA1LCAyNDAsIDE0MiwgMjM1LCAzMCwgMjExLCAyNDAsIDY5LCAxMywgMTExLCAKLSAgICA1LCAyNDYsIDIwOCwgMjM1LCAzMCwgMjExLCAyMzYsIDEwOSwgMTMsIDExMSwgNSwgMjQ2LCAyMDgsIDIzNSwgMzAsIDIxMSwgCi0gICAgMjM0LCAxMjYsIDEzLCAxMTEsIDUsIDI0NiwgMjA4LCAyMzUsIDMwLCAyMTEsIDIzNCwgMTI3LCAxMywgMTExLCA1LCAyNDYsIAotICAgIDIwOCwgMjM1LCAzMCwgMjExLCAyMzksIDQwLCA1NywgMTMsIDExMSwgNSwgMTM1LCAyNTIsIDI1NCwgMjQwLCAxMzEsIDEzLCAKLSAgICAxMTEsIDUsIDE1MiwgMjUyLCAyNTQsIDI0MCwgMTMxLCAxMywgMTExLCA1LCAyNDYsIDE2MCwgMjUyLCAyNTQsIDI0MCwgCi0gICAgMTMxLCAxMywgMTExLCA1LCAyNDYsIDE1OSwgMjUyLCAyNTQsIDI0MCwgMTMxLCAxMywgMTExLCA1LCAyNTMsIDE3LCAyNTIsIAotICAgIDI1NCwgMjQwLCAxMzEsIDEzLCAxMTEsIDUsIDE2OCwgMjQwLCAyMTgsIDEzLCAxMTEsIDUsIDEzNSwgMjQwLCAyMTgsIDEzLCAKLSAgICAxMTEsIDUsIDE1MiwgMjQwLCAyMTgsIDEzLCAxMTEsIDUsIDI0NiwgMTYwLCAyNDAsIDIxOCwgMTMsIDExMSwgNSwgMjQ2LCAKLSAgICAxNjAsIDI0NywgMjQ5LCAyMzUsIDMwLCAxNSwgMTMsIDExMSwgNSwgMjQ2LCAxNTksIDI0MCwgMjE4LCAxMywgMTExLCA1LCAKLSAgICAyNDYsIDE1OSwgMjQ3LCAyNDksIDIzNSwgMzAsIDE1LCAxMywgMTExLCA1LCAyMzEsIDEwOSwgMTMsIDExMSwgNSwgMjMxLCAKLSAgICAxMDgsIDEzLCAxMTEsIDUsIDE2OCwgMjM3LCAyNDQsIDEzLCAxMTEsIDUsIDEzNSwgMjM3LCAyNDQsIDEzLCAxMTEsIDUsIAotICAgIDE2OCwgMjQwLCAyMzksIDI0MCwgMTU2LCAxMywgMTExLCA1LCAxMzUsIDIzNywgMjE4LCAyNDAsIDE1NiwgMTMsIDExMSwgNSwgCi0gICAgMjQ2LCAxNTksIDI0MCwgMCwgMjQwLCAxNTYsIDEzLCAxMTEsIDUsIDE2OCwgMjQwLCAyMzksIDIzNSwgMzAsIDIxMSwgNTcsIAotICAgIDEzLCAxMTEsIDUsIDEzNSwgMjM3LCAyMTgsIDIzNSwgMzAsIDIxMSwgNTcsIDEzLCAxMTEsIDUsIDE2OCwgMjM3LCAxMTIsIAotICAgIDI0NiwgMTc3LCAxMywgMTExLCA1LCAxNjgsIDIzNSwgNTMsIDI0NiwgMTc3LCAxMywgMTExLCA1LCA4NCwgMjMzLCAxNTgsIAotICAgIDE2OCwgMjM4LCA2MSwgMTMsIDExMSwgNSwgODQsIDIzMywgMTU4LCAxNjgsIDIzMywgMTU1LCAxMywgMjI5LCAxNjEsIDUsIAotICAgIDg0LCAyMzMsIDE1OCwgMjQ3LCA4LCAyMzMsIDE0MCwgMTMsIDIyOSwgMTYxLCA1LCA2MSwgMjM3LCA2NiwgMTMsIDIyOSwgCi0gICAgMTYxLCA1LCAyMzMsIDc0LCAyMzcsIDY2LCAxMywgMjI5LCAxNjEsIDUsIDIzMywgNzQsIDIzMiwgNTcsIDQzLCAyMywgMTQsIAotICAgIDIzNywgNzcsIDQzLCAyMywgMTQsIDIzNiwgNDIsIDQzLCAyMywgMTQsIDIyOCwgMTc5LCA0MywgMjMsIDE0LCAyNDEsIDU4LCAKLSAgICAyMjgsIDE5MCwgNDMsIDIzLCAxNCwgMjQxLCA1OCwgMjM3LCAxMzIsIDQzLCAyMywgMTQsIDIzNywgMjIzLCAyMjgsIDE5MCwgCi0gICAgNDMsIDIzLCAxNCwgMjM3LCAyMjMsIDIzNywgMTMyLCA0MywgMjMsIDE0LCAyMzIsIDIxMywgNDMsIDIzLCAxNCwgMjMxLCAKLSAgICAxNzQsIDQzLCAyMywgMTQsIDIyOSwgNDYsIDQzLCAyMywgMTQsIDIzMSwgMTg4LCA0MywgMjMsIDE0LCAyMzMsIDY2LCAyMzcsIAotICAgIDEzMiwgNDMsIDIzLCAxNCwgMjMyLCAyMTcsIDQzLCAyMywgMTQsIDI0MSwgOTUsIDIyOCwgMTkwLCA0MywgMjMsIDE0LCAKLSAgICAyNTMsIDIyMSwgMjI4LCAxOTAsIDQzLCAyMywgMTQsIDIzNSwgMjIwLCA0MywgMjMsIDE0LCAyMzEsIDkyLCA0MywgMjMsIAotICAgIDE0LCAyMjksIDIzMCwgNDMsIDIzLCAxNCwgMjMwLCAxNzMsIDIzNywgMTMyLCA0MywgMjMsIDE0LCAyMzQsIDIzNywgNDMsIAotICAgIDIzLCAxNCwgMjQwLCAzOCwgNDMsIDIzLCAxNCwgMjM4LCAzMSwgMjMxLCAyMDIsIDQzLCAyMywgMTQsIDIzNywgMTU3LCAKLSAgICAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgMjM2LCAxOTQsIDQzLCAyMywgMTQsIDIzMiwgOTUsIDQzLCAyMywgMTQsIDI0MCwgNzMsIAotICAgIDQzLCAyMywgMTQsIDI0OCwgNjksIDIzMSwgMjAyLCA0MywgMjMsIDE0LCAyMzUsIDk2LCAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgCi0gICAgMjMxLCAyNDAsIDIzMSwgMjAyLCA0MywgMjMsIDE0LCAyMzMsIDE4LCA0MywgMjMsIDE0LCAyMzIsIDI0NSwgNDMsIDIzLCAKLSAgICAxNCwgMjM2LCAyNDAsIDIzMiwgNjksIDQzLCAyMywgMTQsIDIzOSwgMTc4LCAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgMjM3LCAKLSAgICAyMSwgMjMxLCAyMDIsIDQzLCAyMywgMTQsIDIzMywgMTg1LCAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgMjMyLCA3MCwgNDMsIAotICAgIDIzLCAxNCwgMjM1LCAxODUsIDQzLCAyMywgMTQsIDIzOSwgMjIxLCA0MywgMjMsIDE0LCAyMzgsIDMzLCAyMzEsIDIwMiwgCi0gICAgNDMsIDIzLCAxNCwgMjM0LCAyNDgsIDQzLCAyMywgMTQsIDIyNywgMjE3LCA0MywgMjMsIDE0LCAyMzYsIDIxNiwgNDMsIDIzLCAKLSAgICAxNCwgMjM1LCAxMzksIDIzMSwgMjAyLCA0MywgMjMsIDE0LCAyMzUsIDEzOSwgMjUxLCA2LCAyMzQsIDIzMiwgNDMsIDIzLCAKLSAgICAxNCwgMjMyLCAzMSwgMjMxLCAyMDIsIDQzLCAyMywgMTQsIDI0MCwgMzUsIDQzLCAyMywgMTQsIDIzOSwgODMsIDQzLCAyMywgCi0gICAgMTQsIDI0OSwgMjE5LCA0MywgMjMsIDE0LCAyNDYsIDUsIDQzLCAyMywgMTQsIDIzNCwgMjQ0LCA0MywgMjMsIDE0LCAyMzEsIAotICAgIDk0LCA0MywgMjMsIDE0LCAyNDEsIDk1LCAyNTMsIDIyMSwgMjQ2LCAxOTQsIDQzLCAyMywgMTQsIDIzNywgNzIsIDIzMSwgCi0gICAgMjAyLCA0MywgMjMsIDE0LCAyMzEsIDgyLCA0MywgMjMsIDE0LCAyMzMsIDE4MSwgMjMxLCAyMDIsIDQzLCAyMywgMTQsIAotICAgIDIzOSwgNTcsIDIzMywgNTUsIDQzLCAyMywgMTQsIDIzMiwgMjQ3LCA0MywgMjMsIDE0LCAyMzEsIDEyNywgNDMsIDIzLCAxNCwgCi0gICAgMjMyLCAyMTUsIDQzLCAyMywgMTQsIDIzMywgMTkyLCAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgMjM0LCAyMDIsIDQzLCAyMywgCi0gICAgMTQsIDIyOSwgMjA2LCAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgMjI5LCAyMDcsIDIzMSwgMjAyLCA0MywgMjMsIDE0LCAyMzQsIAotICAgIDEyNCwgNDMsIDIzLCAxNCwgMjQxLCAxOTksIDQzLCAyMywgMTQsIDIzNCwgMTkwLCA0MywgMjMsIDE0LCAyMzQsIDE0MCwgCi0gICAgMjQxLCAyNiwgNDMsIDIzLCAxNCwgMjMzLCAxODEsIDI0MSwgMjYsIDQzLCAyMywgMTQsIDIyOCwgMTY1LCA0MywgMjMsIDE0LCAKLSAgICAyMjcsIDI0MiwgNDMsIDIzLCAxNCwgMjQ4LCA2OSwgMjQ2LCAxOTQsIDQzLCAyMywgMTQsIDIzOCwgMzEsIDI0NiwgMTk0LCAKLSAgICA0MywgMjMsIDE0LCAyNDEsIDU4LCAyNDYsIDE5NCwgNDMsIDIzLCAxNCwgMjM0LCAxOTEsIDQzLCAyMywgMTQsIDIzMiwgCi0gICAgMjE2LCA0MywgMjMsIDE0LCAyMjUsIDk4LCA0MywgMjMsIDE0LCAyMjUsIDk0LCA0MywgMjMsIDE0LCAyMzQsIDE4OSwgMjQ2LCAKLSAgICAxOTQsIDQzLCAyMywgMTQsIDIzMSwgMjQwLCAyNTMsIDkxLCAyNDYsIDI1MiwgNDMsIDIzLCAxNCwgMjM1LCA5NiwgMjUzLCAKLSAgICA5MSwgMjQ2LCAyNTIsIDQzLCAyMywgMTQsIDIzNywgMzUsIDQzLCAyMywgMTQsIDIzMCwgMTczLCAyNDYsIDE5NCwgNDMsIAotICAgIDIzLCAxNCwgMjMwLCAxNzIsIDIzMywgNTAsIDI0NiwgMTk0LCA0MywgMjMsIDE0LCAyMzUsIDEzLCA0MywgMjMsIDE0LCAKLSAgICAyMjUsIDk1LCA0MywgMjMsIDE0LCAyMzQsIDkzLCA0MywgMjMsIDE0LCAyMzQsIDMwLCA0MywgMjMsIDE0LCAyMzksIDExNCwgCi0gICAgMjQ0LCAxMiwgNDMsIDIzLCAxNCwgMjM3LCAyMjMsIDI0NiwgMTk0LCA0MywgMjMsIDE0LCAyMzgsIDMzLCAyNDYsIDE5NCwgCi0gICAgNDMsIDIzLCAxNCwgMjMzLCAyLCAyNDYsIDE5NCwgNDMsIDIzLCAxNCwgMjM2LCAxNzQsIDQzLCAyMywgMTQsIDIyOSwgMjI4LCAKLSAgICA0MywgMjMsIDE0LCAyMzQsIDE0NiwgNDMsIDIzLCAxNCwgMjI5LCAyMDcsIDI0NiwgMTk0LCA0MywgMjMsIDE0LCAyMjksIAotICAgIDIwNiwgMjQ2LCAxOTQsIDQzLCAyMywgMTQsIDIzNywgMjQ1LCAyMjksIDQ1LCA0MywgMjMsIDE0LCAyMzQsIDE0MywgNDMsIAotICAgIDIzLCAxNCwgMjIzLCA1OSwgNDMsIDIzLCAxNCwgMjMzLCAxODEsIDI0NiwgMTk0LCA0MywgMjMsIDE0LCAyMzAsIDUzLCA0MywgCi0gICAgMjMsIDE0LCAyMzUsIDEzOSwgMjQ2LCAxOTQsIDQzLCAyMywgMTQsIDI0MCwgMjYsIDQzLCAyMywgMTQsIDIzMywgMTkyLCAKLSAgICAyNDYsIDE5NCwgNDMsIDIzLCAxNCwgMjMyLCAxNzksIDQzLCAyMywgMTQsIDIzOSwgMjQwLCAyNDYsIDE5NCwgNDMsIDIzLCAKLSAgICAxNCwgMjQ2LCA2NiwgMjM1LCAxODUsIDQzLCAyMywgMTQsIDIyMywgNTUsIDQzLCAyMywgMTQsIDIyNSwgMTAwLCA0MywgMjMsIAotICAgIDE0LCAyMjcsIDgwLCA0MywgMjMsIDE0LCAyMjIsIDIzOCwgNDMsIDIzLCAxNCwgMjIyLCAyMjksIDQzLCAyMywgMTQsIDIyNywgCi0gICAgODEsIDQzLCAyMywgMTQsIDIyNSwgMTAxLCA0MywgMjMsIDE0LCAyMjUsIDExMywgNDMsIDIzLCAxNCwgMjI3LCAxNDEsIDQzLCAKLSAgICAyMywgMTQsIDIzNywgMjQ1LCAyMjcsIDE0MSwgNDMsIDIzLCAxNCwgMjMyLCAzMSwgMjQ2LCAxOTQsIDQzLCAyMywgMTQsIAotICAgIDIyOSwgMjIzLCAyNDksIDIzNCwgNDMsIDIzLCAxNCwgMjI5LCAyMjMsIDI0OSwgMjM2LCA0MywgMjMsIDE0LCAyNDUsIDI0NCwgCi0gICAgMjM1LCAxNDcsIDQzLCAyMywgMTQsIDI1MiwgMTcsIDI1MywgMTUwLCAyMzQsIDUsIDQzLCAyMywgMTQsIDIzMSwgOTAsIDQzLCAKLSAgICAyMywgMTQsIDIzMSwgNjUsIDQzLCAyMywgMTQsIDI0OCwgMjAxLCAyNDAsIDIwMSwgNDMsIDIzLCAxNCwgMjQ4LCAyMDEsIAotICAgIDI0NiwgMjUyLCA0MywgMjMsIDE0LCAyMzQsIDIzMSwgNDMsIDIzLCAxNCwgMjM4LCAxNSwgMjQ2LCAyNTIsIDQzLCAyMywgCi0gICAgMTQsIDI0MywgNzEsIDIzMSwgMjAyLCA0MywgMjMsIDE0LCAyMzUsIDEyNiwgMjMxLCAyMDIsIDQzLCAyMywgMTQsIDIzNSwgCi0gICAgMTI2LCAyNDEsIDI2LCA0MywgMjMsIDE0LCAyMzUsIDEyNiwgMjQ2LCAxOTQsIDQzLCAyMywgMTQsIDIzMywgMTg1LCAyNDYsIAotICAgIDE5NCwgNDMsIDIzLCAxNCwgMjQyLCA2MSwgNDMsIDIzLCAxNCwgMjM3LCAxMzIsIDQzLCAyMywgMTQsIDIzNywgOCwgNDMsIAotICAgIDIzLCAxNCwgMjMzLCA1MiwgNDMsIDIzLCAxNCwgMjMzLCAxNzAsIDQzLCAyMywgMTQsIDIzNywgMTYxLCAyNDksIDIyOSwgCi0gICAgMjMzLCAxOTMsIDQzLCAyMywgMTQsIDIzNywgMTYxLCAyNTMsIDE3NCwgMjMzLCAxNjAsIDQzLCAyMywgMTQsIDIzNywgMTYxLCAKLSAgICAyNDYsIDYsIDIzMywgMTYwLCA0MywgMjMsIDE0LCAyMzcsIDE2MSwgMjM0LCAyNDMsIDIzMywgMTYwLCA0MywgMjMsIDE0LCAKLSAgICAyMzcsIDE2MSwgMjM2LCAxMTAsIDIzMywgMTkzLCA0MywgMjMsIDE0LCAyMzcsIDE1NywgMjUzLCA5MSwgMjQ2LCAyNTIsIAotICAgIDQzLCAyMywgMTQsIDIzNywgMTU3LCAyMjcsIDE5MCwgMjMyLCA3NiwgNDMsIDIzLCAxNCwgMjM3LCAxNTcsIDIyNywgMTkwLCAKLSAgICAyMzcsIDI0MSwgNDMsIDIzLCAxNCwgMjMyLCAxMTIsIDQzLCAyMywgMTQsIDIzMywgMTYyLCAyMjcsIDE5MCwgMjMzLCAxODYsIAotICAgIDI0MCwgMjAxLCA0MywgMjMsIDE0LCAyMzMsIDE2MiwgMjI3LCAxOTAsIDIzMywgMTg2LCAyNDYsIDI1MiwgNDMsIDIzLCAxNCwgCi0gICAgMjMzLCAxNjIsIDIyNywgMTkwLCAyMzcsIDI0MSwgNDMsIDIzLCAxNCwgMjMxLCAxODIsIDQzLCAyMywgMTQsIDIzOCwgMTAxLCAKLSAgICA0MywgMjMsIDE0LCAyMzAsIDY5LCA0MywgMjMsIDE0LCAyMzQsIDUyLCA0MywgMjMsIDE0LCAyNDAsIDE5MywgMjQ4LCAxMzQsIAotICAgIDI0MSwgOTYsIDQzLCAyMywgMTQsIDI0MCwgMTkzLCAyMzIsIDc1LCA0MywgMjMsIDE0LCAyNDAsIDE5MywgMjQxLCA5NiwgCi0gICAgNDMsIDIzLCAxNCwgMjQwLCAxOTMsIDIzNiwgMTU0LCA0MywgMjMsIDE0LCAyNDAsIDE5MywgMjQ0LCAxMjIsIDQzLCAyMywgCi0gICAgMTQsIDI0MCwgMTkzLCAyMzgsIDMsIDQzLCAyMywgMTQsIDI0MCwgMTkzLCAyMzEsIDc1LCA0MywgMjMsIDE0LCAyNDAsIAotICAgIDE5MywgMjQ4LCAxMzQsIDIzOCwgMywgNDMsIDIzLCAxNCwgMjMzLCA5NCwgMjM4LCAzNywgMjM3LCA4NiwgNDMsIDIzLCAxNCwgCi0gICAgMjMzLCA5NCwgMjQ3LCAyNDIsIDIzOCwgMzcsIDIzNywgODYsIDQzLCAyMywgMTQsIDIzMywgOTQsIDIzMywgMjAwLCAyMzcsIAotICAgIDg2LCA0MywgMjMsIDE0LCAyMzMsIDk0LCAyNDcsIDI0MiwgMjMzLCAyMDAsIDIzNywgODYsIDQzLCAyMywgMTQsIDIzMywgCi0gICAgOTQsIDI0MCwgNDcsIDIzNywgODYsIDQzLCAyMywgMTQsIDIzMywgOTQsIDIzMSwgMTgxLCA0MywgMjMsIDE0LCAyMzMsIDk0LCAKLSAgICAyMzMsIDE4MCwgMjM3LCA4NiwgNDMsIDIzLCAxNCwgMjMzLCA5NCwgMjMzLCAxODAsIDIzNSwgMTg4LCAyMzcsIDg2LCA0MywgCi0gICAgMjMsIDE0LCAyMzMsIDk0LCAyMzUsIDE4OCwgMjM3LCA4NiwgNDMsIDIzLCAxNCwgMjMzLCA5NCwgMjM1LCAyMDIsIDIzNywgCi0gICAgODYsIDQzLCAyMywgMTQsIDIzOSwgNDMsIDIzOCwgNzIsIDIzMCwgMTg4LCA0MywgMjMsIDE0LCAyMzAsIDE3MiwgMjM4LCAKLSAgICA3MiwgMjMwLCAxODgsIDQzLCAyMywgMTQsIDIzMSwgMjUwLCAyMjksIDE1MiwgNDMsIDIzLCAxNCwgMjMxLCAyNTAsIDIyOSwgCi0gICAgMjAxLCA0MywgMjMsIDE0LCAyMzEsIDI1MCwgMjMyLCAxOSwgNDMsIDIzLCAxNCwgMjMzLCA5NCwgMjQ2LCA0NCwgMjM3LCAKLSAgICA4NiwgNDMsIDIzLCAxNCwgMjMzLCA5NCwgMjMxLCAxMjYsIDIzNywgODYsIDQzLCAyMywgMTQsIDIzMywgOTQsIDIzNSwgCi0gICAgMjAyLCAyMzMsIDE4MCwgMjM3LCA4NiwgNDMsIDIzLCAxNCwgMjMwLCAxODcsIDI1NSwgNjAsIDIzNSwgMTQ3LCA0MywgMjMsIAotICAgIDE0LCAyMzAsIDE4NywgMjU1LCA2MCwgMjM0LCA1NiwgNDMsIDIzLCAxNCwgMjM2LCA2NCwgMjUzLCAxNTAsIDIzNywgNzIsIAotICAgIDI0OCwgMTkyLCA0MywgMjMsIDE0LCAyMzIsIDIwNiwgNDMsIDIzLCAxNCwgMjMwLCA3MCwgNDMsIDIzLCAxNCwgMjM3LCA3MiwgCi0gICAgMjM0LCA4LCAyMzQsIDQ5LCAyMzksIDM3LCA0MywgMjMsIDE0LCAyMzcsIDcyLCAyMzEsIDIyMSwgMjEzLCA0MywgMjMsIDE0LCAKLSAgICAyMzcsIDcyLCAyMzEsIDIyMSwgMjQxLCAxOTksIDQzLCAyMywgMTQsIDIzNywgNzIsIDI1MSwgNDAsIDIzNywgODYsIDQzLCAKLSAgICAyMywgMTQsIDIzNywgNzIsIDIzMSwgMjIxLCAyNTMsIDEyLCA0MywgMjMsIDE0LCAyMzcsIDcyLCAyMzUsIDEzNiwgMjM0LCAKLSAgICA1MywgMjUzLCAxMiwgNDMsIDIzLCAxNCwgMjM3LCA3MiwgMjMxLCAyMjEsIDI1MywgNiwgNDMsIDIzLCAxNCwgMjM3LCA3MiwgCi0gICAgMjMxLCAyMjEsIDI1MywgNjUsIDQzLCAyMywgMTQsIDIzNywgNzIsIDIzMSwgMjIxLCAyNTQsIDIzMCwgMjQwLCAyMDEsIDQzLCAKLSAgICAyMywgMTQsIDIzNywgNzIsIDIzMSwgMjIxLCAyNTQsIDIzMCwgMjQ2LCAyNTIsIDQzLCAyMywgMTQsIDIzNywgNzIsIDIzNSwgCi0gICAgMTg5LCAyMzcsIDE3NSwgMjMyLCAxOSwgNDMsIDIzLCAxNCwgMjM3LCA3MiwgMjM1LCAxODksIDIzNywgMTc1LCAyMjksIAotICAgIDIwMSwgNDMsIDIzLCAxNCwgMjM4LCAyMTUsIDIzNSwgMTM2LCAyMzcsIDE3NSwgMjQwLCA3MiwgNDMsIDIzLCAxNCwgMjM3LCAKLSAgICA3MiwgMjM1LCAxMzYsIDIzNywgMTc1LCAyMzYsIDI1MSwgNDMsIDIzLCAxNCwgMjM3LCA3MiwgMjM2LCAxNjQsIDQzLCAyMywgCi0gICAgMTQsIDI0MSwgMzMsIDI0MCwgMTExLCA0MywgMjMsIDE0LCAyNDEsIDMzLCAyMzYsIDEyMywgNDMsIDIzLCAxNCwgMjQxLCAKLSAgICAzMywgMjM2LCAyMzUsIDQzLCAyMywgMTQsIDIzNywgNzIsIDI1NSwgNTUsIDIzNywgMTQ4LCAyMjcsIDE1MiwgNDMsIDIzLCAKLSAgICAxNCwgMjM3LCA3MiwgMjMxLCA2MywgMjMwLCAyMjQsIDQzLCAyMywgMTQsIDIzNywgMTQ4LCAyMjgsIDIxOSwgNDMsIDIzLCAKLSAgICAxNCwgMjM3LCAxMzEsIDIyOCwgMjE5LCA0MywgMjMsIDE0LCAyMzcsIDEzMSwgMjI3LCAxNTIsIDQzLCAyMywgMTQsIDIzNywgCi0gICAgMTMxLCAyNDcsIDY1LCAyNTMsIDE3NCwgMjMxLCAyMTcsIDQzLCAyMywgMTQsIDIzNywgMTMxLCAyMjksIDIwMiwgMjM1LCAKLSAgICAyMjIsIDIzMSwgMjE3LCA0MywgMjMsIDE0LCAyMzcsIDEzMSwgMjMyLCAyMCwgMjU1LCA3LCAyMzEsIDIxNywgNDMsIDIzLCAKLSAgICAxNCwgMjM3LCAxMzEsIDIzMCwgMjE3LCAyNDgsIDEyMiwgMjMxLCAyMTcsIDQzLCAyMywgMTQsIDIzNywgMTQ4LCAyNDcsIAotICAgIDY1LCAyNTMsIDE3NCwgMjMxLCAyMTcsIDQzLCAyMywgMTQsIDIzNywgMTQ4LCAyMjksIDIwMiwgMjM1LCAyMjIsIDIzMSwgCi0gICAgMjE3LCA0MywgMjMsIDE0LCAyMzcsIDE0OCwgMjMyLCAyMCwgMjU1LCA3LCAyMzEsIDIxNywgNDMsIDIzLCAxNCwgMjM3LCAKLSAgICAxNDgsIDIzMCwgMjE3LCAyNDgsIDEyMiwgMjMxLCAyMTcsIDQzLCAyMywgMTQsIDIzNywgMjU0LCAyMzYsIDQ5LCA0MywgMjMsIAotICAgIDE0LCAyMzcsIDI1NCwgMjM3LCAzMywgNDMsIDIzLCAxNCwgMjMzLCAxNDcsIDI0NywgNjUsIDIzOSwgMTEzLCA0MywgMjMsIAotICAgIDE0LCAyMzMsIDE0NywgMjQ3LCA2NSwgMjM2LCAxNTIsIDQzLCAyMywgMTQsIDIzMywgMTQ3LCAyMzcsIDEzMiwgNDMsIDIzLCAKLSAgICAxNCwgMjMzLCAxNDcsIDIzMywgMjQ1LCA0MywgMjMsIDE0LCAyMzMsIDEyMCwgMjMzLCAyNDUsIDQzLCAyMywgMTQsIDIzMywgCi0gICAgMTIwLCAyMzUsIDE0MSwgMjMzLCAyMDIsIDQzLCAyMywgMTQsIDIzMywgMTIwLCAyMzUsIDE0MSwgMjMyLCA1OCwgNDMsIDIzLCAKLSAgICAxNCwgMjMzLCAxMjAsIDIzNSwgMTQxLCAyMjksIDIyMiwgNDMsIDIzLCAxNCwgMjMzLCAxMjAsIDIzNSwgMjUyLCA0MywgMjMsIAotICAgIDE0LCAyMzMsIDEyMCwgMjM3LCAxOTUsIDIzMywgMjAyLCA0MywgMjMsIDE0LCAyMzMsIDEyMCwgMjM3LCAxOTUsIDIzMiwgCi0gICAgNTgsIDQzLCAyMywgMTQsIDIzMywgMTIwLCAyMzcsIDE5NSwgMjI5LCAyMjIsIDQzLCAyMywgMTQsIDIzNCwgNTQsIDI1NCwgCi0gICAgNjAsIDQzLCAyMywgMTQsIDIzMiwgMTExLCAyNTMsIDExOSwgNDMsIDIzLCAxNCwgMjM1LCAxMzgsIDQzLCAyMywgMTQsIAotICAgIDIzNSwgNjcsIDIxMywgNDMsIDIzLCAxNCwgMjM1LCA2NywgMjQ4LCAxOTIsIDQzLCAyMywgMTQsIDIzNSwgNjcsIDI1MiwgCi0gICAgMjA1LCA0MywgMjMsIDE0LCAyMzUsIDY3LCAyNTMsIDEyLCA0MywgMjMsIDE0LCAyMzUsIDY3LCAyNTMsIDYsIDQzLCAyMywgCi0gICAgMTQsIDIzNSwgNjcsIDI1MywgNjUsIDQzLCAyMywgMTQsIDIzNSwgNjcsIDI1MiwgMjQ4LCA0MywgMjMsIDE0LCAyMzEsIAotICAgIDI0MCwgMjUzLCA5MSwgMjQxLCAxOTIsIDQzLCAyMywgMTQsIDIzNSwgOTYsIDI1MywgOTEsIDI0MSwgMTkyLCA0MywgMjMsIAotICAgIDE0LCAyMzEsIDI0MCwgMjUzLCA5MSwgMjQwLCAyMDEsIDQzLCAyMywgMTQsIDIzNSwgOTYsIDI1MywgOTEsIDI0MCwgMjAxLCAKLSAgICA0MywgMjMsIDE0LCAyMzgsIDE1LCAyNDAsIDIwMSwgNDMsIDIzLCAxNCwgMjM3LCAxNTcsIDI1MywgOTEsIDI0MCwgMjAxLCAKLSAgICAyMywgMTQsIDIzNywgNjIsIDIzMywgMTI3LCAyMywgMTQsIDQ3LCAyMzMsIDEyNywgMjMsIDE0LCAzNSwgMjMzLCAxMjcsIAotICAgIDIzLCAxNCwgMjM1LCAzNywgMzUsIDIzMywgMTI3LCAyMywgMTQsIDIzNywgMTEwLCAyMzMsIDEyNywgMjMsIDE0LCAyNDAsIAotICAgIDEyNSwgMjMzLCAxMjcsIDIzLCAxNCwgNDIsIDIzNywgMTIwLCA1MywgMjMsIDE0LCA0MSwgMjM3LCAxMjAsIDUzLCAyMywgCi0gICAgMTQsIDIzNywgMTIwLCAyNDAsIDE2OSwgMjMsIDE0LCAyNTMsIDU2LCAyMzgsIDQ1LCAyMywgMTQsIDI1NCwgMjE4LCAyNDIsIAotICAgIDIzMywgMjMsIDE0LCAyMzgsIDQ1LCAyMywgMTQsIDI0MywgMTcsIDIzLCAxNCwgMjMzLCAxNzcsIDIzMiwgMTg3LCAyMywgCi0gICAgMTQsIDIzMywgMTc3LCAyMzIsIDE4OCwgMjMsIDE0LCAyMzMsIDE3NywgMjMyLCAxODksIDIzLCAxNCwgMjMzLCAyMDUsIDIzLCAKLSAgICAxNCwgMjM2LCA3NywgNTEsIDIzLCAxNCwgMjM4LCAxMzAsIDc2LCAyMywgMTQsIDIzNCwgMjUsIDIzLCAxNCwgMjM4LCAxMjgsIAotICAgIDIzLCAxNCwgMTA0LCAyMywgMTQsIDIzNCwgMTc1LCAyMzcsIDE0NywgMjMsIDE0LCAyMzQsIDI1NSwgMjM3LCAxNDcsIDIzLCAKLSAgICAxNCwgMjMxLCAxNzgsIDIzNywgMTQ3LCAyMywgMTQsIDIzMiwgMTkyLCAyMzcsIDE0NywgMjMsIDE0LCAyMzIsIDE5MCwgCi0gICAgMjM3LCAxNDcsIDIzLCAxNCwgMjM0LCAyMjQsIDIzNywgMTQ3LCAyMywgMTQsIDIzMSwgMTQ1LCAyMzAsIDE4NSwgMjMsIDE0LCAKLSAgICAyMzAsIDYzLCAyMzAsIDE4NSwgMjMsIDE0LCAyNTUsIDY1LCAyNDAsIDIyMCwgMjMsIDE0LCAyNTUsIDY1LCAyNDcsIDY5LCAKLSAgICAyMzcsIDE0MCwgMjQwLCAyNDMsIDIzLCAxNCwgMjU1LCA2NSwgMjQ3LCA2OSwgMjM3LCAxNDAsIDIzNywgMTczLCAyMywgMTQsIAotICAgIDI1NSwgNjIsIDI0MCwgMjIwLCAyMywgMTQsIDI1NSwgNzIsIDI0MCwgMjIwLCAyMywgMTQsIDI1NSwgNzIsIDI0NywgNjksIAotICAgIDIzNywgMTQwLCAyNDAsIDI0MywgMjMsIDE0LCAyNTUsIDcyLCAyNDcsIDY5LCAyMzcsIDE0MCwgMjM3LCAxNzMsIDIzLCAxNCwgCi0gICAgMjQ4LCAzMiwgMjM2LCAzMCwgMjMsIDE0LCAyNDgsIDMyLCAyMzYsIDMxLCAyMywgMTQsIDIzMywgMjE5LCAyMzUsIDg1LCAKLSAgICAyNDAsIDE0OCwgMjMsIDE0LCA0NywgMjM4LCA0OSwgMjMsIDE0LCA0NywgMjQxLCAxMzIsIDIzLCAxNCwgMjQ3LCAxNDEsIAotICAgIDI1MywgMTksIDIzLCAxNCwgMjQ3LCAxNDEsIDI0MCwgMTUyLCAyMywgMTQsIDIzNSwgMTMxLCAyNTMsIDE5LCAyMywgMTQsIAotICAgIDIzNSwgMTMxLCAyNDAsIDE1MiwgMjMsIDE0LCAyNDAsIDIzNSwgMjUzLCAxOSwgMjMsIDE0LCAyNDAsIDIzNSwgMjQwLCAKLSAgICAxNTIsIDIzLCAxNCwgMjM1LCA1MywgMjA2LCAyMzgsIDQ5LCAyMywgMTQsIDIzNSwgNTMsIDIwNiwgMjQxLCAxMzIsIDIzLCAKLSAgICAxNCwgMjM4LCAxNjEsIDI0MiwgMiwgMjMsIDE0LCAyNTQsIDQwLCAyNDIsIDIsIDIzLCAxNCwgMjM3LCAxNDAsIDI0MCwgCi0gICAgMjQzLCAyMywgMTQsIDIzNywgMTQwLCAyMzcsIDE3MywgMjMsIDE0LCAyMjgsIDIxNiwgMjQwLCAyNDMsIDIzLCAxNCwgMjI4LCAKLSAgICAyMTYsIDIzNywgMTczLCAyMywgMTQsIDI0NCwgMTU1LCAyNDAsIDE0OCwgMjMsIDE0LCAyNDIsIDI0LCAyNDAsIDE0OCwgMjMsIAotICAgIDE0LCAxMzIsIDI0MCwgMTQ4LCAyMywgMTQsIDIzNSwgNTMsIDI0MCwgMTQ4LCAyMywgMTQsIDIzNywgMTEyLCAyNDAsIDE0OCwgCi0gICAgMjMsIDE0LCAyMzIsIDYsIDI0MCwgMTQ4LCAyMywgMTQsIDIyNywgMjExLCAyNDAsIDE0OCwgMjMsIDE0LCAyMjgsIDIxOCwgCi0gICAgMjQwLCAxNDgsIDIzLCAxNCwgMTY4LCAyMzUsIDU2LCAyMjcsIDIxMiwgMjQwLCAxNDgsIDIzLCAxNCwgMjU1LCA3NCwgMjMxLCAKLSAgICAyMjYsIDIzLCAxNCwgNzksIDIzMSwgMjI2LCAyMywgMTQsIDIzNywgNDAsIDI1NSwgNzQsIDIzMSwgMjI2LCAyMywgMTQsIAotICAgIDM3LCAyMzMsIDg0LCAyMzcsIDkwLCAyMywgMTQsIDM3LCAyMzMsIDg0LCAyMzcsIDQ1LCAyMywgMTQsIDIzMywgODAsIDIzMywgCi0gICAgODQsIDk5LCAyMzcsIDkwLCAyMywgMTQsIDIzMywgODAsIDIzMywgODQsIDk5LCAyMzcsIDQ1LCAyMywgMTQsIDIzMywgODAsIAotICAgIDIzMywgODQsIDQyLCAyMzcsIDkwLCAyMywgMTQsIDIzMywgODAsIDIzMywgODQsIDQyLCAyMzcsIDQ1LCAyMywgMTQsIDIzMywgCi0gICAgODAsIDIzMywgODQsIDQxLCAyMzcsIDkwLCAyMywgMTQsIDIzMywgODAsIDIzMywgODQsIDQxLCAyMzcsIDQ1LCAyMywgMTQsIAotICAgIDIzMywgODAsIDIzMywgODQsIDEwMywgMjM3LCA5MCwgMjMsIDE0LCAyMzMsIDgwLCAyMzMsIDg0LCAxMDMsIDIzNywgNDUsIAotICAgIDIzLCAxNCwgMjMzLCA4MCwgMjMzLCA4NCwgOTksIDQxLCAyMzcsIDkwLCAyMywgMTQsIDIzMywgODAsIDIzMywgODQsIDk5LCAKLSAgICA0MSwgMjM3LCA0NSwgMjMsIDE0LCAyNDcsIDE3NiwgMjMzLCA4NCwgMjM3LCA5MCwgMjMsIDE0LCAyNDcsIDE3NiwgMjMzLCAKLSAgICA4NCwgMjM3LCA0NSwgMjMsIDE0LCAyMjcsIDE1NCwgMjMzLCA4NCwgMTAzLCAyMzcsIDkwLCAyMywgMTQsIDIyNywgMTU0LCAKLSAgICAyMzMsIDg0LCAxMDMsIDIzNywgNDUsIDIzLCAxNCwgMjI5LCAxNjksIDIzMSwgMjI2LCAyMywgMTQsIDI1MiwgNzksIDIzMSwgCi0gICAgMjI2LCAyMywgMTQsIDIzMywgODQsIDIzNywgNDUsIDIzLCAxNCwgMjUxLCA3OCwgMjMxLCAyMjYsIDIzLCAxNCwgMjM1LCAKLSAgICAxNTksIDIzMywgODQsIDIzNywgOTAsIDIzLCAxNCwgMjM1LCAxNTksIDIzMywgODQsIDIzNywgNDUsIDIzLCAxNCwgMjM3LCAKLSAgICA0NiwgMjMsIDE0LCAyNDIsIDI0LCAyNDAsIDE4NiwgMjMsIDE0LCAxMzIsIDI0MCwgMTg2LCAyMywgMTQsIDIzNSwgNTMsIAotICAgIDI0MCwgMTg2LCAyMywgMTQsIDIzNywgMTEyLCAyNDAsIDE4NiwgMjMsIDE0LCAyMzIsIDYsIDI0MCwgMTg2LCAyMywgMTQsIAotICAgIDIyNywgMjExLCAyNDAsIDE4NiwgMjMsIDE0LCAyMjgsIDIxOCwgMjQwLCAxODYsIDIzLCAxNCwgMTY4LCAyMzUsIDU2LCAKLSAgICAyMjcsIDIxMiwgMjQwLCAxODYsIDIzLCAxNCwgMzYsIDI0MCwgMjE0LCAyMywgMTQsIDM2LCAyMjksIDE1MCwgMjQwLCAyMTQsIAotICAgIDIzLCAxNCwgMzYsIDIzMCwgMjE0LCAyMywgMTQsIDM2LCAyMzAsIDIxNSwgMjMsIDE0LCAzNiwgMjMwLCAyMTYsIDIzLCAxNCwgCi0gICAgMjMzLCAxNjQsIDIzMCwgMjE0LCAyMywgMTQsIDIzMywgMTY0LCAyMzAsIDIxNSwgMjMsIDE0LCAyMzMsIDE2NCwgMjMwLCAKLSAgICAyMTYsIDIzLCAxNCwgMzYsIDIyOCwgMjI2LCAyNDYsIDE2NCwgMjMsIDE0LCAzNiwgMjM2LCA3OSwgMjMsIDE0LCAzNiwgCi0gICAgMjM2LCA4MCwgMjMsIDE0LCAzNiwgMjM2LCA4MSwgMjMsIDE0LCAzNiwgMjM2LCA4MiwgMjMsIDE0LCAzNiwgMjM2LCA4MywgCi0gICAgMjMsIDE0LCAyNDAsIDIwNSwgMjQxLCA5OSwgMjMsIDE0LCAyNTIsIDI1NSwgMjQxLCA5OSwgMjMsIDE0LCAyNDAsIDIwNSwgCi0gICAgMjQ3LCA1NywgMjMsIDE0LCAyNTIsIDI1NSwgMjQ3LCA1NywgMjMsIDE0LCAyNDAsIDIwNSwgMjQxLCAyNDYsIDIzLCAxNCwgCi0gICAgMjUyLCAyNTUsIDI0MSwgMjQ2LCAyMywgMTQsIDI0MCwgMjA1LCAyMzUsIDIwMCwgMjMsIDE0LCAyNTIsIDI1NSwgMjM1LCAKLSAgICAyMDAsIDIzLCAxNCwgMzYsIDIzNSwgMjQsIDIzLCAxNCwgMzYsIDIzMywgMjgsIDIzLCAxNCwgMzYsIDIzNywgMCwgMjMsIAotICAgIDE0LCAzNiwgMjI3LCAxNzksIDIzLCAxNCwgMzYsIDIzNCwgMTUxLCAyMywgMTQsIDM2LCAyMjMsIDQ5LCAyMywgMTQsIDM2LCAKLSAgICAyMjMsIDU4LCAyMywgMTQsIDM2LCAyMzksIDkwLCAyMywgMTQsIDIzMCwgMTc0LCAyNTMsIDE5LCAyMywgMTQsIDIzMCwgCi0gICAgMTc0LCAyNDAsIDE1MiwgMjMsIDE0LCAzNiwgMjQzLCA3NiwgMjMsIDE0LCAzNiwgMjUxLCAxODMsIDIzLCAxNCwgMzYsIAotICAgIDI0MywgMTA3LCAyMywgMTQsIDM2LCAyNDAsIDUsIDIzLCAxNCwgMzYsIDI0MiwgMjAwLCAyMywgMTQsIDM2LCA0NywgMjM1LCAKLSAgICAxNDIsIDIzLCAxNCwgMzYsIDIzNywgNDksIDIzNSwgMTQyLCAyMywgMTQsIDIyOSwgNTYsIDIzLCAxNCwgMjM2LCAyNDUsIAotICAgIDIzLCAxNCwgMjU0LCAxOTMsIDIzLCAxNCwgMjM5LCAxOTcsIDIzLCAxNCwgMjM5LCAxMDYsIDIzLCAxNCwgMjM4LCAyMjQsIAotICAgIDIzLCAxNCwgMjMwLCAyNDEsIDIzLCAxNCwgMjI4LCAyMzYsIDIzLCAxNCwgMjQxLCAxNDUsIDI0OCwgMTE2LCAyMzcsIDg0LCAKLSAgICAyMywgMTQsIDI0MSwgMTQ1LCAyNDgsIDExNiwgMjU0LCAyNTIsIDIzNywgODQsIDIzLCAxNCwgMjU0LCAxNjEsIDIzLCAxNCwgCi0gICAgMjQyLCAxMywgMjMsIDE0LCAyMzMsIDcwLCAyNDIsIDEzLCAyMywgMTQsIDI0OCwgMTg1LCAyMzcsIDg0LCAyMywgMTQsIAotICAgIDI0OCwgMTg1LCAyNTMsIDE5LCAyMywgMTQsIDIzMywgMTAzLCAyMzMsIDM1LCAyMywgMTQsIDIzMywgMTAzLCAyMzMsIDM2LCAKLSAgICAyMywgMTQsIDIzMywgMTAzLCAyMzMsIDM3LCAyMywgMTQsIDIzMywgMTAzLCAyMzMsIDM4LCAyMywgMTQsIDIzMywgMTAzLCAKLSAgICAyMzMsIDM5LCAyMywgMTQsIDIzMywgMTAzLCAyMzMsIDQwLCAyMywgMTQsIDIzMywgMTAzLCAyMzMsIDQxLCAyMywgMTQsIAotICAgIDIzMywgMTAzLCAyMzMsIDQyLCAyMywgMTQsIDIzMywgMTAzLCAyMzMsIDQzLCAyMywgMTQsIDIzMywgMTAzLCAyMzEsIDE0NiwgCi0gICAgMjMsIDE0LCAyMzMsIDEwMywgMjMxLCAxNDcsIDIzLCAxNCwgMjI5LCAyMiwgMjMsIDE0LCAyMjksIDQxLCAyMywgMTQsIAotICAgIDI1MiwgMjU1LCAxMDYsIDIzNiwgMjQxLCAyMywgMTQsIDIzNywgMTc3LCAyMzcsIDg0LCAyMywgMTQsIDM2LCAxMDMsIDI0NywgCi0gICAgNjgsIDIzLCAxNCwgMzYsIDk5LCAyNDcsIDY4LCAyMywgMTQsIDM2LCAyMzIsIDIwMiwgMjMsIDE0LCAzNiwgMjUxLCAyMjksIAotICAgIDIzMSwgMTIxLCAyMywgMTQsIDI0MSwgNjAsIDc2LCAyMywgMTQsIDI0MSwgNjAsIDk5LCA3NiwgMjMsIDE0LCAxMzIsIDI0MSwgCi0gICAgNjAsIDc2LCAyMywgMTQsIDIzMiwgMjUsIDI1MywgMTksIDIzLCAxNCwgMjMyLCAyNSwgMjQwLCAxNTIsIDIzLCAxNCwgMiwgCi0gICAgMjI5LCAxOSwgMjMsIDE0LCAyNDMsIDI3LCAyMywgMTQsIDI0OSwgMTc4LCAyNDcsIDI0MSwgMjMsIDE0LCAyMzYsIDE1MCwgCi0gICAgMjMsIDE0LCAyMzgsIDIyLCAyMywgMTQsIDIzNiwgMTUsIDIzLCAxNCwgMjMwLCAxNjksIDIzNywgOTAsIDIzLCAxNCwgMjMwLCAKLSAgICAxNjksIDIzNywgNDUsIDIzLCAxNCwgMjM2LCAxNTcsIDIzLCAxNCwgMjM4LCAyNSwgMjM3LCA0NSwgMjMsIDE0LCAyMzAsIAotICAgIDE3MCwgMjM3LCA5MCwgMjMsIDE0LCAyMzAsIDE3MCwgMjM3LCA0NSwgMjMsIDE0LCAyNDgsIDQxLCAyMzcsIDkwLCAyMywgCi0gICAgMTQsIDI0OCwgNDEsIDIzNywgNDUsIDIzLCAxNCwgMjQxLCAxODQsIDIzMywgMjI3LCAyNDAsIDE0OCwgMjMsIDE0LCAyNDEsIAotICAgIDE4NCwgMjMwLCAxNTUsIDI0MCwgMTQ4LCAyMywgMTQsIDIzOCwgMTMxLCAyNDAsIDE0OCwgMjMsIDE0LCAyMzAsIDE2OSwgCi0gICAgMjQwLCAxNDgsIDIzLCAxNCwgMjM4LCAyNSwgMjQwLCAxNDgsIDIzLCAxNCwgMjMwLCAxNzAsIDI0MCwgMTQ4LCAyMywgMTQsIAotICAgIDIzNywgMTIxLCAyMzIsIDMsIDI1MywgODYsIDIzMCwgMTM5LCAyMzIsIDM0LCAyMywgMTQsIDIzNywgMTIxLCAyMzIsIDMsIAotICAgIDI1MywgODYsIDIzMCwgMTM5LCAyMjksIDE5OSwgMjMsIDE0LCAyMzcsIDEyMSwgMjMyLCAzLCAyNTMsIDg2LCAyMzAsIDEzOSwgCi0gICAgMjMzLCAyMjcsIDIyNywgMjAxLCAyMywgMTQsIDIzNywgMTIxLCAyMjksIDE3NiwgMjUzLCA4NiwgMjMwLCAxMzksIDIzMiwgCi0gICAgMzQsIDIzLCAxNCwgMjM3LCAxMjEsIDIyOSwgMTc2LCAyNTMsIDg2LCAyMzAsIDEzOSwgMjI5LCAxOTksIDIzLCAxNCwgMjM3LCAKLSAgICAxMjEsIDIyOSwgMTc2LCAyNTMsIDg2LCAyMzAsIDEzOSwgMjMwLCAxNTUsIDIyNywgMjAxLCAyMywgMTQsIDIzNywgMTIxLCAKLSAgICAyMjksIDE3NiwgMjUzLCA4NiwgMjMwLCAxMzksIDIzMCwgMTU1LCAyMjcsIDIyOCwgMjMsIDE0LCAyMzcsIDEyMSwgMjI5LCAKLSAgICAxNzYsIDI1MywgODYsIDIzMCwgMTM5LCAyMzAsIDE1NSwgMjI3LCAyMjksIDIzLCAxNCwgMjM4LCAxNjQsIDIzLCAxNCwgCi0gICAgMjMyLCAyNiwgMjU1LCA2MiwgMjQwLCAyMjAsIDIzLCAxNCwgMjMyLCAyNiwgMjU1LCA3MiwgMjQwLCAyMjAsIDIzLCAxNCwgCi0gICAgMzcsIDI1NCwgMTg1LCAyMywgMTQsIDI0MCwgNzcsIDIzLCAxNCwgMjM0LCAxOTQsIDIzLCAxNCwgMjM2LCAzMiwgMjMsIDE0LCAKLSAgICAyMzEsIDEzNywgMjMsIDE0LCAyMzIsIDk4LCAyMywgMTQsIDIzMywgNTMsIDIzLCAxNCwgMjMxLCAxMjMsIDIzLCAxNCwgCi0gICAgMjMyLCAyNTMsIDIzNSwgMTcyLCAyMywgMTQsIDIzMywgMTksIDIzNSwgMTcyLCAyMywgMTQsIDIzNCwgMjUwLCAyMzEsIAotICAgIDEzNSwgMjMsIDE0LCAyNTQsIDEyOCwgMjMwLCAxMTQsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzIsIDQ4LCAxOSwgMjQwLCAKLSAgICAxMzYsIDE1MCwgMjMyLCA0OSwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMywgNDYsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzIsIAotICAgIDUwLCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMyLCA1MSwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMywgNDcsIDE5LCAyNDAsIDEzNiwgCi0gICAgMTUwLCAyMzIsIDUyLCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMyLCA1MywgMTksIDI0MCwgMTM2LCAxNTAsIDIzMywgNDgsIDE5LCAKLSAgICAyNDAsIDEzNiwgMTUwLCAyMzEsIDE1MSwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMCwgMTk4LCAxOSwgMjQwLCAxMzYsIDE1MCwgCi0gICAgMjMwLCAxOTksIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzAsIDIwMCwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMCwgMjAxLCAxOSwgCi0gICAgMjQwLCAxMzYsIDE1MCwgMjMxLCAxNTIsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzEsIDE1MywgMTksIDI0MCwgMTM2LCAxNTAsIAotICAgIDIzMCwgMjAyLCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMwLCAyMDMsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzAsIDIwNCwgMTksIAotICAgIDI0MCwgMTM2LCAxNTAsIDIzMSwgMTU0LCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMxLCAxNTUsIDE5LCAyNDAsIDEzNiwgMTUwLCAKLSAgICAyMzEsIDE1NiwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMCwgMjA1LCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMwLCAyMDYsIDE5LCAKLSAgICAyNDAsIDEzNiwgMTUwLCAyMzAsIDIwNywgMTksIDI0MCwgMTM2LCAxNTAsIDIzMCwgMjA4LCAxOSwgMjQwLCAxMzYsIDE1MCwgCi0gICAgMjMwLCAyMDksIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzAsIDIxMCwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMCwgMjExLCAxOSwgCi0gICAgMjI4LCAxNzYsIDE1MCwgMjMyLCA0OCwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMiwgNDksIDE5LCAyMjgsIDE3NiwgMTUwLCAKLSAgICAyMzIsIDUwLCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMyLCA1MSwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMiwgNTIsIDE5LCAyMjgsIAotICAgIDE3NiwgMTUwLCAyMzIsIDUzLCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMwLCAxOTgsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzAsIAotICAgIDE5OSwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMCwgMjAwLCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMwLCAyMDEsIDE5LCAyMjgsIAotICAgIDE3NiwgMTUwLCAyMzAsIDIwMiwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMCwgMjAzLCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMwLCAKLSAgICAyMDQsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzAsIDIwNSwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMCwgMjA2LCAxOSwgMjI4LCAKLSAgICAxNzYsIDE1MCwgMjMxLCAxNTcsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzEsIDE1OCwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMSwgCi0gICAgMTU5LCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMxLCAxNjAsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzEsIDE2MSwgMTksIDIyOCwgCi0gICAgMTc2LCAxNTAsIDIzMSwgMTYyLCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMxLCAxNjMsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzEsIAotICAgIDE2NCwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMSwgMTY1LCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMxLCAxNjYsIDE5LCAyMjgsIAotICAgIDE3NiwgMTUwLCAyMzEsIDE2NywgMTksIDIyOCwgMTc2LCAxNTAsIDIzMSwgMTY4LCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMxLCAKLSAgICAxNjksIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzEsIDE3MCwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMSwgMTcxLCAxOSwgMjI4LCAKLSAgICAxNzYsIDE1MCwgMjMxLCAxNzIsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzEsIDE3MywgMTksIDIyOCwgMTc2LCAxNTAsIDIzMCwgCi0gICAgMjA3LCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMwLCAyMDgsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzAsIDIwOSwgMTksIDIyOCwgCi0gICAgMTc2LCAxNTAsIDIzMCwgMjEwLCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMwLCAyMTEsIDM2LCAxOSwgMjMsIDIzMywgMjQ3LCAKLSAgICAzNiwgMTksIDIzLCAyMzAsIDIxMywgMzYsIDE5LCAyMywgMjMwLCAxOTMsIDE5LCAyMywgMjM2LCAxMzIsIDIzMywgMTE1LCAKLSAgICAzMiwgMjM3LCA5OSwgMjM3LCAxMTEsIDMyLCAyMzQsIDEyMSwgMjM3LCA5OSwgMjM3LCAxMTEsIDMyLCAyNDMsIDIzNiwgCi0gICAgMjM3LCA5OSwgMjM3LCAxMTEsIDMyLCAyMzUsIDE2OCwgMjM1LCAxMjMsIDIzNywgMTExLCAzMiwgMjM1LCAxNjgsIDIzOSwgCi0gICAgMjgsIDIzNywgMTExLCAzMiwgMjM3LCA5OSwgMTQyLCAzMiwgMjM1LCAxMTEsIDE0MiwgMzIsIDI0NiwgMTYyLCAyMzUsIDIwLCAKLSAgICAxNDIsIDMyLCAyMzksIDExNSwgMTQyLCAzMiwgMjM0LCAxNCwgMTQyLCAzMiwgMjM1LCAxODIsIDIzNywgMjE2LCAxNDIsIAotICAgIDMyLCAyMjgsIDIzMSwgMTQyLCAzMiwgMjM1LCAyNTQsIDE0MiwgMzIsIDIyOSwgMTg3LCAxNDIsIDMyLCAyMzIsIDg4LCAKLSAgICAyNDcsIDE4NiwgMTQyLCAzMiwgMjI3LCAyMjUsIDE0NSwgMjI5LCAyNTEsIDE0MiwgMzIsIDIyOSwgMjUyLCAxNDIsIDMyLCAKLSAgICAyMjgsIDE3NCwgMTQyLCAzMiwgMjMyLCAyNywgMTQyLCAzMiwgMjI5LCA0NywgMTQyLCAzMiwgMjM4LCA0MCwgMTQyLCAzMiwgCi0gICAgMjM0LCAzNSwgMTQyLCAzMiwgMjM1LCAxNzcsIDI0MCwgMjE3LCAxNDIsIDMyLCAyMzMsIDI0OSwgMTQyLCAzMiwgMjMwLCAKLSAgICAxODQsIDE0MiwgMzIsIDIzMywgMjUzLCAxNDIsIDMyLCAyMzQsIDIwNiwgMTQyLCAzMiwgMjMwLCA5NSwgMTQyLCAzMiwgCi0gICAgMjQzLCA5MiwgMTQyLCAzMiwgMjUwLCAxNDAsIDE0MiwgMzIsIDIyOSwgMjQxLCAxNDIsIDMyLCAyMzEsIDY0LCAxNDIsIDMyLCAKLSAgICAyMzYsIDYyLCAxNDIsIDMyLCAyMzYsIDI0LCAxNDIsIDMyLCAyMjcsIDIyNCwgMTQyLCAzMiwgMTgsIDIzMCwgOTYsIDE0MiwgCi0gICAgMzIsIDIzNCwgMTgwLCAxNDIsIDMyLCAyMzYsIDEzMSwgMTQyLCAzMiwgMjMwLCAyMzUsIDE0MiwgMzIsIDIzNCwgMTM5LCAKLSAgICAxNDIsIDMyLCAyMzEsIDcyLCAxNDIsIDMyLCAyMzMsIDMzLCAxNDIsIDMyLCAyMzYsIDE5NSwgMTQyLCAzMiwgMjMyLCAxOTUsIAotICAgIDE0MiwgMzIsIDIzMSwgMTM0LCAxNDIsIDMyLCAyNTQsIDg5LCAxNDUsIDIzOSwgMTE3LCAxNDIsIDMyLCAyMzIsIDQzLCAKLSAgICAxNDIsIDMyLCAyNDMsIDE1MSwgMTgwLCAyNDEsIDE5MSwgMTQyLCAzMiwgMjMwLCA1NSwgMTQyLCAzMiwgMjQwLCAyMywgCi0gICAgMTQyLCAzMiwgMjMxLCA3NiwgMTQyLCAzMiwgMjI5LCAxNywgMTQyLCAzMiwgMjM0LCAxODgsIDE0MiwgMzIsIDIzNiwgMjAxLCAKLSAgICAxNDIsIDMyLCAyMzYsIDg0LCAxNDIsIDMyLCAyMzUsIDQsIDE0NSwgMjM1LCAxMCwgMTQyLCAzMiwgMjMwLCAyMzgsIDE0MiwgCi0gICAgMzIsIDIzMywgMjE4LCAxNDIsIDMyLCAyMzIsIDE4MiwgMTQyLCAzMiwgMjQwLCA2NywgMTQyLCAzMiwgMjI3LCAyMjcsIAotICAgIDE0MiwgMzIsIDIzNywgNTgsIDIzOCwgMjYsIDE0MiwgMzIsIDIyOSwgMjEsIDE0MiwgMzIsIDIzMiwgMjQsIDI1MywgNzksIAotICAgIDE0MiwgMzIsIDIzNCwgMTU0LCAxNDIsIDMyLCAyMjcsIDIxNCwgMTQyLCAzMiwgMjI3LCAxNjMsIDE0MiwgMzIsIDIzOCwgCi0gICAgMTkxLCAxNDIsIDMyLCAyMzgsIDgxLCAxNDIsIDMyLCAyMzQsIDIyMiwgMTQyLCAzMiwgMjM5LCA0MiwgMTQyLCAzMiwgMjMwLCAKLSAgICAyNDQsIDE0MiwgMzIsIDIzMCwgMjQzLCAxNDIsIDMyLCAyMzQsIDU1LCAxNDIsIDMyLCAyMzAsIDU4LCAxNDIsIDMyLCAyMzEsIAotICAgIDE0MCwgMTQyLCAzMiwgMjMzLCAzMCwgMTQyLCAzMiwgMjMyLCAyMDEsIDE0MiwgMzIsIDIyOSwgMTgzLCAxNDIsIDMyLCAKLSAgICAyMzQsIDMyLCAxNDIsIDMyLCAyMzQsIDEwMCwgMTQyLCAzMiwgMjI4LCAyMjMsIDE0MiwgMzIsIDIyOSwgMjM5LCAxNDIsIAotICAgIDMyLCAyNTQsIDIyMywgMjUyLCAyMzAsIDI0MCwgNzUsIDE0MiwgMzIsIDIyNywgMjI2LCAxNDIsIDMyLCAyMzEsIDk2LCAKLSAgICAxNDIsIDMyLCAyMzEsIDcwLCAyMzMsIDg1LCAyNTMsIDIsIDI0NiwgMjI5LCAyMSwgMTE4LCAyMzMsIDg1LCAyNTMsIDIsIAotICAgIDI0NiwgMjI5LCAyMSwgMTEzLCAyMzMsIDg1LCAyNTMsIDIsIDI0NiwgMjI5LCAyMSwgMTY2LCAyMzMsIDg1LCAyNTMsIDIsIAotICAgIDI0NiwgMjI5LCAyMSwgMTU4LCAyMzMsIDg1LCAyNTMsIDIsIDI0NiwgMjI5LCAyMSwgMTczLCAyMzMsIDg1LCAyNTMsIDIsIAotICAgIDI0NiwgMjI5LCAyMSwgMTgzLCAyMzMsIDg1LCAyNTMsIDIsIDI0NiwgMjI5LCAyMSwgMTk0LCAyMzMsIDg1LCAyNTMsIDIsIAotICAgIDI0NiwgMjI5LCAyMSwgMTg3LCAyMzMsIDg1LCAyNTMsIDIsIDI0NiwgMjI5LCAyMSwgMTkyLCAyMzMsIDg1LCAyNTMsIDIsIAotICAgIDI0NiwgMjM4LCAyMSwgMTE4LCAyMzMsIDg1LCAyNTMsIDIsIDI0NiwgMjM4LCAyMSwgMTEzLCAyMzMsIDg1LCAyNTMsIDIsIAotICAgIDI0NiwgMjM4LCAyMSwgMTY2LCAyMzMsIDg1LCAyNTMsIDIsIDI0NiwgMjM4LCAyMSwgMTU4LCAyMzMsIDg1LCAyNTMsIDIsIAotICAgIDI0NiwgMjM4LCAyMSwgMTczLCAyMzMsIDg1LCAyNTMsIDIsIDI0NiwgMjM4LCAyMSwgMTgzLCAyMzMsIDg1LCAyNTMsIDIsIAotICAgIDI0NiwgMjM4LCAyMSwgMTk0LCAyMzMsIDg1LCAyNTMsIDIsIDI0NiwgMjM4LCAyMSwgMTg3LCAyMzMsIDg1LCAyNTMsIDIsIAotICAgIDI0NiwgMjM4LCAyMSwgMTkyLCAxMiwgMTgsIDYsIDU3LCAxMiwgMTgsIDYsIDI1NCwgMTg1LCAxMiwgMTgsIDYsIDI1NCwgCi0gICAgMTk0LCAxMiwgMTgsIDYsIDIyMiwgMjIyLCAxMiwgMTgsIDYsIDcyLCAxMiwgMTgsIDYsIDI1NCwgMTkxLCAxMiwgMTgsIDYsIAotICAgIDIxNCwgMTIsIDE4LCA2LCAyMTIsIDEyLCAxOCwgNiwgNzQsIDEyLCAxOCwgNiwgMjU0LCAxOTIsIDEyLCAxOCwgNiwgMjU0LCAKLSAgICAxODYsIDEyLCAxOCwgNiwgMTQ5LCAxMiwgMTgsIDYsIDE4NSwgMTIsIDE4LCA2LCAxOTksIDEyLCAxOCwgNiwgNzMsIDEyLCAKLSAgICAxOCwgNiwgMjU0LCAxODcsIDEyLCAxOCwgNiwgMjU0LCAxOTYsIDEyLCAxOCwgNiwgMTQ2LCAxMiwgMTgsIDYsIDE5MywgMTIsIAotICAgIDE4LCA2LCAyNTQsIDE4MywgMTIsIDE4LCA2LCA2NiwgMTIsIDE4LCA2LCAxOTYsIDEyLCAxOCwgNiwgMjU0LCAxOTUsIDEyLCAKLSAgICAxOCwgNiwgMjU0LCAxODQsIDEyLCAxOCwgNiwgMjU0LCAxOTAsIDEyLCAxOCwgNiwgMjU0LCAxOTMsIDEyLCAxOCwgMywgNTcsIAotICAgIDEyLCAxOCwgMywgMjU0LCAxODUsIDEyLCAxOCwgMywgMjU0LCAxOTQsIDEyLCAxOCwgMywgMjIyLCAyMjIsIDEyLCAxOCwgMywgCi0gICAgNzIsIDEyLCAxOCwgMywgMjU0LCAxOTEsIDEyLCAxOCwgMywgMjE0LCAxMiwgMTgsIDMsIDIxMiwgMTIsIDE4LCAzLCA3NCwgCi0gICAgMTIsIDE4LCAzLCAyNTQsIDE5MiwgMTIsIDE4LCAzLCAyNTQsIDE4NiwgMTIsIDE4LCAzLCAxNDksIDEyLCAxOCwgMywgMTg1LCAKLSAgICAxMiwgMTgsIDMsIDE5OSwgMTIsIDE4LCAzLCA3MywgMTIsIDE4LCAzLCAyNTQsIDE4NywgMTIsIDE4LCAzLCAyNTQsIDE5NiwgCi0gICAgMTIsIDE4LCAzLCAxNDYsIDEyLCAxOCwgMywgMTkzLCAxMiwgMTgsIDMsIDI1NCwgMTgzLCAxMiwgMTgsIDMsIDY2LCAxMiwgCi0gICAgMTgsIDMsIDE5NiwgMTIsIDE4LCAzLCAyNTQsIDE5NSwgMTIsIDE4LCAzLCAyNTQsIDE4NCwgMTIsIDE4LCAzLCAyNTQsIAotICAgIDE5MCwgMTIsIDE4LCAzLCAyNTQsIDE5MywgMTIsIDI3LCA2LCA1NywgMTIsIDI3LCA2LCAyNTQsIDE4NSwgMTIsIDI3LCA2LCAKLSAgICAyNTQsIDE5NCwgMTIsIDI3LCA2LCAyMjIsIDIyMiwgMTIsIDI3LCA2LCA3MiwgMTIsIDI3LCA2LCAyNTQsIDE5MSwgMTIsIAotICAgIDI3LCA2LCAyMTQsIDEyLCAyNywgNiwgMjEyLCAxMiwgMjcsIDYsIDc0LCAxMiwgMjcsIDYsIDI1NCwgMTkyLCAxMiwgMjcsIAotICAgIDYsIDI1NCwgMTg2LCAxMiwgMjcsIDYsIDE0OSwgMTIsIDI3LCA2LCAxODUsIDEyLCAyNywgNiwgMTk5LCAxMiwgMjcsIDYsIAotICAgIDczLCAxMiwgMjcsIDYsIDI1NCwgMTg3LCAxMiwgMjcsIDYsIDI1NCwgMTk2LCAxMiwgMjcsIDYsIDE0NiwgMTIsIDI3LCA2LCAKLSAgICAxOTMsIDEyLCAyNywgNiwgMjU0LCAxODMsIDEyLCAyNywgNiwgNjYsIDEyLCAyNywgNiwgMTk2LCAxMiwgMjcsIDYsIDI1NCwgCi0gICAgMTk1LCAxMiwgMjcsIDYsIDI1NCwgMTg0LCAxMiwgMjcsIDYsIDI1NCwgMTkwLCAxMiwgMjcsIDYsIDI1NCwgMTkzLCAxMiwgCi0gICAgMjcsIDMsIDU3LCAxMiwgMjcsIDMsIDI1NCwgMTg1LCAxMiwgMjcsIDMsIDI1NCwgMTk0LCAxMiwgMjcsIDMsIDIyMiwgMjIyLCAKLSAgICAxMiwgMjcsIDMsIDcyLCAxMiwgMjcsIDMsIDI1NCwgMTkxLCAxMiwgMjcsIDMsIDIxNCwgMTIsIDI3LCAzLCA3NCwgMTIsIAotICAgIDI3LCAzLCAyNTQsIDE5MiwgMTIsIDI3LCAzLCAyNTQsIDE4NiwgMTIsIDI3LCAzLCAxNDksIDEyLCAyNywgMywgMTg1LCAxMiwgCi0gICAgMjcsIDMsIDE5OSwgMTIsIDI3LCAzLCA3MywgMTIsIDI3LCAzLCAyNTQsIDE4NywgMTIsIDI3LCAzLCAyNTQsIDE5NiwgMTIsIAotICAgIDI3LCAzLCAxNDYsIDEyLCAyNywgMywgMTkzLCAxMiwgMjcsIDMsIDI1NCwgMTgzLCAxMiwgMjcsIDMsIDY2LCAxMiwgMjcsIAotICAgIDMsIDE5NiwgMTIsIDI3LCAzLCAyNTQsIDE5NSwgMTIsIDI3LCAzLCAyNTQsIDE4NCwgMTIsIDI3LCAzLCAyNTQsIDE5MCwgCi0gICAgMTIsIDI3LCAzLCAyNTQsIDE5MywgMTIsIDE4LCAyNywgNiwgNTcsIDEyLCAxOCwgMjcsIDYsIDI1NCwgMTg1LCAxMiwgMTgsIAotICAgIDI3LCA2LCAyNTQsIDE5NCwgMTIsIDE4LCAyNywgNiwgMjIyLCAyMjIsIDEyLCAxOCwgMjcsIDYsIDcyLCAxMiwgMTgsIDI3LCAKLSAgICA2LCAyNTQsIDE5MSwgMTIsIDE4LCAyNywgNiwgMjE0LCAxMiwgMTgsIDI3LCA2LCAyMTIsIDEyLCAxOCwgMjcsIDYsIDc0LCAKLSAgICAxMiwgMTgsIDI3LCA2LCAyNTQsIDE5MiwgMTIsIDE4LCAyNywgNiwgMjU0LCAxODYsIDEyLCAxOCwgMjcsIDYsIDE0OSwgMTIsIAotICAgIDE4LCAyNywgNiwgMTg1LCAxMiwgMTgsIDI3LCA2LCAxOTksIDEyLCAxOCwgMjcsIDYsIDczLCAxMiwgMTgsIDI3LCA2LCAKLSAgICAyNTQsIDE4NywgMTIsIDE4LCAyNywgNiwgMjU0LCAxOTYsIDEyLCAxOCwgMjcsIDYsIDE0NiwgMTIsIDE4LCAyNywgNiwgCi0gICAgMTkzLCAxMiwgMTgsIDI3LCA2LCAyNTQsIDE4MywgMTIsIDE4LCAyNywgNiwgNjYsIDEyLCAxOCwgMjcsIDYsIDE5NiwgMTIsIAotICAgIDE4LCAyNywgNiwgMjU0LCAxOTUsIDEyLCAxOCwgMjcsIDYsIDI1NCwgMTg0LCAxMiwgMTgsIDI3LCA2LCAyNTQsIDE5MCwgCi0gICAgMTIsIDE4LCAyNywgNiwgMjU0LCAxOTMsIDEyLCAxOCwgMjcsIDMsIDU3LCAxMiwgMTgsIDI3LCAzLCAyNTQsIDE4NSwgMTIsIAotICAgIDE4LCAyNywgMywgMjU0LCAxOTQsIDEyLCAxOCwgMjcsIDMsIDIyMiwgMjIyLCAxMiwgMTgsIDI3LCAzLCA3MiwgMTIsIDE4LCAKLSAgICAyNywgMywgMjU0LCAxOTEsIDEyLCAxOCwgMjcsIDMsIDIxNCwgMTIsIDE4LCAyNywgMywgMjEyLCAxMiwgMTgsIDI3LCAzLCAKLSAgICA3NCwgMTIsIDE4LCAyNywgMywgMjU0LCAxOTIsIDEyLCAxOCwgMjcsIDMsIDI1NCwgMTg2LCAxMiwgMTgsIDI3LCAzLCAxNDksIAotICAgIDEyLCAxOCwgMjcsIDMsIDE4NSwgMTIsIDE4LCAyNywgMywgMTk5LCAxMiwgMTgsIDI3LCAzLCA3MywgMTIsIDE4LCAyNywgMywgCi0gICAgMjU0LCAxODcsIDEyLCAxOCwgMjcsIDMsIDI1NCwgMTk2LCAxMiwgMTgsIDI3LCAzLCAxNDYsIDEyLCAxOCwgMjcsIDMsIAotICAgIDE5MywgMTIsIDE4LCAyNywgMywgMjU0LCAxODMsIDEyLCAxOCwgMjcsIDMsIDY2LCAxMiwgMTgsIDI3LCAzLCAxOTYsIDEyLCAKLSAgICAxOCwgMjcsIDMsIDI1NCwgMTk1LCAxMiwgMTgsIDI3LCAzLCAyNTQsIDE4NCwgMTIsIDE4LCAyNywgMywgMjU0LCAxOTAsIAotICAgIDEyLCAxOCwgMjcsIDMsIDI1NCwgMTkzLCAxMiwgOTUsIDYsIDU3LCAxMiwgOTUsIDYsIDI1NCwgMTk0LCAxMiwgOTUsIDYsIAotICAgIDIyMiwgMjIyLCAxMiwgOTUsIDYsIDIxNCwgMTIsIDk1LCA2LCAyNTQsIDE5MiwgMTIsIDk1LCA2LCAyNTQsIDE4NiwgMTIsIAotICAgIDk1LCA2LCAxOTksIDEyLCA5NSwgNiwgNzMsIDEyLCA5NSwgNiwgMjU0LCAxODcsIDEyLCA5NSwgNiwgMjU0LCAxOTYsIDEyLCAKLSAgICA5NSwgNiwgMTkzLCAxMiwgOTUsIDYsIDI1NCwgMTgzLCAxMiwgOTUsIDYsIDY2LCAxMiwgOTUsIDYsIDE5NiwgMTIsIDk1LCAKLSAgICA2LCAyNTQsIDE5NSwgMTIsIDk1LCA2LCAyNTQsIDE4NCwgMTIsIDk1LCA2LCAyNTQsIDE5MCwgMTIsIDk1LCA2LCAyNTQsIAotICAgIDE5MywgMTIsIDk1LCAzLCA1NywgMTIsIDk1LCAzLCAyNTQsIDE4NSwgMTIsIDk1LCAzLCAyNTQsIDE5NCwgMTIsIDk1LCAzLCAKLSAgICAyMjIsIDIyMiwgMTIsIDk1LCAzLCAyNTQsIDE5MSwgMTIsIDk1LCAzLCAyMTIsIDEyLCA5NSwgMywgNzQsIDEyLCA5NSwgMywgCi0gICAgMjU0LCAxOTIsIDEyLCA5NSwgMywgMjU0LCAxODYsIDEyLCA5NSwgMywgMTQ5LCAxMiwgOTUsIDMsIDE4NSwgMTIsIDk1LCAzLCAKLSAgICAxOTksIDEyLCA5NSwgMywgMjU0LCAxODcsIDEyLCA5NSwgMywgMjU0LCAxOTYsIDEyLCA5NSwgMywgMTQ2LCAxMiwgOTUsIDMsIAotICAgIDE5MywgMTIsIDk1LCAzLCAyNTQsIDE4MywgMTIsIDk1LCAzLCA2NiwgMTIsIDk1LCAzLCAxOTYsIDEyLCA5NSwgMywgMjU0LCAKLSAgICAxOTUsIDEyLCA5NSwgMywgMjU0LCAxODQsIDEyLCA5NSwgMywgMjU0LCAxOTAsIDEyLCA5NSwgMywgMjU0LCAxOTMsIDEyLCAKLSAgICAxOCwgOTUsIDYsIDU3LCAxMiwgMTgsIDk1LCA2LCAyNTQsIDE4NSwgMTIsIDE4LCA5NSwgNiwgMjU0LCAxOTQsIDEyLCAxOCwgCi0gICAgOTUsIDYsIDIyMiwgMjIyLCAxMiwgMTgsIDk1LCA2LCA3MiwgMTIsIDE4LCA5NSwgNiwgMjU0LCAxOTEsIDEyLCAxOCwgOTUsIAotICAgIDYsIDIxNCwgMTIsIDE4LCA5NSwgNiwgMjEyLCAxMiwgMTgsIDk1LCA2LCA3NCwgMTIsIDE4LCA5NSwgNiwgMjU0LCAxOTIsIAotICAgIDEyLCAxOCwgOTUsIDYsIDI1NCwgMTg2LCAxMiwgMTgsIDk1LCA2LCAxNDksIDEyLCAxOCwgOTUsIDYsIDE4NSwgMTIsIDE4LCAKLSAgICA5NSwgNiwgMTk5LCAxMiwgMTgsIDk1LCA2LCA3MywgMTIsIDE4LCA5NSwgNiwgMjU0LCAxODcsIDEyLCAxOCwgOTUsIDYsIAotICAgIDI1NCwgMTk2LCAxMiwgMTgsIDk1LCA2LCAxNDYsIDEyLCAxOCwgOTUsIDYsIDE5MywgMTIsIDE4LCA5NSwgNiwgMjU0LCAKLSAgICAxODMsIDEyLCAxOCwgOTUsIDYsIDY2LCAxMiwgMTgsIDk1LCA2LCAxOTYsIDEyLCAxOCwgOTUsIDYsIDI1NCwgMTk1LCAxMiwgCi0gICAgMTgsIDk1LCA2LCAyNTQsIDE4NCwgMTIsIDE4LCA5NSwgNiwgMjU0LCAxOTAsIDEyLCAxOCwgOTUsIDYsIDI1NCwgMTkzLCAKLSAgICAxMiwgMTgsIDk1LCAzLCA1NywgMTIsIDE4LCA5NSwgMywgMjU0LCAxODUsIDEyLCAxOCwgOTUsIDMsIDI1NCwgMTk0LCAxMiwgCi0gICAgMTgsIDk1LCAzLCAyMjIsIDIyMiwgMTIsIDE4LCA5NSwgMywgNzIsIDEyLCAxOCwgOTUsIDMsIDI1NCwgMTkxLCAxMiwgMTgsIAotICAgIDk1LCAzLCAyMTQsIDEyLCAxOCwgOTUsIDMsIDIxMiwgMTIsIDE4LCA5NSwgMywgNzQsIDEyLCAxOCwgOTUsIDMsIDI1NCwgCi0gICAgMTkyLCAxMiwgMTgsIDk1LCAzLCAyNTQsIDE4NiwgMTIsIDE4LCA5NSwgMywgMTQ5LCAxMiwgMTgsIDk1LCAzLCAxODUsIDEyLCAKLSAgICAxOCwgOTUsIDMsIDE5OSwgMTIsIDE4LCA5NSwgMywgNzMsIDEyLCAxOCwgOTUsIDMsIDI1NCwgMTg3LCAxMiwgMTgsIDk1LCAKLSAgICAzLCAyNTQsIDE5NiwgMTIsIDE4LCA5NSwgMywgMTQ2LCAxMiwgMTgsIDk1LCAzLCAxOTMsIDEyLCAxOCwgOTUsIDMsIDI1NCwgCi0gICAgMTgzLCAxMiwgMTgsIDk1LCAzLCA2NiwgMTIsIDE4LCA5NSwgMywgMTk2LCAxMiwgMTgsIDk1LCAzLCAyNTQsIDE5NSwgMTIsIAotICAgIDE4LCA5NSwgMywgMjU0LCAxODQsIDEyLCAxOCwgOTUsIDMsIDI1NCwgMTkwLCAxMiwgMTgsIDk1LCAzLCAyNTQsIDE5MywgCi0gICAgMTIsIDExMCwgNiwgNTcsIDEyLCAxMTAsIDYsIDI1NCwgMTg1LCAxMiwgMTEwLCA2LCAyMjIsIDIyMiwgMTIsIDExMCwgNiwgCi0gICAgNzIsIDEyLCAxMTAsIDYsIDI1NCwgMTkxLCAxMiwgMTEwLCA2LCAyMTQsIDEyLCAxMTAsIDYsIDI1NCwgMTkyLCAxMiwgMTEwLCAKLSAgICA2LCAyNTQsIDE4NiwgMTIsIDExMCwgNiwgMTQ5LCAxMiwgMTEwLCA2LCAxODUsIDEyLCAxMTAsIDYsIDE5OSwgMTIsIDExMCwgCi0gICAgNiwgNzMsIDEyLCAxMTAsIDYsIDI1NCwgMTg3LCAxMiwgMTEwLCA2LCAyNTQsIDE5NiwgMTIsIDExMCwgNiwgMTkzLCAxMiwgCi0gICAgMTEwLCA2LCAyNTQsIDE4MywgMTIsIDExMCwgNiwgNjYsIDEyLCAxMTAsIDYsIDE5NiwgMTIsIDExMCwgNiwgMjU0LCAxOTUsIAotICAgIDEyLCAxMTAsIDYsIDI1NCwgMTg0LCAxMiwgMTEwLCA2LCAyNTQsIDE5MCwgMTIsIDExMCwgMywgNTcsIDEyLCAxMTAsIDMsIAotICAgIDI1NCwgMTg1LCAxMiwgMTEwLCAzLCAyNTQsIDE5NCwgMTIsIDExMCwgMywgMjIyLCAyMjIsIDEyLCAxMTAsIDMsIDcyLCAxMiwgCi0gICAgMTEwLCAzLCAyNTQsIDE5MSwgMTIsIDExMCwgMywgMjE0LCAxMiwgMTEwLCAzLCAyMTIsIDEyLCAxMTAsIDMsIDc0LCAxMiwgCi0gICAgMTEwLCAzLCAyNTQsIDE5MiwgMTIsIDExMCwgMywgMjU0LCAxODYsIDEyLCAxMTAsIDMsIDE0OSwgMTIsIDExMCwgMywgMTg1LCAKLSAgICAxMiwgMTEwLCAzLCAxOTksIDEyLCAxMTAsIDMsIDczLCAxMiwgMTEwLCAzLCAyNTQsIDE4NywgMTIsIDExMCwgMywgMjU0LCAKLSAgICAxOTYsIDEyLCAxMTAsIDMsIDE0NiwgMTIsIDExMCwgMywgMTkzLCAxMiwgMTEwLCAzLCAyNTQsIDE4MywgMTIsIDExMCwgMywgCi0gICAgNjYsIDEyLCAxMTAsIDMsIDE5NiwgMTIsIDExMCwgMywgMjU0LCAxOTUsIDEyLCAxMTAsIDMsIDI1NCwgMTg0LCAxMiwgMTEwLCAKLSAgICAzLCAyNTQsIDE5MCwgMTIsIDExMCwgMywgMjU0LCAxOTMsIDEyLCAxNTksIDYsIDU3LCAxMiwgMTU5LCA2LCAyNTQsIDE4NSwgCi0gICAgMTIsIDE1OSwgNiwgMjIyLCAyMjIsIDEyLCAxNTksIDYsIDcyLCAxMiwgMTU5LCA2LCAyNTQsIDE5MSwgMTIsIDE1OSwgNiwgCi0gICAgMjE0LCAxMiwgMTU5LCA2LCA3NCwgMTIsIDE1OSwgNiwgMjU0LCAxOTIsIDEyLCAxNTksIDYsIDI1NCwgMTg2LCAxMiwgMTU5LCAKLSAgICA2LCAxNDksIDEyLCAxNTksIDYsIDE4NSwgMTIsIDE1OSwgNiwgNzMsIDEyLCAxNTksIDYsIDE5MywgMTIsIDE1OSwgNiwgCi0gICAgMjU0LCAxODMsIDEyLCAxNTksIDYsIDY2LCAxMiwgMTU5LCA2LCAxOTYsIDEyLCAxNTksIDYsIDI1NCwgMTk1LCAxMiwgMTU5LCAKLSAgICA2LCAyNTQsIDE4NCwgMTIsIDE1OSwgNiwgMjU0LCAxOTAsIDEyLCAxNTksIDMsIDU3LCAxMiwgMTU5LCAzLCAyNTQsIDE4NSwgCi0gICAgMTIsIDE1OSwgMywgMjU0LCAxOTQsIDEyLCAxNTksIDMsIDIyMiwgMjIyLCAxMiwgMTU5LCAzLCA3MiwgMTIsIDE1OSwgMywgCi0gICAgMjU0LCAxOTEsIDEyLCAxNTksIDMsIDIxNCwgMTIsIDE1OSwgMywgMjEyLCAxMiwgMTU5LCAzLCA3NCwgMTIsIDE1OSwgMywgCi0gICAgMjU0LCAxOTIsIDEyLCAxNTksIDMsIDI1NCwgMTg2LCAxMiwgMTU5LCAzLCAxNDksIDEyLCAxNTksIDMsIDE4NSwgMTIsIAotICAgIDE1OSwgMywgMTk5LCAxMiwgMTU5LCAzLCA3MywgMTIsIDE1OSwgMywgMjU0LCAxODcsIDEyLCAxNTksIDMsIDI1NCwgMTk2LCAKLSAgICAxMiwgMTU5LCAzLCAxNDYsIDEyLCAxNTksIDMsIDE5MywgMTIsIDE1OSwgMywgMjU0LCAxODMsIDEyLCAxNTksIDMsIDY2LCAKLSAgICAxMiwgMTU5LCAzLCAxOTYsIDEyLCAxNTksIDMsIDI1NCwgMTk1LCAxMiwgMTU5LCAzLCAyNTQsIDE4NCwgMTIsIDE1OSwgMywgCi0gICAgMjU0LCAxOTAsIDEyLCAxNTksIDMsIDI1NCwgMTkzLCAxMiwgMTgsIDExMCwgNiwgNTcsIDEyLCAxOCwgMTEwLCA2LCAyNTQsIAotICAgIDE4NSwgMTIsIDE4LCAxMTAsIDYsIDI1NCwgMTk0LCAxMiwgMTgsIDExMCwgNiwgMjIyLCAyMjIsIDEyLCAxOCwgMTEwLCA2LCAKLSAgICA3MiwgMTIsIDE4LCAxMTAsIDYsIDI1NCwgMTkxLCAxMiwgMTgsIDExMCwgNiwgMjE0LCAxMiwgMTgsIDExMCwgNiwgMjEyLCAKLSAgICAxMiwgMTgsIDExMCwgNiwgNzQsIDEyLCAxOCwgMTEwLCA2LCAyNTQsIDE5MiwgMTIsIDE4LCAxMTAsIDYsIDI1NCwgMTg2LCAKLSAgICAxMiwgMTgsIDExMCwgNiwgMTQ5LCAxMiwgMTgsIDExMCwgNiwgMTg1LCAxMiwgMTgsIDExMCwgNiwgMTk5LCAxMiwgMTgsIAotICAgIDExMCwgNiwgNzMsIDEyLCAxOCwgMTEwLCA2LCAyNTQsIDE4NywgMTIsIDE4LCAxMTAsIDYsIDI1NCwgMTk2LCAxMiwgMTgsIAotICAgIDExMCwgNiwgMTQ2LCAxMiwgMTgsIDExMCwgNiwgMTkzLCAxMiwgMTgsIDExMCwgNiwgMjU0LCAxODMsIDEyLCAxOCwgMTEwLCAKLSAgICA2LCA2NiwgMTIsIDE4LCAxMTAsIDYsIDE5NiwgMTIsIDE4LCAxMTAsIDYsIDI1NCwgMTk1LCAxMiwgMTgsIDExMCwgNiwgCi0gICAgMjU0LCAxODQsIDEyLCAxOCwgMTEwLCA2LCAyNTQsIDE5MCwgMTIsIDE4LCAxMTAsIDYsIDI1NCwgMTkzLCAxMiwgMTgsIAotICAgIDExMCwgMywgNTcsIDEyLCAxOCwgMTEwLCAzLCAyNTQsIDE4NSwgMTIsIDE4LCAxMTAsIDMsIDI1NCwgMTk0LCAxMiwgMTgsIAotICAgIDExMCwgMywgMjIyLCAyMjIsIDEyLCAxOCwgMTEwLCAzLCA3MiwgMTIsIDE4LCAxMTAsIDMsIDI1NCwgMTkxLCAxMiwgMTgsIAotICAgIDExMCwgMywgMjE0LCAxMiwgMTgsIDExMCwgMywgMjEyLCAxMiwgMTgsIDExMCwgMywgNzQsIDEyLCAxOCwgMTEwLCAzLCAKLSAgICAyNTQsIDE5MiwgMTIsIDE4LCAxMTAsIDMsIDI1NCwgMTg2LCAxMiwgMTgsIDExMCwgMywgMTQ5LCAxMiwgMTgsIDExMCwgMywgCi0gICAgMTg1LCAxMiwgMTgsIDExMCwgMywgMTk5LCAxMiwgMTgsIDExMCwgMywgNzMsIDEyLCAxOCwgMTEwLCAzLCAyNTQsIDE4NywgCi0gICAgMTIsIDE4LCAxMTAsIDMsIDI1NCwgMTk2LCAxMiwgMTgsIDExMCwgMywgMTQ2LCAxMiwgMTgsIDExMCwgMywgMTkzLCAxMiwgCi0gICAgMTgsIDExMCwgMywgMjU0LCAxODMsIDEyLCAxOCwgMTEwLCAzLCA2NiwgMTIsIDE4LCAxMTAsIDMsIDE5NiwgMTIsIDE4LCAKLSAgICAxMTAsIDMsIDI1NCwgMTk1LCAxMiwgMTgsIDExMCwgMywgMjU0LCAxODQsIDEyLCAxOCwgMTEwLCAzLCAyNTQsIDE5MCwgMTIsIAotICAgIDE4LCAxMTAsIDMsIDI1NCwgMTkzLCAxMiwgMzAsIDYsIDU3LCAxMiwgMzAsIDYsIDI1NCwgMTg1LCAxMiwgMzAsIDYsIDI1NCwgCi0gICAgMTk0LCAxMiwgMzAsIDYsIDIyMiwgMjIyLCAxMiwgMzAsIDYsIDcyLCAxMiwgMzAsIDYsIDI1NCwgMTkxLCAxMiwgMzAsIDYsIAotICAgIDIxNCwgMTIsIDMwLCA2LCAyMTIsIDEyLCAzMCwgNiwgNzQsIDEyLCAzMCwgNiwgMjU0LCAxOTIsIDEyLCAzMCwgNiwgMjU0LCAKLSAgICAxODYsIDEyLCAzMCwgNiwgMTQ5LCAxMiwgMzAsIDYsIDE4NSwgMTIsIDMwLCA2LCAxOTksIDEyLCAzMCwgNiwgNzMsIDEyLCAKLSAgICAzMCwgNiwgMjU0LCAxODcsIDEyLCAzMCwgNiwgMjU0LCAxOTYsIDEyLCAzMCwgNiwgMTQ2LCAxMiwgMzAsIDYsIDE5MywgMTIsIAotICAgIDMwLCA2LCAyNTQsIDE4MywgMTIsIDMwLCA2LCA2NiwgMTIsIDMwLCA2LCAxOTYsIDEyLCAzMCwgNiwgMjU0LCAxOTUsIDEyLCAKLSAgICAzMCwgNiwgMjU0LCAxODQsIDEyLCAzMCwgNiwgMjU0LCAxOTAsIDEyLCAzMCwgNiwgMjU0LCAxOTMsIDEyLCAzMCwgMywgNTcsIAotICAgIDEyLCAzMCwgMywgMjU0LCAxODUsIDEyLCAzMCwgMywgMjU0LCAxOTQsIDEyLCAzMCwgMywgMjIyLCAyMjIsIDEyLCAzMCwgMywgCi0gICAgNzIsIDEyLCAzMCwgMywgMjU0LCAxOTEsIDEyLCAzMCwgMywgMjE0LCAxMiwgMzAsIDMsIDIxMiwgMTIsIDMwLCAzLCA3NCwgCi0gICAgMTIsIDMwLCAzLCAyNTQsIDE5MiwgMTIsIDMwLCAzLCAyNTQsIDE4NiwgMTIsIDMwLCAzLCAxNDksIDEyLCAzMCwgMywgMTg1LCAKLSAgICAxMiwgMzAsIDMsIDE5OSwgMTIsIDMwLCAzLCA3MywgMTIsIDMwLCAzLCAyNTQsIDE4NywgMTIsIDMwLCAzLCAyNTQsIDE5NiwgCi0gICAgMTIsIDMwLCAzLCAxNDYsIDEyLCAzMCwgMywgMTkzLCAxMiwgMzAsIDMsIDI1NCwgMTgzLCAxMiwgMzAsIDMsIDY2LCAxMiwgCi0gICAgMzAsIDMsIDE5NiwgMTIsIDMwLCAzLCAyNTQsIDE5NSwgMTIsIDMwLCAzLCAyNTQsIDE4NCwgMTIsIDMwLCAzLCAyNTQsIAotICAgIDE5MCwgMTIsIDMwLCAzLCAyNTQsIDE5MywgMTIsIDMwLCAxOCwgNiwgNTcsIDEyLCAzMCwgMTgsIDYsIDI1NCwgMTg1LCAxMiwgCi0gICAgMzAsIDE4LCA2LCAyNTQsIDE5NCwgMTIsIDMwLCAxOCwgNiwgMjIyLCAyMjIsIDEyLCAzMCwgMTgsIDYsIDcyLCAxMiwgMzAsIAotICAgIDE4LCA2LCAyNTQsIDE5MSwgMTIsIDMwLCAxOCwgNiwgMjE0LCAxMiwgMzAsIDE4LCA2LCAyMTIsIDEyLCAzMCwgMTgsIDYsIAotICAgIDc0LCAxMiwgMzAsIDE4LCA2LCAyNTQsIDE5MiwgMTIsIDMwLCAxOCwgNiwgMjU0LCAxODYsIDEyLCAzMCwgMTgsIDYsIDE0OSwgCi0gICAgMTIsIDMwLCAxOCwgNiwgMTg1LCAxMiwgMzAsIDE4LCA2LCAxOTksIDEyLCAzMCwgMTgsIDYsIDczLCAxMiwgMzAsIDE4LCA2LCAKLSAgICAyNTQsIDE4NywgMTIsIDMwLCAxOCwgNiwgMjU0LCAxOTYsIDEyLCAzMCwgMTgsIDYsIDE0NiwgMTIsIDMwLCAxOCwgNiwgCi0gICAgMTkzLCAxMiwgMzAsIDE4LCA2LCAyNTQsIDE4MywgMTIsIDMwLCAxOCwgNiwgNjYsIDEyLCAzMCwgMTgsIDYsIDE5NiwgMTIsIAotICAgIDMwLCAxOCwgNiwgMjU0LCAxOTUsIDEyLCAzMCwgMTgsIDYsIDI1NCwgMTg0LCAxMiwgMzAsIDE4LCA2LCAyNTQsIDE5MCwgCi0gICAgMTIsIDMwLCAxOCwgNiwgMjU0LCAxOTMsIDEyLCAzMCwgMTgsIDMsIDU3LCAxMiwgMzAsIDE4LCAzLCAyNTQsIDE4NSwgMTIsIAotICAgIDMwLCAxOCwgMywgMjU0LCAxOTQsIDEyLCAzMCwgMTgsIDMsIDIyMiwgMjIyLCAxMiwgMzAsIDE4LCAzLCA3MiwgMTIsIDMwLCAKLSAgICAxOCwgMywgMjU0LCAxOTEsIDEyLCAzMCwgMTgsIDMsIDIxNCwgMTIsIDMwLCAxOCwgMywgMjEyLCAxMiwgMzAsIDE4LCAzLCAKLSAgICA3NCwgMTIsIDMwLCAxOCwgMywgMjU0LCAxOTIsIDEyLCAzMCwgMTgsIDMsIDI1NCwgMTg2LCAxMiwgMzAsIDE4LCAzLCAxNDksIAotICAgIDEyLCAzMCwgMTgsIDMsIDE4NSwgMTIsIDMwLCAxOCwgMywgMTk5LCAxMiwgMzAsIDE4LCAzLCA3MywgMTIsIDMwLCAxOCwgMywgCi0gICAgMjU0LCAxODcsIDEyLCAzMCwgMTgsIDMsIDI1NCwgMTk2LCAxMiwgMzAsIDE4LCAzLCAxNDYsIDEyLCAzMCwgMTgsIDMsIAotICAgIDE5MywgMTIsIDMwLCAxOCwgMywgMjU0LCAxODMsIDEyLCAzMCwgMTgsIDMsIDY2LCAxMiwgMzAsIDE4LCAzLCAxOTYsIDEyLCAKLSAgICAzMCwgMTgsIDMsIDI1NCwgMTk1LCAxMiwgMzAsIDE4LCAzLCAyNTQsIDE4NCwgMTIsIDMwLCAxOCwgMywgMjU0LCAxOTAsIAotICAgIDEyLCAzMCwgMTgsIDMsIDI1NCwgMTkzLCAxMiwgMzAsIDI3LCA2LCA1NywgMTIsIDMwLCAyNywgNiwgMjU0LCAxODUsIDEyLCAKLSAgICAzMCwgMjcsIDYsIDI1NCwgMTk0LCAxMiwgMzAsIDI3LCA2LCAyMjIsIDIyMiwgMTIsIDMwLCAyNywgNiwgNzIsIDEyLCAzMCwgCi0gICAgMjcsIDYsIDI1NCwgMTkxLCAxMiwgMzAsIDI3LCA2LCAyMTQsIDEyLCAzMCwgMjcsIDYsIDIxMiwgMTIsIDMwLCAyNywgNiwgCi0gICAgNzQsIDEyLCAzMCwgMjcsIDYsIDI1NCwgMTkyLCAxMiwgMzAsIDI3LCA2LCAyNTQsIDE4NiwgMTIsIDMwLCAyNywgNiwgMTQ5LCAKLSAgICAxMiwgMzAsIDI3LCA2LCAxODUsIDEyLCAzMCwgMjcsIDYsIDE5OSwgMTIsIDMwLCAyNywgNiwgNzMsIDEyLCAzMCwgMjcsIDYsIAotICAgIDI1NCwgMTg3LCAxMiwgMzAsIDI3LCA2LCAyNTQsIDE5NiwgMTIsIDMwLCAyNywgNiwgMTQ2LCAxMiwgMzAsIDI3LCA2LCAKLSAgICAxOTMsIDEyLCAzMCwgMjcsIDYsIDI1NCwgMTgzLCAxMiwgMzAsIDI3LCA2LCA2NiwgMTIsIDMwLCAyNywgNiwgMTk2LCAxMiwgCi0gICAgMzAsIDI3LCA2LCAyNTQsIDE5NSwgMTIsIDMwLCAyNywgNiwgMjU0LCAxODQsIDEyLCAzMCwgMjcsIDYsIDI1NCwgMTkwLCAKLSAgICAxMiwgMzAsIDI3LCA2LCAyNTQsIDE5MywgMTIsIDMwLCAyNywgMywgNTcsIDEyLCAzMCwgMjcsIDMsIDI1NCwgMTg1LCAxMiwgCi0gICAgMzAsIDI3LCAzLCAyNTQsIDE5NCwgMTIsIDMwLCAyNywgMywgMjIyLCAyMjIsIDEyLCAzMCwgMjcsIDMsIDcyLCAxMiwgMzAsIAotICAgIDI3LCAzLCAyNTQsIDE5MSwgMTIsIDMwLCAyNywgMywgMjE0LCAxMiwgMzAsIDI3LCAzLCAyMTIsIDEyLCAzMCwgMjcsIDMsIAotICAgIDc0LCAxMiwgMzAsIDI3LCAzLCAyNTQsIDE5MiwgMTIsIDMwLCAyNywgMywgMjU0LCAxODYsIDEyLCAzMCwgMjcsIDMsIDE0OSwgCi0gICAgMTIsIDMwLCAyNywgMywgMTg1LCAxMiwgMzAsIDI3LCAzLCAxOTksIDEyLCAzMCwgMjcsIDMsIDczLCAxMiwgMzAsIDI3LCAzLCAKLSAgICAyNTQsIDE4NywgMTIsIDMwLCAyNywgMywgMjU0LCAxOTYsIDEyLCAzMCwgMjcsIDMsIDE0NiwgMTIsIDMwLCAyNywgMywgCi0gICAgMTkzLCAxMiwgMzAsIDI3LCAzLCAyNTQsIDE4MywgMTIsIDMwLCAyNywgMywgNjYsIDEyLCAzMCwgMjcsIDMsIDE5NiwgMTIsIAotICAgIDMwLCAyNywgMywgMjU0LCAxOTUsIDEyLCAzMCwgMjcsIDMsIDI1NCwgMTg0LCAxMiwgMzAsIDI3LCAzLCAyNTQsIDE5MCwgCi0gICAgMTIsIDMwLCAyNywgMywgMjU0LCAxOTMsIDEyLCAzMCwgMTgsIDI3LCA2LCA1NywgMTIsIDMwLCAxOCwgMjcsIDYsIDI1NCwgCi0gICAgMTg1LCAxMiwgMzAsIDE4LCAyNywgNiwgMjU0LCAxOTQsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMjIsIDIyMiwgMTIsIDMwLCAKLSAgICAxOCwgMjcsIDYsIDcyLCAxMiwgMzAsIDE4LCAyNywgNiwgMjU0LCAxOTEsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMTQsIDEyLCAKLSAgICAzMCwgMTgsIDI3LCA2LCAyMTIsIDEyLCAzMCwgMTgsIDI3LCA2LCA3NCwgMTIsIDMwLCAxOCwgMjcsIDYsIDI1NCwgMTkyLCAKLSAgICAxMiwgMzAsIDE4LCAyNywgNiwgMjU0LCAxODYsIDEyLCAzMCwgMTgsIDI3LCA2LCAxNDksIDEyLCAzMCwgMTgsIDI3LCA2LCAKLSAgICAxODUsIDEyLCAzMCwgMTgsIDI3LCA2LCAxOTksIDEyLCAzMCwgMTgsIDI3LCA2LCA3MywgMTIsIDMwLCAxOCwgMjcsIDYsIAotICAgIDI1NCwgMTg3LCAxMiwgMzAsIDE4LCAyNywgNiwgMjU0LCAxOTYsIDEyLCAzMCwgMTgsIDI3LCA2LCAxNDYsIDEyLCAzMCwgCi0gICAgMTgsIDI3LCA2LCAxOTMsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNTQsIDE4MywgMTIsIDMwLCAxOCwgMjcsIDYsIDY2LCAxMiwgCi0gICAgMzAsIDE4LCAyNywgNiwgMTk2LCAxMiwgMzAsIDE4LCAyNywgNiwgMjU0LCAxOTUsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNTQsIAotICAgIDE4NCwgMTIsIDMwLCAxOCwgMjcsIDYsIDI1NCwgMTkwLCAxMiwgMzAsIDE4LCAyNywgNiwgMjU0LCAxOTMsIDEyLCAzMCwgCi0gICAgMTgsIDI3LCAzLCA1NywgMTIsIDMwLCAxOCwgMjcsIDMsIDI1NCwgMTg1LCAxMiwgMzAsIDE4LCAyNywgMywgMjU0LCAxOTQsIAotICAgIDEyLCAzMCwgMTgsIDI3LCAzLCAyMjIsIDIyMiwgMTIsIDMwLCAxOCwgMjcsIDMsIDcyLCAxMiwgMzAsIDE4LCAyNywgMywgCi0gICAgMjU0LCAxOTEsIDEyLCAzMCwgMTgsIDI3LCAzLCAyMTQsIDEyLCAzMCwgMTgsIDI3LCAzLCAyMTIsIDEyLCAzMCwgMTgsIDI3LCAKLSAgICAzLCA3NCwgMTIsIDMwLCAxOCwgMjcsIDMsIDI1NCwgMTkyLCAxMiwgMzAsIDE4LCAyNywgMywgMjU0LCAxODYsIDEyLCAzMCwgCi0gICAgMTgsIDI3LCAzLCAxNDksIDEyLCAzMCwgMTgsIDI3LCAzLCAxODUsIDEyLCAzMCwgMTgsIDI3LCAzLCAxOTksIDEyLCAzMCwgCi0gICAgMTgsIDI3LCAzLCA3MywgMTIsIDMwLCAxOCwgMjcsIDMsIDI1NCwgMTg3LCAxMiwgMzAsIDE4LCAyNywgMywgMjU0LCAxOTYsIAotICAgIDEyLCAzMCwgMTgsIDI3LCAzLCAxNDYsIDEyLCAzMCwgMTgsIDI3LCAzLCAxOTMsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTQsIAotICAgIDE4MywgMTIsIDMwLCAxOCwgMjcsIDMsIDY2LCAxMiwgMzAsIDE4LCAyNywgMywgMTk2LCAxMiwgMzAsIDE4LCAyNywgMywgCi0gICAgMjU0LCAxOTUsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTQsIDE4NCwgMTIsIDMwLCAxOCwgMjcsIDMsIDI1NCwgMTkwLCAxMiwgCi0gICAgMzAsIDE4LCAyNywgMywgMjU0LCAxOTMsIDEyLCAxODksIDYsIDU3LCAxMiwgMTg5LCA2LCAyNTQsIDE4NSwgMTIsIDE4OSwgCi0gICAgNiwgMjU0LCAxOTQsIDEyLCAxODksIDYsIDIyMiwgMjIyLCAxMiwgMTg5LCA2LCA3MiwgMTIsIDE4OSwgNiwgMjU0LCAxOTEsIAotICAgIDEyLCAxODksIDYsIDIxNCwgMTIsIDE4OSwgNiwgMjEyLCAxMiwgMTg5LCA2LCA3NCwgMTIsIDE4OSwgNiwgMjU0LCAxOTIsIAotICAgIDEyLCAxODksIDYsIDI1NCwgMTg2LCAxMiwgMTg5LCA2LCAxNDksIDEyLCAxODksIDYsIDE4NSwgMTIsIDE4OSwgNiwgMTk5LCAKLSAgICAxMiwgMTg5LCA2LCA3MywgMTIsIDE4OSwgNiwgMjU0LCAxODcsIDEyLCAxODksIDYsIDI1NCwgMTk2LCAxMiwgMTg5LCA2LCAKLSAgICAxNDYsIDEyLCAxODksIDYsIDE5MywgMTIsIDE4OSwgNiwgMjU0LCAxODMsIDEyLCAxODksIDYsIDY2LCAxMiwgMTg5LCA2LCAKLSAgICAxOTYsIDEyLCAxODksIDYsIDI1NCwgMTk1LCAxMiwgMTg5LCA2LCAyNTQsIDE4NCwgMTIsIDE4OSwgNiwgMjU0LCAxOTAsIAotICAgIDEyLCAxODksIDYsIDI1NCwgMTkzLCAxMiwgMTg5LCAzLCA1NywgMTIsIDE4OSwgMywgMjU0LCAxODUsIDEyLCAxODksIDMsIAotICAgIDI1NCwgMTk0LCAxMiwgMTg5LCAzLCAyMjIsIDIyMiwgMTIsIDE4OSwgMywgNzIsIDEyLCAxODksIDMsIDI1NCwgMTkxLCAxMiwgCi0gICAgMTg5LCAzLCAyMTQsIDEyLCAxODksIDMsIDIxMiwgMTIsIDE4OSwgMywgNzQsIDEyLCAxODksIDMsIDI1NCwgMTkyLCAxMiwgCi0gICAgMTg5LCAzLCAyNTQsIDE4NiwgMTIsIDE4OSwgMywgMTQ5LCAxMiwgMTg5LCAzLCAxODUsIDEyLCAxODksIDMsIDE5OSwgMTIsIAotICAgIDE4OSwgMywgNzMsIDEyLCAxODksIDMsIDI1NCwgMTg3LCAxMiwgMTg5LCAzLCAyNTQsIDE5NiwgMTIsIDE4OSwgMywgMTQ2LCAKLSAgICAxMiwgMTg5LCAzLCAxOTMsIDEyLCAxODksIDMsIDI1NCwgMTgzLCAxMiwgMTg5LCAzLCA2NiwgMTIsIDE4OSwgMywgMTk2LCAKLSAgICAxMiwgMTg5LCAzLCAyNTQsIDE5NSwgMTIsIDE4OSwgMywgMjU0LCAxODQsIDEyLCAxODksIDMsIDI1NCwgMTkwLCAxMiwgCi0gICAgMTg5LCAzLCAyNTQsIDE5MywgMTIsIDI3LCAzLCAyMzUsIDQ2LCA3NCwgMTIsIDI3LCAzLCAyMzUsIDQ2LCAyNTQsIDE5MiwgCi0gICAgMTIsIDE4LCA2LCAyMzcsIDcxLCAxMiwgMTgsIDYsIDI0MCwgMTYwLCAxMiwgMTgsIDYsIDIzNywgNjEsIDEyLCAxOCwgNiwgCi0gICAgMjM3LCA3NSwgMTIsIDE4LCA2LCAyMzMsIDk2LCAxMiwgMTgsIDYsIDI0MCwgMTczLCAxMiwgMTgsIDYsIDI0NiwgMjE5LCAKLSAgICAxMiwgMTgsIDYsIDIzNywgODksIDEyLCAxOCwgNiwgMjQwLCAxNDYsIDEyLCAxOCwgNiwgMjM3LCA5MSwgMTIsIDE4LCA2LCAKLSAgICAyMzcsIDgyLCAxMiwgMTgsIDYsIDI1MiwgMjI5LCAxMiwgMTgsIDYsIDI1MiwgMjI3LCAxMiwgMTgsIDYsIDI1MywgMzgsIAotICAgIDEyLCAxOCwgNiwgMjMzLCAxMDAsIDEyLCAxOCwgNiwgMjUyLCAyMjMsIDEyLCAxOCwgNiwgMjQ2LCAyMDksIDEyLCAxOCwgNiwgCi0gICAgMjQwLCAxNzgsIDk4LCAxMiwgMTgsIDYsIDIzNywgNzMsIDEyLCAxOCwgNiwgMjQ2LCAyMTIsIDEyLCAxOCwgNiwgMjMzLCAKLSAgICA5MiwgMTIsIDE4LCA2LCAyNDYsIDE5OCwgMTIsIDE4LCA2LCAyNDYsIDIwMCwgMTIsIDE4LCA2LCAyNDYsIDIwNCwgMTIsIAotICAgIDE4LCA2LCAyMzcsIDY4LCAxMiwgMTgsIDIzNywgMTM4LCAxMiwgMTgsIDMsIDIzNywgNzEsIDEyLCAxOCwgMywgMjQwLCAKLSAgICAxNjAsIDEyLCAxOCwgMywgMjM3LCA2MSwgMTIsIDE4LCAzLCAyMzcsIDc1LCAxMiwgMTgsIDMsIDIzMywgOTYsIDEyLCAxOCwgCi0gICAgMywgMjQwLCAxNzMsIDEyLCAxOCwgMywgMjQ2LCAyMTksIDEyLCAxOCwgMywgMjM3LCA4OSwgMTIsIDE4LCAzLCAyNDAsIAotICAgIDE0NiwgMTIsIDE4LCAzLCAyMzcsIDkxLCAxMiwgMTgsIDMsIDIzNywgODIsIDEyLCAxOCwgMywgMjUyLCAyMjksIDEyLCAxOCwgCi0gICAgMywgMjUyLCAyMjcsIDEyLCAxOCwgMywgMjUzLCAzOCwgMTIsIDE4LCAzLCAyMzMsIDEwMCwgMTIsIDE4LCAzLCAyNTIsIAotICAgIDIyMywgMTIsIDE4LCAzLCAyNDYsIDIwOSwgMTIsIDE4LCAzLCAzNSwgMjM3LCA3MywgMTIsIDE4LCAzLCAyMzcsIDczLCAxMiwgCi0gICAgMTgsIDMsIDI0NiwgMjEyLCAxMiwgMTgsIDMsIDIzMywgOTIsIDEyLCAxOCwgMywgMjQ2LCAxOTgsIDEyLCAxOCwgMywgMjQ2LCAKLSAgICAyMDAsIDEyLCAxOCwgMywgMjQ2LCAyMDQsIDEyLCAxOCwgMywgMjM3LCA2OCwgMTIsIDE4LCAyMzUsIDc5LCAyMjcsIDE4OCwgCi0gICAgMTIsIDE4LCAyMzUsIDI4LCA5OCwgMTIsIDE4LCAyNDAsIDE3OCwgOTgsIDEyLCAxOCwgMjQwLCAyMTAsIDk4LCAxMiwgMTgsIAotICAgIDI1MywgMTIwLCA5OCwgMTIsIDE4LCAyNTMsIDcwLCA5OCwgMTIsIDE4LCAyNTQsIDIwMCwgOTgsIDEyLCAyNywgNiwgMjM3LCAKLSAgICA3MSwgMTIsIDI3LCA2LCAyNDAsIDE2MCwgMTIsIDI3LCA2LCAyMzcsIDYxLCAxMiwgMjcsIDYsIDIzNywgNzUsIDEyLCAyNywgCi0gICAgNiwgMjMzLCA5NiwgMTIsIDI3LCA2LCAyNDAsIDE3MywgMTIsIDI3LCA2LCAyNDYsIDIxOSwgMTIsIDI3LCA2LCAyMzcsIDg5LCAKLSAgICAxMiwgMjcsIDYsIDI0MCwgMTQ2LCAxMiwgMjcsIDYsIDIzNywgOTEsIDEyLCAyNywgNiwgMjM3LCA4MiwgMTIsIDI3LCA2LCAKLSAgICAyNTIsIDIyOSwgMTIsIDI3LCA2LCAyNTIsIDIyNywgMTIsIDI3LCA2LCAyNTMsIDM4LCAxMiwgMjcsIDYsIDIzMywgMTAwLCAKLSAgICAxMiwgMjcsIDYsIDI1MiwgMjIzLCAxMiwgMjcsIDYsIDI0NiwgMjA5LCAxMiwgMjcsIDYsIDI0MCwgMTc4LCA5OCwgMTIsIAotICAgIDI3LCA2LCAyMzcsIDczLCAxMiwgMjcsIDYsIDI0NiwgMjEyLCAxMiwgMjcsIDYsIDIzMywgOTIsIDEyLCAyNywgNiwgMjQ2LCAKLSAgICAxOTgsIDEyLCAyNywgNiwgMjQ2LCAyMDAsIDEyLCAyNywgNiwgMjQ2LCAyMDQsIDEyLCAyNywgNiwgMjM3LCA2OCwgMTIsIAotICAgIDI3LCAyMzcsIDEzOCwgMTIsIDI3LCAzLCAyMzcsIDcxLCAxMiwgMjcsIDMsIDI0MCwgMTYwLCAxMiwgMjcsIDMsIDIzNywgCi0gICAgNjEsIDEyLCAyNywgMywgMjM3LCA3NSwgMTIsIDI3LCAzLCAyMzMsIDk2LCAxMiwgMjcsIDMsIDI0MCwgMTczLCAxMiwgMjcsIAotICAgIDMsIDI0NiwgMjE5LCAxMiwgMjcsIDMsIDIzNywgODksIDEyLCAyNywgMywgMjQwLCAxNDYsIDEyLCAyNywgMywgMjM3LCA5MSwgCi0gICAgMTIsIDI3LCAzLCAyMzcsIDgyLCAxMiwgMjcsIDMsIDI1MiwgMjI5LCAxMiwgMjcsIDMsIDI1MiwgMjI3LCAxMiwgMjcsIDMsIAotICAgIDI1MywgMzgsIDEyLCAyNywgMywgMjMzLCAxMDAsIDEyLCAyNywgMywgMjUyLCAyMjMsIDEyLCAyNywgMywgMjQ2LCAyMDksIAotICAgIDEyLCAyNywgMywgMzUsIDIzNywgNzMsIDEyLCAyNywgMywgMjM3LCA3MywgMTIsIDI3LCAzLCAyNDYsIDIxMiwgMTIsIDI3LCAKLSAgICAzLCAyMzMsIDkyLCAxMiwgMjcsIDMsIDI0NiwgMTk4LCAxMiwgMjcsIDMsIDI0NiwgMjAwLCAxMiwgMjcsIDMsIDI0NiwgCi0gICAgMjA0LCAxMiwgMjcsIDMsIDIzNywgNjgsIDEyLCAyNywgMjM1LCA3OSwgMjI3LCAxODgsIDEyLCAyNywgMjM1LCAyOCwgOTgsIAotICAgIDEyLCAyNywgMjQwLCAxNzgsIDk4LCAxMiwgMjcsIDI0MCwgMjEwLCA5OCwgMTIsIDI3LCAyNTMsIDEyMCwgOTgsIDEyLCAyNywgCi0gICAgMjUzLCA3MCwgOTgsIDEyLCAyNywgMjU0LCAyMDAsIDk4LCAxMiwgMTgsIDI3LCA2LCAyMzcsIDcxLCAxMiwgMTgsIDI3LCA2LCAKLSAgICAyNDAsIDE2MCwgMTIsIDE4LCAyNywgNiwgMjM3LCA2MSwgMTIsIDE4LCAyNywgNiwgMjM3LCA3NSwgMTIsIDE4LCAyNywgNiwgCi0gICAgMjMzLCA5NiwgMTIsIDE4LCAyNywgNiwgMjQwLCAxNzMsIDEyLCAxOCwgMjcsIDYsIDI0NiwgMjE5LCAxMiwgMTgsIDI3LCA2LCAKLSAgICAyMzcsIDg5LCAxMiwgMTgsIDI3LCA2LCAyNDAsIDE0NiwgMTIsIDE4LCAyNywgNiwgMjM3LCA5MSwgMTIsIDE4LCAyNywgNiwgCi0gICAgMjM3LCA4MiwgMTIsIDE4LCAyNywgNiwgMjUyLCAyMjksIDEyLCAxOCwgMjcsIDYsIDI1MiwgMjI3LCAxMiwgMTgsIDI3LCA2LCAKLSAgICAyNTMsIDM4LCAxMiwgMTgsIDI3LCA2LCAyMzMsIDEwMCwgMTIsIDE4LCAyNywgNiwgMjUyLCAyMjMsIDEyLCAxOCwgMjcsIDYsIAotICAgIDI0NiwgMjA5LCAxMiwgMTgsIDI3LCA2LCAyNDAsIDE3OCwgOTgsIDEyLCAxOCwgMjcsIDYsIDIzNywgNzMsIDEyLCAxOCwgCi0gICAgMjcsIDYsIDI0NiwgMjEyLCAxMiwgMTgsIDI3LCA2LCAyMzMsIDkyLCAxMiwgMTgsIDI3LCA2LCAyNDYsIDE5OCwgMTIsIDE4LCAKLSAgICAyNywgNiwgMjQ2LCAyMDAsIDEyLCAxOCwgMjcsIDYsIDI0NiwgMjA0LCAxMiwgMTgsIDI3LCA2LCAyMzcsIDY4LCAxMiwgMTgsIAotICAgIDI3LCAyMzcsIDEzOCwgMTIsIDE4LCAyNywgMywgMjM3LCA3MSwgMTIsIDE4LCAyNywgMywgMjQwLCAxNjAsIDEyLCAxOCwgCi0gICAgMjcsIDMsIDIzNywgNjEsIDEyLCAxOCwgMjcsIDMsIDIzNywgNzUsIDEyLCAxOCwgMjcsIDMsIDIzMywgOTYsIDEyLCAxOCwgCi0gICAgMjcsIDMsIDI0MCwgMTczLCAxMiwgMTgsIDI3LCAzLCAyNDYsIDIxOSwgMTIsIDE4LCAyNywgMywgMjM3LCA4OSwgMTIsIDE4LCAKLSAgICAyNywgMywgMjQwLCAxNDYsIDEyLCAxOCwgMjcsIDMsIDIzNywgOTEsIDEyLCAxOCwgMjcsIDMsIDIzNywgODIsIDEyLCAxOCwgCi0gICAgMjcsIDMsIDI1MiwgMjI5LCAxMiwgMTgsIDI3LCAzLCAyNTIsIDIyNywgMTIsIDE4LCAyNywgMywgMjUzLCAzOCwgMTIsIDE4LCAKLSAgICAyNywgMywgMjMzLCAxMDAsIDEyLCAxOCwgMjcsIDMsIDI1MiwgMjIzLCAxMiwgMTgsIDI3LCAzLCAyNDYsIDIwOSwgMTIsIAotICAgIDE4LCAyNywgMywgMzUsIDIzNywgNzMsIDEyLCAxOCwgMjcsIDMsIDIzNywgNzMsIDEyLCAxOCwgMjcsIDMsIDI0NiwgMjEyLCAKLSAgICAxMiwgMTgsIDI3LCAzLCAyMzMsIDkyLCAxMiwgMTgsIDI3LCAzLCAyNDYsIDE5OCwgMTIsIDE4LCAyNywgMywgMjQ2LCAyMDAsIAotICAgIDEyLCAxOCwgMjcsIDMsIDI0NiwgMjA0LCAxMiwgMTgsIDI3LCAzLCAyMzcsIDY4LCAxMiwgMTgsIDI3LCAyMzUsIDc5LCAKLSAgICAyMjcsIDE4OCwgMTIsIDE4LCAyNywgMjM1LCAyOCwgOTgsIDEyLCAxOCwgMjcsIDI0MCwgMTc4LCA5OCwgMTIsIDE4LCAyNywgCi0gICAgMjQwLCAyMTAsIDk4LCAxMiwgMTgsIDI3LCAyNTMsIDEyMCwgOTgsIDEyLCAxOCwgMjcsIDI1MywgNzAsIDk4LCAxMiwgMTgsIAotICAgIDI3LCAyNTQsIDIwMCwgOTgsIDEyLCAzMCwgMTgsIDYsIDIzNywgNzEsIDEyLCAzMCwgMTgsIDYsIDI0MCwgMTYwLCAxMiwgCi0gICAgMzAsIDE4LCA2LCAyMzcsIDYxLCAxMiwgMzAsIDE4LCA2LCAyMzcsIDc1LCAxMiwgMzAsIDE4LCA2LCAyMzMsIDk2LCAxMiwgCi0gICAgMzAsIDE4LCA2LCAyNDAsIDE3MywgMTIsIDMwLCAxOCwgNiwgMjQ2LCAyMTksIDEyLCAzMCwgMTgsIDYsIDIzNywgODksIDEyLCAKLSAgICAzMCwgMTgsIDYsIDI0MCwgMTQ2LCAxMiwgMzAsIDE4LCA2LCAyMzcsIDkxLCAxMiwgMzAsIDE4LCA2LCAyMzcsIDgyLCAxMiwgCi0gICAgMzAsIDE4LCA2LCAyNTIsIDIyOSwgMTIsIDMwLCAxOCwgNiwgMjUyLCAyMjcsIDEyLCAzMCwgMTgsIDYsIDI1MywgMzgsIDEyLCAKLSAgICAzMCwgMTgsIDYsIDIzMywgMTAwLCAxMiwgMzAsIDE4LCA2LCAyNTIsIDIyMywgMTIsIDMwLCAxOCwgNiwgMjQ2LCAyMDksIAotICAgIDEyLCAzMCwgMTgsIDYsIDI0MCwgMTc4LCA5OCwgMTIsIDMwLCAxOCwgNiwgMjM3LCA3MywgMTIsIDMwLCAxOCwgNiwgMjQ2LCAKLSAgICAyMTIsIDEyLCAzMCwgMTgsIDYsIDIzMywgOTIsIDEyLCAzMCwgMTgsIDYsIDI0NiwgMTk4LCAxMiwgMzAsIDE4LCA2LCAyNDYsIAotICAgIDIwMCwgMTIsIDMwLCAxOCwgNiwgMjQ2LCAyMDQsIDEyLCAzMCwgMTgsIDYsIDIzNywgNjgsIDEyLCAzMCwgMTgsIDIzNywgCi0gICAgMTM4LCAxMiwgMzAsIDE4LCAzLCAyMzcsIDcxLCAxMiwgMzAsIDE4LCAzLCAyNDAsIDE2MCwgMTIsIDMwLCAxOCwgMywgMjM3LCAKLSAgICA2MSwgMTIsIDMwLCAxOCwgMywgMjM3LCA3NSwgMTIsIDMwLCAxOCwgMywgMjMzLCA5NiwgMTIsIDMwLCAxOCwgMywgMjQwLCAKLSAgICAxNzMsIDEyLCAzMCwgMTgsIDMsIDI0NiwgMjE5LCAxMiwgMzAsIDE4LCAzLCAyMzcsIDg5LCAxMiwgMzAsIDE4LCAzLCAyNDAsIAotICAgIDE0NiwgMTIsIDMwLCAxOCwgMywgMjM3LCA5MSwgMTIsIDMwLCAxOCwgMywgMjM3LCA4MiwgMTIsIDMwLCAxOCwgMywgMjUyLCAKLSAgICAyMjksIDEyLCAzMCwgMTgsIDMsIDI1MiwgMjI3LCAxMiwgMzAsIDE4LCAzLCAyNTMsIDM4LCAxMiwgMzAsIDE4LCAzLCAyMzMsIAotICAgIDEwMCwgMTIsIDMwLCAxOCwgMywgMjUyLCAyMjMsIDEyLCAzMCwgMTgsIDMsIDI0NiwgMjA5LCAxMiwgMzAsIDE4LCAzLCAzNSwgCi0gICAgMjM3LCA3MywgMTIsIDMwLCAxOCwgMywgMjM3LCA3MywgMTIsIDMwLCAxOCwgMywgMjQ2LCAyMTIsIDEyLCAzMCwgMTgsIDMsIAotICAgIDIzMywgOTIsIDEyLCAzMCwgMTgsIDMsIDI0NiwgMTk4LCAxMiwgMzAsIDE4LCAzLCAyNDYsIDIwMCwgMTIsIDMwLCAxOCwgMywgCi0gICAgMjQ2LCAyMDQsIDEyLCAzMCwgMTgsIDMsIDIzNywgNjgsIDEyLCAzMCwgMTgsIDIzNSwgNzksIDIyNywgMTg4LCAxMiwgMzAsIAotICAgIDE4LCAyMzUsIDI4LCA5OCwgMTIsIDMwLCAxOCwgMjQwLCAxNzgsIDk4LCAxMiwgMzAsIDE4LCAyNDAsIDIxMCwgOTgsIDEyLCAKLSAgICAzMCwgMTgsIDI1MywgMTIwLCA5OCwgMTIsIDMwLCAxOCwgMjUzLCA3MCwgOTgsIDEyLCAzMCwgMTgsIDI1NCwgMjAwLCA5OCwgCi0gICAgMTIsIDMwLCAxOCwgMjcsIDYsIDIzNywgNzEsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNDAsIDE2MCwgMTIsIDMwLCAxOCwgMjcsIAotICAgIDYsIDIzNywgNjEsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMzcsIDc1LCAxMiwgMzAsIDE4LCAyNywgNiwgMjMzLCA5NiwgMTIsIAotICAgIDMwLCAxOCwgMjcsIDYsIDI0MCwgMTczLCAxMiwgMzAsIDE4LCAyNywgNiwgMjQ2LCAyMTksIDEyLCAzMCwgMTgsIDI3LCA2LCAKLSAgICAyMzcsIDg5LCAxMiwgMzAsIDE4LCAyNywgNiwgMjQwLCAxNDYsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMzcsIDkxLCAxMiwgMzAsIAotICAgIDE4LCAyNywgNiwgMjM3LCA4MiwgMTIsIDMwLCAxOCwgMjcsIDYsIDI1MiwgMjI5LCAxMiwgMzAsIDE4LCAyNywgNiwgMjUyLCAKLSAgICAyMjcsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNTMsIDM4LCAxMiwgMzAsIDE4LCAyNywgNiwgMjMzLCAxMDAsIDEyLCAzMCwgMTgsIAotICAgIDI3LCA2LCAyNTIsIDIyMywgMTIsIDMwLCAxOCwgMjcsIDYsIDI0NiwgMjA5LCAxMiwgMzAsIDE4LCAyNywgNiwgMjQwLCAKLSAgICAxNzgsIDk4LCAxMiwgMzAsIDE4LCAyNywgNiwgMjM3LCA3MywgMTIsIDMwLCAxOCwgMjcsIDYsIDI0NiwgMjEyLCAxMiwgMzAsIAotICAgIDE4LCAyNywgNiwgMjMzLCA5MiwgMTIsIDMwLCAxOCwgMjcsIDYsIDI0NiwgMTk4LCAxMiwgMzAsIDE4LCAyNywgNiwgMjQ2LCAKLSAgICAyMDAsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNDYsIDIwNCwgMTIsIDMwLCAxOCwgMjcsIDYsIDIzNywgNjgsIDEyLCAzMCwgMTgsIAotICAgIDI3LCAyMzcsIDEzOCwgMTIsIDMwLCAxOCwgMjcsIDMsIDIzNywgNzEsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNDAsIDE2MCwgCi0gICAgMTIsIDMwLCAxOCwgMjcsIDMsIDIzNywgNjEsIDEyLCAzMCwgMTgsIDI3LCAzLCAyMzcsIDc1LCAxMiwgMzAsIDE4LCAyNywgCi0gICAgMywgMjMzLCA5NiwgMTIsIDMwLCAxOCwgMjcsIDMsIDI0MCwgMTczLCAxMiwgMzAsIDE4LCAyNywgMywgMjQ2LCAyMTksIDEyLCAKLSAgICAzMCwgMTgsIDI3LCAzLCAyMzcsIDg5LCAxMiwgMzAsIDE4LCAyNywgMywgMjQwLCAxNDYsIDEyLCAzMCwgMTgsIDI3LCAzLCAKLSAgICAyMzcsIDkxLCAxMiwgMzAsIDE4LCAyNywgMywgMjM3LCA4MiwgMTIsIDMwLCAxOCwgMjcsIDMsIDI1MiwgMjI5LCAxMiwgMzAsIAotICAgIDE4LCAyNywgMywgMjUyLCAyMjcsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTMsIDM4LCAxMiwgMzAsIDE4LCAyNywgMywgMjMzLCAKLSAgICAxMDAsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTIsIDIyMywgMTIsIDMwLCAxOCwgMjcsIDMsIDI0NiwgMjA5LCAxMiwgMzAsIAotICAgIDE4LCAyNywgMywgMzUsIDIzNywgNzMsIDEyLCAzMCwgMTgsIDI3LCAzLCAyMzcsIDczLCAxMiwgMzAsIDE4LCAyNywgMywgCi0gICAgMjQ2LCAyMTIsIDEyLCAzMCwgMTgsIDI3LCAzLCAyMzMsIDkyLCAxMiwgMzAsIDE4LCAyNywgMywgMjQ2LCAxOTgsIDEyLCAKLSAgICAzMCwgMTgsIDI3LCAzLCAyNDYsIDIwMCwgMTIsIDMwLCAxOCwgMjcsIDMsIDI0NiwgMjA0LCAxMiwgMzAsIDE4LCAyNywgMywgCi0gICAgMjM3LCA2OCwgMTIsIDMwLCAxOCwgMjcsIDIzNSwgNzksIDIyNywgMTg4LCAxMiwgMzAsIDE4LCAyNywgMjM1LCAyOCwgOTgsIAotICAgIDEyLCAzMCwgMTgsIDI3LCAyNDAsIDE3OCwgOTgsIDEyLCAzMCwgMTgsIDI3LCAyNDAsIDIxMCwgOTgsIDEyLCAzMCwgMTgsIAotICAgIDI3LCAyNTMsIDEyMCwgOTgsIDEyLCAzMCwgMTgsIDI3LCAyNTMsIDcwLCA5OCwgMTIsIDMwLCAxOCwgMjcsIDI1NCwgMjAwLCAKLSAgICA5OCwgMTIsIDE4LCA2LCAyMzMsIDEyOSwgMTIsIDE4LCAzLCAyMzMsIDEyOSwgMTIsIDE4LCAyMSwgMjQwLCAxMjYsIDEyLCAKLSAgICAxOCwgMjEsIDExOCwgMTIsIDE4LCAyMSwgMTEzLCAxMiwgMTgsIDIxLCAxNjYsIDEyLCAxOCwgMjEsIDE1OCwgMTIsIDE4LCAKLSAgICAyMSwgMTczLCAxMiwgMTgsIDIxLCAxODMsIDEyLCAxOCwgMjEsIDE5NCwgMTIsIDE4LCAyMSwgMTg3LCAxMiwgMTgsIDIxLCAKLSAgICAxOTIsIDEyLCAxNTksIDIxLCAyNDAsIDEyNiwgMTIsIDE1OSwgMjEsIDExOCwgMTIsIDE1OSwgMjEsIDExMywgMTIsIDE1OSwgCi0gICAgMjEsIDE2NiwgMTIsIDE1OSwgMjEsIDE1OCwgMTIsIDE1OSwgMjEsIDE3MywgMTIsIDE1OSwgMjEsIDE4MywgMTIsIDE1OSwgCi0gICAgMjEsIDE5NCwgMTIsIDE1OSwgMjEsIDE4NywgMTIsIDE1OSwgMjEsIDE5MiwgMTIsIDMwLCAyMSwgMjQwLCAxMjYsIDEyLCAKLSAgICAzMCwgMjEsIDExOCwgMTIsIDMwLCAyMSwgMTEzLCAxMiwgMzAsIDIxLCAxNjYsIDEyLCAzMCwgMjEsIDE1OCwgMTIsIDMwLCAKLSAgICAyMSwgMTczLCAxMiwgMzAsIDIxLCAxODMsIDEyLCAzMCwgMjEsIDE5NCwgMTIsIDMwLCAyMSwgMTg3LCAxMiwgMzAsIDIxLCAKLSAgICAxOTIsIDEyLCAzMCwgMTgsIDIxLCAyNDAsIDEyNiwgMTIsIDMwLCAxOCwgMjEsIDExOCwgMTIsIDMwLCAxOCwgMjEsIDExMywgCi0gICAgMTIsIDMwLCAxOCwgMjEsIDE2NiwgMTIsIDMwLCAxOCwgMjEsIDE1OCwgMTIsIDMwLCAxOCwgMjEsIDE3MywgMTIsIDMwLCAKLSAgICAxOCwgMjEsIDE4MywgMTIsIDMwLCAxOCwgMjEsIDE5NCwgMTIsIDMwLCAxOCwgMjEsIDE4NywgMTIsIDMwLCAxOCwgMjEsIAotICAgIDE5MiwgMTIsIDE4OSwgMjEsIDI0MCwgMTI2LCAxMiwgMTg5LCAyMSwgMTE4LCAxMiwgMTg5LCAyMSwgMTEzLCAxMiwgMTg5LCAKLSAgICAyMSwgMTY2LCAxMiwgMTg5LCAyMSwgMTU4LCAxMiwgMTg5LCAyMSwgMTczLCAxMiwgMTg5LCAyMSwgMTgzLCAxMiwgMTg5LCAKLSAgICAyMSwgMTk0LCAxMiwgMTg5LCAyMSwgMTg3LCAxMiwgMTg5LCAyMSwgMTkyLCAyMzUsIDE5LCA3NSwgMjQ2LCAxNzAsIDI0MCwgCi0gICAgMTk5LCAyMzUsIDE5LCA3NSwgMjQwLCAxNDEsIDI0MCwgMTk5LCAyMzUsIDE5LCA3NSwgMjQ2LCAxODQsIDI0MCwgMTk5LCAKLSAgICAyMzUsIDE5LCA3NSwgMjQwLCAxMzQsIDI0MCwgMTk5LCAyMzUsIDE5LCA3NSwgMjU0LCAxNDIsIDIzNSwgNzQsIDIzNSwgMTksIAotICAgIDc1LCAyNDMsIDE1NiwgMjM1LCA3NCwgMjM1LCAxOSwgNzUsIDYzLCAyMzUsIDc0LCAyMzUsIDE5LCA3NSwgMTY4LCAxMDYsIAotICAgIDIyOSwgMTczLCAyMzUsIDE5LCA3NSwgMTM1LCAxMDYsIDIyOSwgMTczLCAyMzUsIDE5LCA3NSwgMTUyLCAxMDYsIDIyOSwgCi0gICAgMTczLCAyMzUsIDE5LCA3NSwgMjQ2LCAxNjAsIDEwNiwgMjI5LCAxNzMsIDIzNSwgMTksIDc1LCAyNDYsIDE1OSwgMTA2LCAKLSAgICAyMjksIDE3MywgMjM1LCAxOSwgNzUsIDI1MywgMTcsIDEwNiwgMjI5LCAxNzMsIDIzNSwgMTksIDc1LCAyNDAsIDE1NSwgCi0gICAgMTA2LCAyMjksIDE3MywgMjM1LCAxOSwgNzUsIDI0MCwgMTQyLCAxMDYsIDIyOSwgMTczLCAyMzUsIDE5LCA3NSwgMjQ2LCAKLSAgICAyMDgsIDEwNiwgMjI5LCAxNzMsIDIzNSwgMTksIDc1LCAxNjgsIDEwNiwgMjMzLCAxMDksIDIzNSwgMTksIDc1LCAxMzUsIAotICAgIDEwNiwgMjMzLCAxMDksIDIzNSwgMTksIDc1LCAxNTIsIDEwNiwgMjMzLCAxMDksIDIzNSwgMTksIDc1LCAyNDYsIDE2MCwgCi0gICAgMTA2LCAyMzMsIDEwOSwgMjM1LCAxOSwgNzUsIDI0NiwgMTU5LCAxMDYsIDIzMywgMTA5LCAyMzUsIDE5LCA3NSwgMjUzLCAKLSAgICAxNywgMTA2LCAyMzMsIDEwOSwgMjM1LCAxOSwgNzUsIDI0MCwgMTU1LCAxMDYsIDIzMywgMTA5LCAyMzUsIDE5LCA3NSwgCi0gICAgMjQwLCAxNDIsIDEwNiwgMjMzLCAxMDksIDIzNSwgMTksIDc1LCAyNDYsIDIwOCwgMTA2LCAyMzMsIDEwOSwgMjM1LCAxOSwgCi0gICAgNzUsIDE2OCwgMTA2LCAyMzMsIDExMCwgMjM1LCAxOSwgNzUsIDEzNSwgMTA2LCAyMzMsIDExMCwgMjM1LCAxOSwgNzUsIAotICAgIDE1MiwgMTA2LCAyMzMsIDExMCwgMjM1LCAxOSwgNzUsIDI0NiwgMTYwLCAxMDYsIDIzMywgMTEwLCAyMzUsIDE5LCA3NSwgCi0gICAgMjQ2LCAxNTksIDEwNiwgMjMzLCAxMTAsIDIzNSwgMTksIDc1LCAyNTMsIDE3LCAxMDYsIDIzMywgMTEwLCAyMzUsIDE5LCAKLSAgICA3NSwgMjQwLCAxNTUsIDEwNiwgMjMzLCAxMTAsIDIzNSwgMTksIDc1LCAyNDAsIDE0MiwgMTA2LCAyMzMsIDExMCwgMjM1LCAKLSAgICAxOSwgNzUsIDI0NiwgMjA4LCAxMDYsIDIzMywgMTEwLCAyMzUsIDE5LCA3NSwgMjQ1LCA4MCwgMjM1LCAxOSwgNzUsIDIzNiwgCi0gICAgMTc3LCAyMzUsIDE5LCA3NSwgMjM1LCAxMDksIDIzNSwgMTksIDc1LCAyMjcsIDE2MCwgMjM1LCAxOSwgNzUsIDIzNiwgMjM4LCAKLSAgICAyMzUsIDE5LCA3NSwgMjM2LCAyNDgsIDIzNSwgMTksIDc1LCAyMzYsIDEsIDIzNSwgMTksIDc1LCAyMzcsIDMwLCAyMzUsIAotICAgIDE5LCA3NSwgMjM5LCA1MCwgMjM1LCAxOSwgNzUsIDI0MCwgMjE3LCAxMDksIDc1LCAxNjksIDI0MCwgMjE3LCAxMDksIDc1LCAKLSAgICAyMjMsIDAsIDEwOSwgNzUsIDIyMywgMSwgMTA5LCA3NSwgMjIzLCAyLCAxMDksIDc1LCAyMjMsIDMsIDEwOSwgNzUsIDIyMywgCi0gICAgNCwgMTA5LCA3NSwgMjIzLCA1LCAxMDksIDc1LCAyMjMsIDYsIDEwOSwgNzUsIDIyMywgNywgMTA5LCA3NSwgMjIzLCA4LCAKLSAgICAxMDksIDc1LCAyMjMsIDksIDEwOSwgNzUsIDIyMywgMTAsIDEwOSwgNzUsIDIyMywgMTEsIDEwOSwgNzUsIDIyMywgMTIsIAotICAgIDEwOSwgNzUsIDIyMywgMTMsIDEwOSwgNzUsIDIyMywgMTQsIDEwOSwgNzUsIDIyMywgMTUsIDEwOSwgNzUsIDIyMywgMTYsIAotICAgIDEwOSwgNzUsIDIyMywgMTcsIDEwOSwgNzUsIDIyMywgMTgsIDEwOSwgNzUsIDIyMywgMTksIDEwOSwgNzUsIDIyMywgMjAsIAotICAgIDEwOSwgNzUsIDIyMywgMjEsIDEwOSwgNzUsIDIyMywgMjIsIDEwOSwgNzUsIDIyMywgMjMsIDEwOSwgNzUsIDIyMywgMjQsIAotICAgIDEwOSwgNzUsIDIyMywgMjUsIDEwOSwgNzUsIDIyMywgMjYsIDEwOSwgNzUsIDIyMywgMjcsIDEwOSwgNzUsIDIyMywgMjgsIAotICAgIDEwOSwgNzUsIDIyMywgMjksIDEwOSwgNzUsIDIyMywgMzAsIDEwOSwgNzUsIDIyMywgMzEsIDEwOSwgNzUsIDIyMywgMzIsIAotICAgIDEwOSwgNzUsIDIyMywgMzMsIDEwOSwgNzUsIDIyMywgMzQsIDEwOSwgNzUsIDIyMywgMzUsIDEwOSwgNzUsIDIyMywgMzYsIAotICAgIDEwOSwgNzUsIDIyMywgMzcsIDEwOSwgNzUsIDIyMywgMzgsIDEwOSwgNzUsIDIyMywgMzksIDEwOSwgNzUsIDIyMywgNDAsIAotICAgIDEwOSwgNzUsIDIyMywgNDEsIDEwOSwgNzUsIDIyMywgNDIsIDEwOSwgNzUsIDIyMywgNDMsIDEwOSwgNzUsIDIyMywgNDQsIAotICAgIDEwOSwgNzUsIDIyMywgNDUsIDEwOSwgNzUsIDIyMywgNDYsIDEwOSwgNzUsIDIyMywgNDcsIDEwOSwgNzUsIDIyMywgNDgsIAotICAgIDEwOSwgNzUsIDYxLCAyNDAsIDIxNywgMTA5LCA3NSwgMjI3LCA4MiwgMTA5LCA3NSwgMjI3LCA4MywgMTA5LCA3NSwgMjI3LCAKLSAgICA4NCwgMTA5LCA3NSwgMjI3LCA4NSwgMTA5LCA3NSwgMjI3LCA4NiwgMTA5LCA3NSwgMjI3LCA4NywgMTA5LCA3NSwgMjI3LCAKLSAgICA4OCwgMTA5LCA3NSwgMjI3LCA4OSwgMTA5LCA3NSwgMjI3LCA5MCwgMTA5LCA3NSwgMjI3LCA5MSwgMTA5LCA3NSwgMjI3LCAKLSAgICA5MiwgMTA5LCA3NSwgMjI3LCA5MywgMTA5LCA3NSwgMjI3LCA5NCwgMTA5LCA3NSwgMjI3LCA5NSwgMTA5LCA3NSwgMjI3LCAKLSAgICA5NiwgMTA5LCA3NSwgMjI3LCA5NywgMTA5LCA3NSwgMjI3LCA5OCwgMTA5LCA3NSwgMjI3LCA5OSwgMTA5LCA3NSwgMjI3LCAKLSAgICAxMDAsIDEwOSwgNzUsIDIyNywgMTAxLCAxMDksIDc1LCAyMjcsIDEwMiwgMTA5LCA3NSwgMjI3LCAxMDMsIDEwOSwgNzUsIAotICAgIDIyNywgMTA0LCAxMDksIDc1LCAyMjcsIDEwNSwgMTA5LCA3NSwgMjI3LCAxMDYsIDEwOSwgNzUsIDIyNywgMTA3LCAxMDksIAotICAgIDc1LCAyMjcsIDEwOCwgMTA5LCA3NSwgMjI3LCAxMDksIDEwOSwgNzUsIDIyNywgMTEwLCAxMDksIDc1LCAyMjcsIDExMSwgCi0gICAgMTA5LCA3NSwgMjI3LCAxMTIsIDEwOSwgNzUsIDIyNywgMTEzLCAxMDksIDc1LCAyMjcsIDExNCwgMTA5LCA3NSwgMjI3LCAKLSAgICAxMTUsIDEwOSwgNzUsIDIyNywgMTE2LCAxMDksIDc1LCAyMjcsIDExNywgMTA5LCA3NSwgMjI3LCAxMTgsIDEwOSwgNzUsIAotICAgIDIyNywgMTE5LCAxMDksIDc1LCAyMjcsIDEyMCwgMTA5LCA3NSwgMjI3LCAxMjEsIDEwOSwgNzUsIDIyNywgMTIyLCAxMDksIAotICAgIDc1LCAyMjcsIDEyMywgMTA5LCA3NSwgMjI3LCAxMjQsIDEwOSwgNzUsIDIyNywgMTI1LCAxMDksIDc1LCAyMjcsIDEyNiwgCi0gICAgMTA5LCA3NSwgMjI3LCAxMjcsIDEwOSwgNzUsIDIyNywgMTI4LCAxMDksIDc1LCAyMjcsIDEyOSwgMTA5LCA3NSwgMjI3LCAKLSAgICAxMzAsIDksIDExLCAyMjMsIDYzLCA5LCAxMSwgMjIzLCA2NCwgOSwgMTEsIDIyMywgNjUsIDksIDExLCAyMjMsIDY2LCA5LCAKLSAgICAxMSwgMjIzLCA2NywgOSwgMTEsIDIyMywgNjgsIDksIDExLCAyMjMsIDY5LCA5LCAxMSwgMjIzLCA3MCwgOSwgMTEsIDIyMywgCi0gICAgNzEsIDksIDExLCAyMjMsIDcyLCA5LCAxMSwgMjIzLCA3MywgOSwgMTEsIDIyMywgNzQsIDksIDExLCAyMjMsIDc1LCA5LCAKLSAgICAxMSwgMjIzLCA3NiwgOSwgMTEsIDIyMywgNzcsIDksIDExLCAyMjMsIDc4LCA5LCAxMSwgMjIzLCA3OSwgOSwgMTEsIDIyMywgCi0gICAgODAsIDksIDExLCAyMjMsIDgxLCA5LCAxMSwgMjIzLCA4MiwgOSwgMTEsIDIyMywgODMsIDksIDExLCAyMjMsIDg0LCA5LCAKLSAgICAxMSwgMjIzLCA4NSwgOSwgMTEsIDIyMywgODYsIDksIDExLCAyMjMsIDg3LCA5LCAxMSwgMjIzLCA4OCwgOSwgMTEsIDIyMywgCi0gICAgODksIDksIDExLCAyMjMsIDkwLCA5LCAxMSwgMjIzLCA5MSwgOSwgMTEsIDIyMywgOTIsIDksIDExLCAyMjMsIDkzLCA5LCAKLSAgICAxMSwgMjIzLCA5NCwgOSwgMTEsIDIyMywgOTUsIDksIDExLCAyMjMsIDk2LCA5LCAxMSwgMjIzLCA5NywgOSwgMTEsIDIyMywgCi0gICAgOTgsIDksIDExLCAyMjMsIDk5LCA5LCAxMSwgMjIzLCAxMDAsIDksIDExLCAyMjMsIDEwMSwgOSwgMTEsIDIyMywgMTAyLCA5LCAKLSAgICAxMSwgMjIzLCAxMDMsIDksIDExLCAyMjMsIDEwNCwgOSwgMTEsIDIyMywgMTA1LCA5LCAxMSwgMjIzLCAxMDYsIDksIDExLCAKLSAgICAyMjMsIDEwNywgOSwgMTEsIDIyMywgMTA4LCA5LCAxMSwgMjIzLCAxMDksIDksIDExLCAyMjMsIDExMCwgOSwgMTEsIDIyMywgCi0gICAgMTExLCA5LCAxMSwgMjIzLCAxMTIsIDksIDExLCAyMjMsIDExMywgOSwgMTEsIDIyMywgMTE0LCA5LCAxMSwgMjIzLCAxMTUsIAotICAgIDksIDExLCAyMjMsIDExNiwgOSwgMTEsIDIyMywgMTE3LCA5LCAxMSwgMjIzLCAxMTgsIDksIDExLCAyMjMsIDExOSwgOSwgCi0gICAgMTEsIDIyMywgMTIwLCA5LCAxMSwgMjIzLCAxMjEsIDksIDExLCAyMjMsIDEyMiwgOSwgMTEsIDIyMywgMTIzLCA5LCAxMSwgCi0gICAgMjIzLCAxMjQsIDksIDExLCAyMjMsIDEyNSwgOSwgMTEsIDIyMywgMTI2LCA5LCAxMSwgMjIzLCAxMjcsIDksIDExLCAyMjMsIAotICAgIDEyOCwgOSwgMTEsIDIyMywgMTI5LCA5LCAxMSwgMjIzLCAxMzAsIDksIDExLCAyMjMsIDEzMSwgOSwgMTEsIDIyMywgMTMyLCAKLSAgICA5LCAxMSwgMjIzLCAxMzMsIDksIDExLCAyMjMsIDEzNCwgOSwgMTEsIDIyMywgMTM1LCA5LCAxMSwgMjIzLCAxMzYsIDksIAotICAgIDExLCAyMjMsIDEzNywgOSwgMTEsIDIyMywgMTM4LCA5LCAxMSwgMjIzLCAxMzksIDksIDExLCAyMjMsIDE0MCwgOSwgMTEsIAotICAgIDIyMywgMTQxLCA5LCAxMSwgMjIzLCAxNDIsIDksIDExLCAyMjMsIDE0MywgOSwgMTEsIDIyMywgMTQ0LCA5LCAxMSwgMjIzLCAKLSAgICAxNDUsIDksIDExLCAyMjMsIDE0NiwgOSwgMTEsIDIyMywgMTQ3LCA5LCAxMSwgMjIzLCAxNDgsIDksIDExLCAyMjMsIDE0OSwgCi0gICAgOSwgMTEsIDIyMywgMTUwLCA5LCAxMSwgMjIzLCAxNTEsIDksIDExLCAyMjMsIDE1MiwgOSwgMTEsIDIyMywgMTUzLCA5LCAKLSAgICAxMSwgMjIzLCAxNTQsIDksIDExLCAyMjMsIDE1NSwgOSwgMTEsIDIyMywgMTU2LCA5LCAxMSwgMjIzLCAxNTcsIDksIDExLCAKLSAgICAyMjMsIDE1OCwgOSwgMTEsIDIyMywgMTU5LCA5LCAxMSwgMjIzLCAxNjAsIDksIDExLCAyMjMsIDE2MSwgOSwgMTEsIDIyMywgCi0gICAgMTYyLCA5LCAxMSwgMjIzLCAxNjMsIDksIDExLCAyMjMsIDE2NCwgOSwgMTEsIDIyMywgMTY1LCA5LCAxMSwgMjIzLCAxNjYsIAotICAgIDksIDExLCAyMjMsIDE2NywgOSwgMTEsIDIyMywgMTY4LCA5LCAxMSwgMjIzLCAxNjksIDksIDExLCAyMjMsIDE3MCwgOSwgCi0gICAgMTEsIDIyMywgMTcxLCA5LCAxMSwgMjIzLCAxNzIsIDksIDExLCAyMjMsIDE3MywgOSwgMTEsIDIyMywgMTc0LCA5LCAxMSwgCi0gICAgMjIzLCAxNzUsIDksIDExLCAyMjMsIDE3NiwgOSwgMTEsIDIyMywgMTc3LCA5LCAxMSwgMjIzLCAxNzgsIDksIDExLCAyMjMsIAotICAgIDE3OSwgOSwgMTEsIDIyMywgMTgwLCA5LCAxMSwgMjIzLCAxODEsIDksIDExLCAyMjMsIDE4MiwgOSwgMTEsIDIyMywgMTgzLCAKLSAgICA5LCAxMSwgMjIzLCAxODQsIDksIDExLCAyMjMsIDE4NSwgOSwgMTEsIDIyMywgMTg2LCA5LCAxMSwgMjIzLCAxODcsIDksIAotICAgIDExLCAyMjMsIDE4OCwgOSwgMTEsIDIyMywgMTg5LCA5LCAxMSwgMjIzLCAxOTAsIDksIDExLCAyMjMsIDE5MSwgOSwgMTEsIAotICAgIDIyMywgMTkyLCA5LCAxMSwgMjIzLCAxOTMsIDksIDExLCAyMjMsIDE5NCwgOSwgMTEsIDIyMywgMTk1LCA5LCAxMSwgMjIzLCAKLSAgICAxOTYsIDksIDExLCAyMjMsIDE5NywgOSwgMTEsIDIyMywgMTk4LCA5LCAxMSwgMjIzLCAxOTksIDksIDExLCAyMjMsIDIwMCwgCi0gICAgOSwgMTEsIDIyMywgMjAxLCA5LCAxMSwgMjIzLCAyMDIsIDksIDExLCAyMjMsIDIwMywgOSwgMTEsIDIyMywgMjA0LCA5LCAKLSAgICAxMSwgMjIzLCAyMDUsIDksIDExLCAyMjMsIDIwNiwgOSwgMTEsIDIyMywgMjA3LCA5LCAxMSwgMjIzLCAyMDgsIDksIDExLCAKLSAgICAyMjMsIDIwOSwgOSwgMTEsIDIyMywgMjEwLCA5LCAxMSwgMjIzLCAyMTEsIDksIDExLCAyMjMsIDIxMiwgOSwgMTEsIDIyMywgCi0gICAgMjEzLCA5LCAxMSwgMjIzLCAyMTQsIDksIDExLCAyMjMsIDIxNSwgOSwgMTEsIDIyMywgMjE2LCA5LCAxMSwgMjIzLCAyMTcsIAotICAgIDksIDExLCAyMjMsIDIxOCwgOSwgMTEsIDIyMywgMjE5LCA5LCAxMSwgMjIzLCAyMjAsIDksIDExLCAyMjMsIDIyMSwgOSwgCi0gICAgMTEsIDIyMywgMjIyLCA5LCAxMSwgMjIzLCAyMjMsIDksIDExLCAyMjMsIDIyNCwgOSwgMTEsIDIyMywgMjI1LCA5LCAxMSwgCi0gICAgMjIzLCAyMjYsIDksIDExLCAyMjMsIDIyNywgOSwgMTEsIDIyMywgMjI4LCA5LCAxMSwgMjIzLCAyMjksIDksIDExLCAyMjMsIAotICAgIDIzMCwgOSwgMTEsIDIyMywgMjMxLCA5LCAxMSwgMjIzLCAyMzIsIDksIDExLCAyMjMsIDIzMywgOSwgMTEsIDIyMywgMjM0LCAKLSAgICA5LCAxMSwgMjIzLCAyMzUsIDksIDExLCAyMjMsIDIzNiwgOSwgMTEsIDIyMywgMjM3LCA5LCAxMSwgMjIzLCAyMzgsIDksIAotICAgIDExLCAyMjMsIDIzOSwgOSwgMTEsIDIyMywgMjQwLCA5LCAxMSwgMjIzLCAyNDEsIDksIDExLCAyMjMsIDI0MiwgOSwgMTEsIAotICAgIDIyMywgMjQzLCA5LCAxMSwgMjIzLCAyNDQsIDksIDExLCAyMjMsIDI0NSwgOSwgMTEsIDIyMywgMjQ2LCA5LCAxMSwgMjIzLCAKLSAgICAyNDcsIDksIDExLCAyMjMsIDI0OCwgOSwgMTEsIDIyMywgMjQ5LCA5LCAxMSwgMjIzLCAyNTAsIDksIDExLCAyMjMsIDI1MSwgCi0gICAgOSwgMTEsIDIyMywgMjUyLCA5LCAxMSwgMjIzLCAyNTMsIDksIDExLCAyMjMsIDI1NCwgOSwgMTEsIDIyMywgMjU1LCA5LCAKLSAgICAxMSwgMjI0LCAwLCA5LCAxMSwgMjI0LCAxLCA5LCAxMSwgMjI0LCAyLCA5LCAxMSwgMjI0LCAzLCA5LCAxMSwgMjI0LCA0LCAKLSAgICA5LCAxMSwgMjI0LCA1LCA5LCAxMSwgMjI0LCA2LCA5LCAxMSwgMjI0LCA3LCA5LCAxMSwgMjI0LCA4LCA5LCAxMSwgMjI0LCAKLSAgICA5LCA5LCAxMSwgMjI0LCAxMCwgOSwgMTEsIDIyNCwgMTEsIDksIDExLCAyMjQsIDEyLCA5LCAxMSwgMjI0LCAxMywgOSwgMTEsIAotICAgIDIyNCwgMTQsIDksIDExLCAyMjQsIDE1LCA5LCAxMSwgMjI0LCAxNiwgOSwgMTEsIDIyNCwgMTcsIDksIDExLCAyMjQsIDE4LCAKLSAgICA5LCAxMSwgMjI0LCAxOSwgOSwgMTEsIDIyNCwgMjAsIDksIDExLCAyMjQsIDIxLCA5LCAxMSwgMjI0LCAyMiwgOSwgMTEsIAotICAgIDIyNCwgMjMsIDksIDExLCAyMjQsIDI0LCA5LCAxMSwgMjI0LCAyNSwgOSwgMTEsIDIyNCwgMjYsIDksIDExLCAyMjQsIDI3LCAKLSAgICA5LCAxMSwgMjI0LCAyOCwgOSwgMTEsIDIyNCwgMjksIDksIDExLCAyMjQsIDMwLCA5LCAxMSwgMjI0LCAzMSwgOSwgMTEsIAotICAgIDIyNCwgMzIsIDksIDExLCAyMjQsIDMzLCA5LCAxMSwgMjI0LCAzNCwgOSwgMTEsIDIyNCwgMzUsIDksIDExLCAyMjQsIDM2LCAKLSAgICA5LCAxMSwgMjI0LCAzNywgOSwgMTEsIDIyNCwgMzgsIDksIDExLCAyMjQsIDM5LCA5LCAxMSwgMjI0LCA0MCwgOSwgMTEsIAotICAgIDIyNCwgNDEsIDksIDExLCAyMjQsIDQyLCA5LCAxMSwgMjI0LCA0MywgOSwgMTEsIDIyNCwgNDQsIDksIDExLCAyMjQsIDQ1LCAKLSAgICA5LCAxMSwgMjI0LCA0NiwgOSwgMTEsIDIyNCwgNDcsIDksIDExLCAyMjQsIDQ4LCA5LCAxMSwgMjI0LCA0OSwgOSwgMTEsIAotICAgIDIyNCwgNTAsIDksIDExLCAyMjQsIDUxLCA5LCAxMSwgMjI0LCA1MiwgOSwgMTEsIDIyNCwgNTMsIDksIDExLCAyMjQsIDU0LCAKLSAgICA5LCAxMSwgMjI0LCA1NSwgOSwgMTEsIDIyNCwgNTYsIDksIDExLCAyMjQsIDU3LCA5LCAxMSwgMjI0LCA1OCwgOSwgMTEsIAotICAgIDIyNCwgNTksIDksIDExLCAyMjQsIDYwLCA5LCAxMSwgMjI0LCA2MSwgOSwgMTEsIDIyNCwgNjIsIDksIDExLCAyMjQsIDYzLCAKLSAgICA5LCAxMSwgMjI0LCA2NCwgOSwgMTEsIDIyNCwgNjUsIDksIDExLCAyMjQsIDY2LCA5LCAxMSwgMjI0LCA2NywgOSwgMTEsIAotICAgIDIyNCwgNjgsIDksIDExLCAyMjQsIDY5LCA5LCAxMSwgMjI0LCA3MCwgOSwgMTEsIDIyNCwgNzEsIDksIDExLCAyMjQsIDcyLCAKLSAgICA5LCAxMSwgMjI0LCA3MywgOSwgMTEsIDIyNCwgNzQsIDksIDExLCAyMjQsIDc1LCA5LCAxMSwgMjI0LCA3NiwgOSwgMTEsIAotICAgIDIyNCwgNzcsIDksIDExLCAyMjQsIDc4LCA5LCAxMSwgMjI0LCA3OSwgOSwgMTEsIDIyNCwgODAsIDksIDExLCAyMjQsIDgxLCAKLSAgICA5LCAxMSwgMjI0LCA4MiwgOSwgMTEsIDIyNCwgODMsIDksIDExLCAyMjQsIDg0LCA5LCAxMSwgMjI0LCA4NSwgOSwgMTEsIAotICAgIDIyNCwgODYsIDksIDExLCAyMjQsIDg3LCA5LCAxMSwgMjI0LCA4OCwgOSwgMTEsIDIyNCwgODksIDksIDExLCAyMjQsIDkwLCAKLSAgICA5LCAxMSwgMjI0LCA5MSwgOSwgMTEsIDIyNCwgOTIsIDksIDExLCAyMjQsIDkzLCA5LCAxMSwgMjI0LCA5NCwgOSwgMTEsIAotICAgIDIyNCwgOTUsIDksIDExLCAyMjQsIDk2LCA5LCAxMSwgMjI0LCA5NywgOSwgMTEsIDIyNCwgOTgsIDksIDExLCAyMjQsIDk5LCAKLSAgICA5LCAxMSwgMjI0LCAxMDAsIDksIDExLCAyMjQsIDEwMSwgOSwgMTEsIDIyNCwgMTAyLCA5LCAxMSwgMjI0LCAxMDMsIDksIAotICAgIDExLCAyMjQsIDEwNCwgOSwgMTEsIDIyNCwgMTA1LCA5LCAxMSwgMjI0LCAxMDYsIDksIDExLCAyMjQsIDEwNywgOSwgMTEsIAotICAgIDIyNCwgMTA4LCA5LCAxMSwgMjI0LCAxMDksIDksIDExLCAyMjQsIDExMCwgOSwgMTEsIDIyNCwgMTExLCA5LCAxMSwgMjI0LCAKLSAgICAxMTIsIDksIDExLCAyMjQsIDExMywgOSwgMTEsIDIyNCwgMTE0LCA5LCAxMSwgMjI0LCAxMTUsIDksIDExLCAyMjQsIDExNiwgCi0gICAgOSwgMTEsIDIyNCwgMTE3LCA5LCAxMSwgMjI0LCAxMTgsIDksIDExLCAyMjQsIDExOSwgOSwgMTEsIDIyNCwgMTIwLCA5LCAKLSAgICAxMSwgMjI0LCAxMjEsIDksIDExLCAyMjQsIDEyMiwgOSwgMTEsIDIyNCwgMTIzLCA5LCAxMSwgMjI0LCAxMjQsIDksIDExLCAKLSAgICAyMjQsIDEyNSwgOSwgMTEsIDIyNCwgMTI2LCA5LCAxMSwgMjI0LCAxMjcsIDksIDExLCAyMjQsIDEyOCwgOSwgMTEsIDIyNCwgCi0gICAgMTI5LCA5LCAxMSwgMjI0LCAxMzAsIDksIDExLCAyMjQsIDEzMSwgOSwgMTEsIDIyNCwgMTMyLCA5LCAxMSwgMjI0LCAxMzMsIAotICAgIDksIDExLCAyMjQsIDEzNCwgOSwgMTEsIDIyNCwgMTM1LCA5LCAxMSwgMjI0LCAxMzYsIDksIDExLCAyMjQsIDEzNywgOSwgCi0gICAgMTEsIDIyNCwgMTM4LCA5LCAxMSwgMjI0LCAxMzksIDksIDExLCAyMjQsIDE0MCwgOSwgMTEsIDIyNCwgMTQxLCA5LCAxMSwgCi0gICAgMjI0LCAxNDIsIDksIDExLCAyMjQsIDE0MywgOSwgMTEsIDIyNCwgMTQ0LCA5LCAxMSwgMjI0LCAxNDUsIDksIDExLCAyMjQsIAotICAgIDE0NiwgOSwgMTEsIDIyNCwgMTQ3LCA5LCAxMSwgMjI0LCAxNDgsIDksIDExLCAyMjQsIDE0OSwgOSwgMTEsIDIyNCwgMTUwLCAKLSAgICA5LCAxMSwgMjI0LCAxNTEsIDksIDExLCAyMjQsIDE1MiwgOSwgMTEsIDIyNCwgMTUzLCA5LCAxMSwgMjI0LCAxNTQsIDksIAotICAgIDExLCAyMjQsIDE1NSwgOSwgMTEsIDIyNCwgMTU2LCA5LCAxMSwgMjI0LCAxNTcsIDksIDExLCAyMjQsIDE1OCwgOSwgMTEsIAotICAgIDIyNCwgMTU5LCA5LCAxMSwgMjI0LCAxNjAsIDksIDExLCAyMjQsIDE2MSwgOSwgMTEsIDIyNCwgMTYyLCA5LCAxMSwgMjI0LCAKLSAgICAxNjMsIDksIDExLCAyMjQsIDE2NCwgOSwgMTEsIDIyNCwgMTY1LCA5LCAxMSwgMjI0LCAxNjYsIDksIDExLCAyMjQsIDE2NywgCi0gICAgOSwgMTEsIDIyNCwgMTY4LCA5LCAxMSwgMjI0LCAxNjksIDksIDExLCAyMjQsIDE3MCwgOSwgMTEsIDIyNCwgMTcxLCA5LCAKLSAgICAxMSwgMjI0LCAxNzIsIDksIDExLCAyMjQsIDE3MywgOSwgMTEsIDIyNCwgMTc0LCA5LCAxMSwgMjI0LCAxNzUsIDksIDExLCAKLSAgICAyMjQsIDE3NiwgOSwgMTEsIDIyNCwgMTc3LCA5LCAxMSwgMjI0LCAxNzgsIDksIDExLCAyMjQsIDE3OSwgOSwgMTEsIDIyNCwgCi0gICAgMTgwLCA5LCAxMSwgMjI0LCAxODEsIDksIDExLCAyMjQsIDE4MiwgOSwgMTEsIDIyNCwgMTgzLCA5LCAxMSwgMjI0LCAxODQsIAotICAgIDksIDExLCAyMjQsIDE4NSwgOSwgMTEsIDIyNCwgMTg2LCA5LCAxMSwgMjI0LCAxODcsIDksIDExLCAyMjQsIDE4OCwgOSwgCi0gICAgMTEsIDIyNCwgMTg5LCA5LCAxMSwgMjI0LCAxOTAsIDksIDExLCAyMjQsIDE5MSwgOSwgMTEsIDIyNCwgMTkyLCA5LCAxMSwgCi0gICAgMjI0LCAxOTMsIDksIDExLCAyMjQsIDE5NCwgOSwgMTEsIDIyNCwgMTk1LCA5LCAxMSwgMjI0LCAxOTYsIDksIDExLCAyMjQsIAotICAgIDE5NywgOSwgMTEsIDIyNCwgMTk4LCA5LCAxMSwgMjI0LCAxOTksIDksIDExLCAyMjQsIDIwMCwgOSwgMTEsIDIyNCwgMjAxLCAKLSAgICA5LCAxMSwgMjI0LCAyMDIsIDksIDExLCAyMjQsIDIwMywgOSwgMTEsIDIyNCwgMjA0LCA5LCAxMSwgMjI0LCAyMDUsIDksIAotICAgIDExLCAyMjQsIDIwNiwgOSwgMTEsIDIyNCwgMjA3LCA5LCAxMSwgMjI0LCAyMDgsIDksIDExLCAyMjQsIDIwOSwgOSwgMTEsIAotICAgIDIyNCwgMjEwLCA5LCAxMSwgMjI0LCAyMTEsIDksIDExLCAyMjQsIDIxMiwgOSwgMTEsIDIyNCwgMjEzLCA5LCAxMSwgMjI0LCAKLSAgICAyMTQsIDksIDExLCAyMjQsIDIxNSwgOSwgMTEsIDIyNCwgMjE2LCA5LCAxMSwgMjI0LCAyMTcsIDksIDExLCAyMjQsIDIxOCwgCi0gICAgOSwgMTEsIDIyNCwgMjE5LCA5LCAxMSwgMjI0LCAyMjAsIDksIDExLCAyMjQsIDIyMSwgOSwgMTEsIDIyNCwgMjIyLCA5LCAKLSAgICAxMSwgMjI0LCAyMjMsIDksIDExLCAyMjQsIDIyNCwgOSwgMTEsIDIyNCwgMjI1LCA5LCAxMSwgMjI0LCAyMjYsIDksIDExLCAKLSAgICAyMjQsIDIyNywgOSwgMTEsIDIyNCwgMjI4LCA5LCAxMSwgMjI0LCAyMjksIDksIDExLCAyMjQsIDIzMCwgOSwgMTEsIDIyNCwgCi0gICAgMjMxLCA5LCAxMSwgMjI0LCAyMzIsIDksIDExLCAyMjQsIDIzMywgOSwgMTEsIDIyNCwgMjM0LCA5LCAxMSwgMjI0LCAyMzUsIAotICAgIDksIDExLCAyMjQsIDIzNiwgOSwgMTEsIDIyNCwgMjM3LCA5LCAxMSwgMjI0LCAyMzgsIDksIDExLCAyMjQsIDIzOSwgOSwgCi0gICAgMTEsIDIyNCwgMjQwLCA5LCAxMSwgMjI0LCAyNDEsIDksIDExLCAyMjQsIDI0MiwgOSwgMTEsIDIyNCwgMjQzLCA5LCAxMSwgCi0gICAgMjI0LCAyNDQsIDksIDExLCAyMjQsIDI0NSwgOSwgMTEsIDIyNCwgMjQ2LCA5LCAxMSwgMjI0LCAyNDcsIDksIDExLCAyMjQsIAotICAgIDI0OCwgOSwgMTEsIDIyNCwgMjQ5LCA5LCAxMSwgMjI0LCAyNTAsIDksIDExLCAyMjQsIDI1MSwgOSwgMTEsIDIyNCwgMjUyLCAKLSAgICA5LCAxMSwgMjI0LCAyNTMsIDksIDExLCAyMjQsIDI1NCwgOSwgMTEsIDIyNCwgMjU1LCA5LCAxMSwgMjI1LCAwLCA5LCAxMSwgCi0gICAgMjI1LCAxLCA5LCAxMSwgMjI1LCAyLCA5LCAxMSwgMjI1LCAzLCA5LCAxMSwgMjI1LCA0LCA5LCAxMSwgMjI1LCA1LCA5LCAKLSAgICAxMSwgMjI1LCA2LCA5LCAxMSwgMjI1LCA3LCA5LCAxMSwgMjI1LCA4LCA5LCAxMSwgMjI1LCA5LCA5LCAxMSwgMjI1LCAxMCwgCi0gICAgOSwgMTEsIDIyNSwgMTEsIDksIDExLCAyMjUsIDEyLCA5LCAxMSwgMjI1LCAxMywgOSwgMTEsIDIyNSwgMTQsIDksIDExLCAKLSAgICAyMjUsIDE1LCA5LCAxMSwgMjI1LCAxNiwgOSwgMTEsIDIyNSwgMTcsIDksIDExLCAyMjUsIDE4LCA5LCAxMSwgMjI1LCAxOSwgCi0gICAgOSwgMTEsIDIyNSwgMjAsIDksIDExLCAyMjUsIDIxLCA5LCAxMSwgMjI1LCAyMiwgOSwgMTEsIDIyNSwgMjMsIDksIDExLCAKLSAgICAyMjUsIDI0LCA5LCAxMSwgMjI1LCAyNSwgOSwgMTEsIDIyNSwgMjYsIDksIDExLCAyMjUsIDI3LCA5LCAxMSwgMjI1LCAyOCwgCi0gICAgOSwgMTEsIDIyNSwgMjksIDksIDExLCAyMjUsIDMwLCA5LCAxMSwgMjI1LCAzMSwgOSwgMTEsIDIyNSwgMzIsIDksIDExLCAKLSAgICAyMjUsIDMzLCA5LCAxMSwgMjI1LCAzNCwgOSwgMTEsIDIyNSwgMzUsIDksIDExLCAyMjUsIDM2LCA5LCAxMSwgMjI1LCAzNywgCi0gICAgOSwgMTEsIDIyNSwgMzgsIDksIDExLCAyMjUsIDM5LCA5LCAxMSwgMjI1LCA0MCwgOSwgMTEsIDIyNSwgNDEsIDksIDExLCAKLSAgICAyMjUsIDQyLCA5LCAxMSwgMjI1LCA0MywgOSwgMTEsIDIyNSwgNDQsIDksIDExLCAyMjUsIDQ1LCA5LCAxMSwgMjI1LCA0NiwgCi0gICAgOSwgMTEsIDIyNSwgNDcsIDksIDExLCAyMjUsIDQ4LCA5LCAxMSwgMjI1LCA0OSwgOSwgMTEsIDIyNSwgNTAsIDksIDExLCAKLSAgICAyMjUsIDUxLCA5LCAxMSwgMjI1LCA1MiwgOSwgMTEsIDIyNSwgNTMsIDksIDExLCAyMjUsIDU0LCA5LCAxMSwgMjI1LCA1NSwgCi0gICAgOSwgMTEsIDIyNSwgNTYsIDksIDExLCAyMjUsIDU3LCA5LCAxMSwgMjI1LCA1OCwgOSwgMTEsIDIyNSwgNTksIDksIDExLCAKLSAgICAyMjUsIDYwLCA5LCAxMSwgMjI1LCA2MSwgOSwgMTEsIDIyNSwgNjIsIDksIDExLCAyMjUsIDYzLCA5LCAxMSwgMjI1LCA2NCwgCi0gICAgOSwgMTEsIDIyNSwgNjUsIDksIDExLCAyMjUsIDY2LCA5LCAxMSwgMjI1LCA2NywgOSwgMTEsIDIyNSwgNjgsIDksIDExLCAKLSAgICAyMjUsIDY5LCA5LCAxMSwgMjI1LCA3MCwgOSwgMTEsIDIyNSwgNzEsIDksIDExLCAyMjUsIDcyLCA5LCAxMSwgMjI1LCA3MywgCi0gICAgOSwgMTEsIDIyNSwgNzQsIDksIDExLCAyMjUsIDc1LCA5LCAxMSwgMjI1LCA3NiwgOSwgMTEsIDIyNSwgNzcsIDksIDExLCAKLSAgICAyMjUsIDc4LCA5LCAxMSwgMjI1LCA3OSwgOSwgMTEsIDIyNSwgODAsIDksIDExLCAyMjUsIDgxLCA5LCAxMSwgMjI1LCA4MiwgCi0gICAgOSwgMTEsIDIyNSwgODMsIDksIDExLCAyMjUsIDg0LCA5LCAxMSwgMjI1LCA4NSwgOSwgMTEsIDIyNSwgODYsIDksIDExLCAKLSAgICAyMjUsIDg3LCA5LCAxMSwgMjI1LCA4OCwgOSwgMTEsIDIyNSwgODksIDksIDExLCAyMjUsIDkwLCA5LCAxMSwgMjI1LCA5MSwgCi0gICAgOSwgMTEsIDIyNSwgOTIsIDIzNCwgMTQ0LCAyNDcsIDEwNSwgMTA4LCAyMzcsIDY5LCAxMDgsIDIyOSwgMTY1LCA3NiwgMTA4LCAKLSAgICAyMzEsIDE5OSwgNzYsIDEwOCwgNjUsIDUzLCAxMDgsIDIzNywgMTc5LCA1MywgMTA4LCAyMzUsIDg2LCA1MywgMTA4LCAyMzAsIAotICAgIDE0MiwgMTA4LCAyMjksIDE3MiwgMTA4LCA0MiwgMjI4LCAxODAsIDEwOCwgNDEsIDIyOCwgMTgwLCAxMDgsIDIzMSwgMTk4LCAKLSAgICAxMDgsIDc5LCA1MywgMTA4LCAyMzcsIDY3LCAxMDgsIDIyNywgMTkzLCAxMDgsIDI0NiwgMTYyLCAyNDAsIDEyMSwgMTA4LCAKLSAgICAyMzMsIDEwNCwgMTA4LCAyMSwgMjQwLCAxMjYsIDEwOCwgMjEsIDExOCwgMTA4LCAyMSwgMTEzLCAxMDgsIDIxLCAxNjYsIAotICAgIDEwOCwgMjEsIDE1OCwgMTA4LCAyMSwgMTczLCAxMDgsIDIxLCAxODMsIDEwOCwgMjEsIDE5NCwgMTA4LCAyMSwgMTg3LCAKLSAgICAxMDgsIDIxLCAxOTIsIDEwOCwgMjM3LCA2NiwgMTA4LCAyMzAsIDE0MCwgMTA4LCAyMzEsIDE5MCwgNTMsIDEwOCwgMjM3LCAKLSAgICA1MSwgNTMsIDEwOCwgMjI4LCAxNzUsIDUzLCAxMDgsIDIzMywgODIsIDc2LCAxMDgsIDIzMCwgMTQ1LCAyNTMsIDExMywgCi0gICAgMTA4LCA3LCA2LCAxLCA1NywgMTA4LCA3LCA2LCAxLCAyNTQsIDE4NSwgMTA4LCA3LCA2LCAxLCAyNTQsIDE5NCwgMTA4LCA3LCAKLSAgICA2LCAxLCAyMjIsIDIyMiwgMTA4LCA3LCA2LCAxLCA3MiwgMTA4LCA3LCA2LCAxLCAyNTQsIDE5MSwgMTA4LCA3LCA2LCAxLCAKLSAgICAyMTQsIDEwOCwgNywgNiwgMSwgMjEyLCAxMDgsIDcsIDYsIDEsIDc0LCAxMDgsIDcsIDYsIDEsIDI1NCwgMTkyLCAxMDgsIDcsIAotICAgIDYsIDEsIDI1NCwgMTg2LCAxMDgsIDcsIDYsIDEsIDE0OSwgMTA4LCA3LCA2LCAxLCAxODUsIDEwOCwgNywgNiwgMSwgMTk5LCAKLSAgICAxMDgsIDcsIDYsIDEsIDczLCAxMDgsIDcsIDYsIDEsIDI1NCwgMTg3LCAxMDgsIDcsIDYsIDEsIDI1NCwgMTk2LCAxMDgsIDcsIAotICAgIDYsIDEsIDE0NiwgMTA4LCA3LCA2LCAxLCAxOTMsIDEwOCwgNywgNiwgMSwgMjU0LCAxODMsIDEwOCwgNywgNiwgMSwgNjYsIAotICAgIDEwOCwgNywgNiwgMSwgMTk2LCAxMDgsIDcsIDYsIDEsIDI1NCwgMTk1LCAxMDgsIDcsIDYsIDEsIDI1NCwgMTg0LCAxMDgsIAotICAgIDcsIDYsIDEsIDI1NCwgMTkwLCAxMDgsIDcsIDYsIDEsIDI1NCwgMTkzLCAxMDgsIDQyLCAzNywgMTA0LCAxMDgsIDIzNSwgCi0gICAgMzcsIDIzMywgMTA0LCAxMDgsIDQxLCAzNywgMTA0LCAxMDgsIDIzMCwgMTI1LCAyMzUsIDI0LCAxMDgsIDE4NCwgMjQwLCAKLSAgICAxMzgsIDEwOCwgMjQwLCAxNjMsIDIzNSwgMjQsIDEwOCwgNywgMywgMSwgNTcsIDEwOCwgNywgMywgMSwgMjU0LCAxODUsIAotICAgIDEwOCwgNywgMywgMSwgMjU0LCAxOTQsIDEwOCwgNywgMywgMSwgMjIyLCAyMjIsIDEwOCwgNywgMywgMSwgNzIsIDEwOCwgNywgCi0gICAgMywgMSwgMjU0LCAxOTEsIDEwOCwgNywgMywgMSwgMjE0LCAxMDgsIDcsIDMsIDEsIDIxMiwgMTA4LCA3LCAzLCAxLCA3NCwgCi0gICAgMTA4LCA3LCAzLCAxLCAyNTQsIDE5MiwgMTA4LCA3LCAzLCAxLCAyNTQsIDE4NiwgMTA4LCA3LCAzLCAxLCAxNDksIDEwOCwgCi0gICAgNywgMywgMSwgMTg1LCAxMDgsIDcsIDMsIDEsIDE5OSwgMTA4LCA3LCAzLCAxLCA3MywgMTA4LCA3LCAzLCAxLCAyNTQsIAotICAgIDE4NywgMTA4LCA3LCAzLCAxLCAyNTQsIDE5NiwgMTA4LCA3LCAzLCAxLCAxNDYsIDEwOCwgNywgMywgMSwgMTkzLCAxMDgsIAotICAgIDcsIDMsIDEsIDI1NCwgMTgzLCAxMDgsIDcsIDMsIDEsIDY2LCAxMDgsIDcsIDMsIDEsIDE5NiwgMTA4LCA3LCAzLCAxLCAKLSAgICAyNTQsIDE5NSwgMTA4LCA3LCAzLCAxLCAyNTQsIDE4NCwgMTA4LCA3LCAzLCAxLCAyNTQsIDE5MCwgMTA4LCA3LCAzLCAxLCAKLSAgICAyNTQsIDE5MywgMTA4LCA0MiwgMjQwLCAxMzcsIDEwNCwgMTA4LCA2MSwgMjQwLCAxMzgsIDEwOCwgNDEsIDI0MCwgMTM3LCAKLSAgICAxMDQsIDEwOCwgMjA1LCAyMzgsIDEzNywgMjQ3LCAxMDUsIDM4LCAyMjksIDY2LCAzOCwgMjI5LCA2NywgMzgsIDIyOSwgNjgsIAotICAgIDM4LCAyMjksIDY5LCAzOCwgMjI5LCA3MCwgMzgsIDIyOSwgNzEsIDM4LCAyMjksIDcyLCAzOCwgMjI5LCA3MywgMzgsIDIyOSwgCi0gICAgNzQsIDM4LCAyMjksIDc1LCAzOCwgMjI5LCA3NiwgMzgsIDIyOSwgNzcsIDM4LCAyMjksIDc4LCAzOCwgMjI5LCA3OSwgMzgsIAotICAgIDIyOSwgODAsIDM4LCAyMjksIDgxLCAzOCwgMjI5LCA4MiwgMzgsIDIyOSwgODMsIDM4LCAyMjksIDg0LCAzOCwgMjI5LCA4NSwgCi0gICAgMzgsIDIyOSwgODYsIDM4LCAyMjksIDg3LCAzOCwgMjI5LCA4OCwgMzgsIDIyOSwgODksIDM4LCAyMjksIDkwLCAzOCwgMjI5LCAKLSAgICA5MSwgMzgsIDIyOSwgOTIsIDM4LCAyMjksIDkzLCAzOCwgMjI5LCA5NCwgMzgsIDIyOSwgOTUsIDM4LCAyMjksIDk2LCAzOCwgCi0gICAgMjI5LCA5NywgMzgsIDIyOSwgOTgsIDM4LCAyMjksIDk5LCAzOCwgMjI5LCAxMDAsIDM4LCAyMjksIDEwMSwgMzgsIDIyOSwgCi0gICAgMTAyLCAzOCwgMjI5LCAxMDMsIDM4LCAyMjksIDEwNCwgMzgsIDIyOSwgMTA1LCAzOCwgMjI5LCAxMDYsIDM4LCAyMjksIAotICAgIDEwNywgMzgsIDIyOSwgMTA4LCAzOCwgMjI5LCAxMDksIDM4LCAyMjksIDExMCwgMzgsIDIyOSwgMTExLCAzOCwgMjI5LCAKLSAgICAxMTIsIDM4LCAyMjksIDExMywgMzgsIDIyOSwgMTE0LCAzOCwgMjI5LCAxMTUsIDM4LCAyMjksIDExNiwgMzgsIDIyOSwgCi0gICAgMTE3LCAzOCwgMjI5LCAxMTgsIDM4LCAyMjksIDExOSwgMzgsIDIyOSwgMTIwLCAzOCwgMjI5LCAxMjEsIDM4LCAyMjksIAotICAgIDEyMiwgMzgsIDIyOSwgMTIzLCAzOCwgMjI5LCAxMjQsIDM4LCAyMjksIDEyNSwgMzgsIDIyOSwgMTI2LCAzOCwgMjI5LCAKLSAgICAxMjcsIDM4LCAyMjksIDEyOCwgMzgsIDIyOSwgMTI5LCAzOCwgMjI5LCAxMzAsIDM4LCAyMjksIDEzMSwgMzgsIDIyOSwgCi0gICAgMTMyLCAzOCwgMjI5LCAxMzMsIDM4LCAyMjksIDEzNCwgMzgsIDIyOSwgMTM1LCAzOCwgMjI5LCAxMzYsIDM4LCAyMjksIAotICAgIDEzNywgMzgsIDIyOSwgMTM4LCAzOCwgMjI5LCAxMzksIDM4LCAyMjksIDE0MCwgMzgsIDIyOSwgMTQxLCAzOCwgMjI5LCAKLSAgICAxNDIsIDM4LCAyMjksIDE0MywgMzgsIDIyOSwgMTQ0LCAzOCwgMjI5LCAxNDUsIDM4LCAyMjksIDE0NiwgMzgsIDIyOSwgCi0gICAgMTQ3LCAzOCwgMjI5LCAxNDgsIDM4LCAyMjgsIDMsIDM4LCAyMjgsIDQsIDM4LCAyMjgsIDUsIDM4LCAyMjgsIDYsIDM4LCAKLSAgICAyMjgsIDcsIDM4LCAyMjgsIDgsIDM4LCAyMjgsIDksIDM4LCAyMjgsIDEwLCAzOCwgMjI4LCAxMSwgMzgsIDIyOCwgMTIsIAotICAgIDM4LCAyMjgsIDEzLCAzOCwgMjI4LCAxNCwgMzgsIDIyOCwgMTUsIDM4LCAyMjgsIDE2LCAzOCwgMjI4LCAxNywgMzgsIDIyOCwgCi0gICAgMTgsIDM4LCAyMjgsIDE5LCAzOCwgMjI4LCAyMCwgMzgsIDIyOCwgMjEsIDM4LCAyMjgsIDIyLCAzOCwgMjI4LCAyMywgMzgsIAotICAgIDIyOCwgMjQsIDM4LCAyMjgsIDI1LCAzOCwgMjI4LCAyNiwgMzgsIDIyOCwgMjcsIDM4LCAyMjgsIDI4LCAzOCwgMjI4LCAyOSwgCi0gICAgMzgsIDIyOCwgMzAsIDM4LCAyMjgsIDMxLCAzOCwgMjI4LCAzMiwgMzgsIDIyOCwgMzMsIDM4LCAyMjgsIDM0LCAzOCwgMjI4LCAKLSAgICAzNSwgMzgsIDIyOCwgMzYsIDM4LCAyMjgsIDM3LCAzOCwgMjI4LCAzOCwgMzgsIDIyOCwgMzksIDM4LCAyMjgsIDQwLCAzOCwgCi0gICAgMjI4LCA0MSwgMzgsIDIyOCwgNDIsIDM4LCAyMjgsIDQzLCAzOCwgMjI4LCA0NCwgMzgsIDIyOCwgNDUsIDM4LCAyMjgsIDQ2LCAKLSAgICAzOCwgMjI4LCA0NywgMzgsIDIyOCwgNDgsIDM4LCAyMjgsIDQ5LCAzOCwgMjI4LCA1MCwgMzgsIDIyOCwgNTEsIDM4LCAyMjgsIAotICAgIDUyLCAzOCwgMjI4LCA1MywgMzgsIDIyOCwgNTQsIDM4LCAyMjgsIDU1LCAzOCwgMjI4LCA1NiwgMzgsIDIyOCwgNTcsIDM4LCAKLSAgICAyMjgsIDU4LCAzOCwgMjI4LCA1OSwgMzgsIDIyOCwgNjAsIDM4LCAyMjgsIDYxLCAzOCwgMjI4LCA2MiwgMzgsIDIyOCwgNjMsIAotICAgIDM4LCAyMjgsIDY0LCAzOCwgMjI4LCA2NSwgMzgsIDIyOCwgNjYsIDM4LCAyMjgsIDY3LCAzOCwgMjI4LCA2OCwgMzgsIDIyOCwgCi0gICAgNjksIDM4LCAyMjgsIDcwLCAzOCwgMjI4LCA3MSwgMzgsIDIyOCwgNzIsIDM4LCAyMjgsIDczLCAzOCwgMjI4LCA3NCwgMzgsIAotICAgIDIyOCwgNzUsIDM4LCAyMjgsIDc2LCAzOCwgMjI4LCA3NywgMzgsIDIyOCwgNzgsIDM4LCAyMjgsIDc5LCAzOCwgMjI4LCA4MCwgCi0gICAgMzgsIDIyOCwgODEsIDM4LCAyMjgsIDgyLCAzOCwgMjI4LCA4MywgMzgsIDIyOCwgODQsIDM4LCAyMjgsIDg1LCAzOCwgMjI4LCAKLSAgICA4NiwgMzgsIDIyOCwgODcsIDM4LCAyMjgsIDg4LCAzOCwgMjI4LCA4OSwgMzgsIDIyOCwgOTAsIDM4LCAyMjgsIDkxLCAzOCwgCi0gICAgMjI4LCA5MiwgMzgsIDIyOCwgOTMsIDM4LCAyMjgsIDk0LCAzOCwgMjI4LCA5NSwgMzgsIDIyOCwgOTYsIDM4LCAyMjgsIDk3LCAKLSAgICAzOCwgMjI4LCA5OCwgMzgsIDIyOCwgOTksIDM4LCAyMjgsIDEwMCwgMzgsIDIyOCwgMTAxLCAzOCwgMjI4LCAxMDIsIDM4LCAKLSAgICAyMjgsIDEwMywgMzgsIDIyOCwgMTA0LCAzOCwgMjI4LCAxMDUsIDM4LCAyMjgsIDEwNiwgMzgsIDIyOCwgMTA3LCAzOCwgCi0gICAgMjI4LCAxMDgsIDM4LCAyMjgsIDEwOSwgMzgsIDIyOCwgMTEwLCAzOCwgMjI4LCAxMTEsIDM4LCAyMjgsIDExMiwgMzgsIAotICAgIDIyOCwgMTEzLCAzOCwgMjI4LCAxMTQsIDM4LCAyMjgsIDExNSwgMzgsIDIyOCwgMTE2LCAzOCwgMjI4LCAxMTcsIDM4LCAKLSAgICAyMjgsIDExOCwgMzgsIDIyOCwgMTE5LCAzOCwgMjI4LCAxMjAsIDM4LCAyMjgsIDEyMSwgMzgsIDIyOCwgMTIyLCAzOCwgCi0gICAgMjI4LCAxMjMsIDM4LCAyMjgsIDEyNCwgMzgsIDIyOCwgMTI1LCAzOCwgMjI4LCAxMjYsIDM4LCAyMjgsIDEyNywgMzgsIAotICAgIDIyOCwgMTI4LCAzOCwgMjI4LCAxMjksIDM4LCAyMjgsIDEzMCwgMzgsIDIyOCwgMTMxLCAzOCwgMjI4LCAxMzIsIDM4LCAKLSAgICAyMjgsIDEzMywgMzgsIDIyOCwgMTM0LCAzOCwgMjI4LCAxMzUsIDM4LCAyMjgsIDEzNiwgMzgsIDIyOCwgMTM3LCAzOCwgCi0gICAgMjI4LCAxMzgsIDM4LCAyMjgsIDEzOSwgMzgsIDIyOCwgMTQwLCAzOCwgMjI4LCAxNDEsIDM4LCAyMjgsIDE0MiwgMzgsIAotICAgIDIyOCwgMTQzLCAzOCwgMjI4LCAxNDQsIDM4LCAyMjgsIDE0NSwgMzgsIDIyOCwgMTQ2LCAzOCwgMjI4LCAxNDcsIDM4LCAKLSAgICAyMjgsIDE0OCwgMzgsIDIyOCwgMTQ5LCAzOCwgMjI4LCAxNTAsIDM4LCAyMjgsIDE1MSwgMzgsIDIyOCwgMTUyLCAzOCwgCi0gICAgMjI4LCAxNTMsIDM4LCAyMjgsIDE1NCwgMzgsIDIyOCwgMTU1LCAzOCwgMjI4LCAxNTYsIDM4LCAyMjgsIDE1NywgMzgsIAotICAgIDIyOCwgMTU4LCAzOCwgMjI4LCAxNTksIAorICAgIDAsIDIyMywgMjU0LCAyNDYsIDk1LCA3OCwgMjI4LCA2OSwgNzgsIDU0LCA1NSwgMjQ4LCAxNTUsIDU1LCAyMjksIDE2OSwgCisgICAgNTUsIDI1NCwgMTM0LCAyNTQsIDc5LCA0MiwgMjI5LCAyMjksIDQ1LCAyMjksIDIyOSwgMjUzLCAyNTEsIDg4LCA1NSwgMjUwLCAKKyAgICAxNjgsIDI0MiwgMTIwLCAyNDUsIDkwLCAyMjMsIDEzNiwgMjI0LCAxNywgMjAsIDIxNywgODQsIDIwLCAxMDcsIDIwLCAxMDMsIAorICAgIDIwLCAxNjAsIDIwLCAxNTQsIDIwLCAxNzQsIDIwLCAxODIsIDIwLCAxOTEsIDIwLCAxODUsIDIwLCAxOTAsIDI1MCwgMTc1LCAKKyAgICAyMjUsIDY3LCAyMzUsIDg3LCA1NSwgMjQ2LCAxNTQsIDU1LCAyNDQsIDMwLCA1NSwgMjI4LCA4MiwgNzgsIDI1MCwgMTY3LCAKKyAgICAyNTMsIDI0NCwgNywgNiwgMSwgNjAsIDcsIDYsIDEsIDI1MywgMjA0LCA3LCA2LCAxLCAyNTEsIDIwMiwgNywgNiwgMSwgCisgICAgMjUwLCA0NiwgNywgNiwgMSwgNzMsIDcsIDYsIDEsIDI0NiwgNzQsIDcsIDYsIDEsIDI0NSwgNjcsIDcsIDYsIDEsIDI0MywgCisgICAgMjI1LCA3LCA2LCAxLCA3MiwgNywgNiwgMSwgMjM3LCAxMjYsIDcsIDYsIDEsIDIzNywgMTcsIDcsIDYsIDEsIDE1MywgNywgCisgICAgNiwgMSwgMTg5LCA3LCA2LCAxLCAyMDcsIDcsIDYsIDEsIDc0LCA3LCA2LCAxLCAyMzAsIDU5LCA3LCA2LCAxLCAyMjgsIAorICAgIDE2MywgNywgNiwgMSwgMTUyLCA3LCA2LCAxLCAxOTgsIDcsIDYsIDEsIDIyMiwgMjAxLCA3LCA2LCAxLCA2OCwgNywgNiwgMSwgCisgICAgMjE2LCAyMTYsIDcsIDYsIDEsIDIxOSwgNDAsIDcsIDYsIDEsIDIxOCwgMTUxLCA3LCA2LCAxLCAyMTgsIDkwLCA3LCA2LCAxLCAKKyAgICAyMTcsIDE1NywgNDIsIDQwLCAxMTUsIDIyNywgMTYwLCAyMjQsIDE3LCA0NSwgNDAsIDExNSwgMjUwLCAyMTcsIDI1NSwgMCwgCisgICAgMTA5LCAyMzUsIDQzLCAyNDQsIDM3LCAyNTUsIDAsIDcsIDMsIDEsIDYwLCA3LCAzLCAxLCAyNTMsIDIwNCwgNywgMywgMSwgCisgICAgMjUxLCAyMDIsIDcsIDMsIDEsIDI1MCwgNDYsIDcsIDMsIDEsIDczLCA3LCAzLCAxLCAyNDYsIDc0LCA3LCAzLCAxLCAyNDUsIAorICAgIDY3LCA3LCAzLCAxLCAyNDMsIDIyNSwgNywgMywgMSwgNzIsIDcsIDMsIDEsIDIzNywgMTI2LCA3LCAzLCAxLCAyMzcsIDE3LCAKKyAgICA3LCAzLCAxLCAxNTMsIDcsIDMsIDEsIDE4OSwgNywgMywgMSwgMjA3LCA3LCAzLCAxLCA3NCwgNywgMywgMSwgMjMwLCA1OSwgCisgICAgNywgMywgMSwgMjI4LCAxNjMsIDcsIDMsIDEsIDE1MiwgNywgMywgMSwgMTk4LCA3LCAzLCAxLCAyMjIsIDIwMSwgNywgMywgCisgICAgMSwgNjgsIDcsIDMsIDEsIDIxNiwgMjE2LCA3LCAzLCAxLCAyMTksIDQwLCA3LCAzLCAxLCAyMTgsIDE1MSwgNywgMywgMSwgCisgICAgMjE4LCA5MCwgNywgMywgMSwgMjE3LCAxNTcsIDQyLCAyNTAsIDc5LCAxMTUsIDY5LCAyMzUsIDQzLCA0NSwgMjUwLCA3OSwgCisgICAgMTE1LCAyMjEsIDE3OSwgMjMxLCAyMDMsIDIyMywgMjU0LCAyMzcsIDE3MCwgMjQ2LCA5NSwgNzgsIDI1MSwgODYsIDU1LCAKKyAgICAyMjksIDExLCA1NSwgMjUwLCA3OCwgNTUsIDIxOCwgMTksIDU1LCAyNTIsIDEsIDEzNSwgMjI2LCA4NywgNTUsIDI0OSwgMTMsIAorICAgIDI1MCwgMTI2LCA1NSwgMjQ1LCAyMTUsIDIzMCwgMTAzLCAyMzcsIDIxMSwgMjM1LCAxMTIsIDUxLCAyNTQsIDEyMCwgMjI4LCAKKyAgICA2OSwgNzgsIDIxMiwgNTUsIDIyNCwgMjEsIDI0MiwgMTIxLCAyMjcsIDE5OCwgNTUsIDIzNCwgMTE1LCAyNDksIDc3LCA1NSwgCisgICAgMjI5LCA0MiwgNTUsIDIyMywgNTksIDEwMywgMjIzLCA1OSwgMTYwLCAyNTQsIDI0OCwgMjU1LCAwLCAyMzMsIDE5NSwgNTUsIAorICAgIDIyOSwgNzMsIDU1LCAyMzMsIDE5MywgMjQ4LCAxNDUsIDI1MSwgOTIsIDIyMywgNTksIDEwNywgMjM0LCA1OCwgMjMwLCAKKyAgICAxMDMsIDIzNywgMjExLCAyMjcsIDEwNiwgNTEsIDI1NCwgMTIwLCAyMjgsIDY5LCA3OCwgMjE5LCA1NSwgMjQ1LCAxMDgsIAorICAgIDEzMSwgMjI4LCA4OSwgMjE5LCA1NSwgMjQ1LCAxMDgsIDEzMSwgMjQzLCAxOTQsIDIxOSwgNTUsIDI0NSwgMTA4LCAxNDgsIAorICAgIDIyOCwgODcsIDIzNywgMTcwLCAyMjgsIDgyLCA3OCwgNywgNiwgMSwgMTEyLCAyLCAyNDQsIDM2LCA3LCA2LCAxLCAxMTIsIAorICAgIDIsIDE2OCwgNywgNiwgMSwgMTEyLCAyLCAyNTAsIDIxNiwgNywgNiwgMSwgMTEyLCAyLCAyMjEsIDE3OSwgNywgNiwgMSwgCisgICAgMTEyLCAyLCAyNDksIDEzLCA3LCA2LCAxLCAxMTIsIDIsIDIyNywgOTQsIDUwLCA3LCA2LCAxLCAyNTQsIDIzNCwgNywgNiwgCisgICAgMSwgMjUxLCAyMDMsIDIsIDI1MSwgOTIsIDcsIDYsIDEsIDE3OCwgMiwgMjQ0LCAzNiwgNywgNiwgMSwgMTc4LCAyLCAxNjgsIAorICAgIDcsIDYsIDEsIDE3OCwgMiwgMjUwLCAyMTYsIDcsIDYsIDEsIDE3OCwgMiwgMjQ5LCAxMywgNywgNiwgMSwgMjQyLCAxMDcsIAorICAgIDIsIDI0NCwgMzYsIDcsIDYsIDEsIDI0MiwgMTA3LCAyLCAxNjgsIDcsIDYsIDEsIDI0MiwgMTA3LCAyLCAyNTAsIDIxNiwgNywgCisgICAgNiwgMSwgMjQyLCAxMDcsIDIsIDI0OSwgMTMsIDcsIDYsIDEsIDI0NiwgMTE4LCA3LCA2LCAxLCAyMzMsIDM0LCAyLCAyMjEsIAorICAgIDE3OSwgNywgNiwgMSwgMTQyLCAyLCAyNDQsIDM2LCA3LCA2LCAxLCAxNDIsIDIsIDE2OCwgNywgNiwgMSwgMTQyLCAyLCAKKyAgICAyNTAsIDIxNiwgNywgNiwgMSwgMTQyLCAyLCAyMjEsIDE3OSwgNywgNiwgMSwgMTQyLCAyLCAyNDksIDEzLCAyMzMsIDg0LCAKKyAgICA1NSwgNywgNiwgMSwgMTQyLCAyLCA5MiwgNywgNiwgMSwgMTA1LCAyLCAyNDQsIDM2LCA3LCA2LCAxLCAxMDUsIDIsIDE2OCwgCisgICAgNywgNiwgMSwgMTA1LCAyLCAyNTAsIDIxNiwgNywgNiwgMSwgMTA1LCAyLCAyNDksIDEzLCA3LCA2LCAxLCAyMTgsIDkxLCAyLCAKKyAgICAxNjgsIDcsIDYsIDEsIDIyMSwgMjM0LCA3LCAzLCAxLCAyMjUsIDEsIDE5OCwgNywgMywgMSwgMTEyLCAyLCAyNDQsIDM2LCAKKyAgICA3LCAzLCAxLCAxMTIsIDIsIDE2OCwgNywgMywgMSwgMTEyLCAyLCAyNTAsIDIxNiwgNywgMywgMSwgMTEyLCAyLCAyMjEsIAorICAgIDE3OSwgNywgMywgMSwgMTEyLCAyLCAyNDksIDEzLCA3LCAzLCAxLCAxMTIsIDIsIDIyNywgOTQsIDUwLCA3LCAzLCAxLCAKKyAgICAyNTQsIDIzNCwgNywgMywgMSwgMjUxLCAyMDMsIDIsIDI1MSwgOTIsIDcsIDMsIDEsIDE3OCwgMiwgMjQ0LCAzNiwgNywgMywgCisgICAgMSwgMTc4LCAyLCAxNjgsIDcsIDMsIDEsIDE3OCwgMiwgMjUwLCAyMTYsIDcsIDMsIDEsIDE3OCwgMiwgMjQ5LCAxMywgNywgCisgICAgMywgMSwgMjQyLCAxMDcsIDIsIDI0NCwgMzYsIDcsIDMsIDEsIDI0MiwgMTA3LCAyLCAxNjgsIDcsIDMsIDEsIDI0MiwgMTA3LCAKKyAgICAyLCAyNTAsIDIxNiwgNywgMywgMSwgMjQyLCAxMDcsIDIsIDI0OSwgMTMsIDcsIDMsIDEsIDI0NiwgMTE4LCA3LCAzLCAxLCAKKyAgICAyMzMsIDM0LCAyLCAyMjEsIDE3OSwgNywgMywgMSwgMTQyLCAyLCAyNDQsIDM2LCA3LCAzLCAxLCAxNDIsIDIsIDE2OCwgNywgCisgICAgMywgMSwgMTQyLCAyLCAyNTAsIDIxNiwgNywgMywgMSwgMTQyLCAyLCAyMjEsIDE3OSwgNywgMywgMSwgMTQyLCAyLCAyNDksIAorICAgIDEzLCAyNDgsIDE4OCwgNTUsIDcsIDMsIDEsIDE0MiwgMiwgOTIsIDcsIDMsIDEsIDEwNSwgMiwgMjQ0LCAzNiwgNywgMywgMSwgCisgICAgMTA1LCAyLCAxNjgsIDcsIDMsIDEsIDEwNSwgMiwgMjUwLCAyMTYsIDcsIDMsIDEsIDEwNSwgMiwgMjQ5LCAxMywgNywgMywgCisgICAgMSwgMjE4LCA5MSwgMiwgMTY4LCA3LCAzLCAxLCAyMjEsIDIzNCwgNywgMywgMSwgMjE4LCA5MSwgMiwgMjQ5LCAxMywgNywgCisgICAgNiwgMSwgMTEyLCAyLCAyMzQsIDExNSwgNywgMywgMSwgMTEyLCAyLCAyMzQsIDExNSwgNywgNiwgMSwgMTEyLCAyLCAyNTIsIAorICAgIDgsIDcsIDMsIDEsIDExMiwgMiwgMjUyLCA4LCA3LCA2LCAxLCAxMTIsIDIsIDIzMCwgMTYyLCA3LCAzLCAxLCAxMTIsIDIsIAorICAgIDIzMCwgMTYyLCA3LCA2LCAxLCAyNTEsIDIwMywgMiwgMTY4LCA3LCAzLCAxLCAyNTEsIDIwMywgMiwgMTY4LCA3LCA2LCAxLCAKKyAgICAyNTEsIDIwMywgMiwgMjUwLCAyMTYsIDcsIDMsIDEsIDI1MSwgMjAzLCAyLCAyNTAsIDIxNiwgNywgNiwgMSwgMjUxLCAyMDMsIAorICAgIDIsIDYxLCA1MCwgNywgMywgMSwgMjUxLCAyMDMsIDIsIDYxLCA1MCwgNywgNiwgMSwgMjUxLCAyMDMsIDIsIDI1MSwgMTMwLCAKKyAgICA3LCAzLCAxLCAyNTEsIDIwMywgMiwgMjUxLCAxMzAsIDcsIDYsIDEsIDI1MCwgNDcsIDIsIDI1MSwgMTMwLCA3LCAzLCAxLCAKKyAgICAyNTAsIDQ3LCAyLCAyNTEsIDEzMCwgNywgNiwgMSwgMjUwLCA0NywgMiwgOTIsIDcsIDMsIDEsIDI1MCwgNDcsIDIsIDkyLCAKKyAgICA3LCA2LCAxLCAxNzgsIDIsIDIzNCwgMTE1LCA3LCAzLCAxLCAxNzgsIDIsIDIzNCwgMTE1LCA3LCA2LCAxLCAxNzgsIDIsIAorICAgIDI1MiwgOCwgNywgMywgMSwgMTc4LCAyLCAyNTIsIDgsIDcsIDYsIDEsIDE3OCwgMiwgNjEsIDUwLCA3LCAzLCAxLCAxNzgsIAorICAgIDIsIDYxLCA1MCwgNywgNiwgMSwgMTc4LCAyLCAyMzAsIDE2MiwgNywgMywgMSwgMTc4LCAyLCAyMzAsIDE2MiwgNywgNiwgMSwgCisgICAgMTc4LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgMTc4LCAyLCAyNTEsIDEzMCwgNywgNiwgMSwgMjQ1LCA2OCwgMiwgMjUwLCAKKyAgICAyMTYsIDcsIDMsIDEsIDI0NSwgNjgsIDIsIDI1MCwgMjE2LCA3LCA2LCAxLCAyNDUsIDY4LCAyLCAyNTIsIDgsIDcsIDMsIDEsIAorICAgIDI0NSwgNjgsIDIsIDI1MiwgOCwgNywgNiwgMSwgMjQ1LCA2OCwgMiwgNjEsIDUwLCA3LCAzLCAxLCAyNDUsIDY4LCAyLCA2MSwgCisgICAgNTAsIDcsIDYsIDEsIDI0NSwgNjgsIDIsIDI1MSwgOTIsIDcsIDMsIDEsIDI0NSwgNjgsIDIsIDI1MSwgOTIsIDcsIDYsIDEsIAorICAgIDI0MywgMjI2LCAyLCAyNTAsIDIxNiwgNywgMywgMSwgMjQzLCAyMjYsIDIsIDI1MCwgMjE2LCA3LCA2LCAxLCAyNDMsIDIyNiwgCisgICAgMiwgOTIsIDcsIDMsIDEsIDI0MywgMjI2LCAyLCA5MiwgNywgNiwgMSwgMjQyLCAxMDcsIDIsIDIyMSwgMTc5LCA3LCAzLCAxLCAKKyAgICAyNDIsIDEwNywgMiwgMjIxLCAxNzksIDcsIDYsIDEsIDI0MiwgMTA3LCAyLCAyMzQsIDExNSwgNywgMywgMSwgMjQyLCAxMDcsIAorICAgIDIsIDIzNCwgMTE1LCA3LCA2LCAxLCAyNDIsIDEwNywgMiwgMjUyLCA4LCA3LCAzLCAxLCAyNDIsIDEwNywgMiwgMjUyLCA4LCAKKyAgICA3LCA2LCAxLCAyNDIsIDEwNywgMiwgMjMwLCAxNjIsIDcsIDMsIDEsIDI0MiwgMTA3LCAyLCAyMzAsIDE2MiwgNywgNiwgMSwgCisgICAgMjQyLCAxMDcsIDIsIDYxLCA1MCwgNywgMywgMSwgMjQ4LCAxNDQsIDcyLCA3LCA2LCAyNCwgMjM3LCAyNTMsIDcsIDMsIDI0LCAKKyAgICAyMzcsIDI1MywgNywgNiwgMSwgMjM3LCAxMjcsIDIsIDI1MCwgMjE2LCA3LCAzLCAxLCAyMzcsIDEyNywgMiwgMjUwLCAyMTYsIAorICAgIDcsIDYsIDEsIDIzNywgMTgsIDIsIDI1MSwgOTIsIDcsIDMsIDEsIDIzNywgMTgsIDIsIDI1MSwgOTIsIDcsIDMsIDEsIDIzNiwgCisgICAgMTcsIDcsIDYsIDEsIDIzNSwgMjAyLCAyLCAxNjgsIDcsIDMsIDEsIDIzNSwgMjAyLCAyLCAxNjgsIDcsIDYsIDEsIDIzNSwgCisgICAgMjAyLCAyLCAyNTEsIDkyLCA3LCAzLCAxLCAyMzUsIDIwMiwgMiwgMjUxLCA5MiwgNywgNiwgMSwgMjM1LCAyMDIsIDIsIAorICAgIDI1MSwgMTMwLCA3LCAzLCAxLCAyMzUsIDIwMiwgMiwgMjUxLCAxMzAsIDcsIDYsIDEsIDIzNSwgMjAyLCAyLCAyMzMsIDE5MywgCisgICAgMjQ4LCAxNDUsIDcsIDMsIDEsIDIzNSwgMjAyLCAyLCAyMzMsIDE5MywgMjQ4LCAxNDUsIDcsIDYsIDEsIDIzNSwgMjAyLCAyLCAKKyAgICA5MiwgNywgMywgMSwgMjM1LCAyMDIsIDIsIDkyLCA3LCA2LCAxLCAyMzMsIDM0LCAyLCAxNjgsIDcsIDMsIDEsIDIzMywgMzQsIAorICAgIDIsIDE2OCwgNywgNiwgMSwgMjMzLCAzNCwgMiwgMjUxLCA5MiwgNywgMywgMSwgMjMzLCAzNCwgMiwgMjUxLCA5MiwgNywgNiwgCisgICAgMSwgMjMzLCAzNCwgMiwgMjUxLCAxMzAsIDcsIDMsIDEsIDIzMywgMzQsIDIsIDI1MSwgMTMwLCA3LCAzLCAxLCAyMzMsIDM0LCAKKyAgICAyMjgsIDI0NiwgMjUxLCAyMTMsIDI1NCwgNzksIDcsIDYsIDEsIDI0NiwgMTg1LCA3LCAzLCAxLCAyNDYsIDE4NSwgNywgNiwgCisgICAgMSwgMTQyLCAyLCAyMzQsIDExNSwgNywgMywgMSwgMTQyLCAyLCAyMzQsIDExNSwgNywgNiwgMSwgMTQyLCAyLCAyNTIsIDgsIAorICAgIDcsIDMsIDEsIDE0MiwgMiwgMjUyLCA4LCA3LCA2LCAxLCAxNDIsIDIsIDUxLCAxNjgsIDcsIDMsIDEsIDE0MiwgMiwgNTEsIAorICAgIDE2OCwgNywgNiwgMjQsIDIzMCwgMTY3LCA3LCAzLCAyNCwgMjMwLCAxNjcsIDcsIDYsIDEsIDIyOCwgMzksIDIsIDE2OCwgNywgCisgICAgMywgMSwgMjI4LCAzOSwgMiwgMTY4LCA3LCA2LCAxLCAyMjgsIDM5LCAyLCAyNTEsIDkyLCA3LCAzLCAxLCAyMjgsIDM5LCAyLCAKKyAgICAyNTEsIDkyLCA3LCA2LCAxLCAyMjgsIDM5LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgMjI4LCAzOSwgMiwgMjUxLCAxMzAsIDcsIAorICAgIDYsIDEsIDIyNiwgMjM1LCAyLCAxNjgsIDcsIDMsIDEsIDIyNiwgMjM1LCAyLCAxNjgsIDcsIDYsIDEsIDIyNiwgMjM1LCAyLCAKKyAgICAyNTAsIDIxNiwgNywgMywgMSwgMjI2LCAyMzUsIDIsIDI1MCwgMjE2LCA3LCA2LCAxLCAyMjYsIDIzNSwgMiwgMjUxLCA5MiwgCisgICAgNywgMywgMSwgMjI2LCAyMzUsIDIsIDI1MSwgOTIsIDcsIDYsIDEsIDIyNiwgMjM1LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgCisgICAgMjI2LCAyMzUsIDIsIDI1MSwgMTMwLCA3LCA2LCAxLCAyMjIsIDIwMiwgMiwgMjUxLCA5MiwgNywgMywgMSwgMjIyLCAyMDIsIAorICAgIDIsIDI1MSwgOTIsIDcsIDYsIDEsIDIyMiwgMjAyLCAyLCAyNTEsIDEzMCwgNywgMywgMSwgMjIyLCAyMDIsIDIsIDI1MSwgCisgICAgMTMwLCA3LCA2LCAxLCAyMjIsIDIwMiwgMiwgOTIsIDcsIDMsIDEsIDIyMiwgMjAyLCAyLCA5MiwgNywgNiwgMSwgMTA1LCAyLCAKKyAgICAyMjEsIDE3OSwgNywgMywgMSwgMTA1LCAyLCAyMjEsIDE3OSwgNywgNiwgMSwgMTA1LCAyLCAyMzQsIDExNSwgNywgMywgMSwgCisgICAgMTA1LCAyLCAyMzQsIDExNSwgNywgNiwgMSwgMTA1LCAyLCAyNTIsIDgsIDcsIDMsIDEsIDEwNSwgMiwgMjUyLCA4LCA3LCA2LCAKKyAgICAxLCAxMDUsIDIsIDIyNywgOTQsIDUwLCA3LCAzLCAxLCAxMDUsIDIsIDIyNywgOTQsIDUwLCA3LCA2LCAxLCAxMDUsIDIsIAorICAgIDUxLCAxNjgsIDcsIDMsIDEsIDEwNSwgMiwgNTEsIDE2OCwgNywgNiwgMSwgMTA1LCAyLCAyMzAsIDE2MiwgNywgMywgMSwgCisgICAgMTA1LCAyLCAyMzAsIDE2MiwgNywgNiwgMSwgMjE5LCA0MSwgMiwgMjUwLCAyMTYsIDcsIDMsIDEsIDIxOSwgNDEsIDIsIAorICAgIDI1MCwgMjE2LCA3LCA2LCAxLCAyMTgsIDkxLCAyLCAyNTAsIDIxNiwgNywgMywgMSwgMjE4LCA5MSwgMiwgMjUwLCAyMTYsIAorICAgIDcsIDYsIDEsIDIxOCwgOTEsIDIsIDI0OSwgMTMsIDcsIDYsIDEsIDIxNywgMTU4LCAyLCAxNjgsIDcsIDMsIDEsIDIxNywgCisgICAgMTU4LCAyLCAxNjgsIDcsIDYsIDEsIDIxNywgMTU4LCAyLCA2MSwgNTAsIDcsIDMsIDEsIDIxNywgMTU4LCAyLCA2MSwgNTAsIAorICAgIDcsIDYsIDEsIDIxNywgMTU4LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgMjE3LCAxNTgsIDIsIDI1MSwgMTMwLCA3LCAzLCAxLCAKKyAgICAxNzEsIDE5OCwgNywgMywgMSwgNDksIDIsIDkyLCA3LCA2LCAxLCA0OSwgMiwgOTYsIDcsIDYsIDEsIDQ5LCAyLCAyMjEsIAorICAgIDExNywgNywgMywgMSwgNDksIDIsIDIyMSwgMTE3LCA3LCA2LCAxLCAxNDUsIDE4MiwgNywgMywgMSwgMTQ1LCAxODIsIDcsIAorICAgIDYsIDEsIDIzMCwgMTE5LCA3NCwgNywgNiwgMSwgMjUxLCAyMDMsIDIsIDk2LCA3LCAzLCAxLCAyNTEsIDIwMywgMiwgOTYsIAorICAgIDcsIDYsIDEsIDI1NCwgMjEyLCAyNTAsIDQ2LCA3LCA2LCAxLCAyNTAsIDQ3LCAyLCA5NiwgNywgNiwgMSwgMjUwLCA0NywgMiwgCisgICAgMjIxLCAxMTcsIDcsIDMsIDEsIDI1MCwgNDcsIDIsIDIyMSwgMTE3LCA3LCAzLCAxLCAyMTUsIDI0OSwgNjIsIDcsIDYsIDEsIAorICAgIDIxMCwgNzMsIDcsIDYsIDEsIDIyNiwgMTA0LCA3LCA2LCAxLCAyMzAsIDExOSwgNzMsIDcsIDYsIDEsIDI0NiwgNzUsIDIsIAorICAgIDk2LCA3LCAzLCAxLCAyNDYsIDc1LCAyLCA5NiwgNywgNiwgMSwgMjQ1LCA2OCwgMiwgOTYsIDcsIDYsIDEsIDI0NCwgMjMxLCAKKyAgICA3LCAzLCAxLCAyNDIsIDE1NCwgNywgNiwgMSwgMjM3LCAxNjIsIDcsIDYsIDEsIDI0MiwgMTA3LCAyLCA5MiwgNywgNiwgMSwgCisgICAgMjM3LCAxOCwgMiwgOTYsIDcsIDMsIDEsIDIzNywgMTgsIDIsIDk2LCA3LCAzLCAxLCAyMzUsIDIwMiwgMiwgMTM1LCA3LCAzLCAKKyAgICAxLCAyMzUsIDE1OCwgMiwgOTIsIDcsIDYsIDEsIDIxNSwgMTg5LCA3LCA2LCAxLCAyMzMsIDM0LCAyLCA0MiwgOTYsIDcsIDMsIAorICAgIDEsIDIzMywgMzQsIDIsIDE3MSwgNDUsIDIzNSwgMTA2LCA3LCA2LCAxLCAxNDIsIDIsIDIzMywgMTkzLCAyMjEsIDE3OSwgNywgCisgICAgNiwgMSwgMTQyLCAyLCAyNDIsIDE4OSwgNywgMywgMSwgMTQyLCAyLCAyNDIsIDE4OSwgNywgNiwgMSwgMjMwLCAxNTgsIDcsIAorICAgIDMsIDEsIDIzMCwgMTU4LCA3LCA2LCAxLCAyMzAsIDYwLCAyLCA5NiwgNywgMywgMSwgMjMwLCA2MCwgMiwgOTYsIDcsIDEsIAorICAgIDIxNywgMjAyLCA3LCA2LCAxLCAxNDUsIDEwMywgNywgMywgMSwgMTQ1LCAxMDMsIDcsIDYsIDEsIDI0NiwgMTMzLCA3LCAxLCAKKyAgICAyMTAsIDI0NiwgMTM0LCAyMzQsIDI0NywgNywgMywgMSwgMjIyLCAyMDIsIDIsIDIzMCwgMjksIDk2LCA3LCA2LCAxLCAyMjIsIAorICAgIDIwMiwgMiwgOTYsIDcsIDMsIDEsIDIyMiwgMjAyLCAyLCA5NiwgNywgNiwgMSwgMjIyLCAyMDIsIDIsIDIyNywgMTY0LCA5NiwgCisgICAgNywgNiwgMSwgMTA1LCAyLCAyNDIsIDE4OSwgNywgMywgMSwgMTA1LCAyLCAyNDIsIDE4OSwgNywgNiwgMSwgMjIwLCA1NywgCisgICAgNywgNiwgMSwgMjIwLCAxMSwgMiwgOTYsIDcsIDYsIDEsIDIxOCwgOTEsIDIsIDk2LCA3LCAzLCAxLCAyMTgsIDkxLCAyLCAKKyAgICA5NiwgNywgNiwgMSwgMjE3LCAxNTgsIDIsIDkyLCA3LCAzLCAxLCAyMTcsIDE1OCwgMiwgOTIsIDcsIDYsIDEsIDI0NiwgNzYsIAorICAgIDcsIDYsIDEsIDI0NiwgNzcsIDIyNywgMTU5LCA3LCAzLCAxLCAyNDYsIDc3LCAyMjcsIDE1OSwgNywgMywgMSwgMjQ2LCA3NywgCisgICAgMiwgMjIyLCAxMzUsIDcsIDEsIDEyNCwgMiwgOTIsIDcsIDYsIDEsIDE0NSwgMTc0LCA3LCAzLCAxLCAxNDUsIDE3NCwgNywgCisgICAgMSwgMjM3LCAxNzAsIDI0NCwgNzMsIDIyMywgMTM3LCAyLCA5MiwgNywgMSwgMjE4LCAxNTQsIDcsIDEsIDI0OSwgNTUsIAorICAgIDI1MCwgMjA0LCA3LCAxLCAyMzUsIDEzOSwgMjUwLCAyMDQsIDcsIDEsIDI1NCwgMTQxLCAyNTAsIDIwNCwgNywgMSwgMjI3LCAKKyAgICAxNjQsIDI1MCwgMjA0LCA3LCA2LCAxLCAyNDcsIDc2LCAyLCAyNTEsIDEzMCwgNywgNiwgMSwgMjUwLCA0NywgMiwgMywgMSwgCisgICAgMjE3LCAxNTgsIDIsIDI1MSwgMTMwLCA3LCAzLCAxLCAyNDcsIDc2LCAyLCAyNTEsIDEzMCwgNywgNiwgMSwgMjM1LCAyMSwgCisgICAgNywgNiwgMSwgMjM1LCAyMDIsIDIsIDMsIDEsIDIzNywgMTI2LCA3LCAzLCAxLCAyMzUsIDIxLCA3LCA2LCAxLCAyMzIsIDE5LCAKKyAgICA3LCA2LCAxLCAyMzMsIDM0LCAyLCAzLCAxLCAyMzcsIDEyNiwgNywgMywgMSwgMjMyLCAxOSwgNywgNiwgMSwgMTEyLCAyLCAKKyAgICAyNTEsIDEzMCwgNywgMywgMSwgMTEyLCAyLCAyNTEsIDEzMCwgNywgNiwgMSwgMjQyLCAxMDcsIDIsIDI1MSwgMTMwLCA3LCAKKyAgICAzLCAxLCAyNDIsIDEwNywgMiwgMjUxLCAxMzAsIDcsIDYsIDEsIDE0MiwgMiwgMjUxLCAxMzAsIDcsIDMsIDEsIDE0MiwgMiwgCisgICAgMjUxLCAxMzAsIDcsIDYsIDEsIDEwNSwgMiwgMjUxLCAxMzAsIDcsIDMsIDEsIDEwNSwgMiwgMjUxLCAxMzAsIDcsIDYsIDEsIAorICAgIDEwNSwgMiwgMjQ5LCAxNCwgMjUsIDIzNCwgMTE1LCA3LCAzLCAxLCAxMDUsIDIsIDI0OSwgMTQsIDI1LCAyMzQsIDExNSwgNywgCisgICAgNiwgMSwgMTA1LCAyLCAyNDksIDE0LCAyNSwgMTY4LCA3LCAzLCAxLCAxMDUsIDIsIDI0OSwgMTQsIDI1LCAxNjgsIDcsIDYsIAorICAgIDEsIDEwNSwgMiwgMjQ5LCAxNCwgMjUsIDI1MSwgMTMwLCA3LCAzLCAxLCAxMDUsIDIsIDI0OSwgMTQsIDI1LCAyNTEsIDEzMCwgCisgICAgNywgNiwgMSwgMTA1LCAyLCAyNDksIDE0LCAyNSwgMjQ0LCAzNiwgNywgMywgMSwgMTA1LCAyLCAyNDksIDE0LCAyNSwgMjQ0LCAKKyAgICAzNiwgNywgMywgMSwgMjE1LCA3MywgNywgNiwgMSwgMTEyLCAyLCAyNDksIDE0LCAyNSwgMjM0LCAxMTUsIDcsIDMsIDEsIAorICAgIDExMiwgMiwgMjQ5LCAxNCwgMjUsIDIzNCwgMTE1LCA3LCA2LCAxLCAxMTIsIDIsIDYxLCA3MSwgMjUsIDIzNCwgMTE1LCA3LCAKKyAgICAzLCAxLCAxMTIsIDIsIDYxLCA3MSwgMjUsIDIzNCwgMTE1LCA3LCA2LCAxLCAyNTQsIDIzNSwgMiwgMjM0LCAxMTUsIDcsIDMsIAorICAgIDEsIDI1NCwgMjM1LCAyLCAyMzQsIDExNSwgNywgNiwgMSwgMjQ1LCA2OCwgMiwgOTIsIDcsIDMsIDEsIDI0NSwgNjgsIDIsIAorICAgIDkyLCA3LCA2LCAxLCAyNDUsIDY4LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgMjQ1LCA2OCwgMiwgMjUxLCAxMzAsIDcsIDYsIAorICAgIDEsIDIzNywgMTgsIDIsIDI1MSwgMTMwLCA3LCAzLCAxLCAyMzcsIDE4LCAyLCAyNTEsIDEzMCwgNywgNiwgMSwgMTQyLCAyLCAKKyAgICAyMzAsIDE2MiwgNywgMywgMSwgMTQyLCAyLCAyMzAsIDE2MiwgNywgNiwgMSwgMTQyLCAyLCAyMzAsIDE2MywgMjUsIDIzNCwgCisgICAgMTE1LCA3LCAzLCAxLCAxNDIsIDIsIDIzMCwgMTYzLCAyNSwgMjM0LCAxMTUsIDcsIDYsIDEsIDI0NiwgNzcsIDIsIDI1MSwgCisgICAgMTMwLCA3LCAzLCAxLCAyNDYsIDc3LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgMjM3LCAxMjcsIDIsIDI1MSwgMTMwLCA3LCA2LCAKKyAgICAxLCAyNDcsIDc1LCA3LCA2LCAxLCAyNTAsIDQ3LCAyLCAzLCAxLCAyMTcsIDE1NywgNywgMywgMSwgMjQ3LCA3NSwgNywgNiwgCisgICAgMSwgMjQ1LCA2OCwgMiwgMTY4LCA3LCAzLCAxLCAyNDUsIDY4LCAyLCAxNjgsIDcsIDYsIDEsIDI0MiwgMTUyLCA3LCA2LCAxLCAKKyAgICAyMTgsIDE1NCwgNywgNiwgMSwgMjMzLCAzNCwgMiwgMjQ0LCAzNiwgNywgMywgMSwgMjMzLCAzNCwgMiwgMjQ0LCAzNiwgNywgCisgICAgNiwgMSwgMTEyLCAyLCAyMjcsIDk0LCA3MSwgMjUsIDE2OCwgNywgMywgMSwgMTEyLCAyLCAyMjcsIDk0LCA3MSwgMjUsIAorICAgIDE2OCwgNywgNiwgMSwgMjU0LCAyMzUsIDIsIDE2OCwgNywgMywgMSwgMjU0LCAyMzUsIDIsIDE2OCwgNywgNiwgMSwgMTQyLCAKKyAgICAyLCAyMTQsIDI1LCAxNjgsIDcsIDMsIDEsIDE0MiwgMiwgMjE0LCAyNSwgMTY4LCA3LCA2LCAxLCAxMTIsIDIsIDUxLCAyNDQsIAorICAgIDM2LCA3LCAzLCAxLCAxMTIsIDIsIDUxLCAyNDQsIDM2LCA3LCA2LCAxLCAxMTIsIDIsIDIzNywgMTcwLCAyNTIsIDgsIDcsIAorICAgIDMsIDEsIDExMiwgMiwgMjM3LCAxNzAsIDI1MiwgOCwgNywgNiwgMSwgMTc4LCAyLCA1MSwgMjQ0LCAzNiwgNywgMywgMSwgCisgICAgMTc4LCAyLCA1MSwgMjQ0LCAzNiwgNywgNiwgMSwgMTc4LCAyLCAyMzcsIDE3MCwgMjUyLCA4LCA3LCAzLCAxLCAxNzgsIDIsIAorICAgIDIzNywgMTcwLCAyNTIsIDgsIDcsIDYsIDEsIDI0MiwgMTA3LCAyLCA1MSwgMjQ0LCAzNiwgNywgMywgMSwgMjQyLCAxMDcsIAorICAgIDIsIDUxLCAyNDQsIDM2LCA3LCA2LCAxLCAyNDIsIDEwNywgMiwgMjM3LCAxNzAsIDI1MiwgOCwgNywgMywgMSwgMjQyLCAKKyAgICAxMDcsIDIsIDIzNywgMTcwLCAyNTIsIDgsIDcsIDYsIDEsIDE0MiwgMiwgNTEsIDI0NCwgMzYsIDcsIDMsIDEsIDE0MiwgMiwgCisgICAgNTEsIDI0NCwgMzYsIDcsIDYsIDEsIDE0MiwgMiwgMjM3LCAxNzAsIDI1MiwgOCwgNywgMywgMSwgMTQyLCAyLCAyMzcsIAorICAgIDE3MCwgMjUyLCA4LCA3LCA2LCAxLCAyMjgsIDM5LCAyLCA1MSwgMjQ0LCAzNiwgNywgMywgMSwgMjI4LCAzOSwgMiwgNTEsIAorICAgIDI0NCwgMzYsIDcsIDYsIDEsIDIyOCwgMzksIDIsIDIzNywgMTcwLCAyNTIsIDgsIDcsIDMsIDEsIDIyOCwgMzksIDIsIDIzNywgCisgICAgMTcwLCAyNTIsIDgsIDcsIDYsIDEsIDEwNSwgMiwgNTEsIDI0NCwgMzYsIDcsIDMsIDEsIDEwNSwgMiwgNTEsIDI0NCwgMzYsIAorICAgIDcsIDYsIDEsIDEwNSwgMiwgMjM3LCAxNzAsIDI1MiwgOCwgNywgMywgMSwgMTA1LCAyLCAyMzcsIDE3MCwgMjUyLCA4LCA3LCAKKyAgICA2LCAxLCAyMjYsIDIzNSwgMiwgMjUwLCAxNjksIDU2LCA3LCAzLCAxLCAyMjYsIDIzNSwgMiwgMjUwLCAxNjksIDU2LCA3LCAKKyAgICA2LCAxLCAyMjIsIDIwMiwgMiwgMjUwLCAxNjksIDU2LCA3LCAzLCAxLCAyMjIsIDIwMiwgMiwgMjUwLCAxNjksIDU2LCA3LCAKKyAgICA2LCAxLCAyMTcsIDIxOCwgNywgMywgMSwgMjE3LCAyMTgsIDcsIDYsIDEsIDI0MywgMjI2LCAyLCAyNTEsIDEzMCwgNywgMywgCisgICAgMSwgMjQzLCAyMjYsIDIsIDI1MSwgMTMwLCA3LCA2LCAxLCAyMzMsIDM0LCAyLCAxNzEsIDQ1LCAyMzUsIDEwNiwgNywgMywgCisgICAgMSwgMjUwLCA0NywgMiwgMjUwLCA4MCwgNywgNiwgMSwgMjMwLCA4NiwgNywgMywgMSwgMjMwLCA4NiwgNywgNiwgMSwgMjE3LCAKKyAgICAxNTgsIDIsIDk2LCA3LCAzLCAxLCAyMTcsIDE1OCwgMiwgOTYsIDcsIDYsIDEsIDExMiwgMiwgNjEsIDUwLCA3LCAzLCAxLCAKKyAgICAxMTIsIDIsIDYxLCA1MCwgNywgNiwgMSwgMTc4LCAyLCAyNTEsIDkyLCA3LCAzLCAxLCAxNzgsIDIsIDI1MSwgOTIsIDcsIDYsIAorICAgIDEsIDE0MiwgMiwgMjQ5LCAxNCwgMjUsIDIzNCwgMTE1LCA3LCAzLCAxLCAxNDIsIDIsIDI0OSwgMTQsIDI1LCAyMzQsIDExNSwgCisgICAgNywgNiwgMSwgMTQyLCAyLCAyMjEsIDE4MCwgMjUsIDIzNCwgMTE1LCA3LCAzLCAxLCAxNDIsIDIsIDIyMSwgMTgwLCAyNSwgCisgICAgMjM0LCAxMTUsIDcsIDYsIDEsIDE0MiwgMiwgNjEsIDUwLCA3LCAzLCAxLCAxNDIsIDIsIDYxLCA1MCwgNywgNiwgMSwgMTQyLCAKKyAgICAyLCA2MSwgNzEsIDI1LCAyMzQsIDExNSwgNywgMywgMSwgMTQyLCAyLCA2MSwgNzEsIDI1LCAyMzQsIDExNSwgNywgNiwgMSwgCisgICAgMjE4LCA5MSwgMiwgMjM0LCAxMTUsIDcsIDMsIDEsIDIxOCwgOTEsIDIsIDIzNCwgMTE1LCA3LCAzLCAxLCAyMzUsIDIwMiwgCisgICAgMiwgMjUwLCA4MCwgNywgMywgMSwgMjMzLCAzNCwgMiwgMjUwLCA4MCwgNywgMywgMSwgMjIyLCAyMDIsIDIsIDI1MCwgODAsIAorICAgIDcsIDMsIDEsIDI0OCwgMTQ0LCAyMzcsIDEyNiwgNywgMywgMSwgMjQ5LCAxMzUsIDI0OCwgMjMzLCA3LCAzLCAxLCAyMjgsIAorICAgIDk5LCAyNDgsIDIzMywgNywgNiwgMSwgMTEyLCAyLCA5MiwgNywgNiwgMSwgMjUxLCAyMDMsIDIsIDkyLCA3LCAzLCAxLCAKKyAgICAyNTEsIDIwMywgMiwgOTIsIDcsIDYsIDEsIDIzNSwgMjAyLCAyLCAxMzUsIDcsIDYsIDEsIDIyMiwgMjAyLCAyLCAyNDksIAorICAgIDExLCA5MiwgNywgMywgMSwgMjI2LCAyMzUsIDIsIDIyMywgMzMsIDIyMiwgMTM1LCA3LCAzLCAxLCAyMTcsIDE1OCwgMiwgCisgICAgMjIzLCAzMywgMjIyLCAxMzUsIDcsIDYsIDEsIDI0NCwgNzMsIDIyMywgMTM2LCA3LCAzLCAxLCAyNDQsIDczLCAyMjMsIAorICAgIDEzNiwgNywgNiwgMSwgNDksIDIsIDkyLCA3LCA2LCAxLCAxMDUsIDEzNSwgNywgNiwgMSwgMjE1LCAyMTYsIDIxNiwgNywgNiwgCisgICAgMSwgMTc4LCAyLCA5MiwgNywgMywgMSwgMTc4LCAyLCA5MiwgNywgNiwgMSwgMjM3LCAxMjcsIDIsIDkyLCA3LCAzLCAxLCAKKyAgICAyMzcsIDEyNywgMiwgOTIsIDcsIDYsIDEsIDMsIDIyOCwgMTY0LCAyLCAyNDIsIDI0NywgMjIyLCAxMzUsIDcsIDMsIDEsIAorICAgIDIyOCwgMTY0LCAyLCAyNDIsIDI0NywgMjIyLCAxMzUsIDcsIDYsIDEsIDIyOCwgMzksIDIsIDkyLCA3LCAzLCAxLCAyMjgsIAorICAgIDM5LCAyLCA5MiwgNywgNiwgMSwgMjE4LCA5MSwgMiwgOTIsIDcsIDMsIDEsIDIxOCwgOTEsIDIsIDkyLCA3LCAzLCAxLCAKKyAgICAyMTUsIDYwLCA3LCAzLCAxLCAyNTQsIDE0NiwgNywgMywgMSwgMjE1LCAyNTQsIDE0NiwgNywgMywgMSwgNDksIDIsIDk2LCAKKyAgICA3LCAzLCAxLCAyMzAsIDExOSwgNzQsIDcsIDMsIDEsIDI1MSwgMjAzLCAyLCAyNTAsIDgwLCA3LCAzLCAxLCAyNTAsIDQ3LCAKKyAgICAyLCAyMjIsIDEzNSwgNywgMywgMSwgMjUwLCA0NywgMiwgOTYsIDcsIDMsIDEsIDIxMCwgNzMsIDcsIDMsIDEsIDIyNiwgCisgICAgMTA0LCA3LCAzLCAxLCAyMjYsIDEwNSwgMiwgOTYsIDcsIDMsIDEsIDIzMCwgMTE5LCA3MywgNywgMywgMSwgMjEwLCAyMzAsIAorICAgIDExOSwgNzMsIDcsIDMsIDEsIDIxMCwgMjMwLCAxMTksIDE3OCwgMiwgOTYsIDcsIDMsIDEsIDI1MCwgMTk3LCAyMTAsIDIzMCwgCisgICAgMTE5LCA3MywgNywgMywgMSwgMjQ4LCAxNDQsIDIzNywgMTI3LCAyLCA5MiwgNywgMywgMSwgMjQ1LCA2OCwgMiwgOTYsIDcsIAorICAgIDMsIDEsIDEwMiwgMjQ1LCA2NywgNywgMSwgMywgNiwgMjQ1LCA2NywgNywgMywgMSwgMjQ0LCAyMzEsIDcsIDMsIDEsIDIyNywgCisgICAgMjM3LCAyNDIsIDE4OSwgNywgMywgMSwgMjE1LCAyNDMsIDIyNSwgNywgMywgMSwgMjQzLCAyMjYsIDIsIDk2LCA3LCAzLCAxLCAKKyAgICAyNDMsIDEzNywgMiwgOTYsIDcsIDMsIDEsIDI0MiwgMTA3LCAyLCA5MiwgNywgMywgMSwgMjM3LCAxNjIsIDcsIDEsIDMsIDYsIAorICAgIDcyLCA3LCAzLCAxLCAyMzUsIDIwMiwgMiwgMjMzLCAxOTMsIDIyMSwgMTc5LCA3LCAzLCAxLCAyMzUsIDIwMiwgMiwgMjUyLCAKKyAgICAxMTYsIDcsIDMsIDEsIDIzNSwgMjAyLCAyLCAyMjcsIDE2NCwgOTYsIDcsIDMsIDEsIDIzNSwgODEsIDcsIDMsIDEsIDIxNSwgCisgICAgMTg5LCA3LCAzLCAxLCAyMTUsIDIzNCwgMTg3LCAyLCAxNzEsIDIzNSwgMTA2LCA3LCAzLCAxLCAyMzQsIDE4NywgMiwgOTYsIAorICAgIDcsIDMsIDEsIDIzMywgMzQsIDIsIDQyLCA5NiwgNywgMywgMSwgMjMzLCAzNCwgMiwgMjI3LCAxNjQsIDk2LCA3LCAxLCAzLCAKKyAgICA2LCAyMDcsIDcsIDMsIDEsIDI1MiwgMTk2LCA3NCwgNywgMSwgMywgNiwgMjMwLCAxNjcsIDcsIDMsIDEsIDI1MCwgMTk3LCAKKyAgICAyMzAsIDE0MywgNywgMywgMSwgMjI5LCAxMjksIDcsIDMsIDEsIDIxNSwgMTUyLCA3LCAzLCAxLCAyMTUsIDIyOCwgMzksIDIsIAorICAgIDE3MSwgMjM1LCAxMDYsIDcsIDMsIDEsIDIxNSwgMjI4LCAzOSwgMiwgOTYsIDcsIDMsIDEsIDIyOCwgMzksIDIsIDE3MSwgCisgICAgMjM1LCAxMDYsIDcsIDMsIDEsIDIyOCwgMzksIDIsIDIyMiwgMTM1LCA3LCAzLCAxLCAyMjgsIDM5LCAyLCAyNDUsIDE3MywgCisgICAgNywgMywgMSwgMjEwLCAyMjgsIDM5LCAyLCAyNDUsIDE3MywgNywgMSwgMywgNiwgMTUyLCA3LCAxLCAzLCA2LCAyMzcsIAorICAgIDE3MCwgMTUyLCA3LCAzLCAxLCAyMjYsIDIzNSwgMiwgOTYsIDcsIDMsIDEsIDI0NiwgMTMzLCA3LCAzLCAxLCAyNDgsIDE0NCwgCisgICAgMjM3LCAxMjcsIDIsIDIxNCwgMjUsIDk2LCA3LCAzLCAxLCAyMjMsIDIyNCwgMjEwLCAyNDYsIDEzMywgNywgMywgMSwgMjQ2LCAKKyAgICAxMzQsIDIsIDI1MCwgODAsIDcsIDMsIDEsIDIxNSwgMjIyLCAyMDEsIDcsIDMsIDEsIDIyMiwgMjAyLCAyLCAyMjcsIDE2NCwgCisgICAgOTYsIDcsIDMsIDEsIDEwNSwgMTM1LCA3LCAzLCAxLCAyMjAsIDU3LCA3LCAzLCAxLCAyMjAsIDExLCAyLCA5NiwgNywgMywgCisgICAgMSwgMjE1LCAyMTYsIDIxNiwgNywgMywgMSwgMjE1LCAyMTksIDQwLCA3LCAzLCAxLCAyMTUsIDIxOCwgOTAsIDcsIDEsIDMsIAorICAgIDYsIDIxOCwgOTAsIDcsIDMsIDEsIDIxNywgMTU4LCAyLCAyMjcsIDE2NCwgOTYsIDcsIDMsIDEsIDIxNywgMTU4LCAyLCAKKyAgICAyNTAsIDgwLCA3LCAzLCAxLCAyNDYsIDc2LCA3LCAzLCAxLCAyNDYsIDc3LCAyLCAyNTAsIDgwLCA3LCAxLCAyNDQsIDczLCAKKyAgICAyMjMsIDEzNiwgNywgMSwgMjI5LCAxMzMsIDIxOSwgNzAsIDI0NSwgMTAwLCA3LCAxLCAyMzcsIDE3MCwgMjQ0LCA3MywgCisgICAgMjIzLCAxMzYsIDcsIDEsIDIyMywgMTI0LCAyNTEsIDIwMiwgNywgMSwgMjUyLCA3NCwgMjUwLCAyMDQsIDcsIDEsIDMsIDYsIAorICAgIDI1MywgMjA0LCA3LCAzLCAxLCAyNTAsIDE5NywgMjMwLCAxMTksIDczLCA3LCAxLCAzLCA2LCAyNDUsIDY4LCAyLCA5NiwgNywgCisgICAgMSwgMywgNiwgMjQzLCAyMjUsIDcsIDMsIDEsIDIzNywgMTI3LCAyLCAyNTAsIDk3LCA3LCAzLCAxLCAyMTUsIDIzNywgMTcsIAorICAgIDcsIDEsIDMsIDYsIDE1MywgNywgMywgMSwgMjI4LCAxNjQsIDIsIDk2LCA3LCAxLCAyNDQsIDczLCAyMjMsIDEzNywgMiwgCisgICAgOTIsIDcsIDEsIDIxMCwgMjQ0LCA3MywgMjIzLCAxMzcsIDIsIDkyLCA3LCAzLCAxLCAyNDcsIDc2LCAyNDgsIDIzMywgNywgCisgICAgMywgMSwgMjQ5LCAzNywgMjQ4LCAyMzMsIDcsIDMsIDEsIDI0NywgNzYsIDI0OCwgMjM0LCAyLCAyNTAsIDgwLCA3LCAzLCAxLCAKKyAgICAyMjEsIDU3LCAyNDgsIDIzMywgNywgMywgMSwgMjIyLCA1NSwgMjQ4LCAyMzMsIDcsIDMsIDEsIDIyMiwgOTQsIDI0OCwgCisgICAgMjM0LCAyLCAyNTAsIDgwLCA3LCAzLCAxLCAyNDUsIDIxMywgMjQ4LCAyMzMsIDcsIDMsIDEsIDIzNCwgMjMzLCAyNDgsIAorICAgIDIzMywgNywgMywgMSwgMjM0LCAxODgsIDI0OCwgMjMzLCA3LCAxLCAyNTIsIDc0LCAyMjksIDE2OCwgNywgMSwgMjUyLCA4MSwgCisgICAgMjI5LCAxNjgsIDcsIDMsIDEsIDIxNSwgMjQzLCAyMjYsIDIsIDI0NSwgMTczLCA3LCAzLCAxLCAyMTUsIDI0MywgMjI2LCAyLCAKKyAgICAyNDUsIDE3NCwgMjUsIDIyMiwgMTM1LCA1OCwgMSwgMywgMjQzLCAyMjUsIDU4LCAxLCAzLCAyNDMsIDIyNiwgMiwgOTYsIAorICAgIDU4LCAxLCAzLCAyMzcsIDEyNiwgNTgsIDEsIDMsIDE1MiwgNTgsIDEsIDMsIDIxNSwgMTUyLCA1OCwgMSwgMywgMjE1LCAKKyAgICAyMjgsIDM5LCAyLCA5NiwgNTgsIDEsIDMsIDYsIDIzNywgMTcwLCAxNTIsIDU4LCAxLCAzLCAyMTksIDQwLCA1OCwgMSwgMywgCisgICAgMjE4LCA5MCwgNTgsIDEsIDIyOCwgMjM1LCA1OCwgMSwgNTEsIDIyOCwgMjM1LCA1OCwgMSwgMjE1LCAyNTAsIDE2OCwgNTgsIAorICAgIDEsIDI1NCwgNzksIDU4LCAxLCAyMTAsIDI1MCwgMTY4LCA1OCwgMSwgNDUsIDE0NCwgMjI3LCA5MywgNTgsIDEsIDQyLCAKKyAgICAxNDQsIDIyNywgOTMsIDU4LCAxLCAyNDQsIDczLCAyMjMsIDEzNiwgNTgsIDEsIDIxMCwgMjQ0LCA3MywgMjIzLCAxMzYsIAorICAgIDU4LCAxLCA0MiwgMjU0LCAyMCwgNTgsIDEsIDQ1LCAyNTQsIDIwLCA1OCwgMSwgMTA4LCAyNTQsIDIwLCA1OCwgMSwgMTEzLCAKKyAgICAyNTQsIDIwLCA1OCwgMSwgMjUwLCAyMTcsIDI1NSwgMCwgMjUxLCAxMzAsIDU4LCAxLCA2OSwgMjM1LCA0MywgNTgsIDEsIAorICAgIDIzNCwgMTE1LCA1OCwgMSwgMjU0LCAyNDgsIDI1NSwgMCwgNTgsIDEsIDI0NCwgMzcsIDI1NSwgMCwgNTgsIDEsIDEwOSwgCisgICAgNjksIDIzNSwgNDMsIDU4LCAxLCAxMDksIDIzNCwgMTE1LCA1OCwgMSwgMTA5LCAyNDQsIDM3LCAyNTUsIDAsIDU4LCAxLCAKKyAgICAxMDksIDI1NCwgMjQ4LCAyNTUsIDAsIDU4LCAxLCAyMjEsIDg3LCAyNTAsIDE3NSwgNTgsIDEsIDE0NCwgMjIxLCA4NywgCisgICAgMjUwLCAxNzUsIDU4LCAxLCAyNTEsIDgzLCA0NSwgMTQ0LCAyMjcsIDkzLCA1OCwgMSwgMjUxLCA4MywgNDIsIDE0NCwgMjI3LCAKKyAgICA5MywgNTgsIDEsIDEwOCwgMjIyLCAxNDMsIDU4LCAxLCAxMTMsIDIyMiwgMTQzLCA1OCwgMSwgODgsIDU1LCA1OCwgMSwgCisgICAgMjMzLCAxNTUsIDU1LCAyNTIsIDgsIDYxLCA1MCwgMjI3LCA5NCwgNTAsIDIzMCwgMTYyLCAzLCAyMjEsIDE3OSwgNTEsIAorICAgIDI1NCwgMjQ4LCAyNTUsIDAsIDU4LCAxLCAyMjcsIDE0OCwgOTYsIDU4LCAxLCAyNTAsIDEwMSwgMjU1LCAwLCA1OCwgMSwgMywgCisgICAgMjQ0LCAyMzEsIDU4LCAxLCAzLCAxNTMsIDU4LCAxLCAzLCAxOTgsIDU4LCAxLCAzLCAyMTgsIDE1MSwgNTgsIDEsIDMsIAorICAgIDIxMCwgMjQ0LCA3MywgMjIzLCAxMzYsIDU4LCAxLCAyNDYsIDg1LCAxNDUsIDEzNSwgNTgsIDEsIDExNiwgMTQ1LCAxMzUsIAorICAgIDU4LCAxLCAyMzMsIDE5NCwgMTQ1LCAxMzUsIDU4LCAxLCAxMDksIDE0NSwgMTM1LCA1OCwgMSwgMjQ2LCA4NCwgMTQ1LCAKKyAgICAxMzUsIDU4LCAxLCAyMTcsIDI0MSwgMjQ5LCA1MiwgMTQ1LCA3OCwgNTgsIDEsIDIxOCwgNDYsIDI0OSwgNTIsIDE0NSwgNzgsIAorICAgIDU4LCAxLCAyMTksIDY4LCA1OCwgMSwgMjIwLCA4NCwgNTgsIDEsIDUxLCAyNTQsIDc5LCA1OCwgMSwgMTA5LCAxMTMsIDI1NCwgCisgICAgMjAsIDU4LCAxLCAxMDksIDEwOCwgMjU0LCAyMCwgNTgsIDEsIDEwOSwgNDIsIDI1NCwgMjAsIDU4LCAxLCAxMDksIDQ1LCAKKyAgICAyNTQsIDIwLCA1OCwgMSwgMTA5LCAyMjcsIDkzLCA1OCwgMSwgMjMzLCAxOTMsIDI0NCwgMzcsIDI1NSwgMCwgNTgsIDEsIAorICAgIDIzMywgMTkzLCA1MSwgMjQ0LCAzNywgMjU1LCAwLCA1OCwgMSwgMjMzLCAxOTMsIDUxLCAyNTQsIDI0OCwgMjU1LCAwLCA1OCwgCisgICAgMSwgMTA5LCAyMjEsIDE3OSwgNTgsIDEsIDIyNywgMjQxLCAyNTAsIDE3NSwgNTgsIDEsIDI1MiwgMTMxLCAxMTYsIDIyMSwgCisgICAgMTMyLCA1OCwgMSwgMjQ2LCAxOTAsIDExNiwgMjIxLCAxMzIsIDU4LCAxLCAyNTIsIDEzMSwgMTA5LCAyMjEsIDEzMiwgNTgsIAorICAgIDEsIDI0NiwgMTkwLCAxMDksIDIyMSwgMTMyLCA1OCwgMSwgMjI0LCAyMzcsIDU4LCAxLCAyMzAsIDExOSwgMjI0LCAyMzcsIAorICAgIDU4LCAxLCAxMDksIDQyLCA2NSwgMzYsIDI0NCwgMzcsIDI1NSwgMCwgMzYsIDI1NCwgMjQ4LCAyNTUsIDAsIDM2LCAyNTAsIAorICAgIDIxNywgMjU1LCAwLCAzNiwgMjIxLCAxNzksIDM2LCAyMzQsIDExNSwgMzYsIDIzMCwgNzMsIDM2LCAyNTIsIDgsIDM2LCA2MSwgCisgICAgNTAsIDM2LCAyNDksIDEzLCAzNiwgMjQyLCAyNDcsIDUwLCAzNiwgMjI3LCA5NCwgNTAsIDM2LCA1MSwgMjU0LCAyNDgsIAorICAgIDI1NSwgMCwgMzYsIDI1MSwgMTMwLCAzNiwgNjksIDIzNSwgNDQsIDUwLCAzNiwgNTEsIDY5LCAyMzUsIDQ0LCA1MCwgMzYsIAorICAgIDUxLCAyNDQsIDM3LCAyNTUsIDAsIDM2LCAyNTEsIDE0NiwgMzYsIDIzNywgMTcwLCAyNTIsIDgsIDM2LCAyMTUsIDI1MCwgCisgICAgMTY5LCA1MCwgMzYsIDI1MCwgMTY5LCA1MCwgMzYsIDIxMCwgMjUwLCAxNjksIDUwLCAzNiwgMjUwLCAxNjksIDcxLCAyMjcsIAorICAgIDEwOSwgMzYsIDI0NCwgMzcsIDI1NSwgMSwgNTYsIDM2LCAyNTQsIDI0OCwgMjU1LCAxLCA1NiwgMzYsIDQyLCAyMjIsIDE0NCwgCisgICAgNTYsIDM2LCA0NSwgMjIyLCAxNDQsIDU2LCAzNiwgNDIsIDI1NCwgMTIwLCA1MCwgMzYsIDI0MiwgMTg5LCAzNiwgNDIsIAorICAgIDE0NCwgMjI3LCA5NCwgNTYsIDM2LCAxMDgsIDIyMiwgMTQ0LCA1NiwgMzYsIDExMywgMjIyLCAxNDQsIDU2LCAzNiwgODgsIAorICAgIDUsIDU2LCAzNiwgMjMzLCAxNTUsIDUsIDU2LCAzNiwgMjMwLCAyNywgMjQyLCAyNDcsIDU2LCAzNiwgMjI3LCAxNjQsIDI0MiwgCisgICAgMjQ3LCA1NiwgMzYsIDYxLCA1NiwgMzYsIDI0OSwgMTQsIDU2LCAzNiwgMjI3LCA5NCwgNTYsIDM2LCAyNTAsIDE2OSwgNTYsIAorICAgIDM2LCAyNTEsIDkyLCAzNiwgMjMwLCAxNjIsIDM2LCA2OSwgMjM1LCA0NCwgNTYsIDM2LCAyNTIsIDQsIDU2LCAzNiwgMjM3LCAKKyAgICAxNzAsIDUxLCAyNTQsIDUwLCA1NiwgMzYsIDI1MSwgMTMxLCA1NiwgMzYsIDI1MCwgMjE3LCAyNTUsIDEsIDU2LCAzNiwgCisgICAgMjUyLCA5LCA1NiwgMzYsIDIzNywgMTcwLCAyNTIsIDksIDU2LCAzNiwgMjIxLCAxODAsIDU2LCAzNiwgMjM0LCAxMTYsIDU2LCAKKyAgICAzNiwgMTA5LCAyMzUsIDQzLCAzNiwgNTEsIDEwOSwgMjM1LCA0MywgMzYsIDIyMSwgMTgwLCAyMzAsIDc0LCAzNiwgMjI0LCAKKyAgICAxOTIsIDIxNCwgMjMwLCA3NCwgMzYsIDE3MSwgMjE0LCAyMzAsIDc0LCAzNiwgMjI0LCAxOTIsIDIyNCwgMTgsIDIzMCwgNzQsIAorICAgIDM2LCAxNzEsIDIyNCwgMTgsIDIzMCwgNzQsIDM2LCA0NSwgMTQ0LCAyMjcsIDk0LCA1NiwgMzYsIDIzNywgMTcwLCAyNTIsIAorICAgIDQsIDU2LCAzNiwgNDAsIDU2LCAzNiwgMjI2LCA5MywgNTYsIDM2LCAyMTgsIDE1MiwgNTAsIDM2LCA2OSwgMjIxLCAxNzksIAorICAgIDM2LCA1MSwgMjMwLCA3MywgMzYsIDI0NCwgMzcsIDE0NSwgNzgsIDM2LCAyNTQsIDI0OCwgMTQ1LCA3OCwgMzYsIDIzLCAKKyAgICAyMjksIDE2MywgMzYsIDIzLCAyMzYsIDMzLCAzNiwgMjMsIDI0OSwgOCwgMjIxLCAxMjMsIDM2LCAyMywgMjE3LCAyMDcsIAorICAgIDM2LCAyNTIsIDQsIDUwLCAzNiwgMjQ2LCAxNTQsIDUsIDU2LCAzNiwgNTEsIDY5LCAyMzUsIDQ0LCA1NiwgMzYsIDQyLCAKKyAgICAyNTQsIDEyMCwgNTYsIDM2LCAyMTIsIDIyMSwgMTgwLCA1MCwgMzYsIDI0MiwgMjUxLCA1MCwgMzYsIDI1NCwgMTUxLCAxMTQsIAorICAgIDE5OSwgNTAsIDM2LCA0MiwgNDUsIDc2LCA1NiwgMzYsIDIyMCwgNTMsIDc2LCA1NiwgMzYsIDI0NCwgNDEsIDIzNywgNTQsIAorICAgIDM2LCA0NSwgMjU0LCAyMSwgNTAsIDM2LCA0MiwgMTQ0LCAyMjcsIDk0LCA1MCwgMzYsIDI0NSwgMjEwLCAzNiwgMjE4LCAKKyAgICAxNTIsIDU2LCAzNiwgNDIsIDI1NCwgMjEsIDU2LCAzNiwgNDUsIDI1NCwgMjEsIDU2LCAzNiwgNDUsIDI1NCwgMjEsIDI1LCAKKyAgICAxMDgsIDI1NCwgMjEsIDU2LCAzNiwgNDUsIDE0NCwgMjI3LCA5NCwgNTAsIDM2LCA2MSwgNzEsIDIyNywgMTA5LCAzNiwgCisgICAgMjUzLCAyNTIsIDU2LCAzNiwgNTEsIDIyNywgOTQsIDU2LCAzNiwgMjE3LCAzMywgNTAsIDM2LCA1MSwgMjUyLCA5LCA1NiwgCisgICAgMzYsIDUxLCAyNTIsIDgsIDM2LCA1MSwgMjM0LCAxMTUsIDM2LCA1MSwgMjM0LCAxMTYsIDU2LCAzNiwgNTEsIDIyMSwgMTc5LCAKKyAgICAzNiwgNTEsIDIzNywgMTcwLCAyNTIsIDgsIDM2LCA1MSwgOTAsIDc2LCA1NiwgMzYsIDcsIDMsIDEsIDYwLCAzNiwgNywgMywgCisgICAgMSwgNzMsIDM2LCA3LCAzLCAxLCA3MiwgMzYsIDcsIDMsIDEsIDc0LCAzNiwgNywgMywgMSwgNjgsIDM2LCA3LCAzLCAxLCAKKyAgICAyNTEsIDIwMiwgMzYsIDcsIDMsIDEsIDI1MCwgNDYsIDM2LCA3LCAzLCAxLCAyNDMsIDIyNSwgMzYsIDcsIDMsIDEsIDE4OSwgCisgICAgMzYsIDcsIDMsIDEsIDE1MiwgMzYsIDcsIDMsIDEsIDIyMiwgMjAxLCAzNiwgNywgMywgMSwgMjE2LCAyMTYsIDM2LCA3LCAzLCAKKyAgICAxLCAyMTgsIDE1MSwgMjMsIDYsIDEsIDI0MywgMTI3LCAyMywgMywgMSwgMjQzLCAxMjcsIDIzLCA2LCAxLCAyNTQsIDQ5LCAKKyAgICAyMjYsIDE0MiwgMjMsIDMsIDEsIDI1NCwgNDksIDIyNiwgMTQyLCAyMywgMjMxLCAxMDcsIDU1LCAyMywgMjM0LCAyMzcsIAorICAgIDIzMSwgMTA3LCA1NSwgMjMsIDYsIDEsIDIzMCwgMTUsIDI0OCwgMjQwLCAyMywgMywgMSwgMjMwLCAxNSwgMjQ4LCAyNDAsIAorICAgIDIzLCAyMTcsIDIwNywgMjMsIDMsIDIxMCwgMjM0LCAyMTgsIDIyNCwgMTI4LCAxMDAsIDIzLCAzLCAyNDcsIDE0MywgMjM0LCAKKyAgICAyMTgsIDIyNCwgMTI4LCAxMDAsIDIzLCAzLCAyMTAsIDI0NywgMTQzLCAyMzQsIDIxOCwgMjI0LCAxMjgsIDEwMCwgMjMsIAorICAgIDIyOCwgODIsIDc4LCAyMywgMjIxLCAxMjMsIDIzLCAyNDksIDgsIDIyMSwgMTIzLCAyMywgNiwgMSwgMjU0LCAxNDcsIDIsIAorICAgIDIyMSwgMTIzLCAyMywgMjU0LCAxMTAsIDIyMiwgNzMsIDIzLCA2LCAxLCAyNDYsIDE1NywgMiwgMjIxLCAxMjMsIDIzLCA2LCAKKyAgICAxLCAyNDYsIDEyMiwgMiwgMjIxLCAxMjMsIDIzLCA2LCAxLCAyMzcsIDE2MywgMiwgMjIxLCAxMjMsIDIzLCA2LCAxLCAyMzAsIAorICAgIDE0MiwgMiwgMjIxLCAxMjMsIDIzLCA2LCAxLCAyMjAsIDU4LCAyLCAyMjEsIDEyMywgMjMsIDYsIDEsIDIzMCwgMTQ0LCAyLCAKKyAgICAyMjEsIDEyMywgMjMsIDMsIDEsIDIzNywgMTYzLCAyLCAyNDksIDgsIDI1LCAyMjEsIDEyMywgMjMsIDYsIDEsIDI1NCwgCisgICAgMTQ2LCAyMywgNiwgMSwgMjUyLCAxMDIsIDIzLCA2LCAxLCAyNDQsIDIzMSwgMjMsIDYsIDEsIDI0OSwgNjIsIDIzLCA2LCAxLCAKKyAgICAyNDYsIDE1NiwgMjMsIDYsIDEsIDIxNywgODMsIDIzLCA2LCAxLCAyNDYsIDEyMSwgMjMsIDYsIDEsIDIyMiwgNiwgMjMsIDYsIAorICAgIDEsIDIzNywgMTYyLCAyMywgNiwgMSwgMjM2LCAyMjEsIDIzLCA2LCAxLCAyMzUsIDE1NiwgMjMsIDYsIDEsIDIzMywgOTksIAorICAgIDIzLCA2LCAxLCAyMzEsIDE0NCwgMjMsIDYsIDEsIDIxOCwgMTMwLCAyMywgNiwgMSwgMjMwLCAxNDEsIDIzLCA2LCAxLCAKKyAgICAyMjksIDEwOCwgMjMsIDYsIDEsIDIyNywgMTQ5LCAyMywgNiwgMSwgMjI0LCAxMjcsIDIzLCA2LCAxLCAyMjIsIDEwNSwgMjMsIAorICAgIDYsIDEsIDIyMCwgNTcsIDIzLCA2LCAxLCAyMjksIDEyOSwgMjMsIDYsIDEsIDI1MSwgMzEsIDIzLCA2LCAxLCAyMjgsIDIxMiwgCisgICAgMjMsIDYsIDEsIDIzMCwgMTQzLCAyMywgNiwgMSwgMjM3LCAxNjMsIDIsIDI0OSwgNywgMjMsIDYsIDEsIDIyMCwgNTgsIDIsIAorICAgIDI0OSwgNywgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAyMjEsIDEyMywgMjMsIDMsIDEsIDI0NiwgMTU3LCAyLCAyMjEsIDEyMywgCisgICAgMjMsIDMsIDEsIDI0NiwgMTIyLCAyLCAyMjEsIDEyMywgMjMsIDMsIDEsIDIzNywgMTYzLCAyLCAyMjEsIDEyMywgMjMsIDMsIAorICAgIDEsIDIyMCwgNTgsIDIsIDI0OSwgOCwgMjUsIDIyMSwgMTIzLCAyMywgMywgMSwgMjU0LCAxNDYsIDIzLCAzLCAxLCAyNTIsIAorICAgIDEwMiwgMjMsIDMsIDEsIDI0NCwgMjMxLCAyMywgMywgMSwgMjQ5LCA2MiwgMjMsIDMsIDEsIDI0NiwgMTU2LCAyMywgMywgMSwgCisgICAgMjE3LCA4MywgMjMsIDMsIDEsIDI0NiwgMTIxLCAyMywgMywgMSwgMjIyLCA2LCAyMywgMywgMSwgMjM3LCAxNjIsIDIzLCAzLCAKKyAgICAxLCAyMzYsIDIyMSwgMjMsIDMsIDEsIDIzNSwgMTU2LCAyMywgMywgMSwgMjMzLCA5OSwgMjMsIDMsIDEsIDIzMSwgMTQ0LCAKKyAgICAyMywgMywgMSwgMjE4LCAxMzAsIDIzLCAzLCAxLCAyMzAsIDE0MSwgMjMsIDMsIDEsIDIyOSwgMTA4LCAyMywgMywgMSwgCisgICAgMjI3LCAxNDksIDIzLCAzLCAxLCAzOSwgMjI0LCAxMjcsIDIzLCAzLCAxLCAyMjQsIDEyNywgMjMsIDMsIDEsIDIyMiwgMTA1LCAKKyAgICAyMywgMywgMSwgMjIwLCA1NywgMjMsIDMsIDEsIDIyOSwgMTI5LCAyMywgMywgMSwgMjUxLCAzMSwgMjMsIDMsIDEsIDIyOCwgCisgICAgMjEyLCAyMywgMywgMSwgMjMwLCAxNDMsIDIzLCAzLCAxLCAyMzcsIDE2MywgMiwgMjQ5LCA3LCAyMywgMywgMSwgMjIwLCAKKyAgICA1OCwgMiwgMjQ5LCA3LCAyMywgMywgMSwgMjMwLCAxNDIsIDIsIDIyMSwgMTIzLCAyMywgMywgMSwgMjIwLCA1OCwgMiwgCisgICAgMjIxLCAxMjMsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjIxLCAxMjMsIDIzLCA2LCAyMzYsIDI0NCwgMTAwLCAyMywgMjUyLCAKKyAgICAxMDMsIDEwMCwgMjMsIDIyMiwgNywgMTAwLCAyMywgMjIwLCA1OCwgMiwgMjQyLCAyNDcsIDEwMCwgMjMsIDIyMCwgNTgsIDIsIAorICAgIDI1NCwgMjQ4LCAyNSwgMjQyLCAyNDcsIDEwMCwgMjMsIDIyMCwgNTgsIDIsIDI0OSwgMTQsIDI1LCAyNDIsIDI0NywgMTAwLCAKKyAgICAyMywgMjI5LCAxMzAsIDEwMCwgMjMsIDIyOSwgMTA5LCAxMDAsIDIzLCAyMzYsIDI0NCwgMTAwLCAyMywgMSwgMjU0LCA0OSwgCisgICAgMjM2LCAzNywgMjMsIDMsIDEsIDI1NCwgNDksIDIzNiwgMzcsIDIzLCAxLCAyMjMsIDE0NCwgMjMsIDMsIDEsIDIyMywgMTQ0LCAKKyAgICAyMywgMSwgMjQ4LCAyNDAsIDIzLCAzLCAxLCAyNDgsIDI0MCwgMjMsIDEsIDIzNiwgMzcsIDIzLCAzLCAxLCAyMzYsIDM3LCAKKyAgICAyMywgMSwgMjI2LCAxNDIsIDIzLCAzLCAxLCAyMjYsIDE0MiwgNzUsIDYsIDEsIDIyNCwgMjM4LCA3NSwgMywgMSwgMjI0LCAKKyAgICAyMzgsIDc1LCA2LCAxLCAyNDUsIDIxOSwgNzUsIDMsIDEsIDI0NSwgMjE5LCA3NSwgNiwgMSwgMjM2LCAxMzUsIDc1LCAzLCAKKyAgICAxLCAyMzYsIDEzNSwgNzUsIDYsIDEsIDI0MiwgMjQyLCA3NSwgMywgMSwgMjQyLCAyNDIsIDc1LCA2LCAxLCAyNDQsIDIyNiwgCisgICAgNzUsIDMsIDEsIDI0NCwgMjI2LCA3NSwgNiwgMSwgMjI0LCAyMTEsIDc1LCAzLCAxLCAyMjQsIDIxMSwgNzUsIDYsIDEsIAorICAgIDI0OSwgNzUsIDc1LCAzLCAxLCAyNDksIDc1LCAyMywgMjM2LCAyMjIsIDEwMCwgMjMsIDIyNywgMTUwLCAxMDAsIDIzLCAKKyAgICAyMzQsIDIxOCwgMjI0LCAxMjgsIDEwMCwgMjMsIDEsIDIxNywgMjEyLCAyMywgNiwgMjIyLCA3LCAxMDAsIDIzLCAyMzQsIAorICAgIDIxOCwgMjQ2LCAxNTcsIDEwMCwgMjMsIDIxMCwgMjM0LCAyMTgsIDI0NiwgMTU3LCAxMDAsIDIzLCA2LCAxLCAyMjQsIDIwMCwgCisgICAgMjMsIDMsIDEsIDIyNCwgMjAwLCAyMywgNiwgMjM0LCAyMTgsIDIyNCwgMTI4LCAxMDAsIDIzLCA2LCAxLCAyMjYsIDE0MCwgCisgICAgMjMsIDMsIDEsIDIyNiwgMTQwLCAyMywgMjI3LCAxNTAsIDIsIDIxNCwgMTAwLCAyMywgNiwgMjEwLCAyMzQsIDIxOCwgMjI0LCAKKyAgICAxMjgsIDEwMCwgMjMsIDYsIDI0NywgMTQzLCAyMzQsIDIxOCwgMjI0LCAxMjgsIDEwMCwgMjMsIDYsIDIxMCwgMjQ3LCAxNDMsIAorICAgIDIzNCwgMjE4LCAyMjQsIDEyOCwgMTAwLCAzMSwgNiwgMSwgMjM4LCAyNywgMiwgMjQ0LCAzNiwgMzEsIDYsIDEsIDIzNywgCisgICAgMTY2LCAzMSwgNiwgMSwgMjQ4LCAxODIsIDMxLCA2LCAxLCAyNDQsIDc4LCAzMSwgNiwgMSwgMjIwLCA5OSwgMjM4LCAyNiwgCisgICAgMzEsIDYsIDEsIDI0NywgNzMsIDMxLCA2LCAxLCAyNTEsIDIxMSwgNzIsIDMxLCA2LCAxLCAyMTcsIDI1MCwgMzEsIDYsIDEsIAorICAgIDIzNywgMTE0LCAzMSwgNiwgMSwgMjM1LCAyMCwgMzEsIDYsIDEsIDIzMiwgMTUsIDMxLCA2LCAxLCAyMjEsIDQ2LCAzMSwgNiwgCisgICAgMSwgMjM2LCA3NiwgMzEsIDYsIDEsIDI0MiwgMTA3LCAyLCAyNDQsIDM2LCAzMSwgNiwgMSwgMjI0LCAxOTIsIDY4LCAzMSwgCisgICAgNiwgMSwgMjQ3LCA2OSwgMzEsIDYsIDEsIDYwLCAzMSwgNiwgMSwgMjUyLCAxNDQsIDMxLCA2LCAxLCAyMTksIDE2NSwgMzEsIAorICAgIDYsIDEsIDI0NCwgMTE2LCAzMSwgNiwgMSwgMjQ5LCA5MiwgMzEsIDYsIDEsIDIzOCwgMjYsIDMxLCA2LCAxLCAyMTcsIDcyLCAKKyAgICAzMSwgNiwgMSwgMjE3LCA5MiwgMzEsIDYsIDEsIDcyLCAzMSwgNiwgMSwgMjI0LCAxOTIsIDcyLCAzMSwgNiwgMSwgMTc1LCAKKyAgICAzMSwgNiwgMSwgMjQ2LCAyMTcsIDMxLCA2LCAxLCAyNDYsIDIwNSwgMzEsIDYsIDEsIDI0NiwgMTk3LCAzMSwgNiwgMSwgNzQsIAorICAgIDMxLCA2LCAxLCAyMjksIDE5OCwgMzEsIDYsIDEsIDI0NiwgMTQ4LCAzMSwgNiwgMSwgMjQ2LCAxMzgsIDMxLCA2LCAxLCAKKyAgICAyMjIsIDg3LCAzMSwgNiwgMSwgNjgsIDMxLCA2LCAxLCAyNDYsIDI0NCwgMzEsIDYsIDEsIDE1NSwgMzEsIDYsIDEsIDIyMSwgCisgICAgNTAsIDMxLCA2LCAxLCAyNTEsIDQ2LCAzMSwgNiwgMSwgMjI1LCAyNSwgMzEsIDYsIDEsIDIyNCwgMjQ4LCAzMSwgNiwgMSwgCisgICAgMjQzLCAxODEsIDU1LCAzMSwgNiwgMSwgMjE4LCA3LCAzMSwgNiwgMSwgMjI0LCAyMSwgNTUsIDMxLCA2LCAxLCA3MywgMzEsIAorICAgIDYsIDEsIDIxNywgMjAwLCAzMSwgNiwgMSwgMTg0LCAzMSwgMywgMSwgNjAsIDMxLCAzLCAxLCAyNTIsIDE0NCwgMzEsIDMsIAorICAgIDEsIDIxOSwgMTY1LCAzMSwgMywgMSwgMjQ0LCAxMTYsIDMxLCAzLCAxLCAyNDksIDkyLCAzMSwgMywgMSwgMjM4LCAyNiwgCisgICAgMzEsIDMsIDEsIDIxNywgNzIsIDMxLCAzLCAxLCAyMTcsIDkyLCAzMSwgMywgMSwgNzIsIDMxLCAzLCAxLCAyMjQsIDE5MiwgCisgICAgNzIsIDMxLCAzLCAxLCAxNzUsIDMxLCAzLCAxLCAyNDYsIDIxNywgMzEsIDMsIDEsIDI0NiwgMjA1LCAzMSwgMywgMSwgMjQ2LCAKKyAgICAxOTcsIDMxLCAzLCAxLCA3NCwgMzEsIDMsIDEsIDIyOSwgMTk4LCAzMSwgMywgMSwgMjQ2LCAxNDgsIDMxLCAzLCAxLCAyNDYsIAorICAgIDEzOCwgMzEsIDMsIDEsIDIyMiwgODcsIDMxLCAzLCAxLCA2OCwgMzEsIDMsIDEsIDI0NiwgMjQ0LCAzMSwgMywgMSwgMTU1LCAKKyAgICAzMSwgMywgMSwgMjIxLCA1MCwgMzEsIDMsIDEsIDI1MSwgNDYsIDMxLCAzLCAxLCAyMjUsIDI1LCAzMSwgMywgMSwgMjI0LCAKKyAgICAyNDgsIDMxLCAzLCAxLCAyNDMsIDE4MSwgNTUsIDMxLCAzLCAxLCAyMTgsIDcsIDMxLCAzLCAxLCAyMjQsIDIxLCA1NSwgMzEsIAorICAgIDMsIDEsIDczLCAzMSwgMywgMSwgMjE3LCAyMDAsIDMxLCAzLCAxLCAxODQsIDMxLCAzLCAxLCAyMzgsIDI3LCAyLCAyNDQsIAorICAgIDM2LCAzMSwgMywgMSwgMjM3LCAxNjYsIDMxLCAzLCAxLCAyNDgsIDE4MiwgMzEsIDMsIDEsIDI0NCwgNzgsIDMxLCAzLCAxLCAKKyAgICAyMjAsIDk5LCAyMzgsIDI2LCAzMSwgMywgMSwgMjQ3LCA3MywgMzEsIDMsIDEsIDI1MSwgMjExLCA3MiwgMzEsIDMsIDEsIAorICAgIDIxNywgMjUwLCAzMSwgMywgMSwgMjM3LCAxMTQsIDMxLCAzLCAxLCAyMzUsIDIwLCAzMSwgMywgMSwgMjMyLCAxNSwgMzEsIAorICAgIDMsIDEsIDIyMSwgNDYsIDMxLCAzLCAxLCAyMzYsIDc2LCAzMSwgMywgMSwgMjQyLCAxMDcsIDIsIDI0NCwgMzYsIDMxLCAzLCAKKyAgICAxLCAyMjQsIDE5MiwgNjgsIDMxLCAzLCAxLCAyNDcsIDY5LCAzMSwgNiwgMSwgMjMwLCAxNDMsIDMxLCAzLCAxLCAyMzAsIAorICAgIDE0MywgMzEsIDYsIDEsIDIxOCwgMzYsIDMxLCAzLCAxLCAyMTgsIDM2LCAzMSwgNiwgMSwgMjM3LCAxNjAsIDczLCAzMSwgMywgCisgICAgMSwgMjM3LCAxNjAsIDczLCAzMSwgNiwgMSwgMjM1LCAyNSwgMjE3LCAxNzgsIDMxLCAzLCAxLCAyMzUsIDI1LCAyMTcsIAorICAgIDE3OCwgMzEsIDYsIDEsIDIzNywgMTYwLCAyMzUsIDI1LCAyMTcsIDE3OCwgMzEsIDMsIDEsIDIzNywgMTYwLCAyMzUsIDI1LCAKKyAgICAyMTcsIDE3OCwgMzEsIDYsIDEsIDI1MiwgNzYsIDIxNywgMTc4LCAzMSwgMywgMSwgMjUyLCA3NiwgMjE3LCAxNzgsIDMxLCAKKyAgICA2LCAxLCAyMzcsIDE2MCwgMjUyLCA3NiwgMjE3LCAxNzgsIDMxLCAzLCAxLCAyMzcsIDE2MCwgMjUyLCA3NiwgMjE3LCAxNzgsIAorICAgIDMxLCA2LCAxLCAyMzYsIDExLCAzMSwgMywgMSwgMjM2LCAxMSwgMzEsIDYsIDEsIDIyOCwgMjEyLCAzMSwgMywgMSwgMjI4LCAKKyAgICAyMTIsIDMxLCA2LCAxLCAyNDUsIDE3MSwgMzEsIDMsIDEsIDI0NSwgMTcxLCAzMSwgNiwgMSwgMjM3LCAxMjgsIDMxLCAzLCAKKyAgICAxLCAyMzcsIDEyOCwgMzEsIDYsIDEsIDIzNywgMTI5LCAyLCA1MSwgMjQ0LCAzNywgMjU1LCAwLCAzMSwgMywgMSwgMjM3LCAKKyAgICAxMjksIDIsIDUxLCAyNDQsIDM3LCAyNTUsIDAsIDMxLCA2LCAxLCAyMjAsIDEwMiwgMzEsIDMsIDEsIDIyMCwgMTAyLCAzMSwgCisgICAgNiwgMSwgMjI3LCA1NywgMjMwLCAxNDMsIDMxLCAzLCAxLCAyMjcsIDU3LCAyMzAsIDE0MywgMzEsIDYsIDEsIDIzMCwgMTQ0LCAKKyAgICAyLCAyMjEsIDE2MCwgMzEsIDMsIDEsIDIzMCwgMTQ0LCAyLCAyMjEsIDE2MCwgMzEsIDYsIDEsIDIzMCwgOTIsIDMxLCAzLCAKKyAgICAxLCAyMzAsIDkyLCAzMSwgNiwgMSwgMjM2LCAzNywgMzEsIDMsIDEsIDIzNiwgMzcsIDMxLCAyMjEsIDIzMCwgNTUsIDM2LCAKKyAgICAzMSwgMjIxLCAxNjAsIDM2LCAzMSwgMjMwLCAyOCwgMzYsIDMxLCAxOTMsIDIyOSwgMzksIDM2LCAzMSwgMjA5LCAyMjksIAorICAgIDM5LCAzNiwgMzEsIDIyOSwgMjUsIDM2LCAzMSwgMjQyLCAxNjIsIDIyMSwgMjMwLCA1NSwgMzYsIDMxLCAyMzMsIDE2MiwgCisgICAgNTUsIDMxLCA2LCAxLCAyMjQsIDE5MiwgMjQyLCAxMDcsIDIsIDIyMiwgMTM1LCAzMSwgMywgMSwgMjI0LCAxOTIsIDI0MiwgCisgICAgMTA3LCAyLCAyMjIsIDEzNSwgMzEsIDYsIDEsIDIyNSwgNjMsIDU1LCAzMSwgMywgMSwgMjI1LCA2MywgNTUsIDMxLCA2LCAxLCAKKyAgICAyNDYsIDE0OSwgMiwgMjIxLCAyMDIsIDMxLCAzLCAxLCAyNDYsIDE0OSwgMiwgMjIxLCAyMDIsIDMxLCA2LCAxLCAyNDQsIAorICAgIDExNywgMiwgMjIwLCA1NiwgMzEsIDMsIDEsIDI0NCwgMTE3LCAyLCAyMjAsIDU2LCAzMSwgNiwgMSwgMjQ0LCAxMTcsIDIsIAorICAgIDkyLCAzMSwgMywgMSwgMjQ0LCAxMTcsIDIsIDkyLCAzMSwgNiwgMSwgMjQ0LCAxMTcsIDIsIDIzMywgMTkzLCA5NiwgMzEsIAorICAgIDMsIDEsIDI0NCwgMTE3LCAyLCAyMzMsIDE5MywgOTYsIDMxLCA2LCAxLCAyMTcsIDczLCAyLCAyNDksIDQ4LCAzMSwgMywgMSwgCisgICAgMjE3LCA3MywgMiwgMjQ5LCA0OCwgMzEsIDYsIDEsIDIxNywgOTMsIDIsIDI0OSwgNDgsIDMxLCAzLCAxLCAyMTcsIDkzLCAyLCAKKyAgICAyNDksIDQ4LCAzMSwgNiwgMSwgMjA2LCAyLCAyNDksIDQ4LCAzMSwgMywgMSwgMjA2LCAyLCAyNDksIDQ4LCAzMSwgNiwgMSwgCisgICAgMjA2LCAyLCA2OSwgOTIsIDMxLCAzLCAxLCAyMDYsIDIsIDY5LCA5MiwgMzEsIDYsIDEsIDIwNiwgMiwgOTIsIDMxLCAzLCAxLCAKKyAgICAyMDYsIDIsIDkyLCAzMSwgNiwgMSwgMjUyLCAxODYsIDE3NSwgMzEsIDMsIDEsIDI1MiwgMTg2LCAxNzUsIDMxLCA2LCAxLCAKKyAgICAyNDYsIDE5OCwgMiwgMjQ5LCA0OCwgMzEsIDMsIDEsIDI0NiwgMTk4LCAyLCAyNDksIDQ4LCAzMSwgNiwgMjQsIDI0NiwgCisgICAgMTk4LCAyNDQsIDExNiwgMzEsIDMsIDI0LCAyNDYsIDE5OCwgMjQ0LCAxMTYsIDMxLCA2LCAxLCAyMjksIDE5OSwgMiwgMjMzLCAKKyAgICAxOTMsIDk2LCAzMSwgMywgMSwgMjI5LCAxOTksIDIsIDIzMywgMTkzLCA5NiwgMzEsIDYsIDEsIDI1NSwgNiwgMTU1LCAzMSwgCisgICAgMywgMSwgMjU1LCA2LCAxNTUsIDMxLCA2LCAxLCAyNDYsIDEzOSwgMiwgMjQ5LCA0OCwgMzEsIDMsIDEsIDI0NiwgMTM5LCAyLCAKKyAgICAyNDksIDQ4LCAzMSwgNiwgMSwgMjIyLCA4OCwgMiwgMjQ5LCA0OCwgMzEsIDMsIDEsIDIyMiwgODgsIDIsIDI0OSwgNDgsIAorICAgIDMxLCA2LCAxLCAyMjMsIDEzMCwgNjgsIDMxLCAzLCAxLCAyMjMsIDEzMCwgNjgsIDMxLCA2LCAxLCAyMjMsIDEzMCwgMTA1LCAKKyAgICAyLCA5MiwgMzEsIDMsIDEsIDIyMywgMTMwLCAxMDUsIDIsIDkyLCAzMSwgNiwgMSwgMjQzLCAyMTQsIDIsIDI0OSwgNDgsIAorICAgIDMxLCAzLCAxLCAyNDMsIDIxNCwgMiwgMjQ5LCA0OCwgMzEsIDYsIDI0LCAyMjIsIDg4LCAyMjEsIDUwLCAzMSwgMywgMjQsIAorICAgIDIyMiwgODgsIDIyMSwgNTAsIDMxLCA2LCAxLCAyNTEsIDQ3LCAyLCAyNDksIDQ4LCAzMSwgMywgMSwgMjUxLCA0NywgMiwgCisgICAgMjQ5LCA0OCwgMzEsIDYsIDEsIDI1MSwgNDcsIDIsIDY5LCA5MiwgMzEsIDMsIDEsIDI1MSwgNDcsIDIsIDY5LCA5MiwgMzEsIAorICAgIDYsIDEsIDIyNCwgMjIyLCAzMSwgMywgMSwgMjI0LCAyMjIsIDMxLCA2LCAxLCAyNTUsIDYsIDI1MSwgNDYsIDMxLCAzLCAxLCAKKyAgICAyNTUsIDYsIDI1MSwgNDYsIDMxLCA2LCAxLCAyNTUsIDYsIDI1MSwgNDcsIDIsIDI0OSwgNDgsIDMxLCAzLCAxLCAyNTUsIDYsIAorICAgIDI1MSwgNDcsIDIsIDI0OSwgNDgsIDMxLCAxLCAyMzAsIDIyLCAzMSwgNiwgMSwgMjE3LCA3MywgMiwgMjUyLCA4LCAzMSwgMywgCisgICAgMSwgMjE3LCA3MywgMiwgMjUyLCA4LCAzMSwgNiwgMSwgMjA2LCAyLCA5NiwgMzEsIDMsIDEsIDIwNiwgMiwgOTYsIDMxLCA2LCAKKyAgICAxLCAyNDYsIDIxOCwgMiwgMjIyLCAxMzUsIDMxLCAzLCAxLCAyNDYsIDIxOCwgMiwgMjIyLCAxMzUsIDMxLCA2LCAxLCAyNDYsIAorICAgIDE5OCwgMiwgOTYsIDMxLCAzLCAxLCAyNDYsIDE5OCwgMiwgOTYsIDMxLCA2LCAxLCAyNDYsIDE5OCwgMiwgMjIyLCAxMzUsIAorICAgIDMxLCAzLCAxLCAyNDYsIDE5OCwgMiwgMjIyLCAxMzUsIDMxLCA2LCAxLCAyMzYsIDE0NCwgMjUxLCA0NiwgMzEsIDMsIDEsIAorICAgIDIzNiwgMTQ0LCAyNTEsIDQ2LCAzMSwgNiwgMSwgMjQ2LCAyMDYsIDIsIDIyMiwgMTM1LCAzMSwgMywgMSwgMjQ2LCAyMDYsIAorICAgIDIsIDIyMiwgMTM1LCAzMSwgMywgMSwgMjMwLCAyMiwgMzEsIDYsIDEsIDExMiwgMiwgMjUyLCA4LCAzMSwgMywgMSwgMTEyLCAKKyAgICAyLCAyNTIsIDgsIDMxLCA2LCAxLCAxMTIsIDIsIDI0OSwgMTMsIDMxLCAzLCAxLCAxMTIsIDIsIDI0OSwgMTMsIDMxLCA2LCAKKyAgICAyNCwgMTEyLCAyMzgsIDI2LCAzMSwgMywgMjQsIDExMiwgMjM4LCAyNiwgMzEsIDYsIDEsIDIzOCwgMjcsIDIsIDI1MiwgOCwgCisgICAgMzEsIDMsIDEsIDIzOCwgMjcsIDIsIDI1MiwgOCwgMzEsIDYsIDEsIDIyNiwgMTA0LCAzMSwgMywgMSwgMjI2LCAxMDQsIDMxLCAKKyAgICA2LCAxLCAyMjYsIDEwNSwgMiwgMjQ5LCAxMywgMzEsIDMsIDEsIDIyNiwgMTA1LCAyLCAyNDksIDEzLCAzMSwgNiwgMSwgCisgICAgMjE3LCA3MywgMiwgMjQ5LCAxMywgMzEsIDMsIDEsIDIxNywgNzMsIDIsIDI0OSwgMTMsIDMxLCA2LCAxLCAyMTcsIDkzLCAyLCAKKyAgICAyNDksIDEzLCAzMSwgMywgMSwgMjE3LCA5MywgMiwgMjQ5LCAxMywgMzEsIDYsIDEsIDI1NSwgNiwgMjQ3LCA3MywgMzEsIDMsIAorICAgIDEsIDI1NSwgNiwgMjQ3LCA3MywgMzEsIDYsIDEsIDI0MiwgMTA3LCAyLCAyMzQsIDExNSwgMzEsIDMsIDEsIDI0MiwgMTA3LCAKKyAgICAyLCAyMzQsIDExNSwgMzEsIDYsIDEsIDI0MiwgMTA3LCAyLCAyNDksIDEzLCAzMSwgMywgMSwgMjQyLCAxMDcsIDIsIDI0OSwgCisgICAgMTMsIDMxLCA2LCAxLCAxNDIsIDIsIDI0OSwgMTMsIDMxLCAzLCAxLCAxNDIsIDIsIDI0OSwgMTMsIDMxLCA2LCAxLCAyNTIsIAorICAgIDE5NiwgNzQsIDMxLCAzLCAxLCAyNTIsIDE5NiwgNzQsIDMxLCA2LCAxLCAyNTIsIDE5NiwgMTQyLCAyLCAyNDksIDEzLCAzMSwgCisgICAgMywgMSwgMjUyLCAxOTYsIDE0MiwgMiwgMjQ5LCAxMywgMzEsIDYsIDEsIDE3OCwgMiwgMjQ5LCAxMywgMzEsIDMsIDEsIAorICAgIDE3OCwgMiwgMjQ5LCAxMywgMzEsIDYsIDEsIDEwNSwgMiwgMjM0LCAxMTUsIDMxLCAzLCAxLCAxMDUsIDIsIDIzNCwgMTE1LCAKKyAgICAzMSwgNiwgMSwgMTA1LCAyLCAyNDksIDEzLCAzMSwgMywgMSwgMTA1LCAyLCAyNDksIDEzLCAzMSwgNiwgMSwgMTA1LCAyLCAKKyAgICA1MSwgMTY4LCAzMSwgMywgMSwgMTA1LCAyLCA1MSwgMTY4LCAzMSwgNiwgMSwgMjUxLCA0NywgMiwgMjQ5LCAxMywgMzEsIDMsIAorICAgIDEsIDI1MSwgNDcsIDIsIDI0OSwgMTMsIDMxLCA2LCAxLCAyNDQsIDExNywgMiwgMjQ5LCA0OCwgMzEsIDMsIDEsIDI0NCwgCisgICAgMTE3LCAyLCAyNDksIDQ4LCAzMSwgNiwgMSwgMjE4LCA4LCAyLCAyNDksIDEzLCAzMSwgMywgMSwgMjE4LCA4LCAyLCAyNDksIAorICAgIDEzLCAzMSwgNiwgMSwgMjQ0LCAxMTcsIDIsIDIxNCwgMjUsIDk2LCAzMSwgMywgMSwgMjQ0LCAxMTcsIDIsIDIxNCwgMjUsIAorICAgIDk2LCAzMSwgNiwgMSwgMjQzLCAyMTQsIDIsIDk2LCAzMSwgMywgMSwgMjQzLCAyMTQsIDIsIDk2LCAzMSwgNiwgMSwgMjQzLCAKKyAgICAyMTQsIDIsIDkyLCAzMSwgMywgMSwgMjQzLCAyMTQsIDIsIDkyLCAzMSwgNiwgMSwgMjM2LCA0NSwgMjQ5LCA5MiwgMzEsIDMsIAorICAgIDEsIDIzNiwgNDUsIDI0OSwgOTIsIDMxLCA2LCAxLCAyMzYsIDQ1LCAyNDgsIDE4MiwgMzEsIDMsIDEsIDIzNiwgNDUsIDI0OCwgCisgICAgMTgyLCAzMSwgNiwgMSwgMjM2LCA0NSwgMjE3LCAyNSwgMzEsIDMsIDEsIDIzNiwgNDUsIDIxNywgMjUsIDMxLCA2LCAxLCAKKyAgICAyMzYsIDQ1LCAyNDcsIDY3LCAzMSwgMywgMSwgMjM2LCA0NSwgMjQ3LCA2NywgMzEsIDYsIDEsIDIzNiwgNDUsIDIzNSwgMjAsIAorICAgIDMxLCAzLCAxLCAyMzYsIDQ1LCAyMzUsIDIwLCAzMSwgNiwgMSwgMjM2LCA0NSwgMjMyLCAxNSwgMzEsIDMsIDEsIDIzNiwgCisgICAgNDUsIDIzMiwgMTUsIDMxLCA2LCAxLCAyMzYsIDQ1LCAyMjQsIDY3LCAzMSwgMywgMSwgMjM2LCA0NSwgMjI0LCA2NywgMzEsIAorICAgIDYsIDEsIDIzNiwgNDUsIDIyMSwgMTU2LCAzMSwgMywgMSwgMjM2LCA0NSwgMjIxLCAxNTYsIDMxLCA2LCAxLCAyMTAsIDIxNywgCisgICAgOTIsIDMxLCAzLCAxLCAyMTAsIDIxNywgOTIsIDMxLCA2LCAxLCAyNDYsIDIxOCwgMiwgOTYsIDMxLCAzLCAxLCAyNDYsIAorICAgIDIxOCwgMiwgOTYsIDMxLCA2LCAxLCAyMzUsIDc5LCAzMSwgMywgMSwgMjM1LCA3OSwgMzEsIDYsIDEsIDIyNywgMTUxLCAzMSwgCisgICAgMywgMSwgMjI3LCAxNTEsIDMxLCA2LCAxLCAyMTgsIDY1LCAzMSwgMywgMSwgMjE4LCA2NSwgMzEsIDYsIDEsIDIyOCwgMTU1LCAKKyAgICAzMSwgMywgMSwgMjI4LCAxNTUsIDMxLCA2LCAxLCAyMTgsIDIyNywgMzEsIDMsIDEsIDIxOCwgMjI3LCAzMSwgNiwgMSwgCisgICAgMjU0LCAxNjUsIDE3NSwgMzEsIDMsIDEsIDI1NCwgMTY1LCAxNzUsIDMxLCA2LCAxLCAyNDYsIDIxOCwgMiwgMjMzLCAxOTMsIAorICAgIDk2LCAzMSwgMywgMSwgMjQ2LCAyMTgsIDIsIDIzMywgMTkzLCA5NiwgMzEsIDYsIDEsIDI0NiwgMTk4LCAyLCAyMzMsIDE5MywgCisgICAgOTYsIDMxLCAzLCAxLCAyNDYsIDE5OCwgMiwgMjMzLCAxOTMsIDk2LCAzMSwgNiwgMSwgMjI5LCAxOTksIDIsIDI0OSwgNDgsIAorICAgIDMxLCAzLCAxLCAyMjksIDE5OSwgMiwgMjQ5LCA0OCwgMTMyLCA2LCAxLCAyNTMsIDIwOSwgMTMyLCA2LCAxLCAyNTIsIDExNCwgCisgICAgMTMyLCA2LCAxLCAyNDQsIDkzLCAxMzIsIDYsIDEsIDI0OSwgMjA3LCAxMzIsIDYsIDEsIDI0NiwgMjU0LCAxMzIsIDYsIDEsIAorICAgIDIxNywgMTE0LCAxMzIsIDYsIDEsIDI0NiwgMjM5LCAxMzIsIDYsIDEsIDI0NiwgMTIzLCAxMzIsIDYsIDEsIDEwMSwgMTMyLCAKKyAgICA2LCAxLCAyMTcsIDcyLCAxMzIsIDYsIDEsIDIzNywgMjAwLCAxMzIsIDYsIDEsIDIzNSwgMjMsIDEzMiwgNiwgMSwgMjE4LCAKKyAgICAxMzMsIDEzMiwgNiwgMSwgMjUxLCAxNjksIDEzMiwgNiwgMSwgMjM2LCAxNjgsIDEzMiwgNiwgMSwgMjQzLCA0LCAxMzIsIDYsIAorICAgIDEsIDIzNywgMTIzLCAxMzIsIDYsIDEsIDI0NCwgMTI0LCAxMzIsIDYsIDEsIDI1MSwgNDIsIDEzMiwgNiwgMSwgMjMzLCAKKyAgICAyNTEsIDEzMiwgNiwgMSwgMjE3LCAyNTAsIDEzMiwgNiwgMSwgMjMxLCAxNzQsIDEzMiwgNiwgMSwgMjI1LCAyNSwgMTMyLCAKKyAgICA2LCAxLCAyMTksIDcyLCAxMzIsIDYsIDEsIDI1MSwgNjksIDEzMiwgNiwgMSwgMjI5LCAxODcsIDEzMiwgNiwgMSwgMjM3LCAKKyAgICAxMDAsIDEzMiwgNiwgMSwgMjAzLCAxMzIsIDYsIDEsIDIyNiwgNzcsIDEzMiwgNiwgMSwgMjE5LCA5NiwgMTMyLCA2LCAxLCAKKyAgICAyMjEsIDE1OCwgMTMyLCA2LCAxLCAyMjcsIDE5NiwgMTMyLCA2LCAxLCAyNTAsIDE4MiwgMTMyLCA2LCAxLCAyMTcsIDIzNiwgCisgICAgMTMyLCA2LCAxLCAyMjksIDYxLCAxMzIsIDYsIDEsIDIzNiwgMTc4LCAxMzIsIDYsIDEsIDIzMCwgMTYxLCAxMzIsIDYsIDEsIAorICAgIDI0NSwgMjIxLCAxMzIsIDU4LCAxLCA0MiwgMTQ0LCAyMjcsIDkzLCAxMzIsIDI1NCwgNzksIDEzMiwgMjQ2LCAyMDEsIDc4LCAKKyAgICAxMzIsIDI0NiwgOTUsIDc4LCAxMzIsIDI1MCwgMTY4LCAxMzIsIDIyOCwgODIsIDc4LCAxMzIsIDI1NSwgNywgNzgsIDEzMiwgCisgICAgMywgMSwgMjUzLCAyMDksIDEzMiwgMywgMSwgMjUyLCAxMTQsIDEzMiwgMywgMSwgMjQ0LCA5MywgMTMyLCAzLCAxLCAyNDksIAorICAgIDIwNywgMTMyLCAzLCAxLCAyNDYsIDI1NCwgMTMyLCAzLCAxLCAyMTcsIDExNCwgMTMyLCAzLCAxLCAyNDYsIDIzOSwgMTMyLCAKKyAgICAzLCAxLCAyNDYsIDEyMywgMTMyLCAzLCAxLCAxMDEsIDEzMiwgMywgMSwgMjE3LCA3MiwgMTMyLCAzLCAxLCAyMzcsIDIwMCwgCisgICAgMTMyLCAzLCAxLCAyMzUsIDIzLCAxMzIsIDMsIDEsIDIxOCwgMTMzLCAxMzIsIDMsIDEsIDI1MSwgMTY5LCAxMzIsIDMsIDEsIAorICAgIDIzNiwgMTY4LCAxMzIsIDMsIDEsIDI0MywgNCwgMTMyLCAzLCAxLCAyMzcsIDEyMywgMTMyLCAzLCAxLCAyNDQsIDEyNCwgCisgICAgMTMyLCAzLCAxLCAyNTEsIDQyLCAxMzIsIDMsIDEsIDIzMywgMjUxLCAxMzIsIDMsIDEsIDIxNywgMjUwLCAxMzIsIDMsIDEsIAorICAgIDIzMSwgMTc0LCAxMzIsIDMsIDEsIDIyNSwgMjUsIDEzMiwgMywgMSwgMjE5LCA3MiwgMTMyLCAzLCAxLCAyNTEsIDY5LCAKKyAgICAxMzIsIDMsIDEsIDIyOSwgMTg3LCAxMzIsIDMsIDEsIDIzNywgMTAwLCAxMzIsIDMsIDEsIDIwMywgMTMyLCAzLCAxLCAyMjYsIAorICAgIDc3LCAxMzIsIDMsIDEsIDIxOSwgOTYsIDEzMiwgMywgMSwgMjIxLCAxNTgsIDEzMiwgMywgMSwgMjI3LCAxOTYsIDEzMiwgMywgCisgICAgMSwgMjUwLCAxODIsIDEzMiwgMywgMSwgMjE3LCAyMzYsIDEzMiwgMywgMSwgMjI5LCA2MSwgMTMyLCAzLCAxLCAyMzYsIAorICAgIDE3OCwgMTMyLCAzLCAxLCAyMzAsIDE2MSwgMTMyLCAzLCAxLCAyNDUsIDIyMSwgMTMyLCAzLCAyNCwgMjQ2LCAyNTUsIDIxNywgCisgICAgMjM2LCAxMzIsIDI0NSwgOTAsIDIyMywgMTM2LCAxMzIsIDI0MiwgMTIxLCA4NywgMjU1LCAxLCAyNDYsIDExNiwgODcsIAorICAgIDI1NSwgMSwgMjI2LCA3OCwgODcsIDI1NSwgMSwgMjI1LCAxMiwgODcsIDI1NSwgMSwgMjE3LCAxMDIsIDIyOCwgMTM4LCA4NywgCisgICAgMjU1LCAxLCAyMTcsIDEwMiwgMjQ0LCAyNDYsIDg3LCAyNTUsIDEsIDIyMSwgMTY4LCA4NywgMjU1LCAxLCAyMjcsIDE1OCwgCisgICAgODcsIDI1NSwgMSwgMjE3LCAxMDEsIDg3LCAyNTUsIDEsIDIyOSwgMjE5LCA4NywgMjU1LCAxLCAyMTgsIDAsIDg3LCAyNTUsIAorICAgIDEsIDIyMiwgNDEsIDg3LCAyNTUsIDEsIDI0NCwgMTcxLCA4NywgMjU1LCAxLCAyNDQsIDE3MiwgMjMzLCA3MCwgODcsIDI1NSwgCisgICAgMSwgMjQ0LCAxNjksIDg3LCAyNTUsIDEsIDIyOCwgMTM5LCAyMjksIDI0MiwgODcsIDI1NSwgMSwgMjIyLCA3MCwgMjQ0LCAKKyAgICAxODUsIDg3LCAyNTUsIDEsIDIyOSwgMjAyLCA4NywgMjU1LCAxLCAyNTMsIDIzOSwgMjQzLCAyMDYsIDg3LCAyNTUsIDEsIAorICAgIDIzMywgNzksIDg3LCAyNTUsIDEsIDIzNCwgMTA0LCA4NywgMjU1LCAxLCAyMzMsIDI0NSwgODcsIDI1NSwgMSwgMjMzLCAKKyAgICAyNDYsIDIzNiwgMTc5LCA4NywgMjU1LCAxLCAyNDksIDE1MywgODcsIDI1NSwgMSwgMjI4LCAxNTAsIDg3LCAyNTUsIDEsIAorICAgIDIyMiwgNzAsIDIyOCwgMTM0LCA4NywgMjU1LCAxLCAyMTgsIDEwLCAyNTIsIDExNSwgMjE3LCAyMTcsIDg3LCAyNTUsIDEsIAorICAgIDIzMCwgMTQ5LCA4NywgMjU1LCAxLCAyMzcsIDI0MSwgODcsIDI1NSwgMSwgMjQ5LCA3NiwgODcsIDI1NSwgMSwgMjE3LCAzMSwgCisgICAgODcsIDE2NCwgMjM0LCA1NCwgMjUwLCAyMjEsIDg3LCAyMjksIDMyLCAyMjQsIDIyNCwgODcsIDIyOSwgMzIsIDI0MywgMTcyLCAKKyAgICAyMjYsIDc4LCA4NywgMjI5LCAzMiwgMjQzLCAxNzIsIDIyOSwgMjE0LCA4NywgMjI5LCAzMiwgMjQzLCAxNzIsIDIyOCwgCisgICAgMTQzLCA4NywgMjI5LCAzMiwgMjQzLCA5NCwgODcsIDIyOSwgMzIsIDIyMSwgNDgsIDg3LCAyMjksIDMyLCAyMjYsIDc4LCAKKyAgICA4NywgMjI5LCAzMiwgMjI5LCAyMTQsIDg3LCAyMjksIDMyLCAyMjgsIDE0MywgODcsIDIyOSwgMzIsIDI0MiwgMjU0LCA4NywgCisgICAgMjI5LCAzMiwgMjQyLCAyNTUsIDI0MywgMTc0LCAzNSwgMjE5LCAxNjksIDg3LCAyMjksIDMyLCAyMjgsIDg1LCA4NywgMjI5LCAKKyAgICAzMiwgMjQ5LCAxOTQsIDE1NiwgMjM0LCA3NywgODcsIDIyOSwgMzIsIDIzMywgMjM3LCA4NywgMjI4LCAxOTcsIDIzNCwgNzYsIAorICAgIDg3LCAyMjksIDMyLCAyMjcsIDI0OCwgODcsIDIyOCwgMTk3LCAyMjksIDIyMCwgODcsIDIyOSwgMzIsIDIyNCwgMjEwLCAKKyAgICAyNDgsIDE0NSwgODcsIDIyOSwgMzIsIDIyNCwgMTEzLCAyNDgsIDE0NSwgODcsIDIyOCwgMTk3LCAyMjQsIDIyLCAyMjksIAorICAgIDIxNiwgODcsIDE2NCwgMjIwLCA2MCwgMjQ4LCAxNDUsIDg3LCAxNjQsIDIzNCwgMjM3LCAyNDgsIDE0NSwgODcsIDIyOCwgCisgICAgMTk3LCAyMzEsIDEwNCwgMjQzLCAyMDUsIDg3LCAyMjksIDMyLCAyMjgsIDE0NCwgMjI4LCAxMzgsIDg3LCAxLCAyNTQsIAorICAgIDE2OCwgODcsIDEsIDI1MiwgMTA0LCA4NywgMSwgMjQ0LCA5MSwgODcsIDEsIDI0OSwgMTc3LCA4NywgMSwgMjQzLCAxNjIsIAorICAgIDg3LCAxLCAyMTksIDE2OSwgODcsIDEsIDIxNywgOTUsIDg3LCAxLCAyNDMsIDEyOCwgODcsIDEsIDIyMiwgNTAsIDg3LCAxLCAKKyAgICAyMTcsIDIyMCwgODcsIDEsIDM5LCAyMzYsIDI0NiwgODcsIDEsIDIzNiwgMjQ2LCA4NywgMSwgMjM1LCAxNTIsIDg3LCAxLCAKKyAgICAzOSwgMjM0LCAxLCA4NywgMSwgMjM0LCAxLCA4NywgMSwgMzksIDIzMSwgMTAzLCA4NywgMSwgMjMxLCAxMDMsIDg3LCAxLCAKKyAgICAyMjYsIDE0NSwgODcsIDEsIDI1MywgMjA3LCA4NywgMSwgMzksIDIyOSwgMTk4LCA4NywgMSwgMjI5LCAxOTgsIDg3LCAxLCAKKyAgICAzOSwgMjIxLCA1MSwgODcsIDEsIDIyMSwgNTEsIDg3LCAxLCAyMjgsIDEwNywgODcsIDEsIDIyNywgMTc0LCA4NywgMSwgCisgICAgMjI0LCAyMDksIDg3LCAxLCAyMjIsIDEwMiwgODcsIDI0LCAyMTcsIDI0OCwgNTEsIDIxOSwgMTY5LCA4NywgMjQsIDIxNywgCisgICAgMjQ4LCAyMTksIDE3MCwgMjE3LCAyMjAsIDg3LCAyNCwgMjE3LCAyNDgsIDUxLCAyMTcsIDIyMCwgODcsIDIyOCwgMTk3LCAKKyAgICAyNDQsIDE3MSwgODcsIDIyOCwgMTk3LCAyNDQsIDE2OSwgMTIsIDU0LCA1NSwgMTIsIDUsIDIyNiwgMTM5LCAxMiwgMjQ1LCAKKyAgICAxMzIsIDIzNCwgNjMsIDEyLCA1LCAyMjYsIDE2NywgMjU0LCA2MywgMjUwLCA4OSwgMjI3LCA2NCwgMjU0LCA2MywgMjQ1LCAKKyAgICAxMTAsIDIyNywgNjQsIDEyLCAyMjcsIDIyMiwgMjU0LCA2MywgMjI5LCAxNzAsIDIzMywgMTY0LCA1NSwgMjU0LCA2MywgCisgICAgMjI5LCAxNzAsIDIyMiwgNjYsIDIyMSwgMjMyLCA1NSwgMjU0LCAyMTQsIDU1LCAxMiwgMjUwLCAxNjgsIDEyLCAyNDksIAorICAgIDE0MSwgMjI1LCA1NCwgMTIsIDIyOSwgMzQsIDIxOSwgMTU0LCA1NSwgMTIsIDUsIDIzMywgMTQ3LCAxMiwgNSwgMjI2LCAKKyAgICAxNTIsIDI1NCwgMTcwLCAyMTgsIDI0NSwgMTIsIDUsIDI1NCwgMTcwLCAyNTQsIDAsIDEyLCA1LCAyMjcsIDI0NywgMjU0LCAKKyAgICAxNjksIDEyLCA1LCAyMjcsIDI1MSwgMjU0LCAxNTUsIDI1NCwgMTE2LCAxMiwgNSwgMjIyLCAxMjgsIDEyLCAzLCAxMTYsIAorICAgIDIyMiwgMTM3LCAxMiwgMywgMTE2LCAyNCwgOTksIDIsIDIzNSwgMTYxLCAyLCAyMTgsIDIxLCAxMiwgMywgMTE2LCAyMTcsIAorICAgIDEwNiwgMTIsIDMsIDI0NSwgMjM4LCAxMiwgMywgMjQ5LCAxNzIsIDEyLCAzLCAyMzYsIDIwNiwgMTIsIDIyNSwgNjcsIDEyLCAKKyAgICAyMjEsIDc4LCA2MSwgMjI4LCAxOTcsIDc4LCAxMiwgMjI4LCA4MiwgNzgsIDEyLCAxLCAyNDMsIDE5MiwgMTIsIDEsIDk5LCAKKyAgICAyLCAyMzQsIDExMSwgNTAsIDEyLCAxLCA5OSwgMiwgMTgxLCA1MCwgMTIsIDEsIDIxOCwgMjM0LCAyLCAxODEsIDUwLCAxMiwgCisgICAgMSwgOTksIDIsIDE4MSwgNTYsIDEyLCAxLCA3MCwgMiwgMTgxLCA1MCwgMTIsIDEsIDI1NCwgMTY4LCAxMiwgMSwgMjUyLCAKKyAgICAxMjgsIDEyLCAxLCAyMjIsIDc4LCAyMzQsIDcyLCAxMiwgMSwgMjIyLCA3NywgMTIsIDEsIDIyMiwgMTksIDEyLCAxLCAyMzcsIAorICAgIDExMiwgMTIsIDEsIDI0MywgMjAyLCAxMiwgMSwgMjM2LCAxNDYsIDEyLCAxLCAyNDksIDE4MywgMTIsIDEsIDIyMiwgMjksIAorICAgIDEyLCAxLCAyMjcsIDE5NiwgMTIsIDEsIDIxNywgMTA2LCAxMiwgMSwgMjI2LCA4MiwgMTIsIDEsIDIyNCwgMjQyLCAxMiwgMSwgCisgICAgMjI2LCAxNzAsIDEyLCAxLCAyNDksIDIwMiwgMTIsIDEsIDIyMiwgMTM3LCAxMiwgMSwgMjE3LCAxMDksIDEyLCAxLCAyNTQsIAorICAgIDE5MSwgMTIsIDEsIDI0NCwgMTIyLCAxMiwgMSwgMjM2LCAxNzcsIDIsIDEyNCwgMTg4LCA1MCwgMTIsIDEsIDIzNiwgMTc3LCAKKyAgICAyLCAxNDgsIDE4OCwgNTYsIDEyLCAxLCAyNDUsIDI0MSwgNzAsIDIsIDIzNywgMTcwLCAyMTYsIDIxNiwgMTIsIDEsIDI0NSwgCisgICAgMjQxLCA3MCwgMiwgMTI0LCAxODgsIDUwLCAxMiwgMSwgMjQ1LCAyNDEsIDcwLCAyLCAxNDgsIDE4OCwgNTAsIDEyLCAyMjIsIAorICAgIDEwNywgMTIsIDEsIDI0NSwgMjIxLCAxMiwgMSwgMjI4LCAxNDgsIDEyLCAxLCAyMzYsIDI0NiwgMTIsIDEsIDIzNSwgMTYwLCAKKyAgICAxMiwgMSwgMjM0LCAxNCwgMTIsIDEsIDIzMSwgMTkzLCAxMiwgMSwgMjQzLCAxNDYsIDEyLCAxLCAyMTgsIDIzMywgMTIsIDEsIAorICAgIDk5LCAyMzQsIDkyLCAxMiwgMSwgMjE4LCAyMSwgMTIsIDI0NSwgMjM2LCAxMiwgMjQ5LCAxNzAsIDEyLCAyMzYsIDIwNCwgCisgICAgMTIsIDI0NSwgMjM4LCAxMiwgMjQ5LCAxNzIsIDEyLCAyMzYsIDIwNiwgMTIsIDIyNSwgMTYsIDEyLCAyMjMsIDc1LCAxMiwgCisgICAgMjM0LCAxMDksIDUwLCAxMiwgMTgxLCA1MCwgMTIsIDE4MSwgNTYsIDEyLCAyMjMsIDk0LCAyNTQsIDE2OCwgMTIsIDIzNywgCisgICAgMTcwLCAyNDksIDE3MiwgMTIsIDE2NCwgMjMxLCAxOTQsIDI0NCwgMTA3LCAxMiwgMjE2LCAyNTUsIDEyLCAyOSwgNSwgMywgCisgICAgMjIwLCAxMSwgNTAsIDEyLCAyOSwgNSwgMjM3LCAxNzAsIDMsIDIyMCwgMTEsIDUwLCAxMiwgMjksIDUsIDYxLCA1NiwgMTIsIAorICAgIDIxMCwgMjQ5LCAxNzIsIDEyLCAyNDUsIDIzOSwgMiwgMTI0LCAyNDgsIDE0MywgMjU0LCA2MywgMjAsIDIxNywgODQsIDI1NCwgCisgICAgNjMsIDIwLCAxMDcsIDI1NCwgNjMsIDIwLCAxMDMsIDI1NCwgNjMsIDIwLCAxNjAsIDI1NCwgNjMsIDIwLCAxNTQsIDI1NCwgCisgICAgNjMsIDIwLCAxNzQsIDI1NCwgNjMsIDIwLCAxODIsIDI1NCwgNjMsIDIwLCAxOTEsIDI1NCwgNjMsIDIwLCAxODUsIDI1NCwgCisgICAgNjMsIDIwLCAxOTAsIDEyLCAyMjksIDE2OSwgNTUsIDEyLCAyNDksIDg2LCAyMjUsIDU0LCAxMiwgMjIxLCAyMzAsIDIyNSwgCisgICAgNTQsIDEyLCAyNDUsIDE3MCwgMjI5LCAzMCwgMjIzLCAxNTYsIDEyLCAxLCAyNDgsIDE0NCwgMjUyLCAxMjgsIDEyLCAxLCAKKyAgICAyNDgsIDE0NCwgMjI4LCAxNDgsIDEyLCAxLCAyMjMsIDU5LCAyNTQsIDE2OCwgMTIsIDEsIDk5LCAyMTgsIDI0NiwgMTIsIDEsIAorICAgIDk5LCAyLCAyMTgsIDIzNSwgMTgxLCA1MCwgMTIsIDEsIDk5LCAyLCAyMTgsIDIzNSwgMTgxLCA1NiwgMTIsIDEsIDExNiwgCisgICAgMjQzLCAxOTIsIDEyLCAxLCAxMTYsIDE4MSwgMjU0LCAxNjgsIDEyLCAxLCAxMTYsIDE4MSwgMjE4LCAyMzMsIDEyLCAxLCAKKyAgICAxMDUsIDIsIDE4MSwgNTAsIDEyLCAxLCAxMTYsIDE4MSwgMjE4LCAyMSwgMTIsIDEsIDIyMSwgMjMsIDEyLCAxLCAyMjEsIAorICAgIDIxLCAxMiwgMSwgMjUyLCAxMzUsIDEyLCAxLCAyMjIsIDc4LCAyLCAyMjcsIDkzLCAxMiwgMSwgMjIyLCA3OCwgMiwgMTQ4LCAKKyAgICAxODgsIDcxLCAyNDcsIDEyOSwgMTIsIDEsIDIyOSwgMTg3LCAxMiwgMSwgMjIyLCA3NSwgMTIsIDEsIDI1MiwgMTI2LCAxMiwgCisgICAgMSwgMTExLCAyLCAxODEsIDUwLCAxMiwgMSwgMTExLCAyLCAxMjQsIDE4OCwgNjksIDUwLCAxMiwgMSwgMjMxLCA3MCwgMTIsIAorICAgIDEsIDI0NywgNzksIDEyLCAxLCAxMTEsIDIsIDE0OCwgMTg4LCA1MCwgMTIsIDEsIDIyMiwgOTEsIDEyLCAxLCAyMjIsIDg5LCAKKyAgICAxMiwgMSwgMjQ5LCAxMjcsIDEyLCAxLCAyNDksIDE4NCwgMiwgMjI3LCA5MywgMTIsIDEsIDI0OSwgMTg0LCAyLCA2MSwgNTYsIAorICAgIDEyLCAxLCAyNDksIDE4NCwgMiwgNjEsIDI1MiwgMTE4LCAyNSwgMywgMjIyLCAxMzcsIDEyLCAxLCAyNDksIDE4OSwgMTIsIAorICAgIDEsIDI0OSwgMTI5LCAxMiwgMSwgMjQ3LCAxMDMsIDEyLCAxLCAyNDksIDE4NCwgMiwgMTQ4LCAxODgsIDcxLCAyNDcsIDEyOSwgCisgICAgMTIsIDEsIDI0OSwgMTg0LCAyLCAyNDUsIDExNiwgMTg4LCA1MCwgMTIsIDEsIDIyNywgNDgsIDEyLCAxLCAyMjcsIDE5NywgCisgICAgMiwgMywgMjE2LCAyMTYsIDEyLCAxLCAyMjcsIDE5NywgMiwgMjI3LCA5MywgMTIsIDEsIDIyNywgMTk3LCAyLCA2MSwgNTYsIAorICAgIDEyLCAxLCAyMjcsIDE5NywgMiwgMywgMjIwLCAxMSwgNTYsIDEyLCAxLCAyMjcsIDE5NywgMiwgNjEsIDI1MiwgMTE4LCAyNSwgCisgICAgNjEsIDUwLCAxMiwgMSwgMjI3LCAxOTcsIDIsIDEyNCwgMTg4LCA1MCwgMTIsIDEsIDIzNywgMTA5LCAxMiwgMSwgMjI3LCAKKyAgICAxOTcsIDIsIDI0NSwgMTE2LCAxODgsIDUwLCAxMiwgMSwgMjI2LCA4MywgMiwgNjEsIDI1MiwgMTE4LCAyNSwgNjEsIDUwLCAKKyAgICAxMiwgMSwgMjI2LCA4MywgMiwgMTQ4LCAxODgsIDU2LCAxMiwgMSwgMjI2LCA4MywgMiwgMTQ4LCAxODgsIDI1MiwgMTE4LCAKKyAgICAyNSwgMTQ4LCAxODgsIDUwLCAxMiwgMSwgMjI2LCAxNzEsIDIsIDEyNCwgMTg4LCA1NiwgMTIsIDEsIDIyNiwgMTcxLCAyLCAKKyAgICAxNDgsIDE4OCwgNTAsIDEyLCAxLCAyMjIsIDEzOCwgMiwgMTQ4LCAxODgsIDUwLCAxMiwgMSwgMjU0LCAxOTIsIDIsIDE0OCwgCisgICAgMTg4LCA1MCwgMTIsIDEsIDI0OCwgMTQ0LCAyNDUsIDIyMSwgMTIsIDEsIDI0NSwgMjIyLCAyLCA2MSwgMjMzLCAxMDQsIDU2LCAKKyAgICAxMiwgMSwgMjQ1LCAyMjIsIDIsIDYxLCA1NiwgMTIsIDEsIDIxOSwgMTU4LCAxMiwgMSwgMjQ1LCAyMjIsIDIsIDE0OCwgCisgICAgMTg4LCA1NiwgMTIsIDEsIDIyOSwgMTg1LCAxMiwgMSwgMjI4LCAxNDksIDIsIDYxLCA1MCwgMTIsIDEsIDIyOCwgMTQ5LCAyLCAKKyAgICAxNDgsIDE4OCwgNTAsIDEyLCAxLCAyMzYsIDE3NiwgMTIsIDEsIDIyMywgMzMsIDIzNiwgMjQ2LCAxMiwgMSwgMjM2LCAyNDcsIAorICAgIDIsIDIyNywgOTMsIDEyLCAxLCAyMzYsIDI0NywgMiwgNjEsIDUwLCAxMiwgMSwgMjMyLCAxMTcsIDEyLCAxLCAyMzYsIDI0NywgCisgICAgMiwgMTQ4LCAxODgsIDU2LCAxMiwgMSwgMjQ0LCAyNDMsIDEyLCAxLCAyNDQsIDI0NCwgMiwgMjI3LCA5MywgMTIsIDEsIAorICAgIDIzMiwgODIsIDEyLCAxLCAyNDQsIDI0NCwgMiwgMTI0LCAxODgsIDU2LCAxMiwgMSwgMjQ0LCA5LCAxMiwgMSwgMjQ0LCAKKyAgICAyNDQsIDIsIDE0OCwgMTg4LCA1MCwgMTIsIDEsIDIzNSwgMTYxLCAyLCAzLCAyMTYsIDIxNiwgMTIsIDEsIDIzNSwgMTYxLCAKKyAgICAyLCA2MSwgNTAsIDEyLCAxLCAyMzUsIDE2MSwgMiwgMTQ4LCAxODgsIDUwLCAxMiwgMSwgMjM1LCAxNjEsIDIsIDE0OCwgCisgICAgMTg4LCA1NiwgMTIsIDEsIDIzMSwgMTk0LCAyLCA2MSwgNTYsIDEyLCAxLCAyMzEsIDE5NCwgMjQ0LCAxMDcsIDEyLCAxLCAKKyAgICAyMjcsIDc4LCAxMiwgMSwgMjMxLCAxOTQsIDIsIDIyNywgOTMsIDEyLCAxLCAyMzEsIDE5NCwgMiwgMTQ4LCAxODgsIDUwLCAKKyAgICAxMiwgMSwgMjQzLCAxNDcsIDI0OCwgMTYzLCAxMiwgMSwgMjIyLCA5MiwgMiwgNjEsIDUwLCAxMiwgMSwgMjQzLCAxNDcsIDIsIAorICAgIDcwLCA1MCwgMTIsIDEsIDI0MywgMTQ3LCAyNDQsIDY1LCAxMiwgMSwgMjQzLCAxNDcsIDI0NCwgNjYsIDIsIDE4MSwgNTAsIAorICAgIDEyLCAxLCAyMjIsIDc4LCAyMzQsIDczLCAyNDQsIDY1LCAxMiwgMSwgMjE4LCAyMzQsIDIsIDIyNywgOTMsIDEyLCAxLCAKKyAgICAyMzYsIDk4LCAyMzAsIDE2NywgMTIsIDEsIDIzMCwgMTY3LCAxMiwgMSwgNjgsIDEyLCAxLCAyMTcsIDIwMCwgMTIsIDEsIAorICAgIDIzNiwgOTgsIDIxNywgMjAwLCAxMiwgMSwgMjE4LCAyMzQsIDIsIDEyNCwgMTg4LCA1MCwgMTIsIDEsIDIxOSwgMTY1LCAxMiwgCisgICAgMSwgMjQ1LCAyNDEsIDIxOCwgMjEsIDEyLCAxLCA3MCwgMiwgMjIyLCAxMzUsIDEyLCAxLCA3MCwgMiwgMywgMjE2LCAyMTYsIAorICAgIDEyLCAxLCAyMTgsIDIzNCwgMiwgNjEsIDUwLCAxMiwgMSwgNzMsIDEyLCAxLCA3MCwgMiwgMTQ4LCAxODgsIDU2LCAxMiwgMSwgCisgICAgNzAsIDI1MiwgMTk0LCAxMiwgMSwgNzAsIDI1MiwgMTk1LCAyLCAxODEsIDUwLCAxMiwgMjQ1LCA5MCwgMjIzLCAxMzYsIDEyLCAKKyAgICAxLCAyNTQsIDIzNCwgMTIsIDMsIDExNiwgMjQsIDIyNiwgMTcxLCAyLCAyMzUsIDE2MSwgMiwgOTksIDIzNCwgOTIsIDEyLCAKKyAgICAzLCAxMTYsIDI0LCAyMjgsIDE0OSwgMiwgMjM1LCAxNjEsIDIsIDk5LCAyMzQsIDkyLCAxMiwgMywgMTE2LCA2MiwgNjYsIAorICAgIDE3LCAxMiwgMywgMTE2LCAyMzUsIDE2MSwgMjU0LCAxNjgsIDEyLCAzLCAxMTYsIDIzNywgMTEyLCAxMiwgMywgMTE2LCAKKyAgICAxNDgsIDI0OCwgMTQzLCAxMiwgMywgMTE2LCAyMjYsIDgyLCAxMiwgMjQ2LCAxOTAsIDExNywgMjUzLCAyMTEsIDEyLCAyMjMsIAorICAgIDE1NCwgMTE3LCAyMjcsIDIwLCAyNDYsIDIxOCwgMjQzLCA5MSwgMTIsIDMsIDExNiwgMjI3LCA1NSwgMjE3LCA4NCwgMTIsIAorICAgIDMsIDExNiwgMjIwLCA1OSwgMjI3LCAyMDcsIDIxNywgODQsIDEyLCAzLCAxMTYsIDI0OCwgMTQ0LCAyNDMsIDE2MCwgMTE3LCAKKyAgICAyMzYsIDE0NiwgMTIsIDMsIDExNiwgNjIsIDQ3LCAxNywgMTIsIDMsIDEwOSwgMjI2LCA4MiwgMTIsIDMsIDExNiwgMjM0LCAKKyAgICAxMTAsIDEyLCAzLCAyMTgsIDIzMywgMTIsIDMsIDIxOCwgMjEsIDEyLCAzLCAxMTYsIDIxOCwgMjEsIDEyLCAzLCAxMTYsIAorICAgIDIzMSwgMTkzLCAxMiwgMjI5LCA1NywgMTE3LCAyMjYsIDE1OSwgMTIsIDI0NiwgMTk5LCAyNTEsIDg1LCAxMDksIDIyMywgCisgICAgMTM2LCAxMiwgMjQ2LCAxOTksIDI1MSwgODUsIDExNiwgMjIzLCAxMzYsIDEyLCAyMjcsIDU1LCAxMTYsIDIyMywgMTM3LCAyLCAKKyAgICAyNDUsIDE4NiwgMjUxLCA4NCwgMTIsIDMsIDEwOSwgMjM0LCAxNCwgMTIsIDEsIDI0OSwgMTg0LCAyLCAyMzcsIDE3MCwgCisgICAgMjE2LCAyMTYsIDEyLCAxLCAyMjcsIDE5NywgMiwgMjM3LCAxNzAsIDIxNiwgMjE2LCAyNDYsIDg3LCAyNTQsIDYzLCAyMCwgCisgICAgMjE3LCA4NCwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIDEwNywgMjQ2LCA4NywgMjU0LCA2MywgMjAsIDEwMywgMjQ2LCA4NywgCisgICAgMjU0LCA2MywgMjAsIDE2MCwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIDE1NCwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIDE3NCwgCisgICAgMjQ2LCA4NywgMjU0LCA2MywgMjAsIDE4MiwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIDE5MSwgMjQ2LCA4NywgMjU0LCA2MywgCisgICAgMjAsIDE4NSwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIDE5MCwgMTIsIDEsIDIyNCwgMjQzLCAyLCA2MSwgNTYsIDEyLCAxLCAKKyAgICAyNDksIDIwMywgMiwgNjEsIDU2LCAxMiwgMSwgMjQ0LCAxMjMsIDIsIDYxLCA1NiwgMTIsIDUsIDIyNCwgMTEyLCAyNTQsIAorICAgIDEzNCwgMTIsIDUsIDIyNCwgMTEyLCAyMjksIDEzLCAyMzMsIDI1MSwgMTIsIDEsIDI0MywgMTQ3LCAyLCAyMzcsIDE3MCwgCisgICAgMjE2LCAyMTYsIDE2NiwgMjQ2LCAxOTAsIDExNywgMjI5LCAyNDAsIDE2NiwgMjIzLCA1NSwgMjQ1LCA5MCwgMjIzLCAxMzYsIAorICAgIDE2NiwgMjIzLCA5NiwgMjQ1LCA5MCwgMjIzLCAxMzYsIDE2NiwgMjIzLCA1NSwgMjUwLCAxNzUsIDE2NiwgMjIzLCA5NiwgCisgICAgMjUwLCAxNzUsIDE2NiwgMTg2LCAyNTAsIDE3NSwgMTY2LCAyNTAsIDE3NiwgMjI0LCA2NCwgMjM1LCAxMTUsIDE2NiwgMjUwLCAKKyAgICAxNzYsIDIyNCwgNjQsIDIyNywgMTA5LCAxNjYsIDIyMywgNTUsIDI1MCwgMTc2LCAyMjQsIDY0LCAyMzUsIDExNSwgMTY2LCAKKyAgICAyMjMsIDk2LCAyNTAsIDE3NiwgMjI0LCA2NCwgMjI3LCAxMDksIDE2NiwgMjUwLCAxMzQsIDE2NiwgMjQzLCAxNzksIDIzMCwgCisgICAgMTc5LCAxNjYsIDI0MywgMTc5LCAyMzMsIDIzNiwgMTY2LCAyNDMsIDE3OSwgMjUzLCAyNTMsIDE2NiwgMjU1LCA3LCA3OCwgCisgICAgMTY2LCAxLCAyNTQsIDE3MSwgMTY2LCAxLCAyMjMsIDU5LCAyNTQsIDE3MSwgMTY2LCAxLCAyNTIsIDEwMSwgMTY2LCAxLCAKKyAgICAyNDQsIDIzNSwgMTY2LCAxLCAyNDQsIDIzNiwgMjQ0LCAyMTYsIDE2NiwgMSwgMjQ5LCAxODAsIDE2NiwgMSwgMjQ4LCAxNDQsIAorICAgIDI0OSwgMTgxLCAyMjcsIDg5LCAxNjYsIDEsIDI0MywgMTYyLCAxNjYsIDEsIDIxOCwgMjMzLCAxNjYsIDEsIDIxNywgMTA2LCAKKyAgICAxNjYsIDEsIDI0MywgMTI2LCAxNjYsIDEsIDIyMiwgNDYsIDE2NiwgMSwgMjIyLCA0NywgMjQ0LCAyMTYsIDE2NiwgMSwgCisgICAgMjE3LCAxODgsIDE2NiwgMSwgMjE3LCAxODksIDI0MywgMTYyLCAxNjYsIDEsIDIzNiwgMjI0LCAxNjYsIDEsIDIzNSwgMTU5LCAKKyAgICAxNjYsIDEsIDIzMywgMTYxLCAxNjYsIDEsIDIzMSwgMTAzLCAxNjYsIDEsIDIyNSwgNjAsIDE2NiwgMSwgMzksIDIyNSwgNjAsIAorICAgIDE2NiwgMSwgNzMsIDE2NiwgMSwgMjI5LCAxOTgsIDE2NiwgMSwgMjEwLCAyMjksIDE5OCwgMTY2LCAxLCAyMjYsIDE2OCwgCisgICAgMTY2LCAxLCAyMjgsIDE0MiwgMTY2LCAxLCAyMjcsIDg5LCAxNjYsIDEsIDIyNCwgMjA5LCAxNjYsIDEsIDIyMiwgMTAwLCAKKyAgICAxNjYsIDEsIDIyOSwgMTU5LCAyNTIsIDkwLCAxNjYsIDEsIDIyOSwgMTU5LCAyNDQsIDEyMCwgMTY2LCAxLCAyMjksIDE1OSwgCisgICAgMjQ5LCAzMiwgMTY2LCAyMjgsIDIwMywgNTAsIDE2NiwgMjI4LCAyMDMsIDU2LCAxNjYsIDIyOCwgMjAzLCAyNDcsIDE0MiwgCisgICAgMTY2LCAyMTcsIDE1LCA1MCwgMTY2LCAyMTcsIDE1LCA1NiwgMTY2LCAyMTcsIDE1LCAyNDcsIDE0MiwgMTY2LCAyMjcsIAorICAgIDIxOSwgNTAsIDE2NiwgMjI3LCAyMTksIDU2LCAxNjYsIDI0NywgMTQzLCAyMTcsIDIyLCAyNDIsIDI0MSwgMTY2LCAyNDcsIAorICAgIDE0MywgMjE3LCAyMiwgMjU0LCAxMTcsIDE2NiwgMjQzLCAxNjUsIDUwLCAxNjYsIDI0MywgMTY1LCA1NiwgMTY2LCAyNDMsIAorICAgIDE2NCwgMjQ3LCAxNDIsIDE2NiwgMjQ2LCAxMzYsIDUwLCAxNjYsIDI0NiwgMTM2LCA1NiwgMTY2LCAyMjYsIDI1MCwgMTY2LCAKKyAgICAyNDUsIDIxNSwgMjQ4LCAxNDUsIDE2NiwgMjI4LCA2MywgMTY2LCAyMjcsIDE3LCAxNjYsIDEyNCwgNjksIDE4OCwgNTAsIAorICAgIDE2NiwgMTI0LCA2OSwgMTg4LCA1NiwgMTY2LCAxNDgsIDE4OCwgNTAsIDE2NiwgMTQ4LCAxODgsIDU2LCAxNjYsIDIzMCwgCisgICAgMTc3LCAyMzUsIDQ0LCA1MCwgMTY2LCAyMzAsIDE3NywgMjM1LCA0NCwgNTYsIDE2NiwgMjMzLCA1OCwgMTY2LCAyNTIsIAorICAgIDE5MywgMTY2LCAxLCAyMjQsIDE5LCAyMTcsIDc4LCAxNjYsIDEsIDIyNCwgMTksIDIzNiwgMTM5LCAxNjYsIDEsIDIyNCwgCisgICAgMTksIDI0NSwgMjMxLCAxMiwgMSwgMjUyLCAxMjksIDIsIDE0OCwgMTg4LCAyNDIsIDE5MSwgNTYsIDEyLCAxLCAyNTIsIAorICAgIDEyOSwgMiwgNjEsIDI1MiwgMTE4LCAyNSwgMTQ4LCAxODgsIDUwLCAxMiwgMSwgMjUyLCAxMjksIDIsIDE0OCwgMTg4LCAKKyAgICAyMjksIDI4LCAyMjAsIDUzLCA1NiwgMTIsIDEsIDI1MiwgMTI5LCAyLCAxNDgsIDE4OCwgMjI5LCAyOCwgMjIwLCA1MywgCisgICAgMjUyLCAxMTgsIDI1LCAxMjQsIDE4OCwgNTAsIDEyLCAxLCAyNTIsIDEyOSwgMiwgMTI0LCAxODgsIDI1MiwgMTE4LCAyNSwgCisgICAgNjEsIDUwLCAxMiwgMSwgMjUyLCAxMjksIDIsIDIzNywgMTcwLCAzLCAyMjAsIDExLCA1NiwgMTIsIDEsIDI1MiwgMTI5LCAyLCAKKyAgICAzLCAyMTYsIDIxNiwgMTIsIDEsIDExMSwgMiwgMTI0LCAxODgsIDUwLCAxMiwgMSwgMTExLCAyLCAxNDgsIDE4OCwgMjI5LCAKKyAgICAyOCwgMjIwLCA1MywgNTYsIDEyLCAxLCAyNDksIDE4NCwgMiwgMTI0LCAxODgsIDIxOSwgMTAyLCAyNTIsIDExOCwgMjUsIDMsIAorICAgIDIyMiwgMTM3LCAxMiwgMSwgMjQ5LCAxODQsIDIsIDIzNywgMTcwLCAzLCAyMjAsIDExLCA1NiwgMTIsIDEsIDIyNywgMTk3LCAKKyAgICAyLCA5MiwgMTIsIDEsIDIyNiwgODMsIDIsIDI0NSwgMTE2LCAxODgsIDUwLCAxMiwgMSwgMjU0LCAxOTIsIDIsIDEyNCwgCisgICAgMTg4LCA1MCwgMTIsIDEsIDI1NCwgMTkyLCAyLCAxNDgsIDE4OCwgMjI5LCAyOCwgMjQ3LCAxMzAsIDUwLCAxMiwgMSwgMjU0LCAKKyAgICAxOTIsIDIsIDEyNCwgMTg4LCAyMTksIDEwMiwgNTAsIDEyLCAxLCAyNDUsIDIyMiwgMiwgMTI0LCAxODgsIDU2LCAxMiwgMSwgCisgICAgMjQ1LCAyMjIsIDIsIDE0OCwgMTg4LCAyMjksIDI4LCAyMjAsIDUzLCA1NiwgMTIsIDEsIDIzNiwgMTc3LCAyLCA2MSwgNTAsIAorICAgIDEyLCAxLCAyMzYsIDE3NywgMiwgMTQ4LCAxODgsIDUwLCAxMiwgMSwgMjM2LCAxNzcsIDIsIDE0OCwgMTg4LCAyMjksIDI4LCAKKyAgICAyMjAsIDUzLCA1NiwgMTIsIDEsIDYyLCAyLCA2MSwgNTAsIDEyLCAxLCA2MiwgMiwgNjEsIDU2LCAxMiwgMSwgMjMxLCAxOTQsIAorICAgIDIsIDEyNCwgMTg4LCA1NiwgMTIsIDEsIDIzMSwgMTk0LCAyLCAzLCAyMjIsIDEzNywgMTIsIDEsIDIzMSwgMTk0LCAyLCAzLCAKKyAgICAyMTYsIDIxNiwgMTIsIDEsIDIzNSwgMTYxLCAyLCAxMzUsIDEyLCAxLCAyMjcsIDE5NywgMiwgMTI0LCAxODgsIDIxOSwgCisgICAgMTAyLCA1MCwgMTIsIDEsIDIyNywgMTk3LCAyLCAxODEsIDUwLCAxMiwgMSwgMjI2LCA4MywgMiwgMTI0LCAxODgsIDIxOSwgCisgICAgMTAyLCA1MCwgMTIsIDEsIDExMSwgMiwgMywgMTIsIDEsIDIyMiwgMTM4LCA1NiwgMTIsIDEsIDExMSwgMiwgMywgMTIsIDEsIAorICAgIDIyMiwgMTM4LCAyNSwgMTI0LCAyNDgsIDE0MywgMTIsIDEsIDIyNiwgODMsIDIsIDMsIDEyLCAxLCAyMjIsIDEzOCwgMjUsIAorICAgIDEyNCwgMjQ4LCAxNDMsIDEyLCAxLCAyMjcsIDE5NywgMiwgMywgMTIsIDEsIDIyMiwgMTM4LCAyNSwgMTI0LCAyNDgsIDE0MywgCisgICAgMTIsIDEsIDExMSwgMiwgMywgMTIsIDEsIDIyMiwgMTM4LCA1MCwgMTIsIDEsIDk5LCAyLCAyNDYsIDg3LCAyNTQsIDYzLCAKKyAgICAyMCwgMTI0LCA1MCwgMTIsIDEsIDk5LCAyLCAyNDYsIDg3LCAyNTQsIDYzLCAyMCwgMTQ4LCA1MCwgMTIsIDEsIDI0NSwgCisgICAgMjQxLCA3MCwgMiwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIDEyNCwgNTAsIDEyLCAxLCAyNDUsIDI0MSwgNzAsIDIsIDI0NiwgCisgICAgODcsIDI1NCwgNjMsIDIwLCAxNDgsIDUwLCAxMiwgMSwgMjQ1LCAyNDEsIDcwLCAyLCAyNDYsIDg3LCAyNTQsIDYzLCAyMCwgCisgICAgMjQ1LCAxMTYsIDU2LCAxMiwgMSwgMjE4LCAyMzQsIDIsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAxMjQsIDUwLCAxMiwgMSwgCisgICAgMjE4LCAyMzQsIDIsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAxNDgsIDUwLCAxMiwgMSwgNzAsIDI1MiwgMTk1LCAyLCAyNDYsIAorICAgIDg3LCAyNTQsIDYzLCAyMCwgMTI0LCA1MCwgMTIsIDEsIDcwLCAyNTIsIDE5NSwgMiwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIAorICAgIDE0OCwgNTAsIDEyLCAxLCAxMTEsIDIsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAyNDUsIDExNiwgNTYsIDEyLCAxLCAyMjYsIAorICAgIDgzLCAyLCAyNDYsIDg3LCAyNTQsIDYzLCAyMCwgMjQ1LCAxMTYsIDUwLCAxMiwgMSwgMjI2LCA4MywgMiwgMjM3LCAxNzAsIAorICAgIDIxNiwgMjE2LCAxMiwgMSwgMjM2LCAyNDcsIDIsIDEyNCwgMTg4LCA1MCwgMjIyLCAzMiwgMSwgMjQzLCAyMTEsIDIyMiwgCisgICAgMzIsIDEsIDIyNCwgMjUxLCAyMjIsIDMyLCAxLCAyMzEsIDE5MiwgMjIyLCAzMiwgMSwgMjI4LCAwLCAyMjIsIDMyLCAxLCAKKyAgICAyNTIsIDIzNiwgMjIyLCAzMiwgMSwgMjM1LCA3NiwgMjIyLCAzMiwgMSwgMjM3LCAzLCAyMjIsIDMyLCAxLCAyNTQsIDE2MCwgCisgICAgMjIyLCAzMiwgMSwgMjE5LCAxODcsIDIyMiwgMzIsIDEsIDIzNCwgMTMsIDIyMiwgMzIsIDEsIDI0NiwgNiwgMjIyLCAzMiwgCisgICAgMSwgMjQ5LCAzNSwgMjIyLCAzMiwgMSwgMjIyLCAzNCwgMjIyLCAzMiwgMSwgMjM1LCAxODUsIDIyMiwgMzIsIDEsIDI0NCwgCisgICAgMjUyLCAyMjIsIDMyLCAxLCAyNDQsIDcxLCAyMjIsIDMyLCAxLCAyMjYsIDgxLCAyMjIsIDMyLCAxLCAyNDksIDEzOSwgMjIyLCAKKyAgICAzMiwgMSwgMjE3LCA5OCwgMjIyLCAzMiwgMSwgMjIyLCAxMDEsIDIyMiwgMzIsIDEsIDIxOCwgNzYsIDIyMiwgMzIsIDEsIAorICAgIDIyOSwgMjA5LCAyMjIsIDMyLCAxLCAyMzcsIDExNiwgMjIyLCAzMiwgMSwgMjUxLCA0OSwgMjIyLCAzMiwgMSwgMjIxLCAyOCwgCisgICAgMjIyLCAzMiwgMSwgMjQzLCAxMjAsIDIyMiwgMzIsIDEsIDIzNiwgMTQ4LCAyMjIsIDMyLCAxLCAyMjIsIDMzLCAyMjIsIDMyLCAKKyAgICAxLCAyMTcsIDExMywgMjIyLCAzMiwgMSwgMjI0LCAyNDEsIDIyMiwgMzIsIDEsIDIyNiwgMTc0LCAyMjIsIDMyLCAxLCAyNDksIAorICAgIDIwNSwgMjIyLCAzMiwgMSwgMTAxLCAyMjIsIDMyLCAxLCAyMTcsIDIxLCAyMjIsIDMyLCAxLCAyNTQsIDE4OSwgMjIyLCAzMiwgCisgICAgMSwgMjQ0LCAxMjEsIDIyMiwgMzIsIDEsIDIyOCwgMTUyLCAyMjIsIDMyLCAxLCAyMTksIDUsIDIyMiwgMzIsIDI1NSwgOCwgCisgICAgMjIyLCAzMiwgMjU1LCAyMywgMjIyLCAzMiwgMjQyLCA2OCwgMjIyLCAzMiwgMjQ2LCAyNDksIDIyMiwgMzIsIDIyMCwgMTE4LCAKKyAgICAyMjIsIDMyLCAyMzAsIDEyNiwgMjIyLCAzMiwgMjQ3LCAxLCAyMjIsIDMyLCAyNDYsIDgyLCAyMjIsIDMyLCAyMzAsIDE3NiwgCisgICAgMjIyLCAzMiwgMjMwLCAxODQsIDIyMiwgMzIsIDIyMywgNzUsIDIyMiwgMzIsIDEsIDIzMiwgMjM1LCAyMzEsIDI0MiwgMjAsIAorICAgIDIxNywgODQsIDIzMSwgMjQyLCAyMCwgMTA3LCAyMzEsIDI0MiwgMjAsIDEwMywgMjMxLCAyNDIsIDIwLCAxNjAsIDIzMSwgCisgICAgMjQyLCAyMCwgMTU0LCAyMzEsIDI0MiwgMjAsIDE3NCwgMjMxLCAyNDIsIDIwLCAxODIsIDIzMSwgMjQyLCAyMCwgMTkxLCAKKyAgICAyMzEsIDI0MiwgMjAsIDE4NSwgMjMxLCAyNDIsIDIwLCAxOTAsIDIzMSwgMjQyLCAxLCA2MCwgMjMxLCAyNDIsIDEsIDI0NiwgCisgICAgMjUwLCAyMzEsIDI0MiwgMSwgNzIsIDIzMSwgMjQyLCAxLCA3MywgMjMxLCAyNDIsIDEsIDY4LCAyMzEsIDI0MiwgMSwgMjMwLCAKKyAgICAxMjcsIDIzMSwgMjQyLCAxLCA3NCwgMjMxLCAyNDIsIDEsIDI0OSwgMTk1LCAyMzEsIDI0MiwgMSwgMjA3LCAyMzEsIDI0MiwgCisgICAgMSwgMjUyLCAyMzcsIDIzMSwgMjQyLCAxLCAxODcsIDIzMSwgMjQyLCAxLCAyMjIsIDE1NSwgMjMxLCAyNDIsIDEsIDIzNywgCisgICAgMTIzLCAyMzEsIDI0MiwgMSwgMjUxLCA2OSwgMjMxLCAyNDIsIDEsIDI0OSwgMjA3LCAyMzEsIDI0MiwgMSwgMjAzLCAyMzEsIAorICAgIDI0MiwgMSwgMjI3LCA1MiwgMjMxLCAyNDIsIDEsIDIyNiwgMTc3LCAyMzEsIDI0MiwgMSwgMjQ0LCAyMDQsIDIzMSwgMjQyLCAKKyAgICAxLCAyNDYsIDgsIDIzMSwgMjQyLCAxLCAxNzUsIDIzMSwgMjQyLCAxLCAyMzUsIDE4OCwgMjMxLCAyNDIsIDEsIDIzMiwgCisgICAgMjM4LCAyMTgsIDE4NCwgMjMxLCAyNDIsIDEsIDE5NiwgMjMxLCAyNDIsIDEsIDIzMSwgNzcsIDIzMSwgMjQyLCAxLCAyMDgsIAorICAgIDIzMSwgMjQyLCAxLCAxNTUsIDIzMSwgMjQyLCAxLCAyMTksIDcsIDIzMSwgMjQyLCAxLCAxODQsIDIzMSwgMjQyLCAxLCAKKyAgICAyMzEsIDc4LCAyMTgsIDE4NCwgMjMxLCAyNDIsIDEsIDIzNywgNTIsIDIzNywgMTIzLCAyMzEsIDI0MiwgMSwgMjM3LCA1MiwgCisgICAgMjUxLCA2OSwgMjMxLCAyNDIsIDEsIDIzNywgNTIsIDIwMywgMjMxLCAyNDIsIDM2LCAyMjQsIDE5MiwgMTE2LCAyMjEsIAorICAgIDEzMiwgMjMxLCAyNDIsIDM2LCAyMjQsIDE5MiwgMTA5LCAyMjEsIDEzMiwgMjMxLCAyNDIsIDM2LCAyMjQsIDE5MiwgMjI3LCAKKyAgICA4OCwgMjIxLCAxMzIsIDIzMSwgMjQyLCAzNiwgMTcxLCAyNDksIDQ3LCAyMjEsIDEzMiwgMjMxLCAyNDIsIDM2LCAxNzEsIAorICAgIDExNiwgMjIxLCAxMzIsIDIzMSwgMjQyLCAzNiwgMTcxLCAxMDksIDIyMSwgMTMyLCAyMzEsIDI0MiwgMzYsIDE3MSwgMjI3LCAKKyAgICA4OCwgMjIxLCAxMzIsIDIzMSwgMjQyLCAzNiwgMjMyLCAyMDksIDc4LCAyMzEsIDI0MiwgMzYsIDUxLCA2MSwgNTAsIDIzMSwgCisgICAgMjQyLCAxMTYsIDE0NSwgMjU0LCA3OSwgMjMxLCAyNDIsIDEwOSwgMTQ1LCAyNTQsIDc5LCAyMzEsIDI0MiwgMTYsIDIzMCwgCisgICAgMTI4LCAyNDksIDU4LCAyMzEsIDI0MiwgMTYsIDI0NCwgMjAzLCAyMzEsIDI0MiwgMjUwLCAxNjgsIDIzMSwgMjQyLCAyNDYsIAorICAgIDk1LCA3OCwgMjMxLCAyNDIsIDIzNSwgMTY2LCAyMTMsIDEsIDI1NCwgMTczLCAyMTMsIDEsIDI1MiwgNjAsIDIxMywgMSwgCisgICAgMjQ0LCAyMzQsIDIxMywgMSwgMjQ5LCAxODIsIDIxMywgMSwgMjM3LCAxMzMsIDIxMywgMSwgMjUyLCAyMzYsIDIxMywgMSwgCisgICAgMjE3LCA4NywgMjEzLCAxLCAyMzcsIDE0MCwgMjEzLCAxLCAyMjEsIDE2MSwgMjEzLCAxLCAyMTcsIDE3NywgMjEzLCAxLCAKKyAgICAyMzcsIDQsIDIxMywgMSwgMjM1LCAxODMsIDIxMywgMSwgMjMzLCAxNjEsIDIxMywgMSwgMjMxLCAxMDMsIDIxMywgMSwgCisgICAgMjI0LCAxMTAsIDIxMywgMSwgMjM3LCAyMjMsIDIxMywgMSwgMjQ1LCAyMDMsIDIxMywgMSwgMjIxLCA1MywgMjEzLCAxLCAKKyAgICAyMjgsIDc5LCAyMTMsIDEsIDIyNywgODksIDIxMywgMSwgMjI1LCA5LCAyMTMsIDEsIDIyMiwgMTUxLCAyMTMsIDE2NCwgCisgICAgMjM3LCAyMjMsIDIxMywgMTY0LCAyMzcsIDIyMiwgMjEzLCAxNjQsIDIzMCwgMTcyLCAyMTMsIDE2NCwgMjQ5LCAxOTMsIAorICAgIDIxMywgNTgsIDEsIDI0NiwgMTYwLCAyMTcsIDE3NywgMjEzLCAxNjQsIDI0NiwgMTYwLCAyMTcsIDE3NywgMjEzLCAyOSwgNSwgCisgICAgMTcxLCA3MywgMjEzLCAyOSwgNSwgNzMsIDIxMywgMjksIDUsIDIzMCwgNzIsIDI1NSwgNTgsIDIxMywgMjksIDUsIDE3MSwgCisgICAgMjU1LCA1OCwgMjEzLCAyOSwgNSwgMjU1LCA1OCwgMjEzLCAyOSwgNSwgMjMwLCA3MiwgNjAsIDIxMywgMjksIDUsIDE3MSwgCisgICAgNjAsIDIxMywgMjksIDUsIDYwLCAyMTMsIDU4LCAxLCAyMjQsIDE5MiwgNjAsIDIxMywgMjksIDUsIDIyNCwgMTkyLCA2MCwgCisgICAgMjEzLCAyOSwgNSwgMTcxLCA2OCwgMjEzLCAyOSwgNSwgNjgsIDIxMywgNTgsIDEsIDcyLCAyMTMsIDI5LCA1LCAxNzEsIDcyLCAKKyAgICAyMTMsIDI5LCA1LCA3MiwgMjEzLCAyOSwgNSwgNzQsIDIxMywgMjksIDUsIDIyMywgNzUsIDIxMywgMTY0LCAyMzIsIDEyOCwgCisgICAgMjEzLCAyMjgsIDE5NywgMjMyLCAxMjgsIDIxMywgMjI4LCAxOTcsIDI1NCwgMjExLCAyMTMsIDIyOCwgMTk3LCAyNTQsIAorICAgIDEyMiwgMjEzLCAyMjgsIDE5NywgMjUyLCAxODEsIDIxMywgMjI4LCAxOTcsIDI1MywgMjQwLCAyMTMsIDIyOCwgMTk3LCAKKyAgICAyMjQsIDIwMSwgMjEzLCAyNTUsIDcsIDc4LCAyMTMsIDIyOCwgMTk3LCAyMzQsIDQsIDIyOCwgMTEzLCAyMTMsIDIyOCwgCisgICAgMTk3LCAyMTcsIDI5LCAyMTMsIDIyOCwgMTk3LCAyMjgsIDExMywgMjEzLCAyMjgsIDE5NywgMjE3LCAxMTIsIDIxMywgMjI4LCAKKyAgICAxOTcsIDIyMCwgMjMzLCAyMTMsIDIyOCwgMTk3LCAyNTQsIDM2LCAyMTMsIDIyOCwgMTk3LCAyMjQsIDIyLCAyMzQsIDU1LCAKKyAgICAyMTMsIDIyOCwgMTk3LCAyNTQsIDExMywgODAsIDUsIDIzNywgMTcwLCAyNTEsIDE0NiwgODAsIDUsIDI1MSwgMTQ2LCA4MCwgCisgICAgNSwgMjU0LCA5NSwgODAsIDUsIDIxOSwgNzcsIDgwLCAxLCAyMjQsIDE5MiwgNjAsIDgwLCAxLCA2MCwgODAsIDEsIDI1NSwgCisgICAgNTgsIDgwLCAxLCA3MiwgODAsIDEsIDIzNywgMjU1LCA4MCwgMSwgNjgsIDgwLCAxLCAyMjAsIDIzLCA4MCwgMSwgMTY3LCAKKyAgICAxNTIsIDgwLCAxLCAxNjcsIDE1MywgODAsIDEsIDI1MSwgMTQ5LCA3MywgODAsIDEsIDIyNCwgMTkyLCA3MywgODAsIDEsIAorICAgIDczLCA4MCwgMSwgMjU0LCAxOTYsIDgwLCAxLCAyNTEsIDE0OSwgNzQsIDgwLCAxLCAyMjQsIDE5MiwgNzQsIDgwLCAxLCA3NCwgCisgICAgODAsIDEsIDI1MywgMjMyLCA4MCwgMSwgMTc1LCA4MCwgMSwgMjM2LCAxNDksIDgwLCAxLCAyNDUsIDAsIDgwLCAxLCAyNDQsIAorICAgIDEyNSwgODAsIDEsIDIzMiwgMTE1LCA4MCwgMSwgMjUxLCAxNjksIDgwLCAxLCAyNTEsIDY5LCA4MCwgMSwgMjM3LCAxMjMsIAorICAgIDgwLCAxLCAyMzcsIDEwMywgODAsIDEsIDIzMSwgNzcsIDgwLCAxLCAyMjEsIDI5LCA4MCwgMSwgMjIxLCAxOSwgODAsIDEsIAorICAgIDI0OSwgMTMyLCA4MCwgMSwgMjQ5LCAxMTYsIDgwLCAxLCAyMzEsIDIxNywgODAsIDEsIDIyMiwgMTU1LCA4MCwgMSwgMjIyLCAKKyAgICAzNSwgODAsIDEsIDI0OSwgMjA3LCA4MCwgMSwgMjQ5LCAzNiwgODAsIDEsIDIwOCwgODAsIDEsIDIzMSwgMjA4LCA4MCwgMSwgCisgICAgMTg3LCA4MCwgMSwgMjI5LCAxNDEsIDgwLCAxLCAyNTIsIDIzNywgODAsIDEsIDI1MiwgOTQsIDgwLCAxLCAxOTYsIDgwLCAxLCAKKyAgICAxODQsIDgwLCAxLCAyMDMsIDgwLCAxLCAyMjcsIDUyLCA4MCwgMSwgMjM1LCAxODgsIDgwLCAxLCAyMzUsIDE3LCA4MCwgMSwgCisgICAgMjM1LCAxNiwgODAsIDEsIDIxOSwgMTg5LCA4MCwgMSwgMjI1LCAyNSwgODAsIDEsIDIyMywgMjE4LCA4MCwgMSwgMjI2LCAKKyAgICAxNzcsIDgwLCAxLCAxNTUsIDgwLCA1LCAyMzEsIDExMiwgODAsIDUsIDI1MywgMjE5LCA4MCwgMjksIDUsIDI1NSwgNTgsIAorICAgIDgwLCAyOSwgNSwgNzIsIDgwLCAyOSwgNSwgMjM3LCAyNTUsIDgwLCAyOSwgNSwgNjgsIDgwLCAyOSwgNSwgMjIwLCAyMywgCisgICAgODAsIDI5LCA1LCAxNjcsIDE1MiwgODAsIDI5LCA1LCAxNjcsIDIyNywgNTMsIDgwLCAyOSwgNSwgMjUxLCAxNDksIDczLCAKKyAgICA4MCwgMjksIDUsIDIyNCwgMTkyLCA3MywgODAsIDI5LCA1LCA3MywgODAsIDI5LCA1LCAyNTQsIDE5NiwgODAsIDI5LCA1LCAKKyAgICAyNTEsIDE0OSwgNzQsIDgwLCAyOSwgNSwgMjI0LCAxOTIsIDc0LCA4MCwgMjksIDUsIDc0LCA4MCwgMjksIDUsIDI1MywgCisgICAgMjMyLCA4MCwgNSwgMjE5LCA4MiwgODAsIDI5LCA1LCAyMjgsIDIzMiwgNzMsIDgwLCAyMzAsIDE0NiwgODAsIDIyMywgMTI1LCAKKyAgICA1LCAyMjAsIDExMiwgODAsIDIyMywgMTI1LCA1LCAyNTQsIDk3LCA4MCwgMjQ0LCAzNywgMjU1LCAwLCA4MCwgMjU0LCAyNDgsIAorICAgIDI1NSwgMCwgODAsIDI5LCA1LCAyNTEsIDE0OSwgMTcxLCA3MywgODAsIDEsIDIyOCwgMTU1LCA4MCwgMSwgMjM2LCAxMzMsIAorICAgIDgwLCAxLCAyNDQsIDExNCwgODAsIDEsIDIxNywgMTE0LCA4MCwgMSwgMjQ5LCAxMjEsIDgwLCAxLCAyMjcsIDE1MSwgODAsIAorICAgIDEsIDI0NiwgOCwgODAsIDEsIDIxNywgMTY1LCA4MCwgMSwgMTY3LCAyMjcsIDUzLCA4MCwgMSwgMTY3LCAyMzUsIDE4LCA4MCwgCisgICAgMjksIDUsIDE2NywgMTUzLCA4MCwgMjksIDUsIDE2NywgMjM1LCAxOCwgODAsIDI0OSwgMTY3LCA4MCwgNTEsIDI0OSwgMTY3LCAKKyAgICA4MCwgMjAsIDIxNywgODQsIDgwLCAyMCwgMTA3LCA4MCwgMjAsIDEwMywgODAsIDIwLCAxNjAsIDgwLCAyMCwgMTU0LCA4MCwgCisgICAgMjAsIDE3NCwgODAsIDIwLCAxODIsIDgwLCAyMCwgMTkxLCA4MCwgMjAsIDE4NSwgODAsIDIwLCAxOTAsIDgwLCAyNTUsIDcsIAorICAgIDU1LCA4MCwgNSwgMTE2LCAyMjMsIDI1MywgMjQ4LCAxNDUsIDgwLCAxLCAyNTEsIDE0OSwgNjAsIDgwLCAxLCAyMTcsIDgwLCAKKyAgICA4MCwgMSwgMTA2LCAxODQsIDgwLCAxLCAyNDQsIDE2MCwgODAsIDEsIDIzNywgODcsIDgwLCAxLCAyNDQsIDczLCAyMjMsIAorICAgIDEzNiwgODAsIDEsIDI0OSwgMTIyLCA4MCwgMSwgMjUyLCAxNzgsIDEzMCwgNSwgMjUxLCAxNDYsIDEzMCwgNSwgMjU0LCA5NSwgCisgICAgMTMwLCA1LCAyMTksIDc3LCAxMzAsIDEsIDYwLCAxMzAsIDEsIDI1NSwgNTgsIDEzMCwgMSwgNzIsIDEzMCwgMSwgMjM3LCAKKyAgICAyNTUsIDEzMCwgMSwgNjgsIDEzMCwgMSwgMjIwLCAyMywgMTMwLCAxLCAxNjcsIDE1MiwgMTMwLCAxLCAxNjcsIDE1MywgCisgICAgMTMwLCAxLCA3MywgMTMwLCAxLCAyNTQsIDE5NiwgMTMwLCAxLCA3NCwgMTMwLCAxLCAyNTMsIDIzMiwgMTMwLCAxLCAxNzUsIAorICAgIDEzMCwgMSwgMjM2LCAxNDksIDEzMCwgMSwgMjQ1LCAwLCAxMzAsIDEsIDI0NCwgMTI1LCAxMzAsIDEsIDIzMiwgMTE1LCAKKyAgICAxMzAsIDEsIDI1MSwgMTY5LCAxMzAsIDEsIDI1MSwgNjksIDEzMCwgMSwgMjM3LCAxMjMsIDEzMCwgMSwgMjM3LCAxMDMsIAorICAgIDEzMCwgMSwgMjMxLCA3NywgMTMwLCAxLCAyMjEsIDI5LCAxMzAsIDEsIDIyMSwgMTksIDEzMCwgMSwgMjQ5LCAxMzIsIDEzMCwgCisgICAgMSwgMjQ5LCAxMTYsIDEzMCwgMSwgMjMxLCAyMTcsIDEzMCwgMSwgMjIyLCAxNTUsIDEzMCwgMSwgMjIyLCAzNSwgMTMwLCAxLCAKKyAgICAyNDksIDIwNywgMTMwLCAxLCAyNDksIDM2LCAxMzAsIDEsIDIwOCwgMTMwLCAxLCAxODcsIDEzMCwgMSwgMjI5LCAxNDEsIAorICAgIDEzMCwgMSwgMjUyLCAyMzcsIDEzMCwgMSwgMjUyLCA5NCwgMTMwLCAxLCAxOTYsIDEzMCwgMSwgMTg0LCAxMzAsIDEsIDIwMywgCisgICAgMTMwLCAxLCAyMzUsIDE4OCwgMTMwLCAxLCAyMjUsIDI1LCAxMzAsIDEsIDIyMywgMjE4LCAxMzAsIDEsIDIyNiwgMTc3LCAKKyAgICAxMzAsIDEsIDE1NSwgMTMwLCA1LCAyMzEsIDExMiwgMTMwLCA1LCAyNTMsIDIxOSwgMTMwLCAyOSwgNSwgMjU1LCA1OCwgCisgICAgMTMwLCAyOSwgNSwgNzIsIDEzMCwgMjksIDUsIDIzNywgMjU1LCAxMzAsIDI5LCA1LCA2OCwgMTMwLCAyOSwgNSwgMjIwLCAKKyAgICAyMywgMTMwLCAyOSwgNSwgMTY3LCAxNTIsIDEzMCwgMjksIDUsIDE2NywgMjI3LCA1MywgMTMwLCAyOSwgNSwgNzMsIDEzMCwgCisgICAgMjksIDUsIDI1NCwgMTk2LCAxMzAsIDI5LCA1LCA3NCwgMTMwLCAyOSwgNSwgMjUzLCAyMzIsIDEzMCwgNSwgMjE5LCA4MiwgCisgICAgMTMwLCAxLCAyMzYsIDE0MSwgMjIyLCAxNTUsIDEzMCwgMjUzLCAyMzMsIDIzNSwgOTQsIDc4LCAxMzAsIDEsIDIyNywgNTIsIAorICAgIDEzMCwgMSwgMjI3LCAxNTEsIDEzMCwgMSwgMjE3LCAxNjUsIDEzMCwgMSwgMTY3LCAyMjcsIDUzLCAxMzAsIDEsIDE2NywgCisgICAgMjM1LCAxOCwgMTMwLCAyOSwgNSwgMTY3LCAxNTMsIDEzMCwgMjksIDUsIDE2NywgMjM1LCAxOCwgMTMwLCAyMCwgMjE3LCAKKyAgICA4NCwgMTMwLCAyMCwgMTA3LCAxMzAsIDIwLCAxMDMsIDEzMCwgMjAsIDE2MCwgMTMwLCAyMCwgMTU0LCAxMzAsIDIwLCAxNzQsIAorICAgIDEzMCwgMjAsIDE4MiwgMTMwLCAyMCwgMTkxLCAxMzAsIDIwLCAxODUsIDEzMCwgMjAsIDE5MCwgMTMwLCAxLCAyMjgsIDMsIAorICAgIDIsIDIzMywgMTkzLCAyNDksIDEwLCAxMzAsIDEsIDIyOCwgMywgMiwgMjM0LCAyMzcsIDI0OSwgMTAsIDEzMCwgMjI3LCA0LCAKKyAgICA3OCwgMTMwLCAyMjcsIDQsIDU1LCAxMzAsIDI1MCwgNzgsIDIzMSwgMTA2LCAxMDcsIDEzMCwgMjUwLCA3OCwgMjMxLCAxMDYsIAorICAgIDEwMywgMTMwLCAyNTAsIDc4LCAyMzEsIDEwNiwgMTYwLCAxMzAsIDI1MCwgNzgsIDIzMSwgMTA2LCAxNTQsIDEzMCwgMjUwLCAKKyAgICA3OCwgMjMxLCAxMDYsIDEzMSwgMjM1LCA4OCwgMjIyLCAyOCwgMjIyLCAyMywgMjQ5LCA1NiwgMTMwLCAyNTAsIDc4LCAyNDksIAorICAgIDU3LCAyMjQsIDc3LCAxMzAsIDIzNywgMTQxLCAxMzAsIDI0NCwgMjI3LCA3OCwgMTYzLCA1LCAyNTQsIDI0MywgMjUyLCA3MiwgCisgICAgMTYzLCA1LCAyNTIsIDcyLCAxNjMsIDUsIDIxOSwgNzcsIDE2MywgMSwgNjAsIDE2MywgMSwgMjU1LCA1OCwgMTYzLCAxLCAKKyAgICA3MiwgMTYzLCAxLCAyMzcsIDI1NSwgMTYzLCAxLCA2OCwgMTYzLCAxLCAyMjAsIDIzLCAxNjMsIDEsIDI0NiwgMjUwLCAxNjMsIAorICAgIDEsIDI1NCwgMTk2LCAxNjMsIDEsIDIzMCwgMTI3LCAxNjMsIDEsIDI1MywgMjMyLCAxNjMsIDEsIDE3NSwgMTYzLCAxLCAKKyAgICAyMzYsIDE0OSwgMTYzLCAxLCAyNDUsIDAsIDE2MywgMSwgMjQ0LCAxMjUsIDE2MywgMSwgMjMyLCAxMTUsIDE2MywgMSwgCisgICAgMjUxLCAxNjksIDE2MywgMSwgMjUxLCA2OSwgMTYzLCAxLCAyMzcsIDEyMywgMTYzLCAxLCAyMzcsIDEwMywgMTYzLCAxLCAKKyAgICAyMzEsIDc3LCAxNjMsIDEsIDIyMSwgMjksIDE2MywgMSwgMjIxLCAxOSwgMTYzLCAxLCAyNDksIDEzMiwgMTYzLCAxLCAyNDksIAorICAgIDExNiwgMTYzLCAxLCAyMzEsIDIxNywgMTYzLCAxLCAyMjIsIDE1NSwgMTYzLCAxLCAyMjIsIDM1LCAxNjMsIDEsIDI0OSwgCisgICAgMjA3LCAxNjMsIDEsIDI0OSwgMzYsIDE2MywgMSwgMjA4LCAxNjMsIDEsIDE4NywgMTYzLCAxLCAyMjksIDE0MSwgMTYzLCAxLCAKKyAgICAyNTIsIDIzNywgMTYzLCAxLCAyNTIsIDk0LCAxNjMsIDEsIDE5NiwgMTYzLCAxLCAxODQsIDE2MywgMSwgMjAzLCAxNjMsIDEsIAorICAgIDIzNSwgMTg4LCAxNjMsIDEsIDIzNSwgMTcsIDE2MywgMSwgMjE5LCAxODksIDE2MywgMSwgMjI1LCAyNSwgMTYzLCAxLCAKKyAgICAyMjYsIDE3NywgMTYzLCAxLCAxNTUsIDE2MywgNSwgMjMxLCAxMTIsIDE2MywgMjksIDUsIDI1NSwgNTgsIDE2MywgMjksIDUsIAorICAgIDcyLCAxNjMsIDI5LCA1LCAyMzcsIDI1NSwgMTYzLCAyOSwgNSwgNjgsIDE2MywgMjksIDUsIDIyMCwgMjMsIDE2MywgMjksIAorICAgIDUsIDI0NiwgMjUwLCAxNjMsIDI5LCA1LCAyNTQsIDE5NiwgMTYzLCAyOSwgNSwgMjMwLCAxMjcsIDE2MywgMjksIDUsIDI1MywgCisgICAgMjMyLCAxNjMsIDUsIDIxOSwgODIsIDE2MywgNSwgMjIwLCAxMTQsIDE2MywgMSwgMjM2LCAxMzMsIDE2MywgMSwgMjQ0LCAKKyAgICAxMTQsIDE2MywgMSwgMjE3LCAxMTQsIDE2MywgMSwgMjI3LCA1MiwgMTYzLCAxLCAyNDYsIDgsIDE2MywgMjAsIDIxNywgODQsIAorICAgIDE2MywgMjAsIDEwNywgMTYzLCAyMCwgMTAzLCAxNjMsIDIwLCAxNjAsIDE2MywgMjAsIDE1NCwgMTYzLCAyMCwgMTc0LCAKKyAgICAxNjMsIDIwLCAxODIsIDE2MywgMjAsIDE5MSwgMTYzLCAyMCwgMTg1LCAxNjMsIDIwLCAxOTAsIDE2MywgMjIxLCAxNjcsIAorICAgIDE2MywgMjU0LCAyNDIsIDE2MywgMjM3LCAxNTUsIDE2MywgMjIwLCA0NiwgMTYzLCAyNDYsIDIyNCwgMjMwLCAxMzIsIDE2MywgCisgICAgNSwgMjE4LCA1NCwgMTUwLCA1LCAyNTEsIDE0NiwgMTUwLCA1LCAyNTQsIDk1LCAxNTAsIDUsIDIxOSwgNzcsIDE1MCwgMSwgCisgICAgNjAsIDE1MCwgMSwgMjU1LCA1OCwgMTUwLCAxLCA3MiwgMTUwLCAxLCAyMzcsIDI1NSwgMTUwLCAxLCA2OCwgMTUwLCAxLCAKKyAgICAyMjAsIDIzLCAxNTAsIDEsIDE2NywgMTUyLCAxNTAsIDEsIDE2NywgMTUzLCAxNTAsIDI5LCAyNTEsIDE0OSwgNzMsIDE1MCwgCisgICAgMSwgNzMsIDE1MCwgMSwgMjU0LCAxOTYsIDE1MCwgMjksIDI1MSwgMTQ5LCA3NCwgMTUwLCAxLCA3NCwgMTUwLCAxLCAyNTMsIAorICAgIDIzMiwgMTUwLCAxLCAxNzUsIDE1MCwgMSwgMjM2LCAxNDksIDE1MCwgMSwgMjQ1LCAwLCAxNTAsIDEsIDI0NCwgMTI1LCAKKyAgICAxNTAsIDEsIDIzMiwgMTE1LCAxNTAsIDEsIDI1MSwgMTY5LCAxNTAsIDEsIDI1MSwgNjksIDE1MCwgMSwgMjM3LCAxMjMsIAorICAgIDE1MCwgMSwgMjM3LCAxMDMsIDE1MCwgMSwgMjMxLCA3NywgMTUwLCAxLCAyMjEsIDI5LCAxNTAsIDEsIDIyMSwgMTksIDE1MCwgCisgICAgMSwgMjQ5LCAxMzIsIDE1MCwgMSwgMjQ5LCAxMTYsIDE1MCwgMSwgMjMxLCAyMTcsIDE1MCwgMSwgMjIyLCAxNTUsIDE1MCwgCisgICAgMSwgMjIyLCAzNSwgMTUwLCAxLCAyNDksIDIwNywgMTUwLCAxLCAyNDksIDM2LCAxNTAsIDEsIDIwOCwgMTUwLCAxLCAxODcsIAorICAgIDE1MCwgMSwgMjI5LCAxNDEsIDE1MCwgMSwgMjUyLCAyMzcsIDE1MCwgMSwgMjUyLCA5NCwgMTUwLCAxLCAxOTYsIDE1MCwgMSwgCisgICAgMTg0LCAxNTAsIDEsIDIwMywgMTUwLCAxLCAyMzUsIDE4OCwgMTUwLCAxLCAyMzUsIDE3LCAxNTAsIDEsIDIxOSwgMTg5LCAKKyAgICAxNTAsIDEsIDIyNSwgMjUsIDE1MCwgMSwgMjIzLCAyMTgsIDE1MCwgMSwgMjI2LCAxNzcsIDE1MCwgMSwgMTU1LCAxNTAsIDUsIAorICAgIDIzMSwgMTEyLCAxNTAsIDUsIDI1MywgMjE5LCAxNTAsIDI5LCA1LCAyNTUsIDU4LCAxNTAsIDI5LCA1LCA3MiwgMTUwLCAyOSwgCisgICAgNSwgMjM3LCAyNTUsIDE1MCwgMjksIDUsIDY4LCAxNTAsIDI5LCA1LCAyMjAsIDIzLCAxNTAsIDI5LCA1LCAxNjcsIDE1MiwgCisgICAgMTUwLCAyOSwgNSwgMTY3LCAyMjcsIDUzLCAxNTAsIDI5LCA1LCAyNTEsIDE0OSwgNzMsIDE1MCwgMjksIDUsIDczLCAxNTAsIAorICAgIDI5LCA1LCAyNTQsIDE5NiwgMTUwLCAyOSwgNSwgMjUxLCAxNDksIDc0LCAxNTAsIDI5LCA1LCA3NCwgMTUwLCAyOSwgNSwgCisgICAgMjUzLCAyMzIsIDE1MCwgNSwgMjE5LCA4MiwgMTUwLCAyMzAsIDE0NiwgMTUwLCAxLCAxNjcsIDIyNywgNTMsIDE1MCwgMSwgCisgICAgMTY3LCAyMzUsIDE4LCAxNTAsIDI5LCA1LCAxNjcsIDE1MywgMTUwLCAyOSwgNSwgMTY3LCAyMzUsIDE4LCAxNTAsIDIwLCAKKyAgICAyMTcsIDg0LCAxNTAsIDIwLCAxMDcsIDE1MCwgMjAsIDEwMywgMTUwLCAyMCwgMTYwLCAxNTAsIDIwLCAxNTQsIDE1MCwgMjAsIAorICAgIDE3NCwgMTUwLCAyMCwgMTgyLCAxNTAsIDIwLCAxOTEsIDE1MCwgMjAsIDE4NSwgMTUwLCAyMCwgMTkwLCAxNTAsIDIyNywgNCwgCisgICAgNTUsIDE0NywgNSwgMjUxLCAxNDYsIDE0NywgNSwgMjU0LCA5NSwgMTQ3LCA1LCAyMTksIDc3LCAxNDcsIDEsIDYwLCAxNDcsIAorICAgIDEsIDI1NSwgNTgsIDE0NywgMSwgNzIsIDE0NywgMSwgMjM3LCAyNTUsIDE0NywgMSwgNjgsIDE0NywgMSwgMjIwLCAyMywgCisgICAgMTQ3LCAxLCAxNjcsIDE1MiwgMTQ3LCAxLCAxNjcsIDE1MywgMTQ3LCAxLCA3MywgMTQ3LCAxLCAyNTQsIDE5NiwgMTQ3LCAxLCAKKyAgICA3NCwgMTQ3LCAxLCAyNTMsIDIzMiwgMTQ3LCAxLCAxNzUsIDE0NywgMSwgMjM2LCAxNDksIDE0NywgMSwgMjQ1LCAwLCAxNDcsIAorICAgIDEsIDI0NCwgMTI1LCAxNDcsIDEsIDIzMiwgMTE1LCAxNDcsIDEsIDI1MSwgMTY5LCAxNDcsIDEsIDI1MSwgNjksIDE0NywgMSwgCisgICAgMjM3LCAxMjMsIDE0NywgMSwgMjM3LCAxMDMsIDE0NywgMSwgMjMxLCA3NywgMTQ3LCAxLCAyMjEsIDI5LCAxNDcsIDEsIAorICAgIDIyMSwgMTksIDE0NywgMSwgMjQ5LCAxMzIsIDE0NywgMSwgMjQ5LCAxMTYsIDE0NywgMSwgMjMxLCAyMTcsIDE0NywgMSwgCisgICAgMjIyLCAxNTUsIDE0NywgMSwgMjIyLCAzNSwgMTQ3LCAxLCAyNDksIDIwNywgMTQ3LCAxLCAyNDksIDM2LCAxNDcsIDEsIAorICAgIDIwOCwgMTQ3LCAxLCAxODcsIDE0NywgMSwgMjI5LCAxNDEsIDE0NywgMSwgMjUyLCAyMzcsIDE0NywgMSwgMjUyLCA5NCwgCisgICAgMTQ3LCAxLCAxOTYsIDE0NywgMSwgMTg0LCAxNDcsIDEsIDIwMywgMTQ3LCAxLCAyMzUsIDE4OCwgMTQ3LCAxLCAyMzUsIDE3LCAKKyAgICAxNDcsIDEsIDIxOSwgMTg5LCAxNDcsIDEsIDIyNSwgMjUsIDE0NywgMSwgMjIzLCAyMTgsIDE0NywgMSwgMjI2LCAxNzcsIAorICAgIDE0NywgMSwgMTU1LCAxNDcsIDUsIDIzMSwgMTEyLCAxNDcsIDUsIDI1MywgMjE5LCAxNDcsIDI5LCA1LCAyNTUsIDU4LCAKKyAgICAxNDcsIDI5LCA1LCA3MiwgMTQ3LCAyOSwgNSwgMjM3LCAyNTUsIDE0NywgMjksIDUsIDY4LCAxNDcsIDI5LCA1LCAyMjAsIAorICAgIDIzLCAxNDcsIDI5LCA1LCAxNjcsIDE1MiwgMTQ3LCAyOSwgNSwgMTY3LCAyMjcsIDUzLCAxNDcsIDI5LCA1LCA3MywgMTQ3LCAKKyAgICAyOSwgNSwgMjU0LCAxOTYsIDE0NywgMjksIDUsIDc0LCAxNDcsIDI5LCA1LCAyNTMsIDIzMiwgMTQ3LCA1LCAyMTksIDgyLCAKKyAgICAxNDcsIDI1NCwgMTk3LCAyMzUsIDk0LCA3OCwgMTQ3LCAyNTMsIDIzMywgMjM1LCA5NCwgNzgsIDE0NywgMSwgMjI3LCA1MiwgCisgICAgMTQ3LCAxLCAyMjcsIDE1MSwgMTQ3LCAxLCAyMTcsIDE2NSwgMTQ3LCAxLCAxNjcsIDIyNywgNTMsIDE0NywgMSwgMTY3LCAKKyAgICAyMzUsIDE4LCAxNDcsIDI5LCA1LCAxNjcsIDE1MywgMTQ3LCAyOSwgNSwgMTY3LCAyMzUsIDE4LCAxNDcsIDIwLCAyMTcsIAorICAgIDg0LCAxNDcsIDIwLCAxMDcsIDE0NywgMjAsIDEwMywgMTQ3LCAyMCwgMTYwLCAxNDcsIDIwLCAxNTQsIDE0NywgMjAsIDE3NCwgCisgICAgMTQ3LCAyMCwgMTgyLCAxNDcsIDIwLCAxOTEsIDE0NywgMjAsIDE4NSwgMTQ3LCAyMCwgMTkwLCAxNDcsIDIzNywgMTQxLCAKKyAgICAxNDcsIDEsIDIxOSwgNywgMTc2LCA1LCAyNTQsIDk1LCAxNzYsIDUsIDIxOSwgNzcsIDE3NiwgMSwgNjAsIDE3NiwgMSwgCisgICAgMjU1LCA1OCwgMTc2LCAxLCA3MiwgMTc2LCAxLCAyMzcsIDI1NSwgMTc2LCAxLCA2OCwgMTc2LCAxLCAyMjAsIDIzLCAxNzYsIAorICAgIDEsIDczLCAxNzYsIDEsIDI0NiwgMjUwLCAxNzYsIDEsIDI1NCwgMTk2LCAxNzYsIDEsIDc0LCAxNzYsIDEsIDIzMCwgMTI3LCAKKyAgICAxNzYsIDEsIDI1MywgMjMyLCAxNzYsIDEsIDE3NSwgMTc2LCAxLCAyMzIsIDExNSwgMTc2LCAxLCAyNTEsIDE2OSwgMTc2LCAKKyAgICAxLCAyMzcsIDEyMywgMTc2LCAxLCAyMzEsIDc3LCAxNzYsIDEsIDIyMSwgMjksIDE3NiwgMSwgMjMxLCAyMTcsIDE3NiwgMSwgCisgICAgMjIyLCAxNTUsIDE3NiwgMSwgMjA4LCAxNzYsIDEsIDIzMSwgMjA4LCAxNzYsIDEsIDE4NywgMTc2LCAxLCAxOTYsIDE3NiwgCisgICAgMSwgMTg0LCAxNzYsIDEsIDIwMywgMTc2LCAxLCAyMjcsIDUyLCAxNzYsIDEsIDIzNSwgMTg4LCAxNzYsIDEsIDIzNSwgMTcsIAorICAgIDE3NiwgMSwgMjM1LCAxNiwgMTc2LCAxLCAyMTksIDE4OSwgMTc2LCAxLCAyMjUsIDI1LCAxNzYsIDEsIDIyMywgMjE4LCAKKyAgICAxNzYsIDEsIDIyNiwgMTc3LCAxNzYsIDEsIDE1NSwgMTc2LCAyOSwgNSwgMjU1LCA1OCwgMTc2LCAyOSwgNSwgNzIsIDE3NiwgCisgICAgMjksIDUsIDIzNywgMjU1LCAxNzYsIDI5LCA1LCA2OCwgMTc2LCAyOSwgNSwgMjIwLCAyMywgMTc2LCAyOSwgNSwgNzMsIAorICAgIDE3NiwgMjksIDUsIDI0NiwgMjUwLCAxNzYsIDI5LCA1LCAyNTQsIDE5NiwgMTc2LCAyOSwgNSwgNzQsIDE3NiwgMjksIDUsIAorICAgIDIzMCwgMTI3LCAxNzYsIDI5LCA1LCAyNTMsIDIzMiwgMTc2LCA1LCAyMTksIDgyLCAxNzYsIDIzMCwgMTQ2LCAxNzYsIDI1MywgCisgICAgMjMzLCAyMzUsIDk0LCA3OCwgMTc2LCAyMCwgMjE3LCA4NCwgMTc2LCAyMCwgMTA3LCAxNzYsIDIwLCAxMDMsIDE3NiwgMjAsIAorICAgIDE2MCwgMTc2LCAyMCwgMTU0LCAxNzYsIDIwLCAxNzQsIDE3NiwgMjAsIDE4MiwgMTc2LCAyMCwgMTkxLCAxNzYsIDIwLCAKKyAgICAxODUsIDE3NiwgMjAsIDE5MCwgMTc2LCA1NCwgMjIyLCA2NSwgMTc2LCA1NCwgMTMxLCAyNDIsIDE2MSwgMTc2LCA1NCwgCisgICAgMTMxLCAyMjEsIDIzMSwgMTc2LCAyNDksIDEzNywgNTUsIDE3NiwgMjMzLCAxMjEsIDU1LCAxNzYsIDIxOCwgMjMsIDU1LCAKKyAgICAxNzYsIDI0OSwgODksIDU1LCAxNzYsIDI1MCwgMTA3LCA1NSwgMTc2LCAyNTQsIDE0LCA3MSwgNTUsIDE3NiwgMjI3LCA0LCAKKyAgICA1NSwgMTc2LCA1NCwgNTUsIDEyOSwgNSwgMjUxLCAxNDYsIDEyOSwgNSwgMjU0LCA5NSwgMTI5LCA1LCAyMTksIDc3LCAxMjksIAorICAgIDEsIDYwLCAxMjksIDEsIDI1NSwgNTgsIDEyOSwgMSwgNzIsIDEyOSwgMSwgMjM3LCAyNTUsIDEyOSwgMSwgNjgsIDEyOSwgMSwgCisgICAgMjIwLCAyMywgMTI5LCAxLCAxNjcsIDE1MiwgMTI5LCAxLCAxNjcsIDE1MywgMTI5LCAxLCA3MywgMTI5LCAxLCAyNDYsIAorICAgIDI1MCwgMTI5LCAxLCAyNTQsIDE5NiwgMTI5LCAxLCA3NCwgMTI5LCAxLCAyMzAsIDEyNywgMTI5LCAxLCAyNTMsIDIzMiwgCisgICAgMTI5LCAxLCAxNzUsIDEyOSwgMSwgMjM2LCAxNDksIDEyOSwgMSwgMjQ1LCAwLCAxMjksIDEsIDI0NCwgMTI1LCAxMjksIDEsIAorICAgIDIzMiwgMTE1LCAxMjksIDEsIDI1MSwgMTY5LCAxMjksIDEsIDI1MSwgNjksIDEyOSwgMSwgMjM3LCAxMjMsIDEyOSwgMSwgCisgICAgMjM3LCAxMDMsIDEyOSwgMSwgMjMxLCA3NywgMTI5LCAxLCAyMjEsIDI5LCAxMjksIDEsIDIyMSwgMTksIDEyOSwgMSwgMjQ5LCAKKyAgICAxMzIsIDEyOSwgMSwgMjQ5LCAxMTYsIDEyOSwgMSwgMjMxLCAyMTcsIDEyOSwgMSwgMjIyLCAxNTUsIDEyOSwgMSwgMjIyLCAKKyAgICAzNSwgMTI5LCAxLCAyNDksIDIwNywgMTI5LCAxLCAyNDksIDM2LCAxMjksIDEsIDIwOCwgMTI5LCAxLCAxODcsIDEyOSwgMSwgCisgICAgMjI5LCAxNDEsIDEyOSwgMSwgMjUyLCAyMzcsIDEyOSwgMSwgMjUyLCA5NCwgMTI5LCAxLCAxOTYsIDEyOSwgMSwgMTg0LCAKKyAgICAxMjksIDEsIDIwMywgMTI5LCAxLCAyMjcsIDUyLCAxMjksIDEsIDIzNSwgMTg4LCAxMjksIDEsIDIzNSwgMTcsIDEyOSwgMSwgCisgICAgMjE5LCAxODksIDEyOSwgMSwgMjI1LCAyNSwgMTI5LCAxLCAyMjMsIDIxOCwgMTI5LCAxLCAyMjYsIDE3NywgMTI5LCAxLCAKKyAgICAxNTUsIDEyOSwgNSwgMjUzLCAyMTksIDEyOSwgMjksIDUsIDI1NSwgNTgsIDEyOSwgMjksIDUsIDcyLCAxMjksIDI5LCA1LCAKKyAgICAyMzcsIDI1NSwgMTI5LCAyOSwgNSwgNjgsIDEyOSwgMjksIDUsIDIyMCwgMjMsIDEyOSwgMjksIDUsIDE2NywgMTUyLCAxMjksIAorICAgIDI5LCA1LCAxNjcsIDIyNywgNTMsIDEyOSwgMjksIDUsIDczLCAxMjksIDI5LCA1LCAyNDYsIDI1MCwgMTI5LCAyOSwgNSwgCisgICAgMjU0LCAxOTYsIDEyOSwgMjksIDUsIDc0LCAxMjksIDI5LCA1LCAyMzAsIDEyNywgMTI5LCAyOSwgNSwgMjUzLCAyMzIsIAorICAgIDEyOSwgNSwgMjE5LCA4MiwgMTI5LCAyMzUsIDk0LCA3OCwgMTI5LCAyNTQsIDE5NywgMjM1LCA5NCwgNzgsIDEyOSwgMSwgCisgICAgMjIxLCA1NSwgMTI5LCAxLCAyNDcsIDc0LCAxMjksIDEsIDE2NywgMjI3LCA1MywgMTI5LCAxLCAxNjcsIDIzNSwgMTgsIAorICAgIDEyOSwgMjksIDUsIDE2NywgMTUzLCAxMjksIDI5LCA1LCAxNjcsIDIzNSwgMTgsIDEyOSwgMjAsIDIxNywgODQsIDEyOSwgCisgICAgMjAsIDEwNywgMTI5LCAyMCwgMTAzLCAxMjksIDIwLCAxNjAsIDEyOSwgMjAsIDE1NCwgMTI5LCAyMCwgMTc0LCAxMjksIDIwLCAKKyAgICAxODIsIDEyOSwgMjAsIDE5MSwgMTI5LCAyMCwgMTg1LCAxMjksIDIwLCAxOTAsIDEyOSwgMjQ1LCAxMDgsIDIwLCAyMTcsIAorICAgIDg1LCAzNSwgMjMwLCAxNjksIDIyOSwgOSwgMTE3LCAxNTQsIDEyOSwgMjQ1LCAxMDgsIDIwLCAxMzEsIDM1LCAyMzAsIDE2OSwgCisgICAgMjI5LCA5LCAxMTcsIDE1NCwgMTI5LCAyNDUsIDEwOCwgMjAsIDEyNCwgMzUsIDIzMCwgMTY5LCAyMjksIDksIDExNywgMTU0LCAKKyAgICAxMjksIDI0NSwgMTA4LCAyMCwgMTQ4LCAzNSwgMjMwLCAxNjksIDIyOSwgOSwgMTE3LCAxNTQsIDEyOSwgMjQ1LCAxMDgsIAorICAgIDIwLCAxMzEsIDM1LCAyNDYsIDEwNCwgMjI5LCA5LCAxMTcsIDE1NCwgMTI5LCAyNDUsIDEwOCwgMjAsIDEyNCwgMzUsIDI0NiwgCisgICAgMTA0LCAyMjksIDksIDExNywgMTU0LCAxMjksIDI0NSwgMTA4LCAyMCwgMTQ4LCAzNSwgMjQ2LCAxMDQsIDIyOSwgOSwgMTE3LCAKKyAgICAxNTQsIDEyOSwgNSwgMjIwLCAyMjksIDE0MSwgNSwgMjU0LCA5NSwgMTQxLCA1LCAyMTksIDc3LCAxNDEsIDEsIDYwLCAxNDEsIAorICAgIDEsIDI1NSwgNTgsIDE0MSwgMSwgNzIsIDE0MSwgMSwgMjM3LCAyNTUsIDE0MSwgMSwgNjgsIDE0MSwgMSwgMjIwLCAyMywgCisgICAgMTQxLCAxLCAxNjcsIDE1MiwgMTQxLCAxLCAxNjcsIDE1MywgMTQxLCAxLCA3MywgMTQxLCAxLCAyNDYsIDI1MCwgMTQxLCAxLCAKKyAgICAyNTQsIDE5NiwgMTQxLCAxLCA3NCwgMTQxLCAxLCAyMzAsIDEyNywgMTQxLCAxLCAyNTMsIDIzMiwgMTQxLCAxLCAxNzUsIAorICAgIDE0MSwgMSwgMjM2LCAxNDksIDE0MSwgMSwgMjQ1LCAwLCAxNDEsIDEsIDI0NCwgMTI1LCAxNDEsIDEsIDIzMiwgMTE1LCAKKyAgICAxNDEsIDEsIDI1MSwgMTY5LCAxNDEsIDEsIDI1MSwgNjksIDE0MSwgMSwgMjM3LCAxMjMsIDE0MSwgMSwgMjM3LCAxMDMsIAorICAgIDE0MSwgMSwgMjMxLCA3NywgMTQxLCAxLCAyMjEsIDI5LCAxNDEsIDEsIDIyMSwgMTksIDE0MSwgMSwgMjQ5LCAxMzIsIDE0MSwgCisgICAgMSwgMjQ5LCAxMTYsIDE0MSwgMSwgMjMxLCAyMTcsIDE0MSwgMSwgMjIyLCAxNTUsIDE0MSwgMSwgMjIyLCAzNSwgMTQxLCAxLCAKKyAgICAyNDksIDIwNywgMTQxLCAxLCAyNDksIDM2LCAxNDEsIDEsIDIwOCwgMTQxLCAxLCAxODcsIDE0MSwgMSwgMjI5LCAxNDEsIAorICAgIDE0MSwgMSwgMjUyLCAyMzcsIDE0MSwgMSwgMjUyLCA5NCwgMTQxLCAxLCAxOTYsIDE0MSwgMSwgMTg0LCAxNDEsIDEsIDIwMywgCisgICAgMTQxLCAxLCAyMjcsIDUyLCAxNDEsIDEsIDIzNSwgMTg4LCAxNDEsIDEsIDIzNSwgMTcsIDE0MSwgMSwgMjE5LCAxODksIAorICAgIDE0MSwgMSwgMjI1LCAyNSwgMTQxLCAxLCAyMjMsIDIxOCwgMTQxLCAxLCAyMjYsIDE3NywgMTQxLCAxLCAxNTUsIDE0MSwgNSwgCisgICAgMjMxLCAxMTIsIDE0MSwgNSwgMjUzLCAyMTksIDE0MSwgMjksIDUsIDI1NSwgNTgsIDE0MSwgMjksIDUsIDcyLCAxNDEsIDI5LCAKKyAgICA1LCAyMzcsIDI1NSwgMTQxLCAyOSwgNSwgNjgsIDE0MSwgMjksIDUsIDIyMCwgMjMsIDE0MSwgMjksIDUsIDE2NywgMTUyLCAKKyAgICAxNDEsIDI5LCA1LCAxNjcsIDIyNywgNTMsIDE0MSwgMjksIDUsIDczLCAxNDEsIDI5LCA1LCAyNDYsIDI1MCwgMTQxLCAyOSwgCisgICAgNSwgMjU0LCAxOTYsIDE0MSwgMjksIDUsIDc0LCAxNDEsIDI5LCA1LCAyMzAsIDEyNywgMTQxLCAyOSwgNSwgMjUzLCAyMzIsIAorICAgIDE0MSwgNSwgMjE5LCA4MiwgMTQxLCAyMzUsIDk0LCA3OCwgMTQxLCAyNTQsIDE5NywgMjM1LCA5NCwgNzgsIDE0MSwgMSwgCisgICAgMjQ2LCA4LCAxNDEsIDEsIDE2NywgMjI3LCA1MywgMTQxLCAxLCAxNjcsIDIzNSwgMTgsIDE0MSwgMjksIDUsIDE2NywgMTUzLCAKKyAgICAxNDEsIDI5LCA1LCAxNjcsIDIzNSwgMTgsIDE0MSwgMjAsIDIxNywgODQsIDE0MSwgMjAsIDEwNywgMTQxLCAyMCwgMTAzLCAKKyAgICAxNDEsIDIwLCAxNjAsIDE0MSwgMjAsIDE1NCwgMTQxLCAyMCwgMTc0LCAxNDEsIDIwLCAxODIsIDE0MSwgMjAsIDE5MSwgCisgICAgMTQxLCAyMCwgMTg1LCAxNDEsIDIwLCAxOTAsIDE0MSwgNSwgMjM3LCA5MiwgMTQxLCA1LCAyMjAsIDYxLCAxMjMsIDUsIAorICAgIDI1NCwgOTUsIDEyMywgNSwgMjE5LCA3NywgMTIzLCAxLCA2MCwgMTIzLCAxLCAyNTUsIDU4LCAxMjMsIDEsIDcyLCAxMjMsIAorICAgIDEsIDIzNywgMjU1LCAxMjMsIDEsIDY4LCAxMjMsIDEsIDIyMCwgMjMsIDEyMywgMSwgMTY3LCAxNTIsIDEyMywgMSwgMTY3LCAKKyAgICAxNTMsIDEyMywgMSwgNzMsIDEyMywgMSwgMjQ2LCAyNTAsIDEyMywgMSwgMjU0LCAxOTYsIDEyMywgMSwgNzQsIDEyMywgMSwgCisgICAgMjMwLCAxMjcsIDEyMywgMSwgMjUzLCAyMzIsIDEyMywgMSwgMTc1LCAxMjMsIDEsIDIzNiwgMTQ5LCAxMjMsIDEsIDI0NSwgCisgICAgMCwgMTIzLCAxLCAyNDQsIDEyNSwgMTIzLCAxLCAyMzIsIDExNSwgMTIzLCAxLCAyNTEsIDE2OSwgMTIzLCAxLCAyNTEsIDY5LCAKKyAgICAxMjMsIDEsIDIzNywgMTIzLCAxMjMsIDEsIDIzNywgMTAzLCAxMjMsIDEsIDIzMSwgNzcsIDEyMywgMSwgMjIxLCAyOSwgCisgICAgMTIzLCAxLCAyMjEsIDE5LCAxMjMsIDEsIDI0OSwgMTMyLCAxMjMsIDEsIDI0OSwgMTE2LCAxMjMsIDEsIDIzMSwgMjE3LCAKKyAgICAxMjMsIDEsIDIyMiwgMTU1LCAxMjMsIDEsIDIyMiwgMzUsIDEyMywgMSwgMjQ5LCAyMDcsIDEyMywgMSwgMjQ5LCAzNiwgCisgICAgMTIzLCAxLCAyMDgsIDEyMywgMSwgMTg3LCAxMjMsIDEsIDIyOSwgMTQxLCAxMjMsIDEsIDI1MiwgMjM3LCAxMjMsIDEsIAorICAgIDI1MiwgOTQsIDEyMywgMSwgMTk2LCAxMjMsIDEsIDE4NCwgMTIzLCAxLCAyMDMsIDEyMywgMSwgMjI3LCA1MiwgMTIzLCAxLCAKKyAgICAyMzUsIDE4OCwgMTIzLCAxLCAyMzUsIDE3LCAxMjMsIDEsIDIzNSwgMTYsIDEyMywgMSwgMjE5LCAxODksIDEyMywgMSwgCisgICAgMjI1LCAyNSwgMTIzLCAxLCAyMjMsIDIxOCwgMTIzLCAxLCAyMjYsIDE3NywgMTIzLCAxLCAxNTUsIDEyMywgNSwgMjUzLCAKKyAgICAyMTksIDEyMywgMjksIDUsIDI1NSwgNTgsIDEyMywgMjksIDUsIDcyLCAxMjMsIDI5LCA1LCAyMzcsIDI1NSwgMTIzLCAyOSwgCisgICAgNSwgNjgsIDEyMywgMjksIDUsIDIyMCwgMjMsIDEyMywgMjksIDUsIDE2NywgMTUyLCAxMjMsIDI5LCA1LCAxNjcsIDIyNywgCisgICAgNTMsIDEyMywgMjksIDUsIDczLCAxMjMsIDI5LCA1LCAyNDYsIDI1MCwgMTIzLCAyOSwgNSwgMjU0LCAxOTYsIDEyMywgMjksIAorICAgIDUsIDc0LCAxMjMsIDI5LCA1LCAyMzAsIDEyNywgMTIzLCAyOSwgNSwgMjUzLCAyMzIsIDEyMywgNSwgMjE5LCA4MiwgMTIzLCAKKyAgICAyNTMsIDIzMywgMjM1LCA5NCwgNzgsIDEyMywgMSwgMTY3LCAyMjcsIDUzLCAxMjMsIDEsIDE2NywgMjM1LCAxOCwgMTIzLCAKKyAgICAyOSwgNSwgMTY3LCAxNTMsIDEyMywgMjksIDUsIDE2NywgMjM1LCAxOCwgMTIzLCAyMCwgMjE3LCA4NCwgMTIzLCAyMCwgCisgICAgMTA3LCAxMjMsIDIwLCAxMDMsIDEyMywgMjAsIDE2MCwgMTIzLCAyMCwgMTU0LCAxMjMsIDIwLCAxNzQsIDEyMywgMjAsIAorICAgIDE4MiwgMTIzLCAyMCwgMTkxLCAxMjMsIDIwLCAxODUsIDEyMywgMjAsIDE5MCwgMTIzLCA1NCwgMjIyLCA2NSwgMTIzLCA1NCwgCisgICAgMTMxLCAyNDIsIDE2MSwgMTIzLCA1NCwgMTMxLCAyMjEsIDIzMSwgMTIzLCAyNDUsIDEwOCwgMTMxLCAyMjgsIDg5LCAxMjMsIAorICAgIDI0NSwgMTA4LCAxMzEsIDI0MywgMTk0LCAxMjMsIDI0NSwgMTA4LCAxNDgsIDIyOCwgODcsIDEyMywgMjQ5LCAxNDEsIDc4LCAKKyAgICAxMjMsIDEsIDI1MSwgMjMsIDIzMSwgMjE4LCAxMjMsIDEsIDI1MSwgMjMsIDIwNywgMTIzLCAxLCAyNTEsIDIzLCAyMjcsIAorICAgIDUzLCAxMjMsIDEsIDI1MSwgMjMsIDE1MywgMTIzLCAxLCAyNTEsIDIzLCAyMzUsIDE4LCAxMjMsIDEsIDI1MSwgMjMsIDIzNywgCisgICAgMTcsIDE2MiwgNSwgMjU0LCA5NCwgMTYyLCA1LCAyMTksIDc2LCAxNjIsIDEsIDI1MywgMjEwLCAxNjIsIDEsIDI1NSwgMTMsIAorICAgIDE2MiwgMSwgMjU0LCAyMTUsIDE2MiwgMSwgMjU0LCAyMjksIDE2MiwgMSwgMjM3LCAxMzIsIDE2MiwgMSwgMjM3LCAyNTQsIAorICAgIDE2MiwgMSwgMjIwLCAxNSwgMTYyLCAxLCAyMjAsIDE3LCAxNjIsIDEsIDIzNywgMTUzLCAxNjIsIDEsIDIzNywgMTU0LCAKKyAgICAxNjIsIDEsIDIzNywgMjQwLCAxNjIsIDEsIDIzNywgMjQyLCAxNjIsIDEsIDI0NiwgODMsIDE2MiwgMSwgMjQ2LCAyNDYsIAorICAgIDE2MiwgMSwgMjU0LCAxODQsIDE2MiwgMSwgMjMwLCA2MiwgMTYyLCAxLCAyMzAsIDEyMiwgMTYyLCAxLCAyNTMsIDIyMiwgCisgICAgMTYyLCAxLCAyNTQsIDE0OSwgMjM2LCAxODksIDE2MiwgMSwgMjM0LCAxMDUsIDIzNiwgMTg5LCAxNjIsIDEsIDI1NCwgMTQ5LCAKKyAgICAyNDQsIDIwNywgMTYyLCAxLCAyMzQsIDEwNSwgMjQ0LCAyMDcsIDE2MiwgMSwgMjM2LCAyMjgsIDIzMiwgMjMyLCAxNjIsIDEsIAorICAgIDIyNiwgMTM1LCAyNDQsIDIwNywgMTYyLCAxLCAyNTQsIDE0OSwgMjUxLCAxMTcsIDE2MiwgMSwgMjM0LCAxMDUsIDI1MSwgCisgICAgMTE3LCAxNjIsIDEsIDI1NCwgMTQ5LCAyMzcsIDExNSwgMTYyLCAxLCAyMzQsIDEwNSwgMjM3LCAxMTUsIDE2MiwgMSwgMjIyLCAKKyAgICAxNDksIDIzMiwgMjMyLCAxNjIsIDEsIDIyMiwgMTQ5LCAyMjYsIDEzNCwgMjMyLCAyMzMsIDE2MiwgMSwgMjI2LCAxMzUsIAorICAgIDIzNywgMTE1LCAxNjIsIDEsIDI1NCwgMTQ5LCAyMjEsIDI3LCAxNjIsIDEsIDIzNCwgMTA1LCAyMjEsIDI3LCAxNjIsIDEsIAorICAgIDI1NCwgMTQ5LCAyNDksIDEyMywgMTYyLCAxLCAyMzQsIDEwNSwgMjQ5LCAxMjMsIDE2MiwgMSwgMjMzLCA1NiwgMjMyLCAKKyAgICAxOTgsIDE2MiwgMSwgMjI2LCAxMzUsIDI0OSwgMTIzLCAxNjIsIDEsIDI1NCwgMTQ5LCAyMjIsIDk1LCAxNjIsIDEsIDIzNCwgCisgICAgMTA1LCAyMjIsIDk1LCAxNjIsIDEsIDI1NCwgMTQ5LCAyNDksIDEzNiwgMTYyLCAxLCAyMzQsIDEwNSwgMjQ5LCAxMzYsIAorICAgIDE2MiwgMSwgMjQ5LCAxNjQsIDIzMiwgMTk4LCAxNjIsIDEsIDIyNiwgMTM1LCAyNDksIDEzNiwgMTYyLCAxLCAyNTQsIDE0OSwgCisgICAgMjI5LCAyMDQsIDE2MiwgMSwgMjM0LCAxMDUsIDIyOSwgMjA0LCAxNjIsIDEsIDI1NCwgMTQ5LCAyNTIsIDE3OSwgMTYyLCAxLCAKKyAgICAyMzQsIDEwNSwgMjUyLCAxNzksIDE2MiwgMSwgMjM0LCA0NCwgMTYyLCAxLCAyNTQsIDEzNiwgMjUyLCAxNzksIDE2MiwgMSwgCisgICAgMjE4LCAyOSwgMTYyLCAxLCAyMjcsIDIyMSwgMTYyLCAxLCAyNDksIDE2NCwgMjM1LCAxMzEsIDE2MiwgMSwgMjE5LCAxNjcsIAorICAgIDE2MiwgMSwgMjIyLCAxNDksIDIyNiwgMTE3LCAxNjIsIDEsIDIzMywgNTYsIDIyNiwgMTE3LCAxNjIsIDEsIDI0OSwgMTY0LCAKKyAgICAyMjYsIDExNywgMTYyLCAxLCAyNDMsIDE2NiwgMTYyLCAxLCAyMzMsIDU2LCAyMzUsIDEzMSwgMTYyLCAxLCAyNDUsIDIzMywgCisgICAgMTYyLCA1LCAyNTQsIDE3NCwgMTYyLCAyOSwgNSwgMjU0LCAyMjQsIDE2MiwgMjksIDUsIDIzNiwgMTU4LCAyNTQsIDIzMSwgCisgICAgMTYyLCAyOSwgNSwgMjQ4LCAyNDEsIDI1NCwgMjMxLCAxNjIsIDI5LCA1LCAyMzYsIDE1OCwgMjM3LCAxNTAsIDE2MiwgMjksIAorICAgIDUsIDI0OCwgMjQxLCAyMzcsIDE1MCwgMTYyLCAyOSwgNSwgMjM2LCAxNTgsIDIzMCwgNDIsIDE2MiwgMjksIDUsIDI0OCwgCisgICAgMjQxLCAyMzAsIDQyLCAxNjIsIDI5LCA1LCAyNDQsIDI0NSwgMTYyLCAyOSwgNSwgMjM2LCA0NiwgMTYyLCAyOSwgNSwgMjQ4LCAKKyAgICAyNDEsIDIzNiwgNDYsIDE2MiwgMjksIDUsIDIzNiwgNDgsIDI0OSwgNzMsIDE2MiwgMjksIDUsIDIzNiwgNDcsIDI0MywgCisgICAgMjEyLCAyNTQsIDIyNCwgMTYyLCAyOSwgNSwgMjM2LCA0NywgMjQzLCAyMTIsIDI0OCwgMjQxLCAyNTQsIDIyNCwgMTYyLCAKKyAgICAyOSwgNSwgMjM2LCA0NywgMjQzLCAyMTIsIDI0NCwgMjA2LCAxNjIsIDI5LCA1LCAyNDQsIDIwNiwgMTYyLCAyOSwgNSwgCisgICAgMjQ4LCAyNDEsIDI0NCwgMjQ1LCAxNjIsIDI5LCA1LCAyNDgsIDI0MSwgMjQ0LCAyMDYsIDE2MiwgMjI4LCAxOTcsIDIzNSwgCisgICAgMjU0LCAxNDAsIDEyNiwgMjM2LCA1OCwgMjM2LCAyNDMsIDE0MCwgMTI2LCAyMzYsIDEyNiwgMjM2LCAxNDUsIDE0MCwgMTI2LCAKKyAgICAyMzYsIDEyNiwgMjM2LCAxMTksIDE0MCwgMTI2LCAyMzYsIDEyNiwgMjM2LCAxMTYsIDE0MCwgMTI2LCAyMzYsIDEyNiwgCisgICAgMjM2LCAxMjMsIDE0MCwgMTI2LCAyMzYsIDEyNiwgMjI3LCAyNDAsIDE0MCwgMTI2LCAyMzIsIDg1LCAyMzIsIDc0LCAxNDAsIAorICAgIDEyNiwgMjUxLCAxMiwgMjUxLCA2MCwgMTQwLCAxMjYsIDI1MSwgMTIsIDI1MSwgMjAsIDE0MCwgMTI2LCAyNTEsIDEyLCAKKyAgICAyNTEsIDU5LCAxNDAsIDEyNiwgMjI0LCAyNywgMjI0LCAyNiwgMTQwLCAxMjYsIDI1MSwgMTIsIDI1MSwgOSwgMTQwLCAxMjYsIAorICAgIDIxNywgMjMyLCAyMTcsIDIzOSwgMTQwLCAxMjYsIDI0OCwgMTY4LCAyNTEsIDY2LCAxNDAsIDEyNiwgMTk5LCAyMjksIDIxMywgCisgICAgMTQwLCAxMjYsIDIyMSwgMjQwLCAyMjIsIDI3LCAxNDAsIDEyNiwgMjIxLCAyNDAsIDIzMiwgMjE1LCAxNDAsIDEyNiwgMjIxLCAKKyAgICAyNDAsIDIyOSwgMTExLCAxNDAsIDEyNiwgMjMxLCAyMDUsIDIzMiwgMTM0LCAxNDAsIDEyNiwgMjQ4LCAxNjgsIDI0OSwgNzQsIAorICAgIDE0MCwgMTI2LCAxOTksIDIyMiwgMTE2LCAxNDAsIDEyNiwgMjIxLCAyNDAsIDIyMSwgMjE5LCAxNDAsIDEyNiwgMjIxLCAKKyAgICAyNDAsIDIyMiwgMzEsIDE0MCwgMTI2LCAyMjEsIDI0MCwgMjIxLCAyMzcsIDE0MCwgMTI2LCAyMzEsIDIwNSwgMjMxLCAxNDQsIAorICAgIDE0MCwgMTI2LCAyNTIsIDQyLCAyNTIsIDIyMCwgMTQwLCAxMjYsIDIyOSwgMzgsIDIyOSwgNTgsIDE0MCwgMTI2LCAyMjksIAorICAgIDExOSwgMjI5LCAxMTMsIDE0MCwgMTI2LCAyNDUsIDE0MCwgMjQ2LCA4LCAxNDAsIDEyNiwgMjI5LCAxMTksIDIyOSwgMTM1LCAKKyAgICAxNDAsIDEyNiwgMjQ1LCAxNDAsIDI0NSwgMjQ1LCAxNDAsIDEyNiwgMjI5LCAxMTksIDIyNiwgMTQzLCAxNDAsIDEyNiwgCisgICAgMjMzLCAxMzcsIDE5NiwgMTQwLCAxMjYsIDIxNywgMjMyLCAyMTgsIDU1LCAxNDAsIDEyNiwgMjI3LCA3NiwgMjI3LCAyMSwgCisgICAgMTQwLCAxMjYsIDIyNywgMjIsIDE0MCwgMTI2LCAyMzUsIDEzLCAyMzUsIDM2LCAxNDAsIDEyNiwgMjM0LCAyMzEsIDE0MCwgCisgICAgMTI2LCAyMTgsIDE4OCwgMjE5LCAzLCAxNDAsIDEyNiwgMjI0LCAyNywgMjI2LCAxNTUsIDE0MCwgMTI2LCAyMjQsIDI3LCAKKyAgICAyMjcsIDAsIDE0MCwgMTI2LCAyMjQsIDI3LCAyMjMsIDEwMiwgMTQwLCAxMjYsIDI0MywgNSwgMjQzLCA5NSwgMTQwLCAxMjYsIAorICAgIDIzNSwgMTMsIDI1MCwgMjUyLCAxNDAsIDEyNiwgMTQyLCAyNTQsIDEyMywgMTQwLCAxMjYsIDI0MywgNSwgMjMxLCAyMDAsIAorICAgIDE0MCwgMTI2LCAyMzAsIDMwLCAxNDAsIDEyNiwgMjI2LCAxMzAsIDYwLCAxNDAsIDEyNiwgMjM0LCAxMDAsIDI0MywgMTkwLCAKKyAgICAxNDAsIDEyNiwgMjI2LCAxMzAsIDI1NSwgNTgsIDE0MCwgMTI2LCAyMjYsIDEzMCwgMjU0LCAxNDAsIDE0MCwgMTI2LCAyMjYsIAorICAgIDEzMCwgNzIsIDE0MCwgMTI2LCAyMjYsIDEzMCwgMjM3LCAyNTUsIDE0MCwgMTI2LCAyMjYsIDEzMCwgMjIwLCAxMTAsIDE0MCwgCisgICAgMTI2LCAyMjYsIDEzMCwgMjIwLCAxMDgsIDE0MCwgMTI2LCAyMjYsIDEzMCwgNjgsIDE0MCwgMTI2LCAyMjYsIDEzMCwgMjIwLCAKKyAgICAyMywgMTQwLCAxMjYsIDIyOSwgMTIxLCAxNDAsIDI1MCwgNzgsIDE2LCAyNTIsIDIyMSwgMTQwLCAxMjYsIDIyNiwgMTMwLCAKKyAgICA3MywgMTQwLCAxMjYsIDIyNiwgMTMwLCAyNTQsIDIzNCwgMTQwLCAxMjYsIDIyNiwgMTMwLCA3NCwgMTQwLCAxMjYsIDIyNiwgCisgICAgMTMwLCAyNTQsIDE5NywgMjM0LCA5NiwgMTQwLCAxMjYsIDIyNiwgMTMwLCAyNTQsIDE5NywgMjM0LCA5NywgMTQwLCAxMjYsIAorICAgIDIzNSwgMTY0LCAxNDAsIDEyNiwgMjM0LCA5MywgMTQwLCAxMjYsIDIzNCwgOTQsIDE0MCwgMTI2LCAyMzQsIDEwMCwgMjQ2LCAKKyAgICAyMjMsIDE0MCwgMTI2LCAyMzQsIDEwMCwgMjIxLCAyMzksIDE0MCwgMTI2LCAyMzQsIDEwMCwgMjIxLCA5MywgMTQwLCAxMjYsIAorICAgIDIzNCwgMTAwLCAyNTEsIDUwLCAxNDAsIDEyNiwgMjIyLCAyNSwgMTQwLCAxMjYsIDIzMiwgMzYsIDE0MCwgMTI2LCAyMTgsIAorICAgIDQ5LCAxNDAsIDEyNiwgMjQ1LCAxMzUsIDE0MCwgMjAsIDIxNywgODQsIDE0MCwgMjAsIDEwNywgMTQwLCAyMCwgMTAzLCAKKyAgICAxNDAsIDIwLCAxNjAsIDE0MCwgMjAsIDE1NCwgMTQwLCAyMCwgMTc0LCAxNDAsIDIwLCAxODIsIDE0MCwgMjAsIDE5MSwgCisgICAgMTQwLCAyMCwgMTg1LCAxNDAsIDIwLCAxOTAsIDE0MCwgMTI2LCAyNTQsIDEyMSwgMTQwLCAxMjYsIDIzNiwgMTI0LCAyMDIsIAorICAgIDEsIDIzNiwgNTcsIDIwMiwgMSwgMjM2LCAxMjYsIDIyMywgNjYsIDIwMiwgMSwgMjM2LCAxMjYsIDIyMiwgMTIxLCAyMDIsIAorICAgIDEsIDIzMiwgODQsIDIwMiwgMSwgMjUwLCAxODIsIDIwMiwgMSwgMjI0LCAyNywgMjIyLCAxMjEsIDIwMiwgMSwgMjMxLCA1NiwgCisgICAgMjAyLCAxLCAyNDgsIDE2NywgMjAyLCAxLCAxMDEsIDIwMiwgMSwgMjIxLCAyNDAsIDIyMywgNjYsIDIwMiwgMSwgMjIxLCAKKyAgICAyNDAsIDIyMiwgMTIxLCAyMDIsIDEsIDIzMSwgMjA0LCAyMDIsIDEsIDI1MiwgNDEsIDIwMiwgMSwgMjI5LCAzNywgMjAyLCAKKyAgICAxLCAyMjksIDExOSwgMjIzLCA2NiwgMjAyLCAxLCAyNDUsIDE0MCwgMjIyLCAxMjEsIDIwMiwgMSwgMjI5LCAxMTksIDIyMiwgCisgICAgMTIxLCAyMDIsIDEsIDI0NSwgMTQwLCAyMjMsIDY2LCAyMDIsIDEsIDIzMywgMTM2LCAyMDIsIDEsIDIxNywgMjMxLCAyMDIsIAorICAgIDEsIDIzNSwgMTMsIDIzNSwgMzYsIDIwMiwgMSwgMjM1LCAxMywgMjM0LCAyNDYsIDIwMiwgMSwgMjE4LCAxODcsIDIwMiwgMSwgCisgICAgMjI0LCAyNywgMjIzLCA2NiwgMjAyLCAxLCAyNDMsIDUsIDIyMywgNjYsIDIwMiwgMSwgNzQsIDIwMiwgMSwgMjQzLCA1LCAKKyAgICAyMjIsIDEyMSwgMjAyLCAyNDYsIDIwOCwgMjAyLCAyOSwgNSwgNjAsIDIwMiwgMjksIDUsIDIzNCwgMTAwLCAyMzYsIDIzMywgCisgICAgMjAyLCAyOSwgNSwgMjU1LCA1OCwgMjAyLCAyOSwgNSwgMjU0LCAxNDAsIDIwMiwgMjksIDUsIDcyLCAyMDIsIDI5LCA1LCAKKyAgICAyMzcsIDI1NSwgMjAyLCAyOSwgNSwgMjE4LCA5MCwgMjAyLCAyOSwgNSwgMjE3LCAxNjYsIDIwMiwgMjksIDUsIDY4LCAyMDIsIAorICAgIDI5LCA1LCAyMjAsIDIzLCAyMDIsIDI5LCA1LCAyMzQsIDEwMCwgMjM2LCA0NCwgMjAyLCAyMjUsIDYyLCA1LCAyMzUsIDEyLCAKKyAgICAyMDIsIDIyNSwgNjIsIDUsIDIzMSwgNTYsIDIwMiwgMjksIDUsIDczLCAyMDIsIDI5LCA1LCAyNDYsIDIzNywgMjAyLCAyOSwgCisgICAgNSwgNzQsIDIwMiwgMjksIDUsIDI1MywgMjEyLCAyMDIsIDI5LCA1LCAyNTQsIDE5NiwgMjAyLCAyMzYsIDU4LCAyMzUsIAorICAgIDE4OCwgMjAyLCAxNDUsIDIzNCwgMTAwLCAyNDYsIDIyMywgMjAyLCAxNDUsIDIzNCwgMTAwLCAyMjEsIDIzOSwgMjAyLCAKKyAgICAxNDUsIDIzNCwgMTAwLCAyMjEsIDIwNSwgMjAyLCAxNDUsIDIzNCwgMTAwLCAyNTEsIDEyMywgMjAyLCAyNTEsIDE1MSwgNzgsIAorICAgIDIwMiwgMjMyLCA0MywgMjAyLCAyMCwgMjE3LCA4NCwgMjAyLCAyMCwgMTA3LCAyMDIsIDIwLCAxMDMsIDIwMiwgMjAsIDE2MCwgCisgICAgMjAyLCAyMCwgMTU0LCAyMDIsIDIwLCAxNzQsIDIwMiwgMjAsIDE4MiwgMjAyLCAyMCwgMTkxLCAyMDIsIDIwLCAxODUsIAorICAgIDIwMiwgMjAsIDE5MCwgMjAyLCAyNDMsIDUsIDIzMSwgMjA0LCAyMDIsIDI0MywgNSwgMjMzLCAxMzYsIDU5LCA0LCAyMzAsIAorICAgIDE0NiwgNTksIDE2NCwgMjQ0LCAxOSwgMjE3LCAyNDMsIDIzMywgMjEzLCAyMjEsIDYxLCA2MCwgNTksIDE2NCwgMjQ0LCAxOSwgCisgICAgMjE3LCAyNDMsIDIzMywgMjEzLCAyNTUsIDE0NCwgMjI3LCA4MCwgMjUyLCAxNDYsIDE5NiwgNTksIDE2NCwgMjQ0LCAxOSwgCisgICAgMjE3LCAyNDMsIDIzMywgMjEzLCAyNTUsIDE0NCwgMjQ0LCAxOSwgMjIxLCA0NSwgMTk2LCA1OSwgMTY0LCA2NiwgMjE3LCAKKyAgICAyNDMsIDIzMywgMjEzLCAyMzQsIDI3LCAxOTYsIDU5LCAxNjQsIDI1MCwgMTk0LCAyMTcsIDI0MywgMjMzLCAyMTMsIDIyNSwgCisgICAgMzEsIDE5NiwgNTksIDE2NCwgMjUxLCAxMzUsIDIxNywgMjQzLCAyMzMsIDIxMywgMjI5LCAxMTIsIDIyNSwgMTksIDE5NiwgCisgICAgNTksIDE2NCwgMjE3LCAyNDMsIDIzMywgMjEzLCAyMjEsIDQ1LCAyMjUsIDE5LCAxOTYsIDU5LCAxNjQsIDIyNiwgMTE1LCAKKyAgICAyMjUsIDE4LCA1OSwgMTY0LCAyNTEsIDI1MSwgMjE3LCAyNDMsIDIzMywgMjEyLCA1OSwgMTY0LCAyNTIsIDU1LCAyMjQsIAorICAgIDE5NywgMjE3LCAyNDMsIDIzMywgMjEyLCA1OSwgMTY0LCAyMzcsIDE3MywgMjIxLCA0NCwgNTksIDE2NCwgMjQ5LCA2OCwgCisgICAgMjIxLCA0NSwgMjUxLCAyNTAsIDU5LCAxNjQsIDIyNSwgMTgsIDU5LCAxNjQsIDIzMSwgNjAsIDIyNSwgMTgsIDU5LCAxNjQsIAorICAgIDIyMSwgNDUsIDIyNSwgMTgsIDU5LCAxNjQsIDIzMSwgNjAsIDIyMSwgNDUsIDIyNSwgMTgsIDU5LCAxNjQsIDIyNywgOTYsIAorICAgIDI1MSwgMzksIDIyMywgMjI5LCAyMjUsIDE4LCA1OSwgMTY0LCAyMjcsIDE1NCwgMjQ0LCA0NCwgMjI1LCAxOCwgNTksIDE2NCwgCisgICAgMjUxLCAxMzUsIDI1NSwgMTQ4LCAyMjcsIDI2LCAyMzQsIDI2LCAxNzEsIDI1MSwgMTU0LCA1OSwgMTY0LCAyNDQsIDE5LCAKKyAgICAyMjEsIDQ0LCA1OSwgMjM1LCA1LCA1LCAyNTEsIDY3LCAyMjcsIDI1LCA1OSwgMjM1LCA1LCA1LCAyMzUsIDc3LCAyMjcsIAorICAgIDI1LCA1OSwgMjUzLCAyNDgsIDUsIDIyNSwgMjgsIDI0NCwgMTk0LCAyNTUsIDE0OSwgMjI3LCAyNSwgNTksIDI1MywgMjQ4LCAKKyAgICA1LCAyNTUsIDE0NiwgMTg3LCA1OSwgMjUzLCAyNDgsIDUsIDIyNiwgOTUsIDIyMSwgNDAsIDU5LCA1LCAyMjcsIDIxOCwgCisgICAgMjQ4LCAxNzksIDI0NCwgMTkzLCA1OSwgNSwgMjI3LCAyMTgsIDI0OCwgMTc5LCAyNDQsIDcwLCA1OSwgNSwgMjI3LCAyMTgsIAorICAgIDI0OCwgMTc5LCAyNDQsIDIwLCA1OSwgNSwgMjI3LCAyMTgsIDIzMiwgMjMwLCAyNDQsIDE5MywgNTksIDUsIDIyNywgMjE4LCAKKyAgICAyMzIsIDIzMCwgMjQ0LCA3MCwgNTksIDUsIDIyNywgMjE4LCAyNDgsIDE3OSwgMjI3LCAyMTgsIDIzMiwgMjI5LCA1OSwgMjAsIAorICAgIDIxNywgODQsIDU5LCAyMCwgMTA3LCA1OSwgMjAsIDEwMywgNTksIDIwLCAxNjAsIDU5LCAyMCwgMTU0LCA1OSwgMjAsIDE3NCwgCisgICAgNTksIDIwLCAxODIsIDU5LCAyMCwgMTkxLCA1OSwgMjAsIDE4NSwgNTksIDIwLCAxOTAsIDU5LCAyMCwgMTQ0LCAxMDcsIDU5LCAKKyAgICAyMCwgMTQ0LCAxMDMsIDU5LCAyMCwgMTQ0LCAxNjAsIDU5LCAyMCwgMTQ0LCAxNTQsIDU5LCAyMCwgMTQ0LCAxNzQsIDU5LCAKKyAgICAyMCwgMTQ0LCAxODIsIDU5LCAyMCwgMTQ0LCAxOTEsIDU5LCAyMCwgMTQ0LCAxODUsIDU5LCAyMCwgMTQ0LCAxOTAsIDU5LCAKKyAgICAyMCwgMTQ0LCAyMTcsIDg0LCA1OSwgMTY0LCAyNTEsIDI1MywgMjI3LCAyNSwgNTksIDE2NCwgMjMyLCAxMDksIDI1MSwgCisgICAgMjA0LCAyMzEsIDY4LCAyMTcsIDIzLCA1OSwgMTY0LCAyNTEsIDEzNSwgMjU1LCAxNDgsIDIyNywgMjYsIDI1MSwgMjA1LCAKKyAgICAyMzMsIDE3MiwgMjUxLCAxNTQsIDU5LCAxNjQsIDIzMiwgMTA5LCAyNTEsIDIwNCwgMjI1LCAyOSwgMjI3LCAyNSwgNTksIAorICAgIDE2NCwgMjUxLCA0NywgMjMzLCAyMTIsIDU5LCAxNjQsIDIyMSwgNTYsIDI1NSwgMTQ1LCA1OSwgMTY0LCAyNDQsIDgsIDIyNywgCisgICAgMjYsIDI0MywgMjI4LCA1OSwgMTY0LCAyNDQsIDgsIDIyNywgMjYsIDI0MywgMjM0LCA1OSwgMTY0LCAyNTQsIDEyNCwgMjM2LCAKKyAgICAxNDAsIDI0MywgMjI4LCA1OSwgMTY0LCAyNTQsIDEyNCwgMjM2LCAxNDAsIDI0MywgMjM0LCA1OSwgNSwgMjE4LCA0MiwgCisgICAgMjIxLCA0MywgNTksIDUsIDIzNCwgNzUsIDIyMSwgNDMsIDU5LCAxLCAxNzUsIDU5LCAxLCAyMzYsIDE0OSwgNTksIDEsIAorICAgIDI0NSwgMCwgNTksIDEsIDI0NCwgMTI1LCA1OSwgMSwgMjMyLCAxMTUsIDU5LCAxLCAyNTEsIDE2OSwgNTksIDEsIDI1MSwgCisgICAgNjksIDU5LCAxLCAyMzcsIDEyMywgNTksIDEsIDIzMSwgNzcsIDU5LCAxLCAyMjEsIDI5LCA1OSwgMSwgMjIxLCAxOSwgNTksIAorICAgIDEsIDI0OSwgMTMyLCA1OSwgMSwgMjQ5LCAxMTYsIDU5LCAxLCAyMzEsIDIxNywgNTksIDEsIDIyMiwgMTU1LCA1OSwgMSwgCisgICAgMjIyLCAzNSwgNTksIDEsIDI0OSwgMjA3LCA1OSwgMSwgMjQ5LCAzNiwgNTksIDEsIDIwOCwgNTksIDEsIDE4NywgNTksIDEsIAorICAgIDIyOSwgMTQxLCA1OSwgMSwgMjUyLCAyMzcsIDU5LCAxLCAyNTIsIDk0LCA1OSwgMSwgMTk2LCA1OSwgMSwgMjIxLCA1NSwgCisgICAgNTksIDEsIDIyMSwgNDcsIDU5LCAxLCAyNDcsIDc0LCA1OSwgMSwgMjQ3LCA3MCwgNTksIDEsIDIxOSwgNywgNTksIDEsIAorICAgIDIxNywgODAsIDU5LCAxLCAyMTcsIDExNCwgNTksIDEsIDI1NSwgMTUxLCA1OSwgMSwgMTg0LCA1OSwgMSwgMjAzLCA1OSwgMSwgCisgICAgMjM1LCAxODgsIDU5LCAxLCAyMjUsIDI1LCA1OSwgMSwgMjIzLCAyMTgsIDU5LCAxLCAyMjYsIDE3NywgNTksIDEsIDE1NSwgCisgICAgNTksIDEsIDYwLCA1OSwgMSwgMjM2LCAxMCwgNTksIDEsIDI0NSwgMTY3LCAyMDMsIDU5LCAxLCAyMzYsIDc0LCA1OSwgMSwgCisgICAgMjI3LCA1MiwgNTksIDI5LCA1LCAyNTUsIDU4LCA1OSwgMjksIDUsIDcyLCA1OSwgMjksIDUsIDIzNywgMjU1LCA1OSwgMjksIAorICAgIDUsIDY4LCA1OSwgMjksIDUsIDIyMCwgMjMsIDU5LCAyOSwgNSwgMTY3LCAxNTIsIDU5LCAyOSwgNSwgMTY3LCAyMjcsIDUzLCAKKyAgICA1OSwgMjksIDUsIDE2NywgMTUzLCA1OSwgMjksIDUsIDE2NywgMjM1LCAxOCwgNTksIDI5LCA1LCA3MywgNTksIDI5LCA1LCAKKyAgICAyNDYsIDI1MCwgNTksIDI5LCA1LCA3NCwgNTksIDI5LCA1LCAyMzAsIDEyNywgNTksIDUsIDIyNywgODEsIDIyMywgMTA0LCAKKyAgICAyMzIsIDExNiwgMjI3LCA3NSwgNTksIDUsIDIyNywgODAsIDI1MiwgMTQ1LCA1OSwgMjksIDUsIDIxMCwgNzIsIDU5LCAyOSwgCisgICAgNSwgMjEwLCAyMzcsIDI1NSwgNTksIDUsIDIzMSwgNjgsIDIxNywgMjQsIDIzMiwgMjM2LCAyNDksIDIwNywgNTksIDUsIAorICAgIDIyNCwgMzcsIDIzNSwgMTI0LCA1OSwgMTY0LCAyNDMsIDE5NiwgNTksIDE2NCwgMjMwLCAyMSwgNTksIDUsIDIzNSwgMTI3LCAKKyAgICAyMjcsIDI1LCA1OSwgNSwgMjE4LCA0NiwgMjI3LCAyNSwgNTksIDUsIDIzNSwgMTI4LCAyMjEsIDU2LCAyNTEsIDE1NCwgNTksIAorICAgIDUsIDIzNCwgMjgsIDI1MSwgMTU0LCA1OSwgNSwgMjQ0LCAyMiwgMjUxLCAxNTUsIDIyNywgMTUyLCA1OSwgNSwgMjQ0LCAyMiwgCisgICAgMjM0LCAyMCwgMjI3LCAxNTIsIDU5LCAyMjMsIDk3LCAxLCAxNzUsIDU5LCAyMjMsIDk3LCAxLCAyMzYsIDE0OSwgNTksIAorICAgIDIyMywgOTcsIDEsIDI0NSwgMCwgNTksIDIyMywgOTcsIDEsIDI0NCwgMTI1LCA1OSwgMjIzLCA5NywgMSwgMjMyLCAxMTUsIAorICAgIDU5LCAyMjMsIDk3LCAxLCAyNTEsIDE2OSwgNTksIDIyMywgOTcsIDEsIDI1MSwgNjksIDU5LCAyMjMsIDk3LCAxLCAyMzcsIAorICAgIDEyMywgNTksIDIyMywgOTcsIDEsIDIzMSwgNzcsIDU5LCAyMjMsIDk3LCAxLCAyMjEsIDI5LCA1OSwgMjIzLCA5NywgMSwgCisgICAgMjIxLCAxOSwgNTksIDIyMywgOTcsIDEsIDI0OSwgMTMyLCA1OSwgMjIzLCA5NywgMSwgMjQ5LCAxMTYsIDU5LCAyMjMsIDk3LCAKKyAgICAxLCAyMzEsIDIxNywgNTksIDIyMywgOTcsIDEsIDIyMiwgMTU1LCA1OSwgMjIzLCA5NywgMSwgMjIyLCAzNSwgNTksIDIyMywgCisgICAgOTcsIDEsIDI0OSwgMjA3LCA1OSwgMjIzLCA5NywgMSwgMjQ5LCAzNiwgNTksIDIyMywgOTcsIDEsIDIwOCwgNTksIDIyMywgCisgICAgOTcsIDEsIDE4NywgNTksIDIyMywgOTcsIDEsIDIyOSwgMTQxLCA1OSwgMjIzLCA5NywgMSwgMjUyLCAyMzcsIDU5LCAyMjMsIAorICAgIDk3LCAxLCAyNTIsIDk0LCA1OSwgMjIzLCA5NywgMSwgMTk2LCA1OSwgMjIzLCA5NywgMSwgMjIxLCA1NSwgNTksIDIyMywgCisgICAgOTcsIDEsIDIyMSwgNDcsIDU5LCAyMjMsIDk3LCAxLCAyNDcsIDc0LCA1OSwgMjIzLCA5NywgMSwgMjQ3LCA3MCwgNTksIAorICAgIDIyMywgOTcsIDEsIDIxOSwgNywgNTksIDIyMywgOTcsIDEsIDIxNywgODAsIDU5LCAyMjMsIDk3LCAxLCAyMTcsIDExNCwgCisgICAgNTksIDIyMywgOTcsIDEsIDI1NSwgMTUxLCA1OSwgMjIzLCA5NywgMSwgMTg0LCA1OSwgMjIzLCA5NywgMSwgMjAzLCA1OSwgCisgICAgMjIzLCA5NywgMSwgMjM1LCAxODgsIDU5LCAyMjMsIDk3LCAxLCAyMjUsIDI1LCA1OSwgMjIzLCA5NywgMSwgMjIzLCAyMTgsIAorICAgIDU5LCAyMjMsIDk3LCAxLCAyMjYsIDE3NywgNTksIDIyMywgOTcsIDEsIDE1NSwgNTksIDIyMywgOTcsIDEsIDYwLCA1OSwgCisgICAgMjIzLCA5NywgMSwgMjM2LCAxMCwgNTksIDIyMywgOTcsIDEsIDI0NSwgMTY3LCAyMTksIDcsIDU5LCAyMjMsIDk3LCAxLCAKKyAgICAyNDUsIDE2NywgMTg0LCA1OSwgMjIzLCA5NywgMSwgMjQ1LCAxNjcsIDIwMywgNTksIDIzNiwgOCwgMjI3LCAyMywgMjM2LCAKKyAgICAxNDksIDU5LCAyMzYsIDgsIDIyNywgMjMsIDIzNiwgMTUwLCAyNTEsIDIwNSwgMjMzLCAxNzIsIDI1MSwgMTU0LCA1OSwgCisgICAgMjUxLCAxNDQsIDUsIDEwNiwgMjUyLCAxNDAsIDU5LCAyNTEsIDE0NCwgNSwgMTcwLCAyNTIsIDE0MCwgNTksIDI1MSwgMTQ0LCAKKyAgICA1LCAyNTEsIDE0NSwgMjIyLCA4NiwgNTksIDI1MSwgMTQ0LCA1LCAyMjYsIDExNCwgMjU1LCAxNTAsIDU5LCAxNiwgMjQ3LCAKKyAgICAxMjEsIDI1MSwgMjQ4LCA1OSwgMTYsIDIyNywgMjE3LCAyMjcsIDgyLCA1OSwgMTYsIDIzMCwgMzUsIDI0NCwgMTkyLCA1OSwgCisgICAgMTYsIDIyNywgMjE3LCAyMjcsIDgzLCAyMjcsIDE1NCwgMjQ0LCA0MywgNTksIDE2LCAyMjksIDExMiwgMTg3LCA1OSwgMTYsIAorICAgIDIzMSwgMTkwLCAyNTEsIDI0OCwgNTksIDE2LCAyMzEsIDE5MCwgMjUxLCAyNDksIDIzMSwgNjAsIDI1NSwgMTQ3LCA1OSwgCisgICAgMTYsIDIzMSwgMTkwLCAyNTEsIDI0OSwgMjQ0LCAyMSwgMjU1LCAxNDcsIDU5LCAxNiwgMjMxLCAxOTAsIDI1MSwgMjQ5LCAKKyAgICAyNTEsIDIwNSwgMjU1LCAxNDcsIDU5LCA1LCAyMjcsIDIxOCwgMjMyLCAyMzAsIDIyNywgMjE4LCAyNDgsIDE3OCwgNTksIDUsIAorICAgIDIyNywgMjE4LCAyMzIsIDIzMCwgMjQ0LCAyMCwgNTksIDE2NCwgMjUxLCAyNTIsIDIyNCwgMTk3LCAyNDQsIDEwNCwgMjMzLCAKKyAgICAyMTMsIDIyNywgMTUzLCA1OSwgMTY0LCAyMzMsIDEzOCwgMjE3LCAyNDMsIDI0NCwgMTA0LCAyMzMsIDIxMywgMjI3LCAxNTMsIAorICAgIDU5LCAxNjQsIDIzMSwgNjAsIDIyMSwgNDQsIDU5LCAxNjQsIDY2LCAyNTIsIDEyLCAyMjcsIDc3LCAyMTcsIDI0MywgMjMzLCAKKyAgICAyMTMsIDIzNCwgMjcsIDE5NiwgNTksIDE2NCwgMjUwLCAxOTQsIDI1MiwgMTIsIDIyNywgNzcsIDIxNywgMjQzLCAyMzMsIAorICAgIDIxMywgMjI1LCAzMSwgMTk2LCAyMjcsIDEwOCwgMjIzLCAzOCwgNTUsIDIzNSwgMTE0LCAyMjMsIDM4LCA1NSwgMjI3LCAKKyAgICAxMDgsIDIyMywgMzgsIDUsIDIsIDI0OCwgMTQzLCAyMzUsIDExNCwgMjIzLCAzOCwgNSwgMiwgMjQ4LCAxNDMsIDYzLCAxLCAKKyAgICAxNzUsIDYzLCAxLCAyMzYsIDE0OSwgNjMsIDEsIDI0NSwgMCwgNjMsIDEsIDI0NCwgMTI1LCA2MywgMSwgMjMyLCAxMTUsIAorICAgIDYzLCAxLCAyNTEsIDE2OSwgNjMsIDEsIDI1MSwgNjksIDYzLCAxLCAyMzcsIDEyMywgNjMsIDEsIDIzNywgMTAzLCA2MywgMSwgCisgICAgMjMxLCA3NywgNjMsIDEsIDIzMSwgMjA2LCA2MywgMSwgMjIxLCAyOSwgNjMsIDEsIDIyMSwgMTksIDYzLCAxLCAyNDksIAorICAgIDEzMiwgNjMsIDEsIDI0OSwgMTE2LCA2MywgMSwgMjMxLCAyMTcsIDYzLCAxLCAyMjIsIDE1NSwgNjMsIDEsIDIyMiwgMzUsIAorICAgIDYzLCAxLCAyNDksIDIwNywgNjMsIDEsIDI0OSwgMzYsIDYzLCAxLCAyMDgsIDYzLCAxLCAxODcsIDYzLCAxLCAyMjksIDE0MSwgCisgICAgNjMsIDEsIDI1MiwgMjM3LCA2MywgMSwgMjUyLCA5NCwgNjMsIDEsIDE5NiwgNjMsIDEsIDE4NCwgNjMsIDEsIDIwMywgNjMsIAorICAgIDEsIDIzNSwgMTg4LCA2MywgMSwgMjE5LCA3LCA2MywgMSwgMjI2LCAxNzcsIDYzLCAxLCAxNTUsIDYzLCAxLCAyMzUsIDE3LCAKKyAgICA2MywgMSwgNjAsIDYzLCAxLCAyMjUsIDEwLCA2MCwgNjMsIDEsIDcyLCA2MywgMSwgMjM3LCAyNTUsIDYzLCAxLCA2OCwgNjMsIAorICAgIDEsIDIyMCwgMjMsIDYzLCAxLCA3MywgNjMsIDEsIDIzMywgMTI4LCA3MywgNjMsIDEsIDc0LCA2MywgMSwgMjUzLCAyMzIsIAorICAgIDYzLCAyOSwgNSwgMjIyLCAxMjMsIDI1NSwgNTgsIDYzLCAyOSwgNSwgMjU1LCA1OCwgNjMsIDI5LCA1LCA3MiwgNjMsIDI5LCAKKyAgICA1LCAyMzcsIDI1NSwgNjMsIDI5LCA1LCA2OCwgNjMsIDI5LCA1LCAyMjAsIDIzLCA2MywgMjksIDUsIDczLCA2MywgMjksIDUsIAorICAgIDI1NCwgMTk2LCA2MywgMjksIDUsIDIzMywgMTI4LCAyMzcsIDI1NSwgNjMsIDI5LCA1LCAyMzMsIDEyOCwgNzQsIDYzLCAyOSwgCisgICAgNSwgMTc4LCA1MCwgNjMsIDUsIDI1NCwgOTUsIDYzLCA1LCA2MSwgNTYsIDYzLCA1LCAyMTksIDc3LCA2MywgNSwgMjE5LCAKKyAgICA4MiwgNjMsIDUsIDI1NCwgMTEsIDYzLCAyNTAsIDE0NywgNSwgMTI4LCAxODQsIDYzLCAyNTAsIDE0NywgNSwgMTI4LCAyMDMsIAorICAgIDYzLCAyNTAsIDE0NywgNSwgMTI4LCAyMTksIDcsIDYzLCAyNTAsIDE0NywgNSwgMTI4LCAxNTUsIDYzLCAxLCAyNDQsIDMyLCAKKyAgICAyMjYsIDE3NywgNjMsIDIwLCAyMTcsIDg0LCA2MywgMjAsIDEwNywgNjMsIDIwLCAxMDMsIDYzLCAyMCwgMTYwLCA2MywgMjAsIAorICAgIDE1NCwgNjMsIDIwLCAxNzQsIDYzLCAyMCwgMTgyLCA2MywgMjAsIDE5MSwgNjMsIDIwLCAxODUsIDYzLCAyMCwgMTkwLCA2MywgCisgICAgNSwgMjM1LCAyNSwgMjI2LCA4NiwgNjMsIDUsIDIyNiwgODYsIDYzLCAxNiwgMjM1LCA5LCA2MywgMTYsIDI1MCwgMTYzLCAKKyAgICA2MywgMTYsIDI1NCwgMjEzLCA2MywgMTYsIDI0NCwgMTc4LCA2MywgMSwgMjI1LCAyNSwgNjMsIDEsIDIyMywgMjE4LCA2MywgCisgICAgMSwgMTY3LCAxNTIsIDYzLCAxLCAxNjcsIDIyNywgNTMsIDYzLCAxLCAxNjcsIDE1MywgNjMsIDEsIDE2NywgMjM1LCAxOCwgCisgICAgNjMsIDI5LCA1LCAxNjcsIDE1MiwgNjMsIDI5LCA1LCAxNjcsIDIyNywgNTMsIDYzLCAyOSwgNSwgMTY3LCAxNTMsIDYzLCAKKyAgICAyOSwgNSwgMTY3LCAyMzUsIDE4LCA2MywgMSwgMjMzLCAxMjgsIDIzMiwgMTE1LCA2MywgMSwgMjMzLCAxMjgsIDIzNywgCisgICAgMTAzLCA2MywgMSwgMjMzLCAxMjgsIDI1MiwgMTc4LCA2MywgMSwgMjMzLCAxMjgsIDI1MiwgMTc0LCA2MywgMjUwLCAxNDcsIAorICAgIDUsIDIzMywgMTI4LCAxMjgsIDIwOCwgNjMsIDI1MCwgMTQ3LCA1LCAyMzMsIDEyOCwgMTI4LCAxOTYsIDYzLCAyNTAsIDE0NywgCisgICAgNSwgMjMzLCAxMjgsIDEyOCwgMjM1LCAxODgsIDYzLCAxLCAyMjUsIDMwLCAyMzYsIDIxMywgMjI1LCAyNSwgNjMsIDI5LCA1LCAKKyAgICAyMjUsIDMwLCAyMzYsIDIxMywgMjQ2LCAxMTUsIDYzLCAxNDUsIDE2NCwgMjI1LCAzMCwgMjM2LCAyMTMsIDI0MywgMTcwLCAKKyAgICA2MywgMTQ1LCAxNjQsIDIyNSwgMzAsIDIzNiwgMjEzLCAyMzYsIDE4NSwgMjI5LCAxMTgsIDYzLCAxLCAyMTgsIDIxNSwgCisgICAgMjI4LCAxNzUsIDIzNiwgMjEzLCAyMjIsIDM1LCA2MywgMSwgMjE4LCAyMTUsIDIyOCwgMTc1LCAyMzYsIDIxMywgMjI4LCAKKyAgICAxODEsIDYzLCAyOSwgNSwgMjE4LCAyMTUsIDIyOCwgMTc1LCAyMzYsIDIxMywgMjQ2LCAxMTUsIDYzLCAyOSwgNSwgMjE4LCAKKyAgICAyMTUsIDIyOCwgMTc1LCAyMzYsIDIxMywgMjIwLCAxMTAsIDYzLCA1LCAyMTgsIDIxNSwgMjI4LCAxNzUsIDIzNiwgMjEzLCAKKyAgICAyMjEsIDEzMSwgNjMsIDUsIDIxOCwgMjE1LCAyMjgsIDE3NSwgMjM2LCAyMTMsIDIyMSwgMTMwLCA2MywgNSwgMjE4LCAyMTUsIAorICAgIDIyOCwgMTc1LCAyMzYsIDIxMywgMjIxLCAxMjksIDYzLCA1LCAyMTgsIDIxNSwgMjI4LCAxNzUsIDIzNiwgMjEzLCAyMjEsIAorICAgIDEyOCwgNjMsIDUsIDIxOCwgMjE1LCAyMjgsIDE3NSwgMjM2LCAyMTMsIDIyMSwgMTI3LCA2MywgMSwgMjQ3LCA0LCAyMjgsIAorICAgIDE3NSwgMjM2LCAyMTMsIDIzMSwgMjE3LCA2MywgMSwgMjQ3LCA0LCAyMjgsIDE3NSwgMjM2LCAyMTMsIDIxNywgMTczLCA2MywgCisgICAgMSwgMjQ3LCA0LCAyMjgsIDE3NSwgMjM2LCAyMTMsIDI0NCwgMTA2LCA2MywgMjksIDUsIDI0NCwgMTg4LCAyMzYsIDIxMywgCisgICAgNzIsIDYzLCAyOSwgNSwgMjM2LCAxOTAsIDIzMCwgMTY3LCA2MywgMjksIDUsIDIzNiwgMTkwLCA2OCwgNjMsIDI5LCA1LCAKKyAgICAyMzYsIDE5MCwgMjQ2LCAyNTAsIDYzLCAxLCAyMjUsIDEwLCAxNzUsIDYzLCAxLCAyMjUsIDEwLCAyMzYsIDE0OSwgNjMsIDEsIAorICAgIDIyNSwgMTAsIDI0NSwgMCwgNjMsIDEsIDIyNSwgMTAsIDI1MSwgMTY5LCA2MywgMSwgMjI1LCAxMCwgMjE3LCAxMTQsIDYzLCAKKyAgICAxLCAyMjUsIDEwLCAyMzEsIDc3LCA2MywgMSwgMjI1LCAxMCwgMjQ5LCAyMDcsIDYzLCAxLCAyMjUsIDEwLCAyMDgsIDYzLCAKKyAgICAxLCAyMjUsIDEwLCAyMjksIDE0MSwgNjMsIDEsIDIyNSwgMTAsIDI0NiwgOCwgNjMsIDEsIDIyNSwgMTAsIDI1MiwgMjM3LCAKKyAgICA2MywgMSwgMjI1LCAxMCwgMjIyLCAzNSwgNjMsIDEsIDIyNSwgMTAsIDE1NSwgNjMsIDI1MCwgMTQ3LCA1LCAyMjUsIDEwLCAKKyAgICAxMjgsIDIxOSwgNywgNjMsIDI5LCA1LCAyMjUsIDEwLCAyNTUsIDU4LCA2MywgMjksIDUsIDIyNSwgMTAsIDczLCA2MywgMjksIAorICAgIDUsIDIyNSwgMTAsIDE3OCwgNTAsIDYzLCAyOSwgNSwgMjI1LCAxMCwgMzksIDIxOCwgOTAsIDYzLCA1LCAyMjUsIDEwLCAKKyAgICAyMjEsIDEzMCwgNjMsIDUsIDIyNSwgMTAsIDIyMSwgMTI5LCA2MywgNSwgMjI1LCAxMCwgMjIxLCAxMjcsIDYzLCA1LCAyMjUsIAorICAgIDEwLCAyMjEsIDEyNiwgNjMsIDUsIDIyNSwgMTAsIDI1MCwgMTE1LCAyMjEsIDEzMCwgNjMsIDUsIDIyNSwgMTAsIDI1MCwgCisgICAgMTE1LCAyMjEsIDEyOSwgNjMsIDUsIDIyNSwgMTAsIDI1MCwgMTE1LCAyNDYsIDIwMCwgMjIxLCAxMzIsIDYzLCAxLCAyMjcsIAorICAgIDEyLCAyMzAsIDI2LCAyNDYsIDgsIDYzLCA1LCAyMjcsIDEyLCAyMzAsIDI2LCAyMjEsIDEyNywgNjMsIDIyNSwgMTAsIDIwLCAKKyAgICAyMTcsIDg0LCA2MywgMjI1LCAxMCwgMjAsIDEwNywgNjMsIDIyNSwgMTAsIDIwLCAxMDMsIDYzLCAyMjUsIDEwLCAyMCwgCisgICAgMTYwLCA2MywgMjI1LCAxMCwgMjAsIDE1NCwgNjMsIDIyNSwgMTAsIDIwLCAxNzQsIDYzLCAyMjUsIDEwLCAyMCwgMTgyLCAKKyAgICA2MywgMjI1LCAxMCwgMjAsIDE5MSwgNjMsIDIyNSwgMTAsIDIwLCAxODUsIDYzLCAyMjUsIDEwLCAyMCwgMTkwLCA2MywgNSwgCisgICAgMjM2LCAxNDMsIDIyMSwgMTMxLCA2MywgNSwgMjM2LCAxNDMsIDIyMSwgMTI5LCA2MywgMjksIDUsIDI1NCwgMTg2LCA2MCwgCisgICAgNjMsIDI5LCA1LCAyNTQsIDE4NiwgMjU0LCAxOTYsIDYzLCAxNiwgMjI1LCAxMCwgMTA3LCA2MywgMTYsIDIyNSwgMTAsIAorICAgIDI0NiwgOTQsIDk1LCA2LCAxLCAyNTQsIDEzMSwgOTUsIDYsIDEsIDI1MiwgMjA5LCA5NSwgNiwgMSwgMjQ0LCAyMzAsIDk1LCAKKyAgICA2LCAxLCAyNDgsIDE1MywgOTUsIDYsIDEsIDI0NiwgMTk3LCA5NSwgNiwgMSwgMjE5LCA4NSwgOTUsIDYsIDEsIDIxNywgODcsIAorICAgIDk1LCA2LCAxLCAyMjIsIDExOSwgOTUsIDYsIDEsIDIzNywgMjIzLCA5NSwgNiwgMSwgMjM2LCAyMzMsIDk1LCA2LCAxLCAKKyAgICAyMzUsIDE0MywgOTUsIDYsIDEsIDIzNCwgODYsIDk1LCA2LCAxLCAyMzIsIDIxMSwgOTUsIDYsIDEsIDIzMCwgMTM4LCA5NSwgCisgICAgNiwgMSwgMjI5LCAyNDMsIDk1LCA2LCAxLCAyMTcsIDc2LCA5NSwgNiwgMSwgMjI3LCAyNDksIDk1LCA2LCAxLCAyMjYsIAorICAgIDE0MCwgOTUsIDYsIDEsIDIyMiwgMTEyLCA5NSwgNiwgMSwgMjIwLCA4NywgOTUsIDYsIDEsIDIyOSwgMTM0LCA5NSwgNiwgMSwgCisgICAgMjM2LCAxMzgsIDk1LCA2LCAxLCAyNDQsIDExOSwgOTUsIDYsIDEsIDIyOCwgMTQwLCA5NSwgNiwgMSwgMjI0LCAyMDksIDk1LCAKKyAgICA2LCAxLCAyNTEsIDIyLCA5NSwgNiwgMSwgMjUxLCAxNTQsIDk1LCA2LCAxLCAyMzcsIDkxLCA5NSwgNiwgMSwgMjUwLCAyMjQsIAorICAgIDk1LCA2LCAxLCAyNTEsIDU2LCA5NSwgNiwgMSwgMjE4LCAxMzYsIDk1LCA2LCAxLCAyMzcsIDEwMSwgOTUsIDYsIDEsIDI0MywgCisgICAgMjA4LCA5NSwgNiwgMSwgMjQzLCAxNjIsIDk1LCA2LCAxLCAyNDMsIDEwOCwgOTUsIDYsIDEsIDIxOCwgMjI3LCA5NSwgNiwgCisgICAgMSwgMjQzLCAxODIsIDk1LCA2LCAxLCAyNDMsIDIsIDk1LCAxLCAyNTQsIDEzMSwgOTUsIDEsIDI1MiwgMjA5LCA5NSwgMSwgCisgICAgMjQ0LCAyMzAsIDk1LCAxLCAyNDgsIDE1MywgOTUsIDEsIDI0NiwgMTk3LCA5NSwgMSwgMjE5LCA4NSwgOTUsIDEsIDIxNywgCisgICAgODcsIDk1LCAxLCAyMjIsIDExOSwgOTUsIDEsIDIzNywgMjIzLCA5NSwgMSwgMjM2LCAyMzMsIDk1LCAxLCAyMzUsIDE0MywgCisgICAgOTUsIDEsIDIzNCwgODYsIDk1LCAxLCAyMzIsIDIxMSwgOTUsIDEsIDIzMCwgMTM4LCA5NSwgMSwgMjI5LCAyNDMsIDk1LCAxLCAKKyAgICAyMTcsIDc2LCA5NSwgMSwgMjI3LCAyNDksIDk1LCAxLCAyMjYsIDE0MCwgOTUsIDEsIDIyMiwgMTEyLCA5NSwgMSwgMjIwLCAKKyAgICA4NywgOTUsIDEsIDIyOSwgMTM0LCA5NSwgMSwgMjM2LCAxMzgsIDk1LCAxLCAyNDQsIDExOSwgOTUsIDEsIDIyOCwgMTQwLCAKKyAgICA5NSwgMSwgMjI0LCAyMDksIDk1LCAxLCAyNTEsIDIyLCA5NSwgMSwgMjUxLCAxNTQsIDk1LCAxLCAyMzcsIDkxLCA5NSwgMSwgCisgICAgMjUwLCAyMjQsIDk1LCAxLCAyNTEsIDU2LCA5NSwgMSwgMjE4LCAxMzYsIDk1LCAxLCAyMzcsIDEwMSwgOTUsIDEsIDI0MywgCisgICAgMjA4LCA5NSwgMSwgMjQzLCAxNjIsIDk1LCAxLCAyNDMsIDEwOCwgOTUsIDEsIDIxOCwgMjI3LCA5NSwgMSwgMjQzLCAxODIsIAorICAgIDk1LCAxLCAyNDMsIDIsIDk1LCAxLCAyNDUsIDIwMywgOTUsIDEsIDIxNywgMjMzLCA5NSwgMSwgMjQ2LCAyMTAsIDk1LCAxLCAKKyAgICAyMTUsIDI0NCwgMjMwLCA5NSwgMSwgMjU0LCAxOTEsIDk1LCAyMjksIDI0MSwgMjI1LCA1NCwgNTgsIDEsIDk1LCAyMzIsIAorICAgIDIxMSwgMjIsIDkxLCAyMzYsIDg2LCAyMiwgOTEsIDIyMywgMjExLCAyMiwgOTEsIDIzMiwgNTUsIDIyLCA5MSwgMjIxLCAKKyAgICAxOTIsIDIyLCA5MSwgMjIzLCAyMDAsIDIyLCA5MSwgMjI3LCAxNDAsIDIyLCA5MSwgMjMzLCAxODcsIDIyLCA5MSwgMjI5LCAKKyAgICA5OSwgMjIsIDkxLCAyMjMsIDIwOCwgMjIsIDkxLCAyMjQsIDEwNCwgMjIsIDkxLCAyMjMsIDIwNSwgMjIsIDkxLCAyMzgsIAorICAgIDIyLCAyMiwgOTEsIDI1MCwgMjMwLCAyMiwgOTEsIDIyMywgMjE1LCAyMiwgOTEsIDI1MSwgMjksIDIyLCA5MSwgMjM2LCAKKyAgICAxMjgsIDIyLCA5MSwgMjIyLCAwLCAyMiwgOTEsIDIyOSwgMTI3LCAyMiwgOTEsIDI0MywgMTA2LCAyMiwgOTEsIDIzMiwgNTEsIAorICAgIDIyLCA5MSwgMjIzLCAyMDksIDIyLCA5MSwgMjMyLCA0NSwgMjIsIDkxLCAyMzIsIDQ5LCAyMiwgOTEsIDIyMSwgMTg5LCAyMiwgCisgICAgOTEsIDIyNywgMTI4LCAyMiwgOTEsIDIyMywgMjA3LCAyMiwgOTEsIDIyNywgMTM4LCAyMiwgOTEsIDIzNiwgMjE3LCAyMiwgCisgICAgOTEsIDIzMywgMTgwLCAyMiwgOTEsIDIzNiwgMjIwLCAyMiwgOTEsIDIyOSwgOTQsIDIyLCA5MSwgMjI5LCA5MiwgMjIsIDkxLCAKKyAgICAyMjksIDgwLCAyMiwgOTEsIDIyOSwgODgsIDIyLCA5MSwgMjI5LCA4NiwgMjIsIDkxLCAyMjksIDgzLCAyMiwgOTEsIDIyOSwgCisgICAgODUsIDIyLCA5MSwgMjI5LCA4MiwgMjIsIDkxLCAyMjksIDg3LCAyMiwgOTEsIDIyOSwgOTcsIDIyLCA5MSwgMjI5LCA5OCwgCisgICAgMjIsIDkxLCAyMjksIDgxLCAyMiwgOTEsIDIyOSwgOTEsIDIyLCA5MSwgMjM2LCAyMTgsIDIyLCA5MSwgMjM2LCAyMTYsIDIyLCAKKyAgICA5MSwgMjI0LCA5NywgMjIsIDkxLCAyMjQsIDk1LCAyMiwgOTEsIDIyNCwgODcsIDIyLCA5MSwgMjI0LCA5MCwgMjIsIDkxLCAKKyAgICAyMjQsIDk2LCAyMiwgOTEsIDIyNCwgOTIsIDIyLCA5MSwgMjI0LCA5MSwgMjIsIDkxLCAyMjQsIDg5LCAyMiwgOTEsIDIyNCwgCisgICAgMTAwLCAyMiwgOTEsIDIyNCwgMTAyLCAyMiwgOTEsIDIyNCwgMTAzLCAyMiwgOTEsIDIyNCwgOTgsIDIyLCA5MSwgMjI0LCAKKyAgICA4OCwgMjIsIDkxLCAyMjQsIDkzLCAyMiwgOTEsIDIyNCwgMTAxLCAyMiwgOTEsIDI1MSwgMTUsIDIyLCA5MSwgMjUxLCAxMywgCisgICAgMjIsIDkxLCAyNTEsIDc4LCAyMiwgOTEsIDI1MSwgNzYsIDIyLCA5MSwgMjMwLCAxLCAyMiwgOTEsIDIzOCwgMTcsIDIyLCAKKyAgICA5MSwgMjM4LCA4LCAyMiwgOTEsIDIzOCwgMTYsIDIyLCA5MSwgMjM4LCAxMywgMjIsIDkxLCAyMzgsIDExLCAyMiwgOTEsIAorICAgIDIzOCwgMTUsIDIyLCA5MSwgMjIzLCAyMTIsIDIyLCA5MSwgMjM4LCAyMCwgMjIsIDkxLCAyMzgsIDIxLCAyMiwgOTEsIDIzOCwgCisgICAgOSwgMjIsIDkxLCAyMzgsIDE0LCAyMiwgOTEsIDIxOCwgNiwgMjIsIDkxLCAyNTAsIDIyOSwgMjIsIDkxLCAyNTEsIDE2LCAKKyAgICAyMiwgOTEsIDI1MSwgMTQsIDIyLCA5MSwgMjUxLCA3OSwgMjIsIDkxLCAyNTEsIDc3LCAyMiwgOTEsIDI1MSwgMjcsIDIyLCAKKyAgICA5MSwgMjUxLCAyOCwgMjIsIDkxLCAyNTEsIDE3LCAyMiwgOTEsIDI1MSwgODAsIDIyLCA5MSwgMjI5LCAxMjUsIDIyLCA5MSwgCisgICAgMjM2LCAyMTksIDIyLCA5MSwgMjIzLCAyMTMsIDIyLCA5MSwgMjE4LCAxMiwgMjIsIDkxLCAyMzYsIDc3LCAyMiwgOTEsIAorICAgIDIzMiwgNDcsIDIyLCA5MSwgMjMyLCA1MywgMjIsIDkxLCAyMzIsIDUyLCAyMiwgOTEsIDIyMSwgMTg2LCAyMiwgOTEsIDI0NSwgCisgICAgMTg1LCAyMiwgMTIyLCAyNDUsIDE4NSwgMjIsIDEyMiwgNjAsIDIyLCAxMjIsIDI1NCwgMjM0LCAyMiwgMTIyLCAxODQsIDIyLCAKKyAgICAxMjIsIDIxOCwgNjUsIDIyLCAxMjIsIDI0NiwgMTY4LCAyMiwgMTIyLCA3MywgMjIsIDEyMiwgMjE4LCAxNiwgMjIsIDEyMiwgCisgICAgMjE4LCAyNSwgMjIsIDEyMiwgNzQsIDIyLCAxMjIsIDIxOSwgNywgMjIsIDEyMiwgMjE5LCA0LCAyMiwgMTIyLCAyMzAsIAorICAgIDE2NywgMjIsIDEyMiwgMjE3LCAyMzEsIDIyLCAxMjIsIDY4LCAyMiwgMTIyLCAyMTgsIDIxOSwgMjIsIDEyMiwgMjE4LCAKKyAgICAyMjcsIDIyLCAxMjIsIDIxOCwgMjA0LCAyMiwgMTIyLCAyMTcsIDIwMCwgMjIsIDEyMiwgMjQ2LCAxMTUsIDIyLCAxMjIsIAorICAgIDIxNywgMjUwLCAyMiwgMTIyLCA3MiwgMjIsIDEyMiwgMjU1LCAxNDIsIDIyLCAxMjIsIDI1NSwgMTQxLCAyMiwgMTIyLCAKKyAgICAyMTgsIDc5LCAyMiwgMTIyLCAyMTgsIDc3LCAyMiwgMTIyLCAyNDYsIDE2NiwgMjIsIDEyMiwgMjQ2LCAxNjUsIDIyLCAxMjIsIAorICAgIDI0NiwgMTY3LCAyMiwgMTIyLCAyMTgsIDE1LCAyMiwgMTIyLCAyMTgsIDE0LCAyMiwgMTIyLCAyMzEsIDEzLCAyMiwgMTIyLCAKKyAgICAyMzEsIDE0LCAyMiwgMTIyLCAyMzEsIDcsIDIyLCAxMjIsIDIzMSwgMTIsIDIyLCAxMjIsIDIzMSwgMTAsIDIyLCAxMjIsIAorICAgIDIxNywgMjI1LCAyMiwgMTIyLCAyMTcsIDIyNCwgMjIsIDEyMiwgMjE3LCAyMjMsIDIyLCAxMjIsIDIxNywgMjI2LCAyMiwgCisgICAgMTIyLCAyMTcsIDIyNywgMjIsIDEyMiwgMjIwLCAxNzksIDIyLCAxMjIsIDIyMCwgMTc4LCAyMiwgMTIyLCAyMjAsIDE3NywgCisgICAgMjIsIDEyMiwgMjIwLCAxNzQsIDIyLCAxMjIsIDIyMCwgMTc1LCAyMiwgMTIyLCAyMTcsIDE5OSwgMjIsIDEyMiwgMjE3LCAKKyAgICAxOTYsIDIyLCAxMjIsIDIxNywgMTk3LCAyMiwgMTIyLCAyMTcsIDE5MSwgMjIsIDEyMiwgMjE3LCAxOTIsIDIyLCAxMjIsIAorICAgIDIxNywgMTkzLCAyMiwgMTIyLCAyMTcsIDE5NSwgMjIsIDEyMiwgMjQ2LCAxMDksIDIyLCAxMjIsIDI0NiwgMTExLCAyMiwgCisgICAgMTIyLCAyMTcsIDI0OSwgMjIsIDEyMiwgMjQyLCAxMDYsIDIyLCAxMjIsIDI0MiwgOTgsIDIyLCAxMjIsIDI0MiwgMTAxLCAKKyAgICAyMiwgMTIyLCAyNDIsIDk5LCAyMiwgMTIyLCAyNDIsIDEwMywgMjIsIDEyMiwgMjQyLCAxMDUsIDIyLCAxMjIsIDI1NCwgNjAsIAorICAgIDIyLCAxMjIsIDI1NCwgNTcsIDIyLCAxMjIsIDI1NCwgNTUsIDIyLCAxMjIsIDI1NCwgNTYsIDIyLCAxMjIsIDIyMywgMjE2LCAKKyAgICAyMiwgMTIyLCAyNTUsIDE0MywgMjIsIDEyMiwgMjE4LCA3OCwgMjIsIDEyMiwgMjE4LCAxMywgMjIsIDEyMiwgMjMxLCA5LCAKKyAgICAyMiwgMTIyLCAyMzEsIDgsIDIyLCA4NSwgMjM2LCA4NiwgMjIsIDg1LCAyMjMsIDIxMSwgMjIsIDg1LCAyMzYsIDc5LCAyMiwgCisgICAgODUsIDIzMiwgNTUsIDIyLCA4NSwgMjMyLCA1MywgMjIsIDg1LCAyMzIsIDUyLCAyMiwgODUsIDIyMSwgMTkyLCAyMiwgODUsIAorICAgIDIyNywgMTQwLCAyMiwgODUsIDIyNywgMTM1LCAyMiwgODUsIDIyNywgMTMyLCAyMiwgODUsIDIyNywgMTI1LCAyMiwgODUsIAorICAgIDIyNywgMTIwLCAyMiwgODUsIDIyNywgMTE1LCAyMiwgODUsIDIyNywgMTI2LCAyMiwgODUsIDIyNywgMTM4LCAyMiwgODUsIAorICAgIDIzMywgMTg3LCAyMiwgODUsIDIyOSwgOTksIDIyLCA4NSwgMjI5LCA4OCwgMjIsIDg1LCAyMjQsIDEwNCwgMjIsIDg1LCAKKyAgICAyMjMsIDIwNSwgMjIsIDg1LCAyMzgsIDIyLCAyMiwgODUsIDI1MCwgMjMwLCAyMiwgODUsIDI1MSwgMjksIDIyLCA4NSwgCisgICAgMjM2LCAxMjgsIDIyLCA4NSwgMjIyLCAwLCAyMiwgODUsIDIyOSwgMTI3LCAyMiwgODUsIDI0MywgMTA2LCAyMiwgODUsIAorICAgIDIzNiwgODAsIDIyLCA4NSwgMjM2LCA3OCwgMjIsIDg1LCAyMzIsIDUxLCAyMiwgODUsIDIzMiwgNDUsIDIyLCA4NSwgMjMyLCAKKyAgICA0NywgMjIsIDg1LCAyMzIsIDUwLCAyMiwgODUsIDIzMiwgNDYsIDIyLCA4NSwgMjIxLCAxODksIDIyLCA4NSwgMjIxLCAxODYsIAorICAgIDIyLCA4NSwgMjI3LCAxMzMsIDIyLCA4NSwgMjI3LCAxMjgsIDIyLCA4NSwgMjI3LCAxMTQsIDIyLCA4NSwgMjI3LCAxMTMsIAorICAgIDIyLCA4NSwgMjIzLCAyMDcsIDIyLCA4NSwgMjI3LCAxMzAsIDIyLCA4NSwgMjI3LCAxMjksIDIyLCA4NSwgMjI3LCAxMjIsIAorICAgIDIyLCA4NSwgMjI3LCAxMjQsIDIyLCA4NSwgMjI3LCAxMzcsIDIyLCA4NSwgMjI3LCAxMTcsIDIyLCA4NSwgMjI3LCAxMjcsIAorICAgIDIyLCA4NSwgMjI3LCAxMzYsIDIyLCA4NSwgMjI3LCAxMTIsIDIyLCA4NSwgMjMzLCAxODMsIDIyLCA4NSwgMjMzLCAxNzgsIAorICAgIDIyLCA4NSwgMjMzLCAxODAsIDIyLCA4NSwgMjMzLCAxNzcsIDIyLCA4NSwgMjMzLCAxNzUsIDIyLCA4NSwgMjMzLCAxODEsIAorICAgIDIyLCA4NSwgMjMzLCAxODYsIDIyLCA4NSwgMjMzLCAxODQsIDIyLCA4NSwgMjM2LCAyMjAsIDIyLCA4NSwgMjI5LCA5MCwgCisgICAgMjIsIDg1LCAyMjksIDkxLCAyMiwgODUsIDIyOSwgOTYsIDIyLCA4NSwgMjM2LCAyMTgsIDIyLCA4NSwgMjI0LCA5NywgMjIsIAorICAgIDg1LCAyMjQsIDg3LCAyMiwgODUsIDIyNCwgOTAsIDIyLCA4NSwgMjI0LCA5MiwgMjIsIDg1LCAyMzAsIDEsIDIyLCA4NSwgCisgICAgMjM4LCAxNywgMjIsIDg1LCAyMzgsIDEwLCAyMiwgODUsIDIyMywgMjEyLCAyMiwgODUsIDIzOCwgMTgsIDIyLCA4NSwgMjE4LCAKKyAgICA2LCAyMiwgODUsIDIxOCwgMiwgMjIsIDg1LCAyMTgsIDMsIDIyLCA4NSwgMjI5LCAxMjUsIDIyLCA4NSwgMjM2LCAyMTksIAorICAgIDIyLCA4NSwgMjQzLCAxMDQsIDIyLCA4NSwgMjQzLCAxMDIsIDIyLCA4NSwgMjQzLCAxMDUsIDIyLCA4NSwgMjQzLCAxMDMsIAorICAgIDIyLCA4NSwgMjE4LCAxMiwgMjIsIDg1LCAyMzYsIDgyLCAyMiwgODUsIDIzNiwgODEsIDIyLCA4NSwgMjM2LCA4NSwgMjIsIAorICAgIDg1LCAyMzYsIDgzLCAyMiwgODUsIDIzNiwgODQsIDIyLCA4NSwgMjIzLCAyMDksIDI4LCA0LCAxNTUsIDI4LCA0LCAyNDIsIAorICAgIDE3MywgMjgsIDQsIDI0MywgMTEyLCAyOCwgNCwgMjQzLCAyMTEsIDI4LCA0LCAyNDMsIDE0OCwgMjgsIDQsIDI0MywgMTYyLCAKKyAgICAyOCwgNCwgMjQzLCA0LCAyOCwgNCwgMjQzLCAzLCAyOCwgNCwgMjM1LCAxODgsIDI4LCA0LCAyMzQsIDIzMSwgMjgsIDQsIAorICAgIDIzNSwgNjcsIDI4LCA0LCAyMzUsIDE4NywgMjgsIDQsIDIzNSwgMTE4LCAyOCwgNCwgMjM1LCAxMjIsIDI4LCA0LCAyMzUsIAorICAgIDEyLCAyOCwgNCwgMjM0LCAyMDYsIDI4LCA0LCAyNDMsIDEyMSwgMjgsIDQsIDI0MywgMTE1LCAyOCwgNCwgMjQzLCAxMTcsIAorICAgIDI4LCA0LCAyNDMsIDEyMCwgMjgsIDQsIDI0MywgMTE4LCAyOCwgNCwgMjQzLCAxMTksIDI4LCA0LCAyNDMsIDExNiwgMjgsIAorICAgIDQsIDI0MywgMTE0LCAyOCwgNCwgMTk2LCAyOCwgNCwgMjMzLCA5OSwgMjgsIDQsIDIzMywgMTk2LCAyOCwgNCwgMjM0LCAKKyAgICAxMTgsIDI4LCA0LCAyMzQsIDE2LCAyOCwgNCwgMjM0LCAyNSwgMjgsIDQsIDIzMywgMTM2LCAyOCwgNCwgMjMzLCA0OSwgMjgsIAorICAgIDQsIDIyMiwgMjEyLCAyOCwgNCwgMjIyLCAyMDYsIDI4LCA0LCAyMjIsIDIwOCwgMjgsIDQsIDIyMiwgMjExLCAyOCwgNCwgCisgICAgMjIyLCAyMDksIDI4LCA0LCAyMjIsIDIxMCwgMjgsIDQsIDIyMiwgMjA3LCAyOCwgNCwgMjIyLCAyMDUsIDI4LCA0LCAyMDMsIAorICAgIDI4LCA0LCAyMjcsIDIyLCAyOCwgNCwgMjI3LCAxNDcsIDI4LCA0LCAyMjgsIDAsIDI4LCA0LCAyMjcsIDIwMCwgMjgsIDQsIAorICAgIDIyNywgMjE2LCAyOCwgNCwgMjI3LCA3NSwgMjgsIDQsIDIyNiwgMjUyLCAyOCwgNCwgMjI2LCAxNzcsIDI4LCA0LCAyMjMsIAorICAgIDEwMywgMjgsIDQsIDIyNCwgMTQwLCAyOCwgNCwgMjI2LCAxNzUsIDI4LCA0LCAyMjYsIDg0LCAyOCwgNCwgMjI2LCA5NCwgCisgICAgMjgsIDQsIDIyNCwgMjYsIDI4LCA0LCAyMjMsIDM2LCAyOCwgNCwgMjI1LCAyNSwgMjgsIDQsIDIyNCwgMTcwLCAyOCwgNCwgCisgICAgMjI0LCAyMjEsIDI4LCA0LCAyMjUsIDIxLCAyOCwgNCwgMjI0LCAyNDQsIDI4LCA0LCAyMjQsIDI0NiwgMjgsIDQsIDIyNCwgCisgICAgMjAwLCAyOCwgNCwgMjI0LCAxNTcsIDI4LCA0LCAyMjgsIDE1NSwgMjgsIDQsIDIyOCwgOTgsIDI4LCA0LCAyMjgsIDEyMSwgCisgICAgMjgsIDQsIDIyOCwgMTU0LCAyOCwgNCwgMjI4LCAxMzUsIDI4LCA0LCAyMjgsIDEzNiwgMjgsIDQsIDIyOCwgMTEwLCAyOCwgCisgICAgNCwgMjI4LCAxMDksIDI4LCA0LCAyMjgsIDU3LCAyOCwgNCwgMjI4LCA1MywgMjgsIDQsIDIyOCwgNTYsIDI4LCA0LCAyMjgsIAorICAgIDU0LCAyOCwgNCwgMjI4LCA1NSwgMjgsIDQsIDIyOCwgMTMzLCAyOCwgNCwgMjI4LCAxMjcsIDI4LCA0LCAyMjgsIDEyOSwgCisgICAgMjgsIDQsIDIyOCwgMTMyLCAyOCwgNCwgMjI4LCAxMzAsIDI4LCA0LCAyMjgsIDEzMSwgMjgsIDQsIDIyOCwgMTI4LCAyOCwgCisgICAgNCwgMjI4LCAxMjYsIDI4LCA0LCAyMjgsIDEyMiwgMjgsIDQsIDIyOCwgMTI1LCAyOCwgNCwgMjI4LCAxMjMsIDI4LCA0LCAKKyAgICAyMjgsIDEyNCwgMjgsIDQsIDI1MiwgMjM3LCAyOCwgNCwgMjUxLCAyNDgsIDI4LCA0LCAyNTIsIDg0LCAyOCwgNCwgMjUyLCAKKyAgICAyMzYsIDI4LCA0LCAyNTIsIDEzNywgMjgsIDQsIDI1MiwgMTQ0LCAyOCwgNCwgMjUyLCA0MSwgMjgsIDQsIDI1MSwgMjE4LCAKKyAgICAyOCwgNCwgMjE5LCAxODksIDI4LCA0LCAyMTksIDU2LCAyOCwgNCwgMjE5LCA5NCwgMjgsIDQsIDIxOSwgMTg4LCAyOCwgNCwgCisgICAgMjE5LCAxNjAsIDI4LCA0LCAyMTksIDE2NSwgMjgsIDQsIDIxOSwgNzIsIDI4LCA0LCAyMTksIDQ5LCAyOCwgNCwgMjIyLCAKKyAgICAxNTUsIDI4LCA0LCAyMjEsIDAsIDI4LCA0LCAyMjEsIDIwNSwgMjgsIDQsIDIyMiwgMTUyLCAyOCwgNCwgMjIyLCA4MCwgMjgsIAorICAgIDQsIDIyMiwgODcsIDI4LCA0LCAxMDEsIDI4LCA0LCAyMjAsIDIyNSwgMjgsIDQsIDI1MSwgMTY5LCAyOCwgNCwgMjUwLCA5MiwgCisgICAgMjgsIDQsIDI1MCwgMjM1LCAyOCwgNCwgMjUxLCAxNjgsIDI4LCA0LCAyNTEsIDkxLCAyOCwgNCwgMjUxLCA5OSwgMjgsIDQsIAorICAgIDI1MCwgMTgyLCAyOCwgNCwgMjUwLCA2NiwgMjgsIDQsIDIxOCwgMTM4LCAyOCwgNCwgMjE4LCAxMTQsIDI4LCA0LCAyMTgsIAorICAgIDEzMCwgMjgsIDQsIDIxOCwgMTM3LCAyOCwgNCwgMjE4LCAxMzQsIDI4LCA0LCAyMTgsIDEzNSwgMjgsIDQsIDIxOCwgMTIxLCAKKyAgICAyOCwgNCwgMjE4LCAxMjAsIDI4LCA0LCAyMTgsIDEwOSwgMjgsIDQsIDIxOCwgMTA1LCAyOCwgNCwgMjE4LCAxMDgsIDI4LCAKKyAgICA0LCAyMTgsIDEwNiwgMjgsIDQsIDIxOCwgMTA3LCAyOCwgNCwgMjA4LCAyOCwgNCwgMjMxLCAxNDQsIDI4LCA0LCAyMzIsIAorICAgIDYyLCAyOCwgNCwgMjMyLCAyMzUsIDI4LCA0LCAyMzIsIDEzOSwgMjgsIDQsIDIzMiwgMTQxLCAyOCwgNCwgMjMxLCAyMDQsIAorICAgIDI4LCA0LCAyMzEsIDg1LCAyOCwgNCwgMjMxLCA3NywgMjgsIDQsIDIzMSwgNTAsIDI4LCA0LCAyMzEsIDY3LCAyOCwgNCwgCisgICAgMjMxLCA3NiwgMjgsIDQsIDIzMSwgNzIsIDI4LCA0LCAyMzEsIDczLCAyOCwgNCwgMjMxLCA1NiwgMjgsIDQsIDIzMSwgNDMsIAorICAgIDI4LCA0LCAyNDQsIDczLCA2MCwgMjgsIDQsIDI0NCwgNzMsIDY4LCAyOCwgNCwgMjQ0LCA3MywgNzIsIDI4LCA0LCAyNDQsIAorICAgIDczLCAyNTUsIDU4LCAyOCwgNCwgMjQ0LCA3MywgMjQ2LCAyNTAsIDI4LCA0LCAyNDQsIDczLCA3MywgMjgsIDQsIDI0NCwgCisgICAgNzMsIDc0LCAyOCwgNCwgMjQ0LCA3MywgMjE5LCA3LCAyOCwgNCwgMTc1LCAyOCwgNCwgMjM2LCA3LCAyOCwgNCwgMjM2LCAKKyAgICAxMTMsIDI4LCA0LCAyMzcsIDUsIDI4LCA0LCAyMzYsIDE4MywgMjgsIDQsIDIzNiwgMTg0LCAyOCwgNCwgMjM2LCA1NywgMjgsIAorICAgIDQsIDIzNiwgNTYsIDI4LCA0LCAyMzUsIDIzNCwgMjgsIDQsIDIzNSwgMjI5LCAyOCwgNCwgMjM1LCAyMzMsIDI4LCA0LCAKKyAgICAyMzUsIDIzMCwgMjgsIDQsIDIzNSwgMjMxLCAyOCwgNCwgMjM1LCAyMjQsIDI4LCA0LCAyMzUsIDIxOCwgMjgsIDQsIDIzNSwgCisgICAgMjIwLCAyOCwgNCwgMjM1LCAyMjMsIDI4LCA0LCAyMzUsIDIyMSwgMjgsIDQsIDIzNSwgMjIyLCAyOCwgNCwgMjM1LCAyMTksIAorICAgIDI4LCA0LCAyMzUsIDIxNywgMjgsIDQsIDIzNSwgMjEzLCAyOCwgNCwgMjM1LCAyMTYsIDI4LCA0LCAyMzUsIDIxNCwgMjgsIAorICAgIDQsIDIzNSwgMjE1LCAyOCwgNCwgMjE5LCA3LCAyOCwgNCwgMjE4LCAxNjUsIDI4LCA0LCAyMTgsIDIwNCwgMjgsIDQsIDIxOSwgCisgICAgNiwgMjgsIDQsIDIxOCwgMjI0LCAyOCwgNCwgMjE4LCAyMjcsIDI4LCA0LCAyMTgsIDE4NywgMjgsIDQsIDIxOCwgMTg2LCAKKyAgICAyOCwgNCwgMjI5LCAxMzMsIDYwLCAyOCwgNCwgMjI5LCAxMzMsIDY4LCAyOCwgNCwgMjI5LCAxMzMsIDcyLCAyOCwgNCwgCisgICAgMjI5LCAxMzMsIDI1NSwgNTgsIDI4LCA0LCAyMjksIDEzMywgMjQ2LCAyNTAsIDI4LCA0LCAyMjksIDEzMywgNzMsIDI4LCA0LCAKKyAgICAyMjksIDEzMywgNzQsIDI4LCA0LCAyMTcsIDExNCwgMjgsIDQsIDIxNywgMTMsIDI4LCA0LCAyMTcsIDQyLCAyOCwgNCwgCisgICAgMjE3LCAxMTMsIDI4LCA0LCAyMTcsIDkwLCAyOCwgNCwgMjE3LCA5MiwgMjgsIDQsIDIxNywgMjEsIDI4LCA0LCAyMTcsIDAsIAorICAgIDI4LCA0LCAyMTcsIDgwLCAyOCwgNCwgMjE3LCA2MCwgMjgsIDQsIDIxNywgNjcsIDI4LCA0LCAyMTcsIDc5LCAyOCwgNCwgCisgICAgMjE3LCA3MSwgMjgsIDQsIDIxNywgNzIsIDI4LCA0LCAyMTcsIDY1LCAyOCwgNCwgMjE3LCA1MSwgMjgsIDQsIDE4NCwgMjgsIAorICAgIDQsIDIxNywgMjAwLCAyOCwgNCwgMjE3LCAyNTAsIDI4LCA0LCAyMTgsIDc2LCAyOCwgNCwgMjE4LCAyMiwgMjgsIDQsIDIxOCwgCisgICAgMjUsIDI4LCA0LCAyMTcsIDIzMSwgMjgsIDQsIDIxNywgMjIyLCAyOCwgNCwgMjQ5LCAyMDcsIDI4LCA0LCAyNDcsIDExMSwgCisgICAgMjgsIDQsIDI0OSwgMTUsIDI4LCA0LCAyNDksIDIwNiwgMjgsIDQsIDI0OSwgODIsIDI4LCA0LCAyNDksIDkyLCAyOCwgNCwgCisgICAgMjQ4LCAxNjcsIDI4LCA0LCAyNDcsIDgzLCAyOCwgNCwgMjQ5LCAxMzIsIDI4LCA0LCAyNDksIDEwMiwgMjgsIDQsIDI0OSwgCisgICAgMTE0LCAyOCwgNCwgMjQ5LCAxMzEsIDI4LCA0LCAyNDksIDExOSwgMjgsIDQsIDI0OSwgMTIwLCAyOCwgNCwgMjQ5LCAxMDcsIAorICAgIDI4LCA0LCAyNDksIDkzLCAyOCwgNCwgMjM3LCAxMjMsIDI4LCA0LCAyMzcsIDQzLCAyOCwgNCwgMjM3LCA5OCwgMjgsIDQsIAorICAgIDIzNywgMTIyLCAyOCwgNCwgMjM3LCAxMTMsIDI4LCA0LCAyMzcsIDExNCwgMjgsIDQsIDIzNywgNTksIDI4LCA0LCAyMzcsIAorICAgIDI1LCAyOCwgNCwgMjQ1LCAwLCAyOCwgNCwgMjQ0LCAxNywgMjgsIDQsIDI0NCwgMTAzLCAyOCwgNCwgMjQ0LCAyNTMsIDI4LCAKKyAgICA0LCAyNDQsIDE4NCwgMjgsIDQsIDI0NCwgMTkxLCAyOCwgNCwgMjQ0LCA2OCwgMjgsIDQsIDI0NCwgNjcsIDI4LCA0LCAyNDMsIAorICAgIDI0MywgMjgsIDQsIDI0MywgMjM5LCAyOCwgNCwgMjQzLCAyNDIsIDI4LCA0LCAyNDMsIDI0MCwgMjgsIDQsIDI0MywgMjQxLCAKKyAgICAyOCwgNCwgMjQ0LCAxNjAsIDI4LCA0LCAyNDQsIDE0MCwgMjgsIDQsIDI0NCwgMTUwLCAyOCwgNCwgMjQ0LCAxNTksIDI4LCAKKyAgICA0LCAyNDQsIDE1NCwgMjgsIDQsIDI0NCwgMTU1LCAyOCwgNCwgMjQ0LCAxNDQsIDI4LCA0LCAyNDQsIDEyOSwgMjgsIDQsIAorICAgIDIyMiwgMzUsIDI4LCA0LCAyMjEsIDIyMywgMjgsIDQsIDIyMiwgMiwgMjgsIDQsIDIyMiwgMzQsIDI4LCA0LCAyMjIsIDIxLCAKKyAgICAyOCwgNCwgMjIyLCAyMiwgMjgsIDQsIDIyMSwgMjM5LCAyOCwgNCwgMjIxLCAyMTYsIDI4LCA0LCAyNTEsIDY5LCAyOCwgNCwgCisgICAgMjUwLCAyNTMsIDI4LCA0LCAyNTEsIDMxLCAyOCwgNCwgMjUxLCA2OCwgMjgsIDQsIDI1MSwgNDMsIDI4LCA0LCAyNTEsIDQ2LCAKKyAgICAyOCwgNCwgMjUxLCAxMSwgMjgsIDQsIDI1MCwgMjQyLCAyOCwgNCwgMjI5LCAxNDEsIDI4LCA0LCAyMjksIDExNCwgMjgsIDQsIAorICAgIDIyOSwgMTI5LCAyOCwgNCwgMjI5LCAxNDAsIDI4LCA0LCAyMjksIDEzMSwgMjgsIDQsIDIyOSwgMTMyLCAyOCwgNCwgMjI5LCAKKyAgICAxMTgsIDI4LCA0LCAyMjksIDExMCwgMjgsIDQsIDIyMSwgNTUsIDI4LCA0LCAyMjEsIDM2LCAyOCwgNCwgMjIxLCAzOSwgMjgsIAorICAgIDQsIDIyMSwgNTQsIDI4LCA0LCAyMjEsIDQ5LCAyOCwgNCwgMjIxLCA1MCwgMjgsIDQsIDIyMSwgMzgsIDI4LCA0LCAyMjEsIAorICAgIDM0LCAyOCwgNCwgMjIwLCAxODgsIDI4LCA0LCAyMjAsIDE4MCwgMjgsIDQsIDIyMCwgMTg0LCAyOCwgNCwgMjIwLCAxODcsIAorICAgIDI4LCA0LCAyMjAsIDE4NSwgMjgsIDQsIDIyMCwgMTg2LCAyOCwgNCwgMjIwLCAxODIsIDI4LCA0LCAyMjAsIDE4MSwgMjgsIAorICAgIDQsIDI0NiwgOCwgMjgsIDQsIDI0NSwgOTIsIDI4LCA0LCAyNDUsIDIwMywgMjgsIDQsIDI0NiwgNywgMjgsIDQsIDI0NSwgCisgICAgMjI2LCAyOCwgNCwgMjQ1LCAyMzEsIDI4LCA0LCAyNDUsIDEzOSwgMjgsIDQsIDI0NSwgNzgsIDI4LCA0LCAxODcsIDI4LCA0LCAKKyAgICAyMjgsIDIwMiwgMjgsIDQsIDIyOSwgMTA4LCAyOCwgNCwgMjMwLCA0MywgMjgsIDQsIDIyOSwgMTkxLCAyOCwgNCwgMjI5LCAKKyAgICAxOTgsIDI4LCA0LCAyMjksIDM3LCAyOCwgNCwgMjI4LCAxODEsIDI4LCA0LCAyMjYsIDI0MiwgMjgsIDQsIDIzMywgMzksIAorICAgIDI4LCA0LCAyNDUsIDcyLCAyOCwgMzYsIDI0NCwgMTgzLCA3OCwgMjgsIDIyNiwgODcsIDc4LCAyOCwgMjE4LCAxNzMsIDI4LCAKKyAgICAyNDUsIDkwLCAyMjMsIDEzNiwgMjgsIDI1MCwgMTY4LCAyOCwgMjI1LCA2NywgMjgsIDI1MCwgMTc1LCAyOCwgMjI4LCAyNDIsIAorICAgIDI1MCwgMTc1LCAyOCwgMjI4LCA4MiwgNzgsIDI4LCAyMjksIDI0MSwgMjI1LCA1NCwgMjgsIDIwLCAxMDcsIDI4LCAyMCwgCisgICAgMTAzLCAyOCwgMjAsIDE2MCwgMjgsIDIwLCAxNTQsIDI4LCAyMCwgMTc0LCAyOCwgMjAsIDE4MiwgMjgsIDIwLCAxOTEsIDI4LCAKKyAgICAyMCwgMTg1LCAyOCwgMjAsIDE5MCwgMjgsIDU0LCAyMjIsIDY1LCAyOCwgNTQsIDIyMCwgMjE5LCAyOCwgNTQsIDIyMSwgCisgICAgMjQ1LCAyOCwgNTQsIDI0NSwgMTE5LCAyOCwgNTQsIDI0NSwgMTk2LCAyOCwgNTQsIDIyNCwgNjksIDI4LCA1NCwgMjI1LCAKKyAgICAzOCwgMjgsIDU0LCAyNDYsIDIyNywgMjgsIDU0LCAyMzIsIDI3LCAyOCwgNTQsIDI0MiwgMTYxLCAyOCwgNTQsIDIyMiwgNjYsIAorICAgIDIyMSwgMjMxLCAyOCwgNCwgMjI2LCA5MSwgMjMzLCA0OSwgMjgsIDQsIDIzMywgNDUsIDI4LCA0LCAyMzMsIDQ2LCAyOCwgNCwgCisgICAgMjMzLCA0NywgMjgsIDQsIDIyNiwgOTEsIDI1MSwgMjE4LCAyOCwgNCwgMjUxLCAyMTUsIDI4LCA0LCAyNTEsIDIxNiwgMjgsIAorICAgIDQsIDI1MSwgMjE3LCAyOCwgNCwgMjI2LCA5MSwgMjQ1LCA3OCwgMjgsIDQsIDI0NSwgNzQsIDI4LCA0LCAyNDUsIDc1LCAyOCwgCisgICAgNCwgMjQ1LCA3NiwgMjgsIDQsIDIyNiwgOTEsIDIyOCwgMTgxLCAyOCwgNCwgMjI4LCAxNzcsIDI4LCA0LCAyMjgsIDE3OCwgCisgICAgMjgsIDQsIDIyOCwgMTc5LCAyOCwgMjIxLCAxMzMsIDE2NCwgMjE3LCAyMzQsIDI4LCAyMjEsIDEzMywgMTY0LCAyNDksIDUwLCAKKyAgICAyOCwgMjIxLCAxMzMsIDE2NCwgMjI3LCA5NywgMjgsIDIyMSwgMTMzLCAxNjQsIDIyNCwgMTkyLCAyMjcsIDk3LCAyOCwgCisgICAgMjIxLCAxMzMsIDE2NCwgMjQ4LCAyNDgsIDI4LCAyMjEsIDEzMywgMTY0LCAyMzYsIDE2NywgMjgsIDIyMSwgMTMzLCAxNjQsIAorICAgIDI1MSwgMTksIDI4LCAyMjEsIDEzMywgMTY0LCAyNDMsIDExMCwgMjgsIDIyMSwgMTMzLCAxNjQsIDI0OSwgNDksIDI4LCAKKyAgICAyMjEsIDEzMywgMTY0LCAyMzUsIDI0NSwgMTQzLCAxLCA2MCwgMTQzLCAxLCA3MywgMTQzLCAxLCA3MiwgMTQzLCAxLCA3NCwgCisgICAgMTQzLCAxLCA2OCwgMTQzLCAxLCAyMTYsIDIxNiwgMTQzLCAxLCAyNDUsIDAsIDE0MywgMSwgMTc1LCAxNDMsIDEsIDI0NCwgCisgICAgMTkxLCAxNDMsIDEsIDI0NCwgMTAzLCAxNDMsIDEsIDI0NCwgNjgsIDE0MywgMSwgMjQ0LCAxNywgMTQzLCAxLCAyNDMsIAorICAgIDI0NCwgMTQzLCAxLCAxNTUsIDE0MywgMSwgMjQzLCAxNjIsIDE0MywgMSwgMjQzLCAxMTIsIDE0MywgMSwgMjQzLCA0LCAKKyAgICAxNDMsIDEsIDI0MiwgMTczLCAxNDMsIDEsIDI0MiwgMTU0LCAxNDMsIDEsIDIzNSwgMTg4LCAxNDMsIDEsIDIzNSwgMTIyLCAKKyAgICAxNDMsIDEsIDIzNSwgNjcsIDE0MywgMSwgMjM1LCAxMiwgMTQzLCAxLCAyMzQsIDIzMSwgMTQzLCAxLCAyMzQsIDIwNywgCisgICAgMTQzLCAxLCAxOTYsIDE0MywgMSwgMjM0LCAyNSwgMTQzLCAxLCAyMzMsIDE5NiwgMTQzLCAxLCAyMzMsIDEzNiwgMTQzLCAxLCAKKyAgICAyMzMsIDk5LCAxNDMsIDEsIDIwOCwgMTQzLCAxLCAyNDMsIDI2LCAxNDMsIDEsIDIzMiwgMjI0LCAxNDMsIDEsIDIzMiwgCisgICAgMTQxLCAxNDMsIDEsIDIzMiwgNjIsIDE0MywgMSwgMjMxLCAyMDQsIDE0MywgMSwgMjMxLCAxNDQsIDE0MywgMSwgMjMxLCAKKyAgICA4NywgMTQzLCAxLCAyMjgsIDk3LCAxNDMsIDEsIDIyOCwgODQsIDE0MywgMSwgMjI4LCA3OCwgMTQzLCAxLCAyMjgsIDcyLCAKKyAgICAxNDMsIDEsIDIyOCwgNjEsIDE0MywgMSwgMjI4LCA1OSwgMTQzLCAxLCAyMjYsIDE3NywgMTQzLCAxLCAxOTgsIDE0MywgMSwgCisgICAgMjI2LCA5NCwgMTQzLCAxLCAyMjQsIDE0MCwgMTQzLCAxLCAyMjQsIDI2LCAxNDMsIDEsIDIyMywgMTAzLCAxNDMsIDEsIAorICAgIDIyMywgNDEsIDE0MywgMSwgMjQ5LCAyMDcsIDE0MywgMSwgMjIyLCAxNTUsIDE0MywgMSwgMjQ5LCA5MiwgMTQzLCAxLCAKKyAgICAyMjIsIDg3LCAxNDMsIDEsIDI0OSwgMTUsIDE0MywgMSwgMjIxLCAyMDUsIDE0MywgMSwgMjQ4LCAxNjcsIDE0MywgMSwgCisgICAgMjQ3LCAxMTEsIDE0MywgMSwgMjQ3LCA4NSwgMTQzLCAxLCAyNDgsIDE3NiwgMTQzLCAxLCAyMjEsIDE1NSwgMTQzLCAxLCAKKyAgICAyMjEsIDE1NCwgMTQzLCAxLCAyMjEsIDE0NCwgMTQzLCAxLCAyMjEsIDE0MywgMTQzLCAxLCAyMjEsIDE0MiwgMTQzLCAxLCAKKyAgICAyMjEsIDE0MSwgMTQzLCAxLCAyMjEsIDU1LCAxNDMsIDEsIDIyMSwgNTAsIDE0MywgMSwgMjIxLCAzOSwgMTQzLCAxLCAyMjEsIAorICAgIDM4LCAxNDMsIDEsIDIyMSwgMzYsIDE0MywgMSwgMjIxLCAzNSwgMTQzLCAxLCAyMTksIDcsIDE0MywgMSwgMjE4LCAyMjcsIAorICAgIDE0MywgMSwgMjE4LCAyMDQsIDE0MywgMSwgMjE4LCAxODcsIDE0MywgMSwgMjE4LCAxNjUsIDE0MywgMSwgMjE4LCAxNTYsIAorICAgIDE0MywgMSwgMTg0LCAxNDMsIDEsIDIxOCwgMjUsIDE0MywgMSwgMjE3LCAyNTAsIDE0MywgMSwgMjE3LCAyMzEsIDE0MywgMSwgCisgICAgMjE3LCAyMDAsIDE0MywgMSwgMjE3LCAxNzQsIDE4LCAxOSwgMjQyLCAxMjEsIDE4LCAxOSwgNzMsIDE4LCAxOSwgMjU1LCAKKyAgICAyMiwgMTgsIDE5LCA3MiwgMTgsIDE5LCAyMzcsIDI1NSwgMTgsIDE5LCA3NCwgMTgsIDE5LCAyMzAsIDEyNywgMTgsIDE5LCAKKyAgICAyMTgsIDg5LCAyMzAsIDEyNywgMTgsIDE5LCA2NCwgMjQ2LCAyNTAsIDE4LCAxOSwgNjQsIDcyLCAxOCwgMTksIDYwLCAxOCwgCisgICAgMTksIDI1NSwgNTgsIDE4LCAxOSwgMjE4LCAyMjcsIDE4LCAxOSwgMTM3LCAyMTgsIDIyNywgMTgsIDE5LCAyMTgsIDIwNCwgCisgICAgMTgsIDE5LCAxMzcsIDIxOCwgMjA0LCAxOCwgMTksIDIxOCwgMTk2LCAxOCwgMTksIDEzNywgMjE4LCAxOTYsIDE4LCAxOSwgCisgICAgMjE4LCAxODcsIDE4LCAxOSwgMTM3LCAyMTgsIDE4NywgMTgsIDE5LCAyMTgsIDE4MCwgMTgsIDE5LCAxMzcsIDIxOCwgMTgwLCAKKyAgICAxOCwgMTksIDIzMiwgMjA3LCAyMTgsIDE4MCwgMTgsIDE5LCAyMTksIDcsIDE4LCAxOSwgMTM3LCAyMTksIDcsIDE4LCAxOSwgCisgICAgMjE5LCA2LCAxOCwgMTksIDEzNywgMjE5LCA2LCAxOCwgMTksIDIzMiwgMjA3LCAyMTksIDYsIDE4LCAxOSwgMjU0LCAxOTYsIAorICAgIDE4LCAxOSwgMjE4LCA4OSwgMjE5LCA0MCwgMTgsIDE5LCAyNDQsIDczLCAyMjMsIDEzNiwgMTgsIDE5LCAzOSwgMTY4LCAxOCwgCisgICAgMTksIDM5LCAyNDQsIDM2LCAxOCwgMTksIDM5LCAyNTIsIDI5LCAxNDQsIDIyNywgOTMsIDE4LCAxOSwgMzksIDIyMSwgMTIwLCAKKyAgICAxNDQsIDIyNywgOTMsIDE4LCAxOSwgMzksIDQ1LCAxNDQsIDIyNywgOTMsIDE4LCAxOSwgMzksIDIyNywgOTMsIDE4LCAxOSwgCisgICAgMzksIDUxLCAxNjgsIDE4LCAxOSwgMzksIDUxLCAyMjQsIDE5MiwgNjksIDIyMywgMTA3LCAxOCwgMTksIDM5LCAyMzMsIAorICAgIDE5MywgMjQ4LCAxNDUsIDE4LCAxOSwgMzksIDIyNCwgMTkyLCAxODYsIDkyLCAxOCwgMTksIDM5LCAyMjksIDQzLCAxOCwgCisgICAgMTksIDM5LCAxMTMsIDIyMiwgMTQzLCAxOCwgMTksIDI0NiwgMTk3LCAxOCwgMTksIDIzNywgMjIzLCAxOCwgMTksIDIzMCwgCisgICAgMTM4LCAxOCwgMTksIDI1NCwgMTMxLCAxOCwgMTksIDIyOSwgMTk4LCAxOCwgMTksIDIzMCwgNDEsIDE4LCAxOSwgMjI5LCAKKyAgICAxMDgsIDE4LCAxOSwgMjI5LCA3NiwgMTgsIDE5LCAyMjksIDM3LCAxOCwgMTksIDIyOSwgMjEsIDE4LCAxOSwgMjE4LCA4OSwgCisgICAgMjI5LCAyMSwgMTgsIDE5LCA2NCwgMjQzLCAxNDgsIDE4LCAxOSwgNjQsIDI0MywgMTEyLCAxOCwgMTksIDE4NywgMTgsIDE5LCAKKyAgICAyMzAsIDQzLCAxOCwgMTksIDIyOCwgMTc5LCAxOCwgMTksIDEzNywgMjI4LCAxNzksIDE4LCAxOSwgMjI4LCAxNzcsIDE4LCAKKyAgICAxOSwgMTM3LCAyMjgsIDE3NywgMTgsIDE5LCAyMjgsIDE3NiwgMTgsIDE5LCAxMzcsIDIyOCwgMTc2LCAxOCwgMTksIDIyOCwgCisgICAgMTc0LCAxOCwgMTksIDEzNywgMjI4LCAxNzQsIDE4LCAxOSwgMjI4LCAxNzMsIDE4LCAxOSwgMTM3LCAyMjgsIDE3MywgMTgsIAorICAgIDE5LCAyMjgsIDE4MSwgMTgsIDE5LCAxMzcsIDIyOCwgMTgxLCAxOCwgMTksIDIyOCwgMTgwLCAxOCwgMTksIDEzNywgMjI4LCAKKyAgICAxODAsIDE4LCAxOSwgMjE4LCA4OSwgMjI4LCAxODAsIDE4LCAxOSwgMjMwLCA1OSwgMTgsIDE5LCAxMzcsIDIzMCwgNTksIAorICAgIDE4LCAxOSwgNjQsIDI0MywgMjI1LCAxOCwgMTksIDIyMiwgODcsIDE4LCAxOSwgMjIyLCAxNTAsIDE4LCAxOSwgMjIxLCAKKyAgICAyMDUsIDE4LCAxOSwgMjIxLCAxOTQsIDE4LCAxOSwgMTAxLCAxOCwgMTksIDIyMSwgMTIyLCAxOCwgMTksIDIxOCwgODksIAorICAgIDIyMSwgMTIyLCAxOCwgMTksIDY0LCAyNDksIDgyLCAxOCwgMTksIDY0LCAyNDksIDE1LCAxOCwgMTksIDIyMiwgMTU1LCAxOCwgCisgICAgMTksIDIyMiwgMTUyLCAxOCwgMTksIDIyMCwgMjIzLCAxOCwgMTksIDEzNywgMjIwLCAyMjMsIDE4LCAxOSwgMjIwLCAyMDgsIAorICAgIDE4LCAxOSwgMTM3LCAyMjAsIDIwOCwgMTgsIDE5LCAyMjAsIDIwNywgMTgsIDE5LCAxMzcsIDIyMCwgMjA3LCAxOCwgMTksIAorICAgIDEwMywgMTgsIDE5LCAxMzcsIDEwMywgMTgsIDE5LCAyMjAsIDIwMywgMTgsIDE5LCAxMzcsIDIyMCwgMjAzLCAxOCwgMTksIAorICAgIDIyMCwgMjI1LCAxOCwgMTksIDEzNywgMjIwLCAyMjUsIDE4LCAxOSwgMjIwLCAyMjQsIDE4LCAxOSwgMTM3LCAyMjAsIDIyNCwgCisgICAgMTgsIDE5LCAyMzIsIDIwNywgMjIwLCAyMjQsIDE4LCAxOSwgMjIyLCAyMDEsIDE4LCAxOSwgMjIxLCAyNiwgMTgsIDE5LCAKKyAgICAyMjEsIDEyLCAxOCwgMTksIDIyMSwgMTEsIDE4LCAxOSwgMjIxLCAyOSwgMTgsIDE5LCAyMzYsIDE4NCwgMTgsIDE5LCAyMzcsIAorICAgIDIsIDE4LCAxOSwgMjM2LCAxMTMsIDE4LCAxOSwgMjM2LCAxMDUsIDE4LCAxOSwgMjM2LCA1NywgMTgsIDE5LCAyMzYsIDQxLCAKKyAgICAxOCwgMTksIDIxOCwgODksIDIzNiwgNDEsIDE4LCAxOSwgMTc1LCAxOCwgMTksIDIzNywgNSwgMTgsIDE5LCAyMzUsIDIzMSwgCisgICAgMTgsIDE5LCAxMzcsIDIzNSwgMjMxLCAxOCwgMTksIDIzNSwgMjI5LCAxOCwgMTksIDEzNywgMjM1LCAyMjksIDE4LCAxOSwgCisgICAgMjM1LCAyMjgsIDE4LCAxOSwgMTM3LCAyMzUsIDIyOCwgMTgsIDE5LCAyMzUsIDIyNywgMTgsIDE5LCAxMzcsIDIzNSwgMjI3LCAKKyAgICAxOCwgMTksIDIzNSwgMjI2LCAxOCwgMTksIDEzNywgMjM1LCAyMjYsIDE4LCAxOSwgMjM1LCAyMzQsIDE4LCAxOSwgMTM3LCAKKyAgICAyMzUsIDIzNCwgMTgsIDE5LCAyMzUsIDIzMywgMTgsIDE5LCAxMzcsIDIzNSwgMjMzLCAxOCwgMTksIDIzMiwgMjA3LCAyMzUsIAorICAgIDIzMywgMTgsIDE5LCAyMzcsIDE3LCAxOCwgMTksIDIzNSwgMjM1LCAxOCwgMTksIDIyNCwgNSwgMjM2LCAxNzgsIDE4LCAxOSwgCisgICAgMjI0LCA1LCAyMzYsIDEwNiwgMTgsIDE5LCAyMjQsIDUsIDIzNiwgNTMsIDE4LCAxOSwgMjI0LCA1LCAyMzYsIDI0NSwgMTgsIAorICAgIDE5LCAyNTEsIDk5LCAxOCwgMTksIDI1MSwgMTY3LCAxOCwgMTksIDI1MCwgMjM1LCAxOCwgMTksIDI1MCwgMjI1LCAxOCwgCisgICAgMTksIDI1MCwgMTgyLCAxOCwgMTksIDI1MCwgMTMwLCAxOCwgMTksIDIxOCwgODksIDI1MCwgMTMwLCAxOCwgMTksIDI1MSwgCisgICAgMTY5LCAxOCwgMTksIDI1MSwgMTY4LCAxOCwgMTksIDI1MCwgNjQsIDE4LCAxOSwgMTM3LCAyNTAsIDY0LCAxOCwgMTksIAorICAgIDI1MCwgNjIsIDE4LCAxOSwgMTM3LCAyNTAsIDYyLCAxOCwgMTksIDI1MCwgNjEsIDE4LCAxOSwgMTM3LCAyNTAsIDYxLCAxOCwgCisgICAgMTksIDI1MCwgNjAsIDE4LCAxOSwgMTM3LCAyNTAsIDYwLCAxOCwgMTksIDI1MCwgNTksIDE4LCAxOSwgMTM3LCAyNTAsIDU5LCAKKyAgICAxOCwgMTksIDI1MCwgNjYsIDE4LCAxOSwgMTM3LCAyNTAsIDY2LCAxOCwgMTksIDI1MCwgNjUsIDE4LCAxOSwgMTM3LCAyNTAsIAorICAgIDY1LCAxOCwgMTksIDIzMiwgMjA3LCAyNTAsIDY1LCAxOCwgMTksIDI1MSwgMjAyLCAxOCwgMTksIDIyNiwgMTE2LCAyMjIsIAorICAgIDM3LCAxOCwgMTksIDIzNCwgMjUsIDE4LCAxOSwgMjM0LCAxMTcsIDE4LCAxOSwgMjMzLCAxOTYsIDE4LCAxOSwgMjMzLCAKKyAgICAxNzEsIDE4LCAxOSwgMjMzLCAxMzYsIDE4LCAxOSwgMjMzLCAxMTksIDE4LCAxOSwgMjE4LCA4OSwgMjMzLCAxMTksIDE4LCAKKyAgICAxOSwgMTk2LCAxOCwgMTksIDIzNCwgMTE4LCAxOCwgMTksIDIzMywgNDcsIDE4LCAxOSwgMTM3LCAyMzMsIDQ3LCAxOCwgMTksIAorICAgIDIzMywgNDUsIDE4LCAxOSwgMTM3LCAyMzMsIDQ1LCAxOCwgMTksIDIzMywgNDQsIDE4LCAxOSwgMTM3LCAyMzMsIDQ0LCAxOCwgCisgICAgMTksIDIzMywgNDMsIDE4LCAxOSwgMTM3LCAyMzMsIDQzLCAxOCwgMTksIDIzMywgNDIsIDE4LCAxOSwgMTM3LCAyMzMsIDQyLCAKKyAgICAxOCwgMTksIDIzMywgNDksIDE4LCAxOSwgMTM3LCAyMzMsIDQ5LCAxOCwgMTksIDIzMywgNDgsIDE4LCAxOSwgMTM3LCAyMzMsIAorICAgIDQ4LCAxOCwgMTksIDIzMiwgMjA3LCAyMzMsIDQ4LCAxOCwgMTksIDE4OSwgMTgsIDE5LCAxMzcsIDE4OSwgMTgsIDE5LCAKKyAgICAyMzMsIDE5OSwgMTgsIDE5LCAyNTMsIDI0MywgMTg5LCAxOCwgMTksIDIyNiwgMTE2LCAxODksIDE4LCAxOSwgMjMyLCAxNDEsIAorICAgIDE4LCAxOSwgMjMyLCAyMzQsIDE4LCAxOSwgMjMyLCA2MiwgMTgsIDE5LCAyMzIsIDM4LCAxOCwgMTksIDIzMSwgMjA0LCAxOCwgCisgICAgMTksIDIzMSwgMTk1LCAxOCwgMTksIDIxOCwgODksIDIzMSwgMTk1LCAxOCwgMTksIDIwOCwgMTgsIDE5LCAyMzIsIDIzNSwgCisgICAgMTgsIDE5LCAyMzEsIDgzLCAxOCwgMTksIDEzNywgMjMxLCA4MywgMTgsIDE5LCAyMzEsIDg1LCAxOCwgMTksIDEzNywgMjMxLCAKKyAgICA4NSwgMTgsIDE5LCAyMzEsIDg0LCAxOCwgMTksIDEzNywgMjMxLCA4NCwgMTgsIDE5LCAyMzIsIDIwNywgMjMxLCA4NCwgMTgsIAorICAgIDE5LCAyMDcsIDE4LCAxOSwgNjQsIDIzMiwgMTE3LCAxOCwgMTksIDIzMiwgNjcsIDE4LCAxOSwgMjM1LCAxMjIsIDE4LCAxOSwgCisgICAgMjM1LCAxODYsIDE4LCAxOSwgMjM1LCA2NywgMTgsIDE5LCAyMzUsIDU1LCAxOCwgMTksIDIzNSwgMTIsIDE4LCAxOSwgMjM0LCAKKyAgICAyNDgsIDE4LCAxOSwgMjE4LCA4OSwgMjM0LCAyNDgsIDE4LCAxOSwgMjM1LCAxODgsIDE4LCAxOSwgMjM1LCAxODcsIDE4LCAKKyAgICAxOSwgMjM0LCAyMDQsIDE4LCAxOSwgMTM3LCAyMzQsIDIwNCwgMTgsIDE5LCAyMzQsIDIwMywgMTgsIDE5LCAxMzcsIDIzNCwgCisgICAgMjAzLCAxOCwgMTksIDIzNCwgMjAyLCAxOCwgMTksIDEzNywgMjM0LCAyMDIsIDE4LCAxOSwgMjM0LCAyMDEsIDE4LCAxOSwgCisgICAgMTM3LCAyMzQsIDIwMSwgMTgsIDE5LCAyMzQsIDIwMCwgMTgsIDE5LCAxMzcsIDIzNCwgMjAwLCAxOCwgMTksIDIzNCwgMjA2LCAKKyAgICAxOCwgMTksIDEzNywgMjM0LCAyMDYsIDE4LCAxOSwgMjM0LCAyMDUsIDE4LCAxOSwgMTM3LCAyMzQsIDIwNSwgMTgsIDE5LCAKKyAgICAxNTMsIDE4LCAxOSwgMTM3LCAxNTMsIDE4LCAxOSwgMTI4LCAxNTMsIDE4LCAxOSwgMjI2LCA5NCwgMTgsIDE5LCAyMjYsIAorICAgIDE3MywgMTgsIDE5LCAyMjQsIDE0MCwgMTgsIDE5LCAyMjQsIDEyNSwgMTgsIDE5LCAyMjQsIDI2LCAxOCwgMTksIDIyNCwgCisgICAgMTQsIDE4LCAxOSwgMjE4LCA4OSwgMjI0LCAxNCwgMTgsIDE5LCAyMjYsIDE3NywgMTgsIDE5LCAyMjYsIDE3NSwgMTgsIDE5LCAKKyAgICAyMjMsIDMyLCAxOCwgMTksIDEzNywgMjIzLCAzMiwgMTgsIDE5LCAyMjMsIDI5LCAxOCwgMTksIDEzNywgMjIzLCAyOSwgMTgsIAorICAgIDE5LCAyMjMsIDI4LCAxOCwgMTksIDEzNywgMjIzLCAyOCwgMTgsIDE5LCAyMjMsIDI3LCAxOCwgMTksIDEzNywgMjIzLCAyNywgCisgICAgMTgsIDE5LCAyMjMsIDI2LCAxOCwgMTksIDEzNywgMjIzLCAyNiwgMTgsIDE5LCAyMjMsIDM2LCAxOCwgMTksIDEzNywgMjIzLCAKKyAgICAzNiwgMTgsIDE5LCAyMjMsIDM1LCAxOCwgMTksIDEzNywgMjIzLCAzNSwgMTgsIDE5LCAyMzIsIDIwNywgMjIzLCAzNSwgMTgsIAorICAgIDE5LCAxOTgsIDE4LCAxOSwgMjUzLCAyNDMsIDE5OCwgMTgsIDE5LCAyMjMsIDM3LCAxOCwgMTksIDI1MiwgNTAsIDE5OCwgCisgICAgMTgsIDE5LCAyMzMsIDExNiwgMjI0LCA2NiwgMTgsIDE5LCAyMzIsIDIwNywgMjI0LCA1OSwgMTgsIDE5LCAyMzIsIDIwNywgCisgICAgMjI2LCAyMzMsIDE4LCAxOSwgMjMyLCAyMDcsIDIyMywgMjI4LCAxOCwgMTksIDIzMiwgMjA3LCAyMjMsIDEwNSwgMTgsIDE5LCAKKyAgICAyMzIsIDIwNywgMjI0LCA1OCwgMTgsIDE5LCAyMzIsIDIwNywgMjI2LCA5NywgMTgsIDE5LCAyMjQsIDI0NiwgMTgsIDE5LCAKKyAgICAyMjQsIDIyMSwgMTgsIDE5LCAyMjQsIDIxNiwgMTgsIDE5LCAyMjQsIDIwMCwgMTgsIDE5LCAyMjQsIDE5NSwgMTgsIDE5LCAKKyAgICAyMjUsIDI1LCAxOCwgMTksIDIyNSwgMjEsIDE4LCAxOSwgMjI0LCAxNTUsIDE4LCAxOSwgMTM3LCAyMjQsIDE1NSwgMTgsIAorICAgIDE5LCAyMjQsIDE1NCwgMTgsIDE5LCAxMzcsIDIyNCwgMTU0LCAxOCwgMTksIDIyNCwgMTUzLCAxOCwgMTksIDEzNywgMjI0LCAKKyAgICAxNTMsIDE4LCAxOSwgMjI0LCAxNTIsIDE4LCAxOSwgMTM3LCAyMjQsIDE1MiwgMTgsIDE5LCAyMjQsIDE1MSwgMTgsIDE5LCAKKyAgICAxMzcsIDIyNCwgMTUxLCAxOCwgMTksIDIyNCwgMTU3LCAxOCwgMTksIDEzNywgMjI0LCAxNTcsIDE4LCAxOSwgMjI0LCAxNTYsIAorICAgIDE4LCAxOSwgMTM3LCAyMjQsIDE1NiwgMTgsIDE5LCAyMjUsIDI3LCAxOCwgMTksIDIxOCwgMjUsIDE4LCAxOSwgMjE4LCA3NCwgCisgICAgMTgsIDE5LCAyMTcsIDI1MCwgMTgsIDE5LCAyMTcsIDI0MiwgMTgsIDE5LCAyMTcsIDIzMSwgMTgsIDE5LCAyMTcsIDIxNiwgCisgICAgMTgsIDE5LCAyMTgsIDg5LCAyMTcsIDIxNiwgMTgsIDE5LCAxODQsIDE4LCAxOSwgMjE4LCA3NiwgMTgsIDE5LCAyMTcsIAorICAgIDE3MSwgMTgsIDE5LCAxMzcsIDIxNywgMTcxLCAxOCwgMTksIDIxNywgMTcwLCAxOCwgMTksIDEzNywgMjE3LCAxNzAsIDE4LCAKKyAgICAxOSwgMjE3LCAxNjksIDE4LCAxOSwgMTM3LCAyMTcsIDE2OSwgMTgsIDE5LCAyMTcsIDE2OCwgMTgsIDE5LCAxMzcsIDIxNywgCisgICAgMTY4LCAxOCwgMTksIDIxNywgMTY3LCAxOCwgMTksIDEzNywgMjE3LCAxNjcsIDE4LCAxOSwgMjE3LCAxNzMsIDE4LCAxOSwgCisgICAgMTM3LCAyMTcsIDE3MywgMTgsIDE5LCAyMTcsIDE3MiwgMTgsIDE5LCAxMzcsIDIxNywgMTcyLCAxOCwgMTksIDIzMiwgMjA3LCAKKyAgICAyMTcsIDE3MiwgMTgsIDE5LCAyMTgsIDkwLCAxOCwgMTksIDI1MiwgODIsIDIxOCwgOTAsIDE4LCAxOSwgMTM3LCAyMTgsIAorICAgIDkwLCAxOCwgMTksIDIyNiwgMTE2LCAyMTcsIDI1MCwgMTgsIDE5LCAyMjcsIDIxNiwgMTgsIDE5LCAyMjgsIDM4LCAyMjcsIAorICAgIDIxNiwgMTgsIDE5LCAxMzcsIDIzNSwgMTIyLCAxOCwgMTksIDIyNywgMjU1LCAxOCwgMTksIDIyNywgMTQ3LCAxOCwgMTksIAorICAgIDIyNywgOTgsIDE4LCAxOSwgMjI3LCA3NSwgMTgsIDE5LCAyMjcsIDY3LCAxOCwgMTksIDEzNywgMjM1LCAxMiwgMTgsIDE5LCAKKyAgICAyMDMsIDE4LCAxOSwgMjI4LCAwLCAxOCwgMTksIDEzNywgMjM1LCAxODgsIDE4LCAxOSwgMjI2LCAyNTEsIDE4LCAxOSwgCisgICAgMTM3LCAyMjYsIDI1MSwgMTgsIDE5LCAxNTIsIDE4LCAxOSwgMTM3LCAxNTIsIDE4LCAxOSwgMTI4LCAxNTIsIDE4LCAxOSwgCisgICAgMjQ1LCAyMzEsIDE4LCAxOSwgMjQ2LCA1LCAxOCwgMTksIDI0NSwgMjAzLCAxOCwgMTksIDI0NSwgMTkwLCAxOCwgMTksIAorICAgIDI0NSwgMTM5LCAxOCwgMTksIDI0NSwgMTM0LCAxOCwgMTksIDI0NiwgOCwgMTgsIDE5LCAyNDYsIDcsIDE4LCAxOSwgMjQ1LCAKKyAgICA3NywgMTgsIDE5LCAxMzcsIDI0NSwgNzcsIDE4LCAxOSwgMjQ2LCA3NCwgMTgsIDE5LCAyMjIsIDIyLCAxOCwgMTksIDIzMywgCisgICAgMzIsIDIyMiwgMjIsIDE4LCAxOSwgMjIyLCAyLCAxOCwgMTksIDIzMywgMzIsIDIyMiwgMiwgMTgsIDE5LCAyMjEsIDI1NCwgCisgICAgMTgsIDE5LCAyMzMsIDMyLCAyMjEsIDI1NCwgMTgsIDE5LCAyMjEsIDIzOSwgMTgsIDE5LCAyMjEsIDIzNiwgMTgsIDE5LCAKKyAgICAyMjIsIDM1LCAxOCwgMTksIDIyMiwgMzQsIDE4LCAxOSwgMjIxLCAyMTUsIDE4LCAxOSwgMTM3LCAyMjEsIDIxNSwgMTgsIAorICAgIDE5LCAyMjIsIDM3LCAxOCwgMTksIDIyMSwgMTcsIDE4LCAxOSwgMjIxLCAxNiwgMTgsIDE5LCAyMjEsIDE1LCAxOCwgMTksIAorICAgIDIyMSwgMTksIDE4LCAxOSwgMjIxLCAyMCwgMTgsIDE5LCAyMjAsIDIwMSwgMTgsIDE5LCAyMjAsIDIwMCwgMTgsIDE5LCAKKyAgICAyMjAsIDE5OSwgMTgsIDE5LCAyMjAsIDIwMiwgMTgsIDE5LCAyMzEsIDEwMiwgMjQzLCAxNjIsIDE4LCAxOSwgMjMxLCAxMDIsIAorICAgIDI0MywgMTEyLCAxOCwgMTksIDIzMSwgMTAyLCAyNDMsIDk3LCAxOCwgMTksIDIzMSwgMTAyLCAyNDMsIDQsIDE4LCAxOSwgCisgICAgMjMxLCAxMDIsIDI0MiwgMjQ4LCAxOCwgMTksIDIzMSwgMTAyLCAxNTUsIDE4LCAxOSwgMjMxLCAxMDIsIDI0MywgMjExLCAKKyAgICAxOCwgMTksIDIzMSwgMTAyLCAyNDMsIDIyNSwgMTgsIDE5LCAyMzEsIDEwMSwgMjQzLCAyMjUsIDE4LCAxOSwgMjQzLCA5MCwgCisgICAgMTgsIDE5LCAyMjgsIDE1MSwgMTgsIDE5LCAyMjgsIDEyMSwgMTgsIDE5LCAyMjgsIDExNiwgMTgsIDE5LCAyMjgsIDExMCwgCisgICAgMTgsIDE5LCAyMjgsIDEwNSwgMTgsIDE5LCAyMjgsIDE1NSwgMTgsIDE5LCAyMjgsIDE1NCwgMTgsIDE5LCAyMjgsIDE2MywgCisgICAgMTgsIDE5LCAyMjEsIDE1MSwgMTgsIDE5LCAyMjEsIDE0OSwgMTgsIDE5LCAyMjEsIDE0OCwgMTgsIDE5LCAyMjEsIDE1MiwgCisgICAgMTgsIDE5LCAxMzcsIDIyNywgMjE2LCAxOCwgMTksIDEzNywgMjI3LCAxNDcsIDE4LCAxOSwgMTM3LCAyMjcsIDc1LCAxOCwgCisgICAgMTksIDEzNywgMjAzLCAxOCwgMTksIDIzMiwgMTEzLCAxOCwgMTksIDIzMiwgOTIsIDE4LCAxOSwgMjMyLCA4OCwgMTgsIDE5LCAKKyAgICAyMzIsIDg0LCAxOCwgMTksIDIzMiwgODAsIDE4LCAxOSwgMjMyLCAxMTUsIDE4LCAxOSwgMjMyLCAxMTQsIDE4LCAxOSwgCisgICAgMjMyLCAxMTcsIDE4LCAxOSwgMjMxLCAyMTUsIDE4LCAxOSwgMjI2LCAxMTYsIDIyNCwgMjQ2LCAxOCwgMTksIDIyNiwgMTE2LCAKKyAgICAyMjQsIDIyMSwgMTgsIDE5LCAyMjYsIDExNiwgMjI0LCAyMDAsIDE4LCAxOSwgMjI2LCAxMTYsIDIyNSwgMjUsIDE4LCAxOSwgCisgICAgMjE4LCAxNzgsIDIyMiwgMjIsIDE4LCAxOSwgMjE4LCAxNzgsIDIyMiwgMiwgMTgsIDE5LCAyMTgsIDE3OCwgMjIxLCAyMzksIAorICAgIDE4LCAxOSwgMjE4LCAxNzgsIDIyMiwgMzUsIDE4LCAxOSwgMjE4LCAxNzgsIDIyMiwgMzcsIDE4LCAxOSwgMjM1LCA3MywgCisgICAgMTgsIDE5LCAyMzUsIDcyLCAxOCwgMTksIDIzNSwgNzEsIDE4LCAxOSwgMjM1LCA3MCwgMTgsIDE5LCAyMzUsIDc5LCAxOCwgCisgICAgMTksIDIzNSwgNzgsIDE4LCAxOSwgMjM1LCA4MCwgMTgsIDE5LCAyMjIsIDM2LCAyMjIsIDIyLCAxOCwgMTksIDIyMiwgMzYsIAorICAgIDIyMiwgMiwgMTgsIDE5LCAyMjIsIDM2LCAyMjEsIDI1NCwgMTgsIDE5LCAyMjIsIDM2LCAyMjEsIDIzOSwgMTgsIDE5LCAKKyAgICAyMjIsIDM2LCAyMjEsIDIzNiwgMTgsIDE5LCAyMjIsIDM2LCAyMjIsIDM1LCAxOCwgMTksIDIyMiwgMzYsIDIyMiwgMzQsIAorICAgIDE4LCAxOSwgMjIyLCAzNiwgMjIyLCAzNywgMTgsIDE5LCAyNTQsIDE4NSwgMjUzLCAyMDQsIDE4LCAxOSwgMjUyLCA1MCwgCisgICAgNzMsIDE4LCAxOSwgMjUyLCA1MCwgNzIsIDE4LCAxOSwgMjUyLCA1MCwgNzQsIDE4LCAxOSwgMjUyLCA1MCwgNjAsIDE4LCAKKyAgICAxOSwgMjUyLCA1MCwgMjE4LCAyMjcsIDE4LCAxOSwgMjUyLCA1MCwgMjE4LCAyMDQsIDE4LCAxOSwgMjUyLCA1MCwgMjE4LCAKKyAgICAxODcsIDE4LCAxOSwgMjUyLCA1MCwgMjE5LCA3LCAxOCwgMTksIDI1MiwgNTAsIDIzMiwgMTQxLCAxOCwgMTksIDI1MiwgNTAsIAorICAgIDIzMiwgNjIsIDE4LCAxOSwgMjUyLCA1MCwgMjMxLCAyMDQsIDE4LCAxOSwgMjUyLCA1MCwgMjA4LCAxOCwgMTksIDI1MiwgCisgICAgNTAsIDIzNiwgMTg0LCAxOCwgMTksIDI1MiwgNTAsIDIzNiwgMTEzLCAxOCwgMTksIDI1MiwgNTAsIDIzNiwgNTcsIDE4LCAKKyAgICAxOSwgMjUyLCA1MCwgMTc1LCAxOCwgMTksIDIyNiwgMTE2LCAyNDMsIDE2MiwgMTgsIDE5LCAyMjYsIDExNiwgMjQzLCAxMTIsIAorICAgIDE4LCAxOSwgMjI2LCAxMTYsIDI0MywgNCwgMTgsIDE5LCAyMjYsIDExNiwgMTU1LCAxOCwgMTksIDY0LCAyNDQsIDEwOSwgCisgICAgMTgsIDE5LCA2NCwgMjQ0LCAxMTIsIDE4LCAxOSwgNjQsIDI0NCwgMTE2LCAxOCwgMTksIDY0LCAyNDQsIDExNSwgMTgsIDE5LCAKKyAgICA2NCwgMjQ0LCAxMTMsIDE4LCAxOSwgNjQsIDI0NCwgMTI1LCAxOCwgMTksIDY0LCAyMjcsIDIyLCAxOCwgMTksIDY0LCAyMjcsIAorICAgIDc1LCAxOCwgMTksIDY0LCAyMjcsIDIxNiwgMTgsIDE5LCA2NCwgMjI3LCAyMDAsIDE4LCAxOSwgNjQsIDIyNywgMTQ3LCAxOCwgCisgICAgMTksIDY0LCAyMDMsIDE4LCAxOSwgNjQsIDIxOCwgMTY1LCAxOCwgMTksIDY0LCAyMTgsIDE4NywgMTgsIDE5LCA2NCwgMjE4LCAKKyAgICAyMjcsIDE4LCAxOSwgNjQsIDIxOCwgMjI0LCAxOCwgMTksIDY0LCAyMTgsIDIwNCwgMTgsIDE5LCA2NCwgMjE5LCA3LCAxOCwgCisgICAgMTksIDY0LCAyNDIsIDE0NywgMTgsIDE5LCA2NCwgMjQyLCAxNDgsIDE4LCAxOSwgNjQsIDI0MiwgMTUxLCAxOCwgMTksIDY0LCAKKyAgICAyNDIsIDE1MCwgMTgsIDE5LCA2NCwgMjQyLCAxNDksIDE4LCAxOSwgNjQsIDI0MiwgMTUzLCAxOCwgMTksIDY0LCAyMjEsIAorICAgIDIyMywgMTgsIDE5LCA2NCwgMjIxLCAyMzksIDE4LCAxOSwgNjQsIDIyMiwgMjIsIDE4LCAxOSwgNjQsIDIyMiwgMjEsIDE4LCAKKyAgICAxOSwgNjQsIDIyMiwgMiwgMTgsIDE5LCA2NCwgMjIyLCAzNSwgMTgsIDE5LCA2NCwgMjIxLCAzLCAxOCwgMTksIDY0LCAyMjEsIAorICAgIDExLCAxOCwgMTksIDY0LCAyMjEsIDI2LCAxOCwgMTksIDY0LCAyMjEsIDI1LCAxOCwgMTksIDY0LCAyMjEsIDEyLCAxOCwgCisgICAgMTksIDY0LCAyMjEsIDI5LCAxOCwgMTksIDY0LCAyMjgsIDIwMiwgMTgsIDE5LCA2NCwgMjI5LCAzNywgMTgsIDE5LCA2NCwgCisgICAgMjI5LCAxOTgsIDE4LCAxOSwgNjQsIDIyOSwgMTkxLCAxOCwgMTksIDY0LCAyMjksIDEwOCwgMTgsIDE5LCA2NCwgMTg3LCAKKyAgICAxOCwgMTksIDY0LCAyMzAsIDU5LCAxOCwgMTksIDY0LCAyNDQsIDE3LCAxOCwgMTksIDY0LCAyNDQsIDY4LCAxOCwgMTksIAorICAgIDY0LCAyNDQsIDE5MSwgMTgsIDE5LCA2NCwgMjQ0LCAxODQsIDE4LCAxOSwgNjQsIDI0NCwgMTAzLCAxOCwgMTksIDY0LCAKKyAgICAyNDUsIDAsIDE4LCAxOSwgNjQsIDIzNiwgMTIwLCAxOCwgMTksIDY0LCAyMzYsIDEyNSwgMTgsIDE5LCA2NCwgMjM2LCAxMzcsIAorICAgIDE4LCAxOSwgNjQsIDIzNiwgMTM2LCAxOCwgMTksIDY0LCAyMzYsIDEzMCwgMTgsIDE5LCA2NCwgMjM2LCAxNDksIDE4LCAxOSwgCisgICAgNjQsIDIzNiwgNjksIDE4LCAxOSwgNjQsIDIzNiwgNzAsIDE4LCAxOSwgNjQsIDIzNiwgNzMsIDE4LCAxOSwgNjQsIDIzNiwgCisgICAgNzIsIDE4LCAxOSwgNjQsIDIzNiwgNzEsIDE4LCAxOSwgNjQsIDIzNiwgNzQsIDE4LCAxOSwgNjQsIDIzNiwgNzUsIDE4LCAKKyAgICAxOSwgNjQsIDIzMSwgMTQ0LCAxOCwgMTksIDY0LCAyMzEsIDIwNCwgMTgsIDE5LCA2NCwgMjMyLCAxNDEsIDE4LCAxOSwgNjQsIAorICAgIDIzMiwgMTM5LCAxOCwgMTksIDY0LCAyMzIsIDYyLCAxOCwgMTksIDY0LCAyMDgsIDE4LCAxOSwgNjQsIDIzMywgOTksIDE4LCAKKyAgICAxOSwgNjQsIDIzMywgMTM2LCAxOCwgMTksIDY0LCAyMzQsIDI1LCAxOCwgMTksIDY0LCAyMzQsIDE2LCAxOCwgMTksIDY0LCAKKyAgICAyMzMsIDE5NiwgMTgsIDE5LCA2NCwgMTk2LCAxOCwgMTksIDY0LCAyMTcsIDIwMCwgMTgsIDE5LCA2NCwgMjE3LCAyMzEsIAorICAgIDE4LCAxOSwgNjQsIDIxOCwgMjUsIDE4LCAxOSwgNjQsIDIxOCwgMjIsIDE4LCAxOSwgNjQsIDIxNywgMjUwLCAxOCwgMTksIAorICAgIDY0LCAxODQsIDE4LCAxOSwgNjQsIDIzNywgNDMsIDE4LCAxOSwgMjI2LCAxMTYsIDIzNywgNDMsIDE4LCAxOSwgNjQsIDIzNywgCisgICAgNTksIDE4LCAxOSwgNjQsIDIzNywgMTE0LCAxOCwgMTksIDY0LCAyMzcsIDExMywgMTgsIDE5LCA2NCwgMjM3LCA5OCwgMTgsIAorICAgIDE5LCAyMjYsIDExNiwgMjM3LCA5OCwgMTgsIDE5LCA2NCwgMjM3LCAxMjMsIDE4LCAxOSwgNjQsIDIzNywgNzIsIDE4LCAxOSwgCisgICAgNjQsIDIzNywgNzYsIDE4LCAxOSwgNjQsIDIzNywgODYsIDE4LCAxOSwgNjQsIDIzNywgODUsIDE4LCAxOSwgNjQsIDIzNywgCisgICAgODQsIDE4LCAxOSwgNjQsIDIzNywgODcsIDE4LCAxOSwgNjQsIDIzNCwgMjMxLCAxOCwgMTksIDY0LCAyMzUsIDEyLCAxOCwgCisgICAgMTksIDY0LCAyMzUsIDEyMiwgMTgsIDE5LCA2NCwgMjM1LCAxMTgsIDE4LCAxOSwgNjQsIDIzNSwgNjcsIDE4LCAxOSwgNjQsIAorICAgIDIzNSwgMTg4LCAxOCwgMTksIDY0LCAyNDgsIDE3MSwgMTgsIDE5LCA2NCwgMjQ4LCAxNzIsIDE4LCAxOSwgNjQsIDI0OCwgCisgICAgMTc1LCAxOCwgMTksIDY0LCAyNDgsIDE3NCwgMTgsIDE5LCA2NCwgMjQ4LCAxNzMsIDE4LCAxOSwgNjQsIDI0OCwgMTc2LCAKKyAgICAxOCwgMTksIDY0LCAyMzUsIDY5LCAxOCwgMTksIDY0LCAyMzUsIDcxLCAxOCwgMTksIDY0LCAyMzUsIDc1LCAxOCwgMTksIAorICAgIDY0LCAyMzUsIDc0LCAxOCwgMTksIDY0LCAyMzUsIDczLCAxOCwgMTksIDY0LCAyMzUsIDc5LCAxOCwgMTksIDY0LCAyMjEsIAorICAgIDE0NiwgMTgsIDE5LCA2NCwgMjIxLCAxNDgsIDE4LCAxOSwgNjQsIDIyMSwgMTUxLCAxOCwgMTksIDY0LCAyMjEsIDE1MCwgCisgICAgMTgsIDE5LCA2NCwgMjIxLCAxNDksIDE4LCAxOSwgNjQsIDIyMSwgMTUyLCAxOCwgMTksIDY0LCAyMjEsIDE0MiwgMTgsIDE5LCAKKyAgICA2NCwgMjIxLCAxNDMsIDE4LCAxOSwgNjQsIDIyMSwgMTU0LCAxOCwgMTksIDY0LCAyMjEsIDE1MywgMTgsIDE5LCA2NCwgCisgICAgMjIxLCAxNDQsIDE4LCAxOSwgNjQsIDIyMSwgMTU1LCAxOCwgMTksIDY0LCAyMTcsIDEzLCAxOCwgMTksIDY0LCAyMTcsIDIxLCAKKyAgICAxOCwgMTksIDY0LCAyMTcsIDkyLCAxOCwgMTksIDY0LCAyMTcsIDkwLCAxOCwgMTksIDY0LCAyMTcsIDQyLCAxOCwgMTksIAorICAgIDY0LCAyMTcsIDExNCwgMTgsIDE5LCA2NCwgMjE3LCAxNTcsIDE4LCAxOSwgNjQsIDY2LCAyMTcsIDE1NywgMTgsIDE5LCA2NCwgCisgICAgMjQ3LCA2NSwgMTgsIDE5LCA2NCwgMjQ3LCA2NiwgMTgsIDE5LCA2NCwgMjQ3LCA3MywgMTgsIDE5LCA2NCwgMjQ3LCA3MiwgCisgICAgMTgsIDE5LCA2NCwgMjQ3LCA2OCwgMTgsIDE5LCA2NCwgMjQ3LCA3NCwgMTgsIDE5LCA2NCwgMjIzLCAxMDMsIDE4LCAxOSwgCisgICAgNjQsIDIyNCwgMjYsIDE4LCAxOSwgNjQsIDIyNiwgOTQsIDE4LCAxOSwgNjQsIDIyNiwgODQsIDE4LCAxOSwgNjQsIDIyNCwgCisgICAgMTQwLCAxOCwgMTksIDY0LCAyMjYsIDE3NywgMTgsIDE5LCA2NCwgMjI0LCAxNzAsIDE4LCAxOSwgNjQsIDIyNCwgMjAwLCAKKyAgICAxOCwgMTksIDY0LCAyMjQsIDI0NiwgMTgsIDE5LCA2NCwgMjI0LCAyNDQsIDE4LCAxOSwgNjQsIDIyNCwgMjIxLCAxOCwgMTksIAorICAgIDY0LCAyMjUsIDI1LCAxOCwgMTksIDY0LCAyMjUsIDI3LCAxOCwgMTksIDY0LCAyMjEsIDM2LCAxOCwgMTksIDY0LCAyMjEsIAorICAgIDM4LCAxOCwgMTksIDY0LCAyMjEsIDUwLCAxOCwgMTksIDY0LCAyMjEsIDQ5LCAxOCwgMTksIDY0LCAyMjEsIDM5LCAxOCwgCisgICAgMTksIDY0LCAyMjEsIDU1LCAxOCwgMTksIDY0LCAyNTAsIDI1MywgMTgsIDE5LCA2NCwgMjUxLCAxMSwgMTgsIDE5LCA2NCwgCisgICAgMjUxLCA0NiwgMTgsIDE5LCA2NCwgMjUxLCA0MywgMTgsIDE5LCA2NCwgMjUxLCAzMSwgMTgsIDE5LCA2NCwgMjUxLCA2OSwgCisgICAgMTgsIDE5LCA2NCwgMjIxLCA1LCAxOCwgMTksIDY0LCAyMjEsIDYsIDE4LCAxOSwgNjQsIDIyMSwgOSwgMTgsIDE5LCA2NCwgCisgICAgMjIxLCA4LCAxOCwgMTksIDY0LCAyMjEsIDcsIDE4LCAxOSwgNjQsIDIyMSwgMTAsIDE4LCAxOSwgMjUxLCAzMiwgNTUsIDE4LCAKKyAgICAxOSwgMjQ1LCA5MCwgMjIzLCAxMzYsIDE4LCAxOSwgMjI4LCAxNDcsIDE4LCAxOSwgMjMyLCAxMTIsIDE4LCAxOSwgMjMxLCAKKyAgICAyMTIsIDE4LCAxOSwgMjMxLCAyMTEsIDE4LCAxOSwgMjMxLCAyMTAsIDE4LCAxOSwgMjMxLCAyMDksIDE4LCAxOSwgMjMxLCAKKyAgICAyMTQsIDE4LCAxOSwgMjMxLCAyMTMsIDE4LCAxOSwgMjE4LCAxNzgsIDIyMSwgMjEzLCAxOCwgMTksIDIxOCwgMTc4LCAyMjEsIAorICAgIDIxMiwgMTgsIDE5LCAyMTgsIDE3OCwgMjIxLCAyMTEsIDE4LCAxOSwgMjE4LCAxNzgsIDIyMSwgMjEwLCAxOCwgMTksIDIxOCwgCisgICAgMTc4LCAyMjEsIDIwOSwgMTgsIDE5LCAyMTgsIDE3OCwgMjIxLCAyMTYsIDE4LCAxOSwgMjE4LCAxNzgsIDIyMSwgMjE1LCAKKyAgICAxOCwgMTksIDIxOCwgMTc4LCAzOSwgMjIyLCAzNywgMTgsIDE5LCAyNTIsIDUwLCAyMTksIDQwLCAyMzAsIDE2NCwgMjIzLCAKKyAgICAyNTUsIDc4LCAyMzAsIDE2NCwgMSwgMjUyLCAxMjIsIDIzMCwgMTY0LCAxLCAyMzQsIDIyMiwgMjMwLCAxNjQsIDEsIDI0NSwgCisgICAgMjMwLCAyMzAsIDE2NCwgMSwgMjI2LCAxNjEsIDIzMCwgMTY0LCAxLCAyMzIsIDI1LCAyMzAsIDE2NCwgMSwgMjIwLCAxMjIsIAorICAgIDIzMCwgMTY0LCAxLCAyNDksIDE4NSwgMjMwLCAxNjQsIDEsIDIyMSwgMTczLCAyMzAsIDE2NCwgMSwgMjUwLCAxNzcsIDIzMCwgCisgICAgMTY0LCAxLCAyNTEsIDg5LCAyMzAsIDE2NCwgMSwgMjMzLCA5MSwgMjMwLCAxNjQsIDEsIDI0NCwgNTMsIDIzMCwgMTY0LCAxLCAKKyAgICAyMzIsIDEwNSwgMjMwLCAxNjQsIDEsIDIyMywgMTMxLCAyMzAsIDE2NCwgMSwgMjI3LCAxOCwgMjMwLCAxNjQsIDEsIDI1NCwgCisgICAgMTkzLCAyMzAsIDE2NCwgMSwgMjMwLCAxMzEsIDIzMCwgMTY0LCAxLCAyMjAsIDUwLCAyMzAsIDE2NCwgMSwgMjQ3LCAxNCwgCisgICAgMjMwLCAxNjQsIDEsIDIzNywgMTY1LCAyMzAsIDE2NCwgMSwgMjQ3LCAxNSwgMjMwLCAxNjQsIDEsIDIzMCwgMTA1LCAyMzAsIAorICAgIDE2NCwgMSwgMjIwLCAxMDMsIDIzMCwgMTY0LCAxLCAyMzgsIDUsIDIzMCwgMTY0LCAxLCAyNDcsIDEyLCAyMzAsIDE2NCwgMSwgCisgICAgMjI5LCAxODQsIDIzMCwgMTY0LCAyNDUsIDIyOSwgNzgsIDIzMCwgMTY0LCAyMTAsIDI0NSwgMjI5LCA3OCwgMTU3LCAxLCAKKyAgICAyNDUsIDIyMCwgMjQ1LCAyMTIsIDI0NSwgMjMyLCAyNDYsIDc0LCAxNTcsIDEsIDIxNiwgMjE2LCAxNTcsIDEsIDIyMCwgMzYsIAorICAgIDIyMCwgNTEsIDY4LCAxNTcsIDEsIDIxNywgMjAyLCAxNTcsIDEsIDIxOCwgOTAsIDE1NywgMSwgMjE5LCA0MCwgMTU3LCAxLCAKKyAgICAyMjEsIDIxOCwgMjIxLCAyMTcsIDIyMSwgMjM0LCAxNTcsIDEsIDI0NiwgMTE4LCAxNTcsIDEsIDI1NCwgMTA2LCA2MCwgCisgICAgMTU3LCAxLCAyMzAsIDk0LCA3NCwgMTU3LCAxLCAyNTUsIDMsIDYwLCAxNTcsIDEsIDI1NCwgMjE5LCAxNTcsIDEsIDIzNCwgCisgICAgMjU0LCA3NCwgMTU3LCAxLCAyMjQsIDE4NSwgNzQsIDE1NywgMSwgNzQsIDE1NywgMSwgMjMwLCAxNjcsIDE1NywgMSwgMjMwLCAKKyAgICAxMzgsIDE1NywgMSwgMjI3LCAyNDQsIDIyNywgMjUzLCAyMjcsIDE5NSwgMTUyLCAxNTcsIDEsIDIzNiwgMTk1LCAxNTcsIDEsIAorICAgIDI1MSwgODcsIDE1NywgMSwgMjM2LCAxOTYsIDIzNywgMTcsIDE1NywgMSwgMjQ1LCA2NywgMTU3LCAxLCAyNDYsIDE4NSwgCisgICAgMTU3LCAxLCAyNDQsIDE4NywgMjQzLCAyMzEsIDI0NSwgNjcsIDE1NywgMSwgMjQ0LCAyMjAsIDE1NywgMSwgMjE4LCAxNjAsIAorICAgIDIxOCwgMTU1LCAyMTksIDQwLCAxNTcsIDEsIDI0MywgMjAzLCAyNDMsIDIyNSwgMTU3LCAxLCAyNDMsIDIwNywgMjQzLCAKKyAgICAyMjUsIDE1NywgMSwgMjM1LCAwLCAyNDMsIDIyNSwgMTU3LCAxLCAyMjQsIDE4OCwgMjQzLCAyMjUsIDE1NywgMSwgMjMyLCAKKyAgICAyMDMsIDIzMSwgNzQsIDIzMiwgMjA0LCAyMDcsIDE1NywgMSwgMjI0LCAxODYsIDIwNywgMTU3LCAxLCAyNDcsIDE0MCwgCisgICAgMTU3LCAxLCAyMzcsIDE0OCwgMjM3LCAxNTIsIDIzNywgMTQyLCA3MiwgMTU3LCAxLCA3MywgMTU3LCAxLCAyMzcsIDEwNiwgCisgICAgMjM3LCAxMjYsIDE1NywgMSwgMjQ0LCAxNzMsIDE1NywgMSwgMjM1LCAxLCAyNTQsIDIzNCwgMTU3LCAxLCAyMjQsIDE5MCwgCisgICAgNjAsIDE1NywgMSwgMjM3LCAxMzUsIDI0NiwgMTY0LCAxNTcsIDEsIDIyOSwgMTU1LCAyMjksIDE3MywgMjMwLCA1OSwgMTU3LCAKKyAgICAxLCAyNTQsIDE2MiwgMjQ2LCAxNjMsIDE1NywgMSwgMjI0LCAzLCAxOTgsIDE1NywgMSwgMjI0LCAxMjksIDIzNCwgMjUzLCAKKyAgICAxOTgsIDE1NywgMSwgMjI0LCAxODQsIDE5OCwgMTU3LCAxLCAyNTEsIDIwMiwgMTU3LCAxLCAyMTcsIDE1NywgMTU3LCAxLCAKKyAgICAyMjEsIDE1OSwgMjIxLCAxNjYsIDIyMCwgMTkwLCAyMjIsIDIwMSwgMTU3LCAxLCAyMjQsIDE4MywgMjIyLCAyMDEsIDE1NywgCisgICAgMSwgMjUwLCA0NiwgMTU3LCAxLCAyNTIsIDEwNywgMjUyLCAxMTAsIDI1MiwgNTYsIDI1MywgMjA0LCAxNTcsIDEsIDIyNCwgCisgICAgMTg5LCAyNTMsIDIwNCwgMTU3LCAxLCAyNDcsIDEzOSwgMTU3LCAxLCAyMzAsIDExNSwgMTU3LCAxLCAyNDYsIDIzOCwgMjQ2LCAKKyAgICAyNDAsIDczLCAxNTcsIDEsIDIzNCwgODEsIDIzNCwgODcsIDE4OSwgMTU3LCAxLCAyMzQsIDI1NSwgMTg5LCAxNTcsIDEsIAorICAgIDIyNCwgMTg3LCAxODksIDE1NywgMSwgMjM1LCAxMzYsIDIzNSwgMTcxLCAyMzUsIDQsIDE1MywgMTU3LCAxLCAyNDcsIDE0MSwgCisgICAgMTU3LCAxLCAyMzcsIDIwMywgMTU3LCAxLCAyMzcsIDIwNCwgMTU3LCAxLCAyNDksIDE5NiwgMjQ5LCAyMDEsIDI1MCwgNDYsIAorICAgIDE1NywgMSwgMjMwLCA5MCwgMjQ2LCAxMTcsIDc0LCAxNTcsIDEsIDI0NywgMTEsIDE1NywgMSwgMjM3LCAxNjQsIDE1NywgMSwgCisgICAgMjUwLCA2MywgMTU3LCAxLCAyNTEsIDE2MCwgMTU3LCAxLCAyNTEsIDk4LCAxNTcsIDEsIDIyMywgMTYxLCAxNTcsIDEsIAorICAgIDIzNCwgMjUyLCAxNTcsIDEsIDIyNCwgMTgyLCAxNTcsIDEsIDI0MiwgNjQsIDE1NywgMSwgMjI4LCAxNjMsIDE1NywgMSwgCisgICAgMjE4LCAxNTEsIDE1NywgMjI0LCAxMDksIDIyOCwgMTk2LCAxNTcsIDIzMywgODUsIDIyOCwgMTk2LCAxNTcsIDI1MCwgMTAxLCAKKyAgICAyMjgsIDE5NiwgMTU3LCAyNTQsIDMzLCAxMDAsIDE1NywgMjIwLCAyMjcsIDEwMCwgMTU3LCAyNTIsIDEyMSwgMTAwLCAyMjIsIAorICAgIDE0MCwgMSwgNjAsIDIyMiwgMTQwLCAxLCA3MiwgMjIyLCAxNDAsIDEsIDY4LCAyMjIsIDE0MCwgMSwgMTc1LCAyMjIsIDE0MCwgCisgICAgMSwgMjQ1LCAwLCAyMjIsIDE0MCwgMSwgMjMyLCAxMTUsIDIyMiwgMTQwLCAxLCAyMjIsIDE1NSwgMjIyLCAxNDAsIDEsIAorICAgIDI0OSwgMjA3LCAyMjIsIDE0MCwgMSwgMjA4LCAyMjIsIDE0MCwgMSwgMTg3LCAyMjIsIDE0MCwgMSwgMjUyLCAyMzcsIDIyMiwgCisgICAgMTQwLCAxLCAxOTYsIDIyMiwgMTQwLCAxLCAxODQsIDIyMiwgMTQwLCAxLCAyMzUsIDE4OCwgMjIyLCAxNDAsIDEsIDIxOSwgCisgICAgNywgMjIyLCAxNDAsIDEsIDIyNiwgMTc3LCAyMjIsIDE0MCwgMSwgMTU1LCAyMjIsIDE0MCwgMjksIDUsIDcyLCAyMjIsIAorICAgIDE0MCwgMjksIDUsIDY4LCAyMjIsIDE0MCwgNSwgMjE5LCA4MiwgMjQzLCAxODQsIDEsIDYwLCAyNDMsIDE4NCwgMSwgNzIsIAorICAgIDI0MywgMTg0LCAxLCA2OCwgMjQzLCAxODQsIDEsIDE3NSwgMjQzLCAxODQsIDEsIDI0NSwgMCwgMjQzLCAxODQsIDEsIDIzMiwgCisgICAgMTE1LCAyNDMsIDE4NCwgMSwgMjIyLCAxNTUsIDI0MywgMTg0LCAxLCAyNDksIDIwNywgMjQzLCAxODQsIDEsIDIwOCwgMjQzLCAKKyAgICAxODQsIDEsIDE4NywgMjQzLCAxODQsIDEsIDI1MiwgMjM3LCAyNDMsIDE4NCwgMSwgMTk2LCAyNDMsIDE4NCwgMSwgMTg0LCAKKyAgICAyNDMsIDE4NCwgMSwgMjAzLCAyNDMsIDE4NCwgMSwgMjM1LCAxODgsIDI0MywgMTg0LCAxLCAyMTksIDcsIDI0MywgMTg0LCAKKyAgICAxLCAyMjYsIDE3NywgMjQzLCAxODQsIDEsIDE1NSwgMjQzLCAxODQsIDI5LCA1LCA3MiwgMjQzLCAxODQsIDI5LCA1LCA2OCwgCisgICAgMjQzLCAxODQsIDUsIDIzMCwgMTQsIDIyOSwgMTIyLCAyMjQsIDEwOSwgMjI4LCAxOTYsIDIyOSwgMTIyLCA1MSwgMjI4LCAKKyAgICAxOTYsIDI1MSwgMjQ1LCAxLCA2MCwgMjUxLCAyNDUsIDEsIDcyLCAyNTEsIDI0NSwgMSwgNjgsIDI1MSwgMjQ1LCAxLCAxNzUsIAorICAgIDI1MSwgMjQ1LCAxLCAyNDUsIDAsIDI1MSwgMjQ1LCAxLCAyMzIsIDExNSwgMjUxLCAyNDUsIDEsIDIyMiwgMTU1LCAyNTEsIAorICAgIDI0NSwgMSwgMjQ5LCAyMDcsIDI1MSwgMjQ1LCAxLCAyMDgsIDI1MSwgMjQ1LCAxLCAxODcsIDI1MSwgMjQ1LCAxLCAyNTIsIAorICAgIDIzNywgMjUxLCAyNDUsIDEsIDE5NiwgMjUxLCAyNDUsIDEsIDE4NCwgMjUxLCAyNDUsIDEsIDIwMywgMjUxLCAyNDUsIDEsIAorICAgIDIzNSwgMTg4LCAyNTEsIDI0NSwgMSwgMjE5LCA3LCAyNTEsIDI0NSwgMSwgMjI2LCAxNzcsIDI1MSwgMjQ1LCAxLCAxNTUsIAorICAgIDI1MSwgMjQ1LCAyOSwgNSwgNzIsIDI1MSwgMjQ1LCAyOSwgNSwgNjgsIDIyMiwgMTM5LCAxLCA2MCwgMjIyLCAxMzksIDEsIAorICAgIDcyLCAyMjIsIDEzOSwgMSwgNjgsIDIyMiwgMTM5LCAxLCAxNzUsIDIyMiwgMTM5LCAxLCAyNDUsIDAsIDIyMiwgMTM5LCAxLCAKKyAgICAyMzIsIDExNSwgMjIyLCAxMzksIDEsIDIyMiwgMTU1LCAyMjIsIDEzOSwgMSwgMjQ5LCAyMDcsIDIyMiwgMTM5LCAxLCAyMDgsIAorICAgIDIyMiwgMTM5LCAxLCAxODcsIDIyMiwgMTM5LCAxLCAyNTIsIDIzNywgMjIyLCAxMzksIDEsIDE5NiwgMjIyLCAxMzksIDEsIAorICAgIDE4NCwgMjIyLCAxMzksIDEsIDIzNSwgMTg4LCAyMjIsIDEzOSwgMSwgMjE5LCA3LCAyMjIsIDEzOSwgMSwgMjI2LCAxNzcsIAorICAgIDIyMiwgMTM5LCAyOSwgNSwgNzIsIDIyMiwgMTM5LCAyOSwgNSwgNjgsIDc5LCAxLCAxNzUsIDc5LCAxLCAyMzYsIDE0OSwgCisgICAgNzksIDEsIDIzNiwgNTcsIDc5LCAxLCAyMzYsIDEyNSwgNzksIDEsIDIzMiwgODQsIDc5LCAxLCAyNTEsIDE2OSwgNzksIDEsIAorICAgIDI1MSwgNjksIDc5LCAxLCAyNTAsIDE4MiwgNzksIDEsIDI1MSwgMTEsIDc5LCAxLCAyMzEsIDU2LCA3OSwgMSwgMjQ5LCAKKyAgICAyMDcsIDc5LCAxLCAyMjEsIDE5LCA3OSwgMSwgMjQ4LCAxNjcsIDc5LCAxLCAyMjEsIDE1LCA3OSwgMSwgMjMxLCAyMDcsIAorICAgIDc5LCAxLCAyMjIsIDE1NSwgNzksIDEsIDIyMiwgMzUsIDc5LCAxLCAxMDEsIDc5LCAxLCAyMjEsIDIzOSwgNzksIDEsIDIzMSwgCisgICAgMjA0LCA3OSwgMSwgMjUyLCAyMzcsIDc5LCAxLCAyMjksIDE0MSwgNzksIDEsIDIyOSwgMzcsIDc5LCAxLCAyMjksIDExOCwgCisgICAgNzksIDEsIDIzMywgMTM2LCA3OSwgMSwgMjE3LCAyMzEsIDc5LCAxLCAyMjcsIDc1LCA3OSwgMSwgMjM1LCAxMiwgNzksIDEsIAorICAgIDIxOSwgNzIsIDc5LCAxLCAyMjUsIDI1LCA3OSwgMSwgMjIzLCAxODIsIDc5LCAxLCAyMjYsIDE3NywgNzksIDEsIDE1NSwgCisgICAgNzksIDEsIDIzNSwgMTg4LCA3OSwgMSwgMjI4LCAxNTUsIDc5LCAyMzcsIDIxNCwgMjksIDIyOCwgMTQxLCA3OSwgMjM3LCAKKyAgICAyMTQsIDI5LCAyMjgsIDE1NCwgNzksIDIzNywgMjE0LCAyOSwgMjI4LCAxMjEsIDc5LCAyMzcsIDIxNCwgMjksIDIyOCwgCisgICAgMTE2LCA3OSwgMjM3LCAyMTQsIDI5LCAyMjgsIDk4LCA3OSwgMjM3LCAyMTQsIDI5LCAyMjgsIDczLCA3OSwgMjM3LCAyMTQsIAorICAgIDI5LCAyMjgsIDYxLCA3OSwgMjM3LCAyMTQsIDI5LCAyMjgsIDYwLCA3OSwgMjM3LCAyMTQsIDI5LCAyMjYsIDI0MywgNzksIAorICAgIDIzNywgMjE0LCAyOSwgMjI2LCAyMzYsIDc5LCAyMzcsIDIxNCwgMjksIDIzNCwgMTk4LCA3OSwgMjM3LCAyMTQsIDI5LCAKKyAgICAyMzQsIDE4OSwgNzksIDIzNywgMjE0LCAyOSwgMjI4LCAxMzYsIDc5LCAyMzcsIDIxNCwgMjksIDIyOCwgMTQ3LCA3OSwgCisgICAgMjM3LCAyMTQsIDI5LCAyMjgsIDEwNiwgMjIwLCAxOTgsIDEwNywgNzksIDIzNywgMjE0LCAyOSwgMjI4LCAxMDYsIDIyMCwgCisgICAgMTk4LCAxMDMsIDc5LCAyMzcsIDIxNCwgMjksIDIyOCwgMTM3LCA3OSwgMjksIDIzNywgMjAyLCAyNTQsIDY5LCA3OSwgMjksIAorICAgIDIzNywgMjAyLCAyNTUsIDU4LCA3OSwgMjksIDUsIDI1NSwgNTgsIDc5LCAyOSwgNSwgNzIsIDc5LCAyOSwgNSwgMjM3LCAKKyAgICAyNTUsIDc5LCAyOSwgNSwgMjE4LCA5MCwgNzksIDI5LCA1LCAyMTcsIDE2NiwgNzksIDI5LCA1LCA2OCwgNzksIDI5LCA1LCAKKyAgICAyMjAsIDIzLCA3OSwgMjksIDUsIDIyMCwgMTIzLCA3OSwgMjksIDUsIDIzMCwgMTY3LCA3OSwgMjksIDUsIDE4NCwgNzksIAorICAgIDI5LCA1LCAyMzgsIDI2LCA3OSwgMjksIDUsIDczLCA3OSwgMjksIDUsIDI1NCwgMjM0LCA3OSwgMjksIDUsIDI1NCwgMTk2LCAKKyAgICA3OSwgMjksIDUsIDIzMCwgMTI3LCA3OSwgMjksIDUsIDI1MywgMjMyLCA3OSwgNSwgMjMyLCAzNywgNzksIDUsIDIyNywgCisgICAgMjE0LCA3OSwgNSwgMjE3LCAxNzYsIDc5LCA1LCAyMzMsIDU1LCA3OSwgNSwgMjIxLCA4MCwgNzksIDUsIDI1MiwgMjAzLCAKKyAgICA3OSwgNSwgMjI3LCA3MSwgNzksIDUsIDIyMSwgMTM4LCA3OSwgNSwgMjM2LCAyMzksIDc5LCA1LCAyNTQsIDE5OCwgNzksIDUsIAorICAgIDIyNiwgMTQxLCAyMjYsIDEzNywgNzksIDUsIDIxOSwgNzksIDc5LCA1LCAyNTAsIDE3OSwgNzksIDUsIDI1MiwgMTgzLCA3OSwgCisgICAgNSwgMjM2LCAxNDIsIDc5LCA1LCAyNTIsIDE5OSwgNzksIDUsIDI1MSwgMTU2LCAyMjksIDc3LCAyMzUsIDIzOSwgNzksIDUsIAorICAgIDIzNSwgMTAwLCAyMjEsIDEyMiwgNzksIDUsIDI1MiwgOTYsIDc5LCA1LCAyMjksIDEyMCwgMjMzLCA5NywgNzksIDUsIDIzNiwgCisgICAgNDAsIDc5LCAyNTAsIDc4LCAxNiwgMjI3LCAxNDIsIDc5LCA1LCAyNTMsIDIxOCwgNzksIDUsIDI1MywgMjM1LCA3OSwgMjAsIAorICAgIDIxNywgODQsIDc5LCAyMCwgMTA3LCA3OSwgMjAsIDEwMywgNzksIDIwLCAxNjAsIDc5LCAyMCwgMTU0LCA3OSwgMjAsIDE3NCwgCisgICAgNzksIDIwLCAxODIsIDc5LCAyMCwgMTkxLCA3OSwgMjAsIDE4NSwgNzksIDIwLCAxOTAsIDc5LCAxNiwgMjM1LCAxMDAsIAorICAgIDI1MywgMjM3LCAyMjQsIDE2LCA3OSwgMTYsIDIzNSwgMTAwLCAyNTMsIDIzNywgMjMzLCA3MiwgNzksIDE2LCAyMzUsIDEwMCwgCisgICAgMjUzLCAyMzcsIDIyOSwgNzYsIDc5LCAxNiwgMjM1LCAxMDAsIDI1MywgMjM3LCAyNTIsIDEyMywgNzksIDE2LCAyMzUsIAorICAgIDEwMCwgMjUzLCAyMzcsIDI1MSwgMjMzLCA3OSwgMTYsIDIzNSwgMTAwLCAyNTMsIDIzNywgMjI5LCAxLCA3OSwgMTYsIDIzNSwgCisgICAgMTAwLCAyNTMsIDIzNywgMjI4LCAyNTEsIDc5LCAxNiwgMjM1LCAxMDAsIDI1MywgMjM3LCAyMjgsIDI0OSwgNzksIDE2LCAKKyAgICAyMzUsIDEwMCwgMjUzLCAyMzcsIDIyOCwgMjU1LCA3OSwgMTYsIDIzNSwgMTAwLCAyNTMsIDIzNywgMjI4LCAyNTMsIDc3LCAKKyAgICAyNTIsIDY2LCA3NywgMjQ2LCAyMDgsIDc3LCAyNTAsIDE2OCwgNzcsIDI0NSwgOTAsIDIyMywgMTM2LCA3NywgMjUwLCAxNzUsIAorICAgIDc3LCAyNDUsIDExNiwgMjQ4LCAxNDMsIDc3LCAyMjEsIDEzNywgMjI0LCAyMSwgMjQyLCAxMjEsIDc3LCAyMjQsIDEzOSwgNCwgCisgICAgMjUyLCAyNiwgMjM0LCA2MywgNzcsIDIzNCwgODQsIDI1MCwgMTY4LCA3NywgMjM0LCA4NCwgMjQ1LCA5MCwgMjIzLCAxMzYsIAorICAgIDc3LCAyMzIsIDIzLCA3NywgMjQ1LCAxMDMsIDQxLCAyMjYsIDc0LCAxMDcsIDc3LCAyNDUsIDEwMywgNDEsIDIyNiwgNzQsIAorICAgIDEwMywgNzcsIDI0NSwgMTAzLCA0MSwgMjI2LCA3NCwgMTYwLCA3NywgMjksIDIyNSwgNTQsIDc3LCAyMCwgMjE3LCA4NCwgCisgICAgNzcsIDIwLCAxMDcsIDc3LCAyMCwgMTAzLCA3NywgMjAsIDE2MCwgNzcsIDIwLCAxNTQsIDc3LCAyMCwgMTc0LCA3NywgMjAsIAorICAgIDE4MiwgNzcsIDIwLCAxOTEsIDc3LCAyMCwgMTg1LCA3NywgMjAsIDE5MCwgNzcsIDEsIDYwLCA3NywgMSwgNzMsIDc3LCAxLCAKKyAgICA3MiwgNzcsIDEsIDc0LCA3NywgMSwgNjgsIDc3LCAxLCAyMzAsIDE2NywgNzcsIDEsIDIyMCwgMTEwLCA3NywgMSwgMjQ2LCAKKyAgICAyNTAsIDc3LCAxLCAyMDgsIDc3LCAxLCAyNTQsIDEyMywgNzcsIDEsIDI1MiwgMjM3LCA3NywgMSwgMTg3LCA3NywgMSwgCisgICAgMjI4LCAxNTUsIDc3LCAxLCAyNDUsIDAsIDc3LCAxLCAxOTYsIDc3LCAxLCAyMzUsIDE4OCwgNzcsIDEsIDIyNiwgMTc3LCAKKyAgICA3NywgMSwgMjI1LCAyNSwgNzcsIDEsIDIyMiwgMTU1LCA3NywgMSwgMjQ5LCAyMDcsIDc3LCAxLCAyNTEsIDY5LCA3NywgMSwgCisgICAgMjM3LCAxMjMsIDc3LCAxLCAxODQsIDc3LCAxLCAyMDMsIDc3LCAxLCAyMTksIDcsIDc3LCAxLCAyNDYsIDgsIDc3LCAxLCAKKyAgICAxNzUsIDc3LCAxLCAyMzYsIDE0OSwgNzcsIDEsIDIyMSwgNTUsIDc3LCAxLCAyMTcsIDExNCwgNzcsIDEsIDI0MywgMjExLCAKKyAgICA3NywgMSwgMjE3LCAxNCwgNzcsIDEsIDIzNSwgNzksIDc3LCAxLCAyMTcsIDY3LCA3NywgMSwgMjUxLCAzMSwgNzcsIDEsIAorICAgIDIyMSwgMTM3LCAxNzEsIDI5LCA1NSwgNzcsIDEsIDIyMSwgMTM3LCA3MywgNzcsIDEsIDIyMSwgMTM3LCA3MiwgNzcsIDEsIAorICAgIDIyMSwgMTM3LCA3NCwgNzcsIDEsIDIyMSwgMTM3LCA2OCwgNzcsIDEsIDIyMSwgMTM3LCAyMzAsIDE2NywgNzcsIDEsIDIyMSwgCisgICAgMTM3LCAyMjAsIDExMCwgNzcsIDEsIDIyMSwgMTM3LCAyNTQsIDEyMywgNzcsIDEsIDIyMSwgMTM3LCAyNTIsIDIzNywgNzcsIAorICAgIDEsIDIyMSwgMTM3LCAxODcsIDc3LCAxLCAyMjEsIDEzNywgMjI4LCAxNTUsIDc3LCAxLCAyMjEsIDEzNywgMjQ1LCAwLCA3NywgCisgICAgMSwgMjIxLCAxMzcsIDE5NiwgNzcsIDEsIDIyMSwgMTM3LCAyMjIsIDE1NSwgNzcsIDEsIDIyMSwgMTM3LCAyNDksIDIwNywgCisgICAgNzcsIDEsIDIyMSwgMTM3LCAyNTEsIDY5LCA3NywgMSwgMjIxLCAxMzcsIDIzNywgMTIzLCA3NywgMSwgMjIxLCAxMzcsIAorICAgIDIyMSwgNTUsIDc3LCAxLCAyMjEsIDEzNywgMTg0LCA3NywgMSwgMjIxLCAxMzcsIDIxOSwgNywgNzcsIDEsIDIyMSwgMTM3LCAKKyAgICAxNzUsIDc3LCAxLCAyMjEsIDEzNywgMjQ0LCAyNTMsIDc3LCAxLCAyMjEsIDEzNywgMjQzLCAyMTEsIDc3LCAxLCAyMjEsIAorICAgIDEzNywgMjM3LCA5NywgNzcsIDEsIDIyMSwgMTM3LCAyMzIsIDYwLCA3NywgMSwgMjIxLCAxMzcsIDI0NywgNzQsIDc3LCAxLCAKKyAgICAyMjQsIDEzOSwgNzMsIDc3LCAxLCAyMjQsIDEzOSwgNzIsIDc3LCAxLCAyMjQsIDEzOSwgMjM3LCAxMzMsIDc3LCAxLCAyMjQsIAorICAgIDEzOSwgMjIwLCAxMTAsIDc3LCAxLCAyMjQsIDEzOSwgNjgsIDc3LCAxLCAyMjQsIDEzOSwgMjU0LCAxMjMsIDc3LCAxLCAKKyAgICAyMjQsIDEzOSwgMTc1LCA3NywgMSwgMjI0LCAxMzksIDI0NSwgMCwgNzcsIDEsIDIyNCwgMTM5LCAxNTUsIDc3LCAxLCAyMjQsIAorICAgIDEzOSwgMTg3LCA3NywgMSwgMjI0LCAxMzksIDIyNSwgMjUsIDc3LCAxLCAyMjQsIDEzOSwgMjIyLCAxNTUsIDc3LCAxLCAKKyAgICAyMjQsIDEzOSwgMjQ5LCAyMDcsIDc3LCAxLCAyMjQsIDEzOSwgMjM3LCAxMjMsIDc3LCAxLCAyMjQsIDEzOSwgMjQ2LCA4LCAKKyAgICA3NywgMSwgMjI0LCAxMzksIDI0NCwgMjUzLCA3NywgMSwgMjI0LCAxMzksIDI0MywgMjExLCA3NywgMSwgMjI0LCAxMzksIAorICAgIDIyMSwgNTUsIDc3LCAxLCAyMjQsIDEzOSwgMjE3LCAxMTQsIDc3LCAxLCAyMjQsIDEzOSwgMjI4LCAwLCA3NywgMSwgMjI0LCAKKyAgICAxMzksIDI1MSwgNjksIDc3LCAxLCAyMjQsIDEzOSwgMjE3LCA4MCwgNzcsIDEsIDIzNCwgODQsIDcyLCA3NywgMSwgMjM0LCAKKyAgICA4NCwgMTc1LCA3NywgMSwgMjM0LCA4NCwgMjAzLCA3NywgMSwgMjM0LCA4NCwgMjQ2LCA4LCA3NywgMSwgMjM0LCA4NCwgCisgICAgMjE3LCA4MCwgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjU0LCA5NiwgMTA3LCA3NywgMSwgMjU0LCAxNjEsIDI0NCwgCisgICAgMjM4LCAyMTksIDc4LCAxMDcsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDI0OSwgMTc0LCA3NywgMSwgMjU0LCAxNjEsIAorICAgIDI0NCwgMjM4LCAyMjAsIDEyMCwgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjM3LCAxNzAsIDIyMCwgMTIwLCA3NywgMSwgCisgICAgMjU0LCAxNjEsIDI0NCwgMjM4LCAyNTIsIDIxMiwgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMTQ4LCAyNTIsIDIxMiwgCisgICAgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIDIzOCwgNjAsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDcyLCA3NywgMSwgMjU0LCAKKyAgICAxNjEsIDI0NCwgMjM4LCAxNzUsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDIzMiwgMTE1LCA3NywgMSwgMjU0LCAxNjEsIAorICAgIDI0NCwgMjM4LCAyNTEsIDE2OSwgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjIxLCAyOSwgNzcsIDEsIDI1NCwgMTYxLCAKKyAgICAyNDQsIDIzOCwgMjIxLCAxOSwgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjQ5LCAxMzIsIDc3LCAxLCAyNTQsIDE2MSwgCisgICAgMjQ0LCAyMzgsIDIzMSwgMjE3LCA3NywgMSwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMjIsIDE1NSwgNzcsIDEsIDI1NCwgMTYxLCAKKyAgICAyNDQsIDIzOCwgMjQ5LCAyMDcsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDE4NywgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIAorICAgIDIzOCwgMjI5LCAxNDEsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDIyMywgMjE4LCA3NywgMSwgMjU0LCAxNjEsIDI0NCwgCisgICAgMjM4LCAyMTcsIDgwLCA3NywgMSwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMTcsIDExNCwgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIAorICAgIDIzOCwgMjU0LCAyMDIsIDc3LCAxLCAyMjEsIDEzNywgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMjIsIDE1NSwgNzcsIDEsIDIyMSwgCisgICAgMTM3LCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDIxNywgODAsIDc3LCAxLCAyMzQsIDg0LCAyNTQsIDE2MSwgMjQ0LCAyMzgsIAorICAgIDI0NCwgMTI1LCA3NywgMSwgMjM0LCA4NCwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMzIsIDExNSwgNzcsIDEsIDIzNCwgODQsIAorICAgIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjUxLCAxNjksIDc3LCAxLCAyMzQsIDg0LCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDIzNywgCisgICAgMTAzLCA3NywgMSwgMjM0LCA4NCwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMjEsIDI5LCA3NywgMSwgMjM0LCA4NCwgMjU0LCAKKyAgICAxNjEsIDI0NCwgMjM4LCAyNDksIDExNiwgNzcsIDEsIDIzNCwgODQsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjIyLCAxNTUsIAorICAgIDc3LCAxLCAyMzQsIDg0LCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDI0OSwgMzYsIDc3LCAxLCAyMzQsIDg0LCAyNTQsIDE2MSwgCisgICAgMjQ0LCAyMzgsIDIyMywgMjE4LCA3NywgMSwgMjM0LCA4NCwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyNTAsIDU3LCA3NywgMSwgCisgICAgMjM0LCA4NCwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMTcsIDgwLCA3NywgMSwgMjM0LCA4NCwgMjU0LCAxNjEsIDI0NCwgMjM4LCAKKyAgICAyMTcsIDExNCwgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMTQ0LCA2OCwgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIDIzOCwgCisgICAgMTQ0LCAxODQsIDc3LCAxLCAyMzQsIDg0LCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDI1MiwgOTQsIDc3LCAxLCAyNTQsIDE2MSwgCisgICAgMjQ0LCAyMzgsIDI0OSwgMTk3LCA3NywgMSwgMjM0LCA4NCwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMzUsIDc5LCAxOCwgMTksIAorICAgIDIzMCwgNjMsIDE4LCAxOSwgMjUzLCAyMTIsIDE4LCAxOSwgMjU1LCAxNCwgMTgsIDE5LCAyMTgsIDIyOSwgMTgsIDE5LCAKKyAgICAyMjksIDcsIDE4LCAxOSwgMjI5LCAyMDUsIDE4LCAxOSwgMjI4LCAxNzIsIDE4LCAxOSwgMjIyLCA5NiwgMTgsIDE5LCAyMzYsIAorICAgIDE5MSwgMTgsIDE5LCAyMzUsIDIzMiwgMTgsIDE5LCAyMzQsIDQ1LCAxOCwgMTksIDIzMSwgMTcyLCAxOCwgMTksIDIzMiwgCisgICAgMTk5LCAxOCwgMTksIDIzNSwgMTMyLCAxOCwgMTksIDIyNCwgMSwgMTgsIDE5LCAyMjYsIDExOCwgMTgsIDE5LCAyMjQsIAorICAgIDE3NSwgMTgsIDE5LCAyMjQsIDI0OSwgMTgsIDE5LCAyMjQsIDE1MCwgMTgsIDE5LCAyMTcsIDIwOCwgMTgsIDE5LCAyMTgsIAorICAgIDMwLCAxOCwgMTksIDIyNywgMjIyLCAxOCwgMTksIDIzMSwgODIsIDE4LCAxOSwgMjMwLCAxNTUsIDIzMSwgODIsIDE4LCAxOSwgCisgICAgMjMxLCA4MSwgMTgsIDE5LCAyMzAsIDE1NSwgMjMxLCA4MSwgMTgsIDE5LCAyMzEsIDgwLCAxOCwgMTksIDIzMCwgMTU1LCAKKyAgICAyMzEsIDgwLCAxOCwgMTksIDIzMSwgNzksIDE4LCAxOSwgMjMwLCAxNTUsIDIzMSwgNzksIDE4LCAxOSwgMjI2LCAyNDgsIAorICAgIDE4LCAxOSwgMjI2LCAyNDcsIDE4LCAxOSwgMjI2LCAyNDYsIDE4LCAxOSwgMjI2LCAyNDUsIDE4LCAxOSwgMjI2LCAyNDQsIAorICAgIDE4LCAxOSwgMjI2LCAyNTIsIDE4LCAxOSwgMjMwLCAxNTUsIDIzMCwgNTksIDE4LCAxOSwgMjMwLCAxNTUsIDIyMiwgMjAxLCAKKyAgICAxOCwgMTksIDIzMCwgMTU1LCAyMzcsIDE3LCAxOCwgMTksIDIzMCwgMTU1LCAyNTEsIDIwMiwgMTgsIDE5LCAyMzAsIDE1NSwgCisgICAgMTg5LCAxOCwgMTksIDIzMCwgMTU1LCAyMDcsIDE4LCAxOSwgMjMwLCAxNTUsIDE5OCwgMTgsIDE5LCAyMzAsIDE1NSwgMjI1LCAKKyAgICAyNywgMTgsIDE5LCAyNDcsIDQsIDIxOSwgNDAsIDE4LCAxOSwgMjE4LCAyMTUsIDIxOSwgNDAsIDE4LCAxOSwgMzksIDMsIAorICAgIDIyNywgOTMsIDE4LCAxOSwgMzksIDIyNywgMjQxLCAyNDgsIDE0NSwgMTgsIDE5LCAyMjgsIDM4LCAyMjYsIDI0OSwgMTgsIAorICAgIDE5LCAxMzcsIDIzNCwgMjQ4LCAxOCwgMTksIDEzNywgMjM1LCAxODcsIDE4LCAxOSwgMjIxLCAyMTQsIDE4LCAxOSwgMjIxLCAKKyAgICAyMTYsIDE4LCAxOSwgMjIxLCAxMywgMTgsIDE5LCAyMjEsIDE0LCAxOCwgMTksIDIyMSwgMTgsIDE4LCAxOSwgMjIxLCAxNDUsIAorICAgIDE4LCAxOSwgMjIxLCAxNDcsIDE4LCAxOSwgMjI2LCAxMTYsIDIyNCwgMTU1LCAxOCwgMTksIDIyNiwgMTE2LCAyMjQsIDE5NSwgCisgICAgMTgsIDE5LCAyMjYsIDExNiwgMjQyLCAyNDgsIDE4LCAxOSwgNjQsIDI0MywgMjM4LCAxOCwgMTksIDY0LCAyNDksIDYwLCAKKyAgICAyNDQsIDE4NCwgMTgsIDE5LCA2NCwgMjQ0LCAyNTMsIDE4LCAxOSwgNjQsIDI0MywgMjQzLCAxOCwgMTksIDIyNiwgMTE2LCAKKyAgICAyMzcsIDI3LCAxOCwgMTksIDY0LCAyMzcsIDI1LCAxOCwgMTksIDI1MiwgMTM5LCAyNDksIDYwLCAxNTMsIDE4LCAxOSwgCisgICAgMjUyLCAxMzksIDI0OSwgNjAsIDE1MiwgMTgsIDE5LCA2NCwgMjQ5LCA1NSwgMTk4LCAxOTUsIDIxOSwgNTksIDIzNSwgODQsIAorICAgIDE5NSwgMSwgMTc1LCAxOTUsIDEsIDIzNiwgMTQ5LCAxOTUsIDEsIDI0NSwgMCwgMTk1LCAxLCAyNDQsIDEyNSwgMTk1LCAxLCAKKyAgICAyMzIsIDExNSwgMTk1LCAxLCAyNTEsIDE2OSwgMTk1LCAxLCAyNTEsIDY5LCAxOTUsIDEsIDIzNywgMTIzLCAxOTUsIDEsIAorICAgIDIzNywgMTAzLCAxOTUsIDEsIDIxOCwgNDcsIDE5NSwgMSwgMjIyLCAxNTUsIDE5NSwgMSwgMjIyLCAzNSwgMTk1LCAxLCAKKyAgICAyNDksIDIwNywgMTk1LCAxLCAyNDksIDM2LCAxOTUsIDEsIDIwOCwgMTk1LCAxLCAxODcsIDE5NSwgMSwgMjI5LCAxNDEsIAorICAgIDE5NSwgMSwgMjUyLCAyMzcsIDE5NSwgMSwgMjUyLCA5NCwgMTk1LCAxLCAxOTYsIDE5NSwgMSwgMTg0LCAxOTUsIDEsIDIwMywgCisgICAgMTk1LCAxLCAyMzUsIDE4OCwgMTk1LCAxLCAyMTksIDcsIDE5NSwgMSwgMjI1LCAyNSwgMTk1LCAxLCAyMjMsIDIxOCwgMTk1LCAKKyAgICAxLCAyMjYsIDE3NywgMTk1LCAxLCAxNTUsIDE5NSwgMjksIDUsIDYwLCAxOTUsIDI5LCA1LCA3MiwgMTk1LCAyOSwgNSwgNjgsIAorICAgIDE5NSwgMjksIDUsIDI0NiwgMjUwLCAxOTUsIDI5LCA1LCAyNTQsIDE5NiwgMTk1LCAyOSwgNSwgMjMwLCAxMjcsIDE5NSwgCisgICAgMjksIDUsIDI1MywgMjMyLCAxOTUsIDI5LCA1LCA3MywgMTk1LCAyOSwgNSwgNzQsIDE5NSwgMjIzLCA5NywgMSwgMTg0LCAKKyAgICAxOTUsIDIyMywgOTcsIDEsIDIwMywgMTk1LCAyMjMsIDk3LCAxLCAyMTksIDcsIDE5NSwgMywgMSwgMTc1LCAxOTUsIDMsIDEsIAorICAgIDIzMiwgMTE1LCAxOTUsIDMsIDEsIDI1NCwgOTUsIDE5NSwgMywgMSwgMjIyLCAxNTUsIDE5NSwgMywgMSwgMjA4LCAxOTUsIAorICAgIDMsIDEsIDE4NywgMTk1LCAzLCAxLCAxOTYsIDE5NSwgMywgMSwgMjAzLCAxOTUsIDMsIDEsIDIzNSwgMTg4LCAxOTUsIDUsIAorICAgIDIzMywgODksIDE5NSwgNSwgMjM2LCAxNzMsIDE5NSwgNSwgMjI2LCAxNzYsIDE5NSwgNSwgMjM0LCAyNDgsIDE5NSwgMjQ2LCAKKyAgICA5NSwgNzgsIDE5NSwgMjI4LCA4MiwgNzgsIDE5NSwgMjAsIDIxNywgODQsIDE5NSwgMjAsIDEwNywgMTk1LCAyMCwgMTAzLCAKKyAgICAxOTUsIDIwLCAxNjAsIDE5NSwgMjAsIDE1NCwgMTk1LCAyMCwgMTc0LCAxOTUsIDIwLCAxODIsIDE5NSwgMjAsIDE5MSwgCisgICAgMTk1LCAyMCwgMTg1LCAxOTUsIDIwLCAxOTAsIDM3LCAyMzUsIDEyMywgMSwgMTc1LCAzNywgMjM1LCAxMjMsIDEsIDIxOCwgCisgICAgMTM4LCAzNywgMjM1LCAxMjMsIDEsIDIzMiwgMTE1LCAzNywgMjM1LCAxMjMsIDEsIDIyMSwgNTUsIDM3LCAyMzUsIDEyMywgCisgICAgMSwgMjI2LCAxNzcsIDM3LCAyMzUsIDEyMywgMSwgMTg0LCAzNywgMjM1LCAxMjMsIDEsIDIyMiwgMTU1LCAzNywgMjM1LCAKKyAgICAxMjMsIDEsIDIyMiwgMzUsIDM3LCAyMzUsIDEyMywgMSwgMjM1LCAxODgsIDM3LCAyMzUsIDEyMywgMSwgMTg3LCAzNywgCisgICAgMjM1LCAxMjMsIDEsIDIyOSwgMTQxLCAzNywgMjM1LCAxMjMsIDEsIDE5NiwgMzcsIDIzNSwgMTIzLCAxLCAyNDYsIDgsIDM3LCAKKyAgICAyMzUsIDEyMywgMSwgMjE5LCAxODksIDM3LCAyMzUsIDEyMywgMSwgMTU1LCAzNywgMjM1LCAxMjMsIDEsIDIyOCwgMTU1LCAKKyAgICAzNywgMjM1LCAxMjMsIDEsIDIzNiwgMTQ5LCAzNywgMjM1LCAxMjMsIDEsIDIyMSwgNDcsIDM3LCAyMzUsIDEyMywgMSwgCisgICAgMjA4LCAzNywgMjM1LCAxMjMsIDEsIDYwLCAzNywgMjM1LCAxMjMsIDEsIDcyLCAzNywgMjM1LCAxMjMsIDEsIDI0NiwgMjUwLCAKKyAgICAzNywgMjM1LCAxMjMsIDEsIDI0NiwgMjM5LCAzNywgMjM1LCAxMjMsIDEsIDY4LCAzNywgMjM1LCAxMjMsIDEsIDIzMCwgCisgICAgMTI3LCAzNywgMjM1LCAxMjMsIDEsIDc0LCAzNywgMjM1LCAxMjMsIDEsIDIyMCwgMTEwLCAzNywgMjM1LCAxMjMsIDEsIDczLCAKKyAgICAzNywgMjM1LCAxMjMsIDEsIDI1MywgMjMxLCAzNywgMjM1LCAxMjMsIDEsIDI1NCwgMTk2LCAzNywgMjM1LCAxMjMsIDEsIAorICAgIDIyMSwgMTMwLCAzNywgMjM1LCAxMjMsIDEsIDIyMSwgMTI5LCAzNywgMjM1LCAxMjMsIDEsIDIyMSwgMTI4LCAzNywgMjM1LCAKKyAgICAxMjMsIDEsIDIyMSwgMTI3LCAzNywgMjM1LCAxMjMsIDEsIDIyMSwgMTI2LCAxNDYsIDM3LCAxNTEsIDEsIDExNiwgMjI4LCAKKyAgICAxNTUsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAyMjgsIDE1NSwgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDE3NSwgMTQ2LCAzNywgCisgICAgMTUxLCAxLCAxMTYsIDIxOCwgMTM4LCAxNDYsIDM3LCAxNTEsIDEsIDExNiwgMjMyLCAxMTUsIDE0NiwgMzcsIDE1MSwgMSwgCisgICAgMTA5LCAxNzUsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAyMTgsIDEzOCwgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDIzMiwgMTE1LCAKKyAgICAxNDYsIDM3LCAxNTEsIDEsIDExNiwgMjIxLCA1NSwgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDIyNiwgMTc3LCAxNDYsIDM3LCAKKyAgICAxNTEsIDEsIDExNiwgMTg0LCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjIxLCA1NSwgMTQ2LCAzNywgMTUxLCAxLCAxMDksIAorICAgIDIyNiwgMTc3LCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMTg0LCAxNDYsIDM3LCAxNTEsIDEsIDExNiwgMjIyLCAxNTUsIDE0NiwgCisgICAgMzcsIDE1MSwgMSwgMTE2LCAyMjIsIDM1LCAxNDYsIDM3LCAxNTEsIDEsIDExNiwgMjA4LCAxNDYsIDM3LCAxNTEsIDEsIAorICAgIDEwOSwgMjIyLCAxNTUsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAyMjIsIDM1LCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjA4LCAKKyAgICAxNDYsIDM3LCAxNTEsIDEsIDExNiwgMTg3LCAxNDYsIDM3LCAxNTEsIDEsIDExNiwgMjI5LCAxNDEsIDE0NiwgMzcsIDE1MSwgCisgICAgMSwgMTE2LCAxOTYsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAxODcsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAyMjksIDE0MSwgCisgICAgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDE5NiwgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDI0NiwgOCwgMTQ2LCAzNywgMTUxLCAxLCAKKyAgICAxMTYsIDIxOSwgMTg5LCAxNDYsIDM3LCAxNTEsIDEsIDExNiwgMjM1LCAxODgsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAyNDYsIAorICAgIDgsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAyMTksIDE4OSwgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDIzNSwgMTg4LCAxNDYsIAorICAgIDM3LCAxNTEsIDEsIDExNiwgMTU1LCAxNDYsIDM3LCAxNTEsIDEsIDExNiwgMjQ5LCAyMDcsIDE0NiwgMzcsIDE1MSwgMSwgCisgICAgMTE2LCAyNTIsIDIzNywgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDE1NSwgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDI0OSwgMjA3LCAKKyAgICAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjUyLCAyMzcsIDE0NiwgMzcsIDE1MSwgMSwgMTE2LCAyMzUsIDIzNiwgMTQ2LCAzNywgCisgICAgMTUxLCAxLCAxMTYsIDIxOCwgMTExLCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjM1LCAyMzYsIDE0NiwgMzcsIDE1MSwgMSwgCisgICAgMTA5LCAyMTgsIDExMSwgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDIyMywgMTAyLCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjIzLCAKKyAgICAxMDIsIDE0NiwgMzcsIDE1MSwgMjksIDUsIDI5LCAyMjQsIDE4MSwgMTQ2LCAzNywgMTUxLCAyOSwgNSwgMjU1LCA1OCwgCisgICAgMTQ2LCAzNywgMTUxLCAyOSwgNSwgMjM3LCAyNTUsIDE0NiwgMzcsIDE1MSwgMjksIDUsIDY4LCAxNDYsIDM3LCAxNTEsIDI5LCAKKyAgICA1LCAyMjAsIDIzLCAxNDYsIDM3LCAxNTEsIDI5LCA1LCA3MywgMTQ2LCAzNywgMTUxLCAyOSwgNSwgMjU0LCAyMzQsIDE0NiwgCisgICAgMzcsIDE1MSwgMjksIDUsIDc0LCAxNDYsIDM3LCAxNTEsIDI5LCA1LCAyMzAsIDE4NSwgMTQ2LCAzNywgMTUxLCAyOSwgNSwgCisgICAgMjIwLCAxMTAsIDE0NiwgMzcsIDE1MSwgMjksIDUsIDI1MywgMjEyLCAxNDYsIDM3LCAxNTEsIDI5LCA1LCAyNTUsIDE0LCAKKyAgICAxNDYsIDM3LCAxNTEsIDI5LCA1LCAyMjAsIDE2LCAxNDYsIDM3LCAxNTEsIDI5LCA1LCAyMzAsIDYzLCAxNDYsIDM3LCAxNTEsIAorICAgIDI5LCA1LCAyMzAsIDE4MiwgMTQ2LCAzNywgMTUxLCAyOSwgNSwgMjIwLCAxMDcsIDE0NiwgMzcsIDE1MSwgMjksIDUsIDIzNywgCisgICAgMTMzLCAxNDYsIDM3LCAxNTEsIDEsIDM5LCAyMTYsIDIxNiwgMTQ2LCAzNywgMTUxLCAxLCAzOSwgMjMyLCAxMTcsIDE0NiwgCisgICAgMzcsIDE1MSwgMSwgMzksIDIwNywgMTQ2LCAzNywgMTUxLCAxLCAzOSwgMTg5LCAxNDYsIDM3LCAxNTEsIDEsIDM5LCAyMzcsIAorICAgIDE3LCAxNDYsIDM3LCAxNTEsIDEsIDM5LCAyNTAsIDQ2LCAxNDYsIDM3LCAxNTEsIDEsIDM5LCAyNTMsIDIwNCwgMTQ2LCAzNywgCisgICAgMTUxLCAxNDUsIDIzNCwgNjcsIDE0NiwgMzcsIDE1MSwgMTQ1LCAyMzQsIDY2LCAxNDYsIDM3LCAxNTEsIDIwLCAyMTcsIDg0LCAKKyAgICAxNDYsIDM3LCAxNTEsIDIwLCAxMDcsIDE0NiwgMzcsIDE1MSwgMjAsIDEwMywgMTQ2LCAzNywgMTUxLCAyMCwgMTYwLCAxNDYsIAorICAgIDM3LCAxNTEsIDIwLCAxNTQsIDE0NiwgMzcsIDE1MSwgMjAsIDE3NCwgMTQ2LCAzNywgMTUxLCAyMCwgMTgyLCAxNDYsIDM3LCAKKyAgICAxNTEsIDIwLCAxOTEsIDE0NiwgMzcsIDE1MSwgMjAsIDE4NSwgMTQ2LCAzNywgMTUxLCAyMCwgMTkwLCAxNDYsIDM3LCAxNTEsIAorICAgIDgzLCAyMCwgMTA3LCAxNDYsIDM3LCAxNTEsIDUsIDIzNSwgMTc3LCAxNDYsIDM3LCAxNTEsIDUsIDIzNSwgMTc2LCA3OSwgCisgICAgMTYsIDIyOSwgMjExLCA3OSwgMTYsIDIzMywgNzMsIDIzNiwgNTUsIDc5LCAxNiwgMjI5LCA3NywgMjM2LCA1NSwgNzksIDE2LCAKKyAgICAyNTIsIDEyNCwgMjM2LCA1NSwgNzksIDE2LCAyNTEsIDIzNCwgMjM2LCA1NSwgNzksIDE2LCAyMjksIDIsIDIzNiwgNTUsIAorICAgIDc5LCAxNiwgMjI4LCAyNTIsIDIzNiwgNTUsIDc5LCAxNiwgMjI4LCAyNTAsIDIzNiwgNTUsIDc5LCAxNiwgMjI5LCAwLCAKKyAgICAyMzYsIDU1LCA3OSwgMTYsIDIyOCwgMjU0LCAyMzYsIDU1LCA3OSwgMTYsIDI0OSwgMTYzLCAyMzYsIDU1LCA3OSwgMTYsIAorICAgIDI0OSwgMTU5LCAyMzYsIDU1LCA3OSwgMTYsIDI0OSwgMTU4LCAyMzYsIDU1LCA3OSwgMTYsIDI0OSwgMTYxLCAyMzYsIDU1LCAKKyAgICA3OSwgMTYsIDI0OSwgMTYwLCAyMzYsIDU1LCA3OSwgMTYsIDI0OSwgMTU3LCAyMzYsIDU1LCA3OSwgMTYsIDIyMCwgMjMwLCAKKyAgICA3OSwgMTYsIDIzMywgNzMsIDIyNywgNzAsIDc5LCAxNiwgMjI5LCA3NywgMjI3LCA3MCwgNzksIDE2LCAyNTIsIDEyNCwgCisgICAgMjI3LCA3MCwgNzksIDE2LCAyNTEsIDIzNCwgMjI3LCA3MCwgNzksIDE2LCAyMjksIDIsIDIyNywgNzAsIDc5LCAxNiwgMjI4LCAKKyAgICAyNTIsIDIyNywgNzAsIDc5LCAxNiwgMjI4LCAyNTAsIDIyNywgNzAsIDc5LCAxNiwgMjI5LCAwLCAyMjcsIDcwLCA3OSwgMTYsIAorICAgIDIyOCwgMjU0LCAyMjcsIDcwLCA3OSwgMTYsIDI0OSwgMTYzLCAyMjcsIDcwLCA3OSwgMTYsIDI0OSwgMTU5LCAyMjcsIDcwLCAKKyAgICA3OSwgMTYsIDI0OSwgMTU4LCAyMjcsIDcwLCA3OSwgMTYsIDI0OSwgMTYxLCAyMjcsIDcwLCA3OSwgMTYsIDI0OSwgMTYwLCAKKyAgICAyMjcsIDcwLCA3OSwgMTYsIDI0OSwgMTU3LCAyMjcsIDcwLCAyNTEsIDI0NiwgMSwgMTc1LCAyNTEsIDI0NiwgMSwgMjQ1LCAKKyAgICAwLCAyNTEsIDI0NiwgMSwgMjMyLCAxMTUsIDI1MSwgMjQ2LCAxLCAyMzIsIDg3LCAyNTEsIDI0NiwgMSwgMTg3LCAyNTEsIAorICAgIDI0NiwgMSwgMjUyLCAyMzcsIDI1MSwgMjQ2LCAxLCAxOTYsIDI1MSwgMjQ2LCAxLCAyMzMsIDEwMiwgMjUxLCAyNDYsIDEsIAorICAgIDIyMiwgMTU1LCAyNTEsIDI0NiwgMSwgMjQ5LCAyMDcsIDI1MSwgMjQ2LCAxLCAyMDgsIDI1MSwgMjQ2LCAxLCAyMzEsIDE3MSwgCisgICAgMjUxLCAyNDYsIDEsIDI1MSwgMTY5LCAyNTEsIDI0NiwgMSwgMjM3LCAxMjMsIDI1MSwgMjQ2LCAxLCAyMzEsIDc3LCAyNTEsIAorICAgIDI0NiwgMSwgMjMxLCA3NSwgMjUxLCAyNDYsIDEsIDE4NCwgMjUxLCAyNDYsIDEsIDIwMywgMjUxLCAyNDYsIDEsIDIzNSwgCisgICAgMTg4LCAyNTEsIDI0NiwgMSwgMjE5LCAxODksIDI1MSwgMjQ2LCAxLCAyMjYsIDE3NywgMjUxLCAyNDYsIDEsIDYwLCAyNTEsIAorICAgIDI0NiwgMSwgMTU1LCAyNTEsIDI0NiwgMjksIDUsIDcyLCAyNTEsIDI0NiwgMjksIDUsIDY4LCAyNTEsIDI0NiwgMjksIDUsIAorICAgIDczLCAyNTEsIDI0NiwgMjksIDUsIDc0LCAyNTEsIDI0NiwgMjksIDUsIDI1NCwgMjM0LCAyNTEsIDI0NiwgMjMwLCAyNCwgCisgICAgMjUxLCAyNDYsIDI0NiwgMTkwLCAxMTcsIDIyNiwgODYsIDM3LCA4MywgMSwgMTE2LCAxNzUsIDM3LCA4MywgMSwgMTE2LCAKKyAgICAyMzYsIDE0OSwgMzcsIDgzLCAxLCAxMTYsIDIzNSwgMjI0LCAzNywgODMsIDEsIDEwOSwgMTc1LCAzNywgODMsIDEsIDEwOSwgCisgICAgMjM1LCAyMjQsIDM3LCA4MywgMSwgMTA5LCAyMzYsIDE0OSwgMzcsIDgzLCAxLCAyMzIsIDExNSwgMzcsIDgzLCAxLCAxMTYsIAorICAgIDI1MSwgMTY5LCAzNywgODMsIDEsIDExNiwgMjUxLCA2OSwgMzcsIDgzLCAxLCAxMDksIDI1MSwgMTY5LCAzNywgODMsIDEsIAorICAgIDEwOSwgMjI2LCAxNzcsIDM3LCA4MywgMSwgMTA5LCAyNTEsIDY5LCAzNywgODMsIDEsIDIzMSwgNzcsIDM3LCA4MywgMSwgCisgICAgMjI3LCAyMjcsIDM3LCA4MywgMSwgMTE2LCAyMjcsIDIyNSwgMzcsIDgzLCAxLCAyNDksIDIwNywgMzcsIDgzLCAxLCAxMDksIAorICAgIDIyNywgMjI1LCAzNywgODMsIDEsIDIyNywgMjM1LCAzNywgODMsIDEsIDExNiwgMjIyLCAxNTUsIDM3LCA4MywgMSwgMTE2LCAKKyAgICAyMjIsIDM1LCAzNywgODMsIDEsIDEwOSwgMjIyLCAxNTUsIDM3LCA4MywgMSwgMTA5LCAyMjIsIDM1LCAzNywgODMsIDEsIAorICAgIDIwOCwgMzcsIDgzLCAxLCAyNTIsIDIzNywgMzcsIDgzLCAxLCAxMTYsIDE4NywgMzcsIDgzLCAxLCAxMTYsIDIyOSwgMTQxLCAKKyAgICAzNywgODMsIDEsIDExNiwgMjQ2LCA4LCAzNywgODMsIDEsIDEwOSwgMTg3LCAzNywgODMsIDEsIDEwOSwgMjQ2LCA4LCAzNywgCisgICAgODMsIDEsIDEwOSwgMjI5LCAxNDEsIDM3LCA4MywgMSwgMTk2LCAzNywgODMsIDEsIDEwOSwgMTg0LCAzNywgODMsIDEsIAorICAgIDExNiwgMTg0LCAzNywgODMsIDEsIDIwMywgMzcsIDgzLCAxLCAyMjcsIDE5LCAzNywgODMsIDEsIDIzNSwgMTg4LCAzNywgCisgICAgODMsIDEsIDIzNCwgMjI3LCAzNywgODMsIDEsIDIxOSwgNywgMzcsIDgzLCAxLCAxMTYsIDIyNSwgMjUsIDM3LCA4MywgMSwgCisgICAgMTE2LCAyMjMsIDIxOCwgMzcsIDgzLCAxLCAxMTYsIDIyNiwgMTc3LCAzNywgODMsIDEsIDExNiwgMTU1LCAzNywgODMsIDEsIAorICAgIDIzNSwgMTcsIDM3LCA4MywgMSwgNjAsIDM3LCA4MywgMSwgMTA5LCAxNTUsIDM3LCA4MywgMSwgNzIsIDM3LCA4MywgMSwgCisgICAgMjM3LCAyNTUsIDM3LCA4MywgMSwgNjgsIDM3LCA4MywgMSwgMjIwLCAyMywgMzcsIDgzLCAxLCAyNDYsIDI1MCwgMzcsIDgzLCAKKyAgICAxLCAyMzAsIDEyNywgMzcsIDgzLCAxLCAyMzUsIDE3NywgMzcsIDgzLCAxLCAyNDQsIDMyLCAyMjYsIDE3NywgMzcsIDgzLCAKKyAgICAyNTAsIDE0NywgNSwgMTI4LCAyMDMsIDM3LCA4MywgMjUwLCAxNDcsIDUsIDEyOCwgMjM1LCAxODgsIDM3LCA4MywgMjUwLCAKKyAgICAxNDcsIDUsIDIzNSwgMTg5LCAyMjIsIDExOCwgMjM1LCAxNjcsIDM3LCA4MywgNSwgMjM0LCAxMDAsIDIzNiwgMjMwLCAyMzUsIAorICAgIDE2NywgMzcsIDgzLCAyNTAsIDE0NywgNSwgMzksIDIzMiwgMTE1LCAzNywgODMsIDI1MCwgMTQ3LCA1LCAxMDksIDE4NywgCisgICAgMzcsIDgzLCAyNTAsIDE0NywgNSwgMTE2LCAyMjcsIDIyNiwgMTU2LCAxMDksIDE4NywgMzcsIDgzLCAyNTAsIDE0NywgNSwgCisgICAgMTk2LCAzNywgODMsIDI1MCwgMTQ3LCA1LCAyNTIsIDIzNywgMzcsIDgzLCAyNTAsIDE0NywgNSwgMjI2LCAxNzcsIDM3LCAKKyAgICA4MywgNSwgMjI2LCAxNTgsIDM3LCA4MywgMjksIDUsIDYwLCAzNywgODMsIDI5LCA1LCAyMzQsIDEwMCwgMjI2LCAxMjcsIAorICAgIDM3LCA4MywgMjksIDUsIDI1NSwgNTgsIDM3LCA4MywgMjksIDUsIDIyMiwgMTIzLCAyNTUsIDU4LCAzNywgODMsIDI5LCA1LCAKKyAgICA3MiwgMzcsIDgzLCAyOSwgNSwgMjM3LCAyNTUsIDM3LCA4MywgMjksIDUsIDIyMCwgMTEwLCAzNywgODMsIDI5LCA1LCAyMjAsIAorICAgIDIyLCAzNywgODMsIDI5LCA1LCA2OCwgMzcsIDgzLCAyOSwgNSwgMjIwLCAyMywgMzcsIDgzLCAyOSwgNSwgNzQsIDM3LCA4MywgCisgICAgMjksIDUsIDIzMCwgMTg2LCA1NiwgMzcsIDgzLCAyOSwgNSwgMjMwLCA2MywgMzcsIDgzLCAyOSwgNSwgNzMsIDM3LCA4MywgCisgICAgMjksIDUsIDI1NCwgMjM0LCAzNywgODMsIDI5LCA1LCAyMzAsIDEyNywgMzcsIDgzLCAyOSwgNSwgMjU0LCAxOTYsIDM3LCAKKyAgICA4MywgMjksIDUsIDgzLCAyNTQsIDE5NiwgMzcsIDgzLCAyOSwgNSwgMjMwLCAxODYsIDUwLCAzNywgODMsIDUsIDIzNCwgCisgICAgMTAwLCAyMzYsIDIyOSwgMzcsIDgzLCA1LCAyMjEsIDEzMSwgMzcsIDgzLCA1LCAyMjEsIDEzMCwgMzcsIDgzLCA1LCAyMzYsIAorICAgIDExOCwgMjIxLCAxMjksIDM3LCA4MywgNSwgMjM2LCAxMTgsIDIyMSwgMTI4LCAzNywgODMsIDUsIDIzNiwgMTE4LCAyMjEsIAorICAgIDEyNywgMzcsIDgzLCA1LCAyMjgsIDMsIDI0MywgMjEwLCAzNywgODMsIDUsIDIzNCwgMTAwLCAyMjYsIDE0OCwgMzcsIDgzLCAKKyAgICA1LCAyMzYsIDExNywgMjM2LCAyMTUsIDM3LCA4MywgMzYsIDI1MCwgOTMsIDI0OCwgMTQ1LCAzNywgODMsIDI0MiwgMjQzLCAKKyAgICAyMCwgMjE3LCA4NCwgMzcsIDgzLCAyNDIsIDI0MywgMjAsIDEwNywgMzcsIDgzLCAyNDIsIDI0MywgMjAsIDEwMywgMzcsIAorICAgIDgzLCAyNDIsIDI0MywgMjAsIDE2MCwgMzcsIDgzLCAyNDIsIDI0MywgMjAsIDE1NCwgMzcsIDgzLCAyNDIsIDI0MywgMjAsIAorICAgIDE3NCwgMzcsIDgzLCAyNDIsIDI0MywgMjAsIDE4MiwgMzcsIDgzLCAyNDIsIDI0MywgMjAsIDE5MSwgMzcsIDgzLCAyNDIsIAorICAgIDI0MywgMjAsIDE4NSwgMzcsIDgzLCAyNDIsIDI0MywgMjAsIDE5MCwgMzcsIDgzLCA4MywgMjAsIDIxNywgODQsIDM3LCA4MywgCisgICAgODMsIDIwLCAxMDcsIDM3LCA4MywgODMsIDIwLCAxMDMsIDM3LCA4MywgODMsIDIwLCAxNjAsIDM3LCA4MywgODMsIDIwLCAKKyAgICAxNTQsIDM3LCA4MywgODMsIDIwLCAxNzQsIDM3LCA4MywgODMsIDIwLCAxODIsIDM3LCA4MywgODMsIDIwLCAxOTEsIDM3LCAKKyAgICA4MywgODMsIDIwLCAxODUsIDM3LCA4MywgODMsIDIwLCAxOTAsIDM3LCA4MywgNSwgMjE4LCAyMDMsIDM3LCA4MywgNSwgCisgICAgMjE4LCAyMDIsIDM3LCA4MywgNSwgMjI2LCAxMjEsIDM3LCA4MywgNSwgMjM2LCAxNjMsIDM3LCA4MywgNSwgMjQyLCAxODAsIAorICAgIDM3LCA4MywgNSwgMjQ4LCAxNTcsIDM3LCA4MywgNSwgMjEwLCAyMjcsIDU5LCAyMjcsIDIzNSwgMzcsIDgzLCA1LCAyMzQsIAorICAgIDEwMCwgMjE4LCA0OCwgMzcsIDgzLCA1LCAyMzcsIDEsIDM3LCA4MywgNSwgMjM3LCAwLCAzNywgODMsIDUsIDIyNiwgMTI2LCAKKyAgICAzNywgODMsIDUsIDIyNiwgMTI1LCAzNywgODMsIDUsIDI0MywgMTg2LCAzNywgODMsIDUsIDI1MSwgMTY2LCA5NCwgNSwgCisgICAgMjIwLCA5NywgMjI3LCAxNDQsIDk0LCA1LCAyMjAsIDk3LCAyNTEsIDE0OCwgOTQsIDUsIDI1MSwgOTUsIDk0LCA1LCAyMjMsIAorICAgIDUxLCA5NCwgNSwgMjUyLCA2NCwgOTQsIDEsIDI1NCwgMTgwLCA5NCwgMSwgMjU0LCAxODEsIDIyMiwgODIsIDk0LCAxLCAKKyAgICAyMzcsIDI1MSwgOTQsIDEsIDIzNywgMjUyLCAyMjIsIDgyLCA5NCwgMSwgMjIwLCAxMDAsIDk0LCAxLCAyMjAsIDEwMSwgCisgICAgMjIyLCA4MiwgOTQsIDEsIDIyOCwgMywgMjI3LCAxODMsIDk0LCAxLCAyMjgsIDMsIDIyNywgMTg0LCAyMjIsIDgyLCA5NCwgCisgICAgMSwgMjM1LCAxODksIDIzNSwgOTUsIDk0LCAxLCAyMzUsIDE4OSwgMjM1LCA5NiwgMjIyLCA4MiwgOTQsIDEsIDI0NiwgMjIyLCAKKyAgICA5NCwgMSwgMjU0LCAxOTQsIDk0LCAxLCAyMzAsIDE1MywgOTQsIDEsIDIzMCwgMTU0LCAyMjIsIDgyLCA5NCwgMSwgMTc1LCAKKyAgICA5NCwgMSwgMjA2LCAyMzQsIDEwMywgOTQsIDEsIDI0NSwgMCwgOTQsIDEsIDI0NSwgMSwgMjQ0LCA1OCwgOTQsIDEsIDIzMiwgCisgICAgMTE1LCA5NCwgMSwgMjUxLCAxNjksIDk0LCAxLCAyNTEsIDE3MCwgMjM1LCAxNzksIDk0LCAxLCAyMzcsIDEyMywgOTQsIDEsIAorICAgIDIzNywgMTI0LCAyMzcsIDEwNywgOTQsIDEsIDIzMSwgNzcsIDk0LCAxLCAyMjIsIDE1NiwgMjM1LCAxMzgsIDk0LCAxLCAKKyAgICAyMjIsIDE1NiwgMjMzLCA2OCwgMjM0LCAxMDMsIDk0LCAxLCAyNDksIDIwOCwgMjMzLCA2OCwgMjU0LCAxNDgsIDk0LCAxLCAKKyAgICAyNDksIDIwOCwgMjMzLCA2OCwgMjM0LCAxMDMsIDk0LCAxLCAyMzIsIDIzOCwgMjI3LCAyMzgsIDk0LCAxLCAyMjIsIDE1NSwgCisgICAgOTQsIDEsIDIyMiwgMTU2LCAyMjIsIDk5LCA5NCwgMSwgMjQ5LCAyMDcsIDk0LCAxLCAyNDksIDIwOCwgMjM0LCAxMDgsIDk0LCAKKyAgICAxLCAyMDgsIDk0LCAxLCAxODcsIDk0LCAxLCAyMzAsIDQ0LCAyMzYsIDIyNSwgOTQsIDEsIDI1MiwgMjM3LCA5NCwgMSwgCisgICAgMjUyLCAyMzgsIDIzNiwgMTc0LCA5NCwgMSwgMTk2LCA5NCwgMSwgMTg0LCA5NCwgMSwgMjAzLCA5NCwgMSwgMjM1LCAxODgsIAorICAgIDk0LCAxLCAyMTksIDcsIDk0LCAxLCAyMjYsIDE3OCwgMjI2LCAxNjQsIDk0LCAxLCAyMjYsIDE3OCwgMjI2LCAxMzIsIDk0LCAKKyAgICAxLCAyMjYsIDE3NywgOTQsIDEsIDE1NSwgOTQsIDUsIDIyNywgMTc3LCA5NCwgMjksIDUsIDIyMiwgODIsIDk0LCAyOSwgNSwgCisgICAgMjIwLCA5NiwgOTQsIDI5LCA1LCAyMjAsIDk3LCAyMjYsIDEyOSwgOTQsIDI5LCA1LCAyMjMsIDc3LCA5NCwgMjksIDUsIAorICAgIDIyMywgNzgsIDIzNywgMjQzLCA5NCwgMjksIDUsIDIyOCwgMywgMjI3LCAxODMsIDk0LCAyOSwgNSwgMjI4LCAzLCAyMjcsIAorICAgIDE4NCwgMjIyLCA4MiwgOTQsIDI5LCA1LCAyMzUsIDE4OSwgMjM1LCA5NSwgOTQsIDI5LCA1LCAyMzUsIDE4OSwgMjM1LCA5NiwgCisgICAgMjIyLCA4MiwgOTQsIDI5LCA1LCAyMjIsIDEyNCwgOTQsIDI5LCA1LCAyMjIsIDEyNSwgMjI3LCAxODMsIDk0LCAyOSwgNSwgCisgICAgMjIyLCAxMjUsIDIyMiwgODIsIDk0LCAyOSwgNSwgMjIyLCAxMjUsIDIyNywgMTg0LCAyMjIsIDgyLCA5NCwgMjksIDUsIAorICAgIDIyOSwgMTcxLCA5NCwgMjksIDUsIDIyOSwgMTcyLCAyMjIsIDgyLCA5NCwgMjU0LCAyNDAsIDI1NCwgMjM5LCA5NCwgMSwgCisgICAgMjM2LCAyNDcsIDIyNiwgMTI4LCA5NCwgMSwgMjM2LCAxMjIsIDIyNiwgMTI4LCA5NCwgMSwgMjIwLCAxODMsIDIyNiwgMTI4LCAKKyAgICA5NCwgMSwgMjQ2LCAyNDUsIDIyNiwgMTI4LCA5NCwgMSwgMjE5LCAxNjYsIDIyNiwgMTI4LCA5NCwgMSwgMjE3LCAxMDUsIAorICAgIDIyNiwgMTI4LCA5NCwgMSwgMjUzLCAyNDYsIDIyNiwgMTI4LCA5NCwgMjAsIDIxNywgODQsIDk0LCAyMCwgMTA3LCA5NCwgCisgICAgMjAsIDEwMywgOTQsIDIwLCAxNjAsIDk0LCAyMCwgMTU0LCA5NCwgMjAsIDE3NCwgOTQsIDIwLCAxODIsIDk0LCAyMCwgMTkxLCAKKyAgICA5NCwgMjAsIDE4NSwgOTQsIDIwLCAxOTAsIDk0LCAyMjksIDI1NCwgOTQsIDIzMCwgMTksIDk0LCAyMTgsIDE5MywgOTQsIAorICAgIDI1MSwgMTMyLCAyMzAsIDEzLCA5NCwgMjUxLCAxMzIsIDIyNCwgMTIyLCA5NCwgMjUxLCAxMzIsIDIyOSwgMjI4LCA5NCwgCisgICAgMjMwLCAxOCwgOTQsIDI2LCAxNiwgMjQ4LCAxNTEsIDk0LCAyNiwgMTYsIDI0OSwgNTksIDk0LCAyNiwgMTYsIDI0NywgOTcsIAorICAgIDk0LCAyNiwgMTYsIDI0OSwgMTY1LCA5NCwgMjYsIDE2LCAyNDksIDE2NiwgMjIzLCA1MSwgOTQsIDI2LCAxNiwgMjQ4LCAKKyAgICAyMTgsIDk0LCAyNiwgMTYsIDI0OSwgMjAwLCA5NCwgMjYsIDE2LCAyNDksIDQ0LCA5NCwgMjYsIDE2LCAyNDksIDE4NiwgOTQsIAorICAgIDI2LCAxNiwgMjQ5LCAxNjYsIDI0NCwgMTg2LCA5NCwgMjYsIDE2LCAzNiwgMjIyLCA3OSwgOTQsIDI2LCAxNiwgMzYsIDI0NiwgCisgICAgMTg4LCA5NCwgMjYsIDE2LCAzNiwgMjM2LCAxNjksIDk0LCAyNiwgMTYsIDM2LCAyMzYsIDE3MSwgOTQsIDI2LCAxNiwgMzYsIAorICAgIDIzNywgMTExLCA5NCwgMjYsIDE2LCAzNiwgMjM2LCAxNzAsIDIsIDIzNywgMTExLCA5NCwgMjYsIDE2LCAzNiwgMjM2LCAKKyAgICAxNzIsIDIsIDIzNywgMTExLCA5NCwgMjYsIDE2LCAzNiwgMjUyLCAxMTIsIDk0LCAyNiwgMTYsIDM2LCAyNDQsIDYxLCA5NCwgCisgICAgMjYsIDE2LCAyMjcsIDEwNywgMjMwLCAxMTksIDI0NywgMTA3LCA5NCwgMjYsIDE2LCAyMjcsIDEwNywgMjMwLCAxMTksIAorICAgIDI0OSwgMTk4LCA5NCwgMjYsIDE2LCAyMjcsIDEwNywgMjUwLCAxOTcsIDIyMCwgMjUxLCA5NCwgMjYsIDE2LCAyMjcsIDEwNywgCisgICAgMjUwLCAxOTcsIDIyMiwgMTMxLCA5NCwgMjYsIDE2LCAyMzUsIDExMywgMjMwLCAxMTksIDIzMCwgOSwgOTQsIDI2LCAxNiwgCisgICAgMjM1LCAxMTMsIDIzMCwgMTE5LCAyMjgsIDE5NSwgOTQsIDI2LCAxNiwgMjM1LCAxMTMsIDI1MCwgMTk3LCAyMjksIDU0LCAKKyAgICA5NCwgMjYsIDE2LCAyMzUsIDExMywgMjUwLCAxOTcsIDIyOSwgNDYsIDk0LCAyNiwgMTYsIDIzNSwgMTEzLCAyMzAsIDExOSwgCisgICAgMjI5LCA3MiwgMjIzLCA2NywgNSwgMjI5LCAyNTEsIDIyMywgNjcsIDUsIDIzMCwgNSwgMjIzLCA2NywgNSwgMjMwLCAzLCAKKyAgICAyMjMsIDY3LCAxLCA2MCwgMjIzLCA2NywgMSwgNzIsIDIyMywgNjcsIDEsIDY4LCAyMjMsIDY3LCAxLCAyNTQsIDIzNCwgCisgICAgMjIzLCA2NywgMSwgNzQsIDIyMywgNjcsIDEsIDczLCAyMjMsIDY3LCAxLCAyNDYsIDExNSwgMjIzLCA2NywgMSwgMTc1LCAKKyAgICAyMjMsIDY3LCAxLCAyMjgsIDE1NSwgMjIzLCA2NywgMSwgMjQ1LCAwLCAyMjMsIDY3LCAxLCAyMzIsIDExNSwgMjIzLCA2NywgCisgICAgMSwgMjUxLCAxNjksIDIyMywgNjcsIDEsIDIzNywgMTIzLCAyMjMsIDY3LCAxLCAyMTcsIDExNCwgMjIzLCA2NywgMSwgMjMxLCAKKyAgICA3NywgMjIzLCA2NywgMSwgMjIyLCAxNTUsIDIyMywgNjcsIDEsIDI0OSwgMjA3LCAyMjMsIDY3LCAxLCAyMDgsIDIyMywgNjcsIAorICAgIDEsIDE4NywgMjIzLCA2NywgMSwgMjQ2LCA4LCAyMjMsIDY3LCAxLCAyMTksIDE4OSwgMjIzLCA2NywgMSwgMjUyLCAyMzcsIAorICAgIDIyMywgNjcsIDEsIDE5NiwgMjIzLCA2NywgMSwgMTg0LCAyMjMsIDY3LCAxLCAyMDMsIDIyMywgNjcsIDEsIDIzNSwgMTg4LCAKKyAgICAyMjMsIDY3LCAxLCAyMTksIDcsIDIyMywgNjcsIDEsIDIyNiwgMTc3LCAyMjMsIDY3LCAxLCAyMTgsIDEzOCwgMjIzLCA2NywgCisgICAgMSwgMTU1LCAyMjMsIDY3LCAyNTAsIDE0NywgNSwgMjMwLCAxNiwgMjIzLCA2NywgMjUwLCAxNDcsIDUsIDIyOSwgMjUzLCAKKyAgICAyMjMsIDY3LCAyNTAsIDE0NywgNSwgMjI5LCAyNTAsIDIyMywgNjcsIDI5LCA1LCAyMzAsIDgsIDIyMywgNjcsIDI5LCA1LCAKKyAgICAyMjksIDI0OSwgMjIzLCA2NywgMjksIDUsIDIzMCwgMTEsIDIyMywgNjcsIDI5LCA1LCAyMzAsIDIsIDIyMywgNjcsIDI5LCAKKyAgICA1LCAyMzAsIDE3LCAyMjMsIDY3LCAyOSwgNSwgMjMwLCAxMCwgMjIzLCA2NywgNSwgMjMwLCAyMCwgMjIzLCA2NywgMSwgCisgICAgMjM2LCAxNDksIDIyMywgNjcsIDEsIDIyMywgMjAsIDIyMywgNjcsIDIwLCAyMTcsIDg0LCAyMjMsIDY3LCAyMCwgMTA3LCAKKyAgICAyMjMsIDY3LCAyMCwgMTAzLCAyMjMsIDY3LCAyMCwgMTYwLCAyMjMsIDY3LCAyMCwgMTU0LCAyMjMsIDY3LCAyMCwgMTc0LCAKKyAgICAyMjMsIDY3LCAyMCwgMTgyLCAyMjMsIDY3LCAyMCwgMTkxLCAyMjMsIDY3LCAyMCwgMTg1LCAyMjMsIDY3LCAyMCwgMTkwLCAKKyAgICAxNjksIDEsIDE3NSwgMTY5LCAxLCAyMzYsIDY3LCAxNjksIDEsIDIzNiwgMTQ5LCAxNjksIDEsIDI0NSwgMCwgMTY5LCAxLCAKKyAgICAyNDQsIDc3LCAxNjksIDEsIDIzMiwgMTE1LCAxNjksIDEsIDI1MSwgMTY5LCAxNjksIDEsIDI1MSwgNjksIDE2OSwgMSwgCisgICAgMjM3LCAxMjMsIDE2OSwgMSwgMjMxLCA3NywgMTY5LCAxLCAyMjIsIDE1NSwgMTY5LCAxLCAyMjIsIDM1LCAxNjksIDEsIAorICAgIDI0OSwgMjA3LCAxNjksIDEsIDIwOCwgMTY5LCAxLCAxODcsIDE2OSwgMSwgMjI5LCA1OCwgMTY5LCAxLCAyMjksIDE0MSwgCisgICAgMTY5LCAxLCAyNDYsIDgsIDE2OSwgMSwgMjQ1LCAxNjUsIDE2OSwgMSwgMjUyLCAyMzcsIDE2OSwgMSwgMjUyLCA1NCwgMTY5LCAKKyAgICAxLCAxOTYsIDE2OSwgMSwgMjMzLCAxNDIsIDE2OSwgMSwgMjIxLCA1NSwgMTY5LCAxLCAyMjEsIDQ3LCAxNjksIDEsIDI0NywgCisgICAgNzQsIDE2OSwgMSwgMTg0LCAxNjksIDEsIDIwMywgMTY5LCAxLCAyMzUsIDE4OCwgMTY5LCAxLCAxNTUsIDE2OSwgMSwgMjQzLCAKKyAgICA4OSwgMTY5LCAxLCAyMTksIDE4OSwgMTY5LCAxLCAyMjYsIDE3NywgMTY5LCAxLCAyMjUsIDI1LCAxNjksIDEsIDIxOSwgNywgCisgICAgMTY5LCAxLCA2MCwgMTY5LCAyMjMsIDk3LCAxLCAxODQsIDE2OSwgMjIzLCA5NywgMSwgMjAzLCAxNjksIDI5LCA1LCAyNTUsIAorICAgIDU4LCAxNjksIDI5LCA1LCA3MiwgMTY5LCAyOSwgNSwgNzQsIDE2OSwgMjksIDUsIDIzMCwgMTI3LCAxNjksIDI5LCA1LCA2OCwgCisgICAgMTY5LCAyOSwgNSwgMjIwLCAyMywgMTY5LCAyOSwgNSwgNzMsIDE2OSwgMjUwLCAxNDcsIDUsIDIzNywgMTcsIDE2OSwgMjUwLCAKKyAgICAxNDcsIDUsIDE4OSwgMTY5LCAyNTAsIDE0NywgNSwgMTUzLCAxNjksIDI1MCwgMTQ3LCA1LCAyMDcsIDE2OSwgMjUwLCAxNDcsIAorICAgIDUsIDIzMCwgNTksIDE2OSwgMjUwLCAxNDcsIDUsIDE1MiwgMTY5LCAyNTAsIDE0NywgNSwgMjIyLCAyMDEsIDE2OSwgMjUwLCAKKyAgICAxNDcsIDUsIDIzMSwgNjIsIDE2OSwgMjUwLCAxNDcsIDUsIDIzNiwgMjI5LCAxNjksIDUsIDIyNywgMjM2LCAxNjksIDUsIAorICAgIDIzMSwgMTEyLCAxNjksIDIyOCwgMTk3LCAyMjIsIDE1NCwgMTY5LCAyMjgsIDE5NywgMjMxLCA2OSwgMjIxLCAyMDgsIDIyMiwgCisgICAgMTU0LCAxNjksIDIyOCwgMTk3LCAyNTEsIDc0LCAxNjksIDIyOCwgMTk3LCAyMjEsIDQyLCAyNTEsIDc0LCAxNjksIDIyOCwgCisgICAgMTk3LCAyMjEsIDQxLCAxNjksIDIwLCAyMTcsIDg0LCAxNjksIDIwLCAxMDcsIDE2OSwgMjAsIDEwMywgMTY5LCAyMCwgMTYwLCAKKyAgICAxNjksIDIwLCAxNTQsIDE2OSwgMjAsIDE3NCwgMTY5LCAyMCwgMTgyLCAxNjksIDIwLCAxOTEsIDE2OSwgMjAsIDE4NSwgCisgICAgMTY5LCAyMCwgMTkwLCAxNjksIDEsIDIyMSwgMjksIDE2OSwgMSwgMjIxLCAxOSwgMTY5LCAxLCAyNDksIDEzMiwgMjMwLCAKKyAgICAxNTEsIDI1MSwgMjYsIDIwLCAyMTcsIDg0LCAyMzAsIDE1MSwgMjUxLCAyNiwgMjAsIDEwNywgMjMwLCAxNTEsIDI1MSwgMjYsIAorICAgIDIwLCAxMDMsIDIzMCwgMTUxLCAyNTEsIDI2LCAyMCwgMTYwLCAyMzAsIDE1MSwgMjUxLCAyNiwgMjAsIDE1NCwgMjMwLCAKKyAgICAxNTEsIDI1MSwgMjYsIDIwLCAxNzQsIDIzMCwgMTUxLCAyNTEsIDI2LCAyMCwgMTgyLCAyMzAsIDE1MSwgMjUxLCAyNiwgMjAsIAorICAgIDE5MSwgMjMwLCAxNTEsIDI1MSwgMjYsIDIwLCAxODUsIDIzMCwgMTUxLCAyNTEsIDI2LCAyMCwgMTkwLCAyMzAsIDE1MSwgCisgICAgMjUxLCAyNiwgMSwgMjM1LCAxODgsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyNTMsIDI0NCwgMjMwLCAxNTEsIDI1MSwgMjYsIAorICAgIDEsIDI1NCwgMjA5LCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjU0LCAxMjMsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyNTQsIAorICAgIDE3NSwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIzNSwgMTg3LCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjU1LCAyMCwgMjMwLCAKKyAgICAxNTEsIDI1MSwgMjYsIDEsIDI1NSwgMjEsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyNTUsIDE5LCAyMzAsIDE1MSwgMjUxLCAKKyAgICAyNiwgMSwgMjU1LCAxNSwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIzNSwgNjcsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyMzcsIAorICAgIDE1MSwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIzOCwgMCwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIzNywgMTY3LCAyMzAsIAorICAgIDE1MSwgMjUxLCAyNiwgMSwgMjM3LCAxNTYsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyMzQsIDIzMSwgMjMwLCAxNTEsIDI1MSwgCisgICAgMjYsIDEsIDIyMCwgMTE3LCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjIwLCAxMTUsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAKKyAgICAyMjAsIDY4LCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjIwLCAxNiwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIzNSwgMTIyLCAKKyAgICAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjQ2LCAxNjIsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyNDYsIDI1MywgMjMwLCAxNTEsIAorICAgIDI1MSwgMjYsIDEsIDI0NiwgMTk3LCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjQ2LCAxNDIsIDIzMCwgMTUxLCAyNTEsIDI2LCAKKyAgICAxLCAyMzUsIDEyLCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjMwLCA4OSwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIzMCwgCisgICAgMTgxLCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjMwLCA3OSwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIzMCwgMTYxLCAyMzAsIAorICAgIDE1MSwgMjUxLCAyNiwgMjMzLCAxMDAsIDIyMSwgMSwgMjMwLCAxNTEsIDI1MSwgMjYsIDI0NCwgMjUxLCAyMjEsIDIsIDIzMCwgCisgICAgMTUxLCAyNTEsIDI2LCAyMzMsIDk4LCAyMjEsIDIsIDIzMCwgMTUxLCAyNTEsIDI2LCAyMjcsIDE5MywgMjMwLCAxNTEsIAorICAgIDI1MSwgMjYsIDIyOSwgMTM5LCAyMzAsIDE1MSwgMjUxLCAyNiwgMjU0LCAyMDEsIDIzMCwgMTUxLCAyNTEsIDI2LCAyMjgsIAorICAgIDE5NywgMjMzLCA5NiwgMjMwLCAxNTEsIDI1MSwgMjYsIDIyOCwgMTk3LCA1MSwgMjMzLCA5NiwgMjE5LCAxNjIsIDE0NSwgCisgICAgMjM2LCAyMTEsIDIxOSwgMTYyLCAxNDUsIDIyNSwgMiwgMjE5LCAxNjIsIDE0NSwgMjI4LCAyNDEsIDIxOSwgMTYyLCA1LCAKKyAgICAyMzIsIDM5LCAyMTksIDE2MiwgNSwgMjE4LCA1NiwgMjMzLCAxOTEsIDIyMywgMzksIDIxOSwgMTYyLCAxNDUsIDIxOCwgNTYsIAorICAgIDI1NCwgMjA2LCAyMzcsIDIxNCwgMjIzLCAzOSwgMjE5LCAxNjIsIDE0NSwgMjE4LCA1NiwgMjM3LCAyMTQsIDIyMywgMzksIAorICAgIDIxOSwgMTYyLCAxNDUsIDIxOCwgNTYsIDIzNiwgMTk5LCAyMzcsIDIxNCwgMjIzLCAzOSwgMjE5LCAxNjIsIDE0NSwgMjUxLCAKKyAgICAxNDksIDU2LCAyMTksIDE2MiwgMTQ1LCAyMTgsIDU2LCAyMzYsIDE5OSwgMjM3LCAyMTQsIDIyMywgNDAsIDIyNiwgMTA2LCAKKyAgICAyMTksIDE2MiwgMTQ1LCA1MSwgMjIzLCAzOSwgMjE5LCAxNjIsIDE0NSwgMjIxLCA3OCwgMjIzLCAzOSwgMjE5LCAxNjIsIAorICAgIDE0NSwgMjM2LCAxOTksIDI1NCwgOTcsIDIxOSwgMTYyLCAxNDUsIDYxLCA1NiwgMjE5LCAxNjIsIDE0NSwgMTI0LCAxODgsIAorICAgIDU2LCAyMTksIDE2MiwgMTQ1LCAxNDgsIDE4OCwgNTYsIDIxOSwgMTYyLCAxNDUsIDIyNywgOTksIDIzNiwgMjEwLCAyMzcsIAorICAgIDIxNCwgMjIzLCAzOSwgMjE5LCAxNjIsIDE0NSwgMjUzLCAyNDIsIDIzNywgMjE0LCAyMjMsIDM5LCAyMTksIDE2MiwgNSwgCisgICAgMjE5LCA3OCwgMjIzLCAzOSwgMjE5LCAxNjIsIDUsIDIxOSwgNzgsIDIyMCwgMTEyLCAyMTksIDE2MiwgNSwgMjEwLCAyMTksIAorICAgIDc4LCAyMjAsIDExMiwgMjE5LCAxNjIsIDUsIDIxOSwgNzgsIDI1NCwgOTcsIDIxOSwgMTYyLCA1LCAyMTAsIDIxOSwgNzgsIAorICAgIDI1NCwgOTcsIDIxOSwgMTYyLCA1LCAyMTksIDc4LCAyMjAsIDExMywgMiwgMjIyLCAxMzUsIDIxOSwgMTYyLCA1LCAyMTksIAorICAgIDc4LCAyNTQsIDk4LCAyLCAyMjIsIDEzNSwgMjE5LCAxNjIsIDUsIDI1NCwgOTYsIDI1NCwgMTA1LCAyMTksIDE2MiwgNSwgCisgICAgMjU0LCA5NiwgMjUyLCAyMjIsIDIxOSwgMTYyLCA1LCAyNTQsIDk2LCAyMTksIDE4NCwgMjE5LCAxNjIsIDUsIDI1NCwgOTYsIAorICAgIDIxOSwgMTg1LCAyLCAyMjIsIDEzNSwgMjE5LCAxNjIsIDUsIDIyMSwgMTYyLCAyMTksIDE2MiwgNSwgMjQzLCAxMjMsIDE3MSwgCisgICAgMjU0LCA5NSwgMjE5LCAxNjIsIDUsIDE3MSwgMjU0LCA5NSwgMjE5LCAxNjIsIDUsIDIyNywgMjQsIDE3MSwgMjU0LCA5NSwgCisgICAgMjE5LCAxNjIsIDUsIDI1NCwgOTYsIDIyMCwgMTE5LCAyMzMsIDkwLCAyMTksIDE2MiwgNSwgMjU0LCA0NiwgNywgMSwgMywgCisgICAgNiwgNjAsIDcsIDEsIDMsIDYsIDI1NCwgMjM0LCA3LCAzLCAxLCAyMTUsIDI1NCwgMjM0LCA3LCAxLCAzLCA2LCAyNTIsIAorICAgIDE5NiwgMjUzLCAyMDQsIDcsIDEsIDMsIDYsIDI1MSwgMjAyLCA3LCAxLCAzLCA2LCAyNTAsIDQ2LCA3LCAxLCAzLCA2LCAKKyAgICAyNDYsIDExOCwgNywgMSwgMywgNiwgNzMsIDcsIDMsIDEsIDIxNSwgMjMwLCAxMTksIDczLCA3LCAzLCAxLCAyMTUsIDcyLCAKKyAgICA3LCAxLCAzLCA2LCAyMzcsIDEyNiwgNywgMSwgMywgNiwgMjM3LCAxNywgNywgMSwgMywgNiwgMjM1LCAyMDIsIDIsIDkyLCAKKyAgICA3LCAxLCAzLCA2LCAxODksIDcsIDEsIDMsIDYsIDIxMCwgMjA3LCA3LCAxLCAzLCA2LCA3NCwgNywgMSwgMywgNiwgMjMwLCAKKyAgICAxMTksIDc0LCA3LCAzLCAxLCAyMjQsIDEzNiwgNzQsIDcsIDMsIDEsIDIyNCwgMTM2LCAyMzAsIDExOSwgNzQsIDcsIDMsIDEsIAorICAgIDIyNCwgMTM2LCAxNDIsIDIsIDkyLCA3LCAzLCAxLCAyMTUsIDIzMCwgMTY3LCA3LCAxLCAzLCA2LCAyMzAsIDg2LCA3LCAzLCAKKyAgICAxLCAyMjEsIDEyMCwgMTQ0LCA3NCwgNywgMywgMSwgMjUyLCAyOSwgMTQ0LCA3NCwgNywgMSwgMywgNiwgMjMwLCA1OSwgNywgCisgICAgMSwgMywgNiwgMjEwLCAxNTIsIDcsIDEsIDMsIDYsIDIxNSwgMTUyLCA3LCAxLCAzLCA2LCAyMjIsIDIwMSwgNywgMSwgMywgCisgICAgNiwgNjgsIDcsIDMsIDEsIDIyNCwgMTM2LCA2OCwgNywgMywgMSwgMjI0LCAxMzYsIDI0OSwgMTIsIDY4LCA3LCAzLCAxLCAKKyAgICAyMjQsIDEzNiwgMjE1LCAxODksIDcsIDEsIDMsIDYsIDIxNiwgMjE2LCA3LCAxLCAzLCA2LCAyMTksIDQwLCA3LCAxLCAzLCAKKyAgICA2LCAyMTcsIDE1NywgNywgMSwgMywgNiwgMjQ2LCA3NiwgNywgMSwgMjE5LCA3MCwgMjM1LCAxNDQsIDIyMywgMjQxLCA3LCAKKyAgICAxLCAyNTQsIDE5MSwgMjMsIDEsIDMsIDYsIDI0NCwgMjMxLCAyMywgMSwgMywgNiwgMjM1LCAxNTYsIDIzLCAxLCAzLCA2LCAKKyAgICAyMjksIDEwOCwgMjMsIDEsIDMsIDYsIDIyNywgMTQ5LCAyMywgMSwgMywgNiwgMjI4LCAyMTIsIDMxLCAxLCAzLCA2LCAyNDYsIAorICAgIDIxNywgNTgsIDEsIDYsIDYwLCA1OCwgMSwgNiwgMjU0LCAyMzQsIDU4LCAxLCA2LCAyNTMsIDIwNCwgNTgsIDEsIDYsIDI1MiwgCisgICAgMTk2LCAyNTMsIDIwNCwgNTgsIDEsIDYsIDI1MCwgNDYsIDU4LCAxLCA2LCA3MywgNTgsIDEsIDYsIDIxMCwgNzMsIDU4LCAxLCAKKyAgICA2LCAyNDUsIDY3LCA1OCwgMSwgNiwgMjQzLCAyMjUsIDU4LCAxLCA2LCA3MiwgNTgsIDEsIDYsIDIzNywgMTI2LCA1OCwgMSwgCisgICAgNiwgMjM3LCAxNywgNTgsIDEsIDYsIDE1MywgNTgsIDEsIDYsIDE4OSwgNTgsIDEsIDYsIDIwNywgNTgsIDEsIDYsIDIxMCwgCisgICAgMjA3LCA1OCwgMSwgNiwgNzQsIDU4LCAxLCA2LCAyMzAsIDg2LCA1OCwgMSwgNiwgMjMwLCA1OSwgNTgsIDEsIDYsIDE1MiwgCisgICAgNTgsIDEsIDYsIDIyMiwgMjAxLCA1OCwgMSwgNiwgNjgsIDU4LCAxLCA2LCAyMTksIDQwLCA1OCwgMSwgMywgNjAsIDU4LCAxLCAKKyAgICAzLCAyMTUsIDYwLCA1OCwgMSwgMywgMjU0LCAxNDYsIDU4LCAxLCAzLCAyMTUsIDI1NCwgMjM0LCA1OCwgMSwgMywgMjUzLCAKKyAgICAyMDQsIDU4LCAxLCAzLCAyNTAsIDQ2LCA1OCwgMSwgMywgNzMsIDU4LCAxLCAzLCAyMjYsIDEwNCwgNTgsIDEsIDMsIDIzMCwgCisgICAgMTE5LCA3MywgNTgsIDEsIDMsIDIxNSwgMjMwLCAxMTksIDczLCA1OCwgMSwgMywgMjQ1LCA2NywgNTgsIDEsIDMsIDIxNSwgCisgICAgNzIsIDU4LCAxLCAzLCAyMzcsIDE3LCA1OCwgMSwgMywgMTg5LCA1OCwgMSwgMywgMjQ2LCAxODUsIDU4LCAxLCAzLCA3NCwgCisgICAgNTgsIDEsIDMsIDIzMCwgMTE5LCA3NCwgNTgsIDEsIDMsIDIyMSwgMTIwLCAxNDQsIDc0LCA1OCwgMSwgMywgMjUyLCAyOSwgCisgICAgMTQ0LCA3NCwgNTgsIDEsIDMsIDIzMCwgNTksIDU4LCAxLCAzLCAyMjIsIDIwMSwgNTgsIDEsIDMsIDY4LCA1OCwgMSwgMywgCisgICAgMjI0LCAxMzYsIDY4LCA1OCwgMSwgMywgMjE1LCAxODksIDU4LCAxLCAzLCAyMTYsIDIxNiwgNTgsIDEsIDMsIDI1NCwgMTkxLCAKKyAgICA1OCwgMSwgMywgMjUyLCAxMDIsIDU4LCAxLCAzLCAyMywgMjQ0LCAyMzEsIDU4LCAxLCAzLCAyNDksIDYyLCA1OCwgMSwgMywgCisgICAgMjMsIDIyOSwgMTI5LCA1OCwgMSwgMywgMjUxLCAzMSwgNywgMjIzLCA5NCwgMywgMSwgNzIsIDcsIDIyMywgOTQsIDMsIDEsIAorICAgIDE1MiwgNywgMjIzLCA5NCwgMywgMSwgNjgsIDcsIDIyMywgOTQsIDMsIDEsIDIxNiwgMjE2LCAyMywgMjIzLCA5NCwgMywgMSwgCisgICAgMjUyLCAxMDIsIDIzLCAyMjMsIDk0LCAzLCAxLCAyNDQsIDIzMSwgMjMsIDIyMywgOTQsIDMsIDEsIDIyNywgMTQ5LCAyMywgCisgICAgMjIzLCA5NCwgMywgMSwgMjI5LCAxMjksIDIzLCAyMjMsIDk0LCAzLCAxLCAyNTEsIDMxLCA3LCAzLCAxLCAyMjAsIDExMCwgCisgICAgNywgMywgMSwgNDksIDIsIDIzMywgMTkzLCAyMjEsIDE3OSwgNywgMywgMSwgMjUwLCA0NywgMiwgMjMzLCAxOTMsIDIyMSwgCisgICAgMTc5LCA3LCAzLCAxLCAyNDYsIDc1LCAyLCAyMzMsIDE5MywgMjIxLCAxNzksIDcsIDMsIDEsIDIzNCwgMTg3LCAyLCAyMzMsIAorICAgIDE5MywgMjIxLCAxNzksIDcsIDMsIDEsIDIzMywgMzQsIDIsIDIzMywgMTkzLCAyMjEsIDE3OSwgNywgMywgMSwgMjMwLCA2MCwgCisgICAgMiwgMjMzLCAxOTMsIDIyMSwgMTc5LCA3LCAzLCAxLCAyMjgsIDM5LCAyLCAyMzMsIDE5MywgMjIxLCAxNzksIDcsIDMsIDEsIAorICAgIDIyOCwgMzksIDIsIDI0NSwgMTc0LCAyNSwgMjMzLCAxOTMsIDIyMSwgMTc5LCA3LCAzLCAxLCAyMjYsIDIzNSwgMiwgMjMzLCAKKyAgICAxOTMsIDIyMSwgMTc5LCA3LCAzLCAxLCAyMjIsIDIwMiwgMiwgMjMzLCAxOTMsIDIyMSwgMTc5LCA3LCAzLCAxLCAyMTcsIAorICAgIDE1OCwgMiwgMjMzLCAxOTMsIDIyMSwgMTc5LCA3LCAzLCAxLCAyMTUsIDI0NSwgNjcsIDU4LCAxLCAzMSwgMjQ2LCAxOTcsIAorICAgIDcsIDMsIDEsIDIzNywgMTg4LCAyNDUsIDY3LCA3LCAzLCAxLCAyMjIsIDM4LCAyLCAyMjMsIDEyMSwgNywgMywgNiwgMSwgCisgICAgMjQyLCAxMDcsIDIsIDkyLCA3LCAzLCAxLCAyMzcsIDE2MywgMiwgOTIsIDcsIDMsIDEsIDIzMCwgNjAsIDIsIDkyLCA3LCAzLCAKKyAgICA2LCAxLCAxMDUsIDIsIDkyLCA3LCAzLCAxLCAyMjAsIDU4LCAyLCA5MiwgNywgMywgMSwgNDksIDIsIDIzMCwgMjksIDk2LCAKKyAgICA3LCAzLCAxLCAyNTAsIDQ3LCAyLCAyMzAsIDI5LCA5NiwgNywgMywgMSwgMjQ2LCA3NSwgMiwgMjMwLCAyOSwgOTYsIDcsIDMsIAorICAgIDEsIDI0NSwgNjgsIDIsIDIzMCwgMjksIDk2LCA3LCAzLCAxLCAyMzcsIDE4LCAyLCAyMzAsIDI5LCA5NiwgNywgMywgMSwgCisgICAgMjM1LCAyMDIsIDIsIDIzMCwgMjksIDk2LCA3LCAzLCAxLCAyMzQsIDE4NywgMiwgMjMwLCAyOSwgOTYsIDcsIDMsIDEsIAorICAgIDIzMywgMzQsIDIsIDIzMCwgMjksIDk2LCA3LCAzLCAxLCAyMzAsIDYwLCAyLCAyMzAsIDI5LCA5NiwgNywgMywgMSwgMjI4LCAKKyAgICAzOSwgMiwgMjMwLCAyOSwgOTYsIDcsIDMsIDEsIDIyNiwgMjM1LCAyLCAyMzAsIDI5LCA5NiwgNywgMywgMSwgMjQ2LCAxMzQsIAorICAgIDIsIDIzMCwgMjksIDk2LCA3LCAzLCAxLCAyMjAsIDExLCAyLCAyMzAsIDI5LCA5NiwgNywgMywgMSwgMjE4LCAxNTIsIDIsIAorICAgIDIzMCwgMjksIDk2LCA3LCAzLCAxLCAyMTcsIDE1OCwgMiwgMjMwLCAyOSwgOTYsIDcsIDMsIDEsIDExMiwgMiwgMjI3LCAKKyAgICAxNjQsIDk2LCA3LCAzLCAxLCAyNTQsIDE0NywgMiwgMjI3LCAxNjQsIDk2LCA3LCAzLCAxLCAyNTAsIDQ3LCAyLCAyNDIsIAorICAgIDI0NywgMjUsIDIyMiwgMTM1LCA3LCAzLCAxLCAxNzgsIDIsIDIyNywgMTY0LCA5NiwgNywgMywgMSwgMjMwLCAxMTksIDE3OCwgCisgICAgMiwgMjI3LCAxNjQsIDk2LCA3LCAzLCAxLCAyMTAsIDIzMCwgMTE5LCAxNzgsIDIsIDIyNywgMTY0LCA5NiwgNywgMywgMSwgCisgICAgMjI2LCAxMDUsIDIsIDIyNywgMTY0LCA5NiwgNywgMywgMSwgMjQyLCAxMDcsIDIsIDIyNywgMTY0LCA5NiwgNywgMywgMSwgCisgICAgMjMwLCAxMTksIDE0MiwgMiwgMjI3LCAxNjQsIDk2LCA3LCAzLCAxLCAyNDYsIDEzNCwgMiwgMjI3LCAxNjQsIDk2LCA3LCAzLCAKKyAgICAxLCAxMDUsIDIsIDIyNywgMTY0LCA5NiwgNywgMywgMSwgMjQ2LCA3NywgMiwgMjI3LCAxNjQsIDk2LCA1OCwgMSwgMywgCisgICAgMjE1LCAyNTQsIDE0NiwgNTgsIDEsIDMsIDI1MSwgMjAyLCA1OCwgMSwgMywgMjUxLCAyMDMsIDIsIDI1MCwgODAsIDU4LCAxLCAKKyAgICAzLCAyNDYsIDExOCwgNTgsIDEsIDMsIDIxMCwgMjMwLCAxMTksIDczLCA1OCwgMSwgMywgMjQ2LCA3NCwgNTgsIDEsIDMsIAorICAgIDI0OCwgMTQ0LCAyMzcsIDEyNywgMiwgOTIsIDU4LCAxLCAzLCAxMDIsIDI0NSwgNjcsIDU4LCAxLCAzLCAyMTUsIDI0MywgCisgICAgMjI1LCA1OCwgMSwgMywgMjQyLCAxMDcsIDIsIDkyLCA1OCwgMSwgMywgMjM3LCAxNjIsIDU4LCAxLCAzLCA2LCA3MiwgNTgsIAorICAgIDEsIDMsIDYsIDI0MiwgMTA3LCAyLCA5MiwgNTgsIDEsIDMsIDIzNywgMTI3LCAyLCAyNTAsIDk3LCA1OCwgMSwgMywgMjM1LCAKKyAgICAyMDIsIDIsIDIyNywgMTY0LCA5NiwgNTgsIDEsIDMsIDIzNSwgMjAyLCAyLCAyMzAsIDI5LCA5NiwgNTgsIDEsIDMsIDYsIAorICAgIDE1MywgNTgsIDEsIDMsIDIzNCwgMTg3LCAyLCA5NiwgNTgsIDEsIDMsIDIxNSwgMjM0LCAxODcsIDIsIDE3MSwgMjM1LCAKKyAgICAxMDYsIDU4LCAxLCAzLCAyMzMsIDM0LCAyLCA0MiwgOTYsIDU4LCAxLCAzLCAyMzMsIDM0LCAyLCAyMjcsIDE2NCwgOTYsIAorICAgIDU4LCAxLCAzLCA2LCAyMDcsIDU4LCAxLCAzLCAyNTIsIDE5NiwgNzQsIDU4LCAxLCAzLCAyMjksIDEyOSwgNTgsIDEsIDMsIAorICAgIDIyNiwgMjM1LCAyLCA5NiwgNTgsIDEsIDMsIDI0NiwgMTMzLCA1OCwgMSwgMywgMjIyLCAyMDIsIDIsIDIzMCwgMjksIDk2LCAKKyAgICA1OCwgMSwgMywgMTA1LCAxMzUsIDU4LCAxLCAzLCAyMjAsIDU3LCA1OCwgMSwgMywgNiwgNjgsIDU4LCAxLCAzLCAyMjAsIAorICAgIDExLCAyLCA5NiwgNTgsIDEsIDMsIDIxNSwgMjE2LCAyMTYsIDU4LCAxLCAzLCAyMTcsIDE1NywgNTgsIDEsIDMsIDIxNywgCisgICAgMTU4LCAyLCAyMjcsIDE2NCwgOTYsIDU4LCAxLCAzLCAyMTcsIDE1OCwgMiwgMjUwLCA4MCwgNTgsIDEsIDMsIDI0NiwgNzYsIAorICAgIDU4LCAxLCAzLCAyMjIsIDYsIDM2LCAyNDcsIDE0MywgMjQ0LCAzNywgMjU1LCAwLCAzNiwgMjQ3LCAxNDMsIDI1NCwgMjQ4LCAKKyAgICAyNTUsIDAsIDM2LCAyMjQsIDM2LCA1NiwgMzYsIDIyMywgNDUsIDc4LCAzNiwgMjM0LCAxMTQsIDM2LCAyNDQsIDM0LCAzNiwgCisgICAgMjM0LCAxMTIsIDM2LCAyNTQsIDI0NiwgMzYsIDI0NCwgMzUsIDM2LCAyNTQsIDI0NywgMzYsIDcsIDMsIDEsIDIyOCwgMzksIAorICAgIDU2LCAzNiwgMjUyLCA3LCAzNiwgMjM0LCAxMTMsIDM2LCA1MSwgMjUwLCAyMTcsIDUwLCAzNiwgMjMwLCAxNjMsIDUwLCAzNiwgCisgICAgMjE3LCAzMywgNTYsIDM2LCAyMzcsIDE1MiwgNTYsIDM2LCAyMjAsIDUxLCA1MCwgMzYsIDIyMCwgMzUsIDUwLCAzNiwgNywgCisgICAgMywgMSwgMjQ1LCAxNTQsIDIzMCwgMTE5LCAxMTIsIDUwLCAzNiwgNywgMywgMSwgMjU0LCAyMzQsIDM2LCA3LCAzLCAxLCAKKyAgICAyNTQsIDkzLCAzNiwgNywgMywgMSwgMjUzLCAyMjAsIDM2LCA3LCAzLCAxLCAyNTEsIDIwMywgMjUxLCA5MiwgMzYsIDcsIDMsIAorICAgIDEsIDIzNywgMTg4LCAyNTAsIDQ2LCAzNiwgNywgMywgMSwgMjQ2LCAxMTgsIDM2LCA3LCAzLCAxLCAyNDUsIDY3LCAzNiwgNywgCisgICAgMSwgMywgNiwgMjQ1LCA2NywgMzYsIDcsIDMsIDEsIDIzNywgMTcsIDM2LCA3LCAzLCAxLCAxNTMsIDM2LCA3LCAxLCAzLCA2LCAKKyAgICAxNTMsIDM2LCA3LCAxLCAzLCA2LCAxODksIDM2LCA3LCAzLCAxLCAyMDcsIDM2LCA3LCAxLCAzLCA2LCAyMDcsIDM2LCA3LCAKKyAgICAxLCAzLCA2LCAxNTIsIDM2LCA3LCAzLCAxLCAyMjgsIDM5LCAyMjcsIDU4LCAzNiwgNywgMywgMSwgMTk4LCAzNiwgNywgMywgCisgICAgMSwgMTcxLCAxOTgsIDM2LCA3LCAzLCAxLCAyMTcsIDE1NywgMzYsIDI1NCwgMTUxLCAxMTQsIDE5OSwgNTYsIDM2LCA0MiwgCisgICAgMjU0LCAyMSwgNTAsIDM2LCA0NSwgMjU0LCAyMSwgMjUsIDExMywgMjU0LCAyMSwgNTYsIDcsIDYsIDEsIDExMiwgMiwgMjI3LCAKKyAgICA5NCwgNTYsIDcsIDMsIDEsIDExMiwgMiwgMjI3LCA5NCwgNTYsIDcsIDYsIDEsIDQ5LCAyLCA2MSwgNTAsIDcsIDMsIDEsIAorICAgIDQ5LCAyLCA2MSwgNTAsIDcsIDYsIDEsIDQ5LCAyLCA2MSwgNTYsIDcsIDMsIDEsIDQ5LCAyLCA2MSwgNTYsIDcsIDYsIDEsIAorICAgIDQ5LCAyLCAyMzUsIDQ0LCA1NiwgNywgMywgMSwgNDksIDIsIDIzNSwgNDQsIDU2LCA3LCA2LCAxLCAyNTEsIDIwMywgMiwgCisgICAgMjUxLCA5MywgMjUsIDE2OCwgNywgMywgMSwgMjUxLCAyMDMsIDIsIDI1MSwgOTMsIDI1LCAxNjgsIDcsIDYsIDEsIDI1MCwgCisgICAgNDcsIDIsIDYxLCA1MCwgNywgMywgMSwgMjUwLCA0NywgMiwgNjEsIDUwLCA3LCA2LCAxLCAyNTAsIDQ3LCAyLCA2MSwgNTYsIAorICAgIDcsIDMsIDEsIDI1MCwgNDcsIDIsIDYxLCA1NiwgNywgNiwgMSwgMjUwLCA0NywgMiwgMjM1LCA0NCwgNTYsIDcsIDMsIDEsIAorICAgIDI1MCwgNDcsIDIsIDIzNSwgNDQsIDU2LCA3LCA2LCAxLCAyNTAsIDQ3LCAyLCAyNTEsIDkyLCA3LCAzLCAxLCAyNTAsIDQ3LCAKKyAgICAyLCAyNTEsIDkyLCA3LCA2LCAxLCAyNTAsIDQ3LCAyLCAyNTAsIDIxNywgNTYsIDcsIDMsIDEsIDI1MCwgNDcsIDIsIDI1MCwgCisgICAgMjE3LCA1NiwgNywgNiwgMSwgMTc4LCAyLCAyMzQsIDExNiwgMjUsIDI0NCwgMzYsIDcsIDMsIDEsIDE3OCwgMiwgMjM0LCAKKyAgICAxMTYsIDI1LCAyNDQsIDM2LCA3LCA2LCAxLCAxNzgsIDIsIDIzNCwgMTE2LCAyNSwgMTY4LCA3LCAzLCAxLCAxNzgsIDIsIAorICAgIDIzNCwgMTE2LCAyNSwgMTY4LCA3LCA2LCAxLCAxNzgsIDIsIDI1MCwgMjE3LCA1NiwgNywgMywgMSwgMTc4LCAyLCAyNTAsIAorICAgIDIxNywgNTYsIDcsIDYsIDEsIDE3OCwgMiwgMjIxLCAxODAsIDU2LCA3LCAzLCAxLCAxNzgsIDIsIDIyMSwgMTgwLCA1NiwgNywgCisgICAgNiwgMSwgMTc4LCAyLCAyNTEsIDkzLCAyNSwgMjUyLCA4LCA3LCAzLCAxLCAxNzgsIDIsIDI1MSwgOTMsIDI1LCAyNTIsIDgsIAorICAgIDcsIDYsIDEsIDI0NiwgNzUsIDIsIDYxLCA1MCwgNywgMywgMSwgMjQ2LCA3NSwgMiwgNjEsIDUwLCA3LCA2LCAxLCAyNDUsIAorICAgIDY4LCAyLCAyMzQsIDExNSwgNywgMywgMSwgMjQ1LCA2OCwgMiwgMjM0LCAxMTUsIDcsIDYsIDEsIDI0MywgMjI2LCAyLCA2MSwgCisgICAgNTAsIDcsIDMsIDEsIDI0MywgMjI2LCAyLCA2MSwgNTAsIDcsIDYsIDEsIDI0MywgMjI2LCAyLCA2MSwgNTYsIDcsIDMsIDEsIAorICAgIDI0MywgMjI2LCAyLCA2MSwgNTYsIDcsIDYsIDEsIDI0MywgMjI2LCAyLCAyNDksIDEzLCA3LCAzLCAxLCAyNDMsIDIyNiwgMiwgCisgICAgMjQ5LCAxMywgNywgNiwgMSwgMjQzLCAyMjYsIDIsIDI1MSwgOTIsIDcsIDMsIDEsIDI0MywgMjI2LCAyLCAyNTEsIDkyLCA3LCAKKyAgICA2LCAxLCAyNDMsIDIyNiwgMiwgMjUyLCA5LCA1NiwgNywgMywgMSwgMjQzLCAyMjYsIDIsIDI1MiwgOSwgNTYsIDcsIDYsIDEsIAorICAgIDI0MiwgMTA3LCAyLCAyMjEsIDE4MCwgNTYsIDcsIDMsIDEsIDI0MiwgMTA3LCAyLCAyMjEsIDE4MCwgNTYsIDcsIDYsIDEsIAorICAgIDI0MiwgMTA3LCAyLCAyNDksIDE0LCAyNSwgMTY4LCA3LCAzLCAxLCAyNDIsIDEwNywgMiwgMjQ5LCAxNCwgMjUsIDE2OCwgNywgCisgICAgNiwgMSwgMjM3LCAxOCwgMiwgMTY4LCA3LCAzLCAxLCAyMzcsIDE4LCAyLCAxNjgsIDcsIDYsIDEsIDIzNywgMTgsIDIsIDYxLCAKKyAgICA1NiwgNywgMywgMSwgMjM3LCAxOCwgMiwgNjEsIDU2LCA3LCA2LCAxLCAyMzcsIDE4LCAyLCAyMzUsIDQ0LCA1NiwgNywgMywgCisgICAgMSwgMjM3LCAxOCwgMiwgMjM1LCA0NCwgNTYsIDcsIDYsIDEsIDIzNSwgMjAyLCAyLCA2MSwgNTYsIDcsIDMsIDEsIDIzNSwgCisgICAgMjAyLCAyLCA2MSwgNTYsIDcsIDYsIDEsIDIzNSwgMjAyLCAyLCA2MSwgMjUyLCAxMTgsIDI1LCAyMzQsIDExNSwgNywgMywgCisgICAgMSwgMjM1LCAyMDIsIDIsIDYxLCAyNTIsIDExOCwgMjUsIDIzNCwgMTE1LCA3LCA2LCAxLCAyMzUsIDIwMiwgMiwgMjM1LCAKKyAgICA0NCwgNTYsIDcsIDMsIDEsIDIzNSwgMjAyLCAyLCAyMzUsIDQ0LCA1NiwgNywgNiwgMSwgMjM1LCAyMDIsIDIsIDI1MCwgCisgICAgMjE3LCA1NiwgNywgMywgMSwgMjM1LCAyMDIsIDIsIDI1MCwgMjE3LCA1NiwgNywgNiwgMSwgMjM0LCAxODcsIDIsIDE2OCwgCisgICAgNywgMywgMSwgMjM0LCAxODcsIDIsIDE2OCwgNywgNiwgMSwgMjM0LCAxODcsIDIsIDYxLCA1MCwgNywgMywgMSwgMjM0LCAKKyAgICAxODcsIDIsIDYxLCA1MCwgNywgNiwgMSwgMjM0LCAxODcsIDIsIDYxLCA1NiwgNywgMywgMSwgMjM0LCAxODcsIDIsIDYxLCAKKyAgICA1NiwgNywgNiwgMSwgMjMzLCAzNCwgMiwgNjEsIDUwLCA3LCAzLCAxLCAyMzMsIDM0LCAyLCA2MSwgNTAsIDcsIDYsIDEsIAorICAgIDIzMywgMzQsIDIsIDYxLCA1NiwgNywgMywgMSwgMjMzLCAzNCwgMiwgNjEsIDU2LCA3LCA2LCAxLCAyMzMsIDM0LCAyLCAKKyAgICAyMzUsIDQ0LCA1NiwgNywgMywgMSwgMjMzLCAzNCwgMiwgMjM1LCA0NCwgNTYsIDcsIDYsIDEsIDIzMywgMzQsIDIsIDI1MCwgCisgICAgMjE3LCA1NiwgNywgMywgMSwgMjMzLCAzNCwgMiwgMjUwLCAyMTcsIDU2LCA3LCA2LCAxLCAxNDIsIDIsIDIyMSwgMTgwLCAKKyAgICAyNSwgMTY4LCA3LCAzLCAxLCAxNDIsIDIsIDIyMSwgMTgwLCAyNSwgMTY4LCA3LCA2LCAxLCAxNDIsIDIsIDIyMSwgMTgwLCAKKyAgICAyNSwgMjQ5LCAxMywgNywgMywgMSwgMTQyLCAyLCAyMjEsIDE4MCwgMjUsIDI0OSwgMTMsIDcsIDYsIDEsIDE0MiwgMiwgCisgICAgMjM0LCAxMTYsIDI1LCAyNDQsIDM2LCA3LCAzLCAxLCAxNDIsIDIsIDIzNCwgMTE2LCAyNSwgMjQ0LCAzNiwgNywgNiwgMSwgCisgICAgMTQyLCAyLCAyMzQsIDExNiwgMjUsIDE2OCwgNywgMywgMSwgMTQyLCAyLCAyMzQsIDExNiwgMjUsIDE2OCwgNywgNiwgMSwgCisgICAgMjMwLCA2MCwgMiwgMTY4LCA3LCAzLCAxLCAyMzAsIDYwLCAyLCAxNjgsIDcsIDYsIDEsIDIzMCwgNjAsIDIsIDYxLCA1MCwgCisgICAgNywgMywgMSwgMjMwLCA2MCwgMiwgNjEsIDUwLCA3LCA2LCAxLCAyMjgsIDM5LCAyLCA2MSwgNTAsIDcsIDMsIDEsIDIyOCwgCisgICAgMzksIDIsIDYxLCA1MCwgNywgNiwgMSwgMjI4LCAzOSwgMiwgNjEsIDU2LCA3LCAzLCAxLCAyMjgsIDM5LCAyLCA2MSwgNTYsIAorICAgIDcsIDYsIDEsIDIyOCwgMzksIDIsIDYxLCAyNTIsIDExOCwgMjUsIDIzNCwgMTE1LCA3LCAzLCAxLCAyMjgsIDM5LCAyLCA2MSwgCisgICAgMjUyLCAxMTgsIDI1LCAyMzQsIDExNSwgNywgNiwgMSwgMjI4LCAzOSwgMiwgMjM1LCA0NCwgNTYsIDcsIDMsIDEsIDIyOCwgCisgICAgMzksIDIsIDIzNSwgNDQsIDU2LCA3LCA2LCAxLCAyMjYsIDIzNSwgMiwgNjEsIDUwLCA3LCAzLCAxLCAyMjYsIDIzNSwgMiwgCisgICAgNjEsIDUwLCA3LCA2LCAxLCAyMjYsIDIzNSwgMiwgNjEsIDU2LCA3LCAzLCAxLCAyMjYsIDIzNSwgMiwgNjEsIDU2LCA3LCA2LCAKKyAgICAxLCAyMjYsIDIzNSwgMiwgMjU0LCAyNDgsIDI1LCA2MSwgNTAsIDcsIDMsIDEsIDIyNiwgMjM1LCAyLCAyNTQsIDI0OCwgMjUsIAorICAgIDYxLCA1MCwgNywgNiwgMSwgMjI2LCAyMzUsIDIsIDI1MSwgMTMxLCAyNSwgNjEsIDUwLCA3LCAzLCAxLCAyMjYsIDIzNSwgMiwgCisgICAgMjUxLCAxMzEsIDI1LCA2MSwgNTAsIDcsIDYsIDEsIDIyNiwgMjM1LCAyLCA2MSwgMjUyLCAxMTgsIDI1LCA2MSwgNTAsIDcsIAorICAgIDMsIDEsIDIyNiwgMjM1LCAyLCA2MSwgMjUyLCAxMTgsIDI1LCA2MSwgNTAsIDcsIDYsIDEsIDIyMiwgMjAyLCAyLCA2MSwgCisgICAgNTAsIDcsIDMsIDEsIDIyMiwgMjAyLCAyLCA2MSwgNTAsIDcsIDYsIDEsIDIyMiwgMjAyLCAyLCA2MSwgNTYsIDcsIDMsIDEsIAorICAgIDIyMiwgMjAyLCAyLCA2MSwgNTYsIDcsIDYsIDEsIDIyMiwgMjAyLCAyLCAyMzUsIDQ0LCA1NiwgNywgMywgMSwgMjIyLCAKKyAgICAyMDIsIDIsIDIzNSwgNDQsIDU2LCA3LCA2LCAxLCAyMjIsIDIwMiwgMiwgMjUwLCAyMTcsIDU2LCA3LCAzLCAxLCAyMjIsIAorICAgIDIwMiwgMiwgMjUwLCAyMTcsIDU2LCA3LCA2LCAxLCAxMDUsIDIsIDI0OSwgMTQsIDU2LCA3LCAzLCAxLCAxMDUsIDIsIDI0OSwgCisgICAgMTQsIDU2LCA3LCA2LCAxLCAxMDUsIDIsIDIyMSwgMTgwLCA1NiwgNywgMywgMSwgMTA1LCAyLCAyMjEsIDE4MCwgNTYsIDcsIAorICAgIDYsIDEsIDEwNSwgMiwgMjUwLCAyMTcsIDU2LCA3LCAzLCAxLCAxMDUsIDIsIDI1MCwgMjE3LCA1NiwgNywgNiwgMSwgMTA1LCAKKyAgICAyLCAyMjEsIDE4MCwgMjUsIDE2OCwgNywgMywgMSwgMTA1LCAyLCAyMjEsIDE4MCwgMjUsIDE2OCwgNywgNiwgMSwgMTA1LCAKKyAgICAyLCAyMzQsIDExNiwgMjUsIDI0OSwgMTMsIDcsIDMsIDEsIDEwNSwgMiwgMjM0LCAxMTYsIDI1LCAyNDksIDEzLCA3LCA2LCAKKyAgICAxLCAyMjAsIDExLCAyLCAyMjEsIDE3OSwgNywgMywgMSwgMjIwLCAxMSwgMiwgMjIxLCAxNzksIDcsIDYsIDEsIDIyMCwgMTEsIAorICAgIDIsIDYxLCA1NiwgNywgMywgMSwgMjIwLCAxMSwgMiwgNjEsIDU2LCA3LCA2LCAxLCAyMTksIDQxLCAyLCAyNDQsIDM2LCA3LCAKKyAgICAzLCAxLCAyMTksIDQxLCAyLCAyNDQsIDM2LCA3LCA2LCAxLCAyMTksIDQxLCAyLCAxNjgsIDcsIDMsIDEsIDIxOSwgNDEsIDIsIAorICAgIDE2OCwgNywgNiwgMSwgMjE5LCA0MSwgMiwgMjQ5LCAxMywgNywgMywgMSwgMjE5LCA0MSwgMiwgMjQ5LCAxMywgNywgNiwgMSwgCisgICAgMjE5LCA0MSwgMiwgNjEsIDUwLCA3LCAzLCAxLCAyMTksIDQxLCAyLCA2MSwgNTAsIDcsIDYsIDEsIDIxOSwgNDEsIDIsIDYxLCAKKyAgICA1NiwgNywgMywgMSwgMjE5LCA0MSwgMiwgNjEsIDU2LCA3LCA2LCAxLCAyMTgsIDE1MiwgMiwgNjEsIDUwLCA3LCAzLCAxLCAKKyAgICAyMTgsIDE1MiwgMiwgNjEsIDUwLCA3LCA2LCAxLCAyMTgsIDE1MiwgMiwgMjQ5LCAxMywgNywgMywgMSwgMjE4LCAxNTIsIDIsIAorICAgIDI0OSwgMTMsIDcsIDYsIDEsIDIxOCwgOTEsIDIsIDYxLCA1MCwgNywgMywgMSwgMjE4LCA5MSwgMiwgNjEsIDUwLCA3LCA2LCAKKyAgICAxLCAyMTcsIDE1OCwgMiwgMjUwLCAyMTYsIDcsIDMsIDEsIDIxNywgMTU4LCAyLCAyNTAsIDIxNiwgNywgNiwgMSwgMjE3LCAKKyAgICAxNTgsIDIsIDYxLCA1NiwgNywgMywgMSwgMjE3LCAxNTgsIDIsIDYxLCA1NiwgNywgNiwgMSwgMjE3LCAxNTgsIDIsIDIzNSwgCisgICAgNDQsIDU2LCA3LCAzLCAxLCAyMTcsIDE1OCwgMiwgMjM1LCA0NCwgNTYsIDcsIDMsIDEsIDI0MywgMjI2LCAyLCAyMzUsIDQ0LCAKKyAgICA1NiwgNywgMywgMSwgMjIyLCAyMDIsIDIsIDI0OSwgMTMsIDcsIDMsIDEsIDIxOSwgNDEsIDIsIDIyNywgOTQsIDUwLCA3LCAKKyAgICAzLCAxLCAyMTgsIDkxLCAyLCAyMjcsIDk0LCA1MCwgNywgMywgMSwgMTEyLCAyLCA0NSwgMTQ0LCAyMjcsIDkzLCA3LCAzLCAKKyAgICAxLCAxNzEsIDIyNiwgMjM1LCAyLCA2MSwgNTAsIDcsIDMsIDEsIDE3MSwgMjI2LCAyMzUsIDIsIDI0OSwgMTEsIDkyLCA3LCAKKyAgICAzLCAxLCAxNzEsIDIyNiwgMjM1LCAyLCAxMTYsIDkyLCA3LCA2LCAxLCAyMjUsIDEsIDE5OCwgNywgMywgMSwgMjQ5LCA2MiwgCisgICAgNywgNiwgMSwgMTEyLCAyLCA2MSwgNTYsIDcsIDMsIDEsIDExMiwgMiwgNjEsIDU2LCA3LCA2LCAxLCAxMTIsIDIsIDI0MiwgCisgICAgMjQ3LCA1MCwgNywgMywgMSwgMTEyLCAyLCAyNDIsIDI0NywgNTAsIDcsIDYsIDEsIDExMiwgMiwgMjUwLCAyMTcsIDI1LCAKKyAgICAxNjgsIDcsIDMsIDEsIDExMiwgMiwgMjUwLCAyMTcsIDI1LCAxNjgsIDcsIDYsIDEsIDExMiwgMiwgMjUwLCAyMTcsIDI1LCAKKyAgICAyNDQsIDM2LCA3LCAzLCAxLCAxMTIsIDIsIDI1MCwgMjE3LCAyNSwgMjQ0LCAzNiwgNywgNiwgMSwgMTEyLCAyLCAyNTAsIAorICAgIDIxNywgMjUsIDI0MiwgMjQ3LCA1MCwgNywgMywgMSwgMTEyLCAyLCAyNTAsIDIxNywgMjUsIDI0MiwgMjQ3LCA1MCwgNywgNiwgCisgICAgMSwgMTEyLCAyLCAyNTAsIDIxNywgMjUsIDIyMSwgMTc5LCA3LCAzLCAxLCAxMTIsIDIsIDI1MCwgMjE3LCAyNSwgMjIxLCAKKyAgICAxNzksIDcsIDYsIDEsIDExMiwgMiwgMjUwLCAyMTcsIDI1LCA2MSwgNTYsIDcsIDMsIDEsIDExMiwgMiwgMjUwLCAyMTcsIAorICAgIDI1LCA2MSwgNTYsIDcsIDYsIDEsIDExMiwgMiwgMjUyLCA5LCAyNSwgMTY4LCA3LCAzLCAxLCAxMTIsIDIsIDI1MiwgOSwgCisgICAgMjUsIDE2OCwgNywgNiwgMSwgMTEyLCAyLCAyNTIsIDksIDI1LCAyNDQsIDM2LCA3LCAzLCAxLCAxMTIsIDIsIDI1MiwgOSwgCisgICAgMjUsIDI0NCwgMzYsIDcsIDYsIDEsIDExMiwgMiwgMjUyLCA5LCAyNSwgMjQyLCAyNDcsIDUwLCA3LCAzLCAxLCAxMTIsIDIsIAorICAgIDI1MiwgOSwgMjUsIDI0MiwgMjQ3LCA1MCwgNywgNiwgMSwgMTEyLCAyLCAyNTIsIDksIDI1LCAyMjEsIDE3OSwgNywgMywgMSwgCisgICAgMTEyLCAyLCAyNTIsIDksIDI1LCAyMjEsIDE3OSwgNywgNiwgMSwgMTEyLCAyLCAyNTIsIDksIDI1LCA2MSwgNTYsIDcsIDMsIAorICAgIDEsIDExMiwgMiwgMjUyLCA5LCAyNSwgNjEsIDU2LCA3LCA2LCAxLCAxNzgsIDIsIDYxLCA1NiwgNywgMywgMSwgMTc4LCAyLCAKKyAgICA2MSwgNTYsIDcsIDYsIDEsIDE3OCwgMiwgMjQyLCAyNDcsIDUwLCA3LCAzLCAxLCAxNzgsIDIsIDI0MiwgMjQ3LCA1MCwgNywgCisgICAgNiwgMSwgMTc4LCAyLCAyMjEsIDE3OSwgNywgMywgMSwgMTc4LCAyLCAyMjEsIDE3OSwgNywgNiwgMSwgMTc4LCAyLCAyNTAsIAorICAgIDIxNywgMjUsIDE2OCwgNywgMywgMSwgMTc4LCAyLCAyNTAsIDIxNywgMjUsIDE2OCwgNywgNiwgMSwgMTc4LCAyLCAyNTAsIAorICAgIDIxNywgMjUsIDI0NCwgMzYsIDcsIDMsIDEsIDE3OCwgMiwgMjUwLCAyMTcsIDI1LCAyNDQsIDM2LCA3LCA2LCAxLCAxNzgsIAorICAgIDIsIDI1MCwgMjE3LCAyNSwgMjQyLCAyNDcsIDUwLCA3LCAzLCAxLCAxNzgsIDIsIDI1MCwgMjE3LCAyNSwgMjQyLCAyNDcsIAorICAgIDUwLCA3LCA2LCAxLCAxNzgsIDIsIDI1MCwgMjE3LCAyNSwgMjIxLCAxNzksIDcsIDMsIDEsIDE3OCwgMiwgMjUwLCAyMTcsIAorICAgIDI1LCAyMjEsIDE3OSwgNywgNiwgMSwgMTc4LCAyLCAyNTAsIDIxNywgMjUsIDYxLCA1NiwgNywgMywgMSwgMTc4LCAyLCAKKyAgICAyNTAsIDIxNywgMjUsIDYxLCA1NiwgNywgNiwgMSwgMjQyLCAxMDcsIDIsIDI0MiwgMjQ3LCA1MCwgNywgMywgMSwgMjQyLCAKKyAgICAxMDcsIDIsIDI0MiwgMjQ3LCA1MCwgNywgNiwgMSwgMjQyLCAxMDcsIDIsIDYxLCA1NiwgNywgMywgMSwgMjQyLCAxMDcsIDIsIAorICAgIDYxLCA1NiwgNywgNiwgMSwgMTQyLCAyLCA2MSwgNTYsIDcsIDMsIDEsIDE0MiwgMiwgNjEsIDU2LCA3LCA2LCAxLCAxNDIsIAorICAgIDIsIDI0MiwgMjQ3LCA1MCwgNywgMywgMSwgMTQyLCAyLCAyNDIsIDI0NywgNTAsIDcsIDYsIDEsIDE0MiwgMiwgMjUwLCAKKyAgICAyMTcsIDI1LCAxNjgsIDcsIDMsIDEsIDE0MiwgMiwgMjUwLCAyMTcsIDI1LCAxNjgsIDcsIDYsIDEsIDE0MiwgMiwgMjUwLCAKKyAgICAyMTcsIDI1LCAyNDQsIDM2LCA3LCAzLCAxLCAxNDIsIDIsIDI1MCwgMjE3LCAyNSwgMjQ0LCAzNiwgNywgNiwgMSwgMTQyLCAKKyAgICAyLCAyNTAsIDIxNywgMjUsIDI0MiwgMjQ3LCA1MCwgNywgMywgMSwgMTQyLCAyLCAyNTAsIDIxNywgMjUsIDI0MiwgMjQ3LCAKKyAgICA1MCwgNywgNiwgMSwgMTQyLCAyLCAyNTAsIDIxNywgMjUsIDIyMSwgMTc5LCA3LCAzLCAxLCAxNDIsIDIsIDI1MCwgMjE3LCAKKyAgICAyNSwgMjIxLCAxNzksIDcsIDYsIDEsIDE0MiwgMiwgMjUwLCAyMTcsIDI1LCA2MSwgNTYsIDcsIDMsIDEsIDE0MiwgMiwgCisgICAgMjUwLCAyMTcsIDI1LCA2MSwgNTYsIDcsIDYsIDEsIDE0MiwgMiwgMjQyLCAxOTAsIDI1LCAxNjgsIDcsIDMsIDEsIDE0MiwgCisgICAgMiwgMjQyLCAxOTAsIDI1LCAxNjgsIDcsIDYsIDEsIDE0MiwgMiwgMjQyLCAxOTAsIDI1LCAyNDQsIDM2LCA3LCAzLCAxLCAKKyAgICAxNDIsIDIsIDI0MiwgMTkwLCAyNSwgMjQ0LCAzNiwgNywgNiwgMSwgMTQyLCAyLCAyNDIsIDE5MCwgMjUsIDI0MiwgMjQ3LCAKKyAgICA1MCwgNywgMywgMSwgMTQyLCAyLCAyNDIsIDE5MCwgMjUsIDI0MiwgMjQ3LCA1MCwgNywgNiwgMSwgMTQyLCAyLCAyNDIsIAorICAgIDE5MCwgMjUsIDIyMSwgMTc5LCA3LCAzLCAxLCAxNDIsIDIsIDI0MiwgMTkwLCAyNSwgMjIxLCAxNzksIDcsIDYsIDEsIDE0MiwgCisgICAgMiwgMjQyLCAxOTAsIDI1LCA2MSwgNTYsIDcsIDMsIDEsIDE0MiwgMiwgMjQyLCAxOTAsIDI1LCA2MSwgNTYsIDcsIDYsIDEsIAorICAgIDEwNSwgMiwgNjEsIDU2LCA3LCAzLCAxLCAxMDUsIDIsIDYxLCA1NiwgNywgNiwgMSwgMTA1LCAyLCAyNDIsIDI0NywgNTAsIAorICAgIDcsIDMsIDEsIDEwNSwgMiwgMjQyLCAyNDcsIDUwLCA3LCA2LCAxLCAxMDUsIDIsIDI0MiwgMTkwLCAyNSwgMTY4LCA3LCAzLCAKKyAgICAxLCAxMDUsIDIsIDI0MiwgMTkwLCAyNSwgMTY4LCA3LCA2LCAxLCAxMDUsIDIsIDI0MiwgMTkwLCAyNSwgMjQ0LCAzNiwgNywgCisgICAgMywgMSwgMTA1LCAyLCAyNDIsIDE5MCwgMjUsIDI0NCwgMzYsIDcsIDYsIDEsIDEwNSwgMiwgMjQyLCAxOTAsIDI1LCAyNDIsIAorICAgIDI0NywgNTAsIDcsIDMsIDEsIDEwNSwgMiwgMjQyLCAxOTAsIDI1LCAyNDIsIDI0NywgNTAsIDcsIDYsIDEsIDEwNSwgMiwgCisgICAgMjQyLCAxOTAsIDI1LCAyMjEsIDE3OSwgNywgMywgMSwgMTA1LCAyLCAyNDIsIDE5MCwgMjUsIDIyMSwgMTc5LCA3LCA2LCAxLCAKKyAgICAxMDUsIDIsIDI0MiwgMTkwLCAyNSwgNjEsIDU2LCA3LCAzLCAxLCAxMDUsIDIsIDI0MiwgMTkwLCAyNSwgNjEsIDU2LCA3LCAKKyAgICA2LCAxLCAyMTgsIDkxLCAyLCAyNDQsIDM2LCA3LCAzLCAxLCAyMTgsIDkxLCAyLCAyNDQsIDM2LCA3LCA2LCAxLCAyMTgsIAorICAgIDkxLCAyLCA2MSwgNTYsIDcsIDMsIDEsIDIxOCwgOTEsIDIsIDYxLCA1NiwgNywgNiwgMSwgMjE4LCA5MSwgMiwgMjQyLCAKKyAgICAyNDcsIDUwLCA3LCAzLCAxLCAyMTgsIDkxLCAyLCAyNDIsIDI0NywgNTAsIDcsIDYsIDEsIDIxOCwgOTEsIDIsIDIyMSwgCisgICAgMTc5LCA3LCAzLCAxLCAyMTgsIDkxLCAyLCAyMjEsIDE3OSwgNywgNiwgMSwgMjMzLCAxOTIsIDIzNSwgMTgsIDcsIDMsIDEsIAorICAgIDIzMywgMTkyLCAyMzUsIDE4LCA3LCA2LCAxLCAyMzMsIDE5MiwgMjE2LCAyMTYsIDcsIDMsIDEsIDIzMywgMTkyLCAyMTYsIAorICAgIDIxNiwgNywgNiwgMSwgMjE4LCA5MSwgMiwgMjM0LCAyNDcsIDcsIDMsIDEsIDIxOCwgOTEsIDIsIDIzNCwgMjQ3LCAyMywgMywgCisgICAgMSwgMjU0LCAxNDcsIDIsIDIyOCwgMjA2LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDI0OSwgMTQ0LCAyMywgMywgMSwgMjU0LCAKKyAgICAxNDcsIDIsIDIwOSwgMjUsIDIxOSwgMTc4LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDE5MywgMjUsIDIxOSwgMTc4LCAyMywgCisgICAgMywgMSwgMjU0LCAxNDcsIDIsIDIwOSwgMjUsIDIzMCwgNjQsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMTkzLCAyNSwgMjMwLCAKKyAgICA2NCwgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAyMDksIDI1LCAyMjksIDE2MywgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAxOTMsIAorICAgIDI1LCAyMjksIDE2MywgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAyMjgsIDIwNiwgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAKKyAgICAyNDksIDE0NCwgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAyMDksIDI1LCAyMTksIDE3OCwgMjMsIDYsIDEsIDI1NCwgMTQ3LCAKKyAgICAyLCAxOTMsIDI1LCAyMTksIDE3OCwgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAyMDksIDI1LCAyMzAsIDY0LCAyMywgNiwgMSwgCisgICAgMjU0LCAxNDcsIDIsIDE5MywgMjUsIDIzMCwgNjQsIDIzLCA2LCAxLCAyNTQsIDE0NywgMiwgMjA5LCAyNSwgMjI5LCAxNjMsIAorICAgIDIzLCA2LCAxLCAyNTQsIDE0NywgMiwgMTkzLCAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyNDYsIDE1NywgMiwgMjI4LCAKKyAgICAyMDYsIDIzLCAzLCAxLCAyNDYsIDE1NywgMiwgMjQ5LCAxNDQsIDIzLCAzLCAxLCAyNDYsIDE1NywgMiwgMjA5LCAyNSwgCisgICAgMjE5LCAxNzgsIDIzLCAzLCAxLCAyNDYsIDE1NywgMiwgMTkzLCAyNSwgMjE5LCAxNzgsIDIzLCAzLCAxLCAyNDYsIDE1NywgCisgICAgMiwgMjA5LCAyNSwgMjMwLCA2NCwgMjMsIDMsIDEsIDI0NiwgMTU3LCAyLCAxOTMsIDI1LCAyMzAsIDY0LCAyMywgNiwgMSwgCisgICAgMjQ2LCAxNTcsIDIsIDIyOCwgMjA2LCAyMywgNiwgMSwgMjQ2LCAxNTcsIDIsIDI0OSwgMTQ0LCAyMywgNiwgMSwgMjQ2LCAKKyAgICAxNTcsIDIsIDIwOSwgMjUsIDIxOSwgMTc4LCAyMywgNiwgMSwgMjQ2LCAxNTcsIDIsIDE5MywgMjUsIDIxOSwgMTc4LCAyMywgCisgICAgNiwgMSwgMjQ2LCAxNTcsIDIsIDIwOSwgMjUsIDIzMCwgNjQsIDIzLCA2LCAxLCAyNDYsIDE1NywgMiwgMTkzLCAyNSwgMjMwLCAKKyAgICA2NCwgMjMsIDMsIDEsIDI0NiwgMTIyLCAyLCAyMjgsIDIwNiwgMjMsIDMsIDEsIDI0NiwgMTIyLCAyLCAyNDksIDE0NCwgMjMsIAorICAgIDMsIDEsIDI0NiwgMTIyLCAyLCAyMDksIDI1LCAyMTksIDE3OCwgMjMsIDMsIDEsIDI0NiwgMTIyLCAyLCAxOTMsIDI1LCAKKyAgICAyMTksIDE3OCwgMjMsIDMsIDEsIDI0NiwgMTIyLCAyLCAyMDksIDI1LCAyMzAsIDY0LCAyMywgMywgMSwgMjQ2LCAxMjIsIDIsIAorICAgIDE5MywgMjUsIDIzMCwgNjQsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjA5LCAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAKKyAgICAyNDYsIDEyMiwgMiwgMTkzLCAyNSwgMjI5LCAxNjMsIDIzLCA2LCAxLCAyNDYsIDEyMiwgMiwgMjI4LCAyMDYsIDIzLCA2LCAKKyAgICAxLCAyNDYsIDEyMiwgMiwgMjQ5LCAxNDQsIDIzLCA2LCAxLCAyNDYsIDEyMiwgMiwgMjA5LCAyNSwgMjE5LCAxNzgsIDIzLCAKKyAgICA2LCAxLCAyNDYsIDEyMiwgMiwgMTkzLCAyNSwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyNDYsIDEyMiwgMiwgMjA5LCAyNSwgCisgICAgMjMwLCA2NCwgMjMsIDYsIDEsIDI0NiwgMTIyLCAyLCAxOTMsIDI1LCAyMzAsIDY0LCAyMywgNiwgMSwgMjQ2LCAxMjIsIDIsIAorICAgIDIwOSwgMjUsIDIyOSwgMTYzLCAyMywgNiwgMSwgMjQ2LCAxMjIsIDIsIDE5MywgMjUsIDIyOSwgMTYzLCAyMywgMywgMSwgCisgICAgMjM3LCAxNjMsIDIsIDIyOCwgMjA2LCAyMywgMywgMSwgMjM3LCAxNjMsIDIsIDI0OSwgMTQ0LCAyMywgMywgMSwgMjM3LCAKKyAgICAxNjMsIDIsIDIwOSwgMjUsIDIxOSwgMTc4LCAyMywgMywgMSwgMjM3LCAxNjMsIDIsIDE5MywgMjUsIDIxOSwgMTc4LCAyMywgCisgICAgMywgMSwgMjM3LCAxNjMsIDIsIDIwOSwgMjUsIDIzMCwgNjQsIDIzLCAzLCAxLCAyMzcsIDE2MywgMiwgMTkzLCAyNSwgMjMwLCAKKyAgICA2NCwgMjMsIDMsIDEsIDIzNywgMTYzLCAyLCAyMDksIDI1LCAyMjksIDE2MywgMjMsIDMsIDEsIDIzNywgMTYzLCAyLCAxOTMsIAorICAgIDI1LCAyMjksIDE2MywgMjMsIDYsIDEsIDIzNywgMTYzLCAyLCAyMjgsIDIwNiwgMjMsIDYsIDEsIDIzNywgMTYzLCAyLCAKKyAgICAyNDksIDE0NCwgMjMsIDYsIDEsIDIzNywgMTYzLCAyLCAyMDksIDI1LCAyMTksIDE3OCwgMjMsIDYsIDEsIDIzNywgMTYzLCAKKyAgICAyLCAxOTMsIDI1LCAyMTksIDE3OCwgMjMsIDYsIDEsIDIzNywgMTYzLCAyLCAyMDksIDI1LCAyMzAsIDY0LCAyMywgNiwgMSwgCisgICAgMjM3LCAxNjMsIDIsIDE5MywgMjUsIDIzMCwgNjQsIDIzLCA2LCAxLCAyMzcsIDE2MywgMiwgMjA5LCAyNSwgMjI5LCAxNjMsIAorICAgIDIzLCA2LCAxLCAyMzcsIDE2MywgMiwgMTkzLCAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyMzAsIDE0MiwgMiwgMjI4LCAKKyAgICAyMDYsIDIzLCAzLCAxLCAyMzAsIDE0MiwgMiwgMjQ5LCAxNDQsIDIzLCAzLCAxLCAyMzAsIDE0MiwgMiwgMjA5LCAyNSwgCisgICAgMjE5LCAxNzgsIDIzLCAzLCAxLCAyMzAsIDE0MiwgMiwgMTkzLCAyNSwgMjE5LCAxNzgsIDIzLCAzLCAxLCAyMzAsIDE0MiwgCisgICAgMiwgMjA5LCAyNSwgMjMwLCA2NCwgMjMsIDMsIDEsIDIzMCwgMTQyLCAyLCAxOTMsIDI1LCAyMzAsIDY0LCAyMywgNiwgMSwgCisgICAgMjMwLCAxNDIsIDIsIDIyOCwgMjA2LCAyMywgNiwgMSwgMjMwLCAxNDIsIDIsIDI0OSwgMTQ0LCAyMywgNiwgMSwgMjMwLCAKKyAgICAxNDIsIDIsIDIwOSwgMjUsIDIxOSwgMTc4LCAyMywgNiwgMSwgMjMwLCAxNDIsIDIsIDE5MywgMjUsIDIxOSwgMTc4LCAyMywgCisgICAgNiwgMSwgMjMwLCAxNDIsIDIsIDIwOSwgMjUsIDIzMCwgNjQsIDIzLCA2LCAxLCAyMzAsIDE0MiwgMiwgMTkzLCAyNSwgMjMwLCAKKyAgICA2NCwgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIDIyOCwgMjA2LCAyMywgMywgMSwgMjIwLCA1OCwgMiwgMjQ5LCAxNDQsIDIzLCAKKyAgICAzLCAxLCAyMjAsIDU4LCAyLCAyMDksIDI1LCAyMTksIDE3OCwgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIDE5MywgMjUsIDIxOSwgCisgICAgMTc4LCAyMywgMywgMSwgMjIwLCA1OCwgMiwgMjA5LCAyNSwgMjMwLCA2NCwgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIDE5MywgCisgICAgMjUsIDIzMCwgNjQsIDIzLCAzLCAxLCAyMjAsIDU4LCAyLCAyMDksIDI1LCAyMjksIDE2MywgMjMsIDMsIDEsIDIyMCwgNTgsIAorICAgIDIsIDE5MywgMjUsIDIyOSwgMTYzLCAyMywgNiwgMSwgMjIwLCA1OCwgMiwgMjQ5LCAxNDQsIDIzLCA2LCAxLCAyMjAsIDU4LCAKKyAgICAyLCAxOTMsIDI1LCAyMTksIDE3OCwgMjMsIDYsIDEsIDIyMCwgNTgsIDIsIDE5MywgMjUsIDIzMCwgNjQsIDIzLCA2LCAxLCAKKyAgICAyMjAsIDU4LCAyLCAxOTMsIDI1LCAyMjksIDE2MywgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAyMjgsIDIwNiwgMjMsIDMsIDEsIAorICAgIDIzMCwgMTQ0LCAyLCAyNDksIDE0NCwgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAyMDksIDI1LCAyMTksIDE3OCwgMjMsIDMsIAorICAgIDEsIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAyMTksIDE3OCwgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAyMDksIDI1LCAyMzAsIAorICAgIDY0LCAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDE5MywgMjUsIDIzMCwgNjQsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjA5LCAKKyAgICAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMTkzLCAyNSwgMjI5LCAxNjMsIDIzLCA2LCAxLCAyMzAsIAorICAgIDE0NCwgMiwgMjI4LCAyMDYsIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgMjQ5LCAxNDQsIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgCisgICAgMjA5LCAyNSwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgMTkzLCAyNSwgMjE5LCAxNzgsIDIzLCA2LCAxLCAKKyAgICAyMzAsIDE0NCwgMiwgMjA5LCAyNSwgMjMwLCA2NCwgMjMsIDYsIDEsIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAyMzAsIDY0LCAKKyAgICAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDIwOSwgMjUsIDIyOSwgMTYzLCAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDE5MywgMjUsIAorICAgIDIyOSwgMTYzLCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDIxOSwgMTc4LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDIzMCwgCisgICAgNjQsIDIzLCAzLCAxLCAyNDYsIDE1NywgMiwgMjE5LCAxNzgsIDIzLCAzLCAxLCAyNDYsIDE1NywgMiwgMjMwLCA2NCwgMjMsIAorICAgIDMsIDEsIDI0NiwgMTIyLCAyLCAyMTksIDE3OCwgMjMsIDMsIDEsIDI0NiwgMTIyLCAyLCAyMzAsIDY0LCAyMywgMywgMSwgCisgICAgMjM3LCAxNjMsIDIsIDIxOSwgMTc4LCAyMywgMywgMSwgMjM3LCAxNjMsIDIsIDIzMCwgNjQsIDIzLCAzLCAxLCAyMzAsIAorICAgIDE0MiwgMiwgMjE5LCAxNzgsIDIzLCAzLCAxLCAyMzAsIDE0MiwgMiwgMjMwLCA2NCwgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIAorICAgIDIxOSwgMTc4LCAyMywgMywgMSwgMjIwLCA1OCwgMiwgMjMwLCA2NCwgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAyMTksIDE3OCwgCisgICAgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAyMzAsIDY0LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDIwOSwgMjUsIDIxNywgMjA3LCAKKyAgICAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDE5MywgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDIwOSwgMjUsIAorICAgIDIxOSwgMTc5LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMTkzLCAyNSwgMjE5LCAxNzksIDI1LCAKKyAgICAyMTcsIDIwNywgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAyMDksIDI1LCAyMzAsIDY1LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAKKyAgICAxLCAyNTQsIDE0NywgMiwgMTkzLCAyNSwgMjMwLCA2NSwgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIAorICAgIDIwOSwgMjUsIDIyOSwgMTY0LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMTkzLCAyNSwgMjI5LCAKKyAgICAxNjQsIDI1LCAyMTcsIDIwNywgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAyMDksIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIAorICAgIDI1NCwgMTQ3LCAyLCAxOTMsIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAyMDksIDI1LCAyMTksIDE3OSwgCisgICAgMjUsIDIyOCwgMjE3LCAyMywgNiwgMSwgMjU0LCAxNDcsIDIsIDE5MywgMjUsIDIxOSwgMTc5LCAyNSwgMjI4LCAyMTcsIDIzLCAKKyAgICA2LCAxLCAyNTQsIDE0NywgMiwgMjA5LCAyNSwgMjMwLCA2NSwgMjUsIDIyOCwgMjE3LCAyMywgNiwgMSwgMjU0LCAxNDcsIDIsIAorICAgIDE5MywgMjUsIDIzMCwgNjUsIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAyMDksIDI1LCAyMjksIDE2NCwgCisgICAgMjUsIDIyOCwgMjE3LCAyMywgNiwgMSwgMjU0LCAxNDcsIDIsIDE5MywgMjUsIDIyOSwgMTY0LCAyNSwgMjI4LCAyMTcsIDIzLCAKKyAgICAzLCAxLCAyNDYsIDEyMiwgMiwgMjA5LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMTkzLCAyNSwgCisgICAgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjA5LCAyNSwgMjE5LCAxNzksIDI1LCAyMTcsIDIwNywgMjMsIDMsIAorICAgIDEsIDI0NiwgMTIyLCAyLCAxOTMsIDI1LCAyMTksIDE3OSwgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjQ2LCAxMjIsIDIsIAorICAgIDIwOSwgMjUsIDIzMCwgNjUsIDI1LCAyMTcsIDIwNywgMjMsIDMsIDEsIDI0NiwgMTIyLCAyLCAxOTMsIDI1LCAyMzAsIDY1LCAKKyAgICAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjA5LCAyNSwgMjI5LCAxNjQsIDI1LCAyMTcsIDIwNywgMjMsIAorICAgIDMsIDEsIDI0NiwgMTIyLCAyLCAxOTMsIDI1LCAyMjksIDE2NCwgMjUsIDIxNywgMjA3LCAyMywgNiwgMSwgMjQ2LCAxMjIsIAorICAgIDIsIDIwOSwgMjUsIDIyOCwgMjE3LCAyMywgNiwgMSwgMjQ2LCAxMjIsIDIsIDE5MywgMjUsIDIyOCwgMjE3LCAyMywgNiwgMSwgCisgICAgMjQ2LCAxMjIsIDIsIDIwOSwgMjUsIDIxOSwgMTc5LCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAyNDYsIDEyMiwgMiwgMTkzLCAKKyAgICAyNSwgMjE5LCAxNzksIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIDI0NiwgMTIyLCAyLCAyMDksIDI1LCAyMzAsIDY1LCAyNSwgCisgICAgMjI4LCAyMTcsIDIzLCA2LCAxLCAyNDYsIDEyMiwgMiwgMTkzLCAyNSwgMjMwLCA2NSwgMjUsIDIyOCwgMjE3LCAyMywgNiwgCisgICAgMSwgMjQ2LCAxMjIsIDIsIDIwOSwgMjUsIDIyOSwgMTY0LCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAyNDYsIDEyMiwgMiwgCisgICAgMTkzLCAyNSwgMjI5LCAxNjQsIDI1LCAyMjgsIDIxNywgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAyMDksIDI1LCAyMTcsIAorICAgIDIwNywgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAyMTcsIDIwNywgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAKKyAgICAyMDksIDI1LCAyMTksIDE3OSwgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDE5MywgMjUsIDIxOSwgCisgICAgMTc5LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjA5LCAyNSwgMjMwLCA2NSwgMjUsIDIxNywgMjA3LCAKKyAgICAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDE5MywgMjUsIDIzMCwgNjUsIDI1LCAyMTcsIDIwNywgMjMsIDMsIDEsIDIzMCwgCisgICAgMTQ0LCAyLCAyMDksIDI1LCAyMjksIDE2NCwgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDE5MywgMjUsIAorICAgIDIyOSwgMTY0LCAyNSwgMjE3LCAyMDcsIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgMjA5LCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAKKyAgICAxLCAyMzAsIDE0NCwgMiwgMTkzLCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgMjA5LCAyNSwgMjE5LCAKKyAgICAxNzksIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAyMTksIDE3OSwgMjUsIDIyOCwgCisgICAgMjE3LCAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDIwOSwgMjUsIDIzMCwgNjUsIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIAorICAgIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAyMzAsIDY1LCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgMjA5LCAKKyAgICAyNSwgMjI5LCAxNjQsIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAyMjksIDE2NCwgMjUsIAorICAgIDIyOCwgMjE3LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDIxOSwgNTcsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMjM0LCAKKyAgICAxMTUsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMjE5LCAxNzksIDI1LCAyMTcsIDIwNywgMjMsIDMsIDEsIDI1NCwgMTQ3LCAKKyAgICAyLCAyMTcsIDIwNywgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAyMzAsIDY1LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNTQsIAorICAgIDE0NywgMiwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMjI5LCAxNjQsIDI1LCAyMTcsIDIwNywgMjMsIDYsIAorICAgIDEsIDI1NCwgMTQ3LCAyLCAyMTksIDU3LCAyMywgNiwgMSwgMjU0LCAxNDcsIDIsIDIzNCwgMTE1LCAyMywgNiwgMSwgMjU0LCAKKyAgICAxNDcsIDIsIDIxOSwgMTc4LCAyMywgNiwgMSwgMjU0LCAxNDcsIDIsIDIzMCwgNjQsIDIzLCA2LCAxLCAyNTQsIDE0NywgMiwgCisgICAgMjI4LCAyMTcsIDIzLCAyMzYsIDMzLCAyMywgMjI4LCAyMTcsIDIzLCAyMjgsIDIwNiwgMjMsIDIyOSwgMTYzLCAyMywgMjQ5LCAKKyAgICA4LCAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjE5LCAxNzksIDI1LCAyMTcsIDIwNywgMjMsIDMsIDEsIAorICAgIDI0NiwgMTIyLCAyLCAyMTcsIDIwNywgMjMsIDMsIDEsIDI0NiwgMTIyLCAyLCAyMzAsIDY1LCAyNSwgMjE3LCAyMDcsIDIzLCAKKyAgICAzLCAxLCAyNDYsIDEyMiwgMiwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjI5LCAxNjQsIDI1LCAyMTcsIAorICAgIDIwNywgMjMsIDYsIDEsIDI0NiwgMTU3LCAyLCAyMTksIDE3OCwgMjMsIDYsIDEsIDI0NiwgMTU3LCAyLCAyMzAsIDY0LCAyMywgCisgICAgNiwgMSwgMjQ2LCAxMjIsIDIsIDIxOSwgMTc4LCAyMywgNiwgMSwgMjQ2LCAxMjIsIDIsIDIzMCwgNjQsIDIzLCA2LCAxLCAKKyAgICAyNDYsIDEyMiwgMiwgMjI4LCAyMTcsIDIzLCAyMDksIDI1LCAyMTksIDE3OCwgMjMsIDIwOSwgMjUsIDIzMCwgNjQsIDIzLCAKKyAgICAyMDksIDI1LCAyMjksIDE2MywgMjMsIDMsIDEsIDIzNywgMTYzLCAyLCAyMTksIDU3LCAyMywgMywgMSwgMjM3LCAxNjMsIDIsIAorICAgIDIzNCwgMTE1LCAyMywgMywgMSwgMjM3LCAxNjMsIDIsIDI0OSwgOCwgMjUsIDIxOSwgMTc4LCAyMywgMywgMSwgMjM3LCAKKyAgICAxNjMsIDIsIDI0OSwgOCwgMjUsIDIzMCwgNjQsIDIzLCAzLCAxLCAyMzcsIDE2MywgMiwgMjI5LCAxNjMsIDIzLCAzLCAxLCAKKyAgICAyMzcsIDE2MywgMiwgMjQ5LCA4LCAyNSwgMjI5LCAxNjMsIDIzLCA2LCAxLCAyMzcsIDE2MywgMiwgMjE5LCA1NywgMjMsIDYsIAorICAgIDEsIDIzNywgMTYzLCAyLCAyMzQsIDExNSwgMjMsIDYsIDEsIDIzNywgMTYzLCAyLCAyMTksIDE3OCwgMjMsIDYsIDEsIDIzNywgCisgICAgMTYzLCAyLCAyMzAsIDY0LCAyMywgMTkzLCAyNSwgMjE5LCAxNzgsIDIzLCAxOTMsIDI1LCAyMzAsIDY0LCAyMywgMTkzLCAKKyAgICAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyMjAsIDU4LCAyLCAyMTksIDU3LCAyMywgMywgMSwgMjIwLCA1OCwgMiwgMjM0LCAKKyAgICAxMTUsIDIzLCAzLCAxLCAyMjAsIDU4LCAyLCAyNDksIDgsIDI1LCAyMTksIDE3OCwgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIAorICAgIDI0OSwgOCwgMjUsIDIzMCwgNjQsIDIzLCAzLCAxLCAyMjcsIDE1MCwgMiwgMjI4LCAyMDYsIDIzLCAzLCAxLCAyMjcsIDE1MCwgCisgICAgMiwgMjQ5LCAxNDQsIDIzLCAzLCAxLCAyMjAsIDU4LCAyLCAyMjksIDE2MywgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIDI0OSwgCisgICAgOCwgMjUsIDIyOSwgMTYzLCAyMywgNiwgMSwgMjIwLCA1OCwgMiwgMjE5LCA1NywgMjMsIDYsIDEsIDIyMCwgNTgsIDIsIAorICAgIDIzNCwgMTE1LCAyMywgNiwgMSwgMjIwLCA1OCwgMiwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyMjAsIDU4LCAyLCAyMzAsIDY0LCAKKyAgICAyMywgNiwgMSwgMjI3LCAxNTAsIDIsIDI0OSwgMTQ0LCAyMywgMjQ5LCA4LCAyNSwgMjE5LCAxNzgsIDIzLCAyNDksIDgsIAorICAgIDI1LCAyMzAsIDY0LCAyMywgMjE5LCAxNzgsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjE5LCAxNzksIDI1LCAyMTcsIDIwNywgCisgICAgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAyMTcsIDIwNywgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAyMzAsIDY1LCAyNSwgMjE3LCAKKyAgICAyMDcsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjI5LCAxNjQsIAorICAgIDI1LCAyMTcsIDIwNywgMjMsIDYsIDEsIDIzMCwgMTQyLCAyLCAyMTksIDE3OCwgMjMsIDYsIDEsIDIzMCwgMTQyLCAyLCAKKyAgICAyMzAsIDY0LCAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDIxOSwgMTc4LCAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDIzMCwgNjQsIAorICAgIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgMjI4LCAyMTcsIDIzLCAyMzAsIDY0LCAyMywgMjQ5LCAxNDQsIDI0NiwgMTk4LCAKKyAgICAyMjgsIDk1LCAyNDYsIDIwNiwgMjI4LCA5NSwgMjQ2LCAxOTgsIDIyMywgMjU0LCAyNDYsIDIwNiwgMjIzLCAyNTQsIDIyMSwgCisgICAgMjI2LCAyMjMsIDI1NCwgMjQ1LCAxMTQsIDIyMywgMjU0LCAyMjQsIDgwLCAyMjMsIDI1NCwgMjQ1LCAxOTQsIDIyMywgMjU0LCAKKyAgICAyMjgsIDE5NywgMjIzLCAyNTQsIDIyMSwgMjUzLCAyMjMsIDI1NCwgMjQzLCAyMDEsIDIyMywgMjU0LCAyMTcsIDg1LCAyMTgsIAorICAgIDE5OSwgMjIzLCAyNTQsIDIxNywgODUsIDIxOCwgMTk5LCAyMzEsIDE5NywgMjE3LCA4NSwgMjE4LCAxOTksIDIzNywgNTQsIAorICAgIDIzNSwgMTA4LCA3OCwgMjI3LCAxMDIsIDc4LCAyNDIsIDEyMSwgMjMxLCAxOTgsIDI0MiwgMTIxLCAyNDUsIDE5NCwgMjQ5LCAKKyAgICAxNDYsIDI0NiwgMTk4LCAyNDksIDE0NiwgMjQ2LCAyMDYsIDI0OSwgMTQ2LCAxODYsIDEzNSwgNTEsIDY5LCAyMzUsIDQzLCAKKyAgICA1MSwgMTA5LCAyMzUsIDQzLCA0MiwgMjI0LCAxMDksIDIyOCwgNjksIDc4LCA0NSwgMjI0LCAxMDksIDIyOCwgNjksIDc4LCAKKyAgICAyMjQsIDEwOSwgMjM0LCAyMzgsIDIyOCwgNjksIDc4LCAyMjQsIDEwOSwgMjQzLCA5OCwgMjI4LCA2OSwgNzgsIDQyLCA1MSwgCisgICAgMjI4LCA2OSwgNzgsIDQ1LCA1MSwgMjI4LCA2OSwgNzgsIDUxLCAyMzQsIDIzOCwgMjI4LCA2OSwgNzgsIDUxLCAyNDMsIDk4LCAKKyAgICAyMjgsIDY5LCA3OCwgMjQ5LCAxOTIsIDUxLCAyNDksIDE5MiwgMjUxLCAyNDEsIDIyMSwgODcsIDI1MSwgMjQxLCAxMzEsIAorICAgIDYxLCAyMzUsIDEyMSwgMTI0LCA2MSwgMjM1LCAxMjEsIDE4NiwgMjQ2LCAyMDgsIDI0MiwgMTE5LCAyMjksIDMxLCAyMzUsIAorICAgIDQ0LCAyMjUsIDU0LCAyMjksIDI0MSwgMjI1LCA1NCwgMjM1LCAxMDgsIDI0NiwgMjA0LCAyMjcsIDEwMiwgMjQ2LCAyMDQsIAorICAgIDIyOSwgMjAsIDI0OCwgMjA5LCAyNDUsIDEyMywgMjM1LCAxMDgsIDIzMCwgNzEsIDIyNywgMTAyLCAyMzAsIDcxLCAyMzIsIAorICAgIDIxMCwgMjMxLCAyMDMsIDIyMywgMjU0LCAyMjksIDE3MCwgMjMzLCAxNjQsIDU1LCAyMjksIDE3MCwgMjIyLCA2NiwgMjIxLCAKKyAgICAyMzIsIDU1LCAyMjgsIDIzNSwgNTEsIDIyOCwgMjM1LCAyMjEsIDc4LCAyMjgsIDIzNSwgMjEwLCAyMjgsIDIzNSwgMjEwLCAKKyAgICA1MSwgMjI4LCAyMzUsIDIxMCwgMjIxLCA3OCwgMjI4LCAyMzUsIDI1MSwgMTM0LCAyMjQsIDEwOSwgMjM1LCAxMTIsIDI1NCwgCisgICAgMTIwLCAyMjgsIDY5LCA3OCwgMjI0LCAxMDksIDIyNywgMTA2LCAyNTQsIDEyMCwgMjI4LCA2OSwgNzgsIDIyNywgMTk5LCAKKyAgICA3OCwgNTEsIDI0NiwgOTUsIDc4LCAyMzcsIDE3NywgMjMwLCA3MywgMjIwLCA3OCwgMTI2LCAyMjEsIDIwMCwgMjUxLCAxMzUsIAorICAgIDIzNywgMTkxLCAyMjksIDMxLCAyNTMsIDI0OSwgMjQyLCAxMjIsIDI1MSwgMjQxLCAyNDUsIDEwOCwgMjI0LCA1NSwgNDIsIAorICAgIDQwLCAyNTIsIDE4LCAyLCAyMjgsIDc3LCA0NSwgNDAsIDI1MiwgMTgsIDIsIDIyOCwgNzcsIDUxLCAyMjgsIDgyLCA3OCwgCisgICAgMjI4LCA4MiwgMjQ2LCA5NSwgNzgsIDI0NiwgOTUsIDIyOCwgODIsIDc4LCAyMjEsIDE2NCwgNSwgMjQ2LCAxMjMsIDIxMCwgCisgICAgMjI5LCA3MywgNTUsIDg0LCAxMjcsIDI1MSwgMjQxLCA4NCwgOTAsIDI1MSwgMjQxLCAxMDksIDI1MywgMjUxLCAyMTAsIAorICAgIDIyNSwgNjcsIDI1MCwgMTk4LCAyMjAsIDYzLCAxMjQsIDI1MywgMjUwLCAyNTQsIDE1OSwgMjE5LCAxMDEsIDI1MCwgMTY3LCAKKyAgICAyMzMsIDE1NSwgNTUsIDIyMywgMjMsIDI0OSwgMTQ2LCAyMzcsIDE3MCwgMjIwLCA3OCwgMjQ1LCAxNDUsIDIyOCwgMTk3LCAKKyAgICA3OCwgMTQ4LCA2MSwgMjI4LCAxOTYsIDIyOCwgOTIsIDIyOCwgMjM1LCAyNDUsIDExNiwgNjEsIDIyOCwgMTk2LCAyNDUsIAorICAgIDE3MCwgNjEsIDIyOCwgMTk2LCAxMjQsIDYxLCAyMjgsIDE5NiwgMjQ1LCAxMTYsIDYxLCA3OCwgMjQ3LCAxNDMsIDI1MCwgCisgICAgMTAwLCAyMjEsIDg2LCA2OSwgMjQ1LCAxMTYsIDI0OCwgMTQzLCAyMzQsIDE4LCAxNCwgMjIzLCAyNTQsIDIxOCwgMTc0LCAKKyAgICAyMzcsIDU0LCAyNDUsIDg4LCAyNTQsIDc2LCAyMzcsIDE2OCwgMjIxLCAxNzYsIDIzNywgMTY4LCAyMjUsIDU0LCAyMzcsIAorICAgIDE2OCwgMjI5LCA0MywgMjM3LCAyMDEsIDIyMiwgMjI4LCAyMjMsIDM0LCAyNTQsIDI1MCwgMjIyLCAyMjgsIDIyMywgMzQsIAorICAgIDIzNywgMjAxLCAxMiwgMjQ1LCAxMjQsIDIyNSwgNSwgMjU0LCAyNTAsIDEyLCAyNDUsIDEyNCwgMjI1LCA1LCAyMzIsIDIwNiwgCisgICAgMjAsIDIyNSwgNiwgMjMxLCAxOTksIDIwLCAyMjUsIDYsIDIyMywgNTksIDIxNywgODQsIDIyMywgNTksIDcsIDMsIDEsIDcyLCAKKyAgICAyMjMsIDU5LCAxNTQsIDIyMywgNTksIDE3NCwgMjIzLCA1OSwgMTgyLCAyMjMsIDU5LCAxOTEsIDIyMywgNTksIDE4NSwgCisgICAgMjIzLCA1OSwgMTkwLCAyMjMsIDU5LCA4OCwgNTUsIDIyMywgNTksIDIzMywgMTU0LCAyMjMsIDU5LCAyNDYsIDE1NCwgNTUsIAorICAgIDIyMywgNTksIDQyLCAyMjksIDIyOSwgMjIzLCA1OSwgNDUsIDIyOSwgMjI5LCAyMjMsIDU5LCA3LCAzLCAxLCAyMDcsIDIyMywgCisgICAgOTQsIDIxNywgODQsIDIyMywgOTQsIDEwNywgMjIzLCA5NCwgMTAzLCAyMjMsIDk0LCAxNjAsIDIyMywgOTQsIDE1NCwgMjIzLCAKKyAgICA5NCwgMTc0LCAyMjMsIDk0LCAxODIsIDIyMywgOTQsIDE5MSwgMjIzLCA5NCwgMTg1LCAyMjMsIDk0LCAxOTAsIDIyMywgOTQsIAorICAgIDg4LCA1NSwgMjIzLCA5NCwgMjMzLCAxNTQsIDIyMywgOTQsIDI0NiwgMTU0LCA1NSwgMjIzLCA5NCwgNDIsIDIyOSwgMjI5LCAKKyAgICAyMjMsIDk0LCA0NSwgMjI5LCAyMjksIDcsIDIyMywgOTQsIDMsIDEsIDYwLCA3LCAyMjMsIDk0LCAzLCAxLCA3MywgNywgCisgICAgMjIzLCA5NCwgMywgMSwgNzQsIDcsIDIyMywgOTQsIDMsIDEsIDIxOCwgMTUxLCA3LCAyMjMsIDk0LCAzLCAxLCAyMjYsIAorICAgIDEwNCwgMjQ2LCAxMDYsIDU1LCAyNTAsIDE3NiwgNTUsIDI1MCwgOTQsIDU1LCAyNDUsIDEwMiwgMjQ1LCAxMDQsIDU1LCAKKyAgICAyMzUsIDMwLCA1NSwgMjMzLCAxNjUsIDU1LCAyMzIsIDIyMywgNTUsIDIyOSwgMTUzLCA1NSwgMjI3LCA0LCA1NSwgMjE4LCAKKyAgICAxODIsIDU1LCAxNDYsIDIyNCwgMjMyLCA1NSwgMjQ4LCAxNTIsIDU1LCAyNDYsIDEwNywgNTUsIDIzNiwgMTAwLCA1NSwgCisgICAgMjIwLCAyNTIsIDU1LCAyNDcsIDEyNywgNTUsIDI0NCwgMTcwLCAyMjksIDE3NywgNTUsIDIyOSwgMTUxLCA1NSwgMjQ0LCAKKyAgICAxNCwgNTUsIDI1MywgMjI0LCA1NSwgMjQyLCAxNzYsIDU1LCAyNTEsIDk0LCA1NSwgMjM1LCAyNCwgMjIxLCAxMTEsIDU1LCAKKyAgICAyMjMsIDI0NiwgNTUsIDIyMiwgNjQsIDU1LCAzNiwgNDIsIDI0MywgMTc3LCA1MCwgMzYsIDQ1LCAyNDMsIDE3NywgNTAsIAorICAgIDM2LCAxNzEsIDY5LCAyMzUsIDQ0LCAyMzAsIDc0LCAzNiwgMjI0LCAxOTIsIDY5LCAyMzUsIDQ0LCAyMzAsIDc0LCAzNiwgCisgICAgMjU0LCAxMDQsIDc2LCA1MCwgMzYsIDI1MCwgMTk5LCA3NiwgNTAsIDM2LCA0MiwgNzYsIDUwLCAzNiwgNDUsIDc2LCA1MCwgCisgICAgMzYsIDIyNywgOTQsIDIzMCwgNzQsIDM2LCAyNTAsIDE5OSwgMjI3LCA5NCwgMjMwLCA3NCwgMzYsIDI1NCwgMTA0LCAyMjcsIAorICAgIDk0LCAyMzAsIDc0LCAzNiwgMTQ4LCAxODgsIDUwLCAzNiwgMjQ1LCAxMTYsIDE4OCwgNTAsIDM2LCAyNDYsIDE5MywgMjUwLCAKKyAgICAyMjEsIDM2LCAyNDYsIDE5MywgMjIzLCAyMjcsIDM2LCAyNDYsIDE5MywgMjQ5LCA0LCAzNiwgMjQ2LCAxOTMsIDI1MCwgCisgICAgMjIyLCAyNTIsIDIzMCwgMzYsIDQyLCA0NSwgNzYsIDUwLCAzNiwgMjQ2LCAxOTMsIDIyNiwgMTAwLCAzNiwgMjQ2LCAxOTMsIAorICAgIDIzNiwgMTUyLCAzNiwgMjQ2LCAxOTMsIDIyMCwgNTUsIDIyOSwgMjgsIDIyMSwgOTAsIDM2LCAyMjcsIDE2MCwgMjI0LCAxOCwgCisgICAgMjMwLCA3NCwgMzYsIDUxLCA2OSwgMjE0LCAyMzAsIDc0LCAzNiwgMjU0LCAxMTEsIDEwMCwgMzYsIDIyMSwgNzgsIDIyMCwgCisgICAgODAsIDM2LCAyMTgsIDIwMSwgMjUyLCA0LCA1MCwgMzYsIDEyNywgNzYsIDIzMCwgNzQsIDM2LCAxNzEsIDUxLCAyMjQsIDE4LCAKKyAgICAyMzAsIDc0LCAzNiwgOTAsIDI0MywgMTc3LCAyLCAxOTIsIDI0NywgMTI5LCAzNiwgMTI3LCAyNDMsIDE3NywgMiwgMTkyLCAKKyAgICAyNDcsIDEyOSwgMzYsIDQyLCA3NiwgNTYsIDM2LCA0NSwgNzYsIDU2LCAzNiwgMjUzLCAyNTIsIDUwLCAyNTQsIDI1NCwgCisgICAgMjMwLCAxNjUsIDI1NCwgMjQxLCAxOTksIDIyMiwgMjMsIDIyMywgOTgsIDE3MywgNiwgMjUxLCAyMDIsIDI0OSwgNzcsIAorICAgIDI1MSwgODgsIDI1MSwgODUsIDIzNSwgNDQsIDEwMCwgMjUxLCAxMzYsIDIzMCwgMTY1LCAyNTEsIDE2NSwgMjIwLCA4NiwgCisgICAgMjQ2LCAxMDgsIDI1MCwgMTQ0LCAyMjYsIDk4LCAyNDksIDc3LCAyNDUsIDI1MCwgMTAyLCAzLCAyNDUsIDY3LCAxMDIsIDYsIAorICAgIDI0MywgMjI1LCAyNTIsIDUxLCA2LCAyNDMsIDIyNSwgMTczLCA2LCAyNDMsIDIyNSwgMjI5LCA1MywgMjUwLCAxNDQsIDIyOSwgCisgICAgNTMsIDI1MCwgMTQ1LCAxMDQsIDEyNCwgMjI5LCAxMDgsIDEwMiwgNiwgNzIsIDI1MiwgNTEsIDYsIDcyLCAxMDIsIDYsIAorICAgIDE1MywgMTAyLCAzLCAxNTMsIDIzNSwgMjAyLCA0OSwgMjUyLCAyMDEsIDEwMCwgMTczLCA2LCAyMDcsIDIzMSwgMTA1LCA1NSwgCisgICAgMjI0LCA5LCAyMjcsIDIxMCwgMjUwLCAxMjUsIDEwMiwgNiwgMjMwLCA1OSwgMTczLCA2LCAyMzAsIDU5LCAxNzMsIDYsIAorICAgIDIyOCwgMTYzLCAxMDIsIDYsIDE1MiwgMjUyLCA1MSwgNiwgMTUyLCAxNzMsIDYsIDE1MiwgMjI4LCAyMzksIDIyMiwgMTI5LCAKKyAgICAyMjcsIDE2OSwgMjI1LCA1MCwgNzgsIDIyMiwgNzIsIDU1LCAyMjEsIDEwNywgMTY0LCA1NSwgMjE5LCAxNTMsIDE3MywgNiwgCisgICAgMjE3LCAxNTcsIDIzMCwgODUsIDU1LCAyMzAsIDE2MCwgNTUsIDIzNywgMTcwLCAyMzAsIDE2MCwgNTUsIDI1MiwgNTEsIDYsIAorICAgIDIxNywgMTU3LCAyMTUsIDIzLCAzLCAxLCAyMzcsIDE2MiwgMjM2LCAxNzUsIDU1LCAyNTQsIDExOCwgNTUsIDEwMiwgNiwgCisgICAgMjUzLCAyMDQsIDI1MiwgNTEsIDYsIDI1MSwgMjAyLCAyNDYsIDEyNiwgMTAwLCAxMDIsIDMsIDczLCAxMDIsIDYsIDczLCAKKyAgICAxMDIsIDYsIDI0NiwgNzQsIDIxNSwgNiwgMjQ2LCA3NCwgMTAyLCA2LCAxODksIDEwMiwgMywgNzQsIDk5LCAxMDAsIDI1MiwgCisgICAgMTA1LCAxMDAsIDI0NCwgOTIsIDEwMCwgMjQ5LCAxNzgsIDEwMCwgMjM3LCAyMDUsIDIyNCwgNywgMjI3LCA1OSwgNiwgMjI4LCAKKyAgICAxNjMsIDI0NSwgMjUyLCA1NSwgMTczLCAzLCAyMjksIDEwOCwgMTczLCAzLCAyNDQsIDIzMSwgMTczLCA2LCAyNDQsIDIzMSwgCisgICAgMTczLCA2LCAyMjksIDEwOCwgMTczLCAyMzMsIDMzLCAyMjMsIDcxLCAyMTUsIDMzLCA2LCAyNDUsIDY3LCAyMTUsIDMzLCA2LCAKKyAgICAxNTMsIDIxMCwgMzMsIDYsIDE1MywgMjE1LCAzMywgNiwgMjE4LCA5MCwgMTczLCAzMCwgNiwgMjUwLCA0NiwgMTczLCAzMCwgCisgICAgMywgMjUwLCA0NiwgMTczLCAzMCwgMywgNzMsIDE3MywgMzAsIDMsIDcyLCAxNzMsIDMwLCAzLCAyMzcsIDEyNiwgMjI4LCAKKyAgICAyMjAsIDIzNSwgNDMsIDIxNSwgMjU0LCAxMzQsIDIyOSwgMTcwLCA1NSwgMjU0LCAxNzcsIDIxNSwgMywgMjQ2LCA3NCwgMTYsIAorICAgIDM1LCAyMTMsIDIyNCwgNywgMjE5LCA1NSwgMjQ1LCAxMDgsIDEzMSwgMjI1LCA0MCwgMjE5LCA1NSwgMjQ1LCAxMDgsIDEzMSwgCisgICAgMjMyLCAyNiwgMjE5LCA1NSwgMjQ1LCAxMDgsIDEzMSwgMjIyLCA2MSwgMjE5LCA1NSwgMjQ1LCAxMDgsIDEzMSwgMjIxLCAKKyAgICAyNTEsIDIxOSwgNTUsIDI0NSwgMTA4LCAxMjQsIDIyMSwgMjQ5LCAyMTksIDU1LCAyNDUsIDEwOCwgMTMxLCAyNDUsIDE5OSwgCisgICAgMjE5LCA1NSwgMjQ1LCAxMDgsIDEyNCwgMjQ1LCAxOTgsIDIxOSwgNTUsIDI0NSwgMTA4LCAxNDgsIDI0NSwgMTk4LCAyMTksIAorICAgIDU1LCAyNDUsIDEwOCwgMjQ1LCAxMTYsIDI0NSwgMTk4LCAyMTksIDU1LCAyNDUsIDEwOCwgMTMxLCAyMjQsIDczLCAyMTksIAorICAgIDU1LCAyNDUsIDEwOCwgMjQ1LCAxNzAsIDIyNCwgNzEsIDIxOSwgNTUsIDI0NSwgMTA4LCAxMzEsIDI0NiwgMjMxLCAyMTksIAorICAgIDU1LCAyNDUsIDEwOCwgMTQ4LCAyNDYsIDIyOSwgMjE5LCA1NSwgMjQ1LCAxMDgsIDI0NSwgMTcwLCAyNDYsIDIyOSwgMjE5LCAKKyAgICA1NSwgMjQ1LCAxMDgsIDIyNSwgNDMsIDI0NiwgMjI5LCAyNDUsIDEwOCwgMjMxLCAxMDYsIDEwNywgMjI3LCA2OCwgMjMxLCAKKyAgICAxMDcsIDEwNywgMjI3LCA2OCwgMjMxLCAxMDcsIDEwMywgMjI3LCA2OCwgMjMxLCAxMDcsIDE2MCwgMjI3LCA2OCwgMjMxLCAKKyAgICAxMDcsIDE1NCwgMjI3LCA2OCwgMjMxLCAxMDcsIDE3NCwgMjI3LCA2OCwgMjMxLCAxMDcsIDE4MiwgMjI3LCA2OCwgMjMxLCAKKyAgICAxMDcsIDE5MSwgMjI3LCA2OCwgMjMxLCAxMDcsIDE4NSwgMjI3LCA2OCwgMjMxLCAxMDcsIDE5MCwgMjI3LCA2OCwgMjMxLCAKKyAgICAxMDcsIDIyMiwgNjUsIDIyNywgNjgsIDIzMSwgMTA3LCAyNDYsIDIxMSwgMjI3LCA2OCwgMjMxLCAxMDcsIDIyMCwgMjIxLCAKKyAgICAyMjcsIDY4LCAyMzEsIDEwNywgMjQ1LCAxOTYsIDIyNywgNjgsIDIzMSwgMTA3LCAxMzEsIDI0MiwgMTYxLCAyMjcsIDY4LCAKKyAgICAyMzEsIDEwNywgMjQ1LCAxNzAsIDI0MiwgMTYxLCAyMjcsIDY4LCAyMzEsIDEwNywgMTMxLCAyMjEsIDIzMSwgMywgMjI3LCAKKyAgICA2OCwgMjMxLCAxMDcsIDEwNywgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDEwMywgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDE2MCwgCisgICAgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDE1NCwgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDE3NCwgMywgMjI3LCA2OCwgMjMxLCAKKyAgICAxMDcsIDE4MiwgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDE5MSwgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDE4NSwgMywgMjI3LCAKKyAgICA2OCwgMjMxLCAxMDcsIDE5MCwgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDIyMiwgNjUsIDMsIDIyNywgNjgsIDIzMSwgMTA3LCAKKyAgICAyNDYsIDIxMSwgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDIyMCwgMjIxLCAzLCAyMjcsIDY4LCAyMzEsIDEwNywgMjQ1LCAxOTYsIAorICAgIDMsIDIyNywgNjgsIDIzMSwgMTA3LCAxMzEsIDI0MiwgMTYxLCAzLCAyMjcsIDY4LCAyMzEsIDEwNywgMjQ1LCAxNzAsIDI0MiwgCisgICAgMTYxLCAzLCAyMjcsIDY4LCAyMzEsIDEwNywgMTMxLCAyMjEsIDIzMSwgMjI3LCA2OCwgMjMxLCAxMDcsIDEzMSwgMjIxLCAKKyAgICAyMzIsIDI1MSwgMjAzLCAyNTAsIDQ2LCAyMjcsIDY4LCAyMzEsIDEwNywgMjQ1LCAxNzAsIDIyMSwgMjMxLCAyMjcsIDY4LCAKKyAgICAyMzEsIDEwNywgMjIyLCA2NiwgMjIxLCAyMzEsIDIyNywgNjgsIDIzMSwgMTA3LCAyMTAsIDEzMSwgMjQyLCAxNjEsIDcsIDMsIAorICAgIDEsIDIxMCwgMjUxLCAyMDIsIDIyNywgNjgsIDIzMSwgMTA3LCAyMjQsIDgyLCAyMzUsIDE0MCwgMTcsIDIyNywgNjgsIDIzMSwgCisgICAgMTA3LCAyNDUsIDE5NywgMjQ3LCAxMCwgMTcsIDIyNywgNjgsIDIzMSwgMTA3LCAyNDUsIDE5NywgMjIxLCAyMzEsIDIyNywgCisgICAgNjgsIDIzMSwgMTA3LCAxMzEsIDI0MiwgMTYyLCAyMjEsIDIzMSwgMjE5LCA1NSwgMjQ1LCAxMDgsIDIxNywgODUsIDIyMSwgCisgICAgMjQ5LCAxMjcsIDY1LCAyMjAsIDUzLCA2NSwgOTAsIDY1LCAyNDcsIDEzMCwgNjUsIDQyLCA0NSwgNjUsIDEwOCwgMTEzLCAKKyAgICA2NSwgMjMxLCAxODcsIDIxOCwgMjE3LCA2NSwgMjMxLCAxODcsIDI0NywgNSwgNjUsIDIyNCwgNiwgMjQ3LCA1LCA2NSwgCisgICAgMjI0LCA2LCAyMTgsIDIxNywgNjUsIDEyNywgNzYsIDIsIDkyLCA5MCwgNzYsIDIsIDkyLCAxMjcsIDIxOCwgMjM3LCA2NSwgCisgICAgOTAsIDIxOCwgMjM3LCA2NSwgMTI3LCAxMjQsIDI0MywgMTU4LCA2NSwgMjIwLCA1MywgMTI0LCAyNDMsIDE1OCwgNjUsIDkwLCAKKyAgICAxMjQsIDI0MywgMTU4LCA2NSwgMjQ3LCAxMzAsIDEyNCwgMjQzLCAxNTgsIDY1LCAxMjcsIDc2LCAyLCAyMjIsIDEzNSwgOTAsIAorICAgIDc2LCAyLCAyMjIsIDEzNSwgMTI3LCA3NiwgMjQ1LCA5NywgMTM1LCAyMjAsIDUzLCA3NiwgMjQ1LCA5NywgMTM1LCA5MCwgCisgICAgNzYsIDI0NSwgOTcsIDEzNSwgMjQ3LCAxMzAsIDc2LCAyNDUsIDk3LCAxMzUsIDEwOCwgMTEzLCA3NiwgMiwgMjUyLCAxODksIAorICAgIDEyNywgNzYsIDIsIDk2LCA5MCwgNzYsIDIsIDk2LCAxMjcsIDc2LCAyLCAyMzQsIDI0NywgOTAsIDc2LCAyLCAyMzQsIDI0NywgCisgICAgNDIsIDQ1LCAyMTgsIDIzNywgNjUsIDQyLCA0NSwgNzYsIDIsIDkyLCAyNDcsIDEzMCwgMjE3LCAzMywgNjUsIDIyMCwgNTMsIAorICAgIDc2LCAyLCAyMjEsIDE3MCwgMjM1LCAxMDcsIDIyMCwgNTMsIDc2LCAyLCAyMjEsIDE3MCwgMjI3LCAxMDAsIDI0NywgMTMwLCAKKyAgICA3NiwgMiwgMjIxLCAxNzAsIDIzNSwgMTA3LCAyNDcsIDEzMCwgNzYsIDIsIDIyMSwgMTcwLCAyMjcsIDEwMCwgOTAsIDc2LCAKKyAgICAyLCAyNTAsIDEyNCwgMjQ3LCAxMjksIDI0NywgMTMwLCA3NiwgMiwgMjUwLCAxMjQsIDIzNSwgMTA3LCAyNTQsIDEwNCwgCisgICAgMjIxLCAxMjAsIDIyNSwgNzAsIDY1LCAyNTAsIDE5OSwgMjIxLCAxMjAsIDIyNSwgNzAsIDY1LCAyMzEsIDE4NywgMjE4LCAKKyAgICAyMTcsIDc2LCAxOTksIDE3MSwgMTM1LCAxMjcsIDc2LCAxOTksIDI1MiwgMjAxLCAxMDQsIDkwLCA3NiwgMTk5LCAxMzUsIAorICAgIDI1NCwgMTA0LCAyMzAsIDExOSwgMjUwLCAyMjIsIDY1LCAyNTAsIDE5OSwgMjMwLCAxMTksIDI1MCwgMjIyLCA2NSwgMTI3LCAKKyAgICAyNDMsIDE3NywgMiwgMTkyLCAyMjAsIDUyLCAxMjcsIDI0MywgMTc3LCAyLCAxOTIsIDI0NywgMTI5LCAyMjAsIDUzLCAyNDMsIAorICAgIDE3NywgMiwgMTkyLCAyMjcsIDEwMCwgMjIwLCA1MywgMjQzLCAxNzcsIDIsIDE5MiwgMjM1LCAxMDcsIDkwLCAyNDMsIDE3NywgCisgICAgMiwgMTkyLCAyMjAsIDUyLCA5MCwgMjQzLCAxNzcsIDIsIDE5MiwgMjQ3LCAxMjksIDI0NywgMTMwLCAyNDMsIDE3NywgMiwgCisgICAgMTkyLCAyMjcsIDEwMCwgMjQ3LCAxMzAsIDI0MywgMTc3LCAyLCAxOTIsIDIzNSwgMTA3LCA5MCwgNzYsIDEwNCwgMTI3LCAKKyAgICA2NSwgMjIwLCA1MywgNzYsIDEyNywgMTE3LCAyNDcsIDEzMCwgNjUsIDEyNywgNzYsIDEwNCwgOTAsIDY1LCAxMjcsIDIzMCwgCisgICAgMzIsIDI1NCwgMTksIDIyMCwgNTMsIDIzMCwgMzIsIDI1NCwgMTksIDkwLCAyMzAsIDMyLCAyNTQsIDE5LCAyNDcsIDEzMCwgCisgICAgMjMwLCAzMiwgMjU0LCAxOSwgMTI3LCAyNDMsIDE3NywgMTA0LCA5MCwgMjQzLCAxNzYsIDkwLCAyNDMsIDE3NywgMTA0LCAKKyAgICAxMjcsIDI0MywgMTc2LCAxMjcsIDUxLCA3NiwgMiwgOTIsIDQyLCA0NSwgNTEsIDc2LCAyLCA5MiwgOTAsIDUxLCA3NiwgMiwgCisgICAgOTIsIDEyNywgNTEsIDY1LCAyMjAsIDUzLCA1MSwgNjUsIDkwLCA1MSwgNjUsIDI0NywgMTMwLCA1MSwgNjUsIDQyLCA0NSwgCisgICAgNTEsIDY1LCAxMDgsIDExMywgNTEsIDY1LCAyMzEsIDE4NywgMjE4LCAyMTcsIDUxLCA2NSwgMjMxLCAxODcsIDI0NywgNSwgCisgICAgNTEsIDY1LCAyMjQsIDYsIDI0NywgNSwgNTEsIDY1LCAyMjQsIDYsIDIxOCwgMjE3LCA1MSwgNjUsIDEyNywgMjIxLCA3OCwgCisgICAgNjUsIDkwLCAyMjEsIDc4LCA2NSwgMTI3LCAyMjMsIDIyMywgNjUsIDkwLCAyMjMsIDIyMywgNjUsIDIyMCwgNTMsIDc2LCAyLCAKKyAgICA1MSwgOTIsIDI0NywgMTMwLCA3NiwgMiwgNTEsIDkyLCAxMjcsIDI0OSwgMTQ1LCA2NSwgMjIwLCA1MywgMjQ5LCAxNDUsIAorICAgIDY1LCA5MCwgMjQ5LCAxNDUsIDY1LCAyNDcsIDEzMCwgMjQ5LCAxNDUsIDY1LCAxMjcsIDc2LCAxOTksIDEzNSwgOTAsIDc2LCAKKyAgICAxOTksIDEzNSwgMTI3LCA2NywgNjUsIDIyMCwgNTMsIDY3LCA2NSwgOTAsIDY3LCA2NSwgMjQ3LCAxMzAsIDY3LCA2NSwgCisgICAgMjIwLCA1MywgNjcsIDc2LCAyNDUsIDk3LCAxMzUsIDIyMCwgNTMsIDY3LCA3NiwgMjMwLCAxMzksIDIyOSwgMTkzLCAyMjAsIAorICAgIDUzLCA2NywgNzYsIDIzMCwgMTM5LCAyMjksIDE5NCwgMiwgMTg2LCAxMzUsIDIyMCwgNTMsIDY3LCA3NiwgMjMwLCAxMzksIAorICAgIDIyOSwgMTk0LCAyLCA2OSwgMTM1LCAyMjAsIDUzLCA2NywgNTEsIDY1LCAyMjAsIDUzLCA2NywgNTEsIDc2LCAyMzAsIDEzOSwgCisgICAgMjI5LCAxOTMsIDkwLCA2NywgNzYsIDI0NSwgOTcsIDIxOCwgMjU0LCAyMzEsIDE4NywgMjE4LCAyMTcsIDc2LCAxOTksIAorICAgIDI1MCwgMTIzLCAyMjQsIDYsIDI0NywgNSwgNzYsIDE5OSwgMjUwLCAxMjMsIDEwOCwgMTEzLCA2NywgNjUsIDQ1LCA3NiwgMiwgCisgICAgMywgMjUwLCAyMjEsIDI0NywgMTMwLCA3NiwgMTI3LCAxMTcsIDIyMCwgNTMsIDY1LCAxNDgsIDkwLCAyNTQsIDE5LCAxMjcsIAorICAgIDc2LCAyLCA2OSwgOTIsIDkwLCA3NiwgMiwgNjksIDkyLCA0MiwgNDUsIDc2LCAyLCA2OSwgOTIsIDEyNywgNzYsIDIsIDUxLCAKKyAgICA2OSwgOTIsIDkwLCA3NiwgMiwgNTEsIDY5LCA5MiwgNDIsIDQ1LCA3NiwgMiwgNTEsIDY5LCA5MiwgMTI3LCAyMzAsIDExNywgCisgICAgNjUsIDkwLCAyMzAsIDExNywgNjUsIDQyLCA0NSwgMjMwLCAxMTcsIDY1LCAzNSwgMjU0LCAxNTcsIDI1MCwgMTY0LCAyMjksIAorICAgIDIyMywgMjQ4LCAyNDYsIDIyMiwgMTQsIDI0NiwgOTEsIDIyMiwgMTQsIDI0OCwgMTYwLCAyMTIsIDI0NiwgOTIsIDI0NiwgCisgICAgMTk5LCAyMjUsIDQ1LCAyMzcsIDIxNSwgMjMyLCAyMzEsIDI0NiwgMjEzLCAyMzAsIDE2NSwgMjEyLCAyNTQsIDEzMiwgMjQ2LCAKKyAgICAyMTMsIDIzMCwgMTY1LCAzLCAyNDYsIDIxMywgMjMwLCAxNjUsIDI1MCwgMTQwLCAyNTQsIDE0LCAyMzMsIDI1NCwgMjQ4LCAKKyAgICAxNjAsIDIxMiwgMjUwLCAxNDIsIDI1NCwgMTQsIDIzMywgMjU0LCAzLCAyNTAsIDE0MCwgMjU0LCAxNCwgMjMzLCAyNTQsIAorICAgIDI0NiwgMTkwLCAxMTcsIDIyOCwgMjIyLCAyMzMsIDMzLCAyMjgsIDIyOSwgMjMzLCAzMywgMjUwLCAxMjgsIDIzMywgMzMsIAorICAgIDIyMywgNzEsIDIzMywgMTU1LCA1NSwgMjMzLCAxNTMsIDU1LCA2MSwgMjI5LCA0MywgMjQ4LCAxODgsIDIyNCwgNTUsIDIyNSwgCisgICAgNDYsIDIzMywgMTU0LCAyNTMsIDI1MiwgMjMwLCAxMTIsIDIyNywgOTQsIDIzMCwgMTEyLCAyNTEsIDI0MiwgMjMwLCAxMTIsIAorICAgIDQwLCAyMjcsIDY0LCAyNTAsIDg5LCAyMjcsIDY0LCAyNDUsIDExMCwgMjI3LCA2NCwgMjI4LCAyMTgsIDEwMSwgMjM3LCAKKyAgICAyMDcsIDQ1LCAyNTQsIDExOSwgMjU0LCAxMTksIDIzNCwgMjIsIDI1NCwgMTE5LCAyMjMsIDI0NSwgMjU0LCAxMTksIDI0OCwgCisgICAgMTkwLCAyNDgsIDE2MCwgMjEyLCAyNDgsIDE5MywgMjI5LCAyMzQsIDEwMSwgMjEyLCAyMjksIDIzNCwgMTAxLCAyMzUsIDcsIAorICAgIDI1NCwgMTI2LCAyMzUsIDcsIDIzMCwgMTA1LCAyMzcsIDE3NCwgMjIwLCA3NCwgMjM3LCAxODYsIDUxLCAyMzcsIDE4NiwgCisgICAgMjIxLCA3OCwgMjM3LCAxODYsIDI1MCwgMTM2LCAyMzcsIDE4NiwgMjIzLCA0OSwgMjM3LCAxODYsIDIxOSwgNjUsIDIzNywgCisgICAgMTg2LCAyNTAsIDE5OSwgMjM3LCAxODYsIDI1MCwgMTk5LCAyNTAsIDEzNiwgMjM3LCAxODYsIDI1NCwgMTA0LCAyNTAsIAorICAgIDEzNiwgMjM3LCAxODYsIDIyMiwgMTMsIDI1MiwgMTM4LCAyMjcsIDIyNCwgMjI4LCAyMTksIDYxLCAyMzMsIDE1NCwgMjQ2LCAKKyAgICA5NiwgMjQ0LCAxNzYsIDIyOCwgMjE5LCAyNDIsIDI1MCwgMjIxLCAxODAsIDIzMCwgMTEyLCAyMTAsIDIyMSwgMTc5LCAyMzcsIAorICAgIDE3MCwgMjM1LCAxMjksIDE5OCwgMjI0LCAxMTEsIDIxOCwgMjM2LCAyMTgsIDE2OCwgMjI4LCAyMjksIDIxMiwgMjIxLCAKKyAgICAxNzksIDIzMywgMTU1LCAyMjEsIDE3OSwgMjUzLCAyNDcsIDExNCwgMTAxLCAyMTIsIDI1MywgMjQ3LCAxMTQsIDEwMSwgCisgICAgMjU0LCA3MiwgMTE0LCAxMDEsIDI1NCwgNzIsIDI1MSwgMjIyLCAyMTIsIDI1NCwgMjQ5LCAxMTQsIDEwMSwgMjMyLCAxMzUsIAorICAgIDI1NCwgNzIsIDIzMSwgMTkwLCAyNTQsIDI0OSwgMTE0LCAxMDEsIDI1NCwgMTUxLCAxMTQsIDEwMSwgMjEyLCAyNTQsIDE1MSwgCisgICAgMTE0LCAxMDEsIDI1NCwgMTUxLCAxMTQsIDE1NiwgMTE0LCAxMDEsIDIyMSwgNzgsIDIyMSwgMTc5LCAyNTQsIDE1OCwgMTE0LCAKKyAgICAxMDEsIDI0NiwgMTUwLCAxMDEsIDI0NCwgMTc1LCAyNDYsIDE1MCwgMTAxLCAyNDgsIDI0NywgMjUyLCA5OSwgMjU0LCA3NCwgCisgICAgMjIyLCAyMywgMjM1LCA1MSwgMjQ0LCAxNzUsIDExNCwgMTAxLCAyNTQsIDcyLCAxMTQsIDE5OSwgMTU2LCAyMjIsIDIzLCAKKyAgICAyMzcsIDIzNywgMjMwLCAxNjUsIDIzNywgMjM3LCAxMTcsIDE1NiwgMjU0LCA3MiwgMTE0LCAxMDEsIDI1MCwgMTc2LCAyNDYsIAorICAgIDE1MywgMjQ2LCAxNTQsIDI1MCwgMTc1LCAyMjcsIDk0LCAyMzcsIDIyNCwgMTE0LCAxMDEsIDIyNywgOTQsIDExNCwgMTAxLCAKKyAgICAyNTAsIDExNywgMTAxLCAyNDYsIDEyNSwgMjQ2LCAxNTIsIDEwMSwgMjIzLCAxNTcsIDI0NiwgMTUzLCAyNDksIDYzLCAxMTQsIAorICAgIDEwMSwgMTE0LCAxOTksIDI1MSwgMjEzLCAyNDksIDc4LCAyMzQsIDIyLCAyNTEsIDIxMiwgMjI4LCA4MCwgMTE0LCAxMDEsIAorICAgIDIxMiwgMTE0LCAxMDEsIDI0MiwgNTksIDEwMSwgMjEyLCAyNDIsIDU5LCAxMDEsIDIyMywgMTIzLCAyNDYsIDE1MCwgMTAxLCAKKyAgICAyMzUsIDg3LCAxNTYsIDExNCwgMTAxLCAyNDQsIDMwLCAxNTYsIDExNCwgMTAxLCAyMzUsIDg3LCAxMDQsIDExNCwgMTAxLCAKKyAgICAyNDQsIDMwLCAxMDQsIDExNCwgMTAxLCAyMzUsIDg3LCAyNTEsIDIyMiwgMjEyLCAxMTQsIDEwMSwgMjQ0LCAzMCwgMjUxLCAKKyAgICAyMjIsIDIxMiwgMTE0LCAxMDEsIDIzMywgOTUsIDIzNSwgODYsIDIzMywgOTUsIDI0NCwgMjksIDI1MiwgOTksIDIxMiwgCisgICAgMjQ2LCAxNTAsIDEwMSwgMjEyLCAyMzUsIDg2LCAyMTIsIDI0NCwgMjksIDIzMiwgMTM1LCAyMzUsIDg3LCAyMzEsIDE5MCwgCisgICAgMTE0LCAxMDEsIDIzMiwgMTM1LCAyNDQsIDMwLCAyMzEsIDE5MCwgMTE0LCAxMDEsIDIzNSwgODcsIDE1NiwgMjQ2LCAxNTAsIAorICAgIDEwMSwgMjQ0LCAzMCwgMTU2LCAyNDYsIDE1MCwgMTAxLCAyMzIsIDEzNSwgMjM1LCA4NywgMjMxLCAxOTAsIDI0NiwgMTUwLCAKKyAgICAxMDEsIDIzMiwgMTM1LCAyNDQsIDMwLCAyMzEsIDE5MCwgMjQ2LCAxNTAsIDEwMSwgMjM1LCA4NywgMTU2LCAyNDQsIDI5LCAKKyAgICAyNDQsIDMwLCAxNTYsIDIzNSwgODYsIDIzMiwgMTM1LCAyMzUsIDg3LCAyMzEsIDE5MCwgMjQ0LCAyOSwgMjMyLCAxMzUsIAorICAgIDI0NCwgMzAsIDIzMSwgMTkwLCAyMzUsIDg2LCAyMjgsIDI0NCwgMjIzLCA4NCwgMjI4LCAyNDUsIDE1NiwgMTE0LCAxMDEsIAorICAgIDIyMywgODUsIDE1NiwgMTE0LCAxMDEsIDIyOCwgMjQ1LCAxNTYsIDI0NiwgMTUwLCAxMDEsIDIyMywgODUsIDE1NiwgMjQ2LCAKKyAgICAxNTAsIDEwMSwgMjQ4LCAxNjAsIDIxMiwgMjI4LCAyNDcsIDI0OCwgMTYwLCAyMTIsIDIyMywgODYsIDIyMywgOTMsIDIzMCwgCisgICAgMTY1LCAyMjMsIDU4LCAyMzAsIDE2NSwgMjEyLCAxMTIsIDIyMywgOTMsIDIzMCwgMTY1LCAyMTIsIDExMiwgMjIzLCA1OCwgCisgICAgMjMwLCAxNjUsIDIyMywgOTMsIDExNywgMTU2LCAxMTQsIDEwMSwgMjIzLCA1OCwgMTE3LCAxNTYsIDExNCwgMTAxLCAyMzIsIAorICAgIDEzNSwgMTEyLCAyMjMsIDkzLCAxMTcsIDIzMSwgMTkwLCAxMTQsIDEwMSwgMjMyLCAxMzUsIDExMiwgMjIzLCA1OCwgMTE3LCAKKyAgICAyMzEsIDE5MCwgMTE0LCAxMDEsIDIyMywgOTMsIDExNywgMiwgMjEyLCAxMTQsIDEwMSwgMjIzLCA1OCwgMTE3LCAyLCAyMTIsIAorICAgIDExNCwgMTAxLCAyMzMsIDgxLCAyMzMsIDgyLCAyMzMsIDgzLCAyMzMsIDgyLCAyMjAsIDc0LCA0MCwgMjM3LCAyMzcsIDIzMCwgCisgICAgMTY1LCA0MCwgMjMwLCAxMDEsIDIzMCwgMTY1LCA0MCwgMjM3LCAyMzcsIDExNywgMTU2LCAxMTQsIDEwMSwgNDAsIDIzMCwgCisgICAgMTAxLCAxMTcsIDE1NiwgMTE0LCAxMDEsIDQwLCAyNTEsIDE0MywgNDAsIDI1MCwgODIsIDM0LCAyMjksIDQzLCAzNCwgMjMzLCAKKyAgICAxNTQsIDM0LCAyMjEsIDE3NiwgMzQsIDI0OCwgMTg4LCAyMjQsIDU1LCAzNCwgNjEsIDIzMCwgMTEyLCAzNCwgMjI3LCA5NCwgCisgICAgMjMwLCAxMTIsIDM0LCAyNTMsIDI1MiwgMjMwLCAxMTIsIDM0LCAyNDYsIDE1MywgMzQsIDI0OSwgMTQ2LCAyMDQsIDIyOSwgCisgICAgNDMsIDIwNCwgMjMzLCAxNTQsIDIwNCwgMjIxLCAxNzYsIDIwNCwgNjEsIDIzMCwgMTEyLCA0NSwgMjIyLCAxNDMsIDQyLCAKKyAgICAyMjIsIDE0MywgMTEzLCAyMjIsIDE0MywgMTA4LCAyMjIsIDE0MywgMjUzLCAyNTUsIDIzMywgMTMzLCAyMjEsIDYyLCAyNDUsIAorICAgIDEyOCwgMjIxLCA3OCwgNjksIDI1MiwgMjAxLCA0NSwgMjIwLCAyMzYsIDUxLCA2OSwgMjUyLCAyMDEsIDUxLCA0NSwgMjIwLCAKKyAgICAyMzYsIDI0OCwgMTYwLCAyMTIsIDIyOCwgMjE0LCAyMTIsIDIyMSwgNjIsIDI0OCwgMTYwLCAyMTIsIDI0NSwgMTI5LCAyMzIsIAorICAgIDEzOCwgNTEsIDY5LCAyNTIsIDIwMSwgNTEsIDQ1LCAyMjAsIDIzNiwgMjI4LCAyNDUsIDIyMCwgODIsIDIyNywgMTkyLCAKKyAgICAyMjMsIDg1LCAyMjAsIDgyLCAyMjcsIDE5MiwgMjMxLCAxODgsIDIyMywgMTAxLCAyMzAsIDE2NSwgMjUwLCAxNDAsIDI1NCwgCisgICAgMTQsIDIzMSwgMTg4LCAyMjMsIDEwMCwgMjMxLCAxODgsIDIyMywgMTAxLCAxMTcsIDE1NiwgMTE0LCAxMDEsIDI1MCwgMTQwLCAKKyAgICAyNTQsIDE0LCAyMzEsIDE4OCwgMjIzLCAxMDEsIDE1NiwgMTE0LCAxMDEsIDIzMCwgMTAxLCAyMzAsIDE2NSwgMjM3LCAyMzcsIAorICAgIDIzMCwgMTY1LCAyMzMsIDg3LCAyNDMsIDEzMSwgMjUwLCAxNTAsIDIzNCwgNDksIDIzNywgMTgzLCAyMTgsIDExOCwgMjMyLCAKKyAgICAyMTYsIDIzMSwgMTg5LCA0NSwgMjU0LCAxMjAsIDIsIDI1NCwgNTEsIDQ1LCAyMjEsIDkwLCAyMzMsIDMzLCAyMzUsIDcsIAorICAgIDI1NCwgMTI2LCAyMzMsIDMzLCAyMzUsIDcsIDIzMCwgMTA1LCAyMzMsIDMzLCAyMzcsIDE3NCwgMjMzLCAzMywgMjIwLCA3NCwgCisgICAgMjQ5LCA1LCAyMzAsIDExMiwgNjEsIDIzMCwgMTEyLCAyMjMsIDE1NywgMjMwLCAxMTIsIDI0OCwgMTg4LCAyMjEsIDE3NiwgCisgICAgMjUyLCAyMiwgNDIsIDIzMSwgMTg4LCAyNDUsIDI1MSwgMjI1LCA2NiwgMjI4LCAyMjksIDQ1LCAyMzEsIDE4OCwgMjQ1LCAKKyAgICAyNTEsIDIyNSwgNjYsIDIyOCwgMjI5LCA0MiwgMjI1LCA2NiwgMjI4LCAyMjksIDQ1LCAyMjUsIDY2LCAyMjgsIDIyOSwgCisgICAgMjEwLCAyMjEsIDE4MCwgMjQ2LCAxNTMsIDI1MCwgNzksIDIzNSwgNywgMjMwLCAxMDUsIDI1MCwgNzksIDIzNSwgNywgMjU0LCAKKyAgICAxMjYsIDUxLCAyMjMsIDkyLCA1MSwgMjIzLCA1NywgNTEsIDIzNywgMTc0LCA1MSwgMjIwLCA3NCwgMjI5LCA2MiwgMTE0LCAKKyAgICAyNSwgMjI5LCAyMzQsIDEwMSwgMjM1LCA4NywgMiwgMjQ4LCAxNDUsIDI0NCwgMzAsIDIsIDI0OCwgMTQ1LCAyMTksIDEwMCwgCisgICAgMjMzLCA5NSwgMjM1LCA4NiwgMjE5LCAxMDAsIDIzMywgOTUsIDI0NCwgMjksIDIzNSwgODcsIDExNCwgMTk5LCAxNTYsIAorICAgIDI0NCwgMjksIDI0NCwgMzAsIDExNCwgMTk5LCAxNTYsIDIzNSwgODYsIDExNCwgMTk5LCAxNTYsIDIzNSwgODYsIDExNCwgCisgICAgMTk5LCAxNTYsIDI0NCwgMjksIDExNCwgMTk5LCAxNTYsIDIyOCwgMjQ0LCAxMTQsIDE5OSwgMTU2LCAyMjMsIDg0LCAyNDgsIAorICAgIDE2MCwgMjEyLCAyMjgsIDI0OCwgMTU2LCAyNDYsIDE1NSwgMjQ4LCAxNjAsIDIxMiwgMjIzLCA4NywgMTU2LCAyNDYsIDE1NSwgCisgICAgMjEyLCA0MCwgMjM3LCAyMzcsIDExNywgMTU2LCAxMTQsIDEwMSwgMjEyLCA0MCwgMjMwLCAxMDEsIDExNywgMTU2LCAxMTQsIAorICAgIDEwMSwgNDAsIDIzNywgMjM3LCAxMTcsIDE1NiwgMjEyLCAxMTQsIDEwMSwgNDAsIDIzMCwgMTAxLCAxMTcsIDE1NiwgMjEyLCAKKyAgICAxMTQsIDEwMSwgMjM1LCA4NywgMjUxLCAyMjIsIDIxMiwgMjQ2LCAxNTAsIDEwMSwgMjQ0LCAzMCwgMjUxLCAyMjIsIDIxMiwgCisgICAgMjQ2LCAxNTAsIDEwMSwgMjI4LCAyNDUsIDI1MSwgMjIyLCAyMTIsIDI0NiwgMTUwLCAxMDEsIDIyMywgODUsIDI1MSwgMjIyLCAKKyAgICAyMTIsIDI0NiwgMTUwLCAxMDEsIDIxMiwgMjMxLCAxODgsIDIyMywgMTAxLCAyMzAsIDE2NSwgMjQ4LCAxNjAsIDIxMiwgCisgICAgMjUwLCAxNDIsIDI1NCwgMTQsIDIzMSwgMTg4LCAyMjMsIDEwMCwgMjEyLCAyMzEsIDE4OCwgMjIzLCAxMDEsIDExNywgMTU2LCAKKyAgICAxMTQsIDEwMSwgMjQ4LCAxNjAsIDIxMiwgMjUwLCAxNDIsIDI1NCwgMTQsIDIzMSwgMTg4LCAyMjMsIDEwMSwgMTU2LCAyNDYsIAorICAgIDE1NSwgNjksIDI0NiwgMjA4LCAyMzMsIDE5MSwgMTg2LCAyNDYsIDIwOCwgMTA4LCA0NSwgMjQ5LCAxMSwgMjQ2LCAyMDgsIAorICAgIDExMywgNDUsIDI0OSwgMTEsIDI0NiwgMjA4LCAyNDYsIDIxMywgMTE3LCAyLCAxNzEsIDE4NiwgOTIsIDI0NiwgMjEzLCAKKyAgICAxMTcsIDIsIDY5LCAyNTIsIDIwMSwgMjUzLCAyNDUsIDI0NiwgMTkwLCAxMTcsIDE4NiwgOTIsIDMsIDI0NiwgMjEzLCAxMTcsIAorICAgIDIsIDY5LCAyNTIsIDIwMSwgMjUzLCAyNDUsIDI0NiwgMTkwLCAxMTcsIDE4NiwgOTIsIDI0NiwgMjEzLCAxMTcsIDIsIDYxLCAKKyAgICA1MCwgMjQ2LCAyMTMsIDExNywgMiwgMjMwLCA3NywgMywgMjQ2LCAyMTMsIDExNywgMiwgMjMwLCA3NywgMjQ2LCAyMTMsIAorICAgIDExNywgMiwgMjIwLCA4MSwgMjQ2LCAyMTMsIDExNywgMiwgMTI0LCAxODYsIDIyMywgMTA3LCAyNTAsIDE0MCwgMiwgMTcxLCAKKyAgICAxODYsIDkyLCAyNTAsIDE0MCwgMiwgNjksIDI1MiwgMjAxLCAyNTMsIDI0NSwgMjQ2LCAxOTAsIDExNywgMTg2LCA5MiwgMywgCisgICAgMjUwLCAxNDAsIDIsIDY5LCAyNTIsIDIwMSwgMjUzLCAyNDUsIDI0NiwgMTkwLCAxMTcsIDE4NiwgOTIsIDI1MCwgMTQwLCAyLCAKKyAgICAyMzAsIDc3LCAzLCAyNTAsIDE0MCwgMiwgMjMwLCA3NywgMjE3LCAxNTgsIDE2NSwgMjUyLCAyMjYsIDIzMywgMjUzLCAyNDksIAorICAgIDYsIDU1LCAyNDYsIDIxNSwgNjUsIDI0MiwgMTgyLCAxMDgsIDI1NCwgMjAsIDExMywgMjU0LCAyMCwgMjI4LCAyMjUsIDIyOSwgCisgICAgMTU2LCAyMTgsIDIzNSwgMjM1LCA0MywgNDIsIDI1MSwgOTAsIDQ1LCAyNTEsIDkwLCA0MiwgMjQ1LCAxNDksIDQ1LCAyNDUsIAorICAgIDE0OSwgMjUyLCAyOSwgNDUsIDI1MCwgMTAyLCAyNTIsIDI5LCA0MiwgMjUwLCAxMDIsIDIyMSwgMTIwLCA0NSwgMjUwLCAKKyAgICAxMDIsIDIyMSwgMTIwLCA0MiwgMjUwLCAxMDIsIDIxMCwgMjEyLCA1NSwgNDAsIDIzNCwgMjM0LCAyNTQsIDUxLCAyMjYsIAorICAgIDgwLCAyMjYsIDg1LCAyMjIsIDcyLCAyMjcsIDIxMSwgMjI5LCAxNiwgMjM3LCAyMTEsIDIxOSwgODgsIDIyMywgMjI3LCAKKyAgICAyMjksIDU3LCAxMTcsIDIzNywgMTgyLCA1NSwgMjE1LCAyMTIsIDU1LCAyMTgsIDI0MiwgMjQyLCAxODMsIDIyMSwgMTIwLCAKKyAgICA0MiwgMjUwLCAxMjMsIDIyMSwgMTIwLCA0NSwgMjUwLCAxMjMsIDI1MiwgMjksIDQyLCAyNTAsIDEyMywgMjUyLCAyOSwgNDUsIAorICAgIDI1MCwgMTIzLCAyMjEsIDEyMCwgMTQ0LCAyMzcsIDE4NiwgMjUyLCAyOSwgMTQ0LCAyMzcsIDE4NiwgMjQ1LCA5NSwgMjI0LCAKKyAgICAzOSwgMTA4LCAyNTQsIDIxLCAyNTIsIDEwMCwgMTI0LCAxODYsIDI1MiwgMTkxLCAyMzAsIDEwNywgMjM2LCAxNTQsIDI0NiwgCisgICAgMTQ2LCAxOTksIDIyMiwgMjMsIDIyNywgMTA5LCAyMTgsIDE1MiwgMjM3LCAyMjQsIDExMiwgMjI3LCAyMDksIDI1MiwgMjEsIAorICAgIDIzNiwgMTUzLCAyMzUsIDExMiwgMjU0LCAxMjAsIDExNSwgMjI3LCAxMDYsIDI1NCwgMTIwLCAxMTUsIDI0NiwgMTQ2LCAKKyAgICAxOTksIDIyMiwgMjMsIDIzNSwgMTE1LCAyNTIsIDExMSwgMjI3LCA5MywgMjUwLCA1NiwgMjU0LCAxNTgsIDI1NCwgMjgsIAorICAgIDIyMiwgMjI3LCAyMjEsIDExMiwgMjI3LCA5LCAyNDgsIDIyOCwgMjMwLCAxMDIsIDI1MCwgMTUyLCAyMjIsIDExMywgMjI0LCAKKyAgICA0OSwgMjUwLCAxMTQsIDI1MCwgMTEzLCAxNzksIDE4MCwgMTYsIDI0MiwgMTA0LCAxNzksIDE4MCwgMTYsIDIyMywgMjIxLCAKKyAgICAyMjgsIDk1LCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDI0NiwgMTU1LCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDI0OCwgCisgICAgMTkzLCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDI0OSwgNCwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyMzcsIDQ3LCAxNzksIAorICAgIDE4MCwgMTYsIDIyOCwgOTYsIDI1MCwgMjIxLCAxNzksIDE4MCwgMTYsIDI1MCwgMjIyLCAyMjMsIDE0MiwgMTc5LCAxODAsIAorICAgIDE2LCAyNTAsIDIyMiwgMjM3LCA0NywgMTc5LCAxODAsIDE2LCAyMjQsIDU2LCAxMzUsIDE3OSwgMTgwLCAxNiwgMjUyLCAKKyAgICAyMzEsIDEzNSwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyMjQsIDU1LCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDI1MiwgCisgICAgMjMwLCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDIzNSwgODYsIDE3OSwgMTgwLCAxNiwgMjI4LCA5NiwgMjQ0LCAyOSwgMTc5LCAKKyAgICAxODAsIDE2LCAxMjcsIDIxOSwgMTgzLCAxNzksIDE4MCwgMTYsIDkwLCAyMTksIDE4MywgMTc5LCAxODAsIDE2LCAyMjgsIAorICAgIDk2LCAxMjcsIDY1LCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDkwLCA2NSwgMTc5LCAxODAsIDE2LCAyNTAsIDIyMiwgMjUyLCAKKyAgICAyMzAsIDE3OSwgMTgwLCAxNiwgMTEzLCAyMjIsIDE0NCwgMjIwLCA4MSwgMTc5LCAxODAsIDE2LCAyNDksIDYzLCAyMjMsIAorICAgIDE0MiwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAxMTMsIDI1MSwgMTM0LCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDI0OSwgCisgICAgNjIsIDE3OSwgMTgwLCAxNiwgMTEzLCAyMjIsIDE0NCwgMjM3LCA0NywgMTc5LCAxODAsIDE2LCAyMjAsIDUzLCAyMTksIAorICAgIDE4MywgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyMjAsIDUzLCA2NSwgMTc5LCAxODAsIDE2LCAxMDgsIDIyMiwgMTQ0LCAKKyAgICAyMzAsIDc3LCAxNzksIDE4MCwgMTYsIDI0OSwgNzIsIDIyMywgMTQyLCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDEwOCwgCisgICAgMjUxLCAxMzQsIDE3OSwgMTgwLCAxNiwgMjI4LCA5NiwgMjQ5LCA3MSwgMTc5LCAxODAsIDE2LCAxMDgsIDIyMiwgMTQ0LCAKKyAgICAyMzcsIDQ3LCAxNzksIDE4MCwgMTYsIDI0NywgMTMwLCAyMTksIDE4MywgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyNDcsIAorICAgIDEzMCwgNjUsIDE3OSwgMTgwLCAxNiwgMjI4LCA2OCwgMjIwLCA4MSwgMTc5LCAxODAsIDE2LCAyNDksIDYzLCAyMjAsIDgxLCAKKyAgICAxNzksIDE4MCwgMTYsIDI0OSwgNSwgMjIwLCA4MSwgMTc5LCAxODAsIDE2LCAyMzcsIDQ4LCAyMjAsIDgxLCAxNzksIDE4MCwgCisgICAgMTYsIDI1MCwgMjIyLCAyMjAsIDgxLCAxNzksIDE4MCwgMTYsIDEwOCwgMjI0LCAxOTgsIDIzNywgNDcsIDE3OSwgMTgwLCAKKyAgICAxNiwgMjI4LCA2OCwgMjI4LCA5NSwgMTc5LCAxODAsIDE2LCAyNTAsIDIyMiwgMjIzLCAxNTYsIDE3OSwgMTgwLCAxNiwgCisgICAgMjI4LCA5NiwgMjUwLCAxNzUsIDE3OSwgMTgwLCAxNiwgMTA4LCAyMjIsIDE0NCwgMjQ5LCAxMywgMTc5LCAxODAsIDE2LCAKKyAgICAyNDksIDcyLCAyNDksIDEzLCAxNzksIDE4MCwgMTYsIDIyMywgMTU3LCAyNDksIDEzLCAxNzksIDE4MCwgMTYsIDIzNywgNDgsIAorICAgIDI0OSwgMTMsIDE3OSwgMTgwLCAxNiwgMjUwLCAyMjIsIDI0OSwgMTMsIDE3OSwgMTgwLCAxNiwgMTEzLCAyMjQsIDE5OCwgCisgICAgMjIzLCAxNDIsIDE3OSwgMTgwLCAxNiwgNDIsIDIyNCwgMTk4LCAyMjMsIDE0MiwgMTc5LCAxODAsIDE2LCAyMjEsIDE4MCwgCisgICAgMjQ5LCAxMywgMTc5LCAxODAsIDE2LCAyNDQsIDMwLCAyNDksIDEzLCAxNzksIDE4MCwgMTYsIDI1MCwgMTY5LCAxMzUsIAorICAgIDE3OSwgMTgwLCAxNiwgMjQ5LCA3MiwgMjIxLCAxNzksIDE3OSwgMTgwLCAxNiwgMjE3LCAzMiwgMTc5LCAxODAsIDE2LCAKKyAgICAyMjMsIDE0MywgMjIxLCAxNzksIDE3OSwgMTgwLCAxNiwgMjI1LCA2OCwgMjIwLCA4MSwgMTc5LCAxODAsIDE2LCAyMjgsIAorICAgIDk2LCAyMTIsIDI0NiwgMTU1LCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDIyOCwgODEsIDE3OSwgMTgwLCAxNiwgMTEzLCAKKyAgICAyNTEsIDEzNSwgMjIxLCAxNzksIDE3OSwgMTgwLCAxNiwgMTA4LCAyNTEsIDEzNSwgMjIxLCAxNzksIDE3OSwgMTgwLCAxNiwgCisgICAgMjM3LCAxNjIsIDE3OSwgMTgwLCAxNiwgMjI3LCAxNDksIDE3OSwgMTgwLCAxNiwgMjMwLCAxNDMsIDE3OSwgMTgwLCAxNiwgCisgICAgMjU0LCAxNDcsIDIyMCwgODEsIDE3OSwgMTgwLCAxNiwgMjQ2LCAxNTcsIDIyMCwgODEsIDE3OSwgMTgwLCAxNiwgMjM3LCAKKyAgICAxNjMsIDIyMCwgODEsIDE3OSwgMTgwLCAxNiwgMjMwLCAxNDQsIDIyMCwgODEsIDE3OSwgMTgwLCAxNiwgMjU0LCAxNDYsIAorICAgIDIxMiwgMjUxLCA0NSwgNzgsIDQ1LCAyNTQsIDEyMCwgMiwgMjQ3LCAxMzAsIDIxNywgMzMsIDY1LCAyMjQsIDE3NywgMjMwLCAKKyAgICAxMTksIDI1MiwgMjEsIDI1MiwgMTIwLCAxMDAsIDY5LCAyMzUsIDQ0LCAyLCAyMzMsIDE5MywgMjQ4LCAxNDUsIDIzNywgCisgICAgMTkxLCAxMDAsIDI1MCwgMTM3LCAyMjAsIDc5LCAxMDAsIDI0OCwgMjA0LCAyMjAsIDc5LCAxMDAsIDI0NiwgMjAxLCAxMDAsIAorICAgIDI1MCwgMTYwLCAxMDAsIDY3LCA0MCwgMiwgMjUxLCA4NSwgNjksIDIzNSwgNDMsIDI0NiwgMTc5LCAxMDAsIDI1NCwgMTQyLCAKKyAgICAyMzYsIDE1NSwgMTAwLCAyNDMsIDE0MiwgMTAwLCAzNCwgMTg2LCAyNTIsIDIwMSwgMiwgMjMxLCAxODMsIDM0LCAyMjEsIAorICAgIDkxLCAyNDcsIDEzMiwgMjUyLCAxLCAyNTAsIDIyMiwgMiwgMjMxLCAxODYsIDY1LCAyMjAsIDc3LCAxMDAsIDIzMywgMTIyLCAKKyAgICAxMDAsIDI0MiwgMTE3LCAxMDAsIDIzMCwgMTE4LCAyNDMsIDIyNCwgMTAwLCAyMzAsIDExOCwgMjM1LCAyMDAsIDEwMCwgCisgICAgMjI5LCAyMTgsIDEwMCwgMjI5LCAyMTcsIDEwMCwgMjQ4LCAyMTAsIDI1MCwgNzcsIDE2LCAyNDUsIDEyNCwgMTAzLCAyMjQsIAorICAgIDIwLCAxMDAsIDE3OSwgMTgwLCAxNiwgMjI4LCA5NSwgMjQ5LCA4NiwgMjI1LCA1NSwgMjM2LCAxNTUsIDEwMCwgMjI4LCAKKyAgICAyMzcsIDIzMCwgMzQsIDIzMiwgMTIwLCAyMzAsIDM0LCAyMjgsIDIzNCwgMjI2LCAxMDEsIDEwMCwgMjUwLCAyMDksIDIyNiwgCisgICAgMTAxLCAxMDAsIDQyLCAyMjksIDIzMCwgMjIwLCA2MCwgOTYsIDQyLCAyMjksIDIzMCwgMjQ2LCA4NiwgNDIsIDIyOSwgMjMwLCAKKyAgICAyMzQsIDIzNywgOTYsIDQ1LCAyMjksIDIzMCwgMjIwLCA2MCwgOTYsIDQ1LCAyMjksIDIzMCwgMjQ2LCA4NiwgNDUsIDIyOSwgCisgICAgMjMwLCAyMzQsIDIzNywgOTYsIDQyLCA0MCwgMjUyLCAxOCwgMjIwLCA2MCwgMjUwLCAxMjMsIDQyLCA0MCwgMjUyLCAxOCwgCisgICAgMjQ2LCA4NiwgNDIsIDQwLCAyNTIsIDE4LCAyMzQsIDIzNywgMjUwLCAxMjMsIDQ1LCA0MCwgMjUyLCAxOCwgMjIwLCA2MCwgCisgICAgMjUwLCAxMjMsIDQ1LCA0MCwgMjUyLCAxOCwgMjQ2LCA4NiwgNDUsIDQwLCAyNTIsIDE4LCAyMzQsIDIzNywgMjUwLCAxMjMsIAorICAgIDQyLCAyNTAsIDc5LCAyNTIsIDE4LCAyMjAsIDYwLCA5NiwgNDIsIDI1MCwgNzksIDI1MiwgMTgsIDIzMywgMTkzLCAyMjksIAorICAgIDEwMiwgNDIsIDI1MCwgNzksIDI1MiwgMTgsIDIzNCwgMjM3LCA5NiwgMjUwLCA3OSwgMjUyLCAxOCwgMjQ2LCA4NiwgNDUsIAorICAgIDI1MCwgNzksIDI1MiwgMTgsIDIyMCwgNjAsIDk2LCA0NSwgMjUwLCA3OSwgMjUyLCAxOCwgMjMzLCAxOTMsIDIyOSwgMTAyLCAKKyAgICA0NSwgMjUwLCA3OSwgMjUyLCAxOCwgMjM0LCAyMzcsIDk2LCAyMzcsIDE4NywgMjQ2LCA4NiwgMTg2LCAyMzUsIDQ0LCAyNDYsIAorICAgIDg2LCAyMjAsIDYwLCA0MiwgMTU2LCAyMzQsIDIzNywgNDUsIDI1MCwgNzksIDI1MiwgMTgsIDIyNiwgODYsIDIyMCwgNjAsIAorICAgIDQ1LCAxNTYsIDIzNCwgMjM3LCA0MiwgMjUwLCA3OSwgMjUyLCAxOCwgMjI2LCA4NiwgMjIzLCA3MiwgMjIxLCAxMTksIDIyMywgCisgICAgNzIsIDI1MiwgMjgsIDIyMSwgMTIwLCA0MCwgMTE1LCAyNTIsIDI5LCA0MCwgMTE1LCAyNTIsIDI5LCA0MCwgMjUyLCAxOCwgCisgICAgMTA0LCAyMjEsIDEyMCwgNDAsIDExNSwgMzIsIDE2LCAyNTIsIDI4LCA0MiwgNjksIDg2LCAyMzUsIDQzLCA0NSwgNjksIDg2LCAKKyAgICAyMzUsIDQzLCAxODYsIDIyNiwgMTEyLCAyMzUsIDQyLCAxODYsIDIyNiwgMTEyLCAyMzUsIDQxLCAxODYsIDIyNiwgMTEyLCAKKyAgICAyMzUsIDQwLCAxODYsIDIyNiwgMTEyLCAyMzUsIDM5LCAyNDksIDU0LCAxNiwgMTcwLCA2OSwgMjUsIDIyMSwgMTIwLCAyMjcsIAorICAgIDEwOSwgMjQ5LCA1NCwgMTYsIDE3MCwgNjksIDI1LCAyNTIsIDI5LCAyMjcsIDEwOSwgMjQ5LCA1NCwgMTYsIDE3MCwgNjksIAorICAgIDIsIDI1MCwgMjIxLCAyNDksIDU0LCAxNiwgMTcwLCAxMTMsIDI1LCAxODYsIDIsIDI1MCwgMjIxLCAyNDksIDU0LCAxNiwgCisgICAgMTcwLCAxMDgsIDI1LCAxODYsIDIsIDI1MCwgMjIxLCAyNDksIDU0LCAxNiwgMTcwLCA2OSwgMiwgMjIxLCA5MCwgMjQ5LCAKKyAgICA1NCwgMTYsIDE3MCwgMTEzLCAyNSwgMTg2LCAyLCAyMjEsIDkwLCAyNDksIDU0LCAxNiwgMTcwLCAxMDgsIDI1LCAxODYsIDIsIAorICAgIDIyMSwgOTAsIDI0OSwgNTQsIDE2LCAxNzAsIDY5LCAyNSwgMjE4LCAyMzYsIDI0OSwgNTQsIDE2LCAxNzAsIDExMywgMjUsIAorICAgIDE4NiwgMiwgMjE4LCAyMzYsIDI0OSwgNTQsIDE2LCAxNzAsIDEwOCwgMjUsIDE4NiwgMiwgMjE4LCAyMzYsIDI0OSwgNTQsIAorICAgIDE2LCAxNzAsIDExMywgMjUsIDI0MiwgMjQxLCAyNDksIDU0LCAxNiwgMTcwLCAxMDgsIDI1LCAyNDIsIDI0MSwgMjQ5LCA1NCwgCisgICAgMTYsIDE3MCwgNjksIDI1LCAyMjEsIDEyMCwgMjM1LCAxMTUsIDI0OSwgNTQsIDE2LCAxNzAsIDY5LCAyNSwgMjUyLCAyOSwgCisgICAgMjM1LCAxMTUsIDQwLCAyNDUsIDEzMywgMjI3LCAxNjMsIDEwMCwgMjQ2LCAyMjUsIDEwMCwgNjksIDIzNSwgNDQsIDI0NiwgCisgICAgODYsIDIzMywgMjMzLCAyNTIsIDgsIDIzMywgMjMzLCAxNzEsIDEwNCwgMjI0LCAxOTEsIDIzMywgMjMzLCAyMjQsIDE5MiwgCisgICAgMTA0LCAyMzUsIDIsIDIzMywgMjMzLCAxNzEsIDEwNCwgMTI0LCAyMjQsIDE3OSwgMjMzLCAyMzMsIDEyNCwgMjI0LCAxODAsIAorICAgIDEwNCwgMjM1LCAyLCAyMzMsIDIzMywgMTI0LCAyMjQsIDE4MCwgMjM3LCA1NSwgMjMzLCAyMzMsIDIyMSwgNzUsIDIzMywgCisgICAgMjMzLCAyMjIsIDQzLCAyMzMsIDIzMywgMjI5LCAxNzQsIDI0NywgOSwgMjQ0LCAyNCwgMjQ1LCA4MSwgMjIxLCAxMjAsIAorICAgIDIyOSwgMjI5LCAyNTIsIDI5LCAyMjksIDIyOSwgMjIxLCAxMjAsIDI1MCwgNzksIDExNSwgMjUyLCAyOSwgMjUwLCA3OSwgCisgICAgMTE1LCAyMjEsIDEyMCwgMjIxLCAxMTQsIDIyNCwgMjM2LCAxMTUsIDI1MiwgMjksIDIyMSwgMTE0LCAyMjQsIDIzNiwgMTE1LCAKKyAgICA2NywgMjIxLCAxMDEsIDI1MiwgMTExLCAyMjcsIDk0LCAyLCAyNTAsIDIyMSwgMjIzLCAxMjksIDI0NSwgMTU1LCAyNTUsIDMsIAorICAgIDI1MCwgNzYsIDI0NiwgMjE0LCAyMzcsIDE3NCwgMjQ5LCA4NiwgMjQ2LCA4OCwgMTAwLCAxNiwgMzUsIDIzMSwgMTEwLCAxNiwgCisgICAgMzUsIDIyMywgMTU0LCAxMTcsIDI0MywgMTU3LCAxNiwgMzUsIDIyMywgMTU0LCAxMTcsIDIyMiwgMzksIDE2LCAzNSwgMjQ2LCAKKyAgICAxOTAsIDExNywgMjIyLCAzOSwgMTYsIDM1LCAyNDYsIDE5MCwgMTE3LCAyMjEsIDEwNCwgMTYsIDM1LCAyNDYsIDE4MSwgMTYsIAorICAgIDM1LCAyNTQsIDI1MiwgMTYsIDM1LCAyNTIsIDExOSwgMTYsIDM1LCAyNTIsIDIyOSwgMTYsIDM1LCAxODYsIDIyMiwgMTQ1LCAKKyAgICAxNiwgMzUsIDIzNSwgNDQsIDI0NSwgMjI0LCAxNiwgMzUsIDY5LCAyMjIsIDE0NSwgMTYsIDM1LCAyNDUsIDEyNCwgMjQ1LCAKKyAgICAyMjQsIDE2LCAzNSwgMjUxLCAxMjgsIDIyNywgMTYyLCAxNiwgMzUsIDIyNCwgMjE3LCAyMzAsIDgzLCAxNiwgMzUsIDIyNCwgCisgICAgMjE3LCAyMzcsIDIyMywgMTYsIDM1LCAyNDksIDE0MiwgMjM1LCAzNCwgMjQ2LCAxMzUsIDE2LCAzNSwgMjQ5LCA0MiwgMjUwLCAKKyAgICAxMzIsIDEwNywgMTYsIDM1LCAyNDksIDQyLCAyNTAsIDEzMiwgMTAzLCAxNiwgMzUsIDI0OSwgNDIsIDI1MCwgMTMyLCAxNjAsIAorICAgIDE2LCAzNSwgMjQ5LCA0MiwgMjUwLCAxMzIsIDE1NCwgMTYsIDM1LCAyMzIsIDEzNiwgMjU0LCAyNTIsIDE2LCAzNSwgMjIyLCAKKyAgICAyMjQsIDIzOCwgMjgsIDE2LCAzNSwgMjQ2LCAxOTAsIDExNywgMjIxLCAxMDUsIDI1MiwgNDUsIDE2LCAzNSwgMjUxLCAxNTIsIAorICAgIDE2LCAzNSwgMjQ2LCAxOTAsIDExNywgMjM0LCAxNywgMTYsIDM1LCAyMjMsIDkwLCAxNiwgMzUsIDI0NiwgMTM1LCAxNiwgCisgICAgMzUsIDI0NSwgMTg5LCAyMjUsIDU0LCAxNiwgMzUsIDI0NCwgMjMsIDIyNSwgNTQsIDE2LCAzNSwgMjI3LCAyMTIsIDIyNSwgCisgICAgNTQsIDE2LCAzNSwgMjIwLCA3MywgMjI1LCA1NCwgMTYsIDM1LCAyMjMsIDI1NCwgMTYsIDM1LCAyNDksIDY5LCAyNTIsIDQ4LCAKKyAgICAxMDAsIDIzMCwgMTE5LCAyNTIsIDIxLCAxNiwgMzUsIDIzMiwgMTIyLCAxNiwgMzUsIDI0OSwgNzAsIDI0NSwgMTI0LCAxMDMsIAorICAgIDE2LCAzNSwgMjIzLCA5MSwgMjQ1LCAxMjQsIDEwMywgMjMwLCAxNzEsIDk2LCAyMzAsIDE3MSwgMjUxLCA2NCwgMjMwLCAKKyAgICAxNzEsIDI0NSwgMTI3LCAyMzAsIDE3MSwgMjM3LCAxNzAsIDI0NSwgMTI3LCAyMzAsIDE3MSwgMjUyLCAxMTcsIDI1MSwgCisgICAgMjQ3LCAyMzAsIDE3MSwgMjUyLCAyNSwgMjIxLCAyMDAsIDIzMCwgMTcxLCAyNTIsIDE1LCAyNTIsIDIwNCwgMjQyLCA1OCwgCisgICAgMjMwLCAxNzEsIDI1NCwgMTM1LCAxMTcsIDI1MSwgNDQsIDIzMCwgMTcxLCAyNDksIDE0NiwgMjMwLCAxNzEsIDI1MCwgNzAsIAorICAgIDI1NCwgMjU0LCAyMzEsIDEwOCwgMjMwLCAxNzEsIDUxLCAyNTIsIDIzMCwgMzQsIDIwLCAxMDcsIDM0LCAyMCwgMTAzLCAzNCwgCisgICAgMjAsIDE2MCwgMzQsIDIwLCAxNTQsIDM0LCAyMCwgMTc0LCAzNCwgMjAsIDE4MiwgMzQsIDIwLCAxOTEsIDM0LCAyMCwgMTg1LCAKKyAgICAzNCwgMjAsIDE5MCwgMzQsIDU0LCAyMjIsIDY1LCAzNCwgNTQsIDI0NiwgMjExLCAzNCwgNTQsIDIyMCwgMjIxLCAzNCwgNTQsIAorICAgIDIyMSwgMjQ3LCAzNCwgNTQsIDI0NSwgMTExLCAzNCwgNTQsIDI0NSwgMjAwLCAzNCwgNTQsIDIyNCwgNzcsIDM0LCA1NCwgCisgICAgMjI1LCA0MSwgMzQsIDU0LCAyNDYsIDIzMywgMzQsIDU0LCAyMzIsIDI5LCAzNCwgNTQsIDIyMCwgMjE5LCA4MiwgMjAsIAorICAgIDEwNywgODIsIDIwLCAxMDMsIDgyLCAyMCwgMTYwLCA4MiwgMjAsIDE1NCwgODIsIDIwLCAxNzQsIDgyLCAyMCwgMTgyLCA4MiwgCisgICAgMjAsIDE5MSwgODIsIDIwLCAxODUsIDgyLCAyMCwgMTkwLCA4MiwgNTQsIDIyMiwgNjUsIDgyLCA1NCwgMjQ2LCAyMTEsIDgyLCAKKyAgICA1NCwgMjIwLCAyMjEsIDgyLCA1NCwgMjIxLCAyNDcsIDgyLCA1NCwgMjQ1LCAxMTEsIDgyLCA1NCwgMjQ1LCAyMDAsIDgyLCAKKyAgICA1NCwgMjI0LCA3NywgODIsIDU0LCAyMjUsIDQxLCA4MiwgNTQsIDI0NiwgMjMzLCA4MiwgNTQsIDIzMiwgMjksIDgyLCA1NCwgCisgICAgMjIwLCAyMTksIDIwLCAxMzEsIDI0NSwgOTAsIDIyMywgMTM2LCAyMCwgMTI0LCAyNDUsIDkwLCAyMjMsIDEzNiwgMjAsIAorICAgIDE0OCwgMjQ1LCA5MCwgMjIzLCAxMzYsIDIwLCAyNDUsIDExNiwgMjQ1LCA5MCwgMjIzLCAxMzYsIDIwLCAyNDUsIDE3MCwgCisgICAgMjQ1LCA5MCwgMjIzLCAxMzYsIDIwLCAyMjQsIDgyLCAyNDUsIDkwLCAyMjMsIDEzNiwgMjAsIDIyNSwgNDMsIDI0NSwgOTAsIAorICAgIDIyMywgMTM2LCAyMCwgMjQ2LCAyMzUsIDI0NSwgOTAsIDIyMywgMTM2LCAyMCwgMjMyLCAzMSwgMjQ1LCA5MCwgMjIzLCAKKyAgICAxMzYsIDU0LCAyMjIsIDY2LCAyNDUsIDkwLCAyMjMsIDEzNiwgNTQsIDI0NiwgMjEyLCAyNDUsIDkwLCAyMjMsIDEzNiwgNTQsIAorICAgIDIyMCwgMjIyLCAyNDUsIDkwLCAyMjMsIDEzNiwgNTQsIDIyMSwgMjQ4LCAyNDUsIDkwLCAyMjMsIDEzNiwgNTQsIDI0NSwgCisgICAgMTEyLCAyNDUsIDkwLCAyMjMsIDEzNiwgNTQsIDI0NSwgMjAxLCAyNDUsIDkwLCAyMjMsIDEzNiwgNTQsIDIyNCwgNzgsIAorICAgIDI0NSwgOTAsIDIyMywgMTM2LCA1NCwgMjI1LCA0MiwgMjQ1LCA5MCwgMjIzLCAxMzYsIDU0LCAyNDYsIDIzNCwgMjQ1LCA5MCwgCisgICAgMjIzLCAxMzYsIDU0LCAyMzIsIDMwLCAyNDUsIDkwLCAyMjMsIDEzNiwgNTQsIDIyMCwgMjIwLCAyNDUsIDkwLCAyMjMsIAorICAgIDEzNiwgODIsIDcsIDMsIDEsIDYwLCA4MiwgNywgMywgMSwgMjUzLCAyMDQsIDgyLCA3LCAzLCAxLCAyNTEsIDIwMiwgODIsIAorICAgIDcsIDMsIDEsIDI1MCwgNDYsIDgyLCA3LCAzLCAxLCA3MywgODIsIDcsIDMsIDEsIDI0NiwgNzQsIDgyLCA3LCAzLCAxLCAKKyAgICAyNDUsIDY3LCA4MiwgNywgMywgMSwgMjQzLCAyMjUsIDgyLCA3LCAzLCAxLCA3MiwgODIsIDcsIDMsIDEsIDIzNywgMTI2LCAKKyAgICA4MiwgNywgMywgMSwgMjM3LCAxNywgODIsIDcsIDMsIDEsIDE1MywgODIsIDcsIDMsIDEsIDE4OSwgODIsIDcsIDMsIDEsIAorICAgIDIwNywgODIsIDcsIDMsIDEsIDc0LCA4MiwgNywgMywgMSwgMjMwLCA1OSwgODIsIDcsIDMsIDEsIDIyOCwgMTYzLCA4MiwgNywgCisgICAgMywgMSwgMTUyLCA4MiwgNywgMywgMSwgMTk4LCA4MiwgNywgMywgMSwgMjIyLCAyMDEsIDgyLCA3LCAzLCAxLCA2OCwgODIsIAorICAgIDcsIDMsIDEsIDIxNiwgMjE2LCA4MiwgNywgMywgMSwgMjE5LCA0MCwgODIsIDcsIDMsIDEsIDIxOCwgMTUxLCA4MiwgNywgMywgCisgICAgMSwgMjE4LCA5MCwgODIsIDcsIDMsIDEsIDIxNywgMTU3LCAzNCwgNywgNiwgMSwgNjAsIDM0LCA3LCA2LCAxLCAyNTMsIAorICAgIDIwNCwgMzQsIDcsIDYsIDEsIDI1MSwgMjAyLCAzNCwgNywgNiwgMSwgMjUwLCA0NiwgMzQsIDcsIDYsIDEsIDczLCAzNCwgNywgCisgICAgNiwgMSwgMjQ2LCA3NCwgMzQsIDcsIDYsIDEsIDI0NSwgNjcsIDM0LCA3LCA2LCAxLCAyNDMsIDIyNSwgMzQsIDcsIDYsIDEsIAorICAgIDcyLCAzNCwgNywgNiwgMSwgMjM3LCAxMjYsIDM0LCA3LCA2LCAxLCAyMzcsIDE3LCAzNCwgNywgNiwgMSwgMTUzLCAzNCwgNywgCisgICAgNiwgMSwgMTg5LCAzNCwgNywgNiwgMSwgMjA3LCAzNCwgNywgNiwgMSwgNzQsIDM0LCA3LCA2LCAxLCAyMzAsIDU5LCAzNCwgCisgICAgNywgNiwgMSwgMjI4LCAxNjMsIDM0LCA3LCA2LCAxLCAxNTIsIDM0LCA3LCA2LCAxLCAxOTgsIDM0LCA3LCA2LCAxLCAyMjIsIAorICAgIDIwMSwgMzQsIDcsIDYsIDEsIDY4LCAzNCwgNywgNiwgMSwgMjE2LCAyMTYsIDM0LCA3LCA2LCAxLCAyMTksIDQwLCAzNCwgNywgCisgICAgNiwgMSwgMjE4LCAxNTEsIDM0LCA3LCA2LCAxLCAyMTgsIDkwLCAzNCwgNywgNiwgMSwgMjE3LCAxNTcsIDM0LCA3LCAzLCAxLCAKKyAgICA2MCwgMzQsIDcsIDMsIDEsIDI1MywgMjA0LCAzNCwgNywgMywgMSwgMjUxLCAyMDIsIDM0LCA3LCAzLCAxLCAyNTAsIDQ2LCAKKyAgICAzNCwgNywgMywgMSwgNzMsIDM0LCA3LCAzLCAxLCAyNDYsIDc0LCAzNCwgNywgMywgMSwgMjQ1LCA2NywgMzQsIDcsIDMsIDEsIAorICAgIDI0MywgMjI1LCAzNCwgNywgMywgMSwgNzIsIDM0LCA3LCAzLCAxLCAyMzcsIDEyNiwgMzQsIDcsIDMsIDEsIDIzNywgMTcsIAorICAgIDM0LCA3LCAzLCAxLCAxNTMsIDM0LCA3LCAzLCAxLCAxODksIDM0LCA3LCAzLCAxLCAyMDcsIDM0LCA3LCAzLCAxLCA3NCwgCisgICAgMzQsIDcsIDMsIDEsIDIzMCwgNTksIDM0LCA3LCAzLCAxLCAyMjgsIDE2MywgMzQsIDcsIDMsIDEsIDE1MiwgMzQsIDcsIDMsIAorICAgIDEsIDE5OCwgMzQsIDcsIDMsIDEsIDIyMiwgMjAxLCAzNCwgNywgMywgMSwgNjgsIDM0LCA3LCAzLCAxLCAyMTYsIDIxNiwgCisgICAgMzQsIDcsIDMsIDEsIDIxOSwgNDAsIDM0LCA3LCAzLCAxLCAyMTgsIDE1MSwgMzQsIDcsIDMsIDEsIDIxOCwgOTAsIDM0LCA3LCAKKyAgICAzLCAxLCAyMTcsIDE1NywgMzQsIDIwLCAyMTcsIDg0LCAyMzIsIDEzNiwgMzQsIDU0LCAyNDYsIDIxMSwgMjMyLCAxMzYsIAorICAgIDM0LCA1NCwgMjIwLCAyMjEsIDIzMiwgMTM2LCAzNCwgNTQsIDIyMSwgMjQ3LCAyMzIsIDEzNiwgMzQsIDU0LCAyNDUsIDExMSwgCisgICAgMjMyLCAxMzYsIDM0LCA1NCwgMjQ1LCAyMDAsIDIzMiwgMTM2LCAzNCwgNTQsIDIyNCwgNzcsIDIzMiwgMTM2LCAzNCwgNTQsIAorICAgIDIyNSwgNDEsIDIzMiwgMTM2LCAzNCwgNTQsIDI0NiwgMjMzLCAyMzIsIDEzNiwgMzQsIDU0LCAyMzIsIDI5LCAyMzIsIDEzNiwgCisgICAgMzQsIDU0LCAyMjAsIDIxOSwgNTEsIDM0LCAyMCwgMTA3LCA1MSwgMzQsIDIwLCAxMDMsIDUxLCAzNCwgMjAsIDE2MCwgNTEsIAorICAgIDM0LCAyMCwgMTU0LCA1MSwgMzQsIDIwLCAxNzQsIDUxLCAzNCwgMjAsIDE4MiwgNTEsIDM0LCAyMCwgMTkxLCA1MSwgMzQsIAorICAgIDIwLCAxODUsIDUxLCAzNCwgMjAsIDE5MCwgNTEsIDM0LCA1NCwgMjIyLCA2NSwgMjMyLCAxMzYsIDM0LCAyMCwgMjE3LCA4NCwgCisgICAgODYsIDg5LCAxNzAsIDI0MiwgMjQxLCA4NiwgODksIDEwNiwgMjQyLCAyNDEsIDg2LCA4OSwgMTcwLCAyMTksIDE1MiwgODYsIAorICAgIDg5LCAxMDYsIDIxOSwgMTUyLCA4NiwgODksIDE3MCwgMjIxLCA3OCwgMjQ5LCAxNDcsIDI0MiwgMjQxLCA4NiwgODksIDEwNiwgCisgICAgMjIxLCA3OCwgMjQ5LCAxNDcsIDI0MiwgMjQxLCA4NiwgODksIDE3MCwgMjIxLCA3OCwgMjQ5LCAxNDcsIDIxOSwgMTUyLCAKKyAgICA4NiwgODksIDEwNiwgMjIxLCA3OCwgMjQ5LCAxNDcsIDIxOSwgMTUyLCA4NiwgODksIDE3MCwgMjI4LCA5MiwgMjQ5LCAxNDcsIAorICAgIDI0MiwgMjQxLCA4NiwgODksIDEwNiwgMjI4LCA5MiwgMjQ5LCAxNDcsIDI0MiwgMjQxLCA4NiwgODksIDE3MCwgMjI4LCA5MiwgCisgICAgMjQ5LCAxNDcsIDIxOSwgMTUyLCA4NiwgODksIDEwNiwgMjI4LCA5MiwgMjQ5LCAxNDcsIDIxOSwgMTUyLCA4NiwgODksIAorICAgIDE3MCwgMTEzLCAyNSwgMjI3LCAxMDksIDg2LCA4OSwgMTEzLCAxNzAsIDI1LCA0NSwgMjQzLCAxNDksIDg2LCA4OSwgMTEzLCAKKyAgICAxMDYsIDI1LCA0NSwgMjM1LCA1OCwgODYsIDg5LCAxMDYsIDExMywgMjUsIDIyNywgMTA5LCA4NiwgODksIDE3MCwgMTEzLCAKKyAgICAyNSwgMjM1LCAxMTUsIDg2LCA4OSwgMTEzLCAxNzAsIDI1LCA0MiwgMjQzLCAxNDksIDg2LCA4OSwgMTEzLCAxMDYsIDI1LCAKKyAgICA0MiwgMjM1LCA1OCwgODYsIDg5LCAxMDYsIDExMywgMjUsIDIzNSwgMTE1LCA4NiwgODksIDE3MCwgMTA4LCAyNSwgMjI3LCAKKyAgICAxMDksIDg2LCA4OSwgMTA4LCAxNzAsIDI1LCA0NSwgMjQzLCAxNDksIDg2LCA4OSwgMTA4LCAxMDYsIDI1LCA0NSwgMjM1LCAKKyAgICA1OCwgODYsIDg5LCAxMDYsIDEwOCwgMjUsIDIyNywgMTA5LCA4NiwgODksIDE3MCwgMTA4LCAyNSwgMjM1LCAxMTUsIDg2LCAKKyAgICA4OSwgMTA4LCAxNzAsIDI1LCA0MiwgMjQzLCAxNDksIDg2LCA4OSwgMTA4LCAxMDYsIDI1LCA0MiwgMjM1LCA1OCwgODYsIAorICAgIDg5LCAxMDYsIDEwOCwgMjUsIDIzNSwgMTE1LCA4NiwgODksIDE3MCwgNjksIDI1LCAyMjcsIDEwOSwgODYsIDg5LCA2OSwgCisgICAgMTcwLCAyNSwgNDUsIDI0MywgMTQ5LCA4NiwgODksIDEwOCwgMTA2LCAyNSwgNDUsIDExMywgMjM1LCA1OCwgODYsIDg5LCAKKyAgICAxMTMsIDEwNiwgMjUsIDQ1LCAxMDgsIDIzNSwgNTgsIDg2LCA4OSwgNjksIDEwNiwgMjUsIDQ1LCAyMzUsIDU4LCA4NiwgODksIAorICAgIDExMywgMTcwLCAyNSwgNDUsIDEwOCwgMjQzLCAxNDksIDg2LCA4OSwgMTA4LCAxNzAsIDI1LCA0NSwgMTEzLCAyNDMsIDE0OSwgCisgICAgODYsIDg5LCAxMDYsIDY5LCAyNSwgMjI3LCAxMDksIDg2LCA4OSwgMTcwLCA2OSwgMjUsIDIzNSwgMTE1LCA4NiwgODksIDY5LCAKKyAgICAxNzAsIDI1LCA0MiwgMjQzLCAxNDksIDg2LCA4OSwgMTA4LCAxMDYsIDI1LCA0MiwgMTEzLCAyMzUsIDU4LCA4NiwgODksIAorICAgIDExMywgMTA2LCAyNSwgNDIsIDEwOCwgMjM1LCA1OCwgODYsIDg5LCA2OSwgMTA2LCAyNSwgNDIsIDIzNSwgNTgsIDg2LCA4OSwgCisgICAgMTEzLCAxNzAsIDI1LCA0MiwgMTA4LCAyNDMsIDE0OSwgODYsIDg5LCAxMDgsIDE3MCwgMjUsIDQyLCAxMTMsIDI0MywgMTQ5LCAKKyAgICA4NiwgODksIDEwNiwgNjksIDI1LCAyMzUsIDExNSwgODYsIDg5LCAxNzAsIDExMywgMjUsIDI0MiwgMjQxLCA4NiwgODksIAorICAgIDQyLCAxMDYsIDI1LCA0NSwgMTEzLCAyMzUsIDU4LCA4NiwgODksIDQ1LCAxMDYsIDI1LCA0MiwgMTEzLCAyMzUsIDU4LCA4NiwgCisgICAgODksIDExMywgMTcwLCAyNSwgMTg2LCAyNDMsIDE0OSwgODYsIDg5LCAxMTMsIDEwNiwgMjUsIDE4NiwgMjM1LCA1OCwgODYsIAorICAgIDg5LCA0NSwgMTcwLCAyNSwgNDIsIDExMywgMjQzLCAxNDksIDg2LCA4OSwgNDIsIDE3MCwgMjUsIDQ1LCAxMTMsIDI0MywgCisgICAgMTQ5LCA4NiwgODksIDEwNiwgMTEzLCAyNSwgMjQyLCAyNDEsIDg2LCA4OSwgMTcwLCAxMDgsIDI1LCAyNDIsIDI0MSwgODYsIAorICAgIDg5LCA0MiwgMTA2LCAyNSwgNDUsIDEwOCwgMjM1LCA1OCwgODYsIDg5LCA0NSwgMTA2LCAyNSwgNDIsIDEwOCwgMjM1LCA1OCwgCisgICAgODYsIDg5LCAxMDgsIDE3MCwgMjUsIDE4NiwgMjQzLCAxNDksIDg2LCA4OSwgMTA4LCAxMDYsIDI1LCAxODYsIDIzNSwgNTgsIAorICAgIDg2LCA4OSwgNDUsIDE3MCwgMjUsIDQyLCAxMDgsIDI0MywgMTQ5LCA4NiwgODksIDQyLCAxNzAsIDI1LCA0NSwgMTA4LCAKKyAgICAyNDMsIDE0OSwgODYsIDg5LCAxMDYsIDEwOCwgMjUsIDI0MiwgMjQxLCA4NiwgODksIDE3MCwgNjksIDI1LCAyNDIsIDI0MSwgCisgICAgODYsIDg5LCA0MiwgMTA2LCAyNSwgNDUsIDY5LCAyMzUsIDU4LCA4NiwgODksIDQ1LCAxMDYsIDI1LCA0MiwgNjksIDIzNSwgCisgICAgNTgsIDg2LCA4OSwgNjksIDE3MCwgMjUsIDE4NiwgMjQzLCAxNDksIDg2LCA4OSwgMTA4LCAxMDYsIDI1LCAxMTMsIDE4NiwgCisgICAgMjM1LCA1OCwgODYsIDg5LCAxMTMsIDEwNiwgMjUsIDEwOCwgMTg2LCAyMzUsIDU4LCA4NiwgODksIDY5LCAxMDYsIDI1LCAKKyAgICAxODYsIDIzNSwgNTgsIDg2LCA4OSwgNDIsIDEwOCwgMTA2LCAyNSwgNDUsIDExMywgMjM1LCA1OCwgODYsIDg5LCA0NSwgCisgICAgMTA4LCAxMDYsIDI1LCA0MiwgMTEzLCAyMzUsIDU4LCA4NiwgODksIDQyLCAxMTMsIDEwNiwgMjUsIDQ1LCAxMDgsIDIzNSwgCisgICAgNTgsIDg2LCA4OSwgNDUsIDExMywgMTA2LCAyNSwgNDIsIDEwOCwgMjM1LCA1OCwgODYsIDg5LCAxMTMsIDE3MCwgMjUsIAorICAgIDEwOCwgMTg2LCAyNDMsIDE0OSwgODYsIDg5LCAxMDgsIDE3MCwgMjUsIDExMywgMTg2LCAyNDMsIDE0OSwgODYsIDg5LCA0NSwgCisgICAgMTcwLCAyNSwgNDIsIDY5LCAyNDMsIDE0OSwgODYsIDg5LCA0MiwgMTcwLCAyNSwgNDUsIDY5LCAyNDMsIDE0OSwgODYsIDg5LCAKKyAgICAxMDYsIDY5LCAyNSwgMjQyLCAyNDEsIDg2LCA4OSwgMTcwLCA1MSwgMjQ5LCAxNDcsIDI0MiwgMjQxLCA4NiwgODksIDEwNiwgCisgICAgNTEsIDI0OSwgMTQ3LCAyNDIsIDI0MSwgODYsIDg5LCAxNzAsIDUxLCAyNDksIDE0NywgMjE5LCAxNTIsIDg2LCA4OSwgMTA2LCAKKyAgICA1MSwgMjQ5LCAxNDcsIDIxOSwgMTUyLCA4NiwgODksIDUxLCAyNDIsIDI0MSwgODYsIDg5LCA1MSwgMjE5LCAxNTIsIDg2LCAKKyAgICA4OSwgMTEzLCAyMjQsIDEwOSwgMjUsIDQ1LCAyNDcsIDEzOCwgODYsIDg5LCAxMTMsIDUxLCAyNSwgNDUsIDIyNCwgMTA4LCAKKyAgICA4NiwgODksIDUxLCAxMTMsIDI1LCAyMjcsIDEwOSwgODYsIDg5LCAxMTMsIDIyNCwgMTA5LCAyNSwgNDIsIDI0NywgMTM4LCAKKyAgICA4NiwgODksIDExMywgNTEsIDI1LCA0MiwgMjI0LCAxMDgsIDg2LCA4OSwgNTEsIDExMywgMjUsIDIzNSwgMTE1LCA4NiwgODksIAorICAgIDEwOCwgMjI0LCAxMDksIDI1LCA0NSwgMjQ3LCAxMzgsIDg2LCA4OSwgMTA4LCA1MSwgMjUsIDQ1LCAyMjQsIDEwOCwgODYsIAorICAgIDg5LCA1MSwgMTA4LCAyNSwgMjI3LCAxMDksIDg2LCA4OSwgMTA4LCAyMjQsIDEwOSwgMjUsIDQyLCAyNDcsIDEzOCwgODYsIAorICAgIDg5LCAxMDgsIDUxLCAyNSwgNDIsIDIyNCwgMTA4LCA4NiwgODksIDUxLCAxMDgsIDI1LCAyMzUsIDExNSwgODYsIDg5LCA2OSwgCisgICAgMjI0LCAxMDksIDI1LCA0NSwgMjQ3LCAxMzgsIDg2LCA4OSwgNjksIDUxLCAyNSwgNDUsIDIyNCwgMTA4LCA4NiwgODksIDUxLCAKKyAgICA2OSwgMjUsIDIyNywgMTA5LCA4NiwgODksIDY5LCAyMjQsIDEwOSwgMjUsIDQyLCAyNDcsIDEzOCwgODYsIDg5LCA2OSwgNTEsIAorICAgIDI1LCA0MiwgMjI0LCAxMDgsIDg2LCA4OSwgNTEsIDY5LCAyNSwgMjM1LCAxMTUsIDg2LCA4OSwgMTEzLCAyMjQsIDEwOSwgCisgICAgMjUsIDE4NiwgMjQ3LCAxMzgsIDg2LCA4OSwgMTEzLCA1MSwgMjUsIDE4NiwgMjI0LCAxMDgsIDg2LCA4OSwgNTEsIDExMywgCisgICAgMjUsIDI0MiwgMjQxLCA4NiwgODksIDEwOCwgMjI0LCAxMDksIDI1LCAxODYsIDI0NywgMTM4LCA4NiwgODksIDEwOCwgNTEsIAorICAgIDI1LCAxODYsIDIyNCwgMTA4LCA4NiwgODksIDUxLCAxMDgsIDI1LCAyNDIsIDI0MSwgODYsIDg5LCA2OSwgMjI0LCAxMDksIAorICAgIDI1LCAxODYsIDI0NywgMTM4LCA4NiwgODksIDY5LCA1MSwgMjUsIDE4NiwgMjI0LCAxMDgsIDg2LCA4OSwgNTEsIDY5LCAyNSwgCisgICAgMjQyLCAyNDEsIDg2LCA4OSwgMTcwLCAyNTQsIDUyLCAxMTMsIDI1LCAyMjcsIDEwOSwgODYsIDg5LCAxNzAsIDI1NCwgNTIsIAorICAgIDExMywgMjUsIDIzNSwgMTE1LCA4NiwgODksIDE3MCwgMjU0LCA1MiwgMTA4LCAyNSwgMjM1LCAxMTUsIDg2LCA4OSwgMTcwLCAKKyAgICAyNTQsIDUyLCAxMDgsIDI1LCAyMjcsIDEwOSwgODYsIDg5LCAxNzAsIDI0OSwgMTEsIDIyMCwgNjAsIDQ1LCAxOTksIDIzNCwgCisgICAgMjM3LCAyMzUsIDExNSwgODYsIDg5LCAxNzAsIDI0OSwgMTEsIDIyMCwgNjAsIDQyLCAxOTksIDIzNCwgMjM3LCAyMjcsIAorICAgIDEwOSwgODYsIDg5LCAxNzAsIDI0OSwgMTEsIDI1MCwgMTAwLCA4NiwgODksIDE3MCwgMjM1LCAxMTUsIDg2LCA4OSwgMTcwLCAKKyAgICAyMjAsIDYzLCA4NiwgODksIDE3MCwgMjI3LCAxMDksIDg2LCA4OSwgMTcwLCAyNDcsIDEzMiwgODYsIDg5LCAxMDYsIDIzNSwgCisgICAgMTE1LCA4NiwgODksIDEwNiwgMjIwLCA2MywgODYsIDg5LCAxMDYsIDIyNywgMTA5LCA4NiwgODksIDEwNiwgMjQ3LCAxMzIsIAorICAgIDg2LCA4OSwgMTcwLCA0MiwgMjUsIDEwNiwgMjI3LCAxMDksIDg2LCA4OSwgMTcwLCAxMDgsIDI1LCAxMDYsIDI0NywgMTMyLCAKKyAgICA4NiwgODksIDEwNiwgNDIsIDI1LCAxNzAsIDIyNywgMTA5LCA4NiwgODksIDEwNiwgMTA4LCAyNSwgMTcwLCAyNDcsIDEzMiwgCisgICAgMjIwLCA2MCwgMTQ0LCAyNTIsIDQ1LCAyMzQsIDIzNywgMTMxLCAyNDYsIDIzMiwgMjUyLCA0NSwgMjM0LCAyMzcsIDEzMSwgCisgICAgMjI4LCA5MCwgMjUyLCA0NSwgMjM0LCAyMzcsIDE0OCwgMjQ2LCAyMzAsIDI1MiwgNDUsIDIzNCwgMjM3LCAxNDQsIDI1MiwgCisgICAgNDUsIDIzNCwgMjM3LCAyNDUsIDE3MCwgMjQ2LCAyMzAsIDI1MiwgNDUsIDIzNCwgMjM3LCAxNDgsIDIyOCwgODgsIDI1MiwgCisgICAgNDUsIDIzNCwgMjM3LCAyMjUsIDQzLCAyNDYsIDIzMCwgMjUyLCA0NSwgMjQ1LCA5MCwgMjUyLCA0NSwgNDIsIDIyNSwgNDMsIAorICAgIDI0NiwgMjMwLCAyNTIsIDQ1LCA0MiwgMTQ4LCAyMjgsIDg4LCAyNTIsIDQ1LCA0MiwgMjQ1LCAxNzAsIDI0NiwgMjMwLCAKKyAgICAyNTIsIDQ1LCA0MiwgMTQ0LCAyNTIsIDQ1LCA0MiwgMTQ4LCAyNDYsIDIzMCwgMjUyLCA0NSwgNDIsIDEzMSwgMjI4LCA5MCwgCisgICAgMjUyLCA0NSwgNDIsIDEzMSwgMjQ2LCAyMzIsIDI1MiwgNDUsIDQ1LCAxNDQsIDI1MiwgNDUsIDE3MCwgMjI1LCAxNSwgMjM0LCAKKyAgICAxOCwgMjI1LCAxNSwgMjQ5LCAxNTIsIDIyNSwgMTUsIDIyMCwgNjAsIDEzMSwgMjQ2LCAyMzIsIDI1MiwgNDUsIDQ1LCAxMzEsIAorICAgIDI0NiwgMjMyLCAyNTIsIDQ1LCAyMjgsIDk0LCAyMzQsIDIzNywgMjM1LCAxMTUsIDIyOCwgOTQsIDIzNCwgMjM3LCAyMjcsIAorICAgIDEwOSwgMjI4LCA5NCwgMjIwLCA2MCwgMjM1LCAxMTUsIDIyOCwgOTQsIDIyMCwgNjAsIDQyLCAyNSwgMjM0LCAyMzcsIDQyLCAKKyAgICAyNSwgMjM0LCAyMzcsIDIyNywgMTA5LCAyMjgsIDk0LCAyMjAsIDYwLCA0MiwgMjUsIDIzNCwgMjM3LCAyMjcsIDEwOSwgCisgICAgMjI4LCA5NCwgMjIwLCA2MCwgNDIsIDI1LCAyMjAsIDYwLCA0NSwgMjUsIDIzNCwgMjM3LCAyMzUsIDExNSwgMjI4LCA5NCwgCisgICAgMjIwLCA2MCwgNDIsIDI1LCAyMjAsIDYwLCA0NSwgMjUsIDIzNCwgMjM3LCAyMjcsIDEwOSwgMjI4LCA5NCwgMjIwLCA2MCwgCisgICAgMjI3LCAxMDksIDIyOCwgOTQsIDIyMCwgNjAsIDQ1LCAyNSwgMjM0LCAyMzcsIDIzNSwgMTE1LCAyMjgsIDk0LCAyMjAsIDYwLCAKKyAgICA0NSwgMjUsIDIzNCwgMjM3LCA0MiwgMjUsIDIzNCwgMjM3LCAyMjcsIDEwOSwgODQsIDIyMywgMjI3LCA2NywgMjIzLCAyMjcsIAorICAgIDY3LCA0MCwgMiwgMjI3LCA1NSwgMjUwLCAxMjIsIDY3LCA0MCwgMjUwLCAxNDEsIDg0LCAzLCAyMjMsIDIyNywgNDAsIDIsIAorICAgIDE4NiwgMjQ1LCAxODcsIDQwLCAyLCA2OSwgMjQ1LCAxODcsIDQwLCAyLCAyMzAsIDk1LCAyNTAsIDk2LCAyNDUsIDE4NywgCisgICAgNDAsIDIsIDIyMCwgNjAsIDQyLCAxOTksIDIzNCwgMjM3LCA0NSwgMjQ1LCAxODcsIDQwLCAyLCAyMjAsIDYwLCA0NSwgMTk5LCAKKyAgICAyMzQsIDIzNywgNDIsIDI0NSwgMTg3LCA0MCwgMiwgMjQ5LCAxMSwgMjUwLCA5NiwgMjQ1LCAxODcsIDg0LCAzLCAyMjMsIAorICAgIDIyNywgNjcsIDMsIDIyMywgMjI3LCA4NCwgMjI3LCAyMDgsIDY3LCAyMjcsIDIwOCwgODQsIDY5LCAyMjcsIDIwOCwgNjcsIAorICAgIDY5LCAyMjcsIDIwOCwgODQsIDIyOSwgMjMyLCA2NywgMjI5LCAyMzIsIDg0LCAyMjAsIDYyLCAyMjEsIDkwLCA2NywgMjIwLCAKKyAgICA2MiwgMjIxLCA5MCwgODQsIDIyMCwgNjIsIDMsIDIyMSwgOTAsIDY3LCAyMjAsIDYyLCAzLCAyMjEsIDkwLCA4NCwgMjI3LCAKKyAgICAxMDYsIDIyMSwgOTAsIDY3LCAyMjcsIDEwNiwgMjIxLCA5MCwgODQsIDIyNywgMTA2LCAzLCAyMjEsIDkwLCA2NywgMjI3LCAKKyAgICAxMDYsIDMsIDIyMSwgOTAsIDg0LCAyMjcsIDEwNiwgMjI5LCAyOSwgNjcsIDIyNywgMTA2LCAyMjksIDI5LCA4NCwgMjQ3LCAKKyAgICAxMzEsIDIyMSwgOTAsIDY3LCAyNDcsIDEzMSwgMjIxLCA5MCwgODQsIDI0NywgMTMxLCAzLCAyMjEsIDkwLCA2NywgMjQ3LCAKKyAgICAxMzEsIDMsIDIyMSwgOTAsIDg0LCAyMzUsIDExMiwgMjIxLCA5MCwgNjcsIDIzNSwgMTEyLCAyMjEsIDkwLCA4NCwgMjM1LCAKKyAgICAxMTIsIDMsIDIyMSwgOTAsIDY3LCAyMzUsIDExMiwgMywgMjIxLCA5MCwgODQsIDIzNSwgMTEyLCAyMjksIDI5LCA2NywgCisgICAgMjM1LCAxMTIsIDIyOSwgMjksIDg0LCAyNDksIDQsIDY3LCAyNDksIDQsIDY3LCAyNDksIDUsIDI1MCwgMTQxLCA4NCwgMywgCisgICAgMjQ5LCA0LCAyNDUsIDE3NSwgMjM0LCAyMzQsIDY3LCAyNTAsIDIyMSwgMjQ3LCAxNDMsIDI1MCwgMjIxLCAyNTAsIDIyMiwgCisgICAgMiwgNjksIDI0NSwgMTg3LCAyNTEsIDIzOSwgODQsIDI1MCwgMjIxLCAyNTAsIDIyMiwgMiwgNDIsIDE0NCwgMjUyLCA1MywgCisgICAgMjUwLCAyMjIsIDIsIDQ1LCAxNDQsIDI1MiwgNTMsIDI1MCwgMjIyLCAyLCAyMzQsIDIzNywgMTQ0LCAyNTIsIDUzLCAyNTAsIAorICAgIDIyMiwgMiwgMjIwLCA2MCwgMTQ0LCAyNTIsIDUzLCAyNTAsIDIyMiwgMiwgMjIwLCA2MCwgNDUsIDIyOCwgOTQsIDI1MiwgCisgICAgNTMsIDI1MCwgMjIyLCAyLCAyNTQsIDE1OCwgMjUxLCAyMjIsIDIyMCwgNjAsIDQyLCAyMjgsIDk0LCAyNTIsIDUzLCA0MiwgCisgICAgMTQ0LCA4NCwgMjUwLCAyMjEsIDQ1LCAxNDQsIDg0LCAyNTAsIDIyMSwgMjM3LCAxNzEsIDI1MSwgMjQxLCAyMzcsIDE3MSwgCisgICAgNjcsIDI1MCwgMjIxLCAyMjAsIDYwLCAxNDQsIDIzNywgMTcxLCA2NywgMjUwLCAyMjEsIDIzNCwgMjM3LCAxNDQsIDIzNywgCisgICAgMTcxLCA2NywgMjUwLCAyMjEsIDIyMCwgNjAsIDQyLCAyMjgsIDk0LCAyNTAsIDIxOSwgMjU0LCA1MSwgMjIwLCA2MCwgNDUsIAorICAgIDIyOCwgOTQsIDI1MCwgMjE5LCAyNTQsIDUxLCAyMzQsIDIzNywgNDUsIDIyOCwgOTQsIDI1MCwgMjE5LCAyNTQsIDUxLCAKKyAgICAyMzQsIDIzNywgNDIsIDIyOCwgOTQsIDI1MCwgMjE5LCAyNTQsIDUxLCAyMjAsIDYwLCAxNDQsIDI1MCwgMjIxLCAyMzQsIAorICAgIDIzNywgMTQ0LCAyNTAsIDIyMSwgODQsIDIzNCwgMjM3LCA0NSwgMjIxLCA5MCwgODQsIDIzNCwgMjM3LCA0MiwgMjIxLCA5MCwgCisgICAgODQsIDIyMCwgNjAsIDQyLCAyMjEsIDkwLCA4NCwgMjIwLCA2MCwgNDUsIDIyMSwgOTAsIDY3LCAyNTEsIDI0MSwgNDAsIDIsIAorICAgIDQyLCAxNDQsIDI1MiwgNTMsIDQwLCAyLCA0NSwgMTQ0LCAyNTIsIDUzLCA0MCwgMiwgMjIwLCA2MCwgNDIsIDI0OSwgMTEsIAorICAgIDE0NCwgMjUyLCA1MywgNDAsIDIsIDIzNCwgMjM3LCA0NSwgMjQ5LCAxMSwgMTQ0LCAyNTIsIDUzLCA2NywgNDAsIDIsIDY5LCAKKyAgICAyNTIsIDYzLCAyMzUsIDQzLCA2NywgMjIwLCA2MiwgMjIxLCA5MSwgMiwgMjQ4LCAxNDUsIDIyMCwgNjIsIDIyMSwgOTEsIDIsIAorICAgIDQyLCAxNDQsIDI1MiwgNTMsIDIyMCwgNjIsIDIyMSwgOTEsIDIsIDQ1LCAxNDQsIDI1MiwgNTMsIDIzNSwgMTQ2LCAyNTAsIAorICAgIDIyMSwgNjcsIDQwLCAyLCAyMjAsIDYwLCA0MiwgMjI4LCA5MywgNjcsIDQwLCAyLCAyMzQsIDIzNywgNDIsIDIyOCwgOTMsIAorICAgIDY3LCA0MCwgMiwgMjM0LCAyMzcsIDQ1LCAyMjgsIDkzLCA2NywgNDAsIDIsIDIyMCwgNjAsIDQ1LCAyMjgsIDkzLCA2NywgCisgICAgMjUwLCAyMjIsIDIsIDIyMCwgNjAsIDQyLCAyMjgsIDkzLCA2NywgMjUwLCAyMjIsIDIsIDIzNCwgMjM3LCA0MiwgMjI4LCAKKyAgICA5MywgNjcsIDI1MCwgMjIyLCAyLCAyMzQsIDIzNywgNDUsIDIyOCwgOTMsIDY3LCAyNTAsIDIyMiwgMiwgMjIwLCA2MCwgNDUsIAorICAgIDIyOCwgOTMsIDIyMCwgNjAsIDQyLCAyMjEsIDkwLCAyMjAsIDYwLCA0NSwgMjIxLCA5MCwgMjM0LCAyMzcsIDQyLCAyMjEsIAorICAgIDkwLCA2NywgMjM0LCAxOCwgMjIzLCAyMjcsIDg0LCAyMzQsIDE4LCAyMjMsIDIyNywgNjcsIDIzNCwgMTgsIDMsIDIyMywgCisgICAgMjI3LCA4NCwgMjM0LCAxOCwgMywgMjIzLCAyMjcsIDIzNCwgMjM3LCA0NSwgMjIxLCA5MCwgODQsIDIyMywgNjksIDIsIAorICAgIDIyNywgMjIwLCAyNTAsIDE4OSwgMjIwLCA5MSwgMjI0LCAyOCwgMjUwLCAxNzEsIDg0LCAyMjMsIDE1NiwgNjcsIDIyMywgCisgICAgMTU2LCAyMzUsIDU2LCAyMjEsIDIyMCwgMjIzLCA2OCwgMjU0LCAxMCwgMjMxLCAyMDEsIDI0OSwgNDcsIDIzMSwgMjAxLCAKKyAgICAyNTAsIDE0OSwgMjMwLCAxMDksIDg0LCAyMjIsIDcxLCA2NywgMjIyLCA3MSwgMjUyLCAyMTMsIDI1MiwgMjEsIDI1MiwgCisgICAgMjEzLCA4NiwgMiwgMjUxLCA0NCwgMjUyLCAyMTMsIDg2LCAyLCAyMTgsIDE1MSwgMjI2LCAxNDksIDIyMCwgOTIsIDIsIAorICAgIDIyNywgMjQzLCAyNDcsIDExNywgMjQyLCAxODcsIDI1MiwgOTgsIDY3LCAyMjQsIDE5NiwgMjI5LCAxMDIsIDg0LCAyMjQsIAorICAgIDE5NiwgMjI5LCAxMDIsIDIyNSwgMTEsIDIxMCwgMjI3LCA1OSwgMjQ1LCAxNDgsIDI0MywgMTU0LCAyNTEsIDI0MSwgODQsIAorICAgIDQyLCAyMjksIDI4LCAyMzcsIDIxMywgODQsIDQ1LCAyMjksIDI4LCAyMzcsIDIxMywgNjcsIDQyLCAyMjksIDI4LCAyMzcsIAorICAgIDIxMywgNjcsIDEwOCwgMjI5LCAyOCwgMjM3LCAyMTMsIDY3LCA0NSwgMjI5LCAyOCwgMjM3LCAyMTMsIDY3LCAxMTMsIDIyOSwgCisgICAgMjgsIDIzNywgMjEzLCAyMjQsIDYwLCAyNSwgMjUwLCA5OSwgMjUxLCAxMjAsIDU1LCAyMjcsIDI1MCwgNTUsIDI1MiwgNjksIAorICAgIDU1LCAyNTEsIDE2NCwgMjU0LCAxMTUsIDIzMCwgOTYsIDI1MCwgMTAwLCAyNTEsIDMyLCAyMjcsIDE0OSwgMjUwLCAxMDEsIAorICAgIDExNywgMjM0LCAyNDMsIDI1MCwgMTAxLCAxMTcsIDIzNywgMTA1LCAyMjMsIDE1NywgMjUsIDI1MCwgMTA0LCAyNDUsIDI0MSwgCisgICAgMTAwLCAyNTQsIDIzOCwgMjI1LCAxMywgMjQzLCAxOTMsIDI1LCAyMjQsIDEzOCwgMjI5LCAxOTcsIDEwMCwgMjE3LCAyNDEsIAorICAgIDIxOCwgNDUsIDIyMSwgODIsIDM1LCAyNDMsIDE1MSwgMjIxLCA4MiwgMzUsIDIzNSwgMTY1LCAyMjEsIDgyLCAzNSwgMjQ1LCAKKyAgICAxNzksIDIyMSwgODIsIDM1LCAyMjEsIDIyMSwgMjIxLCA4MiwgMzUsIDIxOCwgMTk0LCAyMjEsIDgyLCAzNSwgMjE4LCAyNDAsIAorICAgIDIyMSwgODIsIDM1LCAyMzMsIDEwNywgMjIxLCA4MiwgMzUsIDI0NywgOCwgMjE4LCAyMTEsIDExNywgMjQ5LCAzMCwgNjcsIAorICAgIDI0NSwgOTQsIDI0NiwgMywgNjcsIDIyNCwgMzgsIDI0NiwgMywgODQsIDIyNCwgMzgsIDI0NiwgMywgNjcsIDIyMywgNjksIAorICAgIDIsIDIyNywgMjIwLCAyNDUsIDE3OCwgMjI4LCA5MCwgMjMzLCAxMTcsIDIzNSwgMTQyLCAyMjgsIDkwLCAyMzMsIDExNywgCisgICAgMjMzLCAyNDksIDI0NSwgMjE3LCA1NSwgMjQ3LCA4LCAyMzQsIDkwLCA1NSwgMjM3LCAzMSwgMjI2LCAxMjQsIDIyMCwgNDUsIAorICAgIDIzMiwgMTI5LCAyMjksIDQxLCAyNTQsIDM5LCAyMjIsIDEwNCwgMjQ0LCAxODIsIDI1MSwgMTUwLCAyMzUsIDkwLCAyMTksIAorICAgIDgwLCAyMzUsIDY1LCAyMjYsIDEwMiwgMjI2LCAxNjMsIDI1MSwgMTQwLCAyNTQsIDY4LCAyMjksIDY2LCA2NywgMjUxLCAzNywgCisgICAgMjM2LCAxMDIsIDY3LCAyNTEsIDM3LCAyMjgsIDgzLCA2NywgMjUxLCAzNywgMjI3LCA2NSwgNjcsIDI1MSwgMzcsIDI1MiwgCisgICAgNjIsIDY3LCAyNTEsIDM3LCAyMzYsIDU5LCA2NywgMjUxLCAzNywgMjI5LCAyMDcsIDg0LCAyNTEsIDM3LCAyMzYsIDEwMiwgCisgICAgODQsIDI1MSwgMzcsIDIyOCwgODMsIDg0LCAyNTEsIDM3LCAyMjcsIDY1LCA4NCwgMjUxLCAzNywgMjUyLCA2MiwgODQsIAorICAgIDI1MSwgMzcsIDIzNiwgNTksIDg0LCAyNTEsIDM3LCAyMjksIDIwNywgODQsIDIyMywgMjUyLCAyMjMsIDgwLCA2NywgMjQzLCAKKyAgICAxNTQsIDIyMywgODAsIDY3LCAyNDksIDUsIDIyMywgODAsIDg0LCAyNTAsIDE4OCwgMjIzLCA4MCwgNjcsIDIyMywgMjUyLCAKKyAgICAyMjMsIDgwLCA4NCwgMjQzLCAxNTQsIDIyMywgODAsIDg0LCAyNDksIDUsIDIyMywgODAsIDY3LCAyNTAsIDE4OCwgMjIzLCAKKyAgICA4MCwgMjQyLCAxODcsIDIyMywgMjMxLCAyMjgsIDkwLCAyMzEsIDE4MCwgMjQ2LCAyMzIsIDIzMSwgMTgwLCAyNTIsIDE0MiwgCisgICAgMjQ2LCAyMzIsIDIzMSwgMTc3LCAyNTIsIDE0MiwgMjI0LCA3NiwgMjMxLCAxNzcsIDIzMywgNTksIDI0NSwgMTU3LCA1NSwgCisgICAgMjMzLCA1OSwgMjMyLCAyMDUsIDU1LCAyMzMsIDU5LCAyMjUsIDEsIDU1LCAyMTgsIDIxNywgMTY2LCAyNTAsIDEwMCwgMjQ3LCAKKyAgICA1LCAxNjYsIDI1MCwgMTAwLCAyMjAsIDcwLCAyMjcsIDIwNCwgMTAwLCAyMjcsIDIwNCwgMTYsIDM1LCAyMjAsIDE5NywgCisgICAgMjI5LCA1MCwgMjI3LCAyMDQsIDE2LCAzNSwgMjIwLCAxOTYsIDIyOSwgNTAsIDIyNywgMjA0LCAxNiwgMzUsIDIyMCwgMTk1LCAKKyAgICAyMjksIDUwLCAyMjcsIDIwNCwgMTYsIDM1LCAyMjAsIDE5NCwgMjI5LCA1MCwgMjI3LCAyMDQsIDE2LCAzNSwgMjIwLCAxOTMsIAorICAgIDIyOSwgNTAsIDIyNywgMjA0LCAxNiwgMzUsIDIyMCwgMTkyLCAyMjksIDUwLCAyMjcsIDIwNCwgMTYsIDM1LCAyMjAsIDE5MSwgCisgICAgMjI5LCA1MCwgMjI3LCAyMDQsIDE2LCAzNSwgMjQ0LCAxODAsIDIzNCwgNTAsIDg0LCAyMjAsIDcwLCAyMjcsIDIwNCwgMTAwLCAKKyAgICAyMjcsIDIwNSwgMjI5LCAyNDUsIDEwMCwgMjI5LCAyMjIsIDIyOSwgMjQ1LCAxMDAsIDIyOSwgMTYyLCAyMjksIDI0NSwgNTUsIAorICAgIDIxOCwgMjA5LCAxMDAsIDI0OCwgMjU0LCAyNDYsIDIsIDI0OCwgMjU0LCAyNDYsIDEsIDI0OCwgMjU0LCAyNDYsIDAsIDI0OCwgCisgICAgMjU0LCAyNDUsIDI1NSwgMjQ4LCAyNTQsIDI0NSwgMjU0LCAyNDgsIDI1NCwgMjQ1LCAyNTMsIDY3LCAyNTAsIDIyMiwgMiwgCisgICAgNjEsIDIyNywgMTA5LCA2NywgMjUwLCAyMjIsIDIsIDEyNCwgMjQ4LCAxNDMsIDg0LCAyNTAsIDIyMiwgMiwgNjcsIDYxLCAKKyAgICAyMjcsIDEwOSwgODQsIDI1MCwgMjIyLCAyLCAxMjQsIDY3LCAyNDgsIDE0MywgMjMzLCAxMjUsIDM1LCAyMTgsIDQ1LCAyMzMsIAorICAgIDEyNSwgMzUsIDIxNywgMjQwLCAyNDgsIDIzNywgMzUsIDI0NCwgMzEsIDIxOCwgNDUsIDI0OCwgMjM3LCAzNSwgMjM1LCA4NSwgCisgICAgMjE3LCAyNDAsIDI0OCwgMjM3LCAzNSwgMjM1LCA4NSwgMjE4LCA0NSwgMjQ4LCAyMzcsIDM1LCAyNDQsIDMxLCAyMTcsIAorICAgIDI0MCwgNjcsIDI0NSwgMTYzLCA4NCwgMjQ1LCAxNjMsIDI0MywgMTkzLCAyNSwgMjI5LCAxMDQsIDI1NCwgMTI4LCAyNTAsIAorICAgIDk4LCAyMjMsIDI0LCAyMjMsIDE2NCwgMTE3LCAyNTQsIDIxOCwgMjI2LCAxMTMsIDI1NCwgMTY3LCAyNDUsIDE0NCwgMjQ0LCAKKyAgICAxODksIDIyMywgMTY0LCAxMTcsIDI0MywgMTMzLCAyNTMsIDIzOCwgMTAwLCAyNDUsIDE1MywgMjMwLCA4MCwgNjcsIDIyMywgCisgICAgMTU2LCAxNDgsIDIzNSwgMzgsIDI1MCwgMTMxLCAyMjcsIDEwOSwgMTQ4LCAyMzUsIDM4LCAyNTAsIDEzMSwgMjM1LCAxMTUsIAorICAgIDIxOCwgMjUwLCA1NSwgMTE2LCAyMTksIDY2LCA1NSwgMjQ3LCAxMzUsIDI0NSwgMjE3LCA1NSwgMjQ3LCAxMzUsIDIzNCwgCisgICAgOTAsIDU1LCAyMzcsIDE3OSwgMjQ1LCAyMTcsIDI1LCAyMzQsIDkwLCA1NSwgMjM0LCA5MCwgMjUsIDI0NSwgMjE3LCA1NSwgCisgICAgMjM0LCA5MCwgMiwgMjE0LCA1NSwgMjM0LCA5MCwgMiwgMjE0LCAyNSwgMjM0LCA5MCwgMjUsIDI0NSwgMjE3LCA1NSwgNjksIAorICAgIDIzNCwgOTAsIDIsIDIxNCwgNTUsIDE4NiwgMjM0LCA5MCwgMiwgMjE0LCA1NSwgMjM0LCAxOCwgNjcsIDI1MCwgMjIxLCAKKyAgICAyMzQsIDE4LCA4NCwgMjUwLCAyMjEsIDIzNCwgMTgsIDMsIDY3LCAyNTAsIDIyMSwgMjM0LCA2MiwgMTAwLCAyNDgsIDE4NiwgCisgICAgMTAwLCAyMjAsIDY5LCAyMjksIDIyMSwgMTAwLCAyNTAsIDE3OCwgMjQ1LCA4NiwgMjIwLCA0MiwgMjMyLCAxMjQsIDI1MSwgCisgICAgNzIsIDIzMCwgMjUsIDIzNywgMzcsIDIxOSwgOTgsIDI1MSwgMTgsIDg0LCAyMzMsIDExOCwgMjM1LCA1MywgMjI1LCAzNCwgCisgICAgMjI1LCA2NCwgMjI4LCA3NSwgMjI1LCA0OCwgMjI0LCAyNCwgMjUyLCAyMTUsIDI1MiwgMTg4LCAyMDQsIDIzNiwgMTU0LCAKKyAgICA2NywgMjQ3LCAxMjIsIDIzNCwgODYsIDY3LCAyNDcsIDEyMiwgMjM2LCAxMDIsIDg0LCAyNDcsIDEyMiwgMjM0LCA4NiwgODQsIAorICAgIDI0NywgMTIyLCAyMzYsIDEwMiwgMjI0LCAyOSwgMjE4LCAxODksIDIyNCwgMzEsIDIyMywgNjksIDI1MiwgMTI1LCAyNTAsIAorICAgIDE4OSwgMjI3LCAyNDIsIDg0LCAyMjQsIDI4LCAyMjEsIDIyMiwgMjUwLCAxOTAsIDI1LCAyMjcsIDI0MiwgMjE1LCA2NywgCisgICAgMjI0LCAxOTYsIDIyOSwgMTAyLCAyMTUsIDg0LCAyMjQsIDE5NiwgMjI5LCAxMDIsIDY3LCAyNDksIDUsIDIzNywgMjI0LCAKKyAgICAyMjMsIDIyNywgMjUwLCA5NSwgMjM1LCAxNDksIDI0OCwgMjA2LCAyNTEsIDEzNywgMjI5LCAxMDQsIDI1MSwgMTM4LCAyMjQsIAorICAgIDUxLCAyNDMsIDE0MSwgMiwgNjcsIDI1MCwgMTAwLCAzNCwgMjUwLCA5NSwgMjM1LCAxNDksIDI1MSwgNjUsIDIzMSwgMjA1LCAKKyAgICAyNDYsIDE3NCwgMjU0LCAxNDQsIDIzMCwgMTM1LCA0MiwgMjE4LCAyMzAsIDIyMSwgMTA2LCA4NCwgMjIwLCAyMDQsIDQyLCAKKyAgICAyMTgsIDIzMCwgMjIxLCAxMDYsIDY3LCAyMjAsIDIwNCwgNDIsIDIxOCwgMjMwLCAyMjEsIDEwNiwgODQsIDQyLCAyMzUsIAorICAgIDE1MCwgMjMzLCAyNDgsIDY3LCA0MiwgMjM1LCAxNTAsIDIzMywgMjQ4LCAyNDcsIDEyMCwgMjI0LCA0NiwgNTUsIDEwNiwgCisgICAgNjcsIDI0NywgMTMxLCAyMjEsIDkwLCA0MiwgMjUwLCAxOTcsIDI0NiwgMTc0LCAyMDQsIDIyNiwgMTQ5LCAyNDUsIDI0NywgCisgICAgMjQ5LCAxMSwgMjM3LCAyMjQsIDY3LCAyNTAsIDIyMiwgMjM3LCAyMjQsIDg0LCAyMjMsIDIyNywgODQsIDIyMSwgNjMsIAorICAgIDIyNywgMTY3LCA0MiwgMjQ2LCAxNzMsIDIyNywgMTY3LCA0MiwgMjQ2LCAxNzIsIDEwNiwgMjUwLCAyMjIsIDIsIDIxNCwgCisgICAgMjUsIDEyNCwgMTg4LCA1MCwgODQsIDI1MCwgMTAxLCAyMzAsIDEzOSwgMjI0LCAyMTgsIDIyNCwgMjA3LCAyMjQsIDE3NCwgCisgICAgMjUwLCAyNDUsIDI1MSwgMTI1LCAyNDMsIDkzLCAyMjQsIDgzLCAyNDQsIDE5MCwgMjE4LCAxODksIDI0MiwgMTcxLCAyNDQsIAorICAgIDE5MCwgMiwgMjQzLCAxODgsIDIzNCwgNzksIDE2LCAzNSwgMjM1LCA1NywgMjMzLCAxMDcsIDIyMCwgOTIsIDIzMCwgMTM5LCAKKyAgICAyNDQsIDI0LCAyNDUsIDExNywgMjQ1LCAxNjQsIDIzNywgMjI0LCAyNDIsIDI1MiwgMjQ1LCAyMDksIDIyNiwgMTYwLCA0MCwgCisgICAgMjQ1LCAxMTYsIDI1MCwgMTIyLCAyMjQsIDYzLCAyNDIsIDY2LCAyMjQsIDY1LCAyMjksIDE1OCwgMiwgMjUyLCAyMTUsIAorICAgIDIyMiwgNjIsIDIzNywgMTE4LCAyNTIsIDIwNCwgMTAwLCAyNDMsIDE1NiwgMjQ0LCAzMywgMTAwLCAyNDUsIDkxLCAyMjgsIAorICAgIDE5OCwgMjUwLCA4MywgMjMwLCAxMzksIDg0LCAyMjMsIDIyNywgNjcsIDI0NSwgMTY0LCAyLCAxODYsIDIzMywgMTkzLCA4NCwgCisgICAgMjIzLCAxMjAsIDIyMCwgNjAsIDI1MiwgNDksIDIyNiwgMTAzLCA4NCwgMjI2LCAxMDMsIDIzNCwgMjM3LCAyNTIsIDQ5LCAKKyAgICAyMjYsIDEwMywgNjcsIDIyNiwgMTAzLCAyMjIsIDcyLCAyMzUsIDEwLCA1NSwgMjIyLCAxMTQsIDI0NywgMTE5LCAyNTQsIAorICAgIDE4NywgMjQ2LCAxNzAsIDIxOSwgOTMsIDI0MywgMTg5LCAyMTgsIDE2NywgMjQzLCAxODksIDIzNCwgMjM3LCA0NSwgMjI5LCAKKyAgICAxODEsIDIyOSwgMTgxLCAyMjAsIDYwLCA0NSwgMjI5LCAxODEsIDY3LCAyMzIsIDU5LCA4NCwgMjMyLCA1OSwgMjUxLCA0NSwgCisgICAgNzgsIDEwNiwgMjUxLCA0NSwgNzgsIDIzMywgODQsIDIxOCwgMTUxLCAxMDYsIDIzMywgODQsIDIxOCwgMTUxLCAyNTIsIAorICAgIDIxMywgMjE4LCAxNTEsIDEwNiwgMjUyLCAyMTMsIDIxOCwgMTUxLCAyMzAsIDgwLCAyMywgMjUwLCAxMDAsIDEwNiwgMjMsIAorICAgIDI1MCwgMTAwLCAyMzAsIDExOSwgMjUxLCA4NSwgMjUwLCAxMDAsIDEwNiwgMjMwLCAxMTksIDI1MSwgODUsIDI1MCwgMTAwLCAKKyAgICA3LCAyNTAsIDEwMCwgMjI1LCAxNCwgNjcsIDcsIDI1MCwgMTAwLCAyMzAsIDgwLCA3LCAyNTAsIDEwMCwgMjM0LCA4OCwgCisgICAgMjUwLCAxMDAsIDIyMywgMTU3LCAxMTcsIDI0OSwgMTQwLCAyNDUsIDExNiwgMjIyLCA4MywgMjUzLCAyNTEsIDI0NSwgMTE2LCAKKyAgICAyNTIsIDIxNCwgMjUzLCAyNTEsIDEwNiwgMjQ1LCAxMTYsIDI1MiwgMjE0LCAyNTMsIDI1MSwgMjQ1LCAxMTYsIDI1MCwgCisgICAgMTg2LCAyNTMsIDI1MSwgODQsIDI0NSwgMTE2LCAyMjksIDMwLCAyMjMsIDE1NiwgNjcsIDI0NSwgMTE2LCAyMjksIDMwLCAKKyAgICAyMjMsIDE1NiwgMjIzLCAxMjUsIDIzMCwgODAsIDY3LCAyMjMsIDE1NiwgMzQsIDY3LCAyMjMsIDE1NiwgMjMwLCAxMTksIAorICAgIDI1MSwgODUsIDg0LCAyMjMsIDE1NiwgODQsIDI1MSwgODUsIDY3LCAyMjMsIDE1NiwgMjMwLCA4MCwgODQsIDIyMywgMTU2LCAKKyAgICAxMDYsIDIzMCwgODAsIDg0LCAyMjMsIDE1NiwgMjI5LCA3MSwgMjIzLCAxNTYsIDIyNSwgMTQsIDY3LCAyMjMsIDE1NiwgCisgICAgMTA2LCAyNTMsIDI1MSwgMjMwLCAxMTksIDI1MSwgODUsIDI1MywgMjUxLCAyNDYsIDIzNSwgMjIzLCAyMzYsIDI1MywgMjUxLCAKKyAgICAyNDYsIDIzNSwgMjI5LCAzMCwgODQsIDIyMywgMTU2LCAyNDYsIDIzNSwgMjI5LCAzMCwgMjI5LCA3MSwgMjIzLCAxNTYsIAorICAgIDIyNCwgODIsIDIyOSwgMzAsIDg0LCAyMjMsIDE1NiwgMjQ2LCAyMzUsIDIyOSwgMzAsIDIyNywgMjA2LCA4NCwgMjIzLCAKKyAgICAxNTYsIDEwNiwgMjQ2LCAyMzUsIDIyOSwgMzAsIDIyNywgMjA2LCA4NCwgMjIzLCAxNTYsIDIyMCwgMjIyLCAyMjksIDMwLCAKKyAgICA4NCwgMjIzLCAxNTYsIDIyNCwgNzgsIDIyOSwgMzAsIDI1MywgMjUxLCAyMjIsIDgzLCAyNTMsIDI1MSwgMjMwLCAxMTksIAorICAgIDI1MSwgODUsIDIyMiwgODMsIDI1MywgMjUxLCAxMDYsIDIyMiwgODMsIDI1MywgMjUxLCAyMjQsIDgyLCAyMjksIDE0OSwgCisgICAgODQsIDI1LCA2NywgMjQ1LCAxNDcsIDg0LCAyNDUsIDE0NywgNjcsIDI0NSwgMTQ3LCAyNDYsIDIzNSwgMjI5LCAxNDksIAorICAgIDIzMCwgODAsIDg0LCAyNDUsIDE0NywgMzQsIDIzMCwgMTE5LCAyNTEsIDg1LCAyNDYsIDIzNSwgMjI5LCAzMCwgMjIzLCAKKyAgICAxNTYsIDEwNiwgMjIyLCA4MywgMjI5LCA3MSwgMjUzLCAyNTEsIDIyNCwgMzAsIDIyMSwgMTk1LCAyMjEsIDg1LCAyMjQsIAorICAgIDMwLCAxMDYsIDI1MSwgMzUsIDIyNCwgMzAsIDIyMywgMjUxLCAxMDYsIDIyMywgMjUxLCAyNTIsIDIxNCwgMjUzLCAyNTEsIAorICAgIDI0NiwgMjM1LCAyMjIsIDgzLCAyMjgsIDIyMSwgMjUzLCAyNTEsIDEwNiwgMjQ2LCAyMzUsIDIyMiwgODMsIDIyOCwgMjIxLCAKKyAgICAyNTMsIDI1MSwgMjI1LCAxNCwgNjcsIDI1MCwgMjIxLCAyMzQsIDIzNywgNDUsIDI0NywgMTE4LCA2NywgMjIzLCAyMjcsIAorICAgIDIyMCwgNjAsIDQ1LCAyNDcsIDExOCwgNjcsIDIyMywgMjI3LCAyMzQsIDIzNywgNDUsIDIyNSwgMTQsIDY3LCAyMjMsIDIyNywgCisgICAgMjIwLCA2MCwgNDUsIDIyNSwgMTQsIDY3LCAyMjMsIDIyNywgODQsIDI0OSwgNSwgMjMzLCAxNTUsIDY3LCAyMTgsIDE1MSwgCisgICAgMTA2LCAyNDYsIDk1LCAxNjQsIDEwMCwgMTcwLCA2OSwgMTM1LCAyMzQsIDE4LCA2OSwgMTM1LCAxMDYsIDY5LCAxMzUsIAorICAgIDEwNiwgMjI0LCAxMDksIDIxNSwgMjUwLCAxNjksIDIyOCwgNjksIDE2NCwgMjMwLCA5OCwgMTA2LCAyMjQsIDEwOSwgMjUwLCAKKyAgICAxNjksIDIyOCwgNjksIDE2NCwgMjMwLCA5OCwgMTA2LCA1MSwgMjE1LCAyNTAsIDE2OSwgMjI4LCA2OSwgMTY0LCAyMzAsIAorICAgIDk4LCAxMDYsIDUxLCAyNTAsIDE2OSwgMjI4LCA2OSwgMTY0LCAyMzAsIDk4LCAyNTAsIDczLCAyMjMsIDE0NywgMjI5LCAKKyAgICAyNDEsIDUsIDIzMCwgOTgsIDEwNiwgMjQ2LCA5NSwgMTY0LCAyMzAsIDk4LCAxMDYsIDI0MywgMTU0LCAyNDYsIDk1LCAxNjQsIAorICAgIDIzMCwgOTgsIDEwNiwgODQsIDI0MywgMTUzLCAyMjcsIDU5LCAxMDYsIDg0LCAyNDMsIDE1NCwgMjUxLCAyNDEsIDI0NSwgCisgICAgMTQ4LCAyNDMsIDE1MywgMjI3LCA1OSwgMjQ1LCAxNDgsIDI0MywgMTU0LCAyNTEsIDI0MSwgMjM0LCAxOCwgNDIsIDIyOSwgCisgICAgMjMwLCAyMzAsIDk4LCAyMzQsIDE4LCA0NSwgMjI5LCAyMzAsIDIzMCwgOTgsIDIzNCwgMTgsIDI0NSwgMTU0LCA0MiwgMjI5LCAKKyAgICAyMzAsIDIzMCwgOTgsIDIzNCwgMTgsIDI0NSwgMTU0LCA0NSwgMjI5LCAyMzAsIDIzMCwgOTgsIDIzNCwgMTgsIDIzNSwgCisgICAgMTEyLCAyNTQsIDEyMCwgMjUyLCAxOCwgMjMwLCA5OCwgMjM0LCAxOCwgMjI3LCAxMDYsIDI1NCwgMTIwLCAyNTIsIDE4LCAKKyAgICAyMzAsIDk4LCAxMDYsIDIzNSwgMTEyLCAyNTQsIDEyMCwgMjI4LCA2OSwgMTY0LCAyMzAsIDk4LCAxMDYsIDIyNywgMTA2LCAKKyAgICAyNTQsIDEyMCwgMjI4LCA2OSwgMTY0LCAyMzAsIDk4LCAxMDYsIDIzNSwgMTEyLCAyNTQsIDEyMCwgMjUyLCAxOCwgMjMwLCAKKyAgICA5OCwgMTA2LCAyMjcsIDEwNiwgMjU0LCAxMjAsIDI1MiwgMTgsIDIzMCwgOTgsIDE3MCwgNDIsIDIyMSwgMTE0LCAyMjQsIAorICAgIDIzNiwgMjUyLCAxOCwgMjMwLCA5OCwgMTcwLCA0NSwgMjIxLCAxMTQsIDIyNCwgMjM2LCAyNTIsIDE4LCAyMzAsIDk4LCAKKyAgICAyMzQsIDE4LCA0MiwgMjUwLCA3OSwgMjUyLCAxOCwgMjMwLCA5OCwgMjM0LCAxOCwgNDUsIDI1MCwgNzksIDI1MiwgMTgsIAorICAgIDIzMCwgOTgsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDIwLCAxMDcsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDIwLCAKKyAgICAxMDMsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDIwLCAxNjAsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDIwLCAxNTQsIAorICAgIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDIwLCAxNzQsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDIwLCAxODIsIDI0OCwgCisgICAgMjE3LCAyMzIsIDEzNiwgMzQsIDIwLCAxOTEsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDIwLCAxODUsIDI0OCwgMjE3LCAKKyAgICAyMzIsIDEzNiwgMzQsIDIwLCAxOTAsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDU0LCAyMjIsIDY1LCAyNDgsIDIxNywgMzQsIAorICAgIDMzLCAyMCwgMTA3LCAyNDgsIDIxNywgMzQsIDMzLCAyMCwgMTAzLCAyNDgsIDIxNywgMzQsIDMzLCAyMCwgMTYwLCAyNDgsIAorICAgIDIxNywgMzQsIDMzLCAyMCwgMTU0LCAyNDgsIDIxNywgMzQsIDMzLCAyMCwgMTc0LCAyNDgsIDIxNywgMzQsIDMzLCAyMCwgCisgICAgMTgyLCAyNDgsIDIxNywgMzQsIDMzLCAyMCwgMTkxLCAyNDgsIDIxNywgMzQsIDMzLCAyMCwgMTg1LCAyNDgsIDIxNywgMzQsIAorICAgIDMzLCAyMCwgMTkwLCAyNDgsIDIxNywgMzQsIDMzLCA1NCwgMjIyLCA2NSwgMjQ4LCAyMTcsIDIzMiwgMTM2LCAzNCwgMzMsIAorICAgIDIwLCAxMDcsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDMzLCAyMCwgMTAzLCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAzMywgCisgICAgMjAsIDE2MCwgMjQ4LCAyMTcsIDIzMiwgMTM2LCAzNCwgMzMsIDIwLCAxNTQsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDMzLCAKKyAgICAyMCwgMTc0LCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAzMywgMjAsIDE4MiwgMjQ4LCAyMTcsIDIzMiwgMTM2LCAzNCwgMzMsIAorICAgIDIwLCAxOTEsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDMzLCAyMCwgMTg1LCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAzMywgCisgICAgMjAsIDE5MCwgMjQ4LCAyMTcsIDIzMiwgMTM2LCAzNCwgMzMsIDU0LCAyMjIsIDY1LCAxMDYsIDIxOCwgMjAwLCA5MCwgNjUsIAorICAgIDEwNiwgMjI0LCA2LCAyNDcsIDUsIDY1LCAxMDYsIDkwLCA2NSwgMTA2LCAyMzEsIDE4NywgMjQ3LCA1LCA2NSwgMjQ3LCAKKyAgICAxMjQsIDIyOSwgMzIsIDkwLCA2NSwgMTA2LCAyMjcsIDU2LCA5MCwgNjUsIDIyMSwgODksIDkwLCA2NSwgMTA2LCAyMjEsIAorICAgIDg5LCA5MCwgNjUsIDI0OSwgMTQ1LCAyMjEsIDg5LCA5MCwgNjUsIDEwNiwgMjQ5LCAxNDUsIDIyMSwgODksIDkwLCA2NSwgCisgICAgODQsIDkwLCA2NSwgMjIxLCAyMjgsIDIyMSwgMTE4LCA5MCwgMjU0LCAyMCwgMjIxLCAyMjgsIDI1MiwgMjcsIDkwLCAyNTQsIAorICAgIDIwLCA4NCwgOTAsIDI1NCwgMjAsIDEwNiwgODQsIDI1MCwgNzMsIDI0NywgMTMwLCAyNSwgOTAsIDY1LCAxMDYsIDg0LCAKKyAgICAyNTAsIDczLCAyMjAsIDUzLCAyNSwgOTAsIDY1LCAyMjMsIDIyNCwgODQsIDkwLCA2NSwgMTA2LCAyNTAsIDE1NywgODQsIAorICAgIDkwLCA2NSwgMjI3LCAxMDUsIDY3LCA5MCwgNjUsIDIzNSwgMTExLCA2NywgOTAsIDY1LCAyNTIsIDIzMiwgMjI1LCAxNCwgCisgICAgNjcsIDkwLCA2NSwgMjQ1LCA5NiwgMjI1LCAxNCwgNjcsIDkwLCA2NSwgMTA2LCAyMzQsIDIzNywgMjI3LCAxMDQsIDY3LCAKKyAgICA5MCwgNjUsIDEwNiwgMjIwLCA2MCwgMjI3LCAxMDQsIDY3LCA5MCwgNjUsIDIzMSwgMTgyLCAyMzQsIDIzNywgMjI3LCAxMDQsIAorICAgIDY3LCA5MCwgNjUsIDIzMSwgMTgyLCAyMjAsIDYwLCAyMjcsIDEwNCwgNjcsIDkwLCA2NSwgMzQsIDEwNiwgNjcsIDkwLCA2NSwgCisgICAgMjE4LCAyMDYsIDkwLCA2NSwgMjUyLCA1MiwgMjI0LCA2LCAyNDcsIDUsIDY1LCAyNTIsIDUyLCA5MCwgNjUsIDI1MiwgNTIsIAorICAgIDIzMSwgMTg3LCAyNDcsIDUsIDY1LCAxMDYsIDI1MiwgNTIsIDIyNCwgNiwgMjQ3LCA1LCA2NSwgMTA2LCAyNTIsIDUyLCA5MCwgCisgICAgNjUsIDEwNiwgMjUyLCA1MiwgMjMxLCAxODcsIDI0NywgNSwgNjUsIDIyMiwgODUsIDkwLCA2NSwgMTA2LCAyMjIsIDg0LCAKKyAgICA5MCwgNjUsIDIxOCwgMjI1LCA5MCwgNjUsIDEwNiwgMjE4LCAyMjUsIDkwLCA2NSwgMjMwLCAxMTYsIDkwLCA2NSwgMTQ4LCAKKyAgICAyNDgsIDIyNywgMjU0LCAxMTksIDY3LCAyMjEsIDkxLCAyNTAsIDE0MSwgMywgNjcsIDIyMSwgOTAsIDIyOSwgMTYwLCAyMzAsIAorICAgIDExOSwgMjIzLCA5MiwgMjMwLCAxMTksIDIyMywgNTcsIDQyLCAyMjYsIDIzNCwgMjUyLCAyMjYsIDI0OSwgNjcsIDQ1LCAKKyAgICAyMjYsIDIzNCwgMjUyLCAyMjYsIDI0OSwgNjcsIDE1NiwgMiwgNjEsIDIzNywgMTkwLCAyMjcsIDE2MCwgMjI0LCAxOCwgCisgICAgMjI4LCAyNDMsIDIyMywgOTIsIDIyMywgNTgsIDIyOCwgMjQzLCAyMjQsIDE3LCA2OSwgMjUyLCAyMDEsIDIsIDE4NiwgOTIsIAorICAgIDE3MSwgMjQ4LCAxODcsIDY3LCAyNDksIDUsIDIsIDI1MSwgODMsIDI0OCwgMTQ1LCAyNSwgMiwgMjQ4LCAxNDUsIDI0NiwgCisgICAgMjEzLCAxMTcsIDIzMCwgMTE0LCAyMjAsIDUyLCAyMzQsIDIzNywgNDUsIDI1MCwgMTI0LCAyLCAyNDgsIDE0NSwgMjIwLCAKKyAgICA2MCwgNDIsIDI1MCwgMTI0LCAyLCAyNDgsIDE0NSwgNDIsIDIzMCwgODIsIDIzNywgNTcsIDQ1LCAyMzAsIDgyLCAyMzcsIAorICAgIDU3LCAyNDUsIDkwLCAyMzAsIDgyLCAyMzcsIDU3LCAyMzUsIDE0NiwgMTA4LCAyMjIsIDE0MywgMjM1LCAxNDYsIDExMywgCisgICAgMjIyLCAxNDMsIDQyLCAyNSwgNDUsIDUxLCAyMjAsIDIzNiwgNDIsIDI1LCA0NSwgMjIyLCAxNDMsIDQyLCAyMzMsIDg3LCAKKyAgICAxNzEsIDQ1LCAyMjIsIDE0MywgMTcxLCA0MiwgMjIyLCAxNDMsIDEwOCwgMjIyLCAxNDQsIDIsIDI1MCwgMjIyLCA1MCwgCisgICAgMjM0LCAyMzUsIDI0OCwgMTkyLCAyNTEsIDIxMywgMTg2LCAyMjcsIDE2LCA2NywgMjUwLCAxNTYsIDI0OSwgNCwgNjcsIAorICAgIDI1MCwgMTU2LCAyNDksIDUsIDIsIDEyNywgMjIxLCAyMDIsIDY3LCAyNTAsIDE1NiwgMjQ5LCA1LCAyLCA5MCwgMjIxLCAKKyAgICAyMDIsIDY3LCA0MCwgMiwgMTI3LCAyMjEsIDIwMiwgNjcsIDQwLCAyLCA5MCwgMjIxLCAyMDIsIDE0LCA0MiwgNjcsIDQwLCAKKyAgICAxMTUsIDE0LCA0NSwgNjcsIDQwLCAxMTUsIDE0LCA0MiwgMjU0LCAxMjAsIDExNSwgMTQsIDQ1LCAyNTQsIDEyMCwgMTE1LCAKKyAgICAxNCwgNDIsIDUxLCAyNTQsIDEyMCwgMTE1LCAxNCwgNDUsIDUxLCAyNTQsIDEyMCwgMTE1LCAxNCwgNDIsIDY3LCAyMjEsIAorICAgIDExNCwgMjI0LCAyMzYsIDExNSwgMTQsIDQ1LCA2NywgMjIxLCAxMTQsIDIyNCwgMjM2LCAxMTUsIDE0LCA0MiwgMjQ1LCAKKyAgICAxNTQsIDIyOSwgMjI5LCAxNCwgNDUsIDI0NSwgMTU0LCAyMjksIDIyOSwgMjIwLCA1MywgMjI4LCA5MiwgNjUsIDI0NywgCisgICAgMTMwLCAyMjgsIDkyLCA2NSwgMjU0LCAxMDQsIDI0NCwgMjIyLCAyNTAsIDIyMiwgNjUsIDI1MCwgMTk5LCAyNDQsIDIyMiwgCisgICAgMjUwLCAyMjIsIDY1LCA0NSwgNzYsIDIsIDM0LCAyMjksIDQzLCAxNzEsIDEyNywgNjUsIDE3MSwgOTAsIDY1LCAxNzEsIDQyLCAKKyAgICA0NSwgNjUsIDE3MSwgMTI3LCA1MSwgNjUsIDE3MSwgOTAsIDUxLCA2NSwgMTcxLCA0MiwgNDUsIDUxLCA2NSwgMTcxLCAxMjcsIAorICAgIDc2LCAyNDUsIDk3LCAxMzUsIDE3MSwgOTAsIDc2LCAyNDUsIDk3LCAxMzUsIDE3MSwgMTI3LCA1MSwgNzYsIDI0NSwgOTcsIAorICAgIDEzNSwgMTcxLCA5MCwgNTEsIDc2LCAyNDUsIDk3LCAxMzUsIDE3MSwgOTAsIDIyMywgMjIzLCA2NSwgNDMsIDQ0LCAyNTIsIAorICAgIDQ3LCA0MywgNDQsIDI0OCwgMTQyLCA0MywgNDQsIDI0OCwgMTQsIDQzLCA0NCwgMjQ4LCAxNDEsIDQzLCA0NCwgMjQ3LCAKKyAgICAyMDYsIDQzLCA0NCwgMjQ4LCA3NywgNDMsIDQ0LCAyNDgsIDEzLCA0MywgNDQsIDI0OCwgMTQwLCA0MywgNDQsIDI0NywgCisgICAgMTc0LCA0MywgNDQsIDI0OCwgNDUsIDQzLCA0NCwgMjQ3LCAyMzcsIDQzLCA0NCwgMjQ4LCAxMDgsIDQzLCA0NCwgMjQ3LCAKKyAgICAyMDUsIDQzLCA0NCwgMjQ4LCA3NiwgNDMsIDQ0LCAyNDgsIDEyLCA0MywgNDQsIDI0OCwgMTM5LCA0MywgNDQsIDI0NywgCisgICAgMTU4LCA0MywgNDQsIDI0OCwgMjksIDQzLCA0NCwgMjQ3LCAyMjEsIDQzLCA0NCwgMjQ4LCA5MiwgNDMsIDQ0LCAyNDcsIAorICAgIDE4OSwgNDMsIDQ0LCAyNDgsIDYwLCA0MywgNDQsIDI0NywgMjUyLCA0MywgNDQsIDI0OCwgMTIzLCA0MywgNDQsIDI0NywgCisgICAgMTczLCA0MywgNDQsIDI0OCwgNDQsIDQzLCA0NCwgMjQ3LCAyMzYsIDQzLCA0NCwgMjQ4LCAxMDcsIDQzLCA0NCwgMjQ3LCAKKyAgICAyMDQsIDQzLCA0NCwgMjQ4LCA3NSwgNDMsIDQ0LCAyNDgsIDExLCA0MywgNDQsIDI0OCwgMTM4LCA0MywgNDQsIDI0NywgCisgICAgMTUwLCA0MywgNDQsIDI0OCwgMjEsIDQzLCA0NCwgMjQ3LCAyMTMsIDQzLCA0NCwgMjQ4LCA4NCwgNDMsIDQ0LCAyNDcsIAorICAgIDE4MSwgNDMsIDQ0LCAyNDgsIDUyLCA0MywgNDQsIDI0NywgMjQ0LCA0MywgNDQsIDI0OCwgMTE1LCA0MywgNDQsIDI0NywgCisgICAgMTY1LCA0MywgNDQsIDI0OCwgMzYsIDQzLCA0NCwgMjQ3LCAyMjgsIDQzLCA0NCwgMjQ4LCA5OSwgNDMsIDQ0LCAyNDcsIAorICAgIDE5NiwgNDMsIDQ0LCAyNDgsIDY3LCA0MywgNDQsIDI0OCwgMywgNDMsIDQ0LCAyNDgsIDEzMCwgNDMsIDQ0LCAyNDcsIDE1NywgCisgICAgNDMsIDQ0LCAyNDgsIDI4LCA0MywgNDQsIDI0NywgMjIwLCA0MywgNDQsIDI0OCwgOTEsIDQzLCA0NCwgMjQ3LCAxODgsIDQzLCAKKyAgICA0NCwgMjQ4LCA1OSwgNDMsIDQ0LCAyNDcsIDI1MSwgNDMsIDQ0LCAyNDgsIDEyMiwgNDMsIDQ0LCAyNDcsIDE3MiwgNDMsIAorICAgIDQ0LCAyNDgsIDQzLCA0MywgNDQsIDI0NywgMjM1LCA0MywgNDQsIDI0OCwgMTA2LCA0MywgNDQsIDI0NywgMjAzLCA0MywgCisgICAgNDQsIDI0OCwgNzQsIDQzLCA0NCwgMjQ4LCAxMCwgNDMsIDQ0LCAyNDgsIDEzNywgNDMsIDQ0LCAyNDcsIDE0NiwgNDMsIDQ0LCAKKyAgICAyNDgsIDE3LCA0MywgNDQsIDI0NywgMjA5LCA0MywgNDQsIDI0OCwgODAsIDQzLCA0NCwgMjQ3LCAxNzcsIDQzLCA0NCwgCisgICAgMjQ4LCA0OCwgNDMsIDQ0LCAyNDcsIDI0MCwgNDMsIDQ0LCAyNDgsIDExMSwgNDMsIDQ0LCAyNDcsIDE2MSwgNDMsIDQ0LCAKKyAgICAyNDgsIDMyLCA0MywgNDQsIDI0NywgMjI0LCA0MywgNDQsIDI0OCwgOTUsIDQzLCA0NCwgMjQ3LCAxOTIsIDQzLCA0NCwgCisgICAgMjQ4LCA2MywgNDMsIDQ0LCAyNDcsIDI1NSwgNDMsIDQ0LCAyNDgsIDEyNiwgNDMsIDQ0LCAyNDcsIDE1MywgNDMsIDQ0LCAKKyAgICAyNDgsIDI0LCA0MywgNDQsIDI0NywgMjE2LCA0MywgNDQsIDI0OCwgODcsIDQzLCA0NCwgMjQ3LCAxODQsIDQzLCA0NCwgCisgICAgMjQ4LCA1NSwgNDMsIDQ0LCAyNDcsIDI0NywgNDMsIDQ0LCAyNDgsIDExOCwgNDMsIDQ0LCAyNDcsIDE2OCwgNDMsIDQ0LCAKKyAgICAyNDgsIDM5LCA0MywgNDQsIDI0NywgMjMxLCA0MywgNDQsIDI0OCwgMTAyLCA0MywgNDQsIDI0NywgMTk5LCA0MywgNDQsIAorICAgIDI0OCwgNzAsIDQzLCA0NCwgMjQ4LCA2LCA0MywgNDQsIDI0OCwgMTMzLCA0MywgNDQsIDI0NywgMTQ5LCA0MywgNDQsIDI0OCwgCisgICAgMjAsIDQzLCA0NCwgMjQ3LCAyMTIsIDQzLCA0NCwgMjQ4LCA4MywgNDMsIDQ0LCAyNDcsIDE4MCwgNDMsIDQ0LCAyNDgsIDUxLCAKKyAgICA0MywgNDQsIDI0NywgMjQzLCA0MywgNDQsIDI0OCwgMTE0LCA0MywgNDQsIDI0NywgMTY0LCA0MywgNDQsIDI0OCwgMzUsIAorICAgIDQzLCA0NCwgMjQ3LCAyMjcsIDQzLCA0NCwgMjQ4LCA5OCwgNDMsIDQ0LCAyNDcsIDE5NSwgNDMsIDQ0LCAyNDgsIDY2LCA0MywgCisgICAgNDQsIDI0OCwgMiwgNDMsIDQ0LCAyNDgsIDEyOSwgNDMsIDQ0LCAyNDcsIDE1NiwgNDMsIDQ0LCAyNDgsIDI3LCA0MywgNDQsIAorICAgIDI0NywgMjE5LCA0MywgNDQsIDI0OCwgOTAsIDQzLCA0NCwgMjQ3LCAxODcsIDQzLCA0NCwgMjQ4LCA1OCwgNDMsIDQ0LCAKKyAgICAyNDcsIDI1MCwgNDMsIDQ0LCAyNDgsIDEyMSwgNDMsIDQ0LCAyNDcsIDE3MSwgNDMsIDQ0LCAyNDgsIDQyLCA0MywgNDQsIAorICAgIDI0NywgMjM0LCA0MywgNDQsIDI0OCwgMTA1LCA0MywgNDQsIDI0NywgMjAyLCA0MywgNDQsIDI0OCwgNzMsIDQzLCA0NCwgCisgICAgMjQ4LCA5LCA0MywgNDQsIDI0OCwgMTM2LCA0MywgNDQsIDI0NywgMTQ0LCA0MywgNDQsIDI0OCwgMTUsIDQzLCA0NCwgMjQ3LCAKKyAgICAyMDcsIDQzLCA0NCwgMjQ4LCA3OCwgNDMsIDQ0LCAyNDcsIDE3NSwgNDMsIDQ0LCAyNDgsIDQ2LCA0MywgNDQsIDI0NywgCisgICAgMjM4LCA0MywgNDQsIDI0OCwgMTA5LCA0MywgNDQsIDI0NywgMTU5LCA0MywgNDQsIDI0OCwgMzAsIDQzLCA0NCwgMjQ3LCAKKyAgICAyMjIsIDQzLCA0NCwgMjQ4LCA5MywgNDMsIDQ0LCAyNDcsIDE5MCwgNDMsIDQ0LCAyNDgsIDYxLCA0MywgNDQsIDI0NywgCisgICAgMjUzLCA0MywgNDQsIDI0OCwgMTI0LCA0MywgNDQsIDI0NywgMTUxLCA0MywgNDQsIDI0OCwgMjIsIDQzLCA0NCwgMjQ3LCAKKyAgICAyMTQsIDQzLCA0NCwgMjQ4LCA4NSwgNDMsIDQ0LCAyNDcsIDE4MiwgNDMsIDQ0LCAyNDgsIDUzLCA0MywgNDQsIDI0NywgCisgICAgMjQ1LCA0MywgNDQsIDI0OCwgMTE2LCA0MywgNDQsIDI0NywgMTY2LCA0MywgNDQsIDI0OCwgMzcsIDQzLCA0NCwgMjQ3LCAKKyAgICAyMjksIDQzLCA0NCwgMjQ4LCAxMDAsIDQzLCA0NCwgMjQ3LCAxOTcsIDQzLCA0NCwgMjQ4LCA2OCwgNDMsIDQ0LCAyNDgsIDQsIAorICAgIDQzLCA0NCwgMjQ4LCAxMzEsIDQzLCA0NCwgMjQ3LCAxNDcsIDQzLCA0NCwgMjQ4LCAxOCwgNDMsIDQ0LCAyNDcsIDIxMCwgCisgICAgNDMsIDQ0LCAyNDgsIDgxLCA0MywgNDQsIDI0NywgMTc4LCA0MywgNDQsIDI0OCwgNDksIDQzLCA0NCwgMjQ3LCAyNDEsIDQzLCAKKyAgICA0NCwgMjQ4LCAxMTIsIDQzLCA0NCwgMjQ3LCAxNjIsIDQzLCA0NCwgMjQ4LCAzMywgNDMsIDQ0LCAyNDcsIDIyNSwgNDMsIAorICAgIDQ0LCAyNDgsIDk2LCA0MywgNDQsIDI0NywgMTkzLCA0MywgNDQsIDI0OCwgNjQsIDQzLCA0NCwgMjQ4LCAwLCA0MywgNDQsIAorICAgIDI0OCwgMTI3LCA0MywgNDQsIDI0NywgMTU0LCA0MywgNDQsIDI0OCwgMjUsIDQzLCA0NCwgMjQ3LCAyMTcsIDQzLCA0NCwgCisgICAgMjQ4LCA4OCwgNDMsIDQ0LCAyNDcsIDE4NSwgNDMsIDQ0LCAyNDgsIDU2LCA0MywgNDQsIDI0NywgMjQ4LCA0MywgNDQsIAorICAgIDI0OCwgMTE5LCA0MywgNDQsIDI0NywgMTY5LCA0MywgNDQsIDI0OCwgNDAsIDQzLCA0NCwgMjQ3LCAyMzIsIDQzLCA0NCwgCisgICAgMjQ4LCAxMDMsIDQzLCA0NCwgMjQ3LCAyMDAsIDQzLCA0NCwgMjQ4LCA3MSwgNDMsIDQ0LCAyNDgsIDcsIDQzLCA0NCwgMjQ4LCAKKyAgICAxMzQsIDQzLCA0NCwgMjQ3LCAxNDUsIDQzLCA0NCwgMjQ4LCAxNiwgNDMsIDQ0LCAyNDcsIDIwOCwgNDMsIDQ0LCAyNDgsIAorICAgIDc5LCA0MywgNDQsIDI0NywgMTc2LCA0MywgNDQsIDI0OCwgNDcsIDQzLCA0NCwgMjQ3LCAyMzksIDQzLCA0NCwgMjQ4LCAKKyAgICAxMTAsIDQzLCA0NCwgMjQ3LCAxNjAsIDQzLCA0NCwgMjQ4LCAzMSwgNDMsIDQ0LCAyNDcsIDIyMywgNDMsIDQ0LCAyNDgsIAorICAgIDk0LCA0MywgNDQsIDI0NywgMTkxLCA0MywgNDQsIDI0OCwgNjIsIDQzLCA0NCwgMjQ3LCAyNTQsIDQzLCA0NCwgMjQ4LCAKKyAgICAxMjUsIDQzLCA0NCwgMjQ3LCAxNTIsIDQzLCA0NCwgMjQ4LCAyMywgNDMsIDQ0LCAyNDcsIDIxNSwgNDMsIDQ0LCAyNDgsIAorICAgIDg2LCA0MywgNDQsIDI0NywgMTgzLCA0MywgNDQsIDI0OCwgNTQsIDQzLCA0NCwgMjQ3LCAyNDYsIDQzLCA0NCwgMjQ4LCAKKyAgICAxMTcsIDQzLCA0NCwgMjQ3LCAxNjcsIDQzLCA0NCwgMjQ4LCAzOCwgNDMsIDQ0LCAyNDcsIDIzMCwgNDMsIDQ0LCAyNDgsIAorICAgIDEwMSwgNDMsIDQ0LCAyNDcsIDE5OCwgNDMsIDQ0LCAyNDgsIDY5LCA0MywgNDQsIDI0OCwgNSwgNDMsIDQ0LCAyNDgsIDEzMiwgCisgICAgNDMsIDQ0LCAyNDcsIDE0OCwgNDMsIDQ0LCAyNDgsIDE5LCA0MywgNDQsIDI0NywgMjExLCA0MywgNDQsIDI0OCwgODIsIDQzLCAKKyAgICA0NCwgMjQ3LCAxNzksIDQzLCA0NCwgMjQ4LCA1MCwgNDMsIDQ0LCAyNDcsIDI0MiwgNDMsIDQ0LCAyNDgsIDExMywgNDMsIAorICAgIDQ0LCAyNDcsIDE2MywgNDMsIDQ0LCAyNDgsIDM0LCA0MywgNDQsIDI0NywgMjI2LCA0MywgNDQsIDI0OCwgOTcsIDQzLCA0NCwgCisgICAgMjQ3LCAxOTQsIDQzLCA0NCwgMjQ4LCA2NSwgNDMsIDQ0LCAyNDgsIDEsIDQzLCA0NCwgMjQ4LCAxMjgsIDQzLCA0NCwgMjQ3LCAKKyAgICAxNTUsIDQzLCA0NCwgMjQ4LCAyNiwgNDMsIDQ0LCAyNDcsIDIxOCwgNDMsIDQ0LCAyNDgsIDg5LCA0MywgNDQsIDI0NywgCisgICAgMTg2LCA0MywgNDQsIDI0OCwgNTcsIDQzLCA0NCwgMjQ3LCAyNDksIDQzLCA0NCwgMjQ4LCAxMjAsIDQzLCA0NCwgMjQ3LCAKKyAgICAxNzAsIDQzLCA0NCwgMjQ4LCA0MSwgNDMsIDQ0LCAyNDcsIDIzMywgNDMsIDQ0LCAyNDgsIDEwNCwgNDMsIDQ0LCAyNDcsIAorICAgIDIwMSwgNDMsIDQ0LCAyNDgsIDcyLCA0MywgNDQsIDI0OCwgOCwgNDMsIDQ0LCAyNDgsIDEzNSwgOTAsIDIyMCwgMjA2LCA3NiwgCisgICAgMiwgNjksIDkyLCA5MCwgMjIwLCAyMDYsIDc2LCAyLCA1MSwgNjksIDkyLCAxMjcsIDUxLCA3NiwgMiwgNjksIDkyLCA5MCwgCisgICAgNTEsIDc2LCAyLCA2OSwgOTIsIDQyLCA0NSwgNTEsIDc2LCAyLCA2OSwgOTIsIDkwLCAyMjAsIDIwNiwgNzYsIDI0NSwgOTcsIAorICAgIDEzNSwgMTI3LCA1MSwgNzYsIDI0NSwgOTcsIDEzNSwgOTAsIDUxLCA3NiwgMjQ1LCA5NywgMTM1LCAyNDcsIDEzMCwgNzYsIAorICAgIDIsIDE4NiwgOTIsIDIyMCwgNTMsIDc2LCAyLCAxODYsIDkyLCAyMjAsIDUzLCAyMjEsIDc4LCA2NSwgMjQ3LCAxMzAsIDIyMSwgCisgICAgNzgsIDY1LCAxMjcsIDUxLCAyNDksIDE0NywgNjUsIDkwLCA1MSwgMjQ5LCAxNDcsIDY1LCAxMjcsIDIyMSwgNzgsIDI0OSwgCisgICAgMTQ3LCA2NSwgOTAsIDIyMSwgNzgsIDI0OSwgMTQ3LCA2NSwgOTAsIDIyMCwgMjA2LCAyMjEsIDc4LCAyNDksIDE0NywgNjUsIAorICAgIDkwLCA3NiwgMiwgMjQ3LCAxNDMsIDIyMywgMTQ2LCAyMjAsIDUzLCA3NiwgMTk5LCAxMzUsIDI0NywgMTMwLCA3NiwgMTk5LCAKKyAgICAxMzUsIDkwLCA3NiwgMiwgMjIyLCAxMzYsIDIsIDY5LCA5MiwgOTAsIDc2LCAyLCAyMjIsIDEzNiwgMiwgNTEsIDY5LCA5MiwgCisgICAgOTAsIDIyMCwgMjA2LCA3NiwgMiwgMjIyLCAxMzUsIDkwLCAyMjAsIDIwNiwgNzYsIDIsIDIyMiwgMTM2LCAyLCA2OSwgOTIsIAorICAgIDkwLCAyMjAsIDIwNiwgNzYsIDIsIDIyMiwgMTM2LCAyLCA1MSwgNjksIDkyLCAxMjcsIDI1NCwgMjIsIDkwLCAyNTQsIDIyLCAKKyAgICAxMjcsIDUxLCAyNTQsIDIyLCA5MCwgNTEsIDI1NCwgMjIsIDEyNywgNzYsIDE5OSwgODQsIDI0OSwgNCwgOTAsIDc2LCAxOTksIAorICAgIDg0LCAyNDksIDQsIDEyNywgNzYsIDI0NSwgOTcsIDI1MiwgMjAxLCAxOTksIDg0LCAyNDksIDQsIDkwLCA3NiwgMjQ1LCA5NywgCisgICAgMjUyLCAyMDEsIDE5OSwgODQsIDI0OSwgNCwgMjMxLCAxODcsIDIxOCwgMjE3LCAyNSwgMjI0LCA2LCAyNDcsIDUsIDY1LCAKKyAgICAyMzEsIDE4NywgMjQ3LCA1LCAyNSwgMjI0LCA2LCAyMTgsIDIxNywgNjUsIDIzMSwgMTg3LCAyMTgsIDIxNywgNzYsIDIsIAorICAgIDk2LCAyMzEsIDE4NywgMjQ3LCA1LCA3NiwgMiwgOTYsIDIyNCwgNiwgMjQ3LCA1LCA3NiwgMiwgOTYsIDIyNCwgNiwgMjE4LCAKKyAgICAyMTcsIDc2LCAyLCA5NiwgMjMxLCAxODcsIDIxOCwgMjE3LCA3NiwgMjUsIDIzMSwgMTg3LCAyNDcsIDUsIDY1LCAyMzEsIAorICAgIDE4NywgMjQ3LCA1LCA3NiwgMjUsIDIyNCwgNiwgMjQ3LCA1LCA2NSwgMjI0LCA2LCAyNDcsIDUsIDc2LCAyNSwgMjI0LCA2LCAKKyAgICAyMTgsIDIxNywgNjUsIDIyNCwgNiwgMjE4LCAyMTcsIDc2LCAyNSwgMjMxLCAxODcsIDIxOCwgMjE3LCA2NSwgMjI3LCA4OCwgCisgICAgMjQ5LCAxMSwgMjUwLCA5NSwgMjQ1LCAyNDcsIDI0OSwgMTAsIDI0NSwgMjQ3LCAyNDksIDExLCAyNTAsIDk1LCAyMjcsIDg4LCAKKyAgICAyNDksIDEwLCAyMjQsIDYsIDI0NywgNSwgNzYsIDI1MCwgOTUsIDIzMSwgMTg3LCAyNDcsIDUsIDY1LCAyMzEsIDE4NywgCisgICAgMjQ3LCA1LCA3NiwgMjUwLCA5NSwgMjI0LCA2LCAyNDcsIDUsIDY1LCAyNDUsIDI0NywgMjQ5LCAxMSwgMjUwLCA5NSwgMjMxLCAKKyAgICAxODcsIDI0NywgNSwgNjUsIDIyNywgODgsIDI0OSwgMTEsIDI1MCwgOTUsIDIyNCwgNiwgMjQ3LCA1LCA2NSwgMjMxLCAxODcsIAorICAgIDI0NywgNSwgNzYsIDI1MCwgOTUsIDIzMSwgMTg3LCAyMTgsIDIxNywgNjUsIDIzMSwgMTg3LCAyMTgsIDIxNywgNzYsIDI1MCwgCisgICAgOTUsIDIzMSwgMTg3LCAyNDcsIDUsIDY1LCAyMTgsIDIzNywgNzYsIDIyOSwgMjgsIDI0OCwgMjA4LCAyMjcsIDEwOSwgNzYsIAorICAgIDIyOSwgMjgsIDkwLCAyMjIsIDE1LCAyNTAsIDcyLCAyMjAsIDUyLCA3NiwgMjI5LCAyOCwgOTAsIDIyMiwgMTUsIDI1MCwgCisgICAgNzIsIDI0NywgMTI5LCA3NiwgMjI5LCAyOCwgMjQ3LCAxMzAsIDIyMiwgMTUsIDI1MCwgNzIsIDIzNSwgMTA3LCA3NiwgMjI5LCAKKyAgICAyOCwgMjQ3LCAxMzAsIDIyMiwgMTUsIDI1MCwgNzIsIDIyNywgMTAwLCAyMjcsIDEwMywgMjU0LCA1MiwgMjUwLCAxOTksIAorICAgIDY1LCAyMzUsIDExMCwgMjU0LCA1MiwgMjU0LCAxMDQsIDY1LCAyMjEsIDEyMCwgMjU0LCA1MiwgMjU0LCAxMDQsIDY1LCAKKyAgICAyNTIsIDI5LCAyNTQsIDUyLCAyNTQsIDEwNCwgNjUsIDIyMSwgMTIwLCAyNTQsIDUyLCAyNTAsIDE5OSwgNzYsIDIsIDIzMywgCisgICAgMTU0LCAyMjEsIDEyMCwgMjU0LCA1MiwgMjU0LCAxMDQsIDc2LCAyLCAyMjksIDQzLCAyMzQsIDIzNywgNDUsIDIyNSwgNjksIAorICAgIDI1MCwgMTk5LCA2NSwgMjM0LCAyMzcsIDQyLCAyMjUsIDY5LCAyNTQsIDEwNCwgNjUsIDI1NCwgMTA0LCAyNTAsIDE5NywgCisgICAgMjUwLCAyMjIsIDY1LCAyNTAsIDE5OSwgMjUwLCAxOTcsIDI1MCwgMjIyLCA2NSwgOTAsIDc2LCA3MSwgMjI0LCAxOTIsIAorICAgIDEyNywgNjUsIDEyNywgNzYsIDcxLCAyMjQsIDE5MiwgOTAsIDY1LCAyMjQsIDE5MiwgOTAsIDc2LCA3MSwgMTI3LCA2NSwgCisgICAgOTAsIDc2LCAyLCA4OCwgNTYsIDEyNywgNzYsIDIsIDg4LCA1NiwgOTAsIDc2LCAyMjEsIDIyNSwgMjE4LCAxNTEsIDQyLCAKKyAgICA0NSwgNzYsIDIyMSwgMjI1LCAzLCAyNTAsIDIyMSwgMjIwLCA1MywgMjIwLCAyMDYsIDc2LCAyNDUsIDk3LCAzLCAyNTAsIAorICAgIDIyMSwgNDIsIDE5MiwgMTA4LCA0NSwgMTkyLCAxMTMsIDI0MywgMTc2LCA0MiwgMTkyLCAxMTMsIDQ1LCAxOTIsIDEwOCwgCisgICAgMjQzLCAxNzYsIDEwOCwgMTkyLCA0NSwgMTEzLCAxOTIsIDQyLCAyNDMsIDE3NiwgMTA4LCAxOTIsIDQyLCAxMTMsIDE5MiwgCisgICAgNDUsIDI0MywgMTc2LCA0MiwgMTkyLCAxMDgsIDQ1LCAxOTIsIDEwOCwgMjQzLCAxNzYsIDEwOCwgMTkyLCA0NSwgMTEzLCAKKyAgICAxOTIsIDQ1LCAyNDMsIDE3NiwgNDIsIDE5MiwgMTEzLCA0NSwgMTkyLCAxMTMsIDI0MywgMTc2LCAxMDgsIDE5MiwgNDIsIAorICAgIDExMywgMTkyLCA0MiwgMjQzLCAxNzYsIDEyNywgMjQzLCAxNzcsIDIsIDE5MiwgMTA4LCAxOTksIDEzNSwgOTAsIDI0MywgCisgICAgMTc3LCAyLCAxOTIsIDEwOCwgMTk5LCAxMzUsIDIyMCwgNTMsIDI0MywgMTc3LCAyLCAxOTIsIDQ1LCAxOTksIDEzNSwgMjQ3LCAKKyAgICAxMzAsIDI0MywgMTc3LCAyLCAxOTIsIDQ1LCAxOTksIDEzNSwgMTI3LCAyNDMsIDE3NywgMiwgMTkyLCAxMTMsIDE5OSwgCisgICAgMTM1LCA5MCwgMjQzLCAxNzcsIDIsIDE5MiwgMTEzLCAxOTksIDEzNSwgMjIwLCA1MywgMjQzLCAxNzcsIDIsIDE5MiwgNDIsIAorICAgIDE5OSwgMTM1LCAyNDcsIDEzMCwgMjQzLCAxNzcsIDIsIDE5MiwgNDIsIDE5OSwgMTM1LCAxMjcsIDI0MywgMTc3LCAyLCAKKyAgICAxOTIsIDEwOCwgMjQ1LCA5NywgMTM1LCA5MCwgMjQzLCAxNzcsIDIsIDE5MiwgMTA4LCAyNDUsIDk3LCAxMzUsIDIyMCwgNTMsIAorICAgIDI0MywgMTc3LCAyLCAxOTIsIDQ1LCAyNDUsIDk3LCAxMzUsIDI0NywgMTMwLCAyNDMsIDE3NywgMiwgMTkyLCA0NSwgMjQ1LCAKKyAgICA5NywgMTM1LCAxMjcsIDI0MywgMTc3LCAyLCAxOTIsIDExMywgMjQ1LCA5NywgMTM1LCA5MCwgMjQzLCAxNzcsIDIsIDE5MiwgCisgICAgMTEzLCAyNDUsIDk3LCAxMzUsIDIyMCwgNTMsIDI0MywgMTc3LCAyLCAxOTIsIDQyLCAyNDUsIDk3LCAxMzUsIDI0NywgMTMwLCAKKyAgICAyNDMsIDE3NywgMiwgMTkyLCA0MiwgMjQ1LCA5NywgMTM1LCAxMjcsIDI0MywgMTc3LCAyLCAxOTIsIDEwOCwgNzEsIDEyNywgCisgICAgMjQzLCAxNzcsIDIsIDE5MiwgMjQ3LCAxMzIsIDIyMCwgNTMsIDI0MywgMTc3LCAyLCAxOTIsIDQyLCAyNTIsIDEwNiwgMjIwLCAKKyAgICA1MywgMjQzLCAxNzcsIDIsIDE5MiwgMjI3LCAxMDksIDkwLCAyNDMsIDE3NywgMiwgMTkyLCAxMDgsIDcxLCA5MCwgMjQzLCAKKyAgICAxNzcsIDIsIDE5MiwgMjQ3LCAxMzIsIDI0NywgMTMwLCAyNDMsIDE3NywgMiwgMTkyLCA0MiwgMjUyLCAxMDYsIDI0NywgCisgICAgMTMwLCAyNDMsIDE3NywgMiwgMTkyLCAyMjcsIDEwOSwgMTI3LCAyNDMsIDE3NywgMiwgMTkyLCAxMDgsIDcxLCA5MCwgMjQzLCAKKyAgICAxNzcsIDIsIDE5MiwgMjIwLCA2MywgMTI3LCAyNDMsIDE3NywgMiwgMTkyLCAxMTMsIDcxLCA5MCwgMjQzLCAxNzcsIDIsIAorICAgIDE5MiwgMjQ3LCAxMzIsIDkwLCAyNDMsIDE3NywgMiwgMTkyLCAxMDgsIDcxLCAxMjcsIDI0MywgMTc3LCAyLCAxOTIsIDIyMCwgCisgICAgNjMsIDkwLCAyNDMsIDE3NywgMiwgMTkyLCAxMTMsIDcxLCAxMjcsIDI0MywgMTc3LCAyLCAxOTIsIDI0NywgMTMyLCAxMjcsIAorICAgIDI0MywgMTc3LCAyLCAxOTIsIDEwOCwgNzEsIDE3MSwgMjQ5LCAxNDYsIDEyNywgMjQzLCAxNzcsIDIsIDE5MiwgMTEzLCAKKyAgICAyNTIsIDExOCwgMTcxLCAyNDksIDE0NiwgOTAsIDI0MywgMTc3LCAyLCAxOTIsIDEwOCwgNzEsIDE3MSwgMjQ5LCAxNDYsIAorICAgIDkwLCAyNDMsIDE3NywgMiwgMTkyLCAxMTMsIDI1MiwgMTE4LCAxNzEsIDI0OSwgMTQ2LCAyMjAsIDUzLCAyNDMsIDE3NywgMiwgCisgICAgMTkyLCA0MiwgMjUyLCAxMDYsIDI0NywgMTMwLCAyNDMsIDE3NywgMiwgMTkyLCAyMjcsIDEwOSwgMjQ3LCAxMzAsIDI0MywgCisgICAgMTc3LCAyLCAxOTIsIDQyLCAyNTIsIDEwNiwgMjIwLCA1MywgMjQzLCAxNzcsIDIsIDE5MiwgMjI3LCAxMDksIDQ1LCA1MSwgCisgICAgNzYsIDIsIDIyNywgNTUsIDI0MywgMTU5LCAyNDYsIDE1NCwgNSwgNzEsIDkwLCA2NSwgMjIxLCAxODAsIDIzMCwgMTEzLCAKKyAgICA3MSwgOTAsIDY1LCAxMjcsIDc2LCA3MSwgMjIxLCAxODAsIDIzMCwgMTEyLCA5MCwgNzYsIDcxLCAyMjEsIDE4MCwgMjMwLCAKKyAgICAxMTIsIDkwLCA3NiwgNzEsIDI1NCwgMTUxLCAxMTQsIDEwMSwgMjM1LCA4NywgNzEsIDEyNywgNjUsIDEyNywgNzYsIDIyMSwgCisgICAgMjI1LCAyMzUsIDg2LCAyNDQsIDMwLCA3MSwgOTAsIDY1LCAyMjMsIDkzLCA3MSwgOTAsIDY1LCAxMjcsIDc2LCAyMjEsIAorICAgIDIyNSwgMjIzLCA5MiwgMjIzLCA1OCwgNzEsIDEyNywgNjUsIDQyLCAyNDUsIDE3NywgMjIyLCAxMzUsIDQ1LCAyNDUsIDE3NywgCisgICAgMjIyLCAxMzUsIDEwOCwgMjQ1LCAxNzcsIDIyMiwgMTM1LCAxMTMsIDI0NSwgMTc3LCAyMjIsIDEzNSwgMjIxLCA3OCwgNjksIAorICAgIDI1MiwgMjAxLCAyNDksIDY3LCAyMTcsIDE1OCwgMTY1LCAyMjMsIDIzNCwgMjE3LCAxNTgsIDE2NSwgMjIwLCAxOTgsIDI1MCwgCisgICAgMTc1LCA0MiwgNjcsIDI1MCwgNzksIDExNSwgNDUsIDY3LCAyNTAsIDc5LCAxMTUsIDQyLCA2NywgMjI5LCAyMjksIDQ1LCAKKyAgICA2NywgMjI5LCAyMjksIDIxNywgMTU4LCAxNjUsIDQyLCAyMzcsIDIzNywgMTE1LCAyMTcsIDE1OCwgMTY1LCA0NSwgMjM3LCAKKyAgICAyMzcsIDExNSwgMjE3LCAxNTgsIDE2NSwgNDIsIDI1MiwgNzEsIDExNSwgMjE3LCAxNTgsIDE2NSwgNDUsIDI1MiwgNzEsIAorICAgIDExNSwgNDIsIDQwLCAyNTIsIDE4LCAyLCAyMjAsIDgxLCA0NSwgNDAsIDI1MiwgMTgsIDIsIDIyMCwgODEsIDQyLCA0MCwgCisgICAgMjUyLCAxOCwgMiwgMjIxLCAyMDMsIDIzNywgMjI0LCAyMjEsIDEyMCwgMjUwLCAxMjMsIDQ1LCA0MCwgMjUyLCAxOCwgMiwgCisgICAgMjIxLCAyMDMsIDIzNywgMjI0LCAyNTIsIDI5LCAyNTAsIDEyMywgNDIsIDQwLCAyNTIsIDE4LCAyLCAyMjEsIDIwMywgMjM3LCAKKyAgICAyMjQsIDI1MiwgMjksIDI1MCwgMTIzLCA0NSwgNDAsIDI1MiwgMTgsIDIsIDIyMSwgMjAzLCAyMzcsIDIyNCwgMjIxLCAxMjAsIAorICAgIDI1MCwgMTIzLCA0MiwgMjU0LCAxMjAsIDI1MiwgMTgsIDIsIDI0OCwgMTQ1LCA0NSwgMjU0LCAxMjAsIDI1MiwgMTgsIDIsIAorICAgIDI0OCwgMTQ1LCA0MiwgMjU0LCA1MiwgMjM1LCA4NywgMTE1LCA0NSwgMjU0LCA1MiwgMjQ0LCAzMCwgMTE1LCA1MSwgNDIsIAorICAgIDI1NCwgNTIsIDI0NCwgMzAsIDExNSwgNTEsIDQ1LCAyNTQsIDUyLCAyMzUsIDg3LCAxMTUsIDQyLCA4NCwgMjIxLCAxMTQsIAorICAgIDIyNCwgMjM2LCAxMTUsIDQ1LCA4NCwgMjIxLCAxMTQsIDIyNCwgMjM2LCAxMTUsIDI0NywgMTQzLCAyNDUsIDIxNCwgNjksIAorICAgIDIxNywgMzMsIDIzNSwgNDMsIDIzNCwgMjIsIDI1NCwgMTIwLCAyMzAsIDExNCwgMjM1LCAxMTUsIDQ1LCAyNTQsIDEyMCwgCisgICAgMjE5LCAxNzcsIDIsIDIyMywgMjI3LCAyMzQsIDIyLCA0NSwgMjU0LCAxMjAsIDIsIDI0OCwgMTQ1LCAyNTQsIDEyMCwgMiwgCisgICAgMjI2LCAyMzUsIDIzNywgMTkwLCAyNTQsIDI0OCwgMjU0LCAxMTksIDIyMywgMjQ1LCAyNTQsIDEyMCwgMjMwLCAxMTQsIAorICAgIDIzNSwgMTE1LCAyMjMsIDI0NSwgMjU0LCAxMjAsIDIzMCwgMTE0LCAyMjAsIDYzLCAyMTUsIDI1NCwgMTE5LCAyMTAsIDI1NCwgCisgICAgMTE5LCAyNTQsIDEyMCwgMiwgMjIwLCA4MSwgMjEwLCAyNTQsIDEyMCwgMiwgMjIwLCA4MSwgMjMwLCAxNzcsIDI1NCwgMTIwLCAKKyAgICAyMzAsIDExNCwgMjIwLCA2MywgMjMwLCAxNzcsIDI1NCwgMTIwLCAyMzAsIDExNCwgMjQ3LCAxMzIsIDIzNCwgMjIsIDI1NCwgCisgICAgMTIwLCAyLCAyMzAsIDExOSwgMjU0LCAzMiwgMjQ2LCAxODcsIDIzNywgMjI0LCA3NiwgMjI5LCAyOCwgMTA4LCAyNSwgMjI3LCAKKyAgICAxMDksIDIzNCwgMjIsIDI1NCwgMTIwLCAyLCAyMzAsIDExOSwgMjU0LCAzMiwgMjQ2LCAxODcsIDIzNywgMjI0LCA3NiwgCisgICAgMjI5LCAyOCwgMTA4LCAyNSwgMjM1LCAxMTUsIDIzNCwgMjIsIDI1NCwgMTIwLCAyLCAyMzAsIDExOSwgMjU0LCAzMiwgMjQ2LCAKKyAgICAxODcsIDIzNywgMjI0LCA3NiwgMjI5LCAyOCwgMTEzLCAyNSwgMjI3LCAxMDksIDIzNCwgMjIsIDI1NCwgMTIwLCAyLCAyMzAsIAorICAgIDExOSwgMjU0LCAzMiwgMjQ2LCAxODcsIDIzNywgMjI0LCA3NiwgMjI5LCAyOCwgMTEzLCAyNSwgMjM1LCAxMTUsIDIzNCwgCisgICAgMjIsIDI1NCwgMTIwLCAyLCAyMzAsIDExOSwgMjU0LCAzMiwgMjQ2LCAxODcsIDIzNywgMjI0LCA3NiwgMjI5LCAyOCwgNDUsIAorICAgIDI1LCAyMjAsIDYzLCAyMzQsIDIyLCAyNTQsIDEyMCwgMiwgMjMwLCAxMTksIDI1NCwgMzIsIDI0NiwgMTg3LCAyMzcsIDIyNCwgCisgICAgNzYsIDIyOSwgMjgsIDQyLCAyNSwgMjIwLCA2MywgMjM0LCAyMiwgMjU0LCAxMjAsIDIsIDIzMCwgMTE5LCAyNTQsIDMyLCAKKyAgICAyNDYsIDE4NywgMjM3LCAyMjQsIDc2LCAyMjksIDI4LCA0NSwgMjUsIDI0NywgMTMyLCAyMzQsIDIyLCAyNTQsIDEyMCwgMiwgCisgICAgMjMwLCAxMTksIDI1NCwgMzIsIDI0NiwgMTg3LCAyMzcsIDIyNCwgNzYsIDIyOSwgMjgsIDQyLCAyNSwgMjQ3LCAxMzIsIAorICAgIDIxMCwgMjQ2LCAxOTksIDIyNSwgNDUsIDI0NiwgMTk5LCAyMjUsIDQ2LCAyLCAyMzAsIDc3LCAyNDYsIDE5OSwgMjI1LCA0NiwgCisgICAgMiwgMywgMjUwLCAyMjIsIDUwLCAyNDYsIDE5OSwgMjI1LCA0NiwgMiwgNDUsIDc2LCA1MCwgMjQ2LCAxOTksIDIyNSwgNDYsIAorICAgIDIsIDQyLCA3NiwgNTAsIDI1MCwgMjIyLCAyLCAxODYsIDEzNSwgMzQsIDY5LCAxMzUsIDM0LCAyMjksIDIzMywgMzQsIDIyNywgCisgICAgMTYwLCAyMjQsIDE3LCAzNCwgMjI5LCAxNjAsIDI1MCwgMjIyLCAyNDgsIDE5MiwgMjUxLCAyMTMsIDE4NiwgMjUyLCAyMDEsIAorICAgIDI1LCAyMjEsIDEyMCwgMTQ0LCAyNDgsIDE5MiwgMjUxLCAyMTMsIDY5LCAxMzUsIDI1MCwgMjIyLCAyLCAyMjMsIDYwLCAKKyAgICAyMTgsIDE1MSwgMzQsIDI1NCwgMTAzLCAyNDgsIDE4OCwgNTUsIDEwOCwgNzYsIDIyMSwgMjI1LCAyNTAsIDIyMSwgMzQsIAorICAgIDY3LCAyNTEsIDI0MSwgMzQsIDI1MSwgMjQxLCAzNCwgMjM1LCA4NiwgMzQsIDI0NCwgMjksIDI1MCwgMjIyLCAyLCAzLCAKKyAgICAyNTAsIDIyMiwgMTk5LCAyMjIsIDIzLCAyMjcsIDEwOSwgMjUwLCAyMjIsIDIsIDEyNCwgMTg2LCAyMjMsIDEwOCwgMTk5LCAKKyAgICAyMjIsIDIzLCAyMjcsIDEwOSwgMjA0LCAyMjcsIDg4LCAyNDksIDExLCAyMjQsIDU1LCAyMDQsIDI0NSwgMjQ3LCAyNDksIAorICAgIDExLCAyMjQsIDU1LCAyMDQsIDI1MywgMjUxLCAyMDQsIDMsIDI1MCwgMjIxLCAyMDQsIDIyMywgMjI3LCAxMjQsIDIzNywgCisgICAgNTYsIDIyMywgMjI1LCAyMjEsIDkxLCAyLCA2MSwgNTAsIDIyMSwgOTEsIDIsIDIyMCwgODEsIDIyNiwgMjM1LCAyMzcsIAorICAgIDIyNCwgMjIxLCA5MCwgMjIxLCA5MSwgMiwgMjI1LCA1MiwgMjUzLCAyNDUsIDI1MiwgMjgsIDQ1LCAyMjEsIDkxLCA3MSwgCisgICAgNDIsIDIyMSwgOTAsIDQyLCAyMjEsIDkxLCAyNTIsIDEwNiwgNjksIDEzNSwgNjksIDI1MiwgMjAxLCAyNTIsIDEwNiwgNDUsIAorICAgIDIyMSwgOTAsIDI1MiwgMjMsIDIsIDQyLCAxNDQsIDI1MiwgNTMsIDI1MiwgMjMsIDIsIDQ1LCAxNDQsIDI1MiwgNTMsIDg0LCAKKyAgICAyNTIsIDIyLCAyNywgMiwgNDIsIDE0NCwgMjUyLCA1MywgMjcsIDIsIDQ1LCAxNDQsIDI1MiwgNTMsIDY3LCAyNDIsIDE4MywgCisgICAgODQsIDI0MiwgMTgzLCA0MiwgMjE4LCAxOTgsIDI0NSwgMjE0LCA0NSwgMjE4LCAxOTgsIDI0NSwgMjE0LCA0MiwgNTEsIAorICAgIDIxOCwgMTk4LCAyNDUsIDIxNCwgNDUsIDUxLCAyMTgsIDE5OCwgMjQ1LCAyMTQsIDIzNywgMjE4LCAyMzcsIDIwNywgMjIxLCAKKyAgICAyMDEsIDEwNCwgMjM3LCAyMDcsIDIzNywgMjA4LCAyMzIsIDEzOCwgMiwgNjksIDEzNSwgMjQ3LCAxMzcsIDIzMywgODcsIAorICAgIDQwLCAyLCAyNTAsIDEzNSwgMjMwLCA4MSwgMjM3LCAyMTYsIDI1NCwgMTMsIDIyNCwgMTY2LCAyMjgsIDIyOSwgMjQ2LCAKKyAgICAxNTQsIDUsIDI1LCAyMjQsIDU3LCAyMjksIDIzMywgMjQ2LCAxNTQsIDUsIDI1LCAyMjQsIDU3LCAyMjksIDIzNCwgMiwgCisgICAgMjIxLCAxODAsIDUwLCAyNDIsIDU5LCAxOTksIDI1LCAyMjQsIDU3LCAyMjksIDIzMywgMjQ0LCA3NSwgMjIzLCAxNTUsIAorICAgIDIyMiwgMTIsIDI0NywgMTMxLCAyMjEsIDkxLCAyLCA0MiwgMTQ0LCAyNTIsIDUzLCAyNDcsIDEzMSwgMjIxLCA5MSwgMiwgCisgICAgNDUsIDE0NCwgMjUyLCA1MywgODQsIDI0OSwgNSwgMiwgMTEzLCA2NSwgODQsIDIzNCwgMjM0LCA2NywgMjUwLCAyMjIsIDIsIAorICAgIDExMywgNjUsIDg0LCAyNTAsIDIyMiwgMiwgMTEzLCA2NSwgMjQ2LCAxNDEsIDY3LCAyMjMsIDIyNywgMjQ2LCAxNDEsIDg0LCAKKyAgICAyMjMsIDIyNywgMjQ2LCAxNDEsIDY3LCAyNDksIDQsIDI0NiwgMTQxLCA4NCwgMjQ5LCA0LCAyNDYsIDE0MSwgNjcsIDI1MCwgCisgICAgMjIxLCAyNDYsIDE0MSwgODQsIDI1MCwgMjIxLCAyMjcsIDE1LCAyMjcsIDE2MCwgMjI0LCAxOCwgMjMwLCAxMTIsIDIyNCwgCisgICAgMTgsIDIsIDIzMCwgNzcsIDIyNywgMTYwLCAyMjQsIDE4LCAyLCAxODYsIDkyLCAyNTIsIDc2LCAyMjQsIDE3LCAyNTIsIDc2LCAKKyAgICAyMjcsIDE2MCwgMjI0LCAxNywgNTEsIDIyOSwgNDMsIDIyMSwgNzgsIDIyOSwgNDMsIDIzNSwgMTEyLCAyNTAsIDczLCAyNTQsIAorICAgIDEyMCwgMTE1LCAyMjcsIDEwNiwgMjUwLCA3MywgMjU0LCAxMjAsIDExNSwgMjIxLCAxNzEsIDIzMywgMTUyLCAyMzMsIDMzLCAKKyAgICAzNCwgNjEsIDIzMCwgMTEyLCAyMzMsIDMzLCAzNCwgODgsIDIzMCwgMTEyLCAyMzMsIDMzLCAzNCwgMjcsIDIzMCwgMTEyLCAKKyAgICAyMzMsIDMzLCAyMjAsIDc1LCAyMzAsIDExMywgMiwgMjQ4LCAxNDUsIDIzMywgMzMsIDIyMCwgNzUsIDIzMCwgMTEzLCAyLCAKKyAgICAyMjksIDQzLCAyMzMsIDMzLCA0MCwgMjM3LCAxNzUsIDIzMCwgMTEyLCAyMzMsIDMzLCA0MCwgMjIwLCA3NSwgMjMwLCAxMTIsIAorICAgIDEyNCwgMjM1LCA3LCAyNSwgMjMwLCAxMTIsIDEyNCwgMjM1LCA3LCAxNTYsIDIzMCwgMTEyLCAyMzMsIDMzLCAyNywgMjMwLCAKKyAgICAxMTIsIDIzMywgMTMxLCAxMjQsIDIyMywgNzQsIDIyMywgNzIsIDIsIDIzNywgMTg2LCAyMjgsIDkyLCAyMzcsIDE4NywgCisgICAgMjMwLCAxMTIsIDI0NSwgMTgxLCAyMjksIDIyNSwgMjM3LCAxODYsIDIzNywgMTg3LCAyLCA1MSwgOTIsIDIzNywgMTg3LCAKKyAgICAyNTMsIDIxNywgMiwgMjI0LCA1NSwgMjUwLCAyMTgsIDI0NSwgODcsIDI1NCwgMTA0LCAyMzcsIDE4NCwgMjM1LCA0NCwgCisgICAgMjM3LCAxODUsIDIsIDIyNywgMjA3LCAyMjksIDIxMiwgMjU0LCAyOSwgMjI5LCAyNCwgMjM1LCA0NCwgMjM3LCAxODUsIDIsIAorICAgIDIyNSwgNjksIDIyOSwgMjEyLCAyNTQsIDI5LCAyMjksIDI0LCAyMzUsIDQ0LCAyMzcsIDE4NSwgMjEyLCAyMzcsIDIxOSwgCisgICAgMjIyLCAyMywgMjI5LCAyNCwgMjM3LCAxODcsIDI1NCwgMjksIDExMiwgMjI5LCAzMiwgMjMwLCAxMTIsIDIyOCwgODYsIAorICAgIDIzNywgMTg3LCAyMzAsIDExMiwgMjM3LCAxODcsIDIsIDEyNywgNzYsIDIsIDk2LCAyMzcsIDE4NywgMiwgMjcsIDU1LCAKKyAgICAyMzcsIDE4NywgMiwgMjM3LCAxNzQsIDIzNywgMTg3LCAyLCAyMjAsIDc0LCAyMzcsIDE4NywgMiwgMjMwLCA3NywgMjM3LCAKKyAgICAxODcsIDIsIDIyMCwgODEsIDIzNywgNTcsIDIzNSwgMTQ2LCA0MiwgMjIxLCA5MSwgMjMwLCAxMTIsIDIxNywgMTU4LCAxNjUsIAorICAgIDIyNiwgMTA5LCAyNTAsIDE1OSwgMjE3LCAxNTgsIDE2NSwgMjI2LCAxMDksIDIyOSwgNjksIDIxNywgMTU4LCAxNjUsIDIyNiwgCisgICAgMTA5LCAyMjgsIDIyNiwgODgsIDUsIDIsIDMsIDI1MCwgMjIyLCA1MCwgODgsIDUsIDIsIDI1MCwgMjE3LCAyNTUsIDEsIDUwLCAKKyAgICA4OCwgNSwgMiwgMjIxLCAxODAsIDUwLCA4OCwgNSwgMiwgNjEsIDU2LCA4OCwgNSwgMiwgMjIxLCAxODAsIDU2LCA4OCwgNSwgCisgICAgMiwgMjIzLCA5NCwgMTAzLCA4OCwgNSwgMiwgODQsIDIyMSwgOTAsIDIzMywgMTU1LCA1LCAyLCAyNTAsIDE2OSwgNTAsIAorICAgIDIzMywgMTU1LCA1LCAyLCA2MSwgNTYsIDIzMywgMTU1LCA1LCAyLCAyNDUsIDI0NywgMjQ4LCAxNDMsIDIzMywgMTU1LCA1LCAKKyAgICAyLCAyMjcsIDg4LCAyNDgsIDE0MywgODgsIDUsIDIzNywgMjI0LCA0MiwgMTQ0LCAyNTAsIDIyMSwgODgsIDUsIDIzNywgCisgICAgMjI0LCA0NSwgMTQ0LCAyNTAsIDIyMSwgMjE5LCAxNjQsIDE1NiwgMjUwLCAxMDEsIDIyOCwgMjI5LCAyMzMsIDg0LCA1LCAyLCAKKyAgICA2MSwgNTAsIDIzMywgODQsIDUsIDIsIDIyMCwgODEsIDIyNSwgNjYsIDIyOCwgMjMwLCAyLCAyNTIsIDI5LCAyNTAsIDE5NiwgCisgICAgMjI0LCA0MSwgMjI4LCAyMjksIDIzMywgODQsIDUsIDIzNywgMjI0LCA0MiwgMTQ0LCAyNTAsIDIyMSwgMjMzLCA4NCwgNSwgCisgICAgMjM3LCAyMjQsIDQ1LCAxNDQsIDI1MCwgMjIxLCAzNCwgMjMzLCA4NCwgNSwgMiwgMjUwLCAyMTcsIDI1NSwgMCwgMjMzLCAKKyAgICA4NCwgNSwgMjM3LCAyMjQsIDUxLCAyNTAsIDIyMSwgMzQsIDI0OCwgMTg4LCA1NSwgODgsIDUsIDIzNywgMjI0LCAyMjEsIAorICAgIDkwLCAyMzMsIDE1NSwgNSwgMjM3LCAyMjQsIDIyMSwgOTAsIDIzMywgODQsIDUsIDIzNywgMjI0LCAyMjEsIDkwLCAyMzcsIAorICAgIDE4MSwgMjI4LCAyMjksIDIyNywgMTAxLCAyMzcsIDE4MSwgMjI4LCAyMjksIDIxNywgMTU4LCAxNjUsIDIyNywgMTkxLCAKKyAgICAyNTAsIDE1OSwgMjU0LCAxMzksIDE1NiwgMjUwLCAxMjgsIDIzNywgMTc1LCAyLCAyNDgsIDE0NSwgMjIwLCA3NSwgMiwgCisgICAgMjMzLCAxNTUsIDU1LCAyMjAsIDc1LCAyLCAyMzAsIDc3LCAyMzcsIDE3NSwgMiwgMjMwLCA3NywgMjM3LCAxNzUsIDIsIAorICAgIDIzNSwgNywgMjU0LCAxMjYsIDIyMCwgNzUsIDIsIDIzNSwgNywgMjMwLCAxMDUsIDIyMCwgNzUsIDcxLCAyMzcsIDE3NCwgCisgICAgMjM3LCAxNzUsIDcxLCAyMjAsIDc0LCAyMjAsIDc1LCA3MSwgMjUyLCAyMDEsIDcxLCAyMzcsIDE3NCwgMjM3LCAxNzUsIDcxLCAKKyAgICAyNTIsIDIwMSwgNzEsIDIyMCwgNzQsIDIyMCwgNzUsIDI1MiwgMTA2LCAyNSwgMjM3LCA1NiwgMiwgMjIwLCA3NCwgMjM3LCAKKyAgICAxNzUsIDI1MiwgMTA2LCAyNSwgMjM3LCA1NiwgMiwgMjM3LCAxNzQsIDI1MCwgMTk3LCAyMjAsIDc1LCAyLCAyMjUsIDUxLCAKKyAgICAyNTAsIDE5NywgMjM3LCAxNzUsIDIsIDIyNSwgNTEsIDUxLCA0MCwgMjM3LCAxNzQsIDUxLCA0MCwgMjIwLCA3NCwgMjUwLCAKKyAgICAxOTcsIDIyMCwgNzUsIDIsIDIyNSwgNTIsIDI1LCAyMjQsIDQxLCAyMjgsIDIyOSwgMjM1LCA3LCAyNSwgMiwgNjEsIDUwLCAKKyAgICAyMzUsIDcsIDE1NiwgMiwgNjEsIDUwLCA1MSwgMjM1LCA3LCAyNTQsIDEyNiwgNTEsIDIzNSwgNywgMjMwLCAxMDUsIDEyNCwgCisgICAgMjM3LCAxNzYsIDIzNSwgNywgMjU0LCAxMjYsIDEyNCwgMjM3LCAxNzYsIDIzNSwgNywgMjMwLCAxMDUsIDIyNCwgNDgsIAorICAgIDIzNSwgMTQ2LCAyMzAsIDEwNSwgMjI0LCA0OCwgMjM1LCAxNDYsIDI1NCwgMTI2LCAyMzUsIDcsIDE1NiwgMjMwLCA3NSwgCisgICAgMjM1LCA3LCAyNTQsIDEyNiwgMjM1LCA3LCAyNSwgMiwgMjMzLCAxOTMsIDIyMywgMTQ2LCAyMzUsIDcsIDE1NiwgMiwgMjMzLCAKKyAgICAxOTMsIDIyMywgMTQ2LCAyMzUsIDcsIDI1LCAyLCAxODYsIDI0OSwgMTQ2LCAyMzUsIDcsIDE1NiwgMiwgMTg2LCAyNDksIAorICAgIDE0NiwgMjM1LCA3LCAyNSwgMiwgNTEsIDIzMCwgNzcsIDIzNSwgNywgMjUsIDIsIDIyMCwgODEsIDIzNSwgNywgMjUsIDIsIAorICAgIDUxLCAyMjAsIDgxLCAzLCAyMTksIDE2MSwgMiwgMjIwLCA4MSwgMjM1LCA3LCAxNTYsIDIsIDUxLCAyMzAsIDc3LCAyMzUsIAorICAgIDcsIDE1NiwgMiwgNTEsIDIyMCwgODEsIDIxNywgMTU4LCAxNjUsIDI0OCwgMTU0LCAyNTQsIDk5LCAyMTcsIDE1OCwgMTY1LCAKKyAgICAyMjcsIDIzNCwgMjU0LCA5OSwgMjQ2LCAxNTQsIDUsIDIsIDYxLCA1NiwgMjQyLCA1OSwgMiwgNjEsIDUwLCAyMjEsIDc4LCAKKyAgICAxODYsIDI1MiwgMjAxLCAyLCA1MSwgNjksIDkyLCAyMjEsIDc4LCAxODYsIDI1MiwgMjAxLCAyLCAyMjEsIDc4LCA2OSwgOTIsIAorICAgIDIyMSwgMTgwLCAyMzAsIDExMywgMiwgNjEsIDUwLCAyMjEsIDE4MCwgMjMwLCAxMTMsIDIsIDIyNywgODgsIDI0OCwgMTQzLCAKKyAgICAyMjQsIDExNiwgMjMzLCAxNTUsIDIyNCwgMTE1LCAyNTAsIDE1MywgMiwgNjEsIDUwLCAyNDYsIDE1NCwgMiwgMjUzLCAyNTEsIAorICAgIDI1NCwgMTUxLCAxMTQsIDE5OSwgMiwgMjUwLCAyMTcsIDI1NSwgMCwgMjU0LCA3MiwgMTE0LCAxNTYsIDExNCwgMTAxLCAKKyAgICAyNDYsIDE1NCwgNSwgNzEsIDg4LCA1NSwgODgsIDUsIDcxLCAyNDYsIDE1NCwgNTUsIDI0NiwgMTU0LCA1LCA3MSwgMjIxLCAKKyAgICAxODAsIDIzMCwgMTEyLCA1MSwgMjUwLCAxNzYsIDI0NiwgMTU1LCAxMjQsIDI1MCwgMTQ4LCAyNDYsIDE1NCwgMjI0LCAxMjYsIAorICAgIDE0OCwgMjUwLCAxNDgsIDI0NiwgMTU0LCAyMjQsIDEyNiwgMjQ2LCAxNTQsIDUsIDIsIDEyNCwgMTg4LCA3MSwgMjUsIDEyNCwgCisgICAgMTg4LCA1NiwgMjQ2LCAxNTAsIDIsIDI0NSwgMTE2LCAxODgsIDUwLCAyMzUsIDg3LCAyLCAyNTAsIDIyMiwgMjM3LCAxOTAsIAorICAgIDI0NCwgMzAsIDIsIDI1MCwgMjIyLCAyMzcsIDE5MCwgMjM1LCA4NywgMiwgMjI4LCA4MiwgMTY0LCA1MCwgMjQ0LCAzMCwgMiwgCisgICAgMjI4LCA4MiwgMTY0LCA1MCwgMjM1LCA4NywgMTU2LCAyMjQsIDU3LCAxMTQsIDEwMSwgMjQ0LCAzMCwgMTU2LCAyMjQsIDU3LCAKKyAgICAxMTQsIDEwMSwgMjM1LCA4NywgMTU2LCAyMjQsIDU3LCAxMTQsIDE5OSwgMiwgNjEsIDIzNywgMTkwLCAyNDQsIDMwLCAxNTYsIAorICAgIDIyNCwgNTcsIDExNCwgMTk5LCAyLCA2MSwgMjM3LCAxOTAsIDIzNSwgODcsIDE1NiwgMjI0LCA1NywgMTE0LCAxOTksIDIsIAorICAgIDYxLCA1MCwgMjQ0LCAzMCwgMTU2LCAyMjQsIDU3LCAxMTQsIDE5OSwgMiwgNjEsIDUwLCAyMzUsIDg3LCAxNTYsIDIyNCwgCisgICAgNTcsIDExNCwgMTk5LCAyLCA2MSwgNzEsIDIyNywgMTA5LCAyNDQsIDMwLCAxNTYsIDIyNCwgNTcsIDExNCwgMTk5LCAyLCAKKyAgICA2MSwgNzEsIDIzNSwgMTE1LCAyMzUsIDg3LCAxNTYsIDI1NCwgNzMsIDI0NCwgMzAsIDE1NiwgMjU0LCA3MywgMjM1LCA4NywgCisgICAgMjUsIDIyNCwgMTA3LCAyMTIsIDExNCwgMTAxLCAyNDQsIDMwLCAyNSwgMjI0LCAxMDcsIDIxMiwgMTE0LCAxMDEsIDIzNSwgCisgICAgODcsIDI1LCAyMTIsIDI1NCwgNzMsIDI0NCwgMzAsIDI1LCAyMTIsIDI1NCwgNzMsIDIzNSwgODcsIDcxLCAyNDcsIDEzNiwgCisgICAgMTE0LCA3MSwgMjQ0LCAyOSwgMjQ0LCAzMCwgNzEsIDI0NywgMTM2LCAxMTQsIDcxLCAyMzUsIDg2LCAyMzUsIDg3LCA3MSwgCisgICAgMjI0LCAxMTYsIDE1NiwgMjQ2LCAxNTUsIDI0NCwgMzAsIDcxLCAyMjQsIDExNiwgMTU2LCAyNDYsIDE1NSwgMjM1LCA4NywgCisgICAgNzEsIDIyNCwgMTE2LCA3MSwgMjQ0LCAyOSwgMjQ0LCAzMCwgNzEsIDIyNCwgMTE2LCA3MSwgMjM1LCA4NiwgMjM1LCA4NywgCisgICAgNzEsIDI0NCwgMzAsIDcxLCAyNDcsIDEzNiwgMjQ2LCAxNTUsIDI0NCwgMzAsIDcxLCAyMzUsIDg3LCA3MSwgMjQ3LCAxMzYsIAorICAgIDI0NiwgMTU1LCAyMzUsIDg3LCA3MSwgMjI0LCA1NywgMTE0LCA3MSwgMjQ0LCAzMCwgNzEsIDIyNCwgNTcsIDI0NiwgMTU1LCAKKyAgICAyNDQsIDMwLCA3MSwgMjI0LCA1NywgMTE0LCA3MSwgMjM1LCA4NywgNzEsIDIyNCwgNTcsIDI0NiwgMTU1LCAyMjQsIDU3LCAKKyAgICAxMTQsIDE5OSwgMTU2LCAyMzUsIDg2LCAyMjQsIDU3LCAxMTQsIDE5OSwgMTU2LCAyNDQsIDI5LCAyMjQsIDU3LCAxMTQsIAorICAgIDE5OSwgMTU2LCAyMzUsIDg3LCAyLCA2MSwgMjM3LCAxOTAsIDIyNCwgNTcsIDExNCwgMTk5LCAxNTYsIDI0NCwgMzAsIDIsIAorICAgIDYxLCAyMzcsIDE5MCwgMjQ3LCAxMzYsIDExNCwgMTk5LCAxNTYsIDIzNSwgODYsIDI0NywgMTM2LCAxMTQsIDE5OSwgMTU2LCAKKyAgICAyNDQsIDI5LCAyNDcsIDEzNiwgMjI0LCA1NywgMTE0LCAxOTksIDE1NiwgMjM1LCA4NiwgMjQ3LCAxMzYsIDIyNCwgNTcsIAorICAgIDExNCwgMTk5LCAxNTYsIDI0NCwgMjksIDIyNCwgMTE2LCAxNTYsIDIzNSwgODYsIDIyNCwgMTE2LCAxNTYsIDI0NCwgMjksIAorICAgIDIyNCwgMTE2LCA3MSwgMjM1LCA4NywgNzEsIDI0NiwgMTU0LCA1NSwgMjI0LCAxMTYsIDcxLCAyNDQsIDMwLCA3MSwgMjQ2LCAKKyAgICAxNTQsIDU1LCA1MSwgMjMyLCAxMjcsIDIzNSwgODYsIDUxLCAyMzIsIDEyNywgMjQ0LCAyOSwgNTEsIDIzMiwgMTI3LCAyMzUsIAorICAgIDg3LCAyLCAyMjAsIDgxLCAyNDQsIDMwLCAyMzAsIDc1LCAyMzUsIDg2LCAyNDQsIDMwLCAyNTIsIDEwNiwgMjM1LCA4NiwgCisgICAgMjM1LCA4NywgMjUwLCAxOTcsIDI1MSwgMjEzLCAyNTAsIDc0LCAyNDQsIDMwLCAyNTAsIDE5NywgMjUxLCAyMTMsIDI1MCwgCisgICAgNzQsIDIzNSwgODcsIDI1MCwgMTk3LCAyNTEsIDIxMywgMjUwLCA3NSwgNzEsIDIyNCwgNTcsIDI0NiwgMTU1LCAyNDQsIDMwLCAKKyAgICAyNTAsIDE5NywgMjUxLCAyMTMsIDI1MCwgNzUsIDcxLCAyMjQsIDU3LCAyNDYsIDE1NSwgMjI0LCA0MiwgMjIyLCAyNywgCisgICAgMjM1LCAxNDUsIDIyMiwgMjcsIDIyNCwgNDIsIDIyMiwgMjgsIDE1NiwgMTE0LCAxMDEsIDIzNSwgMTQ1LCAyMjIsIDI4LCAKKyAgICAxNTYsIDExNCwgMTAxLCAyNDYsIDE1NCwgNSwgMiwgMjUxLCAyMzYsIDUwLCAyMjgsIDI0NSwgNzEsIDIyNCwgMTA3LCAyNDYsIAorICAgIDE1NCwgNTUsIDIyMywgODUsIDcxLCAyMjQsIDEwNywgMjQ2LCAxNTQsIDU1LCAyMjgsIDI0NSwgNzEsIDIyNCwgMTA3LCAKKyAgICAyMTIsIDExNCwgMTAxLCAyMjMsIDg1LCA3MSwgMjI0LCAxMDcsIDIxMiwgMTE0LCAxMDEsIDIyOCwgMjQ1LCA3MSwgMjQ2LCAKKyAgICAxNTQsIDU1LCAyMjMsIDg1LCA3MSwgMjQ2LCAxNTQsIDU1LCAyMjgsIDI0NSwgNzEsIDIxMiwgMTE0LCAxMDEsIDIyMywgODUsIAorICAgIDcxLCAyMTIsIDExNCwgMTAxLCAyMjgsIDI0NSwgNzEsIDI1NCwgMTUxLCAxMTQsIDEwMSwgMjIzLCA4NSwgNzEsIDI1NCwgCisgICAgMTUxLCAxMTQsIDEwMSwgMjI4LCAyNDUsIDcxLCAyMTIsIDI1NCwgMTUxLCAxMTQsIDEwMSwgMjIzLCA4NSwgNzEsIDIxMiwgCisgICAgMjU0LCAxNTEsIDExNCwgMTAxLCA1MSwgMjI4LCAyNDQsIDUxLCAyMjMsIDg0LCAyMjMsIDkzLCAyLCAyNDgsIDE0NSwgMjIzLCAKKyAgICA1OCwgMiwgMjQ4LCAxNDUsIDIyMywgOTMsIDIsIDg4LCA1LCA1NiwgMjIzLCA1OCwgMiwgODgsIDUsIDU2LCAyMjMsIDkzLCAKKyAgICAyLCAyMzMsIDg0LCA1LCA1NiwgMjIzLCA1OCwgMiwgMjMzLCA4NCwgNSwgNTYsIDIyMywgOTMsIDExNywgMTU2LCAxMTQsIAorICAgIDE5OSwgMiwgNjEsIDUwLCAyMjMsIDU4LCAxMTcsIDE1NiwgMTE0LCAxOTksIDIsIDYxLCA1MCwgMjIzLCA5MywgMTE3LCA3MSwgCisgICAgMjQ2LCAxNTQsIDU1LCAyMjMsIDU4LCAxMTcsIDcxLCAyNDYsIDE1NCwgNTUsIDIyMywgOTMsIDExNywgNzEsIDIyMSwgMTgwLCAKKyAgICAyMzAsIDExMiwgMjIzLCA1OCwgMTE3LCA3MSwgMjIxLCAxODAsIDIzMCwgMTEyLCAyMjMsIDkzLCAxMTcsIDcxLCAyNTQsIAorICAgIDE1MSwgMTE0LCAxMDEsIDIyMywgNTgsIDExNywgNzEsIDI1NCwgMTUxLCAxMTQsIDEwMSwgMjIzLCA5MywgMTE3LCA3MSwgCisgICAgMjEyLCAxMTQsIDEwMSwgMjIzLCA1OCwgMTE3LCA3MSwgMjEyLCAxMTQsIDEwMSwgNDAsIDQyLCAyMzAsIDExOSwgODYsIAorICAgIDIzMCwgMTEyLCA0MCwgNDUsIDIzMCwgMTE5LCA4NiwgMjMwLCAxMTIsIDI1MCwgMTk3LCAyMjMsIDkyLCAyNTAsIDE5NywgCisgICAgMjIzLCA1NywgMjUwLCAxOTcsIDIyMywgOTMsIDE1NiwgMTE0LCAxMDEsIDI1MCwgMTk3LCAyMjMsIDU4LCAxNTYsIDExNCwgCisgICAgMTAxLCAyMjMsIDkzLCA3MSwgMjIzLCA1NywgMjIzLCA1OCwgNzEsIDIyMywgOTIsIDIyMywgOTMsIDcxLCAyMjMsIDkyLCAKKyAgICAyMjMsIDU4LCA3MSwgMjIzLCA1NywgMjIzLCA1OCwgMjUyLCAxMDYsIDIyMywgOTIsIDIyMywgNTgsIDI1MiwgMTA2LCAyNSwgCisgICAgMjM3LCA1NiwgMjUxLCAyMTMsIDI0OSwgMTQ3LCAyLCAyMjMsIDkyLCAyNDYsIDIxMywgMTE3LCAyMzAsIDExNCwgMjQ3LCAKKyAgICAxMjksIDIyOSwgNjMsIDIsIDIyMiwgODEsIDIyMSwgMTE5LCAyMjEsIDEwMiwgMjM3LCAxNzQsIDI0NSwgMTI1LCAyMzEsIAorICAgIDE5NiwgMjI0LCAxOTIsIDQyLCAyMjIsIDE0MywgMjI0LCAxOTIsIDExMywgMjIyLCAxNDMsIDIyNCwgMTkyLCAxMDgsIDIyMiwgCisgICAgMTQzLCAyMjksIDE2MSwgMiwgMTk4LCA2OSwgMjUyLCAyMDEsIDIyMSwgNzgsIDQ1LCAyMjAsIDIzNiwgNTEsIDY5LCAyNTIsIAorICAgIDIwMSwgNDIsIDIyMCwgMjM2LCA2OSwgMjUyLCAyMDEsIDUxLCA0MiwgMjIwLCAyMzYsIDUxLCA2OSwgMjUyLCAyMDEsIDUxLCAKKyAgICA0MiwgMjIwLCAyMzYsIDE3MSwgMjQ5LCAxNDcsIDI0NSwgOTcsIDQyLCAyMzMsIDI1NSwgMTE3LCA1MSwgMjE5LCAxNTIsIAorICAgIDIyNCwgMTkyLCAxMTMsIDIyMiwgMTQ0LCAyLCAyMzAsIDc3LCAyMjQsIDE5MiwgMTA4LCAyMjIsIDE0NCwgMiwgMjIwLCA4MSwgCisgICAgMjI0LCAxOTIsIDEwOCwgMjIyLCAxNDQsIDcxLCAyMjQsIDE5MiwgMTEzLCAyMjIsIDE0MywgNTEsIDExMywgMjIyLCAxNDMsIAorICAgIDUxLCAxMDgsIDIyMiwgMTQzLCA1MSwgMjE0LCAyMTIsIDU1LCAyMTAsIDUxLCAyMTQsIDIxMiwgNTUsIDI0OCwgMTYwLCAKKyAgICAyMTIsIDI0OCwgMTk0LCAyLCAyMTAsIDIzMiwgMTM3LCAyMjQsIDU1LCA2OSwgMjM1LCA0NCwgMiwgMjUwLCAyMjIsIDUwLCAKKyAgICA2OSwgMjM1LCA0NCwgMiwgMjUwLCAyMjIsIDU2LCAxMTMsIDIyMiwgMTQ0LCAyLCAyNTAsIDIyMiwgNTYsIDIyOSwgMjM0LCAKKyAgICAyLCAxODYsIDkyLCAyMjksIDIzNCwgMiwgMjIxLCAxODAsIDIzMCwgMTEyLCAyMjEsIDc4LCA2OSwgMjUyLCAyMDEsIDI1MiwgCisgICAgNzMsIDIyNywgMTkyLCAyMjEsIDc4LCA2OSwgMjUyLCAyMDEsIDIsIDE4NiwgOTIsIDIyMSwgNzgsIDI1MCwgMTc2LCAyMzAsIAorICAgIDExMiwgMjIxLCA3OCwgMjMyLCAxMjcsIDIzNSwgODYsIDIyMSwgNzgsIDIzMiwgMTI3LCAyNDQsIDI5LCAyNDcsIDEzNiwgCisgICAgMjI0LCA1NywgMjM1LCA4NywgMTU2LCAxMTQsIDEwMSwgMjQ3LCAxMzYsIDIyNCwgNTcsIDI0NCwgMzAsIDE1NiwgMTE0LCAKKyAgICAxMDEsIDIyMSwgNzgsIDIyNCwgMTgsIDI1MiwgNzMsIDIyNywgMTkyLCAyMzUsIDE0NiwgMjIxLCA3OCwgNjksIDI1MiwgCisgICAgMjAxLCAyMzAsIDExMiwgNTEsIDIyNCwgMTgsIDIzMCwgMTEyLCA2NywgNjksIDEzNSwgMjMzLCAzMywgNjcsIDY5LCAxMzUsIAorICAgIDIzMSwgMTg3LCAyNDcsIDUsIDY3LCA2NSwgMjMxLCAxODcsIDIxOCwgMjE3LCA2NywgNjUsIDIyNCwgNiwgMjQ3LCA1LCA2NywgCisgICAgNjUsIDIyNCwgNiwgMjE4LCAyMTcsIDY3LCA2NSwgNDIsIDQ1LCA2NywgNjUsIDEyNywgODQsIDY1LCAyMjAsIDUzLCA4NCwgCisgICAgNjUsIDI0NywgMTMwLCA4NCwgNjUsIDIzMSwgMTg3LCAyNDcsIDUsIDg0LCA2NSwgMjMxLCAxODcsIDIxOCwgMjE3LCA4NCwgCisgICAgNjUsIDIyNCwgNiwgMjQ3LCA1LCA4NCwgNjUsIDIyNCwgNiwgMjE4LCAyMTcsIDg0LCA2NSwgNDIsIDQ1LCA4NCwgNjUsIAorICAgIDEwOCwgMTEzLCA4NCwgNjUsIDkwLCA3NiwgMiwgMjIxLCAxNzAsIDI0NywgMTI5LCA5MCwgNzYsIDIsIDIyMSwgMTcwLCAKKyAgICAyMjAsIDUyLCAxMjcsIDc2LCAyLCAyMjEsIDE3MCwgMjQ3LCAxMjksIDEyNywgNzYsIDIsIDIyMSwgMTcwLCAyMjAsIDUyLCAKKyAgICA0MCwgMiwgMjIxLCAxMjAsIDE0NCwgMjUyLCA1MywgNDAsIDIsIDI1MiwgMjksIDE0NCwgMjUyLCA1MywgNDAsIDIsIDIyMCwgCisgICAgNjAsIDQ1LCAyNDksIDExLCAxNDQsIDI1MiwgNTMsIDQwLCAyLCAyMzQsIDIzNywgNDIsIDI0OSwgMTEsIDE0NCwgMjUyLCAKKyAgICA1MywgMjQ5LCA1LCAyLCA0MiwgMTQ0LCAyNTIsIDUzLCAyNDksIDUsIDIsIDQ1LCAxNDQsIDI1MiwgNTMsIDI0OSwgNSwgMiwgCisgICAgMjIxLCAxMjAsIDE0NCwgMjUyLCA1MywgMjQ5LCA1LCAyLCAyNTIsIDI5LCAxNDQsIDI1MiwgNTMsIDI0NywgMTQzLCAyMjMsIAorICAgIDIyNywgODQsIDIzNSwgMTQ2LCAyMjMsIDIyNywgNjcsIDIzNSwgMTQ2LCAyMjMsIDIyNywgODQsIDIxOSwgMTAwLCAzLCAKKyAgICAyMjMsIDIyNywgNjcsIDIxOSwgMTAwLCAzLCAyMjMsIDIyNywgODQsIDIyOSwgMTc1LCA2NywgMjI5LCAxNzUsIDY3LCAyNDMsIAorICAgIDEyNCwgODQsIDI0MywgMTI0LCAxODYsIDg0LCAyNDMsIDEyNCwgODQsIDIzNSwgMTQ2LCAyNTAsIDIyMSwgODQsIDIzNCwgCisgICAgMTgsIDI0OSwgNCwgNjcsIDIzNCwgMTgsIDI0OSwgNCwgODQsIDIzNCwgMTgsIDIzNCwgMjM0LCA2NywgMjM0LCAxOCwgMjM0LCAKKyAgICAyMzQsIDg0LCAzLCAyNDksIDQsIDg0LCAzLCAyMzQsIDIzNCwgNjcsIDMsIDIzNCwgMjM0LCA4NCwgMTg2LCAyNDYsIDIwOSwgCisgICAgNjcsIDE4NiwgMjQ2LCAyMDksIDg0LCA2OSwgMjQ2LCAyMDksIDY3LCA2OSwgMjQ2LCAyMDksIDQyLCA3NiwgMiwgMywgMjUwLCAKKyAgICAyMjEsIDE0OCwgMTI3LCAyNTQsIDE5LCA0MiwgNzYsIDIsIDM0LCAyMjksIDQzLCAxNzEsIDEyNywgMjIzLCAyMjMsIDY1LCAKKyAgICAxMjcsIDIyMCwgMjA2LCA3NiwgMiwgNjksIDkyLCAxMjcsIDIyMCwgMjA2LCA3NiwgMiwgNTEsIDY5LCA5MiwgMTI3LCAyMjAsIAorICAgIDIwNiwgNzYsIDI0NSwgOTcsIDEzNSwgMTI3LCAyMjAsIDIwNiwgMjIxLCA3OCwgMjQ5LCAxNDcsIDY1LCAxMjcsIDc2LCAyLCAKKyAgICAyNDcsIDE0MywgMjIzLCAxNDYsIDEyNywgNzYsIDIsIDIyMiwgMTM2LCAyLCA2OSwgOTIsIDEyNywgNzYsIDIsIDIyMiwgCisgICAgMTM2LCAyLCA1MSwgNjksIDkyLCAxMjcsIDIyMCwgMjA2LCA3NiwgMiwgMjIyLCAxMzUsIDEyNywgMjIwLCAyMDYsIDc2LCAyLCAKKyAgICAyMjIsIDEzNiwgMiwgNjksIDkyLCAxMjcsIDIyMCwgMjA2LCA3NiwgMiwgMjIyLCAxMzYsIDIsIDUxLCA2OSwgOTIsIDEyNywgCisgICAgNzYsIDIyMSwgMjI1LCAyMTgsIDE1MSwgMjE4LCAyMzcsIDc2LCAyMjksIDI4LCAyNDgsIDIwOCwgMjM1LCAxMTUsIDI0NiwgCisgICAgMTU0LCA1LCA3MSwgMTI3LCA2NSwgMjI3LCAxNjAsIDIyMSwgMTgwLCAyMzAsIDExMywgNzEsIDEyNywgNjUsIDEyNywgNzYsIAorICAgIDcxLCAyMjcsIDE2MCwgMjU0LCAxNTEsIDExNCwgMTAxLCA5MCwgNzYsIDIyMSwgMjI1LCAyNDQsIDI5LCA5MCwgNzYsIDIyMSwgCisgICAgMjI1LCAyMjMsIDU3LCAxMjcsIDIyOCwgOTIsIDY1LCA5MCwgMjI4LCA5MiwgNjUsIDIyNywgMTYwLCAyMjEsIDE4MCwgMjMwLCAKKyAgICAxMTMsIDcxLCA5MCwgNjUsIDkwLCA3NiwgNzEsIDIyNywgMTYwLCAyNTQsIDE1MSwgMTE0LCAxMDEsIDIyMSwgMTgwLCAyMzAsIAorICAgIDExMywgNzEsIDEyNywgNjUsIDEyNywgNzYsIDcxLCAyNTQsIDE1MSwgMTE0LCAxMDEsIDEyNywgNzYsIDcxLCAyMjcsIDE2MCwgCisgICAgMjIxLCAxODAsIDIzMCwgMTEyLCA5MCwgNzYsIDcxLCAyMjcsIDE2MCwgMjIxLCAxODAsIDIzMCwgMTEyLCA2NywgMjM0LCAKKyAgICAxOCwgMjIzLCAxNTYsIDg0LCAzLCAyMjMsIDE1NiwgNjcsIDMsIDIyMywgMTU2LCA4NCwgMjI3LCAxMDYsIDIyOSwgMTc1LCAKKyAgICA2NywgMjI3LCAxMDYsIDIyOSwgMTc1LCAxMDYsIDIzNSwgMTQ2LCAyNTAsIDIyMSwgMTA2LCAyMzAsIDc4LCAyLCAyMzAsIAorICAgIDc4LCAyMzcsIDE5MCwgMTA2LCAyNTAsIDIyMiwgMiwgMjUwLCAyMjIsIDIzNywgMTkwLCAxMDYsIDI1MCwgMjIxLCAxMDYsIAorICAgIDM0LCAyMjYsIDE0OSwgMTI1LCA2LCAxLCAyNTMsIDIwNSwgMTI1LCA2LCAxLCAyNTEsIDI0NCwgMTI1LCA2LCAxLCAyMTksIAorICAgIDE2MywgMTI1LCA2LCAxLCAyNDQsIDc2LCAxMjUsIDYsIDEsIDI0OCwgMTYyLCAxMjUsIDYsIDEsIDIxOCwgMSwgMTI1LCA2LCAKKyAgICAxLCAyMTcsIDY2LCAxMjUsIDYsIDEsIDI0NywgNzEsIDEyNSwgNiwgMSwgMjE3LCA4OSwgMTI1LCA2LCAxLCAyMzcsIDEzMCwgCisgICAgMTI1LCA2LCAxLCA2NiwgMjM3LCAxMzAsIDEyNSwgNiwgMSwgNzIsIDEyNSwgNiwgMSwgMjQ4LCAxODAsIDEyNSwgNiwgMSwgCisgICAgMjM2LCAyMzgsIDEyNSwgNiwgMSwgMjM1LCAxOSwgMTI1LCA2LCAxLCAyMzMsIDM3LCAxMjUsIDYsIDEsIDIzMiwgMjA4LCAKKyAgICAxMjUsIDYsIDEsIDIzMCwgMTI5LCAxMjUsIDYsIDEsIDIyOSwgMjYsIDEyNSwgNiwgMSwgMjI3LCA4NywgMTI1LCA2LCAxLCAKKyAgICAyMjQsIDQ3LCAxMjUsIDYsIDEsIDIyMCwgMjI2LCAxMjUsIDYsIDEsIDIyMCwgOTgsIDEyNSwgNiwgMSwgMjQ1LCA5OSwgCisgICAgMTI1LCA2LCAxLCAyNDMsIDEzMCwgMTI1LCA2LCAxLCAyMzAsIDg3LCAxMjUsIDYsIDEsIDIyOSwgMTk4LCAxMjUsIDYsIDEsIAorICAgIDIyNCwgMTczLCAxMjUsIDYsIDEsIDIyMSwgMzksIDEyNSwgNiwgMSwgMjUxLCAzLCAxMjUsIDYsIDEsIDIyNSwgMjUsIDEyNSwgCisgICAgNiwgMSwgMjE4LCA3LCAxMjUsIDYsIDEsIDIxOCwgOSwgMTI1LCA2LCAxLCAyMTgsIDM0LCAxMjUsIDYsIDEsIDIyMywgMjQzLCAKKyAgICAxNTUsIDEyNSwgNiwgMSwgMjE3LCAyMDAsIDEyNSwgNiwgMSwgMywgMjE3LCAxNzgsIDEyNSwgNiwgMSwgMywgMjE3LCAxNzksIAorICAgIDIsIDIyMiwgMTM1LCAxMjUsIDYsIDEsIDIxNywgMjMxLCAxMjUsIDYsIDEsIDIzNywgMTYxLCAzLCAyMTcsIDE3OCwgMTI1LCAKKyAgICA2LCAxLCAyNTIsIDc2LCAyMTcsIDE3OCwgMTI1LCA2LCAxLCAyMzcsIDE2MSwgMjUyLCA3NiwgMjE3LCAxNzgsIDEyNSwgNiwgCisgICAgMSwgMjQ1LCAxNzEsIDEyNSwgNiwgMSwgMjM3LCAxMjgsIDEyNSwgNiwgMSwgMjI0LCAxNzIsIDEyNSwgNiwgMSwgMjIxLCAKKyAgICA3MCwgNjAsIDEyNSwgNiwgMSwgMjM1LCAxMzcsIDIzMywgMzcsIDEyNSwgMywgMSwgMjUzLCAyMDUsIDEyNSwgMywgMSwgCisgICAgMjUxLCAyNDQsIDEyNSwgMywgMSwgMjE5LCAxNjMsIDEyNSwgMywgMSwgMjQ0LCA3NiwgMTI1LCAzLCAxLCAyNDgsIDE2MiwgCisgICAgMTI1LCAzLCAxLCAyMTgsIDEsIDEyNSwgMywgMSwgMjE3LCA2NiwgMTI1LCAzLCAxLCAyNDcsIDcxLCAxMjUsIDMsIDEsIAorICAgIDIxNywgODksIDEyNSwgMywgMSwgMjM3LCAxMzAsIDEyNSwgMywgMSwgNjYsIDIzNywgMTMwLCAxMjUsIDMsIDEsIDcyLCAKKyAgICAxMjUsIDMsIDEsIDI0OCwgMTgwLCAxMjUsIDMsIDEsIDIzNiwgMjM4LCAxMjUsIDMsIDEsIDIzNSwgMTksIDEyNSwgMywgMSwgCisgICAgMjMzLCAzNywgMTI1LCAzLCAxLCAyMzIsIDIwOCwgMTI1LCAzLCAxLCAyMzAsIDEyOSwgMTI1LCAzLCAxLCAyMjksIDI2LCAKKyAgICAxMjUsIDMsIDEsIDIyNywgODcsIDEyNSwgMywgMSwgMjI0LCA0NywgMTI1LCAzLCAxLCAyMjAsIDIyNiwgMTI1LCAzLCAxLCAKKyAgICAyMjAsIDk4LCAxMjUsIDMsIDEsIDI0NSwgOTksIDEyNSwgMywgMSwgMjQzLCAxMzAsIDEyNSwgMywgMSwgMjMwLCA4NywgCisgICAgMTI1LCAzLCAxLCAyMjksIDE5OCwgMTI1LCAzLCAxLCAyMjQsIDE3MywgMTI1LCAzLCAxLCAyMjEsIDM5LCAxMjUsIDMsIDEsIAorICAgIDI1MSwgMywgMTI1LCAzLCAxLCAyMjUsIDI1LCAxMjUsIDMsIDEsIDIxOCwgNywgMTI1LCAzLCAxLCAyMTgsIDksIDEyNSwgMywgCisgICAgMSwgMjE4LCAzNCwgMTI1LCAzLCAxLCAyMjMsIDI0MywgMTU1LCAxMjUsIDMsIDEsIDIxNywgMjAwLCAxMjUsIDMsIDEsIDMsIAorICAgIDIxNywgMTc4LCAxMjUsIDMsIDEsIDMsIDIxNywgMTc5LCAyLCAyMjIsIDEzNSwgMTI1LCAzLCAxLCAyMTcsIDIzMSwgMTI1LCAKKyAgICAzLCAxLCAyMzcsIDE2MSwgMywgMjE3LCAxNzgsIDEyNSwgMywgMSwgMjUyLCA3NiwgMjE3LCAxNzgsIDEyNSwgMywgMSwgCisgICAgMjM3LCAxNjEsIDI1MiwgNzYsIDIxNywgMTc4LCAxMjUsIDMsIDEsIDI0NSwgMTcxLCAxMjUsIDMsIDEsIDIzNywgMTI4LCAKKyAgICAxMjUsIDMsIDEsIDIyNCwgMTcyLCAxMjUsIDMsIDEsIDIyMSwgNzAsIDYwLCAxMjUsIDMsIDEsIDIzNSwgMTM3LCAyMzMsIAorICAgIDM3LCA3LCA2LCAxLCAyMzUsIDIwMiwgMiwgNTEsIDEzNSwgNywgMywgMSwgMjM1LCAyMDIsIDIsIDUxLCAxMzUsIDcsIDYsIAorICAgIDEsIDIzNSwgMjAyLCAyLCAyMzMsIDE5MywgMjIxLCAxNzksIDcsIDYsIDEsIDIzMCwgNjAsIDIsIDkyLCA3LCA2LCAxLCAKKyAgICAyMjgsIDM5LCAyLCAyMjIsIDEzNSwgNywgMywgMSwgMTEyLCAyLCA5MiwgNywgMywgMSwgMjIyLCAyMDIsIDIsIDI0OSwgMTEsIAorICAgIDkyLCA3LCA2LCAxLCAyNDMsIDIyNiwgMiwgMjQ5LCA0OCwgNywgMywgMSwgMjQzLCAyMjYsIDIsIDI0OSwgNDgsIDcsIDYsIAorICAgIDEsIDIzNywgMTgsIDIsIDI0OSwgNDgsIDcsIDMsIDEsIDIzNywgMTgsIDIsIDI0OSwgNDgsIDcsIDYsIDEsIDIxNywgMTU4LCAKKyAgICAyLCAyNDksIDQ4LCA3LCAzLCAxLCAyMTcsIDE1OCwgMiwgMjQ5LCA0OCwgNywgNiwgMSwgMjU0LCAxNDYsIDcsIDYsIDEsIAorICAgIDIzNCwgMTg3LCAyLCA5NiwgNywgNiwgMSwgMjE1LCA2MCwgNywgNiwgMSwgMjE1LCAyNTQsIDE0NiwgNywgMywgMSwgMjIwLCAKKyAgICAxMSwgMiwgNDUsIDk2LCA3LCA2LCAxLCAyMTksIDQxLCAyLCA5NiwgNywgMywgMSwgMjE5LCA0MSwgMiwgOTYsIDcsIDMsIDEsIAorICAgIDIyMCwgMTEsIDIsIDI1MCwgODAsIDcsIDYsIDEsIDE0NCwgMjQzLCAyMjUsIDcsIDMsIDEsIDE0NCwgMjQzLCAyMjUsIDcsIAorICAgIDMsIDEsIDIyMiwgMTMzLCAyMjksIDEyOSwgNywgMywgMSwgMTc4LCAyLCAyMzEsIDE4MywgNywgMywgMSwgMjE1LCAyMjgsIAorICAgIDM5LCAyLCAyMjIsIDEzNSwgNywgMywgMSwgMTQyLCAyLCAxMDksIDIyNywgOTQsIDIzNywgMTkwLCA3LCAxLCAzLCA2LCAKKyAgICAyMTUsIDczLCA3LCAyMjMsIDk0LCAzLCAxLCAyMzcsIDEyNiwgNTgsIDEsIDYsIDIxNiwgMjE2LCA3LCA2LCAxLCAyMjYsIAorICAgIDIzNSwgMiwgMjIzLCAzMywgMjIyLCAxMzUsIDcsIDYsIDEsIDIxNywgMTU4LCAyLCAyMjMsIDMzLCAyMjIsIDEzNSwgNzUsIAorICAgIDYsIDEsIDI1NCwgMTYzLCA3NSwgMywgMSwgMjU0LCAxNjMsIDc1LCA2LCAxLCAyMTksIDkyLCA3NSwgMywgMSwgMjE5LCA5MiwgCisgICAgNzUsIDYsIDEsIDI0NCwgMjMxLCA3NSwgMywgMSwgMjQ0LCAyMzEsIDc1LCA2LCAxLCAyNDksIDE3OSwgNzUsIDMsIDEsIAorICAgIDI0OSwgMTc5LCA3NSwgNiwgMSwgMjQ2LCAyMzYsIDc1LCAzLCAxLCAyNDYsIDIzNiwgNzUsIDYsIDEsIDIyNCwgMTEsIDc1LCAKKyAgICAzLCAxLCAyMjQsIDExLCA3NSwgNiwgMSwgMjE3LCA5OSwgNzUsIDMsIDEsIDIxNywgOTksIDc1LCA2LCAxLCAyNDMsIDE3MSwgCisgICAgNzUsIDMsIDEsIDI0MywgMTcxLCA3NSwgNiwgMSwgMjIyLCA0LCA3NSwgMywgMSwgMjIyLCA0LCA3NSwgNiwgMSwgMjQyLCAKKyAgICA3MCwgNzUsIDMsIDEsIDI0MiwgNzAsIDc1LCA2LCAxLCAyMzYsIDIyNiwgNzUsIDMsIDEsIDIzNiwgMjI2LCA3NSwgNiwgMSwgCisgICAgMjM1LCAxMzUsIDc1LCAzLCAxLCAyMzUsIDEzNSwgNzUsIDYsIDEsIDIzMywgMTk2LCA3NSwgMywgMSwgMjMzLCAxOTYsIDc1LCAKKyAgICA2LCAxLCAyMzIsIDYyLCA3NSwgMywgMSwgMjMyLCA2MiwgNzUsIDYsIDEsIDIzNiwgMTEsIDc1LCAzLCAxLCAyMzYsIDExLCAKKyAgICA3NSwgNiwgMSwgNzQsIDc1LCAzLCAxLCA3NCwgNzUsIDYsIDEsIDIyOSwgMTA4LCA3NSwgMywgMSwgMjI5LCAxMDgsIDc1LCAKKyAgICA2LCAxLCAyMjcsIDc1LCA3NSwgMywgMSwgMjI3LCA3NSwgNzUsIDYsIDEsIDIyNCwgMTE4LCA3NSwgMywgMSwgMjI0LCAxMTgsIAorICAgIDc1LCA2LCAxLCAyMjIsIDEwNSwgNzUsIDMsIDEsIDIyMiwgMTA1LCA3NSwgNiwgMSwgMjIwLCAxMjMsIDc1LCAzLCAxLCAKKyAgICAyMjAsIDEyMywgNzUsIDYsIDEsIDI0NSwgMjAzLCA3NSwgMywgMSwgMjQ1LCAyMDMsIDc1LCA2LCAxLCAyMzYsIDEzMCwgNzUsIAorICAgIDMsIDEsIDIzNiwgMTMwLCA3NSwgNiwgMSwgMjI4LCAyMTIsIDc1LCAzLCAxLCAyMjgsIDIxMiwgNzUsIDYsIDEsIDIzMCwgCisgICAgMTIzLCA3NSwgMywgMSwgMjMwLCAxMjMsIDc1LCA2LCAxLCAyNDksIDksIDI1NCwgMTY4LCA3NSwgMywgMSwgMjQ5LCA5LCAKKyAgICAyNTQsIDE2OCwgNzUsIDYsIDEsIDQ4LCA3NSwgMjU0LCAxOTEsIDc1LCAzLCAxLCA0OCwgNzUsIDI1NCwgMTkxLCA3NSwgNiwgCisgICAgMSwgMjUwLCA5MywgMjQ2LCAyMzYsIDc1LCAzLCAxLCAyNTAsIDkzLCAyNDYsIDIzNiwgNzUsIDYsIDEsIDI0OSwgOSwgMjM2LCAKKyAgICAyMjYsIDc1LCAzLCAxLCAyNDksIDksIDIzNiwgMjI2LCA3NSwgNiwgMSwgMjQ5LCA5LCAyMzIsIDYyLCA3NSwgMywgMSwgCisgICAgMjQ5LCA5LCAyMzIsIDYyLCA3NSwgNiwgMSwgMjUwLCA5MywgMjMyLCA2MiwgNzUsIDMsIDEsIDI1MCwgOTMsIDIzMiwgNjIsIAorICAgIDc1LCA2LCAxLCA0OCwgNzUsIDIzMCwgMTIzLCA3NSwgMywgMSwgNDgsIDc1LCAyMzAsIDEyMywgNzUsIDYsIDEsIDIyNiwgCisgICAgMTQyLCA3NSwgMywgMSwgMjI2LCAxNDIsIDc1LCA2LCAxLCAyNTAsIDk4LCAyMjQsIDIzOCwgNzUsIDMsIDEsIDI1MCwgOTgsIAorICAgIDIyNCwgMjM4LCA3NSwgNiwgMSwgNDgsIDc1LCAyMjQsIDIzOCwgNzUsIDMsIDEsIDQ4LCA3NSwgMjI0LCAyMzgsIDc1LCA2LCAKKyAgICAxLCA0OCwgNzUsIDI0NiwgMTMzLCA3NSwgMywgMSwgNDgsIDc1LCAyNDYsIDEzMywgNzUsIDYsIDEsIDI1NCwgMTc4LCAyMzYsIAorICAgIDEzNSwgNzUsIDMsIDEsIDI1NCwgMTc4LCAyMzYsIDEzNSwgNzUsIDYsIDEsIDI0OSwgOSwgMjQyLCAyNDIsIDc1LCAzLCAxLCAKKyAgICAyNDksIDksIDI0MiwgMjQyLCA3NSwgNiwgMSwgNDgsIDc1LCAyNDIsIDI0MiwgNzUsIDMsIDEsIDQ4LCA3NSwgMjQyLCAyNDIsIAorICAgIDc1LCA2LCAxLCA0OCwgNzUsIDE1NSwgNzUsIDMsIDEsIDQ4LCA3NSwgMTU1LCA3NSwgNiwgMSwgMjM1LCAyMDEsIDE1NSwgCisgICAgNzUsIDMsIDEsIDIzNSwgMjAxLCAxNTUsIDc1LCA2LCAxLCA0OCwgNzUsIDI0MywgMTQ1LCA3NSwgMywgMSwgNDgsIDc1LCAKKyAgICAyNDMsIDE0NSwgNzUsIDYsIDEsIDQ4LCA3NSwgMjQzLCAxNzMsIDc1LCAzLCAxLCA0OCwgNzUsIDI0MywgMTczLCA3NSwgNiwgCisgICAgMSwgNDgsIDc1LCAyNDQsIDIyNiwgNzUsIDMsIDEsIDQ4LCA3NSwgMjQ0LCAyMjYsIDc1LCA2LCAxLCA0OCwgNzUsIDI0OCwgCisgICAgMTgzLCA3NSwgMywgMSwgNDgsIDc1LCAyNDgsIDE4MywgNzUsIDYsIDEsIDQ4LCA3NSwgMjI0LCAyMTEsIDc1LCAzLCAxLCAKKyAgICA0OCwgNzUsIDIyNCwgMjExLCA3NSwgNiwgMSwgNDgsIDIzMSwgMTE1LCAyMjQsIDIxMSwgNzUsIDMsIDEsIDQ4LCAyMzEsIAorICAgIDExNSwgMjI0LCAyMTEsIDc1LCA2LCAxLCA0OCwgMjMxLCAxMTUsIDIzMiwgOTIsIDc1LCAzLCAxLCA0OCwgMjMxLCAxMTUsIAorICAgIDIzMiwgOTIsIDc1LCA2LCAxLCA0OCwgMjMxLCAxMTUsIDIzMSwgNjcsIDc1LCAzLCAxLCA0OCwgMjMxLCAxMTUsIDIzMSwgCisgICAgNjcsIDc1LCA2LCAxLCA0OCwgMjMxLCAxMTUsIDIxOCwgMjM4LCA3NSwgMywgMSwgNDgsIDIzMSwgMTE1LCAyMTgsIDIzOCwgCisgICAgNzUsIDE2LCAyMzYsIDI0MywgNzUsIDE2LCAyMzMsIDE5NywgMjI3LCA3NSwgNzUsIDE2LCAyMjksIDEwOSwgMjI3LCA3NSwgCisgICAgNzUsIDE2LCAyMjMsIDE1MiwgNzUsIDE2LCAyMjIsIDEwNiwgMjI3LCA3NSwgNzUsIDE2LCAyMzYsIDEzMSwgMjI3LCA3NSwgCisgICAgNzUsIDE2LCAyMjQsIDIxMiwgMjI0LCAxMTgsIDc1LCA2LCAxLCAyNTAsIDkzLCAyMjQsIDIzOCwgNzUsIDMsIDEsIDI1MCwgCisgICAgOTMsIDIyNCwgMjM4LCA3NSwgNiwgMSwgMjUwLCA5MywgMjQ0LCAyMjYsIDc1LCAzLCAxLCAyNTAsIDkzLCAyNDQsIDIyNiwgCisgICAgNzUsIDM2LCAyMzIsIDYzLCA1MCwgNzUsIDM2LCAyMjMsIDIzOCwgMjU0LCAyLCA3NSwgMzYsIDIyMywgMjM4LCAyMzUsIDkyLCAKKyAgICA3NSwgNDgsIDIzMSwgMTE1LCAyNDUsIDkwLCAyMjMsIDEzNiwgNzUsIDQ4LCAyMzEsIDExNSwgMjQ4LCAyMTAsIDIyOCwgODIsIAorICAgIDc4LCA3NSwgNDgsIDIzMSwgMTE1LCAyMzcsIDIxMCwgMjI4LCA4MiwgNzgsIDc1LCA0OCwgMjMxLCAxMTUsIDIxOSwgMTU0LCAKKyAgICAyNDgsIDE5MSwgNzUsIDI0NSwgMTA4LCAxMzEsIDI0MywgMTk0LCA3NSwgMjQ1LCA5MCwgMjIzLCAxMzYsIDc1LCAyMzMsIAorICAgIDExMywgMjQ4LCAxOTEsIDk1LCAzLCAxLCAyNTQsIDEzMSwgOTUsIDMsIDEsIDI1MiwgMjA5LCA5NSwgMywgMSwgMjQ0LCAKKyAgICAyMzAsIDk1LCAzLCAxLCAyNDgsIDE1MywgOTUsIDMsIDEsIDI0NiwgMTk3LCA5NSwgMywgMSwgMjE5LCA4NSwgOTUsIDMsIDEsIAorICAgIDIxNywgODcsIDk1LCAzLCAxLCAyMjIsIDExOSwgOTUsIDMsIDEsIDIzNywgMjIzLCA5NSwgMywgMSwgMjM2LCAyMzMsIDk1LCAKKyAgICAzLCAxLCAyMzUsIDE0MywgOTUsIDMsIDEsIDIzNCwgODYsIDk1LCAzLCAxLCAyMzIsIDIxMSwgOTUsIDMsIDEsIDIzMCwgCisgICAgMTM4LCA5NSwgMywgMSwgMjI5LCAyNDMsIDk1LCAzLCAxLCAyMTcsIDc2LCA5NSwgMywgMSwgMjI3LCAyNDksIDk1LCAzLCAxLCAKKyAgICAyMjYsIDE0MCwgOTUsIDMsIDEsIDIyMiwgMTEyLCA5NSwgMywgMSwgMjIwLCA4NywgOTUsIDMsIDEsIDIyOSwgMTM0LCA5NSwgCisgICAgMywgMSwgMjM2LCAxMzgsIDk1LCAzLCAxLCAyNDQsIDExOSwgOTUsIDMsIDEsIDIyOCwgMTQwLCA5NSwgMywgMSwgMjI0LCAKKyAgICAyMDksIDk1LCAzLCAxLCAyNTEsIDIyLCA5NSwgMywgMSwgMjUxLCAxNTQsIDk1LCAzLCAxLCAyMzcsIDkxLCA5NSwgMywgMSwgCisgICAgMjUwLCAyMjQsIDk1LCAzLCAxLCAyNTEsIDU2LCA5NSwgMywgMSwgMjE4LCAxMzYsIDk1LCAzLCAxLCAyMzcsIDEwMSwgOTUsIAorICAgIDMsIDEsIDI0MywgMjA4LCA5NSwgMywgMSwgMjQzLCAxNjIsIDk1LCAzLCAxLCAyNDMsIDEwOCwgOTUsIDMsIDEsIDIxOCwgCisgICAgMjI3LCA5NSwgMywgMSwgMjQzLCAxODIsIDk1LCAzLCAxLCAyNDMsIDIsIDIyMSwgMTk3LCAxLCAxODQsIDIyMSwgMTk3LCAxLCAKKyAgICAyMTgsIDcyLCAyMjEsIDE5NywgMSwgMjE4LCA3MSwgMjIxLCAxOTcsIDEsIDIxOCwgNjMsIDIyMSwgMTk3LCAxLCAyMTgsIAorICAgIDYxLCAyMjEsIDE5NywgMSwgMjUyLCAxMDgsIDI1NSwgMiwgMjE4LCA1NywgMjIxLCAxOTcsIDEsIDIxOCwgNTcsIDIyMSwgCisgICAgMTk3LCAxLCAyMTgsIDY5LCAyMjEsIDE5NywgMSwgMjE4LCA2NiwgMjIxLCAxOTcsIDEsIDIxOCwgNjgsIDIyMSwgMTk3LCAxLCAKKyAgICAyMTgsIDY3LCAyMjEsIDE5NywgMSwgMjE3LCAyNTQsIDIyMSwgMTk3LCAxLCAyMTgsIDY0LCAyMjEsIDE5NywgMSwgMjE4LCAKKyAgICA1NSwgMjIxLCAxOTcsIDEsIDIyMCwgMjU1LCAyMTgsIDU1LCAyMjEsIDE5NywgMSwgMjE4LCA1MiwgMjIxLCAxOTcsIDEsIAorICAgIDIxOCwgNTksIDIyMSwgMTk3LCAxLCAyNTIsIDEwOCwgMjU1LCAyLCAyMTgsIDU5LCAyMjEsIDE5NywgMSwgMjIwLCAyNTUsIAorICAgIDIxOCwgNTksIDIyMSwgMTk3LCAxLCAyMTgsIDU4LCAyMjEsIDE5NywgMSwgMjE4LCA3NiwgMjIxLCAxOTcsIDEsIDIxOCwgCisgICAgNTMsIDIyMSwgMTk3LCAxLCAyMjAsIDI1NSwgMjE4LCA1MywgMjIxLCAxOTcsIDEsIDIxOCwgNDMsIDIyMSwgMTk3LCAxLCAKKyAgICAyMjAsIDI1NSwgMjE4LCA0MywgMjIxLCAxOTcsIDEsIDIxNywgMjUwLCAyMjEsIDE5NywgMSwgMjE4LCAyNywgMjIxLCAxOTcsIAorICAgIDEsIDI1NCwgMjAwLCAyMTgsIDI3LCAyMjEsIDE5NywgMSwgMjIwLCAyNTUsIDIxOCwgMjcsIDIyMSwgMTk3LCAxLCAyMTgsIAorICAgIDUxLCAyMjEsIDE5NywgMSwgMjE4LCA1MCwgMjIxLCAxOTcsIDEsIDIxOCwgNDcsIDIyMSwgMTk3LCAxLCAyMjAsIDI1NSwgCisgICAgMjE4LCA2MCwgMjIxLCAxOTcsIDEsIDIyMCwgMjU1LCAyMTgsIDQ1LCAyMjEsIDE5NywgMSwgMjE4LCA0NCwgMjIxLCAxOTcsIAorICAgIDEsIDIxNywgMjAwLCAyMjEsIDE5NywgMSwgMjE4LCA0MSwgMjIxLCAxOTcsIDEsIDIxOCwgNDAsIDIyMSwgMTk3LCAxLCAKKyAgICAyMTgsIDYyLCAyMjEsIDE5NywgMSwgMjIwLCAyNTUsIDIxOCwgNjIsIDIyMSwgMTk3LCAxLCAyNTMsIDIwOCwgMjE4LCA2MiwgCisgICAgMjIxLCAxOTcsIDEsIDIxOCwgMzksIDIyMSwgMTk3LCAxLCAyMTgsIDM3LCAyMjEsIDE5NywgMSwgMjE4LCAzOCwgMjIxLCAKKyAgICAxOTcsIDEsIDIxOCwgMzYsIDIyMSwgMTk3LCAxLCAyMTgsIDM1LCAyMjEsIDE5NywgMSwgMjE4LCA3MCwgMjIxLCAxOTcsIDEsIAorICAgIDIxOCwgMzMsIDIyMSwgMTk3LCAxLCAyMTgsIDMyLCAyMjEsIDE5NywgMSwgMjE4LCAzMSwgMjIxLCAxOTcsIDEsIDIxOCwgCisgICAgMzAsIDIyMSwgMTk3LCAxLCAyMTgsIDI4LCAyMjEsIDE5NywgMSwgMjIyLCA5OCwgMjE4LCAyOCwgMjIxLCAxOTcsIDEsIAorICAgIDIxOCwgMjYsIDIyMSwgMTk3LCA1OCwgMSwgMjM1LCAxODIsIDc4LCAyOCwgNCwgMjM1LCAxMSwgMjgsIDQsIDIzMywgMTM1LCAKKyAgICAyOCwgNCwgMjI3LCA3MywgMjgsIDQsIDIyNCwgMjUsIDI4LCA0LCAyMjQsIDE5OSwgMjgsIDQsIDI1MiwgNDAsIDI4LCA0LCAKKyAgICAyMjEsIDEzOSwgMjgsIDQsIDI1MCwgMTgxLCAyOCwgNCwgMjMxLCAyMDIsIDI4LCA0LCAyMzEsIDU1LCAyOCwgNCwgMjQ0LCAKKyAgICA3MywgMjMwLCAxODUsIDI4LCA0LCAyMTcsIDIwLCAyOCwgNCwgMjQ4LCAxNjUsIDI4LCA0LCAyNDksIDEwNiwgMjgsIDQsIAorICAgIDIzNywgNTgsIDI4LCA0LCAyMjEsIDIzOCwgMjgsIDQsIDI1MSwgMTAsIDI4LCA0LCAyMjksIDExNywgMjgsIDQsIDIyOSwgCisgICAgMzYsIDI4LCA0LCAyNDQsIDEzMCwgMjgsIDQsIDI0NCwgMTI2LCAyOCwgNCwgMjQ0LCAxMjcsIDI4LCA0LCAyNDQsIDEyOCwgCisgICAgMjgsIDQsIDIyMywgMjE4LCAyOCwgNCwgMjIzLCAxNzgsIDI4LCA0LCAyMjMsIDE4OSwgMjgsIDQsIDIyMywgMjE3LCAyOCwgCisgICAgNCwgMjIzLCAxOTMsIDI4LCA0LCAyMjMsIDE5NCwgMjgsIDQsIDIyMywgMTgyLCAyOCwgNCwgMjUxLCAxMTQsIDI4LCA0LCAKKyAgICAyNTEsIDEwMSwgMjgsIDQsIDI1MSwgMTAzLCAyOCwgNCwgMjUxLCAxMTMsIDI4LCA0LCAyNTEsIDExMSwgMjgsIDQsIDI1MSwgCisgICAgMTEyLCAyOCwgNCwgMjUxLCAxMDIsIDI4LCA0LCAyMTYsIDI0NywgMjgsIDQsIDIxNiwgMjI3LCAyOCwgNCwgMjE2LCAyMzgsIAorICAgIDI4LCA0LCAyMTYsIDI0NiwgMjgsIDQsIDIxNiwgMjQxLCAyOCwgNCwgMjE2LCAyNDIsIDI4LCA0LCAyMTYsIDIzMCwgMjgsIAorICAgIDQsIDI1MSwgMTEwLCAyOCwgNCwgMjUxLCAxMDQsIDI4LCA0LCAyNTEsIDEwNiwgMjgsIDQsIDI1MSwgMTA5LCAyOCwgNCwgCisgICAgMjUxLCAxMDcsIDI4LCA0LCAyNTEsIDEwOCwgMjgsIDQsIDI1MSwgMTA1LCAyOCwgNCwgMjI4LCA1MSwgMjgsIDQsIDIyOCwgCisgICAgNDEsIDI4LCA0LCAyMjgsIDQ3LCAyOCwgNCwgMjI4LCA1MCwgMjgsIDQsIDIyOCwgNDgsIDI4LCA0LCAyMjgsIDQ5LCAyOCwgCisgICAgNCwgMjI4LCA0NiwgMjgsIDQsIDIzNSwgMjEyLCAyOCwgNCwgMjM1LCAyMDQsIDI4LCA0LCAyMzUsIDIwNywgMjgsIDQsIAorICAgIDIzNSwgMjExLCAyOCwgNCwgMjM1LCAyMDgsIDI4LCA0LCAyMzUsIDIwOSwgMjgsIDQsIDIzNSwgMjA1LCAyOCwgNCwgMjE4LCAKKyAgICAxMDMsIDI4LCA0LCAyMTgsIDkzLCAyOCwgNCwgMjE4LCA5OSwgMjgsIDQsIDIxOCwgMTAyLCAyOCwgNCwgMjE4LCAxMDAsIAorICAgIDI4LCA0LCAyMTgsIDEwMSwgMjgsIDQsIDIxOCwgOTgsIDI4LCA0LCAyNDMsIDIzNiwgMjgsIDQsIDI0MywgMjI3LCAyOCwgNCwgCisgICAgMjQzLCAyMzAsIDI4LCA0LCAyNDMsIDIzNSwgMjgsIDQsIDI0MywgMjMyLCAyOCwgNCwgMjQzLCAyMzMsIDI4LCA0LCAyNDMsIAorICAgIDIyOSwgMzYsIDMxLCAxLCAyNTIsIDE0NCwgMzYsIDMxLCAxLCAyMTksIDE2NSwgMzYsIDMxLCAxLCAyNDQsIDExNiwgMzYsIAorICAgIDMxLCAxLCAyNDksIDkyLCAzNiwgMzEsIDEsIDIxNywgNzIsIDM2LCAzMSwgMSwgMjE3LCA5MiwgMzYsIDMxLCAxLCAxNzUsIAorICAgIDM2LCAzMSwgMSwgMjQ2LCAyMTcsIDM2LCAzMSwgMSwgMjQ2LCAyMDUsIDM2LCAzMSwgMSwgMjQ2LCAxOTcsIDM2LCAzMSwgMSwgCisgICAgNzQsIDM2LCAzMSwgMSwgMjI5LCAxOTgsIDM2LCAzMSwgMSwgMjQ2LCAxNDgsIDM2LCAzMSwgMSwgMjQ2LCAxMzgsIDM2LCAKKyAgICAzMSwgMSwgMjIyLCA4NywgMzYsIDMxLCAxLCAxNTUsIDM2LCAzMSwgMSwgMjIxLCA1MCwgMzYsIDMxLCAxLCAyNTEsIDQ2LCAKKyAgICAzNiwgMzEsIDEsIDIyNSwgMjUsIDM2LCAzMSwgMSwgMjI0LCAyNDgsIDM2LCAzMSwgMSwgMjQ1LCAxNzEsIDM2LCAzMSwgMSwgCisgICAgMjQ2LCAxMzcsIDM2LCAzMSwgMSwgNjAsIDM2LCAzMSwgMSwgMjM4LCAyNiwgMzYsIDMxLCAxLCAyNDgsIDE4MSwgMzYsIDMxLCAKKyAgICAxLCAyMzMsIDEyMywgMjIwLCAxMDIsIDM2LCAzMSwgMSwgMjE4LCAzNiwgMzYsIDMxLCAxLCAyMTcsIDIwMCwgMzYsIDMxLCAKKyAgICAxLCAyMzcsIDE2MCwgNjAsIDM2LCAzMSwgMSwgMjM1LCAyNSwgMjE3LCAxNzgsIDM2LCAzMSwgMSwgMjUyLCA3NiwgMjE3LCAKKyAgICAxNzgsIDM2LCAzMSwgMSwgMjM3LCAxNjAsIDI1MiwgNzYsIDIxNywgMTc4LCA0NSwgMjU0LCAxMjAsIDIyMywgODksIDIzNCwgCisgICAgNjMsIDQ1LCAyNTQsIDEyMCwgMjQ3LCAxNDMsIDIyMywgODksIDIzNCwgNjMsIDQyLCAyMjMsIDg5LCAxMTUsIDQ1LCAyMjMsIAorICAgIDg5LCAxMTUsIDQyLCAyNDcsIDE0MywgMjIzLCA4OSwgMTE1LCA0NSwgMjQ3LCAxNDMsIDIyMywgODksIDExNSwgMjI3LCAKKyAgICAyNDEsIDIzNywgMTc4LCAyMzQsIDYzLCAyMjcsIDI0MSwgMjQ3LCAxNDMsIDIzNywgMTc4LCAyMzQsIDYzLCAyNDcsIDE0MywgCisgICAgMjIxLCAxMDMsIDIzNCwgNjMsIDQyLCAyMjEsIDEwMywgMTE1LCA0NSwgMjIxLCAxMDMsIDExNSwgMjI3LCAyNDEsIDIyMywgCisgICAgMjI3LCA0MiwgMjI3LCAyNDEsIDIzMCwgMTQwLCAxMTUsIDQ1LCAyMjcsIDI0MSwgMjMwLCAxNDAsIDExNSwgMjQ2LCAyNTEsIAorICAgIDI1MCwgMTIxLCAyMjksIDIzOSwgMjQ1LCAxMjYsIDIyOSwgMjM5LCAyMTAsIDI0NSwgMTI2LCAyMjksIDIzOSwgMjQyLCAKKyAgICAxMTgsIDI0NywgMTQzLCAyMzAsIDE4MCwgMjQ3LCAxMzAsIDI1NCwgMTI3LCAyMjAsIDUzLCAyNTQsIDEyNywgMjQ3LCAxNDMsIAorICAgIDIyNywgMTA2LCAyNTQsIDExOSwgNTEsIDIzMCwgMTc3LCAyNDIsIDEyMSwgMjM3LCAxNzAsIDIzNywgMTc3LCAyMzAsIDIzLCAKKyAgICAyNTIsIDE0LCAyNDIsIDEyMiwgMiwgMjQ5LCAxMywgMjIxLCAxODAsIDIsIDIyNywgOTQsIDUwLCA0MiwgMTA5LCAyMjksIAorICAgIDIzMSwgMTE1LCA0NSwgMTA5LCAyMjksIDIzMSwgMTE1LCAyMjEsIDE4MCwgMiwgNjEsIDUwLCAyMjEsIDE4MCwgMiwgNjEsIAorICAgIDU2LCA0MiwgNjksIDI1MiwgMjAxLCAyLCAyMjgsIDc3LCA0NSwgNjksIDI1MiwgMjAxLCAyLCAyMjgsIDc3LCAyMjEsIDEyMCwgCisgICAgNDIsIDE0NCwgMTE1LCAyMjEsIDEyMCwgNDUsIDE0NCwgMTE1LCAyNTIsIDI5LCA0MiwgMTQ0LCAxMTUsIDI1MiwgMjksIDQ1LCAKKyAgICAxNDQsIDExNSwgNDIsIDIyNCwgMTM2LCAxMDUsIDExNSwgNDUsIDIyNCwgMTM2LCAxMDUsIDExNSwgNDIsIDUxLCAyMjksIAorICAgIDIyOSwgNDUsIDUxLCAyMjksIDIyOSwgMTI0LCAxODgsIDEwNCwgMTMxLCA2MSwgMjI4LCAxOTYsIDEzMSwgNjEsIDEwNCwgCisgICAgMTI0LCAxODgsIDIyOCwgMTk2LCAyMDQsIDI0NSwgMTE2LCA2MSwgMjI4LCAxOTYsIDI0NSwgMTcwLCA2MSwgNzgsIDIxMCwgCisgICAgMjI4LCA4MiwgNzgsIDY5LCAyMjEsIDE3OSwgMjI3LCA5NCwgMjI5LCAzMSwgMjE4LCAxNzQsIDIyNSwgNTUsIDIzMywgMTkzLCAKKyAgICAyNDgsIDE0NSwgOSwgMzIsIDIyNywgMTgxLCA5LCAzMiwgMjUwLCAyMDMsIDksIDMyLCAyMjYsIDkwLCAxMDcsIDksIDMyLCAKKyAgICAyMjYsIDkwLCAxMDMsIDksIDMyLCAyMjYsIDkwLCAxNjAsIDksIDMyLCAyMjksIDE1NywgOSwgMzIsIDI1MiwgMjEsIDksIAorICAgIDMyLCAyMjIsIDE0NiwgOSwgMzIsIDIzNiwgNjEsIDEwNywgOSwgMzIsIDIzNiwgNjEsIDEwMywgOSwgMzIsIDI0OCwgMTg5LCAKKyAgICA5LCAzMiwgMjI2LCA5MiwgOSwgMzIsIDMsIDEwNywgOSwgMzIsIDMsIDEwMywgOSwgMzIsIDIzNSwgMTU1LCAxMDcsIDksIAorICAgIDMyLCAyMzUsIDE1NSwgMTAzLCA5LCAzMiwgMjM1LCAxNTUsIDE2MCwgOSwgMzIsIDIzNSwgMTU1LCAxNTQsIDksIDMyLCAKKyAgICAyMjQsIDM1LCA5LCAzMiwgMjIxLCAyMjksIDksIDMyLCAyMjQsIDMzLCAxMDcsIDksIDMyLCAyMjQsIDMzLCAxMDMsIDksIAorICAgIDMyLCAyNDMsIDE1NCwgMTA3LCA5LCAzMiwgMjQzLCAxNTQsIDEwMywgOSwgMzIsIDI0MywgMTg5LCA5LCAzMiwgMjI3LCAKKyAgICAyMzMsIDksIDMyLCAyNTEsIDgsIDksIDMyLCAyMjMsIDY4LCA5LCAzMiwgMjMzLCAxMTcsIDksIDMyLCAyNDksIDkwLCA5LCAKKyAgICAzMiwgMjMzLCAxMTAsIDksIDMyLCAyNTAsIDIxMywgOSwgMzIsIDIxOCwgMjQxLCAxMDcsIDksIDMyLCAyMTgsIDI0MSwgCisgICAgMTAzLCA5LCAzMiwgMjQ1LCAxNzksIDksIDMyLCAyMjksIDIwOCwgMTA3LCA5LCAzMiwgMjI5LCAyMDgsIDEwMywgOSwgMzIsIAorICAgIDIyNCwgMTE0LCAxNDQsIDIyMSwgOTksIDIyMSwgNjAsIDksIDMyLCAyNTAsIDExMCwgOSwgMzIsIDI0OCwgMTU5LCA5LCAzMiwgCisgICAgMjM3LCAxMjEsIDksIDMyLCAyNTIsIDM2LCAxMTcsIDI1MCwgMTkyLCA5LCAzMiwgMjQ2LCA4MSwgOSwgMzIsIDIyMywgMjQwLCAKKyAgICAxMDcsIDksIDMyLCAyMjMsIDI0MCwgMTAzLCA5LCAzMiwgMjUyLCAyMTEsIDksIDMyLCAyMjQsIDExOSwgOSwgMzIsIDI1MSwgCisgICAgMTk5LCAyMjQsIDExOSwgOSwgMzIsIDIzMiwgMTI2LCAxMDcsIDksIDMyLCAyMzIsIDEyNiwgMTAzLCA5LCAzMiwgMjMyLCAKKyAgICAxMjYsIDE2MCwgOSwgMzIsIDIzMiwgMTI2LCAxNTQsIDksIDMyLCAyMzMsIDI0MywgOSwgMzIsIDIyNCwgMjQwLCA5LCAzMiwgCisgICAgMjI3LCAyMzksIDksIDMyLCAyNDYsIDEwMCwgOSwgMzIsIDIzMCwgMTUwLCA5LCAzMiwgMjUxLCAyNTUsIDEwNywgOSwgMzIsIAorICAgIDI1MSwgMjU1LCAxMDMsIDksIDMyLCAyMzQsIDIxLCA5LCAzMiwgMjMzLCAxMTIsIDksIDMyLCAyNDQsIDQwLCAxMDcsIDksIAorICAgIDMyLCAyNDQsIDQwLCAxMDMsIDksIDMyLCAyNDQsIDQwLCAxNjAsIDksIDMyLCAyMjEsIDE5NiwgOSwgMzIsIDI1MCwgMTkxLCAKKyAgICA5LCAzMiwgMjE4LCAyMTcsIDEwNywgOSwgMzIsIDIxOCwgMjE3LCAxMDMsIDksIDMyLCAyNTEsIDE5OSwgMjI2LCA4NCwgOSwgCisgICAgMzIsIDIyNCwgMTE0LCAyNDIsIDE4OSwgOSwgMzIsIDI0MiwgMTg5LCA5LCAzMiwgMjUxLCAxOTksIDIyMywgMjQ3LCA5LCAKKyAgICAzMiwgMjUxLCAxOTksIDIyNCwgMjM1LCA5LCAzMiwgMjQ1LCAxMzMsIDksIDMyLCAyNTEsIDE5OSwgMjUxLCAxMjcsIDksIAorICAgIDMyLCAyMjQsIDExNCwgMjE4LCAyNTUsIDksIDMyLCAyMTksIDAsIDEwNywgOSwgMzIsIDIxOSwgMCwgMTAzLCA5LCAzMiwgCisgICAgMjUwLCAyMTQsIDksIDMyLCAyNTEsIDE5OSwgMjQ0LCA2MiwgOSwgMzIsIDE3MSwgMTA3LCA5LCAzMiwgMTcxLCAxMDMsIDksIAorICAgIDMyLCAyNTEsIDE5OSwgMjM1LCAyLCA5LCAzMiwgMjUxLCAxOTksIDI0NCwgMjEzLCA5LCAzMiwgMjMzLCAxMDksIDEwNywgOSwgCisgICAgMzIsIDIzMywgMTA5LCAxMDMsIDksIDMyLCAyMjcsIDI0MiwgOSwgMzIsIDI1MiwgNDMsIDksIDMyLCAyNTEsIDE5OSwgMjIyLCAKKyAgICAxMTcsIDIzNSwgMTE5LCA5LCAzMiwgMjUxLCAxOTksIDIzNSwgMTIwLCA5LCAzMiwgMjUxLCAxOTksIDIxOCwgMTk0LCA5LCAKKyAgICAzMiwgMjUxLCAxOTksIDI0NSwgMTQyLCA5LCAzMiwgMjQ3LCAzLCAxMDcsIDksIDMyLCAyNDcsIDMsIDEwMywgOSwgMzIsIAorICAgIDI0NywgMywgMTYwLCA5LCAzMiwgMjUxLCAxOTksIDI0NywgMiwgOSwgMzIsIDI0MywgMTU5LCA5LCAzMiwgMjUxLCAxOTksIAorICAgIDI0MiwgMTg4LCA5LCAzMiwgMjUyLCAzNSwgOSwgMzIsIDI0NCwgMTExLCA5LCAzMiwgMjUxLCAxOTksIDI0NSwgMTc2LCA5LCAKKyAgICAzMiwgMjUxLCAxOTksIDI1MiwgNjcsIDksIDMyLCAyNTEsIDE5OSwgMjI2LCAxNTEsIDksIDMyLCAyMjQsIDExNCwgMjE4LCAKKyAgICAyMTIsIDksIDMyLCAyMjQsIDExNCwgMjE4LCAyMCwgOSwgMzIsIDI1MSwgMTk5LCAyNDUsIDk4LCA5LCAzMiwgMjM3LCAxMjUsIAorICAgIDI0NiwgMTAzLCA5LCAzMiwgMjUxLCAxOTksIDI0NiwgMTAzLCA5LCAzMiwgMjM3LCAxMjUsIDIyMSwgMTIxLCA5LCAzMiwgCisgICAgMjUxLCAxOTksIDIyMSwgMTIxLCA5LCAzMiwgMjM3LCAxMjUsIDI0NywgMTIzLCA5LCAzMiwgMjUxLCAxOTksIDI0NywgMTIzLCAKKyAgICA5LCAzMiwgMjIwLCAyMzQsIDksIDMyLCAyMzcsIDEyNSwgMjIwLCAyMzQsIDksIDMyLCAyNTEsIDE5OSwgMjIwLCAyMzQsIAorICAgIDUzLCAzMiwgMTA3LCA1MywgMzIsIDIzNSwgNDMsIDUzLCAzMiwgMjQ4LCAxNDUsIDUzLCAzMiwgMjI0LCA1NSwgNTMsIDMyLCAKKyAgICAyMjYsIDg5LCA1MywgMzIsIDk2LCA1MywgMzIsIDEwMywgNTMsIDMyLCAyMzUsIDY0LCA1MywgMzIsIDIzNCwgODYsIDUzLCAKKyAgICAzMiwgMjM1LCAxMDMsIDUzLCAzMiwgMjQ2LCAxNzgsIDUzLCAzMiwgMTg1LCA1MywgMzIsIDExMywgMjUyLCAyMSwgNTMsIAorICAgIDMyLCAyNTAsIDExMSwgNTMsIDMyLCAyNDIsIDY1LCA1MywgMzIsIDIyMiwgMTQ2LCA1MywgMzIsIDIzMCwgMTE5LCAyNTIsIAorICAgIDIxLCA1MywgMzIsIDIzNiwgNjAsIDUzLCAzMiwgMjI5LCAxMCwgNTMsIDMyLCAyMTgsIDE2OSwgNTMsIDMyLCAyMjMsIDIzNSwgCisgICAgNTMsIDMyLCA0NSwgMjMwLCAxMTksIDI1MiwgMjEsIDUzLCAzMiwgMjQzLCAxMDksIDI0NiwgMTkyLCA1MywgMzIsIDIyMiwgCisgICAgNjUsIDUzLCAzMiwgMjQ4LCAxODksIDUzLCAzMiwgMjI2LCA5MiwgNTMsIDMyLCAyNTAsIDIwMywgNTMsIDMyLCAyMjgsIAorICAgIDIzMSwgNTMsIDMyLCAyNTQsIDIwOCwgNTMsIDMyLCAyMzMsIDEwNSwgNTMsIDMyLCAyNDYsIDE5MiwgNTMsIDMyLCAyNDcsIAorICAgIDgsIDUzLCAzMiwgMjI2LCAxMDgsIDUzLCAzMiwgMjQ0LCA2OCwgNTMsIDMyLCAyNDQsIDY5LCAyMjQsIDQ1LCA1MywgMzIsIAorICAgIDI0NiwgMTAyLCA1MywgMzIsIDI1MiwgNzUsIDUzLCAzMiwgMjE4LCAxODMsIDUzLCAzMiwgMjUxLCAyNCwgNTMsIDMyLCAKKyAgICAyMjcsIDY2LCA1MywgMzIsIDIzNywgMjIwLCA1MywgMzIsIDIyNCwgNDMsIDUzLCAzMiwgMjM1LCAxNTQsIDUzLCAzMiwgCisgICAgMjUwLCAxMTksIDUzLCAzMiwgMjIzLCAyMzAsIDUzLCAzMiwgMjMzLCAxMDcsIDUzLCAzMiwgMjI3LCA4NCwgNTMsIDMyLCAKKyAgICAyMTgsIDE3MSwgNTMsIDMyLCAyMzAsIDEzNCwgNTMsIDMyLCAyMjAsIDIzOSwgNTMsIDMyLCAyNDcsIDExMywgNTMsIDMyLCAKKyAgICAyMjQsIDE5MiwgMjIxLCAyMjksIDUzLCAzMiwgMjQ3LCAxNDMsIDI1MCwgMjAzLCA1MywgMzIsIDE3MSwgMjIzLCAxMjIsIAorICAgIDUzLCAzMiwgMTI0LCAyNDMsIDE4NywgNTMsIDMyLCAyMjQsIDE5NCwgNTMsIDMyLCAyNTIsIDI0LCA1MywgMzIsIDIyNCwgCisgICAgMzIsIDUzLCAzMiwgMjUyLCAzLCA1MywgMzIsIDIyMywgMTQ1LCA1MywgMzIsIDI0MywgMTUzLCA1MywgMzIsIDI0MywgMTk1LCAKKyAgICA1MywgMzIsIDI0OCwgMTQ4LCA1MywgMzIsIDI0MywgMTg5LCA1MywgMzIsIDI1MiwgMTQsIDUzLCAzMiwgMjI3LCAyMzMsIAorICAgIDUzLCAzMiwgMjI2LCA5OSwgNTMsIDMyLCAyNDgsIDIxMiwgNTMsIDMyLCAyNTMsIDIxMywgNTMsIDMyLCAyMjMsIDIyNywgCisgICAgNTMsIDMyLCAyMzEsIDE4NCwgNTMsIDMyLCAyMjMsIDY4LCA1MywgMzIsIDIyNiwgMTE4LCA1MywgMzIsIDIzMywgMTE3LCAKKyAgICA1MywgMzIsIDIyMSwgOTgsIDUzLCAzMiwgMjM1LCAxNzgsIDUzLCAzMiwgMjIzLCAxMzYsIDUzLCAzMiwgMjQ5LCA5MCwgNTMsIAorICAgIDMyLCAyMTgsIDIyNiwgNTMsIDMyLCAyNDgsIDE2OCwgMjMxLCAxODQsIDUzLCAzMiwgMjUwLCAxNjUsIDUzLCAzMiwgMjQ1LCAKKyAgICA4NCwgNTMsIDMyLCAyNTAsIDIxMSwgNTMsIDMyLCAyMjMsIDE0OCwgNTMsIDMyLCAyMTgsIDI0MCwgNTMsIDMyLCAyNDUsIAorICAgIDE3OSwgNTMsIDMyLCAyNTAsIDIxMCwgNTMsIDMyLCAyNDUsIDIzNSwgNTMsIDMyLCA1MSwgMjE4LCAxNTEsIDUzLCAzMiwgCisgICAgMTQ0LCAyMjEsIDk5LCAyMjEsIDYwLCA1MywgMzIsIDIyNCwgNTIsIDUzLCAzMiwgMjQ1LCAyNDMsIDUzLCAzMiwgMjUwLCAKKyAgICAxMTAsIDUzLCAzMiwgMjQ4LCAxNTksIDUzLCAzMiwgMjI4LCAyMjgsIDUzLCAzMiwgMjM3LCAxMjEsIDUzLCAzMiwgMjM0LCAKKyAgICAzLCA1MywgMzIsIDIyMSwgMTc4LCA1MywgMzIsIDIyMywgMzEsIDUzLCAzMiwgMjM1LCA1OSwgNTMsIDMyLCAyMjAsIDMzLCAKKyAgICA1MywgMzIsIDI0NSwgMjAyLCA1MywgMzIsIDI1MiwgMzYsIDExNywgMjUwLCAxOTIsIDUzLCAzMiwgMjI0LCAxMzcsIDUzLCAKKyAgICAzMiwgMjQ3LCAxNDMsIDIyMiwgNjIsIDUzLCAzMiwgMjE4LCAyMDcsIDUzLCAzMiwgMjI0LCA2MiwgNTMsIDMyLCAyNDgsIAorICAgIDIwMiwgNTMsIDMyLCAyNDYsIDgxLCA1MywgMzIsIDIyMywgMjQ5LCA1MywgMzIsIDY1LCA1MywgMzIsIDIyMywgMTM4LCA1MywgCisgICAgMzIsIDIyMywgMjM5LCA1MywgMzIsIDIyMSwgMTA4LCA1MywgMzIsIDI0NCwgNDUsIDUzLCAzMiwgMjUxLCAxMTksIDUzLCAKKyAgICAzMiwgMjIzLCAxNjAsIDUzLCAzMiwgMjUyLCAyMTEsIDUzLCAzMiwgMjI3LCAxNDUsIDUzLCAzMiwgMjI0LCAxMTksIDUzLCAKKyAgICAzMiwgMjM3LCAxMTcsIDUzLCAzMiwgMjMyLCAxMjUsIDUzLCAzMiwgMjI0LCAyNDAsIDUzLCAzMiwgMjQ1LCAyMjgsIDUzLCAKKyAgICAzMiwgMjMwLCAxNTAsIDUzLCAzMiwgMjU0LCAxMjYsIDUzLCAzMiwgMjI5LCA0NywgNTMsIDMyLCAyNDcsIDExLCA1MywgMzIsIAorICAgIDI1MSwgMjU0LCA1MywgMzIsIDIzNCwgMjEsIDUzLCAzMiwgMjMzLCAxNTYsIDUzLCAzMiwgMjI1LCA3MywgNTMsIDMyLCAKKyAgICAyNTQsIDIzLCA1MywgMzIsIDIzMywgMTEyLCA1MywgMzIsIDIyMSwgMTI0LCA1MywgMzIsIDIzMCwgMTExLCA1MywgMzIsIAorICAgIDI1MiwgMzgsIDUzLCAzMiwgMjIzLCAxMzQsIDUzLCAzMiwgMjUwLCAxNzQsIDUzLCAzMiwgMjQ0LCAzOSwgNTMsIDMyLCAKKyAgICAyMjEsIDE5NiwgNTMsIDMyLCAyMzcsIDE5MiwgNTMsIDMyLCAyNTIsIDQ0LCA1MywgMzIsIDIxOSwgMCwgMjQ2LCAxOTIsIAorICAgIDUzLCAzMiwgMjUwLCAxOTEsIDUzLCAzMiwgMjE4LCAyMTYsIDUzLCAzMiwgMjI2LCA4NCwgNTMsIDMyLCAyNDIsIDE4OSwgCisgICAgNTMsIDMyLCAyMjMsIDI0NywgNTMsIDMyLCAyMTksIDE4NiwgNTMsIDMyLCAyNTIsIDE0MSwgNTMsIDMyLCAyMjksIDc4LCAKKyAgICA1MywgMzIsIDI1MiwgMjI3LCA1MywgMzIsIDIyNCwgMjM1LCA1MywgMzIsIDIyNywgMjAyLCA1MywgMzIsIDIyNywgMTAsIAorICAgIDUzLCAzMiwgMjQ1LCAxMzMsIDUzLCAzMiwgMjUyLCAzNywgNTMsIDMyLCAyNTEsIDEyNywgNTMsIDMyLCAyNTIsIDU4LCA1MywgCisgICAgMzIsIDIzMywgMTE0LCA1MywgMzIsIDIxOCwgMjU1LCA1MywgMzIsIDI1MCwgMjE0LCA1MywgMzIsIDIxOCwgMTkyLCA1MywgCisgICAgMzIsIDI0OCwgMTk5LCA1MywgMzIsIDIxOSwgODYsIDUzLCAzMiwgMjQ0LCA2MiwgNTMsIDMyLCAyMzUsIDIsIDUzLCAzMiwgCisgICAgMjQ0LCAyMTMsIDUzLCAzMiwgMjMzLCAxMDgsIDUzLCAzMiwgMjI0LCA1NCwgNTMsIDMyLCAyMjQsIDE5MiwgMjIyLCAxMzQsIAorICAgIDI1MiwgNjcsIDUzLCAzMiwgMjI3LCAyNDIsIDUzLCAzMiwgMjUyLCA0MywgNTMsIDMyLCAyMTgsIDE2NiwgNTMsIDMyLCAKKyAgICAyNDYsIDMsIDUzLCAzMiwgMjM1LCAxMTksIDUzLCAzMiwgMjIyLCAxMTcsIDIzNSwgMTE5LCA1MywgMzIsIDIzNSwgMTE2LCAKKyAgICA1MywgMzIsIDIyNCwgOCwgNTMsIDMyLCAyMzUsIDEyMCwgNTMsIDMyLCAyMTgsIDE5NCwgNTMsIDMyLCAyNDUsIDE0MiwgNTMsIAorICAgIDMyLCAyNDcsIDIsIDUzLCAzMiwgMjQzLCAxNTksIDUzLCAzMiwgMjQ1LCAxMDYsIDUzLCAzMiwgMjQyLCAxODgsIDUzLCAzMiwgCisgICAgMjUyLCAzNSwgNTMsIDMyLCAyMjIsIDEyMiwgNTMsIDMyLCAyNDMsIDIwMCwgNTMsIDMyLCAyNDUsIDE5NSwgNTMsIDMyLCAKKyAgICAyMjYsIDE3MiwgMjE4LCAxOTIsIDUzLCAzMiwgMjUxLCAxMjEsIDUzLCAzMiwgMjQ0LCAxMTEsIDUzLCAzMiwgMjQ1LCAxNzYsIAorICAgIDUzLCAzMiwgMjUyLCA2NywgNTMsIDMyLCAyMjYsIDE1MSwgNTMsIDMyLCAyNDksIDgwLCA1MywgMzIsIDIxOCwgMjEyLCA1MywgCisgICAgMzIsIDI0MywgMTM5LCA1MywgMzIsIDIxOCwgMjAsIDUzLCAzMiwgMjMzLCAxNjMsIDUzLCAzMiwgMjUyLCA1MywgNTMsIDMyLCAKKyAgICAyNDYsIDIwMiwgNTMsIDMyLCAyNDUsIDk4LCA1MywgMzIsIDIyMSwgNzYsIDUzLCAzMiwgMjQ3LCAxMTUsIDUzLCAzMiwgCisgICAgMjI3LCAyMjgsIDUzLCAzMiwgMjMxLCAxODUsIDUzLCAzMiwgMjQ2LCAxMDMsIDUzLCAzMiwgMjIxLCAxMjEsIDUzLCAzMiwgCisgICAgMjQ3LCAxMjMsIDUzLCAzMiwgMjIwLCAyMzQsIDUzLCAzMiwgMjQ1LCAxNDMsIDk4LCAyNDksIDQ2LCAxMjYsIDQyLCAxOTksIAorICAgIDIyNywgMTA5LCA5OCwgMjQ5LCA0NiwgMTI2LCA3MSwgMTk5LCA1NiwgOTgsIDI0OSwgNDYsIDEyNiwgNDIsIDE5OSwgMjMzLCAKKyAgICAxOTMsIDI1LCAyMjcsIDEwOSwgOTgsIDI0OSwgNDYsIDEyNiwgNzEsIDE5OSwgMjMzLCAxOTMsIDI1LCA1NiwgOTgsIDI0OSwgCisgICAgNDYsIDEyNiwgMjQ1LCA5MCwgMjIzLCA0NywgOTgsIDI0OSwgNDYsIDEyNiwgMjIzLCA0OCwgMjQ1LCA5NywgNTAsIDk4LCAKKyAgICAyNDksIDQ2LCAxMjYsIDIyMywgNDgsIDI0NSwgOTcsIDU2LCA5OCwgMjQ5LCA0NiwgMTI2LCAyMjMsIDQ4LCAyNDUsIDk3LCAKKyAgICAyMzUsIDExNSwgOTgsIDI0OSwgNDYsIDEyNiwgMjIzLCA0OCwgMjQ1LCA5NywgMjIwLCA2MCwgMjM1LCAxMTUsIDk4LCAyNDksIAorICAgIDQ2LCAxMjYsIDIyMywgNDgsIDI0NSwgOTcsIDIyMCwgNjAsIDIyNywgMTA5LCA5OCwgMjQ5LCA0NiwgMTI2LCAyMjMsIDQ4LCAKKyAgICAyNDUsIDk3LCAyMzQsIDIzNywgMjM1LCAxMTUsIDk4LCAyNDksIDQ2LCAxMjYsIDIzMCwgNzYsIDk4LCAyMjMsIDI1NCwgOTgsIAorICAgIDI1MCwgMTY4LCA5OCwgMjQ1LCA5MCwgMjIzLCAxMzYsIDI0OCwgMTk2LCA3OCwgMjM3LCAxMTgsIDIzNywgMjA5LCAyMjMsIAorICAgIDE1OSwgMTAwLCA5OCwgMjM3LCAxMzgsIDc4LCA5OCwgMjUwLCAxOTQsIDc4LCA5OCwgNTQsIDIxNywgODQsIDQyLCAyNTQsIAorICAgIDEyMCwgMTE1LCA0NSwgMjU0LCAxMjAsIDExNSwgNDIsIDUxLCAyNTQsIDEyMCwgMTE1LCA0NSwgNTEsIDI1NCwgMTIwLCAKKyAgICAxMTUsIDQyLCAyNTAsIDEyNCwgMTE1LCA0NSwgMjUwLCAxMjQsIDExNSwgNDIsIDY3LCAyNTAsIDEyNCwgMTE1LCA0NSwgNjcsIAorICAgIDI1MCwgMTI0LCAxMTUsIDQyLCA4NCwgMjM1LCA5MSwgMTE1LCA0NSwgODQsIDIzNSwgOTEsIDExNSwgMjI5LCAxNCwgNzgsIAorICAgIDI0NCwgMTYzLCA3OCwgNDIsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMTE1LCA0NSwgMjIxLCAxMTQsIDIyNCwgMjM2LCAxMTUsIAorICAgIDQyLCA2NywgMjM1LCA5MSwgMTE1LCA0NSwgNjcsIDIzNSwgOTEsIDExNSwgNDIsIDY3LCAyMjEsIDExNCwgMjI0LCAyMzYsIAorICAgIDExNSwgNDUsIDY3LCAyMjEsIDExNCwgMjI0LCAyMzYsIDExNSwgNDIsIDY3LCA0MCwgMTE1LCA0NSwgNjcsIDQwLCAxMTUsIAorICAgIDIxOCwgMjM3LCAyNDksIDE0NiwgMjEwLCA1MSwgMjI4LCAyMzYsIDIyOCwgNjksIDc4LCA1MSwgMjI4LCAyMzYsIDIyOCwgCisgICAgNjksIDc4LCAxMDksIDUxLCAyMjgsIDIzNiwgMjI4LCA2OSwgNzgsIDIyOSwgMTQsIDE2NCwgMjQ2LCAzLCAyNDMsIDE4NSwgCisgICAgMjMxLCAxMDcsIDEwNywgMjQzLCAxODUsIDIzMSwgMTA3LCAxMDMsIDI0MywgMTg1LCAyMzEsIDEwNywgMTYwLCAyNDMsIAorICAgIDE4NSwgMjMxLCAxMDcsIDE1NCwgMjQzLCAxODUsIDIzMSwgMTA3LCAxNzQsIDI0MywgMTg1LCAyMzEsIDEwNywgMTgyLCAKKyAgICAyNDMsIDE4NSwgMjMxLCAxMDcsIDE5MSwgMjQzLCAxODUsIDIzMSwgMTA3LCAxODUsIDI0MywgMTg1LCAyMzEsIDEwNywgCisgICAgMTkwLCA5OCwgMjM1LCA4MywgMTQ1LCA3OCwgOTgsIDIyNywgODgsIDE0NSwgNzgsIDk4LCAyNDksIDUyLCAxNDUsIDc4LCAKKyAgICA5OCwgMjQ2LCAxNzcsIDE0NSwgNzgsIDIyLCAyMjQsIDEwOSwgNjEsIDE0NSwgNzgsIDIyLCA1MSwgNjEsIDE0NSwgNzgsIAorICAgIDIxOCwgMjM1LCAyNDksIDE0NiwgNjksIDIzNiwgMjMyLCAyMjcsIDE4MiwgNzgsIDY5LCAyMzYsIDIzMiwgMjI3LCAxODIsIAorICAgIDIsIDIxOSwgNzAsIDIyNCwgOSwgNzgsIDY5LCAyMzYsIDIzMiwgMjI3LCAxODIsIDE2NCwgMjIwLCA2MCwgMjQzLCAxOTQsIAorICAgIDY5LCAyMzYsIDIzMiwgMjI3LCAxODIsIDIsIDIxOSwgNzAsIDIyNCwgOSwgMTY0LCAyMjAsIDYwLCAyNDMsIDE5NCwgNjksIAorICAgIDIzNiwgMjMyLCAyMjcsIDE4MiwgMTY0LCAyMzQsIDIzNywgMjQzLCAxOTQsIDM0LCAyMjksIDE0LCA3OCwgOTgsIDE4MywgCisgICAgMjM1LCA0NCwgMjQ1LCAyMjUsIDIyNSwgNTUsIDEwMCwgMjQzLCAxODUsIDIzMSwgMTA3LCAyMjIsIDY1LCAyNDMsIDE4NSwgCisgICAgMjMxLCAxMDcsIDIyMCwgMjE5LCAyNDMsIDE4NSwgMjMxLCAxMDcsIDIyMSwgMjQ1LCA2OSwgOTgsIDIzNywgMTM4LCA3OCwgCisgICAgMjM0LCA1MiwgNzgsIDIyOSwgMjI1LCAyNTQsIDE0MywgNzgsIDk4LCA0MSwgMjM3LCAyMTEsIDk4LCAxNDQsIDI0NSwgMTg4LCAKKyAgICAyMjMsIDI1NCwgMTM2LCAxLCAzLCA2MCwgMTM2LCAxLCA2MCwgMTM2LCAxLCAzLCA3MiwgMTM2LCAxLCA3MiwgMTM2LCAxLCAKKyAgICAzLCA2OCwgMTM2LCAxLCA2OCwgMTM2LCAxLCAzLCA3MywgMTM2LCAxLCA3MywgMTM2LCAxLCAzLCA3NCwgMTM2LCAxLCA3NCwgCisgICAgMTM2LCAxLCAxNzUsIDEzNiwgMSwgMjQ1LCAwLCAxMzYsIDEsIDIzNiwgMTEzLCAxMzYsIDEsIDI0NCwgMTAzLCAxMzYsIDEsIAorICAgIDIzNiwgNywgMTM2LCAxLCAyNDQsIDE3LCAxMzYsIDEsIDIzNiwgMTg0LCAxMzYsIDEsIDI0NCwgMTkxLCAxMzYsIDEsIDIzNiwgCisgICAgNTcsIDEzNiwgMSwgMjQ0LCA2OCwgMTM2LCAxLCAyMjYsIDE3NywgMTM2LCAxLCAyMTcsIDExNCwgMTM2LCAxLCAyMjQsIAorICAgIDE0MCwgMTM2LCAxLCAyMTcsIDQyLCAxMzYsIDEsIDIyMywgMTAzLCAxMzYsIDEsIDIxNywgMTMsIDEzNiwgMSwgMjI2LCA5NCwgCisgICAgMTM2LCAxLCAyMTcsIDkyLCAxMzYsIDEsIDIyNCwgMjYsIDEzNiwgMSwgMjE3LCAyMSwgMTM2LCAxLCAyMjIsIDE1NSwgMTM2LCAKKyAgICAxLCAyNDksIDIwNywgMTM2LCAxLCAyMjEsIDIwNSwgMTM2LCAxLCAyNDksIDE1LCAxMzYsIDEsIDMsIDIyMSwgMCwgMTM2LCAKKyAgICAxLCAyMjEsIDAsIDEzNiwgMSwgMjQ3LCAxMTEsIDEzNiwgMSwgMjIyLCA4NywgMTM2LCAxLCAyNDksIDkyLCAxMzYsIDEsIAorICAgIDEwMSwgMTM2LCAxLCAyNDgsIDE2NywgMTM2LCAxLCAyMDgsIDEzNiwgMSwgMjMyLCA2MiwgMTM2LCAxLCAyMzEsIDE0NCwgCisgICAgMTM2LCAxLCAyMzIsIDE0MSwgMTM2LCAxLCAyMzEsIDIwNCwgMTM2LCAxLCAxNTUsIDEzNiwgMSwgMjUyLCAyMzcsIDEzNiwgCisgICAgMSwgMTg3LCAxMzYsIDEsIDI0MywgMTEyLCAxMzYsIDEsIDI1MiwgODQsIDEzNiwgMSwgMjI5LCAxMDgsIDEzNiwgMSwgMjQyLCAKKyAgICAxNzMsIDEzNiwgMSwgMjUxLCAyNDgsIDEzNiwgMSwgMjI4LCAyMDIsIDEzNiwgMSwgMjQzLCAxNjIsIDEzNiwgMSwgMjUyLCAKKyAgICAxNDQsIDEzNiwgMSwgMjI5LCAxOTgsIDEzNiwgMSwgMjQzLCA0LCAxMzYsIDEsIDI1MiwgNDEsIDEzNiwgMSwgMjI5LCAzNywgCisgICAgMTM2LCAxLCAxOTYsIDEzNiwgMSwgMjMzLCAxOTYsIDEzNiwgMSwgMjMzLCA5OSwgMTM2LCAxLCAyMzQsIDI1LCAxMzYsIDEsIAorICAgIDIzMywgMTM2LCAxMzYsIDEsIDMsIDE4NCwgMTM2LCAxLCAxODQsIDEzNiwgMSwgMywgMjE3LCAyMDAsIDEzNiwgMSwgMjE3LCAKKyAgICAyMDAsIDEzNiwgMSwgMywgMjE3LCAyMzEsIDEzNiwgMSwgMjE3LCAyMzEsIDEzNiwgMSwgMjAzLCAxMzYsIDEsIDIyNywgCisgICAgMTQ3LCAxMzYsIDEsIDIyNywgMjIsIDEzNiwgMSwgMjI3LCAyMTYsIDEzNiwgMSwgMjI3LCA3NSwgMTM2LCAxLCAzLCAyMTksIAorICAgIDcsIDEzNiwgMSwgMjE5LCA3LCAxMzYsIDEsIDIxOCwgMjA0LCAxMzYsIDEsIDIxOCwgMjI3LCAxMzYsIDEsIDIxOCwgMTg3LCAKKyAgICAxMzYsIDEsIDIwNywgMTM2LCAxLCAyMTksIDU2LCAxMzYsIDEsIDMsIDE3NSwgMTM2LCAxLCAzLCAyMzYsIDE4NCwgMzYsIAorICAgIDIzNiwgMjAyLCAyMTksIDcwLCAyMjQsIDksIDc4LCAzNiwgMjM2LCAyMDIsIDIyNSwgNzIsIDIyNCwgOSwgNzgsIDIzNiwgCisgICAgMjAyLCAyMTksIDcwLCAyMjQsIDksIDc4LCAyMzYsIDIwMiwgMjI1LCA3MiwgMjI0LCA5LCA3OCwgMTM2LCAyMzcsIDEzOCwgCisgICAgNzgsIDEzNiwgMjE5LCA3MCwgMjM3LCAxMzgsIDc4LCAxMzYsIDI0OCwgMjM0LCAyMTcsIDIxMywgMjM2LCAyMDIsIDUxLCAKKyAgICAyNDIsIDEyMSwgNTIsIDEsIDMsIDYwLCA1MiwgMSwgNjAsIDUyLCAxLCAzLCA3MiwgNTIsIDEsIDcyLCA1MiwgMSwgMywgNjgsIAorICAgIDUyLCAxLCA2OCwgNTIsIDEsIDMsIDczLCA1MiwgMSwgNzMsIDUyLCAxLCAzLCA3NCwgNTIsIDEsIDc0LCA1MiwgMSwgMTc1LCAKKyAgICA1MiwgMSwgMjQ1LCAwLCA1MiwgMSwgMjM2LCAxMTMsIDUyLCAxLCAyNDQsIDEwMywgNTIsIDEsIDIzNiwgNywgNTIsIDEsIAorICAgIDI0NCwgMTcsIDUyLCAxLCAyMzYsIDE4NCwgNTIsIDEsIDI0NCwgMTkxLCA1MiwgMSwgMjM2LCA1NywgNTIsIDEsIDI0NCwgCisgICAgNjgsIDUyLCAxLCAyMjYsIDE3NywgNTIsIDEsIDIxNywgMTE0LCA1MiwgMSwgMjI0LCAxNDAsIDUyLCAxLCAyMTcsIDQyLCAKKyAgICA1MiwgMSwgMjIzLCAxMDMsIDUyLCAxLCAyMTcsIDEzLCA1MiwgMSwgMjI2LCA5NCwgNTIsIDEsIDIxNywgOTIsIDUyLCAxLCAKKyAgICAyMjQsIDI2LCA1MiwgMSwgMjE3LCAyMSwgNTIsIDEsIDIyMiwgMTU1LCA1MiwgMSwgMjQ5LCAyMDcsIDUyLCAxLCAyMjEsIAorICAgIDIwNSwgNTIsIDEsIDI0OSwgMTUsIDUyLCAxLCAzLCAyMjEsIDAsIDUyLCAxLCAyMjEsIDAsIDUyLCAxLCAyNDcsIDExMSwgCisgICAgNTIsIDEsIDIyMiwgODcsIDUyLCAxLCAyNDksIDkyLCA1MiwgMSwgMTAxLCA1MiwgMSwgMjQ4LCAxNjcsIDUyLCAxLCAyMDgsIAorICAgIDUyLCAxLCAyMzIsIDYyLCA1MiwgMSwgMjMxLCAxNDQsIDUyLCAxLCAyMzIsIDE0MSwgNTIsIDEsIDIzMSwgMjA0LCA1MiwgMSwgCisgICAgMTU1LCA1MiwgMSwgMjUyLCAyMzcsIDUyLCAxLCAxODcsIDUyLCAxLCAyNDMsIDExMiwgNTIsIDEsIDI1MiwgODQsIDUyLCAxLCAKKyAgICAyMjksIDEwOCwgNTIsIDEsIDI0MiwgMTczLCA1MiwgMSwgMjUxLCAyNDgsIDUyLCAxLCAyMjgsIDIwMiwgNTIsIDEsIDI0MywgCisgICAgMTYyLCA1MiwgMSwgMjUyLCAxNDQsIDUyLCAxLCAyMjksIDE5OCwgNTIsIDEsIDI0MywgNCwgNTIsIDEsIDI1MiwgNDEsIDUyLCAKKyAgICAxLCAyMjksIDM3LCA1MiwgMSwgMTk2LCA1MiwgMSwgMjMzLCAxOTYsIDUyLCAxLCAyMzMsIDk5LCA1MiwgMSwgMjM0LCAyNSwgCisgICAgNTIsIDEsIDIzMywgMTM2LCA1MiwgMSwgMywgMTg0LCA1MiwgMSwgMTg0LCA1MiwgMSwgMywgMjE3LCAyMDAsIDUyLCAxLCAKKyAgICAyMTcsIDIwMCwgNTIsIDEsIDMsIDIxNywgMjMxLCA1MiwgMSwgMjE3LCAyMzEsIDUyLCAxLCAyMDMsIDUyLCAxLCAyMjcsIAorICAgIDE0NywgNTIsIDEsIDIyNywgMjIsIDUyLCAxLCAyMjcsIDIxNiwgNTIsIDEsIDIyNywgNzUsIDUyLCAxLCAzLCAyMTksIDcsIAorICAgIDUyLCAxLCAyMTksIDcsIDUyLCAxLCAyMTgsIDIwNCwgNTIsIDEsIDIxOCwgMjI3LCA1MiwgMSwgMjE4LCAxODcsIDUyLCAxLCAKKyAgICAyMDcsIDUyLCAxLCAyMTksIDU2LCA1MiwgMSwgMywgMTc1LCA1MiwgMSwgMywgMjM2LCAxODQsIDUyLCAxLCAyMTksIDE4OSwgCisgICAgNTIsIDEsIDIxOSwgOTQsIDUyLCAxLCAyMTksIDE2NSwgNTIsIDEsIDIxOSwgNzIsIDUyLCAyMzMsIDE5MywgMjQ4LCAxNDUsIAorICAgIDIzNiwgMjAyLCAyMjgsIDIyMywgMjI0LCA5LCA3OCwgNTIsIDIzNywgMTM4LCA3OCwgNTIsIDIxOSwgNzAsIDIzNywgMTM4LCAKKyAgICA3OCwgNTIsIDI0OCwgMjM0LCAyMzYsIDMwLCAyMDAsIDEsIDI1MywgMjA0LCAyMDAsIDEsIDIzMCwgNTksIDIwMCwgMSwgCisgICAgMTg5LCAyMDAsIDEsIDI0NiwgNzQsIDIwMCwgMSwgMjUwLCA0NiwgMjAwLCAxLCAyMjIsIDIwMSwgMjAwLCAxLCAyMDcsIAorICAgIDIwMCwgMSwgMTUzLCAyMDAsIDEsIDI0NSwgNjcsIDIwMCwgMSwgMjM3LCAxNywgMjAwLCAxLCAyNDMsIDIyNSwgMjAwLCAxLCAKKyAgICAyMzcsIDEyNiwgMjAwLCAxLCAyMjgsIDE2MywgMjAwLCAxLCAyMTgsIDE1MSwgMjAwLCAxLCAyMTcsIDgxLCAyMDAsIDEsIAorICAgIDI1MSwgNzAsIDIwMCwgMSwgMjI1LCAyNywgMjAwLCAxLCAxNTIsIDIwMCwgMSwgMjE3LCAxNTcsIDIwMCwgMSwgMjUxLCAKKyAgICAyMDIsIDIwMCwgMSwgMTk4LCAyMDAsIDEsIDYwLCAyMDAsIDEsIDc0LCAyMDAsIDEsIDczLCAyMDAsIDEsIDI0NiwgMjM5LCAKKyAgICAyMDAsIDEsIDI1NCwgMTk2LCAyMDAsIDEsIDI0NiwgMjM3LCAyMDAsIDEsIDI1MywgMjMyLCAyMDAsIDEsIDIzMCwgODYsIAorICAgIDIwMCwgMSwgMjU0LCAxMzEsIDIwMCwgMSwgMjQ2LCAxOTcsIDIwMCwgMSwgMjU0LCAxMjMsIDIwMCwgMSwgMjQ2LCAxODUsIAorICAgIDIwMCwgMSwgMjQ2LCAxNDgsIDIwMCwgMSwgNzIsIDIwMCwgMSwgNjgsIDIwMCwgMSwgMjM3LCAxMzcsIDIwMCwgMSwgMjE2LCAKKyAgICAyMTYsIDIwMCwgMSwgMjMyLCAxMTcsIDIwMCwgMSwgMjQ0LCA3MiwgMjAwLCAxLCAyMzgsIDAsIDIyLCAxLCAyMzYsIDg2LCAKKyAgICAyMiwgMSwgMjIzLCAyMTEsIDIyLCAxLCAyMzYsIDc5LCAyMiwgMSwgMjMyLCA1NSwgMjIsIDEsIDIzMiwgNTMsIDIyLCAxLCAKKyAgICAyMzIsIDUyLCAyMiwgMSwgMjIxLCAxOTIsIDIyLCAxLCAyMjMsIDIwMCwgMjIsIDEsIDIyNywgMTQwLCAyMiwgMSwgMjI3LCAKKyAgICAxMzUsIDIyLCAxLCAyMjcsIDEzMiwgMjIsIDEsIDIyNywgMTI1LCAyMiwgMSwgMjI3LCAxMjAsIDIyLCAxLCAyMjcsIDExNSwgCisgICAgMjIsIDEsIDIyNywgMTI2LCAyMiwgMSwgMjI3LCAxMzgsIDIyLCAxLCAyMzMsIDE4NywgMjIsIDEsIDIyOSwgOTksIDIyLCAxLCAKKyAgICAyMjMsIDIwOCwgMjIsIDEsIDIyOSwgODgsIDIyLCAxLCAyMjQsIDEwNCwgMjIsIDEsIDIyMywgMjA1LCAyMiwgMSwgMjM4LCAKKyAgICAyMiwgMjIsIDEsIDI1MCwgMjMwLCAyMiwgMSwgMjIzLCAyMTUsIDIyLCAxLCAyNTEsIDI5LCAyMiwgMSwgMjM2LCAxMjgsIAorICAgIDIyLCAxLCAyMjIsIDAsIDIyLCAxLCAyMjksIDEyNywgMjIsIDEsIDI0MywgMTA2LCAyMiwgMSwgNjAsIDIyLCAxLCAyNTQsIAorICAgIDIzNCwgMjIsIDEsIDE4NCwgMjIsIDEsIDIxOCwgNjUsIDIyLCAxLCAyNDYsIDE2OCwgMjIsIDEsIDczLCAyMiwgMSwgMjE4LCAKKyAgICAxNiwgMjIsIDEsIDIxOCwgMjUsIDIyLCAxLCA3NCwgMjIsIDEsIDIxOSwgNywgMjIsIDEsIDIxOSwgNCwgMjIsIDEsIDIzMCwgCisgICAgMTY3LCAyMiwgMSwgMjE3LCAyMzEsIDIyLCAxLCA2OCwgMjIsIDEsIDIxOCwgMjE5LCAyMiwgMSwgMjE4LCAyMjcsIDIyLCAxLCAKKyAgICAyMTgsIDIwNCwgMjIsIDEsIDIxNywgMjAwLCAyMiwgMSwgMjQ2LCAxMTUsIDIyLCAxLCAyMTcsIDI1MCwgMjIsIDEsIDcyLCAKKyAgICAyMiwgMjQ1LCAxODUsIDIyLCAxLCAyMjMsIDIwOSwgMjIsIDEsIDIzMiwgNDUsIDIyLCAxLCAyMzIsIDQ3LCAyMiwgMSwgCisgICAgMjMyLCA1MCwgMjIsIDEsIDIyNywgMTMzLCAyMiwgMSwgMjI3LCAxMTQsIDIyLCAxLCAyMjcsIDEyMiwgMjIsIDEsIDIyNywgCisgICAgMTI3LCAyMiwgMSwgMjI3LCAxMTIsIDIyLCAxLCAyMzMsIDE4MCwgMjIsIDEsIDIzMywgMTc3LCAyMiwgMSwgMjMzLCAxODEsIAorICAgIDIyLCAxLCAyMzYsIDIyMCwgMjIsIDEsIDIyOSwgOTQsIDIyLCAxLCAyMjksIDgwLCAyMiwgMSwgMjI5LCA4NiwgMjIsIDEsIAorICAgIDIyOSwgODMsIDIyLCAxLCAyMjksIDk3LCAyMiwgMSwgMjI5LCA4MSwgMjIsIDEsIDIzNiwgMjE4LCAyMiwgMSwgMjM2LCAKKyAgICAyMTYsIDIyLCAxLCAyMjQsIDk3LCAyMiwgMSwgMjI0LCA5NSwgMjIsIDEsIDIyNCwgODcsIDIyLCAxLCAyMjQsIDkyLCAyMiwgCisgICAgMSwgMjI0LCAxMDIsIDIyLCAxLCAyMzAsIDEsIDIyLCAxLCAyMjMsIDIxMiwgMjIsIDEsIDIxOCwgNiwgMjIsIDEsIDIxOCwgCisgICAgMiwgMjIsIDEsIDIxOCwgMywgMjIsIDEsIDIzNiwgMjE5LCAyMiwgMSwgMjIzLCAyMTMsIDIyLCAxLCAyMTgsIDEyLCAyMiwgCisgICAgMSwgMjE3LCAyMjUsIDIyLCAxLCAyMTcsIDIyNCwgMjIsIDEsIDIxNywgMjI3LCAyMiwgMSwgMjE3LCAxOTEsIDIyLCAxLCAKKyAgICAyMTcsIDE5MiwgMjIsIDEsIDIxNywgMTk1LCAyMiwgMSwgMjU0LCA2MCwgMjIsIDEsIDI1NCwgNTQsIDk4LCAyNTQsIDExMiwgCisgICAgMjM1LCAzMywgNzgsIDk4LCAyNTQsIDExMiwgMjI3LCAxNjAsIDc4LCA5OCwgMjU0LCAxMTIsIDEzMSwgNzgsIDk4LCAyNTQsIAorICAgIDExMiwgMTI0LCA3OCwgOTgsIDI1NCwgMTEyLCAxNDgsIDc4LCA5OCwgMjU0LCAxMTIsIDI0NSwgMTE2LCA3OCwgOTgsIDI1NCwgCisgICAgMTEyLCAyMjEsIDEyMCwgNzgsIDk4LCAyNTQsIDExMiwgMjMzLCAxOTMsIDc4LCA5OCwgMjU0LCAxMTIsIDI1MiwgMjksIDc4LCAKKyAgICA5OCwgMjU0LCAxMTIsIDI0NSwgMTc4LCA3OCwgOTgsIDI1NCwgMTEyLCAyMjYsIDkwLCA3OCwgOTgsIDI1NCwgMTEyLCAyMjEsIAorICAgIDI1MiwgNzgsIDk4LCAyNTQsIDExMiwgMjQ1LCAxMTAsIDc4LCA5OCwgMjU0LCAxMTIsIDI0MywgMTUyLCA3OCwgOTgsIDI1NCwgCisgICAgMTEyLCAyNDcsIDksIDc4LCA5OCwgMjU0LCAxMTIsIDIzNCwgODcsIDc4LCAyMDAsIDEsIDI1MSwgMjQ4LCAyMDAsIDEsIAorICAgIDIxNywgNDIsIDIwMCwgMSwgMjM3LCA5OCwgMjAwLCAxLCAyNDQsIDE3LCAyMDAsIDEsIDI0NiwgMjUwLCAyMDAsIDEsIDI0NiwgCisgICAgMTgzLCAyMDAsIDEsIDIzMCwgMTI3LCAyMDAsIDEsIDIzMCwgMTMxLCAyMDAsIDEsIDIzNywgMTU2LCAyMDAsIDEsIDI1NCwgCisgICAgMTE0LCAyMDAsIDEsIDIzNywgMTk4LCAyMDAsIDEsIDIyMCwgNjgsIDIwMCwgMSwgMjM3LCAyMzgsIDIwMCwgMSwgMjMyLCAKKyAgICAxMDEsIDIwMCwgMSwgMjU0LCAxOTAsIDIwMCwgMSwgMjUzLCAyMjgsIDIwMCwgMSwgMjU0LCAxNDAsIDIwMCwgMSwgMjMwLCAKKyAgICAxNDYsIDIwMCwgMSwgMjMwLCAxMzMsIDIwMCwgMSwgMjM3LCAxOTUsIDIwMCwgMzksIDEsIDIzMCwgNTksIDIwMCwgMzksIDEsIAorICAgIDIyMiwgMjAxLCAyMDAsIDM5LCAxLCAyMzcsIDE3LCAyMDAsIDM5LCAxLCAyNDMsIDIyNSwgOSwgMjE0LCAyMjIsIDIwMSwgOSwgCisgICAgMjE0LCAyMTgsIDIxMywgOSwgMjE0LCAyMTgsIDEzMSwgOSwgMjE0LCAyNTEsIDIxNCwgOSwgMjE0LCAyMjMsIDM3LCA5LCAKKyAgICAyMTQsIDI0MiwgMTExLCA5LCAyMTQsIDI0MiwgMTE1LCA5LCAyMTQsIDI0MiwgMTc5LCA5LCAyMTQsIDI0MiwgMTEyLCA5LCAKKyAgICAyMTQsIDIyMiwgMjA0LCA5LCAyMTQsIDI0MiwgMTE0LCA5LCAyMTQsIDI0MiwgMTEwLCA5LCAyMTQsIDI0MiwgMTc3LCA5LCAKKyAgICAyMTQsIDI0MiwgMTEzLCA5LCAyMTQsIDI0MiwgMTA5LCA5LCAyMTQsIDIwNywgOSwgMjE0LCAyNDMsIDIyNSwgOSwgMjE0LCAKKyAgICAxOTgsIDksIDIxNCwgMjMwLCA1OSwgOSwgMjE0LCAyMjQsIDAsIDksIDIxNCwgMjUwLCA0NiwgOSwgMjE0LCAyNDIsIDExNiwgCisgICAgOSwgMjE0LCAyNDMsIDEyMiwgOSwgMjE0LCAyMjIsIDIxMywgOSwgMjE0LCAyMjMsIDIyLCA5LCAyMTQsIDIyMywgMTY4LCA5LCAKKyAgICAyMTQsIDIyNSwgMzIsIDksIDIxNCwgMjI5LCAyMDAsIDksIDIxNCwgMjI4LCAxNjUsIDksIDIxNCwgMjIxLCAxNDAsIDksIAorICAgIDIxNCwgMjIyLCAyMDMsIDksIDIxNCwgMjIzLCAzMCwgOSwgMjE0LCAyNDIsIDEyMywgOSwgMjE0LCAyNDIsIDEwOCwgOSwgCisgICAgMjE0LCAyMjksIDE0MywgOSwgMjE0LCAyMjgsIDE2MywgNTIsIDEsIDMsIDIzNiwgNywgNTIsIDEsIDMsIDIyNCwgMTQwLCAKKyAgICA1MiwgMSwgMywgMjIzLCAxMDMsIDUyLCAxLCAzLCAxMDEsIDUyLCAxLCAzLCAyMzEsIDE0NCwgNTIsIDEsIDMsIDE1NSwgNTIsIAorICAgIDEsIDMsIDI0MywgMTEyLCA1MiwgMSwgMywgMjQyLCAxNzMsIDUyLCAxLCAzLCAyNDMsIDE2MiwgNTIsIDEsIDMsIDI0MywgNCwgCisgICAgNTIsIDEsIDMsIDIzMywgOTksIDUyLCAxLCAzLCAyMDMsIDUyLCAxLCAzLCAyMjcsIDE0NywgNTIsIDEsIDMsIDIyNywgMjIsIAorICAgIDUyLCAxLCAzLCAyMjcsIDIxNiwgNTIsIDEsIDMsIDIyNywgNzUsIDgyLCAyMiwgMjM2LCA4NiwgODIsIDIyLCAyMzIsIDU1LCAKKyAgICA4MiwgMjIsIDIyMSwgMTkyLCA4MiwgMjIsIDIyNywgMTQwLCA4MiwgMjIsIDIzMywgMTg3LCA4MiwgMjIsIDIyOSwgOTksIAorICAgIDgyLCAyMiwgMjI0LCAxMDQsIDgyLCAyMiwgMjM4LCAyMiwgODIsIDIyLCAyNTAsIDIzMCwgODIsIDIyLCAyNTEsIDI5LCA4MiwgCisgICAgMjIsIDIzNiwgMTI4LCA4MiwgMjIsIDIyMiwgMCwgODIsIDIyLCAyMjksIDEyNywgODIsIDIyLCAyNDMsIDEwNiwgODIsIDIyLCAKKyAgICAyMzYsIDg3LCA2MCwgODIsIDIyLCAyMzIsIDU2LCA2MCwgODIsIDIyLCAyMjEsIDE5MywgNjAsIDgyLCAyMiwgMjI3LCAxNDEsIAorICAgIDYwLCA4MiwgMjIsIDIzMywgMTg4LCA2MCwgODIsIDIyLCAyMjksIDEwMCwgNjAsIDgyLCAyMiwgMjI0LCAxMDUsIDYwLCA4MiwgCisgICAgMjIsIDIzOCwgMjMsIDYwLCA4MiwgMjIsIDI1MCwgMjMxLCA2MCwgODIsIDIyLCAyNTEsIDMwLCA2MCwgODIsIDIyLCAyMzYsIAorICAgIDEyOSwgNjAsIDgyLCAyMiwgMjIyLCAxLCA2MCwgODIsIDIyLCAyMjksIDEyOCwgNjAsIDgyLCAyMiwgMjQzLCAxMDcsIDYwLCAKKyAgICA4MiwgMjIsIDI1MCwgMjMxLCA2OCwgODIsIDIzNiwgMzQsIDEyNiwgMjMwLCAxNTYsIDgyLCAyMzYsIDM0LCAxMjYsIDE0MiwgCisgICAgMjQyLCAxNzMsIDgyLCAxMzgsIDEwNywgODIsIDEzOCwgMTAzLCA4MiwgMTM4LCAxNjAsIDgyLCAxMzgsIDE1NCwgODIsIAorICAgIDEzOCwgMTc0LCA4MiwgMTM4LCAxODIsIDgyLCAxMzgsIDE5MSwgODIsIDEzOCwgMTg1LCA4MiwgMTM4LCAxOTAsIDgyLCAKKyAgICAxMzgsIDIyMiwgNjUsIDgyLCAxMzgsIDIzMywgMTE3LCA4MiwgMTM4LCAyNDUsIDE3OSwgODIsIDEzOCwgMjE4LCAyNDAsIAorICAgIDgyLCAxMzgsIDIxOCwgMTc5LCA4MiwgMTM4LCAyMzMsIDIzOCwgODIsIDEzOCwgMjQ3LCA4LCA4MiwgMTM4LCAyMjMsIDY4LCAKKyAgICA4MiwgMTM4LCAyMjMsIDEzOSwgODIsIDEzOCwgMjQzLCAxNjgsIDgyLCAxMzgsIDIyNCwgMjMsIDgyLCAxMzgsIDIzMiwgCisgICAgMjE4LCA4MiwgMTM4LCAyMjMsIDI0OCwgODIsIDEzOCwgMjQ1LCAxODQsIDgyLCAxMzgsIDI1MCwgMTU0LCA4MiwgMTM4LCAKKyAgICAyMzUsIDE4MSwgODIsIDEzOCwgMjI3LCAxNzgsIDgyLCAxMzgsIDI1MSwgMTU5LCA4MiwgMTM4LCAyMjMsIDEwNiwgODIsIAorICAgIDEzOCwgMjIzLCA1NiwgODIsIDEzOCwgMjQ2LCAxNzYsIDgyLCAxMzgsIDIyNywgMTcwLCA4MiwgMTM4LCAyNTQsIDE1MywgCisgICAgODIsIDEzOCwgMjQ1LCAyMDgsIDgyLCAxMzgsIDIyNywgMTY4LCA4MiwgMTM4LCAyMjUsIDczLCA4MiwgMTM4LCAyMjcsIAorICAgIDIxNSwgMzQsIDEzOCwgMjI4LCA4MSwgMzQsIDEzOCwgMjM2LCAxMDMsIDM0LCAxMzgsIDIyNiwgMTA3LCAzNCwgMTM4LCAKKyAgICAyMzYsIDMwLCAzNCwgNTQsIDIyMiwgNjYsIDIzMCwgMTM5LCA4NCwgMjIzLCAyMjcsIDM0LCA1NCwgMjIwLCAyMjAsIDIzMCwgCisgICAgMTM5LCA4NCwgMjIzLCAyMjcsIDM0LCA1NCwgMjIxLCAyNDYsIDIzMCwgMTM5LCA4NCwgMjIzLCAyMjcsIDM0LCA1NCwgMjQ1LCAKKyAgICAxMjAsIDIzMCwgMTM5LCA4NCwgMjIzLCAyMjcsIDM0LCA1NCwgMjQ1LCAxOTcsIDIzMCwgMTM5LCA4NCwgMjIzLCAyMjcsIAorICAgIDM0LCA1NCwgMjI0LCA3MCwgMjMwLCAxMzksIDg0LCAyMjMsIDIyNywgMzQsIDU0LCAyMjUsIDM5LCAyMzAsIDEzOSwgODQsIAorICAgIDIyMywgMjI3LCAzNCwgNTQsIDI0NiwgMjI4LCAyMzAsIDEzOSwgODQsIDIyMywgMjI3LCAyMjksIDIyMSwgNTUsIDM0LCA1NCwgCisgICAgMjIwLCAyMjAsIDEwNywgMzQsIDU0LCAyMjAsIDIyMCwgMTAzLCAzNCwgNTQsIDIyMCwgMjIwLCAxNjAsIDM0LCA1NCwgMjIwLCAKKyAgICAyMjAsIDE1NCwgMzQsIDU0LCAyMjAsIDIyMCwgMTc0LCAzNCwgNTQsIDIyMCwgMjIwLCAxODIsIDM0LCA1NCwgMjIwLCAyMjAsIAorICAgIDE5MSwgMzQsIDU0LCAyMjAsIDIyMCwgMTg1LCAzNCwgNTQsIDIyMCwgMjIwLCAxOTAsIDM0LCA1NCwgMjIxLCAyNDUsIDM0LCAKKyAgICA1NCwgMjIxLCAyNDYsIDEwNywgMzQsIDU0LCAyMjEsIDI0NiwgMTAzLCAzNCwgNTQsIDIyMSwgMjQ2LCAxNjAsIDM0LCA1NCwgCisgICAgMjIxLCAyNDYsIDE1NCwgMzQsIDU0LCAyMjEsIDI0NiwgMTc0LCAzNCwgMjIsIDIzNiwgODYsIDM0LCAyMiwgMjMyLCA1NSwgCisgICAgMzQsIDIyLCAyMjEsIDE5MiwgMzQsIDIyLCAyMjcsIDE0MCwgMzQsIDIyLCAyMzMsIDE4NywgMzQsIDIyLCAyMjksIDk5LCAKKyAgICAzNCwgMjIsIDIyNCwgMTA0LCAzNCwgMjIsIDIzOCwgMjIsIDM0LCAyMiwgMjUwLCAyMzAsIDM0LCAyMiwgMjUxLCAyOSwgMzQsIAorICAgIDIyLCAyMzYsIDEyOCwgMzQsIDIyLCAyMjIsIDAsIDM0LCAyMiwgMjI5LCAxMjcsIDM0LCAyMiwgMjQzLCAxMDYsIDM0LCAyMiwgCisgICAgMjM2LCA4NywgNjAsIDM0LCAyMiwgMjMyLCA1NiwgNjAsIDM0LCAyMiwgMjIxLCAxOTMsIDYwLCAzNCwgMjIsIDIyNywgMTQxLCAKKyAgICA2MCwgMzQsIDIyLCAyMzMsIDE4OCwgNjAsIDM0LCAyMiwgMjI5LCAxMDAsIDYwLCAzNCwgMjIsIDIyNCwgMTA1LCA2MCwgMzQsIAorICAgIDIyLCAyMzgsIDIzLCA2MCwgMzQsIDIyLCAyNTAsIDIzMSwgNjAsIDM0LCAyMiwgMjUxLCAzMCwgNjAsIDM0LCAyMiwgMjM2LCAKKyAgICAxMjksIDYwLCAzNCwgMjIsIDIyMiwgMSwgNjAsIDM0LCAyMiwgMjI5LCAxMjgsIDYwLCAzNCwgMjIsIDI0MywgMTA3LCA2MCwgCisgICAgMzQsIDIzNiwgMzQsIDEyNiwgMjUxLCA2MSwgMzQsIDIzNiwgMzQsIDEyNiwgMjM3LCA0MCwgMzQsIDIyLCAyMzgsIDIzLCAKKyAgICA2OCwgMjM2LCAzNCwgMjIzLCAxNTksIDEwMCwgMzQsIDEzOCwgMTA3LCAzNCwgMTM4LCAxMDMsIDM0LCAxMzgsIDE2MCwgMzQsIAorICAgIDEzOCwgMTU0LCAzNCwgMTM4LCAxNzQsIDM0LCAxMzgsIDE4MiwgMzQsIDEzOCwgMTkxLCAzNCwgMTM4LCAxODUsIDM0LCAKKyAgICAxMzgsIDE5MCwgMzQsIDEzOCwgMjIyLCA2NSwgMzQsIDEzOCwgMjMzLCAxMTcsIDM0LCAxMzgsIDI0NSwgMTc5LCAzNCwgCisgICAgMTM4LCAyMTgsIDI0MCwgMzQsIDEzOCwgMjE4LCAxNzksIDM0LCAxMzgsIDIzMywgMjM4LCAzNCwgMTM4LCAyNDcsIDgsIDM0LCAKKyAgICAxMzgsIDIyMywgNjgsIDM0LCAxMzgsIDIyMywgMTM5LCAzNCwgMTM4LCAyNDMsIDE2OCwgMzQsIDEzOCwgMjI0LCAyMywgMzQsIAorICAgIDEzOCwgMjMyLCAyMTgsIDM0LCAxMzgsIDIyMywgMjQ4LCAzNCwgMTM4LCAyNDUsIDE4NCwgMzQsIDEzOCwgMjUwLCAxNTQsIAorICAgIDM0LCAxMzgsIDIzNSwgMTgxLCAzNCwgMTM4LCAyMjYsIDg4LCAzNCwgMTM4LCAyMzQsIDg5LCAzNCwgMTM4LCAyNDUsIDIxNiwgCisgICAgMzQsIDEzOCwgMjIzLCA3OSwgMzQsIDEzOCwgMjQ2LCA5NywgMzQsIDEzOCwgMjI4LCAyMzMsIDM0LCAxMzgsIDI1MywgMjM2LCAKKyAgICAzNCwgMTM4LCAyMzcsIDEzOSwgMzQsIDEzOCwgMjI3LCAxNjgsIDM0LCAxMzgsIDI1MCwgMTI3LCAzNCwgMTM4LCAyNTAsIAorICAgIDExOCwgMzQsIDEzOCwgMjQzLCA5OSwgMzQsIDEzOCwgMjUxLCA4NCwgMzQsIDEzOCwgMjM0LCAyMzksIDM0LCAxMzgsIDIzNSwgCisgICAgMTE1LCAzNCwgMTM4LCAyMjcsIDEwOSwgMzQsIDEzOCwgMjM0LCAxOSwgMzQsIDEzOCwgMjI3LCAxODksIDM0LCAxMzgsIAorICAgIDIyMywgMTA2LCAzNCwgMTM4LCAyMjMsIDU2LCAzNCwgMTM4LCAyNDYsIDE3NiwgMzQsIDEzOCwgMjI3LCAxNzAsIDM0LCAKKyAgICAxMzgsIDI1NCwgMTUzLCAzNCwgMTM4LCAyMzIsIDQyLCAzNCwgNTQsIDIyMSwgMjQ2LCAxODIsIDM0LCA1NCwgMjIxLCAyNDYsIAorICAgIDE5MSwgMzQsIDU0LCAyMjEsIDI0NiwgMTg1LCAzNCwgNTQsIDIyMSwgMjQ2LCAxOTAsIDM0LCA1NCwgMjQ1LCAxMTksIDM0LCAKKyAgICA1NCwgMjQ1LCAxMjAsIDEwNywgMzQsIDU0LCAyNDUsIDEyMCwgMTAzLCAzNCwgNTQsIDI0NSwgMTIwLCAxNjAsIDM0LCA1NCwgCisgICAgMjQ1LCAxMjAsIDE1NCwgMzQsIDU0LCAyNDUsIDEyMCwgMTc0LCAzNCwgNTQsIDI0NSwgMTIwLCAxODIsIDM0LCA1NCwgMjQ1LCAKKyAgICAxMjAsIDE5MSwgMzQsIDU0LCAyNDUsIDEyMCwgMTg1LCAzNCwgNTQsIDI0NSwgMTIwLCAxOTAsIDM0LCA1NCwgMjQ1LCAxOTYsIAorICAgIDk4LCAxODMsIDE2LCAzNSwgMjM3LCAxMTksIDk4LCAxODMsIDE2LCAzNSwgMjQ1LCAyMjcsIDk4LCAxODMsIDE2LCAzNSwgCisgICAgMjM0LCA2OSwgOTgsIDE4MywgMTYsIDM1LCAyNTQsIDcxLCA5OCwgMTgzLCAxNiwgMzUsIDIzNCwgNDUsIDk4LCAxODMsIDE2LCAKKyAgICAzNSwgMjM3LCAzOCwgOTgsIDE4MywgMTYsIDM1LCAyMzcsIDM5LCA5OCwgMTgzLCAxNiwgMzUsIDI1MywgMjI5LCA5OCwgCisgICAgMTgzLCAxNiwgMzUsIDIyNSwgNTMsIDk4LCAxODMsIDE2LCAzNSwgMjMwLCAxNzAsIDk4LCAxODMsIDE2LCAzNSwgMjMxLCAKKyAgICAxNzUsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCA4NywgNDAsIDI0MywgMTIyLCA0MCwgMjQ2LCAxNDQsIDQwLCAyNDYsIDEwNSwgCisgICAgMjM1LCA0OSwgMjM1LCA2NiwgNTUsIDM0LCA1MiwgNjAsIDM0LCA1MiwgNzIsIDM0LCA1MiwgNjgsIDM0LCA1MiwgNzMsIDM0LCAKKyAgICA1MiwgNzQsIDM0LCA1MiwgMTc1LCAzNCwgNTIsIDIzNiwgMTEzLCAzNCwgNTIsIDIzNiwgNywgMzQsIDUyLCAyMzYsIDE4NCwgCisgICAgMzQsIDUyLCAyMzYsIDU3LCAzNCwgNTIsIDIyNiwgMTc3LCAzNCwgNTIsIDIyNCwgMTQwLCAzNCwgNTIsIDIyMywgMTAzLCAKKyAgICAzNCwgNTIsIDIyNiwgOTQsIDM0LCA1MiwgMjI0LCAyNiwgMzQsIDUyLCAyMjIsIDE1NSwgMzQsIDUyLCAyMjEsIDIwNSwgMzQsIAorICAgIDUyLCAyMjEsIDAsIDM0LCA1MiwgMjIyLCA4NywgMzQsIDUyLCAxMDEsIDM0LCA1MiwgMjA4LCAzNCwgNTIsIDIzMiwgNjIsIAorICAgIDM0LCA1MiwgMjMxLCAxNDQsIDM0LCA1MiwgMjMyLCAxNDEsIDM0LCA1MiwgMjMxLCAyMDQsIDM0LCA1MiwgMTU1LCAzNCwgCisgICAgNTIsIDI0MywgMTEyLCAzNCwgNTIsIDI0MiwgMTczLCAzNCwgNTIsIDI0MywgMTYyLCAzNCwgNTIsIDI0MywgNCwgMzQsIDUyLCAKKyAgICAxOTYsIDM0LCA1MiwgMjMzLCAxOTYsIDM0LCA1MiwgMjMzLCA5OSwgMzQsIDUyLCAyMzQsIDI1LCAzNCwgNTIsIDIzMywgCisgICAgMTM2LCAzNCwgNTIsIDE4NCwgMzQsIDUyLCAyMTcsIDIwMCwgMzQsIDUyLCAyMTcsIDIzMSwgMzQsIDUyLCAyMDMsIDM0LCAKKyAgICA1MiwgMjI3LCAxNDcsIDM0LCA1MiwgMjI3LCAyMiwgMzQsIDUyLCAyMjcsIDIxNiwgMzQsIDUyLCAyMjcsIDc1LCAzNCwgNTIsIAorICAgIDIxOSwgNywgMzQsIDUyLCAyMTgsIDIwNCwgMzQsIDUyLCAyMTgsIDIyNywgMzQsIDUyLCAyMTgsIDE4NywgNDAsIDI1NCwgCisgICAgOTEsIDQwLCAyNTQsIDE1LCA0MCwgMjU0LCAxMDgsIDQwLCAyNTUsIDE2LCA0MCwgMjM3LCAxOTksIDQwLCAyMzcsIDE3MiwgCisgICAgNDAsIDIyMCwgNjYsIDQwLCAyNDYsIDEyNCwgNDAsIDI0NiwgMjQ4LCA0MCwgMjMwLCAxMzAsIDQwLCAyMzAsIDEyNSwgNDAsIAorICAgIDIzNiwgMjQyLCA0MCwgMjM2LCAyMTQsIDQwLCAyMzYsIDIxMiwgNDAsIDI0NCwgMjE3LCA0MCwgMjQ0LCAyMjUsIDQwLCAKKyAgICAyNDQsIDk0LCA0MCwgMjQ0LCA5MCwgNDAsIDIzNSwgMjAzLCA0MCwgMjQ0LCA4NCwgNDAsIDIzNiwgOTcsIDQwLCAyMzYsIAorICAgIDk2LCA0MCwgMjM2LCA5NSwgNDAsIDIzNiwgOTQsIDQwLCAyNDMsIDI1MSwgNDAsIDI0MywgMjUwLCA0MCwgMjM1LCAyNDQsIAorICAgIDQwLCAyMzUsIDI0NiwgNDAsIDIzNiwgMTgwLCA0MCwgMjM2LCAzMiwgNDAsIDIzNiwgMzksIDQwLCAyMjYsIDE2MiwgNDAsIAorICAgIDIyNiwgMTM2LCA0MCwgMjI0LCA4NSwgNDAsIDIyNSwgNTgsIDQwLCAyMjUsIDU3LCA0MCwgMjQ5LCAyMDQsIDQwLCAyNDksIAorICAgIDQ1LCA0MCwgMjQ4LCAxNDYsIDQwLCAyMjEsIDEzNCwgNDAsIDIzMiwgMjE0LCA0MCwgMjMxLCAxNzYsIDQwLCAyNDMsIDE5OSwgCisgICAgNDAsIDIzMCwgNDAsIDQwLCAyMzAsIDM5LCA0MCwgMjUyLCAyMzUsIDQwLCAyMjksIDEwNSwgNDAsIDIyOSwgNzQsIDQwLCAKKyAgICAyMjksIDc1LCA0MCwgMjUyLCA2NSwgNDAsIDI0MiwgMTcyLCA0MCwgMjQyLCAxNjgsIDQwLCAyNTEsIDIyMywgNDAsIDI0MiwgCisgICAgMTU1LCA0MCwgMjQzLCAxNDMsIDQwLCAyMjksIDE1MCwgNDAsIDIyOSwgMTc4LCA0MCwgMjQzLCAxMjksIDQwLCAyMjksIAorICAgIDE3NiwgNDAsIDIyOSwgMTg5LCA0MCwgMjUyLCAxMzMsIDQwLCAyMjksIDI3LCA0MCwgMjUyLCAzMSwgNDAsIDI0MiwgMjQ5LCAKKyAgICA0MCwgMjI5LCAyMiwgNDAsIDI0MiwgMjQ1LCA0MCwgMjQyLCAyNDYsIDQwLCAyMzQsIDk4LCA0MCwgMjM0LCA5NSwgNDAsIAorICAgIDIzNCwgMTAyLCA0MCwgMjM0LCA1OSwgNDAsIDIzNCwgODAsIDQwLCAyMzMsIDE2NywgNDAsIDIzMywgMTQ5LCA0MCwgMjMzLCAKKyAgICAxNDgsIDQwLCAyMzQsIDksIDQwLCAyMzQsIDcsIDQwLCAyMzQsIDEwLCA0MCwgMjE4LCA3NSwgNDAsIDIxOCwgNzMsIDQwLCAKKyAgICAyMTcsIDE5MCwgNDAsIDIyNywgODYsIDQwLCAyMjcsIDkwLCA0MCwgMjI3LCAzLCA0MCwgMjI2LCAyNTQsIDQwLCAyMjcsIAorICAgIDE4OCwgNDAsIDIyNywgMTg2LCA0MCwgMjE4LCAyMzksIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDIxNywgODQsIDk4LCAKKyAgICAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDEwNywgOTgsIDE4MywgMTYsIDM1LCAyNDIsIDE4NCwgMTAzLCA5OCwgMTgzLCAxNiwgCisgICAgMzUsIDI0MiwgMTg0LCAxNjAsIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDE1NCwgOTgsIDE4MywgMTYsIDM1LCAyNDIsIAorICAgIDE4NCwgMTc0LCA5OCwgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAxODIsIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDE5MSwgCisgICAgOTgsIDE4MywgMTYsIDM1LCAyNDIsIDE4NCwgMTg1LCA5OCwgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAxOTAsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQyLCAxODQsIDIyMiwgNjUsIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDI0NiwgMjExLCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0MiwgMTg0LCAyMjAsIDIyMSwgOTgsIDE4MywgMTYsIDM1LCAyNDIsIDE4NCwgMjIxLCAyNDcsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQyLCAxODQsIDI0NSwgMTExLCA5OCwgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAyNDUsIDIwMCwgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDIsIDE4NCwgMjI0LCA3NywgOTgsIDE4MywgMTYsIDM1LCAyNDIsIDE4NCwgMjI1LCA0MSwgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDIsIDE4NCwgMjQ2LCAyMzMsIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDIzMiwgMjksIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQyLCAxODQsIDIyMCwgMjE5LCA5OCwgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAyMjAsIDIxMywgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDIsIDE4NCwgMjIwLCAyMDksIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDIyMCwgMjEwLCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0MiwgMTg0LCAyMjAsIDIxNSwgNDAsIDI0MiwgMTc4LCA0MCwgMjQ5LCAyMDcsIDQwLCAyNTMsIDIzMiwgNDAsIAorICAgIDEzNSwgNDAsIDIzMCwgNzksIDQwLCAyMjksIDIwMSwgNDAsIDI0OCwgMTY5LCA0MCwgMjQ4LCAxNzAsIDIyMywgMjI2LCA0MCwgCisgICAgMjQ4LCAxNzAsIDI1MCwgODgsIDQwLCAyMzcsIDEzNywgNDAsIDI0NiwgMTQ3LCAyMzIsIDIxOSwgMjQzLCAxNDQsIDQwLCAKKyAgICAyNDYsIDE0NywgMjMyLCAyMTksIDIyMiwgMjIxLCA0MCwgMjQ2LCAxNDcsIDIzMiwgMjE5LCAyMjIsIDEzMiwgNDAsIDI0NiwgCisgICAgMTQ3LCAyMzIsIDIxOSwgMjM0LCA2LCA0MCwgMjUwLCAxMjAsIDQwLCAyMzAsIDQ0LCAyNTQsIDEzMywgNDAsIDIwOCwgNDAsIAorICAgIDIzMywgMTAwLCA2MCwgNDAsIDE5NiwgNDAsIDE3NSwgNDAsIDIzNiwgMTg3LCA0MCwgMjM0LCA0MSwgNDAsIDI0NCwgMjA1LCAKKyAgICA0MCwgMjUxLCAxNjEsIDQwLCAyMzYsIDE4NiwgNDAsIDIyOSwgMTQ0LCA0MCwgMjMyLCAxMTksIDQwLCAyMzMsIDEwMCwgCisgICAgMjQ2LCA3NCwgNDAsIDIzMywgMTAwLCAyNDUsIDY3LCA0MCwgMjMzLCAyMzAsIDQwLCAyMzYsIDE1MSwgNDAsIDI0MiwgMTE2LCAKKyAgICA0MCwgMjM2LCAxMTUsIDQwLCAyMzMsIDE5OCwgNDAsIDI0NCwgMTA1LCA0MCwgMjIxLCAyMDcsIDQwLCAyMzMsIDEwMCwgCisgICAgMTUzLCA0MCwgMjMzLCAxNDMsIDQwLCAyNDgsIDE3NywgNDAsIDIzNiwgNjgsIDQwLCAyNDUsIDE0MSwgNDAsIDIzMSwgMjE5LCAKKyAgICA0MCwgMjMzLCAxMDAsIDE4OSwgNDAsIDIzMywgMTQwLCA0MCwgMjUwLCAxODMsIDQwLCAyMzYsIDYyLCA0MCwgMjMzLCAxNDEsIAorICAgIDIyMywgMjI2LCA0MCwgMjUwLCAxODQsIDIyMywgMjI2LCA0MCwgMjM0LCAxODcsIDIyMywgMjI2LCA0MCwgMjM2LCA2MywgCisgICAgMjIzLCAyMjYsIDQwLCAyMzMsIDE0MSwgMjUwLCA4OCwgNDAsIDI1MCwgMTg0LCAyNTAsIDg4LCA0MCwgMjM0LCAxODcsIAorICAgIDI1MCwgODgsIDQwLCAyMzYsIDYzLCAyNTAsIDg4LCA0MCwgMjM0LCAxODcsIDEwNCwgMTk4LCA0MCwgMjM0LCAxODcsIDEwNCwgCisgICAgMjI2LCAyMzUsIDIyMywgMjI2LCA0MCwgMTg3LCA0MCwgMjM2LCAyNiwgNDAsIDIzMywgMTAyLCA0MCwgMjQ0LCA0OCwgNDAsIAorICAgIDIyNywgMjUyLCA0MCwgMjI3LCAyNTMsIDEwNCwgMTk4LCA0MCwgMjI3LCAyNTMsIDEwNCwgMjI2LCAyMzUsIDIyMywgMjI2LCAKKyAgICA0MCwgMjI4LCAyMTMsIDQwLCAyMzEsIDE0OCwgNDAsIDIzMywgMTAwLCAxOTgsIDQwLCAyMzMsIDEwMSwgNDAsIDIyOCwgCisgICAgMTgzLCA0MCwgMjMxLCA4NywgNDAsIDIzMywgMTAwLCAyMTYsIDIxNiwgNDAsIDIzMywgNTIsIDQwLCAyMzUsIDIzNywgNDAsIAorICAgIDIzMywgNTMsIDIzNCwgOSwgNDAsIDIyOCwgMTgyLCA0MCwgMjMxLCA4NiwgNDAsIDIzMywgMTAwLCAyMTksIDQwLCA0MCwgCisgICAgMjMzLCA1MCwgNDAsIDIzNSwgMjM1LCA0MCwgMjMzLCA1MSwgMjM0LCA5LCA0MCwgMjM3LCAxOCwgMjMwLCAxNTksIDQwLCAKKyAgICAyMzQsIDE4NywgMjMwLCAxNTksIDQwLCAyNTQsIDE0MCwgNDAsIDI1MiwgMjAsIDQwLCAyNTEsIDExNSwgNDAsIDI1MSwgCisgICAgMTAwLCA0MCwgMjUxLCAyMDMsIDEwNCwgMjM2LCAxNTEsIDQwLCAyNTAsIDE4MiwgNDAsIDI0OSwgMTM0LCA0MCwgMjQzLCAKKyAgICAyMzcsIDQwLCAxNTUsIDQwLCAyNDIsIDE3OSwgNDAsIDIzNywgMjIzLCA0MCwgMjM2LCA3NSwgNDAsIDIzNiwgNjMsIDI1MSwgCisgICAgMTQyLCA0MCwgMjM2LCA5LCA0MCwgMjM1LCAxNSwgNDAsIDIzNSwgMTQsIDQwLCAyMzUsIDgsIDQwLCAyMzQsIDE5OSwgNDAsIAorICAgIDIzNCwgNDIsIDIyNCwgNDMsIDQwLCAyMzMsIDE2NiwgNDAsIDIzMywgMTI5LCA0MCwgMjI5LCAxNDIsIDQwLCAyMjksIDQwLCAKKyAgICA0MCwgMjI5LCA1LCA0MCwgMjI5LCAzLCA0MCwgMjIzLCAyMjAsIDQwLCAyMjMsIDQxLCA0MCwgMjE4LCAyMjgsIDQwLCAyMjAsIAorICAgIDExLCAxMDQsIDE4OSwgNDAsIDExMiwgMTA0LCAxODksIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDEwNywgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDksIDEzNywgMTAzLCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAxNjAsIDk4LCAxODMsIDE2LCAzNSwgCisgICAgMjQ5LCAxMzcsIDE1NCwgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMTc0LCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAKKyAgICAxODIsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDE5MSwgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMTg1LCA5OCwgCisgICAgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAxOTAsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDIyMiwgNjUsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQ5LCAxMzcsIDI0NiwgMjExLCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAyMjAsIDIyMSwgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDksIDEzNywgMjIxLCAyNDcsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDI0NSwgMTExLCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0OSwgMTM3LCAyNDUsIDIwMCwgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMjI0LCA3NywgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDksIDEzNywgMjI1LCA0MSwgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMjQ2LCAyMzMsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQ5LCAxMzcsIDIzMiwgMjksIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDIyMCwgMjE5LCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0OSwgMTM3LCAyMjAsIDIxMywgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMjIwLCAyMDksIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQ5LCAxMzcsIDIyMCwgMjEwLCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAyMjAsIDIxNSwgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDksIDEzNywgMjIwLCAyMTYsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDIyMCwgMjExLCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0OSwgMTM3LCAyMjAsIDIxMiwgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMjIwLCAyMTgsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQ5LCAxMzcsIDIyMCwgMjE0LCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAyMjEsIDI0NSwgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDksIDEzNywgMjIxLCAyNDQsIDQwLCAyNDQsIDI0MCwgMjA1LCAzNSwgMjIyLCAyMywgMjUwLCAxMDgsIAorICAgIDI0MywgMTUxLCAyMDUsIDM1LCAyMjIsIDIzLCAyMjcsIDIxMywgMjQ3LCA4LCAyMDUsIDM1LCAyNDgsIDI0NCwgMjUzLCAKKyAgICAyNDUsIDIyMiwgMjMsIDI1MiwgMTMwLCAyMDUsIDM1LCAyMTcsIDIxMSwgMjQ1LCAxMzcsIDIwNSwgMzUsIDIxOSwgMSwgCisgICAgMjA1LCAzNSwgMjUwLCAxNTUsIDIwNSwgMzUsIDIyMiwgMjMsIDI1NCwgMzAsIDIwNSwgMzUsIDI0MiwgMjUzLCAyMjEsIAorICAgIDEzNiwgMjA1LCAzNSwgMywgMjIyLCAxMjAsIDIwNSwgMzUsIDIyMSwgMTAwLCAyMDUsIDM1LCAyMjksIDE5NiwgMjA1LCAzNSwgCisgICAgMjIzLCAxNTgsIDIwNSwgMzUsIDI0NSwgMjE4LCAyMDUsIDM1LCAyNDQsIDMyLCAyMjksIDE1LCAyMDUsIDM1LCAyMzMsIAorICAgIDEzMiwgMjA1LCAzNSwgMjQ2LCAxNzUsIDIwNSwgMzUsIDI0NSwgMTM4LCAyMDUsIDM1LCAyMTgsIDE3MiwgMjMwLCAxMzksIAorICAgIDIyMiwgMjMsIDI0OSwgODgsIDIwNSwgMzUsIDI1NCwgNzUsIDIwNSwgMzUsIDI1MCwgMTM5LCAyMDUsIDM1LCAyNTIsIDU5LCAKKyAgICAyMjEsIDIyNCwgMjA1LCAzNSwgMjQ0LCA0NiwgMjA1LCAzNSwgMjIzLCAyMzcsIDI1NCwgOTAsIDIwNSwgMzUsIDIyNywgCisgICAgMTYyLCAyMDUsIDM1LCAyMzcsIDE5NCwgMjA1LCAzNSwgMjQ0LCAzMiwgMjIyLCAxMjAsIDIwNSwgMzUsIDIzMywgMTA2LCAKKyAgICAyNTAsIDEyMiwgMjA1LCAzNSwgMjQ0LCAzMiwgMjI4LCAyNDAsIDIwNSwgMzUsIDIyMiwgMjMsIDI1NSwgNCwgMjE4LCAyNDAsIAorICAgIDIwNSwgMzUsIDIyMiwgMjMsIDI1MCwgMjAxLCAyNDUsIDE3OSwgMjA1LCAzNSwgMjM3LCAyMDYsIDIwNSwgMzUsIDI0NywgCisgICAgOTAsIDIwNSwgMzUsIDIyNywgMTY1LCAyMDUsIDM1LCAyNDQsIDMyLCAyMjksIDEwLCAyMDUsIDM1LCAyMjgsIDIyNywgMjA1LCAKKyAgICAzNSwgMjQ5LCAxNTEsIDExNywgMjIyLCAyMywgMjM1LCA1OCwgMjA1LCAzNSwgMjIyLCAyMywgMjQ1LCAyNDYsIDIwNSwgMzUsIAorICAgIDIzMCwgMTA5LCAyMDUsIDM1LCAyMzAsIDE3MywgMjA1LCAzNSwgMjQ5LCA2NiwgMjA1LCAzNSwgMjQ5LCA4NCwgMjA1LCAzNSwgCisgICAgMjM3LCAyMTcsIDIwNSwgMzUsIDI1MiwgMTEsIDIwNSwgMzUsIDI1MCwgMTcwLCAxOTksIDIzNCwgMTIsIDIwNSwgMzUsIAorICAgIDI0NCwgMjEyLCAyMjEsIDEzNiwgMjA1LCAzNSwgMjI4LCAxODcsIDIyMCwgNTQsIDIwNSwgMzUsIDIzMCwgMTA4LCAyMDUsIAorICAgIDM1LCAyMjIsIDIzLCAyMTgsIDIyMSwgMjA1LCAzNSwgMjI3LCAxNTYsIDIwNSwgMzUsIDIyMiwgMjMsIDI1MSwgMTIxLCAKKyAgICAyMDUsIDM1LCAyMjIsIDIzLCAyNTQsIDI2LCAyMjEsIDIyMSwgMjA1LCAzNSwgMjIyLCAyMywgMjM2LCAxODEsIDIyMywgCisgICAgMTQxLCAyMzMsIDEwNywgMjA1LCAzNSwgMjQ5LCA0MywgMjA1LCAzNSwgMjIyLCAyMywgMjM0LCA2MSwgMjM0LCA5OSwgMjA1LCAKKyAgICAzNSwgMjU1LCA1LCAyMDUsIDM1LCAyMjIsIDIzLCAyMTgsIDI1MiwgMjA1LCAzNSwgMjIyLCAyMywgMjQ0LCAxNzcsIDIxOCwgCisgICAgMTk0LCAyMDUsIDM1LCAyMjIsIDIzLCAyMzcsIDQ0LCAyMzUsIDE2NSwgMjA1LCAzNSwgMjQ4LCAyMDAsIDIwNSwgMzUsIAorICAgIDIzNSwgNTAsIDIwNSwgMzUsIDIzNywgMTk3LCAyMjEsIDU5LCAyMDUsIDM1LCAzLCAyMjgsIDI0MCwgMjA1LCAzNSwgMjU0LCAKKyAgICAyMTAsIDI1MCwgMTYyLCAyMDUsIDM1LCAyNTIsIDEzMiwgMjUwLCAxNjIsIDgsIDQsIDIzNywgMTQwLCA4LCA0LCAyMzcsIAorICAgIDEzNCwgOCwgNCwgNzIsIDgsIDQsIDIzNywgMTU5LCA4LCA0LCAyMzgsIDI0LCA4LCA0LCAyMzgsIDcsIDgsIDQsIDIzOCwgCisgICAgMjYsIDgsIDQsIDIzOCwgMjUsIDgsIDQsIDI1MywgMjQ0LCA4LCA0LCAyNTMsIDIxNCwgOCwgNCwgNjAsIDgsIDQsIDI1NCwgCisgICAgOTIsIDgsIDQsIDIyMCwgNjQsIDgsIDQsIDIyMCwgNjcsIDgsIDQsIDIyMCwgNjUsIDgsIDQsIDIzMCwgOTIsIDgsIDQsIAorICAgIDIzMCwgNjgsIDgsIDQsIDc0LCA4LCA0LCAyMzAsIDEyMCwgOCwgNCwgMjQ2LCA5OCwgOCwgNCwgNzMsIDgsIDQsIDIxOCwgCisgICAgMTY1LCA4LCA0LCAyNTIsIDYwLCA4LCA0LCAyNTIsIDU3LCA4LCA0LCAyNTIsIDg0LCA4LCA0LCAyNTIsIDY4LCA4LCA0LCAKKyAgICAyNTIsIDc4LCA4LCA0LCAyNTIsIDc3LCA4LCA0LCAyNTIsIDgwLCA4LCA0LCAyNTIsIDc5LCA4LCA0LCAyNTIsIDE4NCwgOCwgCisgICAgNCwgMjUyLCAxODAsIDgsIDQsIDI1MiwgMjM3LCA4LCA0LCAyNTIsIDIwMiwgOCwgNCwgMjUxLCAyMzEsIDgsIDQsIDI1MSwgCisgICAgMjM1LCA4LCA0LCAyNTEsIDIzMiwgOCwgNCwgMjUyLCAzMCwgOCwgNCwgMjUyLCAyMSwgOCwgNCwgMjUyLCA0MSwgOCwgNCwgCisgICAgMjUyLCAzMiwgOCwgNCwgMjUyLCA5NywgOCwgNCwgMjUyLCAxNDQsIDgsIDQsIDI1MiwgMTA5LCA4LCA0LCAyNTEsIDIyMSwgCisgICAgOCwgNCwgMjUxLCAyMTksIDgsIDQsIDI1MSwgMjQ4LCA4LCA0LCAyNTEsIDIzMCwgOCwgNCwgMjUxLCAyMjQsIDgsIDQsIAorICAgIDI1MSwgMjI4LCA4LCA0LCAyNTEsIDIwNywgOCwgNCwgMjUxLCAyMDYsIDgsIDQsIDI1MSwgMjEyLCA4LCA0LCAyNTEsIDIxMCwgCisgICAgOCwgNCwgMjUxLCAyMDgsIDgsIDQsIDI1MSwgMjA5LCA4LCA0LCAyMjksIDY0LCA4LCA0LCAyMjksIDYwLCA4LCA0LCAyMjksIAorICAgIDEwOCwgOCwgNCwgMjI5LCA3MCwgOCwgNCwgMjI5LCA3OSwgOCwgNCwgMjI5LCAxMDMsIDgsIDQsIDIyOSwgMTAxLCA4LCA0LCAKKyAgICAyMjksIDIxNSwgOCwgNCwgMjI5LCAyMDYsIDgsIDQsIDE4NywgOCwgNCwgMjI5LCAyNDYsIDgsIDQsIDIyOCwgMTkyLCA4LCAKKyAgICA0LCAyMjgsIDE5NCwgOCwgNCwgMjI4LCAxOTMsIDgsIDQsIDIyOSwgMTIsIDgsIDQsIDIyOSwgOCwgOCwgNCwgMjI5LCAzNywgCisgICAgOCwgNCwgMjI5LCAxOSwgOCwgNCwgMjI4LCAxODUsIDgsIDQsIDIyOCwgMTg0LCA4LCA0LCAyMjgsIDIwMiwgOCwgNCwgMjI4LCAKKyAgICAxOTEsIDgsIDQsIDIyOCwgMTg4LCA4LCA0LCAyMjgsIDE5MCwgOCwgNCwgMjI4LCAxNjcsIDgsIDQsIDIyOCwgMTY2LCA4LCAKKyAgICA0LCAyMjgsIDE3MSwgOCwgNCwgMjI4LCAxNzAsIDgsIDQsIDIyOCwgMTY4LCA4LCA0LCAyMjgsIDE2OSwgOCwgNCwgMjUyLCAKKyAgICAxNjUsIDgsIDQsIDI1MiwgMTY0LCA4LCA0LCAyNTIsIDE3MSwgOCwgNCwgMjUyLCAxNjYsIDgsIDQsIDI1MiwgMTY4LCA4LCAKKyAgICA0LCAyNTIsIDE2NywgOCwgNCwgMjUyLCAxNzAsIDgsIDQsIDI1MiwgMTY5LCA4LCA0LCAyNTIsIDE3NiwgOCwgNCwgMjUyLCAKKyAgICAxNzUsIDgsIDQsIDI1MiwgMTc4LCA4LCA0LCAyNTIsIDE3NywgOCwgNCwgMjUyLCAxNTYsIDgsIDQsIDI1MiwgMTU4LCA4LCAKKyAgICA0LCAyNTIsIDE1NywgOCwgNCwgMjUyLCAxNjEsIDgsIDQsIDI1MiwgMTYwLCA4LCA0LCAyNTIsIDE2MywgOCwgNCwgMjUyLCAKKyAgICAxNjIsIDgsIDQsIDI1MiwgMTcyLCA4LCA0LCAyNTIsIDE3NCwgOCwgNCwgMjUyLCAxNzMsIDgsIDQsIDI1MiwgMTUyLCA4LCAKKyAgICA0LCAyNTIsIDE1MSwgOCwgNCwgMjUyLCAxNTksIDgsIDQsIDI1MiwgMTU1LCA4LCA0LCAyNTIsIDE1MywgOCwgNCwgMjUyLCAKKyAgICAxNTQsIDgsIDQsIDI1MiwgMTQ4LCA4LCA0LCAyNTIsIDE0NywgOCwgNCwgMjUyLCAxNTAsIDgsIDQsIDI1MiwgMTQ5LCA4LCAKKyAgICA0LCAyMzIsIDE4OCwgOCwgNCwgMjMyLCAxODcsIDgsIDQsIDIzMiwgMTkzLCA4LCA0LCAyMzIsIDE4OSwgOCwgNCwgMjMyLCAKKyAgICAxOTAsIDgsIDQsIDIzMiwgMTkyLCA4LCA0LCAyMzIsIDE5MSwgOCwgNCwgMjMyLCAxOTUsIDgsIDQsIDIzMiwgMTk0LCA4LCAKKyAgICA0LCAyMzIsIDE5NywgOCwgNCwgMjMyLCAxOTYsIDgsIDQsIDIzMiwgMTg0LCA4LCA0LCAyMzIsIDE4MywgOCwgNCwgMjMyLCAKKyAgICAxODYsIDgsIDQsIDIzMiwgMTg1LCA4LCA0LCAyMzIsIDE3OCwgOCwgNCwgMjMyLCAxNzcsIDgsIDQsIDIzMiwgMTgyLCA4LCAKKyAgICA0LCAyMzIsIDE4MSwgOCwgNCwgMjMyLCAxNzksIDgsIDQsIDIzMiwgMTgwLCA4LCA0LCAyMzIsIDE3MiwgOCwgNCwgMjMyLCAKKyAgICAxNzEsIDgsIDQsIDIzMiwgMTc2LCA4LCA0LCAyMzIsIDE3NSwgOCwgNCwgMjMyLCAxNzMsIDgsIDQsIDIzMiwgMTc0LCA4LCAKKyAgICA0LCAyNDMsIDQ2LCA4LCA0LCAyNDMsIDQ1LCA4LCA0LCAyNDMsIDUxLCA4LCA0LCAyNDMsIDQ3LCA4LCA0LCAyNDMsIDQ4LCAKKyAgICA4LCA0LCAyNDMsIDUwLCA4LCA0LCAyNDMsIDQ5LCA4LCA0LCAyNDMsIDU0LCA4LCA0LCAyNDMsIDUzLCA4LCA0LCAyNDMsIAorICAgIDU2LCA4LCA0LCAyNDMsIDU1LCA4LCA0LCAyNDMsIDM3LCA4LCA0LCAyNDMsIDM5LCA4LCA0LCAyNDMsIDM4LCA4LCA0LCAKKyAgICAyNDMsIDQyLCA4LCA0LCAyNDMsIDQxLCA4LCA0LCAyNDMsIDQ0LCA4LCA0LCAyNDMsIDQzLCA4LCA0LCAyNDMsIDMzLCA4LCAKKyAgICA0LCAyNDMsIDMyLCA4LCA0LCAyNDMsIDQwLCA4LCA0LCAyNDMsIDM2LCA4LCA0LCAyNDMsIDM0LCA4LCA0LCAyNDMsIDM1LCAKKyAgICA4LCA0LCAyNDMsIDI3LCA4LCA0LCAyNDMsIDMxLCA4LCA0LCAyNDMsIDMwLCA4LCA0LCAyNDMsIDI4LCA4LCA0LCAyNDMsIAorICAgIDI5LCA4LCA0LCAyMzMsIDE0NSwgOCwgNCwgMjMzLCAxNDQsIDgsIDQsIDIzMywgMTk2LCA4LCA0LCAyMzMsIDE1MSwgOCwgNCwgCisgICAgMjMzLCAxNzMsIDgsIDQsIDIzMywgMTkwLCA4LCA0LCAyMzMsIDE4OSwgOCwgNCwgMjM0LCA1MSwgOCwgNCwgMjM0LCA0NywgCisgICAgOCwgNCwgMTk2LCA4LCA0LCAyMzQsIDc4LCA4LCA0LCAyMzMsIDc1LCA4LCA0LCAyMzMsIDc0LCA4LCA0LCAyMzMsIDc3LCA4LCAKKyAgICA0LCAyMzMsIDc2LCA4LCA0LCAyMzMsIDExMSwgOCwgNCwgMjMzLCAxMDMsIDgsIDQsIDIzMywgMTM2LCA4LCA0LCAyMzMsIAorICAgIDExNSwgOCwgNCwgMjMzLCAyMzIsIDgsIDQsIDIzNCwgMjUsIDgsIDQsIDIzMywgNTcsIDgsIDQsIDIzMywgNTQsIDgsIDQsIAorICAgIDIzMywgOTksIDgsIDQsIDIzMywgNzEsIDgsIDQsIDIzMywgNjQsIDgsIDQsIDIzMywgNjksIDgsIDQsIDIzMywgMzYsIDgsIAorICAgIDQsIDIzMywgMzUsIDgsIDQsIDIzMywgNDEsIDgsIDQsIDIzMywgMzgsIDgsIDQsIDI0NSwgMTcyLCA4LCA0LCAyNDUsIDE2OCwgCisgICAgOCwgNCwgMjQ1LCAyMDMsIDgsIDQsIDI0NSwgMTgwLCA4LCA0LCAyNDUsIDI0MCwgOCwgNCwgMjQ1LCAyMzQsIDgsIDQsIAorICAgIDI0NiwgOCwgOCwgNCwgMjQ1LCAyNDIsIDgsIDQsIDI0NSwgMTA5LCA4LCA0LCAyNDUsIDEzOSwgOCwgNCwgMjQ1LCAxMzAsIAorICAgIDgsIDQsIDI0NSwgODAsIDgsIDQsIDI0NSwgNzksIDgsIDQsIDI0NSwgOTIsIDgsIDQsIDI0NSwgODUsIDgsIDQsIDI0NSwgCisgICAgODMsIDgsIDQsIDI0NSwgODQsIDgsIDQsIDI0NSwgNzAsIDgsIDQsIDI0NSwgNjksIDgsIDQsIDI0NSwgNzMsIDgsIDQsIAorICAgIDI0NSwgNzEsIDgsIDQsIDIxOSwgNzQsIDgsIDQsIDIxOSwgNzMsIDgsIDQsIDIxOSwgOTQsIDgsIDQsIDIxOSwgODMsIDgsIAorICAgIDQsIDIxOSwgODksIDgsIDQsIDIxOSwgODcsIDgsIDQsIDIxOSwgOTEsIDgsIDQsIDIxOSwgOTAsIDgsIDQsIDIxOSwgMTcyLCAKKyAgICA4LCA0LCAyMTksIDE2OCwgOCwgNCwgMjE5LCAxODksIDgsIDQsIDIxOSwgMTgyLCA4LCA0LCAyMTksIDYyLCA4LCA0LCAyMTksIAorICAgIDU4LCA4LCA0LCAyMTksIDcyLCA4LCA0LCAyMTksIDYzLCA4LCA0LCAyMTksIDk1LCA4LCA0LCAyMTksIDE1NiwgOCwgNCwgCisgICAgMjE5LCA1MSwgOCwgNCwgMjE5LCA1MCwgOCwgNCwgMjE5LCA1NiwgOCwgNCwgMjE5LCA1NCwgOCwgNCwgMjE5LCA1MiwgOCwgCisgICAgNCwgMjE5LCA1MywgOCwgNCwgMjE5LCA0NCwgOCwgNCwgMjE5LCA0MywgOCwgNCwgMjE5LCA0OCwgOCwgNCwgMjE5LCA0NywgCisgICAgOCwgNCwgMjE5LCA0NSwgOCwgNCwgMjE5LCA0NiwgOCwgNCwgMjQ4LCAxOTcsIDgsIDQsIDI0OCwgMTg1LCA4LCA0LCAyNDksIAorICAgIDE1LCA4LCA0LCAyNDgsIDIxNiwgOCwgNCwgMjQ4LCAyNDksIDgsIDQsIDI0OCwgMjUzLCA4LCA0LCAyNDgsIDI1MiwgOCwgNCwgCisgICAgMjQ5LCAxNDMsIDgsIDQsIDI0OSwgMTM4LCA4LCA0LCAyNDksIDIwNywgOCwgNCwgMjQ5LCAxNjIsIDgsIDQsIDI0NywgOTUsIAorICAgIDgsIDQsIDI0NywgOTYsIDgsIDQsIDI0OCwgMTQ1LCA4LCA0LCAyNDcsIDEyOCwgOCwgNCwgMjQ4LCAxNjcsIDgsIDQsIDI0OCwgCisgICAgMTQ3LCA4LCA0LCAyNDksIDQxLCA4LCA0LCAyNDksIDkyLCA4LCA0LCAyNDksIDUzLCA4LCA0LCAyNDcsIDg4LCA4LCA0LCAKKyAgICAyNDcsIDg2LCA4LCA0LCAyNDcsIDExMSwgOCwgNCwgMjQ3LCA5NCwgOCwgNCwgMjQ3LCA4OSwgOCwgNCwgMjQ3LCA5MiwgOCwgCisgICAgNCwgMjIxLCAxNjEsIDgsIDQsIDIyMSwgMTU3LCA4LCA0LCAyMjEsIDIwNSwgOCwgNCwgMjIxLCAxNjksIDgsIDQsIDIyMSwgCisgICAgMTk4LCA4LCA0LCAyMjEsIDIwMCwgOCwgNCwgMjIxLCAxOTksIDgsIDQsIDIyMiwgMTEwLCA4LCA0LCAyMjIsIDk3LCA4LCA0LCAKKyAgICAyMjIsIDE1NSwgOCwgNCwgMjIyLCAxMTUsIDgsIDQsIDIyMCwgMjQ0LCA4LCA0LCAyMjAsIDI0MywgOCwgNCwgMjIwLCAyNDYsIAorICAgIDgsIDQsIDIyMCwgMjQ1LCA4LCA0LCAyMjEsIDExMywgOCwgNCwgMjIxLCAxMTAsIDgsIDQsIDEwMSwgOCwgNCwgMjIxLCAKKyAgICAxMTksIDgsIDQsIDIyMiwgNDAsIDgsIDQsIDIyMiwgODcsIDgsIDQsIDIyMiwgNTcsIDgsIDQsIDIyMCwgMjMxLCA4LCA0LCAKKyAgICAyMjAsIDIyOCwgOCwgNCwgMjIxLCAwLCA4LCA0LCAyMjAsIDI0MiwgOCwgNCwgMjIwLCAyMzIsIDgsIDQsIDIyMCwgMjQwLCAKKyAgICA4LCA0LCAyNDksIDEwOSwgOCwgNCwgMjQ5LCAxMDgsIDgsIDQsIDI0OSwgMTE0LCA4LCA0LCAyNDksIDExMCwgOCwgNCwgCisgICAgMjQ5LCAxMTEsIDgsIDQsIDI0OSwgMTEzLCA4LCA0LCAyNDksIDExMiwgOCwgNCwgMjQ5LCAxMjUsIDgsIDQsIDI0OSwgMTI0LCAKKyAgICA4LCA0LCAyNDksIDEzMiwgOCwgNCwgMjQ5LCAxMjYsIDgsIDQsIDI0OSwgOTksIDgsIDQsIDI0OSwgMTAxLCA4LCA0LCAyNDksIAorICAgIDEwMCwgOCwgNCwgMjQ5LCAxMDQsIDgsIDQsIDI0OSwgMTAzLCA4LCA0LCAyNDksIDEwNywgOCwgNCwgMjQ5LCAxMDUsIDgsIAorICAgIDQsIDI0OSwgMTE3LCA4LCA0LCAyNDksIDEyMCwgOCwgNCwgMjQ5LCAxMTgsIDgsIDQsIDI0OSwgOTUsIDgsIDQsIDI0OSwgCisgICAgOTQsIDgsIDQsIDI0OSwgMTAyLCA4LCA0LCAyNDksIDk4LCA4LCA0LCAyNDksIDk2LCA4LCA0LCAyNDksIDk3LCA4LCA0LCAKKyAgICAyMzIsIDE1NiwgOCwgNCwgMjMyLCAxNTUsIDgsIDQsIDIzMiwgMTYwLCA4LCA0LCAyMzIsIDE1NywgOCwgNCwgMjMyLCAxNTgsIAorICAgIDgsIDQsIDIzMiwgMTU5LCA4LCA0LCAyMzIsIDE2NiwgOCwgNCwgMjMyLCAxNjUsIDgsIDQsIDIzMiwgMTY5LCA4LCA0LCAKKyAgICAyMzIsIDE2NywgOCwgNCwgMjMyLCAxNTAsIDgsIDQsIDIzMiwgMTQ5LCA4LCA0LCAyMzIsIDE1NCwgOCwgNCwgMjMyLCAxNTEsIAorICAgIDgsIDQsIDIzMiwgMTYxLCA4LCA0LCAyMzIsIDE2NCwgOCwgNCwgMjMyLCAxNjIsIDgsIDQsIDIzMiwgMTQ0LCA4LCA0LCAKKyAgICAyMzIsIDE0MywgOCwgNCwgMjMyLCAxNDgsIDgsIDQsIDIzMiwgMTQ3LCA4LCA0LCAyMzIsIDE0NSwgOCwgNCwgMjMyLCAxNDYsIAorICAgIDgsIDQsIDI0MywgMTMsIDgsIDQsIDI0MywgMTIsIDgsIDQsIDI0MywgMTksIDgsIDQsIDI0MywgMTQsIDgsIDQsIDI0MywgCisgICAgMTYsIDgsIDQsIDI0MywgMTUsIDgsIDQsIDI0MywgMTgsIDgsIDQsIDI0MywgMTcsIDgsIDQsIDI0MywgMjQsIDgsIDQsIAorICAgIDI0MywgMjMsIDgsIDQsIDI0MywgMjYsIDgsIDQsIDI0MywgMjUsIDgsIDQsIDI0MywgNywgOCwgNCwgMjQzLCA4LCA4LCA0LCAKKyAgICAyNDMsIDEwLCA4LCA0LCAyNDMsIDksIDgsIDQsIDI0MywgMTEsIDgsIDQsIDI0MywgMjAsIDgsIDQsIDI0MywgMjIsIDgsIDQsIAorICAgIDI0MywgMjEsIDgsIDQsIDI0MywgNiwgOCwgNCwgMjMyLCAyMSwgOCwgNCwgMjMyLCAyMCwgOCwgNCwgMjMyLCA2MiwgOCwgNCwgCisgICAgMjMyLCAyNCwgOCwgNCwgMjMyLCA0NCwgOCwgNCwgMjMyLCA1OCwgOCwgNCwgMjMyLCA1NywgOCwgNCwgMjMyLCAyMDEsIDgsIAorICAgIDQsIDIwOCwgOCwgNCwgMjMyLCAyMTIsIDgsIDQsIDIzMSwgOTUsIDgsIDQsIDIzMSwgOTcsIDgsIDQsIDIzMSwgOTYsIDgsIAorICAgIDQsIDIzMSwgMTg0LCA4LCA0LCAyMzEsIDE3MywgOCwgNCwgMjMxLCAyMDQsIDgsIDQsIDIzMSwgMTkxLCA4LCA0LCAyMzIsIAorICAgIDEyMSwgOCwgNCwgMjMyLCAxNDEsIDgsIDQsIDIzMiwgMTMwLCA4LCA0LCAyMzEsIDkxLCA4LCA0LCAyMzEsIDg4LCA4LCA0LCAKKyAgICAyMzEsIDE0NCwgOCwgNCwgMjMxLCA5NCwgOCwgNCwgMjMxLCA5MiwgOCwgNCwgMjMxLCA5MywgOCwgNCwgMjQzLCA3NywgOCwgCisgICAgNCwgMjQzLCA3NiwgOCwgNCwgMjQzLCA4MiwgOCwgNCwgMjQzLCA3OCwgOCwgNCwgMjQzLCA3OSwgOCwgNCwgMjQzLCA4MSwgCisgICAgOCwgNCwgMjQzLCA4MCwgOCwgNCwgMjQzLCA4NywgOCwgNCwgMjQzLCA4NiwgOCwgNCwgMjQzLCA4OSwgOCwgNCwgMjQzLCAKKyAgICA4OCwgOCwgNCwgMjQzLCA2OSwgOCwgNCwgMjQzLCA3MSwgOCwgNCwgMjQzLCA3MCwgOCwgNCwgMjQzLCA3MywgOCwgNCwgCisgICAgMjQzLCA3NSwgOCwgNCwgMjQzLCA3NCwgOCwgNCwgMjQzLCA4MywgOCwgNCwgMjQzLCA4NSwgOCwgNCwgMjQzLCA4NCwgOCwgCisgICAgNCwgMjQzLCA2NSwgOCwgNCwgMjQzLCA2NCwgOCwgNCwgMjQzLCA3MiwgOCwgNCwgMjQzLCA2OCwgOCwgNCwgMjQzLCA2NiwgCisgICAgOCwgNCwgMjQzLCA2NywgOCwgNCwgMjQzLCA1OSwgOCwgNCwgMjQzLCA1OCwgOCwgNCwgMjQzLCA2MywgOCwgNCwgMjQzLCAKKyAgICA2MiwgOCwgNCwgMjQzLCA2MCwgOCwgNCwgMjQzLCA2MSwgOCwgNCwgMjM1LCAyNywgOCwgNCwgMjM1LCAyMiwgOCwgNCwgCisgICAgMjM1LCA2NywgOCwgNCwgMjM1LCAzMiwgOCwgNCwgMjM1LCA2MSwgOCwgNCwgMjM1LCA2MCwgOCwgNCwgMjM1LCA2MywgOCwgCisgICAgNCwgMjM1LCA2MiwgOCwgNCwgMjM1LCAxNDEsIDgsIDQsIDIzNSwgMTMzLCA4LCA0LCAyMzUsIDE4OCwgOCwgNCwgMjM1LCAKKyAgICAxNDcsIDgsIDQsIDIzNCwgMjE0LCA4LCA0LCAyMzQsIDIxMywgOCwgNCwgMjM0LCAyMTYsIDgsIDQsIDIzNCwgMjE1LCA4LCAKKyAgICA0LCAyMzQsIDI0MiwgOCwgNCwgMjM0LCAyMzYsIDgsIDQsIDIzNSwgMTIsIDgsIDQsIDIzNCwgMjQ1LCA4LCA0LCAyMzUsIAorICAgIDgyLCA4LCA0LCAyMzUsIDEyMiwgOCwgNCwgMjM1LCA4OSwgOCwgNCwgMjM0LCAyMDksIDgsIDQsIDIzNCwgMjA4LCA4LCA0LCAKKyAgICAyMzQsIDIzMSwgOCwgNCwgMjM0LCAyMTIsIDgsIDQsIDIzNCwgMjEwLCA4LCA0LCAyMzQsIDIxMSwgOCwgNCwgMjM0LCAxOTEsIAorICAgIDgsIDQsIDIzNCwgMTkwLCA4LCA0LCAyMzQsIDE5OCwgOCwgNCwgMjM0LCAxOTQsIDgsIDQsIDIzNCwgMTkyLCA4LCA0LCAKKyAgICAyMzQsIDE5MywgOCwgNCwgMjQ0LCA4MCwgOCwgNCwgMjQ0LCA3OSwgOCwgNCwgMjQ0LCAxMDMsIDgsIDQsIDI0NCwgODksIDgsIAorICAgIDQsIDI0NCwgOTYsIDgsIDQsIDI0NCwgOTUsIDgsIDQsIDI0NCwgOTgsIDgsIDQsIDI0NCwgOTcsIDgsIDQsIDI0NCwgMjE0LCAKKyAgICA4LCA0LCAyNDQsIDIwOSwgOCwgNCwgMjQ1LCAwLCA4LCA0LCAyNDQsIDIyMywgOCwgNCwgMjQ0LCAwLCA4LCA0LCAyNDMsIAorICAgIDI1NSwgOCwgNCwgMjQ0LCAyLCA4LCA0LCAyNDQsIDEsIDgsIDQsIDI0NCwgNTEsIDgsIDQsIDI0NCwgNDksIDgsIDQsIDI0NCwgCisgICAgNjgsIDgsIDQsIDI0NCwgNTksIDgsIDQsIDI0NCwgMTY0LCA4LCA0LCAyNDQsIDE2MiwgOCwgNCwgMjQ0LCAxOTEsIDgsIDQsIAorICAgIDI0NCwgMTc0LCA4LCA0LCAyNDMsIDI0NiwgOCwgNCwgMjQzLCAyNDUsIDgsIDQsIDI0NCwgMTcsIDgsIDQsIDI0MywgMjU0LCAKKyAgICA4LCA0LCAyNDMsIDI0NywgOCwgNCwgMjQzLCAyNTMsIDgsIDQsIDIzNiwgODksIDgsIDQsIDIzNiwgODgsIDgsIDQsIDIzNiwgCisgICAgMTEzLCA4LCA0LCAyMzYsIDk5LCA4LCA0LCAyMzYsIDEwNywgOCwgNCwgMjM2LCAxMDksIDgsIDQsIDIzNiwgMTA4LCA4LCA0LCAKKyAgICAyMzYsIDIwMywgOCwgNCwgMjM2LCAxOTIsIDgsIDQsIDE3NSwgOCwgNCwgMjM2LCAyMjcsIDgsIDQsIDIzNSwgMjUwLCA4LCAKKyAgICA0LCAyMzUsIDI1MiwgOCwgNCwgMjM1LCAyNTEsIDgsIDQsIDIzNiwgMzEsIDgsIDQsIDIzNiwgMjcsIDgsIDQsIDIzNiwgNTcsIAorICAgIDgsIDQsIDIzNiwgMzgsIDgsIDQsIDIzNiwgMTU5LCA4LCA0LCAyMzYsIDE1NiwgOCwgNCwgMjM2LCAxODQsIDgsIDQsIDIzNiwgCisgICAgMTYyLCA4LCA0LCAyMzUsIDI0MCwgOCwgNCwgMjM1LCAyMzgsIDgsIDQsIDIzNiwgNywgOCwgNCwgMjM1LCAyNDksIDgsIDQsIAorICAgIDIzNSwgMjQzLCA4LCA0LCAyMzUsIDI0NywgOCwgNCwgMjQ0LCAxNDYsIDgsIDQsIDI0NCwgMTQ1LCA4LCA0LCAyNDQsIDE1MCwgCisgICAgOCwgNCwgMjQ0LCAxNDcsIDgsIDQsIDI0NCwgMTQ5LCA4LCA0LCAyNDQsIDE0OCwgOCwgNCwgMjQ0LCAxNTcsIDgsIDQsIAorICAgIDI0NCwgMTU2LCA4LCA0LCAyNDQsIDE2MCwgOCwgNCwgMjQ0LCAxNTgsIDgsIDQsIDI0NCwgMTM3LCA4LCA0LCAyNDQsIDEzNiwgCisgICAgOCwgNCwgMjQ0LCAxMzksIDgsIDQsIDI0NCwgMTM4LCA4LCA0LCAyNDQsIDE0MiwgOCwgNCwgMjQ0LCAxNDEsIDgsIDQsIAorICAgIDI0NCwgMTQ0LCA4LCA0LCAyNDQsIDE0MywgOCwgNCwgMjQ0LCAxNTIsIDgsIDQsIDI0NCwgMTUxLCA4LCA0LCAyNDQsIDE1NSwgCisgICAgOCwgNCwgMjQ0LCAxNTMsIDgsIDQsIDI0NCwgMTMyLCA4LCA0LCAyNDQsIDEzMSwgOCwgNCwgMjQ0LCAxNDAsIDgsIDQsIAorICAgIDI0NCwgMTM1LCA4LCA0LCAyNDQsIDEzMywgOCwgNCwgMjQ0LCAxMzQsIDgsIDQsIDIzMywgMjE0LCA4LCA0LCAyMzMsIDIxNSwgCisgICAgOCwgNCwgMjMzLCAyMjcsIDgsIDQsIDIzMywgMjI2LCA4LCA0LCAyMzMsIDIyOSwgOCwgNCwgMjMzLCAyMjgsIDgsIDQsIAorICAgIDIzMywgMjA1LCA4LCA0LCAyMzMsIDIwNywgOCwgNCwgMjMzLCAyMDYsIDgsIDQsIDIzMywgMjEwLCA4LCA0LCAyMzMsIDIwOSwgCisgICAgOCwgNCwgMjMzLCAyMTIsIDgsIDQsIDIzMywgMjExLCA4LCA0LCAyMzMsIDIxNiwgOCwgNCwgMjMzLCAyMTgsIDgsIDQsIAorICAgIDIzMywgMjE3LCA4LCA0LCAyMzMsIDIwMSwgOCwgNCwgMjMzLCAyMDAsIDgsIDQsIDIzMywgMjA4LCA4LCA0LCAyMzMsIDIwNCwgCisgICAgOCwgNCwgMjMzLCAyMDIsIDgsIDQsIDIzMywgMjAzLCA4LCA0LCAyNDIsIDEzMywgOCwgNCwgMjQyLCAxMzIsIDgsIDQsIAorICAgIDI0MiwgMTM5LCA4LCA0LCAyNDIsIDEzNCwgOCwgNCwgMjQyLCAxMzYsIDgsIDQsIDI0MiwgMTM1LCA4LCA0LCAyNDIsIDEzOCwgCisgICAgOCwgNCwgMjQyLCAxMzcsIDgsIDQsIDI0MiwgMTQ0LCA4LCA0LCAyNDIsIDE0MywgOCwgNCwgMjQyLCAxNDYsIDgsIDQsIAorICAgIDI0MiwgMTQ1LCA4LCA0LCAyNDIsIDEyNSwgOCwgNCwgMjQyLCAxMjQsIDgsIDQsIDI0MiwgMTI3LCA4LCA0LCAyNDIsIDEyNiwgCisgICAgOCwgNCwgMjQyLCAxMjksIDgsIDQsIDI0MiwgMTI4LCA4LCA0LCAyNDIsIDEzMSwgOCwgNCwgMjQyLCAxMzAsIDgsIDQsIAorICAgIDI0MiwgMTQwLCA4LCA0LCAyNDIsIDE0MiwgOCwgNCwgMjQyLCAxNDEsIDgsIDQsIDIzMiwgODksIDgsIDQsIDIzMiwgOTEsIAorICAgIDgsIDQsIDIzMiwgOTAsIDgsIDQsIDIzMiwgMTA4LCA4LCA0LCAyMzIsIDEwNywgOCwgNCwgMjMyLCAxMTUsIDgsIDQsIDIzMiwgCisgICAgMTEwLCA4LCA0LCAyMzIsIDcxLCA4LCA0LCAyMzIsIDcwLCA4LCA0LCAyMzIsIDcyLCA4LCA0LCAyMzIsIDc4LCA4LCA0LCAKKyAgICAyMzIsIDc1LCA4LCA0LCAyMzIsIDg0LCA4LCA0LCAyMzIsIDc5LCA4LCA0LCAyMzIsIDEwMiwgOCwgNCwgMjMyLCAxMDYsIDgsIAorICAgIDQsIDIzMiwgMTAzLCA4LCA0LCAyNDMsIDkyLCA4LCA0LCAyNDMsIDEwMCwgOCwgNCwgMjQzLCAxMDgsIDgsIDQsIDI0MywgCisgICAgMTczLCA4LCA0LCAyNDMsIDE2NywgOCwgNCwgMTU1LCA4LCA0LCAyNDMsIDE4MywgOCwgNCwgMjQyLCAxNTcsIDgsIDQsIAorICAgIDI0MiwgMTU2LCA4LCA0LCAyNDIsIDE1OSwgOCwgNCwgMjQyLCAxNTgsIDgsIDQsIDI0MiwgMTg2LCA4LCA0LCAyNDIsIDE4MSwgCisgICAgOCwgNCwgMjQzLCA0LCA4LCA0LCAyNDIsIDI0NCwgOCwgNCwgMjQzLCAxMjUsIDgsIDQsIDI0MywgMTYyLCA4LCA0LCAyNDMsIAorICAgIDEzNSwgOCwgNCwgMjE4LCAyNDMsIDgsIDQsIDIxOCwgMjMxLCA4LCA0LCAyMTksIDcsIDgsIDQsIDIxOCwgMjUxLCA4LCA0LCAKKyAgICAyMTgsIDE1NywgOCwgNCwgMjE4LCAxNTksIDgsIDQsIDIxOCwgMTU4LCA4LCA0LCAyMTgsIDE3MCwgOCwgNCwgMjE4LCAxODcsIAorICAgIDgsIDQsIDIxOCwgMTc1LCA4LCA0LCAyMTgsIDIxNCwgOCwgNCwgMjE4LCAyMjcsIDgsIDQsIDIxOCwgMjE4LCA4LCA0LCAKKyAgICAyMTcsIDI4LCA4LCA0LCAyMTcsIDI3LCA4LCA0LCAyMTcsIDQyLCA4LCA0LCAyMTcsIDMwLCA4LCA0LCAyMTcsIDM1LCA4LCAKKyAgICA0LCAyMTcsIDM3LCA4LCA0LCAyMTcsIDM2LCA4LCA0LCAyMTcsIDEwMCwgOCwgNCwgMjE3LCA5NywgOCwgNCwgMjE3LCAxMTQsIAorICAgIDgsIDQsIDIxNywgMTAzLCA4LCA0LCAyMTcsIDYsIDgsIDQsIDIxNywgOCwgOCwgNCwgMjE3LCA3LCA4LCA0LCAyMTcsIDE3LCAKKyAgICA4LCA0LCAyMTcsIDE2LCA4LCA0LCAyMTcsIDIxLCA4LCA0LCAyMTcsIDE4LCA4LCA0LCAyMTcsIDgyLCA4LCA0LCAyMTcsIAorICAgIDkyLCA4LCA0LCAyMTcsIDg2LCA4LCA0LCAyMTcsIDIsIDgsIDQsIDIxNywgMSwgOCwgNCwgMjE3LCAxMywgOCwgNCwgMjE3LCAKKyAgICA1LCA4LCA0LCAyMTcsIDMsIDgsIDQsIDIxNywgNCwgOCwgNCwgMjE2LCAyNDksIDgsIDQsIDIxNiwgMjQ4LCA4LCA0LCAyMTYsIAorICAgIDI1NCwgOCwgNCwgMjE2LCAyNTIsIDgsIDQsIDIxNiwgMjUwLCA4LCA0LCAyMTYsIDI1MSwgOCwgNCwgMjUwLCAyMTUsIDgsIAorICAgIDQsIDI1MCwgMjEyLCA4LCA0LCAyNTAsIDIzNSwgOCwgNCwgMjUwLCAyMjMsIDgsIDQsIDI1MCwgMjMyLCA4LCA0LCAyNTAsIAorICAgIDIyNiwgOCwgNCwgMjUwLCAyMzQsIDgsIDQsIDI1MCwgMjMzLCA4LCA0LCAyNTEsIDEyNCwgOCwgNCwgMjUxLCAxMTgsIDgsIAorICAgIDQsIDI1MSwgMTY5LCA4LCA0LCAyNTEsIDE0MywgOCwgNCwgMjUwLCA4NCwgOCwgNCwgMjUwLCA4NiwgOCwgNCwgMjUwLCA4NSwgCisgICAgOCwgNCwgMjUwLCAxMTYsIDgsIDQsIDI1MCwgMTA5LCA4LCA0LCAyNTAsIDE4MiwgOCwgNCwgMjUwLCAxMjksIDgsIDQsIAorICAgIDI1MSwgNzEsIDgsIDQsIDI1MSwgOTksIDgsIDQsIDI1MSwgNzUsIDgsIDQsIDI1MCwgNjgsIDgsIDQsIDI1MCwgNjcsIDgsIAorICAgIDQsIDI1MCwgOTIsIDgsIDQsIDI1MCwgODIsIDgsIDQsIDI1MCwgNzEsIDgsIDQsIDI1MCwgODEsIDgsIDQsIDI1MCwgNDksIAorICAgIDgsIDQsIDI1MCwgNDgsIDgsIDQsIDI1MCwgNTgsIDgsIDQsIDI1MCwgNTUsIDgsIDQsIDI1MCwgNTAsIDgsIDQsIDI1MCwgCisgICAgNTIsIDgsIDQsIDIxNiwgMjMyLCA4LCA0LCAyMTYsIDIzMSwgOCwgNCwgMjE2LCAyMzgsIDgsIDQsIDIxNiwgMjMzLCA4LCA0LCAKKyAgICAyMTYsIDIzNSwgOCwgNCwgMjE2LCAyMzQsIDgsIDQsIDIxNiwgMjM3LCA4LCA0LCAyMTYsIDIzNiwgOCwgNCwgMjE2LCAyNDQsIAorICAgIDgsIDQsIDIxNiwgMjQzLCA4LCA0LCAyMTYsIDI0NywgOCwgNCwgMjE2LCAyNDUsIDgsIDQsIDIxNiwgMjI4LCA4LCA0LCAKKyAgICAyMTYsIDIzMCwgOCwgNCwgMjE2LCAyMjksIDgsIDQsIDIxNiwgMjM5LCA4LCA0LCAyMTYsIDI0MiwgOCwgNCwgMjE2LCAyNDAsIAorICAgIDgsIDQsIDIxNiwgMjIzLCA4LCA0LCAyMTYsIDIyNywgOCwgNCwgMjE2LCAyMjYsIDgsIDQsIDIxNiwgMjI0LCA4LCA0LCAKKyAgICAyMTYsIDIyNSwgOCwgNCwgMjE2LCAyMTgsIDgsIDQsIDIxNiwgMjE3LCA4LCA0LCAyMTYsIDIyMiwgOCwgNCwgMjE2LCAyMjEsIAorICAgIDgsIDQsIDIxNiwgMjE5LCA4LCA0LCAyMTYsIDIyMCwgOCwgNCwgMjMxLCAzMSwgOCwgNCwgMjMxLCAzMCwgOCwgNCwgMjMxLCAKKyAgICAzNiwgOCwgNCwgMjMxLCAzMiwgOCwgNCwgMjMxLCAzMywgOCwgNCwgMjMxLCAzNSwgOCwgNCwgMjMxLCAzNCwgOCwgNCwgCisgICAgMjMxLCA0MCwgOCwgNCwgMjMxLCAzOSwgOCwgNCwgMjMxLCA0MiwgOCwgNCwgMjMxLCA0MSwgOCwgNCwgMjMxLCAyNSwgOCwgCisgICAgNCwgMjMxLCAyNiwgOCwgNCwgMjMxLCAyOCwgOCwgNCwgMjMxLCAyOSwgOCwgNCwgMjMxLCAzNywgOCwgNCwgMjMxLCAzOCwgCisgICAgOCwgNCwgMjMxLCAyMSwgOCwgNCwgMjMxLCAyNywgOCwgNCwgMjMxLCAyNCwgOCwgNCwgMjMxLCAyMiwgOCwgNCwgMjMxLCAKKyAgICAyMywgOCwgNCwgMjMxLCAxNiwgOCwgNCwgMjMxLCAxNSwgOCwgNCwgMjMxLCAyMCwgOCwgNCwgMjMxLCAxOSwgOCwgNCwgCisgICAgMjMxLCAxNywgOCwgNCwgMjMxLCAxOCwgOCwgNCwgMjI0LCA4NCwgOCwgNCwgMTgyLCA4LCA0LCAyMjQsIDE0MCwgOCwgNCwgCisgICAgMjI0LCA4NiwgOCwgNCwgMjI0LCAxMzMsIDgsIDQsIDIyNCwgMTM1LCA4LCA0LCAyMjQsIDEzNCwgOCwgNCwgMjI2LCAxMjcsIAorICAgIDgsIDQsIDIyNiwgMTIwLCA4LCA0LCAyMjYsIDE3NywgOCwgNCwgMjI2LCAxMzMsIDgsIDQsIDIyMywgNjMsIDgsIDQsIDIyMywgCisgICAgNjUsIDgsIDQsIDIyMywgNjQsIDgsIDQsIDIyNCwgMTIsIDgsIDQsIDIyNCwgMiwgOCwgNCwgMjI0LCAyNiwgOCwgNCwgMjI0LCAKKyAgICAxMywgOCwgNCwgMjI1LCAzNiwgOCwgNCwgMjI2LCA5NCwgOCwgNCwgMjI1LCA1NiwgOCwgNCwgMjIzLCA0NCwgOCwgNCwgCisgICAgMjIzLCA0MiwgOCwgNCwgMjIzLCAxMDMsIDgsIDQsIDIyMywgNjIsIDgsIDQsIDIyMywgNDYsIDgsIDQsIDIyMywgNTMsIDgsIAorICAgIDQsIDIyMiwgMjE1LCA4LCA0LCAyMjIsIDIxNCwgOCwgNCwgMjIzLCAyMSwgOCwgNCwgMjIyLCAyMjAsIDgsIDQsIDIyMiwgCisgICAgMjE2LCA4LCA0LCAyMjIsIDIxOSwgOCwgNCwgMjIzLCAxODQsIDgsIDQsIDIyMywgMTgzLCA4LCA0LCAyMjMsIDE4OSwgOCwgCisgICAgNCwgMjIzLCAxODUsIDgsIDQsIDIyMywgMTg2LCA4LCA0LCAyMjMsIDE4OCwgOCwgNCwgMjIzLCAxODcsIDgsIDQsIDIyMywgCisgICAgMTk2LCA4LCA0LCAyMjMsIDE5NSwgOCwgNCwgMjIzLCAyMTgsIDgsIDQsIDIyMywgMTk3LCA4LCA0LCAyMjMsIDE4MCwgOCwgCisgICAgNCwgMjIzLCAxNzksIDgsIDQsIDIyMywgMTgyLCA4LCA0LCAyMjMsIDE4MSwgOCwgNCwgMjIzLCAxOTEsIDgsIDQsIDIyMywgCisgICAgMTk0LCA4LCA0LCAyMjMsIDE5MiwgOCwgNCwgMjIzLCAxNzYsIDgsIDQsIDIyMywgMTc1LCA4LCA0LCAyMjMsIDE3OCwgOCwgCisgICAgNCwgMjIzLCAxNzcsIDgsIDQsIDIyMywgMTcwLCA4LCA0LCAyMjMsIDE2OSwgOCwgNCwgMjIzLCAxNzQsIDgsIDQsIDIyMywgCisgICAgMTczLCA4LCA0LCAyMjMsIDE3MSwgOCwgNCwgMjIzLCAxNzIsIDgsIDQsIDIxNywgNzUsIDgsIDQsIDIxNywgNzQsIDgsIDQsIAorICAgIDIxNywgODAsIDgsIDQsIDIxNywgNzcsIDgsIDQsIDIxNywgNTcsIDgsIDQsIDIxNywgNTksIDgsIDQsIDIxNywgNTgsIDgsIAorICAgIDQsIDIxNywgNjIsIDgsIDQsIDIxNywgNjEsIDgsIDQsIDIxNywgNjUsIDgsIDQsIDIxNywgNjMsIDgsIDQsIDIxNywgNjksIAorICAgIDgsIDQsIDIxNywgNjgsIDgsIDQsIDIxNywgNzIsIDgsIDQsIDIxNywgNzAsIDgsIDQsIDIxNywgNTMsIDgsIDQsIDIxNywgCisgICAgNTIsIDgsIDQsIDIxNywgNjAsIDgsIDQsIDIxNywgNTYsIDgsIDQsIDIxNywgNTQsIDgsIDQsIDIxNywgNTUsIDgsIDQsIAorICAgIDIxNywgNDUsIDgsIDQsIDIxNywgNDQsIDgsIDQsIDIxNywgNDksIDgsIDQsIDIxNywgNDgsIDgsIDQsIDIxNywgNDYsIDgsIAorICAgIDQsIDIxNywgNDcsIDgsIDQsIDI1MSwgNTEsIDgsIDQsIDI1MSwgNDgsIDgsIDQsIDI1MSwgNjksIDgsIDQsIDI1MSwgNTcsIAorICAgIDgsIDQsIDI1MCwgMjQ5LCA4LCA0LCAyNTAsIDI0OCwgOCwgNCwgMjUwLCAyNTEsIDgsIDQsIDI1MCwgMjUwLCA4LCA0LCAKKyAgICAyNTEsIDUsIDgsIDQsIDI1MSwgNCwgOCwgNCwgMjUxLCAxMSwgOCwgNCwgMjUxLCA3LCA4LCA0LCAyNTEsIDM2LCA4LCA0LCAKKyAgICAyNTEsIDM0LCA4LCA0LCAyNTEsIDQ2LCA4LCA0LCAyNTEsIDM4LCA4LCA0LCAyNTAsIDI0MywgOCwgNCwgMjUwLCAyNTMsIDgsIAorICAgIDQsIDI1MCwgMjQ3LCA4LCA0LCAyNTAsIDI0NCwgOCwgNCwgMjUwLCAyNDYsIDgsIDQsIDI1MCwgMjM3LCA4LCA0LCAyNTAsIAorICAgIDIzNiwgOCwgNCwgMjUwLCAyNDEsIDgsIDQsIDI1MCwgMjQwLCA4LCA0LCAyNTAsIDIzOCwgOCwgNCwgMjUwLCAyMzksIDgsIAorICAgIDQsIDIyNywgNTEsIDgsIDQsIDIyNywgNTIsIDgsIDQsIDIyNywgMzgsIDgsIDQsIDIyNywgMzksIDgsIDQsIDIyNywgNDIsIAorICAgIDgsIDQsIDIyNywgNDEsIDgsIDQsIDIyNywgNDQsIDgsIDQsIDIyNywgNDMsIDgsIDQsIDIyNywgNDYsIDgsIDQsIDIyNywgCisgICAgNDUsIDgsIDQsIDIyNywgNTAsIDgsIDQsIDIyNywgNDcsIDgsIDQsIDIyNywgMzQsIDgsIDQsIDIyNywgMzMsIDgsIDQsIAorICAgIDIyNywgNDAsIDgsIDQsIDIyNywgMzcsIDgsIDQsIDIyNywgMzUsIDgsIDQsIDIyNywgMzYsIDgsIDQsIDIyNywgMjgsIDgsIAorICAgIDQsIDIyNywgMjcsIDgsIDQsIDIyNywgMzIsIDgsIDQsIDIyNywgMzEsIDgsIDQsIDIyNywgMjksIDgsIDQsIDIyNywgMzAsIAorICAgIDgsIDQsIDIzMSwgMTY5LCA4LCA0LCAyMzEsIDE2OCwgOCwgNCwgMjMxLCAxNzEsIDgsIDQsIDIzMSwgMTcwLCA4LCA0LCAKKyAgICAyMzEsIDE2MSwgOCwgNCwgMjMxLCAxNjMsIDgsIDQsIDIzMSwgMTYyLCA4LCA0LCAyMzEsIDE2NSwgOCwgNCwgMjMxLCAxNjQsIAorICAgIDgsIDQsIDIzMSwgMTY3LCA4LCA0LCAyMzEsIDE2NiwgOCwgNCwgMjMxLCAxNTYsIDgsIDQsIDIzMSwgMTU1LCA4LCA0LCAKKyAgICAyMzEsIDE2MCwgOCwgNCwgMjMxLCAxNTksIDgsIDQsIDIzMSwgMTU3LCA4LCA0LCAyMzEsIDE1OCwgOCwgNCwgMjMxLCAxNTAsIAorICAgIDgsIDQsIDIzMSwgMTQ5LCA4LCA0LCAyMzEsIDE1NCwgOCwgNCwgMjMxLCAxNTMsIDgsIDQsIDIzMSwgMTUxLCA4LCA0LCAKKyAgICAyMzEsIDE1MiwgOCwgNCwgMjI0LCAyNTMsIDgsIDQsIDIyNCwgMjUwLCA4LCA0LCAyMjUsIDI1LCA4LCA0LCAyMjUsIDcsIDgsIAorICAgIDQsIDIyNCwgMTYzLCA4LCA0LCAyMjQsIDE2NSwgOCwgNCwgMjI0LCAxNjQsIDgsIDQsIDIyNCwgMTc4LCA4LCA0LCAyMjQsIAorICAgIDE3NiwgOCwgNCwgMjI0LCAyMDAsIDgsIDQsIDIyNCwgMTkzLCA4LCA0LCAyMjQsIDIyNiwgOCwgNCwgMjI0LCAyMjMsIDgsIAorICAgIDQsIDIyNCwgMjQ2LCA4LCA0LCAyMjQsIDIzMywgOCwgNCwgMjI0LCAxNTksIDgsIDQsIDIyNCwgMTU4LCA4LCA0LCAyMjQsIAorICAgIDE3MCwgOCwgNCwgMjI0LCAxNjIsIDgsIDQsIDIyNCwgMTYwLCA4LCA0LCAyMjQsIDE2MSwgOCwgNCwgMjI0LCAxNDMsIDgsIAorICAgIDQsIDIyNCwgMTQyLCA4LCA0LCAyMjQsIDE0OSwgOCwgNCwgMjI0LCAxNDYsIDgsIDQsIDIyNCwgMTQ0LCA4LCA0LCAyMjQsIAorICAgIDE0NSwgOCwgNCwgMjI3LCAyMjgsIDgsIDQsIDIyNywgMjIzLCA4LCA0LCAyMDMsIDgsIDQsIDIyNywgMjMzLCA4LCA0LCAKKyAgICAyMjcsIDYsIDgsIDQsIDIyNywgOCwgOCwgNCwgMjI3LCA3LCA4LCA0LCAyMjcsIDYwLCA4LCA0LCAyMjcsIDU0LCA4LCA0LCAKKyAgICAyMjcsIDc1LCA4LCA0LCAyMjcsIDYzLCA4LCA0LCAyMjcsIDE1NSwgOCwgNCwgMjI3LCAyMTYsIDgsIDQsIDIyNywgMTg1LCAKKyAgICA4LCA0LCAyMjYsIDI1NSwgOCwgNCwgMjI2LCAyNTMsIDgsIDQsIDIyNywgMjIsIDgsIDQsIDIyNywgNSwgOCwgNCwgMjI3LCAKKyAgICAxLCA4LCA0LCAyMjcsIDIsIDgsIDQsIDIyNiwgMjM4LCA4LCA0LCAyMjYsIDIzNywgOCwgNCwgMjI2LCAyNDMsIDgsIDQsIAorICAgIDIyNiwgMjQxLCA4LCA0LCAyMjYsIDIzOSwgOCwgNCwgMjI2LCAyNDAsIDgsIDQsIDIzNywgODksIDgsIDQsIDIzNywgODgsIAorICAgIDgsIDQsIDIzNywgOTgsIDgsIDQsIDIzNywgOTAsIDgsIDQsIDIzNywgOTQsIDgsIDQsIDIzNywgOTMsIDgsIDQsIDIzNywgCisgICAgOTYsIDgsIDQsIDIzNywgOTUsIDgsIDQsIDIzNywgMzQsIDgsIDQsIDIzNywgMzMsIDgsIDQsIDIzNywgMzYsIDgsIDQsIAorICAgIDIzNywgMzUsIDgsIDQsIDIzNywgNDcsIDgsIDQsIDIzNywgNDYsIDgsIDQsIDIzNywgNTksIDgsIDQsIDIzNywgNDksIDgsIAorICAgIDQsIDIzNywgMjgsIDgsIDQsIDIzNywgMjYsIDgsIDQsIDIzNywgNDMsIDgsIDQsIDIzNywgMzIsIDgsIDQsIDIzNywgMjksIAorICAgIDgsIDQsIDIzNywgMzAsIDgsIDQsIDIzNywgMjAsIDgsIDQsIDIzNywgMTksIDgsIDQsIDIzNywgMjQsIDgsIDQsIDIzNywgCisgICAgMjMsIDgsIDQsIDIzNywgMjEsIDgsIDQsIDIzNywgMjIsIDgsIDQsIDIyOCwgMTE0LCA4LCA0LCAyMjgsIDExMiwgOCwgNCwgCisgICAgMjI4LCAxMjEsIDgsIDQsIDIyOCwgMTE1LCA4LCA0LCAyMjgsIDExOCwgOCwgNCwgMjI4LCAxMTcsIDgsIDQsIDIyOCwgMTIwLCAKKyAgICA4LCA0LCAyMjgsIDExOSwgOCwgNCwgMjI4LCA3MCwgOCwgNCwgMjI4LCA2NywgOCwgNCwgMjI4LCA3MiwgOCwgNCwgMjI4LCAKKyAgICA3MSwgOCwgNCwgMjI4LCAxMDEsIDgsIDQsIDIyOCwgMTAwLCA4LCA0LCAyMjgsIDExMCwgOCwgNCwgMjI4LCAxMDQsIDgsIDQsIAorICAgIDIyOCwgNjIsIDgsIDQsIDIyOCwgNTgsIDgsIDQsIDIyOCwgOTgsIDgsIDQsIDIyOCwgNjYsIDgsIDQsIDIyOCwgNjQsIDgsIAorICAgIDQsIDIyOCwgNjUsIDgsIDQsIDIyOCwgNDIsIDgsIDQsIDIyOCwgNDAsIDgsIDQsIDIyOCwgNTIsIDgsIDQsIDIyOCwgNDUsIAorICAgIDgsIDQsIDIyOCwgNDMsIDgsIDQsIDIyOCwgNDQsIDgsIDQsIDIzNywgNzgsIDgsIDQsIDIzNywgNzcsIDgsIDQsIDIzNywgCisgICAgODQsIDgsIDQsIDIzNywgNzksIDgsIDQsIDIzNywgODEsIDgsIDQsIDIzNywgODAsIDgsIDQsIDIzNywgODMsIDgsIDQsIAorICAgIDIzNywgODIsIDgsIDQsIDIzNywgNjksIDgsIDQsIDIzNywgNzEsIDgsIDQsIDIzNywgNzAsIDgsIDQsIDIzNywgNzQsIDgsIAorICAgIDQsIDIzNywgNzMsIDgsIDQsIDIzNywgNzYsIDgsIDQsIDIzNywgNzUsIDgsIDQsIDIzNywgNjUsIDgsIDQsIDIzNywgNjQsIAorICAgIDgsIDQsIDIzNywgNzIsIDgsIDQsIDIzNywgNjgsIDgsIDQsIDIzNywgNjYsIDgsIDQsIDIzNywgNjcsIDgsIDQsIDIzNywgCisgICAgNjEsIDgsIDQsIDIzNywgNjAsIDgsIDQsIDIzNywgNjMsIDgsIDQsIDIzNywgNjIsIDgsIDQsIDIzMiwgNywgOCwgNCwgMjMyLCAKKyAgICA2LCA4LCA0LCAyMzIsIDEzLCA4LCA0LCAyMzIsIDgsIDgsIDQsIDIzMiwgMTAsIDgsIDQsIDIzMiwgOSwgOCwgNCwgMjMyLCAKKyAgICAxMiwgOCwgNCwgMjMyLCAxMSwgOCwgNCwgMjMxLCAyNTMsIDgsIDQsIDIzMSwgMjU0LCA4LCA0LCAyMzIsIDIsIDgsIDQsIAorICAgIDIzMiwgMSwgOCwgNCwgMjMyLCA1LCA4LCA0LCAyMzIsIDMsIDgsIDQsIDIzMSwgMjQ5LCA4LCA0LCAyMzIsIDAsIDgsIDQsIAorICAgIDIzMSwgMjUyLCA4LCA0LCAyMzEsIDI1MCwgOCwgNCwgMjMxLCAyNTEsIDgsIDQsIDIzMSwgMjQ0LCA4LCA0LCAyMzEsIDI0MywgCisgICAgOCwgNCwgMjMxLCAyNDgsIDgsIDQsIDIzMSwgMjQ3LCA4LCA0LCAyMzEsIDI0NSwgOCwgNCwgMjMxLCAyNDYsIDgsIDQsIAorICAgIDIzMSwgNTksIDgsIDQsIDIzMSwgNTgsIDgsIDQsIDIzMSwgNjcsIDgsIDQsIDIzMSwgNjEsIDgsIDQsIDIzMSwgNjQsIDgsIAorICAgIDQsIDIzMSwgNjMsIDgsIDQsIDIzMSwgNjYsIDgsIDQsIDIzMSwgNjUsIDgsIDQsIDIzMSwgNDcsIDgsIDQsIDIzMSwgNDksIAorICAgIDgsIDQsIDIzMSwgNDgsIDgsIDQsIDIzMSwgNTIsIDgsIDQsIDIzMSwgNTEsIDgsIDQsIDIzMSwgNTYsIDgsIDQsIDIzMSwgCisgICAgNTMsIDgsIDQsIDIzMSwgNDUsIDgsIDQsIDIzMSwgNDQsIDgsIDQsIDIzMSwgNTAsIDgsIDQsIDIzMSwgNDYsIDgsIDQsIAorICAgIDIxOCwgMTIzLCA4LCA0LCAyMTgsIDEyMiwgOCwgNCwgMjE4LCAxMzAsIDgsIDQsIDIxOCwgMTI1LCA4LCA0LCAyMTgsIDEyNywgCisgICAgOCwgNCwgMjE4LCAxMjYsIDgsIDQsIDIxOCwgMTI5LCA4LCA0LCAyMTgsIDEyOCwgOCwgNCwgMjE4LCAxMTIsIDgsIDQsIAorICAgIDIxOCwgMTEzLCA4LCA0LCAyMTgsIDExNywgOCwgNCwgMjE4LCAxMTYsIDgsIDQsIDIxOCwgMTIxLCA4LCA0LCAyMTgsIDExOSwgCisgICAgOCwgNCwgMjE4LCA5NCwgOCwgNCwgMjE4LCA5MiwgOCwgNCwgMjE4LCAxMDQsIDgsIDQsIDIxOCwgOTcsIDgsIDQsIDIxOCwgCisgICAgOTUsIDgsIDQsIDIxOCwgOTYsIDgsIDQsIDIxNywgMjM3LCA4LCA0LCAyMTcsIDIzNSwgOCwgNCwgMjE3LCAyNTAsIDgsIDQsIAorICAgIDIxNywgMjM4LCA4LCA0LCAyMTcsIDI0NSwgOCwgNCwgMjE3LCAyNDQsIDgsIDQsIDIxNywgMjQ3LCA4LCA0LCAyMTcsIDI0NiwgCisgICAgOCwgNCwgMjE3LCAxODUsIDgsIDQsIDIxNywgMTg0LCA4LCA0LCAyMTcsIDE4NywgOCwgNCwgMjE3LCAxODYsIDgsIDQsIAorICAgIDIxNywgMjEyLCA4LCA0LCAyMTcsIDIwOSwgOCwgNCwgMjE3LCAyMzEsIDgsIDQsIDIxNywgMjE1LCA4LCA0LCAyMTcsIDE3NywgCisgICAgOCwgNCwgMjE3LCAxNzUsIDgsIDQsIDIxNywgMjAwLCA4LCA0LCAyMTcsIDE4MywgOCwgNCwgMjE3LCAxODAsIDgsIDQsIAorICAgIDIxNywgMTgxLCA4LCA0LCAyMTcsIDE2MCwgOCwgNCwgMjE3LCAxNTksIDgsIDQsIDIxNywgMTY2LCA4LCA0LCAyMTcsIDE2MywgCisgICAgOCwgNCwgMjE3LCAxNjEsIDgsIDQsIDIxNywgMTYyLCA4LCAzMiwgMjI4LCAxMDEsIDgsIDMyLCAyMzUsIDY3LCA4LCAzMiwgCisgICAgMjM2LCA4OSwgOCwgMzIsIDIzMSwgNjEsIDgsIDMyLCAyNTAsIDU1LCA4LCAzMiwgMjIzLCAxODksIDgsIDMyLCAyNDQsIAorICAgIDE0MywgOCwgMzIsIDI0NCwgMTc0LCA4LCAzMiwgMjMzLCAxOTYsIDgsIDMyLCAyNDIsIDEzMywgOCwgMzIsIDIzNCwgMTkzLCAKKyAgICA4LCAzMiwgMjUyLCAxNTIsIDgsIDMyLCAyMzMsIDExNSwgOCwgMzIsIDIxNywgMjMxLCA4LCAzMiwgMjI4LCAxODUsIDgsIAorICAgIDMyLCAyNDIsIDEyNywgOCwgMzIsIDIyMiwgMTEwLCA4LCAzMiwgMjQ1LCAwLCA4LCAzMiwgMjE3LCA1LCA4LCAzMiwgMjUwLCAKKyAgICA0OSwgOCwgMzIsIDI0OSwgOTcsIDgsIDMyLCAyNTEsIDIyOCwgOCwgMzIsIDI0NCwgMTM5LCA4LCAzMiwgMjMxLCA1MywgOCwgCisgICAgMzIsIDIyMSwgMCwgOCwgMzIsIDIzMCwgMTIwLCA4LCAzMiwgMjM3LCA2NSwgOCwgMzIsIDIxNywgMTcsIDgsIDMyLCAyMjgsIAorICAgIDE2NywgOCwgMzIsIDI0MywgNDQsIDgsIDMyLCAyMTcsIDIzNywgOCwgMzIsIDIxOSwgNTMsIDgsIDMyLCAyMjQsIDE0OSwgOCwgCisgICAgMzIsIDIxOSwgMTU2LCA4LCAzMiwgMjE3LCAxMTQsIDgsIDMyLCAyMzcsIDU5LCA4LCAzMiwgMjMxLCAyNCwgOCwgMzIsIAorICAgIDIzNywgNjMsIDgsIDMyLCAyNDQsIDUxLCA4LCAzMiwgMjM3LCA4MywgOCwgMzIsIDIxOCwgMTg3LCA4LCAzMiwgMjQ3LCAKKyAgICAxMTEsIDgsIDMyLCAyMjQsIDE2MSwgOCwgMzIsIDIzNSwgNjMsIDgsIDMyLCAyNTAsIDU4LCA4LCAzMiwgMjUwLCA4NSwgOCwgCisgICAgMzIsIDI1MCwgMjIzLCA4LCAzMiwgMjQyLCAxMzAsIDgsIDMyLCAyMjQsIDI1MywgOCwgMzIsIDIxNywgNCwgOCwgMzIsIAorICAgIDIyNCwgMTkzLCA4LCAzMiwgMjUxLCA0NiwgOCwgMzIsIDIxNiwgMjM1LCA4LCAzMiwgMjMyLCAxOTIsIDgsIDMyLCAyMzYsIAorICAgIDE4NCwgMjM1LCAyOCwgMSwgMjUyLCAyMzcsIDIzNSwgMjgsIDEsIDE4NywgMjM1LCAyOCwgMSwgMjI5LCAxNDEsIDIzNSwgCisgICAgMjgsIDEsIDI0OSwgMjA3LCAyMzUsIDI4LCAxLCAyMjIsIDE1NSwgMjM1LCAyOCwgMSwgMjIyLCAzNSwgMjM1LCAyOCwgMSwgCisgICAgMjQ1LCAwLCAyMzUsIDI4LCAxLCAxNzUsIDIzNSwgMjgsIDEsIDIzNiwgMTQ5LCAyMzUsIDI4LCAxLCAyMzcsIDEyMywgMjM1LCAKKyAgICAyOCwgMSwgMjUxLCAxNjksIDIzNSwgMjgsIDEsIDI1MSwgNjksIDIzNSwgMjgsIDEsIDI0NywgNzQsIDIzNSwgMjgsIDEsIAorICAgIDIyMSwgNTUsIDIzNSwgMjgsIDEsIDIyMSwgNDcsIDIzNSwgMjgsIDEsIDE5NiwgMjM1LCAyOCwgMSwgMjA4LCAyMzUsIDI4LCAKKyAgICAxLCAyMzUsIDE4OCwgMjM1LCAyOCwgMSwgMjI2LCAxNzcsIDIzNSwgMjgsIDEsIDIxNywgODAsIDIzNSwgMjgsIDEsIDIxNywgCisgICAgMTE0LCAyMzUsIDI4LCAxLCAyMzIsIDExNSwgMjM1LCAyOCwgMSwgMTU1LCAyMzUsIDI4LCAxLCAyMTgsIDEzOCwgMjM1LCAKKyAgICAyOCwgMSwgMjQzLCAxMjEsIDIzNSwgMjgsIDEsIDI0NiwgOCwgMjM1LCAyOCwgMSwgMjE5LCA3LCAyMzUsIDI4LCAxLCAyMjUsIAorICAgIDI1LCAyMzUsIDI4LCAxLCAxODQsIDIzNSwgMjgsIDEsIDI0NCwgMTI1LCAyMzUsIDI4LCAxLCA2MCwgMjM1LCAyOCwgMSwgCisgICAgMjU0LCAyMzQsIDIzNSwgMjgsIDEsIDczLCAyMzUsIDI4LCAxLCAyNDYsIDExNSwgMjM1LCAyOCwgMSwgNzIsIDIzNSwgMjgsIAorICAgIDEsIDc0LCAyMzUsIDI4LCAxLCA2OCwgMjM1LCAyOCwgMSwgMjIwLCAxMTAsIDIzNSwgMjgsIDEsIDIyMCwgMTA1LCAyMzUsIAorICAgIDI4LCAxLCAyMzAsIDE2NywgMjM1LCAyOCwgMSwgMTQ1LCAyMzMsIDQwLCAyMjEsIDIwNSwgMjM1LCAyOCwgMSwgMTQ1LCAKKyAgICAyMzIsIDIzOCwgMjI5LCAzNywgMjM1LCAyOCwgMSwgMTQ1LCAyMzMsIDQwLCAyNTAsIDU3LCAyMzUsIDI4LCAxLCAxNDUsIAorICAgIDIzMywgNDAsIDI1MiwgNDEsIDIzNSwgMjgsIDEsIDE0NSwgMjMzLCA0MCwgMjA4LCAyMzUsIDI4LCAxLCAxNDUsIDIzMywgCisgICAgNDAsIDIzNywgMTA0LCAyMzUsIDI4LCAyMjgsIDE5NywgMjUwLCAxNjgsIDIzNSwgMjgsIDIyOCwgMTk3LCAyNDUsIDkwLCAKKyAgICAyMjMsIDEzNiwgMzgsIDQsIDI0NiwgMjUwLCAzOCwgNCwgMjQ2LCAyNDcsIDM4LCA0LCAyNDMsIDE0OCwgMzgsIDQsIDIxOCwgCisgICAgMjI0LCAzOCwgNCwgMjE4LCAyMjMsIDM4LCA0LCAyMjksIDE5MSwgMzgsIDQsIDI1MiwgOTEsIDM4LCA0LCAyNTIsIDEzNywgCisgICAgMzgsIDQsIDIzNCwgMzQsIDM4LCA0LCAyMzYsIDIzLCAzOCwgNCwgMjMzLCAyMjMsIDM4LCA0LCAyNDQsIDIwMSwgMzgsIDQsIAorICAgIDI0NSwgMjI2LCAzOCwgNCwgMjE5LCAxNjAsIDM4LCA0LCAyMjIsIDgwLCAzOCwgNCwgMjIyLCAyMSwgMzgsIDQsIDI0OSwgCisgICAgMjgsIDM4LCA0LCAyNDksIDI1LCAzOCwgNCwgMjM1LCAxMTgsIDM4LCA0LCAyMjcsIDIwMCwgMzgsIDQsIDI0OSwgODIsIDM4LCAKKyAgICA0LCAyMzIsIDE2MywgMzgsIDQsIDIyNiwgODQsIDM4LCA0LCAyMjQsIDI0NCwgMzgsIDQsIDIxNywgOTAsIDM4LCA0LCAyMTcsIAorICAgIDcxLCAzOCwgNCwgMjUxLCA5MSwgMzgsIDQsIDIzNywgMTEzLCAzOCwgNCwgMjMyLCAxNCwgMzgsIDQsIDIxOCwgMjIsIDM4LCAKKyAgICA0LCAyMzYsIDE4MywgMzgsIDQsIDIzMiwgOTgsIDM4LCA0LCAyNDQsIDE4NCwgMzgsIDQsIDIzNCwgMTYsIDM4LCA0LCAyMzIsIAorICAgIDEzOSwgMzgsIDQsIDIzMSwgNzIsIDM4LCA0LCA3MiwgMzgsIDQsIDIzNywgMjIzLCAzOCwgNCwgMjQzLCAxMTIsIDM4LCA0LCAKKyAgICAyNDMsIDk2LCAzOCwgNCwgMjE4LCAyMDQsIDM4LCA0LCAyMTgsIDE5NSwgMzgsIDQsIDIyOSwgMTA4LCAzOCwgNCwgMjUyLCAKKyAgICA4OSwgMzgsIDQsIDI1MiwgODQsIDM4LCA0LCAyMzQsIDMyLCAzOCwgNCwgMjM2LCAyMSwgMzgsIDQsIDIzMywgMjIyLCAzOCwgCisgICAgNCwgMjQ0LCAxOTksIDM4LCA0LCAyNDUsIDIwMywgMzgsIDQsIDIxOSwgOTQsIDM4LCA0LCAyMjEsIDIwNSwgMzgsIDQsIAorICAgIDIyMiwgMiwgMzgsIDQsIDI0OSwgMjAsIDM4LCA0LCAyNDksIDI0LCAzOCwgNCwgMjM1LCA2NywgMzgsIDQsIDIyNywgMTQ3LCAKKyAgICAzOCwgNCwgMjQ5LCAxNSwgMzgsIDQsIDIzMiwgMTYwLCAzOCwgNCwgMjI0LCAxNDAsIDM4LCA0LCAyMjQsIDIyMSwgMzgsIDQsIAorICAgIDIxNywgNDIsIDM4LCA0LCAyMTcsIDY3LCAzOCwgNCwgMjUwLCAyMzUsIDM4LCA0LCAyMzcsIDk4LCAzOCwgNCwgMjMyLCAxMywgCisgICAgMzgsIDQsIDIxNywgMjUwLCAzOCwgNCwgMjM2LCAxMTMsIDM4LCA0LCAyMzIsIDk2LCAzOCwgNCwgMjQ0LCAxMDMsIDM4LCA0LCAKKyAgICAyMzMsIDE5NiwgMzgsIDQsIDIzMiwgNjIsIDM4LCA0LCAyMzEsIDY3LCAzOCwgNCwgNjAsIDM4LCA0LCAyNTQsIDEzMSwgMzgsIAorICAgIDQsIDIzMiwgMTExLCAzOCwgNCwgMTU1LCAzOCwgNCwgMjQzLCAxOTEsIDM4LCA0LCAyMTksIDcsIDM4LCA0LCAyMTgsIDI1MywgCisgICAgMzgsIDQsIDE4NywgMzgsIDQsIDI1MiwgOTQsIDM4LCA0LCAyNTIsIDIzNywgMzgsIDQsIDIzNCwgMzcsIDM4LCA0LCAyMzYsIAorICAgIDI2LCAzOCwgNCwgMjM2LCAyNSwgMzgsIDQsIDIzMywgMjI1LCAzOCwgNCwgMjQ0LCAyMDQsIDM4LCA0LCAyNDYsIDgsIDM4LCAKKyAgICA0LCAyMTksIDE4OSwgMzgsIDQsIDIyMiwgMTU1LCAzOCwgNCwgMjIyLCAzNSwgMzgsIDQsIDI0OSwgMzYsIDM4LCA0LCAyNDksIAorICAgIDI3LCAzOCwgNCwgMjM1LCAxODgsIDM4LCA0LCAyMDMsIDM4LCA0LCAyNDksIDIwNywgMzgsIDQsIDIzMiwgMTY5LCAzOCwgNCwgCisgICAgMjI2LCAxNzcsIDM4LCA0LCAyMjUsIDI1LCAzOCwgNCwgMjE3LCAxMTQsIDM4LCA0LCAyMTcsIDgwLCAzOCwgNCwgMjUxLCAKKyAgICAxNjksIDM4LCA0LCAyMzcsIDEyMywgMzgsIDQsIDIzMiwgMTgsIDM4LCA0LCAxODQsIDM4LCA0LCAxNzUsIDM4LCA0LCAyMzYsIAorICAgIDIzMywgMzgsIDQsIDIzMiwgMTAwLCAzOCwgNCwgMjQ1LCAwLCAzOCwgNCwgMTk2LCAzOCwgNCwgMjA4LCAzOCwgNCwgMjMxLCAKKyAgICA3NywgMzgsIDQsIDIzMCwgMTI3LCAzOCwgNCwgMjMwLCAxMjQsIDM4LCA0LCAyNDIsIDI0OCwgMzgsIDQsIDIxOCwgMTgwLCAKKyAgICAzOCwgNCwgMjE4LCAxNzYsIDM4LCA0LCAyMjksIDIxLCAzOCwgNCwgMjUyLCA4NywgMzgsIDQsIDI1MiwgMzQsIDM4LCA0LCAKKyAgICAyMzQsIDMwLCAzOCwgNCwgMjM2LCAxOSwgMzgsIDQsIDIzMywgMjIwLCAzOCwgNCwgMjQ0LCAxOTYsIDM4LCA0LCAyNDUsIAorICAgIDEzNCwgMzgsIDQsIDIxOSwgNjQsIDM4LCA0LCAyMjEsIDEyMiwgMzgsIDQsIDIyMSwgMjM2LCAzOCwgNCwgMjQ5LCAxOCwgCisgICAgMzgsIDQsIDI0OSwgMjIsIDM4LCA0LCAyMzQsIDI0OCwgMzgsIDQsIDIyNywgNjcsIDM4LCA0LCAyNDgsIDE1MCwgMzgsIDQsIAorICAgIDIzMiwgMTUyLCAzOCwgNCwgMjI0LCAxNCwgMzgsIDQsIDIyNCwgMTk1LCAzOCwgNCwgMjE3LCAxOSwgMzgsIDQsIDIxNywgCisgICAgNjQsIDM4LCA0LCAyNTAsIDEzMCwgMzgsIDQsIDIzNywgNTAsIDM4LCA0LCAyMzIsIDQsIDM4LCA0LCAyMTcsIDIxNiwgMzgsIAorICAgIDQsIDIzNiwgNDEsIDM4LCA0LCAyMzIsIDk0LCAzOCwgNCwgMjQ0LCA2MCwgMzgsIDQsIDIzMywgMTE5LCAzOCwgNCwgMjMxLCAKKyAgICAxOTUsIDM4LCA0LCAyMzEsIDU0LCAzOCwgNCwgNjgsIDM4LCA0LCAyMjAsIDg3LCAzOCwgNCwgMjQyLCAxNzMsIDM4LCA0LCAKKyAgICAyNDIsIDE2MywgMzgsIDQsIDIxOCwgMTY1LCAzOCwgNCwgMjE4LCAxNjEsIDM4LCA0LCAyMjgsIDIwMiwgMzgsIDQsIDI1MiwgCisgICAgODYsIDM4LCA0LCAyNTEsIDI0OCwgMzgsIDQsIDIzNCwgMjksIDM4LCA0LCAyMzYsIDE4LCAzOCwgNCwgMjMzLCAyMTksIDM4LCAKKyAgICA0LCAyNDQsIDE5NSwgMzgsIDQsIDI0NSwgOTIsIDM4LCA0LCAyMTksIDU2LCAzOCwgNCwgMjIxLCAwLCAzOCwgNCwgMjIxLCAKKyAgICAyMjMsIDM4LCA0LCAyNDksIDE2LCAzOCwgNCwgMjQ5LCAyMSwgMzgsIDQsIDIzNCwgMjMxLCAzOCwgNCwgMjI3LCAyMiwgMzgsIAorICAgIDQsIDI0NywgMTExLCAzOCwgNCwgMjMyLCAxNDgsIDM4LCA0LCAyMjMsIDEwMywgMzgsIDQsIDIyNCwgMTcwLCAzOCwgNCwgCisgICAgMjE3LCAxMywgMzgsIDQsIDIxNywgNjAsIDM4LCA0LCAyNTAsIDkyLCAzOCwgNCwgMjM3LCA0MywgMzgsIDQsIDIzMiwgMCwgCisgICAgMzgsIDQsIDIxNywgMjAwLCAzOCwgNCwgMjM2LCA3LCAzOCwgNCwgMjMyLCA5MywgMzgsIDQsIDI0NCwgMTcsIDM4LCA0LCAKKyAgICAyMzMsIDk5LCAzOCwgNCwgMjMxLCAxNDQsIDM4LCA0LCAyMzEsIDUwLCAzOCwgNCwgNzQsIDM4LCA0LCAyMzAsIDEzOCwgMzgsIAorICAgIDQsIDIzMiwgODEsIDM4LCA0LCAyNDMsIDQsIDM4LCA0LCAyNDIsIDI0OSwgMzgsIDQsIDIxOCwgMTg3LCAzOCwgNCwgMjE4LCAKKyAgICAxODEsIDM4LCA0LCAyMjksIDM3LCAzOCwgNCwgMjUyLCA4OCwgMzgsIDQsIDI1MiwgNDEsIDM4LCA0LCAyMzQsIDMxLCAzOCwgCisgICAgNCwgMjM2LCAyMCwgMzgsIDQsIDIzMywgMjIxLCAzOCwgNCwgMjQ0LCAxOTgsIDM4LCA0LCAyNDQsIDE5NywgMzgsIDQsIAorICAgIDI0NSwgMTM5LCAzOCwgNCwgMjE5LCA3MiwgMzgsIDQsIDEwMSwgMzgsIDQsIDIyMSwgMjM5LCAzOCwgNCwgMjQ5LCAxOSwgCisgICAgMzgsIDQsIDI0OSwgMjMsIDM4LCA0LCAyMzUsIDEyLCAzOCwgNCwgMjI3LCA3NSwgMzgsIDQsIDI0OCwgMTY3LCAzOCwgNCwgCisgICAgMjMyLCAxNTQsIDM4LCA0LCAyMjQsIDI2LCAzOCwgNCwgMjI0LCAyMDAsIDM4LCA0LCAyMTcsIDIxLCAzOCwgNCwgMjE3LCAKKyAgICA2NSwgMzgsIDQsIDI1MCwgMTgyLCAzOCwgNCwgMjM3LCA1OSwgMzgsIDQsIDIzMiwgNSwgMzgsIDQsIDIxNywgMjMxLCAzOCwgCisgICAgNCwgMjM2LCA1NywgMzgsIDQsIDIzMiwgOTUsIDM4LCA0LCAyNDQsIDY4LCAzOCwgNCwgMjMzLCAxMzYsIDM4LCA0LCAyMzEsIAorICAgIDIwNCwgMzgsIDQsIDIzMSwgNTYsIDM4LCA0LCA3MywgMzgsIDQsIDI0NiwgMTk3LCAzOCwgNCwgMjMyLCAxMDQsIDM4LCA0LCAKKyAgICAyNDMsIDE2MiwgMzgsIDQsIDI0MywgMTM4LCAzOCwgNCwgMjE4LCAyMjcsIDM4LCA0LCAyMTgsIDIyMCwgMzgsIDQsIDIyOSwgCisgICAgMTk4LCAzOCwgNCwgMjUyLCA5MiwgMzgsIDQsIDI1MiwgMTQ0LCAzOCwgNCwgMjM0LCAzNSwgMzgsIDQsIDIzNiwgMjQsIDM4LCAKKyAgICA0LCAyMzYsIDIyLCAzOCwgNCwgMjMzLCAyMjQsIDM4LCA0LCAyNDQsIDIwMiwgMzgsIDQsIDI0NCwgMjAwLCAzOCwgNCwgCisgICAgMjQ1LCAyMzEsIDM4LCA0LCAyMTksIDE2NSwgMzgsIDQsIDIyMiwgODcsIDM4LCA0LCAyMjIsIDIyLCAzOCwgNCwgMjQ5LCAKKyAgICAyOSwgMzgsIDQsIDI0OSwgMjYsIDM4LCA0LCAyMzUsIDEyMiwgMzgsIDQsIDIyNywgMjE2LCAzOCwgNCwgMjQ5LCA5MiwgMzgsIAorICAgIDQsIDIzMiwgMTY0LCAzOCwgNCwgMjI2LCA5NCwgMzgsIDQsIDIyNCwgMjQ2LCAzOCwgNCwgMjE3LCA5MiwgMzgsIDQsIDIxNywgCisgICAgNzIsIDM4LCA0LCAyNTEsIDk5LCAzOCwgNCwgMjM3LCAxMTQsIDM4LCA0LCAyMzIsIDE1LCAzOCwgNCwgMjE4LCAyNSwgMzgsIAorICAgIDQsIDIzNiwgMTg0LCAzOCwgNCwgMjMyLCA5OSwgMzgsIDQsIDIzMiwgOTcsIDM4LCA0LCAyNDQsIDE5MSwgMzgsIDQsIDI0NCwgCisgICAgMTgxLCAzOCwgNCwgMjM0LCAyNSwgMzgsIDQsIDIzMiwgMTQxLCAzOCwgNCwgMjMxLCA3MywgMzgsIDQsIDIzMiwgMTE3LCAKKyAgICAzOCwgNCwgMjM1LCA5MywgMzgsIDI1MCwgMTY4LCAzOCwgMjQ1LCA5MCwgMjIzLCAxMzYsIDM4LCAyMjgsIDgyLCA3OCwgMzgsIAorICAgIDQsIDIzMiwgMTUzLCAyNDYsIDgsIDM4LCA0LCAyMzIsIDE1MywgMTc1LCAzOCwgNCwgMjMyLCAxNTMsIDIyNCwgMTQsIDM4LCAKKyAgICAxNiwgMjQ1LCAyMjMsIDM4LCAxNiwgMjM2LCAxODIsIDM4LCAxNiwgMjIxLCAxNzQsIDM4LCAxNiwgMjMyLCAzOCwgMzgsIAorICAgIDE2LCAyNTIsIDIwNSwgMzgsIDE2LCAyNDYsIDcsIDM4LCAxNiwgMjIyLCAxNTIsIDM4LCAxNiwgMjQ5LCAxNjUsIDM4LCAxNiwgCisgICAgMjQ4LCAxNDksIDM4LCAxNiwgMjM1LCAyNTMsIDM4LCAxNiwgMjIxLCAxMjUsIDM4LCAxNiwgMjQ4LCAxNjYsIDM4LCAxNiwgCisgICAgMjM3LCA1MSwgMzgsIDIwLCAyMTcsIDg0LCAzOCwgMjAsIDEwNywgMzgsIDIwLCAxMDMsIDM4LCAyMCwgMTYwLCAzOCwgMjAsIAorICAgIDE1NCwgMzgsIDIwLCAxNzQsIDM4LCAyMCwgMTgyLCAzOCwgMjAsIDE5MSwgMzgsIDIwLCAxODUsIDM4LCAyMCwgMTkwLCAzOCwgCisgICAgNCwgMjMyLCAxNTMsIDE5NiwgMzgsIDQsIDIzMiwgMTUzLCAyNDgsIDE2NywgMzEsIDYsIDEsIDIxNywgODgsIDMxLCAzLCAxLCAKKyAgICAyMTcsIDg4LCAzMSwgNiwgMSwgMjQ3LCA3MSwgMzEsIDMsIDEsIDI0NywgNzEsIDMxLCA2LCAxLCAyMTAsIDI0NywgNzMsIAorICAgIDMxLCAzLCAxLCAyMTAsIDI0NywgNzMsIDMxLCA2LCAxLCAyMzcsIDE2MiwgMzEsIDMsIDEsIDIzNywgMTYyLCAzMSwgNiwgMSwgCisgICAgMjQ4LCAxODEsIDMxLCAzLCAxLCAyNDgsIDE4MSwgMzEsIDYsIDEsIDIzMywgMTIzLCAyMjAsIDEwMiwgMzEsIDMsIDEsIAorICAgIDIzMywgMTIzLCAyMjAsIDEwMiwgMzEsIDYsIDEsIDI1MiwgMiwgMjMwLCAxNDMsIDMxLCAzLCAxLCAyNTIsIDIsIDIzMCwgCisgICAgMTQzLCAzMSwgNiwgMSwgMjMyLCAxMjMsIDIxOCwgMTEsIDMxLCAzLCAxLCAyMzIsIDEyMywgMjE4LCAxMSwgMzEsIDYsIDEsIAorICAgIDIxOCwgOCwgMiwgMjUyLCAyMzQsIDIxOCwgMTEsIDMxLCAzLCAxLCAyMTgsIDgsIDIsIDI1MiwgMjM0LCAyMTgsIDExLCAzMSwgCisgICAgNiwgMSwgMjM3LCAxNjAsIDIxOCwgMzYsIDMxLCAzLCAxLCAyMzcsIDE2MCwgMjE4LCAzNiwgMzEsIDYsIDEsIDIxMCwgMjE3LCAKKyAgICAyMDAsIDMxLCAzLCAxLCAyMTAsIDIxNywgMjAwLCAzMSwgNiwgMSwgMjM3LCAxNjAsIDYwLCAzMSwgMywgMSwgMjM3LCAxNjAsIAorICAgIDYwLCAzMSwgNiwgMSwgMjUwLCAxOTcsIDIzNSwgMjUsIDIxNywgMTc4LCAzMSwgMywgMSwgMjUwLCAxOTcsIDIzNSwgMjUsIAorICAgIDIxNywgMTc4LCAzMSwgNiwgMSwgMjUyLCA0NiwgMjE3LCAxNzgsIDMxLCAzLCAxLCAyNTIsIDQ2LCAyMTcsIDE3OCwgMzEsIAorICAgIDYsIDEsIDIzNywgMTYwLCAyNTAsIDE5NywgMjM1LCAyNSwgMjE3LCAxNzgsIDMxLCAzLCAxLCAyMzcsIDE2MCwgMjUwLCAKKyAgICAxOTcsIDIzNSwgMjUsIDIxNywgMTc4LCAzMSwgNiwgMSwgMjE3LCAyMzMsIDMxLCAzLCAxLCAyMTcsIDIzMywgMzEsIDYsIDEsIAorICAgIDIyNCwgMjEsIDI0OSwgOTIsIDMxLCAzLCAxLCAyMjQsIDIxLCAyNDksIDkyLCAzMSwgNiwgMSwgMjI0LCAyMSwgMjQ2LCAKKyAgICAyMTcsIDMxLCAzLCAxLCAyMjQsIDIxLCAyNDYsIDIxNywgMzEsIDYsIDEsIDIyNCwgMjEsIDI0NiwgMjA1LCAzMSwgMywgMSwgCisgICAgMjI0LCAyMSwgMjQ2LCAyMDUsIDMxLCA2LCAxLCAyMzMsIDEyNywgNzQsIDMxLCAzLCAxLCAyMzMsIDEyNywgNzQsIDMxLCA2LCAKKyAgICAxLCAyNTIsIDcwLCA3NCwgMzEsIDMsIDEsIDI1MiwgNzAsIDc0LCAzMSwgNiwgMSwgNTEsIDIzMywgMTI3LCA3NCwgMzEsIDMsIAorICAgIDEsIDUxLCAyMzMsIDEyNywgNzQsIDMxLCAxLCAyMzMsIDg2LCA3NCwgMzYsIDMxLCAyMTksIDQyLCAzNiwgMzEsIDIyMiwgCisgICAgNjYsIDIzMywgMTYyLCA1NSwgMzYsIDMxLCAyNDIsIDE2MiwgMjMzLCAxNjIsIDU1LCAzNiwgMzEsIDIyMSwgMjMyLCAyMzMsIAorICAgIDE2MiwgNTUsIDIyNCwgNTMsIDI1MywgMjUxLCAzNiwgMzEsIDIzNiwgMTk0LCAzNiwgMzEsIDIyOSwgMjAzLCAzMSwgMjM2LCAKKyAgICAxOTQsIDMxLCAyMjksIDIwMywgMzEsIDYsIDEsIDI0NywgODIsIDMxLCAzLCAxLCAyNDcsIDgyLCAzMSwgNiwgMSwgMjQ3LCAKKyAgICA2NCwgMzEsIDMsIDEsIDI0NywgNjQsIDMxLCA2LCAxLCAyMTcsIDUwLCAzMSwgMywgMSwgMjE3LCA1MCwgMzEsIDYsIDEsIAorICAgIDI1MSwgMTA4LCAzMSwgMywgMSwgMjUxLCAxMDgsIDMxLCA2LCAxLCAyNDcsIDYzLCAzMSwgMywgMSwgMjQ3LCA2MywgMzEsIAorICAgIDYsIDEsIDIyMiwgODgsIDIsIDIzMywgMTkzLCA5NiwgMzEsIDMsIDEsIDIyMiwgODgsIDIsIDIzMywgMTkzLCA5NiwgMzEsIAorICAgIDYsIDEsIDIyMCwgMjIzLCAzMSwgMywgMSwgMjIwLCAyMjMsIDMxLCA2LCAxLCAyMjEsIDMzLCAzMSwgMywgMSwgMjIxLCAzMywgCisgICAgMzEsIDYsIDEsIDIyMSwgMzcsIDMxLCAzLCAxLCAyMjEsIDM3LCAzMSwgNiwgMSwgMjIyLCA5MywgMzEsIDMsIDEsIDIyMiwgCisgICAgOTMsIDMxLCA2LCAxLCAyNDIsIDE1MSwgMzEsIDMsIDEsIDI0MiwgMTUxLCAzMSwgNiwgMSwgMjI0LCAxNTUsIDMxLCAzLCAxLCAKKyAgICAyMjQsIDE1NSwgMTM5LCAxLCA2MCwgMTM5LCAxLCAxNzUsIDEzOSwgMSwgNjgsIDEzOSwgMSwgMjM2LCA3LCAxMzksIDEsIAorICAgIDI0NiwgMjUwLCAxMzksIDEsIDIyNywgMjAwLCAxMzksIDEsIDIyMiwgMTQyLCAxMzksIDEsIDc0LCAxMzksIDEsIDIzMSwgCisgICAgNjcsIDEzOSwgMSwgNzIsIDEzOSwgMSwgMjM1LCAxODgsIDEzOSwgMSwgMTg3LCAxMzksIDEsIDIyNywgOTgsIDEzOSwgMSwgCisgICAgMjI3LCAxNDMsIDEzOSwgMSwgMjM1LCAxMTcsIDEzOSwgMSwgMjM0LCAxNSwgMTM5LCAxLCAyMjIsIDE1MiwgMTM5LCAxLCAKKyAgICAyMzIsIDE2OCwgMTM5LCAxLCAyMzIsIDE3LCAxMzksIDEsIDE4OSwgMTM5LCAxLCAyMjMsIDQzLCAxMzksIDEsIDIzMywgOTksIAorICAgIDEzOSwgMSwgMjI0LCAyMTYsIDEzOSwgMSwgMjI0LCAxNDAsIDEzOSwgMSwgMjI0LCAyMjUsIDEzOSwgMSwgMjI1LCA0NCwgCisgICAgMTM5LCAxLCAyMzUsIDIwOCwgMTM5LCAxLCAyMzYsIDE1OSwgMTM5LCAxLCAyMzEsIDExNiwgMTM5LCAxLCAyMzEsIDE0NCwgCisgICAgMTM5LCAxLCAyMzEsIDI1NSwgMTM5LCAxLCAyMTcsIDIxNCwgMTM5LCAxLCAyMjQsIDE3MCwgMTM5LCAxLCAyMTcsIDE4MiwgCisgICAgMTM5LCAxLCAxODQsIDEzOSwgMSwgMjMxLCAxNDcsIDEzOSwgMSwgMjM2LCAxNTcsIDEzOSwgMSwgMjI5LCAxNDUsIDEzOSwgCisgICAgMSwgMjMyLCAxNCwgMTM5LCAxLCAyMzEsIDE0NiwgMTM5LCAxLCAyMjgsIDE5OSwgMTM5LCAxLCAyMTgsIDE2NCwgMTM5LCAxLCAKKyAgICAyMjksIDE5MSwgMTM5LCAxLCAyNDUsIDIyNiwgMTM5LCAxLCAyMjcsIDIyLCAxMzksIDEsIDIzNCwgMjMxLCAxMzksIDEsIAorICAgIDIzMywgMTk2LCAxMzksIDEsIDIzMiwgNjIsIDEzOSwgMSwgMjI3LCAxNjEsIDEzOSwgMSwgMjI3LCAyNDksIDEzOSwgMSwgCisgICAgMjM2LCAxNjgsIDEzOSwgMSwgMjMyLCA4NiwgMTM5LCAxLCAyMzIsIDEwMCwgMTM5LCAxLCAyMzIsIDExNSwgMTM5LCAxLCAKKyAgICAyMjQsIDIwMCwgMTM5LCAxLCAyMjgsIDIwMCwgMTM5LCAxLCAyNDUsIDkyLCAxMzksIDEsIDI0NSwgMTM2LCAxMzksIDEsIAorICAgIDIxOSwgNywgMTM5LCAxLCAyMDgsIDEzOSwgMSwgMjM1LCA2NywgMTM5LCAxLCAyMjksIDEwOCwgMTM5LCAxLCAyMzQsIDI0NCwgCisgICAgMTM5LCAxLCAyMzYsIDU3LCAxMzksIDEsIDIzNCwgMzMsIDEzOSwgMSwgMjI3LCAxODcsIDEzOSwgMSwgMjMzLCAyNTEsIAorICAgIDEzOSwgMSwgMTk2LCAxMzksIDEsIDIyMSwgMjA1LCAxMzksIDEsIDIzNiwgMTEzLCAxMzksIDEsIDIzMywgMTM2LCAxMzksIAorICAgIDEsIDIzNCwgMzYsIDEzOSwgMSwgMjIyLCA1MCwgMTM5LCAxLCAyMzYsIDI2LCAxMzksIDEsIDIyMiwgNjUsIDEzOSwgMSwgCisgICAgMjMxLCAxNDUsIDEzOSwgMSwgMjI2LCAxNDcsIDEzOSwgMSwgMjQ2LCA0LCAxMzksIDEsIDIzNiwgMjgsIDEzOSwgMSwgMjM2LCAKKyAgICA1NCwgMTM5LCAzNiwgMTY0LCAyMzYsIDM2LCAxMzksIDM2LCAxNjQsIDIyMCwgMjUwLCAxMzksIDIzMiwgMTYsIDEzOSwgCisgICAgMjQ1LCA5MCwgMjIzLCAxMzYsIDEzOSwgMjUwLCAxNzUsIDEzOSwgMjUwLCAxNjgsIDEzOSwgMjI1LCA2NywgMTM5LCAyMjgsIAorICAgIDgyLCA3OCwgNTgsIDEsIDI1MSwgMjEsIDE0NSwgMjE3LCAyNDEsIDIyOSwgNzIsIDU4LCAxLCAyNTEsIDIxLCAxNDUsIDIxOCwgCisgICAgNDYsIDIyOSwgNzIsIDU4LCAxLCAyNTEsIDIxLCAxNDUsIDIxNywgMjQxLCAyMjUsIDgsIDU4LCAxLCAyNTEsIDIxLCAxNDUsIAorICAgIDIxOCwgNDYsIDIyNSwgOCwgNTgsIDEsIDI1MSwgMjEsIDE0NSwgMjE3LCAyNDEsIDIyOCwgOTgsIDU4LCAxLCAyNTEsIDIxLCAKKyAgICAxNDUsIDIxOCwgNDYsIDIyOCwgOTgsIDU4LCAxLCAyNTEsIDIxLCAxNDUsIDIxNywgMjQxLCAyMjcsIDIyLCA1OCwgMSwgCisgICAgMjUxLCAyMSwgMTQ1LCAyMTgsIDQ2LCAyMjcsIDIyLCA1OCwgMSwgMjQ2LCA4NSwgMjQ3LCAxNDMsIDE0NSwgMTM1LCA1OCwgCisgICAgMSwgMTE2LCAyNDcsIDE0MywgMTQ1LCAxMzUsIDU4LCAxLCAyMzMsIDE5NCwgMjQ3LCAxNDMsIDE0NSwgMTM1LCA1OCwgMSwgCisgICAgMTA5LCAyNDcsIDE0MywgMTQ1LCAxMzUsIDU4LCAxLCAyNDYsIDg0LCAyNDcsIDE0MywgMTQ1LCAxMzUsIDU4LCAxLCAyNDYsIAorICAgIDg1LCAyNDcsIDE0MywgMjM1LCAxMDksIDE0NSwgMTM1LCA1OCwgMSwgMTE2LCAyNDcsIDE0MywgMjM1LCAxMDksIDE0NSwgCisgICAgMTM1LCA1OCwgMSwgMjMzLCAxOTQsIDI0NywgMTQzLCAyMzUsIDEwOSwgMTQ1LCAxMzUsIDU4LCAxLCAxMDksIDI0NywgMTQzLCAKKyAgICAyMzUsIDEwOSwgMTQ1LCAxMzUsIDU4LCAxLCAyNDYsIDg0LCAyNDcsIDE0MywgMjM1LCAxMDksIDE0NSwgMTM1LCA1OCwgMSwgCisgICAgMjQ2LCA4NSwgMjM1LCAxMDksIDE0NSwgMTM1LCA1OCwgMSwgMTE2LCAyMzUsIDEwOSwgMTQ1LCAxMzUsIDU4LCAxLCAyMzMsIAorICAgIDE5NCwgMjM1LCAxMDksIDE0NSwgMTM1LCA1OCwgMSwgMTA5LCAyMzUsIDEwOSwgMTQ1LCAxMzUsIDU4LCAxLCAyNDYsIDg0LCAKKyAgICAyMzUsIDEwOSwgMTQ1LCAxMzUsIDU4LCAxLCA2MSwgNjksIDEzNSwgNTgsIDEsIDYxLCAyMjQsIDU1LCA1OCwgMSwgNjEsIAorICAgIDE4NiwgMTM1LCA1OCwgMSwgMjM0LCAyMzcsIDQ1LCAyNTAsIDEyNCwgMjU0LCAxMTksIDU4LCAxLCAyMjcsIDI0MSwgMTA4LCAKKyAgICA2NSwgNTgsIDEsIDIyNywgMjQxLCAxMTMsIDY1LCA1OCwgMSwgMjI3LCAyNDEsIDI0NiwgOTUsIDc4LCA1OCwgMSwgMjI3LCAKKyAgICAyNDEsIDIzNywgMTcwLCAyNDYsIDk1LCA3OCwgNTgsIDEsIDEwOSwgMjM3LCAxNzAsIDI0NiwgOTUsIDc4LCA1OCwgMSwgCisgICAgMjIzLCAxMjUsIDI1LCAxMTYsIDIyMSwgMTMyLCA1OCwgMSwgMjIzLCAxMjUsIDI1LCAxMDksIDIyMSwgMTMyLCA3LCA2LCAxLCAKKyAgICAyNDYsIDI0MSwgMjU0LCAxNjgsIDcsIDMsIDEsIDI0NiwgMjQxLCAyNTQsIDE2OCwgNywgNiwgMSwgMjQ2LCAyNDEsIDI1NCwgCisgICAgMTkxLCA3LCAzLCAxLCAyNDYsIDI0MSwgMjU0LCAxOTEsIDcsIDYsIDEsIDI0MywgMTM2LCA3LCAzLCAxLCAyNDMsIDEzNiwgCisgICAgNywgNiwgMSwgMjIwLCAxODksIDcsIDMsIDEsIDIyMCwgMTg5LCA3LCA2LCAxLCAyMjEsIDk0LCA3LCAzLCAxLCAyMjEsIDk0LCAKKyAgICA3LCA2LCAxLCAyNTAsIDkwLCA3LCAzLCAxLCAyNTAsIDkwLCA3LCA2LCAxLCAyNTAsIDkxLCAyLCAyNTAsIDE2OCwgNywgMywgCisgICAgMSwgMjUwLCA5MSwgMiwgMjUwLCAxNjgsIDcsIDEsIDMsIDYsIDI0NiwgNzQsIDcsIDEsIDMsIDYsIDE5OCwgNywgNiwgMSwgCisgICAgMjU1LCA1OCwgNywgMywgMSwgMjU1LCA1OCwgNywgNiwgMSwgMjU0LCA5MywgNywgMywgMSwgMjU0LCA5MywgNywgNiwgMSwgCisgICAgMjUzLCAyMzIsIDcsIDMsIDEsIDI1MywgMjMyLCA3LCA2LCAxLCAyNTMsIDIyMCwgNywgMywgMSwgMjUzLCAyMjAsIDcsIDYsIAorICAgIDEsIDI1MywgMjIxLCAyLCAxODYsIDEzNSwgNywgMywgMSwgMjUzLCAyMjEsIDIsIDE4NiwgMTM1LCA3LCA2LCAxLCAyNTMsIAorICAgIDIxMiwgNywgMywgMSwgMjUzLCAyMTIsIDcsIDYsIDEsIDIxMCwgMjUxLCAyMDMsIDIsIDI0OCwgMTQ1LCA3LCAzLCAxLCAKKyAgICAyMTAsIDI1MSwgMjAzLCAyLCAyNDgsIDE0NSwgNywgNiwgMSwgMjM3LCAxOCwgMiwgOTIsIDcsIDMsIDEsIDIzNywgMTgsIDIsIAorICAgIDkyLCA3LCA2LCAxLCAyMzcsIDE4LCAyLCAyNDksIDExLCA5MiwgNywgMywgMSwgMjM3LCAxOCwgMiwgMjQ5LCAxMSwgOTIsIAorICAgIDcsIDYsIDEsIDIzNywgMTgsIDIsIDIxNCwgMjUsIDI0OSwgMTEsIDkyLCA3LCAzLCAxLCAyMzcsIDE4LCAyLCAyMTQsIDI1LCAKKyAgICAyNDksIDExLCA5MiwgNywgNiwgMSwgMjUyLCAxLCAxNTMsIDcsIDMsIDEsIDI1MiwgMSwgMTUzLCA3LCA2LCAxLCAyMzUsIAorICAgIDIwMiwgMiwgMTE2LCA5MiwgNywgMywgMSwgMjM1LCAyMDIsIDIsIDExNiwgOTIsIDcsIDYsIDEsIDE0MiwgMiwgMTcxLCAKKyAgICAyMTQsIDIzMCwgNzQsIDcsIDMsIDEsIDE0MiwgMiwgMTcxLCAyMTQsIDIzMCwgNzQsIDcsIDYsIDEsIDE0MiwgMiwgMjM0LCAKKyAgICAyNDcsIDcsIDMsIDEsIDE0MiwgMiwgMjM0LCAyNDcsIDcsIDYsIDEsIDIzMCwgMTI3LCA3LCAzLCAxLCAyMzAsIDEyNywgNywgCisgICAgNiwgMSwgMjMwLCA2MCwgMiwgMjE0LCAyMjEsIDIyNSwgMjQ5LCA0OCwgNywgMywgMSwgMjMwLCA2MCwgMiwgMjE0LCAyMjEsIAorICAgIDIyNSwgMjQ5LCA0OCwgNywgNiwgMSwgMjMwLCA2MCwgMiwgMjQ1LCAxNDYsIDcsIDMsIDEsIDIzMCwgNjAsIDIsIDI0NSwgCisgICAgMTQ2LCA3LCA2LCAxLCAyMzAsIDYwLCAyLCAyMjMsIDIyMiwgMjIyLCAxMzUsIDcsIDMsIDEsIDIzMCwgNjAsIDIsIDIyMywgCisgICAgMjIyLCAyMjIsIDEzNSwgNywgNiwgMSwgMjI4LCAxNjQsIDIsIDIxNCwgMjIxLCAyMjUsIDI0OSwgNDgsIDcsIDMsIDEsIAorICAgIDIyOCwgMTY0LCAyLCAyMTQsIDIyMSwgMjI1LCAyNDksIDQ4LCA3LCA2LCAxLCAyMjgsIDE2NCwgMiwgMjQ5LCAxMSwgOTIsIAorICAgIDcsIDMsIDEsIDIyOCwgMTY0LCAyLCAyNDksIDExLCA5MiwgNywgNiwgMSwgMjI4LCAzOSwgMjI3LCA1OCwgNywgMywgMSwgCisgICAgMjI4LCAzOSwgMjI3LCA1OCwgNywgNiwgMSwgMjI3LCAxNCwgMjI3LCA1OCwgNywgMywgMSwgMjI3LCAxNCwgMjI3LCA1OCwgCisgICAgNywgNiwgMSwgMjIwLCAxMSwgMiwgMjQ5LCAxMSwgOTIsIDcsIDMsIDEsIDIyMCwgMTEsIDIsIDI0OSwgMTEsIDkyLCA3LCA2LCAKKyAgICAxLCAyMTksIDQ4LCA3LCAzLCAxLCAyMTksIDQ4LCA3LCA2LCAxLCAyMTksIDc1LCAyMTcsIDE1NywgNywgMywgMSwgMjE5LCAKKyAgICA3NSwgMjE3LCAxNTcsIDcsIDYsIDEsIDIyMSwgMjM1LCAyLCA5MiwgNywgMywgMSwgMjIxLCAyMzUsIDIsIDkyLCA3LCA2LCAKKyAgICAxLCAyMjEsIDIzNSwgMiwgMjE0LCAyMjEsIDIyNSwgMjQ5LCA0OCwgNywgMywgMSwgMjIxLCAyMzUsIDIsIDIxNCwgMjIxLCAKKyAgICAyMjUsIDI0OSwgNDgsIDcsIDYsIDEsIDIxOSwgMTU3LCA3LCAzLCAxLCAyMTksIDE1NywgNywgNiwgMSwgMjQ2LCAxMjMsIDcsIAorICAgIDMsIDEsIDI0NiwgMTIzLCA3LCA2LCAxLCAyMzcsIDE1MSwgNywgMywgMSwgMjM3LCAxNTEsIDcsIDYsIDEsIDI1MCwgMTU4LCAKKyAgICA3LCAzLCAxLCAyNTAsIDE1OCwgNTgsIDEsIDIyMCwgMzQsIDcsIDMsIDEsIDI0NywgMTAyLCA3LCAzLCAxLCAyMzQsIDIxOSwgCisgICAgNywgMywgMSwgMjMzLCA4MCwgNywgMywgMSwgMjMxLCAxMDksIDcsIDMsIDEsIDIyNywgMTMsIDcsIDEsIDMsIDYsIDIyNywgCisgICAgMTMsIDcsIDMsIDEsIDIyMCwgMjQ5LCA3LCAzLCAxLCAyMjAsIDk0LCA3LCA2LCAxLCAyMzcsIDE4OCwgMjUwLCA0NiwgNywgCisgICAgMywgMSwgMjM3LCAxODgsIDI1MCwgNDYsIDcsIDYsIDEsIDIzNywgMTg4LCAyNDYsIDc0LCA3LCAzLCAxLCAyMzcsIDE4OCwgCisgICAgMjQ2LCA3NCwgNywgNiwgMSwgMjM3LCAxODgsIDI0NSwgNjcsIDcsIDYsIDEsIDIxNSwgMjM3LCAxODgsIDI0NSwgNjcsIDcsIAorICAgIDMsIDEsIDIxNSwgMjM3LCAxODgsIDI0NSwgNjcsIDcsIDYsIDEsIDIxNSwgMTUzLCA3LCAzLCAxLCAyMTUsIDE1MywgNywgNiwgCisgICAgMSwgMjM3LCAxODgsIDE1MiwgNywgMywgMSwgMjM3LCAxODgsIDE1MiwgNywgNiwgMSwgMjM3LCAxODgsIDE5OCwgNywgMywgCisgICAgMSwgMjM3LCAxODgsIDE5OCwgNywgNiwgMSwgMjM3LCAxODgsIDIyMiwgMjAxLCA3LCAzLCAxLCAyMzcsIDE4OCwgMjIyLCAKKyAgICAyMDEsIDU4LCAxLCAxMDksIDI1MCwgMjE3LCAyNTUsIDAsIDU4LCAxLCAyNTAsIDE3NSwgNTgsIDEsIDIyNCwgMTkyLCAyNDYsIAorICAgIDE1NCwgNTUsIDcsIDYsIDEsIDIyNiwgMTUwLCA3LCAzLCAxLCAyMjYsIDE1MCwgNywgMjQ2LCAxNTgsIDEsIDIxMCwgMjQ2LCAKKyAgICA3NCwgNywgMjQ2LCAxNTgsIDEsIDIxMCwgMjMwLCA1OSwgNywgMjQ2LCAxNTgsIDEsIDIzNywgMTcwLCAxODksIDcsIDI0NiwgCisgICAgMTU4LCAxLCAyNDIsIDEwNywgMjM0LCAyNTAsIDcsIDI0NiwgMTU4LCAxLCAyNTQsIDQ5LCAxODksIDIyMywgMTksIDIzMiwgCisgICAgMjI1LCAxLCA2MCwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDcyLCAyMjMsIDE5LCAyMzIsIDIyNSwgNSwgMjQ3LCA4NCwgMjIzLCAKKyAgICAxOSwgMjMyLCAyMjUsIDEsIDY4LCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgNzMsIDIyMywgMTksIDIzMiwgMjI1LCAxLCA3NCwgCisgICAgMjIzLCAxOSwgMjMyLCAyMjUsIDUsIDI0MywgMTc1LCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMjM2LCA1NywgMjIzLCAxOSwgCisgICAgMjMyLCAyMjUsIDEsIDIzNiwgMTI1LCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMjQ0LCA2OCwgMjIzLCAxOSwgMjMyLCAyMjUsIAorICAgIDEsIDI0NCwgMTEyLCAyMjMsIDE5LCAyMzIsIDIyNSwgNSwgMjU0LCA5NSwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDI1MCwgCisgICAgMTgyLCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMjUxLCAxMSwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDIzNywgNTksIDIyMywgCisgICAgMTksIDIzMiwgMjI1LCAxLCAyMzcsIDk5LCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMjIxLCAxMSwgMjIzLCAxOSwgMjMyLCAKKyAgICAyMjUsIDEsIDIyMSwgMTUsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAyNDksIDEwNywgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIAorICAgIDI0OSwgMTE1LCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMTAxLCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMjIxLCAyMzksIDIyMywgCisgICAgMTksIDIzMiwgMjI1LCAxLCAyNDgsIDE2NywgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDI0OSwgMTksIDIyMywgMTksIDIzMiwgCisgICAgMjI1LCAxLCAyMzEsIDIwNCwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDIyOSwgMzcsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAKKyAgICAyMjksIDExOCwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDI1MiwgNDEsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAyNTIsIDg4LCAKKyAgICAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMjMzLCAxMzYsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAyMjcsIDc1LCAyMjMsIDE5LCAKKyAgICAyMzIsIDIyNSwgMSwgMjM1LCAxMiwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDIyNywgNDQsIDIyMywgMTksIDIzMiwgMjI1LCAKKyAgICAxLCAyMjQsIDI2LCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMjQzLCA0LCAyMjMsIDE5LCAyMzIsIDIyNSwgMjksIDUsIDYwLCAKKyAgICAyMjMsIDE5LCAyMzIsIDIyNSwgMjksIDUsIDcyLCAyMjMsIDE5LCAyMzIsIDIyNSwgMjksIDUsIDY4LCAyMjMsIDE5LCAyMzIsIAorICAgIDIyNSwgMjksIDUsIDczLCAyMjMsIDE5LCAyMzIsIDIyNSwgMjksIDUsIDIzMCwgMTI3LCAyMjMsIDE5LCAyMzIsIDIyNSwgCisgICAgMjI5LCAzMywgMjM0LCA2NywgMjIzLCAxOSwgMjMyLCAyMjUsIDIyOSwgMzMsIDIzNCwgNjYsIDIyMywgMTksIDIzMiwgMjI1LCAKKyAgICAyMjksIDMzLCAyMzQsIDY1LCAyMjMsIDE5LCAyMzIsIDIyNSwgMjI5LCAzMywgMjM0LCA2NCwgMjMxLCAxODcsIDIzNywgCisgICAgMjEyLCAyNDUsIDEwOCwgMTMxLCAyMjgsIDg5LCAyMzEsIDE4NywgMjM3LCAyMTIsIDI0NSwgMTA4LCAxMzEsIDI0MywgMTk0LCAKKyAgICAyMzEsIDE4NywgMjM3LCAyMTIsIDI0NSwgMTA4LCAxNDgsIDIyOCwgODcsIDIzMSwgMTg3LCAyMzcsIDIxMiwgMjQ1LCAxMDgsIAorICAgIDEzMSwgMjI0LCA3NSwgMjMxLCAxODcsIDIzNywgMjEyLCAyNDUsIDEwOCwgMTMxLCAyNDYsIDIzMSwgMjMxLCAxODcsIDIzNywgCisgICAgMjEyLCAyNDUsIDEwOCwgMTQ4LCAyMjQsIDc0LCAyMzEsIDE4NywgMjM3LCAyMTIsIDIyOCwgOTAsIDc4LCAyMzEsIDE4NywgCisgICAgMjM3LCAyMTIsIDIyOSwgNTYsIDc4LCAyMzEsIDE4NywgMjM3LCAyMTIsIDIyNywgNCwgNzgsIDIzMSwgMTg3LCAyMzcsIAorICAgIDIxMiwgMjI4LCA5MSwgNzgsIDIyOSwgMTM4LCAxLCAxNzUsIDIyOSwgMTM4LCAxLCAyMzYsIDE0OSwgMjI5LCAxMzgsIDEsIAorICAgIDI0NSwgMCwgMjI5LCAxMzgsIDEsIDIzMiwgMTE1LCAyMjksIDEzOCwgMSwgMjUxLCAxNjksIDIyOSwgMTM4LCAxLCAyNTEsIAorICAgIDY5LCAyMjksIDEzOCwgMSwgMjM3LCAxMjMsIDIyOSwgMTM4LCAxLCAyMzEsIDc3LCAyMjksIDEzOCwgMSwgMjIyLCAxNTUsIAorICAgIDIyOSwgMTM4LCAxLCAyMjIsIDM1LCAyMjksIDEzOCwgMSwgMjQ5LCAyMDcsIDIyOSwgMTM4LCAxLCAyMDgsIDIyOSwgMTM4LCAKKyAgICAxLCAxODcsIDIyOSwgMTM4LCAxLCAyMjksIDE0MSwgMjI5LCAxMzgsIDEsIDI1MiwgMjM3LCAyMjksIDEzOCwgMSwgMTk2LCAKKyAgICAyMjksIDEzOCwgMSwgMjIxLCA1NSwgMjI5LCAxMzgsIDEsIDIyMSwgNDcsIDIyOSwgMTM4LCAxLCAyNDcsIDc0LCAyMjksIAorICAgIDEzOCwgMSwgMjE5LCA3LCAyMjksIDEzOCwgMSwgMjE3LCA4MCwgMjI5LCAxMzgsIDEsIDIxNywgMTE0LCAyMjksIDEzOCwgMSwgCisgICAgMywgNjAsIDIyOSwgMTM4LCAxLCAxODQsIDIyOSwgMTM4LCAxLCAyMDMsIDIyOSwgMTM4LCAxLCAyMzUsIDE4OCwgMjI5LCAKKyAgICAxMzgsIDEsIDIyNSwgMjUsIDIyOSwgMTM4LCAxLCAyMjYsIDE3NywgMjI5LCAxMzgsIDEsIDE1NSwgMjI5LCAxMzgsIDEsIAorICAgIDYwLCAyMjksIDEzOCwgMSwgNzIsIDIyOSwgMTM4LCAxLCA2OCwgMjI5LCAxMzgsIDEsIDczLCAyMjksIDEzOCwgMSwgNzQsIAorICAgIDIyOSwgMTM4LCAxLCAyMjgsIDE1NSwgMjI5LCAxMzgsIDEsIDIxOCwgMTM4LCAyMjksIDEzOCwgMSwgMjQ2LCA4LCAyMjksIAorICAgIDEzOCwgMSwgMjQ0LCAxNjAsIDIyOSwgMTM4LCAxLCAyNDYsIDI1MCwgMjI5LCAxMzgsIDIyMywgOTcsIDEsIDIxOSwgNywgCisgICAgMjI5LCAxMzgsIDIyMywgOTcsIDEsIDE4NCwgMjI5LCAxMzgsIDEsIDIyMSwgMjksIDIyOSwgMTM4LCAxLCAyMjEsIDE5LCAKKyAgICAyMjksIDEzOCwgMSwgMjQ5LCAxMzIsIDIyOSwgMTM4LCAxLCAyMzEsIDIxNywgMjI5LCAxMzgsIDEsIDI1NCwgMTQ0LCAxODQsIAorICAgIDIyOSwgMTM4LCAxLCAyMTksIDY5LCAyMjUsIDI1LCAyMjksIDEzOCwgMSwgMjE5LCA3MCwgMTU1LCAyMjksIDEzOCwgMSwgCisgICAgMjU0LCAxLCAyNDYsIDgsIDIyOSwgMTM4LCAyMjMsIDk3LCAxLCAyMDMsIDIyOSwgMTM4LCAyMjMsIDYxLCAxLCAyMDMsIAorICAgIDIyOSwgMTM4LCAxLCAyNTEsIDE0NiwgMjI5LCAxMzgsIDIyNCwgMTA5LCAyNDMsIDE2MCwgNzgsIDIyOSwgMTM4LCA1MSwgCisgICAgMjQzLCAxNjAsIDc4LCAyMjksIDEzOCwgMTY0LCAyMjUsIDE4LCAyMjksIDEzOCwgMTY0LCA1MSwgMjI1LCAxOCwgMTU4LCA1LCAKKyAgICAyNTQsIDk1LCAxNTgsIDUsIDIxOSwgNzcsIDE1OCwgMSwgNjAsIDE1OCwgMSwgMjU1LCA1OCwgMTU4LCAxLCA3MiwgMTU4LCAKKyAgICAxLCAyMzcsIDI1NSwgMTU4LCAxLCA2OCwgMTU4LCAxLCAyMjAsIDIzLCAxNTgsIDEsIDE2NywgMTUyLCAxNTgsIDEsIDE2NywgCisgICAgMjI3LCA1MywgMTU4LCAxLCAxNjcsIDE1MywgMTU4LCAxLCAxNjcsIDIzNSwgMTgsIDE1OCwgMSwgNzMsIDE1OCwgMSwgMjQ2LCAKKyAgICAyNTAsIDE1OCwgMSwgMjU0LCAxOTYsIDE1OCwgMSwgNzQsIDE1OCwgMSwgMjMwLCAxMjcsIDE1OCwgMSwgMjUzLCAyMzIsIAorICAgIDE1OCwgMSwgMTc1LCAxNTgsIDEsIDIzNiwgMTQ5LCAxNTgsIDEsIDI0NSwgMCwgMTU4LCAxLCAyNDQsIDEyNSwgMTU4LCAxLCAKKyAgICAyMzIsIDExNSwgMTU4LCAxLCAyNTEsIDE2OSwgMTU4LCAxLCAyNTEsIDY5LCAxNTgsIDEsIDIzNywgMTIzLCAxNTgsIDEsIAorICAgIDIzNywgMTAzLCAxNTgsIDEsIDIzMSwgNzcsIDE1OCwgMSwgMjIxLCAyOSwgMTU4LCAxLCAyMjEsIDE5LCAxNTgsIDEsIDI0OSwgCisgICAgMTMyLCAxNTgsIDEsIDI0OSwgMTE2LCAxNTgsIDEsIDIzMSwgMjE3LCAxNTgsIDEsIDIyMiwgMTU1LCAxNTgsIDEsIDIyMiwgCisgICAgMzUsIDE1OCwgMSwgMjQ5LCAyMDcsIDE1OCwgMSwgMjQ5LCAzNiwgMTU4LCAxLCAyMDgsIDE1OCwgMSwgMTg3LCAxNTgsIDEsIAorICAgIDIyOSwgMTQxLCAxNTgsIDEsIDI1MiwgMjM3LCAxNTgsIDEsIDI1MiwgOTQsIDE1OCwgMSwgMTk2LCAxNTgsIDEsIDE4NCwgCisgICAgMTU4LCAxLCAyMDMsIDE1OCwgMSwgMjM1LCAxODgsIDE1OCwgMSwgMjE5LCAxODksIDE1OCwgMSwgMjI1LCAyNSwgMTU4LCAxLCAKKyAgICAyMjMsIDIxOCwgMTU4LCAxLCAyMjYsIDE3NywgMTU4LCAxLCAxNTUsIDE1OCwgMSwgMjM1LCAxNywgMTU4LCAyNTAsIDE0NywgCisgICAgNSwgMjQzLCAyMDksIDE1OCwgMjksIDUsIDI1NSwgNTgsIDE1OCwgMjksIDUsIDcyLCAxNTgsIDI5LCA1LCAyMzcsIDI1NSwgCisgICAgMTU4LCAyOSwgNSwgNjgsIDE1OCwgMjksIDUsIDIyMCwgMjMsIDE1OCwgMjksIDUsIDE2NywgMTUyLCAxNTgsIDI5LCA1LCAKKyAgICAxNjcsIDIyNywgNTMsIDE1OCwgMjksIDUsIDE2NywgMTUzLCAxNTgsIDI5LCA1LCAxNjcsIDIzNSwgMTgsIDE1OCwgMjksIDUsIAorICAgIDczLCAxNTgsIDI5LCA1LCAyNDYsIDI1MCwgMTU4LCAyOSwgNSwgMjU0LCAxOTYsIDE1OCwgMjksIDUsIDc0LCAxNTgsIDI5LCAKKyAgICA1LCAyMzAsIDEyNywgMTU4LCAyOSwgNSwgMjUzLCAyMzIsIDE1OCwgNSwgMjE5LCA4MiwgMTU4LCAyNDksIDE2NywgMTU4LCAKKyAgICA1MSwgMjQ5LCAxNjcsIDE1OCwgMjAsIDIxNywgODQsIDE1OCwgMjAsIDEwNywgMTU4LCAyMCwgMTAzLCAxNTgsIDIwLCAxNjAsIAorICAgIDE1OCwgMjAsIDE1NCwgMTU4LCAyMCwgMTc0LCAxNTgsIDIwLCAxODIsIDE1OCwgMjAsIDE5MSwgMTU4LCAyMCwgMTg1LCAKKyAgICAxNTgsIDIwLCAxOTAsIDM2LCA4MCwgMjAsIDIxNywgODQsIDM2LCA4MCwgMjAsIDEwNywgMzYsIDgwLCAyMCwgMTAzLCAzNiwgCisgICAgODAsIDIwLCAxNjAsIDM2LCA4MCwgMjAsIDE1NCwgMzYsIDgwLCAyMCwgMTc0LCAzNiwgODAsIDIwLCAxODIsIDM2LCA4MCwgCisgICAgMjAsIDE5MSwgMzYsIDgwLCAyMCwgMTg1LCAzNiwgODAsIDIwLCAxOTAsIDM2LCA4MCwgMSwgNjAsIDM2LCA4MCwgMSwgNjgsIAorICAgIDM2LCA4MCwgMSwgMTc1LCAzNiwgODAsIDEsIDIwOCwgMzYsIDgwLCAxLCAxODcsIDM2LCA4MCwgMSwgMjAzLCAzNiwgODAsIAorICAgIDEsIDIxOSwgOTQsIDM2LCA4MCwgNSwgMjUzLCAyMTksIDgwLCA1LCAyMjMsIDI1MywgMjUxLCAxNDYsIDgwLCA1LCAyNTEsIAorICAgIDE0NywgMjE5LCA4MiwgODAsIDUsIDUxLCAyNTEsIDE0NywgMjE5LCA4MiwgODAsIDUsIDI1MSwgMTQ3LCAxMDMsIDgwLCA1LCAKKyAgICAyNTEsIDE0NywgMTYwLCA4MCwgNSwgMjUxLCAxNDcsIDI1MywgMjE5LCA4MCwgNSwgMjI4LCAxODYsIDgwLCAyNDQsIDIyNCwgCisgICAgMjQ1LCAxODUsIDgwLCAyNTEsIDEzNCwgODAsIDI0MywgMTU1LCAyMzYsIDE5MCwgMjM1LCA2OCwgMjAsIDIxNywgODQsIAorICAgIDIzNiwgMTkwLCAyMzUsIDY4LCAyMCwgMTA3LCAyMzYsIDE5MCwgMjM1LCA2OCwgMjAsIDEwMywgMjM2LCAxOTAsIDIzNSwgCisgICAgNjgsIDIwLCAxNjAsIDIzNiwgMTkwLCAyMzUsIDY4LCAyMCwgMTU0LCAyMzYsIDE5MCwgMjM1LCA2OCwgMjAsIDE3NCwgMjM2LCAKKyAgICAxOTAsIDIzNSwgNjgsIDIwLCAxODIsIDIzNiwgMTkwLCAyMzUsIDY4LCAyMCwgMTkxLCAyMzYsIDE5MCwgMjM1LCA2OCwgMjAsIAorICAgIDE4NSwgMjM2LCAxOTAsIDIzNSwgNjgsIDIwLCAxOTAsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAxNzUsIDIzNiwgMTkwLCAKKyAgICAyMzUsIDY4LCAxLCAyMzYsIDE0OSwgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDI0NSwgMCwgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIAorICAgIDIzMiwgMTE1LCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgMjI2LCAxNzcsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAyMjUsIDI1LCAKKyAgICAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgMjE3LCAxMTQsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAyMzEsIDc3LCAyMzYsIDE5MCwgCisgICAgMjM1LCA2OCwgMSwgMjIyLCAxNTUsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAyNDIsIDE3NSwgMjM2LCAxOTAsIDIzNSwgNjgsIAorICAgIDEsIDIwOCwgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDE4NywgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDIyOSwgMTQxLCAyMzYsIAorICAgIDE5MCwgMjM1LCA2OCwgMSwgMTk2LCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgMjQ5LCAyMDcsIDIzNiwgMTkwLCAyMzUsIDY4LCAKKyAgICAxLCAyNTIsIDIzNywgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDIwMywgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDE4NCwgMjM2LCAKKyAgICAxOTAsIDIzNSwgNjgsIDEsIDIzNSwgMTg4LCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgMjE5LCA3LCAyMzYsIDE5MCwgMjM1LCAKKyAgICA2OCwgMSwgMjIyLCAzNSwgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDE1NSwgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDIxOSwgCisgICAgMTg5LCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgMjUxLCAxNjksIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCA2MCwgMjM2LCAxOTAsIAorICAgIDIzNSwgNjgsIDEsIDIzMCwgMTY3LCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgNzIsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAKKyAgICAyMzAsIDEyNywgMjM2LCAxOTAsIDIzNSwgNjgsIDI5LCAyMjAsIDExMCwgMjM2LCAxOTAsIDIzNSwgNjgsIDI5LCA3MywgCisgICAgMjM2LCAxOTAsIDIzNSwgNjgsIDI5LCA2OCwgMjM2LCAxOTAsIDIzNSwgNjgsIDI5LCAyNDYsIDI1MCwgMjM2LCAxOTAsIAorICAgIDIzNSwgNjgsIDI5LCA3NCwgMjM2LCAxOTAsIDIzNSwgNjgsIDE0NSwgMjI5LCA0OCwgMjM2LCAxOTAsIDIzNSwgNjgsIDE0NSwgCisgICAgMjUxLCAxNTcsIDIzNiwgMTkwLCAyMzUsIDY4LCAxNDUsIDI1MSwgMTU4LCAyMjksIDQ4LCAyMzYsIDE5MCwgMjM1LCA2OCwgCisgICAgNSwgMjUwLCA2MiwgMjM2LCAxOTAsIDIzNSwgNjgsIDUsIDIyNCwgMTQ4LCAyMjcsIDE5NCwgMSwgMTc1LCAyMjcsIDE5NCwgCisgICAgMSwgMjQ1LCAwLCAyMjcsIDE5NCwgMSwgMjMyLCAxMTUsIDIyNywgMTk0LCAxLCAyMjIsIDE1NSwgMjI3LCAxOTQsIDEsIAorICAgIDI0OSwgMjA3LCAyMjcsIDE5NCwgMSwgMjA4LCAyMjcsIDE5NCwgMSwgMTg3LCAyMjcsIDE5NCwgMSwgMjUyLCAyMzcsIDIyNywgCisgICAgMTk0LCAxLCAxOTYsIDIyNywgMTk0LCAxLCAyNTEsIDE2OSwgMjI3LCAxOTQsIDEsIDIzNywgMTIzLCAyMjcsIDE5NCwgMSwgCisgICAgMjMxLCA3NywgMjI3LCAxOTQsIDEsIDIyNiwgMTc3LCAyMjcsIDE5NCwgMSwgMjAzLCAyMjcsIDE5NCwgMSwgMjM1LCAxODgsIAorICAgIDIyNywgMTk0LCAxLCAxODQsIDIyNywgMTk0LCAxLCAyMTksIDcsIDIyNywgMTk0LCAxLCAxNTUsIDIyNywgMTk0LCAxLCAKKyAgICAyMzQsIDM3LCAyMjcsIDE5NCwgMSwgMjMyLCAxMDAsIDIyNywgMTk0LCAxLCAyMzIsIDE2OSwgMjI3LCAxOTQsIDEsIDIzMSwgCisgICAgNTcsIDIyNywgMTk0LCAxLCA2MCwgMjI3LCAxOTQsIDI5LCA1LCA3MiwgMjI3LCAxOTQsIDI5LCA1LCA2OCwgMjI3LCAxOTQsIAorICAgIDI5LCA1LCA3MywgMjI3LCAxOTQsIDI5LCA1LCAyNTQsIDE5NiwgMjI3LCAxOTQsIDI5LCA1LCA3NCwgMjI3LCAxOTQsIDI5LCAKKyAgICA1LCAyNTMsIDIzMiwgMjI3LCAxOTQsIDI5LCA1LCAyNDYsIDExNSwgMjI3LCAxOTQsIDI5LCA1LCAyNDcsIDE2LCAyMjcsIAorICAgIDE5NCwgMjUwLCAxNDcsIDUsIDIzMiwgMTE3LCAyMjcsIDE5NCwgMjUwLCAxNDcsIDUsIDIwNywgMjI3LCAxOTQsIDI1MCwgCisgICAgMTQ3LCA1LCAxNTIsIDIyNywgMTk0LCAyNTAsIDE0NywgNSwgMjQzLCAyMjUsIDIyNywgMTk0LCAyMTksIDgyLCAyMjcsIAorICAgIDE5NCwgMjI2LCA4NywgNzgsIDIyLCA5MSwgMjIxLCAxODgsIDIyLCA5MSwgMjIxLCAxODcsIDIyLCA5MSwgMjIxLCAxODUsIAorICAgIDIyLCA5MSwgMjIxLCAxOTAsIDIyLCA5MSwgMjI3LCAxMzUsIDIyLCA5MSwgMjI3LCAxMTksIDIyLCA5MSwgMjI3LCAxMTQsIAorICAgIDIyLCA5MSwgMjI3LCAxMTYsIDIyLCA5MSwgMjI3LCAxMzIsIDIyLCA5MSwgMjI3LCAxMjUsIDIyLCA5MSwgMjI3LCAxMTgsIAorICAgIDIyLCA5MSwgMjI3LCAxMzcsIDIyLCA5MSwgMjI3LCAxMjAsIDIyLCA5MSwgMjI3LCAxMzksIDIyLCA5MSwgMjI3LCAxMzYsIAorICAgIDIyLCA5MSwgMjMzLCAxODMsIDIyLCA5MSwgMjMzLCAxNzQsIDIyLCA5MSwgMjMzLCAxNzcsIDIyLCA5MSwgMjI5LCA4NCwgCisgICAgMjIsIDkxLCAyMjksIDk1LCAyMiwgOTEsIDIyOSwgOTYsIDIyLCA5MSwgMjIzLCAyMDMsIDIyLCA5MSwgMjM4LCAxMiwgMjIsIAorICAgIDkxLCAyMzgsIDE5LCAyMiwgOTEsIDIyMywgMjE0LCAyMiwgOTEsIDIyMywgMjAxLCAyMiwgOTEsIDIyOSwgMTI2LCAyMiwgCisgICAgOTEsIDI0MywgMTAxLCAyMiwgOTEsIDIyMywgMTk4LCAxMzMsIDUsIDIyOSwgMjUyLCAxMzMsIDUsIDI1MSwgOTYsIDEzMywgCisgICAgNSwgMjM1LCAxMzAsIDEzMywgNSwgMjE4LCAxOTcsIDEzMywgMSwgNjAsIDEzMywgMSwgMjQyLCAxMDcsIDIzNiwgMTkzLCAKKyAgICAxMzMsIDEsIDcyLCAxMzMsIDEsIDIzNywgMjU1LCAxMzMsIDEsIDY4LCAxMzMsIDEsIDIzMCwgNDQsIDI1MSwgNzMsIDEzMywgCisgICAgMSwgMjMyLCAxMTYsIDIzNSwgOTgsIDEzMywgMSwgMjMyLCAxMTYsIDIzNSwgOTksIDIyNywgMjI5LCAxMzMsIDEsIDczLCAKKyAgICAxMzMsIDEsIDI1NCwgMTk2LCAxMzMsIDEsIDc0LCAxMzMsIDEsIDE3NSwgMTMzLCAxLCAyMDYsIDIyNiwgMTI4LCAxMzMsIDEsIAorICAgIDIwNiwgMjMzLCA2NywgMTMzLCAxLCAyNDUsIDAsIDEzMywgMSwgMjQ1LCAxLCAyMzMsIDY3LCAxMzMsIDEsIDIzMiwgMTE1LCAKKyAgICAxMzMsIDEsIDI1MSwgMTY5LCAxMzMsIDEsIDI1MSwgMTcwLCAyMzMsIDY3LCAxMzMsIDEsIDIzNywgMTIzLCAxMzMsIDEsIAorICAgIDIzMSwgNzgsIDIzMywgNjcsIDEzMywgMSwgMjM3LCAxMjQsIDIzNCwgMTAzLCAxMzMsIDEsIDIzMSwgNzcsIDEzMywgMSwgCisgICAgMjIxLCAyOSwgMTMzLCAxLCAyMjEsIDMwLCAyMzQsIDEwMywgMTMzLCAxLCAyNDksIDEzMiwgMTMzLCAxLCAyNDksIDEzMywgCisgICAgMjM0LCAxMDMsIDEzMywgMSwgMjMyLCAyMzgsIDIzMywgNjcsIDEzMywgMSwgMjIyLCAxNTUsIDEzMywgMSwgMjIyLCAxNTYsIAorICAgIDIzMywgNjcsIDEzMywgMSwgMjQ5LCAyMDcsIDEzMywgMSwgMjQ5LCAyMDgsIDIzNCwgMTAzLCAxMzMsIDEsIDIwOCwgMTMzLCAKKyAgICAxLCAxODcsIDEzMywgMSwgMjMwLCA0NCwgMjMzLCA2NywgMTMzLCAxLCAyNTIsIDIzNywgMTMzLCAxLCAyNTIsIDIzOCwgCisgICAgMjMzLCA2NywgMTMzLCAxLCAxOTYsIDEzMywgMSwgMTg0LCAxMzMsIDEsIDIwMywgMTMzLCAxLCAyMjgsIDMsIDI1NCwgMjAzLCAKKyAgICAxMzMsIDEsIDIzNSwgMTg4LCAxMzMsIDEsIDIxOSwgNywgMTMzLCAxLCAyMjYsIDE3OCwgMjMzLCA2NywgMTMzLCAxLCAyMjYsIAorICAgIDE3OCwgMjM0LCAxMDMsIDEzMywgMSwgMjI2LCAxNzcsIDEzMywgMSwgMTU1LCAxMzMsIDUsIDI1MSwgOTcsIDIyMiwgNjgsIAorICAgIDEzMywgMjksIDUsIDIyMiwgMTExLCAxMzMsIDI5LCA1LCAyMjEsIDEzNSwgMTMzLCAyOSwgNSwgMjE4LCAxNjIsIDEzMywgCisgICAgMjksIDUsIDIxOCwgMTYzLCAyMzQsIDUsIDEzMywgMjksIDUsIDIyMywgNzcsIDEzMywgMjksIDUsIDIyMywgNzgsIDIzMywgCisgICAgMjUwLCAxMzMsIDI5LCA1LCAyMjIsIDEyNCwgMTMzLCAyOSwgNSwgMjQ4LCAyMDcsIDIzMywgNjYsIDEzMywgMjksIDUsIAorICAgIDIyOSwgMTcxLCAxMzMsIDI1MCwgMTQ3LCA1LCAyMzYsIDE2MSwgMTMzLCAyNTAsIDE0NywgNSwgMjI5LCAxNzksIDEzMywgCisgICAgMjUwLCAxNDcsIDUsIDI1MSwgMTYyLCAxMzMsIDIzMCwgNiwgMTMzLCA0MiwgMjI3LCAxNzYsIDEzMywgNDUsIDIyNywgMTc2LCAKKyAgICAxMzMsIDIzMCwgMzYsIDI1NCwgMTI1LCAxMzMsIDIzMCwgMzYsIDIzNCwgMTA3LCAxMzMsIDIzMCwgMzYsIDIzNCwgMjIzLCAKKyAgICAxMzMsIDIzMCwgMzYsIDIxOCwgMTkzLCAxMzMsIDIzMCwgMzYsIDIzMCwgNywgMTMzLCAyMzAsIDM2LCAyMzUsIDM1LCAxMzMsIAorICAgIDIzMCwgMzYsIDIzNCwgMjE3LCAxMzMsIDIzMCwgMzYsIDI1NCwgMjM5LCAxMzMsIDIzMCwgMzYsIDI1NCwgMjQwLCAyNTQsIAorICAgIDIzOSwgMTMzLCAyMzAsIDM2LCAyMjksIDY1LCAxMzMsIDIxNSwgMjMwLCAzNiwgMjI5LCA2NSwgMTMzLCAyMzAsIDQsIDEzMywgCisgICAgMjAsIDIxNywgODQsIDEzMywgMjAsIDEwNywgMTMzLCAyMCwgMTAzLCAxMzMsIDIwLCAxNjAsIDEzMywgMjAsIDE1NCwgMTMzLCAKKyAgICAyMCwgMTc0LCAxMzMsIDIwLCAxODIsIDEzMywgMjAsIDE5MSwgMTMzLCAyMCwgMTg1LCAxMzMsIDIwLCAxOTAsIDEzMywgCisgICAgMjMwLCAzNiwgMjIxLCAxNjMsIDIyMCwgMjQ4LCAxMzMsIDIzMCwgMzYsIDIzNywgMTQ3LCAxNDksIDEsIDYwLCAxNDksIDEsIAorICAgIDcyLCAxNDksIDEsIDY4LCAxNDksIDEsIDczLCAxNDksIDEsIDI1NCwgMTk2LCAxNDksIDEsIDc0LCAxNDksIDEsIDE3NSwgCisgICAgMTQ5LCAxLCAyMzYsIDE0OSwgMTQ5LCAxLCAyNDUsIDAsIDE0OSwgMSwgMjQ0LCAxMjUsIDE0OSwgMSwgMjMyLCA3MywgMTQ5LCAKKyAgICAxLCAyMzIsIDExNSwgMTQ5LCAxLCAyNTEsIDY5LCAxNDksIDEsIDI1MSwgMzMsIDE0OSwgMSwgMjM3LCAxMjMsIDE0OSwgMSwgCisgICAgMjM3LCAxMDMsIDE0OSwgMSwgMjMyLCA2NCwgMTQ5LCAxLCAyMzIsIDY2LCAxNDksIDEsIDIzMiwgNjUsIDE0OSwgMSwgMjIyLCAKKyAgICAxNTUsIDE0OSwgMSwgMjIyLCAzNSwgMTQ5LCAxLCAyNDksIDIwNywgMTQ5LCAxLCAyNDksIDM2LCAxNDksIDEsIDIzMSwgCisgICAgMTE0LCAxNDksIDEsIDIwOCwgMTQ5LCAxLCAyNDksIDEzMiwgMTQ5LCAxLCAxODcsIDE0OSwgMSwgMjI5LCA2LCAxNDksIDEsIAorICAgIDIyOSwgMTQxLCAxNDksIDEsIDI1MiwgMjM3LCAxNDksIDEsIDI1MiwgOTQsIDE0OSwgMSwgMjMzLCA5NCwgMTQ5LCAxLCAKKyAgICAxOTYsIDE0OSwgMSwgMjUyLCAxNzgsIDE0OSwgMSwgMTg0LCAxNDksIDEsIDIwMywgMTQ5LCAxLCAyMzUsIDE4OCwgMTQ5LCAKKyAgICAxLCAyMTksIDE4OSwgMTQ5LCAxLCAyMjMsIDIxOCwgMTQ5LCAxLCAyMjYsIDE3NywgMTQ5LCAxLCAxNTUsIDE0OSwgMjksIDUsIAorICAgIDI1NSwgNTgsIDE0OSwgMjksIDUsIDcyLCAxNDksIDI5LCA1LCAyMzcsIDI1NSwgMTQ5LCAyOSwgNSwgMjQ2LCAyMzcsIDE0OSwgCisgICAgMjksIDUsIDY4LCAxNDksIDI5LCA1LCAyMzAsIDE2NywgMTQ5LCAyOSwgNSwgNzQsIDE0OSwgMjksIDUsIDI1NCwgMTk2LCAKKyAgICAxNDksIDI5LCA1LCAyNTMsIDIzMiwgMTQ5LCAyOSwgNSwgMjIwLCAxMTAsIDE0OSwgMjUwLCAxNDcsIDUsIDE4NCwgMTQ5LCAKKyAgICAyNTAsIDE0NywgNSwgMjAzLCAxNDksIDI1MCwgMTQ3LCA1LCAyMzUsIDE4OCwgMTQ5LCAyNTAsIDE0NywgNSwgMjE5LCA3LCAKKyAgICAxNDksIDEsIDM5LCAyMzcsIDE3LCAxNDksIDEsIDM5LCAyNDUsIDY3LCAxNDksIDEsIDM5LCAyMzIsIDExNywgMTQ5LCAyNTAsIAorICAgIDE0NywgNSwgMzksIDIzMiwgMTE3LCAxNDksIDEsIDM5LCAyNTEsIDcwLCAxNDksIDEsIDM5LCAyMjIsIDIwMSwgMTQ5LCAxLCAKKyAgICAzOSwgMjA3LCAxNDksIDEsIDM5LCAyMzAsIDU5LCAxNDksIDEsIDM5LCAyMTgsIDkwLCAxNDksIDEsIDM5LCAxNTIsIDE0OSwgCisgICAgMSwgMzksIDE1MywgMTQ5LCAxLCAzOSwgMjIzLCAyMTksIDE0OSwgMjUwLCAxNDcsIDUsIDM5LCAxODksIDE0OSwgMjUwLCAKKyAgICAxNDcsIDUsIDM5LCAyNDMsIDIyNSwgMTQ5LCAyMCwgMjE3LCA4NCwgMTQ5LCAyMCwgMTA3LCAxNDksIDIwLCAxMDMsIDE0OSwgCisgICAgMjAsIDE2MCwgMTQ5LCAyMCwgMTU0LCAxNDksIDIwLCAxNzQsIDE0OSwgMjAsIDE4MiwgMTQ5LCAyMCwgMTkxLCAxNDksIDIwLCAKKyAgICAxODUsIDE0OSwgMjAsIDE5MCwgMTQ5LCAyMjgsIDE5NywgMjIzLCAyNDIsIDE0OSwgMjI4LCAxOTcsIDI0OSwgMTY3LCAxNDksIAorICAgIDIyOCwgMTk3LCA1MSwgMjQ5LCAxNjcsIDE0OSwgMjI4LCAxOTcsIDIyMSwgNzgsIDI0OSwgMTY3LCA2MywgMSwgMjM2LCAKKyAgICAxNDMsIDI0NSwgMCwgNjMsIDEsIDIzNiwgMTQzLCAyNTEsIDE2OSwgNjMsIDEsIDIzNiwgMTQzLCAyNTEsIDY5LCA2MywgMSwgCisgICAgMjM2LCAxNDMsIDIzNywgMTIzLCA2MywgMSwgMjM2LCAxNDMsIDIzNywgMTAzLCA2MywgMSwgMjM2LCAxNDMsIDIzMSwgNzcsIAorICAgIDYzLCAxLCAyMzYsIDE0MywgMjIxLCAyOSwgNjMsIDEsIDIzNiwgMTQzLCAyMjEsIDE5LCA2MywgMSwgMjM2LCAxNDMsIDI0OSwgCisgICAgMTMyLCA2MywgMSwgMjM2LCAxNDMsIDI0OSwgMTE2LCA2MywgMSwgMjM2LCAxNDMsIDI0OSwgMzYsIDYzLCAxLCAyMzYsIAorICAgIDE0MywgMjA4LCA2MywgMSwgMjM2LCAxNDMsIDIyNiwgMTc3LCA2MywgMSwgMjM2LCAxNDMsIDE1NSwgNjMsIDEsIDIzNiwgCisgICAgMTQzLCAyNDMsIDEyMSwgNjMsIDEsIDIzNiwgMTQzLCAyNDYsIDgsIDYzLCA1OCwgMSwgMjM2LCAxNDMsIDIyNywgMjAxLCAKKyAgICA2MywgMSwgMjM2LCAxNDMsIDIxOCwgMTM4LCA2MywgMSwgMjM2LCAxNDMsIDIxNywgMTE0LCA2MywgMSwgMjM2LCAxNDMsIAorICAgIDIwMywgNjMsIDIzNSwgNiwgMjM2LCAxNDMsIDIzMCwgMTgyLCA2MywgMjM1LCA2LCAyMzYsIDE0MywgMjI4LCAxMTEsIDYzLCAKKyAgICAyMzUsIDYsIDIzNiwgMTQzLCAyNDMsIDU3LCA2MywgMTYsIDI1NCwgMTg2LCAyNDYsIDk0LCA2MywgMTYsIDI1NCwgMTg2LCAKKyAgICAxMDcsIDYzLCAxNiwgMjU0LCAxODYsIDEwMywgNjMsIDEsIDI1NCwgMTg2LCAyMDMsIDYzLCA1LCAyMjksIDI0OCwgMjM2LCAKKyAgICAyMTMsIDIyMSwgMTMyLCAzNywgMTc3LCAxLCAxMDksIDIzNiwgNTcsIDM3LCAxNzcsIDEsIDExNiwgMjM2LCA1NywgMzcsIAorICAgIDE3NywgMSwgMTA5LCAyMzYsIDEyNSwgMzcsIDE3NywgMSwgMTE2LCAyMzYsIDEyNSwgMzcsIDE3NywgMSwgMTA5LCAyMzYsIAorICAgIDEzMiwgMzcsIDE3NywgMSwgMTE2LCAyMzYsIDEzMiwgMzcsIDE3NywgMSwgMTA5LCAyNDQsIDY4LCAzNywgMTc3LCAxLCAKKyAgICAxMTYsIDI0NCwgNjgsIDM3LCAxNzcsIDEsIDEwOSwgMjMyLCA4NCwgMzcsIDE3NywgMSwgMTE2LCAyMzIsIDg0LCAzNywgCisgICAgMTc3LCAxLCAxMDksIDI1MCwgMTgyLCAzNywgMTc3LCAxLCAxMTYsIDI1MCwgMTgyLCAzNywgMTc3LCAxLCAxMDksIDI1MSwgCisgICAgMTEsIDM3LCAxNzcsIDEsIDExNiwgMjUxLCAxMSwgMzcsIDE3NywgMSwgMTA5LCAyMjQsIDI2LCAzNywgMTc3LCAxLCAxMTYsIAorICAgIDIyNCwgMjYsIDM3LCAxNzcsIDEsIDEwOSwgMjMxLCA1NiwgMzcsIDE3NywgMSwgMTE2LCAyMzEsIDU2LCAzNywgMTc3LCAxLCAKKyAgICAxMDksIDI0OCwgMTY3LCAzNywgMTc3LCAxLCAxMTYsIDI0OCwgMTY3LCAzNywgMTc3LCAxLCAxMDksIDEwMSwgMzcsIDE3NywgCisgICAgMSwgMTE2LCAxMDEsIDM3LCAxNzcsIDEsIDEwOSwgMjIxLCAyMzksIDM3LCAxNzcsIDEsIDExNiwgMjIxLCAyMzksIDM3LCAKKyAgICAxNzcsIDEsIDEwOSwgMjMxLCAyMDQsIDM3LCAxNzcsIDEsIDExNiwgMjMxLCAyMDQsIDM3LCAxNzcsIDEsIDEwOSwgMjUyLCAKKyAgICA0MSwgMzcsIDE3NywgMSwgMTE2LCAyNTIsIDQxLCAzNywgMTc3LCAxLCAxMDksIDIyOSwgMzcsIDM3LCAxNzcsIDEsIDExNiwgCisgICAgMjI5LCAzNywgMzcsIDE3NywgMSwgMTA5LCAyMjksIDExOCwgMzcsIDE3NywgMSwgMTE2LCAyMjksIDExOCwgMzcsIDE3NywgCisgICAgMSwgMTA5LCAyNDUsIDEzOSwgMzcsIDE3NywgMSwgMTE2LCAyNDUsIDEzOSwgMzcsIDE3NywgMSwgMTA5LCAyMzMsIDEzNiwgCisgICAgMzcsIDE3NywgMSwgMTE2LCAyMzMsIDEzNiwgMzcsIDE3NywgMSwgMTA5LCAyMTcsIDIzMSwgMzcsIDE3NywgMSwgMTE2LCAKKyAgICAyMTcsIDIzMSwgMzcsIDE3NywgMSwgMTA5LCAyMjcsIDc1LCAzNywgMTc3LCAxLCAxMTYsIDIyNywgNzUsIDM3LCAxNzcsIDEsIAorICAgIDEwOSwgMjM1LCAxMiwgMzcsIDE3NywgMSwgMTE2LCAyMzUsIDEyLCAzNywgMTc3LCAxLCAxMDksIDIxOSwgNzIsIDM3LCAKKyAgICAxNzcsIDEsIDExNiwgMjE5LCA3MiwgMzcsIDE3NywgMSwgMTA5LCAyNDMsIDQsIDM3LCAxNzcsIDEsIDExNiwgMjQzLCA0LCAKKyAgICAzNywgMTc3LCAxLCAxMDksIDc0LCAzNywgMTc3LCAxLCAxMTYsIDc0LCAzNywgMTc3LCAyMzQsIDEwMCwgMjM2LCAyMjksIAorICAgIDM3LCAxNzcsIDI5LCAyNTUsIDU4LCAzNywgMTc3LCAyOSwgNzIsIDM3LCAxNzcsIDI5LCAyMjAsIDExMCwgMzcsIDE3NywgCisgICAgMjksIDY4LCAzNywgMTc3LCAyOSwgNzMsIDM3LCAxNzcsIDI5LCA3NCwgMzcsIDE3NywgMjM0LCAxMDAsIDIzNiwgMTI3LCAKKyAgICAzNywgMTc3LCAyOSwgMjQyLCA3MiwgMzcsIDE3NywgMjksIDIyMCwgMTA5LCAzNywgMTc3LCAyOSwgMjIwLCAxMjMsIDM3LCAKKyAgICAxNzcsIDI5LCAyNTMsIDIzMSwgMzcsIDE3NywgMjksIDI1MywgMjEyLCAzNywgMTc3LCAyOSwgMjU0LCAxMzEsIDM3LCAxNzcsIAorICAgIDI5LCAyNTQsIDE0MCwgMzcsIDE3NywgMTQ1LCAyMzQsIDEwMCwgMjQ2LCAyMjMsIDM3LCAxNzcsIDE0NSwgMjM0LCAxMDAsIAorICAgIDIzMSwgMTEzLCAzNywgMTc3LCAxNDUsIDIzNCwgMTAwLCAyMjEsIDIzOSwgMzcsIDE3NywgMTQ1LCAyMzQsIDEwMCwgMjI0LCAKKyAgICAxNSwgMzcsIDE3NywgMTYsIDIzNiwgNDQsIDM3LCAxNzcsIDE2LCAyMzEsIDExMywgMzcsIDE3NywgMTYsIDIyNiwgMTQ4LCAKKyAgICAzNywgMTc3LCAxNiwgMjQzLCA1LCAyNDMsIDEsIDM3LCAxNzcsIDE2LCAyMzYsIDUyLCAyMzYsIDUxLCAyMzQsIDExLCAyMzQsIAorICAgIDQzLCAxLCAyMzYsIDQ5LCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyMjYsIDE0OCwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjM1LCAKKyAgICAxNjcsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIzMywgMTQ1LCAyMzQsIDExLCAyMzQsIDQzLCAxLCAxODcsIDIzNCwgMTEsIAorICAgIDIzNCwgNDMsIDEsIDIwOCwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjUxLCAyNSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjIxLCAKKyAgICAxODEsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIzNiwgMTIxLCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyMzIsIDc2LCAyMzQsIAorICAgIDExLCAyMzQsIDQzLCAxLCAyMjEsIDIzMywgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjE5LCAyLCAyMzQsIDExLCAyMzQsIDQzLCAKKyAgICAxLCAyMTgsIDQ1LCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyNDIsIDE2NywgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjIwLCA4NywgCisgICAgMjM0LCAxMSwgMjM0LCA0MywgMSwgNzIsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIyOSwgMTM2LCAyMzQsIDExLCAyMzQsIDQzLCAKKyAgICAxLCAyNTMsIDI0MSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjQ0LCA2MywgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjM3LCAxMDIsIAorICAgIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIyNywgMjQ2LCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyNTIsIDIzNywgMjM0LCAxMSwgCisgICAgMjM0LCA0MywgMSwgMjM3LCA5MSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjQ4LCAyMzIsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIAorICAgIDI0NCwgMTEwLCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyNDksIDE3LCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyNTIsIDkzLCAKKyAgICAyMzQsIDExLCAyMzQsIDQzLCAxLCAyMzYsIDUwLCAyMzQsIDI0OSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjM1LCAxNjgsIAorICAgIDIzNCwgMjQ5LCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyMzMsIDE0NiwgMjM0LCAyNDksIDIzNCwgMTEsIDIzNCwgNDMsIDEsIAorICAgIDIzMCwgNDQsIDIzNCwgMjQ5LCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyMzIsIDIzOCwgMjM0LCAyNDksIDIzNCwgMTEsIDIzNCwgCisgICAgNDMsIDEsIDIyMSwgMTgyLCAyMzQsIDI0OSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjMyLCA3NywgMjM0LCAyNDksIDIzNCwgCisgICAgMTEsIDIzNCwgNDMsIDEsIDI0MiwgMTA3LCAyMzQsIDI0OSwgMjM0LCAxMSwgMjM0LCA0MywgMjksIDUsIDIzMCwgMTM3LCAKKyAgICAyMzQsIDExLCAyMzQsIDQzLCAyOSwgNSwgMjM3LCAyMjEsIDIzNCwgMTEsIDIzNCwgNDMsIDI5LCA1LCAyNTQsIDEzMCwgCisgICAgMjM0LCAxMSwgMjM0LCA0MywgMjksIDUsIDIxOCwgMTgsIDIzNCwgMTEsIDIzNCwgNDMsIDI5LCA1LCAyMjQsIDEwLCAyMzQsIAorICAgIDExLCAyMzQsIDQzLCAyOSwgNSwgMjIwLCA4NSwgMjM0LCAxMSwgMjM0LCA0MywgMjksIDUsIDI1MSwgNDAsIDIzNCwgMTEsIAorICAgIDIzNCwgNDMsIDI5LCA1LCAyMzEsIDEwMCwgMjM0LCAxMSwgMjM0LCA0MywgMjUxLCA0MSwgMjM0LCAxMSwgMjM0LCA0MywgCisgICAgMjM0LCAyMjAsIDIzNywgMTMxLCAyMzQsIDExLCAyMzQsIDQzLCAyNTQsIDcwLCAyMzcsIDEzMSwgMjM0LCAxMSwgMjM0LCAKKyAgICA0MywgMjAsIDIxNywgODQsIDIzNCwgMTEsIDIzNCwgNDMsIDIwLCAxMDcsIDIzNCwgMTEsIDIzNCwgNDMsIDIwLCAxMDMsIAorICAgIDIzNCwgMTEsIDIzNCwgNDMsIDIwLCAxNjAsIDIzNCwgMTEsIDIzNCwgNDMsIDIwLCAxNTQsIDIzNCwgMTEsIDIzNCwgNDMsIAorICAgIDIwLCAxNzQsIDIzNCwgMTEsIDIzNCwgNDMsIDIwLCAxODIsIDIzNCwgMTEsIDIzNCwgNDMsIDIwLCAxOTEsIDIzNCwgMTEsIAorICAgIDIzNCwgNDMsIDIwLCAxODUsIDIzNCwgMTEsIDIzNCwgNDMsIDIwLCAxOTAsIDIyLCAxMjIsIDIzMSwgNiwgMjIsIDEyMiwgCisgICAgMjMxLCAxMSwgMjIsIDEyMiwgMjE3LCAyMzAsIDIyLCAxMjIsIDIxNywgMjI5LCAyMiwgMTIyLCAyMTcsIDIyOCwgMjIsIAorICAgIDEyMiwgMjIwLCAxNzMsIDIyLCAxMjIsIDIyMCwgMTc2LCAyMiwgMTIyLCAyMTcsIDE5OCwgMjIsIDEyMiwgMjE3LCAxOTQsIAorICAgIDIyLCAxMjIsIDI0NiwgMTE0LCAyMiwgMTIyLCAyNDYsIDExMiwgMjIsIDEyMiwgMjQ2LCAxMTMsIDIyLCAxMjIsIDI0NiwgCisgICAgMTEwLCAyMiwgMTIyLCAyNDIsIDk3LCAyMiwgMTIyLCAyNDIsIDk2LCAyMiwgMTIyLCAyNDIsIDk0LCAyMiwgMTIyLCAyNDIsIAorICAgIDk1LCAyMiwgMTIyLCAyNDIsIDEwMCwgMjIsIDEyMiwgMjQyLCA5MywgMjIsIDEyMiwgMjQyLCA5MiwgMjIsIDEyMiwgMjQyLCAKKyAgICAxMDIsIDIyLCAxMjIsIDI1NCwgNTksIDIyLCAxMjIsIDI1NCwgNTgsIDIyLCA4NSwgMjMyLCA0OCwgMjIsIDg1LCAyMzIsIAorICAgIDU0LCAyMiwgODUsIDIyMywgMjAwLCAyMiwgODUsIDIyMywgMTk5LCAyMiwgODUsIDIyMSwgMTg3LCAyMiwgODUsIDIyMSwgCisgICAgMTg1LCAyMiwgODUsIDIyMSwgMTg0LCAyMiwgODUsIDIyMSwgMTkwLCAyMiwgODUsIDIyMSwgMTkxLCAyMiwgODUsIDIyMSwgCisgICAgMTgzLCAyMiwgODUsIDIyNywgMTE5LCAyMiwgODUsIDIyNywgMTM0LCAyMiwgODUsIDIyMywgMjA2LCAyMiwgODUsIDIyNywgCisgICAgMTMxLCAyMiwgODUsIDIyNywgMTIxLCAyMiwgODUsIDIyNywgMTIzLCAyMiwgODUsIDIyNywgMTEwLCAyMiwgODUsIDIyNywgCisgICAgMTExLCAyMiwgODUsIDIzNiwgMjE3LCAyMiwgODUsIDIzMywgMTgyLCAyMiwgODUsIDIzMywgMTc2LCAyMiwgODUsIDIyMywgCisgICAgMjEwLCAyMiwgODUsIDIzMywgMTc5LCAyMiwgODUsIDIzMywgMTg1LCAyMiwgODUsIDIyOSwgODAsIDIyLCA4NSwgMjI5LCAKKyAgICA4OSwgMjIsIDg1LCAyMjksIDkzLCAyMiwgODUsIDIyMywgMjA4LCAyMiwgODUsIDIyOSwgODMsIDIyLCA4NSwgMjI5LCA5NywgCisgICAgMjIsIDg1LCAyMjksIDk4LCAyMiwgODUsIDIyNCwgOTYsIDIyLCA4NSwgMjI0LCA5OSwgMjIsIDg1LCAyMjMsIDIwNCwgMjIsIAorICAgIDg1LCAyMjMsIDIwMiwgMjIsIDg1LCAyMjQsIDk0LCAyMiwgODUsIDIyNCwgMTAyLCAyMiwgODUsIDIyNCwgMTAzLCAyMiwgCisgICAgODUsIDIyNCwgODgsIDIyLCA4NSwgMjI0LCAxMDEsIDIyLCA4NSwgMjI5LCAyNTUsIDIyLCA4NSwgMjMwLCAwLCAyMiwgODUsIAorICAgIDIxOCwgNCwgMjIsIDg1LCAyMTgsIDUsIDIyLCA4NSwgMjUwLCAyMjgsIDIyLCA4NSwgMjUwLCAyMjcsIDIyLCA4NSwgMjIzLCAKKyAgICAyMTUsIDIyLCA4NSwgMjI5LCAxMjQsIDIyLCA4NSwgMjI5LCAxMjMsIDksIDEzLCAyMzksIDI0NCwgOSwgMTMsIDIzOSwgCisgICAgMjQzLCA5LCAxMywgMjM5LCAyNDIsIDksIDEzLCAyMzksIDI0MSwgOSwgMTMsIDIzOSwgMjQwLCA5LCAxMywgMjM5LCAyMzksIAorICAgIDksIDEzLCAyMzksIDIzOCwgOSwgMTMsIDIzOSwgMjM3LCA5LCAxMywgMjM5LCAyMzYsIDksIDEzLCAyMzksIDIzNSwgOSwgCisgICAgMTMsIDIzOSwgMjM0LCA5LCAxMywgMjM5LCAyMzMsIDksIDEzLCAyMzksIDIzMiwgOSwgMTMsIDIzOSwgMjMxLCA5LCAxMywgCisgICAgMjM5LCAyMzAsIDksIDEzLCAyMzksIDIyOSwgOSwgMTMsIDIzOSwgMjI4LCA5LCAxMywgMjM5LCAyMjcsIDksIDEzLCAyMzksIAorICAgIDIyNiwgOSwgMTMsIDIzOSwgMjI1LCA5LCAxMywgMjM5LCAyMjQsIDksIDEzLCAyMzksIDIyMywgOSwgMTMsIDIzOSwgMjIyLCAKKyAgICA5LCAxMywgMjM5LCAyMjEsIDksIDEzLCAyMzksIDIyMCwgOSwgMTMsIDIzOSwgMjE5LCA5LCAxMywgMjM5LCAyMTgsIDksIAorICAgIDEzLCAyMzksIDIxNywgOSwgMTMsIDIzOSwgMjE2LCA5LCAxMywgMjM5LCAyMTUsIDksIDEzLCAyMzksIDIxNCwgOSwgMTMsIAorICAgIDIzOSwgMjEzLCA5LCAxMywgMjM5LCAyMTIsIDksIDEzLCAyMzksIDIxMSwgOSwgMTMsIDIzOSwgMjEwLCA5LCAxMywgMjM5LCAKKyAgICAyMDksIDksIDEzLCAyMzksIDIwOCwgOSwgMTMsIDIzOSwgMjA3LCA5LCAxMywgMjM5LCAyMDYsIDksIDEzLCAyMzksIDIwNSwgCisgICAgOSwgMTMsIDIzOSwgMjA0LCA5LCAxMywgMjM5LCAyMDMsIDksIDEzLCAyMzksIDIwMiwgOSwgMTMsIDIzOSwgMjAxLCA5LCAKKyAgICAxMywgMjM5LCAyMDAsIDksIDEzLCAyMzksIDE5OSwgOSwgMTMsIDIzOSwgMTk4LCA5LCAxMywgMjM5LCAxOTcsIDksIDEzLCAKKyAgICAyMzksIDE5NiwgOSwgMTMsIDIzOSwgMTk1LCA5LCAxMywgMjM5LCAxOTQsIDksIDEzLCAyMzksIDE5MywgOSwgMTMsIDIzOSwgCisgICAgMTkyLCA5LCAxMywgMjM5LCAxOTEsIDksIDEzLCAyMzksIDE5MCwgOSwgMTMsIDIzOSwgMTg5LCA5LCAxMywgMjM5LCAxODgsIAorICAgIDksIDEzLCAyMzksIDE4NywgOSwgMTMsIDIzOSwgMTg2LCA5LCAxMywgMjM5LCAxODUsIDksIDEzLCAyMzksIDE4NCwgOSwgCisgICAgMTMsIDIzOSwgMTgzLCA5LCAxMywgMjM5LCAxODIsIDksIDEzLCAyMzksIDE4MSwgOSwgMTMsIDIzOSwgMTgwLCA5LCAxMywgCisgICAgMjM5LCAxNzksIDksIDEzLCAyMzksIDE3OCwgOSwgMTMsIDIzOSwgMTc3LCA5LCAxMywgMjM5LCAxNzYsIDksIDEzLCAyMzksIAorICAgIDE3NSwgOSwgMTMsIDIzOSwgMTc0LCA5LCAxMywgMjM5LCAxNzMsIDksIDEzLCAyMzksIDE3MiwgOSwgMTMsIDIzOSwgMTcxLCAKKyAgICA5LCAxMywgMjM5LCAxNzAsIDksIDEzLCAyMzksIDE2OSwgOSwgMTMsIDIzOSwgMTY4LCA5LCAxMywgMjM5LCAxNjcsIDksIAorICAgIDEzLCAyMzksIDE2NiwgOSwgMTMsIDIzOSwgMTY1LCA5LCAxMywgMjM5LCAxNjQsIDksIDEzLCAyMzksIDE2MywgOSwgMTMsIAorICAgIDIzOSwgMTYyLCA5LCAxMywgMjM5LCAxNjEsIDksIDEzLCAyMzksIDE2MCwgOSwgMTMsIDIzOSwgMTU5LCA5LCAxMywgMjM5LCAKKyAgICAxNTgsIDksIDEzLCAyMzksIDE1NywgOSwgMTMsIDIzOSwgMTU2LCA5LCAxMywgMjM5LCAxNTUsIDksIDEzLCAyMzksIDE1NCwgCisgICAgOSwgMTMsIDIzOSwgMTUzLCA5LCAxMywgMjM5LCAxNTIsIDksIDEzLCAyMzksIDE1MSwgOSwgMTMsIDIzOSwgMTUwLCA5LCAKKyAgICAxMywgMjM5LCAxNDksIDksIDEzLCAyMzksIDE0OCwgOSwgMTMsIDIzOSwgMTQ3LCA5LCAxMywgMjM5LCAxNDYsIDksIDEzLCAKKyAgICAyMzksIDE0NSwgOSwgMTMsIDIzOSwgMTQ0LCA5LCAxMywgMjM5LCAxNDMsIDksIDEzLCAyMzksIDE0MiwgOSwgMTMsIDIzOSwgCisgICAgMTQxLCA5LCAxMywgMjM5LCAxNDAsIDksIDEzLCAyMzksIDEzOSwgOSwgMTMsIDIzOSwgMTM4LCA5LCAxMywgMjM5LCAxMzcsIAorICAgIDksIDEzLCAyMzksIDEzNiwgOSwgMTMsIDIzOSwgMTM1LCA5LCAxMywgMjM5LCAxMzQsIDksIDEzLCAyMzksIDEzMywgOSwgCisgICAgMTMsIDIzOSwgMTMyLCA5LCAxMywgMjM5LCAxMzEsIDksIDEzLCAyMzksIDEzMCwgOSwgMTMsIDIzOSwgMTI5LCA5LCAxMywgCisgICAgMjM5LCAxMjgsIDksIDEzLCAyMzksIDEyNywgOSwgMTMsIDIzOSwgMTI2LCA5LCAxMywgMjM5LCAxMjUsIDksIDEzLCAyMzksIAorICAgIDEyNCwgOSwgMTMsIDIzOSwgMTIzLCA5LCAxMywgMjM5LCAxMjIsIDksIDEzLCAyMzksIDEyMSwgOSwgMTMsIDIzOSwgMTIwLCAKKyAgICA5LCAxMywgMjM5LCAxMTksIDksIDEzLCAyMzksIDExOCwgOSwgMTMsIDIzOSwgMTE3LCA5LCAxMywgMjM5LCAxMTYsIDksIAorICAgIDEzLCAyMzksIDExNSwgOSwgMTMsIDIzOSwgMTE0LCA5LCAxMywgMjM5LCAxMTMsIDksIDEzLCAyMzksIDExMiwgOSwgMTMsIAorICAgIDIzOSwgMTExLCA5LCAxMywgMjM5LCAxMTAsIDksIDEzLCAyMzksIDEwOSwgOSwgMTMsIDIzOSwgMTA4LCA5LCAxMywgMjM5LCAKKyAgICAxMDcsIDksIDEzLCAyMzksIDEwNiwgOSwgMTMsIDIzOSwgMTA1LCA5LCAxMywgMjM5LCAxMDQsIDksIDEzLCAyMzksIDEwMywgCisgICAgOSwgMTMsIDIzOSwgMTAyLCA5LCAxMywgMjM5LCAxMDEsIDksIDEzLCAyMzksIDEwMCwgOSwgMTMsIDIzOSwgOTksIDksIDEzLCAKKyAgICAyMzksIDk4LCA5LCAxMywgMjM5LCA5NywgOSwgMTMsIDIzOSwgOTYsIDksIDEzLCAyMzksIDk1LCA5LCAxMywgMjM5LCA5NCwgCisgICAgOSwgMTMsIDIzOSwgOTMsIDksIDEzLCAyMzksIDkyLCA5LCAxMywgMjM5LCA5MSwgOSwgMTMsIDIzOSwgOTAsIDksIDEzLCAKKyAgICAyMzksIDg5LCA5LCAxMywgMjM5LCA4OCwgOSwgMTMsIDIzOSwgODcsIDksIDEzLCAyMzksIDg2LCA5LCAxMywgMjM5LCA4NSwgCisgICAgOSwgMTMsIDIzOSwgODQsIDksIDEzLCAyMzksIDgzLCA5LCAxMywgMjM5LCA4MiwgOSwgMTMsIDIzOSwgODEsIDksIDEzLCAKKyAgICAyMzksIDgwLCA5LCAxMywgMjM5LCA3OSwgOSwgMTMsIDIzOSwgNzgsIDksIDEzLCAyMzksIDc3LCA5LCAxMywgMjM5LCA3NiwgCisgICAgOSwgMTMsIDIzOSwgNzUsIDksIDEzLCAyMzksIDc0LCA5LCAxMywgMjM5LCA3MywgOSwgMTMsIDIzOSwgNzIsIDksIDEzLCAKKyAgICAyMzksIDcxLCA5LCAxMywgMjM5LCA3MCwgOSwgMTMsIDIzOSwgNjksIDksIDEzLCAyMzksIDY4LCA5LCAxMywgMjM5LCA2NywgCisgICAgOSwgMTMsIDIzOSwgNjYsIDksIDEzLCAyMzksIDY1LCA5LCAxMywgMjM5LCA2NCwgOSwgMTMsIDIzOSwgNjMsIDksIDEzLCAKKyAgICAyMzksIDYyLCA5LCAxMywgMjM5LCA2MSwgOSwgMTMsIDIzOSwgNjAsIDksIDEzLCAyMzksIDU5LCA5LCAxMywgMjM5LCA1OCwgCisgICAgOSwgMTMsIDIzOSwgNTcsIDksIDEzLCAyMzksIDU2LCA5LCAxMywgMjM5LCA1NSwgOSwgMTMsIDIzOSwgNTQsIDksIDEzLCAKKyAgICAyMzksIDUzLCA5LCAxMywgMjM5LCA1MiwgOSwgMTMsIDIzOSwgNTEsIDksIDEzLCAyMzksIDUwLCA5LCAxMywgMjM5LCA0OSwgCisgICAgOSwgMTMsIDIzOSwgNDgsIDksIDEzLCAyMzksIDQ3LCA5LCAxMywgMjM5LCA0NiwgOSwgMTMsIDIzOSwgNDUsIDksIDEzLCAKKyAgICAyMzksIDQ0LCA5LCAxMywgMjM5LCA0MywgOSwgMTMsIDIzOSwgNDIsIDksIDEzLCAyMzksIDQxLCA5LCAxMywgMjM5LCA0MCwgCisgICAgOSwgMTMsIDIzOSwgMzksIDksIDEzLCAyMzksIDM4LCA5LCAxMywgMjM5LCAzNywgOSwgMTMsIDIzOSwgMzYsIDksIDEzLCAKKyAgICAyMzksIDM1LCA5LCAxMywgMjM5LCAzNCwgOSwgMTMsIDIzOSwgMzMsIDksIDEzLCAyMzksIDMyLCA5LCAxMywgMjM5LCAzMSwgCisgICAgOSwgMTMsIDIzOSwgMzAsIDksIDEzLCAyMzksIDI5LCA5LCAxMywgMjM5LCAyOCwgOSwgMTMsIDIzOSwgMjcsIDksIDEzLCAKKyAgICAyMzksIDI2LCA5LCAxMywgMjM5LCAyNSwgOSwgMTMsIDIzOSwgMjQsIDksIDEzLCAyMzksIDIzLCA5LCAxMywgMjM5LCAyMiwgCisgICAgOSwgMTMsIDIzOSwgMjEsIDksIDEzLCAyMzksIDIwLCA5LCAxMywgMjM5LCAxOSwgOSwgMTMsIDIzOSwgMTgsIDksIDEzLCAKKyAgICAyMzksIDE3LCA5LCAxMywgMjM5LCAxNiwgOSwgMTMsIDIzOSwgMTUsIDksIDEzLCAyMzksIDE0LCA5LCAxMywgMjM5LCAxMywgCisgICAgOSwgMTMsIDIzOSwgMTIsIDksIDEzLCAyMzksIDExLCA5LCAxMywgMjM5LCAxMCwgOSwgMTMsIDIzOSwgOSwgOSwgMTMsIAorICAgIDIzOSwgOCwgOSwgMTMsIDIzOSwgNywgOSwgMTMsIDIzOSwgNiwgOSwgMTMsIDIzOSwgNSwgOSwgMTMsIDIzOSwgNCwgOSwgCisgICAgMTMsIDIzOSwgMywgOSwgMTMsIDIzOSwgMiwgOSwgMTMsIDIzOSwgMSwgOSwgMTMsIDIzOSwgMCwgOSwgMTMsIDIzOCwgMjU1LCAKKyAgICA5LCAxMywgMjM4LCAyNTQsIDksIDEzLCAyMzgsIDI1MywgOSwgMTMsIDIzOCwgMjUyLCA5LCAxMywgMjM4LCAyNTEsIDksIAorICAgIDEzLCAyMzgsIDI1MCwgOSwgMTMsIDIzOCwgMjQ5LCA5LCAxMywgMjM4LCAyNDgsIDksIDEzLCAyMzgsIDI0NywgOSwgMTMsIAorICAgIDIzOCwgMjQ2LCA5LCAxMywgMjM4LCAyNDUsIDksIDEzLCAyMzgsIDI0NCwgOSwgMTMsIDIzOCwgMjQzLCA5LCAxMywgMjM4LCAKKyAgICAyNDIsIDksIDEzLCAyMzgsIDI0MSwgOSwgMTMsIDIzOCwgMjQwLCA5LCAxMywgMjM4LCAyMzksIDksIDEzLCAyMzgsIDIzOCwgCisgICAgOSwgMTMsIDIzOCwgMjM3LCA5LCAxMywgMjM4LCAyMzYsIDksIDEzLCAyMzgsIDIzNSwgOSwgMTMsIDIzOCwgMjM0LCA5LCAKKyAgICAxMywgMjM4LCAyMzMsIDksIDEzLCAyMzgsIDIzMiwgOSwgMTMsIDIzOCwgMjMxLCA5LCAxMywgMjM4LCAyMzAsIDksIDEzLCAKKyAgICAyMzgsIDIyOSwgOSwgMTMsIDIzOCwgMjI4LCA5LCAxMywgMjM4LCAyMjcsIDksIDEzLCAyMzgsIDIyNiwgOSwgMTMsIDIzOCwgCisgICAgMjI1LCA5LCAxMywgMjM4LCAyMjQsIDksIDEzLCAyMzgsIDIyMywgOSwgMTMsIDIzOCwgMjIyLCA5LCAxMywgMjM4LCAyMjEsIAorICAgIDksIDEzLCAyMzgsIDIyMCwgOSwgMTMsIDIzOCwgMjE5LCA5LCAxMywgMjM4LCAyMTgsIDksIDEzLCAyMzgsIDIxNywgOSwgCisgICAgMTMsIDIzOCwgMjE2LCA5LCAxMywgMjM4LCAyMTUsIDksIDEzLCAyMzgsIDIxNCwgOSwgMTMsIDIzOCwgMjEzLCA5LCAxMywgCisgICAgMjM4LCAyMTIsIDksIDEzLCAyMzgsIDIxMSwgOSwgMTMsIDIzOCwgMjEwLCA5LCAxMywgMjM4LCAyMDksIDksIDEzLCAyMzgsIAorICAgIDIwOCwgOSwgMTMsIDIzOCwgMjA3LCA5LCAxMywgMjM4LCAyMDYsIDksIDEzLCAyMzgsIDIwNSwgOSwgMTMsIDIzOCwgMjA0LCAKKyAgICA5LCAxMywgMjM4LCAyMDMsIDksIDEzLCAyMzgsIDIwMiwgOSwgMTMsIDIzOCwgMjAxLCA5LCAxMywgMjM4LCAyMDAsIDksIAorICAgIDEzLCAyMzgsIDE5OSwgOSwgMTMsIDIzOCwgMTk4LCA5LCAxMywgMjM4LCAxOTcsIDksIDEzLCAyMzgsIDE5NiwgOSwgMTMsIAorICAgIDIzOCwgMTk1LCA5LCAxMywgMjM4LCAxOTQsIDksIDEzLCAyMzgsIDE5MywgOSwgMTMsIDIzOCwgMTkyLCA5LCAxMywgMjM4LCAKKyAgICAxOTEsIDksIDEzLCAyMzgsIDE5MCwgOSwgMTMsIDIzOCwgMTg5LCA5LCAxMywgMjM4LCAxODgsIDksIDEzLCAyMzgsIDE4NywgCisgICAgOSwgMTMsIDIzOCwgMTg2LCA5LCAxMywgMjM4LCAxODUsIDksIDEzLCAyMzgsIDE4NCwgOSwgMTMsIDIzOCwgMTgzLCA5LCAKKyAgICAxMywgMjM4LCAxODIsIDksIDEzLCAyMzgsIDE4MSwgOSwgMTMsIDIzOCwgMTgwLCA5LCAxMywgMjM4LCAxNzksIDksIDEzLCAKKyAgICAyMzgsIDE3OCwgOSwgMTMsIDIzOCwgMTc3LCA5LCAxMywgMjM4LCAxNzYsIDksIDEzLCAyMzgsIDE3NSwgOSwgMTMsIDIzOCwgCisgICAgMTc0LCA5LCAxMywgMjM4LCAxNzMsIDksIDEzLCAyMzgsIDE3MiwgOSwgMTMsIDIzOCwgMTcxLCA5LCAxMywgMjM4LCAxNzAsIAorICAgIDksIDEzLCAyMzgsIDE2OSwgOSwgMTMsIDIzOCwgMTY4LCA5LCAxMywgMjM4LCAxNjcsIDksIDEzLCAyMzgsIDE2NiwgOSwgCisgICAgMTMsIDIzOCwgMTY1LCA5LCAxMywgMjM4LCAxNjQsIDksIDEzLCAyMzgsIDE2MywgOSwgMTMsIDIzOCwgMTYyLCA5LCAxMywgCisgICAgMjM4LCAxNjEsIDksIDEzLCAyMzgsIDE2MCwgOSwgMTMsIDIzOCwgMTU5LCA5LCAxMywgMjM4LCAxNTgsIDksIDEzLCAyMzgsIAorICAgIDE1NywgOSwgMTMsIDIzOCwgMTU2LCA5LCAxMywgMjM4LCAxNTUsIDksIDEzLCAyMzgsIDE1NCwgOSwgMTMsIDIzOCwgMTUzLCAKKyAgICA5LCAxMywgMjM4LCAxNTIsIDksIDEzLCAyMzgsIDE1MSwgOSwgMTMsIDIzOCwgMTUwLCA5LCAxMywgMjM4LCAxNDksIDksIAorICAgIDEzLCAyMzgsIDE0OCwgOSwgMTMsIDIzOCwgMTQ3LCA5LCAxMywgMjM4LCAxNDYsIDksIDEzLCAyMzgsIDE0NSwgOSwgMTMsIAorICAgIDIzOCwgMTQ0LCA5LCAxMywgMjM4LCAxNDMsIDksIDEzLCAyMzgsIDE0MiwgOSwgMTMsIDIzOCwgMTQxLCA5LCAxMywgMjM4LCAKKyAgICAxNDAsIDksIDEzLCAyMzgsIDEzOSwgOSwgMTMsIDIzOCwgMTM4LCA5LCAxMywgMjM4LCAxMzcsIDksIDEzLCAyMzgsIDEzNiwgCisgICAgOSwgMTMsIDIzOCwgMTM1LCA5LCAxMywgMjM4LCAxMzQsIDksIDEzLCAyMzgsIDEzMywgOSwgMTMsIDIzOCwgMTMyLCA5LCAKKyAgICAxMywgMjM4LCAxMzEsIDksIDEzLCAyMzgsIDEzMCwgOSwgMTMsIDIzOCwgMTI5LCA5LCAxMywgMjM4LCAxMjgsIDksIDEzLCAKKyAgICAyMzgsIDEyNywgOSwgMTMsIDIzOCwgMTI2LCA5LCAxMywgMjM4LCAxMjUsIDksIDEzLCAyMzgsIDEyNCwgOSwgMTMsIDIzOCwgCisgICAgMTIzLCA5LCAxMywgMjM4LCAxMjIsIDksIDEzLCAyMzgsIDEyMSwgOSwgMTMsIDIzOCwgMTIwLCA5LCAxMywgMjM4LCAxMTksIAorICAgIDksIDEzLCAyMzgsIDExOCwgOSwgMTMsIDIzOCwgMTE3LCA5LCAxMywgMjM4LCAxMTYsIDksIDEzLCAyMzgsIDExNSwgOSwgCisgICAgMTMsIDIzOCwgMTE0LCA5LCAxMywgMjM4LCAxMTMsIDksIDEzLCAyMzgsIDExMiwgOSwgMTMsIDIzOCwgMTExLCA5LCAxMywgCisgICAgMjM4LCAxMTAsIDksIDEzLCAyMzgsIDEwOSwgOSwgMTMsIDIzOCwgMTA4LCA5LCAxMywgMjM4LCAxMDcsIDksIDEzLCAyMzgsIAorICAgIDEwNiwgOSwgMTMsIDIzOCwgMTA1LCA5LCAxMywgMjM4LCAxMDQsIDksIDEzLCAyMzgsIDEwMywgOSwgMTMsIDIzOCwgMTAyLCAKKyAgICA5LCAxMywgMjM4LCAxMDEsIDksIDEzLCAyMzgsIDEwMCwgOSwgMTMsIDIzOCwgOTksIDksIDEzLCAyMzgsIDk4LCA5LCAxMywgCisgICAgMjM4LCA5NywgOSwgMTMsIDIzOCwgOTYsIDksIDEzLCAyMzgsIDk1LCA5LCAxMywgMjM4LCA5NCwgOSwgMTMsIDIzOCwgOTMsIAorICAgIDksIDEzLCAyMzgsIDkyLCA5LCAxMywgMjM4LCA5MSwgOSwgMTMsIDIzOCwgOTAsIDksIDEzLCAyMzgsIDg5LCA5LCAxMywgCisgICAgMjM4LCA4OCwgOSwgMTMsIDIzOCwgODcsIDksIDEzLCAyMzgsIDg2LCA5LCAxMywgMjM4LCA4NSwgOSwgMTMsIDIzOCwgODQsIAorICAgIDksIDEzLCAyMzgsIDgzLCA5LCAxMywgMjM4LCA4MiwgOSwgMTMsIDIzOCwgODEsIDksIDEzLCAyMzgsIDgwLCA5LCAxMywgCisgICAgMjM4LCA3OSwgOSwgMTMsIDIzOCwgNzgsIDksIDEzLCAyMzgsIDc3LCA5LCAxMywgMjM4LCA3NiwgOSwgMTMsIDIzOCwgNzUsIAorICAgIDksIDEzLCAyMzgsIDc0LCA5LCAxMywgMjM4LCA3MywgOSwgMTMsIDIzOCwgNzIsIDksIDEzLCAyMzgsIDcxLCA5LCAxMywgCisgICAgMjM4LCA3MCwgOSwgMTMsIDIzOCwgNjksIDksIDEzLCAyMzgsIDY4LCA5LCAxMywgMjM4LCA2NywgOSwgMTMsIDIzOCwgNjYsIAorICAgIDksIDEzLCAyMzgsIDY1LCA5LCAxMywgMjM4LCA2NCwgOSwgMTMsIDIzOCwgNjMsIDksIDEzLCAyMzgsIDYyLCA5LCAxMywgCisgICAgMjM4LCA2MSwgOSwgMTMsIDIzOCwgNjAsIDksIDEzLCAyMzgsIDU5LCA5LCAxMywgMjM4LCA1OCwgOSwgMTMsIDIzOCwgNTcsIAorICAgIDksIDEzLCAyMzgsIDU2LCA5LCAxMywgMjM4LCA1NSwgOSwgMTMsIDIzOCwgNTQsIDksIDEzLCAyMzgsIDUzLCA5LCAxMywgCisgICAgMjM4LCA1MiwgOSwgMTMsIDIzOCwgNTEsIDksIDEzLCAyMzgsIDUwLCA5LCAxMywgMjM4LCA0OSwgOSwgMTMsIDIzOCwgNDgsIAorICAgIDksIDEzLCAyMzgsIDQ3LCA5LCAxMywgMjM4LCA0NiwgOSwgMTMsIDIzOCwgNDUsIDksIDEzLCAyMzgsIDQ0LCA5LCAxMywgCisgICAgMjM4LCA0MywgOSwgMTMsIDIzOCwgNDIsIDksIDEzLCAyMzgsIDQxLCA5LCAxMywgMjM4LCA0MCwgOSwgMTMsIDIzOCwgMzksIAorICAgIDksIDEzLCAyMzgsIDM4LCA5LCAxMywgMjM4LCAzNywgOSwgMTMsIDIzOCwgMzYsIDksIDEzLCAyMzgsIDM1LCA5LCAxMywgCisgICAgMjM4LCAzNCwgOSwgMTMsIDIzOCwgMzMsIDksIDEzLCAyMzgsIDMyLCA5LCAxMywgMjM4LCAzMSwgNywgMywgMjQsIDI0NSwgCisgICAgMjA3LCA3LCAzLCAyNCwgMjQ1LCAyMDMsIDcsIDMsIDI0LCAyNDUsIDE2NiwgNywgMywgMjQsIDI0NSwgMjA2LCA3LCAzLCAKKyAgICAyNCwgMjQ1LCAyMDUsIDcsIDMsIDI0LCAxNzEsIDIyNiwgMjM1LCAyMjIsIDIwMSwgNywgMywgMjQsIDIyMywgMTY4LCAxMzIsIAorICAgIDMsIDI0LCAyMzMsIDI1MiwgMjMxLCAxNzQsIDEzMiwgMywgMjQsIDIzMywgMjUyLCAyNDYsIDI1NCwgMTMyLCAzLCAyNCwgCisgICAgMjMzLCAyNTIsIDIzNywgMjAwLCAxMzIsIDMsIDI0LCAyMTksIDk3LCAyMzEsIDE3NCwgMTMyLCAzLCAyNCwgMjMzLCAyNTIsIAorICAgIDIxOCwgMTMzLCA4NywgMSwgMjE3LCAyMjEsIDIsIDI0MywgOTQsIDg3LCAyMjksIDMyLCAyMzcsIDQyLCAyMTksIDE3NiwgCisgICAgODcsIDI0LCAyMTcsIDI0OCwgMjE3LCAyMjEsIDIxNywgMjIxLCAyMjksIDIxNCwgODcsIDEsIDI1NCwgMTQyLCAyNTMsIAorICAgIDIwNywgODcsIDEsIDIxOCwgMjAxLCAyNTQsIDE2OCwgODcsIDEsIDIxOCwgMjAxLCAyNDksIDE3NywgODcsIDEsIDIxOCwgCisgICAgMjAxLCAyNDMsIDE2MiwgODcsIDEsIDIxOCwgMjAxLCAyMzYsIDI0NiwgODcsIDEsIDIxOCwgMjAxLCAyMzUsIDE1MiwgODcsIAorICAgIDEsIDIxOCwgMjAxLCAzOSwgMjM0LCAxLCA4NywgMSwgMjE4LCAyMDEsIDIyNywgMTc0LCA4NywgMSwgMjE4LCAyMDEsIDIyMiwgCisgICAgMTAyLCA4NywgMSwgMjU0LCAxNDIsIDg4LCA1NSwgODcsIDEsIDIyNCwgMjEwLCAyLCAyMjQsIDIxMCwgMjQ4LCAxNDUsIDg3LCAKKyAgICAxLCAyMjQsIDIxMCwgMiwgMjI0LCAxMTMsIDI0OCwgMTQ1LCA4NywgMSwgMjI0LCAyMTAsIDIsIDI0OSwgMTk0LCAyNSwgCisgICAgMjI0LCAyMTAsIDI0OCwgMTQ1LCA4NywgMSwgMjI0LCAyMTAsIDIsIDI0OSwgMTk0LCAyNSwgMjI0LCAxMTMsIDI0OCwgMTQ1LCAKKyAgICA4NywgMSwgOTksIDIsIDIyOSwgMjE0LCA4NywgMSwgOTksIDIsIDIyOCwgMTQzLCA4NywgMSwgOTksIDIsIDIzNCwgNzcsIAorICAgIDg3LCAxLCAyNTIsIDEwNSwgMiwgMjQ5LCAxOTMsIDg3LCAxLCAyNDQsIDkyLCAyLCAyNDksIDE5MywgODcsIDEsIDI0OSwgCisgICAgMTc4LCAyLCAyNDksIDE5MywgODcsIDEsIDI0MywgMTYzLCAyLCAyMzQsIDc3LCA4NywgMSwgMjE5LCAxNzAsIDIsIDI0OSwgCisgICAgMTkzLCA4NywgMSwgMjE3LCA5NiwgMiwgMjQ5LCAxOTMsIDg3LCAxLCAyMjIsIDUxLCAyLCAyNDksIDE5MywgODcsIDEsIAorICAgIDIxNywgMjIxLCAyLCAyNDksIDE5MywgODcsIDEsIDM5LCAyMzYsIDI0NywgMiwgMjQ5LCAxOTMsIDg3LCAxLCAyMzYsIDI0NywgCisgICAgMiwgMjQ5LCAxOTMsIDg3LCAxLCAyMzUsIDE1MywgMiwgMjQ5LCAxOTMsIDg3LCAxLCAyMzQsIDIsIDIsIDI0OSwgMTkzLCAKKyAgICA4NywgMSwgMjMxLCAxMDQsIDIsIDI0OSwgMTkzLCA4NywgMSwgMjI2LCAxNDYsIDIsIDI0OSwgMTkzLCA4NywgMSwgMzksIAorICAgIDIyOSwgMTk5LCAyLCAyNDksIDE5MywgODcsIDEsIDIyOSwgMTk5LCAyLCAyNDksIDE5MywgODcsIDEsIDIyMSwgNTIsIDIsIAorICAgIDI0OSwgMTkzLCA4NywgMSwgMjI4LCAxMDgsIDIsIDI0OSwgMTkzLCA4NywgMSwgMjI3LCAxNzUsIDIsIDI0OSwgMTkzLCA4NywgCisgICAgMSwgMjI0LCAyMTAsIDIsIDI0OSwgMTkzLCA4NywgMSwgMjIyLCAxMDMsIDIsIDI0OSwgMTkzLCA4NywgMSwgMjE5LCAxNzAsIAorICAgIDIsIDI0MiwgMjU0LCA4NywgMSwgMjUyLCAxMDUsIDIsIDIyNywgMjQ4LCA4NywgMSwgMjM2LCAyNDcsIDIsIDIyNywgMjQ4LCAKKyAgICA4NywgMSwgMjI5LCAxOTksIDIsIDIyNywgMjQ4LCA4NywgMjQsIDk5LCAyMzUsIDE1MiwgMTIsIDEsIDk5LCAyMTgsIDI0NywgCisgICAgNDcsIDE3LCAxMiwgMSwgOTksIDIxOCwgMjQ3LCAzOSwgMTcsIDEyLCAxLCAyNTIsIDEzNiwgNDcsIDE3LCAxMiwgMSwgMjUyLCAKKyAgICAxMzYsIDM5LCAxNywgMTIsIDEsIDI1MiwgMTM2LCA2NiwgMTcsIDEyLCAxLCAyNTIsIDEzNiwgMTI4LCAxNywgMTIsIDEsIAorICAgIDIyOSwgMTg4LCA0NywgMTcsIDEyLCAxLCAyMjksIDE4OCwgMzksIDE3LCAxMiwgMSwgMjI5LCAxODgsIDY2LCAxNywgMTIsIAorICAgIDEsIDIyOSwgMTg4LCAxMjgsIDE3LCAxMiwgMSwgMjUyLCAxMjcsIDQ3LCAxNywgMTIsIDEsIDI1MiwgMTI3LCAzOSwgMTcsIAorICAgIDEyLCAxLCAyNTIsIDEyNywgNjYsIDE3LCAxMiwgMSwgMjUyLCAxMjcsIDEyOCwgMTcsIDEyLCAxLCAyMjEsIDIyLCA0NywgCisgICAgMTcsIDEyLCAxLCAyMjEsIDIyLCAzOSwgMTcsIDEyLCAxLCAyMjEsIDIyLCA2NiwgMTcsIDEyLCAxLCAyMjEsIDIyLCAxMjgsIAorICAgIDE3LCAxMiwgMSwgMjIyLCA3NiwgNDcsIDE3LCAxMiwgMSwgMjIyLCA3NiwgMzksIDE3LCAxMiwgMSwgMjIyLCA3NiwgNjYsIAorICAgIDE3LCAxMiwgMSwgMjIyLCA3NiwgMTI4LCAxNywgMTIsIDEsIDIyMSwgMjQsIDQ3LCAxNywgMTIsIDEsIDIyMSwgMjQsIDM5LCAKKyAgICAxNywgMTIsIDEsIDIyMSwgMjQsIDY2LCAxNywgMTIsIDEsIDIyMSwgMjQsIDEyOCwgMTcsIDEyLCAxLCAyMTksIDE1OSwgNDcsIAorICAgIDE3LCAxMiwgMSwgMjE5LCAxNTksIDM5LCAxNywgMTIsIDEsIDIxOSwgMTU5LCA2NiwgMTcsIDEyLCAxLCAyMTksIDE1OSwgCisgICAgMTI4LCAxNywgMTIsIDEsIDIyOSwgMTg2LCA0NywgMTcsIDEyLCAxLCAyMjksIDE4NiwgMzksIDE3LCAxMiwgMSwgMjI5LCAKKyAgICAxODYsIDY2LCAxNywgMTIsIDEsIDIyOSwgMTg2LCAxMjgsIDE3LCAxMiwgMSwgMjQ3LCA4MCwgNDcsIDE3LCAxMiwgMSwgCisgICAgMjQ3LCA4MCwgMzksIDE3LCAxMiwgMSwgMjQ3LCA4MCwgNjYsIDE3LCAxMiwgMSwgMjQ3LCA4MCwgMTI4LCAxNywgMTIsIDEsIAorICAgIDIzMSwgNzEsIDQ3LCAxNywgMTIsIDEsIDIzMSwgNzEsIDM5LCAxNywgMTIsIDEsIDIzMSwgNzEsIDY2LCAxNywgMTIsIDEsIAorICAgIDIzMSwgNzEsIDEyOCwgMTcsIDEyLCAxLCAyMjIsIDkyLCA0NywgMTcsIDEyLCAxLCAyMjIsIDkyLCAzOSwgMTcsIDEyLCAxLCAKKyAgICAyMjIsIDkyLCA2NiwgMTcsIDEyLCAxLCAyMjIsIDkyLCAxMjgsIDE3LCAxMiwgMSwgMjIyLCA5MCwgNDcsIDE3LCAxMiwgMSwgCisgICAgMjIyLCA5MCwgMzksIDE3LCAxMiwgMSwgMjIyLCA5MCwgNjYsIDE3LCAxMiwgMSwgMjIyLCA5MCwgMTI4LCAxNywgMTIsIDEsIAorICAgIDI0OSwgMTMwLCA0NywgMTcsIDEyLCAxLCAyNDksIDEzMCwgMzksIDE3LCAxMiwgMSwgMjQ5LCAxOTAsIDQ3LCAxNywgMTIsIAorICAgIDEsIDI0OSwgMTkwLCAzOSwgMTcsIDEyLCAxLCAyNDcsIDEwNCwgNDcsIDE3LCAxMiwgMSwgMjQ3LCAxMDQsIDM5LCAxNywgCisgICAgMTIsIDEsIDI0OSwgMTI4LCA0NywgMTcsIDEyLCAxLCAyNDksIDEyOCwgMzksIDE3LCAxMiwgMSwgMjM3LCAxMTAsIDQ3LCAKKyAgICAxNywgMTIsIDEsIDIzNywgMTEwLCAzOSwgMTcsIDEyLCAxLCAyMjcsIDQ5LCA0NywgMTcsIDEyLCAxLCAyMjcsIDQ5LCAzOSwgCisgICAgMTcsIDEyLCAxLCAyMzYsIDE3NywgNDcsIDE3LCAxMiwgMSwgMjM2LCAxNzcsIDM5LCAxNywgMTIsIDEsIDIzNiwgMTc3LCAKKyAgICA2NiwgMTcsIDEyLCAxLCAyMzYsIDE3NywgMTI4LCAxNywgMTIsIDEsIDI0NCwgMjQ0LCA0NywgMTcsIDEyLCAxLCAyNDQsIAorICAgIDI0NCwgMzksIDE3LCAxMiwgMSwgMjQ0LCAyNDQsIDY2LCAxNywgMTIsIDEsIDI0NCwgMjQ0LCAxMjgsIDE3LCAxMiwgMSwgCisgICAgMjQ0LCAxMCwgNDcsIDE3LCAxMiwgMSwgMjQ0LCAxMCwgMzksIDE3LCAxMiwgMSwgMjQ0LCAxMCwgNjYsIDE3LCAxMiwgMSwgCisgICAgMjQ0LCAxMCwgMTI4LCAxNywgMTIsIDEsIDIzMiwgODMsIDQ3LCAxNywgMTIsIDEsIDIzMiwgODMsIDM5LCAxNywgMTIsIDEsIAorICAgIDIzMiwgODMsIDY2LCAxNywgMTIsIDEsIDIzMiwgODMsIDEyOCwgMTcsIDEyLCAxLCAyMzEsIDE5NCwgMjQ0LCAxMDgsIDQ3LCAKKyAgICAxNywgMTIsIDEsIDIzMSwgMTk0LCAyNDQsIDEwOCwgMzksIDE3LCAxMiwgMSwgMjI3LCA3OSwgNDcsIDE3LCAxMiwgMSwgCisgICAgMjI3LCA3OSwgMzksIDE3LCAxMiwgMSwgMjI3LCA3OSwgNjYsIDE3LCAxMiwgMSwgMjI3LCA3OSwgMTI4LCAxNywgMTIsIDEsIAorICAgIDI0MywgMTQ3LCAyLCA3MCwgNzEsIDQ3LCAxNywgMTIsIDEsIDI0MywgMTQ3LCAyLCA3MCwgNzEsIDM5LCAxNywgMTIsIDEsIAorICAgIDI0MywgMTQ3LCAyNDQsIDY2LCA0NywgMTcsIDEyLCAxLCAyNDMsIDE0NywgMjQ0LCA2NiwgMzksIDE3LCAxMiwgMSwgMjQzLCAKKyAgICAxNDcsIDI0NCwgNjYsIDY2LCAxNywgMTIsIDEsIDI0MywgMTQ3LCAyNDQsIDY2LCAxMjgsIDE3LCAxMiwgMSwgMjQzLCAxNDcsIAorICAgIDI0OCwgMTY0LCA0NywgMTcsIDEyLCAxLCAyNDMsIDE0NywgMjQ4LCAxNjQsIDM5LCAxNywgMTIsIDEsIDI0MywgMTQ3LCAKKyAgICAyNDgsIDE2NCwgNjYsIDE3LCAxMiwgMSwgMjQzLCAxNDcsIDI0OCwgMTY0LCAxMjgsIDE3LCAxMiwgMSwgNzAsIDI1MiwgCisgICAgMTk1LCA0NywgMTcsIDEyLCAxLCA3MCwgMjUyLCAxOTUsIDM5LCAxNywgMTIsIDEsIDcwLCAyNTIsIDE5NSwgMiwgMTgxLCAKKyAgICA3MSwgNDcsIDE3LCAxMiwgMSwgNzAsIDI1MiwgMTk1LCAyLCAxODEsIDcxLCAzOSwgMTcsIDEyLCAxLCAyMzIsIDExOCwgNDcsIAorICAgIDE3LCAxMiwgMSwgMjMyLCAxMTgsIDM5LCAxNywgMTIsIDEsIDIzMiwgMTE4LCA2NiwgMTcsIDEyLCAxLCAyMzIsIDExOCwgCisgICAgMTI4LCAxNywgMTIsIDEsIDEwNSwgNDcsIDE3LCAxMiwgMSwgMTA1LCAzOSwgMTcsIDEyLCAxLCAyMzAsIDE2OCwgNDcsIDE3LCAKKyAgICAxMiwgMSwgMjMwLCAxNjgsIDM5LCAxNywgMTIsIDEsIDIxNywgMjAxLCA0NywgMTcsIDEyLCAxLCAyMTcsIDIwMSwgMzksIAorICAgIDE3LCAxMiwgMSwgMTA1LCAyLCAxODEsIDcxLCA0NywgMTcsIDEyLCAxLCAyMTksIDE2NiwgNDcsIDE3LCAxMiwgMSwgMjE5LCAKKyAgICAxNjYsIDM5LCAxNywgMTIsIDEsIDIzNiwgOTgsIDIzMCwgMTY4LCA0NywgMTcsIDEyLCAxLCAyMzYsIDk4LCAyMzAsIDE2OCwgCisgICAgMzksIDE3LCAxMiwgMSwgMjM2LCA5OCwgMjE3LCAyMDEsIDQ3LCAxNywgMTIsIDEsIDIzNiwgOTgsIDIxNywgMjAxLCAzOSwgCisgICAgMTcsIDEyLCAxLCAxNzgsIDQ3LCAxNywgMTIsIDEsIDE3OCwgMzksIDE3LCAxMiwgMSwgMTc4LCA2NiwgMTcsIDEyLCAxLCAKKyAgICAxNzgsIDEyOCwgMTcsIDEyLCAxLCAyMjAsIDEwNCwgMjM2LCAxODgsIDIzNiwgOTgsIDk5LCAxOTcsIDY2LCAxNywgMTIsIDEsIAorICAgIDIyMCwgMTA0LCAyMzYsIDE4OCwgMjM2LCA5OCwgOTksIDE5NywgMTI4LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgCisgICAgOTksIDQ3LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgOTksIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCAKKyAgICA3MSwgMiwgMjU0LCAyMzUsIDQ3LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMjU0LCAyMzUsIDM5LCAxNywgMTIsIAorICAgIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMjE4LCAyMzQsIDQ3LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMjE4LCAKKyAgICAyMzQsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMTA1LCA0NywgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgCisgICAgNzEsIDIsIDEwNSwgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCAyMzAsIDE2OCwgNDcsIDE3LCAxMiwgMjQsIAorICAgIDcwLCAyLCAxODEsIDcxLCAyLCAyMzAsIDE2OCwgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCAyMTcsIDIwMSwgCisgICAgNDcsIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCAyMTcsIDIwMSwgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIAorICAgIDcxLCAyLCAxNzgsIDQ3LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMTc4LCAzOSwgMTcsIDEyLCAyNCwgNzAsIAorICAgIDIsIDE4MSwgNzEsIDIsIDE3OCwgNjYsIDE3LCAxMiwgMjQsIDIyMCwgMTA0LCAyMzYsIDk4LCA3MCwgMiwgMTgxLCA3MSwgMiwgCisgICAgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDIyMCwgMTA0LCAyMzYsIDk4LCA3MCwgMiwgMTgxLCA3MSwgMiwgOTksIDE5NywgCisgICAgMzksIDE3LCAxMiwgMjQsIDIyMCwgMTA0LCAyMzYsIDk4LCA3MCwgMiwgMTgxLCA3MSwgMiwgOTksIDE5NywgNjYsIDE3LCAKKyAgICAxMiwgMSwgMjQ1LCAyNDEsIDcwLCA0NywgMTcsIDEyLCAxLCAyNDUsIDI0MSwgNzAsIDM5LCAxNywgMTIsIDEsIDI0NSwgCisgICAgMjQxLCA3MCwgNjYsIDE3LCAxMiwgMSwgMjQ1LCAyNDEsIDcwLCAxMjgsIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCAKKyAgICAxMzQsIDQ3LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMTExLCA0NywgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgCisgICAgNzEsIDIsIDYyLCA0NywgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAKKyAgICA3MCwgMiwgMTgxLCA3MSwgMiwgNzAsIDQ3LCAxNywgMTIsIDI0LCAyNTIsIDEyOSwgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgCisgICAgMjUyLCAxMjksIDIsIDExMSwgNDcsIDE3LCAxMiwgMjQsIDI1MiwgMTI5LCAyLCAyMzYsIDE0NywgNDcsIDE3LCAxMiwgMjQsIAorICAgIDI1MiwgMTI5LCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDI1MiwgMTI5LCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgCisgICAgMjUyLCAxMjksIDIsIDcwLCA0NywgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgMjIyLCAKKyAgICA3OCwgMiwgMTExLCA0NywgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgMjM2LCAxNDcsIDQ3LCAxNywgMTIsIDI0LCAyMjIsIAorICAgIDc4LCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAKKyAgICAyLCA3MCwgNDcsIDE3LCAxMiwgMjQsIDIyMiwgMjAsIDIsIDEzNCwgNDcsIDE3LCAxMiwgMjQsIDIyMiwgMjAsIDIsIDYyLCAKKyAgICA0NywgMTcsIDEyLCAyNCwgMjIyLCAyMCwgMiwgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDIyMiwgMjAsIDIsIDcwLCA0NywgCisgICAgMTcsIDEyLCAyNCwgMTM0LCAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCAxMzQsIDIsIDYyLCA0NywgMTcsIDEyLCAyNCwgMTExLCAKKyAgICAyLCAxMzQsIDQ3LCAxNywgMTIsIDI0LCAxMTEsIDIsIDYyLCA0NywgMTcsIDEyLCAyNCwgMjM2LCAxNDcsIDIsIDEzNCwgNDcsIAorICAgIDE3LCAxMiwgMjQsIDIzNiwgMTQ3LCAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCAyMzYsIDE0NywgMiwgNjIsIDQ3LCAxNywgCisgICAgMTIsIDI0LCAyMjYsIDgzLCAyLCAxMzQsIDQ3LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCAKKyAgICAyMjYsIDgzLCAyLCAyMzYsIDE0NywgNDcsIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDYyLCA0NywgMTcsIDEyLCAyNCwgCisgICAgMjI2LCAxNzEsIDIsIDExMSwgNDcsIDE3LCAxMiwgMjQsIDIyNiwgMTcxLCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDI0OSwgCisgICAgMjAzLCAyLCAxMzQsIDQ3LCAxNywgMTIsIDI0LCAyNDksIDIwMywgMiwgMTExLCA0NywgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIAorICAgIDIsIDIzNiwgMTQ3LCA0NywgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIDIsIDYyLCA0NywgMTcsIDEyLCAyNCwgMjIyLCAxMzgsIAorICAgIDIsIDExMSwgNDcsIDE3LCAxMiwgMjQsIDIyMiwgMTM4LCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDIxNywgMTEwLCAyLCA2MiwgCisgICAgNDcsIDE3LCAxMiwgMjQsIDI1NCwgMTkyLCAyLCAxMzQsIDQ3LCAxNywgMTIsIDI0LCAyNTQsIDE5MiwgMiwgNjIsIDQ3LCAKKyAgICAxNywgMTIsIDI0LCAyNDQsIDEyMywgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgMjQ0LCAxMjMsIDIsIDYyLCA0NywgMTcsIAorICAgIDEyLCAyNCwgMjQ1LCAyMjIsIDIsIDEzNCwgNDcsIDE3LCAxMiwgMjQsIDI0NSwgMjIyLCAyLCAxMTEsIDQ3LCAxNywgMTIsIAorICAgIDI0LCAyNDUsIDIyMiwgMiwgMjM2LCAxNDcsIDQ3LCAxNywgMTIsIDI0LCAyNDUsIDIyMiwgMiwgNjIsIDQ3LCAxNywgMTIsIAorICAgIDI0LCAyNDUsIDIyMiwgMiwgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDI0NSwgMjIyLCAyLCA3MCwgNDcsIDE3LCAxMiwgCisgICAgMjQsIDIyOCwgMTQ5LCAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCAyMjgsIDE0OSwgMiwgNjIsIDQ3LCAxNywgMTIsIDI0LCAKKyAgICAyMjgsIDE0OSwgMiwgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDIyOCwgMTQ5LCAyLCA3MCwgNDcsIDE3LCAxMiwgMjQsIAorICAgIDIzNiwgMjQ3LCAyLCA5OSwgNDcsIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCAxMzQsIDQ3LCAxNywgMTIsIDI0LCAyMzYsIAorICAgIDI0NywgMiwgMTExLCA0NywgMTcsIDEyLCAyNCwgMjM2LCAyNDcsIDIsIDIzNiwgMTQ3LCA0NywgMTcsIDEyLCAyNCwgMjM2LCAKKyAgICAyNDcsIDIsIDIzNSwgMTYxLCA0NywgMTcsIDEyLCAyNCwgMjM2LCAyNDcsIDIsIDYyLCA0NywgMTcsIDEyLCAyNCwgMjM2LCAKKyAgICAyNDcsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyMzYsIDI0NywgMiwgNzAsIDQ3LCAxNywgMTIsIDI0LCAyMzUsIAorICAgIDE2MSwgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDExMSwgNDcsIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAKKyAgICAyLCAyMzYsIDE0NywgNDcsIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAKKyAgICAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDcwLCA0NywgMTcsIDEyLCAyNCwgNjIsIDIsIDEzNCwgCisgICAgNDcsIDE3LCAxMiwgMjQsIDYyLCAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCA2MiwgMiwgMjM2LCAxNDcsIDQ3LCAxNywgMTIsIAorICAgIDI0LCA2MiwgMiwgNjIsIDQ3LCAxNywgMTIsIDI0LCA2MiwgMiwgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDYyLCAyLCA3MCwgCisgICAgNDcsIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCAxMzQsIDQ3LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgMTExLCA0NywgCisgICAgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDIzNiwgMTQ3LCA0NywgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDYyLCA0NywgCisgICAgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgNzAsIDQ3LCAKKyAgICAxNywgMTIsIDI0LCAyNDMsIDE0NywgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgMjQzLCAxNDcsIDIsIDYyLCA0NywgMTcsIAorICAgIDEyLCAyNCwgMjQzLCAxNDcsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyNDMsIDE0NywgMiwgNzAsIDQ3LCAxNywgCisgICAgMTIsIDI0LCA3MCwgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgNzAsIDIsIDExMSwgNDcsIDE3LCAxMiwgMjQsIDcwLCAyLCAKKyAgICAyMzYsIDE0NywgNDcsIDE3LCAxMiwgMjQsIDcwLCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDcwLCAyLCA5OSwgMTk3LCA0NywgCisgICAgMTcsIDEyLCAyNCwgNzAsIDIsIDcwLCA0NywgMTcsIDEyLCAyNCwgMjIyLCAzMCwgMiwgMjIzLCA1OSwgOTksIDQ3LCAxNywgCisgICAgMTIsIDI0LCAyMjcsIDE5NywgMiwgMjIzLCA1OSwgOTksIDQ3LCAxNywgMTIsIDI0LCA5OSwgMTk3LCAyLCAyMjMsIDU5LCAKKyAgICA5OSwgNDcsIDE3LCAxMiwgMjQsIDIyNSwgMTcsIDIsIDI0OSwgMTcxLCA0NywgMTcsIDEyLCAyNCwgMjI1LCAxNywgMiwgCisgICAgMjM2LCAyMDUsIDQ3LCAxNywgMTIsIDI0LCAyMjUsIDE3LCAyLCAyNDUsIDIzOSwgNDcsIDE3LCAxMiwgMjQsIDIyNSwgMTcsIAorICAgIDIsIDI0OSwgMTczLCA0NywgMTcsIDEyLCAyNCwgMjI1LCAxNywgMiwgMjM2LCAyMDcsIDQ3LCAxNywgMTIsIDI0LCAyMjUsIAorICAgIDE3LCAyLCAyMjMsIDU5LCA5OSwgNDcsIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCAyMjcsIDE5NywgMzksIDE3LCAKKyAgICAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCAyMTcsIDEwNywgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCAKKyAgICA2MiwgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCAyMzEsIDE5NCwgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAKKyAgICAxODEsIDcxLCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIDcwLCAzOSwgMTcsIDEyLCAKKyAgICAyNCwgMjUyLCAxMjksIDIsIDIyNywgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjUyLCAxMjksIDIsIDIxNywgMTA3LCAzOSwgMTcsIAorICAgIDEyLCAyNCwgMjUyLCAxMjksIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjUyLCAxMjksIDIsIDIzMSwgMTk0LCAzOSwgMTcsIAorICAgIDEyLCAyNCwgMjUyLCAxMjksIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyNTIsIDEyOSwgMiwgNzAsIDM5LCAxNywgCisgICAgMTIsIDI0LCAyMjIsIDc4LCAyLCAyMjcsIDE5NywgMzksIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDIxNywgMTA3LCAzOSwgCisgICAgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCAyMzEsIDE5NCwgMzksIDE3LCAKKyAgICAxMiwgMjQsIDIyMiwgNzgsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCA3MCwgMzksIDE3LCAxMiwgCisgICAgMjQsIDIyMiwgMjAsIDIsIDIyNywgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjIyLCAyMCwgMiwgMjE3LCAxMDcsIDM5LCAxNywgCisgICAgMTIsIDI0LCAyMjIsIDIwLCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDIyMiwgMjAsIDIsIDIzMSwgMTk0LCAzOSwgMTcsIDEyLCAKKyAgICAyNCwgMjIyLCAyMCwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDIyMiwgMjAsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgCisgICAgMjQ1LCAyMjIsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyNDUsIDIyMiwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAKKyAgICAyMjgsIDE0OSwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDIyOCwgMTQ5LCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIAorICAgIDIzNiwgMjQ3LCAyLCA5OSwgMzksIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCAyMzUsIDE2MSwgMzksIDE3LCAxMiwgMjQsIAorICAgIDIzNiwgMjQ3LCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgCisgICAgMjM2LCAyNDcsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAKKyAgICAxNjEsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCA2MiwgMiwgCisgICAgOTksIDM5LCAxNywgMTIsIDI0LCA2MiwgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgMjI3LCAxOTcsIDM5LCAKKyAgICAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgMjE3LCAxMDcsIDM5LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgNjIsIDM5LCAKKyAgICAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgMjMxLCAxOTQsIDM5LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgOTksIDE5NywgCisgICAgMzksIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDk5LCAxOTcsIDIsIDIyMywgNTksIDk5LCAKKyAgICAzOSwgMTcsIDEyLCAyNCwgNzAsIDIsIDIyNywgMTk3LCAzOSwgMTcsIDEyLCAyNCwgNzAsIDIsIDIxNywgMTA3LCAzOSwgMTcsIAorICAgIDEyLCAyNCwgNzAsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgNzAsIDIsIDIzMSwgMTk0LCAzOSwgMTcsIDEyLCAyNCwgNzAsIAorICAgIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgCisgICAgMTM0LCA2NiwgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIAorICAgIDcxLCAyLCAyMzYsIDE0NywgNjYsIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIAorICAgIDcwLCAyLCAxODEsIDcxLCAyLCAyNDMsIDE0NywgNjYsIDE3LCAxMiwgMjQsIDI1MiwgMTI5LCAyLCAxMzQsIDY2LCAxNywgCisgICAgMTIsIDI0LCAyNTIsIDEyOSwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgMjUyLCAxMjksIDIsIDIzNiwgMTQ3LCA2NiwgMTcsIAorICAgIDEyLCAyNCwgMjUyLCAxMjksIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjUyLCAxMjksIDIsIDI0MywgMTQ3LCA2NiwgMTcsIAorICAgIDEyLCAyNCwgMjIyLCA3OCwgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgCisgICAgMjIyLCA3OCwgMiwgMjM2LCAxNDcsIDY2LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIAorICAgIDIyMiwgNzgsIDIsIDI0MywgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgMjIyLCAyMCwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAKKyAgICAxMzQsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDEzNCwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAxMTEsIDIsIDEzNCwgNjYsIAorICAgIDE3LCAxMiwgMjQsIDExMSwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMzYsIDE0NywgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgCisgICAgMjM2LCAxNDcsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjI2LCA4MywgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgMjI2LCAKKyAgICA4MywgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgMjI2LCA4MywgMiwgMjM2LCAxNDcsIDY2LCAxNywgMTIsIDI0LCAyMjYsIAorICAgIDgzLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIyNiwgMTcxLCAyLCAxMTEsIDY2LCAxNywgMTIsIDI0LCAyMjYsIDE3MSwgMiwgCisgICAgMjM2LCAxNDcsIDY2LCAxNywgMTIsIDI0LCAyMjYsIDE3MSwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyNDksIDIwMywgMiwgCisgICAgMTM0LCA2NiwgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDI0OSwgMjAzLCAyLCAyMzYsIAorICAgIDE0NywgNjYsIDE3LCAxMiwgMjQsIDI0OSwgMjAzLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIyMiwgMTM4LCAyLCAxMTEsIAorICAgIDY2LCAxNywgMTIsIDI0LCAyMTcsIDExMCwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyNTQsIDE5MiwgMiwgMTM0LCA2NiwgCisgICAgMTcsIDEyLCAyNCwgMjU0LCAxOTIsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjQ0LCAxMjMsIDIsIDEzNCwgNjYsIDE3LCAKKyAgICAxMiwgMjQsIDI0NCwgMTIzLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDI0NSwgMjIyLCAyLCAxMzQsIDY2LCAxNywgMTIsIAorICAgIDI0LCAyNDUsIDIyMiwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgMjQ1LCAyMjIsIDIsIDIzNiwgMTQ3LCA2NiwgMTcsIDEyLCAKKyAgICAyNCwgMjQ1LCAyMjIsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjI4LCAxNDksIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIAorICAgIDIyOCwgMTQ5LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCAxMzQsIDY2LCAxNywgMTIsIDI0LCAyMzYsIAorICAgIDI0NywgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgMjM2LCAyNDcsIDIsIDIzNiwgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgMjM2LCAKKyAgICAyNDcsIDIsIDIzNSwgMTYxLCA2NiwgMTcsIDEyLCAyNCwgMjM2LCAyNDcsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjM1LCAKKyAgICAxNjEsIDIsIDEzNCwgNjYsIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCAxMTEsIDY2LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgCisgICAgMiwgMjM2LCAxNDcsIDY2LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgCisgICAgMiwgMjQzLCAxNDcsIDY2LCAxNywgMTIsIDI0LCA2MiwgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgNjIsIDIsIDExMSwgNjYsIAorICAgIDE3LCAxMiwgMjQsIDYyLCAyLCAyMzYsIDE0NywgNjYsIDE3LCAxMiwgMjQsIDYyLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIAorICAgIDIzMSwgMTk0LCAyLCAxMzQsIDY2LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgMjMxLCAKKyAgICAxOTQsIDIsIDIzNiwgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjMxLCAKKyAgICAxOTQsIDIsIDI0MywgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgMjQzLCAxNDcsIDIsIDEzNCwgNjYsIDE3LCAxMiwgMjQsIDI0MywgCisgICAgMTQ3LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDI0MywgMTQ3LCAyLCAyMjMsIDU5LCA5OSwgNjYsIDE3LCAxMiwgMjQsIDcwLCAKKyAgICAyLCAxMzQsIDY2LCAxNywgMTIsIDI0LCA3MCwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgNzAsIDIsIDIzNiwgMTQ3LCA2NiwgCisgICAgMTcsIDEyLCAyNCwgNzAsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgNzAsIDIsIDI0MywgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgCisgICAgNzAsIDIsIDE4MSwgNzEsIDIsIDYyLCAxMjgsIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCAyNDMsIDE0NywgMTI4LCAKKyAgICAxNywgMTIsIDI0LCAyNTIsIDEyOSwgMiwgNjIsIDEyOCwgMTcsIDEyLCAyNCwgMjUyLCAxMjksIDIsIDI0MywgMTQ3LCAxMjgsIAorICAgIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDYyLCAxMjgsIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDI0MywgMTQ3LCAxMjgsIAorICAgIDE3LCAxMiwgMjQsIDIyMiwgMjAsIDIsIDYyLCAxMjgsIDE3LCAxMiwgMjQsIDIyMiwgMjAsIDIsIDI0MywgMTQ3LCAxMjgsIAorICAgIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDYyLCAxMjgsIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDI0MywgMTQ3LCAxMjgsIAorICAgIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCA2MiwgMTI4LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgMjQzLCAxNDcsIDEyOCwgCisgICAgMTcsIDEyLCAyNCwgMjM2LCAyNDcsIDIsIDIzNSwgMTYxLCAxMjgsIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCA2MiwgMTI4LCAKKyAgICAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgNjIsIDEyOCwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDYyLCAxMjgsIDE3LCAKKyAgICAxMiwgMjQsIDIzMSwgMTk0LCAyLCAyNDMsIDE0NywgMTI4LCAxNywgMTIsIDI0LCA3MCwgMiwgNjIsIDEyOCwgMTcsIDEyLCAKKyAgICAyNCwgNzAsIDIsIDI0MywgMTQ3LCAxMjgsIDE3LCAxMiwgMjQsIDIyNSwgMTcsIDIsIDI0NSwgMjM5LCAxMjgsIDE3LCAxMiwgCisgICAgMjQsIDIyNSwgMTcsIDIsIDI0OSwgMTczLCAxMjgsIDE3LCAxMiwgMjQsIDIyNSwgMTcsIDIsIDIzNiwgMjA3LCAxMjgsIDE3LCAKKyAgICAxMiwgMjQsIDIyMiwgMTM4LCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjIyLCAxMzgsIDIsIDcwLCA0NywgMTcsIAorICAgIDEyLCAyNCwgMjU0LCAxOTIsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyNTQsIDE5MiwgMiwgNzAsIDQ3LCAxNywgCisgICAgMTIsIDI0LCAyNDQsIDEyMywgMiwgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDI0NCwgMTIzLCAyLCA3MCwgNDcsIDE3LCAKKyAgICAxMiwgMjQsIDIyNiwgODMsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCA3MCwgNDcsIDE3LCAxMiwgCisgICAgMjQsIDIyNCwgMjQzLCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDcwLCA0NywgMTcsIDEyLCAKKyAgICAyNCwgMTExLCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgMTExLCAyLCA3MCwgNDcsIDE3LCAxMiwgMjQsIDEzNCwgMiwgCisgICAgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDEzNCwgMiwgNzAsIDQ3LCAxNywgMTIsIDI0LCAyMzYsIDE0NywgMiwgOTksIAorICAgIDE5NywgNDcsIDE3LCAxMiwgMjQsIDIzNiwgMTQ3LCAyLCA3MCwgNDcsIDE3LCAxMiwgMjQsIDIyNiwgMTcxLCAyLCA5OSwgCisgICAgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjI2LCAxNzEsIDIsIDcwLCA0NywgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIDIsIDk5LCAKKyAgICAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyNDksIDIwMywgMiwgNzAsIDQ3LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgMTM0LCAKKyAgICA0NywgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDExMSwgNDcsIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCAyMzYsIDE0NywgCisgICAgNDcsIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCAyMjcsIDE5NywgCisgICAgNDcsIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDIyNywgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjI2LCAxNzEsIDIsIDIyNywgCisgICAgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIDIsIDIyNywgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjIyLCAxMzgsIDIsIAorICAgIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjIsIDEzOCwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyNTQsIDE5MiwgMiwgCisgICAgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDI1NCwgMTkyLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDI0NCwgMTIzLCAyLCAKKyAgICA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjQ0LCAxMjMsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjI2LCA4MywgMiwgOTksIAorICAgIDE5NywgMzksIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDk5LCAKKyAgICAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAxMTEsIDIsIDk5LCAxOTcsIAorICAgIDM5LCAxNywgMTIsIDI0LCAxMTEsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMTM0LCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAKKyAgICAyNCwgMTM0LCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIzNiwgMTQ3LCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgCisgICAgMjM2LCAxNDcsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjI2LCAxNzEsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAKKyAgICAyMjYsIDE3MSwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyNDksIDIwMywgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIAorICAgIDI0OSwgMjAzLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCAxMzQsIDM5LCAxNywgMTIsIDI0LCAyMjQsIAorICAgIDI0MywgMiwgMTExLCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDIzNiwgMTQ3LCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAKKyAgICAyNDMsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDIyNywgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjI2LCAKKyAgICA4MywgMiwgMjI3LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjYsIDE3MSwgMiwgMjI3LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAKKyAgICAyNDksIDIwMywgMiwgMjI3LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgCisgICAgMjI0LCAyNDMsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCAyMzYsIDE0NywgNjYsIDE3LCAxMiwgMjQsIAorICAgIDIyNCwgMjQzLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDI0MywgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgCisgICAgMjI0LCAyNDMsIDIsIDI0MywgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgMjIyLCAxMzgsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgCisgICAgMjI2LCA4MywgMiwgMTM0LCAxMjgsIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDExMSwgMTI4LCAxNywgMTIsIDI0LCAyMjYsIAorICAgIDgzLCAyLCAyMzYsIDE0NywgMTI4LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgMTM0LCAxMjgsIDE3LCAxMiwgMjQsIDIyNCwgCisgICAgMjQzLCAyLCAxMTEsIDEyOCwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDIzNiwgMTQ3LCAxMjgsIDE3LCAxMiwgMjQsIAorICAgIDIyMiwgMTM4LCAyLCA2MiwgMTI4LCAxNywgMTIsIDI0LCAyMTcsIDExMCwgMiwgNjIsIDEyOCwgMTcsIDEyLCAyNCwgOTksIAorICAgIDIsIDI0NSwgMjM3LCAzOSwgMTcsIDEyLCAyNCwgOTksIDIsIDI0NSwgMjM3LCA0NywgMTcsIDIzMCwgOTcsIDQyLCAyMjksIAorICAgIDIyOSwgMjMwLCA5NywgNDUsIDIyOSwgMjI5LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDEzNCwgMiwgNjIsIDY2LCAxNywgMTIsIAorICAgIDI0LCAyMjIsIDc4LCAyLCAxMTEsIDIsIDEzNCwgMzksIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDExMSwgMiwgMTM0LCA2NiwgCisgICAgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgMTExLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDIzNiwgMTQ3LCAKKyAgICAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDYyLCAyLCAxMzQsIDY2LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAKKyAgICAyLCA2MiwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgNjIsIDIsIDIzNiwgMTQ3LCA2NiwgMTcsIDEyLCAKKyAgICAyNCwgMTM0LCAyLCA2MiwgMiwgMTExLCAzOSwgMTcsIDEyLCAyNCwgMTM0LCAyLCA2MiwgMiwgMTExLCA2NiwgMTcsIDEyLCAKKyAgICAyNCwgMTExLCAyLCA2MiwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAxMTEsIDIsIDYyLCAyLCA5OSwgMTk3LCAzOSwgMTcsIAorICAgIDEyLCAyNCwgMjI2LCA4MywgMiwgMTExLCAyLCAxMzQsIDY2LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCAxMzQsIDIsIDExMSwgCisgICAgNjYsIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDEzNCwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIAorICAgIDYyLCAyLCAxMTEsIDM5LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCA2MiwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgMjI2LCAKKyAgICA4MywgMiwgNjIsIDIsIDEzNCwgNjYsIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDYyLCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIAorICAgIDIyNiwgODMsIDIsIDYyLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIyNiwgMTcxLCAyLCAxMTEsIDIsIDExMSwgMzksIDE3LCAKKyAgICAxMiwgMjQsIDIyNiwgMTcxLCAyLCAxMTEsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDIyNiwgMTcxLCAyLCA2MiwgMiwgNjIsIAorICAgIDM5LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgMTExLCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCAKKyAgICAxMTEsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDEzNCwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyMjQsIAorICAgIDI0MywgMiwgNjIsIDIsIDIzNiwgMTQ3LCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDYyLCAyLCAyMzYsIDE0NywgCisgICAgNjYsIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCA2MiwgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgNjIsIAorICAgIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIDIsIDExMSwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDI0OSwgCisgICAgMjAzLCAyLCAyMzYsIDE0NywgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyNDksIDIwMywgMiwgMjM2LCAxNDcsIDIsIDYyLCAKKyAgICA2NiwgMTcsIDEyLCAyNCwgMjIyLCAxMzgsIDIsIDYyLCAyLCAxMTEsIDM5LCAxNywgMTIsIDI0LCAyMjIsIDEzOCwgMiwgNjIsIAorICAgIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDIyMiwgMTM4LCAyLCA2MiwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMjIsIDEzOCwgCisgICAgMiwgNjIsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjU0LCAxOTIsIDIsIDEzNCwgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAKKyAgICAyNTQsIDE5MiwgMiwgNjIsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjU0LCAxOTIsIDIsIDYyLCAyLCA2MiwgNjYsIDE3LCAKKyAgICAxMiwgMjQsIDI1NCwgMTkyLCAyLCA2MiwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDI0NCwgMTIzLCAyLCA2MiwgMiwgCisgICAgNjIsIDM5LCAxNywgMTIsIDI0LCAyNDQsIDEyMywgMiwgNjIsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjQ0LCAxMjMsIDIsIAorICAgIDYyLCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjQ1LCAyMjIsIDIsIDIzNiwgMTQ3LCAyLCA2MiwgMzksIDE3LCAxMiwgCisgICAgMjQsIDI0NSwgMjIyLCAyLCAyMzYsIDE0NywgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMjgsIDE0OSwgMiwgNjIsIDIsIAorICAgIDExMSwgMzksIDE3LCAxMiwgMjQsIDIyOCwgMTQ5LCAyLCA2MiwgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgCisgICAgMTExLCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCAxMTEsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAKKyAgICAxNjEsIDIsIDExMSwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCAxMzQsIDIsIDEzNCwgNjYsIAorICAgIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCAxMzQsIDIsIDEzNCwgMzksIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCAyMzYsIAorICAgIDE0NywgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgMjM2LCAxNDcsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgCisgICAgMjM1LCAxNjEsIDIsIDYyLCAyLCAxMTEsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgNjIsIDIsIDExMSwgNjYsIDE3LCAKKyAgICAxMiwgMjQsIDYyLCAyLCAxMTEsIDIsIDEzNCwgNjYsIDE3LCAxMiwgMjQsIDYyLCAyLCAxMTEsIDIsIDYyLCA2NiwgMTcsIAorICAgIDEyLCAyNCwgNjIsIDIsIDExMSwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCA2MiwgMiwgMTM0LCAyLCAxMTEsIDY2LCAxNywgCisgICAgMTIsIDI0LCA2MiwgMiwgMTM0LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDYyLCAyLCAyMzYsIDE0NywgMiwgMTM0LCA2NiwgCisgICAgMTcsIDEyLCAyNCwgNjIsIDIsIDIzNiwgMTQ3LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDYyLCAyLCAxMzQsIDIsIDIzNiwgCisgICAgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgMjQzLCAxNDcsIDIsIDYyLCAyLCAxMzQsIDY2LCAxNywgMTIsIDI0LCAyNDMsIDE0NywgCisgICAgMiwgNjIsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDExMSwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAKKyAgICAyMzEsIDE5NCwgMiwgMTExLCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDEzNCwgMiwgNjIsIAorICAgIDM5LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgMTM0LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCAKKyAgICAxMzQsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgNjIsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgCisgICAgMjMxLCAxOTQsIDIsIDYyLCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgNzAsIDIsIDYyLCAyLCA2MiwgMzksIDE3LCAKKyAgICAxMiwgMjQsIDcwLCAyLCA2MiwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyNTIsIDEyOSwgMiwgMjM2LCAxNDcsIDIsIDcwLCAKKyAgICAzOSwgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgMTM0LCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDEzNCwgCisgICAgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDIzNiwgMTQ3LCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIAorICAgIDIyMiwgNzgsIDIsIDIzNiwgMTQ3LCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgNjIsIDIsIDcwLCAKKyAgICAzOSwgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgNjIsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAxMzQsIDIsIDYyLCAKKyAgICAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDEzNCwgMiwgMTExLCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMTM0LCAyLCAKKyAgICA2MiwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDIzNiwgMTQ3LCAyLCA5OSwgMTk3LCAzOSwgMTcsIAorICAgIDEyLCAyNCwgMjI2LCAxNzEsIDIsIDExMSwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgMTExLCAyLCA3MCwgCisgICAgMzksIDE3LCAxMiwgMjQsIDI0OSwgMjAzLCAyLCAxMTEsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIAorICAgIDEzNCwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgNjIsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgNzAsIAorICAgIDIsIDExMSwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgMTM0LCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAKKyAgICA2MiwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCA2MiwgMiwgNjIsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjI4LCAxNDksIDIsIAorICAgIDYyLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCAxMTEsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjI4LCAKKyAgICAxNDksIDIsIDYyLCAyLCAxMTEsIDY2LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgMTExLCAyLCA2MiwgNjYsIDE3LCAxMiwgCisgICAgMjQsIDI1NCwgMTkyLCAyLCA2MiwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyMzYsIDI0NywgMiwgNjIsIDIsIDcwLCAzOSwgCisgICAgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDEzNCwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgNjIsIDIsIDIzNiwgMTQ3LCAyLCAKKyAgICA3MCwgMzksIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCAxMzQsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjM2LCAyNDcsIDIsIAorICAgIDYyLCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCAxMzQsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjMxLCAKKyAgICAxOTQsIDIsIDEzNCwgMiwgMTExLCAzOSwgMTcsIDEyLCAyNCwgMTM0LCAyLCAxMTEsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgCisgICAgMTExLCAyLCAxMzQsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgNjIsIDIsIDEzNCwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAKKyAgICAyNDUsIDIyMiwgMiwgNjIsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjUyLCAxMjksIDIsIDExMSwgMiwgNzAsIDM5LCAxNywgCisgICAgMTIsIDI0LCAyMzYsIDI0NywgMiwgNjIsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjU0LCAxOTIsIDIsIDEzNCwgMiwgNjIsIAorICAgIDY2LCAxNywgMTIsIDI0LCAyMjYsIDE3MSwgMiwgNjIsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjI2LCA4MywgMiwgMjM2LCAKKyAgICAxNDcsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDEzNCwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyMjYsIAorICAgIDE1MywgMjIwLCAzMiwgMjU0LCAxNCwgMjM2LCAzNSwgMjIzLCAxMzcsIDUsIDQ3LCAxNywgMTIsIDI0LCAyMjgsIDE0NSwgCisgICAgMjIwLCAzMiwgMjU0LCAxNCwgMjM2LCAzNSwgMjIzLCAxMzcsIDUsIDQ3LCAxNywgMTIsIDI0LCAyNTQsIDE1NiwgNDcsIDE3LCAKKyAgICAxMiwgMjQsIDI1NCwgMTc5LCA0NywgMTcsIDEyLCAyNCwgMjMzLCAxMzAsIDQ3LCAxNywgMTIsIDI0LCAyMjYsIDE1NCwgNDcsIAorICAgIDE3LCAxMiwgMjQsIDIyNywgMjMwLCA0NywgMTcsIDEyLCAyNCwgMjU0LCAxNzAsIDQ3LCAxNywgMTIsIDI0LCAyMTgsIDI0OSwgCisgICAgNDcsIDE3LCAxMiwgMjQsIDIyNiwgMTUzLCA0NywgMTcsIDEyLCAyNCwgMjI2LCAxNTIsIDI1NCwgMTcwLCAyMTgsIDI0OCwgCisgICAgMTIsIDI0LCAyMzcsIDEyMCwgMjI3LCAxNDYsIDU1LCAxMiwgMjQsIDI1MiwgNjEsIDI1NCwgNjUsIDI1NCwgNjYsIDQxLCAKKyAgICAyMjYsIDczLCA0MSwgMjI1LCAyMTgsIDQxLCAyMjUsIDE1MCwgNDEsIDIyNSwgMTM5LCA0MSwgMjI1LCAxMjgsIDQxLCAyMjUsIAorICAgIDExNywgNDEsIDIyNSwgMTA2LCA0MSwgMjI1LCA5NSwgNDEsIDIyNSwgODQsIDQxLCAyMjYsIDcyLCA0MSwgMjI2LCA2MSwgCisgICAgNDEsIDIyNiwgNTAsIDQxLCAyMjYsIDM5LCA0MSwgMjI2LCAyOCwgNDEsIDIyNiwgMTcsIDQxLCAyMjYsIDYsIDIyOCwgMjM4LCAKKyAgICAyNDUsIDEyNCwgMzUsIDY5LCAyNTAsIDE2OCwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDk4LCAyNTAsIDE2OCwgCisgICAgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDk4LCAyNDUsIDkwLCAyMjMsIDEzNiwgMjI4LCAyMzgsIDI0NSwgMTI0LCAKKyAgICAzNSwgNjksIDI1MCwgMTc1LCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgMjI1LCA2NywgMjI4LCAyMzgsIDI0NSwgCisgICAgMTI0LCAzNSwgNjksIDI0NiwgOTUsIDc4LCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgMjI4LCA4MiwgNzgsIDIyOCwgCisgICAgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCA0MiwgNjcsIDIzNSwgOTEsIDExNSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIAorICAgIDQ1LCA2NywgMjM1LCA5MSwgMjUyLCAxNiwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDE4NiwgMjQ2LCAyMDgsIDM2LCAKKyAgICAyNCwgNDIsIDI0MywgMTk0LCAzNiwgMjQsIDQ1LCAyNDMsIDE5NCwgMzYsIDUxLCAyMjEsIDE4MCwgNDIsIDI0MywgMTk0LCAKKyAgICAzNiwgNTEsIDIyMSwgMTgwLCA0NSwgMjQzLCAxOTQsIDM2LCAyMzQsIDExNiwgNDIsIDI0MywgMTk0LCAzNiwgMjM0LCAxMTYsIAorICAgIDQ1LCAyNDMsIDE5NCwgMzYsIDI1MCwgMTUxLCAyMzQsIDExNSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDEyNCwgCisgICAgNjEsIDIzNSwgMTIxLCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgMjQ2LCAyMDYsIDI0OSwgMTQ2LCAyMjgsIDIzOCwgCisgICAgMjQ1LCAxMjQsIDM1LCA2OSwgMjQ2LCAxOTgsIDI0OSwgMTQ2LCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgMTA5LCAKKyAgICAyMzUsIDQzLCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgMjE4LCAyMzUsIDEwOSwgMjM1LCA0MywgMjI4LCAyMzgsIAorICAgIDI0NSwgMTI0LCAzNSwgNjksIDQyLCAyMjksIDIyOSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQ1LCAyMjksIDIyOSwgCisgICAgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQyLCAyNTAsIDc5LCAxMTUsIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCAKKyAgICA0NSwgMjUwLCA3OSwgMTE1LCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgNDIsIDIyMSwgMTE0LCAyMjQsIDIzNiwgCisgICAgMTE1LCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgNDUsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMTE1LCAyMjgsIDIzOCwgCisgICAgMjQ1LCAxMjQsIDM1LCA2OSwgNDIsIDg0LCAyMzUsIDkxLCAxMTUsIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCA0NSwgCisgICAgODQsIDIzNSwgOTEsIDExNSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQyLCA1MSwgMjU0LCAxMjAsIDExNSwgMjI4LCAKKyAgICAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQ1LCA1MSwgMjU0LCAxMjAsIDExNSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIAorICAgIDQyLCAyNTQsIDEyMCwgMTE1LCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgNDUsIDI1NCwgMTIwLCAxMTUsIDIyOCwgCisgICAgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCA0MiwgMjUwLCAxMjQsIDExNSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQ1LCAKKyAgICAyNTAsIDEyNCwgMTE1LCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgNDIsIDY3LCAyNTAsIDEyNCwgMTE1LCAyMjgsIAorICAgIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgNDUsIDY3LCAyNTAsIDEyNCwgMTE1LCAyMjUsIDQ5LCAyNDgsIDE0NSwgNjcsIDIyNSwgCisgICAgNDksIDI0OCwgMTQ1LCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgNDIsIDQwLCAxMTUsIDIyOCwgMjM4LCAyNDUsIAorICAgIDEyNCwgMzUsIDY5LCA0NSwgNDAsIDExNSwgMjQ5LCAxNDUsIDIzMCwgNzMsIDI1MSwgODIsIDIzMCwgNzMsIDIxOCwgMjM1LCAKKyAgICAyMzAsIDczLCA1MSwgMjE4LCAyMzUsIDIzMCwgNzMsIDI0OSwgMTQ1LCAxMDksIDIzNSwgNDMsIDI1MSwgODIsIDEwOSwgCisgICAgMjM1LCA0MywgMjE4LCAyMzUsIDEwOSwgMjM1LCA0MywgMywgMjUwLCAxNjgsIDMsIDk4LCAyNTAsIDE2OCwgMywgMjQ1LCAKKyAgICA5MCwgMjIzLCAxMzYsIDMsIDIyNSwgNjcsIDMsIDI1MCwgMTc1LCAzLCAyMjgsIDgyLCA3OCwgMywgMjQ2LCA5NSwgNzgsIDMsIAorICAgIDI0NiwgMjA2LCAyNDksIDE0NiwgMywgNDIsIDIyOSwgMjI5LCAzLCA0NSwgMjI5LCAyMjksIDMsIDQyLCAyNTAsIDc5LCAKKyAgICAxMTUsIDMsIDQ1LCAyNTAsIDc5LCAxMTUsIDMsIDQyLCAyMjEsIDExNCwgMjI0LCAyMzYsIDExNSwgMywgNDUsIDIyMSwgCisgICAgMTE0LCAyMjQsIDIzNiwgMTE1LCAzLCA1NCwgNTUsIDMsIDI1NCwgMTM0LCAzLCAyNTMsIDI1MSwgMywgODgsIDU1LCAzLCAKKyAgICAyNDIsIDEyMCwgMywgMjM1LCA4NywgNTUsIDMsIDI0NCwgMzAsIDU1LCAzLCAyNDYsIDE1NCwgNTUsIDMsIDIyNywgMTYwLCAKKyAgICAyMjQsIDE3LCAzLCAyNDgsIDE1NSwgNTUsIDMsIDIyOSwgMTY5LCA1NSwgMywgMjUwLCAxNjcsIDI1MywgMjQ0LCAxMiwgCisgICAgMjQ1LCAyMzcsIDQ3LCAxNywgMTIsIDIyMiwgMTA4LCAyLCAyNDUsIDIzNywgNTAsIDEyLCAyNDksIDE3MSwgNDcsIDE3LCAKKyAgICAxMiwgMjIyLCAxMzYsIDI0NSwgMTA3LCAxMiwgMjM2LCAyMDUsIDQ3LCAxNywgMTIsIDI0NSwgMjM5LCA0NywgMTcsIDEyLCAKKyAgICAyNDUsIDIzOSwgMTI4LCAxNywgMTIsIDI0OSwgMTczLCA0NywgMTcsIDEyLCAyNDksIDE3MywgMTI4LCAxNywgMTIsIDIzNiwgCisgICAgMjA3LCA0NywgMTcsIDEyLCAyMzYsIDIwNywgMTI4LCAxNywgMTIsIDIyNSwgMTcsIDQ3LCAxNywgMTIsIDIyNSwgMTcsIAorICAgIDEyOCwgMTcsIDEyLCAyMjMsIDc2LCA0NywgMTcsIDEyLCAyMjMsIDc2LCAxMjgsIDE3LCAxMiwgMSwgMTgxLCA0NywgMTcsIAorICAgIDEyLCAxLCA5OSwgMiwgMjM0LCAxMTEsIDcxLCA0NywgMTcsIDEyLCAxLCA5OSwgMiwgMjM0LCAxMTEsIDcxLCAzOSwgMTcsIAorICAgIDEyLCAxLCA5OSwgMiwgMTgxLCA3MSwgNDcsIDE3LCAxMiwgMSwgOTksIDIsIDE4MSwgNzEsIDM5LCAxNywgMTIsIDEsIDIxOCwgCisgICAgMjM0LCAyLCAxODEsIDcxLCA0NywgMTcsIDEyLCAxLCAyMTgsIDIzNCwgMiwgMTgxLCA3MSwgMzksIDE3LCAxMiwgMSwgOTksIAorICAgIDIsIDE4MSwgMjUyLCAxMTgsIDQ3LCAxNywgMTIsIDEsIDk5LCAyLCAxODEsIDI1MiwgMTE4LCAzOSwgMTcsIDEyLCAxLCA3MCwgCisgICAgMiwgMTgxLCA3MSwgNDcsIDE3LCAxMiwgMSwgNzAsIDIsIDE4MSwgNzEsIDM5LCAxNywgMTIsIDEsIDcwLCAyLCAxODEsIDcxLCAKKyAgICA2NiwgMTcsIDEyLCAxLCA3MCwgMiwgMTgxLCA3MSwgMTI4LCAxNywgMTIsIDEsIDk5LCA0NywgMTcsIDEyLCAxLCA5OSwgMzksIAorICAgIDE3LCAxMiwgMSwgMjUyLCAxMjksIDQ3LCAxNywgMTIsIDEsIDI1MiwgMTI5LCAzOSwgMTcsIDEyLCAxLCAyNTIsIDEyOSwgCisgICAgNjYsIDE3LCAxMiwgMSwgMjUyLCAxMjksIDEyOCwgMTcsIDEyLCAxLCAyMjIsIDc4LCAyMzQsIDczLCA0NywgMTcsIDEyLCAxLCAKKyAgICAyMjIsIDc4LCAyMzQsIDczLCAzOSwgMTcsIDEyLCAxLCAyMjIsIDc4LCA0NywgMTcsIDEyLCAxLCAyMjIsIDc4LCAzOSwgMTcsIAorICAgIDEyLCAxLCAyMjIsIDc4LCA2NiwgMTcsIDEyLCAxLCAyMjIsIDc4LCAxMjgsIDE3LCAxMiwgMSwgMjIyLCAyMCwgNDcsIDE3LCAKKyAgICAxMiwgMSwgMjIyLCAyMCwgMzksIDE3LCAxMiwgMSwgMjIyLCAyMCwgNjYsIDE3LCAxMiwgMSwgMjIyLCAyMCwgMTI4LCAxNywgCisgICAgMTIsIDEsIDEzNCwgNDcsIDE3LCAxMiwgMSwgMTM0LCAzOSwgMTcsIDEyLCAxLCAxMzQsIDY2LCAxNywgMTIsIDEsIDEzNCwgCisgICAgMTI4LCAxNywgMTIsIDEsIDExMSwgNDcsIDE3LCAxMiwgMSwgMTExLCAzOSwgMTcsIDEyLCAxLCAxMTEsIDY2LCAxNywgMTIsIAorICAgIDEsIDExMSwgMTI4LCAxNywgMTIsIDEsIDIzNiwgMTQ3LCA0NywgMTcsIDEyLCAxLCAyMzYsIDE0NywgMzksIDE3LCAxMiwgMSwgCisgICAgMjM2LCAxNDcsIDY2LCAxNywgMTIsIDEsIDIzNiwgMTQ3LCAxMjgsIDE3LCAxMiwgMSwgMjQ5LCAxODQsIDQ3LCAxNywgMTIsIAorICAgIDEsIDI0OSwgMTg0LCAzOSwgMTcsIDEyLCAxLCAyMjIsIDMwLCA0NywgMTcsIDEyLCAxLCAyMjIsIDMwLCAzOSwgMTcsIDEyLCAKKyAgICAxLCAyMjcsIDE5NywgNDcsIDE3LCAxMiwgMSwgMjI3LCAxOTcsIDM5LCAxNywgMTIsIDEsIDIxNywgMTA3LCA0NywgMTcsIAorICAgIDEyLCAxLCAyMTcsIDEwNywgMzksIDE3LCAxMiwgMSwgMjI2LCA4MywgNDcsIDE3LCAxMiwgMSwgMjI2LCA4MywgMzksIDE3LCAKKyAgICAxMiwgMSwgMjI2LCA4MywgNjYsIDE3LCAxMiwgMSwgMjI2LCA4MywgMTI4LCAxNywgMTIsIDEsIDIyNCwgMjQzLCA0NywgMTcsIAorICAgIDEyLCAxLCAyMjQsIDI0MywgMzksIDE3LCAxMiwgMSwgMjI0LCAyNDMsIDY2LCAxNywgMTIsIDEsIDIyNCwgMjQzLCAxMjgsIAorICAgIDE3LCAxMiwgMSwgMjI2LCAxNzEsIDQ3LCAxNywgMTIsIDEsIDIyNiwgMTcxLCAzOSwgMTcsIDEyLCAxLCAyMjYsIDE3MSwgCisgICAgNjYsIDE3LCAxMiwgMSwgMjI2LCAxNzEsIDEyOCwgMTcsIDEyLCAxLCAyNDksIDIwMywgNDcsIDE3LCAxMiwgMSwgMjQ5LCAKKyAgICAyMDMsIDM5LCAxNywgMTIsIDEsIDI0OSwgMjAzLCA2NiwgMTcsIDEyLCAxLCAyNDksIDIwMywgMTI4LCAxNywgMTIsIDEsIAorICAgIDIyMiwgMTM4LCA0NywgMTcsIDEyLCAxLCAyMjIsIDEzOCwgMzksIDE3LCAxMiwgMSwgMjIyLCAxMzgsIDY2LCAxNywgMTIsIAorICAgIDEsIDIyMiwgMTM4LCAxMjgsIDE3LCAxMiwgMSwgMjE3LCAxMTAsIDQ3LCAxNywgMTIsIDEsIDIxNywgMTEwLCAzOSwgMTcsIAorICAgIDEyLCAxLCAyMTcsIDExMCwgNjYsIDE3LCAxMiwgMSwgMjE3LCAxMTAsIDEyOCwgMTcsIDEyLCAxLCAyNTQsIDE5MiwgNDcsIAorICAgIDE3LCAxMiwgMSwgMjU0LCAxOTIsIDM5LCAxNywgMTIsIDEsIDI1NCwgMTkyLCA2NiwgMTcsIDEyLCAxLCAyNTQsIDE5MiwgCisgICAgMTI4LCAxNywgMTIsIDEsIDI0NCwgMTIzLCA0NywgMTcsIDEyLCAxLCAyNDQsIDEyMywgMzksIDE3LCAxMiwgMSwgMjQ0LCAKKyAgICAxMjMsIDY2LCAxNywgMTIsIDEsIDI0NCwgMTIzLCAxMjgsIDE3LCAxMiwgMSwgMjQ1LCAyMjIsIDQ3LCAxNywgMTIsIDEsIAorICAgIDI0NSwgMjIyLCAzOSwgMTcsIDEyLCAxLCAyNDUsIDIyMiwgNjYsIDE3LCAxMiwgMSwgMjQ1LCAyMjIsIDEyOCwgMTcsIDEyLCAKKyAgICAxLCAyMjgsIDE0OSwgNDcsIDE3LCAxMiwgMSwgMjI4LCAxNDksIDM5LCAxNywgMTIsIDEsIDIyOCwgMTQ5LCA2NiwgMTcsIAorICAgIDEyLCAxLCAyMjgsIDE0OSwgMTI4LCAxNywgMTIsIDEsIDIzNiwgMjQ3LCA0NywgMTcsIDEyLCAxLCAyMzYsIDI0NywgMzksIAorICAgIDE3LCAxMiwgMSwgMjM2LCAyNDcsIDY2LCAxNywgMTIsIDEsIDIzNiwgMjQ3LCAxMjgsIDE3LCAxMiwgMSwgMjM1LCAxNjEsIAorICAgIDQ3LCAxNywgMTIsIDEsIDIzNSwgMTYxLCAzOSwgMTcsIDEyLCAxLCAyMzUsIDE2MSwgNjYsIDE3LCAxMiwgMSwgMjM1LCAKKyAgICAxNjEsIDEyOCwgMTcsIDEyLCAxLCA2MiwgNDcsIDE3LCAxMiwgMSwgNjIsIDM5LCAxNywgMTIsIDEsIDYyLCA2NiwgMTcsIAorICAgIDEyLCAxLCA2MiwgMTI4LCAxNywgMTIsIDEsIDIzMSwgMTk0LCA0NywgMTcsIDEyLCAxLCAyMzEsIDE5NCwgMzksIDE3LCAxMiwgCisgICAgMSwgMjMxLCAxOTQsIDY2LCAxNywgMTIsIDEsIDIzMSwgMTk0LCAxMjgsIDE3LCAxMiwgMSwgMjQzLCAxNDcsIDQ3LCAxNywgCisgICAgMTIsIDEsIDI0MywgMTQ3LCAzOSwgMTcsIDEyLCAxLCAyNDMsIDE0NywgNjYsIDE3LCAxMiwgMSwgMjQzLCAxNDcsIDEyOCwgCisgICAgMTcsIDEyLCAxLCAyMTgsIDIzNCwgNDcsIDE3LCAxMiwgMSwgMjE4LCAyMzQsIDM5LCAxNywgMTIsIDEsIDk5LCAxOTcsIDQ3LCAKKyAgICAxNywgMTIsIDEsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDEsIDcwLCA0NywgMTcsIDEyLCAxLCA3MCwgMzksIDE3LCAxMiwgMSwgCisgICAgNzAsIDY2LCAxNywgMTIsIDEsIDcwLCAxMjgsIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCA5OSwgMiwgMjM0LCAxMTEsIDcxLCAKKyAgICA0NywgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDk5LCAyLCAyMzQsIDExMSwgNzEsIDM5LCAxNywgMTIsIDI0LCAyMzUsIAorICAgIDE2MSwgMiwgOTksIDIsIDE4MSwgNzEsIDQ3LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgOTksIDIsIDE4MSwgNzEsIDM5LCAKKyAgICAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgOTksIDIsIDE4MSwgMjUyLCAxMTgsIDQ3LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgCisgICAgMiwgOTksIDIsIDE4MSwgMjUyLCAxMTgsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgOTksIDQ3LCAxNywgMTIsIDI0LCAKKyAgICAyMzUsIDE2MSwgMiwgOTksIDM5LCAxNywgMjE3LCA4NSwgMjE4LCAxOTksIDIzMSwgMjAzLCAyMjMsIDI1NCwgMTEwLCAyNDYsIAorICAgIDk1LCA3OCwgMTEwLCAyMjgsIDY5LCA3OCwgMTEwLCA1NCwgNTUsIDExMCwgMjQ4LCAxNTUsIDU1LCAxMTAsIDIyOSwgMTY5LCAKKyAgICA1NSwgMTEwLCAyNTQsIDEzNCwgMTEwLCAyNTQsIDc5LCAxMTAsIDQyLCAyMjksIDIyOSwgMTEwLCA0NSwgMjI5LCAyMjksIAorICAgIDExMCwgMjUzLCAyNTEsIDExMCwgODgsIDU1LCAxMTAsIDI1MCwgMTY4LCAxMTAsIDI0MiwgMTIwLCAxMTAsIDI0NSwgOTAsIAorICAgIDIyMywgMTM2LCAxMTAsIDIyNCwgMTcsIDExMCwgMjAsIDIxNywgODQsIDExMCwgMjAsIDEwNywgMTEwLCAyMCwgMTAzLCAKKyAgICAxMTAsIDIwLCAxNjAsIDExMCwgMjAsIDE1NCwgMTEwLCAyMCwgMTc0LCAxMTAsIDIwLCAxODIsIDExMCwgMjAsIDE5MSwgCisgICAgMTEwLCAyMCwgMTg1LCAxMTAsIDIwLCAxOTAsIDExMCwgMjUwLCAxNzUsIDExMCwgMjI1LCA2NywgMTEwLCAyMzUsIDg3LCAKKyAgICA1NSwgMTEwLCAyNDYsIDE1NCwgNTUsIDExMCwgMjQ0LCAzMCwgNTUsIDExMCwgMjI4LCA4MiwgNzgsIDExMCwgMjUwLCAxNjcsIAorICAgIDI1MywgMjQ0LCAxMTAsIDcsIDYsIDEsIDYwLCAxMTAsIDcsIDYsIDEsIDI1MywgMjA0LCAxMTAsIDcsIDYsIDEsIDI1MSwgCisgICAgMjAyLCAxMTAsIDcsIDYsIDEsIDI1MCwgNDYsIDExMCwgNywgNiwgMSwgNzMsIDExMCwgNywgNiwgMSwgMjQ2LCA3NCwgMTEwLCAKKyAgICA3LCA2LCAxLCAyNDUsIDY3LCAxMTAsIDcsIDYsIDEsIDI0MywgMjI1LCAxMTAsIDcsIDYsIDEsIDcyLCAxMTAsIDcsIDYsIDEsIAorICAgIDIzNywgMTI2LCAxMTAsIDcsIDYsIDEsIDIzNywgMTcsIDExMCwgNywgNiwgMSwgMTUzLCAxMTAsIDcsIDYsIDEsIDE4OSwgCisgICAgMTEwLCA3LCA2LCAxLCAyMDcsIDExMCwgNywgNiwgMSwgNzQsIDExMCwgNywgNiwgMSwgMjMwLCA1OSwgMTEwLCA3LCA2LCAxLCAKKyAgICAyMjgsIDE2MywgMTEwLCA3LCA2LCAxLCAxNTIsIDExMCwgNywgNiwgMSwgMTk4LCAxMTAsIDcsIDYsIDEsIDIyMiwgMjAxLCAKKyAgICAxMTAsIDcsIDYsIDEsIDY4LCAxMTAsIDcsIDYsIDEsIDIxNiwgMjE2LCAxMTAsIDcsIDYsIDEsIDIxOSwgNDAsIDExMCwgNywgCisgICAgNiwgMSwgMjE4LCAxNTEsIDExMCwgNywgNiwgMSwgMjE4LCA5MCwgMTEwLCA3LCA2LCAxLCAyMTcsIDE1NywgMTEwLCA0MiwgCisgICAgNDAsIDExNSwgMTEwLCAyMjcsIDE2MCwgMjI0LCAxNywgMTEwLCA0NSwgNDAsIDExNSwgMTEwLCAyNTAsIDIxNywgMjU1LCAwLCAKKyAgICAxMTAsIDEwOSwgMjM1LCA0MywgMTEwLCAyNDQsIDM3LCAyNTUsIDAsIDExMCwgNywgMywgMSwgNjAsIDExMCwgNywgMywgMSwgCisgICAgMjUzLCAyMDQsIDExMCwgNywgMywgMSwgMjUxLCAyMDIsIDExMCwgNywgMywgMSwgMjUwLCA0NiwgMTEwLCA3LCAzLCAxLCAKKyAgICA3MywgMTEwLCA3LCAzLCAxLCAyNDYsIDc0LCAxMTAsIDcsIDMsIDEsIDI0NSwgNjcsIDExMCwgNywgMywgMSwgMjQzLCAyMjUsIAorICAgIDExMCwgNywgMywgMSwgNzIsIDExMCwgNywgMywgMSwgMjM3LCAxMjYsIDExMCwgNywgMywgMSwgMjM3LCAxNywgMTEwLCA3LCAKKyAgICAzLCAxLCAxNTMsIDExMCwgNywgMywgMSwgMTg5LCAxMTAsIDcsIDMsIDEsIDIwNywgMTEwLCA3LCAzLCAxLCA3NCwgMTEwLCAKKyAgICA3LCAzLCAxLCAyMzAsIDU5LCAxMTAsIDcsIDMsIDEsIDIyOCwgMTYzLCAxMTAsIDcsIDMsIDEsIDE1MiwgMTEwLCA3LCAzLCAKKyAgICAxLCAxOTgsIDExMCwgNywgMywgMSwgMjIyLCAyMDEsIDExMCwgNywgMywgMSwgNjgsIDExMCwgNywgMywgMSwgMjE2LCAyMTYsIAorICAgIDExMCwgNywgMywgMSwgMjE5LCA0MCwgMTEwLCA3LCAzLCAxLCAyMTgsIDE1MSwgMTEwLCA3LCAzLCAxLCAyMTgsIDkwLCAKKyAgICAxMTAsIDcsIDMsIDEsIDIxNywgMTU3LCAxMTAsIDQyLCAyNTAsIDc5LCAxMTUsIDExMCwgNjksIDIzNSwgNDMsIDExMCwgNDUsIAorICAgIDI1MCwgNzksIDExNSwgMTEwLCAyMjEsIDE3OSwgMTEwLCA0MiwgNjcsIDIyOSwgMjI5LCAxMTAsIDQ1LCA2NywgMjI5LCAKKyAgICAyMjksIDkzLCA5OCwgMjQ1LCA5MCwgMjIzLCAxMzYsIDkzLCA0MiwgMjUwLCAxMjQsIDExNSwgOTMsIDQ1LCAyNTAsIDEyNCwgCisgICAgMTE1LCA5MywgOTgsIDI1MCwgMTY4LCA5MywgNTIsIDIzMywgMTkzLCAyNDgsIDE0NSwgOTMsIDUyLCAxLCAyMTgsIDE4NywgCisgICAgOTMsIDUyLCAxLCAzLCA2MCwgOTMsIDUyLCAxLCAzLCA3MiwgOTMsIDUyLCAxLCAzLCA2OCwgOTMsIDUyLCAxLCAzLCA3MywgCisgICAgOTMsIDUyLCAxLCAzLCA3NCwgOTMsIDUyLCAxLCAzLCAxODQsIDkzLCA1MiwgMSwgMywgMjE3LCAyMDAsIDkzLCA1MiwgMSwgCisgICAgMywgMjE3LCAyMzEsIDkzLCA1MiwgMSwgMywgMjIxLCAwLCA5MywgMjM2LCAyMDIsIDIyOCwgMjIzLCAyMjQsIDksIDc4LCAKKyAgICA5MywgNTIsIDEsIDYwLCA5MywgNTIsIDEsIDcyLCA5MywgNTIsIDEsIDY4LCA5MywgNTIsIDEsIDczLCA5MywgNTIsIDEsIAorICAgIDc0LCA5MywgNTIsIDEsIDE3NSwgOTMsIDUyLCAxLCAyMzYsIDExMywgOTMsIDUyLCAxLCAyMzYsIDcsIDkzLCA1MiwgMSwgCisgICAgMjM2LCAxODQsIDkzLCA1MiwgMSwgMjM2LCA1NywgOTMsIDUyLCAxLCAyMjYsIDE3NywgOTMsIDUyLCAxLCAyMjQsIDE0MCwgCisgICAgOTMsIDUyLCAxLCAyMjMsIDEwMywgOTMsIDUyLCAxLCAyMjYsIDk0LCA5MywgNTIsIDEsIDIyNCwgMjYsIDkzLCA1MiwgMSwgCisgICAgMjIyLCAxNTUsIDkzLCA1MiwgMSwgMjIxLCAyMDUsIDkzLCA1MiwgMSwgMjIxLCAwLCA5MywgNTIsIDEsIDIyMiwgODcsIDkzLCAKKyAgICA1MiwgMSwgMTAxLCA5MywgNTIsIDEsIDIwOCwgOTMsIDUyLCAxLCAyMzIsIDYyLCA5MywgNTIsIDEsIDIzMSwgMTQ0LCA5MywgCisgICAgNTIsIDEsIDIzMiwgMTQxLCA5MywgNTIsIDEsIDIzMSwgMjA0LCA5MywgNTIsIDEsIDE1NSwgOTMsIDUyLCAxLCAyNDMsIAorICAgIDExMiwgOTMsIDUyLCAxLCAyNDIsIDE3MywgOTMsIDUyLCAxLCAyNDMsIDE2MiwgOTMsIDUyLCAxLCAyNDMsIDQsIDkzLCA1MiwgCisgICAgMSwgMTk2LCA5MywgNTIsIDEsIDIzMywgMTk2LCA5MywgNTIsIDEsIDIzMywgOTksIDkzLCA1MiwgMSwgMjM0LCAyNSwgOTMsIAorICAgIDUyLCAxLCAyMzMsIDEzNiwgOTMsIDUyLCAxLCAxODQsIDkzLCA1MiwgMSwgMjE3LCAyMDAsIDkzLCA1MiwgMSwgMjE3LCAKKyAgICAyMzEsIDkzLCA1MiwgMSwgMjAzLCA5MywgNTIsIDEsIDIyNywgMTQ3LCA5MywgNTIsIDEsIDIyNywgMjIsIDkzLCA1MiwgMSwgCisgICAgMjI3LCAyMTYsIDkzLCA1MiwgMSwgMjI3LCA3NSwgOTMsIDUyLCAxLCAyMTksIDcsIDkzLCA1MiwgMSwgMjA3LCA5MywgNTIsIAorICAgIDIxOSwgNzAsIDIyNCwgOSwgNzgsIDkzLCA1MiwgMjI1LCA3MiwgMjI0LCA5LCA3OCwgOTMsIDIyLCAyNDUsIDE4NSwgOTMsIAorICAgIDIyLCAxLCAyMzYsIDg2LCA5MywgMjIsIDEsIDIyMywgMjExLCA5MywgMjIsIDEsIDIzNiwgNzksIDkzLCAyMiwgMSwgMjMyLCAKKyAgICA1NSwgOTMsIDIyLCAxLCAyMzIsIDUzLCA5MywgMjIsIDEsIDIzMiwgNTIsIDkzLCAyMiwgMSwgMjIxLCAxOTIsIDkzLCAyMiwgCisgICAgMSwgMjIzLCAyMDAsIDkzLCAyMiwgMSwgMjI3LCAxNDAsIDkzLCAyMiwgMSwgMjI3LCAxMzUsIDkzLCAyMiwgMSwgMjI3LCAKKyAgICAxMzIsIDkzLCAyMiwgMSwgMjI3LCAxMjUsIDkzLCAyMiwgMSwgMjI3LCAxMjAsIDkzLCAyMiwgMSwgMjI3LCAxMTUsIDkzLCAKKyAgICAyMiwgMSwgMjI3LCAxMjYsIDkzLCAyMiwgMSwgMjI3LCAxMzgsIDkzLCAyMiwgMSwgMjMzLCAxODcsIDkzLCAyMiwgMSwgCisgICAgMjI5LCA5OSwgOTMsIDIyLCAxLCAyMjMsIDIwOCwgOTMsIDIyLCAxLCAyMjksIDg4LCA5MywgMjIsIDEsIDIyNCwgMTA0LCAKKyAgICA5MywgMjIsIDEsIDIyMywgMjA1LCA5MywgMjIsIDEsIDIzOCwgMjIsIDkzLCAyMiwgMSwgMjUwLCAyMzAsIDkzLCAyMiwgMSwgCisgICAgMjIzLCAyMTUsIDkzLCAyMiwgMSwgMjUxLCAyOSwgOTMsIDIyLCAxLCAyMzYsIDEyOCwgOTMsIDIyLCAxLCAyMjIsIDAsIDkzLCAKKyAgICAyMiwgMSwgMjI5LCAxMjcsIDkzLCAyMiwgMSwgMjQzLCAxMDYsIDkzLCAyMiwgMSwgNjAsIDkzLCAyMiwgMSwgMjU0LCAyMzQsIAorICAgIDkzLCAyMiwgMSwgMTg0LCA5MywgMjIsIDEsIDIxOCwgNjUsIDkzLCAyMiwgMSwgMjQ2LCAxNjgsIDkzLCAyMiwgMSwgNzMsIAorICAgIDkzLCAyMiwgMSwgMjE4LCAxNiwgOTMsIDIyLCAxLCAyMTgsIDI1LCA5MywgMjIsIDEsIDc0LCA5MywgMjIsIDEsIDIxOSwgNywgCisgICAgOTMsIDIyLCAxLCAyMTksIDQsIDkzLCAyMiwgMSwgMjMwLCAxNjcsIDkzLCAyMiwgMSwgMjE3LCAyMzEsIDkzLCAyMiwgMSwgCisgICAgNjgsIDkzLCAyMiwgMSwgMjE4LCAyMTksIDkzLCAyMiwgMSwgMjE4LCAyMjcsIDkzLCAyMiwgMSwgMjE4LCAyMDQsIDkzLCAKKyAgICAyMiwgMSwgMjE3LCAyMDAsIDkzLCAyMiwgMSwgMjQ2LCAxMTUsIDkzLCAyMiwgMSwgMjE3LCAyNTAsIDkzLCAyMiwgMSwgNzIsIAorICAgIDExMCwgMjUxLCA4NiwgNTUsIDExMCwgMjI5LCAxMSwgNTUsIDExMCwgMjEyLCA1NSwgMTEwLCAyMzQsIDExNSwgMTEwLCAKKyAgICAyNTIsIDEsIDEzNSwgMTEwLCAyMTgsIDE5LCA1NSwgMTEwLCAyMTgsIDE4MiwgNTUsIDkzLCAyNDUsIDEyMiwgMTcwLCAyMTksIAorICAgIDE1MiwgOTMsIDEyNywgNjUsIDkzLCAyMjAsIDUzLCA2NSwgOTMsIDkwLCA2NSwgOTMsIDI0NywgMTMwLCA2NSwgOTMsIDg0LCAKKyAgICAyMjMsIDIyNywgOTMsIDY3LCAyNTAsIDIyMSwgMjM3LCAxODAsIDI1NCwgMTEyLCAyNTQsIDEyOCwgMjM3LCAxODAsIDI1NCwgCisgICAgMTEyLCAyMjUsIDU0LCAyMzcsIDE4MCwgMjU0LCAxMTIsIDIyMiwgNTYsIDIzMCwgMTc4LCAyMjcsIDE3OSwgMjUxLCA1NSwgCisgICAgMjI3LCAxNzksIDI1MSwgNTUsIDU3LCA0OSwgNCwgMjUzLCAxODgsIDYwLCA1NywgNDksIDQsIDI1MywgMTU3LCA3MywgNTcsIAorICAgIDQ5LCA0LCAyNTMsIDE2NiwgNzIsIDU3LCA0OSwgNCwgMjUzLCAxMzQsIDc0LCA1NywgNDksIDQsIDI1MywgMTg0LCA2OCwgCisgICAgNTcsIDQ5LCA0LCAyNTMsIDIwMywgMjQ5LCAyMDcsIDU3LCA0OSwgNCwgMjUzLCAxNTAsIDI0OSwgOTIsIDU3LCA0OSwgNCwgCisgICAgMjUzLCAxOTAsIDI0OSwgMTUsIDU3LCA0OSwgNCwgMjUzLCAxODAsIDI0OCwgMTY3LCA1NywgNDksIDQsIDI1MywgMTQ0LCAKKyAgICAyNDcsIDExMSwgNTcsIDQ5LCA0LCAyNTMsIDEzOCwgMjM3LCAxMjMsIDU3LCA0OSwgNCwgMjUzLCAxNDksIDIzNywgMTE0LCAKKyAgICA1NywgNDksIDQsIDI1MywgMTU5LCAyMzcsIDU5LCA1NywgNDksIDQsIDI1MywgMTMwLCAyMzcsIDQzLCA1NywgNDksIDQsIAorICAgIDI1MywgMTE4LCAxNzUsIDU3LCA0OSwgNCwgMjUzLCAxNTEsIDIzNiwgMTg0LCA1NywgNDksIDQsIDI1MywgMTI4LCAyMzYsIAorICAgIDExMywgNTcsIDQ5LCA0LCAyNTMsIDEyNSwgMjM2LCA1NywgNTcsIDQ5LCA0LCAyNTMsIDExNCwgMjM2LCA3LCA1NywgNDksIAorICAgIDQsIDI1MywgMTE1LCAxOTYsIDU3LCA0OSwgNCwgMjUzLCAxODEsIDIzNCwgMjUsIDU3LCA0OSwgNCwgMjUzLCAxMjIsIDIzMywgCisgICAgMTk2LCA1NywgNDksIDQsIDI1MywgMTc5LCAyMzMsIDEzNiwgNTcsIDQ5LCA0LCAyNTMsIDE3MSwgMjMzLCA5OSwgNTcsIDQ5LCAKKyAgICA0LCAyNTMsIDE5MiwgMjA4LCA1NywgNDksIDQsIDI1MywgMTcwLCAyMzIsIDE0MSwgNTcsIDQ5LCA0LCAyNTMsIDE2NCwgCisgICAgMjMyLCA2MiwgNTcsIDQ5LCA0LCAyNTMsIDE0MywgMjMxLCAyMDQsIDU3LCA0OSwgNCwgMjUzLCAxNDAsIDIzMSwgMTQ0LCAKKyAgICA1NywgNDksIDQsIDI1MywgMTk5LCAxODcsIDU3LCA0OSwgNCwgMjUzLCAxMjMsIDIyOSwgMTk4LCA1NywgNDksIDQsIDI1MywgCisgICAgMTU2LCAyMjksIDEwOCwgNTcsIDQ5LCA0LCAyNTMsIDE4MywgMjI5LCAzNywgNTcsIDQ5LCA0LCAyNTMsIDE0NSwgMjI4LCAKKyAgICAyMDIsIDU3LCA0OSwgNCwgMjUzLCAxNzgsIDIyOCwgMTU1LCA1NywgNDksIDQsIDI1MywgMTE3LCAyMjgsIDEzNiwgNTcsIAorICAgIDQ5LCA0LCAyNTMsIDE3MywgMjI4LCAxMjEsIDU3LCA0OSwgNCwgMjUzLCAxNjIsIDIyOCwgMTEwLCA1NywgNDksIDQsIDI1MywgCisgICAgMTM1LCAyMDMsIDU3LCA0OSwgNCwgMjUzLCAxNjcsIDIyNywgMjE2LCA1NywgNDksIDQsIDI1MywgMTQyLCAyMjcsIDE0NywgCisgICAgNTcsIDQ5LCA0LCAyNTMsIDIwMSwgMjI3LCA3NSwgNTcsIDQ5LCA0LCAyNTMsIDE2OCwgMjI3LCAyMiwgNTcsIDQ5LCA0LCAKKyAgICAyNTMsIDE2MywgMjI2LCAxNzcsIDU3LCA0OSwgNCwgMjUzLCAxODYsIDIyNiwgOTQsIDU3LCA0OSwgNCwgMjUzLCAxNTQsIAorICAgIDIyNCwgMTQwLCA1NywgNDksIDQsIDI1MywgMTgyLCAyMjQsIDI2LCA1NywgNDksIDQsIDI1MywgMTM3LCAyMjMsIDEwMywgCisgICAgNTcsIDQ5LCA0LCAyNTMsIDEzNiwgMjIyLCAxNTUsIDU3LCA0OSwgNCwgMjUzLCAxOTcsIDIyMiwgODcsIDU3LCA0OSwgNCwgCisgICAgMjUzLCAxNTgsIDIyMSwgMjA1LCA1NywgNDksIDQsIDI1MywgMTk1LCAxMDEsIDU3LCA0OSwgNCwgMjUzLCAxMjYsIDIyMSwgCisgICAgMCwgNTcsIDQ5LCA0LCAyNTMsIDE0MSwgMjE5LCA3LCA1NywgNDksIDQsIDI1MywgMTIwLCAyMTgsIDIyNywgNTcsIDQ5LCA0LCAKKyAgICAyNTMsIDE1NSwgMjE4LCAyMDQsIDU3LCA0OSwgNCwgMjUzLCAxNTMsIDIxOCwgMTg3LCA1NywgNDksIDQsIDI1MywgMTc3LCAKKyAgICAyMTcsIDExNCwgNTcsIDQ5LCA0LCAyNTMsIDEyMSwgMjE3LCA5MiwgNTcsIDQ5LCA0LCAyNTMsIDE3NCwgMjE3LCAyMSwgNTcsIAorICAgIDQ5LCA0LCAyNTMsIDE2OSwgMjU1LCA2MCwgNTcsIDQ5LCA0LCAyNTMsIDE1MiwgMjU1LCA1OSwgNTcsIDQ5LCA0LCAyNTMsIAorICAgIDExMSwgMjUzLCAyMzIsIDU3LCA0OSwgNCwgMjUzLCAxMjQsIDI0NywgODIsIDU3LCA0OSwgNCwgMjUzLCAxMDcsIDI0NywgCisgICAgODEsIDU3LCA0OSwgNCwgMjUzLCAxNDcsIDIzMSwgODUsIDU3LCA0OSwgNCwgMjUzLCAxNjUsIDIyOCwgMjAxLCA1NywgNDksIAorICAgIDQsIDI1MywgMTMzLCAyMjgsIDIwNCwgNTcsIDQ5LCA0LCAyNTMsIDExOSwgMjI4LCAyLCA1NywgNDksIDQsIDI1MywgMTYxLCAKKyAgICAyMjgsIDEsIDU3LCA0OSwgNCwgMjUzLCAxMjcsIDIyNywgNzQsIDU3LCA0OSwgNCwgMjUzLCAxMjksIDIyMiwgMTUzLCA1NywgCisgICAgNDksIDQsIDI1MywgMTA5LCAyMjAsIDIyMywgNTcsIDQ5LCA0LCAyNTMsIDEwNiwgMTAzLCA1NywgNDksIDE2LCAyNTMsIAorICAgIDE3NiwgNTcsIDQ5LCAxNiwgMjUzLCAxNzUsIDU3LCA0OSwgMTYsIDI1MywgMTcyLCA1NywgNDksIDE2LCAyNTMsIDE2MCwgCisgICAgNTcsIDQ5LCAxNiwgMjUzLCAxNDgsIDU3LCA0OSwgMTYsIDI1MywgMTQ2LCA1NywgNDksIDE2LCAyNTMsIDEzOSwgNTcsIDQ5LCAKKyAgICAxNiwgMjUzLCAxMzIsIDU3LCA0OSwgMTYsIDI1MywgMTMxLCA1NywgNDksIDE2LCAyNTMsIDExNiwgNTcsIDQ5LCAxNiwgCisgICAgMjUzLCAxMTMsIDU3LCA0OSwgMTYsIDI1MywgMTEyLCA1NywgNDksIDE2LCAyNTMsIDExMCwgNTcsIDQ5LCAxNiwgMjUzLCAKKyAgICAxMDgsIDU3LCA0OSwgOTcsIDI1MywgMTA1LCAyMzQsIDg2LCA1NywgNDksIDk3LCAyNTMsIDEwNCwgMjE4LCAxODMsIDU3LCAKKyAgICA0OSwgOTcsIDI1MywgMTAzLCAyNDksIDgwLCA1NywgNDksIDk3LCAyNTMsIDEwMiwgMjQ2LCAxNTEsIDU3LCA0OSwgOTcsIAorICAgIDI1MywgMTAxLCAyMzQsIDY4LCA1NywgNDksIDk3LCAyNTMsIDEwMCwgMjIzLCAxNjIsIDU3LCA0OSwgOTcsIDI1MywgOTksIAorICAgIDI0NiwgMTAwLCA1NywgNDksIDk3LCAyNTMsIDk4LCAyMjcsIDIzOSwgNTcsIDQ5LCA5NywgMjUzLCA5NywgMjI0LCAyNDUsIAorICAgIDU3LCA0OSwgOTcsIDI1MywgOTYsIDI0MywgMTYxLCA1NywgNDksIDk3LCAyNTMsIDk1LCAyMjQsIDQsIDU3LCA0OSwgOTcsIAorICAgIDI1MywgOTQsIDI1MiwgMzksIDU3LCA0OSwgOTcsIDI1MywgOTMsIDI1MCwgMTEwLCA1NywgNDksIDk3LCAyNTMsIDkyLCAKKyAgICAyNTEsIDI0MywgNTcsIDQ5LCA5NywgMjUzLCA5MSwgMjE4LCAyMTIsIDU3LCA0OSwgOTcsIDI1MywgOTAsIDI1MiwgMTk4LCAKKyAgICA1NywgNDksIDk3LCAyNTMsIDg5LCAyMzAsIDE0NywgNTcsIDQ5LCA5NywgMjUzLCA4OCwgMjIzLCAyNDQsIDU3LCA0OSwgOTcsIAorICAgIDI1MywgODcsIDI1MCwgNTQsIDU3LCA0OSwgMjMzLCAxMjUsIDI1MywgODYsIDIzNiwgMjIzLCA1NywgNDksIDIzMywgMTI1LCAKKyAgICAyNTMsIDg1LCAyMzYsIDIzMSwgNTcsIDQ5LCA5NywgMjUzLCA4NCwgMjMwLCAxNTcsIDU3LCA0OSwgOTcsIDI1MywgODMsIAorICAgIDIxOCwgMTkyLCA1NywgNDksIDk3LCAyNTMsIDgyLCA1NywgNDksIDIzMywgMTI1LCAyNTMsIDgxLCAyNTQsIDQ0LCA1NywgCisgICAgNDksIDIzMywgMTI1LCAyNTMsIDgwLCAyMzMsIDI0NywgNTcsIDQ5LCA5NywgMjUzLCA3OSwgMjUyLCAwLCA1NywgNDksIDk3LCAKKyAgICAyNTMsIDc4LCAyNDQsIDYyLCA1NywgNDksIDk3LCAyNTMsIDc3LCA1NywgNDksIDk3LCAyNTMsIDc2LCAyMTgsIDE3NywgNTcsIAorICAgIDQ5LCA5NywgMjUzLCA3NSwgNTcsIDQ5LCA5NywgMjUzLCA3NCwgNTcsIDQ5LCA5NywgMjUzLCA3MywgMjQyLCAxODksIDU3LCAKKyAgICA0OSwgOTcsIDI1MywgNzIsIDU3LCA0OSwgOTcsIDI1MywgNzEsIDU3LCA0OSwgOTcsIDI1MywgNzAsIDU3LCA0OSwgMjMzLCAKKyAgICAxMjUsIDI1MywgNjgsIDIyMCwgMjM1LCA1NywgNDksIDk3LCAyNTMsIDY3LCA1NywgNDksIDk3LCAyNTMsIDY2LCA1NywgNDksIAorICAgIDk3LCAyNTMsIDY1LCAyNTAsIDE5MiwgNTcsIDQ5LCA5NywgMjUzLCA2NCwgNTcsIDQ5LCA5NywgMjUzLCA2MywgNTcsIDQ5LCAKKyAgICA5NywgMjUzLCA2MiwgMjQ0LCAyMTgsIDU3LCA0OSwgOTcsIDI1MywgNjEsIDI1NCwgMzEsIDU3LCA0OSwgOTcsIDI1MywgNjAsIAorICAgIDU3LCA0OSwgOTcsIDI1MywgNTksIDU3LCA0OSwgOTcsIDI1MywgNTgsIDU3LCA0OSwgOTcsIDI1MywgNTcsIDU3LCA0OSwgCisgICAgOTcsIDI1MywgNTYsIDU3LCA0OSwgOTcsIDI1MywgNTUsIDU3LCA0OSwgOTcsIDI1MywgNTQsIDU3LCA0OSwgOTcsIDI1MywgCisgICAgNTMsIDU3LCA0OSwgOTcsIDI1MywgNTIsIDU3LCA0OSwgOTcsIDI1MywgNTEsIDIzMywgMTIwLCA1NywgNDksIDk3LCAyNTMsIAorICAgIDUwLCA1NywgNDksIDk3LCAyNTMsIDQ5LCAyMjEsIDk4LCA1NywgNDksIDk3LCAyNTMsIDQ4LCA1NywgNDksIDk3LCAyNTMsIAorICAgIDQ3LCA1NywgNDksIDk3LCAyNTMsIDQ2LCA1NywgNDksIDk3LCAyNTMsIDQ1LCA1NywgNDksIDk3LCAyNTMsIDQ0LCA1NywgCisgICAgNDksIDk3LCAyNTMsIDQzLCA1NywgNDksIDk3LCAyNTMsIDQyLCA1NywgNDksIDk3LCAyNTMsIDQxLCA1NywgNDksIDk3LCAKKyAgICAyNTMsIDQwLCA1NywgNDksIDk3LCAyNTMsIDM5LCA1NywgNDksIDk3LCAyNTMsIDM4LCA1NywgNDksIDk3LCAyNTMsIDM3LCAKKyAgICAyNDMsIDE0MCwgNTcsIDQ5LCA5NywgMjUzLCAxNiwgMjQ1LCAxMzEsIDU3LCA0OSwgOTcsIDI1MywgMTMsIDI1MiwgMTgyLCAKKyAgICA1NywgNDksIDk3LCAyNTMsIDgsIDIyMywgMjQ5LCA1NywgNDksIDk3LCAyNTMsIDcsIDY1LCA1NywgNDksIDk3LCAyNTMsIDYsIAorICAgIDU3LCA0OSwgOTcsIDI1MywgNSwgMjIzLCAyNSwgNTcsIDQ5LCA5NywgMjUzLCA0LCA1NywgNDksIDk3LCAyNTMsIDMsIDU3LCAKKyAgICA0OSwgOTcsIDI1MywgMiwgMjE4LCAyMDgsIDI1MSwgNTIsIDU3LCA0OSwgOTcsIDI1MywgMSwgMjUxLCA1MiwgNTcsIDQ5LCAKKyAgICA5NywgMjUzLCAwLCAyNTEsIDUzLCAyNDUsIDEwNSwgNTcsIDQ5LCA5NywgMjUyLCAyNTUsIDIxOCwgMjEwLCA1NywgNDksIAorICAgIDk3LCAyNTIsIDI1NCwgNTcsIDQ5LCA5NywgMjUyLCAyNTMsIDU3LCA0OSwgMjMzLCAxMjUsIDI1MiwgMjUyLCAyNDgsIDIxMSwgCisgICAgNTcsIDQ5LCA5NywgMjUyLCAyNTEsIDU3LCA0OSwgOTcsIDI1MiwgMjUwLCA1NywgNDksIDk3LCAyNTIsIDI0OCwgNTcsIDQ5LCAKKyAgICA5NywgMjUyLCAyNDcsIDU3LCA0OSwgOTcsIDI1MiwgMjQ2LCA1NywgNDksIDk3LCAyNTIsIDI0NSwgMjQ5LCAxNDksIDU3LCAKKyAgICA0OSwgOTcsIDI1MiwgMjQ0LCA1NywgNDksIDk3LCAyNTIsIDI0MywgNTcsIDQ5LCA5NywgMjUyLCAyNDIsIDU3LCA0OSwgOTcsIAorICAgIDI1MiwgMjQxLCA1NywgNDksIDk3LCAyNTIsIDI0MCwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCA2OSwgNTcsIDQ5LCA5NywgCisgICAgMjE5LCA5OSwgMjUzLCAzNiwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAzNSwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAKKyAgICAzNCwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAzMywgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAzMiwgNTcsIDQ5LCAKKyAgICA5NywgMjE5LCA5OSwgMjUzLCAzMSwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAzMCwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgCisgICAgMjUzLCAyOSwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAyOCwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAyNywgNTcsIAorICAgIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAyNiwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAyNSwgNTcsIDQ5LCA5NywgMjE5LCAKKyAgICA5OSwgMjUzLCAyNCwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAyMywgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAyMiwgCisgICAgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAyMSwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAyMCwgNTcsIDQ5LCA5NywgCisgICAgMjE5LCA5OSwgMjUzLCAxOSwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAxOCwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAKKyAgICAxNywgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAxNSwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAxNCwgNTcsIDQ5LCAKKyAgICA5NywgMjE5LCA5OSwgMjUzLCAxMiwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCAxMSwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgCisgICAgMjUzLCAxMCwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUzLCA5LCA1NywgNDksIDk3LCAyMTksIDk5LCAyNTIsIDI0OSwgNTcsIAorICAgIDQ5LCA5NywgMjE5LCA5OSwgMjUyLCAyMzksIDI1NCwgMjI3LCAyMTgsIDE3NCwgMjI1LCA1NSwgMjM1LCA0MywgMjU0LCAKKyAgICAyMjcsIDIxOCwgMTc0LCAyMjUsIDU1LCAyNDgsIDE0NSwgMjU0LCAyMjcsIDI1MSwgNDUsIDc4LCAyNTQsIDIyNywgNTQsIAorICAgIDEwNywgMjU0LCAyMjcsIDU0LCAxMDMsIDI1NCwgMjI3LCA1NCwgMTYwLCAyNTQsIDIyNywgNTQsIDE1NCwgMjU0LCAyMjcsIAorICAgIDU0LCAxNzQsIDI1NCwgMjI3LCA1NCwgMTgyLCAyNTQsIDIyNywgNTQsIDE5MSwgMjU0LCAyMjcsIDU0LCAxODUsIDI1NCwgCisgICAgMjI3LCA1NCwgMTkwLCAyNTQsIDIyNywgNTQsIDIyMiwgNjUsIDI1NCwgMjI3LCA1NCwgMjIwLCAyMTksIDI1NCwgMjI3LCAKKyAgICA1NCwgMjIxLCAyNDUsIDI1NCwgMjI3LCA1NCwgMjQ1LCAxMTksIDI1NCwgMjI3LCA1NCwgMjQ1LCAxOTYsIDI1NCwgMjI3LCAKKyAgICA1NCwgMjI0LCA2OSwgMjU0LCAyMjcsIDU0LCAyMjUsIDM4LCAyNTQsIDIyNywgNTQsIDI0NiwgMjI3LCAyNTQsIDIyNywgNTQsIAorICAgIDIzMiwgMjcsIDI1NCwgMjI3LCA1NCwgMTMxLCAyNDIsIDE2MSwgMjU0LCAyMjcsIDU0LCAxMjQsIDI0MiwgMTYxLCAyNTQsIAorICAgIDIyNywgNTQsIDE0OCwgMjQyLCAxNjEsIDI1NCwgMjI3LCA1NCwgMjQ1LCAxMTYsIDI0MiwgMTYxLCAyNTQsIDIyNywgNTQsIAorICAgIDI0NSwgMTcwLCAyNDIsIDE2MSwgMjU0LCAyMjcsIDU0LCAyMjQsIDgyLCAyNDIsIDE2MSwgMjU0LCAyMjcsIDU0LCAyMjUsIAorICAgIDQzLCAyNDIsIDE2MSwgMjU0LCAyMjcsIDU0LCAyNDYsIDIzNSwgMjQyLCAxNjEsIDI1NCwgMjI3LCA1NCwgMjMyLCAzMSwgCisgICAgMjQyLCAxNjEsIDI1NCwgMjI3LCA1NCwgMTMxLCAyMjEsIDIzMSwgMjU0LCAyMjcsIDU0LCAxMjQsIDIyMSwgMjMxLCAyNTQsIAorICAgIDIyNywgNTQsIDE0OCwgMjIxLCAyMzEsIDI1NCwgMjI3LCA1NCwgMjQ1LCAxMTYsIDIyMSwgMjMxLCAyNTQsIDIyNywgNTQsIAorICAgIDI0NSwgMTcwLCAyMjEsIDIzMSwgMjU0LCAyMjcsIDU0LCAyMjQsIDgyLCAyMjEsIDIzMSwgMjU0LCAyMjcsIDU0LCAyMjUsIAorICAgIDQzLCAyMjEsIDIzMSwgMjU0LCAyMjcsIDU0LCAyNDYsIDIzNSwgMjIxLCAyMzEsIDI1NCwgMjI3LCA1NCwgMjMyLCAzMSwgCisgICAgMjIxLCAyMzEsIDI1NCwgMjI3LCA1NCwgMjIyLCA2NiwgMjIxLCAyMzEsIDI1NCwgMjI3LCA1NCwgMjIwLCAyMjAsIDIyMSwgCisgICAgMjMxLCAyNTQsIDIyNywgNTQsIDIyMSwgMjQ2LCAyMjEsIDIzMSwgMjU0LCAyMjcsIDU0LCAyNDUsIDEyMCwgMjIxLCAyMzEsIAorICAgIDI1NCwgMjI3LCA1NCwgMjQ1LCAxOTcsIDIyMSwgMjMxLCAyNTQsIDIyNywgNTQsIDIyNCwgNzAsIDIyMSwgMjMxLCAyNTQsIAorICAgIDIyNywgNTQsIDIyNSwgMzksIDIyMSwgMjMxLCAyNTQsIDIyNywgNTQsIDI0NiwgMjI4LCAyMjEsIDIzMSwgMjU0LCAyMjcsIAorICAgIDU0LCAyMzIsIDI4LCAyMjEsIDIzMSwgMjU0LCAyMjcsIDIxOCwgMjIyLCAyNTIsIDE5MCwgMjIwLCA3MiwgMjU0LCAyMjcsIAorICAgIDIxOCwgMjIyLCAyNDUsIDE3OCwgMjIzLCA4OCwgMjU0LCAyMjcsIDIxOCwgMjIyLCAyMjYsIDkwLCAyMjMsIDg4LCAyNTQsIAorICAgIDIyNywgMjE4LCAyMjIsIDIyMSwgMjUyLCAyMjMsIDg4LCAyNTQsIDIyNywgMjE4LCAyMjIsIDI0NSwgMTEwLCAyMjMsIDg4LCAKKyAgICAyNTQsIDIyNywgMjQ3LCAxMTQsIDIzNCwgMjQsIDI0NSwgMTc4LCAyMjMsIDg4LCAyNTQsIDIyNywgMjM1LCAzMSwgMjM0LCAKKyAgICAyNCwgMjQ1LCAxNzgsIDIyMywgODgsIDI1NCwgMjI3LCAyMzQsIDI0LCAyMjYsIDkwLCAyMjMsIDg4LCAyNTQsIDIyNywgCisgICAgMjM0LCAyNCwgMjIxLCAyNTIsIDIyMywgODgsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDEzMSwgMjI4LCA4OSwgMjMsIAorICAgIDI1NCwgMjUxLCAyNTMsIDIzNCwgMTMxLCAyNDMsIDE5NCwgMjMsIDI1NCwgMjUxLCAyNTMsIDIzNCwgMTMxLCAyNDcsIDEyNiwgCisgICAgMjMsIDI1NCwgMjUxLCAyNTMsIDIzNCwgMTc0LCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAyNDUsIDE5NiwgMjMsIDI1NCwgCisgICAgMjUxLCAyNTMsIDIzNCwgMjQ1LCAxNzAsIDI0MiwgMTYxLCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAyNDUsIDE3MCwgMjIxLCAKKyAgICAyMzEsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDI0NSwgMTk3LCAyMjEsIDIzMSwgMjMsIDI1NCwgMjUxLCAyNTMsIDIzNCwgCisgICAgMjQ1LCAxNzAsIDIyMiwgMTI2LCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAyMjIsIDY2LCAyMjIsIDEyNiwgMjMsIDI1NCwgCisgICAgMjUxLCAyNTMsIDIzNCwgMjQ1LCAxOTcsIDIyMiwgMTI2LCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAxMzEsIDI0MiwgMTYyLCAKKyAgICAyMjIsIDEyNiwgMjMsIDI1NCwgMjUxLCAyNTMsIDIzNCwgMjQ1LCAxNzAsIDI0MiwgMTYyLCAyMjIsIDEyNiwgMjMsIDI1NCwgCisgICAgMjUxLCAyNTMsIDIzNCwgMTMxLCAyMjEsIDIzMiwgMjIyLCAxMjYsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDI0NSwgMTcwLCAKKyAgICAyMjEsIDIzMiwgMjIyLCAxMjYsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDI0NSwgMTcwLCAyMjMsIDE1MywgMjMsIDI1NCwgCisgICAgMjUxLCAyNTMsIDIzNCwgMjIyLCA2NiwgMjIzLCAxNTMsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDI0NSwgMTk3LCAyMjMsIAorICAgIDE1MywgMjMsIDI1NCwgMjUxLCAyNTMsIDIzNCwgMTMxLCAyNDIsIDE2MiwgMjIzLCAxNTMsIDIzLCAyNTQsIDI1MSwgMjUzLCAKKyAgICAyMzQsIDI0NSwgMTcwLCAyNDIsIDE2MiwgMjIzLCAxNTMsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDEzMSwgMjIxLCAyMzIsIAorICAgIDIyMywgMTUzLCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAyMjIsIDY2LCAyMjEsIDIzMiwgMjIzLCAxNTMsIDIzLCAyNTQsIAorICAgIDI1MSwgMjUzLCAyMzQsIDI0NSwgMTk3LCAyMjEsIDIzMiwgMjIzLCAxNTMsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDIyMiwgCisgICAgNjYsIDIzMywgMTM5LCAyMywgMjU0LCAyNTEsIDI0MywgMTM0LCAxMzEsIDIyOSwgNDksIDIzLCAyNTQsIDI1MSwgMjIyLCA4LCAKKyAgICAxMDcsIDIzLCAyNTQsIDI1MSwgMjQzLCAxMzIsIDEwNywgMjMsIDI1NCwgMjUxLCAyNDYsIDE1OSwgMTAzLCAyMywgMjU0LCAKKyAgICAyNTEsIDIyMiwgOCwgMTAzLCAyMywgMjU0LCAyNTEsIDI1MCwgNTEsIDEyNCwgMjQ3LCAxMjUsIDIzLCAyNTQsIDI1MSwgCisgICAgMjQ2LCAxNTksIDEyNCwgMjQ3LCAxMjUsIDIzLCAyNTQsIDI1MSwgMjIxLCA3MSwgMTc0LCAyMywgMjU0LCAyNTEsIDIyMSwgCisgICAgNzEsIDIyMiwgNjUsIDIzLCAyNTQsIDI1MSwgMjIxLCA3MSwgMjIyLCA2NiwgMjU0LCAxNDQsIDE3LCAyMywgMjU0LCAyNTEsIAorICAgIDI0MywgMTMyLCAyMjIsIDY1LCAyMywgMjU0LCAyNTEsIDIzMywgMjQwLCAyMjIsIDY1LCAyMywgMjU0LCAyNTEsIDIyMiwgOCwgCisgICAgMjIyLCA2NSwgMjMsIDI1NCwgMjUxLCAyMjIsIDgsIDIyMSwgMjQ1LCAyMywgMjU0LCAyNTEsIDIyMSwgNzEsIDI0NSwgMTk2LCAKKyAgICAyMywgMjU0LCAyNTEsIDIyMSwgNzEsIDI0NSwgMTk3LCAyNTQsIDE0NCwgMTcsIDIzLCAyNTQsIDI1MSwgMjQzLCAxMzIsIAorICAgIDI0NSwgMTk2LCAyMywgMjU0LCAyNTEsIDIyMiwgOCwgMjQ1LCAxOTYsIDIzLCAyNTQsIDI1MSwgMjIyLCA4LCAxMzEsIDI0MiwgCisgICAgMTYxLCAyMywgMjU0LCAyNTEsIDIyMiwgOCwgMTQ4LCAyNDIsIDE2MSwgMjMsIDI1NCwgMjUxLCAyNDYsIDE1OSwgMjQ1LCAKKyAgICAxNzAsIDI0MiwgMTYxLCAyMywgMjU0LCAyNTEsIDIyMSwgNzEsIDI0NSwgMTcwLCAyNDIsIDE2MSwgMjMsIDI1NCwgMjUxLCAKKyAgICAyMjIsIDgsIDI0NSwgMTcwLCAyNDIsIDE2MSwgMjMsIDI1NCwgMjUxLCAyNTEsIDEyNiwgMjQ1LCAxNzAsIDI0MiwgMTYxLCAKKyAgICAyMywgMjU0LCAyNTEsIDIzMiwgMjAwLCAyNDUsIDE3MCwgMjQyLCAxNjEsIDIzLCAyNTQsIDI1MSwgMjIyLCA4LCAxMzEsIAorICAgIDIyMSwgMjMxLCAyMywgMjU0LCAyNTEsIDIyMiwgOCwgMjQ1LCAxNzAsIDIyMSwgMjMxLCAyMywgMjU0LCAyNTEsIDI0OSwgCisgICAgNjUsIDI0NSwgMTcwLCAyMzMsIDEzOSwgMjMsIDI1NCwgMjUxLCAyMjMsIDEyNywgMjQ1LCAxOTcsIDIzMywgMTM5LCAyMywgCisgICAgMTMxLCAxNDQsIDU1LCAyMywgMTMxLCAxNDQsIDUsIDI1NCwgMTQ0LCAxNywgMjMsIDEyNCwgMjIxLCAyNTAsIDU1LCAyMywgCisgICAgMTQ4LCAyMjgsIDg4LCA1NSwgMjMsIDIxOCwgMjMsIDU1LCAyMywgMjIyLCAxMjcsIDU1LCAyMywgMjQ3LCAxMjcsIDU1LCAKKyAgICAyMywgMjMwLCAxNzUsIDU1LCAyMywgMTI0LCAyMzAsIDE3NCwgNTUsIDIzLCAxNDgsIDIzMCwgMTc0LCA1NSwgMjMsIDI0NSwgCisgICAgMTE2LCAyMzAsIDE3NCwgNTUsIDIzLCAyNDUsIDE3MCwgMjMwLCAxNzQsIDU1LCAyMywgMjMzLCAyMzUsIDU1LCAyMywgMjM1LCAKKyAgICAyMTAsIDI1MiwgMTkwLCA1NSwgMjMsIDIzNSwgMjYsIDU1LCAyMywgMjMwLCA4NCwgNTUsIDIzLCAyMTgsIDEzMiwgNTUsIAorICAgIDIzLCAyNTQsIDE2LCA1NSwgMjMsIDI1NCwgMjcsIDU1LCAyMywgMjQ0LCA0MiwgNTUsIDIzLCAyMjEsIDU4LCAyNTIsIDE5MCwgCisgICAgNTUsIDIzLCAyMTcsIDg1LCA1NSwgMjI3LCA2OCwgMjI1LCAzNSwgNTUsIDIyNywgNjgsIDIyMCwgODMsIDU1LCAyMjcsIDY4LCAKKyAgICAyMjUsIDU5LCA1NSwgMjI3LCA2OCwgMjI1LCAzMywgNTUsIDIyNywgNjgsIDI0OCwgMjI2LCAyMjUsIDMzLCA1NSwgMjI3LCAKKyAgICA2OCwgMjI0LCAxMjAsIDU1LCAyMjcsIDY4LCAyNDksIDYxLCA1NSwgMjI3LCA2OCwgMjI4LCA3NiwgNTUsIDIyNywgNjgsIAorICAgIDIyNSwgNDcsIDU1LCAyMjcsIDY4LCAyNDcsIDkzLCA1NSwgMjI3LCA2OCwgMjU0LCAxNCwgNTUsIDIyNywgNjgsIDI1MSwgCisgICAgODEsIDU1LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIyOSwgMTkyLCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIyOSwgNDQsIAorICAgIDI0MywgMTU5LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIyMiwgMTA5LCAyNDMsIDE1OSwgMjI5LCAxMzcsIDI0OCwgMjA1LCAKKyAgICA1LCAyNTEsIDEzOSwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNTEsIDI0LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIxOCwgCisgICAgMTgzLCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDI0MywgMTQwLCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDI0NCwgMjEwLCAKKyAgICAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIyMSwgMjA0LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDY1LCAyMjksIDEzNywgCisgICAgMjQ4LCAyMDUsIDUsIDI1MiwgMjQsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjI0LCAyMTgsIDIyOSwgMTM3LCAyNDgsIAorICAgIDIwNSwgNSwgMjUwLCAxODcsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjM0LCA4NSwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAKKyAgICAyMzQsIDQ4LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIyNiwgMTIyLCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIzNSwgNjQsIAorICAgIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjUyLCAzMywgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNTEsIDEyOSwgMjI5LCA1MSwgCisgICAgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNDgsIDE1NiwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNTAsIDE3MiwgMjI5LCAKKyAgICAxMzcsIDI0OCwgMjA1LCA1LCAyMjQsIDUwLCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDI1MCwgMTczLCAyMjksIDEzNywgCisgICAgMjQ4LCAyMDUsIDUsIDI1MiwgMTM0LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIyNCwgMjA2LCAyMjksIDEzNywgMjQ4LCAKKyAgICAyMDUsIDUsIDI0MiwgMTg5LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDI0MywgMTExLCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIAorICAgIDI1MSwgMjQwLCAyMzUsIDEwNiwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNTEsIDEyNCwgMjI5LCAxMzcsIDI0OCwgMjA1LCAKKyAgICA1LCAyMjcsIDIzOSwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNDcsIDEzLCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDI0NywgCisgICAgMTMzLCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIyMCwgMjQ3LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDI1MiwgMTM3LCAKKyAgICAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIyOSwgNTIsIDIyMSwgOTgsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjE5LCA4NCwgCisgICAgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMjksIDI0NCwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMjcsIDYyLCAyMjksIAorICAgIDEzNywgMjQ4LCAyMDUsIDUsIDIzNSwgNTIsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjMwLCA2OSwgMjUyLCAyMzMsIDIyOSwgCisgICAgMTM3LCAyNDgsIDIwNSwgNSwgMjQ1LCAxNDMsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjQ0LCAzOCwgMjI5LCAxMzcsIAorICAgIDI0OCwgMjA1LCA1LCAyMjMsIDEyOCwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAzLCAyNTMsIDIxMywgMjI5LCAxMzcsIDI0OCwgCisgICAgMjA1LCA1LCAyMTgsIDIzNSwgMjUyLCAyMDYsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMzYsIDIzMCwgMTc3LCA5MiwgMjM0LCAKKyAgICAxOTcsIDEsIDYwLCAyMzQsIDE5NywgMSwgNzMsIDIzNCwgMTk3LCAxLCAyNTMsIDIwNCwgMjM0LCAxOTcsIDEsIDI1MiwgOTUsIAorICAgIDIzNCwgMTk3LCAxLCAyNDUsIDY3LCAyMzQsIDE5NywgMSwgMjUwLCA0NiwgMjM0LCAxOTcsIDEsIDcyLCAyMzQsIDE5NywgMSwgCisgICAgMjE5LCA0MCwgMjM0LCAxOTcsIDEsIDIxNywgMTU3LCAyMzQsIDE5NywgMSwgMjIyLCAzNywgMjM0LCAxOTcsIDEsIDIzNywgCisgICAgMTI2LCAyMzQsIDE5NywgMSwgMjM3LCAxNywgMjM0LCAxOTcsIDEsIDIyOCwgMTYzLCAyMzQsIDE5NywgMSwgMTUzLCAyMzQsIAorICAgIDE5NywgMSwgMTg5LCAyMzQsIDE5NywgMSwgMjA3LCAyMzQsIDE5NywgMSwgMjMzLCAxNDAsIDIzNCwgMTk3LCAxLCAyMzEsIAorICAgIDIxOCwgMjM0LCAxOTcsIDEsIDY4LCAyMzQsIDE5NywgMSwgMjMwLCA1OSwgMjM0LCAxOTcsIDEsIDIzNiwgNzUsIDIzNCwgCisgICAgMTk3LCAxLCAxNTIsIDIzNCwgMTk3LCAxLCAxOTgsIDIzNCwgMTk3LCAxLCAyMjIsIDIwMSwgMjM0LCAxOTcsIDEsIDIyMSwgCisgICAgMzIsIDIzNCwgMTk3LCAxLCAyNTQsIDEzMSwgMjM0LCAxOTcsIDEsIDI0NiwgMTk3LCAyMzQsIDE5NywgMSwgMjQzLCAyMjUsIAorICAgIDIzNCwgMTk3LCAxLCAyMTgsIDE1MSwgMjUxLCAxMzMsIDEsIDYwLCAyNTEsIDEzMywgMSwgMjMwLCA0NSwgMjUxLCAxMzMsIAorICAgIDEsIDI1MCwgNDYsIDI1MSwgMTMzLCAxLCAxNTMsIDI1MSwgMTMzLCAxLCAyMjAsIDIxLCAyNTEsIDEzMywgMSwgMTUyLCAKKyAgICAyNTEsIDEzMywgMSwgMjM1LCAxMjYsIDI1MSwgMTMzLCAxLCAyNTUsIDYwLCAyNTEsIDEzMywgMSwgMjI4LCAxNjMsIDI1MSwgCisgICAgMTMzLCAxLCAyNTMsIDIwNCwgMjUxLCAxMzMsIDEsIDE4OSwgMjUxLCAxMzMsIDEsIDc0LCAyNTEsIDEzMywgMSwgMjQ5LCAKKyAgICAyMDksIDI1MSwgMTMzLCAxLCAyMjIsIDIwMSwgMjUxLCAxMzMsIDEsIDIyNSwgMjcsIDI1MSwgMTMzLCAxLCAyMjUsIDI2LCAKKyAgICAyNTEsIDEzMywgMSwgMTk4LCAyNTEsIDEzMywgMSwgMjUxLCAyMDEsIDI1MSwgMTMzLCAxLCA2OCwgMjUxLCAxMzMsIDEsIAorICAgIDIzMSwgMjE4LCAyNTEsIDEzMywgMSwgMjE4LCAxNTEsIDI1MSwgMTMzLCAxLCAyMDcsIDI1MSwgMTMzLCAxLCAyMjEsIDMxLCAKKyAgICAyNTEsIDEzMywgMSwgMjMwLCA1OSwgMjUxLCAxMzMsIDEsIDIyMywgMjE5LCAyNTEsIDEzMywgMSwgNzIsIDI1MSwgMTMzLCAKKyAgICAxLCA3MywgMjUxLCAxMzMsIDEsIDIyMCwgMTgsIDI1MSwgMTMzLCAxLCAyMzcsIDE3LCAyNTEsIDEzMywgMSwgMjM3LCA4LCAKKyAgICAyNTEsIDEzMywgMSwgMjMyLCAxNzAsIDI1MSwgMTMzLCAxLCAyMjAsIDIzLCAyNTEsIDEzMywgMSwgMjQ1LCA2NywgMjUxLCAKKyAgICAxMzMsIDEsIDI0NSwgMiwgMjUxLCAxMzMsIDEsIDIyMywgMTY4LCAyNTEsIDEzMywgMSwgMjIzLCAxNjcsIDI1MSwgMTMzLCAKKyAgICAxLCAyMzIsIDExNywgMjUxLCAxMzMsIDEsIDIzNywgMjU1LCAyNTEsIDEzMywgMSwgMjUxLCAyMDAsIDI1MSwgMTMzLCAxLCAKKyAgICAyMjEsIDMyLCAyNTEsIDEzMywgMSwgMjIwLCAyMCwgMjUxLCAxMzMsIDEsIDIyNywgNTMsIDI1MSwgMTMzLCAxLCAyMzQsIAorICAgIDQxLCAyNTEsIDEzMywgMSwgMjM0LCA0MCwgMjUxLCAxMzMsIDEsIDIzNCwgMzksIDI1MSwgMTMzLCAxLCAyMzQsIDM4LCAKKyAgICAyNTEsIDEzMywgMSwgMjM1LCAxMjUsIDI1MSwgMTMzLCAxLCAyNDcsIDE3LCAyNTEsIDEzMywgMSwgMjIwLCAxOSwgNDgsIAorICAgIDMwLCAxLCA2MCwgNDgsIDMwLCAxLCAyNTIsIDE0NCwgNDgsIDMwLCAxLCAyMzYsIDE4NCwgNDgsIDMwLCAxLCAyNDksIDkyLCAKKyAgICA0OCwgMzAsIDEsIDczLCA0OCwgMzAsIDEsIDIxOSwgMTY1LCA0OCwgMzAsIDEsIDIxNywgOTIsIDQ4LCAzMCwgMSwgMjQzLCAKKyAgICAxNjIsIDQ4LCAzMCwgMSwgMjIyLCAyMiwgNDgsIDMwLCAxLCA3MiwgNDgsIDMwLCAxLCAxNzUsIDQ4LCAzMCwgMSwgMjQ2LCAKKyAgICAyMTcsIDQ4LCAzMCwgMSwgMjQ2LCAyMDUsIDQ4LCAzMCwgMSwgMjQ2LCAxOTcsIDQ4LCAzMCwgMSwgMjQ2LCAxMzMsIDQ4LCAKKyAgICAzMCwgMSwgNzQsIDQ4LCAzMCwgMSwgMjI5LCAxOTgsIDQ4LCAzMCwgMSwgMjI0LCAyNDYsIDQ4LCAzMCwgMSwgMjM2LCA3LCAKKyAgICA0OCwgMzAsIDEsIDI0NiwgMTQ4LCA0OCwgMzAsIDEsIDI0NiwgMTM4LCA0OCwgMzAsIDEsIDIyMiwgODcsIDQ4LCAzMCwgMSwgCisgICAgNjgsIDQ4LCAzMCwgMSwgMjQ2LCAyMjAsIDQ4LCAzMCwgMSwgMjI5LCAxMzIsIDQ4LCAzMCwgMSwgMjM2LCAxMzcsIDQ4LCAKKyAgICAzMCwgMSwgMjQ2LCAyNDQsIDQ4LCAzMCwgMSwgMjQ2LCAxNDAsIDQ4LCAzMCwgMSwgMjUxLCA0NiwgNDgsIDMwLCAxLCAyMzcsIAorICAgIDI1NSwgNDgsIDMwLCAxLCAyMjAsIDIzLCA0OCwgMzAsIDIzMSwgMTA3LCAxMDcsIDQ4LCAzMCwgMjMxLCAxMDcsIDE3NCwgCisgICAgNDgsIDMwLCAyMzEsIDEwNywgMjIyLCA2NSwgNDgsIDMwLCAyMzEsIDEwNywgMjQ1LCAxOTYsIDI0NCwgNTAsIDEsIDI1NCwgCisgICAgMTk5LCAyNDQsIDUwLCAxLCAyNTIsIDIxOSwgMjQ0LCA1MCwgMSwgMjQ0LCAxMDAsIDI0NCwgNTAsIDEsIDI0OSwgMTkxLCAKKyAgICAyNDQsIDUwLCAxLCAyNTQsIDE5NSwgMjQ0LCA1MCwgMSwgMjI4LCAxNDYsIDI0NCwgNTAsIDEsIDIzNywgMTM2LCAyNDQsIAorICAgIDUwLCAxLCAyNDMsIDIwNCwgMjQ0LCA1MCwgMSwgMjIxLCAyNDEsIDI0NCwgNTAsIDEsIDI0NiwgMjI2LCAyNDQsIDUwLCAxLCAKKyAgICAyMzUsIDI0MSwgMjQ0LCA1MCwgMSwgMjM1LCAxNzAsIDI0NCwgNTAsIDEsIDIzNCwgODIsIDI0NCwgNTAsIDEsIDIzMiwgCisgICAgMjAyLCAyNDQsIDUwLCAxLCAyMzcsIDEwOCwgMjQ0LCA1MCwgMSwgMjIwLCAzNywgMjQ0LCA1MCwgMSwgMjMwLCAzMSwgMjQ0LCAKKyAgICA1MCwgMSwgMjMyLCAyNywgMjQ0LCA1MCwgMSwgMjI3LCAyNDUsIDI0NCwgNTAsIDEsIDIyNiwgMTIzLCAyNDQsIDUwLCAxLCAKKyAgICAyMjIsIDc0LCAyNDQsIDUwLCAxLCAyMTgsIDE5MSwgMjQ0LCA1MCwgMSwgMjQ1LCAyNDksIDI0NCwgNTAsIDEsIDIzOCwgMywgCisgICAgMjQ0LCA1MCwgMSwgMjQyLCAxNTIsIDI0NCwgNTAsIDEsIDIzMCwgOTEsIDI0NCwgNTAsIDEsIDIzMiwgMzEsIDI0MiwgMTYxLCAKKyAgICAyMjAsIDEwNiwgMSwgMjU0LCAxNTAsIDIyMCwgMTA2LCAxLCAyNTIsIDEwMiwgMjIwLCAxMDYsIDEsIDI0NCwgMjMyLCAyMjAsIAorICAgIDEwNiwgMSwgMjM2LCAxNDksIDIyMCwgMTA2LCAxLCAyNDksIDYyLCAyMjAsIDEwNiwgMSwgMjQzLCA0LCAyMjAsIDEwNiwgMSwgCisgICAgMjE4LCAxODcsIDIyMCwgMTA2LCAxLCAyMTcsIDgzLCAyMjAsIDEwNiwgMSwgMjQyLCAxODUsIDIyMCwgMTA2LCAxLCAyMjIsIAorICAgIDUwLCAyMjAsIDEwNiwgMSwgMjE3LCAyMjAsIDIyMCwgMTA2LCAxLCAyMzYsIDI0NiwgMjIwLCAxMDYsIDEsIDIyNCwgMjA5LCAKKyAgICAyMjAsIDEwNiwgMSwgMjM1LCAxNTYsIDIyMCwgMTA2LCAxLCAyMzQsIDEsIDIyMCwgMTA2LCAxLCAyNDksIDMzLCAyMjAsIAorICAgIDEwNiwgMSwgMjMxLCAxMDMsIDIyMCwgMTA2LCAxLCAyMTcsIDEzLCAyMjAsIDEwNiwgMSwgMjI2LCAxNDQsIDIyMCwgMTA2LCAKKyAgICAxLCAyNTQsIDE5MSwgMjIwLCAxMDYsIDEsIDIyOCwgMjAyLCAyMjAsIDEwNiwgMSwgMjI2LCAxNjksIDIyMCwgMTA2LCAxLCAKKyAgICAyMjgsIDEwMywgMjIwLCAxMDYsIDEsIDIyNywgMjMxLCAyMjAsIDEwNiwgMSwgMjIyLCAyNiwgMjIwLCAxMDYsIDEsIDI0NCwgCisgICAgMTIyLCAyMjAsIDEwNiwgMSwgMTAxLCAyMjAsIDEwNiwgMSwgNzIsIDIyMCwgMTA2LCAxLCA2OCwgMjIwLCAxMDYsIDEsIAorICAgIDIyMywgMTc4LCAyMjAsIDEwNiwgMjE4LCAxNzQsIDI0OCwgMTkxLCA0OCwgMjI5LCAxNTksIDUsIDYwLCA0OCwgMjI5LCAKKyAgICAxNTksIDUsIDcyLCA0OCwgMjI5LCAxNTksIDUsIDY4LCA0OCwgMjI5LCAxNTksIDUsIDE3NSwgNDgsIDIyOSwgMTU5LCA1LCAKKyAgICAyMzYsIDcsIDQ4LCAyMjksIDE1OSwgNSwgMjQ1LCAwLCA0OCwgMjI5LCAxNTksIDUsIDI0NCwgMTcsIDQ4LCAyMjksIDE1OSwgCisgICAgNSwgMjE4LCAxMzgsIDQ4LCAyMjksIDE1OSwgNSwgMjUxLCAxNjksIDQ4LCAyMjksIDE1OSwgNSwgMjM3LCAxMjMsIDQ4LCAKKyAgICAyMjksIDE1OSwgNSwgMjM3LCA5OCwgNDgsIDIyOSwgMTU5LCA1LCAyMjIsIDE1NSwgNDgsIDIyOSwgMTU5LCA1LCAyMjEsIDAsIAorICAgIDQ4LCAyMjksIDE1OSwgNSwgMjQ5LCAyMDcsIDQ4LCAyMjksIDE1OSwgNSwgMjQ5LCAxNSwgNDgsIDIyOSwgMTU5LCA1LCAKKyAgICAyNDcsIDExMSwgNDgsIDIyOSwgMTU5LCA1LCAyMjIsIDM1LCA0OCwgMjI5LCAxNTksIDUsIDE4NywgNDgsIDIyOSwgMTU5LCAKKyAgICA1LCAyNTIsIDIzNywgNDgsIDIyOSwgMTU5LCA1LCAyNDYsIDgsIDQ4LCAyMjksIDE1OSwgNSwgMjA4LCA0OCwgMjI5LCAxNTksIAorICAgIDUsIDIzMSwgMTQ0LCA0OCwgMjI5LCAxNTksIDUsIDE5NiwgNDgsIDIyOSwgMTU5LCA1LCAyMzMsIDE5NiwgNDgsIDIyOSwgCisgICAgMTU5LCA1LCAyMzMsIDk5LCA0OCwgMjI5LCAxNTksIDUsIDE4NCwgNDgsIDIyOSwgMTU5LCA1LCAyMTksIDE4OSwgNDgsIAorICAgIDIyOSwgMTU5LCA1LCAyMTksIDk0LCA0OCwgMjI5LCAxNTksIDUsIDIwMywgNDgsIDIyOSwgMTU5LCA1LCAyMjcsIDIyLCA0OCwgCisgICAgMjI5LCAxNTksIDUsIDIzNSwgMTg4LCA0OCwgMjI5LCAxNTksIDUsIDIyNiwgMTc3LCA0OCwgMjI5LCAxNTksIDUsIDIxNywgCisgICAgMTE0LCA0OCwgMjI5LCAxNTksIDUsIDIyNSwgMjUsIDQ4LCAyMjksIDE1OSwgNSwgMjIzLCAyMTgsIDQ4LCAyMjksIDE1OSwgCisgICAgNSwgMTU1LCA0OCwgMjI5LCAxNTksIDUsIDI1MywgMjI3LCA0OCwgMjI5LCAxNTksIDUsIDI1MywgMjI2LCA0OCwgMjI5LCAKKyAgICAxNTksIDUsIDI1MywgMjI1LCA0OCwgMjI5LCAxNTksIDUsIDIxOCwgMTE1LCA0OCwgMjI5LCAxNTksIDUsIDI0OSwgMTg4LCAKKyAgICA0OCwgMjI5LCAxNTksIDUsIDI0OSwgMTg3LCA0OCwgMjI5LCAxNTksIDUsIDI1MiwgMjI0LCA0OCwgMjI5LCAxNTksIDUsIAorICAgIDI1MSwgMjIwLCA0OCwgMjI5LCAxNTksIDIxOCwgMTc0LCAyNDgsIDE5MSwgNDgsIDIyOSwgMTU5LCA1NCwgMTA3LCA0OCwgCisgICAgMjI5LCAxNTksIDU0LCAxMDMsIDQ4LCAyMjksIDE1OSwgNTQsIDIyMiwgNjUsIDQ4LCAyMjksIDE1OSwgNTQsIDIyMCwgMjE5LCAKKyAgICA0OCwgMjI5LCAxNTksIDU0LCAyNDIsIDE2MSwgMTYxLCA2LCAxLCAxNzEsIDcyLCAxNjEsIDYsIDEsIDE3MSwgNzMsIDE2MSwgCisgICAgNiwgMSwgMTcxLCA2MCwgMTYxLCA2LCAxLCAxNzEsIDI1NCwgMjAyLCAxNjEsIDYsIDEsIDE3MSwgNzQsIDE2MSwgNiwgMSwgCisgICAgMTcxLCAyMzAsIDEyNywgMTYxLCA2LCAxLCAyMjQsIDE5MiwgNzIsIDE2MSwgNiwgMSwgMjI0LCAxOTIsIDczLCAxNjEsIDYsIAorICAgIDEsIDIyNCwgMTkyLCA2MCwgMTYxLCA2LCAxLCAyMjQsIDE5MiwgMjU0LCAyMDIsIDE2MSwgNiwgMSwgMjI0LCAxOTIsIDc0LCAKKyAgICAxNjEsIDYsIDEsIDIyNCwgMTkyLCAyMzAsIDEyNywgMTYxLCA2LCAxLCAyNTMsIDIxMiwgMTYxLCA2LCAxLCAyMzAsIDcwLCAKKyAgICAxNjEsIDYsIDEsIDIxOCwgMTY1LCAxNjEsIDYsIDEsIDIxOCwgMjIsIDE2MSwgNiwgMSwgMjQzLCAyMjUsIDE2MSwgNiwgMSwgCisgICAgMjI5LCAxOTEsIDE2MSwgNiwgMSwgMjUyLCAxMzcsIDE2MSwgNiwgMSwgMjIyLCA4MCwgMTYxLCA2LCAxLCAyNDksIDgyLCAKKyAgICAxNjEsIDYsIDEsIDI1MSwgNDMsIDE2MSwgNiwgMSwgMjM3LCAxMTMsIDE2MSwgNiwgMSwgMjM2LCAxOTEsIDE2MSwgNiwgMSwgCisgICAgMjQ0LCAyMDgsIDE2MSwgNiwgMSwgMjQ2LCAyNDQsIDE2MSwgNiwgMSwgMjE5LCAxNjAsIDE2MSwgNiwgMSwgMjQ2LCAxMTgsIAorICAgIDE2MSwgNiwgMSwgMjIyLCAyMSwgMTYxLCA2LCAxLCAyNDYsIDEzOCwgMTYxLCA2LCAxLCAyMTcsIDkwLCAxNjEsIDYsIDEsIAorICAgIDI0NiwgMTMzLCAxNjEsIDYsIDEsIDIxNywgNzEsIDE2MSwgNiwgMSwgMjQ2LCAxNDgsIDE2MSwgNiwgMSwgMjQ2LCAyMTcsIAorICAgIDE2MSwgNiwgMSwgMjQ2LCAyMDUsIDE2MSwgNiwgMSwgMjQ2LCAxOTcsIDE2MSwgNiwgMSwgMjQ2LCAxODUsIDE2MSwgNiwgMSwgCisgICAgMjMwLCAxNTgsIDE2MSwgNiwgMSwgMjQ2LCAxMDEsIDE2MSwgMywgMSwgMTcxLCA3MiwgMTYxLCAzLCAxLCAxNzEsIDczLCAKKyAgICAxNjEsIDMsIDEsIDE3MSwgNjAsIDE2MSwgMywgMSwgMTcxLCAyNTQsIDIwMiwgMTYxLCAzLCAxLCAxNzEsIDc0LCAxNjEsIDMsIAorICAgIDEsIDE3MSwgMjMwLCAxMjcsIDE2MSwgMywgMSwgMjI0LCAxOTIsIDcyLCAxNjEsIDMsIDEsIDIyNCwgMTkyLCA3MywgMTYxLCAKKyAgICAzLCAxLCAyMjQsIDE5MiwgNjAsIDE2MSwgMywgMSwgMjI0LCAxOTIsIDI1NCwgMjAyLCAxNjEsIDMsIDEsIDIyNCwgMTkyLCAKKyAgICA3NCwgMTYxLCAzLCAxLCAyMjQsIDE5MiwgMjMwLCAxMjcsIDE2MSwgMywgMSwgMjUzLCAyMTIsIDE2MSwgMywgMSwgMjMwLCAKKyAgICA3MCwgMTYxLCAzLCAxLCAyMTgsIDE2NSwgMTYxLCAzLCAxLCAyMTgsIDIyLCAxNjEsIDMsIDEsIDI0MywgMjI1LCAxNjEsIDMsIAorICAgIDEsIDIyOSwgMTkxLCAxNjEsIDMsIDEsIDI1MiwgMTM3LCAxNjEsIDMsIDEsIDIyMiwgODAsIDE2MSwgMywgMSwgMjQ5LCA4MiwgCisgICAgMTYxLCAzLCAxLCAyNTEsIDQzLCAxNjEsIDMsIDEsIDIzNywgMTEzLCAxNjEsIDMsIDEsIDIzNiwgMTkxLCAxNjEsIDMsIDEsIAorICAgIDI0NCwgMjA4LCAxNjEsIDMsIDEsIDI0NiwgMjQ0LCAxNjEsIDMsIDEsIDIxOSwgMTYwLCAxNjEsIDMsIDEsIDI0NiwgMTE4LCAKKyAgICAxNjEsIDMsIDEsIDIyMiwgMjEsIDE2MSwgMywgMSwgMjQ2LCAxMzgsIDE2MSwgMywgMSwgMjE3LCA5MCwgMTYxLCAzLCAxLCAKKyAgICAyNDYsIDEzMywgMTYxLCAzLCAxLCAyMTcsIDcxLCAxNjEsIDMsIDEsIDI0NiwgMTQ4LCAxNjEsIDMsIDEsIDI0NiwgMjE3LCAKKyAgICAxNjEsIDMsIDEsIDI0NiwgMjA1LCAxNjEsIDMsIDEsIDI0NiwgMTk3LCAxNjEsIDMsIDEsIDI0NiwgMTg1LCAxNjEsIDMsIDEsIAorICAgIDIzMCwgMTU4LCAxNjEsIDMsIDEsIDI0NiwgMTAxLCAyMjQsIDI1MiwgMSwgMjI5LCAxOTAsIDIyNCwgMjUyLCAxLCAyMjEsIAorICAgIDExMywgMjI0LCAyNTIsIDEsIDIzNiwgMTEyLCAyMjQsIDI1MiwgMSwgMjQ1LCAyMjYsIDIyNCwgMjUyLCAxLCAyMjEsIDI1NSwgCisgICAgMjI0LCAyNTIsIDEsIDIyNCwgMjYsIDIyNCwgMjUyLCAxLCAyMjMsIDUwLCAyMjQsIDI1MiwgMSwgMjUwLCAyNDUsIDIyNCwgCisgICAgMjUyLCAxLCAyMTgsIDI0LCAyMjQsIDI1MiwgMSwgMjQyLCAxNjAsIDIyNCwgMjUyLCAxLCAyNTIsIDgzLCAyMjQsIDI1MiwgCisgICAgMSwgMjQ5LCA5MSwgMjI0LCAyNTIsIDEsIDI0NCwgMjQyLCAyMjQsIDI1MiwgMSwgMjE5LCA2MCwgMjI0LCAyNTIsIDEsIAorICAgIDIyMiwgMywgMjI0LCAyNTIsIDEsIDIxNywgMTksIDIyNCwgMjUyLCAxLCAyMzQsIDIzLCAyMjQsIDI1MiwgMSwgMjM3LCA0MSwgCisgICAgMjI0LCAyNTIsIDEsIDIxOCwgMTg1LCAyMjQsIDI1MiwgMSwgMjQzLCAyMTMsIDIyNCwgMjUyLCAxLCAyMzUsIDMsIDIyNCwgCisgICAgMjUyLCAxLCAyMzMsIDE2MCwgMjI0LCAyNTIsIDEsIDIzOCwgNiwgMjI0LCAyNTIsIDEsIDI0NiwgMjQzLCAyMjQsIDI1MiwgCisgICAgMSwgMjU0LCA3LCAyMjQsIDI1MiwgMSwgMjU0LCAyMzcsIDIyNCwgMjUyLCAxLCAyMzAsIDEzOCwgMjI0LCAyNTIsIDEsIAorICAgIDIxOCwgMTc3LCAyMjQsIDI1MiwgMSwgMjMwLCA4MywgMjI0LCAyNTIsIDEsIDI1NCwgMjAyLCAyMjQsIDI1MiwgMSwgMjI3LCAKKyAgICA3MiwgMjI0LCAyNTIsIDEsIDIzMSwgMTAzLCAyMjQsIDI1MiwgMSwgMjQ3LCAyLCAyMjQsIDI1MiwgMSwgMjU0LCAyMDcsIAorICAgIDIyNCwgMjUyLCAxLCAyNDIsIDY1LCAyMjQsIDI1MiwgMSwgMjIwLCA2MywgMjI0LCAyNTIsIDEsIDIzMCwgMTgzLCAyMjQsIAorICAgIDI1MiwgMSwgMjMwLCAxMjEsIDIyNCwgMjUyLCAxLCAyMzAsIDE1NywgMjI0LCAyNTIsIDEsIDI1MywgMjE1LCAyMjQsIDI1MiwgCisgICAgMSwgMjU0LCA0NSwgMjI0LCAyNTIsIDEsIDIzMCwgMTA1LCAyMjQsIDI1MiwgMSwgMjU0LCAxODgsIDIyNCwgMjUyLCAxLCAKKyAgICAyNDYsIDE0MiwgMjI0LCAyNTIsIDEsIDI1NCwgMjQsIDIyNCwgMjUyLCAxLCAyNDcsIDExLCAyMjQsIDI1MiwgMSwgMjQyLCAKKyAgICA3MSwgMjI0LCAyNTIsIDEsIDIxNywgMjU1LCAyMzAsIDkzLCAxLCAyNTQsIDE2OCwgMjMwLCA5MywgMSwgMjUyLCAyMzcsIAorICAgIDIzMCwgOTMsIDEsIDIyMiwgMTU1LCAyMzAsIDkzLCAxLCAyMzcsIDEyMywgMjMwLCA5MywgMSwgMjE4LCAxMzgsIDIzMCwgCisgICAgOTMsIDEsIDIzNiwgMTQ5LCAyMzAsIDkzLCAxLCAyNDksIDgxLCAyMzAsIDkzLCAxLCAyMDMsIDIzMCwgOTMsIDEsIDIyNiwgCisgICAgMTc3LCAyMzAsIDkzLCAxLCAyMjQsIDIxNSwgMjMwLCA5MywgMSwgMjQ5LCAzNiwgMjMwLCA5MywgMSwgMjUxLCAxMTYsIAorICAgIDIzMCwgOTMsIDEsIDI0NSwgMCwgMjMwLCA5MywgMSwgMjQ2LCA4LCAyMzAsIDkzLCAxLCAyMjgsIDE1MywgMjMwLCA5MywgMSwgCisgICAgMjM3LCA0LCAyMzAsIDkzLCAxLCAyMzUsIDE4NCwgMjMwLCA5MywgMSwgMjMzLCAxNzAsIDIzMCwgOTMsIDEsIDIzMSwgODksIAorICAgIDIzMCwgOTMsIDEsIDIxOCwgMjMzLCAyMzAsIDkzLCAxLCAxNTUsIDIzMCwgOTMsIDEsIDE4NCwgMjMwLCA5MywgMSwgNjAsIAorICAgIDIzMCwgOTMsIDEsIDczLCAyMzAsIDkzLCAxLCA3MiwgMjMwLCA5MywgMSwgNzQsIDIzMCwgOTMsIDEsIDY4LCAyMzAsIDkzLCAKKyAgICAxLCAyNTUsIDU4LCAyMzAsIDkzLCAxLCAyNDYsIDI1MCwgMjMwLCA5MywgMSwgMjMwLCAxMjcsIDIzMCwgOTMsIDIwLCAyMTcsIAorICAgIDg0LCAyMzAsIDkzLCAyMCwgMTA3LCAyMzAsIDkzLCAyMCwgMTAzLCAyMzAsIDkzLCAyMCwgMTYwLCAyMzAsIDkzLCAyMCwgCisgICAgMTU0LCAyMzAsIDkzLCAyMCwgMTc0LCAyMzAsIDkzLCAyMCwgMTgyLCAyMzAsIDkzLCAyMCwgMTkxLCAyMzAsIDkzLCAyMCwgCisgICAgMTg1LCAyMzAsIDkzLCAyMCwgMTkwLCAyNTAsIDUzLCA0LCA2MCwgMjUwLCA1MywgNCwgNzMsIDI1MCwgNTMsIDQsIDcyLCAKKyAgICAyNTAsIDUzLCA0LCA3NCwgMjUwLCA1MywgNCwgNjgsIDI1MCwgNTMsIDQsIDIzNywgMTIzLCAyNTAsIDUzLCA0LCAyMzcsIAorICAgIDU5LCAyNTAsIDUzLCA0LCAxNzUsIDI1MCwgNTMsIDQsIDIzNiwgMTg0LCAyNTAsIDUzLCA0LCAyMzYsIDExMywgMjUwLCA1MywgCisgICAgNCwgMjM2LCA1NywgMjUwLCA1MywgNCwgMjM2LCA3LCAyNTAsIDUzLCA0LCAyMzUsIDE4OCwgMjUwLCA1MywgNCwgMjM1LCAKKyAgICAxMjIsIDI1MCwgNTMsIDQsIDIzNSwgNjcsIDI1MCwgNTMsIDQsIDIzNSwgMTIsIDI1MCwgNTMsIDQsIDIzNCwgMjMxLCAyNTAsIAorICAgIDUzLCA0LCAxOTYsIDI1MCwgNTMsIDQsIDIzNCwgMjUsIDI1MCwgNTMsIDQsIDIzMywgMTk2LCAyNTAsIDUzLCA0LCAyMzMsIAorICAgIDEzNiwgMjUwLCA1MywgNCwgMjMzLCA5OSwgMjUwLCA1MywgNCwgMjA4LCAyNTAsIDUzLCA0LCAyMzIsIDE0MSwgMjUwLCA1MywgCisgICAgNCwgMjMyLCA2MiwgMjUwLCA1MywgNCwgMjMxLCAyMDQsIDI1MCwgNTMsIDQsIDIzMSwgMTQ0LCAyNTAsIDUzLCA0LCAxODcsIAorICAgIDI1MCwgNTMsIDQsIDIyOSwgMTk4LCAyNTAsIDUzLCA0LCAyMjksIDEwOCwgMjUwLCA1MywgNCwgMjI5LCAzNywgMjUwLCA1MywgCisgICAgNCwgMjI4LCAyMDIsIDI1MCwgNTMsIDQsIDIwMywgMjUwLCA1MywgNCwgMjI3LCAyMTYsIDI1MCwgNTMsIDQsIDIyNywgMTQ3LCAKKyAgICAyNTAsIDUzLCA0LCAyMjcsIDc1LCAyNTAsIDUzLCA0LCAyMjcsIDIyLCAyNTAsIDUzLCA0LCAyMjYsIDE3NywgMjUwLCA1MywgCisgICAgNCwgMjI2LCA5NCwgMjUwLCA1MywgNCwgMjI0LCAxNDAsIDI1MCwgNTMsIDQsIDIyNCwgMjYsIDI1MCwgNTMsIDQsIDIyMywgCisgICAgMTAzLCAyNTAsIDUzLCA0LCAyMjIsIDE1NSwgMjUwLCA1MywgNCwgMjIyLCA4NywgMjUwLCA1MywgNCwgMjIxLCAyMDUsIAorICAgIDI1MCwgNTMsIDQsIDEwMSwgMjUwLCA1MywgNCwgMjIxLCAwLCAyNTAsIDUzLCA0LCAyMTksIDcsIDI1MCwgNTMsIDQsIDIxOCwgCisgICAgMjI3LCAyNTAsIDUzLCA0LCAyMTgsIDIwNCwgMjUwLCA1MywgNCwgMjE4LCAxODcsIDI1MCwgNTMsIDQsIDIxOCwgMTM4LCAKKyAgICAyNTAsIDUzLCA0LCAyMTgsIDEzNSwgMjUwLCA1MywgNCwgMjE3LCAxMTQsIDI1MCwgNTMsIDQsIDIxNywgMjEsIDIzNywgCisgICAgMjI1LCAyNTQsIDUzLCAxLCAyNTQsIDE2NiwgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIDI1MiwgMTAxLCAyMzcsIDIyNSwgMjU0LCAKKyAgICA1MywgMSwgMjQ0LCA5MSwgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIDI0OSwgMTc2LCAyMzcsIDIyNSwgMjU0LCA1MywgMSwgCisgICAgMjQzLCAxNjIsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyMTgsIDIzMywgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIDIxNywgOTUsIAorICAgIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyNDMsIDEyNiwgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIDIyMiwgNDYsIDIzNywgMjI1LCAKKyAgICAyNTQsIDUzLCAxLCAyMTcsIDIxOSwgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIDIzNiwgMjI0LCAyMzcsIDIyNSwgMjU0LCA1MywgCisgICAgMSwgMjM1LCAxNTEsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyMzQsIDEsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyMzEsIAorICAgIDEwMywgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIDIyNiwgMTQ1LCAyMzcsIDIyNSwgMjU0LCA1MywgMSwgMjUzLCAyMDcsIDIzNywgCisgICAgMjI1LCAyNTQsIDUzLCAxLCAyMjksIDE5OCwgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIDIyNiwgMTY4LCAyMzcsIDIyNSwgMjU0LCAKKyAgICA1MywgMSwgMjI4LCAxMDIsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyMjcsIDE3NCwgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIAorICAgIDIyNCwgMjA5LCAyMzcsIDIyNSwgMjU0LCA1MywgMSwgMjIyLCAxMDAsIDIzNywgMjI1LCAyNTQsIDUzLCAyMjYsIDg3LCA1NSwgCisgICAgMjM3LCAyMjUsIDI1NCwgNTMsIDU0LCAxMDcsIDIzNywgMjI1LCAyNTQsIDUzLCA1NCwgMTAzLCAyMzcsIDIyNSwgMjU0LCAKKyAgICA1MywgNTQsIDE2MCwgMjM3LCAyMjUsIDI1NCwgNTMsIDU0LCAyMjIsIDY1LCAyMzcsIDIyNSwgMjU0LCA1MywgNTQsIDIyMCwgCisgICAgMjE5LCAyMzcsIDIyNSwgMjU0LCA1MywgNTQsIDEzMSwgMjQyLCAxNjEsIDIzNywgMjI1LCAyNTQsIDUzLCA1NCwgMTMxLCAKKyAgICAyMjEsIDIzMSwgMjM3LCAyMjUsIDI1NCwgNTMsIDU0LCAyMjIsIDY2LCAyMjEsIDIzMSwgMjI5LCAxMTYsIDEsIDI1NCwgCisgICAgMTY0LCAyMjksIDExNiwgMSwgMjUyLCAxMDQsIDIyOSwgMTE2LCAxLCAyNDQsIDIzMywgMjI5LCAxMTYsIDEsIDI0OSwgNjQsIAorICAgIDIyOSwgMTE2LCAxLCAyNDMsIDE2MiwgMjI5LCAxMTYsIDEsIDIxOCwgMjM4LCAyMjksIDExNiwgMSwgMjE3LCAxMDgsIDIyOSwgCisgICAgMTE2LCAxLCAyNDMsIDEyOCwgMjI5LCAxMTYsIDEsIDIyMiwgNTAsIDIyOSwgMTE2LCAxLCAyMTcsIDIyMCwgMjI5LCAxMTYsIAorICAgIDEsIDIzNiwgMjQ2LCAyMjksIDExNiwgMSwgMjM1LCAxNTcsIDIyOSwgMTE2LCAxLCAyMzQsIDEsIDIyOSwgMTE2LCAxLCAKKyAgICAyMzEsIDEwMywgMjI5LCAxMTYsIDEsIDIyNSwgNjEsIDIyOSwgMTE2LCAxLCAyNTQsIDE5MSwgMjI5LCAxMTYsIDEsIDIyOSwgCisgICAgMTk4LCAyMjksIDExNiwgMSwgMjI2LCAxNjksIDIyOSwgMTE2LCAxLCAyMjgsIDEwNywgMjI5LCAxMTYsIDEsIDIyNywgNjEsIAorICAgIDIyOSwgMTE2LCAxLCAyMjQsIDIwOSwgMjI5LCAxMTYsIDEsIDIyMiwgMTA1LCAyMjksIDExNiwgNTQsIDEwNywgMjI5LCAKKyAgICAxMTYsIDU0LCAyMjIsIDY1LCAyMjksIDExNiwgNTQsIDIyMCwgMjE5LCAyMjksIDExNiwgNTQsIDEzMSwgMjQyLCAxNjEsIAorICAgIDIyOSwgMTE2LCA1NCwgMTAzLCAyMjksIDExNiwgNTQsIDE2MCwgMjI5LCAxMTYsIDIxOCwgMTc0LCAyMjUsIDU0LCAyMzQsIAorICAgIDE5NiwgMSwgNjAsIDIzNCwgMTk2LCAxLCAyNTMsIDIwNCwgMjM0LCAxOTYsIDEsIDI0NSwgNjcsIDIzNCwgMTk2LCAxLCAKKyAgICAyNTAsIDQ2LCAyMzQsIDE5NiwgMSwgNzMsIDIzNCwgMTk2LCAxLCAyMTYsIDIxNiwgMjM0LCAxOTYsIDEsIDcyLCAyMzQsIAorICAgIDE5NiwgMSwgMjE4LCA5MCwgMjM0LCAxOTYsIDEsIDIzNywgMTcsIDIzNCwgMTk2LCAxLCAxNTMsIDIzNCwgMTk2LCAxLCAKKyAgICAxODksIDIzNCwgMTk2LCAxLCAyMDcsIDIzNCwgMTk2LCAxLCA3NCwgMjM0LCAxOTYsIDEsIDE1MiwgMjM0LCAxOTYsIDEsIAorICAgIDIyMywgMjE5LCAyMzQsIDE5NiwgMSwgMjIyLCAyMDEsIDIzNCwgMTk2LCAxLCA2OCwgMjM0LCAxOTYsIDEsIDI0NiwgNzQsIAorICAgIDIzNCwgMTk2LCAxLCAyMjgsIDE2MywgMjM0LCAxOTYsIDEsIDE5OCwgMjM0LCAxOTYsIDEsIDIyMSwgMzIsIDIzNCwgMTk2LCAKKyAgICAxLCAyNTQsIDEzMSwgMjM0LCAxOTYsIDEsIDI0NiwgMTk3LCAyMzQsIDE5NiwgMSwgMjM0LCAxOTgsIDIzNCwgMTk2LCAxLCAKKyAgICAyMzEsIDIxOCwgMjM0LCAxOTYsIDEsIDI1MSwgMjAyLCAyMzQsIDE5NiwgMjIxLCA4NywgNzgsIDIwMSwgMSwgNjAsIDIwMSwgCisgICAgMjksIDUsIDcyLCAyMDEsIDI5LCA1LCA2OCwgMjAxLCAyOSwgNSwgMTY3LCAxNTIsIDIwMSwgMjksIDUsIDczLCAyMDEsIDI5LCAKKyAgICA1LCA3NCwgMjAxLCAyOSwgMjM1LCA5NCwgNzgsIDIwMSwgNSwgNTEsIDIyNywgOTQsIDU2LCAyMDEsIDUsIDI1NCwgOTUsIAorICAgIDIwMSwgNSwgMjE5LCA3NywgMjAxLCAxLCAxNzUsIDIwMSwgMSwgMjM2LCAxNDksIDIwMSwgMSwgMjQ1LCAwLCAyMDEsIDEsIAorICAgIDI0NCwgMTI1LCAyMDEsIDEsIDI1MSwgMTY5LCAyMDEsIDEsIDI1MSwgNjksIDIwMSwgMSwgMjM3LCAxMjMsIDIwMSwgMSwgCisgICAgMjMxLCA3NywgMjAxLCAxLCAyMjEsIDI5LCAyMDEsIDEsIDIyMSwgMTksIDIwMSwgMSwgMjQ5LCAxMzIsIDIwMSwgMSwgMjQ5LCAKKyAgICAxMTYsIDIwMSwgMSwgMjMxLCAyMTcsIDIwMSwgMSwgMjIyLCAxNTUsIDIwMSwgMSwgMjIyLCAzNSwgMjAxLCAxLCAyNDksIAorICAgIDIwNywgMjAxLCAxLCAyNDksIDM2LCAyMDEsIDEsIDIwOCwgMjAxLCAxLCAxODcsIDIwMSwgMSwgMjI5LCAxNDEsIDIwMSwgMSwgCisgICAgMjUyLCAyMzcsIDIwMSwgMSwgMjUyLCA5NCwgMjAxLCAxLCAxOTYsIDIwMSwgMSwgMTg0LCAyMDEsIDEsIDIwMywgMjAxLCAxLCAKKyAgICAyMzUsIDE4OCwgMjAxLCAxLCAyMTksIDE4OSwgMjAxLCAxLCAyMjUsIDI1LCAyMDEsIDEsIDIyMywgMjE4LCAyMDEsIDEsIAorICAgIDIyNiwgMTc3LCAyMDEsIDEsIDIxNywgMTE0LCAyMDEsIDEsIDE1NSwgMjAxLCAxLCAyMzYsIDc0LCAyMDEsIDEsIDIyMSwgNCwgCisgICAgMjAxLCA1LCAyNTIsIDIwMSwgNTAsIDIwMSwgNSwgMjUxLCAxMjIsIDIwMSwgNSwgNjEsIDU2LCAyMDEsIDIxOSwgODIsIAorICAgIDIwMSwgMjAsIDEwNywgMjAxLCAyMCwgMTAzLCAyMDEsIDIwLCAxNjAsIDIwMSwgMjAsIDE1NCwgMjAxLCA1NCwgMjIyLCA2NSwgCisgICAgMjAxLCA1NCwgMjIwLCAyMTksIDIwMSwgNTQsIDEzMSwgMjQyLCAxNjEsIDIwMSwgNTQsIDEzMSwgMjIxLCAyMzEsIDIwMSwgCisgICAgMjI4LCAxOTcsIDI0OCwgMTQ1LCAyMDEsIDIyOCwgMTk3LCAzLCAyNTAsIDIyMSwgMjAxLCAyMjgsIDE5NywgMjUwLCAyMjEsIAorICAgIDIwMSwgMjI4LCAxOTcsIDI1MCwgMTA1LCAxMzUsIDIwMSwgMjI4LCAxOTcsIDIzNCwgODMsIDIwMSwgMjI4LCAxOTcsIDIzNCwgCisgICAgMjQxLCAyMDEsIDIyOCwgMTk3LCAyNDksIDE2NywgMjAxLCAyMjgsIDE5NywgNTEsIDI0OSwgMTY3LCAyMDEsIDIyOCwgMTk3LCAKKyAgICAyMzUsIDM3LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyNDMsIDE2MiwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjM1LCAKKyAgICAxNTEsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDI0MywgMTI2LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyMzQsIDEsIAorICAgIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDIyOCwgMTAyLCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyMTgsIDIzMywgNDgsIAorICAgIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjI0LCAyMDksIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDIyNywgMTc0LCA0OCwgMjI0LCAKKyAgICA2LCAyNTQsIDY0LCAxLCAyNTIsIDEwMSwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjIyLCAxMDAsIDQ4LCAyMjQsIDYsIAorICAgIDI1NCwgNjQsIDEsIDIyNiwgMTI3LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyMzYsIDIyNCwgNDgsIDIyNCwgNiwgMjU0LCAKKyAgICA2NCwgMSwgMjMxLCAxMDMsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDIzNiwgMTM0LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAKKyAgICAxLCAyMjYsIDE2OCwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjI2LCAxNDUsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIAorICAgIDI0NSwgMjMxLCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyNTQsIDE2OCwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjUzLCAKKyAgICAyMDYsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDI0OSwgMzQsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDI0NCwgOTEsIAorICAgIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDI0OSwgMTc2LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyNDQsIDExOCwgNDgsIAorICAgIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjIyLCA0NiwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjE3LCA5NCwgNDgsIDIyNCwgNiwgCisgICAgMjU0LCA2NCwgMSwgMjQ5LCAzMSwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjE3LCAyMTksIDQ4LCAyMjQsIDYsIDI1NCwgCisgICAgNjQsIDEsIDIyMiwgMjQsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDIyMiwgNSwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgNTQsIAorICAgIDEwNywgNDgsIDIyNCwgNiwgMjU0LCA2NCwgNTQsIDI0NSwgMTk2LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxMjAsIDIzNywgCisgICAgMjExLCAyNTMsIDIxNiwgMSwgNjAsIDI1MywgMjE2LCAxLCAyNTUsIDU4LCAyNTMsIDIxNiwgMSwgMjU0LCA5MywgMjUzLCAKKyAgICAyMTYsIDEsIDI1NSwgMTcsIDI1MywgMjE2LCAxLCAyNTQsIDEzMSwgMjUzLCAyMTYsIDEsIDI1NSwgMTgsIDI1MywgMjE2LCAKKyAgICAxLCAyNTQsIDIzNCwgMjUzLCAyMTYsIDEsIDI1NCwgMjMwLCAyNTMsIDIxNiwgMSwgNzMsIDI1MywgMjE2LCAxLCAyNDYsIAorICAgIDI1MCwgMjUzLCAyMTYsIDEsIDc0LCAyNTMsIDIxNiwgMSwgMjMwLCAxMjcsIDI1MywgMjE2LCAxLCA3MiwgMjUzLCAyMTYsIAorICAgIDEsIDIzNywgMjU1LCAyNTMsIDIxNiwgMSwgNjgsIDI1MywgMjE2LCAxLCAyMjAsIDIzLCAyNTMsIDIxNiwgMSwgMjM2LCAKKyAgICAxODQsIDI1MywgMjE2LCAxLCAyMTgsIDEzNSwgMjUzLCAyMTYsIDEsIDIxOCwgMTAxLCAyNTMsIDIxNiwgMSwgMjE4LCAxMTAsIAorICAgIDI1MywgMjE2LCAxLCAyNDQsIDE5MSwgMjUzLCAyMTYsIDEsIDI0NCwgMTU1LCAyNTMsIDIxNiwgMSwgMjQ0LCAxMTYsIDI1MywgCisgICAgMjE2LCAxLCAyNTEsIDk5LCAyNTMsIDIxNiwgMSwgMjM3LCAxMTQsIDI1MywgMjE2LCAxLCAyMjIsIDg3LCAyNTMsIDIxNiwgCisgICAgMSwgMjIyLCAyMiwgMjUzLCAyMTYsIDEsIDI0OSwgOTIsIDI1MywgMjE2LCAxLCAyNDksIDI5LCAyNTMsIDIxNiwgMSwgMjIxLCAKKyAgICAyNiwgMjUzLCAyMTYsIDEsIDIyOSwgMTk4LCAyNTMsIDIxNiwgMSwgMjQ1LCAyMzEsIDI1MywgMjE2LCAxLCAyNTIsIDE0NCwgCisgICAgMjUzLCAyMTYsIDEsIDI1MiwgOTIsIDI1MywgMjE2LCAxLCAyMzIsIDEwNiwgMjUzLCAyMTYsIDEsIDIzMiwgNjgsIDI1MywgCisgICAgMjE2LCAxLCAyMzIsIDY5LCAyNTMsIDIxNiwgMSwgMjMyLCAxNDEsIDI1MywgMjE2LCAxLCAyMzEsIDczLCAyNTMsIDIxNiwgCisgICAgMSwgMjMxLCAyMTYsIDI1MywgMjE2LCAxLCAyMzQsIDI1LCAyNTMsIDIxNiwgMSwgMjQzLCA1MiwgMjUzLCAyMTYsIDEsIAorICAgIDIxNywgMTY0LCAyNTMsIDIxNiwgMSwgMjE4LCAyNSwgMjUzLCAyMTYsIDEsIDIxOSwgMTY1LCAyNTMsIDIxNiwgMSwgMjI3LCAKKyAgICAyMTYsIDI1MywgMjE2LCAxLCAyMzUsIDEyMiwgMjUzLCAyMTYsIDEsIDIyNiwgOTQsIDI1MywgMjE2LCAxLCAyMTcsIDkyLCAKKyAgICAyNTMsIDIxNiwgMSwgMjI0LCAyNDYsIDI1MywgMjE2LCAxLCAyMTcsIDcyLCAyNTMsIDIxNiwgMSwgMjI0LCAxNDcsIDI1MywgCisgICAgMjE2LCAxLCAyMjMsIDE5MCwgMjUzLCAyMTYsIDEsIDI0MywgMTYyLCAyNTMsIDIxNiwgMjU1LCA3LCA3OCwgMjIxLCAxNzIsIAorICAgIDEyNCwgMTg4LCAxMDQsIDEzMSwgNjEsIDIyOCwgMTk2LCAzLCAxMjQsIDE4OCwgMTA0LCAxMzEsIDYxLCAyMjgsIDE5NiwgCisgICAgMjM1LCAxNDYsIDEyNCwgMTg4LCAxMDQsIDEzMSwgNjEsIDIyOCwgMTk2LCAyMzUsIDE0NiwgMTMxLCA2MSwgMTA0LCAxMjQsIAorICAgIDE4OCwgMjI4LCAxOTYsIDIzNSwgMTQ2LCAxMjQsIDIyNywgOTIsIDEwNCwgMTMxLCAyMjcsIDk0LCAyMjgsIDE5NiwgMjM1LCAKKyAgICAxNDYsIDEzMSwgMjI3LCA5NCwgMTA0LCAxMjQsIDIyNywgOTIsIDIyOCwgMTk2LCAyMzcsIDE5MywgMjI5LCAyMjQsIDEsIAorICAgIDI1NCwgMTY2LCAyMzcsIDE5MywgMjI5LCAyMjQsIDEsIDI1MiwgMTAxLCAyMzcsIDE5MywgMjI5LCAyMjQsIDEsIDI0NCwgCisgICAgOTEsIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjQ5LCAxNzYsIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjQzLCAxNjIsIAorICAgIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjE4LCAyMzMsIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjE3LCA5NSwgMjM3LCAKKyAgICAxOTMsIDIyOSwgMjI0LCAxLCAyNDMsIDEyNiwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyMjIsIDQ2LCAyMzcsIDE5MywgCisgICAgMjI5LCAyMjQsIDEsIDIxNywgMjE5LCAyMzcsIDE5MywgMjI5LCAyMjQsIDEsIDIzNiwgMjI0LCAyMzcsIDE5MywgMjI5LCAKKyAgICAyMjQsIDEsIDIzNSwgMTUxLCAyMzcsIDE5MywgMjI5LCAyMjQsIDEsIDIzNCwgMSwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAKKyAgICAyMzEsIDEwMywgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyMjYsIDE0NSwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyNTMsIAorICAgIDIwNywgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyMjksIDE5OCwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyMjYsIDE2OCwgCisgICAgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyMjgsIDEwMiwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyMjcsIDE3NCwgMjM3LCAKKyAgICAxOTMsIDIyOSwgMjI0LCAxLCAyMjQsIDIwOSwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyMjIsIDEwMCwgMjM3LCAxOTMsIAorICAgIDIyOSwgMjI0LCA1NCwgMTA3LCAyMzcsIDE5MywgMjI5LCAyMjQsIDU0LCAxMDMsIDIzNywgMTkzLCAyMjksIDIyNCwgNTQsIAorICAgIDE2MCwgMjM3LCAxOTMsIDIyOSwgMjI0LCA1NCwgMTU0LCAyMzcsIDE5MywgMjI5LCAyMjQsIDU0LCAyMjIsIDY1LCAyMzcsIAorICAgIDE5MywgMjI5LCAyMjQsIDU0LCAyMjAsIDIxOSwgMjM3LCAxOTMsIDIyOSwgMjI0LCA1NCwgMTMxLCAyNDIsIDE2MSwgMjM3LCAKKyAgICAxOTMsIDIyOSwgMjI0LCA1NCwgMTMxLCAyMjEsIDIzMSwgMjM3LCAxOTMsIDIzMCwgMzMsIDEsIDI1NCwgMTY2LCAyMzcsIAorICAgIDE5MywgMjMwLCAzMywgMSwgMjUyLCAxMDEsIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAyNDQsIDkxLCAyMzcsIDE5MywgMjMwLCAKKyAgICAzMywgMSwgMjQ5LCAxNzYsIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAyNDMsIDE2MiwgMjM3LCAxOTMsIDIzMCwgMzMsIDEsIAorICAgIDIxOCwgMjMyLCAyMzcsIDE5MywgMjMwLCAzMywgMSwgMjE3LCA5NSwgMjM3LCAxOTMsIDIzMCwgMzMsIDEsIDI0MywgMTI2LCAKKyAgICAyMzcsIDE5MywgMjMwLCAzMywgMSwgMjIyLCA0NiwgMjM3LCAxOTMsIDIzMCwgMzMsIDEsIDIxNywgMjE5LCAyMzcsIDE5MywgCisgICAgMjMwLCAzMywgMSwgMjM2LCAyMjQsIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAyMzUsIDE1MSwgMjM3LCAxOTMsIDIzMCwgMzMsIAorICAgIDEsIDIzNCwgMCwgMjM3LCAxOTMsIDIzMCwgMzMsIDEsIDIzMSwgMTAzLCAyMzcsIDE5MywgMjMwLCAzMywgMSwgMjI2LCAKKyAgICAxNDUsIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAyMjksIDE5OCwgMjM3LCAxOTMsIDIzMCwgMzMsIDEsIDIyNiwgMTY4LCAyMzcsIAorICAgIDE5MywgMjMwLCAzMywgMSwgMjI0LCAyMDksIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAyMjIsIDEwMCwgMjM3LCAxOTMsIDIzMCwgCisgICAgMzMsIDU0LCAxMDcsIDIzNywgMTkzLCAyMzAsIDMzLCA1NCwgMTAzLCAyMzcsIDE5MywgMjMwLCAzMywgNTQsIDE2MCwgMjM3LCAKKyAgICAxOTMsIDIzMCwgMzMsIDU0LCAxNTQsIDIzNywgMTkzLCAyMzAsIDMzLCA1NCwgMjIyLCA2NSwgMjM3LCAxOTMsIDIzMCwgMzMsIAorICAgIDU0LCAyMjAsIDIxOSwgMjM3LCAxOTMsIDIzMCwgMzMsIDU0LCAxMzEsIDI0MiwgMTYxLCAyMzcsIDE5MywgMjMwLCAzMywgCisgICAgNTQsIDEzMSwgMjIxLCAyMzEsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCA2MCwgNDgsIDE3MiwgMSwgMjE4LCAxNywgNjAsIDQ4LCAKKyAgICAxNzIsIDEsIDIxOCwgMTcsIDI1NCwgMjM0LCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgNzIsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIAorICAgIDcyLCA0OCwgMTcyLCAxLCAyMTgsIDE3LCA3MywgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDc0LCA0OCwgMTcyLCAxLCAyMzAsIAorICAgIDEwMCwgMjMwLCAxNjcsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDIzMCwgMTY3LCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjU1LCAKKyAgICAxMSwgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjU1LCAxMSwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgMjMzLCA0OCwgCisgICAgMTcyLCAxLCAyMTgsIDE3LCAyNTQsIDIzMywgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgMjA5LCA0OCwgMTcyLCAxLCAKKyAgICAyMTgsIDE3LCAyNTQsIDIwOSwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgMjI4LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAKKyAgICAyNTQsIDIyOCwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgMjQ0LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyNTQsIDI0NCwgCisgICAgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgMjMyLCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjQ2LCA4MCwgNDgsIDE3MiwgCisgICAgMSwgMjE4LCAxNywgMjQ2LCA4MCwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1MywgMjEyLCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAKKyAgICAyNTMsIDIxMiwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgMjE2LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyNTQsIDIxNiwgCisgICAgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgMjI2LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyNTQsIDIyNiwgNDgsIDE3MiwgCisgICAgMSwgMjMwLCAxMDAsIDIzMCwgMTY2LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyMzAsIDE2NiwgNDgsIDE3MiwgMSwgMjMwLCAKKyAgICAxMDAsIDI1NCwgMTc1LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyNTQsIDE3NSwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgCisgICAgMjI1LCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjQ2LCAyMDcsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNDYsIDIwNSwgNDgsIAorICAgIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgMTMxLCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjU0LCAyMjMsIDQ4LCAxNzIsIDEsIAorICAgIDIxOCwgMTcsIDI1NCwgMjIzLCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjQ2LCAxODAsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIAorICAgIDI0NiwgMTgwLCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjQ2LCAxOTQsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDI0NiwgMTk0LCAKKyAgICA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjQ2LCAxNjksIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDI0NiwgMTY5LCA0OCwgMTcyLCAKKyAgICAxLCAyMTgsIDE3LCAyNTQsIDEyMywgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI0NiwgMTg1LCA0OCwgMTcyLCAxLCAyMTgsIAorICAgIDE3LCAyNTQsIDIyMiwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI0NiwgMTYyLCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjMwLCAKKyAgICAxMjAsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNDIsIDY3LCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjQ3LCAwLCA0OCwgCisgICAgMTcyLCAxLCAyMTgsIDE3LCAyNDcsIDAsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIDY5LCA0OCwgMTcyLCAxLCAyMTgsIAorICAgIDE3LCAyNTQsIDY5LCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjM3LCAxNTgsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDIzNywgCisgICAgMTU4LCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjMwLCAxMDYsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDIzMCwgMTA2LCA0OCwgCisgICAgMTcyLCAxLCAyMzAsIDEwMCwgMjU0LCA2NywgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjU0LCA2NywgNDgsIDE3MiwgMSwgMjMwLCAKKyAgICAxMDAsIDI1NCwgMjIxLCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjU0LCAxMywgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgCisgICAgMjIwLCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjU0LCA3LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyNTQsIDcsIDQ4LCAxNzIsIAorICAgIDEsIDIzMCwgMTAwLCAyNDYsIDEzMywgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjQ2LCAxMzMsIDQ4LCAxNzIsIDEsIDIzMCwgCisgICAgMTAwLCAyNTMsIDI0NCwgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjUzLCAyNDQsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIAorICAgIDIxNywgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjU0LCAyMTcsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyMzAsIDkyLCA0OCwgCisgICAgMTcyLCAxLCAyMzAsIDEwMCwgMjUyLCAxODcsIDIyNywgMTEsIDIwLCAxMDcsIDIyNywgMTEsIDIwLCAxMDMsIDIyNywgMTEsIAorICAgIDIwLCAxNjAsIDIyNywgMTEsIDIwLCAxNTQsIDIyNywgMTEsIDIwLCAxNzQsIDIyNywgMTEsIDIwLCAxODIsIDIyNywgMTEsIAorICAgIDIwLCAxOTEsIDIyNywgMTEsIDIwLCAxODUsIDIyNywgMTEsIDIwLCAxOTAsIDIyNywgMTEsIDU0LCAyMjIsIDY1LCAyMjcsIAorICAgIDExLCA1NCwgMjIwLCAyMTksIDIyNywgMTEsIDU0LCAyMjEsIDI0NSwgMjI3LCAxMSwgNTQsIDI0NSwgMTE5LCAyMjcsIDExLCAKKyAgICA1NCwgMjQ1LCAxOTYsIDIyNywgMTEsIDU0LCAyMjQsIDY5LCAyMjcsIDExLCA1NCwgMjI1LCAzOCwgMjI3LCAxMSwgNTQsIAorICAgIDI0NiwgMjI3LCAyMjcsIDExLCA1NCwgMjMyLCAyNywgMjI3LCAxMSwgNTQsIDEzMSwgMjQyLCAxNjEsIDIyNywgMTEsIDU0LCAKKyAgICAxMjQsIDI0MiwgMTYxLCAyMjcsIDExLCA1NCwgMTQ4LCAyNDIsIDE2MSwgMjI3LCAxMSwgNTQsIDI0NSwgMTE2LCAyNDIsIAorICAgIDE2MSwgMjI3LCAxMSwgNTQsIDI0NSwgMTcwLCAyNDIsIDE2MSwgMjI3LCAxMSwgNTQsIDIyNCwgODIsIDI0MiwgMTYxLCAKKyAgICAyMjcsIDExLCA1NCwgMjI1LCA0MywgMjQyLCAxNjEsIDIyNywgMTEsIDU0LCAyNDYsIDIzNSwgMjQyLCAxNjEsIDIyNywgMTEsIAorICAgIDU0LCAyMzIsIDMxLCAyNDIsIDE2MSwgMjI3LCAxMSwgMjQ1LCAxMDgsIDEzMSwgMjQzLCAxOTQsIDIyNywgMTEsIDI0NSwgCisgICAgMTA4LCAxMzEsIDIyOCwgODksIDIyNywgMTEsIDI0NSwgMTA4LCAxMzEsIDIyMSwgMjUxLCAyMjcsIDExLCAyNDUsIDEwOCwgCisgICAgMTI0LCAyMjEsIDI0OSwgMTk0LCA1LCAyNTEsIDE0NiwgMTk0LCA1LCAyNTQsIDk1LCAxOTQsIDUsIDIxOSwgNzcsIDE5NCwgCisgICAgMSwgNjAsIDE5NCwgMSwgMjU1LCA1OCwgMTk0LCAxLCA3MiwgMTk0LCAxLCAyMzcsIDI1NSwgMTk0LCAxLCA2OCwgMTk0LCAxLCAKKyAgICAyMjAsIDIzLCAxOTQsIDEsIDczLCAxOTQsIDEsIDI1NCwgMTk2LCAxOTQsIDEsIDc0LCAxOTQsIDEsIDI1MywgMjMyLCAxOTQsIAorICAgIDEsIDE3NSwgMTk0LCAxLCAyMzYsIDE0OSwgMTk0LCAxLCAyNDUsIDAsIDE5NCwgMSwgMjQ0LCAxMjUsIDE5NCwgMSwgMjMyLCAKKyAgICAxMTUsIDE5NCwgMSwgMjUxLCAxNjksIDE5NCwgMSwgMjUxLCA2OSwgMTk0LCAxLCAyMzcsIDEyMywgMTk0LCAxLCAyMzcsIAorICAgIDEwMywgMTk0LCAxLCAyMzEsIDc3LCAxOTQsIDEsIDIyMSwgMjksIDE5NCwgMSwgMjIxLCAxOSwgMTk0LCAxLCAyNDksIDEzMiwgCisgICAgMTk0LCAxLCAyNDksIDEyMSwgMTk0LCAxLCAyNDksIDExNiwgMTk0LCAxLCAyMjcsIDE1MSwgMTk0LCAxLCAyMzEsIDIxNywgCisgICAgMTk0LCAxLCAyMjIsIDE1NSwgMTk0LCAxLCAyMjIsIDM1LCAxOTQsIDEsIDI0OSwgMjA3LCAxOTQsIDEsIDI0OSwgMzYsIAorICAgIDE5NCwgMSwgMjA4LCAxOTQsIDEsIDE4NywgMTk0LCAxLCAyMjksIDE0MSwgMTk0LCAxLCAyNTIsIDIzNywgMTk0LCAxLCAKKyAgICAyNTIsIDk0LCAxOTQsIDEsIDE5NiwgMTk0LCAxLCAxODQsIDE5NCwgMSwgMjAzLCAxOTQsIDEsIDIzNSwgMTg4LCAxOTQsIDEsIAorICAgIDIxOSwgMTg5LCAxOTQsIDEsIDIyNSwgMjUsIDE5NCwgMSwgMjIzLCAyMTgsIDE5NCwgMSwgMjI2LCAxNzcsIDE5NCwgMSwgCisgICAgMTU1LCAxOTQsIDI5LCA1LCAyNTUsIDU4LCAxOTQsIDI5LCA1LCA3MiwgMTk0LCAyOSwgNSwgMjM3LCAyNTUsIDE5NCwgMjksIAorICAgIDUsIDY4LCAxOTQsIDI5LCA1LCAyMjAsIDIzLCAxOTQsIDI5LCA1LCA3MywgMTk0LCAyOSwgNSwgMjU0LCAxOTYsIDE5NCwgCisgICAgMjksIDUsIDc0LCAxOTQsIDI5LCA1LCAyNTMsIDIzMiwgMTk0LCA1LCAyMTksIDgyLCAxOTQsIDUsIDIzMSwgMTEyLCAxOTQsIAorICAgIDI1NSwgNywgNTUsIDE5NCwgMjQ2LCAxNzEsIDU1LCAxOTQsIDU0LCA1NSwgMTk0LCAyMjYsIDg3LCA3OCwgMTk0LCA1MSwgCisgICAgMjI2LCA4NywgNzgsIDE5NCwgMjQ5LCAxNjcsIDE5NCwgNTEsIDI0OSwgMTY3LCAxNSwgNSwgNjAsIDE1LCA1LCAxMTIsIDI3LCAKKyAgICA2MCwgMTUsIDUsIDExMiwgMjcsIDI1MiwgMjI4LCAxNSwgNSwgMTEyLCAyNywgMjQ0LCAyMjksIDIyMiwgNTksIDE1LCA1LCAKKyAgICAxMTIsIDI3LCAxNTUsIDE1LCA1LCAxMTIsIDI3LCAyMzgsIDEsIDE1LCA1LCAxMTIsIDI3LCAyMzUsIDE3MywgMjQ0LCAzLCAKKyAgICAxNSwgNSwgMTEyLCAyNywgMjMzLCA2MiwgMTUsIDUsIDExMiwgMjcsIDIyNiwgMTY1LCAxNSwgNSwgMjU1LCA2MCwgMTUsIDUsIAorICAgIDI1NSwgMTEsIDE1LCA1LCAyNTUsIDEyLCAyNywgMjU0LCA1LCAxNSwgNSwgMjU1LCAxMiwgMjcsIDI0NywgMTAwLCAyNDQsIAorICAgIDMsIDE1LCA1LCAyNTUsIDEyLCAyNywgMjQ0LCAyNDAsIDE1LCA1LCAyNTUsIDEyLCAyNywgMjQ0LCAyMjksIDIyMiwgNTksIAorICAgIDE1LCA1LCAyNTUsIDEyLCAyNywgMTU1LCAxNSwgNSwgMjU1LCAxMiwgMjcsIDIzOCwgMiwgMjQ0LCAzLCAxNSwgNSwgMjU1LCAKKyAgICAxMiwgMjcsIDIzNywgMjMxLCAxNSwgNSwgMjU1LCAxMiwgMjcsIDIzNSwgMTc0LCAxNSwgNSwgMjU1LCAxMiwgMjcsIDIyNCwgCisgICAgMjMxLCAxNSwgNSwgMjU1LCAxMiwgMjcsIDEwNSwgODgsIDEwNSwgODgsIDY4LCAxNSwgNSwgMjU1LCAxMiwgMjQ0LCAzLCAKKyAgICAxNSwgNSwgMjU1LCA5LCAxNSwgNSwgMjU1LCAxMCwgMjcsIDI1MiwgMjE2LCAxNSwgNSwgMjU1LCAxMCwgMjcsIDI0NCwgCisgICAgMjI5LCAyMjIsIDU5LCAxNSwgNSwgMjU1LCAxMCwgMjcsIDIzNCwgMjYsIDg4LCAyNDYsIDE5NywgMTUsIDUsIDI1NSwgMTAsIAorICAgIDI3LCAyMjUsIDIzLCAxNSwgNSwgMjU1LCAxMCwgMjcsIDIyMiwgMTMwLCAxNSwgNSwgMjU0LCAyNDQsIDE1LCA1LCAyNTQsIAorICAgIDE4MiwgMTUsIDUsIDI1NCwgMTgzLCAyNywgMjQ2LCAxNDMsIDE1LCA1LCAyNTQsIDE4MywgMjcsIDIyNCwgMjAzLCA4OCwgCisgICAgMjQ0LCA4MSwgMTUsIDUsIDI1NCwgMTc1LCAxNSwgNSwgMjU0LCAxNzYsIDI3LCAyNTQsIDE3NSwgMTUsIDUsIDI1NCwgMTc2LCAKKyAgICAyNywgMjQ4LCAyMjksIDE1LCA1LCAyNTQsIDE3NiwgMjcsIDI0NCwgODEsIDE1LCA1LCAyNTQsIDE3NiwgMjcsIDE1NSwgMTUsIAorICAgIDUsIDI1NCwgMTc2LCAyNywgMjM2LCAyNTEsIDE1LCA1LCAyNTQsIDE3NiwgMjcsIDIzNiwgMTEzLCAxNSwgNSwgMjU0LCAKKyAgICAxNzYsIDI3LCAyMjQsIDI0NiwgMTUsIDUsIDI1NCwgMTc2LCAyNywgMjIwLCAzMCwgMTUsIDUsIDI1NCwgMTcyLCAxNSwgNSwgCisgICAgMjU0LCAxNjYsIDE1LCA1LCAyNTQsIDEzNywgMTUsIDUsIDI1NCwgMTM4LCAyNywgMjI0LCAyNDYsIDE1LCA1LCAyNTQsIAorICAgIDEzMSwgMTUsIDUsIDI1NCwgMTMyLCAxMDQsIDI1NCwgMTMxLCAxNSwgNSwgMjU0LCAxMzIsIDE0OCwgMjIxLCAxNzYsIDE1LCAKKyAgICA1LCAyNTQsIDEzMiwgODgsIDIzMiwgMjI4LCAyMzAsIDExMCwgMjU0LCAxMzIsIDg4LCAyMzIsIDIyNywgMTUsIDUsIDI1NCwgCisgICAgMTMyLCA4OCwgMjMyLCAyMjgsIDIyMywgMjI2LCAxNSwgNSwgMjU0LCAxMDcsIDE1LCA1LCAyNTQsIDg4LCAxNSwgNSwgMjU0LCAKKyAgICA2MSwgMTUsIDUsIDI1NCwgNjIsIDI3LCAyMzUsIDI0NywgMTUsIDUsIDI1NCwgMzUsIDE1LCA1LCAyNTQsIDEyLCAxNSwgNSwgCisgICAgMjU0LCA3LCAxNSwgNSwgMjU0LCA4LCAyMTcsIDM4LCAyMjIsIDU5LCAxNSwgNSwgMjU0LCA4LCAyMzYsIDI1NCwgMjIyLCAKKyAgICA1OSwgMTUsIDUsIDI1NCwgOCwgMTA0LCAyNTQsIDgsIDIyMCwgMjU0LCAxMDQsIDIyMCwgMjU0LCAyMjAsIDI1NCwgMTA0LCAKKyAgICAyMjAsIDI1NCwgMjI5LCAyNDYsIDE1LCA1LCAyNTQsIDgsIDEwNCwgMjU0LCA4LCAxMDQsIDI1NCwgNywgMTUsIDUsIDI1NCwgCisgICAgOCwgMTA0LCAyNTQsIDgsIDEwNCwgMjU0LCA4LCAyNTAsIDk1LCAyNTQsIDgsIDEwNCwgMjU0LCA4LCAxMDQsIDI1NCwgNywgCisgICAgMTUsIDUsIDI1NCwgNSwgMTUsIDUsIDI1NCwgMywgMTUsIDUsIDI1MiwgMjM3LCAxNSwgNSwgMjUyLCAyMjgsIDE1LCA1LCAKKyAgICAyNTIsIDIyNSwgMTUsIDUsIDI1MiwgMjIzLCAxNSwgNSwgMjUyLCAyMTcsIDE1LCA1LCAyNTIsIDIxOCwgMTA0LCAyNTIsIAorICAgIDIxNywgMTUsIDUsIDI1MiwgMjE2LCAxNSwgNSwgMTM1LCAxNSwgNSwgMjUyLCAyMDAsIDE1LCA1LCAyNTIsIDg0LCAxNSwgNSwgCisgICAgMjUyLCA4NSwgMjcsIDYwLCAxNSwgNSwgMjUyLCA4NSwgMjcsIDI0NCwgMjIwLCAxNSwgNSwgMjUyLCA4NSwgMjcsIDIzOCwgCisgICAgMiwgMjQ0LCAzLCAxNSwgNSwgMjUxLCAyNDgsIDE1LCA1LCAyNTEsIDI0OSwgMTA0LCAyNTEsIDI0OSwgMjU1LCAxMSwgMTUsIAorICAgIDUsIDI1MSwgMjQ5LCAxMDQsIDI1MSwgMjQ5LCAyMjAsIDg3LCAxNSwgNSwgMjUxLCAyNDksIDI1MCwgOTUsIDI1MSwgMjQ4LCAKKyAgICAxNSwgNSwgMjUxLCAyMzcsIDE1LCA1LCAyNTEsIDIzOCwgMTA0LCAyNTEsIDIzNywgMTUsIDUsIDI1MSwgMjI4LCAxNSwgNSwgCisgICAgMjUxLCAyMjcsIDE1LCA1LCAyNDksIDIwNywgMTUsIDUsIDI0OSwgMTk4LCAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAKKyAgICAxMTIsIDg4LCAyMzQsIDU3LCAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAyNTQsIDEzNywgMTUsIDUsIDI0OSwgCisgICAgMTk5LCAyMzYsIDkxLCAyNywgMjUyLCAyMTYsIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIDI1MiwgODQsIDE1LCA1LCAKKyAgICAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIDI0NSwgMCwgMTUsIDUsIDI0OSwgMTk5LCAyMzYsIDkxLCAyNywgMjQ1LCAxLCA4OCwgCisgICAgMjM0LCA1NywgMTUsIDUsIDI0OSwgMTk5LCAyMzYsIDkxLCAyNywgMjQ0LCAxMDMsIDE1LCA1LCAyNDksIDE5OSwgMjM2LCAKKyAgICA5MSwgMjcsIDI0NCwgODcsIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIDI0NCwgMTEsIDE1LCA1LCAyNDksIDE5OSwgCisgICAgMjM2LCA5MSwgMjcsIDE1NSwgMTUsIDUsIDI0OSwgMTk5LCAyMzYsIDkxLCAyNywgMjM3LCAxNTYsIDE1LCA1LCAyNDksIAorICAgIDE5OSwgMjM2LCA5MSwgMjcsIDIzNywgMTU3LCA4OCwgMjM0LCAyMzEsIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIAorICAgIDIzNiwgMjQwLCAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAyMzUsIDE4OCwgMTUsIDUsIDI0OSwgMTk5LCAyMzYsIAorICAgIDkxLCAyNywgMjM0LCAyMzEsIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIDIzNCwgMjMyLCA4OCwgMjM0LCA1NiwgCisgICAgMTUsIDUsIDI0OSwgMTk5LCAyMzYsIDkxLCAyNywgMjM0LCAyMTksIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIAorICAgIDIzMiwgMTQxLCAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAyMjksIDI0NywgODgsIDIyOSwgMjQ2LCAxNSwgNSwgCisgICAgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAyMjQsIDE0MCwgMTUsIDUsIDI0OSwgMTk5LCAyMzYsIDkxLCAyNywgMjIyLCAxMzAsIAorICAgIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIDIyMCwgMTI1LCA4OCwgMjQ0LCA4NywgMTUsIDUsIDI0OSwgMTk5LCAKKyAgICAyMzYsIDkxLCAyNywgMjIwLCAzMCwgMTUsIDUsIDI0OSwgMTc1LCAxNSwgNSwgMjQ5LCAxNTYsIDE1LCA1LCAyNDksIDE1NSwgCisgICAgMTUsIDUsIDI0OSwgMTU0LCAxNSwgNSwgMjQ5LCAxNSwgMTUsIDUsIDI0OCwgMjU1LCAxNSwgNSwgMjQ4LCAyMzAsIDE1LCA1LCAKKyAgICAyNDgsIDIzMSwgMjcsIDIyNCwgMjQ2LCAxNSwgNSwgMjQ4LCAyMjksIDE1LCA1LCAyNDgsIDIxOSwgMTUsIDUsIDI0OCwgCisgICAgMjIwLCAyMzYsIDIwOSwgMTA1LCAyNDQsIDQsIDI0OCwgMjAyLCAxNSwgNSwgMjQ4LCAyMDIsIDE1LCA1LCAyNDcsIDExMSwgCisgICAgMTUsIDUsIDI0NywgMTEyLCAxMDQsIDI0NywgMTExLCAxNSwgNSwgMjQ3LCAxMTIsIDI0NCwgMywgMTUsIDUsIDI0NywgMTEyLCAKKyAgICAyMjQsIDIyOCwgMTUsIDUsIDI0NywgMTA5LCAxNSwgNSwgMjQ3LCAxMTAsIDI3LCAyNDYsIDEzMCwgMTUsIDUsIDI0NywgCisgICAgMTA4LCAxNSwgNSwgMjQ3LCAxMDcsIDE1LCA1LCAyNDcsIDEwNiwgMTUsIDUsIDI0NywgMTA1LCAxNSwgNSwgMjQ3LCAxMDEsIAorICAgIDE1LCA1LCAyNDcsIDk5LCAxNSwgNSwgMjQ3LCAxMDAsIDI0NCwgMywgMTUsIDUsIDI0NywgMTAwLCAyNDQsIDQsIDI0NCwgMywgCisgICAgMTUsIDUsIDI0NywgOTgsIDE1LCA1LCAyNDcsIDkxLCAxNSwgNSwgNzMsIDE1LCA1LCAxNzgsIDI3LCAyMjksIDI0NiwgMTUsIAorICAgIDUsIDE3OCwgMTA0LCAxNzgsIDIzMSwgMTA0LCAxMDQsIDIzMSwgMTAzLCAxNSwgNSwgMjQ3LCAxNywgMTUsIDUsIDI0NywgCisgICAgMTgsIDI3LCAxMTIsIDg4LCAyNDMsIDIxNCwgODgsIDI0OSwgMjA3LCAxNSwgNSwgMjQ3LCAxOCwgMjcsIDI0NCwgMjIwLCAKKyAgICAxNSwgNSwgMjQ3LCAxOCwgMjcsIDIzMywgMTk2LCAxNSwgNSwgMjQ3LCAxOCwgMjcsIDIyNiwgMTU2LCAxNSwgNSwgMjQ3LCAKKyAgICAxOCwgMjcsIDIyNCwgMjQ2LCAxNSwgNSwgMjQ3LCAxOCwgMjcsIDY4LCAxNSwgNSwgMjQ2LCAyNTIsIDE1LCA1LCAyNDYsIAorICAgIDI0MiwgMTUsIDUsIDI0NiwgMjE3LCAxNSwgNSwgMjQ2LCAxOTcsIDE1LCA1LCAyNDYsIDE5OCwgMjcsIDI0NCwgMjI4LCAxNSwgCisgICAgNSwgMjQ2LCAxOTgsIDI3LCAyNDQsIDIyOSwgMjIyLCA1OSwgMTUsIDUsIDI0NiwgMTk4LCAyNywgMjM0LCAyNSwgMTUsIDUsIAorICAgIDI0NiwgMTk4LCAyNTAsIDk1LCAyNDYsIDE5NywgMTUsIDUsIDI0NiwgMTk4LCAyMzAsIDExMCwgMjQ2LCAxOTcsIDE1LCA1LCAKKyAgICAyNDYsIDE5OCwgMjIzLCAyMjYsIDE1LCA1LCAyNDYsIDE0NSwgMTUsIDUsIDI0NiwgMTQzLCAxNSwgNSwgMjQ2LCAxMzAsIAorICAgIDE1LCA1LCAyNDYsIDc4LCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDYwLCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDExMiwgODgsIDIzNSwgCisgICAgMTYyLCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDExMiwgODgsIDIzNSwgMTYzLCAyNywgMjM1LCAxNjIsIDE1LCA1LCAyNDYsIDc5LCAKKyAgICAyNywgMjU0LCAxMzEsIDE1LCA1LCAyNDYsIDc5LCAyNywgMjUyLCAyMjgsIDE1LCA1LCAyNDYsIDc5LCAyNywgMjQ3LCAxMDAsIAorICAgIDI0NCwgMywgMTUsIDUsIDI0NiwgNzksIDI3LCAyNDcsIDEwMCwgMjQ0LCA0LCAyNDQsIDMsIDE1LCA1LCAyNDYsIDc5LCAyNywgCisgICAgMTU1LCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDI0MywgMjE0LCAyNDQsIDMsIDE1LCA1LCAyNDYsIDc5LCAyNywgMjM4LCAyLCAKKyAgICAyNDQsIDMsIDE1LCA1LCAyNDYsIDc5LCAyNywgMjM2LCAyMDgsIDE1LCA1LCAyNDYsIDc5LCAyNywgMjM2LCAyMDksIDIyMywgCisgICAgMjI2LCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDIzNiwgNSwgMTUsIDUsIDI0NiwgNzksIDI3LCAyMzUsIDE4OCwgMTUsIDUsIAorICAgIDI0NiwgNzksIDI3LCAyMzUsIDE2MywgMjcsIDIzNSwgMTYyLCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDIzNSwgNjcsIDE1LCA1LCAKKyAgICAyNDYsIDc5LCAyNywgMjM0LCAyMzEsIDE1LCA1LCAyNDYsIDc5LCAyNywgMjIwLCAxMjQsIDE1LCA1LCAyNDYsIDc5LCAyNywgCisgICAgMjIwLCAxMTUsIDE1LCA1LCAyNDUsIDAsIDE1LCA1LCAyNDUsIDEsIDI0NCwgMywgMTUsIDUsIDI0NCwgMjU0LCAxNSwgNSwgCisgICAgMjQ0LCAyNTUsIDI3LCAxMTIsIDg4LCAyNDksIDIwOCwgODgsIDE1NSwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMTEyLCA4OCwgCisgICAgMTU1LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAxMTIsIDg4LCAyMzgsIDEsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI1NSwgMTAsIAorICAgIDIyMiwgNjAsIDg4LCAyMjIsIDE0NywgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjU0LCAxMzEsIDE1LCA1LCAyNDQsIDI1NSwgCisgICAgMjcsIDI1NCwgNywgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjU0LCA2LCA4OCwgMjQ0LCAyNDAsIDE1LCA1LCAyNDQsIDI1NSwgCisgICAgMjcsIDI1MiwgMjI4LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyNTIsIDIwMSwgODgsIDIwMywgMTUsIDUsIDI0NCwgMjU1LCAKKyAgICAyNywgMjUxLCAyMjgsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI1MSwgMjI5LCA4OCwgMjAzLCAxNSwgNSwgMjQ0LCAyNTUsIAorICAgIDI3LCAyNDksIDIwNywgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjQ5LCAxNSwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjQ4LCAKKyAgICAyMzEsIDI3LCAyMjQsIDI0NiwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjQ3LCAxMDksIDE1LCA1LCAyNDQsIDI1NSwgMjcsIAorICAgIDI0NiwgMjE3LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyNDYsIDIxOCwgODgsIDIzNSwgMTg4LCAxNSwgNSwgMjQ0LCAyNTUsIAorICAgIDI3LCAyNDYsIDE5NywgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjQ2LCAxOTgsIDI3LCAyNDQsIDIyOSwgMjIyLCA1OSwgMTUsIAorICAgIDUsIDI0NCwgMjU1LCAyNywgMjQ0LCAyMjksIDIyMiwgNTksIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI0NCwgMjIwLCAxNSwgNSwgCisgICAgMjQ0LCAyNTUsIDI3LCAyNDQsIDEwMywgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjQ0LCAxMDEsIDE1LCA1LCAyNDQsIDI1NSwgCisgICAgMjcsIDI0NCwgMTAyLCA4OCwgNjAsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI0NCwgODgsIDg4LCAyMjMsIDEwMywgMTUsIDUsIAorICAgIDI0NCwgMjU1LCAyNywgMjQzLCAyMTQsIDg4LCAyMzQsIDIzMiwgODgsIDI0NiwgMTMwLCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAKKyAgICAyNDMsIDE5NywgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjQzLCAxOTgsIDg4LCAyMzUsIDE4OCwgMTUsIDUsIDI0NCwgMjU1LCAKKyAgICAyNywgMjQzLCAxMTMsIDg4LCAyMzUsIDY3LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyNDIsIDE2OSwgMTUsIDUsIDI0NCwgCisgICAgMjU1LCAyNywgMjM4LCAyLCAyNDQsIDMsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIzNywgMTQ2LCA4OCwgMjQyLCAxNzQsIDg4LCAKKyAgICAyNTQsIDcsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIzNiwgMjQwLCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMzYsIDIwOCwgMTUsIAorICAgIDUsIDI0NCwgMjU1LCAyNywgMjM2LCAxMTAsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIzNiwgMTExLCA4OCwgMjM1LCAxNjIsIAorICAgIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIzNiwgNiwgODgsIDI1NCwgMTMxLCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMzUsIDE4OCwgCisgICAgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjM0LCAyNiwgODgsIDI0NiwgMTk3LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMzMsIAorICAgIDE5NiwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjMxLCAxMDMsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIzMSwgMTA0LCAxMDQsIAorICAgIDIzMSwgMTAzLCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAxODcsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIyNiwgMTU2LCAxNSwgNSwgCisgICAgMjQ0LCAyNTUsIDI3LCAyMjYsIDEzMSwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjI0LCAyNDYsIDE1LCA1LCAyNDQsIDI1NSwgCisgICAgMjcsIDIyNCwgMjQ3LCA4OCwgMjIwLCAyNDAsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIyNCwgMjE5LCAxNSwgNSwgMjQ0LCAKKyAgICAyNTUsIDI3LCAyMjMsIDc0LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMjIsIDEzMCwgMTUsIDUsIDI0NCwgMjU1LCAyNywgNjgsIAorICAgIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIyMCwgMTE1LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMjAsIDExNiwgODgsIDI0NywgCisgICAgMTExLCAxNSwgNSwgMjQ0LCAyNTUsIDEwNCwgMjQ0LCAyNTQsIDE1LCA1LCAyNDQsIDI0OSwgMTUsIDUsIDI0NCwgMjUwLCAKKyAgICAyNTAsIDk1LCAyNDQsIDI0OSwgMTUsIDUsIDI0NCwgMjQ3LCAxNSwgNSwgMjQ0LCAyNDgsIDEwNCwgMjQ0LCAyNDgsIDI0NCwgCisgICAgMjIxLCAxMDQsIDI0NCwgMjIwLCAxNSwgNSwgMjQ0LCAyNDAsIDE1LCA1LCAyNDQsIDI0MSwgMjQ0LCAyNDgsIDEwNCwgMjQ0LCAKKyAgICAyNDgsIDI0NCwgMjIxLCAxMDQsIDI0NCwgMjIwLCAxNSwgNSwgMjQ0LCAyMzksIDE1LCA1LCAyNDQsIDIzNywgMTUsIDUsIAorICAgIDI0NCwgMjMwLCAxNSwgNSwgMjQ0LCAyMjgsIDE1LCA1LCAyNDQsIDIyOSwgMjIyLCA1OSwgMTUsIDUsIDI0NCwgMjI5LCAKKyAgICAxMDQsIDI0NCwgMjI4LCAxNSwgNSwgMjQ0LCAyMjksIDI1MCwgOTUsIDI0NCwgMjI4LCAxNSwgNSwgMjQ0LCAyMjAsIDE1LCAKKyAgICA1LCAyNDQsIDIxOSwgMTUsIDUsIDI0NCwgMjE1LCAxNSwgNSwgMjQ0LCAxNjYsIDE1LCA1LCAyNDQsIDE2NywgMjcsIDIzNSwgCisgICAgMjQ3LCAxNSwgNSwgMjQ0LCAxMDMsIDE1LCA1LCAyNDQsIDEwNCwgMjcsIDczLCAxNSwgNSwgMjQ0LCAxMDQsIDI3LCA2OCwgCisgICAgMTUsIDUsIDI0NCwgMTA0LCAyNTAsIDk1LCAyNDQsIDEwMywgMTUsIDUsIDI0NCwgMTAxLCAxNSwgNSwgMjQ0LCAxMDIsIAorICAgIDEwNCwgMjQ0LCAxMDEsIDE1LCA1LCAyNDQsIDEwMiwgMjUwLCA5NSwgMjQ0LCAxMDEsIDE1LCA1LCAyNDQsIDk5LCAxNSwgNSwgCisgICAgMjQ0LCA4NywgMTUsIDUsIDI0NCwgODgsIDI0NCwgMywgMTUsIDUsIDI0NCwgODUsIDE1LCA1LCAyNDQsIDg2LCAyNywgMTEyLCAKKyAgICA4OCwgMjM4LCAxLCAxNSwgNSwgMjQ0LCA4NiwgMjcsIDI0NCwgMjI5LCAyMjIsIDU5LCAxNSwgNSwgMjQ0LCA4NiwgMjcsIAorICAgIDIzOCwgMSwgMTUsIDUsIDI0NCwgODYsIDI3LCAyMzQsIDIzMiwgODgsIDIzOCwgMSwgMTUsIDUsIDI0NCwgODYsIDI3LCAKKyAgICAxODcsIDE1LCA1LCAyNDQsIDgzLCAxNSwgNSwgMjQ0LCA4MSwgMTUsIDUsIDI0NCwgODIsIDI1MCwgOTUsIDI0NCwgODEsIAorICAgIDE1LCA1LCAyNDQsIDgyLCAyNywgMjUyLCAyMjgsIDE1LCA1LCAyNDQsIDgyLCAyNywgMjIyLCAxMzAsIDE1LCA1LCAyNDQsIAorICAgIDgyLCAyMjIsIDU5LCAxNSwgNSwgMjQ0LCAxNywgMTUsIDUsIDI0NCwgMTgsIDI1MCwgOTUsIDI0NCwgMTcsIDE1LCA1LCAKKyAgICAyNDQsIDE1LCAxNSwgNSwgMjQ0LCAxNiwgMjcsIDIzNiwgMjQwLCAxNSwgNSwgMjQ0LCAxNiwgMjcsIDIzNiwgMjQxLCAyNywgCisgICAgMjM4LCAyLCAyNDQsIDMsIDE1LCA1LCAyNDQsIDE2LCAyNywgMjMxLCAxMDMsIDE1LCA1LCAyNDQsIDE2LCAyNywgMjI2LCAKKyAgICAxNTcsIDg4LCAyMjAsIDI1MywgMTUsIDUsIDI0NCwgMTYsIDI0NCwgMywgMTUsIDUsIDI0NCwgMTEsIDE1LCA1LCAyNDQsIAorICAgIDEyLCAyNywgMTEyLCA4OCwgMjM1LCAyNDcsIDE1LCA1LCAyNDQsIDEyLCAyNywgMjM1LCAyNDcsIDE1LCA1LCAyNDQsIDEyLCAKKyAgICAxMDQsIDI0NCwgMTIsIDIzNCwgMjI1LCAxNSwgNSwgMjQ0LCA3LCAxNSwgNSwgMjQ0LCA1LCAxNSwgNSwgMjQ0LCA2LCAyNywgCisgICAgMjI0LCAyNDYsIDE1LCA1LCAyNDMsIDI1MywgMTUsIDUsIDI0MywgMjUyLCAxNSwgNSwgMjQzLCAyNDksIDE1LCA1LCAyNDMsIAorICAgIDI0OCwgMTUsIDUsIDE1NSwgMTUsIDUsIDI0MywgMjE0LCAyMjIsIDU5LCAxNSwgNSwgMjQzLCAyMTQsIDI0NCwgMywgMTUsIAorICAgIDUsIDI0MywgMTk3LCAxNSwgNSwgMjQzLCAxMTIsIDE1LCA1LCAyNDMsIDExMywgMjcsIDI1NCwgNywgMTUsIDUsIDI0MywgCisgICAgMTEzLCAyNywgMjU0LCA1LCAxNSwgNSwgMjQzLCAxMTMsIDI3LCAyNTIsIDIyOCwgMTUsIDUsIDI0MywgMTEzLCAyNywgMjQ4LCAKKyAgICAyMDIsIDE1LCA1LCAyNDMsIDExMywgMjcsIDI0NCwgMjQ3LCAxNSwgNSwgMjQzLCAxMTMsIDI3LCAyMzYsIDEwNCwgMTUsIDUsIAorICAgIDI0MywgMTEzLCAyNywgMjMxLCAxMDMsIDE1LCA1LCAyNDMsIDExMywgMjcsIDIyNCwgMjQ2LCAxNSwgNSwgMjQzLCAxMTMsIAorICAgIDI3LCA2OCwgMTUsIDUsIDI0MiwgMTczLCAxNSwgNSwgMjQyLCAxNjksIDE1LCA1LCAyNDIsIDE3MCwgMjcsIDI1NCwgMTMxLCAKKyAgICAxNSwgNSwgMjQyLCAxNzAsIDI3LCAyNDMsIDE5NywgMTUsIDUsIDI0MiwgMTcwLCAyNywgMjM2LCAyMDgsIDE1LCA1LCAyNDIsIAorICAgIDE3MCwgMjcsIDIzNSwgMjksIDE1LCA1LCAyNDIsIDE3MCwgMjcsIDIyMCwgMTE1LCAxNSwgNSwgMjQyLCAxNjYsIDE1LCA1LCAKKyAgICA3MiwgMTUsIDUsIDI0MiwgMTA3LCA2MCwgMTUsIDUsIDI0MiwgNjksIDE1LCA1LCAyMzgsIDI5LCAxNSwgNSwgMjM4LCAzMCwgCisgICAgMTA0LCAyMzgsIDMwLCAyNTEsIDIyOCwgMTUsIDUsIDIzOCwgMzAsIDEwNCwgMjM4LCAzMCwgMjIzLCAyMjYsIDE1LCA1LCAKKyAgICAyMzgsIDQsIDE1LCA1LCAyMzgsIDEsIDE1LCA1LCAyMzgsIDIsIDI0OCwgMjU1LCAxNSwgNSwgMjM4LCAyLCAyMjcsIDE0NywgCisgICAgMTUsIDUsIDIzOCwgMiwgMTA0LCAyMzgsIDIsIDIyNCwgMjA1LCAxMDQsIDIyNCwgMjA1LCAyMjAsIDExNiwgMTA0LCAyMjAsIAorICAgIDExNSwgMTUsIDUsIDIzOCwgMiwgMjQ0LCAzLCAxNSwgNSwgMjM3LCAyNDksIDE1LCA1LCAyMzcsIDI1MCwgMjcsIDI0NCwgCisgICAgMjI5LCAyMjIsIDU5LCAxNSwgNSwgMjM3LCAyNDgsIDE1LCA1LCAyMzcsIDIzOCwgMTUsIDUsIDIzNywgMjM5LCAyNywgMjIyLCAKKyAgICAxMzAsIDE1LCA1LCAyMzcsIDIzOSwgMjUwLCA5NSwgMjM3LCAyMzgsIDE1LCA1LCAyMzcsIDIzOSwgMjMwLCAxMTAsIDIzNywgCisgICAgMjM4LCAxNSwgNSwgMjM3LCAyMzksIDIyMywgMjI2LCAxNSwgNSwgMjM3LCAyMzEsIDE1LCA1LCAyMzcsIDIyMywgMTUsIDUsIAorICAgIDIzNywgMTU2LCAxNSwgNSwgMjM3LCAxNDUsIDE1LCA1LCAxNzUsIDE1LCA1LCAyMDYsIDI3LCA2MCwgMTUsIDUsIDIwNiwgCisgICAgMjcsIDI1NCwgMjQ0LCAxNSwgNSwgMjA2LCAyNywgMjU0LCAyNDUsIDg4LCAyMzYsIDUsIDE1LCA1LCAyMDYsIDI3LCAyNTQsIAorICAgIDUsIDE1LCA1LCAyMDYsIDI3LCAyNTIsIDIyOCwgMTUsIDUsIDIwNiwgMjcsIDI1MiwgMjE2LCAxNSwgNSwgMjA2LCAyNywgCisgICAgMTM1LCAxNSwgNSwgMjA2LCAyNywgMjUyLCA4NCwgMTUsIDUsIDIwNiwgMjcsIDI0NiwgMTQzLCAxNSwgNSwgMjA2LCAyNywgCisgICAgMjQ2LCAxMzAsIDE1LCA1LCAyMDYsIDI3LCAyNDUsIDAsIDE1LCA1LCAyMDYsIDI3LCAyNDQsIDI0MCwgMTUsIDUsIDIwNiwgCisgICAgMjcsIDI0NCwgMjI5LCAyMjIsIDU5LCAxNSwgNSwgMjA2LCAyNywgMjQ0LCAyMjAsIDE1LCA1LCAyMDYsIDI3LCAyNDQsIAorICAgIDIyMSwgODgsIDIyNSwgMjQsIDg4LCA2MCwgMTUsIDUsIDIwNiwgMjcsIDI0NCwgMTAzLCAxNSwgNSwgMjA2LCAyNywgMjQ0LCAKKyAgICA4NywgMTUsIDUsIDIwNiwgMjcsIDI0NCwgODIsIDg4LCAyMjYsIDEzMSwgMTUsIDUsIDIwNiwgMjcsIDI0NCwgODIsIDI1MCwgCisgICAgOTUsIDI0NCwgODEsIDE1LCA1LCAyMDYsIDI3LCAyNDQsIDE3LCAxNSwgNSwgMjA2LCAyNywgMjQzLCAyNTIsIDE1LCA1LCAKKyAgICAyMDYsIDI3LCAyMzgsIDEsIDE1LCA1LCAyMDYsIDI3LCAyMzcsIDIzOCwgMTUsIDUsIDIwNiwgMjcsIDIzNiwgMjQwLCAxNSwgCisgICAgNSwgMjA2LCAyNywgMjM2LCAxMTMsIDE1LCA1LCAyMDYsIDI3LCAyMzYsIDExMCwgMTUsIDUsIDIwNiwgMjcsIDIzNSwgNjcsIAorICAgIDE1LCA1LCAyMDYsIDI3LCAyMzQsIDIzMSwgMTUsIDUsIDIwNiwgMjcsIDIzNCwgMjUsIDE1LCA1LCAyMDYsIDI3LCAyMzQsIAorICAgIDI2LCA4OCwgMjQ3LCAxMTEsIDE1LCA1LCAyMDYsIDI3LCAyMzQsIDI2LCA4OCwgMjQ0LCAxMDMsIDE1LCA1LCAyMDYsIDI3LCAKKyAgICAyMzQsIDI2LCA4OCwgMjIyLCA4NywgMTUsIDUsIDIwNiwgMjcsIDIzMywgMTk2LCAxNSwgNSwgMjA2LCAyNywgMjMzLCAxOTcsIAorICAgIDg4LCAyMzEsIDk4LCAxNSwgNSwgMjA2LCAyNywgMjMyLCAxNDEsIDE1LCA1LCAyMDYsIDI3LCAyMzEsIDEwMywgMTUsIDUsIAorICAgIDIwNiwgMjcsIDIyOSwgMTA4LCAxNSwgNSwgMjA2LCAyNywgMjI3LCAyMiwgMTUsIDUsIDIwNiwgMjcsIDIyNiwgMTc3LCAxNSwgCisgICAgNSwgMjA2LCAyNywgMjI2LCAxMzEsIDE1LCA1LCAyMDYsIDI3LCAyMjUsIDI1LCAxNSwgNSwgMjA2LCAyNywgMjI0LCAyNDYsIAorICAgIDE1LCA1LCAyMDYsIDI3LCAyMjQsIDIxOSwgMTUsIDUsIDIwNiwgMjcsIDIyNCwgMTcwLCAxNSwgNSwgMjA2LCAyNywgMjI0LCAKKyAgICAxMzIsIDE1LCA1LCAyMDYsIDI3LCAyMjMsIDgxLCAxNSwgNSwgMjA2LCAyNywgMjIyLCAxMTIsIDE1LCA1LCAyMDYsIDI3LCAKKyAgICA2OCwgMTUsIDUsIDIwNiwgMjcsIDIyMCwgMTI0LCAxNSwgNSwgMjA2LCAyNywgMjIwLCAxMTUsIDE1LCA1LCAyMDYsIDI3LCAKKyAgICAyMjAsIDkwLCAyNywgMTg3LCAxNSwgNSwgMjA2LCAyNywgMjIwLCAzMCwgMTUsIDUsIDIwNiwgMjcsIDIxNywgNDIsIDE1LCAKKyAgICA1LCAyMzcsIDYsIDE1LCA1LCAyMzcsIDcsIDI1MCwgOTUsIDIzNywgNiwgMTUsIDUsIDIzNiwgMjU1LCAxNSwgNSwgMjM2LCAKKyAgICAyNTMsIDE1LCA1LCAyMzYsIDI1MSwgMTUsIDUsIDIzNiwgMjUwLCAxNSwgNSwgMjM2LCAyNDgsIDE1LCA1LCAyMzYsIDI0OSwgCisgICAgMTA0LCAyMzYsIDI0OCwgMTUsIDUsIDIzNiwgMjQwLCAxNSwgNSwgMjM2LCAyNDEsIDI3LCAyMzgsIDIsIDI0NCwgMywgMTUsIAorICAgIDUsIDIzNiwgMjM2LCAxNSwgNSwgMjM2LCAyMzcsIDI3LCAyNTIsIDIyOCwgMTUsIDUsIDIzNiwgMjM3LCAyNTAsIDk1LCAKKyAgICAyMzYsIDIzNiwgMTUsIDUsIDIzNiwgMjM1LCAxNSwgNSwgMjM2LCAyMzQsIDE1LCA1LCAyMzYsIDIwOCwgMTUsIDUsIDIzNiwgCisgICAgMjA5LCAyMzUsIDE3NSwgMjcsIDEwNSwgMTA0LCAyMzUsIDE3NSwgMjcsIDY4LCAxNSwgNSwgMjM2LCAyMDksIDEwNCwgMjM2LCAKKyAgICAyMDksIDIzNSwgMTc1LCAyNywgMTA1LCAxMDQsIDIzNSwgMTc1LCAyNywgNjgsIDE1LCA1LCAyMzYsIDE2MCwgMTUsIDUsIAorICAgIDIzNiwgMTEzLCAxNSwgNSwgMjM2LCAxMTQsIDI3LCAyNTIsIDIyOCwgMTUsIDUsIDIzNiwgMTE0LCAyNywgNjgsIDE1LCA1LCAKKyAgICAyMzYsIDExNCwgMjcsIDIyMCwgMTE1LCAxNSwgNSwgMjM2LCAxMTAsIDE1LCA1LCAyMzYsIDEwNCwgMTUsIDUsIDIzNiwgOTMsIAorICAgIDE1LCA1LCAyMzYsIDkyLCAxNSwgNSwgMjM2LCA5MCwgMTUsIDUsIDIzNiwgOTEsIDEwNCwgMjM2LCA5MCwgMTUsIDUsIDIzNiwgCisgICAgNywgMTUsIDUsIDIzNiwgOCwgMTA0LCAyNDMsIDExMywgMjcsIDI1NCwgNiwgMjM2LCA4LCAxMDQsIDI0MywgMTEzLCAyNywgCisgICAgMjU0LCA1LCAxNSwgNSwgMjM2LCA1LCAxNSwgNSwgMjM2LCAzLCAxNSwgNSwgMjM2LCA0LCAyMTksIDE3NywgMTcsIDE1LCA1LCAKKyAgICAyMzYsIDIsIDE1LCA1LCAyMzYsIDAsIDE1LCA1LCAyMzYsIDEsIDI0NCwgMywgMTUsIDUsIDIzNSwgMjU1LCAxNSwgNSwgCisgICAgMjM1LCAyNDcsIDE1LCA1LCAyMzUsIDI0OCwgMjMwLCAxMTAsIDIzNSwgMjQ3LCAxNSwgNSwgMjM1LCAyNDIsIDE1LCA1LCAKKyAgICAyMzUsIDIyNSwgMTUsIDUsIDIzNSwgMTg4LCAxNSwgNSwgMjM1LCAxNzQsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDYwLCAxNSwgCisgICAgNSwgMjM1LCAxNzUsIDI3LCAxMTIsIDg4LCAyNDksIDIwOCwgODgsIDE1NSwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMTEyLCAKKyAgICA4OCwgMjQ0LCAyMjAsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDExMiwgODgsIDIzNSwgMTYyLCAxNSwgNSwgMjM1LCAxNzUsIAorICAgIDI3LCAyNTQsIDE3NSwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjU0LCAxMzEsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDI1NCwgOCwgCisgICAgMjE3LCAzOCwgMjIyLCA1OSwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjUyLCAyMjgsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIAorICAgIDI1MiwgODQsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDI0OSwgMTU2LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyNDYsIDE5NywgCisgICAgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjQ1LCAwLCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyNDQsIDIyMCwgMTUsIDUsIDIzNSwgCisgICAgMTc1LCAyNywgMjQ0LCAxMSwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjQ0LCAxMiwgODgsIDI0NCwgMTEsIDE1LCA1LCAyMzUsIAorICAgIDE3NSwgMjcsIDE1NSwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjQzLCAxOTcsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDI0MywgCisgICAgMTEzLCAyNywgMjMxLCAxMDMsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIzOCwgMiwgMjQ0LCAzLCAxNSwgNSwgMjM1LCAxNzUsIAorICAgIDI3LCAyMzcsIDIzOCwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjM3LCAyMzksIDg4LCAxNTUsIDE1LCA1LCAyMzUsIDE3NSwgCisgICAgMjcsIDIzNywgMjM5LCA4OCwgMjM0LCAyMzEsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIzNiwgMTEzLCAxNSwgNSwgMjM1LCAKKyAgICAxNzUsIDI3LCAyMzYsIDEwNCwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjM2LCA1LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMzYsIAorICAgIDAsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIzNiwgMSwgODgsIDI0MywgMTEzLCA4OCwgNjAsIDE1LCA1LCAyMzUsIDE3NSwgCisgICAgMjcsIDIzNSwgMTc0LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMzUsIDI5LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMzQsIAorICAgIDIzMSwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjM0LCAyMjEsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIzNCwgMjUsIDE1LCA1LCAKKyAgICAyMzUsIDE3NSwgMjcsIDIzNCwgMjYsIDg4LCAyNDYsIDE5NywgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjMzLCA2MiwgMTUsIDUsIAorICAgIDIzNSwgMTc1LCAyNywgMjMyLCAxNDEsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIyNCwgMjQ3LCA4OCwgMjIzLCA3NCwgMTUsIAorICAgIDUsIDIzNSwgMTc1LCAyNywgMjI0LCAyMDMsIDg4LCAyNDQsIDgyLCA4OCwgMjQ2LCAxNDMsIDE1LCA1LCAyMzUsIDE3NSwgCisgICAgMjcsIDIyNCwgMjAzLCA4OCwgMjQ0LCA4MiwgMjIyLCA1OSwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjI0LCAxNjgsIDE1LCA1LCAKKyAgICAyMzUsIDE3NSwgMjcsIDIyNCwgMTY5LCA4OCwgMjI0LCAxNjgsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIyMywgNzQsIDE1LCAKKyAgICA1LCAyMzUsIDE3NSwgMjcsIDIyMiwgMTQxLCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMjIsIDEzMCwgMTUsIDUsIDIzNSwgCisgICAgMTc1LCAyNywgMjIyLCA4OCwgODgsIDExMiwgODgsIDIyMywgMTA0LCA4OCwgMjA4LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAKKyAgICA2OCwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMTA1LCA4OCwgNjAsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDEwNSwgODgsIDEwNSwgCisgICAgODgsIDY4LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMjAsIDEyNSwgODgsIDI1NCwgNywgMTUsIDUsIDIzNSwgMTc1LCAyNywgCisgICAgMjIwLCAxMTUsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIyMCwgMzAsIDE1LCA1LCAyMzUsIDE3NSwgMjIzLCAyMjYsIDE1LCA1LCAKKyAgICAyMzUsIDE3MiwgMTUsIDUsIDIzNSwgMTczLCAyNywgMjI0LCAyNDYsIDE1LCA1LCAyMzUsIDE3MywgMjcsIDIyNCwgMjQ3LCAKKyAgICA4OCwgMjIzLCA3NCwgMTUsIDUsIDIzNSwgMTczLCAyNDQsIDMsIDE1LCA1LCAyMzUsIDE3MywgMjQ0LCA0LCAxMDQsIDIzNSwgCisgICAgMTczLCAyNDQsIDQsIDIyNCwgMjQ2LCAxNSwgNSwgMjM1LCAxNjksIDE1LCA1LCAyMzUsIDE2MiwgMTUsIDUsIDIzNSwgMTYzLCAKKyAgICAyNywgMjM1LCAxNjIsIDE1LCA1LCAyMzUsIDE2MCwgMTUsIDUsIDIzNSwgMTYxLCAyNywgMjM1LCAyNDcsIDE1LCA1LCAyMzUsIAorICAgIDE2MSwgMjcsIDIzNSwgMjQ4LCA4OCwgMjI3LCAyMiwgMTUsIDUsIDIzNSwgNjcsIDE1LCA1LCAyMzUsIDU0LCAxNSwgNSwgCisgICAgMjM1LCA0NiwgMTUsIDUsIDIzNSwgMjksIDE1LCA1LCAyMzQsIDIzMSwgMTUsIDUsIDIzNCwgMjMyLCAyNywgMjUyLCAyMjgsIAorICAgIDE1LCA1LCAyMzQsIDIyOSwgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjU0LCAxNzUsIDE1LCA1LCAyMzQsIDIzMCwgMjcsIDI1MiwgCisgICAgMjI4LCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyNDYsIDEzMCwgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjQ2LCAxMzEsIDIyMiwgCisgICAgNTksIDE1LCA1LCAyMzQsIDIzMCwgMjcsIDI0NCwgMjI5LCAyMjIsIDU5LCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyNDMsIAorICAgIDExMywgMjcsIDI1MiwgMjI4LCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyMzcsIDIzOCwgMTUsIDUsIDIzNCwgMjMwLCAyNywgCisgICAgMjM2LCAyNTMsIDE1LCA1LCAyMzQsIDIzMCwgMjcsIDIzNiwgMjUxLCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyMzYsIDI1MiwgCisgICAgODgsIDI1NCwgNywgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjM2LCAxMTMsIDE1LCA1LCAyMzQsIDIzMCwgMjcsIDIzNSwgMTg5LCAKKyAgICA4OCwgMjU0LCA3LCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyMzUsIDE3NCwgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjM0LCAyNiwgCisgICAgODgsIDI0NiwgMTk3LCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyMzIsIDE0MSwgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjMxLCAKKyAgICAxNDQsIDE1LCA1LCAyMzQsIDIzMCwgMjcsIDIyNCwgMTQxLCA4OCwgMjU0LCA3LCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyMjQsIAorICAgIDEyNCwgODgsIDI1MSwgMjQ4LCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyMjAsIDI1MywgMTUsIDUsIDIzNCwgMjMwLCAyMjIsIAorICAgIDU5LCAxNSwgNSwgMjM0LCAyMzAsIDI1MCwgOTUsIDIzNCwgMjI5LCAxNSwgNSwgMjM0LCAyMzAsIDIzMCwgMTEwLCAyMzQsIAorICAgIDIyOSwgMTUsIDUsIDIzNCwgMjMwLCAyMjMsIDIyNiwgMTUsIDUsIDIzNCwgMjMwLCAyMjQsIDIyOCwgMTUsIDUsIDIzNCwgCisgICAgMjI4LCAxNSwgNSwgMjM0LCAyMjUsIDE1LCA1LCAyMzQsIDIyNiwgMTA0LCAyMzQsIDIyNSwgMTUsIDUsIDIzNCwgMjI2LCAKKyAgICAyMzAsIDExMCwgMjM0LCAyMjUsIDE1LCA1LCAyMzQsIDIyNiwgMjI0LCAyMjgsIDE1LCA1LCAyMzQsIDIyNCwgMTUsIDUsIAorICAgIDIzNCwgMjIxLCAxNSwgNSwgMjM0LCAyMTksIDE1LCA1LCAyMzQsIDIyMCwgMTA0LCAyMzQsIDIxOSwgMTUsIDUsIDIzNCwgCisgICAgMjIwLCAxMDQsIDIzNCwgMjIwLCAyNDQsIDIyMSwgMTA0LCAyNDQsIDIyMCwgMTUsIDUsIDE5NiwgMTUsIDUsIDIzNCwgMTIwLCAKKyAgICAyNywgMjIyLCAxMzAsIDE1LCA1LCAyMzQsIDEyMCwgMjQ0LCAzLCAxNSwgNSwgMjM0LCAxMTksIDE1LCA1LCAyMzQsIDEwNiwgCisgICAgMTUsIDUsIDIzNCwgNzQsIDE1LCA1LCAyMzQsIDU3LCAxNSwgNSwgMjM0LCA1NiwgMTUsIDUsIDIzNCwgMjUsIDE1LCA1LCAKKyAgICAyMzMsIDI0NCwgMTUsIDUsIDIzMywgMTk2LCAxNSwgNSwgMjMzLCAxNTksIDE1LCA1LCAyMzMsIDk5LCAxNSwgNSwgMjMzLCAKKyAgICAxMDAsIDEwNCwgMjMzLCA5OSwgMTUsIDUsIDIzMywgOTIsIDE1LCA1LCAyMzMsIDkzLCAyNDQsIDMsIDE1LCA1LCAyMzMsIAorICAgIDc4LCAxNSwgNSwgMjMzLCA2NSwgMTUsIDUsIDIzMywgNjIsIDE1LCA1LCAyMzMsIDYzLCAyNywgNjAsIDE1LCA1LCAyMzMsIAorICAgIDYzLCAyNywgMjM1LCAyNDcsIDE1LCA1LCAyMzMsIDYzLCAyNywgMjE3LCAxMTQsIDE1LCA1LCAyMzMsIDYzLCAxMDQsIDIzMywgCisgICAgNjIsIDE1LCA1LCAyMzMsIDYzLCAxMDQsIDIzMywgNjMsIDI3LCAxMTIsIDg4LCAyMDgsIDE1LCA1LCAyMzMsIDYzLCAyNTAsIAorICAgIDk1LCAyMzMsIDYyLCAxNSwgNSwgMjMzLCA2MCwgMTUsIDUsIDIzMywgNjEsIDI3LCA2MCwgMTUsIDUsIDIzMywgNjEsIDI3LCAKKyAgICAxMTIsIDg4LCAyNDksIDE1LCAxNSwgNSwgMjMzLCA2MSwgMjcsIDI0OSwgMTUsIDE1LCA1LCAyMzMsIDYxLCAyNDQsIDMsIAorICAgIDE1LCA1LCAyMDgsIDE1LCA1LCAyMzIsIDIzNywgMTUsIDUsIDIzMiwgMjI3LCAxNSwgNSwgMjMyLCAyMjgsIDIzNywgMTY5LCAKKyAgICAxNSwgNSwgMjMyLCAyMjgsIDI3LCAyMjQsIDE3MSwgMjIyLCA1OSwgMTUsIDUsIDIzMiwgMjI4LCAyMzAsIDExMCwgMjMyLCAKKyAgICAyMjcsIDE1LCA1LCAyMzIsIDIyNiwgMTUsIDUsIDIzMiwgMjIyLCAyMzEsIDkwLCAxNSwgNSwgMjMyLCAyMjEsIDE1LCA1LCAKKyAgICAyMzIsIDIyMCwgMTUsIDUsIDIzMiwgMTQxLCAxNSwgNSwgMjMyLCAxNDIsIDI3LCA2MCwgMTUsIDUsIDIzMiwgMTQyLCAyNywgCisgICAgMjIwLCAxMTUsIDE1LCA1LCAyMzIsIDE0MiwgMjI0LCAyMjgsIDE1LCA1LCAyMzIsIDYyLCAxNSwgNSwgMjMyLCA2MywgMjcsIAorICAgIDczLCAxNSwgNSwgMjMyLCA2MSwgMTUsIDUsIDIzMiwgMzQsIDE1LCA1LCAyMzIsIDM1LCAyNywgMjQ0LCAyMjksIDIyMiwgCisgICAgNTksIDE1LCA1LCAyMzIsIDM1LCAyNywgMjQ0LCAyMjEsIDg4LCAyNDQsIDIyOSwgMjIyLCA1OSwgMTUsIDUsIDIzMiwgMzIsIAorICAgIDE1LCA1LCAyMzIsIDMzLCAyNywgMjU0LCAxMzEsIDE1LCA1LCAyMzIsIDMzLCAyNywgMjU0LCA3LCAxNSwgNSwgMjMyLCAzMywgCisgICAgMjcsIDI1NCwgOCwgODgsIDI1NCwgNywgMTUsIDUsIDIzMiwgMzMsIDI3LCAyNDQsIDExLCAxNSwgNSwgMjMyLCAzMywgMjcsIAorICAgIDIzNCwgMjYsIDg4LCAyNDQsIDIyOSwgMjIyLCA1OSwgMTUsIDUsIDIzMiwgMzMsIDI3LCAyMzIsIDE0MSwgMTUsIDUsIDIzMiwgCisgICAgMzMsIDI3LCAyMzEsIDEwMywgMTUsIDUsIDIzMiwgMzMsIDI3LCAyMjQsIDI0NiwgMTUsIDUsIDIzMiwgMzMsIDI3LCAyMjQsIAorICAgIDI0NywgODgsIDExMiwgMjU0LCAxMzEsIDE1LCA1LCAyMzIsIDMzLCAyNywgMjI0LCAyNDcsIDg4LCAyNTQsIDcsIDE1LCA1LCAKKyAgICAyMzIsIDMzLCAyNywgMjI0LCAyNDcsIDg4LCAyNTQsIDgsIDg4LCAyNTQsIDcsIDE1LCA1LCAyMzIsIDMzLCAyNywgMjIwLCAKKyAgICAxMjUsIDg4LCAyNTQsIDcsIDE1LCA1LCAyMzIsIDMzLCAyNywgMjIwLCAzMCwgMTUsIDUsIDIzMiwgMjIsIDE1LCA1LCAyMzEsIAorICAgIDE0NCwgMTUsIDUsIDIzMSwgMTE3LCAxNSwgNSwgMjMxLCAxMDMsIDE1LCA1LCAyMzEsIDEwNCwgMjM1LCAxNzMsIDI3LCAKKyAgICAyNDQsIDIyMCwgMTUsIDUsIDIzMSwgMTA0LCAyMzUsIDE3MywgMjcsIDIzNCwgNTcsIDE1LCA1LCAyMzEsIDEwNCwgMjM1LCAKKyAgICAxNzMsIDI3LCAyMjYsIDE1NiwgMTUsIDUsIDIzMSwgMTA0LCAyMzUsIDE3MywgMjcsIDIyNiwgMTU3LCAxMDQsIDIzMSwgCisgICAgMTA0LCAyMzUsIDE3MywgMjcsIDIyNiwgMTU2LCAxNSwgNSwgMjMxLCAxMDQsIDIzNSwgMTczLCAyNywgMjIwLCAzMCwgMTUsIAorICAgIDUsIDIzMSwgMTA0LCAyMjIsIDU5LCAxNSwgNSwgMjMxLCAxMDQsIDEwNCwgMjMxLCAxMDMsIDE1LCA1LCAyMzEsIDEwNCwgCisgICAgMjUwLCA5NSwgMjMxLCAxMDMsIDE1LCA1LCAyMzEsIDEwNCwgMjUwLCA5NSwgMjMxLCAxMDQsIDIzNSwgMTczLCAxMDQsIAorICAgIDIzNSwgMTcyLCAxNSwgNSwgMjMxLCA5OCwgMTUsIDUsIDIzMSwgOTksIDI1NSwgMTAsIDI3LCAyNTQsIDMsIDE1LCA1LCAKKyAgICAyMzEsIDk5LCAyNTUsIDEwLCAyNywgMjUyLCA4NCwgMTUsIDUsIDIzMSwgOTksIDI1NSwgMTAsIDI3LCAyNDcsIDEwNywgMTUsIAorICAgIDUsIDIzMSwgOTksIDI1NSwgMTAsIDI3LCAyNDQsIDExLCAxNSwgNSwgMjMxLCA5OSwgMjU1LCAxMCwgMjcsIDIzOCwgMiwgCisgICAgMjQ0LCAzLCAxNSwgNSwgMjMxLCA5OSwgMjU1LCAxMCwgMjcsIDIzNiwgMjUxLCAxNSwgNSwgMjMxLCA5OSwgMjU1LCAxMCwgCisgICAgMjcsIDIzNSwgMTg4LCAxNSwgNSwgMjMxLCA5OSwgMjU1LCAxMCwgMjcsIDIzMiwgMTQxLCAxNSwgNSwgMjMxLCA5OSwgMjU1LCAKKyAgICAxMCwgMjcsIDIyNCwgMTIxLCAxNSwgNSwgMjMxLCA5OSwgMjU1LCAxMCwgMjcsIDIyMCwgMTI0LCAxNSwgNSwgMjMxLCA5OSwgCisgICAgMjM2LCA5MSwgMjcsIDI1MiwgODQsIDE1LCA1LCAyMzEsIDk5LCAyMzYsIDkxLCAyNywgMjUyLCA4NSwgNjgsIDE1LCA1LCAKKyAgICAxODcsIDE1LCA1LCAyMzAsIDM3LCAxNSwgNSwgMjMwLCAxMiwgMTUsIDUsIDIyOSwgMjQ2LCAxNSwgNSwgMjI5LCAxNTIsIAorICAgIDE1LCA1LCAyMjksIDEwOCwgMTUsIDUsIDIyOSwgMTA5LCAyNywgNjAsIDE1LCA1LCAyMjksIDEwOSwgMjcsIDI1NSwgMTEsIAorICAgIDE1LCA1LCAyMjksIDEwOSwgMjcsIDI1MiwgODQsIDE1LCA1LCAyMjksIDEwOSwgMjcsIDI1MSwgMjQ4LCAxNSwgNSwgMjI5LCAKKyAgICAxMDksIDI3LCA3MywgMTUsIDUsIDIyOSwgMTA5LCAyNywgNzIsIDE1LCA1LCAyMjksIDEwOSwgMjcsIDI0MiwgNjksIDE1LCAKKyAgICA1LCAyMjksIDEwOSwgMjcsIDY4LCAxNSwgNSwgMjI5LCAxMDksIDI3LCAyMjAsIDEyNCwgMTUsIDUsIDIyOSwgMTA5LCAyNTAsIAorICAgIDk1LCAyMjksIDEwOCwgMTUsIDUsIDIyOSwgNjcsIDE1LCA1LCAyMjksIDY4LCAyNywgMjM2LCAyMzYsIDE1LCA1LCAyMjksIAorICAgIDY4LCAyNywgMjIwLCAxMTUsIDE1LCA1LCAyMjksIDY4LCAyNywgMjE3LCAxMTQsIDE1LCA1LCAyMjksIDY4LCAyMzAsIDExMCwgCisgICAgMjI5LCA2NywgMTUsIDUsIDIwMywgMTUsIDUsIDIyNywgMjU0LCAxNSwgNSwgMjI3LCAxNDcsIDE1LCA1LCAyMjcsIDIyLCAKKyAgICAxNSwgNSwgMjI2LCAxNzcsIDE1LCA1LCAyMjYsIDE2NiwgMjMxLCA5MCwgMTUsIDUsIDIyNiwgMTY1LCAxNSwgNSwgMjI2LCAKKyAgICAxNjYsIDI3LCA2MCwgMTUsIDUsIDIyNiwgMTY2LCAyNywgMjQ3LCAxMTEsIDE1LCA1LCAyMjYsIDE2NiwgMjcsIDI0NywgCisgICAgMTA5LCAxNSwgNSwgMjI2LCAxNjYsIDI3LCAxNTUsIDE1LCA1LCAyMjYsIDE2NiwgMjcsIDIzNiwgMjQwLCAxNSwgNSwgMjI2LCAKKyAgICAxNjYsIDI3LCAyMzUsIDI0NywgMTUsIDUsIDIyNiwgMTY2LCAyNywgMjM0LCAyMTksIDE1LCA1LCAyMjYsIDE2NiwgMjcsIAorICAgIDIzMywgMTk2LCAxNSwgNSwgMjI2LCAxNjYsIDI3LCAyMzEsIDEwMywgMTUsIDUsIDIyNiwgMTY2LCAyNywgMjI2LCAxNTYsIAorICAgIDE1LCA1LCAyMjYsIDE2NiwgMjcsIDIyNCwgMjE5LCAxNSwgNSwgMjI2LCAxNjYsIDI3LCAyMjIsIDE0NywgMTUsIDUsIDIyNiwgCisgICAgMTY2LCAyNywgMjIwLCAxMjQsIDE1LCA1LCAyMjYsIDE2NiwgMjcsIDIyMCwgMTIxLCAxNSwgNSwgMjI2LCAxNjYsIDI3LCAKKyAgICAyMjAsIDk0LCAxNSwgNSwgMjI2LCAxNjYsIDI3LCAyMjAsIDUwLCAxNSwgNSwgMjI2LCAxNjYsIDI3LCAyMjAsIDMwLCAxNSwgCisgICAgNSwgMjI2LCAxNjYsIDEwNCwgMjI2LCAxNjUsIDE1LCA1LCAyMjYsIDE2NiwgMjQ0LCAzLCAxNSwgNSwgMjI2LCAxNTYsIDE1LCAKKyAgICA1LCAyMjYsIDE1NywgMjM1LCAxNzUsIDI3LCAyNTQsIDUsIDE1LCA1LCAyMjYsIDEzOCwgMTUsIDUsIDIyNiwgMTMxLCAxNSwgCisgICAgNSwgMjI1LCAyNSwgMTUsIDUsIDIyNSwgMjMsIDE1LCA1LCAyMjUsIDI0LCAyNywgNjAsIDE1LCA1LCAyMjUsIDI0LCAyNywgCisgICAgMjUyLCAyMjgsIDE1LCA1LCAyMjUsIDI0LCAyNywgMjQ0LCA4MSwgMTUsIDUsIDIyNSwgMjQsIDI3LCAyMzIsIDE0MSwgMTUsIAorICAgIDUsIDIyNSwgMjQsIDI3LCAyMjQsIDE2OCwgMTUsIDUsIDIyNSwgMjQsIDI3LCAyMjAsIDI0MCwgMTUsIDUsIDIyNSwgMjQsIAorICAgIDI3LCA2OCwgMTUsIDUsIDIyNSwgMjQsIDI3LCAxMDUsIDg4LCA2MCwgMTUsIDUsIDIyNSwgMjIsIDE1LCA1LCAyMjUsIDIwLCAKKyAgICAxNSwgNSwgMjI1LCAzLCAxNSwgNSwgMjI0LCAyNDYsIDE1LCA1LCAyMjQsIDI0NywgMjQyLCAxNzMsIDE1LCA1LCAyMjQsIAorICAgIDI0NywgMTA0LCAyMjQsIDI0NywgMjQ0LCAyNDgsIDEwNCwgMjQ0LCAyNDgsIDI0NCwgMjIxLCAxMDQsIDI0NCwgMjIwLCAxNSwgCisgICAgNSwgMjI0LCAyNDcsIDEwNCwgMjI0LCAyNDcsIDIyMiwgMTQ4LCAxMDQsIDIyMiwgMTQ4LCAyNDQsIDIyMSwgMTA0LCAyNDQsIAorICAgIDIyMCwgMTUsIDUsIDIyNCwgMjM5LCAxNSwgNSwgMjI0LCAyMzQsIDE1LCA1LCAyMjQsIDIzMSwgMTUsIDUsIDIyNCwgMjMwLCAKKyAgICAxNSwgNSwgMjI0LCAyMjcsIDE1LCA1LCAyMjQsIDIxOSwgMTUsIDUsIDIyNCwgMjIwLCAyNywgNjAsIDE1LCA1LCAyMjQsIAorICAgIDIyMCwgMjcsIDIzNywgMjM4LCAxNSwgNSwgMjI0LCAyMTMsIDE1LCA1LCAyMjQsIDIxNCwgMjcsIDYwLCAxNSwgNSwgMjI0LCAKKyAgICAyMTQsIDI3LCAyNTIsIDIxNywgMTUsIDUsIDIyNCwgMjE0LCAyNywgMjUxLCAyMzcsIDE1LCA1LCAyMjQsIDIxNCwgMjcsIAorICAgIDI0OCwgMjE5LCAxNSwgNSwgMjI0LCAyMTQsIDI3LCAyNDQsIDIyMCwgMTUsIDUsIDIyNCwgMjE0LCAyNywgMjM4LCAxLCAxNSwgCisgICAgNSwgMjI0LCAyMTQsIDI3LCAyMzgsIDIsIDI0NCwgMywgMTUsIDUsIDIyNCwgMjE0LCAyNywgMjM1LCAyNDIsIDE1LCA1LCAKKyAgICAyMjQsIDIxNCwgMjcsIDIzNCwgMjIxLCAxNSwgNSwgMjI0LCAyMTQsIDI3LCAyMzMsIDkyLCAxNSwgNSwgMjI0LCAyMTQsIAorICAgIDI3LCAyMjYsIDE1NiwgMTUsIDUsIDIyNCwgMjA4LCAxNSwgNSwgMjI0LCAyMDQsIDE1LCA1LCAyMjQsIDIwNSwgMjIyLCA1OSwgCisgICAgMTUsIDUsIDIyNCwgMjA1LCAxMDQsIDIyNCwgMjA1LCAyNTEsIDIyOSwgMTA0LCAyNTEsIDIyOCwgMTUsIDUsIDIyNCwgMjAyLCAKKyAgICAxNSwgNSwgMjI0LCAxNzAsIDE1LCA1LCAyMjQsIDE3MSwgMTA0LCAyMzcsIDE3MCwgMjI0LCAxNzAsIDE1LCA1LCAyMjQsIAorICAgIDE2OCwgMTUsIDUsIDIyNCwgMTY3LCAxNSwgNSwgMjI0LCAxNDAsIDE1LCA1LCAyMjQsIDE0MSwgMjQ0LCAzLCAxNSwgNSwgCisgICAgMjI0LCAxMzIsIDE1LCA1LCAyMjQsIDEzMCwgMTUsIDUsIDIyNCwgMTMxLCAxMDQsIDIyNCwgMTMxLCAyMjQsIDE2OCwgMTUsIAorICAgIDUsIDIyNCwgMTIzLCAxNSwgNSwgMjI0LCAxMjEsIDE1LCA1LCAyMjMsIDEwMywgMTUsIDUsIDIyMywgMTA0LCAxMDQsIDIyMywgCisgICAgMTAzLCAxNSwgNSwgMjIzLCA4MywgMTUsIDUsIDIyMywgODIsIDE1LCA1LCAyMjMsIDgxLCAxNSwgNSwgMjIzLCA3NCwgMTUsIAorICAgIDUsIDIyMywgNzMsIDE1LCA1LCAyMjMsIDUzLCAxNSwgNSwgMjIzLCA1MiwgMTUsIDUsIDIyMiwgMTU1LCAxNSwgNSwgMjIyLCAKKyAgICAxNTYsIDI1MywgMjUxLCAxNSwgNSwgMjIyLCAxNTYsIDI3LCAyNDMsIDExMiwgMTUsIDUsIDIyMiwgMTU2LCAyNywgMjMzLCAKKyAgICAxOTYsIDE1LCA1LCAyMjIsIDE1NiwgMjQ0LCAzLCAxNSwgNSwgMjIyLCAxNDcsIDE1LCA1LCAyMjIsIDE0OCwgMTA0LCAyMjIsIAorICAgIDE0OCwgMjMyLCA2MywgMTA0LCAyMzIsIDYzLCAyNDgsIDIwMywgMTA0LCAyNDgsIDIwMiwgMTUsIDUsIDIyMiwgMTQ4LCAKKyAgICAyMjMsIDIyNiwgMTUsIDUsIDIyMiwgMTQxLCAxNSwgNSwgMTE4LCAyNywgMjUyLCA4NCwgMTUsIDUsIDExOCwgMjcsIDI0NCwgCisgICAgMTEsIDE1LCA1LCAxMTgsIDI3LCAyMjQsIDI0NiwgMTUsIDUsIDExOCwgMjcsIDIyNCwgMTcwLCAxNSwgNSwgMTE4LCAyNywgCisgICAgMjIwLCAyNTMsIDE1LCA1LCAxMTgsIDI3LCAyMjAsIDExNSwgMTUsIDUsIDIyMiwgMTMwLCAxNSwgNSwgMjIyLCAxMTIsIDE1LCAKKyAgICA1LCAyMjIsIDg3LCAxNSwgNSwgMjIyLCA4OCwgMjQ0LCAzLCAxNSwgNSwgMjIxLCAyMDUsIDE1LCA1LCAyMjEsIDIwNiwgCisgICAgMjIyLCA1OSwgMTUsIDUsIDIyMSwgMTgxLCAxNSwgNSwgMjIxLCAxNjUsIDE1LCA1LCAyMjEsIDE2NiwgMjcsIDIyMiwgMTMwLCAKKyAgICAxNSwgNSwgMjIxLCAxNjYsIDEwNCwgMjIxLCAxNjUsIDE1LCA1LCAyMjEsIDE2NiwgMTA0LCAyMjEsIDE2NiwgMjQ0LCAyNDgsIAorICAgIDEwNCwgMjQ0LCAyNDgsIDI0NCwgMjIxLCAxMDQsIDI0NCwgMjIwLCAxNSwgNSwgMjIxLCAwLCAxNSwgNSwgMjIwLCAyNTMsIAorICAgIDE1LCA1LCAyMjAsIDI1MSwgMTUsIDUsIDIyMCwgMjQ5LCAxNSwgNSwgMjIwLCAyNDAsIDE1LCA1LCAyMjAsIDI0MSwgMTA0LCAKKyAgICAyMjAsIDI0MSwgMjE3LCAxMTUsIDEwNCwgMjE3LCAxMTQsIDE1LCA1LCA2OCwgMTUsIDUsIDEwNSwgMjQ0LCAxMSwgMTUsIDUsIAorICAgIDEwNSwgMTA1LCA2OCwgMTUsIDUsIDEwNSwgMTA0LCAxMDUsIDIzMCwgNDQsIDEwNCwgMjMwLCA0NCwgMjQ0LCAyMjEsIDEwNCwgCisgICAgMjQ0LCAyMjAsIDE1LCA1LCAxMDUsIDEwNCwgMTA1LCAyMjMsIDU0LCAxMDQsIDIyMywgNTMsIDE1LCA1LCAxMDUsIDEwNCwgCisgICAgMTA1LCAxMDUsIDIxMCwgMTA0LCAxMDUsIDIyNywgMTU5LCAxNSwgNSwgMjIwLCAxMjQsIDE1LCA1LCAyMjAsIDEyMSwgMTUsIAorICAgIDUsIDIyMCwgMTE1LCAxNSwgNSwgMjIwLCAxMTYsIDIzNSwgMjQyLCAxNSwgNSwgMjIwLCAxMTYsIDI3LCAyNTIsIDIyOCwgCisgICAgMTUsIDUsIDIyMCwgMTE2LCAyNywgMjMzLCAxOTYsIDE1LCA1LCAyMjAsIDExNiwgMjcsIDEwNSwgODgsIDEwNSwgODgsIDY4LCAKKyAgICAxNSwgNSwgMjIwLCAxMTYsIDI3LCAxMDUsIDg4LCAxMDUsIDg4LCAxMDUsIDI0NCwgMywgMTUsIDUsIDIyMCwgMTE2LCAyNDQsIAorICAgIDMsIDE1LCA1LCAyMjAsIDExNiwgMjI0LCAyMjgsIDE1LCA1LCAyMjAsIDExNiwgMjI0LCAyMjksIDI3LCAyNTIsIDIyOCwgCisgICAgMTUsIDUsIDIyMCwgMTExLCAxNSwgNSwgMjIwLCA5NCwgMTUsIDUsIDIyMCwgOTUsIDI3LCAyMzUsIDE3NCwgMTUsIDUsIAorICAgIDIyMCwgOTUsIDI3LCAyMzQsIDI2LCA4OCwgMjQ5LCAyMDcsIDE1LCA1LCAyMjAsIDk1LCAyNywgMjI1LCAyMywgMTUsIDUsIAorICAgIDIyMCwgOTUsIDI3LCA2OCwgMTUsIDUsIDIyMCwgOTMsIDE1LCA1LCAyMjAsIDg5LCAxNSwgNSwgMjIwLCA5MCwgMjcsIDIzNiwgCisgICAgMjA4LCAxNSwgNSwgMjIwLCA5MCwgMjcsIDE4NywgMTUsIDUsIDIyMCwgODcsIDE1LCA1LCAyMjAsIDg4LCAyNDQsIDMsIDE1LCAKKyAgICA1LCAyMjAsIDUwLCAxNSwgNSwgMjIwLCA1MSwgMjUwLCA5NSwgMjIwLCA1MCwgMTUsIDUsIDIyMCwgNTEsIDIyNCwgMjI4LCAKKyAgICAxNSwgNSwgMjIwLCA0OCwgMTUsIDUsIDIyMCwgNDksIDI3LCAxMTIsIDg4LCAxNTUsIDE1LCA1LCAyMjAsIDQ5LCAyNywgCisgICAgMTEyLCA4OCwgMjA4LCAxNSwgNSwgMjIwLCA0OSwgMjcsIDI1NCwgMTc1LCAxNSwgNSwgMjIwLCA0OSwgMjcsIDE1NSwgMTUsIAorICAgIDUsIDIyMCwgNDksIDI3LCAyMzEsIDEwMywgMTUsIDUsIDIyMCwgNDksIDI3LCAyMjAsIDEyNCwgMTUsIDUsIDIyMCwgNDksIAorICAgIDI3LCAyMjAsIDEyNSwgODgsIDI1NCwgNywgMTUsIDUsIDIyMCwgNDksIDI3LCAyMjAsIDEyNSwgODgsIDI1MiwgODQsIDE1LCAKKyAgICA1LCAyMjAsIDQ3LCAxNSwgNSwgMjIwLCA0NCwgMTUsIDUsIDIyMCwgNDMsIDE1LCA1LCAyMjAsIDQwLCAxNSwgNSwgMjIwLCAKKyAgICA0MSwgMjcsIDYwLCAxNSwgNSwgMjIwLCA0MSwgMjcsIDI1NCwgMywgMTUsIDUsIDIyMCwgNDEsIDI3LCAxMzUsIDE1LCA1LCAKKyAgICAyMjAsIDQxLCAyNywgMjQ3LCAxMDEsIDE1LCA1LCAyMjAsIDQxLCAyNywgMjQ1LCAwLCAxNSwgNSwgMjIwLCA0MSwgMjcsIAorICAgIDI0NCwgMjQwLCAxNSwgNSwgMjIwLCA0MSwgMjcsIDI0NCwgMjI5LCAyMjIsIDU5LCAxNSwgNSwgMjIwLCA0MSwgMjcsIDI0NCwgCisgICAgMjIwLCAxNSwgNSwgMjIwLCA0MSwgMjcsIDI0NCwgMTcsIDE1LCA1LCAyMjAsIDQxLCAyNywgMTU1LCAxNSwgNSwgMjIwLCAKKyAgICA0MSwgMjcsIDIzOCwgMSwgMTUsIDUsIDIyMCwgNDEsIDI3LCAyMzcsIDIzOCwgMTUsIDUsIDIyMCwgNDEsIDI3LCAyMzcsIAorICAgIDE0NSwgMTUsIDUsIDIyMCwgNDEsIDI3LCAyMzYsIDExMywgMTUsIDUsIDIyMCwgNDEsIDI3LCAyMzQsIDIxOSwgMTUsIDUsIAorICAgIDIyMCwgNDEsIDI3LCAyMzMsIDE1OSwgMTUsIDUsIDIyMCwgNDEsIDI3LCAxODcsIDE1LCA1LCAyMjAsIDQxLCAyNywgMjI0LCAKKyAgICAyNDYsIDE1LCA1LCAyMjAsIDQxLCAyNywgMjI0LCAxMzAsIDE1LCA1LCAyMjAsIDQxLCAyNywgMjIxLCAwLCAxNSwgNSwgCisgICAgMjIwLCA0MSwgMjcsIDEwNSwgODgsIDI0NCwgMTEsIDE1LCA1LCAyMjAsIDQxLCAyNywgMjIwLCAxMTUsIDE1LCA1LCAyMjAsIAorICAgIDQxLCAyNywgMjIwLCAzOCwgMTUsIDUsIDIyMCwgMzgsIDE1LCA1LCAyMjAsIDM5LCAyNywgNjgsIDE1LCA1LCAyMjAsIDMwLCAKKyAgICAxNSwgNSwgMjIwLCAzMSwgMjcsIDYwLCAxNSwgNSwgMjIwLCAzMSwgMjcsIDIzNiwgNywgMTUsIDUsIDIyMCwgMzEsIDI3LCAKKyAgICAyMzUsIDI0NywgMTUsIDUsIDIyMCwgMzEsIDI3LCAyMjIsIDEzMCwgMTUsIDUsIDIyMCwgMjcsIDE1LCA1LCAyMjAsIDI5LCAKKyAgICAxNSwgNSwgMjIwLCAyOCwgMTUsIDUsIDIyMCwgMjQsIDE1LCA1LCAyMjAsIDEzLCAxNSwgNSwgMjIwLCAxNCwgMjcsIDIzNiwgCisgICAgMjA4LCAxNSwgNSwgMjIwLCAxMiwgMTUsIDUsIDIxNywgMTE0LCAxNSwgNSwgMjE3LCAxMTUsIDIyMiwgNTksIDE1LCA1LCAKKyAgICAyMTcsIDExNSwgMjA0LCAyNywgMjM1LCAyNDcsIDE1LCA1LCAyMTcsIDExMSwgMTUsIDUsIDIxNywgMTA0LCAxNSwgNSwgCisgICAgMjE3LCA5MSwgMTUsIDUsIDIxNywgNDIsIDE1LCA1LCAyMTcsIDQzLCAxMDQsIDIxNywgNDIsIDE1LCA1LCAyMTcsIDQxLCAKKyAgICAxNSwgNSwgMjE3LCAzOSwgMTUsIDUsIDIxNywgNDAsIDIzNiwgMjU0LCAyMjIsIDU5LCAxNSwgNSwgMjE3LCAzNCwgMTUsIDUsIAorICAgIDIxNywgMjYsIDE1LCA1LCAyMTcsIDEzLCAxNSwgNSwgMjE3LCAxMSwgMTUsIDUsIDIxNywgMTIsIDI3LCA2MCwgMTUsIDUsIAorICAgIDIxNywgMTAsIDE1LCA1LCAyMTcsIDksIDE1LCAxMjAsIDUsIDEyNCwgMjU0LCA3LCAxNSwgMTIwLCA1LCAxNDgsIDI1NCwgNywgCisgICAgMTUsIDEyMCwgNSwgMjQ1LCAxMTYsIDI1NCwgNywgMTUsIDEyMCwgNSwgMjQ1LCAxNzAsIDI1NCwgNywgMTUsIDEyMCwgNSwgCisgICAgMjI0LCA4MiwgMjU0LCA3LCAxNSwgMTIwLCA1LCAyMjUsIDQzLCAyNTQsIDcsIDE1LCAxMjAsIDUsIDI0NiwgMjM1LCAyNTQsIAorICAgIDcsIDE1LCAxMjAsIDUsIDIzMiwgMzEsIDI1NCwgNywgMTUsIDEyMCwgNSwgMTQ4LCAyNDgsIDIwMiwgMTUsIDEyMCwgNSwgCisgICAgMjQ1LCAxMTYsIDI0OCwgMjAyLCAxNSwgMTIwLCA1LCAyNDUsIDE3MCwgMjQ4LCAyMDIsIDE1LCAxMjAsIDUsIDIyNCwgODIsIAorICAgIDI0OCwgMjAyLCAxNSwgMTIwLCA1LCAyMjUsIDQzLCAyNDgsIDIwMiwgMTUsIDEyMCwgNSwgMjQ2LCAyMzUsIDI0OCwgMjAyLCAKKyAgICAxNSwgMTIwLCA1LCAyMzIsIDMxLCAyNDgsIDIwMiwgMTUsIDEyMCwgNSwgMjQ1LCAxMTYsIDY4LCAxNSwgMTIwLCA1LCAyNDUsIAorICAgIDE3MCwgNjgsIDE1LCAxMjAsIDUsIDIyNCwgODIsIDY4LCAxNSwgMTIwLCA1LCAyMjUsIDQzLCA2OCwgMTUsIDEyMCwgNSwgCisgICAgMjQ2LCAyMzUsIDY4LCAxNSwgMTIwLCA1LCAyMzIsIDMxLCA2OCwgMTUsIDEyMCwgNSwgMTMxLCAyNDQsIDE2OCwgMTUsIAorICAgIDEyMCwgNSwgMTI0LCAyNDQsIDE2OCwgMTUsIDEyMCwgNSwgMTQ4LCAyNDQsIDE2OCwgMTUsIDEyMCwgNSwgMjQ1LCAxMTYsIAorICAgIDI0NCwgMTY4LCAxNSwgMTIwLCA1LCAyNDUsIDE3MCwgMjQ0LCAxNjgsIDE1LCAxMjAsIDUsIDIyNCwgODIsIDI0NCwgMTY4LCAKKyAgICAxNSwgMTIwLCA1LCAyMjUsIDQzLCAyNDQsIDE2OCwgMTUsIDEyMCwgNSwgMjQ2LCAyMzUsIDI0NCwgMTY4LCAxNSwgMTIwLCAKKyAgICA1LCAyMzIsIDMxLCAyNDQsIDE2OCwgMTUsIDEyMCwgNSwgMTMxLCAyNDQsIDE2NSwgMTUsIDEyMCwgNSwgMTI0LCAyNDQsIAorICAgIDE2NSwgMTUsIDEyMCwgNSwgMTQ4LCAyNDQsIDE2NSwgMTUsIDEyMCwgNSwgMjQ1LCAxMTYsIDI0NCwgMTY1LCAxNSwgMTIwLCAKKyAgICA1LCAyNDUsIDE3MCwgMjQ0LCAxNjUsIDE1LCAxMjAsIDUsIDEyNCwgMjI1LCAzLCAxNSwgMTIwLCA1LCAxNDgsIDIyNSwgMywgCisgICAgMTUsIDEyMCwgNSwgMTQ4LCAyMjUsIDQsIDIxOSwgMTc3LCAxNywgMTUsIDEyMCwgNSwgMjQ1LCAxMTYsIDIyNSwgMywgMTUsIAorICAgIDEyMCwgNSwgMjQ1LCAxNzAsIDIyNSwgMywgMTUsIDEyMCwgNSwgMjI0LCA4MiwgMjI1LCAzLCAxNSwgMTIwLCA1LCAyMjUsIAorICAgIDQzLCAyMjUsIDMsIDE1LCAxMjAsIDUsIDI0NiwgMjM1LCAyMjUsIDMsIDE1LCAxMjAsIDUsIDIzMiwgMzEsIDIyNSwgMywgCisgICAgMTUsIDEyMCwgNSwgMTMxLCAyMjQsIDI1NCwgMTUsIDEyMCwgNSwgMTI0LCAyMjQsIDI1NCwgMTUsIDEyMCwgNSwgMTQ4LCAKKyAgICAyMjQsIDI1NCwgMTUsIDEyMCwgNSwgMTQ4LCAyMjQsIDI1NSwgMjE5LCAxNzcsIDE3LCAxNSwgMTIwLCA1LCAyNDUsIDExNiwgCisgICAgMjI0LCAyNTQsIDE1LCAxMjAsIDUsIDI0NSwgMTcwLCAyMjQsIDI1NCwgMTUsIDEyMCwgNSwgMjI1LCA0LCAyNywgMjQ0LCAKKyAgICAyNDEsIDg4LCAyNDgsIDIwMiwgMTUsIDEyMCwgNSwgMjI1LCA0LCAyNywgMjQ0LCAyNDEsIDg4LCAyMzMsIDE1OSwgMTUsIAorICAgIDEyMCwgNSwgMTMxLCAyNTEsIDIyNSwgMTUsIDEyMCwgNSwgMTI0LCAyNTEsIDIyNSwgMTUsIDEyMCwgNSwgMTQ4LCAyNTEsIAorICAgIDIyNSwgMTUsIDEyMCwgNSwgMTQ4LCAyNTEsIDIyNiwgMjE5LCAxNzcsIDE3LCAxNSwgMTIwLCA1LCAyNDUsIDExNiwgMjUxLCAKKyAgICAyMjUsIDE1LCAxMjAsIDUsIDI0NSwgMTcwLCAyNTEsIDIyNSwgMTUsIDEyMCwgNSwgMTQ4LCAyMTksIDE3NywgMjQ1LCAxMjQsIAorICAgIDI0NiwgMTMyLCAxNSwgMTIwLCA1LCAxNDgsIDIxOSwgMTc3LCAyNDUsIDEyNCwgMjQ2LCAxMjksIDE1LCAxMjAsIDUsIDI0NSwgCisgICAgMTE2LCAyMTksIDE3NywgMjQ1LCAxMjQsIDIzNSwgNDcsIDE1LCAxMjAsIDUsIDI0NSwgMTE2LCAyMTksIDE3NywgMjQ1LCAKKyAgICAxMjQsIDIzNSwgNDUsIDE1LCAxMjAsIDUsIDI0NSwgMTE2LCAyMTksIDE3NywgMjQ1LCAxMjQsIDIzNSwgNDgsIDYwLCAxNSwgCisgICAgMTIwLCA1LCAyNDUsIDExNiwgMjE5LCAxNzcsIDI0NSwgMTI0LCAyMzUsIDQ4LCAyNTMsIDIwNCwgMTUsIDEyMCwgNSwgMjI0LCAKKyAgICA4MiwgMjE5LCAxNzcsIDI0NSwgMTI0LCAyNTQsIDQsIDE1LCAxMjAsIDUsIDIyNSwgNDMsIDIxOSwgMTc3LCAyNDUsIDEyNCwgCisgICAgMjM3LCAyMzAsIDE1LCAxMjAsIDUsIDIyNSwgNDMsIDIxOSwgMTc3LCAyNDUsIDEyNCwgMjM3LCAyMzIsIDYwLCAxNSwgMTIwLCAKKyAgICA1LCAyMjUsIDQzLCAyMTksIDE3NywgMjQ1LCAxMjQsIDIzNywgMjMyLCAyNTMsIDIwNCwgMTUsIDEyMCwgNSwgMjQ2LCAyMzUsIAorICAgIDIxOSwgMTc3LCAyNDUsIDEyNCwgMjIwLCAyNiwgMTUsIDEyMCwgNSwgMjQ2LCAyMzUsIDIxOSwgMTc3LCAyNDUsIDEyNCwgCisgICAgMjIwLCAyNSwgMTUsIDEyMCwgNSwgMjMyLCAzMSwgMjE5LCAxNzcsIDI0NSwgMTI0LCAyMzcsIDI0NiwgMTUsIDEyMCwgNSwgCisgICAgMjMyLCAzMSwgMjE5LCAxNzcsIDI0NSwgMTI0LCAyMzcsIDI0NSwgMTUsIDEyMCwgNSwgMjMyLCAzMSwgMjE5LCAxNzcsIAorICAgIDI0NSwgMTI0LCAyMzcsIDI0NCwgMTUsIDEyMCwgNSwgMjMyLCAzMSwgMjE5LCAxNzcsIDI0NSwgMTI0LCAyMzcsIDI0NywgCisgICAgNjAsIDE1LCAxMjAsIDUsIDEyNCwgMjU0LCA4LCAyMjIsIDU5LCAxNSwgMTIwLCA1LCAxNDgsIDI1NCwgOCwgMjIyLCA1OSwgCisgICAgMTUsIDEyMCwgNSwgMjQ1LCAxMTYsIDI1NCwgOCwgMjIyLCA1OSwgMTUsIDEyMCwgNSwgMjQ1LCAxNzAsIDI1NCwgOCwgMjIyLCAKKyAgICA1OSwgMTUsIDEyMCwgNSwgMjI0LCA4MiwgMjU0LCA4LCAyMjIsIDU5LCAxNSwgMTIwLCA1LCAxMzEsIDI1MiwgMjA3LCAxNSwgCisgICAgMTIwLCA1LCAxMjQsIDI1MiwgMjA3LCAxNSwgMTIwLCA1LCAxNDgsIDI1MiwgMjA3LCAxNSwgMTIwLCA1LCAyNDUsIDExNiwgCisgICAgMjUyLCAyMDcsIDE1LCAxMjAsIDUsIDI0NSwgMTE2LCAyNTIsIDIwOCwgMjE5LCAxNzcsIDE3LCAxNSwgMTIwLCA1LCAyNDUsIAorICAgIDE3MCwgMjUyLCAyMDcsIDE1LCAxMjAsIDUsIDI0NSwgMTcwLCAyNTIsIDIwOCwgMjE5LCAxNzcsIDE3LCAxNSwgMTIwLCA1LCAKKyAgICAyMzIsIDQwLCAxNSwgMTIwLCA1LCAyMzIsIDQxLCAxNSwgMTIwLCA1LCAxMzEsIDI0NiwgMTI4LCAxNSwgMTIwLCA1LCAxMjQsIAorICAgIDI0NiwgMTI4LCAxNSwgMTIwLCA1LCAxMzEsIDIyMSwgMjUyLCAyNDgsIDIwMiwgMTUsIDEyMCwgNSwgMTI0LCAyMjEsIDI1MCwgCisgICAgMjQ4LCAyMDIsIDE1LCAxMjAsIDUsIDI0NSwgMTcwLCAyMjQsIDcyLCAyNDgsIDIwMiwgMTUsIDEyMCwgNSwgMTMxLCAyMjEsIAorICAgIDI1MiwgMjE5LCAxNzcsIDI0NSwgMTI0LCA2MCwgMTUsIDEyMCwgNSwgMTI0LCAyMjEsIDI1MCwgMjE5LCAxNzcsIDI0NSwgCisgICAgMTI0LCA2MCwgMTUsIDEyMCwgNSwgMTMxLCAyNDYsIDIzMiwgMjU0LCA3LCAxNSwgMTIwLCA1LCAxMzEsIDIyOCwgOTAsIAorICAgIDI1NCwgNywgMTUsIDEyMCwgNSwgNDgsIDI1MywgMjU0LCAxMzEsIDIyNCwgNzMsIDE1LCAxMjAsIDUsIDQ4LCAyNTMsIDI1NCwgCisgICAgMTMxLCAyMjgsIDg5LCAxNSwgMjI4LCAxOTcsIDUsIDQ4LCAyNTMsIDI1NCwgMjE4LCAxNzQsIDI0OCwgMTkxLCAxNSwgMjI4LCAKKyAgICAxOTcsIDUsIDY5LCAyNTAsIDE3NSwgMTUsIDIyOCwgMTk3LCA1LCAyNDksIDExLCAyNTAsIDE3NSwgMTUsIDIyOCwgMTk3LCAKKyAgICA1LCAyNDksIDExLCAyMjEsIDg2LCAxMCwgMTEsIDI1NSwgMTQwLCAxMCwgMTEsIDI1NSwgMTM5LCAxMCwgMTEsIDI1NSwgCisgICAgMTM4LCAxMCwgMTEsIDI1NSwgMTM3LCAxMCwgMTEsIDI1NSwgMTM2LCAxMCwgMTEsIDI1NSwgMTM1LCAxMCwgMTEsIDI1NSwgCisgICAgMTM0LCAxMCwgMTEsIDI1NSwgMTMzLCAxMCwgMTEsIDI1NSwgMTMyLCAxMCwgMTEsIDI1NSwgMTMxLCAxMCwgMTEsIDI1NSwgCisgICAgMTMwLCAxMCwgMTEsIDI1NSwgMTI5LCAxMCwgMTEsIDI1NSwgMTI4LCAxMCwgMTEsIDI1NSwgMTI3LCAxMCwgMTEsIDI1NSwgCisgICAgMTI2LCAxMCwgMTEsIDI1NSwgMTI1LCAxMCwgMTEsIDI1NSwgMTI0LCAxMCwgMTEsIDI1NSwgMTIzLCAxMCwgMTEsIDI1NSwgCisgICAgMTIyLCAxMCwgMTEsIDI1NSwgMTIxLCAxMCwgMTEsIDI1NSwgMTIwLCAxMCwgMTEsIDI1NSwgMTE5LCAxMCwgMTEsIDI1NSwgCisgICAgMTE4LCAxMCwgMTEsIDI1NSwgMTE3LCAxMCwgMTEsIDI1NSwgMTE2LCAxMCwgMTEsIDI1NSwgMTE1LCAxMCwgMTEsIDI1NSwgCisgICAgMTE0LCAxMCwgMTEsIDI1NSwgMTEzLCAxMCwgMTEsIDI1NSwgMTEyLCAxMCwgMTEsIDI1NSwgMTExLCAxMCwgMTEsIDI1NSwgCisgICAgMTEwLCAxMCwgMTEsIDI1NSwgMTA5LCAxMCwgMTEsIDI1NSwgMTA4LCAxMCwgMTEsIDI1NSwgMTA3LCAxMCwgMTEsIDI1NSwgCisgICAgMTA2LCAxMCwgMTEsIDI1NSwgMTA1LCAxMCwgMTEsIDI1NSwgMTA0LCAxMCwgMTEsIDI1NSwgMTAzLCAxMCwgMTEsIDI1NSwgCisgICAgMTAyLCAxMCwgMTEsIDI1NSwgMTAxLCAxMCwgMTEsIDI1NSwgMTAwLCAxMCwgMTEsIDI1NSwgOTksIDEwLCAxMSwgMjU1LCAKKyAgICA5OCwgMTAsIDExLCAyNTUsIDk3LCAxMCwgMTEsIDI1NSwgOTYsIDEwLCAxMSwgMjU1LCA5NSwgMTAsIDExLCAyNTUsIDk0LCAKKyAgICAxMCwgMTEsIDI1NSwgOTMsIDEwLCAxMSwgMjU1LCA5MiwgMTAsIDExLCAyNTUsIDkxLCAxMCwgMTEsIDI1NSwgOTAsIDEwLCAKKyAgICAxMSwgMjU1LCA4OSwgMTAsIDExLCAyNTUsIDg4LCAxMCwgMTEsIDI1NSwgODcsIDEwLCAxMSwgMjU1LCA4NiwgMTAsIDExLCAKKyAgICAyNTUsIDg1LCAxMCwgMTEsIDI1NSwgODQsIDEwLCAxMSwgMjU1LCA4MywgMTAsIDExLCAyNTUsIDgyLCAxMCwgMTEsIDI1NSwgCisgICAgODEsIDEwLCAxMSwgMjU1LCA4MCwgMTAsIDExLCAyNTUsIDc5LCAxMCwgMTEsIDI1NSwgNzgsIDEwLCAxMSwgMjU1LCA3NywgCisgICAgMTAsIDExLCAyNTUsIDc2LCAxMCwgMTEsIDI1NSwgNzUsIDEwLCAxMSwgMjU1LCA3NCwgMTAsIDExLCAyNTUsIDczLCAxMCwgCisgICAgMTEsIDI1NSwgNzIsIDEwLCAxMSwgMjU1LCA3MSwgMTAsIDExLCAyNTUsIDcwLCAxMCwgMTEsIDI1NSwgNjksIDEwLCAxMSwgCisgICAgMjU1LCA2OCwgMTAsIDExLCAyNTUsIDY3LCAxMCwgMTEsIDI1NSwgNjYsIDEwLCAxMSwgMjU1LCA2NSwgMTAsIDExLCAyNTUsIAorICAgIDY0LCAxMCwgMTEsIDI1NSwgNjMsIDEwLCAxMSwgMjU1LCA2MiwgMTAsIDExLCAyNTUsIDYxLCAxMCwgMTEsIDI1MywgMjAyLCAKKyAgICAxMCwgMTEsIDI1MywgMjAwLCAxMCwgMTEsIDI1MywgMTk4LCAxMCwgMTEsIDI1MywgMTk2LCAxMCwgMTEsIDI1MywgMTk0LCAKKyAgICAxMCwgMTEsIDI1MywgMTkzLCAxMCwgMTEsIDI1MywgMTkxLCAxMCwgMTEsIDI1MywgMTg5LCAxMCwgMTEsIDI1MywgMTg3LCAKKyAgICAxMCwgMTEsIDI1MywgMTg1LCAxMCwgMTEsIDI1MSwgMTk4LCAxMCwgMTEsIDI1MSwgMTk3LCAxMCwgMTEsIDI1MSwgMTk2LCAKKyAgICAxMCwgMTEsIDI1MSwgMTk1LCAxMCwgMTEsIDI1MSwgMTk0LCAxMCwgMTEsIDI1MSwgMTkzLCAxMCwgMTEsIDI1MSwgMTkyLCAKKyAgICAxMCwgMTEsIDI1MSwgMTkxLCAxMCwgMTEsIDI1MSwgMTkwLCAxMCwgMTEsIDI1MSwgMTg5LCAxMCwgMTEsIDI1MSwgMTg4LCAKKyAgICAxMCwgMTEsIDI1MSwgMTg3LCAxMCwgMTEsIDI1MSwgMTg2LCAxMCwgMTEsIDI1MSwgMTg1LCAxMCwgMTEsIDI1MSwgMTg0LCAKKyAgICAxMCwgMTEsIDI1MSwgMTgzLCAxMCwgMTEsIDI1MSwgMTgyLCAxMCwgMTEsIDI1MSwgMTgxLCAxMCwgMTEsIDI1MSwgMTgwLCAKKyAgICAxMCwgMTEsIDI1MSwgMTc5LCAxMCwgMTEsIDI1MSwgMTc4LCAxMCwgMTEsIDI1MSwgMTc3LCAxMCwgMTEsIDI1MSwgMTc2LCAKKyAgICAxMCwgMTEsIDI1MSwgMTc1LCAxMCwgMTEsIDI1MSwgMTc0LCAxMCwgMTEsIDI1MSwgMTczLCAxMCwgMTEsIDI1MSwgMTcyLCAKKyAgICAxMCwgMTEsIDI1MSwgMTcxLCAxMCwgMTEsIDI1MCwgNDUsIDEwLCAxMSwgMjUwLCA0NCwgMTAsIDExLCAyNTAsIDQzLCAxMCwgCisgICAgMTEsIDI1MCwgNDIsIDEwLCAxMSwgMjUwLCA0MSwgMTAsIDExLCAyNTAsIDQwLCAxMCwgMTEsIDI1MCwgMzksIDEwLCAxMSwgCisgICAgMjUwLCAzOCwgMTAsIDExLCAyNTAsIDM3LCAxMCwgMTEsIDI1MCwgMzYsIDEwLCAxMSwgMjUwLCAzNSwgMTAsIDExLCAyNTAsIAorICAgIDM0LCAxMCwgMTEsIDI1MCwgMzMsIDEwLCAxMSwgMjUwLCAzMiwgMTAsIDExLCAyNTAsIDMxLCAxMCwgMTEsIDI1MCwgMzAsIAorICAgIDEwLCAxMSwgMjUwLCAyOSwgMTAsIDExLCAyNTAsIDI4LCAxMCwgMTEsIDI1MCwgMjcsIDEwLCAxMSwgMjUwLCAyNiwgMTAsIAorICAgIDExLCAyNTAsIDI1LCAxMCwgMTEsIDI1MCwgMjQsIDEwLCAxMSwgMjUwLCAyMywgMTAsIDExLCAyNTAsIDIyLCAxMCwgMTEsIAorICAgIDI1MCwgMjEsIDEwLCAxMSwgMjUwLCAyMCwgMTAsIDExLCAyNTAsIDE5LCAxMCwgMTEsIDI1MCwgMTgsIDEwLCAxMSwgMjUwLCAKKyAgICAxNywgMTAsIDExLCAyNTAsIDE2LCAxMCwgMTEsIDI1MCwgMTUsIDEwLCAxMSwgMjUwLCAxNCwgMTAsIDExLCAyNTAsIDEzLCAKKyAgICAxMCwgMTEsIDI1MCwgMTIsIDEwLCAxMSwgMjUwLCAxMSwgMTAsIDExLCAyNTAsIDEwLCAxMCwgMTEsIDI1MCwgOSwgMTAsIAorICAgIDExLCAyNTAsIDgsIDEwLCAxMSwgMjUwLCA3LCAxMCwgMTEsIDI1MCwgNiwgMTAsIDExLCAyNTAsIDUsIDEwLCAxMSwgMjUwLCAKKyAgICA0LCAxMCwgMTEsIDI1MCwgMywgMTAsIDExLCAyNTAsIDIsIDEwLCAxMSwgMjUwLCAxLCAxMCwgMTEsIDI1MCwgMCwgMTAsIAorICAgIDExLCAyNDksIDI1NSwgMTAsIDExLCAyNDksIDI1NCwgMTAsIDExLCAyNDksIDI1MywgMTAsIDExLCAyNDksIDI1MiwgMTAsIAorICAgIDExLCAyNDksIDI1MSwgMTAsIDExLCAyNDksIDI1MCwgMTAsIDExLCAyNDksIDI0OSwgMTAsIDExLCAyNDksIDI0OCwgMTAsIAorICAgIDExLCAyNDksIDI0NywgMTAsIDExLCAyNDksIDI0NiwgMTAsIDExLCAyNDksIDI0NSwgMTAsIDExLCAyNDksIDI0NCwgMTAsIAorICAgIDExLCAyNDksIDI0MywgMTAsIDExLCAyNDksIDI0MiwgMTAsIDExLCAyNDksIDI0MSwgMTAsIDExLCAyNDksIDI0MCwgMTAsIAorICAgIDExLCAyNDksIDIzOSwgMTAsIDExLCAyNDksIDIzOCwgMTAsIDExLCAyNDksIDIzNywgMTAsIDExLCAyNDksIDIzNiwgMTAsIAorICAgIDExLCAyNDksIDIzNSwgMTAsIDExLCAyNDksIDIzNCwgMTAsIDExLCAyNDksIDIzMywgMTAsIDExLCAyNDksIDIzMiwgMTAsIAorICAgIDExLCAyNDksIDIzMSwgMTAsIDExLCAyNDksIDIzMCwgMTAsIDExLCAyNDksIDIyOSwgMTAsIDExLCAyNDksIDIyOCwgMTAsIAorICAgIDExLCAyNDksIDIyNywgMTAsIDExLCAyNDksIDIyNiwgMTAsIDExLCAyNDksIDIyNSwgMTAsIDExLCAyNDksIDIyNCwgMTAsIAorICAgIDExLCAyNDksIDIyMywgMTAsIDExLCAyNDksIDIyMiwgMTAsIDExLCAyNDksIDIyMSwgMTAsIDExLCAyNDksIDIyMCwgMTAsIAorICAgIDExLCAyNDksIDIxOSwgMTAsIDExLCAyNDksIDIxOCwgMTAsIDExLCAyNDksIDIxNywgMTAsIDExLCAyNDksIDIxNiwgMTAsIAorICAgIDExLCAyNDksIDIxNSwgMTAsIDExLCAyNDksIDIxNCwgMTAsIDExLCAyNDksIDIxMywgMTAsIDExLCAyNDksIDIxMiwgMTAsIAorICAgIDExLCAyNDksIDIxMSwgMTAsIDExLCAyNDksIDIxMCwgMTAsIDExLCAyNDcsIDYyLCAxMCwgMTEsIDI0NywgNjEsIDEwLCAxMSwgCisgICAgMjQ3LCA2MCwgMTAsIDExLCAyNDcsIDU5LCAxMCwgMTEsIDI0NywgNTgsIDEwLCAxMSwgMjQ3LCA1NywgMTAsIDExLCAyNDcsIAorICAgIDU2LCAxMCwgMTEsIDI0NywgNTUsIDEwLCAxMSwgMjQ3LCA1NCwgMTAsIDExLCAyNDcsIDUzLCAxMCwgMTEsIDI0NywgNTIsIAorICAgIDEwLCAxMSwgMjQ3LCA1MSwgMTAsIDExLCAyNDcsIDUwLCAxMCwgMTEsIDI0NywgNDksIDEwLCAxMSwgMjQ3LCA0OCwgMTAsIAorICAgIDExLCAyNDcsIDQ3LCAxMCwgMTEsIDI0NywgNDYsIDEwLCAxMSwgMjQ3LCA0NSwgMTAsIDExLCAyNDcsIDQ0LCAxMCwgMTEsIAorICAgIDI0NywgNDMsIDEwLCAxMSwgMjQ3LCA0MiwgMTAsIDExLCAyNDcsIDQxLCAxMCwgMTEsIDI0NywgNDAsIDEwLCAxMSwgMjQ3LCAKKyAgICAzOSwgMTAsIDExLCAyNDcsIDM4LCAxMCwgMTEsIDI0NywgMzcsIDEwLCAxMSwgMjQ3LCAzNiwgMTAsIDExLCAyNDcsIDM1LCAKKyAgICAxMCwgMTEsIDI0NywgMzQsIDEwLCAxMSwgMjQ3LCAzMywgMTAsIDExLCAyNDcsIDMyLCAxMCwgMTEsIDI0NywgMzEsIDEwLCAKKyAgICAxMSwgMjQ3LCAzMCwgMTAsIDExLCAyNDcsIDI5LCAxMCwgMTEsIDI0NywgMjgsIDEwLCAxMSwgMjQ3LCAyNywgMTAsIDExLCAKKyAgICAyNDcsIDI2LCAxMCwgMTEsIDI0NywgMjUsIDEwLCAxMSwgMjQ3LCAyNCwgMTAsIDExLCAyNDcsIDIzLCAxMCwgMTEsIDI0NywgCisgICAgMjIsIDEwLCAxMSwgMjQ3LCAyMSwgMTAsIDExLCAyNDcsIDIwLCAxMCwgMTEsIDI0NywgMTksIDEwLCAxMSwgMjQ2LCA3MywgCisgICAgMTAsIDExLCAyNDYsIDcyLCAxMCwgMTEsIDI0NiwgNzEsIDEwLCAxMSwgMjQ2LCA3MCwgMTAsIDExLCAyNDYsIDY5LCAxMCwgCisgICAgMTEsIDI0NiwgNjgsIDEwLCAxMSwgMjQ2LCA2NywgMTAsIDExLCAyNDYsIDY2LCAxMCwgMTEsIDI0NiwgNjUsIDEwLCAxMSwgCisgICAgMjQ2LCA2NCwgMTAsIDExLCAyNDYsIDYzLCAxMCwgMTEsIDI0NiwgNjIsIDEwLCAxMSwgMjQ2LCA2MSwgMTAsIDExLCAyNDYsIAorICAgIDYwLCAxMCwgMTEsIDI0NiwgNTksIDEwLCAxMSwgMjQ2LCA1OCwgMTAsIDExLCAyNDYsIDU3LCAxMCwgMTEsIDI0NiwgNTYsIAorICAgIDEwLCAxMSwgMjQ2LCA1NSwgMTAsIDExLCAyNDYsIDU0LCAxMCwgMTEsIDI0NiwgNTMsIDEwLCAxMSwgMjQ2LCA1MiwgMTAsIAorICAgIDExLCAyNDYsIDUxLCAxMCwgMTEsIDI0NiwgNTAsIDEwLCAxMSwgMjQ2LCA0OSwgMTAsIDExLCAyNDYsIDQ4LCAxMCwgMTEsIAorICAgIDI0NiwgNDcsIDEwLCAxMSwgMjQ2LCA0NiwgMTAsIDExLCAyNDYsIDQ1LCAxMCwgMTEsIDI0NiwgNDQsIDEwLCAxMSwgMjQ2LCAKKyAgICA0MywgMTAsIDExLCAyNDYsIDQyLCAxMCwgMTEsIDI0NiwgNDEsIDEwLCAxMSwgMjQ2LCA0MCwgMTAsIDExLCAyNDYsIDM5LCAKKyAgICAxMCwgMTEsIDI0NiwgMzgsIDEwLCAxMSwgMjQ2LCAzNywgMTAsIDExLCAyNDYsIDM2LCAxMCwgMTEsIDI0NiwgMzUsIDEwLCAKKyAgICAxMSwgMjQ2LCAzNCwgMTAsIDExLCAyNDYsIDMzLCAxMCwgMTEsIDI0NiwgMzIsIDEwLCAxMSwgMjQ2LCAzMSwgMTAsIDExLCAKKyAgICAyNDYsIDMwLCAxMCwgMTEsIDI0NiwgMjksIDEwLCAxMSwgMjQ2LCAyOCwgMTAsIDExLCAyNDYsIDI3LCAxMCwgMTEsIDI0NiwgCisgICAgMjYsIDEwLCAxMSwgMjQ2LCAyNSwgMTAsIDExLCAyNDYsIDI0LCAxMCwgMTEsIDI0NiwgMjMsIDEwLCAxMSwgMjQ2LCAyMiwgCisgICAgMTAsIDExLCAyNDYsIDIxLCAxMCwgMTEsIDI0NiwgMjAsIDEwLCAxMSwgMjQ2LCAxOSwgMTAsIDExLCAyNDYsIDE4LCAxMCwgCisgICAgMTEsIDI0NiwgMTcsIDEwLCAxMSwgMjQ2LCAxNiwgMTAsIDExLCAyNDYsIDE1LCAxMCwgMTEsIDI0NiwgMTQsIDEwLCAxMSwgCisgICAgMjQ2LCAxMywgMTAsIDExLCAyNDYsIDEyLCAxMCwgMTEsIDI0NiwgMTEsIDEwLCAxMSwgMjQ2LCAxMCwgMTAsIDExLCAyNDYsIAorICAgIDksIDEwLCAxMSwgMjQ1LCA2NiwgMTAsIDExLCAyNDUsIDY1LCAxMCwgMTEsIDI0NSwgNjQsIDEwLCAxMSwgMjQ1LCA2MywgCisgICAgMTAsIDExLCAyNDUsIDYyLCAxMCwgMTEsIDI0NSwgNjEsIDEwLCAxMSwgMjQ1LCA2MCwgMTAsIDExLCAyNDUsIDU5LCAxMCwgCisgICAgMTEsIDI0NSwgNTgsIDEwLCAxMSwgMjQ1LCA1NywgMTAsIDExLCAyNDUsIDU2LCAxMCwgMTEsIDI0NSwgNTUsIDEwLCAxMSwgCisgICAgMjQ1LCA1NCwgMTAsIDExLCAyNDUsIDUzLCAxMCwgMTEsIDI0NSwgNTIsIDEwLCAxMSwgMjQ1LCA1MSwgMTAsIDExLCAyNDUsIAorICAgIDUwLCAxMCwgMTEsIDI0NSwgNDksIDEwLCAxMSwgMjQ1LCA0OCwgMTAsIDExLCAyNDUsIDQ3LCAxMCwgMTEsIDI0NSwgNDYsIAorICAgIDEwLCAxMSwgMjQ1LCA0NSwgMTAsIDExLCAyNDUsIDQ0LCAxMCwgMTEsIDI0NSwgNDMsIDEwLCAxMSwgMjQ1LCA0MiwgMTAsIAorICAgIDExLCAyNDUsIDQxLCAxMCwgMTEsIDI0NSwgNDAsIDEwLCAxMSwgMjQ1LCAzOSwgMTAsIDExLCAyNDUsIDM4LCAxMCwgMTEsIAorICAgIDI0NSwgMzcsIDEwLCAxMSwgMjQ1LCAzNiwgMTAsIDExLCAyNDUsIDM1LCAxMCwgMTEsIDI0NSwgMzQsIDEwLCAxMSwgMjQ1LCAKKyAgICAzMywgMTAsIDExLCAyNDUsIDMyLCAxMCwgMTEsIDI0NSwgMzEsIDEwLCAxMSwgMjQ1LCAzMCwgMTAsIDExLCAyNDUsIDI5LCAKKyAgICAxMCwgMTEsIDI0NSwgMjgsIDEwLCAxMSwgMjQ1LCAyNywgMTAsIDExLCAyNDUsIDI2LCAxMCwgMTEsIDI0NSwgMjUsIDEwLCAKKyAgICAxMSwgMjQ1LCAyNCwgMTAsIDExLCAyNDUsIDIzLCAxMCwgMTEsIDI0NSwgMjIsIDEwLCAxMSwgMjQ1LCAyMSwgMTAsIDExLCAKKyAgICAyNDUsIDIwLCAxMCwgMTEsIDI0NSwgMTksIDEwLCAxMSwgMjQ1LCAxOCwgMTAsIDExLCAyNDUsIDE3LCAxMCwgMTEsIDI0NSwgCisgICAgMTYsIDEwLCAxMSwgMjQ1LCAxNSwgMTAsIDExLCAyNDUsIDE0LCAxMCwgMTEsIDI0NSwgMTMsIDEwLCAxMSwgMjQ1LCAxMiwgCisgICAgMTAsIDExLCAyNDUsIDExLCAxMCwgMTEsIDI0NSwgMTAsIDEwLCAxMSwgMjQ1LCA5LCAxMCwgMTEsIDI0NSwgOCwgMTAsIDExLCAKKyAgICAyNDUsIDcsIDEwLCAxMSwgMjQ1LCA2LCAxMCwgMTEsIDI0NSwgNSwgMTAsIDExLCAyNDUsIDQsIDEwLCAxMSwgMjQ1LCAzLCAKKyAgICAxMCwgMTEsIDI0MywgMjIzLCAxMCwgMTEsIDI0MywgMjIyLCAxMCwgMTEsIDI0MywgMjIxLCAxMCwgMTEsIDI0MywgMjIwLCAKKyAgICAxMCwgMTEsIDI0MywgMjE5LCAxMCwgMTEsIDI0MywgMjE4LCAxMCwgMTEsIDI0MywgMjE3LCAxMCwgMTEsIDI0MywgMjE2LCAKKyAgICAxMCwgMTEsIDI0MywgMjE1LCAxMCwgMTEsIDI0MiwgOTEsIDEwLCAxMSwgMjQyLCA5MCwgMTAsIDExLCAyNDIsIDg5LCAxMCwgCisgICAgMTEsIDI0MiwgODgsIDEwLCAxMSwgMjQyLCA4NywgMTAsIDExLCAyNDIsIDg2LCAxMCwgMTEsIDI0MiwgODUsIDEwLCAxMSwgCisgICAgMjQyLCA4NCwgMTAsIDExLCAyNDIsIDgzLCAxMCwgMTEsIDI0MiwgODIsIDEwLCAxMSwgMjQyLCA4MSwgMTAsIDExLCAyNDIsIAorICAgIDgwLCAxMCwgMTEsIDI0MiwgNzksIDEwLCAxMSwgMjQyLCA3OCwgMTAsIDExLCAyNDIsIDc3LCAxMCwgMTEsIDI0MiwgNzYsIAorICAgIDEwLCAxMSwgMjQyLCA3NSwgMTAsIDExLCAyNDIsIDc0LCAxMCwgMTEsIDI0MiwgNzMsIDEwLCAxMSwgMjM3LCAxNiwgMTAsIAorICAgIDExLCAyMzcsIDE1LCAxMCwgMTEsIDIzNywgMTQsIDEwLCAxMSwgMjM3LCAxMywgMTAsIDExLCAyMzcsIDEyLCAxMCwgMTEsIAorICAgIDIzNywgMTEsIDEwLCAxMSwgMjM3LCAxMCwgMTAsIDExLCAyMzcsIDksIDEwLCAxMSwgMjM1LCAxOTksIDEwLCAxMSwgMjM1LCAKKyAgICAxOTgsIDEwLCAxMSwgMjM1LCAxOTcsIDEwLCAxMSwgMjM1LCAxOTYsIDEwLCAxMSwgMjM1LCAxOTUsIDEwLCAxMSwgMjM1LCAKKyAgICAxOTQsIDEwLCAxMSwgMjM1LCAxOTMsIDEwLCAxMSwgMjM1LCAxOTIsIDEwLCAxMSwgMjM1LCAxOTEsIDEwLCAxMSwgMjM1LCAKKyAgICAxOTAsIDEwLCAxMSwgMjM0LCAxODYsIDEwLCAxMSwgMjM0LCAxODUsIDEwLCAxMSwgMjM0LCAxODQsIDEwLCAxMSwgMjM0LCAKKyAgICAxODMsIDEwLCAxMSwgMjM0LCAxODIsIDEwLCAxMSwgMjM0LCAxODEsIDEwLCAxMSwgMjM0LCAxODAsIDEwLCAxMSwgMjM0LCAKKyAgICAxNzksIDEwLCAxMSwgMjM0LCAxNzgsIDEwLCAxMSwgMjM0LCAxNzcsIDEwLCAxMSwgMjM0LCAxNzYsIDEwLCAxMSwgMjM0LCAKKyAgICAxNzUsIDEwLCAxMSwgMjM0LCAxNzQsIDEwLCAxMSwgMjM0LCAxNzMsIDEwLCAxMSwgMjM0LCAxNzIsIDEwLCAxMSwgMjM0LCAKKyAgICAxNzEsIDEwLCAxMSwgMjM0LCAxNzAsIDEwLCAxMSwgMjM0LCAxNjksIDEwLCAxMSwgMjM0LCAxNjgsIDEwLCAxMSwgMjM0LCAKKyAgICAxNjcsIDEwLCAxMSwgMjM0LCAxNjYsIDEwLCAxMSwgMjM0LCAxNjUsIDEwLCAxMSwgMjM0LCAxNjQsIDEwLCAxMSwgMjM0LCAKKyAgICAxNjMsIDEwLCAxMSwgMjM0LCAxNjIsIDEwLCAxMSwgMjM0LCAxNjEsIDEwLCAxMSwgMjM0LCAxNjAsIDEwLCAxMSwgMjM0LCAKKyAgICAxNTksIDEwLCAxMSwgMjM0LCAxNTgsIDEwLCAxMSwgMjM0LCAxNTcsIDEwLCAxMSwgMjM0LCAxNTYsIDEwLCAxMSwgMjM0LCAKKyAgICAxNTUsIDEwLCAxMSwgMjM0LCAxNTQsIDEwLCAxMSwgMjM0LCAxNTMsIDEwLCAxMSwgMjM0LCAxNTIsIDEwLCAxMSwgMjM0LCAKKyAgICAxNTEsIDEwLCAxMSwgMjM0LCAxNTAsIDEwLCAxMSwgMjM0LCAxNDksIDEwLCAxMSwgMjM0LCAxNDgsIDEwLCAxMSwgMjM0LCAKKyAgICAxNDcsIDEwLCAxMSwgMjM0LCAxNDYsIDEwLCAxMSwgMjM0LCAxNDUsIDEwLCAxMSwgMjM0LCAxNDQsIDEwLCAxMSwgMjM0LCAKKyAgICAxNDMsIDEwLCAxMSwgMjM0LCAxNDIsIDEwLCAxMSwgMjM0LCAxNDEsIDEwLCAxMSwgMjM0LCAxNDAsIDEwLCAxMSwgMjM0LCAKKyAgICAxMzksIDEwLCAxMSwgMjM0LCAxMzgsIDEwLCAxMSwgMjM0LCAxMzcsIDEwLCAxMSwgMjM0LCAxMzYsIDEwLCAxMSwgMjM0LCAKKyAgICAxMzUsIDEwLCAxMSwgMjM0LCAxMzQsIDEwLCAxMSwgMjM0LCAxMzMsIDEwLCAxMSwgMjM0LCAxMzIsIDEwLCAxMSwgMjM0LCAKKyAgICAxMzEsIDEwLCAxMSwgMjM0LCAxMzAsIDEwLCAxMSwgMjM0LCAxMjksIDEwLCAxMSwgMjM0LCAxMjgsIDEwLCAxMSwgMjM0LCAKKyAgICAxMjcsIDEwLCAxMSwgMjM0LCAxMjYsIDEwLCAxMSwgMjM0LCAxMjUsIDEwLCAxMSwgMjM0LCAxMjQsIDEwLCAxMSwgMjM0LCAKKyAgICAxMjMsIDEwLCAxMSwgMjM0LCAxMjIsIDEwLCAxMSwgMjM0LCAxMjEsIDEwLCAxMSwgMjMzLCAzMSwgMTAsIDExLCAyMzMsIAorICAgIDMwLCAxMCwgMTEsIDIzMywgMjksIDEwLCAxMSwgMjMzLCAyOCwgMTAsIDExLCAyMzMsIDI3LCAxMCwgMTEsIDIzMywgMjYsIAorICAgIDEwLCAxMSwgMjMzLCAyNSwgMTAsIDExLCAyMzMsIDI0LCAxMCwgMTEsIDIzMywgMjMsIDEwLCAxMSwgMjMzLCAyMiwgMTAsIAorICAgIDExLCAyMzMsIDIxLCAxMCwgMTEsIDIzMywgMjAsIDEwLCAxMSwgMjMzLCAxOSwgMTAsIDExLCAyMzMsIDE4LCAxMCwgMTEsIAorICAgIDIzMywgMTcsIDEwLCAxMSwgMjMzLCAxNiwgMTAsIDExLCAyMzMsIDE1LCAxMCwgMTEsIDIzMywgMTQsIDEwLCAxMSwgMjMzLCAKKyAgICAxMywgMTAsIDExLCAyMzMsIDEyLCAxMCwgMTEsIDIzMywgMTEsIDEwLCAxMSwgMjMzLCAxMCwgMTAsIDExLCAyMzMsIDksIAorICAgIDEwLCAxMSwgMjMzLCA4LCAxMCwgMTEsIDIzMywgNywgMTAsIDExLCAyMzMsIDYsIDEwLCAxMSwgMjMzLCA1LCAxMCwgMTEsIAorICAgIDIzMywgNCwgMTAsIDExLCAyMzMsIDMsIDEwLCAxMSwgMjMzLCAyLCAxMCwgMTEsIDIzMywgMSwgMTAsIDExLCAyMzMsIDAsIAorICAgIDEwLCAxMSwgMjMyLCAyNTUsIDEwLCAxMSwgMjMyLCAyNTQsIDEwLCAxMSwgMjMyLCAyNTMsIDEwLCAxMSwgMjMyLCAyNTIsIAorICAgIDEwLCAxMSwgMjMyLCAyNTEsIDEwLCAxMSwgMjMyLCAyNTAsIDEwLCAxMSwgMjMyLCAyNDksIDEwLCAxMSwgMjMyLCAyNDgsIAorICAgIDEwLCAxMSwgMjMyLCAyNDcsIDEwLCAxMSwgMjMyLCAyNDYsIDEwLCAxMSwgMjMyLCAyNDUsIDEwLCAxMSwgMjMyLCAyNDQsIAorICAgIDEwLCAxMSwgMjMyLCAyNDMsIDEwLCAxMSwgMjMyLCAyNDIsIDEwLCAxMSwgMjMyLCAyNDEsIDEwLCAxMSwgMjMyLCAyNDAsIAorICAgIDEwLCAxMSwgMjMyLCAyMzksIDEwLCAxMSwgMjMxLCAyNDEsIDEwLCAxMSwgMjMxLCAyNDAsIDEwLCAxMSwgMjMxLCAyMzksIAorICAgIDEwLCAxMSwgMjMxLCAyMzgsIDEwLCAxMSwgMjMxLCAyMzcsIDEwLCAxMSwgMjMxLCAyMzYsIDEwLCAxMSwgMjMxLCAyMzUsIAorICAgIDEwLCAxMSwgMjMxLCAyMzQsIDEwLCAxMSwgMjMxLCAyMzMsIDEwLCAxMSwgMjMxLCAyMzIsIDEwLCAxMSwgMjMxLCAyMzEsIAorICAgIDEwLCAxMSwgMjMxLCAyMzAsIDEwLCAxMSwgMjMxLCAyMjksIDEwLCAxMSwgMjMxLCAyMjgsIDEwLCAxMSwgMjMxLCAyMjcsIAorICAgIDEwLCAxMSwgMjMxLCAyMjYsIDEwLCAxMSwgMjMxLCAyMjUsIDEwLCAxMSwgMjMxLCAyMjQsIDEwLCAxMSwgMjMxLCAyMjMsIAorICAgIDEwLCAxMSwgMjMxLCAyMjIsIDEwLCAxMSwgMjMxLCAyMjEsIDEwLCAxMSwgMjMxLCAyMjAsIDEwLCAxMSwgMjMxLCAxNDMsIAorICAgIDEwLCAxMSwgMjMxLCAxNDIsIDEwLCAxMSwgMjMxLCAxNDEsIDEwLCAxMSwgMjMxLCAxNDAsIDEwLCAxMSwgMjMxLCAxMzksIAorICAgIDEwLCAxMSwgMjMxLCAxMzgsIDEwLCAxMSwgMjMxLCAxMzcsIDEwLCAxMSwgMjMxLCAxMzYsIDEwLCAxMSwgMjMxLCAxMzUsIAorICAgIDEwLCAxMSwgMjMxLCAxMzQsIDEwLCAxMSwgMjMxLCAxMzMsIDEwLCAxMSwgMjMxLCAxMzIsIDEwLCAxMSwgMjMxLCAxMzEsIAorICAgIDEwLCAxMSwgMjMxLCAxMzAsIDEwLCAxMSwgMjMxLCAxMjksIDEwLCAxMSwgMjMxLCAxMjgsIDEwLCAxMSwgMjMxLCAxMjcsIAorICAgIDEwLCAxMSwgMjMxLCAxMjYsIDEwLCAxMSwgMjMxLCAxMjUsIDEwLCAxMSwgMjMxLCAxMjQsIDEwLCAxMSwgMjMxLCAxMjMsIAorICAgIDEwLCAxMSwgMjMxLCAxMjIsIDEwLCAxMSwgMjMxLCAxMjEsIDEwLCAxMSwgMjMxLCAxMjAsIDEwLCAxMSwgMjMxLCAxMTksIAorICAgIDEwLCAxMSwgMjMxLCAxMTgsIDEwLCAxMSwgMjMxLCA1LCAxMCwgMTEsIDIzMSwgNCwgMTAsIDExLCAyMzEsIDMsIDEwLCAxMSwgCisgICAgMjMxLCAyLCAxMCwgMTEsIDIzMSwgMSwgMTAsIDExLCAyMzEsIDAsIDEwLCAxMSwgMjMwLCAyNTUsIDEwLCAxMSwgMjMwLCAKKyAgICAyNTQsIDEwLCAxMSwgMjMwLCAyNTMsIDEwLCAxMSwgMjMwLCAyNTIsIDEwLCAxMSwgMjMwLCAyNTEsIDEwLCAxMSwgMjMwLCAKKyAgICAyNTAsIDEwLCAxMSwgMjMwLCAyNDksIDEwLCAxMSwgMjMwLCAyNDgsIDEwLCAxMSwgMjMwLCAyNDcsIDEwLCAxMSwgMjMwLCAKKyAgICAyNDYsIDEwLCAxMSwgMjMwLCAyNDUsIDEwLCAxMSwgMjMwLCAyNDQsIDEwLCAxMSwgMjMwLCAyNDMsIDEwLCAxMSwgMjMwLCAKKyAgICAyNDIsIDEwLCAxMSwgMjMwLCAyNDEsIDEwLCAxMSwgMjMwLCAyNDAsIDEwLCAxMSwgMjMwLCAyMzksIDEwLCAxMSwgMjMwLCAKKyAgICAyMzgsIDEwLCAxMSwgMjMwLCAyMzcsIDEwLCAxMSwgMjMwLCAyMzYsIDEwLCAxMSwgMjMwLCAyMzUsIDEwLCAxMSwgMjMwLCAKKyAgICAyMzQsIDEwLCAxMSwgMjMwLCAyMzMsIDEwLCAxMSwgMjMwLCAyMzIsIDEwLCAxMSwgMjMwLCAyMzEsIDEwLCAxMSwgMjMwLCAKKyAgICAyMzAsIDEwLCAxMSwgMjMwLCAyMjksIDEwLCAxMSwgMjMwLCAyMjgsIDEwLCAxMSwgMjMwLCAyMjcsIDEwLCAxMSwgMjMwLCAKKyAgICAyMjYsIDEwLCAxMSwgMjMwLCAyMjUsIDEwLCAxMSwgMjMwLCAyMjQsIDEwLCAxMSwgMjMwLCAyMjMsIDEwLCAxMSwgMjMwLCAKKyAgICAyMjIsIDEwLCAxMSwgMjMwLCAyMjEsIDEwLCAxMSwgMjMwLCAyMjAsIDEwLCAxMSwgMjMwLCAyMTksIDEwLCAxMSwgMjMwLCAKKyAgICAyMTgsIDEwLCAxMSwgMjMwLCAyMTcsIDEwLCAxMSwgMjMwLCAyMTYsIDEwLCAxMSwgMjMwLCAyMTUsIDEwLCAxMSwgMjMwLCAKKyAgICAyMTQsIDEwLCAxMSwgMjMwLCAyMTMsIDEwLCAxMSwgMjMwLCAyMTIsIDEwLCAxMSwgMjMwLCAyMTEsIDEwLCAxMSwgMjMwLCAKKyAgICAyMTAsIDEwLCAxMSwgMjMwLCAyMDksIDEwLCAxMSwgMjMwLCAyMDgsIDEwLCAxMSwgMjMwLCAyMDcsIDEwLCAxMSwgMjMwLCAKKyAgICAyMDYsIDEwLCAxMSwgMjMwLCAyMDUsIDEwLCAxMSwgMjMwLCAyMDQsIDEwLCAxMSwgMjMwLCAyMDMsIDEwLCAxMSwgMjMwLCAKKyAgICAyMDIsIDEwLCAxMSwgMjMwLCAyMDEsIDEwLCAxMSwgMjMwLCAyMDAsIDEwLCAxMSwgMjMwLCAxOTksIDEwLCAxMSwgMjMwLCAKKyAgICAxOTgsIDEwLCAxMSwgMjMwLCAxOTcsIDEwLCAxMSwgMjMwLCAxOTYsIDEwLCAxMSwgMjMwLCAxOTUsIDEwLCAxMSwgMjMwLCAKKyAgICAxOTQsIDEwLCAxMSwgMjMwLCAxOTMsIDEwLCAxMSwgMjMwLCAxOTIsIDEwLCAxMSwgMjMwLCAxOTEsIDEwLCAxMSwgMjMwLCAKKyAgICAxOTAsIDEwLCAxMSwgMjMwLCAxODksIDEwLCAxMSwgMjMwLCAxODgsIDEwLCAxMSwgMjMwLCAxODcsIDEwLCAxMSwgMjMwLCAKKyAgICA1OCwgMTAsIDExLCAyMzAsIDU3LCAxMCwgMTEsIDIzMCwgNTYsIDEwLCAxMSwgMjMwLCA1NSwgMTAsIDExLCAyMzAsIDU0LCAKKyAgICAxMCwgMTEsIDIzMCwgNTMsIDEwLCAxMSwgMjMwLCA1MiwgMTAsIDExLCAyMzAsIDUxLCAxMCwgMTEsIDIzMCwgNTAsIDEwLCAKKyAgICAxMSwgMjMwLCA0OSwgMTAsIDExLCAyMzAsIDQ4LCAxMCwgMTEsIDIzMCwgNDcsIDEwLCAxMSwgMjMwLCA0NiwgMTAsIDExLCAKKyAgICAyMjgsIDE2MiwgMTAsIDExLCAyMjgsIDE2MSwgMTAsIDExLCAyMjgsIDE2MCwgMTAsIDExLCAyMjgsIDE1OSwgMTAsIDExLCAKKyAgICAyMjgsIDE1OCwgMTAsIDExLCAyMjgsIDE1NywgMTAsIDExLCAyMjgsIDE1NiwgMTAsIDExLCAyMjgsIDM3LCAxMCwgMTEsIAorICAgIDIyOCwgMzYsIDEwLCAxMSwgMjI4LCAzNSwgMTAsIDExLCAyMjgsIDM0LCAxMCwgMTEsIDIyOCwgMzMsIDEwLCAxMSwgMjI4LCAKKyAgICAzMiwgMTAsIDExLCAyMjgsIDMxLCAxMCwgMTEsIDIyOCwgMzAsIDEwLCAxMSwgMjI4LCAyOSwgMTAsIDExLCAyMjgsIDI4LCAKKyAgICAxMCwgMTEsIDIyOCwgMjcsIDEwLCAxMSwgMjI4LCAyNiwgMTAsIDExLCAyMjgsIDI1LCAxMCwgMTEsIDIyOCwgMjQsIDEwLCAKKyAgICAxMSwgMjI4LCAyMywgMTAsIDExLCAyMjgsIDIyLCAxMCwgMTEsIDIyOCwgMjEsIDEwLCAxMSwgMjI4LCAyMCwgMTAsIDExLCAKKyAgICAyMjgsIDE5LCAxMCwgMTEsIDIyOCwgMTgsIDEwLCAxMSwgMjI4LCAxNywgMTAsIDExLCAyMjgsIDE2LCAxMCwgMTEsIDIyOCwgCisgICAgMTUsIDEwLCAxMSwgMjI4LCAxNCwgMTAsIDExLCAyMjgsIDEzLCAxMCwgMTEsIDIyOCwgMTIsIDEwLCAxMSwgMjI4LCAxMSwgCisgICAgMTAsIDExLCAyMjgsIDEwLCAxMCwgMTEsIDIyOCwgOSwgMTAsIDExLCAyMjgsIDgsIDEwLCAxMSwgMjI4LCA3LCAxMCwgMTEsIAorICAgIDIyOCwgNiwgMTAsIDExLCAyMjgsIDUsIDEwLCAxMSwgMjI4LCA0LCAxMCwgMTEsIDIyNiwgMjMyLCAxMCwgMTEsIDIyNiwgCisgICAgMjMxLCAxMCwgMTEsIDIyNiwgMjMwLCAxMCwgMTEsIDIyNiwgMjI5LCAxMCwgMTEsIDIyNiwgMjI4LCAxMCwgMTEsIDIyNiwgCisgICAgMjI3LCAxMCwgMTEsIDIyNiwgMjI2LCAxMCwgMTEsIDIyNiwgMjI1LCAxMCwgMTEsIDIyNiwgMjI0LCAxMCwgMTEsIDIyNiwgCisgICAgMjIzLCAxMCwgMTEsIDIyNiwgMjIyLCAxMCwgMTEsIDIyNiwgMjIxLCAxMCwgMTEsIDIyNiwgMjIwLCAxMCwgMTEsIDIyNiwgCisgICAgMjE5LCAxMCwgMTEsIDIyNiwgMjE4LCAxMCwgMTEsIDIyNiwgMjE3LCAxMCwgMTEsIDIyNiwgMjE2LCAxMCwgMTEsIDIyNiwgCisgICAgMjE1LCAxMCwgMTEsIDIyNiwgMjE0LCAxMCwgMTEsIDIyNiwgMjEzLCAxMCwgMTEsIDIyNiwgMjEyLCAxMCwgMTEsIDIyNiwgCisgICAgMjExLCAxMCwgMTEsIDIyNiwgMjEwLCAxMCwgMTEsIDIyNiwgMjA5LCAxMCwgMTEsIDIyNiwgMjA4LCAxMCwgMTEsIDIyNiwgCisgICAgMjA3LCAxMCwgMTEsIDIyNiwgMjA2LCAxMCwgMTEsIDIyNiwgMjA1LCAxMCwgMTEsIDIyNiwgMjA0LCAxMCwgMTEsIDIyNiwgCisgICAgMjAzLCAxMCwgMTEsIDIyNiwgMjAyLCAxMCwgMTEsIDIyNiwgMjAxLCAxMCwgMTEsIDIyNiwgMjAwLCAxMCwgMTEsIDIyNiwgCisgICAgMTk5LCAxMCwgMTEsIDIyNiwgMTk4LCAxMCwgMTEsIDIyNiwgMTk3LCAxMCwgMTEsIDIyNiwgMTk2LCAxMCwgMTEsIDIyNiwgCisgICAgMTk1LCAxMCwgMTEsIDIyNiwgMTk0LCAxMCwgMTEsIDIyNiwgMTkzLCAxMCwgMTEsIDIyNiwgMTkyLCAxMCwgMTEsIDIyNiwgCisgICAgMTkxLCAxMCwgMTEsIDIyNiwgMTkwLCAxMCwgMTEsIDIyNiwgMTg5LCAxMCwgMTEsIDIyNiwgMTg4LCAxMCwgMTEsIDIyNiwgCisgICAgMTg3LCAxMCwgMTEsIDIyNiwgMTg2LCAxMCwgMTEsIDIyNiwgMTg1LCAxMCwgMTEsIDIyNiwgMTg0LCAxMCwgMTEsIDIyNiwgCisgICAgMTgzLCAxMCwgMTEsIDIyNiwgMTgyLCAxMCwgMTEsIDIyNiwgMTgxLCAxMCwgMTEsIDIyNiwgMTgwLCAxMCwgMTEsIDIyNiwgCisgICAgMTc5LCAxMCwgMTEsIDIyMiwgMjAwLCAxMCwgMTEsIDIyMiwgMTk5LCAxMCwgMTEsIDIyMiwgMTk4LCAxMCwgMTEsIDIyMiwgCisgICAgMTk3LCAxMCwgMTEsIDIyMiwgMTk2LCAxMCwgMTEsIDIyMiwgMTk1LCAxMCwgMTEsIDIyMiwgMTk0LCAxMCwgMTEsIDIyMiwgCisgICAgMTkzLCAxMCwgMTEsIDIyMiwgMTkyLCAxMCwgMTEsIDIyMiwgMTkxLCAxMCwgMTEsIDIyMiwgMTkwLCAxMCwgMTEsIDIyMiwgCisgICAgMTg5LCAxMCwgMTEsIDIyMiwgMTg4LCAxMCwgMTEsIDIyMiwgMTg3LCAxMCwgMTEsIDIyMiwgMTg2LCAxMCwgMTEsIDIyMiwgCisgICAgMTg1LCAxMCwgMTEsIDIyMiwgMTg0LCAxMCwgMTEsIDIyMiwgMTgzLCAxMCwgMTEsIDIyMiwgMTgyLCAxMCwgMTEsIDIyMiwgCisgICAgMTgxLCAxMCwgMTEsIDIyMiwgMTgwLCAxMCwgMTEsIDIyMiwgMTc5LCAxMCwgMTEsIDIyMiwgMTc4LCAxMCwgMTEsIDIyMiwgCisgICAgMTc3LCAxMCwgMTEsIDIyMiwgMTc2LCAxMCwgMTEsIDIyMiwgMTc1LCAxMCwgMTEsIDIyMiwgMTc0LCAxMCwgMTEsIDIyMiwgCisgICAgMTczLCAxMCwgMTEsIDIyMiwgMTcyLCAxMCwgMTEsIDIyMiwgMTcxLCAxMCwgMTEsIDIyMiwgMTcwLCAxMCwgMTEsIDIyMiwgCisgICAgMTY5LCAxMCwgMTEsIDIyMiwgMTY4LCAxMCwgMTEsIDIyMiwgMTY3LCAxMCwgMTEsIDIyMiwgMTY2LCAxMCwgMTEsIDIyMiwgCisgICAgMTY1LCAxMCwgMTEsIDIyMiwgMTY0LCAxMCwgMTEsIDIyMiwgMTYzLCAxMCwgMTEsIDIyMiwgMTYyLCAxMCwgMTEsIDIyMiwgCisgICAgMTYxLCAxMCwgMTEsIDIyMiwgMTYwLCAxMCwgMTEsIDIyMiwgMTU5LCAxMCwgMTEsIDIyMiwgMTU4LCAxMCwgMTEsIDIyMiwgCisgICAgMTU3LCAxMCwgMTEsIDIyMCwgMTcyLCAxMCwgMTEsIDIyMCwgMTcxLCAxMCwgMTEsIDIyMCwgMTcwLCAxMCwgMTEsIDIyMCwgCisgICAgMTY5LCAxMCwgMTEsIDIyMCwgMTY4LCAxMCwgMTEsIDIyMCwgMTY3LCAxMCwgMTEsIDIyMCwgMTY2LCAxMCwgMTEsIDIyMCwgCisgICAgMTY1LCAxMCwgMTEsIDIyMCwgMTY0LCAxMCwgMTEsIDIyMCwgMTYzLCAxMCwgMTEsIDIyMCwgMTYyLCAxMCwgMTEsIDIyMCwgCisgICAgMTYxLCAxMCwgMTEsIDIyMCwgMTYwLCAxMCwgMTEsIDIyMCwgMTU5LCAxMCwgMTEsIDIyMCwgMTU4LCAxMCwgMTEsIDIyMCwgCisgICAgMTU3LCAxMCwgMTEsIDIyMCwgMTU2LCAxMCwgMTEsIDIyMCwgMTU1LCAxMCwgMTEsIDIyMCwgMTU0LCAxMCwgMTEsIDIyMCwgCisgICAgMTUzLCAxMCwgMTEsIDIyMCwgMTUyLCAxMCwgMTEsIDIyMCwgMTUxLCAxMCwgMTEsIDIyMCwgMTUwLCAxMCwgMTEsIDIyMCwgCisgICAgMTQ5LCAxMCwgMTEsIDIyMCwgMTQ4LCAxMCwgMTEsIDIyMCwgMTQ3LCAxMCwgMTEsIDIyMCwgMTQ2LCAxMCwgMTEsIDIyMCwgCisgICAgMTQ1LCAxMCwgMTEsIDIyMCwgMTQ0LCAxMCwgMTEsIDIyMCwgMTQzLCAxMCwgMTEsIDIyMCwgMTQyLCAxMCwgMTEsIDIyMCwgCisgICAgMTQxLCAxMCwgMTEsIDIyMCwgMTQwLCAxMCwgMTEsIDIyMCwgMTM5LCAxMCwgMTEsIDIyMCwgMTM4LCAxMCwgMTEsIDIyMCwgCisgICAgMTM3LCAxMCwgMTEsIDIyMCwgMTM2LCAxMCwgMTEsIDIyMCwgMTM1LCAxMCwgMTEsIDIyMCwgMTM0LCAxMCwgMTEsIDIyMCwgCisgICAgMTMzLCAxMCwgMTEsIDIyMCwgMTMyLCAxMCwgMTEsIDIyMCwgMTMxLCAxMCwgMTEsIDIyMCwgMTMwLCAxMCwgMTEsIDIyMCwgCisgICAgMTI5LCAxMCwgMTEsIDIyMCwgMTI4LCAxMCwgMTEsIDIyMCwgMTI3LCAxMCwgMTEsIDIyMCwgMTI2LCAxMCwgMTEsIDIyMCwgCisgICAgMTAsIDEwLCAxMSwgMjIwLCA5LCAxMCwgMTEsIDIyMCwgOCwgMTAsIDExLCAyMjAsIDcsIDEwLCAxMSwgMjIwLCA2LCAxMCwgCisgICAgMTEsIDIyMCwgNSwgMTAsIDExLCAyMjAsIDQsIDEwLCAxMSwgMjIwLCAzLCAxMCwgMTEsIDIyMCwgMiwgMTAsIDExLCAyMjAsIAorICAgIDEsIDEwLCAxMSwgMjIwLCAwLCAxMCwgMTEsIDIxOSwgMjU1LCAxMCwgMTEsIDIxOSwgMjU0LCAxMCwgMTEsIDIxOSwgMjUzLCAKKyAgICAxMCwgMTEsIDIxOSwgMjUyLCAxMCwgMTEsIDIxOSwgMjUxLCAxMCwgMTEsIDIxOSwgMjUwLCAxMCwgMTEsIDIxOSwgMjQ5LCAKKyAgICAxMCwgMTEsIDIxOSwgMjQ4LCAxMCwgMTEsIDIxOSwgMjQ3LCAxMCwgMTEsIDIxOSwgMjQ2LCAxMCwgMTEsIDIxOSwgMjQ1LCAKKyAgICAxMCwgMTEsIDIxOSwgMjQ0LCAxMCwgMTEsIDIxOSwgMjQzLCAxMCwgMTEsIDIxOSwgMjQyLCAxMCwgMTEsIDIxOSwgMjQxLCAKKyAgICAxMCwgMTEsIDIxOSwgMjQwLCAxMCwgMTEsIDIxOSwgMjM5LCAxMCwgMTEsIDIxOSwgMjM4LCAxMCwgMTEsIDIxOSwgMjM3LCAKKyAgICAxMCwgMTEsIDIxOSwgMjM2LCAxMCwgMTEsIDIxOSwgMjM1LCAxMCwgMTEsIDIxOSwgMjM0LCAxMCwgMTEsIDIxOSwgMjMzLCAKKyAgICAxMCwgMTEsIDIxOSwgMjMyLCAxMCwgMTEsIDIxOSwgMjMxLCAxMCwgMTEsIDIxOSwgMjMwLCAxMCwgMTEsIDIxOSwgMjI5LCAKKyAgICAxMCwgMTEsIDIxOSwgMjI4LCAxMCwgMTEsIDIxOSwgMjI3LCAxMCwgMTEsIDIxOSwgMjI2LCAxMCwgMTEsIDIxOSwgMjI1LCAKKyAgICAxMCwgMTEsIDIxOSwgMjI0LCAxMCwgMTEsIDIxOSwgMjIzLCAxMCwgMTEsIDIxOSwgMjIyLCAxMCwgMTEsIDIxOSwgMjIxLCAKKyAgICAxMCwgMTEsIDIxOSwgMjIwLCAxMCwgMTEsIDIxOSwgMjE5LCAxMCwgMTEsIDIxOSwgMjE4LCAxMCwgMTEsIDIxOSwgMjE3LCAKKyAgICAxMCwgMTEsIDIxOSwgMjE2LCAxMCwgMTEsIDIxOSwgMjE1LCAxMCwgMTEsIDIxOSwgMjE0LCAxMCwgMTEsIDIxOSwgMjEzLCAKKyAgICAxMCwgMTEsIDIxOSwgMjEyLCAxMCwgMTEsIDIxOSwgMjExLCAxMCwgMTEsIDIxOSwgMjEwLCAxMCwgMTEsIDIxOSwgMjA5LCAKKyAgICAxMCwgMTEsIDIxOSwgMjA4LCAxMCwgMTEsIDIxOSwgMjA3LCAxMCwgMTEsIDIxOSwgMjA2LCAxMCwgMTEsIDIxOSwgMjA1LCAKKyAgICAxMCwgMTEsIDIxOSwgMjA0LCAxMCwgMTEsIDIxOSwgMjAzLCAxMCwgMTEsIDIxOSwgMjAyLCAxMCwgMTEsIDIxOSwgMjAxLCAKKyAgICAxMCwgMTEsIDIxOSwgMjAwLCAxMCwgMTEsIDIxOSwgMTk5LCAxMCwgMTEsIDIxOSwgMTk4LCAxMCwgMTEsIDIxOSwgMTk3LCAKKyAgICAxMCwgMTEsIDIxOSwgMTk2LCAxMCwgMTEsIDIxOSwgMTk1LCAxMCwgMTEsIDIxOSwgMTk0LCAxMCwgMTEsIDIxOSwgMTkzLCAKKyAgICAxMCwgMTEsIDIxOSwgMTkyLCAxMCwgMTEsIDIxOSwgMTkxLCAxMCwgMTEsIDIxOSwgMTkwLCAxMCwgMTEsIDIxOSwgMzksIAorICAgIDEwLCAxMSwgMjE5LCAzOCwgMTAsIDExLCAyMTksIDM3LCAxMCwgMTEsIDIxOSwgMzYsIDEwLCAxMSwgMjE5LCAzNSwgMTAsIAorICAgIDExLCAyMTksIDM0LCAxMCwgMTEsIDIxOSwgMzMsIDEwLCAxMSwgMjE5LCAzMiwgMTAsIDExLCAyMTksIDMxLCAxMCwgMTEsIAorICAgIDIxOSwgMzAsIDEwLCAxMSwgMjE5LCAyOSwgMTAsIDExLCAyMTksIDI4LCAxMCwgMTEsIDIxOSwgMjcsIDEwLCAxMSwgMjE5LCAKKyAgICAyNiwgMTAsIDExLCAyMTksIDI1LCAxMCwgMTEsIDIxOSwgMjQsIDEwLCAxMSwgMjE5LCAyMywgMTAsIDExLCAyMTksIDIyLCAKKyAgICAxMCwgMTEsIDIxOSwgMjEsIDEwLCAxMSwgMjE5LCAyMCwgMTAsIDExLCAyMTksIDE5LCAxMCwgMTEsIDIxOSwgMTgsIDEwLCAKKyAgICAxMSwgMjE5LCAxNywgMTAsIDExLCAyMTksIDE2LCAxMCwgMTEsIDIxOSwgMTUsIDEwLCAxMSwgMjE5LCAxNCwgMTAsIDExLCAKKyAgICAyMTksIDEzLCAxMCwgMTEsIDIxOSwgMTIsIDEwLCAxMSwgMjE5LCAxMSwgMTAsIDExLCAyMTksIDEwLCAxMCwgMTEsIDIxOSwgCisgICAgOSwgMTAsIDExLCAyMTksIDgsIDEwLCAxMSwgMjE4LCAxNTAsIDEwLCAxMSwgMjE4LCAxNDksIDEwLCAxMSwgMjE4LCAxNDgsIAorICAgIDEwLCAxMSwgMjE4LCAxNDcsIDEwLCAxMSwgMjE4LCAxNDYsIDEwLCAxMSwgMjE4LCAxNDUsIDEwLCAxMSwgMjE4LCAxNDQsIAorICAgIDEwLCAxMSwgMjE4LCAxNDMsIDEwLCAxMSwgMjE4LCAxNDIsIDEwLCAxMSwgMjE4LCAxNDEsIDEwLCAxMSwgMjE4LCAxNDAsIAorICAgIDEwLCAxMSwgMjE4LCAxMzksIDEwLCAxMSwgMjE4LCA4OCwgMTAsIDExLCAyMTgsIDg3LCAxMCwgMTEsIDIxOCwgODYsIDEwLCAKKyAgICAxMSwgMjE4LCA4NSwgMTAsIDExLCAyMTgsIDg0LCAxMCwgMTEsIDIxOCwgODMsIDEwLCAxMSwgMjE4LCA4MiwgMTAsIDExLCAKKyAgICAyMTgsIDgxLCAxMCwgMTEsIDIxOCwgODAsIDEwLCAxMSwgMjE3LCAxNTYsIDEwLCAxMSwgMjE3LCAxNTUsIDEwLCAxMSwgCisgICAgMjE3LCAxNTQsIDEwLCAxMSwgMjE3LCAxNTMsIDEwLCAxMSwgMjE3LCAxNTIsIDEwLCAxMSwgMjE3LCAxNTEsIDEwLCAxMSwgCisgICAgMjE3LCAxNTAsIDEwLCAxMSwgMjE3LCAxNDksIDEwLCAxMSwgMjE3LCAxNDgsIDEwLCAxMSwgMjE3LCAxNDcsIDEwLCAxMSwgCisgICAgMjE3LCAxNDYsIDEwLCAxMSwgMjE3LCAxNDUsIDEwLCAxMSwgMjE3LCAxNDQsIDEwLCAxMSwgMjE3LCAxNDMsIDEwLCAxMSwgCisgICAgMjE3LCAxNDIsIDEwLCAxMSwgMjE3LCAxNDEsIDEwLCAxMSwgMjE3LCAxNDAsIDEwLCAxMSwgMjE3LCAxMzksIDEwLCAxMSwgCisgICAgMjE3LCAxMzgsIDEwLCAxMSwgMjE3LCAxMzcsIDEwLCAxMSwgMjE3LCAxMzYsIDEwLCAxMSwgMjE3LCAxMzUsIDEwLCAxMSwgCisgICAgMjE3LCAxMzQsIDEwLCAxMSwgMjE3LCAxMzMsIDEwLCAxMSwgMjE3LCAxMzIsIDEwLCAxMSwgMjE3LCAxMzEsIDEwLCAxMSwgCisgICAgMjE3LCAxMzAsIDEwLCAxMSwgMjE3LCAxMjksIDEwLCAxMSwgMjE3LCAxMjgsIDEwLCAxMSwgMjE3LCAxMjcsIDEwLCAxMSwgCisgICAgMjE3LCAxMjYsIDEwLCAxMSwgMjE3LCAxMjUsIDEwLCAxMSwgMjE3LCAxMjQsIDEwLCAxMSwgMjE3LCAxMjMsIDEwLCAxMSwgCisgICAgMjE3LCAxMjIsIDEwLCAxMSwgMjE3LCAxMjEsIDEwLCAxMSwgMjE3LCAxMjAsIDEwLCAxMSwgMjE3LCAxMTksIDEwLCAxMSwgCisgICAgMjE3LCAxMTgsIDEwLCAxMSwgMjE3LCAxMTcsIDEwLCAxMSwgMjE3LCAxMTYsIDEwLCAxMSwgMjU1LCA1NywgMTAsIDExLCAKKyAgICAyNTUsIDU2LCAxMCwgMTEsIDI1NSwgNTUsIDEwLCAxMSwgMjU1LCA1NCwgMTAsIDExLCAyNTUsIDUzLCAxMCwgMTEsIDI1NSwgCisgICAgNTIsIDEwLCAxMSwgMjU1LCA1MSwgMTAsIDExLCAyNTUsIDUwLCAxMCwgMTEsIDI1NSwgNDksIDEwLCAxMSwgMjU1LCA0OCwgCisgICAgMTAsIDExLCAyNTUsIDQ3LCAxMCwgMTEsIDI1NSwgNDYsIDEwLCAxMSwgMjU1LCA0NSwgMTAsIDExLCAyNTUsIDQ0LCAxMCwgCisgICAgMTEsIDI1NSwgNDMsIDEwLCAxMSwgMjU1LCA0MiwgMTAsIDExLCAyNTUsIDQxLCAxMCwgMTEsIDI1NSwgNDAsIDEwLCAxMSwgCisgICAgMjU1LCAzOSwgMTAsIDExLCAyNTUsIDM4LCAxMCwgMTEsIDI1NSwgMzcsIDEwLCAxMSwgMjU1LCAzNiwgMTAsIDExLCAyNTUsIAorICAgIDM1LCAxMCwgMTEsIDI1NSwgMzQsIDEwLCAxMSwgMjU1LCAzMywgMTAsIDExLCAyNTUsIDMyLCAxMCwgMTEsIDI1NSwgMzEsIAorICAgIDEwLCAxMSwgMjU1LCAzMCwgMTAsIDExLCAyNTUsIDI5LCAxMCwgMTEsIDI1NSwgMjgsIDEwLCAxMSwgMjU1LCAyNywgMTAsIAorICAgIDExLCAyNTUsIDI2LCAxMCwgMTEsIDI1NSwgMjUsIDEwLCAxMSwgMjU1LCAyNCwgNDYsIDI2LCAxNiwgMjI4LCAyMDYsIDQ2LCAKKyAgICAyNiwgMTYsIDI0OSwgMTQ4LCA0NiwgMjYsIDE2LCAyMjksIDE2MywgNDYsIDI2LCAxNiwgMjMwLCA2NywgMjQ2LCAyMjEsIAorICAgIDQ2LCAyNiwgMTYsIDIzMCwgNjcsIDI0OCwgMjE0LCA0NiwgMjYsIDE2LCAyMTksIDE4MSwgMjQ2LCAyMjEsIDQ2LCAyNiwgCisgICAgMTYsIDIxOSwgMTgxLCAyNDgsIDIxNCwgNDYsIDI2LCAxNiwgMjM2LCAxOTgsIDQ2LCAyNiwgMTYsIDIyMiwgMjE3LCA0NiwgCisgICAgMjYsIDE2LCAyMjksIDIzNSwgNDYsIDI2LCAxNiwgMjE3LCAyMDUsIDQ2LCAyNiwgMTYsIDIxNywgMjA2LCAyNDgsIDIxNCwgCisgICAgNDYsIDI2LCAxNiwgMjM2LCAxMiwgNDYsIDI2LCAxNiwgMjU0LCA4OSwgMjQ2LCAyMjEsIDQ2LCAyNiwgMTYsIDI0NiwgOTAsIAorICAgIDI0NiwgMjIxLCA0NiwgMjYsIDE2LCAyMjIsIDczLCA0NiwgMjYsIDE2LCAyMzYsIDE2NCwgNDYsIDI2LCAxNiwgMjU0LCA4MCwgCisgICAgNDYsIDI2LCAxNiwgMjU0LCA4MSwgMjQ4LCAyMTQsIDQ2LCAyNiwgMTYsIDIyMiwgMjIyLCA0NiwgMjYsIDE2LCAyMjEsIAorICAgIDI0MiwgNDYsIDI2LCAxNiwgMjMwLCAxNDgsIDI1NCwgNDcsIDQ2LCAyNiwgMTYsIDI0NCwgNTYsIDI1NCwgNDcsIDQ2LCAyNiwgCisgICAgMTYsIDIyOCwgMjA1LCA0NiwgMjYsIDE2LCAyNTEsIDYyLCA0NiwgMjYsIDE2LCAyMTksIDE3MSwgNDYsIDI2LCAxNiwgMjM3LCAKKyAgICAxNDQsIDI1NCwgNDcsIDQ2LCAyNiwgMTYsIDIzNiwgMTY2LCAyNTQsIDQ3LCA0NiwgMjYsIDE2LCAyMzYsIDE2NSwgMjU0LCAKKyAgICA0NywgNDYsIDI2LCAxNiwgMjI2LCAxMTksIDQ2LCAyNiwgMTYsIDIyOSwgMjI2LCA0NiwgMjYsIDE2LCAyMjMsIDE1MSwgCisgICAgMjU0LCA4MywgNDYsIDI2LCAxNiwgMjMwLCA2NiwgMjU0LCA0NywgNDYsIDI2LCAxNiwgMjE5LCAxODAsIDI1NCwgNDcsIDQ2LCAKKyAgICAyNiwgMTYsIDI1NCwgODQsIDI1NCwgNDcsIDQ2LCAyNiwgMTYsIDI1NCwgNzgsIDQ2LCAyNiwgMTYsIDIzNiwgNjUsIDQ2LCAKKyAgICAyNiwgMTYsIDIyNywgMTU3LCA0NiwgMjYsIDE2LCAyMjksIDEwNiwgMjU0LCA0NywgNDYsIDI2LCAxNiwgMjIxLCAxNzUsIAorICAgIDQ2LCAyNiwgMTYsIDI1NCwgMTI5LCA0NiwgMjYsIDE2LCAyMjYsIDc1LCA0NiwgMjYsIDE2LCAyMjIsIDIyNSwgMjU0LCA0NywgCisgICAgNDYsIDI2LCAxNiwgMjIyLCAyMjUsIDIzMywgMjM5LCAyMjMsIDE0OSwgNDYsIDI2LCAxNiwgMjMwLCA2MSwgMjU0LCA0NywgCisgICAgNDYsIDI2LCAxNiwgMjIyLCAxNywgNDYsIDI2LCAxNiwgMjM1LCA5NywgNDYsIDI2LCAxNiwgMjQ3LCA3NywgNDYsIDI2LCAKKyAgICAxNiwgMjIxLCA5MiwgNDYsIDI2LCAxNiwgMjIyLCA1MiwgNDYsIDI2LCAxNiwgMjM2LCAxNSwgNDYsIDI2LCAxNiwgMjU0LCAKKyAgICA4OSwgMjQ2LCA5MCwgMjMyLCAxMzEsIDQ2LCAyNiwgMTYsIDI0NSwgOTMsIDI1NCwgNDcsIDQ2LCAyNiwgMTYsIDIzNywgCisgICAgMjM0LCA0NiwgMjYsIDE2LCAyMjEsIDY4LCAyNTQsIDQ3LCA0NiwgMjYsIDE2LCAyMzYsIDIwMSwgMjIxLCA2NywgNDYsIDI2LCAKKyAgICAxNiwgMjI5LCAxODIsIDQ2LCAyNiwgMTYsIDIyOCwgMjA5LCA0NiwgMjYsIDE2LCAyMzYsIDQyLCA0NiwgMjYsIDE2LCAyNTEsIAorICAgIDYsIDI1NCwgNDcsIDQ2LCAyNiwgMTYsIDIyNywgMjMyLCA0NiwgMjYsIDE2LCAyMjksIDIzOCwgMjU0LCA0NywgNDYsIDI2LCAKKyAgICAxNiwgMjI5LCAyMzYsIDI1NCwgNDcsIDQ2LCAyNiwgMTYsIDI0MiwgNjMsIDQ2LCAyNiwgMTYsIDIzMiwgMjE3LCA0NiwgMjYsIAorICAgIDE2LCAyMjksIDE0OCwgNDYsIDI2LCAxNiwgMjM2LCA0MywgMjU0LCAxNTIsIDQ2LCAyNiwgMTYsIDIyMSwgNjgsIDI1NCwgCisgICAgMTUyLCA0NiwgMjYsIDE2LCAyMjMsIDEzMiwgNDYsIDI2LCAxNiwgMjQ0LCAyNSwgNDYsIDI2LCAxNiwgMjM3LCAxNDQsIAorICAgIDIzMiwgMTMxLCA0NiwgMjYsIDE2LCAyMzAsIDE0OCwgMjMyLCAxMzEsIDQ2LCAyNiwgMTYsIDIzMCwgNjcsIDIzMiwgMTMxLCAKKyAgICA0NiwgMjYsIDE2LCAyMjksIDE0NywgNDYsIDI2LCAxNiwgMjM2LCAyOSwgNDYsIDI2LCAxNiwgMjI5LCAxNDYsIDQ2LCAyNiwgCisgICAgMTYsIDIzNiwgMTQsIDQ2LCAyNiwgMTYsIDIyOSwgMTgzLCAyMzIsIDEzMSwgNDYsIDI2LCAxNiwgMjM2LCAxNjUsIDIzMiwgCisgICAgMTMyLCAyNTQsIDEwOSwgNDYsIDI2LCAxNiwgMjM2LCAxNjYsIDIzMiwgMTMyLCAyNTQsIDEwOSwgNDYsIDI2LCAxNiwgMjE3LCAKKyAgICAyMDMsIDQ2LCAyNiwgMTYsIDI1NCwgODEsIDIzMiwgMTMxLCA0NiwgMjYsIDE2LCAyNTQsIDgyLCAyMjIsIDIyMywgMjMyLCAKKyAgICAxMzEsIDQ2LCAyNiwgMTYsIDIxNywgMjA0LCA0NiwgMjYsIDE2LCAyMzYsIDEzLCA0NiwgMjYsIDE2LCAyNDYsIDIxNiwgNDYsIAorICAgIDI2LCAxNiwgMjUxLCA2MywgNDYsIDI2LCAxNiwgMjMzLCAxNjgsIDIzNywgMTQzLCA0NiwgMjYsIDE2LCAyMTksIDE4MSwgCisgICAgMjMyLCAxMzEsIDQ2LCAyNiwgMTYsIDIyOSwgMTA2LCAyMzIsIDEzMSwgNDYsIDI2LCAxNiwgMjI4LCAyMTAsIDIzMiwgMTMxLCAKKyAgICA0NiwgMjYsIDE2LCAyMzAsIDE0NSwgNDYsIDI2LCAxNiwgMjU0LCAxMDAsIDQ2LCAyNiwgMTYsIDIzNCwgMTk1LCA0NiwgMjYsIAorICAgIDE2LCAyMjksIDIzNiwgMjMyLCAxMzEsIDQ2LCAyNiwgMTYsIDIyOSwgMjM4LCAyMzIsIDEzMSwgNDYsIDI2LCAxNiwgMjQ2LCAKKyAgICAxMTksIDIyOSwgMjM3LCA0NiwgMjYsIDE2LCAyMzUsIDIwNiwgNDYsIDI2LCAxNiwgMjU0LCAxMDEsIDQ2LCAyNiwgMTYsIAorICAgIDIyMSwgNjgsIDIzMiwgMTMxLCA0NiwgMjYsIDE2LCAyNDYsIDIxOSwgNDYsIDI2LCAxNiwgMjIyLCAyMjUsIDIzMiwgMTMxLCAKKyAgICA0NiwgMjYsIDE2LCAyMjIsIDIxOCwgNDYsIDI2LCAxNiwgMjUxLCA2LCAyMzIsIDEzMSwgNDYsIDI2LCAxNiwgMjQ2LCAxNjEsIAorICAgIDQ2LCAyNiwgMTYsIDIyNiwgNzYsIDIzMiwgMTMxLCA0NiwgMjYsIDE2LCAyMTgsIDEyNCwgMjM2LCA2NSwgNDYsIDI2LCAxNiwgCisgICAgMjIxLCA2NSwgNDYsIDI2LCAxNiwgMjI4LCAyMTEsIDQ2LCAyNiwgMTYsIDIyMSwgNjksIDQ2LCAyNiwgMTYsIDIyMSwgNjYsIAorICAgIDQ2LCAyNiwgMTYsIDIyOCwgMjA4LCA0NiwgMjYsIDE2LCAyMjEsIDY0LCA0NiwgMjYsIDE2LCAyMjgsIDIwNywgNDYsIDI2LCAKKyAgICAxNiwgMjQ0LCA1NSwgNDYsIDI2LCAxNiwgMjU0LCA0MSwgNDYsIDI2LCAxNiwgMjQ2LCAxMTksIDI1NCwgNDEsIDQ2LCAyNiwgCisgICAgMTYsIDIzMCwgNjEsIDIzMiwgMTMxLCA0NiwgMjYsIDE2LCAyMjIsIDE2LCAyNDYsIDEyNywgNDYsIDI2LCAxNiwgMjIyLCAKKyAgICAxNiwgMjQ2LCA4OSwgNDYsIDI2LCAxNiwgMjIyLCAxOCwgMjU0LCA4NSwgNDYsIDI2LCAxNiwgMjIyLCAxMSwgMjM2LCAyNDQsIAorICAgIDI1NCwgNzcsIDQ2LCAyNiwgMTYsIDIzNiwgMjAwLCA0NiwgMjYsIDE2LCAyNDYsIDE4NiwgNDYsIDI2LCAxNiwgMjE3LCAKKyAgICAyNTMsIDIzNiwgMTk3LCA0NiwgMjYsIDE2LCAyMTcsIDI1MywgMjU0LCAxMDksIDQ2LCAyNiwgMTYsIDIyMywgMTUwLCA0NiwgCisgICAgMjYsIDE2LCAyMzYsIDY2LCAyNTQsIDEwOSwgNDYsIDI2LCAxNiwgMjQ4LCAyMTUsIDI1NCwgNDcsIDQ2LCAyNiwgMTYsIAorICAgIDIzNiwgMTYsIDI1NCwgNDcsIDQ2LCAyNiwgMTYsIDIzNiwgMTYsIDI1NCwgMTUyLCA0NiwgMjYsIDE2LCAyMzYsIDE2LCAKKyAgICAyMzIsIDEzMSwgNDYsIDI2LCAxNiwgMjU0LCA4NCwgMjMyLCAxMzEsIDQ2LCAyNiwgMTYsIDI1NCwgODYsIDQ2LCAyNiwgMTYsIAorICAgIDI0OCwgMjE0LCA0NiwgMjYsIDE2LCAyMjEsIDc3LCA0NiwgMjYsIDE2LCAyMjIsIDQ0LCA0NiwgMjYsIDE2LCAyMzYsIDMzLCAKKyAgICA0NiwgMjYsIDE2LCAyMzUsIDEwMiwgMjQ2LCAxODIsIDI1MCwgMjU1LCA0NiwgMjYsIDE2LCAyMzUsIDEwMiwgMjQ3LCA3OCwgCisgICAgMjUxLCAwLCA0NiwgMjYsIDE2LCAyMzUsIDEwMiwgMjIxLCA3OSwgMjUxLCAwLCA0NiwgMjYsIDE2LCAyMzUsIDEwMiwgMjIyLCAKKyAgICA1NCwgMjUxLCAwLCA0NiwgMjYsIDE2LCAyMzUsIDEwMiwgMjM3LCAyMjksIDI1MCwgMjU1LCA0NiwgMjYsIDE2LCAyNDQsIAorICAgIDU2LCAyMzIsIDEzMiwgMjU0LCAxMDksIDQ2LCAyNiwgMTYsIDI0NCwgNTYsIDIyOSwgMjI3LCAyNTQsIDM3LCA0NiwgMjYsIAorICAgIDE2LCAyNDQsIDU2LCAyMjksIDIyNywgMjQ5LCA0MCwgNDYsIDI2LCAxNiwgMjQ4LCAyMzgsIDQ2LCAyNiwgMTYsIDI0OCwgCisgICAgMjM5LCAyMjksIDIyNywgMjU0LCAzOCwgMjM2LCAxOTcsIDQ2LCAyNiwgMTYsIDI0OCwgMjM5LCAyMjksIDIyNywgMjU0LCAKKyAgICAzOCwgMjU0LCAxMDksIDQ2LCAyNiwgMTYsIDI0OCwgMjM5LCAyMjksIDIyNywgMjQ5LCA0MCwgNDYsIDI2LCAxNiwgMjIxLCAKKyAgICA4MywgNDYsIDI2LCAxNiwgMjU0LCA0MiwgNDYsIDI2LCAxNiwgMjM3LCAyMzYsIDQ2LCAyNiwgMTYsIDI0OSwgMywgNDYsIAorICAgIDI2LCAxNiwgMjU0LCAyMDQsIDIyOSwgMjMsIDI1NCwgNDMsIDQ2LCAyNiwgMTYsIDI1NCwgMjA0LCAyNTQsIDQwLCA0NiwgCisgICAgMjYsIDE2LCAyNTQsIDIwNCwgMjU0LCA0MywgNDYsIDI2LCAxNiwgMjU0LCAyMDQsIDIzMywgMjM0LCA0NiwgMjYsIDE2LCAKKyAgICAyNTQsIDIwNCwgMjMzLCAyNDIsIDQ2LCAyNiwgMTYsIDI1NCwgMjA0LCAyNDQsIDU3LCA0NiwgMjYsIDE2LCAyNTQsIDIwNCwgCisgICAgMjQ0LCA1NCwgNDYsIDI2LCAxNiwgMjU0LCAyMDQsIDIyOSwgMjMsIDI0NCwgNTcsIDQ2LCAyNiwgMTYsIDIzNCwgNjAsIAorICAgIDIyOCwgMjE2LCAyNDIsIDYxLCA0NiwgMjYsIDE2LCAyMzQsIDYwLCAyNTQsIDE1NCwgMjI4LCAyMTYsIDI0MiwgNjEsIDQ2LCAKKyAgICAyNiwgMTYsIDIzNCwgNjAsIDI0OSwgMzksIDI0MiwgNjEsIDQ2LCAyNiwgMTYsIDIzNCwgNjAsIDI1NCwgMTU0LCAyNDksIAorICAgIDM5LCAyNDIsIDYxLCA0NiwgMjYsIDE2LCAyMzQsIDYwLCAyMjEsIDcyLCAyNDIsIDYxLCA0NiwgMjYsIDE2LCAyMzQsIDYwLCAKKyAgICAyMjEsIDg0LCA0NiwgMjYsIDE2LCAyMzQsIDYwLCAyMjIsIDQ4LCAyNDIsIDYxLCA0NiwgMjYsIDE2LCAyMzQsIDYwLCAyMjIsIAorICAgIDQ4LCAyMzUsIDEwNSwgMjQyLCA2MSwgNDYsIDI2LCAxNiwgMjM0LCA2MCwgMjM1LCAxMDUsIDI0MiwgNjEsIDQ2LCAyNiwgCisgICAgMTYsIDIzNCwgNjAsIDIyOSwgNTUsIDI0MiwgNjEsIDQ2LCAyNiwgMTYsIDIzNywgMTQ5LCAyMjIsIDY5LCAyNDIsIDYyLCAKKyAgICA0NiwgMjYsIDE2LCAyNTQsIDgyLCAyMjIsIDY5LCAyNDIsIDYyLCA0NiwgMjYsIDE2LCAyNDUsIDI0NCwgMjIyLCA0NSwgNDYsIAorICAgIDI2LCAxNiwgMjQ1LCAyNDQsIDIzMywgMTI2LCA0NiwgMjYsIDE2LCAyNDUsIDI0NCwgMjQ4LCAyNDMsIDQ2LCAyNiwgMTYsIAorICAgIDIzNCwgNjAsIDIxOSwgMTc1LCAyNDIsIDYxLCA0NiwgMjYsIDE2LCAyMzQsIDYwLCAyMjgsIDIxNSwgMjQyLCA2MSwgNDYsIAorICAgIDI2LCAxNiwgMjM0LCA2MCwgMjI5LCA1NSwgMjIyLCA0OCwgMjQyLCA2MSwgNDYsIDI2LCAxNiwgMjQ0LCA1MiwgMjMzLCAzNCwgCisgICAgMjU0LCA4NSwgNDYsIDI2LCAxNiwgMjQ0LCA1MiwgMjMzLCAzNCwgMjQ4LCAyMTMsIDQ2LCAyNiwgMTYsIDI0NiwgMTk1LCAKKyAgICAyMzYsIDI0NCwgMjQ1LCA5MywgMjE5LCA2MSwgNDYsIDI2LCAxNiwgMjM3LCAyMzUsIDQ2LCAyNiwgMTYsIDIzNywgMjMzLCAKKyAgICA0NiwgMjYsIDE2LCAyNDUsIDkzLCAyNTQsIDQ4LCAyNDksIDM4LCAyNDIsIDYwLCA0NiwgMjYsIDE2LCAyNDUsIDkzLCAyNDksIAorICAgIDEsIDE4NywgNDYsIDI2LCAxNiwgMjQ1LCA5MywgMjQ5LCAxLCAyMzIsIDIxNywgNDYsIDI2LCAxNiwgMjQ1LCA5MywgMjMyLCAKKyAgICAyMTMsIDI0MiwgNjEsIDQ2LCAyNiwgMTYsIDI0NSwgOTMsIDI0OSwgMSwgMjQ5LCAxNSwgNDYsIDI2LCAxNiwgMjQ1LCA5MywgCisgICAgMjI0LCA2MSwgMjQ5LCAwLCAyNDksIDE1LCA0NiwgMjYsIDE2LCAyNDUsIDkzLCAyNDksIDEsIDIzNiwgMTg0LCA0NiwgMjYsIAorICAgIDE2LCAyNDUsIDkzLCAyNDksIDEsIDIxNywgMjEsIDQ2LCAyNiwgMTYsIDI0NSwgOTMsIDI0OSwgMSwgMjMyLCA2MywgMjM2LCAKKyAgICAxOTcsIDQ2LCAyNiwgMTYsIDI0NSwgOTMsIDI0OSwgMSwgMjMyLCA2MywgMjU0LCAxMDksIDQ2LCAyNiwgMTYsIDI0NSwgOTMsIAorICAgIDIzNCwgOTEsIDI1MSwgMSwgMjQ4LCAyNDMsIDQ2LCAyNiwgMTYsIDI0NSwgOTMsIDIzNCwgOTEsIDI1MSwgMSwgMjMzLCAKKyAgICAxMjYsIDQ2LCAyNiwgMTYsIDI0NSwgMjA0LCAyMjQsIDYxLCAyNTEsIDEsIDIxOSwgMTc0LCA0NiwgMjYsIDE2LCAyNDUsIAorICAgIDkzLCAyMjQsIDYxLCAyNTEsIDEsIDIyMiwgMjI2LCA0NiwgMjYsIDE2LCAyNDUsIDkzLCAyMzIsIDEzMywgNDYsIDI2LCAxNiwgCisgICAgMjUxLCAyLCAyMTYsIDI1MywgNDYsIDI2LCAxNiwgMjUxLCAyLCAyMzYsIDY0LCA0NiwgMjYsIDE2LCAyNTEsIDIsIDIyMywgCisgICAgMjUwLCA0NiwgMjYsIDE2LCAyNDUsIDkzLCAyNDIsIDEwNywgMjE3LCAyNTIsIDIyMiwgNDksIDQ2LCAyNiwgMTYsIDI0NSwgCisgICAgOTMsIDI0NiwgMTk2LCAyNTQsIDEwMiwgNDYsIDI2LCAxNiwgMjE3LCAyNTIsIDIyMSwgNzMsIDQ2LCAyNiwgMTYsIDI0OCwgCisgICAgMjUxLCAyMjEsIDczLCA0NiwgMjYsIDE2LCAyNDgsIDI1MSwgMjIyLCA0OSwgNDYsIDI2LCAxNiwgMjQ4LCAyNTEsIDI1NCwgCisgICAgODcsIDI0NywgNzgsIDI0OCwgMTYxLCA0NiwgMjYsIDE2LCAyNDgsIDI1MSwgMjMzLCAxMjQsIDIyMiwgNTMsIDI0OCwgMTYxLCAKKyAgICA0NiwgMjYsIDE2LCAyNDgsIDI1MSwgMjQ4LCAyMzUsIDI0NiwgOTksIDI0OCwgMTYxLCA0NiwgMjYsIDE2LCAyNDgsIDI1MSwgCisgICAgMjIxLCA4MSwgMjMwLCAxNTIsIDI0OCwgMTYxLCA0NiwgMjYsIDE2LCAyMTcsIDI1MiwgMjU0LCA4NywgMjQ3LCA3OCwgMjQ4LCAKKyAgICAxNjEsIDQ2LCAyNiwgMTYsIDIxNywgMjUyLCAyMzMsIDEyNCwgMjIyLCA1MywgMjQ4LCAxNjEsIDQ2LCAyNiwgMTYsIDIxNywgCisgICAgMjUyLCAyNDgsIDIzNSwgMjQ2LCA5OSwgMjQ4LCAxNjEsIDQ2LCAyNiwgMTYsIDIxNywgMjUyLCAyMjEsIDgxLCAyMzAsIAorICAgIDE1MiwgMjQ4LCAxNjEsIDQ2LCAyNiwgMTYsIDI0NCwgMTc5LCAyNDgsIDI1MCwgNDYsIDI2LCAxNiwgMjQ0LCAxNzksIDIxNywgCisgICAgMjUxLCA0NiwgMjYsIDE2LCAyNDksIDIsIDI1NCwgODcsIDIzMywgMTY5LCA0NiwgMjYsIDE2LCAyNDksIDIsIDI1NCwgODcsIAorICAgIDIzNCwgOCwgNDYsIDI2LCAxNiwgMjQ5LCAyLCAyNDgsIDIxNCwgNDYsIDI2LCAxNiwgMjQ5LCAyLCAyMjIsIDksIDQ2LCAyNiwgCisgICAgMTYsIDIyNCwgMTE3LCAyMjIsIDksIDQ2LCAyNiwgMTYsIDIyNCwgMTE3LCAyMjIsIDEwLCAyNDgsIDIwMSwgNDYsIDI2LCAKKyAgICAxNiwgMjI0LCAxMTcsIDIyMiwgMTAsIDIyMSwgNzQsIDQ2LCAyNiwgMTYsIDIyNCwgMTE3LCAyMjIsIDEwLCAyMjIsIDQyLCAKKyAgICA0NiwgMjYsIDE2LCAyMjQsIDExNywgMjU0LCAxNywgNDYsIDI2LCAxNiwgMjI0LCAxMTcsIDI1NCwgMTgsIDI0OCwgMjAxLCAKKyAgICA0NiwgMjYsIDE2LCAyMjQsIDExNywgMjU0LCAxOCwgMjIxLCA3NCwgNDYsIDI2LCAxNiwgMjI0LCAxMTcsIDI1NCwgMTgsIAorICAgIDIyMiwgNDIsIDQ2LCAyNiwgMTYsIDI0OCwgMjM2LCAyNDQsIDE2MSwgNDYsIDI2LCAxNiwgMjQ4LCAyNDIsIDIzMCwgODYsIAorICAgIDQ2LCAyNiwgMTYsIDIyMywgMTQ0LCA0NiwgMjYsIDE2LCAyNTQsIDM0LCAxODcsIDQ2LCAyNiwgMTYsIDI1NCwgMzQsIDIxOSwgCisgICAgNjEsIDQ2LCAyNiwgMTYsIDI1NCwgMzQsIDI0NSwgMCwgNDYsIDI2LCAxNiwgMjU0LCAzNCwgMjQ5LCAxNSwgNDYsIDI2LCAKKyAgICAxNiwgMjU0LCAzNCwgMjM2LCAxODQsIDQ2LCAyNiwgMTYsIDI1NCwgMzQsIDIxNywgMjEsIDQ2LCAyNiwgMTYsIDI1NCwgMzQsIAorICAgIDIzMiwgNjIsIDQ2LCAyNiwgMTYsIDIzNiwgMTY1LCAyMzIsIDEzMiwgMjMzLCAyNDEsIDQ2LCAyNiwgMTYsIDIzNiwgMTY2LCAKKyAgICAyMzIsIDEzMiwgMjMzLCAyNDEsIDQ2LCAyNiwgMTYsIDIzNiwgMTY1LCAyMzIsIDEzMiwgMjM2LCAxOTcsIDQ2LCAyNiwgMTYsIAorICAgIDIzNiwgMTY2LCAyMzIsIDEzMiwgMjM2LCAxOTcsIDQ2LCAyNiwgMTYsIDIzNiwgNjYsIDIzNiwgMTk3LCA0NiwgMjYsIDE2LCAKKyAgICAyNDQsIDU2LCAyMzIsIDEzMiwgMjM2LCAxOTcsIDI2LCAxNiwgMjI0LCAxMDksIDI1MiwgMTk3LCAyNiwgMTYsIDUxLCAyNTIsIAorICAgIDE5NywgMjYsIDE2LCAzOSwgMjUyLCAxOTcsIDI2LCAxNiwgMjI3LCAxNjAsIDM5LCAyNTIsIDE5NywgMjYsIDE2LCAyNDksIAorICAgIDE0NSwgMjUyLCAxOTcsIDI2LCAxNiwgMjI0LCAxOTIsIDI1MiwgMTk3LCAyNiwgMTYsIDQyLCAyMjcsIDE4MiwgNTUsIDI2LCAKKyAgICAxNiwgNDUsIDIyNywgMTgyLCA1NSwgMjYsIDE2LCAyMjcsIDE4MiwgMjQ4LCAxNDMsIDI2LCAxNiwgMjQ5LCAxODQsIDIyNiwgCisgICAgNzksIDI2LCAxNiwgMjQ5LCAyMDgsIDI1MSwgMTQxLCAyNiwgMTYsIDIyNiwgNzksIDI2LCAxNiwgMjUwLCAxODAsIDI2LCAKKyAgICAxNiwgMjI3LCAxODAsIDI0NSwgMTkzLCAyNiwgMTYsIDIyNywgMTgwLCAyNDUsIDE5MiwgMjYsIDE2LCAyMjcsIDE4MCwgCisgICAgMjQ1LCAxOTEsIDI2LCAxNiwgMjQ1LCAyMTAsIDI2LCAxNiwgMjQ1LCAyMTEsIDU2LCAyNiwgMTYsIDI1MiwgMTAsIDc4LCAKKyAgICAyNiwgMTYsIDI1MSwgMTYzLCAyNiwgMTYsIDI1MiwgMTksIDI2LCAxNiwgMTE1LCAyNiwgMTYsIDIzMCwgMTM2LCAyMjMsIAorICAgIDE2MywgMjYsIDE2LCAyMjAsIDIwNSwgMjIzLCAxNjMsIDI2LCAxNiwgMjIxLCAyMjcsIDIyMywgMTYzLCAyNiwgMTYsIDI0NSwgCisgICAgMTE1LCAyMjMsIDE2MywgMjYsIDE2LCAyNDUsIDE2OSwgMjIzLCAxNjMsIDI2LCAxNiwgMjI0LCA4MSwgMjIzLCAxNjMsIDI2LCAKKyAgICAxNiwgMjI0LCA3OSwgMjQ1LCAxMDEsIDI2LCAxNiwgMjQ1LCAxMTMsIDI0NSwgMTAxLCAyNiwgMTYsIDI0NSwgNjgsIDI1MCwgCisgICAgMjA3LCAyNiwgMTYsIDI0NSwgNjgsIDI1MCwgMjA4LCAyMzAsIDg4LCAyNTQsIDE0NSwgMjYsIDE2LCAyNDUsIDY4LCAyNTAsIAorICAgIDIwOCwgMjMwLCA4OCwgMjUyLCAxODUsIDI2LCAxNiwgMjUxLCAyMDMsIDI1MCwgMjA3LCAyNiwgMTYsIDI0NiwgNzUsIDI1MCwgCisgICAgMjA3LCAyNiwgMTYsIDI0NiwgNzUsIDI1MCwgMjA4LCAyMzAsIDg4LCAyNTQsIDE0NSwgMjYsIDE2LCAyNDYsIDc1LCAyNTAsIAorICAgIDIwOCwgMjMwLCA4OCwgMjUyLCAxODUsIDI2LCAxNiwgMjQ3LCAxMTYsIDI1MCwgMjA2LCAyNiwgMTYsIDI0NywgMTE2LCAKKyAgICAyNTAsIDIwNSwgMjYsIDE2LCAyMzMsIDg1LCAyMzQsIDI0LCAyMjcsIDE2OCwgMjYsIDE2LCA1MSwgMjI1LCAwLCAyNiwgMTYsIAorICAgIDUxLCAyNDUsIDE1NiwgMjYsIDE2LCAyNDUsIDE1NywgMjIwLCA2MywgMjYsIDE2LCAyNDUsIDE1NywgMjQ3LCAxMzIsIDI2LCAKKyAgICAxNiwgMjMyLCAyMDUsIDIyMCwgNjMsIDI2LCAxNiwgMjMyLCAyMDUsIDI0NywgMTMyLCAyNiwgMTYsIDIyNSwgMSwgMjIwLCAKKyAgICA2MywgMjYsIDE2LCAyMjUsIDEsIDI0NywgMTMyLCAyNiwgMTYsIDIyOCwgOTAsIDE0NSwgMjI1LCAwLCAyNiwgMTYsIDIyOCwgCisgICAgOTAsIDE0NSwgMjQ1LCAxNTYsIDI2LCAxNiwgMjUwLCAxNjYsIDIyMSwgMTc3LCAyNiwgMTYsIDI1MCwgNjksIDIyMSwgMTc3LCAKKyAgICAyNiwgMTYsIDIzMCwgODgsIDI1NCwgMTQ1LCAyNiwgMTYsIDIzMCwgODgsIDI1MiwgMTg1LCAyNiwgMTYsIDIyOCwgNzQsIAorICAgIDI1NCwgMTQ1LCAyNiwgMTYsIDIyOCwgNzQsIDI1MiwgMTg1LCAyNiwgMTYsIDIzMywgODgsIDIyNywgMTY4LCAyNiwgMTYsIAorICAgIDIxOCwgMjA1LCAyMjcsIDE2OCwgMjYsIDE2LCAxNDQsIDIyNywgMTY4LCAyNiwgMTYsIDIyOCwgOTAsIDIyNywgMTY4LCAyNiwgCisgICAgMTYsIDI0NiwgMjMyLCAyMjcsIDE2OCwgMjYsIDE2LCAyMjQsIDc2LCAyMjcsIDE2OCwgMjYsIDE2LCAyMjEsIDI0MywgMjI3LCAKKyAgICAxNjgsIDI2LCAxNiwgMjI0LCA2OCwgMjI3LCAxNjgsIDI2LCAxNiwgMTMxLCAyNDIsIDE2MiwgMjIwLCAyMTcsIDIyNywgCisgICAgMTY4LCAyNiwgMTYsIDIxOCwgMTUyLCAyMzEsIDE3OCwgMjYsIDE2LCA4OCwgMjMxLCAxNzgsIDI2LCAxNiwgMjUwLCAyMjIsIAorICAgIDIxOCwgMTUyLCAyMzEsIDE3OCwgMjYsIDE2LCA0MCwgMjMxLCAxNzksIDIxOCwgMjA3LCAyNiwgMTYsIDQwLCAyMzEsIDE3OSwgCisgICAgMjUyLCA1MywgMjYsIDE2LCAyMjEsIDkxLCAyMzEsIDE3OSwgMTA4LCAyMTgsIDIwNywgMjYsIDE2LCAyMjEsIDkxLCAyMzEsIAorICAgIDE3OSwgMTA4LCAyNTIsIDUzLCAyNiwgMTYsIDIyMSwgOTEsIDIzMSwgMTc5LCA0MiwgMjE4LCAyMDcsIDI2LCAxNiwgMjIxLCAKKyAgICA5MSwgMjMxLCAxNzksIDQyLCAyNTIsIDUzLCAyNiwgMTYsIDIyMSwgOTEsIDIzMSwgMTc5LCA0NSwgMjE4LCAyMDcsIDI2LCAKKyAgICAxNiwgMjIxLCA5MSwgMjMxLCAxNzksIDQ1LCAyNTIsIDUzLCAyNiwgMTYsIDIyMSwgOTEsIDIzMSwgMTc5LCAxMTMsIDIxOCwgCisgICAgMjA3LCAyNiwgMTYsIDIyMSwgOTEsIDIzMSwgMTc5LCAxMTMsIDI1MiwgNTMsIDI2LCAxNiwgMjIxLCA5MSwgMjMxLCAxNzksIAorICAgIDEwOCwgNDUsIDIxOCwgMjA3LCAyNiwgMTYsIDIyMSwgOTEsIDIzMSwgMTc5LCAxMDgsIDQ1LCAyNTIsIDUzLCAyNiwgMTYsIAorICAgIDIzMywgMTE4LCAyMzEsIDE3OSwgMjE4LCAyMDcsIDI2LCAxNiwgMjMzLCAxMTgsIDIzMSwgMTc5LCAyNTIsIDUzLCAyNiwgCisgICAgMTYsIDIyMSwgODgsIDIzMSwgMTc5LCAxMTMsIDIxOCwgMjA3LCAyNiwgMTYsIDIyMSwgODgsIDIzMSwgMTc5LCAxMTMsIAorICAgIDI1MiwgNTMsIDI2LCAxNiwgMjI5LCAyMzAsIDIzMSwgMTc4LCAyNiwgMTYsIDIxOSwgNjcsIDIzMSwgMTc4LCAyNiwgMTYsIAorICAgIDIzMSwgMTc5LCAyNTIsIDUzLCAyNiwgMTYsIDIzMSwgMTExLCAyMzEsIDE3OCwgMjYsIDE2LCAyNTAsIDE4NSwgMjMxLCAKKyAgICAxNzksIDIxOCwgMjA3LCAyNiwgMTYsIDI1MCwgMTg1LCAyMzEsIDE3OSwgMjUyLCA1MywgMjYsIDE2LCAyNTIsIDgsIDI2LCAKKyAgICAxNiwgMjE4LCAyMDUsIDIzMSwgMTgwLCAyNiwgMTYsIDE0NCwgMjMxLCAxODAsIDI2LCAxNiwgMjI4LCA5MCwgMjMxLCAxODAsIAorICAgIDI2LCAxNiwgMjQ2LCAyMzIsIDIzMSwgMTgwLCAyNiwgMTYsIDIyNCwgNzYsIDIzMSwgMTgwLCAyNiwgMTYsIDIyMSwgMjQzLCAKKyAgICAyMzEsIDE4MCwgMjYsIDE2LCAyMjQsIDY4LCAyMzEsIDE4MCwgMjYsIDE2LCAxMzEsIDI0MiwgMTYyLCAyMjAsIDIxNywgCisgICAgMjMxLCAxODAsIDI2LCAxNiwgMzYsIDIyMywgMTQ2LCAyNiwgMTYsIDM2LCAyMjMsIDIzMywgMjIzLCAxNDYsIDI2LCAxNiwgCisgICAgMzYsIDIyMSwgOTcsIDI2LCAxNiwgMzYsIDIyMSwgOTYsIDI2LCAxNiwgMzYsIDIyMSwgOTUsIDI2LCAxNiwgMjQ1LCAxODMsIAorICAgIDIyMSwgOTcsIDI2LCAxNiwgMjQ1LCAxODMsIDIyMSwgOTYsIDI2LCAxNiwgMjQ1LCAxODMsIDIyMSwgOTUsIDI2LCAxNiwgCisgICAgMzYsIDI1MywgMjMwLCAyNDgsIDE0NSwgMjYsIDE2LCAzNiwgMjQ1LCAxNjIsIDI2LCAxNiwgMzYsIDI0NSwgMTYxLCAyNiwgCisgICAgMTYsIDM2LCAyNDUsIDE2MCwgMjYsIDE2LCAzNiwgMjQ1LCAxNTksIDI2LCAxNiwgMzYsIDI0NSwgMTU4LCAyNiwgMTYsIAorICAgIDI1MiwgMTMxLCAyNTIsIDE0MywgMjYsIDE2LCAyNDYsIDE5MCwgMjUyLCAxNDMsIDI2LCAxNiwgMjUyLCAxMzEsIDIyMSwgCisgICAgMjAwLCAyNiwgMTYsIDI0NiwgMTkwLCAyMjEsIDIwMCwgMjYsIDE2LCAyNTIsIDEzMSwgMjI0LCA0NCwgMjYsIDE2LCAyNDYsIAorICAgIDE5MCwgMjI0LCA0NCwgMjYsIDE2LCAyNTIsIDEzMSwgMjI5LCAxMTUsIDI2LCAxNiwgMjQ2LCAxOTAsIDIyOSwgMTE1LCAyNiwgCisgICAgMTYsIDM2LCAyNTUsIDAsIDI2LCAxNiwgMzYsIDIyMywgMTY1LCAyNiwgMTYsIDM2LCAyMjIsIDU4LCAyNiwgMTYsIDM2LCAKKyAgICAyMjMsIDE2NiwgMjYsIDE2LCAzNiwgMjM0LCA3MSwgMjYsIDE2LCAzNiwgMjM0LCA3MCwgMjYsIDE2LCAzNiwgMjU0LCAyNTUsIAorICAgIDI2LCAxNiwgMzYsIDIzNCwgMjQwLCAyNiwgMTYsIDI1NCwgMjUsIDIyMCwgNjMsIDI2LCAxNiwgMjU0LCAyNSwgMjQ3LCAKKyAgICAxMzIsIDI2LCAxNiwgMzYsIDI0OCwgMTU4LCAyNiwgMTYsIDM2LCAyMjcsIDkxLCAyNiwgMTYsIDM2LCAyNDUsIDE1MCwgMjYsIAorICAgIDE2LCAzNiwgMjI0LCA0MCwgMjYsIDE2LCAzNiwgMjUyLCAxMTMsIDI2LCAxNiwgMzYsIDUxLCAyMjEsIDEyNCwgMjYsIDE2LCAKKyAgICAzNiwgMjIxLCA3OCwgMjIxLCAxMjQsIDI2LCAxNiwgMjI3LCA5NSwgMjYsIDE2LCAyMjMsIDk5LCAyNiwgMTYsIDIxNywgCisgICAgMTU3LCAyNiwgMTYsIDIyOSwgMTA3LCAyNiwgMTYsIDIzMywgMjMxLCAyNiwgMTYsIDI0NSwgMTIxLCAyNiwgMTYsIDI1MCwgCisgICAgMTA2LCAyNiwgMTYsIDI0OSwgODMsIDI2LCAxNiwgMjQ0LCA0NywgMjMxLCAxODEsIDIyNCwgNTUsIDI2LCAxNiwgMjQ0LCAKKyAgICA0NywgMjMxLCAxODEsIDIzMSwgMjA1LCAyMjQsIDU1LCAyNiwgMTYsIDIyMSwgMTA5LCAyNiwgMTYsIDIyMCwgMjM3LCAyNiwgCisgICAgMTYsIDIzNywgMTcwLCAyMjAsIDIzNywgMjYsIDE2LCAyMjAsIDIzOCwgMjI0LCA1NSwgMjYsIDE2LCAyMjAsIDIzOCwgMjIwLCAKKyAgICA2MywgMjYsIDE2LCAyMzAsIDk5LCAyMjMsIDExOSwgMjYsIDE2LCAyMzAsIDk5LCAyMjMsIDExNiwgMjYsIDE2LCAyMzAsIAorICAgIDk5LCAyMjMsIDExNSwgMjYsIDE2LCAyMzAsIDk5LCAyMjMsIDExNCwgMjYsIDE2LCAyMzAsIDk5LCAyMjMsIDExMywgMjYsIAorICAgIDE2LCAyMzAsIDk5LCAyMjMsIDExMiwgMjYsIDE2LCAyMzAsIDk5LCAyMjMsIDExMSwgMjYsIDE2LCAyMzAsIDk5LCAyMjMsIAorICAgIDExMCwgMjYsIDE2LCAyMzAsIDk5LCAyMjMsIDEwOSwgMjYsIDE2LCAyMzAsIDk5LCAyMjMsIDExOCwgMjYsIDE2LCAyMzAsIAorICAgIDk5LCAyMjMsIDExNywgMjYsIDE2LCAyNDMsIDE2OSwgMjYsIDE2LCAyMzIsIDE0MCwgMjYsIDE2LCAyNDYsIDE5MCwgMTE3LCAKKyAgICAyMjMsIDE0MCwgMjYsIDE2LCAyNDksIDc3LCAyMjQsIDU1LCAyNiwgMTYsIDM2LCAxMTMsIDI1MiwgMjQsIDI2LCAxNiwgMzYsIAorICAgIDEwOCwgMjUyLCAyNCwgMjYsIDE2LCAzNiwgMjQzLCAxNzgsIDI2LCAxNiwgMzYsIDIyNCwgMzQsIDIyOSwgNTksIDI2LCAxNiwgCisgICAgMjI5LCAxOTUsIDc4LCAyNiwgMTYsIDIyOSwgMTk1LCAxMDgsIDc4LCAyNiwgMTYsIDE0NCwgMjI5LCAxOTUsIDc4LCAyNiwgCisgICAgMTYsIDI0NCwgNzQsIDIyMCwgNjMsIDI2LCAxNiwgMjQ0LCA3NCwgMjQ3LCAxMzIsIDI2LCAxNiwgMiwgMjQ1LCAxODIsIDI2LCAKKyAgICAxNiwgMjQ5LCAxNjgsIDI2LCAxNiwgMjQ5LCAxNjksIDI1NCwgMTU3LCAyNiwgMTYsIDIzNCwgNDYsIDI2LCAxNiwgMjM0LCAKKyAgICAyNTAsIDI2LCAxNiwgMjUyLCA1LCAyNiwgMTYsIDIyNSwgNzEsIDIxOCwgMjA3LCAyNiwgMTYsIDIyNSwgNzEsIDI1MiwgNTMsIAorICAgIDI2LCAxNiwgMjMzLCAxNTcsIDI2LCAxNiwgMjMzLCAxNTgsIDI1MiwgNTMsIDI2LCAxNiwgMjI1LCA2NSwgMjE4LCAyMDcsIAorICAgIDI2LCAxNiwgMjI1LCA2NSwgMjUyLCA1MywgMjYsIDE2LCAyNDUsIDgyLCAyMTgsIDIwNywgMjYsIDE2LCAyNDUsIDgyLCAKKyAgICAyNTIsIDUzLCAyNiwgMTYsIDIzNCwgMjUxLCAyMjksIDE2NywgMjI3LCAxNjgsIDI2LCAxNiwgMjM0LCAyNTEsIDIzNywgCisgICAgMjI4LCAyMjcsIDE2OCwgMjYsIDE2LCAyNTIsIDYsIDIyNywgMTY4LCAyNiwgMTYsIDIyNSwgNzEsIDIyNywgMTY4LCAyNiwgCisgICAgMTYsIDIzMywgMTU4LCAyMjcsIDE2OCwgMjYsIDE2LCAyMjUsIDY1LCAyMjcsIDE2OCwgMjYsIDE2LCAyMjIsIDY3LCAyMjksIAorICAgIDE2NSwgMjUwLCA4NywgMjI4LCAyMjQsIDIyOSwgMTY2LCAyNiwgMTYsIDIyMiwgNjcsIDIyOSwgMTY1LCAyNTAsIDg3LCAKKyAgICAyMjgsIDIyNCwgMjM3LCAyMjcsIDI2LCAxNiwgMjIyLCA2NywgMjI5LCAxNjUsIDI1MCwgODcsIDIyOCwgMjI0LCAyMjksIAorICAgIDE2NywgMjQ4LCAyMjQsIDI2LCAxNiwgMjIyLCA2NywgMjM3LCAyMjYsIDI1MCwgODcsIDIyOCwgMjI0LCAyMjksIDE2NiwgCisgICAgMjYsIDE2LCAyMjIsIDY3LCAyMzcsIDIyNiwgMjUwLCA4NywgMjI4LCAyMjQsIDIzNywgMjI3LCAyNiwgMTYsIDIyMiwgNjcsIAorICAgIDIzNywgMjI2LCAyNTAsIDg3LCAyMjgsIDIyNCwgMjM3LCAyMjgsIDI0OCwgMjI0LCAyNiwgMTYsIDIyMiwgNjcsIDIzNywgCisgICAgMjI2LCAyNTAsIDg3LCAyMjgsIDIyNCwgMjM3LCAyMjgsIDI0OCwgMjIzLCAyNiwgMTYsIDIyMiwgNjcsIDIzNywgMjI2LCAKKyAgICAyNTAsIDg3LCAyMjgsIDIyNCwgMjM3LCAyMjgsIDI0OCwgMjIyLCAyNiwgMTYsIDI1MCwgMTAzLCAyNiwgMTYsIDI0NCwgMjYsIAorICAgIDI1MSwgMjAzLCAyNTAsIDIwNywgMjYsIDE2LCAyNDQsIDI2LCAyNDYsIDc1LCAyNTAsIDIwNywgMjYsIDE2LCA0MCwgMjUzLCAKKyAgICAyMDQsIDI2LCAxNiwgMjE5LCA4MSwgMjYsIDE2LCAyMjksIDM1LCAyNiwgMTYsIDI1MCwgMjAwLCAyNiwgMTYsIDIyNiwgCisgICAgMTEwLCAyNiwgMTYsIDI1MCwgMjAyLCAyNiwgMTYsIDIyMSwgMTE1LCAyNiwgMTYsIDIyOSwgMTcsIDI2LCAxNiwgMjI5LCAKKyAgICAxOCwgMjQ1LCAxNTIsIDI2LCAxNiwgMjI2LCAxMTEsIDI0NSwgMTUyLCAyNiwgMTYsIDIyMSwgMTE2LCAyMjcsIDE2NiwgMjYsIAorICAgIDE2LCAyMjksIDE1NCwgMjIzLCA5NSwgMjMsIDIxOSwgNzEsIDE2NSwgMjIzLCAxOCwgMjMsIDIxOSwgNzEsIDE2NSwgMjIzLCAKKyAgICA3LCAyMywgMjE5LCA3MSwgMTY1LCAyMjIsIDI1MywgMjMsIDIxOSwgNzEsIDE2NSwgMjIyLCAyNDYsIDIzLCAyMTksIDcxLCAKKyAgICAxNjUsIDIyMiwgMjM4LCAyMywgMjE5LCA3MSwgMTY1LCAyMjIsIDIzMiwgMjMsIDIxOSwgNzEsIDE2NSwgMjIyLCAyMzEsIAorICAgIDIzLCAyMTksIDcxLCAxNjUsIDIyMiwgMjMwLCAyMywgMjE5LCA3MSwgMTY1LCAyMjIsIDIyOSwgMjMsIDIxOSwgNzEsIDE2NSwgCisgICAgMjIzLCAxNywgMjMsIDIxOSwgNzEsIDE2NSwgMjIzLCAxNiwgMjMsIDIxOSwgNzEsIDE2NSwgMjIzLCAxNSwgMjMsIDIxOSwgCisgICAgNzEsIDE2NSwgMjIzLCAxNCwgMjMsIDIxOSwgNzEsIDE2NSwgMjIzLCAxMywgMjMsIDIxOSwgNzEsIDE2NSwgMjIzLCAxMiwgCisgICAgMjMsIDIxOSwgNzEsIDE2NSwgMjIzLCAxMSwgMjMsIDIxOSwgNzEsIDE2NSwgMjIzLCAxMCwgMjMsIDIxOSwgNzEsIDE2NSwgCisgICAgMjIzLCA5LCAyMywgMjE5LCA3MSwgMTY1LCAyMjMsIDgsIDIzLCAyMTksIDcxLCAxNjUsIDIyMywgNiwgMjMsIDIxOSwgNzEsIAorICAgIDE2NSwgMjIzLCA1LCAyMywgMjE5LCA3MSwgMTY1LCAyMjMsIDQsIDIzLCAyMTksIDcxLCAxNjUsIDIyMywgMywgMjMsIDIxOSwgCisgICAgNzEsIDE2NSwgMjIzLCAyLCAyMywgMjE5LCA3MSwgMTY1LCAyMjIsIDIzNywgMjMsIDIxOSwgNzEsIDE2NSwgMjIyLCAyMzYsIAorICAgIDIzLCAyMTksIDcxLCAxNjUsIDIyMiwgMjM1LCAyMywgMjE5LCA3MSwgMTY1LCAyMjIsIDIzNCwgMjMsIDIxOSwgNzEsIDE2NSwgCisgICAgMjIyLCAyMzMsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjMsIDE4LCAyMywgMjM3LCAxODksIDE2NSwgMjIzLCA3LCAyMywgMjM3LCAKKyAgICAxODksIDE2NSwgMjIyLCAyNDYsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIDIzOCwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgCisgICAgMjMxLCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyMzAsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjMsIDE2LCAyMywgMjM3LCAKKyAgICAxODksIDE2NSwgMjIzLCAxNSwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMywgMTQsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjMsIAorICAgIDEzLCAyMywgMjM3LCAxODksIDE2NSwgMjIzLCAxMCwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMywgOSwgMjMsIDIzNywgMTg5LCAKKyAgICAxNjUsIDIyMywgOCwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMywgMywgMjMsIDIzNywgMTg5LCAxNjUsIDIyMywgMiwgMjMsIAorICAgIDIzNywgMTg5LCAxNjUsIDIyMywgMSwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMywgMCwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgCisgICAgMjU1LCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyNTQsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIDI1MiwgMjMsIDIzNywgCisgICAgMTg5LCAxNjUsIDIyMiwgMjUxLCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyNTAsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIAorICAgIDI0OSwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgMjQ4LCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyNDcsIDIzLCAyMzcsIAorICAgIDE4OSwgMTY1LCAyMjIsIDI0NSwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgMjQ0LCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAKKyAgICAyNDMsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIDI0MiwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgMjQxLCAyMywgMjM3LCAKKyAgICAxODksIDE2NSwgMjIyLCAyNDAsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIDIzOSwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgCisgICAgMjM3LCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyMzYsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIDIzNSwgMjMsIDIzNywgCisgICAgMTg5LCAxNjUsIDIyMiwgMjM0LCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyMzMsIDM2LCAyMywgMjYsIDIyMSwgNzUsIDM2LCAKKyAgICAyMywgMjYsIDIyMiwgNDMsIDM2LCAyMywgMjYsIDIyOSwgMTc0LCAyMywgMjYsIDIzNSwgMTAxLCAyMzMsIDEyNSwgMzUsIAorICAgIDI0NywgOCwgMjQ4LCAyMzcsIDM1LCAyNDMsIDE1MCwgMjQ3LCA4LCAyNDgsIDIzNywgMzUsIDI0MiwgMTY1LCAyNDcsIDgsIAorICAgIDI0OCwgMjM3LCAzNSwgMjQ3LCA3LCAyNDMsIDE1MSwgMjQ4LCAyMzcsIDM1LCAyNDcsIDcsIDI0MiwgMTY0LCAyNDgsIDIzNywgCisgICAgMzUsIDI0NywgOCwgMTU5LCAzNSwgMjUxLCA4NCwgMTU5LCAzNSwgMjQ1LCA5MCwgMjUwLCAyMjEsIDE1OSwgMzUsIDIzMywgCisgICAgMTUwLCAxNTksIDM1LCAyNTIsIDE5MiwgMTU5LCAzNSwgMjM2LCAxODEsIDIyNCwgNDMsIDE1OSwgMzUsIDI1MCwgMTMzLCAKKyAgICAxNTksIDM1LCAyNTQsIDksIDE1OSwgMzUsIDIzMCwgMTA5LCAxNTksIDM1LCAyNTIsIDEzLCAyMzAsIDgzLCAxNTksIDM1LCAKKyAgICAyNDksIDc5LCAxNTYsIDI0OCwgMTk4LCAxNTksIDM1LCAyNDgsIDE5NSwgMTU5LCAzNSwgMjE3LCAyMTAsIDE1OSwgMzUsIAorICAgIDIzNywgMjE3LCAxNTksIDM1LCAyMjksIDE4MCwgMTU5LCAzNSwgMjI3LCAyMTUsIDE1OSwgMzUsIDI1MCwgMTQzLCAxNTksIAorICAgIDM1LCAyNDIsIDI1MywgMjUyLCAyMzMsIDE1OSwgMzUsIDIxOSwgMSwgMTU5LCAzNSwgMjQ1LCAxMzgsIDE1OSwgMzUsIDI1NCwgCisgICAgMjM2LCAxNTksIDM1LCAyMjcsIDE5MCwgMTU5LCAzNSwgMjI3LCAxNzIsIDE1OSwgMzUsIDI0NywgNiwgMTU5LCAzNSwgMjM3LCAKKyAgICA0NSwgMTU5LCAzNSwgMjUwLCAxMzgsIDE1OSwgMzUsIDI0NiwgMTg5LCAxNTksIDM1LCAyNDcsIDg3LCAxNTksIDM1LCAyNTEsIAorICAgIDU4LCAxNTksIDM1LCAyNDksIDg1LCAxNTksIDM1LCAyMSwgMjI3LCAxNzEsIDE1OSwgMzUsIDIzMCwgMzgsIDE1OSwgMzUsIAorICAgIDIzNSwgMTA0LCAxNTksIDM1LCAyNTAsIDE5NSwgMTU5LCAzNSwgMjM2LCAxMDEsIDE1OSwgMzUsIDI0NCwgMjExLCAxNTksIAorICAgIDM1LCAyMjMsIDEyNiwgMTU5LCAzNSwgMjI4LCAxODksIDE1OSwgMzUsIDI0NSwgODksIDE1OSwgMzUsIDIyNywgMTczLCAKKyAgICAxNTksIDM1LCAyMzUsIDEzNCwgMTU2LCAyMzMsIDEzNCwgMTU5LCAzNSwgMjI3LCAxNjksIDE1OSwgMzUsIDI0NCwgNjQsIAorICAgIDE5OSwgMjM0LCAxMiwgMTU5LCAzNSwgMjQ2LCAxOTEsIDE1OSwgMzUsIDIyMywgMTMzLCAxNTksIDM1LCAyNDQsIDI4LCAKKyAgICAxNTksIDM1LCAyNDYsIDE4NCwgMTU5LCAzNSwgMjI5LCAyMTAsIDE1OSwgMzUsIDIyNywgODUsIDE1OSwgMzUsIDI0NSwgCisgICAgMTUxLCAxNTksIDM1LCAyMTksIDE3MywgMTU2LCAyMTgsIDI0NCwgMTU5LCAzNSwgMjUwLCAxNDYsIDE1OSwgMzUsIDIzNCwgCisgICAgMjMsIDE1OSwgMzUsIDI0NiwgMTIwLCAxNTksIDM1LCAyMjAsIDcxLCAxNTksIDM1LCAyNDgsIDIyNSwgMTU5LCAzNSwgMjUwLCAKKyAgICAxOTcsIDIzMywgMTA1LCAxNTksIDM1LCAyNDQsIDEzLCAxNTksIDM1LCAyNDQsIDIxMiwgMjM3LCAyMjMsIDE1OSwgMzUsIAorICAgIDIzNCwgNTMsIDE1OSwgMzUsIDI1NCwgMjUzLCAxNTksIDM1LCAyNDYsIDIwMywgMTU5LCAzNSwgMjQ3LCAxMzQsIDE1OSwgCisgICAgMzUsIDIxOCwgMjQyLCAxNTksIDM1LCAyMjQsIDEwNiwgMTU5LCAzNSwgMjM3LCAxOTYsIDE1OSwgMzUsIDI0OSwgNTEsIAorICAgIDE1OSwgMzUsIDI0OSwgMTUwLCAxNTksIDM1LCAyNDgsIDIyMSwgMTU5LCAzNSwgMjQ2LCA5MywgMTU5LCAzNSwgMjI1LCAzNywgCisgICAgMTU5LCAzNSwgMjIzLCAxMzUsIDE1OSwgMzUsIDI0MywgMTgwLCAxNTksIDM1LCAyNTAsIDE2MiwgMTU5LCAzNSwgMjUwLCAKKyAgICAxOTMsIDE1OSwgMzUsIDI0NSwgMjQ4LCAxNTksIDM1LCAyNTQsIDIwNSwgMTU5LCAzNSwgMjUwLCAxNjEsIDE1OSwgMzUsIAorICAgIDIzMCwgMTM5LCAyMjIsIDIzLCAyMTksIDE1NSwgMTU5LCAzNSwgMjQ4LCAyNDUsIDE1OSwgMzUsIDIzNSwgMTgwLCAxNTksIAorICAgIDM1LCAyNDUsIDExOCwgMjUwLCAxMTIsIDIyNywgNjksIDIyMCwgNzMsIDIwLCAxMDcsIDI1MCwgMTEyLCAyMjcsIDY5LCAKKyAgICAyMjAsIDczLCAyMCwgMTAzLCAyNTAsIDExMiwgMjI3LCA2OSwgMjIwLCA3MywgMjAsIDE2MCwgMjUwLCAxMTIsIDIyNywgNjksIAorICAgIDIyMCwgNzMsIDIwLCAxNTQsIDI1MCwgMTEyLCAyMjcsIDY5LCAyMjAsIDczLCAyMCwgMTc0LCAyNTAsIDExMiwgMjI3LCA2OSwgCisgICAgMjIwLCA3MywgMjAsIDE4MiwgMjUwLCAxMTIsIDIyNywgNjksIDIyMCwgNzMsIDIwLCAxOTEsIDI1MCwgMTEyLCAyMjcsIDY5LCAKKyAgICAyMjAsIDczLCAyMCwgMTg1LCAyNTAsIDExMiwgMjI3LCA2OSwgMjIwLCA3MywgMjAsIDE5MCwgMjUwLCAxMTIsIDIyNywgNjksIAorICAgIDIyMiwgNjMsIDIwLCAxMDcsIDI1MCwgMTEyLCAyMjcsIDY5LCAyMjIsIDYzLCAyMCwgMTAzLCAyNTAsIDExMiwgMjI3LCA2OSwgCisgICAgMjIyLCA2MywgMjAsIDE2MCwgMjUwLCAxMTIsIDIyNywgNjksIDIyMiwgNjMsIDIwLCAxNTQsIDI1MCwgMTEyLCAyMjcsIDY5LCAKKyAgICAyMjIsIDYzLCAyMCwgMTc0LCAyNTAsIDExMiwgMjI3LCA2OSwgMjIyLCA2MywgMjAsIDE4MiwgMjUwLCAxMTIsIDIyNywgNjksIAorICAgIDIyMiwgNjMsIDIwLCAxOTEsIDI1MCwgMTEyLCAyMjcsIDY5LCAyMjIsIDYzLCAyMCwgMTg1LCAyNTAsIDExMiwgMjI3LCA2OSwgCisgICAgMjIyLCA2MywgMjAsIDE5MCwgMTQsIDIxLCA2LCA2MCwgMTQsIDIxLCA2LCAyNTMsIDIwNCwgMTQsIDIxLCA2LCAyNTEsIAorICAgIDIwMiwgMTQsIDIxLCA2LCAyNTAsIDQ2LCAxNCwgMjEsIDYsIDczLCAxNCwgMjEsIDYsIDI0NiwgNzQsIDE0LCAyMSwgNiwgCisgICAgMjQ1LCA2NywgMTQsIDIxLCA2LCAyNDMsIDIyNSwgMTQsIDIxLCA2LCA3MiwgMTQsIDIxLCA2LCAyMzcsIDEyNiwgMTQsIDIxLCAKKyAgICA2LCAyMzcsIDE3LCAxNCwgMjEsIDYsIDE1MywgMTQsIDIxLCA2LCAxODksIDE0LCAyMSwgNiwgMjA3LCAxNCwgMjEsIDYsIAorICAgIDc0LCAxNCwgMjEsIDYsIDIzMCwgNTksIDE0LCAyMSwgNiwgMjI4LCAxNjMsIDE0LCAyMSwgNiwgMTUyLCAxNCwgMjEsIDYsIAorICAgIDE5OCwgMTQsIDIxLCA2LCAyMjIsIDIwMSwgMTQsIDIxLCA2LCA2OCwgMTQsIDIxLCA2LCAyMTYsIDIxNiwgMTQsIDIxLCA2LCAKKyAgICAyMTksIDQwLCAxNCwgMjEsIDYsIDIxOCwgMTUxLCAxNCwgMjEsIDYsIDIxOCwgOTAsIDE0LCAyMSwgNiwgMjE3LCAxNTcsIAorICAgIDE0LCAyMSwgMywgNjAsIDE0LCAyMSwgMywgMjUzLCAyMDQsIDE0LCAyMSwgMywgMjUxLCAyMDIsIDE0LCAyMSwgMywgMjUwLCAKKyAgICA0NiwgMTQsIDIxLCAzLCA3MywgMTQsIDIxLCAzLCAyNDYsIDc0LCAxNCwgMjEsIDMsIDI0NSwgNjcsIDE0LCAyMSwgMywgCisgICAgMjQzLCAyMjUsIDE0LCAyMSwgMywgNzIsIDE0LCAyMSwgMywgMjM3LCAxMjYsIDE0LCAyMSwgMywgMjM3LCAxNywgMTQsIDIxLCAKKyAgICAzLCAxNTMsIDE0LCAyMSwgMywgMTg5LCAxNCwgMjEsIDMsIDIwNywgMTQsIDIxLCAzLCA3NCwgMTQsIDIxLCAzLCAyMzAsIAorICAgIDU5LCAxNCwgMjEsIDMsIDIyOCwgMTYzLCAxNCwgMjEsIDMsIDE1MiwgMTQsIDIxLCAzLCAxOTgsIDE0LCAyMSwgMywgMjIyLCAKKyAgICAyMDEsIDE0LCAyMSwgMywgNjgsIDE0LCAyMSwgMywgMjE2LCAyMTYsIDE0LCAyMSwgMywgMjE5LCA0MCwgMTQsIDIxLCAzLCAKKyAgICAyMTgsIDE1MSwgMTQsIDIxLCAzLCAyMTgsIDkwLCAxNCwgMjEsIDMsIDIxNywgMTU3LCAxNCwgMzAsIDYsIDYwLCAxNCwgMzAsIAorICAgIDYsIDI1MywgMjA0LCAxNCwgMzAsIDYsIDI1MSwgMjAyLCAxNCwgMzAsIDYsIDI1MCwgNDYsIDE0LCAzMCwgNiwgNzMsIDE0LCAKKyAgICAzMCwgNiwgMjQ2LCA3NCwgMTQsIDMwLCA2LCAyNDUsIDY3LCAxNCwgMzAsIDYsIDI0MywgMjI1LCAxNCwgMzAsIDYsIDcyLCAKKyAgICAxNCwgMzAsIDYsIDIzNywgMTI2LCAxNCwgMzAsIDYsIDIzNywgMTcsIDE0LCAzMCwgNiwgMTUzLCAxNCwgMzAsIDYsIDE4OSwgCisgICAgMTQsIDMwLCA2LCAyMDcsIDE0LCAzMCwgNiwgNzQsIDE0LCAzMCwgNiwgMjMwLCA1OSwgMTQsIDMwLCA2LCAyMjgsIDE2MywgCisgICAgMTQsIDMwLCA2LCAxNTIsIDE0LCAzMCwgNiwgMTk4LCAxNCwgMzAsIDYsIDIyMiwgMjAxLCAxNCwgMzAsIDYsIDY4LCAxNCwgCisgICAgMzAsIDYsIDIxNiwgMjE2LCAxNCwgMzAsIDYsIDIxOSwgNDAsIDE0LCAzMCwgNiwgMjE4LCAxNTEsIDE0LCAzMCwgNiwgMjE4LCAKKyAgICA5MCwgMTQsIDMwLCA2LCAyMTcsIDE1NywgMTQsIDMwLCAzLCA2MCwgMTQsIDMwLCAzLCAyNTMsIDIwNCwgMTQsIDMwLCAzLCAKKyAgICAyNTEsIDIwMiwgMTQsIDMwLCAzLCAyNTAsIDQ2LCAxNCwgMzAsIDMsIDczLCAxNCwgMzAsIDMsIDI0NiwgNzQsIDE0LCAzMCwgCisgICAgMywgMjQ1LCA2NywgMTQsIDMwLCAzLCA3MiwgMTQsIDMwLCAzLCAyMzcsIDEyNiwgMTQsIDMwLCAzLCAyMzcsIDE3LCAxNCwgCisgICAgMzAsIDMsIDE1MywgMTQsIDMwLCAzLCAxODksIDE0LCAzMCwgMywgMjA3LCAxNCwgMzAsIDMsIDc0LCAxNCwgMzAsIDMsIAorICAgIDIzMCwgNTksIDE0LCAzMCwgMywgMjI4LCAxNjMsIDE0LCAzMCwgMywgMTUyLCAxNCwgMzAsIDMsIDE5OCwgMTQsIDMwLCAzLCAKKyAgICAyMjIsIDIwMSwgMTQsIDMwLCAzLCA2OCwgMTQsIDMwLCAzLCAyMTYsIDIxNiwgMTQsIDMwLCAzLCAyMTksIDQwLCAxNCwgMzAsIAorICAgIDMsIDIxOCwgMTUxLCAxNCwgMzAsIDMsIDIxOCwgOTAsIDE0LCAzMCwgMywgMjE3LCAxNTcsIDE0LCAyMSwgMzAsIDYsIDYwLCAKKyAgICAxNCwgMjEsIDMwLCA2LCAyNTMsIDIwNCwgMTQsIDIxLCAzMCwgNiwgMjUxLCAyMDIsIDE0LCAyMSwgMzAsIDYsIDI1MCwgNDYsIAorICAgIDE0LCAyMSwgMzAsIDYsIDczLCAxNCwgMjEsIDMwLCA2LCAyNDYsIDc0LCAxNCwgMjEsIDMwLCA2LCAyNDUsIDY3LCAxNCwgCisgICAgMjEsIDMwLCA2LCAyNDMsIDIyNSwgMTQsIDIxLCAzMCwgNiwgNzIsIDE0LCAyMSwgMzAsIDYsIDIzNywgMTI2LCAxNCwgMjEsIAorICAgIDMwLCA2LCAyMzcsIDE3LCAxNCwgMjEsIDMwLCA2LCAxNTMsIDE0LCAyMSwgMzAsIDYsIDE4OSwgMTQsIDIxLCAzMCwgNiwgCisgICAgMjA3LCAxNCwgMjEsIDMwLCA2LCA3NCwgMTQsIDIxLCAzMCwgNiwgMjMwLCA1OSwgMTQsIDIxLCAzMCwgNiwgMjI4LCAxNjMsIAorICAgIDE0LCAyMSwgMzAsIDYsIDE1MiwgMTQsIDIxLCAzMCwgNiwgMTk4LCAxNCwgMjEsIDMwLCA2LCAyMjIsIDIwMSwgMTQsIDIxLCAKKyAgICAzMCwgNiwgNjgsIDE0LCAyMSwgMzAsIDYsIDIxNiwgMjE2LCAxNCwgMjEsIDMwLCA2LCAyMTksIDQwLCAxNCwgMjEsIDMwLCAKKyAgICA2LCAyMTgsIDE1MSwgMTQsIDIxLCAzMCwgNiwgMjE4LCA5MCwgMTQsIDIxLCAzMCwgNiwgMjE3LCAxNTcsIDE0LCAyMSwgMzAsIAorICAgIDMsIDYwLCAxNCwgMjEsIDMwLCAzLCAyNTMsIDIwNCwgMTQsIDIxLCAzMCwgMywgMjUxLCAyMDIsIDE0LCAyMSwgMzAsIDMsIAorICAgIDI1MCwgNDYsIDE0LCAyMSwgMzAsIDMsIDczLCAxNCwgMjEsIDMwLCAzLCAyNDYsIDc0LCAxNCwgMjEsIDMwLCAzLCAyNDUsIAorICAgIDY3LCAxNCwgMjEsIDMwLCAzLCAyNDMsIDIyNSwgMTQsIDIxLCAzMCwgMywgNzIsIDE0LCAyMSwgMzAsIDMsIDIzNywgMTI2LCAKKyAgICAxNCwgMjEsIDMwLCAzLCAyMzcsIDE3LCAxNCwgMjEsIDMwLCAzLCAxNTMsIDE0LCAyMSwgMzAsIDMsIDE4OSwgMTQsIDIxLCAKKyAgICAzMCwgMywgMjA3LCAxNCwgMjEsIDMwLCAzLCA3NCwgMTQsIDIxLCAzMCwgMywgMjMwLCA1OSwgMTQsIDIxLCAzMCwgMywgCisgICAgMjI4LCAxNjMsIDE0LCAyMSwgMzAsIDMsIDE1MiwgMTQsIDIxLCAzMCwgMywgMTk4LCAxNCwgMjEsIDMwLCAzLCAyMjIsIAorICAgIDIwMSwgMTQsIDIxLCAzMCwgMywgNjgsIDE0LCAyMSwgMzAsIDMsIDIxNiwgMjE2LCAxNCwgMjEsIDMwLCAzLCAyMTksIDQwLCAKKyAgICAxNCwgMjEsIDMwLCAzLCAyMTgsIDE1MSwgMTQsIDIxLCAzMCwgMywgMjE4LCA5MCwgMTQsIDIxLCAzMCwgMywgMjE3LCAxNTcsIAorICAgIDE0LCAxMDIsIDYsIDYwLCAxNCwgMTAyLCA2LCAyNTEsIDIwMiwgMTQsIDEwMiwgNiwgMjUwLCA0NiwgMTQsIDEwMiwgNiwgCisgICAgMjQ1LCA2NywgMTQsIDEwMiwgNiwgMjM3LCAxMjYsIDE0LCAxMDIsIDYsIDIzNywgMTcsIDE0LCAxMDIsIDYsIDIwNywgMTQsIAorICAgIDEwMiwgNiwgNzQsIDE0LCAxMDIsIDYsIDIzMCwgNTksIDE0LCAxMDIsIDYsIDIyOCwgMTYzLCAxNCwgMTAyLCA2LCAxOTgsIAorICAgIDE0LCAxMDIsIDYsIDIyMiwgMjAxLCAxNCwgMTAyLCA2LCA2OCwgMTQsIDEwMiwgNiwgMjE2LCAyMTYsIDE0LCAxMDIsIDYsIAorICAgIDIxOSwgNDAsIDE0LCAxMDIsIDYsIDIxOCwgMTUxLCAxNCwgMTAyLCA2LCAyMTgsIDkwLCAxNCwgMTAyLCA2LCAyMTcsIDE1NywgCisgICAgMTQsIDEwMiwgMywgNjAsIDE0LCAxMDIsIDMsIDI1MywgMjA0LCAxNCwgMTAyLCAzLCAyNTEsIDIwMiwgMTQsIDEwMiwgMywgCisgICAgMjUwLCA0NiwgMTQsIDEwMiwgMywgMjQ2LCA3NCwgMTQsIDEwMiwgMywgMjQzLCAyMjUsIDE0LCAxMDIsIDMsIDcyLCAxNCwgCisgICAgMTAyLCAzLCAyMzcsIDEyNiwgMTQsIDEwMiwgMywgMjM3LCAxNywgMTQsIDEwMiwgMywgMTUzLCAxNCwgMTAyLCAzLCAxODksIAorICAgIDE0LCAxMDIsIDMsIDIwNywgMTQsIDEwMiwgMywgMjMwLCA1OSwgMTQsIDEwMiwgMywgMjI4LCAxNjMsIDE0LCAxMDIsIDMsIAorICAgIDE1MiwgMTQsIDEwMiwgMywgMTk4LCAxNCwgMTAyLCAzLCAyMjIsIDIwMSwgMTQsIDEwMiwgMywgNjgsIDE0LCAxMDIsIDMsIAorICAgIDIxNiwgMjE2LCAxNCwgMTAyLCAzLCAyMTksIDQwLCAxNCwgMTAyLCAzLCAyMTgsIDE1MSwgMTQsIDEwMiwgMywgMjE4LCA5MCwgCisgICAgMTQsIDEwMiwgMywgMjE3LCAxNTcsIDE0LCAyMSwgMTAyLCA2LCA2MCwgMTQsIDIxLCAxMDIsIDYsIDI1MywgMjA0LCAxNCwgCisgICAgMjEsIDEwMiwgNiwgMjUxLCAyMDIsIDE0LCAyMSwgMTAyLCA2LCAyNTAsIDQ2LCAxNCwgMjEsIDEwMiwgNiwgNzMsIDE0LCAKKyAgICAyMSwgMTAyLCA2LCAyNDYsIDc0LCAxNCwgMjEsIDEwMiwgNiwgMjQ1LCA2NywgMTQsIDIxLCAxMDIsIDYsIDI0MywgMjI1LCAKKyAgICAxNCwgMjEsIDEwMiwgNiwgNzIsIDE0LCAyMSwgMTAyLCA2LCAyMzcsIDEyNiwgMTQsIDIxLCAxMDIsIDYsIDIzNywgMTcsIAorICAgIDE0LCAyMSwgMTAyLCA2LCAxNTMsIDE0LCAyMSwgMTAyLCA2LCAxODksIDE0LCAyMSwgMTAyLCA2LCAyMDcsIDE0LCAyMSwgCisgICAgMTAyLCA2LCA3NCwgMTQsIDIxLCAxMDIsIDYsIDIzMCwgNTksIDE0LCAyMSwgMTAyLCA2LCAyMjgsIDE2MywgMTQsIDIxLCAKKyAgICAxMDIsIDYsIDE1MiwgMTQsIDIxLCAxMDIsIDYsIDE5OCwgMTQsIDIxLCAxMDIsIDYsIDIyMiwgMjAxLCAxNCwgMjEsIDEwMiwgCisgICAgNiwgNjgsIDE0LCAyMSwgMTAyLCA2LCAyMTYsIDIxNiwgMTQsIDIxLCAxMDIsIDYsIDIxOSwgNDAsIDE0LCAyMSwgMTAyLCA2LCAKKyAgICAyMTgsIDE1MSwgMTQsIDIxLCAxMDIsIDYsIDIxOCwgOTAsIDE0LCAyMSwgMTAyLCA2LCAyMTcsIDE1NywgMTQsIDIxLCAxMDIsIAorICAgIDMsIDYwLCAxNCwgMjEsIDEwMiwgMywgMjUzLCAyMDQsIDE0LCAyMSwgMTAyLCAzLCAyNTEsIDIwMiwgMTQsIDIxLCAxMDIsIAorICAgIDMsIDI1MCwgNDYsIDE0LCAyMSwgMTAyLCAzLCA3MywgMTQsIDIxLCAxMDIsIDMsIDI0NiwgNzQsIDE0LCAyMSwgMTAyLCAzLCAKKyAgICAyNDUsIDY3LCAxNCwgMjEsIDEwMiwgMywgMjQzLCAyMjUsIDE0LCAyMSwgMTAyLCAzLCA3MiwgMTQsIDIxLCAxMDIsIDMsIAorICAgIDIzNywgMTI2LCAxNCwgMjEsIDEwMiwgMywgMjM3LCAxNywgMTQsIDIxLCAxMDIsIDMsIDE1MywgMTQsIDIxLCAxMDIsIDMsIAorICAgIDE4OSwgMTQsIDIxLCAxMDIsIDMsIDIwNywgMTQsIDIxLCAxMDIsIDMsIDc0LCAxNCwgMjEsIDEwMiwgMywgMjMwLCA1OSwgCisgICAgMTQsIDIxLCAxMDIsIDMsIDIyOCwgMTYzLCAxNCwgMjEsIDEwMiwgMywgMTUyLCAxNCwgMjEsIDEwMiwgMywgMTk4LCAxNCwgCisgICAgMjEsIDEwMiwgMywgMjIyLCAyMDEsIDE0LCAyMSwgMTAyLCAzLCA2OCwgMTQsIDIxLCAxMDIsIDMsIDIxNiwgMjE2LCAxNCwgCisgICAgMjEsIDEwMiwgMywgMjE5LCA0MCwgMTQsIDIxLCAxMDIsIDMsIDIxOCwgMTUxLCAxNCwgMjEsIDEwMiwgMywgMjE4LCA5MCwgCisgICAgMTQsIDIxLCAxMDIsIDMsIDIxNywgMTU3LCAxNCwgMTIxLCA2LCA2MCwgMTQsIDEyMSwgNiwgMjUzLCAyMDQsIDE0LCAxMjEsIAorICAgIDYsIDI1MCwgNDYsIDE0LCAxMjEsIDYsIDczLCAxNCwgMTIxLCA2LCAyNDYsIDc0LCAxNCwgMTIxLCA2LCAyNDUsIDY3LCAxNCwgCisgICAgMTIxLCA2LCAyMzcsIDEyNiwgMTQsIDEyMSwgNiwgMjM3LCAxNywgMTQsIDEyMSwgNiwgMTUzLCAxNCwgMTIxLCA2LCAxODksIAorICAgIDE0LCAxMjEsIDYsIDIwNywgMTQsIDEyMSwgNiwgNzQsIDE0LCAxMjEsIDYsIDIzMCwgNTksIDE0LCAxMjEsIDYsIDIyOCwgCisgICAgMTYzLCAxNCwgMTIxLCA2LCAxOTgsIDE0LCAxMjEsIDYsIDIyMiwgMjAxLCAxNCwgMTIxLCA2LCA2OCwgMTQsIDEyMSwgNiwgCisgICAgMjE2LCAyMTYsIDE0LCAxMjEsIDYsIDIxOSwgNDAsIDE0LCAxMjEsIDYsIDIxOCwgMTUxLCAxNCwgMTIxLCA2LCAyMTgsIDkwLCAKKyAgICAxNCwgMTIxLCAzLCA2MCwgMTQsIDEyMSwgMywgMjUzLCAyMDQsIDE0LCAxMjEsIDMsIDI1MSwgMjAyLCAxNCwgMTIxLCAzLCAKKyAgICAyNTAsIDQ2LCAxNCwgMTIxLCAzLCA3MywgMTQsIDEyMSwgMywgMjQ2LCA3NCwgMTQsIDEyMSwgMywgMjQ1LCA2NywgMTQsIAorICAgIDEyMSwgMywgMjQzLCAyMjUsIDE0LCAxMjEsIDMsIDcyLCAxNCwgMTIxLCAzLCAyMzcsIDEyNiwgMTQsIDEyMSwgMywgMjM3LCAKKyAgICAxNywgMTQsIDEyMSwgMywgMTUzLCAxNCwgMTIxLCAzLCAxODksIDE0LCAxMjEsIDMsIDIwNywgMTQsIDEyMSwgMywgNzQsIAorICAgIDE0LCAxMjEsIDMsIDIzMCwgNTksIDE0LCAxMjEsIDMsIDIyOCwgMTYzLCAxNCwgMTIxLCAzLCAxNTIsIDE0LCAxMjEsIDMsIAorICAgIDE5OCwgMTQsIDEyMSwgMywgMjIyLCAyMDEsIDE0LCAxMjEsIDMsIDY4LCAxNCwgMTIxLCAzLCAyMTYsIDIxNiwgMTQsIDEyMSwgCisgICAgMywgMjE5LCA0MCwgMTQsIDEyMSwgMywgMjE4LCAxNTEsIDE0LCAxMjEsIDMsIDIxOCwgOTAsIDE0LCAxMjEsIDMsIDIxNywgCisgICAgMTU3LCAxNCwgMTczLCA2LCA2MCwgMTQsIDE3MywgNiwgMjUzLCAyMDQsIDE0LCAxNzMsIDYsIDI1MCwgNDYsIDE0LCAxNzMsIAorICAgIDYsIDczLCAxNCwgMTczLCA2LCAyNDYsIDc0LCAxNCwgMTczLCA2LCAyNDUsIDY3LCAxNCwgMTczLCA2LCA3MiwgMTQsIDE3MywgCisgICAgNiwgMjM3LCAxMjYsIDE0LCAxNzMsIDYsIDIzNywgMTcsIDE0LCAxNzMsIDYsIDE1MywgMTQsIDE3MywgNiwgMTg5LCAxNCwgCisgICAgMTczLCA2LCA3NCwgMTQsIDE3MywgNiwgMTk4LCAxNCwgMTczLCA2LCAyMjIsIDIwMSwgMTQsIDE3MywgNiwgNjgsIDE0LCAKKyAgICAxNzMsIDYsIDIxNiwgMjE2LCAxNCwgMTczLCA2LCAyMTksIDQwLCAxNCwgMTczLCA2LCAyMTgsIDE1MSwgMTQsIDE3MywgNiwgCisgICAgMjE4LCA5MCwgMTQsIDE3MywgMywgNjAsIDE0LCAxNzMsIDMsIDI1MywgMjA0LCAxNCwgMTczLCAzLCAyNTEsIDIwMiwgMTQsIAorICAgIDE3MywgMywgMjUwLCA0NiwgMTQsIDE3MywgMywgNzMsIDE0LCAxNzMsIDMsIDI0NiwgNzQsIDE0LCAxNzMsIDMsIDI0NSwgCisgICAgNjcsIDE0LCAxNzMsIDMsIDI0MywgMjI1LCAxNCwgMTczLCAzLCA3MiwgMTQsIDE3MywgMywgMjM3LCAxMjYsIDE0LCAxNzMsIAorICAgIDMsIDIzNywgMTcsIDE0LCAxNzMsIDMsIDE1MywgMTQsIDE3MywgMywgMTg5LCAxNCwgMTczLCAzLCAyMDcsIDE0LCAxNzMsIAorICAgIDMsIDc0LCAxNCwgMTczLCAzLCAyMzAsIDU5LCAxNCwgMTczLCAzLCAyMjgsIDE2MywgMTQsIDE3MywgMywgMTUyLCAxNCwgCisgICAgMTczLCAzLCAxOTgsIDE0LCAxNzMsIDMsIDIyMiwgMjAxLCAxNCwgMTczLCAzLCA2OCwgMTQsIDE3MywgMywgMjE2LCAyMTYsIAorICAgIDE0LCAxNzMsIDMsIDIxOSwgNDAsIDE0LCAxNzMsIDMsIDIxOCwgMTUxLCAxNCwgMTczLCAzLCAyMTgsIDkwLCAxNCwgMTczLCAKKyAgICAzLCAyMTcsIDE1NywgMTQsIDIxLCAxMjEsIDYsIDYwLCAxNCwgMjEsIDEyMSwgNiwgMjUzLCAyMDQsIDE0LCAyMSwgMTIxLCAKKyAgICA2LCAyNTEsIDIwMiwgMTQsIDIxLCAxMjEsIDYsIDI1MCwgNDYsIDE0LCAyMSwgMTIxLCA2LCA3MywgMTQsIDIxLCAxMjEsIDYsIAorICAgIDI0NiwgNzQsIDE0LCAyMSwgMTIxLCA2LCAyNDUsIDY3LCAxNCwgMjEsIDEyMSwgNiwgMjQzLCAyMjUsIDE0LCAyMSwgMTIxLCAKKyAgICA2LCA3MiwgMTQsIDIxLCAxMjEsIDYsIDIzNywgMTI2LCAxNCwgMjEsIDEyMSwgNiwgMjM3LCAxNywgMTQsIDIxLCAxMjEsIDYsIAorICAgIDE1MywgMTQsIDIxLCAxMjEsIDYsIDE4OSwgMTQsIDIxLCAxMjEsIDYsIDIwNywgMTQsIDIxLCAxMjEsIDYsIDc0LCAxNCwgCisgICAgMjEsIDEyMSwgNiwgMjMwLCA1OSwgMTQsIDIxLCAxMjEsIDYsIDIyOCwgMTYzLCAxNCwgMjEsIDEyMSwgNiwgMTUyLCAxNCwgCisgICAgMjEsIDEyMSwgNiwgMTk4LCAxNCwgMjEsIDEyMSwgNiwgMjIyLCAyMDEsIDE0LCAyMSwgMTIxLCA2LCA2OCwgMTQsIDIxLCAKKyAgICAxMjEsIDYsIDIxNiwgMjE2LCAxNCwgMjEsIDEyMSwgNiwgMjE5LCA0MCwgMTQsIDIxLCAxMjEsIDYsIDIxOCwgMTUxLCAxNCwgCisgICAgMjEsIDEyMSwgNiwgMjE4LCA5MCwgMTQsIDIxLCAxMjEsIDYsIDIxNywgMTU3LCAxNCwgMjEsIDEyMSwgMywgNjAsIDE0LCAKKyAgICAyMSwgMTIxLCAzLCAyNTMsIDIwNCwgMTQsIDIxLCAxMjEsIDMsIDI1MSwgMjAyLCAxNCwgMjEsIDEyMSwgMywgMjUwLCA0NiwgCisgICAgMTQsIDIxLCAxMjEsIDMsIDczLCAxNCwgMjEsIDEyMSwgMywgMjQ2LCA3NCwgMTQsIDIxLCAxMjEsIDMsIDI0NSwgNjcsIDE0LCAKKyAgICAyMSwgMTIxLCAzLCAyNDMsIDIyNSwgMTQsIDIxLCAxMjEsIDMsIDcyLCAxNCwgMjEsIDEyMSwgMywgMjM3LCAxMjYsIDE0LCAKKyAgICAyMSwgMTIxLCAzLCAyMzcsIDE3LCAxNCwgMjEsIDEyMSwgMywgMTUzLCAxNCwgMjEsIDEyMSwgMywgMTg5LCAxNCwgMjEsIAorICAgIDEyMSwgMywgMjA3LCAxNCwgMjEsIDEyMSwgMywgNzQsIDE0LCAyMSwgMTIxLCAzLCAyMzAsIDU5LCAxNCwgMjEsIDEyMSwgMywgCisgICAgMjI4LCAxNjMsIDE0LCAyMSwgMTIxLCAzLCAxNTIsIDE0LCAyMSwgMTIxLCAzLCAxOTgsIDE0LCAyMSwgMTIxLCAzLCAyMjIsIAorICAgIDIwMSwgMTQsIDIxLCAxMjEsIDMsIDY4LCAxNCwgMjEsIDEyMSwgMywgMjE2LCAyMTYsIDE0LCAyMSwgMTIxLCAzLCAyMTksIAorICAgIDQwLCAxNCwgMjEsIDEyMSwgMywgMjE4LCAxNTEsIDE0LCAyMSwgMTIxLCAzLCAyMTgsIDkwLCAxNCwgMjEsIDEyMSwgMywgCisgICAgMjE3LCAxNTcsIDE0LCAzMywgNiwgNjAsIDE0LCAzMywgNiwgMjUzLCAyMDQsIDE0LCAzMywgNiwgMjUxLCAyMDIsIDE0LCAKKyAgICAzMywgNiwgMjUwLCA0NiwgMTQsIDMzLCA2LCA3MywgMTQsIDMzLCA2LCAyNDYsIDc0LCAxNCwgMzMsIDYsIDI0NSwgNjcsIAorICAgIDE0LCAzMywgNiwgMjQzLCAyMjUsIDE0LCAzMywgNiwgNzIsIDE0LCAzMywgNiwgMjM3LCAxMjYsIDE0LCAzMywgNiwgMjM3LCAKKyAgICAxNywgMTQsIDMzLCA2LCAxNTMsIDE0LCAzMywgNiwgMTg5LCAxNCwgMzMsIDYsIDIwNywgMTQsIDMzLCA2LCA3NCwgMTQsIAorICAgIDMzLCA2LCAyMzAsIDU5LCAxNCwgMzMsIDYsIDIyOCwgMTYzLCAxNCwgMzMsIDYsIDE1MiwgMTQsIDMzLCA2LCAxOTgsIDE0LCAKKyAgICAzMywgNiwgMjIyLCAyMDEsIDE0LCAzMywgNiwgNjgsIDE0LCAzMywgNiwgMjE2LCAyMTYsIDE0LCAzMywgNiwgMjE5LCA0MCwgCisgICAgMTQsIDMzLCA2LCAyMTgsIDE1MSwgMTQsIDMzLCA2LCAyMTgsIDkwLCAxNCwgMzMsIDYsIDIxNywgMTU3LCAxNCwgMzMsIDMsIAorICAgIDYwLCAxNCwgMzMsIDMsIDI1MywgMjA0LCAxNCwgMzMsIDMsIDI1MSwgMjAyLCAxNCwgMzMsIDMsIDI1MCwgNDYsIDE0LCAzMywgCisgICAgMywgNzMsIDE0LCAzMywgMywgMjQ2LCA3NCwgMTQsIDMzLCAzLCAyNDUsIDY3LCAxNCwgMzMsIDMsIDI0MywgMjI1LCAxNCwgCisgICAgMzMsIDMsIDcyLCAxNCwgMzMsIDMsIDIzNywgMTI2LCAxNCwgMzMsIDMsIDIzNywgMTcsIDE0LCAzMywgMywgMTUzLCAxNCwgCisgICAgMzMsIDMsIDE4OSwgMTQsIDMzLCAzLCAyMDcsIDE0LCAzMywgMywgNzQsIDE0LCAzMywgMywgMjMwLCA1OSwgMTQsIDMzLCAzLCAKKyAgICAyMjgsIDE2MywgMTQsIDMzLCAzLCAxNTIsIDE0LCAzMywgMywgMTk4LCAxNCwgMzMsIDMsIDIyMiwgMjAxLCAxNCwgMzMsIDMsIAorICAgIDY4LCAxNCwgMzMsIDMsIDIxNiwgMjE2LCAxNCwgMzMsIDMsIDIxOSwgNDAsIDE0LCAzMywgMywgMjE4LCAxNTEsIDE0LCAzMywgCisgICAgMywgMjE4LCA5MCwgMTQsIDMzLCAzLCAyMTcsIDE1NywgMTQsIDMzLCAyMSwgNiwgNjAsIDE0LCAzMywgMjEsIDYsIDI1MywgCisgICAgMjA0LCAxNCwgMzMsIDIxLCA2LCAyNTEsIDIwMiwgMTQsIDMzLCAyMSwgNiwgMjUwLCA0NiwgMTQsIDMzLCAyMSwgNiwgNzMsIAorICAgIDE0LCAzMywgMjEsIDYsIDI0NiwgNzQsIDE0LCAzMywgMjEsIDYsIDI0NSwgNjcsIDE0LCAzMywgMjEsIDYsIDI0MywgMjI1LCAKKyAgICAxNCwgMzMsIDIxLCA2LCA3MiwgMTQsIDMzLCAyMSwgNiwgMjM3LCAxMjYsIDE0LCAzMywgMjEsIDYsIDIzNywgMTcsIDE0LCAKKyAgICAzMywgMjEsIDYsIDE1MywgMTQsIDMzLCAyMSwgNiwgMTg5LCAxNCwgMzMsIDIxLCA2LCAyMDcsIDE0LCAzMywgMjEsIDYsIAorICAgIDc0LCAxNCwgMzMsIDIxLCA2LCAyMzAsIDU5LCAxNCwgMzMsIDIxLCA2LCAyMjgsIDE2MywgMTQsIDMzLCAyMSwgNiwgMTUyLCAKKyAgICAxNCwgMzMsIDIxLCA2LCAxOTgsIDE0LCAzMywgMjEsIDYsIDIyMiwgMjAxLCAxNCwgMzMsIDIxLCA2LCA2OCwgMTQsIDMzLCAKKyAgICAyMSwgNiwgMjE2LCAyMTYsIDE0LCAzMywgMjEsIDYsIDIxOSwgNDAsIDE0LCAzMywgMjEsIDYsIDIxOCwgMTUxLCAxNCwgMzMsIAorICAgIDIxLCA2LCAyMTgsIDkwLCAxNCwgMzMsIDIxLCA2LCAyMTcsIDE1NywgMTQsIDMzLCAyMSwgMywgNjAsIDE0LCAzMywgMjEsIAorICAgIDMsIDI1MywgMjA0LCAxNCwgMzMsIDIxLCAzLCAyNTEsIDIwMiwgMTQsIDMzLCAyMSwgMywgMjUwLCA0NiwgMTQsIDMzLCAyMSwgCisgICAgMywgNzMsIDE0LCAzMywgMjEsIDMsIDI0NiwgNzQsIDE0LCAzMywgMjEsIDMsIDI0NSwgNjcsIDE0LCAzMywgMjEsIDMsIAorICAgIDI0MywgMjI1LCAxNCwgMzMsIDIxLCAzLCA3MiwgMTQsIDMzLCAyMSwgMywgMjM3LCAxMjYsIDE0LCAzMywgMjEsIDMsIDIzNywgCisgICAgMTcsIDE0LCAzMywgMjEsIDMsIDE1MywgMTQsIDMzLCAyMSwgMywgMTg5LCAxNCwgMzMsIDIxLCAzLCAyMDcsIDE0LCAzMywgCisgICAgMjEsIDMsIDc0LCAxNCwgMzMsIDIxLCAzLCAyMzAsIDU5LCAxNCwgMzMsIDIxLCAzLCAyMjgsIDE2MywgMTQsIDMzLCAyMSwgCisgICAgMywgMTUyLCAxNCwgMzMsIDIxLCAzLCAxOTgsIDE0LCAzMywgMjEsIDMsIDIyMiwgMjAxLCAxNCwgMzMsIDIxLCAzLCA2OCwgCisgICAgMTQsIDMzLCAyMSwgMywgMjE2LCAyMTYsIDE0LCAzMywgMjEsIDMsIDIxOSwgNDAsIDE0LCAzMywgMjEsIDMsIDIxOCwgMTUxLCAKKyAgICAxNCwgMzMsIDIxLCAzLCAyMTgsIDkwLCAxNCwgMzMsIDIxLCAzLCAyMTcsIDE1NywgMTQsIDMzLCAzMCwgNiwgNjAsIDE0LCAKKyAgICAzMywgMzAsIDYsIDI1MywgMjA0LCAxNCwgMzMsIDMwLCA2LCAyNTEsIDIwMiwgMTQsIDMzLCAzMCwgNiwgMjUwLCA0NiwgMTQsIAorICAgIDMzLCAzMCwgNiwgNzMsIDE0LCAzMywgMzAsIDYsIDI0NiwgNzQsIDE0LCAzMywgMzAsIDYsIDI0NSwgNjcsIDE0LCAzMywgCisgICAgMzAsIDYsIDI0MywgMjI1LCAxNCwgMzMsIDMwLCA2LCA3MiwgMTQsIDMzLCAzMCwgNiwgMjM3LCAxMjYsIDE0LCAzMywgMzAsIAorICAgIDYsIDIzNywgMTcsIDE0LCAzMywgMzAsIDYsIDE1MywgMTQsIDMzLCAzMCwgNiwgMTg5LCAxNCwgMzMsIDMwLCA2LCAyMDcsIAorICAgIDE0LCAzMywgMzAsIDYsIDc0LCAxNCwgMzMsIDMwLCA2LCAyMzAsIDU5LCAxNCwgMzMsIDMwLCA2LCAyMjgsIDE2MywgMTQsIAorICAgIDMzLCAzMCwgNiwgMTUyLCAxNCwgMzMsIDMwLCA2LCAxOTgsIDE0LCAzMywgMzAsIDYsIDIyMiwgMjAxLCAxNCwgMzMsIDMwLCAKKyAgICA2LCA2OCwgMTQsIDMzLCAzMCwgNiwgMjE2LCAyMTYsIDE0LCAzMywgMzAsIDYsIDIxOSwgNDAsIDE0LCAzMywgMzAsIDYsIAorICAgIDIxOCwgMTUxLCAxNCwgMzMsIDMwLCA2LCAyMTgsIDkwLCAxNCwgMzMsIDMwLCA2LCAyMTcsIDE1NywgMTQsIDMzLCAzMCwgMywgCisgICAgNjAsIDE0LCAzMywgMzAsIDMsIDI1MywgMjA0LCAxNCwgMzMsIDMwLCAzLCAyNTEsIDIwMiwgMTQsIDMzLCAzMCwgMywgMjUwLCAKKyAgICA0NiwgMTQsIDMzLCAzMCwgMywgNzMsIDE0LCAzMywgMzAsIDMsIDI0NiwgNzQsIDE0LCAzMywgMzAsIDMsIDI0NSwgNjcsIAorICAgIDE0LCAzMywgMzAsIDMsIDI0MywgMjI1LCAxNCwgMzMsIDMwLCAzLCA3MiwgMTQsIDMzLCAzMCwgMywgMjM3LCAxMjYsIDE0LCAKKyAgICAzMywgMzAsIDMsIDIzNywgMTcsIDE0LCAzMywgMzAsIDMsIDE1MywgMTQsIDMzLCAzMCwgMywgMTg5LCAxNCwgMzMsIDMwLCAKKyAgICAzLCAyMDcsIDE0LCAzMywgMzAsIDMsIDc0LCAxNCwgMzMsIDMwLCAzLCAyMzAsIDU5LCAxNCwgMzMsIDMwLCAzLCAyMjgsIAorICAgIDE2MywgMTQsIDMzLCAzMCwgMywgMTUyLCAxNCwgMzMsIDMwLCAzLCAxOTgsIDE0LCAzMywgMzAsIDMsIDIyMiwgMjAxLCAxNCwgCisgICAgMzMsIDMwLCAzLCA2OCwgMTQsIDMzLCAzMCwgMywgMjE2LCAyMTYsIDE0LCAzMywgMzAsIDMsIDIxOSwgNDAsIDE0LCAzMywgCisgICAgMzAsIDMsIDIxOCwgMTUxLCAxNCwgMzMsIDMwLCAzLCAyMTgsIDkwLCAxNCwgMzMsIDMwLCAzLCAyMTcsIDE1NywgMTQsIDMzLCAKKyAgICAyMSwgMzAsIDYsIDYwLCAxNCwgMzMsIDIxLCAzMCwgNiwgMjUzLCAyMDQsIDE0LCAzMywgMjEsIDMwLCA2LCAyNTEsIDIwMiwgCisgICAgMTQsIDMzLCAyMSwgMzAsIDYsIDI1MCwgNDYsIDE0LCAzMywgMjEsIDMwLCA2LCA3MywgMTQsIDMzLCAyMSwgMzAsIDYsIAorICAgIDI0NiwgNzQsIDE0LCAzMywgMjEsIDMwLCA2LCAyNDUsIDY3LCAxNCwgMzMsIDIxLCAzMCwgNiwgMjQzLCAyMjUsIDE0LCAzMywgCisgICAgMjEsIDMwLCA2LCA3MiwgMTQsIDMzLCAyMSwgMzAsIDYsIDIzNywgMTI2LCAxNCwgMzMsIDIxLCAzMCwgNiwgMjM3LCAxNywgCisgICAgMTQsIDMzLCAyMSwgMzAsIDYsIDE1MywgMTQsIDMzLCAyMSwgMzAsIDYsIDE4OSwgMTQsIDMzLCAyMSwgMzAsIDYsIDIwNywgCisgICAgMTQsIDMzLCAyMSwgMzAsIDYsIDc0LCAxNCwgMzMsIDIxLCAzMCwgNiwgMjMwLCA1OSwgMTQsIDMzLCAyMSwgMzAsIDYsIAorICAgIDIyOCwgMTYzLCAxNCwgMzMsIDIxLCAzMCwgNiwgMTUyLCAxNCwgMzMsIDIxLCAzMCwgNiwgMTk4LCAxNCwgMzMsIDIxLCAzMCwgCisgICAgNiwgMjIyLCAyMDEsIDE0LCAzMywgMjEsIDMwLCA2LCA2OCwgMTQsIDMzLCAyMSwgMzAsIDYsIDIxNiwgMjE2LCAxNCwgMzMsIAorICAgIDIxLCAzMCwgNiwgMjE5LCA0MCwgMTQsIDMzLCAyMSwgMzAsIDYsIDIxOCwgMTUxLCAxNCwgMzMsIDIxLCAzMCwgNiwgMjE4LCAKKyAgICA5MCwgMTQsIDMzLCAyMSwgMzAsIDYsIDIxNywgMTU3LCAxNCwgMzMsIDIxLCAzMCwgMywgNjAsIDE0LCAzMywgMjEsIDMwLCAKKyAgICAzLCAyNTMsIDIwNCwgMTQsIDMzLCAyMSwgMzAsIDMsIDI1MSwgMjAyLCAxNCwgMzMsIDIxLCAzMCwgMywgMjUwLCA0NiwgMTQsIAorICAgIDMzLCAyMSwgMzAsIDMsIDczLCAxNCwgMzMsIDIxLCAzMCwgMywgMjQ2LCA3NCwgMTQsIDMzLCAyMSwgMzAsIDMsIDI0NSwgCisgICAgNjcsIDE0LCAzMywgMjEsIDMwLCAzLCAyNDMsIDIyNSwgMTQsIDMzLCAyMSwgMzAsIDMsIDcyLCAxNCwgMzMsIDIxLCAzMCwgCisgICAgMywgMjM3LCAxMjYsIDE0LCAzMywgMjEsIDMwLCAzLCAyMzcsIDE3LCAxNCwgMzMsIDIxLCAzMCwgMywgMTUzLCAxNCwgMzMsIAorICAgIDIxLCAzMCwgMywgMTg5LCAxNCwgMzMsIDIxLCAzMCwgMywgMjA3LCAxNCwgMzMsIDIxLCAzMCwgMywgNzQsIDE0LCAzMywgCisgICAgMjEsIDMwLCAzLCAyMzAsIDU5LCAxNCwgMzMsIDIxLCAzMCwgMywgMjI4LCAxNjMsIDE0LCAzMywgMjEsIDMwLCAzLCAxNTIsIAorICAgIDE0LCAzMywgMjEsIDMwLCAzLCAxOTgsIDE0LCAzMywgMjEsIDMwLCAzLCAyMjIsIDIwMSwgMTQsIDMzLCAyMSwgMzAsIDMsIAorICAgIDY4LCAxNCwgMzMsIDIxLCAzMCwgMywgMjE2LCAyMTYsIDE0LCAzMywgMjEsIDMwLCAzLCAyMTksIDQwLCAxNCwgMzMsIDIxLCAKKyAgICAzMCwgMywgMjE4LCAxNTEsIDE0LCAzMywgMjEsIDMwLCAzLCAyMTgsIDkwLCAxNCwgMzMsIDIxLCAzMCwgMywgMjE3LCAxNTcsIAorICAgIDE0LCAyMTEsIDYsIDYwLCAxNCwgMjExLCA2LCAyNTMsIDIwNCwgMTQsIDIxMSwgNiwgMjUxLCAyMDIsIDE0LCAyMTEsIDYsIAorICAgIDI1MCwgNDYsIDE0LCAyMTEsIDYsIDczLCAxNCwgMjExLCA2LCAyNDYsIDc0LCAxNCwgMjExLCA2LCAyNDUsIDY3LCAxNCwgCisgICAgMjExLCA2LCAyNDMsIDIyNSwgMTQsIDIxMSwgNiwgNzIsIDE0LCAyMTEsIDYsIDIzNywgMTI2LCAxNCwgMjExLCA2LCAyMzcsIAorICAgIDE3LCAxNCwgMjExLCA2LCAxNTMsIDE0LCAyMTEsIDYsIDE4OSwgMTQsIDIxMSwgNiwgMjA3LCAxNCwgMjExLCA2LCA3NCwgCisgICAgMTQsIDIxMSwgNiwgMjMwLCA1OSwgMTQsIDIxMSwgNiwgMjI4LCAxNjMsIDE0LCAyMTEsIDYsIDE1MiwgMTQsIDIxMSwgNiwgCisgICAgMTk4LCAxNCwgMjExLCA2LCAyMjIsIDIwMSwgMTQsIDIxMSwgNiwgNjgsIDE0LCAyMTEsIDYsIDIxNiwgMjE2LCAxNCwgMjExLCAKKyAgICA2LCAyMTksIDQwLCAxNCwgMjExLCA2LCAyMTgsIDE1MSwgMTQsIDIxMSwgNiwgMjE4LCA5MCwgMTQsIDIxMSwgNiwgMjE3LCAKKyAgICAxNTcsIDE0LCAyMTEsIDMsIDYwLCAxNCwgMjExLCAzLCAyNTMsIDIwNCwgMTQsIDIxMSwgMywgMjUxLCAyMDIsIDE0LCAyMTEsIAorICAgIDMsIDI1MCwgNDYsIDE0LCAyMTEsIDMsIDczLCAxNCwgMjExLCAzLCAyNDYsIDc0LCAxNCwgMjExLCAzLCAyNDUsIDY3LCAxNCwgCisgICAgMjExLCAzLCAyNDMsIDIyNSwgMTQsIDIxMSwgMywgNzIsIDE0LCAyMTEsIDMsIDIzNywgMTI2LCAxNCwgMjExLCAzLCAyMzcsIAorICAgIDE3LCAxNCwgMjExLCAzLCAxNTMsIDE0LCAyMTEsIDMsIDE4OSwgMTQsIDIxMSwgMywgMjA3LCAxNCwgMjExLCAzLCA3NCwgCisgICAgMTQsIDIxMSwgMywgMjMwLCA1OSwgMTQsIDIxMSwgMywgMjI4LCAxNjMsIDE0LCAyMTEsIDMsIDE1MiwgMTQsIDIxMSwgMywgCisgICAgMTk4LCAxNCwgMjExLCAzLCAyMjIsIDIwMSwgMTQsIDIxMSwgMywgNjgsIDE0LCAyMTEsIDMsIDIxNiwgMjE2LCAxNCwgMjExLCAKKyAgICAzLCAyMTksIDQwLCAxNCwgMjExLCAzLCAyMTgsIDE1MSwgMTQsIDIxMSwgMywgMjE4LCA5MCwgMTQsIDIxMSwgMywgMjE3LCAKKyAgICAxNTcsIDE0LCAzMCwgMywgMjQ4LCAxNDQsIDcyLCAxNCwgMzAsIDMsIDI0OCwgMTQ0LCAyMzcsIDEyNiwgMTQsIDIxLCA2LCAKKyAgICAyNTQsIDE0NiwgMTQsIDIxLCA2LCAyNTIsIDEwMiwgMTQsIDIxLCA2LCAyNDQsIDIzMSwgMTQsIDIxLCA2LCAyNDksIDYyLCAKKyAgICAxNCwgMjEsIDYsIDI0NiwgMTU2LCAxNCwgMjEsIDYsIDIxNywgODMsIDE0LCAyMSwgNiwgMjQ2LCAxMjEsIDE0LCAyMSwgNiwgCisgICAgMjIyLCA2LCAxNCwgMjEsIDYsIDIzNywgMTYyLCAxNCwgMjEsIDYsIDIzNiwgMjIxLCAxNCwgMjEsIDYsIDIzNSwgMTU2LCAKKyAgICAxNCwgMjEsIDYsIDIzMywgOTksIDE0LCAyMSwgNiwgMjMxLCAxNDQsIDE0LCAyMSwgNiwgMjE4LCAxMzAsIDE0LCAyMSwgNiwgCisgICAgMjMwLCAxNDEsIDE0LCAyMSwgNiwgMjI5LCAxMDgsIDE0LCAyMSwgNiwgMjI3LCAxNDksIDE0LCAyMSwgNiwgMjIyLCA3LCAKKyAgICAxMDAsIDE0LCAyMSwgNiwgMjI0LCAxMjcsIDE0LCAyMSwgNiwgMjIyLCAxMDUsIDE0LCAyMSwgNiwgMjIwLCA1NywgMTQsIAorICAgIDIxLCA2LCAyMjksIDEyOSwgMTQsIDIxLCA2LCAyNTEsIDMxLCAxNCwgMjEsIDYsIDIyOCwgMjEyLCAxNCwgMjEsIDYsIDIzMCwgCisgICAgMTQzLCAxNCwgMjEsIDIzMiwgMjMxLCAxNCwgMjEsIDMsIDI1NCwgMTQ2LCAxNCwgMjEsIDMsIDI1MiwgMTAyLCAxNCwgMjEsIAorICAgIDMsIDI0NCwgMjMxLCAxNCwgMjEsIDMsIDI0OSwgNjIsIDE0LCAyMSwgMywgMjQ2LCAxNTYsIDE0LCAyMSwgMywgMjE3LCA4MywgCisgICAgMTQsIDIxLCAzLCAyNDYsIDEyMSwgMTQsIDIxLCAzLCAyMjIsIDYsIDE0LCAyMSwgMywgMjM3LCAxNjIsIDE0LCAyMSwgMywgCisgICAgMjM2LCAyMjEsIDE0LCAyMSwgMywgMjM1LCAxNTYsIDE0LCAyMSwgMywgMjMzLCA5OSwgMTQsIDIxLCAzLCAyMzEsIDE0NCwgCisgICAgMTQsIDIxLCAzLCAyMTgsIDEzMCwgMTQsIDIxLCAzLCAyMzAsIDE0MSwgMTQsIDIxLCAzLCAyMjksIDEwOCwgMTQsIDIxLCAzLCAKKyAgICAyMjcsIDE0OSwgMTQsIDIxLCAzLCAzOSwgMjI0LCAxMjcsIDE0LCAyMSwgMywgMjI0LCAxMjcsIDE0LCAyMSwgMywgMjIyLCAKKyAgICAxMDUsIDE0LCAyMSwgMywgMjIwLCA1NywgMTQsIDIxLCAzLCAyMjksIDEyOSwgMTQsIDIxLCAzLCAyNTEsIDMxLCAxNCwgMjEsIAorICAgIDMsIDIyOCwgMjEyLCAxNCwgMjEsIDMsIDIzMCwgMTQzLCAxNCwgMjEsIDIyOSwgMjIzLCAyNDgsIDI0NiwgMTQsIDIxLCAKKyAgICAyNDYsIDE1NywgMTAwLCAxNCwgMjEsIDIyMiwgNywgMTAwLCAxNCwgMjEsIDIzNiwgMjIyLCAxMDAsIDE0LCAyMSwgMjI5LCAKKyAgICAxMzAsIDEwMCwgMTQsIDIxLCAyMjcsIDE1MCwgMTAwLCAxNCwgMjEsIDIyOSwgMTA5LCAxMDAsIDE0LCAzMCwgNiwgMjU0LCAKKyAgICAxNDYsIDE0LCAzMCwgNiwgMjUyLCAxMDIsIDE0LCAzMCwgNiwgMjQ0LCAyMzEsIDE0LCAzMCwgNiwgMjQ5LCA2MiwgMTQsIAorICAgIDMwLCA2LCAyNDYsIDE1NiwgMTQsIDMwLCA2LCAyMTcsIDgzLCAxNCwgMzAsIDYsIDI0NiwgMTIxLCAxNCwgMzAsIDYsIDIyMiwgCisgICAgNiwgMTQsIDMwLCA2LCAyMzcsIDE2MiwgMTQsIDMwLCA2LCAyMzYsIDIyMSwgMTQsIDMwLCA2LCAyMzUsIDE1NiwgMTQsIDMwLCAKKyAgICA2LCAyMzMsIDk5LCAxNCwgMzAsIDYsIDIzMSwgMTQ0LCAxNCwgMzAsIDYsIDIxOCwgMTMwLCAxNCwgMzAsIDYsIDIzMCwgCisgICAgMTQxLCAxNCwgMzAsIDYsIDIyOSwgMTA4LCAxNCwgMzAsIDYsIDIyNywgMTQ5LCAxNCwgMzAsIDYsIDIyMiwgNywgMTAwLCAKKyAgICAxNCwgMzAsIDYsIDIyNCwgMTI3LCAxNCwgMzAsIDYsIDIyMiwgMTA1LCAxNCwgMzAsIDYsIDIyMCwgNTcsIDE0LCAzMCwgNiwgCisgICAgMjI5LCAxMjksIDE0LCAzMCwgNiwgMjUxLCAzMSwgMTQsIDMwLCA2LCAyMjgsIDIxMiwgMTQsIDMwLCA2LCAyMzAsIDE0MywgCisgICAgMTQsIDMwLCAyMzIsIDIzMSwgMTQsIDMwLCAzLCAyNTQsIDE0NiwgMTQsIDMwLCAzLCAyNTIsIDEwMiwgMTQsIDMwLCAzLCAKKyAgICAyNDQsIDIzMSwgMTQsIDMwLCAzLCAyNDksIDYyLCAxNCwgMzAsIDMsIDI0NiwgMTU2LCAxNCwgMzAsIDMsIDIxNywgODMsIAorICAgIDE0LCAzMCwgMywgMjQ2LCAxMjEsIDE0LCAzMCwgMywgMjIyLCA2LCAxNCwgMzAsIDMsIDIzNywgMTYyLCAxNCwgMzAsIDMsIAorICAgIDIzNiwgMjIxLCAxNCwgMzAsIDMsIDIzNSwgMTU2LCAxNCwgMzAsIDMsIDIzMywgOTksIDE0LCAzMCwgMywgMjMxLCAxNDQsIAorICAgIDE0LCAzMCwgMywgMjE4LCAxMzAsIDE0LCAzMCwgMywgMjMwLCAxNDEsIDE0LCAzMCwgMywgMjI5LCAxMDgsIDE0LCAzMCwgMywgCisgICAgMjI3LCAxNDksIDE0LCAzMCwgMywgMzksIDIyNCwgMTI3LCAxNCwgMzAsIDMsIDIyNCwgMTI3LCAxNCwgMzAsIDMsIDIyMiwgCisgICAgMTA1LCAxNCwgMzAsIDMsIDIyMCwgNTcsIDE0LCAzMCwgMywgMjI5LCAxMjksIDE0LCAzMCwgMywgMjUxLCAzMSwgMTQsIDMwLCAKKyAgICAzLCAyMjgsIDIxMiwgMTQsIDMwLCAzLCAyMzAsIDE0MywgMTQsIDMwLCAyMjksIDIyMywgMjQ4LCAyNDYsIDE0LCAzMCwgCisgICAgMjQ2LCAxNTcsIDEwMCwgMTQsIDMwLCAyMjIsIDcsIDEwMCwgMTQsIDMwLCAyMzYsIDIyMiwgMTAwLCAxNCwgMzAsIDIyOSwgCisgICAgMTMwLCAxMDAsIDE0LCAzMCwgMjI3LCAxNTAsIDEwMCwgMTQsIDMwLCAyMjksIDEwOSwgMTAwLCAxNCwgMjEsIDMwLCA2LCAKKyAgICAyNTQsIDE0NiwgMTQsIDIxLCAzMCwgNiwgMjUyLCAxMDIsIDE0LCAyMSwgMzAsIDYsIDI0NCwgMjMxLCAxNCwgMjEsIDMwLCAKKyAgICA2LCAyNDksIDYyLCAxNCwgMjEsIDMwLCA2LCAyNDYsIDE1NiwgMTQsIDIxLCAzMCwgNiwgMjE3LCA4MywgMTQsIDIxLCAzMCwgCisgICAgNiwgMjQ2LCAxMjEsIDE0LCAyMSwgMzAsIDYsIDIyMiwgNiwgMTQsIDIxLCAzMCwgNiwgMjM3LCAxNjIsIDE0LCAyMSwgMzAsIAorICAgIDYsIDIzNiwgMjIxLCAxNCwgMjEsIDMwLCA2LCAyMzUsIDE1NiwgMTQsIDIxLCAzMCwgNiwgMjMzLCA5OSwgMTQsIDIxLCAzMCwgCisgICAgNiwgMjMxLCAxNDQsIDE0LCAyMSwgMzAsIDYsIDIxOCwgMTMwLCAxNCwgMjEsIDMwLCA2LCAyMzAsIDE0MSwgMTQsIDIxLCAKKyAgICAzMCwgNiwgMjI5LCAxMDgsIDE0LCAyMSwgMzAsIDYsIDIyNywgMTQ5LCAxNCwgMjEsIDMwLCA2LCAyMjIsIDcsIDEwMCwgMTQsIAorICAgIDIxLCAzMCwgNiwgMjI0LCAxMjcsIDE0LCAyMSwgMzAsIDYsIDIyMiwgMTA1LCAxNCwgMjEsIDMwLCA2LCAyMjAsIDU3LCAxNCwgCisgICAgMjEsIDMwLCA2LCAyMjksIDEyOSwgMTQsIDIxLCAzMCwgNiwgMjUxLCAzMSwgMTQsIDIxLCAzMCwgNiwgMjI4LCAyMTIsIDE0LCAKKyAgICAyMSwgMzAsIDYsIDIzMCwgMTQzLCAxNCwgMjEsIDMwLCAyMzIsIDIzMSwgMTQsIDIxLCAzMCwgMywgMjU0LCAxNDYsIDE0LCAKKyAgICAyMSwgMzAsIDMsIDI1MiwgMTAyLCAxNCwgMjEsIDMwLCAzLCAyNDQsIDIzMSwgMTQsIDIxLCAzMCwgMywgMjQ5LCA2MiwgMTQsIAorICAgIDIxLCAzMCwgMywgMjQ2LCAxNTYsIDE0LCAyMSwgMzAsIDMsIDIxNywgODMsIDE0LCAyMSwgMzAsIDMsIDI0NiwgMTIxLCAxNCwgCisgICAgMjEsIDMwLCAzLCAyMjIsIDYsIDE0LCAyMSwgMzAsIDMsIDIzNywgMTYyLCAxNCwgMjEsIDMwLCAzLCAyMzYsIDIyMSwgMTQsIAorICAgIDIxLCAzMCwgMywgMjM1LCAxNTYsIDE0LCAyMSwgMzAsIDMsIDIzMywgOTksIDE0LCAyMSwgMzAsIDMsIDIzMSwgMTQ0LCAxNCwgCisgICAgMjEsIDMwLCAzLCAyMTgsIDEzMCwgMTQsIDIxLCAzMCwgMywgMjMwLCAxNDEsIDE0LCAyMSwgMzAsIDMsIDIyOSwgMTA4LCAKKyAgICAxNCwgMjEsIDMwLCAzLCAyMjcsIDE0OSwgMTQsIDIxLCAzMCwgMywgMzksIDIyNCwgMTI3LCAxNCwgMjEsIDMwLCAzLCAyMjQsIAorICAgIDEyNywgMTQsIDIxLCAzMCwgMywgMjIyLCAxMDUsIDE0LCAyMSwgMzAsIDMsIDIyMCwgNTcsIDE0LCAyMSwgMzAsIDMsIDIyOSwgCisgICAgMTI5LCAxNCwgMjEsIDMwLCAzLCAyNTEsIDMxLCAxNCwgMjEsIDMwLCAzLCAyMjgsIDIxMiwgMTQsIDIxLCAzMCwgMywgMjMwLCAKKyAgICAxNDMsIDE0LCAyMSwgMzAsIDIyOSwgMjIzLCAyNDgsIDI0NiwgMTQsIDIxLCAzMCwgMjQ2LCAxNTcsIDEwMCwgMTQsIDIxLCAKKyAgICAzMCwgMjIyLCA3LCAxMDAsIDE0LCAyMSwgMzAsIDIzNiwgMjIyLCAxMDAsIDE0LCAyMSwgMzAsIDIyOSwgMTMwLCAxMDAsIAorICAgIDE0LCAyMSwgMzAsIDIyNywgMTUwLCAxMDAsIDE0LCAyMSwgMzAsIDIyOSwgMTA5LCAxMDAsIDE0LCAzMywgMjEsIDYsIDI1NCwgCisgICAgMTQ2LCAxNCwgMzMsIDIxLCA2LCAyNTIsIDEwMiwgMTQsIDMzLCAyMSwgNiwgMjQ0LCAyMzEsIDE0LCAzMywgMjEsIDYsIAorICAgIDI0OSwgNjIsIDE0LCAzMywgMjEsIDYsIDI0NiwgMTU2LCAxNCwgMzMsIDIxLCA2LCAyMTcsIDgzLCAxNCwgMzMsIDIxLCA2LCAKKyAgICAyNDYsIDEyMSwgMTQsIDMzLCAyMSwgNiwgMjIyLCA2LCAxNCwgMzMsIDIxLCA2LCAyMzcsIDE2MiwgMTQsIDMzLCAyMSwgNiwgCisgICAgMjM2LCAyMjEsIDE0LCAzMywgMjEsIDYsIDIzNSwgMTU2LCAxNCwgMzMsIDIxLCA2LCAyMzMsIDk5LCAxNCwgMzMsIDIxLCA2LCAKKyAgICAyMzEsIDE0NCwgMTQsIDMzLCAyMSwgNiwgMjE4LCAxMzAsIDE0LCAzMywgMjEsIDYsIDIzMCwgMTQxLCAxNCwgMzMsIDIxLCAKKyAgICA2LCAyMjksIDEwOCwgMTQsIDMzLCAyMSwgNiwgMjI3LCAxNDksIDE0LCAzMywgMjEsIDYsIDIyMiwgNywgMTAwLCAxNCwgMzMsIAorICAgIDIxLCA2LCAyMjQsIDEyNywgMTQsIDMzLCAyMSwgNiwgMjIyLCAxMDUsIDE0LCAzMywgMjEsIDYsIDIyMCwgNTcsIDE0LCAzMywgCisgICAgMjEsIDYsIDIyOSwgMTI5LCAxNCwgMzMsIDIxLCA2LCAyNTEsIDMxLCAxNCwgMzMsIDIxLCA2LCAyMjgsIDIxMiwgMTQsIDMzLCAKKyAgICAyMSwgNiwgMjMwLCAxNDMsIDE0LCAzMywgMjEsIDIzMiwgMjMxLCAxNCwgMzMsIDIxLCAzLCAyNTQsIDE0NiwgMTQsIDMzLCAKKyAgICAyMSwgMywgMjUyLCAxMDIsIDE0LCAzMywgMjEsIDMsIDI0NCwgMjMxLCAxNCwgMzMsIDIxLCAzLCAyNDksIDYyLCAxNCwgMzMsIAorICAgIDIxLCAzLCAyNDYsIDE1NiwgMTQsIDMzLCAyMSwgMywgMjE3LCA4MywgMTQsIDMzLCAyMSwgMywgMjQ2LCAxMjEsIDE0LCAzMywgCisgICAgMjEsIDMsIDIyMiwgNiwgMTQsIDMzLCAyMSwgMywgMjM3LCAxNjIsIDE0LCAzMywgMjEsIDMsIDIzNiwgMjIxLCAxNCwgMzMsIAorICAgIDIxLCAzLCAyMzUsIDE1NiwgMTQsIDMzLCAyMSwgMywgMjMzLCA5OSwgMTQsIDMzLCAyMSwgMywgMjMxLCAxNDQsIDE0LCAzMywgCisgICAgMjEsIDMsIDIxOCwgMTMwLCAxNCwgMzMsIDIxLCAzLCAyMzAsIDE0MSwgMTQsIDMzLCAyMSwgMywgMjI5LCAxMDgsIDE0LCAKKyAgICAzMywgMjEsIDMsIDIyNywgMTQ5LCAxNCwgMzMsIDIxLCAzLCAzOSwgMjI0LCAxMjcsIDE0LCAzMywgMjEsIDMsIDIyNCwgCisgICAgMTI3LCAxNCwgMzMsIDIxLCAzLCAyMjIsIDEwNSwgMTQsIDMzLCAyMSwgMywgMjIwLCA1NywgMTQsIDMzLCAyMSwgMywgMjI5LCAKKyAgICAxMjksIDE0LCAzMywgMjEsIDMsIDI1MSwgMzEsIDE0LCAzMywgMjEsIDMsIDIyOCwgMjEyLCAxNCwgMzMsIDIxLCAzLCAyMzAsIAorICAgIDE0MywgMTQsIDMzLCAyMSwgMjI5LCAyMjMsIDI0OCwgMjQ2LCAxNCwgMzMsIDIxLCAyNDYsIDE1NywgMTAwLCAxNCwgMzMsIAorICAgIDIxLCAyMjIsIDcsIDEwMCwgMTQsIDMzLCAyMSwgMjM2LCAyMjIsIDEwMCwgMTQsIDMzLCAyMSwgMjI5LCAxMzAsIDEwMCwgCisgICAgMTQsIDMzLCAyMSwgMjI3LCAxNTAsIDEwMCwgMTQsIDMzLCAyMSwgMjI5LCAxMDksIDEwMCwgMTQsIDMzLCAyMSwgMzAsIDYsIAorICAgIDI1NCwgMTQ2LCAxNCwgMzMsIDIxLCAzMCwgNiwgMjUyLCAxMDIsIDE0LCAzMywgMjEsIDMwLCA2LCAyNDQsIDIzMSwgMTQsIAorICAgIDMzLCAyMSwgMzAsIDYsIDI0OSwgNjIsIDE0LCAzMywgMjEsIDMwLCA2LCAyNDYsIDE1NiwgMTQsIDMzLCAyMSwgMzAsIDYsIAorICAgIDIxNywgODMsIDE0LCAzMywgMjEsIDMwLCA2LCAyNDYsIDEyMSwgMTQsIDMzLCAyMSwgMzAsIDYsIDIyMiwgNiwgMTQsIDMzLCAKKyAgICAyMSwgMzAsIDYsIDIzNywgMTYyLCAxNCwgMzMsIDIxLCAzMCwgNiwgMjM2LCAyMjEsIDE0LCAzMywgMjEsIDMwLCA2LCAyMzUsIAorICAgIDE1NiwgMTQsIDMzLCAyMSwgMzAsIDYsIDIzMywgOTksIDE0LCAzMywgMjEsIDMwLCA2LCAyMzEsIDE0NCwgMTQsIDMzLCAyMSwgCisgICAgMzAsIDYsIDIxOCwgMTMwLCAxNCwgMzMsIDIxLCAzMCwgNiwgMjMwLCAxNDEsIDE0LCAzMywgMjEsIDMwLCA2LCAyMjksIAorICAgIDEwOCwgMTQsIDMzLCAyMSwgMzAsIDYsIDIyNywgMTQ5LCAxNCwgMzMsIDIxLCAzMCwgNiwgMjIyLCA3LCAxMDAsIDE0LCAzMywgCisgICAgMjEsIDMwLCA2LCAyMjQsIDEyNywgMTQsIDMzLCAyMSwgMzAsIDYsIDIyMiwgMTA1LCAxNCwgMzMsIDIxLCAzMCwgNiwgMjIwLCAKKyAgICA1NywgMTQsIDMzLCAyMSwgMzAsIDYsIDIyOSwgMTI5LCAxNCwgMzMsIDIxLCAzMCwgNiwgMjUxLCAzMSwgMTQsIDMzLCAyMSwgCisgICAgMzAsIDYsIDIyOCwgMjEyLCAxNCwgMzMsIDIxLCAzMCwgNiwgMjMwLCAxNDMsIDE0LCAzMywgMjEsIDMwLCAyMzIsIDIzMSwgCisgICAgMTQsIDMzLCAyMSwgMzAsIDMsIDI1NCwgMTQ2LCAxNCwgMzMsIDIxLCAzMCwgMywgMjUyLCAxMDIsIDE0LCAzMywgMjEsIDMwLCAKKyAgICAzLCAyNDQsIDIzMSwgMTQsIDMzLCAyMSwgMzAsIDMsIDI0OSwgNjIsIDE0LCAzMywgMjEsIDMwLCAzLCAyNDYsIDE1NiwgMTQsIAorICAgIDMzLCAyMSwgMzAsIDMsIDIxNywgODMsIDE0LCAzMywgMjEsIDMwLCAzLCAyNDYsIDEyMSwgMTQsIDMzLCAyMSwgMzAsIDMsIAorICAgIDIyMiwgNiwgMTQsIDMzLCAyMSwgMzAsIDMsIDIzNywgMTYyLCAxNCwgMzMsIDIxLCAzMCwgMywgMjM2LCAyMjEsIDE0LCAzMywgCisgICAgMjEsIDMwLCAzLCAyMzUsIDE1NiwgMTQsIDMzLCAyMSwgMzAsIDMsIDIzMywgOTksIDE0LCAzMywgMjEsIDMwLCAzLCAyMzEsIAorICAgIDE0NCwgMTQsIDMzLCAyMSwgMzAsIDMsIDIxOCwgMTMwLCAxNCwgMzMsIDIxLCAzMCwgMywgMjMwLCAxNDEsIDE0LCAzMywgCisgICAgMjEsIDMwLCAzLCAyMjksIDEwOCwgMTQsIDMzLCAyMSwgMzAsIDMsIDIyNywgMTQ5LCAxNCwgMzMsIDIxLCAzMCwgMywgMzksIAorICAgIDIyNCwgMTI3LCAxNCwgMzMsIDIxLCAzMCwgMywgMjI0LCAxMjcsIDE0LCAzMywgMjEsIDMwLCAzLCAyMjIsIDEwNSwgMTQsIAorICAgIDMzLCAyMSwgMzAsIDMsIDIyMCwgNTcsIDE0LCAzMywgMjEsIDMwLCAzLCAyMjksIDEyOSwgMTQsIDMzLCAyMSwgMzAsIDMsIAorICAgIDI1MSwgMzEsIDE0LCAzMywgMjEsIDMwLCAzLCAyMjgsIDIxMiwgMTQsIDMzLCAyMSwgMzAsIDMsIDIzMCwgMTQzLCAxNCwgCisgICAgMzMsIDIxLCAzMCwgMjI5LCAyMjMsIDI0OCwgMjQ2LCAxNCwgMzMsIDIxLCAzMCwgMjQ2LCAxNTcsIDEwMCwgMTQsIDMzLCAKKyAgICAyMSwgMzAsIDIyMiwgNywgMTAwLCAxNCwgMzMsIDIxLCAzMCwgMjM2LCAyMjIsIDEwMCwgMTQsIDMzLCAyMSwgMzAsIDIyOSwgCisgICAgMTMwLCAxMDAsIDE0LCAzMywgMjEsIDMwLCAyMjcsIDE1MCwgMTAwLCAxNCwgMzMsIDIxLCAzMCwgMjI5LCAxMDksIDEwMCwgCisgICAgMTQsIDIxLCA2LCAyNDgsIDI0MCwgMTQsIDIxLCAzLCAyNDgsIDI0MCwgMTQsIDIxLCAyMCwgMjE3LCA4NCwgMTQsIDIxLCAKKyAgICAyMCwgMTA3LCAxNCwgMjEsIDIwLCAxMDMsIDE0LCAyMSwgMjAsIDE2MCwgMTQsIDIxLCAyMCwgMTU0LCAxNCwgMjEsIDIwLCAKKyAgICAxNzQsIDE0LCAyMSwgMjAsIDE4MiwgMTQsIDIxLCAyMCwgMTkxLCAxNCwgMjEsIDIwLCAxODUsIDE0LCAyMSwgMjAsIDE5MCwgCisgICAgMTQsIDE3MywgMjAsIDIxNywgODQsIDE0LCAxNzMsIDIwLCAxMDcsIDE0LCAxNzMsIDIwLCAxMDMsIDE0LCAxNzMsIDIwLCAKKyAgICAxNjAsIDE0LCAxNzMsIDIwLCAxNTQsIDE0LCAxNzMsIDIwLCAxNzQsIDE0LCAxNzMsIDIwLCAxODIsIDE0LCAxNzMsIDIwLCAKKyAgICAxOTEsIDE0LCAxNzMsIDIwLCAxODUsIDE0LCAxNzMsIDIwLCAxOTAsIDE0LCAzMywgMjAsIDIxNywgODQsIDE0LCAzMywgMjAsIAorICAgIDEwNywgMTQsIDMzLCAyMCwgMTAzLCAxNCwgMzMsIDIwLCAxNjAsIDE0LCAzMywgMjAsIDE1NCwgMTQsIDMzLCAyMCwgMTc0LCAKKyAgICAxNCwgMzMsIDIwLCAxODIsIDE0LCAzMywgMjAsIDE5MSwgMTQsIDMzLCAyMCwgMTg1LCAxNCwgMzMsIDIwLCAxOTAsIDE0LCAKKyAgICAzMywgMjEsIDIwLCAyMTcsIDg0LCAxNCwgMzMsIDIxLCAyMCwgMTA3LCAxNCwgMzMsIDIxLCAyMCwgMTAzLCAxNCwgMzMsIAorICAgIDIxLCAyMCwgMTYwLCAxNCwgMzMsIDIxLCAyMCwgMTU0LCAxNCwgMzMsIDIxLCAyMCwgMTc0LCAxNCwgMzMsIDIxLCAyMCwgCisgICAgMTgyLCAxNCwgMzMsIDIxLCAyMCwgMTkxLCAxNCwgMzMsIDIxLCAyMCwgMTg1LCAxNCwgMzMsIDIxLCAyMCwgMTkwLCAxNCwgCisgICAgMjExLCAyMCwgMjE3LCA4NCwgMTQsIDIxMSwgMjAsIDEwNywgMTQsIDIxMSwgMjAsIDEwMywgMTQsIDIxMSwgMjAsIDE2MCwgCisgICAgMTQsIDIxMSwgMjAsIDE1NCwgMTQsIDIxMSwgMjAsIDE3NCwgMTQsIDIxMSwgMjAsIDE4MiwgMTQsIDIxMSwgMjAsIDE5MSwgCisgICAgMTQsIDIxMSwgMjAsIDE4NSwgMTQsIDIxMSwgMjAsIDE5MCwgMjM0LCAxMDEsIDgxLCAyNDcsIDUsIDIxOCwgMTk0LCAyMzQsIAorICAgIDEwMSwgODEsIDIyNCwgNiwgMjE4LCAxOTQsIDIzNCwgMTAxLCA4MSwgMjE4LCAyMTcsIDIxOCwgMTk0LCAyMzQsIDEwMSwgCisgICAgODEsIDIzMSwgMTg3LCAyMTgsIDE5NCwgMjM0LCAxMDEsIDgxLCAyMjcsIDIwMywgMjQ3LCAxMjMsIDIzNCwgMTAxLCA4MSwgCisgICAgMjQ0LCAyNywgMjQ3LCAxMjMsIDIzNCwgMTAxLCA4MSwgNjcsIDI0NywgMTIzLCAyMzQsIDEwMSwgODEsIDEzMSwgMTE3LCAKKyAgICAyNTEsIDU0LCAyMzQsIDEwMSwgODEsIDEyNCwgMTE3LCAyNTEsIDU0LCAyMzQsIDEwMSwgODEsIDE0OCwgMTE3LCAyNTEsIAorICAgIDU0LCAyMzQsIDEwMSwgODEsIDI0NSwgMTE2LCAxMTcsIDI1MSwgNTQsIDIzNCwgMTAxLCA4MSwgMjQ1LCAxNzAsIDExNywgCisgICAgMjUxLCA1NCwgMjM0LCAxMDEsIDgxLCAyMjQsIDgyLCAxMTcsIDI1MSwgNTQsIDIzNCwgMTAxLCA4MSwgMjI1LCA0MywgMTE3LCAKKyAgICAyNTEsIDU0LCAyMzQsIDEwMSwgODEsIDI0NiwgMjM1LCAxMTcsIDI1MSwgNTQsIDIzNCwgMTAxLCA4MSwgMjMyLCAzMSwgCisgICAgMTE3LCAyNTEsIDU0LCAyMzQsIDEwMSwgODEsIDEzMSwgMTE3LCAyNTIsIDIxMCwgMjM0LCAxMDEsIDgxLCAxMjQsIDExNywgCisgICAgMjUyLCAyMTAsIDIzNCwgMTAxLCA4MSwgMTQ4LCAxMTcsIDI1MiwgMjEwLCAyMzQsIDEwMSwgODEsIDI0NSwgMTE2LCAxMTcsIAorICAgIDI1MiwgMjEwLCAyMzQsIDEwMSwgODEsIDI0NSwgMTcwLCAxMTcsIDI1MiwgMjEwLCAyMzQsIDEwMSwgODEsIDIyNCwgODIsIAorICAgIDExNywgMjUyLCAyMTAsIDIzNCwgMTAxLCA4MSwgMjI1LCA0MywgMTE3LCAyNTIsIDIxMCwgMjM0LCAxMDEsIDgxLCAyNDYsIAorICAgIDIzNSwgMTE3LCAyNTIsIDIxMCwgMjM0LCAxMDEsIDgxLCAyMzIsIDMxLCAxMTcsIDI1MiwgMjEwLCAyMzQsIDEwMSwgODEsIAorICAgIDEzMSwgMTE3LCAyNTAsIDIyMCwgMjM0LCAxMDEsIDgxLCAxMjQsIDExNywgMjUwLCAyMjAsIDIzNCwgMTAxLCA4MSwgMTQ4LCAKKyAgICAxMTcsIDI1MCwgMjIwLCAyMzQsIDEwMSwgODEsIDI0NSwgMTE2LCAxMTcsIDI1MCwgMjIwLCAyMzQsIDEwMSwgODEsIDI0NSwgCisgICAgMTcwLCAxMTcsIDI1MCwgMjIwLCAyMzQsIDEwMSwgODEsIDIyNCwgODIsIDExNywgMjUwLCAyMjAsIDIzNCwgMTAxLCA4MSwgCisgICAgMjI1LCA0MywgMTE3LCAyNTAsIDIyMCwgMjM0LCAxMDEsIDgxLCAyNDYsIDIzNSwgMTE3LCAyNTAsIDIyMCwgMjM0LCAxMDEsIAorICAgIDgxLCAyMzIsIDMxLCAxMTcsIDI1MCwgMjIwLCAyMzQsIDEwMSwgODEsIDIyOSwgNDUsIDIzNCwgMTAxLCA4MSwgMjMwLCAKKyAgICAxMDQsIDIzNCwgMTAxLCA4MSwgMjUyLCAyMTEsIDIzNCwgMTAxLCA4MSwgMjUwLCAyNTQsIDIzNCwgMTAxLCA4MSwgMjIzLCAKKyAgICAyMzIsIDIzNCwgMTAxLCA4MSwgMjIzLCA3MCwgMjM0LCAxMDEsIDgxLCAyNTMsIDIyMywgMjM0LCAxMDEsIDgxLCAyMTgsIAorICAgIDE5MCwgMjM0LCAxMDEsIDgxLCAyMzcsIDUzLCAyMzQsIDEwMSwgODEsIDI1MiwgMjMzLCAxMTksIDgxLCAxODYsIDI1MiwgCisgICAgMjMzLCAxMTksIDgxLCAyNDIsIDI0MCwgMTE5LCA4MSwgMjQyLCAyMzksIDExOSwgODEsIDI0MiwgMjM4LCAxMTksIDgxLCAKKyAgICAyNDIsIDIzNywgMTE5LCA4MSwgMjQyLCAyMzYsIDExOSwgODEsIDI0MiwgMjM1LCAxMTksIDgxLCAyNDIsIDIzNCwgMTE5LCAKKyAgICA4MSwgMjQyLCAyMzMsIDExOSwgODEsIDI0MiwgMjMyLCAxMTksIDgxLCAyNDIsIDIzMSwgMTE5LCA4MSwgMjQyLCAyMzAsIAorICAgIDExOSwgODEsIDI0MiwgMjI5LCAxMTksIDgxLCAyNDIsIDIyOCwgMTE5LCA4MSwgMjQyLCAyMjcsIDExOSwgODEsIDI0MiwgCisgICAgMjI2LCAxMTksIDgxLCAyNDIsIDIyNSwgMTE5LCA4MSwgMjQyLCAyMjQsIDExOSwgODEsIDI0MiwgMjIzLCAxMTksIDgxLCAKKyAgICAyNDIsIDIyMiwgMTE5LCA4MSwgMjQyLCAyMjEsIDExOSwgODEsIDI0MiwgMjIwLCAxMTksIDgxLCAyNDIsIDIxOSwgMTE5LCAKKyAgICA4MSwgMjQyLCAyMTgsIDExOSwgODEsIDI0MiwgMjE3LCAxMTksIDgxLCAyNDIsIDIxNiwgMTE5LCA4MSwgMjQyLCAyMTUsIAorICAgIDExOSwgODEsIDI0MiwgMjE0LCAxMTksIDgxLCAyNDIsIDIxMywgMTE5LCA4MSwgMjQyLCAyMTIsIDExOSwgODEsIDI0MiwgCisgICAgMjExLCAxMTksIDgxLCAyNDIsIDIxMCwgMTE5LCA4MSwgMjQyLCAyMDksIDExOSwgODEsIDI0MiwgMjA4LCAxMTksIDgxLCAKKyAgICAyNDIsIDIwNywgMTE5LCA4MSwgMjQyLCAyMDYsIDExOSwgODEsIDI0MiwgMjA1LCAxMTksIDgxLCAyNDIsIDIwNCwgMTE5LCAKKyAgICA4MSwgMjQyLCAyMDMsIDExOSwgODEsIDI0MiwgMjAyLCAxMTksIDgxLCAyNDIsIDIwMSwgMTE5LCA4MSwgMjQyLCAyMDAsIAorICAgIDExOSwgODEsIDI0MiwgMTk5LCAxMTksIDgxLCAyNDIsIDE5OCwgMTE5LCA4MSwgMjQyLCAxOTcsIDExOSwgODEsIDI0MiwgCisgICAgMTk2LCAxMTksIDgxLCAyNDIsIDE5NSwgMTE5LCA4MSwgMjQyLCAxOTQsIDExOSwgODEsIDI0MiwgMTkzLCAxMTksIDgxLCAKKyAgICAyNDIsIDE5MiwgMTE5LCA4MSwgNjksIDI1MiwgMjMzLCAxMTksIDgxLCAyMTksIDE1MSwgMTE5LCA4MSwgMjE5LCAxNTAsIAorICAgIDExOSwgODEsIDIxOSwgMTQ5LCAxMTksIDgxLCAyMTksIDE0OCwgMTE5LCA4MSwgMjE5LCAxNDcsIDExOSwgODEsIDIxOSwgCisgICAgMTQ2LCAxMTksIDgxLCAyMTksIDE0NSwgMTE5LCA4MSwgMjE5LCAxNDQsIDExOSwgODEsIDIxOSwgMTQzLCAxMTksIDgxLCAKKyAgICAyMTksIDE0MiwgMTE5LCA4MSwgMjE5LCAxNDEsIDExOSwgODEsIDIxOSwgMTQwLCAxMTksIDgxLCAyMTksIDEzOSwgMTE5LCAKKyAgICA4MSwgMjE5LCAxMzgsIDExOSwgODEsIDIxOSwgMTM3LCAxMTksIDgxLCAyMTksIDEzNiwgMTE5LCA4MSwgMjE5LCAxMzUsIAorICAgIDExOSwgODEsIDIxOSwgMTM0LCAxMTksIDgxLCAyMTksIDEzMywgMTE5LCA4MSwgMjE5LCAxMzIsIDExOSwgODEsIDIxOSwgCisgICAgMTMxLCAxMTksIDgxLCAyMTksIDEzMCwgMTE5LCA4MSwgMjE5LCAxMjksIDExOSwgODEsIDIxOSwgMTI4LCAxMTksIDgxLCAKKyAgICAyMTksIDEyNywgMTE5LCA4MSwgMjE5LCAxMjYsIDExOSwgODEsIDIxOSwgMTI1LCAxMTksIDgxLCAyMTksIDEyNCwgMTE5LCAKKyAgICA4MSwgMjE5LCAxMjMsIDExOSwgODEsIDIxOSwgMTIyLCAxMTksIDgxLCAyMTksIDEyMSwgMTE5LCA4MSwgMjE5LCAxMjAsIAorICAgIDExOSwgODEsIDIxOSwgMTE5LCAxMTksIDgxLCAyMTksIDExOCwgMTE5LCA4MSwgMjE5LCAxMTcsIDExOSwgODEsIDIxOSwgCisgICAgMTE2LCAxMTksIDgxLCAyMTksIDExNSwgMTE5LCA4MSwgMjE5LCAxMTQsIDExOSwgODEsIDIxOSwgMTEzLCAxMTksIDgxLCAKKyAgICAyMTksIDExMiwgMTE5LCA4MSwgMjE5LCAxMTEsIDExOSwgODEsIDIxOSwgMTEwLCAxMTksIDgxLCAyMTksIDEwOSwgMTE5LCAKKyAgICA4MSwgMjE5LCAxMDgsIDExOSwgODEsIDIxOSwgMTA3LCAxMTksIDgxLCAyMTksIDEwNiwgMTE5LCA4MSwgMjE5LCAxMDUsIAorICAgIDExOSwgODEsIDIxOSwgMTA0LCAxMTksIDgxLCAyMTksIDEwMywgMjAsIDIxNywgODUsIDI0NSwgOTAsIDIyMywgMTM2LCAyMCwgCisgICAgMjE3LCA4NSwgMjUwLCAxNjgsIDIwLCAxMzEsIDI1MCwgMTY4LCAyMCwgMTI0LCAyNTAsIDE2OCwgMjAsIDE0OCwgMjUwLCAKKyAgICAxNjgsIDIwLCAyNDUsIDExNiwgMjUwLCAxNjgsIDIwLCAyNDUsIDE3MCwgMjUwLCAxNjgsIDIwLCAyMjQsIDgyLCAyNTAsIAorICAgIDE2OCwgMjAsIDIyNSwgNDMsIDI1MCwgMTY4LCAyMCwgMjQ2LCAyMzUsIDI1MCwgMTY4LCAyMCwgMjMyLCAzMSwgMjUwLCAKKyAgICAxNjgsIDgyLCA3LCA2LCAxLCA2MCwgODIsIDcsIDYsIDEsIDI1MywgMjA0LCA4MiwgNywgNiwgMSwgMjUxLCAyMDIsIDgyLCAKKyAgICA3LCA2LCAxLCAyNTAsIDQ2LCA4MiwgNywgNiwgMSwgNzMsIDgyLCA3LCA2LCAxLCAyNDYsIDc0LCA4MiwgNywgNiwgMSwgCisgICAgMjQ1LCA2NywgODIsIDcsIDYsIDEsIDI0MywgMjI1LCA4MiwgNywgNiwgMSwgNzIsIDgyLCA3LCA2LCAxLCAyMzcsIDEyNiwgCisgICAgODIsIDcsIDYsIDEsIDIzNywgMTcsIDgyLCA3LCA2LCAxLCAxNTMsIDgyLCA3LCA2LCAxLCAxODksIDgyLCA3LCA2LCAxLCAKKyAgICAyMDcsIDgyLCA3LCA2LCAxLCA3NCwgODIsIDcsIDYsIDEsIDIzMCwgNTksIDgyLCA3LCA2LCAxLCAyMjgsIDE2MywgODIsIDcsIAorICAgIDYsIDEsIDE1MiwgODIsIDcsIDYsIDEsIDE5OCwgODIsIDcsIDYsIDEsIDIyMiwgMjAxLCA4MiwgNywgNiwgMSwgNjgsIDgyLCAKKyAgICA3LCA2LCAxLCAyMTYsIDIxNiwgODIsIDcsIDYsIDEsIDIxOSwgNDAsIDgyLCA3LCA2LCAxLCAyMTgsIDE1MSwgODIsIDcsIDYsIAorICAgIDEsIDIxOCwgOTAsIDgyLCA3LCA2LCAxLCAyMTcsIDE1NywgMjIxLCAxMTQsIDIyNCwgMjM2LCAyNTIsIDE3LCA3LCA2LCAxLCAKKyAgICAxOTgsIDM0LCAzMCwgNywgNiwgMSwgMjUxLCAyMDIsIDM0LCAzMCwgNywgNiwgMSwgMTUyLCAzNCwgMjUxLCAxMDAsIDM0LCAKKyAgICAyMTgsIDE1MywgMjA0LCA3LCA2LCAxLCAyNTMsIDIwNCwgMjA0LCA3LCA2LCAxLCAyMDcsIDIwNCwgNywgNiwgMSwgMjMwLCAKKyAgICA1OSwgMjA0LCA3LCA2LCAxLCAxOTgsIDIwNCwgNywgNiwgMSwgMjE5LCA0MCwgMjA0LCAyNDIsIDE1NCwgMjA0LCAyMzMsIAorICAgIDUyLCAyMDQsIDIyNiwgOTYsIDIwNCwgMjIzLCAyMTksIDIwNCwgMjI5LCA0LCAyMzIsIDEzNiwgMzQsIDcsIDYsIDEsIDI0MywgCisgICAgMjI1LCAyMzIsIDEzNiwgMzQsIDcsIDYsIDEsIDIzMCwgNTksIDIzMiwgMTM2LCAyMDQsIDcsIDYsIDEsIDIzNywgMTI2LCAKKyAgICAyMzIsIDEzNiwgMjA0LCA3LCA2LCAxLCAxNTMsIDIzMiwgMTM2LCAyMDQsIDcsIDYsIDEsIDE4OSwgMjMyLCAxMzYsIDIwNCwgCisgICAgNywgNiwgMSwgMjMwLCA1OSwgMjUwLCA5OCwgMjMyLCAxMzYsIDIwNCwgNywgNiwgMSwgMjMwLCA1OSwgMjMyLCAxMzYsIAorICAgIDIwNCwgMjQyLCA2NywgMjMyLCAxMzYsIDIwNCwgMTg3LCAyMzIsIDEzNiwgMjA0LCAyMjYsIDE3NywgNDAsIDI0OCwgMTg0LCAKKyAgICA0MCwgMTM2LCAyNDMsIDAsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCA4LCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgMTIsIDIwNCwgCisgICAgOSwgMjIwLCA3NiwgMjQwLCAxOCwgMjA0LCA1MiwgMjQ5LCA5MiwgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDI0LCAyMDQsIDksIAorICAgIDIyMCwgNzYsIDI0MCwgMTQsIDIwNCwgOSwgMjIwLCA3NiwgMjM5LCAyNDgsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAxMywgCisgICAgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDIzLCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgMCwgMjA0LCA5LCAyMjAsIDc2LCAyMzksIAorICAgIDI1MiwgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDIsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAyMCwgMjA0LCA5LCAyMjAsIDc2LCAKKyAgICAyNDAsIDksIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAyMiwgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDEsIDIwNCwgOSwgMjIwLCAKKyAgICA3NiwgMjQwLCAyMSwgMjA0LCA5LCAyMjAsIDc2LCAyMzksIDI0OSwgMjA0LCA5LCAyMjAsIDc2LCAyMzksIDI1MSwgMjA0LCAKKyAgICA5LCAyMjAsIDc2LCAyMzksIDI0NywgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDE1LCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgMTYsIAorICAgIDIwNCwgOSwgMjIwLCA3NiwgMjM5LCAyNTQsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCA2LCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgCisgICAgNCwgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDI3LCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgMjYsIDIwNCwgOSwgMjIwLCA3NiwgCisgICAgMjM5LCAyNDUsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAxMCwgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDI1LCAyMDQsIDksIAorICAgIDIyMCwgNzYsIDI0MCwgMTcsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCA1LCAyMDQsIDksIDIyMCwgNzYsIDIzOSwgMjQ2LCAKKyAgICAyMDQsIDksIDIyMCwgNzYsIDI0MCwgNywgMjIxLCAxMTQsIDIyNCwgMjM2LCAyNTIsIDE3LCA5LCAyMjAsIDc2LCAyMzksIAorICAgIDI1NSwgMjIxLCAxMTQsIDIyNCwgMjM2LCAyNTIsIDE3LCA5LCAyMjAsIDc2LCAyNDAsIDI2LCAyMjEsIDExNCwgMjI0LCAKKyAgICAyMzYsIDI1MiwgMTcsIDksIDIyMCwgNzYsIDI0MCwgMjQsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMjUyLCAxNywgOSwgMjIwLCAKKyAgICA3NiwgMjQwLCAxMSwgMjIxLCAxMTQsIDIyNCwgMjM2LCAyNTIsIDE3LCA5LCAyMjAsIDc2LCAyMzksIDI1MywgMjIxLCAxMTQsIAorICAgIDIyNCwgMjM2LCAyNTIsIDE3LCA5LCAyMjAsIDc2LCAyNDAsIDcsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMjUyLCAxNywgOSwgCisgICAgMjIwLCA3NiwgMjM5LCAyNTAsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMjUyLCAxNywgOSwgMjIwLCA3NiwgMjQwLCAxOSwgMjIxLCAKKyAgICAxMTQsIDIyNCwgMjM2LCAyNTIsIDE3LCA5LCAyMjAsIDc2LCAyNDAsIDMsIDksIDEzLCAyNDIsIDU3LCA5LCAxMywgMjQyLCAKKyAgICA1NiwgOSwgMTMsIDI0MiwgNTUsIDksIDEzLCAyNDIsIDU0LCA5LCAxMywgMjQyLCA1MywgOSwgMTMsIDI0MiwgNTIsIDksIAorICAgIDEzLCAyNDIsIDUxLCA5LCAxMywgMjQyLCA1MCwgOSwgMTMsIDI0MiwgNDksIDksIDEzLCAyNDIsIDQ4LCA5LCAxMywgMjQyLCAKKyAgICA0NywgOSwgMTMsIDI0MiwgNDYsIDksIDEzLCAyNDIsIDQ1LCA5LCAxMywgMjQyLCA0NCwgOSwgMTMsIDI0MiwgNDMsIDksIAorICAgIDEzLCAyNDIsIDQyLCA5LCAxMywgMjQyLCA0MSwgOSwgMTMsIDI0MiwgNDAsIDksIDEzLCAyNDIsIDM5LCA5LCAxMywgMjQyLCAKKyAgICAzOCwgOSwgMTMsIDI0MiwgMzcsIDksIDEzLCAyNDIsIDM2LCA5LCAxMywgMjQyLCAzNSwgOSwgMTMsIDI0MiwgMzQsIDksIAorICAgIDEzLCAyNDIsIDMzLCA5LCAxMywgMjQyLCAzMiwgOSwgMTMsIDI0MiwgMzEsIDksIDEzLCAyNDIsIDMwLCA5LCAxMywgMjQyLCAKKyAgICAyOSwgOSwgMTMsIDI0MiwgMjgsIDksIDEzLCAyNDIsIDI3LCA5LCAxMywgMjQyLCAyNiwgOSwgMTMsIDI0MiwgMjUsIDksIAorICAgIDEzLCAyNDIsIDI0LCA5LCAxMywgMjQyLCAyMywgOSwgMTMsIDI0MiwgMjIsIDksIDEzLCAyNDIsIDIxLCA5LCAxMywgMjQyLCAKKyAgICAyMCwgOSwgMTMsIDI0MiwgMTksIDksIDEzLCAyNDIsIDE4LCA5LCAxMywgMjQyLCAxNywgOSwgMTMsIDI0MiwgMTYsIDksIAorICAgIDEzLCAyNDIsIDE1LCA5LCAxMywgMjQyLCAxNCwgOSwgMTMsIDI0MiwgMTMsIDksIDEzLCAyNDIsIDEyLCA5LCAxMywgMjQyLCAKKyAgICAxMSwgOSwgMTMsIDI0MiwgMTAsIDksIDEzLCAyNDIsIDksIDksIDEzLCAyNDIsIDgsIDksIDEzLCAyNDIsIDcsIDksIDEzLCAKKyAgICAyNDIsIDYsIDksIDEzLCAyNDIsIDUsIDksIDEzLCAyNDIsIDQsIDksIDEzLCAyNDIsIDMsIDksIDEzLCAyNDIsIDIsIDksIAorICAgIDEzLCAyNDIsIDEsIDksIDEzLCAyNDIsIDAsIDksIDEzLCAyNDEsIDI1NSwgOSwgMTMsIDI0MSwgMjU0LCA5LCAxMywgMjQxLCAKKyAgICAyNTMsIDksIDEzLCAyNDEsIDI1MiwgOSwgMTMsIDI0MSwgMjUxLCA5LCAxMywgMjQxLCAyNTAsIDksIDEzLCAyNDEsIDI0OSwgCisgICAgOSwgMTMsIDI0MSwgMjQ4LCA5LCAxMywgMjQxLCAyNDcsIDksIDEzLCAyNDEsIDI0NiwgOSwgMTMsIDI0MSwgMjQ1LCA5LCAKKyAgICAxMywgMjQxLCAyNDQsIDksIDEzLCAyNDEsIDI0MywgOSwgMTMsIDI0MSwgMjQyLCA5LCAxMywgMjQxLCAyNDEsIDksIDEzLCAKKyAgICAyNDEsIDI0MCwgOSwgMTMsIDI0MSwgMjM5LCA5LCAxMywgMjQxLCAyMzgsIDksIDEzLCAyNDEsIDIzNywgOSwgMTMsIDI0MSwgCisgICAgMjM2LCA5LCAxMywgMjQxLCAyMzUsIDksIDEzLCAyNDEsIDIzNCwgOSwgMTMsIDI0MSwgMjMzLCA5LCAxMywgMjQxLCAyMzIsIAorICAgIDksIDEzLCAyNDEsIDIzMSwgOSwgMTMsIDI0MSwgMjMwLCA5LCAxMywgMjQxLCAyMjksIDksIDEzLCAyNDEsIDIyOCwgOSwgCisgICAgMTMsIDI0MSwgMjI3LCA5LCAxMywgMjQxLCAyMjYsIDksIDEzLCAyNDEsIDIyNSwgOSwgMTMsIDI0MSwgMjI0LCA5LCAxMywgCisgICAgMjQxLCAyMjMsIDksIDEzLCAyNDEsIDIyMiwgOSwgMTMsIDI0MSwgMjIxLCA5LCAxMywgMjQxLCAyMjAsIDksIDEzLCAyNDEsIAorICAgIDIxOSwgOSwgMTMsIDI0MSwgMjE4LCA5LCAxMywgMjQxLCAyMTcsIDksIDEzLCAyNDEsIDIxNiwgOSwgMTMsIDI0MSwgMjE1LCAKKyAgICA5LCAxMywgMjQxLCAyMTQsIDksIDEzLCAyNDEsIDIxMywgOSwgMTMsIDI0MSwgMjEyLCA5LCAxMywgMjQxLCAyMTEsIDksIAorICAgIDEzLCAyNDEsIDIxMCwgOSwgMTMsIDI0MSwgMjA5LCA5LCAxMywgMjQxLCAyMDgsIDksIDEzLCAyNDEsIDIwNywgOSwgMTMsIAorICAgIDI0MSwgMjA2LCA5LCAxMywgMjQxLCAyMDUsIDksIDEzLCAyNDEsIDIwNCwgOSwgMTMsIDI0MSwgMjAzLCA5LCAxMywgMjQxLCAKKyAgICAyMDIsIDksIDEzLCAyNDEsIDIwMSwgOSwgMTMsIDI0MSwgMjAwLCA5LCAxMywgMjQxLCAxOTksIDksIDEzLCAyNDEsIDE5OCwgCisgICAgOSwgMTMsIDI0MSwgMTk3LCA5LCAxMywgMjQxLCAxOTYsIDksIDEzLCAyNDEsIDE5NSwgOSwgMTMsIDI0MSwgMTk0LCA5LCAKKyAgICAxMywgMjQxLCAxOTMsIDksIDEzLCAyNDEsIDE5MiwgOSwgMTMsIDI0MSwgMTkxLCA5LCAxMywgMjQxLCAxOTAsIDksIDEzLCAKKyAgICAyNDEsIDE4OSwgOSwgMTMsIDI0MSwgMTg4LCA5LCAxMywgMjQxLCAxODcsIDksIDEzLCAyNDEsIDE4NiwgOSwgMTMsIDI0MSwgCisgICAgMTg1LCA5LCAxMywgMjQxLCAxODQsIDksIDEzLCAyNDEsIDE4MywgOSwgMTMsIDI0MSwgMTgyLCA5LCAxMywgMjQxLCAxODEsIAorICAgIDksIDEzLCAyNDEsIDE4MCwgOSwgMTMsIDI0MSwgMTc5LCA5LCAxMywgMjQxLCAxNzgsIDksIDEzLCAyNDEsIDE3NywgOSwgCisgICAgMTMsIDI0MSwgMTc2LCA5LCAxMywgMjQxLCAxNzUsIDksIDEzLCAyNDEsIDE3NCwgOSwgMTMsIDI0MSwgMTczLCA5LCAxMywgCisgICAgMjQxLCAxNzIsIDksIDEzLCAyNDEsIDE3MSwgOSwgMTMsIDI0MSwgMTcwLCA5LCAxMywgMjQxLCAxNjksIDksIDEzLCAyNDEsIAorICAgIDE2OCwgOSwgMTMsIDI0MSwgMTY3LCA5LCAxMywgMjQxLCAxNjYsIDksIDEzLCAyNDEsIDE2NSwgOSwgMTMsIDI0MSwgMTY0LCAKKyAgICA5LCAxMywgMjQxLCAxNjMsIDksIDEzLCAyNDEsIDE2MiwgOSwgMTMsIDI0MSwgMTYxLCA5LCAxMywgMjQxLCAxNjAsIDksIAorICAgIDEzLCAyNDEsIDE1OSwgOSwgMTMsIDI0MSwgMTU4LCA5LCAxMywgMjQxLCAxNTcsIDksIDEzLCAyNDEsIDE1NiwgOSwgMTMsIAorICAgIDI0MSwgMTU1LCA5LCAxMywgMjQxLCAxNTQsIDksIDEzLCAyNDEsIDE1MywgOSwgMTMsIDI0MSwgMTUyLCA5LCAxMywgMjQxLCAKKyAgICAxNTEsIDksIDEzLCAyNDEsIDE1MCwgOSwgMTMsIDI0MSwgMTQ5LCA5LCAxMywgMjQxLCAxNDgsIDksIDEzLCAyNDEsIDE0NywgCisgICAgOSwgMTMsIDI0MSwgMTQ2LCA5LCAxMywgMjQxLCAxNDUsIDksIDEzLCAyNDEsIDE0NCwgOSwgMTMsIDI0MSwgMTQzLCA5LCAKKyAgICAxMywgMjQxLCAxNDIsIDksIDEzLCAyNDEsIDE0MSwgOSwgMTMsIDI0MSwgMTQwLCA5LCAxMywgMjQxLCAxMzksIDksIDEzLCAKKyAgICAyNDEsIDEzOCwgOSwgMTMsIDI0MSwgMTM3LCA5LCAxMywgMjQxLCAxMzYsIDksIDEzLCAyNDEsIDEzNSwgOSwgMTMsIDI0MSwgCisgICAgMTM0LCA5LCAxMywgMjQxLCAxMzMsIDksIDEzLCAyNDEsIDEzMiwgOSwgMTMsIDI0MSwgMTMxLCA5LCAxMywgMjQxLCAxMzAsIAorICAgIDksIDEzLCAyNDEsIDEyOSwgOSwgMTMsIDI0MSwgMTI4LCA5LCAxMywgMjQxLCAxMjcsIDksIDEzLCAyNDEsIDEyNiwgOSwgCisgICAgMTMsIDI0MSwgMTI1LCA5LCAxMywgMjQxLCAxMjQsIDksIDEzLCAyNDEsIDEyMywgOSwgMTMsIDI0MSwgMTIyLCA5LCAxMywgCisgICAgMjQxLCAxMjEsIDksIDEzLCAyNDEsIDEyMCwgOSwgMTMsIDI0MSwgMTE5LCA5LCAxMywgMjQxLCAxMTgsIDksIDEzLCAyNDEsIAorICAgIDExNywgOSwgMTMsIDI0MSwgMTE2LCA5LCAxMywgMjQxLCAxMTUsIDksIDEzLCAyNDEsIDExNCwgOSwgMTMsIDI0MSwgMTEzLCAKKyAgICA5LCAxMywgMjQxLCAxMTIsIDksIDEzLCAyNDEsIDExMSwgOSwgMTMsIDI0MSwgMTEwLCA5LCAxMywgMjQxLCAxMDksIDksIAorICAgIDEzLCAyNDEsIDEwOCwgOSwgMTMsIDI0MSwgMTA3LCA5LCAxMywgMjQxLCAxMDYsIDksIDEzLCAyNDEsIDEwNSwgOSwgMTMsIAorICAgIDI0MSwgMTA0LCA5LCAxMywgMjQxLCAxMDMsIDksIDEzLCAyNDEsIDEwMiwgOSwgMTMsIDI0MSwgMTAxLCA5LCAxMywgMjQxLCAKKyAgICAxMDAsIDksIDEzLCAyNDEsIDk5LCA5LCAxMywgMjQxLCA5OCwgOSwgMTMsIDI0MSwgOTcsIDksIDEzLCAyNDEsIDk2LCA5LCAKKyAgICAxMywgMjQxLCA5NSwgOSwgMTMsIDI0MSwgOTQsIDksIDEzLCAyNDEsIDkzLCA5LCAxMywgMjQxLCA5MiwgOSwgMTMsIDI0MSwgCisgICAgOTEsIDksIDEzLCAyNDEsIDkwLCA5LCAxMywgMjQxLCA4OSwgOSwgMTMsIDI0MSwgODgsIDksIDEzLCAyNDEsIDg3LCA5LCAKKyAgICAxMywgMjQxLCA4NiwgOSwgMTMsIDI0MSwgODUsIDksIDEzLCAyNDEsIDg0LCA5LCAxMywgMjQxLCA4MywgOSwgMTMsIDI0MSwgCisgICAgODIsIDksIDEzLCAyNDEsIDgxLCA5LCAxMywgMjQxLCA4MCwgOSwgMTMsIDI0MSwgNzksIDksIDEzLCAyNDEsIDc4LCA5LCAKKyAgICAxMywgMjQxLCA3NywgOSwgMTMsIDI0MSwgNzYsIDksIDEzLCAyNDEsIDc1LCA5LCAxMywgMjQxLCA3NCwgOSwgMTMsIDI0MSwgCisgICAgNzMsIDksIDEzLCAyNDEsIDcyLCA5LCAxMywgMjQxLCA3MSwgOSwgMTMsIDI0MSwgNzAsIDksIDEzLCAyNDEsIDY5LCA5LCAKKyAgICAxMywgMjQxLCA2OCwgOSwgMTMsIDI0MSwgNjcsIDksIDEzLCAyNDEsIDY2LCA5LCAxMywgMjQxLCA2NSwgOSwgMTMsIDI0MSwgCisgICAgNjQsIDksIDEzLCAyNDEsIDYzLCA5LCAxMywgMjQxLCA2MiwgOSwgMTMsIDI0MSwgNjEsIDksIDEzLCAyNDEsIDYwLCA5LCAKKyAgICAxMywgMjQxLCA1OSwgOSwgMTMsIDI0MSwgNTgsIDksIDEzLCAyNDEsIDU3LCA5LCAxMywgMjQxLCA1NiwgOSwgMTMsIDI0MSwgCisgICAgNTUsIDksIDEzLCAyNDEsIDU0LCA5LCAxMywgMjQxLCA1MywgOSwgMTMsIDI0MSwgNTIsIDksIDEzLCAyNDEsIDUxLCA5LCAKKyAgICAxMywgMjQxLCA1MCwgOSwgMTMsIDI0MSwgNDksIDksIDEzLCAyNDEsIDQ4LCA5LCAxMywgMjQxLCA0NywgOSwgMTMsIDI0MSwgCisgICAgNDYsIDksIDEzLCAyNDEsIDQ1LCA5LCAxMywgMjQxLCA0NCwgOSwgMTMsIDI0MSwgNDMsIDksIDEzLCAyNDEsIDQyLCA5LCAKKyAgICAxMywgMjQxLCA0MSwgOSwgMTMsIDI0MSwgNDAsIDksIDEzLCAyNDEsIDM5LCA5LCAxMywgMjQxLCAzOCwgOSwgMTMsIDI0MSwgCisgICAgMzcsIDksIDEzLCAyNDEsIDM2LCA5LCAxMywgMjQxLCAzNSwgOSwgMTMsIDI0MSwgMzQsIDksIDEzLCAyNDEsIDMzLCA5LCAKKyAgICAxMywgMjQxLCAzMiwgOSwgMTMsIDI0MSwgMzEsIDksIDEzLCAyNDEsIDMwLCA5LCAxMywgMjQxLCAyOSwgOSwgMTMsIDI0MSwgCisgICAgMjgsIDksIDEzLCAyNDEsIDI3LCA5LCAxMywgMjQxLCAyNiwgOSwgMTMsIDI0MSwgMjUsIDksIDEzLCAyNDEsIDI0LCA5LCAKKyAgICAxMywgMjQxLCAyMywgOSwgMTMsIDI0MSwgMjIsIDksIDEzLCAyNDEsIDIxLCA5LCAxMywgMjQxLCAyMCwgOSwgMTMsIDI0MSwgCisgICAgMTksIDksIDEzLCAyNDEsIDE4LCA5LCAxMywgMjQxLCAxNywgOSwgMTMsIDI0MSwgMTYsIDksIDEzLCAyNDEsIDE1LCA5LCAKKyAgICAxMywgMjQxLCAxNCwgOSwgMTMsIDI0MSwgMTMsIDksIDEzLCAyNDEsIDEyLCA5LCAxMywgMjQxLCAxMSwgOSwgMTMsIDI0MSwgCisgICAgMTAsIDksIDEzLCAyNDEsIDksIDksIDEzLCAyNDEsIDgsIDksIDEzLCAyNDEsIDcsIDksIDEzLCAyNDEsIDYsIDksIDEzLCAKKyAgICAyNDEsIDUsIDksIDEzLCAyNDEsIDQsIDksIDEzLCAyNDEsIDMsIDksIDEzLCAyNDEsIDIsIDksIDEzLCAyNDEsIDEsIDksIAorICAgIDEzLCAyNDEsIDAsIDksIDEzLCAyNDAsIDI1NSwgOSwgMTMsIDI0MCwgMjU0LCA5LCAxMywgMjQwLCAyNTMsIDksIDEzLCAKKyAgICAyNDAsIDI1MiwgOSwgMTMsIDI0MCwgMjUxLCA5LCAxMywgMjQwLCAyNTAsIDksIDEzLCAyNDAsIDI0OSwgOSwgMTMsIDI0MCwgCisgICAgMjQ4LCA5LCAxMywgMjQwLCAyNDcsIDksIDEzLCAyNDAsIDI0NiwgOSwgMTMsIDI0MCwgMjQ1LCA5LCAxMywgMjQwLCAyNDQsIAorICAgIDksIDEzLCAyNDAsIDI0MywgOSwgMTMsIDI0MCwgMjQyLCA5LCAxMywgMjQwLCAyNDEsIDksIDEzLCAyNDAsIDI0MCwgOSwgCisgICAgMTMsIDI0MCwgMjM5LCA5LCAxMywgMjQwLCAyMzgsIDksIDEzLCAyNDAsIDIzNywgOSwgMTMsIDI0MCwgMjM2LCA5LCAxMywgCisgICAgMjQwLCAyMzUsIDksIDEzLCAyNDAsIDIzNCwgOSwgMTMsIDI0MCwgMjMzLCA5LCAxMywgMjQwLCAyMzIsIDksIDEzLCAyNDAsIAorICAgIDIzMSwgOSwgMTMsIDI0MCwgMjMwLCA5LCAxMywgMjQwLCAyMjksIDksIDEzLCAyNDAsIDIyOCwgOSwgMTMsIDI0MCwgMjI3LCAKKyAgICA5LCAxMywgMjQwLCAyMjYsIDksIDEzLCAyNDAsIDIyNSwgOSwgMTMsIDI0MCwgMjI0LCA5LCAxMywgMjQwLCAyMjMsIDksIAorICAgIDEzLCAyNDAsIDIyMiwgOSwgMTMsIDI0MCwgMjIxLCA5LCAxMywgMjQwLCAyMjAsIDksIDEzLCAyNDAsIDIxOSwgOSwgMTMsIAorICAgIDI0MCwgMjE4LCA5LCAxMywgMjQwLCAyMTcsIDksIDEzLCAyNDAsIDIxNiwgOSwgMTMsIDI0MCwgMjE1LCA5LCAxMywgMjQwLCAKKyAgICAyMTQsIDksIDEzLCAyNDAsIDIxMywgOSwgMTMsIDI0MCwgMjEyLCA5LCAxMywgMjQwLCAyMTEsIDksIDEzLCAyNDAsIDIxMCwgCisgICAgOSwgMTMsIDI0MCwgMjA5LCA5LCAxMywgMjQwLCAyMDgsIDksIDEzLCAyNDAsIDIwNywgOSwgMTMsIDI0MCwgMjA2LCA5LCAKKyAgICAxMywgMjQwLCAyMDUsIDksIDEzLCAyNDAsIDIwNCwgOSwgMTMsIDI0MCwgMjAzLCA5LCAxMywgMjQwLCAyMDIsIDksIDEzLCAKKyAgICAyNDAsIDIwMSwgOSwgMTMsIDI0MCwgMjAwLCA5LCAxMywgMjQwLCAxOTksIDksIDEzLCAyNDAsIDE5OCwgOSwgMTMsIDI0MCwgCisgICAgMTk3LCA5LCAxMywgMjQwLCAxOTYsIDksIDEzLCAyNDAsIDE5NSwgOSwgMTMsIDI0MCwgMTk0LCA5LCAxMywgMjQwLCAxOTMsIAorICAgIDksIDEzLCAyNDAsIDE5MiwgOSwgMTMsIDI0MCwgMTkxLCA5LCAxMywgMjQwLCAxOTAsIDksIDEzLCAyNDAsIDE4OSwgOSwgCisgICAgMTMsIDI0MCwgMTg4LCA5LCAxMywgMjQwLCAxODcsIDksIDEzLCAyNDAsIDE4NiwgOSwgMTMsIDI0MCwgMTg1LCA5LCAxMywgCisgICAgMjQwLCAxODQsIDksIDEzLCAyNDAsIDE4MywgOSwgMTMsIDI0MCwgMTgyLCA5LCAxMywgMjQwLCAxODEsIDksIDEzLCAyNDAsIAorICAgIDE4MCwgOSwgMTMsIDI0MCwgMTc5LCA5LCAxMywgMjQwLCAxNzgsIDksIDEzLCAyNDAsIDE3NywgOSwgMTMsIDI0MCwgMTc2LCAKKyAgICA5LCAxMywgMjQwLCAxNzUsIDksIDEzLCAyNDAsIDE3NCwgOSwgMTMsIDI0MCwgMTczLCA5LCAxMywgMjQwLCAxNzIsIDksIAorICAgIDEzLCAyNDAsIDE3MSwgOSwgMTMsIDI0MCwgMTcwLCA5LCAxMywgMjQwLCAxNjksIDksIDEzLCAyNDAsIDE2OCwgOSwgMTMsIAorICAgIDI0MCwgMTY3LCA5LCAxMywgMjQwLCAxNjYsIDksIDEzLCAyNDAsIDE2NSwgOSwgMTMsIDI0MCwgMTY0LCA5LCAxMywgMjQwLCAKKyAgICAxNjMsIDksIDEzLCAyNDAsIDE2MiwgOSwgMTMsIDI0MCwgMTYxLCA5LCAxMywgMjQwLCAxNjAsIDksIDEzLCAyNDAsIDE1OSwgCisgICAgOSwgMTMsIDI0MCwgMTU4LCA5LCAxMywgMjQwLCAxNTcsIDksIDEzLCAyNDAsIDE1NiwgOSwgMTMsIDI0MCwgMTU1LCA5LCAKKyAgICAxMywgMjQwLCAxNTQsIDksIDEzLCAyNDAsIDE1MywgOSwgMTMsIDI0MCwgMTUyLCA5LCAxMywgMjQwLCAxNTEsIDksIDEzLCAKKyAgICAyNDAsIDE1MCwgOSwgMTMsIDI0MCwgMTQ5LCA5LCAxMywgMjQwLCAxNDgsIDksIDEzLCAyNDAsIDE0NywgOSwgMTMsIDI0MCwgCisgICAgMTQ2LCA5LCAxMywgMjQwLCAxNDUsIDksIDEzLCAyNDAsIDE0NCwgOSwgMTMsIDI0MCwgMTQzLCA5LCAxMywgMjQwLCAxNDIsIAorICAgIDksIDEzLCAyNDAsIDE0MSwgOSwgMTMsIDI0MCwgMTQwLCA5LCAxMywgMjQwLCAxMzksIDksIDEzLCAyNDAsIDEzOCwgOSwgCisgICAgMTMsIDI0MCwgMTM3LCA5LCAxMywgMjQwLCAxMzYsIDksIDEzLCAyNDAsIDEzNSwgOSwgMTMsIDI0MCwgMTM0LCA5LCAxMywgCisgICAgMjQwLCAxMzMsIDksIDEzLCAyNDAsIDEzMiwgOSwgMTMsIDI0MCwgMTMxLCA5LCAxMywgMjQwLCAxMzAsIDksIDEzLCAyNDAsIAorICAgIDEyOSwgOSwgMTMsIDI0MCwgMTI4LCA5LCAxMywgMjQwLCAxMjcsIDksIDEzLCAyNDAsIDEyNiwgOSwgMTMsIDI0MCwgMTI1LCAKKyAgICA5LCAxMywgMjQwLCAxMjQsIDksIDEzLCAyNDAsIDEyMywgOSwgMTMsIDI0MCwgMTIyLCA5LCAxMywgMjQwLCAxMjEsIDksIAorICAgIDEzLCAyNDAsIDEyMCwgOSwgMTMsIDI0MCwgMTE5LCA5LCAxMywgMjQwLCAxMTgsIDksIDEzLCAyNDAsIDExNywgOSwgMTMsIAorICAgIDI0MCwgMTE2LCA5LCAxMywgMjQwLCAxMTUsIDksIDEzLCAyNDAsIDExNCwgOSwgMTMsIDI0MCwgMTEzLCA5LCAxMywgMjQwLCAKKyAgICAxMTIsIDksIDEzLCAyNDAsIDExMSwgOSwgMTMsIDI0MCwgMTEwLCA5LCAxMywgMjQwLCAxMDksIDksIDEzLCAyNDAsIDEwOCwgCisgICAgOSwgMTMsIDI0MCwgMTA3LCA5LCAxMywgMjQwLCAxMDYsIDksIDEzLCAyNDAsIDEwNSwgOSwgMTMsIDI0MCwgMTA0LCA5LCAKKyAgICAxMywgMjQwLCAxMDMsIDksIDEzLCAyNDAsIDEwMiwgOSwgMTMsIDI0MCwgMTAxLCA5LCAxMywgMjQwLCAxMDAsIDksIDEzLCAKKyAgICAyNDAsIDk5LCA5LCAxMywgMjQwLCA5OCwgOSwgMTMsIDI0MCwgOTcsIDksIDEzLCAyNDAsIDk2LCA5LCAxMywgMjQwLCA5NSwgCisgICAgOSwgMTMsIDI0MCwgOTQsIDksIDEzLCAyNDAsIDkzLCA5LCAxMywgMjQwLCA5MiwgOSwgMTMsIDI0MCwgOTEsIDksIDEzLCAKKyAgICAyNDAsIDkwLCA5LCAxMywgMjQwLCA4OSwgOSwgMTMsIDI0MCwgODgsIDksIDEzLCAyNDAsIDg3LCA5LCAxMywgMjQwLCA4NiwgCisgICAgOSwgMTMsIDI0MCwgODUsIDksIDEzLCAyNDAsIDg0LCA5LCAxMywgMjQwLCA4MywgOSwgMTMsIDI0MCwgODIsIDksIDEzLCAKKyAgICAyNDAsIDgxLCA5LCAxMywgMjQwLCA4MCwgOSwgMTMsIDI0MCwgNzksIDksIDEzLCAyNDAsIDc4LCA5LCAxMywgMjQwLCA3NywgCisgICAgOSwgMTMsIDI0MCwgNzYsIDksIDEzLCAyNDAsIDc1LCA5LCAxMywgMjQwLCA3NCwgOSwgMTMsIDI0MCwgNzMsIDksIDEzLCAKKyAgICAyNDAsIDcyLCA5LCAxMywgMjQwLCA3MSwgOSwgMTMsIDI0MCwgNzAsIDksIDEzLCAyNDAsIDY5LCA5LCAxMywgMjQwLCA2OCwgCisgICAgOSwgMTMsIDI0MCwgNjcsIDksIDEzLCAyNDAsIDY2LCA5LCAxMywgMjQwLCA2NSwgOSwgMTMsIDI0MCwgNjQsIDksIDEzLCAKKyAgICAyNDAsIDYzLCA5LCAxMywgMjQwLCA2MiwgOSwgMTMsIDI0MCwgNjEsIDksIDEzLCAyNDAsIDYwLCA5LCAxMywgMjQwLCA1OSwgCisgICAgOSwgMTMsIDI0MCwgNTgsIDksIDEzLCAyNDAsIDU3LCA5LCAxMywgMjQwLCA1NiwgOSwgMTMsIDI0MCwgNTUsIDksIDEzLCAKKyAgICAyNDAsIDU0LCA5LCAxMywgMjQwLCA1MywgOSwgMTMsIDI0MCwgNTIsIDksIDEzLCAyNDAsIDUxLCA5LCAxMywgMjQwLCA1MCwgCisgICAgOSwgMTMsIDI0MCwgNDksIDksIDEzLCAyNDAsIDQ4LCA5LCAxMywgMjQwLCA0NywgOSwgMTMsIDI0MCwgNDYsIDksIDEzLCAKKyAgICAyNDAsIDQ1LCA5LCAxMywgMjQwLCA0NCwgOSwgMTMsIDI0MCwgNDMsIDksIDEzLCAyNDAsIDQyLCA5LCAxMywgMjQwLCA0MSwgCisgICAgOSwgMTMsIDI0MCwgNDAsIDksIDEzLCAyNDAsIDM5LCA5LCAxMywgMjQwLCAzOCwgOSwgMTMsIDI0MCwgMzcsIDksIDEzLCAKKyAgICAyNDAsIDM2LCA5LCAxMywgMjQwLCAzNSwgOSwgMTMsIDI0MCwgMzQsIDksIDEzLCAyNDAsIDMzLCA5LCAxMywgMjQwLCAzMiwgCisgICAgOSwgMTMsIDI0MCwgMzEsIDksIDEzLCAyNDAsIDMwLCA5LCAxMywgMjQwLCAyOSwgOSwgMTMsIDI0MCwgMjgsIDIzNSwgMTQ4LCAKKyAgICAyMjIsIDE0MSwgMTE4LCAyMjMsIDI1NCwgMTE4LCAyNDYsIDk1LCA3OCwgMTE4LCAyMjgsIDY5LCA3OCwgMTE4LCA1NCwgNTUsIAorICAgIDExOCwgMjQ4LCAxNTUsIDU1LCAxMTgsIDIyOSwgMTY5LCA1NSwgMTE4LCAyNTQsIDEzNCwgMTE4LCAyNTQsIDc5LCAxMTgsIAorICAgIDQyLCAyMjksIDIyOSwgMTE4LCA0NSwgMjI5LCAyMjksIDExOCwgMjUzLCAyNTEsIDExOCwgODgsIDU1LCAxMTgsIDI1MCwgCisgICAgMTY4LCAxMTgsIDI0MiwgMTIwLCAxMTgsIDI0NSwgOTAsIDIyMywgMTM2LCAxMTgsIDIyNCwgMTcsIDExOCwgMjAsIDIxNywgCisgICAgODQsIDExOCwgMjAsIDEwNywgMTE4LCAyMCwgMTAzLCAxMTgsIDIwLCAxNjAsIDExOCwgMjAsIDE1NCwgMTE4LCAyMCwgMTc0LCAKKyAgICAxMTgsIDIwLCAxODIsIDExOCwgMjAsIDE5MSwgMTE4LCAyMCwgMTg1LCAxMTgsIDIwLCAxOTAsIDExOCwgMjUwLCAxNzUsIAorICAgIDExOCwgMjI1LCA2NywgMTE4LCAyMzUsIDg3LCA1NSwgMTE4LCAyNDYsIDE1NCwgNTUsIDExOCwgMjQ0LCAzMCwgNTUsIDExOCwgCisgICAgMjI4LCA4MiwgNzgsIDExOCwgMjUwLCAxNjcsIDI1MywgMjQ0LCAxMTgsIDcsIDYsIDEsIDYwLCAxMTgsIDcsIDYsIDEsIAorICAgIDI1MywgMjA0LCAxMTgsIDcsIDYsIDEsIDI1MSwgMjAyLCAxMTgsIDcsIDYsIDEsIDI1MCwgNDYsIDExOCwgNywgNiwgMSwgCisgICAgNzMsIDExOCwgNywgNiwgMSwgMjQ2LCA3NCwgMTE4LCA3LCA2LCAxLCAyNDUsIDY3LCAxMTgsIDcsIDYsIDEsIDI0MywgMjI1LCAKKyAgICAxMTgsIDcsIDYsIDEsIDcyLCAxMTgsIDcsIDYsIDEsIDIzNywgMTI2LCAxMTgsIDcsIDYsIDEsIDIzNywgMTcsIDExOCwgNywgCisgICAgNiwgMSwgMTUzLCAxMTgsIDcsIDYsIDEsIDE4OSwgMTE4LCA3LCA2LCAxLCAyMDcsIDExOCwgNywgNiwgMSwgNzQsIDExOCwgCisgICAgNywgNiwgMSwgMjMwLCA1OSwgMTE4LCA3LCA2LCAxLCAyMjgsIDE2MywgMTE4LCA3LCA2LCAxLCAxNTIsIDExOCwgNywgNiwgCisgICAgMSwgMTk4LCAxMTgsIDcsIDYsIDEsIDIyMiwgMjAxLCAxMTgsIDcsIDYsIDEsIDY4LCAxMTgsIDcsIDYsIDEsIDIxNiwgMjE2LCAKKyAgICAxMTgsIDcsIDYsIDEsIDIxOSwgNDAsIDExOCwgNywgNiwgMSwgMjE4LCAxNTEsIDExOCwgNywgNiwgMSwgMjE4LCA5MCwgCisgICAgMTE4LCA3LCA2LCAxLCAyMTcsIDE1NywgMTE4LCA0MiwgNDAsIDExNSwgMTE4LCAyMjcsIDE2MCwgMjI0LCAxNywgMTE4LCAKKyAgICA0NSwgNDAsIDExNSwgMTE4LCAyNTAsIDIxNywgMjU1LCAwLCAxMTgsIDEwOSwgMjM1LCA0MywgMTE4LCAyNDQsIDM3LCAyNTUsIAorICAgIDAsIDExOCwgNywgMywgMSwgNjAsIDExOCwgNywgMywgMSwgMjUzLCAyMDQsIDExOCwgNywgMywgMSwgMjUxLCAyMDIsIDExOCwgCisgICAgNywgMywgMSwgMjUwLCA0NiwgMTE4LCA3LCAzLCAxLCA3MywgMTE4LCA3LCAzLCAxLCAyNDYsIDc0LCAxMTgsIDcsIDMsIDEsIAorICAgIDI0NSwgNjcsIDExOCwgNywgMywgMSwgMjQzLCAyMjUsIDExOCwgNywgMywgMSwgNzIsIDExOCwgNywgMywgMSwgMjM3LCAKKyAgICAxMjYsIDExOCwgNywgMywgMSwgMjM3LCAxNywgMTE4LCA3LCAzLCAxLCAxNTMsIDExOCwgNywgMywgMSwgMTg5LCAxMTgsIDcsIAorICAgIDMsIDEsIDIwNywgMTE4LCA3LCAzLCAxLCA3NCwgMTE4LCA3LCAzLCAxLCAyMzAsIDU5LCAxMTgsIDcsIDMsIDEsIDIyOCwgCisgICAgMTYzLCAxMTgsIDcsIDMsIDEsIDE1MiwgMTE4LCA3LCAzLCAxLCAxOTgsIDExOCwgNywgMywgMSwgMjIyLCAyMDEsIDExOCwgCisgICAgNywgMywgMSwgNjgsIDExOCwgNywgMywgMSwgMjE2LCAyMTYsIDExOCwgNywgMywgMSwgMjE5LCA0MCwgMTE4LCA3LCAzLCAxLCAKKyAgICAyMTgsIDE1MSwgMTE4LCA3LCAzLCAxLCAyMTgsIDkwLCAxMTgsIDcsIDMsIDEsIDIxNywgMTU3LCAxMTgsIDQyLCAyNTAsIAorICAgIDc5LCAxMTUsIDExOCwgNjksIDIzNSwgNDMsIDExOCwgNDUsIDI1MCwgNzksIDExNSwgMTE4LCAyMjEsIDE3OSwgMjUxLCAKKyAgICAxNTMsIDIyMiwgMTQxLCA0MSwgMjI1LCAyNTEsIDQxLCAyMjUsIDI0MCwgNDEsIDIyNSwgMjI5LCA0MSwgMjI1LCAyMTcsIAorICAgIDQxLCAyMjUsIDIwNiwgNDEsIDIyNSwgMTk1LCA0MSwgMjI1LCAxODQsIDQxLCAyMjUsIDE3MywgNDEsIDIyNSwgMTYyLCA0MSwgCisgICAgMjI1LCAxNTQsIDQxLCAyMjUsIDE1MywgNDEsIDIyNSwgMTUyLCA0MSwgMjI1LCAxNTEsIDQxLCAyMjUsIDE0OSwgNDEsIAorICAgIDIyNSwgMTQ4LCA0MSwgMjI1LCAxNDcsIDQxLCAyMjUsIDE0NiwgNDEsIDIyNSwgMTQ1LCA0MSwgMjI1LCAxNDQsIDQxLCAKKyAgICAyMjUsIDE0MywgNDEsIDIyNSwgMTQyLCA0MSwgMjI1LCAxNDEsIDQxLCAyMjUsIDE0MCwgNDEsIDIyNSwgMTM4LCA0MSwgCisgICAgMjI1LCAxMzcsIDQxLCAyMjUsIDEzNiwgNDEsIDIyNSwgMTM1LCA0MSwgMjI1LCAxMzQsIDQxLCAyMjUsIDEzMywgNDEsIAorICAgIDIyNSwgMTMyLCA0MSwgMjI1LCAxMzEsIDQxLCAyMjUsIDEzMCwgNDEsIDIyNSwgMTI5LCA0MSwgMjI1LCAxMjcsIDQxLCAKKyAgICAyMjUsIDEyNiwgNDEsIDIyNSwgMTI1LCA0MSwgMjI1LCAxMjQsIDQxLCAyMjUsIDEyMywgNDEsIDIyNSwgMTIyLCA0MSwgCisgICAgMjI1LCAxMjEsIDQxLCAyMjUsIDEyMCwgNDEsIDIyNSwgMTE5LCA0MSwgMjI1LCAxMTgsIDQxLCAyMjUsIDExNiwgNDEsIAorICAgIDIyNSwgMTE1LCA0MSwgMjI1LCAxMTQsIDQxLCAyMjUsIDExMywgNDEsIDIyNSwgMTEyLCA0MSwgMjI1LCAxMTEsIDQxLCAKKyAgICAyMjUsIDExMCwgNDEsIDIyNSwgMTA5LCA0MSwgMjI1LCAxMDgsIDQxLCAyMjUsIDEwNywgNDEsIDIyNSwgMTA1LCA0MSwgCisgICAgMjI1LCAxMDQsIDQxLCAyMjUsIDEwMywgNDEsIDIyNSwgMTAyLCA0MSwgMjI1LCAxMDEsIDQxLCAyMjUsIDEwMCwgNDEsIAorICAgIDIyNSwgOTksIDQxLCAyMjUsIDk4LCA0MSwgMjI1LCA5NywgNDEsIDIyNSwgOTYsIDQxLCAyMjUsIDk0LCA0MSwgMjI1LCA5MywgCisgICAgNDEsIDIyNSwgOTIsIDQxLCAyMjUsIDkxLCA0MSwgMjI1LCA5MCwgNDEsIDIyNSwgODksIDQxLCAyMjUsIDg4LCA0MSwgMjI1LCAKKyAgICA4NywgNDEsIDIyNSwgODYsIDQxLCAyMjUsIDg1LCA0MSwgMjI1LCA4MywgNDEsIDIyNSwgODIsIDQxLCAyMjUsIDgxLCA0MSwgCisgICAgMjI1LCA4MCwgNDEsIDIyNSwgNzksIDQxLCAyMjUsIDc4LCA0MSwgMjI1LCA3NywgNDEsIDIyNSwgNzYsIDQxLCAyMjUsIDc1LCAKKyAgICA0MSwgMjI1LCA3NCwgNDEsIDIyNiwgNzEsIDQxLCAyMjYsIDcwLCA0MSwgMjI2LCA2OSwgNDEsIDIyNiwgNjgsIDQxLCAyMjYsIAorICAgIDY3LCA0MSwgMjI2LCA2NiwgNDEsIDIyNiwgNjUsIDQxLCAyMjYsIDY0LCA0MSwgMjI2LCA2MywgNDEsIDIyNiwgNjIsIDQxLCAKKyAgICAyMjYsIDYwLCA0MSwgMjI2LCA1OSwgNDEsIDIyNiwgNTgsIDQxLCAyMjYsIDU3LCA0MSwgMjI2LCA1NiwgNDEsIDIyNiwgNTUsIAorICAgIDQxLCAyMjYsIDU0LCA0MSwgMjI2LCA1MywgNDEsIDIyNiwgNTIsIDQxLCAyMjYsIDUxLCA0MSwgMjI2LCA0OSwgNDEsIDIyNiwgCisgICAgNDgsIDQxLCAyMjYsIDQ3LCA0MSwgMjI2LCA0NiwgNDEsIDIyNiwgNDUsIDQxLCAyMjYsIDQ0LCA0MSwgMjI2LCA0MywgNDEsIAorICAgIDIyNiwgNDIsIDQxLCAyMjYsIDQxLCA0MSwgMjI2LCA0MCwgNDEsIDIyNiwgMzgsIDQxLCAyMjYsIDM3LCA0MSwgMjI2LCAzNiwgCisgICAgNDEsIDIyNiwgMzUsIDQxLCAyMjYsIDM0LCA0MSwgMjI2LCAzMywgNDEsIDIyNiwgMzIsIDQxLCAyMjYsIDMxLCA0MSwgMjI2LCAKKyAgICAzMCwgNDEsIDIyNiwgMjksIDQxLCAyMjYsIDI3LCA0MSwgMjI2LCAyNiwgNDEsIDIyNiwgMjUsIDQxLCAyMjYsIDI0LCA0MSwgCisgICAgMjI2LCAyMywgNDEsIDIyNiwgMjIsIDQxLCAyMjYsIDIxLCA0MSwgMjI2LCAyMCwgNDEsIDIyNiwgMTksIDQxLCAyMjYsIDE4LCAKKyAgICA0MSwgMjI2LCAxNiwgNDEsIDIyNiwgMTUsIDQxLCAyMjYsIDE0LCA0MSwgMjI2LCAxMywgNDEsIDIyNiwgMTIsIDQxLCAyMjYsIAorICAgIDExLCA0MSwgMjI2LCAxMCwgNDEsIDIyNiwgOSwgNDEsIDIyNiwgOCwgNDEsIDIyNiwgNywgNDEsIDIyNiwgNSwgNDEsIDIyNiwgCisgICAgNCwgNDEsIDIyNiwgMywgNDEsIDIyNiwgMiwgNDEsIDIyNiwgMSwgNDEsIDIyNiwgMCwgNDEsIDIyNSwgMjU1LCA0MSwgMjI1LCAKKyAgICAyNTQsIDQxLCAyMjUsIDI1MywgNDEsIDIyNSwgMjUyLCA0MSwgMjI1LCAyNTAsIDQxLCAyMjUsIDI0OSwgNDEsIDIyNSwgCisgICAgMjQ4LCA0MSwgMjI1LCAyNDcsIDQxLCAyMjUsIDI0NiwgNDEsIDIyNSwgMjQ1LCA0MSwgMjI1LCAyNDQsIDQxLCAyMjUsIAorICAgIDI0MywgNDEsIDIyNSwgMjQyLCA0MSwgMjI1LCAyNDEsIDQxLCAyMjUsIDIzOSwgNDEsIDIyNSwgMjM4LCA0MSwgMjI1LCAKKyAgICAyMzcsIDQxLCAyMjUsIDIzNiwgNDEsIDIyNSwgMjM1LCA0MSwgMjI1LCAyMzQsIDQxLCAyMjUsIDIzMywgNDEsIDIyNSwgCisgICAgMjMyLCA0MSwgMjI1LCAyMzEsIDQxLCAyMjUsIDIzMCwgNDEsIDIyNSwgMjI4LCA0MSwgMjI1LCAyMjcsIDQxLCAyMjUsIAorICAgIDIyNiwgNDEsIDIyNSwgMjI1LCA0MSwgMjI1LCAyMjQsIDQxLCAyMjUsIDIyMywgNDEsIDIyNSwgMjIyLCA0MSwgMjI1LCAKKyAgICAyMjEsIDQxLCAyMjUsIDIyMCwgNDEsIDIyNSwgMjE5LCA0MSwgMjI1LCAyMTYsIDQxLCAyMjUsIDIxNSwgNDEsIDIyNSwgCisgICAgMjE0LCA0MSwgMjI1LCAyMTMsIDQxLCAyMjUsIDIxMiwgNDEsIDIyNSwgMjExLCA0MSwgMjI1LCAyMTAsIDQxLCAyMjUsIAorICAgIDIwOSwgNDEsIDIyNSwgMjA4LCA0MSwgMjI1LCAyMDcsIDQxLCAyMjUsIDIwNSwgNDEsIDIyNSwgMjA0LCA0MSwgMjI1LCAKKyAgICAyMDMsIDQxLCAyMjUsIDIwMiwgNDEsIDIyNSwgMjAxLCA0MSwgMjI1LCAyMDAsIDQxLCAyMjUsIDE5OSwgNDEsIDIyNSwgCisgICAgMTk4LCA0MSwgMjI1LCAxOTcsIDQxLCAyMjUsIDE5NiwgNDEsIDIyNSwgMTk0LCA0MSwgMjI1LCAxOTMsIDQxLCAyMjUsIAorICAgIDE5MiwgNDEsIDIyNSwgMTkxLCA0MSwgMjI1LCAxOTAsIDQxLCAyMjUsIDE4OSwgNDEsIDIyNSwgMTg4LCA0MSwgMjI1LCAKKyAgICAxODcsIDQxLCAyMjUsIDE4NiwgNDEsIDIyNSwgMTg1LCA0MSwgMjI1LCAxODMsIDQxLCAyMjUsIDE4MiwgNDEsIDIyNSwgCisgICAgMTgxLCA0MSwgMjI1LCAxODAsIDQxLCAyMjUsIDE3OSwgNDEsIDIyNSwgMTc4LCA0MSwgMjI1LCAxNzcsIDQxLCAyMjUsIAorICAgIDE3NiwgNDEsIDIyNSwgMTc1LCA0MSwgMjI1LCAxNzQsIDQxLCAyMjUsIDE3MiwgNDEsIDIyNSwgMTcxLCA0MSwgMjI1LCAKKyAgICAxNzAsIDQxLCAyMjUsIDE2OSwgNDEsIDIyNSwgMTY4LCA0MSwgMjI1LCAxNjcsIDQxLCAyMjUsIDE2NiwgNDEsIDIyNSwgCisgICAgMTY1LCA0MSwgMjI1LCAxNjQsIDQxLCAyMjUsIDE2MywgNDEsIDIyNSwgMTYxLCA0MSwgMjI1LCAxNjAsIDQxLCAyMjUsIAorICAgIDE1OSwgNDEsIDIyNSwgMTU4LCA0MSwgMjI1LCAxNTcsIDQxLCAyMjUsIDE1NiwgNDEsIDIyNSwgMTU1LCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBocmFzZWJvb2tfb2Zmc2V0MVtdID0gewotICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNiwgMTcsIDE4LCAxOSwgCi0gICAgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgCi0gICAgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCAxNiwgNTIsIDUzLCA1NCwgCi0gICAgMTYsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgCi0gICAgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgMTYsIDg0LCA4NSwgODYsIDg3LCA4OCwgCi0gICAgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxMDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgCi0gICAgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxNiwgMTIwLCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTIxLCAxMjIsIDEyMywgMTI0LCAKLSAgICAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTYsIAotICAgIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNDQsIDE2LCAxNDUsIDE2LCAxNDYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE2LCAxNTQsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwgMTYsIDE2MCwgMTYsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIAotICAgIDE2NywgMTY4LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNjksIDE3MCwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNzYsIAotICAgIDE2LCAxNzcsIDE3OCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIAorICAgIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIAorICAgIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIAorICAgIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIAorICAgIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDE3LCA4NywgODgsIDg5LCA5MCwgOTEsIAorICAgIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTAzLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAKKyAgICAxMDksIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgCisgICAgMTIzLCAxMjQsIDEyNSwgMTcsIDEyNiwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTI3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxMjgsIDEyOSwgCisgICAgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIAorICAgIDE0NCwgMTQ1LCAxNywgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE1MSwgMTcsIAorICAgIDE1MiwgMTcsIDE1MywgMTcsIDE1NCwgMTcsIDE1NSwgMTcsIDE3LCAxNywgMTU2LCAxNywgMTcsIDE3LCAxNywgMTU3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNTgsIDE1OSwgMTYwLCAxNjEsIDE2MiwgMTYzLCAKKyAgICAxNjQsIDE3LCAxNjUsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsIAorICAgIDE3NCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTcsIDE4MCwgMTcsIDE4MSwgMTgyLCAKKyAgICAxODMsIDE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxODksIDE5MCwgMTkxLCAxOTIsIDE5MywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxOTksIDE3LCAyMDAsIDIwMSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGhyYXNlYm9va19vZmZzZXQyW10gPSB7CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMywgNiwgOSwgMTEsIDE0LCAxNywgMTksIDIxLCAyNCwgMjcsIDI5LCAzMSwgCiAgICAgMzMsIDM1LCAzOSwgNDEsIDQ0LCA0NiwgNDgsIDUwLCA1MiwgNTQsIDU2LCA1OCwgNjAsIDYyLCA2NCwgNjYsIDY5LCA3MiwgCi0gICAgNzUsIDc4LCA4MiwgODYsIDkxLCA5NiwgMTAxLCAxMDUsIDExMCwgMTE0LCAxMTgsIDEyMiwgMTI3LCAxMzIsIDEzNiwgMTQwLCAKLSAgICAxNDQsIDE0OCwgMTUzLCAxNTgsIDE2MiwgMTY2LCAxNzEsIDE3NSwgMTc5LCAxODQsIDE4OSwgMTk0LCAxOTksIDIwMiwgCi0gICAgMjA2LCAyMDksIDIxMywgMjE2LCAyMjAsIDIyNCwgMjI5LCAyMzQsIDIzOSwgMjQzLCAyNDgsIDI1MiwgMjU2LCAyNjAsIAotICAgIDI2NSwgMjcwLCAyNzQsIDI3OCwgMjgyLCAyODYsIDI5MSwgMjk2LCAzMDAsIDMwNCwgMzA5LCAzMTMsIDMxNywgMzIyLCAKLSAgICAzMjcsIDMzMiwgMzM3LCAzNDEsIDM0NCwgMzQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDksIDM1MywgMzU4LCAKLSAgICAzNjEsIDM2NCwgMzY3LCAzNzAsIDM3MywgMzc2LCAzNzcsIDM4MCwgMzg2LCAzOTQsIDM5NiwgNDAwLCA0MDMsIDQwNSwgCi0gICAgNDA4LCA0MTEsIDQxNCwgNDE3LCA0MjEsIDQyNCwgNDI3LCA0MzEsIDQzMywgNDM2LCA0NDIsIDQ1MCwgNDU3LCA0NjQsIAotICAgIDQ3MSwgNDc2LCA0ODMsIDQ4OSwgNDk2LCA1MDIsIDUwOCwgNTE2LCA1MjEsIDUyOSwgNTM2LCA1NDIsIDU0OSwgNTU1LCAKLSAgICA1NjMsIDU3MCwgNTc4LCA1ODUsIDU5MCwgNTk3LCA2MDQsIDYxMCwgNjE3LCA2MjMsIDYyOSwgNjMyLCA2MzgsIDY0NSwgCi0gICAgNjUxLCA2NTgsIDY2NCwgNjcxLCA2NzYsIDY4MiwgNjg5LCA2OTUsIDcwMiwgNzA4LCA3MTQsIDcyMiwgNzI3LCA3MzUsIAotICAgIDc0MiwgNzQ4LCA3NTUsIDc2MSwgNzY5LCA3NzYsIDc4NCwgNzkxLCA3OTYsIDgwMywgODEwLCA4MTYsIDgyMywgODI5LCAKLSAgICA4MzUsIDgzOCwgODQ0LCA4NTEsIDg1NywgODY0LCA4NzAsIDg3NywgODgyLCA4ODksIDg5NiwgOTAzLCA5MTAsIDkxNywgCi0gICAgOTI0LCA5MzEsIDkzOCwgOTQ1LCA5NTMsIDk2MSwgOTY5LCA5NzcsIDk4NSwgOTkzLCAxMDAxLCAxMDA5LCAxMDE2LCAxMDIzLCAKLSAgICAxMDMwLCAxMDM3LCAxMDQ0LCAxMDUxLCAxMDU4LCAxMDY1LCAxMDcyLCAxMDc5LCAxMDg2LCAxMDkzLCAxMTAxLCAxMTA5LCAKLSAgICAxMTE3LCAxMTI1LCAxMTMzLCAxMTQxLCAxMTQ5LCAxMTU3LCAxMTY1LCAxMTczLCAxMTgwLCAxMTg3LCAxMTk0LCAxMjAxLCAKLSAgICAxMjA5LCAxMjE3LCAxMjI1LCAxMjMzLCAxMjQxLCAxMjQ5LCAxMjU3LCAxMjYzLCAxMjY4LCAxMjczLCAxMjgxLCAxMjg5LCAKLSAgICAxMjk3LCAxMzA1LCAxMzEwLCAxMzE3LCAxMzI0LCAxMzMyLCAxMzQwLCAxMzQ4LCAxMzU2LCAxMzY2LCAxMzc2LCAxMzgzLCAKLSAgICAxMzkwLCAxMzk3LCAxNDA0LCAxNDEyLCAxNDIwLCAxNDI4LCAxNDM2LCAxNDQ3LCAxNDUyLCAxNDU3LCAxNDY0LCAxNDcxLCAKLSAgICAxNDc4LCAxNDg1LCAxNDkyLCAxNDk5LCAxNTA0LCAxNTA5LCAxNTE2LCAxNTIzLCAxNTMxLCAxNTM5LCAxNTQ3LCAxNTU1LCAKLSAgICAxNTYyLCAxNTY5LCAxNTc3LCAxNTg1LCAxNTkzLCAxNjAxLCAxNjA5LCAxNjE3LCAxNjI1LCAxNjMzLCAxNjQxLCAxNjQ5LCAKLSAgICAxNjU2LCAxNjYzLCAxNjY5LCAxNjc1LCAxNjgyLCAxNjg5LCAxNjk2LCAxNzAzLCAxNzExLCAxNzE5LCAxNzI2LCAxNzMzLCAKLSAgICAxNzQwLCAxNzQ3LCAxNzU1LCAxNzYzLCAxNzcxLCAxNzc5LCAxNzg2LCAxNzkzLCAxODAwLCAxODA4LCAxODE2LCAxODI0LCAKLSAgICAxODMyLCAxODM3LCAxODQzLCAxODQ5LCAxODU2LCAxODYzLCAxODY4LCAxODczLCAxODc5LCAxODg2LCAxODkzLCAxOTAwLCAKLSAgICAxOTA3LCAxOTE1LCAxOTIzLCAxOTI5LCAxOTM0LCAxOTM5LCAxOTQ1LCAxOTUyLCAxOTU5LCAxOTY2LCAxOTcxLCAxOTc2LCAKLSAgICAxOTgxLCAxOTg4LCAxOTk1LCAyMDAyLCAyMDA5LCAyMDE2LCAyMDIxLCAyMDI5LCAyMDM5LCAyMDQ3LCAyMDU0LCAyMDYxLCAKLSAgICAyMDY2LCAyMDcxLCAyMDc4LCAyMDg1LCAyMDg5LCAyMDk0LCAyMDk5LCAyMTA0LCAyMTExLCAyMTIwLCAyMTI3LCAyMTM0LCAKLSAgICAyMTQzLCAyMTUwLCAyMTU3LCAyMTYyLCAyMTY5LCAyMTc2LCAyMTgzLCAyMTkwLCAyMTk3LCAyMjAyLCAyMjA5LCAyMjE2LCAKLSAgICAyMjI0LCAyMjI5LCAyMjM0LCAyMjM5LCAyMjQ5LCAyMjUzLCAyMjU5LCAyMjY1LCAyMjcxLCAyMjc3LCAyMjg1LCAyMjk4LCAKLSAgICAyMzA2LCAyMzExLCAyMzIxLCAyMzI2LCAyMzMxLCAyMzQxLCAyMzQ2LCAyMzUzLCAyMzYwLCAyMzY4LCAyMzc2LCAyMzgzLCAKLSAgICAyMzkwLCAyMzk3LCAyNDA0LCAyNDE0LCAyNDI0LCAyNDMzLCAyNDQyLCAyNDUyLCAyNDYyLCAyNDcyLCAyNDgyLCAyNDg3LCAKLSAgICAyNDk3LCAyNTA3LCAyNTE3LCAyNTI3LCAyNTM1LCAyNTQzLCAyNTUwLCAyNTU3LCAyNTY1LCAyNTczLCAyNTgxLCAyNTg5LCAKLSAgICAyNTk2LCAyNjAzLCAyNjEzLCAyNjIzLCAyNjMxLCAyNjM5LCAyNjQ3LCAyNjUyLCAyNjYyLCAyNjY3LCAyNjc0LCAyNjgxLCAKLSAgICAyNjg2LCAyNjkxLCAyNjk5LCAyNzA3LCAyNzE3LCAyNzI3LCAyNzM0LCAyNzQxLCAyNzQ5LCAyNzU3LCAyNzY1LCAyNzczLCAKLSAgICAyNzgyLCAyNzkxLCAyNzk5LCAyODA3LCAyODE2LCAyODI1LCAyODM0LCAyODQzLCAyODUzLCAyODYzLCAyODcxLCAyODc5LCAKLSAgICAyODg4LCAyODk3LCAyOTA2LCAyOTE1LCAyOTI1LCAyOTM1LCAyOTQzLCAyOTUxLCAyOTYwLCAyOTY5LCAyOTc4LCAyOTg3LCAKLSAgICAyOTk2LCAzMDA1LCAzMDEwLCAzMDE1LCAzMDIzLCAzMDMxLCAzMDQxLCAzMDQ5LCAzMDU0LCAzMDU5LCAzMDY2LCAzMDczLCAKLSAgICAzMDgwLCAzMDg3LCAzMDk0LCAzMTAxLCAzMTExLCAzMTIxLCAzMTMxLCAzMTQxLCAzMTQ4LCAzMTU1LCAzMTY1LCAzMTc1LCAKLSAgICAzMTgzLCAzMTkxLCAzMTk5LCAzMjA3LCAzMjE1LCAzMjIyLCAzMjI5LCAzMjM2LCAzMjQyLCAzMjQ5LCAzMjU2LCAzMjYzLCAKLSAgICAzMjcyLCAzMjgyLCAzMjkyLCAzMjk5LCAzMzA2LCAzMzEyLCAzMzE3LCAzMzIyLCAzMzI4LCAzMzM0LCAzMzQxLCAzMzQ4LCAKLSAgICAzMzU5LCAzMzY5LCAzMzc2LCAzMzgzLCAzMzkwLCAzMzk3LCAzNDAyLCAzNDA3LCAzNDEzLCAzNDE5LCAzNDI1LCAzNDMzLCAKLSAgICAzNDQxLCAzNDQ4LCAzNDUzLCAzNDU4LCAzNDY1LCAzNDcxLCAzNDc4LCAzNDg3LCAzNDk2LCAzNTA1LCAzNTEyLCAzNTE3LCAKLSAgICAzNTIyLCAzNTI3LCAzNTM0LCAzNTM5LCAzNTQ2LCAzNTUzLCAzNTYwLCAzNTY1LCAzNTcwLCAzNTc5LCAzNTg3LCAzNTk2LCAKLSAgICAzNjAxLCAzNjA2LCAzNjE2LCAzNjIzLCAzNjMxLCAzNjQwLCAzNjQ1LCAzNjUxLCAzNjU3LCAzNjY0LCAzNjY5LCAzNjc0LCAKLSAgICAzNjg0LCAzNjkyLCAzNzAxLCAzNzA5LCAzNzE3LCAzNzI2LCAzNzMxLCAzNzM4LCAzNzQ1LCAzNzUwLCAzNzYxLCAzNzY5LCAKLSAgICAzNzc3LCAzNzgzLCAzNzkyLCAzNzk3LCAzODAyLCAzODA5LCAzODE0LCAzODIwLCAzODI2LCAzODMyLCAzODQxLCAzODQ5LCAKLSAgICAzODU0LCAzODYyLCAzODY4LCAzODc2LCAzODg0LCAzODkwLCAzODk2LCAzOTAyLCAzOTEwLCAzOTE4LCAzOTIzLCAzOTMxLCAKLSAgICAzOTM3LCAzOTQyLCAzOTQ5LCAzOTU3LCAzOTY2LCAzOTczLCAzOTgwLCAzOTkwLCAzOTk3LCA0MDA0LCA0MDE0LCA0MDIxLCAKLSAgICA0MDI4LCA0MDM1LCA0MDQxLCA0MDQ3LCA0MDU2LCA0MDY4LCA0MDcyLCA0MDc5LCA0MDg0LCA0MDg4LCA0MDkzLCA0MTAxLCAKLSAgICA0MTA4LCA0MTEzLCA0MTE4LCA0MTIyLCA0MTI3LCA0MTMyLCA0MTM2LCA0MTQxLCA0MTQ3LCA0MTUzLCA0MTU5LCA0MTY2LCAKLSAgICA0MTcxLCA0MTc2LCA0MTgxLCA0MTg2LCA0MTkyLCA0MTk0LCA0MTk5LCA0MjAzLCA0MjA5LCA0MjE1LCA0MjIxLCA0MjI2LCAKLSAgICA0MjMzLCA0MjQwLCA0MjQ2LCA0MjUzLCA0MjYxLCA0MjY5LCA0Mjc0LCA0Mjc5LCA0MjgzLCA0Mjg4LCA0MjkwLCA0MjkyLCAKLSAgICA0Mjk1LCA0Mjk3LCA0Mjk5LCA0MzA0LCA0MzA5LCA0MzE1LCA0MzIwLCA0MzI0LCA0MzI4LCA0MzMzLCA0MzQxLCA0MzQ3LCAKLSAgICA0MzUyLCA0MzU4LCA0MzYzLCA0MzY5LCA0Mzc3LCA0Mzg1LCA0Mzg5LCA0MzkzLCA0Mzk4LCA0NDA0LCA0NDEwLCA0NDE2LCAKLSAgICA0NDIyLCA0NDI3LCA0NDM1LCA0NDQ0LCA0NDUzLCA0NDU3LCA0NDYzLCA0NDcwLCA0NDc3LCA0NDg0LCA0NDkxLCA0NDk1LCAKLSAgICA0NTAxLCA0NTA2LCA0NTExLCA0NTE2LCA0NTIxLCA0NTIzLCA0NTI2LCA0NTI5LCA0NTMyLCA0NTM1LCA0NTM3LCA0NTQxLCAKLSAgICA0NTQ1LCA0NTUxLCA0NTU0LCA0NTU5LCA0NTY1LCA0NTcxLCA0NTc0LCA0NTc5LCA0NTg0LCA0NTg4LCA0NTkzLCA0NTk5LCAKLSAgICA0NjA1LCA0NjExLCA0NjE2LCA0NjIxLCA0NjI2LCA0NjI5LCA0NjM1LCA0NjQwLCA0NjQ1LCA0NjQ5LCA0NjU0LCA0NjYwLCAKLSAgICA0NjY2LCA0NjY5LCA0NjczLCA0Njc3LCA0NjgxLCA0Njg0LCA0Njg3LCA0NjkyLCA0Njk2LCA0NzAzLCA0NzA3LCA0NzEzLCAKLSAgICA0NzE3LCA0NzIzLCA0NzI3LCA0NzMxLCA0NzM1LCA0NzQwLCA0NzQ1LCA0NzUxLCA0NzU2LCA0NzYzLCA0NzY5LCA0Nzc1LCAKLSAgICA0NzgxLCA0Nzg0LCA0Nzg4LCA0NzkyLCA0Nzk1LCA0Nzk5LCA0ODA0LCA0ODA5LCA0ODEzLCA0ODE3LCA0ODIzLCA0ODI3LCAKLSAgICA0ODMxLCA0ODM2LCA0ODQyLCA0ODQ3LCA0ODUyLCA0ODU2LCA0ODYyLCA0ODY3LCA0ODcyLCA0ODc3LCA0ODgyLCA0ODg4LCAKLSAgICA0ODkxLCA0ODk1LCA0OTAwLCA0OTA1LCA0OTE0LCA0OTIwLCA0OTI1LCA0OTI5LCA0OTM0LCA0OTM4LCA0OTQzLCA0OTQ3LCAKLSAgICA0OTUxLCA0OTU2LCA0OTU5LCA0OTY1LCA0OTcwLCA0OTc1LCA0OTgwLCA0OTg1LCA0OTkwLCA0OTk1LCA1MDAxLCA1MDA3LCAKLSAgICA1MDEyLCA1MDE3LCA1MDIyLCA1MDI4LCA1MDMzLCA1MDM5LCA1MDQ0LCA1MDQ5LCA1MDU2LCA1MDYzLCA1MDY2LCA1MDcwLCAKLSAgICA1MDc3LCAwLCAwLCA1MDg0LCA1MDg3LCA1MDk1LCA1MTA0LCA1MTE0LCAwLCAwLCAwLCAwLCAwLCA1MTE4LCA1MTIxLCAKLSAgICA1MTI2LCA1MTM0LCA1MTM5LCA1MTQ3LCA1MTU1LCAwLCA1MTYzLCAwLCA1MTcxLCA1MTc5LCA1MTg3LCA1MTk4LCA1MjAzLCAKLSAgICA1MjA4LCA1MjEzLCA1MjE4LCA1MjIzLCA1MjI4LCA1MjMzLCA1MjM4LCA1MjQzLCA1MjQ4LCA1MjUzLCA1MjU4LCA1MjYzLCAKLSAgICA1MjY4LCA1MjczLCA1Mjc4LCAwLCA1MjgzLCA1Mjg4LCA1MjkzLCA1Mjk4LCA1MzAzLCA1MzA4LCA1MzEzLCA1MzE4LCAKLSAgICA1MzI2LCA1MzM0LCA1MzQyLCA1MzUwLCA1MzU4LCA1MzY2LCA1Mzc3LCA1MzgyLCA1Mzg3LCA1MzkyLCA1Mzk3LCA1NDAyLCAKLSAgICA1NDA3LCA1NDEyLCA1NDE3LCA1NDIyLCA1NDI3LCA1NDMyLCA1NDM3LCA1NDQyLCA1NDQ3LCA1NDUyLCA1NDU3LCA1NDYyLCAKLSAgICA1NDY4LCA1NDczLCA1NDc4LCA1NDgzLCA1NDg4LCA1NDkzLCA1NDk4LCA1NTAzLCA1NTExLCA1NTE5LCA1NTI3LCA1NTM1LCAKLSAgICA1NTQzLCA1NTQ4LCA1NTUyLCA1NTU2LCA1NTYzLCA1NTczLCA1NTgzLCA1NTg3LCA1NTkxLCA1NTk1LCA1NjAxLCA1NjA4LCAKLSAgICA1NjEyLCA1NjE3LCA1NjIxLCA1NjI2LCA1NjMwLCA1NjM1LCA1NjM5LCA1NjQ0LCA1NjQ5LCA1NjU0LCA1NjU5LCA1NjY0LCAKLSAgICA1NjY5LCA1Njc0LCA1Njc5LCA1Njg0LCA1Njg5LCA1Njk0LCA1Njk5LCA1NzA0LCA1NzA5LCA1NzE0LCA1NzE4LCA1NzIyLCAKLSAgICA1NzI4LCA1NzMyLCA1NzM3LCA1NzQzLCA1NzUwLCA1NzU1LCA1NzYwLCA1NzY3LCA1NzcyLCA1Nzc3LCA1NzgzLCA1NzkxLCAKLSAgICA1ODAwLCA1ODEwLCA1ODE4LCA1ODIzLCA1ODI4LCA1ODMzLCA1ODQwLCA1ODQ1LCA1ODUxLCA1ODU2LCA1ODYxLCA1ODY2LCAKLSAgICA1ODcxLCA1ODc2LCA1ODgxLCA1ODg5LCA1ODk1LCA1OTAwLCA1OTA0LCA1OTA5LCA1OTE0LCA1OTE5LCA1OTI0LCA1OTI5LCAKLSAgICA1OTM0LCA1OTM5LCA1OTQzLCA1OTQ5LCA1OTUzLCA1OTU4LCA1OTYzLCA1OTY4LCA1OTcyLCA1OTc3LCA1OTgyLCA1OTg3LCAKLSAgICA1OTkyLCA1OTk2LCA2MDAxLCA2MDA1LCA2MDEwLCA2MDE1LCA2MDIwLCA2MDI1LCA2MDMxLCA2MDM2LCA2MDQyLCA2MDQ2LCAKLSAgICA2MDUxLCA2MDU1LCA2MDU5LCA2MDY0LCA2MDY5LCA2MDc0LCA2MDc5LCA2MDg0LCA2MDg5LCA2MDk0LCA2MDk4LCA2MTA0LCAKLSAgICA2MTA4LCA2MTEzLCA2MTE4LCA2MTIzLCA2MTI3LCA2MTMyLCA2MTM3LCA2MTQyLCA2MTQ3LCA2MTUxLCA2MTU2LCA2MTYwLCAKLSAgICA2MTY1LCA2MTcwLCA2MTc1LCA2MTgwLCA2MTg2LCA2MTkxLCA2MTk3LCA2MjAxLCA2MjA2LCA2MjEwLCA2MjE4LCA2MjIzLCAKLSAgICA2MjI4LCA2MjMzLCA2MjQwLCA2MjQ1LCA2MjUxLCA2MjU2LCA2MjYxLCA2MjY2LCA2MjcxLCA2Mjc2LCA2MjgxLCA2Mjg5LCAKLSAgICA2Mjk1LCA2MzAwLCA2MzA1LCA2MzEwLCA2MzE1LCA2MzIwLCA2MzI2LCA2MzMyLCA2MzM5LCA2MzQ2LCA2MzU1LCA2MzY0LCAKLSAgICA2MzcxLCA2Mzc4LCA2Mzg3LCA2Mzk2LCA2NDAxLCA2NDA2LCA2NDExLCA2NDE2LCA2NDIxLCA2NDI2LCA2NDMxLCA2NDM2LCAKLSAgICA2NDQ3LCA2NDU4LCA2NDYzLCA2NDY4LCA2NDc1LCA2NDgyLCA2NDkwLCA2NDk4LCA2NTAzLCA2NTA4LCA2NTEzLCA2NTE4LCAKLSAgICA2NTIyLCA2NTI2LCA2NTMwLCA2NTM1LCA2NTQwLCA2NTQ0LCA2NTUxLCA2NTU2LCA2NTY2LCA2NTc2LCA2NTgyLCA2NTg4LCAKLSAgICA2NTk2LCA2NjA0LCA2NjEyLCA2NjIwLCA2NjI3LCA2NjM0LCA2NjQzLCA2NjUyLCA2NjYwLCA2NjY4LCA2Njc2LCA2Njg0LCAKLSAgICA2NjkxLCA2Njk4LCA2NzA1LCA2NzEyLCA2NzE4LCA2NzI0LCA2NzMwLCA2NzM2LCA2NzQ0LCA2NzUyLCA2NzU5LCA2NzY2LCAKLSAgICA2Nzc1LCA2Nzg0LCA2NzkwLCA2Nzk2LCA2ODA0LCA2ODEyLCA2ODIwLCA2ODI4LCA2ODM0LCA2ODQwLCA2ODQ4LCA2ODU2LCAKLSAgICA2ODY0LCA2ODcyLCA2ODc5LCA2ODg2LCA2ODk0LCA2OTAyLCA2OTEwLCA2OTE4LCA2OTIzLCA2OTI4LCA2OTM1LCA2OTQyLCAKLSAgICA2OTUyLCA2OTYyLCA2OTY2LCA2OTc0LCA2OTgyLCA2OTg4LCA2OTk0LCA3MDAyLCA3MDEwLCA3MDE3LCA3MDI0LCA3MDMyLCAKLSAgICA3MDQwLCA3MDQ3LCA3MDU0LCA3MDYyLCA3MDcwLCA3MDc1LCA3MDgyLCA3MDg5LCA3MDk1LCA3MTAxLCA3MTA3LCA3MTEzLCAKLSAgICA3MTIxLCA3MTI5LCA3MTM0LCA3MTM5LCA3MTQ2LCA3MTUzLCA3MTYwLCA3MTY3LCA3MTc0LCA3MTgxLCA3MTg4LCA3MTk1LCAKLSAgICA3MjAzLCA3MjExLCA3MjE4LCA3MjI1LCA3MjMxLCA3MjM3LCA3MjQzLCA3MjQ5LCA3MjU3LCA3MjY1LCA3MjcxLCA3Mjc3LCAKLSAgICA3Mjg0LCA3MjkxLCA3Mjk3LCA3MzAzLCA3MzEwLCA3MzE3LCA3MzI0LCA3MzMxLCA3MzM5LCA3MzQ3LCA3MzU0LCA3MzYxLCAKLSAgICA3MzcwLCA3Mzc5LCA3Mzg2LCA3MzkzLCA3NDAwLCA3NDA3LCA3NDE0LCA3NDIxLCA3NDI4LCA3NDM1LCA3NDQyLCA3NDQ5LCAKLSAgICA3NDU2LCA3NDYzLCA3NDcwLCA3NDc3LCA3NDg0LCA3NDkxLCA3NDk4LCA3NTA1LCA3NTEyLCA3NTE5LCA3NTI1LCA3NTMxLCAKLSAgICA3NTM4LCA3NTQ1LCA3NTUwLCA3NTU1LCA3NTYwLCA3NTY1LCA3NTcwLCA3NTc1LCA3NTgwLCA3NTg1LCA3NTkwLCA3NTk1LCAKLSAgICA3NjAxLCA3NjA3LCA3NjE2LCA3NjI1LCA3NjM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3NjQzLCA3NjQ4LCA3NjUzLCA3NjU4LCA3NjYzLCA3NjY4LCA3NjczLCA3Njc4LCA3NjgzLCA3Njg3LCA3NjkyLCA3Njk3LCAKLSAgICA3NzAyLCA3NzA3LCA3NzEyLCA3NzE3LCA3NzIyLCA3NzI3LCA3NzMyLCA3NzM3LCA3NzQyLCA3NzQ3LCA3NzUyLCA3NzU3LCAKLSAgICA3NzYyLCA3NzY3LCA3NzcyLCA3Nzc3LCA3NzgxLCA3Nzg2LCA3NzkxLCA3Nzk2LCA3ODAxLCA3ODA2LCA3ODExLCA3ODE2LCAKLSAgICA3ODIxLCA3ODI2LCAwLCAwLCA3ODMxLCA3ODM4LCA3ODQxLCA3ODQ1LCA3ODQ5LCA3ODUyLCA3ODU2LCAwLCA3ODYwLCAKLSAgICA3ODY1LCA3ODcwLCA3ODc1LCA3ODgwLCA3ODg1LCA3ODkwLCA3ODk1LCA3OTAwLCA3OTA0LCA3OTA5LCA3OTE0LCA3OTE5LCAKLSAgICA3OTI0LCA3OTI5LCA3OTM0LCA3OTM5LCA3OTQ0LCA3OTQ5LCA3OTU0LCA3OTU5LCA3OTY0LCA3OTY5LCA3OTc0LCA3OTc5LCAKLSAgICA3OTg0LCA3OTg5LCA3OTk0LCA3OTk4LCA4MDAzLCA4MDA4LCA4MDEzLCA4MDE4LCA4MDIzLCA4MDI4LCA4MDMzLCA4MDM4LCAKLSAgICA4MDQzLCA4MDQ4LCAwLCA4MDU1LCA4MDYwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDYzLCA4MDY4LCA4MDczLCA4MDc4LCAKLSAgICA4MDg1LCA4MDkyLCA4MDk3LCA4MTAyLCA4MTA3LCA4MTEyLCA4MTE3LCA4MTIyLCA4MTI3LCA4MTM0LCA4MTM5LCA4MTQ2LCAKLSAgICA4MTUzLCA4MTU4LCA4MTY1LCA4MTcwLCA4MTc1LCA4MTgwLCA4MTg3LCA4MTkyLCA4MTk3LCA4MjA0LCA4MjEzLCA4MjE4LCAKLSAgICA4MjIzLCA4MjI4LCA4MjMzLCA4MjM5LCA4MjQ0LCA4MjUxLCA4MjU4LCA4MjY1LCA4MjcwLCA4Mjc1LCA4MjgwLCA4Mjg1LCAKLSAgICA4MjkwLCA4Mjk1LCA4MzA1LCA4MzEwLCA4MzE4LCA4MzIzLCA4MzI4LCA4MzMzLCA4MzM4LCA4MzQ1LCA4MzUyLCA4MzU5LCAKLSAgICA4MzY1LCA4MzcwLCA4Mzc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Mzg0LCA4Mzg4LCA4MzkyLCA4Mzk2LCA4NDAwLCAKLSAgICA4NDA0LCA4NDA4LCA4NDEyLCA4NDE2LCA4NDIwLCA4NDI0LCA4NDI5LCA4NDMzLCA4NDM3LCA4NDQyLCA4NDQ2LCA4NDUxLCAKLSAgICA4NDU1LCA4NDU5LCA4NDYzLCA4NDY4LCA4NDcyLCA4NDc3LCA4NDgxLCA4NDg1LCA4NDg5LCA4NDkzLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA4NDk3LCA4NTA0LCA4NTEyLCA4NTE5LCA4NTI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NTI5LCAKLSAgICA4NTMyLCA4NTM2LCA4NTQxLCAwLCAwLCA4NTQ1LCA4NTUxLCA4NTU3LCA4NTYwLCA4NTY3LCA4NTc2LCA4NTc5LCA4NTgyLCAKLSAgICA4NTg3LCA4NTkzLCA4NTk3LCA4NjA1LCA4NjExLCA4NjE3LCA4NjI1LCA4NjI5LCA4NjM0LCA4NjQ0LCA4NjQ5LCA4NjUzLCAKLSAgICA4NjU3LCA4NjYxLCAwLCAwLCA4NjY0LCA4NjcxLCAwLCA4Njc1LCA4Njc5LCA4Njg2LCA4NjkyLCA4Njk5LCA4NzA1LCAKLSAgICA4NzExLCA4NzE1LCA4NzE5LCA4NzI1LCA4NzI5LCA4NzMzLCA4NzM3LCA4NzQxLCA4NzQ1LCA4NzQ5LCA4NzUzLCA4NzU3LCAKLSAgICA4NzYxLCA4NzY1LCA4NzY5LCA4NzczLCA4Nzc3LCA4NzgxLCA4Nzg1LCA4Nzg5LCA4NzkzLCA4ODAxLCA4ODA5LCA4ODE4LCAKLSAgICA4ODI3LCA4ODM2LCA4ODM5LCA4ODQzLCA4ODQ3LCA4ODUxLCA4ODU1LCA4ODU5LCA4ODYzLCA4ODY3LCA4ODcxLCA4ODc2LCAKLSAgICA4ODgwLCA4ODgzLCA4ODg2LCA4ODg5LCA4ODkyLCA4ODk1LCA4ODk4LCA4OTAxLCA4OTA0LCA4OTA4LCA4OTExLCA4OTE0LCAKLSAgICA4OTE5LCA4OTI0LCA4OTMwLCA4OTMzLCA4OTQwLCA4OTQ5LCA4OTU0LCA4OTU4LCAwLCA4OTY1LCA4OTcwLCA4OTc0LCAKLSAgICA4OTc4LCA4OTgyLCA4OTg2LCA4OTkwLCA4OTk0LCA4OTk4LCA5MDAyLCA5MDA2LCA5MDEwLCA5MDE1LCA5MDIwLCA5MDI3LCAKLSAgICA5MDMzLCA5MDM5LCA5MDQ1LCA5MDUwLCA5MDU4LCA5MDY2LCA5MDcxLCA5MDc3LCA5MDgzLCA5MDg5LCA5MDk1LCA5MDk5LCAKLSAgICA5MTAzLCA5MTA3LCA5MTE0LCA5MTI0LCA5MTI4LCA5MTMyLCA5MTM2LCA5MTQyLCA5MTUwLCA5MTU0LCA5MTU4LCA5MTY1LCAKLSAgICA5MTY5LCA5MTczLCA5MTc3LCA5MTg0LCA5MTkxLCA5MjAzLCA5MjA3LCA5MjExLCA5MjE1LCA5MjI1LCA5MjM0LCA5MjM4LCAKLSAgICA5MjQ1LCA5MjUyLCA5MjU5LCA5MjY4LCA5Mjc5LCA5Mjg3LCA5MjkxLCA5MzAwLCA5MzExLCA5MzE5LCA5MzMyLCA5MzQwLCAKLSAgICA5MzQ4LCA5MzU2LCA5MzY0LCA5MzcwLCA5Mzc5LCA5Mzg2LCA5MzkwLCA5Mzk4LCA5NDAyLCA5NDA5LCA5NDE3LCA5NDIxLCAKLSAgICA5NDI3LCA5NDM0LCA5NDQxLCA5NDQ1LCA5NDUzLCA5NDU3LCA5NDY0LCA5NDY4LCA5NDc2LCA5NDgwLCA5NDg4LCA5NDk0LCAKLSAgICA5NTAwLCA5NTA3LCA5NTE0LCA5NTIxLCA5NTI3LCA5NTMxLCA5NTM4LCA5NTQ2LCA5NTUyLCA5NTU5LCA5NTY2LCA5NTcyLCAKLSAgICA5NTgxLCA5NTg5LCA5NTk2LCA5NjAyLCA5NjA2LCA5NjA5LCA5NjEzLCA5NjE5LCA5NjI3LCA5NjMxLCA5NjM3LCA5NjQzLCAKLSAgICA5NjQ5LCA5NjU2LCA5NjU5LCA5NjY2LCA5NjcxLCA5Njc5LCA5Njg0LCA5Njg4LCA5NzAwLCA5NzEyLCA5NzE4LCA5NzI0LCAKLSAgICA5NzI5LCA5NzM1LCA5NzQwLCA5NzQ2LCA5NzU2LCA5NzYzLCA5NzcyLCA5NzgyLCA5Nzg4LCA5NzkzLCA5Nzk4LCA5ODAyLCAKLSAgICA5ODA2LCA5ODExLCA5ODE2LCA5ODIyLCA5ODMwLCA5ODM4LCA5ODQ5LCA5ODU0LCA5ODYyLCA5ODcwLCA5ODc3LCA5ODgzLCAKLSAgICA5ODg5LCA5ODk1LCA5OTAxLCA5OTA3LCA5OTEzLCA5OTE5LCA5OTI1LCA5OTMxLCA5OTM4LCA5OTQ1LCA5OTUyLCA5OTU4LCAKLSAgICA5OTY2LCA5OTc0LCA5OTgwLCA5OTg3LCA5OTk0LCA5OTk5LCAxMDAwNCwgMTAwMDgsIDEwMDE1LCAxMDAyMiwgMTAwMzEsIAotICAgIDEwMDQwLCAxMDA0MywgMTAwNDgsIDEwMDUzLCAwLCAxMDA1OCwgMTAwNjIsIDEwMDY2LCAxMDA3MiwgMTAwNzYsIDEwMDgwLCAKLSAgICAxMDA4NiwgMTAwOTAsIDEwMDk4LCAxMDEwMiwgMTAxMDYsIDEwMTEwLCAxMDExNCwgMTAxMTgsIDEwMTI0LCAxMDEyOCwgCi0gICAgMTAxMzQsIDEwMTM4LCAxMDE0MiwgMTAxNDYsIDEwMTUwLCAxMDE1NCwgMTAxNTksIDEwMTYyLCAxMDE2NiwgMTAxNzEsIAotICAgIDEwMTc1LCAxMDE3OSwgMTAxODMsIDEwMTg3LCAxMDE5MSwgMTAxOTcsIDEwMjAzLCAxMDIwOSwgMTAyMTMsIDEwMjE3LCAKLSAgICAxMDIyMiwgMTAyMjYsIDEwMjMwLCAxMDIzNSwgMTAyMzksIDEwMjQzLCAxMDI1MCwgMTAyNTcsIDEwMjYxLCAxMDI2NSwgCi0gICAgMTAyNzAsIDEwMjc0LCAxMDI3OCwgMTAyODEsIDEwMjg2LCAxMDI4OSwgMTAyOTIsIDEwMjk3LCAxMDMwMiwgMTAzMDYsIAotICAgIDEwMzEwLCAxMDMxNiwgMTAzMjIsIDEwMzI1LCAwLCAwLCAxMDMyOCwgMTAzMzQsIDEwMzQwLCAxMDM0NiwgMTAzNTYsIAotICAgIDEwMzY4LCAxMDM4MCwgMTAzOTcsIDEwNDA5LCAxMDQyMCwgMTA0MjcsIDEwNDM0LCAxMDQ0NSwgMTA0NjAsIDEwNDcxLCAKLSAgICAxMDQ3NywgMTA0ODYsIDEwNDk0LCAxMDUwNiwgMTA1MTYsIDEwNTI0LCAxMDUzNiwgMTA1NDMsIDEwNTUxLCAxMDU2MywgCi0gICAgMTA1NjksIDEwNTc1LCAxMDU4MywgMTA1OTEsIDEwNTk4LCAxMDYwMywgMTA2MTMsIDEwNjIwLCAxMDYzMCwgMTA2NDAsIAotICAgIDEwNjUzLCAxMDY2NywgMTA2ODEsIDEwNjkxLCAxMDcwMiwgMTA3MTMsIDEwNzI2LCAxMDczOSwgMTA3NTMsIDEwNzY1LCAKLSAgICAxMDc3NywgMTA3OTAsIDEwODAzLCAxMDgxNSwgMTA4MjgsIDEwODM2LCAxMDg0NCwgMTA4NDksIDEwODU0LCAxMDg1OSwgCi0gICAgMTA4NjQsIDEwODY5LCAxMDg3NCwgMTA4NzksIDEwODg0LCAxMDg4OSwgMTA4OTQsIDEwODk5LCAxMDkwNCwgMTA5MDksIAotICAgIDEwOTE0LCAxMDkxOSwgMTA5MjQsIDEwOTI5LCAxMDkzNCwgMTA5MzksIDEwOTQ0LCAxMDk0OSwgMTA5NTQsIDEwOTU5LCAKLSAgICAxMDk2NCwgMTA5NjksIDEwOTc0LCAxMDk3OSwgMTA5ODQsIDEwOTg5LCAxMDk5NCwgMTA5OTksIDExMDA0LCAxMTAwOCwgCi0gICAgMTEwMTMsIDExMDE4LCAxMTAyMywgMTEwMjgsIDExMDMzLCAxMTAzNywgMTEwNDEsIDExMDQ1LCAxMTA0OSwgMTEwNTMsIAotICAgIDExMDU3LCAxMTA2MSwgMTEwNjUsIDExMDY5LCAxMTA3MywgMTEwNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDExMDgyLCAxMTA4NiwgMTEwODksIDExMDkyLCAxMTA5NSwgMTEwOTgsIDExMTAxLCAxMTEwNCwgCi0gICAgMTExMDcsIDExMTEwLCAxMTExMywgMTExMTYsIDExMTIwLCAxMTEyMywgMTExMjYsIDExMTI5LCAxMTEzMywgMTExMzYsIAotICAgIDExMTQwLCAxMTE0MywgMTExNDcsIDExMTUwLCAxMTE1NCwgMTExNTgsIDExMTYyLCAxMTE2NiwgMTExNjksIDExMTczLCAKLSAgICAxMTE3NywgMTExODEsIDExMTg1LCAxMTE4OCwgMTExOTIsIDExMTk4LCAxMTIwMSwgMTEyMDUsIDExMjA5LCAxMTIxMiwgCi0gICAgMTEyMTYsIDExMjE5LCAxMTIyNSwgMTEyMzEsIDExMjM3LCAxMTI0MiwgMTEyNDksIDExMjU2LCAxMTI2NCwgMTEyNzEsIAotICAgIDExMjc3LCAxMTI4MywgMTEyOTAsIDExMjk1LCAxMTMwMCwgMTEzMDUsIDExMzEwLCAxMTMxNiwgMTEzMjAsIDExMzIzLCAKLSAgICAxMTMyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNzUsIDc4LCA4MiwgODYsIDkxLCA5NiwgMTAxLCAxMDUsIDExMCwgMTE1LCAxMjAsIDEyNCwgMTI5LCAxMzQsIDEzOCwgMTQyLCAKKyAgICAxNDYsIDE1MCwgMTU1LCAxNjAsIDE2NCwgMTY4LCAxNzMsIDE3NywgMTgyLCAxODcsIDE5MiwgMTk3LCAyMDIsIDIwNSwgCisgICAgMjA5LCAyMTIsIDIxNiwgMjE5LCAyMjMsIDIyNywgMjMyLCAyMzcsIDI0MiwgMjQ2LCAyNTEsIDI1NiwgMjYxLCAyNjUsIAorICAgIDI3MCwgMjc1LCAyNzksIDI4MywgMjg3LCAyOTEsIDI5NiwgMzAxLCAzMDUsIDMwOSwgMzE0LCAzMTgsIDMyMywgMzI4LCAKKyAgICAzMzMsIDMzOCwgMzQzLCAzNDcsIDM1MCwgMzU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTYsIDM2MCwgMzY1LCAKKyAgICAzNjgsIDM3MSwgMzc0LCAzNzcsIDM4MCwgMzgzLCAzODUsIDM4OCwgMzk0LCA0MDIsIDQwNCwgNDA4LCA0MTEsIDQxMywgCisgICAgNDE2LCA0MTksIDQyMiwgNDI1LCA0MjksIDQzMiwgNDM1LCA0MzksIDQ0MSwgNDQ0LCA0NTAsIDQ1OCwgNDY1LCA0NzIsIAorICAgIDQ3OSwgNDg0LCA0OTEsIDQ5NywgNTA0LCA1MTEsIDUxOCwgNTI2LCA1MzEsIDUzOSwgNTQ2LCA1NTIsIDU1OSwgNTY2LCAKKyAgICA1NzQsIDU4MSwgNTg5LCA1OTcsIDYwMiwgNjEwLCA2MTcsIDYyMywgNjMwLCA2MzcsIDY0NCwgNjQ3LCA2NTMsIDY2MCwgCisgICAgNjY2LCA2NzMsIDY4MCwgNjg3LCA2OTIsIDY5OCwgNzA1LCA3MTEsIDcxOCwgNzI1LCA3MzIsIDc0MCwgNzQ1LCA3NTMsIAorICAgIDc2MCwgNzY2LCA3NzMsIDc4MCwgNzg4LCA3OTUsIDgwMywgODExLCA4MTYsIDgyNCwgODMxLCA4MzcsIDg0NCwgODUxLCAKKyAgICA4NTgsIDg2MSwgODY3LCA4NzQsIDg4MCwgODg3LCA4OTQsIDkwMSwgOTA2LCA5MTQsIDkyMSwgOTI4LCA5MzUsIDk0MiwgCisgICAgOTQ5LCA5NTYsIDk2MywgOTcwLCA5NzgsIDk4NiwgOTk0LCAxMDAyLCAxMDEwLCAxMDE4LCAxMDI2LCAxMDM0LCAxMDQxLCAKKyAgICAxMDQ4LCAxMDU1LCAxMDYyLCAxMDY5LCAxMDc2LCAxMDgzLCAxMDkwLCAxMDk3LCAxMTA0LCAxMTExLCAxMTE4LCAxMTI2LCAKKyAgICAxMTM0LCAxMTQyLCAxMTUwLCAxMTU4LCAxMTY2LCAxMTc0LCAxMTgyLCAxMTkwLCAxMTk4LCAxMjA1LCAxMjEyLCAxMjIwLCAKKyAgICAxMjI4LCAxMjM2LCAxMjQ0LCAxMjUyLCAxMjYwLCAxMjY4LCAxMjc2LCAxMjg0LCAxMjkwLCAxMjk1LCAxMzAwLCAxMzA4LCAKKyAgICAxMzE2LCAxMzI0LCAxMzMyLCAxMzM3LCAxMzQ0LCAxMzUxLCAxMzU5LCAxMzY3LCAxMzc1LCAxMzgzLCAxMzkzLCAxNDAzLCAKKyAgICAxNDEwLCAxNDE3LCAxNDI0LCAxNDMxLCAxNDM5LCAxNDQ3LCAxNDU1LCAxNDYzLCAxNDc0LCAxNDc5LCAxNDg0LCAxNDkxLCAKKyAgICAxNDk4LCAxNTA1LCAxNTEyLCAxNTE5LCAxNTI2LCAxNTMxLCAxNTM2LCAxNTQzLCAxNTUwLCAxNTU4LCAxNTY2LCAxNTc0LCAKKyAgICAxNTgyLCAxNTg5LCAxNTk2LCAxNjA0LCAxNjEyLCAxNjIwLCAxNjI4LCAxNjM2LCAxNjQ0LCAxNjUyLCAxNjYwLCAxNjY4LCAKKyAgICAxNjc2LCAxNjgzLCAxNjkwLCAxNjk3LCAxNzA0LCAxNzExLCAxNzE4LCAxNzI1LCAxNzMyLCAxNzQwLCAxNzQ4LCAxNzU1LCAKKyAgICAxNzYyLCAxNzY5LCAxNzc2LCAxNzg0LCAxNzkyLCAxODAwLCAxODA4LCAxODE2LCAxODIzLCAxODMwLCAxODM4LCAxODQ2LCAKKyAgICAxODU0LCAxODYyLCAxODY3LCAxODczLCAxODc5LCAxODg2LCAxODkzLCAxODk4LCAxOTAzLCAxOTA5LCAxOTE2LCAxOTIzLCAKKyAgICAxOTMwLCAxOTM3LCAxOTQ1LCAxOTUzLCAxOTU5LCAxOTY0LCAxOTY5LCAxOTc1LCAxOTgyLCAxOTg5LCAxOTk2LCAyMDAxLCAKKyAgICAyMDA2LCAyMDExLCAyMDE4LCAyMDI1LCAyMDMyLCAyMDM5LCAyMDQ2LCAyMDUxLCAyMDU5LCAyMDY5LCAyMDc4LCAyMDg1LCAKKyAgICAyMDkyLCAyMDk3LCAyMTAyLCAyMTA5LCAyMTE2LCAyMTIwLCAyMTI1LCAyMTMwLCAyMTM1LCAyMTQyLCAyMTUxLCAyMTU4LCAKKyAgICAyMTY1LCAyMTc0LCAyMTgxLCAyMTg4LCAyMTkzLCAyMjAwLCAyMjA3LCAyMjE0LCAyMjIxLCAyMjI4LCAyMjMzLCAyMjQwLCAKKyAgICAyMjQ3LCAyMjU1LCAyMjYwLCAyMjY1LCAyMjcwLCAyMjgwLCAyMjg0LCAyMjkwLCAyMjk2LCAyMzAyLCAyMzA4LCAyMzE2LCAKKyAgICAyMzI5LCAyMzM3LCAyMzQyLCAyMzUyLCAyMzU3LCAyMzYyLCAyMzcyLCAyMzc3LCAyMzg0LCAyMzkxLCAyMzk5LCAyNDA3LCAKKyAgICAyNDE0LCAyNDIxLCAyNDI4LCAyNDM1LCAyNDQ1LCAyNDU1LCAyNDY0LCAyNDczLCAyNDgzLCAyNDkzLCAyNTAzLCAyNTEzLCAKKyAgICAyNTE4LCAyNTI4LCAyNTM4LCAyNTQ4LCAyNTU4LCAyNTY2LCAyNTc0LCAyNTgxLCAyNTg4LCAyNTk2LCAyNjA0LCAyNjEyLCAKKyAgICAyNjIwLCAyNjI3LCAyNjM0LCAyNjQ0LCAyNjU0LCAyNjYyLCAyNjcwLCAyNjc4LCAyNjgzLCAyNjkzLCAyNjk4LCAyNzA1LCAKKyAgICAyNzEyLCAyNzE3LCAyNzIyLCAyNzMwLCAyNzM4LCAyNzQ4LCAyNzU4LCAyNzY1LCAyNzcyLCAyNzgwLCAyNzg4LCAyNzk2LCAKKyAgICAyODA0LCAyODEzLCAyODIyLCAyODMwLCAyODM4LCAyODQ3LCAyODU2LCAyODY1LCAyODc0LCAyODg0LCAyODk0LCAyOTAyLCAKKyAgICAyOTEwLCAyOTE5LCAyOTI4LCAyOTM3LCAyOTQ2LCAyOTU2LCAyOTY2LCAyOTc0LCAyOTgyLCAyOTkxLCAzMDAwLCAzMDA5LCAKKyAgICAzMDE4LCAzMDI3LCAzMDM2LCAzMDQxLCAzMDQ2LCAzMDU0LCAzMDYyLCAzMDcyLCAzMDgwLCAzMDg1LCAzMDkwLCAzMDk3LCAKKyAgICAzMTA0LCAzMTExLCAzMTE4LCAzMTI1LCAzMTMyLCAzMTQyLCAzMTUyLCAzMTYyLCAzMTcyLCAzMTc5LCAzMTg2LCAzMTk2LCAKKyAgICAzMjA2LCAzMjE0LCAzMjIyLCAzMjMwLCAzMjM4LCAzMjQ2LCAzMjUzLCAzMjYwLCAzMjY3LCAzMjczLCAzMjgwLCAzMjg3LCAKKyAgICAzMjk0LCAzMzAzLCAzMzEzLCAzMzIzLCAzMzMwLCAzMzM3LCAzMzQzLCAzMzQ4LCAzMzU0LCAzMzYwLCAzMzY2LCAzMzczLCAKKyAgICAzMzgwLCAzMzkxLCAzNDAxLCAzNDA4LCAzNDE1LCAzNDIyLCAzNDI5LCAzNDM0LCAzNDM5LCAzNDQ1LCAzNDUxLCAzNDU3LCAKKyAgICAzNDY1LCAzNDczLCAzNDgwLCAzNDg1LCAzNDkwLCAzNDk3LCAzNTAzLCAzNTEwLCAzNTE5LCAzNTI4LCAzNTM3LCAzNTQ0LCAKKyAgICAzNTUwLCAzNTU2LCAzNTYxLCAzNTY4LCAzNTc0LCAzNTgxLCAzNTg4LCAzNTk1LCAzNjAwLCAzNjA1LCAzNjE1LCAzNjIzLCAKKyAgICAzNjMyLCAzNjM3LCAzNjQyLCAzNjUyLCAzNjU5LCAzNjY3LCAzNjc2LCAzNjgxLCAzNjg3LCAzNjkzLCAzNzAwLCAzNzA1LCAKKyAgICAzNzEwLCAzNzIwLCAzNzI4LCAzNzM3LCAzNzQ1LCAzNzUzLCAzNzYyLCAzNzY3LCAzNzc0LCAzNzgxLCAzNzg2LCAzNzk3LCAKKyAgICAzODA1LCAzODEzLCAzODE5LCAzODI4LCAzODMzLCAzODM4LCAzODQ1LCAzODUxLCAzODU3LCAzODYzLCAzODY5LCAzODc4LCAKKyAgICAzODg2LCAzODkxLCAzODk5LCAzOTA1LCAzOTEzLCAzOTIxLCAzOTI3LCAzOTMzLCAzOTM5LCAzOTQ3LCAzOTU1LCAzOTYxLCAKKyAgICAzOTY5LCAzOTc1LCAzOTgwLCAzOTg3LCAzOTk1LCA0MDA0LCA0MDExLCA0MDE4LCA0MDI4LCA0MDM1LCA0MDQyLCA0MDUyLCAKKyAgICA0MDU5LCA0MDY2LCA0MDczLCA0MDc5LCA0MDg1LCA0MDk0LCA0MTA2LCA0MTExLCA0MTE4LCA0MTIzLCA0MTI3LCA0MTMyLCAKKyAgICA0MTQwLCA0MTQ3LCA0MTUyLCA0MTU3LCA0MTYxLCA0MTY2LCA0MTcxLCA0MTc1LCA0MTgwLCA0MTg2LCA0MTkyLCA0MTk4LCAKKyAgICA0MjA1LCA0MjEwLCA0MjE1LCA0MjIwLCA0MjI1LCA0MjMxLCA0MjMzLCA0MjM4LCA0MjQyLCA0MjQ4LCA0MjU0LCA0MjYwLCAKKyAgICA0MjY1LCA0MjcyLCA0Mjc5LCA0Mjg1LCA0MjkyLCA0MzAwLCA0MzA4LCA0MzEzLCA0MzE4LCA0MzIyLCA0MzI3LCA0MzI5LCAKKyAgICA0MzMxLCA0MzM0LCA0MzM2LCA0MzM5LCA0MzQ0LCA0MzQ5LCA0MzU1LCA0MzYwLCA0MzY0LCA0MzY4LCA0MzczLCA0MzgxLCAKKyAgICA0Mzg3LCA0MzkyLCA0Mzk4LCA0NDAzLCA0NDA5LCA0NDE3LCA0NDI1LCA0NDI5LCA0NDMzLCA0NDM4LCA0NDQ0LCA0NDUwLCAKKyAgICA0NDU2LCA0NDYyLCA0NDY3LCA0NDc1LCA0NDg0LCA0NDkzLCA0NDk4LCA0NTA0LCA0NTExLCA0NTE4LCA0NTI1LCA0NTMyLCAKKyAgICA0NTM2LCA0NTQyLCA0NTQ3LCA0NTUyLCA0NTU3LCA0NTYyLCA0NTY1LCA0NTY4LCA0NTcxLCA0NTc0LCA0NTc3LCA0NTgwLCAKKyAgICA0NTg0LCA0NTg4LCA0NTk0LCA0NTk3LCA0NjAyLCA0NjA4LCA0NjE0LCA0NjE3LCA0NjIyLCA0NjI3LCA0NjMxLCA0NjM2LCAKKyAgICA0NjQyLCA0NjQ4LCA0NjU0LCA0NjU5LCA0NjY0LCA0NjY5LCA0NjcyLCA0Njc4LCA0NjgzLCA0Njg4LCA0NjkyLCA0Njk3LCAKKyAgICA0NzAzLCA0NzA5LCA0NzEyLCA0NzE2LCA0NzIwLCA0NzI0LCA0NzI3LCA0NzMwLCA0NzM1LCA0NzM5LCA0NzQ2LCA0NzUwLCAKKyAgICA0NzU2LCA0NzYwLCA0NzY2LCA0NzcwLCA0Nzc0LCA0Nzc4LCA0NzgzLCA0Nzg4LCA0Nzk0LCA0Nzk5LCA0ODA2LCA0ODEyLCAKKyAgICA0ODE4LCA0ODI0LCA0ODI3LCA0ODMxLCA0ODM1LCA0ODM5LCA0ODQzLCA0ODQ4LCA0ODUzLCA0ODU3LCA0ODYxLCA0ODY3LCAKKyAgICA0ODcxLCA0ODc1LCA0ODgwLCA0ODg2LCA0ODkxLCA0ODk2LCA0OTAwLCA0OTA2LCA0OTExLCA0OTE2LCA0OTIxLCA0OTI2LCAKKyAgICA0OTMyLCA0OTM1LCA0OTM5LCA0OTQ0LCA0OTQ5LCA0OTU4LCA0OTY0LCA0OTY5LCA0OTczLCA0OTc4LCA0OTgyLCA0OTg3LCAKKyAgICA0OTkxLCA0OTk1LCA1MDAwLCA1MDA0LCA1MDEwLCA1MDE1LCA1MDIwLCA1MDI1LCA1MDMwLCA1MDM1LCA1MDQwLCA1MDQ2LCAKKyAgICA1MDUyLCA1MDU4LCA1MDYzLCA1MDY4LCA1MDc0LCA1MDgwLCA1MDg2LCA1MDkxLCA1MDk2LCA1MTAzLCA1MTEwLCA1MTE0LCAKKyAgICA1MTIwLCA1MTI3LCAwLCAwLCA1MTM0LCA1MTM3LCA1MTQ1LCA1MTU0LCA1MTY0LCAwLCAwLCAwLCAwLCAwLCA1MTY4LCAKKyAgICA1MTcxLCA1MTc2LCA1MTg0LCA1MTg5LCA1MTk3LCA1MjA1LCAwLCA1MjEzLCAwLCA1MjIxLCA1MjI5LCA1MjM3LCA1MjQ4LCAKKyAgICA1MjUzLCA1MjU4LCA1MjYzLCA1MjY4LCA1MjczLCA1Mjc4LCA1MjgzLCA1Mjg4LCA1MjkzLCA1Mjk4LCA1MzAzLCA1MzA4LCAKKyAgICA1MzEzLCA1MzE4LCA1MzIzLCA1MzI4LCAwLCA1MzMzLCA1MzM4LCA1MzQzLCA1MzQ4LCA1MzUzLCA1MzU4LCA1MzYzLCAKKyAgICA1MzY4LCA1Mzc2LCA1Mzg0LCA1MzkyLCA1NDAwLCA1NDA4LCA1NDE2LCA1NDI3LCA1NDMyLCA1NDM3LCA1NDQyLCA1NDQ3LCAKKyAgICA1NDUyLCA1NDU3LCA1NDYyLCA1NDY3LCA1NDcyLCA1NDc3LCA1NDgyLCA1NDg3LCA1NDkyLCA1NDk3LCA1NTAyLCA1NTA3LCAKKyAgICA1NTEyLCA1NTE4LCA1NTIzLCA1NTI4LCA1NTMzLCA1NTM4LCA1NTQzLCA1NTQ4LCA1NTUzLCA1NTYxLCA1NTY5LCA1NTc3LCAKKyAgICA1NTg1LCA1NTkzLCA1NTk4LCA1NjAyLCA1NjA2LCA1NjEzLCA1NjIzLCA1NjMzLCA1NjM3LCA1NjQxLCA1NjQ1LCA1NjUxLCAKKyAgICA1NjU4LCA1NjYyLCA1NjY3LCA1NjcxLCA1Njc2LCA1NjgwLCA1Njg1LCA1Njg5LCA1Njk0LCA1Njk5LCA1NzA0LCA1NzA5LCAKKyAgICA1NzE0LCA1NzE5LCA1NzI0LCA1NzI5LCA1NzM0LCA1NzM5LCA1NzQ0LCA1NzQ5LCA1NzU0LCA1NzU5LCA1NzY0LCA1NzY4LCAKKyAgICA1NzcyLCA1Nzc4LCA1NzgyLCA1Nzg3LCA1NzkzLCA1ODAwLCA1ODA1LCA1ODEwLCA1ODE3LCA1ODIyLCA1ODI3LCA1ODMzLCAKKyAgICA1ODQxLCA1ODUwLCA1ODYwLCA1ODY4LCA1ODczLCA1ODc4LCA1ODgzLCA1ODkwLCA1ODk1LCA1OTAxLCA1OTA2LCA1OTExLCAKKyAgICA1OTE2LCA1OTIxLCA1OTI2LCA1OTMxLCA1OTM5LCA1OTQ1LCA1OTUwLCA1OTU0LCA1OTU5LCA1OTY0LCA1OTY5LCA1OTc0LCAKKyAgICA1OTc5LCA1OTg0LCA1OTg5LCA1OTkzLCA1OTk5LCA2MDAzLCA2MDA4LCA2MDEzLCA2MDE4LCA2MDIyLCA2MDI3LCA2MDMyLCAKKyAgICA2MDM3LCA2MDQyLCA2MDQ2LCA2MDUxLCA2MDU1LCA2MDYwLCA2MDY1LCA2MDcwLCA2MDc1LCA2MDgxLCA2MDg2LCA2MDkyLCAKKyAgICA2MDk2LCA2MTAxLCA2MTA1LCA2MTA5LCA2MTE0LCA2MTE5LCA2MTI0LCA2MTI5LCA2MTM0LCA2MTM5LCA2MTQ0LCA2MTQ4LCAKKyAgICA2MTU0LCA2MTU4LCA2MTYzLCA2MTY4LCA2MTczLCA2MTc3LCA2MTgyLCA2MTg3LCA2MTkyLCA2MTk3LCA2MjAxLCA2MjA2LCAKKyAgICA2MjEwLCA2MjE1LCA2MjIwLCA2MjI1LCA2MjMwLCA2MjM2LCA2MjQxLCA2MjQ3LCA2MjUxLCA2MjU2LCA2MjYwLCA2MjY4LCAKKyAgICA2MjczLCA2Mjc4LCA2MjgzLCA2MjkwLCA2Mjk1LCA2MzAxLCA2MzA2LCA2MzExLCA2MzE2LCA2MzIxLCA2MzI2LCA2MzMxLCAKKyAgICA2MzM5LCA2MzQ1LCA2MzUwLCA2MzU1LCA2MzYwLCA2MzY1LCA2MzcwLCA2Mzc2LCA2MzgyLCA2Mzg5LCA2Mzk2LCA2NDA1LCAKKyAgICA2NDE0LCA2NDIxLCA2NDI4LCA2NDM3LCA2NDQ2LCA2NDUxLCA2NDU2LCA2NDYxLCA2NDY2LCA2NDcxLCA2NDc2LCA2NDgxLCAKKyAgICA2NDg2LCA2NDk3LCA2NTA4LCA2NTEzLCA2NTE4LCA2NTI1LCA2NTMyLCA2NTQwLCA2NTQ4LCA2NTUzLCA2NTU4LCA2NTYzLCAKKyAgICA2NTY4LCA2NTcyLCA2NTc2LCA2NTgwLCA2NTg1LCA2NTkwLCA2NTk0LCA2NjAxLCA2NjA2LCA2NjE2LCA2NjI2LCA2NjMyLCAKKyAgICA2NjM4LCA2NjQ2LCA2NjU0LCA2NjYyLCA2NjcwLCA2Njc3LCA2Njg0LCA2NjkzLCA2NzAyLCA2NzEwLCA2NzE4LCA2NzI2LCAKKyAgICA2NzM0LCA2NzQxLCA2NzQ4LCA2NzU1LCA2NzYyLCA2NzY4LCA2Nzc0LCA2NzgwLCA2Nzg2LCA2Nzk0LCA2ODAyLCA2ODA5LCAKKyAgICA2ODE2LCA2ODI1LCA2ODM0LCA2ODQwLCA2ODQ2LCA2ODU0LCA2ODYyLCA2ODcwLCA2ODc4LCA2ODg0LCA2ODkwLCA2ODk4LCAKKyAgICA2OTA2LCA2OTE0LCA2OTIyLCA2OTI5LCA2OTM2LCA2OTQ0LCA2OTUyLCA2OTYwLCA2OTY4LCA2OTczLCA2OTc4LCA2OTg1LCAKKyAgICA2OTkyLCA3MDAyLCA3MDEyLCA3MDE2LCA3MDI0LCA3MDMyLCA3MDM4LCA3MDQ0LCA3MDUyLCA3MDYwLCA3MDY3LCA3MDc0LCAKKyAgICA3MDgyLCA3MDkwLCA3MDk3LCA3MTA0LCA3MTEyLCA3MTIwLCA3MTI1LCA3MTMyLCA3MTM5LCA3MTQ2LCA3MTUzLCA3MTU5LCAKKyAgICA3MTY1LCA3MTczLCA3MTgxLCA3MTg2LCA3MTkxLCA3MTk5LCA3MjA3LCA3MjE1LCA3MjIzLCA3MjMxLCA3MjM5LCA3MjQ2LCAKKyAgICA3MjUzLCA3MjYxLCA3MjY5LCA3Mjc3LCA3Mjg1LCA3MjkyLCA3Mjk5LCA3MzA1LCA3MzExLCA3MzIwLCA3MzI5LCA3MzM2LCAKKyAgICA3MzQzLCA3MzUwLCA3MzU3LCA3MzY0LCA3MzcxLCA3Mzc4LCA3Mzg1LCA3MzkzLCA3NDAxLCA3NDA5LCA3NDE3LCA3NDI1LCAKKyAgICA3NDMzLCA3NDQyLCA3NDUxLCA3NDU4LCA3NDY1LCA3NDcyLCA3NDc5LCA3NDg2LCA3NDkzLCA3NTAwLCA3NTA3LCA3NTE0LCAKKyAgICA3NTIxLCA3NTI4LCA3NTM1LCA3NTQyLCA3NTQ5LCA3NTU2LCA3NTYzLCA3NTcwLCA3NTc3LCA3NTg0LCA3NTkxLCA3NTk3LCAKKyAgICA3NjAzLCA3NjEwLCA3NjE3LCA3NjIyLCA3NjI3LCA3NjMyLCA3NjM3LCA3NjQyLCA3NjQ3LCA3NjUyLCA3NjU3LCA3NjYyLCAKKyAgICA3NjY3LCA3NjczLCA3Njc5LCA3Njg4LCA3Njk3LCA3NzA2LCA3NzE1LCA3NzIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3NzMxLCA3NzM2LCA3NzQxLCA3NzQ2LCA3NzUxLCA3NzU2LCA3NzYxLCA3NzY2LCA3NzcxLCA3Nzc1LCAKKyAgICA3NzgwLCA3Nzg1LCA3NzkwLCA3Nzk1LCA3ODAwLCA3ODA1LCA3ODEwLCA3ODE1LCA3ODIwLCA3ODI1LCA3ODMwLCA3ODM1LCAKKyAgICA3ODQwLCA3ODQ1LCA3ODUwLCA3ODU1LCA3ODYwLCA3ODY1LCA3ODY5LCA3ODc0LCA3ODc5LCA3ODg0LCA3ODg5LCA3ODk0LCAKKyAgICA3ODk5LCA3OTA0LCA3OTA5LCA3OTE0LCAwLCAwLCA3OTE5LCA3OTI2LCA3OTI5LCA3OTMzLCA3OTM3LCA3OTQwLCA3OTQ0LCAKKyAgICAwLCA3OTQ4LCA3OTUzLCA3OTU4LCA3OTYzLCA3OTY4LCA3OTczLCA3OTc4LCA3OTgzLCA3OTg4LCA3OTkyLCA3OTk3LCAKKyAgICA4MDAyLCA4MDA3LCA4MDEyLCA4MDE3LCA4MDIyLCA4MDI3LCA4MDMyLCA4MDM3LCA4MDQyLCA4MDQ3LCA4MDUyLCA4MDU3LCAKKyAgICA4MDYyLCA4MDY3LCA4MDcyLCA4MDc3LCA4MDgyLCA4MDg2LCA4MDkxLCA4MDk2LCA4MTAxLCA4MTA2LCA4MTExLCA4MTE2LCAKKyAgICA4MTIxLCA4MTI2LCA4MTMxLCA4MTM2LCAwLCA4MTQzLCA4MTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCA4MTUxLCA4MTU2LCAKKyAgICA4MTYxLCA4MTY2LCA4MTczLCA4MTgwLCA4MTg1LCA4MTkwLCA4MTk1LCA4MjAwLCA4MjA1LCA4MjEwLCA4MjE1LCA4MjIyLCAKKyAgICA4MjI3LCA4MjM0LCA4MjQxLCA4MjQ2LCA4MjUzLCA4MjU4LCA4MjYzLCA4MjY4LCA4Mjc1LCA4MjgwLCA4Mjg1LCA4MjkyLCAKKyAgICA4MzAxLCA4MzA2LCA4MzExLCA4MzE2LCA4MzIxLCA4MzI3LCA4MzMyLCA4MzM5LCA4MzQ2LCA4MzUzLCA4MzU4LCA4MzYzLCAKKyAgICA4MzY4LCA4MzczLCA4Mzc4LCA4MzgzLCA4MzkzLCA4Mzk4LCA4NDA2LCA4NDExLCA4NDE2LCA4NDIxLCA4NDI2LCA4NDMzLCAKKyAgICA4NDQwLCA4NDQ3LCA4NDUzLCA4NDU5LCA4NDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NDczLCA4NDc3LCA4NDgxLCAKKyAgICA4NDg1LCA4NDg5LCA4NDkzLCA4NDk3LCA4NTAxLCA4NTA1LCA4NTA5LCA4NTEzLCA4NTE4LCA4NTIyLCA4NTI2LCA4NTMxLCAKKyAgICA4NTM1LCA4NTQwLCA4NTQ0LCA4NTQ4LCA4NTUyLCA4NTU3LCA4NTYxLCA4NTY2LCA4NTcwLCA4NTc0LCA4NTc4LCA4NTgyLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA4NTg2LCA4NTkzLCA4NjAxLCA4NjA4LCA4NjEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA4NjE4LCA4NjIxLCA4NjI1LCA4NjMwLCAwLCAwLCA4NjM0LCA4NjQwLCA4NjQ2LCA4NjQ5LCA4NjU2LCA4NjY1LCAKKyAgICA4NjY4LCA4NjcxLCA4Njc2LCA4NjgyLCA4Njg2LCA4Njk0LCA4NzAwLCA4NzA2LCA4NzE0LCA4NzE4LCA4NzIzLCA4NzM0LCAKKyAgICA4NzM5LCA4NzQzLCA4NzQ3LCA4NzUxLCAwLCAwLCA4NzU0LCA4NzYxLCAwLCA4NzY1LCA4NzY5LCA4Nzc2LCA4NzgyLCAKKyAgICA4Nzg5LCA4Nzk1LCA4ODAxLCA4ODA1LCA4ODA5LCA4ODE1LCA4ODE5LCA4ODIzLCA4ODI3LCA4ODMxLCA4ODM1LCA4ODM5LCAKKyAgICA4ODQzLCA4ODQ3LCA4ODUxLCA4ODU1LCA4ODU5LCA4ODYzLCA4ODY3LCA4ODcxLCA4ODc1LCA4ODc5LCA4ODgzLCA4ODkxLCAKKyAgICA4ODk5LCA4OTA5LCA4OTE4LCA4OTI3LCA4OTMwLCA4OTM0LCA4OTM4LCA4OTQyLCA4OTQ2LCA4OTUwLCA4OTU0LCA4OTU4LCAKKyAgICA4OTYyLCA4OTY3LCA4OTcxLCA4OTc0LCA4OTc3LCA4OTgwLCA4OTgzLCA4OTg2LCA4OTg5LCA4OTkyLCA4OTk1LCA4OTk5LCAKKyAgICA5MDAyLCA5MDA1LCA5MDEwLCA5MDE1LCA5MDIxLCA5MDI0LCA5MDMxLCA5MDQwLCA5MDQ1LCA5MDQ5LCAwLCA5MDU2LCAKKyAgICA5MDYxLCA5MDY1LCA5MDY5LCA5MDczLCA5MDc3LCA5MDgxLCA5MDg1LCA5MDg5LCA5MDkzLCA5MDk3LCA5MTAxLCA5MTA2LCAKKyAgICA5MTExLCA5MTE4LCA5MTI0LCA5MTMwLCA5MTM2LCA5MTQxLCA5MTQ5LCA5MTU3LCA5MTYyLCA5MTY4LCA5MTc0LCA5MTgwLCAKKyAgICA5MTg2LCA5MTkwLCA5MTk0LCA5MTk4LCA5MjA1LCA5MjE1LCA5MjE5LCA5MjIzLCA5MjI3LCA5MjMzLCA5MjQxLCA5MjQ1LCAKKyAgICA5MjQ5LCA5MjU2LCA5MjYwLCA5MjY0LCA5MjY4LCA5Mjc1LCA5MjgyLCA5Mjk0LCA5Mjk4LCA5MzAyLCA5MzA2LCA5MzE2LCAKKyAgICA5MzI1LCA5MzI5LCA5MzM3LCA5MzQ0LCA5MzUxLCA5MzYwLCA5MzcxLCA5Mzc5LCA5MzgzLCA5MzkyLCA5NDAzLCA5NDExLCAKKyAgICA5NDI0LCA5NDMyLCA5NDQwLCA5NDQ4LCA5NDU2LCA5NDYyLCA5NDcxLCA5NDc4LCA5NDgyLCA5NDkwLCA5NDk0LCA5NTAxLCAKKyAgICA5NTA5LCA5NTEzLCA5NTE5LCA5NTI2LCA5NTMzLCA5NTM3LCA5NTQ1LCA5NTQ5LCA5NTU2LCA5NTYwLCA5NTY4LCA5NTcyLCAKKyAgICA5NTgwLCA5NTg4LCA5NTk1LCA5NjAzLCA5NjExLCA5NjE4LCA5NjI0LCA5NjI4LCA5NjM1LCA5NjQzLCA5NjQ5LCA5NjU2LCAKKyAgICA5NjYzLCA5NjY5LCA5Njc4LCA5Njg2LCA5NjkzLCA5Njk5LCA5NzAzLCA5NzA2LCA5NzEwLCA5NzE2LCA5NzI0LCA5NzI4LCAKKyAgICA5NzM0LCA5NzQwLCA5NzQ3LCA5NzU0LCA5NzU3LCA5NzY0LCA5NzY5LCA5Nzc3LCA5NzgyLCA5Nzg2LCA5Nzk5LCA5ODEyLCAKKyAgICA5ODE4LCA5ODI1LCA5ODMwLCA5ODM2LCA5ODQxLCA5ODQ3LCA5ODU3LCA5ODY0LCA5ODczLCA5ODgzLCA5ODg5LCA5ODk0LCAKKyAgICA5ODk5LCA5OTAzLCA5OTA3LCA5OTEyLCA5OTE3LCA5OTIzLCA5OTMxLCA5OTM5LCA5OTUwLCA5OTU1LCA5OTY0LCA5OTczLCAKKyAgICA5OTgwLCA5OTg2LCA5OTkyLCA5OTk4LCAxMDAwNCwgMTAwMTAsIDEwMDE2LCAxMDAyMiwgMTAwMjgsIDEwMDM0LCAxMDA0MSwgCisgICAgMTAwNDgsIDEwMDU1LCAxMDA2MSwgMTAwNjksIDEwMDc4LCAxMDA4NCwgMTAwOTEsIDEwMDk4LCAxMDEwMywgMTAxMDgsIAorICAgIDEwMTEyLCAxMDExOSwgMTAxMjYsIDEwMTM1LCAxMDE0NCwgMTAxNDcsIDEwMTUyLCAxMDE1NywgMCwgMTAxNjIsIDEwMTY2LCAKKyAgICAxMDE3MCwgMTAxNzYsIDEwMTgwLCAxMDE4NCwgMTAxOTAsIDEwMTk0LCAxMDIwMiwgMTAyMDYsIDEwMjEwLCAxMDIxNCwgCisgICAgMTAyMTgsIDEwMjIyLCAxMDIyOCwgMTAyMzIsIDEwMjM4LCAxMDI0MiwgMTAyNDYsIDEwMjUwLCAxMDI1NCwgMTAyNTgsIAorICAgIDEwMjYzLCAxMDI2NiwgMTAyNzAsIDEwMjc1LCAxMDI3OSwgMTAyODMsIDEwMjg3LCAxMDI5MSwgMTAyOTUsIDEwMzAxLCAKKyAgICAxMDMwNywgMTAzMTMsIDEwMzE3LCAxMDMyMSwgMTAzMjYsIDEwMzMwLCAxMDMzNCwgMTAzMzksIDEwMzQzLCAxMDM0NywgCisgICAgMTAzNTQsIDEwMzYxLCAxMDM2NSwgMTAzNjksIDEwMzc0LCAxMDM3OCwgMTAzODIsIDEwMzg1LCAxMDM5MCwgMTAzOTMsIAorICAgIDEwMzk2LCAxMDQwMSwgMTA0MDYsIDEwNDEwLCAxMDQxNCwgMTA0MjAsIDEwNDI2LCAxMDQyOSwgMCwgMCwgMTA0MzIsIAorICAgIDEwNDM4LCAxMDQ0NCwgMTA0NTAsIDEwNDYwLCAxMDQ3MiwgMTA0ODQsIDEwNTAxLCAxMDUxMywgMTA1MjQsIDEwNTMyLCAKKyAgICAxMDUzOSwgMTA1NTAsIDEwNTY1LCAxMDU3NiwgMTA1ODIsIDEwNTkxLCAxMDU5OSwgMTA2MTEsIDEwNjIxLCAxMDYyOSwgCisgICAgMTA2NDEsIDEwNjQ4LCAxMDY1NiwgMTA2NjgsIDEwNjc0LCAxMDY4MCwgMTA2ODgsIDEwNjk2LCAxMDcwNCwgMTA3MTAsIAorICAgIDEwNzIwLCAxMDcyNywgMTA3MzcsIDEwNzQ3LCAxMDc2MCwgMTA3NzQsIDEwNzg4LCAxMDc5OCwgMTA4MDksIDEwODIwLCAKKyAgICAxMDgzMywgMTA4NDYsIDEwODYwLCAxMDg3MiwgMTA4ODQsIDEwODk3LCAxMDkxMCwgMTA5MjIsIDEwOTM1LCAxMDk0NCwgCisgICAgMTA5NTIsIDEwOTU3LCAxMDk2MiwgMTA5NjcsIDEwOTcyLCAxMDk3NywgMTA5ODIsIDEwOTg3LCAxMDk5MiwgMTA5OTcsIAorICAgIDExMDAyLCAxMTAwNywgMTEwMTIsIDExMDE3LCAxMTAyMiwgMTEwMjcsIDExMDMyLCAxMTAzNywgMTEwNDIsIDExMDQ3LCAKKyAgICAxMTA1MiwgMTEwNTcsIDExMDYyLCAxMTA2NywgMTEwNzIsIDExMDc3LCAxMTA4MiwgMTEwODcsIDExMDkyLCAxMTA5NywgCisgICAgMTExMDIsIDExMTA3LCAxMTExMiwgMTExMTYsIDExMTIxLCAxMTEyNiwgMTExMzEsIDExMTM2LCAxMTE0MSwgMTExNDUsIAorICAgIDExMTQ5LCAxMTE1MywgMTExNTcsIDExMTYxLCAxMTE2NSwgMTExNjksIDExMTczLCAxMTE3NywgMTExODEsIDExMTg1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTE5MCwgMTExOTUsIDExMTk5LCAxMTIwMywgMTEyMDcsIAorICAgIDExMjExLCAxMTIxNSwgMTEyMTksIDExMjIzLCAxMTIyNywgMTEyMzEsIDExMjM1LCAxMTI0MCwgMTEyNDQsIDExMjQ4LCAKKyAgICAxMTI1MiwgMTEyNTcsIDExMjYxLCAxMTI2NiwgMTEyNzAsIDExMjc1LCAxMTI3OSwgMTEyODQsIDExMjg5LCAxMTI5NCwgCisgICAgMTEyOTksIDExMzAzLCAxMTMwOCwgMTEzMTMsIDExMzE4LCAxMTMyMywgMTEzMjcsIDExMzMyLCAxMTMzOSwgMTEzNDMsIAorICAgIDExMzQ4LCAxMTM1MiwgMTEzNTYsIDExMzYxLCAxMTM2NSwgMTEzNzIsIDExMzc5LCAxMTM4NiwgMTEzOTIsIDExNDAwLCAKKyAgICAxMTQwOCwgMTE0MTcsIDExNDI1LCAxMTQzMiwgMTE0MzksIDExNDQ3LCAxMTQ1MywgMTE0NTksIDExNDY1LCAxMTQ3MSwgCisgICAgMTE0NzgsIDExNDgzLCAxMTQ4NywgMTE0OTIsIDAsIDAsIDAsIDAsIDAsIDExNDk2LCAxMTUwMCwgMTE1MDQsIDExNTA4LCAKKyAgICAxMTUxMiwgMTE1MTYsIDExNTIwLCAxMTUyNCwgMTE1MjgsIDExNTMyLCAxMTUzNiwgMTE1NDAsIDExNTQ0LCAxMTU0OCwgCisgICAgMTE1NTIsIDExNTU2LCAxMTU2MCwgMTE1NjQsIDExNTY4LCAxMTU3MiwgMTE1NzYsIDExNTgwLCAxMTU4NCwgMTE1ODgsIAorICAgIDExNTkyLCAxMTU5NiwgMTE2MDAsIDExNjA3LCAxMTYxMywgMTE2MTgsIDExNjIyLCAxMTYyOSwgMTE2MzUsIDExNjQwLCAKKyAgICAxMTY0NiwgMTE2NTEsIDExNjU1LCAxMTY2MSwgMTE2NjcsIDExNjcyLCAxMTY3NiwgMTE2ODAsIDExNjg1LCAxMTY4OSwgCisgICAgMTE2OTMsIDExNjk4LCAwLCAwLCAxMTcwMiwgMTE3MDcsIDExNzEyLCAxMTcxNywgMTE3MjIsIDExNzI3LCAxMTczMiwgCisgICAgMTE3MzYsIDExNzQzLCAxMTc0OCwgMTE3NTMsIDExNzU4LCAxMTc2MywgMTE3NjgsIDExNzc1LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTMzMCwgMTEzMzQsIDExMzM4LCAKLSAgICAxMTM0MiwgMTEzNDcsIDExMzUwLCAxMTM1NCwgMTEzNTcsIDExMzYxLCAxMTM2NCwgMTEzNjgsIDExMzcyLCAxMTM3NiwgCi0gICAgMTEzODEsIDExMzg2LCAxMTM4OSwgMTEzOTMsIDExMzk4LCAxMTQwMywgMTE0MDYsIDExNDEwLCAxMTQxMywgMTE0MTcsIAotICAgIDExNDIxLCAxMTQyNSwgMTE0MjksIDExNDMzLCAxMTQzNywgMTE0NDEsIDExNDQ1LCAxMTQ0OSwgMTE0NTMsIDExNDU3LCAKLSAgICAxMTQ2MSwgMTE0NjUsIDExNDY5LCAxMTQ3MywgMTE0NzcsIDExNDgxLCAxMTQ4NSwgMTE0ODksIDExNDkzLCAxMTQ5NiwgCi0gICAgMTE1MDAsIDExNTA0LCAxMTUwOCwgMTE1MTEsIDExNTE0LCAxMTUxNywgMTE1MjEsIDExNTI1LCAxMTUyOSwgMTE1MzMsIAotICAgIDExNTM3LCAxMTU0MSwgMTE1NDUsIDExNTQ5LCAwLCAwLCAxMTU1MiwgMTE1NTYsIDExNTYwLCAxMTU2NSwgMTE1NjksIAotICAgIDExNTc0LCAxMTU3OCwgMTE1ODMsIDExNTg4LCAxMTU5NCwgMTE2MDAsIDExNjA2LCAxMTYxMCwgMTE2MTUsIDExNjIxLCAKLSAgICAxMTYyNywgMTE2MzEsIDExNjM2LCAwLCAwLCAxMTY0MCwgMTE2NDMsIDExNjQ5LCAxMTY1NSwgMTE2NjAsIDAsIDAsIDAsIAotICAgIDExNjY1LCAxMTY2OSwgMTE2NzMsIDExNjc3LCAxMTY4MSwgMTE2ODUsIDExNjg5LCAxMTY5MywgMTE2OTcsIDExNzAyLCAKLSAgICAxMTcwNywgMTE3MTIsIDExNzE4LCAxMTcyMSwgMTE3MjUsIDExNzI5LCAxMTczMiwgMTE3MzUsIDExNzM4LCAxMTc0MSwgCi0gICAgMTE3NDQsIDExNzQ3LCAxMTc1MCwgMTE3NTMsIDExNzU2LCAxMTc2MCwgMTE3NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExNzcyLCAxMTc3NiwgMTE3ODAsIDExNzg2LCAxMTc5MCwgMCwgMTE3OTQsIDExNzk4LCAxMTgwMiwgMCwgMTE4MDYsIAotICAgIDExODA5LCAxMTgxMywgMTE4MTYsIDExODIwLCAxMTgyMywgMTE4MjcsIDExODMxLCAwLCAwLCAxMTgzNSwgMTE4MzgsIDAsIAotICAgIDAsIDExODQyLCAxMTg0NSwgMTE4NDksIDExODUyLCAxMTg1NiwgMTE4NjAsIDExODY0LCAxMTg2OCwgMTE4NzIsIDExODc2LCAKLSAgICAxMTg4MCwgMTE4ODQsIDExODg4LCAxMTg5MiwgMTE4OTYsIDExOTAwLCAxMTkwNCwgMTE5MDgsIDExOTEyLCAxMTkxNiwgCi0gICAgMTE5MjAsIDExOTI0LCAwLCAxMTkyOCwgMTE5MzEsIDExOTM1LCAxMTkzOSwgMTE5NDMsIDExOTQ2LCAxMTk0OSwgMCwgCi0gICAgMTE5NTIsIDAsIDAsIDAsIDExOTU2LCAxMTk2MCwgMTE5NjQsIDExOTY4LCAwLCAwLCAxMTk3MSwgMTE5NzUsIDExOTc5LCAKLSAgICAxMTk4NCwgMTE5ODgsIDExOTkzLCAxMTk5NywgMTIwMDIsIDEyMDA3LCAwLCAwLCAxMjAxMywgMTIwMTcsIDAsIDAsIAotICAgIDEyMDIyLCAxMjAyNiwgMTIwMzEsIDEyMDM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjA0MSwgMCwgMCwgMCwgMCwgCi0gICAgMTIwNDcsIDEyMDUxLCAwLCAxMjA1NSwgMTIwNTksIDEyMDY0LCAxMjA2OSwgMTIwNzQsIDAsIDAsIDEyMDgwLCAxMjA4NCwgCi0gICAgMTIwODcsIDEyMDkwLCAxMjA5MywgMTIwOTYsIDEyMDk5LCAxMjEwMiwgMTIxMDUsIDEyMTA4LCAxMjExMSwgMTIxMjAsIAotICAgIDEyMTI4LCAxMjEzMiwgMTIxMzYsIDEyMTQyLCAxMjE0OCwgMTIxNTQsIDEyMTYwLCAxMjE3NCwgMTIxODEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyMTg0LCAxMjE5MCwgMTIxOTQsIDAsIDEyMTk4LCAxMjIwMSwgMTIyMDUsIDEyMjA4LCAxMjIxMiwgCi0gICAgMTIyMTUsIDAsIDAsIDAsIDAsIDEyMjE5LCAxMjIyMywgMCwgMCwgMTIyMjcsIDEyMjMxLCAxMjIzNSwgMTIyMzgsIDEyMjQyLCAKLSAgICAxMjI0NiwgMTIyNTAsIDEyMjU0LCAxMjI1OCwgMTIyNjIsIDEyMjY2LCAxMjI3MCwgMTIyNzQsIDEyMjc4LCAxMjI4MiwgCi0gICAgMTIyODYsIDEyMjkwLCAxMjI5NCwgMTIyOTgsIDEyMzAyLCAxMjMwNiwgMTIzMTAsIDAsIDEyMzE0LCAxMjMxNywgMTIzMjEsIAotICAgIDEyMzI1LCAxMjMyOSwgMTIzMzIsIDEyMzM1LCAwLCAxMjMzOCwgMTIzNDIsIDAsIDEyMzQ2LCAxMjM1MCwgMCwgMTIzNTQsIAotICAgIDEyMzU4LCAwLCAwLCAxMjM2MSwgMCwgMTIzNjUsIDEyMzcwLCAxMjM3NCwgMTIzNzksIDEyMzgzLCAwLCAwLCAwLCAwLCAKLSAgICAxMjM4OCwgMTIzOTMsIDAsIDAsIDEyMzk4LCAxMjQwMywgMTI0MDgsIDAsIDAsIDAsIDEyNDEyLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMjQxNiwgMTI0MjAsIDEyNDI0LCAxMjQyOCwgMCwgMTI0MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDM2LCAKLSAgICAxMjQ0MCwgMTI0NDMsIDEyNDQ2LCAxMjQ0OSwgMTI0NTIsIDEyNDU1LCAxMjQ1OCwgMTI0NjEsIDEyNDY0LCAxMjQ2NywgCi0gICAgMTI0NzAsIDEyNDczLCAxMjQ3NiwgMTI0NzksIDEyNDg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjQ4OCwgMTI0OTIsIDEyNDk2LCAwLCAxMjUwMCwgMTI1MDMsIDEyNTA3LCAxMjUxMCwgMTI1MTQsIDEyNTE3LCAxMjUyMSwgCi0gICAgMTI1MjUsIDEyNTI5LCAwLCAxMjUzNCwgMTI1MzcsIDEyNTQxLCAwLCAxMjU0NiwgMTI1NDksIDEyNTUzLCAxMjU1NiwgCi0gICAgMTI1NjAsIDEyNTY0LCAxMjU2OCwgMTI1NzIsIDEyNTc2LCAxMjU4MCwgMTI1ODQsIDEyNTg4LCAxMjU5MiwgMTI1OTYsIAotICAgIDEyNjAwLCAxMjYwNCwgMTI2MDgsIDEyNjEyLCAxMjYxNiwgMTI2MjAsIDEyNjI0LCAxMjYyOCwgMCwgMTI2MzIsIDEyNjM1LCAKLSAgICAxMjYzOSwgMTI2NDMsIDEyNjQ3LCAxMjY1MCwgMTI2NTMsIDAsIDEyNjU2LCAxMjY2MCwgMCwgMTI2NjQsIDEyNjY4LCAKLSAgICAxMjY3MiwgMTI2NzYsIDEyNjgwLCAwLCAwLCAxMjY4MywgMTI2ODcsIDEyNjkxLCAxMjY5NiwgMTI3MDAsIDEyNzA1LCAKLSAgICAxMjcwOSwgMTI3MTQsIDEyNzE5LCAxMjcyNSwgMCwgMTI3MzEsIDEyNzM1LCAxMjc0MCwgMCwgMTI3NDYsIDEyNzUwLCAKLSAgICAxMjc1NSwgMCwgMCwgMTI3NTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzYyLCAKLSAgICAxMjc2NywgMTI3NzIsIDEyNzc3LCAwLCAwLCAxMjc4MywgMTI3ODcsIDEyNzkwLCAxMjc5MywgMTI3OTYsIDEyNzk5LCAKLSAgICAxMjgwMiwgMTI4MDUsIDEyODA4LCAxMjgxMSwgMCwgMTI4MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyODE4LCAxMjgyMiwgMTI4MjYsIDAsIDEyODMwLCAxMjgzMywgMTI4MzcsIDEyODQwLCAxMjg0NCwgCi0gICAgMTI4NDcsIDEyODUxLCAxMjg1NSwgMCwgMCwgMTI4NTksIDEyODYyLCAwLCAwLCAxMjg2NiwgMTI4NjksIDEyODczLCAKLSAgICAxMjg3NiwgMTI4ODAsIDEyODg0LCAxMjg4OCwgMTI4OTIsIDEyODk2LCAxMjkwMCwgMTI5MDQsIDEyOTA4LCAxMjkxMiwgCi0gICAgMTI5MTYsIDEyOTIwLCAxMjkyNCwgMTI5MjgsIDEyOTMyLCAxMjkzNiwgMTI5NDAsIDEyOTQ0LCAxMjk0OCwgMCwgMTI5NTIsIAotICAgIDEyOTU1LCAxMjk1OSwgMTI5NjMsIDEyOTY3LCAxMjk3MCwgMTI5NzMsIDAsIDEyOTc2LCAxMjk4MCwgMCwgMTI5ODQsIAotICAgIDEyOTg4LCAxMjk5MiwgMTI5OTYsIDEzMDAwLCAwLCAwLCAxMzAwMywgMTMwMDcsIDEzMDExLCAxMzAxNiwgMTMwMjAsIAotICAgIDEzMDI1LCAxMzAyOSwgMTMwMzQsIDEzMDM5LCAwLCAwLCAxMzA0NSwgMTMwNDksIDAsIDAsIDEzMDU0LCAxMzA1OCwgCi0gICAgMTMwNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMDY3LCAxMzA3MywgMCwgMCwgMCwgMCwgMTMwNzksIDEzMDgzLCAwLCAKLSAgICAxMzA4NywgMTMwOTEsIDEzMDk2LCAxMzEwMSwgMTMxMDYsIDAsIDAsIDEzMTEyLCAxMzExNiwgMTMxMTksIDEzMTIyLCAKLSAgICAxMzEyNSwgMTMxMjgsIDEzMTMxLCAxMzEzNCwgMTMxMzcsIDEzMTQwLCAxMzE0MywgMTMxNDYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTUwLCAxMzE1NCwgMCwgMTMxNTgsIDEzMTYxLCAxMzE2NSwgCi0gICAgMTMxNjgsIDEzMTcyLCAxMzE3NSwgMCwgMCwgMCwgMTMxNzksIDEzMTgyLCAxMzE4NiwgMCwgMTMxOTAsIDEzMTkzLCAKLSAgICAxMzE5NywgMTMyMDEsIDAsIDAsIDAsIDEzMjA0LCAxMzIwOCwgMCwgMTMyMTIsIDAsIDEzMjE2LCAxMzIyMCwgMCwgMCwgMCwgCi0gICAgMTMyMjQsIDEzMjI4LCAwLCAwLCAwLCAxMzIzMiwgMTMyMzYsIDEzMjQwLCAwLCAwLCAwLCAxMzI0MywgMTMyNDYsIDEzMjQ5LCAKLSAgICAxMzI1MiwgMTMyNTYsIDEzMjYwLCAxMzI2NCwgMTMyNjgsIDEzMjcyLCAxMzI3NiwgMTMyODAsIDEzMjg0LCAwLCAwLCAwLCAKLSAgICAwLCAxMzI4NywgMTMyOTIsIDEzMjk2LCAxMzMwMSwgMTMzMDUsIDAsIDAsIDAsIDEzMzEwLCAxMzMxNCwgMTMzMTksIDAsIAotICAgIDEzMzI0LCAxMzMyOCwgMTMzMzMsIDEzMzM4LCAwLCAwLCAxMzM0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTMzNDUsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMzUxLCAxMzM1NSwgMTMzNTgsIDEzMzYxLCAxMzM2NCwgCi0gICAgMTMzNjcsIDEzMzcwLCAxMzM3MywgMTMzNzYsIDEzMzc5LCAxMzM4MiwgMTMzODYsIDEzMzkxLCAxMzM5NiwgMTM0MDAsIAotICAgIDEzNDA0LCAxMzQwOCwgMTM0MTIsIDEzNDE2LCAxMzQyMSwgMTM0MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDI4LCAxMzQzMiwgCi0gICAgMTM0MzYsIDAsIDEzNDQwLCAxMzQ0MywgMTM0NDcsIDEzNDUwLCAxMzQ1NCwgMTM0NTcsIDEzNDYxLCAxMzQ2NSwgMCwgCi0gICAgMTM0NjksIDEzNDcyLCAxMzQ3NiwgMCwgMTM0ODAsIDEzNDgzLCAxMzQ4NywgMTM0OTEsIDEzNDk0LCAxMzQ5OCwgMTM1MDIsIAotICAgIDEzNTA2LCAxMzUxMCwgMTM1MTQsIDEzNTE4LCAxMzUyMiwgMTM1MjYsIDEzNTMwLCAxMzUzNCwgMTM1MzgsIDEzNTQyLCAKLSAgICAxMzU0NiwgMTM1NTAsIDEzNTU0LCAxMzU1OCwgMTM1NjIsIDEzNTY2LCAwLCAxMzU3MCwgMTM1NzMsIDEzNTc3LCAxMzU4MSwgCi0gICAgMTM1ODUsIDEzNTg4LCAxMzU5MSwgMTM1OTQsIDEzNTk4LCAxMzYwMiwgMCwgMTM2MDYsIDEzNjEwLCAxMzYxNCwgMTM2MTgsIAotICAgIDEzNjIyLCAwLCAwLCAwLCAxMzYyNSwgMTM2MjksIDEzNjM0LCAxMzYzOCwgMTM2NDMsIDEzNjQ3LCAxMzY1MiwgMTM2NTcsIAotICAgIDAsIDEzNjYzLCAxMzY2NywgMTM2NzIsIDAsIDEzNjc3LCAxMzY4MSwgMTM2ODYsIDEzNjkxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMzY5NSwgMTM2OTksIDAsIDEzNzA1LCAxMzcwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMTM3MTMsIDEzNzE4LCAxMzcyMywgCi0gICAgMTM3MjgsIDAsIDAsIDEzNzM0LCAxMzczOCwgMTM3NDEsIDEzNzQ0LCAxMzc0NywgMTM3NTAsIDEzNzUzLCAxMzc1NiwgCi0gICAgMTM3NTksIDEzNzYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzc2NSwgMTM3NzgsIDEzNzkwLCAxMzgwMiwgMTM4MTQsIAotICAgIDEzODI2LCAxMzgzOCwgMTM4NTAsIDAsIDAsIDEzODU0LCAxMzg1OCwgMCwgMTM4NjIsIDEzODY1LCAxMzg2OSwgMTM4NzIsIAotICAgIDEzODc2LCAxMzg3OSwgMTM4ODMsIDEzODg3LCAwLCAxMzg5MSwgMTM4OTQsIDEzODk4LCAwLCAxMzkwMiwgMTM5MDUsIAotICAgIDEzOTA5LCAxMzkxMywgMTM5MTYsIDEzOTIwLCAxMzkyNCwgMTM5MjgsIDEzOTMyLCAxMzkzNiwgMTM5NDAsIDEzOTQ0LCAKLSAgICAxMzk0OCwgMTM5NTIsIDEzOTU2LCAxMzk2MCwgMTM5NjQsIDEzOTY4LCAxMzk3MiwgMTM5NzYsIDEzOTgwLCAxMzk4NCwgCi0gICAgMTM5ODgsIDAsIDEzOTkyLCAxMzk5NSwgMTM5OTksIDE0MDAzLCAxNDAwNywgMTQwMTAsIDE0MDEzLCAxNDAxNiwgMTQwMjAsIAotICAgIDE0MDI0LCAwLCAxNDAyOCwgMTQwMzIsIDE0MDM2LCAxNDA0MCwgMTQwNDQsIDAsIDAsIDE0MDQ3LCAxNDA1MSwgMTQwNTUsIAotICAgIDE0MDYwLCAxNDA2NCwgMTQwNjksIDE0MDczLCAxNDA3OCwgMTQwODMsIDAsIDE0MDg5LCAxNDA5MywgMTQwOTgsIDAsIAotICAgIDE0MTAzLCAxNDEwNywgMTQxMTIsIDE0MTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDEyMSwgMTQxMjUsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDE0MTMxLCAwLCAxNDEzNSwgMTQxNDAsIDE0MTQ1LCAxNDE1MCwgMCwgMCwgMTQxNTYsIDE0MTYwLCAKLSAgICAxNDE2MywgMTQxNjYsIDE0MTY5LCAxNDE3MiwgMTQxNzUsIDE0MTc4LCAxNDE4MSwgMTQxODQsIDAsIDE0MTg3LCAxNDE5MSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQxOTUsIDE0MTk5LCAwLCAxNDIwMywgCi0gICAgMTQyMDYsIDE0MjEwLCAxNDIxMywgMTQyMTcsIDE0MjIwLCAxNDIyNCwgMTQyMjgsIDAsIDE0MjMyLCAxNDIzNSwgMTQyMzksIAotICAgIDAsIDE0MjQzLCAxNDI0NiwgMTQyNTAsIDE0MjU0LCAxNDI1NywgMTQyNjEsIDE0MjY1LCAxNDI2OSwgMTQyNzMsIDE0Mjc3LCAKLSAgICAxNDI4MSwgMTQyODUsIDE0Mjg5LCAxNDI5MywgMTQyOTcsIDE0MzAxLCAxNDMwNSwgMTQzMDksIDE0MzEzLCAxNDMxNywgCi0gICAgMTQzMjEsIDE0MzI1LCAxNDMyOSwgMCwgMTQzMzMsIDE0MzM2LCAxNDM0MCwgMTQzNDQsIDE0MzQ4LCAxNDM1MSwgMTQzNTQsIAotICAgIDE0MzU3LCAxNDM2MSwgMTQzNjUsIDE0MzY5LCAxNDM3MywgMTQzNzcsIDE0MzgxLCAxNDM4NSwgMTQzODksIDAsIDAsIDAsIAotICAgIDE0MzkyLCAxNDM5NiwgMTQ0MDEsIDE0NDA1LCAxNDQxMCwgMTQ0MTQsIDE0NDE5LCAxNDQyNCwgMCwgMTQ0MzAsIDE0NDM0LCAKLSAgICAxNDQzOSwgMCwgMTQ0NDQsIDE0NDQ4LCAxNDQ1MywgMTQ0NTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NDYyLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQ2OCwgMTQ0NzMsIDE0NDc4LCAxNDQ4MywgMCwgMCwgMTQ0ODksIDE0NDkzLCAKLSAgICAxNDQ5NiwgMTQ0OTksIDE0NTAyLCAxNDUwNSwgMTQ1MDgsIDE0NTExLCAxNDUxNCwgMTQ1MTcsIDE0NTIwLCAxNDUyNCwgCi0gICAgMTQ1MjksIDE0NTM0LCAxNDU0MCwgMTQ1NDYsIDAsIDAsIDAsIDE0NTUyLCAxNDU1NiwgMTQ1NjIsIDE0NTY3LCAxNDU3MywgCi0gICAgMTQ1NzgsIDE0NTg0LCAwLCAwLCAxNDU5MCwgMTQ1OTQsIDAsIDE0NTk4LCAxNDYwMiwgMTQ2MDYsIDE0NjEwLCAxNDYxNCwgCi0gICAgMTQ2MTgsIDE0NjIyLCAxNDYyNiwgMTQ2MzAsIDE0NjM0LCAxNDYzOCwgMTQ2NDIsIDE0NjQ2LCAxNDY1MCwgMTQ2NTQsIAotICAgIDE0NjU4LCAxNDY2MiwgMTQ2NjYsIDAsIDAsIDAsIDE0NjcwLCAxNDY3NiwgMTQ2ODIsIDE0Njg4LCAxNDY5NCwgMTQ3MDAsIAotICAgIDE0NzA2LCAxNDcxMiwgMTQ3MTgsIDE0NzI0LCAxNDczMCwgMTQ3MzYsIDE0NzQ0LCAxNDc1MCwgMTQ3NTYsIDE0NzYyLCAKLSAgICAxNDc2OCwgMTQ3NzQsIDE0NzgwLCAxNDc4NiwgMTQ3OTIsIDE0Nzk4LCAxNDgwNCwgMTQ4MTAsIDAsIDE0ODE2LCAxNDgyMiwgCi0gICAgMTQ4MjgsIDE0ODM0LCAxNDg0MCwgMTQ4NDYsIDE0ODUwLCAxNDg1NiwgMTQ4NjAsIDAsIDE0ODY0LCAwLCAwLCAxNDg3MCwgCi0gICAgMTQ4NzQsIDE0ODgwLCAxNDg4NiwgMTQ4OTIsIDE0ODk2LCAxNDkwMiwgMCwgMCwgMCwgMTQ5MDYsIDAsIDAsIDAsIDAsIAotICAgIDE0OTEwLCAxNDkxNSwgMTQ5MjIsIDE0OTI5LCAxNDkzNiwgMTQ5NDMsIDAsIDE0OTUwLCAwLCAxNDk1NywgMTQ5NjIsIAotICAgIDE0OTY3LCAxNDk3NCwgMTQ5ODEsIDE0OTkwLCAxNTAwMSwgMTUwMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MDE1LCAxNTAyMiwgMTUwMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDE1MDM0LCAxNTA0MCwgMTUwNDYsIDE1MDUyLCAxNTA1OCwgMTUwNjQsIDE1MDcwLCAxNTA3NiwgMTUwODIsIAotICAgIDE1MDg4LCAxNTA5NCwgMTUxMDAsIDE1MTA2LCAxNTExMiwgMTUxMTgsIDE1MTIzLCAxNTEyOSwgMTUxMzUsIDE1MTQxLCAKLSAgICAxNTE0NywgMTUxNTMsIDE1MTU4LCAxNTE2NCwgMTUxNzAsIDE1MTc2LCAxNTE4MiwgMTUxODgsIDE1MTk0LCAxNTIwMCwgCi0gICAgMTUyMDYsIDE1MjEyLCAxNTIxOCwgMTUyMjQsIDE1MjI5LCAxNTIzNSwgMTUyNDEsIDE1MjQ1LCAxNTI1MSwgMTUyNTUsIAotICAgIDE1MjYxLCAxNTI2NywgMTUyNzMsIDE1Mjc5LCAxNTI4NSwgMTUyOTEsIDE1Mjk2LCAxNTMwMiwgMTUzMDYsIDE1MzExLCAKLSAgICAxNTMxNywgMTUzMjMsIDE1MzI5LCAxNTMzNCwgMTUzNDAsIDE1MzQ2LCAxNTM1MiwgMTUzNTcsIDE1MzYzLCAwLCAwLCAwLCAKLSAgICAwLCAxNTM2NywgMTUzNzMsIDE1Mzc4LCAxNTM4NCwgMTUzODksIDE1Mzk3LCAxNTQwNSwgMTU0MDksIDE1NDEzLCAxNTQxNywgCi0gICAgMTU0MjMsIDE1NDI5LCAxNTQzNSwgMTU0NDEsIDE1NDQ1LCAxNTQ0OSwgMTU0NTMsIDE1NDU3LCAxNTQ2MSwgMTU0NjQsIAotICAgIDE1NDY3LCAxNTQ3MCwgMTU0NzMsIDE1NDc2LCAxNTQ3OSwgMTU0ODIsIDE1NDg1LCAxNTQ4OCwgMTU0OTIsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NDk2LCAxNTUwMCwgMCwgMTU1MDYsIDAsIDAsIDE1NTEyLCAxNTUxNiwgCi0gICAgMCwgMTU1MjAsIDAsIDAsIDE1NTI2LCAwLCAwLCAwLCAwLCAwLCAwLCAxNTUzMCwgMTU1MzQsIDE1NTM3LCAxNTU0MywgMCwgCi0gICAgMTU1NDksIDE1NTUzLCAxNTU1NywgMTU1NjEsIDE1NTY3LCAxNTU3MywgMTU1NzksIDAsIDE1NTg1LCAxNTU4OSwgMTU1OTMsIAotICAgIDAsIDE1NTk5LCAwLCAxNTYwNSwgMCwgMCwgMTU2MDksIDE1NjE1LCAwLCAxNTYyMSwgMTU2MjQsIDE1NjMwLCAxNTYzMywgCi0gICAgMTU2MzcsIDE1NjQ0LCAxNTY0OSwgMTU2NTQsIDE1NjU4LCAxNTY2MywgMTU2NjgsIDE1NjczLCAxNTY3NywgMCwgMTU2ODIsIAotICAgIDE1Njg5LCAxNTY5NSwgMCwgMCwgMTU3MDEsIDE1NzA1LCAxNTcxMCwgMTU3MTQsIDE1NzE5LCAwLCAxNTcyNCwgMCwgCi0gICAgMTU3MjksIDE1NzM1LCAxNTc0MSwgMTU3NDcsIDE1NzUzLCAxNTc1NywgMCwgMCwgMTU3NjAsIDE1NzY0LCAxNTc2NywgCi0gICAgMTU3NzAsIDE1NzczLCAxNTc3NiwgMTU3NzksIDE1NzgyLCAxNTc4NSwgMTU3ODgsIDAsIDAsIDE1NzkxLCAxNTc5NiwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU4MDEsIDE1ODA1LCAxNTgxNiwgMTU4MzEsIDE1ODQ2LCAxNTg1NiwgCi0gICAgMTU4NjcsIDE1ODgwLCAxNTg5MSwgMTU4OTcsIDE1OTA1LCAxNTkxNSwgMTU5MjEsIDE1OTI5LCAxNTkzMywgMTU5MzksIAotICAgIDE1OTQ1LCAxNTk1MywgMTU5NjMsIDE1OTcxLCAxNTk4NCwgMTU5OTAsIDE1OTk4LCAxNjAwNiwgMTYwMTgsIDE2MDI1LCAKLSAgICAxNjAzMywgMTYwNDEsIDE2MDQ5LCAxNjA1NywgMTYwNjUsIDE2MDczLCAxNjA4MywgMTYwODcsIDE2MDkwLCAxNjA5MywgCi0gICAgMTYwOTYsIDE2MDk5LCAxNjEwMiwgMTYxMDUsIDE2MTA4LCAxNjExMSwgMTYxMTQsIDE2MTE4LCAxNjEyMiwgMTYxMjYsIAotICAgIDE2MTMwLCAxNjEzNCwgMTYxMzgsIDE2MTQyLCAxNjE0NiwgMTYxNTAsIDE2MTU1LCAxNjE2MSwgMTYxNzEsIDE2MTg1LCAKLSAgICAxNjE5NSwgMTYyMDEsIDE2MjA3LCAxNjIxNSwgMTYyMjMsIDE2MjMxLCAxNjIzOSwgMTYyNDUsIDE2MjUxLCAxNjI1NCwgCi0gICAgMTYyNTgsIDE2MjYyLCAxNjI2NiwgMTYyNzAsIDE2Mjc0LCAxNjI3OCwgMCwgMTYyODIsIDE2Mjg2LCAxNjI5MCwgMTYyOTQsIAotICAgIDE2Mjk4LCAxNjMwMiwgMTYzMDYsIDE2MzEwLCAxNjMxNCwgMTYzMTgsIDE2MzIyLCAxNjMyNiwgMTYzMjksIDE2MzMzLCAKLSAgICAxNjMzNywgMTYzNDEsIDE2MzQ0LCAxNjM0OCwgMTYzNTIsIDE2MzU2LCAxNjM2MCwgMTYzNjQsIDE2MzY4LCAxNjM3MiwgCi0gICAgMTYzNzYsIDE2Mzc5LCAxNjM4MiwgMTYzODYsIDE2MzkwLCAxNjM5NCwgMTYzOTgsIDE2NDAxLCAxNjQwNCwgMTY0MDgsIAotICAgIDE2NDEzLCAxNjQxNywgMCwgMCwgMCwgMCwgMTY0MjEsIDE2NDI2LCAxNjQzMCwgMTY0MzUsIDE2NDM5LCAxNjQ0NCwgCi0gICAgMTY0NDksIDE2NDU1LCAxNjQ2MCwgMTY0NjYsIDE2NDcwLCAxNjQ3NSwgMTY0NzksIDE2NDg0LCAxNjQ5NCwgMTY1MDAsIAotICAgIDE2NTA1LCAxNjUxMSwgMTY1MjEsIDE2NTI3LCAxNjUzMSwgMTY1MzUsIDE2NTQxLCAxNjU0NywgMTY1NTUsIDE2NTYxLCAKLSAgICAxNjU2OSwgMCwgMCwgMCwgMCwgMTY1NzcsIDE2NTgyLCAxNjU4OCwgMTY1OTQsIDE2NjAwLCAxNjYwNiwgMTY2MTIsIAotICAgIDE2NjE4LCAwLCAxNjYyNCwgMTY2MzAsIDE2NjM2LCAxNjY0MiwgMTY2NDgsIDE2NjU0LCAxNjY2MCwgMTY2NjYsIDE2NjcyLCAKLSAgICAxNjY3OCwgMTY2ODQsIDE2NjkwLCAxNjY5NSwgMTY3MDEsIDE2NzA3LCAxNjcxMywgMTY3MTgsIDE2NzI0LCAxNjczMCwgCi0gICAgMTY3MzYsIDE2NzQyLCAxNjc0OCwgMTY3NTQsIDE2NzYwLCAxNjc2NiwgMTY3NzEsIDE2Nzc2LCAxNjc4MiwgMTY3ODgsIAotICAgIDE2Nzk0LCAxNjgwMCwgMTY4MDUsIDE2ODEwLCAxNjgxNiwgMTY4MjQsIDE2ODMxLCAwLCAxNjgzOCwgMTY4NDUsIDE2ODU4LCAKLSAgICAxNjg2NSwgMTY4NzIsIDE2ODgwLCAxNjg4OCwgMTY4OTQsIDE2OTAwLCAxNjkwNiwgMTY5MTYsIDE2OTIxLCAxNjkyNywgCi0gICAgMTY5MzcsIDE2OTQ3LCAwLCAxNjk1NywgMTY5NjcsIDE2OTc1LCAxNjk4NywgMTY5OTksIDE3MDA1LCAxNzAxOSwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwMzQsIDE3MDM3LCAxNzA0MSwgCi0gICAgMTcwNDUsIDE3MDQ5LCAxNzA1MywgMTcwNTcsIDE3MDYxLCAxNzA2NSwgMTcwNjksIDE3MDczLCAxNzA3NywgMTcwODEsIAotICAgIDE3MDg1LCAxNzA4OSwgMTcwOTMsIDE3MDk3LCAxNzEwMSwgMTcxMDUsIDE3MTA5LCAxNzExMywgMTcxMTcsIDE3MTIwLCAKLSAgICAxNzEyNCwgMTcxMjgsIDE3MTMyLCAxNzEzNSwgMTcxMzgsIDE3MTQxLCAxNzE0NSwgMTcxNDksIDE3MTUzLCAxNzE1NiwgCi0gICAgMTcxNjAsIDE3MTYzLCAxNzE2OCwgMTcxNzEsIDE3MTc1LCAxNzE3OCwgMTcxODIsIDE3MTg1LCAxNzE5MCwgMTcxOTMsIAotICAgIDE3MTk3LCAxNzIwNCwgMTcyMDksIDE3MjEzLCAxNzIxOCwgMTcyMjIsIDE3MjI3LCAxNzIzMSwgMTcyMzYsIDE3MjQzLCAKLSAgICAxNzI0OSwgMTcyNTQsIDE3MjU4LCAxNzI2MiwgMTcyNjYsIDE3MjcwLCAxNzI3NCwgMTcyODAsIDE3Mjg2LCAxNzI5MywgCi0gICAgMTcyOTksIDE3MzA1LCAxNzMwOSwgMTczMTIsIDE3MzE1LCAxNzMxOCwgMTczMjEsIDE3MzI0LCAxNzMyNywgMTczMzAsIAotICAgIDE3MzMzLCAxNzMzNiwgMTczNDIsIDE3MzQ2LCAxNzM1MCwgMTczNTQsIDE3MzU4LCAxNzM2MiwgMTczNjYsIDE3MzcwLCAKLSAgICAxNzM3NCwgMTczNzksIDE3MzgzLCAxNzM4OCwgMTczOTMsIDE3Mzk5LCAxNzQwNCwgMTc0MTAsIDE3NDE2LCAxNzQyMiwgCi0gICAgMTc0MjgsIDE3NDM0LCAxNzQ0MywgMTc0NTEsIDE3NDYwLCAxNzQ2OCwgMTc0NzcsIDE3NDg2LCAxNzQ5NywgMTc1MDcsIAotICAgIDE3NTE3LCAxNzUyOCwgMTc1MzksIDE3NTQ5LCAxNzU1OSwgMTc1NjksIDE3NTc5LCAxNzU4OSwgMTc1OTksIDE3NjA5LCAKLSAgICAxNzYxOSwgMTc2MjcsIDE3NjM0LCAxNzY0MCwgMTc2NDcsIDE3NjUyLCAxNzY1OCwgMTc2NjQsIDE3NjcwLCAxNzY3NiwgCi0gICAgMTc2ODIsIDE3Njg4LCAxNzY5NCwgMTc3MDAsIDE3NzA2LCAxNzcxMiwgMTc3MTgsIDE3NzIzLCAxNzczMiwgMTc3MzksIAotICAgIDE3NzQ1LCAxNzc1MiwgMTc3NjAsIDE3NzY2LCAxNzc3MiwgMTc3NzgsIDE3Nzg0LCAxNzc5MiwgMTc4MDAsIDE3ODEwLCAKLSAgICAxNzgxOCwgMTc4MjYsIDE3ODMyLCAxNzgzNywgMTc4NDIsIDE3ODQ3LCAxNzg1MiwgMTc4NTcsIDE3ODYyLCAxNzg2NywgCi0gICAgMTc4NzIsIDAsIDAsIDAsIDAsIDE3ODc3LCAxNzg4MiwgMTc4ODgsIDE3ODkzLCAxNzg5OCwgMTc5MDMsIDE3OTA4LCAKLSAgICAxNzkxMywgMTc5MTgsIDE3OTIzLCAxNzkyOCwgMTc5MzMsIDE3OTM4LCAxNzk0MywgMTc5NDgsIDE3OTUzLCAxNzk1OCwgCi0gICAgMTc5NjMsIDE3OTY4LCAxNzk3MywgMTc5NzgsIDE3OTgzLCAxNzk4OCwgMTc5OTMsIDE3OTk4LCAxODAwMywgMTgwMDgsIAotICAgIDE4MDEzLCAxODAxOCwgMTgwMjMsIDE4MDI4LCAxODAzMywgMTgwMzgsIDE4MDQzLCAxODA0OCwgMTgwNTMsIDE4MDU4LCAKLSAgICAxODA2MywgMTgwNjgsIDE4MDczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODA3OCwgMTgwODIsIDE4MDg2LCAKLSAgICAxODA5MCwgMTgwOTQsIDE4MDk4LCAxODEwMiwgMTgxMDYsIDE4MTEwLCAxODExNCwgMTgxMTgsIDE4MTIyLCAxODEyNiwgCi0gICAgMTgxMzAsIDE4MTM0LCAxODEzOCwgMTgxNDIsIDE4MTQ2LCAxODE1MCwgMTgxNTQsIDE4MTU4LCAxODE2MiwgMTgxNjYsIAotICAgIDE4MTcwLCAxODE3NCwgMTgxNzgsIDE4MTgyLCAxODE4NiwgMTgxOTAsIDE4MTk0LCAxODE5OCwgMTgyMDIsIDE4MjA2LCAKLSAgICAxODIxMCwgMTgyMTQsIDE4MjE4LCAxODIyMiwgMTgyMjYsIDE4MjMwLCAxODIzNCwgMTgyMzgsIDE4MjQyLCAxODI0NywgCi0gICAgMTgyNTEsIDE4MjU2LCAwLCAwLCAwLCAxODI2MSwgMTgyNjUsIDE4MjY5LCAxODI3MywgMTgyNzcsIDE4MjgxLCAxODI4NSwgCi0gICAgMTgyODksIDE4MjkzLCAxODI5NywgMTgzMDEsIDE4MzA1LCAxODMwOSwgMTgzMTMsIDE4MzE3LCAxODMyMSwgMTgzMjUsIAotICAgIDE4MzI5LCAxODMzMywgMTgzMzcsIDE4MzQxLCAxODM0NSwgMTgzNDksIDE4MzUzLCAxODM1NywgMTgzNjEsIDE4MzY1LCAKLSAgICAxODM2OSwgMTgzNzMsIDE4Mzc3LCAxODM4MSwgMTgzODUsIDE4Mzg5LCAxODM5MywgMTgzOTcsIDE4NDAxLCAxODQwNSwgCi0gICAgMTg0MDksIDE4NDEzLCAxODQxNywgMTg0MjEsIDE4NDI1LCAxODQyOSwgMTg0MzMsIDE4NDM3LCAxODQ0MSwgMTg0NDUsIAotICAgIDE4NDQ5LCAxODQ1MywgMTg0NTcsIDE4NDYxLCAxODQ2NSwgMTg0NjksIDE4NDczLCAxODQ3NywgMTg0ODEsIDE4NDg1LCAKLSAgICAxODQ4OSwgMTg0OTMsIDE4NDk3LCAxODUwMSwgMTg1MDUsIDE4NTA5LCAxODUxMywgMTg1MTcsIDE4NTIxLCAxODUyNSwgCi0gICAgMTg1MjksIDE4NTMzLCAxODUzNywgMTg1NDEsIDE4NTQ1LCAxODU0OSwgMTg1NTMsIDE4NTU3LCAxODU2MSwgMTg1NjUsIAotICAgIDE4NTY5LCAxODU3MywgMTg1NzcsIDE4NTgxLCAxODU4NSwgMTg1ODksIDE4NTkzLCAxODU5NywgMTg2MDEsIDE4NjA1LCAKLSAgICAxODYwOSwgMTg2MTMsIDE4NjE3LCAwLCAwLCAwLCAwLCAwLCAxODYyMSwgMTg2MjUsIDE4NjI5LCAxODYzMiwgMTg2MzYsIAotICAgIDE4NjM5LCAxODY0MywgMTg2NDcsIDE4NjUwLCAxODY1NCwgMTg2NTgsIDE4NjYxLCAxODY2NSwgMTg2NjksIDE4NjczLCAKLSAgICAxODY3NywgMTg2ODAsIDE4Njg0LCAxODY4OCwgMTg2OTIsIDE4Njk2LCAxODcwMCwgMTg3MDQsIDE4NzA3LCAxODcxMSwgCi0gICAgMTg3MTUsIDE4NzE5LCAxODcyMywgMTg3MjcsIDE4NzMxLCAxODczNSwgMTg3MzksIDE4NzQzLCAxODc0NywgMTg3NTEsIAotICAgIDE4NzU1LCAxODc1OSwgMTg3NjMsIDE4NzY3LCAxODc3MSwgMTg3NzUsIDE4Nzc5LCAxODc4MywgMTg3ODcsIDE4NzkxLCAKLSAgICAxODc5NSwgMTg3OTksIDE4ODAzLCAxODgwNywgMTg4MTEsIDE4ODE1LCAxODgxOSwgMTg4MjMsIDE4ODI3LCAxODgzMSwgCi0gICAgMTg4MzUsIDE4ODM5LCAxODg0MywgMTg4NDcsIDE4ODUxLCAxODg1NSwgMTg4NTksIDE4ODYzLCAxODg2NywgMTg4NzEsIAotICAgIDE4ODc1LCAxODg3OSwgMTg4ODMsIDAsIDAsIDAsIDAsIDAsIDE4ODg3LCAxODg5MSwgMTg4OTUsIDE4ODk5LCAxODkwMywgCi0gICAgMTg5MDcsIDE4OTExLCAxODkxNSwgMTg5MTksIDE4OTIzLCAxODkyNywgMTg5MzEsIDE4OTM1LCAxODkzOSwgMTg5NDMsIAotICAgIDE4OTQ3LCAxODk1MSwgMTg5NTUsIDE4OTU5LCAxODk2MywgMTg5NjcsIDE4OTcxLCAxODk3NSwgMTg5NzksIDE4OTgzLCAKLSAgICAxODk4NywgMTg5OTEsIDE4OTk1LCAxODk5OSwgMTkwMDMsIDE5MDA3LCAxOTAxMSwgMTkwMTUsIDE5MDE5LCAxOTAyMywgCi0gICAgMTkwMjcsIDE5MDMxLCAxOTAzNSwgMTkwMzksIDE5MDQzLCAxOTA0NywgMTkwNTEsIDE5MDU1LCAxOTA1OSwgMTkwNjMsIAotICAgIDE5MDY3LCAxOTA3MSwgMTkwNzUsIDE5MDc5LCAxOTA4MywgMTkwODcsIDE5MDkxLCAxOTA5NSwgMTkwOTksIDE5MTAzLCAKLSAgICAxOTEwNywgMTkxMTEsIDE5MTE1LCAxOTExOSwgMTkxMjMsIDE5MTI3LCAxOTEzMSwgMTkxMzUsIDE5MTM5LCAxOTE0MywgCi0gICAgMTkxNDcsIDE5MTUxLCAxOTE1NSwgMTkxNTksIDE5MTYzLCAxOTE2NywgMTkxNzEsIDE5MTc1LCAxOTE3OSwgMTkxODMsIAotICAgIDE5MTg3LCAxOTE5MSwgMTkxOTUsIDE5MTk5LCAxOTIwMywgMTkyMDcsIDE5MjExLCAwLCAwLCAwLCAwLCAwLCAwLCAxOTIxNSwgCi0gICAgMTkyMTgsIDE5MjIyLCAxOTIyNiwgMTkyMzAsIDE5MjM0LCAxOTIzOCwgMTkyNDIsIDE5MjQ2LCAxOTI1MCwgMTkyNTQsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNzgwLCAxMTc4NiwgCisgICAgMTE3OTAsIDExNzk0LCAxMTc5OCwgMTE4MDMsIDExODA2LCAxMTgxMCwgMTE4MTMsIDExODE3LCAxMTgyMCwgMTE4MjQsIAorICAgIDExODI4LCAxMTgzMiwgMTE4MzcsIDExODQyLCAxMTg0NSwgMTE4NDksIDExODU0LCAxMTg1OSwgMTE4NjIsIDExODY2LCAKKyAgICAxMTg2OSwgMTE4NzMsIDExODc3LCAxMTg4MSwgMTE4ODUsIDExODg5LCAxMTg5MywgMTE4OTcsIDExOTAxLCAxMTkwNSwgCisgICAgMTE5MDksIDExOTEzLCAxMTkxNywgMTE5MjEsIDExOTI1LCAxMTkyOSwgMTE5MzMsIDExOTM3LCAxMTk0MSwgMTE5NDQsIAorICAgIDExOTQ4LCAxMTk1MSwgMTE5NTUsIDExOTU5LCAxMTk2MywgMTE5NjYsIDExOTY5LCAxMTk3MiwgMTE5NzYsIDExOTgwLCAKKyAgICAxMTk4NCwgMTE5ODgsIDExOTkyLCAxMTk5NiwgMTIwMDAsIDEyMDA0LCAwLCAwLCAxMjAwNywgMTIwMTEsIDEyMDE1LCAKKyAgICAxMjAyMCwgMTIwMjQsIDEyMDI5LCAxMjAzMywgMTIwMzgsIDEyMDQzLCAxMjA0OSwgMTIwNTUsIDEyMDYxLCAxMjA2NSwgCisgICAgMTIwNzAsIDEyMDc2LCAxMjA4MiwgMTIwODYsIDEyMDkxLCAxMjA5NSwgMCwgMTIxMDEsIDEyMTA0LCAxMjExMCwgMTIxMTYsIAorICAgIDEyMTIxLCAxMjEyNiwgMCwgMCwgMTIxMzMsIDEyMTM3LCAxMjE0MSwgMTIxNDUsIDEyMTQ5LCAxMjE1MywgMTIxNTcsIAorICAgIDEyMTYxLCAxMjE2NSwgMTIxNzAsIDEyMTc1LCAxMjE4MCwgMTIxODYsIDEyMTg5LCAxMjE5MywgMTIxOTcsIDEyMjAwLCAKKyAgICAxMjIwMywgMTIyMDYsIDEyMjA5LCAxMjIxMiwgMTIyMTUsIDEyMjE4LCAxMjIyMSwgMTIyMjQsIDEyMjI4LCAxMjIzNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTIyNDAsIDEyMjQ0LCAxMjI0OCwgMTIyNTIsIDEyMjU2LCAxMjI2MiwgMTIyNjYsIDAsIDEyMjcwLCAKKyAgICAxMjI3NCwgMTIyNzgsIDAsIDEyMjgyLCAxMjI4NSwgMTIyODksIDEyMjkyLCAxMjI5NiwgMTIyOTksIDEyMzAzLCAxMjMwNywgCisgICAgMCwgMCwgMTIzMTEsIDEyMzE0LCAwLCAwLCAxMjMxOCwgMTIzMjEsIDEyMzI1LCAxMjMyOCwgMTIzMzIsIDEyMzM2LCAKKyAgICAxMjM0MCwgMTIzNDQsIDEyMzQ4LCAxMjM1MiwgMTIzNTYsIDEyMzYwLCAxMjM2NCwgMTIzNjgsIDEyMzcyLCAxMjM3NiwgCisgICAgMTIzODAsIDEyMzg0LCAxMjM4OCwgMTIzOTIsIDEyMzk2LCAxMjQwMCwgMCwgMTI0MDMsIDEyNDA2LCAxMjQxMCwgMTI0MTQsIAorICAgIDEyNDE4LCAxMjQyMSwgMTI0MjQsIDAsIDEyNDI3LCAwLCAwLCAwLCAxMjQzMSwgMTI0MzUsIDEyNDM5LCAxMjQ0MywgMCwgMCwgCisgICAgMTI0NDYsIDEyNDUwLCAxMjQ1NCwgMTI0NTksIDEyNDYzLCAxMjQ2OCwgMTI0NzIsIDEyNDc3LCAxMjQ4MiwgMCwgMCwgCisgICAgMTI0ODgsIDEyNDkyLCAwLCAwLCAxMjQ5NywgMTI1MDEsIDEyNTA2LCAxMjUxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTI1MTYsIDAsIDAsIDAsIDAsIDEyNTIyLCAxMjUyNiwgMCwgMTI1MzAsIDEyNTM0LCAxMjUzOSwgMTI1NDQsIDEyNTQ5LCAwLCAKKyAgICAwLCAxMjU1NSwgMTI1NTksIDEyNTYyLCAxMjU2NSwgMTI1NjgsIDEyNTcxLCAxMjU3NCwgMTI1NzcsIDEyNTgwLCAxMjU4MywgCisgICAgMTI1ODYsIDEyNTk1LCAxMjYwNCwgMTI2MDgsIDEyNjEyLCAxMjYxOCwgMTI2MjQsIDEyNjMwLCAxMjYzNiwgMTI2NTAsIAorICAgIDEyNjU3LCAxMjY2MCwgMCwgMCwgMCwgMCwgMCwgMTI2NjQsIDEyNjcwLCAxMjY3NCwgMCwgMTI2NzgsIDEyNjgxLCAxMjY4NSwgCisgICAgMTI2ODgsIDEyNjkyLCAxMjY5NSwgMCwgMCwgMCwgMCwgMTI2OTksIDEyNzAzLCAwLCAwLCAxMjcwNywgMTI3MTEsIDEyNzE1LCAKKyAgICAxMjcxOCwgMTI3MjIsIDEyNzI2LCAxMjczMCwgMTI3MzQsIDEyNzM4LCAxMjc0MiwgMTI3NDYsIDEyNzUwLCAxMjc1NCwgCisgICAgMTI3NTgsIDEyNzYyLCAxMjc2NiwgMTI3NzAsIDEyNzc0LCAxMjc3OCwgMTI3ODIsIDEyNzg2LCAxMjc5MCwgMCwgMTI3OTMsIAorICAgIDEyNzk2LCAxMjgwMCwgMTI4MDQsIDEyODA4LCAxMjgxMSwgMTI4MTQsIDAsIDEyODE3LCAxMjgyMSwgMCwgMTI4MjUsIAorICAgIDEyODI5LCAwLCAxMjgzMywgMTI4MzcsIDAsIDAsIDEyODQwLCAwLCAxMjg0NCwgMTI4NDksIDEyODUzLCAxMjg1OCwgCisgICAgMTI4NjIsIDAsIDAsIDAsIDAsIDEyODY3LCAxMjg3MiwgMCwgMCwgMTI4NzcsIDEyODgyLCAxMjg4NywgMCwgMCwgMCwgCisgICAgMTI4OTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyODk1LCAxMjg5OSwgMTI5MDMsIDEyOTA3LCAwLCAxMjkxMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTI5MTUsIDEyOTE5LCAxMjkyMiwgMTI5MjUsIDEyOTI4LCAxMjkzMSwgMTI5MzQsIDEyOTM3LCAKKyAgICAxMjk0MCwgMTI5NDMsIDEyOTQ2LCAxMjk0OSwgMTI5NTIsIDEyOTU1LCAxMjk1OCwgMTI5NjMsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEyOTY3LCAxMjk3MSwgMTI5NzUsIDAsIDEyOTc5LCAxMjk4MiwgMTI5ODYsIDEyOTg5LCAxMjk5MywgCisgICAgMTI5OTYsIDEzMDAwLCAxMzAwNCwgMTMwMDgsIDAsIDEzMDEzLCAxMzAxNiwgMTMwMjAsIDAsIDEzMDI1LCAxMzAyOCwgCisgICAgMTMwMzIsIDEzMDM1LCAxMzAzOSwgMTMwNDMsIDEzMDQ3LCAxMzA1MSwgMTMwNTUsIDEzMDU5LCAxMzA2MywgMTMwNjcsIAorICAgIDEzMDcxLCAxMzA3NSwgMTMwNzksIDEzMDgzLCAxMzA4NywgMTMwOTEsIDEzMDk1LCAxMzA5OSwgMTMxMDMsIDEzMTA3LCAwLCAKKyAgICAxMzExMCwgMTMxMTMsIDEzMTE3LCAxMzEyMSwgMTMxMjUsIDEzMTI4LCAxMzEzMSwgMCwgMTMxMzQsIDEzMTM4LCAwLCAKKyAgICAxMzE0MiwgMTMxNDYsIDEzMTUwLCAxMzE1NCwgMTMxNTgsIDAsIDAsIDEzMTYxLCAxMzE2NSwgMTMxNjksIDEzMTc0LCAKKyAgICAxMzE3OCwgMTMxODMsIDEzMTg3LCAxMzE5MiwgMTMxOTcsIDEzMjAzLCAwLCAxMzIwOSwgMTMyMTMsIDEzMjE4LCAwLCAKKyAgICAxMzIyNCwgMTMyMjgsIDEzMjMzLCAwLCAwLCAxMzIzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTMyNDAsIDEzMjQ1LCAxMzI1MCwgMTMyNTUsIDAsIDAsIDEzMjYxLCAxMzI2NSwgMTMyNjgsIDEzMjcxLCAKKyAgICAxMzI3NCwgMTMyNzcsIDEzMjgwLCAxMzI4MywgMTMyODYsIDEzMjg5LCAwLCAxMzI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMyOTYsIDEzMzAwLCAxMzMwNCwgMCwgMTMzMDgsIDEzMzExLCAxMzMxNSwgCisgICAgMTMzMTgsIDEzMzIyLCAxMzMyNSwgMTMzMjksIDEzMzMzLCAwLCAwLCAxMzMzNywgMTMzNDAsIDAsIDAsIDEzMzQ0LCAKKyAgICAxMzM0NywgMTMzNTEsIDEzMzU0LCAxMzM1OCwgMTMzNjIsIDEzMzY2LCAxMzM3MCwgMTMzNzQsIDEzMzc4LCAxMzM4MiwgCisgICAgMTMzODYsIDEzMzkwLCAxMzM5NCwgMTMzOTgsIDEzNDAyLCAxMzQwNiwgMTM0MTAsIDEzNDE0LCAxMzQxOCwgMTM0MjIsIAorICAgIDEzNDI2LCAwLCAxMzQyOSwgMTM0MzIsIDEzNDM2LCAxMzQ0MCwgMTM0NDQsIDEzNDQ3LCAxMzQ1MCwgMCwgMTM0NTMsIAorICAgIDEzNDU3LCAwLCAxMzQ2MSwgMTM0NjUsIDEzNDY5LCAxMzQ3MywgMTM0NzcsIDAsIDAsIDEzNDgwLCAxMzQ4NCwgMTM0ODgsIAorICAgIDEzNDkzLCAxMzQ5NywgMTM1MDIsIDEzNTA2LCAxMzUxMSwgMTM1MTYsIDAsIDAsIDEzNTIyLCAxMzUyNiwgMCwgMCwgCisgICAgMTM1MzEsIDEzNTM1LCAxMzU0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1NDQsIDEzNTUwLCAwLCAwLCAwLCAwLCAKKyAgICAxMzU1NiwgMTM1NjAsIDAsIDEzNTY0LCAxMzU2OCwgMTM1NzMsIDEzNTc4LCAxMzU4MywgMCwgMCwgMTM1ODksIDEzNTkzLCAKKyAgICAxMzU5NiwgMTM1OTksIDEzNjAyLCAxMzYwNSwgMTM2MDgsIDEzNjExLCAxMzYxNCwgMTM2MTcsIDEzNjIwLCAxMzYyMywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM2MjcsIDEzNjMxLCAwLCAxMzYzNSwgCisgICAgMTM2MzgsIDEzNjQyLCAxMzY0NSwgMTM2NDksIDEzNjUyLCAwLCAwLCAwLCAxMzY1NiwgMTM2NTksIDEzNjYzLCAwLCAKKyAgICAxMzY2NywgMTM2NzAsIDEzNjc0LCAxMzY3OCwgMCwgMCwgMCwgMTM2ODEsIDEzNjg1LCAwLCAxMzY4OSwgMCwgMTM2OTMsIAorICAgIDEzNjk3LCAwLCAwLCAwLCAxMzcwMSwgMTM3MDUsIDAsIDAsIDAsIDEzNzA5LCAxMzcxMiwgMTM3MTYsIDAsIDAsIDAsIAorICAgIDEzNzE5LCAxMzcyMiwgMTM3MjUsIDEzNzI4LCAxMzczMiwgMTM3MzYsIDEzNzQwLCAxMzc0NCwgMTM3NDgsIDEzNzUyLCAKKyAgICAxMzc1NiwgMTM3NjAsIDAsIDAsIDAsIDAsIDEzNzYzLCAxMzc2OCwgMTM3NzIsIDEzNzc3LCAxMzc4MSwgMCwgMCwgMCwgCisgICAgMTM3ODYsIDEzNzkwLCAxMzc5NSwgMCwgMTM4MDAsIDEzODA0LCAxMzgwOSwgMTM4MTQsIDAsIDAsIDEzODE4LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMzgyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM4MjcsIDEzODMxLCAKKyAgICAxMzgzNCwgMTM4MzcsIDEzODQwLCAxMzg0MywgMTM4NDYsIDEzODQ5LCAxMzg1MiwgMTM4NTUsIDEzODU4LCAxMzg2MiwgCisgICAgMTM4NjcsIDEzODcyLCAxMzg3NiwgMTM4ODAsIDEzODg0LCAxMzg4OCwgMTM4OTIsIDEzODk3LCAxMzkwMSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTM5MDQsIDEzOTA4LCAxMzkxMiwgMCwgMTM5MTYsIDEzOTE5LCAxMzkyMywgMTM5MjYsIDEzOTMwLCAKKyAgICAxMzkzMywgMTM5MzcsIDEzOTQxLCAwLCAxMzk0NSwgMTM5NDgsIDEzOTUyLCAwLCAxMzk1NiwgMTM5NTksIDEzOTYzLCAKKyAgICAxMzk2NywgMTM5NzAsIDEzOTc0LCAxMzk3OCwgMTM5ODIsIDEzOTg2LCAxMzk5MCwgMTM5OTQsIDEzOTk4LCAxNDAwMiwgCisgICAgMTQwMDYsIDE0MDEwLCAxNDAxNCwgMTQwMTgsIDE0MDIyLCAxNDAyNiwgMTQwMzAsIDE0MDM0LCAxNDAzOCwgMTQwNDIsIDAsIAorICAgIDE0MDQ1LCAxNDA0OCwgMTQwNTIsIDE0MDU2LCAxNDA2MCwgMTQwNjMsIDE0MDY2LCAxNDA2OSwgMTQwNzMsIDE0MDc3LCAwLCAKKyAgICAxNDA4MSwgMTQwODUsIDE0MDg5LCAxNDA5MywgMTQwOTcsIDAsIDAsIDAsIDE0MTAwLCAxNDEwNCwgMTQxMDksIDE0MTEzLCAKKyAgICAxNDExOCwgMTQxMjIsIDE0MTI3LCAxNDEzMiwgMCwgMTQxMzgsIDE0MTQyLCAxNDE0NywgMCwgMTQxNTIsIDE0MTU2LCAKKyAgICAxNDE2MSwgMTQxNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MTcwLCAxNDE3NCwgMCwgMTQxODAsIDE0MTg0LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxNDE4OCwgMTQxOTMsIDE0MTk4LCAxNDIwMywgMCwgMCwgMTQyMDksIDE0MjEzLCAxNDIxNiwgMTQyMTksIAorICAgIDE0MjIyLCAxNDIyNSwgMTQyMjgsIDE0MjMxLCAxNDIzNCwgMTQyMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MjQwLCAKKyAgICAxNDI1MywgMTQyNjUsIDE0Mjc3LCAxNDI4OSwgMTQzMDEsIDE0MzEzLCAxNDMyNSwgMCwgMCwgMTQzMjksIDE0MzMzLCAwLCAKKyAgICAxNDMzNywgMTQzNDAsIDE0MzQ0LCAxNDM0NywgMTQzNTEsIDE0MzU0LCAxNDM1OCwgMTQzNjIsIDAsIDE0MzY2LCAxNDM2OSwgCisgICAgMTQzNzMsIDAsIDE0Mzc3LCAxNDM4MCwgMTQzODQsIDE0Mzg4LCAxNDM5MSwgMTQzOTUsIDE0Mzk5LCAxNDQwMywgMTQ0MDcsIAorICAgIDE0NDExLCAxNDQxNSwgMTQ0MTksIDE0NDIzLCAxNDQyNywgMTQ0MzEsIDE0NDM1LCAxNDQzOSwgMTQ0NDMsIDE0NDQ3LCAKKyAgICAxNDQ1MSwgMTQ0NTUsIDE0NDU5LCAxNDQ2MywgMCwgMTQ0NjYsIDE0NDY5LCAxNDQ3MywgMTQ0NzcsIDE0NDgxLCAxNDQ4NCwgCisgICAgMTQ0ODcsIDE0NDkwLCAxNDQ5NCwgMTQ0OTgsIDAsIDE0NTAyLCAxNDUwNiwgMTQ1MTAsIDE0NTE0LCAxNDUxOCwgMCwgMCwgCisgICAgMTQ1MjEsIDE0NTI1LCAxNDUyOSwgMTQ1MzQsIDE0NTM4LCAxNDU0MywgMTQ1NDcsIDE0NTUyLCAxNDU1NywgMCwgMTQ1NjMsIAorICAgIDE0NTY3LCAxNDU3MiwgMCwgMTQ1NzcsIDE0NTgxLCAxNDU4NiwgMTQ1OTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NTk1LCAKKyAgICAxNDU5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ2MDUsIDAsIDE0NjA5LCAxNDYxNCwgMTQ2MTksIDE0NjI0LCAwLCAwLCAKKyAgICAxNDYzMCwgMTQ2MzQsIDE0NjM3LCAxNDY0MCwgMTQ2NDMsIDE0NjQ2LCAxNDY0OSwgMTQ2NTIsIDE0NjU1LCAxNDY1OCwgMCwgCisgICAgMTQ2NjEsIDE0NjY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDY2OSwgMTQ2NzMsIAorICAgIDAsIDE0Njc3LCAxNDY4MCwgMTQ2ODQsIDE0Njg3LCAxNDY5MSwgMTQ2OTQsIDE0Njk4LCAxNDcwMiwgMCwgMTQ3MDYsIAorICAgIDE0NzA5LCAxNDcxMywgMCwgMTQ3MTcsIDE0NzIwLCAxNDcyNCwgMTQ3MjgsIDE0NzMxLCAxNDczNSwgMTQ3MzksIDE0NzQzLCAKKyAgICAxNDc0NywgMTQ3NTEsIDE0NzU1LCAxNDc1OSwgMTQ3NjMsIDE0NzY3LCAxNDc3MSwgMTQ3NzUsIDE0Nzc5LCAxNDc4MywgCisgICAgMTQ3ODcsIDE0NzkxLCAxNDc5NSwgMTQ3OTksIDE0ODAzLCAwLCAxNDgwNiwgMTQ4MDksIDE0ODEzLCAxNDgxNywgMTQ4MjEsIAorICAgIDE0ODI0LCAxNDgyNywgMTQ4MzAsIDE0ODM0LCAxNDgzOCwgMTQ4NDIsIDE0ODQ2LCAxNDg1MCwgMTQ4NTQsIDE0ODU4LCAKKyAgICAxNDg2MiwgMCwgMCwgMCwgMTQ4NjUsIDE0ODY5LCAxNDg3NCwgMTQ4NzgsIDE0ODgzLCAxNDg4NywgMTQ4OTIsIDE0ODk3LCAKKyAgICAwLCAxNDkwMywgMTQ5MDcsIDE0OTEyLCAwLCAxNDkxNywgMTQ5MjEsIDE0OTI2LCAxNDkzMSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTQ5MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0OTQxLCAxNDk0NiwgMTQ5NTEsIDE0OTU2LCAwLCAwLCAKKyAgICAxNDk2MiwgMTQ5NjYsIDE0OTY5LCAxNDk3MiwgMTQ5NzUsIDE0OTc4LCAxNDk4MSwgMTQ5ODQsIDE0OTg3LCAxNDk5MCwgCisgICAgMTQ5OTMsIDE0OTk3LCAxNTAwMiwgMTUwMDcsIDE1MDEzLCAxNTAxOSwgMCwgMCwgMCwgMTUwMjUsIDE1MDI5LCAxNTAzNSwgCisgICAgMTUwNDAsIDE1MDQ2LCAxNTA1MSwgMTUwNTcsIDAsIDAsIDE1MDYzLCAxNTA2NywgMCwgMTUwNzEsIDE1MDc1LCAxNTA3OSwgCisgICAgMTUwODMsIDE1MDg3LCAxNTA5MSwgMTUwOTUsIDE1MDk5LCAxNTEwMywgMTUxMDcsIDE1MTExLCAxNTExNSwgMTUxMTksIAorICAgIDE1MTIzLCAxNTEyNywgMTUxMzEsIDE1MTM1LCAxNTEzOSwgMCwgMCwgMCwgMTUxNDMsIDE1MTQ5LCAxNTE1NSwgMTUxNjEsIAorICAgIDE1MTY3LCAxNTE3MywgMTUxNzksIDE1MTg1LCAxNTE5MSwgMTUxOTcsIDE1MjAzLCAxNTIwOSwgMTUyMTcsIDE1MjIzLCAKKyAgICAxNTIyOSwgMTUyMzUsIDE1MjQxLCAxNTI0NywgMTUyNTMsIDE1MjU5LCAxNTI2NSwgMTUyNzEsIDE1Mjc3LCAxNTI4MywgMCwgCisgICAgMTUyODksIDE1Mjk1LCAxNTMwMSwgMTUzMDcsIDE1MzEzLCAxNTMxOSwgMTUzMjMsIDE1MzI5LCAxNTMzMywgMCwgMTUzMzcsIAorICAgIDAsIDAsIDE1MzQzLCAxNTM0NywgMTUzNTMsIDE1MzU5LCAxNTM2NSwgMTUzNjksIDE1Mzc1LCAwLCAwLCAwLCAxNTM3OSwgMCwgCisgICAgMCwgMCwgMCwgMTUzODMsIDE1Mzg4LCAxNTM5NSwgMTU0MDIsIDE1NDA5LCAxNTQxNiwgMCwgMTU0MjMsIDAsIDE1NDMwLCAKKyAgICAxNTQzNSwgMTU0NDAsIDE1NDQ3LCAxNTQ1NCwgMTU0NjMsIDE1NDc0LCAxNTQ4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU0ODgsIDE1NDk1LCAxNTUwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTU1MDcsIDE1NTEzLCAxNTUxOSwgMTU1MjUsIDE1NTMxLCAxNTUzNywgMTU1NDMsIDE1NTQ5LCAKKyAgICAxNTU1NSwgMTU1NjEsIDE1NTY3LCAxNTU3MywgMTU1NzksIDE1NTg1LCAxNTU5MSwgMTU1OTYsIDE1NjAyLCAxNTYwOCwgCisgICAgMTU2MTQsIDE1NjIwLCAxNTYyNiwgMTU2MzEsIDE1NjM3LCAxNTY0MywgMTU2NDksIDE1NjU1LCAxNTY2MSwgMTU2NjcsIAorICAgIDE1NjczLCAxNTY3OSwgMTU2ODUsIDE1NjkxLCAxNTY5NywgMTU3MDIsIDE1NzA4LCAxNTcxNCwgMTU3MTgsIDE1NzI0LCAKKyAgICAxNTcyOCwgMTU3MzQsIDE1NzQwLCAxNTc0NiwgMTU3NTIsIDE1NzU4LCAxNTc2NCwgMTU3NjksIDE1Nzc1LCAxNTc3OSwgCisgICAgMTU3ODQsIDE1NzkwLCAxNTc5NiwgMTU4MDIsIDE1ODA3LCAxNTgxMywgMTU4MTksIDE1ODI1LCAxNTgzMCwgMTU4MzYsIDAsIAorICAgIDAsIDAsIDAsIDE1ODQwLCAxNTg0NiwgMTU4NTEsIDE1ODU3LCAxNTg2MiwgMTU4NzAsIDE1ODc4LCAxNTg4MiwgMTU4ODYsIAorICAgIDE1ODkwLCAxNTg5NiwgMTU5MDIsIDE1OTA4LCAxNTkxNCwgMTU5MTgsIDE1OTIyLCAxNTkyNiwgMTU5MzAsIDE1OTM0LCAKKyAgICAxNTkzNywgMTU5NDAsIDE1OTQzLCAxNTk0NiwgMTU5NDksIDE1OTUyLCAxNTk1NSwgMTU5NTgsIDE1OTYxLCAxNTk2NSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU5NjksIDE1OTczLCAwLCAxNTk3OSwgMCwgMCwgMTU5ODUsIAorICAgIDE1OTg5LCAwLCAxNTk5MywgMCwgMCwgMTU5OTksIDAsIDAsIDAsIDAsIDAsIDAsIDE2MDAzLCAxNjAwNywgMTYwMTAsIAorICAgIDE2MDE2LCAwLCAxNjAyMiwgMTYwMjYsIDE2MDMwLCAxNjAzNCwgMTYwNDAsIDE2MDQ2LCAxNjA1MiwgMCwgMTYwNTgsIAorICAgIDE2MDYyLCAxNjA2NiwgMCwgMTYwNzIsIDAsIDE2MDc4LCAwLCAwLCAxNjA4MiwgMTYwODgsIDAsIDE2MDk0LCAxNjA5NywgCisgICAgMTYxMDMsIDE2MTA2LCAxNjExMCwgMTYxMTcsIDE2MTIyLCAxNjEyNywgMTYxMzEsIDE2MTM2LCAxNjE0MSwgMTYxNDYsIAorICAgIDE2MTUwLCAwLCAxNjE1NSwgMTYxNjIsIDE2MTY4LCAwLCAwLCAxNjE3NCwgMTYxNzgsIDE2MTgzLCAxNjE4NywgMTYxOTIsIAorICAgIDAsIDE2MTk3LCAwLCAxNjIwMiwgMTYyMDgsIDE2MjE0LCAxNjIyMCwgMTYyMjYsIDE2MjMwLCAwLCAwLCAxNjIzMywgCisgICAgMTYyMzcsIDE2MjQwLCAxNjI0MywgMTYyNDYsIDE2MjQ5LCAxNjI1MiwgMTYyNTUsIDE2MjU4LCAxNjI2MSwgMCwgMCwgCisgICAgMTYyNjQsIDE2MjY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjI3NCwgMTYyNzgsIDE2Mjg5LCAxNjMwNCwgCisgICAgMTYzMTksIDE2MzI5LCAxNjM0MCwgMTYzNTMsIDE2MzY0LCAxNjM3MCwgMTYzNzgsIDE2Mzg4LCAxNjM5NCwgMTY0MDIsIAorICAgIDE2NDA2LCAxNjQxMiwgMTY0MTgsIDE2NDI2LCAxNjQzNiwgMTY0NDQsIDE2NDU3LCAxNjQ2MywgMTY0NzEsIDE2NDc5LCAKKyAgICAxNjQ5MSwgMTY0OTgsIDE2NTA2LCAxNjUxNCwgMTY1MjIsIDE2NTMwLCAxNjUzOCwgMTY1NDYsIDE2NTU2LCAxNjU2MCwgCisgICAgMTY1NjMsIDE2NTY2LCAxNjU2OSwgMTY1NzIsIDE2NTc1LCAxNjU3OCwgMTY1ODEsIDE2NTg0LCAxNjU4NywgMTY1OTEsIAorICAgIDE2NTk1LCAxNjU5OSwgMTY2MDMsIDE2NjA3LCAxNjYxMSwgMTY2MTUsIDE2NjE5LCAxNjYyMywgMTY2MjgsIDE2NjM0LCAKKyAgICAxNjY0NCwgMTY2NTgsIDE2NjY4LCAxNjY3NCwgMTY2ODAsIDE2Njg4LCAxNjY5NiwgMTY3MDQsIDE2NzEyLCAxNjcxOCwgCisgICAgMTY3MjQsIDE2NzI3LCAxNjczMSwgMTY3MzUsIDE2NzM5LCAxNjc0MywgMTY3NDcsIDE2NzUxLCAwLCAxNjc1NSwgMTY3NTksIAorICAgIDE2NzYzLCAxNjc2NywgMTY3NzEsIDE2Nzc1LCAxNjc3OSwgMTY3ODMsIDE2Nzg3LCAxNjc5MSwgMTY3OTUsIDE2Nzk4LCAKKyAgICAxNjgwMSwgMTY4MDUsIDE2ODA5LCAxNjgxMywgMTY4MTYsIDE2ODIwLCAxNjgyNCwgMTY4MjgsIDE2ODMyLCAxNjgzNiwgCisgICAgMTY4NDAsIDE2ODQ0LCAxNjg0OCwgMTY4NTEsIDE2ODU0LCAxNjg1OCwgMTY4NjIsIDE2ODY2LCAxNjg3MCwgMTY4NzMsIAorICAgIDE2ODc2LCAxNjg4MCwgMTY4ODUsIDE2ODg5LCAwLCAwLCAwLCAwLCAxNjg5MywgMTY4OTgsIDE2OTAyLCAxNjkwNywgCisgICAgMTY5MTEsIDE2OTE2LCAxNjkyMSwgMTY5MjcsIDE2OTMyLCAxNjkzOCwgMTY5NDIsIDE2OTQ3LCAxNjk1MSwgMTY5NTYsIAorICAgIDE2OTY2LCAxNjk3MiwgMTY5NzcsIDE2OTgzLCAxNjk5MywgMTY5OTksIDE3MDAzLCAxNzAwNywgMTcwMTMsIDE3MDE5LCAKKyAgICAxNzAyNywgMTcwMzMsIDE3MDQxLCAwLCAwLCAwLCAwLCAxNzA0OSwgMTcwNTQsIDE3MDYwLCAxNzA2NiwgMTcwNzIsIAorICAgIDE3MDc4LCAxNzA4NCwgMTcwOTAsIDAsIDE3MDk2LCAxNzEwMiwgMTcxMDgsIDE3MTE0LCAxNzEyMCwgMTcxMjYsIDE3MTMyLCAKKyAgICAxNzEzOCwgMTcxNDQsIDE3MTUwLCAxNzE1NiwgMTcxNjEsIDE3MTY2LCAxNzE3MiwgMTcxNzgsIDE3MTg0LCAxNzE4OSwgCisgICAgMTcxOTUsIDE3MjAxLCAxNzIwNywgMTcyMTMsIDE3MjE5LCAxNzIyNSwgMTcyMzEsIDE3MjM3LCAxNzI0MiwgMTcyNDcsIAorICAgIDE3MjUzLCAxNzI1OSwgMTcyNjUsIDE3MjcxLCAxNzI3NiwgMTcyODEsIDE3Mjg3LCAxNzI5NSwgMTczMDIsIDAsIDE3MzA5LCAKKyAgICAxNzMxNiwgMTczMjksIDE3MzM2LCAxNzM0MywgMTczNTEsIDE3MzU5LCAxNzM2NSwgMTczNzEsIDE3Mzc3LCAxNzM4NywgCisgICAgMTczOTIsIDE3Mzk4LCAxNzQwOCwgMTc0MTgsIDAsIDE3NDI4LCAxNzQzOCwgMTc0NDYsIDE3NDU4LCAxNzQ3MCwgMTc0NzYsIAorICAgIDE3NDkwLCAxNzUwNSwgMTc1MTAsIDE3NTE1LCAxNzUyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTc1MzEsIDE3NTM0LCAxNzUzOCwgMTc1NDIsIDE3NTQ2LCAxNzU1MCwgMTc1NTQsIDE3NTU4LCAxNzU2MiwgCisgICAgMTc1NjYsIDE3NTcwLCAxNzU3NCwgMTc1NzgsIDE3NTgyLCAxNzU4NiwgMTc1OTAsIDE3NTk0LCAxNzU5OCwgMTc2MDIsIAorICAgIDE3NjA2LCAxNzYxMCwgMTc2MTMsIDE3NjE2LCAxNzYyMCwgMTc2MjQsIDE3NjI4LCAxNzYzMSwgMTc2MzQsIDE3NjM3LCAKKyAgICAxNzY0MSwgMTc2NDUsIDE3NjQ5LCAxNzY1MiwgMTc2NTYsIDE3NjU5LCAxNzY2NCwgMTc2NjcsIDE3NjcxLCAxNzY3NCwgCisgICAgMTc2NzgsIDE3NjgxLCAxNzY4NiwgMTc2ODksIDE3NjkzLCAxNzcwMCwgMTc3MDUsIDE3NzA5LCAxNzcxNCwgMTc3MTgsIAorICAgIDE3NzIzLCAxNzcyNywgMTc3MzIsIDE3NzM5LCAxNzc0NSwgMTc3NTAsIDE3NzU0LCAxNzc1OCwgMTc3NjIsIDE3NzY2LCAKKyAgICAxNzc3MCwgMTc3NzYsIDE3NzgyLCAxNzc4OSwgMTc3OTUsIDE3ODAxLCAxNzgwNSwgMTc4MDgsIDE3ODExLCAxNzgxNCwgCisgICAgMTc4MTcsIDE3ODIwLCAxNzgyMywgMTc4MjYsIDE3ODI5LCAxNzgzMiwgMTc4MzgsIDE3ODQyLCAxNzg0NiwgMTc4NTAsIAorICAgIDE3ODU0LCAxNzg1OCwgMTc4NjIsIDE3ODY2LCAxNzg3MCwgMTc4NzUsIDE3ODc5LCAxNzg4NCwgMTc4ODksIDE3ODk1LCAKKyAgICAxNzkwMCwgMTc5MDYsIDE3OTEyLCAxNzkxOCwgMTc5MjQsIDE3OTMwLCAxNzkzOCwgMTc5NDYsIDE3OTU1LCAxNzk2MywgCisgICAgMTc5NzIsIDE3OTgxLCAxNzk5MiwgMTgwMDIsIDE4MDEyLCAxODAyMywgMTgwMzQsIDE4MDQ0LCAxODA1NCwgMTgwNjQsIAorICAgIDE4MDc0LCAxODA4NCwgMTgwOTQsIDE4MTA0LCAxODExNCwgMTgxMjIsIDE4MTI5LCAxODEzNSwgMTgxNDIsIDE4MTQ3LCAKKyAgICAxODE1MywgMTgxNTksIDE4MTY1LCAxODE3MSwgMTgxNzcsIDE4MTgzLCAxODE4OCwgMTgxOTQsIDE4MjAwLCAxODIwNiwgCisgICAgMTgyMTIsIDE4MjE3LCAxODIyNiwgMTgyMzMsIDE4MjM5LCAxODI0NiwgMTgyNTQsIDE4MjYwLCAxODI2NiwgMTgyNzIsIAorICAgIDE4Mjc4LCAxODI4NiwgMTgyOTQsIDE4MzA0LCAxODMxMiwgMTgzMjAsIDE4MzI2LCAxODMzMSwgMTgzMzYsIDE4MzQxLCAKKyAgICAxODM0NiwgMTgzNTEsIDE4MzU2LCAxODM2MSwgMTgzNjYsIDE4MzcxLCAxODM3NywgMTgzODMsIDE4Mzg5LCAxODM5NiwgCisgICAgMTg0MDEsIDE4NDA3LCAxODQxMiwgMTg0MTcsIDE4NDIyLCAxODQyNywgMTg0MzIsIDE4NDM3LCAxODQ0MiwgMTg0NDcsIAorICAgIDE4NDUyLCAxODQ1NywgMTg0NjIsIDE4NDY3LCAxODQ3MiwgMTg0NzcsIDE4NDgyLCAxODQ4NywgMTg0OTIsIDE4NDk3LCAKKyAgICAxODUwMiwgMTg1MDcsIDE4NTEyLCAxODUxNywgMTg1MjIsIDE4NTI3LCAxODUzMiwgMTg1MzcsIDE4NTQyLCAxODU0NywgCisgICAgMTg1NTIsIDE4NTU3LCAxODU2MiwgMTg1NjcsIDE4NTcyLCAxODU3NywgMTg1ODIsIDE4NTg3LCAxODU5MiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg1OTcsIDE4NjAxLCAxODYwNSwgMTg2MDksIDE4NjEzLCAxODYxNywgMTg2MjEsIAorICAgIDE4NjI1LCAxODYyOSwgMTg2MzMsIDE4NjM3LCAxODY0MSwgMTg2NDUsIDE4NjQ5LCAxODY1MywgMTg2NTcsIDE4NjYxLCAKKyAgICAxODY2NSwgMTg2NjksIDE4NjczLCAxODY3NywgMTg2ODEsIDE4Njg1LCAxODY4OSwgMTg2OTMsIDE4Njk3LCAxODcwMSwgCisgICAgMTg3MDUsIDE4NzA5LCAxODcxMywgMTg3MTcsIDE4NzIxLCAxODcyNSwgMTg3MjksIDE4NzMzLCAxODczNywgMTg3NDEsIAorICAgIDE4NzQ1LCAxODc0OSwgMTg3NTMsIDE4NzU3LCAxODc2MSwgMTg3NjYsIDE4NzcwLCAxODc3NSwgMCwgMCwgMCwgMTg3ODAsIAorICAgIDE4Nzg0LCAxODc4OCwgMTg3OTIsIDE4Nzk2LCAxODgwMCwgMTg4MDQsIDE4ODA4LCAxODgxMiwgMTg4MTYsIDE4ODIwLCAKKyAgICAxODgyNCwgMTg4MjgsIDE4ODMyLCAxODgzNiwgMTg4NDAsIDE4ODQ0LCAxODg0OCwgMTg4NTIsIDE4ODU2LCAxODg2MCwgCisgICAgMTg4NjQsIDE4ODY4LCAxODg3MiwgMTg4NzYsIDE4ODgwLCAxODg4NCwgMTg4ODgsIDE4ODkyLCAxODg5NiwgMTg5MDAsIAorICAgIDE4OTA0LCAxODkwOCwgMTg5MTIsIDE4OTE2LCAxODkyMCwgMTg5MjQsIDE4OTI4LCAxODkzMiwgMTg5MzYsIDE4OTQwLCAKKyAgICAxODk0NCwgMTg5NDgsIDE4OTUyLCAxODk1NiwgMTg5NjAsIDE4OTY0LCAxODk2OCwgMTg5NzIsIDE4OTc2LCAxODk4MCwgCisgICAgMTg5ODQsIDE4OTg4LCAxODk5MiwgMTg5OTYsIDE5MDAwLCAxOTAwNCwgMTkwMDgsIDE5MDEyLCAxOTAxNiwgMTkwMjAsIAorICAgIDE5MDI0LCAxOTAyOCwgMTkwMzIsIDE5MDM2LCAxOTA0MCwgMTkwNDQsIDE5MDQ4LCAxOTA1MiwgMTkwNTYsIDE5MDYwLCAKKyAgICAxOTA2NCwgMTkwNjgsIDE5MDcyLCAxOTA3NiwgMTkwODAsIDE5MDg0LCAxOTA4OCwgMTkwOTIsIDE5MDk2LCAxOTEwMCwgCisgICAgMTkxMDQsIDE5MTA4LCAxOTExMiwgMTkxMTYsIDE5MTIwLCAxOTEyNCwgMTkxMjgsIDE5MTMyLCAxOTEzNiwgMTkxNDAsIAorICAgIDE5MTQ0LCAxOTE0OCwgMTkxNTIsIDE5MTU2LCAxOTE2MCwgMTkxNjQsIDE5MTY4LCAxOTE3MSwgMTkxNzUsIDE5MTc4LCAKKyAgICAxOTE4MiwgMTkxODYsIDE5MTg5LCAxOTE5MywgMTkxOTcsIDE5MjAwLCAxOTIwNCwgMTkyMDgsIDE5MjEyLCAxOTIxNiwgCisgICAgMTkyMTksIDE5MjIzLCAxOTIyNywgMTkyMzEsIDE5MjM1LCAxOTIzOSwgMTkyNDMsIDE5MjQ2LCAxOTI1MCwgMTkyNTQsIAogICAgIDE5MjU4LCAxOTI2MiwgMTkyNjYsIDE5MjcwLCAxOTI3NCwgMTkyNzgsIDE5MjgyLCAxOTI4NiwgMTkyOTAsIDE5Mjk0LCAKLSAgICAxOTI5OCwgMTkzMDIsIDE5MzA2LCAxOTMxMCwgMTkzMTMsIDE5MzE3LCAxOTMyMSwgMTkzMjUsIDE5MzI5LCAxOTMzMywgCi0gICAgMTkzMzcsIDE5MzQxLCAxOTM0NSwgMTkzNDksIDE5MzUzLCAxOTM1NywgMTkzNjEsIDE5MzY1LCAxOTM2OSwgMTkzNzMsIAotICAgIDE5Mzc2LCAxOTM4MCwgMTkzODQsIDE5Mzg4LCAxOTM5MiwgMTkzOTYsIDE5NDAwLCAxOTQwNCwgMTk0MDgsIDE5NDEyLCAKLSAgICAxOTQxNiwgMTk0MjAsIDE5NDI0LCAxOTQyOCwgMTk0MzIsIDE5NDM2LCAxOTQ0MCwgMTk0NDQsIDE5NDQ4LCAxOTQ1MiwgCi0gICAgMTk0NTYsIDE5NDYwLCAxOTQ2NCwgMTk0NjgsIDE5NDcyLCAxOTQ3NiwgMTk0ODAsIDE5NDg0LCAxOTQ4OCwgMTk0OTIsIAotICAgIDE5NDk2LCAxOTUwMCwgMCwgMTk1MDQsIDE5NTA4LCAxOTUxMiwgMTk1MTYsIDAsIDAsIDE5NTIwLCAxOTUyNCwgMTk1MjgsIAotICAgIDE5NTMyLCAxOTUzNiwgMTk1NDAsIDE5NTQ0LCAwLCAxOTU0OCwgMCwgMTk1NTIsIDE5NTU2LCAxOTU2MCwgMTk1NjQsIDAsIAotICAgIDAsIDE5NTY4LCAxOTU3MiwgMTk1NzYsIDE5NTgwLCAxOTU4NCwgMTk1ODgsIDE5NTkyLCAxOTU5NiwgMTk2MDAsIDE5NjA0LCAKLSAgICAxOTYwOCwgMTk2MTIsIDE5NjE2LCAxOTYyMCwgMTk2MjQsIDE5NjI4LCAxOTYzMiwgMTk2MzYsIDE5NjQwLCAxOTY0NCwgCi0gICAgMTk2NDgsIDE5NjUyLCAxOTY1NiwgMTk2NTksIDE5NjYzLCAxOTY2NywgMTk2NzEsIDE5Njc1LCAxOTY3OSwgMTk2ODMsIAotICAgIDE5Njg3LCAxOTY5MSwgMTk2OTUsIDE5Njk5LCAxOTcwMywgMTk3MDcsIDE5NzExLCAxOTcxNSwgMTk3MTksIDE5NzIzLCAKLSAgICAxOTcyNywgMCwgMTk3MzEsIDE5NzM1LCAxOTczOSwgMTk3NDMsIDAsIDAsIDE5NzQ3LCAxOTc1MSwgMTk3NTUsIDE5NzU5LCAKLSAgICAxOTc2MywgMTk3NjcsIDE5NzcxLCAxOTc3NSwgMTk3NzksIDE5NzgzLCAxOTc4NywgMTk3OTEsIDE5Nzk1LCAxOTc5OSwgCi0gICAgMTk4MDMsIDE5ODA3LCAxOTgxMSwgMTk4MTYsIDE5ODIxLCAxOTgyNiwgMTk4MzIsIDE5ODM4LCAxOTg0MywgMTk4NDgsIAotICAgIDE5ODU0LCAxOTg1NywgMTk4NjEsIDE5ODY1LCAxOTg2OSwgMTk4NzMsIDE5ODc3LCAxOTg4MSwgMTk4ODUsIDAsIDE5ODg5LCAKLSAgICAxOTg5MywgMTk4OTcsIDE5OTAxLCAwLCAwLCAxOTkwNSwgMTk5MDksIDE5OTEzLCAxOTkxNywgMTk5MjEsIDE5OTI1LCAKLSAgICAxOTkyOSwgMCwgMTk5MzMsIDAsIDE5OTM3LCAxOTk0MSwgMTk5NDUsIDE5OTQ5LCAwLCAwLCAxOTk1MywgMTk5NTcsIAotICAgIDE5OTYxLCAxOTk2NSwgMTk5NjksIDE5OTczLCAxOTk3NywgMTk5ODEsIDE5OTg1LCAxOTk5MCwgMTk5OTUsIDIwMDAwLCAKLSAgICAyMDAwNiwgMjAwMTIsIDIwMDE3LCAwLCAyMDAyMiwgMjAwMjYsIDIwMDMwLCAyMDAzNCwgMjAwMzgsIDIwMDQyLCAyMDA0NiwgCi0gICAgMjAwNTAsIDIwMDU0LCAyMDA1OCwgMjAwNjIsIDIwMDY2LCAyMDA3MCwgMjAwNzQsIDIwMDc4LCAyMDA4MiwgMjAwODYsIAotICAgIDIwMDg5LCAyMDA5MywgMjAwOTcsIDIwMTAxLCAyMDEwNSwgMjAxMDksIDIwMTEzLCAyMDExNywgMjAxMjEsIDIwMTI1LCAKLSAgICAyMDEyOSwgMjAxMzMsIDIwMTM3LCAyMDE0MSwgMjAxNDUsIDIwMTQ5LCAyMDE1MywgMjAxNTcsIDIwMTYxLCAyMDE2NSwgCi0gICAgMjAxNjksIDIwMTczLCAyMDE3NywgMjAxODEsIDIwMTg1LCAyMDE4OSwgMjAxOTMsIDIwMTk3LCAyMDIwMSwgMjAyMDUsIAotICAgIDIwMjA5LCAyMDIxMywgMjAyMTcsIDIwMjIxLCAyMDIyNSwgMjAyMjksIDIwMjMzLCAyMDIzNywgMjAyNDEsIDIwMjQ1LCAwLCAKLSAgICAyMDI0OSwgMjAyNTMsIDIwMjU3LCAyMDI2MSwgMCwgMCwgMjAyNjUsIDIwMjY5LCAyMDI3MywgMjAyNzcsIDIwMjgxLCAKLSAgICAyMDI4NSwgMjAyODksIDIwMjkzLCAyMDI5NywgMjAzMDEsIDIwMzA1LCAyMDMwOSwgMjAzMTMsIDIwMzE3LCAyMDMyMSwgCi0gICAgMjAzMjUsIDIwMzI5LCAyMDMzMywgMjAzMzcsIDIwMzQxLCAyMDM0NSwgMjAzNDksIDIwMzUzLCAyMDM1NywgMjAzNjEsIAotICAgIDIwMzY1LCAyMDM2OSwgMjAzNzMsIDIwMzc3LCAyMDM4MSwgMjAzODUsIDIwMzg5LCAyMDM5MywgMjAzOTcsIDIwNDAxLCAKLSAgICAyMDQwNSwgMjA0MDksIDIwNDEzLCAyMDQxNywgMjA0MjEsIDIwNDI1LCAyMDQyOSwgMjA0MzMsIDIwNDM3LCAyMDQ0MSwgCi0gICAgMjA0NDUsIDIwNDQ5LCAyMDQ1MywgMjA0NTcsIDIwNDYxLCAyMDQ2NSwgMjA0NjksIDIwNDczLCAyMDQ3NywgMjA0ODEsIAotICAgIDIwNDg1LCAyMDQ4OSwgMjA0OTIsIDIwNDk2LCAyMDUwMCwgMjA1MDQsIDIwNTA4LCAyMDUxMiwgMjA1MTYsIDIwNTIwLCAKLSAgICAyMDUyNCwgMjA1MjgsIDAsIDAsIDAsIDAsIDIwNTMyLCAyMDUzNywgMjA1NDEsIDIwNTQ0LCAyMDU0OSwgMjA1NTIsIAotICAgIDIwNTU1LCAyMDU1OCwgMjA1NjMsIDIwNTY3LCAyMDU3MiwgMjA1NzUsIDIwNTc4LCAyMDU4MSwgMjA1ODQsIDIwNTg3LCAKLSAgICAyMDU5MCwgMjA1OTMsIDIwNTk2LCAyMDU5OSwgMjA2MDMsIDIwNjA3LCAyMDYxMSwgMjA2MTUsIDIwNjE5LCAyMDYyMywgCi0gICAgMjA2MjcsIDIwNjMxLCAyMDYzNSwgMjA2MzksIDAsIDAsIDAsIDIwNjQ1LCAyMDY1MSwgMjA2NTUsIDIwNjU5LCAyMDY2MywgCi0gICAgMjA2NjksIDIwNjczLCAyMDY3NywgMjA2ODEsIDIwNjg3LCAyMDY5MSwgMjA2OTUsIDIwNjk5LCAyMDcwNSwgMjA3MDksIAotICAgIDIwNzEzLCAyMDcxNywgMjA3MjMsIDIwNzI5LCAyMDczNSwgMjA3NDMsIDIwNzQ5LCAyMDc1NSwgMjA3NjEsIDIwNzY3LCAKLSAgICAyMDc3MywgMCwgMCwgMCwgMCwgMCwgMCwgMjA3NzksIDIwNzgyLCAyMDc4NSwgMjA3ODgsIDIwNzkxLCAyMDc5NCwgMjA3OTcsIAotICAgIDIwODAxLCAyMDgwNCwgMjA4MDgsIDIwODEyLCAyMDgxNiwgMjA4MjAsIDIwODI0LCAyMDgyNywgMjA4MzEsIDIwODM1LCAKLSAgICAyMDgzOSwgMjA4NDMsIDIwODQ3LCAyMDg1MSwgMjA4NTUsIDIwODU5LCAyMDg2MywgMjA4NjcsIDIwODcxLCAyMDg3NCwgCi0gICAgMjA4NzgsIDIwODgyLCAyMDg4NiwgMjA4OTAsIDIwODk0LCAyMDg5OCwgMjA5MDIsIDIwOTA2LCAyMDkxMCwgMjA5MTQsIAotICAgIDIwOTE4LCAyMDkyMiwgMjA5MjYsIDIwOTMwLCAyMDkzNCwgMjA5MzgsIDIwOTQyLCAyMDk0NiwgMjA5NTAsIDIwOTUzLCAKLSAgICAyMDk1NywgMjA5NjEsIDIwOTY1LCAyMDk2OSwgMjA5NzMsIDIwOTc3LCAyMDk4MSwgMjA5ODUsIDIwOTg5LCAyMDk5MywgCi0gICAgMjA5OTcsIDIxMDAxLCAyMTAwNSwgMjEwMDksIDIxMDEzLCAyMTAxNywgMjEwMjEsIDIxMDI1LCAyMTAyOSwgMjEwMzMsIAotICAgIDIxMDM3LCAyMTA0MSwgMjEwNDUsIDIxMDQ5LCAyMTA1MywgMjEwNTcsIDIxMDYxLCAyMTA2NSwgMjEwNjksIDIxMDczLCAKLSAgICAyMTA3NywgMjEwODEsIDIxMDg1LCAyMTA4OCwgMjEwOTIsIDIxMDk2LCAyMTEwMCwgMjExMDQsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDIxMTA4LCAyMTExMSwgMjExMTUsIDIxMTE4LCAyMTEyMiwgMjExMjUsIDIxMTI5LCAyMTEzNSwgCi0gICAgMjExNDAsIDIxMTQ0LCAyMTE0NywgMjExNTEsIDIxMTU1LCAyMTE2MCwgMjExNjQsIDIxMTY5LCAyMTE3MywgMjExNzgsIAotICAgIDIxMTgyLCAyMTE4NywgMjExOTEsIDIxMTk2LCAyMTIwMiwgMjEyMDYsIDIxMjExLCAyMTIxNSwgMjEyMjAsIDIxMjI2LCAKLSAgICAyMTIzMCwgMjEyMzYsIDIxMjQyLCAyMTI0NiwgMjEyNTEsIDIxMjU5LCAyMTI2NywgMjEyNzQsIDIxMjc5LCAyMTI4NCwgCi0gICAgMjEyOTMsIDIxMzAwLCAyMTMwNywgMjEzMTIsIDIxMzE4LCAyMTMyMiwgMjEzMjYsIDIxMzMwLCAyMTMzNCwgMjEzMzgsIAotICAgIDIxMzQyLCAyMTM0NiwgMjEzNTAsIDIxMzU0LCAyMTM1OCwgMjEzNjQsIDIxMzY5LCAyMTM3NCwgMjEzNzcsIDIxMzgxLCAKLSAgICAyMTM4NSwgMjEzOTAsIDIxMzk0LCAyMTM5OSwgMjE0MDMsIDIxNDA4LCAyMTQxMiwgMjE0MTcsIDIxNDIxLCAyMTQyNiwgCi0gICAgMjE0MzAsIDIxNDM1LCAyMTQzOSwgMjE0NDQsIDIxNDUwLCAyMTQ1NCwgMjE0NTksIDIxNDYzLCAyMTQ2NywgMjE0NzEsIAotICAgIDIxNDc1LCAyMTQ3OSwgMjE0ODIsIDIxNDg2LCAyMTQ5MiwgMjE0OTcsIDIxNTAyLCAyMTUwNiwgMjE1MTAsIDIxNTE0LCAKLSAgICAyMTUxOSwgMjE1MjMsIDIxNTI4LCAyMTUzMiwgMjE1MzcsIDIxNTQwLCAyMTU0NCwgMjE1NDgsIDIxNTUzLCAyMTU1NywgCi0gICAgMjE1NjIsIDIxNTY2LCAyMTU3MSwgMjE1NzcsIDIxNTgxLCAyMTU4NSwgMjE1ODksIDIxNTkzLCAyMTU5NywgMjE2MDEsIAotICAgIDIxNjA1LCAyMTYwOSwgMjE2MTMsIDIxNjE3LCAyMTYyMSwgMjE2MjcsIDIxNjMwLCAyMTYzNCwgMjE2MzgsIDIxNjQzLCAKLSAgICAyMTY0NywgMjE2NTIsIDIxNjU2LCAyMTY2MSwgMjE2NjUsIDIxNjcwLCAyMTY3NCwgMjE2NzksIDIxNjgzLCAyMTY4OCwgCi0gICAgMjE2OTIsIDIxNjk3LCAyMTcwMywgMjE3MDcsIDIxNzExLCAyMTcxNywgMjE3MjMsIDIxNzI5LCAyMTczNSwgMjE3MzksIAotICAgIDIxNzQzLCAyMTc0NywgMjE3NTEsIDIxNzU1LCAyMTc1OSwgMjE3NjUsIDIxNzY5LCAyMTc3MywgMjE3NzcsIDIxNzgyLCAKLSAgICAyMTc4NiwgMjE3OTEsIDIxNzk1LCAyMTgwMCwgMjE4MDQsIDIxODA5LCAyMTgxMywgMjE4MTgsIDIxODIyLCAyMTgyNywgCi0gICAgMjE4MzEsIDIxODM2LCAyMTg0MiwgMjE4NDYsIDIxODUyLCAyMTg1NiwgMjE4NjAsIDIxODY0LCAyMTg2OCwgMjE4NzIsIAotICAgIDIxODc2LCAyMTg4MiwgMjE4ODUsIDIxODg5LCAyMTg5MywgMjE4OTgsIDIxOTAyLCAyMTkwNywgMjE5MTEsIDIxOTE2LCAKLSAgICAyMTkyMCwgMjE5MjUsIDIxOTI5LCAyMTkzNCwgMjE5MzgsIDIxOTQzLCAyMTk0NywgMjE5NTIsIDIxOTU4LCAyMTk2MSwgCi0gICAgMjE5NjUsIDIxOTY5LCAyMTk3NCwgMjE5NzksIDIxOTgzLCAyMTk4NywgMjE5OTEsIDIxOTk1LCAyMTk5OSwgMjIwMDMsIAotICAgIDIyMDA5LCAyMjAxMywgMjIwMTcsIDIyMDIxLCAyMjAyNiwgMjIwMzAsIDIyMDM1LCAyMjAzOSwgMjIwNDQsIDIyMDUwLCAKLSAgICAyMjA1MywgMjIwNTgsIDIyMDYyLCAyMjA2NiwgMjIwNzAsIDIyMDc0LCAyMjA3OCwgMjIwODIsIDIyMDg2LCAyMjA5MiwgCi0gICAgMjIwOTYsIDIyMTAwLCAyMjEwNCwgMjIxMDksIDIyMTEzLCAyMjExOCwgMjIxMjIsIDIyMTI3LCAyMjEzMSwgMjIxMzYsIAotICAgIDIyMTQwLCAyMjE0NSwgMjIxNDksIDIyMTU0LCAyMjE1OCwgMjIxNjMsIDIyMTY2LCAyMjE3MCwgMjIxNzQsIDIyMTc4LCAKLSAgICAyMjE4MiwgMjIxODYsIDIyMTkwLCAyMjE5NCwgMjIxOTgsIDIyMjA0LCAyMjIwOCwgMjIyMTIsIDIyMjE2LCAyMjIyMSwgCi0gICAgMjIyMjUsIDIyMjMwLCAyMjIzNCwgMjIyMzksIDIyMjQzLCAyMjI0OCwgMjIyNTIsIDIyMjU3LCAyMjI2MSwgMjIyNjYsIAotICAgIDIyMjcwLCAyMjI3NSwgMjIyODEsIDIyMjg0LCAyMjI4OSwgMjIyOTMsIDIyMjk4LCAyMjMwNCwgMjIzMTAsIDIyMzE2LCAKLSAgICAyMjMyMiwgMjIzMjgsIDIyMzM0LCAyMjM0MCwgMjIzNDQsIDIyMzQ4LCAyMjM1MiwgMjIzNTYsIDIyMzYwLCAyMjM2NCwgCi0gICAgMjIzNjgsIDIyMzcyLCAyMjM3NywgMjIzODEsIDIyMzg2LCAyMjM5MCwgMjIzOTUsIDIyMzk5LCAyMjQwNCwgMjI0MDgsIAotICAgIDIyNDEzLCAyMjQxNywgMjI0MjIsIDIyNDI2LCAyMjQzMSwgMjI0MzUsIDIyNDM5LCAyMjQ0MywgMjI0NDcsIDIyNDUxLCAKLSAgICAyMjQ1NSwgMjI0NTksIDIyNDY1LCAyMjQ2OCwgMjI0NzIsIDIyNDc2LCAyMjQ4MSwgMjI0ODUsIDIyNDkwLCAyMjQ5NCwgCi0gICAgMjI0OTksIDIyNTAzLCAyMjUwOCwgMjI1MTIsIDIyNTE3LCAyMjUyMSwgMjI1MjYsIDIyNTMwLCAyMjUzNSwgMjI1NDEsIAotICAgIDIyNTQ1LCAyMjU1MSwgMjI1NTYsIDIyNTYyLCAyMjU2NiwgMjI1NzIsIDIyNTc3LCAyMjU4MSwgMjI1ODUsIDIyNTg5LCAKLSAgICAyMjU5MywgMjI1OTcsIDIyNjAyLCAyMjYwNSwgMjI2MDksIDIyNjE0LCAyMjYxOCwgMjI2MjMsIDIyNjI2LCAyMjYzMCwgCi0gICAgMjI2MzQsIDIyNjM4LCAyMjY0MiwgMjI2NDYsIDIyNjUwLCAyMjY1NCwgMjI2NTgsIDIyNjYyLCAyMjY2NiwgMjI2NzAsIAotICAgIDIyNjc1LCAyMjY3OSwgMjI2ODMsIDIyNjg5LCAyMjY5MywgMjI2OTksIDIyNzAzLCAyMjcwOSwgMjI3MTMsIDIyNzE3LCAKLSAgICAyMjcyMSwgMjI3MjUsIDIyNzI5LCAyMjczNCwgMjI3MzgsIDIyNzQyLCAyMjc0NiwgMjI3NTAsIDIyNzU0LCAyMjc1OCwgCi0gICAgMjI3NjIsIDIyNzY2LCAyMjc3MCwgMjI3NzQsIDIyNzgwLCAyMjc4NiwgMjI3OTIsIDIyNzk4LCAyMjgwNCwgMjI4MDksIAotICAgIDIyODE1LCAyMjgyMCwgMjI4MjUsIDIyODI5LCAyMjgzMywgMjI4MzcsIDIyODQxLCAyMjg0NSwgMjI4NDksIDIyODUzLCAKLSAgICAyMjg1NywgMjI4NjEsIDIyODY1LCAyMjg2OSwgMjI4NzMsIDIyODc3LCAyMjg4MiwgMjI4ODcsIDIyODkyLCAyMjg5NiwgCi0gICAgMjI5MDAsIDIyOTA0LCAyMjkwOCwgMjI5MTIsIDIyOTE2LCAyMjkyMCwgMjI5MjQsIDIyOTI4LCAyMjkzMiwgMjI5MzgsIAotICAgIDIyOTQ0LCAyMjk1MCwgMjI5NTYsIDIyOTYyLCAyMjk2OCwgMjI5NzQsIDIyOTgwLCAyMjk4NiwgMjI5OTAsIDIyOTk0LCAKLSAgICAyMjk5OCwgMjMwMDIsIDIzMDA2LCAyMzAxMCwgMjMwMTQsIDIzMDIwLCAyMzAyNiwgMjMwMzIsIDIzMDM4LCAyMzA0NCwgCi0gICAgMjMwNTAsIDIzMDU2LCAyMzA2MiwgMjMwNjgsIDIzMDczLCAyMzA3OCwgMjMwODMsIDIzMDg4LCAyMzA5NCwgMjMxMDAsIAotICAgIDIzMTA2LCAyMzExMiwgMjMxMTgsIDIzMTI0LCAyMzEzMCwgMjMxMzYsIDIzMTQyLCAyMzE0OCwgMjMxNTQsIDIzMTU5LCAKLSAgICAyMzE2NSwgMjMxNzEsIDIzMTc3LCAyMzE4MiwgMjMxODcsIDIzMTkyLCAyMzE5NywgMjMyMDIsIDIzMjA3LCAyMzIxMiwgCi0gICAgMjMyMTcsIDIzMjIyLCAyMzIyNywgMjMyMzIsIDIzMjM3LCAyMzI0MSwgMjMyNDYsIDIzMjUxLCAyMzI1NiwgMjMyNjEsIAotICAgIDIzMjY2LCAyMzI3MSwgMjMyNzYsIDIzMjgxLCAyMzI4NiwgMjMyOTEsIDIzMjk2LCAyMzMwMSwgMjMzMDYsIDIzMzExLCAKLSAgICAyMzMxNiwgMjMzMjEsIDIzMzI2LCAyMzMzMSwgMjMzMzYsIDIzMzQxLCAyMzM0NiwgMjMzNTEsIDIzMzU2LCAyMzM2MSwgCi0gICAgMjMzNjYsIDIzMzcxLCAyMzM3NiwgMjMzODEsIDIzMzg2LCAyMzM5MCwgMjMzOTUsIDIzNDAwLCAyMzQwNSwgMjM0MTAsIAotICAgIDIzNDE1LCAyMzQyMCwgMjM0MjUsIDIzNDMwLCAyMzQzNSwgMjM0NDAsIDIzNDQ1LCAyMzQ1MCwgMjM0NTUsIDIzNDYwLCAKLSAgICAyMzQ2NSwgMjM0NzAsIDIzNDc1LCAyMzQ4MCwgMjM0ODUsIDIzNDkwLCAyMzQ5NSwgMjM1MDAsIDIzNTA1LCAyMzUxMCwgCi0gICAgMjM1MTUsIDIzNTIwLCAyMzUyNSwgMjM1MzAsIDIzNTM1LCAyMzU0MCwgMjM1NDUsIDIzNTQ5LCAyMzU1NCwgMjM1NTksIAotICAgIDIzNTY0LCAyMzU2OSwgMjM1NzQsIDIzNTc4LCAyMzU4MywgMjM1ODksIDIzNTk0LCAyMzU5OSwgMjM2MDQsIDIzNjA5LCAKLSAgICAyMzYxNSwgMjM2MjAsIDIzNjI1LCAyMzYzMCwgMjM2MzUsIDIzNjQwLCAyMzY0NSwgMjM2NTAsIDIzNjU1LCAyMzY2MCwgCi0gICAgMjM2NjUsIDIzNjcwLCAyMzY3NSwgMjM2ODAsIDIzNjg1LCAyMzY5MCwgMjM2OTUsIDIzNzAwLCAyMzcwNSwgMjM3MTAsIAotICAgIDIzNzE1LCAyMzcyMCwgMjM3MjUsIDIzNzMwLCAyMzczNSwgMjM3NDAsIDIzNzQ1LCAyMzc1MCwgMjM3NTUsIDIzNzYwLCAKLSAgICAyMzc2NSwgMjM3NzAsIDIzNzc1LCAyMzc4MCwgMjM3ODUsIDIzNzkwLCAyMzc5NSwgMjM4MDAsIDIzODA1LCAyMzgxMCwgCi0gICAgMjM4MTUsIDIzODIwLCAyMzgyNSwgMjM4MzAsIDIzODM1LCAyMzg0MSwgMjM4NDYsIDIzODUxLCAyMzg1NiwgMjM4NjEsIAotICAgIDIzODY2LCAyMzg3MSwgMjM4NzYsIDIzODgxLCAyMzg4NiwgMjM4OTEsIDIzODk2LCAyMzkwMSwgMjM5MDYsIDIzOTExLCAKLSAgICAyMzkxNiwgMjM5MjEsIDIzOTI2LCAyMzkzMSwgMjM5MzYsIDIzOTQxLCAyMzk0NiwgMjM5NTEsIDIzOTU2LCAyMzk2MSwgCi0gICAgMjM5NjYsIDIzOTcxLCAyMzk3NiwgMjM5ODEsIDIzOTg2LCAyMzk5MSwgMjM5OTYsIDI0MDAxLCAyNDAwNiwgMjQwMTEsIAotICAgIDI0MDE2LCAyNDAyMSwgMjQwMjYsIDI0MDMxLCAyNDAzNywgMjQwNDEsIDI0MDQ1LCAyNDA0OSwgMjQwNTMsIDI0MDU3LCAKLSAgICAyNDA2MSwgMjQwNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MDY5LCAyNDA3NCwgMjQwNzksIDI0MDg0LCAKLSAgICAyNDA4OSwgMjQwOTQsIDI0MDk5LCAyNDEwNCwgMjQxMDksIDI0MTE0LCAyNDExOSwgMjQxMjQsIDI0MTI5LCAyNDEzNCwgCi0gICAgMjQxMzksIDI0MTQ0LCAyNDE0OSwgMjQxNTQsIDI0MTU5LCAyNDE2NCwgMjQxNjksIDI0MTc0LCAyNDE3OSwgMjQxODQsIAotICAgIDI0MTg5LCAyNDE5NCwgMjQxOTksIDI0MjA0LCAyNDIwOSwgMCwgMCwgMCwgMjQyMTUsIDI0MjI1LCAyNDIyOCwgMjQyMzUsIAotICAgIDI0MjM5LCAyNDI0MywgMjQyNDcsIDI0MjU1LCAyNDI1OSwgMjQyNjQsIDI0MjY5LCAyNDI3NCwgMjQyNzgsIDI0MjgzLCAKLSAgICAyNDI4OCwgMjQyOTEsIDI0Mjk1LCAyNDI5OSwgMjQzMDgsIDI0MzEyLCAyNDMxNiwgMjQzMjIsIDI0MzI1LCAyNDMyOSwgCi0gICAgMjQzMzYsIDI0MzQwLCAyNDM0OCwgMjQzNTMsIDI0MzU4LCAyNDM2MywgMjQzNjgsIDI0Mzc3LCAyNDM4MiwgMjQzODYsIAotICAgIDI0Mzk1LCAyNDM5OCwgMjQ0MDQsIDI0NDA4LCAyNDQxNCwgMjQ0MTksIDI0NDI1LCAyNDQzMywgMjQ0MzksIDI0NDQ0LCAKLSAgICAyNDQ1MSwgMjQ0NTYsIDI0NDYwLCAyNDQ2NCwgMjQ0NzQsIDI0NDgwLCAyNDQ4NCwgMjQ0OTQsIDI0NTAwLCAyNDUwNCwgCi0gICAgMjQ1MDgsIDI0NTE1LCAyNDUyMiwgMjQ1MjcsIDI0NTMyLCAyNDU0MSwgMjQ1NDUsIDI0NTQ5LCAyNDU1MywgMjQ1NjEsIAotICAgIDI0NTY4LCAyNDU3MiwgMjQ1NzYsIDI0NTgwLCAyNDU4NCwgMjQ1ODgsIDI0NTkyLCAyNDU5NiwgMjQ2MDAsIDI0NjA0LCAKLSAgICAyNDYwOCwgMjQ2MTIsIDI0NjE3LCAyNDYyMiwgMjQ2MjcsIDI0NjMxLCAyNDYzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ2MzksIDI0NjQzLCAyNDY0NywgMjQ2NTEsIDI0NjU1LCAyNDY2MCwgMjQ2NjUsIAotICAgIDI0NjcwLCAyNDY3NSwgMjQ2ODAsIDI0Njg0LCAyNDY4OSwgMjQ2OTMsIDAsIDI0Njk3LCAyNDcwMiwgMjQ3MDcsIDI0NzEyLCAKLSAgICAyNDcxNiwgMjQ3MjEsIDI0NzI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDczMSwgMjQ3MzUsIAotICAgIDI0NzM5LCAyNDc0MywgMjQ3NDcsIDI0NzUyLCAyNDc1NywgMjQ3NjIsIDI0NzY3LCAyNDc3MiwgMjQ3NzYsIDI0NzgxLCAKLSAgICAyNDc4NSwgMjQ3ODksIDI0NzkzLCAyNDc5OCwgMjQ4MDMsIDI0ODA4LCAyNDgxMiwgMjQ4MTcsIDI0ODIyLCAyNDgyNywgCi0gICAgMjQ4MzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0ODM4LCAyNDg0MiwgMjQ4NDYsIDI0ODUwLCAyNDg1NCwgCi0gICAgMjQ4NTksIDI0ODY0LCAyNDg2OSwgMjQ4NzQsIDI0ODc5LCAyNDg4MywgMjQ4ODgsIDI0ODkyLCAyNDg5NiwgMjQ5MDAsIAotICAgIDI0OTA1LCAyNDkxMCwgMjQ5MTUsIDI0OTE5LCAyNDkyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjQ5MjksIDI0OTMzLCAyNDkzNywgMjQ5NDEsIDI0OTQ1LCAyNDk1MCwgMjQ5NTUsIDI0OTYwLCAyNDk2NSwgMjQ5NzAsIAotICAgIDI0OTc0LCAyNDk3OSwgMjQ5ODMsIDAsIDI0OTg3LCAyNDk5MiwgMjQ5OTcsIDAsIDI1MDAyLCAyNTAwNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUwMTIsIDI1MDE1LCAyNTAxOSwgMjUwMjMsIDI1MDI3LCAyNTAzMSwgMjUwMzUsIAotICAgIDI1MDM5LCAyNTA0MywgMjUwNDcsIDI1MDUxLCAyNTA1NSwgMjUwNTksIDI1MDYzLCAyNTA2NywgMjUwNzEsIDI1MDc1LCAKLSAgICAyNTA3OSwgMjUwODIsIDI1MDg2LCAyNTA5MCwgMjUwOTQsIDI1MDk4LCAyNTEwMiwgMjUxMDYsIDI1MTEwLCAyNTExNCwgCi0gICAgMjUxMTgsIDI1MTIyLCAyNTEyNiwgMjUxMzAsIDI1MTM0LCAyNTEzOCwgMjUxNDEsIDI1MTQ1LCAyNTE0OSwgMjUxNTUsIAotICAgIDI1MTYxLCAyNTE2NywgMjUxNzMsIDI1MTc5LCAyNTE4NSwgMjUxOTEsIDI1MTk3LCAyNTIwMywgMjUyMDksIDI1MjE1LCAKLSAgICAyNTIyMSwgMjUyMjcsIDI1MjMzLCAyNTI0MiwgMjUyNTEsIDI1MjU3LCAyNTI2MywgMjUyNjksIDI1Mjc0LCAyNTI3OCwgCi0gICAgMjUyODMsIDI1Mjg4LCAyNTI5MywgMjUyOTcsIDI1MzAyLCAyNTMwNywgMjUzMTIsIDI1MzE2LCAyNTMyMSwgMjUzMjUsIAotICAgIDI1MzMwLCAyNTMzNSwgMjUzNDAsIDI1MzQ1LCAyNTM0OSwgMjUzNTMsIDI1MzU3LCAyNTM2MSwgMjUzNjUsIDI1MzY5LCAKLSAgICAyNTM3MywgMjUzNzcsIDI1MzgxLCAyNTM4NSwgMjUzOTEsIDI1Mzk1LCAyNTM5OSwgMjU0MDMsIDI1NDA3LCAyNTQxMSwgCi0gICAgMjU0MTksIDI1NDI1LCAyNTQyOSwgMjU0MzUsIDI1NDM5LCAyNTQ0NSwgMjU0NDksIDAsIDAsIDI1NDUzLCAyNTQ1NywgCi0gICAgMjU0NjAsIDI1NDYzLCAyNTQ2NiwgMjU0NjksIDI1NDcyLCAyNTQ3NSwgMjU0NzgsIDI1NDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNTQ4NCwgMjU0OTIsIDI1NTAwLCAyNTUwOCwgMjU1MTYsIDI1NTI0LCAyNTUzMiwgMjU1NDAsIDI1NTQ4LCAyNTU1NiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjU1NjQsIDI1NTY3LCAyNTU3MCwgMjU1NzMsIDI1NTc4LCAyNTU4MSwgMjU1ODYsIDI1NTkzLCAKLSAgICAyNTYwMSwgMjU2MDYsIDI1NjEzLCAyNTYxNiwgMjU2MjMsIDI1NjMwLCAyNTYzNywgMCwgMjU2NDEsIDI1NjQ1LCAyNTY0OCwgCi0gICAgMjU2NTEsIDI1NjU0LCAyNTY1NywgMjU2NjAsIDI1NjYzLCAyNTY2NiwgMjU2NjksIDAsIDAsIDAsIDAsIDAsIDAsIDI1NjcyLCAKLSAgICAyNTY3NSwgMjU2NzgsIDI1NjgxLCAyNTY4NCwgMjU2ODcsIDI1NjkxLCAyNTY5NSwgMjU2OTksIDI1NzAzLCAyNTcwNywgCi0gICAgMjU3MTEsIDI1NzE0LCAyNTcxOCwgMjU3MjIsIDI1NzI1LCAyNTcyOSwgMjU3MzMsIDI1NzM3LCAyNTc0MSwgMjU3NDUsIAotICAgIDI1NzQ5LCAyNTc1MywgMjU3NTYsIDI1NzU5LCAyNTc2MywgMjU3NjcsIDI1NzcwLCAyNTc3NCwgMjU3NzgsIDI1NzgyLCAKLSAgICAyNTc4NiwgMjU3OTAsIDI1Nzk0LCAyNTc5OCwgMjU4MDIsIDI1ODA5LCAyNTgxNCwgMjU4MTksIDI1ODI0LCAyNTgyOSwgCi0gICAgMjU4MzUsIDI1ODQxLCAyNTg0NywgMjU4NTMsIDI1ODU4LCAyNTg2NCwgMjU4NzAsIDI1ODc1LCAyNTg4MSwgMjU4ODcsIAotICAgIDI1ODkzLCAyNTg5OSwgMjU5MDUsIDI1OTEwLCAyNTkxNiwgMjU5MjEsIDI1OTI3LCAyNTkzMywgMjU5MzksIDI1OTQ1LCAKLSAgICAyNTk1MSwgMjU5NTYsIDI1OTYxLCAyNTk2NywgMjU5NzMsIDI1OTc4LCAyNTk4NCwgMjU5ODksIDI1OTk1LCAyNjAwMCwgCi0gICAgMjYwMDUsIDI2MDExLCAyNjAxNywgMjYwMjMsIDI2MDI5LCAyNjAzNSwgMjYwNDEsIDI2MDQ3LCAyNjA1MywgMjYwNTksIAotICAgIDI2MDY1LCAyNjA3MSwgMjYwNzcsIDI2MDgyLCAyNjA4NywgMjYwOTIsIDI2MDk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjEwNCwgMjYxMTMsIDI2MTIyLCAyNjEzMCwgMjYxMzgsIDI2MTQ4LCAyNjE1NiwgMjYxNjUsIDI2MTcyLCAyNjE3OSwgCi0gICAgMjYxODYsIDI2MTk0LCAyNjIwMiwgMjYyMTAsIDI2MjE4LCAyNjIyNiwgMjYyMzQsIDI2MjQyLCAyNjI1MCwgMjYyNTcsIAotICAgIDI2MjY1LCAyNjI3MywgMjYyODEsIDI2Mjg5LCAyNjI5NywgMjYzMDcsIDI2MzE3LCAyNjMyNywgMjYzMzcsIDI2MzQ3LCAKLSAgICAyNjM1NywgMjYzNjcsIDI2Mzc3LCAyNjM4NywgMjYzOTcsIDI2NDA3LCAyNjQxNywgMjY0MjcsIDI2NDM3LCAyNjQ0NSwgCi0gICAgMjY0NTMsIDI2NDYzLCAyNjQ3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTkyOTgsIDE5MzAyLCAxOTMwNiwgMTkzMTAsIDE5MzE0LCAxOTMxOCwgMTkzMjIsIDE5MzI2LCAxOTMzMCwgMTkzMzQsIAorICAgIDE5MzM4LCAxOTM0MiwgMTkzNDYsIDE5MzUwLCAxOTM1NCwgMTkzNTgsIDE5MzYyLCAxOTM2NiwgMTkzNzAsIDE5Mzc0LCAKKyAgICAxOTM3OCwgMTkzODIsIDE5Mzg2LCAxOTM5MCwgMTkzOTQsIDE5Mzk4LCAxOTQwMiwgMTk0MDYsIDE5NDEwLCAxOTQxNCwgCisgICAgMTk0MTgsIDE5NDIyLCAxOTQyNiwgMTk0MzAsIDE5NDM0LCAxOTQzOCwgMTk0NDIsIDE5NDQ2LCAxOTQ1MCwgMTk0NTQsIAorICAgIDE5NDU4LCAxOTQ2MiwgMTk0NjYsIDE5NDcwLCAxOTQ3NCwgMTk0NzgsIDE5NDgyLCAxOTQ4NiwgMTk0OTAsIDE5NDk0LCAKKyAgICAxOTQ5OCwgMTk1MDIsIDE5NTA2LCAxOTUxMCwgMTk1MTQsIDE5NTE4LCAxOTUyMiwgMTk1MjYsIDE5NTMwLCAxOTUzNCwgCisgICAgMTk1MzgsIDE5NTQyLCAxOTU0NiwgMTk1NTAsIDE5NTU0LCAxOTU1OCwgMTk1NjIsIDE5NTY2LCAxOTU3MCwgMTk1NzQsIAorICAgIDE5NTc4LCAxOTU4MiwgMTk1ODYsIDE5NTkwLCAxOTU5NCwgMTk1OTgsIDE5NjAyLCAxOTYwNiwgMTk2MTAsIDE5NjE0LCAKKyAgICAxOTYxOCwgMTk2MjIsIDE5NjI2LCAxOTYzMCwgMTk2MzQsIDE5NjM4LCAxOTY0MiwgMTk2NDYsIDE5NjUwLCAxOTY1NCwgCisgICAgMTk2NTgsIDE5NjYyLCAxOTY2NiwgMTk2NzAsIDE5Njc0LCAxOTY3OCwgMTk2ODIsIDE5Njg2LCAxOTY5MCwgMTk2OTQsIAorICAgIDE5Njk4LCAxOTcwMiwgMTk3MDYsIDE5NzEwLCAxOTcxNCwgMTk3MTgsIDE5NzIyLCAxOTcyNiwgMTk3MzAsIDE5NzM0LCAKKyAgICAxOTczOCwgMTk3NDIsIDE5NzQ2LCAxOTc1MCwgMTk3NTQsIDE5NzU4LCAxOTc2MiwgMTk3NjYsIDE5NzcwLCAxOTc3NCwgCisgICAgMTk3NzgsIDE5NzgyLCAxOTc4NiwgMTk3OTAsIDE5Nzk0LCAxOTc5OCwgMTk4MDEsIDE5ODA1LCAxOTgwOSwgMTk4MTMsIAorICAgIDE5ODE3LCAxOTgyMSwgMTk4MjUsIDE5ODI5LCAxOTgzMywgMTk4MzcsIDE5ODQxLCAxOTg0NSwgMTk4NDksIDE5ODUzLCAKKyAgICAxOTg1NywgMTk4NjEsIDE5ODY1LCAxOTg2OSwgMTk4NzMsIDE5ODc3LCAxOTg4MSwgMTk4ODUsIDE5ODg5LCAxOTg5MywgCisgICAgMTk4OTYsIDE5OTAwLCAxOTkwNCwgMTk5MDgsIDE5OTEyLCAxOTkxNiwgMTk5MjAsIDE5OTI0LCAxOTkyOCwgMTk5MzIsIAorICAgIDE5OTM2LCAxOTk0MCwgMTk5NDQsIDE5OTQ4LCAxOTk1MiwgMTk5NTYsIDE5OTU5LCAxOTk2MywgMTk5NjcsIDE5OTcxLCAKKyAgICAxOTk3NSwgMTk5NzksIDE5OTgzLCAxOTk4NywgMTk5OTEsIDE5OTk1LCAxOTk5OSwgMjAwMDMsIDIwMDA3LCAyMDAxMSwgCisgICAgMjAwMTUsIDIwMDE5LCAyMDAyMywgMjAwMjcsIDIwMDMxLCAyMDAzNSwgMjAwMzksIDIwMDQzLCAyMDA0NywgMjAwNTEsIAorICAgIDIwMDU1LCAyMDA1OSwgMjAwNjMsIDIwMDY3LCAyMDA3MSwgMjAwNzUsIDIwMDc5LCAyMDA4MywgMCwgMjAwODcsIDIwMDkxLCAKKyAgICAyMDA5NSwgMjAwOTksIDAsIDAsIDIwMTAzLCAyMDEwNywgMjAxMTEsIDIwMTE1LCAyMDExOSwgMjAxMjMsIDIwMTI3LCAwLCAKKyAgICAyMDEzMSwgMCwgMjAxMzUsIDIwMTM5LCAyMDE0MywgMjAxNDcsIDAsIDAsIDIwMTUxLCAyMDE1NSwgMjAxNTksIDIwMTYzLCAKKyAgICAyMDE2NywgMjAxNzEsIDIwMTc1LCAyMDE3OSwgMjAxODMsIDIwMTg3LCAyMDE5MSwgMjAxOTUsIDIwMTk5LCAyMDIwMywgCisgICAgMjAyMDcsIDIwMjExLCAyMDIxNSwgMjAyMTksIDIwMjIzLCAyMDIyNywgMjAyMzEsIDIwMjM1LCAyMDIzOSwgMjAyNDIsIAorICAgIDIwMjQ2LCAyMDI1MCwgMjAyNTQsIDIwMjU4LCAyMDI2MiwgMjAyNjYsIDIwMjcwLCAyMDI3NCwgMjAyNzgsIDIwMjgyLCAKKyAgICAyMDI4NiwgMjAyOTAsIDIwMjk0LCAyMDI5OCwgMjAzMDIsIDIwMzA2LCAyMDMxMCwgMCwgMjAzMTQsIDIwMzE4LCAyMDMyMiwgCisgICAgMjAzMjYsIDAsIDAsIDIwMzMwLCAyMDMzMywgMjAzMzcsIDIwMzQxLCAyMDM0NSwgMjAzNDksIDIwMzUzLCAyMDM1NywgCisgICAgMjAzNjEsIDIwMzY1LCAyMDM2OSwgMjAzNzMsIDIwMzc3LCAyMDM4MSwgMjAzODUsIDIwMzg5LCAyMDM5MywgMjAzOTgsIAorICAgIDIwNDAzLCAyMDQwOCwgMjA0MTQsIDIwNDIwLCAyMDQyNSwgMjA0MzAsIDIwNDM2LCAyMDQzOSwgMjA0NDMsIDIwNDQ3LCAKKyAgICAyMDQ1MSwgMjA0NTUsIDIwNDU5LCAyMDQ2MywgMjA0NjcsIDAsIDIwNDcxLCAyMDQ3NSwgMjA0NzksIDIwNDgzLCAwLCAwLCAKKyAgICAyMDQ4NywgMjA0OTEsIDIwNDk1LCAyMDQ5OSwgMjA1MDMsIDIwNTA3LCAyMDUxMSwgMCwgMjA1MTUsIDAsIDIwNTE5LCAKKyAgICAyMDUyMywgMjA1MjcsIDIwNTMxLCAwLCAwLCAyMDUzNSwgMjA1MzksIDIwNTQzLCAyMDU0NywgMjA1NTEsIDIwNTU1LCAKKyAgICAyMDU1OSwgMjA1NjMsIDIwNTY3LCAyMDU3MiwgMjA1NzcsIDIwNTgyLCAyMDU4OCwgMjA1OTQsIDIwNTk5LCAwLCAyMDYwNCwgCisgICAgMjA2MDgsIDIwNjEyLCAyMDYxNiwgMjA2MjAsIDIwNjI0LCAyMDYyOCwgMjA2MzIsIDIwNjM2LCAyMDY0MCwgMjA2NDQsIAorICAgIDIwNjQ4LCAyMDY1MiwgMjA2NTYsIDIwNjYwLCAyMDY2NCwgMjA2NjgsIDIwNjcxLCAyMDY3NSwgMjA2NzksIDIwNjgzLCAKKyAgICAyMDY4NywgMjA2OTEsIDIwNjk1LCAyMDY5OSwgMjA3MDMsIDIwNzA3LCAyMDcxMSwgMjA3MTUsIDIwNzE5LCAyMDcyMywgCisgICAgMjA3MjcsIDIwNzMxLCAyMDczNSwgMjA3MzksIDIwNzQzLCAyMDc0NywgMjA3NTEsIDIwNzU1LCAyMDc1OSwgMjA3NjMsIAorICAgIDIwNzY3LCAyMDc3MSwgMjA3NzUsIDIwNzc5LCAyMDc4MywgMjA3ODcsIDIwNzkxLCAyMDc5NSwgMjA3OTksIDIwODAzLCAKKyAgICAyMDgwNywgMjA4MTEsIDIwODE1LCAyMDgxOSwgMjA4MjMsIDIwODI3LCAwLCAyMDgzMSwgMjA4MzUsIDIwODM5LCAyMDg0MywgCisgICAgMCwgMCwgMjA4NDcsIDIwODUxLCAyMDg1NSwgMjA4NTksIDIwODYzLCAyMDg2NywgMjA4NzEsIDIwODc1LCAyMDg3OSwgCisgICAgMjA4ODMsIDIwODg3LCAyMDg5MSwgMjA4OTUsIDIwODk5LCAyMDkwMywgMjA5MDcsIDIwOTExLCAyMDkxNSwgMjA5MTksIAorICAgIDIwOTIzLCAyMDkyNywgMjA5MzEsIDIwOTM1LCAyMDkzOSwgMjA5NDMsIDIwOTQ3LCAyMDk1MSwgMjA5NTUsIDIwOTU5LCAKKyAgICAyMDk2MywgMjA5NjcsIDIwOTcxLCAyMDk3NSwgMjA5NzksIDIwOTgzLCAyMDk4NywgMjA5OTEsIDIwOTk1LCAyMDk5OSwgCisgICAgMjEwMDMsIDIxMDA3LCAyMTAxMSwgMjEwMTUsIDIxMDE5LCAyMTAyMywgMjEwMjcsIDIxMDMxLCAyMTAzNSwgMjEwMzksIAorICAgIDIxMDQzLCAyMTA0NywgMjEwNTEsIDIxMDU1LCAyMTA1OSwgMjEwNjMsIDIxMDY3LCAyMTA3MSwgMjEwNzQsIDIxMDc4LCAKKyAgICAyMTA4MiwgMjEwODYsIDIxMDkwLCAyMTA5NCwgMjEwOTgsIDIxMTAyLCAyMTEwNiwgMjExMTAsIDAsIDAsIDAsIDAsIAorICAgIDIxMTE0LCAyMTExOSwgMjExMjMsIDIxMTI2LCAyMTEzMSwgMjExMzQsIDIxMTM3LCAyMTE0MCwgMjExNDUsIDIxMTQ5LCAKKyAgICAyMTE1NCwgMjExNTcsIDIxMTYwLCAyMTE2MywgMjExNjYsIDIxMTY5LCAyMTE3MiwgMjExNzUsIDIxMTc4LCAyMTE4MSwgCisgICAgMjExODUsIDIxMTg5LCAyMTE5MywgMjExOTcsIDIxMjAxLCAyMTIwNSwgMjEyMDksIDIxMjEzLCAyMTIxNywgMjEyMjEsIDAsIAorICAgIDAsIDAsIDIxMjI3LCAyMTIzMywgMjEyMzcsIDIxMjQxLCAyMTI0NSwgMjEyNTEsIDIxMjU1LCAyMTI1OSwgMjEyNjMsIAorICAgIDIxMjY5LCAyMTI3MywgMjEyNzcsIDIxMjgxLCAyMTI4NywgMjEyOTEsIDIxMjk1LCAyMTI5OSwgMjEzMDUsIDIxMzExLCAKKyAgICAyMTMxNywgMjEzMjUsIDIxMzMxLCAyMTMzNywgMjEzNDMsIDIxMzQ5LCAyMTM1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMjEzNjEsIAorICAgIDIxMzY0LCAyMTM2NywgMjEzNzAsIDIxMzczLCAyMTM3NiwgMjEzODAsIDIxMzg0LCAyMTM4NywgMjEzOTEsIDIxMzk1LCAKKyAgICAyMTM5OSwgMjE0MDMsIDIxNDA3LCAyMTQxMCwgMjE0MTQsIDIxNDE4LCAyMTQyMiwgMjE0MjYsIDIxNDMwLCAyMTQzNCwgCisgICAgMjE0MzgsIDIxNDQyLCAyMTQ0NiwgMjE0NTAsIDIxNDU0LCAyMTQ1NywgMjE0NjEsIDIxNDY1LCAyMTQ2OSwgMjE0NzMsIAorICAgIDIxNDc2LCAyMTQ4MCwgMjE0ODQsIDIxNDg4LCAyMTQ5MiwgMjE0OTYsIDIxNTAwLCAyMTUwNCwgMjE1MDgsIDIxNTEyLCAKKyAgICAyMTUxNiwgMjE1MjAsIDIxNTI0LCAyMTUyOCwgMjE1MzIsIDIxNTM1LCAyMTUzOSwgMjE1NDMsIDIxNTQ3LCAyMTU1MSwgCisgICAgMjE1NTUsIDIxNTU5LCAyMTU2MywgMjE1NjcsIDIxNTcxLCAyMTU3NSwgMjE1NzksIDIxNTgzLCAyMTU4NywgMjE1OTEsIAorICAgIDIxNTk1LCAyMTU5OSwgMjE2MDMsIDIxNjA3LCAyMTYxMSwgMjE2MTUsIDIxNjE5LCAyMTYyMywgMjE2MjcsIDIxNjMxLCAKKyAgICAyMTYzNSwgMjE2MzksIDIxNjQzLCAyMTY0NywgMjE2NTEsIDIxNjU1LCAyMTY1OSwgMjE2NjMsIDIxNjY3LCAyMTY3MCwgCisgICAgMjE2NzQsIDIxNjc4LCAyMTY4MiwgMjE2ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNjkwLCAKKyAgICAyMTY5NCwgMjE2OTcsIDIxNzAxLCAyMTcwNCwgMjE3MDgsIDIxNzExLCAyMTcxNSwgMjE3MjEsIDIxNzI2LCAyMTczMCwgCisgICAgMjE3MzMsIDIxNzM3LCAyMTc0MSwgMjE3NDYsIDIxNzUwLCAyMTc1NSwgMjE3NTksIDIxNzY0LCAyMTc2OCwgMjE3NzMsIAorICAgIDIxNzc3LCAyMTc4MiwgMjE3ODgsIDIxNzkyLCAyMTc5NywgMjE4MDEsIDIxODA2LCAyMTgxMiwgMjE4MTYsIDIxODIyLCAKKyAgICAyMTgyOCwgMjE4MzIsIDIxODM3LCAyMTg0NSwgMjE4NTMsIDIxODYwLCAyMTg2NSwgMjE4NzAsIDIxODc5LCAyMTg4NiwgCisgICAgMjE4OTMsIDIxODk4LCAyMTkwNCwgMjE5MDgsIDIxOTEyLCAyMTkxNiwgMjE5MjAsIDIxOTI0LCAyMTkyOCwgMjE5MzIsIAorICAgIDIxOTM2LCAyMTk0MCwgMjE5NDQsIDIxOTUwLCAyMTk1NSwgMjE5NjAsIDIxOTYzLCAyMTk2NywgMjE5NzEsIDIxOTc2LCAKKyAgICAyMTk4MCwgMjE5ODUsIDIxOTg5LCAyMTk5NCwgMjE5OTgsIDIyMDAzLCAyMjAwNywgMjIwMTIsIDIyMDE2LCAyMjAyMSwgCisgICAgMjIwMjUsIDIyMDMwLCAyMjAzNiwgMjIwNDAsIDIyMDQ1LCAyMjA1MCwgMjIwNTQsIDIyMDU4LCAyMjA2MiwgMjIwNjYsIAorICAgIDIyMDY5LCAyMjA3MywgMjIwNzksIDIyMDg0LCAyMjA4OSwgMjIwOTMsIDIyMDk3LCAyMjEwMSwgMjIxMDYsIDIyMTEwLCAKKyAgICAyMjExNSwgMjIxMTksIDIyMTI0LCAyMjEyNywgMjIxMzEsIDIyMTM1LCAyMjE0MCwgMjIxNDQsIDIyMTQ5LCAyMjE1MywgCisgICAgMjIxNTgsIDIyMTY0LCAyMjE2OCwgMjIxNzIsIDIyMTc2LCAyMjE4MCwgMjIxODQsIDIyMTg4LCAyMjE5MiwgMjIxOTYsIAorICAgIDIyMjAwLCAyMjIwNCwgMjIyMDgsIDIyMjE0LCAyMjIxNywgMjIyMjEsIDIyMjI1LCAyMjIzMCwgMjIyMzQsIDIyMjM5LCAKKyAgICAyMjI0MywgMjIyNDgsIDIyMjUyLCAyMjI1NywgMjIyNjEsIDIyMjY2LCAyMjI3MCwgMjIyNzUsIDIyMjc5LCAyMjI4NCwgCisgICAgMjIyOTAsIDIyMjk0LCAyMjI5OCwgMjIzMDQsIDIyMzEwLCAyMjMxNiwgMjIzMjIsIDIyMzI2LCAyMjMzMCwgMjIzMzQsIAorICAgIDIyMzM4LCAyMjM0MiwgMjIzNDYsIDIyMzUyLCAyMjM1NiwgMjIzNjAsIDIyMzY0LCAyMjM2OSwgMjIzNzMsIDIyMzc4LCAKKyAgICAyMjM4MiwgMjIzODcsIDIyMzkxLCAyMjM5NiwgMjI0MDAsIDIyNDA1LCAyMjQwOSwgMjI0MTQsIDIyNDE4LCAyMjQyMywgCisgICAgMjI0MjksIDIyNDMzLCAyMjQzOSwgMjI0NDMsIDIyNDQ3LCAyMjQ1MSwgMjI0NTUsIDIyNDU5LCAyMjQ2MywgMjI0NjksIAorICAgIDIyNDcyLCAyMjQ3NiwgMjI0ODAsIDIyNDg1LCAyMjQ4OSwgMjI0OTQsIDIyNDk4LCAyMjUwMywgMjI1MDcsIDIyNTEyLCAKKyAgICAyMjUxNiwgMjI1MjEsIDIyNTI1LCAyMjUzMCwgMjI1MzQsIDIyNTM5LCAyMjU0NSwgMjI1NDgsIDIyNTUyLCAyMjU1NiwgCisgICAgMjI1NjEsIDIyNTY2LCAyMjU3MCwgMjI1NzQsIDIyNTc4LCAyMjU4MiwgMjI1ODYsIDIyNTkwLCAyMjU5NiwgMjI1OTksIAorICAgIDIyNjAzLCAyMjYwNywgMjI2MTIsIDIyNjE2LCAyMjYyMSwgMjI2MjUsIDIyNjMwLCAyMjYzNiwgMjI2MzksIDIyNjQ0LCAKKyAgICAyMjY0OCwgMjI2NTIsIDIyNjU2LCAyMjY2MCwgMjI2NjQsIDIyNjY4LCAyMjY3MiwgMjI2NzgsIDIyNjgyLCAyMjY4NiwgCisgICAgMjI2OTAsIDIyNjk1LCAyMjY5OSwgMjI3MDQsIDIyNzA4LCAyMjcxMywgMjI3MTcsIDIyNzIyLCAyMjcyNiwgMjI3MzEsIAorICAgIDIyNzM1LCAyMjc0MCwgMjI3NDQsIDIyNzQ5LCAyMjc1MiwgMjI3NTYsIDIyNzYwLCAyMjc2NCwgMjI3NjgsIDIyNzcyLCAKKyAgICAyMjc3NiwgMjI3ODAsIDIyNzg0LCAyMjc5MCwgMjI3OTQsIDIyNzk4LCAyMjgwMiwgMjI4MDcsIDIyODExLCAyMjgxNiwgCisgICAgMjI4MjAsIDIyODI1LCAyMjgyOSwgMjI4MzQsIDIyODM4LCAyMjg0MywgMjI4NDcsIDIyODUyLCAyMjg1NiwgMjI4NjEsIAorICAgIDIyODY3LCAyMjg3MCwgMjI4NzUsIDIyODc5LCAyMjg4NCwgMjI4OTAsIDIyODk2LCAyMjkwMiwgMjI5MDgsIDIyOTE0LCAKKyAgICAyMjkyMCwgMjI5MjYsIDIyOTMwLCAyMjkzNCwgMjI5MzgsIDIyOTQyLCAyMjk0NiwgMjI5NTAsIDIyOTU0LCAyMjk1OCwgCisgICAgMjI5NjMsIDIyOTY3LCAyMjk3MiwgMjI5NzYsIDIyOTgxLCAyMjk4NSwgMjI5OTAsIDIyOTk0LCAyMjk5OSwgMjMwMDMsIAorICAgIDIzMDA4LCAyMzAxMiwgMjMwMTcsIDIzMDIxLCAyMzAyNSwgMjMwMjksIDIzMDMzLCAyMzAzNywgMjMwNDEsIDIzMDQ1LCAKKyAgICAyMzA1MSwgMjMwNTQsIDIzMDU4LCAyMzA2MiwgMjMwNjcsIDIzMDcxLCAyMzA3NiwgMjMwODAsIDIzMDg1LCAyMzA4OSwgCisgICAgMjMwOTQsIDIzMDk4LCAyMzEwMywgMjMxMDcsIDIzMTEyLCAyMzExNiwgMjMxMjEsIDIzMTI3LCAyMzEzMSwgMjMxMzcsIAorICAgIDIzMTQyLCAyMzE0OCwgMjMxNTIsIDIzMTU4LCAyMzE2MywgMjMxNjcsIDIzMTcxLCAyMzE3NSwgMjMxNzksIDIzMTgzLCAKKyAgICAyMzE4OCwgMjMxOTEsIDIzMTk1LCAyMzIwMCwgMjMyMDQsIDIzMjA5LCAyMzIxMiwgMjMyMTYsIDIzMjIwLCAyMzIyNCwgCisgICAgMjMyMjgsIDIzMjMyLCAyMzIzNiwgMjMyNDAsIDIzMjQ0LCAyMzI0OCwgMjMyNTIsIDIzMjU2LCAyMzI2MSwgMjMyNjUsIAorICAgIDIzMjY5LCAyMzI3NSwgMjMyNzksIDIzMjg1LCAyMzI4OSwgMjMyOTUsIDIzMjk5LCAyMzMwMywgMjMzMDcsIDIzMzExLCAKKyAgICAyMzMxNSwgMjMzMjAsIDIzMzI0LCAyMzMyOCwgMjMzMzIsIDIzMzM2LCAyMzM0MCwgMjMzNDQsIDIzMzQ4LCAyMzM1MiwgCisgICAgMjMzNTYsIDIzMzYwLCAyMzM2NiwgMjMzNzIsIDIzMzc4LCAyMzM4NCwgMjMzOTAsIDIzMzk1LCAyMzQwMSwgMjM0MDcsIAorICAgIDIzNDEzLCAyMzQxNywgMjM0MjEsIDIzNDI1LCAyMzQyOSwgMjM0MzMsIDIzNDM3LCAyMzQ0MSwgMjM0NDUsIDIzNDQ5LCAKKyAgICAyMzQ1MywgMjM0NTcsIDIzNDYxLCAyMzQ2NSwgMjM0NzAsIDIzNDc1LCAyMzQ4MCwgMjM0ODQsIDIzNDg4LCAyMzQ5MiwgCisgICAgMjM0OTYsIDIzNTAwLCAyMzUwNCwgMjM1MDgsIDIzNTEyLCAyMzUxNiwgMjM1MjAsIDIzNTI2LCAyMzUzMiwgMjM1MzgsIAorICAgIDIzNTQ0LCAyMzU1MCwgMjM1NTYsIDIzNTYyLCAyMzU2OCwgMjM1NzQsIDIzNTc4LCAyMzU4MiwgMjM1ODYsIDIzNTkwLCAKKyAgICAyMzU5NCwgMjM1OTgsIDIzNjAyLCAyMzYwOCwgMjM2MTQsIDIzNjIwLCAyMzYyNiwgMjM2MzIsIDIzNjM4LCAyMzY0NCwgCisgICAgMjM2NTAsIDIzNjU2LCAyMzY2MSwgMjM2NjYsIDIzNjcxLCAyMzY3NiwgMjM2ODIsIDIzNjg4LCAyMzY5NCwgMjM3MDAsIAorICAgIDIzNzA2LCAyMzcxMiwgMjM3MTgsIDIzNzIzLCAyMzcyOSwgMjM3MzUsIDIzNzQxLCAyMzc0NiwgMjM3NTIsIDIzNzU4LCAKKyAgICAyMzc2NCwgMjM3NjksIDIzNzc0LCAyMzc3OSwgMjM3ODQsIDIzNzg5LCAyMzc5NCwgMjM3OTksIDIzODA0LCAyMzgwOSwgCisgICAgMjM4MTQsIDIzODE5LCAyMzgyNCwgMjM4MjgsIDIzODMzLCAyMzgzOCwgMjM4NDMsIDIzODQ4LCAyMzg1MywgMjM4NTgsIAorICAgIDIzODYzLCAyMzg2OCwgMjM4NzMsIDIzODc4LCAyMzg4MywgMjM4ODgsIDIzODkzLCAyMzg5OCwgMjM5MDMsIDIzOTA4LCAKKyAgICAyMzkxMywgMjM5MTgsIDIzOTIzLCAyMzkyOCwgMjM5MzMsIDIzOTM4LCAyMzk0MywgMjM5NDgsIDIzOTUzLCAyMzk1OCwgCisgICAgMjM5NjMsIDIzOTY4LCAyMzk3MywgMjM5NzcsIDIzOTgyLCAyMzk4NywgMjM5OTIsIDIzOTk3LCAyNDAwMiwgMjQwMDcsIAorICAgIDI0MDEyLCAyNDAxNywgMjQwMjIsIDI0MDI3LCAyNDAzMiwgMjQwMzcsIDI0MDQyLCAyNDA0NywgMjQwNTIsIDI0MDU3LCAKKyAgICAyNDA2MiwgMjQwNjcsIDI0MDcyLCAyNDA3NywgMjQwODIsIDI0MDg3LCAyNDA5MiwgMjQwOTcsIDI0MTAyLCAyNDEwNiwgCisgICAgMjQxMTEsIDI0MTE2LCAyNDEyMSwgMjQxMjYsIDI0MTMxLCAyNDEzNSwgMjQxNDAsIDI0MTQ1LCAyNDE1MCwgMjQxNTUsIAorICAgIDI0MTYwLCAyNDE2NCwgMjQxNjksIDI0MTc1LCAyNDE4MCwgMjQxODUsIDI0MTkwLCAyNDE5NSwgMjQyMDEsIDI0MjA2LCAKKyAgICAyNDIxMSwgMjQyMTYsIDI0MjIxLCAyNDIyNiwgMjQyMzEsIDI0MjM2LCAyNDI0MSwgMjQyNDYsIDI0MjUxLCAyNDI1NiwgCisgICAgMjQyNjEsIDI0MjY2LCAyNDI3MSwgMjQyNzYsIDI0MjgxLCAyNDI4NiwgMjQyOTEsIDI0Mjk2LCAyNDMwMSwgMjQzMDYsIAorICAgIDI0MzExLCAyNDMxNiwgMjQzMjEsIDI0MzI2LCAyNDMzMSwgMjQzMzYsIDI0MzQxLCAyNDM0NiwgMjQzNTEsIDI0MzU2LCAKKyAgICAyNDM2MSwgMjQzNjYsIDI0MzcxLCAyNDM3NiwgMjQzODEsIDI0Mzg2LCAyNDM5MSwgMjQzOTYsIDI0NDAxLCAyNDQwNiwgCisgICAgMjQ0MTEsIDI0NDE2LCAyNDQyMSwgMjQ0MjcsIDI0NDMyLCAyNDQzNywgMjQ0NDIsIDI0NDQ3LCAyNDQ1MiwgMjQ0NTcsIAorICAgIDI0NDYyLCAyNDQ2NywgMjQ0NzIsIDI0NDc3LCAyNDQ4MiwgMjQ0ODcsIDI0NDkyLCAyNDQ5NywgMjQ1MDIsIDI0NTA3LCAKKyAgICAyNDUxMiwgMjQ1MTcsIDI0NTIyLCAyNDUyNywgMjQ1MzIsIDI0NTM3LCAyNDU0MiwgMjQ1NDcsIDI0NTUyLCAyNDU1NywgCisgICAgMjQ1NjIsIDI0NTY3LCAyNDU3MiwgMjQ1NzcsIDI0NTgyLCAyNDU4NywgMjQ1OTIsIDI0NTk3LCAyNDYwMiwgMjQ2MDcsIAorICAgIDI0NjEyLCAyNDYxNywgMjQ2MjMsIDI0NjI3LCAyNDYzMSwgMjQ2MzUsIDI0NjM5LCAyNDY0MywgMjQ2NDcsIDI0NjUxLCAKKyAgICAyNDY1NSwgMjQ2NjEsIDI0NjY3LCAyNDY3MywgMjQ2NzksIDI0Njg1LCAyNDY5MSwgMjQ2OTcsIDI0NzA0LCAyNDcxMCwgCisgICAgMjQ3MTUsIDI0NzIwLCAyNDcyNSwgMjQ3MzAsIDI0NzM1LCAyNDc0MCwgMjQ3NDUsIDI0NzUwLCAyNDc1NSwgMjQ3NjAsIAorICAgIDI0NzY1LCAyNDc3MCwgMjQ3NzUsIDI0NzgwLCAyNDc4NSwgMjQ3OTAsIDI0Nzk1LCAyNDgwMCwgMjQ4MDUsIDI0ODEwLCAKKyAgICAyNDgxNSwgMjQ4MjAsIDI0ODI1LCAyNDgzMCwgMjQ4MzUsIDI0ODQwLCAyNDg0NSwgMjQ4NTAsIDAsIDAsIDAsIDI0ODU2LCAKKyAgICAyNDg2NiwgMjQ4NzAsIDI0ODc3LCAyNDg4MSwgMjQ4ODUsIDI0ODg5LCAyNDg5NywgMjQ5MDEsIDI0OTA2LCAyNDkxMSwgCisgICAgMjQ5MTYsIDI0OTIwLCAyNDkyNSwgMjQ5MzAsIDI0OTMzLCAyNDkzNywgMjQ5NDEsIDI0OTUwLCAyNDk1NCwgMjQ5NTgsIAorICAgIDI0OTY0LCAyNDk2OCwgMjQ5NzIsIDI0OTgwLCAyNDk4NCwgMjQ5OTIsIDI0OTk4LCAyNTAwNCwgMjUwMTAsIDI1MDE2LCAKKyAgICAyNTAyNSwgMjUwMzAsIDI1MDM0LCAyNTA0MywgMjUwNDYsIDI1MDUyLCAyNTA1NiwgMjUwNjIsIDI1MDY3LCAyNTA3MywgCisgICAgMjUwODEsIDI1MDg3LCAyNTA5MiwgMjUwOTksIDI1MTA0LCAyNTEwOCwgMjUxMTIsIDI1MTIyLCAyNTEyOCwgMjUxMzIsIAorICAgIDI1MTQyLCAyNTE0OCwgMjUxNTIsIDI1MTU2LCAyNTE2MywgMjUxNzAsIDI1MTc1LCAyNTE4MCwgMjUxODksIDI1MTkzLCAKKyAgICAyNTE5NywgMjUyMDEsIDI1MjA5LCAyNTIxNiwgMjUyMjAsIDI1MjI0LCAyNTIyOCwgMjUyMzIsIDI1MjM2LCAyNTI0MCwgCisgICAgMjUyNDQsIDI1MjQ4LCAyNTI1MiwgMjUyNTYsIDI1MjYwLCAyNTI2NSwgMjUyNzAsIDI1Mjc1LCAyNTI3OSwgMjUyODMsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1Mjg3LCAyNTI5MSwgMjUyOTUsIDI1Mjk5LCAKKyAgICAyNTMwMywgMjUzMDgsIDI1MzEzLCAyNTMxOCwgMjUzMjMsIDI1MzI3LCAyNTMzMSwgMjUzMzYsIDI1MzQwLCAwLCAyNTM0NCwgCisgICAgMjUzNDksIDI1MzU0LCAyNTM1OSwgMjUzNjMsIDI1MzY4LCAyNTM3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMjUzNzgsIDI1MzgyLCAyNTM4NiwgMjUzOTAsIDI1Mzk0LCAyNTM5OSwgMjU0MDQsIDI1NDA5LCAyNTQxNCwgMjU0MTgsIAorICAgIDI1NDIyLCAyNTQyNywgMjU0MzEsIDI1NDM1LCAyNTQzOSwgMjU0NDQsIDI1NDQ5LCAyNTQ1NCwgMjU0NTgsIDI1NDYzLCAKKyAgICAyNTQ2OCwgMjU0NzMsIDI1NDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNTQ4NCwgMjU0ODgsIDI1NDkyLCAKKyAgICAyNTQ5NiwgMjU1MDAsIDI1NTA1LCAyNTUxMCwgMjU1MTUsIDI1NTIwLCAyNTUyNCwgMjU1MjgsIDI1NTMzLCAyNTUzNywgCisgICAgMjU1NDEsIDI1NTQ1LCAyNTU1MCwgMjU1NTUsIDI1NTYwLCAyNTU2NCwgMjU1NjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI1NTc0LCAyNTU3OCwgMjU1ODIsIDI1NTg2LCAyNTU5MCwgMjU1OTUsIDI1NjAwLCAyNTYwNSwgCisgICAgMjU2MTAsIDI1NjE0LCAyNTYxOCwgMjU2MjMsIDI1NjI3LCAwLCAyNTYzMSwgMjU2MzYsIDI1NjQxLCAwLCAyNTY0NiwgCisgICAgMjU2NTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1NjU2LCAyNTY1OSwgMjU2NjMsIDI1NjY3LCAKKyAgICAyNTY3MSwgMjU2NzUsIDI1Njc5LCAyNTY4MywgMjU2ODcsIDI1NjkxLCAyNTY5NSwgMjU2OTksIDI1NzAzLCAyNTcwNywgCisgICAgMjU3MTEsIDI1NzE1LCAyNTcxOSwgMjU3MjMsIDI1NzI2LCAyNTczMCwgMjU3MzQsIDI1NzM4LCAyNTc0MiwgMjU3NDYsIAorICAgIDI1NzUwLCAyNTc1NCwgMjU3NTgsIDI1NzYyLCAyNTc2NiwgMjU3NzAsIDI1Nzc0LCAyNTc3OCwgMjU3ODIsIDI1Nzg1LCAKKyAgICAyNTc4OSwgMjU3OTMsIDI1Nzk5LCAyNTgwNSwgMjU4MTEsIDI1ODE3LCAyNTgyMywgMjU4MjksIDI1ODM1LCAyNTg0MSwgCisgICAgMjU4NDcsIDI1ODUzLCAyNTg1OSwgMjU4NjUsIDI1ODcxLCAyNTg3NywgMjU4ODYsIDI1ODk1LCAyNTkwMSwgMjU5MDcsIAorICAgIDI1OTEzLCAyNTkxOCwgMjU5MjIsIDI1OTI3LCAyNTkzMiwgMjU5MzcsIDI1OTQxLCAyNTk0NiwgMjU5NTEsIDI1OTU2LCAKKyAgICAyNTk2MCwgMjU5NjUsIDI1OTY5LCAyNTk3NCwgMjU5NzksIDI1OTg0LCAyNTk4OSwgMjU5OTMsIDI1OTk3LCAyNjAwMSwgCisgICAgMjYwMDUsIDI2MDA5LCAyNjAxMywgMjYwMTcsIDI2MDIxLCAyNjAyNSwgMjYwMjksIDI2MDM1LCAyNjAzOSwgMjYwNDMsIAorICAgIDI2MDQ3LCAyNjA1MSwgMjYwNTUsIDI2MDYzLCAyNjA2OSwgMjYwNzMsIDI2MDc5LCAyNjA4MywgMjYwODksIDI2MDkzLCAwLCAKKyAgICAwLCAyNjA5NywgMjYxMDEsIDI2MTA0LCAyNjEwNywgMjYxMTAsIDI2MTEzLCAyNjExNiwgMjYxMTksIDI2MTIyLCAyNjEyNSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjYxMjgsIDI2MTM2LCAyNjE0NCwgMjYxNTIsIDI2MTYwLCAyNjE2OCwgMjYxNzYsIDI2MTg0LCAKKyAgICAyNjE5MiwgMjYyMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MjA4LCAyNjIxMSwgMjYyMTQsIDI2MjE3LCAyNjIyMiwgMjYyMjUsIAorICAgIDI2MjMwLCAyNjIzNywgMjYyNDUsIDI2MjUwLCAyNjI1NywgMjYyNjAsIDI2MjY3LCAyNjI3NCwgMjYyODEsIDAsIDI2Mjg1LCAKKyAgICAyNjI4OSwgMjYyOTIsIDI2Mjk1LCAyNjI5OCwgMjYzMDEsIDI2MzA0LCAyNjMwNywgMjYzMTAsIDI2MzEzLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyNjMxNiwgMjYzMTksIDI2MzIyLCAyNjMyNSwgMjYzMjgsIDI2MzMxLCAyNjMzNSwgMjYzMzksIDI2MzQzLCAKKyAgICAyNjM0NiwgMjYzNTAsIDI2MzU0LCAyNjM1NywgMjYzNjEsIDI2MzY1LCAyNjM2OCwgMjYzNzIsIDI2Mzc2LCAyNjM4MCwgCisgICAgMjYzODQsIDI2Mzg4LCAyNjM5MiwgMjYzOTYsIDI2Mzk5LCAyNjQwMiwgMjY0MDYsIDI2NDEwLCAyNjQxMywgMjY0MTcsIAorICAgIDI2NDIxLCAyNjQyNSwgMjY0MjksIDI2NDMzLCAyNjQzNywgMjY0NDEsIDI2NDQ1LCAyNjQ1MiwgMjY0NTcsIDI2NDYyLCAKKyAgICAyNjQ2NywgMjY0NzIsIDI2NDc4LCAyNjQ4NCwgMjY0OTAsIDI2NDk2LCAyNjUwMSwgMjY1MDcsIDI2NTEzLCAyNjUxOCwgCisgICAgMjY1MjQsIDI2NTMwLCAyNjUzNiwgMjY1NDIsIDI2NTQ4LCAyNjU1MywgMjY1NTksIDI2NTY0LCAyNjU3MCwgMjY1NzYsIAorICAgIDI2NTgyLCAyNjU4OCwgMjY1OTQsIDI2NTk5LCAyNjYwNCwgMjY2MTAsIDI2NjE2LCAyNjYyMSwgMjY2MjcsIDI2NjMyLCAKKyAgICAyNjYzOCwgMjY2NDMsIDI2NjQ4LCAyNjY1NCwgMjY2NjAsIDI2NjY2LCAyNjY3MiwgMjY2NzgsIDI2Njg0LCAyNjY5MCwgCisgICAgMjY2OTYsIDI2NzAyLCAyNjcwOCwgMjY3MTQsIDI2NzIwLCAyNjcyNSwgMjY3MzAsIDI2NzM1LCAyNjc0MSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjY3NDcsIDI2NzU2LCAyNjc2NSwgMjY3NzMsIDI2NzgxLCAyNjc5MSwgMjY3OTksIDI2ODA4LCAKKyAgICAyNjgxNSwgMjY4MjIsIDI2ODI5LCAyNjgzNywgMjY4NDUsIDI2ODUzLCAyNjg2MSwgMjY4NjksIDI2ODc3LCAyNjg4NSwgCisgICAgMjY4OTMsIDI2OTAwLCAyNjkwOCwgMjY5MTYsIDI2OTI0LCAyNjkzMiwgMjY5NDAsIDI2OTUwLCAyNjk2MCwgMjY5NzAsIAorICAgIDI2OTgwLCAyNjk5MCwgMjcwMDAsIDI3MDEwLCAyNzAyMCwgMjcwMzAsIDI3MDQwLCAyNzA1MCwgMjcwNjAsIDI3MDcwLCAKKyAgICAyNzA4MCwgMjcwODgsIDI3MDk2LCAyNzEwNiwgMjcxMTQsIDAsIDAsIDAsIDAsIDAsIDI3MTI0LCAyNzEyOCwgMjcxMzIsIAorICAgIDI3MTM2LCAyNzE0MCwgMjcxNDQsIDI3MTQ4LCAyNzE1MiwgMjcxNTYsIDI3MTYwLCAyNzE2NCwgMjcxNjgsIDI3MTcyLCAKKyAgICAyNzE3NiwgMjcxODAsIDI3MTg0LCAyNzE4OCwgMjcxOTIsIDI3MTk2LCAyNzIwMCwgMjcyMDQsIDI3MjA4LCAyNzIxMiwgCisgICAgMjcyMTYsIDI3MjIyLCAyNzIyNiwgMjcyMzIsIDI3MjM2LCAyNzI0MiwgMjcyNDYsIDI3MjUyLCAyNzI1NiwgMjcyNjAsIAorICAgIDI3MjY0LCAyNzI2OCwgMjcyNzIsIDI3Mjc2LCAyNzI4MiwgMjcyODgsIDI3Mjk0LCAyNzMwMCwgMjczMDUsIDI3MzEwLCAKKyAgICAyNzMxNSwgMjczMjEsIDI3MzI3LCAyNzMzMywgMjczMzksIDI3MzQ2LCAyNzM1MiwgMjczNTcsIDI3MzYyLCAyNzM2NiwgCisgICAgMjczNzAsIDI3Mzc0LCAyNzM3OCwgMjczODIsIDI3Mzg2LCAyNzM5MCwgMjczOTYsIDI3NDAyLCAyNzQwOCwgMjc0MTMsIAorICAgIDI3NDIwLCAyNzQyNSwgMjc0MzAsIDI3NDM2LCAyNzQ0MSwgMjc0NDgsIDI3NDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAyNzQ2MSwgMjc0NjYsIDI3NDY5LCAyNzQ3MywgMjc0NzcsIDI3NDgxLCAyNzQ4NSwgMjc0ODksIDI3NDkzLCAKKyAgICAyNzQ5NywgMjc1MDEsIDI3NTA1LCAyNzUwOSwgMjc1MTMsIDI3NTE3LCAyNzUyMSwgMjc1MjQsIDI3NTI3LCAyNzUzMSwgCisgICAgMjc1MzUsIDI3NTM5LCAyNzU0MiwgMjc1NDUsIDI3NTQ4LCAyNzU1MiwgMjc1NTYsIDI3NTYwLCAyNzU2NCwgMjc1NjgsIDAsIAorICAgIDAsIDAsIDI3NTcxLCAyNzU3NSwgMjc1NzksIDI3NTgzLCAyNzU4OCwgMjc1OTMsIDI3NTk4LCAyNzYwMywgMjc2MDcsIAorICAgIDI3NjExLCAyNzYxNiwgMjc2MjEsIDAsIDAsIDAsIDAsIDI3NjI3LCAyNzYzMSwgMjc2MzYsIDI3NjQxLCAyNzY0NiwgCisgICAgMjc2NTAsIDI3NjU0LCAyNzY1OCwgMjc2NjIsIDI3NjY3LCAyNzY3MSwgMjc2NzUsIDAsIDAsIDAsIDAsIDI3Njc5LCAwLCAwLCAKKyAgICAwLCAyNzY4MywgMjc2ODcsIDI3NjkxLCAyNzY5NSwgMjc2OTgsIDI3NzAxLCAyNzcwNCwgMjc3MDcsIDI3NzEwLCAyNzcxMywgCisgICAgMjc3MTYsIDI3NzE5LCAyNzcyMiwgMjc3MjcsIDI3NzMzLCAyNzczOSwgMjc3NDUsIDI3NzUxLCAyNzc1NiwgMjc3NjIsIAorICAgIDI3NzY4LCAyNzc3NCwgMjc3NzksIDI3Nzg1LCAyNzc5MCwgMjc3OTYsIDI3ODAyLCAyNzgwNywgMjc4MTMsIDI3ODE5LCAKKyAgICAyNzgyNSwgMjc4MzAsIDI3ODM1LCAyNzg0MCwgMjc4NDYsIDI3ODUyLCAyNzg1NywgMjc4NjMsIDI3ODY4LCAyNzg3NCwgCisgICAgMjc4NzksIDI3ODg1LCAwLCAwLCAyNzg5MSwgMjc4OTcsIDI3OTAzLCAyNzkwOSwgMjc5MTUsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDI3OTIxLCAyNzkyOCwgMjc5MzUsIDI3OTQxLCAyNzk0OCwgMjc5NTUsIDI3OTYxLCAyNzk2OCwgCisgICAgMjc5NzUsIDI3OTgyLCAyNzk4OSwgMjc5OTUsIDI4MDAyLCAyODAwOSwgMjgwMTUsIDI4MDIyLCAyODAyOSwgMjgwMzUsIAorICAgIDI4MDQyLCAyODA0OSwgMjgwNTUsIDI4MDYxLCAyODA2OCwgMjgwNzQsIDI4MDgwLCAyODA4NywgMjgwOTMsIDI4MTAwLCAKKyAgICAyODEwNywgMjgxMTQsIDI4MTIxLCAyODEyOCwgMjgxMzUsIDI4MTQxLCAyODE0OCwgMjgxNTUsIDI4MTYxLCAyODE2OCwgCisgICAgMjgxNzUsIDI4MTgyLCAyODE4OSwgMjgxOTYsIDI4MjAzLCAyODIxMCwgMCwgMCwgMCwgMCwgMjgyMTcsIDI4MjI1LCAKKyAgICAyODIzMiwgMjgyMzksIDI4MjQ1LCAyODI1MiwgMjgyNTgsIDI4MjY1LCAyODI3MSwgMjgyNzgsIDI4Mjg1LCAyODI5MiwgCisgICAgMjgyOTksIDI4MzA2LCAyODMxMywgMjgzMjAsIDI4MzI3LCAyODMzNCwgMjgzNDEsIDI4MzQ4LCAyODM1NCwgMjgzNjAsIAorICAgIDI4MzY3LCAyODM3NCwgMjgzODEsIDI4Mzg3LCAwLCAwLCAwLCAwLCAwLCAwLCAyODM5MywgMjgzOTksIDI4NDA0LCAyODQwOSwgCisgICAgMjg0MTQsIDI4NDE5LCAyODQyNCwgMjg0MjksIDI4NDM0LCAyODQzOSwgMjg0NDQsIDAsIDAsIDAsIDI4NDUwLCAyODQ1NiwgCisgICAgMjg0NjIsIDI4NDY2LCAyODQ3MiwgMjg0NzgsIDI4NDg0LCAyODQ5MCwgMjg0OTYsIDI4NTAyLCAyODUwOCwgMjg1MTQsIAorICAgIDI4NTIwLCAyODUyNiwgMjg1MzIsIDI4NTM4LCAyODU0NCwgMjg1NTAsIDI4NTU2LCAyODU2MCwgMjg1NjYsIDI4NTcyLCAKKyAgICAyODU3OCwgMjg1ODQsIDI4NTkwLCAyODU5NiwgMjg2MDIsIDI4NjA4LCAyODYxNCwgMjg2MjAsIDI4NjI2LCAyODYzMiwgCisgICAgMjg2MzgsIDI4NjQ0LCAyODY1MCwgMjg2NTQsIDI4NjU5LCAyODY2NCwgMjg2NjksIDI4NjczLCAyODY3OCwgMjg2ODIsIAorICAgIDI4Njg3LCAyODY5MiwgMjg2OTcsIDI4NzAxLCAyODcwNiwgMjg3MTEsIDI4NzE2LCAyODcyMSwgMjg3MjYsIDI4NzMwLCAKKyAgICAyODczNCwgMjg3MzksIDI4NzQ0LCAyODc0OSwgMjg3NTMsIDI4NzU3LCAyODc2MiwgMjg3NjcsIDI4NzcyLCAyODc3NywgMCwgCisgICAgMCwgMjg3ODMsIDI4Nzg3LCAyODc5NCwgMjg3OTksIDI4ODA1LCAyODgxMSwgMjg4MTYsIDI4ODIyLCAyODgyOCwgMjg4MzMsIAorICAgIDI4ODM5LCAyODg0NSwgMjg4NTEsIDI4ODU3LCAyODg2MywgMjg4NjgsIDI4ODczLCAyODg3OSwgMjg4ODQsIDI4ODkwLCAKKyAgICAyODg5NSwgMjg5MDEsIDI4OTA3LCAyODkxMywgMjg5MTksIDI4OTIzLCAyODkyOCwgMjg5MzMsIDI4OTM5LCAyODk0NSwgCisgICAgMjg5NTAsIDI4OTU2LCAyODk2MiwgMjg5NjYsIDI4OTcxLCAyODk3NiwgMjg5ODAsIDI4OTg1LCAyODk5MCwgMjg5OTUsIAorICAgIDI5MDAwLCAyOTAwNiwgMjkwMTIsIDI5MDE4LCAyOTAyMywgMjkwMjgsIDI5MDMyLCAyOTAzNywgMjkwNDEsIDI5MDQ2LCAKKyAgICAyOTA1MCwgMjkwNTUsIDI5MDYwLCAyOTA2NSwgMjkwNzAsIDI5MDc3LCAyOTA4NCwgMjkwOTIsIDI5MTAzLCAyOTExMiwgCisgICAgMjkxMjAsIDI5MTI3LCAyOTEzOCwgMjkxNDQsIDI5MTUxLCAwLCAyOTE1OCwgMjkxNjMsIDI5MTY4LCAyOTE3NiwgMjkxODIsIAorICAgIDI5MTkwLCAyOTE5NSwgMjkyMDEsIDI5MjA3LCAyOTIxMywgMjkyMTgsIDI5MjI0LCAyOTIyOSwgMjkyMzYsIDI5MjQyLCAKKyAgICAyOTI0NywgMjkyNTMsIDI5MjU5LCAyOTI2NSwgMjkyNzIsIDI5Mjc5LCAyOTI4NiwgMjkyOTEsIDI5Mjk2LCAyOTMwMywgCisgICAgMjkzMTAsIDI5MzE3LCAyOTMyNCwgMjkzMzEsIDAsIDAsIDI5MzM4LCAyOTM0NSwgMjkzNTIsIDI5MzU4LCAyOTM2NCwgCisgICAgMjkzNzAsIDI5Mzc2LCAyOTM4MiwgMjkzODgsIDI5Mzk0LCAyOTQwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjk0MDYsIDI5NDEyLCAKKyAgICAyOTQxNywgMjk0MjIsIDI5NDI3LCAyOTQzMiwgMjk0MzcsIDI5NDQyLCAyOTQ0NywgMjk0NTIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI5NDU3LCAyOTQ2MiwgMjk0NjcsIDI5NDcyLCAyOTQ3NywgMjk0ODIsIDI5NDg3LCAyOTQ5NSwgMjk1MDIsIDI5NTA3LCAKKyAgICAyOTUxMiwgMjk1MTcsIDI5NTIyLCAyOTUyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0ODEsIDI2NDg2LCAKLSAgICAyNjQ4OSwgMjY0OTMsIDI2NDk3LCAyNjUwMSwgMjY1MDUsIDI2NTA5LCAyNjUxMywgMjY1MTcsIDI2NTIxLCAyNjUyNSwgCi0gICAgMjY1MjksIDI2NTMzLCAyNjUzNywgMjY1NDEsIDI2NTQ1LCAyNjU0OCwgMjY1NTIsIDI2NTU2LCAyNjU2MCwgMjY1NjMsIAotICAgIDI2NTY2LCAyNjU2OSwgMjY1NzMsIDI2NTc3LCAyNjU4MSwgMjY1ODUsIDI2NTg5LCAwLCAwLCAwLCAyNjU5MiwgMjY1OTYsIAotICAgIDI2NjAwLCAyNjYwNCwgMjY2MDksIDI2NjE0LCAyNjYxOSwgMjY2MjQsIDI2NjI4LCAyNjYzMiwgMjY2MzcsIDI2NjQyLCAwLCAKLSAgICAwLCAwLCAwLCAyNjY0OCwgMjY2NTIsIDI2NjU3LCAyNjY2MiwgMjY2NjcsIDI2NjcyLCAyNjY3NiwgMjY2ODAsIDI2Njg0LCAKLSAgICAyNjY4OSwgMjY2OTMsIDI2Njk3LCAwLCAwLCAwLCAwLCAyNjcwMSwgMCwgMCwgMCwgMjY3MDUsIDI2NzA5LCAyNjcxMywgCi0gICAgMjY3MTcsIDI2NzIwLCAyNjcyMywgMjY3MjYsIDI2NzI5LCAyNjczMiwgMjY3MzUsIDI2NzM4LCAyNjc0MSwgMjY3NDQsIAotICAgIDI2NzQ5LCAyNjc1NSwgMjY3NjEsIDI2NzY3LCAyNjc3MywgMjY3NzgsIDI2Nzg0LCAyNjc5MCwgMjY3OTYsIDI2ODAxLCAKLSAgICAyNjgwNywgMjY4MTIsIDI2ODE4LCAyNjgyNCwgMjY4MjksIDI2ODM1LCAyNjg0MSwgMjY4NDcsIDI2ODUzLCAyNjg1OCwgCi0gICAgMjY4NjMsIDI2ODY5LCAyNjg3NSwgMjY4ODAsIDI2ODg2LCAyNjg5MSwgMjY4OTcsIDI2OTAyLCAyNjkwOCwgMCwgMCwgCi0gICAgMjY5MTQsIDI2OTIwLCAyNjkyNiwgMjY5MzIsIDI2OTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjk0NCwgMjY5NTEsIDI2OTU4LCAyNjk2NCwgMjY5NzEsIDI2OTc4LCAyNjk4NCwgMjY5OTEsIDI2OTk4LCAyNzAwNSwgCi0gICAgMjcwMTIsIDI3MDE4LCAyNzAyNSwgMjcwMzIsIDI3MDM4LCAyNzA0NSwgMjcwNTIsIDI3MDU5LCAyNzA2NiwgMjcwNzMsIAotICAgIDI3MDgwLCAyNzA4NiwgMjcwOTMsIDI3MDk5LCAyNzEwNSwgMjcxMTIsIDI3MTE4LCAyNzEyNSwgMjcxMzIsIDI3MTM5LCAKLSAgICAyNzE0NiwgMjcxNTMsIDI3MTYwLCAyNzE2NiwgMjcxNzMsIDI3MTgwLCAyNzE4NiwgMjcxOTMsIDI3MjAwLCAyNzIwNywgCi0gICAgMjcyMTQsIDI3MjIxLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzIyOCwgMjcyMzYsIDI3MjQzLCAyNzI1MCwgMjcyNTYsIDI3MjYzLCAKLSAgICAyNzI2OSwgMjcyNzYsIDI3MjgyLCAyNzI4OSwgMjcyOTYsIDI3MzAzLCAyNzMxMCwgMjczMTcsIDI3MzI0LCAyNzMzMSwgCi0gICAgMjczMzgsIDI3MzQ1LCAyNzM1MSwgMjczNTgsIDI3MzY0LCAyNzM3MCwgMjczNzcsIDI3Mzg0LCAyNzM5MSwgMjczOTcsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI3NDAzLCAyNzQwOSwgMjc0MTQsIDI3NDE5LCAyNzQyNCwgMjc0MjksIDI3NDM0LCAyNzQzOSwgCi0gICAgMjc0NDQsIDI3NDQ5LCAwLCAwLCAwLCAwLCAyNzQ1NCwgMjc0NjAsIDI3NDY2LCAyNzQ3MCwgMjc0NzYsIDI3NDgyLCAKLSAgICAyNzQ4OCwgMjc0OTQsIDI3NTAwLCAyNzUwNiwgMjc1MTIsIDI3NTE4LCAyNzUyNCwgMjc1MzAsIDI3NTM2LCAyNzU0MiwgCi0gICAgMjc1NDgsIDI3NTU0LCAyNzU2MCwgMjc1NjQsIDI3NTcwLCAyNzU3NiwgMjc1ODIsIDI3NTg4LCAyNzU5NCwgMjc2MDAsIAotICAgIDI3NjA2LCAyNzYxMiwgMjc2MTgsIDI3NjI0LCAyNzYzMCwgMjc2MzYsIDI3NjQyLCAyNzY0OCwgMjc2NTQsIDI3NjU4LCAKLSAgICAyNzY2MywgMjc2NjgsIDI3NjczLCAyNzY3NywgMjc2ODIsIDI3Njg2LCAyNzY5MSwgMjc2OTYsIDI3NzAxLCAyNzcwNiwgCi0gICAgMjc3MTEsIDI3NzE2LCAyNzcyMSwgMjc3MjYsIDI3NzMxLCAyNzczNSwgMjc3MzksIDI3NzQ0LCAyNzc0OSwgMjc3NTQsIAotICAgIDI3NzU4LCAyNzc2MiwgMjc3NjcsIDI3NzcyLCAyNzc3NywgMjc3ODIsIDAsIDAsIDI3Nzg4LCAyNzc5MiwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjk1MzIsIDI5NTM4LCAKKyAgICAyOTU0NCwgMjk1NDgsIDI5NTUyLCAyOTU1NiwgMjk1NjAsIDI5NTY2LCAyOTU3MCwgMjk1NzYsIDI5NTgwLCAyOTU4NiwgCisgICAgMjk1OTIsIDI5NjAwLCAyOTYwNiwgMjk2MTQsIDI5NjE4LCAyOTYyMiwgMjk2MjYsIDI5NjMyLCAyOTYzNSwgMjk2NDAsIAorICAgIDI5NjQ0LCAyOTY1MCwgMjk2NTQsIDI5NjU4LCAyOTY2NCwgMjk2NjgsIDI5Njc0LCAyOTY3OCwgMjk2ODQsIDI5NjkyLCAKKyAgICAyOTcwMCwgMjk3MDgsIDI5NzE0LCAyOTcxOCwgMjk3MjQsIDI5NzI4LCAyOTczNCwgMjk3MzcsIDI5NzQwLCAyOTc0NiwgCisgICAgMjk3NTAsIDI5NzU2LCAyOTc1OSwgMjk3NjIsIDI5NzY1LCAyOTc2OSwgMjk3NzMsIDI5Nzc5LCAyOTc4NSwgMjk3ODksIAorICAgIDI5NzkyLCAyOTc5NiwgMjk4MDEsIDI5ODA2LCAyOTgxMywgMjk4MTgsIDI5ODI1LCAyOTgzMiwgMjk4NDEsIDI5ODQ4LCAKKyAgICAyOTg1NywgMjk4NjIsIDI5ODY5LCAyOTg3NiwgMjk4ODUsIDI5ODkwLCAyOTg5NywgMjk5MDIsIDI5OTA4LCAyOTkxNCwgCisgICAgMjk5MjAsIDI5OTI2LCAyOTkzMiwgMjk5MzgsIDAsIDAsIDAsIDAsIDI5OTQ0LCAyOTk0OCwgMjk5NTEsIDI5OTU0LCAKKyAgICAyOTk1NywgMjk5NjAsIDI5OTYzLCAyOTk2NiwgMjk5NjksIDI5OTcyLCAyOTk3NSwgMjk5NzgsIDI5OTgxLCAyOTk4NCwgCisgICAgMjk5ODksIDI5OTk0LCAyOTk5OSwgMzAwMDIsIDMwMDA3LCAzMDAxMiwgMzAwMTcsIDMwMDIyLCAzMDAyOSwgMzAwMzQsIAorICAgIDMwMDM5LCAzMDA0NCwgMzAwNDksIDMwMDU2LCAzMDA2MiwgMzAwNjgsIDMwMDc0LCAzMDA4MCwgMzAwODYsIDMwMDk1LCAKKyAgICAzMDEwNCwgMzAxMTAsIDMwMTE2LCAzMDEyNSwgMzAxMzQsIDMwMTQzLCAzMDE1MiwgMzAxNjEsIDMwMTcwLCAzMDE3OSwgCisgICAgMzAxODgsIDAsIDAsIDAsIDMwMTk3LCAzMDIwMiwgMzAyMDcsIDMwMjEyLCAzMDIxNiwgMzAyMjAsIDMwMjI0LCAzMDIyOSwgCisgICAgMzAyMzMsIDMwMjM3LCAzMDI0MiwgMzAyNDYsIDMwMjUxLCAzMDI1NiwgMzAyNjEsIDMwMjY2LCAzMDI3MSwgMzAyNzYsIAorICAgIDMwMjgxLCAzMDI4NiwgMzAyOTEsIDMwMjk1LCAzMDI5OSwgMzAzMDQsIDMwMzA5LCAzMDMxNCwgMzAzMTgsIDMwMzIyLCAKKyAgICAzMDMyNiwgMzAzMzEsIDMwMzM2LCAzMDM0MSwgMzAzNDYsIDMwMzUwLCAzMDM1NywgMzAzNjQsIDMwMzcxLCAzMDM3NywgCisgICAgMzAzODMsIDMwMzg5LCAzMDM5NSwgMzA0MDEsIDMwNDA3LCAwLCAwLCAwLCAzMDQxMiwgMzA0MTcsIDMwNDIyLCAzMDQyNywgCisgICAgMzA0MzEsIDMwNDM1LCAzMDQzOSwgMzA0NDMsIDMwNDQ3LCAzMDQ1MSwgMzA0NTUsIDMwNDU5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDQ2MywgMzA0NjYsIDMwNDcwLCAKKyAgICAzMDQ3NCwgMzA0NzgsIDMwNDgyLCAzMDQ4NiwgMzA0OTAsIDMwNDk0LCAzMDQ5OCwgMzA1MDIsIDMwNTA2LCAzMDUxMCwgCisgICAgMzA1MTQsIDMwNTE3LCAzMDUyMCwgMzA1MjQsIDMwNTI4LCAzMDUzMiwgMzA1MzYsIDMwNTQwLCAzMDU0NCwgMzA1NDcsIAorICAgIDMwNTUxLCAzMDU1NSwgMzA1NTksIDMwNTYzLCAzMDU2NiwgMzA1NjksIDMwNTczLCAzMDU3NiwgMzA1ODAsIDMwNTg0LCAKKyAgICAzMDU4OCwgMzA1OTIsIDMwNTk2LCAzMDU5OSwgMzA2MDQsIDMwNjA5LCAzMDYxNCwgMzA2MTgsIDMwNjIyLCAzMDYyNywgCisgICAgMzA2MzEsIDMwNjM2LCAzMDY0MCwgMzA2NDYsIDMwNjUxLCAzMDY1NiwgMzA2NjEsIDMwNjY3LCAzMDY3MiwgMzA2NzgsIAorICAgIDMwNjg0LCAzMDY5MCwgMzA2OTQsIDAsIDAsIDAsIDMwNjk4LCAzMDcwMywgMzA3MTIsIDMwNzE3LCAzMDcyNCwgMzA3MjksIAorICAgIDMwNzMzLCAzMDczNiwgMzA3MzksIDMwNzQyLCAzMDc0NSwgMzA3NDgsIDMwNzUxLCAzMDc1NCwgMzA3NTcsIDAsIDAsIDAsIAorICAgIDMwNzYwLCAzMDc2NCwgMzA3NjgsIDMwNzcyLCAzMDc3OSwgMzA3ODUsIDMwNzkxLCAzMDc5NywgMzA4MDMsIDMwODA5LCAKKyAgICAzMDgxNSwgMzA4MjEsIDMwODI3LCAzMDgzMywgMzA4NDAsIDMwODQ3LCAzMDg1NCwgMzA4NjEsIDMwODY4LCAzMDg3NSwgCisgICAgMzA4ODIsIDMwODg5LCAzMDg5NiwgMzA5MDMsIDMwOTEwLCAzMDkxNywgMzA5MjQsIDMwOTMxLCAzMDkzOCwgMzA5NDUsIAorICAgIDMwOTUyLCAzMDk1OSwgMzA5NjYsIDMwOTczLCAzMDk4MCwgMzA5ODcsIDMwOTk0LCAzMTAwMSwgMzEwMDgsIDMxMDE1LCAKKyAgICAzMTAyMiwgMzEwMjksIDMxMDM2LCAzMTA0MywgMzEwNTEsIDMxMDU5LCAzMTA2NywgMzEwNzMsIDMxMDc5LCAzMTA4NSwgCisgICAgMzEwOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMTAyLCAzMTEwNywgMzExMTIsIDMxMTE3LCAzMTEyMiwgMzExMzEsIAorICAgIDMxMTQyLCAzMTE1MSwgMzExNjIsIDMxMTY4LCAzMTE4MSwgMzExODcsIDMxMTk0LCAzMTIwMSwgMzEyMDYsIDMxMjEyLCAKKyAgICAzMTIxOCwgMzEyMjksIDMxMjM4LCAzMTI0NSwgMzEyNTIsIDMxMjYwLCAzMTI2NywgMzEyNzUsIDMxMjg1LCAzMTI5NSwgCisgICAgMzEzMDIsIDMxMzA5LCAzMTMxNiwgMzEzMjYsIDMxMzMxLCAzMTMzOSwgMzEzNDUsIDMxMzUzLCAzMTM2MiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEzNjcsIDMxMzcyLCAzMTM3OCwgMzEzODQsIDMxMzkyLCAzMTM5OCwgCisgICAgMzE0MDQsIDMxNDEwLCAzMTQxNSwgMzE0MjIsIDMxNDI3LCAzMTQzMywgMzE0MzksIDMxNDQ3LCAzMTQ1MiwgMzE0NTgsIAorICAgIDMxNDYzLCAzMTQ3MCwgMzE0NzYsIDMxNDg0LCAzMTQ5MiwgMzE0OTgsIDMxNTA0LCAzMTUxMSwgMzE1MTgsIDMxNTI0LCAKKyAgICAzMTUzMCwgMzE1MzYsIDMxNTQyLCAzMTU0NywgMzE1NTMsIDMxNTYxLCAzMTU2OCwgMzE1NzQsIDMxNTgwLCAzMTU4NiwgCisgICAgMzE1OTIsIDMxNjAwLCAzMTYwNCwgMzE2MTAsIDMxNjE2LCAzMTYyMiwgMzE2MjgsIDMxNjM0LCAzMTY0MCwgMzE2NDQsIAorICAgIDMxNjQ5LCAzMTY1NCwgMzE2NjEsIDMxNjY2LCAzMTY3MCwgMzE2NzUsIDMxNjgwLCAzMTY4NSwgMzE2ODksIDMxNjk0LCAKKyAgICAzMTY5OSwgMzE3MDMsIDMxNzA3LCAzMTcxMSwgMzE3MTYsIDMxNzIwLCAzMTcyNSwgMzE3MzAsIDMxNzM0LCAzMTczOSwgCisgICAgMzE3NDMsIDMxNzQ4LCAzMTc1MiwgMzE3NTcsIDMxNzYyLCAzMTc2OCwgMzE3NzMsIDMxNzc4LCAzMTc4MiwgMzE3ODcsIAorICAgIDMxNzkzLCAzMTgwMCwgMzE4MDUsIDMxODEwLCAzMTgxNSwgMzE4MTksIDMxODI0LCAzMTgyOCwgMzE4MzQsIDMxODQxLCAKKyAgICAzMTg0OCwgMzE4NTMsIDMxODU4LCAzMTg2MiwgMzE4NjgsIDMxODczLCAzMTg3OCwgMzE4ODMsIDMxODg4LCAzMTg5NCwgCisgICAgMzE4OTksIDMxOTA1LCAzMTkxMCwgMzE5MTYsIDMxOTIyLCAzMTkyOCwgMzE5MzUsIDMxOTQyLCAzMTk0OSwgMzE5NTYsIAorICAgIDMxOTYzLCAzMTk3MCwgMzE5NzUsIDMxOTg0LCAzMTk5NCwgMzIwMDQsIDMyMDE0LCAzMjAyNCwgMzIwMzQsIDMyMDQ0LCAKKyAgICAzMjA1NywgMzIwNjcsIDMyMDc3LCAzMjA4NywgMzIwOTMsIDMyMDk4LCAzMjEwNSwgMzIxMTMsIDMyMTIxLCAzMjEyOCwgCisgICAgMzIxMzUsIDMyMTQyLCAzMjE0OSwgMzIxNTcsIDMyMTY2LCAzMjE3NSwgMzIxODQsIDMyMTkzLCAzMjIwMiwgMzIyMTEsIAorICAgIDMyMjIwLCAzMjIyOSwgMzIyMzgsIDMyMjQ3LCAzMjI1NiwgMzIyNjUsIDMyMjc0LCAzMjI4MywgMzIyOTEsIDMyMzAwLCAKKyAgICAzMjMxMSwgMzIzMTksIDMyMzI5LCAzMjM0MCwgMzIzNDksIDMyMzU4LCAzMjM2OCwgMzIzNzcsIDMyMzg1LCAzMjM5NCwgCisgICAgMzI0MDAsIDMyNDA1LCAzMjQxMywgMzI0MTgsIDMyNDI1LCAzMjQzMCwgMzI0MzksIDMyNDQ1LCAzMjQ1MSwgMzI0NTgsIAorICAgIDMyNDYzLCAzMjQ2OCwgMzI0NzYsIDMyNDg0LCAzMjQ5MywgMzI1MDIsIDMyNTA3LCAzMjUxNCwgMzI1MjQsIDMyNTMyLCAKKyAgICAzMjU0MSwgMzI1NDYsIDMyNTUyLCAzMjU1NywgMzI1NjQsIDMyNTY5LCAzMjU3OCwgMzI1ODMsIDMyNTg4LCAzMjU5MywgCisgICAgMzI2MDAsIDMyNjA2LCAzMjYxMSwgMzI2MjAsIDMyNjI4LCAzMjYzMywgMzI2MzgsIDMyNjQ1LCAzMjY1MiwgMzI2NTYsIAorICAgIDMyNjYwLCAzMjY2MywgMzI2NjYsIDMyNjY5LCAzMjY3MiwgMzI2NzUsIDMyNjc4LCAzMjY4NSwgMzI2ODgsIDMyNjkxLCAKKyAgICAzMjY5NiwgMzI3MDAsIDMyNzA0LCAzMjcwOCwgMzI3MTIsIDMyNzE2LCAzMjcyNiwgMzI3MzIsIDMyNzM4LCAzMjc0NCwgCisgICAgMzI3NTIsIDMyNzYwLCAzMjc2NiwgMzI3NzIsIDMyNzc5LCAzMjc4NSwgMzI3OTAsIDMyNzk2LCAzMjgwMiwgMzI4MDcsIAorICAgIDMyODEzLCAzMjgxOSwgMzI4MjcsIDMyODMyLCAzMjgzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI4NDQsIDMyODUwLCAzMjg1NSwgMzI4NjQsIDMyODcyLCAzMjg4MCwgCisgICAgMzI4ODcsIDMyODk0LCAzMjkwMSwgMzI5MDgsIDMyOTE2LCAzMjkyNCwgMzI5MzQsIDMyOTQ0LCAzMjk1MiwgMzI5NjAsIAorICAgIDMyOTY4LCAzMjk3NiwgMzI5ODUsIDMyOTk0LCAzMzAwMiwgMzMwMTAsIDMzMDE5LCAzMzAyOCwgMzMwMzgsIDMzMDQ4LCAKKyAgICAzMzA1NywgMzMwNjYsIDMzMDc0LCAzMzA4MiwgMzMwOTAsIDMzMDk4LCAzMzEwOCwgMzMxMTgsIDMzMTI2LCAzMzEzNCwgCisgICAgMzMxNDIsIDMzMTUwLCAzMzE1OCwgMzMxNjYsIDMzMTc0LCAzMzE4MiwgMzMxOTAsIDMzMTk4LCAzMzIwNiwgMzMyMTQsIAorICAgIDMzMjIzLCAzMzIzMiwgMzMyNDEsIDMzMjUwLCAzMzI2MCwgMzMyNzAsIDMzMjc3LCAzMzI4NCwgMzMyOTIsIDMzMzAwLCAKKyAgICAzMzMwOSwgMzMzMTgsIDMzMzI2LCAzMzMzNCwgMzMzNDYsIDMzMzU4LCAzMzM2NywgMzMzNzYsIDMzMzg1LCAzMzM5NCwgCisgICAgMzM0MDEsIDMzNDA4LCAzMzQxNiwgMzM0MjQsIDMzNDMyLCAzMzQ0MCwgMzM0NDgsIDMzNDU2LCAzMzQ2NCwgMzM0NzIsIAorICAgIDMzNDgxLCAzMzQ5MCwgMzM0OTksIDMzNTA4LCAzMzUxNywgMzM1MjYsIDMzNTM2LCAzMzU0NiwgMzM1NTYsIDMzNTY2LCAKKyAgICAzMzU3NSwgMzM1ODQsIDMzNTkxLCAzMzU5OCwgMzM2MDYsIDMzNjE0LCAzMzYyMiwgMzM2MzAsIDMzNjM4LCAzMzY0NiwgCisgICAgMzM2NTgsIDMzNjcwLCAzMzY3OSwgMzM2ODgsIDMzNjk2LCAzMzcwNCwgMzM3MTIsIDMzNzIwLCAzMzczMSwgMzM3NDIsIAorICAgIDMzNzUzLCAzMzc2NCwgMzM3NzYsIDMzNzg4LCAzMzc5NiwgMzM4MDQsIDMzODEyLCAzMzgyMCwgMzM4MjksIDMzODM4LCAKKyAgICAzMzg0NywgMzM4NTYsIDMzODY0LCAzMzg3MiwgMzM4ODAsIDMzODg4LCAzMzg5NiwgMzM5MDQsIDMzOTEzLCAzMzkyMiwgCisgICAgMzM5MzIsIDMzOTQyLCAzMzk1MCwgMzM5NTgsIDMzOTY2LCAzMzk3NCwgMzM5ODIsIDMzOTkwLCAzMzk5NywgMzQwMDQsIAorICAgIDM0MDEyLCAzNDAyMCwgMzQwMjgsIDM0MDM2LCAzNDA0NCwgMzQwNTIsIDM0MDYwLCAzNDA2OCwgMzQwNzYsIDM0MDg0LCAKKyAgICAzNDA5MiwgMzQxMDAsIDM0MTA4LCAzNDExNiwgMzQxMjQsIDM0MTMyLCAzNDE0MSwgMzQxNTAsIDM0MTU5LCAzNDE2NywgCisgICAgMzQxNzYsIDM0MTg1LCAzNDE5NCwgMzQyMDMsIDM0MjEzLCAzNDIyMiwgMzQyMjgsIDM0MjMzLCAzNDI0MCwgMzQyNDcsIAorICAgIDM0MjU1LCAzNDI2MywgMzQyNzIsIDM0MjgxLCAzNDI5MSwgMzQzMDEsIDM0MzEyLCAzNDMyMywgMzQzMzMsIDM0MzQzLCAKKyAgICAzNDM1MywgMzQzNjMsIDM0MzcyLCAzNDM4MSwgMzQzOTEsIDM0NDAxLCAzNDQxMiwgMzQ0MjMsIDM0NDMzLCAzNDQ0MywgCisgICAgMzQ0NTMsIDM0NDYzLCAzNDQ3MCwgMzQ0NzcsIDM0NDg1LCAzNDQ5MywgMzQ1MDAsIDM0NTA3LCAzNDUxNiwgMzQ1MjUsIAorICAgIDM0NTM1LCAzNDU0NSwgMzQ1NTYsIDM0NTY3LCAzNDU3NywgMzQ1ODcsIDM0NTk3LCAzNDYwNywgMzQ2MTYsIDM0NjI1LCAKKyAgICAzNDYzMywgMzQ2NDEsIDM0NjQ4LCAzNDY1NSwgMzQ2NjMsIDM0NjcxLCAzNDY4MCwgMzQ2ODksIDM0Njk5LCAzNDcwOSwgCisgICAgMzQ3MjAsIDM0NzMxLCAzNDc0MSwgMzQ3NTEsIDM0NzYxLCAzNDc3MSwgMzQ3ODAsIDM0Nzg5LCAzNDc5OSwgMzQ4MDksIAorICAgIDM0ODIwLCAzNDgzMSwgMzQ4NDEsIDM0ODUxLCAzNDg2MSwgMzQ4NzEsIDM0ODc4LCAzNDg4NSwgMzQ4OTMsIDM0OTAxLCAKKyAgICAzNDkxMCwgMzQ5MTksIDM0OTI5LCAzNDkzOSwgMzQ5NTAsIDM0OTYxLCAzNDk3MSwgMzQ5ODEsIDM0OTkxLCAzNTAwMSwgCisgICAgMzUwMDksIDM1MDE3LCAzNTAyNSwgMzUwMzMsIDM1MDQyLCAzNTA1MSwgMzUwNTksIDM1MDY3LCAzNTA3NCwgMzUwODEsIAorICAgIDM1MDg4LCAzNTA5NSwgMzUxMDMsIDM1MTExLCAzNTExOSwgMzUxMjcsIDM1MTM3LCAzNTE0NywgMzUxNTcsIDM1MTY3LCAKKyAgICAzNTE3NywgMzUxODcsIDM1MTk1LCAzNTIwMywgMzUyMTMsIDM1MjIzLCAzNTIzMywgMzUyNDMsIDM1MjUzLCAzNTI2MywgCisgICAgMzUyNzEsIDM1Mjc5LCAzNTI4OSwgMzUyOTksIDM1MzA5LCAwLCAwLCAzNTMxOSwgMzUzMjcsIDM1MzM1LCAzNTM0NSwgCisgICAgMzUzNTUsIDM1MzY1LCAwLCAwLCAzNTM3NSwgMzUzODMsIDM1MzkxLCAzNTQwMSwgMzU0MTEsIDM1NDIxLCAzNTQzMSwgCisgICAgMzU0NDEsIDM1NDUxLCAzNTQ1OSwgMzU0NjcsIDM1NDc3LCAzNTQ4NywgMzU0OTcsIDM1NTA3LCAzNTUxNywgMzU1MjcsIAorICAgIDM1NTM1LCAzNTU0MywgMzU1NTMsIDM1NTYzLCAzNTU3MywgMzU1ODMsIDM1NTkzLCAzNTYwMywgMzU2MTEsIDM1NjE5LCAKKyAgICAzNTYyOSwgMzU2MzksIDM1NjQ5LCAzNTY1OSwgMzU2NjksIDM1Njc5LCAzNTY4NywgMzU2OTUsIDM1NzA1LCAzNTcxNSwgCisgICAgMzU3MjUsIDAsIDAsIDM1NzM1LCAzNTc0MywgMzU3NTEsIDM1NzYxLCAzNTc3MSwgMzU3ODEsIDAsIDAsIDM1NzkxLCAKKyAgICAzNTc5OSwgMzU4MDcsIDM1ODE3LCAzNTgyNywgMzU4MzcsIDM1ODQ3LCAzNTg1NywgMCwgMzU4NjcsIDAsIDM1ODc1LCAwLCAKKyAgICAzNTg4NSwgMCwgMzU4OTUsIDM1OTA1LCAzNTkxMywgMzU5MjEsIDM1OTMxLCAzNTk0MSwgMzU5NTEsIDM1OTYxLCAzNTk3MSwgCisgICAgMzU5ODEsIDM1OTg5LCAzNTk5NywgMzYwMDcsIDM2MDE3LCAzNjAyNywgMzYwMzcsIDM2MDQ3LCAzNjA1NywgMzYwNjUsIAorICAgIDM2MDczLCAzNjA4MSwgMzYwODksIDM2MDk3LCAzNjEwNSwgMzYxMTMsIDM2MTIxLCAzNjEyOSwgMzYxMzcsIDM2MTQ1LCAKKyAgICAzNjE1MywgMzYxNjEsIDAsIDAsIDM2MTY5LCAzNjE3OSwgMzYxODksIDM2MjAyLCAzNjIxNSwgMzYyMjgsIDM2MjQxLCAKKyAgICAzNjI1NCwgMzYyNjcsIDM2Mjc3LCAzNjI4NywgMzYzMDAsIDM2MzEzLCAzNjMyNiwgMzYzMzksIDM2MzUyLCAzNjM2NSwgCisgICAgMzYzNzUsIDM2Mzg1LCAzNjM5OCwgMzY0MTEsIDM2NDI0LCAzNjQzNywgMzY0NTAsIDM2NDYzLCAzNjQ3MywgMzY0ODMsIAorICAgIDM2NDk2LCAzNjUwOSwgMzY1MjIsIDM2NTM1LCAzNjU0OCwgMzY1NjEsIDM2NTcxLCAzNjU4MSwgMzY1OTQsIDM2NjA3LCAKKyAgICAzNjYyMCwgMzY2MzMsIDM2NjQ2LCAzNjY1OSwgMzY2NjksIDM2Njc5LCAzNjY5MiwgMzY3MDUsIDM2NzE4LCAzNjczMSwgCisgICAgMzY3NDQsIDM2NzU3LCAzNjc2NSwgMzY3NzMsIDM2Nzg0LCAzNjc5MiwgMCwgMzY4MDMsIDM2ODExLCAzNjgyMiwgMzY4MzAsIAorICAgIDM2ODM4LCAzNjg0NiwgMzY4NTQsIDM2ODYyLCAzNjg2NSwgMzY4NjgsIDM2ODcxLCAzNjg3NCwgMzY4ODAsIDM2ODkxLCAKKyAgICAzNjg5OSwgMCwgMzY5MTAsIDM2OTE4LCAzNjkyOSwgMzY5MzcsIDM2OTQ1LCAzNjk1MywgMzY5NjEsIDM2OTY5LCAzNjk3NCwgCisgICAgMzY5NzksIDM2OTg0LCAzNjk5MiwgMzcwMDAsIDM3MDExLCAwLCAwLCAzNzAyMiwgMzcwMzAsIDM3MDQxLCAzNzA0OSwgCisgICAgMzcwNTcsIDM3MDY1LCAwLCAzNzA3MywgMzcwNzgsIDM3MDgzLCAzNzA4OCwgMzcwOTYsIDM3MTA0LCAzNzExNSwgMzcxMjYsIAorICAgIDM3MTM0LCAzNzE0MiwgMzcxNTAsIDM3MTYxLCAzNzE2OSwgMzcxNzcsIDM3MTg1LCAzNzE5MywgMzcyMDEsIDM3MjA3LCAKKyAgICAzNzIxMywgMCwgMCwgMzcyMTYsIDM3MjI3LCAzNzIzNSwgMCwgMzcyNDYsIDM3MjU0LCAzNzI2NSwgMzcyNzMsIDM3MjgxLCAKKyAgICAzNzI4OSwgMzcyOTcsIDM3MzA1LCAzNzMwOCwgMCwgMzczMTEsIDM3MzE1LCAzNzMxOSwgMzczMjMsIDM3MzI3LCAzNzMzMSwgCisgICAgMzczMzUsIDM3MzM5LCAzNzM0MywgMzczNDcsIDM3MzUxLCAzNzM1NSwgMzczNjEsIDM3MzY3LCAzNzM3MywgMzczNzYsIAorICAgIDM3Mzc5LCAzNzM4MSwgMzczODUsIDM3Mzg5LCAzNzM5MywgMzczOTcsIDM3Mzk5LCAzNzQwMywgMzc0MDcsIDM3NDEzLCAKKyAgICAzNzQxOSwgMzc0MjYsIDM3NDMzLCAzNzQzOCwgMzc0NDMsIDM3NDQ5LCAzNzQ1NSwgMzc0NTcsIDM3NDYwLCAzNzQ2MiwgCisgICAgMzc0NjYsIDM3NDcwLCAzNzQ3NCwgMzc0NzcsIDM3NDgxLCAzNzQ4NSwgMzc0ODksIDM3NDkzLCAzNzQ5NywgMzc1MDMsIAorICAgIDM3NTA3LCAzNzUxMSwgMzc1MTcsIDM3NTIyLCAzNzUyOSwgMzc1MzEsIDM3NTM0LCAzNzUzOCwgMzc1NDEsIDM3NTQ1LCAKKyAgICAzNzU1MCwgMzc1NTIsIDM3NTYxLCAzNzU3MCwgMzc1NzMsIDM3NTc3LCAzNzU3OSwgMzc1ODEsIDM3NTgzLCAzNzU4NiwgCisgICAgMzc1OTIsIDM3NTk0LCAzNzU5OCwgMzc2MDIsIDM3NjA5LCAzNzYxNiwgMzc2MjAsIDM3NjI1LCAzNzYzMCwgMzc2MzUsIAorICAgIDM3NjM5LCAzNzY0MywgMzc2NDcsIDM3NjUwLCAzNzY1MywgMzc2NTcsIDM3NjY0LCAzNzY2OSwgMzc2NzMsIDM3Njc3LCAKKyAgICAzNzY4MiwgMzc2ODYsIDM3NjkwLCAzNzY5NSwgMzc3MDAsIDM3NzA0LCAzNzcwOCwgMzc3MTIsIDM3NzE0LCAzNzcxOSwgCisgICAgMzc3MjQsIDM3NzI4LCAzNzczMiwgMzc3MzYsIDM3NzQwLCAwLCAwLCAwLCAwLCAwLCAzNzc0NCwgMzc3NTAsIDM3NzU2LCAKKyAgICAzNzc2MywgMzc3NzAsIDM3Nzc1LCAzNzc4MCwgMzc3ODQsIDAsIDAsIDM3NzkwLCAzNzc5MywgMzc3OTYsIDM3Nzk5LCAKKyAgICAzNzgwMiwgMzc4MDUsIDM3ODA4LCAzNzgxMiwgMzc4MTYsIDM3ODIxLCAzNzgyNiwgMzc4MzEsIDM3ODM3LCAzNzg0MSwgCisgICAgMzc4NDQsIDM3ODQ3LCAzNzg1MCwgMzc4NTMsIDM3ODU2LCAzNzg1OSwgMzc4NjIsIDM3ODY1LCAzNzg2OCwgMzc4NzIsIAorICAgIDM3ODc2LCAzNzg4MSwgMzc4ODYsIDAsIDM3ODkxLCAzNzg5NywgMzc5MDMsIDM3OTA5LCAzNzkxNiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMzc5MjMsIDM3OTI2LCAzNzkyOSwgMzc5MzIsIDM3OTM3LCAzNzk0MCwgMzc5NDMsIDM3OTQ2LCAKKyAgICAzNzk0OSwgMzc5NTIsIDM3OTU1LCAzNzk1OSwgMzc5NjIsIDM3OTY1LCAzNzk2OCwgMzc5NzEsIDM3OTc0LCAzNzk3OSwgCisgICAgMzc5ODIsIDM3OTg1LCAzNzk4OCwgMzc5OTEsIDM3OTk0LCAzNzk5OSwgMzgwMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4MDA1LCAzODAxMCwgMzgwMTUsIDM4MDIyLCAKKyAgICAzODAzMCwgMzgwMzUsIDM4MDQwLCAzODA0NCwgMzgwNDgsIDM4MDUzLCAzODA2MCwgMzgwNjcsIDM4MDcxLCAzODA3NiwgCisgICAgMzgwODEsIDM4MDg2LCAzODA5MSwgMzgwOTgsIDM4MTAzLCAzODEwOCwgMzgxMTMsIDM4MTIyLCAzODEyOSwgMzgxMzUsIAorICAgIDM4MTM5LCAzODE0NCwgMzgxNTAsIDM4MTU1LCAzODE2MiwgMzgxNzAsIDM4MTc4LCAzODE4MiwgMzgxODYsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4MTkwLCAzODE5NCwgMzgyMDEsIDM4MjA1LCAzODIwOSwgCisgICAgMzgyMTQsIDM4MjE4LCAzODIyMiwgMzgyMjYsIDM4MjI4LCAzODIzMiwgMzgyMzYsIDM4MjQwLCAzODI0NSwgMzgyNDksIAorICAgIDM4MjUzLCAzODI2MSwgMzgyNjQsIDM4MjY4LCAzODI3MSwgMzgyNzQsIDM4MjgwLCAzODI4MywgMzgyODYsIDM4MjkyLCAKKyAgICAzODI5NiwgMzgzMDAsIDM4MzA0LCAzODMwNywgMzgzMTEsIDM4MzE0LCAzODMxOCwgMzgzMjAsIDM4MzIzLCAzODMyNiwgCisgICAgMzgzMzAsIDM4MzMyLCAzODMzNiwgMzgzMzksIDM4MzQyLCAzODM0NywgMzgzNTIsIDM4MzU4LCAzODM2MSwgMzgzNjQsIAorICAgIDM4MzY4LCAzODM3MywgMzgzNzYsIDM4Mzc5LCAzODM4MiwgMzgzODYsIDM4MzkwLCAzODM5MywgMzgzOTYsIDM4Mzk4LCAKKyAgICAzODQwMSwgMzg0MDQsIDM4NDA3LCAzODQxMSwgMzg0MTYsIDM4NDE5LCAzODQyMywgMzg0MjcsIDM4NDMxLCAzODQzNSwgCisgICAgMzg0NDAsIDM4NDQ1LCAzODQ0OSwgMzg0NTMsIDM4NDU4LCAzODQ2MywgMzg0NjgsIDM4NDcyLCAzODQ3NiwgMzg0ODEsIAorICAgIDM4NDg1LCAzODQ4OCwgMzg0OTEsIDM4NDkzLCAzODQ5NywgMzg1MDIsIDM4NTA5LCAzODUxNiwgMzg1MjMsIDM4NTMwLCAKKyAgICAzODUzNywgMzg1NDQsIDM4NTUxLCAzODU1OCwgMzg1NjYsIDM4NTczLCAzODU4MSwgMzg1ODgsIDM4NTk1LCAzODYwMywgCisgICAgMzg2MTEsIDM4NjE2LCAzODYyMSwgMzg2MjYsIDM4NjMxLCAzODYzNiwgMzg2NDEsIDM4NjQ2LCAzODY1MSwgMzg2NTYsIAorICAgIDM4NjYxLCAzODY2NywgMzg2NzMsIDM4Njc5LCAzODY4NSwgMzg2OTIsIDM4NzAwLCAzODcwNywgMzg3MTMsIDM4NzE5LCAKKyAgICAzODcyNSwgMzg3MzEsIDM4NzM3LCAzODc0MywgMzg3NDksIDM4NzU1LCAzODc2MSwgMzg3NjgsIDM4Nzc1LCAzODc4MiwgCisgICAgMzg3ODksIDM4Nzk3LCAzODgwNiwgMzg4MTQsIDM4ODI1LCAzODgzMywgMzg4NDEsIDM4ODQ5LCAzODg1NSwgMzg4NjQsIAorICAgIDM4ODczLCAzODg4MSwgMzg4OTAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4ODk4LCAzODkwMCwgMzg5MDMsIDM4OTA1LCAzODkwOCwgCisgICAgMzg5MTEsIDM4OTE0LCAzODkxOSwgMzg5MjQsIDM4OTI5LCAzODkzNCwgMzg5MzgsIDM4OTQyLCAzODk0NiwgMzg5NTAsIAorICAgIDM4OTU1LCAzODk2MSwgMzg5NjYsIDM4OTcyLCAzODk3NywgMzg5ODIsIDM4OTg3LCAzODk5MywgMzg5OTgsIDM5MDA0LCAKKyAgICAzOTAxMCwgMzkwMTQsIDM5MDE4LCAzOTAyMywgMzkwMjgsIDM5MDMzLCAzOTAzOCwgMzkwNDMsIDM5MDUxLCAzOTA1OSwgCisgICAgMzkwNjcsIDM5MDc1LCAzOTA4MiwgMzkwOTAsIDM5MDk3LCAzOTEwNCwgMzkxMTIsIDM5MTIyLCAzOTEyOSwgMzkxMzYsIAorICAgIDM5MTQzLCAzOTE1MCwgMzkxNTgsIDM5MTY2LCAzOTE3MywgMzkxODAsIDM5MTg4LCAzOTE5NiwgMzkyMDEsIDM5MjA5LCAKKyAgICAzOTIxNCwgMzkyMTksIDM5MjI1LCAzOTIzMCwgMzkyMzYsIDM5MjQzLCAzOTI1MCwgMzkyNTUsIDM5MjYxLCAzOTI2NiwgCisgICAgMzkyNjksIDM5MjczLCAzOTI3NiwgMzkyODAsIDM5Mjg0LCAzOTI4OCwgMzkyOTQsIDM5MzAwLCAzOTMwNiwgMzkzMTIsIAorICAgIDM5MzE2LCAzOTMyMCwgMzkzMjQsIDM5MzI4LCAzOTMzNCwgMzkzNDAsIDM5MzQ0LCAzOTM0OSwgMzkzNTMsIDM5MzU4LCAKKyAgICAzOTM2MiwgMzkzNjYsIDM5MzY5LCAzOTM3MywgMzkzNzYsIDM5MzgwLCAzOTM4NywgMzkzOTUsIDM5NDA2LCAzOTQxNywgCisgICAgMzk0MjIsIDM5NDMxLCAzOTQzOCwgMzk0NDYsIDM5NDU0LCAzOTQ1OCwgMzk0NjQsIDM5NDcyLCAzOTQ3NiwgMzk0ODEsIAorICAgIDM5NDg2LCAzOTQ5MiwgMzk0OTgsIDM5NTA0LCAzOTUxMSwgMzk1MTUsIDM5NTE5LCAzOTUyNCwgMzk1MjcsIDM5NTI5LCAKKyAgICAzOTUzMywgMzk1MzcsIDM5NTQ0LCAzOTU0OCwgMzk1NTAsIDM5NTUyLCAzOTU1NiwgMzk1NjMsIDM5NTY4LCAzOTU3NCwgCisgICAgMzk1ODMsIDM5NTkwLCAzOTU5NSwgMzk1OTksIDM5NjAzLCAzOTYwNywgMzk2MTAsIDM5NjEzLCAzOTYxNiwgMzk2MjAsIAorICAgIDM5NjI0LCAzOTYyOCwgMzk2MzIsIDM5NjM2LCAzOTYzOSwgMzk2NDMsIDM5NjQ3LCAzOTY1MCwgMzk2NTIsIDM5NjU1LCAKKyAgICAzOTY1NywgMzk2NjEsIDM5NjY1LCAzOTY2NywgMzk2NzIsIDM5Njc1LCAzOTY3OSwgMzk2ODMsIDM5Njg3LCAzOTY4OSwgCisgICAgMzk2OTEsIDM5NjkzLCAzOTY5NiwgMzk3MDAsIDM5NzA0LCAzOTcwOCwgMzk3MTIsIDM5NzE2LCAzOTcyMiwgMzk3MjgsIAorICAgIDM5NzMwLCAzOTczMiwgMzk3MzQsIDM5NzM2LCAzOTczOSwgMzk3NDEsIDM5NzQ1LCAzOTc0NywgMzk3NTEsIDM5NzU0LCAKKyAgICAzOTc1OSwgMzk3NjMsIDM5NzY3LCAzOTc3MCwgMzk3NzQsIDM5Nzc4LCAzOTc4MywgMzk3ODcsIDM5Nzk2LCAzOTgwNiwgCisgICAgMzk4MTAsIDM5ODE1LCAzOTgyMSwgMzk4MjUsIDM5ODI5LCAzOTgzMiwgMzk4MzcsIDM5ODQxLCAzOTg0NywgMzk4NTEsIAorICAgIDM5ODYyLCAzOTg3MCwgMzk4NzQsIDM5ODc4LCAzOTg4NCwgMzk4ODgsIDM5ODkxLCAzOTg5MywgMzk4OTYsIDM5OTAwLCAKKyAgICAzOTkwNCwgMzk5MTAsIDM5OTE0LCAzOTkxOCwgMzk5MjEsIDM5OTI0LCAzOTkyOCwgMzk5MzMsIDM5OTM4LCAzOTk0MywgCisgICAgMzk5NDgsIDM5OTUzLCAzOTk2MCwgMzk5NjcsIDM5OTcxLCAzOTk3NSwgMzk5NzcsIDM5OTgxLCAzOTk4NCwgMzk5ODcsIAorICAgIDM5OTk1LCA0MDAwMywgNDAwMDksIDQwMDE1LCA0MDAyNCwgNDAwMzMsIDQwMDM4LCA0MDA0MywgNDAwNTEsIDQwMDU5LCAKKyAgICA0MDA2MSwgNDAwNjMsIDQwMDY4LCA0MDA3MywgNDAwNzksIDQwMDg1LCA0MDA5MCwgNDAwOTUsIDQwMDk5LCA0MDEwMywgCisgICAgNDAxMDksIDQwMTE1LCA0MDEyMSwgNDAxMjcsIDQwMTM3LCA0MDE0NywgNDAxNTQsIDQwMTYxLCA0MDE2MywgNDAxNjcsIAorICAgIDQwMTcxLCA0MDE3NiwgNDAxODEsIDQwMTg4LCA0MDE5NSwgNDAxOTgsIDQwMjAxLCA0MDIwNCwgNDAyMDcsIDQwMjEwLCAKKyAgICA0MDIxNSwgNDAyMTksIDQwMjI0LCA0MDIyOSwgNDAyMzIsIDQwMjM1LCA0MDIzOCwgNDAyNDEsIDQwMjQ0LCA0MDI0OCwgCisgICAgNDAyNTEsIDQwMjU0LCA0MDI1NywgNDAyNjAsIDQwMjYyLCA0MDI2NCwgNDAyNjYsIDQwMjY4LCA0MDI3NiwgNDAyODQsIAorICAgIDQwMjg5LCA0MDI5MiwgNDAyOTcsIDQwMzA3LCA0MDMxMywgNDAzMTksIDQwMzI1LCA0MDMzMywgNDAzNDEsIDQwMzUyLCAKKyAgICA0MDM1NiwgNDAzNjAsIDQwMzYyLCA0MDM2OCwgNDAzNzAsIDQwMzcyLCA0MDM3NCwgNDAzNzYsIDQwMzgyLCA0MDM4NSwgCisgICAgNDAzOTEsIDQwMzk3LCA0MDQwMSwgNDA0MDUsIDQwNDA5LCA0MDQxMiwgNDA0MTYsIDQwNDIwLCA0MDQyMiwgNDA0MzEsIAorICAgIDQwNDQwLCA0MDQ0NSwgNDA0NTAsIDQwNDU1LCA0MDQ2MSwgNDA0NjcsIDQwNDcwLCA0MDQ3MywgNDA0NzYsIDQwNDc5LCAKKyAgICA0MDQ4MSwgNDA0ODYsIDQwNDkxLCA0MDQ5NiwgNDA1MDIsIDQwNTA4LCA0MDUxNSwgNDA1MjIsIDQwNTI3LCA0MDUzMiwgCisgICAgNDA1MzcsIDQwNTQyLCA0MDU1MCwgNDA1NTgsIDQwNTY2LCA0MDU3NCwgNDA1ODIsIDQwNTkwLCA0MDU5OCwgNDA2MDYsIAorICAgIDQwNjE0LCA0MDYyMiwgNDA2MjksIDQwNjQwLCA0MDY0OSwgNDA2NjMsIDQwNjY2LCA0MDY3MSwgNDA2NzcsIDQwNjgzLCAKKyAgICA0MDY5MCwgNDA3MDQsIDQwNzE5LCA0MDcyNSwgNDA3MzEsIDQwNzM4LCA0MDc0NCwgNDA3NTIsIDQwNzU4LCA0MDc3MSwgCisgICAgNDA3ODUsIDQwNzkwLCA0MDc5NiwgNDA4MDMsIDQwODA2LCA0MDgwOSwgNDA4MTEsIDQwODE0LCA0MDgxNywgNDA4MTksIAorICAgIDQwODIxLCA0MDgyNSwgNDA4MjgsIDQwODMxLCA0MDgzNCwgNDA4MzcsIDQwODQyLCA0MDg0NywgNDA4NTIsIDQwODU3LCAKKyAgICA0MDg2MCwgNDA4NjMsIDQwODY1LCA0MDg2NywgNDA4NjksIDQwODczLCA0MDg3NywgNDA4ODEsIDQwODg3LCA0MDg5MCwgCisgICAgNDA4OTIsIDQwODk0LCA0MDg5OSwgNDA5MDQsIDQwOTA5LCA0MDkxNCwgNDA5MTksIDQwOTI0LCA0MDkyNiwgNDA5MjgsIAorICAgIDQwOTM3LCA0MDk0MSwgNDA5NDgsIDQwOTU3LCA0MDk1OSwgNDA5NjQsIDQwOTY5LCA0MDk3NiwgNDA5ODAsIDQwOTgyLCAKKyAgICA0MDk4NiwgNDA5ODgsIDQwOTkyLCA0MDk5NiwgNDEwMDAsIDQxMDAyLCA0MTAwNCwgNDEwMDYsIDQxMDExLCA0MTAxOCwgCisgICAgNDEwMjUsIDQxMDMyLCA0MTAzOSwgNDEwNDYsIDQxMDUzLCA0MTA2MCwgNDEwNjcsIDQxMDczLCA0MTA3OSwgNDEwODYsIAorICAgIDQxMDkzLCA0MTEwMCwgNDExMDcsIDQxMTEzLCA0MTExOSwgNDExMjYsIDQxMTMzLCA0MTE0MCwgNDExNDgsIDQxMTU1LCAKKyAgICA0MTE2MywgNDExNzAsIDQxMTc4LCA0MTE4NSwgNDExOTMsIDQxMjAxLCA0MTIwOCwgNDEyMTYsIDQxMjIzLCA0MTIzMSwgCisgICAgNDEyMzgsIDQxMjQ2LCA0MTI1MywgNDEyNjAsIDQxMjY3LCA0MTI3NCwgNDEyODEsIDQxMjg5LCA0MTI5NiwgNDEzMDMsIAorICAgIDQxMzEwLCA0MTMxOCwgNDEzMjUsIDQxMzMyLCA0MTMzOSwgNDEzNDYsIDQxMzU0LCA0MTM2MiwgNDEzNjksIDQxMzc2LCAKKyAgICA0MTM4MiwgNDEzODksIDQxMzk0LCA0MTQwMSwgNDE0MDgsIDQxNDE2LCA0MTQyMywgNDE0MzEsIDQxNDM5LCA0MTQ0NCwgCisgICAgNDE0NDksIDQxNDU0LCA0MTQ2MSwgNDE0NjgsIDQxNDc1LCA0MTQ4MiwgNDE0ODcsIDQxNDkxLCA0MTUwMCwgNDE1MDYsIAorICAgIDQxNTA5LCA0MTUxNywgNDE1MjAsIDQxNTI1LCA0MTUzMCwgNDE1MzMsIDQxNTM2LCA0MTU0NCwgNDE1NDcsIDQxNTUyLCAKKyAgICA0MTU1NSwgNDE1NjIsIDQxNTY3LCA0MTU3NSwgNDE1NzgsIDQxNTgxLCA0MTU4NCwgNDE1ODksIDQxNTk0LCA0MTU5NywgCisgICAgNDE2MDAsIDQxNjA4LCA0MTYxMSwgNDE2MTYsIDQxNjIzLCA0MTYyNywgNDE2MzEsIDQxNjM2LCA0MTY0MSwgNDE2NDcsIAorICAgIDQxNjUyLCA0MTY1OCwgNDE2NjQsIDQxNjY5LCA0MTY3NSwgNDE2ODMsIDQxNjg5LCA0MTY5NywgNDE3MDUsIDQxNzExLCAKKyAgICA0MTcxOSwgNDE3MjcsIDQxNzM2LCA0MTc0NCwgNDE3NTAsIDQxNzU4LCA0MTc2NywgNDE3NzUsIDQxNzc5LCA0MTc4NCwgCisgICAgNDE3OTcsIDQxODEwLCA0MTgxNCwgNDE4MTgsIDQxODIyLCA0MTgyNiwgNDE4MzYsIDQxODQwLCA0MTg0NSwgNDE4NTAsIAorICAgIDQxODU1LCA0MTg2MCwgNDE4NjUsIDQxODcwLCA0MTg4MCwgNDE4OTAsIDQxODk4LCA0MTkwOCwgNDE5MTgsIDQxOTI2LCAKKyAgICA0MTkzNiwgNDE5NDYsIDQxOTU0LCA0MTk2NCwgNDE5NzQsIDQxOTgyLCA0MTk5MCwgNDIwMDAsIDQyMDEwLCA0MjAxMywgCisgICAgNDIwMTYsIDQyMDE5LCA0MjAyNCwgNDIwMjgsIDQyMDM0LCA0MjA0MSwgNDIwNDgsIDQyMDU2LCA0MjA2MywgNDIwNjcsIAorICAgIDQyMDcxLCA0MjA3NSwgNDIwNzksIDQyMDgxLCA0MjA4NSwgNDIwODksIDQyMDk0LCA0MjA5OSwgNDIxMDYsIDQyMTEzLCAKKyAgICA0MjExNiwgNDIxMjMsIDQyMTI1LCA0MjEyNywgNDIxMzEsIDQyMTM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjE0MCwgNDIxNDQsIDQyMTUxLCA0MjE1OCwgNDIxNjUsIAorICAgIDQyMTcyLCA0MjE3NiwgNDIxODAsIDQyMTg0LCA0MjE4OCwgNDIxOTMsIDQyMTk5LCA0MjIwNCwgNDIyMTAsIDQyMjE2LCAKKyAgICA0MjIyMiwgNDIyMjgsIDQyMjM2LCA0MjI0MywgNDIyNTAsIDQyMjU3LCA0MjI2NCwgNDIyNzAsIDQyMjc2LCA0MjI4NSwgCisgICAgNDIyODksIDQyMjk2LCA0MjMwMCwgNDIzMDQsIDQyMzEwLCA0MjMxNiwgNDIzMjIsIDQyMzI4LCA0MjMzMiwgNDIzMzYsIAorICAgIDQyMzM5LCA0MjM0MywgNDIzNDcsIDQyMzU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjM2MSwgNDIzNjQsIDQyMzY4LCA0MjM3MiwgNDIzNzgsIDQyMzg0LCAKKyAgICA0MjM5MCwgNDIzOTgsIDQyNDA1LCA0MjQwOSwgNDI0MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNDIyLCA0MjQyNSwgNDI0MjgsIDQyNDMxLCA0MjQzNCwgNDI0MzcsIDQyNDQwLCAKKyAgICA0MjQ0MywgNDI0NDYsIDQyNDQ5LCA0MjQ1MywgNDI0NTcsIDQyNDYxLCA0MjQ2NSwgNDI0NjksIDQyNDczLCA0MjQ3NywgCisgICAgNDI0ODEsIDQyNDg1LCA0MjQ4OSwgNDI0OTMsIDQyNDk2LCA0MjQ5OSwgNDI1MDIsIDQyNTA1LCA0MjUwOCwgNDI1MTEsIAorICAgIDQyNTE0LCA0MjUxNywgNDI1MjAsIDQyNTI0LCA0MjUyOCwgNDI1MzIsIDQyNTM2LCA0MjU0MCwgNDI1NDQsIDQyNTQ4LCAKKyAgICA0MjU1MiwgNDI1NTYsIDQyNTYwLCA0MjU2NCwgNDI1NzAsIDQyNTc2LCA0MjU4MiwgNDI1ODksIDQyNTk2LCA0MjYwMywgCisgICAgNDI2MTAsIDQyNjE3LCA0MjYyNCwgNDI2MzEsIDQyNjM4LCA0MjY0NSwgNDI2NTIsIDQyNjU5LCA0MjY2NiwgNDI2NzMsIAorICAgIDQyNjgwLCA0MjY4NywgNDI2OTQsIDQyNzAxLCA0MjcwNiwgNDI3MTIsIDQyNzE4LCA0MjcyNCwgNDI3MjksIDQyNzM1LCAKKyAgICA0Mjc0MSwgNDI3NDcsIDQyNzUyLCA0Mjc1OCwgNDI3NjQsIDQyNzY5LCA0Mjc3NCwgNDI3NzksIDQyNzg0LCA0Mjc5MCwgCisgICAgNDI3OTYsIDQyODAxLCA0MjgwNiwgNDI4MTIsIDQyODE3LCA0MjgyMywgNDI4MjksIDQyODM1LCA0Mjg0MSwgNDI4NDcsIAorICAgIDQyODUyLCA0Mjg1OCwgNDI4NjQsIDQyODcwLCA0Mjg3NSwgNDI4ODEsIDQyODg3LCA0Mjg5MywgNDI4OTgsIDQyOTA0LCAKKyAgICA0MjkxMCwgNDI5MTUsIDQyOTIwLCA0MjkyNSwgNDI5MzAsIDQyOTM2LCA0Mjk0MiwgNDI5NDcsIDQyOTUyLCA0Mjk1OCwgCisgICAgNDI5NjMsIDQyOTY5LCA0Mjk3NSwgNDI5ODEsIDQyOTg3LCA0Mjk5MywgNDI5OTgsIDQzMDA0LCA0MzAxMCwgNDMwMTYsIAorICAgIDQzMDIxLCA0MzAyNywgNDMwMzMsIDQzMDM5LCA0MzA0NCwgNDMwNTAsIDQzMDU2LCA0MzA2MSwgNDMwNjYsIDQzMDcxLCAKKyAgICA0MzA3NiwgNDMwODIsIDQzMDg4LCA0MzA5MywgNDMwOTgsIDQzMTA0LCA0MzEwOSwgNDMxMTUsIDQzMTIxLCA0MzEyNywgCisgICAgNDMxMzMsIDQzMTM5LCA0MzE0MywgNDMxNDksIDQzMTU1LCA0MzE2MSwgNDMxNjcsIDQzMTczLCA0MzE3OSwgNDMxODUsIAorICAgIDQzMTkxLCA0MzE5NywgNDMyMDMsIDQzMjA3LCA0MzIxMSwgNDMyMTUsIDQzMjE5LCA0MzIyMywgNDMyMjcsIDQzMjMxLCAKKyAgICA0MzIzNSwgNDMyMzksIDQzMjQ0LCA0MzI1MCwgNDMyNTUsIDQzMjYwLCA0MzI2NSwgNDMyNzAsIDQzMjc5LCA0MzI4OCwgCisgICAgNDMyOTcsIDQzMzA2LCA0MzMxNSwgNDMzMjQsIDQzMzMzLCA0MzM0MiwgNDMzNDksIDQzMzU3LCA0MzM2NSwgNDMzNzIsIAorICAgIDQzMzc5LCA0MzM4NywgNDMzOTUsIDQzNDAyLCA0MzQwOSwgNDM0MTcsIDQzNDI1LCA0MzQzMiwgNDM0MzksIDQzNDQ3LCAKKyAgICA0MzQ1NSwgNDM0NjIsIDQzNDY5LCA0MzQ3NywgNDM0ODYsIDQzNDk1LCA0MzUwMywgNDM1MTIsIDQzNTIxLCA0MzUyOCwgCisgICAgNDM1MzUsIDQzNTQzLCA0MzU1MiwgNDM1NjEsIDQzNTY5LCA0MzU3OCwgNDM1ODcsIDQzNTk0LCA0MzYwMSwgNDM2MTAsIAorICAgIDQzNjE5LCA0MzYyNywgNDM2MzUsIDQzNjQ0LCA0MzY1MywgNDM2NjAsIDQzNjY3LCA0MzY3NiwgNDM2ODUsIDQzNjkzLCAKKyAgICA0MzcwMSwgNDM3MTAsIDQzNzE5LCA0MzcyNiwgNDM3MzMsIDQzNzQyLCA0Mzc1MSwgNDM3NTksIDQzNzY4LCA0Mzc3NywgCisgICAgNDM3ODUsIDQzNzk1LCA0MzgwNSwgNDM4MTUsIDQzODI1LCA0MzgzNCwgNDM4NDMsIDQzODUyLCA0Mzg2MSwgNDM4NjgsIAorICAgIDQzODc2LCA0Mzg4NCwgNDM4OTIsIDQzOTAwLCA0MzkwNSwgNDM5MTAsIDQzOTE5LCA0MzkyNywgNDM5MzQsIDQzOTQzLCAKKyAgICA0Mzk1MSwgNDM5NTgsIDQzOTY3LCA0Mzk3NSwgNDM5ODIsIDQzOTkxLCA0Mzk5OSwgNDQwMDYsIDQ0MDE1LCA0NDAyMywgCisgICAgNDQwMzAsIDQ0MDM5LCA0NDA0NywgNDQwNTQsIDQ0MDYzLCA0NDA3MSwgNDQwNzgsIDQ0MDg3LCA0NDA5NSwgNDQxMDIsIAorICAgIDQ0MTExLCA0NDExOSwgNDQxMjYsIDQ0MTM1LCA0NDE0NCwgNDQxNTMsIDQ0MTYyLCA0NDE3NSwgNDQxODgsIDQ0MTk1LCAKKyAgICA0NDIwMCwgNDQyMDUsIDQ0MjEwLCA0NDIxNSwgNDQyMjAsIDQ0MjI1LCA0NDIzMCwgNDQyMzUsIDQ0MjQzLCA0NDI1MSwgCisgICAgNDQyNTksIDQ0MjY3LCA0NDI3MiwgNDQyNzksIDQ0Mjg2LCA0NDI5MywgNDQyOTgsIDQ0MzA2LCA0NDMxMywgNDQzMjEsIAorICAgIDQ0MzI1LCA0NDMzMiwgNDQzMzgsIDQ0MzQ1LCA0NDM0OSwgNDQzNTUsIDQ0MzYxLCA0NDM2NywgNDQzNzEsIDQ0Mzc0LCAKKyAgICA0NDM3OCwgNDQzODIsIDQ0Mzg5LCA0NDM5NSwgNDQ0MDEsIDQ0NDA3LCA0NDQxMywgNDQ0MjcsIDQ0NDM3LCA0NDQ1MSwgCisgICAgNDQ0NjUsIDQ0NDcxLCA0NDQ4MSwgNDQ0OTUsIDQ0NDk4LCA0NDUwMSwgNDQ1MDgsIDQ0NTE2LCA0NDUyMSwgNDQ1MjYsIAorICAgIDQ0NTM0LCA0NDU0NSwgNDQ1NTYsIDQ0NTY0LCA0NDU2OCwgNDQ1NzIsIDQ0NTc1LCA0NDU3OCwgNDQ1ODIsIDQ0NTg2LCAKKyAgICA0NDU4OSwgNDQ1OTIsIDQ0NTk3LCA0NDYwMiwgNDQ2MDgsIDQ0NjE0LCA0NDYxOSwgNDQ2MjQsIDQ0NjMwLCA0NDYzNiwgCisgICAgNDQ2NDEsIDQ0NjQ2LCA0NDY1MSwgNDQ2NTYsIDQ0NjYyLCA0NDY2OCwgNDQ2NzMsIDQ0Njc4LCA0NDY4NCwgNDQ2OTAsIAorICAgIDQ0Njk1LCA0NDcwMCwgNDQ3MDMsIDQ0NzA2LCA0NDcxNSwgNDQ3MTcsIDQ0NzE5LCA0NDcyMiwgNDQ3MjYsIDQ0NzMyLCAKKyAgICA0NDczNCwgNDQ3MzcsIDQ0NzQ0LCA0NDc1MSwgNDQ3NTksIDQ0NzY3LCA0NDc3NywgNDQ3OTEsIDQ0Nzk2LCA0NDgwMSwgCisgICAgNDQ4MDUsIDQ0ODEwLCA0NDgxOCwgNDQ4MjYsIDQ0ODM1LCA0NDg0NCwgNDQ4NTMsIDQ0ODYyLCA0NDg2NywgNDQ4NzIsIAorICAgIDQ0ODc4LCA0NDg4NCwgNDQ4OTAsIDQ0ODk2LCA0NDg5OSwgNDQ5MDUsIDQ0OTExLCA0NDkyMSwgNDQ5MzEsIDQ0OTM5LCAKKyAgICA0NDk0NywgNDQ5NTYsIDQ0OTY1LCA0NDk2OSwgNDQ5NzcsIDQ0OTg1LCA0NDk5MywgNDUwMDEsIDQ1MDEwLCA0NTAxOSwgCisgICAgNDUwMjgsIDQ1MDM3LCA0NTA0MiwgNDUwNDcsIDQ1MDUyLCA0NTA1NywgNDUwNjIsIDQ1MDY4LCA0NTA3NCwgNDUwNzksIAorICAgIDQ1MDg1LCA0NTA4NywgNDUwODksIDQ1MDkxLCA0NTA5MywgNDUwOTYsIDQ1MDk5LCA0NTEwMSwgNDUxMDMsIDQ1MTA1LCAKKyAgICA0NTEwOSwgNDUxMTMsIDQ1MTE1LCA0NTExNywgNDUxMjAsIDQ1MTIzLCA0NTEyNywgNDUxMzMsIDQ1MTM5LCA0NTE0MSwgCisgICAgNDUxNDgsIDQ1MTUyLCA0NTE1NywgNDUxNjIsIDQ1MTY0LCA0NTE3MywgNDUxNzksIDQ1MTg1LCA0NTE5MSwgNDUxOTcsIAorICAgIDQ1MjAzLCA0NTIwOSwgNDUyMTQsIDQ1MjE3LCA0NTIyMCwgNDUyMjMsIDQ1MjI1LCA0NTIyNywgNDUyMzEsIDQ1MjM1LCAKKyAgICA0NTI0MCwgNDUyNDUsIDQ1MjUwLCA0NTI1MywgNDUyNTcsIDQ1MjYyLCA0NTI2NSwgNDUyNjksIDQ1Mjc0LCA0NTI3OSwgCisgICAgNDUyODQsIDQ1Mjg5LCA0NTI5NCwgNDUyOTksIDQ1MzA0LCA0NTMwOSwgNDUzMTQsIDQ1MzE5LCA0NTMyNCwgNDUzMjksIAorICAgIDQ1MzM1LCA0NTM0MSwgNDUzNDcsIDQ1MzQ5LCA0NTM1MiwgNDUzNTQsIDQ1MzU3LCA0NTM1OSwgNDUzNjEsIDQ1MzYzLCAKKyAgICA0NTM2NSwgNDUzNjcsIDQ1MzY5LCA0NTM3MSwgNDUzNzMsIDQ1Mzc1LCA0NTM3NywgNDUzNzksIDQ1MzgxLCA0NTM4MywgCisgICAgNDUzODUsIDQ1Mzg3LCA0NTM4OSwgNDUzOTEsIDQ1Mzk2LCA0NTQwMSwgNDU0MDYsIDQ1NDExLCA0NTQxNiwgNDU0MjEsIAorICAgIDQ1NDI2LCA0NTQzMSwgNDU0MzYsIDQ1NDQxLCA0NTQ0NiwgNDU0NTEsIDQ1NDU2LCA0NTQ2MSwgNDU0NjYsIDQ1NDcxLCAKKyAgICA0NTQ3NiwgNDU0ODEsIDQ1NDg2LCA0NTQ5MSwgNDU0OTUsIDQ1NDk5LCA0NTUwMywgNDU1MDksIDQ1NTE1LCA0NTUyMCwgCisgICAgNDU1MjUsIDQ1NTMwLCA0NTUzNSwgNDU1NDAsIDQ1NTQ1LCA0NTU1MywgNDU1NjEsIDQ1NTY5LCA0NTU3NywgNDU1ODUsIAorICAgIDQ1NTkzLCA0NTYwMSwgNDU2MDksIDQ1NjE1LCA0NTYyMCwgNDU2MjUsIDQ1NjMwLCA0NTYzMywgNDU2MzcsIDQ1NjQxLCAKKyAgICA0NTY0NSwgNDU2NDksIDQ1NjUzLCA0NTY1NywgNDU2NjQsIDQ1NjcxLCA0NTY3OSwgNDU2ODcsIDQ1NjkyLCA0NTY5NywgCisgICAgNDU3MDQsIDQ1NzExLCA0NTcxOCwgNDU3MjUsIDQ1NzI4LCA0NTczMSwgNDU3MzYsIDQ1NzM4LCA0NTc0MiwgNDU3NDcsIAorICAgIDQ1NzQ5LCA0NTc1MSwgNDU3NTMsIDQ1NzU1LCA0NTc2MCwgNDU3NjMsIDQ1NzY1LCA0NTc3MCwgNDU3NzcsIDQ1Nzg0LCAKKyAgICA0NTc4NywgNDU3OTEsIDQ1Nzk2LCA0NTgwMSwgNDU4MDksIDQ1ODE1LCA0NTgyMCwgNDU4MzEsIDQ1ODM3LCA0NTg0MywgCisgICAgNDU4NDgsIDQ1ODUzLCA0NTg1OSwgNDU4NjIsIDQ1ODY1LCA0NTg3MCwgNDU4NzIsIDQ1ODc2LCA0NTg3OCwgNDU4ODAsIAorICAgIDQ1ODgyLCA0NTg4NCwgNDU4ODYsIDQ1ODg4LCA0NTg5MywgNDU4OTUsIDQ1ODk3LCA0NTg5OSwgNDU5MDEsIDQ1OTA1LCAKKyAgICA0NTkwNywgNDU5MTAsIDQ1OTE1LCA0NTkyMCwgNDU5MjUsIDQ1OTMwLCA0NTkzNiwgNDU5NDIsIDQ1OTQ0LCA0NTk0NywgCisgICAgNDU5NTQsIDQ1OTYwLCA0NTk2NiwgNDU5NzMsIDQ1OTc3LCAwLCA0NTk4MSwgNDU5ODMsIDQ1OTg3LCA0NTk5MywgNDU5OTgsIAorICAgIDQ2MDAwLCA0NjAwNCwgNDYwMTMsIDQ2MDIxLCA0NjAyOSwgNDYwMzUsIDQ2MDQxLCA0NjA0NiwgNDYwNTIsIDQ2MDU3LCAKKyAgICA0NjA2MCwgNDYwNzQsIDQ2MDc3LCA0NjA4MiwgMCwgNDYwODcsIDAsIDAsIDAsIDAsIDQ2MDk2LCA0NjEwMywgNDYxMDcsIAorICAgIDQ2MTA5LCA0NjExMSwgNDYxMTUsIDQ2MTIxLCA0NjEyNiwgNDYxMzIsIDQ2MTM0LCA0NjE0MCwgNDYxNDIsIDQ2MTQ4LCAKKyAgICA0NjE1MCwgNDYxNTIsIDQ2MTU3LCA0NjE1OSwgNDYxNjMsIDQ2MTY4LCA0NjE3MCwgNDYxNzUsIDQ2MTgwLCA0NjE4NCwgCisgICAgNDYxOTEsIDAsIDQ2MjAxLCA0NjIwNywgNDYyMTAsIDQ2MjE2LCAwLCA0NjIxOSwgNDYyMjQsIDQ2MjI4LCA0NjIzMCwgMCwgCisgICAgMCwgNDYyMzIsIDQ2MjM2LCA0NjI0MCwgNDYyNDUsIDQ2MjQ3LCA0NjI1MiwgNDYyNTUsIDQ2MjU4LCA0NjI2MSwgNDYyNjUsIAorICAgIDQ2MjY5LCA0NjI3NCwgNDYyNzgsIDQ2MjgzLCA0NjI4OCwgNDYyOTIsIDQ2Mjk4LCA0NjMwNSwgNDYzMDgsIDQ2MzE0LCAKKyAgICA0NjMxOSwgNDYzMjMsIDQ2MzI4LCA0NjMzNCwgNDYzNDAsIDQ2MzQ3LCA0NjM1MywgNDYzNjAsIDAsIDQ2MzY3LCA0NjM3NCwgCisgICAgNDYzNzgsIDQ2Mzg1LCA0NjM5MSwgNDYzOTYsIDQ2NDAyLCA0NjQwNiwgNDY0MTEsIDQ2NDE0LCA0NjQyMCwgNDY0MjYsIAorICAgIDQ2NDMzLCA0NjQ0MSwgNDY0NDgsIDQ2NDU3LCA0NjQ2NywgNDY0NzQsIDQ2NDgwLCA0NjQ4NCwgNDY0OTIsIDQ2NDk3LCAKKyAgICA0NjUwNiwgNDY1MDksIDQ2NTEyLCA0NjUyMSwgNDY1MzIsIDQ2NTM5LCA0NjU0MSwgNDY1NDcsIDQ2NTUyLCA0NjU1NCwgCisgICAgNDY1NTcsIDQ2NTYxLCA0NjU2OSwgMCwgNDY1NzgsIDAsIDQ2NTgzLCA0NjU5MSwgNDY1OTksIDQ2NjA3LCAwLCAwLCAwLCAKKyAgICA0NjYxNSwgNDY2MjMsIDQ2NjI4LCA0NjYzMSwgNDY2MzUsIDQ2NjM4LCA0NjY0OSwgNDY2NTksIDQ2NjY5LCAwLCAwLCAKKyAgICA0NjY3OCwgNDY2ODcsIDQ2NjkzLCA0NjcwMSwgNDY3MDUsIDQ2NzEzLCA0NjcxNywgNDY3MjUsIDQ2NzMyLCA0NjczOSwgCisgICAgNDY3NDgsIDQ2NzU3LCA0Njc2NywgNDY3NzcsIDQ2Nzg3LCA0Njc5NywgNDY4MDYsIDQ2ODE1LCA0NjgyNSwgNDY4MzUsIAorICAgIDQ2ODQ0LCA0Njg1MywgNDY4NjAsIDQ2ODY3LCA0Njg3NCwgNDY4ODEsIDQ2ODg4LCA0Njg5NSwgNDY5MDIsIDQ2OTA5LCAKKyAgICA0NjkxNiwgNDY5MjQsIDQ2OTMwLCA0NjkzNiwgNDY5NDIsIDQ2OTQ4LCA0Njk1NCwgNDY5NjAsIDQ2OTY2LCA0Njk3MiwgCisgICAgNDY5NzgsIDQ2OTg1LCA0Njk5MywgNDcwMDEsIDQ3MDA5LCA0NzAxNywgNDcwMjUsIDQ3MDMzLCA0NzA0MSwgNDcwNDksIAorICAgIDQ3MDU3LCA0NzA2NiwgMCwgMCwgMCwgNDcwNzEsIDQ3MDc3LCA0NzA4MCwgNDcwODYsIDQ3MDkyLCA0NzA5NywgNDcxMDEsIAorICAgIDQ3MTA2LCA0NzExMiwgNDcxMTksIDQ3MTIyLCA0NzEyOSwgNDcxMzYsIDQ3MTQwLCA0NzE0OSwgNDcxNTgsIDQ3MTYzLCAKKyAgICA0NzE2OSwgNDcxNzQsIDQ3MTc5LCA0NzE4NiwgNDcxOTMsIDQ3MjAxLCA0NzIwOSwgMCwgNDcyMTgsIDQ3MjI3LCA0NzIzMiwgCisgICAgNDcyMzYsIDQ3MjQzLCA0NzI0NywgNDcyNTQsIDQ3MjYyLCA0NzI2NywgNDcyNzUsIDQ3Mjc5LCA0NzI4NCwgNDcyODgsIAorICAgIDQ3MjkzLCAwLCA0NzI5NywgNDczMDIsIDQ3MzExLCA0NzMxMywgNDczMTcsIDQ3MzIxLCA0NzMyOCwgNDczMzUsIDQ3MzQwLCAKKyAgICA0NzM0OCwgNDczNTQsIDAsIDQ3MzYwLCAwLCAwLCAwLCA0NzM2MywgNDczNzEsIDQ3Mzc1LCA0NzM4MiwgNDczOTAsIAorICAgIDQ3Mzk4LCA0NzQwMywgNDc0MDgsIDQ3NDE0LCA0NzQxOSwgNDc0MjQsIDQ3NDMwLCA0NzQzNSwgNDc0MzgsIDQ3NDQyLCAKKyAgICA0NzQ0NiwgNDc0NTMsIDQ3NDYyLCA0NzQ2NywgNDc0NzYsIDQ3NDg1LCA0NzQ5MSwgNDc0OTcsIDQ3NTAyLCA0NzUwNywgCisgICAgNDc1MTIsIDQ3NTE3LCA0NzUyMywgNDc1MjksIDQ3NTM3LCA0NzU0NSwgNDc1NTEsIDQ3NTU3LCA0NzU2MiwgNDc1NjcsIAorICAgIDQ3NTc0LCA0NzU4MSwgNDc1ODcsIDQ3NTkwLCA0NzU5MywgNDc1OTcsIDQ3NjAxLCA0NzYwNSwgNDc2MTAsIDQ3NjE2LCAKKyAgICA0NzYyMiwgNDc2MjksIDQ3NjM2LCA0NzY0MSwgNDc2NDUsIDQ3NjQ5LCA0NzY1MywgNDc2NTcsIDQ3NjYxLCA0NzY2NSwgCisgICAgNDc2NjksIDQ3NjczLCA0NzY3NywgNDc2ODEsIDQ3Njg1LCA0NzY4OSwgNDc2OTMsIDQ3Njk3LCA0NzcwMSwgNDc3MDUsIAorICAgIDQ3NzA5LCA0NzcxMywgNDc3MTcsIDQ3NzIxLCA0NzcyNSwgNDc3MjksIDQ3NzMzLCA0NzczNywgNDc3NDEsIDQ3NzQ1LCAKKyAgICA0Nzc0OSwgNDc3NTMsIDQ3NzU3LCA0Nzc2MSwgNDc3NjUsIDQ3NzY5LCA0Nzc3MywgNDc3NzcsIDQ3NzgxLCA0Nzc4NSwgCisgICAgNDc3ODksIDQ3NzkzLCA0Nzc5NywgNDc4MDEsIDQ3ODA1LCA0NzgwOSwgNDc4MTMsIDQ3ODE3LCA0NzgyMSwgNDc4MjUsIAorICAgIDQ3ODI5LCA0NzgzMywgNDc4MzcsIDQ3ODQxLCA0Nzg0NSwgNDc4NDksIDQ3ODUzLCA0Nzg1NywgNDc4NjEsIDQ3ODY1LCAKKyAgICA0Nzg2OSwgNDc4NzMsIDQ3ODc3LCA0Nzg4MSwgNDc4ODUsIDQ3ODg5LCA0Nzg5MywgNDc4OTcsIDQ3OTAxLCA0NzkwNSwgCisgICAgNDc5MDksIDQ3OTEzLCA0NzkxNywgNDc5MjEsIDQ3OTI1LCA0NzkyOSwgNDc5MzMsIDQ3OTM3LCA0Nzk0MSwgNDc5NDUsIAorICAgIDQ3OTQ5LCA0Nzk1MywgNDc5NTcsIDQ3OTYxLCA0Nzk2NSwgNDc5NjksIDQ3OTczLCA0Nzk3NywgNDc5ODEsIDQ3OTg1LCAKKyAgICA0Nzk4OSwgNDc5OTMsIDQ3OTk3LCA0ODAwMSwgNDgwMDUsIDQ4MDA5LCA0ODAxMywgNDgwMTcsIDQ4MDIxLCA0ODAyNSwgCisgICAgNDgwMjksIDQ4MDMzLCA0ODAzNywgNDgwNDEsIDQ4MDQ1LCA0ODA0OSwgNDgwNTMsIDQ4MDU3LCA0ODA2MSwgNDgwNjUsIAorICAgIDQ4MDY5LCA0ODA3MywgNDgwNzcsIDQ4MDgxLCA0ODA4NSwgNDgwODksIDQ4MDkzLCA0ODA5NywgNDgxMDEsIDQ4MTA1LCAKKyAgICA0ODEwOSwgNDgxMTMsIDQ4MTE3LCA0ODEyMSwgNDgxMjUsIDQ4MTI5LCA0ODEzMywgNDgxMzcsIDQ4MTQxLCA0ODE0NSwgCisgICAgNDgxNDksIDQ4MTUzLCA0ODE1NywgNDgxNjEsIDQ4MTY1LCA0ODE2OSwgNDgxNzMsIDQ4MTc3LCA0ODE4MSwgNDgxODUsIAorICAgIDQ4MTg5LCA0ODE5MywgNDgxOTcsIDQ4MjAxLCA0ODIwNSwgNDgyMDksIDQ4MjEzLCA0ODIxNywgNDgyMjEsIDQ4MjI1LCAKKyAgICA0ODIyOSwgNDgyMzMsIDQ4MjM3LCA0ODI0MSwgNDgyNDUsIDQ4MjQ5LCA0ODI1MywgNDgyNTcsIDQ4MjYxLCA0ODI2NSwgCisgICAgNDgyNjksIDQ4MjczLCA0ODI3NywgNDgyODEsIDQ4Mjg1LCA0ODI4OSwgNDgyOTMsIDQ4Mjk3LCA0ODMwMSwgNDgzMDUsIAorICAgIDQ4MzA5LCA0ODMxMywgNDgzMTcsIDQ4MzIxLCA0ODMyNSwgNDgzMjksIDQ4MzMzLCA0ODMzNywgNDgzNDEsIDQ4MzQ1LCAKKyAgICA0ODM0OSwgNDgzNTMsIDQ4MzU3LCA0ODM2MSwgNDgzNjUsIDQ4MzY5LCA0ODM3MywgNDgzNzcsIDQ4MzgxLCA0ODM4NSwgCisgICAgNDgzODksIDQ4MzkzLCA0ODM5NywgNDg0MDEsIDQ4NDA1LCA0ODQwOSwgNDg0MTMsIDQ4NDE3LCA0ODQyMSwgNDg0MjUsIAorICAgIDQ4NDI5LCA0ODQzMywgNDg0MzcsIDQ4NDQxLCA0ODQ0NSwgNDg0NDksIDQ4NDUzLCA0ODQ1NywgNDg0NjEsIDQ4NDY1LCAKKyAgICA0ODQ2OSwgNDg0NzMsIDQ4NDc3LCA0ODQ4MSwgNDg0ODUsIDQ4NDg5LCA0ODQ5MywgNDg0OTcsIDQ4NTAxLCA0ODUwNSwgCisgICAgNDg1MDksIDQ4NTEzLCA0ODUxNywgNDg1MjEsIDQ4NTI1LCA0ODUyOSwgNDg1MzMsIDQ4NTM3LCA0ODU0MSwgNDg1NDUsIAorICAgIDQ4NTQ5LCA0ODU1MywgNDg1NTcsIDQ4NTYxLCA0ODU2NSwgNDg1NjksIDQ4NTczLCA0ODU3NywgNDg1ODEsIDQ4NTg1LCAKKyAgICA0ODU4OSwgNDg1OTMsIDQ4NTk3LCA0ODYwMSwgNDg2MDUsIDQ4NjA5LCA0ODYxMywgNDg2MTcsIDQ4NjIxLCA0ODYyNSwgCisgICAgNDg2MjksIDQ4NjMzLCA0ODYzNywgNDg2NDEsIDQ4NjQ1LCA0ODY0OSwgNDg2NTMsIDQ4NjU3LCA0ODY2MSwgNDg2NjUsIAorICAgIDQ4NjcyLCA0ODY4MCwgNDg2ODYsIDQ4NjkyLCA0ODY5OSwgNDg3MDYsIDQ4NzEyLCA0ODcxOCwgNDg3MjQsIDQ4NzMwLCAKKyAgICA0ODczNSwgNDg3NDAsIDQ4NzQ1LCA0ODc1MCwgNDg3NTYsIDQ4NzYyLCA0ODc3MCwgNDg3NzcsIDQ4NzgyLCA0ODc4NywgCisgICAgNDg3OTUsIDQ4ODA0LCA0ODgxMSwgNDg4MjEsIDQ4ODMyLCA0ODgzNSwgNDg4MzgsIDQ4ODQyLCA0ODg0NiwgNDg4NTIsIAorICAgIDQ4ODU4LCA0ODg2OCwgNDg4NzgsIDQ4ODg4LCA0ODg5OCwgNDg5MDUsIDQ4OTEyLCA0ODkxOSwgNDg5MjYsIDQ4OTM3LCAKKyAgICA0ODk0OCwgNDg5NTksIDQ4OTcwLCA0ODk4MCwgNDg5OTAsIDQ5MDAyLCA0OTAxNCwgNDkwMjUsIDQ5MDM2LCA0OTA0OCwgCisgICAgNDkwNjAsIDQ5MDY5LCA0OTA3OSwgNDkwODksIDQ5MTAwLCA0OTExMSwgNDkxMTgsIDQ5MTI1LCA0OTEzMiwgNDkxMzksIAorICAgIDQ5MTQ5LCA0OTE1OSwgNDkxNjcsIDQ5MTc1LCA0OTE4MiwgNDkxODksIDQ5MTk2LCA0OTIwMywgNDkyMTAsIDQ5MjE1LCAKKyAgICA0OTIyMCwgNDkyMjYsIDQ5MjM0LCA0OTI0NCwgNDkyNTIsIDQ5MjYwLCA0OTI2OCwgNDkyNzYsIDQ5Mjg0LCA0OTI5MiwgCisgICAgNDkzMDAsIDQ5MzA4LCA0OTMxNiwgNDkzMjQsIDQ5MzMzLCA0OTM0MiwgNDkzNTAsIDQ5MzU4LCA0OTM2NywgNDkzNzYsIAorICAgIDQ5Mzg1LCA0OTM5NCwgNDk0MDQsIDQ5NDE0LCA0OTQyMywgNDk0MzIsIDQ5NDQyLCA0OTQ1MiwgNDk0NjYsIDQ5NDgzLCAKKyAgICA0OTQ5NywgNDk1MTQsIDQ5NTI4LCA0OTU0MiwgNDk1NTYsIDQ5NTcwLCA0OTU4MCwgNDk1OTEsIDQ5NjAxLCA0OTYxMiwgCisgICAgNDk2MjksIDQ5NjQ2LCA0OTY1NCwgNDk2NjAsIDQ5NjY3LCA0OTY3NCwgNDk2ODEsIDQ5Njg4LCA0OTY5MywgNDk2OTksIAorICAgIDQ5NzA0LCA0OTcwOSwgNDk3MTUsIDQ5NzIwLCA0OTcyNSwgNDk3MzAsIDQ5NzM1LCA0OTc0MCwgNDk3NDcsIDQ5NzUyLCAKKyAgICA0OTc1OSwgNDk3NjQsIDQ5NzY5LCA0OTc3MywgNDk3NzcsIDQ5Nzg0LCA0OTc5MSwgNDk3OTgsIDQ5ODA1LCA0OTgxMiwgCisgICAgNDk4MTksIDQ5ODMyLCA0OTg0NSwgNDk4NTgsIDQ5ODcxLCA0OTg3OSwgNDk4ODcsIDQ5ODkzLCA0OTg5OSwgNDk5MDYsIAorICAgIDQ5OTEzLCA0OTkyMCwgNDk5MjcsIDQ5OTMxLCA0OTkzNiwgNDk5NDQsIDQ5OTUyLCA0OTk2MCwgNDk5NjcsIDQ5OTcxLCAKKyAgICA0OTk3OSwgNDk5ODcsIDQ5OTkwLCA0OTk5MywgNDk5OTgsIDUwMDA0LCA1MDAxMiwgNTAwMjAsIDUwMDQwLCA1MDA2MCwgCisgICAgNTAwODAsIDUwMTAwLCA1MDEyMCwgNTAxNDAsIDUwMTYwLCA1MDE4MCwgNTAxODUsIDUwMTkyLCA1MDIwMSwgNTAyMDksIAorICAgIDUwMjE3LCA1MDIyMiwgNTAyMjUsIDUwMjI4LCA1MDIzMywgNTAyMzYsIDUwMjU1LCA1MDI2MiwgNTAyNjgsIDUwMjc0LCAKKyAgICA1MDI3OCwgNTAyODEsIDUwMjg0LCA1MDI4NywgNTAyOTgsIDUwMzEwLCA1MDMxNywgNTAzMjQsIDUwMzI3LCA1MDMzMSwgCisgICAgNTAzMzQsIDUwMzM5LCA1MDM0NCwgNTAzNDksIDUwMzU1LCA1MDM2NCwgNTAzNzEsIDUwMzc4LCA1MDM4NiwgNTAzOTMsIAorICAgIDUwNDAwLCA1MDQwMywgNTA0MDksIDUwNDE1LCA1MDQxOCwgNTA0MjEsIDUwNDI2LCA1MDQzMSwgNTA0MzcsIDUwNDQzLCAKKyAgICA1MDQ0NywgNTA0NTIsIDUwNDU5LCA1MDQ2MywgNTA0NjksIDUwNDczLCA1MDQ3NywgNTA0ODUsIDUwNDk3LCA1MDUwNSwgCisgICAgNTA1MDksIDUwNTExLCA1MDUyMCwgNTA1MjksIDUwNTM1LCA1MDUzOCwgNTA1NDQsIDUwNTUwLCA1MDU1NSwgNTA1NjAsIAorICAgIDUwNTY1LCA1MDU3MCwgNTA1NzUsIDUwNTgwLCA1MDU4MiwgNTA1ODgsIDUwNTkzLCA1MDYwMCwgNTA2MDQsIDUwNjEwLCAKKyAgICA1MDYxMywgNTA2MTcsIDUwNjI0LCA1MDYzMSwgNTA2MzMsIDUwNjM1LCA1MDY0MSwgNTA2NDcsIDUwNjUzLCA1MDY2MiwgCisgICAgNTA2NzEsIDUwNjc4LCA1MDY4NSwgNTA2OTEsIDUwNjk3LCA1MDcwMiwgNTA3MDcsIDUwNzEyLCA1MDcxOCwgNTA3MjQsIAorICAgIDUwNzI5LCA1MDczNiwgNTA3NDAsIDUwNzQ0LCA1MDc1NywgNTA3NzAsIDUwNzgxLCA1MDc5MCwgNTA3OTYsIDUwODAzLCAKKyAgICA1MDgwOCwgNTA4MTMsIDUwODE4LCA1MDgyMywgNTA4MjgsIDUwODMwLCA1MDgzNywgNTA4NDQsIDUwODUxLCA1MDg1OCwgCisgICAgNTA4NjUsIDUwODczLCA1MDg3OSwgNTA4ODQsIDUwODkwLCA1MDg5NiwgNTA5MDIsIDUwOTA5LCA1MDkxNSwgNTA5MjMsIAorICAgIDUwOTMxLCA1MDkzOSwgNTA5NDcsIDUwOTU0LCA1MDk2MCwgNTA5NjYsIDUwOTc1LCA1MDk3OSwgNTA5ODgsIDUwOTk3LCAKKyAgICA1MTAwNiwgNTEwMTQsIDUxMDE4LCA1MTAyNCwgNTEwMzEsIDUxMDM4LCA1MTA0MiwgNTEwNDgsIDUxMDU1LCA1MTA2MCwgCisgICAgNTEwNjUsIDUxMDcxLCA1MTA3NiwgNTEwODEsIDUxMDg4LCA1MTA5NSwgNTExMDAsIDUxMTA1LCA1MTExMywgNTExMjEsIAorICAgIDUxMTMxLCA1MTE0MSwgNTExNDgsIDUxMTU1LCA1MTE1OSwgNTExNjMsIDUxMTc1LCA1MTE4MSwgNTExODcsIDUxMTkyLCAKKyAgICA1MTE5NywgNTEyMDQsIDUxMjExLCA1MTIxNywgNTEyMjMsIDUxMjMyLCA1MTI0MCwgNTEyNDgsIDUxMjU1LCA1MTI2MiwgCisgICAgNTEyNjksIDUxMjc1LCA1MTI4MiwgNTEyODgsIDUxMjk1LCA1MTMwMiwgNTEzMDksIDUxMzE2LCA1MTMyMiwgNTEzMjcsIAorICAgIDUxMzM2LCA1MTM0NiwgNTEzNTMsIDUxMzYyLCA1MTM2OCwgNTEzNzMsIDUxMzc4LCA1MTM4NywgNTEzOTMsIDUxMzk5LCAKKyAgICA1MTQwNSwgNTE0MTMsIDUxNDE4LCA1MTQyNSwgNTE0MzIsIDUxNDQzLCA1MTQ1MCwgNTE0NTcsIDUxNDY0LCA1MTQ3MSwgCisgICAgNTE0NzgsIDUxNDg1LCA1MTQ5MiwgNTE1MDMsIDUxNTE0LCA1MTUyNCwgNTE1MzQsIDUxNTQ2LCA1MTU1OCwgNTE1NjMsIAorICAgIDUxNTY4LCA1MTU3NiwgNTE1ODQsIDUxNTkwLCA1MTU5NiwgNTE2MDUsIDUxNjE0LCA1MTYyMiwgNTE2MzAsIDUxNjM4LCAKKyAgICA1MTY0NiwgNTE2NTYsIDUxNjY2LCA1MTY4MCwgNTE2OTQsIDUxNzAxLCA1MTcwOCwgNTE3MTksIDUxNzMwLCA1MTczNywgCisgICAgNTE3NDQsIDUxNzUzLCA1MTc2MiwgNTE3NjcsIDUxNzcyLCA1MTc4MSwgNTE3OTAsIDUxNzk1LCA1MTgwMCwgNTE4MDgsIAorICAgIDUxODE0LCA1MTgyMCwgNTE4MjgsIDUxODM2LCA1MTg0OSwgNTE4NjIsIDUxODY2LCA1MTg3MCwgNTE4NzcsIDUxODg0LCAKKyAgICA1MTg5MSwgNTE4OTksIDUxOTA3LCA1MTkxNSwgNTE5MjMsIDUxOTI5LCA1MTkzNSwgNTE5NDEsIDUxOTQ3LCA1MTk1NCwgCisgICAgNTE5NjEsIDUxOTY5LCA1MTk3NywgNTE5ODAsIDUxOTgzLCA1MTk4OCwgNTE5OTMsIDUxOTk5LCA1MjAwNSwgNTIwMTIsIAorICAgIDUyMDE5LCA1MjAyOCwgNTIwMzcsIDUyMDQ0LCA1MjA1MSwgNTIwNTksIDUyMDY3LCA1MjA3NSwgNTIwODMsIDUyMDkwLCAKKyAgICA1MjA5NywgNTIxMDQsIDUyMTExLCA1MjExNSwgNTIxMTksIDUyMTI2LCA1MjEzMywgNTIxMzgsIDUyMTQzLCA1MjE0OCwgCisgICAgNTIxNTMsIDUyMTU5LCA1MjE3MywgNTIxODAsIDUyMTg3LCA1MjE5MSwgNTIxOTMsIDUyMTk1LCA1MjIwMCwgNTIyMDUsIAorICAgIDUyMjEwLCA1MjIxNCwgNTIyMjIsIDUyMjI5LCA1MjIzNiwgNTIyNDQsIDUyMjU2LCA1MjI2NCwgNTIyNzIsIDUyMjgzLCAKKyAgICA1MjI4NywgNTIyOTEsIDUyMjk1LCA1MjMwMCwgNTIzMTEsIDUyMzE4LCA1MjMyNSwgNTIzMzIsIDUyMzM3LCA1MjM0NCwgCisgICAgNTIzNTMsIDUyMzYxLCA1MjM2NywgNTIzNzMsIDUyMzc5LCA1MjM4OCwgNTIzOTcsIDUyNDA1LCA1MjQxNCwgNTI0MTksIAorICAgIDUyNDIyLCA1MjQyNywgNTI0MzMsIDUyNDM5LCA1MjQ0NSwgNTI0NTEsIDUyNDU1LCA1MjQ1OCwgNTI0NjIsIDUyNDY2LCAKKyAgICA1MjQ3MiwgNTI0NzgsIDUyNDg0LCA1MjQ5MCwgNTI0OTQsIDUyNDk4LCA1MjUwNSwgNTI1MTIsIDUyNTE5LCA1MjUyNiwgCisgICAgNTI1MzMsIDUyNTQwLCA1MjU1MCwgNTI1NjAsIDUyNTY3LCA1MjU3NCwgNTI1ODIsIDUyNTkwLCA1MjU5NCwgNTI1OTksIAorICAgIDUyNjA0LCA1MjYxMCwgNTI2MTYsIDUyNjE5LCA1MjYyMiwgNTI2MjUsIDUyNjI4LCA1MjYzMiwgNTI2MzcsIDUyNjQyLCAKKyAgICA1MjY0NywgNTI2NTIsIDUyNjU3LCA1MjY2MSwgNTI2NjUsIDUyNjY5LCA1MjY3MywgNTI2NzcsIDUyNjgxLCA1MjY4NSwgCisgICAgNTI2OTEsIDUyNjk1LCA1MjcwMSwgNTI3MDYsIDUyNzEzLCA1MjcyMSwgNTI3MjgsIDUyNzM2LCA1Mjc0MywgNTI3NTEsIAorICAgIDUyNzYwLCA1Mjc2NywgNTI3NzcsIDUyNzg4LCA1Mjc5NCwgNTI4MDMsIDUyODA5LCA1MjgxOCwgNTI4MjcsIDUyODMzLCAKKyAgICA1MjgzOSwgNTI4NDMsIDUyODQ3LCA1Mjg1NiwgNTI4NjUsIDUyODcyLCA1Mjg3OSwgNTI4ODgsIDAsIDAsIDAsIDUyODk3LCAKKyAgICA1MjkwMiwgNTI5MDYsIDUyOTEwLCA1MjkxNSwgNTI5MjAsIDUyOTI1LCA1MjkzMywgNTI5NDEsIDUyOTQ0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Mjk0OCwgNTI5NTMsIDUyOTU4LCA1Mjk2MywgNTI5NjgsIAorICAgIDUyOTczLCA1Mjk3OCwgNTI5ODMsIDUyOTg4LCA1Mjk5MywgNTI5OTgsIDUzMDA0LCA1MzAwOCwgNTMwMTMsIDUzMDE4LCAKKyAgICA1MzAyMywgNTMwMjgsIDUzMDMzLCA1MzAzOCwgNTMwNDMsIDUzMDQ4LCA1MzA1MywgNTMwNTgsIDUzMDYzLCA1MzA2OCwgCisgICAgNTMwNzMsIDUzMDc4LCA1MzA4MywgNTMwODgsIDUzMDkzLCA1MzA5OCwgNTMxMDMsIDUzMTA4LCA1MzExMywgNTMxMTgsIAorICAgIDUzMTI0LCA1MzEyOSwgNTMxMzUsIDUzMTQ0LCA1MzE0OSwgNTMxNTcsIDUzMTY0LCA1MzE3MywgNTMxNzgsIDUzMTgzLCAKKyAgICA1MzE4OCwgNTMxOTQsIDAsIDUzMjAxLCA1MzIwNiwgNTMyMTEsIDUzMjE2LCA1MzIyMSwgNTMyMjYsIDUzMjMxLCA1MzIzNiwgCisgICAgNTMyNDEsIDUzMjQ2LCA1MzI1MSwgNTMyNTcsIDUzMjYxLCA1MzI2NiwgNTMyNzEsIDUzMjc2LCA1MzI4MSwgNTMyODYsIAorICAgIDUzMjkxLCA1MzI5NiwgNTMzMDEsIDUzMzA2LCA1MzMxMSwgNTMzMTYsIDUzMzIxLCA1MzMyNiwgNTMzMzEsIDUzMzM2LCAKKyAgICA1MzM0MSwgNTMzNDYsIDUzMzUxLCA1MzM1NiwgNTMzNjEsIDUzMzY2LCA1MzM3MSwgNTMzNzcsIDUzMzgyLCA1MzM4OCwgCisgICAgNTMzOTcsIDUzNDAyLCA1MzQxMCwgNTM0MTcsIDUzNDI2LCA1MzQzMSwgNTM0MzYsIDUzNDQxLCA1MzQ0NywgMCwgNTM0NTQsIAorICAgIDUzNDYyLCA1MzQ3MCwgNTM0ODAsIDUzNDg3LCA1MzQ5NSwgNTM1MDEsIDUzNTEwLCA1MzUxOCwgNTM1MjYsIDUzNTM0LCAKKyAgICA1MzU0MiwgNTM1NTAsIDUzNTU4LCA1MzU2MywgNTM1NzAsIDUzNTc1LCA1MzU4MSwgNTM1ODksIDUzNTk2LCA1MzYwMywgCisgICAgNTM2MTEsIDUzNjE3LCA1MzYyMywgNTM2MzAsIDUzNjM3LCA1MzY0NiwgNTM2NTYsIDUzNjYyLCA1MzY2OSwgNTM2NzQsIAorICAgIDUzNjg0LCA1MzY5NCwgNTM2OTksIDUzNzA0LCA1MzcwOSwgNTM3MTQsIDUzNzE5LCA1MzcyNCwgNTM3MjksIDUzNzM0LCAKKyAgICA1MzczOSwgNTM3NDQsIDUzNzQ5LCA1Mzc1NCwgNTM3NTksIDUzNzY0LCA1Mzc2OSwgNTM3NzQsIDUzNzc5LCA1Mzc4NCwgCisgICAgNTM3ODksIDUzNzk0LCA1Mzc5OSwgNTM4MDQsIDUzODA5LCA1MzgxNCwgNTM4MTksIDUzODI0LCA1MzgyOSwgNTM4MzQsIAorICAgIDUzODM5LCA1Mzg0NCwgNTM4NDgsIDUzODUyLCA1Mzg1NywgNTM4NjIsIDUzODY3LCA1Mzg3MiwgNTM4NzcsIDUzODgyLCAKKyAgICA1Mzg4NywgNTM4OTIsIDUzODk3LCA1MzkwMiwgNTM5MDcsIDUzOTEyLCA1MzkxNywgNTM5MjIsIDUzOTI3LCA1MzkzMiwgCisgICAgNTM5MzcsIDUzOTQyLCA1Mzk0OSwgNTM5NTYsIDUzOTYzLCA1Mzk3MCwgNTM5NzcsIDUzOTg0LCA1Mzk5MSwgNTM5OTgsIAorICAgIDU0MDA1LCA1NDAxMiwgNTQwMTksIDU0MDI2LCA1NDAzMywgNTQwNDAsIDU0MDQ1LCA1NDA1MCwgNTQwNTcsIDU0MDY0LCAKKyAgICA1NDA3MSwgNTQwNzgsIDU0MDg1LCA1NDA5MiwgNTQwOTksIDU0MTA2LCA1NDExMywgNTQxMjAsIDU0MTI3LCA1NDEzNCwgCisgICAgNTQxNDAsIDU0MTQ2LCA1NDE1MiwgNTQxNTgsIDU0MTY1LCA1NDE3MiwgNTQxNzksIDU0MTg2LCA1NDE5MywgNTQyMDAsIAorICAgIDU0MjA3LCA1NDIxNCwgNTQyMjEsIDU0MjI4LCA1NDIzNiwgNTQyNDQsIDU0MjUyLCA1NDI2MCwgNTQyNjgsIDU0Mjc2LCAKKyAgICA1NDI4NCwgNTQyOTIsIDU0Mjk2LCA1NDMwMiwgNTQzMDgsIDU0MzEyLCA1NDMxOCwgNTQzMjQsIDU0MzMwLCA1NDMzNywgCisgICAgNTQzNDQsIDU0MzUxLCA1NDM1OCwgNTQzNjMsIDU0MzY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDM3NSwgNTQzODMsIAorICAgIDU0MzkyLCA1NDQwMSwgNTQ0MDksIDU0NDE1LCA1NDQyMCwgNTQ0MjUsIDU0NDMwLCA1NDQzNSwgNTQ0NDAsIDU0NDQ1LCAKKyAgICA1NDQ1MCwgNTQ0NTUsIDU0NDYwLCA1NDQ2NSwgNTQ0NzAsIDU0NDc1LCA1NDQ4MCwgNTQ0ODUsIDU0NDkwLCA1NDQ5NSwgCisgICAgNTQ1MDAsIDU0NTA1LCA1NDUxMCwgNTQ1MTUsIDU0NTIwLCA1NDUyNSwgNTQ1MzAsIDU0NTM1LCA1NDU0MCwgNTQ1NDUsIAorICAgIDU0NTUwLCA1NDU1NSwgNTQ1NjAsIDU0NTY1LCA1NDU3MCwgNTQ1NzUsIDU0NTgwLCA1NDU4NSwgNTQ1OTAsIDU0NTk1LCAKKyAgICA1NDYwMCwgNTQ2MDUsIDU0NjEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDYxNSwgNTQ2MTksIDU0NjI0LCAKKyAgICA1NDYyOSwgNTQ2MzQsIDU0NjM5LCA1NDY0OCwgNTQ2NTMsIDU0NjU4LCA1NDY2MywgNTQ2NjgsIDU0NjczLCA1NDY3OCwgCisgICAgNTQ2ODMsIDU0Njg4LCA1NDY5NSwgNTQ3MDAsIDU0NzA1LCA1NDcxNCwgNTQ3MjEsIDU0NzI2LCA1NDczMSwgNTQ3MzYsIAorICAgIDU0NzQzLCA1NDc0OCwgNTQ3NTUsIDU0NzYwLCA1NDc2NSwgNTQ3NzIsIDU0Nzc5LCA1NDc4NCwgNTQ3ODksIDU0Nzk0LCAKKyAgICA1NDgwMSwgNTQ4MDgsIDU0ODEzLCA1NDgxOCwgNTQ4MjMsIDU0ODI4LCA1NDgzMywgNTQ4NDAsIDU0ODQ3LCA1NDg1MiwgCisgICAgNTQ4NTcsIDU0ODYyLCA1NDg2NywgNTQ4NzIsIDU0ODc3LCA1NDg4MiwgNTQ4ODcsIDU0ODkyLCA1NDg5NywgNTQ5MDIsIAorICAgIDU0OTA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDkxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNTQ5MjEsIDU0OTI1LCA1NDkyOSwgNTQ5MzMsIDU0OTM3LCA1NDk0MSwgNTQ5NDUsIDU0OTQ5LCAKKyAgICA1NDk1MywgNTQ5NTcsIDU0OTYxLCA1NDk2NywgNTQ5NzEsIDU0OTc1LCA1NDk3OSwgNTQ5ODMsIDU0OTg3LCA1NDk5MSwgCisgICAgNTQ5OTUsIDU0OTk5LCA1NTAwMywgNTUwMDcsIDU1MDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NTAxNSwgCisgICAgNTUwMTksIDU1MDIzLCA1NTAyNywgNTUwMzEsIDU1MDM1LCA1NTAzOSwgMCwgNTUwNDMsIDU1MDQ3LCA1NTA1MSwgNTUwNTUsIAorICAgIDU1MDU5LCA1NTA2MywgNTUwNjcsIDAsIDU1MDcxLCA1NTA3NSwgNTUwNzksIDU1MDgzLCA1NTA4NywgNTUwOTEsIDU1MDk1LCAKKyAgICAwLCA1NTA5OSwgNTUxMDMsIDU1MTA3LCA1NTExMSwgNTUxMTUsIDU1MTE5LCA1NTEyMywgMCwgNTUxMjcsIDU1MTMxLCAKKyAgICA1NTEzNSwgNTUxMzksIDU1MTQzLCA1NTE0NywgNTUxNTEsIDAsIDU1MTU1LCA1NTE1OSwgNTUxNjMsIDU1MTY3LCA1NTE3MSwgCisgICAgNTUxNzUsIDU1MTc5LCAwLCA1NTE4MywgNTUxODcsIDU1MTkxLCA1NTE5NSwgNTUxOTksIDU1MjAzLCA1NTIwNywgMCwgCisgICAgNTUyMTEsIDU1MjE1LCA1NTIxOSwgNTUyMjMsIDU1MjI3LCA1NTIzMSwgNTUyMzUsIDAsIDU1MjM5LCA1NTI0NCwgNTUyNDksIAorICAgIDU1MjU0LCA1NTI1OSwgNTUyNjQsIDU1MjY5LCA1NTI3MywgNTUyNzgsIDU1MjgzLCA1NTI4OCwgNTUyOTIsIDU1Mjk3LCAKKyAgICA1NTMwMiwgNTUzMDcsIDU1MzEyLCA1NTMxNiwgNTUzMjEsIDU1MzI2LCA1NTMzMSwgNTUzMzYsIDU1MzQxLCA1NTM0NiwgCisgICAgNTUzNTAsIDU1MzU1LCA1NTM2MCwgNTUzNjcsIDU1MzcyLCA1NTM3NywgNTUzODMsIDU1MzkwLCA1NTM5NywgNTU0MDYsIAorICAgIDU1NDEzLCA1NTQyMiwgNTU0MjYsIDU1NDMwLCA1NTQzNiwgNTU0NDIsIDU1NDQ4LCA1NTQ1NiwgNTU0NjIsIDU1NDY2LCAKKyAgICA1NTQ3MCwgNTU0NzQsIDU1NDgwLCA1NTQ4NiwgNTU0OTAsIDU1NDkyLCA1NTQ5NiwgNTU1MDEsIDU1NTAzLCA1NTUwNywgCisgICAgNTU1MTEsIDU1NTE1LCA1NTUyMSwgNTU1MjYsIDU1NTMwLCA1NTUzNCwgNTU1MzksIDU1NTQ1LCA1NTU1MCwgNTU1NTUsIAorICAgIDU1NTYwLCA1NTU2NSwgNTU1NzIsIDU1NTc5LCA1NTU4NCwgNTU1ODksIDU1NTk0LCA1NTU5OSwgNTU2MDQsIDU1NjA5LCAKKyAgICA1NTYxMywgNTU2MTcsIDU1NjI0LCA1NTYzMSwgNTU2MzcsIDU1NjQxLCA1NTY0NSwgNTU2NDgsIDU1NjUyLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzc5OSwgMjc4MDUsIAotICAgIDI3ODExLCAyNzgxNSwgMjc4MTksIDI3ODIzLCAyNzgyNywgMjc4MzMsIDI3ODM3LCAyNzg0MywgMjc4NDcsIDI3ODUzLCAKLSAgICAyNzg1OSwgMjc4NjcsIDI3ODczLCAyNzg4MSwgMjc4ODUsIDI3ODg5LCAyNzg5MywgMjc4OTksIDI3OTAyLCAyNzkwNywgCi0gICAgMjc5MTEsIDI3OTE3LCAyNzkyMSwgMjc5MjUsIDI3OTMxLCAyNzkzNSwgMjc5NDEsIDI3OTQ1LCAyNzk1MSwgMjc5NTksIAotICAgIDI3OTY3LCAyNzk3NSwgMjc5ODEsIDI3OTg1LCAyNzk5MSwgMjc5OTUsIDI4MDAxLCAyODAwNSwgMjgwMDgsIDI4MDE0LCAKLSAgICAyODAxOCwgMjgwMjQsIDI4MDI3LCAyODAzMCwgMjgwMzMsIDI4MDM3LCAyODA0MSwgMjgwNDcsIDI4MDUzLCAyODA1NywgCi0gICAgMjgwNjAsIDI4MDY0LCAyODA2OSwgMjgwNzQsIDI4MDgxLCAyODA4NiwgMjgwOTMsIDI4MTAwLCAyODEwOSwgMjgxMTYsIAotICAgIDI4MTI1LCAyODEzMCwgMjgxMzcsIDI4MTQ0LCAyODE1MywgMjgxNTgsIDI4MTY1LCAyODE3MCwgMjgxNzYsIDI4MTgyLCAKLSAgICAyODE4OCwgMjgxOTQsIDI4MjAwLCAyODIwNiwgMCwgMCwgMCwgMCwgMjgyMTIsIDI4MjE2LCAyODIxOSwgMjgyMjIsIAotICAgIDI4MjI1LCAyODIyOCwgMjgyMzEsIDI4MjM0LCAyODIzNywgMjgyNDAsIDI4MjQzLCAyODI0NiwgMjgyNDksIDI4MjUyLCAKLSAgICAyODI1NywgMjgyNjIsIDI4MjY3LCAyODI3MCwgMjgyNzUsIDI4MjgwLCAyODI4NSwgMjgyOTAsIDI4Mjk3LCAyODMwMiwgCi0gICAgMjgzMDcsIDI4MzEyLCAyODMxNywgMjgzMjQsIDI4MzMwLCAyODMzNiwgMjgzNDIsIDI4MzQ4LCAyODM1NCwgMjgzNjMsIAotICAgIDI4MzcyLCAyODM3OCwgMjgzODQsIDI4MzkzLCAyODQwMiwgMjg0MTEsIDI4NDIwLCAyODQyOSwgMjg0MzgsIDI4NDQ3LCAKLSAgICAyODQ1NiwgMCwgMCwgMCwgMjg0NjUsIDI4NDY5LCAyODQ3MywgMjg0NzcsIDI4NDgwLCAyODQ4MywgMjg0ODYsIDI4NDkwLCAKLSAgICAyODQ5MywgMjg0OTYsIDI4NTAwLCAyODUwMywgMjg1MDcsIDI4NTExLCAyODUxNSwgMjg1MTksIDI4NTIzLCAyODUyNywgCi0gICAgMjg1MzEsIDI4NTM1LCAyODUzOSwgMjg1NDMsIDI4NTQ2LCAyODU1MCwgMjg1NTQsIDI4NTU4LCAyODU2MSwgMjg1NjQsIAotICAgIDI4NTY3LCAyODU3MSwgMjg1NzUsIDI4NTc5LCAyODU4MywgMjg1ODYsIDI4NTkyLCAyODU5OCwgMjg2MDQsIDI4NjA5LCAKLSAgICAyODYxNCwgMjg2MTksIDI4NjI0LCAyODYyOSwgMjg2MzQsIDAsIDAsIDAsIDI4NjM4LCAyODY0MiwgMjg2NDYsIDI4NjUwLCAKLSAgICAyODY1MywgMjg2NTYsIDI4NjU5LCAyODY2MiwgMjg2NjUsIDI4NjY4LCAyODY3MSwgMjg2NzQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDU1NjYwLCA1NTY2NCwgNTU2NjgsIDU1NjczLCA1NTY3OCwgNTU2ODMsIDU1Njg3LCA1NTY5MSwgNTU2OTUsIAorICAgIDU1NzAwLCA1NTcwNSwgNTU3MDksIDU1NzEzLCA1NTcxNywgNTU3MjEsIDU1NzI2LCA1NTczMSwgNTU3MzYsIDU1NzQxLCAKKyAgICA1NTc0NSwgNTU3NDksIDU1NzU0LCA1NTc1OSwgNTU3NjQsIDU1NzY5LCA1NTc3MywgMCwgNTU3NzcsIDU1NzgxLCA1NTc4NSwgCisgICAgNTU3ODksIDU1NzkzLCA1NTc5NywgNTU4MDEsIDU1ODA2LCA1NTgxMSwgNTU4MTUsIDU1ODIwLCA1NTgyNSwgNTU4MzQsIAorICAgIDU1ODM4LCA1NTg0MiwgNTU4NDYsIDU1ODUzLCA1NTg1NywgNTU4NjIsIDU1ODY3LCA1NTg3MSwgNTU4NzUsIDU1ODgxLCAKKyAgICA1NTg4NiwgNTU4OTEsIDU1ODk2LCA1NTkwMSwgNTU5MDUsIDU1OTA5LCA1NTkxMywgNTU5MTcsIDU1OTIxLCA1NTkyNiwgCisgICAgNTU5MzEsIDU1OTM1LCA1NTkzOSwgNTU5NDQsIDU1OTQ5LCA1NTk1NCwgNTU5NTgsIDU1OTYyLCA1NTk2NywgNTU5NzIsIAorICAgIDU1OTc4LCA1NTk4NCwgNTU5ODgsIDU1OTk0LCA1NjAwMCwgNTYwMDQsIDU2MDEwLCA1NjAxNiwgNTYwMjEsIDU2MDI2LCAKKyAgICA1NjAzMCwgNTYwMzYsIDU2MDQwLCA1NjA0NCwgNTYwNTAsIDU2MDU2LCA1NjA2MSwgNTYwNjYsIDU2MDcwLCA1NjA3NCwgCisgICAgNTYwODIsIDU2MDg4LCA1NjA5NCwgNTYxMDAsIDU2MTA1LCA1NjExMCwgNTYxMTUsIDU2MTIxLCA1NjEyNSwgNTYxMzEsIAorICAgIDU2MTM1LCA1NjEzOSwgNTYxNDUsIDU2MTUxLCA1NjE1NywgNTYxNjMsIDU2MTY5LCA1NjE3NSwgNTYxODEsIDU2MTg3LCAKKyAgICA1NjE5MywgNTYxOTksIDU2MjA1LCA1NjIxMSwgNTYyMTUsIDU2MjIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NjIyNywgNTYyMzAsIDU2MjM0LCA1NjIzOCwgNTYyNDIsIDU2MjQ2LCA1NjI0OSwgNTYyNTIsIDU2MjU2LCAKKyAgICA1NjI2MCwgNTYyNjQsIDU2MjY4LCA1NjI3MSwgNTYyNzYsIDU2MjgwLCA1NjI4NCwgNTYyODgsIDU2Mjk0LCA1NjI5OCwgCisgICAgNTYzMDIsIDU2MzA2LCA1NjMxMCwgNTYzMTcsIDU2MzIzLCA1NjMyNywgNTYzMzEsIDU2MzM1LCA1NjMzOSwgNTYzNDMsIAorICAgIDU2MzQ3LCA1NjM1MSwgNTYzNTUsIDU2MzU5LCA1NjM2MywgNTYzNjcsIDU2MzczLCA1NjM3NywgNTYzODEsIDU2Mzg1LCAKKyAgICA1NjM4OSwgNTYzOTMsIDU2Mzk3LCA1NjQwMSwgNTY0MDUsIDU2NDA5LCA1NjQxMywgNTY0MTcsIDU2NDIxLCA1NjQyNSwgCisgICAgNTY0MjksIDU2NDMzLCA1NjQzNywgNTY0NDMsIDU2NDQ5LCA1NjQ1NCwgNTY0NTksIDU2NDYzLCA1NjQ2NywgNTY0NzEsIAorICAgIDU2NDc1LCA1NjQ3OSwgNTY0ODMsIDU2NDg3LCA1NjQ5MSwgNTY0OTUsIDU2NDk5LCA1NjUwMywgNTY1MDcsIDU2NTExLCAKKyAgICA1NjUxNSwgNTY1MTksIDU2NTIzLCA1NjUyNywgNTY1MzEsIDU2NTM1LCA1NjUzOSwgNTY1NDMsIDU2NTQ3LCA1NjU1MSwgCisgICAgNTY1NTUsIDU2NTYxLCA1NjU2NSwgNTY1NjksIDU2NTczLCA1NjU3NywgNTY1ODEsIDU2NTg1LCA1NjU4OSwgNTY1OTMsIAorICAgIDU2NTk4LCA1NjYwNSwgNTY2MDksIDU2NjEzLCA1NjYxNywgNTY2MjEsIDU2NjI1LCA1NjYyOSwgNTY2MzMsIDU2NjM3LCAKKyAgICA1NjY0MSwgNTY2NDUsIDU2NjQ5LCA1NjY1MywgNTY2NjAsIDU2NjY0LCA1NjY3MCwgNTY2NzQsIDU2Njc4LCA1NjY4MiwgCisgICAgNTY2ODYsIDU2NjkwLCA1NjY5MywgNTY2OTcsIDU2NzAxLCA1NjcwNSwgNTY3MDksIDU2NzEzLCA1NjcxNywgNTY3MjEsIAorICAgIDU2NzI1LCA1NjcyOSwgNTY3MzMsIDU2NzM3LCA1Njc0MSwgNTY3NDUsIDU2NzQ5LCA1Njc1MywgNTY3NTcsIDU2NzYxLCAKKyAgICA1Njc2NSwgNTY3NjksIDU2NzczLCA1Njc3NywgNTY3ODEsIDU2Nzg1LCA1Njc4OSwgNTY3OTMsIDU2Nzk3LCA1NjgwMSwgCisgICAgNTY4MDUsIDU2ODA5LCA1NjgxMywgNTY4MTcsIDU2ODIxLCA1NjgyNywgNTY4MzEsIDU2ODM1LCA1NjgzOSwgNTY4NDMsIAorICAgIDU2ODQ3LCA1Njg1MSwgNTY4NTUsIDU2ODU5LCA1Njg2MywgNTY4NjcsIDU2ODcxLCA1Njg3NSwgNTY4NzksIDU2ODgzLCAKKyAgICA1Njg4NywgNTY4OTEsIDU2ODk1LCA1Njg5OSwgNTY5MDMsIDU2OTA3LCA1NjkxMSwgNTY5MTUsIDU2OTE5LCA1NjkyMywgCisgICAgNTY5MjcsIDU2OTMxLCA1NjkzNSwgNTY5NDMsIDU2OTQ3LCA1Njk1MSwgNTY5NTUsIDU2OTU5LCA1Njk2MywgNTY5NjksIAorICAgIDU2OTczLCA1Njk3NywgNTY5ODEsIDU2OTg1LCA1Njk4OSwgNTY5OTMsIDU2OTk3LCA1NzAwMSwgNTcwMDUsIDU3MDA5LCAKKyAgICA1NzAxMywgNTcwMTcsIDU3MDIxLCA1NzAyNywgNTcwMzEsIDU3MDM1LCA1NzAzOSwgNTcwNDMsIDU3MDQ3LCA1NzA1MSwgCisgICAgNTcwNTUsIDU3MDU5LCA1NzA2MywgNTcwNjcsIDU3MDcxLCA1NzA3NSwgNTcwNzksIDU3MDgzLCA1NzA4NywgNTcwOTEsIAorICAgIDU3MDk1LCA1NzA5OSwgNTcxMDMsIDU3MTA3LCA1NzExMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTcxMTUsIDU3MTIzLCA1NzEzMCwgNTcxNDEsIDU3MTUxLCAKKyAgICA1NzE1OSwgNTcxNjgsIDU3MTc3LCA1NzE4NywgNTcxOTksIDU3MjExLCA1NzIyMywgMCwgMCwgMCwgMCwgNTcyMjksIAorICAgIDU3MjMyLCA1NzIzNSwgNTcyNDAsIDU3MjQzLCA1NzI1MCwgNTcyNTQsIDU3MjU4LCA1NzI2MiwgNTcyNjYsIDU3MjcwLCAKKyAgICA1NzI3NSwgNTcyODAsIDU3Mjg0LCA1NzI4OCwgNTcyOTMsIDU3Mjk4LCA1NzMwMywgNTczMDgsIDU3MzExLCA1NzMxNCwgCisgICAgNTczMjAsIDU3MzI2LCA1NzMzMSwgNTczMzYsIDU3MzQzLCA1NzM1MCwgNTczNTQsIDU3MzU4LCA1NzM2MiwgNTczNjksIAorICAgIDU3Mzc1LCA1NzM4MiwgNTczODcsIDU3MzkyLCA1NzM5NywgNTc0MDIsIDU3NDA3LCA1NzQxMiwgNTc0MTcsIDU3NDIyLCAKKyAgICA1NzQyNywgNTc0MzIsIDU3NDM3LCA1NzQ0MiwgNTc0NDcsIDU3NDUyLCA1NzQ1OCwgNTc0NjMsIDU3NDY3LCA1NzQ3MywgCisgICAgNTc0ODQsIDU3NDk0LCA1NzUwOSwgNTc1MTksIDU3NTIzLCA1NzUzMiwgNTc1MzgsIDU3NTQ0LCA1NzU1MCwgNTc1NTUsIAorICAgIDU3NTU4LCA1NzU2MywgNTc1NjcsIDAsIDU3NTczLCA1NzU3NywgNTc1ODAsIDU3NTg0LCA1NzU4NywgNTc1OTEsIDU3NTk0LCAKKyAgICA1NzU5OCwgNTc2MDEsIDU3NjA1LCA1NzYwOCwgNTc2MTEsIDU3NjE1LCA1NzYxOSwgNTc2MjMsIDU3NjI3LCA1NzYzMSwgCisgICAgNTc2MzUsIDU3NjM5LCA1NzY0MywgNTc2NDcsIDU3NjUxLCA1NzY1NSwgNTc2NTksIDU3NjYzLCA1NzY2NywgNTc2NzEsIAorICAgIDU3Njc1LCA1NzY3OSwgNTc2ODMsIDU3Njg3LCA1NzY5MSwgNTc2OTUsIDU3Njk5LCA1NzcwMywgNTc3MDgsIDU3NzEyLCAKKyAgICA1NzcxNiwgNTc3MjAsIDU3NzI0LCA1NzcyNywgNTc3MzEsIDU3NzM0LCA1NzczOCwgNTc3NDIsIDU3NzQ2LCA1Nzc1MCwgCisgICAgNTc3NTMsIDU3NzU3LCA1Nzc2MCwgNTc3NjQsIDU3NzY4LCA1Nzc3MiwgNTc3NzYsIDU3NzgwLCA1Nzc4NCwgNTc3ODgsIAorICAgIDU3NzkyLCA1Nzc5NiwgNTc4MDAsIDU3ODA0LCA1NzgwOCwgNTc4MTEsIDU3ODE1LCA1NzgxOSwgNTc4MjMsIDU3ODI3LCAKKyAgICA1NzgzMSwgNTc4MzQsIDU3ODM5LCA1Nzg0MywgNTc4NDgsIDU3ODUyLCA1Nzg1NSwgNTc4NTksIDU3ODYzLCA1Nzg2NywgCisgICAgNTc4NzEsIDU3ODc2LCA1Nzg4MCwgNTc4ODQsIDU3ODg4LCA1Nzg5MiwgNTc4OTUsIDU3ODk5LCA1NzkwMywgMCwgMCwgCisgICAgNTc5MDgsIDU3OTE2LCA1NzkyNCwgNTc5MzEsIDU3OTM4LCA1Nzk0MiwgNTc5NDgsIDU3OTUzLCA1Nzk1OCwgNTc5NjIsIAorICAgIDU3OTY1LCA1Nzk2OSwgNTc5NzIsIDU3OTc2LCA1Nzk3OSwgNTc5ODMsIDU3OTg2LCA1Nzk5MCwgNTc5OTMsIDU3OTk2LCAKKyAgICA1ODAwMCwgNTgwMDQsIDU4MDA4LCA1ODAxMiwgNTgwMTYsIDU4MDIwLCA1ODAyNCwgNTgwMjgsIDU4MDMyLCA1ODAzNiwgCisgICAgNTgwNDAsIDU4MDQ0LCA1ODA0OCwgNTgwNTIsIDU4MDU2LCA1ODA2MCwgNTgwNjQsIDU4MDY4LCA1ODA3MiwgNTgwNzYsIAorICAgIDU4MDgwLCA1ODA4NCwgNTgwODgsIDU4MDkzLCA1ODA5NywgNTgxMDEsIDU4MTA1LCA1ODEwOSwgNTgxMTIsIDU4MTE2LCAKKyAgICA1ODExOSwgNTgxMjMsIDU4MTI3LCA1ODEzMSwgNTgxMzUsIDU4MTM4LCA1ODE0MiwgNTgxNDUsIDU4MTQ5LCA1ODE1MywgCisgICAgNTgxNTcsIDU4MTYxLCA1ODE2NSwgNTgxNjksIDU4MTczLCA1ODE3NywgNTgxODEsIDU4MTg1LCA1ODE4OSwgNTgxOTMsIAorICAgIDU4MTk2LCA1ODIwMCwgNTgyMDQsIDU4MjA4LCA1ODIxMiwgNTgyMTYsIDU4MjE5LCA1ODIyNCwgNTgyMjgsIDU4MjMzLCAKKyAgICA1ODIzNywgNTgyNDAsIDU4MjQ0LCA1ODI0OCwgNTgyNTIsIDU4MjU2LCA1ODI2MSwgNTgyNjUsIDU4MjY5LCA1ODI3MywgCisgICAgNTgyNzcsIDU4MjgwLCA1ODI4NCwgNTgyODgsIDU4MjkzLCA1ODI5NywgNTgzMDEsIDU4MzA1LCA1ODMwOSwgNTgzMTQsIAorICAgIDU4MzIxLCA1ODMyNSwgNTgzMzEsIDAsIDAsIDAsIDAsIDAsIDU4MzM2LCA1ODM0MCwgNTgzNDQsIDU4MzQ3LCA1ODM1MSwgCisgICAgNTgzNTUsIDU4MzU5LCA1ODM2MiwgNTgzNjUsIDU4MzY5LCA1ODM3MywgNTgzNzcsIDU4MzgxLCA1ODM4NSwgNTgzODksIAorICAgIDU4MzkzLCA1ODM5NywgNTg0MDEsIDU4NDA0LCA1ODQwOCwgNTg0MTIsIDU4NDE1LCA1ODQxOCwgNTg0MjEsIDU4NDI0LCAKKyAgICA1ODQyOCwgNTg0MzIsIDU4NDM2LCA1ODQ0MCwgNTg0NDQsIDU4NDQ4LCA1ODQ1MiwgNTg0NTYsIDU4NDYwLCA1ODQ2NCwgCisgICAgNTg0NjcsIDU4NDcwLCA1ODQ3NCwgNTg0NzgsIDU4NDgyLCA1ODQ4NiwgMCwgMCwgMCwgNTg0OTAsIDU4NDk0LCA1ODQ5OCwgCisgICAgNTg1MDIsIDU4NTA2LCA1ODUxMCwgNTg1MTQsIDU4NTE4LCA1ODUyMiwgNTg1MjYsIDU4NTMwLCA1ODUzNCwgNTg1MzgsIAorICAgIDU4NTQyLCA1ODU0NiwgNTg1NTAsIDU4NTU0LCA1ODU1OCwgNTg1NjIsIDU4NTY2LCA1ODU3MCwgNTg1NzQsIDU4NTc4LCAKKyAgICA1ODU4MiwgNTg1ODYsIDU4NTkwLCA1ODU5NCwgNTg1OTgsIDU4NjAyLCA1ODYwNiwgNTg2MTAsIDU4NjEzLCA1ODYxNywgCisgICAgNTg2MjAsIDU4NjI0LCA1ODYyOCwgNTg2MzEsIDU4NjM1LCA1ODYzOSwgNTg2NDIsIDU4NjQ2LCA1ODY1MCwgNTg2NTQsIAorICAgIDU4NjU4LCA1ODY2MSwgNTg2NjUsIDU4NjY5LCA1ODY3MywgNTg2NzcsIDU4NjgxLCA1ODY4NSwgNTg2ODgsIDU4NjkxLCAKKyAgICA1ODY5NSwgNTg2OTksIDU4NzAzLCA1ODcwNywgNTg3MTEsIDU4NzE1LCA1ODcxOSwgNTg3MjMsIDU4NzI3LCA1ODczMSwgCisgICAgNTg3MzUsIDU4NzM5LCA1ODc0MywgNTg3NDcsIDU4NzUxLCA1ODc1NSwgNTg3NTksIDU4NzYzLCA1ODc2NywgNTg3NzEsIAorICAgIDU4Nzc1LCA1ODc3OSwgNTg3ODMsIDU4Nzg3LCA1ODc5MSwgNTg3OTUsIDU4Nzk5LCA1ODgwMywgNTg4MDcsIDU4ODExLCAKKyAgICA1ODgxNSwgNTg4MTksIDU4ODIzLCA1ODgyNywgNTg4MzEsIDU4ODM1LCA1ODgzOSwgNTg4NDMsIDU4ODQ3LCA1ODg1MSwgCisgICAgNTg4NTUsIDAsIDU4ODU5LCA1ODg2NSwgNTg4NzEsIDU4ODc2LCA1ODg4MSwgNTg4ODYsIDU4ODkyLCA1ODg5OCwgNTg5MDQsIAorICAgIDU4OTEwLCA1ODkxNiwgNTg5MjIsIDU4OTI4LCA1ODkzNCwgNTg5NDAsIDU4OTQ2LCA1ODk1MiwgNTg5NTYsIDU4OTYwLCAKKyAgICA1ODk2NCwgNTg5NjgsIDU4OTcyLCA1ODk3NiwgNTg5ODAsIDU4OTg0LCA1ODk4OCwgNTg5OTIsIDU4OTk2LCA1OTAwMCwgCisgICAgNTkwMDQsIDU5MDA4LCA1OTAxMiwgNTkwMTYsIDU5MDIwLCA1OTAyNCwgNTkwMjgsIDU5MDMyLCA1OTAzNywgNTkwNDIsIAorICAgIDU5MDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTA1MiwgNTkwNTYsIDU5MDYwLCA1OTA2NCwgNTkwNjgsIDU5MDcyLCAKKyAgICA1OTA3NiwgNTkwODAsIDU5MDg0LCA1OTA4OCwgNTkwOTIsIDU5MDk2LCA1OTEwMCwgNTkxMDQsIDU5MTA4LCA1OTExMiwgCisgICAgNTkxMTUsIDU5MTE5LCA1OTEyMiwgNTkxMjYsIDU5MTMwLCA1OTEzNCwgNTkxMzgsIDU5MTQyLCA1OTE0NiwgNTkxNTAsIAorICAgIDU5MTU0LCA1OTE1OCwgNTkxNjIsIDU5MTY2LCA1OTE3MCwgNTkxNzQsIDU5MTc4LCA1OTE4MiwgNTkxODYsIDU5MTkwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTE5NCwgNTkxOTksIDU5MjA0LCA1OTIwOSwgNTkyMTMsIAorICAgIDU5MjE4LCA1OTIyMiwgNTkyMjcsIDU5MjMyLCA1OTIzNywgNTkyNDIsIDU5MjQ3LCA1OTI1MSwgNTkyNTYsIDU5MjYxLCAKKyAgICA1OTI2NiwgNTkyNzEsIDU5Mjc1LCA1OTI3OSwgNTkyODMsIDU5Mjg3LCA1OTI5MSwgNTkyOTUsIDU5Mjk5LCA1OTMwMywgCisgICAgNTkzMDcsIDU5MzExLCA1OTMxNSwgNTkzMTksIDU5MzIzLCA1OTMyNywgNTkzMzIsIDU5MzM3LCA1OTM0MiwgNTkzNDcsIAorICAgIDU5MzUyLCA1OTM1NywgNTkzNjIsIDU5MzY3LCA1OTM3MiwgNTkzNzcsIDU5MzgyLCA1OTM4NywgNTkzOTIsIDU5Mzk3LCAKKyAgICA1OTQwMiwgNTk0MDgsIDAsIDU5NDE1LCA1OTQxOCwgNTk0MjEsIDU5NDI0LCA1OTQyNywgNTk0MzAsIDU5NDMzLCA1OTQzNiwgCisgICAgNTk0MzksIDU5NDQyLCA1OTQ0NiwgNTk0NTAsIDU5NDU0LCA1OTQ1OCwgNTk0NjIsIDU5NDY2LCA1OTQ3MCwgNTk0NzQsIAorICAgIDU5NDc4LCA1OTQ4MiwgNTk0ODYsIDU5NDkwLCA1OTQ5NCwgNTk0OTgsIDU5NTAyLCA1OTUwNiwgNTk1MTAsIDU5NTE0LCAKKyAgICA1OTUxOCwgNTk1MjIsIDU5NTI2LCA1OTUzMCwgNTk1MzQsIDU5NTM4LCA1OTU0MiwgNTk1NDYsIDU5NTUwLCA1OTU1NCwgCisgICAgNTk1NTgsIDU5NTYyLCA1OTU2NiwgNTk1NzUsIDU5NTg0LCA1OTU5MywgNTk2MDIsIDU5NjExLCA1OTYyMCwgNTk2MjksIAorICAgIDU5NjM4LCA1OTY0MSwgNTk2NDYsIDU5NjUxLCA1OTY1NiwgNTk2NjEsIDU5NjY2LCA1OTY3MSwgNTk2NzYsIDU5NjgxLCAKKyAgICA1OTY4NiwgNTk2OTAsIDU5Njk1LCA1OTcwMCwgNTk3MDUsIDU5NzEwLCA1OTcxNSwgNTk3MTksIDU5NzIzLCA1OTcyNywgCisgICAgNTk3MzEsIDU5NzM1LCA1OTczOSwgNTk3NDMsIDU5NzQ3LCA1OTc1MSwgNTk3NTUsIDU5NzU5LCA1OTc2MywgNTk3NjcsIAorICAgIDU5NzcxLCA1OTc3NiwgNTk3ODEsIDU5Nzg2LCA1OTc5MSwgNTk3OTYsIDU5ODAxLCA1OTgwNiwgNTk4MTEsIDU5ODE2LCAKKyAgICA1OTgyMSwgNTk4MjYsIDU5ODMxLCA1OTgzNiwgNTk4NDEsIDU5ODQ3LCA1OTg1MywgNTk4NTgsIDU5ODYzLCA1OTg2NiwgCisgICAgNTk4NjksIDU5ODcyLCA1OTg3NSwgNTk4NzgsIDU5ODgxLCA1OTg4NCwgNTk4ODcsIDU5ODkwLCA1OTg5NCwgNTk4OTgsIAorICAgIDU5OTAyLCA1OTkwNiwgNTk5MTAsIDU5OTE0LCA1OTkxOCwgNTk5MjIsIDU5OTI2LCA1OTkzMCwgNTk5MzQsIDU5OTM4LCAKKyAgICA1OTk0MiwgNTk5NDYsIDU5OTUwLCA1OTk1NCwgNTk5NTgsIDU5OTYyLCA1OTk2NiwgNTk5NzAsIDU5OTc0LCA1OTk3OCwgCisgICAgNTk5ODIsIDU5OTg2LCA1OTk5MCwgNTk5OTQsIDU5OTk4LCA2MDAwMiwgNjAwMDYsIDYwMDEwLCA2MDAxNCwgNjAwMTgsIAorICAgIDYwMDIyLCA2MDAyNiwgNjAwMzAsIDYwMDM0LCA2MDAzOCwgNjAwNDIsIDYwMDQ2LCA2MDA1MCwgNjAwNTUsIDYwMDYwLCAKKyAgICA2MDA2NSwgNjAwNzAsIDYwMDc0LCA2MDA3OSwgNjAwODQsIDYwMDg5LCA2MDA5NCwgNjAwOTksIDYwMTA0LCA2MDEwOSwgCisgICAgNjAxMTQsIDYwMTE5LCA2MDEyMywgNjAxMjksIDYwMTM1LCA2MDE0MSwgNjAxNDcsIDYwMTUzLCA2MDE1OSwgNjAxNjUsIAorICAgIDYwMTcxLCA2MDE3NywgNjAxODMsIDYwMTg5LCA2MDE5NSwgNjAxOTgsIDYwMjAxLCA2MDIwNCwgNjAyMDksIDYwMjEyLCAKKyAgICA2MDIxNSwgNjAyMTgsIDYwMjIxLCA2MDIyNCwgNjAyMjcsIDYwMjMxLCA2MDIzNSwgNjAyMzksIDYwMjQzLCA2MDI0NywgCisgICAgNjAyNTEsIDYwMjU1LCA2MDI1OSwgNjAyNjMsIDYwMjY3LCA2MDI3MSwgNjAyNzUsIDYwMjc5LCA2MDI4MiwgNjAyODUsIAorICAgIDYwMjg5LCA2MDI5MywgNjAyOTcsIDYwMzAxLCA2MDMwNCwgNjAzMDgsIDYwMzEyLCA2MDMxNiwgNjAzMjAsIDYwMzIzLCAKKyAgICA2MDMyNywgNjAzMzEsIDYwMzM1LCA2MDMzOSwgNjAzNDIsIDYwMzQ2LCA2MDM1MCwgNjAzNTMsIDYwMzU3LCA2MDM2MSwgCisgICAgNjAzNjUsIDYwMzY5LCA2MDM3MywgNjAzNzcsIDYwMzgxLCAwLCA2MDM4NSwgNjAzODgsIDYwMzkxLCA2MDM5NCwgNjAzOTcsIAorICAgIDYwNDAwLCA2MDQwMywgNjA0MDYsIDYwNDA5LCA2MDQxMiwgNjA0MTUsIDYwNDE4LCA2MDQyMSwgNjA0MjQsIDYwNDI3LCAKKyAgICA2MDQzMCwgNjA0MzMsIDYwNDM2LCA2MDQzOSwgNjA0NDIsIDYwNDQ1LCA2MDQ0OCwgNjA0NTEsIDYwNDU0LCA2MDQ1NywgCisgICAgNjA0NjAsIDYwNDYzLCA2MDQ2NiwgNjA0NjksIDYwNDcyLCA2MDQ3NSwgNjA0NzgsIDYwNDgxLCA2MDQ4NCwgNjA0ODcsIAorICAgIDYwNDkwLCA2MDQ5MywgNjA0OTYsIDYwNDk5LCA2MDUwMiwgNjA1MDUsIDYwNTA4LCA2MDUxMSwgNjA1MTQsIDYwNTE3LCAKKyAgICA2MDUyMCwgNjA1MjMsIDYwNTI2LCA2MDUyOSwgNjA1MzIsIDYwNTM1LCA2MDUzOCwgNjA1NDEsIDYwNTQ0LCA2MDU0NywgCisgICAgNjA1NTAsIDYwNTUzLCA2MDU1NiwgNjA1NTksIDYwNTYyLCA2MDU2NSwgNjA1NjgsIDYwNTcxLCA2MDU3NCwgNjA1NzcsIAorICAgIDYwNTgwLCA2MDU4MywgNjA1ODYsIDYwNTg5LCA2MDU5MiwgNjA1OTUsIDYwNTk4LCA2MDYwMSwgNjA2MDQsIDYwNjA3LCAKKyAgICA2MDYxMCwgNjA2MTMsIDYwNjE2LCA2MDYxOSwgNjA2MjIsIDYwNjI1LCA2MDYyOCwgNjA2MzEsIDYwNjM0LCA2MDYzNywgCisgICAgNjA2NDAsIDYwNjQzLCA2MDY0NiwgNjA2NDksIDYwNjU3LCA2MDY2NCwgNjA2NzEsIDYwNjc4LCA2MDY4NSwgNjA2OTIsIAorICAgIDYwNjk5LCA2MDcwNiwgNjA3MTMsIDYwNzIwLCA2MDcyOCwgNjA3MzYsIDYwNzQ0LCA2MDc1MiwgNjA3NjAsIDYwNzY4LCAKKyAgICA2MDc3NiwgNjA3ODQsIDYwNzkyLCA2MDgwMCwgNjA4MDgsIDYwODE2LCA2MDgyNCwgNjA4MzIsIDYwODQwLCA2MDg0MywgCisgICAgNjA4NDYsIDYwODQ5LCA2MDg1MSwgNjA4NTQsIDYwODU3LCA2MDg2MCwgNjA4NjUsIDYwODcwLCA2MDg3MywgNjA4ODAsIAorICAgIDYwODg3LCA2MDg5NCwgNjA5MDEsIDYwOTA0LCA2MDkwOSwgNjA5MTEsIDYwOTE1LCA2MDkxNywgNjA5MTksIDYwOTIyLCAKKyAgICA2MDkyNSwgNjA5MjgsIDYwOTMxLCA2MDkzNCwgNjA5MzcsIDYwOTQwLCA2MDk0NSwgNjA5NTAsIDYwOTUzLCA2MDk1NiwgCisgICAgNjA5NTksIDYwOTYyLCA2MDk2NSwgNjA5NjgsIDYwOTcxLCA2MDk3NSwgNjA5NzgsIDYwOTgxLCA2MDk4NCwgNjA5ODcsIAorICAgIDYwOTkwLCA2MDk5NCwgNjA5OTcsIDYxMDAwLCA2MTAwMywgNjEwMDgsIDYxMDEzLCA2MTAxOCwgNjEwMjMsIDYxMDI4LCAKKyAgICA2MTAzMywgNjEwMzgsIDYxMDQzLCA2MTA0OCwgNjEwNTYsIDYxMDU4LCA2MTA2MSwgNjEwNjQsIDYxMDY3LCA2MTA3MCwgCisgICAgNjEwNzUsIDYxMDgzLCA2MTA4NiwgNjEwODksIDYxMDkzLCA2MTA5NiwgNjEwOTksIDYxMTAyLCA2MTEwNywgNjExMTAsIAorICAgIDYxMTEzLCA2MTExOCwgNjExMjEsIDYxMTI0LCA2MTEyOSwgNjExMzIsIDYxMTM1LCA2MTE0MCwgNjExNDUsIDYxMTUwLCAKKyAgICA2MTE1MywgNjExNTYsIDYxMTU5LCA2MTE2MiwgNjExNjgsIDYxMTcxLCA2MTE3NCwgNjExNzcsIDYxMTc5LCA2MTE4MiwgCisgICAgNjExODUsIDYxMTg4LCA2MTE5MywgNjExOTYsIDYxMTk5LCA2MTIwMiwgNjEyMDUsIDYxMjA4LCA2MTIxMywgNjEyMTYsIAorICAgIDYxMjE5LCA2MTIyMiwgNjEyMjUsIDYxMjI4LCA2MTIzMSwgNjEyMzQsIDYxMjM3LCA2MTI0MCwgNjEyNDUsIDYxMjQ5LCAKKyAgICA2MTI1NiwgNjEyNjMsIDYxMjcwLCA2MTI3NywgNjEyODQsIDYxMjkxLCA2MTI5OCwgNjEzMDUsIDYxMzEyLCA2MTMyMCwgCisgICAgNjEzMjgsIDYxMzM2LCA2MTM0NCwgNjEzNTIsIDYxMzYwLCA2MTM2OCwgNjEzNzYsIDYxMzg0LCA2MTM5MiwgNjE0MDAsIAorICAgIDYxNDA4LCA2MTQxNiwgNjE0MjQsIDYxNDMyLCA2MTQ0MCwgNjE0NDgsIDYxNDU2LCA2MTQ2NCwgNjE0NzIsIDYxNDgwLCAKKyAgICA2MTQ4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjg2NzcsIDI4NjgwLCAyODY4NCwgCi0gICAgMjg2ODgsIDI4NjkyLCAyODY5NiwgMjg3MDAsIDI4NzA0LCAyODcwOCwgMjg3MTIsIDI4NzE2LCAyODcyMCwgMjg3MjQsIAotICAgIDI4NzI4LCAyODczMiwgMjg3MzUsIDI4NzM5LCAyODc0MywgMjg3NDcsIDI4NzUxLCAyODc1NSwgMjg3NTksIDI4NzYyLCAKLSAgICAyODc2NiwgMjg3NzAsIDI4Nzc0LCAyODc3OCwgMjg3ODEsIDI4Nzg0LCAyODc4OCwgMjg3OTEsIDI4Nzk1LCAyODc5OSwgCi0gICAgMjg4MDMsIDI4ODA3LCAyODgxMSwgMjg4MTQsIDI4ODE5LCAyODgyNCwgMjg4MjksIDI4ODMzLCAyODgzNywgMjg4NDIsIAotICAgIDI4ODQ2LCAyODg1MSwgMjg4NTUsIDI4ODYxLCAyODg2NiwgMjg4NzEsIDI4ODc2LCAyODg4MiwgMjg4ODcsIDI4ODkzLCAKLSAgICAyODg5OSwgMjg5MDUsIDI4OTA5LCAwLCAwLCAwLCAyODkxMywgMjg5MTgsIDI4OTI3LCAyODkzMiwgMjg5MzksIDI4OTQ0LCAKLSAgICAyODk0OCwgMjg5NTEsIDI4OTU0LCAyODk1NywgMjg5NjAsIDI4OTYzLCAyODk2NiwgMjg5NjksIDI4OTcyLCAwLCAwLCAwLCAKLSAgICAyODk3NSwgMjg5NzksIDI4OTgzLCAyODk4NywgMjg5OTQsIDI5MDAwLCAyOTAwNiwgMjkwMTIsIDI5MDE4LCAyOTAyNCwgCi0gICAgMjkwMzAsIDI5MDM2LCAyOTA0MiwgMjkwNDgsIDI5MDU1LCAyOTA2MiwgMjkwNjksIDI5MDc2LCAyOTA4MywgMjkwOTAsIAotICAgIDI5MDk3LCAyOTEwNCwgMjkxMTEsIDI5MTE4LCAyOTEyNSwgMjkxMzIsIDI5MTM5LCAyOTE0NiwgMjkxNTMsIDI5MTYwLCAKLSAgICAyOTE2NywgMjkxNzQsIDI5MTgxLCAyOTE4OCwgMjkxOTUsIDI5MjAyLCAyOTIwOSwgMjkyMTYsIDI5MjIzLCAyOTIzMCwgCi0gICAgMjkyMzcsIDI5MjQ0LCAyOTI1MSwgMjkyNTgsIDI5MjY2LCAyOTI3NCwgMjkyODIsIDI5Mjg4LCAyOTI5NCwgMjkzMDAsIAotICAgIDI5MzA4LCAyOTMxNywgMjkzMjIsIDI5MzI4LCAyOTMzNCwgMjkzNDIsIDI5MzQ4LCAyOTM1NCwgMjkzNjAsIDI5MzY1LCAKLSAgICAyOTM3MiwgMjkzNzcsIDI5MzgzLCAyOTM4OSwgMjkzOTcsIDI5NDAyLCAyOTQwOCwgMjk0MTMsIDI5NDIwLCAyOTQyNiwgCi0gICAgMjk0MzQsIDI5NDQyLCAyOTQ0OCwgMjk0NTQsIDI5NDYxLCAyOTQ2OCwgMjk0NzQsIDI5NDgwLCAyOTQ4NiwgMjk0OTIsIAotICAgIDI5NDk3LCAyOTUwMywgMjk1MTEsIDI5NTE4LCAyOTUyMywgMjk1MjksIDI5NTM1LCAyOTU0MSwgMjk1NDksIDI5NTUzLCAKLSAgICAyOTU1OSwgMjk1NjUsIDI5NTcxLCAyOTU3NywgMjk1ODMsIDI5NTg5LCAyOTU5MywgMjk1OTgsIDI5NjAzLCAyOTYxMCwgCi0gICAgMjk2MTUsIDI5NjE5LCAyOTYyNCwgMjk2MjgsIDI5NjMyLCAyOTYzNiwgMjk2NDEsIDI5NjQ2LCAyOTY1MCwgMjk2NTQsIAotICAgIDI5NjU4LCAyOTY2MywgMjk2NjcsIDI5NjcyLCAyOTY3NywgMjk2ODEsIDI5Njg2LCAyOTY5MCwgMjk2OTUsIDI5Njk5LCAKLSAgICAyOTcwNCwgMjk3MDksIDI5NzE1LCAyOTcyMCwgMjk3MjUsIDI5NzI5LCAyOTczNCwgMjk3NDAsIDI5NzQ3LCAyOTc1MSwgCi0gICAgMjk3NTYsIDI5NzYxLCAyOTc2NSwgMjk3NzAsIDI5Nzc0LCAyOTc4MCwgMjk3ODcsIDI5Nzk0LCAyOTc5OSwgMjk4MDQsIAotICAgIDI5ODA4LCAyOTgxNCwgMjk4MTksIDI5ODIzLCAyOTgyOCwgMjk4MzMsIDI5ODM5LCAyOTg0NCwgMjk4NTAsIDI5ODU1LCAKLSAgICAyOTg2MSwgMjk4NjcsIDI5ODczLCAyOTg3OSwgMjk4ODYsIDI5ODkzLCAyOTkwMCwgMjk5MDcsIDI5OTE0LCAyOTkxOSwgCi0gICAgMjk5MjcsIDI5OTM2LCAyOTk0NSwgMjk5NTQsIDI5OTYzLCAyOTk3MiwgMjk5ODEsIDI5OTkzLCAzMDAwMiwgMzAwMTEsIAotICAgIDMwMDIwLCAzMDAyNSwgMzAwMzAsIDMwMDM2LCAzMDA0NCwgMzAwNTIsIDMwMDU5LCAzMDA2NiwgMzAwNzMsIDMwMDgwLCAKLSAgICAzMDA4OCwgMzAwOTcsIDMwMTA2LCAzMDExNSwgMzAxMjQsIDMwMTMzLCAzMDE0MiwgMzAxNTEsIDMwMTYwLCAzMDE2OSwgCi0gICAgMzAxNzgsIDMwMTg3LCAzMDE5NiwgMzAyMDUsIDMwMjE0LCAzMDIyMiwgMzAyMzEsIDMwMjQyLCAzMDI1MCwgMzAyNjAsIAotICAgIDMwMjcxLCAzMDI4MCwgMzAyODksIDMwMjk5LCAzMDMwOCwgMzAzMTYsIDMwMzI1LCAzMDMzMSwgMzAzMzYsIDMwMzQ0LCAKLSAgICAzMDM0OSwgMzAzNTYsIDMwMzYxLCAzMDM3MCwgMzAzNzUsIDMwMzgwLCAzMDM4NywgMzAzOTIsIDMwMzk3LCAzMDQwNSwgCi0gICAgMzA0MTMsIDMwNDIyLCAzMDQzMSwgMzA0MzYsIDMwNDQzLCAzMDQ1MywgMzA0NjEsIDMwNDcwLCAzMDQ3NSwgMzA0ODEsIAotICAgIDMwNDg2LCAzMDQ5MywgMzA0OTgsIDMwNTA3LCAzMDUxMiwgMzA1MTcsIDMwNTIyLCAzMDUyOSwgMzA1MzQsIDMwNTM5LCAKLSAgICAzMDU0OCwgMzA1NTYsIDMwNTYxLCAzMDU2NiwgMzA1NzMsIDMwNTgwLCAzMDU4NCwgMzA1ODgsIDMwNTkxLCAzMDU5NCwgCi0gICAgMzA1OTcsIDMwNjAwLCAzMDYwMywgMzA2MDYsIDMwNjEzLCAzMDYxNiwgMzA2MTksIDMwNjI0LCAzMDYyOCwgMzA2MzIsIAotICAgIDMwNjM2LCAzMDY0MCwgMzA2NDQsIDMwNjU0LCAzMDY2MCwgMzA2NjYsIDMwNjcyLCAzMDY4MCwgMzA2ODgsIDMwNjk0LCAKLSAgICAzMDY5OSwgMzA3MDUsIDMwNzExLCAzMDcxNiwgMzA3MjIsIDMwNzI4LCAzMDczMywgMzA3MzksIDMwNzQ1LCAzMDc1MywgCi0gICAgMzA3NTgsIDMwNzY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzMDc3MCwgMzA3NzUsIDMwNzg0LCAzMDc5MiwgMzA4MDAsIDMwODA3LCAzMDgxNCwgMzA4MjEsIDMwODI4LCAKLSAgICAzMDgzNiwgMzA4NDQsIDMwODU0LCAzMDg2NCwgMzA4NzIsIDMwODgwLCAzMDg4OCwgMzA4OTYsIDMwOTA1LCAzMDkxNCwgCi0gICAgMzA5MjIsIDMwOTMwLCAzMDkzOSwgMzA5NDgsIDMwOTU4LCAzMDk2OCwgMzA5NzcsIDMwOTg2LCAzMDk5NCwgMzEwMDIsIAotICAgIDMxMDEwLCAzMTAxOCwgMzEwMjgsIDMxMDM4LCAzMTA0NiwgMzEwNTQsIDMxMDYyLCAzMTA3MCwgMzEwNzgsIDMxMDg2LCAKLSAgICAzMTA5NCwgMzExMDIsIDMxMTA5LCAzMTExNiwgMzExMjQsIDMxMTMyLCAzMTE0MSwgMzExNTAsIDMxMTU5LCAzMTE2OCwgCi0gICAgMzExNzgsIDMxMTg4LCAzMTE5NSwgMzEyMDIsIDMxMjEwLCAzMTIxOCwgMzEyMjcsIDMxMjM2LCAzMTI0NCwgMzEyNTIsIAotICAgIDMxMjY0LCAzMTI3NiwgMzEyODUsIDMxMjk0LCAzMTMwMywgMzEzMTIsIDMxMzE5LCAzMTMyNiwgMzEzMzQsIDMxMzQyLCAKLSAgICAzMTM1MCwgMzEzNTgsIDMxMzY2LCAzMTM3NCwgMzEzODIsIDMxMzkwLCAzMTM5OSwgMzE0MDgsIDMxNDE3LCAzMTQyNiwgCi0gICAgMzE0MzUsIDMxNDQ0LCAzMTQ1MywgMzE0NjIsIDMxNDcyLCAzMTQ4MiwgMzE0OTEsIDMxNTAwLCAzMTUwNywgMzE1MTQsIAotICAgIDMxNTIyLCAzMTUzMCwgMzE1MzgsIDMxNTQ2LCAzMTU1NCwgMzE1NjIsIDMxNTc0LCAzMTU4NiwgMzE1OTUsIDMxNjA0LCAKLSAgICAzMTYxMiwgMzE2MjAsIDMxNjI4LCAzMTYzNiwgMzE2NDcsIDMxNjU4LCAzMTY2OSwgMzE2ODAsIDMxNjkyLCAzMTcwNCwgCi0gICAgMzE3MTIsIDMxNzIwLCAzMTcyOCwgMzE3MzYsIDMxNzQ1LCAzMTc1NCwgMzE3NjMsIDMxNzcyLCAzMTc4MCwgMzE3ODgsIAotICAgIDMxNzk2LCAzMTgwNCwgMzE4MTIsIDMxODIwLCAzMTgyOSwgMzE4MzgsIDMxODQ3LCAzMTg1NiwgMzE4NjMsIDMxODcwLCAKLSAgICAzMTg3OCwgMzE4ODYsIDMxODk0LCAzMTkwMiwgMzE5MDksIDMxOTE2LCAzMTkyMywgMzE5MzAsIDMxOTM4LCAzMTk0NiwgCi0gICAgMzE5NTQsIDMxOTYyLCAzMTk3MCwgMzE5NzgsIDMxOTg1LCAzMTk5MiwgMzIwMDAsIDMyMDA4LCAzMjAxNiwgMzIwMjQsIAotICAgIDMyMDMyLCAzMjA0MCwgMzIwNDksIDMyMDU4LCAzMjA2NywgMzIwNzQsIDMyMDgzLCAzMjA5MiwgMzIxMDEsIDMyMTEwLCAKLSAgICAzMjEyMCwgMzIxMjksIDMyMTM1LCAzMjE0MCwgMzIxNDcsIDMyMTU0LCAzMjE2MiwgMzIxNzAsIDMyMTc5LCAzMjE4OCwgCi0gICAgMzIxOTgsIDMyMjA4LCAzMjIxOSwgMzIyMzAsIDMyMjM5LCAzMjI0OCwgMzIyNTgsIDMyMjY4LCAzMjI3NywgMzIyODYsIAotICAgIDMyMjk2LCAzMjMwNiwgMzIzMTcsIDMyMzI4LCAzMjMzNywgMzIzNDYsIDMyMzU2LCAzMjM2NiwgMzIzNzMsIDMyMzgwLCAKLSAgICAzMjM4OCwgMzIzOTYsIDMyNDAyLCAzMjQwOCwgMzI0MTcsIDMyNDI2LCAzMjQzNiwgMzI0NDYsIDMyNDU3LCAzMjQ2OCwgCi0gICAgMzI0NzcsIDMyNDg2LCAzMjQ5NiwgMzI1MDYsIDMyNTE1LCAzMjUyNCwgMzI1MzIsIDMyNTQwLCAzMjU0NywgMzI1NTQsIAotICAgIDMyNTYyLCAzMjU3MCwgMzI1NzksIDMyNTg4LCAzMjU5OCwgMzI2MDgsIDMyNjE5LCAzMjYzMCwgMzI2MzksIDMyNjQ4LCAKLSAgICAzMjY1OCwgMzI2NjgsIDMyNjc3LCAzMjY4NiwgMzI2OTYsIDMyNzA2LCAzMjcxNywgMzI3MjgsIDMyNzM3LCAzMjc0NiwgCi0gICAgMzI3NTYsIDMyNzY2LCAzMjc3MywgMzI3ODAsIDMyNzg4LCAzMjc5NiwgMzI4MDUsIDMyODE0LCAzMjgyNCwgMzI4MzQsIAotICAgIDMyODQ1LCAzMjg1NiwgMzI4NjUsIDMyODc0LCAzMjg4NCwgMzI4OTQsIDMyOTAyLCAzMjkxMCwgMzI5MTgsIDMyOTI2LCAKLSAgICAzMjkzNSwgMzI5NDQsIDMyOTUxLCAzMjk1OCwgMzI5NjUsIDMyOTcyLCAzMjk3OCwgMzI5ODQsIDMyOTkyLCAzMzAwMCwgCi0gICAgMzMwMDgsIDMzMDE2LCAzMzAyNiwgMzMwMzYsIDMzMDQ2LCAzMzA1NiwgMzMwNjYsIDMzMDc2LCAzMzA4NCwgMzMwOTIsIAotICAgIDMzMTAyLCAzMzExMiwgMzMxMjIsIDMzMTMyLCAzMzE0MiwgMzMxNTIsIDMzMTYwLCAzMzE2OCwgMzMxNzgsIDMzMTg4LCAKLSAgICAzMzE5OCwgMCwgMCwgMzMyMDgsIDMzMjE2LCAzMzIyNCwgMzMyMzQsIDMzMjQ0LCAzMzI1NCwgMCwgMCwgMzMyNjQsIAotICAgIDMzMjcyLCAzMzI4MCwgMzMyOTAsIDMzMzAwLCAzMzMxMCwgMzMzMjAsIDMzMzMwLCAzMzM0MCwgMzMzNDgsIDMzMzU2LCAKLSAgICAzMzM2NiwgMzMzNzYsIDMzMzg2LCAzMzM5NiwgMzM0MDYsIDMzNDE2LCAzMzQyNCwgMzM0MzIsIDMzNDQyLCAzMzQ1MiwgCi0gICAgMzM0NjIsIDMzNDcyLCAzMzQ4MiwgMzM0OTIsIDMzNTAwLCAzMzUwOCwgMzM1MTgsIDMzNTI4LCAzMzUzOCwgMzM1NDgsIAotICAgIDMzNTU4LCAzMzU2OCwgMzM1NzYsIDMzNTg0LCAzMzU5NCwgMzM2MDQsIDMzNjE0LCAwLCAwLCAzMzYyNCwgMzM2MzIsIAotICAgIDMzNjQwLCAzMzY1MCwgMzM2NjAsIDMzNjcwLCAwLCAwLCAzMzY4MCwgMzM2ODgsIDMzNjk2LCAzMzcwNiwgMzM3MTYsIAotICAgIDMzNzI2LCAzMzczNiwgMzM3NDYsIDAsIDMzNzU2LCAwLCAzMzc2NCwgMCwgMzM3NzQsIDAsIDMzNzg0LCAzMzc5NCwgCi0gICAgMzM4MDIsIDMzODEwLCAzMzgyMCwgMzM4MzAsIDMzODQwLCAzMzg1MCwgMzM4NjAsIDMzODcwLCAzMzg3OCwgMzM4ODYsIAotICAgIDMzODk2LCAzMzkwNiwgMzM5MTYsIDMzOTI2LCAzMzkzNiwgMzM5NDYsIDMzOTU0LCAzMzk2MiwgMzM5NzAsIDMzOTc4LCAKLSAgICAzMzk4NiwgMzM5OTQsIDM0MDAyLCAzNDAxMCwgMzQwMTgsIDM0MDI2LCAzNDAzNCwgMzQwNDIsIDM0MDUwLCAwLCAwLCAKLSAgICAzNDA1OCwgMzQwNjgsIDM0MDc4LCAzNDA5MSwgMzQxMDQsIDM0MTE3LCAzNDEzMCwgMzQxNDMsIDM0MTU2LCAzNDE2NiwgCi0gICAgMzQxNzYsIDM0MTg5LCAzNDIwMiwgMzQyMTUsIDM0MjI4LCAzNDI0MSwgMzQyNTQsIDM0MjY0LCAzNDI3NCwgMzQyODcsIAotICAgIDM0MzAwLCAzNDMxMywgMzQzMjYsIDM0MzM5LCAzNDM1MiwgMzQzNjIsIDM0MzcyLCAzNDM4NSwgMzQzOTgsIDM0NDExLCAKLSAgICAzNDQyNCwgMzQ0MzcsIDM0NDUwLCAzNDQ2MCwgMzQ0NzAsIDM0NDgzLCAzNDQ5NiwgMzQ1MDksIDM0NTIyLCAzNDUzNSwgCi0gICAgMzQ1NDgsIDM0NTU4LCAzNDU2OCwgMzQ1ODEsIDM0NTk0LCAzNDYwNywgMzQ2MjAsIDM0NjMzLCAzNDY0NiwgMzQ2NTQsIAotICAgIDM0NjYyLCAzNDY3MywgMzQ2ODEsIDAsIDM0NjkyLCAzNDcwMCwgMzQ3MTEsIDM0NzE5LCAzNDcyNywgMzQ3MzUsIDM0NzQzLCAKLSAgICAzNDc1MSwgMzQ3NTQsIDM0NzU3LCAzNDc2MCwgMzQ3NjMsIDM0NzY5LCAzNDc4MCwgMzQ3ODgsIDAsIDM0Nzk5LCAzNDgwNywgCi0gICAgMzQ4MTgsIDM0ODI2LCAzNDgzNCwgMzQ4NDIsIDM0ODUwLCAzNDg1OCwgMzQ4NjMsIDM0ODY4LCAzNDg3MywgMzQ4ODEsIAotICAgIDM0ODg5LCAzNDkwMCwgMCwgMCwgMzQ5MTEsIDM0OTE5LCAzNDkzMCwgMzQ5MzgsIDM0OTQ2LCAzNDk1NCwgMCwgMzQ5NjIsIAotICAgIDM0OTY3LCAzNDk3MiwgMzQ5NzcsIDM0OTg1LCAzNDk5MywgMzUwMDQsIDM1MDE1LCAzNTAyMywgMzUwMzEsIDM1MDM5LCAKLSAgICAzNTA1MCwgMzUwNTgsIDM1MDY2LCAzNTA3NCwgMzUwODIsIDM1MDkwLCAzNTA5NiwgMzUxMDIsIDAsIDAsIDM1MTA1LCAKLSAgICAzNTExNiwgMzUxMjQsIDAsIDM1MTM1LCAzNTE0MywgMzUxNTQsIDM1MTYyLCAzNTE3MCwgMzUxNzgsIDM1MTg2LCAzNTE5NCwgCi0gICAgMzUxOTcsIDAsIDM1MjAwLCAzNTIwNCwgMzUyMDgsIDM1MjEyLCAzNTIxNiwgMzUyMjAsIDM1MjI0LCAzNTIyOCwgMzUyMzIsIAotICAgIDM1MjM2LCAzNTI0MCwgMzUyNDQsIDM1MjUwLCAzNTI1NiwgMzUyNjIsIDM1MjY1LCAzNTI2OCwgMzUyNzAsIDM1Mjc0LCAKLSAgICAzNTI3OCwgMzUyODIsIDM1Mjg2LCAzNTI4OCwgMzUyOTIsIDM1Mjk2LCAzNTMwMiwgMzUzMDgsIDM1MzE1LCAzNTMyMiwgCi0gICAgMzUzMjcsIDM1MzMyLCAzNTMzOCwgMzUzNDQsIDM1MzQ2LCAzNTM0OSwgMzUzNTEsIDM1MzU1LCAzNTM1OSwgMzUzNjMsIAotICAgIDM1MzY2LCAzNTM3MCwgMzUzNzQsIDM1Mzc4LCAzNTM4MiwgMzUzODYsIDM1MzkyLCAzNTM5NiwgMzU0MDAsIDM1NDA2LCAKLSAgICAzNTQxMSwgMzU0MTgsIDM1NDIwLCAzNTQyMywgMzU0MjcsIDM1NDMwLCAzNTQzNCwgMzU0MzksIDM1NDQxLCAzNTQ1MCwgCi0gICAgMzU0NTksIDM1NDYyLCAzNTQ2NiwgMzU0NjgsIDM1NDcwLCAzNTQ3MiwgMzU0NzUsIDM1NDgxLCAzNTQ4MywgMzU0ODcsIAotICAgIDM1NDkxLCAzNTQ5OCwgMzU1MDUsIDM1NTA5LCAzNTUxNCwgMzU1MTksIDM1NTI0LCAzNTUyOCwgMzU1MzIsIDM1NTM2LCAKLSAgICAzNTUzOSwgMzU1NDIsIDM1NTQ2LCAzNTU1MywgMzU1NTgsIDM1NTYyLCAzNTU2NiwgMzU1NzEsIDM1NTc1LCAzNTU3OSwgCi0gICAgMzU1ODQsIDM1NTg5LCAzNTU5MywgMzU1OTcsIDM1NjAxLCAzNTYwMywgMzU2MDgsIDM1NjEzLCAzNTYxNywgMzU2MjEsIAotICAgIDM1NjI1LCAzNTYyOSwgMCwgMCwgMCwgMCwgMCwgMzU2MzMsIDM1NjM5LCAzNTY0NSwgMzU2NTEsIDM1NjU3LCAzNTY2MiwgCi0gICAgMzU2NjcsIDM1NjcxLCAwLCAwLCAzNTY3NywgMzU2ODAsIDM1NjgzLCAzNTY4NiwgMzU2ODksIDM1NjkyLCAzNTY5NSwgCi0gICAgMzU2OTksIDM1NzAzLCAzNTcwOCwgMzU3MTMsIDM1NzE4LCAzNTcyNCwgMzU3MjgsIDM1NzMxLCAzNTczNCwgMzU3MzcsIAotICAgIDM1NzQwLCAzNTc0MywgMzU3NDYsIDM1NzQ5LCAzNTc1MiwgMzU3NTUsIDM1NzU5LCAzNTc2MywgMzU3NjgsIDM1NzczLCAwLCAKLSAgICAzNTc3OCwgMzU3ODQsIDM1NzkwLCAzNTc5NiwgMzU4MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDM1ODEwLCAzNTgxMywgMzU4MTYsIDM1ODE5LCAzNTgyNCwgMzU4MjcsIDM1ODMwLCAzNTgzMywgMzU4MzYsIDM1ODM5LCAKLSAgICAzNTg0MiwgMzU4NDYsIDM1ODQ5LCAzNTg1MiwgMzU4NTUsIDM1ODU4LCAzNTg2MSwgMzU4NjYsIDM1ODY5LCAzNTg3MiwgCi0gICAgMzU4NzUsIDM1ODc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAzNTg4MSwgMzU4ODYsIDM1ODkxLCAzNTg5OCwgMzU5MDYsIDM1OTExLCAzNTkxNiwgMzU5MjAsIAotICAgIDM1OTI0LCAzNTkyOSwgMzU5MzYsIDM1OTQzLCAzNTk0NywgMzU5NTIsIDM1OTU3LCAzNTk2MiwgMzU5NjcsIDM1OTc0LCAKLSAgICAzNTk3OSwgMzU5ODQsIDM1OTg5LCAzNTk5OCwgMzYwMDUsIDM2MDExLCAzNjAxNSwgMzYwMjAsIDM2MDI2LCAzNjAzMSwgCi0gICAgMzYwMzgsIDM2MDQ2LCAzNjA1NCwgMzYwNTgsIDM2MDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAzNjA2NiwgMzYwNzAsIDM2MDc3LCAzNjA4MSwgMzYwODUsIDM2MDkwLCAzNjA5NCwgMzYwOTgsIDM2MTAyLCAKLSAgICAzNjEwNCwgMzYxMDgsIDM2MTExLCAzNjExNCwgMzYxMTgsIDM2MTIxLCAzNjEyNSwgMzYxMzMsIDM2MTM2LCAzNjE0MCwgCi0gICAgMzYxNDMsIDM2MTQ2LCAzNjE1MiwgMzYxNTUsIDM2MTU4LCAzNjE2NCwgMzYxNjgsIDM2MTcyLCAzNjE3NiwgMzYxNzksIAotICAgIDM2MTgzLCAzNjE4NiwgMzYxOTAsIDM2MTkyLCAzNjE5NSwgMzYxOTgsIDM2MjAyLCAzNjIwNCwgMzYyMDgsIDM2MjExLCAKLSAgICAzNjIxNCwgMzYyMTksIDM2MjI0LCAzNjIzMCwgMzYyMzMsIDM2MjM2LCAzNjI0MCwgMzYyNDUsIDM2MjQ4LCAzNjI1MSwgCi0gICAgMzYyNTQsIDM2MjU4LCAzNjI2MiwgMzYyNjUsIDM2MjY4LCAzNjI3MCwgMzYyNzMsIDM2Mjc2LCAzNjI3OSwgMzYyODMsIAotICAgIDM2Mjg4LCAzNjI5MSwgMzYyOTUsIDM2Mjk5LCAzNjMwMywgMzYzMDcsIDM2MzEyLCAzNjMxNiwgMzYzMjAsIDM2MzI0LCAKLSAgICAzNjMyOSwgMzYzMzQsIDM2MzM5LCAzNjM0MywgMzYzNDcsIDM2MzUyLCAzNjM1NiwgMzYzNTksIDM2MzYyLCAzNjM2NCwgCi0gICAgMzYzNjgsIDAsIDAsIDAsIDM2Mzc0LCAzNjM4MSwgMzYzODgsIDM2Mzk1LCAzNjQwMiwgMzY0MDksIDM2NDE3LCAzNjQyNCwgCi0gICAgMzY0MzIsIDM2NDM5LCAzNjQ0NiwgMzY0NTQsIDM2NDYyLCAzNjQ2NywgMzY0NzEsIDM2NDc1LCAzNjQ3OSwgMzY0ODMsIAotICAgIDM2NDg3LCAzNjQ5MSwgMzY0OTUsIDM2NDk5LCAzNjUwMywgMzY1MDgsIDM2NTEzLCAzNjUxOCwgMzY1MjMsIDM2NTI5LCAKLSAgICAzNjUzNiwgMzY1NDIsIDM2NTQ3LCAzNjU1MiwgMzY1NTcsIDM2NTYyLCAzNjU2NywgMzY1NzIsIDM2NTc3LCAzNjU4MiwgCi0gICAgMzY1ODcsIDM2NTkzLCAzNjU5OSwgMzY2MDUsIDM2NjExLCAzNjYxOCwgMzY2MjYsIDM2NjMzLCAzNjY0MywgMzY2NTAsIAotICAgIDM2NjU3LCAzNjY2NCwgMzY2NzAsIDM2Njc4LCAzNjY4NiwgMzY2OTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NzAxLCAKLSAgICAzNjcwMywgMzY3MDYsIDM2NzA4LCAzNjcxMSwgMzY3MTQsIDM2NzE3LCAzNjcyMiwgMzY3MjcsIDM2NzMyLCAzNjczNywgCi0gICAgMzY3NDEsIDM2NzQ1LCAzNjc0OSwgMzY3NTMsIDM2NzU4LCAzNjc2NCwgMzY3NjksIDM2Nzc1LCAzNjc4MCwgMzY3ODUsIAotICAgIDM2NzkwLCAzNjc5NiwgMzY4MDEsIDM2ODA3LCAzNjgxMywgMzY4MTcsIDM2ODIxLCAzNjgyNiwgMzY4MzEsIDM2ODM2LCAKLSAgICAzNjg0MSwgMzY4NDYsIDM2ODU0LCAzNjg2MiwgMzY4NzAsIDM2ODc4LCAzNjg4NSwgMzY4OTMsIDM2OTAwLCAzNjkwNywgCi0gICAgMzY5MTUsIDM2OTI1LCAzNjkzMiwgMzY5MzksIDM2OTQ2LCAzNjk1MywgMzY5NjEsIDM2OTY5LCAzNjk3NiwgMzY5ODMsIAotICAgIDM2OTkxLCAzNjk5OSwgMzcwMDQsIDM3MDEyLCAzNzAxNywgMzcwMjIsIDM3MDI4LCAzNzAzMywgMzcwMzksIDM3MDQ2LCAKLSAgICAzNzA1MywgMzcwNTgsIDM3MDY0LCAzNzA2OSwgMzcwNzIsIDM3MDc2LCAzNzA3OSwgMzcwODMsIDM3MDg3LCAzNzA5MSwgCi0gICAgMzcwOTcsIDM3MTAzLCAzNzEwOSwgMzcxMTUsIDM3MTE5LCAzNzEyMywgMzcxMjcsIDM3MTMxLCAzNzEzNywgMzcxNDMsIAotICAgIDM3MTQ3LCAzNzE1MiwgMzcxNTYsIDM3MTYxLCAzNzE2NSwgMzcxNjksIDM3MTcyLCAzNzE3NiwgMzcxNzksIDM3MTgzLCAKLSAgICAzNzE5MCwgMzcxOTgsIDM3MjA5LCAzNzIyMCwgMzcyMjUsIDM3MjM0LCAzNzI0MSwgMzcyNDksIDM3MjU3LCAzNzI2MSwgCi0gICAgMzcyNjcsIDM3Mjc1LCAzNzI3OSwgMzcyODQsIDM3Mjg5LCAzNzI5NSwgMzczMDEsIDM3MzA3LCAzNzMxNCwgMzczMTgsIAotICAgIDM3MzIyLCAzNzMyNywgMzczMzAsIDM3MzMyLCAzNzMzNiwgMzczNDAsIDM3MzQ3LCAzNzM1MSwgMzczNTMsIDM3MzU1LCAKLSAgICAzNzM1OSwgMzczNjYsIDM3MzcxLCAzNzM3NywgMzczODYsIDM3MzkzLCAzNzM5OCwgMzc0MDIsIDM3NDA2LCAzNzQxMCwgCi0gICAgMzc0MTMsIDM3NDE2LCAzNzQxOSwgMzc0MjMsIDM3NDI3LCAzNzQzMSwgMzc0MzUsIDM3NDM5LCAzNzQ0MiwgMzc0NDYsIAotICAgIDM3NDUwLCAzNzQ1MywgMzc0NTUsIDM3NDU4LCAzNzQ2MCwgMzc0NjQsIDM3NDY4LCAzNzQ3MCwgMzc0NzUsIDM3NDc4LCAKLSAgICAzNzQ4MiwgMzc0ODYsIDM3NDkwLCAzNzQ5MiwgMzc0OTQsIDM3NDk2LCAzNzQ5OSwgMzc1MDMsIDM3NTA3LCAzNzUxMSwgCi0gICAgMzc1MTUsIDM3NTE5LCAzNzUyNSwgMzc1MzEsIDM3NTMzLCAzNzUzNSwgMzc1MzcsIDM3NTM5LCAzNzU0MiwgMzc1NDQsIAotICAgIDM3NTQ4LCAzNzU1MCwgMzc1NTQsIDM3NTU2LCAzNzU2MSwgMzc1NjUsIDM3NTY5LCAzNzU3MSwgMzc1NzQsIDM3NTc4LCAKLSAgICAzNzU4MywgMzc1ODcsIDM3NTk2LCAzNzYwNiwgMzc2MTAsIDM3NjE1LCAzNzYyMSwgMzc2MjQsIDM3NjI4LCAzNzYzMSwgCi0gICAgMzc2MzYsIDM3NjQwLCAzNzY0NiwgMzc2NTAsIDM3NjYxLCAzNzY2OSwgMzc2NzMsIDM3Njc3LCAzNzY4MywgMzc2ODcsIAotICAgIDM3NjkwLCAzNzY5MiwgMzc2OTUsIDM3Njk5LCAzNzcwMywgMzc3MDksIDM3NzEzLCAzNzcxNywgMzc3MjAsIDM3NzIzLCAKLSAgICAzNzcyNywgMzc3MzIsIDM3NzM3LCAzNzc0MiwgMzc3NDcsIDM3NzUyLCAzNzc1OSwgMzc3NjYsIDM3NzcwLCAzNzc3NCwgCi0gICAgMzc3NzYsIDM3NzgwLCAzNzc4MywgMzc3ODYsIDM3Nzk0LCAzNzgwMiwgMzc4MDgsIDM3ODE0LCAzNzgyMywgMzc4MzIsIAotICAgIDM3ODM3LCAzNzg0MiwgMzc4NTAsIDM3ODU4LCAzNzg2MCwgMzc4NjIsIDM3ODY3LCAzNzg3MiwgMzc4NzgsIDM3ODg0LCAKLSAgICAzNzg4OSwgMzc4OTQsIDM3ODk4LCAzNzkwMiwgMzc5MDgsIDM3OTE0LCAzNzkyMCwgMzc5MjYsIDM3OTM2LCAzNzk0NiwgCi0gICAgMzc5NTMsIDM3OTYwLCAzNzk2MiwgMzc5NjYsIDM3OTcwLCAzNzk3NSwgMzc5ODAsIDM3OTg3LCAzNzk5NCwgMzc5OTcsIAotICAgIDM4MDAwLCAzODAwMywgMzgwMDYsIDM4MDA5LCAzODAxNCwgMzgwMTgsIDM4MDIzLCAzODAyOCwgMzgwMzEsIDM4MDM0LCAKLSAgICAzODAzOCwgMzgwNDIsIDM4MDQ2LCAzODA1MSwgMzgwNTQsIDM4MDU3LCAzODA2MCwgMzgwNjMsIDM4MDY1LCAzODA2NywgCi0gICAgMzgwNjksIDM4MDcxLCAzODA3OSwgMzgwODcsIDM4MDkyLCAzODA5NSwgMzgxMDAsIDM4MTEwLCAzODExNiwgMzgxMjIsIAotICAgIDM4MTI4LCAzODEzNiwgMzgxNDQsIDM4MTU1LCAzODE1OSwgMzgxNjMsIDM4MTY1LCAzODE3MSwgMzgxNzMsIDM4MTc1LCAKLSAgICAzODE3NywgMzgxNzksIDM4MTg1LCAzODE4OCwgMzgxOTQsIDM4MjAwLCAzODIwNCwgMzgyMDgsIDM4MjEyLCAzODIxNSwgCi0gICAgMzgyMTksIDM4MjIzLCAzODIyNSwgMzgyMzQsIDM4MjQzLCAzODI0OCwgMzgyNTMsIDM4MjU4LCAzODI2NCwgMzgyNzAsIAotICAgIDM4MjczLCAzODI3NiwgMzgyNzksIDM4MjgyLCAzODI4NCwgMzgyODksIDM4Mjk0LCAzODI5OSwgMzgzMDUsIDM4MzExLCAKLSAgICAzODMxOCwgMzgzMjUsIDM4MzMwLCAzODMzNSwgMzgzNDAsIDM4MzQ1LCAzODM1MywgMzgzNjEsIDM4MzY5LCAzODM3NywgCi0gICAgMzgzODUsIDM4MzkzLCAzODQwMSwgMzg0MDksIDM4NDE3LCAzODQyNSwgMzg0MzIsIDM4NDQzLCAzODQ1MiwgMzg0NjYsIAotICAgIDM4NDY5LCAzODQ3NCwgMzg0ODAsIDM4NDg2LCAzODQ5MywgMzg1MDcsIDM4NTIyLCAzODUyOCwgMzg1MzQsIDM4NTQxLCAKLSAgICAzODU0NywgMzg1NTUsIDM4NTYxLCAzODU3NCwgMzg1ODgsIDM4NTkzLCAzODU5OSwgMzg2MDYsIDM4NjA5LCAzODYxMiwgCi0gICAgMzg2MTQsIDM4NjE3LCAzODYyMCwgMzg2MjIsIDM4NjI0LCAzODYyOCwgMzg2MzEsIDM4NjM0LCAzODYzNywgMzg2NDAsIAotICAgIDM4NjQ1LCAzODY1MCwgMzg2NTUsIDM4NjYwLCAzODY2MywgMzg2NjYsIDM4NjY4LCAzODY3MCwgMzg2NzIsIDM4Njc2LCAKLSAgICAzODY4MCwgMzg2ODQsIDM4NjkwLCAzODY5MywgMzg2OTUsIDM4Njk3LCAzODcwMiwgMzg3MDcsIDM4NzEyLCAzODcxNywgCi0gICAgMzg3MjIsIDM4NzI3LCAzODcyOSwgMzg3MzEsIDM4NzQwLCAzODc0NCwgMzg3NTEsIDM4NzYwLCAzODc2MiwgMzg3NjcsIAotICAgIDM4NzcyLCAzODc3OSwgMzg3ODMsIDM4Nzg1LCAzODc4OSwgMzg3OTEsIDM4Nzk1LCAzODc5OSwgMzg4MDMsIDM4ODA1LCAKLSAgICAzODgwNywgMzg4MDksIDM4ODE0LCAzODgyMSwgMzg4MjgsIDM4ODM1LCAzODg0MiwgMzg4NDksIDM4ODU2LCAzODg2MywgCi0gICAgMzg4NzAsIDM4ODc2LCAzODg4MiwgMzg4ODksIDM4ODk2LCAzODkwMywgMzg5MTAsIDM4OTE2LCAzODkyMiwgMzg5MjksIAotICAgIDM4OTM2LCAzODk0MywgMzg5NTEsIDM4OTU4LCAzODk2NiwgMzg5NzMsIDM4OTgxLCAzODk4OCwgMzg5OTYsIDM5MDA0LCAKLSAgICAzOTAxMSwgMzkwMTksIDM5MDI2LCAzOTAzNCwgMzkwNDEsIDM5MDQ5LCAzOTA1NiwgMzkwNjMsIDM5MDcwLCAzOTA3NywgCi0gICAgMzkwODQsIDM5MDkyLCAzOTA5OSwgMzkxMDYsIDM5MTEzLCAzOTEyMCwgMzkxMjYsIDM5MTMyLCAzOTEzOCwgMzkxNDQsIAotICAgIDM5MTUyLCAzOTE2MCwgMzkxNjYsIDM5MTcyLCAzOTE3OCwgMzkxODQsIDM5MTg5LCAzOTE5NSwgMzkyMDIsIDM5MjEwLCAKLSAgICAzOTIxNywgMzkyMjQsIDM5MjMxLCAzOTIzNiwgMzkyNDEsIDM5MjQ2LCAzOTI1MywgMzkyNjAsIDM5MjY3LCAzOTI3NCwgCi0gICAgMzkyNzksIDM5MjgzLCAzOTI5MiwgMzkyOTgsIDM5MzAxLCAzOTMwOSwgMzkzMTIsIDM5MzE3LCAzOTMyMiwgMzkzMjUsIAotICAgIDM5MzI4LCAzOTMzNiwgMzkzMzksIDM5MzQ0LCAzOTM0NywgMzkzNTQsIDM5MzU5LCAzOTM2NywgMzkzNzAsIDM5MzczLCAKLSAgICAzOTM3NiwgMzkzODEsIDM5Mzg2LCAzOTM4OSwgMzkzOTIsIDM5Mzk5LCAzOTQwMiwgMzk0MDcsIDM5NDE0LCAzOTQxOCwgCi0gICAgMzk0MjIsIDM5NDI3LCAzOTQzMiwgMzk0MzgsIDM5NDQzLCAzOTQ0OCwgMzk0NTQsIDM5NDU5LCAzOTQ2NCwgMzk0NzIsIAotICAgIDM5NDc4LCAzOTQ4NSwgMzk0OTMsIDM5NDk5LCAzOTUwNiwgMzk1MTQsIDM5NTIzLCAzOTUzMCwgMzk1MzYsIDM5NTQ0LCAKLSAgICAzOTU1MywgMzk1NjAsIDM5NTY0LCAzOTU2OSwgMzk1ODEsIDM5NTkzLCAzOTU5NywgMzk2MDEsIDM5NjA1LCAzOTYwOSwgCi0gICAgMzk2MTksIDM5NjIzLCAzOTYyOCwgMzk2MzMsIDM5NjM4LCAzOTY0MywgMzk2NDgsIDM5NjUzLCAzOTY2MywgMzk2NzMsIAotICAgIDM5NjgxLCAzOTY5MSwgMzk3MDEsIDM5NzA5LCAzOTcxOSwgMzk3MjksIDM5NzM3LCAzOTc0NywgMzk3NTcsIDM5NzY1LCAKLSAgICAzOTc3MywgMzk3ODMsIDM5NzkzLCAzOTc5NiwgMzk3OTksIDM5ODAyLCAzOTgwNywgMzk4MTEsIDM5ODE3LCAzOTgyNCwgCi0gICAgMzk4MzEsIDM5ODM5LCAzOTg0NiwgMzk4NTAsIDM5ODU0LCAzOTg1OCwgMzk4NjIsIDM5ODY0LCAzOTg2OCwgMzk4NzIsIAotICAgIDM5ODc3LCAzOTg4MiwgMzk4ODksIDM5ODk2LCAzOTg5OSwgMzk5MDYsIDM5OTA4LCAzOTkxMCwgMzk5MTQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5OTE4LCAKLSAgICAzOTkyMiwgMzk5MjksIDM5OTM2LCAzOTk0MywgMzk5NTAsIDM5OTU0LCAzOTk1OCwgMzk5NjIsIDM5OTY2LCAzOTk3MSwgCi0gICAgMzk5NzcsIDM5OTgyLCAzOTk4NywgMzk5OTMsIDM5OTk5LCA0MDAwNSwgNDAwMTMsIDQwMDIwLCA0MDAyNywgNDAwMzQsIAotICAgIDQwMDQxLCA0MDA0NywgNDAwNTMsIDQwMDYyLCA0MDA2NiwgNDAwNzMsIDQwMDc3LCA0MDA4MSwgNDAwODcsIDQwMDkzLCAKLSAgICA0MDA5OSwgNDAxMDUsIDQwMTA5LCA0MDExMywgNDAxMTYsIDQwMTIwLCA0MDEyNCwgNDAxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMTM2LCA0MDEzOSwgCi0gICAgNDAxNDMsIDQwMTQ3LCA0MDE1MywgNDAxNTksIDQwMTY1LCA0MDE3MywgNDAxODAsIDQwMTg0LCA0MDE5MiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAxOTcsIDQwMjAwLCAKLSAgICA0MDIwMywgNDAyMDYsIDQwMjA5LCA0MDIxMiwgNDAyMTUsIDQwMjE4LCA0MDIyMSwgNDAyMjQsIDQwMjI4LCA0MDIzMiwgCi0gICAgNDAyMzYsIDQwMjQwLCA0MDI0NCwgNDAyNDgsIDQwMjUyLCA0MDI1NiwgNDAyNjAsIDQwMjY0LCA0MDI2OCwgNDAyNzEsIAotICAgIDQwMjc0LCA0MDI3NywgNDAyODAsIDQwMjgzLCA0MDI4NiwgNDAyODksIDQwMjkyLCA0MDI5NSwgNDAyOTksIDQwMzAzLCAKLSAgICA0MDMwNywgNDAzMTEsIDQwMzE1LCA0MDMxOSwgNDAzMjMsIDQwMzI3LCA0MDMzMSwgNDAzMzUsIDQwMzM5LCA0MDM0NSwgCi0gICAgNDAzNTEsIDQwMzU3LCA0MDM2NCwgNDAzNzEsIDQwMzc4LCA0MDM4NSwgNDAzOTIsIDQwMzk5LCA0MDQwNiwgNDA0MTMsIAotICAgIDQwNDIwLCA0MDQyNywgNDA0MzQsIDQwNDQxLCA0MDQ0OCwgNDA0NTUsIDQwNDYyLCA0MDQ2OSwgNDA0NzYsIDQwNDgxLCAKLSAgICA0MDQ4NywgNDA0OTMsIDQwNDk5LCA0MDUwNCwgNDA1MTAsIDQwNTE1LCA0MDUyMCwgNDA1MjUsIDQwNTMxLCA0MDUzNywgCi0gICAgNDA1NDIsIDQwNTQ3LCA0MDU1MiwgNDA1NTcsIDQwNTYzLCA0MDU2OSwgNDA1NzQsIDQwNTc5LCA0MDU4NSwgNDA1OTAsIAotICAgIDQwNTk1LCA0MDYwMSwgNDA2MDcsIDQwNjEzLCA0MDYxOSwgNDA2MjQsIDQwNjMwLCA0MDYzNiwgNDA2NDIsIDQwNjQ3LCAKLSAgICA0MDY1MywgNDA2NTgsIDQwNjYzLCA0MDY2OCwgNDA2NzQsIDQwNjgwLCA0MDY4NSwgNDA2OTAsIDQwNjk1LCA0MDcwMCwgCi0gICAgNDA3MDYsIDQwNzEyLCA0MDcxNywgNDA3MjIsIDQwNzI4LCA0MDczMywgNDA3MzgsIDQwNzQ0LCA0MDc1MCwgNDA3NTYsIAotICAgIDQwNzYyLCA0MDc2NywgNDA3NzMsIDQwNzc5LCA0MDc4NSwgNDA3OTAsIDQwNzk2LCA0MDgwMSwgNDA4MDYsIDQwODExLCAKLSAgICA0MDgxNywgNDA4MjMsIDQwODI4LCA0MDgzMywgNDA4MzgsIDQwODQzLCA0MDg0OSwgNDA4NTUsIDQwODYwLCA0MDg2NSwgCi0gICAgNDA4NzEsIDQwODc2LCA0MDg4MSwgNDA4ODcsIDQwODkzLCA0MDg5OSwgNDA5MDUsIDQwOTA5LCA0MDkxNSwgNDA5MjEsIAotICAgIDQwOTI3LCA0MDkzMywgNDA5MzksIDQwOTQ1LCA0MDk1MSwgNDA5NTcsIDQwOTYzLCA0MDk2OSwgNDA5NzMsIDQwOTc3LCAKLSAgICA0MDk4MSwgNDA5ODUsIDQwOTg5LCA0MDk5MywgNDA5OTcsIDQxMDAxLCA0MTAwNSwgNDEwMTAsIDQxMDE2LCA0MTAyMSwgCi0gICAgNDEwMjYsIDQxMDMxLCA0MTAzNiwgNDEwNDUsIDQxMDU0LCA0MTA2MywgNDEwNzIsIDQxMDgxLCA0MTA5MCwgNDEwOTksIAotICAgIDQxMTA4LCA0MTExNSwgNDExMjMsIDQxMTMxLCA0MTEzOCwgNDExNDUsIDQxMTUzLCA0MTE2MSwgNDExNjgsIDQxMTc1LCAKLSAgICA0MTE4MywgNDExOTEsIDQxMTk4LCA0MTIwNSwgNDEyMTMsIDQxMjIxLCA0MTIyOCwgNDEyMzUsIDQxMjQzLCA0MTI1MiwgCi0gICAgNDEyNjEsIDQxMjY5LCA0MTI3OCwgNDEyODcsIDQxMjk0LCA0MTMwMSwgNDEzMDksIDQxMzE4LCA0MTMyNywgNDEzMzUsIAotICAgIDQxMzQ0LCA0MTM1MywgNDEzNjAsIDQxMzY3LCA0MTM3NiwgNDEzODUsIDQxMzkzLCA0MTQwMSwgNDE0MTAsIDQxNDE5LCAKLSAgICA0MTQyNiwgNDE0MzMsIDQxNDQyLCA0MTQ1MSwgNDE0NTksIDQxNDY3LCA0MTQ3NiwgNDE0ODUsIDQxNDkyLCA0MTQ5OSwgCi0gICAgNDE1MDgsIDQxNTE3LCA0MTUyNSwgNDE1MzQsIDQxNTQzLCA0MTU1MSwgNDE1NjEsIDQxNTcxLCA0MTU4MSwgNDE1OTEsIAotICAgIDQxNjAwLCA0MTYwOSwgNDE2MTgsIDQxNjI3LCA0MTYzNCwgNDE2NDIsIDQxNjUwLCA0MTY1OCwgNDE2NjYsIDQxNjcxLCAKLSAgICA0MTY3NiwgNDE2ODUsIDQxNjkzLCA0MTcwMCwgNDE3MDksIDQxNzE3LCA0MTcyNCwgNDE3MzMsIDQxNzQxLCA0MTc0OCwgCi0gICAgNDE3NTcsIDQxNzY1LCA0MTc3MiwgNDE3ODEsIDQxNzg5LCA0MTc5NiwgNDE4MDUsIDQxODEzLCA0MTgyMCwgNDE4MjksIAotICAgIDQxODM3LCA0MTg0NCwgNDE4NTMsIDQxODYxLCA0MTg2OCwgNDE4NzcsIDQxODg1LCA0MTg5MiwgNDE5MDEsIDQxOTEwLCAKLSAgICA0MTkxOSwgNDE5MjgsIDQxOTQwLCA0MTk1MiwgNDE5NTksIDQxOTY0LCA0MTk2OSwgNDE5NzQsIDQxOTc5LCA0MTk4NCwgCi0gICAgNDE5ODksIDQxOTk0LCA0MTk5OSwgNDIwMDcsIDQyMDE1LCA0MjAyMywgNDIwMzEsIDQyMDM2LCA0MjA0MiwgNDIwNDgsIAotICAgIDQyMDU0LCA0MjA1OCwgNDIwNjUsIDQyMDcxLCA0MjA3OCwgNDIwODIsIDQyMDg5LCA0MjA5NSwgNDIxMDIsIDQyMTA2LCAKLSAgICA0MjExMiwgNDIxMTgsIDQyMTI0LCA0MjEyOCwgNDIxMzEsIDQyMTM1LCA0MjEzOSwgNDIxNDYsIDQyMTUyLCA0MjE1NywgCi0gICAgNDIxNjIsIDQyMTY4LCA0MjE4MCwgNDIxODksIDQyMjAyLCA0MjIxNSwgNDIyMjEsIDQyMjMwLCA0MjI0MiwgNDIyNDUsIAotICAgIDQyMjQ4LCA0MjI1NSwgNDIyNjMsIDQyMjY4LCA0MjI3MywgNDIyODEsIDQyMjkxLCA0MjMwMSwgNDIzMDksIDQyMzEzLCAKLSAgICA0MjMxNywgNDIzMjAsIDQyMzIzLCA0MjMyNywgNDIzMzEsIDQyMzM0LCA0MjMzNywgNDIzNDIsIDQyMzQ3LCA0MjM1MywgCi0gICAgNDIzNTksIDQyMzY0LCA0MjM2OSwgNDIzNzUsIDQyMzgxLCA0MjM4NiwgNDIzOTEsIDQyMzk2LCA0MjQwMSwgNDI0MDcsIAotICAgIDQyNDEzLCA0MjQxOCwgNDI0MjMsIDQyNDI5LCA0MjQzNSwgNDI0NDAsIDQyNDQ1LCA0MjQ0OCwgNDI0NTEsIDQyNDYwLCAKLSAgICA0MjQ2MiwgNDI0NjQsIDQyNDY3LCA0MjQ3MSwgNDI0NzcsIDQyNDc5LCA0MjQ4MiwgNDI0ODksIDQyNDk2LCA0MjUwMywgCi0gICAgNDI1MTEsIDQyNTIxLCA0MjUzNSwgNDI1NDAsIDQyNTQ1LCA0MjU0OSwgNDI1NTQsIDQyNTYyLCA0MjU2OSwgNDI1NzgsIAotICAgIDQyNTg3LCA0MjU5NSwgNDI2MDMsIDQyNjA4LCA0MjYxMiwgNDI2MTcsIDQyNjIyLCA0MjYyOCwgNDI2MzQsIDQyNjM3LCAKLSAgICA0MjY0MywgNDI2NDksIDQyNjU5LCA0MjY2OCwgNDI2NzYsIDQyNjg0LCA0MjY5MywgNDI3MDIsIDQyNzA2LCA0MjcxNCwgCi0gICAgNDI3MjEsIDQyNzI4LCA0MjczNiwgNDI3NDUsIDQyNzUzLCA0Mjc2MSwgNDI3NzAsIDQyNzc1LCA0Mjc4MCwgNDI3ODQsIAotICAgIDQyNzg5LCA0Mjc5NCwgNDI4MDAsIDQyODA2LCA0MjgxMCwgNDI4MTYsIDQyODE4LCA0MjgyMCwgNDI4MjIsIDQyODI0LCAKLSAgICA0MjgyNywgNDI4MzAsIDQyODMyLCA0MjgzNCwgNDI4MzYsIDQyODQwLCA0Mjg0NCwgNDI4NDYsIDQyODQ4LCA0Mjg1MSwgCi0gICAgNDI4NTQsIDQyODU4LCA0Mjg2NCwgNDI4NzAsIDQyODcyLCA0Mjg3OSwgNDI4ODMsIDQyODg4LCA0Mjg5MywgNDI4OTUsIAotICAgIDQyOTA0LCA0MjkxMCwgNDI5MTYsIDQyOTIyLCA0MjkyOCwgNDI5MzQsIDQyOTQwLCA0Mjk0NSwgNDI5NDgsIDQyOTUxLCAKLSAgICA0Mjk1NCwgNDI5NTYsIDQyOTU4LCA0Mjk2MiwgNDI5NjYsIDQyOTcxLCA0Mjk3NiwgNDI5ODEsIDQyOTg0LCA0Mjk4OCwgCi0gICAgNDI5OTMsIDQyOTk2LCA0MzAwMCwgNDMwMDUsIDQzMDEwLCA0MzAxNSwgNDMwMjAsIDQzMDI1LCA0MzAzMCwgNDMwMzUsIAotICAgIDQzMDQwLCA0MzA0NSwgNDMwNTAsIDQzMDU1LCA0MzA2MCwgNDMwNjYsIDQzMDcyLCA0MzA3OCwgNDMwODAsIDQzMDgzLCAKLSAgICA0MzA4NSwgNDMwODgsIDQzMDkwLCA0MzA5MiwgNDMwOTQsIDQzMDk2LCA0MzA5OCwgNDMxMDAsIDQzMTAyLCA0MzEwNCwgCi0gICAgNDMxMDYsIDQzMTA4LCA0MzExMCwgNDMxMTIsIDQzMTE0LCA0MzExNiwgNDMxMTgsIDQzMTIwLCA0MzEyMiwgNDMxMjcsIAotICAgIDQzMTMyLCA0MzEzNywgNDMxNDIsIDQzMTQ3LCA0MzE1MiwgNDMxNTcsIDQzMTYyLCA0MzE2NywgNDMxNzIsIDQzMTc3LCAKLSAgICA0MzE4MiwgNDMxODcsIDQzMTkyLCA0MzE5NywgNDMyMDIsIDQzMjA3LCA0MzIxMiwgNDMyMTcsIDQzMjIyLCA0MzIyNiwgCi0gICAgNDMyMzAsIDQzMjM0LCA0MzI0MCwgNDMyNDYsIDQzMjUxLCA0MzI1NiwgNDMyNjEsIDQzMjY2LCA0MzI3MSwgNDMyNzYsIAotICAgIDQzMjg0LCA0MzI5MiwgNDMzMDAsIDQzMzA4LCA0MzMxNiwgNDMzMjQsIDQzMzMyLCA0MzM0MCwgNDMzNDYsIDQzMzUxLCAKLSAgICA0MzM1NiwgNDMzNjEsIDQzMzY0LCA0MzM2OCwgNDMzNzIsIDQzMzc2LCA0MzM4MCwgNDMzODQsIDQzMzg4LCA0MzM5NSwgCi0gICAgNDM0MDIsIDQzNDEwLCA0MzQxOCwgNDM0MjMsIDQzNDI4LCA0MzQzNSwgNDM0NDIsIDQzNDQ5LCA0MzQ1NiwgNDM0NTksIAotICAgIDQzNDYyLCA0MzQ2NywgNDM0NjksIDQzNDczLCA0MzQ3OCwgNDM0ODAsIDQzNDgyLCA0MzQ4NCwgNDM0ODYsIDQzNDkxLCAKLSAgICA0MzQ5NCwgNDM0OTYsIDAsIDAsIDQzNTAxLCA0MzUwNCwgNDM1MDgsIDQzNTEzLCA0MzUxOCwgNDM1MjYsIDQzNTMyLCAKLSAgICA0MzUzNywgNDM1NDgsIDQzNTU0LCA0MzU2MCwgNDM1NjUsIDQzNTcwLCA0MzU3NiwgNDM1NzksIDQzNTgyLCA0MzU4NywgCi0gICAgNDM1ODksIDQzNTkzLCA0MzU5NSwgNDM1OTcsIDQzNTk5LCA0MzYwMSwgNDM2MDMsIDQzNjA1LCA0MzYxMCwgNDM2MTIsIAotICAgIDQzNjE0LCA0MzYxNiwgMCwgMCwgMCwgNDM2MTgsIDQzNjIzLCA0MzYyOCwgNDM2MzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQzNjM4LCA0MzY0NCwgNDM2NDcsIDQzNjUyLCAwLCA0MzY1NSwgNDM2NjAsIDQzNjY0LCAKLSAgICA0MzY2NiwgMCwgMCwgNDM2NjgsIDQzNjcyLCA0MzY3NiwgNDM2ODAsIDQzNjgyLCA0MzY4NywgNDM2OTAsIDQzNjkzLCAKLSAgICA0MzY5NiwgNDM3MDAsIDQzNzA0LCA0MzcwOSwgNDM3MTMsIDQzNzE4LCA0MzcyMywgNDM3MjcsIDQzNzMzLCA0Mzc0MCwgCi0gICAgNDM3NDMsIDQzNzQ5LCA0Mzc1NCwgNDM3NTgsIDQzNzYzLCA0Mzc2OSwgNDM3NzUsIDQzNzgyLCA0Mzc4OCwgNDM3OTUsIDAsIAotICAgIDQzODAyLCA0MzgwOSwgNDM4MTMsIDQzODIwLCA0MzgyNiwgNDM4MzEsIDQzODM3LCA0Mzg0MSwgNDM4NDYsIDQzODQ5LCAKLSAgICA0Mzg1NSwgNDM4NjEsIDQzODY4LCA0Mzg3NiwgNDM4ODMsIDQzODkyLCA0MzkwMiwgNDM5MDksIDQzOTE1LCA0MzkxOSwgCi0gICAgNDM5MjcsIDQzOTMyLCA0Mzk0MSwgNDM5NDQsIDQzOTQ3LCA0Mzk1NiwgNDM5NjcsIDQzOTc0LCA0Mzk3NiwgNDM5ODIsIAotICAgIDQzOTg3LCA0Mzk4OSwgNDM5OTIsIDQzOTk2LCA0NDAwNCwgMCwgNDQwMTMsIDAsIDQ0MDE4LCA0NDAyNSwgNDQwMzMsIAotICAgIDQ0MDQwLCAwLCAwLCAwLCA0NDA0OCwgMCwgNDQwNTYsIDQ0MDU5LCA0NDA2MywgNDQwNjYsIDQ0MDc3LCA0NDA4NywgCi0gICAgNDQwOTcsIDAsIDAsIDQ0MTA2LCA0NDExNSwgNDQxMjEsIDQ0MTI5LCA0NDEzMywgNDQxNDEsIDQ0MTQ1LCA0NDE1MywgCi0gICAgNDQxNjAsIDQ0MTY3LCA0NDE3NiwgNDQxODUsIDQ0MTk1LCA0NDIwNSwgNDQyMTUsIDQ0MjI1LCA0NDIzNCwgNDQyNDMsIAotICAgIDQ0MjUzLCA0NDI2MywgNDQyNzIsIDQ0MjgxLCA0NDI4OCwgNDQyOTUsIDQ0MzAyLCA0NDMwOSwgNDQzMTYsIDQ0MzIzLCAKLSAgICA0NDMzMCwgNDQzMzcsIDQ0MzQ0LCA0NDM1MiwgNDQzNTgsIDQ0MzY0LCA0NDM3MCwgNDQzNzYsIDQ0MzgyLCA0NDM4OCwgCi0gICAgNDQzOTQsIDQ0NDAwLCA0NDQwNiwgNDQ0MTMsIDQ0NDIxLCA0NDQyOSwgNDQ0MzcsIDQ0NDQ1LCA0NDQ1MywgNDQ0NjEsIAotICAgIDQ0NDY5LCA0NDQ3NywgNDQ0ODUsIDQ0NDk0LCAwLCAwLCAwLCA0NDQ5OSwgNDQ1MDUsIDQ0NTA4LCA0NDUxNCwgNDQ1MjAsIAotICAgIDQ0NTI1LCA0NDUyOSwgNDQ1MzQsIDQ0NTQwLCA0NDU0NywgNDQ1NTAsIDQ0NTU3LCA0NDU2NCwgNDQ1NjgsIDQ0NTc3LCAKLSAgICA0NDU4NiwgNDQ1OTEsIDQ0NTk3LCA0NDYwMiwgNDQ2MDcsIDQ0NjE0LCA0NDYyMSwgNDQ2MjgsIDQ0NjM2LCAwLCA0NDY0NCwgCi0gICAgNDQ2NTMsIDQ0NjU4LCA0NDY2MiwgNDQ2NjksIDQ0NjczLCA0NDY4MCwgNDQ2ODgsIDQ0NjkzLCA0NDcwMSwgNDQ3MDUsIAotICAgIDQ0NzEwLCA0NDcxNCwgNDQ3MTksIDAsIDQ0NzIzLCA0NDcyOCwgNDQ3MzcsIDQ0NzM5LCA0NDc0MywgNDQ3NDcsIDQ0NzU0LCAKLSAgICA0NDc2MSwgNDQ3NjYsIDQ0Nzc0LCA0NDc4MCwgMCwgNDQ3ODYsIDAsIDAsIDAsIDQ0Nzg5LCA0NDc5NywgNDQ4MDEsIAotICAgIDQ0ODA4LCA0NDgxNSwgNDQ4MjMsIDQ0ODI4LCA0NDgzMywgNDQ4MzksIDQ0ODQ0LCA0NDg0OSwgNDQ4NTUsIDQ0ODYwLCAKLSAgICA0NDg2MywgNDQ4NjcsIDQ0ODcxLCA0NDg3OCwgNDQ4ODcsIDQ0ODkyLCA0NDkwMSwgNDQ5MTAsIDQ0OTE2LCA0NDkyMiwgCi0gICAgNDQ5MjcsIDQ0OTMyLCA0NDkzNywgNDQ5NDIsIDQ0OTQ4LCA0NDk1NCwgNDQ5NjIsIDQ0OTcwLCA0NDk3NiwgNDQ5ODIsIAotICAgIDQ0OTg3LCA0NDk5MiwgNDQ5OTksIDQ1MDA2LCA0NTAxMiwgNDUwMTUsIDQ1MDE4LCA0NTAyMiwgNDUwMjYsIDQ1MDMwLCAKLSAgICA0NTAzNSwgNDUwNDEsIDQ1MDQ3LCA0NTA1NCwgNDUwNjEsIDQ1MDY2LCA0NTA3MCwgNDUwNzQsIDQ1MDc4LCA0NTA4MiwgCi0gICAgNDUwODYsIDQ1MDkwLCA0NTA5NCwgNDUwOTgsIDQ1MTAyLCA0NTEwNiwgNDUxMTAsIDQ1MTE0LCA0NTExOCwgNDUxMjIsIAotICAgIDQ1MTI2LCA0NTEzMCwgNDUxMzQsIDQ1MTM4LCA0NTE0MiwgNDUxNDYsIDQ1MTUwLCA0NTE1NCwgNDUxNTgsIDQ1MTYyLCAKLSAgICA0NTE2NiwgNDUxNzAsIDQ1MTc0LCA0NTE3OCwgNDUxODIsIDQ1MTg2LCA0NTE5MCwgNDUxOTQsIDQ1MTk4LCA0NTIwMiwgCi0gICAgNDUyMDYsIDQ1MjEwLCA0NTIxNCwgNDUyMTgsIDQ1MjIyLCA0NTIyNiwgNDUyMzAsIDQ1MjM0LCA0NTIzOCwgNDUyNDIsIAotICAgIDQ1MjQ2LCA0NTI1MCwgNDUyNTQsIDQ1MjU4LCA0NTI2MiwgNDUyNjYsIDQ1MjcwLCA0NTI3NCwgNDUyNzgsIDQ1MjgyLCAKLSAgICA0NTI4NiwgNDUyOTAsIDQ1Mjk0LCA0NTI5OCwgNDUzMDIsIDQ1MzA2LCA0NTMxMCwgNDUzMTQsIDQ1MzE4LCA0NTMyMiwgCi0gICAgNDUzMjYsIDQ1MzMwLCA0NTMzNCwgNDUzMzgsIDQ1MzQyLCA0NTM0NiwgNDUzNTAsIDQ1MzU0LCA0NTM1OCwgNDUzNjIsIAotICAgIDQ1MzY2LCA0NTM3MCwgNDUzNzQsIDQ1Mzc4LCA0NTM4MiwgNDUzODYsIDQ1MzkwLCA0NTM5NCwgNDUzOTgsIDQ1NDAyLCAKLSAgICA0NTQwNiwgNDU0MTAsIDQ1NDE0LCA0NTQxOCwgNDU0MjIsIDQ1NDI2LCA0NTQzMCwgNDU0MzQsIDQ1NDM4LCA0NTQ0MiwgCi0gICAgNDU0NDYsIDQ1NDUwLCA0NTQ1NCwgNDU0NTgsIDQ1NDYyLCA0NTQ2NiwgNDU0NzAsIDQ1NDc0LCA0NTQ3OCwgNDU0ODIsIAotICAgIDQ1NDg2LCA0NTQ5MCwgNDU0OTQsIDQ1NDk4LCA0NTUwMiwgNDU1MDYsIDQ1NTEwLCA0NTUxNCwgNDU1MTgsIDQ1NTIyLCAKLSAgICA0NTUyNiwgNDU1MzAsIDQ1NTM0LCA0NTUzOCwgNDU1NDIsIDQ1NTQ2LCA0NTU1MCwgNDU1NTQsIDQ1NTU4LCA0NTU2MiwgCi0gICAgNDU1NjYsIDQ1NTcwLCA0NTU3NCwgNDU1NzgsIDQ1NTgyLCA0NTU4NiwgNDU1OTAsIDQ1NTk0LCA0NTU5OCwgNDU2MDIsIAotICAgIDQ1NjA2LCA0NTYxMCwgNDU2MTQsIDQ1NjE4LCA0NTYyMiwgNDU2MjYsIDQ1NjMwLCA0NTYzNCwgNDU2MzgsIDQ1NjQyLCAKLSAgICA0NTY0NiwgNDU2NTAsIDQ1NjU0LCA0NTY1OCwgNDU2NjIsIDQ1NjY2LCA0NTY3MCwgNDU2NzQsIDQ1Njc4LCA0NTY4MiwgCi0gICAgNDU2ODYsIDQ1NjkwLCA0NTY5NCwgNDU2OTgsIDQ1NzAyLCA0NTcwNiwgNDU3MTAsIDQ1NzE0LCA0NTcxOCwgNDU3MjIsIAotICAgIDQ1NzI2LCA0NTczMCwgNDU3MzQsIDQ1NzM4LCA0NTc0MiwgNDU3NDYsIDQ1NzUwLCA0NTc1NCwgNDU3NTgsIDQ1NzYyLCAKLSAgICA0NTc2NiwgNDU3NzAsIDQ1Nzc0LCA0NTc3OCwgNDU3ODIsIDQ1Nzg2LCA0NTc5MCwgNDU3OTQsIDQ1Nzk4LCA0NTgwMiwgCi0gICAgNDU4MDYsIDQ1ODEwLCA0NTgxNCwgNDU4MTgsIDQ1ODIyLCA0NTgyNiwgNDU4MzAsIDQ1ODM0LCA0NTgzOCwgNDU4NDIsIAotICAgIDQ1ODQ2LCA0NTg1MCwgNDU4NTQsIDQ1ODU4LCA0NTg2MiwgNDU4NjYsIDQ1ODcwLCA0NTg3NCwgNDU4NzgsIDQ1ODgyLCAKLSAgICA0NTg4NiwgNDU4OTAsIDQ1ODk0LCA0NTg5OCwgNDU5MDIsIDQ1OTA2LCA0NTkxMCwgNDU5MTQsIDQ1OTE4LCA0NTkyMiwgCi0gICAgNDU5MjYsIDQ1OTMwLCA0NTkzNCwgNDU5MzgsIDQ1OTQyLCA0NTk0NiwgNDU5NTAsIDQ1OTU0LCA0NTk1OCwgNDU5NjIsIAotICAgIDQ1OTY2LCA0NTk3MCwgNDU5NzQsIDQ1OTc4LCA0NTk4MiwgNDU5ODYsIDQ1OTkwLCA0NTk5NCwgNDU5OTgsIDQ2MDAyLCAKLSAgICA0NjAwNiwgNDYwMTAsIDQ2MDE0LCA0NjAxOCwgNDYwMjIsIDQ2MDI2LCA0NjAzMCwgNDYwMzQsIDQ2MDM4LCA0NjA0MiwgCi0gICAgNDYwNDYsIDQ2MDUwLCA0NjA1NCwgNDYwNTgsIDQ2MDYyLCA0NjA2NiwgNDYwNzAsIDQ2MDc0LCA0NjA3OCwgNDYwODIsIAotICAgIDQ2MDg2LCA0NjA5MCwgNDYwOTcsIDQ2MTA1LCA0NjExMSwgNDYxMTcsIDQ2MTI0LCA0NjEzMSwgNDYxMzcsIDQ2MTQzLCAKLSAgICA0NjE0OSwgNDYxNTUsIDQ2MTYwLCA0NjE2NSwgNDYxNzAsIDQ2MTc1LCA0NjE4MSwgNDYxODcsIDQ2MTk1LCA0NjIwMiwgCi0gICAgNDYyMDcsIDQ2MjEyLCA0NjIyMCwgNDYyMjksIDQ2MjM2LCA0NjI0NiwgNDYyNTcsIDQ2MjYwLCA0NjI2MywgNDYyNjcsIAotICAgIDQ2MjcxLCA0NjI3NywgNDYyODMsIDQ2MjkzLCA0NjMwMywgNDYzMTMsIDQ2MzIzLCA0NjMzMCwgNDYzMzcsIDQ2MzQ0LCAKLSAgICA0NjM1MSwgNDYzNjIsIDQ2MzczLCA0NjM4NCwgNDYzOTUsIDQ2NDA1LCA0NjQxNSwgNDY0MjcsIDQ2NDM5LCA0NjQ1MCwgCi0gICAgNDY0NjEsIDQ2NDczLCA0NjQ4NSwgNDY0OTQsIDQ2NTA0LCA0NjUxNCwgNDY1MjUsIDQ2NTM2LCA0NjU0MywgNDY1NTAsIAotICAgIDQ2NTU3LCA0NjU2NCwgNDY1NzQsIDQ2NTg0LCA0NjU5MSwgNDY1OTgsIDQ2NjA1LCA0NjYxMiwgNDY2MTksIDQ2NjI2LCAKLSAgICA0NjYzMywgNDY2MzgsIDQ2NjQzLCA0NjY0OSwgNDY2NTcsIDQ2NjY3LCA0NjY3NSwgNDY2ODMsIDQ2NjkxLCA0NjY5OSwgCi0gICAgNDY3MDcsIDQ2NzE1LCA0NjcyMywgNDY3MzEsIDQ2NzM5LCA0Njc0NywgNDY3NTYsIDQ2NzY1LCA0Njc3MywgNDY3ODEsIAotICAgIDQ2NzkwLCA0Njc5OSwgNDY4MDgsIDQ2ODE3LCA0NjgyNywgNDY4MzcsIDQ2ODQ2LCA0Njg1NSwgNDY4NjUsIDQ2ODc1LCAKLSAgICA0Njg4OSwgNDY5MDYsIDQ2OTIwLCA0NjkzNywgNDY5NTEsIDQ2OTY1LCA0Njk3OSwgNDY5OTMsIDQ3MDAzLCA0NzAxNCwgCi0gICAgNDcwMjQsIDQ3MDM1LCA0NzA1MiwgNDcwNjksIDQ3MDc3LCA0NzA4MywgNDcwOTAsIDQ3MDk3LCA0NzEwNCwgNDcxMTEsIAotICAgIDQ3MTE2LCA0NzEyMiwgNDcxMjcsIDQ3MTMyLCA0NzEzOCwgNDcxNDMsIDQ3MTQ4LCA0NzE1MywgNDcxNTgsIDQ3MTYzLCAKLSAgICA0NzE3MCwgNDcxNzUsIDQ3MTgyLCA0NzE4NywgNDcxOTIsIDQ3MTk2LCA0NzIwMCwgNDcyMDcsIDQ3MjE0LCA0NzIyMSwgCi0gICAgNDcyMjgsIDQ3MjM1LCA0NzI0MiwgNDcyNTUsIDQ3MjY4LCA0NzI4MSwgNDcyOTQsIDQ3MzAyLCA0NzMxMCwgNDczMTYsIAotICAgIDQ3MzIyLCA0NzMyOSwgNDczMzYsIDQ3MzQzLCA0NzM1MCwgNDczNTQsIDQ3MzU5LCA0NzM2NywgNDczNzUsIDQ3MzgzLCAKLSAgICA0NzM5MCwgNDczOTQsIDQ3NDAyLCA0NzQxMCwgNDc0MTMsIDQ3NDE2LCA0NzQyMSwgNDc0MjcsIDQ3NDM1LCA0NzQ0MywgCi0gICAgNDc0NjMsIDQ3NDgzLCA0NzUwMywgNDc1MjMsIDQ3NTQzLCA0NzU2MywgNDc1ODMsIDQ3NjAzLCA0NzYwOCwgNDc2MTUsIAotICAgIDQ3NjI0LCA0NzYzMiwgNDc2NDAsIDQ3NjQ1LCA0NzY0OCwgNDc2NTEsIDQ3NjU2LCA0NzY1OSwgNDc2NzgsIDQ3Njg1LCAKLSAgICA0NzY5MSwgNDc2OTcsIDQ3NzAxLCA0NzcwNCwgNDc3MDcsIDQ3NzEwLCA0NzcyMSwgNDc3MzMsIDQ3NzQxLCA0Nzc0OSwgCi0gICAgNDc3NTMsIDQ3NzU4LCA0Nzc2MiwgNDc3NjcsIDQ3NzcyLCA0Nzc3NywgNDc3ODMsIDQ3NzkyLCA0Nzc5OSwgNDc4MDYsIAotICAgIDQ3ODE0LCA0NzgyMSwgNDc4MjgsIDQ3ODMxLCA0NzgzNywgNDc4NDMsIDQ3ODQ2LCA0Nzg0OSwgNDc4NTQsIDQ3ODU5LCAKLSAgICA0Nzg2NSwgNDc4NzEsIDQ3ODc1LCA0Nzg4MCwgNDc4ODcsIDQ3ODkxLCA0Nzg5NywgNDc5MDEsIDQ3OTA1LCA0NzkxMywgCi0gICAgNDc5MjUsIDQ3OTMzLCA0NzkzNywgNDc5MzksIDQ3OTQ4LCA0Nzk1NywgNDc5NjMsIDQ3OTY2LCA0Nzk3MiwgNDc5NzgsIAotICAgIDQ3OTgzLCA0Nzk4OCwgNDc5OTMsIDQ3OTk4LCA0ODAwMywgNDgwMDgsIDQ4MDEwLCA0ODAxNiwgNDgwMjEsIDQ4MDI4LCAKLSAgICA0ODAzMiwgNDgwMzgsIDQ4MDQxLCA0ODA0NSwgNDgwNTIsIDQ4MDU5LCA0ODA2MSwgNDgwNjMsIDQ4MDY5LCA0ODA3NSwgCi0gICAgNDgwODEsIDQ4MDkwLCA0ODA5OSwgNDgxMDYsIDQ4MTEzLCA0ODExOSwgNDgxMjUsIDQ4MTMwLCA0ODEzNSwgNDgxNDAsIAotICAgIDQ4MTQ2LCA0ODE1MiwgNDgxNTcsIDQ4MTY0LCA0ODE2OCwgNDgxNzIsIDQ4MTg1LCA0ODE5OCwgNDgyMDksIDQ4MjE4LCAKLSAgICA0ODIyNCwgNDgyMzEsIDQ4MjM2LCA0ODI0MSwgNDgyNDYsIDQ4MjUxLCA0ODI1NiwgNDgyNTgsIDQ4MjY1LCA0ODI3MiwgCi0gICAgNDgyNzksIDQ4Mjg2LCA0ODI5MywgNDgzMDEsIDQ4MzA3LCA0ODMxMiwgNDgzMTgsIDQ4MzI0LCA0ODMzMCwgNDgzMzcsIAotICAgIDQ4MzQzLCA0ODM1MSwgNDgzNTksIDQ4MzY3LCA0ODM3NSwgNDgzODIsIDQ4Mzg4LCA0ODM5NCwgNDg0MDMsIDQ4NDA3LCAKLSAgICA0ODQxNiwgNDg0MjUsIDQ4NDM0LCA0ODQ0MiwgNDg0NDYsIDQ4NDUyLCA0ODQ1OSwgNDg0NjYsIDQ4NDcwLCA0ODQ3NiwgCi0gICAgNDg0ODMsIDQ4NDg4LCA0ODQ5MywgNDg0OTksIDQ4NTA0LCA0ODUwOSwgNDg1MTYsIDQ4NTIzLCA0ODUyOCwgNDg1MzMsIAotICAgIDQ4NTQxLCA0ODU0OSwgNDg1NTksIDQ4NTY5LCA0ODU3NiwgNDg1ODMsIDQ4NTg3LCA0ODU5MSwgNDg2MDMsIDQ4NjA5LCAKLSAgICA0ODYxNSwgNDg2MjAsIDQ4NjI1LCA0ODYzMiwgNDg2MzksIDQ4NjQ1LCA0ODY1MSwgNDg2NjAsIDQ4NjY4LCA0ODY3NiwgCi0gICAgNDg2ODMsIDQ4NjkwLCA0ODY5NywgNDg3MDMsIDQ4NzEwLCA0ODcxNiwgNDg3MjMsIDQ4NzMwLCA0ODczNywgNDg3NDQsIAotICAgIDQ4NzUwLCA0ODc1NSwgNDg3NjQsIDQ4Nzc0LCA0ODc4MSwgNDg3OTAsIDQ4Nzk2LCA0ODgwMSwgNDg4MDYsIDQ4ODE1LCAKLSAgICA0ODgyMSwgNDg4MjcsIDQ4ODMzLCA0ODg0MSwgNDg4NDYsIDQ4ODUzLCA0ODg2MCwgNDg4NzEsIDQ4ODc4LCA0ODg4NSwgCi0gICAgNDg4OTIsIDQ4ODk5LCA0ODkwNiwgNDg5MTMsIDQ4OTIwLCA0ODkzMSwgNDg5NDIsIDQ4OTUyLCA0ODk2MiwgNDg5NzQsIAotICAgIDQ4OTg2LCA0ODk5MSwgNDg5OTYsIDQ5MDA0LCA0OTAxMiwgNDkwMTgsIDQ5MDI0LCA0OTAzMywgNDkwNDIsIDQ5MDUwLCAKLSAgICA0OTA1OCwgNDkwNjYsIDQ5MDc0LCA0OTA4NCwgNDkwOTQsIDQ5MTA4LCA0OTEyMiwgNDkxMjksIDQ5MTM2LCA0OTE0NywgCi0gICAgNDkxNTgsIDQ5MTY1LCA0OTE3MiwgNDkxODEsIDQ5MTkwLCA0OTE5NSwgNDkyMDAsIDQ5MjA5LCA0OTIxOCwgNDkyMjMsIAotICAgIDQ5MjI4LCA0OTIzNiwgNDkyNDIsIDQ5MjQ4LCA0OTI1NiwgNDkyNjQsIDQ5Mjc3LCA0OTI5MCwgNDkyOTQsIDQ5Mjk4LCAKLSAgICA0OTMwNSwgNDkzMTIsIDQ5MzE5LCA0OTMyNywgNDkzMzUsIDQ5MzQzLCA0OTM1MSwgNDkzNTcsIDQ5MzYzLCA0OTM2OSwgCi0gICAgNDkzNzUsIDQ5MzgyLCA0OTM4OSwgNDkzOTcsIDQ5NDA1LCA0OTQwOCwgNDk0MTEsIDQ5NDE2LCA0OTQyMSwgNDk0MjcsIAotICAgIDQ5NDMzLCA0OTQ0MCwgNDk0NDcsIDQ5NDU2LCA0OTQ2NSwgNDk0NzIsIDQ5NDc5LCA0OTQ4NywgNDk0OTUsIDQ5NTAzLCAKLSAgICA0OTUxMSwgNDk1MTgsIDQ5NTI1LCA0OTUzMiwgNDk1MzksIDQ5NTQzLCA0OTU0NywgNDk1NTQsIDQ5NTYxLCA0OTU2NiwgCi0gICAgNDk1NzEsIDQ5NTc2LCA0OTU4MSwgNDk1ODcsIDQ5NjAxLCA0OTYwOCwgNDk2MTUsIDQ5NjE5LCA0OTYyMSwgNDk2MjMsIAotICAgIDQ5NjI4LCA0OTYzMywgNDk2MzgsIDQ5NjQyLCA0OTY1MCwgNDk2NTcsIDQ5NjY0LCA0OTY3MiwgNDk2ODQsIDQ5NjkyLCAKLSAgICA0OTcwMCwgNDk3MTEsIDQ5NzE1LCA0OTcxOSwgNDk3MjMsIDQ5NzI4LCA0OTczOSwgNDk3NDYsIDQ5NzUzLCA0OTc2MCwgCi0gICAgNDk3NjUsIDQ5NzcyLCA0OTc4MSwgNDk3ODksIDQ5Nzk1LCA0OTgwMSwgNDk4MDcsIDQ5ODE2LCA0OTgyNSwgNDk4MzMsIAotICAgIDQ5ODQyLCA0OTg0NywgNDk4NTAsIDQ5ODU1LCA0OTg2MSwgNDk4NjcsIDQ5ODczLCA0OTg3OSwgNDk4ODMsIDQ5ODg2LCAKLSAgICA0OTg5MCwgNDk4OTQsIDQ5OTAwLCA0OTkwNiwgNDk5MTIsIDQ5OTE4LCA0OTkyMiwgNDk5MjYsIDQ5OTMzLCA0OTk0MCwgCi0gICAgNDk5NDcsIDQ5OTU0LCA0OTk2MSwgNDk5NjgsIDQ5OTc4LCA0OTk4NywgNDk5OTQsIDUwMDAxLCA1MDAwOSwgNTAwMTcsIAotICAgIDUwMDIxLCA1MDAyNiwgNTAwMzEsIDUwMDM3LCA1MDA0MywgNTAwNDYsIDUwMDQ5LCA1MDA1MiwgNTAwNTUsIDUwMDU5LCAKLSAgICA1MDA2NCwgNTAwNjksIDUwMDc0LCA1MDA3OSwgNTAwODQsIDUwMDg4LCA1MDA5MiwgNTAwOTYsIDUwMTAwLCA1MDEwNCwgCi0gICAgNTAxMDgsIDUwMTEyLCA1MDExOCwgNTAxMjIsIDUwMTI4LCA1MDEzMywgNTAxNDAsIDUwMTQ4LCA1MDE1NSwgNTAxNjMsIAotICAgIDUwMTcwLCA1MDE3OCwgNTAxODcsIDUwMTk0LCA1MDIwNCwgNTAyMTUsIDUwMjIxLCA1MDIzMCwgNTAyMzYsIDUwMjQ1LCAKLSAgICA1MDI1NCwgNTAyNjAsIDUwMjY2LCA1MDI3MCwgNTAyNzQsIDUwMjgzLCA1MDI5MiwgNTAyOTksIDUwMzA2LCA1MDMxNSwgMCwgCi0gICAgMCwgMCwgNTAzMjQsIDUwMzI5LCA1MDMzMywgNTAzMzcsIDUwMzQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDM0NywgNTAzNTIsIDUwMzU3LCA1MDM2MiwgNTAzNjcsIDUwMzcyLCA1MDM3NywgCi0gICAgNTAzODIsIDUwMzg3LCA1MDM5MiwgNTAzOTcsIDUwNDAzLCA1MDQwNywgNTA0MTIsIDUwNDE3LCA1MDQyMiwgNTA0MjcsIAotICAgIDUwNDMyLCA1MDQzNywgNTA0NDIsIDUwNDQ3LCA1MDQ1MiwgNTA0NTcsIDUwNDYyLCA1MDQ2NywgNTA0NzIsIDUwNDc3LCAKLSAgICA1MDQ4MiwgNTA0ODcsIDUwNDkyLCA1MDQ5NywgNTA1MDIsIDUwNTA3LCA1MDUxMiwgNTA1MTcsIDUwNTIzLCA1MDUyOCwgCi0gICAgNTA1MzQsIDUwNTQzLCA1MDU0OCwgNTA1NTYsIDUwNTYzLCA1MDU3MiwgNTA1NzcsIDUwNTgyLCA1MDU4NywgNTA1OTMsIDAsIAotICAgIDUwNjAwLCA1MDYwNSwgNTA2MTAsIDUwNjE1LCA1MDYyMCwgNTA2MjUsIDUwNjMwLCA1MDYzNSwgNTA2NDAsIDUwNjQ1LCAKLSAgICA1MDY1MCwgNTA2NTYsIDUwNjYwLCA1MDY2NSwgNTA2NzAsIDUwNjc1LCA1MDY4MCwgNTA2ODUsIDUwNjkwLCA1MDY5NSwgCi0gICAgNTA3MDAsIDUwNzA1LCA1MDcxMCwgNTA3MTUsIDUwNzIwLCA1MDcyNSwgNTA3MzAsIDUwNzM1LCA1MDc0MCwgNTA3NDUsIAotICAgIDUwNzUwLCA1MDc1NSwgNTA3NjAsIDUwNzY1LCA1MDc3MCwgNTA3NzYsIDUwNzgxLCA1MDc4NywgNTA3OTYsIDUwODAxLCAKLSAgICA1MDgwOSwgNTA4MTYsIDUwODI1LCA1MDgzMCwgNTA4MzUsIDUwODQwLCA1MDg0NiwgMCwgNTA4NTMsIDUwODYxLCA1MDg2OSwgCi0gICAgNTA4NzgsIDUwODg1LCA1MDg5MywgNTA4OTksIDUwOTA4LCA1MDkxNiwgNTA5MjQsIDUwOTMyLCA1MDk0MCwgNTA5NDgsIAotICAgIDUwOTU2LCA1MDk2MSwgNTA5NjgsIDAsIDUwOTczLCA1MDk4MSwgNTA5ODgsIDUwOTk1LCA1MTAwMywgNTEwMDgsIDUxMDEzLCAKLSAgICA1MTAyMCwgNTEwMjcsIDUxMDM2LCA1MTA0NiwgNTEwNTIsIDUxMDU5LCAwLCAwLCA1MTA2MywgNTEwNjgsIDUxMDczLCAKLSAgICA1MTA3OCwgNTEwODMsIDUxMDg4LCA1MTA5MywgNTEwOTgsIDUxMTAzLCA1MTEwOCwgNTExMTMsIDUxMTE4LCA1MTEyMywgCi0gICAgNTExMjgsIDUxMTMzLCA1MTEzOCwgNTExNDMsIDUxMTQ4LCA1MTE1MywgNTExNTgsIDUxMTYzLCA1MTE2OCwgNTExNzMsIAotICAgIDUxMTc4LCA1MTE4MywgNTExODgsIDUxMTkzLCA1MTE5OCwgNTEyMDMsIDUxMjA4LCA1MTIxMywgNTEyMTcsIDUxMjIxLCAKLSAgICA1MTIyNiwgNTEyMzEsIDUxMjM2LCA1MTI0MSwgNTEyNDYsIDUxMjUxLCA1MTI1NiwgNTEyNjEsIDUxMjY2LCA1MTI3MSwgCi0gICAgNTEyNzYsIDUxMjgxLCA1MTI4NiwgNTEyOTEsIDUxMjk2LCA1MTMwMSwgNTEzMDYsIDUxMzExLCA1MTMxOCwgNTEzMjUsIAotICAgIDUxMzMyLCA1MTMzOSwgNTEzNDYsIDUxMzUzLCA1MTM2MCwgNTEzNjcsIDUxMzc0LCA1MTM4MSwgNTEzODgsIDUxMzk1LCAKLSAgICA1MTQwMiwgNTE0MDksIDUxNDE0LCA1MTQxOSwgNTE0MjYsIDUxNDMzLCA1MTQ0MCwgNTE0NDcsIDUxNDU0LCA1MTQ2MSwgCi0gICAgNTE0NjgsIDUxNDc1LCA1MTQ4MiwgNTE0ODksIDUxNDk2LCA1MTUwMywgNTE1MDksIDUxNTE1LCA1MTUyMSwgNTE1MjcsIAotICAgIDUxNTM0LCA1MTU0MSwgNTE1NDgsIDUxNTU1LCA1MTU2MiwgNTE1NjksIDUxNTc2LCA1MTU4MywgNTE1OTAsIDUxNTk3LCAKLSAgICA1MTYwNSwgNTE2MTMsIDUxNjIxLCA1MTYyOSwgNTE2MzcsIDUxNjQ1LCA1MTY1MywgNTE2NjEsIDUxNjY1LCA1MTY3MSwgCi0gICAgNTE2NzcsIDUxNjgxLCA1MTY4NywgNTE2OTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDUxNjk5LCA1MTcwNywgNTE3MTYsIDUxNzI1LCA1MTczMywgNTE3MzksIDUxNzQ0LCA1MTc0OSwgNTE3NTQsIDUxNzU5LCAKLSAgICA1MTc2NCwgNTE3NjksIDUxNzc0LCA1MTc3OSwgNTE3ODQsIDUxNzg5LCA1MTc5NCwgNTE3OTksIDUxODA0LCA1MTgwOSwgCi0gICAgNTE4MTQsIDUxODE5LCA1MTgyNCwgNTE4MjksIDUxODM0LCA1MTgzOSwgNTE4NDQsIDUxODQ5LCA1MTg1NCwgNTE4NTksIAotICAgIDUxODY0LCA1MTg2OSwgNTE4NzQsIDUxODc5LCA1MTg4NCwgNTE4ODksIDUxODk0LCA1MTg5OSwgNTE5MDQsIDUxOTA5LCAKLSAgICA1MTkxNCwgNTE5MTksIDUxOTI0LCA1MTkyOSwgNTE5MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxOTM5LCAKLSAgICA1MTk0MiwgNTE5NDYsIDUxOTUwLCA1MTk1NCwgNTE5NTgsIDUxOTY2LCA1MTk3MCwgNTE5NzQsIDUxOTc4LCA1MTk4MiwgCi0gICAgNTE5ODYsIDUxOTkwLCA1MTk5NCwgNTE5OTgsIDUyMDA0LCA1MjAwOCwgNTIwMTIsIDUyMDIwLCA1MjAyNiwgNTIwMzAsIAotICAgIDUyMDM0LCA1MjAzOCwgNTIwNDQsIDUyMDQ4LCA1MjA1NCwgNTIwNTgsIDUyMDYyLCA1MjA2OCwgNTIwNzQsIDUyMDc4LCAKLSAgICA1MjA4MiwgNTIwODYsIDUyMDkyLCA1MjA5OCwgNTIxMDIsIDUyMTA2LCA1MjExMCwgNTIxMTQsIDUyMTE4LCA1MjEyNCwgCi0gICAgNTIxMzAsIDUyMTM0LCA1MjEzOCwgNTIxNDIsIDUyMTQ2LCA1MjE1MCwgNTIxNTQsIDUyMTU4LCA1MjE2MiwgNTIxNjYsIAotICAgIDUyMTcwLCA1MjE3NCwgNTIxODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjE5MCwgNTIxOTQsIDUyMTk4LCA1MjIwMiwgNTIyMDYsIDUyMjEwLCAKLSAgICA1MjIxNCwgNTIyMTgsIDUyMjIyLCA1MjIyNiwgNTIyMzAsIDUyMjM2LCA1MjI0MCwgNTIyNDQsIDUyMjQ4LCA1MjI1MiwgCi0gICAgNTIyNTYsIDUyMjYwLCA1MjI2NCwgNTIyNjgsIDUyMjcyLCA1MjI3NiwgNTIyODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDUyMjg0LCA1MjI4OCwgNTIyOTIsIDUyMjk2LCA1MjMwMCwgNTIzMDQsIDUyMzA4LCAwLCA1MjMxMiwgNTIzMTYsIAotICAgIDUyMzIwLCA1MjMyNCwgNTIzMjgsIDUyMzMyLCA1MjMzNiwgMCwgNTIzNDAsIDUyMzQ0LCA1MjM0OCwgNTIzNTIsIDUyMzU2LCAKLSAgICA1MjM2MCwgNTIzNjQsIDAsIDUyMzY4LCA1MjM3MiwgNTIzNzYsIDUyMzgwLCA1MjM4NCwgNTIzODgsIDUyMzkyLCAwLCAKLSAgICA1MjM5NiwgNTI0MDAsIDUyNDA0LCA1MjQwOCwgNTI0MTIsIDUyNDE2LCA1MjQyMCwgMCwgNTI0MjQsIDUyNDI4LCA1MjQzMiwgCi0gICAgNTI0MzYsIDUyNDQwLCA1MjQ0NCwgNTI0NDgsIDAsIDUyNDUyLCA1MjQ1NiwgNTI0NjAsIDUyNDY0LCA1MjQ2OCwgNTI0NzIsIAotICAgIDUyNDc2LCAwLCA1MjQ4MCwgNTI0ODQsIDUyNDg4LCA1MjQ5MiwgNTI0OTYsIDUyNTAwLCA1MjUwNCwgMCwgNTI1MDgsIAotICAgIDUyNTEzLCA1MjUxOCwgNTI1MjMsIDUyNTI4LCA1MjUzMywgNTI1MzgsIDUyNTQyLCA1MjU0NywgNTI1NTIsIDUyNTU3LCAKLSAgICA1MjU2MSwgNTI1NjYsIDUyNTcxLCA1MjU3NiwgNTI1ODEsIDUyNTg1LCA1MjU5MCwgNTI1OTUsIDUyNjAwLCA1MjYwNSwgCi0gICAgNTI2MTAsIDUyNjE1LCA1MjYxOSwgNTI2MjQsIDUyNjI5LCA1MjYzNiwgNTI2NDEsIDUyNjQ2LCA1MjY1MiwgNTI2NTksIAotICAgIDUyNjY2LCA1MjY3NSwgNTI2ODIsIDUyNjkxLCA1MjY5NSwgNTI2OTksIDUyNzA1LCA1MjcxMSwgNTI3MTcsIDUyNzI1LCAKLSAgICA1MjczMSwgNTI3MzUsIDUyNzM5LCA1Mjc0MywgNTI3NDksIDUyNzU1LCA1Mjc1OSwgNTI3NjEsIDUyNzY1LCA1Mjc3MCwgCi0gICAgNTI3NzIsIDUyNzc2LCA1Mjc4MCwgNTI3ODQsIDUyNzkwLCA1Mjc5NSwgNTI3OTksIDUyODAzLCA1MjgwNywgNTI4MTMsIAotICAgIDUyODE4LCA1MjgyMywgNTI4MjgsIDUyODMzLCA1Mjg0MCwgNTI4NDcsIDUyODUyLCA1Mjg1NywgNTI4NjIsIDUyODY3LCAKLSAgICA1Mjg3MiwgNTI4NzcsIDUyODgxLCA1Mjg4NSwgNTI4OTIsIDUyODk5LCA1MjkwNiwgNTI5MTAsIDUyOTE0LCA1MjkxNiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE0OTEsIDYxNDk5LCAKKyAgICA2MTUwNywgNjE1MTcsIDYxNTIzLCA2MTUyNywgNjE1MzEsIDYxNTM3LCA2MTU0MywgNjE1NDgsIDYxNTUyLCA2MTU1NiwgCisgICAgNjE1NjAsIDYxNTY0LCA2MTU3MCwgNjE1NzQsIDYxNTc4LCA2MTU4MiwgNjE1OTIsIDYxNTk2LCA2MTYwMCwgNjE2MDYsIAorICAgIDYxNjEwLCA2MTYxNiwgNjE2MjAsIDYxNjI0LCA2MTYzMCwgNjE2MzYsIDYxNjQyLCA2MTY1MCwgNjE2NTgsIDYxNjYyLCAKKyAgICA2MTY2NiwgNjE2NzAsIDYxNjc2LCA2MTY4MCwgNjE2ODksIDYxNjk1LCA2MTY5OSwgNjE3MDMsIDYxNzA3LCA2MTcxMSwgCisgICAgNjE3MTUsIDYxNzE5LCA2MTcyNiwgNjE3MzIsIDYxNzM4LCA2MTc0MiwgNjE3NDgsIDYxNzUyLCA2MTc1OCwgNjE3NjYsIAorICAgIDYxNzc2LCA2MTc4MCwgNjE3ODgsIDYxNzkyLCA2MTc5OCwgNjE4MDYsIDYxODE0LCA2MTgxOCwgNjE4MjIsIDYxODI4LCAKKyAgICA2MTgzMywgNjE4MzksIDYxODQ1LCA2MTg0OSwgNjE4NTMsIDYxODU2LCA2MTg2MCwgNjE4NjQsIDYxODY4LCA2MTg3MiwgCisgICAgNjE4NzYsIDYxODgwLCA2MTg4NCwgNjE4ODcsIDYxODkxLCA2MTg5NSwgNjE4OTksIDYxOTAzLCA2MTkwNywgNjE5MTEsIAorICAgIDYxOTE0LCA2MTkxOCwgNjE5MjIsIDYxOTI1LCA2MTkyOSwgNjE5MzMsIDYxOTM3LCA2MTk0MSwgNjE5NDUsIDYxOTQ5LCAKKyAgICA2MTk1MywgNjE5NTcsIDYxOTYxLCA2MTk2NSwgNjE5NjksIDYxOTczLCA2MTk3NywgNjE5ODEsIDYxOTg1LCA2MTk4OSwgCisgICAgNjE5OTMsIDYxOTk3LCA2MjAwMSwgNjIwMDUsIDYyMDA5LCA2MjAxMywgNjIwMTcsIDYyMDIxLCA2MjAyNSwgNjIwMjksIAorICAgIDYyMDMzLCA2MjAzNywgNjIwNDEsIDYyMDQ1LCA2MjA0OSwgNjIwNTMsIDYyMDU3LCA2MjA2MSwgNjIwNjUsIDYyMDY5LCAKKyAgICA2MjA3MywgNjIwNzcsIDYyMDgxLCA2MjA4NSwgNjIwODksIDYyMDkzLCA2MjA5NywgNjIxMDEsIDYyMTA0LCA2MjEwOCwgCisgICAgNjIxMTIsIDYyMTE2LCA2MjEyMCwgNjIxMjQsIDYyMTI4LCA2MjEzMiwgNjIxMzYsIDYyMTQwLCA2MjE0NCwgNjIxNDgsIAorICAgIDYyMTUyLCA2MjE1NiwgNjIxNjAsIDYyMTY0LCA2MjE2OCwgNjIxNzIsIDYyMTc2LCA2MjE4MCwgNjIxODQsIDYyMTg4LCAKKyAgICA2MjE5MiwgNjIxOTYsIDYyMjAwLCA2MjIwNCwgNjIyMDgsIDYyMjEyLCA2MjIxNiwgNjIyMjAsIDYyMjI0LCA2MjIyOCwgCisgICAgNjIyMzIsIDYyMjM2LCA2MjI0MCwgNjIyNDQsIDYyMjQ4LCA2MjI1MiwgNjIyNTYsIDYyMjYwLCA2MjI2NCwgNjIyNjgsIAorICAgIDYyMjcyLCA2MjI3NiwgNjIyODAsIDYyMjg0LCA2MjI4OCwgNjIyOTIsIDYyMjk2LCA2MjMwMCwgNjIzMDQsIDYyMzA4LCAKKyAgICA2MjMxMiwgNjIzMTYsIDYyMzIwLCA2MjMyNCwgNjIzMjgsIDYyMzMyLCA2MjMzNiwgNjIzNDAsIDYyMzQ0LCA2MjM0OCwgCisgICAgNjIzNTIsIDYyMzU2LCA2MjM2MCwgNjIzNjQsIDYyMzY4LCA2MjM3MiwgNjIzNzYsIDYyMzgwLCA2MjM4NCwgNjIzODgsIAorICAgIDYyMzkyLCA2MjM5NiwgNjI0MDAsIDYyNDA0LCA2MjQwOCwgNjI0MTIsIDYyNDE2LCA2MjQyMCwgNjI0MjQsIDYyNDI4LCAKKyAgICA2MjQzMiwgNjI0MzYsIDYyNDQwLCA2MjQ0NCwgNjI0NDgsIDYyNDUyLCA2MjQ1NiwgNjI0NjAsIDYyNDY0LCA2MjQ2OCwgCisgICAgNjI0NzIsIDYyNDc2LCA2MjQ4MCwgNjI0ODQsIDYyNDg4LCA2MjQ5MiwgNjI0OTYsIDYyNTAwLCA2MjUwNCwgNjI1MDgsIAorICAgIDYyNTEyLCA2MjUxNiwgNjI1MjAsIDYyNTI0LCA2MjUyOCwgNjI1MzIsIDYyNTM2LCA2MjU0MCwgNjI1NDQsIDYyNTQ4LCAKKyAgICA2MjU1MiwgNjI1NTYsIDYyNTYwLCA2MjU2NCwgNjI1NjgsIDYyNTcyLCA2MjU3NSwgNjI1NzksIDYyNTgzLCA2MjU4NywgCisgICAgNjI1OTEsIDYyNTk1LCA2MjU5OSwgNjI2MDMsIDYyNjA3LCA2MjYxMSwgNjI2MTUsIDYyNjE5LCA2MjYyMywgNjI2MjcsIAorICAgIDYyNjMxLCA2MjYzNSwgNjI2MzksIDYyNjQzLCA2MjY0NywgNjI2NTEsIDYyNjU1LCA2MjY1OSwgNjI2NjMsIDYyNjY3LCAKKyAgICA2MjY3MSwgNjI2NzUsIDYyNjc5LCA2MjY4MywgNjI2ODcsIDYyNjkxLCA2MjY5NSwgNjI2OTksIDYyNzAzLCA2MjcwNywgCisgICAgNjI3MTEsIDYyNzE1LCA2MjcxOSwgNjI3MjMsIDYyNzI3LCA2MjczMSwgNjI3MzUsIDYyNzM5LCA2Mjc0MywgNjI3NDcsIAorICAgIDYyNzUxLCA2Mjc1NSwgNjI3NTksIDYyNzYzLCA2Mjc2NywgNjI3NzEsIDYyNzc1LCA2Mjc3OSwgNjI3ODMsIDYyNzg3LCAKKyAgICA2Mjc5MSwgNjI3OTUsIDYyNzk5LCA2MjgwMywgNjI4MDcsIDYyODExLCA2MjgxNSwgNjI4MTksIDYyODIzLCA2MjgyNywgCisgICAgNjI4MzEsIDYyODM1LCA2MjgzOSwgNjI4NDMsIDYyODQ3LCA2Mjg1MSwgNjI4NTUsIDYyODU5LCA2Mjg2MywgNjI4NjcsIAorICAgIDYyODcxLCA2Mjg3NSwgNjI4NzksIDYyODgzLCA2Mjg4NywgNjI4OTEsIDYyODk1LCA2Mjg5OSwgNjI5MDMsIDYyOTA3LCAKKyAgICA2MjkxMSwgNjI5MTUsIDYyOTE5LCA2MjkyMywgNjI5MjcsIDYyOTMxLCA2MjkzNSwgNjI5MzksIDYyOTQzLCA2Mjk0NywgCisgICAgNjI5NTEsIDYyOTU1LCA2Mjk1OSwgNjI5NjMsIDYyOTY3LCA2Mjk3MSwgNjI5NzUsIDYyOTc5LCA2Mjk4MywgNjI5ODcsIAorICAgIDYyOTkxLCA2Mjk5NSwgNjI5OTksIDYzMDAzLCA2MzAwNywgNjMwMTEsIDYzMDE1LCA2MzAxOSwgNjMwMjMsIDYzMDI3LCAKKyAgICA2MzAzMSwgNjMwMzUsIDYzMDM4LCA2MzA0MiwgNjMwNDYsIDYzMDUwLCA2MzA1NCwgNjMwNTgsIDYzMDYyLCA2MzA2NiwgCisgICAgNjMwNzAsIDYzMDc0LCA2MzA3OCwgNjMwODIsIDYzMDg2LCA2MzA5MCwgNjMwOTQsIDYzMDk4LCA2MzEwMiwgNjMxMDYsIAorICAgIDYzMTEwLCA2MzExNCwgNjMxMTgsIDYzMTIyLCA2MzEyNiwgNjMxMzAsIDYzMTM0LCA2MzEzOCwgNjMxNDIsIDYzMTQ2LCAKKyAgICA2MzE1MCwgNjMxNTQsIDYzMTU4LCA2MzE2MiwgNjMxNjYsIDYzMTcwLCA2MzE3NCwgNjMxNzgsIDYzMTgyLCA2MzE4NiwgCisgICAgNjMxOTAsIDYzMTk0LCA2MzE5OCwgNjMyMDIsIDYzMjA2LCA2MzIxMCwgNjMyMTQsIDYzMjE4LCA2MzIyMiwgNjMyMjYsIAorICAgIDYzMjMwLCA2MzIzNCwgNjMyMzgsIDYzMjQyLCA2MzI0NiwgNjMyNTAsIDYzMjU0LCA2MzI1OCwgNjMyNjIsIDYzMjY2LCAKKyAgICA2MzI3MCwgNjMyNzQsIDYzMjc4LCA2MzI4MiwgNjMyODYsIDYzMjkwLCA2MzI5NCwgNjMyOTgsIDYzMzAyLCA2MzMwNiwgCisgICAgNjMzMTAsIDYzMzE0LCA2MzMxOCwgNjMzMjIsIDYzMzI2LCA2MzMzMCwgNjMzMzQsIDYzMzM4LCA2MzM0MiwgNjMzNDYsIAorICAgIDYzMzUwLCA2MzM1NCwgNjMzNTgsIDYzMzYyLCA2MzM2NiwgNjMzNzAsIDYzMzc0LCA2MzM3OCwgNjMzODIsIDYzMzg2LCAKKyAgICA2MzM5MCwgNjMzOTQsIDYzMzk3LCA2MzQwMSwgNjM0MDUsIDYzNDA5LCA2MzQxMywgNjM0MTcsIDYzNDIxLCA2MzQyNSwgCisgICAgNjM0MjksIDYzNDMzLCA2MzQzNywgNjM0NDEsIDYzNDQ1LCA2MzQ0OSwgNjM0NTMsIDYzNDU3LCA2MzQ2MSwgNjM0NjUsIAorICAgIDYzNDY5LCA2MzQ3MywgNjM0NzcsIDYzNDgxLCA2MzQ4NSwgNjM0ODksIDYzNDkzLCA2MzQ5NywgNjM1MDEsIDYzNTA1LCAKKyAgICA2MzUwOSwgNjM1MTMsIDYzNTE3LCA2MzUyMSwgNjM1MjUsIDYzNTI5LCA2MzUzMywgNjM1MzcsIDYzNTQxLCA2MzU0NSwgCisgICAgNjM1NDksIDYzNTUzLCA2MzU1NywgNjM1NjEsIDYzNTY1LCA2MzU2OSwgNjM1NzMsIDYzNTc3LCA2MzU4MSwgNjM1ODUsIAorICAgIDYzNTg5LCA2MzU5MywgNjM1OTcsIDYzNjAxLCA2MzYwNSwgNjM2MDksIDYzNjEzLCA2MzYxNywgNjM2MjEsIDYzNjI1LCAKKyAgICA2MzYyOSwgNjM2MzMsIDYzNjM3LCA2MzY0MSwgNjM2NDUsIDYzNjQ5LCA2MzY1MywgNjM2NTcsIDYzNjYxLCA2MzY2NSwgCisgICAgNjM2NjksIDYzNjczLCA2MzY3NywgNjM2ODEsIDYzNjg1LCA2MzY4OSwgNjM2OTMsIDYzNjk3LCA2MzcwMSwgNjM3MDUsIAorICAgIDYzNzA5LCA2MzcxMywgNjM3MTcsIDYzNzIxLCA2MzcyNSwgNjM3MjksIDYzNzMzLCA2MzczNywgNjM3NDEsIDYzNzQ1LCAKKyAgICA2Mzc0OSwgNjM3NTMsIDYzNzU3LCA2Mzc2MSwgNjM3NjUsIDYzNzY5LCA2Mzc3MywgNjM3NzcsIDYzNzgxLCA2Mzc4NSwgCisgICAgNjM3ODksIDYzNzkzLCA2Mzc5NywgNjM4MDEsIDYzODA1LCA2MzgwOSwgNjM4MTMsIDYzODE3LCA2MzgyMSwgNjM4MjUsIAorICAgIDYzODI5LCA2MzgzMywgNjM4MzcsIDYzODQxLCA2Mzg0NSwgNjM4NDksIDYzODUzLCA2Mzg1NywgNjM4NjEsIDYzODY1LCAKKyAgICA2Mzg2OSwgNjM4NzMsIDYzODc3LCA2Mzg4MSwgNjM4ODUsIDYzODg5LCA2Mzg5MiwgNjM4OTYsIDYzOTAwLCA2MzkwNCwgCisgICAgNjM5MDgsIDYzOTEyLCA2MzkxNiwgNjM5MjAsIDYzOTI0LCA2MzkyOCwgNjM5MzIsIDYzOTM2LCA2Mzk0MCwgNjM5NDQsIAorICAgIDYzOTQ4LCA2Mzk1MiwgNjM5NTYsIDYzOTYwLCA2Mzk2NCwgNjM5NjgsIDYzOTcyLCA2Mzk3NiwgNjM5ODAsIDYzOTg0LCAKKyAgICA2Mzk4OCwgNjM5OTIsIDYzOTk2LCA2NDAwMCwgNjQwMDQsIDY0MDA4LCA2NDAxMiwgNjQwMTYsIDY0MDIwLCA2NDAyNCwgCisgICAgNjQwMjgsIDY0MDMyLCA2NDAzNiwgNjQwNDAsIDY0MDQ0LCA2NDA0OCwgNjQwNTIsIDY0MDU2LCA2NDA2MCwgNjQwNjQsIAorICAgIDY0MDY4LCA2NDA3MiwgNjQwNzYsIDY0MDgwLCA2NDA4NCwgNjQwODgsIDY0MDkyLCA2NDA5NiwgNjQxMDAsIDY0MTA0LCAKKyAgICA2NDEwOCwgNjQxMTIsIDY0MTE2LCA2NDEyMCwgNjQxMjQsIDY0MTI4LCA2NDEzMiwgNjQxMzYsIDY0MTQwLCA2NDE0NCwgCisgICAgNjQxNDgsIDY0MTUyLCA2NDE1NiwgNjQxNjAsIDY0MTY0LCA2NDE2OCwgNjQxNzIsIDY0MTc2LCA2NDE4MCwgNjQxODQsIAorICAgIDY0MTg4LCA2NDE5MiwgNjQxOTYsIDY0MjAwLCA2NDIwNCwgNjQyMDgsIDY0MjEyLCA2NDIxNiwgNjQyMjAsIDY0MjI0LCAKKyAgICA2NDIyOCwgNjQyMzIsIDY0MjM2LCA2NDI0MCwgNjQyNDQsIDY0MjQ4LCA2NDI1MiwgNjQyNTYsIDY0MjYwLCA2NDI2NCwgCisgICAgNjQyNjgsIDY0MjcyLCA2NDI3NiwgNjQyODAsIDY0Mjg0LCA2NDI4OCwgNjQyOTIsIDY0Mjk2LCA2NDMwMCwgNjQzMDQsIAorICAgIDY0MzA4LCA2NDMxMiwgNjQzMTYsIDY0MzIwLCA2NDMyNCwgNjQzMjgsIDY0MzMyLCA2NDMzNiwgNjQzNDAsIDY0MzQ0LCAKKyAgICA2NDM0NywgNjQzNTEsIDY0MzU1LCA2NDM1OSwgNjQzNjMsIDY0MzY3LCA2NDM3MSwgNjQzNzUsIDY0Mzc5LCA2NDM4MywgCisgICAgNjQzODcsIDY0MzkxLCA2NDM5NSwgNjQzOTksIDY0NDAzLCA2NDQwNywgNjQ0MTEsIDY0NDE1LCA2NDQxOSwgNjQ0MjMsIAorICAgIDY0NDI3LCA2NDQzMSwgNjQ0MzUsIDY0NDM5LCA2NDQ0MywgNjQ0NDcsIDY0NDUxLCA2NDQ1NSwgNjQ0NTksIDY0NDYzLCAKKyAgICA2NDQ2NywgNjQ0NzEsIDY0NDc1LCA2NDQ3OSwgNjQ0ODMsIDY0NDg3LCA2NDQ5MSwgNjQ0OTUsIDY0NDk5LCA2NDUwMywgCisgICAgNjQ1MDcsIDY0NTExLCA2NDUxNSwgNjQ1MTksIDY0NTIzLCA2NDUyNywgNjQ1MzEsIDY0NTM1LCA2NDUzOSwgNjQ1NDMsIAorICAgIDY0NTQ3LCA2NDU1MSwgNjQ1NTUsIDY0NTU5LCA2NDU2MywgNjQ1NjcsIDY0NTcxLCA2NDU3NSwgNjQ1NzksIDY0NTgzLCAKKyAgICA2NDU4NywgNjQ1OTEsIDY0NTk1LCA2NDU5OSwgNjQ2MDMsIDY0NjA3LCA2NDYxMSwgNjQ2MTUsIDY0NjE5LCA2NDYyMywgCisgICAgNjQ2MjcsIDY0NjMxLCA2NDYzNSwgNjQ2MzksIDY0NjQzLCA2NDY0NywgNjQ2NTEsIDY0NjU1LCA2NDY1OSwgNjQ2NjMsIAorICAgIDY0NjY3LCA2NDY3MSwgNjQ2NzUsIDY0Njc5LCA2NDY4MywgNjQ2ODcsIDY0NjkxLCA2NDY5NSwgNjQ2OTksIDY0NzAzLCAKKyAgICA2NDcwNywgNjQ3MTEsIDY0NzE1LCA2NDcxOSwgNjQ3MjMsIDY0NzI3LCA2NDczMSwgNjQ3MzUsIDY0NzM5LCA2NDc0MywgCisgICAgNjQ3NDcsIDY0NzUxLCA2NDc1NSwgNjQ3NTksIDY0NzYzLCA2NDc2NywgNjQ3NzEsIDY0Nzc1LCA2NDc3OSwgNjQ3ODMsIAorICAgIDY0Nzg3LCA2NDc5MSwgNjQ3OTUsIDY0Nzk5LCA2NDgwMywgNjQ4MDcsIDY0ODExLCA2NDgxNSwgNjQ4MTksIDY0ODIzLCAKKyAgICA2NDgyNywgNjQ4MzEsIDY0ODM1LCA2NDgzOSwgNjQ4NDMsIDY0ODQ3LCA2NDg1MSwgNjQ4NTUsIDY0ODU5LCA2NDg2MywgCisgICAgNjQ4NjcsIDY0ODcxLCA2NDg3NSwgNjQ4NzksIDY0ODgzLCA2NDg4NywgNjQ4OTEsIDY0ODk1LCA2NDg5OSwgNjQ5MDMsIAorICAgIDY0OTA3LCA2NDkxMSwgNjQ5MTUsIDY0OTE5LCA2NDkyMywgNjQ5MjcsIDY0OTMxLCA2NDkzNSwgNjQ5MzksIDY0OTQzLCAKKyAgICA2NDk0NywgNjQ5NTAsIDY0OTU0LCA2NDk1OCwgNjQ5NjIsIDY0OTY2LCA2NDk3MCwgNjQ5NzQsIDY0OTc4LCA2NDk4MiwgCisgICAgNjQ5ODYsIDY0OTkwLCA2NDk5NCwgNjQ5OTgsIDY1MDAyLCA2NTAwNiwgNjUwMTAsIDY1MDE0LCA2NTAxOCwgNjUwMjIsIAorICAgIDY1MDI2LCA2NTAzMCwgNjUwMzQsIDY1MDM4LCA2NTA0MiwgNjUwNDYsIDY1MDUwLCA2NTA1NCwgNjUwNTgsIDY1MDYyLCAKKyAgICA2NTA2NiwgNjUwNzAsIDY1MDc0LCA2NTA3OCwgNjUwODIsIDY1MDg2LCA2NTA5MCwgNjUwOTQsIDY1MDk4LCA2NTEwMiwgCisgICAgNjUxMDYsIDY1MTEwLCA2NTExNCwgNjUxMTgsIDY1MTIyLCA2NTEyNiwgNjUxMzAsIDY1MTM0LCA2NTEzOCwgNjUxNDIsIAorICAgIDY1MTQ2LCA2NTE1MCwgNjUxNTQsIDY1MTU4LCA2NTE2MiwgNjUxNjYsIDY1MTcwLCA2NTE3NCwgNjUxNzgsIDY1MTgyLCAKKyAgICA2NTE4NiwgNjUxOTAsIDY1MTk0LCA2NTE5OCwgNjUyMDIsIDY1MjA2LCA2NTIxMCwgNjUyMTQsIDY1MjE4LCA2NTIyMiwgCisgICAgNjUyMjYsIDY1MjMwLCA2NTIzNCwgNjUyMzgsIDY1MjQyLCA2NTI0NiwgNjUyNTAsIDY1MjU0LCA2NTI1OCwgNjUyNjIsIAorICAgIDY1MjY2LCA2NTI3MCwgNjUyNzQsIDY1Mjc4LCA2NTI4MiwgNjUyODYsIDY1MjkwLCA2NTI5NCwgNjUyOTgsIDY1MzAyLCAKKyAgICA2NTMwNiwgNjUzMTAsIDY1MzE0LCA2NTMxOCwgNjUzMjIsIDY1MzI2LCA2NTMzMCwgNjUzMzQsIDY1MzM4LCA2NTM0MiwgCisgICAgNjUzNDYsIDY1MzUwLCA2NTM1NCwgNjUzNTgsIDY1MzYyLCA2NTM2NiwgNjUzNzAsIDY1Mzc0LCA2NTM3OCwgNjUzODIsIAorICAgIDY1Mzg2LCA2NTM5MCwgNjUzOTQsIDY1Mzk4LCA2NTQwMiwgNjU0MDYsIDY1NDEwLCA2NTQxNCwgNjU0MTgsIDY1NDIyLCAKKyAgICA2NTQyNiwgNjU0MzAsIDY1NDM0LCA2NTQzOCwgNjU0NDIsIDY1NDQ2LCA2NTQ1MCwgNjU0NTQsIDY1NDU4LCA2NTQ2MiwgCisgICAgNjU0NjYsIDY1NDcwLCA2NTQ3NCwgNjU0NzgsIDY1NDgyLCA2NTQ4NiwgNjU0OTAsIDY1NDk0LCA2NTQ5OCwgNjU1MDIsIAorICAgIDY1NTA2LCA2NTUxMCwgNjU1MTQsIDY1NTE4LCA2NTUyMiwgNjU1MjYsIDY1NTMwLCA2NTUzNCwgNjU1MzgsIDY1NTQyLCAKKyAgICA2NTU0NiwgNjU1NTAsIDY1NTU0LCA2NTU1OCwgNjU1NjIsIDY1NTY2LCA2NTU3MCwgNjU1NzQsIDY1NTc4LCA2NTU4MiwgCisgICAgNjU1ODYsIDY1NTkwLCA2NTU5NCwgNjU1OTgsIDY1NjAyLCA2NTYwNiwgNjU2MTAsIDY1NjE0LCA2NTYxOCwgNjU2MjIsIAorICAgIDY1NjI2LCA2NTYzMCwgNjU2MzQsIDY1NjM4LCA2NTY0MiwgNjU2NDYsIDY1NjUwLCA2NTY1NCwgNjU2NTgsIDY1NjYyLCAKKyAgICA2NTY2NiwgNjU2NzAsIDY1Njc0LCA2NTY3OCwgNjU2ODIsIDY1Njg2LCA2NTY5MCwgNjU2OTQsIDY1Njk4LCA2NTcwMiwgCisgICAgNjU3MDYsIDY1NzA5LCA2NTcxMywgNjU3MTcsIDY1NzIxLCA2NTcyNSwgNjU3MjksIDY1NzMzLCA2NTczNywgNjU3NDEsIAorICAgIDY1NzQ1LCA2NTc0OSwgNjU3NTMsIDY1NzU3LCA2NTc2MSwgNjU3NjUsIDY1NzY5LCA2NTc3MywgNjU3NzcsIDY1NzgxLCAKKyAgICA2NTc4NSwgNjU3ODksIDY1NzkzLCA2NTc5NywgNjU4MDEsIDY1ODA1LCA2NTgwOSwgNjU4MTMsIDY1ODE3LCA2NTgyMSwgCisgICAgNjU4MjUsIDY1ODI5LCA2NTgzMywgNjU4MzcsIDY1ODQxLCA2NTg0NSwgNjU4NDksIDY1ODUzLCA2NTg1NywgNjU4NjEsIAorICAgIDY1ODY1LCA2NTg2OSwgNjU4NzMsIDY1ODc3LCA2NTg4MSwgNjU4ODUsIDY1ODg5LCA2NTg5MywgNjU4OTcsIDY1OTAxLCAKKyAgICA2NTkwNSwgNjU5MDksIDY1OTEzLCA2NTkxNywgNjU5MjEsIDY1OTI1LCA2NTkyOSwgNjU5MzMsIDY1OTM3LCA2NTk0MSwgCisgICAgNjU5NDUsIDY1OTQ5LCA2NTk1MywgNjU5NTcsIDY1OTYxLCA2NTk2NSwgNjU5NjksIDY1OTczLCA2NTk3NywgNjU5ODEsIAorICAgIDY1OTg1LCA2NTk4OSwgNjU5OTMsIDY1OTk3LCA2NjAwMSwgNjYwMDUsIDY2MDA5LCA2NjAxMywgNjYwMTcsIDY2MDIxLCAKKyAgICA2NjAyNSwgNjYwMjksIDY2MDMzLCA2NjAzNywgNjYwNDEsIDY2MDQ1LCA2NjA0OSwgNjYwNTMsIDY2MDU3LCA2NjA2MSwgCisgICAgNjYwNjUsIDY2MDY5LCA2NjA3MywgNjYwNzcsIDY2MDgxLCA2NjA4NSwgNjYwODksIDY2MDkzLCA2NjA5NywgNjYxMDEsIAorICAgIDY2MTA1LCA2NjEwOSwgNjYxMTMsIDY2MTE3LCA2NjEyMSwgNjYxMjUsIDY2MTI5LCA2NjEzMywgNjYxMzcsIDY2MTQxLCAKKyAgICA2NjE0NSwgNjYxNDksIDY2MTUzLCA2NjE1NywgNjYxNjEsIDY2MTY1LCA2NjE2OSwgNjYxNzMsIDY2MTc3LCA2NjE4MSwgCisgICAgNjYxODUsIDY2MTg5LCA2NjE5MywgNjYxOTcsIDY2MjAxLCA2NjIwNSwgNjYyMDksIDY2MjEzLCA2NjIxNywgNjYyMjEsIAorICAgIDY2MjI1LCA2NjIyOSwgNjYyMzMsIDY2MjM3LCA2NjI0MSwgNjYyNDUsIDY2MjQ5LCA2NjI1MywgNjYyNTcsIDY2MjYxLCAKKyAgICA2NjI2NSwgNjYyNjksIDY2MjczLCA2NjI3NywgNjYyODEsIDY2Mjg1LCA2NjI4OSwgNjYyOTMsIDY2Mjk3LCA2NjMwMSwgCisgICAgNjYzMDUsIDY2MzA5LCA2NjMxMywgNjYzMTcsIDY2MzIxLCA2NjMyNSwgNjYzMjksIDY2MzMzLCA2NjMzNywgNjYzNDEsIAorICAgIDY2MzQ1LCA2NjM0OSwgNjYzNTMsIDY2MzU3LCA2NjM2MSwgNjYzNjUsIDY2MzY5LCA2NjM3MywgNjYzNzcsIDY2MzgxLCAKKyAgICA2NjM4NSwgNjYzODksIDY2MzkzLCA2NjM5NywgNjY0MDEsIDY2NDA1LCA2NjQwOSwgNjY0MTMsIDY2NDE3LCA2NjQyMSwgCisgICAgNjY0MjUsIDY2NDI5LCA2NjQzMywgNjY0MzcsIDY2NDQxLCA2NjQ0NSwgNjY0NDksIDY2NDUzLCA2NjQ1NywgNjY0NjEsIAorICAgIDY2NDY1LCA2NjQ2OSwgNjY0NzMsIDY2NDc3LCA2NjQ4MSwgNjY0ODUsIDY2NDg5LCAwLCAwLCAwLCA2NjQ5MywgNjY0OTcsIAorICAgIDY2NTAxLCA2NjUwNSwgNjY1MDksIDY2NTEzLCA2NjUxNywgNjY1MjEsIDY2NTI1LCA2NjUyOSwgNjY1MzMsIDY2NTM3LCAKKyAgICA2NjU0MSwgNjY1NDUsIDY2NTQ5LCA2NjU1MywgNjY1NTcsIDY2NTYxLCA2NjU2NSwgNjY1NjksIDY2NTczLCA2NjU3NywgCisgICAgNjY1ODEsIDY2NTg1LCA2NjU4OSwgNjY1OTMsIDY2NTk3LCA2NjYwMSwgNjY2MDUsIDY2NjA5LCA2NjYxMywgNjY2MTcsIAorICAgIDY2NjIxLCA2NjYyNSwgNjY2MjksIDY2NjMzLCA2NjYzNywgNjY2NDEsIDY2NjQ1LCA2NjY0OSwgNjY2NTMsIDY2NjU3LCAKKyAgICA2NjY2MSwgNjY2NjUsIDY2NjY5LCA2NjY3MywgNjY2NzcsIDY2NjgxLCA2NjY4NSwgNjY2ODksIDY2NjkzLCA2NjY5NywgCisgICAgNjY3MDEsIDY2NzA1LCA2NjcwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjY3MTMsIDY2NzE4LCA2NjcyMiwgCisgICAgNjY3MjcsIDY2NzMyLCA2NjczNywgNjY3NDIsIDY2NzQ3LCA2Njc1MSwgNjY3NTYsIDY2NzYxLCA2Njc2NiwgNjY3NzEsIAorICAgIDY2Nzc2LCA2Njc4MSwgNjY3ODYsIDY2NzkwLCA2Njc5NCwgNjY3OTksIDY2ODA0LCA2NjgwOSwgNjY4MTQsIDY2ODE5LCAKKyAgICA2NjgyMywgNjY4MjgsIDY2ODMzLCA2NjgzOCwgNjY4NDMsIDY2ODQ4LCA2Njg1MiwgNjY4NTcsIDY2ODYxLCA2Njg2NiwgCisgICAgNjY4NzAsIDY2ODc1LCA2Njg3OSwgNjY4ODMsIDY2ODg3LCA2Njg5MiwgNjY4OTcsIDY2OTAyLCA2NjkxMCwgNjY5MTgsIAorICAgIDY2OTI2LCA2NjkzNCwgNjY5NDEsIDY2OTQ5LCA2Njk1NSwgNjY5NjMsIDY2OTY3LCA2Njk3MSwgNjY5NzUsIDY2OTc5LCAKKyAgICA2Njk4MywgNjY5ODcsIDY2OTkxLCA2Njk5NSwgNjY5OTksIDY3MDAzLCA2NzAwNywgNjcwMTEsIDY3MDE1LCA2NzAxOSwgCisgICAgNjcwMjMsIDY3MDI3LCA2NzAzMSwgNjcwMzUsIDY3MDM5LCA2NzA0MywgNjcwNDcsIDY3MDUxLCA2NzA1NSwgNjcwNTksIAorICAgIDY3MDYzLCA2NzA2NywgNjcwNzEsIDY3MDc1LCA2NzA3OSwgNjcwODMsIDY3MDg3LCA2NzA5MSwgNjcwOTUsIDY3MDk5LCAKKyAgICA2NzEwMywgNjcxMDcsIDY3MTEwLCA2NzExNCwgNjcxMTgsIDY3MTIyLCA2NzEyNiwgNjcxMzAsIDY3MTM0LCA2NzEzOCwgCisgICAgNjcxNDIsIDY3MTQ2LCA2NzE1MCwgNjcxNTQsIDY3MTU4LCA2NzE2MiwgNjcxNjYsIDY3MTcwLCA2NzE3NCwgNjcxNzgsIAorICAgIDY3MTgyLCA2NzE4NiwgNjcxOTAsIDY3MTk0LCA2NzE5OCwgNjcyMDIsIDY3MjA2LCA2NzIxMCwgNjcyMTQsIDY3MjE4LCAKKyAgICA2NzIyMiwgNjcyMjYsIDY3MjMwLCA2NzIzNCwgNjcyMzgsIDY3MjQyLCA2NzI0NiwgNjcyNTAsIDY3MjU0LCA2NzI1NywgCisgICAgNjcyNjEsIDY3MjY1LCA2NzI2OCwgNjcyNzIsIDY3Mjc2LCA2NzI4MCwgNjcyODMsIDY3Mjg3LCA2NzI5MSwgNjcyOTUsIAorICAgIDY3Mjk5LCA2NzMwMywgNjczMDcsIDY3MzExLCA2NzMxNSwgNjczMTksIDY3MzIzLCA2NzMyNywgNjczMzEsIDY3MzM1LCAKKyAgICA2NzMzOSwgNjczNDIsIDY3MzQ2LCA2NzM1MCwgNjczNTQsIDY3MzU4LCA2NzM2MiwgNjczNjYsIDY3MzcwLCA2NzM3NCwgCisgICAgNjczNzgsIDY3MzgxLCA2NzM4NCwgNjczODgsIDY3MzkyLCA2NzM5NiwgNjczOTksIDY3NDAyLCA2NzQwNiwgNjc0MTAsIAorICAgIDY3NDE0LCA2NzQxOCwgNjc0MjIsIDY3NDI2LCA2NzQzMCwgNjc0MzQsIDY3NDM4LCA2NzQ0MiwgNjc0NDYsIDY3NDUwLCAKKyAgICA2NzQ1NCwgNjc0NTgsIDY3NDYyLCA2NzQ2NiwgNjc0NzAsIDY3NDc0LCA2NzQ3OCwgNjc0ODIsIDY3NDg2LCA2NzQ5MCwgCisgICAgNjc0OTQsIDY3NDk4LCA2NzUwMiwgNjc1MDYsIDY3NTEwLCA2NzUxNCwgNjc1MTgsIDY3NTIyLCA2NzUyNiwgNjc1MzAsIAorICAgIDY3NTM0LCA2NzUzOCwgNjc1NDIsIDY3NTQ2LCA2NzU1MCwgNjc1NTMsIDY3NTU3LCA2NzU2MSwgNjc1NjUsIDY3NTY5LCAKKyAgICA2NzU3MywgNjc1NzcsIDY3NTgxLCA2NzU4NSwgNjc1ODksIDY3NTkzLCA2NzU5NywgNjc2MDEsIDY3NjA1LCA2NzYwOSwgCisgICAgNjc2MTMsIDY3NjE3LCA2NzYyMSwgNjc2MjUsIDY3NjI5LCA2NzYzMywgNjc2MzcsIDY3NjQxLCA2NzY0NSwgNjc2NDksIAorICAgIDY3NjUzLCA2NzY1NywgNjc2NjEsIDY3NjY1LCA2NzY2OSwgNjc2NzMsIDY3Njc3LCA2NzY4MSwgNjc2ODUsIDY3Njg5LCAKKyAgICA2NzY5MywgNjc2OTcsIDY3NzAwLCA2NzcwNCwgNjc3MDgsIDY3NzEyLCA2NzcxNiwgNjc3MjAsIDY3NzI0LCA2NzcyOCwgCisgICAgNjc3MzIsIDY3NzM2LCA2Nzc0MCwgNjc3NDQsIDY3NzQ4LCA2Nzc1MiwgNjc3NTYsIDY3NzYwLCA2Nzc2NCwgNjc3NjcsIAorICAgIDY3NzcxLCA2Nzc3NSwgNjc3NzksIDY3NzgzLCA2Nzc4NywgNjc3OTEsIDY3Nzk1LCA2Nzc5OSwgNjc4MDMsIDY3ODA3LCAKKyAgICA2NzgxMSwgNjc4MTUsIDY3ODE5LCA2NzgyMywgNjc4MjcsIDY3ODMxLCA2NzgzNSwgNjc4MzksIDY3ODQzLCA2Nzg0NywgCisgICAgNjc4NTEsIDY3ODU0LCA2Nzg1OCwgNjc4NjIsIDY3ODY2LCA2Nzg3MCwgNjc4NzQsIDY3ODc4LCA2Nzg4MiwgNjc4ODYsIAorICAgIDY3ODkwLCA2Nzg5NCwgNjc4OTgsIDY3OTAyLCA2NzkwNiwgNjc5MTAsIDY3OTE0LCA2NzkxOCwgNjc5MjIsIDY3OTI2LCAKKyAgICA2NzkzMCwgNjc5MzQsIDY3OTM4LCA2Nzk0MiwgNjc5NDYsIDY3OTUwLCA2Nzk1NCwgNjc5NTgsIDY3OTYyLCA2Nzk2NiwgCisgICAgNjc5NzAsIDY3OTc0LCA2Nzk3OCwgNjc5ODIsIDY3OTg2LCA2Nzk5MCwgNjc5OTQsIDY3OTk4LCA2ODAwMiwgNjgwMDYsIAorICAgIDY4MDEwLCA2ODAxNCwgNjgwMTgsIDY4MDIyLCA2ODAyNiwgNjgwMjksIDY4MDM0LCA2ODAzOCwgNjgwNDQsIDY4MDQ5LCAKKyAgICA2ODA1NSwgNjgwNTksIDY4MDYzLCA2ODA2NywgNjgwNzEsIDY4MDc1LCA2ODA3OSwgNjgwODMsIDY4MDg3LCA2ODA5MSwgCisgICAgNjgwOTUsIDY4MDk5LCA2ODEwMywgNjgxMDcsIDY4MTExLCA2ODExNCwgNjgxMTcsIDY4MTIwLCA2ODEyMywgNjgxMjYsIAorICAgIDY4MTI5LCA2ODEzMiwgNjgxMzUsIDY4MTM4LCA2ODE0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjgxNDksIDY4MTU0LCA2ODE1OSwgNjgxNjQsIDY4MTY5LCA2ODE3NSwgNjgxODEsIAorICAgIDY4MTg2LCA2ODE5MSwgNjgxOTYsIDY4MjAxLCA2ODIwOCwgNjgyMTUsIDY4MjIyLCA2ODIyOSwgNjgyMzYsIDY4MjQzLCAKKyAgICA2ODI1MywgNjgyNjMsIDY4MjcwLCA2ODI3NywgNjgyODMsIDY4Mjg5LCA2ODI5NSwgNjgzMDEsIDY4MzEwLCA2ODMxOSwgCisgICAgNjgzMjYsIDY4MzMzLCA2ODM0NCwgNjgzNTUsIDY4MzYwLCAwLCAwLCA2ODM2NSwgNjgzNzIsIDY4Mzc5LCA2ODM4NiwgCisgICAgNjgzOTMsIDY4NDAwLCA2ODQwNywgNjg0MTMsIDY4NDE5LCA2ODQyNSwgNjg0MzEsIDY4NDM4LCA2ODQ0NSwgNjg0NTAsIAorICAgIDY4NDU0LCA2ODQ2MSwgNjg0NjgsIDY4NDc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODQ3OSwgNjg0ODMsIDY4NDg3LCAKKyAgICA2ODQ5MCwgNjg0OTMsIDY4NDk4LCA2ODUwMywgNjg1MDgsIDY4NTEzLCA2ODUxOCwgNjg1MjMsIDY4NTI4LCA2ODUzMywgCisgICAgNjg1MzgsIDY4NTQzLCA2ODU1MiwgNjg1NjEsIDY4NTY2LCA2ODU3MSwgNjg1NzYsIDY4NTgxLCA2ODU4NiwgNjg1OTEsIAorICAgIDY4NTk2LCA2ODYwMSwgNjg2MDYsIDY4NjExLCA2ODYxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjg2MjEsIDY4NjI0LCAKKyAgICA2ODYyNywgNjg2MzAsIDY4NjM0LCA2ODYzOCwgNjg2NDIsIDY4NjQ2LCA2ODY0OSwgNjg2NTMsIDY4NjU2LCA2ODY2MCwgCisgICAgNjg2NjMsIDY4NjY3LCA2ODY3MSwgNjg2NzUsIDY4Njc5LCA2ODY4MywgNjg2ODcsIDY4NjkxLCA2ODY5NCwgNjg2OTgsIAorICAgIDY4NzAyLCA2ODcwNiwgNjg3MTAsIDY4NzE0LCA2ODcxOCwgNjg3MjIsIDY4NzI2LCA2ODczMCwgNjg3MzQsIDY4NzM4LCAKKyAgICA2ODc0MiwgNjg3NDYsIDY4NzUwLCA2ODc1MywgNjg3NTcsIDY4NzYxLCA2ODc2NSwgNjg3NjksIDY4NzczLCA2ODc3NywgCisgICAgNjg3ODEsIDY4Nzg1LCA2ODc4OSwgNjg3OTMsIDY4Nzk3LCA2ODgwMSwgNjg4MDUsIDY4ODA5LCA2ODgxMywgNjg4MTcsIAorICAgIDY4ODIxLCA2ODgyNSwgNjg4MjksIDY4ODMzLCA2ODgzNywgNjg4NDEsIDY4ODQ1LCA2ODg0OSwgNjg4NTIsIDY4ODU2LCAKKyAgICA2ODg2MCwgNjg4NjQsIDY4ODY4LCA2ODg3MiwgNjg4NzYsIDY4ODgwLCA2ODg4MywgNjg4ODcsIDY4ODkxLCA2ODg5NSwgCisgICAgNjg4OTksIDY4OTAzLCA2ODkwNywgNjg5MTEsIDY4OTE1LCA2ODkxOSwgNjg5MjMsIDY4OTI3LCA2ODkzMSwgNjg5MzYsIAorICAgIDY4OTQxLCA2ODk0NCwgNjg5NDksIDY4OTUyLCA2ODk1NSwgNjg5NTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY4OTYyLCAKKyAgICA2ODk3MSwgNjg5ODAsIDY4OTg5LCA2ODk5OCwgNjkwMDcsIDY5MDE2LCA2OTAyNSwgNjkwMzQsIDY5MDQyLCA2OTA0OSwgCisgICAgNjkwNTcsIDY5MDY0LCA2OTA3MiwgNjkwODIsIDY5MDkxLCA2OTEwMSwgNjkxMTAsIDY5MTIwLCA2OTEyOCwgNjkxMzUsIAorICAgIDY5MTQzLCA2OTE1MCwgNjkxNTgsIDY5MTYzLCA2OTE2OCwgNjkxNzMsIDY5MTgyLCA2OTE4OCwgNjkxOTQsIDY5MjAxLCAKKyAgICA2OTIxMCwgNjkyMTgsIDY5MjI2LCA2OTIzNCwgNjkyNDEsIDY5MjQ4LCA2OTI1NSwgNjkyNjIsIDY5MjY3LCA2OTI3MiwgCisgICAgNjkyNzcsIDY5MjgyLCA2OTI4NywgNjkyOTIsIDY5Mjk3LCA2OTMwMiwgNjkzMTAsIDY5MzE4LCA2OTMyNCwgNjkzMjksIAorICAgIDY5MzM0LCA2OTMzOSwgNjkzNDQsIDY5MzQ5LCA2OTM1NCwgNjkzNTksIDY5MzY0LCA2OTM2OSwgNjkzNzcsIDY5Mzg1LCAKKyAgICA2OTM5MCwgNjkzOTUsIDY5NDA0LCA2OTQxMywgNjk0MjAsIDY5NDI3LCA2OTQzNiwgNjk0NDUsIDY5NDU2LCA2OTQ2NywgCisgICAgNjk0NzMsIDY5NDc5LCA2OTQ4NywgNjk0OTUsIDY5NTA0LCA2OTUxMywgNjk1MjAsIDY5NTI3LCA2OTUzMiwgNjk1MzcsIAorICAgIDY5NTQ4LCA2OTU1OSwgNjk1NjcsIDY5NTc1LCA2OTU4NSwgNjk1OTUsIDY5NjA2LCA2OTYxNywgNjk2MjYsIDY5NjM1LCAKKyAgICA2OTY0MiwgNjk2NDksIDY5NjU2LCA2OTY2MywgNjk2NzIsIDY5NjgxLCA2OTY4NiwgNjk2OTEsIDY5Njk4LCA2OTcwNSwgCisgICAgNjk3MTIsIDY5NzE5LCA2OTczMCwgNjk3NDEsIDY5NzQ2LCA2OTc1MSwgNjk3NTYsIDY5NzYxLCA2OTc2NiwgNjk3NzEsIAorICAgIDY5Nzc2LCA2OTc4MSwgNjk3ODUsIDY5NzkwLCA2OTc5NSwgNjk4MDAsIDY5ODA1LCA2OTgxMCwgNjk4MTYsIDY5ODIxLCAKKyAgICA2OTgyNiwgNjk4MzMsIDY5ODQwLCA2OTg0NywgNjk4NTQsIDY5ODYxLCA2OTg2OSwgNjk4NzcsIDY5ODgyLCA2OTg4NywgCisgICAgNjk4OTMsIDY5ODk5LCA2OTkwNSwgNjk5MTEsIDY5OTE4LCA2OTkyNSwgNjk5MzIsIDY5OTM2LCA2OTk0MywgNjk5NDgsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDUyOTIwLCA1MjkyNCwgNTI5MjgsIDUyOTMzLCA1MjkzOCwgNTI5NDMsIDUyOTQ3LCA1Mjk1MSwgCi0gICAgNTI5NTUsIDUyOTYwLCA1Mjk2NSwgNTI5NjksIDUyOTczLCA1Mjk3NywgNTI5ODEsIDUyOTg2LCA1Mjk5MSwgNTI5OTYsIAotICAgIDUzMDAxLCA1MzAwNSwgNTMwMDksIDUzMDE0LCA1MzAxOSwgNTMwMjQsIDUzMDI5LCA1MzAzMywgMCwgNTMwMzcsIDUzMDQxLCAKLSAgICA1MzA0NSwgNTMwNDksIDUzMDUzLCA1MzA1NywgNTMwNjEsIDUzMDY2LCA1MzA3MSwgNTMwNzUsIDUzMDgwLCA1MzA4NSwgCi0gICAgNTMwOTQsIDUzMDk4LCA1MzEwMiwgNTMxMDYsIDUzMTEzLCA1MzExNywgNTMxMjIsIDUzMTI3LCA1MzEzMSwgNTMxMzUsIAotICAgIDUzMTQxLCA1MzE0NiwgNTMxNTEsIDUzMTU2LCA1MzE2MSwgNTMxNjUsIDUzMTY5LCA1MzE3MywgNTMxNzcsIDUzMTgxLCAKLSAgICA1MzE4NiwgNTMxOTEsIDUzMTk1LCA1MzE5OSwgNTMyMDQsIDUzMjA5LCA1MzIxNCwgNTMyMTgsIDUzMjIyLCA1MzIyNywgCi0gICAgNTMyMzIsIDUzMjM4LCA1MzI0NCwgNTMyNDgsIDUzMjU0LCA1MzI2MCwgNTMyNjQsIDUzMjcwLCA1MzI3NiwgNTMyODEsIAotICAgIDUzMjg2LCA1MzI5MCwgNTMyOTYsIDUzMzAwLCA1MzMwNCwgNTMzMTAsIDUzMzE2LCA1MzMyMSwgNTMzMjYsIDUzMzMwLCAKLSAgICA1MzMzNCwgNTMzNDIsIDUzMzQ4LCA1MzM1NCwgNTMzNjAsIDUzMzY1LCA1MzM3MCwgNTMzNzUsIDUzMzgxLCA1MzM4NSwgCi0gICAgNTMzOTEsIDUzMzk1LCA1MzM5OSwgNTM0MDUsIDUzNDExLCA1MzQxNywgNTM0MjMsIDUzNDI5LCA1MzQzNSwgNTM0NDEsIAotICAgIDUzNDQ3LCA1MzQ1MywgNTM0NTksIDUzNDY1LCA1MzQ3MSwgNTM0NzUsIDUzNDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA1MzQ4NywgNTM0OTAsIDUzNDk0LCA1MzQ5OCwgNTM1MDIsIDUzNTA2LCA1MzUwOSwgNTM1MTIsIAotICAgIDUzNTE2LCA1MzUyMCwgNTM1MjQsIDUzNTI4LCA1MzUzMSwgNTM1MzYsIDUzNTQwLCA1MzU0NCwgNTM1NDgsIDUzNTU0LCAKLSAgICA1MzU1OCwgNTM1NjIsIDUzNTY2LCA1MzU3MCwgNTM1NzcsIDUzNTgzLCA1MzU4NywgNTM1OTEsIDUzNTk1LCA1MzU5OSwgCi0gICAgNTM2MDMsIDUzNjA3LCA1MzYxMSwgNTM2MTUsIDUzNjE5LCA1MzYyMywgNTM2MjcsIDUzNjMzLCA1MzYzNywgNTM2NDEsIAotICAgIDUzNjQ1LCA1MzY0OSwgNTM2NTMsIDUzNjU3LCA1MzY2MSwgNTM2NjUsIDUzNjY5LCA1MzY3MywgNTM2NzcsIDUzNjgxLCAKLSAgICA1MzY4NSwgNTM2ODksIDUzNjkzLCA1MzY5NywgNTM3MDMsIDUzNzA5LCA1MzcxNCwgNTM3MTksIDUzNzIzLCA1MzcyNywgCi0gICAgNTM3MzEsIDUzNzM1LCA1MzczOSwgNTM3NDMsIDUzNzQ3LCA1Mzc1MSwgNTM3NTUsIDUzNzU5LCA1Mzc2MywgNTM3NjcsIAotICAgIDUzNzcxLCA1Mzc3NSwgNTM3NzksIDUzNzgzLCA1Mzc4NywgNTM3OTEsIDUzNzk1LCA1Mzc5OSwgNTM4MDMsIDUzODA3LCAKLSAgICA1MzgxMSwgNTM4MTUsIDUzODIxLCA1MzgyNSwgNTM4MjksIDUzODMzLCA1MzgzNywgNTM4NDEsIDUzODQ1LCA1Mzg0OSwgCi0gICAgNTM4NTMsIDUzODU4LCA1Mzg2NSwgNTM4NjksIDUzODczLCA1Mzg3NywgNTM4ODEsIDUzODg1LCA1Mzg4OSwgNTM4OTMsIAotICAgIDUzODk3LCA1MzkwMSwgNTM5MDUsIDUzOTA5LCA1MzkxMywgNTM5MjAsIDUzOTI0LCA1MzkzMCwgNTM5MzQsIDUzOTM4LCAKLSAgICA1Mzk0MiwgNTM5NDYsIDUzOTUwLCA1Mzk1MywgNTM5NTcsIDUzOTYxLCA1Mzk2NSwgNTM5NjksIDUzOTczLCA1Mzk3NywgCi0gICAgNTM5ODEsIDUzOTg1LCA1Mzk4OSwgNTM5OTMsIDUzOTk3LCA1NDAwMSwgNTQwMDUsIDU0MDA5LCA1NDAxMywgNTQwMTcsIAotICAgIDU0MDIxLCA1NDAyNSwgNTQwMjksIDU0MDMzLCA1NDAzNywgNTQwNDEsIDU0MDQ1LCA1NDA0OSwgNTQwNTMsIDU0MDU3LCAKLSAgICA1NDA2MSwgNTQwNjUsIDU0MDY5LCA1NDA3MywgNTQwNzcsIDU0MDgxLCA1NDA4NywgNTQwOTEsIDU0MDk1LCA1NDA5OSwgCi0gICAgNTQxMDMsIDU0MTA3LCA1NDExMSwgNTQxMTUsIDU0MTE5LCA1NDEyMywgNTQxMjcsIDU0MTMxLCA1NDEzNSwgNTQxMzksIAotICAgIDU0MTQzLCA1NDE0NywgNTQxNTEsIDU0MTU1LCA1NDE1OSwgNTQxNjMsIDU0MTY3LCA1NDE3MSwgNTQxNzUsIDU0MTc5LCAKLSAgICA1NDE4MywgNTQxODcsIDU0MTkxLCA1NDE5NSwgNTQyMDMsIDU0MjA3LCA1NDIxMSwgNTQyMTUsIDU0MjE5LCA1NDIyMywgCi0gICAgNTQyMjksIDU0MjMzLCA1NDIzNywgNTQyNDEsIDU0MjQ1LCA1NDI0OSwgNTQyNTMsIDU0MjU3LCA1NDI2MSwgNTQyNjUsIAotICAgIDU0MjY5LCA1NDI3MywgNTQyNzcsIDU0MjgxLCA1NDI4NywgNTQyOTEsIDU0Mjk1LCA1NDI5OSwgNTQzMDMsIDU0MzA3LCAKLSAgICA1NDMxMSwgNTQzMTUsIDU0MzE5LCA1NDMyMywgNTQzMjcsIDU0MzMxLCA1NDMzNSwgNTQzMzksIDU0MzQzLCA1NDM0NywgCi0gICAgNTQzNTEsIDU0MzU1LCA1NDM1OSwgNTQzNjMsIDU0MzY3LCA1NDM3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQzNzUsIDU0MzgzLCA1NDM5MCwgCi0gICAgNTQ0MDEsIDU0NDExLCA1NDQxOSwgNTQ0MjgsIDU0NDM3LCA1NDQ0NywgNTQ0NTksIDU0NDcxLCA1NDQ4MiwgMCwgMCwgMCwgCi0gICAgMCwgNTQ0ODgsIDU0NDkxLCA1NDQ5NCwgNTQ0OTksIDU0NTAyLCA1NDUwOSwgNTQ1MTMsIDU0NTE3LCA1NDUyMSwgNTQ1MjUsIAotICAgIDU0NTI5LCA1NDUzNCwgNTQ1MzksIDU0NTQzLCA1NDU0NywgNTQ1NTIsIDU0NTU3LCA1NDU2MiwgNTQ1NjcsIDU0NTcwLCAKLSAgICA1NDU3MywgNTQ1NzksIDU0NTg1LCA1NDU5MCwgNTQ1OTUsIDU0NjAyLCA1NDYwOSwgNTQ2MTMsIDU0NjE3LCA1NDYyMSwgCi0gICAgNTQ2MjgsIDU0NjM0LCA1NDY0MSwgNTQ2NDYsIDU0NjUwLCA1NDY1NCwgNTQ2NTgsIDU0NjYyLCA1NDY2NiwgNTQ2NzAsIAotICAgIDU0Njc0LCA1NDY3OCwgNTQ2ODIsIDU0Njg3LCA1NDY5MiwgNTQ2OTcsIDU0NzAyLCA1NDcwOCwgNTQ3MTMsIDU0NzE3LCAKLSAgICA1NDcyMywgNTQ3MzQsIDU0NzQ0LCA1NDc1OSwgNTQ3NjgsIDU0NzcyLCA1NDc4MSwgNTQ3ODYsIDU0NzkxLCA1NDc5NiwgCi0gICAgNTQ4MDEsIDU0ODA0LCA1NDgwOSwgNTQ4MTMsIDAsIDU0ODE5LCA1NDgyMywgNTQ4MjYsIDU0ODMwLCA1NDgzMywgNTQ4MzcsIAotICAgIDU0ODQwLCA1NDg0NCwgNTQ4NDcsIDU0ODUxLCA1NDg1NCwgNTQ4NTcsIDU0ODYxLCA1NDg2NSwgNTQ4NjksIDU0ODczLCAKLSAgICA1NDg3NywgNTQ4ODEsIDU0ODg1LCA1NDg4OSwgNTQ4OTMsIDU0ODk3LCA1NDkwMSwgNTQ5MDUsIDU0OTA5LCA1NDkxMywgCi0gICAgNTQ5MTcsIDU0OTIxLCA1NDkyNSwgNTQ5MjksIDU0OTMzLCA1NDkzNywgNTQ5NDEsIDU0OTQ1LCA1NDk0OSwgNTQ5NTQsIAotICAgIDU0OTU4LCA1NDk2MiwgNTQ5NjYsIDU0OTcwLCA1NDk3MywgNTQ5NzcsIDU0OTgxLCA1NDk4NSwgNTQ5ODksIDU0OTkzLCAKLSAgICA1NDk5NywgNTUwMDAsIDU1MDA0LCA1NTAwNywgNTUwMTEsIDU1MDE1LCA1NTAxOSwgNTUwMjMsIDU1MDI3LCA1NTAzMSwgCi0gICAgNTUwMzUsIDU1MDM5LCA1NTA0MywgNTUwNDcsIDU1MDUxLCA1NTA1NSwgNTUwNTgsIDU1MDYyLCA1NTA2NiwgNTUwNzAsIAotICAgIDU1MDc0LCA1NTA3OCwgNTUwODEsIDU1MDg2LCA1NTA5MCwgNTUwOTUsIDU1MDk5LCA1NTEwMiwgNTUxMDYsIDU1MTEwLCAKLSAgICA1NTExNCwgNTUxMTgsIDU1MTIzLCA1NTEyNywgNTUxMzEsIDU1MTM1LCA1NTEzOSwgNTUxNDIsIDU1MTQ2LCA1NTE1MCwgMCwgCi0gICAgMCwgNTUxNTUsIDU1MTYzLCA1NTE3MSwgNTUxNzgsIDU1MTg1LCA1NTE4OSwgNTUxOTUsIDU1MjAwLCA1NTIwNSwgNTUyMDksIAotICAgIDU1MjEyLCA1NTIxNiwgNTUyMTksIDU1MjIzLCA1NTIyNiwgNTUyMzAsIDU1MjMzLCA1NTIzNywgNTUyNDAsIDU1MjQzLCAKLSAgICA1NTI0NywgNTUyNTEsIDU1MjU1LCA1NTI1OSwgNTUyNjMsIDU1MjY3LCA1NTI3MSwgNTUyNzUsIDU1Mjc5LCA1NTI4MywgCi0gICAgNTUyODcsIDU1MjkxLCA1NTI5NSwgNTUyOTksIDU1MzAzLCA1NTMwNywgNTUzMTEsIDU1MzE1LCA1NTMxOSwgNTUzMjMsIAotICAgIDU1MzI3LCA1NTMzMSwgNTUzMzUsIDU1MzQwLCA1NTM0NCwgNTUzNDgsIDU1MzUyLCA1NTM1NiwgNTUzNTksIDU1MzYzLCAKLSAgICA1NTM2NywgNTUzNzEsIDU1Mzc1LCA1NTM3OSwgNTUzODMsIDU1Mzg2LCA1NTM5MCwgNTUzOTMsIDU1Mzk3LCA1NTQwMSwgCi0gICAgNTU0MDUsIDU1NDA5LCA1NTQxMywgNTU0MTcsIDU1NDIxLCA1NTQyNSwgNTU0MjksIDU1NDMzLCA1NTQzNywgNTU0NDEsIAotICAgIDU1NDQ0LCA1NTQ0OCwgNTU0NTIsIDU1NDU2LCA1NTQ2MCwgNTU0NjQsIDU1NDY3LCA1NTQ3MiwgNTU0NzYsIDU1NDgxLCAKLSAgICA1NTQ4NSwgNTU0ODgsIDU1NDkyLCA1NTQ5NiwgNTU1MDAsIDU1NTA0LCA1NTUwOSwgNTU1MTMsIDU1NTE3LCA1NTUyMSwgCi0gICAgNTU1MjUsIDU1NTI4LCA1NTUzMiwgNTU1MzYsIDU1NTQxLCA1NTU0NSwgNTU1NDksIDU1NTUzLCA1NTU1NywgNTU1NjIsIAotICAgIDU1NTY5LCA1NTU3MywgNTU1NzksIDAsIDAsIDAsIDAsIDAsIDU1NTg0LCA1NTU4OCwgNTU1OTIsIDU1NTk1LCA1NTU5OSwgCi0gICAgNTU2MDMsIDU1NjA3LCA1NTYxMCwgNTU2MTMsIDU1NjE2LCA1NTYyMCwgNTU2MjMsIDU1NjI3LCA1NTYzMSwgNTU2MzUsIAotICAgIDU1NjM5LCA1NTY0MywgNTU2NDcsIDU1NjUwLCA1NTY1NCwgNTU2NTgsIDU1NjYxLCA1NTY2NCwgNTU2NjcsIDU1NjcwLCAKLSAgICA1NTY3NCwgNTU2NzgsIDU1NjgyLCA1NTY4NiwgNTU2OTAsIDU1Njk0LCA1NTY5OCwgNTU3MDIsIDU1NzA2LCA1NTcxMCwgCi0gICAgNTU3MTMsIDU1NzE2LCA1NTcyMCwgNTU3MjMsIDU1NzI3LCA1NTczMSwgMCwgMCwgMCwgNTU3MzUsIDU1NzM5LCA1NTc0MywgCi0gICAgNTU3NDcsIDU1NzUxLCA1NTc1NSwgNTU3NTksIDU1NzYzLCA1NTc2NywgNTU3NzEsIDU1Nzc1LCA1NTc3OSwgNTU3ODMsIAotICAgIDU1Nzg3LCA1NTc5MSwgNTU3OTUsIDU1Nzk5LCA1NTgwMywgNTU4MDcsIDU1ODExLCA1NTgxNSwgNTU4MTksIDU1ODIzLCAKLSAgICA1NTgyNywgNTU4MzEsIDU1ODM1LCA1NTgzOSwgNTU4NDMsIDU1ODQ3LCA1NTg1MSwgNTU4NTUsIDU1ODU4LCA1NTg2MiwgCi0gICAgNTU4NjUsIDU1ODY5LCA1NTg3MywgNTU4NzYsIDU1ODgwLCA1NTg4NCwgNTU4ODcsIDU1ODkxLCA1NTg5NSwgNTU4OTksIAotICAgIDU1OTAzLCA1NTkwNiwgNTU5MTAsIDU1OTE0LCA1NTkxOCwgNTU5MjIsIDU1OTI2LCA1NTkzMCwgNTU5MzMsIDU1OTM2LCAKLSAgICA1NTk0MCwgNTU5NDQsIDU1OTQ4LCA1NTk1MiwgNTU5NTYsIDU1OTYwLCA1NTk2NCwgNTU5NjgsIDU1OTcyLCA1NTk3NiwgCi0gICAgNTU5ODAsIDU1OTg0LCA1NTk4OCwgNTU5OTIsIDU1OTk2LCA1NjAwMCwgNTYwMDQsIDU2MDA4LCA1NjAxMiwgNTYwMTYsIAotICAgIDU2MDIwLCA1NjAyNCwgNTYwMjgsIDU2MDMyLCA1NjAzNiwgNTYwNDAsIDU2MDQ0LCA1NjA0OCwgNTYwNTIsIDU2MDU2LCAKLSAgICA1NjA2MCwgNTYwNjQsIDU2MDY4LCA1NjA3MiwgNTYwNzYsIDU2MDgwLCA1NjA4NCwgNTYwODgsIDU2MDkyLCA1NjA5NiwgCi0gICAgNTYxMDAsIDAsIDU2MTA0LCA1NjExMCwgNTYxMTYsIDU2MTIxLCA1NjEyNiwgNTYxMzEsIDU2MTM3LCA1NjE0MywgNTYxNDksIAotICAgIDU2MTU1LCA1NjE2MSwgNTYxNjcsIDU2MTczLCA1NjE3OSwgNTYxODUsIDU2MTkxLCA1NjE5NywgNTYyMDEsIDU2MjA1LCAKLSAgICA1NjIwOSwgNTYyMTMsIDU2MjE3LCA1NjIyMSwgNTYyMjUsIDU2MjI5LCA1NjIzMywgNTYyMzcsIDU2MjQxLCA1NjI0NSwgCi0gICAgNTYyNDksIDU2MjUzLCA1NjI1NywgNTYyNjEsIDU2MjY1LCA1NjI2OSwgNTYyNzMsIDU2Mjc3LCA1NjI4MiwgNTYyODcsIAotICAgIDU2MjkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjI5NiwgNTYzMDAsIDU2MzA0LCA1NjMwOCwgNTYzMTIsIDU2MzE2LCAKLSAgICA1NjMyMCwgNTYzMjQsIDU2MzI4LCA1NjMzMiwgNTYzMzYsIDU2MzQwLCA1NjM0NCwgNTYzNDgsIDU2MzUyLCA1NjM1NiwgCi0gICAgNTYzNTksIDU2MzYyLCA1NjM2NSwgNTYzNjksIDU2MzczLCA1NjM3NywgNTYzODEsIDU2Mzg1LCA1NjM4OSwgNTYzOTMsIAotICAgIDU2Mzk3LCA1NjQwMSwgNTY0MDUsIDU2NDA5LCA1NjQxMywgNTY0MTcsIDU2NDIxLCA1NjQyNSwgNTY0MjksIDU2NDMzLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjQzNywgNTY0NDIsIDU2NDQ3LCA1NjQ1MiwgNTY0NTYsIAotICAgIDU2NDYxLCA1NjQ2NSwgNTY0NzAsIDU2NDc1LCA1NjQ4MCwgNTY0ODUsIDU2NDkwLCA1NjQ5NCwgNTY0OTksIDU2NTA0LCAKLSAgICA1NjUwOSwgNTY1MTQsIDU2NTE4LCA1NjUyMiwgNTY1MjYsIDU2NTMwLCA1NjUzNCwgNTY1MzgsIDU2NTQyLCA1NjU0NiwgCi0gICAgNTY1NTAsIDU2NTU0LCA1NjU1OCwgNTY1NjIsIDU2NTY2LCA1NjU3MCwgNTY1NzUsIDU2NTgwLCA1NjU4NSwgNTY1OTAsIAotICAgIDU2NTk1LCA1NjYwMCwgNTY2MDUsIDU2NjEwLCA1NjYxNSwgNTY2MjAsIDU2NjI1LCA1NjYzMCwgNTY2MzUsIDU2NjQwLCAKLSAgICA1NjY0NSwgNTY2NTEsIDAsIDU2NjU4LCA1NjY2MSwgNTY2NjQsIDU2NjY3LCA1NjY3MCwgNTY2NzMsIDU2Njc2LCA1NjY3OSwgCi0gICAgNTY2ODIsIDU2Njg1LCA1NjY4OSwgNTY2OTMsIDU2Njk3LCA1NjcwMSwgNTY3MDUsIDU2NzA5LCA1NjcxMywgNTY3MTcsIAotICAgIDU2NzIxLCA1NjcyNSwgNTY3MjksIDU2NzMzLCA1NjczNywgNTY3NDEsIDU2NzQ1LCA1Njc0OSwgNTY3NTMsIDU2NzU3LCAKLSAgICA1Njc2MSwgNTY3NjUsIDU2NzY5LCA1Njc3MywgNTY3NzcsIDU2NzgxLCA1Njc4NSwgNTY3ODksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU2NzkzLCA1Njc5NiwgNTY4MDEsIDU2ODA2LCA1NjgxMSwgNTY4MTYsIDU2ODIxLCA1NjgyNiwgCi0gICAgNTY4MzEsIDU2ODM2LCA1Njg0MSwgNTY4NDUsIDU2ODUwLCA1Njg1NSwgNTY4NjAsIDU2ODY1LCA1Njg3MCwgNTY4NzQsIAotICAgIDU2ODc4LCA1Njg4MiwgNTY4ODYsIDU2ODkwLCA1Njg5NCwgNTY4OTgsIDU2OTAyLCA1NjkwNiwgNTY5MTAsIDU2OTE0LCAKLSAgICA1NjkxOCwgNTY5MjIsIDU2OTI2LCA1NjkzMSwgNTY5MzYsIDU2OTQxLCA1Njk0NiwgNTY5NTEsIDU2OTU2LCA1Njk2MSwgCi0gICAgNTY5NjYsIDU2OTcxLCA1Njk3NiwgNTY5ODEsIDU2OTg2LCA1Njk5MSwgNTY5OTYsIDU3MDAyLCA1NzAwOCwgNTcwMTMsIAotICAgIDU3MDE4LCA1NzAyMSwgNTcwMjQsIDU3MDI3LCA1NzAzMCwgNTcwMzMsIDU3MDM2LCA1NzAzOSwgNTcwNDIsIDU3MDQ1LCAKLSAgICA1NzA0OSwgNTcwNTMsIDU3MDU3LCA1NzA2MSwgNTcwNjUsIDU3MDY5LCA1NzA3MywgNTcwNzcsIDU3MDgxLCA1NzA4NSwgCi0gICAgNTcwODksIDU3MDkzLCA1NzA5NywgNTcxMDEsIDU3MTA1LCA1NzEwOSwgNTcxMTMsIDU3MTE3LCA1NzEyMSwgNTcxMjUsIAotICAgIDU3MTI5LCA1NzEzMywgNTcxMzcsIDU3MTQxLCA1NzE0NSwgNTcxNDksIDU3MTUzLCA1NzE1NywgNTcxNjEsIDU3MTY1LCAKLSAgICA1NzE2OSwgNTcxNzMsIDU3MTc3LCA1NzE4MSwgNTcxODUsIDU3MTg5LCA1NzE5MywgNTcxOTcsIDU3MjAxLCA1NzIwNSwgCi0gICAgNTcyMTAsIDU3MjE1LCA1NzIyMCwgNTcyMjUsIDU3MjI5LCA1NzIzNCwgNTcyMzksIDU3MjQ0LCA1NzI0OSwgNTcyNTQsIAotICAgIDU3MjU5LCA1NzI2NCwgNTcyNjksIDU3Mjc0LCA1NzI3OCwgNTcyODQsIDU3MjkwLCA1NzI5NiwgNTczMDIsIDU3MzA4LCAKLSAgICA1NzMxNCwgNTczMjAsIDU3MzI2LCA1NzMzMiwgNTczMzgsIDU3MzQ0LCA1NzM1MCwgNTczNTMsIDU3MzU2LCA1NzM1OSwgCi0gICAgNTczNjQsIDU3MzY3LCA1NzM3MCwgNTczNzMsIDU3Mzc2LCA1NzM3OSwgNTczODIsIDU3Mzg2LCA1NzM5MCwgNTczOTQsIAotICAgIDU3Mzk4LCA1NzQwMiwgNTc0MDYsIDU3NDEwLCA1NzQxNCwgNTc0MTgsIDU3NDIyLCA1NzQyNiwgNTc0MzAsIDU3NDM0LCAKLSAgICA1NzQzNywgNTc0NDEsIDU3NDQ1LCA1NzQ0OSwgNTc0NTMsIDU3NDU3LCA1NzQ2MCwgNTc0NjQsIDU3NDY4LCA1NzQ3MiwgCi0gICAgNTc0NzYsIDU3NDc5LCA1NzQ4MywgNTc0ODcsIDU3NDkxLCA1NzQ5NSwgNTc0OTgsIDU3NTAyLCA1NzUwNiwgNTc1MDksIAotICAgIDU3NTEzLCA1NzUxNywgNTc1MjEsIDU3NTI1LCA1NzUyOSwgNTc1MzMsIDU3NTM3LCAwLCA1NzU0MSwgNTc1NDQsIDU3NTQ3LCAKLSAgICA1NzU1MCwgNTc1NTMsIDU3NTU2LCA1NzU1OSwgNTc1NjIsIDU3NTY1LCA1NzU2OCwgNTc1NzEsIDU3NTc0LCA1NzU3NywgCi0gICAgNTc1ODAsIDU3NTgzLCA1NzU4NiwgNTc1ODksIDU3NTkyLCA1NzU5NSwgNTc1OTgsIDU3NjAxLCA1NzYwNCwgNTc2MDcsIAotICAgIDU3NjEwLCA1NzYxMywgNTc2MTYsIDU3NjE5LCA1NzYyMiwgNTc2MjUsIDU3NjI4LCA1NzYzMSwgNTc2MzQsIDU3NjM3LCAKLSAgICA1NzY0MCwgNTc2NDMsIDU3NjQ2LCA1NzY0OSwgNTc2NTIsIDU3NjU1LCA1NzY1OCwgNTc2NjEsIDU3NjY0LCA1NzY2NywgCi0gICAgNTc2NzAsIDU3NjczLCA1NzY3NiwgNTc2NzksIDU3NjgyLCA1NzY4NSwgNTc2ODgsIDU3NjkxLCA1NzY5NCwgNTc2OTcsIAotICAgIDU3NzAwLCA1NzcwMywgNTc3MDYsIDU3NzA5LCA1NzcxMiwgNTc3MTUsIDU3NzE4LCA1NzcyMSwgNTc3MjQsIDU3NzI3LCAKLSAgICA1NzczMCwgNTc3MzMsIDU3NzM2LCA1NzczOSwgNTc3NDIsIDU3NzQ1LCA1Nzc0OCwgNTc3NTEsIDU3NzU0LCA1Nzc1NywgCi0gICAgNTc3NjAsIDU3NzYzLCA1Nzc2NiwgNTc3NjksIDU3NzcyLCA1Nzc3NSwgNTc3NzgsIDU3NzgxLCA1Nzc4NCwgNTc3ODcsIAotICAgIDU3NzkwLCA1Nzc5MywgNTc3OTYsIDU3Nzk5LCA1NzgwMiwgNTc4MDUsIDU3ODEzLCA1NzgyMCwgNTc4MjcsIDU3ODM0LCAKLSAgICA1Nzg0MSwgNTc4NDgsIDU3ODU1LCA1Nzg2MiwgNTc4NjksIDU3ODc2LCA1Nzg4NCwgNTc4OTIsIDU3OTAwLCA1NzkwOCwgCi0gICAgNTc5MTYsIDU3OTI0LCA1NzkzMiwgNTc5NDAsIDU3OTQ4LCA1Nzk1NiwgNTc5NjQsIDU3OTcyLCA1Nzk4MCwgNTc5ODgsIAotICAgIDU3OTk2LCA1Nzk5OSwgNTgwMDIsIDU4MDA1LCA1ODAwNywgNTgwMTAsIDU4MDEzLCA1ODAxNiwgNTgwMjEsIDU4MDI2LCAKLSAgICA1ODAyOSwgNTgwMzYsIDU4MDQzLCA1ODA1MCwgNTgwNTcsIDU4MDYwLCA1ODA2NSwgNTgwNjgsIDU4MDcyLCA1ODA3NCwgCi0gICAgNTgwNzYsIDU4MDc5LCA1ODA4MiwgNTgwODUsIDU4MDg4LCA1ODA5MSwgNTgwOTQsIDU4MDk3LCA1ODEwMiwgNTgxMDYsIAotICAgIDU4MTA5LCA1ODExMiwgNTgxMTUsIDU4MTE4LCA1ODEyMSwgNTgxMjQsIDU4MTI3LCA1ODEzMSwgNTgxMzQsIDU4MTM3LCAKLSAgICA1ODE0MCwgNTgxNDMsIDU4MTQ2LCA1ODE1MCwgNTgxNTMsIDU4MTU2LCA1ODE1OSwgNTgxNjQsIDU4MTY5LCA1ODE3NCwgCi0gICAgNTgxNzksIDU4MTg0LCA1ODE4OSwgNTgxOTQsIDU4MTk5LCA1ODIwNCwgNTgyMTIsIDU4MjE0LCA1ODIxNywgNTgyMjAsIAotICAgIDU4MjIzLCA1ODIyNiwgNTgyMzEsIDU4MjM5LCA1ODI0MiwgNTgyNDUsIDU4MjQ5LCA1ODI1MiwgNTgyNTUsIDU4MjU4LCAKLSAgICA1ODI2MiwgNTgyNjUsIDU4MjY4LCA1ODI3MywgNTgyNzYsIDU4Mjc5LCA1ODI4NCwgNTgyODcsIDU4MjkwLCA1ODI5NSwgCi0gICAgNTgzMDAsIDU4MzA1LCA1ODMwOCwgNTgzMTEsIDU4MzE0LCA1ODMxNywgNTgzMjMsIDU4MzI2LCA1ODMyOSwgNTgzMzIsIAotICAgIDU4MzM0LCA1ODMzNywgNTgzNDAsIDU4MzQzLCA1ODM0OCwgNTgzNTEsIDU4MzU0LCA1ODM1NywgNTgzNjAsIDU4MzYzLCAKLSAgICA1ODM2OCwgNTgzNzEsIDU4Mzc0LCA1ODM3NywgNTgzODAsIDU4MzgzLCA1ODM4NiwgNTgzODksIDU4MzkyLCA1ODM5NSwgCi0gICAgNTg0MDAsIDU4NDA0LCA1ODQxMSwgNTg0MTgsIDU4NDI1LCA1ODQzMiwgNTg0MzksIDU4NDQ2LCA1ODQ1MywgNTg0NjAsIAotICAgIDU4NDY3LCA1ODQ3NSwgNTg0ODMsIDU4NDkxLCA1ODQ5OSwgNTg1MDcsIDU4NTE1LCA1ODUyMywgNTg1MzEsIDU4NTM5LCAKLSAgICA1ODU0NywgNTg1NTUsIDU4NTYzLCA1ODU3MSwgNTg1NzksIDU4NTg3LCA1ODU5NSwgNTg2MDMsIDU4NjExLCA1ODYxOSwgCi0gICAgNTg2MjcsIDU4NjM1LCA1ODY0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjk5NTMsIDY5OTYwLCA2OTk2NywgNjk5NzQsIDY5OTgyLCAKKyAgICA2OTk4OSwgNjk5OTUsIDcwMDAxLCA3MDAwOCwgNzAwMTQsIDcwMDIwLCA3MDAyNiwgNzAwMzMsIDcwMDQwLCA3MDA0NywgCisgICAgNzAwNTQsIDcwMDYxLCA3MDA2OCwgNzAwNzUsIDcwMDgyLCA3MDA4OSwgNzAwOTYsIDcwMTAzLCA3MDExMCwgNzAxMTcsIAorICAgIDcwMTI0LCA3MDEzMCwgNzAxMzcsIDcwMTQ0LCA3MDE1MSwgNzAxNTgsIDcwMTY1LCA3MDE3MiwgNzAxNzksIDcwMTg2LCAKKyAgICA3MDE5MywgNzAyMDAsIDcwMjA3LCA3MDIxNCwgNzAyMjEsIDcwMjI4LCA3MDIzNSwgNzAyNDIsIDcwMjQ5LCA3MDI1NiwgCisgICAgNzAyNjQsIDcwMjcyLCA3MDI4MCwgNzAyODgsIDAsIDAsIDAsIDAsIDcwMjk2LCA3MDMwNSwgNzAzMTQsIDcwMzIzLCAKKyAgICA3MDMzMiwgNzAzNDEsIDcwMzUwLCA3MDM1NywgNzAzNjQsIDcwMzcxLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDM3OCwgNzAzODIsIAorICAgIDcwMzg3LCA3MDM5MiwgNzAzOTcsIDcwNDAyLCA3MDQwNywgNzA0MTIsIDcwNDE3LCA3MDQyMiwgNzA0MjcsIDcwNDMyLCAKKyAgICA3MDQzNiwgNzA0NDAsIDcwNDQ1LCA3MDQ1MCwgNzA0NTQsIDcwNDU5LCA3MDQ2NCwgNzA0NjksIDcwNDc0LCA3MDQ3OSwgCisgICAgNzA0ODQsIDcwNDg5LCA3MDQ5MywgNzA0OTcsIDcwNTAyLCA3MDUwNywgNzA1MTIsIDcwNTE2LCA3MDUyMCwgNzA1MjQsIAorICAgIDcwNTI4LCA3MDUzMiwgNzA1MzYsIDcwNTQxLCA3MDU0NiwgNzA1NTEsIDcwNTU2LCA3MDU2MSwgNzA1NjgsIDcwNTc0LCAKKyAgICA3MDU3OSwgNzA1ODQsIDcwNTg5LCA3MDU5NCwgNzA2MDAsIDcwNjA3LCA3MDYxMywgNzA2MjAsIDcwNjI2LCA3MDYzMiwgCisgICAgNzA2MzcsIDcwNjQ0LCA3MDY1MCwgNzA2NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwNjYxLCA3MDY2NSwgNzA2NjksIAorICAgIDcwNjcyLCA3MDY3NiwgNzA2NzksIDcwNjgzLCA3MDY4NiwgNzA2OTAsIDcwNjk0LCA3MDY5OSwgNzA3MDMsIDcwNzA4LCAKKyAgICA3MDcxMSwgNzA3MTUsIDcwNzE5LCA3MDcyMiwgNzA3MjYsIDcwNzMwLCA3MDczMywgNzA3MzcsIDcwNzQxLCA3MDc0NSwgCisgICAgNzA3NDksIDcwNzUzLCA3MDc1NywgNzA3NjEsIDcwNzY1LCA3MDc2OSwgNzA3NzMsIDcwNzc3LCA3MDc4MSwgNzA3ODUsIAorICAgIDcwNzg5LCA3MDc5MywgNzA3OTcsIDcwODAxLCA3MDgwNSwgNzA4MDgsIDcwODExLCA3MDgxNSwgNzA4MTksIDcwODIzLCAKKyAgICA3MDgyNiwgNzA4MjksIDcwODMyLCA3MDgzNiwgNzA4NDAsIDcwODQ0LCA3MDg0OCwgNzA4NTIsIDcwODU1LCA3MDg1OSwgCisgICAgNzA4NjUsIDcwODcwLCA3MDg3NCwgNzA4NzksIDcwODgzLCA3MDg4OCwgNzA4OTMsIDcwODk5LCA3MDkwNCwgNzA5MTAsIAorICAgIDcwOTE0LCA3MDkxOSwgNzA5MjQsIDcwOTI4LCA3MDkzMywgNzA5MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcwOTQyLCA3MDk0NSwgNzA5NDksIDcwOTUzLCA3MDk1NiwgNzA5NTksIDcwOTYyLCA3MDk2NSwgNzA5NjgsIDcwOTcxLCAKKyAgICA3MDk3NCwgNzA5NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDcwOTgwLCA3MDk4NSwgNzA5ODksIDcwOTkzLCA3MDk5NywgNzEwMDEsIAorICAgIDcxMDA1LCA3MTAwOSwgNzEwMTMsIDcxMDE3LCA3MTAyMSwgNzEwMjUsIDcxMDI5LCA3MTAzMywgNzEwMzcsIDcxMDQxLCAKKyAgICA3MTA0NSwgNzEwNTAsIDcxMDU1LCA3MTA2MSwgNzEwNjcsIDcxMDc0LCA3MTA3OSwgNzEwODQsIDcxMDkwLCA3MTA5NCwgCisgICAgNzEwOTksIDcxMTAyLCAwLCAwLCAwLCAwLCA3MTEwNSwgNzExMTIsIDcxMTE4LCA3MTEyNCwgNzExMzAsIDcxMTM2LCAKKyAgICA3MTE0MiwgNzExNDgsIDcxMTU0LCA3MTE2MCwgNzExNjYsIDcxMTcyLCA3MTE3OSwgNzExODYsIDcxMTkzLCA3MTIwMCwgCisgICAgNzEyMDcsIDcxMjE0LCA3MTIyMSwgNzEyMjgsIDcxMjM1LCA3MTI0MSwgNzEyNDcsIDcxMjU0LCA3MTI2MCwgNzEyNjcsIAorICAgIDcxMjc0LCA3MTI4MCwgNzEyODYsIDcxMjkzLCA3MTMwMCwgNzEzMDcsIDcxMzEzLCA3MTMyMCwgNzEzMjcsIDcxMzMzLCAKKyAgICA3MTM0MCwgNzEzNDYsIDcxMzUzLCA3MTM2MCwgNzEzNjYsIDcxMzcyLCA3MTM3OSwgNzEzODUsIDcxMzkyLCA3MTM5OSwgCisgICAgNzE0MDgsIDcxNDE1LCA3MTQyMiwgNzE0MjYsIDcxNDMxLCA3MTQzNiwgNzE0NDEsIDcxNDQ2LCA3MTQ1MCwgNzE0NTQsIAorICAgIDcxNDU5LCA3MTQ2MywgNzE0NjgsIDcxNDczLCA3MTQ3OCwgNzE0ODMsIDcxNDg3LCA3MTQ5MiwgNzE0OTYsIDcxNTAxLCAKKyAgICA3MTUwNSwgNzE1MTAsIDcxNTE1LCA3MTUyMCwgNzE1MjUsIDcxNTI5LCA3MTUzNCwgNzE1MzksIDcxNTQ0LCA3MTU1MCwgCisgICAgNzE1NTUsIDcxNTYxLCA3MTU2NywgNzE1NzMsIDcxNTgwLCA3MTU4NiwgNzE1OTIsIDcxNTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3MTYwMywgNzE2MDgsIDcxNjEyLCA3MTYxNiwgNzE2MjAsIDcxNjI0LCA3MTYyOCwgNzE2MzIsIAorICAgIDcxNjM2LCA3MTY0MCwgNzE2NDQsIDcxNjQ4LCA3MTY1MiwgNzE2NTYsIDcxNjYwLCA3MTY2NCwgNzE2NjgsIDcxNjcyLCAKKyAgICA3MTY3NiwgNzE2ODAsIDcxNjg0LCA3MTY4OCwgNzE2OTIsIDcxNjk2LCA3MTcwMCwgNzE3MDQsIDcxNzA4LCA3MTcxMiwgCisgICAgNzE3MTYsIDcxNzIwLCAwLCAwLCAwLCA3MTcyNCwgNzE3MjgsIDcxNzMyLCA3MTczNiwgNzE3NDAsIDcxNzQzLCA3MTc0OSwgCisgICAgNzE3NTIsIDcxNzU2LCA3MTc1OSwgNzE3NjUsIDcxNzcxLCA3MTc3OSwgNzE3ODIsIDcxNzg2LCA3MTc4OSwgNzE3OTIsIAorICAgIDcxNzk3LCA3MTgwMiwgNzE4MDYsIDcxODEyLCA3MTgxNiwgNzE4MjAsIDcxODI2LCA3MTgzMCwgNzE4MzYsIDcxODQyLCAKKyAgICA3MTg0NiwgNzE4NTAsIDcxODU2LCA3MTg2MCwgNzE4NjYsIDcxODcyLCA3MTg3NiwgNzE4ODIsIDcxODg2LCA3MTg5MiwgCisgICAgNzE4OTUsIDcxODk4LCA3MTkwNCwgNzE5MDgsIDcxOTE0LCA3MTkxNywgNzE5MjAsIDcxOTIzLCA3MTkyOSwgNzE5MzMsIAorICAgIDcxOTM3LCA3MTk0MywgNzE5NDksIDcxOTUzLCA3MTk1NiwgNzE5NjIsIDcxOTY3LCA3MTk3MiwgNzE5NzcsIDcxOTg0LCAKKyAgICA3MTk4OSwgNzE5OTYsIDcyMDAxLCA3MjAwOCwgNzIwMTMsIDcyMDE5LCA3MjAyNSwgNzIwMzEsIDcyMDM0LCA3MjAzOCwgCisgICAgNzIwNDIsIDcyMDQ3LCA3MjA1MiwgNzIwNTcsIDcyMDYyLCA3MjA2NywgNzIwNzIsIDcyMDc3LCA3MjA4MiwgNzIwODksIAorICAgIDcyMDk0LCAwLCA3MjEwMCwgNzIxMDMsIDcyMTA3LCA3MjExMCwgNzIxMTMsIDcyMTE2LCA3MjExOSwgNzIxMjIsIDcyMTI1LCAKKyAgICA3MjEyOCwgNzIxMzEsIDAsIDAsIDAsIDAsIDcyMTM0LCA3MjE0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzIxNDYsIAorICAgIDcyMTQ5LCA3MjE1MiwgNzIxNTUsIDcyMTU4LCA3MjE2MiwgNzIxNjUsIDcyMTY4LCA3MjE3MiwgNzIxNzYsIDcyMTgwLCAKKyAgICA3MjE4NCwgNzIxODgsIDcyMTkyLCA3MjE5NiwgNzIyMDAsIDcyMjA0LCA3MjIwOCwgNzIyMTIsIDcyMjE2LCA3MjIyMCwgCisgICAgNzIyMjQsIDcyMjI4LCA3MjIzMiwgNzIyMzYsIDcyMjM5LCA3MjI0MywgNzIyNDYsIDcyMjUwLCA3MjI1NCwgNzIyNTgsIAorICAgIDcyMjYyLCA3MjI2NiwgNzIyNjksIDcyMjczLCA3MjI3NiwgNzIyNzksIDcyMjgzLCA3MjI4NywgNzIyOTEsIDcyMjk1LCAKKyAgICA3MjI5OCwgNzIzMDMsIDcyMzA3LCA3MjMxMiwgNzIzMTcsIDcyMzIxLCA3MjMyNiwgNzIzMzAsIDcyMzM1LCA3MjM0MCwgCisgICAgNzIzNDUsIDcyMzUwLCA3MjM1NSwgNzIzNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyMzY3LCA3MjM3MiwgCisgICAgNzIzNzcsIDcyMzgyLCA3MjM4OSwgNzIzOTQsIDcyMzk5LCA3MjQwMywgNzI0MDgsIDcyNDEzLCA3MjQxNywgNzI0MjEsIAorICAgIDcyNDI2LCA3MjQzMiwgMCwgMCwgNzI0MzksIDcyNDQzLCA3MjQ0NiwgNzI0NDksIDcyNDUyLCA3MjQ1NSwgNzI0NTgsIAorICAgIDcyNDYxLCA3MjQ2NCwgNzI0NjcsIDAsIDAsIDcyNDcwLCA3MjQ3NSwgNzI0ODAsIDcyNDg2LCA3MjQ5MywgNzI0OTksIAorICAgIDcyNTA1LCA3MjUxMSwgNzI1MTcsIDcyNTIzLCA3MjUyOSwgNzI1MzUsIDcyNTQxLCA3MjU0NywgNzI1NTMsIDcyNTU5LCAKKyAgICA3MjU2NCwgNzI1NzAsIDcyNTc1LCA3MjU4MSwgNzI1ODcsIDcyNTk0LCA3MjYwMCwgNzI2MDYsIDcyNjExLCA3MjYxOCwgCisgICAgNzI2MjUsIDcyNjMyLCA3MjYzOCwgNzI2NDMsIDcyNjQ4LCA3MjY1MywgMCwgMCwgMCwgMCwgNzI2NjEsIDcyNjY3LCAKKyAgICA3MjY3MywgNzI2NzksIDcyNjg1LCA3MjY5MSwgNzI2OTcsIDcyNzAzLCA3MjcwOSwgNzI3MTUsIDcyNzIxLCA3MjcyNywgCisgICAgNzI3MzMsIDcyNzM5LCA3Mjc0NSwgNzI3NTEsIDcyNzU3LCA3Mjc2MywgNzI3NjksIDcyNzc1LCA3Mjc4MSwgNzI3ODYsIAorICAgIDcyNzkxLCA3Mjc5NywgNzI4MDMsIDcyODA5LCA3MjgxNSwgNzI4MjEsIDcyODI3LCA3MjgzMywgNzI4MzksIDcyODQ1LCAKKyAgICA3Mjg1MSwgNzI4NTcsIDcyODYzLCA3Mjg2OSwgNzI4NzUsIDcyODgxLCA3Mjg4NywgNzI4OTMsIDcyODk5LCA3MjkwNSwgCisgICAgNzI5MTEsIDcyOTE3LCA3MjkyMywgNzI5MjksIDcyOTM1LCA3Mjk0MCwgNzI5NDUsIDcyOTUxLCA3Mjk1NiwgNzI5NjAsIAorICAgIDcyOTY1LCA3Mjk2OSwgNzI5NzMsIDcyOTc3LCA3Mjk4MywgNzI5ODgsIDcyOTkzLCA3Mjk5OCwgNzMwMDMsIDczMDA4LCAKKyAgICA3MzAxMywgNzMwMTgsIDczMDI1LCA3MzAzMiwgNzMwMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMDQ2LCA3MzA1MSwgNzMwNTYsIDczMDYxLCA3MzA2OCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzMwNzUsIAorICAgIDczMDgyLCA3MzA4OSwgNzMwOTYsIDczMTAzLCA3MzEwOSwgNzMxMTUsIDczMTIyLCA3MzEyOSwgNzMxMzYsIDczMTQzLCAKKyAgICA3MzE1MCwgNzMxNTcsIDczMTY0LCA3MzE3MSwgNzMxNzgsIDczMTg0LCA3MzE5MSwgNzMxOTgsIDczMjA1LCA3MzIxMiwgCisgICAgNzMyMTksIDczMjI2LCA3MzIzMywgNzMyNDAsIDczMjQ3LCA3MzI1NCwgNzMyNjEsIDczMjcwLCA3MzI3OSwgNzMyODgsIAorICAgIDczMjk3LCA3MzMwNiwgNzMzMTUsIDczMzI0LCA3MzMzMywgNzMzNDEsIDczMzQ5LCA3MzM1NywgNzMzNjUsIDczMzczLCAKKyAgICA3MzM4MSwgNzMzODksIDczMzk3LCA3MzQwMywgNzM0MTEsIDAsIDAsIDczNDE5LCA3MzQyNiwgNzM0MzIsIDczNDM4LCAKKyAgICA3MzQ0NCwgNzM0NTAsIDczNDU2LCA3MzQ2MiwgNzM0NjgsIDczNDc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzQ4MCwgNzM0ODQsIAorICAgIDczNDg4LCA3MzQ5MiwgNzM0OTYsIDczNTAwLCA3MzUwNCwgNzM1MDgsIDczNTEyLCA3MzUxNiwgNzM1MjAsIDczNTI0LCAKKyAgICA3MzUyOCwgNzM1MzIsIDczNTM2LCA3MzU0MCwgNzM1NDQsIDczNTQ4LCA3MzU1MiwgNzM1NTYsIDczNTYwLCA3MzU2NCwgCisgICAgNzM1NjgsIDAsIDAsIDAsIDAsIDczNTcyLCA3MzU3NiwgNzM1ODAsIDczNTg0LCA3MzU4OCwgNzM1OTIsIDczNTk2LCAKKyAgICA3MzYwMCwgNzM2MDQsIDczNjA4LCA3MzYxMiwgNzM2MTYsIDczNjIwLCA3MzYyNCwgNzM2MjgsIDczNjMyLCA3MzYzNiwgCisgICAgNzM2NDAsIDczNjQ0LCA3MzY0OCwgNzM2NTIsIDczNjU2LCA3MzY2MCwgNzM2NjQsIDczNjY4LCA3MzY3MiwgNzM2NzYsIAorICAgIDczNjgwLCA3MzY4NCwgNzM2ODgsIDczNjkyLCA3MzY5NiwgNzM3MDAsIDczNzA0LCA3MzcwOCwgNzM3MTIsIDczNzE2LCAKKyAgICA3MzcyMCwgNzM3MjQsIDczNzI4LCA3MzczMiwgNzM3MzYsIDczNzQwLCA3Mzc0NCwgNzM3NDgsIDczNzUyLCA3Mzc1NiwgCisgICAgNzM3NjAsIDczNzY0LCAwLCAwLCAwLCAwLCA3Mzc2OCwgNzM3NzIsIDczNzc2LCA3Mzc4MCwgNzM3ODQsIDczNzg4LCAKKyAgICA3Mzc5MiwgNzM3OTYsIDczODAwLCA3MzgwNCwgNzM4MDgsIDczODEyLCA3MzgxNiwgNzM4MjAsIDczODI0LCA3MzgyOCwgCisgICAgNzM4MzIsIDczODM2LCA3Mzg0MCwgNzM4NDQsIDczODQ4LCA3Mzg1MiwgNzM4NTYsIDczODYwLCA3Mzg2NCwgNzM4NjgsIAorICAgIDczODcyLCA3Mzg3NiwgNzM4ODAsIDczODg0LCA3Mzg4OCwgNzM4OTIsIDczODk2LCA3MzkwMCwgNzM5MDQsIDczOTA4LCAKKyAgICA3MzkxMiwgNzM5MTYsIDczOTIwLCA3MzkyNCwgNzM5MjgsIDczOTMyLCA3MzkzNiwgNzM5NDAsIDczOTQ0LCA3Mzk0OCwgCisgICAgNzM5NTIsIDczOTU2LCA3Mzk2MCwgNzM5NjQsIDczOTY4LCA3Mzk3MiwgNzM5NzYsIDczOTgwLCA3Mzk4NCwgNzM5ODgsIAorICAgIDczOTkyLCA3Mzk5NiwgNzQwMDAsIDc0MDA0LCA3NDAwOCwgNzQwMTIsIDc0MDE2LCA3NDAyMCwgNzQwMjQsIDc0MDI4LCAKKyAgICA3NDAzMiwgNzQwMzYsIDc0MDQwLCA3NDA0NCwgNzQwNDgsIDc0MDUyLCA3NDA1NiwgNzQwNjAsIDc0MDY0LCA3NDA2OCwgCisgICAgNzQwNzIsIDc0MDc2LCA3NDA4MCwgNzQwODQsIDc0MDg4LCA3NDA5MiwgNzQwOTYsIDc0MTAwLCA3NDEwNCwgNzQxMDgsIAorICAgIDc0MTEyLCA3NDExNiwgNzQxMjAsIDc0MTI0LCA3NDEyOCwgNzQxMzIsIDc0MTM2LCA3NDE0MCwgNzQxNDQsIDc0MTQ4LCAKKyAgICA3NDE1MiwgNzQxNTYsIDc0MTYwLCA3NDE2NCwgNzQxNjgsIDc0MTcyLCA3NDE3NiwgNzQxODAsIDc0MTg0LCA3NDE4OCwgCisgICAgNzQxOTIsIDc0MTk2LCA3NDIwMCwgNzQyMDQsIDc0MjA4LCA3NDIxMiwgNzQyMTYsIDc0MjIwLCA3NDIyNCwgNzQyMjgsIAorICAgIDc0MjMyLCA3NDIzNiwgNzQyNDAsIDc0MjQ0LCA3NDI0OCwgNzQyNTIsIDc0MjU2LCA3NDI2MCwgNzQyNjQsIDc0MjY4LCAKKyAgICA3NDI3MiwgNzQyNzYsIDc0MjgwLCA3NDI4NCwgNzQyODgsIDc0MjkyLCA3NDI5NiwgNzQzMDAsIDc0MzA0LCA3NDMwOCwgCisgICAgNzQzMTIsIDc0MzE2LCA3NDMyMCwgNzQzMjQsIDc0MzI4LCA3NDMzMiwgNzQzMzYsIDc0MzQwLCA3NDM0NCwgNzQzNDgsIAorICAgIDc0MzUyLCA3NDM1NiwgNzQzNjAsIDc0MzY0LCA3NDM2OCwgNzQzNzIsIDc0Mzc2LCA3NDM4MCwgNzQzODQsIDc0Mzg4LCAKKyAgICA3NDM5MiwgNzQzOTYsIDc0NDAwLCA3NDQwNCwgNzQ0MDgsIDc0NDEyLCA3NDQxNiwgNzQ0MjAsIDc0NDI0LCA3NDQyOCwgCisgICAgNzQ0MzIsIDc0NDM2LCA3NDQ0MCwgNzQ0NDQsIDc0NDQ4LCA3NDQ1MiwgNzQ0NTYsIDc0NDYwLCA3NDQ2NCwgNzQ0NjgsIAorICAgIDc0NDcyLCA3NDQ3NiwgNzQ0ODAsIDc0NDg0LCA3NDQ4OCwgNzQ0OTIsIDc0NDk2LCA3NDUwMCwgNzQ1MDQsIDc0NTA4LCAKKyAgICA3NDUxMiwgNzQ1MTYsIDc0NTIwLCA3NDUyNCwgNzQ1MjgsIDc0NTMyLCA3NDUzNiwgNzQ1NDAsIDc0NTQ0LCA3NDU0OCwgCisgICAgNzQ1NTIsIDc0NTU2LCA3NDU2MCwgNzQ1NjQsIDc0NTY4LCA3NDU3MiwgNzQ1NzYsIDc0NTgwLCA3NDU4NCwgNzQ1ODgsIAorICAgIDc0NTkyLCA3NDU5NiwgNzQ2MDAsIDc0NjA0LCA3NDYwOCwgNzQ2MTIsIDc0NjE2LCA3NDYyMCwgNzQ2MjQsIDc0NjI4LCAKKyAgICA3NDYzMiwgNzQ2MzYsIDc0NjQwLCA3NDY0NCwgNzQ2NDgsIDc0NjUyLCA3NDY1NiwgNzQ2NjAsIDc0NjY0LCA3NDY2OCwgCisgICAgNzQ2NzIsIDc0Njc2LCA3NDY4MCwgNzQ2ODQsIDc0Njg4LCA3NDY5MiwgNzQ2OTYsIDc0NzAwLCA3NDcwNCwgNzQ3MDgsIAorICAgIDc0NzEyLCA3NDcxNiwgNzQ3MjAsIDc0NzI0LCA3NDcyOCwgNzQ3MzIsIDc0NzM2LCA3NDc0MCwgNzQ3NDQsIDc0NzQ4LCAKKyAgICA3NDc1MiwgNzQ3NTYsIDc0NzYwLCA3NDc2NCwgNzQ3NjgsIDc0NzcyLCA3NDc3NiwgNzQ3ODAsIDc0Nzg0LCA3NDc4OCwgCisgICAgNzQ3OTIsIDc0Nzk2LCA3NDgwMCwgNzQ4MDQsIDc0ODA4LCA3NDgxMiwgNzQ4MTYsIDc0ODIwLCA3NDgyNCwgNzQ4MjgsIAorICAgIDc0ODMyLCA3NDgzNiwgNzQ4NDAsIDc0ODQ0LCA3NDg0OCwgNzQ4NTIsIDc0ODU2LCA3NDg2MCwgNzQ4NjQsIDc0ODY4LCAKKyAgICA3NDg3MiwgNzQ4NzYsIDc0ODgwLCA3NDg4NCwgNzQ4ODgsIDc0ODkyLCA3NDg5NiwgNzQ5MDAsIDc0OTA0LCA3NDkwOCwgCisgICAgNzQ5MTIsIDc0OTE2LCA3NDkyMCwgNzQ5MjQsIDc0OTI4LCA3NDkzMiwgNzQ5MzYsIDc0OTQwLCA3NDk0NCwgNzQ5NDgsIAorICAgIDc0OTUyLCA3NDk1NiwgNzQ5NjAsIDc0OTY0LCA3NDk2OCwgNzQ5NzIsIDAsIDAsIDc0OTc2LCA3NDk4MCwgNzQ5ODQsIAorICAgIDc0OTg4LCA3NDk5MiwgNzQ5OTYsIDc1MDAwLCA3NTAwNCwgNzUwMDgsIDc1MDEyLCA3NTAxNiwgNzUwMjAsIDc1MDI0LCAKKyAgICA3NTAyOCwgNzUwMzIsIDc1MDM2LCA3NTA0MCwgNzUwNDQsIDc1MDQ4LCA3NTA1MiwgNzUwNTYsIDc1MDYwLCA3NTA2NCwgCisgICAgNzUwNjgsIDc1MDcyLCA3NTA3NiwgNzUwODAsIDc1MDg0LCA3NTA4OCwgNzUwOTIsIDc1MDk2LCA3NTEwMCwgNzUxMDQsIAorICAgIDc1MTA4LCA3NTExMiwgNzUxMTYsIDc1MTIwLCA3NTEyNCwgNzUxMjgsIDc1MTMyLCA3NTEzNiwgNzUxNDAsIDc1MTQ0LCAKKyAgICA3NTE0OCwgNzUxNTIsIDc1MTU2LCA3NTE2MCwgNzUxNjQsIDc1MTY4LCA3NTE3MiwgNzUxNzYsIDc1MTgwLCA3NTE4NCwgCisgICAgNzUxODgsIDc1MTkyLCA3NTE5NiwgNzUyMDAsIDc1MjA0LCA3NTIwOCwgNzUyMTIsIDc1MjE2LCA3NTIyMCwgMCwgMCwgCisgICAgNzUyMjQsIDc1MjI4LCA3NTIzMiwgNzUyMzYsIDc1MjQwLCA3NTI0NCwgNzUyNDgsIDc1MjUyLCA3NTI1NiwgNzUyNjAsIAorICAgIDc1MjY0LCA3NTI2OCwgNzUyNzIsIDc1Mjc2LCA3NTI4MCwgNzUyODQsIDc1Mjg4LCA3NTI5MiwgNzUyOTYsIDc1MzAwLCAKKyAgICA3NTMwNCwgNzUzMDgsIDc1MzEyLCA3NTMxNiwgNzUzMjAsIDc1MzI0LCA3NTMyOCwgNzUzMzIsIDc1MzM2LCA3NTM0MCwgCisgICAgNzUzNDQsIDc1MzQ4LCA3NTM1MiwgNzUzNTYsIDc1MzYwLCA3NTM2NCwgNzUzNjgsIDc1MzcyLCA3NTM3NiwgNzUzODAsIAorICAgIDc1Mzg0LCA3NTM4OCwgNzUzOTIsIDc1Mzk2LCA3NTQwMCwgNzU0MDQsIDc1NDA4LCA3NTQxMiwgNzU0MTYsIDc1NDIwLCAKKyAgICA3NTQyNCwgNzU0MjgsIDc1NDMyLCA3NTQzNiwgNzU0NDAsIDc1NDQ0LCA3NTQ0OCwgNzU0NTIsIDc1NDU2LCA3NTQ2MCwgCisgICAgNzU0NjQsIDc1NDY4LCA3NTQ3MiwgNzU0NzYsIDc1NDgwLCA3NTQ4NCwgNzU0ODgsIDc1NDkyLCA3NTQ5NiwgNzU1MDAsIAorICAgIDc1NTA0LCA3NTUwOCwgNzU1MTIsIDc1NTE2LCA3NTUyMCwgNzU1MjQsIDc1NTI4LCA3NTUzMiwgNzU1MzYsIDc1NTQwLCAKKyAgICA3NTU0NCwgNzU1NDgsIDc1NTUyLCA3NTU1NiwgNzU1NjAsIDc1NTY0LCA3NTU2OCwgNzU1NzIsIDc1NTc2LCA3NTU4MCwgCisgICAgNzU1ODQsIDc1NTg4LCA3NTU5MiwgNzU1OTYsIDc1NjAwLCA3NTYwNCwgNzU2MDgsIDc1NjEyLCA3NTYxNiwgNzU2MjAsIAorICAgIDc1NjI0LCA3NTYyOCwgNzU2MzIsIDc1NjM2LCA3NTY0MCwgNzU2NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDc1NjQ4LCA3NTY1MywgNzU2NTgsIDc1NjYzLCA3NTY2OCwgNzU2NzMsIDc1NjgxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTY4NiwgNzU2OTMsIDc1NzAwLCA3NTcwNywgNzU3MTQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDc1NzIxLCA3NTcyOCwgNzU3MzUsIDc1NzQ1LCA3NTc1MSwgNzU3NTcsIDc1NzYzLCA3NTc2OSwgNzU3NzUsIDc1NzgxLCAKKyAgICA3NTc4OCwgNzU3OTQsIDc1ODAwLCA3NTgwNiwgNzU4MTUsIDc1ODI0LCA3NTgzNiwgNzU4NDgsIDc1ODU0LCA3NTg2MCwgCisgICAgNzU4NjYsIDc1ODczLCA3NTg4MCwgNzU4ODcsIDc1ODk0LCA3NTkwMSwgMCwgNzU5MDgsIDc1OTE1LCA3NTkyMiwgNzU5MzAsIAorICAgIDc1OTM3LCAwLCA3NTk0NCwgMCwgNzU5NTEsIDc1OTU4LCAwLCA3NTk2NSwgNzU5NzMsIDAsIDc1OTgwLCA3NTk4NywgCisgICAgNzU5OTQsIDc2MDAxLCA3NjAwOCwgNzYwMTUsIDc2MDIyLCA3NjAyOSwgNzYwMzYsIDc2MDQzLCA3NjA0OCwgNzYwNTUsIAorICAgIDc2MDYyLCA3NjA2OCwgNzYwNzQsIDc2MDgwLCA3NjA4NiwgNzYwOTIsIDc2MDk4LCA3NjEwNCwgNzYxMTAsIDc2MTE2LCAKKyAgICA3NjEyMiwgNzYxMjgsIDc2MTM0LCA3NjE0MCwgNzYxNDYsIDc2MTUyLCA3NjE1OCwgNzYxNjQsIDc2MTcwLCA3NjE3NiwgCisgICAgNzYxODIsIDc2MTg4LCA3NjE5NCwgNzYyMDAsIDc2MjA2LCA3NjIxMiwgNzYyMTgsIDc2MjI0LCA3NjIzMCwgNzYyMzYsIAorICAgIDc2MjQyLCA3NjI0OCwgNzYyNTQsIDc2MjYwLCA3NjI2NiwgNzYyNzIsIDc2Mjc4LCA3NjI4NCwgNzYyOTAsIDc2Mjk2LCAKKyAgICA3NjMwMiwgNzYzMDgsIDc2MzE0LCA3NjMyMCwgNzYzMjYsIDc2MzMyLCA3NjMzOCwgNzYzNDQsIDc2MzUwLCA3NjM1NiwgCisgICAgNzYzNjIsIDc2MzY4LCA3NjM3NCwgNzYzODAsIDc2Mzg2LCA3NjM5MiwgNzYzOTgsIDc2NDA0LCA3NjQxMCwgNzY0MTYsIAorICAgIDc2NDIyLCA3NjQyOCwgNzY0MzQsIDc2NDQwLCA3NjQ0NiwgNzY0NTIsIDc2NDU4LCA3NjQ2NCwgNzY0NzAsIDc2NDc2LCAKKyAgICA3NjQ4MiwgNzY0ODgsIDc2NDk0LCA3NjUwMCwgNzY1MDYsIDc2NTEyLCA3NjUxOCwgNzY1MjYsIDc2NTM0LCA3NjU0MCwgCisgICAgNzY1NDYsIDc2NTUyLCA3NjU1OCwgNzY1NjcsIDc2NTc2LCA3NjU4NCwgNzY1OTIsIDc2NjAwLCA3NjYwOCwgNzY2MTYsIAorICAgIDc2NjI0LCA3NjYzMiwgNzY2NDAsIDc2NjQ3LCA3NjY1NCwgNzY2NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDc2Njc0LCA3NjY4MCwgNzY2ODYsIDc2NjkyLCA3NjY5OCwgNzY3MDMsIDc2NzA4LCA3NjcxNCwgNzY3MjAsIDc2NzI2LCAKKyAgICA3NjczMiwgNzY3NDAsIDc2NzQ2LCA3Njc1MiwgNzY3NjAsIDc2NzY4LCA3Njc3NiwgNzY3ODQsIDc2Nzg5LCA3Njc5NCwgCisgICAgNzY3OTksIDc2ODA0LCA3NjgxNiwgNzY4MjgsIDc2ODM4LCA3Njg0OCwgNzY4NTksIDc2ODcwLCA3Njg4MSwgNzY4OTIsIAorICAgIDc2OTAyLCA3NjkxMiwgNzY5MjMsIDc2OTM0LCA3Njk0NSwgNzY5NTYsIDc2OTY2LCA3Njk3NiwgNzY5ODYsIDc3MDAxLCAKKyAgICA3NzAxNiwgNzcwMzEsIDc3MDM4LCA3NzA0NSwgNzcwNTIsIDc3MDU5LCA3NzA2OSwgNzcwNzksIDc3MDg5LCA3NzEwMCwgCisgICAgNzcxMTAsIDc3MTE4LCA3NzEyNiwgNzcxMzUsIDc3MTQzLCA3NzE1MiwgNzcxNjAsIDc3MTY4LCA3NzE3NiwgNzcxODUsIAorICAgIDc3MTkzLCA3NzIwMiwgNzcyMTAsIDc3MjE4LCA3NzIyNiwgNzcyMzUsIDc3MjQzLCA3NzI1MCwgNzcyNTcsIDc3MjY0LCAKKyAgICA3NzI3MSwgNzcyNzksIDc3Mjg3LCA3NzI5NSwgNzczMDMsIDc3MzExLCA3NzMyMCwgNzczMjgsIDc3MzM2LCA3NzM0NCwgCisgICAgNzczNTIsIDc3MzYwLCA3NzM2OSwgNzczNzcsIDc3Mzg1LCA3NzM5MywgNzc0MDEsIDc3NDA5LCA3NzQxNywgNzc0MjUsIAorICAgIDc3NDMzLCA3NzQ0MSwgNzc0NDksIDc3NDU4LCA3NzQ2NiwgNzc0NzUsIDc3NDgzLCA3NzQ5MSwgNzc0OTksIDc3NTA4LCAKKyAgICA3NzUxNiwgNzc1MjQsIDc3NTMyLCA3NzU0MCwgNzc1NDksIDc3NTU4LCA3NzU2NiwgNzc1NzUsIDc3NTgzLCA3NzU5MSwgCisgICAgNzc1OTksIDc3NjA4LCA3NzYxNiwgNzc2MjUsIDc3NjMzLCA3NzY0MCwgNzc2NDcsIDc3NjU1LCA3NzY2MiwgNzc2NzAsIAorICAgIDc3Njc3LCA3NzY4NSwgNzc2OTMsIDc3NzAyLCA3NzcxMCwgNzc3MTksIDc3NzI3LCA3NzczNSwgNzc3NDMsIDc3NzUyLCAKKyAgICA3Nzc2MCwgNzc3NjcsIDc3Nzc0LCA3Nzc4MiwgNzc3ODksIDc3Nzk3LCA3NzgwNCwgNzc4MTQsIDc3ODI0LCA3NzgzNCwgCisgICAgNzc4NDMsIDc3ODUyLCA3Nzg2MSwgNzc4NzAsIDc3ODc5LCA3Nzg4OSwgNzc5MDAsIDc3OTExLCA3NzkyMSwgNzc5MzIsIAorICAgIDc3OTQzLCA3Nzk1MywgNzc5NjIsIDc3OTcxLCA3Nzk3OSwgNzc5ODgsIDc3OTk3LCA3ODAwNSwgNzgwMTQsIDc4MDIzLCAKKyAgICA3ODAzMSwgNzgwNDAsIDc4MDQ5LCA3ODA1NywgNzgwNjYsIDc4MDc1LCA3ODA4MywgNzgwOTIsIDc4MTAxLCA3ODEwOSwgCisgICAgNzgxMTgsIDc4MTI2LCA3ODEzNSwgNzgxNDMsIDc4MTUxLCA3ODE2MCwgNzgxNjgsIDc4MTc3LCA3ODE4NSwgNzgxOTMsIAorICAgIDc4MjAyLCA3ODIxMCwgNzgyMTcsIDc4MjI0LCA3ODIzMywgNzgyNDIsIDc4MjUwLCA3ODI1OSwgNzgyNjgsIDc4Mjc2LCAKKyAgICA3ODI4NiwgNzgyOTQsIDc4MzAyLCA3ODMwOSwgNzgzMTcsIDc4MzI1LCA3ODMzMiwgNzgzNDIsIDc4MzUyLCA3ODM2MywgCisgICAgNzgzNzMsIDc4Mzg0LCA3ODM5MiwgNzg0MDAsIDc4NDA5LCA3ODQxNywgNzg0MjYsIDc4NDM0LCA3ODQ0MiwgNzg0NTEsIAorICAgIDc4NDU5LCA3ODQ2OCwgNzg0NzYsIDc4NDgzLCA3ODQ5MCwgNzg0OTcsIDc4NTA0LCA3ODUxMiwgNzg1MjAsIDc4NTI4LCAKKyAgICA3ODUzNiwgNzg1NDUsIDc4NTUzLCA3ODU2MSwgNzg1NzAsIDc4NTc4LCA3ODU4NiwgNzg1OTQsIDc4NjAzLCA3ODYxMSwgCisgICAgNzg2MTksIDc4NjI3LCA3ODYzNSwgNzg2NDMsIDc4NjUxLCA3ODY1OSwgNzg2NjcsIDc4Njc1LCA3ODY4NCwgNzg2OTIsIAorICAgIDc4NzAwLCA3ODcwOCwgNzg3MTYsIDc4NzI0LCA3ODczMywgNzg3NDIsIDc4NzUwLCA3ODc1OCwgNzg3NjYsIDc4Nzc1LCAKKyAgICA3ODc4MywgNzg3OTIsIDc4Nzk5LCA3ODgwNiwgNzg4MTQsIDc4ODIxLCA3ODgyOSwgNzg4MzcsIDc4ODQ2LCA3ODg1NCwgCisgICAgNzg4NjMsIDc4ODcxLCA3ODg3OSwgNzg4ODksIDc4ODk2LCA3ODkwMywgNzg5MTEsIDc4OTE4LCA3ODkyNiwgNzg5MzYsIAorICAgIDc4OTQ3LCA3ODk1NSwgNzg5NjQsIDc4OTcyLCA3ODk4MSwgNzg5ODksIDc4OTk4LCA3OTAwNiwgNzkwMTUsIDc5MDIzLCAKKyAgICA3OTAzMiwgNzkwNDEsIDc5MDQ5LCA3OTA1NywgNzkwNjUsIDc5MDc0LCA3OTA4MSwgNzkwODksIDc5MDk4LCA3OTEwNywgCisgICAgNzkxMTYsIDc5MTI1LCA3OTEzMywgNzkxNDIsIDc5MTUwLCA3OTE1OSwgNzkxNjcsIDc5MTc2LCA3OTE4NCwgNzkxOTMsIAorICAgIDc5MjAxLCA3OTIwOSwgNzkyMTYsIDc5MjI0LCA3OTIzMSwgNzkyNDAsIDc5MjQ4LCA3OTI1NywgNzkyNjUsIDc5Mjc0LCAKKyAgICA3OTI4MiwgNzkyOTAsIDc5Mjk4LCA3OTMwNywgNzkzMTUsIDc5MzI0LCA3OTMzMywgNzkzNDIsIDc5MzUxLCA3OTM2MCwgCisgICAgNzkzNjgsIDc5Mzc3LCA3OTM4NSwgNzkzOTQsIDc5NDAyLCA3OTQxMSwgNzk0MTksIDc5NDI4LCA3OTQzNiwgNzk0NDQsIAorICAgIDc5NDUxLCA3OTQ1OSwgNzk0NjYsIDc5NDc1LCA3OTQ4MywgNzk0OTIsIDc5NTAwLCA3OTUwOSwgNzk1MTcsIDc5NTI1LCAKKyAgICA3OTUzMywgNzk1NDIsIDc5NTUwLCA3OTU1OSwgNzk1NjgsIDc5NTc3LCA3OTU4NiwgNzk1OTQsIDc5NjAyLCA3OTYxMSwgCisgICAgNzk2MTksIDc5NjI4LCA3OTYzNywgNzk2NDUsIDc5NjUzLCA3OTY2MSwgNzk2NzAsIDc5Njc4LCA3OTY4NiwgNzk2OTUsIAorICAgIDc5NzAzLCA3OTcxMSwgNzk3MTksIDc5NzI3LCA3OTczMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzk3MzcsIDc5NzQ3LCA3OTc1NywgNzk3NjcsIDc5Nzc3LCA3OTc4OCwgNzk3OTgsIDc5ODA4LCA3OTgxOSwgCisgICAgNzk4MjgsIDc5ODM3LCA3OTg0NiwgNzk4NTYsIDc5ODY2LCA3OTg3NiwgNzk4ODcsIDc5ODk3LCA3OTkwNywgNzk5MTcsIAorICAgIDc5OTI3LCA3OTkzNywgNzk5NDcsIDc5OTU3LCA3OTk2NywgNzk5NzcsIDc5OTg3LCA3OTk5NywgODAwMDgsIDgwMDE5LCAKKyAgICA4MDAyOSwgODAwMzksIDgwMDUwLCA4MDA2MSwgODAwNzIsIDgwMDgyLCA4MDA5MiwgODAxMDIsIDgwMTEyLCA4MDEyMiwgCisgICAgODAxMzIsIDgwMTQyLCA4MDE1MywgODAxNjMsIDgwMTczLCA4MDE4NCwgODAxOTUsIDgwMjA2LCA4MDIxNiwgODAyMjYsIAorICAgIDgwMjM2LCA4MDI0NiwgODAyNTcsIDgwMjY3LCA4MDI3NywgODAyODgsIDgwMjk5LCA4MDMwOSwgODAzMTksIDgwMzI4LCAKKyAgICA4MDMzNywgODAzNDYsIDgwMzU1LCA4MDM2NCwgODAzNzQsIDAsIDAsIDgwMzg0LCA4MDM5NCwgODA0MDQsIDgwNDE0LCAKKyAgICA4MDQyNCwgODA0MzUsIDgwNDQ1LCA4MDQ1NSwgODA0NjYsIDgwNDc2LCA4MDQ4NywgODA0OTYsIDgwNTA1LCA4MDUxNiwgCisgICAgODA1MjYsIDgwNTM3LCA4MDU0OCwgODA1NjAsIDgwNTcwLCA4MDU4MSwgODA1OTAsIDgwNjAwLCA4MDYxMCwgODA2MjIsIAorICAgIDgwNjMyLCA4MDY0MiwgODA2NTIsIDgwNjYyLCA4MDY3MiwgODA2ODEsIDgwNjkwLCA4MDY5OSwgODA3MDgsIDgwNzE4LCAKKyAgICA4MDcyOCwgODA3MzgsIDgwNzQ4LCA4MDc1OCwgODA3NjgsIDgwNzc4LCA4MDc4OCwgODA3OTgsIDgwODA4LCA4MDgxOCwgCisgICAgODA4MjgsIDgwODM3LCA4MDg0NiwgODA4NTUsIDgwODY1LCA4MDg3NSwgODA4ODUsIDgwODk1LCA4MDkwNSwgODA5MTYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwOTI2LCA4MDk0MSwgODA5NTYsIDgwOTYyLCAKKyAgICA4MDk2OCwgODA5NzQsIDgwOTgwLCA4MDk4NiwgODA5OTIsIDgwOTk4LCA4MTAwNCwgODEwMTIsIDgxMDE2LCA4MTAxOSwgMCwgCisgICAgMCwgODEwMjcsIDgxMDMwLCA4MTAzMywgODEwMzYsIDgxMDM5LCA4MTA0MiwgODEwNDUsIDgxMDQ4LCA4MTA1MSwgODEwNTQsIAorICAgIDgxMDU3LCA4MTA2MCwgODEwNjMsIDgxMDY2LCA4MTA2OSwgODEwNzIsIDgxMDc1LCA4MTA4MywgODEwOTIsIDgxMTAzLCAKKyAgICA4MTExMSwgODExMTksIDgxMTI4LCA4MTEzNywgODExNDgsIDgxMTYwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTE2OSwgODExNzQsIAorICAgIDgxMTc5LCA4MTE4NiwgODExOTMsIDgxMTk5LCA4MTIwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEyMTAsIAorICAgIDgxMjIwLCA4MTIzMCwgODEyNDAsIDgxMjQ5LCA4MTI2MCwgODEyNjksIDgxMjc4LCA4MTI4OCwgODEyOTgsIDgxMzEwLCAKKyAgICA4MTMyMiwgODEzMzMsIDgxMzQ0LCA4MTM1NSwgODEzNjYsIDgxMzc2LCA4MTM4NiwgODEzOTYsIDgxNDA2LCA4MTQxNywgCisgICAgODE0MjgsIDgxNDMyLCA4MTQzNywgODE0NDYsIDgxNDU1LCA4MTQ1OSwgODE0NjMsIDgxNDY3LCA4MTQ3MiwgODE0NzcsIAorICAgIDgxNDgyLCA4MTQ4NywgODE0OTAsIDgxNDk0LCAwLCA4MTQ5OSwgODE1MDIsIDgxNTA1LCA4MTUwOSwgODE1MTMsIDgxNTE4LCAKKyAgICA4MTUyMiwgODE1MjYsIDgxNTMxLCA4MTUzNiwgODE1NDMsIDgxNTUwLCA4MTU1MywgODE1NTYsIDgxNTU5LCA4MTU2MiwgCisgICAgODE1NjUsIDgxNTY5LCA4MTU3MywgMCwgODE1NzcsIDgxNTgyLCA4MTU4NiwgODE1OTAsIDAsIDAsIDAsIDAsIDgxNTk1LCAKKyAgICA4MTYwMCwgODE2MDcsIDgxNjEyLCA4MTYxNywgMCwgODE2MjIsIDgxNjI3LCA4MTYzMiwgODE2MzcsIDgxNjQyLCA4MTY0NywgCisgICAgODE2NTIsIDgxNjU3LCA4MTY2MiwgODE2NjcsIDgxNjcyLCA4MTY3NywgODE2ODYsIDgxNjk1LCA4MTcwMywgODE3MTEsIAorICAgIDgxNzIwLCA4MTcyOSwgODE3MzgsIDgxNzQ3LCA4MTc1NSwgODE3NjMsIDgxNzcxLCA4MTc3OSwgODE3ODQsIDgxNzg5LCAKKyAgICA4MTc5NSwgODE4MDEsIDgxODA3LCA4MTgxMywgODE4MjEsIDgxODI5LCA4MTgzNSwgODE4NDEsIDgxODQ3LCA4MTg1MywgCisgICAgODE4NTksIDgxODY1LCA4MTg3MSwgODE4NzcsIDgxODgyLCA4MTg4NywgODE4OTIsIDgxODk3LCA4MTkwMiwgODE5MDcsIAorICAgIDgxOTEyLCA4MTkxNywgODE5MjMsIDgxOTI5LCA4MTkzNSwgODE5NDEsIDgxOTQ3LCA4MTk1MywgODE5NTksIDgxOTY1LCAKKyAgICA4MTk3MSwgODE5NzcsIDgxOTgzLCA4MTk4OSwgODE5OTUsIDgyMDAxLCA4MjAwNywgODIwMTMsIDgyMDE5LCA4MjAyNSwgCisgICAgODIwMzEsIDgyMDM3LCA4MjA0MywgODIwNDksIDgyMDU1LCA4MjA2MSwgODIwNjcsIDgyMDczLCA4MjA3OSwgODIwODUsIAorICAgIDgyMDkxLCA4MjA5NywgODIxMDMsIDgyMTA5LCA4MjExNSwgODIxMjEsIDgyMTI3LCA4MjEzMywgODIxMzksIDgyMTQ1LCAKKyAgICA4MjE1MSwgODIxNTcsIDgyMTYzLCA4MjE2OSwgODIxNzUsIDgyMTgxLCA4MjE4NywgODIxOTMsIDgyMTk5LCA4MjIwNSwgCisgICAgODIyMTEsIDgyMjE3LCA4MjIyMywgODIyMjksIDgyMjM1LCA4MjI0MSwgODIyNDcsIDgyMjUzLCA4MjI1OSwgODIyNjUsIAorICAgIDgyMjcxLCA4MjI3NywgODIyODIsIDgyMjg3LCA4MjI5MiwgODIyOTcsIDgyMzAzLCA4MjMwOSwgODIzMTUsIDgyMzIxLCAKKyAgICA4MjMyNywgODIzMzMsIDgyMzM5LCA4MjM0NSwgODIzNTEsIDgyMzU3LCA4MjM2MywgODIzNjksIDgyMzc0LCA4MjM3OSwgCisgICAgODIzODQsIDgyMzg5LCA4MjQwMSwgODI0MTMsIDgyNDI0LCA4MjQzNSwgODI0NDcsIDgyNDU5LCA4MjQ2NywgMCwgMCwgCisgICAgODI0NzUsIDAsIDgyNDgzLCA4MjQ4NywgODI0OTEsIDgyNDk0LCA4MjQ5OCwgODI1MDIsIDgyNTA1LCA4MjUwOCwgODI1MTIsIAorICAgIDgyNTE2LCA4MjUxOSwgODI1MjIsIDgyNTI1LCA4MjUyOCwgODI1MzMsIDgyNTM2LCA4MjU0MCwgODI1NDMsIDgyNTQ2LCAKKyAgICA4MjU0OSwgODI1NTIsIDgyNTU1LCA4MjU1OCwgODI1NjEsIDgyNTY0LCA4MjU2NywgODI1NzAsIDgyNTczLCA4MjU3NywgCisgICAgODI1ODEsIDgyNTg1LCA4MjU4OSwgODI1OTQsIDgyNTk5LCA4MjYwNSwgODI2MTEsIDgyNjE3LCA4MjYyMiwgODI2MjgsIAorICAgIDgyNjM0LCA4MjY0MCwgODI2NDUsIDgyNjUxLCA4MjY1NywgODI2NjIsIDgyNjY3LCA4MjY3MiwgODI2NzcsIDgyNjgzLCAKKyAgICA4MjY4OSwgODI2OTQsIDgyNjk5LCA4MjcwNSwgODI3MTAsIDgyNzE2LCA4MjcyMiwgODI3MjgsIDgyNzM0LCA4Mjc0MCwgCisgICAgODI3NDQsIDgyNzQ5LCA4Mjc1MywgODI3NTgsIDgyNzYyLCA4Mjc2NywgODI3NzIsIDgyNzc4LCA4Mjc4NCwgODI3OTAsIAorICAgIDgyNzk1LCA4MjgwMSwgODI4MDcsIDgyODEzLCA4MjgxOCwgODI4MjQsIDgyODMwLCA4MjgzNSwgODI4NDAsIDgyODQ1LCAKKyAgICA4Mjg1MCwgODI4NTYsIDgyODYyLCA4Mjg2NywgODI4NzIsIDgyODc4LCA4Mjg4MywgODI4ODksIDgyODk1LCA4MjkwMSwgCisgICAgODI5MDcsIDgyOTEzLCA4MjkxOCwgODI5MjIsIDgyOTI3LCA4MjkzMCwgODI5MzUsIDgyOTQwLCA4Mjk0NiwgODI5NTEsIAorICAgIDgyOTU2LCA4Mjk2MCwgODI5NjYsIDgyOTcxLCA4Mjk3NiwgODI5ODEsIDgyOTg2LCA4Mjk5MSwgODI5OTYsIDgzMDAxLCAKKyAgICA4MzAwNywgODMwMTMsIDgzMDE5LCA4MzAyNywgODMwMzEsIDgzMDM1LCA4MzAzOSwgODMwNDMsIDgzMDQ3LCA4MzA1MSwgCisgICAgODMwNTYsIDgzMDYxLCA4MzA2NiwgODMwNzEsIDgzMDc2LCA4MzA4MSwgODMwODYsIDgzMDkxLCA4MzA5NiwgODMxMDEsIAorICAgIDgzMTA2LCA4MzExMSwgODMxMTYsIDgzMTIwLCA4MzEyNCwgODMxMjksIDgzMTM0LCA4MzEzOSwgODMxNDQsIDgzMTQ4LCAKKyAgICA4MzE1MywgODMxNTgsIDgzMTYzLCA4MzE2OCwgODMxNzIsIDgzMTc3LCA4MzE4MiwgODMxODcsIDgzMTkyLCA4MzE5NiwgCisgICAgODMyMDEsIDgzMjA2LCA4MzIxMCwgODMyMTUsIDgzMjIwLCA4MzIyNSwgODMyMzAsIDgzMjM1LCA4MzIzOSwgODMyNDYsIAorICAgIDgzMjUzLCA4MzI1NywgODMyNjIsIDgzMjY3LCA4MzI3MiwgODMyNzcsIDgzMjgyLCA4MzI4NywgODMyOTIsIDgzMjk3LCAKKyAgICA4MzMwMiwgODMzMDcsIDgzMzEyLCA4MzMxNywgODMzMjIsIDgzMzI3LCA4MzMzMiwgODMzMzcsIDgzMzQyLCA4MzM0NywgCisgICAgODMzNTIsIDgzMzU3LCA4MzM2MiwgODMzNjcsIDgzMzcyLCA4MzM3NywgODMzODIsIDgzMzg3LCA4MzM5MiwgODMzOTcsIAorICAgIDgzNDAyLCAwLCAwLCAwLCA4MzQwNywgODM0MTEsIDgzNDE2LCA4MzQyMCwgODM0MjUsIDgzNDMwLCAwLCAwLCA4MzQzNCwgCisgICAgODM0MzksIDgzNDQ0LCA4MzQ0OCwgODM0NTMsIDgzNDU4LCAwLCAwLCA4MzQ2MywgODM0NjgsIDgzNDcyLCA4MzQ3NywgCisgICAgODM0ODIsIDgzNDg3LCAwLCAwLCA4MzQ5MiwgODM0OTcsIDgzNTAyLCAwLCAwLCAwLCA4MzUwNiwgODM1MTAsIDgzNTE0LCAKKyAgICA4MzUxNywgODM1MjAsIDgzNTI0LCA4MzUyOCwgMCwgODM1MzIsIDgzNTM4LCA4MzU0MSwgODM1NDUsIDgzNTQ4LCA4MzU1MiwgCisgICAgODM1NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzNTYwLCA4MzU2NiwgODM1NzIsIDgzNTc4LCA4MzU4NCwgCisgICAgMCwgMCwgODM1ODgsIDgzNTk0LCA4MzYwMCwgODM2MDYsIDgzNjEyLCA4MzYxOCwgODM2MjUsIDgzNjMyLCA4MzYzOSwgCisgICAgODM2NDYsIDgzNjUzLCA4MzY2MCwgMCwgODM2NjcsIDgzNjc0LCA4MzY4MSwgODM2ODcsIDgzNjk0LCA4MzcwMSwgODM3MDgsIAorICAgIDgzNzE1LCA4MzcyMSwgODM3MjgsIDgzNzM1LCA4Mzc0MiwgODM3NDksIDgzNzU1LCA4Mzc2MiwgODM3NjksIDgzNzc2LCAKKyAgICA4Mzc4MywgODM3ODksIDgzNzk2LCA4MzgwMywgODM4MTAsIDgzODE3LCA4MzgyNCwgODM4MzEsIDgzODM4LCAwLCA4Mzg0NSwgCisgICAgODM4NTEsIDgzODU4LCA4Mzg2NSwgODM4NzIsIDgzODc5LCA4Mzg4NiwgODM4OTMsIDgzOTAwLCA4MzkwNywgODM5MTQsIAorICAgIDgzOTIxLCA4MzkyOCwgODM5MzUsIDgzOTQxLCA4Mzk0OCwgODM5NTUsIDgzOTYyLCA4Mzk2OSwgMCwgODM5NzYsIDgzOTgzLCAKKyAgICAwLCA4Mzk5MCwgODM5OTcsIDg0MDA0LCA4NDAxMSwgODQwMTgsIDg0MDI1LCA4NDAzMiwgODQwMzksIDg0MDQ2LCA4NDA1MywgCisgICAgODQwNjAsIDg0MDY3LCA4NDA3NCwgODQwODEsIDg0MDg4LCAwLCAwLCA4NDA5NCwgODQwOTksIDg0MTA0LCA4NDEwOSwgCisgICAgODQxMTQsIDg0MTE5LCA4NDEyNCwgODQxMjksIDg0MTM0LCA4NDEzOSwgODQxNDQsIDg0MTQ5LCA4NDE1NCwgODQxNTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0MTY0LCA4NDE3MSwgODQxNzgsIDg0MTg1LCA4NDE5MiwgODQxOTksIAorICAgIDg0MjA2LCA4NDIxMywgODQyMjAsIDg0MjI3LCA4NDIzNCwgODQyNDEsIDg0MjQ4LCA4NDI1NSwgODQyNjIsIDg0MjY5LCAKKyAgICA4NDI3NiwgODQyODMsIDg0MjkwLCA4NDI5NywgODQzMDUsIDg0MzEzLCA4NDMyMCwgODQzMjcsIDg0MzMyLCA4NDM0MCwgCisgICAgODQzNDgsIDg0MzU1LCA4NDM2MiwgODQzNjcsIDg0Mzc0LCA4NDM3OSwgODQzODQsIDg0MzkxLCA4NDM5NiwgODQ0MDEsIAorICAgIDg0NDA2LCA4NDQxNCwgODQ0MTksIDg0NDI0LCA4NDQzMSwgODQ0MzYsIDg0NDQxLCA4NDQ0OCwgODQ0NTUsIDg0NDYwLCAKKyAgICA4NDQ2NSwgODQ0NzAsIDg0NDc1LCA4NDQ4MCwgODQ0ODUsIDg0NDkwLCA4NDQ5NSwgODQ1MDAsIDg0NTA3LCA4NDUxMiwgCisgICAgODQ1MTksIDg0NTI0LCA4NDUyOSwgODQ1MzQsIDg0NTM5LCA4NDU0NCwgODQ1NDksIDg0NTU0LCA4NDU1OSwgODQ1NjQsIAorICAgIDg0NTY5LCA4NDU3NCwgODQ1ODEsIDg0NTg4LCA4NDU5NSwgODQ2MDIsIDg0NjA4LCA4NDYxMywgODQ2MjAsIDg0NjI1LCAKKyAgICA4NDYzMCwgODQ2MzksIDg0NjQ2LCA4NDY1NSwgODQ2NjIsIDg0NjY3LCA4NDY3MiwgODQ2ODAsIDg0Njg1LCA4NDY5MCwgCisgICAgODQ2OTUsIDg0NzAwLCA4NDcwNSwgODQ3MTIsIDg0NzE3LCA4NDcyMiwgODQ3MjcsIDg0NzMyLCA4NDczNywgODQ3NDQsIAorICAgIDg0NzUxLCA4NDc1OCwgODQ3NjUsIDg0NzcyLCA4NDc3OSwgODQ3ODYsIDg0NzkzLCA4NDgwMCwgODQ4MDcsIDg0ODE0LCAKKyAgICA4NDgyMSwgODQ4MjgsIDg0ODM1LCA4NDg0MiwgODQ4NDksIDg0ODU2LCA4NDg2MywgODQ4NzAsIDg0ODc3LCA4NDg4NCwgCisgICAgODQ4OTEsIDg0ODk4LCA4NDkwNSwgODQ5MTIsIDg0OTE5LCA4NDkyNiwgODQ5MzMsIDAsIDAsIDAsIDAsIDAsIDg0OTQwLCAKKyAgICA4NDk0OCwgODQ5NTYsIDAsIDAsIDAsIDAsIDg0OTYxLCA4NDk2NSwgODQ5NjksIDg0OTczLCA4NDk3NywgODQ5ODEsIAorICAgIDg0OTg1LCA4NDk4OSwgODQ5OTMsIDg0OTk3LCA4NTAwMiwgODUwMDcsIDg1MDEyLCA4NTAxNywgODUwMjIsIDg1MDI3LCAKKyAgICA4NTAzMiwgODUwMzcsIDg1MDQyLCA4NTA0OCwgODUwNTQsIDg1MDYwLCA4NTA2NywgODUwNzQsIDg1MDgxLCA4NTA4OCwgCisgICAgODUwOTUsIDg1MTAyLCA4NTEwOCwgODUxMTQsIDg1MTIwLCA4NTEyNywgODUxMzQsIDg1MTQxLCA4NTE0OCwgODUxNTUsIAorICAgIDg1MTYyLCA4NTE2OSwgODUxNzYsIDg1MTgzLCA4NTE5MCwgODUxOTcsIDg1MjA0LCA4NTIxMSwgODUyMTgsIDAsIDAsIDAsIAorICAgIDg1MjI1LCA4NTIzMywgODUyNDEsIDg1MjQ5LCA4NTI1NywgODUyNjUsIDg1Mjc1LCA4NTI4NSwgODUyOTMsIDg1MzAxLCAKKyAgICA4NTMwOSwgODUzMTcsIDg1MzI1LCA4NTMzMSwgODUzMzgsIDg1MzQ3LCA4NTM1NiwgODUzNjUsIDg1Mzc0LCA4NTM4MywgCisgICAgODUzOTIsIDg1NDAyLCA4NTQxMywgODU0MjMsIDg1NDM0LCA4NTQ0MywgODU0NTIsIDg1NDYxLCA4NTQ3MSwgODU0ODIsIAorICAgIDg1NDkyLCA4NTUwMywgODU1MTQsIDg1NTIzLCA4NTUzMSwgODU1MzcsIDg1NTQzLCA4NTU0OSwgODU1NTUsIDg1NTYzLCAKKyAgICA4NTU3MSwgODU1NzcsIDg1NTg0LCA4NTU5NCwgODU2MDEsIDg1NjA4LCA4NTYxNSwgODU2MjIsIDg1NjI5LCA4NTYzOSwgCisgICAgODU2NDYsIDg1NjUzLCA4NTY2MSwgODU2NjksIDg1Njc4LCA4NTY4NywgODU2OTYsIDg1NzA1LCA4NTcxNCwgODU3MjIsIAorICAgIDg1NzMxLCA4NTc0MCwgODU3NDksIDg1NzUzLCA4NTc2MCwgODU3NjUsIDg1NzcwLCA4NTc3NCwgODU3NzgsIDg1NzgyLCAKKyAgICA4NTc4NiwgODU3OTEsIDg1Nzk2LCA4NTgwMiwgODU4MDgsIDg1ODEyLCA4NTgxOCwgODU4MjIsIDg1ODI2LCA4NTgzMCwgCisgICAgODU4MzQsIDg1ODM4LCA4NTg0MiwgODU4NDgsIDAsIDAsIDAsIDAsIDAsIDg1ODUyLCA4NTg1NywgODU4NjIsIDg1ODY3LCAKKyAgICA4NTg3MiwgODU4NzksIDg1ODg0LCA4NTg4OSwgODU4OTQsIDg1ODk5LCA4NTkwNCwgODU5MDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg1OTE0LCAKKyAgICA4NTkyMSwgODU5MzAsIDg1OTM5LCA4NTk0NiwgODU5NTMsIDg1OTYwLCA4NTk2NywgODU5NzQsIDg1OTgxLCA4NTk4NywgCisgICAgODU5OTQsIDg2MDAxLCA4NjAwOCwgODYwMTUsIDg2MDIyLCA4NjAyOSwgODYwMzYsIDg2MDQzLCA4NjA1MiwgODYwNTksIAorICAgIDg2MDY2LCA4NjA3MywgODYwODAsIDg2MDg3LCA4NjA5NCwgODYxMDEsIDg2MTA4LCA4NjExNywgODYxMjQsIDg2MTMxLCAKKyAgICA4NjEzOCwgODYxNDUsIDg2MTUyLCA4NjE1OSwgODYxNjgsIDg2MTc1LCA4NjE4MiwgODYxODksIDg2MTk2LCA4NjIwNSwgCisgICAgODYyMTIsIDg2MjE5LCA4NjIyNiwgODYyMzQsIDg2MjQzLCAwLCAwLCA4NjI1MiwgODYyNTYsIDg2MjYwLCA4NjI2NSwgCisgICAgODYyNzAsIDg2Mjc1LCA4NjI4MCwgODYyODQsIDg2Mjg5LCA4NjI5NCwgODYyOTksIDg2MzA0LCA4NjMwOSwgODYzMTQsIAorICAgIDg2MzE4LCA4NjMyMiwgODYzMjYsIDg2MzMxLCA4NjMzNiwgODYzNDAsIDg2MzQ1LCA4NjM1MCwgODYzNTQsIDg2MzU4LCAKKyAgICA4NjM2MywgODYzNjgsIDg2MzczLCA4NjM3OCwgODYzODMsIDAsIDAsIDAsIDg2Mzg4LCA4NjM5MiwgODYzOTcsIDg2NDAyLCAKKyAgICA4NjQwNiwgODY0MTEsIDg2NDE1LCA4NjQyMCwgODY0MjUsIDg2NDMwLCA4NjQzNSwgODY0MzksIDg2NDQzLCA4NjQ0OCwgCisgICAgODY0NTMsIDg2NDU4LCA4NjQ2MywgODY0NjcsIDg2NDcyLCA4NjQ3NiwgODY0ODEsIDg2NDg2LCA4NjQ5MCwgODY0OTUsIAorICAgIDg2NTAwLCA4NjUwNSwgODY1MDksIDg2NTEzLCA4NjUxOCwgODY1MjMsIDg2NTI4LCA4NjUzMywgODY1MzgsIDg2NTQzLCAKKyAgICA4NjU0OCwgODY1NTMsIDg2NTU4LCA4NjU2MywgODY1NjgsIDg2NTczLCA4NjU3OCwgODY1ODMsIDg2NTg4LCA4NjU5MywgCisgICAgODY1OTgsIDg2NjAzLCA4NjYwOCwgODY2MTMsIDg2NjE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NjYyMywgODY2MjcsIDg2NjMyLCA4NjYzNywgODY2NDIsIDg2NjQ2LCAKKyAgICA4NjY1MSwgODY2NTYsIDg2NjYxLCA4NjY2NiwgODY2NzAsIDg2Njc0LCA4NjY3OSwgODY2ODQsIDg2Njg5LCA4NjY5NCwgCisgICAgODY2OTgsIDg2NzAzLCA4NjcwOCwgODY3MTMsIDg2NzE4LCA4NjcyMywgODY3MjgsIDg2NzMyLCA4NjczNywgODY3NDIsIAorICAgIDg2NzQ3LCA4Njc1MiwgODY3NTcsIDg2NzYyLCA4Njc2NywgMCwgODY3NzIsIDg2Nzc3LCA4Njc4MiwgODY3ODgsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2Nzk0LCA4Njc5OSwgODY4MDQsIDg2ODA5LCA4NjgxNCwgODY4MTksIAorICAgIDg2ODI0LCA4NjgyOSwgODY4MzQsIDg2ODM5LCA4Njg0NCwgODY4NDksIDg2ODU0LCA4Njg1OSwgODY4NjQsIDg2ODY5LCAKKyAgICA4Njg3NCwgODY4NzksIDg2ODg0LCA4Njg4OSwgODY4OTQsIDg2ODk5LCA4NjkwNCwgODY5MDksIDg2OTE0LCA4NjkxOSwgCisgICAgODY5MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2OTMxLCA4NjkzNiwgODY5NDEsIDg2OTQ2LCA4Njk1MSwgODY5NTYsIDg2OTYxLCAKKyAgICA4Njk2NiwgODY5NzEsIDg2OTc2LCA4Njk4MSwgODY5ODYsIDg2OTkxLCA4Njk5NiwgODcwMDEsIDg3MDA2LCA4NzAxMSwgCisgICAgODcwMTYsIDg3MDIxLCA4NzAyNiwgODcwMzEsIDg3MDM2LCA4NzA0MSwgODcwNDYsIDg3MDUxLCA4NzA1NiwgODcwNjEsIAorICAgIDg3MDY1LCA4NzA2OSwgODcwNzMsIDAsIDg3MDc4LCA4NzA4NCwgODcwODksIDg3MDk0LCA4NzA5OSwgODcxMDQsIDg3MTEwLCAKKyAgICA4NzExNiwgODcxMjIsIDg3MTI4LCA4NzEzNCwgODcxNDAsIDg3MTQ2LCA4NzE1MiwgODcxNTgsIDg3MTY0LCA4NzE3MCwgCisgICAgODcxNzYsIDg3MTgyLCA4NzE4NywgODcxOTMsIDg3MTk5LCA4NzIwNCwgODcyMTAsIDg3MjE1LCA4NzIyMSwgODcyMjcsIAorICAgIDg3MjMyLCA4NzIzOCwgODcyNDQsIDg3MjQ5LCA4NzI1NSwgODcyNjEsIDg3MjY3LCA4NzI3MywgODcyNzksIDg3Mjg1LCAwLCAKKyAgICAwLCAwLCAwLCA4NzI5MCwgODcyOTYsIDg3MzAyLCA4NzMwOCwgODczMTQsIDg3MzIwLCA4NzMyNiwgODczMzIsIDg3MzM4LCAKKyAgICA4NzM0NSwgODczNTAsIDg3MzU1LCA4NzM2MSwgODczNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDg3MzczLCA4NzM3OCwgODczODMsIDg3Mzg4LCA4NzM5NCwgODczOTksIDg3NDA1LCA4NzQxMSwgCisgICAgODc0MTcsIDg3NDIzLCA4NzQzMCwgODc0MzYsIDg3NDQzLCA4NzQ0OCwgODc0NTMsIDg3NDU4LCA4NzQ2MywgODc0NjgsIAorICAgIDg3NDczLCA4NzQ3OCwgODc0ODMsIDg3NDg4LCA4NzQ5MywgODc0OTgsIDg3NTAzLCA4NzUwOCwgODc1MTMsIDg3NTE4LCAKKyAgICA4NzUyMywgODc1MjgsIDg3NTMzLCA4NzUzOCwgODc1NDMsIDg3NTQ4LCA4NzU1MywgODc1NTgsIDg3NTYzLCA4NzU2OCwgCisgICAgODc1NzMsIDg3NTc4LCA4NzU4MywgODc1ODgsIDg3NTkzLCA4NzU5OCwgODc2MDQsIDg3NjA5LCA4NzYxNSwgODc2MjEsIAorICAgIDg3NjI3LCA4NzYzMywgODc2NDAsIDg3NjQ2LCA4NzY1MywgODc2NTgsIDg3NjYzLCA4NzY2OCwgODc2NzMsIDg3Njc4LCAKKyAgICA4NzY4MywgODc2ODgsIDg3NjkzLCA4NzY5OCwgODc3MDMsIDg3NzA4LCA4NzcxMywgODc3MTgsIDg3NzIzLCA4NzcyOCwgCisgICAgODc3MzMsIDg3NzM4LCA4Nzc0MywgODc3NDgsIDg3NzUzLCA4Nzc1OCwgODc3NjMsIDg3NzY4LCA4Nzc3MywgODc3NzgsIAorICAgIDg3NzgzLCA4Nzc4OCwgODc3OTMsIDg3Nzk4LCA4NzgwMywgODc4MDgsIDg3ODEzLCA4NzgxOCwgODc4MjMsIDg3ODI4LCAKKyAgICA4NzgzMywgODc4MzgsIDg3ODQzLCA4Nzg0OCwgODc4NTMsIDg3ODU4LCA4Nzg2MywgODc4NjgsIDg3ODczLCA4Nzg3OCwgCisgICAgODc4ODMsIDg3ODg4LCA4Nzg5MywgODc4OTgsIDg3OTAzLCA4NzkwOCwgODc5MTMsIDg3OTE4LCA4NzkyMywgODc5MjgsIAorICAgIDg3OTMzLCA4NzkzOCwgODc5NDMsIDg3OTQ4LCA4Nzk1MywgODc5NTgsIDg3OTYzLCA4Nzk2OCwgODc5NzMsIDg3OTc4LCAKKyAgICA4Nzk4MywgODc5ODgsIDg3OTkzLCA4Nzk5OCwgODgwMDMsIDg4MDA4LCA4ODAxMywgODgwMTgsIDg4MDIzLCA4ODAyOCwgCisgICAgODgwMzMsIDg4MDM4LCA4ODA0MywgODgwNDgsIDg4MDUzLCA4ODA1OCwgODgwNjMsIDg4MDY4LCA4ODA3MiwgODgwNzcsIAorICAgIDg4MDgyLCA4ODA4NywgODgwOTIsIDg4MDk3LCA4ODEwMiwgODgxMDcsIDg4MTEyLCA4ODExNywgODgxMjIsIDg4MTI3LCAKKyAgICA4ODEzMiwgODgxMzYsIDg4MTQwLCA4ODE0NCwgODgxNDgsIDg4MTUyLCA4ODE1NiwgODgxNjAsIDg4MTY1LCA4ODE3MCwgMCwgCisgICAgMCwgODgxNzUsIDg4MTgwLCA4ODE4NCwgODgxODgsIDg4MTkyLCA4ODE5NiwgODgyMDAsIDg4MjA0LCA4ODIwOCwgODgyMTIsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4MjE2LCA4ODIyMCwgODgyMjQsIDg4MjI4LCAKKyAgICA4ODIzMiwgODgyMzYsIDAsIDAsIDg4MjQxLCAwLCA4ODI0NiwgODgyNTAsIDg4MjU1LCA4ODI2MCwgODgyNjUsIDg4MjcwLCAKKyAgICA4ODI3NSwgODgyODAsIDg4Mjg1LCA4ODI5MCwgODgyOTUsIDg4Mjk5LCA4ODMwNCwgODgzMDksIDg4MzE0LCA4ODMxOSwgCisgICAgODgzMjMsIDg4MzI4LCA4ODMzMywgODgzMzgsIDg4MzQzLCA4ODM0NywgODgzNTIsIDg4MzU3LCA4ODM2MiwgODgzNjcsIAorICAgIDg4MzcxLCA4ODM3NiwgODgzODEsIDg4Mzg2LCA4ODM5MSwgODgzOTYsIDg4NDAxLCA4ODQwNiwgODg0MTEsIDg4NDE2LCAKKyAgICA4ODQyMSwgODg0MjYsIDg4NDMxLCA4ODQzNSwgODg0NDAsIDg4NDQ1LCA4ODQ1MCwgODg0NTUsIDAsIDg4NDYwLCA4ODQ2NSwgCisgICAgMCwgMCwgMCwgODg0NzAsIDAsIDAsIDg4NDc1LCA4ODQ4MCwgODg0ODcsIDg4NDk0LCA4ODUwMSwgODg1MDgsIDg4NTE1LCAKKyAgICA4ODUyMiwgODg1MjksIDg4NTM2LCA4ODU0MywgODg1NTAsIDg4NTU3LCA4ODU2NCwgODg1NzEsIDg4NTc4LCA4ODU4NSwgCisgICAgODg1OTIsIDg4NTk5LCA4ODYwNiwgODg2MTMsIDg4NjIwLCA4ODYyNywgMCwgODg2MzQsIDg4NjQxLCA4ODY0NywgODg2NTMsIAorICAgIDg4NjU5LCA4ODY2NiwgODg2NzMsIDg4NjgxLCA4ODY4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg2OTgsIDg4NzAzLCAKKyAgICA4ODcwOCwgODg3MTMsIDg4NzE4LCA4ODcyMywgODg3MjgsIDg4NzMzLCA4ODczOCwgODg3NDMsIDg4NzQ4LCA4ODc1MywgCisgICAgODg3NTgsIDg4NzYzLCA4ODc2OCwgODg3NzMsIDg4Nzc4LCA4ODc4MywgODg3ODgsIDg4NzkzLCA4ODc5OCwgODg4MDMsIAorICAgIDg4ODA4LCA4ODgxMiwgODg4MTcsIDg4ODIyLCA4ODgyOCwgODg4MzIsIDAsIDAsIDAsIDg4ODM2LCA4ODg0MiwgODg4NDYsIAorICAgIDg4ODUxLCA4ODg1NiwgODg4NjEsIDg4ODY1LCA4ODg3MCwgODg4NzQsIDg4ODc5LCA4ODg4NCwgODg4ODgsIDg4ODkyLCAKKyAgICA4ODg5NiwgODg5MDAsIDg4OTA0LCA4ODkwOSwgODg5MTQsIDg4OTE4LCA4ODkyMywgODg5MjgsIDg4OTMyLCA4ODkzNywgCisgICAgODg5NDIsIDg4OTQ3LCA4ODk1MiwgODg5NTcsIDAsIDAsIDAsIDAsIDAsIDg4OTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODk2NywgODg5NzAsIDg4OTc0LCA4ODk3OCwgMCwgODg5ODMsIDg4OTg3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCA4ODk5MSwgODg5OTYsIDg5MDAyLCA4OTAwNiwgODkwMTAsIDg5MDEzLCA4OTAxNywgODkwMjEsIDAsIAorICAgIDg5MDI1LCA4OTAyOSwgODkwMzMsIDAsIDg5MDM3LCA4OTA0MSwgODkwNDUsIDg5MDQ5LCA4OTA1MywgODkwNTcsIDg5MDYxLCAKKyAgICA4OTA2NSwgODkwNjksIDg5MDczLCA4OTA3NywgODkwODAsIDg5MDgzLCA4OTA4NywgODkwOTEsIDg5MDk1LCA4OTA5OCwgCisgICAgODkxMDEsIDg5MTA0LCA4OTEwOCwgODkxMTIsIDg5MTE2LCA4OTEyMCwgODkxMjQsIDg5MTI4LCA4OTEzMSwgODkxMzUsIDAsIAorICAgIDAsIDAsIDAsIDg5MTM5LCA4OTE0NCwgODkxNDgsIDAsIDAsIDAsIDAsIDg5MTUyLCA4OTE1NSwgODkxNTgsIDg5MTYxLCAKKyAgICA4OTE2NCwgODkxNjcsIDg5MTcxLCA4OTE3NSwgODkxODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5MTg1LCA4OTE5MCwgCisgICAgODkxOTYsIDg5MjAxLCA4OTIwNywgODkyMTIsIDg5MjE3LCA4OTIyMiwgODkyMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDg5MjMzLCA4OTI0MSwgODkyNDksIDg5MjU3LCA4OTI2NSwgODkyNzMsIDg5MjgxLCA4OTI4OSwgODkyOTcsIDg5MzA1LCAKKyAgICA4OTMxMywgODkzMjEsIDg5MzI5LCA4OTMzNywgODkzNDUsIDg5MzUzLCA4OTM2MSwgODkzNjksIDg5Mzc3LCA4OTM4NSwgCisgICAgODkzOTMsIDg5NDAxLCA4OTQwOSwgODk0MTcsIDg5NDI1LCA4OTQzMywgODk0NDEsIDg5NDQ5LCA4OTQ1NywgODk0NjUsIAorICAgIDg5NDcyLCA4OTQ4MCwgODk0ODgsIDg5NDkyLCA4OTQ5NywgODk1MDIsIDg5NTA3LCA4OTUxMiwgODk1MTcsIDg5NTIyLCAKKyAgICA4OTUyNywgODk1MzEsIDg5NTM2LCA4OTU0MCwgODk1NDUsIDg5NTQ5LCA4OTU1NCwgODk1NTgsIDg5NTYzLCA4OTU2OCwgCisgICAgODk1NzMsIDg5NTc4LCA4OTU4MywgODk1ODgsIDg5NTkzLCA4OTU5OCwgODk2MDMsIDg5NjA4LCA4OTYxMywgODk2MTgsIAorICAgIDg5NjIzLCA4OTYyOCwgODk2MzMsIDg5NjM4LCA4OTY0MywgODk2NDgsIDg5NjUzLCA4OTY1OCwgODk2NjMsIDg5NjY4LCAKKyAgICA4OTY3MywgODk2NzgsIDg5NjgzLCA4OTY4OCwgODk2OTMsIDg5Njk4LCA4OTcwMywgODk3MDgsIDg5NzEzLCA4OTcxOCwgCisgICAgODk3MjMsIDg5NzI4LCA4OTczMywgODk3MzgsIDg5NzQzLCA4OTc0OCwgMCwgMCwgMCwgODk3NTMsIDg5NzU4LCA4OTc2NywgCisgICAgODk3NzUsIDg5Nzg0LCA4OTc5MywgODk4MDQsIDg5ODE1LCA4OTgyMiwgODk4MjksIDg5ODM2LCA4OTg0MywgODk4NTAsIAorICAgIDg5ODU3LCA4OTg2NCwgODk4NzEsIDg5ODc4LCA4OTg4NSwgODk4OTIsIDg5ODk5LCA4OTkwNiwgODk5MTMsIDg5OTIwLCAKKyAgICA4OTkyNywgODk5MzQsIDg5OTQxLCA4OTk0OCwgODk5NTUsIDg5OTYyLCAwLCAwLCA4OTk2OSwgODk5NzUsIDg5OTgxLCAKKyAgICA4OTk4NywgODk5OTMsIDkwMDAwLCA5MDAwNywgOTAwMTUsIDkwMDIzLCA5MDAzMCwgOTAwMzcsIDkwMDQ0LCA5MDA1MSwgCisgICAgOTAwNTgsIDkwMDY1LCA5MDA3MiwgOTAwNzksIDkwMDg2LCA5MDA5MywgOTAxMDAsIDkwMTA3LCA5MDExNCwgOTAxMjEsIAorICAgIDkwMTI4LCA5MDEzNSwgOTAxNDIsIDkwMTQ5LCAwLCAwLCAwLCAwLCAwLCA5MDE1NiwgOTAxNjIsIDkwMTY4LCA5MDE3NCwgCisgICAgOTAxODAsIDkwMTg3LCA5MDE5NCwgOTAyMDIsIDkwMjEwLCA5MDIxNiwgOTAyMjIsIDkwMjI5LCA5MDIzNSwgOTAyNDEsIAorICAgIDkwMjQ3LCA5MDI1MywgOTAyNjAsIDkwMjY3LCA5MDI3NCwgOTAyODEsIDkwMjg4LCA5MDI5NSwgOTAzMDIsIDkwMzA5LCAKKyAgICA5MDMxNiwgOTAzMjMsIDkwMzMwLCA5MDMzNywgOTAzNDQsIDkwMzUxLCA5MDM1OCwgOTAzNjUsIDkwMzcyLCA5MDM3OSwgCisgICAgOTAzODYsIDkwMzkzLCA5MDQwMCwgOTA0MDcsIDkwNDE0LCA5MDQyMSwgOTA0MjgsIDkwNDM1LCA5MDQ0MiwgOTA0NDksIAorICAgIDkwNDU2LCA5MDQ2MywgOTA0NzAsIDkwNDc3LCA5MDQ4NCwgOTA0OTEsIDkwNDk4LCA5MDUwNSwgOTA1MTIsIDkwNTE5LCAKKyAgICA5MDUyNiwgOTA1MzMsIDkwNTQwLCA5MDU0NywgOTA1NTQsIDkwNTYxLCA5MDU2OCwgOTA1NzUsIDkwNTgyLCA5MDU4OSwgCisgICAgOTA1OTYsIDkwNjAzLCA5MDYxMCwgOTA2MTcsIDkwNjI0LCA5MDYzMSwgOTA2MzgsIDkwNjQ1LCA5MDY1MiwgOTA2NTksIAorICAgIDkwNjY2LCA5MDY3MywgOTA2ODAsIDkwNjg3LCA5MDY5NCwgOTA3MDEsIDkwNzA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1ODY0NiwgNTg2NTQsIDU4NjYyLCA1ODY3MiwgNTg2NzgsIDU4NjgyLCA1ODY4NiwgNTg2OTIsIDU4Njk4LCA1ODcwMywgCi0gICAgNTg3MDcsIDU4NzExLCA1ODcxNSwgNTg3MTksIDU4NzI1LCA1ODcyOSwgNTg3MzMsIDU4NzM3LCA1ODc0NywgNTg3NTEsIAotICAgIDU4NzU1LCA1ODc2MSwgNTg3NjUsIDU4NzcxLCA1ODc3NSwgNTg3NzksIDU4Nzg1LCA1ODc5MSwgNTg3OTcsIDU4ODA1LCAKLSAgICA1ODgxMywgNTg4MTcsIDU4ODIxLCA1ODgyNSwgNTg4MzEsIDU4ODM1LCA1ODg0NCwgNTg4NTAsIDU4ODU0LCA1ODg1OCwgCi0gICAgNTg4NjIsIDU4ODY2LCA1ODg3MCwgNTg4NzQsIDU4ODgxLCA1ODg4NywgNTg4OTMsIDU4ODk3LCA1ODkwMywgNTg5MDcsIAotICAgIDU4OTEzLCA1ODkyMSwgNTg5MzEsIDU4OTM1LCA1ODk0MywgNTg5NDcsIDU4OTUzLCA1ODk2MSwgNTg5NjksIDU4OTczLCAKLSAgICA1ODk3NywgNTg5ODMsIDU4OTg4LCA1ODk5NCwgNTkwMDAsIDU5MDA0LCA1OTAwOCwgNTkwMTEsIDU5MDE1LCA1OTAxOSwgCi0gICAgNTkwMjMsIDU5MDI3LCA1OTAzMSwgNTkwMzUsIDU5MDM5LCA1OTA0MiwgNTkwNDYsIDU5MDUwLCA1OTA1NCwgNTkwNTgsIAotICAgIDU5MDYyLCA1OTA2NiwgNTkwNjksIDU5MDczLCA1OTA3NywgNTkwODAsIDU5MDg0LCA1OTA4OCwgNTkwOTIsIDU5MDk2LCAKLSAgICA1OTEwMCwgNTkxMDQsIDU5MTA4LCA1OTExMiwgNTkxMTYsIDU5MTIwLCA1OTEyNCwgNTkxMjgsIDU5MTMyLCA1OTEzNiwgCi0gICAgNTkxNDAsIDU5MTQ0LCA1OTE0OCwgNTkxNTIsIDU5MTU2LCA1OTE2MCwgNTkxNjQsIDU5MTY4LCA1OTE3MiwgNTkxNzYsIAotICAgIDU5MTgwLCA1OTE4NCwgNTkxODgsIDU5MTkyLCA1OTE5NiwgNTkyMDAsIDU5MjA0LCA1OTIwOCwgNTkyMTIsIDU5MjE2LCAKLSAgICA1OTIyMCwgNTkyMjQsIDU5MjI4LCA1OTIzMiwgNTkyMzYsIDU5MjQwLCA1OTI0NCwgNTkyNDgsIDU5MjUyLCA1OTI1NiwgCi0gICAgNTkyNTksIDU5MjYzLCA1OTI2NywgNTkyNzEsIDU5Mjc1LCA1OTI3OSwgNTkyODMsIDU5Mjg3LCA1OTI5MSwgNTkyOTUsIAotICAgIDU5Mjk5LCA1OTMwMywgNTkzMDcsIDU5MzExLCA1OTMxNSwgNTkzMTksIDU5MzIzLCA1OTMyNywgNTkzMzEsIDU5MzM1LCAKLSAgICA1OTMzOSwgNTkzNDMsIDU5MzQ3LCA1OTM1MSwgNTkzNTUsIDU5MzU5LCA1OTM2MywgNTkzNjcsIDU5MzcxLCA1OTM3NSwgCi0gICAgNTkzNzksIDU5MzgzLCA1OTM4NywgNTkzOTEsIDU5Mzk1LCA1OTM5OSwgNTk0MDMsIDU5NDA3LCA1OTQxMSwgNTk0MTUsIAotICAgIDU5NDE5LCA1OTQyMywgNTk0MjcsIDU5NDMxLCA1OTQzNSwgNTk0MzksIDU5NDQzLCA1OTQ0NywgNTk0NTEsIDU5NDU1LCAKLSAgICA1OTQ1OSwgNTk0NjMsIDU5NDY3LCA1OTQ3MSwgNTk0NzUsIDU5NDc5LCA1OTQ4MywgNTk0ODcsIDU5NDkxLCA1OTQ5NSwgCi0gICAgNTk0OTksIDU5NTAzLCA1OTUwNywgNTk1MTEsIDU5NTE1LCA1OTUxOSwgNTk1MjMsIDU5NTI3LCA1OTUzMSwgNTk1MzUsIAotICAgIDU5NTM5LCA1OTU0MywgNTk1NDcsIDU5NTUxLCA1OTU1NSwgNTk1NTksIDU5NTYzLCA1OTU2NywgNTk1NzEsIDU5NTc1LCAKLSAgICA1OTU3OSwgNTk1ODMsIDU5NTg3LCA1OTU5MSwgNTk1OTUsIDU5NTk5LCA1OTYwMywgNTk2MDcsIDU5NjExLCA1OTYxNSwgCi0gICAgNTk2MTksIDU5NjIzLCA1OTYyNywgNTk2MzEsIDU5NjM1LCA1OTYzOSwgNTk2NDMsIDU5NjQ3LCA1OTY1MSwgNTk2NTUsIAotICAgIDU5NjU5LCA1OTY2MywgNTk2NjcsIDU5NjcxLCA1OTY3NSwgNTk2NzksIDU5NjgzLCA1OTY4NywgNTk2OTEsIDU5Njk1LCAKLSAgICA1OTY5OSwgNTk3MDMsIDU5NzA3LCA1OTcxMSwgNTk3MTUsIDU5NzE5LCA1OTcyMywgNTk3MjcsIDU5NzMwLCA1OTczNCwgCi0gICAgNTk3MzgsIDU5NzQyLCA1OTc0NiwgNTk3NTAsIDU5NzU0LCA1OTc1OCwgNTk3NjIsIDU5NzY2LCA1OTc3MCwgNTk3NzQsIAotICAgIDU5Nzc4LCA1OTc4MiwgNTk3ODYsIDU5NzkwLCA1OTc5NCwgNTk3OTgsIDU5ODAyLCA1OTgwNiwgNTk4MTAsIDU5ODE0LCAKLSAgICA1OTgxOCwgNTk4MjIsIDU5ODI2LCA1OTgzMCwgNTk4MzQsIDU5ODM4LCA1OTg0MiwgNTk4NDYsIDU5ODUwLCA1OTg1NCwgCi0gICAgNTk4NTgsIDU5ODYyLCA1OTg2NiwgNTk4NzAsIDU5ODc0LCA1OTg3OCwgNTk4ODIsIDU5ODg2LCA1OTg5MCwgNTk4OTQsIAotICAgIDU5ODk4LCA1OTkwMiwgNTk5MDYsIDU5OTEwLCA1OTkxNCwgNTk5MTgsIDU5OTIyLCA1OTkyNiwgNTk5MzAsIDU5OTM0LCAKLSAgICA1OTkzOCwgNTk5NDIsIDU5OTQ2LCA1OTk1MCwgNTk5NTQsIDU5OTU4LCA1OTk2MiwgNTk5NjYsIDU5OTcwLCA1OTk3NCwgCi0gICAgNTk5NzgsIDU5OTgyLCA1OTk4NiwgNTk5OTAsIDU5OTk0LCA1OTk5OCwgNjAwMDIsIDYwMDA2LCA2MDAxMCwgNjAwMTQsIAotICAgIDYwMDE4LCA2MDAyMiwgNjAwMjYsIDYwMDMwLCA2MDAzNCwgNjAwMzgsIDYwMDQyLCA2MDA0NiwgNjAwNTAsIDYwMDU0LCAKLSAgICA2MDA1OCwgNjAwNjIsIDYwMDY2LCA2MDA3MCwgNjAwNzQsIDYwMDc4LCA2MDA4MiwgNjAwODYsIDYwMDkwLCA2MDA5NCwgCi0gICAgNjAwOTgsIDYwMTAyLCA2MDEwNiwgNjAxMTAsIDYwMTE0LCA2MDExOCwgNjAxMjIsIDYwMTI2LCA2MDEzMCwgNjAxMzQsIAotICAgIDYwMTM4LCA2MDE0MiwgNjAxNDYsIDYwMTUwLCA2MDE1NCwgNjAxNTgsIDYwMTYyLCA2MDE2NiwgNjAxNzAsIDYwMTc0LCAKLSAgICA2MDE3OCwgNjAxODIsIDYwMTg2LCA2MDE5MCwgNjAxOTMsIDYwMTk3LCA2MDIwMSwgNjAyMDUsIDYwMjA5LCA2MDIxMywgCi0gICAgNjAyMTcsIDYwMjIxLCA2MDIyNSwgNjAyMjksIDYwMjMzLCA2MDIzNywgNjAyNDEsIDYwMjQ1LCA2MDI0OSwgNjAyNTMsIAotICAgIDYwMjU3LCA2MDI2MSwgNjAyNjUsIDYwMjY5LCA2MDI3MywgNjAyNzcsIDYwMjgxLCA2MDI4NSwgNjAyODksIDYwMjkzLCAKLSAgICA2MDI5NywgNjAzMDEsIDYwMzA1LCA2MDMwOSwgNjAzMTMsIDYwMzE3LCA2MDMyMSwgNjAzMjUsIDYwMzI5LCA2MDMzMywgCi0gICAgNjAzMzcsIDYwMzQxLCA2MDM0NSwgNjAzNDksIDYwMzUzLCA2MDM1NywgNjAzNjEsIDYwMzY1LCA2MDM2OSwgNjAzNzMsIAotICAgIDYwMzc3LCA2MDM4MSwgNjAzODUsIDYwMzg5LCA2MDM5MywgNjAzOTcsIDYwNDAxLCA2MDQwNSwgNjA0MDksIDYwNDEzLCAKLSAgICA2MDQxNywgNjA0MjEsIDYwNDI1LCA2MDQyOSwgNjA0MzMsIDYwNDM3LCA2MDQ0MSwgNjA0NDUsIDYwNDQ5LCA2MDQ1MywgCi0gICAgNjA0NTcsIDYwNDYxLCA2MDQ2NSwgNjA0NjksIDYwNDczLCA2MDQ3NywgNjA0ODEsIDYwNDg1LCA2MDQ4OSwgNjA0OTMsIAotICAgIDYwNDk3LCA2MDUwMSwgNjA1MDUsIDYwNTA5LCA2MDUxMywgNjA1MTcsIDYwNTIxLCA2MDUyNSwgNjA1MjksIDYwNTMzLCAKLSAgICA2MDUzNywgNjA1NDEsIDYwNTQ1LCA2MDU0OSwgNjA1NTMsIDYwNTU3LCA2MDU2MSwgNjA1NjUsIDYwNTY5LCA2MDU3MywgCi0gICAgNjA1NzcsIDYwNTgxLCA2MDU4NSwgNjA1ODksIDYwNTkzLCA2MDU5NywgNjA2MDEsIDYwNjA1LCA2MDYwOSwgNjA2MTMsIAotICAgIDYwNjE3LCA2MDYyMSwgNjA2MjUsIDYwNjI5LCA2MDYzMywgNjA2MzcsIDYwNjQxLCA2MDY0NSwgNjA2NDksIDYwNjUzLCAKLSAgICA2MDY1NywgNjA2NjEsIDYwNjY1LCA2MDY2OSwgNjA2NzMsIDYwNjc3LCA2MDY4MSwgNjA2ODUsIDYwNjg5LCA2MDY5MywgCi0gICAgNjA2OTcsIDYwNzAxLCA2MDcwNSwgNjA3MDksIDYwNzEzLCA2MDcxNywgNjA3MjEsIDYwNzI1LCA2MDcyOSwgNjA3MzMsIAotICAgIDYwNzM3LCA2MDc0MSwgNjA3NDUsIDYwNzQ5LCA2MDc1MywgNjA3NTcsIDYwNzYxLCA2MDc2NSwgNjA3NjksIDYwNzczLCAKLSAgICA2MDc3NywgNjA3ODEsIDYwNzg1LCA2MDc4OSwgNjA3OTMsIDYwNzk3LCA2MDgwMSwgNjA4MDUsIDYwODA5LCA2MDgxMywgCi0gICAgNjA4MTcsIDYwODIxLCA2MDgyNSwgNjA4MjksIDYwODMzLCA2MDgzNywgNjA4NDEsIDYwODQ1LCA2MDg0OSwgNjA4NTMsIAotICAgIDYwODU3LCA2MDg2MSwgNjA4NjUsIDYwODY5LCA2MDg3MywgNjA4NzcsIDYwODgxLCA2MDg4NSwgNjA4ODksIDYwODkzLCAKLSAgICA2MDg5NywgNjA5MDEsIDYwOTA1LCA2MDkwOSwgNjA5MTMsIDYwOTE3LCA2MDkyMSwgNjA5MjUsIDYwOTI5LCA2MDkzMywgCi0gICAgNjA5MzcsIDYwOTQxLCA2MDk0NSwgNjA5NDksIDYwOTUzLCA2MDk1NywgNjA5NjEsIDYwOTY1LCA2MDk2OSwgNjA5NzMsIAotICAgIDYwOTc3LCA2MDk4MSwgNjA5ODUsIDYwOTg5LCA2MDk5MywgNjA5OTcsIDYxMDAxLCA2MTAwNSwgNjEwMDksIDYxMDEzLCAKLSAgICA2MTAxNywgNjEwMjEsIDYxMDI1LCA2MTAyOSwgNjEwMzMsIDYxMDM3LCA2MTA0MSwgNjEwNDUsIDYxMDQ4LCA2MTA1MiwgCi0gICAgNjEwNTYsIDYxMDYwLCA2MTA2NCwgNjEwNjgsIDYxMDcyLCA2MTA3NiwgNjEwODAsIDYxMDg0LCA2MTA4OCwgNjEwOTIsIAotICAgIDYxMDk2LCA2MTEwMCwgNjExMDQsIDYxMTA4LCA2MTExMiwgNjExMTYsIDYxMTIwLCA2MTEyNCwgNjExMjgsIDYxMTMyLCAKLSAgICA2MTEzNiwgNjExNDAsIDYxMTQ0LCA2MTE0OCwgNjExNTIsIDYxMTU2LCA2MTE2MCwgNjExNjQsIDYxMTY4LCA2MTE3MiwgCi0gICAgNjExNzYsIDYxMTgwLCA2MTE4NCwgNjExODgsIDYxMTkyLCA2MTE5NiwgNjEyMDAsIDYxMjA0LCA2MTIwOCwgNjEyMTIsIAotICAgIDYxMjE2LCA2MTIyMCwgNjEyMjQsIDYxMjI4LCA2MTIzMiwgNjEyMzYsIDYxMjQwLCA2MTI0NCwgNjEyNDgsIDYxMjUyLCAKLSAgICA2MTI1NiwgNjEyNjAsIDYxMjY0LCA2MTI2OCwgNjEyNzIsIDYxMjc2LCA2MTI4MCwgNjEyODQsIDYxMjg4LCA2MTI5MiwgCi0gICAgNjEyOTYsIDYxMzAwLCA2MTMwNCwgNjEzMDgsIDYxMzEyLCA2MTMxNiwgNjEzMjAsIDYxMzI0LCA2MTMyOCwgNjEzMzIsIAotICAgIDYxMzM2LCA2MTM0MCwgNjEzNDQsIDYxMzQ4LCA2MTM1MiwgNjEzNTYsIDYxMzYwLCA2MTM2NCwgNjEzNjgsIDYxMzcyLCAKLSAgICA2MTM3NiwgNjEzODAsIDYxMzg0LCA2MTM4OCwgNjEzOTIsIDYxMzk2LCA2MTQwMCwgNjE0MDQsIDYxNDA4LCA2MTQxMiwgCi0gICAgNjE0MTYsIDYxNDIwLCA2MTQyNCwgNjE0MjgsIDYxNDMyLCA2MTQzNiwgNjE0NDAsIDYxNDQ0LCA2MTQ0OCwgNjE0NTIsIAotICAgIDYxNDU2LCA2MTQ2MCwgNjE0NjQsIDYxNDY4LCA2MTQ3MiwgNjE0NzYsIDYxNDgwLCA2MTQ4NCwgNjE0ODgsIDYxNDkyLCAKLSAgICA2MTQ5NiwgNjE1MDAsIDYxNTAzLCA2MTUwNywgNjE1MTEsIDYxNTE1LCA2MTUxOSwgNjE1MjMsIDYxNTI3LCA2MTUzMSwgCi0gICAgNjE1MzUsIDYxNTM5LCA2MTU0MywgNjE1NDcsIDYxNTUxLCA2MTU1NSwgNjE1NTksIDYxNTYzLCA2MTU2NywgNjE1NzEsIAotICAgIDYxNTc1LCA2MTU3OSwgNjE1ODMsIDYxNTg3LCA2MTU5MSwgNjE1OTUsIDYxNTk5LCA2MTYwMywgNjE2MDcsIDYxNjExLCAKLSAgICA2MTYxNSwgNjE2MTksIDYxNjIzLCA2MTYyNywgNjE2MzEsIDYxNjM1LCA2MTYzOSwgNjE2NDMsIDYxNjQ3LCA2MTY1MSwgCi0gICAgNjE2NTUsIDYxNjU5LCA2MTY2MywgNjE2NjcsIDYxNjcxLCA2MTY3NSwgNjE2NzksIDYxNjgzLCA2MTY4NywgNjE2OTEsIAotICAgIDYxNjk1LCA2MTY5OSwgNjE3MDMsIDYxNzA3LCA2MTcxMSwgNjE3MTUsIDYxNzE5LCA2MTcyMywgNjE3MjcsIDYxNzMxLCAKLSAgICA2MTczNSwgNjE3MzksIDYxNzQzLCA2MTc0NywgNjE3NTEsIDYxNzU1LCA2MTc1OSwgNjE3NjMsIDYxNzY3LCA2MTc3MSwgCi0gICAgNjE3NzUsIDYxNzc5LCA2MTc4MywgNjE3ODcsIDYxNzkxLCA2MTc5NSwgNjE3OTksIDYxODAzLCA2MTgwNywgNjE4MTEsIAotICAgIDYxODE1LCA2MTgxOSwgNjE4MjMsIDYxODI3LCA2MTgzMSwgNjE4MzUsIDYxODM5LCA2MTg0MywgNjE4NDcsIDYxODUxLCAKLSAgICA2MTg1NSwgNjE4NTksIDYxODYzLCA2MTg2NywgNjE4NzEsIDYxODc1LCA2MTg3OSwgNjE4ODMsIDYxODg3LCA2MTg5MSwgCi0gICAgNjE4OTUsIDYxODk5LCA2MTkwMywgNjE5MDcsIDYxOTExLCA2MTkxNSwgNjE5MTksIDYxOTIzLCA2MTkyNywgNjE5MzEsIAotICAgIDYxOTM1LCA2MTkzOSwgNjE5NDMsIDYxOTQ3LCA2MTk1MSwgNjE5NTUsIDYxOTU5LCA2MTk2MywgNjE5NjcsIDYxOTcxLCAKLSAgICA2MTk3NSwgNjE5NzksIDYxOTgzLCA2MTk4NywgNjE5OTEsIDYxOTk1LCA2MTk5OSwgNjIwMDMsIDYyMDA3LCA2MjAxMSwgCi0gICAgNjIwMTUsIDYyMDE5LCA2MjAyMywgNjIwMjcsIDYyMDMxLCA2MjAzNSwgNjIwMzksIDYyMDQzLCA2MjA0NywgNjIwNTEsIAotICAgIDYyMDU1LCA2MjA1OSwgNjIwNjMsIDYyMDY3LCA2MjA3MSwgNjIwNzUsIDYyMDc5LCA2MjA4MywgNjIwODcsIDYyMDkxLCAKLSAgICA2MjA5NSwgNjIwOTksIDYyMTAzLCA2MjEwNiwgNjIxMTAsIDYyMTE0LCA2MjExOCwgNjIxMjIsIDYyMTI2LCA2MjEzMCwgCi0gICAgNjIxMzQsIDYyMTM4LCA2MjE0MiwgNjIxNDYsIDYyMTUwLCA2MjE1NCwgNjIxNTgsIDYyMTYyLCA2MjE2NiwgNjIxNzAsIAotICAgIDYyMTc0LCA2MjE3OCwgNjIxODIsIDYyMTg2LCA2MjE5MCwgNjIxOTQsIDYyMTk4LCA2MjIwMiwgNjIyMDYsIDYyMjEwLCAKLSAgICA2MjIxNCwgNjIyMTgsIDYyMjIyLCA2MjIyNiwgNjIyMzAsIDYyMjM0LCA2MjIzOCwgNjIyNDIsIDYyMjQ2LCA2MjI1MCwgCi0gICAgNjIyNTQsIDYyMjU4LCA2MjI2MiwgNjIyNjYsIDYyMjcwLCA2MjI3NCwgNjIyNzgsIDYyMjgyLCA2MjI4NiwgNjIyOTAsIAotICAgIDYyMjk0LCA2MjI5OCwgNjIzMDIsIDYyMzA2LCA2MjMxMCwgNjIzMTQsIDYyMzE4LCA2MjMyMiwgNjIzMjYsIDYyMzMwLCAKLSAgICA2MjMzNCwgNjIzMzgsIDYyMzQyLCA2MjM0NiwgNjIzNTAsIDYyMzU0LCA2MjM1OCwgNjIzNjIsIDYyMzY2LCA2MjM3MCwgCi0gICAgNjIzNzQsIDYyMzc4LCA2MjM4MiwgNjIzODYsIDYyMzkwLCA2MjM5NCwgNjIzOTgsIDYyNDAyLCA2MjQwNiwgNjI0MTAsIAotICAgIDYyNDE0LCA2MjQxOCwgNjI0MjIsIDYyNDI2LCA2MjQzMCwgNjI0MzQsIDYyNDM4LCA2MjQ0MiwgNjI0NDYsIDYyNDUwLCAKLSAgICA2MjQ1NCwgNjI0NTgsIDYyNDYyLCA2MjQ2NiwgNjI0NzAsIDYyNDc0LCA2MjQ3OCwgNjI0ODIsIDYyNDg2LCA2MjQ5MCwgCi0gICAgNjI0OTQsIDYyNDk4LCA2MjUwMiwgNjI1MDYsIDYyNTEwLCA2MjUxNCwgNjI1MTgsIDYyNTIyLCA2MjUyNiwgNjI1MzAsIAotICAgIDYyNTM0LCA2MjUzOCwgNjI1NDIsIDYyNTQ2LCA2MjU1MCwgNjI1NTQsIDYyNTU4LCA2MjU2MiwgNjI1NjYsIDYyNTcwLCAKLSAgICA2MjU3NCwgNjI1NzgsIDYyNTgyLCA2MjU4NiwgNjI1OTAsIDYyNTk0LCA2MjU5OCwgNjI2MDIsIDYyNjA2LCA2MjYxMCwgCi0gICAgNjI2MTQsIDYyNjE4LCA2MjYyMiwgNjI2MjYsIDYyNjMwLCA2MjYzNCwgNjI2MzgsIDYyNjQyLCA2MjY0NiwgNjI2NTAsIAotICAgIDYyNjU0LCA2MjY1OCwgNjI2NjIsIDYyNjY2LCA2MjY3MCwgNjI2NzQsIDYyNjc4LCA2MjY4MiwgNjI2ODYsIDYyNjkwLCAKLSAgICA2MjY5NCwgNjI2OTgsIDYyNzAyLCA2MjcwNiwgNjI3MTAsIDYyNzE0LCA2MjcxOCwgNjI3MjIsIDYyNzI2LCA2MjczMCwgCi0gICAgNjI3MzQsIDYyNzM4LCA2Mjc0MiwgNjI3NDYsIDYyNzUwLCA2Mjc1NCwgNjI3NTgsIDYyNzYyLCA2Mjc2NiwgNjI3NzAsIAotICAgIDYyNzc0LCA2Mjc3OCwgNjI3ODIsIDYyNzg2LCA2Mjc5MCwgNjI3OTQsIDYyNzk4LCA2MjgwMiwgNjI4MDYsIDYyODEwLCAKLSAgICA2MjgxNCwgNjI4MTgsIDYyODIyLCA2MjgyNiwgNjI4MzAsIDYyODM0LCA2MjgzOCwgNjI4NDIsIDYyODQ2LCA2Mjg1MCwgCi0gICAgNjI4NTQsIDYyODU4LCA2Mjg2MiwgNjI4NjUsIDYyODY5LCA2Mjg3MywgNjI4NzcsIDYyODgxLCA2Mjg4NSwgNjI4ODksIAotICAgIDYyODkzLCA2Mjg5NywgNjI5MDEsIDYyOTA1LCA2MjkwOSwgNjI5MTMsIDYyOTE3LCA2MjkyMSwgNjI5MjUsIDYyOTI5LCAKLSAgICA2MjkzMywgNjI5MzcsIDYyOTQxLCA2Mjk0NSwgNjI5NDksIDYyOTUzLCA2Mjk1NywgNjI5NjEsIDYyOTY1LCA2Mjk2OSwgCi0gICAgNjI5NzMsIDYyOTc3LCA2Mjk4MSwgNjI5ODUsIDYyOTg5LCA2Mjk5MywgNjI5OTcsIDYzMDAxLCA2MzAwNSwgNjMwMDksIAotICAgIDYzMDEzLCA2MzAxNywgNjMwMjEsIDYzMDI1LCA2MzAyOSwgNjMwMzMsIDYzMDM3LCA2MzA0MSwgNjMwNDUsIDYzMDQ5LCAKLSAgICA2MzA1MywgNjMwNTcsIDYzMDYxLCA2MzA2NSwgNjMwNjksIDYzMDczLCA2MzA3NywgNjMwODEsIDYzMDg1LCA2MzA4OSwgCi0gICAgNjMwOTMsIDYzMDk3LCA2MzEwMSwgNjMxMDUsIDYzMTA5LCA2MzExMywgNjMxMTcsIDYzMTIxLCA2MzEyNSwgNjMxMjksIAotICAgIDYzMTMzLCA2MzEzNywgNjMxNDEsIDYzMTQ1LCA2MzE0OSwgNjMxNTMsIDYzMTU3LCA2MzE2MSwgNjMxNjUsIDYzMTY5LCAKLSAgICA2MzE3MywgNjMxNzcsIDYzMTgxLCA2MzE4NSwgNjMxODksIDYzMTkzLCA2MzE5NywgNjMyMDEsIDYzMjA1LCA2MzIwOSwgCi0gICAgNjMyMTMsIDYzMjE3LCA2MzIyMSwgNjMyMjUsIDYzMjI5LCA2MzIzMywgNjMyMzcsIDYzMjQxLCA2MzI0NSwgNjMyNDksIAotICAgIDYzMjUzLCA2MzI1NywgNjMyNjEsIDYzMjY1LCA2MzI2OSwgNjMyNzMsIDYzMjc3LCA2MzI4MSwgNjMyODUsIDYzMjg5LCAKLSAgICA2MzI5MywgNjMyOTcsIDYzMzAxLCA2MzMwNSwgNjMzMDksIDYzMzEzLCA2MzMxNywgNjMzMjEsIDYzMzI1LCA2MzMyOSwgCi0gICAgNjMzMzMsIDYzMzM3LCA2MzM0MSwgNjMzNDUsIDYzMzQ5LCA2MzM1MywgNjMzNTcsIDYzMzYxLCA2MzM2NSwgNjMzNjksIAotICAgIDYzMzczLCA2MzM3NywgNjMzODEsIDYzMzg1LCA2MzM4OSwgNjMzOTMsIDYzMzk3LCA2MzQwMSwgNjM0MDUsIDYzNDA5LCAKLSAgICA2MzQxMywgNjM0MTcsIDYzNDIxLCA2MzQyNSwgNjM0MjksIDYzNDMzLCA2MzQzNywgNjM0NDEsIDYzNDQ1LCA2MzQ0OSwgCi0gICAgNjM0NTMsIDYzNDU3LCA2MzQ2MSwgNjM0NjUsIDYzNDY5LCA2MzQ3MywgNjM0NzcsIDYzNDgxLCA2MzQ4NSwgNjM0ODksIAotICAgIDYzNDkzLCA2MzQ5NywgNjM1MDEsIDYzNTA1LCA2MzUwOSwgNjM1MTMsIDYzNTE3LCA2MzUyMSwgNjM1MjUsIDYzNTI5LCAKLSAgICA2MzUzMywgNjM1MzcsIDYzNTQxLCA2MzU0NSwgNjM1NDksIDYzNTUzLCA2MzU1NywgNjM1NjEsIDYzNTY1LCA2MzU2OSwgCi0gICAgNjM1NzMsIDYzNTc3LCA2MzU4MSwgNjM1ODUsIDYzNTg5LCA2MzU5MywgNjM1OTcsIDYzNjAxLCA2MzYwNSwgNjM2MDksIAotICAgIDYzNjEzLCA2MzYxNywgNjM2MjEsIDYzNjI1LCA2MzYyOSwgNjM2MzMsIDYzNjM3LCA2MzY0MSwgNjM2NDUsIDAsIDAsIDAsIAotICAgIDYzNjQ5LCA2MzY1MywgNjM2NTcsIDYzNjYxLCA2MzY2NSwgNjM2NjksIDYzNjczLCA2MzY3NywgNjM2ODEsIDYzNjg1LCAKLSAgICA2MzY4OSwgNjM2OTMsIDYzNjk3LCA2MzcwMSwgNjM3MDUsIDYzNzA5LCA2MzcxMywgNjM3MTcsIDYzNzIxLCA2MzcyNSwgCi0gICAgNjM3MjksIDYzNzMzLCA2MzczNywgNjM3NDEsIDYzNzQ1LCA2Mzc0OSwgNjM3NTMsIDYzNzU3LCA2Mzc2MSwgNjM3NjUsIAotICAgIDYzNzY5LCA2Mzc3MywgNjM3NzcsIDYzNzgxLCA2Mzc4NSwgNjM3ODksIDYzNzkzLCA2Mzc5NywgNjM4MDEsIDYzODA1LCAKLSAgICA2MzgwOSwgNjM4MTMsIDYzODE3LCA2MzgyMSwgNjM4MjUsIDYzODI5LCA2MzgzMywgNjM4MzcsIDYzODQxLCA2Mzg0NSwgCi0gICAgNjM4NDksIDYzODUzLCA2Mzg1NywgNjM4NjEsIDYzODY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5MDcxNSwgOTA3MTksIDkwNzIzLCA5MDcyNywgOTA3MzEsIDkwNzM1LCA5MDczOSwgOTA3NDMsIDkwNzQ3LCA5MDc1MSwgCisgICAgOTA3NTYsIDkwNzYxLCA5MDc2NiwgOTA3NzEsIDkwNzc2LCA5MDc4MSwgOTA3ODYsIDkwNzkxLCA5MDc5NiwgOTA4MDIsIAorICAgIDkwODA4LCA5MDgxNCwgOTA4MjEsIDkwODI4LCA5MDgzNSwgOTA4NDIsIDkwODQ5LCA5MDg1NiwgOTA4NjMsIDkwODcwLCAKKyAgICA5MDg3NywgMCwgOTA4ODQsIDkwODg4LCA5MDg5MiwgOTA4OTYsIDkwODk5LCA5MDkwMywgOTA5MDYsIDkwOTEwLCA5MDkxMywgCisgICAgOTA5MTcsIDkwOTIwLCA5MDkyNCwgOTA5MjcsIDkwOTMxLCA5MDkzNCwgOTA5MzgsIDkwOTQyLCA5MDk0NiwgOTA5NTAsIAorICAgIDkwOTU0LCA5MDk1OCwgOTA5NjIsIDkwOTY2LCA5MDk3MCwgOTA5NzQsIDkwOTc4LCA5MDk4MiwgOTA5ODYsIDkwOTkwLCAKKyAgICA5MDk5NCwgOTA5OTgsIDkxMDAyLCA5MTAwNiwgOTEwMTAsIDkxMDE0LCA5MTAxNywgOTEwMjAsIDkxMDI0LCA5MTAyOCwgCisgICAgOTEwMzIsIDkxMDM1LCA5MTAzOCwgOTEwNDEsIDkxMDQ1LCA5MTA0OSwgOTEwNTMsIDkxMDU3LCA5MTA2MSwgOTEwNjQsIAorICAgIDkxMDY5LCA5MTA3MywgOTEwNzgsIDkxMDgyLCA5MTA4NywgOTEwOTEsIDkxMDk2LCA5MTEwMCwgOTExMDUsIDkxMTA5LCAKKyAgICA5MTExMywgOTExMTcsIDkxMTIxLCA5MTEyNCwgOTExMjgsIDkxMTMzLCA5MTEzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjM4NjksIDYzODczLCAKLSAgICA2Mzg3NywgNjM4ODEsIDYzODg1LCA2Mzg4OSwgNjM4OTMsIDYzODk3LCA2MzkwMSwgNjM5MDUsIDYzOTA5LCA2MzkxMywgCi0gICAgNjM5MTcsIDYzOTIxLCA2MzkyNSwgNjM5MjksIDYzOTMzLCA2MzkzNywgNjM5NDEsIDYzOTQ1LCA2Mzk0OSwgNjM5NTMsIAotICAgIDYzOTU3LCA2Mzk2MSwgNjM5NjUsIDYzOTY5LCA2Mzk3MywgNjM5NzcsIDYzOTgxLCA2Mzk4NSwgNjM5ODksIDYzOTkzLCAKLSAgICA2Mzk5NywgNjQwMDEsIDY0MDA1LCA2NDAwOSwgNjQwMTMsIDY0MDE2LCA2NDAyMCwgNjQwMjQsIDY0MDI4LCA2NDAzMiwgCi0gICAgNjQwMzYsIDY0MDQwLCA2NDA0NCwgNjQwNDgsIDY0MDUyLCA2NDA1NiwgNjQwNjAsIDY0MDY0LCA2NDA2OCwgNjQwNzIsIAotICAgIDY0MDc2LCA2NDA4MCwgNjQwODQsIDY0MDg4LCA2NDA5MiwgNjQwOTYsIDY0MTAwLCA2NDEwNCwgNjQxMDgsIDY0MTEyLCAKLSAgICA2NDExNiwgNjQxMjAsIDY0MTI0LCA2NDEyOCwgNjQxMzIsIDY0MTM2LCA2NDE0MCwgNjQxNDQsIDY0MTQ4LCA2NDE1MiwgCi0gICAgNjQxNTYsIDY0MTYwLCA2NDE2MywgNjQxNjcsIDY0MTcxLCA2NDE3NCwgNjQxNzgsIDY0MTgyLCA2NDE4NiwgNjQxODksIAotICAgIDY0MTkzLCA2NDE5NywgNjQyMDEsIDY0MjA1LCA2NDIwOSwgNjQyMTMsIDY0MjE3LCA2NDIyMSwgNjQyMjUsIDY0MjI5LCAKLSAgICA2NDIzMywgNjQyMzcsIDY0MjQxLCA2NDI0NSwgNjQyNDgsIDY0MjUyLCA2NDI1NiwgNjQyNjAsIDY0MjY0LCA2NDI2OCwgCi0gICAgNjQyNzIsIDY0Mjc2LCA2NDI4MCwgNjQyODQsIDY0Mjg3LCA2NDI5MCwgNjQyOTQsIDY0Mjk4LCA2NDMwMiwgNjQzMDUsIAotICAgIDY0MzA5LCA2NDMxMywgNjQzMTcsIDY0MzIxLCA2NDMyNSwgNjQzMjksIDY0MzMzLCA2NDMzNywgNjQzNDEsIDY0MzQ1LCAKLSAgICA2NDM0OSwgNjQzNTMsIDY0MzU3LCA2NDM2MSwgNjQzNjUsIDY0MzY5LCA2NDM3MywgNjQzNzcsIDY0MzgxLCA2NDM4NSwgCi0gICAgNjQzODksIDY0MzkzLCA2NDM5NywgNjQ0MDEsIDY0NDA1LCA2NDQwOSwgNjQ0MTMsIDY0NDE3LCA2NDQyMSwgNjQ0MjUsIAotICAgIDY0NDI5LCA2NDQzMywgNjQ0MzcsIDY0NDQxLCA2NDQ0NSwgNjQ0NDksIDY0NDUzLCA2NDQ1NywgNjQ0NjAsIDY0NDY0LCAKLSAgICA2NDQ2OCwgNjQ0NzIsIDY0NDc2LCA2NDQ4MCwgNjQ0ODQsIDY0NDg4LCA2NDQ5MiwgNjQ0OTYsIDY0NTAwLCA2NDUwNCwgCi0gICAgNjQ1MDgsIDY0NTEyLCA2NDUxNiwgNjQ1MjAsIDY0NTI0LCA2NDUyOCwgNjQ1MzIsIDY0NTM2LCA2NDU0MCwgNjQ1NDQsIAotICAgIDY0NTQ4LCA2NDU1MiwgNjQ1NTYsIDY0NTYwLCA2NDU2NCwgNjQ1NjgsIDY0NTcyLCA2NDU3NiwgNjQ1ODAsIDY0NTg0LCAKLSAgICA2NDU4OCwgNjQ1OTIsIDY0NTk2LCA2NDYwMCwgNjQ2MDQsIDY0NjA3LCA2NDYxMSwgNjQ2MTUsIDY0NjE5LCA2NDYyMywgCi0gICAgNjQ2MjcsIDY0NjMxLCA2NDYzNSwgNjQ2MzksIDY0NjQzLCA2NDY0NywgNjQ2NTEsIDY0NjU1LCA2NDY1OSwgNjQ2NjMsIAotICAgIDY0NjY3LCA2NDY3MSwgNjQ2NzQsIDY0Njc4LCA2NDY4MiwgNjQ2ODYsIDY0NjkwLCA2NDY5NCwgNjQ2OTgsIDY0NzAyLCAKLSAgICA2NDcwNiwgNjQ3MTAsIDY0NzE0LCA2NDcxOCwgNjQ3MjIsIDY0NzI2LCA2NDczMCwgNjQ3MzQsIDY0NzM4LCA2NDc0MiwgCi0gICAgNjQ3NDYsIDY0NzUwLCA2NDc1NCwgNjQ3NTgsIDY0NzYxLCA2NDc2NSwgNjQ3NjksIDY0NzczLCA2NDc3NywgNjQ3ODEsIAotICAgIDY0Nzg1LCA2NDc4OSwgNjQ3OTMsIDY0Nzk3LCA2NDgwMSwgNjQ4MDUsIDY0ODA5LCA2NDgxMywgNjQ4MTcsIDY0ODIxLCAKLSAgICA2NDgyNSwgNjQ4MjksIDY0ODMzLCA2NDgzNywgNjQ4NDEsIDY0ODQ1LCA2NDg0OSwgNjQ4NTMsIDY0ODU3LCA2NDg2MSwgCi0gICAgNjQ4NjUsIDY0ODY5LCA2NDg3MywgNjQ4NzcsIDY0ODgxLCA2NDg4NSwgNjQ4ODksIDY0ODkzLCA2NDg5NywgNjQ5MDEsIAotICAgIDY0OTA1LCA2NDkwOSwgNjQ5MTMsIDY0OTE3LCA2NDkyMSwgNjQ5MjUsIDY0OTI5LCA2NDkzMywgNjQ5MzYsIDY0OTQxLCAKLSAgICA2NDk0NSwgNjQ5NTEsIDY0OTU2LCA2NDk2MiwgNjQ5NjYsIDY0OTcwLCA2NDk3NCwgNjQ5NzgsIDY0OTgyLCA2NDk4NiwgCi0gICAgNjQ5OTAsIDY0OTk0LCA2NDk5OCwgNjUwMDIsIDY1MDA2LCA2NTAxMCwgNjUwMTQsIDY1MDE4LCA2NTAyMSwgNjUwMjQsIAotICAgIDY1MDI3LCA2NTAzMCwgNjUwMzMsIDY1MDM2LCA2NTAzOSwgNjUwNDIsIDY1MDQ1LCA2NTA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjUwNTYsIDY1MDYxLCA2NTA2NiwgNjUwNzEsIAotICAgIDY1MDc2LCA2NTA4MiwgNjUwODgsIDY1MDkzLCA2NTA5OCwgNjUxMDMsIDY1MTA4LCA2NTExNSwgNjUxMjIsIDY1MTI5LCAKLSAgICA2NTEzNiwgNjUxNDMsIDY1MTUwLCA2NTE2MCwgNjUxNzAsIDY1MTc3LCA2NTE4NCwgNjUxOTAsIDY1MTk2LCA2NTIwMiwgCi0gICAgNjUyMDgsIDY1MjE3LCA2NTIyNiwgNjUyMzMsIDY1MjQwLCA2NTI1MSwgNjUyNjIsIDY1MjY3LCAwLCAwLCA2NTI3MiwgCi0gICAgNjUyNzksIDY1Mjg2LCA2NTI5MywgNjUzMDAsIDY1MzA3LCA2NTMxNCwgNjUzMjAsIDY1MzI2LCA2NTMzMiwgNjUzMzgsIAotICAgIDY1MzQ1LCA2NTM1MiwgNjUzNTcsIDY1MzYxLCA2NTM2OCwgNjUzNzUsIDY1MzgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA2NTM4NiwgNjUzOTAsIDY1Mzk0LCA2NTM5NywgNjU0MDAsIDY1NDA1LCA2NTQxMCwgNjU0MTUsIDY1NDIwLCA2NTQyNSwgCi0gICAgNjU0MzAsIDY1NDM1LCA2NTQ0MCwgNjU0NDUsIDY1NDUwLCA2NTQ1OSwgNjU0NjgsIDY1NDczLCA2NTQ3OCwgNjU0ODMsIAotICAgIDY1NDg4LCA2NTQ5MywgNjU0OTgsIDY1NTAzLCA2NTUwOCwgNjU1MTMsIDY1NTE4LCA2NTUyMywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgOTExNDAsIDkxMTQzLCA5MTE0OCwgOTExNTQsIDkxMTYyLCA5MTE2NywgOTExNzMsIDkxMTgxLCAKKyAgICA5MTE4NywgOTExOTMsIDkxMTk3LCA5MTIwMSwgOTEyMDgsIDkxMjE3LCA5MTIyNCwgOTEyMzMsIDkxMjM5LCA5MTI0OCwgCisgICAgOTEyNTUsIDkxMjYyLCA5MTI2OSwgOTEyNzksIDkxMjg1LCA5MTI4OSwgOTEyOTYsIDkxMzA1LCA5MTMxNSwgOTEzMjIsIAorICAgIDkxMzI5LCA5MTMzMywgOTEzMzcsIDkxMzQ0LCA5MTM1NCwgOTEzNTgsIDkxMzY1LCA5MTM3MiwgOTEzNzksIDkxMzg1LCAKKyAgICA5MTM5MiwgOTEzOTksIDkxNDA2LCA5MTQxMywgOTE0MTcsIDkxNDIxLCA5MTQyNSwgOTE0MzIsIDkxNDM2LCA5MTQ0MywgCisgICAgOTE0NTAsIDkxNDY0LCA5MTQ3MywgOTE0NzcsIDkxNDgxLCA5MTQ4NSwgOTE0OTIsIDkxNDk2LCA5MTUwMCwgOTE1MDQsIAorICAgIDkxNTEyLCA5MTUyMCwgOTE1MzksIDkxNTQ5LCA5MTU2OSwgOTE1NzMsIDkxNTc3LCA5MTU4MSwgOTE1ODUsIDkxNTg5LCAKKyAgICA5MTU5MywgOTE1OTcsIDkxNjA0LCA5MTYwOCwgOTE2MTEsIDkxNjE1LCA5MTYxOSwgOTE2MjUsIDkxNjMyLCA5MTY0MSwgCisgICAgOTE2NDUsIDkxNjU0LCA5MTY2MywgOTE2NzEsIDkxNjc1LCA5MTY4MiwgOTE2ODYsIDkxNjkwLCA5MTY5NCwgOTE2OTgsIAorICAgIDkxNzA5LCA5MTcxOCwgOTE3MjcsIDkxNzM2LCA5MTc0NSwgOTE3NTcsIDkxNzY2LCA5MTc3NSwgOTE3ODQsIDkxNzkyLCAKKyAgICA5MTgwMSwgOTE4MTMsIDkxODIyLCA5MTgzMSwgOTE4NDAsIDkxODUyLCA5MTg2MSwgOTE4NzAsIDkxODgyLCA5MTg5MSwgCisgICAgOTE5MDAsIDkxOTEyLCA5MTkyMSwgOTE5MjUsIDkxOTI5LCA5MTkzMywgOTE5MzcsIDkxOTQxLCA5MTk0NSwgOTE5NDksIAorICAgIDkxOTU2LCA5MTk2MCwgOTE5NjQsIDkxOTc1LCA5MTk3OSwgOTE5ODMsIDkxOTkwLCA5MTk5NiwgOTIwMDIsIDkyMDA2LCAKKyAgICA5MjAxMywgOTIwMTcsIDkyMDIxLCA5MjAyNSwgOTIwMjksIDkyMDMzLCA5MjAzNywgOTIwNDMsIDkyMDUxLCA5MjA1NSwgCisgICAgOTIwNTksIDkyMDYyLCA5MjA2OCwgOTIwNzgsIDkyMDgyLCA5MjA5NCwgOTIxMDEsIDkyMTA4LCA5MjExNSwgOTIxMjIsIAorICAgIDkyMTI4LCA5MjEzMiwgOTIxMzYsIDkyMTQwLCA5MjE0NCwgOTIxNTEsIDkyMTYwLCA5MjE2NywgOTIxNzUsIDkyMTgzLCAKKyAgICA5MjE4OSwgOTIxOTMsIDkyMTk3LCA5MjIwMSwgOTIyMDUsIDkyMjExLCA5MjIyMCwgOTIyMzIsIDkyMjM5LCA5MjI0NiwgCisgICAgOTIyNTUsIDkyMjY2LCA5MjI3MiwgOTIyODEsIDkyMjkwLCA5MjI5NywgOTIzMDYsIDkyMzEzLCA5MjMyMCwgOTIzMzAsIAorICAgIDkyMzM3LCA5MjM0NCwgOTIzNTEsIDkyMzU4LCA5MjM2MiwgOTIzNjgsIDkyMzcyLCA5MjM4MywgOTIzOTEsIDkyNDAwLCAKKyAgICA5MjQxMiwgOTI0MTksIDkyNDI2LCA5MjQzNiwgOTI0NDMsIDkyNDUyLCA5MjQ1OSwgOTI0NjgsIDkyNDc1LCA5MjQ4MiwgCisgICAgOTI0OTIsIDkyNDk5LCA5MjUwNiwgOTI1MTYsIDkyNTIzLCA5MjUzNSwgOTI1NDQsIDkyNTUxLCA5MjU1OCwgOTI1NjUsIAorICAgIDkyNTc0LCA5MjU4NCwgOTI1OTcsIDkyNjA0LCA5MjYxNCwgOTI2MjQsIDkyNjMxLCA5MjY0MCwgOTI2NTMsIDkyNjYwLCAKKyAgICA5MjY2NywgOTI2NzQsIDkyNjg0LCA5MjY5NCwgOTI3MDEsIDkyNzExLCA5MjcxOCwgOTI3MjUsIDkyNzM1LCA5Mjc0MSwgCisgICAgOTI3NDgsIDkyNzU1LCA5Mjc2MiwgOTI3NzIsIDkyNzc5LCA5Mjc4NiwgOTI3OTMsIDkyNzk5LCA5MjgwNiwgOTI4MTYsIAorICAgIDkyODIzLCA5MjgyNywgOTI4MzUsIDkyODM5LCA5Mjg1MSwgOTI4NTUsIDkyODY5LCA5Mjg3MywgOTI4NzcsIDkyODgxLCAKKyAgICA5Mjg4NSwgOTI4OTEsIDkyODk4LCA5MjkwNiwgOTI5MTAsIDkyOTE0LCA5MjkxOCwgOTI5MjIsIDkyOTI5LCA5MjkzMywgCisgICAgOTI5MzksIDkyOTQ1LCA5Mjk1MywgOTI5NTcsIDkyOTY0LCA5Mjk3MiwgOTI5NzYsIDkyOTgwLCA5Mjk4NiwgOTI5OTAsIAorICAgIDkyOTk5LCA5MzAwOCwgOTMwMTUsIDkzMDI1LCA5MzAzMSwgOTMwMzUsIDkzMDM5LCA5MzA0NywgOTMwNTQsIDkzMDYxLCAKKyAgICA5MzA2NywgOTMwNzEsIDkzMDc5LCA5MzA4MywgOTMwOTAsIDkzMTAyLCA5MzEwOSwgOTMxMTksIDkzMTI1LCA5MzEyOSwgCisgICAgOTMxMzgsIDkzMTQ1LCA5MzE1NCwgOTMxNTgsIDkzMTYyLCA5MzE2OSwgOTMxNzMsIDkzMTc3LCA5MzE4MSwgOTMxODUsIAorICAgIDkzMTg4LCA5MzE5NCwgOTMyMDAsIDkzMjA0LCA5MzIwOCwgOTMyMTUsIDkzMjIyLCA5MzIyOSwgOTMyMzYsIDkzMjQzLCAKKyAgICA5MzI1MCwgOTMyNTcsIDkzMjY0LCA5MzI3MCwgOTMyNzQsIDkzMjc4LCA5MzI4NSwgOTMyOTIsIDkzMjk5LCA5MzMwNiwgCisgICAgOTMzMTMsIDkzMzE3LCA5MzMyMCwgOTMzMjUsIDkzMzI5LCA5MzMzMywgOTMzNDIsIDkzMzUxLCA5MzM1NSwgOTMzNTksIAorICAgIDkzMzY1LCA5MzM3MSwgOTMzODgsIDkzMzk0LCA5MzM5OCwgOTM0MDcsIDkzNDExLCA5MzQxNSwgOTM0MjIsIDkzNDMwLCAKKyAgICA5MzQzOCwgOTM0NDQsIDkzNDQ4LCA5MzQ1MiwgOTM0NTYsIDkzNDYwLCA5MzQ2MywgOTM0NjgsIDkzNDc0LCA5MzQ4MywgCisgICAgOTM0ODksIDkzNDk1LCA5MzUwMSwgOTM1MDYsIDkzNTEyLCA5MzUxOCwgOTM1MjQsIDkzNTMwLCA5MzUzNiwgOTM1NDQsIAorICAgIDkzNTUwLCA5MzU2MSwgOTM1NjcsIDkzNTczLCA5MzU4MiwgOTM1OTIsIDkzNTk4LCA5MzYwNCwgOTM2MTAsIDkzNjE2LCAKKyAgICA5MzYyMiwgOTM2MjgsIDkzNjM0LCA5MzY0MCwgOTM2NDYsIDkzNjUyLCA5MzY2MSwgOTM2NzAsIDkzNjc5LCA5MzY4NSwgCisgICAgOTM2OTQsIDkzNzAwLCA5MzcwNiwgOTM3MTIsIDkzNzE4LCA5MzcyNCwgOTM3MzAsIDkzNzM2LCA5Mzc0MiwgOTM3NDgsIAorICAgIDkzNzU0LCA5Mzc2MCwgOTM3NjYsIDkzNzcyLCA5Mzc3NywgOTM3ODMsIDkzNzg5LCA5Mzc5NywgOTM4MDMsIDkzODA5LCAKKyAgICA5MzgxMywgOTM4MjEsIDkzODI1LCA5MzgyOSwgOTM4MzMsIDkzODM3LCA5Mzg0MSwgOTM4NDgsIDkzODUyLCA5Mzg2MSwgCisgICAgOTM4NjUsIDkzODcyLCA5Mzg4MCwgOTM4ODQsIDkzODg4LCA5Mzg5MiwgOTM5MDUsIDkzOTIxLCA5MzkyNSwgOTM5MjksIAorICAgIDkzOTM2LCA5Mzk0MiwgOTM5NDksIDkzOTUzLCA5Mzk1NywgOTM5NjEsIDkzOTY1LCA5Mzk2OSwgOTM5NzYsIDkzOTgwLCAKKyAgICA5Mzk5OCwgOTQwMDIsIDk0MDA2LCA5NDAxMywgOTQwMTcsIDk0MDIxLCA5NDAyNywgOTQwMzEsIDk0MDM1LCA5NDA0MywgCisgICAgOTQwNDcsIDk0MDUxLCA5NDA1NSwgOTQwNTksIDk0MDY1LCA5NDA3NiwgOTQwODUsIDk0MDk0LCA5NDEwMSwgOTQxMDgsIAorICAgIDk0MTE5LCA5NDEyNiwgOTQxMzMsIDk0MTQwLCA5NDE0NywgOTQxNTQsIDk0MTYxLCA5NDE2OCwgOTQxNzgsIDk0MTg0LCAKKyAgICA5NDE5MSwgOTQyMDEsIDk0MjEwLCA5NDIxNywgOTQyMjYsIDk0MjM2LCA5NDI0MywgOTQyNTAsIDk0MjU3LCA5NDI2NCwgCisgICAgOTQyNzYsIDk0MjgzLCA5NDI5MCwgOTQyOTcsIDk0MzA0LCA5NDMxMSwgOTQzMjEsIDk0MzI4LCA5NDMzNSwgOTQzNDUsIAorICAgIDk0MzU4LCA5NDM3MCwgOTQzNzcsIDk0Mzg3LCA5NDM5NCwgOTQ0MDEsIDk0NDA4LCA5NDQyMiwgOTQ0MjgsIDk0NDM2LCAKKyAgICA5NDQ0NiwgOTQ0NTYsIDk0NDYzLCA5NDQ3MCwgOTQ0NzYsIDk0NDgwLCA5NDQ4NywgOTQ0OTcsIDk0NTAzLCA5NDUxNiwgCisgICAgOTQ1MjAsIDk0NTI0LCA5NDUzMSwgOTQ1MzUsIDk0NTQyLCA5NDU1MiwgOTQ1NTYsIDk0NTYwLCA5NDU2NCwgOTQ1NjgsIAorICAgIDk0NTcyLCA5NDU3OSwgOTQ1ODMsIDk0NTkwLCA5NDU5NywgOTQ2MDQsIDk0NjEzLCA5NDYyMiwgOTQ2MzIsIDk0NjM5LCAKKyAgICA5NDY0NiwgOTQ2NTMsIDk0NjYzLCA5NDY3MCwgOTQ2ODAsIDk0Njg3LCA5NDY5NywgOTQ3MDQsIDk0NzExLCA5NDcyMSwgCisgICAgOTQ3MzEsIDk0NzM4LCA5NDc0NCwgOTQ3NTIsIDk0NzYwLCA5NDc2NiwgOTQ3NzIsIDk0Nzc2LCA5NDc4MCwgOTQ3ODcsIAorICAgIDk0Nzk1LCA5NDgwMSwgOTQ4MDUsIDk0ODA5LCA5NDgxMywgOTQ4MjAsIDk0ODMyLCA5NDgzNSwgOTQ4NDIsIDk0ODQ4LCAKKyAgICA5NDg1MiwgOTQ4NTYsIDk0ODYwLCA5NDg2NCwgOTQ4NjgsIDk0ODcyLCA5NDg3NiwgOTQ4ODAsIDk0ODg0LCA5NDg4OCwgCisgICAgOTQ4OTUsIDk0ODk5LCA5NDkwNSwgOTQ5MDksIDk0OTEzLCA5NDkxNywgOTQ5MjMsIDk0OTMwLCA5NDkzNywgOTQ5NDQsIAorICAgIDk0OTU1LCA5NDk2MywgOTQ5NjcsIDk0OTczLCA5NDk4MiwgOTQ5ODksIDk0OTk1LCA5NDk5OCwgOTUwMDIsIDk1MDA2LCAKKyAgICA5NTAxMiwgOTUwMjEsIDk1MDI5LCA5NTAzMywgOTUwMzksIDk1MDQzLCA5NTA0NywgOTUwNTEsIDk1MDU3LCA5NTA2NCwgCisgICAgOTUwNzAsIDk1MDc0LCA5NTA4MCwgOTUwODQsIDk1MDg4LCA5NTA5NywgOTUxMDksIDk1MTEzLCA5NTEyMCwgOTUxMjcsIAorICAgIDk1MTM3LCA5NTE0NCwgOTUxNTYsIDk1MTYzLCA5NTE3MCwgOTUxNzcsIDk1MTg4LCA5NTE5OCwgOTUyMTEsIDk1MjIxLCAKKyAgICA5NTIyOCwgOTUyMzIsIDk1MjM2LCA5NTI0MCwgOTUyNDQsIDk1MjUzLCA5NTI2MiwgOTUyNzEsIDk1Mjg4LCA5NTI5NywgCisgICAgOTUzMDMsIDk1MzEwLCA5NTMxOCwgOTUzMzEsIDk1MzM1LCA5NTM0NCwgOTUzNTMsIDk1MzYyLCA5NTM3MSwgOTUzODIsIAorICAgIDk1MzkxLCA5NTQwMCwgOTU0MDksIDk1NDE4LCA5NTQyNywgOTU0MzYsIDk1NDQ2LCA5NTQ0OSwgOTU0NTMsIDk1NDU3LCAKKyAgICA5NTQ2MSwgOTU0NjUsIDk1NDY5LCA5NTQ3NSwgOTU0ODIsIDk1NDg5LCA5NTQ5NiwgOTU1MDIsIDk1NTA4LCA5NTUxNSwgCisgICAgOTU1MjEsIDk1NTI4LCA5NTUzNiwgOTU1NDAsIDk1NTQ3LCA5NTU1NCwgOTU1NjEsIDk1NTY5LCA5NTU3MiwgOTU1NzYsIAorICAgIDk1NTgwLCA5NTU4NCwgOTU1ODgsIDk1NTk0LCA5NTU5OCwgOTU2MDQsIDk1NjExLCA5NTYxOCwgOTU2MjQsIDk1NjMxLCAKKyAgICA5NTYzOCwgOTU2NDUsIDk1NjUyLCA5NTY1OSwgOTU2NjYsIDk1NjczLCA5NTY4MCwgOTU2ODcsIDk1Njk0LCA5NTcwMSwgCisgICAgOTU3MDgsIDk1NzE1LCA5NTcyMiwgOTU3MjgsIDk1NzMyLCA5NTc0MSwgOTU3NDUsIDk1NzQ5LCA5NTc1MywgOTU3NTcsIAorICAgIDk1NzYzLCA5NTc3MCwgOTU3NzcsIDk1Nzg0LCA5NTc5MSwgOTU3OTgsIDk1ODA0LCA5NTgxMiwgOTU4MTYsIDk1ODIwLCAKKyAgICA5NTgyNCwgOTU4MjgsIDk1ODM0LCA5NTg1MSwgOTU4NjgsIDk1ODcyLCA5NTg3NiwgOTU4ODAsIDk1ODg0LCA5NTg4OCwgCisgICAgOTU4OTIsIDk1ODk4LCA5NTkwNSwgOTU5MDksIDk1OTE1LCA5NTkyMiwgOTU5MjksIDk1OTM2LCA5NTk0MywgOTU5NTAsIAorICAgIDk1OTU5LCA5NTk2NiwgOTU5NzMsIDk1OTgwLCA5NTk4NywgOTU5OTEsIDk1OTk1LCA5NjAwMSwgOTYwMTMsIDk2MDE3LCAKKyAgICA5NjAyMSwgOTYwMzAsIDk2MDM0LCA5NjAzOCwgOTYwNDIsIDk2MDQ4LCA5NjA1MiwgOTYwNTYsIDk2MDY1LCA5NjA2OSwgCisgICAgOTYwNzMsIDk2MDc3LCA5NjA4NCwgOTYwODgsIDk2MDkyLCA5NjA5NiwgOTYxMDAsIDk2MTA0LCA5NjEwOCwgOTYxMTIsIAorICAgIDk2MTE2LCA5NjEyMiwgOTYxMjksIDk2MTM2LCA5NjE0MiwgOTYxNDYsIDk2MTYzLCA5NjE2OSwgOTYxNzMsIDk2MTc5LCAKKyAgICA5NjE4NSwgOTYxOTEsIDk2MTk3LCA5NjIwMywgOTYyMDksIDk2MjEzLCA5NjIxNywgOTYyMjEsIDk2MjI3LCA5NjIzMSwgCisgICAgOTYyMzcsIDk2MjQxLCA5NjI0NSwgOTYyNTIsIDk2MjU5LCA5NjI3NiwgOTYyODAsIDk2Mjg0LCA5NjI4OCwgOTYyOTIsIAorICAgIDk2Mjk2LCA5NjMwOCwgOTYzMTEsIDk2MzE2LCA5NjMyMSwgOTYzMzYsIDk2MzQ2LCA5NjM1NywgOTYzNjEsIDk2MzY1LCAKKyAgICA5NjM2OSwgOTYzNzUsIDk2MzgyLCA5NjM4OSwgOTYzOTksIDk2NDExLCA5NjQxNywgOTY0MjMsIDk2NDMyLCA5NjQzNiwgCisgICAgOTY0NDAsIDk2NDQ3LCA5NjQ1NywgOTY0NjQsIDk2NDcwLCA5NjQ3NCwgOTY0NzgsIDk2NDg1LCA5NjQ5MSwgOTY0OTUsIAorICAgIDk2NTAxLCA5NjUwNSwgOTY1MTMsIDk2NTE5LCA5NjUyMywgOTY1MzEsIDk2NTM5LCA5NjU0NiwgOTY1NTIsIDk2NTU5LCAKKyAgICA5NjU2NiwgOTY1NzYsIDk2NTg2LCA5NjU5MCwgOTY1OTQsIDk2NTk4LCA5NjYwMiwgOTY2MDgsIDk2NjE1LCA5NjYyMSwgCisgICAgOTY2MjgsIDk2NjM1LCA5NjY0MiwgOTY2NTEsIDk2NjU4LCA5NjY2NSwgOTY2NzEsIDk2Njc4LCA5NjY4NSwgOTY2OTIsIAorICAgIDk2Njk5LCA5NjcwNiwgOTY3MTMsIDk2NzE5LCA5NjcyNiwgOTY3MzMsIDk2NzQwLCA5Njc0OSwgOTY3NTYsIDk2NzYzLCAKKyAgICA5Njc2NywgOTY3NzMsIDk2Nzc3LCA5Njc4MywgOTY3OTAsIDk2Nzk3LCA5NjgwNCwgOTY4MDgsIDk2ODEyLCA5NjgxNiwgCisgICAgOTY4MjAsIDk2ODI0LCA5NjgzMSwgOTY4MzUsIDk2ODM5LCA5Njg0NSwgOTY4NTMsIDk2ODU3LCA5Njg2MSwgOTY4NjUsIAorICAgIDk2ODY5LCA5Njg3NiwgOTY4ODAsIDk2ODg0LCA5Njg5MiwgOTY4OTYsIDk2OTAwLCA5NjkwNCwgOTY5MDgsIDk2OTE0LCAKKyAgICA5NjkxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTY5MjIsIDk2OTI4LCAKKyAgICA5NjkzNCwgOTY5NDEsIDk2OTQ4LCA5Njk1NSwgOTY5NjIsIDk2OTY5LCA5Njk3NiwgOTY5ODIsIDk2OTg5LCA5Njk5NiwgCisgICAgOTcwMDMsIDk3MDEwLCA5NzAxNywgOTcwMjQsIDk3MDMwLCA5NzAzNiwgOTcwNDIsIDk3MDQ4LCA5NzA1NCwgOTcwNjAsIAorICAgIDk3MDY2LCA5NzA3MiwgOTcwNzgsIDk3MDg1LCA5NzA5MiwgOTcwOTksIDk3MTA2LCA5NzExMywgOTcxMjAsIDk3MTI2LCAKKyAgICA5NzEzMiwgOTcxMzgsIDk3MTQ1LCA5NzE1MiwgOTcxNTgsIDk3MTY0LCA5NzE3MywgOTcxODAsIDk3MTg3LCA5NzE5NCwgCisgICAgOTcyMDEsIDk3MjA4LCA5NzIxNSwgOTcyMjEsIDk3MjI3LCA5NzIzMywgOTcyNDIsIDk3MjQ5LCA5NzI1NiwgOTcyNjcsIAorICAgIDk3Mjc4LCA5NzI4NCwgOTcyOTAsIDk3Mjk2LCA5NzMwNSwgOTczMTIsIDk3MzE5LCA5NzMyOSwgOTczMzksIDk3MzUwLCAKKyAgICA5NzM2MSwgOTczNzMsIDk3Mzg2LCA5NzM5NywgOTc0MDgsIDk3NDIwLCA5NzQzMywgOTc0NDQsIDk3NDU1LCA5NzQ2NiwgCisgICAgOTc0NzcsIDk3NDg4LCA5NzUwMCwgOTc1MDgsIDk3NTE2LCA5NzUyNSwgOTc1MzQsIDk3NTQzLCA5NzU0OSwgOTc1NTUsIAorICAgIDk3NTYxLCA5NzU2OCwgOTc1NzgsIDk3NTg1LCA5NzU5NSwgOTc2MDAsIDk3NjA1LCA5NzYxMSwgOTc2MTcsIDk3NjI1LCAKKyAgICA5NzYzMywgOTc2NDIsIDk3NjUzLCA5NzY2NCwgOTc2NzIsIDk3NjgwLCA5NzY4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOTc2OTgsIDk3NzA5LCA5NzcxNiwgOTc3MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDk3NzMyLCA5NzczNiwgOTc3NDAsIDk3NzQ0LCA5Nzc0OCwgOTc3NTIsIDk3NzU2LCA5Nzc2MCwgOTc3NjQsIAorICAgIDk3NzY4LCA5Nzc3MiwgOTc3NzYsIDk3NzgwLCA5Nzc4NCwgOTc3ODgsIDk3NzkyLCA5Nzc5NiwgOTc4MDAsIDk3ODA0LCAKKyAgICA5NzgwOCwgOTc4MTIsIDk3ODE2LCA5NzgyMCwgOTc4MjQsIDk3ODI4LCA5NzgzMiwgOTc4MzYsIDk3ODQwLCA5Nzg0NCwgCisgICAgOTc4NDgsIDk3ODUyLCA5Nzg1NiwgOTc4NjAsIDk3ODY0LCA5Nzg2OCwgOTc4NzIsIDk3ODc2LCA5Nzg4MCwgOTc4ODQsIAorICAgIDk3ODg4LCA5Nzg5MiwgOTc4OTYsIDk3OTAwLCA5NzkwNCwgOTc5MDgsIDk3OTEyLCA5NzkxNiwgOTc5MjAsIDk3OTI0LCAKKyAgICA5NzkyOCwgOTc5MzIsIDk3OTM2LCA5Nzk0MCwgOTc5NDQsIDk3OTQ4LCA5Nzk1MiwgOTc5NTYsIDk3OTYwLCA5Nzk2NCwgCisgICAgOTc5NjgsIDk3OTcyLCA5Nzk3NiwgOTc5ODAsIDk3OTg0LCA5Nzk4OCwgOTc5OTIsIDk3OTk2LCA5ODAwMCwgOTgwMDQsIAorICAgIDk4MDA4LCA5ODAxMiwgOTgwMTYsIDk4MDIwLCA5ODAyNCwgOTgwMjgsIDk4MDMyLCA5ODAzNiwgOTgwNDAsIDk4MDQ0LCAKKyAgICA5ODA0OCwgOTgwNTIsIDk4MDU2LCA5ODA2MCwgOTgwNjQsIDk4MDY4LCA5ODA3MiwgOTgwNzYsIDk4MDgwLCA5ODA4NCwgCisgICAgOTgwODgsIDk4MDkyLCA5ODA5NiwgOTgxMDAsIDk4MTA0LCA5ODEwOCwgOTgxMTIsIDk4MTE2LCA5ODEyMCwgOTgxMjQsIAorICAgIDk4MTI4LCA5ODEzMiwgOTgxMzYsIDk4MTQwLCA5ODE0NCwgOTgxNDgsIDk4MTUyLCA5ODE1NiwgOTgxNjAsIDk4MTY0LCAKKyAgICA5ODE2OCwgOTgxNzIsIDk4MTc2LCA5ODE4MCwgOTgxODQsIDk4MTg4LCA5ODE5MiwgOTgxOTYsIDk4MjAwLCA5ODIwNCwgCisgICAgOTgyMDgsIDk4MjEyLCA5ODIxNiwgOTgyMjAsIDk4MjI0LCA5ODIyOCwgOTgyMzIsIDk4MjM2LCA5ODI0MCwgOTgyNDQsIAorICAgIDk4MjQ4LCA5ODI1MiwgOTgyNTYsIDk4MjYwLCA5ODI2NCwgOTgyNjgsIDk4MjcyLCA5ODI3NiwgOTgyODAsIDk4Mjg0LCAKKyAgICA5ODI4OCwgOTgyOTIsIDk4Mjk2LCA5ODMwMCwgOTgzMDQsIDk4MzA4LCA5ODMxMiwgOTgzMTYsIDk4MzIwLCA5ODMyNCwgCisgICAgOTgzMjgsIDk4MzMyLCA5ODMzNiwgOTgzNDAsIDk4MzQ0LCA5ODM0OCwgOTgzNTIsIDk4MzU2LCA5ODM2MCwgOTgzNjQsIAorICAgIDk4MzY4LCA5ODM3MiwgOTgzNzYsIDk4MzgwLCA5ODM4NCwgOTgzODgsIDk4MzkyLCA5ODM5NiwgOTg0MDAsIDk4NDA0LCAKKyAgICA5ODQwOCwgOTg0MTIsIDk4NDE2LCA5ODQyMCwgOTg0MjQsIDk4NDI4LCA5ODQzMiwgOTg0MzYsIDk4NDQwLCA5ODQ0NCwgCisgICAgOTg0NDgsIDk4NDUyLCA5ODQ1NiwgOTg0NjAsIDk4NDY0LCA5ODQ2OCwgOTg0NzIsIDk4NDc2LCA5ODQ4MCwgOTg0ODQsIAorICAgIDk4NDg4LCA5ODQ5MiwgOTg0OTYsIDk4NTAwLCA5ODUwNCwgOTg1MDgsIDk4NTEyLCA5ODUxNiwgOTg1MjAsIDk4NTI0LCAKKyAgICA5ODUyOCwgOTg1MzIsIDk4NTM2LCA5ODU0MCwgOTg1NDQsIDk4NTQ4LCA5ODU1MiwgOTg1NTYsIDk4NTYwLCA5ODU2NCwgCisgICAgOTg1NjgsIDk4NTcyLCA5ODU3NiwgOTg1ODAsIDk4NTg0LCA5ODU4OCwgOTg1OTIsIDk4NTk2LCA5ODYwMCwgOTg2MDQsIAorICAgIDk4NjA4LCA5ODYxMiwgOTg2MTYsIDk4NjIwLCA5ODYyNCwgOTg2MjgsIDk4NjMyLCA5ODYzNiwgOTg2NDAsIDk4NjQ0LCAKKyAgICA5ODY0OCwgOTg2NTIsIDk4NjU2LCA5ODY2MCwgOTg2NjQsIDk4NjY4LCA5ODY3MiwgOTg2NzYsIDk4NjgwLCA5ODY4NCwgCisgICAgOTg2ODgsIDk4NjkyLCA5ODY5NiwgOTg3MDAsIDk4NzA0LCA5ODcwOCwgOTg3MTIsIDk4NzE2LCA5ODcyMCwgOTg3MjQsIAorICAgIDk4NzI4LCA5ODczMiwgOTg3MzYsIDk4NzQwLCA5ODc0NCwgOTg3NDgsIDk4NzUyLCA5ODc1NiwgOTg3NjAsIDk4NzY0LCAKKyAgICA5ODc2OCwgOTg3NzIsIDk4Nzc2LCA5ODc4MCwgOTg3ODQsIDk4Nzg4LCA5ODc5MiwgOTg3OTYsIDk4ODAwLCA5ODgwNCwgCisgICAgOTg4MDgsIDk4ODEyLCA5ODgxNiwgOTg4MjAsIDk4ODI0LCA5ODgyOCwgOTg4MzIsIDk4ODM2LCA5ODg0MCwgOTg4NDQsIAorICAgIDk4ODQ4LCA5ODg1MiwgOTg4NTYsIDk4ODYwLCA5ODg2NCwgOTg4NjgsIDk4ODcyLCA5ODg3NiwgOTg4ODAsIDk4ODg0LCAKKyAgICA5ODg4OCwgOTg4OTIsIDk4ODk2LCA5ODkwMCwgOTg5MDQsIDk4OTA4LCA5ODkxMiwgOTg5MTYsIDk4OTIwLCA5ODkyNCwgCisgICAgOTg5MjgsIDk4OTMyLCA5ODkzNiwgOTg5NDAsIDk4OTQ0LCA5ODk0OCwgOTg5NTIsIDk4OTU2LCA5ODk2MCwgOTg5NjQsIAorICAgIDk4OTY4LCA5ODk3MiwgOTg5NzYsIDk4OTgwLCA5ODk4NCwgOTg5ODgsIDk4OTkyLCA5ODk5NiwgOTkwMDAsIDk5MDA0LCAKKyAgICA5OTAwOCwgOTkwMTIsIDk5MDE2LCA5OTAyMCwgOTkwMjQsIDk5MDI4LCA5OTAzMiwgOTkwMzYsIDk5MDQwLCA5OTA0NCwgCisgICAgOTkwNDgsIDk5MDUyLCA5OTA1NiwgOTkwNjAsIDk5MDY0LCA5OTA2OCwgOTkwNzIsIDk5MDc2LCA5OTA4MCwgOTkwODQsIAorICAgIDk5MDg4LCA5OTA5MiwgOTkwOTYsIDk5MTAwLCA5OTEwNCwgOTkxMDgsIDk5MTEyLCA5OTExNiwgOTkxMjAsIDk5MTI0LCAKKyAgICA5OTEyOCwgOTkxMzIsIDk5MTM2LCA5OTE0MCwgOTkxNDQsIDk5MTQ4LCA5OTE1MiwgOTkxNTYsIDk5MTYwLCA5OTE2NCwgCisgICAgOTkxNjgsIDk5MTcyLCA5OTE3NiwgOTkxODAsIDk5MTg0LCA5OTE4OCwgOTkxOTIsIDk5MTk2LCA5OTIwMCwgOTkyMDQsIAorICAgIDk5MjA4LCA5OTIxMiwgOTkyMTYsIDk5MjIwLCA5OTIyNCwgOTkyMjgsIDk5MjMyLCA5OTIzNiwgOTkyNDAsIDk5MjQ0LCAKKyAgICA5OTI0OCwgOTkyNTIsIDk5MjU2LCA5OTI2MCwgOTkyNjQsIDk5MjY4LCA5OTI3MiwgOTkyNzYsIDk5MjgwLCA5OTI4NCwgCisgICAgOTkyODgsIDk5MjkyLCA5OTI5NiwgOTkzMDAsIDk5MzA0LCA5OTMwOCwgOTkzMTIsIDk5MzE2LCA5OTMyMCwgOTkzMjQsIAorICAgIDk5MzI4LCA5OTMzMiwgOTkzMzYsIDk5MzQwLCA5OTM0NCwgOTkzNDgsIDk5MzUyLCA5OTM1NiwgOTkzNjAsIDk5MzY0LCAKKyAgICA5OTM2OCwgOTkzNzIsIDk5Mzc2LCA5OTM4MCwgOTkzODQsIDk5Mzg4LCA5OTM5MiwgOTkzOTYsIDk5NDAwLCA5OTQwNCwgCisgICAgOTk0MDgsIDk5NDEyLCA5OTQxNiwgOTk0MjAsIDk5NDI0LCA5OTQyOCwgOTk0MzIsIDk5NDM2LCA5OTQ0MCwgOTk0NDQsIAorICAgIDk5NDQ4LCA5OTQ1MiwgOTk0NTYsIDk5NDYwLCA5OTQ2NCwgOTk0NjgsIDk5NDcyLCA5OTQ3NiwgOTk0ODAsIDk5NDg0LCAKKyAgICA5OTQ4OCwgOTk0OTIsIDk5NDk2LCA5OTUwMCwgOTk1MDQsIDk5NTA4LCA5OTUxMiwgOTk1MTYsIDk5NTIwLCA5OTUyNCwgCisgICAgOTk1MjgsIDk5NTMyLCA5OTUzNiwgOTk1NDAsIDk5NTQ0LCA5OTU0OCwgOTk1NTIsIDk5NTU2LCA5OTU2MCwgOTk1NjQsIAorICAgIDk5NTY4LCA5OTU3MiwgOTk1NzYsIDk5NTgwLCA5OTU4NCwgOTk1ODgsIDk5NTkyLCA5OTU5NiwgOTk2MDAsIDk5NjA0LCAKKyAgICA5OTYwOCwgOTk2MTIsIDk5NjE2LCA5OTYyMCwgOTk2MjQsIDk5NjI4LCA5OTYzMiwgOTk2MzYsIDk5NjQwLCA5OTY0NCwgCisgICAgOTk2NDgsIDk5NjUyLCA5OTY1NiwgOTk2NjAsIDk5NjY0LCA5OTY2OCwgOTk2NzIsIDk5Njc2LCA5OTY4MCwgOTk2ODQsIAorICAgIDk5Njg4LCA5OTY5MiwgOTk2OTYsIDk5NzAwLCA5OTcwNCwgOTk3MDgsIDk5NzEyLCA5OTcxNiwgOTk3MjAsIDk5NzI0LCAKKyAgICA5OTcyOCwgOTk3MzIsIDk5NzM2LCA5OTc0MCwgOTk3NDQsIDk5NzQ4LCA5OTc1MiwgOTk3NTYsIDk5NzYwLCA5OTc2NCwgCisgICAgOTk3NjgsIDk5NzcyLCA5OTc3NiwgOTk3ODAsIDk5Nzg0LCA5OTc4OCwgOTk3OTIsIDk5Nzk2LCA5OTgwMCwgOTk4MDQsIAorICAgIDk5ODA4LCA5OTgxMiwgOTk4MTYsIDk5ODIwLCA5OTgyNCwgOTk4MjgsIDk5ODMyLCA5OTgzNiwgOTk4NDAsIDk5ODQ0LCAKKyAgICA5OTg0OCwgOTk4NTIsIDk5ODU2LCA5OTg2MCwgOTk4NjQsIDk5ODY4LCA5OTg3MiwgOTk4NzYsIDk5ODgwLCA5OTg4NCwgCisgICAgOTk4ODgsIDk5ODkyLCA5OTg5NiwgOTk5MDAsIDk5OTA0LCA5OTkwOCwgOTk5MTIsIDk5OTE2LCA5OTkyMCwgOTk5MjQsIAorICAgIDk5OTI4LCA5OTkzMiwgOTk5MzYsIDk5OTQwLCA5OTk0NCwgOTk5NDgsIDk5OTUyLCA5OTk1NiwgOTk5NjAsIDk5OTY0LCAKKyAgICA5OTk2OCwgOTk5NzIsIDk5OTc2LCA5OTk4MCwgOTk5ODQsIDk5OTg4LCA5OTk5MiwgOTk5OTYsIDEwMDAwMCwgMTAwMDA0LCAKKyAgICAxMDAwMDgsIDEwMDAxMiwgMTAwMDE2LCAxMDAwMjAsIDEwMDAyNCwgMTAwMDI4LCAxMDAwMzIsIDEwMDAzNiwgMTAwMDQwLCAKKyAgICAxMDAwNDQsIDEwMDA0OCwgMTAwMDUyLCAxMDAwNTYsIDEwMDA2MCwgMTAwMDY0LCAxMDAwNjgsIDEwMDA3MiwgMTAwMDc2LCAKKyAgICAxMDAwODAsIDEwMDA4NCwgMTAwMDg4LCAxMDAwOTIsIDEwMDA5NiwgMTAwMTAwLCAxMDAxMDQsIDEwMDEwOCwgMTAwMTEyLCAKKyAgICAxMDAxMTYsIDEwMDEyMCwgMTAwMTI0LCAxMDAxMjgsIDEwMDEzMiwgMTAwMTM2LCAxMDAxNDAsIDEwMDE0NCwgMTAwMTQ4LCAKKyAgICAxMDAxNTIsIDEwMDE1NiwgMTAwMTYwLCAxMDAxNjQsIDEwMDE2OCwgMTAwMTcyLCAxMDAxNzYsIDEwMDE4MCwgMTAwMTg0LCAKKyAgICAxMDAxODgsIDEwMDE5MiwgMTAwMTk2LCAxMDAyMDAsIDEwMDIwNCwgMTAwMjA4LCAxMDAyMTIsIDEwMDIxNiwgMTAwMjIwLCAKKyAgICAxMDAyMjQsIDEwMDIyOCwgMTAwMjMyLCAxMDAyMzYsIDEwMDI0MCwgMTAwMjQ0LCAxMDAyNDgsIDEwMDI1MiwgMTAwMjU2LCAKKyAgICAxMDAyNjAsIDEwMDI2NCwgMTAwMjY4LCAxMDAyNzIsIDEwMDI3NiwgMTAwMjgwLCAxMDAyODQsIDEwMDI4OCwgMTAwMjkyLCAKKyAgICAxMDAyOTYsIDEwMDMwMCwgMTAwMzA0LCAxMDAzMDgsIDEwMDMxMiwgMTAwMzE2LCAxMDAzMjAsIDEwMDMyNCwgMTAwMzI4LCAKKyAgICAxMDAzMzIsIDEwMDMzNiwgMTAwMzQwLCAxMDAzNDQsIDEwMDM0OCwgMTAwMzUyLCAxMDAzNTYsIDEwMDM2MCwgMTAwMzY0LCAKKyAgICAxMDAzNjgsIDEwMDM3MiwgMTAwMzc2LCAxMDAzODAsIDEwMDM4NCwgMTAwMzg4LCAxMDAzOTIsIDEwMDM5NiwgMTAwNDAwLCAKKyAgICAxMDA0MDQsIDEwMDQwOCwgMTAwNDEyLCAxMDA0MTYsIDEwMDQyMCwgMTAwNDI0LCAxMDA0MjgsIDEwMDQzMiwgMTAwNDM2LCAKKyAgICAxMDA0NDAsIDEwMDQ0NCwgMTAwNDQ4LCAxMDA0NTIsIDEwMDQ1NiwgMTAwNDYwLCAxMDA0NjQsIDEwMDQ2OCwgMTAwNDcyLCAKKyAgICAxMDA0NzYsIDEwMDQ4MCwgMTAwNDg0LCAxMDA0ODgsIDEwMDQ5MiwgMTAwNDk2LCAxMDA1MDAsIDEwMDUwNCwgMTAwNTA4LCAKKyAgICAxMDA1MTIsIDEwMDUxNiwgMTAwNTIwLCAxMDA1MjQsIDEwMDUyOCwgMTAwNTMyLCAxMDA1MzYsIDEwMDU0MCwgMTAwNTQ0LCAKKyAgICAxMDA1NDgsIDEwMDU1MiwgMTAwNTU2LCAxMDA1NjAsIDEwMDU2NCwgMTAwNTY4LCAxMDA1NzIsIDEwMDU3NiwgMTAwNTgwLCAKKyAgICAxMDA1ODQsIDEwMDU4OCwgMTAwNTkyLCAxMDA1OTYsIDEwMDYwMCwgMTAwNjA0LCAxMDA2MDgsIDEwMDYxMiwgMTAwNjE2LCAKKyAgICAxMDA2MjAsIDEwMDYyNCwgMTAwNjI4LCAxMDA2MzIsIDEwMDYzNiwgMTAwNjQwLCAxMDA2NDQsIDEwMDY0OCwgMTAwNjUyLCAKKyAgICAxMDA2NTYsIDEwMDY2MCwgMTAwNjY0LCAxMDA2NjgsIDEwMDY3MiwgMTAwNjc2LCAxMDA2ODAsIDEwMDY4NCwgMTAwNjg4LCAKKyAgICAxMDA2OTIsIDEwMDY5NiwgMTAwNzAwLCAxMDA3MDQsIDEwMDcwOCwgMTAwNzEyLCAxMDA3MTYsIDEwMDcyMCwgMTAwNzI0LCAKKyAgICAxMDA3MjgsIDEwMDczMiwgMTAwNzM2LCAxMDA3NDAsIDEwMDc0NCwgMTAwNzQ4LCAxMDA3NTIsIDEwMDc1NiwgMTAwNzYwLCAKKyAgICAxMDA3NjQsIDEwMDc2OCwgMTAwNzcyLCAxMDA3NzYsIDEwMDc4MCwgMTAwNzg0LCAxMDA3ODgsIDEwMDc5MiwgMTAwNzk2LCAKKyAgICAxMDA4MDAsIDEwMDgwNCwgMTAwODA4LCAxMDA4MTIsIDEwMDgxNiwgMTAwODIwLCAxMDA4MjQsIDEwMDgyOCwgMTAwODMyLCAKKyAgICAxMDA4MzYsIDEwMDg0MCwgMTAwODQ0LCAxMDA4NDgsIDEwMDg1MiwgMTAwODU2LCAxMDA4NjAsIDEwMDg2NCwgMTAwODY4LCAKKyAgICAxMDA4NzIsIDEwMDg3NiwgMTAwODgwLCAxMDA4ODQsIDEwMDg4OCwgMTAwODkyLCAxMDA4OTYsIDEwMDkwMCwgMTAwOTA0LCAKKyAgICAxMDA5MDgsIDEwMDkxMiwgMTAwOTE2LCAxMDA5MjAsIDEwMDkyNCwgMTAwOTI4LCAxMDA5MzIsIDEwMDkzNiwgMTAwOTQwLCAKKyAgICAxMDA5NDQsIDEwMDk0OCwgMTAwOTUyLCAxMDA5NTYsIDEwMDk2MCwgMTAwOTY0LCAxMDA5NjgsIDEwMDk3MiwgMTAwOTc2LCAKKyAgICAxMDA5ODAsIDEwMDk4NCwgMTAwOTg4LCAxMDA5OTIsIDEwMDk5NiwgMTAxMDAwLCAxMDEwMDQsIDEwMTAwOCwgMTAxMDEyLCAKKyAgICAxMDEwMTYsIDEwMTAyMCwgMTAxMDI0LCAxMDEwMjgsIDEwMTAzMiwgMTAxMDM2LCAxMDEwNDAsIDEwMTA0NCwgMTAxMDQ4LCAKKyAgICAxMDEwNTIsIDEwMTA1NiwgMTAxMDYwLCAxMDEwNjQsIDEwMTA2OCwgMTAxMDcyLCAxMDEwNzYsIDEwMTA4MCwgMTAxMDg0LCAKKyAgICAxMDEwODgsIDEwMTA5MiwgMTAxMDk2LCAxMDExMDAsIDEwMTEwNCwgMTAxMTA4LCAxMDExMTIsIDEwMTExNiwgMTAxMTIwLCAKKyAgICAxMDExMjQsIDEwMTEyOCwgMTAxMTMyLCAxMDExMzYsIDEwMTE0MCwgMTAxMTQ0LCAxMDExNDgsIDEwMTE1MiwgMTAxMTU2LCAKKyAgICAxMDExNjAsIDEwMTE2NCwgMTAxMTY4LCAxMDExNzIsIDEwMTE3NiwgMTAxMTgwLCAxMDExODQsIDEwMTE4OCwgMTAxMTkyLCAKKyAgICAxMDExOTYsIDEwMTIwMCwgMTAxMjA0LCAxMDEyMDgsIDEwMTIxMiwgMTAxMjE2LCAxMDEyMjAsIDEwMTIyNCwgMTAxMjI4LCAKKyAgICAxMDEyMzIsIDEwMTIzNiwgMTAxMjQwLCAxMDEyNDQsIDEwMTI0OCwgMTAxMjUyLCAxMDEyNTYsIDEwMTI2MCwgMTAxMjY0LCAKKyAgICAxMDEyNjgsIDEwMTI3MiwgMTAxMjc2LCAxMDEyODAsIDEwMTI4NCwgMTAxMjg4LCAxMDEyOTIsIDEwMTI5NiwgMTAxMzAwLCAKKyAgICAxMDEzMDQsIDEwMTMwOCwgMTAxMzEyLCAxMDEzMTYsIDEwMTMyMCwgMTAxMzI0LCAxMDEzMjgsIDEwMTMzMiwgMTAxMzM2LCAKKyAgICAxMDEzNDAsIDEwMTM0NCwgMTAxMzQ4LCAxMDEzNTIsIDEwMTM1NiwgMTAxMzYwLCAxMDEzNjQsIDEwMTM2OCwgMTAxMzcyLCAKKyAgICAxMDEzNzYsIDEwMTM4MCwgMTAxMzg0LCAxMDEzODgsIDEwMTM5MiwgMTAxMzk2LCAxMDE0MDAsIDEwMTQwNCwgMTAxNDA4LCAKKyAgICAxMDE0MTIsIDEwMTQxNiwgMTAxNDIwLCAxMDE0MjQsIDEwMTQyOCwgMTAxNDMyLCAxMDE0MzYsIDEwMTQ0MCwgMTAxNDQ0LCAKKyAgICAxMDE0NDgsIDEwMTQ1MiwgMTAxNDU2LCAxMDE0NjAsIDEwMTQ2NCwgMTAxNDY4LCAxMDE0NzIsIDEwMTQ3NiwgMTAxNDgwLCAKKyAgICAxMDE0ODQsIDEwMTQ4OCwgMTAxNDkyLCAxMDE0OTYsIDEwMTUwMCwgMTAxNTA0LCAxMDE1MDgsIDEwMTUxMiwgMTAxNTE2LCAKKyAgICAxMDE1MjAsIDEwMTUyNCwgMTAxNTI4LCAxMDE1MzIsIDEwMTUzNiwgMTAxNTQwLCAxMDE1NDQsIDEwMTU0OCwgMTAxNTUyLCAKKyAgICAxMDE1NTYsIDEwMTU2MCwgMTAxNTY0LCAxMDE1NjgsIDEwMTU3MiwgMTAxNTc2LCAxMDE1ODAsIDEwMTU4NCwgMTAxNTg4LCAKKyAgICAxMDE1OTIsIDEwMTU5NiwgMTAxNjAwLCAxMDE2MDQsIDEwMTYwOCwgMTAxNjEyLCAxMDE2MTYsIDEwMTYyMCwgMTAxNjI0LCAKKyAgICAxMDE2MjgsIDEwMTYzMiwgMTAxNjM2LCAxMDE2NDAsIDEwMTY0NCwgMTAxNjQ4LCAxMDE2NTIsIDEwMTY1NiwgMTAxNjYwLCAKKyAgICAxMDE2NjQsIDEwMTY2OCwgMTAxNjcyLCAxMDE2NzYsIDEwMTY4MCwgMTAxNjg0LCAxMDE2ODgsIDEwMTY5MiwgMTAxNjk2LCAKKyAgICAxMDE3MDAsIDEwMTcwNCwgMTAxNzA4LCAxMDE3MTIsIDEwMTcxNiwgMTAxNzIwLCAxMDE3MjQsIDEwMTcyOCwgMTAxNzMyLCAKKyAgICAxMDE3MzYsIDEwMTc0MCwgMTAxNzQ0LCAxMDE3NDgsIDEwMTc1MiwgMTAxNzU2LCAxMDE3NjAsIDEwMTc2NCwgMTAxNzY4LCAKKyAgICAxMDE3NzIsIDEwMTc3NiwgMTAxNzgwLCAxMDE3ODQsIDEwMTc4OCwgMTAxNzkyLCAxMDE3OTYsIDEwMTgwMCwgMTAxODA0LCAKKyAgICAxMDE4MDgsIDEwMTgxMiwgMTAxODE2LCAxMDE4MjAsIDEwMTgyNCwgMTAxODI4LCAxMDE4MzIsIDEwMTgzNiwgMTAxODQwLCAKKyAgICAxMDE4NDQsIDEwMTg0OCwgMTAxODUyLCAxMDE4NTYsIDEwMTg2MCwgMTAxODY0LCAxMDE4NjgsIDEwMTg3MiwgMTAxODc2LCAKKyAgICAxMDE4ODAsIDEwMTg4NCwgMTAxODg4LCAxMDE4OTIsIDEwMTg5NiwgMTAxOTAwLCAxMDE5MDQsIDEwMTkwOCwgMTAxOTEyLCAKKyAgICAxMDE5MTYsIDEwMTkyMCwgMTAxOTI0LCAxMDE5MjgsIDEwMTkzMiwgMTAxOTM2LCAxMDE5NDAsIDEwMTk0NCwgMTAxOTQ4LCAKKyAgICAxMDE5NTIsIDEwMTk1NiwgMTAxOTYwLCAxMDE5NjQsIDEwMTk2OCwgMTAxOTcyLCAxMDE5NzYsIDEwMTk4MCwgMTAxOTg0LCAKKyAgICAxMDE5ODgsIDEwMTk5MiwgMTAxOTk2LCAxMDIwMDAsIDEwMjAwNCwgMTAyMDA4LCAxMDIwMTIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEwMjAxNiwgMTAyMDIxLCAxMDIwMjYsIDEwMjAzMSwgMTAyMDM4LCAxMDIwNDUsIDEwMjA1MiwgMTAyMDU5LCAKKyAgICAxMDIwNjQsIDEwMjA2OSwgMTAyMDc0LCAxMDIwNzksIDEwMjA4NiwgMTAyMDkxLCAxMDIwOTgsIDEwMjEwNSwgMTAyMTEwLCAKKyAgICAxMDIxMTUsIDEwMjEyMCwgMTAyMTI3LCAxMDIxMzIsIDEwMjEzNywgMTAyMTQ0LCAxMDIxNTEsIDEwMjE1NiwgMTAyMTYxLCAKKyAgICAxMDIxNjYsIDEwMjE3MywgMTAyMTgwLCAxMDIxODcsIDEwMjE5MiwgMTAyMTk3LCAxMDIyMDQsIDEwMjIxMSwgMTAyMjE4LCAKKyAgICAxMDIyMjUsIDEwMjIzMCwgMTAyMjM1LCAxMDIyNDAsIDEwMjI0NywgMTAyMjUyLCAxMDIyNTcsIDEwMjI2MiwgMTAyMjY5LCAKKyAgICAxMDIyNzgsIDEwMjI4NSwgMTAyMjkwLCAxMDIyOTUsIDEwMjMwMCwgMTAyMzA1LCAxMDIzMTAsIDEwMjMxNSwgMTAyMzI0LCAKKyAgICAxMDIzMzEsIDEwMjMzNiwgMTAyMzQzLCAxMDIzNTAsIDEwMjM1NSwgMTAyMzYwLCAxMDIzNjUsIDEwMjM3MiwgMTAyMzc3LCAKKyAgICAxMDIzODQsIDEwMjM5MSwgMTAyMzk2LCAxMDI0MDEsIDEwMjQwNiwgMTAyNDEzLCAxMDI0MjAsIDEwMjQyNSwgMTAyNDMwLCAKKyAgICAxMDI0MzcsIDEwMjQ0NCwgMTAyNDUxLCAxMDI0NTYsIDEwMjQ2MSwgMTAyNDY2LCAxMDI0NzEsIDEwMjQ3OCwgMTAyNDg3LCAKKyAgICAxMDI0OTYsIDEwMjUwMSwgMTAyNTA4LCAxMDI1MTcsIDEwMjUyMiwgMTAyNTI3LCAxMDI1MzIsIDEwMjUzNywgMTAyNTQ0LCAKKyAgICAxMDI1NTEsIDEwMjU1OCwgMTAyNTY1LCAxMDI1NzAsIDEwMjU3NSwgMTAyNTgwLCAxMDI1ODcsIDEwMjU5NCwgMTAyNjAxLCAKKyAgICAxMDI2MDYsIDEwMjYxMSwgMTAyNjE4LCAxMDI2MjMsIDEwMjYzMCwgMTAyNjM1LCAxMDI2NDIsIDEwMjY0NywgMTAyNjU0LCAKKyAgICAxMDI2NjEsIDEwMjY2NiwgMTAyNjcxLCAxMDI2NzYsIDEwMjY4MSwgMTAyNjg2LCAxMDI2OTEsIDEwMjY5NiwgMTAyNzAxLCAKKyAgICAxMDI3MDYsIDEwMjcxMywgMTAyNzIwLCAxMDI3MjcsIDEwMjczNCwgMTAyNzQxLCAxMDI3NTAsIDEwMjc1NSwgMTAyNzYwLCAKKyAgICAxMDI3NjcsIDEwMjc3NCwgMTAyNzc5LCAxMDI3ODYsIDEwMjc5MywgMTAyODAwLCAxMDI4MDcsIDEwMjgxNCwgMTAyODIxLCAKKyAgICAxMDI4MjYsIDEwMjgzMSwgMTAyODM2LCAxMDI4NDEsIDEwMjg0NiwgMTAyODU1LCAxMDI4NjQsIDEwMjg3MywgMTAyODgyLCAKKyAgICAxMDI4OTEsIDEwMjkwMCwgMTAyOTA5LCAxMDI5MTgsIDEwMjkyMywgMTAyOTM0LCAxMDI5NDUsIDEwMjk1NCwgMTAyOTU5LCAKKyAgICAxMDI5NjQsIDEwMjk2OSwgMTAyOTc0LCAxMDI5ODMsIDEwMjk5MCwgMTAyOTk3LCAxMDMwMDQsIDEwMzAxMSwgMTAzMDE4LCAKKyAgICAxMDMwMjUsIDEwMzAzNCwgMTAzMDQzLCAxMDMwNTQsIDEwMzA2MywgMTAzMDc0LCAxMDMwODMsIDEwMzA5MCwgMTAzMDk5LCAKKyAgICAxMDMxMTAsIDEwMzExOSwgMTAzMTI4LCAxMDMxMzcsIDEwMzE0NiwgMTAzMTUzLCAxMDMxNjAsIDEwMzE2NywgMTAzMTc2LCAKKyAgICAxMDMxODUsIDEwMzE5NiwgMTAzMjA1LCAxMDMyMTQsIDEwMzIyNSwgMTAzMjMwLCAxMDMyMzUsIDEwMzI0NiwgMTAzMjU0LCAKKyAgICAxMDMyNjMsIDEwMzI3MiwgMTAzMjgxLCAxMDMyOTIsIDEwMzMwMSwgMTAzMzEwLCAxMDMzMjEsIDEwMzMzMiwgMTAzMzQzLCAKKyAgICAxMDMzNTQsIDEwMzM2NSwgMTAzMzc2LCAxMDMzODMsIDEwMzM5MCwgMTAzMzk3LCAxMDM0MDQsIDEwMzQxNSwgMTAzNDI0LCAKKyAgICAxMDM0MzEsIDEwMzQzOCwgMTAzNDQ1LCAxMDM0NTYsIDEwMzQ2NywgMTAzNDc4LCAxMDM0ODksIDEwMzUwMCwgMTAzNTExLCAKKyAgICAxMDM1MjIsIDEwMzUzMywgMTAzNTQwLCAxMDM1NDcsIDEwMzU1NiwgMTAzNTY1LCAxMDM1NzIsIDEwMzU3OSwgMTAzNTg2LCAKKyAgICAxMDM1OTUsIDEwMzYwNCwgMTAzNjEzLCAxMDM2MjAsIDEwMzYyOSwgMTAzNjM4LCAxMDM2NDcsIDEwMzY1NCwgMTAzNjYxLCAKKyAgICAxMDM2NjYsIDEwMzY3MiwgMTAzNjc5LCAxMDM2ODYsIDEwMzY5MywgMTAzNzAwLCAxMDM3MDcsIDEwMzcxNCwgMTAzNzIzLCAKKyAgICAxMDM3MzIsIDEwMzc0MSwgMTAzNzUwLCAxMDM3NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMzc2NiwgCisgICAgMTAzNzcyLCAxMDM3NzcsIDEwMzc4MiwgMTAzNzg5LCAxMDM3OTUsIDEwMzgwMSwgMTAzODA3LCAxMDM4MTMsIDEwMzgxOSwgCisgICAgMTAzODI1LCAxMDM4MzEsIDEwMzgzNSwgMTAzODM5LCAxMDM4NDUsIDEwMzg1MSwgMTAzODU3LCAxMDM4NjEsIDEwMzg2NiwgCisgICAgMTAzODcxLCAxMDM4NzUsIDEwMzg3OSwgMTAzODgyLCAxMDM4ODgsIDEwMzg5NCwgMTAzOTAwLCAxMDM5MDYsIDEwMzkxMiwgCisgICAgMTAzOTE4LCAxMDM5MjQsIDEwMzkzMCwgMTAzOTM2LCAxMDM5NDYsIDEwMzk1NiwgMTAzOTYyLCAxMDM5NjgsIDEwMzk3OCwgCisgICAgMTAzOTg4LCAxMDM5OTQsIDAsIDAsIDEwNDAwMCwgMTA0MDA4LCAxMDQwMTMsIDEwNDAxOCwgMTA0MDI0LCAxMDQwMzAsIAorICAgIDEwNDAzNiwgMTA0MDQyLCAxMDQwNDgsIDEwNDA1NCwgMTA0MDYxLCAxMDQwNjgsIDEwNDA3NCwgMTA0MDgwLCAxMDQwODYsIAorICAgIDEwNDA5MiwgMTA0MDk4LCAxMDQxMDQsIDEwNDExMCwgMTA0MTE2LCAxMDQxMjEsIDEwNDEyNywgMTA0MTMzLCAxMDQxMzksIAorICAgIDEwNDE0NSwgMTA0MTUxLCAxMDQxNjAsIDEwNDE2NiwgMTA0MTcxLCAxMDQxNzksIDEwNDE4NiwgMTA0MTkzLCAxMDQyMDIsIAorICAgIDEwNDIxMSwgMTA0MjIwLCAxMDQyMjksIDEwNDIzOCwgMTA0MjQ3LCAxMDQyNTYsIDEwNDI2NSwgMTA0Mjc1LCAxMDQyODUsIAorICAgIDEwNDI5MywgMTA0MzAxLCAxMDQzMTAsIDEwNDMxOSwgMTA0MzI1LCAxMDQzMzEsIDEwNDMzNywgMTA0MzQzLCAxMDQzNTEsIAorICAgIDEwNDM1OSwgMTA0MzYzLCAxMDQzNjksIDEwNDM3NCwgMTA0MzgwLCAxMDQzODYsIDEwNDM5MiwgMTA0Mzk4LCAxMDQ0MDQsIAorICAgIDEwNDQxMywgMTA0NDE4LCAxMDQ0MjUsIDEwNDQzMCwgMTA0NDM1LCAxMDQ0NDAsIDEwNDQ0NiwgMTA0NDUyLCAxMDQ0NTgsIAorICAgIDEwNDQ2NSwgMTA0NDcwLCAxMDQ0NzUsIDEwNDQ4MCwgMTA0NDg1LCAxMDQ0OTAsIDEwNDQ5NiwgMTA0NTAyLCAxMDQ1MDgsIAorICAgIDEwNDUxNCwgMTA0NTIwLCAxMDQ1MjYsIDEwNDUzMiwgMTA0NTM4LCAxMDQ1NDMsIDEwNDU0OCwgMTA0NTUzLCAxMDQ1NTgsIAorICAgIDEwNDU2MywgMTA0NTY4LCAxMDQ1NzMsIDEwNDU3OCwgMTA0NTg0LCAxMDQ1OTAsIDEwNDU5NSwgMTA0NjAwLCAxMDQ2MDUsIAorICAgIDEwNDYxMCwgMTA0NjE1LCAxMDQ2MjEsIDEwNDYyOCwgMTA0NjMyLCAxMDQ2MzYsIDEwNDY0MCwgMTA0NjQ0LCAxMDQ2NDgsIAorICAgIDEwNDY1MiwgMTA0NjU2LCAxMDQ2NjAsIDEwNDY2OCwgMTA0Njc4LCAxMDQ2ODIsIDEwNDY4NiwgMTA0NjkyLCAxMDQ2OTgsIAorICAgIDEwNDcwNCwgMTA0NzEwLCAxMDQ3MTYsIDEwNDcyMiwgMTA0NzI4LCAxMDQ3MzQsIDEwNDc0MCwgMTA0NzQ2LCAxMDQ3NTIsIAorICAgIDEwNDc1OCwgMTA0NzY0LCAxMDQ3NzAsIDEwNDc3NCwgMTA0Nzc4LCAxMDQ3ODUsIDEwNDc5MSwgMTA0Nzk3LCAxMDQ4MDMsIAorICAgIDEwNDgwOCwgMTA0ODE1LCAxMDQ4MjAsIDEwNDgyNiwgMTA0ODMyLCAxMDQ4MzgsIDEwNDg0NCwgMTA0ODQ5LCAxMDQ4NTMsIAorICAgIDEwNDg1OSwgMTA0ODYzLCAxMDQ4NjcsIDEwNDg3MSwgMTA0ODc3LCAxMDQ4ODMsIDEwNDg4NywgMTA0ODkzLCAxMDQ4OTksIAorICAgIDEwNDkwNSwgMTA0OTExLCAxMDQ5MTcsIDEwNDkyNSwgMTA0OTMzLCAxMDQ5MzksIDEwNDk0NSwgMTA0OTUxLCAxMDQ5NTcsIAorICAgIDEwNDk2OSwgMTA0OTgxLCAxMDQ5OTUsIDEwNTAwNywgMTA1MDE5LCAxMDUwMzMsIDEwNTA0NywgMTA1MDYxLCAxMDUwNjUsIAorICAgIDEwNTA3MywgMTA1MDgxLCAxMDUwODYsIDEwNTA5MCwgMTA1MDk0LCAxMDUwOTgsIDEwNTEwMiwgMTA1MTA2LCAxMDUxMTAsIAorICAgIDEwNTExNCwgMTA1MTIwLCAxMDUxMjYsIDEwNTEzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA1MTM4LCAKKyAgICAxMDUxNDQsIDEwNTE1MCwgMTA1MTU2LCAxMDUxNjIsIDEwNTE2OCwgMTA1MTc0LCAxMDUxODAsIDEwNTE4NiwgMTA1MTkyLCAKKyAgICAxMDUxOTgsIDEwNTIwNCwgMTA1MjEwLCAxMDUyMTYsIDEwNTIyMiwgMTA1MjI4LCAxMDUyMzQsIDEwNTI0MCwgMTA1MjQ2LCAKKyAgICAxMDUyNTIsIDEwNTI1OCwgMTA1MjY0LCAxMDUyNzAsIDEwNTI3NiwgMTA1MjgyLCAxMDUyODgsIDEwNTI5NCwgMTA1MzAwLCAKKyAgICAxMDUzMDYsIDEwNTMxMiwgMTA1MzE4LCAxMDUzMjQsIDEwNTMzMCwgMTA1MzM2LCAxMDUzNDIsIDEwNTM0OCwgMTA1MzU0LCAKKyAgICAxMDUzNjAsIDEwNTM2NiwgMTA1MzcyLCAxMDUzNzgsIDEwNTM4NCwgMTA1MzkwLCAxMDUzOTYsIDEwNTQwMiwgMTA1NDA4LCAKKyAgICAxMDU0MTQsIDEwNTQyMCwgMTA1NDI2LCAxMDU0MzIsIDEwNTQzOCwgMTA1NDQ0LCAxMDU0NTAsIDEwNTQ1NiwgMTA1NDYyLCAKKyAgICAxMDU0NjgsIDEwNTQ3NCwgMTA1NDgwLCAxMDU0ODYsIDEwNTQ5MiwgMTA1NDk4LCAxMDU1MDQsIDEwNTUxMCwgMTA1NTE2LCAKKyAgICAxMDU1MjIsIDEwNTUyOCwgMTA1NTM0LCAxMDU1MzksIDEwNTU0NCwgMTA1NTQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxMDU1NTMsIDEwNTU1OCwgMTA1NTY1LCAxMDU1NzIsIDEwNTU3OSwgMTA1NTg2LCAxMDU1OTEsIDEwNTU5NSwgCisgICAgMTA1NjAxLCAxMDU2MDUsIDEwNTYwOSwgMTA1NjE1LCAxMDU2MTksIDEwNTYyMywgMTA1NjI3LCAxMDU2MzMsIDEwNTY0MCwgCisgICAgMTA1NjQ0LCAxMDU2NDgsIDEwNTY1MiwgMTA1NjU2LCAxMDU2NjAsIDEwNTY2NCwgMTA1NjcwLCAxMDU2NzQsIDEwNTY3OCwgCisgICAgMTA1NjgyLCAxMDU2ODYsIDEwNTY5MCwgMTA1Njk0LCAxMDU2OTgsIDEwNTcwMiwgMTA1NzA2LCAxMDU3MTAsIDEwNTcxNCwgCisgICAgMTA1NzE4LCAxMDU3MjMsIDEwNTcyNywgMTA1NzMxLCAxMDU3MzUsIDEwNTczOSwgMTA1NzQzLCAxMDU3NDcsIDEwNTc1MSwgCisgICAgMTA1NzU1LCAxMDU3NTksIDEwNTc2NiwgMTA1NzcwLCAxMDU3NzcsIDEwNTc4MSwgMTA1Nzg1LCAxMDU3ODksIDEwNTc5MywgCisgICAgMTA1Nzk3LCAxMDU4MDEsIDEwNTgwNSwgMTA1ODEyLCAxMDU4MTYsIDEwNTgyMCwgMTA1ODI0LCAxMDU4MjgsIDEwNTgzMiwgCisgICAgMTA1ODM4LCAxMDU4NDIsIDEwNTg0OCwgMTA1ODUyLCAxMDU4NTYsIDEwNTg2MCwgMTA1ODY0LCAxMDU4NjgsIDEwNTg3MiwgCisgICAgMTA1ODc2LCAxMDU4ODAsIDEwNTg4NCwgMTA1ODg4LCAxMDU4OTIsIDEwNTg5NiwgMTA1OTAwLCAxMDU5MDQsIDEwNTkwOCwgCisgICAgMTA1OTEyLCAxMDU5MTYsIDEwNTkyMCwgMTA1OTI0LCAxMDU5MzIsIDEwNTkzNiwgMTA1OTQwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMDU5NDQsIDEwNTk1MiwgMTA1OTYwLCAxMDU5NjgsIDEwNTk3NiwgMTA1OTg0LCAxMDU5OTIsIDEwNjAwMCwgCisgICAgMTA2MDA4LCAxMDYwMTYsIDEwNjAyNCwgMTA2MDMyLCAxMDYwNDAsIDEwNjA0OCwgMTA2MDU2LCAxMDYwNjQsIDEwNjA3MiwgCisgICAgMTA2MDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDYwODgsIDEwNjA5MiwgMTA2MDk3LCAKKyAgICAxMDYxMDIsIDEwNjEwNywgMTA2MTExLCAxMDYxMTYsIDEwNjEyMSwgMTA2MTI2LCAxMDYxMzAsIDEwNjEzNSwgMTA2MTQwLCAKKyAgICAxMDYxNDQsIDEwNjE0OCwgMTA2MTUyLCAxMDYxNTYsIDEwNjE2MSwgMTA2MTY2LCAxMDYxNzAsIDEwNjE3NCwgMTA2MTc5LCAKKyAgICAxMDYxODMsIDEwNjE4OCwgMTA2MTkzLCAxMDYxOTgsIDEwNjIwMywgMTA2MjA4LCAxMDYyMTIsIDEwNjIxNywgMTA2MjIyLCAKKyAgICAxMDYyMjcsIDEwNjIzMSwgMTA2MjM2LCAxMDYyNDEsIDEwNjI0NiwgMTA2MjUwLCAxMDYyNTUsIDEwNjI2MCwgMTA2MjY0LCAKKyAgICAxMDYyNjgsIDEwNjI3MiwgMTA2Mjc2LCAxMDYyODEsIDEwNjI4NiwgMTA2MjkwLCAxMDYyOTQsIDEwNjI5OSwgMTA2MzAzLCAKKyAgICAxMDYzMDgsIDEwNjMxMywgMTA2MzE4LCAxMDYzMjMsIDEwNjMyOCwgMTA2MzMyLCAxMDYzMzcsIDEwNjM0MiwgMTA2MzQ3LCAKKyAgICAxMDYzNTEsIDEwNjM1NiwgMTA2MzYxLCAxMDYzNjYsIDEwNjM3MCwgMTA2Mzc1LCAxMDYzODAsIDEwNjM4NCwgMTA2Mzg4LCAKKyAgICAxMDYzOTIsIDEwNjM5NiwgMTA2NDAxLCAxMDY0MDYsIDEwNjQxMCwgMTA2NDE0LCAxMDY0MTksIDEwNjQyMywgMTA2NDI4LCAKKyAgICAxMDY0MzMsIDEwNjQzOCwgMTA2NDQzLCAxMDY0NDgsIDEwNjQ1MiwgMTA2NDU3LCAxMDY0NjIsIDEwNjQ2NywgMTA2NDcxLCAKKyAgICAxMDY0NzYsIDAsIDEwNjQ4MSwgMTA2NDg1LCAxMDY0OTAsIDEwNjQ5NSwgMTA2NDk5LCAxMDY1MDMsIDEwNjUwNywgCisgICAgMTA2NTExLCAxMDY1MTYsIDEwNjUyMSwgMTA2NTI1LCAxMDY1MjksIDEwNjUzNCwgMTA2NTM4LCAxMDY1NDMsIDEwNjU0OCwgCisgICAgMTA2NTUzLCAxMDY1NTgsIDEwNjU2MywgMTA2NTY4LCAxMDY1NzQsIDEwNjU4MCwgMTA2NTg2LCAxMDY1OTEsIDEwNjU5NywgCisgICAgMTA2NjAzLCAxMDY2MDksIDEwNjYxNCwgMTA2NjIwLCAxMDY2MjYsIDEwNjYzMSwgMTA2NjM2LCAxMDY2NDEsIDEwNjY0NiwgCisgICAgMTA2NjUyLCAxMDY2NTgsIDEwNjY2MywgMTA2NjY4LCAxMDY2NzQsIDEwNjY3OSwgMTA2Njg1LCAxMDY2OTEsIDEwNjY5NywgCisgICAgMTA2NzAzLCAxMDY3MDksIDEwNjcxNCwgMTA2NzIwLCAxMDY3MjYsIDEwNjczMiwgMTA2NzM3LCAxMDY3NDMsIDEwNjc0OSwgCisgICAgMTA2NzU1LCAxMDY3NjAsIDEwNjc2NiwgMTA2NzcyLCAxMDY3NzcsIDEwNjc4MiwgMTA2Nzg3LCAxMDY3OTIsIDEwNjc5OCwgCisgICAgMTA2ODA0LCAxMDY4MDksIDEwNjgxNCwgMTA2ODIwLCAxMDY4MjUsIDEwNjgzMSwgMTA2ODM3LCAxMDY4NDMsIDEwNjg0OSwgCisgICAgMTA2ODU1LCAwLCAxMDY4NTksIDEwNjg2NCwgMCwgMCwgMTA2ODY5LCAwLCAwLCAxMDY4NzQsIDEwNjg3OSwgMCwgMCwgCisgICAgMTA2ODg0LCAxMDY4ODgsIDEwNjg5MiwgMTA2ODk3LCAwLCAxMDY5MDIsIDEwNjkwNiwgMTA2OTExLCAxMDY5MTUsIAorICAgIDEwNjkyMCwgMTA2OTI1LCAxMDY5MzAsIDEwNjkzNSwgMTA2OTQwLCAxMDY5NDQsIDEwNjk0OSwgMTA2OTU0LCAwLCAKKyAgICAxMDY5NTksIDAsIDEwNjk2NCwgMTA2OTY5LCAxMDY5NzMsIDEwNjk3OCwgMTA2OTgzLCAxMDY5ODcsIDEwNjk5MSwgMCwgCisgICAgMTA2OTk1LCAxMDcwMDAsIDEwNzAwNSwgMTA3MDA5LCAxMDcwMTMsIDEwNzAxOCwgMTA3MDIyLCAxMDcwMjcsIDEwNzAzMiwgCisgICAgMTA3MDM3LCAxMDcwNDIsIDEwNzA0NywgMTA3MDUyLCAxMDcwNTgsIDEwNzA2NCwgMTA3MDcwLCAxMDcwNzUsIDEwNzA4MSwgCisgICAgMTA3MDg3LCAxMDcwOTMsIDEwNzA5OCwgMTA3MTA0LCAxMDcxMTAsIDEwNzExNSwgMTA3MTIwLCAxMDcxMjUsIDEwNzEzMCwgCisgICAgMTA3MTM2LCAxMDcxNDIsIDEwNzE0NywgMTA3MTUyLCAxMDcxNTgsIDEwNzE2MywgMTA3MTY5LCAxMDcxNzUsIDEwNzE4MSwgCisgICAgMTA3MTg3LCAxMDcxOTMsIDEwNzE5OCwgMTA3MjA0LCAxMDcyMTAsIDEwNzIxNiwgMTA3MjIxLCAxMDcyMjcsIDEwNzIzMywgCisgICAgMTA3MjM5LCAxMDcyNDQsIDEwNzI1MCwgMTA3MjU2LCAxMDcyNjEsIDEwNzI2NiwgMTA3MjcxLCAxMDcyNzYsIDEwNzI4MiwgCisgICAgMTA3Mjg4LCAxMDcyOTMsIDEwNzI5OCwgMTA3MzA0LCAxMDczMDksIDEwNzMxNSwgMTA3MzIxLCAxMDczMjcsIDEwNzMzMywgCisgICAgMTA3MzM5LCAxMDczNDMsIDAsIDEwNzM0OCwgMTA3MzUzLCAxMDczNTcsIDEwNzM2MiwgMCwgMCwgMTA3MzY3LCAxMDczNzIsIAorICAgIDEwNzM3NywgMTA3MzgxLCAxMDczODUsIDEwNzM4OSwgMTA3MzkzLCAxMDczOTgsIDAsIDEwNzQwMywgMTA3NDA3LCAKKyAgICAxMDc0MTIsIDEwNzQxNiwgMTA3NDIxLCAxMDc0MjYsIDEwNzQzMSwgMCwgMTA3NDM2LCAxMDc0NDAsIDEwNzQ0NSwgCisgICAgMTA3NDUwLCAxMDc0NTUsIDEwNzQ1OSwgMTA3NDY0LCAxMDc0NjksIDEwNzQ3NCwgMTA3NDc4LCAxMDc0ODMsIDEwNzQ4OCwgCisgICAgMTA3NDkyLCAxMDc0OTYsIDEwNzUwMCwgMTA3NTA0LCAxMDc1MDksIDEwNzUxNCwgMTA3NTE4LCAxMDc1MjIsIDEwNzUyNywgCisgICAgMTA3NTMxLCAxMDc1MzYsIDEwNzU0MSwgMTA3NTQ2LCAxMDc1NTEsIDEwNzU1NiwgMTA3NTYwLCAwLCAxMDc1NjUsIAorICAgIDEwNzU3MCwgMTA3NTc0LCAxMDc1NzksIDAsIDEwNzU4NCwgMTA3NTg4LCAxMDc1OTMsIDEwNzU5OCwgMTA3NjAyLCAwLCAKKyAgICAxMDc2MDYsIDAsIDAsIDAsIDEwNzYxMCwgMTA3NjE0LCAxMDc2MTksIDEwNzYyMywgMTA3NjI4LCAxMDc2MzMsIDEwNzYzOCwgCisgICAgMCwgMTA3NjQzLCAxMDc2NDcsIDEwNzY1MiwgMTA3NjU3LCAxMDc2NjIsIDEwNzY2NiwgMTA3NjcxLCAxMDc2NzYsIAorICAgIDEwNzY4MSwgMTA3Njg1LCAxMDc2OTAsIDEwNzY5NSwgMTA3Njk5LCAxMDc3MDMsIDEwNzcwNywgMTA3NzExLCAxMDc3MTYsIAorICAgIDEwNzcyMSwgMTA3NzI1LCAxMDc3MjksIDEwNzczNCwgMTA3NzM4LCAxMDc3NDMsIDEwNzc0OCwgMTA3NzUzLCAxMDc3NTgsIAorICAgIDEwNzc2MywgMTA3NzY4LCAxMDc3NzQsIDEwNzc4MCwgMTA3Nzg2LCAxMDc3OTEsIDEwNzc5NywgMTA3ODAzLCAxMDc4MDksIAorICAgIDEwNzgxNCwgMTA3ODIwLCAxMDc4MjYsIDEwNzgzMSwgMTA3ODM2LCAxMDc4NDEsIDEwNzg0NiwgMTA3ODUyLCAxMDc4NTgsIAorICAgIDEwNzg2MywgMTA3ODY4LCAxMDc4NzQsIDEwNzg3OSwgMTA3ODg1LCAxMDc4OTEsIDEwNzg5NywgMTA3OTAzLCAxMDc5MDksIAorICAgIDEwNzkxNCwgMTA3OTIwLCAxMDc5MjYsIDEwNzkzMiwgMTA3OTM3LCAxMDc5NDMsIDEwNzk0OSwgMTA3OTU1LCAxMDc5NjAsIAorICAgIDEwNzk2NiwgMTA3OTcyLCAxMDc5NzcsIDEwNzk4MiwgMTA3OTg3LCAxMDc5OTIsIDEwNzk5OCwgMTA4MDA0LCAxMDgwMDksIAorICAgIDEwODAxNCwgMTA4MDIwLCAxMDgwMjUsIDEwODAzMSwgMTA4MDM3LCAxMDgwNDMsIDEwODA0OSwgMTA4MDU1LCAxMDgwNTksIAorICAgIDEwODA2NCwgMTA4MDY5LCAxMDgwNzQsIDEwODA3OCwgMTA4MDgzLCAxMDgwODgsIDEwODA5MywgMTA4MDk3LCAxMDgxMDIsIAorICAgIDEwODEwNywgMTA4MTExLCAxMDgxMTUsIDEwODExOSwgMTA4MTIzLCAxMDgxMjgsIDEwODEzMywgMTA4MTM3LCAxMDgxNDEsIAorICAgIDEwODE0NiwgMTA4MTUwLCAxMDgxNTUsIDEwODE2MCwgMTA4MTY1LCAxMDgxNzAsIDEwODE3NSwgMTA4MTc5LCAxMDgxODQsIAorICAgIDEwODE4OSwgMTA4MTk0LCAxMDgxOTgsIDEwODIwMywgMTA4MjA4LCAxMDgyMTMsIDEwODIxNywgMTA4MjIyLCAxMDgyMjcsIAorICAgIDEwODIzMSwgMTA4MjM1LCAxMDgyMzksIDEwODI0MywgMTA4MjQ4LCAxMDgyNTMsIDEwODI1NywgMTA4MjYxLCAxMDgyNjYsIAorICAgIDEwODI3MCwgMTA4Mjc1LCAxMDgyODAsIDEwODI4NSwgMTA4MjkwLCAxMDgyOTUsIDEwODMwMCwgMTA4MzA2LCAxMDgzMTIsIAorICAgIDEwODMxOCwgMTA4MzIzLCAxMDgzMjksIDEwODMzNSwgMTA4MzQxLCAxMDgzNDYsIDEwODM1MiwgMTA4MzU4LCAxMDgzNjMsIAorICAgIDEwODM2OCwgMTA4MzczLCAxMDgzNzgsIDEwODM4NCwgMTA4MzkwLCAxMDgzOTUsIDEwODQwMCwgMTA4NDA2LCAxMDg0MTEsIAorICAgIDEwODQxNywgMTA4NDIzLCAxMDg0MjksIDEwODQzNSwgMTA4NDQxLCAxMDg0NDYsIDEwODQ1MiwgMTA4NDU4LCAxMDg0NjQsIAorICAgIDEwODQ2OSwgMTA4NDc1LCAxMDg0ODEsIDEwODQ4NywgMTA4NDkyLCAxMDg0OTgsIDEwODUwNCwgMTA4NTA5LCAxMDg1MTQsIAorICAgIDEwODUxOSwgMTA4NTI0LCAxMDg1MzAsIDEwODUzNiwgMTA4NTQxLCAxMDg1NDYsIDEwODU1MiwgMTA4NTU3LCAxMDg1NjMsIAorICAgIDEwODU2OSwgMTA4NTc1LCAxMDg1ODEsIDEwODU4NywgMTA4NTkyLCAxMDg1OTgsIDEwODYwNCwgMTA4NjEwLCAxMDg2MTUsIAorICAgIDEwODYyMSwgMTA4NjI3LCAxMDg2MzMsIDEwODYzOCwgMTA4NjQ0LCAxMDg2NTAsIDEwODY1NSwgMTA4NjYwLCAxMDg2NjUsIAorICAgIDEwODY3MCwgMTA4Njc2LCAxMDg2ODIsIDEwODY4NywgMTA4NjkyLCAxMDg2OTgsIDEwODcwMywgMTA4NzA5LCAxMDg3MTUsIAorICAgIDEwODcyMSwgMTA4NzI3LCAxMDg3MzMsIDEwODczOCwgMTA4NzQ0LCAxMDg3NTAsIDEwODc1NiwgMTA4NzYxLCAxMDg3NjcsIAorICAgIDEwODc3MywgMTA4Nzc5LCAxMDg3ODQsIDEwODc5MCwgMTA4Nzk2LCAxMDg4MDEsIDEwODgwNiwgMTA4ODExLCAxMDg4MTYsIAorICAgIDEwODgyMiwgMTA4ODI4LCAxMDg4MzMsIDEwODgzOCwgMTA4ODQ0LCAxMDg4NDksIDEwODg1NSwgMTA4ODYxLCAxMDg4NjcsIAorICAgIDEwODg3MywgMTA4ODc5LCAxMDg4ODUsIDEwODg5MiwgMTA4ODk5LCAxMDg5MDYsIDEwODkxMiwgMTA4OTE5LCAxMDg5MjYsIAorICAgIDEwODkzMywgMTA4OTM5LCAxMDg5NDYsIDEwODk1MywgMTA4OTU5LCAxMDg5NjUsIDEwODk3MSwgMTA4OTc3LCAxMDg5ODQsIAorICAgIDEwODk5MSwgMTA4OTk3LCAxMDkwMDMsIDEwOTAxMCwgMTA5MDE2LCAxMDkwMjMsIDEwOTAzMCwgMTA5MDM3LCAxMDkwNDQsIAorICAgIDEwOTA1MSwgMTA5MDU3LCAxMDkwNjQsIDEwOTA3MSwgMTA5MDc4LCAxMDkwODQsIDEwOTA5MSwgMTA5MDk4LCAxMDkxMDUsIAorICAgIDEwOTExMSwgMTA5MTE4LCAxMDkxMjUsIDEwOTEzMSwgMTA5MTM3LCAxMDkxNDMsIDEwOTE0OSwgMTA5MTU2LCAxMDkxNjMsIAorICAgIDEwOTE2OSwgMTA5MTc1LCAxMDkxODIsIDEwOTE4OCwgMTA5MTk1LCAxMDkyMDIsIDEwOTIwOSwgMTA5MjE2LCAxMDkyMjMsIAorICAgIDEwOTIyNywgMTA5MjMyLCAxMDkyMzcsIDEwOTI0MiwgMTA5MjQ2LCAxMDkyNTEsIDEwOTI1NiwgMTA5MjYxLCAxMDkyNjUsIAorICAgIDEwOTI3MCwgMTA5Mjc1LCAxMDkyNzksIDEwOTI4MywgMTA5Mjg3LCAxMDkyOTEsIDEwOTI5NiwgMTA5MzAxLCAxMDkzMDUsIAorICAgIDEwOTMwOSwgMTA5MzE0LCAxMDkzMTgsIDEwOTMyMywgMTA5MzI4LCAxMDkzMzMsIDEwOTMzOCwgMTA5MzQzLCAxMDkzNDcsIAorICAgIDEwOTM1MiwgMTA5MzU3LCAxMDkzNjIsIDEwOTM2NiwgMTA5MzcxLCAxMDkzNzYsIDEwOTM4MSwgMTA5Mzg1LCAxMDkzOTAsIAorICAgIDEwOTM5NSwgMTA5Mzk5LCAxMDk0MDMsIDEwOTQwNywgMTA5NDExLCAxMDk0MTYsIDEwOTQyMSwgMTA5NDI1LCAxMDk0MjksIAorICAgIDEwOTQzNCwgMTA5NDM4LCAxMDk0NDMsIDEwOTQ0OCwgMTA5NDUzLCAxMDk0NTgsIDEwOTQ2MywgMTA5NDY5LCAwLCAwLCAKKyAgICAxMDk0NzYsIDEwOTQ4MSwgMTA5NDg2LCAxMDk0OTEsIDEwOTQ5NiwgMTA5NTAxLCAxMDk1MDYsIDEwOTUxMSwgMTA5NTE2LCAKKyAgICAxMDk1MjEsIDEwOTUyNiwgMTA5NTMxLCAxMDk1MzYsIDEwOTU0MSwgMTA5NTQ2LCAxMDk1NTEsIDEwOTU1NiwgMTA5NTYxLCAKKyAgICAxMDk1NjcsIDEwOTU3MiwgMTA5NTc3LCAxMDk1ODIsIDEwOTU4NywgMTA5NTkyLCAxMDk1OTcsIDEwOTYwMiwgMTA5NjA2LCAKKyAgICAxMDk2MTEsIDEwOTYxNiwgMTA5NjIxLCAxMDk2MjYsIDEwOTYzMSwgMTA5NjM2LCAxMDk2NDEsIDEwOTY0NiwgMTA5NjUxLCAKKyAgICAxMDk2NTYsIDEwOTY2MSwgMTA5NjY2LCAxMDk2NzEsIDEwOTY3NiwgMTA5NjgxLCAxMDk2ODYsIDEwOTY5MSwgMTA5Njk3LCAKKyAgICAxMDk3MDIsIDEwOTcwNywgMTA5NzEyLCAxMDk3MTcsIDEwOTcyMiwgMTA5NzI3LCAxMDk3MzIsIDEwOTczOCwgMTA5NzQzLCAKKyAgICAxMDk3NDgsIDEwOTc1MywgMTA5NzU4LCAxMDk3NjMsIDEwOTc2OCwgMTA5NzczLCAxMDk3NzgsIDEwOTc4MywgMTA5Nzg4LCAKKyAgICAxMDk3OTMsIDEwOTc5OCwgMTA5ODAzLCAxMDk4MDgsIDEwOTgxMywgMTA5ODE4LCAxMDk4MjMsIDEwOTgyOCwgMTA5ODMzLCAKKyAgICAxMDk4MzgsIDEwOTg0MywgMTA5ODQ4LCAxMDk4NTMsIDEwOTg1OSwgMTA5ODY0LCAxMDk4NjksIDEwOTg3NCwgMTA5ODc5LCAKKyAgICAxMDk4ODQsIDEwOTg4OSwgMTA5ODk0LCAxMDk4OTgsIDEwOTkwMywgMTA5OTA4LCAxMDk5MTMsIDEwOTkxOCwgMTA5OTIzLCAKKyAgICAxMDk5MjgsIDEwOTkzMywgMTA5OTM4LCAxMDk5NDMsIDEwOTk0OCwgMTA5OTUzLCAxMDk5NTgsIDEwOTk2MywgMTA5OTY4LCAKKyAgICAxMDk5NzMsIDEwOTk3OCwgMTA5OTgzLCAxMDk5ODksIDEwOTk5NCwgMTA5OTk5LCAxMTAwMDQsIDExMDAwOSwgMTEwMDE0LCAKKyAgICAxMTAwMTksIDExMDAyNCwgMTEwMDMwLCAxMTAwMzUsIDExMDA0MCwgMTEwMDQ1LCAxMTAwNTAsIDExMDA1NSwgMTEwMDYwLCAKKyAgICAxMTAwNjYsIDExMDA3MiwgMTEwMDc4LCAxMTAwODQsIDExMDA5MCwgMTEwMDk2LCAxMTAxMDIsIDExMDEwOCwgMTEwMTE0LCAKKyAgICAxMTAxMjAsIDExMDEyNiwgMTEwMTMyLCAxMTAxMzgsIDExMDE0NCwgMTEwMTUwLCAxMTAxNTYsIDExMDE2MiwgMTEwMTY5LCAKKyAgICAxMTAxNzUsIDExMDE4MSwgMTEwMTg3LCAxMTAxOTMsIDExMDE5OSwgMTEwMjA1LCAxMTAyMTEsIDExMDIxNiwgMTEwMjIyLCAKKyAgICAxMTAyMjgsIDExMDIzNCwgMTEwMjQwLCAxMTAyNDYsIDExMDI1MiwgMTEwMjU4LCAxMTAyNjQsIDExMDI3MCwgMTEwMjc2LCAKKyAgICAxMTAyODIsIDExMDI4OCwgMTEwMjk0LCAxMTAzMDAsIDExMDMwNiwgMTEwMzEyLCAxMTAzMTgsIDExMDMyNSwgMTEwMzMxLCAKKyAgICAxMTAzMzcsIDExMDM0MywgMTEwMzQ5LCAxMTAzNTUsIDExMDM2MSwgMTEwMzY3LCAxMTAzNzQsIDExMDM4MCwgMTEwMzg2LCAKKyAgICAxMTAzOTIsIDExMDM5OCwgMTEwNDA0LCAxMTA0MTAsIDExMDQxNiwgMTEwNDIyLCAxMTA0MjgsIDExMDQzNCwgMTEwNDQwLCAKKyAgICAxMTA0NDYsIDExMDQ1MiwgMTEwNDU4LCAxMTA0NjQsIDExMDQ3MCwgMTEwNDc2LCAxMTA0ODIsIDExMDQ4OCwgMTEwNDk0LCAKKyAgICAxMTA1MDAsIDExMDUwNiwgMTEwNTEyLCAxMTA1MTksIDExMDUyNSwgMTEwNTMxLCAxMTA1MzcsIDExMDU0MywgMTEwNTQ5LCAKKyAgICAxMTA1NTUsIDExMDU2MSwgMTEwNTY2LCAxMTA1NzIsIDExMDU3OCwgMTEwNTg0LCAxMTA1OTAsIDExMDU5NiwgMTEwNjAyLCAKKyAgICAxMTA2MDgsIDExMDYxNCwgMTEwNjIwLCAxMTA2MjYsIDExMDYzMiwgMTEwNjM4LCAxMTA2NDQsIDExMDY1MCwgMTEwNjU2LCAKKyAgICAxMTA2NjIsIDExMDY2OCwgMTEwNjc1LCAxMTA2ODEsIDExMDY4NywgMTEwNjkzLCAxMTA2OTksIDExMDcwNSwgMTEwNzExLCAKKyAgICAxMTA3MTcsIDExMDcyNCwgMTEwNzMwLCAxMTA3MzYsIDExMDc0MiwgMTEwNzQ4LCAxMTA3NTQsIDExMDc2MCwgMTEwNzY3LCAKKyAgICAxMTA3NzQsIDExMDc4MSwgMTEwNzg4LCAxMTA3OTUsIDExMDgwMiwgMTEwODA5LCAxMTA4MTYsIDExMDgyMywgMTEwODMwLCAKKyAgICAxMTA4MzcsIDExMDg0NCwgMTEwODUxLCAxMTA4NTgsIDExMDg2NSwgMTEwODcyLCAxMTA4NzksIDExMDg4NywgMTEwODk0LCAKKyAgICAxMTA5MDEsIDExMDkwOCwgMTEwOTE1LCAxMTA5MjIsIDExMDkyOSwgMTEwOTM2LCAxMTA5NDIsIDExMDk0OSwgMTEwOTU2LCAKKyAgICAxMTA5NjMsIDExMDk3MCwgMTEwOTc3LCAxMTA5ODQsIDExMDk5MSwgMTEwOTk4LCAxMTEwMDUsIDExMTAxMiwgMTExMDE5LCAKKyAgICAxMTEwMjYsIDExMTAzMywgMTExMDQwLCAxMTEwNDcsIDExMTA1NCwgMTExMDYxLCAxMTEwNjksIDExMTA3NiwgMTExMDgzLCAKKyAgICAxMTEwOTAsIDExMTA5NywgMTExMTA0LCAxMTExMTEsIDExMTExOCwgMTExMTI2LCAxMTExMzMsIDExMTE0MCwgMTExMTQ3LCAKKyAgICAxMTExNTQsIDExMTE2MSwgMTExMTY4LCAxMTExNzMsIDAsIDAsIDExMTE3OCwgMTExMTgzLCAxMTExODcsIDExMTE5MSwgCisgICAgMTExMTk1LCAxMTExOTksIDExMTIwMywgMTExMjA3LCAxMTEyMTEsIDExMTIxNSwgMTExMjE5LCAxMTEyMjQsIDExMTIyOCwgCisgICAgMTExMjMyLCAxMTEyMzYsIDExMTI0MCwgMTExMjQ0LCAxMTEyNDgsIDExMTI1MiwgMTExMjU2LCAxMTEyNjAsIDExMTI2NSwgCisgICAgMTExMjY5LCAxMTEyNzMsIDExMTI3NywgMTExMjgxLCAxMTEyODUsIDExMTI4OSwgMTExMjkzLCAxMTEyOTcsIDExMTMwMSwgCisgICAgMTExMzA3LCAxMTEzMTIsIDExMTMxNywgMTExMzIyLCAxMTEzMjcsIDExMTMzMiwgMTExMzM3LCAxMTEzNDIsIDExMTM0NywgCisgICAgMTExMzUyLCAxMTEzNTcsIDExMTM2MSwgMTExMzY1LCAxMTEzNjksIDExMTM3MywgMTExMzc3LCAxMTEzODEsIDExMTM4NSwgCisgICAgMTExMzg5LCAxMTEzOTMsIDExMTQwMCwgMTExNDA3LCAxMTE0MTQsIDExMTQyMSwgMTExNDI4LCAxMTE0MzUsIDExMTQ0MSwgCisgICAgMTExNDQ4LCAxMTE0NTUsIDExMTQ2MiwgMTExNDcwLCAxMTE0NzgsIDExMTQ4NiwgMTExNDk0LCAxMTE1MDIsIDExMTUxMCwgCisgICAgMTExNTE3LCAxMTE1MjQsIDExMTUzMSwgMTExNTM5LCAxMTE1NDcsIDExMTU1NSwgMTExNTYzLCAxMTE1NzEsIDExMTU3OSwgCisgICAgMTExNTg2LCAxMTE1OTMsIDExMTYwMCwgMTExNjA4LCAxMTE2MTYsIDExMTYyNCwgMTExNjMyLCAxMTE2NDAsIDExMTY0OCwgCisgICAgMTExNjUzLCAxMTE2NTgsIDExMTY2MywgMTExNjY4LCAxMTE2NzMsIDExMTY3OCwgMTExNjgzLCAxMTE2ODgsIDExMTY5MywgCisgICAgMCwgMCwgMCwgMCwgMTExNjk4LCAxMTE3MDMsIDExMTcwNywgMTExNzExLCAxMTE3MTUsIDExMTcxOSwgMTExNzIzLCAKKyAgICAxMTE3MjcsIDExMTczMSwgMTExNzM1LCAxMTE3MzksIDExMTc0MywgMTExNzQ3LCAxMTE3NTEsIDExMTc1NSwgMTExNzU5LCAKKyAgICAxMTE3NjMsIDExMTc2NywgMTExNzcxLCAxMTE3NzUsIDExMTc3OSwgMTExNzgzLCAxMTE3ODcsIDExMTc5MSwgMTExNzk1LCAKKyAgICAxMTE3OTksIDExMTgwMywgMTExODA3LCAxMTE4MTEsIDExMTgxNSwgMTExODE5LCAxMTE4MjMsIDExMTgyNywgMTExODMxLCAKKyAgICAxMTE4MzUsIDExMTgzOSwgMTExODQzLCAxMTE4NDcsIDExMTg1MSwgMTExODU1LCAxMTE4NTksIDExMTg2MywgMTExODY3LCAKKyAgICAxMTE4NzEsIDExMTg3NSwgMTExODc5LCAxMTE4ODMsIDExMTg4NywgMTExODkxLCAxMTE4OTUsIDExMTg5OSwgMTExOTA0LCAKKyAgICAxMTE5MDgsIDExMTkxMiwgMTExOTE2LCAxMTE5MjAsIDExMTkyNCwgMTExOTI4LCAxMTE5MzIsIDExMTkzNiwgMTExOTQwLCAKKyAgICAxMTE5NDQsIDExMTk0OCwgMTExOTUyLCAxMTE5NTYsIDExMTk2MCwgMTExOTY0LCAxMTE5NjgsIDExMTk3MiwgMTExOTc2LCAKKyAgICAxMTE5ODAsIDExMTk4NCwgMTExOTg4LCAxMTE5OTIsIDExMTk5NiwgMTEyMDAwLCAxMTIwMDQsIDExMjAwOCwgMTEyMDEyLCAKKyAgICAxMTIwMTYsIDExMjAyMCwgMTEyMDI0LCAxMTIwMjgsIDExMjAzMiwgMTEyMDM2LCAxMTIwNDAsIDExMjA0NCwgMTEyMDQ4LCAKKyAgICAxMTIwNTIsIDExMjA1NiwgMTEyMDYwLCAxMTIwNjQsIDExMjA2OCwgMTEyMDcyLCAxMTIwNzYsIDExMjA4MCwgMTEyMDg0LCAKKyAgICAxMTIwODgsIDExMjA5MiwgMTEyMDk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTIxMDAsIAorICAgIDExMjEwNywgMTEyMTEyLCAxMTIxMTYsIDExMjEyMCwgMTEyMTI0LCAxMTIxMjksIDExMjEzNCwgMTEyMTM5LCAxMTIxNDQsIAorICAgIDExMjE0OSwgMCwgMCwgMCwgMCwgMCwgMTEyMTU0LCAxMTIxNTksIDExMjE2NSwgMTEyMTcxLCAxMTIxNzcsIDExMjE4MiwgCisgICAgMTEyMTg4LCAxMTIxOTQsIDExMjIwMCwgMTEyMjA1LCAxMTIyMTEsIDExMjIxNywgMTEyMjIyLCAxMTIyMjcsIDExMjIzMiwgCisgICAgMTEyMjM3LCAxMTIyNDMsIDExMjI0OSwgMTEyMjU0LCAxMTIyNTksIDExMjI2NSwgMTEyMjcwLCAxMTIyNzYsIDExMjI4MiwgCisgICAgMTEyMjg4LCAxMTIyOTQsIDExMjMwMCwgMTEyMzEwLCAxMTIzMTcsIDExMjMyMywgMTEyMzI2LCAwLCAwLCAxMTIzMjksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjMzNSwgMCwgMTEyMzQwLCAwLCAwLCAxMTIzNDYsIDAsIDAsIDAsIAorICAgIDExMjM1MSwgMCwgMCwgMCwgMTEyMzU3LCAxMTIzNjAsIDExMjM2MywgMTEyMzY2LCAxMTIzNjksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDExMjM3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyMzgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTIzODgsIDAsIDExMjM5NiwgCisgICAgMTEyNDAzLCAwLCAwLCAxMTI0MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjQxOCwgMTEyNDI4LCAKKyAgICAxMTI0MzMsIDExMjQzNywgMCwgMCwgMTEyNDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA2NTUyOCwgNjU1MzcsIDY1NTQ2LCA2NTU1NSwgNjU1NjQsIDY1NTczLCA2NTU4MiwgNjU1OTEsIDY1NjAwLCAKLSAgICA2NTYwOCwgNjU2MTUsIDY1NjIzLCA2NTYzMCwgNjU2MzgsIDY1NjQ4LCA2NTY1NywgNjU2NjcsIDY1Njc2LCA2NTY4NiwgCi0gICAgNjU2OTQsIDY1NzAxLCA2NTcwOSwgNjU3MTYsIDY1NzI0LCA2NTcyOSwgNjU3MzQsIDY1NzM5LCA2NTc0NywgNjU3NTMsIAotICAgIDY1NzU5LCA2NTc2NiwgNjU3NzUsIDY1NzgzLCA2NTc5MSwgNjU3OTksIDY1ODA2LCA2NTgxMywgNjU4MjAsIDY1ODI3LCAKLSAgICA2NTgzMiwgNjU4MzcsIDY1ODQyLCA2NTg0NywgNjU4NTIsIDY1ODU3LCA2NTg2MiwgNjU4NjcsIDY1ODc1LCA2NTg4MywgCi0gICAgNjU4ODksIDY1ODk0LCA2NTg5OSwgNjU5MDQsIDY1OTA5LCA2NTkxNCwgNjU5MTksIDY1OTI0LCA2NTkyOSwgNjU5MzQsIAotICAgIDY1OTQyLCA2NTk1MCwgNjU5NTUsIDY1OTYwLCA2NTk2OSwgNjU5NzgsIDY1OTg1LCA2NTk5MiwgNjYwMDEsIDY2MDEwLCAKLSAgICA2NjAyMSwgNjYwMzIsIDY2MDM4LCA2NjA0NCwgNjYwNTIsIDY2MDYwLCA2NjA2OSwgNjYwNzgsIDY2MDg1LCA2NjA5MiwgCi0gICAgNjYwOTcsIDY2MTAyLCA2NjExMywgNjYxMjQsIDY2MTMyLCA2NjE0MCwgNjYxNTAsIDY2MTYwLCA2NjE3MSwgNjYxODIsIAotICAgIDY2MTkxLCA2NjIwMCwgNjYyMDcsIDY2MjE0LCA2NjIyMSwgNjYyMjgsIDY2MjM3LCA2NjI0NiwgNjYyNTEsIDY2MjU2LCAKLSAgICA2NjI2MywgNjYyNzAsIDY2Mjc3LCA2NjI4NCwgNjYyOTUsIDY2MzA2LCA2NjMxMSwgNjYzMTYsIDY2MzIxLCA2NjMyNiwgCi0gICAgNjYzMzEsIDY2MzM2LCA2NjM0MSwgNjYzNDYsIDY2MzUwLCA2NjM1NSwgNjYzNjAsIDY2MzY1LCA2NjM3MCwgNjYzNzUsIAotICAgIDY2MzgxLCA2NjM4NiwgNjYzOTEsIDY2Mzk4LCA2NjQwNSwgNjY0MTIsIDY2NDE5LCA2NjQyNSwgNjY0MzIsIDY2NDM5LCAKLSAgICA2NjQ0NCwgNjY0NDksIDY2NDU1LCA2NjQ2MSwgNjY0NjcsIDY2NDczLCA2NjQ4MCwgNjY0ODcsIDY2NDk0LCA2NjQ5OCwgCi0gICAgNjY1MDUsIDY2NTEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxMTI0NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjQ0OSwgMTEyNDU1LCAKKyAgICAxMTI0NjEsIDExMjQ2NywgMTEyNDcxLCAxMTI0NzcsIDExMjQ4MywgMTEyNDg5LCAxMTI0OTUsIDExMjUwMSwgMTEyNTA3LCAKKyAgICAxMTI1MTMsIDExMjUxOSwgMTEyNTI1LCAxMTI1MzEsIDExMjUzNywgMTEyNTQzLCAxMTI1NDksIDExMjU1NSwgMTEyNTYxLCAKKyAgICAxMTI1NjcsIDExMjU3MywgMTEyNTc5LCAxMTI1ODUsIDExMjU5MSwgMTEyNTk3LCAxMTI2MDMsIDExMjYwOSwgMTEyNjE1LCAKKyAgICAxMTI2MjEsIDExMjYyNywgMTEyNjMzLCAxMTI2MzksIDExMjY0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTEyNjUxLCAxMTI2NjIsIDExMjY3MywgMTEyNjg0LCAxMTI2OTUsIDExMjcwNiwgMTEyNzE3LCAxMTI3MjgsIAorICAgIDExMjczOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyNzUwLCAxMTI3NTQsIDExMjc1OCwgMTEyNzYyLCAxMTI3NjYsIAorICAgIDExMjc3MCwgMTEyNzc0LCAxMTI3NzgsIDExMjc4MiwgMTEyNzg2LCAxMTI3OTAsIDExMjc5NCwgMTEyNzk4LCAxMTI4MDIsIAorICAgIDExMjgwNiwgMTEyODEwLCAxMTI4MTQsIDExMjgxOCwgMTEyODIyLCAxMTI4MjYsIDExMjgzMCwgMTEyODM0LCAxMTI4MzgsIAorICAgIDExMjg0MiwgMTEyODQ2LCAxMTI4NTAsIDExMjg1NCwgMTEyODU4LCAxMTI4NjIsIDExMjg2NiwgMTEyODcwLCAxMTI4NzQsIAorICAgIDExMjg3OCwgMTEyODgyLCAxMTI4ODYsIDExMjg5MCwgMTEyODk0LCAxMTI4OTgsIDExMjkwMiwgMTEyOTA2LCAxMTI5MTAsIAorICAgIDExMjkxNCwgMTEyOTE4LCAxMTI5MjIsIDExMjkyNiwgMTEyOTMwLCAxMTI5MzQsIDExMjkzOCwgMTEyOTQyLCAxMTI5NDYsIAorICAgIDExMjk1MCwgMTEyOTU0LCAxMTI5NTgsIDExMjk2MiwgMTEyOTY2LCAxMTI5NzAsIDExMjk3NCwgMTEyOTc4LCAxMTI5ODIsIAorICAgIDExMjk4NiwgMTEyOTkwLCAxMTI5OTQsIDExMjk5OCwgMTEzMDAyLCAxMTMwMDYsIDExMzAxMCwgMTEzMDE0LCAxMTMwMTgsIAorICAgIDExMzAyMiwgMTEzMDI2LCAxMTMwMzAsIDExMzAzNCwgMTEzMDM4LCAxMTMwNDIsIDExMzA0NiwgMTEzMDUwLCAxMTMwNTQsIAorICAgIDExMzA1OCwgMTEzMDYyLCAxMTMwNjYsIDExMzA3MCwgMTEzMDc0LCAxMTMwNzgsIDExMzA4MiwgMTEzMDg2LCAxMTMwOTAsIAorICAgIDExMzA5NCwgMTEzMDk4LCAxMTMxMDIsIDExMzEwNiwgMTEzMTEwLCAxMTMxMTQsIDExMzExOCwgMTEzMTIyLCAxMTMxMjYsIAorICAgIDExMzEzMCwgMTEzMTM0LCAxMTMxMzgsIDExMzE0MiwgMTEzMTQ2LCAxMTMxNTAsIDExMzE1NCwgMTEzMTU4LCAxMTMxNjIsIAorICAgIDExMzE2NiwgMTEzMTcwLCAxMTMxNzQsIDExMzE3OCwgMTEzMTgyLCAxMTMxODYsIDExMzE5MCwgMTEzMTk0LCAxMTMxOTgsIAorICAgIDExMzIwMiwgMTEzMjA2LCAxMTMyMTAsIDExMzIxNCwgMTEzMjE4LCAxMTMyMjIsIDExMzIyNiwgMTEzMjMwLCAxMTMyMzQsIAorICAgIDExMzIzOCwgMTEzMjQyLCAxMTMyNDYsIDExMzI1MCwgMTEzMjU0LCAxMTMyNTgsIDExMzI2MiwgMTEzMjY2LCAxMTMyNzAsIAorICAgIDExMzI3NCwgMTEzMjc4LCAxMTMyODIsIDExMzI4NiwgMTEzMjkwLCAxMTMyOTQsIDExMzI5OCwgMTEzMzAyLCAxMTMzMDYsIAorICAgIDExMzMxMCwgMTEzMzE0LCAxMTMzMTgsIDExMzMyMiwgMTEzMzI2LCAxMTMzMzAsIDExMzMzNCwgMTEzMzM4LCAxMTMzNDIsIAorICAgIDExMzM0NiwgMTEzMzUwLCAxMTMzNTQsIDExMzM1OCwgMTEzMzYyLCAxMTMzNjYsIDExMzM3MCwgMTEzMzc0LCAxMTMzNzgsIAorICAgIDExMzM4MiwgMTEzMzg2LCAxMTMzOTAsIDExMzM5NCwgMTEzMzk4LCAxMTM0MDIsIDExMzQwNiwgMTEzNDEwLCAxMTM0MTQsIAorICAgIDExMzQxOCwgMTEzNDIyLCAxMTM0MjYsIDExMzQzMCwgMTEzNDM0LCAxMTM0MzgsIDExMzQ0MiwgMTEzNDQ2LCAxMTM0NTAsIAorICAgIDExMzQ1NCwgMTEzNDU4LCAxMTM0NjIsIDExMzQ2NiwgMTEzNDcwLCAxMTM0NzQsIDExMzQ3OCwgMTEzNDgyLCAxMTM0ODYsIAorICAgIDExMzQ5MCwgMTEzNDk0LCAxMTM0OTgsIDExMzUwMiwgMTEzNTA2LCAxMTM1MTAsIDExMzUxNCwgMTEzNTE4LCAxMTM1MjIsIAorICAgIDExMzUyNiwgMTEzNTMwLCAxMTM1MzQsIDExMzUzOCwgMTEzNTQyLCAxMTM1NDYsIDExMzU1MCwgMTEzNTU0LCAxMTM1NTgsIAorICAgIDExMzU2MiwgMTEzNTY2LCAxMTM1NzAsIDExMzU3NCwgMTEzNTc4LCAxMTM1ODIsIDExMzU4NiwgMTEzNTkwLCAxMTM1OTQsIAorICAgIDExMzU5OCwgMTEzNjAyLCAxMTM2MDYsIDExMzYxMCwgMTEzNjE0LCAxMTM2MTgsIDExMzYyMiwgMTEzNjI2LCAxMTM2MzAsIAorICAgIDExMzYzNCwgMTEzNjM4LCAxMTM2NDIsIDExMzY0NiwgMTEzNjUwLCAxMTM2NTQsIDExMzY1OCwgMTEzNjYyLCAxMTM2NjYsIAorICAgIDExMzY3MCwgMTEzNjc0LCAxMTM2NzgsIDExMzY4MiwgMTEzNjg2LCAxMTM2OTAsIDExMzY5NCwgMTEzNjk4LCAxMTM3MDIsIAorICAgIDExMzcwNiwgMTEzNzEwLCAxMTM3MTQsIDExMzcxOCwgMTEzNzIyLCAxMTM3MjYsIDExMzczMCwgMTEzNzM0LCAxMTM3MzgsIAorICAgIDExMzc0MiwgMTEzNzQ2LCAxMTM3NTAsIDExMzc1NCwgMTEzNzU4LCAxMTM3NjIsIDExMzc2NiwgMTEzNzcwLCAxMTM3NzQsIAorICAgIDExMzc3OCwgMTEzNzgyLCAxMTM3ODYsIDExMzc5MCwgMTEzNzk0LCAxMTM3OTgsIDExMzgwMiwgMTEzODA2LCAxMTM4MTAsIAorICAgIDExMzgxNCwgMTEzODE4LCAxMTM4MjIsIDExMzgyNiwgMTEzODMwLCAxMTM4MzQsIDExMzgzOCwgMTEzODQyLCAxMTM4NDYsIAorICAgIDExMzg1MCwgMTEzODU0LCAxMTM4NTgsIDExMzg2MiwgMTEzODY2LCAxMTM4NzAsIDExMzg3NCwgMTEzODc4LCAxMTM4ODIsIAorICAgIDExMzg4NiwgMTEzODkwLCAxMTM4OTQsIDExMzg5OCwgMTEzOTAyLCAxMTM5MDYsIDExMzkxMCwgMTEzOTE0LCAxMTM5MTgsIAorICAgIDExMzkyMiwgMTEzOTI2LCAxMTM5MzAsIDExMzkzNCwgMTEzOTM4LCAxMTM5NDIsIDExMzk0NiwgMTEzOTUwLCAxMTM5NTQsIAorICAgIDExMzk1OCwgMTEzOTYyLCAxMTM5NjYsIDExMzk3MCwgMTEzOTc0LCAxMTM5NzgsIDExMzk4MiwgMTEzOTg2LCAxMTM5OTAsIAorICAgIDExMzk5NCwgMTEzOTk4LCAxMTQwMDIsIDExNDAwNiwgMTE0MDEwLCAxMTQwMTQsIDExNDAxOCwgMTE0MDIyLCAxMTQwMjYsIAorICAgIDExNDAzMCwgMTE0MDM0LCAxMTQwMzgsIDExNDA0MiwgMTE0MDQ2LCAxMTQwNTAsIDExNDA1NCwgMTE0MDU4LCAxMTQwNjIsIAorICAgIDExNDA2NiwgMTE0MDcwLCAxMTQwNzQsIDExNDA3OCwgMTE0MDgyLCAxMTQwODYsIDExNDA5MCwgMTE0MDk0LCAxMTQwOTgsIAorICAgIDExNDEwMiwgMTE0MTA2LCAxMTQxMTAsIDExNDExNCwgMTE0MTE4LCAxMTQxMjIsIDExNDEyNiwgMTE0MTMwLCAxMTQxMzQsIAorICAgIDExNDEzOCwgMTE0MTQyLCAxMTQxNDYsIDExNDE1MCwgMTE0MTU0LCAxMTQxNTgsIDExNDE2MiwgMTE0MTY2LCAxMTQxNzAsIAorICAgIDExNDE3NCwgMTE0MTc4LCAxMTQxODIsIDExNDE4NiwgMTE0MTkwLCAxMTQxOTQsIDExNDE5OCwgMTE0MjAyLCAxMTQyMDYsIAorICAgIDExNDIxMCwgMTE0MjE0LCAxMTQyMTgsIDExNDIyMiwgMTE0MjI2LCAxMTQyMzAsIDExNDIzNCwgMTE0MjM4LCAxMTQyNDIsIAorICAgIDExNDI0NiwgMTE0MjUwLCAxMTQyNTQsIDExNDI1OCwgMTE0MjYyLCAxMTQyNjYsIDExNDI3MCwgMTE0Mjc0LCAxMTQyNzgsIAorICAgIDExNDI4MiwgMTE0Mjg2LCAxMTQyOTAsIDExNDI5NCwgMTE0Mjk4LCAxMTQzMDIsIDExNDMwNiwgMTE0MzEwLCAxMTQzMTQsIAorICAgIDExNDMxOCwgMTE0MzIyLCAxMTQzMjYsIDExNDMzMCwgMTE0MzM0LCAxMTQzMzgsIDExNDM0MiwgMTE0MzQ2LCAxMTQzNTAsIAorICAgIDExNDM1NCwgMTE0MzU4LCAxMTQzNjIsIDExNDM2NiwgMTE0MzcwLCAxMTQzNzQsIDExNDM3OCwgMTE0MzgyLCAxMTQzODYsIAorICAgIDExNDM5MCwgMTE0Mzk0LCAxMTQzOTgsIDExNDQwMiwgMTE0NDA2LCAxMTQ0MTAsIDExNDQxNCwgMTE0NDE4LCAxMTQ0MjIsIAorICAgIDExNDQyNiwgMTE0NDMwLCAxMTQ0MzQsIDExNDQzOCwgMTE0NDQyLCAxMTQ0NDYsIDExNDQ1MCwgMTE0NDU0LCAxMTQ0NTgsIAorICAgIDExNDQ2MiwgMTE0NDY2LCAxMTQ0NzAsIDExNDQ3NCwgMTE0NDc4LCAxMTQ0ODIsIDExNDQ4NiwgMTE0NDkwLCAxMTQ0OTQsIAorICAgIDExNDQ5OCwgMTE0NTAyLCAxMTQ1MDYsIDExNDUxMCwgMTE0NTE0LCAxMTQ1MTgsIDExNDUyMiwgMTE0NTI2LCAxMTQ1MzAsIAorICAgIDExNDUzNCwgMTE0NTM4LCAxMTQ1NDIsIDExNDU0NiwgMTE0NTUwLCAxMTQ1NTQsIDExNDU1OCwgMTE0NTYyLCAxMTQ1NjYsIAorICAgIDExNDU3MCwgMTE0NTc0LCAxMTQ1NzgsIDExNDU4MiwgMTE0NTg2LCAxMTQ1OTAsIDExNDU5NCwgMTE0NTk4LCAxMTQ2MDIsIAorICAgIDExNDYwNiwgMTE0NjEwLCAxMTQ2MTQsIDExNDYxOCwgMTE0NjIyLCAxMTQ2MjYsIDExNDYzMCwgMTE0NjM0LCAxMTQ2MzgsIAorICAgIDExNDY0MiwgMTE0NjQ2LCAxMTQ2NTAsIDExNDY1NCwgMTE0NjU4LCAxMTQ2NjIsIDExNDY2NiwgMTE0NjcwLCAxMTQ2NzQsIAorICAgIDExNDY3OCwgMTE0NjgyLCAxMTQ2ODYsIDExNDY5MCwgMTE0Njk0LCAxMTQ2OTgsIDExNDcwMiwgMTE0NzA2LCAxMTQ3MTAsIAorICAgIDExNDcxNCwgMTE0NzE4LCAxMTQ3MjIsIDExNDcyNiwgMTE0NzMwLCAxMTQ3MzQsIDExNDczOCwgMTE0NzQyLCAxMTQ3NDYsIAorICAgIDExNDc1MCwgMTE0NzU0LCAxMTQ3NTgsIDExNDc2MiwgMTE0NzY2LCAxMTQ3NzAsIDExNDc3NCwgMTE0Nzc4LCAxMTQ3ODIsIAorICAgIDExNDc4NiwgMTE0NzkwLCAxMTQ3OTQsIDExNDc5OCwgMTE0ODAyLCAxMTQ4MDYsIDExNDgxMCwgMTE0ODE0LCAxMTQ4MTgsIAorICAgIDExNDgyMiwgMTE0ODI2LCAxMTQ4MzAsIDExNDgzNCwgMTE0ODM4LCAxMTQ4NDIsIDExNDg0NiwgMTE0ODUwLCAxMTQ4NTQsIAorICAgIDExNDg1OCwgMTE0ODYyLCAxMTQ4NjYsIDExNDg3MCwgMTE0ODc0LCAxMTQ4NzgsIDExNDg4MiwgMTE0ODg2LCAxMTQ4OTAsIAorICAgIDExNDg5NCwgMTE0ODk4LCAxMTQ5MDIsIDExNDkwNiwgMTE0OTEwLCAxMTQ5MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NTE1LCA2NjUyMiwgCi0gICAgNjY1MjksIDY2NTM2LCA2NjU0NCwgNjY1NTEsIDY2NTU3LCA2NjU2MywgNjY1NzAsIDY2NTc2LCA2NjU4MiwgNjY1ODgsIAotICAgIDY2NTk1LCA2NjYwMiwgNjY2MDksIDY2NjE2LCA2NjYyMywgNjY2MzAsIDY2NjM3LCA2NjY0NCwgNjY2NTEsIDY2NjU4LCAKLSAgICA2NjY2NSwgNjY2NzIsIDY2Njc5LCA2NjY4NiwgNjY2OTIsIDY2Njk5LCA2NjcwNiwgNjY3MTMsIDY2NzIwLCA2NjcyNywgCi0gICAgNjY3MzQsIDY2NzQxLCA2Njc0OCwgNjY3NTUsIDY2NzYyLCA2Njc2OSwgNjY3NzYsIDY2NzgzLCA2Njc5MCwgNjY3OTcsIAotICAgIDY2ODA0LCA2NjgxMSwgNjY4MTgsIDY2ODI2LCA2NjgzNCwgNjY4NDIsIDY2ODUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2Njg1OCwgNjY4NjEsIDY2ODY1LCA2Njg2OSwgNjY4NzMsIAotICAgIDY2ODc3LCA2Njg4MSwgNjY4ODUsIDY2ODg5LCA2Njg5MywgNjY4OTcsIDY2OTAxLCA2NjkwNSwgNjY5MDgsIDY2OTEyLCAKLSAgICA2NjkxNiwgNjY5MTksIDY2OTIzLCA2NjkyNywgNjY5MzEsIDY2OTM1LCA2NjkzOSwgNjY5NDMsIDY2OTQ3LCA2Njk1MCwgCi0gICAgNjY5NTMsIDY2OTU3LCA2Njk2MSwgNjY5NjUsIDY2OTY4LCA2Njk3MSwgNjY5NzQsIDY2OTc3LCA2Njk4MCwgNjY5ODMsIAotICAgIDY2OTg3LCA2Njk5MSwgNjY5OTUsIDY2OTk5LCA2NzAwMywgNjcwMDksIDY3MDE0LCA2NzAxOCwgNjcwMjIsIDY3MDI2LCAKLSAgICA2NzAzMCwgNjcwMzUsIDY3MDQxLCA2NzA0NiwgNjcwNTIsIDY3MDU3LCA2NzA2MiwgNjcwNjYsIDY3MDcyLCA2NzA3NywgCi0gICAgNjcwODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3MDg2LCA2NzA5MCwgNjcwOTQsIDY3MDk3LCA2NzEwMSwgNjcxMDQsIAotICAgIDY3MTA4LCA2NzExMSwgNjcxMTUsIDY3MTE5LCA2NzEyNCwgNjcxMjgsIDY3MTMzLCA2NzEzNiwgNjcxNDAsIDY3MTQ0LCAKLSAgICA2NzE0NywgNjcxNTEsIDY3MTU1LCA2NzE1OCwgNjcxNjIsIDY3MTY2LCA2NzE3MCwgNjcxNzQsIDY3MTc4LCA2NzE4MiwgCi0gICAgNjcxODYsIDY3MTkwLCA2NzE5NCwgNjcxOTgsIDY3MjAyLCA2NzIwNiwgNjcyMTAsIDY3MjE0LCA2NzIxOCwgNjcyMjIsIAotICAgIDY3MjI2LCA2NzIzMCwgNjcyMzQsIDY3MjM3LCA2NzI0MSwgNjcyNDUsIDY3MjQ5LCA2NzI1MiwgNjcyNTUsIDY3MjU4LCAKLSAgICA2NzI2MiwgNjcyNjYsIDY3MjcwLCA2NzI3NCwgNjcyNzgsIDY3MjgxLCA2NzI4NSwgNjcyOTEsIDY3Mjk2LCA2NzMwMCwgCi0gICAgNjczMDUsIDY3MzA5LCA2NzMxNCwgNjczMTksIDY3MzI1LCA2NzMzMCwgNjczMzYsIDY3MzQwLCA2NzM0NSwgNjczNTAsIAotICAgIDY3MzU0LCA2NzM1OSwgNjczNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3MzY4LCA2NzM3MSwgNjczNzUsIAotICAgIDY3Mzc5LCA2NzM4MiwgNjczODUsIDY3Mzg4LCA2NzM5MSwgNjczOTQsIDY3Mzk3LCA2NzQwMCwgNjc0MDMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDkxOCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjc0MDYsIDY3NDEzLCA2NzQxOSwgNjc0MjUsIDY3NDMxLCAKLSAgICA2NzQzNywgNjc0NDMsIDY3NDQ5LCA2NzQ1NSwgNjc0NjEsIDY3NDY3LCA2NzQ3MywgNjc0ODAsIDY3NDg3LCA2NzQ5NCwgCi0gICAgNjc1MDEsIDY3NTA4LCA2NzUxNSwgNjc1MjIsIDY3NTI5LCA2NzUzNiwgNjc1NDMsIDY3NTQ5LCA2NzU1NiwgNjc1NjIsIAotICAgIDY3NTY5LCA2NzU3NiwgNjc1ODIsIDY3NTg4LCA2NzU5NSwgNjc2MDIsIDY3NjA5LCA2NzYxNSwgNjc2MjIsIDY3NjI5LCAKLSAgICA2NzYzNSwgNjc2NDIsIDY3NjQ4LCA2NzY1NSwgNjc2NjIsIDY3NjY4LCA2NzY3NCwgNjc2ODEsIDY3Njg3LCA2NzY5NCwgCi0gICAgNjc3MDEsIDY3NzEwLCA2NzcxNywgNjc3MjQsIDY3NzI4LCA2NzczMywgNjc3MzgsIDY3NzQzLCA2Nzc0OCwgNjc3NTMsIAotICAgIDY3NzU3LCA2Nzc2MiwgNjc3NjYsIDY3NzcxLCA2Nzc3NiwgNjc3ODEsIDY3Nzg2LCA2Nzc5MCwgNjc3OTUsIDY3Nzk5LCAKLSAgICA2NzgwNCwgNjc4MDgsIDY3ODEzLCA2NzgxOCwgNjc4MjMsIDY3ODI4LCA2NzgzMiwgNjc4MzcsIDY3ODQyLCA2Nzg0NywgCi0gICAgNjc4NTMsIDY3ODU4LCA2Nzg2NCwgNjc4NzAsIDY3ODc2LCA2Nzg4MywgNjc4ODksIDY3ODk1LCA2NzkwMSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjc5MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3OTEwLCA2NzkxMywgCi0gICAgNjc5MTYsIDY3OTE5LCA2NzkyMiwgNjc5MjYsIDY3OTI5LCA2NzkzMiwgNjc5MzYsIDY3OTQwLCA2Nzk0NCwgNjc5NDgsIAotICAgIDY3OTUyLCA2Nzk1NiwgNjc5NjAsIDY3OTY0LCA2Nzk2OCwgNjc5NzIsIDY3OTc2LCA2Nzk4MCwgNjc5ODQsIDY3OTg4LCAKLSAgICA2Nzk5MiwgNjc5OTYsIDY4MDAwLCA2ODAwNCwgNjgwMDgsIDY4MDExLCA2ODAxNSwgNjgwMTksIDY4MDIzLCA2ODAyNywgCi0gICAgNjgwMzEsIDY4MDM0LCA2ODAzOCwgNjgwNDEsIDY4MDQ0LCA2ODA0OCwgNjgwNTIsIDY4MDU2LCA2ODA2MCwgNjgwNjMsIAotICAgIDY4MDY4LCA2ODA3MiwgNjgwNzcsIDY4MDgyLCA2ODA4NiwgNjgwOTEsIDY4MDk1LCA2ODEwMCwgNjgxMDUsIDY4MTEwLCAKLSAgICA2ODExNSwgNjgxMjAsIDY4MTI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODEzMiwgNjgxMzcsIDY4MTQxLCAKLSAgICA2ODE0NiwgNjgxNTMsIDY4MTU4LCA2ODE2MywgNjgxNjcsIDY4MTcyLCA2ODE3NywgNjgxODEsIDY4MTg1LCA2ODE5MCwgCi0gICAgNjgxOTYsIDAsIDAsIDY4MjAyLCA2ODIwNiwgNjgyMDksIDY4MjEyLCA2ODIxNSwgNjgyMTgsIDY4MjIxLCA2ODIyNCwgCi0gICAgNjgyMjcsIDY4MjMwLCAwLCAwLCA2ODIzMywgNjgyMzgsIDY4MjQzLCA2ODI0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjgyNTYsIDY4MjYwLCA2ODI2NCwgNjgyNjgsIDY4MjcyLCA2ODI3NiwgNjgyODAsIDY4Mjg0LCA2ODI4OCwgNjgyOTIsIAotICAgIDY4Mjk2LCA2ODMwMCwgNjgzMDQsIDY4MzA4LCA2ODMxMiwgNjgzMTYsIDY4MzIwLCA2ODMyNCwgNjgzMjgsIDY4MzMyLCAKLSAgICA2ODMzNiwgNjgzNDAsIDY4MzQ0LCA2ODM0OCwgNjgzNTIsIDY4MzU2LCA2ODM2MCwgNjgzNjQsIDY4MzY4LCA2ODM3MiwgCi0gICAgNjgzNzYsIDY4MzgwLCA2ODM4NCwgNjgzODgsIDY4MzkyLCA2ODM5NiwgNjg0MDAsIDY4NDA0LCA2ODQwOCwgNjg0MTIsIAotICAgIDY4NDE2LCA2ODQyMCwgNjg0MjQsIDY4NDI4LCA2ODQzMiwgNjg0MzYsIDY4NDQwLCA2ODQ0NCwgNjg0NDgsIDY4NDUyLCAKLSAgICA2ODQ1NiwgNjg0NjAsIDY4NDY0LCA2ODQ2OCwgNjg0NzIsIDY4NDc2LCA2ODQ4MCwgNjg0ODQsIDY4NDg4LCA2ODQ5MiwgCi0gICAgNjg0OTYsIDY4NTAwLCA2ODUwNCwgNjg1MDgsIDY4NTEyLCA2ODUxNiwgNjg1MjAsIDY4NTI0LCA2ODUyOCwgNjg1MzIsIAotICAgIDY4NTM2LCA2ODU0MCwgNjg1NDQsIDY4NTQ4LCA2ODU1MiwgNjg1NTYsIDY4NTYwLCA2ODU2NCwgNjg1NjgsIDY4NTcyLCAKLSAgICA2ODU3NiwgNjg1ODAsIDY4NTg0LCA2ODU4OCwgNjg1OTIsIDY4NTk2LCA2ODYwMCwgNjg2MDQsIDY4NjA4LCA2ODYxMiwgCi0gICAgNjg2MTYsIDY4NjIwLCA2ODYyNCwgNjg2MjgsIDY4NjMyLCA2ODYzNiwgNjg2NDAsIDY4NjQ0LCA2ODY0OCwgNjg2NTIsIAotICAgIDY4NjU2LCA2ODY2MCwgNjg2NjQsIDY4NjY4LCA2ODY3MiwgNjg2NzYsIDY4NjgwLCA2ODY4NCwgNjg2ODgsIDY4NjkyLCAKLSAgICA2ODY5NiwgNjg3MDAsIDY4NzA0LCA2ODcwOCwgNjg3MTIsIDY4NzE2LCA2ODcyMCwgNjg3MjQsIDY4NzI4LCA2ODczMiwgCi0gICAgNjg3MzYsIDY4NzQwLCA2ODc0NCwgNjg3NDgsIDY4NzUyLCA2ODc1NiwgNjg3NjAsIDY4NzY0LCA2ODc2OCwgNjg3NzIsIAotICAgIDY4Nzc2LCA2ODc4MCwgNjg3ODQsIDY4Nzg4LCA2ODc5MiwgNjg3OTYsIDY4ODAwLCA2ODgwNCwgNjg4MDgsIDY4ODEyLCAKLSAgICA2ODgxNiwgNjg4MjAsIDY4ODI0LCA2ODgyOCwgNjg4MzIsIDY4ODM2LCA2ODg0MCwgNjg4NDQsIDY4ODQ4LCA2ODg1MiwgCi0gICAgNjg4NTYsIDY4ODYwLCA2ODg2NCwgNjg4NjgsIDY4ODcyLCA2ODg3NiwgNjg4ODAsIDY4ODg0LCA2ODg4OCwgNjg4OTIsIAotICAgIDY4ODk2LCA2ODkwMCwgNjg5MDQsIDY4OTA4LCA2ODkxMiwgNjg5MTYsIDY4OTIwLCA2ODkyNCwgNjg5MjgsIDY4OTMyLCAKLSAgICA2ODkzNiwgNjg5NDAsIDY4OTQ0LCA2ODk0OCwgNjg5NTIsIDY4OTU2LCA2ODk2MCwgNjg5NjQsIDY4OTY4LCA2ODk3MiwgCi0gICAgNjg5NzYsIDY4OTgwLCA2ODk4NCwgNjg5ODgsIDY4OTkyLCA2ODk5NiwgNjkwMDAsIDY5MDA0LCA2OTAwOCwgNjkwMTIsIAotICAgIDY5MDE2LCA2OTAyMCwgNjkwMjQsIDY5MDI4LCA2OTAzMiwgNjkwMzYsIDY5MDQwLCA2OTA0NCwgNjkwNDgsIDY5MDUyLCAKLSAgICA2OTA1NiwgNjkwNjAsIDY5MDY0LCA2OTA2OCwgNjkwNzIsIDY5MDc2LCA2OTA4MCwgNjkwODQsIDY5MDg4LCA2OTA5MiwgCi0gICAgNjkwOTYsIDY5MTAwLCA2OTEwNCwgNjkxMDgsIDY5MTEyLCA2OTExNiwgNjkxMjAsIDY5MTI0LCA2OTEyOCwgNjkxMzIsIAotICAgIDY5MTM2LCA2OTE0MCwgNjkxNDQsIDY5MTQ4LCA2OTE1MiwgNjkxNTYsIDY5MTYwLCA2OTE2NCwgNjkxNjgsIDY5MTcyLCAKLSAgICA2OTE3NiwgNjkxODAsIDY5MTg0LCA2OTE4OCwgNjkxOTIsIDY5MTk2LCA2OTIwMCwgNjkyMDQsIDY5MjA4LCA2OTIxMiwgCi0gICAgNjkyMTYsIDY5MjIwLCA2OTIyNCwgNjkyMjgsIDY5MjMyLCA2OTIzNiwgNjkyNDAsIDY5MjQ0LCA2OTI0OCwgNjkyNTIsIAotICAgIDY5MjU2LCA2OTI2MCwgNjkyNjQsIDY5MjY4LCA2OTI3MiwgNjkyNzYsIDY5MjgwLCA2OTI4NCwgNjkyODgsIDY5MjkyLCAKLSAgICA2OTI5NiwgNjkzMDAsIDY5MzA0LCA2OTMwOCwgNjkzMTIsIDY5MzE2LCA2OTMyMCwgNjkzMjQsIDY5MzI4LCA2OTMzMiwgCi0gICAgNjkzMzYsIDY5MzQwLCA2OTM0NCwgNjkzNDgsIDY5MzUyLCA2OTM1NiwgNjkzNjAsIDY5MzY0LCA2OTM2OCwgNjkzNzIsIAotICAgIDY5Mzc2LCA2OTM4MCwgNjkzODQsIDY5Mzg4LCA2OTM5MiwgNjkzOTYsIDY5NDAwLCA2OTQwNCwgNjk0MDgsIDY5NDEyLCAKLSAgICA2OTQxNiwgNjk0MjAsIDY5NDI0LCA2OTQyOCwgNjk0MzIsIDY5NDM2LCA2OTQ0MCwgNjk0NDQsIDY5NDQ4LCA2OTQ1MiwgCi0gICAgNjk0NTYsIDY5NDYwLCAwLCAwLCA2OTQ2NCwgNjk0NjgsIDY5NDcyLCA2OTQ3NiwgNjk0ODAsIDY5NDg0LCA2OTQ4OCwgCi0gICAgNjk0OTIsIDY5NDk2LCA2OTUwMCwgNjk1MDQsIDY5NTA4LCA2OTUxMiwgNjk1MTYsIDY5NTIwLCA2OTUyNCwgNjk1MjgsIAotICAgIDY5NTMyLCA2OTUzNiwgNjk1NDAsIDY5NTQ0LCA2OTU0OCwgNjk1NTIsIDY5NTU2LCA2OTU2MCwgNjk1NjQsIDY5NTY4LCAKLSAgICA2OTU3MiwgNjk1NzYsIDY5NTgwLCA2OTU4NCwgNjk1ODgsIDY5NTkyLCA2OTU5NiwgNjk2MDAsIDY5NjA0LCA2OTYwOCwgCi0gICAgNjk2MTIsIDY5NjE2LCA2OTYyMCwgNjk2MjQsIDY5NjI4LCA2OTYzMiwgNjk2MzYsIDY5NjQwLCA2OTY0NCwgNjk2NDgsIAotICAgIDY5NjUyLCA2OTY1NiwgNjk2NjAsIDY5NjY0LCA2OTY2OCwgNjk2NzIsIDY5Njc2LCA2OTY4MCwgNjk2ODQsIDY5Njg4LCAKLSAgICA2OTY5MiwgNjk2OTYsIDAsIDAsIDAsIDAsIDAsIDY5NzAwLCA2OTcwNCwgNjk3MDgsIDY5NzEyLCA2OTcxNiwgNjk3MjAsIAotICAgIDY5NzI0LCA2OTcyOCwgNjk3MzIsIDY5NzM2LCA2OTc0MCwgNjk3NDQsIDY5NzQ4LCA2OTc1MiwgNjk3NTYsIDY5NzYwLCAKLSAgICA2OTc2NCwgNjk3NjgsIDY5NzcyLCA2OTc3NiwgNjk3ODAsIDY5Nzg0LCA2OTc4OCwgNjk3OTIsIDY5Nzk2LCA2OTgwMCwgCi0gICAgNjk4MDQsIDY5ODA4LCA2OTgxMiwgNjk4MTYsIDY5ODIwLCA2OTgyNCwgNjk4MjgsIDY5ODMyLCA2OTgzNiwgNjk4NDAsIAotICAgIDY5ODQ0LCA2OTg0OCwgNjk4NTIsIDY5ODU2LCA2OTg2MCwgNjk4NjQsIDY5ODY4LCA2OTg3MiwgNjk4NzYsIDY5ODgwLCAKLSAgICA2OTg4NCwgNjk4ODgsIDY5ODkyLCA2OTg5NiwgNjk5MDAsIDY5OTA0LCA2OTkwOCwgNjk5MTIsIDY5OTE2LCA2OTkyMCwgCi0gICAgNjk5MjQsIDY5OTI4LCA2OTkzMiwgNjk5MzYsIDY5OTQwLCA2OTk0NCwgNjk5NDgsIDY5OTUyLCA2OTk1NiwgNjk5NjAsIAotICAgIDY5OTY0LCA2OTk2OCwgNjk5NzIsIDY5OTc2LCA2OTk4MCwgNjk5ODQsIDY5OTg4LCA2OTk5MiwgNjk5OTYsIDcwMDAwLCAKLSAgICA3MDAwNCwgNzAwMDgsIDcwMDEyLCA3MDAxNiwgNzAwMjAsIDcwMDI0LCA3MDAyOCwgNzAwMzIsIDcwMDM2LCA3MDA0MCwgCi0gICAgNzAwNDQsIDcwMDQ4LCA3MDA1MiwgNzAwNTYsIDcwMDYwLCA3MDA2NCwgNzAwNjgsIDcwMDcyLCA3MDA3NiwgNzAwODAsIAotICAgIDcwMDg0LCA3MDA4OCwgNzAwOTIsIDcwMDk2LCA3MDEwMCwgNzAxMDQsIDcwMTA4LCA3MDExMiwgNzAxMTYsIDcwMTIwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDEyNCwgNzAxMjksIDcwMTM0LCA3MDEzOSwgNzAxNDQsIAotICAgIDcwMTQ5LCA3MDE1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzAxNjIsIDcwMTY5LCA3MDE3NiwgCi0gICAgNzAxODMsIDcwMTkwLCAwLCAwLCAwLCAwLCAwLCA3MDE5NywgNzAyMDQsIDcwMjExLCA3MDIyMSwgNzAyMjcsIDcwMjMzLCAKLSAgICA3MDIzOSwgNzAyNDUsIDcwMjUxLCA3MDI1NywgNzAyNjQsIDcwMjcwLCA3MDI3NiwgNzAyODIsIDcwMjkxLCA3MDMwMCwgCi0gICAgNzAzMTIsIDcwMzI0LCA3MDMzMCwgNzAzMzYsIDcwMzQyLCA3MDM0OSwgNzAzNTYsIDcwMzYzLCA3MDM3MCwgNzAzNzcsIDAsIAotICAgIDcwMzg0LCA3MDM5MSwgNzAzOTgsIDcwNDA2LCA3MDQxMywgMCwgNzA0MjAsIDAsIDcwNDI3LCA3MDQzNCwgMCwgNzA0NDEsIAotICAgIDcwNDQ5LCAwLCA3MDQ1NiwgNzA0NjMsIDcwNDcwLCA3MDQ3NywgNzA0ODQsIDcwNDkxLCA3MDQ5OCwgNzA1MDUsIDcwNTEyLCAKLSAgICA3MDUxOSwgNzA1MjQsIDcwNTMxLCA3MDUzOCwgNzA1NDQsIDcwNTUwLCA3MDU1NiwgNzA1NjIsIDcwNTY4LCA3MDU3NCwgCi0gICAgNzA1ODAsIDcwNTg2LCA3MDU5MiwgNzA1OTgsIDcwNjA0LCA3MDYxMCwgNzA2MTYsIDcwNjIyLCA3MDYyOCwgNzA2MzQsIAotICAgIDcwNjQwLCA3MDY0NiwgNzA2NTIsIDcwNjU4LCA3MDY2NCwgNzA2NzAsIDcwNjc2LCA3MDY4MiwgNzA2ODgsIDcwNjk0LCAKLSAgICA3MDcwMCwgNzA3MDYsIDcwNzEyLCA3MDcxOCwgNzA3MjQsIDcwNzMwLCA3MDczNiwgNzA3NDIsIDcwNzQ4LCA3MDc1NCwgCi0gICAgNzA3NjAsIDcwNzY2LCA3MDc3MiwgNzA3NzgsIDcwNzg0LCA3MDc5MCwgNzA3OTYsIDcwODAyLCA3MDgwOCwgNzA4MTQsIAotICAgIDcwODIwLCA3MDgyNiwgNzA4MzIsIDcwODM4LCA3MDg0NCwgNzA4NTAsIDcwODU2LCA3MDg2MiwgNzA4NjgsIDcwODc0LCAKLSAgICA3MDg4MCwgNzA4ODYsIDcwODkyLCA3MDg5OCwgNzA5MDQsIDcwOTEwLCA3MDkxNiwgNzA5MjIsIDcwOTI4LCA3MDkzNCwgCi0gICAgNzA5NDAsIDcwOTQ2LCA3MDk1MiwgNzA5NTgsIDcwOTY0LCA3MDk3MCwgNzA5NzYsIDcwOTgyLCA3MDk4OCwgNzA5OTQsIAotICAgIDcxMDAyLCA3MTAxMCwgNzEwMTYsIDcxMDIyLCA3MTAyOCwgNzEwMzQsIDcxMDQzLCA3MTA1MiwgNzEwNjAsIDcxMDY4LCAKLSAgICA3MTA3NiwgNzEwODQsIDcxMDkyLCA3MTEwMCwgNzExMDgsIDcxMTE2LCA3MTEyMywgNzExMzAsIDcxMTQwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA3MTE1MCwgNzExNTYsIDcxMTYyLCA3MTE2OCwgNzExNzQsIDcxMTc5LCA3MTE4NCwgNzExOTAsIAotICAgIDcxMTk2LCA3MTIwMiwgNzEyMDgsIDcxMjE2LCA3MTIyMiwgNzEyMjgsIDcxMjM2LCA3MTI0NCwgNzEyNTIsIDcxMjYwLCAKLSAgICA3MTI2NSwgNzEyNzAsIDcxMjc1LCA3MTI4MCwgNzEyOTIsIDcxMzA0LCA3MTMxNCwgNzEzMjQsIDcxMzM1LCA3MTM0NiwgCi0gICAgNzEzNTcsIDcxMzY4LCA3MTM3OCwgNzEzODgsIDcxMzk5LCA3MTQxMCwgNzE0MjEsIDcxNDMyLCA3MTQ0MiwgNzE0NTIsIAotICAgIDcxNDYyLCA3MTQ3NywgNzE0OTIsIDcxNTA3LCA3MTUxNCwgNzE1MjEsIDcxNTI4LCA3MTUzNSwgNzE1NDUsIDcxNTU1LCAKLSAgICA3MTU2NSwgNzE1NzYsIDcxNTg2LCA3MTU5NCwgNzE2MDIsIDcxNjEwLCA3MTYxOCwgNzE2MjcsIDcxNjM1LCA3MTY0MywgCi0gICAgNzE2NTEsIDcxNjU5LCA3MTY2NywgNzE2NzYsIDcxNjg0LCA3MTY5MiwgNzE3MDAsIDcxNzA5LCA3MTcxNywgNzE3MjQsIAotICAgIDcxNzMxLCA3MTczOCwgNzE3NDUsIDcxNzUyLCA3MTc1OSwgNzE3NjYsIDcxNzc0LCA3MTc4MiwgNzE3OTAsIDcxNzk4LCAKLSAgICA3MTgwNiwgNzE4MTQsIDcxODIyLCA3MTgzMCwgNzE4MzgsIDcxODQ2LCA3MTg1NCwgNzE4NjIsIDcxODcwLCA3MTg3OCwgCi0gICAgNzE4ODYsIDcxODk0LCA3MTkwMiwgNzE5MTAsIDcxOTE4LCA3MTkyNiwgNzE5MzQsIDcxOTQzLCA3MTk1MSwgNzE5NTksIAotICAgIDcxOTY3LCA3MTk3NiwgNzE5ODQsIDcxOTkyLCA3MjAwMCwgNzIwMDgsIDcyMDE2LCA3MjAyNCwgNzIwMzIsIDcyMDQxLCAKLSAgICA3MjA0OSwgNzIwNTYsIDcyMDYzLCA3MjA3MCwgNzIwNzcsIDcyMDg1LCA3MjA5MiwgNzIwOTksIDcyMTA2LCA3MjExMywgCi0gICAgNzIxMjAsIDcyMTI4LCA3MjEzNSwgNzIxNDMsIDcyMTUxLCA3MjE1OSwgNzIxNjcsIDcyMTc2LCA3MjE4NCwgNzIxOTIsIAotICAgIDcyMjAwLCA3MjIwOSwgNzIyMTcsIDcyMjI0LCA3MjIzMSwgNzIyMzgsIDcyMjQ1LCA3MjI1MywgNzIyNjAsIDcyMjcwLCAKLSAgICA3MjI4MCwgNzIyOTAsIDcyMjk5LCA3MjMwOCwgNzIzMTcsIDcyMzI2LCA3MjMzNSwgNzIzNDUsIDcyMzU2LCA3MjM2NywgCi0gICAgNzIzNzcsIDcyMzg4LCA3MjM5OSwgNzI0MDksIDcyNDE4LCA3MjQyNywgNzI0MzUsIDcyNDQ0LCA3MjQ1MywgNzI0NjEsIAotICAgIDcyNDcwLCA3MjQ3OSwgNzI0ODcsIDcyNDk2LCA3MjUwNSwgNzI1MTMsIDcyNTIyLCA3MjUzMSwgNzI1MzksIDcyNTQ4LCAKLSAgICA3MjU1NywgNzI1NjUsIDcyNTc0LCA3MjU4MiwgNzI1OTEsIDcyNTk5LCA3MjYwNywgNzI2MTUsIDcyNjIzLCA3MjYzMiwgCi0gICAgNzI2NDAsIDcyNjQ3LCA3MjY1NSwgNzI2NjIsIDcyNjY5LCA3MjY3NiwgNzI2ODUsIDcyNjk0LCA3MjcwMiwgNzI3MTEsIAotICAgIDcyNzIwLCA3MjcyOCwgNzI3MzgsIDcyNzQ2LCA3Mjc1NCwgNzI3NjEsIDcyNzY5LCA3Mjc3NywgNzI3ODQsIDcyNzk0LCAKLSAgICA3MjgwNCwgNzI4MTQsIDcyODI0LCA3MjgzNSwgNzI4NDMsIDcyODUxLCA3Mjg1OSwgNzI4NjcsIDcyODc2LCA3Mjg4NCwgCi0gICAgNzI4OTIsIDcyOTAwLCA3MjkwOCwgNzI5MTcsIDcyOTI1LCA3MjkzMiwgNzI5MzksIDcyOTQ2LCA3Mjk1MywgNzI5NjAsIAotICAgIDcyOTY3LCA3Mjk3NSwgNzI5ODMsIDcyOTkxLCA3Mjk5OSwgNzMwMDcsIDczMDE1LCA3MzAyMywgNzMwMzEsIDczMDM5LCAKLSAgICA3MzA0NywgNzMwNTUsIDczMDYzLCA3MzA3MSwgNzMwNzksIDczMDg3LCA3MzA5NSwgNzMxMDMsIDczMTExLCA3MzExOSwgCi0gICAgNzMxMjcsIDczMTM1LCA3MzE0MywgNzMxNTEsIDczMTU5LCA3MzE2NywgNzMxNzUsIDczMTgzLCA3MzE5MSwgNzMxOTgsIAotICAgIDczMjA1LCA3MzIxMiwgNzMyMTksIDczMjI3LCA3MzIzNCwgNzMyNDEsIDczMjQ4LCA3MzI1NSwgNzMyNjMsIDczMjcxLCAKLSAgICA3MzI3OSwgNzMyODcsIDczMjk2LCA3MzMwNCwgNzMzMTIsIDczMzIyLCA3MzMyOSwgNzMzMzYsIDczMzQzLCA3MzM1MCwgCi0gICAgNzMzNTgsIDczMzY4LCA3MzM3OSwgNzMzODcsIDczMzk2LCA3MzQwNCwgNzM0MTMsIDczNDIxLCA3MzQzMCwgNzM0MzgsIAotICAgIDczNDQ3LCA3MzQ1NSwgNzM0NjQsIDczNDcyLCA3MzQ4MCwgNzM0ODcsIDczNDk1LCA3MzUwNCwgNzM1MTEsIDczNTE5LCAKLSAgICA3MzUyOCwgNzM1MzcsIDczNTQ2LCA3MzU1NSwgNzM1NjMsIDczNTcyLCA3MzU4MCwgNzM1ODksIDczNTk3LCA3MzYwNiwgCi0gICAgNzM2MTQsIDczNjIzLCA3MzYzMSwgNzM2MzksIDczNjQ2LCA3MzY1NCwgNzM2NjEsIDczNjY5LCA3MzY3NiwgNzM2ODUsIAotICAgIDczNjkzLCA3MzcwMiwgNzM3MTAsIDczNzE4LCA3MzcyNiwgNzM3MzQsIDczNzQyLCA3Mzc1MSwgNzM3NjAsIDczNzY5LCAKLSAgICA3Mzc3OCwgNzM3ODcsIDczNzk1LCA3MzgwNCwgNzM4MTIsIDczODIxLCA3MzgyOSwgNzM4MzgsIDczODQ2LCA3Mzg1NSwgCi0gICAgNzM4NjMsIDczODcxLCA3Mzg3OCwgNzM4ODYsIDczODkzLCA3MzkwMSwgNzM5MDgsIDczOTE3LCA3MzkyNSwgNzM5MzQsIAotICAgIDczOTQyLCA3Mzk1MCwgNzM5NTgsIDczOTY2LCA3Mzk3NCwgNzM5ODMsIDczOTkyLCA3NDAwMSwgNzQwMTAsIDc0MDE4LCAKLSAgICA3NDAyNiwgNzQwMzQsIDc0MDQyLCA3NDA1MSwgNzQwNjAsIDc0MDY4LCA3NDA3NiwgNzQwODQsIDc0MDkyLCA3NDEwMCwgCi0gICAgNzQxMDgsIDc0MTE2LCA3NDEyNCwgNzQxMzIsIDc0MTQwLCA3NDE0OCwgNzQxNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MTU4LCA3NDE2OCwgNzQxNzgsIDc0MTg4LCA3NDE5OCwgNzQyMDgsIDc0MjE4LCAKLSAgICA3NDIyOCwgNzQyMzgsIDc0MjQ3LCA3NDI1NiwgNzQyNjUsIDc0Mjc1LCA3NDI4NSwgNzQyOTUsIDc0MzA2LCA3NDMxNiwgCi0gICAgNzQzMjYsIDc0MzM2LCA3NDM0NiwgNzQzNTYsIDc0MzY2LCA3NDM3NiwgNzQzODYsIDc0Mzk2LCA3NDQwNiwgNzQ0MTYsIAotICAgIDc0NDI2LCA3NDQzNiwgNzQ0NDYsIDc0NDU2LCA3NDQ2NywgNzQ0NzcsIDc0NDg3LCA3NDQ5NywgNzQ1MDcsIDc0NTE3LCAKLSAgICA3NDUyNywgNzQ1MzcsIDc0NTQ3LCA3NDU1NywgNzQ1NjgsIDc0NTc4LCA3NDU4OCwgNzQ1OTksIDc0NjA5LCA3NDYxOSwgCi0gICAgNzQ2MjksIDc0NjM5LCA3NDY0OCwgNzQ2NTcsIDc0NjY3LCA3NDY3NiwgNzQ2ODUsIDc0Njk0LCA3NDcwMywgNzQ3MTIsIAotICAgIDc0NzIxLCA3NDczMCwgNzQ3MzksIDc0NzQ4LCA3NDc1NywgNzQ3NjYsIDc0Nzc1LCAwLCAwLCA3NDc4NCwgNzQ3OTMsIAotICAgIDc0ODAzLCA3NDgxMywgNzQ4MjMsIDc0ODM0LCA3NDg0NCwgNzQ4NTQsIDc0ODY1LCA3NDg3NSwgNzQ4ODYsIDc0ODk1LCAKLSAgICA3NDkwNCwgNzQ5MTQsIDc0OTI0LCA3NDkzNSwgNzQ5NDUsIDc0OTU2LCA3NDk2NiwgNzQ5NzcsIDc0OTg2LCA3NDk5NiwgCi0gICAgNzUwMDYsIDc1MDE3LCA3NTAyNywgNzUwMzcsIDc1MDQ3LCA3NTA1NiwgNzUwNjUsIDc1MDc0LCA3NTA4MywgNzUwOTIsIAotICAgIDc1MTAxLCA3NTExMSwgNzUxMjEsIDc1MTMxLCA3NTE0MCwgNzUxNTAsIDc1MTYwLCA3NTE3MCwgNzUxNzksIDc1MTg4LCAKLSAgICA3NTE5OCwgNzUyMDcsIDc1MjE3LCA3NTIyNiwgNzUyMzUsIDc1MjQ0LCA3NTI1NCwgNzUyNjQsIDc1Mjc0LCA3NTI4NCwgCi0gICAgNzUyOTQsIDc1MzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTMxNCwgNzUzMjksIAotICAgIDc1MzQ0LCA3NTM1MCwgNzUzNTYsIDc1MzYyLCA3NTM2OCwgNzUzNzQsIDc1MzgwLCA3NTM4NiwgNzUzOTIsIDc1NDAwLCAKLSAgICA3NTQwNCwgNzU0MDcsIDAsIDAsIDc1NDE1LCA3NTQxOCwgNzU0MjEsIDc1NDI0LCA3NTQyNywgNzU0MzAsIDc1NDMzLCAKLSAgICA3NTQzNiwgNzU0MzksIDc1NDQyLCA3NTQ0NSwgNzU0NDgsIDc1NDUxLCA3NTQ1NCwgNzU0NTcsIDc1NDYwLCA3NTQ2MywgCi0gICAgNzU0NzAsIDc1NDc4LCA3NTQ4OCwgNzU0OTUsIDc1NTAyLCA3NTUxMCwgNzU1MTgsIDc1NTI4LCA3NTUzOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzU1NDcsIDc1NTUyLCA3NTU1NywgNzU1NjQsIDc1NTcxLCA3NTU3NywgNzU1ODMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc1NTg4LCA3NTU5NywgNzU2MDYsIDc1NjE1LCA3NTYyMywgNzU2MzMsIDc1NjQxLCA3NTY0OSwgCi0gICAgNzU2NTgsIDc1NjY3LCA3NTY3OCwgNzU2ODksIDc1Njk5LCA3NTcwOSwgNzU3MTksIDc1NzI5LCA3NTczOCwgNzU3NDcsIAotICAgIDc1NzU2LCA3NTc2NSwgNzU3NzUsIDc1Nzg1LCA3NTc4OSwgNzU3OTQsIDc1ODAyLCA3NTgxMCwgNzU4MTQsIDc1ODE4LCAKLSAgICA3NTgyMiwgNzU4MjcsIDc1ODMyLCA3NTgzNywgNzU4NDIsIDc1ODQ1LCA3NTg0OSwgMCwgNzU4NTQsIDc1ODU3LCA3NTg2MCwgCi0gICAgNzU4NjQsIDc1ODY4LCA3NTg3MywgNzU4NzcsIDc1ODgxLCA3NTg4NiwgNzU4OTEsIDc1ODk4LCA3NTkwNSwgNzU5MDgsIAotICAgIDc1OTExLCA3NTkxNCwgNzU5MTcsIDc1OTIwLCA3NTkyNCwgNzU5MjgsIDAsIDc1OTMyLCA3NTkzNywgNzU5NDEsIDc1OTQ1LCAKLSAgICAwLCAwLCAwLCAwLCA3NTk1MCwgNzU5NTUsIDc1OTYyLCA3NTk2NywgNzU5NzIsIDAsIDc1OTc3LCA3NTk4MiwgNzU5ODcsIAotICAgIDc1OTkyLCA3NTk5NywgNzYwMDIsIDc2MDA3LCA3NjAxMiwgNzYwMTcsIDc2MDIyLCA3NjAyNywgNzYwMzIsIDc2MDQxLCAKLSAgICA3NjA1MCwgNzYwNTgsIDc2MDY2LCA3NjA3NSwgNzYwODQsIDc2MDkzLCA3NjEwMiwgNzYxMTAsIDc2MTE4LCA3NjEyNiwgCi0gICAgNzYxMzQsIDc2MTM5LCA3NjE0NCwgNzYxNTAsIDc2MTU2LCA3NjE2MiwgNzYxNjgsIDc2MTc2LCA3NjE4NCwgNzYxOTAsIAotICAgIDc2MTk2LCA3NjIwMiwgNzYyMDgsIDc2MjE0LCA3NjIyMCwgNzYyMjYsIDc2MjMyLCA3NjIzNywgNzYyNDIsIDc2MjQ3LCAKLSAgICA3NjI1MiwgNzYyNTcsIDc2MjYyLCA3NjI2NywgNzYyNzIsIDc2Mjc3LCA3NjI4MiwgNzYyODcsIDc2MjkyLCA3NjI5OCwgCi0gICAgNzYzMDQsIDc2MzEwLCA3NjMxNiwgNzYzMjIsIDc2MzI4LCA3NjMzNCwgNzYzNDAsIDc2MzQ2LCA3NjM1MiwgNzYzNTgsIAotICAgIDc2MzY0LCA3NjM3MCwgNzYzNzYsIDc2MzgyLCA3NjM4OCwgNzYzOTQsIDc2NDAwLCA3NjQwNiwgNzY0MTIsIDc2NDE4LCAKLSAgICA3NjQyNCwgNzY0MzAsIDc2NDM2LCA3NjQ0MiwgNzY0NDgsIDc2NDU0LCA3NjQ2MCwgNzY0NjYsIDc2NDcyLCA3NjQ3OCwgCi0gICAgNzY0ODQsIDc2NDkwLCA3NjQ5NiwgNzY1MDIsIDc2NTA4LCA3NjUxNCwgNzY1MjAsIDc2NTI2LCA3NjUzMiwgNzY1MzgsIAotICAgIDc2NTQ0LCA3NjU1MCwgNzY1NTYsIDc2NTYyLCA3NjU2OCwgNzY1NzQsIDc2NTgwLCA3NjU4NiwgNzY1OTIsIDc2NTk4LCAKLSAgICA3NjYwNCwgNzY2MDksIDc2NjE0LCA3NjYxOSwgNzY2MjQsIDc2NjI5LCA3NjYzNCwgNzY2MzksIDc2NjQ0LCA3NjY1MCwgCi0gICAgNzY2NTYsIDc2NjYyLCA3NjY2OCwgNzY2NzQsIDc2NjgwLCA3NjY4NiwgNzY2OTIsIDc2Njk4LCA3NjcwNCwgNzY3MTAsIAotICAgIDc2NzE2LCA3NjcyMSwgNzY3MjYsIDc2NzMxLCA3NjczNiwgNzY3NDcsIDc2NzU4LCA3Njc2OCwgNzY3NzgsIDc2Nzg5LCAKLSAgICA3NjgwMCwgNzY4MDcsIDAsIDAsIDc2ODE0LCAwLCA3NjgyMiwgNzY4MjYsIDc2ODMwLCA3NjgzMywgNzY4MzcsIDc2ODQxLCAKLSAgICA3Njg0NCwgNzY4NDcsIDc2ODUxLCA3Njg1NSwgNzY4NTgsIDc2ODYxLCA3Njg2NCwgNzY4NjcsIDc2ODcyLCA3Njg3NSwgCi0gICAgNzY4NzksIDc2ODgyLCA3Njg4NSwgNzY4ODgsIDc2ODkxLCA3Njg5NCwgNzY4OTcsIDc2OTAwLCA3NjkwMywgNzY5MDYsIAotICAgIDc2OTA5LCA3NjkxMiwgNzY5MTYsIDc2OTIwLCA3NjkyNCwgNzY5MjgsIDc2OTMzLCA3NjkzOCwgNzY5NDQsIDc2OTUwLCAKLSAgICA3Njk1NiwgNzY5NjEsIDc2OTY3LCA3Njk3MiwgNzY5NzcsIDc2OTgyLCA3Njk4OCwgNzY5OTQsIDc2OTk5LCA3NzAwNCwgCi0gICAgNzcwMDksIDc3MDE0LCA3NzAyMCwgNzcwMjYsIDc3MDMxLCA3NzAzNiwgNzcwNDIsIDc3MDQ3LCA3NzA1MiwgNzcwNTgsIAotICAgIDc3MDY0LCA3NzA3MCwgNzcwNzYsIDc3MDgwLCA3NzA4NSwgNzcwODksIDc3MDk0LCA3NzA5OCwgNzcxMDMsIDc3MTA4LCAKLSAgICA3NzExNCwgNzcxMjAsIDc3MTI2LCA3NzEzMSwgNzcxMzcsIDc3MTQyLCA3NzE0NywgNzcxNTIsIDc3MTU4LCA3NzE2NCwgCi0gICAgNzcxNjksIDc3MTc0LCA3NzE3OSwgNzcxODQsIDc3MTkwLCA3NzE5NiwgNzcyMDEsIDc3MjA2LCA3NzIxMiwgNzcyMTcsIAotICAgIDc3MjIyLCA3NzIyOCwgNzcyMzQsIDc3MjQwLCA3NzI0NiwgNzcyNTEsIDc3MjU1LCA3NzI2MCwgNzcyNjIsIDc3MjY3LCAKLSAgICA3NzI3MiwgNzcyNzgsIDc3MjgzLCA3NzI4OCwgNzcyOTIsIDc3Mjk4LCA3NzMwMywgNzczMDgsIDc3MzEzLCA3NzMxOCwgCi0gICAgNzczMjMsIDc3MzI4LCA3NzMzMywgNzczMzksIDc3MzQ1LCA3NzM1MSwgNzczNTksIDc3MzYzLCA3NzM2NywgNzczNzEsIAotICAgIDc3Mzc1LCA3NzM3OSwgNzczODMsIDc3Mzg4LCA3NzM5MywgNzczOTgsIDc3NDAzLCA3NzQwOCwgNzc0MTMsIDc3NDE4LCAKLSAgICA3NzQyMywgNzc0MjgsIDc3NDMzLCA3NzQzOCwgNzc0NDMsIDc3NDQ4LCA3NzQ1MiwgNzc0NTcsIDc3NDYyLCA3NzQ2NywgCi0gICAgNzc0NzIsIDc3NDc3LCA3NzQ4MSwgNzc0ODYsIDc3NDkxLCA3NzQ5NiwgNzc1MDEsIDc3NTA1LCA3NzUxMCwgNzc1MTUsIAotICAgIDc3NTIwLCA3NzUyNSwgNzc1MjksIDc3NTM0LCA3NzUzOSwgNzc1NDMsIDc3NTQ4LCA3NzU1MywgNzc1NTgsIDc3NTYzLCAKLSAgICA3NzU2OCwgNzc1NzIsIDc3NTc5LCA3NzU4NiwgNzc1OTAsIDc3NTk1LCA3NzYwMCwgNzc2MDUsIDc3NjEwLCA3NzYxNSwgCi0gICAgNzc2MjAsIDc3NjI1LCA3NzYzMCwgNzc2MzUsIDc3NjQwLCA3NzY0NSwgNzc2NTAsIDc3NjU1LCA3NzY2MCwgNzc2NjUsIAotICAgIDc3NjcwLCA3NzY3NSwgNzc2ODAsIDc3Njg1LCA3NzY5MCwgNzc2OTUsIDc3NzAwLCA3NzcwNSwgNzc3MTAsIDc3NzE1LCAKLSAgICA3NzcyMCwgNzc3MjUsIDc3NzMwLCA3NzczNSwgMCwgMCwgMCwgNzc3NDAsIDc3NzQ0LCA3Nzc0OSwgNzc3NTMsIDc3NzU4LCAKLSAgICA3Nzc2MywgMCwgMCwgNzc3NjcsIDc3NzcyLCA3Nzc3NywgNzc3ODEsIDc3Nzg2LCA3Nzc5MSwgMCwgMCwgNzc3OTYsIAotICAgIDc3ODAxLCA3NzgwNSwgNzc4MTAsIDc3ODE1LCA3NzgyMCwgMCwgMCwgNzc4MjUsIDc3ODMwLCA3NzgzNSwgMCwgMCwgMCwgCi0gICAgNzc4MzksIDc3ODQzLCA3Nzg0NywgNzc4NTAsIDc3ODUzLCA3Nzg1NywgNzc4NjEsIDAsIDc3ODY1LCA3Nzg3MSwgNzc4NzQsIAotICAgIDc3ODc4LCA3Nzg4MSwgNzc4ODUsIDc3ODg5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3Nzg5MywgNzc4OTksIAotICAgIDc3OTA1LCA3NzkxMSwgNzc5MTcsIDAsIDAsIDc3OTIxLCA3NzkyNywgNzc5MzMsIDc3OTM5LCA3Nzk0NSwgNzc5NTEsIAotICAgIDc3OTU4LCA3Nzk2NSwgNzc5NzIsIDc3OTc5LCA3Nzk4NiwgNzc5OTMsIDAsIDc4MDAwLCA3ODAwNywgNzgwMTQsIDc4MDIwLCAKLSAgICA3ODAyNywgNzgwMzQsIDc4MDQxLCA3ODA0OCwgNzgwNTQsIDc4MDYxLCA3ODA2OCwgNzgwNzUsIDc4MDgyLCA3ODA4OSwgCi0gICAgNzgwOTYsIDc4MTAzLCA3ODExMCwgNzgxMTcsIDc4MTIzLCA3ODEzMCwgNzgxMzcsIDc4MTQ0LCA3ODE1MSwgNzgxNTgsIAotICAgIDc4MTY1LCA3ODE3MiwgMCwgNzgxNzksIDc4MTg1LCA3ODE5MiwgNzgxOTksIDc4MjA2LCA3ODIxMywgNzgyMjAsIDc4MjI3LCAKLSAgICA3ODIzNCwgNzgyNDEsIDc4MjQ4LCA3ODI1NSwgNzgyNjIsIDc4MjY5LCA3ODI3NSwgNzgyODIsIDc4Mjg5LCA3ODI5NiwgCi0gICAgNzgzMDMsIDAsIDc4MzEwLCA3ODMxNywgMCwgNzgzMjQsIDc4MzMxLCA3ODMzOCwgNzgzNDUsIDc4MzUyLCA3ODM1OSwgCi0gICAgNzgzNjYsIDc4MzczLCA3ODM4MCwgNzgzODcsIDc4Mzk0LCA3ODQwMSwgNzg0MDgsIDc4NDE1LCA3ODQyMiwgMCwgMCwgCi0gICAgNzg0MjgsIDc4NDMzLCA3ODQzOCwgNzg0NDMsIDc4NDQ4LCA3ODQ1MywgNzg0NTgsIDc4NDYzLCA3ODQ2OCwgNzg0NzMsIAotICAgIDc4NDc4LCA3ODQ4MywgNzg0ODgsIDc4NDkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODQ5OCwgNzg1MDUsIAotICAgIDc4NTEyLCA3ODUxOSwgNzg1MjYsIDc4NTMzLCA3ODU0MCwgNzg1NDcsIDc4NTU0LCA3ODU2MSwgNzg1NjgsIDc4NTc1LCAKLSAgICA3ODU4MiwgNzg1ODksIDc4NTk2LCA3ODYwMywgNzg2MTAsIDc4NjE3LCA3ODYyNCwgNzg2MzEsIDc4NjM5LCA3ODY0NywgCi0gICAgNzg2NTQsIDc4NjYxLCA3ODY2NiwgNzg2NzQsIDc4NjgyLCA3ODY4OSwgNzg2OTYsIDc4NzAxLCA3ODcwOCwgNzg3MTMsIAotICAgIDc4NzE4LCA3ODcyNSwgNzg3MzAsIDc4NzM1LCA3ODc0MCwgNzg3NDgsIDc4NzUzLCA3ODc1OCwgNzg3NjUsIDc4NzcwLCAKLSAgICA3ODc3NSwgNzg3ODIsIDc4Nzg5LCA3ODc5NCwgNzg3OTksIDc4ODA0LCA3ODgwOSwgNzg4MTQsIDc4ODE5LCA3ODgyNCwgCi0gICAgNzg4MjksIDc4ODM0LCA3ODg0MSwgNzg4NDYsIDc4ODUzLCA3ODg1OCwgNzg4NjMsIDc4ODY4LCA3ODg3MywgNzg4NzgsIAotICAgIDc4ODgzLCA3ODg4OCwgNzg4OTMsIDc4ODk4LCA3ODkwMywgNzg5MDgsIDc4OTE1LCA3ODkyMiwgNzg5MjksIDc4OTM2LCAKLSAgICA3ODk0MiwgNzg5NDcsIDc4OTU0LCA3ODk1OSwgNzg5NjQsIDc4OTczLCA3ODk4MCwgNzg5ODksIDc4OTk2LCA3OTAwMSwgCi0gICAgNzkwMDYsIDc5MDE0LCA3OTAxOSwgNzkwMjQsIDc5MDI5LCA3OTAzNCwgNzkwMzksIDc5MDQ2LCA3OTA1MSwgNzkwNTYsIAotICAgIDc5MDYxLCA3OTA2NiwgNzkwNzEsIDc5MDc4LCA3OTA4NSwgNzkwOTIsIDc5MDk5LCA3OTEwNiwgNzkxMTMsIDc5MTIwLCAKLSAgICA3OTEyNywgNzkxMzQsIDc5MTQxLCA3OTE0OCwgNzkxNTUsIDc5MTYyLCA3OTE2OSwgNzkxNzYsIDc5MTgzLCA3OTE5MCwgCi0gICAgNzkxOTcsIDc5MjA0LCA3OTIxMSwgNzkyMTgsIDc5MjI1LCA3OTIzMiwgNzkyMzksIDc5MjQ2LCA3OTI1MywgNzkyNjAsIAotICAgIDc5MjY3LCAwLCAwLCAwLCAwLCAwLCA3OTI3NCwgNzkyODEsIDc5Mjg4LCAwLCAwLCAwLCAwLCA3OTI5MiwgNzkyOTUsIAotICAgIDc5Mjk4LCA3OTMwMSwgNzkzMDQsIDc5MzA3LCA3OTMxMCwgNzkzMTMsIDc5MzE2LCA3OTMxOSwgNzkzMjMsIDc5MzI3LCAKLSAgICA3OTMzMSwgNzkzMzUsIDc5MzM5LCA3OTM0MywgNzkzNDcsIDc5MzUxLCA3OTM1NSwgNzkzNjAsIDc5MzY1LCA3OTM3MCwgCi0gICAgNzkzNzYsIDc5MzgyLCA3OTM4OCwgNzkzOTQsIDc5NDAwLCA3OTQwNiwgNzk0MTEsIDc5NDE2LCA3OTQyMSwgNzk0MjcsIAotICAgIDc5NDMzLCA3OTQzOSwgNzk0NDUsIDc5NDUxLCA3OTQ1NywgNzk0NjMsIDc5NDY5LCA3OTQ3NSwgNzk0ODEsIDc5NDg3LCAKLSAgICA3OTQ5MywgNzk0OTksIDc5NTA1LCAwLCAwLCAwLCA3OTUxMSwgNzk1MTgsIDc5NTI1LCA3OTUzMiwgNzk1MzksIDc5NTQ2LCAKLSAgICA3OTU1NSwgNzk1NjQsIDc5NTcxLCA3OTU3OCwgNzk1ODYsIDc5NTk0LCA3OTYwMiwgNzk2MDgsIDc5NjE1LCA3OTYyNCwgCi0gICAgNzk2MzMsIDc5NjQyLCA3OTY1MSwgNzk2NjAsIDc5NjY5LCA3OTY3OSwgNzk2OTAsIDc5NzAwLCA3OTcxMSwgNzk3MjAsIAotICAgIDc5NzI5LCA3OTczOCwgNzk3NDgsIDc5NzU5LCA3OTc2OSwgNzk3ODAsIDc5NzkxLCA3OTgwMCwgNzk4MDgsIDc5ODE0LCAKLSAgICA3OTgyMCwgNzk4MjYsIDc5ODMyLCA3OTg0MCwgNzk4NDgsIDc5ODU0LCA3OTg2MSwgNzk4NzEsIDc5ODc4LCA3OTg4NSwgCi0gICAgNzk4OTIsIDc5ODk5LCA3OTkwNiwgNzk5MTYsIDc5OTIzLCA3OTkzMCwgNzk5MzgsIDc5OTQ2LCA3OTk1NSwgNzk5NjQsIAotICAgIDc5OTczLCA3OTk4MiwgNzk5OTEsIDc5OTk5LCA4MDAwOCwgODAwMTcsIDgwMDI2LCA4MDAzMCwgODAwMzcsIDgwMDQyLCAKLSAgICA4MDA0NywgODAwNTEsIDgwMDU1LCA4MDA1OSwgODAwNjMsIDgwMDY4LCA4MDA3MywgODAwNzksIDgwMDg1LCA4MDA4OSwgCi0gICAgODAwOTUsIDgwMDk5LCA4MDEwMywgODAxMDcsIDgwMTExLCA4MDExNSwgODAxMTksIDgwMTI1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICA4MDEyOSwgODAxMzQsIDgwMTM5LCA4MDE0NCwgODAxNDksIDgwMTU2LCA4MDE2MSwgODAxNjYsIDgwMTcxLCA4MDE3NiwgCi0gICAgODAxODEsIDgwMTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDE5MSwgODAxOTgsIDgwMjA3LCA4MDIxNiwgODAyMjMsIDgwMjMwLCA4MDIzNywgCi0gICAgODAyNDQsIDgwMjUxLCA4MDI1OCwgODAyNjQsIDgwMjcxLCA4MDI3OCwgODAyODUsIDgwMjkyLCA4MDI5OSwgODAzMDYsIAotICAgIDgwMzEzLCA4MDMyMCwgODAzMjksIDgwMzM2LCA4MDM0MywgODAzNTAsIDgwMzU3LCA4MDM2NCwgODAzNzEsIDgwMzc4LCAKLSAgICA4MDM4NSwgODAzOTQsIDgwNDAxLCA4MDQwOCwgODA0MTUsIDgwNDIyLCA4MDQyOSwgODA0MzYsIDgwNDQ1LCA4MDQ1MiwgCi0gICAgODA0NTksIDgwNDY2LCA4MDQ3MywgODA0ODIsIDgwNDg5LCA4MDQ5NiwgODA1MDMsIDgwNTExLCA4MDUyMCwgMCwgMCwgCi0gICAgODA1MjksIDgwNTMzLCA4MDUzNywgODA1NDIsIDgwNTQ3LCA4MDU1MSwgODA1NTYsIDgwNTYwLCA4MDU2NSwgODA1NzAsIAotICAgIDgwNTc1LCA4MDU4MCwgODA1ODUsIDgwNTkwLCA4MDU5NCwgODA1OTgsIDgwNjAyLCA4MDYwNywgODA2MTIsIDgwNjE2LCAKLSAgICA4MDYyMSwgODA2MjYsIDgwNjMwLCA4MDYzNCwgODA2MzksIDgwNjQ0LCA4MDY0OSwgODA2NTQsIDgwNjU4LCAwLCAwLCAwLCAKLSAgICA4MDY2MywgODA2NjcsIDgwNjcyLCA4MDY3NywgODA2ODEsIDgwNjg2LCA4MDY5MCwgODA2OTUsIDgwNzAwLCA4MDcwNSwgCi0gICAgODA3MTAsIDgwNzE0LCA4MDcxOCwgODA3MjMsIDgwNzI4LCA4MDczMywgODA3MzgsIDgwNzQyLCA4MDc0NywgODA3NTEsIAotICAgIDgwNzU2LCA4MDc2MSwgODA3NjUsIDgwNzcwLCA4MDc3NSwgODA3ODAsIDgwNzg0LCA4MDc4OCwgODA3OTMsIDgwNzk4LCAKLSAgICA4MDgwMywgODA4MDgsIDgwODEzLCA4MDgxNywgODA4MjIsIDgwODI3LCA4MDgzMiwgODA4MzcsIDgwODQyLCA4MDg0NywgCi0gICAgODA4NTIsIDgwODU3LCA4MDg2MiwgODA4NjcsIDgwODcyLCA4MDg3NywgODA4ODIsIDgwODg3LCA4MDg5MiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODA4OTcsIDgwOTAxLCAKLSAgICA4MDkwNiwgODA5MTEsIDgwOTE2LCA4MDkyMCwgODA5MjUsIDgwOTMwLCA4MDkzNSwgODA5NDAsIDgwOTQ0LCA4MDk0OCwgCi0gICAgODA5NTMsIDgwOTU4LCA4MDk2MywgODA5NjgsIDgwOTcyLCA4MDk3NywgODA5ODIsIDgwOTg3LCA4MDk5MiwgODA5OTcsIAotICAgIDgxMDAyLCA4MTAwNiwgODEwMTEsIDgxMDE2LCA4MTAyMSwgODEwMjYsIDgxMDMxLCA4MTAzNiwgODEwNDEsIDAsIDgxMDQ2LCAKLSAgICA4MTA1MCwgODEwNTQsIDgxMDU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTA2NCwgODEwNjksIAotICAgIDgxMDc0LCA4MTA3OSwgODEwODQsIDgxMDg5LCA4MTA5NCwgODEwOTksIDgxMTA0LCA4MTEwOSwgODExMTQsIDgxMTE5LCAKLSAgICA4MTEyNCwgODExMjksIDgxMTM0LCA4MTEzOSwgODExNDQsIDgxMTQ5LCA4MTE1NCwgODExNTksIDgxMTY0LCA4MTE2OSwgCi0gICAgODExNzQsIDgxMTc5LCA4MTE4NCwgODExODksIDgxMTk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTIwMSwgODEyMDYsIDgxMjExLCAKLSAgICA4MTIxNiwgODEyMjEsIDgxMjI2LCA4MTIzMSwgODEyMzYsIDgxMjQxLCA4MTI0NiwgODEyNTEsIDgxMjU2LCA4MTI2MSwgCi0gICAgODEyNjYsIDgxMjcxLCA4MTI3NiwgODEyODEsIDgxMjg2LCA4MTI5MSwgODEyOTYsIDgxMzAxLCA4MTMwNiwgODEzMTEsIAotICAgIDgxMzE2LCA4MTMyMSwgODEzMjYsIDgxMzMxLCA4MTMzNSwgODEzMzksIDgxMzQzLCAwLCA4MTM0OCwgODEzNTQsIDgxMzU5LCAKLSAgICA4MTM2NCwgODEzNjksIDgxMzc0LCA4MTM4MCwgODEzODYsIDgxMzkyLCA4MTM5OCwgODE0MDQsIDgxNDEwLCA4MTQxNiwgCi0gICAgODE0MjIsIDgxNDI4LCA4MTQzNCwgODE0NDAsIDgxNDQ2LCA4MTQ1MiwgODE0NTcsIDgxNDYzLCA4MTQ2OSwgODE0NzUsIAotICAgIDgxNDgxLCA4MTQ4NiwgODE0OTIsIDgxNDk4LCA4MTUwMywgODE1MDksIDgxNTE1LCA4MTUyMCwgODE1MjYsIDgxNTMyLCAKLSAgICA4MTUzOCwgODE1NDQsIDgxNTUwLCA4MTU1NiwgMCwgMCwgMCwgMCwgODE1NjEsIDgxNTY3LCA4MTU3MywgODE1NzksIAotICAgIDgxNTg1LCA4MTU5MSwgODE1OTcsIDgxNjAzLCA4MTYwOSwgODE2MTYsIDgxNjIxLCA4MTYyNiwgODE2MzIsIDgxNjM4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTY0NCwgODE2NDksIDgxNjU0LCAKLSAgICA4MTY1OSwgODE2NjUsIDgxNjcwLCA4MTY3NiwgODE2ODIsIDgxNjg4LCA4MTY5NCwgODE3MDEsIDgxNzA3LCA4MTcxNCwgCi0gICAgODE3MTksIDgxNzI0LCA4MTcyOSwgODE3MzQsIDgxNzM4LCA4MTc0MywgODE3NDgsIDgxNzUzLCA4MTc1OCwgODE3NjMsIAotICAgIDgxNzY4LCA4MTc3MywgODE3NzgsIDgxNzgzLCA4MTc4OCwgODE3OTMsIDgxNzk4LCA4MTgwMywgODE4MDgsIDgxODEzLCAKLSAgICA4MTgxOCwgODE4MjMsIDgxODI4LCA4MTgzMywgODE4MzgsIDgxODQzLCA4MTg0OCwgODE4NTMsIDgxODU4LCA4MTg2MywgCi0gICAgODE4NjgsIDgxODc0LCA4MTg3OSwgODE4ODUsIDgxODkxLCA4MTg5NywgODE5MDMsIDgxOTEwLCA4MTkxNiwgODE5MjMsIAotICAgIDgxOTI4LCA4MTkzMywgODE5MzgsIDgxOTQzLCA4MTk0NywgODE5NTIsIDgxOTU3LCA4MTk2MiwgODE5NjcsIDgxOTcyLCAKLSAgICA4MTk3NywgODE5ODIsIDgxOTg3LCA4MTk5MiwgODE5OTcsIDgyMDAyLCA4MjAwNywgODIwMTIsIDgyMDE3LCA4MjAyMiwgCi0gICAgODIwMjcsIDgyMDMyLCA4MjAzNywgODIwNDIsIDgyMDQ3LCA4MjA1MiwgODIwNTcsIDgyMDYyLCA4MjA2NywgODIwNzIsIAotICAgIDgyMDc3LCA4MjA4MiwgODIwODcsIDgyMDkyLCA4MjA5NywgODIxMDIsIDgyMTA3LCA4MjExMiwgODIxMTcsIDgyMTIyLCAKLSAgICA4MjEyNywgODIxMzIsIDgyMTM3LCA4MjE0MiwgODIxNDcsIDgyMTUyLCA4MjE1NywgODIxNjIsIDgyMTY3LCA4MjE3MiwgCi0gICAgODIxNzcsIDgyMTgyLCA4MjE4NywgODIxOTIsIDgyMTk3LCA4MjIwMiwgODIyMDcsIDgyMjEyLCA4MjIxNywgODIyMjIsIAotICAgIDgyMjI3LCA4MjIzMiwgODIyMzcsIDgyMjQyLCA4MjI0NywgODIyNTIsIDgyMjU3LCA4MjI2MiwgODIyNjcsIDgyMjcyLCAKLSAgICA4MjI3NywgODIyODIsIDgyMjg3LCA4MjI5MiwgODIyOTcsIDgyMzAyLCA4MjMwNywgODIzMTIsIDgyMzE3LCA4MjMyMiwgCi0gICAgODIzMjcsIDgyMzMyLCA4MjMzNywgODIzNDEsIDgyMzQ2LCA4MjM1MSwgODIzNTYsIDgyMzYxLCA4MjM2NiwgODIzNzEsIAotICAgIDgyMzc2LCA4MjM4MSwgODIzODYsIDgyMzkxLCA4MjM5NiwgODI0MDEsIDgyNDA1LCA4MjQwOSwgODI0MTMsIDgyNDE3LCAKLSAgICA4MjQyMSwgODI0MjUsIDgyNDI5LCA4MjQzNCwgODI0MzksIDAsIDAsIDgyNDQ0LCA4MjQ0OSwgODI0NTMsIDgyNDU3LCAKLSAgICA4MjQ2MSwgODI0NjUsIDgyNDY5LCA4MjQ3MywgODI0NzcsIDgyNDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA4MjQ4NSwgODI0ODgsIDgyNDkxLCA4MjQ5NCwgODI0OTcsIDgyNTAwLCAwLCAwLCA4MjUwNCwgMCwgCi0gICAgODI1MDgsIDgyNTExLCA4MjUxNSwgODI1MTksIDgyNTIzLCA4MjUyNywgODI1MzEsIDgyNTM1LCA4MjUzOSwgODI1NDMsIAotICAgIDgyNTQ3LCA4MjU1MCwgODI1NTQsIDgyNTU4LCA4MjU2MiwgODI1NjYsIDgyNTcwLCA4MjU3NCwgODI1NzgsIDgyNTgyLCAKLSAgICA4MjU4NiwgODI1ODksIDgyNTkzLCA4MjU5NywgODI2MDEsIDgyNjA1LCA4MjYwOCwgODI2MTIsIDgyNjE2LCA4MjYyMCwgCi0gICAgODI2MjQsIDgyNjI4LCA4MjYzMiwgODI2MzYsIDgyNjQwLCA4MjY0NCwgODI2NDgsIDgyNjUyLCA4MjY1NiwgODI2NTksIAotICAgIDgyNjYzLCA4MjY2NywgODI2NzEsIDgyNjc1LCAwLCA4MjY3OSwgODI2ODMsIDAsIDAsIDAsIDgyNjg3LCAwLCAwLCA4MjY5MSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODI2OTUsIDgyNzAwLCA4MjcwNSwgCi0gICAgODI3MTAsIDgyNzE1LCA4MjcyMCwgODI3MjUsIDgyNzMwLCA4MjczNSwgODI3NDAsIDgyNzQ1LCA4Mjc1MCwgODI3NTUsIAotICAgIDgyNzYwLCA4Mjc2NSwgODI3NzAsIDgyNzc1LCA4Mjc4MCwgODI3ODUsIDgyNzkwLCA4Mjc5NSwgODI4MDAsIDgyODA1LCAKLSAgICA4MjgwOSwgODI4MTQsIDgyODE5LCAwLCAwLCAwLCAwLCAwLCA4MjgyNSwgODI4MzEsIDgyODM1LCA4Mjg0MCwgODI4NDQsIAotICAgIDgyODQ5LCA4Mjg1MywgODI4NTcsIDgyODYxLCA4Mjg2NiwgODI4NzEsIDgyODc1LCA4Mjg3OSwgODI4ODMsIDgyODg3LCAKLSAgICA4Mjg5MSwgODI4OTYsIDgyOTAxLCA4MjkwNSwgODI5MTAsIDgyOTE1LCA4MjkxOSwgODI5MjQsIDgyOTI5LCA4MjkzNCwgCi0gICAgODI5MzksIDgyOTQ0LCAwLCAwLCAwLCAwLCAwLCA4Mjk0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgODI5NTQsIDgyOTU3LCA4Mjk2MSwgODI5NjUsIDAsIDgyOTcwLCA4Mjk3NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODI5NzgsIDgyOTgzLCA4Mjk4OSwgODI5OTMsIDgyOTk3LCA4MzAwMCwgODMwMDQsIDgzMDA4LCAwLCA4MzAxMiwgODMwMTYsIAotICAgIDgzMDIwLCAwLCA4MzAyNCwgODMwMjgsIDgzMDMyLCA4MzAzNiwgODMwNDAsIDgzMDQ0LCA4MzA0OCwgODMwNTIsIDgzMDU2LCAKLSAgICA4MzA2MCwgODMwNjQsIDgzMDY4LCA4MzA3MSwgODMwNzUsIDgzMDc5LCA4MzA4MywgODMwODYsIDgzMDg5LCA4MzA5MiwgCi0gICAgODMwOTYsIDgzMTAwLCA4MzEwNCwgODMxMDgsIDgzMTEyLCA4MzExNiwgODMxMTksIDgzMTIzLCAwLCAwLCAwLCAwLCAKLSAgICA4MzEyNywgODMxMzIsIDgzMTM2LCAwLCAwLCAwLCAwLCA4MzE0MCwgODMxNDMsIDgzMTQ2LCA4MzE0OSwgODMxNTIsIAotICAgIDgzMTU1LCA4MzE1OSwgODMxNjMsIDgzMTY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MzE3MywgODMxNzgsIDgzMTg0LCAKLSAgICA4MzE4OSwgODMxOTUsIDgzMjAwLCA4MzIwNSwgODMyMTAsIDgzMjE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA4MzIyMSwgODMyMjQsIDgzMjI5LCA4MzIzNSwgODMyNDMsIDgzMjQ4LCA4MzI1NCwgODMyNjIsIAotICAgIDgzMjY4LCA4MzI3NCwgODMyNzgsIDgzMjgyLCA4MzI4OSwgODMyOTgsIDgzMzA1LCA4MzMxNCwgODMzMjAsIDgzMzI5LCAKLSAgICA4MzMzNiwgODMzNDMsIDgzMzUwLCA4MzM2MCwgODMzNjYsIDgzMzcwLCA4MzM3NywgODMzODYsIDgzMzk2LCA4MzQwMywgCi0gICAgODM0MTAsIDgzNDE0LCA4MzQxOCwgODM0MjUsIDgzNDM1LCA4MzQzOSwgODM0NDYsIDgzNDUzLCA4MzQ2MCwgODM0NjYsIAotICAgIDgzNDczLCA4MzQ4MCwgODM0ODcsIDgzNDk0LCA4MzQ5OCwgODM1MDIsIDgzNTA2LCA4MzUxMywgODM1MTcsIDgzNTI0LCAKLSAgICA4MzUzMSwgODM1NDUsIDgzNTU0LCA4MzU1OCwgODM1NjIsIDgzNTY2LCA4MzU3MywgODM1NzcsIDgzNTgxLCA4MzU4NSwgCi0gICAgODM1OTMsIDgzNjAxLCA4MzYyMCwgODM2MzAsIDgzNjUwLCA4MzY1NCwgODM2NTgsIDgzNjYyLCA4MzY2NiwgODM2NzAsIAotICAgIDgzNjc0LCA4MzY3OCwgODM2ODUsIDgzNjg5LCA4MzY5MiwgODM2OTYsIDgzNzAwLCA4MzcwNiwgODM3MTMsIDgzNzIyLCAKLSAgICA4MzcyNiwgODM3MzUsIDgzNzQ0LCA4Mzc1MiwgODM3NTYsIDgzNzYzLCA4Mzc2NywgODM3NzEsIDgzNzc1LCA4Mzc3OSwgCi0gICAgODM3OTAsIDgzNzk5LCA4MzgwOCwgODM4MTcsIDgzODI2LCA4MzgzOCwgODM4NDcsIDgzODU2LCA4Mzg2NSwgODM4NzMsIAotICAgIDgzODgyLCA4Mzg5NCwgODM5MDMsIDgzOTEyLCA4MzkyMSwgODM5MzMsIDgzOTQyLCA4Mzk1MSwgODM5NjMsIDgzOTcyLCAKLSAgICA4Mzk4MSwgODM5OTMsIDg0MDAyLCA4NDAwNiwgODQwMTAsIDg0MDE0LCA4NDAxOCwgODQwMjIsIDg0MDI2LCA4NDAzMCwgCi0gICAgODQwMzcsIDg0MDQxLCA4NDA0NSwgODQwNTYsIDg0MDYwLCA4NDA2NCwgODQwNzEsIDg0MDc3LCA4NDA4MywgODQwODcsIAotICAgIDg0MDk0LCA4NDA5OCwgODQxMDIsIDg0MTA2LCA4NDExMCwgODQxMTQsIDg0MTE4LCA4NDEyNCwgODQxMzIsIDg0MTM2LCAKLSAgICA4NDE0MCwgODQxNDMsIDg0MTQ5LCA4NDE1OSwgODQxNjMsIDg0MTc1LCA4NDE4MiwgODQxODksIDg0MTk2LCA4NDIwMywgCi0gICAgODQyMDksIDg0MjEzLCA4NDIxNywgODQyMjEsIDg0MjI1LCA4NDIzMiwgODQyNDEsIDg0MjQ4LCA4NDI1NiwgODQyNjQsIAotICAgIDg0MjcwLCA4NDI3NCwgODQyNzgsIDg0MjgyLCA4NDI4NiwgODQyOTIsIDg0MzAxLCA4NDMxMywgODQzMjAsIDg0MzI3LCAKLSAgICA4NDMzNiwgODQzNDcsIDg0MzUzLCA4NDM2MiwgODQzNzEsIDg0Mzc4LCA4NDM4NywgODQzOTQsIDg0NDAxLCA4NDQxMSwgCi0gICAgODQ0MTgsIDg0NDI1LCA4NDQzMiwgODQ0MzksIDg0NDQzLCA4NDQ0OSwgODQ0NTMsIDg0NDY0LCA4NDQ3MiwgODQ0ODEsIAotICAgIDg0NDkzLCA4NDUwMCwgODQ1MDcsIDg0NTE3LCA4NDUyNCwgODQ1MzMsIDg0NTQwLCA4NDU0OSwgODQ1NTYsIDg0NTYzLCAKLSAgICA4NDU3MywgODQ1ODAsIDg0NTg3LCA4NDU5NywgODQ2MDQsIDg0NjE2LCA4NDYyNSwgODQ2MzIsIDg0NjM5LCA4NDY0NiwgCi0gICAgODQ2NTUsIDg0NjY1LCA4NDY3OCwgODQ2ODUsIDg0Njk1LCA4NDcwNSwgODQ3MTIsIDg0NzIxLCA4NDczNCwgODQ3NDEsIAotICAgIDg0NzQ4LCA4NDc1NSwgODQ3NjUsIDg0Nzc1LCA4NDc4MiwgODQ3OTIsIDg0Nzk5LCA4NDgwNiwgODQ4MTYsIDg0ODIyLCAKLSAgICA4NDgyOSwgODQ4MzYsIDg0ODQzLCA4NDg1MywgODQ4NjAsIDg0ODY3LCA4NDg3NCwgODQ4ODAsIDg0ODg3LCA4NDg5NywgCi0gICAgODQ5MDQsIDg0OTA4LCA4NDkxNiwgODQ5MjAsIDg0OTMyLCA4NDkzNiwgODQ5NTAsIDg0OTU0LCA4NDk1OCwgODQ5NjIsIAotICAgIDg0OTY2LCA4NDk3MiwgODQ5NzksIDg0OTg3LCA4NDk5MSwgODQ5OTUsIDg0OTk5LCA4NTAwMywgODUwMTAsIDg1MDE0LCAKLSAgICA4NTAyMCwgODUwMjYsIDg1MDM0LCA4NTAzOCwgODUwNDUsIDg1MDUzLCA4NTA1NywgODUwNjEsIDg1MDY3LCA4NTA3MSwgCi0gICAgODUwODAsIDg1MDg5LCA4NTA5NiwgODUxMDYsIDg1MTEyLCA4NTExNiwgODUxMjAsIDg1MTI4LCA4NTEzNSwgODUxNDIsIAotICAgIDg1MTQ4LCA4NTE1MiwgODUxNjAsIDg1MTY0LCA4NTE3MSwgODUxODMsIDg1MTkwLCA4NTIwMCwgODUyMDYsIDg1MjEwLCAKLSAgICA4NTIxOSwgODUyMjYsIDg1MjM1LCA4NTIzOSwgODUyNDMsIDg1MjUwLCA4NTI1NCwgODUyNTgsIDg1MjYyLCA4NTI2NiwgCi0gICAgODUyNjksIDg1Mjc1LCA4NTI4MSwgODUyODUsIDg1Mjg5LCA4NTI5NiwgODUzMDMsIDg1MzEwLCA4NTMxNywgODUzMjQsIAotICAgIDg1MzMxLCA4NTMzOCwgODUzNDUsIDg1MzUxLCA4NTM1NSwgODUzNTksIDg1MzY2LCA4NTM3MywgODUzODAsIDg1Mzg3LCAKLSAgICA4NTM5NCwgODUzOTgsIDg1NDAxLCA4NTQwNiwgODU0MTAsIDg1NDE0LCA4NTQyMywgODU0MzIsIDg1NDM2LCA4NTQ0MCwgCi0gICAgODU0NDYsIDg1NDUyLCA4NTQ2OSwgODU0NzUsIDg1NDc5LCA4NTQ4OCwgODU0OTIsIDg1NDk2LCA4NTUwMywgODU1MTEsIAotICAgIDg1NTE5LCA4NTUyNSwgODU1MjksIDg1NTMzLCA4NTUzNywgODU1NDEsIDg1NTQ0LCA4NTU0OSwgODU1NTUsIDg1NTY0LCAKLSAgICA4NTU3MCwgODU1NzYsIDg1NTgyLCA4NTU4NywgODU1OTMsIDg1NTk5LCA4NTYwNSwgODU2MTEsIDg1NjE3LCA4NTYyNSwgCi0gICAgODU2MzEsIDg1NjQyLCA4NTY0OCwgODU2NTQsIDg1NjYzLCA4NTY3MywgODU2NzksIDg1Njg1LCA4NTY5MSwgODU2OTcsIAotICAgIDg1NzAzLCA4NTcwOSwgODU3MTUsIDg1NzIxLCA4NTcyNywgODU3MzMsIDg1NzQyLCA4NTc1MSwgODU3NjAsIDg1NzY2LCAKLSAgICA4NTc3NSwgODU3ODEsIDg1Nzg3LCA4NTc5MywgODU3OTksIDg1ODA1LCA4NTgxMSwgODU4MTcsIDg1ODIzLCA4NTgyOSwgCi0gICAgODU4MzUsIDg1ODQxLCA4NTg0NywgODU4NTMsIDg1ODU4LCA4NTg2NCwgODU4NzAsIDg1ODc4LCA4NTg4NCwgODU4OTAsIAotICAgIDg1ODk0LCA4NTkwMiwgODU5MDYsIDg1OTEwLCA4NTkxNCwgODU5MTgsIDg1OTIyLCA4NTkyOSwgODU5MzMsIDg1OTQyLCAKLSAgICA4NTk0NiwgODU5NTMsIDg1OTYxLCA4NTk2NSwgODU5NjksIDg1OTczLCA4NTk4NCwgODU5OTgsIDg2MDAyLCA4NjAwNiwgCi0gICAgODYwMTMsIDg2MDE5LCA4NjAyNiwgODYwMzAsIDg2MDM0LCA4NjAzOCwgODYwNDIsIDg2MDQ2LCA4NjA1MywgODYwNTcsIAotICAgIDg2MDc1LCA4NjA3OSwgODYwODMsIDg2MDkwLCA4NjA5NCwgODYwOTgsIDg2MTA0LCA4NjEwOCwgODYxMTIsIDg2MTIwLCAKLSAgICA4NjEyNCwgODYxMjgsIDg2MTMyLCA4NjEzNiwgODYxNDEsIDg2MTUxLCA4NjE1OSwgODYxNjcsIDg2MTczLCA4NjE3OSwgCi0gICAgODYxODksIDg2MTk1LCA4NjIwMSwgODYyMDcsIDg2MjEzLCA4NjIxOSwgODYyMjUsIDg2MjMxLCA4NjI0MCwgODYyNDUsIAotICAgIDg2MjUxLCA4NjI2MCwgODYyNjgsIDg2Mjc0LCA4NjI4MiwgODYyOTEsIDg2Mjk3LCA4NjMwMywgODYzMDksIDg2MzE1LCAKLSAgICA4NjMyNiwgODYzMzIsIDg2MzM4LCA4NjM0NCwgODYzNTAsIDg2MzU2LCA4NjM2NSwgODYzNzEsIDg2Mzc3LCA4NjM4NiwgCi0gICAgODYzOTgsIDg2NDA5LCA4NjQxNSwgODY0MjQsIDg2NDMwLCA4NjQzNiwgODY0NDIsIDg2NDU2LCA4NjQ2MSwgODY0NjgsIAotICAgIDg2NDc3LCA4NjQ4NiwgODY0OTIsIDg2NDk4LCA4NjUwMywgODY1MDcsIDg2NTE0LCA4NjUyNCwgODY1MzAsIDg2NTQzLCAKLSAgICA4NjU0NywgODY1NTEsIDg2NTU4LCA4NjU2MiwgODY1NjgsIDg2NTc3LCA4NjU4MSwgODY1ODUsIDg2NTg5LCA4NjU5MywgCi0gICAgODY1OTcsIDg2NjA0LCA4NjYwOCwgODY2MTUsIDg2NjIyLCA4NjYyOSwgODY2MzgsIDg2NjQ3LCA4NjY1NywgODY2NjQsIAotICAgIDg2NjcxLCA4NjY3OCwgODY2ODgsIDg2Njk1LCA4NjcwNSwgODY3MTIsIDg2NzIyLCA4NjcyOSwgODY3MzYsIDg2NzQ2LCAKLSAgICA4Njc1NiwgODY3NjMsIDg2NzY5LCA4Njc3NywgODY3ODUsIDg2NzkxLCA4Njc5NywgODY4MDEsIDg2ODA1LCA4NjgxMiwgCi0gICAgODY4MjAsIDg2ODI2LCA4NjgzMCwgODY4MzQsIDg2ODM4LCA4Njg0NSwgODY4NTcsIDg2ODYwLCA4Njg2NywgODY4NzMsIAotICAgIDg2ODc3LCA4Njg4MSwgODY4ODUsIDg2ODg5LCA4Njg5MywgODY4OTcsIDg2OTAxLCA4NjkwNSwgODY5MDksIDg2OTEzLCAKLSAgICA4NjkyMCwgODY5MjQsIDg2OTMwLCA4NjkzNCwgODY5MzgsIDg2OTQyLCA4Njk0OCwgODY5NTUsIDg2OTYyLCA4Njk2OSwgCi0gICAgODY5ODEsIDg2OTg5LCA4Njk5MywgODY5OTksIDg3MDA4LCA4NzAxNSwgODcwMjEsIDg3MDI1LCA4NzAyOSwgODcwMzMsIAotICAgIDg3MDM5LCA4NzA0OCwgODcwNTYsIDg3MDYwLCA4NzA2NiwgODcwNzAsIDg3MDc0LCA4NzA3OCwgODcwODQsIDg3MDkxLCAKLSAgICA4NzA5NywgODcxMDEsIDg3MTA3LCA4NzExMSwgODcxMTUsIDg3MTI0LCA4NzEzNiwgODcxNDAsIDg3MTQ3LCA4NzE1NCwgCi0gICAgODcxNjQsIDg3MTcxLCA4NzE4MywgODcxOTAsIDg3MTk3LCA4NzIwNCwgODcyMTUsIDg3MjI1LCA4NzIzOCwgODcyNDgsIAotICAgIDg3MjU1LCA4NzI1OSwgODcyNjMsIDg3MjY3LCA4NzI3MSwgODcyODAsIDg3Mjg5LCA4NzI5OCwgODczMTUsIDg3MzI0LCAKLSAgICA4NzMzMCwgODczMzcsIDg3MzQ1LCA4NzM1OCwgODczNjIsIDg3MzcxLCA4NzM4MCwgODczODksIDg3Mzk4LCA4NzQwOSwgCi0gICAgODc0MTgsIDg3NDI3LCA4NzQzNiwgODc0NDUsIDg3NDU0LCA4NzQ2MywgODc0NzMsIDg3NDc2LCA4NzQ4MCwgODc0ODQsIAotICAgIDg3NDg4LCA4NzQ5MiwgODc0OTYsIDg3NTAyLCA4NzUwOSwgODc1MTYsIDg3NTIzLCA4NzUyOSwgODc1MzUsIDg3NTQyLCAKLSAgICA4NzU0OCwgODc1NTUsIDg3NTYzLCA4NzU2NywgODc1NzQsIDg3NTgxLCA4NzU4OCwgODc1OTYsIDg3NTk5LCA4NzYwMywgCi0gICAgODc2MDcsIDg3NjExLCA4NzYxNSwgODc2MjEsIDg3NjI1LCA4NzYzMSwgODc2MzgsIDg3NjQ1LCA4NzY1MSwgODc2NTgsIAotICAgIDg3NjY1LCA4NzY3MiwgODc2NzksIDg3Njg2LCA4NzY5MywgODc3MDAsIDg3NzA3LCA4NzcxNCwgODc3MjEsIDg3NzI4LCAKLSAgICA4NzczNSwgODc3NDIsIDg3NzQ5LCA4Nzc1NSwgODc3NTksIDg3NzY3LCA4Nzc3MSwgODc3NzUsIDg3Nzc5LCA4Nzc4MywgCi0gICAgODc3ODksIDg3Nzk2LCA4NzgwMywgODc4MTAsIDg3ODE3LCA4NzgyNCwgODc4MzAsIDg3ODM4LCA4Nzg0MiwgODc4NDYsIAotICAgIDg3ODUwLCA4Nzg1NCwgODc4NjAsIDg3ODc3LCA4Nzg5NCwgODc4OTgsIDg3OTAyLCA4NzkwNiwgODc5MTAsIDg3OTE0LCAKLSAgICA4NzkxOCwgODc5MjQsIDg3OTMxLCA4NzkzNSwgODc5NDEsIDg3OTQ4LCA4Nzk1NSwgODc5NjIsIDg3OTY5LCA4Nzk3NiwgCi0gICAgODc5ODUsIDg3OTkyLCA4Nzk5OSwgODgwMDYsIDg4MDEzLCA4ODAxNywgODgwMjEsIDg4MDI3LCA4ODAzOSwgODgwNDMsIAotICAgIDg4MDQ3LCA4ODA1NiwgODgwNjAsIDg4MDY0LCA4ODA2OCwgODgwNzQsIDg4MDc4LCA4ODA4MiwgODgwOTEsIDg4MDk1LCAKLSAgICA4ODA5OSwgODgxMDMsIDg4MTEwLCA4ODExNCwgODgxMTgsIDg4MTIyLCA4ODEyNiwgODgxMzAsIDg4MTM0LCA4ODEzOCwgCi0gICAgODgxNDIsIDg4MTQ4LCA4ODE1NSwgODgxNjIsIDg4MTY4LCA4ODE3MiwgODgxODksIDg4MTk1LCA4ODE5OSwgODgyMDUsIAotICAgIDg4MjExLCA4ODIxNywgODgyMjMsIDg4MjI5LCA4ODIzNSwgODgyMzksIDg4MjQzLCA4ODI0NywgODgyNTMsIDg4MjU3LCAKLSAgICA4ODI2MywgODgyNjcsIDg4MjcxLCA4ODI3OCwgODgyODUsIDg4MzAyLCA4ODMwNiwgODgzMTAsIDg4MzE0LCA4ODMxOCwgCi0gICAgODgzMjIsIDg4MzM0LCA4ODMzNywgODgzNDIsIDg4MzQ3LCA4ODM2MiwgODgzNzIsIDg4MzgzLCA4ODM4NywgODgzOTEsIAotICAgIDg4Mzk1LCA4ODQwMSwgODg0MDgsIDg4NDE1LCA4ODQyNSwgODg0MzcsIDg4NDQzLCA4ODQ0OSwgODg0NTgsIDg4NDYyLCAKLSAgICA4ODQ2NiwgODg0NzMsIDg4NDgzLCA4ODQ5MCwgODg0OTYsIDg4NTAwLCA4ODUwNCwgODg1MTEsIDg4NTE3LCA4ODUyMSwgCi0gICAgODg1MjcsIDg4NTMxLCA4ODUzOSwgODg1NDUsIDg4NTQ5LCA4ODU1NywgODg1NjYsIDg4NTczLCA4ODU3OSwgODg1ODYsIAotICAgIDg4NTkzLCA4ODYwMywgODg2MTMsIDg4NjE3LCA4ODYyMSwgODg2MjUsIDg4NjI5LCA4ODYzNSwgODg2NDIsIDg4NjQ4LCAKLSAgICA4ODY1NSwgODg2NjIsIDg4NjY5LCA4ODY3OCwgODg2ODUsIDg4NjkyLCA4ODY5OCwgODg3MDUsIDg4NzEyLCA4ODcxOSwgCi0gICAgODg3MjYsIDg4NzMzLCA4ODc0MCwgODg3NDYsIDg4NzUzLCA4ODc2MCwgODg3NjcsIDg4Nzc2LCA4ODc4MywgODg3OTAsIAotICAgIDg4Nzk0LCA4ODgwMCwgODg4MDQsIDg4ODEwLCA4ODgxNywgODg4MjQsIDg4ODMxLCA4ODgzNSwgODg4MzksIDg4ODQzLCAKLSAgICA4ODg0NywgODg4NTEsIDg4ODU4LCA4ODg2MiwgODg4NjYsIDg4ODcyLCA4ODg4MSwgODg4ODUsIDg4ODg5LCA4ODg5MywgCi0gICAgODg4OTcsIDg4OTA0LCA4ODkwOCwgODg5MTIsIDg4OTIwLCA4ODkyNCwgODg5MjgsIDg4OTMyLCA4ODkzNiwgODg5NDIsIAotICAgIDg4OTQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODk1MCwgODg5NTYsIAotICAgIDg4OTYyLCA4ODk2OSwgODg5NzYsIDg4OTgzLCA4ODk5MCwgODg5OTcsIDg5MDA0LCA4OTAxMCwgODkwMTcsIDg5MDI0LCAKLSAgICA4OTAzMSwgODkwMzgsIDg5MDQ1LCA4OTA1MiwgODkwNTgsIDg5MDY0LCA4OTA3MCwgODkwNzYsIDg5MDgyLCA4OTA4OCwgCi0gICAgODkwOTQsIDg5MTAwLCA4OTEwNiwgODkxMTMsIDg5MTIwLCA4OTEyNywgODkxMzQsIDg5MTQxLCA4OTE0OCwgODkxNTQsIAotICAgIDg5MTYwLCA4OTE2NiwgODkxNzMsIDg5MTgwLCA4OTE4NiwgODkxOTIsIDg5MjAxLCA4OTIwOCwgODkyMTUsIDg5MjIyLCAKLSAgICA4OTIyOSwgODkyMzYsIDg5MjQzLCA4OTI0OSwgODkyNTUsIDg5MjYxLCA4OTI3MCwgODkyNzcsIDg5Mjg0LCA4OTI5NSwgCi0gICAgODkzMDYsIDg5MzEyLCA4OTMxOCwgODkzMjQsIDg5MzMzLCA4OTM0MCwgODkzNDcsIDg5MzU2LCA4OTM2NSwgODkzNzUsIAotICAgIDg5Mzg1LCA4OTM5NiwgODk0MDgsIDg5NDE4LCA4OTQyOCwgODk0MzksIDg5NDUxLCA4OTQ2MSwgODk0NzEsIDg5NDgxLCAKLSAgICA4OTQ5MSwgODk1MDEsIDg5NTEyLCA4OTUyMCwgODk1MjgsIDg5NTM3LCA4OTU0NiwgODk1NTUsIDg5NTYxLCA4OTU2NywgCi0gICAgODk1NzMsIDg5NTgwLCA4OTU5MCwgODk1OTcsIDg5NjA3LCA4OTYxMiwgODk2MTcsIDg5NjIzLCA4OTYyOSwgODk2MzcsIAotICAgIDg5NjQ1LCA4OTY1NCwgODk2NjQsIDg5Njc0LCA4OTY4MiwgODk2OTAsIDg5Njk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA4OTcwOCwgODk3MTksIDg5NzI2LCA4OTczNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODk3NDIsIDg5NzQ3LCA4OTc1MiwgODk3NTcsIDg5NzY0LCA4OTc3MSwgODk3NzgsIDg5Nzg1LCA4OTc5MCwgCi0gICAgODk3OTUsIDg5ODAwLCA4OTgwNSwgODk4MTIsIDg5ODE3LCA4OTgyNCwgODk4MzEsIDg5ODM2LCA4OTg0MSwgODk4NDYsIAotICAgIDg5ODUzLCA4OTg1OCwgODk4NjMsIDg5ODcwLCA4OTg3NywgODk4ODIsIDg5ODg3LCA4OTg5MiwgODk4OTksIDg5OTA2LCAKLSAgICA4OTkxMywgODk5MTgsIDg5OTIzLCA4OTkzMCwgODk5MzcsIDg5OTQ0LCA4OTk1MSwgODk5NTYsIDg5OTYxLCA4OTk2NiwgCi0gICAgODk5NzMsIDg5OTc4LCA4OTk4MywgODk5ODgsIDg5OTk1LCA5MDAwNCwgOTAwMTEsIDkwMDE2LCA5MDAyMSwgOTAwMjYsIAotICAgIDkwMDMxLCA5MDAzNiwgOTAwNDEsIDkwMDUwLCA5MDA1NywgOTAwNjIsIDkwMDY5LCA5MDA3NiwgOTAwODEsIDkwMDg2LCAKLSAgICA5MDA5MSwgOTAwOTgsIDkwMTAzLCA5MDExMCwgOTAxMTcsIDkwMTIyLCA5MDEyNywgOTAxMzIsIDkwMTM5LCA5MDE0NiwgCi0gICAgOTAxNTEsIDkwMTU2LCA5MDE2MywgOTAxNzAsIDkwMTc3LCA5MDE4MiwgOTAxODcsIDkwMTkyLCA5MDE5NywgOTAyMDQsIAotICAgIDkwMjEzLCA5MDIyMiwgOTAyMjcsIDkwMjM0LCA5MDI0MywgOTAyNDgsIDkwMjUzLCA5MDI1OCwgOTAyNjMsIDkwMjcwLCAKLSAgICA5MDI3NywgOTAyODQsIDkwMjkxLCA5MDI5NiwgOTAzMDEsIDkwMzA2LCA5MDMxMywgOTAzMjAsIDkwMzI3LCA5MDMzMiwgCi0gICAgOTAzMzcsIDkwMzQ0LCA5MDM0OSwgOTAzNTYsIDkwMzYxLCA5MDM2OCwgOTAzNzMsIDkwMzgwLCA5MDM4NywgOTAzOTIsIAotICAgIDkwMzk3LCA5MDQwMiwgOTA0MDcsIDkwNDEyLCA5MDQxNywgOTA0MjIsIDkwNDI3LCA5MDQzMiwgOTA0MzksIDkwNDQ2LCAKLSAgICA5MDQ1MywgOTA0NjAsIDkwNDY3LCA5MDQ3NiwgOTA0ODEsIDkwNDg2LCA5MDQ5MywgOTA1MDAsIDkwNTA1LCA5MDUxMiwgCi0gICAgOTA1MTksIDkwNTI2LCA5MDUzMywgOTA1NDAsIDkwNTQ3LCA5MDU1MiwgOTA1NTcsIDkwNTYyLCA5MDU2NywgOTA1NzIsIAotICAgIDkwNTgxLCA5MDU5MCwgOTA1OTksIDkwNjA4LCA5MDYxNywgOTA2MjYsIDkwNjM1LCA5MDY0NCwgOTA2NDksIDkwNjYwLCAKLSAgICA5MDY3MSwgOTA2ODAsIDkwNjg1LCA5MDY5MCwgOTA2OTUsIDkwNzAwLCA5MDcwOSwgOTA3MTYsIDkwNzIzLCA5MDczMCwgCi0gICAgOTA3MzcsIDkwNzQ0LCA5MDc1MSwgOTA3NjAsIDkwNzY5LCA5MDc4MCwgOTA3ODksIDkwODAwLCA5MDgwOSwgOTA4MTYsIAotICAgIDkwODI1LCA5MDgzNiwgOTA4NDUsIDkwODU0LCA5MDg2MywgOTA4NzIsIDkwODc5LCA5MDg4NiwgOTA4OTMsIDkwOTAyLCAKLSAgICA5MDkxMSwgOTA5MjIsIDkwOTMxLCA5MDk0MCwgOTA5NTEsIDkwOTU2LCA5MDk2MSwgOTA5NzIsIDkwOTgwLCA5MDk4OSwgCi0gICAgOTA5OTgsIDkxMDA3LCA5MTAxOCwgOTEwMjcsIDkxMDM2LCA5MTA0NywgOTEwNTgsIDkxMDY5LCA5MTA4MCwgOTEwOTEsIAotICAgIDkxMTAyLCA5MTEwOSwgOTExMTYsIDkxMTIzLCA5MTEzMCwgOTExNDEsIDkxMTUwLCA5MTE1NywgOTExNjQsIDkxMTcxLCAKLSAgICA5MTE4MiwgOTExOTMsIDkxMjA0LCA5MTIxNSwgOTEyMjYsIDkxMjM3LCA5MTI0OCwgOTEyNTksIDkxMjY2LCA5MTI3MywgCi0gICAgOTEyODIsIDkxMjkxLCA5MTI5OCwgOTEzMDUsIDkxMzEyLCA5MTMyMSwgOTEzMzAsIDkxMzM5LCA5MTM0NiwgOTEzNTUsIAotICAgIDkxMzY0LCA5MTM3MywgOTEzODAsIDkxMzg3LCA5MTM5MiwgOTEzOTgsIDkxNDA1LCA5MTQxMiwgOTE0MTksIDkxNDI2LCAKLSAgICA5MTQzMywgOTE0NDAsIDkxNDQ5LCA5MTQ1OCwgOTE0NjcsIDkxNDc2LCA5MTQ4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOTE0OTIsIDkxNDk4LCA5MTUwMywgOTE1MDgsIDkxNTE1LCA5MTUyMSwgOTE1MjcsIDkxNTMzLCA5MTUzOSwgCi0gICAgOTE1NDUsIDkxNTUxLCA5MTU1NywgOTE1NjEsIDkxNTY1LCA5MTU3MSwgOTE1NzcsIDkxNTgzLCA5MTU4NywgOTE1OTIsIAotICAgIDkxNTk3LCA5MTYwMSwgOTE2MDUsIDkxNjA4LCA5MTYxNCwgOTE2MjAsIDkxNjI2LCA5MTYzMiwgOTE2MzgsIDkxNjQ0LCAKLSAgICA5MTY1MCwgOTE2NTYsIDkxNjYyLCA5MTY3MiwgOTE2ODIsIDkxNjg4LCA5MTY5NCwgOTE3MDQsIDkxNzE0LCA5MTcyMCwgMCwgCi0gICAgMCwgOTE3MjYsIDkxNzM0LCA5MTczOSwgOTE3NDQsIDkxNzUwLCA5MTc1NiwgOTE3NjIsIDkxNzY4LCA5MTc3NCwgOTE3ODAsIAotICAgIDkxNzg3LCA5MTc5NCwgOTE4MDAsIDkxODA2LCA5MTgxMiwgOTE4MTgsIDkxODI0LCA5MTgzMCwgOTE4MzYsIDkxODQyLCAKLSAgICA5MTg0NywgOTE4NTMsIDkxODU5LCA5MTg2NSwgOTE4NzEsIDkxODc3LCA5MTg4NiwgOTE4OTIsIDkxODk3LCA5MTkwNSwgCi0gICAgOTE5MTIsIDkxOTE5LCA5MTkyOCwgOTE5MzcsIDkxOTQ2LCA5MTk1NSwgOTE5NjQsIDkxOTczLCA5MTk4MiwgOTE5OTEsIAotICAgIDkyMDAxLCA5MjAxMSwgOTIwMTksIDkyMDI3LCA5MjAzNiwgOTIwNDUsIDkyMDUxLCA5MjA1NywgOTIwNjMsIDkyMDY5LCAKLSAgICA5MjA3NywgOTIwODUsIDkyMDg5LCA5MjA5NSwgOTIxMDAsIDkyMTA2LCA5MjExMiwgOTIxMTgsIDkyMTI0LCA5MjEzMCwgCi0gICAgOTIxMzksIDkyMTQ0LCA5MjE1MSwgOTIxNTYsIDkyMTYxLCA5MjE2NiwgOTIxNzIsIDkyMTc4LCA5MjE4NCwgOTIxOTEsIAotICAgIDkyMTk2LCA5MjIwMSwgOTIyMDYsIDkyMjExLCA5MjIxNiwgOTIyMjIsIDkyMjI4LCA5MjIzNCwgOTIyNDAsIDkyMjQ2LCAKLSAgICA5MjI1MiwgOTIyNTgsIDkyMjY0LCA5MjI2OSwgOTIyNzQsIDkyMjc5LCA5MjI4NCwgOTIyODksIDkyMjk0LCA5MjI5OSwgCi0gICAgOTIzMDQsIDkyMzEwLCA5MjMxNiwgOTIzMjEsIDkyMzI2LCA5MjMzMSwgOTIzMzYsIDkyMzQxLCA5MjM0NywgOTIzNTQsIAotICAgIDkyMzU4LCA5MjM2MiwgOTIzNjYsIDkyMzcwLCA5MjM3NCwgOTIzNzgsIDkyMzgyLCA5MjM4NiwgOTIzOTQsIDkyNDA0LCAKLSAgICA5MjQwOCwgOTI0MTIsIDkyNDE4LCA5MjQyNCwgOTI0MzAsIDkyNDM2LCA5MjQ0MiwgOTI0NDgsIDkyNDU0LCA5MjQ2MCwgCi0gICAgOTI0NjYsIDkyNDcyLCA5MjQ3OCwgOTI0ODQsIDkyNDkwLCA5MjQ5NiwgOTI1MDAsIDkyNTA0LCA5MjUxMSwgOTI1MTcsIAotICAgIDkyNTIzLCA5MjUyOSwgOTI1MzQsIDkyNTQxLCA5MjU0NiwgOTI1NTIsIDkyNTU4LCA5MjU2NCwgOTI1NzAsIDkyNTc1LCAKLSAgICA5MjU3OSwgOTI1ODUsIDkyNTg5LCA5MjU5MywgOTI1OTcsIDkyNjAzLCA5MjYwOSwgOTI2MTMsIDkyNjE5LCA5MjYyNSwgCi0gICAgOTI2MzEsIDkyNjM3LCA5MjY0MywgOTI2NTEsIDkyNjU5LCA5MjY2NSwgOTI2NzEsIDkyNjc3LCA5MjY4MywgOTI2OTUsIAotICAgIDkyNzA3LCA5MjcyMSwgOTI3MzMsIDkyNzQ1LCA5Mjc1OSwgOTI3NzMsIDkyNzg3LCA5Mjc5MSwgOTI3OTksIDkyODA3LCAKLSAgICA5MjgxMiwgOTI4MTYsIDkyODIwLCA5MjgyNCwgOTI4MjgsIDkyODMyLCA5MjgzNiwgOTI4NDAsIDkyODQ2LCA5Mjg1MiwgCi0gICAgOTI4NTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkyODY0LCA5Mjg3MCwgOTI4NzYsIDkyODgyLCA5Mjg4OCwgCi0gICAgOTI4OTQsIDkyOTAwLCA5MjkwNiwgOTI5MTIsIDkyOTE4LCA5MjkyNCwgOTI5MzAsIDkyOTM2LCA5Mjk0MiwgOTI5NDgsIAotICAgIDkyOTU0LCA5Mjk2MCwgOTI5NjYsIDkyOTcyLCA5Mjk3OCwgOTI5ODQsIDkyOTkwLCA5Mjk5NiwgOTMwMDIsIDkzMDA4LCAKLSAgICA5MzAxNCwgOTMwMjAsIDkzMDI2LCA5MzAzMiwgOTMwMzgsIDkzMDQ0LCA5MzA1MCwgOTMwNTYsIDkzMDYyLCA5MzA2OCwgCi0gICAgOTMwNzQsIDkzMDgwLCA5MzA4NiwgOTMwOTIsIDkzMDk4LCA5MzEwNCwgOTMxMTAsIDkzMTE2LCA5MzEyMiwgOTMxMjgsIAotICAgIDkzMTM0LCA5MzE0MCwgOTMxNDYsIDkzMTUyLCA5MzE1OCwgOTMxNjQsIDkzMTcwLCA5MzE3NiwgOTMxODIsIDkzMTg4LCAKLSAgICA5MzE5NCwgOTMyMDAsIDkzMjA2LCA5MzIxMiwgOTMyMTgsIDkzMjI0LCA5MzIzMCwgOTMyMzYsIDkzMjQyLCA5MzI0OCwgCi0gICAgOTMyNTQsIDkzMjYwLCA5MzI2NSwgOTMyNzAsIDkzMjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MzI3OSwgCi0gICAgOTMyODQsIDkzMjkxLCA5MzI5OCwgOTMzMDUsIDkzMzEyLCA5MzMxNywgOTMzMjEsIDkzMzI3LCA5MzMzMSwgOTMzMzUsIAotICAgIDkzMzQxLCA5MzM0NSwgOTMzNDksIDkzMzUzLCA5MzM1OSwgOTMzNjYsIDkzMzcwLCA5MzM3NCwgOTMzNzgsIDkzMzgyLCAKLSAgICA5MzM4NiwgOTMzOTAsIDkzMzk2LCA5MzQwMCwgOTM0MDQsIDkzNDA4LCA5MzQxMiwgOTM0MTYsIDkzNDIwLCA5MzQyNCwgCi0gICAgOTM0MjgsIDkzNDMyLCA5MzQzNiwgOTM0NDAsIDkzNDQ0LCA5MzQ0OSwgOTM0NTMsIDkzNDU3LCA5MzQ2MSwgOTM0NjUsIAotICAgIDkzNDY5LCA5MzQ3MywgOTM0NzcsIDkzNDgxLCA5MzQ4NSwgOTM0OTIsIDkzNDk2LCA5MzUwMywgOTM1MDcsIDkzNTExLCAKLSAgICA5MzUxNSwgOTM1MTksIDkzNTIzLCA5MzUyNywgOTM1MzEsIDkzNTM4LCA5MzU0MiwgOTM1NDYsIDkzNTUwLCA5MzU1NCwgCi0gICAgOTM1NTgsIDkzNTY0LCA5MzU2OCwgOTM1NzQsIDkzNTc4LCA5MzU4MiwgOTM1ODYsIDkzNTkwLCA5MzU5NCwgOTM1OTgsIAotICAgIDkzNjAyLCA5MzYwNiwgOTM2MTAsIDkzNjE0LCA5MzYxOCwgOTM2MjIsIDkzNjI2LCA5MzYzMCwgOTM2MzQsIDkzNjM4LCAKLSAgICA5MzY0MiwgOTM2NDYsIDkzNjUwLCA5MzY1OCwgOTM2NjIsIDkzNjY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5MzY3MCwgOTM2NzgsIDkzNjg2LCA5MzY5NCwgOTM3MDIsIDkzNzEwLCA5MzcxOCwgOTM3MjYsIDkzNzM0LCA5Mzc0MiwgCi0gICAgOTM3NTAsIDkzNzU4LCA5Mzc2NiwgOTM3NzQsIDkzNzgyLCA5Mzc5MCwgOTM3OTgsIDkzODA2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MzgxNCwgOTM4MTgsIDkzODIzLCA5MzgyOCwgOTM4MzMsIDkzODM3LCA5Mzg0MiwgCi0gICAgOTM4NDYsIDkzODUwLCA5Mzg1NCwgOTM4NTksIDkzODY0LCA5Mzg2OCwgOTM4NzIsIDkzODc2LCA5Mzg4MCwgOTM4ODUsIAotICAgIDkzODkwLCA5Mzg5NCwgOTM4OTgsIDkzOTAzLCA5MzkwNywgOTM5MTEsIDkzOTE2LCA5MzkyMSwgOTM5MjYsIDkzOTMxLCAKLSAgICA5MzkzNSwgOTM5NDAsIDkzOTQ1LCA5Mzk1MCwgOTM5NTQsIDkzOTU5LCA5Mzk2MywgOTM5NjcsIDkzOTcxLCA5Mzk3NiwgCi0gICAgOTM5ODEsIDkzOTg1LCA5Mzk4OSwgOTM5OTMsIDkzOTk3LCA5NDAwMiwgOTQwMDcsIDk0MDExLCA5NDAxNSwgOTQwMjAsIAotICAgIDk0MDI0LCA5NDAyOCwgOTQwMzMsIDk0MDM4LCA5NDA0MywgOTQwNDgsIDk0MDUyLCA5NDA1NywgOTQwNjIsIDk0MDY3LCAKLSAgICA5NDA3MSwgOTQwNzYsIDk0MDgwLCA5NDA4NCwgOTQwODgsIDk0MDkzLCA5NDA5OCwgOTQxMDIsIDk0MTA2LCA5NDExMCwgCi0gICAgOTQxMTQsIDk0MTE5LCA5NDEyNCwgOTQxMjgsIDk0MTMyLCA5NDEzNywgOTQxNDEsIDk0MTQ1LCA5NDE1MCwgOTQxNTUsIAotICAgIDk0MTYwLCA5NDE2NSwgOTQxNjksIDk0MTc0LCA5NDE3OSwgOTQxODQsIDk0MTg4LCA5NDE5MywgMCwgOTQxOTcsIDk0MjAxLCAKLSAgICA5NDIwNiwgOTQyMTEsIDk0MjE1LCA5NDIxOSwgOTQyMjMsIDk0MjI3LCA5NDIzMiwgOTQyMzcsIDk0MjQxLCA5NDI0NSwgCi0gICAgOTQyNTAsIDk0MjU0LCA5NDI1OCwgOTQyNjMsIDk0MjY4LCA5NDI3MywgOTQyNzgsIDk0MjgzLCA5NDI4OSwgOTQyOTUsIAotICAgIDk0MzAxLCA5NDMwNiwgOTQzMTIsIDk0MzE3LCA5NDMyMiwgOTQzMjcsIDk0MzMzLCA5NDMzOSwgOTQzNDQsIDk0MzQ5LCAKLSAgICA5NDM1NCwgOTQzNTksIDk0MzY1LCA5NDM3MSwgOTQzNzYsIDk0MzgxLCA5NDM4NywgOTQzOTIsIDk0Mzk3LCA5NDQwMywgCi0gICAgOTQ0MDksIDk0NDE1LCA5NDQyMSwgOTQ0MjYsIDk0NDMyLCA5NDQzOCwgOTQ0NDQsIDk0NDQ5LCA5NDQ1NSwgOTQ0NjAsIAotICAgIDk0NDY1LCA5NDQ3MCwgOTQ0NzYsIDk0NDgyLCA5NDQ4NywgOTQ0OTIsIDk0NDk3LCA5NDUwMiwgOTQ1MDgsIDk0NTE0LCAKLSAgICA5NDUxOSwgOTQ1MjQsIDk0NTMwLCA5NDUzNSwgOTQ1NDAsIDk0NTQ2LCA5NDU1MiwgOTQ1NTgsIDk0NTY0LCAwLCA5NDU2OCwgCi0gICAgOTQ1NzMsIDAsIDAsIDk0NTc4LCAwLCAwLCA5NDU4MiwgOTQ1ODcsIDAsIDAsIDk0NTkyLCA5NDU5NiwgOTQ2MDAsIDk0NjA1LCAKLSAgICAwLCA5NDYxMCwgOTQ2MTQsIDk0NjE5LCA5NDYyMywgOTQ2MjcsIDk0NjMyLCA5NDYzNywgOTQ2NDIsIDk0NjQ3LCA5NDY1MSwgCi0gICAgOTQ2NTYsIDk0NjYxLCAwLCA5NDY2NiwgMCwgOTQ2NzEsIDk0Njc1LCA5NDY3OSwgOTQ2ODQsIDk0Njg5LCA5NDY5MywgCi0gICAgOTQ2OTcsIDAsIDk0NzAxLCA5NDcwNiwgOTQ3MTEsIDk0NzE1LCA5NDcxOSwgOTQ3MjQsIDk0NzI4LCA5NDczMiwgOTQ3MzcsIAotICAgIDk0NzQyLCA5NDc0NywgOTQ3NTIsIDk0NzU3LCA5NDc2MywgOTQ3NjksIDk0Nzc1LCA5NDc4MCwgOTQ3ODYsIDk0NzkxLCAKLSAgICA5NDc5NiwgOTQ4MDEsIDk0ODA3LCA5NDgxMywgOTQ4MTgsIDk0ODIzLCA5NDgyOCwgOTQ4MzMsIDk0ODM5LCA5NDg0NSwgCi0gICAgOTQ4NTAsIDk0ODU1LCA5NDg2MSwgOTQ4NjYsIDk0ODcxLCA5NDg3NywgOTQ4ODMsIDk0ODg5LCA5NDg5NSwgOTQ5MDAsIAotICAgIDk0OTA2LCA5NDkxMiwgOTQ5MTgsIDk0OTIzLCA5NDkyOSwgOTQ5MzQsIDk0OTM5LCA5NDk0NCwgOTQ5NTAsIDk0OTU2LCAKLSAgICA5NDk2MSwgOTQ5NjYsIDk0OTcxLCA5NDk3NiwgOTQ5ODIsIDk0OTg4LCA5NDk5MywgOTQ5OTgsIDk1MDA0LCA5NTAwOSwgCi0gICAgOTUwMTQsIDk1MDIwLCA5NTAyNiwgOTUwMzIsIDk1MDM4LCA5NTA0MiwgMCwgOTUwNDcsIDk1MDUyLCA5NTA1NiwgOTUwNjEsIAotICAgIDAsIDAsIDk1MDY1LCA5NTA3MCwgOTUwNzUsIDk1MDc5LCA5NTA4MywgOTUwODcsIDk1MDkxLCA5NTA5NiwgMCwgOTUxMDEsIAotICAgIDk1MTA1LCA5NTExMCwgOTUxMTQsIDk1MTE4LCA5NTEyMywgOTUxMjgsIDAsIDk1MTMzLCA5NTEzNywgOTUxNDIsIDk1MTQ3LCAKLSAgICA5NTE1MiwgOTUxNTYsIDk1MTYxLCA5NTE2NSwgOTUxNjksIDk1MTczLCA5NTE3OCwgOTUxODMsIDk1MTg3LCA5NTE5MSwgCi0gICAgOTUxOTUsIDk1MTk5LCA5NTIwNCwgOTUyMDksIDk1MjEzLCA5NTIxNywgOTUyMjIsIDk1MjI2LCA5NTIzMCwgOTUyMzUsIAotICAgIDk1MjQwLCA5NTI0NSwgOTUyNTAsIDk1MjU0LCAwLCA5NTI1OSwgOTUyNjQsIDk1MjY4LCA5NTI3MywgMCwgOTUyNzcsIAotICAgIDk1MjgxLCA5NTI4NiwgOTUyOTEsIDk1Mjk1LCAwLCA5NTI5OSwgMCwgMCwgMCwgOTUzMDMsIDk1MzA3LCA5NTMxMiwgCi0gICAgOTUzMTYsIDk1MzIwLCA5NTMyNSwgOTUzMzAsIDAsIDk1MzM1LCA5NTMzOSwgOTUzNDQsIDk1MzQ5LCA5NTM1NCwgOTUzNTgsIAotICAgIDk1MzYzLCA5NTM2NywgOTUzNzEsIDk1Mzc1LCA5NTM4MCwgOTUzODUsIDk1Mzg5LCA5NTM5MywgOTUzOTcsIDk1NDAxLCAKLSAgICA5NTQwNiwgOTU0MTEsIDk1NDE1LCA5NTQxOSwgOTU0MjQsIDk1NDI4LCA5NTQzMiwgOTU0MzcsIDk1NDQyLCA5NTQ0NywgCi0gICAgOTU0NTIsIDk1NDU3LCA5NTQ2MywgOTU0NjksIDk1NDc1LCA5NTQ4MCwgOTU0ODYsIDk1NDkxLCA5NTQ5NiwgOTU1MDEsIAotICAgIDk1NTA3LCA5NTUxMywgOTU1MTgsIDk1NTIzLCA5NTUyOCwgOTU1MzMsIDk1NTM5LCA5NTU0NSwgOTU1NTAsIDk1NTU1LCAKLSAgICA5NTU2MSwgOTU1NjYsIDk1NTcxLCA5NTU3NywgOTU1ODMsIDk1NTg5LCA5NTU5NSwgOTU2MDAsIDk1NjA2LCA5NTYxMiwgCi0gICAgOTU2MTgsIDk1NjIzLCA5NTYyOSwgOTU2MzQsIDk1NjM5LCA5NTY0NCwgOTU2NTAsIDk1NjU2LCA5NTY2MSwgOTU2NjYsIAotICAgIDk1NjcxLCA5NTY3NiwgOTU2ODIsIDk1Njg4LCA5NTY5MywgOTU2OTgsIDk1NzA0LCA5NTcwOSwgOTU3MTQsIDk1NzIwLCAKLSAgICA5NTcyNiwgOTU3MzIsIDk1NzM4LCA5NTc0MiwgOTU3NDcsIDk1NzUyLCA5NTc1NywgOTU3NjEsIDk1NzY2LCA5NTc3MCwgCi0gICAgOTU3NzQsIDk1Nzc4LCA5NTc4MywgOTU3ODgsIDk1NzkyLCA5NTc5NiwgOTU4MDAsIDk1ODA0LCA5NTgwOSwgOTU4MTQsIAotICAgIDk1ODE4LCA5NTgyMiwgOTU4MjcsIDk1ODMxLCA5NTgzNSwgOTU4NDAsIDk1ODQ1LCA5NTg1MCwgOTU4NTUsIDk1ODU5LCAKLSAgICA5NTg2NCwgOTU4NjksIDk1ODc0LCA5NTg3OCwgOTU4ODMsIDk1ODg3LCA5NTg5MSwgOTU4OTUsIDk1OTAwLCA5NTkwNSwgCi0gICAgOTU5MDksIDk1OTEzLCA5NTkxNywgOTU5MjEsIDk1OTI2LCA5NTkzMSwgOTU5MzUsIDk1OTM5LCA5NTk0NCwgOTU5NDgsIAotICAgIDk1OTUyLCA5NTk1NywgOTU5NjIsIDk1OTY3LCA5NTk3MiwgOTU5NzcsIDk1OTgzLCA5NTk4OSwgOTU5OTUsIDk2MDAwLCAKLSAgICA5NjAwNiwgOTYwMTEsIDk2MDE2LCA5NjAyMSwgOTYwMjcsIDk2MDMzLCA5NjAzOCwgOTYwNDMsIDk2MDQ4LCA5NjA1MywgCi0gICAgOTYwNTksIDk2MDY1LCA5NjA3MCwgOTYwNzUsIDk2MDgxLCA5NjA4NiwgOTYwOTEsIDk2MDk3LCA5NjEwMywgOTYxMDksIAotICAgIDk2MTE1LCA5NjEyMCwgOTYxMjYsIDk2MTMyLCA5NjEzOCwgOTYxNDMsIDk2MTQ5LCA5NjE1NCwgOTYxNTksIDk2MTY0LCAKLSAgICA5NjE3MCwgOTYxNzYsIDk2MTgxLCA5NjE4NiwgOTYxOTEsIDk2MTk2LCA5NjIwMiwgOTYyMDgsIDk2MjEzLCA5NjIxOCwgCi0gICAgOTYyMjQsIDk2MjI5LCA5NjIzNCwgOTYyNDAsIDk2MjQ2LCA5NjI1MiwgOTYyNTgsIDk2MjYzLCA5NjI2OSwgOTYyNzUsIAotICAgIDk2MjgxLCA5NjI4NiwgOTYyOTIsIDk2Mjk3LCA5NjMwMiwgOTYzMDcsIDk2MzEzLCA5NjMxOSwgOTYzMjQsIDk2MzI5LCAKLSAgICA5NjMzNCwgOTYzMzksIDk2MzQ1LCA5NjM1MSwgOTYzNTYsIDk2MzYxLCA5NjM2NywgOTYzNzIsIDk2Mzc3LCA5NjM4MywgCi0gICAgOTYzODksIDk2Mzk1LCA5NjQwMSwgOTY0MDYsIDk2NDEyLCA5NjQxOCwgOTY0MjQsIDk2NDI5LCA5NjQzNSwgOTY0NDAsIAotICAgIDk2NDQ1LCA5NjQ1MCwgOTY0NTYsIDk2NDYyLCA5NjQ2NywgOTY0NzIsIDk2NDc3LCA5NjQ4MiwgOTY0ODgsIDk2NDk0LCAKLSAgICA5NjQ5OSwgOTY1MDQsIDk2NTEwLCA5NjUxNSwgOTY1MjAsIDk2NTI2LCA5NjUzMiwgOTY1MzgsIDk2NTQ0LCA5NjU1MCwgCi0gICAgOTY1NTcsIDk2NTY0LCA5NjU3MSwgOTY1NzcsIDk2NTg0LCA5NjU5MCwgOTY1OTYsIDk2NjAyLCA5NjYwOSwgOTY2MTYsIAotICAgIDk2NjIyLCA5NjYyOCwgOTY2MzQsIDk2NjQwLCA5NjY0NywgOTY2NTQsIDk2NjYwLCA5NjY2NiwgOTY2NzMsIDk2Njc5LCAKLSAgICA5NjY4NSwgOTY2OTIsIDk2Njk5LCA5NjcwNiwgOTY3MTMsIDk2NzE5LCA5NjcyNiwgOTY3MzMsIDk2NzQwLCA5Njc0NiwgCi0gICAgOTY3NTMsIDk2NzU5LCA5Njc2NSwgOTY3NzEsIDk2Nzc4LCA5Njc4NSwgOTY3OTEsIDk2Nzk3LCA5NjgwMywgOTY4MDksIAotICAgIDk2ODE2LCA5NjgyMywgOTY4MjksIDk2ODM1LCA5Njg0MiwgOTY4NDgsIDk2ODU0LCA5Njg2MSwgOTY4NjgsIDk2ODc1LCAKLSAgICA5Njg4MiwgOTY4ODYsIDk2ODkxLCA5Njg5NiwgOTY5MDEsIDk2OTA1LCA5NjkxMCwgOTY5MTQsIDk2OTE4LCA5NjkyMiwgCi0gICAgOTY5MjcsIDk2OTMyLCA5NjkzNiwgOTY5NDAsIDk2OTQ0LCA5Njk0OCwgOTY5NTMsIDk2OTU4LCA5Njk2MiwgOTY5NjYsIAotICAgIDk2OTcxLCA5Njk3NSwgOTY5NzksIDk2OTg0LCA5Njk4OSwgOTY5OTQsIDk2OTk5LCA5NzAwMywgOTcwMDgsIDk3MDEzLCAKLSAgICA5NzAxOCwgOTcwMjIsIDk3MDI3LCA5NzAzMSwgOTcwMzUsIDk3MDM5LCA5NzA0NCwgOTcwNDksIDk3MDUzLCA5NzA1NywgCi0gICAgOTcwNjEsIDk3MDY1LCA5NzA3MCwgOTcwNzUsIDk3MDc5LCA5NzA4MywgOTcwODgsIDk3MDkyLCA5NzA5NiwgOTcxMDEsIAotICAgIDk3MTA2LCA5NzExMSwgOTcxMTYsIDk3MTIyLCAwLCAwLCA5NzEyOSwgOTcxMzQsIDk3MTM5LCA5NzE0NCwgOTcxNDksIAotICAgIDk3MTU0LCA5NzE1OSwgOTcxNjQsIDk3MTY5LCA5NzE3NCwgOTcxNzksIDk3MTg0LCA5NzE4OSwgOTcxOTQsIDk3MTk5LCAKLSAgICA5NzIwNCwgOTcyMDksIDk3MjE0LCA5NzIyMCwgOTcyMjUsIDk3MjMwLCA5NzIzNSwgOTcyNDAsIDk3MjQ1LCA5NzI1MCwgCi0gICAgOTcyNTUsIDk3MjU5LCA5NzI2NCwgOTcyNjksIDk3Mjc0LCA5NzI3OSwgOTcyODQsIDk3Mjg5LCA5NzI5NCwgOTcyOTksIAotICAgIDk3MzA0LCA5NzMwOSwgOTczMTQsIDk3MzE5LCA5NzMyNCwgOTczMjksIDk3MzM0LCA5NzMzOSwgOTczNDQsIDk3MzUwLCAKLSAgICA5NzM1NSwgOTczNjAsIDk3MzY1LCA5NzM3MCwgOTczNzUsIDk3MzgwLCA5NzM4NSwgOTczOTEsIDk3Mzk2LCA5NzQwMSwgCi0gICAgOTc0MDYsIDk3NDExLCA5NzQxNiwgOTc0MjEsIDk3NDI2LCA5NzQzMSwgOTc0MzYsIDk3NDQxLCA5NzQ0NiwgOTc0NTEsIAotICAgIDk3NDU2LCA5NzQ2MSwgOTc0NjYsIDk3NDcxLCA5NzQ3NiwgOTc0ODEsIDk3NDg2LCA5NzQ5MSwgOTc0OTYsIDk3NTAxLCAKLSAgICA5NzUwNiwgOTc1MTIsIDk3NTE3LCA5NzUyMiwgOTc1MjcsIDk3NTMyLCA5NzUzNywgOTc1NDIsIDk3NTQ3LCA5NzU1MSwgCi0gICAgOTc1NTYsIDk3NTYxLCA5NzU2NiwgOTc1NzEsIDk3NTc2LCA5NzU4MSwgOTc1ODYsIDk3NTkxLCA5NzU5NiwgOTc2MDEsIAotICAgIDk3NjA2LCA5NzYxMSwgOTc2MTYsIDk3NjIxLCA5NzYyNiwgOTc2MzEsIDk3NjM2LCA5NzY0MiwgOTc2NDcsIDk3NjUyLCAKLSAgICA5NzY1NywgOTc2NjIsIDk3NjY3LCA5NzY3MiwgOTc2NzcsIDk3NjgzLCA5NzY4OCwgOTc2OTMsIDk3Njk4LCA5NzcwMywgCi0gICAgOTc3MDgsIDk3NzEzLCA5NzcxOSwgOTc3MjUsIDk3NzMxLCA5NzczNywgOTc3NDMsIDk3NzQ5LCA5Nzc1NSwgOTc3NjEsIAotICAgIDk3NzY3LCA5Nzc3MywgOTc3NzksIDk3Nzg1LCA5Nzc5MSwgOTc3OTcsIDk3ODAzLCA5NzgwOSwgOTc4MTUsIDk3ODIyLCAKLSAgICA5NzgyOCwgOTc4MzQsIDk3ODQwLCA5Nzg0NiwgOTc4NTIsIDk3ODU4LCA5Nzg2NCwgOTc4NjksIDk3ODc1LCA5Nzg4MSwgCi0gICAgOTc4ODcsIDk3ODkzLCA5Nzg5OSwgOTc5MDUsIDk3OTExLCA5NzkxNywgOTc5MjMsIDk3OTI5LCA5NzkzNSwgOTc5NDEsIAotICAgIDk3OTQ3LCA5Nzk1MywgOTc5NTksIDk3OTY1LCA5Nzk3MSwgOTc5NzgsIDk3OTg0LCA5Nzk5MCwgOTc5OTYsIDk4MDAyLCAKLSAgICA5ODAwOCwgOTgwMTQsIDk4MDIwLCA5ODAyNywgOTgwMzMsIDk4MDM5LCA5ODA0NSwgOTgwNTEsIDk4MDU3LCA5ODA2MywgCi0gICAgOTgwNjksIDk4MDc1LCA5ODA4MSwgOTgwODcsIDk4MDkzLCA5ODA5OSwgOTgxMDUsIDk4MTExLCA5ODExNywgOTgxMjMsIAotICAgIDk4MTI5LCA5ODEzNSwgOTgxNDEsIDk4MTQ3LCA5ODE1MywgOTgxNTksIDk4MTY1LCA5ODE3MiwgOTgxNzgsIDk4MTg0LCAKLSAgICA5ODE5MCwgOTgxOTYsIDk4MjAyLCA5ODIwOCwgOTgyMTQsIDk4MjE5LCA5ODIyNSwgOTgyMzEsIDk4MjM3LCA5ODI0MywgCi0gICAgOTgyNDksIDk4MjU1LCA5ODI2MSwgOTgyNjcsIDk4MjczLCA5ODI3OSwgOTgyODUsIDk4MjkxLCA5ODI5NywgOTgzMDMsIAotICAgIDk4MzA5LCA5ODMxNSwgOTgzMjEsIDk4MzI4LCA5ODMzNCwgOTgzNDAsIDk4MzQ2LCA5ODM1MiwgOTgzNTgsIDk4MzY0LCAKLSAgICA5ODM3MCwgOTgzNzcsIDk4MzgzLCA5ODM4OSwgOTgzOTUsIDk4NDAxLCA5ODQwNywgOTg0MTMsIDk4NDIwLCA5ODQyNywgCi0gICAgOTg0MzQsIDk4NDQxLCA5ODQ0OCwgOTg0NTUsIDk4NDYyLCA5ODQ2OSwgOTg0NzYsIDk4NDgzLCA5ODQ5MCwgOTg0OTcsIAotICAgIDk4NTA0LCA5ODUxMSwgOTg1MTgsIDk4NTI1LCA5ODUzMiwgOTg1NDAsIDk4NTQ3LCA5ODU1NCwgOTg1NjEsIDk4NTY4LCAKLSAgICA5ODU3NSwgOTg1ODIsIDk4NTg5LCA5ODU5NSwgOTg2MDIsIDk4NjA5LCA5ODYxNiwgOTg2MjMsIDk4NjMwLCA5ODYzNywgCi0gICAgOTg2NDQsIDk4NjUxLCA5ODY1OCwgOTg2NjUsIDk4NjcyLCA5ODY3OSwgOTg2ODYsIDk4NjkzLCA5ODcwMCwgOTg3MDcsIAotICAgIDk4NzE0LCA5ODcyMiwgOTg3MjksIDk4NzM2LCA5ODc0MywgOTg3NTAsIDk4NzU3LCA5ODc2NCwgOTg3NzEsIDk4Nzc5LCAKLSAgICA5ODc4NiwgOTg3OTMsIDk4ODAwLCA5ODgwNywgOTg4MTQsIDk4ODIxLCA5ODgyNiwgMCwgMCwgOTg4MzEsIDk4ODM2LCAKLSAgICA5ODg0MCwgOTg4NDQsIDk4ODQ4LCA5ODg1MiwgOTg4NTYsIDk4ODYwLCA5ODg2NCwgOTg4NjgsIDk4ODcyLCA5ODg3NywgCi0gICAgOTg4ODEsIDk4ODg1LCA5ODg4OSwgOTg4OTMsIDk4ODk3LCA5ODkwMSwgOTg5MDUsIDk4OTA5LCA5ODkxMywgOTg5MTgsIAotICAgIDk4OTIyLCA5ODkyNiwgOTg5MzAsIDk4OTM0LCA5ODkzOCwgOTg5NDIsIDk4OTQ2LCA5ODk1MCwgOTg5NTQsIDk4OTYwLCAKLSAgICA5ODk2NSwgOTg5NzAsIDk4OTc1LCA5ODk4MCwgOTg5ODUsIDk4OTkwLCA5ODk5NSwgOTkwMDAsIDk5MDA1LCA5OTAxMCwgCi0gICAgOTkwMTQsIDk5MDE4LCA5OTAyMiwgOTkwMjYsIDk5MDMwLCA5OTAzNCwgOTkwMzgsIDk5MDQyLCA5OTA0NiwgOTkwNTMsIAotICAgIDk5MDYwLCA5OTA2NywgOTkwNzQsIDk5MDgxLCA5OTA4OCwgOTkwOTQsIDk5MTAxLCA5OTEwOCwgOTkxMTUsIDk5MTIzLCAKLSAgICA5OTEzMSwgOTkxMzksIDk5MTQ3LCA5OTE1NSwgOTkxNjMsIDk5MTcwLCA5OTE3NywgOTkxODQsIDk5MTkyLCA5OTIwMCwgCi0gICAgOTkyMDgsIDk5MjE2LCA5OTIyNCwgOTkyMzIsIDk5MjM5LCA5OTI0NiwgOTkyNTMsIDk5MjYxLCA5OTI2OSwgOTkyNzcsIAotICAgIDk5Mjg1LCA5OTI5MywgOTkzMDEsIDk5MzA2LCA5OTMxMSwgOTkzMTYsIDk5MzIxLCA5OTMyNiwgOTkzMzEsIDk5MzM2LCAKLSAgICA5OTM0MSwgOTkzNDYsIDAsIDAsIDAsIDAsIDk5MzUxLCA5OTM1NiwgOTkzNjAsIDk5MzY0LCA5OTM2OCwgOTkzNzIsIAotICAgIDk5Mzc2LCA5OTM4MCwgOTkzODQsIDk5Mzg4LCA5OTM5MiwgOTkzOTYsIDk5NDAwLCA5OTQwNCwgOTk0MDgsIDk5NDEyLCAKLSAgICA5OTQxNiwgOTk0MjAsIDk5NDI0LCA5OTQyOCwgOTk0MzIsIDk5NDM2LCA5OTQ0MCwgOTk0NDQsIDk5NDQ4LCA5OTQ1MiwgCi0gICAgOTk0NTYsIDk5NDYwLCA5OTQ2NCwgOTk0NjgsIDk5NDcyLCA5OTQ3NiwgOTk0ODAsIDk5NDg0LCA5OTQ4OCwgOTk0OTIsIAotICAgIDk5NDk2LCA5OTUwMCwgOTk1MDQsIDk5NTA4LCA5OTUxMiwgOTk1MTYsIDk5NTIwLCA5OTUyNCwgOTk1MjgsIDk5NTMyLCAKLSAgICA5OTUzNiwgOTk1NDAsIDk5NTQ0LCA5OTU0OCwgOTk1NTIsIDk5NTU3LCA5OTU2MSwgOTk1NjUsIDk5NTY5LCA5OTU3MywgCi0gICAgOTk1NzcsIDk5NTgxLCA5OTU4NSwgOTk1ODksIDk5NTkzLCA5OTU5NywgOTk2MDEsIDk5NjA1LCA5OTYwOSwgOTk2MTMsIAotICAgIDk5NjE3LCA5OTYyMSwgOTk2MjUsIDk5NjI5LCA5OTYzMywgOTk2MzcsIDk5NjQxLCA5OTY0NSwgOTk2NDksIDk5NjUzLCAKLSAgICA5OTY1NywgOTk2NjEsIDk5NjY1LCA5OTY2OSwgOTk2NzMsIDk5Njc3LCA5OTY4MSwgOTk2ODUsIDk5Njg5LCA5OTY5MywgCi0gICAgOTk2OTcsIDk5NzAxLCA5OTcwNSwgOTk3MDksIDk5NzEzLCA5OTcxNywgOTk3MjEsIDk5NzI1LCA5OTcyOSwgOTk3MzMsIAotICAgIDk5NzM3LCA5OTc0MSwgOTk3NDUsIDk5NzQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5OTc1MywgCi0gICAgOTk3NTcsIDk5NzYxLCA5OTc2NSwgOTk3NjksIDk5NzczLCA5OTc3NywgOTk3ODEsIDk5Nzg1LCA5OTc4OSwgOTk3OTMsIAotICAgIDk5Nzk3LCA5OTgwMSwgOTk4MDUsIDk5ODA5LCA5OTgxMywgOTk4MTcsIDk5ODIxLCA5OTgyNSwgOTk4MjksIDk5ODMzLCAKLSAgICA5OTgzNywgOTk4NDEsIDk5ODQ1LCA5OTg0OSwgOTk4NTMsIDk5ODU3LCA5OTg2MSwgOTk4NjUsIDk5ODY5LCA5OTg3MywgCi0gICAgOTk4NzcsIDk5ODgxLCA5OTg4NSwgOTk4ODksIDk5ODkzLCA5OTg5NywgOTk5MDEsIDk5OTA1LCA5OTkwOSwgOTk5MTMsIAotICAgIDk5OTE3LCA5OTkyMSwgOTk5MjUsIDk5OTI5LCA5OTkzMywgOTk5MzcsIDk5OTQxLCA5OTk0NSwgOTk5NDksIDk5OTUzLCAKLSAgICA5OTk1NywgOTk5NjEsIDk5OTY1LCA5OTk2OSwgOTk5NzMsIDk5OTc3LCA5OTk4MSwgOTk5ODUsIDk5OTg5LCA5OTk5MywgCi0gICAgOTk5OTcsIDEwMDAwMSwgMTAwMDA1LCAxMDAwMDksIDEwMDAxMywgMTAwMDE3LCAxMDAwMjEsIDEwMDAyNSwgMTAwMDI5LCAKLSAgICAxMDAwMzMsIDEwMDAzNywgMTAwMDQxLCAxMDAwNDUsIDEwMDA0OSwgMTAwMDUzLCAxMDAwNTcsIDEwMDA2MSwgMTAwMDY1LCAKLSAgICAxMDAwNjksIDEwMDA3MywgMTAwMDc3LCAxMDAwODEsIDEwMDA4NSwgMTAwMDg5LCAxMDAwOTMsIDEwMDA5NywgMTAwMTAxLCAKLSAgICAxMDAxMDUsIDEwMDEwOSwgMTAwMTEzLCAxMDAxMTcsIDEwMDEyMSwgMTAwMTI1LCAxMDAxMjksIDEwMDEzMywgMTAwMTM3LCAKLSAgICAxMDAxNDEsIDEwMDE0NSwgMTAwMTQ5LCAxMDAxNTMsIDEwMDE1NywgMTAwMTYxLCAxMDAxNjUsIDEwMDE2OSwgMTAwMTczLCAKLSAgICAxMDAxNzcsIDEwMDE4MSwgMTAwMTg1LCAxMDAxODksIDEwMDE5MywgMTAwMTk3LCAxMDAyMDEsIDEwMDIwNSwgMTAwMjA5LCAKLSAgICAxMDAyMTMsIDEwMDIxNywgMTAwMjIxLCAxMDAyMjUsIDEwMDIyOSwgMTAwMjMzLCAxMDAyMzcsIDEwMDI0MSwgMTAwMjQ1LCAKLSAgICAxMDAyNDksIDEwMDI1MywgMTAwMjU3LCAxMDAyNjEsIDEwMDI2NSwgMTAwMjY5LCAxMDAyNzMsIDEwMDI3NywgMTAwMjgxLCAKLSAgICAxMDAyODUsIDEwMDI4OSwgMTAwMjkzLCAxMDAyOTcsIDEwMDMwMSwgMTAwMzA1LCAxMDAzMDksIDEwMDMxMywgMTAwMzE3LCAKLSAgICAxMDAzMjEsIDEwMDMyNSwgMTAwMzI5LCAxMDAzMzMsIDEwMDMzNywgMTAwMzQxLCAxMDAzNDUsIDEwMDM0OSwgMTAwMzUzLCAKLSAgICAxMDAzNTcsIDEwMDM2MSwgMTAwMzY1LCAxMDAzNjksIDEwMDM3MywgMTAwMzc3LCAxMDAzODEsIDEwMDM4NSwgMTAwMzg5LCAKLSAgICAxMDAzOTMsIDEwMDM5NywgMTAwNDAxLCAxMDA0MDUsIDEwMDQwOSwgMTAwNDEzLCAxMDA0MTcsIDEwMDQyMSwgMTAwNDI1LCAKLSAgICAxMDA0MjksIDEwMDQzMywgMTAwNDM3LCAxMDA0NDEsIDEwMDQ0NSwgMTAwNDQ5LCAxMDA0NTMsIDEwMDQ1NywgMTAwNDYxLCAKLSAgICAxMDA0NjUsIDEwMDQ2OSwgMTAwNDczLCAxMDA0NzcsIDEwMDQ4MSwgMTAwNDg1LCAxMDA0ODksIDEwMDQ5MywgMTAwNDk3LCAKLSAgICAxMDA1MDEsIDEwMDUwNSwgMTAwNTA5LCAxMDA1MTMsIDEwMDUxNywgMTAwNTIxLCAxMDA1MjUsIDEwMDUyOSwgMTAwNTMzLCAKLSAgICAxMDA1MzcsIDEwMDU0MSwgMTAwNTQ1LCAxMDA1NDksIDEwMDU1MywgMTAwNTU3LCAxMDA1NjEsIDEwMDU2NSwgMTAwNTY5LCAKLSAgICAxMDA1NzMsIDEwMDU3NywgMTAwNTgxLCAxMDA1ODUsIDEwMDU4OSwgMTAwNTkzLCAxMDA1OTcsIDEwMDYwMSwgMTAwNjA1LCAKLSAgICAxMDA2MDksIDEwMDYxMywgMTAwNjE3LCAxMDA2MjEsIDEwMDYyNSwgMTAwNjI5LCAxMDA2MzMsIDEwMDYzNywgMTAwNjQxLCAKLSAgICAxMDA2NDUsIDEwMDY0OSwgMTAwNjUzLCAxMDA2NTcsIDEwMDY2MSwgMTAwNjY1LCAxMDA2NjksIDEwMDY3MywgMTAwNjc3LCAKLSAgICAxMDA2ODEsIDEwMDY4NSwgMTAwNjg5LCAxMDA2OTMsIDEwMDY5NywgMTAwNzAxLCAxMDA3MDUsIDEwMDcwOSwgMTAwNzEzLCAKLSAgICAxMDA3MTcsIDEwMDcyMSwgMTAwNzI1LCAxMDA3MjksIDEwMDczMywgMTAwNzM3LCAxMDA3NDEsIDEwMDc0NSwgMTAwNzQ5LCAKLSAgICAxMDA3NTMsIDEwMDc1NywgMTAwNzYxLCAxMDA3NjUsIDEwMDc2OSwgMTAwNzczLCAxMDA3NzcsIDEwMDc4MSwgMTAwNzg1LCAKLSAgICAxMDA3ODksIDEwMDc5MywgMTAwNzk3LCAxMDA4MDEsIDEwMDgwNSwgMTAwODA5LCAxMDA4MTMsIDEwMDgxNywgMTAwODIxLCAKLSAgICAxMDA4MjUsIDEwMDgyOSwgMTAwODMzLCAxMDA4MzcsIDEwMDg0MSwgMTAwODQ1LCAxMDA4NDksIDEwMDg1MywgMTAwODU3LCAKLSAgICAxMDA4NjEsIDEwMDg2NSwgMTAwODY5LCAxMDA4NzMsIDEwMDg3NywgMTAwODgxLCAxMDA4ODUsIDEwMDg4OSwgMTAwODkzLCAKLSAgICAxMDA4OTcsIDEwMDkwMSwgMTAwOTA1LCAxMDA5MDksIDEwMDkxMywgMTAwOTE3LCAxMDA5MjEsIDEwMDkyNSwgMTAwOTI5LCAKLSAgICAxMDA5MzMsIDEwMDkzNywgMTAwOTQxLCAxMDA5NDUsIDEwMDk0OSwgMTAwOTUzLCAxMDA5NTcsIDEwMDk2MSwgMTAwOTY1LCAKLSAgICAxMDA5NjksIDEwMDk3MywgMTAwOTc3LCAxMDA5ODEsIDEwMDk4NSwgMTAwOTg5LCAxMDA5OTMsIDEwMDk5NywgMTAxMDAxLCAKLSAgICAxMDEwMDUsIDEwMTAwOSwgMTAxMDEzLCAxMDEwMTcsIDEwMTAyMSwgMTAxMDI1LCAxMDEwMjksIDEwMTAzMywgMTAxMDM3LCAKLSAgICAxMDEwNDEsIDEwMTA0NSwgMTAxMDQ5LCAxMDEwNTMsIDEwMTA1NywgMTAxMDYxLCAxMDEwNjUsIDEwMTA2OSwgMTAxMDczLCAKLSAgICAxMDEwNzcsIDEwMTA4MSwgMTAxMDg1LCAxMDEwODksIDEwMTA5MywgMTAxMDk3LCAxMDExMDEsIDEwMTEwNSwgMTAxMTA5LCAKLSAgICAxMDExMTMsIDEwMTExNywgMTAxMTIxLCAxMDExMjUsIDEwMTEyOSwgMTAxMTMzLCAxMDExMzcsIDEwMTE0MSwgMTAxMTQ1LCAKLSAgICAxMDExNDksIDEwMTE1MywgMTAxMTU3LCAxMDExNjEsIDEwMTE2NSwgMTAxMTY5LCAxMDExNzMsIDEwMTE3NywgMTAxMTgxLCAKLSAgICAxMDExODUsIDEwMTE4OSwgMTAxMTkzLCAxMDExOTcsIDEwMTIwMSwgMTAxMjA1LCAxMDEyMDksIDEwMTIxMywgMTAxMjE3LCAKLSAgICAxMDEyMjEsIDEwMTIyNSwgMTAxMjI5LCAxMDEyMzMsIDEwMTIzNywgMTAxMjQxLCAxMDEyNDUsIDEwMTI0OSwgMTAxMjUzLCAKLSAgICAxMDEyNTcsIDEwMTI2MSwgMTAxMjY1LCAxMDEyNjksIDEwMTI3MywgMTAxMjc3LCAxMDEyODEsIDEwMTI4NSwgMTAxMjg5LCAKLSAgICAxMDEyOTMsIDEwMTI5NywgMTAxMzAxLCAxMDEzMDUsIDEwMTMwOSwgMTAxMzEzLCAxMDEzMTcsIDEwMTMyMSwgMTAxMzI1LCAKLSAgICAxMDEzMjksIDEwMTMzMywgMTAxMzM3LCAxMDEzNDEsIDEwMTM0NSwgMTAxMzQ5LCAxMDEzNTMsIDEwMTM1NywgMTAxMzYxLCAKLSAgICAxMDEzNjUsIDEwMTM2OSwgMTAxMzczLCAxMDEzNzcsIDEwMTM4MSwgMTAxMzg1LCAxMDEzODksIDEwMTM5MywgMTAxMzk3LCAKLSAgICAxMDE0MDEsIDEwMTQwNSwgMTAxNDA5LCAxMDE0MTMsIDEwMTQxNywgMTAxNDIxLCAxMDE0MjUsIDEwMTQyOSwgMTAxNDMzLCAKLSAgICAxMDE0MzcsIDEwMTQ0MSwgMTAxNDQ1LCAxMDE0NDksIDEwMTQ1MywgMTAxNDU3LCAxMDE0NjEsIDEwMTQ2NSwgMTAxNDY5LCAKLSAgICAxMDE0NzMsIDEwMTQ3NywgMTAxNDgxLCAxMDE0ODUsIDEwMTQ4OSwgMTAxNDkzLCAxMDE0OTcsIDEwMTUwMSwgMTAxNTA1LCAKLSAgICAxMDE1MDksIDEwMTUxMywgMTAxNTE3LCAxMDE1MjEsIDEwMTUyNSwgMTAxNTI5LCAxMDE1MzMsIDEwMTUzNywgMTAxNTQxLCAKLSAgICAxMDE1NDUsIDEwMTU0OSwgMTAxNTUzLCAxMDE1NTcsIDEwMTU2MSwgMTAxNTY1LCAxMDE1NjksIDEwMTU3MywgMTAxNTc3LCAKLSAgICAxMDE1ODEsIDEwMTU4NSwgMTAxNTg5LCAxMDE1OTMsIDEwMTU5NywgMTAxNjAxLCAxMDE2MDUsIDEwMTYwOSwgMTAxNjEzLCAKLSAgICAxMDE2MTcsIDEwMTYyMSwgMTAxNjI1LCAxMDE2MjksIDEwMTYzMywgMTAxNjM3LCAxMDE2NDEsIDEwMTY0NSwgMTAxNjQ5LCAKLSAgICAxMDE2NTMsIDEwMTY1NywgMTAxNjYxLCAxMDE2NjUsIDEwMTY2OSwgMTAxNjczLCAxMDE2NzcsIDEwMTY4MSwgMTAxNjg1LCAKLSAgICAxMDE2ODksIDEwMTY5MywgMTAxNjk3LCAxMDE3MDEsIDEwMTcwNSwgMTAxNzA5LCAxMDE3MTMsIDEwMTcxNywgMTAxNzIxLCAKLSAgICAxMDE3MjUsIDEwMTcyOSwgMTAxNzMzLCAxMDE3MzcsIDEwMTc0MSwgMTAxNzQ1LCAxMDE3NDksIDEwMTc1MywgMTAxNzU3LCAKLSAgICAxMDE3NjEsIDEwMTc2NSwgMTAxNzY5LCAxMDE3NzMsIDEwMTc3NywgMTAxNzgxLCAxMDE3ODUsIDEwMTc4OSwgMTAxNzkzLCAKLSAgICAxMDE3OTcsIDEwMTgwMSwgMTAxODA1LCAxMDE4MDksIDEwMTgxMywgMTAxODE3LCAxMDE4MjEsIDEwMTgyNSwgMTAxODI5LCAKLSAgICAxMDE4MzMsIDEwMTgzNywgMTAxODQxLCAxMDE4NDUsIDEwMTg0OSwgMTAxODUzLCAxMDE4NTcsIDEwMTg2MSwgMTAxODY1LCAKLSAgICAxMDE4NjksIDEwMTg3MywgMTAxODc3LCAxMDE4ODEsIDEwMTg4NSwgMTAxODg5LCAxMDE4OTMsIDEwMTg5NywgMTAxOTAxLCAKLSAgICAxMDE5MDUsIDEwMTkwOSwgMTAxOTEzLCAxMDE5MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMTkyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAxOTI1LCAKLSAgICAxMDE5MjgsIDEwMTkzMiwgMTAxOTM2LCAxMDE5MzksIDEwMTk0MywgMTAxOTQ3LCAxMDE5NTAsIDEwMTk1MywgMTAxOTU3LCAKLSAgICAxMDE5NjEsIDEwMTk2NCwgMTAxOTY3LCAxMDE5NzAsIDEwMTk3MywgMTAxOTc4LCAxMDE5ODEsIDEwMTk4NSwgMTAxOTg4LCAKLSAgICAxMDE5OTEsIDEwMTk5NCwgMTAxOTk3LCAxMDIwMDAsIDEwMjAwMywgMTAyMDA2LCAxMDIwMDksIDEwMjAxMiwgMTAyMDE1LCAKLSAgICAxMDIwMTgsIDEwMjAyMiwgMTAyMDI2LCAxMDIwMzAsIDEwMjAzNCwgMTAyMDM5LCAxMDIwNDQsIDEwMjA1MCwgMTAyMDU2LCAKLSAgICAxMDIwNjIsIDEwMjA2NywgMTAyMDczLCAxMDIwNzgsIDEwMjA4MywgMTAyMDg4LCAxMDIwOTQsIDEwMjEwMCwgMTAyMTA1LCAKLSAgICAxMDIxMTAsIDEwMjExNSwgMTAyMTIwLCAxMDIxMjYsIDEwMjEzMiwgMTAyMTM3LCAxMDIxNDIsIDEwMjE0OCwgMTAyMTUzLCAKLSAgICAxMDIxNTgsIDEwMjE2NCwgMTAyMTcwLCAxMDIxNzYsIDEwMjE4MiwgMTAyMTg2LCAxMDIxOTEsIDEwMjE5NSwgMTAyMjAwLCAKLSAgICAxMDIyMDQsIDEwMjIwOSwgMTAyMjE0LCAxMDIyMjAsIDEwMjIyNiwgMTAyMjMyLCAxMDIyMzcsIDEwMjI0MywgMTAyMjQ4LCAKLSAgICAxMDIyNTMsIDEwMjI1OCwgMTAyMjY0LCAxMDIyNzAsIDEwMjI3NSwgMTAyMjgwLCAxMDIyODUsIDEwMjI5MCwgMTAyMjk2LCAKLSAgICAxMDIzMDIsIDEwMjMwNywgMTAyMzEyLCAxMDIzMTgsIDEwMjMyMywgMTAyMzI4LCAxMDIzMzQsIDEwMjM0MCwgMTAyMzQ2LCAKLSAgICAxMDIzNTIsIDEwMjM1NywgMTAyMzYxLCAxMDIzNjYsIDEwMjM2OCwgMTAyMzcyLCAxMDIzNzUsIDEwMjM3OCwgMTAyMzgxLCAKLSAgICAxMDIzODQsIDEwMjM4NywgMTAyMzkwLCAxMDIzOTMsIDEwMjM5NiwgMTAyMzk5LCAxMDI0MDIsIDEwMjQwNSwgMTAyNDA4LCAKLSAgICAxMDI0MTEsIDEwMjQxNCwgMTAyNDE3LCAxMDI0MjAsIDEwMjQyMywgMTAyNDI2LCAxMDI0MjksIDEwMjQzMiwgMTAyNDM1LCAKLSAgICAxMDI0MzgsIDEwMjQ0MSwgMTAyNDQ0LCAxMDI0NDcsIDEwMjQ1MCwgMTAyNDUzLCAxMDI0NTYsIDEwMjQ1OSwgMTAyNDYyLCAKLSAgICAxMDI0NjUsIDEwMjQ2OCwgMTAyNDcxLCAxMDI0NzQsIDEwMjQ3NywgMTAyNDgwLCAxMDI0ODMsIDEwMjQ4NiwgMTAyNDg5LCAKLSAgICAxMDI0OTIsIDEwMjQ5NSwgMTAyNDk4LCAxMDI1MDEsIDEwMjUwNCwgMTAyNTA3LCAxMDI1MTAsIDEwMjUxMywgMTAyNTE2LCAKLSAgICAxMDI1MTksIDEwMjUyMiwgMTAyNTI1LCAxMDI1MjgsIDEwMjUzMSwgMTAyNTM0LCAxMDI1MzcsIDEwMjU0MCwgMTAyNTQzLCAKLSAgICAxMDI1NDYsIDEwMjU0OSwgMTAyNTUyLCAxMDI1NTUsIDEwMjU1OCwgMTAyNTYxLCAxMDI1NjQsIDEwMjU2NywgMTAyNTcwLCAKLSAgICAxMDI1NzMsIDEwMjU3NiwgMTAyNTc5LCAxMDI1ODIsIDEwMjU4NSwgMTAyNTg4LCAxMDI1OTEsIDEwMjU5NCwgMTAyNTk3LCAKLSAgICAxMDI2MDAsIDEwMjYwMywgMTAyNjA2LCAxMDI2MDksIDEwMjYxMiwgMTAyNjE1LCAxMDI2MTgsIDEwMjYyMSwgMTAyNjI0LCAKLSAgICAxMDI2MjcsIDEwMjYzMCwgMTAyNjMzLCAxMDI2MzYsIDEwMjYzOSwgMTAyNjQyLCAxMDI2NDUsIDEwMjY0OCwgMTAyNjUxLCAKLSAgICAxMDI2NTQsIDEwMjY1NywgMTAyNjYwLCAxMDI2NjMsIDEwMjY2NiwgMTAyNjY5LCAxMDI2NzIsIDEwMjY3NSwgMTAyNjc4LCAKLSAgICAxMDI2ODEsIDEwMjY4NCwgMTAyNjg3LCAxMDI2OTAsIDEwMjY5MywgMTAyNjk2LCAxMDI2OTksIDEwMjcwMiwgMTAyNzA1LCAKLSAgICAxMDI3MDgsIDEwMjcxMSwgMTAyNzE0LCAxMDI3MTcsIDEwMjcyMCwgMTAyNzIzLCAxMDI3MjYsIDEwMjcyOSwgMTAyNzMyLCAKLSAgICAxMDI3MzUsIDEwMjczOCwgMTAyNzQxLCAxMDI3NDQsIDEwMjc0NywgMTAyNzUwLCAxMDI3NTMsIDEwMjc1NiwgMTAyNzU5LCAKLSAgICAxMDI3NjIsIDEwMjc2NSwgMTAyNzY4LCAxMDI3NzEsIDEwMjc3NCwgMTAyNzc3LCAxMDI3ODAsIDEwMjc4MywgMTAyNzg2LCAKLSAgICAxMDI3ODksIDEwMjc5MiwgMTAyNzk1LCAxMDI3OTgsIDEwMjgwMSwgMTAyODA0LCAxMDI4MDcsIDEwMjgxMCwgMTAyODEzLCAKLSAgICAxMDI4MTYsIDEwMjgxOSwgMTAyODIyLCAxMDI4MjUsIDEwMjgyOCwgMTAyODMxLCAxMDI4MzQsIDEwMjgzNywgMTAyODQwLCAKLSAgICAxMDI4NDMsIDEwMjg0NiwgMTAyODQ5LCAxMDI4NTIsIDEwMjg1NSwgMTAyODU4LCAxMDI4NjEsIDEwMjg2NCwgMTAyODY3LCAKLSAgICAxMDI4NzAsIDEwMjg3MywgMTAyODc2LCAxMDI4NzksIDEwMjg4MiwgMTAyODg1LCAxMDI4ODgsIDEwMjg5MSwgMTAyODk0LCAKLSAgICAxMDI4OTcsIDEwMjkwMCwgMTAyOTAzLCAxMDI5MDYsIDEwMjkwOSwgMTAyOTEyLCAxMDI5MTUsIDEwMjkxOCwgMTAyOTIxLCAKLSAgICAxMDI5MjQsIDEwMjkyNywgMTAyOTMwLCAxMDI5MzMsIDEwMjkzNiwgMTAyOTM5LCAxMDI5NDIsIDEwMjk0NSwgMTAyOTQ4LCAKLSAgICAxMDI5NTEsIDEwMjk1NCwgMTAyOTU3LCAxMDI5NjAsIDEwMjk2MywgMTAyOTY2LCAxMDI5NjksIDEwMjk3MiwgMTAyOTc1LCAKLSAgICAxMDI5NzgsIDEwMjk4MSwgMTAyOTg0LCAxMDI5ODcsIDEwMjk5MCwgMTAyOTkzLCAxMDI5OTYsIDEwMjk5OSwgMTAzMDAyLCAKLSAgICAxMDMwMDUsIDEwMzAwOCwgMTAzMDExLCAxMDMwMTQsIDEwMzAxNywgMTAzMDIwLCAxMDMwMjMsIDEwMzAyNiwgMTAzMDI5LCAKLSAgICAxMDMwMzIsIDEwMzAzNSwgMTAzMDM4LCAxMDMwNDEsIDEwMzA0NCwgMTAzMDQ3LCAxMDMwNTAsIDEwMzA1MywgMTAzMDU2LCAKLSAgICAxMDMwNTksIDEwMzA2MiwgMTAzMDY1LCAxMDMwNjgsIDEwMzA3MSwgMTAzMDc0LCAxMDMwNzcsIDEwMzA4MCwgMTAzMDgzLCAKLSAgICAxMDMwODYsIDEwMzA4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTE0OTIyLCAxMTQ5MjUsIDExNDkyOSwgMTE0OTMzLCAxMTQ5MzYsIDExNDk0MCwgMTE0OTQ0LCAxMTQ5NDcsIAorICAgIDExNDk1MCwgMTE0OTU0LCAxMTQ5NTgsIDExNDk2MSwgMTE0OTY0LCAxMTQ5NjcsIDExNDk3MCwgMTE0OTc1LCAxMTQ5NzgsIAorICAgIDExNDk4MiwgMTE0OTg1LCAxMTQ5ODgsIDExNDk5MSwgMTE0OTk0LCAxMTQ5OTcsIDExNTAwMCwgMTE1MDAzLCAxMTUwMDYsIAorICAgIDExNTAwOSwgMTE1MDEyLCAxMTUwMTUsIDExNTAxOSwgMTE1MDIzLCAxMTUwMjcsIDExNTAzMSwgMTE1MDM2LCAxMTUwNDEsIAorICAgIDExNTA0NywgMTE1MDUzLCAxMTUwNTksIDExNTA2NCwgMTE1MDcwLCAxMTUwNzYsIDExNTA4MiwgMTE1MDg3LCAxMTUwOTMsIAorICAgIDExNTA5OSwgMTE1MTA0LCAxMTUxMDksIDExNTExNCwgMTE1MTE5LCAxMTUxMjUsIDExNTEzMSwgMTE1MTM2LCAxMTUxNDEsIAorICAgIDExNTE0NywgMTE1MTUyLCAxMTUxNTgsIDExNTE2NCwgMTE1MTcwLCAxMTUxNzYsIDExNTE4MiwgMTE1MTg2LCAxMTUxOTEsIAorICAgIDExNTE5NSwgMTE1MjAwLCAxMTUyMDQsIDExNTIwOSwgMTE1MjE0LCAxMTUyMjAsIDExNTIyNiwgMTE1MjMyLCAxMTUyMzcsIAorICAgIDExNTI0MywgMTE1MjQ5LCAxMTUyNTUsIDExNTI2MCwgMTE1MjY2LCAxMTUyNzIsIDExNTI3NywgMTE1MjgyLCAxMTUyODcsIAorICAgIDExNTI5MiwgMTE1Mjk4LCAxMTUzMDQsIDExNTMwOSwgMTE1MzE0LCAxMTUzMjAsIDExNTMyNSwgMTE1MzMxLCAxMTUzMzcsIAorICAgIDExNTM0MywgMTE1MzQ5LCAxMTUzNTUsIDExNTM2MCwgMTE1MzY0LCAxMTUzNjksIDExNTM3MiwgMTE1Mzc2LCAxMTUzNzksIAorICAgIDExNTM4MiwgMTE1Mzg1LCAxMTUzODgsIDExNTM5MSwgMTE1Mzk0LCAxMTUzOTcsIDExNTQwMCwgMTE1NDAzLCAxMTU0MDYsIAorICAgIDExNTQwOSwgMTE1NDEyLCAxMTU0MTUsIDExNTQxOCwgMTE1NDIxLCAxMTU0MjQsIDExNTQyNywgMTE1NDMwLCAxMTU0MzMsIAorICAgIDExNTQzNiwgMTE1NDM5LCAxMTU0NDIsIDExNTQ0NSwgMTE1NDQ4LCAxMTU0NTEsIDExNTQ1NCwgMTE1NDU3LCAxMTU0NjAsIAorICAgIDExNTQ2MywgMTE1NDY2LCAxMTU0NjksIDExNTQ3MiwgMTE1NDc1LCAxMTU0NzgsIDExNTQ4MSwgMTE1NDg0LCAxMTU0ODcsIAorICAgIDExNTQ5MCwgMTE1NDkzLCAxMTU0OTYsIDExNTQ5OSwgMTE1NTAyLCAxMTU1MDUsIDExNTUwOCwgMTE1NTExLCAxMTU1MTQsIAorICAgIDExNTUxNywgMTE1NTIwLCAxMTU1MjMsIDExNTUyNiwgMTE1NTI5LCAxMTU1MzIsIDExNTUzNSwgMTE1NTM4LCAxMTU1NDEsIAorICAgIDExNTU0NCwgMTE1NTQ3LCAxMTU1NTAsIDExNTU1MywgMTE1NTU2LCAxMTU1NTksIDExNTU2MiwgMTE1NTY1LCAxMTU1NjgsIAorICAgIDExNTU3MSwgMTE1NTc0LCAxMTU1NzcsIDExNTU4MCwgMTE1NTgzLCAxMTU1ODYsIDExNTU4OSwgMTE1NTkyLCAxMTU1OTUsIAorICAgIDExNTU5OCwgMTE1NjAxLCAxMTU2MDQsIDExNTYwNywgMTE1NjEwLCAxMTU2MTMsIDExNTYxNiwgMTE1NjE5LCAxMTU2MjIsIAorICAgIDExNTYyNSwgMTE1NjI4LCAxMTU2MzEsIDExNTYzNCwgMTE1NjM3LCAxMTU2NDAsIDExNTY0MywgMTE1NjQ2LCAxMTU2NDksIAorICAgIDExNTY1MiwgMTE1NjU1LCAxMTU2NTgsIDExNTY2MSwgMTE1NjY0LCAxMTU2NjcsIDExNTY3MCwgMTE1NjczLCAxMTU2NzYsIAorICAgIDExNTY3OSwgMTE1NjgyLCAxMTU2ODUsIDExNTY4OCwgMTE1NjkxLCAxMTU2OTQsIDExNTY5NywgMTE1NzAwLCAxMTU3MDMsIAorICAgIDExNTcwNiwgMTE1NzA5LCAxMTU3MTIsIDExNTcxNSwgMTE1NzE4LCAxMTU3MjEsIDExNTcyNCwgMTE1NzI3LCAxMTU3MzAsIAorICAgIDExNTczMywgMTE1NzM2LCAxMTU3MzksIDExNTc0MiwgMTE1NzQ1LCAxMTU3NDgsIDExNTc1MSwgMTE1NzU0LCAxMTU3NTcsIAorICAgIDExNTc2MCwgMTE1NzYzLCAxMTU3NjYsIDExNTc2OSwgMTE1NzcyLCAxMTU3NzUsIDExNTc3OCwgMTE1NzgxLCAxMTU3ODQsIAorICAgIDExNTc4NywgMTE1NzkwLCAxMTU3OTMsIDExNTc5NiwgMTE1Nzk5LCAxMTU4MDIsIDExNTgwNSwgMTE1ODA4LCAxMTU4MTEsIAorICAgIDExNTgxNCwgMTE1ODE3LCAxMTU4MjAsIDExNTgyMywgMTE1ODI2LCAxMTU4MjksIDExNTgzMiwgMTE1ODM1LCAxMTU4MzgsIAorICAgIDExNTg0MSwgMTE1ODQ0LCAxMTU4NDcsIDExNTg1MCwgMTE1ODUzLCAxMTU4NTYsIDExNTg1OSwgMTE1ODYyLCAxMTU4NjUsIAorICAgIDExNTg2OCwgMTE1ODcxLCAxMTU4NzQsIDExNTg3NywgMTE1ODgwLCAxMTU4ODMsIDExNTg4NiwgMTE1ODg5LCAxMTU4OTIsIAorICAgIDExNTg5NSwgMTE1ODk4LCAxMTU5MDEsIDExNTkwNCwgMTE1OTA3LCAxMTU5MTAsIDExNTkxMywgMTE1OTE2LCAxMTU5MTksIAorICAgIDExNTkyMiwgMTE1OTI1LCAxMTU5MjgsIDExNTkzMSwgMTE1OTM0LCAxMTU5MzcsIDExNTk0MCwgMTE1OTQzLCAxMTU5NDYsIAorICAgIDExNTk0OSwgMTE1OTUyLCAxMTU5NTUsIDExNTk1OCwgMTE1OTYxLCAxMTU5NjQsIDExNTk2NywgMTE1OTcwLCAxMTU5NzMsIAorICAgIDExNTk3NiwgMTE1OTc5LCAxMTU5ODIsIDExNTk4NSwgMTE1OTg4LCAxMTU5OTEsIDExNTk5NCwgMTE1OTk3LCAxMTYwMDAsIAorICAgIDExNjAwMywgMTE2MDA2LCAxMTYwMDksIDExNjAxMiwgMTE2MDE1LCAxMTYwMTgsIDExNjAyMSwgMTE2MDI0LCAxMTYwMjcsIAorICAgIDExNjAzMCwgMTE2MDMzLCAxMTYwMzYsIDExNjAzOSwgMTE2MDQyLCAxMTYwNDUsIDExNjA0OCwgMTE2MDUxLCAxMTYwNTQsIAorICAgIDExNjA1NywgMTE2MDYwLCAxMTYwNjMsIDExNjA2NiwgMTE2MDY5LCAxMTYwNzIsIDExNjA3NSwgMTE2MDc4LCAxMTYwODEsIAorICAgIDExNjA4NCwgMTE2MDg3LCAxMTYwOTAsIDExNjA5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgCiB9OwogCiAvKiBuYW1lLT5jb2RlIGRpY3Rpb25hcnkgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29kZV9oYXNoW10gPSB7Ci0gICAgNzQyMjQsIDQ4NTEsIDAsIDAsIDAsIDAsIDc5MjksIDAsIDE5NDY4MiwgMCwgMCwgNjY0ODAsIDAsIDQyODMzLCA3NDUyOSwgCi0gICAgMTIwNjQsIDAsIDU5NiwgMCwgMCwgNjU4NDIsIDg2NTEsIDAsIDAsIDEyMDIxOCwgMTI5OTUsIDY0ODY1LCAxMzczLCAwLCAwLCAKLSAgICA1ODE2LCAxMTkwNjcsIDY0ODEwLCA0MjMxLCA5MTc4MzMsIDAsIDQyMzMsIDQyMzQsIDQyMzIsIDkxNzgzNiwgMCwgCi0gICAgMTIwMjEwLCA5MTc4NDEsIDkxNzg0MCwgMCwgODg1MSwgMCwgMCwgMCwgNDE2MDEsIDg4NzQsIDAsIDc3NDgsIDAsIDAsIDAsIAotICAgIDAsIDQxNjAzLCA5Nzg0LCAwLCA5MTg4LCA0MTYwMCwgMCwgMCwgMCwgMTQ1NywgMzUzNSwgMCwgMCwgMCwgMCwgNjUyNDAsIAotICAgIDExOTUxLCAwLCAzNDA0LCAwLCAwLCAwLCAxNzU5LCAwLCAxOTQ5NjQsIDAsIDAsIDAsIDY2NTc3LCAwLCAwLCA2NTg1OSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNjU5MzAsIDk4MzQsIDMwNTUsIDk4NTIsIDAsIDY1Mjg4LCAwLCAxMTM5OCwgMCwgMCwgMTE5MjU1LCAKLSAgICAwLCAwLCA2MDMsIDAsIDQzNTQ4LCAwLCAwLCA5MTc4MjQsIDMzNTAsIDEyMDgxNywgNjQzMTgsIDkxNzgyOCwgMTI3MDg5LCAKLSAgICAzMzkwLCA3NDQ4MywgNDMyNjUsIDEyMDU5OSwgOTE3ODMwLCA5MTc4MjksIDAsIDE5MTksIDM0MDAsIDAsIDkxNzgxMywgMCwgCi0gICAgOTE3NTQwLCA2NjQ0NiwgNjQxNDEsIDg1NjIsIDY0MTM5LCA2NDEzOCwgNDA0MywgODcxMiwgNjQxMzQsIDY0MTMzLCAKLSAgICAxMTI5NywgMCwgMCwgMTE5NjYsIDY0MTI4LCAwLCAwLCAwLCA2NDEzMiwgMTA4NjcsIDY0MTMwLCA2NDEyOSwgMCwgMCwgCi0gICAgOTc3OSwgMjc2NCwgNjYwMDIsIDAsIDk0NzEsIDAsIDY2MDIxLCAwLCAwLCA1NDU3LCA1NDQwLCA4ODU3LCAwLCA2NTI4MiwgCi0gICAgMjg0MywgNTM1NSwgMCwgMCwgMCwgNTE5NCwgMTE2NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzAyNywgMTA3MTcsIDY0NTcwLCAKLSAgICA1NjMwLCA3NDM1MCwgNjQxNDMsIDEwNjgyLCAwLCAxMDYwMiwgODAwLCA0MjQ5OSwgNjYxODYsIDAsIDAsIDY0OTMwLCAKLSAgICAxMTYzMSwgNjQxNDYsIDY0MTQ1LCA2NDE0NCwgNzYyLCAxMzE3MiwgMTE4ODU5LCAwLCAwLCAxMDkwNiwgMTM1MywgNjk2MCwgCi0gICAgMCwgMCwgNTgyOCwgODcyNCwgOTE3ODA2LCA4OTMzLCAxNjAxLCA0MjI0NCwgODU4LCA3MDgwLCA5MTc4MDgsIDkxNzgwNywgCi0gICAgODA5MCwgMCwgNzQ0MDEsIDkxNzgxMSwgNTg3LCAwLCAwLCAwLCAwLCAwLCAwLCAyNzUwLCAwLCA1NTYsIDY0MTU4LCAKLSAgICA2NDE1NywgMCwgMTIyMTMsIDAsIDI3NjAsIDAsIDAsIDAsIDAsIDY0MTU2LCA2NDE1NSwgNDI0OTYsIDAsIDY0MTUxLCAKLSAgICA2NDE1MCwgMTI2NzksIDEwMDUzLCAxMDQyMSwgMTE3ODcsIDY0MTUzLCA2NDE1MiwgMCwgMCwgNDgzOSwgMCwgMCwgMTg3NCwgCi0gICAgMTIwMzUyLCAwLCA2NTc3LCA2NDEyNSwgNjQxMjQsIDY0MTIzLCAwLCAwLCAwLCA3MDA3LCA3NTkwLCA2NTQ0MywgOTAzNiwgCi0gICAgMCwgNjQxMjIsIDc0NDIyLCA2NjYwOSwgMCwgNjQxMTcsIDY0MTE2LCA2Mjg3LCA2NDExNCwgMjcyNSwgNjQxMjAsIDY0MTE5LCAKLSAgICA2NDExOCwgNDIxMjgsIDAsIDExNzcsIDY1NjAxLCAxMjMyMiwgNjQxMDYsIDAsIDAsIDY0MTAyLCA3ODU5LCAxOTQ1LCAKLSAgICA2NDA5OSwgMCwgMTA0NTMsIDY0MTA0LCA3MTg4LCA3OTk3LCAwLCAwLCAwLCA4NzA1LCA2NDA5NywgNjQwOTYsIDk1NzEsIAotICAgIDUyOCwgOTE3OTg5LCAwLCAxMTQyOSwgMCwgMCwgMCwgMCwgNzM4NDEsIDAsIDAsIDkwNTYsIDAsIDYxODgsIDEyMDAxOSwgCi0gICAgNjE1NSwgNjQwNjgsIDE4MjMsIDY0MDY2LCA2NDA2NSwgNjQwNzIsIDY0MDcxLCA2MywgNzIzMywgMCwgMCwgNDE5MDQsIAotICAgIDY2MzksIDY0MDY0LCAwLCAwLCAwLCAxMTc2LCAxMTg5NTksIDAsIDgxNjIsIDAsIDAsIDAsIDEyMDUxOSwgNjYzNzYsIAotICAgIDY2MjQyLCAxMTQxNSwgNDMzMywgOTg1NSwgNjQxMTIsIDY0NjQyLCAwLCA1Mzg4LCAwLCAwLCAwLCA3NzE0LCA2NjIyMiwgMCwgCi0gICAgNzc2OCwgMCwgNDE5OSwgNjQ3MDgsIDAsIDAsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgODk5NiwgNDk5MiwgCi0gICAgNDQ3MSwgNDI2MjIsIDY0MDc5LCA2NDA3OCwgMCwgMCwgMCwgMCwgNjQ2MTUsIDAsIDAsIDEyMDc1LCAwLCAwLCA1MTc0LCAwLCAKLSAgICAwLCAwLCAzMTIzLCAwLCAxMjY4NSwgMCwgODQwOCwgNjQ3MDQsIDAsIDAsIDkyMjMsIDAsIDQxNjE2LCAwLCA3Mzc5NywgMCwgCi0gICAgMTExNiwgMCwgNDMwNDksIDAsIDQzMDUwLCA4NTQ4LCAwLCAwLCAxMTkwNjEsIDAsIDAsIDEzMTE1LCA2NDA5MiwgNjQwOTEsIAotICAgIDkzMjIsIDAsIDEyMDU5NSwgNjQwOTUsIDY0MDk0LCA4MTExLCA2NjI0NywgNDIzMzIsIDY0MDg5LCA2NDA4OCwgNjE5OSwgMCwgCi0gICAgMCwgMTE0MzQsIDY0MDgzLCA2NDA4MiwgMTEzMjksIDc3MzcsIDY0MDg3LCA2NDA4NiwgNjQwODUsIDY0MDg0LCAwLCAwLCAKLSAgICA0MTMzNSwgNDExOCwgMTc5NywgMCwgNDEzMzQsIDAsIDQ2LCAwLCAwLCAyOTgsIDAsIDAsIDAsIDQyNjI3LCAwLCAzMiwgCi0gICAgNjE4NywgMTE5MDUyLCAxMTQ5NSwgMTE0NTksIDM2NjUsIDAsIDQyODcxLCAwLCAxOTkyMywgNzQzMzUsIDAsIDAsIDY2MjM5LCAKLSAgICAwLCA2NDQwMywgNDQxMiwgNzI0MCwgMCwgMCwgMCwgNjU3NTgsIDEyNzUwLCA0MTgxLCA4NTQ0LCAwLCAxMjAxOTksIDAsIAotICAgIDEyMDE5OCwgMTIwMjAzLCA2MTgxLCA2NTAxNCwgMCwgMCwgMCwgMzYzOSwgMTE5NTg4LCAwLCAwLCAwLCAxMDA3MywgCi0gICAgMTIwMjA2LCAwLCAwLCAwLCA0Mjg0NCwgNzQ5OCwgMTA5OCwgMCwgMCwgMCwgMCwgMTAyMDcsIDg3ODksIDAsIDAsIDAsIDAsIAotICAgIDkyMzQsIDAsIDYxODIsIDAsIDY1MDU4LCAwLCAwLCAwLCAwLCA1NDcxLCA5NDYxLCA1NTczLCAxMTg5MzYsIDU0NzMsIDQ0LCAKLSAgICAwLCA2NjI0NCwgMTE4OTA3LCAwLCA2NjIzOCwgMTI4NDQsIDAsIDE2MjIsIDc3NjcsIDE5MDAsIDQxMzM5LCAxMTQ1OCwgMCwgCi0gICAgMCwgNjU4MSwgNTU3NiwgMCwgNjQ0MDUsIDQxMzM3LCAwLCAwLCA4OTQ3LCAwLCAwLCA0MTY5NCwgMCwgMCwgNzkwOCwgMCwgCi0gICAgMTA0MDgsIDY1NzksIDAsIDE5NDgyOSwgMCwgMCwgMCwgNjU4MywgNzc2MSwgMTI3MDEwLCAxMjA1MDQsIDE5NDgyOCwgMCwgCi0gICAgNTA1OCwgNDEwMTAsIDk5OTIsIDAsIDUwNTcsIDAsIDAsIDc0NTM4LCA1MDU0LCAxMTg5NTEsIDE5NDk3MSwgMCwgMCwgCi0gICAgMTQzNywgNDE2MTcsIDY1OCwgMzQ5NywgMCwgNzQ4NiwgNTA2MSwgNTA2MCwgNDIzNSwgMCwgMCwgMCwgMTIxMTMsIDQyMzYsIAotICAgIDQ3MjcsIDAsIDAsIDc2OTMsIDEwNzQ5LCAwLCA3NDg4LCA1NzczLCA5NzgsIDAsIDAsIDQxNjE5LCAxMDIzOSwgMCwgMCwgCi0gICAgNjYyMDksIDAsIDAsIDk3NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkzNDEsIAotICAgIDExOTU5NiwgMjM3OSwgMTEzMjUsIDAsIDY0NjY4LCA2Nzg1NCwgODEyNSwgMTIwNTQ1LCAwLCAxMTkxNzUsIDkxNzk0MCwgCi0gICAgMjM2OSwgMCwgMCwgMCwgMTE5MjM1LCA3NDA5MiwgNzM5MzYsIDcwMDgsIDAsIDAsIDAsIDAsIDIzNjcsIDAsIDAsIDI2NCwgCi0gICAgMjM3NSwgODA2MCwgNjE5NCwgMTE5ODU4LCAxODQ0LCAxMTkwODQsIDAsIDEyODU4LCAwLCAwLCA2OTYxLCAwLCAwLCAwLCAKLSAgICA4ODAwLCAwLCA0Mjg2MiwgNDQ2MywgNjU1ODEsIDYxOTIsIDE5NDY3NiwgNDI3NzEsIDAsIDAsIDcyNSwgNjUwNDIsIAorICAgIDc0MjI0LCA0ODUxLCAwLCA3ODE1NiwgNzg0OTksIDAsIDc5MjksIDAsIDE5NDY4MiwgMCwgNzg1MDAsIDY2NDgwLCAwLCAKKyAgICA0MjgzMywgNzQ1MjksIDEyMDY0LCAwLCA1OTYsIDAsIDAsIDEzMTkyLCA4NjUxLCAwLCAwLCAxMjAyMTgsIDEyOTk1LCAKKyAgICA2NDg2NSwgMTM3MywgMCwgMCwgNTgxNiwgMTE5MDY3LCA2NDgxMCwgNDIzMSwgNjgyNSwgMCwgNDIzMywgNDIzNCwgNDIzMiwgCisgICAgOTE3ODM2LCA3NDQxNSwgMTIwMjEwLCA2Mzg0LCA5MTc4NDAsIDc4MTA4LCA4ODUxLCAwLCAwLCAwLCA0MTYwMSwgODg3NCwgCisgICAgMCwgNzc0OCwgMCwgMCwgMCwgMCwgNDE2MDMsIDk3ODQsIDAsIDkxODgsIDQxNjAwLCAwLCAxMjA2MTgsIDAsIDE0NTcsIAorICAgIDM1MzUsIDAsIDAsIDAsIDAsIDY1MjQwLCAxMTk1MSwgMCwgMzQwNCwgMCwgMCwgMCwgMTc1OSwgMCwgNDEwNzYsIDY4MzgzLCAKKyAgICAxMjA1NzIsIDExOTIwNSwgNjY1NzcsIDAsIDAsIDY1ODU5LCAwLCA3NDA0LCAwLCAwLCAwLCAwLCA2NTkwOCwgOTgzNCwgCisgICAgMzA1NSwgOTg1MiwgMCwgNjUyODgsIDAsIDExMzk4LCAwLCAwLCAxMTkyNTUsIDAsIDAsIDYwMywgNzQzOTgsIDQzNTQ4LCAwLCAKKyAgICAwLCA5MTc4MjQsIDMzNTAsIDEyMDgxNywgNjQzMTgsIDkxNzgyOCwgMTI3MDg5LCAzMzkwLCA3NDQ4MywgNDMyNjUsIAorICAgIDEyMDU5OSwgOTE3ODMwLCA3ODU3MywgMCwgMTkxOSwgMzQwMCwgMCwgOTE3ODEzLCAwLCA5MTc1NDAsIDY2NDQ2LCA2NDE0MSwgCisgICAgODU2MiwgNjQxMzksIDY0MTM4LCA0MDQzLCA4NzEyLCA2NDEzNCwgNjQxMzMsIDExMjk3LCAwLCAwLCAxMTk2NiwgNjQxMjgsIAorICAgIDAsIDAsIDAsIDY0MTMyLCAxMDg2NywgNjQxMzAsIDY0MTI5LCAwLCA0MzM3NCwgOTc3OSwgMjc2NCwgNjYwMDIsIDEwMTY3LCAKKyAgICA5NDcxLCAwLCA2NjAyMSwgMCwgMCwgNTQ1NywgNTQ0MCwgODg1NywgMCwgNjUyODIsIDI4NDMsIDUzNTUsIDAsIDAsIDAsIAorICAgIDUxOTQsIDExNjU3LCA0Mzk4NCwgMCwgMCwgMCwgMCwgMCwgMTI3MDI3LCAxMDcxNywgNjQ1NzAsIDU2MzAsIDc0MzUwLCAKKyAgICA2NDE0MywgMTA2ODIsIDAsIDEwNjAyLCA4MDAsIDQyNDk5LCA2NjE4NiwgMCwgMCwgNjQ5MzAsIDExNjMxLCA2NDE0NiwgCisgICAgNjQxNDUsIDY0MTQ0LCA3NjIsIDEzMTcyLCAxMTg4NTksIDE5NDY2MSwgNjQ0NjgsIDEwOTA2LCAxMzUzLCA2OTYwLCAwLCAwLCAKKyAgICA1ODI4LCA4NzI0LCA5MTc4MDYsIDg5MzMsIDE2MDEsIDQyMjQ0LCA4NTgsIDcwODAsIDY0MTA5LCA2NDEwOCwgODA5MCwgMCwgCisgICAgNzQ0MDEsIDkxNzgxMSwgNTg3LCAwLCAwLCAwLCAwLCAwLCA3ODIxNCwgMjc1MCwgMCwgNTU2LCA2NDE1OCwgNjQxNTcsIDAsIAorICAgIDEyMjEzLCAxOTQ2NzgsIDI3NjAsIDAsIDAsIDAsIDAsIDY0MTU2LCA2NDE1NSwgNDI0OTYsIDAsIDY0MTUxLCA2NDE1MCwgCisgICAgMTI2NzksIDEwMDUzLCAxMDQyMSwgMTEwOTMsIDY0MTUzLCA2NDE1MiwgMCwgMCwgNDgzOSwgMCwgMCwgMTg3NCwgMTE5MDE2LCAKKyAgICAwLCA2NTc3LCA2NDEyNSwgNjQxMjQsIDY0MTIzLCAwLCAwLCAwLCA3MDA3LCA3NTkwLCA2NTQ0MywgOTAzNiwgMCwgNjQxMjIsIAorICAgIDc0NDIyLCA2NjYwOSwgMCwgNjQxMTcsIDY0MTE2LCA2Mjg3LCA2NDExNCwgMjcyNSwgNjQxMjAsIDY0MTE5LCA0Mzk4MSwgCisgICAgNDIxMjgsIDAsIDExNzcsIDY1NjAxLCAxMjMyMiwgNjQxMDYsIDAsIDEyNzMwNiwgNjQxMDIsIDc4NTksIDE5NDUsIDY0MDk5LCAKKyAgICAwLCAxMDQ1MywgNjQxMDQsIDcxODgsIDc5OTcsIDAsIDczODksIDAsIDg3MDUsIDY0MDk3LCA2NDA5NiwgOTU3MSwgNTI4LCAKKyAgICA5MTc5ODksIDQ0MDE3LCAxMTQyOSwgMCwgMCwgMCwgOTE3OTkwLCA3Mzg0MSwgMCwgMCwgOTA1NiwgMCwgNjE4OCwgCisgICAgMTIwMDE5LCA2MTU1LCA2NDA2OCwgMTgyMywgNjQwNjYsIDY0MDY1LCA2NDA3MiwgNjQwNzEsIDYzLCA3MjMzLCAxMjA2OTgsIAorICAgIDAsIDQxOTA0LCA2NjM5LCA2NDA2NCwgMCwgMCwgMCwgMTE3NiwgMTE4OTU5LCAwLCA4MTYyLCAwLCAwLCAwLCAxMjA1MTksIAorICAgIDY2Mzc2LCA2NjI0MiwgMTE0MTUsIDQzMzMsIDk4NTUsIDY0MTEyLCA2NDY0MiwgMCwgNTM4OCwgMCwgMCwgMCwgNzcxNCwgCisgICAgNjYyMjIsIDAsIDc3NjgsIDAsIDQxOTksIDY0NzA4LCAwLCAwLCAwLCA4NzA4LCA5NTYwLCA2NDA3NywgNjQwNzYsIDg5OTYsIAorICAgIDQ5OTIsIDQ0NzEsIDQyNjIyLCA2NDA3OSwgNjQwNzgsIDAsIDAsIDAsIDAsIDY0NjE1LCAwLCAwLCAxMjA3NSwgMCwgMCwgCisgICAgNTE3NCwgMCwgMCwgMTI3NTU3LCAzMTIzLCAwLCAxMjY4NSwgMCwgODQwOCwgNjQ3MDQsIDAsIDAsIDkyMjMsIDAsIDQxNjE2LCAKKyAgICAwLCA3Mzc5NywgMCwgMTExNiwgMCwgNDMwNDksIDAsIDQzMDUwLCA4NTQ4LCAxMjA0ODUsIDAsIDExOTA2MSwgOTE3OTk5LCAKKyAgICAwLCAxMzExNSwgNDM2NzUsIDY0MDkxLCA5MzIyLCAwLCAxMjA1OTUsIDY0MDk1LCA2NDA5NCwgODExMSwgNjYyNDcsIAorICAgIDQyMzMyLCA2NDA4OSwgNjQwODgsIDYxOTksIDAsIDAsIDExNDM0LCA2NDA4MywgNjQwODIsIDExMzI5LCA3NzM3LCA2NDA4NywgCisgICAgNjQwODYsIDY0MDg1LCA2NDA4NCwgMCwgOTkyNywgNDEzMzUsIDQxMTgsIDE3OTcsIDAsIDQxMzM0LCAwLCA0NiwgNDM0NDgsIAorICAgIDAsIDI5OCwgMCwgMCwgMCwgNDI2MjcsIDAsIDMyLCA2MTg3LCAxMTkwNTIsIDExNDk1LCAxMTQ1OSwgMzY2NSwgMCwgCisgICAgNDI4NzEsIDAsIDE5OTIzLCA3NDMzNSwgMCwgMCwgNjYyMzksIDAsIDY0NDAzLCA0NDEyLCA3MjQwLCAwLCAwLCAwLCAKKyAgICA2NTc1OCwgMTI3NTAsIDQxODEsIDg1NDQsIDAsIDEyMDE5OSwgOTE3ODk3LCAxMjAxOTgsIDEyMDIwMywgNjE4MSwgNjUwMTQsIAorICAgIDAsIDAsIDAsIDM2MzksIDExOTU4OCwgMCwgMCwgMCwgMTAwNzMsIDEyMDIwNiwgMCwgMCwgNjg0MDksIDQyODQ0LCA3NDk4LCAKKyAgICAxMDk4LCAwLCAwLCAwLCAwLCAxMDIwNywgODc4OSwgMCwgMCwgMCwgMCwgOTIzNCwgMCwgNjE4MiwgMCwgNjUwNTgsIDAsIDAsIAorICAgIDAsIDAsIDU0NzEsIDk0NjEsIDU1NzMsIDExODkzNiwgNTQ3MywgNDQsIDAsIDY2MjQ0LCAxMTg5MDcsIDAsIDY2MjM4LCAKKyAgICAxMjg0NCwgMCwgMTYyMiwgNzc2NywgMTkwMCwgNDEzMzksIDExNDU4LCAwLCAwLCA2NTgxLCA1NTc2LCAwLCA2NDQwNSwgCisgICAgNDEzMzcsIDAsIDQxNjMxLCA4OTQ3LCA2ODM5MCwgMCwgNDE2OTQsIDAsIDAsIDc5MDgsIDAsIDEwNDA4LCA2NTc5LCAwLCAKKyAgICA2NDYxOCwgMCwgMTIwMTQ3LCAwLCA2NTgzLCA3NzYxLCAxMjcwMTAsIDEyMDUwNCwgMTk0ODI4LCAwLCA1MDU4LCA0MTAxMCwgCisgICAgOTk5MiwgMCwgNTA1NywgMCwgMCwgNzQ1MzgsIDUwNTQsIDExODk1MSwgMTk0OTcxLCA3ODYwNiwgMCwgMTQzNywgNDE2MTcsIAorICAgIDY1OCwgMzQ5NywgMCwgNzQ4NiwgNTA2MSwgNTA2MCwgNDIzNSwgMCwgMCwgMCwgMTIxMTMsIDQyMzYsIDQ3MjcsIDAsIDAsIAorICAgIDc2OTMsIDEwNzQ5LCAwLCA3NDg4LCA1NzczLCA5NzgsIDAsIDAsIDQxNjE5LCAxMDIzOSwgNjg2MTEsIDAsIDY2MjA5LCAwLCAKKyAgICAwLCA5NzQ4LCAwLCAxMjc1MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkzNDEsIDExOTU5NiwgCisgICAgMjM3OSwgMTEzMjUsIDAsIDY0NjY4LCA2Nzg1NCwgODEyNSwgMTIwNTQ1LCA2NzQzLCAxMTkxNzUsIDkxNzk0MCwgMjM2OSwgCisgICAgMCwgMCwgMCwgMTE5MjM1LCA3NDA5MiwgNzM5MzYsIDcwMDgsIDQzNjYwLCAwLCAwLCAwLCAyMzY3LCAwLCAwLCAyNjQsIAorICAgIDIzNzUsIDgwNjAsIDYxOTQsIDExOTg1OCwgMTg0NCwgMTE5MDg0LCAwLCAxMjg1OCwgMCwgMCwgNjk2MSwgMCwgMTE4ODM5LCAKKyAgICAwLCA4ODAwLCAwLCA0Mjg2MiwgNDQ2MywgNjU1ODEsIDYxOTIsIDE5NDY3NiwgNDI3NzEsIDAsIDAsIDcyNSwgNjUwNDIsIAogICAgIDExODc5NywgMTIwODAwLCAwLCAxMjg5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNzA3LCAwLCAwLCA1MDc0LCA1MDczLCAKLSAgICAwLCA4OTgzLCAwLCA5MTc5MzksIDAsIDUwNzIsIDAsIDYxOTgsIDExNjE0LCAwLCAxOTYsIDAsIDAsIDAsIDQ5MjksIAorICAgIDAsIDg5ODMsIDAsIDc0NDkzLCAwLCA1MDcyLCAwLCA2MTk4LCAxMTYxNCwgMCwgMTk2LCAwLCAwLCAwLCA0OTI5LCAKICAgICAxMjAzNDIsIDAsIDAsIDAsIDAsIDQyODQ3LCAwLCAwLCAwLCA0OTM0LCAwLCA0MTMyMywgOTc1OCwgMCwgMTIwMzQxLCAwLCAKICAgICA0MjU4NCwgMCwgNDMyOSwgNDEzMjEsIDQ5NzksIDMwNDgsIDc3NTIsIDQxMzIwLCAwLCA3NDQxOCwgMTI4MTksIDAsIDUwNzEsIAotICAgIDAsIDM2NDIsIDAsIDUwNzAsIDEwMDQyLCAwLCAzOTg3LCA1MDY4LCAwLCAwLCAxMjAyMTYsIDAsIDAsIDEwNjM2LCA3Mzk4MSwgCi0gICAgMTE4MDYsIDQzMTY3LCA0NTMxLCAxMjQ1LCA5MTA1LCA2NjQ2MywgNDkyMSwgMTIwMjE5LCA0OTI2LCA2NTU0NCwgNzM4ODQsIAotICAgIDE5NDYxOSwgMCwgMCwgNjQ3MDksIDAsIDE5NDYyMCwgMTIwNzkwLCA0OTIyLCAzMjUsIDk5MiwgMTE5NTY4LCA0OTI1LCAwLCAKLSAgICAwLCA5NTI2LCA0OTIwLCAwLCA5NDgsIDAsIDEyMDIwOCwgNDkzMCwgMCwgMCwgMTIwMjc1LCA0OTMzLCAwLCAwLCAwLCAKLSAgICA0OTI4LCAwLCAwLCA3NDc3MCwgMCwgMCwgNzIyLCAwLCAxOTkwOCwgMTI2MzcsIDAsIDExOTg1NSwgODc1MywgMTUwOSwgMCwgCi0gICAgNTQ2OCwgOTUxMSwgMCwgMCwgMTY3MiwgNjIwNSwgMTA4NjQsIDc0NTg2LCAwLCAwLCAwLCAwLCAwLCA3Mzg2MywgMCwgMCwgCi0gICAgNDE2MDcsIDEyMDExNSwgMTY3OSwgMTIwMTE2LCAxOTQ5MzIsIDEyMDExMywgMCwgNzAwNSwgNDE2MDksIDk1ODAsIDAsIAotICAgIDQwMSwgMCwgMTIwMTA5LCA2OTY4LCA1NzYxLCAzNDIsIDg1NTMsIDAsIDgxNDMsIDEyNzExNSwgMTE5ODMsIDEyNzExMywgCi0gICAgNjI0LCA3NDUwOCwgMCwgMTE5NjMwLCA1MDc4LCA3NDI1OCwgMTI0NzgsIDAsIDUwNzYsIDAsIDE5NDYwOSwgMCwgMTIwMDk3LCAKLSAgICA2ODUsIDkwMjUsIDE1MjQsIDEyNjE4LCAwLCA1NTM5LCAwLCAxMjAwOTUsIDEyMDEwMiwgMTIwMDk0LCAxMjA1NTIsIDAsIAotICAgIDE5NDYxMSwgMCwgMCwgMTI1MjAsIDgwNTgsIDk3MzIsIDAsIDUwODAsIDY0Nzc1LCA1MDM2LCA1MDM1LCAxMjA1OTAsIAotICAgIDQyNjA0LCAwLCAwLCA4MDc0LCAyNzUsIDEzMjkxLCAxOTA3LCAwLCA0NDMyLCAwLCA1MDMzLCAwLCAwLCA0ODM2LCAzODg4LCAKLSAgICA3Mzc5MiwgMTA3MjksIDY0NTQ2LCAxOTQ2MDAsIDEyMDY4MSwgMTk0OTM3LCAwLCA2NzU4OCwgMTE5MDAwLCAwLCAwLCAKLSAgICA4ODU4LCA2NDA5LCAwLCAxMjAyNTIsIDAsIDAsIDAsIDY2MzIxLCAwLCAxMjgxNCwgMCwgMzQzMiwgMTAyMTgsIDAsIDYwOTQsIAorICAgIDAsIDM2NDIsIDAsIDUwNzAsIDEwMDQyLCAxMTg4MzUsIDM5ODcsIDUwNjgsIDAsIDg5MDksIDc4NjUwLCA3ODY0OSwgMCwgCisgICAgMTA2MzYsIDczOTgxLCAxMTgwNiwgNDMxNjcsIDQ1MzEsIDEyNDUsIDkxMDUsIDY2NDYzLCA0OTIxLCAxMjAyMTksIDQ5MjYsIAorICAgIDY1NTQ0LCA3Mzg4NCwgMTk0NjE5LCAwLCAwLCA2NDcwOSwgMCwgMTk0NjIwLCA3ODg4MCwgNDkyMiwgMzI1LCA5OTIsIAorICAgIDExOTU2OCwgNDkyNSwgMCwgMCwgOTUyNiwgNDkyMCwgMCwgOTQ4LCAwLCAxMjAyMDgsIDQ5MzAsIDAsIDAsIDEyMDI3NSwgCisgICAgNDkzMywgMCwgMCwgMTE4OTg1LCA0OTI4LCAwLCAwLCA3NDc3MCwgMTIwMTk0LCAwLCA3MjIsIDAsIDE5OTA4LCAxMjYzNywgCisgICAgMCwgMTE5ODU1LCA4NzUzLCAxNTA5LCAwLCA1NDY4LCA5NTExLCAwLCAwLCAxNjcyLCA2MjA1LCAxMDg2NCwgNzQ1ODYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDczODYzLCAwLCAwLCA0MTYwNywgMTIwMTE1LCAxNjc5LCAxMjAxMTYsIDEyMDE4MCwgMTIwMTEzLCAwLCAKKyAgICA3MDA1LCA0MTYwOSwgOTU4MCwgMCwgNDAxLCAwLCAxMjAxMDksIDY5NjgsIDU3NjEsIDM0MiwgODU1MywgMCwgODE0MywgCisgICAgMTI3MTE1LCAxMTk4MywgMTI3MTEzLCA2MjQsIDc0NTA4LCAwLCAxMTk2MzAsIDUwNzgsIDc0MjU4LCAxMjQ3OCwgMCwgCisgICAgNTA3NiwgMCwgMTk0NjA5LCAwLCAxMjAwOTcsIDY4NSwgOTAyNSwgMTUyNCwgMTI2MTgsIDAsIDU1MzksIDAsIDEyMDA5NSwgCisgICAgMTIwMTAyLCAxMjAwOTQsIDEyMDU1MiwgMCwgMTk0NjExLCA3ODc1MiwgMCwgMTI1MjAsIDgwNTgsIDk3MzIsIDAsIDUwODAsIAorICAgIDY0Nzc1LCA1MDM2LCA1MDM1LCAxMjA1OTAsIDQyNjA0LCAwLCAwLCA4MDc0LCAyNzUsIDEzMjkxLCAxOTA3LCA3ODgzOCwgCisgICAgNDQzMiwgMTI3MjcxLCA1MDMzLCAxMjcyNzMsIDEyNzI3MiwgNDgzNiwgMzg4OCwgNzM3OTIsIDEwNzI5LCA2NDU0NiwgCisgICAgMTI3MjYyLCA0MzcwNCwgMTI3MjY0LCAxMjcyNTEsIDY3NTg4LCAxMTkwMDAsIDEyNzI1MiwgMTI3MjU1LCA4ODU4LCA2NDA5LCAKKyAgICAxMjcyNTYsIDEyMDI1MiwgMCwgMCwgMCwgNjYzMjEsIDAsIDEyODE0LCAxMjcyNDgsIDM0MzIsIDEwMjE4LCAwLCA2MDk0LCAKICAgICA3NjQxLCA0MjQ0NSwgMCwgMCwgNDI0MDYsIDE2NzYsIDc0MzIwLCAxOTQ2MDcsIDAsIDUwMzAsIDAsIDAsIDAsIDAsIDk2MjIsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNTQ0LCAxMjkxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTQ3LCAxMTk4MzUsIAotICAgIDE5NDU4NiwgMTk0NTg1LCAxMDk2OSwgMTE5OTM1LCA3NjEzLCAxMTk5MzcsIDExOTkzNiwgNDc5NSwgMTE5OTMwLCA3MDE4LCAKLSAgICA2NDkxNCwgMCwgMTIwMTkyLCAxMjAyNjgsIDAsIDQzNTY3LCA3NDA1NiwgOTE3OTEwLCAwLCAxMTk5MTksIDcyMTYsIAotICAgIDY1MjMyLCA3MjE3LCAyNTEsIDcyMTgsIDc4OTUsIDQzOTUsIDQzNTM4LCAxMTk5MjYsIDExOTkyOSwgMTE5OTI4LCA3MjEzLCAKLSAgICAxMTk5MjIsIDcyMTQsIDcyMTUsIDAsIDc0MTQxLCA4ODgwLCA3Njg1LCAwLCAxMjAxNzMsIDY1NTQwLCAxMTk2MTgsIDYyNSwgCi0gICAgODE4NywgNDI4NjEsIDExMTMsIDcyMzYsIDc5MTUsIDM2MzAsIDEyMDE3NiwgODE3OSwgNzQyNjQsIDY3ODg2LCA5MzE2LCAKLSAgICAxMDk4MCwgMjQ4OSwgNjU2MjQsIDgxNTAsIDEzNTksIDAsIDAsIDAsIDczNzU2LCA1MDQyLCA1MDQxLCA0Mjc2OSwgMTIwODQsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjgzLCAxNjE2LCAzNzk1LCAwLCA4Nzk1LCA2NjI0NSwgMCwgMCwgMCwgMTEzOCwgCi0gICAgNzM5MDUsIDEyNjc3LCAwLCAwLCAzMjM5LCAwLCAwLCAwLCA4NDMxLCAwLCA0MjE2NCwgMCwgMTE3NzgsIDEyNjIwLCAwLCAKLSAgICA3Mzc3MywgMTE5MDczLCA1MDQwLCAwLCAwLCAwLCAwLCAwLCA1MDM5LCAwLCAwLCAwLCA1MDM4LCAwLCAwLCAxMzE4NCwgCi0gICAgNzQyOTMsIDAsIDY0NjQ4LCAwLCA5MzU5LCAwLCAwLCAwLCA2NTE1NywgNjY2MiwgMCwgMCwgMzg2MywgNzM5MDksIDQ4MzUsIAotICAgIDAsIDAsIDAsIDQzMDksIDAsIDE5NDU2OSwgMCwgMTk0NTY4LCAxMzAxLCAwLCAxMTk1OTUsIDU2OSwgMCwgMCwgNzExLCAKLSAgICAxMTkwODUsIDAsIDAsIDczODgwLCAxMTYxMCwgMTEzNjgsIDAsIDE5NDU3MSwgNDEzMzEsIDEwMDYsIDc0MjQwLCAwLCAKLSAgICAxNTUwLCA4MjAxLCA3MzczNywgNzYyNywgNTQ5OSwgNTAzMSwgMCwgMCwgNjU3ODQsIDAsIDY1MjY3LCAzNzU4LCAwLCAKLSAgICA2NTc4MSwgNjQ3MzQsIDAsIDI0NDAsIDY1NzgwLCAwLCA4NDQ5LCAwLCA1MDA4LCAwLCA4ODIyLCAwLCAxMjEyMSwgODI1NSwgCi0gICAgNTUxMiwgNzM4NzUsIDExOTU2MCwgMCwgNjQzMTMsIDI2NDEsIDU5MDYsIDExMTksIDEyNzA2OCwgMTMwMzgsIDAsIDI0NTUsIAotICAgIDAsIDExODgwOSwgMCwgMCwgMCwgMCwgODcxNCwgMCwgNDIxMSwgMCwgMCwgMCwgMCwgMCwgNTA1MiwgNjYyMjAsIDU4MjEsIAotICAgIDYxODYsIDY1Nzc4LCA2NTc3NSwgNTA1MSwgNjU3NzMsIDE0MjksIDQyNjQ3LCA1MDUwLCAzMDIsIDM4OCwgNDExMTUsIDczNSwgCi0gICAgNjYzNywgNTkwNywgMTIwNjcwLCAwLCAxMjcyNiwgNzQ1OTQsIDkxMTcsIDAsIDAsIDU1MTMsIDY2NjYsIDUwNTMsIDc0MjMwLCAKLSAgICA1NTEwLCAwLCAwLCAwLCAyNDcwLCAwLCAwLCAxOTI1LCAwLCAwLCAwLCAwLCA1MDQ4LCA1MDQ3LCAwLCAwLCAwLCAxOTQ4NjMsIAotICAgIDAsIDc0NDk3LCAwLCA4MDg5LCA2OTI5LCA2MzksIDAsIDY4MTc5LCAwLCAwLCAwLCA0NTk5LCA0MTQwMiwgNjY3NCwgCi0gICAgMTIwNjMxLCA0MzI5NCwgMTQ3NiwgNjQ4LCAwLCA2NTgxOSwgMzIzMywgMCwgMCwgMTAxNjQsIDAsIDAsIDM1MzAsIDk3NTAsIAotICAgIDAsIDAsIDY2NTYsIDE5NDg1OCwgMCwgNTA0NiwgODUxMiwgNjU4NTYsIDc0MjYxLCA4OTY3LCAwLCA1MDQ1LCAwLCAxOTE2LCAKLSAgICA3OTg2LCA1MDQ0LCAxMjA1NTYsIDkwMDYsIDEzMTI4LCA1MDQzLCAwLCA3ODUzLCA3NDA2OCwgNzQwMDQsIDk2NjksIAotICAgIDEyMzQxLCAxMjcwMywgODQwMiwgMCwgMTE5MDcwLCAwLCA0MTc1MCwgMzU4NiwgNjQ1MDgsIDQzMTQ4LCAwLCAwLCAKLSAgICAxMTk2MDYsIDAsIDEzMjk2LCA1MTcsIDAsIDAsIDAsIDQxNTI4LCAxMjMsIDY1NDU0LCAwLCAwLCA3NDQ3OCwgMTA1MzEsIAotICAgIDc3ODQsIDQxNTI2LCAxMDgyOSwgNzM5OTEsIDgwNTcsIDExMjYsIDczODk1LCAwLCAxOTQ1OTEsIDAsIDM5MjUsIDAsIAotICAgIDgwNjksIDQzMTQyLCAxMjA0MzksIDQ4OSwgMCwgMCwgMTIwNDQxLCAxMjA0NTIsIDQzMTUxLCAwLCAwLCA2NjIwMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgODcxMSwgNjE4MywgMCwgMCwgMCwgMTIwNDQ4LCA3NjIzLCAxMTg5MjUsIDE5NDg1MywgOTIzNSwgCi0gICAgMTI3NjAsIDc0MTc2LCAwLCA2NjQ0NSwgNDM1NDAsIDEyMDQzNywgMzc0MywgMTE1MTQsIDExMDc4LCAwLCAxMjEzNiwgMCwgCi0gICAgMCwgMTIwNDM1LCAwLCA3NzI2LCAwLCAxOTkyMiwgMjY3LCAzMzkzLCAwLCAxMzcxLCAxOTQ4NDksIDAsIDI0NTgsIDAsIAotICAgIDYyMDEsIDAsIDQxMDc0LCA0MjY2LCAxMDY1MiwgNDE2MTIsIDQxMDc3LCAzNDAyLCA5MDUwLCAzMzk4LCAwLCAwLCAwLCAKLSAgICAzMzkxLCA0MTA3NSwgMjQ3NiwgMCwgOTE3NTUwLCAwLCAxMDYyNSwgMCwgMTI3NjcsIDEzMDE3LCAwLCA2NDI2MSwgNjQ5MzQsIAotICAgIDAsIDEzMDE0LCAxMzAxMywgMCwgNjY3MywgMCwgMCwgMCwgMTI0MzgsIDAsIDAsIDAsIDAsIDAsIDkwNTMsIDEzMDE1LCAKLSAgICA3NDUyMywgMCwgNzA0LCA2NjIxNSwgNjE5NSwgMCwgNjY2MCwgMTk0OTQxLCA5MTc3NjAsIDkxNzc5MywgMCwgMTI2MjksIAotICAgIDExNDM1LCAwLCAwLCA2NTUzOCwgMCwgMCwgMCwgNzQ1NDcsIDAsIDY1NDQ4LCAwLCAxMjk0OCwgMTk1MDAzLCAxOTUwMDIsIAotICAgIDExOTIzOCwgMTk1MDA0LCAxOTUwMDcsIDE5NTAwNiwgMCwgMCwgNDI4NywgODI3NiwgNDkwMiwgMTEzMSwgMCwgMCwgCi0gICAgNjY3MjgsIDE4MTYsIDAsIDQyNTMzLCAxNjgsIDAsIDQ4OTgsIDY0Mjk4LCAwLCAwLCA0OTAxLCAxODIxLCAwLCA1NzgsIAorICAgIDAsIDAsIDY3ODcsIDAsIDAsIDAsIDAsIDEwNTQ0LCAxMjkxOSwgMCwgMCwgMCwgMCwgMCwgMTIwNzg5LCAwLCA5NDcsIAorICAgIDExOTgzNSwgMTk0NTg2LCAxOTQ1ODUsIDEwOTY5LCAxMTk5MzUsIDc2MTMsIDExOTkzNywgMTE5OTM2LCA0Nzk1LCAKKyAgICAxMTk5MzAsIDcwMTgsIDczNzYsIDEyMDE4MSwgMTIwMTkyLCAxMjAyNjgsIDAsIDQzNTY3LCA3NDA1NiwgOTE3OTEwLCAKKyAgICAxMTg5NjMsIDExOTkxOSwgNzIxNiwgNjUyMzIsIDcyMTcsIDI1MSwgNzIxOCwgNzg5NSwgNDM5NSwgNDM1MzgsIDExOTkyNiwgCisgICAgMTE5OTI5LCAxMTk5MjgsIDcyMTMsIDExOTkyMiwgNzIxNCwgNzIxNSwgMCwgNzQxNDEsIDg4ODAsIDc2ODUsIDY2NDU5LCAKKyAgICAxMjAxNzMsIDY1NTQwLCAxMTk2MTgsIDYyNSwgODE4NywgNDI4NjEsIDExMTMsIDcyMzYsIDc5MTUsIDM2MzAsIDEyMDE3NiwgCisgICAgODE3OSwgNzQyNjQsIDY3ODg2LCA5MzE2LCAxMDk4MCwgMjQ4OSwgNjU2MjQsIDgxNTAsIDEzNTksIDY3NjUyLCAwLCAwLCAKKyAgICA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIDEyMDg0LCAwLCAwLCAwLCAxMjczMTksIDAsIDkxNzkwNiwgMCwgMCwgMTIyODMsIAorICAgIDE2MTYsIDM3OTUsIDAsIDg3OTUsIDY2MjQ1LCAwLCAwLCAwLCAxMTM4LCA3MzkwNSwgMTI2NzcsIDAsIDAsIDMyMzksIDAsIAorICAgIDAsIDAsIDg0MzEsIDAsIDQyMTY0LCAwLCAxMTc3OCwgMTI2MjAsIDY4MjYsIDczNzczLCAxMTkwNzMsIDUwNDAsIDAsIDAsIAorICAgIDAsIDc4NDIwLCAwLCA1MDM5LCAwLCA3ODQxOCwgMCwgNTAzOCwgMCwgMCwgMTMxODQsIDc0MjkzLCAwLCA2NDY0OCwgMCwgCisgICAgOTM1OSwgNzg0MTYsIDAsIDAsIDY1MTU3LCA2NjYyLCAwLCAwLCAzODYzLCA3MzkwOSwgNDgzNSwgNTUyNjYsIDQzNDMyLCAwLCAKKyAgICA0MzA5LCAwLCAxOTQ1NjksIDAsIDE5NDU2OCwgMTMwMSwgMCwgNDI1ODksIDU2OSwgMCwgNzM4MTMsIDcxMSwgMTE5MDg1LCAKKyAgICAwLCAwLCA3Mzg4MCwgMTE2MTAsIDExMzY4LCAwLCAxOTQ1NzEsIDQxMzMxLCAxMDA2LCA3NDI0MCwgMCwgMTU1MCwgODIwMSwgCisgICAgNzM3MzcsIDc2MjcsIDU0OTksIDUwMzEsIDc3OTA4LCA0MjczOCwgNjU3ODQsIDc3OTA3LCA2NTI2NywgMzc1OCwgMCwgCisgICAgNjU3ODEsIDY0NzM0LCAwLCAyNDQwLCA2NTc4MCwgNzc5MTMsIDg0NDksIDAsIDUwMDgsIDAsIDg4MjIsIDAsIDEyMTIxLCAKKyAgICA4MjU1LCA1NTEyLCA3Mzg3NSwgMTE5NTYwLCAwLCA2NDMxMywgMjY0MSwgNTkwNiwgMTExOSwgMTI3MDY4LCAxMzAzOCwgMCwgCisgICAgMjQ1NSwgMCwgMTE4ODA5LCAwLCAwLCAwLCAwLCA4NzE0LCAwLCA0MjExLCAwLCAwLCAwLCAwLCA0MzcxMywgNTA1MiwgCisgICAgNjYyMjAsIDU4MjEsIDYxODYsIDY1Nzc4LCA2NTc3NSwgNTA1MSwgNjU3NzMsIDE0MjksIDQyNjQ3LCA1MDUwLCAzMDIsIAorICAgIDM4OCwgNDExMTUsIDczNSwgNjYzNywgNTkwNywgMTIwNjcwLCAwLCAxMjcyNiwgNzQ1OTQsIDkxMTcsIDAsIDE5NTAxMCwgCisgICAgNTUxMywgNjY2NiwgNTA1MywgNzQyMzAsIDU1MTAsIDc4NDUxLCAwLCA3ODQ0NywgMjQ3MCwgNzg0MzcsIDAsIDE5MjUsIDAsIAorICAgIDAsIDc0ODA3LCAwLCA1MDQ4LCA1MDQ3LCAwLCAwLCAwLCAxOTQ4NjMsIDAsIDc0NDk3LCAwLCA4MDg5LCA2OTI5LCA2MzksIAorICAgIDAsIDY4MTc5LCAwLCAwLCAwLCA0NTk5LCA0MTQwMiwgNjY3NCwgNDMzOTcsIDQzMjk0LCAxNDc2LCA2NDgsIDAsIDY1ODE5LCAKKyAgICAzMjMzLCAwLCA0MTc4MiwgNjk1MSwgMCwgMCwgMzUzMCwgOTc1MCwgMCwgMCwgNjY1NiwgMTk0ODU4LCAwLCA1MDQ2LCAKKyAgICA4NTEyLCA2NTg1NiwgNzQyNjEsIDg5NjcsIDAsIDUwNDUsIDAsIDE5MTYsIDc5ODYsIDUwNDQsIDEyMDU1NiwgOTAwNiwgCisgICAgMTMxMjgsIDUwNDMsIDAsIDc4NTMsIDc0MDY4LCA3NDAwNCwgOTY2OSwgMTIzNDEsIDEyNzAzLCA4NDAyLCAwLCAxMTkwNzAsIAorICAgIDAsIDQxNzUwLCAzNTg2LCA2NDUwOCwgNDMxNDgsIDAsIDAsIDExOTYwNiwgMCwgMTMyOTYsIDUxNywgMCwgMCwgMCwgCisgICAgNDE1MjgsIDEyMywgNjU0NTQsIDAsIDAsIDc0NDc4LCAxMDUzMSwgNzc4NCwgNDE1MjYsIDEwODI5LCA3Mzk5MSwgODA1NywgCisgICAgMTEyNiwgNzM4OTUsIDAsIDE5NDU5MSwgMCwgMzkyNSwgNDI1MSwgODA2OSwgMTA1MTcsIDEyMDQzOSwgNDg5LCAwLCA0MjUwLCAKKyAgICAxMjA0NDEsIDEyMDQ1MiwgNDMxNTEsIDAsIDAsIDY2MjAwLCAwLCAwLCAwLCA3ODQyMywgMCwgMCwgODcxMSwgNjE4MywgMCwgCisgICAgMCwgMCwgMTIwNDQ4LCA3NjIzLCAxMTg5MjUsIDE5NDg1MywgOTIzNSwgMTI3NjAsIDc0MTc2LCAwLCA2NjQ0NSwgNDM1NDAsIAorICAgIDEyMDQzNywgMzc0MywgMTE1MTQsIDExMDc4LCAwLCAxMjEzNiwgMCwgMCwgMTIwNDM1LCAwLCA3NzI2LCAwLCAxOTkyMiwgCisgICAgMjY3LCAzMzkzLCA0MjE5OCwgMTM3MSwgMTk0ODQ5LCA2OTIzMywgMjQ1OCwgMCwgNjIwMSwgMCwgNDEwNzQsIDQyNjYsIAorICAgIDEwNjUyLCA0MTYxMiwgNDEwNzcsIDM0MDIsIDkwNTAsIDMzOTgsIDAsIDAsIDAsIDMzOTEsIDQxMDc1LCAyNDc2LCAwLCAKKyAgICA5MTc1NTAsIDAsIDEwNjI1LCAwLCAxMjc2NywgMTMwMTcsIDc4NzQzLCA2NDI2MSwgNjQ5MzQsIDEyNzUzNywgMTMwMTQsIAorICAgIDEzMDEzLCAwLCA2NjczLCAwLCAwLCAwLCAxMjQzOCwgMCwgMCwgMCwgMCwgMCwgOTA1MywgMTMwMTUsIDc0NTIzLCAwLCAKKyAgICA3MDQsIDY2MjE1LCA2MTk1LCAwLCA2NjYwLCA3ODc1OCwgOTE3NzYwLCA5MTc3OTMsIDQyMjEyLCAxMjYyOSwgMTE0MzUsIDAsIAorICAgIDU1MjU2LCA2NTUzOCwgMCwgMCwgMCwgNzQ1NDcsIDAsIDY1NDQ4LCA3ODEwMCwgMTI5NDgsIDExOTAwMSwgMTk1MDAyLCAKKyAgICAxMTkyMzgsIDE5NTAwNCwgNzgwOTksIDEyNzA4NSwgMCwgMCwgNDI4NywgODI3NiwgNDkwMiwgMTEzMSwgMCwgNzg0NTgsIAorICAgIDY2NzI4LCAxODE2LCAwLCA0MjUzMywgMTY4LCA0Mjg0NSwgNDg5OCwgNjQyOTgsIDAsIDAsIDQ5MDEsIDE4MjEsIDAsIDU3OCwgCiAgICAgMzY1MywgMCwgNzkxLCA5MTYyLCA2OTc3LCAwLCAxMTkyOTgsIDc0NTYxLCAwLCA3MzczMSwgODM1NCwgNDM1OTAsIDAsIDAsIAogICAgIDc1NTcsIDAsIDExOTMwMSwgODIzNCwgNzI0MSwgMCwgMTk0OTk0LCAxMTkxNjcsIDE5NDk5NiwgMTI4MTEsIDY1OTI1LCAKLSAgICAzOTQ2LCAxOTUwMDAsIDEwOTk4LCAwLCA2NzMsIDE5NDg2NywgNjQzOTcsIDAsIDc0NTk5LCAwLCAwLCAxOTQ5NzcsIAotICAgIDE5NDk3NiwgMjQ0OCwgMTk0OTc4LCAxMDI2NywgODQyNCwgMjQ1MiwgMTIwNzYwLCAxOTQ4NjQsIDg3MjksIDAsIDAsIAotICAgIDc4NDUsIDAsIDAsIDQ0MDgsIDQxMjIsIDAsIDExMDM5LCA4NzIzLCAxOTQ5OTAsIDE5NDk4OSwgMTE5MzAyLCA3MzEsIAotICAgIDExOTMwNCwgMTE5MzAzLCAyNDM4LCA2NDg1NSwgMTE5MzAwLCAxMTkyOTksIDExNzUsIDAsIDQyMTM1LCAzNzMsIDExOTE3MiwgCi0gICAgNTM5NiwgMTE0NTcsIDExNTIxLCA3NzIzLCAwLCAwLCAwLCA0MTk1MiwgMCwgNTI3MywgODI0OCwgNTI2OSwgMCwgNTIwMiwgCi0gICAgMjQwNCwgNTI2NywgNDI4MjMsIDExMjkxLCAxOTkxNSwgNTI3NywgMTI5NjMsIDAsIDYxODksIDQxMjUsIDEzMTQsIDEyMTMzLCAKLSAgICAwLCAxMTg4NzMsIDEyNzEsIDAsIDAsIDY2MDI0LCA0MTQ4MiwgMzg2NCwgNzQ1MzksIDAsIDM4NzksIDAsIDEyOTc4LCAKLSAgICA0MTY2LCA0NTc0LCAwLCA3NTY3LCA3NDU5LCAwLCA0MTM5MCwgNTM4NCwgNDE4ODIsIDY3NjQ3LCAwLCAwLCAwLCAwLCAKLSAgICA0MTM4OCwgMCwgNDEzOTIsIDY0Mjg4LCA0MTM4NywgMCwgODcwNiwgNTU1MiwgMCwgNzAwLCAwLCA1NTUzLCAwLCA3MDg4LCAKLSAgICA1MzU2LCA3NDk5LCAwLCA2NjU5NiwgMCwgMCwgMCwgNTU1NCwgMCwgMTIzNDQsIDEwMzExLCAwLCA2NjY1LCAwLCAwLCAKLSAgICA3NjE4LCA4NTE3LCAxMTQ1NSwgMCwgNjQ2MzIsIDY2MDE3LCA1NTU1LCAwLCAwLCAwLCAwLCAxMTkyMDQsIDY1MDMzLCAKLSAgICA5MTQzLCA2NjY4LCAxOTUwNjcsIDE5NTA2NiwgMTk1MDY5LCA2NTYsIDE5NTA3MSwgNjUwMzcsIDQ1NzcsIDY0NjI0LCAwLCAKLSAgICAwLCAwLCAwLCA0MjY5LCA3Mzg4NSwgOTE3Nzc1LCA0Mjg0NiwgOTE3Nzc0LCA5NTAsIDAsIDAsIDY2NTgwLCAxMTg4OTUsIAotICAgIDY2NjgzLCAxMDU1NCwgOTE3Nzc4LCAxMTkxMjEsIDAsIDUwOTgsIDkxNzc3MCwgMCwgMTE5MDk5LCA1MDk3LCA0OTM1LCAKLSAgICA5ODQ4LCAxMDM4MSwgMCwgMCwgMCwgMzY1MSwgMCwgMCwgMCwgNTEwMiwgNTEwMSwgMTAyNjksIDEyOTgzLCA4MTM4LCAwLCAKLSAgICAxOTMyLCA1MTAwLCAxNDM5LCAxMjA5MywgMTI0NywgMTAwMzQsIDE5NTA2NCwgNTA5OSwgMCwgMTQ0MSwgNDIwODcsIDMwNjMsIAotICAgIDY1MCwgMCwgNzgzOCwgMCwgMTk1MDQxLCAxOTUwNDAsIDExOTE0MiwgOTAzMSwgMTk1MDQ1LCAxOTUwNDQsIDkwNzgsIAotICAgIDg1NDUsIDY2MzU2LCAxOTUwNDgsIDAsIDkxNTQsIDkxMTgsIDAsIDAsIDI2NzYsIDc3NTAsIDAsIDczODEyLCA2MTkwLCAKLSAgICA4NTk5LCAxOTUwNTMsIDAsIDEwNzk1LCA5ODU3LCA3MDE0LCA5ODU4LCAxOTUwMzMsIDAsIDEyMTI5LCAwLCA4NDgxLCAwLCAKLSAgICA2MjAyLCAxOTUwMzUsIDEwOTIwLCAxOTUwMzcsIDUyMDMsIDE5NTAzOSwgMTk1MDM4LCA1MTA4LCA1MTA3LCA2NTgxOCwgCi0gICAgNjYwMTksIDk3NjIsIDAsIDU1NDEsIDc0NzcyLCAwLCAxMjYxMywgNTI4NCwgNjY1NywgMjA3LCAwLCA0Mjc1LCA3NDgxOSwgCi0gICAgODU0LCA2ODE0NywgNzQzODEsIDAsIDAsIDUxMDMsIDAsIDY0MzQ4LCA0MTM2OCwgMCwgNDg4LCAwLCAwLCAwLCAxMDE1NywgCi0gICAgMCwgNDMwMzQsIDExNDM4LCAwLCAwLCAwLCAxMTg4MzksIDQxNzcxLCA1MTA2LCA2NjY5LCA4NTA0LCA2NTE1NCwgMTk1MDI1LCAKLSAgICA0MTM2NywgNTEwNSwgMTk1MDMwLCAxOTUwMjksIDY0NzYsIDUxMDQsIDAsIDMwNCwgMzE3NiwgMCwgMCwgOTMyLCAwLCAKLSAgICA2NTY3LCAyMzgsIDc0NTIyLCAxOTUwMTEsIDE5NTAxMCwgMTk5MDUsIDEyMDU3NywgMTk1MDE1LCAxMjAxODcsIDQxMDQ0LCAKLSAgICA2NzY0MCwgMCwgNjQ4MTQsIDk5MTIsIDY1OTM5LCAxMDY3MCwgNzQwOTMsIDEzMjczLCAwLCAxMjU1MiwgMTk1MDE5LCAKLSAgICA4ODAzLCAzMDksIDY2MjIsIDgxNTEsIDEwODU4LCAxOTQ1OTYsIDY3NjM2LCAwLCAxMjU2OCwgMCwgMTI1NTMsIDAsIAotICAgIDQzMjc1LCA2OTUwLCA5NzEyLCAwLCAwLCAwLCA2NTE2NSwgMCwgMCwgNjY0NjYsIDAsIDAsIDAsIDY2NzI1LCA2MTkxLCAKLSAgICAxMTM1MSwgMTA0MzcsIDExMzE2LCA2NzYzNCwgMCwgMCwgNDE3NTQsIDY3NjM1LCA5MzcwLCAyNzIwLCAxOTQ5NzUsIDAsIAotICAgIDgyMzIsIDExODgxNywgMCwgMzIyMiwgMCwgMCwgMCwgNjY2NjMsIDAsIDAsIDEwODM0LCAwLCAwLCA2NTczMiwgMCwgMCwgCi0gICAgMTE5NTc5LCAwLCAxOTUwMjAsIDAsIDc3ODEsIDQxMzgzLCA2NDU2OCwgMCwgMTIwNzM4LCAxMjA3NywgMCwgMCwgMCwgCi0gICAgNDIzOTYsIDAsIDM0NzUsIDAsIDI0NzksIDAsIDM2MzIsIDAsIDEwNjk4LCAwLCAzNjQ4LCAxOTQ5NjAsIDc0ODQ0LCAKLSAgICA2NzYzOSwgMzYzNiwgNjc4OTQsIDM2NTAsIDg4MzcsIDY1MjI5LCAxODQzLCA0MjI4MywgMCwgNDE1NjIsIDAsIDc0NTQ4LCAKLSAgICAwLCAzNjQwLCAwLCA0MjMyMSwgNzI4NCwgMTk0OTc0LCAxOTQ5NzMsIDE5NDk1MCwgMTk0OTQ5LCAxOTQ5NTIsIDE5NDk1MSwgCi0gICAgMCwgMTk0OTUzLCA0MjA4MCwgMjUyOSwgMCwgMCwgMCwgNDIwODMsIDE5NDk1NSwgMTk0NjA2LCAxOTQ5NTcsIDY3NjE5LCAKLSAgICA2NjM2NywgMTk0OTU4LCA5NjM0LCAwLCA5OTg4LCAwLCA0MTA2OCwgMCwgMCwgNjUyNjQsIDAsIDAsIDkxNzkyMywgMCwgCi0gICAgNzg1LCA4MjM2LCAxOTQ5NDIsIDkwMjcsIDY4MTYwLCA2NzYyMywgNjQzODMsIDAsIDkyNSwgMCwgMCwgNDE5ODUsIDQxMDcxLCAKLSAgICA5NTg2LCAwLCA0MTk4NCwgOTIxNywgMCwgMCwgMCwgOTE4NiwgNjQ1ODAsIDQwMTYsIDAsIDAsIDM4MSwgMCwgMCwgNDIwNzcsIAotICAgIDAsIDE5NDk0NiwgNTE4NCwgNDIwNzgsIDE5NDk0NywgMTA4MTAsIDAsIDQ1ODUsIDE5OTQzLCA1ODYwLCA2NzYzMywgMCwgMCwgCi0gICAgODEyLCAzNjE1LCAwLCA1MTc4LCAxOTQ5MjksIDEyMDU0OCwgMTIwNTA2LCA1MTg4LCA3NDI4NywgNjc2MjksIDM2MDUsIAotICAgIDEwNjkyLCAxMTY2LCA2NDQyOSwgNDI2MzksIDkyNCwgMCwgNjc2MzEsIDAsIDAsIDI0NDIsIDEwNzAzLCAxOTQ5NDAsIAotICAgIDY3NjMyLCAwLCAxMjc3MSwgMTI3MzYsIDEyNzUzLCAwLCA3MzkzMywgNjc2MjYsIDQyNDAxLCAwLCAwLCAwLCA0MjI4OCwgCi0gICAgMTI3NTEsIDAsIDg1NDIsIDEzMTQ1LCAwLCAyNDY4LCA2NjcwNiwgNDEyOTQsIDM2MjYsIDM4ODMsIDY0Mzg4LCA0MjQ3OSwgCi0gICAgMCwgNDExMTcsIDAsIDAsIDAsIDAsIDY3NjI0LCAwLCAxMjkwLCAwLCA2NTU4NSwgMjcxNSwgODA2LCAwLCA0MTg4NCwgMCwgCi0gICAgNzAyNywgNjQ3MzEsIDAsIDAsIDAsIDY2MzI1LCAzNDY1LCAyNDA1LCA5MjQwLCAwLCAxMjc1NiwgNjUyNTksIDAsIDAsIAotICAgIDEyNzUyLCA1ODMzLCAxNDMyLCAwLCA0MTg4MywgNzM5MTIsIDk3OTksIDAsIDQxODg2LCAyNDgwLCAwLCA0MzIxOSwgMCwgCi0gICAgNjQ5NCwgNTUzNywgMCwgMCwgMCwgMCwgMTIxMSwgMCwgMCwgMCwgMTE4ODMyLCAxMjMxOCwgMCwgMCwgMCwgMTA2MjIsIDAsIAotICAgIDAsIDAsIDY1NjYsIDAsIDAsIDczNzgwLCAwLCA2NDg2NCwgMCwgMTk0NTg4LCAwLCA4Mjg0LCAwLCAwLCAzNTg5LCAwLCAKLSAgICA0MDM1LCA2NDkyLCAwLCA0MjY1LCA2NjQyLCAzOTc3LCA3NDE4NiwgNDE3NzgsIDgzNiwgMTE5MjE2LCAyNDg4LCAwLCAKKyAgICAzOTQ2LCA3ODA3OCwgMTA5OTgsIDc4MDgwLCA2NzMsIDE5NDg2NywgNjQzOTcsIDAsIDc0NTk5LCA3ODQ0OSwgODg5MCwgCisgICAgMTk0OTc3LCAxOTQ5NzYsIDI0NDgsIDc4MDg1LCAxMDI2NywgODQyNCwgMjQ1MiwgNzgwODMsIDE5NDg2NCwgODcyOSwgCisgICAgNzg0NTYsIDAsIDc4NDUsIDAsIDc4NjkyLCA0NDA4LCA0MTIyLCA2NzcyLCAxMTAzOSwgODcyMywgMTk0OTkwLCAxOTQ5ODksIAorICAgIDExOTMwMiwgNzMxLCAxMTkzMDQsIDExOTMwMywgMjQzOCwgNjQ4NTUsIDExOTMwMCwgMTE5Mjk5LCAxMTc1LCAwLCA0MjEzNSwgCisgICAgMzczLCAxMTkxNzIsIDUzOTYsIDExNDU3LCAxMTUyMSwgNzcyMywgMCwgMCwgMCwgNDE5NTIsIDAsIDUyNzMsIDgyNDgsIAorICAgIDUyNjksIDYzMzcsIDUyMDIsIDI0MDQsIDUyNjcsIDQyODIzLCAxMTI5MSwgMTk5MTUsIDUyNzcsIDEyOTYzLCAwLCA2MTg5LCAKKyAgICA0MTI1LCAxMzE0LCAxMjEzMywgMCwgMTE4ODczLCAxMjcxLCAwLCAwLCA2NjAyNCwgNDE0ODIsIDM4NjQsIDc0NTM5LCAwLCAKKyAgICAzODc5LCAwLCAxMjk3OCwgNDE2NiwgNDU3NCwgMCwgNzU2NywgNzQ1OSwgMCwgNDEzOTAsIDUzODQsIDQxODgyLCA2NzY0NywgCisgICAgMCwgNTc1OSwgMCwgMCwgNDEzODgsIDAsIDQxMzkyLCA2NDI4OCwgNDEzODcsIDAsIDg3MDYsIDU1NTIsIDAsIDcwMCwgMCwgCisgICAgNTU1MywgMCwgNzA4OCwgNTM1NiwgNzQ5OSwgNzgxMTAsIDY2NTk2LCAwLCAwLCAxMDI2MywgNTU1NCwgMCwgMTIzNDQsIAorICAgIDEwMzExLCA3ODExMywgNjY2NSwgMCwgMCwgNzYxOCwgODUxNywgMTE0NTUsIDc4NDQwLCA2NDYzMiwgNjYwMTcsIDU1NTUsIAorICAgIDc4MDg4LCA3ODA5MywgNzgwOTEsIDAsIDQyODAzLCA2NTAzMywgOTE0MywgNjY2OCwgMTk1MDY3LCAxOTUwNjYsIDE5NTA2OSwgCisgICAgNjU2LCAxOTUwNzEsIDY1MDM3LCA0NTc3LCA2NDYyNCwgMCwgMCwgMCwgMCwgNDI2OSwgNzM4ODUsIDkxNzc3NSwgNDI4NDYsIAorICAgIDkxNzc3NCwgOTUwLCAwLCAwLCA2NjU4MCwgMTE4ODk1LCA2NjY4MywgMTA1NTQsIDkxNzc3OCwgMTE5MTIxLCAwLCA1MDk4LCAKKyAgICA5MTc3NzAsIDAsIDExOTA5OSwgNTA5NywgNDkzNSwgOTg0OCwgMTAzODEsIDAsIDkxNzU2MCwgMCwgMzY1MSwgMCwgMCwgCisgICAgMTI3NTU2LCA1MTAyLCA1MTAxLCAxMDI2OSwgMTI5ODMsIDgxMzgsIDQ1MTcsIDE5MzIsIDUxMDAsIDE0MzksIDEyMDkzLCAKKyAgICAxMjQ3LCAxMDAzNCwgMTk1MDY0LCA1MDk5LCA3ODM3MywgMTQ0MSwgNDIwODcsIDMwNjMsIDY1MCwgMCwgNzgzOCwgMCwgCisgICAgMTk1MDQxLCAxOTUwNDAsIDExOTE0MiwgOTAzMSwgMTIwNzkwLCAxOTUwNDQsIDkwNzgsIDg1NDUsIDY2MzU2LCAxOTUwNDgsIAorICAgIDAsIDkxNTQsIDkxMTgsIDAsIDAsIDI2NzYsIDc3NTAsIDAsIDczODEyLCA2MTkwLCA4NTk5LCAxOTUwNTMsIDAsIDEwNzk1LCAKKyAgICA5ODU3LCA3MDE0LCA5ODU2LCAxOTUwMzMsIDAsIDEyMTI5LCAwLCA4NDgxLCAwLCA2MjAyLCAxOTUwMzUsIDEwOTIwLCAKKyAgICAxOTUwMzcsIDUyMDMsIDE5NTAzOSwgMTk1MDM4LCA1MTA4LCA1MTA3LCA2NTgxOCwgNjYwMTksIDk3NjIsIDAsIDU1NDEsIAorICAgIDc0NzcyLCAwLCAxMjYxMywgNTI4NCwgNjY1NywgMjA3LCAwLCA0Mjc1LCA3NDgxOSwgODU0LCA2ODE0NywgNzQzODEsIDAsIAorICAgIDAsIDUxMDMsIDAsIDY0MzQ4LCA0MTM2OCwgNDM5NzQsIDQ4OCwgNjk4MTEsIDAsIDAsIDEwMTU3LCAwLCA0MzAzNCwgCisgICAgMTE0MzgsIDAsIDAsIDAsIDY4NDMxLCA0MTc3MSwgNTEwNiwgNjY2OSwgODUwNCwgNjUxNTQsIDY5ODEzLCA0MTM2NywgCisgICAgNTEwNSwgMTk1MDMwLCA2OTgwOSwgNjQ3NiwgNTEwNCwgMCwgMzA0LCAzMTc2LCAwLCAwLCA5MzIsIDAsIDY1NjcsIDIzOCwgCisgICAgNzQ1MjIsIDE5NTAxMSwgMTk0NTk1LCAxOTkwNSwgMTIwNTc3LCAxOTUwMTUsIDEyMDE4NywgNDEwNDQsIDY3NjQwLCAKKyAgICAxOTQ5MDIsIDQyMDU1LCA5OTEyLCA2NTkzOSwgMTA2NzAsIDc0MDkzLCAxMzI3MywgMCwgMTI1NTIsIDE5NTAxOSwgODgwMywgCisgICAgMzA5LCA2NjIyLCA4MTUxLCAxMDg1OCwgMTk0NTk2LCA2NzYzNiwgMCwgMTI1NjgsIDAsIDEyNTUzLCAwLCA0MzI3NSwgCisgICAgNjk1MCwgOTcxMiwgNjg2ODAsIDQzOTcwLCAwLCA2NTE2NSwgMCwgMCwgNjY0NjYsIDAsIDAsIDAsIDY2NzI1LCA2MTkxLCAKKyAgICAxMTM1MSwgMTA0MzcsIDExMzE2LCA2NzYzNCwgMCwgMCwgNDE3NTQsIDY3NjM1LCA5MzcwLCAyNzIwLCAxOTQ5NzUsIAorICAgIDY4NDYyLCA4MjMyLCAxMTg4MTcsIDAsIDMyMjIsIDAsIDAsIDAsIDY2NjYzLCAwLCAwLCAxMDgzNCwgMCwgMCwgNjU3MzIsIAorICAgIDAsIDkxNzU0NywgMTE5NTc5LCA2NzY3OSwgMTk1MDIwLCAwLCA3NzgxLCA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgCisgICAgMTIwNzcsIDAsIDY0NTg2LCA5MTc2MjAsIDQyMzk2LCA1NTI1NSwgMzQ3NSwgMCwgMjQ3OSwgMCwgMzYzMiwgMTIwNzI4LCAKKyAgICAxMDY5OCwgODM3NiwgMzY0OCwgMTk0OTYwLCA3NDg0NCwgNjc2MzksIDM2MzYsIDY3ODk0LCAzNjUwLCA4ODM3LCA2NTIyOSwgCisgICAgMTg0MywgNDIyODMsIDQzMjUwLCA0MTU2MiwgOTEwMCwgNzQ1NDgsIDAsIDM2NDAsIDAsIDQyMzIxLCA3Mjg0LCAxOTQ5NzQsIAorICAgIDE5NDk3MywgMTk0OTUwLCAxOTQ5NDksIDE5NDk1MiwgMTk0OTUxLCAwLCAxOTQ5NTMsIDQyMDgwLCAyNTI5LCAwLCAwLCAwLCAKKyAgICA0MjA4MywgMTIwNjc4LCA2ODM5OCwgMTk0OTU3LCA2NzYxOSwgNjYzNjcsIDE5NDk1OCwgOTYzNCwgMCwgOTk4OCwgMCwgCisgICAgNDEwNjgsIDAsIDAsIDY1MjY0LCAwLCAwLCA5MTc5MjMsIDAsIDc4NSwgODIzNiwgMTk0OTQyLCA5MDI3LCA2ODE2MCwgCisgICAgNjc2MjMsIDY0MzgzLCAwLCA5MjUsIDAsIDAsIDQxOTg1LCA0MTA3MSwgOTU4NiwgMCwgNDE5ODQsIDkyMTcsIDAsIDAsIDAsIAorICAgIDkxODYsIDIwNjcsIDQwMTYsIDAsIDAsIDM4MSwgMCwgMCwgNDIwNzcsIDAsIDE5NDk0NiwgNTE4NCwgNDIwNzgsIDE5NDk0NywgCisgICAgMTA4MTAsIDAsIDQ1ODUsIDE5OTQzLCA1ODYwLCA2NzYzMywgMCwgMCwgODEyLCAzNjE1LCAwLCA1MTc4LCA0NDAwMCwgCisgICAgMTIwNTQ4LCA3ODgwNywgNTE4OCwgNzQyODcsIDY3NjI5LCAzNjA1LCAxMDY5MiwgMTE2NiwgNjQ0MjksIDQyNjM5LCA5MjQsIAorICAgIDAsIDY3NjMxLCAwLCAwLCAyNDQyLCAxMDcwMywgNzg3ODksIDY3NjMyLCA5MTc5MjQsIDEyNzcxLCAxMjczNiwgMTI3NTMsIAorICAgIDAsIDczOTMzLCA2NzYyNiwgNDI0MDEsIDAsIDAsIDEyNzM3MywgNDIyODgsIDEyNzUxLCAwLCA4NTQyLCAxMzE0NSwgMCwgCisgICAgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAzODgzLCA2NDM4OCwgNDI0NzksIDAsIDQxMTE3LCAwLCAwLCAwLCAwLCAKKyAgICA2NzYyNCwgMCwgMTI5MCwgMCwgNjU1ODUsIDI3MTUsIDgwNiwgNjUyMDgsIDQxODg0LCA5MTc4ODMsIDcwMjcsIDY0NzMxLCAKKyAgICAwLCAwLCAwLCA2NjMyNSwgMzQ2NSwgMjQwNSwgOTI0MCwgMCwgMTI3NTYsIDY1MjU5LCAwLCAwLCAxMjc1MiwgNTgzMywgCisgICAgMTQzMiwgMCwgNDE4ODMsIDczOTEyLCA5Nzk5LCAwLCA0MTg4NiwgMjQ4MCwgMCwgMjA2MiwgMTI3MjkzLCA2NDk0LCA1NTM3LCAKKyAgICA3ODY1NiwgMCwgMTk0NTg3LCAwLCAxMjExLCAwLCAwLCAwLCAxMTg4MzIsIDEyMzE4LCAwLCAwLCAwLCAxMDYyMiwgMCwgMCwgCisgICAgMCwgNjU2NiwgNzg2NTksIDAsIDczNzgwLCAwLCA2NDg2NCwgMCwgNzg2NjAsIDAsIDgyODQsIDAsIDAsIDM1ODksIDAsIAorICAgIDQwMzUsIDY0OTIsIDExODk4MSwgNDI2NSwgNjY0MiwgMzk3NywgNzQxODYsIDQxNzc4LCA4MzYsIDExOTIxNiwgMjQ4OCwgMCwgCiAgICAgNDU4MiwgMCwgMCwgNDE3NzcsIDEyOTI2LCAwLCA3NTI4LCAxMDU1MCwgMCwgMCwgMCwgMCwgMCwgMTM3NCwgNjQ4NzgsIAotICAgIDExOTAxNCwgMCwgNDIzODksIDQxMzc0LCAwLCAwLCAwLCA0MTM3NywgMCwgMCwgNDAwLCAxMjU5NywgMCwgMCwgMCwgNjY2MSwgCi0gICAgMCwgNjQ4MjcsIDAsIDczODE3LCAzOTAsIDAsIDc0NzU1LCAwLCAzNDczLCA3NzE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTk2OSwgMCwgMCwgODAwNCwgMTg4NywgMCwgMCwgODA4MCwgNzAwNiwgMCwgMCwgMCwgMCwgMTU0NCwgMCwgMCwgNjQ2NzcsIAotICAgIDEyMDcxNiwgMCwgNjE0NiwgMCwgNzcxLCAwLCAwLCAxMjgxMiwgMTMxNjgsIDQyMjcyLCAxMjIwMCwgOTE3OTI3LCA3OTA0LCAKLSAgICAwLCA5NTMsIDEyOTE3LCAwLCAxMjMwMCwgMCwgMTE0OTEsIDk3MjQsIDEwMzQxLCAwLCA5NTI0LCA3NDkwLCAxMTM4OSwgCi0gICAgNzQ4OSwgMzM3OSwgMCwgNzQ4NywgMCwgNDcxLCA3NDg0LCA3NDgyLCA3NDgxLCA3NDgwLCA3NDc5LCA3NDc4LCA3NDc3LCAKLSAgICA2NTAxLCA3NDc1LCA2OTE4LCA3NDczLCA3NDcyLCAyNDc0LCA3NDcwLCA3NDY4LCAxMDIzMiwgMTA2MTUsIDEwMjEzLCAwLCAKLSAgICAxMjAyMjIsIDEwMDQ5LCAwLCAzNTQ0LCAwLCA2MDE3LCA2NTMxMSwgMCwgMCwgMTMzMDYsIDEwNTMzLCA3ODcwLCA3Mzk0OSwgCi0gICAgNzYyNSwgMCwgMTIwNTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAxOTk2MSwgMjQ3MiwgMCwgMTIwNjk5LCAwLCA2MDE5LCA0MjU2LCAKLSAgICAxMjA3NzYsIDc0MzgwLCAwLCA3Mzg0NywgNzM4NDQsIDEyODQ1LCAwLCAwLCA2NTEzOCwgMTE5MzU1LCA2Nzg2MiwgMCwgMCwgCi0gICAgMTIwMDAwLCAxMjAwMDgsIDgwNjYsIDc2NzgsIDc0ODY1LCAwLCAwLCAwLCAwLCA3MTg2LCAwLCAxMjA1NTUsIDAsIDQ0NSwgCi0gICAgMTIwNTY2LCAwLCAwLCAwLCA4MzMwLCAwLCAwLCA0Mjc5NywgMCwgMTIwMjE1LCAwLCAzOTAyLCAwLCAxNzcwLCAwLCAwLCAKLSAgICAxNTYwLCAxMjAyMDksIDAsIDQ1ODQsIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIDAsIDExMTgsIDAsIDAsIDAsIDEwODEsIAotICAgIDc0MzYsIDAsIDcyNTIsIDAsIDU5OTYsIDAsIDQ5MDMsIDAsIDQxMzg2LCA1MTYyLCAxMTkxODksIDEzMzAsIDAsIDY0NTMwLCAKLSAgICAwLCAxMjA0NywgNDEzODQsIDAsIDAsIDE4NDgsIDQzMzQsIDAsIDQxOTc1LCA2NDc3NywgMTA2NzQsIDEyMzA4LCAwLCAwLCAKLSAgICAwLCAwLCAxMjcxNSwgMCwgMCwgMCwgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgMTE5MTU3LCAwLCAwLCAwLCAxMjY5ODQsIAotICAgIDAsIDkzMzQsIDAsIDAsIDAsIDc5NzUsIDAsIDAsIDAsIDY2NjIxLCA0ODg0LCA2NjU5NywgMCwgMCwgMCwgNjMxMywgCi0gICAgNjU1MTMsIDAsIDAsIDAsIDAsIDIzNDUsIDAsIDQ2MywgMCwgMCwgMTE5NjA3LCAzMTE3LCA1NDYwLCAwLCAwLCAwLCAwLCAKLSAgICA0MjI3OSwgMTk0NTc3LCAwLCAwLCAwLCAwLCAwLCAxMzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2MywgMCwgMCwgMCwgMCwgCi0gICAgMjQ4MiwgMTQ3MSwgMCwgMCwgNDIyNDcsIDEyMzc4LCA3MzkyNSwgMCwgMCwgMTIzNzQsIDAsIDAsIDAsIDAsIDI0NjAsIDAsIAotICAgIDExOTQ0LCAxMjM3NiwgMCwgNjQ2NzksIDAsIDEyMzgwLCAxMDU1NywgNjQ0NzMsIDU4NzAsIDAsIDIwMjQsIDAsIDAsIDAsIAotICAgIDUzOSwgMCwgMCwgMCwgMzg1MywgNjUxODAsIDAsIDEyMDc5NiwgMTIwMjQ1LCAwLCAwLCA4NjU5LCAwLCAxMjQ3NCwgMCwgCi0gICAgOTUwMywgMTk0OTY5LCAyNDc4LCAwLCA0MTYyLCAwLCA0MjYwLCAxMjk1MywgMCwgMTIwMDg5LCAxMjQ3MCwgMCwgNzQxODksIAotICAgIDI3NDIsIDEyNDc2LCAxMTc5OCwgMTA5NDYsIDAsIDUwMDAsIDAsIDAsIDAsIDAsIDgyMTMsIDc0MDE3LCA3NzcxLCA2MTYxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxMjA1ODIsIDAsIDAsIDEwMzAxLCAxMDMzMywgMTAzOTcsIDAsIDAsIDczNzkxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0MDE0LCAxMjg0MiwgNzM5NTIsIDEyMDE1LCAwLCA4Mjc1LCAzODkzLCAwLCAwLCAwLCA3MjIxLCA0MjE0NywgCi0gICAgMCwgNzQ1NTAsIDc0NDY1LCA2NDc0NywgMTE4ODQxLCAwLCAxMjUxNiwgMCwgMCwgMTE5MDE3LCA3NDUzNywgMTA4OTIsIAotICAgIDgyMzEsIDAsIDY0NzMsIDQxOTY4LCAwLCA0MTk3MywgMzU5MSwgNDE5NjksIDAsIDI0NTMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEwMzQ5LCAxMDQxMywgNDM1OTEsIDQxOTYyLCAzMjAyLCA3NDM1MywgMCwgODMxNiwgMCwgMCwgMCwgNjg3LCAwLCAwLCAwLCAKLSAgICAxODQwLCAwLCAwLCAxMTk4MDksIDQ4ODMsIDI4NSwgNDcyMywgMCwgMCwgNDQ1OSwgNzQ1NzcsIDAsIDQxNzIwLCAxMTA4OSwgCi0gICAgMjQwLCAxOTkwNiwgMCwgMTE5MjQ4LCAwLCA5NzQzLCAxMjAyMzIsIDEzMTM0LCAwLCAwLCAwLCAwLCAwLCA0MjYzNCwgMCwgCi0gICAgMCwgMzA4MSwgMTE0NjMsIDEyMDIzMCwgMCwgMCwgMTA0NDUsIDAsIDAsIDY2NzE3LCAyNjE0LCA5MTI1LCAxMTkwMjMsIAotICAgIDE3MjksIDAsIDEyMDIzNiwgNjUyMjEsIDYzODgzLCA0MzMzNCwgNjQ4NTIsIDAsIDEyMDIzNSwgNjYyMDEsIDAsIDY2NTc4LCAKLSAgICA1MDAxLCA0MTg3OSwgMCwgNDEyMSwgNTAwMywgODg0LCA2NjcwMCwgNjM4NzksIDQ5NDMsIDUxNTAsIDczODg5LCA3NDE4MiwgCi0gICAgMCwgNjQzLCAzMDg2LCAwLCA0MjQ0OCwgNDIyOTksIDU4LCAwLCAwLCAxMjAwODMsIDYzODczLCA4NDkxLCAwLCAwLCAwLCAKLSAgICA0NTMwLCA0MjQwOSwgMCwgMCwgMjcyMSwgMTIwMDc0LCAxMTkwOTYsIDE5OTI5LCAwLCAxOTQ1NzQsIDAsIDQyNDIsIDQyNjQsIAotICAgIDAsIDAsIDY2MTc5LCA0MjQxMiwgNjU5NDEsIDEzMTE0LCA2NDUyMiwgMTA3NDAsIDMwOTQsIDAsIDk3NTQsIDExOTEwMiwgCi0gICAgNDQzNywgNzM5NDgsIDAsIDAsIDY1MTc5LCA0MjE3NCwgMTk0OTI1LCA0MjQzMCwgMCwgMCwgNDIzNTUsIDY2MDI2LCA0MzA2LCAKLSAgICA0MTM4MCwgMCwgMCwgMCwgNjY2NjcsIDAsIDAsIDAsIDEyMDU3OCwgNDI1NjYsIDAsIDAsIDUwODgsIDY5NDgsIDAsIDg1MjQsIAotICAgIDAsIDAsIDEyMzg1LCAwLCAwLCAwLCAxMzg2LCA2NTAzNCwgMTE0ODAsIDYxMTYsIDY1MDM5LCA2NTAzOCwgMTIzOTIsIAotICAgIDY1MDM2LCA4MDY0LCAwLCAxMjEwMSwgNTgyMiwgMTE5MDA0LCAwLCA3MTAsIDAsIDExNjYzLCAxNjY2LCA0MjA5MSwgCi0gICAgMTE5NjU3LCAxMjM4MywgMCwgNDIwOTIsIDAsIDQyODksIDAsIDYzODk2LCAxMjA2MSwgNDIwOTYsIDAsIDMzNjIsIDEyMzc3LCAKLSAgICAwLCAwLCAwLCA3NDYxLCA3MzkwMSwgMTI0NCwgMzMxLCA3Mzc4NiwgMTI2ODMsIDEwNjYyLCAwLCA4MTEyLCAwLCA2NTg1MiwgCi0gICAgMCwgMTIzNzksIDAsIDEyMDgxOCwgNDE5NjQsIDAsIDYzODQzLCAxMjM4MSwgNDE5NjUsIDAsIDY1ODY2LCA0MzI3LCAwLCAKLSAgICA2Mzg0MCwgMCwgNDEyMjAsIDEzMDMyLCAwLCA1ODQsIDEyOTMzLCA0MzE3NywgMTIzNzMsIDAsIDEzMDAwLCAxMzUxLCAwLCAKLSAgICA4Njk4LCAxMjY2NSwgMCwgMTkzMCwgMCwgMCwgMTI0MjcsIDAsIDAsIDEzMDMxLCAwLCAwLCAwLCAzNjU3LCAwLCA2NTIwMiwgCi0gICAgNjAwMCwgMCwgMTI0MjYsIDAsIDAsIDQxNzQwLCAxMjQyOCwgNDEyODMsIDQxOTE2LCAxMTkyMTAsIDAsIDAsIDEyNDI5LCAKLSAgICA5Njk1LCAwLCA3NTYyLCAwLCA1MTcwLCAwLCA0MTc1NSwgNjc2LCAwLCAwLCA2NjY2NCwgNzQ0MjcsIDAsIDM1MzYsIDAsIAotICAgIDk3NTIsIDAsIDYxNjIsIDAsIDAsIDEwMTEzLCA0MTgyOSwgNjU4ODYsIDUxNTksIDEyNDIyLCA0MTgzMiwgNDM5LCA0MzA3NywgCi0gICAgMCwgMTIwNTMyLCA3NDU0OSwgMTE3OTYsIDQwOTcwLCA0MTgzMCwgMCwgOTE3Nzk5LCA4MzA4LCA5MTc3OTcsIDkxNzc5NiwgCi0gICAgMCwgNjc4NjQsIDkxNzgwMSwgOTE3ODAwLCAxMjMzNiwgNDEzNSwgMCwgMzQxLCAyNzI3LCA0MTI5LCAzNTM5LCAwLCAKLSAgICA2Mzg2MSwgMCwgNzkxMywgMCwgNjM4NTksIDQxMzEsIDYzODY4LCAwLCA2Mzg2NywgNDEzMywgMTEzNzEsIDIxMCwgNDYwMCwgCi0gICAgMCwgNzQ1NjAsIDQxMzcsIDgwODIsIDAsIDExOTA2MiwgMCwgMCwgNDU5MSwgMCwgMCwgMCwgOTY4MCwgMCwgMTIwNjIzLCAKLSAgICA1NjEsIDEyMTU5LCAxOTUsIDAsIDQxNTAxLCAwLCA0MjAzMSwgNTcxOSwgNzE3MiwgMCwgODM2OCwgMCwgNDE0OTksIDAsIDAsIAotICAgIDQyMjQyLCA0MTQ5OCwgOTE3Nzk0LCA0MjAyNSwgMCwgNjU4MDUsIDQyNDYzLCAwLCAyOTI0LCAwLCAxMjA1MTAsIDAsIDAsIAotICAgIDExOTIxMywgNzM5NDEsIDAsIDQyMzMwLCA5MTc3ODQsIDM5NjksIDAsIDAsIDcxNjksIDE5OTIsIDk2NTIsIDczOTc3LCAKLSAgICA3MjQ2LCA0MjA4NiwgOTE3NzkwLCA5MTc3ODksIDAsIDAsIDAsIDAsIDAsIDMyNywgMCwgOTA0MiwgOTE3Nzc3LCA5MTc3NzYsIAotICAgIDY1MTQ4LCAxMjQzMywgOTE3NzgxLCA5MTc3ODAsIDkxNzc3OSwgMTI0MzEsIDg2NjgsIDEyNDM0LCAwLCA5MTc3ODIsIAotICAgIDU5OTksIDAsIDc3MTIsIDEyNDMyLCAwLCAwLCAxNzI2LCAxMDE1LCAwLCA4MjEyLCAwLCAwLCA0MjQyMywgMTE5MDY2LCAwLCAKLSAgICAwLCA2NjcwOSwgMCwgODgxMSwgOTI3LCAwLCAwLCAxMjQzNiwgMCwgNDIwMjEsIDAsIDAsIDEyOTksIDEyMjQwLCA0MjM1MCwgCi0gICAgNjUxNDMsIDAsIDE5NTAxNiwgMCwgMCwgMTEzNDgsIDAsIDAsIDAsIDAsIDAsIDE5OTE0LCAxMjE3OSwgMCwgOTY0OCwgMCwgCi0gICAgNjM4MzYsIDYzODMyLCA5MTc3NzMsIDEwOTY3LCA2MzgxNiwgMjU5NCwgMzQ0NCwgNjM4MTcsIDY0NjUxLCAwLCA0MTUwMywgCi0gICAgMCwgMTEyNjUsIDAsIDAsIDAsIDAsIDU2NjQsIDM5NzIsIDAsIDAsIDAsIDkxNzc2NiwgMTI0MTYsIDkxNzc2NCwgMTE5NjA4LCAKLSAgICAxMDgxNiwgOTE3NzY5LCA5MTc3NjgsIDEyNDE4LCA3NDExMSwgMzg4MiwgODUzMiwgOTE3NzcxLCAxNTczLCAwLCAxMTk4NDcsIAotICAgIDQ1OTYsIDY2MzM5LCAxMjQxNywgNjYwMDEsIDY1MzQzLCAxOTQ3ODIsIDEyNDE0LCA4Mjg3LCAwLCAwLCA2ODEwOCwgMTE0MywgCi0gICAgMTE5MTY5LCAwLCAxMjQxNSwgNjYyNiwgNDI3NjMsIDAsIDExODg4NCwgOTAyMSwgMTIwNzgzLCAwLCAxMTcyNCwgMCwgMCwgCi0gICAgMTI3MTA0LCAxOTQ3OTQsIDAsIDAsIDgwMjcsIDEwOTk3LCA5MTcxLCAxMjc0MSwgMTE0MDAsIDc0MTk3LCAxOTQ3OTksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEyMDE5MCwgMTk0NzczLCAwLCAxOTQ3NzIsIDQyMzY4LCAwLCA3NzE1LCAzODgxLCA0MTQ4NywgCi0gICAgMTIxMTgsIDQyNTE0LCAwLCAwLCAwLCAzMDA5LCA0MTQ3NiwgNDE0ODksIDAsIDMwMDcsIDE0NDgsIDMwMTgsIDAsIDM4ODksIAorICAgIDExOTAxNCwgMCwgNDIzODksIDQxMzc0LCAwLCAwLCA3ODQ5MiwgNDEzNzcsIDAsIDAsIDQwMCwgMTI1OTcsIDEyMDU4NiwgMCwgCisgICAgMCwgNjY2MSwgMCwgNjQ4MjcsIDAsIDczODE3LCAzOTAsIDAsIDc0NzU1LCAwLCAzNDczLCA3NzE4LCAwLCAwLCAwLCAKKyAgICA1NTI4NSwgMCwgMCwgMCwgMTE5NjksIDAsIDAsIDYzNjUsIDE4ODcsIDY3NjMsIDAsIDgwODAsIDcwMDYsIDAsIDAsIDY3NTcsIAorICAgIDAsIDE1NDQsIDAsIDY3NjYsIDY0Njc3LCAxMjA3MTYsIDAsIDYxNDYsIDAsIDc3MSwgMCwgMCwgMTI4MTIsIDEzMTY4LCAKKyAgICA0MjI3MiwgMTIyMDAsIDkxNzkyNywgNzkwNCwgMCwgOTUzLCAxMjkxNywgMCwgMTIzMDAsIDAsIDExNDkxLCA5NzI0LCAKKyAgICAxMDM0MSwgMCwgOTUyNCwgNzQ5MCwgMTEzODksIDc0ODksIDMzNzksIDAsIDc0ODcsIDAsIDQ3MSwgNzQ4NCwgNzQ4MiwgCisgICAgNjc1MywgNzQ4MCwgNzQ3OSwgNzQ3OCwgNzQ3NywgNjUwMSwgNzQ3NSwgNjkxOCwgNzQ3MywgNzQ3MiwgMjQ3NCwgNzQ3MCwgCisgICAgNzQ2OCwgMTAyMzIsIDEwNjE1LCAxMDIxMywgMCwgMTIwMjIyLCAxMDA0OSwgNzg4ODQsIDM1NDQsIDAsIDYwMTcsIDY1MzExLCAKKyAgICAwLCAxMjAyMTYsIDEzMzA2LCAxMDUzMywgNzg3MCwgNzM5NDksIDc2MjUsIDAsIDEyMDU0NCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTk5NjEsIDI0NzIsIDQyNjY1LCAxMjA2OTksIDAsIDYwMTksIDQyNTYsIDEyMDc3NiwgNzQzODAsIDAsIDQyNjc1LCAKKyAgICA0MjY1OCwgMTI4NDUsIDAsIDAsIDY1MTM4LCAxMTkzNTUsIDY3ODYyLCAwLCA2NTY3MSwgMTIwMDAwLCAxMjAwMDgsIDgwNjYsIAorICAgIDc2NzgsIDc0ODY1LCAwLCAwLCAwLCAwLCA3MTg2LCAwLCAxMjA1NTUsIDAsIDQ0NSwgMTIwNTY2LCAwLCAwLCAwLCA4MzMwLCAKKyAgICAwLCAwLCA0Mjc5NywgMCwgMTIwMjE1LCAwLCAzOTAyLCAwLCAxNzcwLCAwLCAwLCAxNTYwLCAxMjAyMDksIDE5NDk3MiwgCisgICAgNDU4NCwgNzM4NDMsIDAsIDExNzEyLCAxMDg2NiwgMTE4OTI4LCAxMTE4LCAwLCAwLCAwLCAxMDgxLCA3NDM2LCA2ODQyMCwgCisgICAgNzI1MiwgMCwgNTk5NiwgMCwgNDkwMywgMCwgNDEzODYsIDUxNjIsIDExOTE4OSwgMTMzMCwgMCwgNDI4NDgsIDAsIDEyMDQ3LCAKKyAgICA0MTM4NCwgMCwgMCwgMTg0OCwgNDMzNCwgNjMyNCwgNDE5NzUsIDY0Nzc3LCAxMDY3NCwgMTIzMDgsIDEyMTg2LCAwLCAwLCAKKyAgICAwLCAxMjcxNSwgMCwgMCwgMCwgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgMTE5MTU3LCAwLCAwLCAwLCAxMjY5ODQsIDAsIAorICAgIDkzMzQsIDAsIDEyNzMxMCwgMCwgNzk3NSwgMCwgNzc5NTcsIDAsIDY2NjIxLCA0ODg0LCA2NjU5NywgMCwgMCwgMCwgNjMxMywgCisgICAgNjU1MTMsIDAsIDAsIDAsIDAsIDIzNDUsIDQzNjk3LCA0NjMsIDAsIDAsIDExOTYwNywgMzExNywgNTQ2MCwgMCwgMCwgMCwgCisgICAgMCwgNDIyNzksIDE5NDU3NywgMCwgNzg0MTUsIDAsIDAsIDAsIDEzMjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCA1NjYzLCAwLCAwLCAKKyAgICAwLCAwLCAyNDgyLCAxNDcxLCAwLCAwLCA0MjI0NywgMTIzNzgsIDczOTI1LCAxMjcyMzMsIDAsIDEyMzc0LCAwLCAwLCAwLCAKKyAgICAwLCAyNDYwLCAwLCAxMTk0NCwgMTIzNzYsIDAsIDY0Njc5LCAwLCAxMjM4MCwgMTA1NTcsIDY0NDczLCA1ODcwLCAwLCAKKyAgICAyMDI0LCAwLCAwLCAwLCA1MzksIDAsIDAsIDAsIDM4NTMsIDY1MTgwLCAwLCAxMjA3OTYsIDEyMDI0NSwgMCwgMCwgODY1OSwgCisgICAgMCwgMTI0NzQsIDAsIDk1MDMsIDE5NDk2OSwgMjQ3OCwgMCwgNDE2MiwgMCwgNDI2MCwgMTI5NTMsIDAsIDEyMDA4OSwgCisgICAgMTI0NzAsIDAsIDc0MTg5LCAyNzQyLCAxMjQ3NiwgMTE3OTgsIDEwOTQ2LCAwLCA1MDAwLCAwLCAwLCAwLCAwLCA4MjEzLCAKKyAgICA3NDAxNywgNzc3MSwgNjE2MSwgMCwgNjcwOSwgMCwgNzg4ODUsIDAsIDE5NDg5MiwgMTIwNTgyLCA3ODU0NywgMCwgMTAzMDEsIAorICAgIDEwMzMzLCAxMDM5NywgMCwgMCwgNzM3OTEsIDAsIDAsIDAsIDAsIDAsIDQwMTQsIDEyODQyLCA3Mzk1MiwgMTIwMTUsIDAsIAorICAgIDgyNzUsIDM4OTMsIDAsIDAsIDEyNzU1NSwgNzIyMSwgNDIxNDcsIDAsIDc0NTUwLCA3NDQ2NSwgNjQ3NDcsIDExODg0MSwgMCwgCisgICAgMTI1MTYsIDQ0NDQsIDAsIDExOTAxNywgNzQ1MzcsIDEwODkyLCA4MjMxLCAwLCA2NDczLCA0MTk2OCwgNzgzODgsIDQxOTczLCAKKyAgICAzNTkxLCA0MTk2OSwgMCwgMjQ1MywgMCwgMCwgNjQ3MDUsIDAsIDAsIDEwMzQ5LCAxMDQxMywgNDM1OTEsIDQxOTYyLCAKKyAgICAzMjAyLCA3NDM1MywgMCwgODMxNiwgMCwgMCwgMCwgNjg3LCAwLCAwLCAwLCAxODQwLCAwLCA2ODY3MSwgMTE5ODA5LCAKKyAgICA0ODgzLCAyODUsIDQ3MjMsIDc3OTI3LCAwLCA0NDU5LCA3NDU3NywgMCwgNDE3MjAsIDExMDg5LCAyNDAsIDE5OTA2LCAwLCAKKyAgICA0MjMyMywgMCwgOTc0MywgMTIwMjMyLCAxMzEzNCwgMCwgMCwgMCwgMCwgMCwgNDI2MzQsIDAsIDQzNDM3LCAzMDgxLCAKKyAgICAxMTQ2MywgMTIwMjMwLCAwLCAwLCAxMDQ0NSwgMCwgMCwgNjY3MTcsIDI2MTQsIDkxMjUsIDExOTAyMywgMTcyOSwgMCwgCisgICAgMTIwMjM2LCA2NTIyMSwgNjM4ODMsIDQzMzM0LCA2NDg1MiwgMCwgMTIwMjM1LCA2NjIwMSwgMCwgNjY1NzgsIDUwMDEsIAorICAgIDQxODc5LCA3NDQyNywgNDEyMSwgNTAwMywgODg0LCA2NjcwMCwgNjM4NzksIDQ5NDMsIDUxNTAsIDczODg5LCA3NDE4MiwgMCwgCisgICAgNjQzLCAzMDg2LCAwLCA0MjQ0OCwgNDIyOTksIDU4LCAwLCAwLCAxMjAwODMsIDYzODczLCA4NDkxLCAwLCAwLCAwLCA0NTMwLCAKKyAgICA0MjQwOSwgMCwgMTk0NTc1LCAyNzIxLCAxMjAwNzQsIDExOTA5NiwgMTk5MjksIDAsIDE5NDU3NCwgMCwgNDI0MiwgNDI2NCwgCisgICAgMTIwMDc3LCAwLCA2NjE3OSwgNDI0MTIsIDY1OTQxLCAxMzExNCwgNjQ1MjIsIDEwNzQwLCAzMDk0LCAwLCA5NzU0LCAKKyAgICAxMTkxMDIsIDQ0MzcsIDczOTQ4LCAwLCAwLCA1NTI4MCwgNDIxNzQsIDE5NDkyNSwgNDI0MzAsIDAsIDAsIDQyMzU1LCAKKyAgICA2NjAyNiwgNDMwNiwgNDEzODAsIDY4NDMyLCAwLCAwLCA2NjY2NywgMTI3MzA5LCAwLCAwLCA0MjIwMCwgNDI1NjYsIDAsIDAsIAorICAgIDUwODgsIDY5NDgsIDAsIDg1MjQsIDAsIDAsIDEyMzg1LCAwLCAwLCAwLCAxMzg2LCA2NDU4MCwgMTE0ODAsIDYxMTYsIAorICAgIDY1MDM5LCA2NTAzOCwgMTIzOTIsIDY1MDM2LCA4MDY0LCAwLCAxMjEwMSwgNTgyMiwgMTE5MDA0LCAyMDgwLCA3MTAsIAorICAgIDc3OTk5LCAxMTY2MywgMTY2NiwgNDIwOTEsIDExOTY1NywgMTIzODMsIDQzNjcxLCA0MjA5MiwgNjg0MTgsIDQyODksIDAsIAorICAgIDYzODk2LCAxMjA2MSwgNDIwOTYsIDQzNjIxLCAzMzYyLCAxMjM3NywgMCwgMCwgNjg0NDksIDc0NjEsIDczOTAxLCAxMjQ0LCAKKyAgICAzMzEsIDczNzg2LCAxMjY4MywgMTA2NjIsIDAsIDgxMTIsIDAsIDY1ODUyLCAwLCAxMjM3OSwgMTk0ODc3LCAxMjA4MTgsIAorICAgIDQxOTY0LCA0MjIwOCwgNjM4NDMsIDIwODQsIDQxOTY1LCAwLCA2NTg2NiwgNDMyNywgMCwgNjM4NDAsIDc4NTQ5LCA0MTIyMCwgCisgICAgMTMwMzIsIDAsIDU4NCwgMTI5MzMsIDQzMTc3LCAxMjM3MywgMCwgMTMwMDAsIDEzNTEsIDAsIDg2OTgsIDEyNjY1LCAwLCAKKyAgICAxOTMwLCAwLCA3ODIyOSwgMTI0MjcsIDY2NTE0LCAwLCAxMzAzMSwgMCwgNjM5MDEsIDAsIDM2NTcsIDAsIDY1MjAyLCAKKyAgICA2MDAwLCAxMTkyMDYsIDEyNDI2LCAwLCAwLCA0MTc0MCwgMTI0MjgsIDQxMjgzLCA0MTkxNiwgMTE5MjEwLCAwLCAwLCAKKyAgICAxMjQyOSwgNjcyNywgMCwgNzU2MiwgMCwgNTE3MCwgMCwgNDE3NTUsIDY3NiwgMCwgNjY3MDQsIDY2NjY0LCA5OTc4LCAKKyAgICA2NjQ5MSwgMzUzNiwgMCwgOTc1MiwgMCwgNjE2MiwgMCwgNjkyMjgsIDEwMTEzLCA0MTgyOSwgNjU4ODYsIDUxNTksIAorICAgIDEyNDIyLCA0MTgzMiwgNDM5LCA0MzA3NywgMCwgNDIyMDcsIDc0NTQ5LCAxMTc5NiwgNDA5NzAsIDQxODMwLCAwLCAKKyAgICA5MTc3OTksIDgzMDgsIDkxNzc5NywgOTE3Nzk2LCAwLCA2Nzg2NCwgOTE3ODAxLCA5MTc4MDAsIDEyMzM2LCA0MTM1LCAKKyAgICA2OTgwNSwgMzQxLCAyNzI3LCA0MTI5LCAzNTM5LCAwLCA2Mzg2MSwgMCwgNzkxMywgMCwgNjM4NTksIDQxMzEsIDYzODY4LCAKKyAgICAwLCA2Mzg2NywgNDEzMywgMTEzNzEsIDIxMCwgNDYwMCwgMCwgNzQ1NjAsIDQxMzcsIDgwODIsIDc4NTA2LCAxMTkwNjIsIAorICAgIDc4NTA0LCA2NzA0LCA0NTkxLCAwLCAwLCAwLCA5NjgwLCAwLCAxMjA2MjMsIDU2MSwgMTIxNTksIDE5NSwgNzg1MDgsIAorICAgIDQxNTAxLCAwLCA0MjAzMSwgNTcxOSwgNzE3MiwgNDI2ODcsIDgzNjgsIDAsIDQxNDk5LCAwLCAwLCA0MjI0MiwgNDE0OTgsIAorICAgIDkxNzc5NCwgNDIwMjUsIDc4NTY3LCA2NTgwNSwgNDI0NjMsIDAsIDI5MjQsIDAsIDEyMDUxMCwgMCwgMCwgMTE5MjEzLCAKKyAgICA3Mzk0MSwgMCwgNDIzMzAsIDkxNzc4NCwgMzk2OSwgMCwgMCwgNzE2OSwgMTk5MiwgOTY1MiwgNzM5NzcsIDcyNDYsIAorICAgIDQyMDg2LCA5MTc3OTAsIDkxNzc4OSwgMCwgMCwgMCwgMCwgMCwgMzI3LCAwLCA5MDQyLCA5MTc3NzcsIDkxNzc3NiwgCisgICAgNjUxNDgsIDEyNDMzLCA5MTc3ODEsIDEyNzI3NiwgOTE3Nzc5LCAxMjQzMSwgODY2OCwgMTI0MzQsIDAsIDkxNzc4MiwgCisgICAgNTk5OSwgMCwgNzcxMiwgMTI0MzIsIDAsIDQzNjUzLCAxNzI2LCAxMDE1LCAwLCA4MjEyLCAwLCAwLCA0MjQyMywgMTE5MDY2LCAKKyAgICAwLCAwLCA2NjcwOSwgMCwgODgxMSwgOTI3LCAwLCAwLCAxMjQzNiwgMCwgNDIwMjEsIDAsIDAsIDEyOTksIDEyMjQwLCAKKyAgICA0MjM1MCwgNjUxNDMsIDAsIDE5NTAxNiwgMCwgNzgxOTcsIDExMzQ4LCAwLCA3ODAzNywgMCwgMCwgMCwgMTk5MTQsIAorICAgIDEyMTc5LCAwLCA5NjQ4LCAxOTQ5MjMsIDYzODM2LCA2MzgzMiwgOTE3NzczLCAxMDk2NywgNjM4MTYsIDI1OTQsIDM0NDQsIAorICAgIDYzODE3LCA2NDY1MSwgMCwgNDE1MDMsIDAsIDExMjY1LCAwLCAwLCAxOTQ5MjIsIDAsIDU2NjQsIDM5NzIsIDAsIDAsIDAsIAorICAgIDkxNzc2NiwgMTI0MTYsIDkxNzc2NCwgMTE5NjA4LCAxMDgxNiwgOTE3NzY5LCA5MTc3NjgsIDEyNDE4LCA3NDExMSwgMzg4MiwgCisgICAgODUzMiwgOTE3NzcxLCAxNTczLCAwLCAxMTk4NDcsIDQ1OTYsIDY2MzM5LCAxMjQxNywgNjYwMDEsIDY1MzQzLCAxOTQ3ODIsIAorICAgIDEyNDE0LCA4Mjg3LCA2ODIxOSwgMTk1MDE3LCA2ODEwOCwgMTE0MywgMTE5MTY5LCAwLCAxMjQxNSwgNjYyNiwgNDI3NjMsIAorICAgIDAsIDExODg4NCwgOTAyMSwgMTIwNzgzLCAwLCAxMTcyNCwgMCwgMCwgMTI3MTA0LCAxOTQ3OTQsIDAsIDAsIDgwMjcsIAorICAgIDEwOTk3LCA5MTcxLCAxMjc0MSwgMTE0MDAsIDc0MTk3LCAxOTQ3OTksIDAsIDE5NDc5OCwgMCwgMCwgMCwgMTI3NTIzLCAKKyAgICAxMjAxOTAsIDE5NDc3MywgNjc2MDgsIDE5NDc3MiwgNDIzNjgsIDAsIDc3MTUsIDM4ODEsIDQxNDg3LCAxMjExOCwgNDI1MTQsIAorICAgIDY4NjUxLCAwLCAwLCAzMDA5LCA0MTQ3NiwgNDE0ODksIDY5ODI1LCAzMDA3LCAxNDQ4LCAzMDE4LCAxOTQ4MDksIDM4ODksIAogICAgIDg1MjEsIDUwODMsIDUwODIsIDExOTg1OSwgMTIwMTg0LCA4NTE5LCAwLCAzMDE0LCA1MDgxLCA2NTg1MywgMCwgMCwgCi0gICAgMTIwMTgzLCAwLCA1MDc5LCA2NDgwMiwgNjUwOTUsIDQ1OTcsIDY1NTMyLCAwLCAwLCAxMjM3MSwgMCwgODQwNywgMCwgCi0gICAgMTA4MDUsIDg1MTgsIDEwNzc5LCAxMjAxODgsIDAsIDAsIDEyMzY3LCA0MjE3MCwgMCwgMCwgNjI5LCAxOTI0LCAwLCAKLSAgICAxMjAzNywgNzQzNjYsIDU5ODcsIDg0NjIsIDgwMDUsIDEyMzY1LCA2NjY4OSwgMCwgMTIwODE1LCAxMjM2OSwgMTA2NDksIDAsIAotICAgIDUwNzcsIDEyNzEwOCwgMTA4ODAsIDYzOTI3LCA1MDc1LCAwLCAwLCA2NTA3NSwgMCwgMTEwMDcsIDAsIDY2NjU5LCAwLCAwLCAKLSAgICA2NjY4NCwgMCwgMzQzNCwgNDk1NCwgMTkwNCwgMCwgNTI2NiwgMTI2OTgwLCA1MjcyLCAxMDQ5OSwgNDUwNywgOTU3OCwgCi0gICAgNjM5MjMsIDEyMDE3NywgNzk3OSwgMCwgOTgzMSwgMCwgMTk0OTI2LCA0NjEsIDk4MDMsIDAsIDQ1MDQsIDE1MDUsIDAsIDAsIAotICAgIDUyNzYsIDQzMDIxLCAwLCAwLCAwLCAwLCA2NjQ2MSwgNTE3NywgNDEzMjQsIDEyMDU1LCA4NzIyLCAwLCA0MTMyNywgMCwgCi0gICAgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgODk0OCwgNDEzMjUsIDAsIDcyMSwgMTAxODIsIDkxMDgsIDAsIDAsIAotICAgIDExOTE4NSwgMCwgMCwgMCwgNTk5OCwgMCwgNDIzNTMsIDc0ODI1LCAwLCAxMjU4NywgMCwgMCwgMCwgMCwgMCwgNDE1NzYsIAotICAgIDc0MTIxLCAwLCAxMTkyMDcsIDAsIDg1NzgsIDU5OTUsIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCA2Mzk0OSwgCi0gICAgMCwgMjY3MCwgNDE2NywgMCwgMTE3MjMsIDAsIDc0MTIwLCAwLCA2NTA3NiwgOTM4LCA3Mzg1NywgNzM4NTQsIDExNzM3LCAKLSAgICA5NzIxLCAwLCAwLCAwLCAxMTc0MiwgMCwgMCwgMTE0OTMsIDEyMzM0LCAwLCA0MTUzLCAxMjMwMiwgMTA3OTMsIDUyNTAsIAotICAgIDEyNDA3LCAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA0MjAwNSwgNjU4MDYsIDAsIDAsIDQyMDAyLCAKLSAgICAxMjQwNCwgMCwgMCwgNDk0MCwgMTI0MTAsIDc2ODMsIDExNjcsIDAsIDQ5ODMsIDAsIDg2MSwgMCwgMCwgMCwgMCwgNjU1NzcsIAotICAgIDAsIDAsIDAsIDExOTU2LCAwLCAwLCAwLCA5NjE2LCA2NjMxLCAwLCAxMjgxNiwgNzQ1ODMsIDAsIDEyNzEwLCAwLCAxMjcyMSwgCi0gICAgNDEwMSwgNjYxODUsIDAsIDU5OTIsIDc2MTYsIDAsIDAsIDEyNTc3LCAwLCAwLCA4NTMsIDAsIDAsIDAsIDAsIDUwMTYsIAotICAgIDQzNTM1LCAwLCA0MjgzNSwgOTQ5MSwgOTE3OTEzLCAwLCA5MTc5MTQsIDAsIDEyNzEyLCA5MTc5MTksIDAsIDY1MDYwLCAKKyAgICAxMjAxODMsIDc4MjE5LCA1MDc5LCA2NDgwMiwgNDIyMTAsIDQ1OTcsIDY1NTMyLCA3ODQ0NCwgMTIwMTg1LCAxMjM3MSwgMCwgCisgICAgODQwNywgMCwgMTA4MDUsIDg1MTgsIDEwNzc5LCAxMjAxODgsIDAsIDAsIDEyMzY3LCA0MjE3MCwgMCwgMCwgNjI5LCAxOTI0LCAKKyAgICAwLCAxMjAzNywgNzQzNjYsIDU5ODcsIDg0NjIsIDgwMDUsIDEyMzY1LCA2MzkzMywgMTI3MzcwLCAxMjA4MTUsIDEyMzY5LCAKKyAgICAxMDY0OSwgMCwgNTA3NywgMTI3MTA4LCAxMDg4MCwgNjM5MjcsIDUwNzUsIDAsIDAsIDY1MDc1LCAwLCAxMTAwNywgMCwgCisgICAgNjY2NTksIDAsIDAsIDY2Njg0LCAwLCAzNDM0LCA0OTU0LCAxOTA0LCAwLCA1MjY2LCAxMjY5ODAsIDUyNzIsIDEwNDk5LCAKKyAgICA0NTA3LCA5NTc4LCA2MzkyMywgMTIwMTc3LCA3OTc5LCAwLCA5ODMxLCAwLCAxOTQ5MjYsIDQ2MSwgOTgwMywgMCwgNDUwNCwgCisgICAgMTUwNSwgMCwgNjMyNSwgNTI3NiwgNDMwMjEsIDAsIDAsIDU1MjM2LCAwLCA2NjQ2MSwgNTE3NywgNDEzMjQsIDEyMDU1LCAKKyAgICA4NzIyLCAwLCA0MTMyNywgMCwgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgODk0OCwgNDEzMjUsIDAsIDcyMSwgCisgICAgMTAxODIsIDkxMDgsIDAsIDAsIDExOTE4NSwgNDIyMjksIDE5NDkxMiwgMCwgNTk5OCwgMCwgNDIzNTMsIDc0ODI1LCAwLCAKKyAgICAxMjU4NywgMCwgNzg1NzEsIDAsIDAsIDAsIDQxNTc2LCA0MjIxNSwgNzg1NzAsIDExOTIwNywgMCwgODU3OCwgNTk5NSwgCisgICAgNzU3MywgNDE1NzUsIDc0Nzg5LCA3NDc1MiwgNjM5NDQsIDYzOTQ5LCA2NDc2NywgMjY3MCwgNDE2NywgMCwgMTE3MjMsIDAsIAorICAgIDc0MTIwLCAwLCA2NTA3NiwgOTM4LCA0MzQxNCwgNzM4NTQsIDExNzM3LCA5NzIxLCAwLCAwLCAwLCAxMTc0MiwgMCwgMCwgCisgICAgMTE0OTMsIDEyMzM0LCAwLCA0MTUzLCAxMjMwMiwgMTA3OTMsIDUyNTAsIDEyNDA3LCAxMTk3OCwgNDQwNCwgOTE4OSwgCisgICAgMTI0MDEsIDQyMDA3LCA1Nzc1LCA2NzU5LCA2NTgwNiwgNDM5OTcsIDAsIDQyMDAyLCAxMjQwNCwgMCwgMCwgNDk0MCwgCisgICAgMTI0MTAsIDc2ODMsIDExNjcsIDczNzI5LCA0OTgzLCAwLCA4NjEsIDAsIDAsIDAsIDAsIDY1NTc3LCA0MzM3MCwgMCwgMCwgCisgICAgMTE5NTYsIDAsIDAsIDAsIDk2MTYsIDY2MzEsIDAsIDEyODE2LCA3NDU4MywgNDIyMTgsIDEyNzEwLCA2ODY3NCwgMTI3MjEsIAorICAgIDQxMDEsIDY2MTg1LCAwLCA1OTkyLCA3NjE2LCAwLCAwLCAxMjU3NywgMCwgMCwgODUzLCA0MjY5MywgMCwgMCwgMCwgNTAxNiwgCisgICAgNDM1MzUsIDYzODkzLCA0MjgzNSwgOTQ5MSwgOTE3OTEzLCAwLCA5MTc5MTQsIDAsIDEyNzEyLCA5MTc5MTksIDAsIDY1MDYwLCAKICAgICAxMjA3OTcsIDk5MDAsIDAsIDAsIDE5NDkxOSwgMCwgMCwgMCwgNjQ3NzgsIDEyNTg1LCAxMDU2NSwgMCwgMTIxNzcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ5MDAsIDAsIDAsIDAsIDg5ODQsIDQxMTksIDAsIDg5NzEsIDAsIDQzMTEzLCA5NzAyLCAwLCAxMTAyNSwgCi0gICAgOTI0NSwgMTMwNDgsIDQ5MjcsIDQxMzgsIDAsIDE5NDkyMSwgMCwgMTIzOTcsIDAsIDAsIDEzMDU0LCAxMjM5NCwgMCwgMCwgCi0gICAgMCwgMTMwNTMsIDAsIDM5NDgsIDEwNzgxLCAxNTQ2LCAwLCA1MDEwLCAxNjgwLCAxMDUwNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzI2NywgMCwgNzQ4MzMsIDAsIDU5OTMsIDI4MTksIDAsIDEyNzA2LCAwLCAxODkzLCA3MjY2LCA2MzkxNSwgNzI2NCwgCi0gICAgNzI2NSwgMCwgMTM2MywgMCwgNjM5OTcsIDYzOTEwLCA2Mzk5NiwgMzA3NywgMCwgMCwgMTUxMiwgMCwgMTI1ODksIDQxNDc5LCAKLSAgICAwLCAwLCA0MzMzOSwgMCwgOTgzNiwgMTIwNzI3LCAwLCA0MTQ4MSwgNDMzMzUsIDc4MzIsIDQyMzQzLCAzMDkwLCA0MzMzNywgCi0gICAgODE3LCAxNjY0LCAxODUwLCAwLCAzMDc5LCAxMTM0MCwgNDI0MDgsIDQyNDQ3LCAwLCAxMjAwMjAsIDQyMzA3LCAxMjM4NiwgCi0gICAgNDIzMDQsIDAsIDAsIDEyMzg5LCAwLCAwLCA0MTk5NiwgMTE1MjYsIDYzOTg1LCA1ODY0LCAxMTQ3LCA2NjY4OCwgNDI4ODcsIAotICAgIDE5ODcsIDAsIDU0ODAsIDc4NTgsIDExNjUzLCA0MTE2LCAxMjM5MSwgNjYxOTMsIDAsIDQ5MzksIDEyMzg0LCAwLCAwLCAKLSAgICA0MTY4NiwgNjM5MDUsIDExOTYwMSwgMCwgMCwgMCwgMCwgMCwgMCwgODI0NywgNTA3LCA5MSwgMjA0MiwgMTIwNzc1LCAwLCAKLSAgICAwLCA2NjAyOCwgMTAwMzYsIDQxODQ0LCAxMTk4MzAsIDc3NCwgMTE5ODMxLCAwLCAxMTk4MTUsIDU5OTQsIDEyNTM5LCAwLCAKLSAgICAxMTk4MTcsIDEyMDU5NywgMTE5ODMzLCAwLCAwLCAwLCAwLCA3NzE5LCA2MDI2LCAyNDg2LCAwLCAwLCAxNjIsIDAsIAotICAgIDY1MjE5LCA0MTA3MywgOTY4NywgNDE2ODEsIDYzMDQsIDExOTgxMiwgNjYxOTYsIDAsIDUyNjIsIDAsIDY2NjU4LCAxMjY4MSwgCi0gICAgNDIzNzksIDAsIDc1MzQsIDEyMjE5LCAwLCAwLCA0MjgxMCwgMTA0OTIsIDAsIDAsIDAsIDQzMTE5LCAwLCAxMjA3NTMsIAotICAgIDEyNDAzLCAyNTAwLCAxOTUwMTMsIDAsIDQ4OTksIDAsIDAsIDAsIDc0MTEzLCAyMzQzLCA0MTAzLCAxOTk0NiwgNzQxMTIsIAotICAgIDAsIDEzMTEyLCAwLCAwLCAxMjg1OSwgMCwgMCwgNjYzNjksIDU4NjEsIDAsIDExOTk5LCAxMjQwMCwgMCwgMCwgMTI2NDUsIAotICAgIDUxNDYsIDExMzIwLCAwLCA2NzYxMiwgNjUwNDAsIDAsIDY0MTg0LCAxMjk3NCwgNjQxODMsIDY3NjEzLCAxMjA2NDUsIAotICAgIDUxNDcsIDAsIDAsIDc0NTI0LCAwLCAxOTI4LCAwLCAwLCA1OTkxLCAzNDQ1LCA2NzYwOSwgNDk3NiwgNjQxNzYsIDAsIAotICAgIDY3NjEwLCA4MjQxLCAwLCAwLCA0MjA2LCAwLCAwLCAwLCAwLCAwLCAxMDEzOCwgMCwgMCwgODg5NywgMCwgMCwgODM1NywgCi0gICAgNDEyNCwgMCwgNjU4MzYsIDEyMDY0MSwgMCwgMCwgMCwgMCwgMTEyMywgOTYzLCA0MTU1MywgMTAxMjAsIDEyNDA1LCAwLCAwLCAKLSAgICAzOTgsIDEzMjc4LCA5NzIzLCA0MTU1MSwgMTIwMzExLCA3OTQ1LCAwLCA0NDAyLCAxMDg5NiwgMTI0MDIsIDAsIDQyMzkyLCAKLSAgICAxMzA1LCAxMjQwOCwgMCwgMCwgMCwgMCwgNDE0NjQsIDEyNDExLCAxMjk2OSwgMTIwODI0LCA0MTQ2NSwgMCwgMTk1MDE3LCAKLSAgICAxNTc1LCAwLCA2Mzk1NSwgMTY1LCAzMDI0LCA0MTQ2NywgMTE5MTYzLCAwLCA5MDkzLCAwLCA5MTQ3LCAwLCAwLCAwLCAKLSAgICA5MTQ4LCA5NjkyLCA0MDk2LCA1MywgNzM3NzYsIDEyMzY4LCAxOTUwMTgsIDAsIDk1OTQsIDAsIDAsIDQzNTI3LCAwLCA3MjcsIAotICAgIDAsIDAsIDU4MDUsIDAsIDAsIDAsIDQyMTc2LCAxMjM3MCwgMTE2NTUsIDExOTA5NSwgMTA1OTEsIDEyMzY0LCAwLCAxMjM3MiwgCi0gICAgMTIwNjQyLCAwLCAwLCAwLCAwLCAxMjM2NiwgMTA5NjMsIDYwNjYsIDEzMjksIDAsIDMwNTIsIDkyMjAsIDAsIDY0NDc4LCAwLCAKLSAgICAxMDgwMywgNDEzMiwgMCwgMCwgMCwgMCwgMCwgNzQ4MzcsIDAsIDE0OTksIDAsIDgwNTUsIDAsIDYzOTY1LCAwLCA2Mzk2MiwgCi0gICAgNzQwNDIsIDg5MjQsIDQzMTIzLCA1OTg4LCAzNjYwLCA2Mzk2OSwgMTE3ODEsIDYzOTY4LCA4Nzg4LCAxMzU3LCA2NDg1MSwgCi0gICAgNjU3NDMsIDAsIDg3NzQsIDAsIDEyNzA4NiwgNjc2MTgsIDEyMDE3MiwgMCwgMTkzMywgMCwgOTU2NCwgMCwgMCwgNzM4NjYsIAotICAgIDAsIDAsIDI0ODcsIDY3NjE0LCAzMTIxLCAxODA0LCAzMzExLCA2NzYxNSwgMCwgMCwgMTIyMjAsIDY3NjE2LCAxMjA1OTgsIAotICAgIDAsIDAsIDAsIDY2NzUsIDAsIDAsIDY3NTkyLCAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCA5MTMyLCAwLCA2NDYxOSwgNTEwLCAKLSAgICA2NDY2MywgMCwgMCwgNDU2MSwgNzcxMSwgMTM5OCwgMCwgMCwgNzQwMzQsIDQxNTY5LCAwLCAxMTQwNiwgODE2NywgMTIxMjcsIAotICAgIDAsIDg0MCwgMCwgMCwgMCwgNjk2NywgMCwgMCwgOTc5NiwgMCwgMzMzLCAwLCAwLCA4MTQ0LCAwLCAwLCAwLCAxMjQwNiwgMCwgCi0gICAgMCwgMCwgNjY3OCwgNzc2OSwgMCwgMTI2MjEsIDAsIDAsIDEwMjI3LCA0NzY0LCA0MzEwMSwgMCwgMCwgNDA5ODYsIDQxMjcsIAotICAgIDY2NDg3LCAwLCAwLCAxMjc1NCwgMTk1MDIyLCAwLCAwLCAwLCA2NzU5NCwgNjU2MDksIDEyOTQ0LCA0MDUwLCA2NzU5NSwgMCwgCi0gICAgNDMxMDIsIDEwNTgxLCAxMjk4NSwgNDUzMywgMCwgMCwgNjQ5MCwgMCwgMTIwMzgsIDAsIDAsIDEyMDcwNCwgNjU0NjEsIAotICAgIDk3OTgsIDAsIDAsIDE5NDgsIDExOTAwNywgMCwgOTUyLCAwLCAwLCAwLCAxMjA4MDIsIDY0NDksIDk0OTQsIDAsIDAsIAotICAgIDQzMDk4LCA0ODQzLCA4MTQyLCA2NDE2MCwgNDA5OCwgNjQxNzAsIDAsIDAsIDM0MzYsIDAsIDAsIDEyODE3LCA2NzU5NywgCi0gICAgNjY3NiwgMzkzMCwgNjY3MDgsIDAsIDAsIDY3NTk4LCAwLCAwLCAwLCA2NTU5MSwgNDE1ODEsIDY1OTE2LCAxNDUzLCAwLCAwLCAKLSAgICAwLCA4NTAwLCAwLCAxMjAxNDIsIDczNzQzLCAxMjA0MDAsIDQzMTcsIDEyMDE0MCwgMCwgNjQ2NzYsIDAsIDAsIDY3NjA2LCAKLSAgICAxMTkwODMsIDAsIDAsIDEzMTAyLCAwLCA2NjAwMywgNjY3MiwgMCwgMCwgMCwgMCwgNjM4NDEsIDk2MTMsIDkwMDEsIDQ1MjYsIAotICAgIDExMjc0LCA2NzYwMSwgNjQ1MjAsIDY0MjEwLCA2NjY0LCAwLCA0MjA1NiwgMTAyMjgsIDY0OTU3LCAxMTI4MSwgMCwgCi0gICAgNjQyMTMsIDE0NjksIDY2NjQwLCA2NTM4MSwgMCwgNDk4OCwgNDIzNzIsIDAsIDk1OTgsIDkwNCwgMzUyLCAwLCAxNDUxLCAKLSAgICA4MDYxLCA4NDUzLCA0MTM0LCAwLCA3NDg0NywgNjc2MDAsIDAsIDAsIDEwNTIwLCA4NTc1LCAwLCAxMjAxLCAwLCAxMjg0NiwgCi0gICAgMCwgMCwgMTE5MTksIDY0OTYyLCAwLCA3NDg2NCwgMCwgODUxMSwgOTQ2MCwgODIzLCAxMTU4NywgMTIzMDUsIDAsIDY0Njk1LCAKLSAgICAwLCAxMjM4NywgMTI1MywgMTMxODMsIDY1NzY2LCA1MDAsIDQyNzgzLCA2NTc2NSwgNjQyMDgsIDY0MzY5LCA2NTc2MCwgCi0gICAgNjU3NjEsIDExOTU4NSwgMTE2MDYsIDY0Nzg0LCAxMTcwMiwgNjY0OTgsIDk4MjEsIDAsIDAsIDUxNTIsIDExMDQ4LCA3NTMzLCAKLSAgICAxMjAxMjEsIDY0NDEwLCAwLCAwLCA0MzIzLCAxMjAwNjIsIDAsIDAsIDAsIDQyNTg3LCA2NTMzOSwgNDEzOTQsIDAsIDQ3NjMsIAotICAgIDQxMTIsIDExODkzNSwgMCwgNTI2MCwgNDMxNDMsIDAsIDMyNiwgMTIwMTMxLCAwLCAwLCAxMDc3MSwgMjg3NiwgMTk0OTE1LCAKLSAgICAxOTQ4MzUsIDE5NDkyNCwgNDEzOTgsIDEyNzA3OSwgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIDQ1MywgNDEzOTYsIDEyMDUyNCwgCi0gICAgMCwgMTIxNDAsIDk1NzIsIDAsIDcwMDMsIDE5NDg4MywgNDIzMzQsIDc3MDQsIDAsIDAsIDQzMTQ0LCA0MTIzLCAwLCAKLSAgICA0MzE0NiwgMCwgMCwgMCwgNjU3NTksIDEwNzY1LCA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCA0MTI2LCAwLCAKLSAgICA5NTIxLCA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIDAsIDEwNDY0LCAwLCAwLCAxOTQ4NjksIDY0NTE0LCAxMTUyOCwgNjQwMjQsIAotICAgIDAsIDY3OSwgNjQwMTMsIDAsIDU4NTAsIDc1OCwgNzUzNiwgMCwgMCwgNDE0NDEsIDEwNjkzLCA2NDAwNiwgMCwgNjQwMDUsIAotICAgIDEwNTQxLCAxMTkwMTksIDAsIDY0NjYwLCAwLCAxMTkwNTAsIDAsIDAsIDExMzksIDQzMjk4LCA2NDAyNywgNjQwMjksIAotICAgIDg5NzAsIDAsIDY0MDAwLCAwLCAxMDc3NCwgMCwgNDI1MjIsIDEyNDIxLCAxOTQ4NzYsIDAsIDE4NTIsIDMwNTcsIDAsIAotICAgIDczNzQ0LCA2NDAzNCwgNjQwNDEsIDAsIDAsIDAsIDAsIDAsIDc2NDUsIDEyODU0LCA3NDMzOCwgMzQ5NiwgMCwgMCwgMCwgCi0gICAgOTEwMiwgNjI3LCAwLCA2MTU4LCA4MzI3LCA3NDU1MywgNjY2MzIsIDEyNDE5LCAwLCAxMTU3MCwgMCwgMTk5NjAsIDExNjk2LCAKLSAgICAwLCAxMDE4LCAwLCAxOTQ5MDksIDAsIDE2ODIsIDE5NDg5NiwgMCwgNDI3NTYsIDEyOTUxLCAxOTQ5MDYsIDAsIDAsIAotICAgIDczODE0LCAxMTQxMiwgMTI1NjMsIDEwNzI4LCAxOTQ4MzAsIDAsIDExODg2MywgNDMzMTEsIDY0OTY2LCAxMTU3NywgMCwgCi0gICAgNDMwNDAsIDE4MzMsIDExNTc2LCAwLCA3NDc3OSwgMCwgMTg1LCA2NTA4NSwgNzQ1MzMsIDY0NzU0LCAxOTQ4NDgsIDc1MzUsIAotICAgIDgwODUsIDQyNTI1LCAxMjAzODcsIDk3NDksIDQxNzAxLCA2MTMxLCAxOTQ5LCA0MTE3LCA3ODQ3LCAxMjA0ODksIDAsIAotICAgIDY0NDgzLCA2NTY5MywgMCwgMCwgMCwgMCwgNDIyNDAsIDAsIDAsIDQyODY0LCAwLCA2NDY2NywgNDE4NjgsIDExODQsIDAsIAotICAgIDgxNSwgMTE0ODQsIDAsIDY3ODQwLCAwLCAwLCAwLCAwLCAwLCA2NDY4MywgMCwgMCwgMCwgMCwgMCwgOTg3OSwgMCwgMCwgCi0gICAgNDE1OCwgMCwgNjgxNjYsIDAsIDAsIDAsIDAsIDAsIDMzMiwgMTE4ODA4LCAwLCA1MTQyLCAyNDA3LCAwLCAwLCAwLCAwLCAKLSAgICA3NDM3MywgMCwgMCwgMCwgNjM4NzAsIDQzMTYzLCAwLCAwLCAxMTkwODEsIDQyODY3LCAxODM0LCAwLCAwLCAwLCAxMDk0MCwgCi0gICAgNjUyNDksIDExOTA0MCwgODY2MiwgMCwgMCwgMjY1MiwgMTIwNTI3LCAxMTUzOSwgMTA3ODQsIDE5NTA5MywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTE4ODU4LCA5MTc1MDUsIDE4MjgsIDc0NDc0LCAxMjAzMjcsIDAsIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgCi0gICAgMTE4ODU0LCA2NTIzOCwgMCwgNDgzMiwgNjU1NzMsIDAsIDYyNzksIDEyNTA4LCAxMjkwNCwgMTI1MDIsIDkxNjEsIDAsIAotICAgIDE2MjAsIDAsIDM2MDEsIDAsIDAsIDAsIDYwOSwgMTE1NTUsIDAsIDEyNDk2LCAwLCA3NDE4MSwgNDM0MywgMTI1MDUsIDAsIAotICAgIDAsIDAsIDExMzc3LCAyMzksIDAsIDYzNywgMCwgMCwgNDMwMjksIDAsIDAsIDAsIDQzNTY1LCAxMjcwODIsIDAsIDEyNjk2LCAKLSAgICAwLCAwLCAwLCAxMjkyOSwgMCwgNzEyLCAwLCA0MTk3LCAwLCA0MjgxOCwgMCwgMCwgMTIwNDkwLCAwLCAwLCAxNTA2LCAKLSAgICA0MzU2MiwgMCwgMCwgMCwgMTI2NTEsIDAsIDY0NjI4LCA3NDUxNywgMTIwNTgsIDc0MDg0LCA5MTc4MzgsIDc0OTQsIDAsIAotICAgIDQ5MjQsIDY1NTkyLCAxMTg4NDQsIDAsIDEyNzA4OCwgMzU1LCA5NzE5LCAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMCwgMCwgCi0gICAgMTIwMzMsIDQyMTc4LCAwLCAwLCA0MjU3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE3OCwgMCwgMCwgMCwgMCwgOTA4MCwgCi0gICAgMTI3MDAwLCAwLCAwLCAwLCAwLCAxMTA4MiwgMCwgNTY5OSwgMTk1MTAwLCAwLCA5NDg4LCA2NTE2NiwgMTE5MTEyLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA1MjY1LCAwLCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAwLCA0MzA0NSwgMCwgMCwgNDMzNDUsIDAsIAotICAgIDEwNzcwLCAxMTg5OTQsIDQzMzQ0LCA0NjUsIDk4MjksIDAsIDc0MzQ4LCAwLCA0MzM0NiwgODExNiwgNzk1LCAwLCAwLCAKLSAgICAxMjQ2MiwgMTA5MzAsIDEwODMxLCAwLCAxMTg5NTIsIDY0MzYyLCAwLCAwLCAxMjA4MTEsIDAsIDEyNDY4LCA4NjA3LCAKLSAgICAxMDA4LCAwLCAxMDA5MiwgMCwgOTE3ODQyLCA2Nzg1NSwgMCwgNzM3NzEsIDE3NjYsIDExMjgyLCAxMTk5NiwgMTgyMCwgCi0gICAgNDU0NywgMCwgMCwgMCwgMCwgMTMyMjMsIDAsIDY0NTk1LCAwLCAwLCAwLCA0MzQ1LCAxMjYxNiwgMCwgMCwgMCwgNzQ0NjcsIAotICAgIDAsIDAsIDAsIDUzODIsIDAsIDAsIDAsIDExOTA2MCwgNjQ5NTMsIDU0MDYsIDE5OTIwLCAwLCA2NjUxMCwgMzU5MCwgMCwgCi0gICAgMTEzMCwgMCwgMCwgNDIwMTYsIDExODIzLCA0MzAyMywgMCwgMTE4ODk2LCA3NzQyLCAwLCAxMzI4MCwgMCwgOTMyNiwgCi0gICAgNzM4MjYsIDUzMTAsIDc0ODEyLCAwLCAxMTk5NjIsIDg5NTksIDQzNTg5LCA3NDMzNCwgNjY3MjMsIDAsIDg1NjgsIDAsIAotICAgIDEyMDQ5NiwgNzM4MTYsIDEyMDgwMywgMCwgMCwgMCwgMTE2MjEsIDEyNDYwLCAwLCAwLCAwLCAwLCA3NDUxOSwgMCwgMCwgMCwgCisgICAgMCwgNzc4MjQsIDAsIDQ5MDAsIDAsIDEyODc4LCAwLCA4OTg0LCA0MTE5LCA3NDc2OCwgODk3MSwgNzg1OTMsIDQzMTEzLCAKKyAgICA5NzAyLCA3ODU5NCwgMTEwMjUsIDkyNDUsIDEzMDQ4LCA0OTI3LCA0MTM4LCA3NDE4NSwgMTk0OTIxLCAwLCAxMjM5NywgCisgICAgNzc4MjcsIDAsIDEzMDU0LCAxMjM5NCwgMCwgMCwgMCwgMTMwNTMsIDAsIDM5NDgsIDEwNzgxLCAxNTQ2LCAwLCA1MDEwLCAKKyAgICAxNjgwLCAxMDUwNywgNzg1OTAsIDc4NTgzLCAwLCAwLCAwLCAxOTQ5MTUsIDcyNjcsIDAsIDc0ODMzLCAwLCA1OTkzLCAKKyAgICAyODE5LCAwLCAxMjcwNiwgNzc4NDAsIDE4OTMsIDcyNjYsIDYzOTE1LCA3MjY0LCA3MjY1LCAwLCAxMzYzLCAwLCA2Mzk5NywgCisgICAgNjM5MTAsIDYzOTk2LCAzMDc3LCAwLCAwLCAxNTEyLCAwLCAxMjU4OSwgNDE0NzksIDAsIDAsIDQzMzM5LCAwLCA5ODM2LCAKKyAgICAxMjA3MjcsIDAsIDQxNDgxLCA0MzMzNSwgNzgzMiwgNDIzNDMsIDMwOTAsIDQzMzM3LCA4MTcsIDE2NjQsIDE4NTAsIDAsIAorICAgIDMwNzksIDExMzQwLCA0MjQwOCwgNDI0NDcsIDE5NDcwNCwgMTIwMDIwLCA0MjMwNywgMTIzODYsIDQyMzA0LCAwLCAwLCAKKyAgICAxMjM4OSwgMCwgMTk0Njk0LCA0MTk5NiwgMTE1MjYsIDYzOTg1LCA1ODY0LCAxMTQ3LCA2Mzk5MiwgNDI4ODcsIDE5ODcsIDAsIAorICAgIDU0ODAsIDc4NTgsIDExNjUzLCA0MTE2LCAxMjM5MSwgNjYxOTMsIDAsIDQ5MzksIDEyMzg0LCAwLCAwLCA0MTY4NiwgCisgICAgNjM5MDUsIDExOTYwMSwgMTk0Njg4LCAwLCAwLCAxMjY0OSwgMCwgMCwgODI0NywgNTA3LCA5MSwgMjA0MiwgMTIwNzc1LCAKKyAgICA0MzY0MywgMTk0Njg5LCA2NjAyOCwgMTAwMzYsIDQxODQ0LCAxMTk4MTMsIDc3NCwgMTE5ODMxLCAwLCAxMTk4MTUsIDU5OTQsIAorICAgIDEyNTM5LCAwLCA3ODM3NSwgMTIwNTk3LCAxMTk4MzMsIDAsIDExOTYwMCwgMCwgMCwgNzcxOSwgNjAyNiwgMjQ4NiwgMCwgCisgICAgMTE5ODA4LCAxNjIsIDAsIDY1MjE5LCA0MTA3MywgOTY4NywgNDE2ODEsIDYzMDQsIDExOTgxMiwgNjYxOTYsIDAsIDUyNjIsIAorICAgIDAsIDU1MjMzLCAxMjY4MSwgNDIzNzksIDAsIDc1MzQsIDEyMjE5LCAwLCAxMjc1MjgsIDQyODEwLCAxMDQ5MiwgMCwgMCwgMCwgCisgICAgNDMxMTksIDAsIDEyMDc1MywgMTI0MDMsIDI1MDAsIDE5NTAxMywgMCwgNDg5OSwgMCwgMCwgMCwgNzQxMTMsIDIzNDMsIAorICAgIDQxMDMsIDE5OTQ2LCA3NDExMiwgNzc4NTEsIDEzMTEyLCAwLCAwLCAxMjg1OSwgMCwgMTIwMTQ4LCA2NjM2OSwgNTg2MSwgMCwgCisgICAgMTE5OTksIDEyNDAwLCAwLCAwLCAxMjY0NSwgNTE0NiwgMTEzMjAsIDY4NDEwLCA2NzQ4LCA2NTA0MCwgMCwgNjQxODQsIAorICAgIDEyOTc0LCA2NDE4MywgNjc2MTMsIDEyMDY0NSwgNTE0NywgMCwgMCwgNzQ1MjQsIDAsIDE5MjgsIDAsIDY3NjQ5LCA1OTkxLCAKKyAgICAzNDQ1LCA2NzYwOSwgNDk3NiwgNjQxNzYsIDAsIDY3NjEwLCA4MjQxLCAwLCA3Nzg2OCwgNDIwNiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTAxMzgsIDAsIDAsIDg4OTcsIDAsIDAsIDgzNTcsIDQxMjQsIDc3ODYyLCA2NTgzNiwgMTIwNjQxLCAwLCA3Nzg1OSwgMCwgCisgICAgMCwgMTEyMywgOTYzLCA0MTU1MywgMTAxMjAsIDEyNDA1LCAxMjAxNTAsIDAsIDM5OCwgMTMyNzgsIDk3MjMsIDYzNjYsIAorICAgIDEyMDMxMSwgNzk0NSwgMCwgNDQwMiwgOTk3MCwgMTI0MDIsIDAsIDQyMzkyLCAxMzA1LCAxMjQwOCwgMCwgNDQwMDcsIDAsIAorICAgIDAsIDQxNDY0LCAxMjQxMSwgMTI5NjksIDEyMDgyNCwgNDE0NjUsIDAsIDg1MjgsIDE1NzUsIDAsIDYzOTU1LCAxNjUsIAorICAgIDMwMjQsIDQxNDY3LCAxMTkxNjMsIDAsIDkwOTMsIDAsIDkxNDcsIDAsIDYzOTU4LCAwLCA5MTQ4LCA5NjkyLCA0MDk2LCA1MywgCisgICAgNzM3NzYsIDY3NTAsIDE5NTAxOCwgMCwgOTU5NCwgMCwgMCwgNDM1MjcsIDAsIDcyNywgMCwgMCwgNTgwNSwgMCwgNjcyNiwgCisgICAgMCwgNDIxNzYsIDEyMzcwLCAxMTY1NSwgMTE5MDk1LCAxMDU5MSwgMTIzNjQsIDAsIDEyMzcyLCAxMjA2NDIsIDEyMDMwNywgCisgICAgMCwgMCwgMCwgMTIzNjYsIDEwOTYzLCA2MDY2LCAxMzI5LCAwLCAzMDUyLCA5MjIwLCAwLCA2NDQ3OCwgMCwgMTA4MDMsIAorICAgIDQxMzIsIDEyMDMwNiwgNjg0NzQsIDAsIDAsIDAsIDc0ODM3LCAwLCAxNDk5LCAwLCA4MDU1LCA0Mjc0MCwgNjM5NjUsIDAsIAorICAgIDYzOTYyLCA3NDA0MiwgODkyNCwgNDMxMjMsIDU5ODgsIDM2NjAsIDYzOTY5LCAxMTc4MSwgNDI3MTgsIDg3ODgsIDEzNTcsIAorICAgIDY0ODUxLCA2NTc0MywgMCwgODc3NCwgMCwgMTI3MDg2LCA5OTQxLCAxMjAxNzIsIDAsIDE5MzMsIDEyMDE1NCwgOTU2NCwgMCwgCisgICAgMCwgNzM4NjYsIDAsIDAsIDI0ODcsIDY3NjE0LCAzMTIxLCAxODA0LCAzMzExLCA2NzYxNSwgMCwgNzgzMDIsIDEyMjIwLCAKKyAgICA2NzYxNiwgMTIwNTk4LCAwLCAwLCA2ODIwMCwgNjY3NSwgMCwgMCwgNjc1OTIsIDEyMDY4NSwgMCwgNjQ3NzEsIDExOTgsIAorICAgIDkxMzIsIDAsIDY0NjE5LCA1MTAsIDY0NjYzLCAwLCAwLCA0NTYxLCAyMTAxLCAxMzk4LCAwLCAwLCA3NDAzNCwgNDE1NjksIAorICAgIDAsIDExNDA2LCA4MTY3LCAxMjEyNywgMCwgODQwLCAwLCAwLCAwLCA2OTY3LCAwLCAwLCA5Nzk2LCAwLCAzMzMsIDAsIDAsIAorICAgIDgxNDQsIDAsIDAsIDAsIDEyNDA2LCAwLCAxOTkzMSwgMTE5MDg5LCA2Njc4LCA3NzY5LCAwLCAxMjYyMSwgMCwgMCwgCisgICAgMTAyMjcsIDQ3NjQsIDQzMTAxLCA5OTgxLCAwLCA0MDk4NiwgNDEyNywgNjY0ODcsIDAsIDQyMjAyLCAxMjc1NCwgMTk1MDIyLCAKKyAgICAwLCAwLCAwLCA2NzU5NCwgMjA0OCwgMTI5NDQsIDQwNTAsIDY3NTk1LCA5MTc5NjcsIDQzMTAyLCAxMDU4MSwgMTI5ODUsIAorICAgIDQ1MzMsIDE5NTAyMSwgNzQwMDMsIDY0OTAsIDAsIDEyMDM4LCAwLCAwLCAxMjA3MDQsIDY1NDYxLCA5Nzk4LCAwLCAwLCAKKyAgICAxOTQ4LCAxMTkwMDcsIDAsIDk1MiwgMCwgMCwgMCwgMTIwODAyLCA2NDQ5LCA5NDk0LCAxMjAzMTMsIDAsIDQzMDk4LCAKKyAgICA0ODQzLCA4MTQyLCA2NDE2MCwgNDA5OCwgNjQxNzAsIDAsIDAsIDM0MzYsIDAsIDAsIDEyODE3LCA2NzU5NywgNjY3NiwgCisgICAgMzkzMCwgNjY3MDgsIDAsIDAsIDY3NTk4LCAwLCAwLCAwLCA2NTU5MSwgNDE1ODEsIDY1OTE2LCAxNDUzLCAwLCAwLCAwLCAKKyAgICA4NTAwLCA0MjIyMiwgMTIwMTQyLCA3Mzc0MywgMTIwNDAwLCA0MzE3LCAxMTU0MywgNjc2NzYsIDY0Njc2LCAwLCAwLCAKKyAgICA2NzYwNiwgMTE5MDgzLCAwLCA0MjIxNywgMTMxMDIsIDAsIDY2MDAzLCA2NjcyLCAwLCAwLCAwLCAwLCA2Mzg0MSwgOTYxMywgCisgICAgOTAwMSwgNDUyNiwgMTEyNzQsIDY3NjAxLCA2NDUyMCwgNjQyMTAsIDY2NjQsIDc4NzA0LCA0MjA1NiwgMTAyMjgsIDY0OTU3LCAKKyAgICAxMTI4MSwgMCwgNjQyMTMsIDE0NjksIDY2NjQwLCA2NTM4MSwgNDIxOTcsIDQ5ODgsIDQyMzcyLCAwLCA5NTk4LCA5MDQsIAorICAgIDM1MiwgNDIyMjUsIDE0NTEsIDgwNjEsIDg0NTMsIDQxMzQsIDAsIDc0ODQ3LCA2NjU3NiwgMCwgMCwgMTA1MjAsIDg1NzUsIAorICAgIDk5NjAsIDEyMDEsIDAsIDEyODQ2LCAwLCAwLCAxMTkxOSwgNjQ5NjIsIDAsIDQzNzM5LCAxMjcyODEsIDg1MTEsIDk0NjAsIAorICAgIDgyMywgMTE1ODcsIDEyMzA1LCAwLCA2NDY5NSwgMCwgMTIzODcsIDEyNTMsIDEzMTgzLCA2NTc2NiwgNTAwLCA0Mjc4MywgCisgICAgNjU3NjUsIDY0MjA4LCA2NDM2OSwgNjU3NjAsIDY1NzYxLCAxMTk1ODUsIDExNjA2LCA2NDc4NCwgMTE3MDIsIDY2NDk4LCAKKyAgICA5ODIxLCAwLCAwLCA1MTUyLCAxMTA0OCwgNzUzMywgNjgzNjYsIDY0NDEwLCAwLCAwLCA0MzIzLCAxMjAwNjIsIDAsIDAsIAorICAgIDEyNzA1MiwgNDI1ODcsIDQyMjE0LCA0MTM5NCwgMCwgNDc2MywgNDExMiwgMTE4OTM1LCAwLCA1MjYwLCA0MzE0MywgMCwgCisgICAgMzI2LCAxMjAxMzEsIDY4NDIzLCAwLCAxMDc3MSwgMjg3NiwgNzQwNzQsIDE5NDgzNSwgMTk0OTI0LCA0MTM5OCwgNzM4MiwgCisgICAgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIDQ1MywgNDEzOTYsIDEyMDUyNCwgNDI3MjAsIDEyMTQwLCA5NTcyLCAwLCA3MDAzLCAKKyAgICAxOTQ4ODMsIDQyMzM0LCA3NzA0LCAwLCAwLCA0MzE0NCwgNDEyMywgODQ5NCwgNDMxNDYsIDk5NzcsIDAsIDAsIDY1NzU5LCAKKyAgICAxMDc2NSwgNjQwNjEsIDQ0NjUsIDk4MDgsIDY0MDU2LCA2NTU4MiwgNDEyNiwgMCwgOTUyMSwgOTU4OSwgNjQ3NTUsIDAsIAorICAgIDY0MDIwLCAwLCAxMDQ2NCwgMCwgMCwgMTk0ODY5LCA2NDUxNCwgMTE1MjgsIDY0MDI0LCAwLCA2NzksIDY0MDEzLCAwLCAKKyAgICA1ODUwLCA3NTgsIDc1MzYsIDAsIDAsIDQxNDQxLCAxMDY5MywgNjQwMDYsIDAsIDY0MDA1LCAxMDU0MSwgMTE5MDE5LCAwLCAKKyAgICA2NDY2MCwgMCwgMTE5MDUwLCAwLCAwLCAxMTM5LCA0MzI5OCwgNjQwMjcsIDY0MDI5LCA4OTcwLCAwLCA2NDAwMCwgMCwgCisgICAgMTA3NzQsIDAsIDQyMjAxLCAxMjQyMSwgMTk0ODc2LCAwLCAxODUyLCAzMDU3LCAwLCA3Mzc0NCwgNjQwMzQsIDY0MDM5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3NjQ1LCAxMjg1NCwgNzQzMzgsIDM0OTYsIDAsIDAsIDAsIDkxMDIsIDYyNywgMCwgNjE1OCwgODMyNywgCisgICAgNzQ1NTMsIDY2NjMyLCAxMjQxOSwgMTMzMDksIDExNTcwLCAwLCAxOTk2MCwgMTE2OTYsIDAsIDEwMTgsIDExODk3MCwgCisgICAgMTk0OTA5LCAwLCAxNjgyLCAxOTQ4OTYsIDE5NDkxMSwgNDI3NTYsIDY3NjUsIDE5NDkwNiwgMCwgMCwgNzM4MTQsIDExNDEyLCAKKyAgICA2NzY4LCAxMDcyOCwgMTk0ODMwLCAxMTkwMTAsIDExODg2MywgNDMzMTEsIDY0OTY2LCAxMTU3NywgMCwgNDMwNDAsIDE4MzMsIAorICAgIDExNTc2LCAwLCA3NDc3OSwgMCwgMTg1LCA2NTA4NSwgNzQ1MzMsIDY0NzU0LCAxOTQ4NDgsIDc1MzUsIDgwODUsIDQyNTI1LCAKKyAgICAxMjAzODcsIDk3NDksIDQxNzAxLCA2MTMxLCAxOTQ5LCA0MTE3LCA3ODQ3LCAxMjA0ODksIDE5NDcxMSwgNjQ0ODMsIAorICAgIDY1NjkzLCAwLCAwLCAwLCAwLCA0MjI0MCwgMCwgMCwgNDI4NjQsIDAsIDY0NjY3LCA0MTg2OCwgMTE4NCwgMCwgODE1LCAKKyAgICAxMTQ4NCwgMTI3NTM1LCA2Nzg0MCwgMCwgMCwgMCwgMCwgMTA5ODYsIDY0NjgzLCAwLCAwLCAwLCAwLCAwLCA5ODc5LCAwLCAKKyAgICAwLCA0MTU4LCAwLCA2ODE2NiwgMCwgMCwgMCwgMCwgMCwgMzMyLCAxMTg4MDgsIDAsIDUxNDIsIDI0MDcsIDAsIDQyMTk5LCAKKyAgICAwLCAwLCA3NDM3MywgMCwgNTUyMTcsIDAsIDYzODcwLCA0MzE2MywgMCwgMCwgMTE5MDgxLCA0Mjg2NywgMTgzNCwgMCwgMCwgCisgICAgNjk4MTcsIDEwOTQwLCA2NTI0OSwgMTE5MDQwLCA4NjYyLCAwLCAwLCAyNjUyLCAxMjA1MjcsIDExNTM5LCAxMDc4NCwgCisgICAgMTk1MDkzLCA2NzY3NCwgMCwgMCwgMCwgMCwgNzQ1NjIsIDkxNzUwNSwgMTgyOCwgNzQ0NzQsIDEyMDMyNywgNzg2MjAsIAorICAgIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgMTE4ODU0LCA2NTIzOCwgNjgzNzQsIDQ4MzIsIDY1NTczLCAwLCA2Mjc5LCAKKyAgICAxMjUwOCwgMTI5MDQsIDEyNTAyLCA5MTYxLCAwLCAxNjIwLCAwLCAzNjAxLCAxOTUwOTQsIDAsIDAsIDYwOSwgMTE1NTUsIDAsIAorICAgIDEyNDk2LCAwLCA3NDE4MSwgNDM0MywgMTI1MDUsIDAsIDAsIDAsIDExMzc3LCAyMzksIDAsIDYzNywgMCwgMCwgNDI2NzEsIAorICAgIDAsIDAsIDAsIDQzNTY1LCAxMjcwODIsIDAsIDEyNjk2LCAwLCAwLCAwLCAxMjkyOSwgMCwgNzEyLCAwLCA0MTk3LCAwLCAKKyAgICA0MjgxOCwgMCwgMCwgMTIwNDkwLCAwLCAwLCAxNTA2LCA0MzU2MiwgMCwgMCwgMCwgMTI2NTEsIDAsIDY0NjI4LCA3NDUxNywgCisgICAgMTIwNTgsIDc0MDg0LCA5MTc4MzgsIDc0OTQsIDAsIDQ5MjQsIDY1NTkyLCAxMTg4NDQsIDAsIDEyNzA4OCwgMzU1LCA5NzE5LCAKKyAgICAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMCwgMCwgMTIwMzMsIDQyMTc4LCAwLCA2OTc2MCwgNDI1NzEsIDkxNzgzNywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMzE3OCwgMCwgMCwgMCwgMCwgOTA4MCwgMTI3MDAwLCAxMjAzNTIsIDAsIDY4MjA5LCAwLCAxMTA4MiwgCisgICAgMCwgNTY5OSwgMTk1MTAwLCA2NjAwMCwgOTQ4OCwgNjUxNjYsIDExOTExMiwgMCwgMCwgMCwgMCwgMCwgMCwgNTI2NSwgCisgICAgNjkyMzUsIDAsIDExNDg3LCA2Nzg1OCwgMTI0NjQsIDAsIDQzMDQ1LCAwLCAwLCA0MzM0NSwgMCwgMTA3NzAsIDExODk5NCwgCisgICAgNjgwNywgNDY1LCA5ODI5LCAwLCA3NDM0OCwgMCwgNDMzNDYsIDgxMTYsIDc5NSwgMCwgMCwgMTI0NjIsIDEwOTMwLCAKKyAgICAxMDgzMSwgMCwgMTE4OTUyLCA2NDM2MiwgNzQzMzQsIDAsIDEyMDgxMSwgMCwgMTI0NjgsIDg2MDcsIDEwMDgsIDAsIAorICAgIDEwMDkyLCAwLCA5MTc4NDIsIDY3ODU1LCA1NTI1NywgNzM3NzEsIDE3NjYsIDExMjgyLCAxMTk5NiwgMTgyMCwgNDU0NywgMCwgCisgICAgMCwgMCwgMCwgMTMyMjMsIDAsIDY0NTk1LCAwLCAwLCAwLCA0MzQ1LCAxMjYxNiwgMCwgMCwgMCwgNzQ0NjcsIDAsIDAsIDAsIAorICAgIDUzODIsIDAsIDAsIDAsIDExOTA2MCwgNjQ5NTMsIDU0MDYsIDE5OTIwLCAwLCA2NjUxMCwgMzU5MCwgMCwgMTEzMCwgMCwgMCwgCisgICAgNDIwMTYsIDExODIzLCA0MzAyMywgMCwgMTE4ODk2LCA3NzQyLCAwLCAxMzI4MCwgMCwgOTMyNiwgNzM4MjYsIDUzMTAsIAorICAgIDc0ODEyLCAwLCAxMTk5NjIsIDg5NTksIDQzNTg5LCA2NzQ3LCA2NjcyMywgMCwgODU2OCwgMCwgMTIwNDk2LCA3MzgxNiwgCisgICAgMTIwODAzLCAwLCA0MjY3MCwgMCwgMTE2MjEsIDEyNDYwLCAwLCAxMjA2MzEsIDAsIDQzMDYzLCA3NDUxOSwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMTE2ODksIDU0MTAsIDU3ODMsIDEwNDY4LCA4NDAzLCA1NDAwLCAxMTU5NCwgMCwgMCwgMTE4OTkwLCAxMDQ5MSwgCiAgICAgMCwgNjQ0MTIsIDAsIDAsIDU1ODcsIDQyODY1LCA2NDQwNCwgODI2OCwgNDkyMywgNjUwODYsIDg5ODEsIDEyMzgyLCAKLSAgICA0MjEzMywgMTIwNzU1LCA5NzA2LCAwLCAwLCA2NjYxMCwgMTA0NjEsIDEyMTAzLCAwLCA4NjQyLCAwLCA0Mjc2NiwgMCwgMCwgCi0gICAgMCwgMCwgMTE5MTA1LCAwLCAwLCAwLCA4ODE2LCA0MTUxNSwgMCwgMTE4MDIsIDgwNDEsIDE0NjEsIDkxMCwgMTE5MTMzLCAwLCAKLSAgICAwLCAzNjU4LCAwLCAxMjA1MjUsIDAsIDc2MTcsIDAsIDEyODg4LCAwLCAwLCAxMzE0MywgMCwgNDE1MTQsIDAsIDU3MDMsIDAsIAotICAgIDQxNTE3LCA0MTUwNCwgNDE1MTksIDEwMDE2LCA2NDMwNSwgMCwgNjU4NjQsIDYyMywgNzgxLCA2NzAsIDEwNjYwLCA1NzY5LCAKLSAgICA2MTMsIDc1NDMsIDEyMDc3NCwgNDc3LCA0MTA4MywgMCwgMCwgNTkyLCAxNTc4LCAxMjQ1OSwgMCwgMCwgMCwgODIyNSwgMCwgCi0gICAgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIDAsIDY0NywgMCwgNjMzLCAxMjA3NDQsIDAsIDAsIDEyNDgwLCA3NDM1NCwgMCwgMzksIAotICAgIDEyNDg3LCAwLCAxMjA1MjksIDc0MTk5LCAxMjQ4MiwgMCwgMTI0ODksIDAsIDMxOTUsIDU1NTAsIDAsIDc4OTcsIDAsIAotICAgIDEyMDMsIDc0Mzk2LCAxODEzLCA2NDU0NCwgNDEzMTEsIDEyMDkwLCAwLCAyODc3LCAwLCAwLCAxNjc1LCAwLCAwLCAwLCAwLCAKLSAgICAxMDA3MCwgMTA1OTUsIDAsIDExOTA3NywgMCwgMCwgMCwgMCwgMCwgMTE4ODI3LCAwLCAwLCAwLCAxMTk1NjEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyMDY5MiwgMCwgMCwgMjcwLCAwLCAxMDcxNCwgMCwgMCwgMCwgMCwgMCwgNjUzNzIsIDAsIDc0MDM4LCAKLSAgICAxMTk1NTgsIDYyNzMsIDY2Njc5LCAzNjQsIDk1OTUsIDAsIDAsIDAsIDcwNywgMCwgMCwgOTI4MiwgNjY0ODksIDIyNCwgMCwgCi0gICAgMCwgOTMzMiwgNDk2NiwgMCwgMCwgMCwgMCwgMzg0MSwgMCwgMCwgMTA3MzIsIDAsIDg1MCwgNDk3MiwgMCwgNjQ2OTksIAotICAgIDI5MDksIDAsIDY1MzA5LCAwLCAwLCAxMTU0NCwgMTAyMDMsIDk2MDgsIDAsIDAsIDExOTYyLCAwLCAxMjUwNywgMTE5NiwgMCwgCi0gICAgMCwgNzc3LCAwLCA0Mzc1LCA2NTI3MSwgMCwgMCwgMTIxOTgsIDAsIDY0ODI0LCAwLCAwLCA5NDU0LCA2Mzc3OCwgODY1OCwgCi0gICAgNDI1MjgsIDAsIDI3MDUsIDkxNzk3NSwgNDE1MjAsIDAsIDAsIDExOTg2LCA3NzY1LCA0MjUwMiwgODI4MCwgMCwgMjcwMSwgCi0gICAgMCwgMCwgNTc2NywgMCwgMCwgOTgwOSwgODM1MywgNjM3NDcsIDY2NzAxLCA2Mzc3MiwgMCwgNjM3NDUsIDE3NDgsIDYzNzcwLCAKLSAgICAwLCAwLCAwLCA2NTU0MiwgNjM3NjYsIDAsIDMwNjEsIDAsIDYzNzY0LCA2Mzc4OSwgOTA2NywgNjA5NiwgMCwgNzY5NCwgMCwgCi0gICAgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAwLCAwLCAwLCA2MzgwNywgMTU5MSwgMCwgMCwgNjM3ODMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc0NTc1LCAwLCA2NTcxOSwgMTMwODMsIDY0NTc0LCA2NTAxMiwgMCwgMTY0MCwgMTI0OTUsIDY2NjkxLCA3NjI0LCAKLSAgICAzMTM4LCAxMDk5NiwgMCwgMTkyMiwgMCwgMTI0OTgsIDEwOTg3LCAwLCAwLCAzODk0LCA2NTU0MywgMCwgMTk0ODQyLCAwLCAKLSAgICA0OTMsIDAsIDQzMTk3LCAxNzE3LCA0MjI4LCA0NzksIDEwMzAzLCA5MTc5MzQsIDAsIDkxNzkzNSwgMTAzMzUsIDM1MjAsIAotICAgIDkxNzkzMiwgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCA2MjMzLCA2NDYzNiwgMTAwMiwgMTI0OTEsIDAsIAotICAgIDY0OTExLCAxMjcwNDAsIDAsIDY1MTIwLCAwLCAwLCAwLCAxMTYxMSwgNjYyMjgsIDEyNzA0MSwgNjYyMTMsIDYzODY0LCAKLSAgICA2NjIyMSwgNjYyMjYsIDY2MjI5LCAxMzIxOCwgNjYyMzEsIDY2MjE2LCA4NTA3LCA2NjIzNiwgNjYyMTEsIDY2MjE4LCAwLCAKLSAgICA2NjI0MCwgMCwgNjYyMzMsIDg5MjgsIDAsIDc5MDksIDY2MjM0LCAxMTYwNSwgNjM3NTksIDAsIDY2MjA4LCA3Mzk5OSwgCi0gICAgNjM3OTksIDAsIDI0NCwgMTE1NDIsIDEyODk4LCAxMjQ5NCwgNzM3NjEsIDEyNDkyLCAxMjY2OSwgMCwgMCwgNzQxNTMsIDAsIAotICAgIDAsIDEyMDY4MCwgNDg4MiwgMTMwNDAsIDAsIDg2MTIsIDQ4ODUsIDc0MDUzLCAwLCAxMzA0MiwgNDg4MCwgNjQ2NjIsIAotICAgIDI0MjksIDEzNjAsIDI0OCwgMCwgNjM3OTcsIDAsIDYzNzkyLCAwLCA3MjkyLCAwLCA2Mzc1NiwgNDI3ODYsIDY2NjkzLCAwLCAKLSAgICAxODcwLCA5MTc5MTYsIDQ3MCwgMCwgMCwgMTIwMzA2LCAwLCAwLCA0NTc5LCAwLCAwLCAxMjUxMSwgNzQ0NTMsIDEyNTE0LCAKLSAgICAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgODYyMywgMCwgMCwgMCwgMCwgMTI1MTIsIDExNjE1LCAxMzA0MSwgMCwgMCwgNjU5LCAKLSAgICA2MDk4LCAwLCAxMjIzNCwgMCwgMTI3MDY3LCA4MzExLCAxMjUxMCwgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAKLSAgICAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDAsIDAsIDAsIDIzMjMsIDAsIDIzMTksIDAsIDEyNDc3LCAwLCAyMzExLCAwLCAKLSAgICA0NDE1LCAyMzcsIDYyODEsIDAsIDAsIDAsIDIzMDksIDEzMTIsIDgxNzMsIDAsIDEyNDY5LCAwLCAwLCA2NDMzNSwgMTA2MDksIAotICAgIDAsIDAsIDkzOTcsIDExNTI0LCA5Mzk1LCA5Mzk2LCA5MzkzLCA5Mzk0LCA5MzkxLCA5MzkyLCA5Mzg5LCA2MjA5LCA5Mzg3LCAKLSAgICA5Mzg4LCA0OTMyLCA5Mzg2LCA5MzgzLCA5Mzg0LCAwLCAwLCA2NTQ1MSwgODE4NSwgMCwgOTE3ODMyLCA0MzAyNCwgNDMzMzYsIAotICAgIDc0Mzc1LCAyMzEzLCAwLCA3OTQ4LCA5MjM2LCAwLCAwLCAwLCAxMDU3MCwgMCwgNjI4OSwgMTA0ODQsIDAsIDAsIDExOTk4LCAKLSAgICAxMjA4MiwgMTA5MjQsIDMxNDcsIDAsIDAsIDEyNTI0LCAwLCAyMzEwLCAxMTgxOCwgOTM4MSwgOTM4MiwgOTM3OSwgOTM4MCwgCisgICAgNDIxMzMsIDEyMDc1NSwgOTcwNiwgMCwgMCwgNjY2MTAsIDEwNDYxLCAxMjEwMywgMCwgODY0MiwgMCwgNDI3NjYsIDAsIAorICAgIDY2NTY2LCA5OTgzLCAwLCAxMTkxMDUsIDAsIDAsIDAsIDczOTgsIDQxNTE1LCAwLCAxMTgwMiwgODA0MSwgMTQ2MSwgOTEwLCAKKyAgICAxMTkxMzMsIDAsIDY3NDksIDM2NTgsIDAsIDEyMDUyNSwgMCwgNzYxNywgMCwgMTI4ODgsIDAsIDY3NjY4LCAxMzE0MywgMCwgCisgICAgNDE1MTQsIDExMDk3LCA1NzAzLCAwLCA0MTUxNywgNDE1MDQsIDQxNTE5LCAxMDAxNiwgNjQzMDUsIDAsIDY1ODY0LCA2MjMsIAorICAgIDc4MSwgNjcwLCAxMDY2MCwgNTc2OSwgNjEzLCA3NTQzLCAxMjAyNzksIDQ3NywgNDEwODMsIDAsIDAsIDU5MiwgMTU3OCwgCisgICAgMTI0NTksIDQzNDQ5LCAwLCAwLCA4MjI1LCAwLCA2NTQsIDExMzQ1LCA2NTMsIDY1MiwgMCwgNjQ3LCAwLCA2MzMsIAorICAgIDEyMDc0NCwgMCwgMCwgMTI0ODAsIDQzMjQzLCAwLCAzOSwgMTI0ODcsIDAsIDEyMDUyOSwgNzQxOTksIDEyNDgyLCAwLCAKKyAgICAxMjQ4OSwgMCwgMzE5NSwgNTU1MCwgMCwgNzg5NywgMCwgMTIwMywgNzQzOTYsIDE4MTMsIDY0NTQ0LCA0MTMxMSwgMTIwOTAsIAorICAgIDAsIDI4NzcsIDAsIDAsIDE2NzUsIDAsIDAsIDAsIDAsIDEwMDcwLCAxMDU5NSwgMCwgMTE5MDc3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MzI0NCwgMCwgMCwgMCwgMTE5NTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3Nzg2MCwgMCwgMCwgMjcwLCAwLCAxMDcxNCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjUzNzIsIDAsIDc0MDM4LCAxMTk1NTgsIDYyNzMsIDY2Njc5LCAzNjQsIDk1OTUsIDE5NDkwOCwgCisgICAgMCwgMCwgNzA3LCAwLCAwLCA5MjgyLCA2NjQ4OSwgMjI0LCAwLCA2ODY3MCwgOTMzMiwgNDk2NiwgNjg2NzcsIDAsIDY4NjQ0LCAKKyAgICAwLCAzODQxLCA2ODYzNCwgMCwgMTA3MzIsIDY4NjQwLCA4NTAsIDQ5NzIsIDAsIDY0Njk5LCAyOTA5LCA2ODYxOSwgNDQwMDgsIAorICAgIDY4NjI3LCAwLCAxMTU0NCwgMTAyMDMsIDk2MDgsIDAsIDAsIDExOTYyLCAwLCAxMjUwNywgMTE5NiwgMCwgMCwgNzc3LCAwLCAKKyAgICA0Mzc1LCA2NTI3MSwgNjc2NzgsIDAsIDEyMTk4LCAwLCA2NDgyNCwgMCwgMCwgOTQ1NCwgNjM3NzgsIDg2NTgsIDQyNTI4LCAKKyAgICAwLCAyNzA1LCA5MTc5NzUsIDQxNTIwLCAwLCAwLCAxMTk4NiwgNzc2NSwgNDI1MDIsIDgyODAsIDAsIDI3MDEsIDAsIDAsIAorICAgIDU3NjcsIDAsIDAsIDk4MDksIDgzNTMsIDYzNzQ3LCA2NjcwMSwgNjM3NzIsIDAsIDYzNzQ1LCAxNzQ4LCA2Mzc3MCwgMCwgMCwgCisgICAgMCwgNjU1NDIsIDYzNzY2LCA1NTI0NCwgMzA2MSwgMCwgNjM3NjQsIDYzNzg3LCA5MDY3LCA2MDk2LCAwLCA3Njk0LCAwLCAKKyAgICA3MjU3LCA2Mzc2OCwgMzQ4NSwgMTI5ODcsIDAsIDEyNzUyMiwgMTIwNjI4LCA2MzgwNywgMTU5MSwgMCwgNjM4NiwgNjM3ODMsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDc0NTc1LCAwLCA2NTcxOSwgMTMwODMsIDY0NTc0LCA2NTAxMiwgMCwgMTY0MCwgMTI0OTUsIAorICAgIDY2NjkxLCA3NjI0LCAzMTM4LCAxMDk5NiwgMCwgMTkyMiwgMCwgMTI0OTgsIDEwOTg3LCAwLCAwLCAzODk0LCA2NTU0MywgMCwgCisgICAgMTk0ODQyLCAwLCA0OTMsIDAsIDQzMTk3LCAxNzE3LCA0MjI4LCA0NzksIDEwMzAzLCA3NDAyMCwgMCwgOTE3OTM1LCAKKyAgICAxMDMzNSwgMzUyMCwgOTE3OTMyLCAxMjQ5MCwgNjQzMTUsIDAsIDEyNzAzOSwgMTI0OTMsIDYyMzMsIDQyNjgxLCAxMDAyLCAKKyAgICAxMjQ5MSwgMCwgNjQ5MTEsIDEyNzA0MCwgMjA5NiwgNjUxMjAsIDAsIDAsIDAsIDExNjExLCA2NjIyOCwgMTI3MDQxLCAKKyAgICA2NjIxMywgNjM4NjQsIDY2MjIxLCA2NjIyNiwgNjYyMjksIDEzMjE4LCA2NjIzMSwgNjYyMTYsIDg1MDcsIDY2MjM2LCAKKyAgICA2NjIxMSwgNjYyMTgsIDAsIDY2MjQwLCA3ODA0MSwgNjYyMzMsIDg5MjgsIDAsIDc5MDksIDY2MjM0LCAxMTYwNSwgNjM3NTksIAorICAgIDAsIDY2MjA4LCA3Mzk5OSwgNjM3OTksIDYzODAzLCAyNDQsIDExNTQyLCAxMjg5OCwgMTI0OTQsIDczNzYxLCAxMjQ5MiwgCisgICAgMTI2NjksIDAsIDAsIDc0MTUzLCAwLCAwLCAxMjA2ODAsIDQ4ODIsIDEzMDQwLCAwLCA4NjEyLCA0ODg1LCA3NDA1MywgMCwgCisgICAgMTMwNDIsIDQ4ODAsIDY0NjYyLCAyNDI5LCAxMzYwLCAyNDgsIDAsIDYzNzk3LCAwLCA0MjM1OCwgMCwgNzI5MiwgMCwgCisgICAgNjM3NTYsIDQyNzg2LCA2NjY5MywgMCwgMTg3MCwgNzgwNDAsIDQ3MCwgNzgwMzgsIDc4MDM1LCA3ODAzNiwgMCwgNzgwMzQsIAorICAgIDQ1NzksIDAsIDAsIDEyNTExLCA3NDQ1MywgMTI1MTQsIDAsIDc0NTc5LCA3MjM5LCA3MDAxLCA4NjIzLCAwLCAwLCAwLCAKKyAgICA3Mzc4LCAxMjUxMiwgMTE2MTUsIDYxMDQsIDAsIDAsIDY1OSwgNjA5OCwgMCwgMTIyMzQsIDEyNzMwNywgMTI3MDY3LCAKKyAgICA4MzExLCAxMjUxMCwgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDAsIDAsIDAsIAorICAgIDIzMjMsIDAsIDIzMTksIDc3OTE3LCAxMjQ3NywgNzc5MTYsIDIzMTEsIDAsIDQ0MTUsIDIzNywgNjI4MSwgMCwgMCwgMCwgCisgICAgMjMwOSwgMTMxMiwgODE3MywgMCwgMTI0NjksIDAsIDc4NTA1LCA2NDMzNSwgMTA2MDksIDAsIDAsIDkzOTcsIDExNTI0LCAKKyAgICA5Mzk1LCA5Mzk2LCA5MzkzLCA5Mzk0LCA5MzkxLCA5MzkyLCA5Mzg5LCA2MjA5LCA5Mzg3LCA5Mzg4LCA0OTMyLCA5Mzg2LCAKKyAgICA5MzgzLCA5Mzg0LCA2NzQwLCAwLCA2NTQ1MSwgODE4NSwgMCwgOTE3ODMyLCA0MzAyNCwgNDMzMzYsIDY3NjU5LCAyMzEzLCAKKyAgICAwLCA3OTQ4LCA5MjM2LCAwLCAwLCAwLCAxMDU3MCwgNDM0NzMsIDYyODksIDEwNDg0LCAwLCAwLCAxMTk5OCwgMTIwODIsIAorICAgIDEwOTI0LCAzMTQ3LCAwLCAxMjA2ODQsIDEyNTI0LCAwLCAyMzEwLCAxMTgxOCwgOTM4MSwgOTM4MiwgOTM3OSwgOTM4MCwgCiAgICAgOTM3NywgOTM3OCwgOTM3NSwgOTM3NiwgMTY4MywgOTM3NCwgMCwgOTM3MiwgMTI0NDQsIDAsIDAsIDEzMDE2LCA4MjEwLCAwLCAKLSAgICA0MjAyOSwgMTEwNzksIDEyMzMxLCAwLCA0MjAzMiwgODc0NCwgNzI2LCAwLCAwLCA0MTU1LCAwLCAwLCA0MjAzMCwgNTAwNywgCi0gICAgMTI1MjIsIDQzMDg4LCAwLCA0OTUxLCAwLCAwLCAwLCA5OTIyLCA0MzMwOSwgMCwgMTI1MjUsIDAsIDEyMDE2LCA2NTc3MCwgCi0gICAgOTU0OCwgMCwgNDAzLCAwLCAxMjUwMywgMCwgMCwgMTEwMzAsIDAsIDAsIDY1NjkxLCA2Mzk5OCwgMTgxOSwgMTA0OTYsIDAsIAotICAgIDAsIDExOTkyMCwgMCwgMCwgMCwgMTI1MDYsIDAsIDEyMjMxLCAwLCAxMjUwMCwgNjc2MDUsIDEyNTA5LCA2NDM5MywgMCwgCi0gICAgMzM4OSwgMTA1ODksIDY2MDgsIDQxMDQ3LCAxMjAzMjEsIDAsIDAsIDc0MDY5LCAwLCAwLCAzNjA4LCA4MjgxLCA5MTc4MzksIAotICAgIDExMDcsIDAsIDkwNzYsIDg4NjIsIDAsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAxMzIyMiwgMTE4OTYzLCAKLSAgICA3NDc4MiwgMCwgODU0NiwgMTE1NTMsIDYzOTk1LCAxMzE3NywgOTA0MywgNjMwMywgMCwgNDk4LCA2NDQ3MSwgMTIwMzI0LCAKLSAgICAwLCAxMjUyOSwgODA0MiwgMCwgMjM0NCwgMTI1MjgsIDgwMzEsIDI0MTQsIDAsIDAsIDMyMzEsIDAsIDY0MjIsIDY2NTEyLCAKLSAgICAwLCAxMjUzMCwgMjUzNywgMCwgNDE0MjksIDEyNjU4LCAxMzAzNiwgNjU3NzIsIDAsIDAsIDQxNDMzLCA0NzE5LCA0NjksIDAsIAotICAgIDQzNjMsIDMzMTMsIDQxNDI4LCAwLCAyMDIzLCAxNzcyLCAwLCAwLCA2NTcwNiwgMTAwNTEsIDY0ODEyLCAwLCAwLCA5OTIwLCAKLSAgICAxMjIxNSwgMCwgNDkzMSwgMTk1MSwgMTI0OTcsIDExOTM2MywgOTYwNywgMCwgOTY2MywgMCwgMTE5NjM0LCA2NTAzLCAKLSAgICA0MTExMCwgMCwgMTQ5MSwgMCwgMCwgMCwgNDEwNjEsIDAsIDAsIDAsIDY1MDI2LCA0MTk5MywgNDE1MDksIDExMDQ1LCAKLSAgICA2NTAyOCwgMCwgNjY0NzYsIDQxMTA4LCA5NzM4LCA0MTk5NSwgMTA3NSwgMTk1OCwgMTI1MzUsIDQxOTkyLCA0MTUwNiwgMCwgCi0gICAgNDE2ODcsIDAsIDEyMDcxNywgMCwgOTE3ODE2LCAwLCA3NjkyLCAwLCA4MDA4LCAwLCAzMzAsIDg1NjYsIDY1MDgzLCAKLSAgICA0MTEzMywgOTgxNiwgMCwgMTI1MzIsIDEyNzA1NSwgMTI3MDU2LCAzNTA4LCAxMjcwNTgsIDEyNzA1OSwgMCwgOTE3NTQyLCAKLSAgICA5MTc4MTUsIDAsIDY0MTEsIDEyOTEwLCAxMjA1MDUsIDY2NjQ0LCAxMzAyOCwgMCwgMTI1MzcsIDAsIDAsIDY0MTM2LCAKLSAgICAxMjUzNiwgMjM1MCwgMTMwMjksIDAsIDAsIDAsIDEzMDMwLCAwLCA0NTI3LCAwLCAxMjUzOCwgMCwgMCwgNjU1OTksIAotICAgIDY1NzE3LCAxMjYwNywgMCwgNDk0OCwgMTI0ODQsIDQwMzIsIDAsIDQyODAzLCAwLCA2MjA3LCAwLCA2MTE3LCA2NjAwMCwgCi0gICAgODQxMiwgMCwgNzQzOCwgMTI5NiwgMjMyNSwgNDE1MTEsIDAsIDEwMTQ5LCA3NDExOCwgMCwgMCwgMTI0ODEsIDAsIDEyNDg4LCAKLSAgICAwLCAwLCA0MTU1NiwgNjQ0MTQsIDExODgwMiwgMjM1NCwgMCwgNzM3NjYsIDAsIDYyOTUsIDkwMSwgNDE1MTAsIDc5NTMsIDAsIAotICAgIDY1MDMyLCA0MTUxMywgMCwgMTE5MjcsIDY2NTg0LCAwLCAwLCAxMTkwMTAsIDAsIDAsIDAsIDg0OCwgOTg2OCwgMCwgNjQyNCwgCi0gICAgMCwgMTE5MzM4LCAwLCA3NDAzMSwgMCwgMCwgMjM1MiwgMCwgODkzLCA2NDU3NiwgMTEyODksIDE0MDcsIDAsIDAsIDEzMDI2LCAKLSAgICAwLCAwLCAwLCAxMzAyMywgODkwMywgOTc3NywgNjY3MTUsIDE4NzEsIDgwOTksIDAsIDAsIDEzNDMsIDAsIDAsIDkzMjUsIAotICAgIDEzMDI1LCA2MjgzLCAxMTczOCwgMCwgMCwgMCwgMTE3NDEsIDAsIDAsIDkyMTYsIDgyNjMsIDExMjc5LCAxOTQ3NTIsIDAsIAotICAgIDE5NDc1NCwgMTMwMjEsIDY0NDk0LCAzMTM2LCAxOTQ3NTgsIDE5NDc1NywgMTk0NzYwLCAxMzAyMiwgMCwgNjQ1ODgsIDAsIAotICAgIDAsIDc0NTUyLCAxMDAxNCwgMCwgNDEyNjAsIDExOTM0MCwgMTMwMjAsIDExODk5MywgMTk0NzY0LCAxOTQ3NjcsIDc0MzQwLCAKLSAgICAwLCAwLCA2NDk0NSwgODAyOSwgMCwgMCwgMCwgMzMzNSwgMCwgMCwgOTc3NiwgMTIwNTI2LCAxOTQ3NDgsIDUyMTUsIAotICAgIDQyNjQ0LCAzMzMzLCAxNjMyLCAxOTQ3NTEsIDY0ODQ5LCAzMzQyLCAwLCA1MzYzLCAxMjk1NywgMCwgNDE1NiwgMCwgMCwgCi0gICAgNjQyMSwgMCwgMTYxMSwgMCwgMTMwMTgsIDc0MjU3LCAwLCAwLCAzMzM3LCA0NTM3LCA2Nzg5NSwgMTE3MzYsIDAsIDAsIAotICAgIDY0ODIsIDQyMTQsIDczNzkwLCAxMTk0NSwgMCwgMTMwNDYsIDg4MzgsIDQyNSwgNDAyNSwgMTA3MDksIDAsIDczOTI3LCAKLSAgICAyMzkyLCAxMzA0NywgMCwgMCwgMTA2MTcsIDEzMDQ5LCA2NDk5LCAxOTQ3MzksIDEyNDI0LCAxOTQ3NDEsIDczOTQ0LCAKLSAgICAxMzA1MCwgMTk0NzQyLCAxOTQ3NDUsIDY1MDcsIDAsIDAsIDAsIDMyNzcsIDg5MjksIDQ5NDcsIDQxMDU1LCAwLCAxOTQ3MjIsIAotICAgIDE5NDcyMSwgMTk0NzI0LCAxMzA0NSwgNjQ2MjYsIDY2MDM0LCA3NzUxLCAxOTQ3MjcsIDgzNzEsIDE5NDcyOSwgMzk5NywgCi0gICAgMTI4MDYsIDg3NjgsIDEzMDQ0LCAwLCAxMjQyMCwgNDAyNCwgMTk0NzMwLCA0MTA1NCwgMTA3OCwgOTc1NywgMTk0NzM0LCAKLSAgICA0MTA1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE0OTYsIDAsIDkxNjUsIDE1NzIsIDExOTExLCAwLCAxMTg4NDIsIAotICAgIDIzNDYsIDEzMjcwLCA4OTU4LCAwLCA5NjQ2LCAzNzczLCA0MzE4MywgNjQwMSwgNDI1MzYsIDAsIDAsIDEzMDQzLCA4MDU2LCAKLSAgICAwLCA2NTY4MSwgMjA4LCAwLCAwLCAwLCAwLCAwLCAxMDY5OSwgNjQwOCwgMCwgNzgyNSwgNTY2MSwgMCwgMTIwNjMwLCAKLSAgICAzNjAzLCA0MTEwOSwgMjM5OCwgMzU0OCwgMCwgMCwgMCwgMCwgMzExNSwgMCwgMCwgMTEzMjEsIDAsIDAsIDAsIDE5NDcyNiwgCi0gICAgNDg3NiwgNzQyODYsIDAsIDAsIDAsIDAsIDQxNTU4LCA0MTQ3MSwgNzM5NTAsIDgxNTgsIDQxNTYxLCA0MTQ3MiwgMCwgCi0gICAgMTMwNTEsIDE5NDY3MiwgMzE0MywgMTk0Njc0LCAxOTQ2NzMsIDQxNTU5LCAxODk2LCA2NjI1NiwgMTMwNTIsIDE5NDY4MCwgCi0gICAgNTY2NSwgMCwgMTE5MDcxLCA0MTk4NiwgNjM5NzQsIDAsIDc0MzUyLCA3NDE2MSwgNDE1NCwgOTg2MywgNDM1NTAsIDEyMzEwLCAKLSAgICA1NjYyLCA0MjM4MiwgMTk0Njg2LCA3MzkyNCwgMTEyMSwgMTk0NjY1LCA2Mzk1OSwgMCwgNzQzNzgsIDEzMjMxLCAwLCAKLSAgICA2NDc1MiwgNDczMiwgMTk0NjY2LCAxMTU5NiwgMTk0NjY4LCA2NTE4NywgMTYyNiwgNjM5ODMsIDEwMTEwLCAxOTQ2NzEsIAotICAgIDQyMDI0LCA2NDIwLCA0MjAyOCwgMCwgMTA1MDksIDI3OTUsIDQ5MTAsIDE5NDcyOCwgMCwgNjQ3NTMsIDYyNzUsIDAsIAotICAgIDExODgzMCwgNjM5NzgsIDExMDQ0LCAzMjI5LCA2NDIzLCA0Mjc3NCwgMCwgMCwgMCwgMTI4MjMsIDIzMzEsIDkxNzgxMCwgCi0gICAgNDIwMjYsIDYxMzcsIDAsIDc1MjQsIDAsIDAsIDExOTM0MywgMCwgODMzOCwgMCwgNjUwNDMsIDAsIDgyMiwgMCwgOTkwMywgCi0gICAgNjQ3MjEsIDE5NDY1NywgMTk0NjU2LCAxOTQ2NTksIDE5NDY1OCwgMTk0NjYxLCAxOTQ2NjAsIDAsIDQxMjY1LCA1MzExLCAKLSAgICAxNzk1LCA5NjUsIDExODc5MSwgMTA1ODcsIDAsIDExMjc4LCAwLCAxOTQ2NDAsIDAsIDEyOTQ2LCAxOTQ2NDEsIDEyMDcwNSwgCi0gICAgMTk0NjQzLCA2Mjk0LCAzMTQ0LCAxOTQ2NDgsIDE5NDY0NywgNjUwMTksIDE5NDY0OSwgNzM5OTAsIDAsIDAsIDc0OCwgCi0gICAgNDEwNjcsIDIzMzAsIDUzNSwgMzE0OCwgMTIzNzUsIDE5NDY1MiwgMTk0NjI5LCAxMDU1NiwgMjQ3NSwgMTIzODgsIDQ4ODksIAotICAgIDg5NjgsIDY3ODYzLCAzNTkzLCAwLCAwLCAyMzQyLCAwLCAxOTQ2MzQsIDY1MjA2LCA0ODk0LCAxOTQ2MzUsIDQ4OTAsIAotICAgIDE5NDYzNywgMCwgNTgxLCA0ODkzLCAwLCAwLCA2NTU0NSwgNDg4OCwgNDE1NywgOTE3ODA1LCAwLCAwLCAwLCAwLCAxMDExOSwgCi0gICAgNjQxNSwgMCwgMCwgMCwgMCwgMCwgMTEzNzUsIDY0NzQ2LCAyMzMyLCAwLCA0MTIsIDAsIDY0OTMyLCA0Mjg4MCwgNDM1ODcsIAotICAgIDAsIDAsIDAsIDAsIDY1MTk3LCAwLCAxMjIwMywgMCwgMCwgODkxMywgNjU4NTQsIDQ4NzUsIDY1ODExLCAxMjAzODEsIAotICAgIDE5NDYyNCwgMTIwMzk3LCA5MzQ0LCA4ODI2LCAxMjAzODYsIDEyMDM5NSwgMTMxMDQsIDc0NzgxLCAxMTk5NywgMTIwMzkzLCAKLSAgICAwLCAwLCAzMTM0LCAwLCA2NTY5NiwgMCwgMCwgNjYyMTcsIDAsIDgzMzQsIDExOTM0NCwgMCwgMzQ0OSwgMCwgMCwgMCwgMCwgCi0gICAgMTE4OTUwLCA3NDAxMSwgMCwgMCwgMCwgMCwgMTkwOCwgMCwgNDMyOCwgMTA3MzQsIDEyNzAxNCwgMCwgMCwgNzgwNCwgMCwgCi0gICAgMTA4MTEsIDYyNTAsIDExMzM5LCA0OTE0LCAxMTM2NywgMCwgMTE4OTcxLCA0OTE3LCA3NDUxNiwgMCwgNjQyODUsIDQ5MTIsIAotICAgIDU0NjQsIDAsIDExODg5MywgMjM2MSwgNzk3MSwgMCwgMCwgMCwgMTE4OTg2LCAwLCA4MDg2LCA3NDMxNywgMCwgODMxOSwgCi0gICAgMjMxMiwgNDA5NzcsIDEwOTYwLCA0MDk2MiwgODMwNSwgMTI1NzMsIDAsIDQwOTgwLCAwLCAxMzIwMiwgMCwgMTI1ODIsIDAsIAotICAgIDAsIDAsIDQyNDM4LCAwLCA2Mjg4LCAwLCAwLCA1NjUzLCA0MjQwMCwgMTA4OTEsIDc2OTgsIDU2NTgsIDc0MDQ1LCAwLCAwLCAKLSAgICAwLCA0OTEzLCAwLCAwLCAwLCA0MjMyNiwgMCwgMCwgMCwgNDI0NzgsIDIzMjcsIDAsIDEyOTU5LCA0MjI4NywgMTI3MDUsIDAsIAotICAgIDAsIDEyNTg4LCA4ODIxLCA2MTUzLCAyODY3LCAxOTQ3MDgsIDY2MzEyLCA2OTgsIDE5NDcwOSwgMTk0NzEyLCAxMDM1NiwgCi0gICAgNzQwNzUsIDE5NDcxMywgNjUxLCAxMjY0MSwgMCwgMCwgMCwgMCwgNDE1NTIsIDY1MTE1LCAxOTQ2OTEsIDE5NDY5MCwgCi0gICAgMTk0NjkzLCAxOTQ2OTIsIDE5NDY5NSwgMTk0Njk0LCAxOTQ2OTcsIDc0MzU2LCAwLCA0NzE2LCA0MzI3NywgMCwgMCwgCi0gICAgMTIzNDAsIDEyMDU2OCwgMCwgMTk0NzAwLCAxOTQ2OTksIDE5NDcwMiwgMTIwNjc2LCA4NzAzLCA1NDYyLCA5MTc2MjksIDAsIAorICAgIDQyMDI5LCAxMTA3OSwgMTIzMzEsIDQzNDUxLCA0MjAzMiwgODc0NCwgNzI2LCAwLCAwLCA0MTU1LCAwLCAwLCA0MjAzMCwgCisgICAgNTAwNywgMTI1MjIsIDQzMDg4LCAwLCA0OTUxLCAwLCAxMjcyNDAsIDAsIDk5MjIsIDQzMzA5LCAwLCAxMjUyNSwgMCwgCisgICAgMTIwMTYsIDY1NzcwLCA5NTQ4LCA2NzY2NSwgNDAzLCA3ODIzMCwgMTI1MDMsIDAsIDAsIDExMDMwLCAwLCAwLCA2NTY5MSwgCisgICAgNjM5OTgsIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDAsIDAsIDEyNTA2LCAwLCAxMjIzMSwgMCwgMTI1MDAsIAorICAgIDQ0MDIzLCAxMjUwOSwgNjQzOTMsIDc4ODMwLCAzMzg5LCAxMDU4OSwgNjYwOCwgNDEwNDcsIDEyMDMyMSwgNzgzOTUsIAorICAgIDc4Mzk0LCA3NDA2OSwgNzc5OTUsIDc4MzkxLCAzNjA4LCA4MjgxLCAxMjAzMjAsIDExMDcsIDAsIDkwNzYsIDg4NjIsIDAsIAorICAgIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAxMzIyMiwgNzQxNjUsIDc0NzgyLCAwLCA4NTQ2LCAxMTU1MywgCisgICAgNjM5OTUsIDEzMTc3LCA5MDQzLCA2MzAzLCAwLCA0OTgsIDY0NDcxLCAxMjAzMjQsIDAsIDEyNTI5LCA4MDQyLCAwLCAyMzQ0LCAKKyAgICAxMjUyOCwgODAzMSwgMjQxNCwgMCwgMCwgMzIzMSwgMCwgNjQyMiwgNjY1MTIsIDAsIDEyNTMwLCAyNTM3LCA3ODQwNSwgCisgICAgNDE0MjksIDEyNjU4LCAxMzAzNiwgNjU3NzIsIDAsIDc4NzM4LCA0MTQzMywgNDcxOSwgNDY5LCAwLCA0MzYzLCAzMzEzLCAKKyAgICA0MTQyOCwgNzg0MDcsIDIwMjMsIDE3NzIsIDc4MjI0LCA3ODIyNSwgNjU3MDYsIDEwMDUxLCA2NDgxMiwgNzgyMjAsIDAsIAorICAgIDk5MjAsIDEyMjE1LCAwLCA0OTMxLCAxOTUxLCAxMjQ5NywgMTE5MzYzLCA5NjA3LCAwLCA5NjYzLCAwLCAxMTk2MzQsIAorICAgIDY1MDMsIDQxMTEwLCAwLCAxNDkxLCAwLCAwLCAwLCA0MTA2MSwgMCwgMCwgMCwgNjUwMjYsIDQxOTkzLCA0MTUwOSwgCisgICAgMTEwNDUsIDY1MDI4LCA3ODYwMiwgNjY0NzYsIDQxMTA4LCA5NzM4LCA0MTk5NSwgMTA3NSwgMTk1OCwgMTI1MzUsIDQxOTkyLCAKKyAgICA0MTUwNiwgMCwgNDE2ODcsIDAsIDEyMDcxNywgMCwgOTk0MCwgMCwgNzY5MiwgMCwgODAwOCwgNDExMzEsIDMzMCwgODU2NiwgCisgICAgNjUwODMsIDQxMTMzLCA5ODE2LCAwLCAxMjUzMiwgNzg1NTAsIDc4NTQ2LCAzNTA4LCAxMjcwNTgsIDQzMjM1LCAwLCAKKyAgICAxMjcyOTgsIDY5NzgzLCA3ODIzMSwgNjQxMSwgMTI5MTAsIDc4NTU0LCA2NjY0NCwgMTMwMjgsIDY3MzcsIDEyNTM3LCAwLCAKKyAgICAwLCA2NDEzNiwgMTI1MzYsIDIzNTAsIDEzMDI5LCA3ODIzMywgMCwgMCwgMTMwMzAsIDY3MDIsIDQ1MjcsIDAsIDEyNTM4LCAKKyAgICAwLCAwLCA2NTU5OSwgNjU3MTcsIDk5NjYsIDAsIDQ5NDgsIDEyNDg0LCA0MDMyLCAwLCAxMjYyMywgMCwgNjIwNywgMCwgCisgICAgNjExNywgNjU5MzAsIDg0MTIsIDAsIDc0MzgsIDEyOTYsIDIzMjUsIDQxNTExLCAwLCAxMDE0OSwgNzQxMTgsIDAsIDAsIAorICAgIDEyNDgxLCAwLCAxMjQ4OCwgMCwgMCwgNDE1NTYsIDY0NDE0LCAxMTg4MDIsIDIzNTQsIDAsIDczNzY2LCAwLCA2Mjk1LCAKKyAgICA5MDEsIDQxNTEwLCA3OTUzLCAwLCA2NTAzMiwgNDE1MTMsIDAsIDExOTI3LCA2NjU4NCwgNzg1NTksIDc4NTYwLCA3ODU1NywgCisgICAgNzg1NTgsIDAsIDc4NTU2LCA4NDgsIDk4NjgsIDAsIDY0MjQsIDc4NTY4LCAxMTkzMzgsIDc4NTY1LCA3NDAzMSwgNzg1NjMsIAorICAgIDc4NTY0LCAyMzUyLCA3ODU3MiwgODkzLCA2NDU3NiwgMTEyODksIDE0MDcsIDAsIDAsIDEzMDI2LCA2NzYyLCA3ODU3OSwgCisgICAgNzg1ODAsIDEzMDIzLCA4OTAzLCA5Nzc3LCA2NjcxNSwgMTg3MSwgODA5OSwgMCwgMCwgMTM0MywgMCwgMCwgOTMyNSwgCisgICAgNjgxOCwgNjI4MywgMTE3MzgsIDAsIDAsIDAsIDExNzQxLCAwLCAwLCA5MjE2LCA4MjYzLCAxMTI3OSwgMTk0NzUyLCAwLCAKKyAgICAxOTQ3NTQsIDEzMDIxLCA2NDQ5NCwgMzEzNiwgMTk0NzU4LCAxOTQ3NTcsIDE5NDc2MCwgMTMwMjIsIDQyNzM3LCA2NDU4OCwgCisgICAgMCwgMCwgNzQ1NTIsIDEwMDE0LCAwLCA0MTI2MCwgMTE5MzQwLCAxMzAyMCwgMTE4OTkzLCAxOTQ3NjQsIDE5NDc2NywgCisgICAgNzQzNDAsIDAsIDAsIDY0OTQ1LCA4MDI5LCAwLCAwLCAwLCAzMzM1LCAwLCAwLCA5Nzc2LCAxMjA1MjYsIDE5NDc0OCwgCisgICAgNTIxNSwgNDI2NDQsIDMzMzMsIDE2MzIsIDE5NDc1MSwgNjQ4NDksIDMzNDIsIDc4NTgyLCA1MzYzLCAxMjk1NywgNzg1ODEsIAorICAgIDQxNTYsIDAsIDAsIDY0MjEsIDc4NTkxLCAxNjExLCA3ODU4OSwgMTMwMTgsIDc0MjU3LCA3ODU4OCwgNzg1ODQsIDMzMzcsIAorICAgIDQ1MzcsIDY3ODk1LCAxMTczNiwgMCwgNjg2MDgsIDY0ODIsIDQyMTQsIDczNzkwLCAxMTk0NSwgMCwgMTMwNDYsIDg4MzgsIAorICAgIDQyNSwgNDAyNSwgMTA3MDksIDc4NTk1LCAyMTA4LCAyMzkyLCAxMzA0NywgMCwgMCwgNjgxOSwgMTMwNDksIDY0OTksIAorICAgIDE5NDczOSwgMTI0MjQsIDY4NjE0LCA3Mzk0NCwgMTMwNTAsIDk5MjQsIDE5NDc0NSwgNjUwNywgMCwgMCwgMCwgMzI3NywgCisgICAgODkyOSwgNDk0NywgNDEwNTUsIDAsIDE5NDcyMiwgMTk0NzIxLCAxOTQ3MjQsIDEzMDQ1LCA2NDYyNiwgNjYwMzQsIDc3NTEsIAorICAgIDE5NDcyNywgODM3MSwgMTk0NzI5LCAzOTk3LCAxMjgwNiwgODc2OCwgMTMwNDQsIDAsIDEyNDIwLCA0MDI0LCAxOTQ3MzAsIAorICAgIDQxMDU0LCAxMDc4LCA5NzU3LCAxOTQ3MzQsIDQxMDU3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcxMDksIDAsIDQxNDk2LCAwLCAKKyAgICA5MTY1LCAxNTcyLCAxMTkxMSwgMCwgMTE4ODQyLCAyMzQ2LCAxMzI3MCwgODk1OCwgMCwgOTY0NiwgMzc3MywgNDMxODMsIAorICAgIDY0MDEsIDU4MzEsIDAsIDAsIDEzMDQzLCA4MDU2LCAwLCA2NTY4MSwgMjA4LCAwLCAwLCAwLCAwLCAwLCAxMDY5OSwgNjQwOCwgCisgICAgMCwgNzgyNSwgNTY2MSwgMCwgMTIwNjMwLCAzNjAzLCA0MTEwOSwgMjM5OCwgMzU0OCwgMCwgMCwgMTE5OTMzLCAwLCAzMTE1LCAKKyAgICA5OTE4LCAwLCAxMTMyMSwgMCwgMCwgMCwgMTk0NzI2LCA0ODc2LCA3NDI4NiwgMCwgMCwgNDM0NjgsIDAsIDQxNTU4LCAKKyAgICA0MTQ3MSwgNzM5NTAsIDgxNTgsIDk5NDQsIDQxNDcyLCAwLCAxMzA1MSwgNzg2ODksIDMxNDMsIDE5NDY3NCwgNjcwMSwgCisgICAgNDE1NTksIDE4OTYsIDY2MjU2LCAxMzA1MiwgMTk0NjgwLCA1NjY1LCAwLCAxMTkwNzEsIDcwMjUsIDYzOTc0LCAwLCAKKyAgICA3NDM1MiwgNzQxNjEsIDQxNTQsIDk4NjMsIDQzNTUwLCAxMjMxMCwgNTY2MiwgNDIzODIsIDE5NDY4NiwgNzM5MjQsIDExMjEsIAorICAgIDE5NDY2NSwgNjM5NTksIDAsIDk5NDIsIDEzMjMxLCAwLCA2NDc1MiwgNDczMiwgMTk0NjY2LCAxMTU5NiwgMTE5OTMxLCAKKyAgICA2NTE4NywgMTYyNiwgNjM5ODMsIDEwMTEwLCA2NDc3MiwgNDIwMjQsIDY0MjAsIDQyMDI4LCAwLCAxMDUwOSwgMjc5NSwgCisgICAgNDkxMCwgMTk0NzI4LCA2OTIzMSwgNjQ3NTMsIDYyNzUsIDkxNzgwOCwgMTE4ODMwLCA2Mzk3OCwgMTEwNDQsIDMyMjksIAorICAgIDY0MjMsIDQyNzc0LCAwLCAwLCAwLCAxMjgyMywgMjMzMSwgOTE3ODEwLCA0MjAyNiwgNjEzNywgMCwgNzUyNCwgMCwgCisgICAgOTE3ODA5LCAxMTkzNDMsIDAsIDgzMzgsIDAsIDY1MDQzLCAwLCA4MjIsIDAsIDk5MDMsIDY0NzIxLCA0MjcyMiwgMTk0NjU2LCAKKyAgICAxOTQ2NTksIDc4NjU1LCA3ODY2MSwgMTk0NjYwLCA3ODY2MiwgNDEyNjUsIDUzMTEsIDE3OTUsIDk2NSwgMTE4NzkxLCAKKyAgICAxMDU4NywgNzgwNTUsIDExMjc4LCA3ODYzMiwgMTk0NjQwLCAwLCAxMjk0NiwgMTk0NjQxLCAxMjA3MDUsIDE5NDY0MywgCisgICAgNjI5NCwgMzE0NCwgMTk0NjQ4LCAxOTQ2NDcsIDY1MDE5LCAxOTQ2NDksIDczOTkwLCAwLCAwLCA3NDgsIDQxMDY3LCAyMzMwLCAKKyAgICA1MzUsIDMxNDgsIDEyMzc1LCAxOTQ2NTIsIDE5NDYyOSwgMTA1NTYsIDI0NzUsIDEyMzg4LCA0ODg5LCA4OTY4LCA2Nzg2MywgCisgICAgMzU5MywgMCwgMCwgMjM0MiwgMCwgMTk0NjM0LCA2NTIwNiwgNDg5NCwgMTk0NjM1LCA0ODkwLCAxOTQ2MzcsIDkxNzgwNCwgCisgICAgNTgxLCA0ODkzLCAwLCA2NTcxLCA2NTU0NSwgNDg4OCwgNDE1NywgNzgwNDgsIDc4MDQ5LCA3ODA0NiwgNzgwNDcsIDAsIAorICAgIDEwMTE5LCA2NDE1LCAwLCAwLCAwLCAwLCAwLCAxMTM3NSwgNjQ3NDYsIDIzMzIsIDc4MDYzLCA0MTIsIDc4MDYxLCA2NDkzMiwgCisgICAgNDI4ODAsIDQzNTg3LCAwLCAwLCAwLCAwLCA2NTE5NywgNzgwNjYsIDEyMjAzLCA3ODA2NCwgNzgwNjUsIDg5MTMsIDY1ODU0LCAKKyAgICA0ODc1LCA2NTgxMSwgMTIwMzgxLCAxMjAzODksIDExODg4OCwgOTM0NCwgODgyNiwgMTIwMzg2LCAxMjAzOTUsIDEzMTA0LCAKKyAgICA3NDc4MSwgMTE5OTcsIDEyMDM5MywgNzgwNzUsIDAsIDMxMzQsIDAsIDY1Njk2LCAwLCAwLCA2NjIxNywgMCwgODMzNCwgCisgICAgMTE5MzQ0LCAwLCAzNDQ5LCAwLCAwLCA3ODQxNCwgNzg0MTMsIDExODk1MCwgNzQwMTEsIDAsIDAsIDAsIDAsIDE5MDgsIAorICAgIDEyMDE2NywgNDMyOCwgMTA3MzQsIDEyNzAxNCwgMCwgMCwgNzgwNCwgNzgyNzIsIDEwODExLCA2MjUwLCAxMTMzOSwgNDkxNCwgCisgICAgMTEzNjcsIDAsIDc4MDU0LCA0OTE3LCA3NDUxNiwgNzQyMDgsIDY0Mjg1LCA0OTEyLCA1NDY0LCAwLCAxMTg4OTMsIDIzNjEsIAorICAgIDc5NzEsIDc4MDcyLCA3ODA3MywgNTUyNDMsIDc4MDcxLCAwLCA4MDg2LCA3NDMxNywgNjcwNywgODMxOSwgMjMxMiwgCisgICAgNDA5NzcsIDEwOTYwLCA0MDk2MiwgODMwNSwgMTI1NzMsIDAsIDQwOTgwLCAwLCAxMzIwMiwgMCwgMTI1ODIsIDc4MjgyLCAwLCAKKyAgICAwLCA0MjQzOCwgNTUyMjEsIDYyODgsIDc4MjgwLCAwLCA1NjUzLCA0MjQwMCwgMTA4OTEsIDc2OTgsIDU2NTgsIDc0MDQ1LCAKKyAgICAwLCAwLCAwLCA0OTEzLCAwLCAwLCAwLCA0MjMyNiwgMCwgMCwgMCwgNDI0NzgsIDIzMjcsIDAsIDEyNTYzLCA0MjI4NywgCisgICAgMTI3MDUsIDAsIDAsIDEyNTg4LCA4ODIxLCA2MTUzLCAyODY3LCAxOTQ3MDgsIDY2MzEyLCA2OTgsIDE5NDcwOSwgMTk0NjA2LCAKKyAgICAxMDM1NiwgNzQwNzUsIDE5NDcxMywgNjUxLCAxMjY0MSwgMCwgMCwgMCwgMCwgNDE1NTIsIDY1MTE1LCA3ODQ2NSwgNzg0NjcsIAorICAgIDc4NDYzLCA3ODQ2NCwgMTk0Njk1LCA3ODQ2MSwgMTk0Njk3LCA3NDM1NiwgMCwgNDcxNiwgNDMyNzcsIDAsIDc4NDc0LCAKKyAgICAxMjM0MCwgMTIwNTY4LCAwLCAxOTQ3MDAsIDU1MjY0LCA0MTIxMSwgMTIwNjc2LCA4NzAzLCA1NDYyLCA5MTc2MjksIDAsIAogICAgIDEwMTAxLCAwLCAwLCA4NDc5LCA0MTUxLCA0MTkzMywgMCwgMCwgNjYyNTQsIDEyMDgyMSwgMCwgMCwgMCwgMCwgMTE5MTk0LCAKICAgICA3NDA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyNzgsIDAsIDAsIDAsIDI3MDAsIDEyNTc2LCA3ODQyLCAxMjg5OSwgMCwgMCwgCi0gICAgMjY5OSwgMCwgMCwgMjk4NSwgMTE5MjIyLCAwLCAwLCAxMjE5MiwgMTE5MzE0LCAwLCAxMTkzMTIsIDk4MjcsIDExOTMxMCwgCi0gICAgMTE5MzExLCAxMTkzMDgsIDExOTMwOSwgMTE5MzA2LCAxMTQ4MSwgNDEyMTAsIDExOTMwNSwgMCwgMzUsIDAsIDAsIDY2Njk0LCAKLSAgICA3NDM1NywgMCwgMCwgNDM1OTYsIDYwOTAsIDY0MjU3LCA3ODEyLCAxMDUzNCwgMCwgMCwgNzM4NDgsIDAsIDQyNzIsIDAsIAotICAgIDQwOTY3LCA0MDk2NCwgOTE3ODI1LCAxMjcwNCwgMCwgNDMzMDYsIDAsIDY0NDk3LCAxMjEzOCwgNzkzMCwgMCwgNDMzMDMsIAotICAgIDAsIDAsIDkxNzgyNiwgNTI0NCwgNDE4OSwgMTI3MDk4LCA2NzU5NiwgMCwgNDE4OCwgMTg3OSwgMCwgOTY4LCAwLCAwLCAwLCAKLSAgICA4ODczLCAwLCAwLCAwLCA2NTU1NSwgMTI1NzQsIDAsIDAsIDAsIDc0NDkwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU3OCwgCi0gICAgMTI3MjAsIDAsIDQxMjI3LCAwLCAxMjM0NiwgMCwgNjQ4NDgsIDAsIDAsIDcyNTEsIDAsIDAsIDExODg1MCwgMTE5MTQxLCAwLCAKLSAgICA2NjAxNSwgMCwgOTU5LCA4ODg1LCAxMjU2NCwgNjY0NTcsIDAsIDk0NjksIDk2MzIsIDAsIDc0NzYxLCA2NDMyMywgMCwgMCwgCi0gICAgMCwgMCwgMzEwLCAwLCA0MTU2NCwgMTA5NzYsIDAsIDAsIDAsIDAsIDEwMDU0LCA2NDk3LCA4NTc0LCAwLCA5MDEyLCAKLSAgICAxOTk1OCwgNzQ0MjAsIDY1MDg5LCAxMzIxNSwgNjUwNDcsIDY1MTYzLCA3NDA0NCwgMzc0LCA0MzE5NSwgODE2LCAwLCAwLCAKLSAgICAwLCA0MTkzNCwgNzQ2NSwgMCwgMCwgMCwgNDcxNSwgNjEwMSwgMCwgNDE5MzYsIDAsIDQ4NzksIDAsIDY1NDQ2LCAwLCAzMDcsIAotICAgIDAsIDk1ODUsIDUzNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NTY3LCAxMjA2MTQsIDE5MjksIDAsIDEyMTQyLCAwLCAKLSAgICAxMjIzNiwgNDE0MTksIDE5NDYxOCwgMTk0NjIxLCAxMjk4MiwgMTk0NjIzLCA1Mzc4LCAwLCAwLCA0MTQyMSwgMCwgNDQ2MiwgCi0gICAgMCwgMCwgMCwgODIxLCAwLCAyNDk4LCA1ODAwLCAxMjAxNTcsIDAsIDE3NjAsIDAsIDQ0NjksIDIzMjQsIDgyOCwgMzYxMSwgCi0gICAgMCwgNzU3LCAxMTg1LCAwLCAwLCA0MzU5NywgMTA2MjgsIDc0ODA4LCAxOTQ1NzIsIDc5OTksIDAsIDAsIDAsIDEwNjM0LCAKLSAgICAxMDk0MiwgNzcxMywgMjM0OCwgMCwgNjQzNzQsIDQzODAsIDE5NDYwOCwgMTE5MDQ0LCAxOTQ2MTAsIDY0MzI0LCA0MTI0MCwgCi0gICAgODYyLCA2NTYyNiwgMTk0NjEzLCAxODEwLCAzNjczLCA1MTM3LCAxOTQ2MTcsIDAsIDcyNzcsIDY1NjIyLCAwLCA3NTY2LCAKLSAgICA2NDY4OCwgMTk0NTkzLCAxOTQ1OTIsIDE5NDU5NSwgMTIwODEyLCAxOTQ1OTcsIDQ3NDgsIDE5NDU5OSwgMTk0NTk4LCAKLSAgICAxOTQ2MDEsIDQyMjYwLCA1ODcxLCAxMTkwNzUsIDAsIDc0NTc2LCAwLCAwLCAxOTQ2MDIsIDM5NjcsIDE5NDYwNCwgMTMxMzcsIAotICAgIDg3NzUsIDE5NDYwNSwgMCwgMjk2MywgMCwgODQxMCwgNDQ1NCwgNzIzLCAwLCA5NjYsIDQ0NDksIDAsIDEyNzA2MCwgMCwgCi0gICAgNzgxOSwgMjMyMCwgMTk0NTg5LCAzMzksIDQ5NjgsIDE5NDU5MCwgMTIwMzk5LCA4MDc1LCAwLCAwLCA4MDQ3LCAwLCAwLCAKLSAgICAxMjYzNCwgNDE1NDIsIDAsIDc0NjYsIDExODgyMiwgMTIxNzQsIDQyNjEwLCAwLCA3NDQ1MiwgMCwgMTU4NCwgNjY2NDUsIAotICAgIDYwNDUsIDAsIDEyMDY0MCwgNjUyMTgsIDAsIDAsIDAsIDc1MzcsIDAsIDExMzcwLCAwLCAxMDMzMCwgMCwgMTAzOTQsIDAsIAorICAgIDI2OTksIDAsIDczODQ1LCAyOTg1LCAxMTkyMjIsIDAsIDkxNzg0NSwgMTIxOTIsIDExOTMxNCwgMCwgMTE5MzEyLCA5ODI3LCAKKyAgICAxMTkzMTAsIDExOTMxMSwgMTE5MzA4LCAxMTkzMDksIDExOTMwNiwgMTE0ODEsIDQxMjEwLCAxMTkzMDUsIDAsIDM1LCAKKyAgICA3ODQ4MSwgNzg0ODIsIDY2Njk0LCA2ODQ3OSwgNzg0NzcsIDc4NDc4LCA0MzU5NiwgNjA5MCwgNjQyNTcsIDc4MTIsIAorICAgIDEwNTM0LCAwLCA3ODQ4NSwgNzM4NDgsIDc4NDgzLCA0MjcyLCAwLCA0MDk2NywgNDA5NjQsIDkxNzgyNSwgMTI3MDQsIAorICAgIDc4NDg3LCA0MzMwNiwgMCwgNjQ0OTcsIDEyMTM4LCA3OTMwLCAwLCA0MzMwMywgNjgyMTYsIDAsIDkxNzgyNiwgNTI0NCwgCisgICAgNDE4OSwgMTI3MDk4LCA2NzU5NiwgMCwgNDE4OCwgMTg3OSwgMCwgOTY4LCAwLCA0Mzc0MywgMCwgODg3MywgMCwgMCwgCisgICAgOTE3ODI3LCA2NTU1NSwgMTI1NzQsIDAsIDAsIDAsIDc0NDkwLCAxMjcwOTksIDQzNjU3LCAwLCAwLCAwLCA0MjY4MiwgCisgICAgMTI1NzgsIDEyNzIwLCAwLCA0MTIyNywgMCwgMTIzNDYsIDEyNzEwMSwgNjQ4NDgsIDAsIDAsIDcyNTEsIDAsIDAsIAorICAgIDExODg1MCwgMTE5MTQxLCAwLCA2NjAxNSwgMCwgOTU5LCA4ODg1LCAxMjU2NCwgNjY0NTcsIDc4ODA4LCA5NDY5LCA5NjMyLCAKKyAgICAwLCA3NDc2MSwgNjQzMjMsIDAsIDAsIDAsIDAsIDMxMCwgMCwgNDEyODEsIDEwOTc2LCAwLCAxOTQ3NjgsIDAsIDc0MjY2LCAKKyAgICAxMDA1NCwgNjQ5NywgODU3NCwgMCwgOTAxMiwgMTk5NTgsIDc0NDIwLCA2NTA4OSwgMTMyMTUsIDY1MDQ3LCA2NTE2MywgCisgICAgNzQwNDQsIDM3NCwgNDMxOTUsIDgxNiwgMCwgMCwgMCwgNDE5MzQsIDc0NjUsIDAsIDAsIDAsIDQ3MTUsIDYxMDEsIDAsIAorICAgIDQxOTM2LCAwLCA0ODc5LCAwLCA2NTQ0NiwgMCwgMzA3LCAwLCA5NTg1LCA1Mzc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2NTU2NywgMTIwNjE0LCAxOTI5LCAwLCAxMjE0MiwgMCwgMTIyMzYsIDQxNDE5LCAxOTQ2MTgsIDE5NDYyMSwgMTI5ODIsIAorICAgIDE5NDYyMywgNTM3OCwgNzg3OTEsIDAsIDQxNDIxLCAwLCA0NDYyLCAwLCAwLCAwLCA4MjEsIDAsIDI0OTgsIDU4MDAsIAorICAgIDEyMDE1NywgMCwgMTc2MCwgMCwgNDQ2OSwgMjMyNCwgODI4LCAzNjExLCA3ODQwMCwgNzU3LCAxMTg1LCAwLCA3ODc3MCwgCisgICAgNDM1OTcsIDEwNjI4LCA3NDgwOCwgMTk0NTcyLCA3OTk5LCA0Mzk3MSwgMCwgMCwgMTA2MzQsIDEwOTQyLCA3NzEzLCAyMzQ4LCAKKyAgICAwLCA2NDM3NCwgNDM4MCwgMTk0NjA4LCAxMTkwNDQsIDk5ODIsIDY0MzI0LCA0MTI0MCwgODYyLCA2NTYyNiwgNzg0NjIsIAorICAgIDE4MTAsIDM2NzMsIDUxMzcsIDE5NDYxNywgMCwgNzI3NywgNjU2MjIsIDAsIDc1NjYsIDY0Njg4LCAxOTQ1OTMsIDE5NDU5MiwgCisgICAgNzgwOTIsIDc0MzU3LCAxOTQ1OTcsIDQ3NDgsIDE5NDU5OSwgMTk0NTk4LCAxOTQ2MDEsIDQyMjYwLCA1ODcxLCAxMTkwNzUsIAorICAgIDAsIDc0NTc2LCA0NDAxOSwgMCwgMTk0NjAyLCAzOTY3LCAxOTQ2MDQsIDEzMTM3LCA4Nzc1LCAxOTQ2MDUsIDAsIDI5NjMsIAorICAgIDAsIDg0MTAsIDQ0NTQsIDcyMywgOTE3NjAwLCA5NjYsIDQ0NDksIDAsIDEyNzA2MCwgMCwgNzgxOSwgMjMyMCwgMTk0NTg5LCAKKyAgICAzMzksIDQ5NjgsIDE5NDU5MCwgMTIwMzk5LCA4MDc1LCA1NTI3NiwgMCwgODA0NywgMCwgNzg4MjcsIDEyNjM0LCA0MTU0MiwgCisgICAgNzg3ODAsIDc0NjYsIDY3MDUsIDEyMTc0LCA0MjYxMCwgMCwgNzQ0NTIsIDAsIDE1ODQsIDY2NjQ1LCA2MDQ1LCA2NzI5LCAKKyAgICAxMjA2NDAsIDY1MjE4LCA3ODc3NywgMCwgNzgwNjIsIDc1MzcsIDAsIDExMzcwLCAwLCAxMDMzMCwgMCwgMTAzOTQsIDAsIAogICAgIDE5NDc4MywgMCwgMCwgOTc4MCwgMCwgMTMwOTIsIDE5NDU3NiwgMTE5NjA1LCAxOTQ1NzgsIDcwNzQsIDEyMDM5NiwgCiAgICAgMTk0NTc5LCAxOTQ1ODIsIDExNDE0LCAxOTQ1ODQsIDI1MzEsIDEzMDM0LCAwLCAwLCAwLCAxMjU5LCA3NTE3LCAwLCAwLCAKICAgICAxOTQ1NjEsIDQwOTk2LCAxMzAzNywgNzA5MiwgNjQxLCA1MjE5LCAxOTQ1NjcsIDE5NDU2NiwgMTEwNjQsIDQxMTI5LCAwLCAKICAgICA0Mjg1MCwgMTMwMzUsIDkwNzUsIDAsIDU0NjYsIDE5NDU3MCwgMCwgNjQwOTgsIDY1NzkzLCA0NTM1LCAxOTQ1NzMsIDQyNzEsIAotICAgIDE5NDU3NSwgMCwgMCwgNDE0MTAsIDAsIDY0MjYyLCAwLCA0MTQwNywgMCwgMCwgNDExMzEsIDExODg2NCwgOTA0NiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQzMzgsIDI1NjMsIDEzMDMzLCAyNDcsIDkxNzc4NywgMCwgMTIzMzgsIDQ2NTEsIAotICAgIDAsIDExMjcwLCAwLCAwLCAxMTkzMywgMCwgMCwgNDE5MDMsIDY3ODkyLCAxMTAwMSwgMCwgNDIyNTUsIDAsIDAsIDAsIAotICAgIDQxOTA1LCAwLCAwLCAxMDc3NSwgOTc5MywgNTAwOSwgMCwgNDIyNjksIDY0NTg3LCAwLCA0MjUzNSwgMCwgNjQ1MjksIAotICAgIDQxNDA4LCA0Mjg1MywgMzg3NywgMCwgMCwgODE0NywgNDM1NjYsIDExOTAyMSwgMCwgMTAyMzYsIDY1OTE4LCAwLCAwLCAwLCAKLSAgICA2NDUwNiwgMCwgMTE4OTIxLCA0NzQ3LCAwLCAwLCA0MzIwMCwgNTgzMiwgMCwgMCwgNTE0MSwgNDI2MDAsIDAsIDQzMjAzLCAKLSAgICAwLCAwLCA0MzI4NiwgMCwgMCwgMCwgMCwgMCwgMCwgNzQxMzcsIDExMzAzLCA2NTU0NywgMCwgNzAzMSwgODU5LCAwLCAwLCAKLSAgICAwLCA2MDU5LCAxMjY5ODUsIDAsIDAsIDg1MzUsIDAsIDAsIDE5NDc4NywgNjYwMzIsIDExNDg4LCAwLCAxMjA3ODYsIDAsIDAsIAotICAgIDEwNTU4LCA2Mzg4NSwgMCwgMTE4MjIsIDAsIDQzMTg5LCAwLCAwLCAxNzg4LCAxNTc5LCAxMjA0ODIsIDkxNzgxNywgMCwgMCwgCi0gICAgMCwgOTAyOCwgMTE5NTcxLCAwLCAwLCAwLCAxMjg1LCA2NDg4MiwgNDEyNDIsIDAsIDAsIDEyNjQwLCAwLCA2NjY0MiwgMCwgCi0gICAgMTI2MjUsIDAsIDAsIDAsIDM5NDAsIDQxNTk3LCAwLCAzMzk2LCAxMjY0MiwgODY2NSwgMCwgMCwgMTI2MzAsIDE2NTMsIDAsIAorICAgIDc4NDE3LCAwLCA2NzY5LCA0MTQxMCwgMCwgNjQyNjIsIDY3NjcsIDQxNDA3LCAwLCAwLCA2NzU1LCAxMTg4NjQsIDkwNDYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDY3Njc1LCAwLCAwLCAwLCA2NDMzOCwgMjU2MywgMTMwMzMsIDI0NywgMTE4OTE1LCAwLCAKKyAgICAxMjMzOCwgNDY1MSwgMCwgMTEyNzAsIDAsIDAsIDExOTMzLCAwLCAwLCA0MTkwMywgNDM0NDcsIDExMDAxLCAwLCA0MjI1NSwgCisgICAgMCwgMCwgMCwgNDE5MDUsIDAsIDAsIDEwNzc1LCA5NzkzLCA1MDA5LCAwLCA0MjI2OSwgNjQ1ODcsIDAsIDQyNTM1LCAKKyAgICA2OTgxMiwgNjQ1MjksIDQxNDA4LCA0Mjg1MywgMzg3NywgMTIwNzk1LCA0MjY3NCwgODE0NywgNDM1NjYsIDExOTAyMSwgMCwgCisgICAgMTAyMzYsIDY1OTE4LCAwLCAwLCAwLCA2NDUwNiwgMCwgMTE4OTIxLCA0NzQ3LCAwLCAwLCA0MzIwMCwgNTgzMiwgMCwgMCwgCisgICAgNTE0MSwgNDI2MDAsIDAsIDQzMjAzLCAwLCAwLCA0MzI4NiwgMCwgMCwgMCwgMCwgNDEzMDUsIDc4Nzc2LCA3NDEzNywgCisgICAgMTEzMDMsIDY1NTQ3LCAwLCA3MDMxLCA4NTksIDAsIDAsIDAsIDYwNTksIDEyNjk4NSwgNTUyMzUsIDAsIDg1MzUsIDAsIAorICAgIDY1MTk2LCAxOTQ3ODcsIDY2MDMyLCAxMTQ4OCwgMCwgMTIwNzg2LCA0MjIzMywgMTI3NDg4LCA5OTQ2LCA2Mzg4NSwgMCwgCisgICAgMTE4MjIsIDAsIDQzMTg5LCAwLCAwLCAxNzg4LCAxNTc5LCAxMjA0ODIsIDkxNzgxNywgMCwgMCwgMCwgOTAyOCwgMTE5NTcxLCAKKyAgICA2OTIzNCwgMCwgMCwgMTI4NSwgNjQ4ODIsIDQxMjQyLCAwLCAwLCAxMjY0MCwgMCwgNzQwMSwgMCwgMTI2MjUsIDY4MTk4LCAKKyAgICAwLCAwLCAzOTQwLCA0MTU5NywgNTUyNjAsIDMzOTYsIDEyNjQyLCA4NjY1LCAwLCAwLCAxMjYzMCwgMTY1MywgOTE3ODE1LCAKICAgICAxMDE1MywgMCwgNjE2NiwgMTIwNTE2LCAxMjA1MjMsIDAsIDg4MTUsIDY2NjczLCA2NTA0NiwgOTI4NSwgOTEzLCA0MjI1OSwgCi0gICAgMTE5MzE3LCAxMTkzMTgsIDExOTMxNSwgMTE5MzE2LCA0MjQ4NSwgMTE4ODM3LCA3ODc4LCA4MjExLCA0MjI5MywgNjQzNzcsIAotICAgIDAsIDAsIDAsIDAsIDEyMDMyLCAwLCA5NzI1LCAwLCAwLCA1MjYzLCAxMjgxOCwgMCwgNDE5MzksIDEwMDIyLCA2NTM4NywgCi0gICAgMTE4ODMxLCA0Mjc3NywgMTAxMzksIDk4MCwgMCwgNjUzODYsIDAsIDAsIDAsIDQzMTk4LCA3MTg0LCAwLCAxOTQ3OTcsIAotICAgIDkxNzgxOSwgMTAwODUsIDExOTk5MiwgMCwgMTE5OTk5LCA2NjM0LCAwLCAwLCAxMTkzMjMsIDgwNzIsIDExOTMyMSwgCi0gICAgMTE5MzIyLCAwLCA4ODcyLCA3NzgzLCA5MTc5OTIsIDEyMzk4LCA4MjM3LCAwLCAwLCAxMjM5NSwgMCwgMCwgMTIwNTY1LCAKLSAgICA5OTE0LCAxMjcwMTEsIDkxNzg1NCwgNzM5NzUsIDc0MjgxLCAwLCAwLCAwLCA5MTc4NTMsIDAsIDY0NzM1LCA0MTI0MywgMCwgCi0gICAgNzgwOCwgMTgyOSwgMCwgNDE5MzcsIDQzNTgsIDQzMjcyLCAwLCAwLCAwLCAwLCAwLCAxNzEwLCAwLCAwLCAwLCAwLCA0OSwgCi0gICAgNjYyNywgMCwgNjI1OCwgMTA2ODMsIDAsIDk3NDEsIDEyMDQyMywgNTY0OSwgOTE3OTg2LCAwLCA2NDQxOCwgMTY0MywgCi0gICAgNzQxMDQsIDg0MDUsIDM0NzAsIDAsIDEzMjEzLCA0MjQ1MiwgOTE3OTg3LCAwLCAxMjAwMDksIDAsIDEwNzIsIDAsIAotICAgIDkxNzk5MCwgMCwgNjU3NiwgNDE5ODgsIDQxMTMyLCA2NTY3NSwgMTA4MCwgMTIwMDAyLCA3NDEwMCwgMCwgMTEwMSwgCi0gICAgMTIwMDAxLCAxMjMwOSwgMCwgMCwgMTI2MzIsIDEwODYsIDE4NjksIDAsIDc2ODAsIDAsIDY1NDU4LCAxMjA3MTQsIDEyNjM5LCAKLSAgICAzMzgwLCA4MTIzLCAxMDkxLCAxMjYzOCwgNzk3NywgNDUwMSwgMCwgMCwgNjYzMDksIDAsIDAsIDE0OTQsIDAsIDAsIDAsIAotICAgIDExNjkzLCAwLCAxMDQ5NCwgMTE5MjMwLCA2NTg3MiwgMTIzNjMsIDExMzg2LCAwLCAwLCAwLCAwLCA2NDU4MiwgMCwgCi0gICAgNzM3OTQsIDAsIDgwMjIsIDAsIDAsIDc0MTA2LCAxMjQxMywgMCwgMCwgMCwgMCwgNTU3MCwgMTg4MSwgNzIxMCwgMCwgCi0gICAgMTAxMiwgNjY2MzAsIDAsIDEyMDcwOSwgNzIwOCwgNjY0NDIsIDU1NjksIDAsIDQyMzM5LCAwLCA2MDYzLCAwLCAwLCAwLCAKKyAgICAxMTkzMTcsIDExOTMxOCwgMTE5MzE1LCA2ODQ1NCwgNDI0ODUsIDExODgzNywgNzg3OCwgODIxMSwgNDIyOTMsIDY0Mzc3LCAKKyAgICAwLCAwLCAwLCAxOTQ2NzMsIDEyMDMyLCAwLCA5NzI1LCAwLCA3ODQzMSwgNTI2MywgMTI4MTgsIDc4NDMwLCA0MTkzOSwgCisgICAgMTAwMjIsIDY1Mzg3LCA3ODQxOSwgNDI3NzcsIDEwMTM5LCA5ODAsIDQzNjk4LCA2NTM4NiwgMCwgMCwgNDM3MDEsIDQzMTk4LCAKKyAgICA3MTg0LCAxMjA2NzMsIDE5NDc5NywgOTE3ODE5LCAxMDA4NSwgMTE5OTkyLCAwLCAxMTk5OTMsIDY2MzQsIDAsIDAsIAorICAgIDExOTMyMywgODA3MiwgMTE5MzIxLCA0MzcwMCwgMCwgODg3MiwgNzc4MywgOTE3OTkyLCAxMjM5OCwgODIzNywgMCwgMCwgCisgICAgMTIzOTUsIDAsIDEyNjk3NywgMTIwNTY1LCA5OTE0LCAxMjcwMTEsIDkxNzg1NCwgNzM5NzUsIDYzNjcsIDYzNTEsIDY2Njg4LCAKKyAgICAwLCA3ODEwNywgMCwgNjQ3MzUsIDQxMjQzLCAwLCA3ODA4LCAxODI5LCAwLCA0MTkzNywgNDM1OCwgNDMyNzIsIDYzNTMsIDAsIAorICAgIDAsIDEyMDQyMiwgMCwgMTcxMCwgMCwgMCwgNjU2MDcsIDAsIDQ5LCA2NjI3LCAwLCA2MjU4LCAxMDY4MywgNzg2NzIsIAorICAgIDk3NDEsIDc4NDQzLCA1NjQ5LCA3ODQ0MSwgNDM0NDMsIDY0NDE4LCAxNjQzLCA2NTIxMywgODQwNSwgMzQ3MCwgMCwgCisgICAgMTMyMTMsIDQyNDUyLCA3ODMzMSwgMCwgNzg0NDUsIDAsIDEwNzIsIDc4NDU3LCA3ODQ1MiwgNzg0NTQsIDY1NzYsIDQxOTg4LCAKKyAgICA0MTEzMiwgNjU2NzUsIDEwODAsIDEyMDAwMiwgOTg4NiwgNTUyMjUsIDExMDEsIDY4NDA0LCAxMjMwOSwgNTUyMjcsIDAsIAorICAgIDEyNjMyLCAxMDg2LCAxODY5LCA3ODY4NSwgNzY4MCwgMCwgNjU0NTgsIDEyMDcxNCwgMTI2MzksIDMzODAsIDgxMjMsIAorICAgIDEwOTEsIDEyNjM4LCA3OTc3LCA0NTAxLCAwLCAwLCA2NjMwOSwgMCwgMCwgMTQ5NCwgMCwgMCwgMCwgMTE2OTMsIDAsIAorICAgIDEwNDk0LCAxMTkyMzAsIDY1ODcyLCAxMjM2MywgMTEzODYsIDAsIDAsIDAsIDAsIDY0NTgyLCAwLCA3Mzc5NCwgMCwgODAyMiwgCisgICAgMCwgMCwgNzQxMDYsIDEyNDEzLCAxOTQ4MjksIDkxNzk5NCwgMCwgOTE3OTk1LCA1NTcwLCAxODgxLCA3MjEwLCAwLCAxMDEyLCAKKyAgICA2NjYzMCwgMCwgMTIwNzA5LCA3MjA4LCA2NjQ0MiwgNTU2OSwgMCwgNDIzMzksIDAsIDYwNjMsIDAsIDAsIDExOTU5NCwgCiAgICAgNjA1MywgNjU2MDIsIDAsIDAsIDY0NzI3LCA5MTYwLCAxOTQ4MjcsIDAsIDAsIDAsIDEwNTAzLCAxMTg4MTAsIDYwNTUsIAogICAgIDM4NzAsIDQyNzksIDg0OTAsIDEyMDExNCwgNDMxOSwgNjQ3ODYsIDg2MDIsIDEyMDExMCwgMTEzMjYsIDAsIDAsIDAsIAotICAgIDEyMDExOSwgMTIwNDEzLCAxMjAxMTcsIDEyMDExOCwgMTIwMDk5LCAxMjAxMDAsIDY1MDg3LCA1NTcxLCAzNjc0LCA5NzQwLCAKLSAgICA5MTIxLCA1NTY4LCAxMjAxMDcsIDEyMDEwOCwgNDIwODUsIDEwMTA3LCA2NDU2NywgNDI4NzAsIDEyMDEwMSwgNTg5LCAKKyAgICAxMjAxMTksIDc4MzMzLCAxMjAxMTcsIDEyMDExOCwgMTIwMDk5LCAxMjAxMDAsIDY1MDg3LCA1NTcxLCAzNjc0LCA5NzQwLCAKKyAgICA5MTIxLCA1NTY4LCAxMjAxMDcsIDEyMDEwOCwgNDIwODUsIDEwMTA3LCA0MjE1OSwgNDI4NzAsIDEyMDEwMSwgNTg5LCAKICAgICA3MDUwLCAwLCA0MzI4MSwgMTAyMzMsIDQxMjYzLCA2NjI1MSwgNjU3MjksIDY2MjUzLCAwLCA3NDA5OSwgNDI2NDUsIDAsIAotICAgIDE5NDgxNSwgODU4MywgMCwgNTg0NywgNjkyOCwgMCwgMCwgMCwgMCwgMCwgNjY1OTIsIDEyMjA0LCAwLCAxOTk2NiwgMCwgCi0gICAgNDI1NjEsIDEyMDYyNiwgMCwgMCwgODEyMCwgMTIwNzAxLCAwLCAwLCAwLCA0MTA2MywgMCwgMTA2NjQsIDAsIDgzNjksIDAsIAotICAgIDQ1NTEsIDAsIDc0NzU5LCAwLCAwLCA5NjczLCA2NjMzNCwgNjU1ODAsIDEwNDc4LCAxMjcwMDIsIDEyNTE3LCA1NTcsIAotICAgIDk0NTcsIDEyMDM0LCAwLCA0MTA1NiwgMTI1MTksIDQxMDA0LCAwLCAwLCA3NDA5NCwgMCwgMCwgMTE5MDAxLCAwLCAwLCAwLCAKLSAgICAxMjExMSwgMzkyNywgMCwgMTI1MTUsIDE0NzQsIDY3ODkzLCA1NDkyLCA2OTIzLCAwLCAxMDQ0MSwgNzM4MzYsIDAsIDAsIAotICAgIDU0OTMsIDAsIDc0MzE5LCAwLCA2NjYzNSwgMTIwMTksIDAsIDE2MTgsIDAsIDAsIDk2NDUsIDEwNDMwLCAwLCA1ODUzLCAKLSAgICAxMzA2MywgMTAzNjMsIDAsIDEyOTU2LCAwLCAwLCAxMTMxNCwgMCwgMTIwNjAsIDAsIDAsIDEyODI2LCAwLCAwLCAxMDUxNCwgCi0gICAgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAxMjcwNTQsIDAsIDQzNTcwLCAyNjk3LCAwLCAwLCAxMjcwNTcsIDI2OTUsIAotICAgIDQyMTcxLCAwLCAwLCAwLCA2NzYxNywgMTk0ODE0LCAwLCAyNjkzLCAxMjEyNSwgMTI3NjYsIDAsIDExNjQsIDAsIDAsIAotICAgIDQxOTE4LCAwLCAwLCA4Njg3LCA2NjAwOSwgMTIxNzgsIDcwNTMsIDAsIDc0NjksIDAsIDUyNDgsIDEyMjE4LCAxMjA1MzgsIAotICAgIDY0MjcsIDQyODg0LCA0MTEyMywgMCwgMCwgNDI4NzMsIDQxMTI2LCA5OTkxLCA0MTEyOCwgNzQzNzEsIDEyNzAzMSwgMCwgCi0gICAgOTg3MywgMCwgNDI4NzcsIDc5OTQsIDY0NzYyLCA2MTA0LCA0Mjg0MywgNjU5MSwgOTM0MCwgMCwgMTU4OSwgMCwgMjk2LCAKLSAgICA3NDQzOCwgMCwgMCwgNjc4NDEsIDc0MzcwLCAwLCA4OTIyLCAwLCA3NDYwMCwgNzQ0MzUsIDc0ODM2LCAwLCAxMjU3OSwgMCwgCi0gICAgMTI1NzUsIDY0MTYsIDU2NTYsIDI4OTEsIDEzMjYyLCA2NTU5MCwgNTI5OSwgMCwgMTE0NzMsIDU0NDksIDEyNTIsIDAsIDAsIAotICAgIDQxNDMxLCA3NDM2OSwgNjUzNzMsIDUyOTUsIDAsIDc0MTE0LCAxMjIzLCAxNjQyLCAxNzQsIDAsIDg4MywgNDE2MSwgCi0gICAgMTI2OTEsIDQyNjAzLCA0MTQxMywgMzIxMiwgMTI3MDI1LCAzMjExLCA3NDgxMCwgNDE0MjUsIDEyNzAyOSwgMCwgNzQ0NTAsIAotICAgIDk3MjgsIDM4NDYsIDgwNzAsIDYxNTAsIDY2MzYsIDQzNzAsIDAsIDAsIDc0MTc4LCA3NDU4NywgNzQxMTcsIDAsIDAsIDAsIAotICAgIDQ5ODYsIDEyMTg5LCAwLCAwLCAxMjA0OTksIDkxNzU1MywgNDI1NywgMTIxMDQsIDExOTE4MiwgNjIyMCwgOTAwNCwgCi0gICAgNjU1NjEsIDAsIDAsIDAsIDY4MTM1LCA5MTc1NzYsIDAsIDAsIDAsIDAsIDk4OTAsIDAsIDEyOTcxLCAwLCAwLCA3Mzg5OCwgCi0gICAgMTE5NzksIDAsIDExODkwMCwgMCwgMCwgOTYzNSwgMTI2MDAsIDg4NzEsIDAsIDAsIDAsIDY0NjksIDc0MjI3LCAwLCAKKyAgICAxOTQ4MTUsIDg1ODMsIDAsIDU4NDcsIDY5MjgsIDAsIDAsIDAsIDAsIDAsIDY2NTkyLCAxMjIwNCwgMCwgMTk5NjYsIAorICAgIDc3ODU2LCA0MjU2MSwgMTIwNjI2LCAwLCAwLCA4MTIwLCAxMjA3MDEsIDAsIDAsIDAsIDQxMDYzLCAwLCAxMDY2NCwgMCwgCisgICAgODM2OSwgMCwgNDU1MSwgMCwgNzQ3NTksIDAsIDAsIDk2NzMsIDY2MzM0LCA2NTU4MCwgMTA0NzgsIDExODk2MCwgMTI1MTcsIAorICAgIDU1NywgOTQ1NywgMTIwMzQsIDAsIDYzNTUsIDEyNTE5LCA0MTAwNCwgMCwgMCwgNzQwOTQsIDAsIDAsIDc3OTcwLCAwLCAwLCAKKyAgICAwLCAxMjExMSwgMzkyNywgMCwgMTI1MTUsIDE0NzQsIDY3ODkzLCA1NDkyLCA2OTIzLCAwLCAxMDQ0MSwgNzM4MzYsIDAsIAorICAgIDQzOTkwLCA1NDkzLCAwLCA3NDMxOSwgMCwgNjY2MzUsIDEyMDE5LCAwLCAxNjE4LCAwLCAxMjA0NzQsIDk2NDUsIDEwNDMwLCAKKyAgICA5MTc5NTksIDU4NTMsIDEzMDYzLCAxMDM2MywgMCwgMTI5NTYsIDAsIDEyMDcyOSwgMTEzMTQsIDAsIDEyMDYwLCAwLCAKKyAgICA3ODM5MiwgMTI4MjYsIDYzMjksIDAsIDEwNTE0LCA2NTUxNywgNzQzOTUsIDI3MDcsIDgzMDksIDAsIDEyNzA1NCwgNzgzOTgsIAorICAgIDQzNTcwLCAyNjk3LCA0MzQyMCwgNzgzOTYsIDEyNzA1NywgMjY5NSwgNDIxNzEsIDAsIDAsIDAsIDY3NjE3LCAxMTg5NzEsIAorICAgIDAsIDI2OTMsIDEyMTI1LCAxMjc2NiwgMCwgMTE2NCwgMCwgMCwgNDE5MTgsIDAsIDAsIDg2ODcsIDY2MDA5LCAxMjE3OCwgCisgICAgNzA1MywgMCwgNzQ2OSwgMCwgNTI0OCwgMTIyMTgsIDEyMDUzOCwgNjQyNywgNDI4ODQsIDQxMTIzLCAwLCAwLCA0Mjg3MywgCisgICAgNDExMjYsIDk5OTEsIDQxMTI4LCA3NDM3MSwgMTI3MDMxLCAwLCA5ODczLCAwLCA0Mjg3NywgNzk5NCwgNjQ3NjIsIDIwNTMsIAorICAgIDQyODQzLCA2NTkxLCA5MzQwLCAwLCAxNTg5LCAwLCAyOTYsIDc0NDM4LCA3ODg1MiwgMCwgNjc4NDEsIDc0MzcwLCAwLCAKKyAgICA4OTIyLCAwLCA3NDYwMCwgMTI3MDAsIDc0ODM2LCAwLCAxMjU3OSwgMCwgMTI1NzUsIDY0MTYsIDU2NTYsIDI4OTEsIAorICAgIDEzMjYyLCA2NTU5MCwgNTI5OSwgMCwgMTE0NzMsIDU0NDksIDEyNTIsIDAsIDc4NDA0LCA0MTQzMSwgNzQzNjksIDY1MzczLCAKKyAgICA1Mjk1LCAwLCA3NDExNCwgMTIyMywgMTY0MiwgMTc0LCA3ODM5OSwgODgzLCA0MTYxLCAxMjY5MSwgNDI2MDMsIDQxNDEzLCAKKyAgICAzMjEyLCA0MTQ1OSwgMzIxMSwgNzQ4MTAsIDQxNDI1LCAxMjcwMjksIDc4NDEyLCA3NDQ1MCwgOTcyOCwgMzg0NiwgODA3MCwgCisgICAgNjE1MCwgNjYzNiwgNDM3MCwgMCwgMCwgNzQxNzgsIDc0NTg3LCA3NDExNywgMCwgMCwgMCwgNDk4NiwgMTIxODksIDAsIAorICAgIDY3NjQ4LCAxMjA0OTksIDkxNzU1MywgNDI1NywgMTIxMDQsIDc3OTQyLCA2MjIwLCA5MDA0LCA2NTU2MSwgMCwgNzc5NDksIAorICAgIDAsIDY4MTM1LCA5MTc1NzYsIDc3OTQ2LCAwLCAwLCAwLCA5ODkwLCA3ODU2MSwgMTI5NzEsIDc4NDUzLCAwLCA3Mzg5OCwgCisgICAgMTE5NzksIDAsIDExODkwMCwgOTE3ODk0LCAwLCA5NjM1LCAxMjYwMCwgODg3MSwgMCwgMCwgMCwgNjQ2OSwgNzQyMjcsIDAsIAogICAgIDY1MzA0LCA0Njc5LCAxMDIzMCwgNjQzMDAsIDY0ODY3LCAzNDI3LCA0MjQwLCAwLCAwLCAwLCAwLCA5MTc5NTIsIDAsIDAsIAotICAgIDAsIDcyODIsIDAsIDY1NzMzLCA2NDYxOCwgMCwgMCwgMzQ5NCwgNzQ2MDYsIDY1NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDY1ODk4LCAwLCA2NTMxMiwgNTQ0NywgMCwgMTI4OTUsIDY1NTkzLCA0MDEwLCAwLCA0MTEwNiwgMCwgNjU4MDQsIDAsIAotICAgIDQxMTA1LCAwLCA2NTgyMCwgNjIzMiwgMCwgMCwgMCwgNDM2MDgsIDExOTA5MSwgMCwgNjUzOCwgNDMzNSwgMCwgMzk0MSwgCi0gICAgNDExMjIsIDExMDYxLCAwLCA2NDg5MiwgOTExMywgMTk1NCwgMTIxNTUsIDAsIDQyODc4LCAwLCAwLCAwLCA3NDU3OCwgMCwgCi0gICAgNjU4MzIsIDAsIDAsIDAsIDAsIDAsIDQ1ODYsIDAsIDM1MCwgMTA5NTEsIDAsIDUwOSwgMCwgMCwgMCwgMCwgMCwgNTEzMywgCi0gICAgMCwgMCwgOTUwMCwgMCwgMTIxNjIsIDY0NzQxLCAwLCA5MzU0LCAwLCAwLCAwLCAyNDk2LCAxMTUxNiwgOTQ0LCAxMTg4NTEsIAotICAgIDM4OTAsIDEyMTY4LCAxNDM4LCAwLCAwLCAwLCA0MTk0NywgMTIyMCwgMTIwODI4LCAwLCAwLCAwLCAxNTcxLCA0MjYzMCwgCi0gICAgNDE5NDksIDQyODA1LCA4MjcwLCA5NDMsIDU2NCwgMCwgMzEyLCA0MTk4MCwgMCwgMCwgMCwgODg3NywgMjY5LCA0NDI5LCAKLSAgICA2MjcyLCA5NjE3LCAxNDYwLCA2OTU0LCAwLCA0MTEyMCwgNjUxMjEsIDEwODYyLCA2MDYwLCA0MTExOSwgNDE0MTYsIAotICAgIDc0MzU1LCA0MTczLCAwLCAwLCAwLCAxOTA2LCAwLCAxMTUzMiwgNzQwNzMsIDAsIDAsIDE5ODUsIDYyOTYsIDk1ODIsIAotICAgIDkxNzg5NSwgNjQyODcsIDAsIDAsIDExNDI4LCAxNzMwLCAyNDU3LCAwLCAxOTkxOCwgMTA0NjksIDAsIDAsIDc3MDMsIAotICAgIDg4NDAsIDgwMzUsIDAsIDAsIDAsIDAsIDYxMjksIDAsIDAsIDAsIDAsIDc4NzQsIDg2ODEsIDAsIDAsIDEzMTM2LCAwLCAwLCAKLSAgICA3NDI3OCwgNjM4ODYsIDExODg4MSwgOTYwNSwgNzM4OTIsIDEzMjIwLCAwLCAwLCA1NTE0LCAwLCA5MjI4LCAwLCAwLCAwLCAKLSAgICA1MjQwLCA5ODExLCAxMDAxMiwgMzA5NiwgMCwgMCwgMCwgNjY2NzYsIDY1ODczLCAwLCAwLCAwLCA5NTAxLCAwLCAxMjcyLCAKLSAgICA2NDUzNiwgNjU0NjUsIDY0NjU0LCA3NDY3LCAwLCAxNDY3LCAxMDE1OCwgMTAwNDAsIDAsIDk1MTksIDAsIDAsIDAsIAotICAgIDExODg5OSwgMTIxOTMsIDAsIDAsIDAsIDAsIDAsIDE5OTM1LCAwLCAwLCAwLCAwLCAwLCAwLCA1Mjc1LCAwLCAwLCA4NjM3LCAKLSAgICAwLCAwLCAzNzg5LCA2Mzg4MCwgMTE0NzEsIDQzNTU0LCA2NTg2MiwgMTE0NzQsIDY2MzMyLCA2NjYwMywgMCwgMCwgMTIwNDIsIAotICAgIDAsIDAsIDk1MzcsIDM5NjEsIDEyMTE1LCAwLCAyNjA1LCA0NTAwLCA2NDU2MSwgMCwgNDk4MSwgMCwgMCwgNjM4NzYsIAotICAgIDExNjY3LCAwLCAwLCA0MjM2MiwgNjQ2ODYsIDQ0OTksIDQxNjQ5LCA3NTg5LCAwLCAwLCAzMjM3LCAwLCAxMjAxOTQsIDAsIAotICAgIDg1NDEsIDAsIDAsIDQxODY2LCAwLCAwLCAwLCAwLCAwLCA0MzU1NSwgMjgyMywgOTU1OSwgMCwgNDE5NDAsIDgyOTksIAorICAgIDAsIDcyODIsIDc4NzI4LCA2NTczMywgNDQ0NSwgMCwgMCwgMzQ5NCwgNzQ2MDYsIDY1NTUsIDAsIDc3OTc2LCAwLCAwLCAKKyAgICA3ODU2NiwgMCwgMCwgNjU4OTgsIDAsIDY1MzEyLCA1NDQ3LCAwLCAxMjg5NSwgNjU1OTMsIDQwMTAsIDAsIDQxMTA2LCAwLCAKKyAgICA2NTgwNCwgMCwgNDExMDUsIDAsIDY1ODIwLCA2MjMyLCAwLCAwLCAwLCA0MzYwOCwgMTE5MDkxLCAwLCA2NTM4LCA0MzM1LCAKKyAgICA3ODM2NCwgMzk0MSwgNDExMjIsIDExMDYxLCA3ODM2MywgNjQ4OTIsIDkxMTMsIDE5NTQsIDEyMTU1LCAwLCA0Mjg3OCwgCisgICAgMTE1MDAsIDAsIDAsIDc0NTc4LCAwLCA2NTgzMiwgMCwgMCwgMCwgNzc5NzUsIDAsIDQ1ODYsIDAsIDM1MCwgMTA5NTEsIDAsIAorICAgIDUwOSwgMCwgMCwgMCwgMCwgMCwgNTEzMywgMCwgMCwgOTUwMCwgMCwgMTIxNjIsIDY0NzQxLCAwLCA5MzU0LCAwLCAwLCAwLCAKKyAgICAyNDk2LCAxMTUxNiwgOTQ0LCAxMTg4NTEsIDM4OTAsIDEyMTY4LCAxNDM4LCAwLCAwLCAwLCA0MTk0NywgMTIyMCwgCisgICAgMTIwODI4LCAwLCAwLCAwLCAxNTcxLCA0MjYzMCwgNDE5NDksIDQyODA1LCA4MjcwLCA5NDMsIDU2NCwgMCwgMzEyLCAKKyAgICA0MTk4MCwgMCwgMCwgNzgxMjAsIDg4NzcsIDI2OSwgNDQyOSwgNjI3MiwgOTYxNywgMTQ2MCwgNjk1NCwgNzg2NTcsIAorICAgIDQxMTIwLCA2NTEyMSwgMTA4NjIsIDYwNjAsIDQxMTE5LCA0MTQxNiwgNzQzNTUsIDQxNzMsIDAsIDAsIDAsIDE5MDYsIAorICAgIDkxNzk4NiwgMTE1MzIsIDc0MDczLCAwLCAwLCAxOTg1LCA2Mjk2LCA5NTgyLCA5MTc4OTUsIDY0Mjg3LCAwLCA3ODExNSwgCisgICAgMTE0MjgsIDE3MzAsIDI0NTcsIDAsIDE5OTE4LCAxMDQ2OSwgMCwgMCwgNzcwMywgODg0MCwgODAzNSwgMCwgMCwgMCwgMCwgCisgICAgNjEyOSwgMCwgMCwgMCwgMCwgNzg3NCwgODY4MSwgMCwgMCwgMTMxMzYsIDAsIDAsIDc0Mjc4LCA2Mzg4NiwgMTE4ODgxLCAKKyAgICA5NjA1LCA3Mzg5MiwgMTMyMjAsIDAsIDEyMDI3NCwgNTUxNCwgMCwgOTIyOCwgMCwgMCwgMCwgNTI0MCwgOTgxMSwgMTAwMTIsIAorICAgIDMwOTYsIDAsIDAsIDAsIDY2Njc2LCA2NTg3MywgMCwgMCwgMCwgOTUwMSwgMCwgMTI3MiwgNjQ1MzYsIDY1NDY1LCA2NDY1NCwgCisgICAgNzQ2NywgMCwgMTQ2NywgMTAxNTgsIDEwMDQwLCAwLCA5NTE5LCAwLCA5MTc4MTIsIDAsIDExODg5OSwgMTIxOTMsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE5OTM1LCAwLCAwLCAwLCAwLCAwLCAwLCA1Mjc1LCAwLCAwLCA4NjM3LCAwLCAwLCAzNzg5LCA2Mzg4MCwgCisgICAgMTE0NzEsIDQzNTU0LCA2NTg2MiwgMTE0NzQsIDY2MzMyLCA2NjYwMywgMCwgMjQyNiwgMTIwNDIsIDAsIDAsIDk1MzcsIAorICAgIDM5NjEsIDEyMTE1LCAwLCAyNjA1LCA0NTAwLCA2NDU2MSwgNTUyMjQsIDQ5ODEsIDAsIDAsIDYzODc2LCAxMTY2NywgCisgICAgNDI2ODYsIDc3OTczLCA0MjM2MiwgNjQ2ODYsIDQ0OTksIDQxNjQ5LCA3NTg5LCAwLCAwLCAzMjM3LCAwLCA2ODIxNSwgMCwgCisgICAgODU0MSwgNzgyOTgsIDAsIDQxODY2LCAwLCAwLCAwLCAwLCAwLCA0MzU1NSwgMjgyMywgOTU1OSwgMCwgNDE5NDAsIDgyOTksIAogICAgIDQxOTQ1LCAwLCA0MTk0MSwgMzMwOCwgNzE5MCwgNjQ4ODAsIDg2MTQsIDY1MjIwLCA0MTQ5MywgMCwgNDE2OTksIDEwNzYyLCAKICAgICAwLCAxMjk5OSwgMCwgMCwgODEwNiwgNDEyOCwgMCwgMCwgNDQ5NCwgMCwgNDAxMiwgMTAzOTUsIDAsIDExOTU2NywgNjU0NDcsIAogICAgIDAsIDAsIDExMDA0LCA2OTUsIDczOSwgNjk2LCA3NjExLCAwLCA0Mjc1NSwgNzQ4MDIsIDkyMjcsIDc1MDYsIDc1MTAsIDAsIAogICAgIDY5MSwgNzM4LCA3NTExLCA3NTEyLCA3NTE1LCAzODY4LCA2ODgsIDQxODQ3LCA2OTAsIDI1NDgsIDczNywgOTc0LCA4MDAzLCAKLSAgICAwLCAwLCAwLCAwLCAzOTg1LCAwLCA2NTg2MCwgNjM5MjEsIDcwNTEsIDc0MjA4LCA0NjgyLCAwLCAxMjgwOSwgNjQwNiwgCi0gICAgNDY4NSwgMCwgMTA4NzksIDEwMzQ3LCA0NjgwLCA5MDU1LCAwLCAzODUxLCA4MTMyLCA3NDMyNSwgMCwgOTE3OTA3LCAwLCAKLSAgICA0MTk1OCwgMTE5MTc2LCA5MTc5MDgsIDAsIDAsIDAsIDAsIDc2NDMsIDQyMzczLCAxMTcxNCwgNjc1ODcsIDQzNTY4LCAwLCAKLSAgICAxMTcxNywgNzY1MCwgMTA1OTQsIDY0OTUxLCA3NjQ3LCA3NjQ5LCAwLCA3NjQ2LCAwLCAwLCA5NjUxLCAwLCAzODkxLCAwLCAKLSAgICAwLCAyMzM3LCAxNzM1LCA3NDMyNCwgNjc4NjAsIDU0NTIsIDAsIDAsIDQzNTYxLCAwLCAwLCA3NDE0NiwgMTg2MCwgNzQ5NSwgCi0gICAgNzU4MCwgNTgxMiwgNzQ5NywgNzU4NCwgMCwgMCwgMCwgMCwgNzcyNywgMCwgODQ5OCwgMCwgODk0OSwgMzA2NSwgMCwgMCwgCi0gICAgMTU2OSwgMCwgMTI1MzQsIDEyMTI0LCA3NjkwLCAwLCAxMjUzMywgMCwgNjQxOCwgNDU0MywgMCwgNjk2OSwgMCwgNzQ4MDAsIAotICAgIDAsIDAsIDExOTgwLCAwLCAwLCA2Mzg5NCwgMCwgMTIyODIsIDY2MTkyLCAwLCAwLCA4ODUwLCA3NDI3NSwgOTIzOCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI3OTEsIDAsIDAsIDAsIDAsIDczNzMyLCAxMjc5MywgMTI5MDAsIDAsIDEwOTUwLCAwLCAwLCAxMjc5MCwgCi0gICAgNDE0MDAsIDExOTEyOCwgMCwgMTI3OTIsIDAsIDAsIDE3NDQsIDEyNzg5LCAxMDM2NiwgMTIzMTcsIDQxMzEwLCAwLCAKLSAgICA0MTM5OSwgMCwgMCwgMCwgMCwgMTI2OTAsIDAsIDAsIDAsIDAsIDQxNjUyLCAyOTc0LCAwLCAxMTMxNSwgMCwgMjc4LCAwLCAKLSAgICA0MTQwNSwgMTE5MjU0LCAwLCAxMDA3NywgNjM4NTMsIDc0NTU3LCA0MjU4NiwgMCwgMCwgNjAwMiwgMCwgNDM1NTMsIDAsIAotICAgIDY3OTAzLCAwLCAxMjc4NywgNDEzMDgsIDc5MzQsIDY1MzA2LCAwLCAwLCAwLCA4NjQ2LCAwLCAwLCAwLCAwLCA2NDEzLCAKLSAgICA2NTUwLCAwLCAxOTQwLCAwLCA2NjIyMywgMjIwLCA2NTE5MywgNDM1NTEsIDEwNjc4LCAxMDA0NCwgMCwgMCwgMCwgMCwgCi0gICAgNjQwMywgNTcwNywgMTAzOTMsIDAsIDAsIDY2NjE0LCAwLCAwLCAwLCAxMDI5NywgMCwgMzc0MiwgMCwgMzk1OSwgMCwgMCwgCi0gICAgMCwgMjQ2NywgMCwgNjAwMywgNjM4NDQsIDY2NjMsIDgwNDAsIDAsIDYzODQ1LCA0MTgyLCAwLCA0Njc2LCAxMjA1MDEsIDAsIAotICAgIDAsIDI1MTAsIDAsIDEwMjA4LCAwLCAwLCAxMTU0MCwgNDM1NDYsIDEyMTg2LCAwLCA0MTA2MCwgMCwgMCwgOTA4MywgMCwgMCwgCi0gICAgMCwgMTU1OSwgNjM4MzEsIDk2NzcsIDEyMDI2MCwgMCwgNjUyNTYsIDAsIDc0MDcwLCAwLCAwLCAzNjUsIDEyMDU2LCAKLSAgICA0MzAyNywgMCwgNDE3MTYsIDAsIDAsIDAsIDU1MTYsIDI4NDUsIDc3MTcsIDgwMzYsIDQxNzE3LCA3MzgyNywgNTQ0LCAKLSAgICAxMjA0NSwgNjI3OCwgMCwgNTUxNSwgMCwgMCwgMCwgMCwgNDMyMjEsIDY1MTk0LCAwLCA1NTE3LCAwLCAwLCAwLCA2Nzg4NCwgCi0gICAgMCwgNjc4OTAsIDY3ODg1LCA2Nzg4MCwgNjc4ODEsIDY3ODgyLCA2Nzg4MywgMCwgMCwgNjc4NzksIDAsIDE5MDIsIDY3ODg3LCAKLSAgICA5NjM4LCAxMjk3NiwgMCwgMTI0ODMsIDY3ODcyLCA0MTc2OSwgMCwgNDE3NjUsIDAsIDY2NjcsIDY3ODc0LCA3NTU2LCAKLSAgICA2Nzg3OCwgNzQzNTEsIDExMjY0LCA5ODksIDY3ODc2LCA2Nzg4OSwgMCwgMTMxMSwgMCwgNDMyNiwgMTEwMDAsIDYzODI0LCAKLSAgICAxMzA2OCwgMTA5MzIsIDAsIDY5MTcsIDAsIDAsIDk0OSwgOTE3NTk1LCAwLCA2MTQ4LCA4NjA1LCA0MjI1MywgOTE3OTY3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA2Mzg3MSwgMCwgNDE3OTYsIDEyNjksIDY1MzAsIDAsIDY1MDU3LCAwLCA1MTQ0LCAxMjIyMSwgCi0gICAgMCwgMCwgNDQzMSwgNDMzMSwgMCwgMCwgNDE4MzQsIDUyNzksIDAsIDEwMzM2LCA4MzEyLCAwLCAxMTg4NjEsIDAsIDAsIAotICAgIDExOTY1NCwgNjYwMzYsIDAsIDAsIDY0MjgsIDQyMjcwLCAwLCAwLCAxMTg4NjYsIDAsIDUyNTYsIDEwNjcsIDI1NSwgCi0gICAgMTIxMzEsIDAsIDk0OTMsIDAsIDQxMDE0LCAxMTc5MywgMCwgMCwgNzQzOTQsIDQzNTk0LCAxMDY1MywgMCwgMCwgMTE5NjMyLCAKLSAgICAwLCA2NTYwLCA3MDE2LCA3NDI3NCwgMCwgNDM1NTYsIDM5MjksIDAsIDY2MTQsIDI3NjgsIDAsIDk3NDYsIDUxMzUsIAotICAgIDExODExLCAxMjc5NiwgMTE5NTMsIDAsIDAsIDUxMzksIDM0NiwgNzQzMDMsIDYzMDUsIDEyNzk1LCA0Njc1LCA1MTY4LCAwLCAKLSAgICAwLCA3NDMxNSwgNzQzNjEsIDgyNTMsIDg4MTcsIDExMzYsIDAsIDQzNTYzLCAwLCAwLCAwLCA2NTI4NSwgODIzMCwgOTM2NSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDA0MSwgMCwgMjM1NywgMCwgMTI3ODYsIDIyOSwgMTE5ODg1LCAxMTk4ODQsIDAsIDQzNTUyLCAKKyAgICA3NDA2LCAwLCAwLCAwLCAzOTg1LCAwLCA2NTg2MCwgNjM5MjEsIDcwNTEsIDY5Nzc3LCA0NjgyLCA5MTc4MDUsIDEyODA5LCAKKyAgICA2NDA2LCA0Njg1LCAwLCAxMDg3OSwgMTAzNDcsIDQ2ODAsIDYzNDEsIDAsIDM4NTEsIDgxMzIsIDc0MzI1LCAwLCA5MTc5MDcsIAorICAgIDAsIDQxOTU4LCAxMTkxNzYsIDkxNzkwOCwgMCwgMCwgNDI2NTcsIDAsIDc2NDMsIDQyMzczLCAxMTcxNCwgNjc1ODcsIAorICAgIDQzNTY4LCAwLCAxMTcxNywgNzY1MCwgMTA1OTQsIDY0OTUxLCA3NjQ3LCA3NjQ5LCAwLCA3NjQ2LCAwLCA3ODA4MiwgOTY1MSwgCisgICAgMCwgMzg5MSwgMCwgMCwgMjMzNywgMTczNSwgNzQzMjQsIDY3ODYwLCA1NDUyLCAwLCAwLCA0MzU2MSwgMCwgMCwgNzQxNDYsIAorICAgIDE4NjAsIDc0OTUsIDc1ODAsIDU4MTIsIDc0OTcsIDc1ODQsIDAsIDAsIDAsIDEyMDM0NywgNzcyNywgMCwgODQ5OCwgCisgICAgNjk4MTgsIDg5NDksIDMwNjUsIDQyNzE5LCAwLCAxNTY5LCAwLCAxMjUzNCwgMTIxMjQsIDc2OTAsIDAsIDEyNTMzLCAwLCAKKyAgICA2NDE4LCA0NTQzLCA3ODA4NiwgNjk2OSwgMCwgNzQ4MDAsIDAsIDAsIDExOTgwLCAwLCAwLCA2Mzg5NCwgMTIwNzYwLCAKKyAgICAxMjI4MiwgNjYxOTIsIDAsIDc0NTkyLCA4ODUwLCA3NDI3NSwgOTIzOCwgMTA2MTcsIDkxNzU0NSwgMCwgMCwgMCwgMTI3OTEsIAorICAgIDAsIDAsIDAsIDQ0NDcsIDczNzMyLCAxMjc5MywgMTI5MDAsIDAsIDEwOTUwLCAwLCA3ODA4NywgMTI3OTAsIDQxNDAwLCAKKyAgICAxMTkxMjgsIDAsIDEyNzkyLCA0MjIzMiwgMCwgMTc0NCwgMTI3ODksIDEwMzY2LCAxMjMxNywgNDEzMTAsIDAsIDQxMzk5LCAKKyAgICAwLCAwLCA1NTI1OCwgMCwgMTI2OTAsIDAsIDAsIDQzNjcyLCAwLCA0MTY1MiwgMjk3NCwgOTAxMCwgMTEzMTUsIDAsIDI3OCwgCisgICAgMCwgNDE0MDUsIDExOTI1NCwgMCwgMTAwNzcsIDYzODUzLCA3NDU1NywgNDI1ODYsIDAsIDAsIDYwMDIsIDAsIDQzNTUzLCAwLCAKKyAgICA2NzkwMywgMCwgMTI3ODcsIDQxMzA4LCA3OTM0LCA2NTMwNiwgMCwgMCwgMCwgODY0NiwgMCwgNzc4MjksIDAsIDAsIDY0MTMsIAorICAgIDY1NTAsIDAsIDE5NDAsIDAsIDQzNjM3LCAyMjAsIDY1MTkzLCA0MzU1MSwgMTA2NzgsIDEwMDQ0LCAwLCAwLCAwLCA2ODY1OSwgCisgICAgNjQwMywgNTcwNywgMTAzOTMsIDEyNzUzMiwgMCwgNjY2MTQsIDAsIDAsIDAsIDEwMjk3LCAwLCAzNzQyLCAwLCAzOTU5LCAwLCAKKyAgICAwLCAwLCAyNDY3LCAwLCA2MDAzLCA2Mzg0NCwgNjY2MywgODA0MCwgMCwgNjM4NDUsIDQxODIsIDc4MTcxLCA0Njc2LCAKKyAgICAxMjA1MDEsIDAsIDAsIDI1MTAsIDAsIDEwMjA4LCA3ODE2OCwgMCwgMTE1NDAsIDQzNTQ2LCA2NjkyLCAwLCA0MTA2MCwgMCwgCisgICAgMCwgOTA4MywgMCwgMCwgNzgxNDQsIDE1NTksIDYzODMxLCA5Njc3LCAxMjAyNjAsIDAsIDY1MjU2LCAwLCA3NDA3MCwgMCwgCisgICAgMCwgMzY1LCAxMjA1NiwgNDMwMjcsIDEyMDQyMywgNDE3MTYsIDAsIDAsIDEyMDQ3MiwgNTUxNiwgMjg0NSwgNzcxNywgCisgICAgODAzNiwgNDE3MTcsIDczODI3LCA1NDQsIDEyMDQ1LCA2Mjc4LCAwLCA1NTE1LCAwLCAwLCAwLCA2NTMzOSwgNDMyMjEsIAorICAgIDY1MTk0LCAwLCA1NTE3LCAwLCAwLCA3NDg0MSwgNjc4ODQsIDAsIDY3ODkwLCA2Nzg4NSwgNjc4ODAsIDY3ODgxLCA2Nzg4MiwgCisgICAgNjc4ODMsIDAsIDAsIDY3ODc5LCAwLCAxOTAyLCA2Nzg4NywgOTYzOCwgMTI5NzYsIDAsIDEyNDgzLCAxMjM2OCwgNDE3NjksIAorICAgIDQyNzI2LCA0MTc2NSwgMCwgNjY2NywgNjc4NzQsIDc1NTYsIDY3ODc4LCA3NDM1MSwgMTEyNjQsIDk4OSwgNDI2NzcsIAorICAgIDY3ODg5LCAwLCAxMzExLCAwLCA0MzI2LCAxMTAwMCwgNjM4MjQsIDEzMDY4LCAxMDkzMiwgMCwgNjkxNywgNzgxNTUsIDAsIAorICAgIDk0OSwgNzgxNjIsIDAsIDYxNDgsIDg2MDUsIDQyMjUzLCA3ODE3NywgMCwgMCwgNDI3MTUsIDAsIDAsIDAsIDYzODcxLCAwLCAKKyAgICA0MTc5NiwgMTI2OSwgNjUzMCwgMCwgNjUwNTcsIDAsIDUxNDQsIDEyMjIxLCA0MjcxNiwgMCwgNDQzMSwgNDMzMSwgMCwgMCwgCisgICAgNDE4MzQsIDUyNzksIDAsIDEwMzM2LCA4MzEyLCAwLCA0MjcwMSwgMCwgMCwgNzgxNjUsIDY2MDM2LCAwLCAwLCA2NDI4LCAKKyAgICA0MjI3MCwgMCwgMCwgNDMwNTksIDQyNjY2LCA1MjU2LCAxMDY3LCAyNTUsIDEyMTMxLCAwLCA5NDkzLCAwLCA0MTAxNCwgCisgICAgMTE3OTMsIDAsIDAsIDc0Mzk0LCA0MzQ2MCwgMTA2NTMsIDQyNzIzLCAwLCAxMTk2MzIsIDAsIDY1NjAsIDcwMTYsIDc0Mjc0LCAKKyAgICAwLCA0MzU1NiwgMzkyOSwgMCwgNjYxNCwgMjc2OCwgMCwgOTc0NiwgNTEzNSwgMTE4MTEsIDEyNzk2LCAxMTk1MywgMCwgCisgICAgNjk3NjEsIDUxMzksIDM0NiwgNzQzMDMsIDYzMDUsIDEyNzk1LCA0Njc1LCA1MTY4LCA3ODU1MiwgMCwgNzQzMTUsIDc0MzYxLCAKKyAgICA4MjUzLCA4ODE3LCAxMTM2LCAwLCA0MzU2MywgMCwgMCwgMTk0NzUwLCA3MzkyLCA4MjMwLCA5MzY1LCAwLCAwLCAwLCAwLCAKKyAgICAwLCA0MDQxLCAwLCAyMzU3LCA0MzI0MCwgMTI3ODYsIDIyOSwgMTE5ODg1LCAxMTk4ODQsIDQ0MDA0LCA0MzU1MiwgCiAgICAgMTE5ODgxLCAxMjM1MCwgNjU1NTQsIDExOTg4MiwgMTE5ODc3LCAxMTk4NzYsIDEyNzg1LCA2Mzg2MywgMTE5ODczLCA3NzcwLCAKLSAgICAxMDcxMiwgNjQ4NTMsIDEyNjg2LCAxMTg5MTYsIDQyMzc1LCAwLCAwLCA2NjM1MiwgMTA0NzAsIDAsIDExMDU5LCAxMDc5MSwgCi0gICAgMCwgNDUwLCAwLCAwLCAxMDQzMiwgMTIwOTcsIDU0NTAsIDY0NjkxLCAxMjMzLCAwLCA2Mzg1NiwgMCwgNjYzMzgsIDAsIDAsIAotICAgIDE4MzksIDExODc5OSwgMCwgMTA5MjcsIDE3MDEsIDAsIDIzODgsIDQxNzQ5LCA0MTc2MSwgNTQ1MywgODM2MSwgMTE5ODY1LCAKLSAgICA0MTc1OCwgNTQ0NCwgNDE3NjMsIDY0ODg5LCAxMTk4NjAsIDExOTg2MywgMTE5ODYyLCAwLCAwLCAwLCA2NjQzMiwgODgwMSwgCi0gICAgMzA1MywgNDM0MCwgMCwgMCwgNjU4MTIsIDAsIDAsIDQxODI0LCAwLCAxOTQ4MDEsIDE5NDgwMCwgMTk0ODAzLCAxMTg5OTcsIAotICAgIDE5NDgwNSwgMTk0ODA0LCAxOTQ4MDcsIDE5NDgwNiwgMTk0ODA5LCAxOTQ4MDgsIDAsIDAsIDQ0OTMsIDQzMzYsIDAsIAotICAgIDIzMTQsIDQzNjAyLCAwLCAxMTkzMjUsIDE5NDgxMSwgNDI0MzksIDY0NjM4LCA0MjMyNywgNDM1MjgsIDQ0ODksIDE5NDc5MSwgCi0gICAgMCwgMTk0NzkzLCAxOTEyLCA0MjM4NSwgMTAzMDYsIDEwMzcwLCAwLCAwLCA4ODY3LCAxMDI1MCwgMTAyNTgsIDI3MTIsIAotICAgIDE2MzUsIDE5NDc5OCwgMTQxMCwgMCwgMCwgMTE4ODc4LCAwLCAwLCAwLCAwLCA1NTksIDAsIDQxODI1LCAwLCAwLCA0ODkyLCAKLSAgICA3NDAxNiwgMTk0NzgxLCA2NTQyLCA0MTk1NywgMCwgNTc3NywgMCwgNzU5LCA2NTc0OSwgNjU3NTAsIDY1MjQ4LCAxMjc4OCwgCi0gICAgNjQ0ODcsIDY0NTUyLCAwLCAxMDIyMywgNDIwNjIsIDAsIDAsIDAsIDM2NjgsIDY1NzU0LCA0MzU2MCwgMTIyMjYsIDAsIAotICAgIDY1MTQ5LCAyMzQwLCA0MTk1OSwgMTk0Nzg2LCAxOTQ3ODUsIDE5NDc4OCwgMTIwMTU0LCA2NTc0NywgMTA5MzcsIDI5NjIsIAotICAgIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCAwLCA4OTIxLCA2NjAxMywgMCwgMCwgMTk0NzY5LCAxOTQ3NjgsIDE5NDc3MSwgCi0gICAgMTk0NzcwLCAyOTQ5LCA2NjAxMiwgMTk0Nzc1LCAxOTQ3NzQsIDI5NTgsIDE5NDc3NiwgNDE4MjAsIDQzMDM4LCAyMzk1LCAwLCAKLSAgICAwLCAxMjAwNDMsIDE5NDc3OCwgMTIwMDU4LCAxOTQ3ODAsIDE5NDc3OSwgNDI4MDksIDQyODA3LCAwLCAxMjAwNDcsIAotICAgIDEwMTk4LCA0MTUwLCA2NDM3MSwgODMxOCwgNDE3OTAsIDAsIDQxODk4LCAyMzYwLCA0MTc5NCwgOTE3OTQyLCAwLCAwLCAwLCAKLSAgICAwLCAyNDE4LCAwLCAyNDExLCAxMTMzNiwgNzk5LCA2MzgyMywgMTAyNzYsIDEwMzA4LCAxMDM3MiwgOTE3NTQxLCA0MTc3MiwgCi0gICAgNDI4MTMsIDIzMTcsIDEwMjYwLCAxMTg5ODAsIDExOTU3NiwgMCwgMCwgMTAzODQsIDAsIDAsIDAsIDc3NTMsIDIzNTEsIAotICAgIDY2NTUsIDY0NDg5LCAwLCAwLCAwLCAwLCA0Mjc3OSwgMjMwLCAwLCAwLCA0MzU0OSwgNDg1NSwgNDIxNTAsIDY1NzM5LCAKLSAgICA1NDQxLCA0MTg5NiwgMTAyODgsIDEwMzIwLCAwLCA4NTUsIDcwNDYsIDYxMDksIDY1MDQ1LCA2MzgzOSwgMTE5MTE2LCAwLCAKLSAgICAxMDA5OCwgMCwgNzQxNDUsIDAsIDEwMjY0LCAxMDI4MCwgOTE4NCwgMTAzNzYsIDcwMTMsIDQ0NjcsIDAsIDAsIDAsIAotICAgIDQxODg3LCAwLCA0ODYyLCA5NzM1LCA2NTM3LCAxMjA1OTEsIDAsIDM5MTQsIDExOTYwNCwgMCwgOTA2NSwgMTI5NjEsIDAsIAotICAgIDAsIDAsIDAsIDI4OSwgMCwgNDY5NCwgMTE0MjAsIDQ2OTAsIDAsIDEyMDUxNCwgMCwgNDY5MywgMCwgNzM5MTksIDAsIAotICAgIDQ2ODgsIDEyMDQ1NCwgMCwgMCwgMTE5NjI5LCA4MjM4LCAzMTEwLCAxMjAxNjIsIDAsIDEyMDE2MywgNjUyOCwgMCwgCi0gICAgNDMwMzUsIDEyMDE2MSwgMjE4LCAwLCAxNTIwLCAwLCA0Nzg2LCAwLCA0MzIyNSwgMCwgMCwgMTIwMTU4LCAxMDA4OCwgCi0gICAgNjU0OCwgMCwgMTIwMTU2LCAwLCA4OTg4LCA4ODg4LCAwLCAwLCAwLCAwLCAxMDY2NiwgMCwgNzM5MDIsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ2ODksIDg5MzIsIDAsIDY1NTYwLCAxMTkyMDksIDc0NDQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDA2NSwgODIwNywgMCwgMCwgMCwgMCwgNjYyLCAwLCA5MjQ0LCAwLCAwLCAxMTkyNjEsIDAsIDAsIDAsIDAsIDQxOTI5LCAKLSAgICAwLCAwLCAwLCA0MTkyNiwgMCwgMTIwNDQzLCAxMDUxMywgNjQ2MzcsIDAsIDAsIDUyLCAxMzExOCwgNjQ3NSwgMCwgMCwgCi0gICAgMTIwOTUsIDEwMjI1LCA0ODEyLCAwLCAwLCAwLCA3NDA4NSwgMCwgMzk3OCwgMCwgMCwgMCwgMTE1ODIsIDEyMDc2MSwgCi0gICAgMTIyODEsIDAsIDY1NDQsIDEzMjQxLCAwLCAwLCAwLCAxOTQ4NjAsIDExNzY1LCA2NTI1OCwgMTAzNjksIDAsIDE1ODUsIAorICAgIDEwNzEyLCA2NDg1MywgMTI2ODYsIDExODkxNiwgNDIzNzUsIDAsIDEyNzIzOCwgNjYzNTIsIDEwNDcwLCAwLCAxMTA1OSwgCisgICAgMTA3OTEsIDkxNzk0NCwgNDUwLCAwLCAwLCAxMDQzMiwgMTIwOTcsIDU0NTAsIDY0NjkxLCAxMjMzLCAwLCA0NDAwOSwgCisgICAgNzgyODQsIDY2MzM4LCAwLCAwLCAxODM5LCAxMTg3OTksIDAsIDEwOTI3LCAxNzAxLCAwLCAyMzg4LCA0MTc0OSwgNDE3NjEsIAorICAgIDU0NTMsIDgzNjEsIDExOTg2NSwgNDE3NTgsIDU0NDQsIDQxNzYzLCA2NDg4OSwgMTE5ODYwLCAxMTk4NjMsIDc4Njc3LCAwLCAKKyAgICAwLCA3ODE3NCwgNjY0MzIsIDg4MDEsIDMwNTMsIDQzNDAsIDAsIDAsIDY1ODEyLCA5MTc4MzEsIDAsIDQxODI0LCAwLCAKKyAgICAxOTQ4MDEsIDE5NDgwMCwgMTk0ODAzLCA0MjcwMCwgMTk0ODA1LCAxOTQ4MDQsIDE5NDgwNywgNzg2NzYsIDEyMDQxMywgCisgICAgMTk0ODA4LCAwLCAwLCA0NDkzLCA0MzM2LCAwLCAyMzE0LCA0MzYwMiwgNzg4MjYsIDExOTMyNSwgMTk0ODExLCA0MjQzOSwgCisgICAgNjQ2MzgsIDQyMzI3LCA0MzUyOCwgNDQ4OSwgMTk0NzkxLCAwLCAxOTQ3OTMsIDE5MTIsIDQyMzg1LCAxMDMwNiwgMTAzNzAsIAorICAgIDAsIDAsIDg4NjcsIDEwMjUwLCAxMDI1OCwgMjcxMiwgMTYzNSwgNzg4MjEsIDE0MTAsIDAsIDAsIDExODg3OCwgMCwgMCwgCisgICAgOTkxOSwgMCwgNTU5LCAwLCA0MTgyNSwgMCwgNzgxODgsIDQ4OTIsIDc0MDE2LCAxOTQ3ODEsIDY1NDIsIDQxOTU3LCAwLCAKKyAgICA1Nzc3LCAwLCA3NTksIDY1NzQ5LCAyMDc5LCA2NTI0OCwgMTI3ODgsIDY0NDg3LCA2NDU1MiwgMCwgMTAyMjMsIDQyMDYyLCAKKyAgICAwLCAwLCAwLCAzNjY4LCA2NTc1NCwgNDM1NjAsIDEyMjI2LCAwLCA2NTE0OSwgMjM0MCwgNDE5NTksIDE5NDc4NiwgCisgICAgMTk0Nzg1LCAxOTQ3ODgsIDQzNjE4LCA2NTc0NywgMTA5MzcsIDI5NjIsIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCAwLCA4OTIxLCAKKyAgICA5OTUyLCAwLCAwLCA0MjcxNCwgOTk1MSwgNDM0MDksIDE5NDc3MCwgMjk0OSwgNjYwMTIsIDE5NDc3NSwgMTk0Nzc0LCAKKyAgICAyOTU4LCA2ODM1OSwgNDE4MjAsIDQzMDM4LCAyMzk1LCAwLCA5OTc2LCAxMjAwNDMsIDE5NDc3OCwgMTIwMDU4LCA2ODIyMCwgCisgICAgMTk0Nzc5LCA0MjgwOSwgNDI4MDcsIDAsIDEyMDA0NiwgMTAxOTgsIDQxNTAsIDY0MzcxLCA4MzE4LCA0MTc5MCwgMCwgCisgICAgNDE4OTgsIDIzNjAsIDQxNzk0LCA5MTc5NDIsIDAsIDAsIDAsIDAsIDI0MTgsIDAsIDI0MTEsIDExMzM2LCA3OTksIDYzODIzLCAKKyAgICAxMDI3NiwgMTAzMDgsIDEwMzcyLCA5MTc1NDEsIDQxNzcyLCA0MjgxMywgMjMxNywgMTAyNjAsIDExODk4MCwgNTUyODQsIDAsIAorICAgIDAsIDEwMzg0LCAwLCAwLCAwLCA3NzUzLCAyMzUxLCA2NjU1LCA2NDQ4OSwgMCwgMCwgNzc4NzIsIDQ0NDMsIDQyNzc5LCAKKyAgICAyMzAsIDAsIDAsIDQzNTQ5LCA0ODU1LCA0MjE1MCwgNjU3MzksIDU0NDEsIDQxODk2LCAxMDI4OCwgMTAzMjAsIDAsIDg1NSwgCisgICAgNzA0NiwgNjEwOSwgNjUwNDUsIDYzODM5LCA3ODE5OCwgMjA0OSwgMTAwOTgsIDAsIDc0MTQ1LCAwLCAxMDI2NCwgMTAyODAsIAorICAgIDkxODQsIDEwMzc2LCA3MDEzLCA0NDY3LCAwLCAwLCAwLCA0MTg4NywgMCwgNDg2MiwgOTczNSwgNjUzNywgMTIwNTkxLCAwLCAKKyAgICAzOTE0LCAxMTk2MDQsIDAsIDkwNjUsIDEyOTYxLCAwLCAwLCAwLCAwLCAyODksIDAsIDQ2OTQsIDExNDIwLCA0NjkwLCAwLCAKKyAgICAxMjA1MTQsIDkxNzk3OCwgNDY5MywgMCwgNDI3MjQsIDAsIDQ2ODgsIDEyMDQ1NCwgMCwgMCwgMTE5NjI5LCA4MjM4LCAKKyAgICAzMTEwLCAxMjAxNjIsIDAsIDEyMDE2MywgNjUyOCwgMTI3NTUzLCA0MzAzNSwgMTIwMTYxLCAyMTgsIDAsIDE1MjAsIDAsIAorICAgIDQ3ODYsIDAsIDQzMjI1LCA0NjAyLCAwLCA3ODE2NywgMTAwODgsIDY1NDgsIDAsIDEyMDE1NiwgNDM5NzgsIDg5ODgsIAorICAgIDg4ODgsIDAsIDAsIDAsIDAsIDEwNjY2LCAwLCA3MzkwMiwgMCwgMCwgMCwgOTk3NSwgMCwgMTE5OTAyLCA0Njg5LCA4OTMyLCAKKyAgICAwLCA2NTU2MCwgMTE5MjA5LCA3NDQ0MSwgNzg4MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMDY1LCA4MjA3LCAwLCAKKyAgICAxMjA1MzksIDAsIDAsIDY2MiwgMCwgOTI0NCwgMCwgMCwgMTE5MjYxLCAwLCAwLCAwLCAwLCA0MTkyOSwgMCwgMCwgNjY2NzQsIAorICAgIDQxOTI2LCAxMjA0MDgsIDEyMDQ0MywgMTA1MTMsIDY0NjM3LCAxOTQ4NjIsIDAsIDUyLCAxMzExOCwgNjQ3NSwgMCwgMCwgCisgICAgMTIwOTUsIDEwMjI1LCA0ODEyLCAwLCAwLCAwLCA3NDA4NSwgMCwgMzk3OCwgMCwgOTE3OTQ1LCAwLCAxMTU4MiwgMTIwNzYxLCAKKyAgICAxMjI4MSwgMCwgNjU0NCwgMTMyNDEsIDAsIDY5NzgyLCAwLCAxOTQ4NjAsIDExNzY1LCA2NTI1OCwgMTAzNjksIDAsIDE1ODUsIAogICAgIDcxOTIsIDEwMjQ5LCA0MjIsIDE1MDAsIDIwMzYsIDk4NiwgMTk0ODU5LCA2NDM5NCwgNTc4MSwgNTU5OSwgNjQyOTQsIAotICAgIDI0OTQsIDEyMDQ1MCwgNDg2MSwgNzQwMjEsIDY0MzM0LCAwLCAwLCAwLCAwLCA2NTEwMiwgODk2MSwgMCwgMTAyNDMsIAotICAgIDEwMjQ1LCAwLCAwLCAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAyNTA4LCAwLCAwLCAyMDIsIDAsIDc0MTMxLCAxMjQyLCAwLCAKLSAgICAwLCA2Mzk0MCwgMCwgNjQ1MzMsIDAsIDAsIDY3ODQyLCAxMTk5MCwgMCwgNjM5MzksIDAsIDY1NDQwLCAyNTA0LCAwLCAwLCAKLSAgICA2NDgyOSwgMCwgNjk0MywgMCwgNTg1OSwgMCwgMjg1OCwgMCwgNzQyOTQsIDAsIDc0MzA1LCAwLCAxMTkwMjcsIDEyOTkyLCAKLSAgICAyNzUzLCAxOTM2LCA3NDQ5MSwgMCwgMjc1MSwgMTI2NjIsIDI3NjMsIDg5NTMsIDY0NzAxLCAxMDczMSwgMTI5MjIsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc0MTI4LCAyODU2LCAxMTk5MTAsIDQ3LCAxMTk5MTEsIDEyNjk4NiwgNjU4NTgsIDAsIDAsIDAsIAotICAgIDc4OTksIDAsIDg0MTcsIDY1OTAzLCA3MDcyLCAwLCAwLCA0MDMzLCAwLCA2NjQ3NCwgMCwgMCwgMjEyLCA2NDYwMCwgMTkwMywgCi0gICAgMTIzMjAsIDAsIDAsIDAsIDAsIDg5MTUsIDI3NTksIDk0NSwgMCwgMCwgMCwgMCwgMCwgMTI5MSwgNzQ4MjgsIDAsIDAsIAotICAgIDk1MzEsIDEzMTU1LCA4NTA1LCAwLCAxMjA2MiwgMCwgMCwgNjU0ODcsIDAsIDQxODM3LCAxMjA2MTEsIDEyMDQzMiwgMCwgMCwgCi0gICAgMCwgMTIwNDMzLCAwLCA2MzkzNSwgNzM5NjIsIDAsIDY0Nzg3LCA0MzUyNCwgMCwgNjQ0MjYsIDAsIDAsIDAsIDAsIDY1NjY0LCAKLSAgICA2NDc4NSwgOTg0MywgMCwgODY3NCwgMCwgMCwgMCwgMCwgMTI2MjQsIDAsIDE2NzMsIDQ4MTEsIDAsIDU5ODYsIDkzMzgsIAotICAgIDMwNDYsIDc0NDgwLCA1OTg1LCA5MTc5MjgsIDExOTU5OCwgOTgyMCwgMCwgMTIxODcsIDAsIDAsIDU5ODQsIDAsIDQzMzA4LCAKLSAgICA0MzkzLCAwLCAwLCAwLCAwLCAwLCA3NDgyNiwgNjQ3MzMsIDAsIDAsIDM0OTEsIDAsIDAsIDAsIDM1MTQsIDY1NDg1LCAwLCAKLSAgICA3NDkyLCAwLCAwLCAwLCA3NTE0LCAwLCAwLCAxOTQ3MzEsIDc1MDIsIDc1ODcsIDAsIDAsIDAsIDYzOTI1LCAwLCA3NjEwLCAKLSAgICAyMTksIDAsIDAsIDY5MiwgNDM1ODgsIDc0NDMzLCA0MTYzNSwgMCwgOTY4OCwgMCwgOTUzNSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjQ2MTAsIDExODA0LCAwLCAwLCA3NDUzLCAwLCA4MDEzLCAwLCAwLCAwLCA4ODk1LCA1MjUzLCAwLCA1NDU4LCAwLCAyODY2LCAKLSAgICAwLCAwLCA2NTExMSwgMCwgMTIwMTgsIDEyMDQ4NCwgMCwgMCwgMCwgODk2MiwgMCwgOTY0MSwgNjY2NTMsIDcwNTksIDAsIDAsIAotICAgIDk2MDQsIDAsIDc0NDEsIDYzODI2LCAwLCAxMTg5NDEsIDY0MzkyLCAwLCAwLCAyODQ0LCAwLCA0MTk3NCwgMCwgMTIxMzksIAotICAgIDAsIDAsIDAsIDMzNTgsIDY1Mjk1LCAwLCAzMTA0LCAwLCAwLCAwLCAwLCA1MzA4LCAwLCAyOTAsIDAsIDAsIDI4NjIsIAotICAgIDI3OTIsIDE5NTA4OCwgMCwgMCwgMzI2OCwgNjY1OTEsIDAsIDY1NTIsIDQyMzY3LCA3MDM1LCAxMjA1NTgsIDAsIDAsIAotICAgIDE4MTQsIDAsIDEwMjQwLCAwLCAxOTUwOTIsIDAsIDExOTAyMCwgMCwgMCwgNDI2NDYsIDc2MDYsIDI1OTEsIDI4MzcsIAotICAgIDQzNDEsIDAsIDY0NDgyLCAwLCA4MTYzLCA2NTI3MCwgMCwgMCwgMCwgOTExMiwgNzQ0MzEsIDg2MywgOTQ5MCwgMCwgMCwgCi0gICAgNDMzMjMsIDEyMDUxMywgMCwgOTA3MSwgMCwgMCwgMzY1NCwgMCwgOTYzNywgMCwgMjUzNSwgNjU1MDQsIDc2NTMsIDQwOTkzLCAKLSAgICAwLCA2NjU4NywgMTk1MDk4LCAwLCAwLCAwLCAxMTAwNiwgMTI5MjcsIDc4MDcsIDgwNzMsIDAsIDEwNjI5LCAwLCA3NDA4OCwgCi0gICAgMzA1NiwgMTA4MjMsIDAsIDAsIDg3NjIsIDEwNTA4LCA3NDUwNiwgNzM3NzAsIDYzOTk0LCA0MzE5MywgMTA3MzcsIDM0NjMsIAotICAgIDAsIDAsIDY2NjMzLCA4Njk1LCA0ODE1LCAxMTMyMiwgNTgxMSwgMTIzNDUsIDcwNDksIDAsIDUxOTUsIDAsIDAsIDY2NjM5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjA1NjEsIDEyNjIsIDAsIDY1NjEsIDE5OTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTk5MDcsIDY0NjEyLCAxMTk5MSwgMCwgMCwgMCwgMTUwMiwgMCwgMCwgOTEwNywgMCwgNTcwMiwgMzY1NSwgMCwgODQzMCwgCi0gICAgMCwgNzQxMzIsIDAsIDAsIDc0MDU3LCA5NjAzLCAwLCA1MjU0LCAxMjA3NDIsIDc3MjQsIDc0Mzg4LCA3NDgzOCwgMTA3OTYsIAotICAgIDUxMjksIDAsIDAsIDU5MCwgNzU3OSwgNTYxNCwgNTg5MywgMTk0NzQ0LCAxMTcyMCwgMCwgMTE3MjEsIDAsIDAsIDAsIAotICAgIDEyMDU0MSwgNjYwMzgsIDQ3OTMsIDY3ODUxLCAxMTcyNiwgMCwgNzQyMDQsIDAsIDAsIDkxNzYwMCwgODk0LCAzMDAsIDAsIAotICAgIDEyMzA2LCA2NjIzNSwgMCwgMCwgMCwgMjU2MiwgMCwgMCwgNDI1MDMsIDAsIDExNjUyLCAwLCAwLCAxMTkyNDEsIDAsIDAsIAotICAgIDUwOTYsIDUwOTUsIDI4NjMsIDM0MjQsIDAsIDEwNDU0LCA0MjUzMCwgNTA5NCwgMTE5NjM4LCAwLCAxMzE1NiwgMCwgCi0gICAgMTA4MzIsIDUwOTMsIDAsIDAsIDAsIDUwOTIsIDEwNzA4LCAxMTMyNywgMCwgNTA5MSwgMTc2LCAwLCA5MTUzLCA0MTA0LCAwLCAKLSAgICAwLCAxMjE1LCAwLCA1NzQ0LCAxMjI3MiwgOTgzMiwgMTE3NzcsIDAsIDAsIDQyODgxLCAwLCA4OTgwLCAxMTg5ODgsIAotICAgIDY3ODYxLCA4ODQ0LCA3NDMzLCAwLCAwLCA0Mjc4LCAwLCAwLCAwLCAwLCA5MDc0LCA0MzQ4LCAwLCA2NTU1OCwgNjU5NDYsIAotICAgIDgxMTMsIDcwODcsIDUyNTUsIDE3ODYsIDY2MSwgMCwgMCwgMCwgNzQ0MjMsIDAsIDU4NiwgNzQ0MTQsIDY0MzU5LCAxMjY3LCAKLSAgICAwLCAwLCAwLCA2NTczMSwgMCwgMCwgMzYyMSwgMCwgNjY2NjYsIDAsIDAsIDY1NjIsIDEyOTI4LCAwLCAxMjI4LCA2NTQ5MCwgCi0gICAgMTEzODMsIDAsIDAsIDAsIDE3MTQsIDc0NDA2LCAwLCAwLCAwLCAwLCA2NjIyNSwgMCwgMCwgMCwgMTE0MzYsIDExOTYxNSwgCi0gICAgNjQsIDAsIDAsIDEwMjkxLCAxMDMyMywgMjgyNiwgMCwgMCwgMCwgNDIwMDgsIDk3MDgsIDAsIDAsIDQyMDExLCA0MTk5OSwgCi0gICAgMCwgMTIyMDYsIDU4MzksIDE3MDIsIDEyNDAsIDc0MDY1LCA2Mjg2LCAwLCAwLCA2NTgzMywgMCwgMCwgMTc2NSwgMCwgMCwgCi0gICAgNjU1ODgsIDAsIDAsIDAsIDg0MDEsIDAsIDQyMDE0LCAwLCA3MDMwLCAwLCAxMDQ3OSwgNjQ5NTksIDI4NTIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDY5NjMsIDAsIDEyNjY3LCAwLCA3NDc4NiwgMTAxNDcsIDEyOTM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA2NDk0NywgMTI0NjcsIDI4NjQsIDY0NzE5LCAxMTQ4LCAxMDQzNSwgMTE0NjIsIDQxNjc1LCAwLCAyNzY1LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA2NjY2MiwgMCwgMCwgOTM2NCwgMTk0Njg1LCA3NDQxNiwgMCwgMCwgMTE5MjQ0LCAyNjMsIAotICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDAsIDAsIDAsIDAsIDY5MzEsIDAsIDY0MzU1LCA3MTc3LCAxMjA1MzAsIDAsIDAsIAotICAgIDAsIDQyNjIsIDEwMjg1LCAxMDcyMiwgNDIwMjAsIDAsIDAsIDY5OTIsIDQyMDE5LCAwLCA0MTI5MCwgMCwgNzUwLCAwLCAwLCAKLSAgICAxMDE2MywgMCwgNzQwNjYsIDcwMzIsIDU5NTQsIDY0OTMxLCA0MzE0LCAwLCAxOTgsIDAsIDczMCwgMCwgMCwgMCwgMCwgCi0gICAgMTMxNjUsIDEwODE0LCA3NDE3MSwgNDI4MDQsIDY3OCwgODI0MCwgMTE4OTYwLCAwLCA0MTM3OCwgMTEwMDgsIDY5MzgsIDAsIAotICAgIDAsIDQyODEyLCA2NjI0NiwgMTIwNTYwLCAwLCAwLCAwLCAzODkyLCAwLCAwLCAwLCA2NjA0NSwgNDE0NzAsIDY0ODA1LCAwLCAKLSAgICAwLCAwLCAxMTg5ODIsIDAsIDQ5NywgMTIxMDAsIDU5NTMsIDAsIDc3OTYsIDAsIDAsIDczODMxLCAwLCAxMDI5MywgNTk1MiwgCi0gICAgMTI4MSwgMCwgMCwgMCwgMTA2NzcsIDYwNCwgNDEwOTcsIDkxODIsIDE4NTksIDAsIDAsIDM0MjUsIDAsIDAsIDI4MzYsIDAsIAotICAgIDAsIDk3MDcsIDAsIDQzMjAyLCAwLCAwLCA2NTE5OSwgMTczOCwgMCwgMCwgMjgzMiwgMCwgOTY3MCwgMTI5MzcsIDAsIDAsIAotICAgIDAsIDAsIDI4MjIsIDAsIDQ0MzYsIDAsIDAsIDczNzUyLCAwLCA2NDg3MiwgMCwgMTMzMSwgMCwgMCwgMCwgMTI3MDgsIDAsIAotICAgIDUwOTAsIDUwODksIDAsIDAsIDExOTEwOSwgMCwgMCwgMzE5LCAxMTg5MzEsIDAsIDk0NzcsIDAsIDAsIDUwODcsIDAsIAotICAgIDc2NDAsIDk2LCA1MDg2LCAwLCAwLCAwLCA1MDg1LCA2NDI4NiwgMCwgMCwgNDE0MjIsIDAsIDExOTkwMSwgNDIzNTYsIAotICAgIDM3NzIsIDAsIDAsIDUwMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NzcsIDc2MDEsIDAsIDU5MSwgNjQ0MTksIDExODk1MywgMCwgCi0gICAgMCwgMTE4OTIzLCAwLCAwLCAxMDkzOSwgNjEwNiwgNjkzMywgNDEyNzEsIDAsIDExOTkwMywgNDUzNCwgNDEyNzAsIDAsIDAsIAotICAgIDY1NTc0LCAwLCA5MjI0LCAwLCAzNjcxLCA4OTc2LCAwLCAwLCA0MTI3NSwgMCwgMCwgMCwgNzk2MywgNDIwMTMsIDAsIDU2OCwgCi0gICAgMCwgNDEyNzMsIDAsIDAsIDAsIDAsIDk3MTUsIDAsIDgyNTgsIDExNzUzLCA3NDgyMCwgMCwgOTYwMiwgMTE4OTE5LCA0MiwgCi0gICAgMCwgMCwgMCwgMCwgNzQ1OCwgMCwgMCwgNjUzODUsIDAsIDAsIDExOTU4LCAwLCAwLCAwLCA2MjU0LCAwLCA2NjMzNiwgCisgICAgMjQ5NCwgMTIwNDUwLCA0ODYxLCA3NDAyMSwgNjQzMzQsIDc4MjAzLCAwLCAwLCAwLCA2NTEwMiwgODk2MSwgNjU4NDIsIAorICAgIDEwMjQzLCAxMDI0NSwgMCwgMTIwNDEwLCAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAyNTA4LCAwLCAwLCAyMDIsIDAsIAorICAgIDc0MTMxLCAxMjQyLCA2NTUxNCwgMCwgNjM5NDAsIDAsIDY0NTMzLCAxMjAxMjksIDAsIDY3ODQyLCAxMTk5MCwgMCwgCisgICAgNjM5MzksIDQzMzc1LCA2NTQ0MCwgMjUwNCwgMCwgNzg2NzEsIDY0ODI5LCAwLCA2OTQzLCA5MTc5MzQsIDU4NTksIDAsIAorICAgIDI4NTgsIDAsIDc0Mjk0LCAwLCA2OTIzOSwgMCwgMTE5MDI3LCAxMjk5MiwgMjc1MywgMTkzNiwgNzQ0OTEsIDAsIDI3NTEsIAorICAgIDEyNjYyLCAyNzYzLCA4OTUzLCA2NDcwMSwgMTA3MzEsIDEyOTIyLCA3MDUyLCA5MTc4MzksIDAsIDAsIDAsIDYzOTIwLCAKKyAgICA3NDEyOCwgMjg1NiwgMTE5OTEwLCA0NywgMTE5OTExLCAxMjY5ODYsIDY1ODU4LCAwLCAwLCAwLCA3ODk5LCAwLCA4NDE3LCAKKyAgICA2NTkwMywgNzA3MiwgMCwgMCwgNDAzMywgMCwgNDM5OTIsIDAsIDAsIDIxMiwgNjQ2MDAsIDE5MDMsIDEyMzIwLCAwLCAwLCAKKyAgICAwLCAwLCA4OTE1LCAyNzU5LCA5NDUsIDY2ODksIDAsIDAsIDAsIDAsIDEyOTEsIDc0ODI4LCAwLCAwLCA5NTMxLCAxMzE1NSwgCisgICAgODUwNSwgNjgzNzksIDEyMDYyLCAwLCAwLCA2NTQ4NywgMCwgNDE4MzcsIDEyMDYxMSwgMTIwNDMyLCAwLCAwLCAwLCAKKyAgICAxMjA0MzMsIDAsIDYzOTM1LCA3Mzk2MiwgMTIwODA2LCA2NDc4NywgNDM1MjQsIDAsIDY0NDI2LCAwLCAwLCAwLCAwLCAKKyAgICA2NTY2NCwgNjY5MywgOTg0MywgMCwgODY3NCwgMCwgMCwgMCwgMCwgMTI2MjQsIDAsIDE2NzMsIDQ4MTEsIDAsIDU5ODYsIAorICAgIDkzMzgsIDMwNDYsIDc0NDgwLCA1OTg1LCA5MTc5MjgsIDExOTU5OCwgOTgyMCwgMCwgMTIxODcsIDAsIDAsIDU5ODQsIDAsIAorICAgIDQzMzA4LCA0MzkzLCAwLCAwLCAwLCAwLCAwLCA3NDgyNiwgNjQ3MzMsIDAsIDAsIDM0OTEsIDAsIDAsIDAsIDM1MTQsIAorICAgIDY1NDg1LCAwLCA3NDkyLCAwLCA3NDYwNSwgMTE5MTM0LCA3NTE0LCAwLCAwLCAxOTQ3MzEsIDc1MDIsIDc1ODcsIDY4MzUzLCAKKyAgICAwLCAwLCA2MzkyNSwgMCwgNzYxMCwgMjE5LCAwLCAwLCA2OTIsIDQzNTg4LCA3NDQzMywgNDE2MzUsIDQzMjQxLCA5Njg4LCAKKyAgICAwLCA5NTM1LCAwLCAwLCAwLCA2NDUzMCwgMCwgNjQ2MTAsIDExODA0LCAwLCAwLCA3NDUzLCAwLCA4MDEzLCAwLCAwLCAwLCAKKyAgICA4ODk1LCA1MjUzLCAwLCA1NDU4LCAwLCAyODY2LCAwLCAwLCA2NTExMSwgNjg0MzMsIDY3MDAsIDEyMDQ4NCwgMCwgMCwgMCwgCisgICAgODk2MiwgNzc5NjAsIDk2NDEsIDQzNjk0LCA3MDU5LCAwLCAwLCA5NjA0LCA3ODcwMCwgNzQ0MSwgNjM4MjYsIDAsIAorICAgIDExODk0MSwgNjQzOTIsIDAsIDAsIDI4NDQsIDAsIDQxOTc0LCAwLCAxMjEzOSwgMCwgMCwgMCwgMzM1OCwgNjUyOTUsIDAsIAorICAgIDMxMDQsIDAsIDAsIDE5NDc2NSwgMCwgNTMwOCwgMCwgMjkwLCAwLCAwLCAyODYyLCAyNzkyLCAxOTUwODgsIDAsIDAsIAorICAgIDMyNjgsIDY2NTkxLCAwLCA2NTUyLCA0MjM2NywgNzAzNSwgMTIwNTU4LCAwLCAwLCAxODE0LCAwLCAxMDI0MCwgMCwgCisgICAgNzQzMDUsIDAsIDc0NTI4LCAwLCAwLCA0MjY0NiwgNzYwNiwgMjU5MSwgMjgzNywgNDM0MSwgNzc5NTYsIDY0NDgyLCAwLCAKKyAgICA4MTYzLCA2NTI3MCwgMCwgMCwgMCwgOTExMiwgNzQ0MzEsIDg2MywgOTQ5MCwgMTE5ODk4LCAwLCA0MzMyMywgMTIwNTEzLCAKKyAgICAxMTk4OTcsIDkwNzEsIDAsIDAsIDM2NTQsIDc3ODksIDk2MzcsIDAsIDI1MzUsIDY1NTA0LCA3NjUzLCA0MDk5MywgCisgICAgMTE5ODk5LCA2NjU4NywgMTk1MDk4LCAwLCAwLCAwLCAxMTAwNiwgMTI5MjcsIDc4MDcsIDgwNzMsIDAsIDEwNjI5LCAwLCAKKyAgICA3NDA4OCwgMzA1NiwgMTA4MjMsIDAsIDEyNzMyNywgODc2MiwgMTA1MDgsIDc0NTA2LCA3Mzc3MCwgNDM5NjksIDQzMTkzLCAKKyAgICAxMDczNywgMzQ2MywgMCwgMCwgNjY2MzMsIDg2OTUsIDQ4MTUsIDExMzIyLCA1ODExLCAxMjM0NSwgNzA0OSwgMCwgNTE5NSwgCisgICAgMCwgMCwgNjY2MzksIDAsIDAsIDAsIDAsIDAsIDEyMDU2MSwgMTI2MiwgMCwgNjU2MSwgMTk5MzksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDExOTkwNywgNjQ2MTIsIDExOTkxLCAwLCAwLCAwLCAxNTAyLCAwLCAwLCA5MTA3LCAwLCA1NzAyLCAKKyAgICAzNjU1LCA2NzY2MSwgODQzMCwgMCwgNzQxMzIsIDEyMDc1OCwgMCwgNzQwNTcsIDk2MDMsIDAsIDUyNTQsIDEyMDc0MiwgCisgICAgNzcyNCwgNzQzODgsIDY4Mzc1LCAxMDc5NiwgNTEyOSwgMCwgMCwgNTkwLCA3NTc5LCA1NjE0LCA1ODkzLCAxOTQ3NDQsIAorICAgIDExNzIwLCAwLCAxMTcyMSwgMCwgNDc5OCwgMCwgMTE5MzE2LCA2NjAzOCwgNDc5MywgNjc4NTEsIDExNzI2LCAwLCA3NDIwNCwgCisgICAgNjg2MTAsIDAsIDY4NjI2LCA4OTQsIDMwMCwgMCwgMTIzMDYsIDY2MjM1LCA4MDA0LCAwLCAwLCAyNTYyLCAwLCAwLCAKKyAgICA0MjUwMywgMCwgMTE2NTIsIDAsIDAsIDExOTI0MSwgMCwgMCwgNTA5NiwgNTA5NSwgMjg2MywgMzQyNCwgMCwgMTA0NTQsIAorICAgIDQyNTMwLCA1MDk0LCAxMTk2MzgsIDAsIDEzMTU2LCAwLCAxMDgzMiwgNTA5MywgMCwgMCwgMCwgNTA5MiwgMTA3MDgsIAorICAgIDExMzI3LCAwLCA1MDkxLCAxNzYsIDAsIDkxNTMsIDQxMDQsIDc4NTk5LCA3ODYwMSwgMTIxNSwgNDI3MTIsIDU3NDQsIAorICAgIDEyMjcyLCA5ODMyLCAxMTc3NywgMCwgMTI3MzcxLCA0Mjg4MSwgMCwgODk4MCwgMTE4OTg4LCA2Nzg2MSwgODg0NCwgNzIwOSwgCisgICAgMCwgMCwgNDI3OCwgMCwgMCwgMCwgMCwgOTA3NCwgNDM0OCwgMCwgNjU1NTgsIDY1OTQ2LCA4MTEzLCA3MDg3LCA1MjU1LCAKKyAgICAxNzg2LCA2NjEsIDAsIDAsIDAsIDc0NDIzLCAwLCA1ODYsIDc0NDE0LCA2NDM1OSwgMTI2NywgMCwgNjU0NjgsIDAsIAorICAgIDY1NzMxLCAwLCAwLCAzNjIxLCAxMjA0NzMsIDY2NjY2LCA2NDIxMSwgMCwgNjU2MiwgMTI5MjgsIDAsIDEyMjgsIDY1NDkwLCAKKyAgICAxMTM4MywgMCwgMCwgMCwgMTcxNCwgNzQ0MDYsIDAsIDAsIDAsIDAsIDY2MjI1LCAwLCAwLCA0MjY2MCwgMTE0MzYsIDIwNzAsIAorICAgIDY0LCAxMjA2OTQsIDAsIDEwMjkxLCAxMDMyMywgMjgyNiwgMCwgMCwgMCwgNDIwMDgsIDk3MDgsIDQyNzEwLCAwLCA0MjAxMSwgCisgICAgNDE5OTksIDAsIDEyMjA2LCA1ODM5LCAxNzAyLCAxMjQwLCA3NDA2NSwgNjI4NiwgMCwgMCwgNjU4MzMsIDc3ODQ4LCAwLCAKKyAgICAxNzY1LCAwLCAwLCA2NTU4OCwgMCwgMCwgMCwgODQwMSwgMCwgNDIwMTQsIDAsIDcwMzAsIDAsIDEwNDc5LCA2NDk1OSwgCisgICAgMjg1MiwgMCwgMCwgMCwgMCwgMTk1MDYxLCA5MTc5NTEsIDY5NjMsIDAsIDEyNjY3LCA2NDU0MCwgNzQ3ODYsIDEwMTQ3LCAKKyAgICAxMjkzNSwgMCwgMCwgMCwgMCwgMCwgNzg3NTcsIDAsIDAsIDAsIDAsIDY0OTQ3LCAxMjQ2NywgMjg2NCwgNjQ3MTksIDExNDgsIAorICAgIDEwNDM1LCAxMTQ2MiwgNDE2NzUsIDAsIDI3NjUsIDAsIDAsIDAsIDEyMDcxOSwgMCwgMCwgNjY2NjIsIDAsIDc4MTMzLCAKKyAgICA5MzY0LCAxOTQ2ODUsIDc0NDE2LCAwLCAwLCA3Nzk4OCwgMjYzLCAxMDQ0OSwgNDEyODgsIDAsIDQxODM5LCA3ODM4NywgMCwgCisgICAgNzc5ODYsIDAsIDY5MzEsIDAsIDY0MzU1LCA3MTc3LCAxMjA1MzAsIDAsIDAsIDAsIDQyNjIsIDEwMjg1LCAxMDcyMiwgCisgICAgNDIwMjAsIDAsIDY4MDYsIDY5OTIsIDQyMDE5LCAwLCA0MTI5MCwgMCwgNzUwLCAwLCAwLCAxMDE2MywgNjM5MTMsIDc0MDY2LCAKKyAgICA3MDMyLCA1OTU0LCA2NDkzMSwgNDMxNCwgMCwgMTk4LCA2ODQ1MywgNzMwLCAwLCA2MzkwNywgNzc5OTMsIDc4ODkxLCAKKyAgICAxMzE2NSwgMTA4MTQsIDc0MTcxLCA0MjgwNCwgNjc4LCA4MjQwLCA3ODAxNSwgMCwgNDEzNzgsIDExMDA4LCA2OTM4LCAwLCAKKyAgICAwLCAyMDk3LCA2NjI0NiwgMTIwNTYwLCAwLCAwLCAwLCAzODkyLCA2ODYzMiwgMCwgNjcxMiwgNjYwNDUsIDQxNDcwLCAKKyAgICA2NDgwNSwgMCwgMCwgMCwgNjQ4MDEsIDAsIDQ5NywgMTIxMDAsIDU5NTMsIDAsIDc3OTYsIDAsIDQzMjU0LCA3MzgzMSwgMCwgCisgICAgMTAyOTMsIDU5NTIsIDEyODEsIDAsIDAsIDAsIDEwNjc3LCA2MDQsIDQxMDk3LCA5MTgyLCAxODU5LCAwLCAwLCAzNDI1LCAwLCAKKyAgICAwLCAyODM2LCAwLCAwLCA5NzA3LCAwLCA0MzIwMiwgMCwgMCwgNjUxOTksIDE3MzgsIDkxNzgxOCwgMCwgMjgzMiwgMCwgCisgICAgOTY3MCwgMTI5MzcsIDAsIDY2Mzc0LCAwLCAwLCAyODIyLCAwLCA0NDM2LCAwLCAwLCA3Mzc1MiwgMCwgNjQ4NzIsIDAsIAorICAgIDEzMzEsIDAsIDAsIDAsIDEyNzA4LCAwLCA1MDkwLCA1MDg5LCAwLCAwLCAxMTkxMDksIDAsIDAsIDMxOSwgMTE4OTMxLCAKKyAgICA0MzQ3OSwgOTQ3NywgMCwgMCwgNTA4NywgMCwgNzY0MCwgOTYsIDUwODYsIDAsIDAsIDAsIDUwODUsIDY0Mjg2LCAwLCAwLCAKKyAgICA0MTQyMiwgMCwgMTE5OTAxLCA0MjM1NiwgMzc3MiwgMCwgMCwgNTAxMSwgMCwgMCwgMCwgMCwgMCwgMTI3MjQxLCA2Njc3LCAKKyAgICA3NjAxLCAwLCA1OTEsIDY0NDE5LCAxMTg5NTMsIDAsIDAsIDExODkyMywgNzM3MzQsIDAsIDEwOTM5LCA2MTA2LCA2OTMzLCAKKyAgICA0MTI3MSwgNjc2MCwgMTE5OTAzLCA0NTM0LCA0MTI3MCwgOTE3OTYyLCAwLCA2NTU3NCwgMCwgOTIyNCwgMCwgMzY3MSwgCisgICAgODk3NiwgMCwgMCwgNDEyNzUsIDYzNzIsIDAsIDU1MjYxLCA3OTYzLCA2MzcxLCAwLCA1NjgsIDAsIDQxMjczLCAwLCAwLCAKKyAgICA2NzI4LCAwLCA5NzE1LCAwLCA4MjU4LCAxMTc1MywgNzQ4MjAsIDAsIDk2MDIsIDExODkxOSwgNDIsIDAsIDQzNjg4LCAwLCAKKyAgICAwLCA3NDU4LCAwLCAwLCA2NTM4NSwgMTE5OTAwLCAwLCAxMTk1OCwgMCwgOTE3ODIyLCAwLCA2MjU0LCA0MjcyMSwgNjYzMzYsIAogICAgIDgwNDUsIDExNTUwLCAwLCAwLCAwLCA0Mjg1OCwgMTE3ODksIDY1ODY4LCA1NTU3LCA5MTc5NDYsIDk3MzcsIDEzMTA5LCAwLCAKLSAgICA5NDY3LCA1NTU4LCA4ODc4LCAwLCAxOTUwMzYsIDc0NTEsIDc0MzUsIDEwMTQ2LCAwLCA5MDg2LCA2NDU2NiwgMCwgNjQ1ODQsIAotICAgIDc0MzcsIDc0NTQsIDEyNTk0LCAwLCAwLCA0NTQ2LCA3NzMxLCAwLCA5MTc5NDgsIDc0MjQzLCAwLCAzODA1LCAwLCAwLCAwLCAKLSAgICA0MTAwOCwgMCwgNjMwNywgMTk5NDksIDAsIDc1NDQsIDAsIDQzNTI1LCAwLCAwLCAxMDE1MiwgNjQ0MjIsIDY1MDkxLCAKLSAgICAxMTkxMTMsIDc2MDIsIDY0NzI5LCAwLCA0MzUyMSwgMCwgNDIzMDIsIDAsIDQzNTIzLCA0MTQ0NywgNTU1OSwgMCwgODcwNCwgCi0gICAgMjM5NywgNTU1NiwgMCwgMCwgMCwgOTAxMSwgOTYzMCwgMCwgMCwgMCwgNTUwNiwgMCwgMTkxMSwgNjY2NTIsIDAsIDEyNTk4LCAKLSAgICA4ODQ1LCA2NjY5OCwgMCwgMTA3OTIsIDg4ODksIDAsIDY5NTEsIDAsIDY0NzUxLCAwLCA2NjYyMiwgMCwgMCwgNzQzNjQsIDAsIAotICAgIDAsIDAsIDc0MzY1LCA3NTUyLCAwLCAwLCA2NTM4NCwgNzIyMywgNDU1OSwgMCwgMTk1NiwgNDMxMzgsIDcwMjQsIDY1NzI4LCAKLSAgICA2NDUwMSwgMTIxMCwgMCwgNjUxNzUsIDEwMTg0LCA0MzE0MCwgNjU3MjcsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMCwgCi0gICAgMCwgMCwgMCwgNDM1NywgMCwgMCwgMCwgNzQyMzMsIDExOTg0NiwgMTE5ODUyLCA0Mjg2MCwgMTE5ODM4LCAxMDk0MSwgCi0gICAgNjU3MjEsIDY5NjIsIDAsIDAsIDAsIDAsIDExMDE0LCAwLCA4OTQyLCAxMjAwMCwgMCwgMCwgMCwgMTE5NzQsIDAsIDQyNzcyLCAKLSAgICAwLCAxMTY1MCwgNTAxMywgMCwgMCwgNjYyMTAsIDExODkxNCwgNjYxMywgMCwgMCwgMCwgMCwgMCwgNjQ3MTQsIDAsIDAsIDAsIAotICAgIDEyMTIwLCAwLCAwLCAxMTAyNCwgNzQ4MTEsIDAsIDEwNTYzLCAwLCAwLCA0MzUyMiwgMjQ2MiwgMCwgMTgzNywgMCwgCi0gICAgNjM5NzIsIDY5NTcsIDAsIDEyMDU1OSwgNDk1MiwgNjU3MTgsIDY1ODI3LCA1NTA0LCA2NTcyMCwgNjU3MTQsIDY1NzE1LCAKLSAgICA2NTcxNiwgMCwgMTI3MDA1LCAxMjcxMTksIDMxMDksIDYzOTc1LCA3NDAyOCwgMCwgODEwNywgMTE5MjM0LCAxMTI3LCA0NTUsIAotICAgIDAsIDAsIDAsIDM0ODMsIDEyNzEyMiwgMTk4OSwgMCwgMCwgOTEwNCwgMzUwMywgNjUzNzUsIDAsIDAsIDQyNjMzLCAxODY0LCAKLSAgICAwLCA3NDMwNiwgNDE0NDYsIDI1NDAsIDc3MzYsIDAsIDc0MDY0LCAwLCAxMDUyMSwgMCwgNDIxNzMsIDk3MDUsIDc0MTI0LCAKLSAgICA4NjA0LCA2OTU1LCAxMDkxNiwgMCwgNjE0OSwgMzg4NywgMTk5NTYsIDE0MTEsIDI4MjQsIDAsIDEwMTA2LCAwLCAxNDAzLCAKLSAgICAwLCAxMzQ3LCA5NjMxLCA3NDQ0NCwgMCwgMCwgMCwgMCwgODY0MCwgMCwgMjU4LCAxNjU0LCAwLCAwLCAwLCA0MzMxNCwgMCwgCi0gICAgMCwgNDA0MiwgMTE0NzgsIDI4NzMsIDYzOTc3LCAxMTUyMiwgNDE2NjgsIDg1NDksIDEwODYxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3NDU4NSwgNDEzOTEsIDAsIDkxNzkwMywgMzc2LCA2OTg3LCA5MjIxLCAwLCAwLCA4ODIzLCAwLCAxMjk0MywgNjUxODUsIAotICAgIDQxODY5LCAxMjYxOSwgMCwgMTAxNTQsIDAsIDc0NDM5LCAyMDM5LCAwLCA3NDQ2LCAxNjg0LCA2Mzk3OSwgMTA5NzQsIDQ1OCwgCi0gICAgMTIwNjIwLCAwLCAwLCAwLCAxMTkxNiwgNjUwMTYsIDAsIDAsIDQyMTE1LCAwLCAxMjI4OCwgMCwgMCwgMTQ5MywgNDIxMTEsIAotICAgIDc1NTMsIDQwOTcsIDAsIDEzMDgwLCAwLCA2NTgwOCwgNjYxMCwgNjAzMCwgODA1OSwgNzUwOCwgNDE2MzYsIDAsIDAsIDAsIAotICAgIDg3OTQsIDQxMjc4LCA0MTYyOSwgMTIxNTQsIDAsIDQxMjc3LCA2NDY1OCwgMCwgNjQzODAsIDY2MjUsIDAsIDE5OTA0LCAwLCAKLSAgICAwLCAwLCA2NTM3MSwgNzA3OCwgMCwgODMzLCAwLCA3NDU5MiwgMCwgMTA5NzksIDQxOTUzLCAwLCA0MTQzNCwgNjA2MiwgMCwgCi0gICAgMCwgMTk5MTYsIDY5MTMsIDkzMywgMTM0MSwgOTg0MiwgMCwgNjU3NDQsIDAsIDAsIDAsIDAsIDQxNjE1LCAxMDEwNSwgCi0gICAgNjU4MTAsIDAsIDQxNjMyLCA3NDkzLCAwLCAwLCA0MTYyMiwgMCwgMCwgMTE5NTU2LCA3NDU4NCwgNzYzMiwgOTcxNiwgCi0gICAgMTk5NTQsIDk4MDUsIDU5OTAsIDkwMCwgMCwgNjM5NTcsIDAsIDAsIDM2MTIsIDAsIDY0Mzc2LCAwLCA1Mzg5LCAwLCAwLCAKLSAgICA2NTkzOCwgMjgzOSwgOTYyMSwgNTgyLCAwLCA3NDM2OCwgMzc0OSwgNjk0OSwgNzU2OSwgNzQwNjEsIDAsIDAsIDY5NTYsIAotICAgIDQ0MDMsIDE5OTYyLCA2NTU1OSwgMzI5OSwgMCwgMCwgMTE5MTI3LCA5MDAyLCAwLCA3NDM3MiwgNzQyMzYsIDg0NzgsIAotICAgIDc1OTgsIDU0NiwgNDI0NjksIDY1NTY5LCAxOTE4LCA5NTQyLCA0NzIsIDc3MTYsIDEwMzE5LCAxMDM4MywgNjk5NiwgMCwgCi0gICAgNjM5NTIsIDg0MjUsIDM2MDIsIDgzMjgsIDExNzY0LCAxMTg4OTQsIDAsIDAsIDQxMTgzLCAxMjkwNywgMTAyNzEsIDEwMjg3LCAKLSAgICA2ODQsIDc0MTg1LCAwLCAyODU0LCAxMTk1ODYsIDQ1OTIsIDY1NzU1LCAwLCAwLCAxMTk2MywgNjU3NTMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDk4ODEsIDAsIDY1NzU3LCAzNDE1LCAwLCAwLCA4NjQ4LCAwLCAxMTg4ODYsIDQzMDQ3LCAwLCAxMzE4MCwgMCwgNDE4LCAKLSAgICAwLCAwLCAxMDI5NSwgMTAzMjcsIDEwMzkxLCA0MTc1MiwgNzQzMzksIDg2NDEsIDQxNDQ5LCAwLCAwLCAwLCAxMDkxMSwgCi0gICAgNjk0MiwgMCwgMTAyNCwgNDI4NDksIDQxNzUxLCAwLCA4OTQxLCAwLCA0NTU0LCAwLCA5MDIzLCAxMTY4NSwgMCwgMCwgMCwgCi0gICAgMCwgMTE0MzcsIDAsIDAsIDEyMDcwMCwgNjM5NjcsIDAsIDQxMjA2LCAxMjA3MjQsIDkwNDksIDQxMTg1LCA0MzE2NiwgMCwgCi0gICAgMTE2ODAsIDAsIDExNjg2LCAwLCA2NTIyNCwgNDU2NSwgNDY1NSwgMTE5NTUzLCAwLCAwLCA2NDUyMywgMTAzNDMsIDEwNDA3LCAKLSAgICAwLCA2NjY3MSwgMTE0NjYsIDAsIDAsIDQyODkwLCAwLCAxMjA1MCwgMTk0NzUwLCAyODYwLCAwLCAwLCAwLCA0Mjc5MiwgCi0gICAgNTc0MywgMTA0MjQsIDEyMDY1LCA0Mjg3MiwgMCwgMCwgMCwgODg3NSwgMCwgMCwgOTE3OTkxLCA3NTMxLCAxMjg0NywgCi0gICAgMjQxMywgMCwgMCwgOTYyLCAwLCAxMjg1NSwgNDExOTYsIDQyNTY0LCAwLCAxNTgyLCAwLCA1NTA4LCAwLCAwLCAwLCAKLSAgICAxMDgwMSwgMCwgMTE4Nzk4LCAwLCA3MTczLCA0OTYsIDEwNDM5LCA0MzEzLCA2NDYwNywgMTE5NTU3LCA3ODYwLCAwLCA5MDYsIAotICAgIDQyNzkzLCAyODQyLCA2NDA1LCA2NDcyMiwgMTMxMzIsIDc5OCwgNjQ2OTQsIDEyODAxLCA4NDA2LCAxMTUzLCAwLCA2NDc4OCwgCi0gICAgMCwgODA1NCwgOTE3NCwgMTk0NzQ5LCA5MTc5NzYsIDAsIDAsIDQxNjExLCA0NjQyLCA2NjU3NCwgMTE1NTYsIDAsIDAsIDAsIAotICAgIDQyMDg5LCAwLCA5MDA4LCAwLCAwLCAxOTUwOTYsIDQyMDc5LCA5MTc5ODEsIDkxNzk5NiwgNDI1MTMsIDAsIDQyODQyLCAKLSAgICA3Mzk4NSwgMCwgMTE4OTc0LCAxMjcwMDMsIDAsIDAsIDAsIDAsIDExMzM1LCA2NDA2OSwgNDIwOTMsIDM5MjAsIDAsIDAsIDAsIAotICAgIDAsIDQ1ODAsIDQxOTY3LCAwLCA2NDM4NCwgMCwgMTE5MTU4LCAzMDIxLCA0MjAwNCwgMCwgMCwgNDIzMTcsIDQxOTk4LCAwLCAKLSAgICA2OTQ2LCAwLCAwLCAwLCAwLCA2NTIwNCwgMCwgNjgxMTMsIDY1MTk2LCA5ODgwLCA0MjAxMCwgMCwgNjQ1ODksIDEwMTExLCAKLSAgICA2NDg3NSwgMCwgMCwgMCwgMTEzNjAsIDAsIDAsIDAsIDAsIDQyMTQ5LCAwLCAwLCAwLCA2NDk0MSwgMCwgMCwgMCwgMCwgCi0gICAgNjU2NzEsIDQxMTAsIDY2MDA1LCA2OTU5LCAxMDkyOSwgMTE5MTEwLCAwLCA2NjcwMywgMCwgODYxNywgNDE5ODIsIDYwMjUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDk1OTcsIDQyMDk5LCA0MzE3MiwgMCwgMTAxMTcsIDAsIDAsIDQxNjQyLCAwLCAwLCAwLCA4MzAxLCAKLSAgICAwLCAwLCAxODcsIDAsIDY1NjY5LCAwLCA0OTYzLCAwLCAwLCAwLCA4OTY0LCA2NTY3NiwgNjU3ODUsIDAsIDQxOTQ4LCAwLCAKLSAgICAwLCAwLCA0MTk0MiwgNjU0NDksIDMxNjAsIDEwMDgxLCAxMzIyNiwgNDIxMjEsIDQyNDc1LCAwLCAwLCA0MTc2NiwgMCwgCi0gICAgNjU4ODIsIDAsIDQxNzYwLCAxMTg5LCA5MDUsIDQ4MCwgMTA5ODUsIDQxNzMzLCA2Nzg1OSwgOTYyOSwgNDI0MzYsIDE3NDUsIAotICAgIDAsIDczODM1LCA3ODg4LCAwLCAwLCAwLCAwLCA0MTUwNywgODgwNiwgNzAyMywgMCwgNzQyNzksIDY0NTQwLCAwLCA3ODY3LCAKLSAgICAwLCA2MjM2LCAwLCAwLCAxMDUwNSwgMCwgMTI4NTEsIDExODk0OCwgMzQ4LCA1NDc0LCAwLCAzMTAzLCAwLCA0MTc1MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDE3MzksIDAsIDQyNTE1LCAxMDkzMSwgNDE3NTYsIDQzMzQ3LCA0MjU2MCwgNTM5MSwgNDE3NDYsIAotICAgIDExOTE0NywgMCwgNDEyNTksIDU1NjEsIDc0MzYwLCAyNjkxLCAwLCA2NTU1MywgNzkzMywgNTU2MiwgMCwgMCwgNDEyNjIsIAotICAgIDAsIDY0NDIxLCA3NDg0NiwgNDEyNTEsIDAsIDAsIDM5NzksIDAsIDAsIDc0ODEzLCAwLCAwLCAwLCAwLCAxMTg4NDcsIAotICAgIDQxMjY2LCAwLCAwLCA5MTc2MzAsIDEwNTg1LCA2NTc0MSwgNDE3MzcsIDk1NzQsIDI2NjYsIDAsIDQxNzM4LCA4MzEsIDQxOSwgCi0gICAgMTMxMjYsIDEwNzE2LCAwLCA0MjgyMiwgMCwgNjQzNCwgMCwgNjkzOSwgNzc2NiwgNjQzMiwgMCwgMCwgOTE2LCA3NjksIAotICAgIDQxNzQyLCAxMTk2OCwgMTIwNTU3LCA2NDMzLCA1NTYzLCA1NDcsIDE5NDMsIDY0MzksIDU1NjAsIDQ5OTQsIDQ4NywgMCwgCi0gICAgNDQ5NywgMzc1NCwgMCwgMTIwNDI0LCA5MDM5LCAwLCA0MTc3NiwgMCwgODcxNiwgMTU5NSwgMTE5MjA2LCAwLCAwLCAKLSAgICA3NDI2MCwgMCwgNDMyNjcsIDAsIDAsIDAsIDEyMTg1LCAwLCAwLCAwLCAwLCAwLCA0Mjg1NiwgODYzNCwgMCwgMCwgNDIwOSwgCi0gICAgMTIwNzAyLCAwLCA2NTg3OSwgNDE1MzgsIDY1NjEyLCAwLCA2NjksIDU2NzksIDAsIDAsIDExODk2MSwgMCwgMCwgNTY3OCwgCi0gICAgMTE4MjEsIDAsIDAsIDQ2MCwgMCwgMCwgMCwgMCwgMTIwNzQ3LCAwLCAwLCAwLCAxMTkwMjIsIDAsIDAsIDAsIDc3ODIsIAotICAgIDkwNDQsIDQ5NzQsIDExNzYwLCA5MTc1NDcsIDc1NzcsIDY1NzExLCA0MTkxMiwgMTIxNiwgMCwgMCwgNTc5MiwgMCwgMCwgMCwgCi0gICAgMCwgNDIyNjQsIDEyMjQ0LCAwLCA1NjgzLCAwLCAwLCAwLCAxNTQ5LCAwLCAwLCAxMjAzOTgsIDU2ODIsIDYyMDYsIDg2NzAsIAotICAgIDc0NTIwLCA1NjgwLCA5MTc1NjgsIDEwMDAxLCAwLCAwLCAxNDQ5LCAxMDI0MSwgMCwgMCwgMCwgMTA1NTIsIDY0MzQyLCAKLSAgICA0MTkyMiwgMCwgODU4NCwgMCwgNTU2NywgMjcxNywgMCwgMCwgNTU2NCwgNDI4ODYsIDQxOTA4LCA0Mjg4MiwgNTU2NSwgMCwgCi0gICAgMCwgMCwgNjU3MDgsIDY1NzA5LCA1NTY2LCAwLCA2NTcwNCwgNjU3MDUsIDExOTA0LCA0Mjg3NSwgMCwgNDI1MzksIDU5NDIsIAotICAgIDg0NjgsIDAsIDEwMzYxLCAxMDQyNSwgNjU2OTcsIDY1Njk4LCA2NTY5OSwgMCwgNjY1OTgsIDAsIDY0NjY0LCAxMDY0NywgMCwgCi0gICAgMCwgMCwgNDU3LCAwLCA2NTcwMSwgMTkzNCwgNDMwMDYsIDAsIDg4MDIsIDAsIDY1MTMwLCAwLCAwLCA2MDg3LCAwLCAwLCAKLSAgICA0MTc1NywgMCwgODA0MywgODk1MCwgNjU2OTQsIDY0NDg1LCA0MzUzNCwgMTA0NTcsIDAsIDExOTYxLCAxMTkwMDYsIDAsIDAsIAotICAgIDAsIDAsIDAsIDY1NTE1LCA5NDk5LCAxMDAzNSwgMTMwNjksIDAsIDAsIDk4ODksIDY4MTg0LCA0MjgwNiwgMCwgNzI1NiwgMCwgCi0gICAgMCwgMTY2NywgNDIxNjEsIDAsIDQyNDI4LCAwLCA2OTM0LCAwLCAxMDgwMiwgNjQ4NjEsIDY1NTYsIDAsIDAsIDgxMDEsIAotICAgIDM2MTAsIDAsIDQxNzQ4LCA0OTk1LCA5NTUsIDY1OTA3LCAxMTkyMDgsIDUzNTAsIDY0MzM5LCAwLCA2NDU0OSwgMTA4NzUsIAotICAgIDkxNzk1NiwgNTQ3NywgNjU2OTIsIDAsIDAsIDAsIDEyODk2LCAxMDQ1NiwgOTE3OTU0LCAwLCAzODc0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA2NTYwMywgMCwgNjU2ODcsIDAsIDQxMDM4LCA3NDAwOSwgMTE5NTcwLCA2Nzg1NywgODUzNiwgMCwgMCwgMCwgCi0gICAgNzQ0MzIsIDcyNCwgMCwgMTQ1NSwgMCwgNzE4MywgNjQ1ODMsIDExOTIzMywgMCwgNDE3NSwgOTE3OTYyLCAwLCAwLCA5MzksIAotICAgIDAsIDQzNTIwLCAwLCA3NDU2OSwgOTE3OTU4LCAwLCA5MTc5NTksIDkxNzk0NSwgMTk0NzA0LCAxMDc4OCwgNjA4OCwgMCwgMCwgCi0gICAgMTkwLCAwLCAxMjU5MywgMCwgODE4OCwgNjQ0MDgsIDAsIDQ0MTcsIDAsIDAsIDQxNzQ0LCAwLCA3ODI3LCAwLCA2OTY1LCAwLCAKLSAgICAwLCAxMzIwMSwgMCwgMCwgMCwgNzQzODIsIDczNzgxLCA3OTE4LCA3Mzk4OCwgMCwgMCwgOTE3ODg0LCAxNzI4LCAwLCAKLSAgICAxMjA3MTAsIDE3OCwgMTI5NzIsIDAsIDAsIDAsIDEyMDY3MSwgMCwgMCwgMCwgMTIwNDA1LCA2NTY5MCwgMCwgMCwgCi0gICAgMTE5MDU0LCAwLCA5MjUyLCA5MTc4ODksIDQ2NTIsIDc0MjU5LCAwLCAwLCAwLCAxMzA2NSwgOTkyMywgMTA4MDYsIDAsIAotICAgIDExNzYzLCAwLCAxMjA2ODgsIDAsIDExOTA5OCwgMCwgNjk5MywgMCwgMCwgODMzMywgMCwgMCwgMCwgMCwgNzQ0NjQsIDAsIAotICAgIDAsIDc0MDgwLCAwLCAwLCAxMTkxMCwgMCwgODI3OCwgODk2MywgNDAzNCwgMCwgMCwgNjUzNDQsIDEyMDUxNywgNDE3NDcsIAotICAgIDAsIDAsIDg2NzcsIDAsIDEyNzA3LCA5MzUwLCA2NjAzNywgMCwgODgzNiwgMTIzMTUsIDEyNzQ3LCA4MzAwLCAwLCAwLCAKLSAgICA3NDkxLCA4ODU2LCAwLCAwLCA0MzE1MCwgMCwgMTIwNDA0LCA2NTM4OSwgMTIwNDAyLCAxMjA0MDMsIDEwODEzLCAyNTkyLCAKLSAgICAxMjg1MywgNDMyNjksIDcyNjMsIDEyMDI0NCwgNjUzNiwgMTIwMjM4LCAxMjAyMzksIDY1NTE2LCAxMjMyMSwgMTIwMzkxLCAKLSAgICAxMjAzODgsIDEyMDM4OSwgMTAwMDcsIDEyMDI0NiwgOTU4OCwgMTIwMjQ4LCAxNTk2LCAxMjAzODMsIDQxOTk0LCA2NTgwMSwgCi0gICAgMCwgMCwgNjY1NzIsIDAsIDAsIDEwNjEzLCA4MDkyLCAxMjgwNSwgNDE5MjgsIDQwOTgxLCAwLCAwLCA1MDA2LCA2NDMyOCwgCi0gICAgMCwgNjUyOTgsIDAsIDg4MjUsIDc0NTU1LCA2NTk0MCwgMCwgMCwgNjEwNywgMCwgMTE5MTc3LCAwLCAwLCAwLCAxMTc4MywgCi0gICAgMzM1LCAxMjAyMjcsIDY0Njg5LCA0MzgsIDQ1MTAsIDU3NjUsIDg3MjEsIDEyMDIzMywgMTE5MjI3LCA2MDkyLCAxMjg0MCwgCi0gICAgNDMxMTIsIDg4NzYsIDEyMDIzMSwgODA5NiwgMTAyODQsIDAsIDAsIDAsIDEwMzgwLCA4NzMzLCAwLCAwLCA0MTYwMiwgMCwgCi0gICAgMCwgNzQ4MzEsIDkxNzkwMSwgMCwgNzM3NDcsIDY1Mzk5LCAwLCA2NDU5MSwgNDI0MDUsIDAsIDkxNzg5NywgODQzLCAKLSAgICAxMTU0MSwgMCwgMCwgMCwgNDE5MzUsIDc0NDk2LCA0MTkwMiwgMCwgMCwgMjE1LCA0MTI1OCwgMCwgNDMxNTksIDE5NTMsIAotICAgIDk1NzksIDQxOTM4LCAxMjU2LCAzOTEwLCA5NDA3LCA2MjQyLCAwLCAwLCA0MTI1NywgNDE5MDAsIDg2NzUsIDEwNzAwLCAKLSAgICA4ODA1LCAxNzQyLCAwLCA5MzMzLCA4MjAyLCAwLCAwLCAwLCAwLCAwLCA3Mzg4MiwgNDk5LCAwLCAwLCAwLCAxMjY5ODMsIDAsIAotICAgIDE3MTIsIDU5MzIsIDAsIDQxNzYyLCAwLCAwLCAxMTk2NywgMTc3NSwgMCwgMCwgMCwgMCwgMCwgOTQ1OCwgMCwgNjQ3MCwgCi0gICAgOTE4MCwgMTIwMzgwLCA0MzE3NiwgMCwgMCwgNDI3ODIsIDAsIDAsIDAsIDkxNzkxMiwgNzQ3NzcsIDEyMDY2OSwgOTQxNCwgCi0gICAgMTIwMzgyLCA3Mzc4MiwgNzM5NjksIDU2NSwgNDI0ODQsIDU3OTQsIDIwMSwgMjY2MiwgNDIyOTIsIDAsIDgyNTQsIDAsIAotICAgIDEwOTc1LCAwLCAxMjA2MjUsIDc0NzYzLCAxMDIyLCA0MTA4LCAzODgwLCA3NDI0NywgMCwgMCwgMCwgOTE3OTgwLCA3NTA3LCAKLSAgICAwLCA0MzE0OSwgMCwgNjUwMzEsIDc5NjEsIDE2MzYsIDAsIDY1MDI5LCA2NTAyNCwgMCwgMTI0NzMsIDY1MzQsIDAsIDk5LCAKLSAgICA5OCwgOTcsIDEyMDU3MSwgNjc1ODQsIDQwNDksIDAsIDAsIDcwOTAsIDAsIDc4OTIsIDkxNzk2OSwgMTA3NzcsIDAsIAotICAgIDY1MzEwLCA2NTU2MiwgNjY1OTksIDAsIDAsIDgwMzksIDMzNjMsIDY2NTk0LCAwLCAwLCAwLCAxMjU5NiwgNjY1OTUsIAotICAgIDQyMjU4LCA0MjU3MCwgNTU5MywgMTE5MTQ4LCAxMjA3MTEsIDAsIDEwMTAwLCA2MDYxLCA2NDg1NCwgMTE5LCAxMTgsIDExNywgCi0gICAgMTE2LCAxMjk5OCwgMTIyLCAxMjEsIDEyMCwgMTExLCAxMTAsIDEwOSwgMTA4LCAxMTUsIDExNCwgMTEzLCAxMTIsIDEwMywgCi0gICAgMTAyLCAxMDEsIDEwMCwgMTA3LCAxMDYsIDEwNSwgMTA0LCA2NDM2LCA3Mzk3NCwgNTM0LCA0MTIxMiwgMCwgMTUzNiwgCi0gICAgNjQwOTMsIDczOTcwLCAwLCAwLCAwLCA2MDIwLCAxMjcxNiwgMTI3MTEyLCAxMjc0NCwgNDc1LCAxMjAzOTQsIDEzMjY2LCAwLCAKLSAgICAxMjcxMTEsIDAsIDczOTI2LCAwLCAxMDY0NSwgMTIxMiwgNjU0MywgMCwgODEzNCwgMCwgMjkxMywgNzM4NzAsIDAsIDE4NjYsIAotICAgIDAsIDE5NTA5NSwgMCwgODkyMywgMTY0NSwgMTIwNTksIDY2NTg1LCAwLCAzMTk2LCAwLCAwLCA1OTM1LCAxMjUwLCAwLCAKLSAgICA4MTc0LCA5Nzg3LCA5ODU2LCA5ODU5LCA3OTE2LCA5ODYxLCA5ODYwLCA1MjU4LCAxODgyLCAxODkyLCAwLCAxMDg4MiwgCi0gICAgNDA1LCAxMTQ1NCwgNzM5MTEsIDAsIDAsIDQxMTY5LCA4OTM5LCA0MTI0NSwgMCwgNDExNzAsIDE0NTQsIDExMzY5LCA2NDc3LCAKLSAgICAxMjE1NywgMCwgMCwgMCwgNDExNzIsIDc4NTUsIDAsIDAsIDEwNDgwLCAwLCAwLCAwLCA4MjY0LCAxMjYxMCwgMCwgNjQ1LCAKLSAgICAwLCA3NjA5LCA0MDk3MywgMCwgMCwgMCwgNTgyNCwgOTg0LCAwLCAxMDY4OCwgNTg1MSwgMCwgNzcyOSwgNzM5ODIsIAotICAgIDEyMDUxOCwgMCwgMTk1MDg2LCA2NjcyMiwgMCwgMCwgMCwgMCwgNDUzOCwgMTIwNDA2LCA0MzE0MSwgMCwgMCwgNzQyMTQsIAotICAgIDAsIDAsIDAsIDExODkwMiwgNDMwMDUsIDAsIDk1NTIsIDAsIDAsIDAsIDEyOTk3LCAwLCAwLCAwLCAwLCAyMzgxLCAxMjg4MywgCi0gICAgMTA5OTQsIDEwNTI5LCA0MTkwNiwgMCwgMCwgMCwgMTI0MjUsIDEwNjYxLCAxMDg1NiwgOTYxNCwgMjQyOCwgNDE0NzgsIAotICAgIDg1ODIsIDEwMDY0LCA3MzkzMCwgMCwgMCwgMCwgNjQ4OTYsIDExOTE2MiwgMTk1MiwgMCwgODQ1NSwgMTAwODIsIDExNTc1LCAKLSAgICAwLCAxMTk1NjYsIDAsIDEyODA4LCAxMjE4MywgNjE0NSwgMCwgNjQ5MjksIDAsIDAsIDAsIDQzMTg2LCA0MjUwOSwgMCwgCi0gICAgMzkyMiwgOTE4NywgMCwgMCwgMCwgMTE5MDU3LCAxMTc1MiwgMzM1MywgOTM1OCwgMCwgMCwgNjY2ODAsIDEyMDA5MCwgCi0gICAgMTE3NDcsIDc5MzEsIDg1NTgsIDk3OTUsIDAsIDAsIDAsIDEyMDA4MiwgMTIwMDgxLCAxMjAwODQsIDQxMDI3LCAxMjAwODYsIAotICAgIDAsIDEyMDA4OCwgMTIwMDg3LCA3MDE5LCAxMjAwNzMsIDAsIDExNzUxLCAxMjAwNzgsIDEyMDA3NywgNjQ2NTcsIDg2NTcsIAotICAgIDEyMDA0OCwgODU5NCwgMTIwMDY4LCAwLCAwLCAxMjAwNjksIDEyMDA3MiwgMTIwMDcxLCAwLCAwLCA0MzE1NCwgNDEwMjksIAotICAgIDAsIDExMzMyLCA2NTM4MCwgNzcyOCwgMCwgMTEyOTQsIDAsIDY2NjY1LCA3ODUxLCAwLCAwLCA4Njk5LCAwLCA0MjUyNCwgMCwgCi0gICAgOTA4NSwgMCwgNzUwNCwgOTMyNywgNjE2MCwgMCwgMCwgMCwgODA4OCwgMCwgNzQwMTIsIDAsIDAsIDQ0MzksIDY5MjYsIDAsIAotICAgIDEyOTI0LCAwLCA0MjM2OSwgMCwgNjU0OTEsIDY1MTQ1LCA5MDQxLCA0MzU1OSwgNjQ1NzcsIDEwODI2LCAwLCAxMTI5NiwgMCwgCi0gICAgMCwgMCwgNjU4MjUsIDk1NzcsIDEyMDQ5NCwgMCwgNjQ2NzAsIDAsIDAsIDQyMTU5LCAxMTI5NSwgMCwgMCwgMTIwNzc5LCAwLCAKLSAgICAwLCAxMDkwMiwgMCwgMCwgMCwgMCwgMTA0NzIsIDI5OTUsIDAsIDAsIDAsIDIzNzEsIDAsIDEyMDgwOCwgMjU5LCAxMDA5LCAKLSAgICAwLCAyNDAyLCAyMzMzLCA2NDQwLCAwLCAwLCA2NTEyNSwgNDEyNDQsIDAsIDEzMjcxLCA5MTAzLCA0MTE4MCwgMCwgMCwgMCwgCi0gICAgMCwgMTAyMTksIDAsIDAsIDAsIDAsIDQzMTc4LCAxMjcwNzAsIDQxMjYxLCAxMTkzNjIsIDkxNzk3NCwgODYxMywgMCwgCi0gICAgMTE4OTg5LCA5MTc5NzgsIDkxNzk3OSwgNDE0OTIsIDEyMDA1LCA5MTc5ODIsIDAsIDE4OTAsIDEyMDA1NiwgMCwgMCwgMCwgCi0gICAgNzI5MywgNzk5MSwgMCwgMTA1NzgsIDAsIDExODg0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwMDU0LCAxMTg4MTUsIDY2MzUsIAotICAgIDAsIDYxNjQsIDY1MTcwLCAwLCAwLCAwLCAxMTY2NCwgMCwgMCwgMCwgMCwgMTE4ODEyLCAwLCAwLCAwLCA5MTc1LCAxMTkyNSwgCi0gICAgMCwgOTA4OCwgMCwgNjQ1NDUsIDEzOTYsIDAsIDc1NDYsIDM4NDcsIDAsIDAsIDQ5ODUsIDEzMjg4LCA2NzIsIDgwOTgsIAotICAgIDQzMTk2LCAxOTQ3NDYsIDAsIDAsIDAsIDc0MDQzLCA2NTA3MiwgMTU3NywgMTE3NzIsIDAsIDU5MjgsIDQ1MjUsIDEwNjU4LCAKLSAgICA2NTkxMSwgMTI2NiwgMTAxODAsIDAsIDAsIDEyNjIyLCAwLCAwLCAwLCAxOTQ3MTQsIDAsIDEzMzEwLCA3NzMsIDE5OTMzLCAKLSAgICAxNTM5LCAwLCAwLCA2NjM3NCwgMCwgMCwgMCwgMCwgMzA1MSwgNTg2MiwgNzgyMywgMCwgMCwgMTIwNDExLCAzMjUwLCAKLSAgICA3NDAyMCwgMCwgNjY2NDksIDk1MTAsIDY2MjM3LCAwLCAwLCA0MTA2NiwgNjQ2NzMsIDkxNzk2MywgOTE3OTY0LCAwLCAKLSAgICAzNTA1LCA4NzA3LCA5MTc5NjgsIDkxNzk2NSwgOTE3OTY2LCA5MTc5NzEsIDkxNzk3MiwgMzQ3MSwgOTE3OTcwLCA1NDc5LCAKLSAgICA4ODIsIDY2ODYsIDExOTU4NCwgMTE2MTMsIDEyMDc3MiwgNDI3NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjUsIDAsIAotICAgIDQ0MzMsIDQxMTU2LCA3Mzc0NSwgNDMxNzMsIDE0NDMsIDQzODEsIDAsIDAsIDEwOTI2LCAxMTc1NiwgMTE3NTcsIDY0ODc5LCAKKyAgICA5NDY3LCA1NTU4LCA4ODc4LCAwLCAxOTUwMzYsIDc0NTEsIDY3MDYsIDEwMTQ2LCAwLCA5MDg2LCA2NDU2NiwgMCwgNjQ1ODQsIAorICAgIDc0MzcsIDc0NTQsIDEyNTk0LCAwLCA2ODM2MiwgNDU0NiwgNzczMSwgMCwgMTE5OTA5LCA3NDI0MywgMCwgMzgwNSwgMCwgCisgICAgMTk0NTY1LCA0NDAwMSwgNDEwMDgsIDAsIDYzMDcsIDE5OTQ5LCAwLCA3NTQ0LCAwLCA0MzQ2OSwgMCwgMCwgMTAxNTIsIAorICAgIDY0NDIyLCA2NTA5MSwgMTE5MTEzLCA3NjAyLCA2NDcyOSwgMCwgNDM1MjEsIDAsIDQyMzAyLCA0MzcxMSwgNDM1MjMsIAorICAgIDQxNDQ3LCA1NTU5LCAwLCA4NzA0LCAyMzk3LCA1NTU2LCAwLCAwLCAwLCA5MDExLCA5NjMwLCAwLCAwLCAwLCA1NTA2LCAwLCAKKyAgICAxOTExLCA2NjY1MiwgMCwgOTk2MSwgODg0NSwgNjY2OTgsIDAsIDEwNzkyLCA4ODg5LCAwLCAyMDk4LCAwLCA2NDc1MSwgMCwgCisgICAgNjY2MjIsIDAsIDAsIDc0MzY0LCAwLCAwLCAwLCA3NDM2NSwgNzU1MiwgMCwgMCwgNjUzODQsIDcyMjMsIDQ1NTksIDAsIAorICAgIDE5NTYsIDQzMTM4LCA3MDI0LCA2NTcyOCwgNjQ1MDEsIDEyMTAsIDE5NTA3NywgNjUxNzUsIDEwMTg0LCA0MzE0MCwgCisgICAgNDM2NTQsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMTE5MTI0LCAwLCAwLCAwLCA0MzU3LCAwLCAwLCAwLCA3NDIzMywgCisgICAgOTk2NywgMTE5ODUyLCA0Mjg2MCwgMTE5ODM4LCAxMDk0MSwgNjU3MjEsIDY5NjIsIDAsIDAsIDExOTMyNCwgMCwgMTEwMTQsIAorICAgIDAsIDg5NDIsIDEyMDAwLCA2OTIyNCwgMCwgMCwgMTE5NzQsIDAsIDQyNzcyLCAxMjc1MTgsIDExNjUwLCA1MDEzLCAwLCAwLCAKKyAgICA2NjIxMCwgMTE4OTE0LCA2NjEzLCAwLCAwLCAwLCAwLCAwLCA2NDcxNCwgMCwgMCwgMCwgMTIxMjAsIDQzNDc2LCAwLCAKKyAgICAxMTAyNCwgNzQ4MTEsIDAsIDEwNTYzLCAwLCAwLCA0MzUyMiwgMjQ2MiwgMCwgMTgzNywgMCwgNjM5NzIsIDY5NTcsIDAsIAorICAgIDEyMDU1OSwgNDk1MiwgNjU3MTgsIDY1ODI3LCA1NTA0LCA2NTcyMCwgNjU3MTQsIDY1NzE1LCA2NTcxNiwgMCwgMTI3MDA1LCAKKyAgICAxMjcxMTksIDMxMDksIDYzOTc1LCA3NDAyOCwgMCwgODEwNywgMTE5MjM0LCAxMTI3LCA0NTUsIDAsIDYzOTY4LCAwLCAKKyAgICAzNDgzLCAxMTk1OTMsIDE5ODksIDAsIDAsIDkxMDQsIDM1MDMsIDY1Mzc1LCAwLCA2Njk0LCA0MjYzMywgMTg2NCwgMCwgCisgICAgNzQzMDYsIDQxNDQ2LCAyNTQwLCA3NzM2LCAwLCA3NDA2NCwgMCwgMTA1MjEsIDAsIDQyMTczLCA5NzA1LCA3NDEyNCwgCisgICAgODYwNCwgNjk1NSwgMTA5MTYsIDQzNjg0LCA2MTQ5LCAzODg3LCAxOTk1NiwgMTQxMSwgMjgyNCwgMCwgMTAxMDYsIDAsIAorICAgIDE0MDMsIDAsIDEzNDcsIDk2MzEsIDc0NDQ0LCAwLCAwLCAwLCAwLCA4NjQwLCAwLCAyNTgsIDE2NTQsIDAsIDAsIDAsIAorICAgIDQzMzE0LCAwLCAwLCA0MDQyLCAxMTQ3OCwgMjg3MywgNjM5NzcsIDExNTIyLCA0MTY2OCwgODU0OSwgMTA4NjEsIDAsIAorICAgIDYzOTc2LCAwLCA2ODYyMywgMCwgNzQ1ODUsIDQxMzkxLCAwLCA5MTc5MDMsIDM3NiwgNjk4NywgOTIyMSwgMCwgMCwgODgyMywgCisgICAgMCwgMTI5NDMsIDY1MTg1LCA0MTg2OSwgMTI2MTksIDAsIDEwMTU0LCAwLCA3NDQzOSwgMjAzOSwgMCwgNzQ0NiwgMTY4NCwgCisgICAgNjM5NzksIDEwOTc0LCA0NTgsIDEyMDYyMCwgMCwgNjk3OTEsIDAsIDExOTE2LCA2NTAxNiwgMCwgNzgwNjcsIDQyMTE1LCAwLCAKKyAgICAxMjI4OCwgNzgwNTcsIDAsIDE0OTMsIDQyMTExLCA3NTUzLCA0MDk3LCAwLCAxMzA4MCwgMCwgNjU4MDgsIDY2MTAsIDYwMzAsIAorICAgIDgwNTksIDc1MDgsIDEzMTMxLCAwLCAwLCAwLCA4Nzk0LCA0MTI3OCwgNDE2MjksIDEyMTU0LCAwLCA0MTI3NywgNjQ2NTgsIAorICAgIDAsIDY0MzgwLCA2NjI1LCA3NDM1NCwgMTk5MDQsIDAsIDAsIDAsIDY1MzcxLCA3MDc4LCAwLCA4MzMsIDAsIDYzNjksIDAsIAorICAgIDEwOTc5LCA0MTk1MywgMCwgNDE0MzQsIDYwNjIsIDAsIDAsIDE5OTE2LCA2OTEzLCA5MzMsIDEzNDEsIDk4NDIsIDY3MjAsIAorICAgIDY1NzQ0LCAwLCAwLCAxOTUwNzYsIDAsIDc0MDUsIDEwMTA1LCA2NTgxMCwgMCwgNDE2MzIsIDc0OTMsIDAsIDAsIDQxNjIyLCAKKyAgICAwLCAwLCAxMTk1NTYsIDc0NTg0LCA3NjMyLCA5NzE2LCAxOTk1NCwgOTgwNSwgNTk5MCwgOTAwLCAwLCA2Mzk1NywgMCwgMCwgCisgICAgMzYxMiwgMCwgNjQzNzYsIDAsIDUzODksIDAsIDAsIDY1OTM4LCAyODM5LCA5NjIxLCA1ODIsIDAsIDc0MzY4LCAzNzQ5LCAKKyAgICA2OTQ5LCA3NTY5LCA3NDA2MSwgMCwgMCwgNjk1NiwgNDQwMywgMTk5NjIsIDY1NTU5LCAzMjk5LCAwLCAwLCAxMTkxMjcsIAorICAgIDkwMDIsIDAsIDc0MzcyLCA3NDIzNiwgODQ3OCwgNzU5OCwgNTQ2LCA0MjQ2OSwgNjU1NjksIDE5MTgsIDk1NDIsIDQ3MiwgCisgICAgNzcxNiwgMTAzMTksIDEwMzgzLCA2OTk2LCAwLCA2Mzk1MiwgODQyNSwgMzYwMiwgODMyOCwgMTE3NjQsIDExODg5NCwgMCwgCisgICAgNjk3OTYsIDQxMTgzLCAxMjkwNywgMTAyNzEsIDEwMjg3LCA2ODQsIDQzNTI1LCAwLCAyODU0LCAxMTk1ODYsIDQ1OTIsIAorICAgIDY1NzU1LCAwLCAwLCAxMTk2MywgNDM2MjAsIDAsIDc4ODg5LCAwLCAwLCAwLCA5ODgxLCA0MzExNSwgNjU3NTcsIDM0MTUsIAorICAgIDAsIDAsIDg2NDgsIDAsIDY3NDEsIDQzMDQ3LCAwLCAxMzE4MCwgMCwgNDE4LCAwLCAwLCAxMDI5NSwgMTAzMjcsIDEwMzkxLCAKKyAgICA0MTc1MiwgNzQzMzksIDg2NDEsIDQxNDQ5LCAwLCA3NDEwMCwgMCwgMTA5MTEsIDY5NDIsIDAsIDEwMjQsIDQyODQ5LCAKKyAgICA0MTc1MSwgNjk3NzYsIDg5NDEsIDAsIDQ1NTQsIDAsIDkwMjMsIDExNjg1LCAwLCA5OTI4LCA3ODYxNywgMCwgMTE0MzcsIAorICAgIDQzNzQxLCAwLCAxMjA3MDAsIDYzOTY3LCAwLCA0MTIwNiwgMTIwNzI0LCA5MDQ5LCA0MTE4NSwgNDMxNjYsIDAsIDExNjgwLCAKKyAgICAwLCAxMTY4NiwgMCwgNjUyMjQsIDQ1NjUsIDQ2NTUsIDExOTU1MywgMCwgMCwgNjQ1MjMsIDEwMzQzLCAxMDQwNywgMCwgCisgICAgNjY2NzEsIDExNDY2LCAwLCAwLCA0Mjg5MCwgMCwgMTIwNTAsIDY4MjAxLCAyODYwLCAwLCAwLCAwLCA0Mjc5MiwgNTc0MywgCisgICAgMTA0MjQsIDEyMDY1LCA0Mjg3MiwgMCwgMCwgMCwgODg3NSwgMCwgMCwgOTE3OTkxLCA3NTMxLCAxMjg0NywgMjQxMywgMCwgCisgICAgNzg2MzUsIDk2MiwgMCwgMTI4NTUsIDQxMTk2LCA0MjU2NCwgMCwgMTU4MiwgMCwgNTUwOCwgMCwgMCwgMCwgMTA4MDEsIDAsIAorICAgIDExODc5OCwgMCwgNzE3MywgNDk2LCAxMDQzOSwgNDMxMywgNjQ2MDcsIDExOTU1NywgNzg2MCwgMCwgOTA2LCA0Mjc5MywgCisgICAgMjg0MiwgNjQwNSwgNjQ3MjIsIDEzMTMyLCA3OTgsIDY0Njk0LCAxMjgwMSwgODQwNiwgMTE1MywgMCwgNjQ3ODgsIDAsIAorICAgIDgwNTQsIDkxNzQsIDE5NDc0OSwgOTE3OTc2LCA5OTY0LCAwLCA0MTYxMSwgNDY0MiwgNjY1NzQsIDExNTU2LCAwLCAwLCAKKyAgICA3ODg1NywgNDIwODksIDc4ODU1LCA5MDA4LCAwLCAwLCAxOTUwOTYsIDQyMDc5LCA5MTc5ODEsIDc3OTI0LCA0MjUxMywgMCwgCisgICAgNDI4NDIsIDczOTg1LCA2NTI4NSwgMTE4OTc0LCAxMjcwMDMsIDAsIDAsIDAsIDAsIDExMzM1LCA2NDA2OSwgNDIwOTMsIAorICAgIDM5MjAsIDAsIDAsIDAsIDAsIDQ1ODAsIDQxOTY3LCAwLCA2NDM4NCwgMCwgMTE5MTU4LCAzMDIxLCA0MjAwNCwgMCwgMCwgCisgICAgNDIzMTcsIDQxOTk4LCAwLCA2OTQ2LCAwLCAwLCAwLCAwLCA2NTIwNCwgMCwgNjgxMTMsIDQyNjkwLCA5ODgwLCA0MjAxMCwgCisgICAgNzQ4MjQsIDY0NTg5LCAxMDExMSwgNjQ4NzUsIDAsIDY4Mzk5LCA0Mzk5OCwgMTEzNjAsIDAsIDAsIDAsIDAsIDQyMTQ5LCAwLCAKKyAgICAwLCAwLCA2NDk0MSwgNzc5MTksIDAsIDAsIDAsIDU1MjQ3LCA0MTEwLCA2NjAwNSwgNjk1OSwgMTA5MjksIDExOTExMCwgMCwgCisgICAgNjY3MDMsIDc3OTIxLCA4NjE3LCA0MTk4MiwgNjAyNSwgNjkyNDIsIDAsIDAsIDAsIDAsIDk1OTcsIDQyMDk5LCA0MzE3MiwgCisgICAgMCwgMTAxMTcsIDAsIDAsIDQxNjM2LCAwLCAwLCAxMjA2ODEsIDgzMDEsIDAsIDAsIDE4NywgMCwgNjU2NjksIDAsIDQ5NjMsIAorICAgIDAsIDEyNzUxNywgMCwgODk2NCwgNjU2NzYsIDY1Nzg1LCAwLCA0MTk0OCwgMCwgMCwgMCwgNDE5NDIsIDY1NDQ5LCAzMTYwLCAKKyAgICAxMDA4MSwgMTMyMjYsIDQyMTIxLCA0MjQ3NSwgNDI2NjMsIDAsIDQxNzY2LCAwLCA2NTg4MiwgNzg4NDksIDQxNzYwLCAKKyAgICAxMTg5LCA5MDUsIDQ4MCwgMTA5ODUsIDQxNzMzLCA2Nzg1OSwgOTYyOSwgNjc0MiwgMTc0NSwgNDM2MjUsIDczODM1LCAKKyAgICA3ODg4LCAwLCAwLCAwLCA0MjY1NiwgNDE1MDcsIDg4MDYsIDcwMjMsIDAsIDc0Mjc5LCA5NDQ3LCA3ODY1MSwgNzg2NywgCisgICAgNjkyMTgsIDYyMzYsIDAsIDAsIDEwNTA1LCAwLCAxMjg1MSwgMTE4OTQ4LCAzNDgsIDU0NzQsIDAsIDMxMDMsIDAsIDQxNzUzLCAKKyAgICAwLCAwLCAwLCA3ODg0NCwgNzg4NDUsIDQxNzM5LCA3ODg0MywgNDI1MTUsIDEwOTMxLCA0MTc1NiwgNDMzNDcsIDQyNTYwLCAKKyAgICA1MzkxLCA0MTc0NiwgMTE5MTQ3LCAwLCA0MTI1OSwgNTU2MSwgNzQzNjAsIDI2OTEsIDAsIDY1NTUzLCA3OTMzLCA1NTYyLCAKKyAgICA2OTgwMCwgOTE3ODUxLCA0MTI2MiwgMCwgNjQ0MjEsIDc0ODQ2LCA0MTI1MSwgMCwgMCwgMzk3OSwgMCwgMCwgNzQ4MTMsIDAsIAorICAgIDAsIDAsIDAsIDExODg0NywgNDEyNjYsIDAsIDAsIDkxNzYzMCwgMTA1ODUsIDY1NzQxLCA0MTczNywgOTU3NCwgMjY2NiwgMCwgCisgICAgNDE3MzgsIDgzMSwgNDE5LCAxMzEyNiwgMTA3MTYsIDAsIDQyODIyLCAwLCA2NDM0LCAwLCA2OTM5LCA3NzY2LCA2NDMyLCAwLCAKKyAgICAwLCA5MTYsIDc2OSwgNDE3NDIsIDExOTY4LCA3NDgwNSwgNjQzMywgNTU2MywgNTQ3LCAxOTQzLCA2NDM5LCA1NTYwLCAKKyAgICA0OTk0LCA0ODcsIDAsIDQ0OTcsIDM3NTQsIDEyNzA1NiwgMTIwNDI0LCA5MDM5LCAwLCA0MTc3NiwgMCwgODcxNiwgMTU5NSwgCisgICAgNDE2MTUsIDAsIDAsIDc0MjYwLCAwLCA0MzI2NywgNDMyMTksIDAsIDAsIDEyMTg1LCAwLCAwLCA2ODM1NSwgNjgzNTcsIDAsIAorICAgIDQyODU2LCA4NjM0LCAwLCAwLCA0MjA5LCAxMjA3MDIsIDAsIDY1ODc5LCA0MTUzOCwgNjU2MTIsIDAsIDY2OSwgNTY3OSwgMCwgCisgICAgNjk3ODYsIDExODk2MSwgMCwgMCwgNTY3OCwgMTE4MjEsIDAsIDY3MTEsIDQ2MCwgMCwgMCwgMCwgMCwgMTIwNzQ3LCAwLCAwLCAKKyAgICA3ODA1MCwgMTE5MDIyLCAwLCAwLCAwLCA3NzgyLCA5MDQ0LCA0OTc0LCAxMTc2MCwgNzg0OTQsIDc1NzcsIDY1NzExLCAKKyAgICA0MTkxMiwgMTIxNiwgMCwgMCwgNTc5MiwgMCwgMCwgNzg1MDEsIDAsIDQyMjY0LCAxMjI0NCwgMCwgNTY4MywgMCwgMCwgCisgICAgNzgxMTksIDE1NDksIDAsIDAsIDEyMDM5OCwgNTY4MiwgNjIwNiwgODY3MCwgMTAyNTYsIDU2ODAsIDkxNzU2OCwgMTAwMDEsIAorICAgIDAsIDY5NzY4LCAxNDQ5LCAxMDI0MSwgNzgyOTAsIDAsIDAsIDEwNTUyLCA2NDM0MiwgNDE5MjIsIDAsIDg1ODQsIDAsIAorICAgIDU1NjcsIDI3MTcsIDAsIDAsIDU1NjQsIDQyODg2LCA0MTkwOCwgNDI4ODIsIDU1NjUsIDAsIDAsIDAsIDY1NzA4LCA2NTcwOSwgCisgICAgNTU2NiwgNjk4MDMsIDY1NzA0LCA2NTcwNSwgMTE5MDQsIDQyODc1LCA0MzM3MywgNDI1MzksIDU5NDIsIDg0NjgsIDAsIAorICAgIDEwMzYxLCAxMDQyNSwgNjU2OTcsIDY1Njk4LCA2NTY5OSwgMCwgNjY1OTgsIDAsIDY0NjY0LCAxMDY0NywgNzg3MDIsIAorICAgIDc4NzAzLCA3ODY5MCwgNDU3LCA3ODUwMiwgNjU3MDEsIDE5MzQsIDQzMDA2LCAwLCA4ODAyLCA3ODcxMCwgNjUxMzAsIAorICAgIDc4NzA2LCA3ODcwOSwgNjA4NywgNzg3MDUsIDc4NzE2LCA0MTc1NywgNzg3MTEsIDgwNDMsIDg5NTAsIDY1Njk0LCA2NDQ4NSwgCisgICAgNDM1MzQsIDEwNDU3LCAwLCAxMTk2MSwgNzg3MjUsIDc4NzIyLCA3ODcyMywgNzg3MjAsIDc4NzIxLCAwLCA2NTUxNSwgCisgICAgOTQ5OSwgMTAwMzUsIDEzMDY5LCAwLCAwLCA5ODg5LCA2ODE4NCwgNDI4MDYsIDAsIDcyNTYsIDAsIDAsIDE2NjcsIDQyMTYxLCAKKyAgICAwLCA0MjQyOCwgMCwgNjkzNCwgMCwgMTA4MDIsIDY0ODYxLCA2NTU2LCA3ODM5MCwgMCwgODEwMSwgMzYxMCwgMCwgNDE3NDgsIAorICAgIDQ5OTUsIDk1NSwgNjU5MDcsIDExOTIwOCwgNTM1MCwgNjQzMzksIDc4MzA2LCA2NDU0OSwgMTA4NzUsIDkxNzk1NiwgNTQ3NywgCisgICAgNjU2OTIsIDAsIDAsIDEyMDM5NywgMTI4OTYsIDEwNDU2LCA5MTc5NTQsIDAsIDM4NzQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY1NjAzLCAwLCA2NTY4NywgMCwgNDEwMzgsIDc0MDA5LCAxMTk1NzAsIDQyMjM5LCA4NTM2LCA3ODc0MCwgMCwgNzg3MjYsIAorICAgIDc0NDMyLCA3MjQsIDAsIDE0NTUsIDc4NzQ5LCA3MTgzLCA2NDU4MywgNzg3NDcsIDY4NDQzLCA0MTc1LCA3ODc0MSwgCisgICAgNDM2MTQsIDY5ODAxLCA5MzksIDAsIDQzNTIwLCA2ODYxMywgNzQ1NjksIDkxNzk1OCwgMCwgNzg3NjMsIDc4NzY0LCAKKyAgICA3ODc2MCwgMTA3ODgsIDYwODgsIDc4NzU5LCA3ODc1NSwgMTkwLCAwLCAxMjU5MywgMCwgODE4OCwgNjQ0MDgsIDAsIDQ0MTcsIAorICAgIDAsIDAsIDYzNzAsIDAsIDc4MjcsIDY4NDQxLCA2OTY1LCAwLCAwLCAxMzIwMSwgMCwgMCwgMCwgNzQzODIsIDczNzgxLCAKKyAgICA3OTE4LCA3Mzk4OCwgMCwgMCwgOTE3ODg0LCAxNzI4LCAwLCAxMjA3MTAsIDE3OCwgMTI5NzIsIDAsIDAsIDAsIDEyMDY3MSwgCisgICAgMCwgMCwgNzgzMjcsIDEyMDQwNSwgNjU2OTAsIDAsIDAsIDExOTA1NCwgMCwgOTI1MiwgOTE3ODg5LCA0NjUyLCA2ODM3MSwgCisgICAgMCwgMCwgMCwgMTMwNjUsIDk5MjMsIDEwODA2LCAwLCAxMTc2MywgMCwgMTIwNjg4LCA2NzIzLCA3ODE4NywgMCwgNjk5MywgCisgICAgMCwgMCwgODMzMywgMCwgMCwgMTEzOTAsIDAsIDc0NDY0LCAwLCAwLCA3NDA4MCwgMCwgMCwgMTE5MTAsIDAsIDgyNzgsIAorICAgIDg5NjMsIDQwMzQsIDAsIDAsIDY1MzQ0LCAxMjA1MTcsIDQxNzQ3LCAwLCAwLCA4Njc3LCAwLCAxMjcwNywgOTM1MCwgCisgICAgNjYwMzcsIDAsIDg4MzYsIDEyMzE1LCAxMjc0NywgODMwMCwgMCwgMCwgNzQ5MSwgODg1NiwgMCwgMCwgNDMxNTAsIDAsIAorICAgIDEyMDQwNCwgNjUzODksIDEyMDQwMiwgMTIwNDAzLCAxMDgxMywgMjU5MiwgMTI4NTMsIDQzMjY5LCA3MjYzLCAxMjAyNDQsIAorICAgIDY1MzYsIDEyMDIzOCwgMTIwMjM5LCA2NTUxNiwgMTIzMjEsIDEyMDM5MSwgMTIwMzg4LCA1NTI4NywgMTAwMDcsIDEyMDI0NiwgCisgICAgOTU4OCwgMTIwMjQ4LCAxNTk2LCAxMjAzODMsIDQxOTk0LCA2NTgwMSwgMCwgMCwgNjY1NzIsIDAsIDAsIDEwNjEzLCA2Njk3LCAKKyAgICAxMjgwNSwgNDE5MjgsIDQwOTgxLCA3ODQwMywgNzg0MDksIDUwMDYsIDY0MzI4LCAwLCA5OTMxLCAwLCA4ODI1LCA3NDU1NSwgCisgICAgNjU5NDAsIDQzMjU5LCAwLCA2MTA3LCAwLCAxMTkxNzcsIDAsIDc4NDAxLCAwLCAxMTc4MywgMzM1LCAxMjAyMjcsIDY0Njg5LCAKKyAgICA0MzgsIDQ1MTAsIDU3NjUsIDg3MjEsIDEyMDIzMywgMTE5MjI3LCA2MDkyLCAxMjg0MCwgNDMxMTIsIDg4NzYsIDEyMDIzMSwgCisgICAgODA5NiwgMTAyODQsIDAsIDAsIDAsIDEwMzgwLCA4NzMzLCAwLCAwLCA0MTYwMiwgMCwgMCwgNzQ4MzEsIDkxNzkwMSwgMCwgCisgICAgNzM3NDcsIDY1Mzk5LCAwLCA2NDU5MSwgNDI0MDUsIDAsIDEyMDgyMCwgODQzLCAxMTU0MSwgMCwgOTE3ODk4LCAyMDY1LCAKKyAgICA0MTkzNSwgNzQ0OTYsIDQxOTAyLCAwLCAwLCAyMTUsIDQxMjU4LCA3Nzg3NSwgNDMxNTksIDE5NTMsIDk1NzksIDQxOTM4LCAKKyAgICAxMjU2LCAzOTEwLCA5NDA3LCA2MjQyLCAwLCAwLCA0MTI1NywgNDE5MDAsIDg2NzUsIDEwNzAwLCA4ODA1LCAxNzQyLCAwLCAKKyAgICA5MzMzLCA4MjAyLCAwLCAwLCAwLCAwLCAwLCA3Mzg4MiwgNDk5LCAwLCA0MzQ2NywgMCwgNTUyOTAsIDAsIDE3MTIsIDU5MzIsIAorICAgIDc3ODQ1LCA0MTc2MiwgMCwgMCwgMTE5NjcsIDE3NzUsIDAsIDAsIDAsIDAsIDAsIDk0NTgsIDAsIDY0NzAsIDkxODAsIAorICAgIDEyMDM4MCwgNDMxNzYsIDAsIDAsIDQyNzgyLCAwLCAwLCAwLCA5MTc5MTIsIDc0Nzc3LCAxMjA2NjksIDk0MTQsIDEyMDM4MiwgCisgICAgNzM3ODIsIDczOTY5LCA1NjUsIDQyNDg0LCA1Nzk0LCAyMDEsIDI2NjIsIDQyMjkyLCAwLCA4MjU0LCAwLCAxMDk3NSwgMCwgCisgICAgMTIwNjI1LCA3NDc2MywgMTAyMiwgNDEwOCwgMzg4MCwgNzQyNDcsIDAsIDAsIDE5NDk2NCwgOTE3OTgwLCA3NTA3LCAwLCAKKyAgICA0MzE0OSwgMCwgNjUwMzEsIDc5NjEsIDE2MzYsIDAsIDY1MDI5LCA2NTAyNCwgMCwgMTI0NzMsIDY1MzQsIDAsIDk5LCA5OCwgCisgICAgOTcsIDEyMDU3MSwgNjc1ODQsIDQwNDksIDc0MTYzLCAxMjcwNjUsIDcwOTAsIDAsIDc4OTIsIDkxNzk2OSwgMTA3NzcsIDAsIAorICAgIDY1MzEwLCA2NTU2MiwgNjY1OTksIDY2NzIyLCAwLCA4MDM5LCAzMzYzLCA2NjU5NCwgNDM0MzQsIDAsIDAsIDEyNTk2LCAKKyAgICA2NjU5NSwgNDIyNTgsIDQyNTcwLCA1NTkzLCAxMTkxNDgsIDEyMDcxMSwgMCwgMTAxMDAsIDYwNjEsIDY0ODU0LCAxMTksIAorICAgIDExOCwgMTE3LCAxMTYsIDEyOTk4LCAxMjIsIDEyMSwgMTIwLCAxMTEsIDExMCwgMTA5LCAxMDgsIDExNSwgMTE0LCAxMTMsIAorICAgIDExMiwgMTAzLCAxMDIsIDEwMSwgMTAwLCAxMDcsIDEwNiwgMTA1LCAxMDQsIDY0MzYsIDczOTc0LCA1MzQsIDQxMjEyLCAKKyAgICA3NzkzMSwgMTUzNiwgNjQwOTMsIDczOTcwLCA3NzkzMCwgMCwgMCwgNjAyMCwgMTI3MTYsIDEyNzExMiwgMTI3NDQsIDQ3NSwgCisgICAgMTIwMzk0LCAxMzI2NiwgMCwgMTI3MTExLCAwLCA3MzkyNiwgMCwgMTA2NDUsIDEyMTIsIDY1NDMsIDAsIDgxMzQsIDAsIAorICAgIDI5MTMsIDczODcwLCAwLCAxODY2LCAwLCAxOTUwOTUsIDAsIDg5MjMsIDE2NDUsIDEyMDU5LCA2NjU4NSwgNzg3ODYsIAorICAgIDMxOTYsIDAsIDAsIDU5MzUsIDEyNTAsIDEyNzA2NiwgODE3NCwgOTc4NywgNjczMywgOTg1OSwgNzkxNiwgOTg2MSwgOTg2MCwgCisgICAgNTI1OCwgMTg4MiwgMTg5MiwgNjczMSwgMTA4ODIsIDQwNSwgMTE0NTQsIDczOTExLCAwLCAwLCA0MTE2OSwgODkzOSwgCisgICAgNDEyNDUsIDAsIDQxMTcwLCAxNDU0LCAxMTM2OSwgNjQ3NywgMTIxNTcsIDAsIDAsIDAsIDQxMTcyLCA3ODU1LCAwLCAwLCAKKyAgICAxMDQ4MCwgMCwgMCwgNzc5MzYsIDgyNjQsIDEyNjEwLCAwLCA2NDUsIDAsIDc2MDksIDQwOTczLCAwLCA3MzgzMywgNzgyNDksIAorICAgIDU4MjQsIDk4NCwgNzc5MTgsIDEwNjg4LCA1ODUxLCAwLCA3NzI5LCA3Mzk4MiwgMTIwNTE4LCAwLCAxOTUwODYsIDQzMzY5LCAKKyAgICAwLCAwLCA2ODQxNSwgMCwgNDUzOCwgMTIwNDA2LCA0MzE0MSwgMCwgMCwgNzQyMTQsIDczODg2LCAwLCAwLCAxMTg5MDIsIAorICAgIDQzMDA1LCA3ODQ0OCwgOTU1MiwgMCwgMCwgMCwgMTI5OTcsIDAsIDAsIDAsIDAsIDIzODEsIDEyODgzLCAxMDk5NCwgCisgICAgMTA1MjksIDQxOTA2LCAwLCAwLCAwLCAxMjQyNSwgMTA2NjEsIDEwODU2LCA5NjE0LCAyNDI4LCA0MTQ3OCwgODU4MiwgCisgICAgMTAwNjQsIDczOTMwLCAwLCAwLCAwLCA2NDg5NiwgMTE5MTYyLCAxOTUyLCAwLCA4NDU1LCAxMDA4MiwgMTE1NzUsIDAsIAorICAgIDExOTU2NiwgMCwgMTI4MDgsIDEyMTgzLCA2MTQ1LCAwLCA2NDkyOSwgMCwgMCwgMCwgNDMxODYsIDQyNTA5LCAwLCAzOTIyLCAKKyAgICA5MTg3LCAwLCAwLCAwLCAxMTkwNTcsIDExNzUyLCAzMzUzLCA5MzU4LCAwLCA5MTc5NTcsIDY2NjgwLCAxMjAwOTAsIAorICAgIDExNzQ3LCA3OTMxLCA4NTU4LCA5Nzk1LCA2ODM4MCwgMCwgMCwgMTIwMDgyLCAxMjAwODEsIDEyMDA4NCwgNDEwMjcsIAorICAgIDEyMDA4NiwgMCwgMTIwMDg4LCAxMjAwODcsIDcwMTksIDEyMDA3MywgMCwgMTE3NTEsIDEyMDA3OCwgNzgyOTQsIDY0NjU3LCAKKyAgICA4NjU3LCAxMjAwNDgsIDg1OTQsIDEyMDA2OCwgMCwgMCwgMTIwMDY5LCAxMjAwNzIsIDEyMDA3MSwgMCwgMCwgNDMxNTQsIAorICAgIDQxMDI5LCAwLCAxMTMzMiwgNjUzODAsIDc3MjgsIDAsIDExMjk0LCAwLCA2NjY2NSwgNzg1MSwgMCwgODM3NSwgODY5OSwgMCwgCisgICAgNDI1MjQsIDAsIDkwODUsIDAsIDc1MDQsIDkzMjcsIDYxNjAsIDAsIDAsIDAsIDgwODgsIDAsIDc0MDEyLCAwLCAwLCA0NDM5LCAKKyAgICA2OTI2LCAwLCAxMjkyNCwgMCwgNDIzNjksIDAsIDY1NDkxLCA2NTE0NSwgOTA0MSwgNDM1NTksIDY0NTc3LCAxMDgyNiwgMCwgCisgICAgMTEyOTYsIDAsIDAsIDAsIDY1ODI1LCA5NTc3LCA2ODE5OSwgMCwgNjQ2NzAsIDAsIDc4MDU2LCA2NzkzLCAxMTI5NSwgMCwgCisgICAgNzgwNTMsIDczODcyLCAwLCAwLCAxMDkwMiwgMCwgMCwgNzgwNzAsIDc4MDY4LCAxMDQ3MiwgMjk5NSwgMCwgMCwgNjQ2ODIsIAorICAgIDIzNzEsIDc4MDY5LCAxMjA4MDgsIDI1OSwgMTAwOSwgMCwgMjQwMiwgMjMzMywgNjQ0MCwgMCwgMCwgNjUxMjUsIDQxMjQ0LCAKKyAgICAwLCAxMzI3MSwgOTEwMywgNDExODAsIDAsIDAsIDAsIDAsIDEwMjE5LCAwLCAwLCAwLCAwLCA0MzE3OCwgMTI3MDcwLCAKKyAgICA0MTI2MSwgMTE5MzYyLCA0MzY0MCwgODYxMywgMCwgMTE4OTg5LCA2NzM2LCAxOTUwOTIsIDQxNDkyLCAxMjAwNSwgCisgICAgOTE3OTgyLCAwLCAxODkwLCAxMjAwNTYsIDAsIDAsIDAsIDcyOTMsIDc5OTEsIDAsIDEwNTc4LCAwLCA3ODA3NiwgMCwgCisgICAgNzgwNzcsIDAsIDAsIDc4ODAwLCAwLCAxMjAwNTQsIDQyNjY4LCA2NjM1LCAwLCA2MTY0LCA2NTE3MCwgMCwgMCwgMCwgCisgICAgMTE2NjQsIDAsIDAsIDAsIDAsIDExODgxMiwgMCwgMCwgMCwgOTE3NSwgMTE5MjUsIDc4MDQ1LCA5MDg4LCAwLCA2NDU0NSwgCisgICAgMTM5NiwgMCwgNzU0NiwgMzg0NywgMCwgMCwgNDk4NSwgMTMyODgsIDY3MiwgODA5OCwgNDMxOTYsIDE5NDc0NiwgMCwgMCwgCisgICAgMCwgNzQwNDMsIDY1MDcyLCAxNTc3LCAxMTc3MiwgMTMwNDEsIDU5MjgsIDQ1MjUsIDEwNjU4LCA2NTkxMSwgMTI2NiwgCisgICAgMTAxODAsIDAsIDAsIDEyNjIyLCAwLCAwLCAwLCAxOTQ3MTQsIDAsIDEzMzEwLCA3NzMsIDE5OTMzLCAxNTM5LCAwLCAKKyAgICAxMjY5ODMsIDQyNzMxLCAwLCAwLCAwLCAwLCAzMDUxLCA1ODYyLCA3ODIzLCAwLCAwLCAxMjA0MTEsIDMyNTAsIDQzOTkxLCAKKyAgICAwLCA2NjY0OSwgOTUxMCwgNjYyMzcsIDAsIDAsIDQxMDY2LCA2NDY3MywgOTE3OTYzLCA5MTc5NjQsIDAsIDM1MDUsIDg3MDcsIAorICAgIDkxNzk2OCwgNjcyNSwgOTE3OTY2LCA5MTc5NzEsIDkxNzk3MiwgMzQ3MSwgOTE3OTcwLCA1NDc5LCA4ODIsIDY2ODYsIAorICAgIDExOTU4NCwgMTE2MTMsIDEyMDc3MiwgNDI3NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjUsIDkxNzk5NiwgNDQzMywgCisgICAgNDExNTYsIDQzOTczLCA0MzE3MywgMTQ0MywgNDM4MSwgMCwgMCwgMTA5MjYsIDExNzU2LCAxMTc1NywgNjQ4NzksIAogICAgIDkxNzk0OSwgOTE3OTUwLCA5MTc5NDcsIDEzMjI3LCAwLCAxMDAyMSwgNTE2MCwgMTM4NywgMCwgOTE3OTUzLCA0MTQxOCwgMCwgCi0gICAgNjU5MTQsIDkxNzk1NywgMjE3LCA5MTc5NTUsIDkxNzk2MCwgOTE3OTYxLCAxMDQ0MywgMTA3ODksIDQxMTU4LCAxMTkyNTcsIAotICAgIDQyNzQsIDAsIDQxNDgzLCAwLCA0MTI1MCwgMCwgNDIxNzksIDAsIDU5MzEsIDExNzQ0LCAwLCAwLCA0MTI1MiwgNjY2ODIsIAotICAgIDAsIDExOTYzNywgNDEyNDksIDEzNjYsIDY0NjM1LCAwLCAxMjQ2NiwgMCwgMCwgNDM5NywgMCwgMCwgNDEyOTYsIDk1NDUsIAotICAgIDQxMjkxLCAwLCAwLCA0MTQ4NSwgMzUxMSwgNDEyODIsIDU5MjMsIDEwNDAwLCAwLCAwLCA3NjAsIDAsIDEyMDg4LCA1Nzg2LCAKLSAgICAwLCA0MjI1NiwgMTE5ODY5LCAxMTk4NjEsIDQxNywgNDE0NzQsIDExOTU2MiwgNDE1NjUsIDAsIDU5MzQsIDExOTg2NywgCi0gICAgNjY1ODMsIDExOTIzMSwgNjQ4NzcsIDAsIDY0NDgxLCAwLCAwLCA0MTk1NiwgMCwgMTI2OTk1LCAwLCAwLCAwLCA0MjI3MywgCi0gICAgNTgxOSwgMCwgOTE3NTU2LCAwLCAwLCAwLCA2NTkxMCwgMCwgMTAyNDYsIDAsIDAsIDEyMzcsIDEwMjc0LCA0NTUyLCAwLCAwLCAKLSAgICAwLCAxMzc1LCA2NjcwNSwgNDM1NzMsIDY1MjYwLCA0MjA2MywgMCwgNDI4MTEsIDEwMzEyLCA3NDE5MiwgMTIwNzk0LCAKLSAgICA3ODQwLCAwLCA2NDg5MCwgMTAyNTIsIDAsIDAsIDQzMTg1LCAwLCA0Mzk2LCAwLCAxMTk4ODAsIDEwNzY5LCAxMDMzMSwgCi0gICAgMTE5MDQxLCAwLCA5NzUzLCAwLCA4OTQ0LCAwLCAwLCAxMDQ3MywgMCwgMCwgNjA3MiwgNDMwMjUsIDEwMjk5LCAwLCAwLCAKLSAgICAxMjA2MDgsIDExOTg3NCwgMCwgMCwgMCwgMCwgOTMzMCwgMCwgNzIyMiwgMTAyODMsIDEwMzE1LCAxMDM3OSwgNDk5NiwgMCwgCi0gICAgMTMyODEsIDY2NTE3LCA3ODY1LCAxMDA4NywgMCwgMCwgMTE5MDkyLCAwLCAwLCA3NTY1LCA2NjM2MywgMTI5NTIsIDY0ODA2LCAKLSAgICA0MzE4MCwgMCwgNjgwOTYsIDAsIDAsIDc0Mjg4LCA2MjIsIDc0MDIzLCA4ODUsIDY0NzcyLCAxNjAyLCAwLCAwLCA4NTIsIDAsIAotICAgIDEyMTYwLCAwLCAxMDIxMiwgNjU0MzUsIDAsIDEyMDcxLCA5NjA5LCAxMjE1NiwgOTE3OTgzLCA5MTc5ODQsIDQzNTg2LCAKLSAgICAxMTAzNSwgMTA0MTEsIDkxNzk4OCwgMTAyNTUsIDEwMjYzLCAxMDI3OSwgNDE5NCwgMTAzNzUsIDkxNzk5MywgMCwgNDMxNSwgCi0gICAgMTI2NDQsIDkxNzk5NywgOTE3OTk0LCA5MTc5OTUsIDQzMzQzLCAwLCA5MTc5OTgsIDkxNzk5OSwgNDExNzcsIDAsIDAsIAotICAgIDkxNzc5MiwgMCwgMCwgODcxNSwgMCwgNDExNzksIDAsIDQzMzEzLCAwLCA0MTE3NiwgMCwgOTk0LCAwLCA4NDUyLCAKLSAgICAxMjcxMDMsIDczOTY2LCAwLCAwLCA1OTIxLCAwLCAyNTk3LCAwLCA1OTIyLCAxMTg5MDMsIDEyNzEwOSwgNDE4NiwgCi0gICAgMTI3MTA3LCAxMjcxMDYsIDEyNzEwNSwgNzM5NzMsIDAsIDQ0MDYsIDc0NjAxLCA4NDgwLCAwLCA5NzQ3LCAwLCA0NDEzLCAwLCAKLSAgICA0MjI2OCwgMzE5OCwgNTkyNCwgNTkyMCwgMCwgNjkyMSwgMCwgNzQwMDcsIDQyODY5LCA4NDE4LCAxMTY4MSwgNDMxNjksIAotICAgIDEwMTc2LCAwLCA3NDIsIDAsIDI4OTMsIDEwNzcyLCA2NTI3NiwgNTkzNywgMTkxNCwgMjU1MywgMTE2ODIsIDAsIDAsIDAsIAotICAgIDgzNjMsIDAsIDI5OTMsIDc3NzIsIDM5MTYsIDAsIDAsIDExNDEsIDQyNDA3LCA4MTU5LCA3MTgsIDc1NzIsIDk3MywgMCwgCi0gICAgMTIwNzE4LCAzMjM1LCAyNDE1LCA0MzE2NCwgMCwgODAxOCwgNDIzMzMsIDc0NzU2LCAxMDY3NSwgNjkzNywgNDI0ODYsIDAsIAotICAgIDY1MzkwLCAwLCAwLCAxMjAyLCAwLCAwLCAxMjcwMzcsIDAsIDAsIDAsIDAsIDY0NTQyLCAzMjYwLCA3MzgyOSwgNjUzODgsIAotICAgIDAsIDg0MTksIDAsIDEyNzAzNiwgMCwgMCwgNzQxOTMsIDAsIDAsIDAsIDAsIDE0MzEsIDAsIDY2NTY1LCAxMDgyMSwgMCwgCi0gICAgMTI4MDQsIDAsIDgyMjksIDEyMzUsIDMzMDcsIDExNDcyLCAwLCAwLCA0NTQ0LCAwLCAwLCAwLCAxNzQwLCAwLCA4NzU4LCAKLSAgICA5ODUsIDEyODgyLCA2NDUxMSwgMCwgMTIwNjgsIDAsIDAsIDEwMTQxLCAwLCA2Mzc2MSwgODc4NSwgNDQ3NiwgMCwgNjM3NjMsIAotICAgIDEyNjU1LCA4OTA3LCAwLCAwLCAwLCAwLCAwLCAxMTk1NzIsIDEwNjY1LCA2NDYxNiwgNDE1NzIsIDAsIDAsIDAsIDQxNTczLCAKLSAgICAwLCAzOTMxLCAwLCA3NDE0MywgMCwgMCwgMCwgMCwgMTE5ODIsIDAsIDAsIDAsIDAsIDY0NDg0LCAwLCA0MTE2NywgMCwgCi0gICAgNDE3MzUsIDAsIDcxNywgMTA3NTQsIDAsIDAsIDAsIDAsIDYzNzY3LCAwLCAxNzgwLCA2OTM2LCAwLCAwLCA4MTksIDEwNjExLCAKLSAgICA5Njk0LCAxMjY5NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDEyODIwLCAwLCA2NTc4LCA3MDA5LCA3NTIzLCA2OTIyLCA3NDIxOCwgCi0gICAgNjc4NDgsIDc1MjUsIDMzNDYsIDgzMzksIDAsIDAsIDU3NSwgMjY4LCAwLCA4NTYzLCAwLCAxMjAzNDMsIDQxNTQxLCAKLSAgICA2NTU2NSwgODMzNiwgNTkzNiwgNzI5MCwgMCwgODMzNywgMTMwODEsIDMwOCwgMTEzODgsIDc1MjIsIDEyMDcyMSwgMCwgCi0gICAgNjU0NjYsIDExMDkwLCA2OTUzLCAwLCAxMjAzNDYsIDAsIDEyMDM0NSwgNTkyNiwgMCwgMCwgMCwgMCwgMCwgMCwgOTAzOCwgCi0gICAgNzg4NywgMCwgNzgzMCwgMTE2NTEsIDEzMDkzLCA2NDAwMiwgMCwgNjU3NDIsIDAsIDExOTU5NywgMTE1OTAsIDAsIDc0MDQ4LCAKLSAgICAwLCA4NTk1LCAwLCAwLCAwLCAxMzA5NywgMCwgNjQ2NDMsIDEzMjgzLCAxMjY5NywgMCwgMTIwNjIxLCAzNDg4LCA1OTMzLCAKLSAgICAxMDAzMywgNzM3MzgsIDY2MjQxLCA2NTU3MCwgMCwgMTIyOTcsIDExOTE1MywgMTk1NSwgMCwgNTM0OSwgNDI1MzgsIDAsIDAsIAotICAgIDY1MzA4LCA5NDYyLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODMxLCAwLCA3NjM4LCAwLCA0Mjc2NCwgMCwgNDMxMDksIDc2MzcsIAotICAgIDExOTU3LCAxMjA2MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2MzYsIDY1MTcxLCA5MTI0LCAwLCAxMjAzMzEsIDAsIDI5MSwgCi0gICAgMCwgMCwgMjAyNywgNjYyMzAsIDAsIDAsIDEwNDAzLCAwLCA0NjQwLCA2NDcxMywgMTAyMjQsIDEyMDQyOSwgNDI1MTIsIAotICAgIDEyMDQzMSwgMTIwNDMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTkwOTQsIDc0MjEzLCA3ODI0LCAwLCAwLCA0MTI3NCwgCi0gICAgNTc3OCwgNjMwMiwgMCwgMCwgMTI2ODAsIDExOTEzMCwgMTQxNywgMCwgMTk0OTE0LCA5NDUyLCAwLCAwLCAxMTU1MiwgMCwgCi0gICAgMCwgMCwgNjUzOTEsIDAsIDEwMTcyLCA2NTQ1MywgMTIwNDA4LCA0MTI2NCwgMTIwNDEwLCA2NDI2LCA0NjQxLCA5MTc5LCAKLSAgICA2NDgxOSwgNjQ5MDYsIDQxMjU1LCA0MjAzNiwgNDE0NjksIDQxMjY5LCAxMjA0MTIsIDQxMjY3LCA0NjQ2LCAxMjA0MjUsIAotICAgIDg2NSwgNDIwMzQsIDEyMDQyNiwgMTIwNDIxLCA0NjQ1LCA0MjAzMywgMTIwNDIyLCAwLCAwLCA2NDcyOCwgMCwgMCwgMCwgCi0gICAgMTY1OSwgOTE5LCA0Mjc4NCwgMTY3MSwgMTk1MDg5LCA2MDY5LCA5MjE5LCAxOTUwOTAsIDE2NjEsIDEzMTIwLCA2Mzc4NCwgCi0gICAgMTk1MDk0LCAxMDE0MCwgOTcxMywgMTE5MTQzLCAwLCAwLCAwLCAyMzA2LCAxMDQ4NSwgMTE4OTQzLCA2MDY4LCAxMDYxMiwgCi0gICAgMTk1MDk5LCAwLCAxOTUxMDEsIDE5NTA3OCwgNDE0NjIsIDE5NTA4MCwgMTk1MDc5LCA1NDIyLCAxOTUwODEsIDAsIDAsIDAsIAotICAgIDEwMjI5LCAxMDYzNSwgODI2LCAxOTUwODMsIDE5NTA4MiwgMTk1MDg1LCAxOTUwODQsIDE5NTA4NywgNjQ4MywgMCwgMTgwOCwgCi0gICAgNzg0OCwgMCwgODEwMCwgMCwgMCwgMCwgMTMzMDEsIDAsIDk2NjcsIDAsIDAsIDAsIDExMDAzLCA5OTA0LCAwLCAwLCAKLSAgICAxMjA2OTAsIDkxNDQsIDEwOTIxLCAwLCAwLCA5ODQwLCA2NTEzMSwgOTE3NTYwLCAwLCAxMDMxMywgMCwgMCwgNjQzMjAsIAotICAgIDEwMjY1LCAwLCAxMDk2MiwgMTE4OTcwLCA0MzAwOCwgODk0NSwgMCwgMCwgNDEsIDE5NTA3MiwgMTc5MiwgMTIwNTE1LCAKLSAgICAxOTUwNzMsIDg2NTUsIDE5NTA3NSwgMCwgMCwgMTIwNjYsIDAsIDM4NSwgNDE1MiwgMjU4NSwgMCwgMCwgMzEyNiwgMCwgCi0gICAgNzQxMzYsIDEwOTU3LCAwLCAwLCAwLCAwLCAxMzE1NywgMCwgMCwgMzU3MCwgMCwgNzQ0MywgMCwgMCwgNjk5NywgMCwgMCwgCi0gICAgNzg3OSwgODczOSwgMTEwNzUsIDAsIDY1MjE2LCAwLCAwLCAyNTkzLCA4NDYzLCA3ODEwLCA5MTc4NjIsIDc4MzksIAotICAgIDExOTkxMywgMCwgOTE3ODYwLCA5NjkxLCA0NDExLCA5MTc4NDcsIDAsIDAsIDAsIDAsIDY1MjU0LCAxMDA2NiwgMCwgMCwgMCwgCi0gICAgMCwgMTMwNjEsIDgwMTYsIDAsIDE5OTMyLCA2NDgzMSwgMCwgMCwgMTIzOTAsIDExOTE3MSwgMTYzNCwgNjgxMTUsIDAsIAorICAgIDY1OTE0LCA2NzIxLCAyMTcsIDkxNzk1NSwgOTE3OTYwLCA5MTc5NjEsIDEwNDQzLCAxMDc4OSwgNDExNTgsIDExOTI1NywgCisgICAgNDI3NCwgMCwgNDE0ODMsIDAsIDQxMjUwLCAwLCA0MjE3OSwgMCwgNTkzMSwgMTE3NDQsIDY5MjMyLCAwLCA0MTI1MiwgCisgICAgNjY2ODIsIDAsIDExOTYzNywgNDEyNDksIDEzNjYsIDY0NjM1LCAwLCAxMjQ2NiwgMCwgMCwgNDM5NywgMCwgMCwgNDEyOTYsIAorICAgIDk1NDUsIDQxMjkxLCAwLCAwLCA0MTQ4NSwgMzUxMSwgNDEyODIsIDU5MjMsIDEwNDAwLCAwLCAwLCA3NjAsIDAsIDEyMDg4LCAKKyAgICA1Nzg2LCAwLCA0MjI1NiwgMTE5ODY5LCAxMTk4NjEsIDQxNywgNDE0NzQsIDExOTU2MiwgNDE1NjUsIDAsIDU5MzQsIAorICAgIDExOTg2NywgNjY1ODMsIDExOTIzMSwgNjQ4NzcsIDAsIDY0NDgxLCA3ODYxNCwgNjYwMTMsIDQxOTU2LCA0MzQ1NSwgCisgICAgMTI2OTk1LCAwLCAwLCAwLCA0MjI3MywgNTgxOSwgMCwgOTE3NTU2LCAwLCAwLCAwLCA2NTkxMCwgMCwgMTAyNDYsIAorICAgIDEyMDgxNiwgMCwgMTIzNywgMTAyNzQsIDQ1NTIsIDAsIDAsIDAsIDEzNzUsIDY2NzA1LCA0MzU3MywgNjUyNjAsIDQyMDYzLCAKKyAgICAwLCA0MjgxMSwgMTAzMTIsIDc0MTkyLCAxMjA3OTQsIDc4NDAsIDAsIDQzNjMwLCAxMDI1MiwgMCwgMCwgNDMxODUsIDAsIAorICAgIDQzOTYsIDAsIDExOTg4MCwgMTA3NjksIDk2NzYsIDExOTA0MSwgMCwgOTc1MywgMCwgODk0NCwgMCwgMCwgMTA0NzMsIDAsIAorICAgIDAsIDYwNzIsIDQzMDI1LCAxMDI5OSwgMCwgMCwgMTIwNjA4LCA2NjMyNiwgMCwgMCwgMCwgMCwgOTMzMCwgMCwgNzIyMiwgCisgICAgMTAyODMsIDEwMzE1LCAxMDM3OSwgNDk5NiwgMCwgMTMyODEsIDY2NTE3LCA3ODY1LCAxMDA4NywgNzgzNDMsIDAsIDc4MzQ3LCAKKyAgICAwLCAwLCA3NTY1LCA2NjM2MywgMTI5NTIsIDY0ODA2LCA0MzE4MCwgNzc5MjgsIDY4MDk2LCA3NzkyOSwgNDM5ODIsIAorICAgIDc0Mjg4LCA2MjIsIDc0MDIzLCA4ODUsIDQzNDA1LCAxNjAyLCAwLCAwLCA4NTIsIDAsIDEyMTYwLCAwLCAxMDIxMiwgCisgICAgNjU0MzUsIDAsIDEyMDcxLCA5NjA5LCAxMjE1NiwgOTE3OTgzLCA5MTc5ODQsIDQzNTg2LCAxMTAzNSwgMTA0MTEsIAorICAgIDkxNzk4OCwgMTAyNTUsIDY3MTAsIDEwMjc5LCA0MTk0LCAxMDM3NSwgOTE3OTkzLCAwLCA0MzE1LCAxMjY0NCwgMTI3NTE2LCAKKyAgICA3NzkzNywgNDM2MzksIDQzMzQzLCAwLCA5MTc5OTgsIDExNTAxLCA0MTE3NywgMCwgMCwgOTE3NzkyLCAwLCAwLCA4NzE1LCAKKyAgICAwLCA0MTE3OSwgMCwgNDMzMTMsIDAsIDQxMTc2LCAwLCA5OTQsIDAsIDg0NTIsIDEyNzEwMywgNzM5NjYsIDAsIDAsIDU5MjEsIAorICAgIDAsIDI1OTcsIDAsIDU5MjIsIDExODkwMywgNzc5NDMsIDQxODYsIDEyNzEwNywgMTI3MTA2LCAxMjcxMDUsIDY3MTgsIDAsIAorICAgIDQ0MDYsIDc0NjAxLCA4NDgwLCA5MTkyLCA5NzQ3LCAwLCA0NDEzLCAwLCA0MjI2OCwgMzE5OCwgNTkyNCwgNTkyMCwgMCwgCisgICAgNjkyMSwgNzgwODEsIDc0MDA3LCA0Mjg2OSwgODQxOCwgMTE2ODEsIDQzMTY5LCAxMDE3NiwgMCwgNzQyLCAwLCAyODkzLCAKKyAgICAxMDc3MiwgNjUyNzYsIDU5MzcsIDE5MTQsIDI1NTMsIDExNjgyLCA2NzU2LCAwLCAwLCA4MzYzLCAwLCAyOTkzLCA3NzcyLCAKKyAgICAzOTE2LCAwLCAxMjA0OTQsIDExNDEsIDQyNDA3LCA4MTU5LCA3MTgsIDc1NzIsIDk3MywgMCwgMTIwNzE4LCAzMjM1LCAKKyAgICAyNDE1LCA0MzE2NCwgMCwgODAxOCwgNDIzMzMsIDc0NzU2LCAxMDY3NSwgNjkzNywgNDI0ODYsIDQzMzgxLCA2NTM5MCwgMCwgCisgICAgMCwgMTIwMiwgMCwgMCwgMTI3MDM3LCAwLCAwLCAwLCA3ODE4MiwgNjQ1NDIsIDMyNjAsIDczODI5LCA2NTM4OCwgOTk0NSwgCisgICAgODQxOSwgNzgwNDIsIDY3MzgsIDAsIDQzNjgxLCA3NDE5MywgMjA1OSwgMCwgMCwgNTUyMzcsIDE0MzEsIDAsIDY2NTY1LCAKKyAgICAxMDgyMSwgMCwgMTI4MDQsIDAsIDgyMjksIDEyMzUsIDMzMDcsIDExNDcyLCA3ODA4OSwgNzgxODQsIDQ1NDQsIDAsIDAsIDAsIAorICAgIDE3NDAsIDc4MDk3LCA4NzU4LCA5ODUsIDEyODcyLCA2NDUxMSwgNzgwOTQsIDEyMDY4LCA3ODEwMiwgMCwgMTAxNDEsIDAsIAorICAgIDYzNzYxLCA4Nzg1LCA0NDc2LCA3ODEwOSwgNjM3NjMsIDEyNjU1LCA4OTA3LCA3ODEwNSwgNzgxMDYsIDc4MTAzLCA3ODEwNCwgCisgICAgMCwgMTE5NTcyLCAxMDY2NSwgNjQ2MTYsIDQxNTcyLCAwLCAwLCAwLCA0MTU3MywgMCwgMzkzMSwgMTIwMjk1LCA3NDE0MywgCisgICAgMCwgMCwgMCwgMCwgMTE5ODIsIDAsIDAsIDAsIDAsIDY0NDg0LCAwLCA0MTE2NywgMCwgNDE3MzUsIDAsIDcxNywgMTA3NTQsIAorICAgIDAsIDAsIDAsIDAsIDYzNzY3LCAwLCAxNzgwLCA2OTM2LCAwLCAwLCA4MTksIDEwNjExLCA5Njk0LCAxMjY5NzgsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEyODIwLCAwLCA2NTc4LCA3MDA5LCA3NTIzLCA2OTIyLCA3NDIxOCwgNjc4NDgsIDc1MjUsIDMzNDYsIAorICAgIDgzMzksIDAsIDAsIDU3NSwgMjY4LCA3ODExMSwgODU2MywgNTc1NCwgMTIwMzQzLCA0MTU0MSwgNjU1NjUsIDgzMzYsIAorICAgIDU5MzYsIDcyOTAsIDc4MTE3LCA4MzM3LCAxMzA4MSwgMzA4LCAxMTM4OCwgNzUyMiwgMTIwNzIxLCA3ODEyMywgNjU0NjYsIAorICAgIDExMDkwLCA2OTUzLCAwLCAxMjAzNDYsIDAsIDc4MTMyLCA1OTI2LCA3ODEyOCwgNzgxMzAsIDc4MTI2LCA3ODEyNywgCisgICAgNzgxMjQsIDc4MTI1LCA5MDM4LCA3ODg3LCA0MzQ1NiwgNzgzMCwgMTE2NTEsIDEzMDkzLCA2NDAwMiwgMCwgNjU3NDIsIAorICAgIDEyODc0LCAxMTk1OTcsIDExNTkwLCAwLCA3NDA0OCwgMCwgODU5NSwgMCwgMCwgNDM3MDMsIDEzMDk3LCAwLCA2NDY0MywgCisgICAgMTMyODMsIDEyNjk3LCAwLCAxMjM4MSwgMzQ4OCwgNTkzMywgMTAwMzMsIDczNzM4LCA2NjI0MSwgNjU1NzAsIDAsIDEyMjk3LCAKKyAgICAxMTkxNTMsIDE5NTUsIDAsIDUzNDksIDQyNTM4LCAwLCAwLCA2NTMwOCwgOTQ2MiwgMCwgMCwgMCwgMCwgNDI3MzYsIDAsIAorICAgIDU3NTYsIDAsIDc2MzgsIDQxNjQyLCA0Mjc2NCwgMCwgNDMxMDksIDc2MzcsIDU3NTIsIDEyMDYwMCwgMCwgNzM4MzIsIDAsIAorICAgIDEyMDYzNSwgMCwgNzgzMzQsIDAsIDc2MzYsIDY1MTcxLCA5MTI0LCAwLCA3ODg5MiwgMCwgMjkxLCAwLCAwLCAyMDI3LCAKKyAgICA2NjIzMCwgNzgxNDIsIDc4MTM2LCAxMDQwMywgMCwgNDY0MCwgNjQ3MTMsIDEwMjI0LCAxMjA0MjksIDQyNTEyLCAxMjA0MzEsIAorICAgIDEyMDQzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE5MDk0LCA3NDIxMywgNzgyNCwgMCwgMCwgNDEyNzQsIDU3NzgsIAorICAgIDYzMDIsIDAsIDAsIDEyNjgwLCAxMTkxMzAsIDE0MTcsIDc3ODg5LCAxOTQ5MTQsIDk0NTIsIDAsIDc0MzkzLCAxMTU1MiwgMCwgCisgICAgMCwgMCwgNjUzOTEsIDAsIDEwMTcyLCA2NTQ1MywgNjM3ODksIDQxMjY0LCA3ODY1OCwgNjQyNiwgNDY0MSwgOTE3OSwgCisgICAgNjQ4MTksIDU1Mjc4LCA0MTI1NSwgNDIwMzYsIDQxNDY5LCA0MTI2OSwgMTIwNDEyLCA0MTI2NywgNDY0NiwgMTIwNDI1LCAKKyAgICA4NjUsIDQyMDM0LCA3ODI3NCwgNzgyNzMsIDQ2NDUsIDQyMDMzLCA3ODI3MCwgMCwgMCwgNjQ3MjgsIDAsIDc4NjczLCAKKyAgICA3ODY3NCwgMTY1OSwgOTE5LCA0Mjc4NCwgMTY3MSwgMTk1MDg5LCA2MDY5LCA5MjE5LCAxOTUwOTAsIDE2NjEsIDEzMTIwLCAKKyAgICA2Mzc4NCwgNjk4MTksIDEwMTQwLCA5NzEzLCAxMTkxNDMsIDAsIDAsIDAsIDIzMDYsIDEwNDg1LCAxMTg5NDMsIDYwNjgsIAorICAgIDEwNjEyLCAxOTUwOTksIDAsIDE5NTEwMSwgMTk1MDc4LCA0MTQ2MiwgMTk1MDgwLCAxOTUwNzksIDU0MjIsIDE5NTA4MSwgMCwgCisgICAgMCwgMCwgMTAyMjksIDEwNjM1LCA4MjYsIDE5NTA4MywgMTk1MDgyLCAxOTUwODUsIDE5NTA4NCwgMTk1MDg3LCA2NDgzLCAwLCAKKyAgICAxODA4LCA3ODQ4LCAwLCA4MTAwLCA3ODIyNywgNzg2NjksIDc4NjcwLCAxMzMwMSwgNzg2NjcsIDk2NjcsIDc4NjY1LCAKKyAgICA3ODg3MiwgMCwgMTEwMDMsIDk5MDQsIDAsIDAsIDEyMDY5MCwgOTE0NCwgMTA5MjEsIDAsIDc4NjgwLCA5ODQwLCA2NTEzMSwgCisgICAgNzg2NzgsIDc3ODQxLCAxMDMxMywgMCwgMCwgNjQzMjAsIDEwMjY1LCA3ODY4NiwgMTA5NjIsIDc4Njg0LCA0MzAwOCwgCisgICAgODk0NSwgNzg2ODMsIDAsIDQxLCAxOTUwNzIsIDE3OTIsIDEyMDUxNSwgMTk1MDczLCA4NjU1LCAxOTUwNzUsIDAsIDc3OTUxLCAKKyAgICAxMjA2NiwgMCwgMzg1LCA0MTUyLCAyNTg1LCAwLCAxMTkwNjgsIDMxMjYsIDAsIDc0MTM2LCAxMDk1NywgMCwgNDMyNTgsIDAsIAorICAgIDAsIDEzMTU3LCAwLCAwLCAzNTcwLCAwLCA3NDQzLCAwLCA0NDAwNiwgNjk5NywgMCwgMCwgNzg3OSwgODczOSwgMTEwNzUsIAorICAgIDAsIDY1MjE2LCAwLCA2OTc5NSwgMjU5MywgODQ2MywgNzgxMCwgOTE3ODYyLCA3ODM5LCAxMTk5MTMsIDc4ODA2LCAKKyAgICAxMTk5MTIsIDk2OTEsIDQ0MTEsIDc4ODAyLCAwLCAwLCA0MzQ0MiwgNzg3OTksIDY1MjU0LCAxMDA2NiwgMCwgMCwgMCwgMCwgCisgICAgMTMwNjEsIDgwMTYsIDc4Njg3LCAxOTkzMiwgNjQ4MzEsIDAsIDAsIDEyMzkwLCAxMTkxNzEsIDE2MzQsIDY4MTE1LCAwLCAKICAgICAxMTA1NiwgMCwgMTE5OTI1LCAwLCA0MTE2NSwgMTEzMjgsIDEyNDUwLCAwLCA0MTE2NiwgMCwgMTI0NTYsIDExOTkxNCwgCi0gICAgMTcxLCA1OTQxLCAxMjQ1MiwgOTE3NTQ0LCAxMjQ1OCwgMTI1MzEsIDAsIDQzMDEzLCA2MzgwMCwgNzQxNjIsIDAsIAotICAgIDEyMDQ4MywgMTk0OTIwLCAwLCAxMjQ1NCwgNjM4MDYsIDQyMTMyLCAxMjA2MywgMTk1MDc3LCAwLCAzMjMwLCAwLCAwLCAwLCAKLSAgICA1MjA5LCAyOTcsIDU4MTAsIDg1MjIsIDg0MTUsIDAsIDAsIDAsIDcwNzcsIDI0OTcsIDAsIDk2MCwgNzQxNTYsIDY5ODEsIDAsIAotICAgIDEyOTM4LCA0MjkyLCAwLCA3NDgxNSwgMTA1MTIsIDAsIDc0ODE0LCAwLCAwLCAwLCAyNTAzLCA3Mzc3OCwgMTc2MiwgCi0gICAgNzM4MzMsIDI0OTUsIDAsIDU4NDQsIDExOTEyNCwgMTE4ODM4LCAwLCAxMjY1NCwgNDY2MywgMTg5OSwgMCwgMjUwNywgMCwgCi0gICAgODcyNiwgNjU1OTQsIDAsIDAsIDAsIDg4OTIsIDAsIDAsIDAsIDAsIDU3ODIsIDQyMCwgMCwgMCwgMTIwNDYyLCAxMDc5NywgCi0gICAgNjM3OTQsIDAsIDAsIDAsIDYzNzk2LCAxMTg5NjUsIDAsIDY2NTgxLCAxMTkyMDUsIDQxNjA4LCAwLCAwLCAwLCA0NjU5LCAKLSAgICAxMjA3ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyOSwgMTIwNDcyLCAwLCA5MTc1NDgsIDAsIDAsIDQxMTg4LCAxMzI0NCwgCi0gICAgMTIwNDY2LCA0MjE2NywgMCwgMCwgNTM4MCwgMCwgMCwgMTE1NSwgMTEzNjUsIDQzMTI2LCAwLCAwLCA2NTY4NCwgMCwgCi0gICAgNTYwMSwgNjUxOTIsIDQyNzY1LCA2Mzc1MiwgMCwgNzk4NywgMCwgMTE3MiwgMCwgMCwgNDM2MDEsIDEyMDQ3NiwgNzQxMjYsIAotICAgIDU2MDMsIDAsIDQ0NzMsIDAsIDE5NDgyMywgMCwgNjUzNDcsIDY1MzQ2LCA2NTM0NSwgMCwgMCwgNTM0NywgMCwgMCwgCi0gICAgNzM4NjgsIDExODk0NCwgMTA1ODgsIDAsIDAsIDYzNzU1LCAwLCA1MzQzLCAxMjA0NzMsIDAsIDQ1NTUsIDUzNDEsIDAsIDAsIAotICAgIDAsIDUzNTEsIDAsIDQzMTA0LCA2NTI0NCwgOTE3ODkyLCA2NDU0MSwgNDI1MTksIDc0NDcyLCAwLCAwLCA3NDc2NSwgCi0gICAgOTE3ODg4LCAwLCA2NjM4LCAwLCA2NTExMywgMjcxLCA3NDE4MCwgNjUzNzAsIDg4MzUsIDY1MzY4LCAxMjY1MywgNjUzNjYsIAotICAgIDQyMTcyLCA0MTA4NiwgNjUzNjMsIDY1MzYyLCA2NTM2MSwgMTE5MTIsIDY1MzU5LCAxMTMyMywgNjUzNTcsIDExODAwLCAKLSAgICA2NTM1NSwgNTM0NSwgNjUzNTMsIDY1MzUyLCA2NTM1MSwgNzYxLCA2NTM0OSwgMTk5NTksIDAsIDAsIDAsIDAsIDAsIAotICAgIDY0NjQ3LCAwLCAwLCA0Njk5LCAwLCAwLCAwLCAwLCA2NDYwNSwgMCwgMCwgMCwgNDkxNiwgMCwgMzgwLCAxMDk1OCwgCi0gICAgNjY1NjMsIDkxNzkwNiwgMCwgOTc3MywgMTMxNjcsIDEyOTE4LCA0MTA5NiwgNzM5ODAsIDAsIDkxNzg5OCwgOTE3ODkzLCAKLSAgICAxMDY4NCwgMCwgOTE3ODk2LCAwLCA3OTQ2LCAxMjU0MSwgODE4MiwgMCwgMCwgMCwgMCwgMCwgMCwgOTAwNSwgMTIyNSwgCi0gICAgNjYzMCwgMCwgMCwgMCwgMCwgODg0NywgMCwgNjU4NzYsIDU1MzUsIDgzMjksIDc0NTkwLCAwLCAwLCAwLCAwLCAzMTI3LCAKLSAgICAyNTk1LCA2NTcxMywgMCwgMCwgNTYwNywgNDEwODksIDAsIDAsIDc0MjU2LCAyNjY1LCAxMTMwNCwgMCwgNzQyMDAsIDQ5NzAsIAotICAgIDg3NjQsIDEyMDQ1OSwgODkzNCwgMCwgNDE1NjYsIDQ0OTIsIDAsIDY1MDExLCA0MTA5MCwgMCwgMCwgMTE4OCwgNzI1NCwgCi0gICAgMTEwMCwgMCwgMCwgNDEwODEsIDI5MTIsIDExNzQ5LCAwLCAwLCAwLCAzNTcyLCAxMDAyMywgNDk1OSwgMTMwNzksIDAsIDAsIAotICAgIDk3MjksIDAsIDAsIDAsIDAsIDAsIDAsIDExODAzLCA3OTk2LCA5OTA3LCA0MTQ1MCwgMTMzMDQsIDAsIDAsIDQxNDUxLCAwLCAKLSAgICAwLCA4MjczLCAwLCAzNDUxLCAwLCA5NzIsIDQxNDUzLCAwLCAwLCA3Mzg4MywgMCwgNzM5NDUsIDAsIDM0NTUsIDE5OTU1LCAKLSAgICA5NTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAxMTM5NiwgMCwgMTEwMTksIDAsIDAsIDAsIDEyMDUwNywgNDEwNzgsIDAsIDI2MSwgCi0gICAgNTkyNywgNzc5MSwgMCwgMCwgMCwgMTA2OTYsIDAsIDYwNzMsIDk4MzgsIDExODkyMCwgMCwgNjA3NSwgMCwgMjgyLCAwLCAKLSAgICA2NDM3LCA3NDA3OCwgMCwgNjU4NjEsIDAsIDAsIDAsIDAsIDM0NzQsIDExODc4NywgMCwgMTIwNjU1LCA2MDgxLCAwLCAwLCAKLSAgICA3NDA3NiwgMCwgMCwgMCwgMCwgMCwgMCwgODc1MSwgMTI2MjMsIDEyMDI3MywgNzgxNiwgMTI2MzYsIDQ2NjUsIDEyNjI4LCAKLSAgICA0NjcwLCAxMjAyNzEsIDEyMDI3MiwgMCwgOTY0MiwgMTA5MTIsIDk1OCwgMCwgMTEzODcsIDAsIDQ2NjYsIDAsIDQ5MTUsIDAsIAotICAgIDQ2NjksIDAsIDY4MDk5LCAxMzI4NywgNDY2NCwgMTA4MzYsIDEyMDU1MCwgMCwgMCwgMCwgNDM1OTUsIDc0NTAsIDAsIAotICAgIDkxNzg3NSwgODY2NCwgOTY5NywgMzYwNiwgOTE3ODczLCAwLCAwLCA2NDgxNSwgMTA2MywgMTIwMjUwLCAxMjAyNTEsIAotICAgIDk3NzIsIDcyNTUsIDg4ODYsIDEzODksIDAsIDEyMDI1NywgMTIwMjU4LCAxMjAyNTksIDEyOTQxLCAxMjAyNTMsIDEyMDI1NCwgCi0gICAgMTIwMjU1LCAxMjAyNTYsIDEyMzAxLCAxMjAyNjYsIDEyMDI2NywgNDExMDIsIDY2NjA0LCAxMjAyNjIsIDEyMDI2MywgCi0gICAgMTIwMjY0LCAxMDE3LCA2NjYwMCwgNTIzLCA1MDUsIDE0NDcsIDc0NDM2LCAwLCAwLCAwLCA4NjA4LCA0Mjc4OSwgMCwgMCwgCi0gICAgMCwgMTE5MTk2LCAxMTMwNywgNjY3MDcsIDkxNzg3MSwgMCwgMTE3NDUsIDc5MTksIDAsIDE2NDEsIDAsIDAsIDg5NjYsIDAsIAotICAgIDAsIDU5MDgsIDAsIDAsIDc0NTYyLCAwLCAxNjk5LCA3NDE5MSwgNzQ4NDMsIDAsIDAsIDYzMDYsIDEwMTY5LCAwLCAKLSAgICAxMTkyNTEsIDAsIDM3NjYsIDEyMDQ1NywgMTIwNDU2LCAxMjA0NTUsIDY2MTEsIDI1NywgNDMxNzAsIDEzMTUzLCAwLCAKLSAgICA0MjM4NiwgMCwgOTQzNiwgMjU5OSwgMCwgNjQ5NiwgOTQ0OSwgNTkzMCwgMTE0NzYsIDExMDMzLCAxMTQ0NywgMCwgNTYyMiwgCi0gICAgMTIwNDM2LCA4NDc3LCAzNzYwLCAxNzE4LCA5NDQyLCA2NjQzMywgMzc3NiwgMCwgNDE0MzUsIDQzNTIsIDAsIDI0MzUsIAotICAgIDEyMDgwOSwgNTYyMSwgMCwgNDIwMSwgMzc3OCwgNDIwMywgNDIwMiwgNDIwNSwgNDIwNCwgMTIwNDQ3LCAzNzY4LCA2ODE0MiwgCi0gICAgNzY1LCA0MTQ0MCwgMzc2NCwgODQ3MywgMTIwNDQwLCA4NDY5LCAxMjA0MzgsIDEyOTQ3LCA0NTY0LCAwLCAwLCA3NDI3MSwgCi0gICAgNzM3NTMsIDAsIDAsIDAsIDAsIDUyMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDc0NzkzLCA1NjI2LCA3MzgwNywgMTE3NzEsIDAsIAotICAgIDAsIDAsIDAsIDUzNTMsIDU2MjUsIDc0MTc5LCAwLCAwLCAxMDEwLCA2NDU3MiwgMCwgNDI2MjMsIDY0Mjc3LCAwLCA2OTUyLCAKLSAgICAwLCAxMjA3NTIsIDExOTAwMywgMjU5MCwgNTYyOSwgNjU1NTIsIDc1NTEsIDEwMzI1LCA1NjMyLCAxMDQ3MSwgMTIwMDM4LCAKKyAgICAxNzEsIDU5NDEsIDEyNDUyLCA5MTc1NDQsIDEyNDU4LCAxMjUzMSwgNzg3NzksIDQzMDEzLCA2MzgwMCwgNzQxNjIsIDAsIAorICAgIDEyMDQ4MywgOTk2OSwgMCwgMTI0NTQsIDYzODA2LCA0MjEzMiwgMTIwNjMsIDc4NDI1LCA3ODQyNCwgMzIzMCwgMCwgMCwgMCwgCisgICAgNTIwOSwgMjk3LCA1ODEwLCA4NTIyLCA4NDE1LCAwLCA3ODQyOSwgNzg0MjgsIDcwNzcsIDI0OTcsIDAsIDk2MCwgNzQxNTYsIAorICAgIDY5ODEsIDAsIDEyOTM4LCA0MjkyLCAwLCA3NDgxNSwgMTA1MTIsIDAsIDc0ODE0LCA3ODg3NSwgMTI3NTA1LCA3ODg3NiwgCisgICAgMjUwMywgNzM3NzgsIDE3NjIsIDY5Nzk0LCAyNDk1LCA3ODg3MywgNTg0NCwgNzg4NzQsIDExODgzOCwgMCwgMTI2NTQsIAorICAgIDQ2NjMsIDE4OTksIDc4ODc3LCAyNTA3LCA2NDEyMSwgODcyNiwgNjU1OTQsIDAsIDAsIDAsIDg4OTIsIDAsIDAsIDAsIDAsIAorICAgIDU3ODIsIDQyMCwgMCwgMCwgMTIwNDYyLCAxMDc5NywgNjM3OTQsIDAsIDAsIDY0ODE0LCA2Mzc5NiwgNzc5NjUsIDAsIAorICAgIDY2NTgxLCAxMTkyMDQsIDQxNjA4LCAwLCAwLCA2Mzc5MiwgNDY1OSwgMTIwNzg4LCAwLCA0MzY3NiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzI5LCA3Nzk2OCwgMCwgOTE3NTQ4LCA3Mzk5LCAwLCA0MTE4OCwgMTMyNDQsIDEyMDQ2NiwgNDIxNjcsIDc0MzUsIDc4MTkzLCAKKyAgICA1MzgwLCAxMTkwODYsIDY5MjI1LCAxMTU1LCAxMTM2NSwgNDMxMjYsIDc3OTcyLCAwLCA2NTY4NCwgMCwgNTYwMSwgNjUxOTIsIAorICAgIDQyNzY1LCA2Mzc1MiwgMCwgNzk4NywgMCwgMTE3MiwgNjk3OTksIDY3ODYsIDQzNjAxLCAxMjA0NzYsIDc0MTI2LCA1NjAzLCAKKyAgICAwLCA0NDczLCAwLCAxOTQ4MjMsIDAsIDY1MzQ3LCA2NTM0NiwgNjUzNDUsIDAsIDAsIDUzNDcsIDY5ODAyLCAwLCA3Mzg2OCwgCisgICAgMTE4OTQ0LCAxMDU4OCwgMCwgMCwgNjM3NTUsIDAsIDUzNDMsIDc4NDIyLCAwLCA0NTU1LCA1MzQxLCAwLCAwLCAwLCA1MzUxLCAKKyAgICAwLCA0MzEwNCwgNjUyNDQsIDkxNzg5MiwgNjQ1NDEsIDQyNTE5LCA3NDQ3MiwgMCwgMCwgNzQ3NjUsIDkxNzg4OCwgMCwgCisgICAgNjYzOCwgMCwgNjUxMTMsIDI3MSwgNzQxODAsIDY1MzcwLCA4ODM1LCA2NTM2OCwgMTI2NTMsIDY1MzY2LCA0MjE3MiwgCisgICAgNDEwODYsIDY1MzYzLCA2NTM2MiwgNjUzNjEsIDExOTEyLCA0MzQxMCwgMTEzMjMsIDY1MzU3LCAxMTgwMCwgNjUzNTUsIAorICAgIDUzNDUsIDY1MzUzLCA2NTM1MiwgNjUzNTEsIDc2MSwgNjUzNDksIDE5OTU5LCAwLCA2Mzg1NiwgMCwgMCwgNzc5NTgsIAorICAgIDY0NjQ3LCA3Nzk1OSwgMTE5NTcsIDQ2OTksIDAsIDAsIDAsIDAsIDY0NjA1LCAwLCAwLCAwLCA0OTE2LCAwLCAzODAsIAorICAgIDEwOTU4LCA2NjU2MywgNzc5NTUsIDY5NzczLCA5NzczLCAxMzE2NywgMTI5MTgsIDQxMDk2LCA3Mzk4MCwgNjkyNDUsIAorICAgIDc4MjU0LCA5MTc4OTMsIDEwNjg0LCAwLCA5MTc4OTYsIDAsIDc5NDYsIDEyNTQxLCA4MTgyLCAwLCA2OTc4MCwgMCwgMCwgMCwgCisgICAgMCwgOTAwNSwgMTIyNSwgNjYzMCwgMCwgMCwgMCwgMCwgODg0NywgMCwgNjU4NzYsIDU1MzUsIDgzMjksIDc0NTkwLCAwLCAwLCAKKyAgICAwLCAwLCAzMTI3LCAyNTk1LCA2NTcxMywgNDIwMTMsIDAsIDU2MDcsIDQxMDg5LCAwLCAwLCA3NDI1NiwgMjY2NSwgMTEzMDQsIAorICAgIDAsIDc0MjAwLCA0OTcwLCA4NzY0LCAxMjA0NTksIDg5MzQsIDAsIDQxNTY2LCA0NDkyLCAwLCA2NTAxMSwgNDEwOTAsIDAsIAorICAgIDAsIDExODgsIDcyNTQsIDExMDAsIDAsIDAsIDQxMDgxLCAyOTEyLCAxMTc0OSwgNjk3OTIsIDAsIDAsIDM1NzIsIDEwMDIzLCAKKyAgICA0OTU5LCAxMzA3OSwgMCwgMCwgOTcyOSwgMCwgMCwgMCwgNDMzNjEsIDAsIDAsIDExODAzLCA3OTk2LCA5OTA3LCA0MTQ1MCwgCisgICAgMTMzMDQsIDAsIDEyNzI2MCwgNDE0NTEsIDAsIDExMDk1LCA4MjczLCAxMjc1MzMsIDM0NTEsIDAsIDk3MiwgNDE0NTMsIDAsIAorICAgIDAsIDczODgzLCAwLCA3Mzk0NSwgMCwgMzQ1NSwgMTk5NTUsIDk1MzgsIDAsIDY5ODA3LCAwLCAwLCAwLCAwLCAxMTM5NiwgMCwgCisgICAgMTEwMTksIDAsIDAsIDAsIDEyMDUwNywgNDEwNzgsIDAsIDI2MSwgNTkyNywgNzc5MSwgMCwgMCwgMCwgMTA2OTYsIDAsIAorICAgIDYwNzMsIDk4MzgsIDExODkyMCwgMCwgNjA3NSwgMCwgMjgyLCAwLCA2NDM3LCA3NDA3OCwgMCwgNjU4NjEsIDAsIDAsIDAsIAorICAgIDAsIDM0NzQsIDExODc4NywgMCwgMTIwNjU1LCA2MDgxLCAwLCAwLCA3NDA3NiwgNzg4NzksIDAsIDAsIDAsIDAsIDAsIAorICAgIDg3NTEsIDExNDk5LCAxMjAyNzMsIDc4MTYsIDEyNjM2LCA0NjY1LCAxMjYyOCwgNDY3MCwgMTIwMjcxLCAxMjAyNzIsIDAsIAorICAgIDk2NDIsIDEwOTEyLCA5NTgsIDAsIDExMzg3LCA3ODg3OCwgNDY2NiwgMCwgNDkxNSwgMCwgNDY2OSwgMCwgNjgwOTksIAorICAgIDEzMjg3LCA0NjY0LCAxMDgzNiwgMTIwNTUwLCAwLCA2OTc3NSwgMCwgNDM1OTUsIDc0NTAsIDAsIDkxNzg3NSwgODY2NCwgCisgICAgOTY5NywgMzYwNiwgOTE3ODczLCAwLCAwLCA2NDgxNSwgMTA2MywgMTIwMjUwLCAxMjAyNTEsIDk3NzIsIDcyNTUsIDg4ODYsIAorICAgIDEzODksIDAsIDEyMDI1NywgMTIwMjU4LCAxMjAyNTksIDEyOTQxLCA0MjY2MSwgMTIwMjU0LCAxMjAyNTUsIDEyMDI1NiwgCisgICAgMTIzMDEsIDEyMDI2NiwgNjk4MjAsIDQxMTAyLCA2NjYwNCwgMTIwMjYyLCAxMjAyNjMsIDEyMDI2NCwgMTAxNywgNjY2MDAsIAorICAgIDUyMywgNTA1LCAxNDQ3LCA3NDQzNiwgMCwgMCwgMCwgODYwOCwgNDI3ODksIDAsIDAsIDAsIDExOTE5NiwgMTEzMDcsIAorICAgIDY2NzA3LCA5MTc4NzEsIDAsIDExNzQ1LCA3OTE5LCAwLCAxNjQxLCAwLCAwLCA4OTY2LCAwLCAwLCA1OTA4LCAwLCAwLCAKKyAgICA2NzQ0LCAwLCAxNjk5LCA3NDE5MSwgNzQ4NDMsIDAsIDAsIDYzMDYsIDEwMTY5LCAwLCAxMTkyNTEsIDExODkzOSwgMzc2NiwgCisgICAgMjM4OSwgMTIwNDU2LCAxMjA0NTUsIDY2MTEsIDI1NywgNDMxNzAsIDEzMTUzLCAwLCA0MjM4NiwgMCwgOTQzNiwgMjU5OSwgCisgICAgMCwgNjQ5NiwgOTQ0OSwgNTkzMCwgMTE0NzYsIDExMDMzLCAxMTQ0NywgMCwgNTYyMiwgMTIwNDM2LCA4NDc3LCAzNzYwLCAKKyAgICAxNzE4LCA5NDQyLCA2NjQzMywgMzc3NiwgMCwgNDE0MzUsIDQzNTIsIDAsIDI0MzUsIDEyMDgwOSwgNTYyMSwgMCwgNDIwMSwgCisgICAgMzc3OCwgNDIwMywgNDIwMiwgNDIwNSwgNDIwNCwgMTIwNDQ3LCAzNzY4LCA2ODE0MiwgNzY1LCA0MTQ0MCwgMzc2NCwgCisgICAgODQ3MywgNjM3MywgODQ2OSwgMTIwNDM4LCAxMjk0NywgNDU2NCwgMCwgMCwgNzQyNzEsIDczNzUzLCA4Mzc0LCAwLCAwLCAKKyAgICA2ODI5LCA1MjI1LCAwLCAwLCAwLCAwLCAxMTk2MTUsIDAsIDc0NzkzLCA1NjI2LCA3MzgwNywgMTE3NzEsIDAsIDAsIDAsIDAsIAorICAgIDUzNTMsIDU2MjUsIDc0MTc5LCAwLCAwLCAxMDEwLCA2NDU3MiwgNDE3ODAsIDQyNjIzLCA2NDI3NywgMCwgNjk1MiwgMCwgCisgICAgMTIwNzUyLCA3ODc2MiwgMjU5MCwgNTYyOSwgNjU1NTIsIDc1NTEsIDEwMzI1LCA1NjMyLCAxMDQ3MSwgMTIwMDM4LCAKICAgICAxMjAwMjcsIDEyMDAyOCwgMTIwMDI1LCA1NjI4LCAxMjAwMzEsIDk3MCwgMTIwMDI5LCA0NzcyLCAyNDAwLCA1NjI3LCAKLSAgICAxMjAwMTcsIDEyMDAxOCwgMTIwMDIzLCA2NDI3NSwgMTIwMDIxLCAxMDk2MSwgMCwgMjAzLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA2NDM3OCwgNDIwNTQsIDAsIDAsIDU1NCwgMTE5NjQ5LCAxMTM1OCwgMCwgMTIxODIsIDQyMDQ4LCAxMTA2NSwgMCwgNzM4OTEsIAotICAgIDAsIDAsIDU2OTQsIDc2ODksIDc0NTI4LCA5MzIzLCA0MzI1LCAzMDQ3LCAxMDMxNywgMTc1LCAwLCAwLCA3NDYwNSwgMCwgMCwgCi0gICAgMTI0MywgNDIxNTQsIDU0MzEsIDY2NTIsIDAsIDAsIDAsIDAsIDY4MTE4LCAwLCAxMTI5LCAwLCAwLCA2NTkwMCwgMTk4NiwgCi0gICAgNzg0NiwgMCwgODY2MSwgMCwgNjUyNTUsIDAsIDM4NDUsIDQ0OTAsIDAsIDY2NDksIDc0NDAwLCAxNDU2LCA3NTMwLCAKLSAgICAxMTk3NywgNzI0OSwgODM2NiwgMCwgNzc1NiwgMTIzNDIsIDAsIDUxLCA0MTUxNiwgMCwgODU3MCwgOTU2OCwgMCwgNDU2LCAKLSAgICA3MDI2LCA4MTQ1LCAxMTY4LCA5MjUxLCA5MDgyLCAwLCA2NDA1NSwgNDI3ODEsIDM4NjYsIDEyMzIzLCA0MTUxMiwgNzM4MDUsIAotICAgIDY4MTIxLCAwLCA0MTQ5NCwgMCwgNDY2MCwgMCwgMTA0MDUsIDAsIDAsIDAsIDAsIDQyMDQwLCA3MzkxOCwgMTE5NjI3LCAKLSAgICA3OTQ0LCA0MTQ1NCwgMTI2MDUsIDAsIDAsIDQxNDU1LCAyMzYsIDAsIDAsIDgyMTQsIDAsIDAsIDAsIDQxNDU3LCAwLCAKLSAgICAxMTk1ODksIDE5NjksIDIzODQsIDgwOTcsIDAsIDAsIDAsIDAsIDg3NjYsIDAsIDkxNzg2MywgNTg1NCwgMCwgMTA1ODMsIDAsIAotICAgIDExOTk4OSwgMCwgMTA0MTYsIDkxNzg2OSwgMzg3MiwgMCwgMCwgODQyOSwgMCwgMCwgMjgzOCwgOTE3ODY3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5MTc4NjQsIDEyMDgxMywgMTA1NTMsIDE2NjIsIDg0ODMsIDAsIDQzNjA1LCA1ODkyLCA5MTc4NjgsIDAsIAotICAgIDczNzQyLCA2NiwgNjUsIDY4LCA2NywgNzAsIDY5LCA3MiwgNzEsIDc0LCA3MywgNzYsIDc1LCA3OCwgNzcsIDgwLCA3OSwgCi0gICAgODIsIDgxLCA4NCwgODMsIDg2LCA4NSwgODgsIDg3LCA5MCwgODksIDAsIDEwMzU3LCAwLCA4MTcwLCAxNzA0LCA4NTU2LCAwLCAKLSAgICA5NjU5LCAwLCAwLCAwLCA5NTU2LCAwLCA0NTAzLCAxMTM1MywgOTY0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQyMjksIAotICAgIDY2NTkzLCA2NDM4LCAwLCA5MTA5LCAxMTk1NjUsIDEyODksIDY0NTk5LCAwLCAwLCAwLCA2NTUwNywgMjQ0NywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzM3NTAsIDAsIDAsIDE5OTM3LCAwLCAwLCAwLCA1Njc1LCAyNTQsIDAsIDAsIDAsIDQyNDI1LCA4OTE4LCAKLSAgICA2NDAwMywgNTcxNiwgNDIzMTIsIDAsIDAsIDY5NzIsIDQyODI2LCAwLCA0MjQ2NCwgMTIwNTY3LCAwLCAwLCA3NDc5NiwgCi0gICAgNjQ0MDAsIDY0NjkzLCAwLCAwLCA2NTQyOSwgOTUxNSwgNDQzNSwgMCwgMCwgMCwgMCwgMTE3ODUsIDAsIDY0NjcxLCAKLSAgICA0MTk3OCwgMTQxMiwgNDU5NCwgMTM5MSwgMTA1MzYsIDgwNjcsIDk5MDEsIDc3NzUsIDAsIDAsIDc0NTg4LCAxMjA3NDgsIAotICAgIDMxNDAsIDAsIDc5NjAsIDQzMjcxLCAwLCAxMjUxOCwgMTA5MDksIDAsIDE0MjgsIDEyNDcyLCAwLCAwLCA3Njk5LCAxMjM5MywgCi0gICAgMCwgMCwgMCwgNzQ1MTgsIDkwNjMsIDAsIDQyNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0NTU0LCAKLSAgICAxMDU3NCwgMzg3OCwgMCwgNDIzNTIsIDE3NTIsIDczNzg1LCAwLCA0MjUwNiwgMCwgMTAxOTksIDAsIDAsIDAsIDY1OTE5LCAKLSAgICAwLCAwLCA3MjAsIDMyNCwgMCwgMCwgMCwgMCwgMTQ2NCwgNDA5ODUsIDAsIDc5NzQsIDAsIDY4MTIzLCAwLCA2NDQ4OCwgMCwgCi0gICAgMCwgMCwgNzQ3ODcsIDAsIDAsIDAsIDY1NTk3LCAwLCAwLCAwLCAxMzAyLCAwLCAwLCAwLCAwLCAwLCA1MjA0LCA3NDc3NCwgCi0gICAgMCwgMCwgMCwgMzk5NSwgMCwgNjU2MDgsIDM3MTQsIDAsIDAsIDAsIDEwOTk5LCAxMTc1MCwgMCwgMTI3MDA0LCAwLCAwLCAwLCAKLSAgICAwLCA4MTMwLCA4NjcyLCAxMDg0NSwgMTE5NjQsIDAsIDAsIDAsIDAsIDAsIDQyODYzLCA3MzgzOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDY4LCA2MTIsIDAsIDY0NDAxLCA2NjQ0OCwgMCwgMCwgMTY3NCwgMCwgNTgyMywgMCwgMTIyODAsIDAsIDU0MCwgCisgICAgMTIwMDE3LCAxMjAwMTgsIDEyMDAyMywgNjQyNzUsIDEyMDAyMSwgMTA5NjEsIDAsIDIwMywgMCwgMCwgMCwgMCwgNzgzNTAsIAorICAgIDAsIDY0Mzc4LCA0MjA1NCwgMCwgMCwgNTU0LCAxMTk2NDksIDExMzU4LCAwLCAxMjE4MiwgNDIwNDgsIDExMDY1LCAwLCAKKyAgICA3Mzg5MSwgMCwgMCwgNTY5NCwgNzY4OSwgNjk3OTgsIDkzMjMsIDQzMjUsIDMwNDcsIDEwMzE3LCAxNzUsIDAsIDAsIAorICAgIDY5NzY0LCAwLCAwLCAxMjQzLCA0MjE1NCwgNTQzMSwgNjY1MiwgMCwgNjk3NzAsIDQzNjUxLCAwLCA2ODExOCwgMCwgMTEyOSwgCisgICAgMCwgMCwgNjU5MDAsIDE5ODYsIDc4NDYsIDc4ODA0LCA4NjYxLCAwLCA2NTI1NSwgMCwgMzg0NSwgNDQ5MCwgMTE4OTY5LCAKKyAgICA2NjQ5LCA3NDQwMCwgMTQ1NiwgNzUzMCwgMTE5NzcsIDcyNDksIDgzNjYsIDAsIDc3NTYsIDEyMzQyLCAwLCA1MSwgNDE1MTYsIAorICAgIDAsIDg1NzAsIDk1NjgsIDkxNzg2MywgNDU2LCA3MDI2LCA4MTQ1LCAxMTY4LCA5MjUxLCA5MDgyLCAwLCA2NDA1NSwgCisgICAgNDI3ODEsIDM4NjYsIDEyMzIzLCA0MTUxMiwgNzM4MDUsIDY4MTIxLCAwLCA0MTQ5NCwgMCwgNDY2MCwgMCwgMTA0MDUsIDAsIAorICAgIDc4ODAzLCAwLCAwLCA0MjA0MCwgNzM5MTgsIDExOTYyNywgNzk0NCwgNDE0NTQsIDEyNjA1LCAwLCA0MjIwNSwgNDE0NTUsIAorICAgIDIzNiwgNjQwNTEsIDc4ODY3LCA4MjE0LCAwLCAwLCAwLCA0MTQ1NywgMCwgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCAKKyAgICA5MTc4NjQsIDAsIDAsIDc4MDI5LCA4NzY2LCAwLCA3ODA3OSwgNTg1NCwgMCwgMTA1ODMsIDAsIDExOTk4OSwgMCwgMTA0MTYsIAorICAgIDkxNzg2OSwgMzg3MiwgOTE3ODY4LCAwLCA4NDI5LCAwLCAwLCAyODM4LCA5MTc4NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDExMDk2LCAxMjA4MTMsIDEwNTUzLCAxNjYyLCA4NDgzLCAwLCA0MzYwNSwgNTg5MiwgNDM0MTgsIDAsIDczNzQyLCA2NiwgCisgICAgNjUsIDY4LCA2NywgNzAsIDY5LCA3MiwgNzEsIDc0LCA3MywgNzYsIDc1LCA3OCwgNzcsIDgwLCA3OSwgODIsIDgxLCA4NCwgCisgICAgODMsIDg2LCA4NSwgODgsIDg3LCA5MCwgODksIDExOTg2MiwgMTAzNTcsIDczODUsIDgxNzAsIDE3MDQsIDg1NTYsIDAsIAorICAgIDk2NTksIDAsIDAsIDAsIDk1NTYsIDAsIDQ1MDMsIDExMzUzLCA5NjQ3LCAwLCA3ODE4NSwgMCwgMCwgMCwgNzg4ODYsIDAsIAorICAgIDAsIDc0MjI5LCA2NjU5MywgNjQzOCwgMCwgOTEwOSwgNzg4ODIsIDEyODksIDY0NTk5LCAwLCAwLCAwLCA2NTUwNywgMjQ0NywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNjMzNCwgMCwgMCwgMTk5MzcsIDAsIDAsIDAsIDU2NzUsIDI1NCwgMCwgMCwgMCwgNDI0MjUsIAorICAgIDg5MTgsIDY0MDAzLCA1NzE2LCA0MjMxMiwgMCwgMCwgNjk3MiwgNDI4MjYsIDAsIDQyNDY0LCAxMjA1NjcsIDAsIDAsIAorICAgIDc0Nzk2LCA2NDQwMCwgNjQ2OTMsIDAsIDc3ODYxLCA2NTQyOSwgOTUxNSwgNDQzNSwgMCwgNDI1MjIsIDAsIDAsIDExNzg1LCAKKyAgICAwLCA2NDY3MSwgNDE5NzgsIDE0MTIsIDQ1OTQsIDEzOTEsIDEwNTM2LCA4MDY3LCA5OTAxLCA3Nzc1LCAwLCAwLCA3NDU4OCwgCisgICAgMTIwNzQ4LCAzMTQwLCAwLCA3OTYwLCA0MzI3MSwgMCwgMTI1MTgsIDEwOTA5LCAxMjc1MDgsIDE0MjgsIDEyNDcyLCAwLCAwLCAKKyAgICA3Njk5LCAxMjM5MywgMCwgMCwgMCwgNzQ1MTgsIDgyMjMsIDAsIDQyNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQzNDE5LCAwLCA2NDU1NCwgMTA1NzQsIDM4NzgsIDAsIDQyMzUyLCAxNzUyLCA3Mzc4NSwgMCwgNDI1MDYsIDAsIDEwMTk5LCAKKyAgICAwLCAwLCAwLCA2NTkxOSwgMCwgNjY5NSwgNzIwLCAzMjQsIDAsIDAsIDQzNDA2LCAwLCAxNDY0LCA0MDk4NSwgMCwgNzk3NCwgCisgICAgMCwgNDM0NzQsIDAsIDY0NDg4LCAwLCAwLCA2NDA0MSwgNzQ3ODcsIDAsIDc4ODY1LCAwLCA2NTU5NywgMCwgNzg4NjMsIDAsIAorICAgIDEzMDIsIDAsIDc4ODYxLCAwLCAwLCAwLCA1MjA0LCA3NDc3NCwgNDM0MDQsIDQzMzk2LCAwLCAzOTk1LCA2ODM2MCwgCisgICAgNjU2MDgsIDM3MTQsIDAsIDAsIDAsIDEwOTk5LCAxMTc1MCwgMCwgNDMyNTEsIDY4NjYwLCA0MzMwMSwgMCwgMTIwNTU3LCAKKyAgICA4MTMwLCA4NjcyLCAxMDg0NSwgMTE5NjQsIDAsIDAsIDAsIDAsIDY4NDU1LCA0Mjg2MywgNzM4MzksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDQ2OCwgNjEyLCAwLCA2NDQwMSwgNjY0NDgsIDY4Mzc2LCAwLCAxNjc0LCAwLCA1ODIzLCAwLCAxMjI4MCwgMCwgNTQwLCAKICAgICA3NDU2NCwgMCwgMCwgODQzMiwgMCwgMTEwNzMsIDAsIDY0MzE2LCAwLCAwLCA4MjAsIDQxNzQxLCAwLCAxMjA2NjcsIDAsIAogICAgIDY0Njg0LCAxMjY5OTIsIDMzNTksIDc4MDAsIDAsIDY1MTc3LCA2MjI2LCAzNTMsIDEyMzk2LCAwLCAxMTk2MTIsIDY0NzQyLCAKLSAgICAwLCAwLCAwLCAwLCAxMjQxMiwgMTk5NDEsIDAsIDEyMDI3NywgMCwgMTg4NCwgOTQ4MSwgNDI0MTgsIDAsIDQxMTU3LCAwLCAKLSAgICAxMTk1LCA2NDg5OCwgNzkyNCwgMCwgNDExNTEsIDIwMTAsIDAsIDQxMzI4LCA0MjM0NCwgMCwgMTI0MDksIDAsIDQzNjAsIAotICAgIDEyNzAwOSwgOTczOSwgMCwgNzQzOTIsIDczOTIxLCAwLCA0MjUyMSwgODUzOSwgMCwgMCwgMCwgMCwgNDc4OCwgMCwgMCwgCi0gICAgNjU3MzQsIDAsIDY0MzUzLCAwLCAxMzA3NSwgNzQ0MjksIDAsIDY0NTY5LCA0MzUzMiwgMTA4MzcsIDI0OTIsIDAsIAotICAgIDExODkwMSwgMCwgNDExMzYsIDY0MzUxLCAxMTgxMywgOTY0OSwgNDExNTQsIDExOTYxNywgNTEyOCwgNDAzOCwgNDExNDMsIAotICAgIDY1NjA0LCA2NDg1OSwgNDE1OTIsIDAsIDE2NDgsIDU0MzUsIDAsIDAsIDQxMzQzLCAxMTk4NDgsIDY1NDM5LCAxMjcwOSwgCi0gICAgNjk4NiwgMCwgMCwgMCwgNDEzNDksIDAsIDEyNTgxLCAxMDM3NCwgNTE3NSwgMCwgNzM4MDYsIDEwMjU0LCAwLCAxMDI3OCwgCi0gICAgMTAyNjIsIDEyMDI5NSwgNDEzNDYsIDAsIDYwNywgMCwgMCwgMCwgMTI5MjMsIDEwMzE0LCAxMDI4MiwgNjU0NzcsIDEwMzc4LCAKLSAgICAxMjAyOTcsIDQwOTc2LCA4MjY1LCAwLCAxMTk4MzQsIDQwOTc1LCA1ODQwLCA0MjgzOCwgMCwgNDA5NzgsIDAsIDExOTg0MCwgCi0gICAgMCwgMCwgMCwgNjY0NDQsIDEwNTM4LCAwLCAyNTUwLCAxMTk4MzYsIDAsIDAsIDAsIDM1MjUsIDAsIDAsIDAsIDAsIDU2MTksIAotICAgIDY1ODIyLCAwLCAxOTQ4ODIsIDc0NTUsIDAsIDU2MTYsIDExNDg2LCA5NjU2LCAwLCAwLCAxMDcyNywgNTYxNSwgMCwgCi0gICAgMTIwNTUxLCA0MjM4MCwgNjQ4OTUsIDAsIDY2NDUxLCA4MDgsIDU0NTUsIDExMzQ3LCAwLCAxMDI2LCA1NjIwLCAxOTQ4ODcsIAotICAgIDAsIDExMzUwLCA1NjE3LCAwLCA5MjI1LCA2NDYzOSwgMTI3MDczLCA5MTQ1LCAwLCAxMzM4LCAxMjA1ODEsIDAsIDEyNzM5LCAKLSAgICAwLCAzMDg0LCAwLCAwLCA0MTAyNSwgNjAzNywgMCwgMzk3NCwgMCwgMTAyOTAsIDAsIDMwODMsIDEwMzIyLCAwLCAwLCAwLCAKLSAgICA0MTAzNiwgMCwgMCwgNDMzMjEsIDY1NjA2LCAwLCA0MTAzMiwgNDIzODgsIDAsIDY0NzAwLCAxMDAxMSwgMTQ0NSwgNDA5NjEsIAotICAgIDAsIDE5NDg5MywgMCwgNDA5NjAsIDAsIDAsIDAsIDQwOTYzLCAwLCAxMDQwMiwgMCwgMCwgMCwgMTA2MDMsIDAsIDAsIDAsIAotICAgIDAsIDE5NDkyMywgMTAwODMsIDEyNzA2OSwgMCwgMTk0OTIyLCAwLCAwLCAwLCA5MDczLCA0MjU4NSwgNjQzMDIsIDEwNzA0LCAKLSAgICA2NTAzMCwgNDc4NywgMCwgNzQ4MjksIDAsIDY1NDIzLCAwLCAwLCA5NTcwLCAwLCA5NTI1LCAyNjg5LCA5MTc2MjYsIAotICAgIDY1NDI2LCAwLCA5MTc2MjQsIDAsIDAsIDQwOTY2LCA5MTc2MjMsIDEzMjg2LCAzOTk4LCA0MjU5OCwgNDI1OTYsIDUwMywgMCwgCi0gICAgODczNSwgMjY5MCwgNjY0ODgsIDQyODM2LCAxOTQ5MTMsIDQxOTU0LCA5MTc2MTcsIDE2NTIsIDc3MiwgMTk0ODc3LCA4MzEwLCAKLSAgICA2NTQyOCwgMzQ4NywgMCwgMzU4NSwgMTAxOTQsIDQzMzIwLCAxMTkxNTksIDAsIDE5NDg3NCwgNjQ2OCwgNDE5NzYsIDk3MjAsIAotICAgIDkxNzYwNiwgMTE3NjcsIDQxOTcwLCAwLCA1ODM2LCAxMjM1OCwgMCwgNDM1NSwgOTA0OCwgMTIxODAsIDY1MDI3LCA2NDY4MCwgCi0gICAgNjUwMjUsIDY0NzU3LCAwLCA0MTQ4OCwgMCwgODUyNywgMTk0OTE3LCAxMjM2MiwgMTI0MzUsIDEyMzYwLCA0MTA1MywgCi0gICAgMzI2NiwgMCwgMTIzNTYsIDg2MTYsIDQxNDY2LCAwLCAwLCAxMTQ1MCwgMCwgMzYzOCwgMTIzNTQsIDAsIDMyMTYsIDAsIAotICAgIDIzNTgsIDAsIDg2MzMsIDAsIDAsIDAsIDAsIDAsIDAsIDExNzU5LCAwLCAwLCA3NDgyMywgMCwgNDE0MjMsIDgwNzgsIAotICAgIDEwNTA0LCAwLCAwLCAwLCAwLCA3MDAyLCAwLCA0MTQzMCwgNDIyNjcsIDQxMDUxLCA0MTQ4NCwgMCwgMCwgNDEwNTAsIAotICAgIDQxNDczLCAxMDQ2NiwgMTMwOTksIDAsIDAsIDAsIDY0MzUsIDAsIDExMzYyLCAwLCAwLCA2NTM4MiwgMCwgNDE0MjAsIDAsIAotICAgIDM2MjUsIDAsIDQxNDA5LCAwLCAwLCAyMDQxLCA5MTc4LCA5NjcyLCA0MTQyNywgNDM1NDEsIDQzMzE3LCAwLCAwLCAwLCAKLSAgICA0MTQyNCwgOTE3NTk4LCAxMjA1NDYsIDAsIDAsIDAsIDQxNDE3LCAxMjYxLCAwLCAwLCAxMjEwMiwgMTE5NjYyLCA0MTQwMSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDIyOTAsIDMyNzUsIDAsIDQyMzI5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMDk4OSwgNzQyMzQsIDAsIAotICAgIDEwNTk4LCAwLCAyNjY5LCA5MDMsIDAsIDI5MjAsIDAsIDAsIDc0NjAzLCA2NDUwNCwgMTk5MjgsIDAsIDAsIDM5MTcsIDAsIAotICAgIDExNzMyLCAwLCAwLCA0MTQ0OCwgNDE0NjEsIDAsIDAsIDkxNzU1OCwgMCwgODgxOSwgMTI2NjMsIDAsIDQxMTg0LCA3NDAxNCwgCi0gICAgMjMyLCA3NDgzNSwgMTIwNjQ2LCA5MTY4LCA2NTc4NiwgMCwgMCwgMCwgOTA5NCwgMCwgMTE3NTgsIDAsIDAsIDEwNjQsIAotICAgIDQyNDY3LCAwLCAxMDExNSwgMTk5MjQsIDAsIDAsIDc4NjIsIDY0NTUxLCAxMzIyNCwgODUxNiwgNDE4NjIsIDY2NjUwLCAKLSAgICA3NTYxLCAwLCA3NDAxOCwgMTg3OCwgMCwgMCwgMjkxMSwgMCwgNDExNzgsIDU0MjcsIDY0ODIzLCAwLCAwLCAxMjYxNywgCi0gICAgNDExNzQsIDAsIDQxNDU4LCAwLCA0MTQ2MywgNDI0MTMsIDExMjkyLCAyNDA2LCA3NzUsIDAsIDY1NTg0LCAwLCA2MDc0LCAKLSAgICA5NjE4LCAxOTQ5MDMsIDAsIDAsIDAsIDE5NDkwMSwgNDE0MzYsIDM2NTYsIDAsIDE5NDg5OSwgNDE0NTYsIDAsIDE1OTksIAotICAgIDExMzMzLCAwLCA4NTE0LCA4NTEzLCAwLCAxNjEzLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDUwMCwgNDE0NjAsIDEwMTQ1LCAKLSAgICAxMDU0MiwgMCwgMTIwMzc5LCAwLCA5OTA1LCAwLCA2NTczMCwgMCwgMTIwMzc0LCA4NDI3LCAxMjAzNzUsIDAsIDEyMDM3NiwgCi0gICAgMCwgMTE0OTcsIDY0Njg3LCA3NDAwOCwgMTIwMzcxLCAzODcxLCAwLCAwLCA5MTExLCA1NzQxLCAwLCAxOTQ4NDYsIAotICAgIDEyMDM2NiwgMTE5MTExLCAxMjA3NDUsIDAsIDEyMDM2OSwgMCwgMTE2NDgsIDAsIDAsIDEyMDM2NCwgNDE1ODcsIDEyMDM2NSwgCi0gICAgMCwgNzQzMjIsIDQyMTEzLCAwLCAwLCAxMjE3MiwgMCwgNzQ1MzAsIDAsIDY1NzIzLCAwLCA3Mzg3MSwgNjU3MjQsIDc5MjgsIAotICAgIDEyMDM1NCwgMCwgNDE1OTUsIDczNzMwLCAwLCA0MjExOCwgNzM4MzAsIDY2MDQyLCAxMDM1NSwgMCwgNzg3NSwgMCwgCi0gICAgNDE1OTgsIDM5OTMsIDAsIDE1NDUsIDQwOTcxLCA1MzYsIDAsIDExOTk1OSwgMCwgMCwgNjUxNzMsIDY1Mjg2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0MTM3NSwgNTQwMiwgMCwgMCwgMTY4NywgMTIwNTAzLCAwLCAwLCAwLCA2NDMyNiwgNDA5NjksIDEwNTI2LCAKLSAgICAwLCA4MzIzLCA0MDk2OCwgMTMzOSwgMTE3MzEsIDAsIDAsIDY1NDYwLCAxMjI0MiwgMCwgODAyMCwgMTA4NDMsIDExNTU0LCAKLSAgICAwLCAwLCA4MjY2LCA0MTAwNiwgNjU3MjIsIDAsIDEwNzEwLCAwLCAxMTg5NDIsIDAsIDAsIDExOTE1NSwgMTk1MDkxLCAwLCAKLSAgICAxMTk2MzYsIDAsIDEyMDY4NywgMCwgMCwgMTE3NTUsIDY2MzA1LCAwLCAwLCAxMDkxNywgMTIwNzY3LCAwLCAxMTI3MiwgCi0gICAgMjA0MCwgNDEyNDcsIDQxMzI2LCAwLCAxNzQxLCA0MjM3MCwgMTIyNywgMCwgMCwgMTE0MTMsIDAsIDAsIDAsIDE1ODYsIAotICAgIDQ5NzgsIDAsIDE5ODQsIDAsIDAsIDEyMDY1MSwgNDA5ODQsIDAsIDkzNzMsIDAsIDEyOTE2LCA2Mjg0LCAwLCA0MTY2MywgMCwgCi0gICAgMCwgMCwgOTIzNywgOTM4NSwgNDE2NDgsIDAsIDAsIDAsIDQxNjY2LCAxODMwLCA3Mzc4MywgNDEwNzYsIDQxMjg3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0MTk4NywgNDE2NzYsIDAsIDEyMDgyMywgMCwgNDE2NzAsIDAsIDAsIDI3OTYsIDY1MTY3LCAxMTY4MywgCi0gICAgOTkwMiwgNzQ1MjEsIDAsIDExNDUxLCAwLCAwLCA0MjYzMSwgMjM1OSwgMCwgNjc4NDQsIDc0MTY0LCA0MTIzOCwgNTQ4LCAKLSAgICAxMTQwNSwgMTMxMzMsIDY0MzY4LCAwLCAwLCAwLCAzOTcsIDY0Njc4LCA0MjEzOSwgOTU0NywgOTU5MCwgMCwgMTYxNCwgMCwgCi0gICAgNjQzNTYsIDY2MzA3LCA2NjUxLCAxMzU4LCAwLCA0MjgsIDk2MjAsIDE0NjYsIDAsIDEwOTgyLCAwLCAxMzMzLCAwLCA0MDcsIAotICAgIDY0MjUsIDAsIDc0MjUzLCAwLCAwLCAwLCA1ODA0LCAxMTk3NiwgODU1NCwgMCwgMCwgMCwgOTA1NywgNDIyOTQsIDQxMjE4LCAKLSAgICAwLCAwLCAwLCAxODgzLCAxMDk1MiwgODA0OCwgMCwgNDEyMjUsIDAsIDExODk1NSwgMCwgMCwgMCwgNDQwNywgMCwgNjU4MDksIAotICAgIDExOTA3NCwgMTk0ODIxLCA4NDQ4LCA2ODEyMiwgNzQxODMsIDAsIDEyNjc1LCAxMjY1OSwgMCwgNDIzNjMsIDEyMDYyNCwgCi0gICAgMTk0ODI0LCAxMTkwNTgsIDEwNzY2LCAxMjAxMiwgMjM4NiwgNjQ3MzIsIDkxNzAsIDkxNzgyMSwgOTEyMywgNjQ1ODUsIAotICAgIDEyMDUwMCwgMCwgMCwgNDIwNTEsIDAsIDQxNjQsIDkwODEsIDAsIDEyMDU2OSwgNDIwNDksIDQyMDQyLCA4NzA5LCAwLCAwLCAKLSAgICAxMjA2MzcsIDQyNDE5LCAwLCA0MjA0NywgMCwgMCwgODQ3MCwgMTE4MDcsIDY1ODk3LCA1NzcsIDAsIDAsIDc0MzAwLCAwLCAKLSAgICAwLCA3NDg0MCwgMCwgMCwgMCwgMCwgODczNiwgMTQxNCwgNDI2NDMsIDk2ODMsIDAsIDc0MzQ0LCAwLCAyNTM2LCAwLCAKLSAgICA2NjMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYzMTcsIDAsIDY2MzE1LCA2NjMxNiwgMCwgMTEyNzMsIDAsIDQzMDA0LCAKLSAgICA3NTQxLCAwLCAwLCA5NjEsIDY0MzA3LCA2NjMyNCwgMCwgMCwgMzEwNiwgNjU5MTcsIDQxMjg0LCAxNjk2LCAwLCA4OTEsIAotICAgIDEyMTA1LCAwLCA0MjYyNCwgMTI4MDIsIDMyNjQsIDg4MjQsIDEzMjY4LCA0MzAwMywgMTA5MzYsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDIzMjIsIDAsIDAsIDExNDQ5LCAwLCA0Mjg2OCwgNDEyODUsIDM1NDcsIDAsIDAsIDAsIDAsIDQzMjE2LCA2MDg5LCAwLCAKLSAgICAwLCAwLCA0MTcwLCAxMDI5LCAwLCAwLCAxMTkyMjQsIDQyMzc0LCAwLCA3NDQsIDAsIDAsIDAsIDY1ODIzLCAwLCAwLCAKLSAgICAzNTUxLCAwLCAwLCA0NjIzLCAwLCAwLCA0NTk4LCAwLCA2NTEzNiwgMCwgMCwgMCwgMTA4NTEsIDAsIDYxNzksIDAsIDYxODAsIAotICAgIDAsIDExOTUyLCAxMjA3NzgsIDAsIDExOTcyLCAwLCAwLCAwLCAwLCAxNzcsIDAsIDYxNzYsIDEyMDU4MCwgMCwgMCwgNjE3NywgCi0gICAgOTAyMCwgMCwgMCwgNjE3OCwgMTIwMjQ5LCAxMjAyNDIsIDAsIDEyMDI0MywgNzUxOCwgODc1NCwgMCwgMTIwMjM3LCAKLSAgICA3NDU1MSwgNDMwODEsIDAsIDAsIDkxMzYsIDEyMDI0MCwgNDQwMSwgNDEyODAsIDAsIDg5NzQsIDIzMDgsIDAsIDc0MTQ5LCAKLSAgICAwLCAyMzE4LCAwLCA2NjM2MSwgODE5OCwgMCwgNjQzNjAsIDEyNjAxLCAwLCA2NTI2NiwgMTIwODI3LCA3NDMwNywgMCwgCi0gICAgNjk3MCwgNTQwNCwgNDMzMzIsIDM2NjcsIDc5MzYsIDEyOTI1LCAxMjY5ODksIDQyMDU1LCAwLCAwLCAxMTg5NDksIDEwODc0LCAKLSAgICA2NTUwNSwgMCwgMCwgNDIwNTMsIDAsIDQyMDU3LCAxMTA4MywgNDIwNTIsIDAsIDAsIDczODQ1LCAwLCA5NjY1LCAwLCAwLCAKLSAgICAxMzE4MSwgMCwgMCwgMCwgMCwgNzQxNDgsIDAsIDAsIDEyMDIyNSwgMTIwMjI5LCAxMjAyMjQsIDc0MTcyLCA0MTE0NSwgMCwgCi0gICAgMCwgMCwgNDExNDgsIDg2ODMsIDc1OTQsIDAsIDAsIDExOTA5MCwgMTA4NjksIDAsIDQxMTQ2LCAwLCAxMTQ0MSwgMCwgCi0gICAgMzUxMiwgOTE3NjEyLCAwLCA4MTAzLCAwLCAwLCA2NTE4NCwgMTE3ODAsIDQxNTYzLCA0Mjc5NiwgMCwgMTE5MTA2LCAKLSAgICA0MTU0NCwgNjUxNDYsIDAsIDAsIDAsIDAsIDE5OTQyLCAwLCAxMTg5MDgsIDc5ODgsIDEwNDM2LCA3NDI3MywgMzI3MSwgCi0gICAgNzM4MDQsIDY0NzExLCAwLCAwLCAwLCAwLCAzODA0LCAxMzA3MCwgMTE1NTcsIDQyMDQ0LCAwLCAxMDk1LCAwLCAzNTk5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA3NDM0NiwgNjY2OTcsIDAsIDExNjg0LCAwLCAwLCAwLCAwLCA0MjA0MywgMCwgNjY2NzcsIDAsIAotICAgIDQyMDQ2LCAxMjA3NTEsIDQwMzYsIDAsIDAsIDAsIDE5NDg2MiwgMCwgMTE5NTQsIDAsIDE0NTAsIDEyOTg2LCAxMzQwLCAwLCAKLSAgICA2NTQ0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjUzOSwgMCwgMCwgMCwgMCwgMCwgMCwgNDExOTAsIDM5NzMsIAotICAgIDE5NDg1MiwgNDU3NSwgNDExOTMsIDc5ODIsIDQyOSwgMCwgMCwgMCwgMTk0ODU0LCA2NTc5MiwgMCwgMTE4OTY4LCA2NDE3LCAKLSAgICAxMTg5MTgsIDAsIDAsIDE5NDg1MCwgMCwgMCwgNDkxOSwgMTA1OTAsIDAsIDc3NTUsIDAsIDAsIDY0NTQ4LCAwLCAxNjIxLCAKLSAgICAxMDIxNCwgNjUxMjYsIDAsIDAsIDAsIDEyMTg4LCAwLCAxNjE3LCA4MDUwLCAwLCA1MDE1LCAwLCAxMTkxNzQsIDQyNTkwLCAKLSAgICAxOTQ4NzEsIDE3NTYsIDAsIDAsIDY1NzY4LCAxMjA2OTQsIDQxODkyLCAwLCA3NTU1LCAxMzEwMywgNTQwOCwgMjgxNywgCi0gICAgMTIxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk1NywgODY4OSwgNjQ3MjMsIDEwNTYsIDAsIDc0MTQ3LCAwLCAwLCAwLCAKLSAgICA3MDczLCA2NTg1MCwgMTIzMjcsIDAsIDExOTAyOCwgMCwgMCwgMCwgMjM0MSwgODQ1MCwgODQ4NCwgODQ3NCwgMCwgMCwgMCwgCi0gICAgODQ2MSwgMCwgMTIxNTMsIDEyNzk5LCAwLCAxMjA2NTQsIDEyMDY4NCwgOTQ1MSwgNzU3MSwgMTMwNzMsIDAsIDAsIDY4MSwgCi0gICAgMCwgNzAzLCAwLCAzMjcyLCA4NzgxLCAxMjg5NCwgMCwgMTE3MDksIDAsIDc0NDQ2LCAwLCAwLCAwLCAxMTMzOCwgMTIwNzY4LCAKLSAgICAzMjc2LCAwLCAwLCA2NTkyOCwgMCwgMCwgNjUwMjEsIDY0Nzk1LCA3NDU3NCwgMCwgMTAwNDcsIDAsIDMyNjIsIDAsIDAsIDAsIAotICAgIDAsIDc0MzI5LCAxNjMsIDU3NiwgOTg5NSwgMTY1NSwgMCwgNzQ1OTEsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMDM5LCAwLCAwLCAKLSAgICA1NjIzLCA1NzE3LCA1Nzc2LCAwLCAwLCAwLCA0MTU5MSwgMTIwNTg2LCA2NTI1MiwgMTIwNzk1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA4ODg3LCAwLCA3Mjk1LCAxMTAzMSwgMCwgNDMxNTcsIDAsIDg5NDYsIDEwMzQ4LCAxMDQxMiwgODc1NSwgMCwgMCwgCi0gICAgNTcxOCwgMTMyMjEsIDAsIDAsIDAsIDAsIDAsIDg4MTAsIDc0NDk5LCA2ODYsIDAsIDAsIDQ2MTksIDExODk1NCwgNjY1NCwgCi0gICAgNzM3NjksIDAsIDAsIDEyMDQwLCA2NTY4OSwgMTAxMjgsIDY1MTE4LCAwLCAxMTkxNTEsIDExODg5MSwgMCwgMCwgMjQwMSwgCi0gICAgNjgxNDQsIDg3OTIsIDAsIDAsIDY1NDU1LCAwLCAwLCAwLCAxMTkxMjksIDAsIDEyODg2LCAwLCA2NjYyNCwgMCwgNDM1NTcsIAotICAgIDEwMzAwLCAxMDE2MSwgMTAzOTYsIDc0MTM1LCAwLCAwLCAwLCA3Mzg1MSwgMzAxMCwgNjQ0MSwgMCwgMTQ1OCwgNDE0NzUsIAotICAgIDAsIDAsIDAsIDExNDc5LCAwLCAwLCA5MTAwLCAxMjg2NCwgMCwgMCwgMTA2MSwgNjQ3ODAsIDIwMDEsIDQzMTExLCAwLCAwLCAKLSAgICA0MDUyLCAwLCA3NjI2LCAwLCAwLCAxMDQ1LCAwLCA1NjMxLCAwLCAwLCAwLCAwLCA3NDEyNywgMCwgMCwgODQ4NiwgMCwgCi0gICAgNzM3NTgsIDIzMzUsIDQzNjIsIDAsIDAsIDczODY3LCAxMDI1LCAwLCA0MjYyNSwgMCwgMCwgNDE0NDMsIDAsIDAsIDAsIAotICAgIDE3NzQsIDE1MjMsIDAsIDAsIDQxNDQ1LCAwLCAwLCA4NTY3LCA0MTQ0MiwgMzk4OCwgMCwgMCwgMTE4OTEwLCAwLCA2NTI3NCwgCi0gICAgODU2NCwgMCwgMCwgMCwgMCwgMCwgNjU5MDgsIDAsIDY2NTEzLCA2MjU2LCAwLCA1NzksIDAsIDEwMjA2LCAwLCAwLCAyNjczLCAKLSAgICAwLCAxMTgxNCwgMCwgNDQ4OCwgMCwgMCwgMCwgMTA0NDQsIDEyMDgyMCwgMCwgMTE3OTksIDc0NDA3LCAwLCA0NDg3LCAwLCAKLSAgICA0MjgzMiwgMTAzMiwgMCwgMTIwNzM2LCAwLCA3MjAzLCAwLCA2MTQsIDAsIDAsIDEyMDYxNSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTIwMjgyLCAwLCAwLCAxMjQxMiwgMTk5NDEsIDAsIDEyMDI3NywgNzg4NDcsIDE4ODQsIDk0ODEsIDQyNDE4LCAwLCAKKyAgICA0MTE1NywgMCwgMTE5NSwgNjQ4OTgsIDc5MjQsIDAsIDQxMTUxLCAyMDEwLCAwLCA0MTMyOCwgNDIzNDQsIDAsIDEyNDA5LCAKKyAgICAwLCA0MzYwLCAxMjcwMDksIDk3MzksIDAsIDc0MzkyLCA3MzkyMSwgMCwgNDI1MjEsIDg1MzksIDAsIDAsIDAsIDAsIDQ3ODgsIAorICAgIDAsIDAsIDY1NzM0LCAwLCA2NDM1MywgMCwgMTMwNzUsIDc0NDI5LCAwLCA2NDU2OSwgNDM1MzIsIDEwODM3LCAyNDkyLCAwLCAKKyAgICAxMTg5MDEsIDY4NjM3LCA0MTEzNiwgNjQzNTEsIDExODEzLCA5NjQ5LCA0MTE1NCwgMTE5NjE3LCA1MTI4LCA0MDM4LCAKKyAgICA0MTE0MywgNjU2MDQsIDY0ODU5LCA0MTU5MiwgNjc3MSwgMTY0OCwgNTQzNSwgMCwgNjczNCwgNDEzNDMsIDExOTg0OCwgCisgICAgNjU0MzksIDEyNzA5LCA2OTg2LCAxMTk4NDYsIDAsIDAsIDQxMzQ5LCAwLCAxMjU4MSwgMTAzNzQsIDUxNzUsIDAsIDczODA2LCAKKyAgICAxMDI1NCwgMCwgMTAyNzgsIDEwMjYyLCA3Nzk1MCwgNDEzNDYsIDAsIDYwNywgMCwgMCwgMCwgMTI5MjMsIDEwMzE0LCAKKyAgICAxMDI4MiwgNjU0NzcsIDEwMzc4LCAxMjAyOTcsIDQwOTc2LCA4MjY1LCAwLCAxMTk4MzQsIDQwOTc1LCA1ODQwLCA0MjgzOCwgCisgICAgMCwgNDA5NzgsIDAsIDExOTg0MCwgMCwgMCwgMCwgNjY0NDQsIDEwNTM4LCAwLCAyNTUwLCAxMTk4MzYsIDY3NzksIDAsIDAsIAorICAgIDM1MjUsIDY4MjQsIDExODg4NiwgMCwgMCwgNTYxOSwgNjU4MjIsIDAsIDE5NDg4MiwgNzQ1NSwgMCwgNTYxNiwgMTE0ODYsIAorICAgIDk2NTYsIDAsIDAsIDEwNzI3LCA1NjE1LCAwLCAxMjA1NTEsIDQyMzgwLCA2NDg5NSwgNDM2OTMsIDY2NDUxLCA4MDgsIAorICAgIDU0NTUsIDExMzQ3LCAwLCAxMDI2LCA1NjIwLCAxOTQ4ODcsIDAsIDExMzUwLCA1NjE3LCAwLCA5MjI1LCA2NDYzOSwgCisgICAgMTI3MDczLCA5MTQ1LCAwLCAxMzM4LCAxMjA1ODEsIDAsIDEyNzM5LCA0NjAzLCAzMDg0LCAwLCAwLCA5ODU4LCA2MDM3LCAwLCAKKyAgICAzOTc0LCA3ODIxMywgMTAyOTAsIDAsIDMwODMsIDEwMzIyLCAwLCAwLCAwLCA0MTAzNiwgMCwgMCwgNDMzMjEsIDY1NjA2LCAKKyAgICAwLCA0MTAzMiwgNDIzODgsIDAsIDY0NzAwLCAxMDAxMSwgMTQ0NSwgNDA5NjEsIDAsIDE5NDg5MywgMCwgNDA5NjAsIDAsIAorICAgIDE5NDg5MSwgMCwgNDA5NjMsIDY0OTUyLCAxMDQwMiwgMCwgMCwgMCwgMTA2MDMsIDAsIDAsIDAsIDAsIDY3MTQsIDEwMDgzLCAKKyAgICAxMjcwNjksIDE5NDg5NSwgNzgzNjcsIDAsIDAsIDAsIDkwNzMsIDQyNTg1LCA2NDMwMiwgMTA3MDQsIDY1MDMwLCA0Nzg3LCAKKyAgICAwLCA3NDgyOSwgMCwgNjU0MjMsIDAsIDAsIDk1NzAsIDAsIDk1MjUsIDI2ODksIDkxNzYyNiwgNjU0MjYsIDAsIDkxNzYyNCwgCisgICAgNDM3NDAsIDAsIDQwOTY2LCA5MTc2MjMsIDEzMjg2LCAzOTk4LCA0MjU5OCwgNDI1OTYsIDUwMywgMCwgODczNSwgMjY5MCwgCisgICAgNjY0ODgsIDQyODM2LCAxOTQ5MTMsIDQxOTU0LCA5MTc2MTcsIDE2NTIsIDc3MiwgNjY4OCwgODMxMCwgNjU0MjgsIDM0ODcsIAorICAgIDQzNDE2LCAzNTg1LCAxMDE5NCwgNDMzMjAsIDExOTE1OSwgMCwgMTk0ODc0LCA2NDY4LCA0MTk3NiwgOTcyMCwgOTE3NjA2LCAKKyAgICAxMTc2NywgNDE5NzAsIDAsIDU4MzYsIDEyMzU4LCAwLCA0MzU1LCA5MDQ4LCAxMjE4MCwgNjUwMjcsIDY0NjgwLCA2NTAyNSwgCisgICAgNDM2OTksIDAsIDQxNDg4LCAwLCA4NTI3LCAxOTQ5MTcsIDEyMzYyLCAxMjQzNSwgMTIzNjAsIDQxMDUzLCAzMjY2LCAwLCAKKyAgICAxMjM1NiwgODYxNiwgNDE0NjYsIDAsIDAsIDExNDUwLCAwLCAzNjM4LCAxMjM1NCwgMCwgMzIxNiwgMCwgMjM1OCwgCisgICAgMTE5MDY5LCA4NjMzLCAwLCAwLCAxMTkxODIsIDY5MjQ0LCAwLCAwLCAxMTc1OSwgMCwgNjM2OCwgNzQ4MjMsIDAsIDQxNDIzLCAKKyAgICA4MDc4LCAxMDUwNCwgMCwgNDE2OTgsIDQyMjM3LCAwLCA3MDAyLCAwLCA0MTQzMCwgNDIyNjcsIDQxMDUxLCA0MTQ4NCwgMCwgCisgICAgMCwgNDEwNTAsIDQxNDczLCAxMDQ2NiwgMTMwOTksIDAsIDAsIDAsIDY0MzUsIDAsIDExMzYyLCAwLCAwLCA2NTM4MiwgMCwgCisgICAgNDE0MjAsIDAsIDM2MjUsIDc4MTU3LCA0MTQwOSwgMCwgMCwgMjA0MSwgOTE3OCwgOTY3MiwgNDE0MjcsIDQzNTQxLCAKKyAgICA0MzMxNywgMCwgMCwgMCwgNDE0MjQsIDkxNzU5OCwgMTIwNTQ2LCAwLCAwLCAwLCA0MTQxNywgMTI2MSwgMCwgMCwgMTIxMDIsIAorICAgIDExOTY2MiwgNDE0MDEsIDAsIDAsIDAsIDAsIDAsIDQyMjkwLCAzMjc1LCAwLCA0MjMyOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTIwNzI1LCAxMDk4OSwgNzQyMzQsIDAsIDEwNTk4LCA3NDEwLCAyNjY5LCA5MDMsIDAsIDI5MjAsIDAsIDEyNzIzMiwgCisgICAgNzQ2MDMsIDY0NTA0LCAxOTkyOCwgMCwgMCwgMzkxNywgMCwgMTE3MzIsIDAsIDAsIDQxNDQ4LCA0MTQ2MSwgMCwgMCwgCisgICAgOTE3NTU4LCAwLCA4ODE5LCAxMjY2MywgMCwgNDExODQsIDc0MDE0LCAyMzIsIDc0ODM1LCAxMjA2NDYsIDkxNjgsIDY1Nzg2LCAKKyAgICAwLCAwLCAwLCA5MDk0LCAwLCAxMTc1OCwgNjg0MjUsIDAsIDEwNjQsIDQyNDY3LCAwLCAxMDExNSwgMTk5MjQsIDAsIDAsIAorICAgIDc4NjIsIDY0NTUxLCAxMzIyNCwgODUxNiwgNDE4NjIsIDY2NjUwLCA3NTYxLCA3ODYxOCwgNjk3OTMsIDE4NzgsIDAsIDAsIAorICAgIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgMTI2MTcsIDQxMTc0LCAwLCA0MTQ1OCwgMCwgNDE0NjMsIAorICAgIDQyNDEzLCAxMTI5MiwgMjQwNiwgNzc1LCAwLCA2NTU4NCwgMCwgNjA3NCwgOTYxOCwgMTk0OTAzLCAwLCA0MzQ0MCwgMCwgCisgICAgMTk0OTAxLCA0MTQzNiwgMzY1NiwgMCwgMTk0ODk5LCA0MTQ1NiwgMCwgMTU5OSwgMTEzMzMsIDAsIDY3MDMsIDg1MTMsIDAsIAorICAgIDE2MTMsIDAsIDY4NDU2LCAxMjU5OCwgMCwgMCwgNzg3NDUsIDc0NTAwLCA0MTQ2MCwgMTAxNDUsIDEwNTQyLCA5OTM3LCAKKyAgICA3ODc0NiwgMCwgOTkwNSwgMCwgNjU3MzAsIDAsIDEyMDM3NCwgODQyNywgMTIwMzc1LCA1NTI0NiwgMTIwMzc2LCAwLCAKKyAgICAxMTQ5NywgNjQ2ODcsIDc0MDA4LCAxMjAzNzEsIDM4NzEsIDAsIDAsIDkxMTEsIDU3NDEsIDAsIDE5NDg0NiwgMTIwMzY2LCAKKyAgICAxMTkxMTEsIDEyMDc0NSwgMCwgMTIwMzY4LCAwLCAxMTY0OCwgMCwgMCwgMTIwMzY0LCA0MTU4NywgMTIwMzY1LCAwLCAKKyAgICA3NDMyMiwgNDIxMTMsIDAsIDAsIDEyMTcyLCAwLCA3NDUzMCwgNjUyOTgsIDY1NzIzLCAxOTQ4NDAsIDczODcxLCA2NTcyNCwgCisgICAgNzkyOCwgMTIwMzU0LCAwLCA0MTU5NSwgNzM3MzAsIDAsIDQyMTE4LCA3MzgzMCwgNjYwNDIsIDEwMzU1LCAwLCA3ODc1LCAwLCAKKyAgICA0MTU5OCwgMzk5MywgMCwgMTU0NSwgNDA5NzEsIDUzNiwgMCwgNDMwMjksIDAsIDAsIDY1MTczLCA2NTI4NiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDEzNzUsIDU0MDIsIDAsIDAsIDE2ODcsIDEyMDUwMywgMCwgMCwgNzgxOTQsIDY0MzI2LCA0MDk2OSwgCisgICAgMTA1MjYsIDc4NzUzLCA4MzIzLCA0MDk2OCwgMTMzOSwgMTE3MzEsIDc4NzU2LCAwLCA2NTQ2MCwgMTIyNDIsIDAsIDgwMjAsIAorICAgIDEwODQzLCAxMTU1NCwgMCwgMCwgODI2NiwgNDEwMDYsIDY1NzIyLCAwLCAxMDcxMCwgMCwgMTE4OTQyLCA2NzY2NywgCisgICAgNjQ1NjcsIDExOTE1NSwgMTk1MDkxLCAwLCAxMTk2MzYsIDY3ODU3LCAxMjA2ODcsIDAsIDAsIDExNzU1LCA2NjMwNSwgMCwgCisgICAgMCwgMTA5MTcsIDEyMDc2NywgMCwgMTEyNzIsIDIwNDAsIDQxMjQ3LCA0MTMyNiwgMTk1MDYwLCAxNzQxLCA0MjM3MCwgCisgICAgMTIyNywgMCwgMCwgMTE0MTMsIDAsIDAsIDUyODMsIDE1ODYsIDQ5NzgsIDAsIDE5ODQsIDAsIDAsIDEyMDY1MSwgNDA5ODQsIAorICAgIDAsIDkzNzMsIDAsIDEyOTE2LCA2Mjg0LCAwLCA0MTY2MywgMCwgMCwgMCwgOTIzNywgOTM4NSwgNDE2NDgsIDAsIDAsIDAsIAorICAgIDQxNjY2LCAxODMwLCA3Mzc4MywgMjA1NiwgNDEyODcsIDAsIDAsIDAsIDQyMjE5LCAwLCAwLCA0MTk4NywgNDE2NzYsIDAsIAorICAgIDEyMDgyMywgMCwgNDE2NzAsIDAsIDAsIDI3OTYsIDU1MjkxLCAxMTY4MywgOTkwMiwgNzQ1MjEsIDAsIDExNDUxLCAwLCAwLCAKKyAgICA0MjYzMSwgMjM1OSwgMCwgNjc4NDQsIDc0MTY0LCA0MTIzOCwgNTQ4LCAxMTQwNSwgMTMxMzMsIDY0MzY4LCAwLCAwLCAwLCAKKyAgICAzOTcsIDQzNjIyLCA0MjEzOSwgOTU0NywgOTU5MCwgMCwgMTYxNCwgNDM2NjEsIDY0MzU2LCA2NjMwNywgNjY1MSwgMTM1OCwgCisgICAgMCwgNDI4LCA5NjIwLCAxNDY2LCA3ODExMiwgMTA5ODIsIDExODgzMSwgMTMzMywgMCwgNDA3LCA2NDI1LCAwLCA3NDI1MywgCisgICAgMCwgMCwgMCwgNTgwNCwgMTE5NzYsIDg1NTQsIDAsIDAsIDAsIDkwNTcsIDQyMjk0LCA0MTIxOCwgMCwgMCwgNzgxMzcsIAorICAgIDE4ODMsIDEwOTUyLCA4MDQ4LCAwLCA0MTIyNSwgMCwgMTE4OTU1LCAwLCAwLCAwLCA0NDA3LCAwLCA2NTgwOSwgMTE5MDc0LCAKKyAgICAxOTQ4MjEsIDg0NDgsIDY4MTIyLCA3NDE4MywgMCwgMTI2NzUsIDEyNjU5LCAwLCA0MjM2MywgMTIwNjI0LCAxOTQ4MjQsIAorICAgIDU1MjczLCAxMDc2NiwgMTIwMTIsIDIzODYsIDY0NzMyLCA5MTcwLCA5MTc4MjEsIDkxMjMsIDY0NTg1LCAxMjA1MDAsIDAsIAorICAgIDQzMzY3LCA0MjA1MSwgMCwgNDE2NCwgOTA4MSwgMCwgMTIwNTY5LCA0MjA0OSwgNDIwNDIsIDg3MDksIDAsIDAsIDEyMDYzNywgCisgICAgNDI0MTksIDAsIDQyMDQ3LCAwLCAwLCA4NDcwLCAxMTgwNywgNjU4OTcsIDU3NywgMCwgMCwgNzQzMDAsIDAsIDEyNzMwOCwgCisgICAgNzQ4NDAsIDAsIDAsIDAsIDAsIDg3MzYsIDE0MTQsIDQyNjQzLCA5NjgzLCA0MzQ4NiwgNzQzNDQsIDAsIDI1MzYsIDAsIAorICAgIDY2MzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjMxNywgOTE3NjEyLCA2NjMxNSwgMjEwNiwgMCwgMTEyNzMsIDAsIAorICAgIDQzMDA0LCA3NTQxLCAwLCAwLCA5NjEsIDY0MzA3LCA2NjMyNCwgNjQ5MDYsIDAsIDMxMDYsIDY1OTE3LCA0MTI4NCwgMTY5NiwgCisgICAgMCwgODkxLCAxMjEwNSwgMCwgNDI2MjQsIDEyODAyLCAzMjY0LCA4ODI0LCAxMzI2OCwgNDMwMDMsIDEwOTM2LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyMzIyLCAwLCAwLCAxMTQ0OSwgMCwgNDI4NjgsIDQxMjg1LCAzNTQ3LCAwLCAwLCAwLCAwLCA0MzIxNiwgCisgICAgNjA4OSwgNzg2ODIsIDAsIDEyMDU3OCwgNDE3MCwgMTAyOSwgMCwgMTI3MDM2LCAxMTkyMjQsIDQyMzc0LCAwLCA3NDQsIDAsIAorICAgIDAsIDAsIDY1ODIzLCAwLCAwLCAzNTUxLCAwLCAwLCA0NjIzLCA1NTI2OCwgMCwgNDU5OCwgMCwgNjUxMzYsIDAsIDAsIDAsIAorICAgIDEwODUxLCAwLCA2MTc5LCAwLCA2MTgwLCAwLCAxMTk1MiwgMTIwNzc4LCA3ODY0OCwgMTE5NzIsIDc4NjQ2LCA3ODY0NywgCisgICAgNzg2NDQsIDc4NjQ1LCAxNzcsIDc4NjQzLCA2MTc2LCAxMjA1ODAsIDAsIDAsIDYxNzcsIDkwMjAsIDc4NjUyLCA3ODY1MywgCisgICAgNjE3OCwgMTIwMjQ5LCAxMjAyNDIsIDAsIDY3NjczLCA3NTE4LCA4NzU0LCAwLCAxMjAyMzcsIDc0NTUxLCA0MzA4MSwgMCwgCisgICAgMCwgOTEzNiwgMTIwMjQwLCA0NDAxLCA0MTI4MCwgMCwgODk3NCwgMjMwOCwgMCwgNzQxNDksIDAsIDIzMTgsIDAsIDY2MzYxLCAKKyAgICA4MTk4LCAwLCA2NDM2MCwgMTI2MDEsIDQyNTM2LCA2NTI2NiwgMTIwODI3LCA3NDMwNywgMCwgNjk3MCwgNTQwNCwgNDMzMzIsIAorICAgIDM2NjcsIDc5MzYsIDEyOTI1LCAxMjY5ODksIDYzODUsIDAsIDAsIDExODk0OSwgMTA4NzQsIDY1NTA1LCAwLCAwLCA0MjA1MywgCisgICAgMjA3NSwgNDIwNTcsIDExMDgzLCA0MjA1MiwgMCwgMCwgNjc2NTEsIDAsIDk2NjUsIDAsIDAsIDEzMTgxLCAwLCAwLCAwLCAwLCAKKyAgICA3NDE0OCwgMCwgMCwgMTIwMjI1LCAxMjAyMjksIDEyMDIyNCwgNzQxNzIsIDQxMTQ1LCAwLCAwLCAwLCA0MTE0OCwgODY4MywgCisgICAgNzU5NCwgMTI3NTE5LCAwLCAxMTkwOTAsIDEwODY5LCA0MzQ1OCwgNDExNDYsIDAsIDExNDQxLCAwLCAzNTEyLCAxMTk2MzMsIAorICAgIDAsIDgxMDMsIDAsIDAsIDY1MTg0LCAxMTc4MCwgNDE1NjMsIDQyNzk2LCAwLCAxMTkxMDYsIDQxNTQ0LCA2NTE0NiwgMCwgMCwgCisgICAgMCwgMCwgMTk5NDIsIDAsIDExODkwOCwgNzk4OCwgMTA0MzYsIDc0MjczLCAzMjcxLCA3MzgwNCwgNjQ3MTEsIDAsIDAsIDAsIAorICAgIDAsIDM4MDQsIDEzMDcwLCAxMTU1NywgNDIwNDQsIDAsIDEwOTUsIDAsIDM1OTksIDAsIDAsIDAsIDg1MTQsIDAsIDAsIDAsIAorICAgIDc0MzQ2LCA2NjY5NywgMCwgMTE2ODQsIDAsIDAsIDAsIDAsIDQyMDQzLCA0MzIzMiwgNjY2NzcsIDAsIDQyMDQ2LCA3ODI0MSwgCisgICAgNDAzNiwgMCwgMCwgMCwgMTk0ODYxLCAwLCAxMTk1NCwgMCwgMTQ1MCwgMTI5ODYsIDEzNDAsIDAsIDY1NDQxLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA5MTc1NDIsIDAsIDAsIDY1MzksIDAsIDAsIDAsIDE5NDg1NiwgMCwgMTIwNDkyLCA0MTE5MCwgMzk3MywgCisgICAgMTE5MzY1LCA0NTc1LCA0MTE5MywgNzk4MiwgNDI5LCAwLCAwLCAwLCAxOTQ4NTQsIDY1NzkyLCAwLCAxMTg5NjgsIDY0MTcsIAorICAgIDExODkxOCwgNzgxNzgsIDAsIDE5NDg1MCwgMCwgMCwgNDkxOSwgMTA1OTAsIDAsIDc3NTUsIDAsIDAsIDY0NTQ4LCAKKyAgICAxMjA1MDYsIDE2MjEsIDEwMjE0LCA2NTEyNiwgMCwgMTI3MDA0LCAwLCAxMjE4OCwgMCwgMTYxNywgODA1MCwgMCwgNTAxNSwgCisgICAgMCwgMTE5MTc0LCA0MjU5MCwgMTk0ODcxLCAxNzU2LCA3ODE4MSwgMCwgNjU3NjgsIDYzNTIsIDQxODkyLCAwLCA3NTU1LCAKKyAgICAxMzEwMywgNTQwOCwgMjgxNywgMTIxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk1NywgODY4OSwgNjQ3MjMsIDEwNTYsIDAsIAorICAgIDc0MTQ3LCAwLCAwLCA1NTI4NiwgNzA3MywgNjU4NTAsIDEyMzI3LCAwLCAxMTkwMjgsIDAsIDAsIDAsIDIzNDEsIDg0NTAsIAorICAgIDg0ODQsIDg0NzQsIDAsIDAsIDAsIDg0NjEsIDAsIDEyMTUzLCAxMjc5OSwgMCwgNDM3MDksIDQzNzA4LCA5NDUxLCA3NTcxLCAKKyAgICAxMzA3MywgMCwgMCwgNjgxLCAwLCA3MDMsIDAsIDMyNzIsIDg3ODEsIDEyODk0LCAwLCAxMTcwOSwgMCwgNzQ0NDYsIDAsIDAsIAorICAgIDAsIDExMzM4LCAxMjA3NjgsIDMyNzYsIDAsIDAsIDY1OTI4LCAwLCAwLCA2NTAyMSwgNjQ3OTUsIDc0NTc0LCAwLCAxMDA0NywgCisgICAgNzg4MTQsIDMyNjIsIDc4ODExLCA0MjcxMSwgMCwgMCwgNjg0NzgsIDE2MywgNTc2LCA5ODk1LCAxNjU1LCA3ODgxNywgCisgICAgNzQ1OTEsIDc4ODE1LCA3ODgxNiwgMCwgMCwgMCwgMCwgMTAwMzksIDAsIDAsIDU2MjMsIDU3MTcsIDU3NzYsIDAsIDAsIDAsIAorICAgIDQxNTkxLCAxMTAzNiwgNjUyNTIsIDEyMDQ4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg4NywgMCwgNzI5NSwgMTEwMzEsIAorICAgIDAsIDQzMTU3LCAwLCA4OTQ2LCAxMDM0OCwgMTA0MTIsIDg3NTUsIDAsIDAsIDU3MTgsIDEzMjIxLCAwLCAwLCA3ODEzNSwgMCwgCisgICAgMCwgODgxMCwgNzQ0OTksIDY4NiwgMCwgMCwgNDYxOSwgMTE4OTU0LCA2NjU0LCA3Mzc2OSwgNzQ0MjYsIDAsIDEyMDQwLCAKKyAgICA2NTY4OSwgMTAxMjgsIDY1MTE4LCAwLCAxMTkxNTEsIDExODg5MSwgMCwgMCwgMjQwMSwgNjgxNDQsIDg3OTIsIDAsIDAsIAorICAgIDY1NDU1LCAwLCAwLCAwLCAxMTkxMjksIDAsIDEyODg2LCAwLCA2NjYyNCwgMCwgNDM1NTcsIDEwMzAwLCAxMDE2MSwgCisgICAgMTAzOTYsIDc0MTM1LCAwLCAxMTg5NDUsIDc4MTE4LCA3Mzg1MSwgMzAxMCwgNjQ0MSwgNzgxMjIsIDE0NTgsIDQxNDc1LCAwLCAKKyAgICAwLCAwLCAxMTQ3OSwgMCwgMCwgNjM1MCwgMTI4NjQsIDAsIDc4MTE0LCAxMDYxLCA2NDc4MCwgMjAwMSwgNDMxMTEsIAorICAgIDU1MjMwLCAwLCA0MDUyLCAwLCA3NjI2LCAwLCAwLCAxMDQ1LCAwLCA1NjMxLCA0MTExMywgMCwgMCwgNDM3MDcsIDc0MTI3LCAKKyAgICAwLCAwLCA4NDg2LCAwLCA3Mzc1OCwgMjMzNSwgNDM2MiwgMCwgMCwgNjkyMjEsIDEwMjUsIDAsIDQyNjI1LCAwLCA3ODA4NCwgCisgICAgNDE0NDMsIDAsIDAsIDAsIDE3NzQsIDE1MjMsIDAsIDAsIDQxNDQ1LCA3ODIzNiwgMCwgODU2NywgNDE0NDIsIDM5ODgsIDAsIAorICAgIDc4MjM3LCAxMTg5MTAsIDAsIDY1Mjc0LCA4NTY0LCAwLCA3ODIzOCwgMTI3NTE1LCAwLCAwLCA0MzQ0NiwgMCwgNjY1MTMsIAorICAgIDYyNTYsIDAsIDU3OSwgNTUyMTgsIDEwMjA2LCAwLCA2Mzc1LCAyNjczLCAwLCAxMTgxNCwgMCwgNDQ4OCwgMCwgMCwgCisgICAgNjg0NTEsIDEwNDQ0LCAxMTg4NDYsIDAsIDExNzk5LCA3NDQwNywgNjg0NjYsIDQ0ODcsIDAsIDQyODMyLCAxMDMyLCAKKyAgICAxMjAyNjcsIDQzNDUwLCA3ODI1NywgNzIwMywgMCwgNjE0LCA3ODE5MSwgMCwgMTIwNjE1LCAwLCA3ODI2MiwgMCwgMCwgMCwgCiAgICAgNDMxMjEsIDAsIDAsIDAsIDEwNTAsIDc1NDksIDAsIDAsIDkzMTQsIDAsIDAsIDEyMDYxNiwgMCwgMTAwNTcsIDAsIDAsIDAsIAotICAgIDY2NTA0LCAwLCAwLCAyMzA3LCAwLCA2NDMzMywgMCwgMCwgNzM4NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMzYwLCAwLCAwLCAKLSAgICAwLCA0NDAsIDAsIDEzMDg1LCA5MjMzLCA3NDIxNiwgMCwgMCwgMCwgMCwgNjY0NDcsIDgwNDYsIDY0OTYzLCA2NTc3NywgCi0gICAgMTAxMjUsIDc0MjEyLCA0MjgxOSwgMTA5MTAsIDAsIDE1MjEsIDk4OTYsIDAsIDEwNDg3LCAwLCAxMjUyNywgMCwgNzk3MCwgCi0gICAgMCwgMCwgMCwgNjU3NjksIDUyNDMsIDk4NDksIDUyMzksIDY1NzcxLCAwLCAwLCA1MjM3LCAwLCAwLCAxMDEwMywgNTI0NywgCi0gICAgNDc2OSwgMCwgMTE4OTc3LCAwLCA1NzY0LCAwLCAwLCAzMDA4LCA0ODk2LCAwLCAxMjA4NywgMCwgMCwgNDExMDMsIDAsIAotICAgIDY0NTY1LCA0NzczLCAwLCAwLCAwLCA0NzcwLCAwLCA5MTc1NjcsIDg3MzEsIDY1Mzc4LCAwLCAxMjA2MTksIDkxMjIsIDAsIAotICAgIDAsIDQ3NzQsIDMwMTksIDk5OTcsIDEyODM0LCAwLCA5NDU2LCAxMDIxNSwgMCwgMCwgMCwgMCwgMCwgNzQ3NzYsIDQyODEsIAotICAgIDQ3NjgsIDAsIDQxNTM1LCA0MDk5LCA5MDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjgxNCwgODgwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMDExNiwgOTg3NywgMCwgMCwgMCwgNzA5NSwgMCwgMCwgMTIwNjMyLCAwLCAwLCA4MjQzLCAyNDI3LCAKLSAgICAwLCA3MDkzLCAwLCAxMTU4NSwgMCwgMCwgMCwgMTIyMjMsIDAsIDAsIDE0MzQsIDAsIDU2MzcsIDExNTczLCAwLCAwLCAwLCAKLSAgICAxOTk1MSwgMCwgMCwgMCwgMCwgNjQ0MzIsIDAsIDAsIDExODg4OCwgMTE1NiwgODc0MCwgMCwgMzc4MiwgNjQzMzEsIDAsIAotICAgIDQxMzcwLCAxMDE0LCA4MjYxLCAwLCAwLCAxMDgzNSwgMCwgNjU1MzYsIDAsIDEyMDQ2MywgMCwgNzcwMiwgMTE4ODI0LCAwLCAKLSAgICA0MzAxMCwgNjU3NzksIDY1NzgzLCAxMTUwLCAxMDU0NywgNTcwMCwgMCwgMTIwNjAzLCA2NTM4MywgMjMzOSwgNDI1OTQsIAotICAgIDU2OTcsIDExODc4OCwgMCwgMCwgMCwgNDIyNTcsIDU2OTYsIDEyMDQ3MCwgMTIwNDY1LCAzODYyLCA5NjQzLCAwLCAwLCAKLSAgICA3NjM0LCAwLCA5ODQ1LCAwLCAwLCA1NzAxLCA5NzIyLCA0MTQ5MCwgMCwgMTQyNiwgMTIwNDc0LCAwLCAwLCAwLCA3NDM0NSwgCi0gICAgODU3MSwgMTk0OTkxLCAwLCAwLCAwLCAwLCA0MzE4MiwgMTIxODQsIDAsIDQyMDIyLCAwLCAxMDI4MSwgMCwgNTY1MCwgCi0gICAgNDMxOTQsIDY0NzEyLCAwLCAwLCA5OTAsIDU2NDcsIDAsIDAsIDAsIDQxMTE0LCAxMTQ3NywgNTY0NiwgMCwgMTEwMTgsIDAsIAotICAgIDM5NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjAsIDczNzYzLCAwLCAwLCA1NjQ4LCA2NDc0OCwgMCwgMCwgMTAyMDUsIAotICAgIDM1NDUsIDAsIDY5ODQsIDAsIDc0MDUxLCAwLCAxMTg4NjgsIDEyMDQ1OCwgMjY2NywgMCwgMCwgMCwgOTkxMSwgMCwgCi0gICAgNjUwMjAsIDEwMDk3LCAxMTkxNjYsIDAsIDAsIDExODgzNiwgMCwgMCwgMTE0MCwgMCwgMCwgMTAxNTksIDAsIDAsIDgxMjgsIAotICAgIDAsIDAsIDAsIDE4MTUsIDE5OTEwLCA4OTAsIDAsIDMyNjcsIDAsIDAsIDEwMTIzLCAwLCA0NDEwLCAxMDQxLCAxMDU3NiwgCi0gICAgODEwMiwgMCwgNTgwLCA3NDIzMiwgMCwgMCwgMCwgMCwgMCwgMTk5MzgsIDY1OTA2LCAwLCAwLCAwLCAzMjk4LCA1Mzc1LCAKLSAgICAxMDE0MiwgMCwgODIxNSwgMCwgNjEzNCwgNDEyNDYsIDY0NDAyLCAwLCAwLCAwLCAwLCAwLCA0MTM4MiwgMCwgMCwgNTE3MywgCi0gICAgNjUzNDgsIDUyNywgMCwgMCwgMCwgMCwgMCwgMTE5MTUsIDAsIDAsIDEwMDcyLCAwLCA2NjQzNCwgMjMyOSwgNDIyNTAsIDAsIAotICAgIDAsIDAsIDEyMjQ1LCAxMTkyMzcsIDAsIDAsIDAsIDAsIDAsIDc0MzI4LCAwLCA3NDc2OSwgMCwgMCwgOTA2OSwgNjE0NCwgMCwgCi0gICAgMCwgNzM4MjIsIDAsIDAsIDY0OTE3LCA0MTUyMSwgMTE4OTM0LCA0OTQsIDEzMjUwLCAwLCA2NTA5OCwgMCwgOTU2LCAwLCAKLSAgICAxMjgzMCwgMTA0NjIsIDczNzQwLCAwLCAwLCAwLCAwLCA2NjQ0OSwgMTMyNjMsIDAsIDAsIDEzMTcxLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMDQ0LCA0MTI3NiwgMCwgMCwgMCwgNDIwNjgsIDExNzk1LCAwLCAwLCAwLCAwLCA0MjQ1MCwgMzkwNywgMCwgNjQ1MjYsIAotICAgIDAsIDAsIDEyMjk1LCAwLCAxMTQ3NSwgMCwgMzAyMCwgMTE1MzcsIDAsIDY2NDQxLCAwLCAwLCAwLCAwLCAxMDU3LCA1NjYsIAotICAgIDAsIDAsIDMwMTYsIDQyMjc0LCAwLCA2NjQ5MCwgMTI5MjEsIDY2NTcxLCAwLCAwLCAzMDA2LCA0NjIwLCAwLCAwLCAwLCAwLCAKLSAgICA2NDY1OSwgMCwgMCwgMCwgNDMzMzMsIDY4MTI5LCA4NjI2LCAwLCAwLCA5MDkwLCA2NTM3NywgNDE1OTYsIDAsIDAsIDE2OTgsIAotICAgIDAsIDY0NDc3LCAwLCAwLCAxMDUzLCAwLCAwLCAwLCAwLCAxMDUyLCAxMDUxLCA0NTksIDEwNjAsIDc0MzQ5LCA2NjQ3OSwgMCwgCi0gICAgMCwgMCwgMCwgNDI0OTAsIDY4OSwgNjUwOCwgNDE2MywgNDIyOTgsIDg2MzksIDY2NjQxLCA0MjQ2LCAwLCAwLCAxMjEzMCwgCi0gICAgMCwgNDIzMzcsIDY0NTk2LCA2NDM3NSwgNjY0ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5MjYsIDAsIDAsIDc4OTgsIDgxMTAsIDEwOTM1LCAwLCAwLCA1ODMwLCAwLCA2NDU5NCwgMCwgMCwgMCwgMCwgODY5MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE5MTg3LCAxMTQzOSwgMCwgMCwgMCwgMCwgNDIzMTMsIAotICAgIDU1NzksIDAsIDAsIDAsIDAsIDAsIDU1NzgsIDQxNzc0LCAwLCA0MjAyMywgNjIzNCwgNTY2OSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTU4MywgMCwgMCwgNDI0MjYsIDU1ODAsIDQyMjc2LCAyOTIzLCA4OTIsIDU1ODIsIDQyNDY1LCA0MTMzMCwgMCwgNTc5NSwgCi0gICAgNjU1MTIsIDAsIDY1NzAyLCAwLCAxMjA4MDEsIDY1MjUxLCAwLCA2NTcxMCwgMCwgMCwgMCwgMCwgNTM3MCwgMCwgMCwgCi0gICAgMTYzOCwgMTA5NjYsIDEwMTg4LCA2NTg3OCwgMTE4ODQ4LCAwLCAwLCAwLCAwLCA4MTcyLCA0MjAxNywgMCwgMTA4NDQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI4NiwgMCwgMTA2MiwgMCwgMCwgMCwgMCwgMCwgMTA3MCwgNjQ5MDAsIDAsIDYwOTUsIDQxODY1LCAKLSAgICAwLCAzMDE1LCAwLCA5MTc3NjMsIDUyMTEsIDAsIDY0MDAsIDAsIDE5NDk4MywgMCwgODE4OSwgMTEyNzYsIDAsIDAsIDM3MiwgCi0gICAgMCwgMCwgMTE4ODc0LCA0MjEwMiwgNDE1ODUsIDAsIDAsIDQyMTAxLCAyNzYsIDAsIDAsIDMzLCA3NDIyNiwgMCwgOTAwNywgCi0gICAgMTE4Nzk2LCA0MTU4OCwgNjYwMzMsIDQyNywgMTA3NjMsIDAsIDAsIDAsIDAsIDEwMzEsIDYyNTcsIDAsIDQyMTA0LCAwLCAwLCAKLSAgICAyMzI4LCAwLCAxMDcxLCAwLCAwLCA3NDg0OCwgMCwgMCwgMCwgMTA0NywgMCwgMCwgNjQ3OTAsIDAsIDAsIDEwNjUxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMTkxODEsIDU3MTEsIDQxNjMzLCAxMjA5OCwgNjU1NzEsIDkxNjYsIDAsIDU3MTAsIDAsIDAsIAotICAgIDY1MjEzLCAxMzIxNiwgMCwgMCwgMCwgMCwgNjQ2MTEsIDQxNjIzLCAwLCA1NzE1LCAwLCAwLCAwLCA1NzEyLCAyNzYxLCAKLSAgICA0MTYyMCwgNjgxMjQsIDMwNzQsIDU3MjIsIDAsIDg2NDMsIDczNzY4LCAwLCAxMTg5MDYsIDI3NTcsIDExMDY3LCA5NzE4LCAKLSAgICA3NDQ5OCwgODkxMCwgMTA2ODksIDY0NzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExODkxMSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTIwMDEwLCAwLCA4NzAxLCA2ODEzMCwgMTE5NjE2LCAxMjA1MjIsIDAsIDQyNDc3LCAwLCAxMjEyMywgNDQ5NSwgCi0gICAgNDM1NjksIDAsIDAsIDAsIDY0OTQ2LCAxMDk5MiwgMCwgMCwgMCwgMCwgOTMxOCwgMTIwNjYxLCAxMzI0OSwgNjU2NzksIAotICAgIDczODA4LCAwLCA2NTQ1NywgNDIyNDksIDc2MzksIDAsIDY3ODQ1LCA0MjY0MSwgNTQ1NCwgMCwgMCwgMTk0OTk3LCAKLSAgICAxMjAwMDUsIDAsIDAsIDUwODQsIDAsIDAsIDExOTE3MywgMCwgNzMzLCAwLCAwLCAwLCAwLCA0MTY3NywgMCwgOTIxOCwgCi0gICAgMTczMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MDE4LCAwLCA1MTU1LCAwLCA1MzU4LCAwLCAwLCA5MTc3NjcsIAotICAgIDY0NDI0LCAwLCAzODQwLCA2NDMxNCwgNDE0MzIsIDAsIDAsIDAsIDAsIDAsIDY1OTQzLCAwLCAzMzcxLCAxMDk4OCwgMCwgCi0gICAgODc3MSwgMTQ3OSwgMCwgMCwgMTEwOSwgMTE1ODAsIDAsIDY0NjAxLCAxMjIwNSwgMCwgMCwgNjQ1MDcsIDg4NjgsIDM5OSwgCi0gICAgMCwgNzQ4NDIsIDAsIDAsIDEyMTQ5LCAxMzA4OCwgNTUxLCAwLCAxMDE1NiwgMTIxMTksIDAsIDAsIDI1NDQsIDY1MDc0LCAwLCAKLSAgICAwLCAwLCAwLCAzNTEsIDExOTE0OSwgMCwgMCwgMCwgMCwgNzQyNjgsIDAsIDAsIDAsIDQyMzc3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5MDEzLCA1NTg4LCAwLCAwLCAwLCAwLCA3Mzk2MCwgNTU4NSwgNjU4ODEsIDI1NDksIDc0NDY5LCAwLCAwLCA1NTg0LCAKLSAgICA4MzU4LCAwLCA3NDQxMSwgMCwgMTA5MTksIDAsIDc5ODAsIDAsIDAsIDAsIDQxODAwLCA1NTg5LCAwLCAyNjY0LCA0MTYxMywgCi0gICAgNTU4NiwgMTE4ODkwLCAwLCAxMTM1NiwgMCwgMCwgMCwgMCwgMCwgNDI1NzMsIDY3ODU2LCAwLCAwLCAwLCAwLCAwLCA4MTM1LCAKLSAgICA2NDUwLCAxMDA1NSwgMCwgMCwgMCwgMCwgNTY1NywgMCwgOTYyNiwgMCwgMCwgMTAxNzksIDU2NTQsIDEyOTM5LCAwLCAKLSAgICAxMjA3OTksIDAsIDAsIDU2NTIsIDEwOTQ1LCAwLCAwLCAwLCAzNjYxLCA3ODYzLCAwLCAwLCAwLCAwLCAwLCA1NjU5LCAwLCAKLSAgICAwLCA2NjcyOSwgNTY1NSwgMCwgNDIxNjgsIDAsIDEwNTUsIDkxNzYyOCwgMCwgNjYzMTAsIDc0MDMwLCAwLCAxMjE0NiwgCi0gICAgNzM5NTUsIDczOTU2LCAxMTYxOCwgMCwgMTI2OTkwLCAwLCAxMDI3MiwgMTAzMDQsIDEwMzY4LCA0MjUxOCwgNTk0LCAKLSAgICAxMDI0NCwgMTAyNDgsIDEwMjU2LCAwLCA2NDg3MCwgMCwgMzQ2NywgMCwgMCwgMzMzMSwgOTQ2LCAxMDIzMSwgMTQ5NSwgCi0gICAgODEzMSwgNzQzMzAsIDAsIDk1NjIsIDAsIDY1OTI3LCAwLCAwLCAxMjAxNTUsIDAsIDY0NjU2LCAwLCAwLCAxOTQ4MzcsIDAsIAotICAgIDU2NjYsIDY1MjI3LCA1MzE4LCAwLCAwLCA5MDkxLCAxMDc5OCwgMCwgMCwgMTAxODYsIDAsIDc3MzIsIDAsIDY0NTU2LCAwLCAKLSAgICAwLCA1NjY4LCA3NDQ0NSwgMCwgMCwgNTY3MCwgMCwgMCwgMTE4MjAsIDI5OTIsIDc4MjYsIDU2NjcsIDE5OTUyLCAxMjA4MDcsIAotICAgIDAsIDEyNzQ5LCAwLCAwLCAwLCA2NjQ5NiwgNDM2MSwgMTE5MjYwLCAxMzA2LCA5Mjg2LCAxNDk3LCAwLCAwLCAwLCAwLCAKLSAgICAzNTcxLCAxMzI0NywgMCwgNzk3MywgNjYzNTMsIDAsIDAsIDY3ODk2LCA0MzE5MiwgMCwgMCwgNTUzLCAxMjA2NTMsIDAsIDAsIAotICAgIDU4MjksIDAsIDQ1ODcsIDAsIDY1OTEyLCAwLCAxMjc0NiwgMCwgMCwgMTE5OTI0LCA1NjMzLCAxMTk5MjcsIDAsIDAsIDAsIAotICAgIDY0OTA1LCAwLCA5NTEyLCAwLCAxMjc0MiwgNjQ0MywgMCwgMCwgOTEzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNDgsIAotICAgIDAsIDAsIDAsIDY0MjU2LCAwLCAxMTY2OSwgMCwgNTYzNCwgNDUyNCwgMCwgMCwgMCwgMTE4ODgwLCA3NDI2NiwgNjUxODIsIAotICAgIDAsIDAsIDUyMjEsIDAsIDMyOCwgMCwgMCwgMCwgNTYzNiwgMCwgNTMyOSwgMCwgNTYzOCwgMTE5OTE4LCA3OTQwLCA2NDkzOCwgCi0gICAgNDMyMjMsIDAsIDU2MzUsIDMzNzMsIDI5ODYsIDAsIDc0MjIzLCAzNDM3LCAwLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgCi0gICAgODI3NCwgMCwgMCwgMTY1NywgMTE5OTIxLCAwLCAwLCA1NjM5LCAyOTU0LCA1NjYwLCA1NjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0MTYzNywgMCwgMCwgMCwgNDE2MjUsIDAsIDAsIDEyMDcxMywgMTE3MDUsIDU2NDIsIDAsIDAsIDAsIDQzNTYsIDExNzEwLCAKLSAgICAwLCAxMjA1MSwgMCwgMCwgNTY0MSwgODI1OSwgMCwgMTA1OCwgMCwgNjc2MzAsIDAsIDAsIDExNDQsIDAsIDAsIDAsIDAsIAotICAgIDczODkwLCAxMTg5NzIsIDAsIDczNzM0LCAwLCA1NjQ1LCA2NDk2NCwgODY1MiwgMjU0NywgNjY0ODQsIDAsIDAsIDU2MDgsIAotICAgIDY1ODkwLCAwLCAwLCA2NzYyMSwgMTE5OTM0LCA5MDAwLCAwLCAwLCAwLCAxODY1LCAwLCA1NjEzLCA3NDI2NywgMCwgMCwgCi0gICAgNTYxMCwgMCwgMCwgNjU4MjYsIDU2MTIsIDAsIDEwNzg3LCA5MTc1NTEsIDI5OTcsIDAsIDU2MDksIDAsIDY1MzE5LCAKLSAgICAxMTk5MzMsIDEyMzE2LCA2NTM3NiwgMjQxMiwgMCwgODE4NiwgOTgwNywgNzQyNjksIDAsIDEzMTMwLCA2NTg3NCwgMCwgCi0gICAgNTgwNywgMCwgMTAwMzAsIDUzMDYsIDEyOTM2LCAwLCAwLCAxMTcwNCwgMCwgMCwgMTAyMTEsIDAsIDAsIDAsIDAsIDExNzA2LCAKLSAgICA5NzEwLCAwLCAwLCAwLCA0MTMsIDY1NjIzLCA3NDIzNywgMCwgOTEzMywgNzQyNjIsIDAsIDEwNDIsIDAsIDY0Nzc5LCAKLSAgICAxMjE3MSwgMTE5MjQwLCA2MTg1LCA2NDc3NiwgNDk4NCwgMCwgNzA4LCAwLCAwLCAxMjI0MSwgMCwgMCwgMTMwOCwgMCwgCi0gICAgMjUzNCwgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDAsIDc0NDcwLCAKLSAgICA2NjYxOCwgNjU2ODAsIDAsIDEwMDI3LCAwLCAwLCAxMjMzNywgMTIwNzIyLCAwLCAwLCAyOTgwLCA3NTUsIDAsIDkzMSwgCi0gICAgMTMxMjQsIDY4MTgyLCAwLCAyNzQ4LCAwLCAwLCA2NTA0MSwgMCwgNzM5OTgsIDg3MzAsIDAsIDAsIDExOTAwOSwgNzI3NCwgCi0gICAgMTE5MjUwLCAwLCA3Mjc1LCAwLCA5MzUsIDAsIDY1ODQwLCAzNzcsIDQyMzI1LCAxMTY0OSwgMCwgNjUyNTMsIDY0MzAxLCAwLCAKLSAgICAwLCA0MjM0MSwgNjUyODQsIDI0MTcsIDAsIDEyODg0LCAxOTkxMiwgNzkwNywgMTA3NjgsIDAsIDE5NDk5OCwgMCwgMTA2NzMsIAotICAgIDExOTIxNywgNzI0OCwgMCwgMCwgMTc4MSwgNTQ5NiwgMzYyNywgNjIsIDE2NDksIDAsIDk2NCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTMxNDIsIDAsIDQyNDE1LCA2NjU3NSwgNDU0MiwgNzQwMzcsIDQzNTQ3LCAwLCAwLCAwLCAyOTkxLCAKLSAgICA0OTQ2LCA0MjQ1NCwgMCwgNzk0OSwgMCwgMCwgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDAsIDAsIAotICAgIDAsIDY0NzgsIDk4OTgsIDAsIDY1MjM3LCA2MjQxLCAwLCA0ODc3LCAwLCA2MjM4LCAwLCAxMDU0OCwgMTI3MDQ5LCA0NDA5LCAKLSAgICAwLCAwLCA2NDc5OCwgMCwgNTM0NiwgMCwgMTIwNTI4LCA2MjM3LCA1NDYxLCAwLCA5MTc2LCAwLCAwLCA2NTIzMSwgNjU4ODQsIAotICAgIDEyNjc4LCAwLCAwLCAxMTM3OCwgMCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIDAsIDU2ODUsIDAsIDI0NjEsIDExMDUyLCAKLSAgICA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMCwgMCwgNzM5MjgsIDAsIDAsIDAsIDAsIDAsIDY1NDgyLCAKLSAgICAwLCA5MTQyLCAwLCAwLCAwLCAxMDkzOCwgMCwgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAwLCA1MjksIDg1ODAsIAotICAgIDAsIDAsIDEwNTg2LCAxMDc5MCwgMTE5ODcsIDY2MDIzLCA0MTU5MywgNDEyMDcsIDAsIDAsIDQxNTk0LCAyMjUsIDQyODI4LCAKLSAgICAwLCAwLCAwLCA2NDcwNSwgNzQzNzksIDEwNzIxLCAwLCAzNDM4LCA0MjA5NywgMCwgMTEwODQsIDMxOTQsIDQxODcwLCAyNjYsIAotICAgIDAsIDAsIDQxODczLCAxMjA1NzUsIDExMzI0LCAwLCAwLCA4NDIwLCA2NDkxOCwgMCwgNDE4NzEsIDQxMzM4LCAzNzM0LCAKLSAgICA3NzM0LCAwLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDAsIDQwOTY1LCAwLCAwLCA1MTYxLCAxMDU3MiwgMCwgMCwgMCwgNjQzNDksIAotICAgIDcyODcsIDQyMTYyLCAwLCAwLCAwLCAxMTk0OCwgMCwgMTIzNTksIDY2Njc0LCA0MTM2OSwgMTY5NywgMTIxOTEsIDAsIDAsIAotICAgIDcyODYsIDAsIDAsIDEwMDMxLCAwLCA5ODcwLCAwLCA4NjIwLCA2NTgyNCwgMCwgMTE5MzgsIDAsIDcyODUsIDAsIDExOTU3NywgCi0gICAgMCwgMCwgMCwgNDE1ODMsIDAsIDY1Nzk5LCAwLCAwLCAwLCAwLCAwLCA2NjE5OSwgMCwgMzYwOSwgMCwgMCwgODMyLCAKLSAgICAxMjA2OTMsIDEyMDc3MCwgMCwgNjYwMDcsIDAsIDY1NzAzLCAwLCAwLCAwLCA1MTgwLCAwLCA0MTM5NSwgNDE1MzAsIAotICAgIDExNjkxLCA2NDc3MywgMCwgNzQwMDIsIDAsIDAsIDAsIDExMDM2LCAyNDMsIDEzMjAwLCAwLCA2MDI0LCAwLCA3NDM5OCwgCi0gICAgMTAwMzcsIDQxNTI5LCAxMDY0OCwgODUzOCwgMCwgMCwgMCwgNDI4NSwgNjYxOTUsIDAsIDQyMzAsIDAsIDEzMzA3LCAwLCAwLCAKLSAgICA3NTYzLCA0MjM3NiwgMCwgMCwgMTIwNTEyLCAwLCAwLCAyMTQsIDAsIDAsIDAsIDY1ODkzLCAxMjIwOCwgMTIwNDg4LCAwLCAKLSAgICA2NjMxMSwgNjU1ODksIDAsIDI2MDMsIDAsIDAsIDAsIDAsIDAsIDYwMjIsIDAsIDI4ODQsIDAsIDExNjIwLCAwLCA0MywgMCwgCi0gICAgNjY0NTMsIDEwMTYsIDQxMTA3LCAwLCA0MTEyMSwgMzg4NSwgOTIsIDY1NDU2LCA2NDYwOCwgMCwgNzQ4MDEsIDAsIDEyNDUxLCAKLSAgICAwLCAwLCAwLCAxMjQ1MywgMCwgMCwgNzQyNDEsIDAsIDg4OTAsIDEyNDU3LCAwLCAwLCAwLCAwLCAxMTg4MTksIDAsIDAsIDAsIAotICAgIDY2NjM3LCA3OTk1LCA4NzU5LCAwLCAwLCAxMjQ0OSwgMCwgMCwgMCwgODc1MiwgMzE5NywgNDcyMCwgMTAxNjUsIDAsIAotICAgIDExOTI0OSwgMCwgMTE1OTUsIDY0ODkzLCAwLCAxMjAxODAsIDAsIDAsIDQ5OTMsIDAsIDYxNjgsIDEwOTM0LCAxOTQ2LCAKLSAgICA3NDEsIDAsIDU0OTQsIDQ2MzksIDAsIDE5OTAsIDY2NTg5LCA0NDk4LCAwLCAwLCAwLCAwLCAwLCAyOTYwLCA3Mzc3OSwgMCwgCi0gICAgODk2OSwgMCwgMCwgMCwgMCwgMjk1MCwgMCwgNjIxMCwgMCwgMzcwLCAwLCAwLCAwLCA0OTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA2NTY4OCwgMCwgNTA2MywgMzUxNywgMjk2NCwgMCwgMCwgNjUwOTQsIDc0NzkxLCAxMDU2NiwgMTAxNDQsIDY2MzMzLCAKLSAgICA4MjUyLCA3MjksIDY2MDE2LCAwLCAwLCAwLCA2NDkyMywgMCwgNjUyMDgsIDkwMzIsIDAsIDAsIDAsIDQxMjE1LCAwLCAKLSAgICA2NTg4MywgMCwgMCwgMTIwNjAyLCAzNzYxLCAwLCAwLCAwLCAwLCAxMjkxMiwgMTE5MDEyLCAzODUwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5MDgsIDAsIDg2MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NzgsIDEyMDU0MCwgMTE5MTM1LCA0MTU4NiwgMTA1MjcsIDAsIAotICAgIDkxNzg0OCwgMzg0OCwgMCwgMCwgMCwgNjUyNDEsIDUzMzYsIDAsIDAsIDY2MywgMCwgMTA3ODAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDM0NywgMCwgMCwgMCwgNjQ2NzUsIDQxNTgyLCAxMTkxMjYsIDAsIDY1NTc5LCAxMjk4MCwgMCwgMTIxNDMsIDczNzMzLCAKLSAgICAwLCAwLCAwLCA0MTgwNCwgMCwgMCwgMCwgMCwgMCwgNDE1ODQsIDEwNjgxLCAwLCAwLCA3MzkzOCwgMCwgMCwgNDgwMCwgCi0gICAgNjY2NjEsIDAsIDY2MzA2LCA2NDcxNSwgMCwgOTUxOCwgNjYwOSwgMTA0MzQsIDAsIDExMzE5LCAxMDk3LCAwLCA5MTc4NTAsIAotICAgIDQxNzMwLCAwLCAwLCAwLCAwLCA2NTE3MiwgNDE3MjgsIDQxNzIxLCAwLCAwLCAwLCA0MTIwMywgMCwgMTMxMTAsIDQxNzI2LCAKLSAgICAwLCAwLCAxMDAwLCAwLCAwLCA0MTE0MCwgMTIwOSwgMCwgMCwgMCwgMTA3MywgMCwgMCwgNDExMzgsIDAsIDAsIDAsIAotICAgIDEyMTY3LCAxMTE1LCA0MTYwNSwgOTc5NCwgMTI3MDYyLCAxMjcwNjMsIDEyNzA2NCwgMTIyMzcsIDEyNzA2NiwgNjYzMTQsIAotICAgIDY1ODcsIDkyOTAsIDAsIDAsIDkyMzEsIDAsIDI5NTksIDc5MjYsIDAsIDAsIDAsIDY0Mzk4LCAwLCAxMTk5NzAsIDEyMzExLCAKLSAgICAwLCAwLCAxMTg4NDYsIDAsIDAsIDAsIDExOTk3MywgMCwgMCwgMCwgMTIyOTAsIDAsIDAsIDAsIDQyMTQyLCAxMDE1MSwgCi0gICAgODIwNSwgMCwgNTEzMSwgMCwgOTYyNywgMCwgMCwgMCwgMCwgMTk0NCwgMTI0OCwgMTAxNDgsIDAsIDExOTk5MCwgMTE5OTkxLCAKLSAgICAxMjcwMSwgMTE5OTkzLCAxMTMwOCwgMTE5OTk1LCAwLCAxMTk5OTcsIDExOTk5OCwgNjUzMDUsIDc0MjYzLCA0MDMxLCAKLSAgICA0Mjc5NCwgMTIwMDAzLCA3MDc1LCA4MTU0LCAxMjAwMDYsIDEyMDAwNywgNDE4MTcsIDczOTM0LCA0MjI3NSwgMTIwMDExLCAKLSAgICAxMjAwMTIsIDEyMDAxMywgMTIwMDE0LCAxMjAwMTUsIDYwNDEsIDAsIDQxODk5LCAwLCA4MDAyLCAwLCA0MzY0LCAwLCAwLCAKLSAgICA2NDMzMiwgMCwgNzgxMywgOTA2NCwgMTE5OTg2LCAxMDEyNCwgNzUyNiwgODYwMSwgNzI4MSwgMCwgNzI3OSwgMTIwNDEsIAotICAgIDE0MTgsIDEwODg1LCAxMjY3MywgMCwgMCwgOTY2MCwgMCwgMTMwMTIsIDQ1NzEsIDAsIDAsIDAsIDEyMDc4LCAyOTcwLCAwLCAKLSAgICAxMDkzMywgMCwgMCwgMCwgMCwgMCwgNDE1OTksIDAsIDAsIDAsIDEyOTUwLCAwLCAzNDg2LCAwLCAwLCA0MjM5LCAwLCAwLCAKLSAgICA2NjUxMSwgMCwgMjYzNywgNjQ2MjksIDg0NjAsIDEyNzA1MywgODQ3NiwgMCwgMCwgMCwgMCwgNjU2NzMsIDEwMTksIDAsIAotICAgIDQxNDgsIDAsIDEyMjg5LCAwLCA0MzE2LCAwLCAxMzExOSwgMCwgNTQxMiwgNjYyNDMsIDEwNzQ0LCAwLCA3Mzg2NCwgMCwgCi0gICAgNDE3MzQsIDgyMDYsIDc0MDgxLCA5MTYzLCAzMjg2LCA5MDcyLCA1ODY3LCAxMzMwMiwgNzYyMiwgMCwgNDE3MzYsIDAsIAotICAgIDQxNzMxLCAwLCA5NDgzLCA1NDE2LCAwLCAxMTk1OTMsIDEwODE3LCAwLCA0MTUzOSwgMCwgMCwgNzM5NjMsIDQxODU1LCAKLSAgICA0MTg2NywgNjU1NjQsIDExMjc3LCA2NTg5MiwgMTE1MzYsIDEwNjIwLCAwLCAxMjIxMCwgMCwgNzM5MzIsIDU0OTgsIAotICAgIDczOTQyLCA0MTUzNiwgMCwgMCwgMCwgMzQ1OSwgODk5NywgMCwgMCwgMCwgMCwgMCwgMCwgNjYzNzcsIDAsIDAsIDAsIDAsIAotICAgIDMxNjEsIDI5NSwgMCwgMCwgMCwgMCwgMCwgOTAxNiwgMCwgNjM5MDMsIDYzOTAyLCA2MzkwMSwgMCwgMzk3MSwgMCwgCi0gICAgNzM5NzIsIDI5NTIsIDAsIDExMDM4LCAxMDkwMSwgNjM5MDAsIDYzODk5LCA2Mzg5OCwgMCwgNjY3LCAxMjMzMiwgNjM4ODcsIAotICAgIDYwODYsIDQxNzIyLCAwLCA1MTcyLCAwLCAwLCA0MTU5LCAwLCAwLCA5ODE1LCA2Mzg4NCwgMTk5MzQsIDYzODgyLCA0MTE5OCwgCi0gICAgODU1NSwgNjM4NzgsIDYzODc3LCA0MjQ2MCwgNjA1MCwgMCwgNjM4ODEsIDYzODcyLCAwLCA0MjQyMSwgMCwgNDE3MjMsIAotICAgIDYzODc1LCA2Mzg3NCwgMTE0NjAsIDc0MzIsIDE5MTMsIDQxOTEzLCA2Mzg1MiwgMCwgMCwgNDIzNDgsIDAsIDc0ODQxLCAKLSAgICA0NDYsIDQxOTExLCAwLCA2Mzg1MSwgNjM4NTAsIDQxOTEwLCAwLCA2Mzg0NiwgMjk3MiwgMTI5MzIsIDcyNjIsIDAsIAotICAgIDYzODQ5LCA2Mzg0OCwgNjM4NDcsIDAsIDAsIDgzMDIsIDcyNTksIDYzODQyLCA0MTc4LCAxMDc0NiwgNzI1MCwgMTMyMTQsIAotICAgIDEwMDQxLCA4MTA1LCA2Mzg5MiwgMCwgMTE4OTgzLCAxMTA1LCA0MTgwLCAwLCAxMjA5NCwgOTQ5NywgMCwgNjM4OTEsIAotICAgIDYzODkwLCA2Mzg4OSwgNjM4ODgsIDU1MzgsIDk5ODcsIDAsIDExODkzMiwgMTY3OCwgMTMyNzQsIDU1MiwgMCwgMCwgCi0gICAgMTA3ODUsIDAsIDExOTE3MCwgNDU1NywgMCwgOTE1OSwgMTAxNzEsIDEzMTI1LCA2Mzg2MCwgNTU0MCwgNjM4NTgsIDYzODY1LCAKLSAgICAyODEsIDEzMjQyLCA2Mzg2MiwgNzQxNTQsIDAsIDU1MzYsIDY1NTY4LCA2Mzg1NywgMTM4OCwgNzQxNjksIDAsIDEwNzcsIDAsIAotICAgIDY1MDk5LCAxMTUzMSwgMCwgMCwgMCwgMCwgMCwgNDI3NzMsIDAsIDAsIDAsIDExOTIyMCwgMCwgMzY2MywgMCwgMTExMiwgCi0gICAgMTE5MTIyLCA4Njg2LCAwLCA1MzM0LCA2NTA4MSwgMCwgNzQ3NzgsIDAsIDExMDc3LCAwLCA2NTA5LCAwLCA1MzI3LCAwLCAKLSAgICAxOTkwNywgNjM4NjksIDM0NzgsIDc1ODMsIDc2NzksIDI5MDMsIDAsIDMwMDEsIDExNTgsIDg3NDUsIDAsIDczNzQ4LCAKLSAgICA2Mzg2NiwgMCwgMTkxNSwgNDg0NiwgMCwgNjYzNzEsIDExODk4NCwgNDIxMDUsIDI5OTAsIDEyMDEyOCwgODA1LCAxMjAxMzAsIAotICAgIDEyMDEyNSwgMTIwNzAsIDg3NjAsIDExMTcsIDExODk4NywgMTIyMTIsIDEyMDEyMywgNjUxNzQsIDQyMzU3LCA2MzgzNSwgCi0gICAgNjM4MzQsIDAsIDAsIDEyMjI1LCA2MzgzOCwgNjM4MzcsIDAsIDAsIDYzODMzLCA2MDQyLCA2NjM2MCwgODA4MywgMCwgMCwgCi0gICAgNjM4MjEsIDYzODIwLCA2MzgxOSwgNjM4MTgsIDAsIDUyMjcsIDkwNDcsIDYzODIyLCAwLCA2MDkxLCAwLCAxMDY5MSwgNTYwLCAKLSAgICA1NjQzLCA4MjI2LCAxMTk1NzgsIDYzODEyLCA2MzgxMSwgNjM4MTAsIDYzODA5LCA1NTQyLCA2MzgxNSwgNjM4MTQsIAotICAgIDYzODEzLCA2MDQ3LCAxNTk3LCAxMjAxNDMsIDc4MCwgMjA2LCAwLCA0OTM2LCA2NTE0NywgODE2OCwgNjM5MzAsIDAsIAotICAgIDEwOTMsIDk4ODIsIDYzOTM0LCA2MzkzMywgNjM5MzIsIDkxNzU1NCwgNjM5MjksIDM1NDYsIDE2MDUsIDAsIDk4MDYsIAotICAgIDY1NTY2LCAwLCA4NDAwLCAxMTM0MywgNjM5MjAsIDAsIDYzOTI2LCAyOTg0LCA1OTY4LCA5Mjg3LCAwLCA0NjE4LCAwLCAwLCAKLSAgICAxMzE2OSwgNTI5MCwgNTI4MywgMTY5NSwgMTA3NDMsIDEwODgsIDYzODI1LCA3MjY4LCAxMDg0LCAxMDg1LCA2MzgyOSwgCi0gICAgMTA4MywgMTAxMzEsIDcyODMsIDAsIDYzOTcwLCAwLCAxMDkyLCA0NzU0LCA3MjczLCA1MjUyLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTgwOSwgMCwgMCwgMCwgMjk2NSwgNzI1OCwgODgwOCwgMCwgMTA4OSwgNDE4NywgNjM5MzcsIDQyMTE5LCA0MjEyMCwgMCwgCi0gICAgOTQwLCA1Nzg3LCAxMDA5OSwgNjM5MzgsIDAsIDc0NDk0LCAxMjQ2MywgMjk5NCwgMCwgMCwgMCwgOTY2NCwgMCwgMCwgMCwgCi0gICAgMCwgNzQzNDMsIDAsIDAsIDY2MCwgMTAxMjcsIDY2NiwgOTAyMiwgNTUzMiwgMCwgNTUzMywgMCwgMCwgNjExOCwgMjIyLCAKLSAgICA5NzksIDM4ODQsIDAsIDc0MTUxLCAxMjA0NDUsIDY1MDIsIDAsIDEyNzExOCwgMCwgNjM5NTEsIDEyNDY1LCAwLCAwLCAwLCAKLSAgICA2Mzk0NiwgMTcwNywgNjM5MjQsIDEyNDYxLCA2Mzk1MCwgNjM4OTcsIDYzOTQ4LCA2Mzk0NywgNjM5NDUsIDYwMzgsIAotICAgIDYzOTQzLCA2Mzk0MiwgNjQ2ODUsIDYzODk1LCA2NTgzOCwgMCwgNzc3NiwgMCwgMCwgMCwgMTIwNDQ0LCAwLCA4MDEsIAotICAgIDQzMTY1LCAxNjkwLCA2MzkxOSwgNjM5MTgsIDYzOTE3LCAxMzI3NywgNjM4OTMsIDAsIDEyMDYzOCwgOTkwNiwgNTQ4NiwgCi0gICAgMjMzNCwgMCwgNjM5MTYsIDU0ODMsIDYzOTE0LCAxMjA2MTAsIDYzOTExLCA1NDg0LCA2MzkwOSwgNjM5MDgsIDI1MzksIDAsIAotICAgIDYzOTEzLCA1NDg1LCAwLCAxOTUwNjAsIDkwNjEsIDU1MzQsIDEwNjcyLCA0NTAyLCAwLCAyNTMsIDAsIDAsIDAsIDQyODU0LCAKLSAgICAwLCAwLCAxMTUzMCwgMCwgMCwgMCwgMCwgMCwgMTA0NzQsIDAsIDEzMjU3LCA0MjM1NCwgMCwgMCwgMCwgMTk1MDY1LCAwLCAKLSAgICA4NDEzLCAwLCAwLCA1NjkzLCA3MjcyLCAwLCAxMzIwOSwgNjQ0NzAsIDY1ODMxLCAwLCAxOTUwNjMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDY2NjA4LCAzMTExLCA0MTg2MywgODgwNCwgNjY2MDcsIDAsIDcyNzAsIDAsIDY2NjA2LCA2NjI4LCAKLSAgICAxMDc2LCA0MTMwNSwgMTQzNiwgMCwgMCwgMCwgNjM5ODIsIDEwMjIxLCAxMjgwNywgNjM5MDcsIDYzOTA2LCAxNTk4LCAKLSAgICA2MzkwNCwgMCwgMCwgNDE3MjksIDQ0MjMsIDEzMDcsIDAsIDEwNTE1LCA0MTU4OSwgMCwgMCwgNjIxOCwgMCwgMTQzMCwgMCwgCi0gICAgMCwgMTIwNjA2LCAxMTkzNjUsIDU0MTMsIDc2MTksIDMyNTUsIDM0OTMsIDc0MDMyLCAxMTU0OSwgMTA3MzUsIDAsIDczOTM3LCAKLSAgICAxMDUxNywgMCwgMCwgMTA5OTAsIDY1MDczLCA1MTY3LCA0NDgxLCAzNzcxLCAwLCAyNzEwLCAwLCAwLCA0MTcyNCwgMCwgCi0gICAgNDMwNzMsIDQxNjkwLCAxMjQ3OSwgMCwgMCwgMCwgMCwgMTE5NjU5LCAxNjI4LCAwLCAwLCAwLCA2NTI2MiwgNjM4NTQsIAotICAgIDEwNzgzLCA0MjMxNSwgMCwgNjM4NTUsIDEyMDY4MywgMCwgMCwgNTMzOSwgNzQzMjMsIDAsIDEzMDA0LCAwLCA0NDU3LCAwLCAKLSAgICAwLCAwLCAwLCA1Njg0LCA4Njc4LCAxMDkxNCwgMCwgNTY4OSwgNjU4MDcsIDAsIDEyMDYxNywgMTI2MzMsIDAsIDAsIAotICAgIDY1MTgzLCA1Njg4LCAxMTkyNiwgNjAzMywgNjMxMCwgNTY4NiwgMCwgMCwgMCwgMTIwNjQ3LCAwLCA1MCwgMCwgOTg3MSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNjY0NjgsIDAsIDEzMjU5LCA0NDQ4LCAwLCAwLCAwLCAwLCA2Nzg1MywgMCwgMTA2NDAsIDAsIDExNTEsIAotICAgIDAsIDAsIDAsIDAsIDE5NTA1MCwgMCwgMCwgMCwgMCwgMTI1MDEsIDY0NjA0LCAwLCAxMTUyNywgMTE4ODcwLCA4ODEyLCAwLCAKLSAgICAxMTUzOCwgODY3MywgMTI2NTAsIDExMDIwLCAwLCA2NjQ2NywgMTA4MzksIDgwODcsIDAsIDAsIDk4OTQsIDAsIDAsIDAsIAotICAgIDQ2MzYsIDAsIDExODk4NSwgODA1MywgMCwgMCwgMCwgMCwgMTIwNDk1LCAwLCAwLCAxMjI3NywgMTk0NjI3LCAxMTk5NSwgCi0gICAgMTk0NjI2LCAwLCAxMjE1OCwgMCwgODc0MSwgMTAxOTcsIDAsIDAsIDAsIDY1MzEsIDAsIDAsIDQ3MywgMCwgMCwgMCwgCi0gICAgMTg3MywgMTA4NywgMCwgMCwgMCwgMCwgNjY0MzksIDQzMjE4LCAwLCAxOTQ3MTYsIDcyMzcsIDEyNTA0LCA3NDI4MiwgMCwgCi0gICAgMCwgMCwgOTQ4OSwgMCwgMCwgNDM4NCwgNzQyMjAsIDE5NTA1NSwgMCwgOTE3NTYxLCAxMzI5NSwgNDMxOTEsIDAsIDAsIAotICAgIDExNTQsIDM4NTcsIDEyMDUsIDAsIDAsIDEzMTAwLCAxMjk1OCwgMTIwNzA2LCA3NDE2OCwgMCwgMCwgNDQyMSwgMTA1OTIsIAotICAgIDAsIDQ5NSwgMCwgNDE3MTIsIDc5ODMsIDAsIDAsIDAsIDg0OTQsIDAsIDc2NTQsIDQxNzEwLCA0MTk2LCAwLCA0MzcsIAotICAgIDQxNzA5LCA3Mzc3MiwgMCwgMCwgOTQ2NSwgMTMyOTAsIDExOTE4MCwgNDk5NywgNjQzMDYsIDAsIDAsIDQ5OTksIDE5NDY0MiwgCi0gICAgMCwgMCwgNDcxMSwgMTIwNzY5LCAwLCAyNzM5LCAwLCA4MDQ0LCA3NDgzNCwgMCwgNDE3ODksIDAsIDEwODA5LCAwLCAwLCAwLCAKLSAgICAxNzc5LCA2NjAwLCA2NjAxLCA0MTU0MywgNTMyNSwgNjQyLCA2NDE4NywgMTMwNTgsIDAsIDAsIDAsIDAsIDEzMjI5LCAwLCAKLSAgICAxMDU3NSwgMCwgMCwgMCwgNDE3OTEsIDExMDQsIDAsIDAsIDEwNjU1LCAwLCAwLCAwLCAwLCAxMDgyLCAxOTUwNDksIDg0MjgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEwMTY3LCAwLCAxMjk5MywgODA0OSwgNDE1NDgsIDAsIDY0NTgsIDAsIDAsIDQ3NjEsIDYzODI4LCAKLSAgICA0NzY2LCA2NDYyMywgMTI3MywgMTk0NjUzLCAwLCAxMTg4NzYsIDAsIDY5MTIsIDEzMTMsIDcwMzMsIDEwNDgzLCAwLCAKLSAgICA0MTU0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ4NCwgNzQzMzcsIDAsIDAsIDg1MDMsIDUxMjIsIDQxNTI3LCAwLCAKLSAgICA2NjMyMCwgMCwgMCwgMCwgMCwgNDE1MzcsIDAsIDgzMDMsIDgyODIsIDExODE3LCAwLCAxMDAwMywgNzM4NTksIDY1OTA0LCAKLSAgICAxOTQ2NjMsIDE2ODYsIDAsIDAsIDExNDY3LCAzNjY0LCA2NTkyMSwgNjQyOTksIDE5NDY2NCwgMCwgMCwgNDMyNCwgMTI2LCAKLSAgICA0MjI0NiwgMTE5MTUyLCAwLCAwLCA2NTkyNiwgNzc0NCwgMTk0NjM2LCA3NDI3NywgNzQzMDIsIDAsIDAsIDY5NjYsIDAsIAotICAgIDgxMzYsIDAsIDY1NjAwLCAxNjMzLCAwLCAwLCA0NzYyLCAxMTAzLCAwLCAwLCA0NzY1LCAwLCAxMzA3OCwgMCwgNDc2MCwgCi0gICAgNjM4MjcsIDAsIDEwODcxLCA0MzE5OSwgMTEwMiwgMCwgMCwgMCwgMCwgMTE1NDYsIDc0Nzk0LCAzMzcsIDAsIDQyNTkxLCAKLSAgICA4NjI3LCAxMjI3OSwgMTExMSwgMCwgMCwgNDcwNywgMCwgMTAxNDMsIDc4ODMsIDEyNzA4MSwgNzg4MCwgNDUyMiwgODY0NSwgCi0gICAgNTcwNCwgMTMwMTAsIDAsIDgzMDQsIDAsIDAsIDExOTU3NSwgMCwgMCwgNjY2NTQsIDAsIDAsIDAsIDEzMDA4LCAwLCA0Mzg1LCAKLSAgICAwLCAxMzAxMSwgMCwgMCwgMTE5MTYxLCAxMzAwOSwgMTYwLCAyNjc3LCAwLCAwLCA0MTc5MywgNjU3NjMsIDc0MjIxLCAKLSAgICAxMjAxNDEsIDQxNzkyLCA0Mjc3MCwgMCwgNjU3NjIsIDExODgyOSwgNjQ1NzMsIDU3MDksIDAsIDE5NDYzOCwgMCwgMCwgMCwgCi0gICAgMTA3OSwgMzg2NywgNTcwOCwgMCwgMCwgMCwgNTcwNiwgNjQ3NjgsIDU3MDUsIDg3OTEsIDQwMDUsIDAsIDEwMjM3LCAKLSAgICAxMDk5MSwgMCwgOTE3NTc5LCA5MTczLCA5MTc1ODEsIDkxNzU4MCwgMTMxNzAsIDY1OTQyLCA5MTc1NzcsIDQyNjA1LCAKLSAgICAxMjA3NjUsIDkxNzU3MCwgOTE3NTczLCA5MTc1NzIsIDEwMDU4LCAwLCA3NDg2NywgMTk0NjU0LCAxMjcwNzgsIDMzMzksIAotICAgIDExNDQ4LCAxMTA2LCA5MTc1OTEsIDkxNzU5MCwgOTE3NTkzLCAzMzQwLCA5MTc1ODcsIDkxNzU4NiwgOTE3NTg5LCAKLSAgICA5MTc1ODgsIDkxNzU4MywgMTA2MDUsIDEzMDksIDYzOTY2LCAxMjA3NDMsIDE3NTQsIDEyNzA3NSwgMTMyNDYsIDg2NCwgMCwgCi0gICAgMTE4OTI2LCA4OTcyLCAwLCA3ODQ5LCAxMjAwOTIsIDAsIDEzMjQwLCAxOTUwNjgsIDUxOTIsIDQzMzgsIDAsIDEwOTQ4LCAKLSAgICA5MTc2MDEsIDEzMTk5LCAxMjAxNjksIDEyMzYsIDEzMjA4LCAxMzI2MSwgMTMxODksIDEzMTg4LCAxMjAxNjQsIDAsIDc0NDAsIAotICAgIDAsIDEyMDE1MywgOTU1MywgMTU5MCwgNjM3NzcsIDYzNzc2LCAxMzE3OCwgNjM3ODIsIDYzNzgxLCA2Mzc4MCwgNjM3NzksIAotICAgIDE1ODMsIDAsIDEzMjYwLCA0NTUwLCAwLCA2NDIwNSwgMCwgMCwgNDE1MjIsIDAsIDAsIDAsIDAsIDExMzU0LCAwLCAwLCAKLSAgICA0Mjc5NSwgMCwgMTE5MTk1LCAxMTM5NCwgMTk0NjQ2LCAxMzIzNiwgMTMyNzIsIDEzMTk0LCAxMzM0LCAwLCA0NDc5LCAKLSAgICAxMTc4LCA2NTU4NiwgMTIwNjYzLCA2NjY4MSwgMTE5MTkzLCA0NjAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2Mzc4NywgCisgICAgNjY1MDQsIDAsIDAsIDIzMDcsIDAsIDY0MzMzLCAwLCAwLCA3Mzg3MywgMCwgMCwgMCwgMCwgMCwgMCwgMTAzNjAsIDY3NDYsIAorICAgIDAsIDAsIDQ0MCwgMCwgMTMwODUsIDkyMzMsIDc0MjE2LCAwLCAwLCA2ODYxMiwgMCwgNjY0NDcsIDgwNDYsIDY0OTYzLCAKKyAgICA2NTc3NywgMTAxMjUsIDc0MjEyLCA0MjgxOSwgMTA5MTAsIDAsIDE1MjEsIDk4OTYsIDAsIDEwNDg3LCAwLCAxMjUyNywgMCwgCisgICAgNzk3MCwgMCwgMCwgMCwgNjU3NjksIDUyNDMsIDk4NDksIDUyMzksIDY1NzcxLCAwLCAwLCA1MjM3LCAwLCAwLCAxMDEwMywgCisgICAgNTI0NywgNDc2OSwgMCwgMTE4OTc3LCAxMjg3MywgNTc2NCwgMCwgMCwgMzAwOCwgNDg5NiwgMCwgMTIwODcsIDAsIDU1MjMxLCAKKyAgICA0MTEwMywgMCwgNjQ1NjUsIDQ3NzMsIDAsIDAsIDAsIDQ3NzAsIDAsIDkxNzU2NywgODczMSwgNjUzNzgsIDAsIDEyMDYxOSwgCisgICAgOTEyMiwgMCwgMCwgNDc3NCwgMzAxOSwgOTk5NywgMTI4MzQsIDAsIDk0NTYsIDEwMjE1LCAxMjA1NDcsIDAsIDAsIDAsIDAsIAorICAgIDc0Nzc2LCA0MjgxLCA0NzY4LCAwLCA0MTUzNSwgNDA5OSwgOTAxNywgMCwgMCwgNzgwOTUsIDAsIDc4MDk2LCAwLCAwLCAwLCAKKyAgICA3ODA5OCwgMCwgNDI4MTQsIDg4MCwgMCwgMCwgMCwgMCwgMCwgMTAxMTYsIDk4NzcsIDAsIDAsIDAsIDcwOTUsIDAsIDAsIAorICAgIDY3NzgsIDAsIDc4MDkwLCA4MjQzLCAyNDI3LCAwLCA3MDkzLCAwLCAxMTU4NSwgMTk1MDAzLCA5OTYyLCAwLCAxMjIyMywgMCwgCisgICAgMCwgMTQzNCwgMCwgNTYzNywgMTE1NzMsIDAsIDAsIDAsIDE5OTUxLCAwLCA3ODEyMSwgMCwgMCwgNTUyODMsIDAsIDAsIAorICAgIDc0NDM3LCAxMTU2LCA4NzQwLCAwLCAzNzgyLCA2NDMzMSwgMCwgNDEzNzAsIDEwMTQsIDgyNjEsIDAsIDAsIDEwODM1LCAwLCAKKyAgICA2NTUzNiwgMCwgMTIwNDYzLCAwLCA3NzAyLCAxMTg4MjQsIDAsIDQzMDEwLCA2NTc3OSwgNjU3ODMsIDExNTAsIDEwNTQ3LCAKKyAgICA1NzAwLCAwLCAxMjA2MDMsIDY1MzgzLCAyMzM5LCA0MjU5NCwgNTY5NywgMTE4Nzg4LCAwLCAwLCAwLCA0MjI1NywgNTY5NiwgCisgICAgMTIwNDcwLCAxMjA0NjUsIDM4NjIsIDk2NDMsIDAsIDAsIDc2MzQsIDY1MTY3LCA5ODQ1LCAwLCAwLCA1NzAxLCA5NzIyLCAKKyAgICA0MTQ5MCwgMCwgMTQyNiwgNjgyMTcsIDAsIDY4NDQ3LCA0MjIwNCwgNTUyNzAsIDg1NzEsIDE5NDk5MSwgMCwgMCwgNzg4MTgsIAorICAgIDAsIDQzMTgyLCAxMjE4NCwgMCwgNDIwMjIsIDAsIDEwMjgxLCAwLCA1NjUwLCA0MzE5NCwgNjQ3MTIsIDEwNzQ0LCAwLCAKKyAgICA5OTAsIDU2NDcsIDAsIDczODcsIDc4NzM0LCA0MTExNCwgMTE0NzcsIDU2NDYsIDEyODc5LCAxMTAxOCwgMCwgMzk0NSwgMCwgCisgICAgMCwgMCwgMCwgMCwgNzgyMTIsIDAsIDEwMjAsIDczNzYzLCAwLCA3ODczMSwgNTY0OCwgNjQ3NDgsIDE5NDkxMCwgMCwgCisgICAgMTAyMDUsIDM1NDUsIDAsIDY5ODQsIDAsIDc0MDUxLCAwLCA0MzI0MiwgMTIwNDU4LCAyNjY3LCAwLCAwLCAwLCA5OTExLCAwLCAKKyAgICA2NTAyMCwgMTAwOTcsIDExOTE2NiwgMCwgMCwgMTE4ODM2LCAwLCA3ODQyNywgMTE0MCwgNzg0MjYsIDAsIDEwMTU5LCAwLCAKKyAgICAwLCA4MTI4LCAwLCAwLCA5MTc5NjUsIDE4MTUsIDE5OTEwLCA4OTAsIDAsIDMyNjcsIDAsIDAsIDEwMTIzLCAwLCA0NDEwLCAKKyAgICAxMDQxLCAxMDU3NiwgNjM1NCwgMCwgNTgwLCA3NDIzMiwgMCwgMCwgMCwgMCwgMCwgMTk5MzgsIDY1OTA2LCAwLCAwLCAwLCAKKyAgICAzMjk4LCA1Mzc1LCAxMDE0MiwgMCwgODIxNSwgMCwgNjEzNCwgNDEyNDYsIDY0NDAyLCAwLCAwLCAwLCAwLCAwLCA0MTM4MiwgCisgICAgMCwgMCwgNTE3MywgNjUzNDgsIDUyNywgMCwgMCwgMCwgMCwgNzg3OTcsIDExOTE1LCAwLCAwLCAxMDA3MiwgMCwgNDI2OTUsIAorICAgIDIzMjksIDQyMjUwLCAwLCAwLCAwLCAxMjI0NSwgOTkzOSwgMCwgMCwgMCwgMCwgMCwgNzQzMjgsIDExOTU3NiwgNzQ3NjksIAorICAgIDAsIDExOTA4NywgOTA2OSwgNjE0NCwgMCwgMCwgNzM4MjIsIDAsIDAsIDY0OTE3LCA0MTUyMSwgMTE4OTM0LCA0OTQsIAorICAgIDEzMjUwLCAwLCA2NTA5OCwgNjM2NCwgOTU2LCAwLCAxMjgzMCwgMTA0NjIsIDczNzQwLCAwLCAwLCAwLCAwLCA2NjQ0OSwgCisgICAgMTMyNjMsIDc0MjgxLCA2OTIxNywgMTMxNzEsIDAsIDAsIDAsIDAsIDAsIDEwNDQsIDQxMjc2LCAwLCAwLCAwLCA0MjA2OCwgCisgICAgMTE3OTUsIDAsIDAsIDAsIDAsIDQyNDUwLCAzOTA3LCAwLCA2NDUyNiwgMCwgNjgxOTcsIDEyMjk1LCAwLCAxMTQ3NSwgMCwgCisgICAgMzAyMCwgMTE1MzcsIDAsIDY2NDQxLCAwLCAwLCAwLCAwLCAxMDU3LCA1NjYsIDQyNjk2LCAwLCAzMDE2LCA0MjI3NCwgCisgICAgNDM0NjQsIDY2NDkwLCAxMjkyMSwgNjY1NzEsIDc4NDcyLCAwLCAzMDA2LCA0NjIwLCAxMjcyMzcsIDAsIDAsIDAsIDY0NjU5LCAKKyAgICAwLCAwLCA1NTI1MywgNjM1NywgNjM2MiwgODYyNiwgMCwgMCwgOTA5MCwgNjUzNzcsIDQxNTk2LCAwLCAwLCAxNjk4LCAwLCAKKyAgICA2NDQ3NywgMCwgMCwgMTA1MywgMCwgNzgyNjksIDAsIDAsIDEwNTIsIDEwNTEsIDQ1OSwgMTA2MCwgNzQzNDksIDY2NDc5LCAKKyAgICAwLCAwLCAwLCAwLCA0MjQ5MCwgNjg5LCA2NTA4LCA0MTYzLCA0MjI5OCwgODYzOSwgNjY2NDEsIDQyNDYsIDAsIDAsIAorICAgIDEyMTMwLCAwLCA0MjMzNywgNjQ1OTYsIDY0Mzc1LCA2NjQ4MSwgMCwgMCwgMCwgNjM1OSwgMCwgNDM0NzEsIDAsIDAsIDAsIAorICAgIDEyNzI3NCwgMCwgNjM1OCwgNjM2MSwgMTkyNiwgNjM1NiwgMCwgNzg5OCwgODExMCwgMTA5MzUsIDAsIDQzNjMzLCA1ODMwLCAKKyAgICAwLCA0MzY4NSwgMCwgMCwgMCwgMCwgODY5MywgNzg2MTEsIDExOTU2NSwgMCwgMCwgMCwgMTI3MjU3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMTkxODcsIDExNDM5LCA3ODg2OCwgMCwgMCwgNzg4NjksIDQyMzEzLCA1NTc5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1NTc4LCA0MTc3NCwgMCwgNDIwMjMsIDYyMzQsIDU2NjksIDAsIDAsIDAsIDAsIDEyNzUwNiwgNjgyMDIsIDU1ODMsIDAsIDAsIAorICAgIDQyNDI2LCA1NTgwLCA0MjI3NiwgMjkyMywgODkyLCA1NTgyLCA0MjQ2NSwgNDEzMzAsIDE5NDk4NywgNTc5NSwgNjU1MTIsIAorICAgIDExOTAwNiwgNjU3MDIsIDAsIDEyMDgwMSwgNjUyNTEsIDAsIDY1NzEwLCAwLCAwLCA2NzY3MiwgMCwgNTM3MCwgMCwgCisgICAgMTk0OTg2LCAxNjM4LCAxMDk2NiwgMTAxODgsIDY1ODc4LCAxMTg4NDgsIDAsIDAsIDAsIDAsIDgxNzIsIDQyMDE3LCAwLCAKKyAgICAxMDg0NCwgMCwgMCwgMCwgNjM3NCwgMCwgMCwgMjg2LCA3ODAyMywgMTA2MiwgMCwgMTE5OTk5LCAwLCA3Mzk1LCAwLCAKKyAgICAxMDcwLCA2NDkwMCwgMCwgNjA5NSwgNDE4NjUsIDAsIDMwMTUsIDAsIDkxNzc2MywgNTIxMSwgMCwgNjQwMCwgMCwgCisgICAgMTk0OTgzLCAwLCA4MTg5LCAxMTI3NiwgMCwgMCwgMzcyLCAwLCAwLCAxMTg4NzQsIDQyMTAyLCA0MTU4NSwgMCwgMCwgCisgICAgNDIxMDEsIDI3NiwgNzg0MDIsIDAsIDMzLCA3NDIyNiwgMCwgOTAwNywgMTE4Nzk2LCA0MTU4OCwgNjYwMzMsIDQyNywgCisgICAgMTA3NjMsIDExODgxOSwgMCwgMCwgMCwgMTAzMSwgNjI1NywgMCwgNDIxMDQsIDAsIDAsIDIzMjgsIDAsIDEwNzEsIDAsIDAsIAorICAgIDc0ODQ4LCAwLCAwLCAwLCAxMDQ3LCAwLCAwLCA2NDc5MCwgMCwgMCwgMTA2NTEsIDAsIDAsIDAsIDAsIDAsIDExOTE4MSwgCisgICAgNTcxMSwgNDE2MzMsIDEyMDk4LCA2NTU3MSwgOTE2NiwgMCwgNTcxMCwgMCwgNjc5MCwgNjUxNjgsIDEzMjE2LCAwLCAwLCAwLCAKKyAgICAwLCA2NDYxMSwgNDE2MjMsIDE5NTAwMSwgNTcxNSwgMCwgMCwgMCwgNTcxMiwgMjc2MSwgNDE2MjAsIDY4MTI0LCAzMDc0LCAKKyAgICA1NzIyLCAwLCA4NjQzLCA3Mzc2OCwgMCwgMTE4OTA2LCAyNzU3LCAxMTA2NywgOTcxOCwgNzQ0OTgsIDg5MTAsIDEwNjg5LCAKKyAgICA2NDc5LCAwLCAwLCAwLCA3ODYwNywgMCwgMCwgMCwgMCwgMCwgMCwgMTE4OTExLCAwLCAwLCAwLCAwLCAwLCAxMjAwMTAsIDAsIAorICAgIDg3MDEsIDY4MTMwLCAxMTk2MTYsIDEyMDUyMiwgMCwgNDI0NzcsIDAsIDEyMTIzLCA0NDk1LCA0MzU2OSwgMCwgMCwgMCwgCisgICAgNjQ5NDYsIDEwOTkyLCAwLCAxMjAwMDksIDAsIDAsIDkzMTgsIDEyMDY2MSwgMTMyNDksIDY1Njc5LCA3MzgwOCwgMCwgCisgICAgNjU0NTcsIDQyMjQ5LCA3NjM5LCA0Mzk5NSwgNjc4NDUsIDQyNjQxLCA1NDU0LCAwLCAwLCAxOTQ5OTcsIDEyMDAwNSwgMCwgCisgICAgMCwgNTA4NCwgMCwgMCwgMTE4ODYxLCAwLCA3MzMsIDkxNzg3NiwgNzgwMTQsIDc4NDM2LCA3ODQzNSwgNDE2NzcsIDAsIAorICAgIDkyMTgsIDE3MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDAwMSwgMTI3MDE4LCAwLCA1MTU1LCAwLCA1MzU4LCAwLCAwLCAKKyAgICA5MTc3NjcsIDY0NDI0LCAwLCAzODQwLCA2NDMxNCwgNDE0MzIsIDAsIDAsIDY4NDMwLCAxMTkxMTYsIDQzMjUzLCA2NTk0MywgCisgICAgMCwgMzM3MSwgMTA5ODgsIDAsIDg3NzEsIDE0NzksIDAsIDAsIDExMDksIDExNTgwLCAwLCA2NDYwMSwgMTIyMDUsIDAsIDAsIAorICAgIDY0NTA3LCA4ODY4LCAzOTksIDAsIDc0ODQyLCAwLCAwLCAxMjE0OSwgMTMwODgsIDU1MSwgMCwgMTAxNTYsIDEyMTE5LCAwLCAKKyAgICAwLCAyNTQ0LCA2NTA3NCwgMCwgMCwgMCwgNzgwMTEsIDM1MSwgMTE5MTQ5LCAwLCAwLCA1NTIyOSwgMCwgNzQyNjgsIDAsIDAsIAorICAgIDAsIDQyMzc3LCAwLCAwLCAwLCAwLCAwLCA5MDEzLCA0MDU0LCAwLCAwLCAwLCAwLCA3Mzk2MCwgNTU4NSwgNjU4ODEsIAorICAgIDI1NDksIDc0NDY5LCAwLCAwLCA1NTg0LCA4MzU4LCAwLCA3NDQxMSwgMCwgMTA5MTksIDAsIDc5ODAsIDAsIDAsIDAsIAorICAgIDQxODAwLCA1NTg5LCAwLCAyNjY0LCA0MTYxMywgNTU4NiwgMTE4ODkwLCAwLCAxMTM1NiwgMCwgMCwgNDM0NTIsIDc4NjA5LCAKKyAgICAwLCA0MjU3MywgNjc4NTYsIDAsIDc4MTI5LCAwLCAwLCAwLCA4MTM1LCA2NDUwLCAxMDA1NSwgNzc5OTYsIDAsIDAsIDAsIAorICAgIDU2NTcsIDAsIDk2MjYsIDAsIDc3OTk0LCAxMDE3OSwgNTY1NCwgMTI5MzksIDAsIDEyMDc5OSwgMCwgMCwgNTY1MiwgCisgICAgMTA5NDUsIDAsIDY2NDg2LCAwLCAzNjYxLCA3ODYzLCAwLCAwLCAwLCA3NDUwOSwgMCwgNTY1OSwgMCwgMCwgNjY3MjksIAorICAgIDU2NTUsIDAsIDQyMTY4LCAwLCAxMDU1LCA5MTc2MjgsIDAsIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgCisgICAgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIDEwMzA0LCAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCAKKyAgICAwLCA2NDg3MCwgMCwgMzQ2NywgMCwgMCwgMzMzMSwgOTQ2LCAxMDIzMSwgMTQ5NSwgODEzMSwgNzQzMzAsIDAsIDk1NjIsIAorICAgIDY5MjIyLCA2NTkyNywgMCwgMCwgMTIwMTU1LCA2OTc2OSwgNjQ2NTYsIDAsIDAsIDE5NDgzNywgMCwgNTY2NiwgNjUyMjcsIAorICAgIDUzMTgsIDYzOTk0LCAwLCA5MDkxLCAxMDc5OCwgMCwgOTE3OTc5LCAxMDE4NiwgMCwgNzczMiwgMCwgNjQ1NTYsIDAsIDAsIAorICAgIDU2NjgsIDc0NDQ1LCAwLCAwLCA1NjcwLCAwLCAwLCAxMTgyMCwgMjk5MiwgNzgyNiwgNTY2NywgMTk5NTIsIDEyMDgwNywgMCwgCisgICAgMTI3NDksIDAsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIDE0OTcsIDAsIDAsIDAsIDAsIDM1NzEsIAorICAgIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgNjg0MzUsIDc4Mjc4LCA2Nzg5NiwgNDMxOTIsIDAsIDc4MjY1LCA1NTMsIDEyMDY1MywgCisgICAgMCwgMCwgNTgyOSwgMCwgNDU4NywgNzgyODUsIDY1OTEyLCAwLCAxMjc0NiwgMCwgMCwgMTE5OTI0LCA1NjMzLCAxMTk5MjcsIAorICAgIDAsIDAsIDAsIDY0OTA1LCAwLCA5NTEyLCAwLCAxMjc0MiwgNjQ0MywgMCwgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAKKyAgICAwLCAwLCAwLCAxMjE0OCwgMCwgNzgyOTcsIDAsIDY0MjU2LCAwLCAxMTY2OSwgMCwgNTYzNCwgNDUyNCwgMCwgMTI3MjcwLCAKKyAgICAwLCAxMTg4ODAsIDI0MjUsIDY1MTgyLCAwLCA0MzYzNiwgNTIyMSwgNzg0MTAsIDMyOCwgMCwgMCwgNjk4MTUsIDU2MzYsIDAsIAorICAgIDUzMjksIDAsIDU2MzgsIDExOTkxOCwgNzk0MCwgNjQ5MzgsIDQzMjIzLCAwLCA1NjM1LCAzMzczLCAyOTg2LCA3ODI5MiwgCisgICAgNzQyMjMsIDM0MzcsIDc4MjkxLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgODI3NCwgMCwgMCwgMTY1NywgNDE1NjEsIDc4Mjk5LCAKKyAgICA3ODI5NSwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgNzgzMDMsIDAsIDc4MzAwLCA0MjIyNywgMCwgMCwgNDE2MzcsIAorICAgIDY3ODcyLCAwLCA3ODMxMCwgNDE2MjUsIDQzMzYyLCA3ODMwOSwgMTIwNzEzLCAxMTcwNSwgNTY0MiwgMCwgNTQ4NiwgMCwgCisgICAgNDM1NiwgMTE3MTAsIDAsIDEyMDUxLCAwLCAwLCA1NjQxLCA4MjU5LCAwLCAxMDU4LCAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgCisgICAgNzg3NTAsIDAsIDQyMjI4LCAwLCA3Mzg5MCwgMTE4OTcyLCAwLCA2NTMyMiwgMCwgNTY0NSwgNjQ5NjQsIDg2NTIsIDI1NDcsIAorICAgIDY2NDg0LCA0MzYzNCwgMCwgNTYwOCwgNjU4OTAsIDAsIDAsIDY3NjIxLCAxMTk5MzQsIDkwMDAsIDAsIDAsIDAsIDE4NjUsIAorICAgIDAsIDU2MTMsIDc0MjY3LCAwLCAwLCA1NjEwLCAwLCAwLCA2NTgyNiwgMjA2OSwgMCwgMTA3ODcsIDQzOTk5LCAyOTk3LCAwLCAKKyAgICA1NjA5LCA3ODMxNiwgNjUzMTksIDc4MzEzLCAxMjMxNiwgNjUzNzYsIDI0MTIsIDAsIDgxODYsIDk4MDcsIDc0MjY5LCAwLCAKKyAgICAxMzEzMCwgNjU4NzQsIDAsIDU4MDcsIDAsIDEwMDMwLCA1MzA2LCAxMjkzNiwgMCwgMCwgMTE3MDQsIDAsIDAsIDEwMjExLCAKKyAgICAwLCAwLCAwLCAwLCAxMTcwNiwgOTcxMCwgMCwgMCwgMCwgNDEzLCA2NTYyMywgNzQyMzcsIDAsIDkxMzMsIDc0MjYyLCAwLCAKKyAgICAxMDQyLCAwLCA2NDc3OSwgMTIxNzEsIDExOTI0MCwgNjE4NSwgNjQ3NzYsIDQ5ODQsIDAsIDcwOCwgMTEzOTEsIDAsIAorICAgIDEyMjQxLCAwLCAwLCAxMzA4LCAwLCAyNTM0LCA4MTAsIDAsIDAsIDAsIDAsIDAsIDE5MTcsIDMwMDAsIDAsIDAsIDEyMDczOSwgCisgICAgMjM2NCwgMCwgNzQ0NzAsIDY2NjE4LCA2NTY4MCwgMCwgMTAwMjcsIDAsIDAsIDEyMzM3LCAxMjA3MjIsIDAsIDAsIDI5ODAsIAorICAgIDc1NSwgNjk3NzQsIDkzMSwgMTMxMjQsIDY4MTgyLCA2MzYzLCAyNzQ4LCAwLCAwLCA2NTA0MSwgMCwgNDQwMTEsIDg3MzAsIAorICAgIDAsIDAsIDc4MzEyLCA3Mjc0LCAxMTkyNTAsIDAsIDcyNzUsIDc4MzA0LCA5MzUsIDAsIDY1ODQwLCAzNzcsIDQyMzI1LCAKKyAgICAxMTY0OSwgMCwgNjUyNTMsIDY0MzAxLCAwLCA3ODMwOCwgNDIzNDEsIDY1Mjg0LCAyNDE3LCAwLCAxMjg4NCwgMTk5MTIsIAorICAgIDc5MDcsIDEwNzY4LCAwLCAxOTQ5OTgsIDAsIDEwNjczLCAxMTkyMTcsIDcyNDgsIDAsIDAsIDE3ODEsIDU0OTYsIDM2MjcsIAorICAgIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDAsIDc4MjI2LCAwLCAxMjc1MTIsIDAsIDAsIDAsIDAsIDQzNjg5LCAwLCAxMzE0MiwgCisgICAgNzg4MTIsIDQyNDE1LCA2NjU3NSwgNDU0MiwgNzQwMzcsIDQzNTQ3LCAwLCAwLCA3Njc3LCAyOTkxLCA0OTQ2LCA0MjQ1NCwgCisgICAgMCwgNzk0OSwgMCwgMCwgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDQ2NTcsIDAsIDAsIDY0NzgsIAorICAgIDk4OTgsIDQzNjczLCA2NTIzNywgNjI0MSwgMCwgNDg3NywgMCwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgNDQwOSwgMCwgMCwgCisgICAgNjQ3OTgsIDAsIDUzNDYsIDAsIDEyMDUyOCwgNjIzNywgNDg3NCwgMCwgOTE3NiwgMCwgMCwgNjUyMzEsIDY1ODg0LCAKKyAgICAxMjY3OCwgNzg3NDgsIDExODkxMiwgMTEzNzgsIDQ0MDE4LCA0Mjc4NSwgMjQwOCwgMzI1MSwgMCwgMCwgNTY4NSwgMCwgCisgICAgMjQ2MSwgMTEwNTIsIDcwOTEsIDUzNDIsIDgzMTcsIDAsIDY4MTYzLCA1MzQwLCAwLCAwLCA0MzYzNSwgNzM5MjgsIAorICAgIDEyNzUyOSwgMCwgMCwgMCwgMCwgNjU0ODIsIDAsIDkxNDIsIDAsIDAsIDAsIDEwOTM4LCAwLCAxMTg3OTAsIDExODIsIAorICAgIDI1NDIsIDQ4MjYsIDAsIDAsIDAsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIDEwNzkwLCAxMDgzOSwgNjYwMjMsIDQxNTkzLCAKKyAgICA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDAsIDExMzc2LCA3NDM3OSwgMTA3MjEsIDY3NjY0LCAKKyAgICAzNDM4LCA0MjA5NywgMTI3MjY3LCAxMTA4NCwgMzE5NCwgNDE4NzAsIDI2NiwgNzgzMDUsIDAsIDQxODczLCAxMjA1NzUsIAorICAgIDExMzI0LCAwLCAwLCA4NDIwLCA2NDkxOCwgMCwgNDE4NzEsIDQxMzM4LCAzNzM0LCA3NzM0LCA0MzY4MywgODc1MCwgCisgICAgNjY2MDUsIDY2MDExLCAwLCA0MDk2NSwgMCwgMCwgNTE2MSwgMTA1NzIsIDAsIDAsIDAsIDY0MzQ5LCA3Mjg3LCA0MjE2MiwgCisgICAgMTI3NTUyLCAwLCAwLCAxMTk0OCwgNjkyMjAsIDEyMzU5LCA0MzQyOSwgNDEzNjksIDE2OTcsIDEyMTkxLCAwLCA2ODYzMywgCisgICAgNzI4NiwgMCwgNjg2MzUsIDEwMDMxLCAwLCA5ODcwLCA2ODY0NSwgODYyMCwgNjU4MjQsIDAsIDExOTM4LCAwLCA3Mjg1LCAwLCAKKyAgICAxMTk1NzcsIDQyNjc4LCAwLCA0MzY3NywgNDE1ODMsIDAsIDY1Nzk5LCAwLCAwLCAwLCAwLCA3ODE2OSwgNjYxOTksIDAsIAorICAgIDM2MDksIDY4NjI0LCAwLCA4MzIsIDEyMDY5MywgMTIwNzcwLCA3ODQ3MywgNjYwMDcsIDc4NDcxLCA2NTcwMywgMCwgMCwgCisgICAgNDI3MzIsIDUxODAsIDAsIDQxMzk1LCA0MTUzMCwgMTE2OTEsIDY0NzczLCAwLCA3NDAwMiwgMCwgMCwgMCwgNjM0OCwgMjQzLCAKKyAgICAxMzIwMCwgMCwgNjAyNCwgMCwgOTk3OSwgMTAwMzcsIDQxNTI5LCAxMDY0OCwgODUzOCwgNDM2ODcsIDAsIDAsIDQyODUsIAorICAgIDY2MTk1LCAwLCA0MjMwLCAwLCAxMzMwNywgNDMyNTYsIDAsIDc1NjMsIDQyMzc2LCAwLCA2ODQ0MiwgMTIwNTEyLCAwLCAwLCAKKyAgICAyMTQsIDAsIDAsIDc4NDY2LCA2NTg5MywgMTIyMDgsIDk5NzMsIDAsIDY2MzExLCA2NTU4OSwgMCwgMjYwMywgMCwgMCwgMCwgCisgICAgMCwgMCwgNjAyMiwgMCwgMjg4NCwgMCwgMTE2MjAsIDAsIDQzLCAwLCA2NjQ1MywgMTAxNiwgNDExMDcsIDAsIDQxMTIxLCAKKyAgICAzODg1LCA5MiwgNjU0NTYsIDY0NjA4LCAwLCA3NDgwMSwgMCwgMjA3NCwgMCwgNzgyODMsIDAsIDEyNDUzLCAwLCAwLCAKKyAgICA3NDI0MSwgMCwgNjc5MSwgMTI0NTcsIDc4MjY4LCAwLCAwLCAwLCA3ODI3OSwgMCwgMCwgMCwgNjY2MzcsIDc5OTUsIDg3NTksIAorICAgIDQzNDIxLCA3ODI3NywgMTI0NDksIDAsIDAsIDAsIDg3NTIsIDMxOTcsIDQ3MjAsIDEwMTY1LCAwLCAxMTkyNDksIDAsIAorICAgIDExNTk1LCA2NDg5MywgMCwgNDM0MzUsIDAsIDAsIDQ5OTMsIDAsIDYxNjgsIDEwOTM0LCAxOTQ2LCA3NDEsIDAsIDU0OTQsIAorICAgIDQ2MzksIDAsIDE5OTAsIDY2NTg5LCA0NDk4LCA3ODY2NCwgMTE5MTgzLCAwLCAwLCAwLCAyOTYwLCA3Mzc3OSwgMCwgODk2OSwgCisgICAgMCwgNDM0MjQsIDEyNzA1OSwgMCwgMjk1MCwgMCwgNjIxMCwgNjU3NTMsIDM3MCwgMCwgMCwgMCwgNDk1MywgMCwgMCwgMCwgCisgICAgMCwgNjkyMzAsIDAsIDAsIDY1Njg4LCAwLCA1MDYzLCAzNTE3LCAyOTY0LCA0MzY2MywgOTE3NzYyLCA2MzQ0LCA3NDc5MSwgCisgICAgMTA1NjYsIDEwMTQ0LCA2NjMzMywgODI1MiwgNzI5LCA2NjAxNiwgNzgyNTMsIDAsIDAsIDY0OTIzLCAwLCA0MzY2OSwgCisgICAgOTAzMiwgNzgyNjMsIDc4MjY0LCAwLCA0MTIxNSwgMCwgNjU4ODMsIDAsIDAsIDEyMDYwMiwgMzc2MSwgMCwgMCwgMCwgMCwgCisgICAgMTI5MTIsIDExOTAxMiwgMzg1MCwgMCwgMCwgMCwgMCwgMCwgOTA4LCAwLCA4NjExLCAwLCAwLCAwLCA0MzY5MSwgNDExOTcsIAorICAgIDAsIDg5NzgsIDEyMDU0MCwgMTE5MTM1LCA0MTU4NiwgMTA1MjcsIDAsIDkxNzg0OCwgMzg0OCwgNzg3MzksIDE5NDkzNywgCisgICAgMTI3NTM2LCA2NTI0MSwgNTMzNiwgMCwgMCwgNjYzLCAwLCAxMDc4MCwgMCwgMCwgNzg3NjcsIDAsIDAsIDY4MTkzLCAzNDcsIAorICAgIDAsIDAsIDc4Nzc1LCA2NDY3NSwgNDE1ODIsIDc4Nzc0LCA3ODc0NCwgNjU1NzksIDEyOTgwLCA3ODc2OSwgMTIxNDMsIAorICAgIDczNzMzLCA3ODUxMiwgMCwgNDM0NDEsIDQxODA0LCA3ODUyMywgMCwgNzg1MjUsIDAsIDAsIDQxNTg0LCAxMDY4MSwgMCwgMCwgCisgICAgNzM5MzgsIDAsIDAsIDQ4MDAsIDY2NjYxLCAwLCA2NjMwNiwgNjQ3MTUsIDc4NTM0LCA5NTE4LCA2NjA5LCAxMDQzNCwgMCwgCisgICAgMTEzMTksIDEwOTcsIDAsIDkxNzg1MCwgNDE3MzAsIDAsIDAsIDczODQ3LCA3ODc2MSwgNjUxNzIsIDQxNzI4LCA0MTcyMSwgCisgICAgMCwgMCwgMCwgNDEyMDMsIDAsIDEzMTEwLCA0MTcyNiwgMCwgMCwgMTAwMCwgMCwgMCwgNDExNDAsIDEyMDksIDczOTc4LCAwLCAKKyAgICA3Mzc1MCwgMTA3MywgNjMyMSwgNzc4NzgsIDQxMTM4LCAwLCA2ODIxMywgMCwgMTIxNjcsIDExMTUsIDQxNjA1LCA5Nzk0LCAKKyAgICAxMjcwNjIsIDY3NjcxLCA1NTI0OCwgMTIyMzcsIDc4Nzg3LCA2NjMxNCwgNjU4NywgOTI5MCwgNzg3ODIsIDc4NzgzLCAKKyAgICA5MjMxLCA3ODc4MSwgMjk1OSwgNzkyNiwgMCwgMCwgMCwgNjQzOTgsIDAsIDExOTk3MCwgMTIzMTEsIDAsIDc4Nzk2LCAKKyAgICA3ODc5OCwgNzg3OTQsIDc4Nzk1LCA2ODQzNCwgNzg3OTMsIDY2NjcwLCAwLCAwLCAxMjI5MCwgMCwgMCwgMCwgNDIxNDIsIAorICAgIDk5NjgsIDgyMDUsIDAsIDUxMzEsIDAsIDk2MjcsIDc4NTM2LCA3ODU0MiwgNzg1MzUsIDAsIDE5NDQsIDEyNDgsIDEwMTQ4LCAKKyAgICAwLCAxMTk5OTAsIDExOTk5MSwgMTI3MDEsIDc4Mzc2LCAxMTMwOCwgMTE5OTk1LCAwLCAxMTk5OTcsIDExOTk5OCwgNjUzMDUsIAorICAgIDc0MjYzLCA0MDMxLCA0Mjc5NCwgMTIwMDAzLCA3MDc1LCA4MTU0LCAxMjAwMDYsIDEyMDAwNywgNDE4MTcsIDczOTM0LCAKKyAgICA0MjI3NSwgMTIwMDExLCAxMjAwMTIsIDc4NTI2LCAxMjAwMTQsIDEyMDAxNSwgNjA0MSwgMCwgNDE4OTksIDAsIDgwMDIsIDAsIAorICAgIDQzNjQsIDAsIDAsIDY0MzMyLCAwLCA3ODEzLCA5MDY0LCAxMTk5ODYsIDEwMTI0LCA3NTI2LCA4NjAxLCA3MjgxLCA3ODQ1NSwgCisgICAgNzI3OSwgMTIwNDEsIDE0MTgsIDEwODg1LCAxMjY3MywgMCwgMCwgOTY2MCwgMCwgMTMwMTIsIDQ1NzEsIDAsIDAsIDAsIAorICAgIDEyMDc4LCAyOTcwLCAwLCAxMDkzMywgMCwgNzc4NzAsIDAsIDAsIDAsIDQxNTk5LCAwLCAwLCAwLCAxMjk1MCwgMCwgMzQ4NiwgCisgICAgMCwgMCwgNDIzOSwgMCwgMCwgNjY1MTEsIDAsIDI2MzcsIDY0NjI5LCA4NDYwLCAxMjcwNTMsIDg0NzYsIDAsIDAsIDAsIDAsIAorICAgIDY1NjczLCAxMDE5LCA3ODQ5NSwgNDE0OCwgMCwgMTIyODksIDAsIDQzMTYsIDAsIDEzMTE5LCAwLCA1NDEyLCA2NjI0MywgCisgICAgOTkzNSwgMCwgNzM4NjQsIDAsIDQxNzM0LCA4MjA2LCA3NDA4MSwgOTE2MywgMzI4NiwgOTA3MiwgNTg2NywgMTMzMDIsIAorICAgIDc2MjIsIDAsIDQxNzM2LCAwLCA0MTczMSwgMCwgNzQwMCwgNTQxNiwgNjg2NjMsIDExODkyNCwgMTA4MTcsIDAsIDQxNTM5LCAKKyAgICAwLCAwLCA3Mzk2MywgNDE4NTUsIDQxODY3LCA2NTU2NCwgMTEyNzcsIDY1ODkyLCAxMTUzNiwgMTA2MjAsIDAsIDEyMjEwLCAKKyAgICA2NjAzMCwgNzM5MzIsIDU0OTgsIDczOTQyLCA0MTUzNiwgMCwgNjgyMDQsIDAsIDM0NTksIDg5OTcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDY2Mzc3LCA2OTc4MSwgMCwgMCwgNzg1MTEsIDMxNjEsIDI5NSwgMTIwMjA3LCAwLCAwLCAwLCA3ODc0MiwgOTAxNiwgCisgICAgNDM0NTQsIDYzOTAzLCA2MzkwMiwgNDM2NDEsIDAsIDM5NzEsIDAsIDczOTcyLCAyOTUyLCA3ODc2NSwgMTEwMzgsIDEwOTAxLCAKKyAgICA2MzkwMCwgNjM4OTksIDYzODk4LCAwLCA2NjcsIDEyMzMyLCA2Mzg4NywgNjA4NiwgNDE3MjIsIDAsIDUxNzIsIDAsIDAsIAorICAgIDQxNTksIDAsIDAsIDk4MTUsIDYzODg0LCAxOTkzNCwgNjM4ODIsIDQxMTk4LCA4NTU1LCA2Mzg3OCwgNjM4NzcsIDQyNDYwLCAKKyAgICA2MDUwLCA0MjcwOCwgNjM4ODEsIDYzODcyLCAwLCA0MjQyMSwgMCwgNDE3MjMsIDYzODc1LCA2Mzg3NCwgMTE0NjAsIDc0MzIsIAorICAgIDE5MTMsIDQxOTEzLCA2Mzg1MiwgMCwgMCwgNDIzNDgsIDAsIDY3NTIsIDQ0NiwgNDE5MTEsIDAsIDYzODUxLCA2Mzg1MCwgCisgICAgNDE5MTAsIDAsIDYzODQ2LCAyOTcyLCAxMjkzMiwgNzI2MiwgMCwgNjM4NDksIDYzODQ4LCA2Mzg0NywgMCwgNjU3MCwgCisgICAgODMwMiwgNzI1OSwgNjM4NDIsIDQxNzgsIDEwNzQ2LCA3MjUwLCAxMzIxNCwgMTAwNDEsIDgxMDUsIDYzODkyLCAwLCAKKyAgICAxMTg5ODMsIDExMDUsIDQxODAsIDAsIDEyMDk0LCA5NDk3LCAwLCA2Mzg5MSwgNjM4OTAsIDYzODg5LCA2Mzg4OCwgNTUzOCwgCisgICAgOTk4NywgMCwgMTE4OTMyLCAxNjc4LCAxMzI3NCwgNTUyLCAxMjA2NTQsIDQ0MDEwLCAxMDc4NSwgMCwgMTE5MTcwLCA0NTU3LCAKKyAgICA3NDQ1OSwgOTE1OSwgMTAxNzEsIDEzMTI1LCA2Mzg2MCwgNTU0MCwgNjM4NTgsIDYzODY1LCAyODEsIDEzMjQyLCA2Mzg2MiwgCisgICAgNzQxNTQsIDAsIDU1MzYsIDY1NTY4LCA2Mzg1NywgMTM4OCwgNzQxNjksIDAsIDEwNzcsIDAsIDY1MDk5LCAxMTUzMSwgCisgICAgNTgzNCwgMCwgMCwgMCwgMCwgNDI3NzMsIDAsIDAsIDAsIDExOTIyMCwgMCwgMzY2MywgMCwgMTExMiwgMTE5MTIyLCA4Njg2LCAKKyAgICAwLCA1MzM0LCA2NTA4MSwgNDMyNDksIDc0Nzc4LCAwLCAxMTA3NywgMCwgNjUwOSwgMCwgNTMyNywgMCwgMTk5MDcsIAorICAgIDYzODY5LCAzNDc4LCA3NTgzLCA3Njc5LCAyOTAzLCAwLCAzMDAxLCAxMTU4LCA4NzQ1LCAwLCA3Mzc0OCwgNjM4NjYsIDAsIAorICAgIDE5MTUsIDQ4NDYsIDAsIDY2MzcxLCAxMTg5ODQsIDQyMTA1LCAyOTkwLCAxMjAxMjgsIDgwNSwgNjkyMzgsIDEyMDEyNSwgCisgICAgMTIwNzAsIDg3NjAsIDExMTcsIDExODk4NywgMTIyMTIsIDEyMDEyMywgNjUxNzQsIDQyMzU3LCA2MzgzNSwgNjM4MzQsIDAsIAorICAgIDc4MjQwLCAxMjIyNSwgNjM4MzgsIDYzODM3LCAwLCAwLCA2MzgzMywgNjA0MiwgNjYzNjAsIDgwODMsIDAsIDAsIDYzODIxLCAKKyAgICA2MzgyMCwgNjM4MTksIDYzODE4LCAwLCA1MjI3LCA5MDQ3LCA2MzgyMiwgMCwgNjA5MSwgMCwgMTA2OTEsIDU2MCwgNTY0MywgCisgICAgODIyNiwgMTE5NTc4LCA2MzgxMiwgNjM4MTEsIDYzODEwLCA2MzgwOSwgNTU0MiwgNjM4MTUsIDYzODE0LCA2MzgxMywgCisgICAgNjA0NywgMTU5NywgMTIwMTQzLCA3ODAsIDIwNiwgNzc5MjUsIDQ5MzYsIDY1MTQ3LCA4MTY4LCA2MzkzMCwgMjA3NiwgCisgICAgMTA5MywgOTg4MiwgNjM5MzQsIDIwODIsIDYzOTMyLCA5MTc1NTQsIDYzOTI5LCAzNTQ2LCAxNjA1LCA3NzkzNCwgOTgwNiwgCisgICAgNDM0NzIsIDc3OTMzLCA4NDAwLCAxMTM0MywgMjA4NiwgMCwgNjM5MjYsIDI5ODQsIDU5NjgsIDkyODcsIDAsIDQ2MTgsIAorICAgIDQyMjA5LCA0MzQzMSwgMTMxNjksIDUyOTAsIDIwODksIDE2OTUsIDEwNzQzLCAxMDg4LCA2MzgyNSwgNzI2OCwgMTA4NCwgCisgICAgMTA4NSwgNjM4MjksIDEwODMsIDEwMTMxLCA3MjgzLCAwLCA2Mzk3MCwgMCwgMTA5MiwgNDc1NCwgNzI3MywgNTI1MiwgCisgICAgNDQwMTYsIDQzNjI3LCAwLCAwLCA3NDA4LCAxMTgwOSwgMCwgMCwgMCwgMjk2NSwgNzI1OCwgODgwOCwgMCwgMTA4OSwgCisgICAgNDE4NywgNjM5MzcsIDQyMTE5LCA0MjEyMCwgMCwgOTQwLCA1Nzg3LCAxMDA5OSwgNjM5MzgsIDAsIDc0NDk0LCAxMjQ2MywgCisgICAgMjk5NCwgMCwgMTE4ODI3LCAwLCA5NjY0LCA3NzkzOSwgNzc5NDAsIDY3ODkyLCA3NzkzOCwgNzQzNDMsIDAsIDAsIDY2MCwgCisgICAgMTAxMjcsIDY2NiwgOTAyMiwgNTUzMiwgNDM2NjcsIDU1MzMsIDc3OTQxLCA3ODUwNywgNjExOCwgMjIyLCA5NzksIDM4ODQsIAorICAgIDAsIDc0MTUxLCAxMjA0NDUsIDY1MDIsIDAsIDEyNzExOCwgMCwgNjM5NTEsIDEyNDY1LCAwLCAwLCAwLCA2Mzk0NiwgMTcwNywgCisgICAgNjM5MjQsIDEyNDYxLCA2Mzk1MCwgNjM4OTcsIDYzOTQ4LCA2Mzk0NywgNjM5NDUsIDYwMzgsIDYzOTQzLCA2Mzk0MiwgCisgICAgNjQ2ODUsIDYzODk1LCA2NTgzOCwgMCwgNzc3NiwgMCwgMCwgMCwgMTIwNDQ0LCA3ODE3MiwgODAxLCA0MzE2NSwgMTY5MCwgCisgICAgNjM5MTksIDYzOTE4LCA2MzkxNywgMTMyNzcsIDQzNjU5LCAxMjk1MSwgMTIwNjM4LCA5OTA2LCAyMDU0LCAyMzM0LCAKKyAgICA3ODUxNSwgNjM5MTYsIDU0ODMsIDYzOTE0LCAxMjA2MTAsIDYzOTExLCA1NDg0LCA2MzkwOSwgNjM5MDgsIDI1MzksIDAsIAorICAgIDQzOTgwLCA1NDg1LCAwLCA0MjY5NywgOTA2MSwgNTUzNCwgMTA2NzIsIDQ1MDIsIDAsIDI1MywgMCwgNjgyMDgsIDAsIAorICAgIDQyODU0LCA3ODM5MywgMCwgMTE1MzAsIDAsIDY4NjY4LCAwLCAwLCAwLCAxMDQ3NCwgNDM0MjYsIDEzMjU3LCA0MjM1NCwgMCwgCisgICAgMCwgMCwgMTk1MDY1LCAwLCA4NDEzLCAwLCAwLCA1NjkzLCA3MjcyLCAwLCAxMzIwOSwgNjQ0NzAsIDY1ODMxLCA3ODQ2MCwgCisgICAgMTk1MDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjYwOCwgMzExMSwgNDE4NjMsIDg4MDQsIDY2NjA3LCAwLCAKKyAgICA3MjcwLCAwLCA2NjYwNiwgNjYyOCwgMTA3NiwgNzQzMywgMTQzNiwgNzM4NDQsIDU1MjI2LCAwLCA2Mzk4MiwgNzM5MywgCisgICAgMTI4MDcsIDQzNDEzLCA2MzkwNiwgMTU5OCwgNjM5MDQsIDAsIDAsIDQxNzI5LCA0NDIzLCAxMzA3LCAwLCAxMDUxNSwgCisgICAgNDE1ODksIDAsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIDAsIDEyMDYwNiwgNzg3NTQsIDU0MTMsIDc2MTksIDMyNTUsIDM0OTMsIAorICAgIDc0MDMyLCAxMTU0OSwgMTA3MzUsIDQxNzQzLCA3MzkzNywgNjgwMSwgMCwgNDUxOCwgMTA5OTAsIDY1MDczLCA1MTY3LCAKKyAgICA0NDgxLCAzNzcxLCAwLCAyNzEwLCAwLCA2OTI0MywgNDE3MjQsIDAsIDQzMDczLCA0MTY5MCwgMTI0NzksIDAsIDAsIDAsIDAsIAorICAgIDExOTY1OSwgMTYyOCwgMCwgMCwgMCwgNjUyNjIsIDYzMzMsIDEwNzgzLCA0MjMxNSwgMCwgNjM4NTUsIDEyMDY4MywgMCwgMCwgCisgICAgNTMzOSwgNzQzMjMsIDAsIDEzMDA0LCAwLCA0NDU3LCAwLCAwLCAwLCAwLCA1Njg0LCA4Njc4LCAxMDkxNCwgMCwgNTY4OSwgCisgICAgNjU4MDcsIDAsIDY4NDY0LCAxMjYzMywgMTI4NzAsIDc4NTIxLCA2NTE4MywgNTY4OCwgMTE5MjYsIDYwMzMsIDYzMTAsIAorICAgIDU2ODYsIDAsIDc0MjUxLCAwLCAxMjA2NDcsIDAsIDUwLCAxMDU1OCwgOTg3MSwgMCwgNDM2NTUsIDAsIDAsIDAsIDY2NDY4LCAKKyAgICAwLCAxMzI1OSwgNDQ0OCwgMCwgMCwgMCwgMCwgNjc4NTMsIDAsIDEwNjQwLCAwLCAxMTUxLCAwLCA5MTc2MDcsIDAsIAorICAgIDEyNzA3OSwgMTk1MDUwLCAwLCAwLCAwLCAwLCAxMjUwMSwgNjQ2MDQsIDAsIDExNTI3LCAxMTg4NzAsIDg4MTIsIDAsIAorICAgIDExNTM4LCA4NjczLCAxMjY1MCwgMTEwMjAsIDAsIDY2NDY3LCAyMTA1LCA4MDg3LCA3ODE2MywgMCwgOTg5NCwgMCwgMCwgMCwgCisgICAgNDYzNiwgNTUyNjIsIDc4NTEzLCA0NTE1LCAyMzgyLCAwLCAxMjcwNTUsIDAsIDEyMDQ5NSwgMCwgMCwgMTIyNzcsIAorICAgIDE5NDYyNywgMTE5OTUsIDE5NDYyNiwgMCwgMTIxNTgsIDAsIDg3NDEsIDEwMTk3LCAwLCAwLCAwLCA2NTMxLCAwLCAwLCAKKyAgICA0NzMsIDQzNDE1LCAwLCAwLCAxODczLCAxMDg3LCAwLCAwLCAwLCA3ODUyNywgNjY0MzksIDQzMjE4LCAwLCAxOTQ3MTYsIAorICAgIDcyMzcsIDEyNTA0LCA3NDI4MiwgMCwgMCwgMCwgOTQ4OSwgMCwgMCwgNDM4NCwgNzQyMjAsIDE5NTA1NSwgMjA1OCwgCisgICAgOTE3NTYxLCAxMzI5NSwgNDMxOTEsIDAsIDAsIDExNTQsIDM4NTcsIDEyMDUsIDAsIDAsIDEzMTAwLCAxMjk1OCwgMTIwNzA2LCAKKyAgICA3NDE2OCwgMCwgMCwgNDQyMSwgMTA1OTIsIDAsIDQ5NSwgMCwgNDE3MTIsIDc5ODMsIDAsIDEyMDc3OSwgMCwgNjM0NywgMCwgCisgICAgNzY1NCwgNDE3MTAsIDQxOTYsIDAsIDQzNywgNDE3MDksIDczNzcyLCAwLCAwLCA5NDY1LCAxMzI5MCwgMTE5MTgwLCA0OTk3LCAKKyAgICA2NDMwNiwgMCwgMCwgNDk5OSwgMTk0NjQyLCAwLCAwLCA0NzExLCAxMjA3NjksIDAsIDI3MzksIDAsIDgwNDQsIDc0ODM0LCAKKyAgICAwLCA0MTc4OSwgMCwgMTA4MDksIDAsIDAsIDAsIDE3NzksIDY2MDAsIDY2MDEsIDQxNTQzLCA1MzI1LCA2NDIsIDY0MTg3LCAKKyAgICAxMzA1OCwgMTIwNDQ5LCAxMjg3NSwgMCwgMCwgMTMyMjksIDAsIDEwNTc1LCA0MzM5OSwgMCwgMCwgNDE3OTEsIDExMDQsIDAsIAorICAgIDAsIDEwNjU1LCAwLCAwLCAwLCAwLCAxMDgyLCAxOTUwNDksIDg0MjgsIDY1NjksIDAsIDAsIDAsIDAsIDY3ODMsIDAsIAorICAgIDEyOTkzLCA4MDQ5LCA0MTU0OCwgNDQwMjEsIDY0NTgsIDAsIDAsIDQ3NjEsIDYzODI4LCA0NzY2LCA2NDYyMywgMTI3MywgCisgICAgNDM0MDcsIDAsIDExODg3NiwgMTk1MDQ1LCA2OTEyLCAxMzEzLCA2MzIyLCAxMDQ4MywgMCwgNDE1NDUsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDc4NjI0LCAzNDg0LCA3NDMzNywgMCwgMCwgODUwMywgNTEyMiwgNDE1MjcsIDAsIDY2MzIwLCAwLCAwLCAwLCAwLCAKKyAgICA0MTUzNywgMCwgODMwMywgODI4MiwgMTE4MTcsIDczODU3LCAxMDAwMywgNzM4NTksIDY1OTA0LCAxOTQ2NjMsIDE2ODYsIDAsIAorICAgIDc4NDA2LCAxMTQ2NywgMzY2NCwgNjU5MjEsIDY0Mjk5LCAxOTQ2NjQsIDAsIDAsIDQzMjQsIDEyNiwgNDIyNDYsIDExOTE1MiwgCisgICAgMCwgNzQzNzgsIDY1OTI2LCA3NzQ0LCAxOTQ2MzYsIDc0Mjc3LCA3NDMwMiwgNzgwNTIsIDAsIDY5NjYsIDAsIDgxMzYsIDAsIAorICAgIDY1NjAwLCAxNjMzLCAwLCAwLCA0NzYyLCAxMTAzLCAwLCAwLCA0NzY1LCAwLCAxMzA3OCwgMCwgNDc2MCwgNjM4MjcsIAorICAgIDIwNTAsIDEwODcxLCA0MzE5OSwgMTEwMiwgMCwgNDIyMzYsIDAsIDE5NDY2NywgMTE1NDYsIDc0Nzk0LCAzMzcsIDAsIAorICAgIDQyNTkxLCA4NjI3LCAxMjI3OSwgMTExMSwgMCwgMCwgNDcwNywgNjgyMDYsIDEwMTQzLCA3ODgzLCAxMjcwODEsIDc4ODAsIAorICAgIDQ1MjIsIDg2NDUsIDU3MDQsIDEzMDEwLCAwLCA4MzA0LCAwLCAwLCAxMTk1NzUsIDAsIDAsIDY2NjU0LCAwLCAwLCAwLCAKKyAgICAxMzAwOCwgMCwgNDM4NSwgMCwgMTMwMTEsIDAsIDAsIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgMCwgMCwgNDE3OTMsIAorICAgIDY1NzYzLCA3NDIyMSwgMTIwMTQxLCA0MTc5MiwgNDI3NzAsIDAsIDY1NzYyLCAxMTg4MjksIDY0NTczLCA1NzA5LCAwLCAKKyAgICAxOTQ2MzgsIDAsIDAsIDAsIDEwNzksIDM4NjcsIDU3MDgsIDAsIDAsIDAsIDU3MDYsIDY0NzY4LCA1NzA1LCA4NzkxLCAKKyAgICA0MDA1LCAwLCAxMDIzNywgMTA5OTEsIDAsIDQzNDU5LCA5MTczLCA5MTc1ODEsIDkxNzU4MCwgMTMxNzAsIDY1OTQyLCAKKyAgICA5MTc1NzcsIDQyNjA1LCAxMjA3NjUsIDkxNzU3MCwgNjg2NDcsIDkxNzU3MiwgMTAwNTgsIDAsIDc0ODY3LCAxOTQ2NTQsIAorICAgIDEyNzA3OCwgMzMzOSwgMTE0NDgsIDExMDYsIDkxNzU5MSwgOTE3NTkwLCA5MTc1OTMsIDMzNDAsIDkxNzU4NywgOTE3NTg2LCAKKyAgICA5MTc1ODksIDkxNzU4OCwgMTIwNTQxLCAxMDYwNSwgMTMwOSwgNjM5NjYsIDEyMDc0MywgMTc1NCwgMTI3MDc1LCAxMzI0NiwgCisgICAgODY0LCAwLCAxMTg5MjYsIDg5NzIsIDAsIDc4NDksIDEyMDA5MiwgMCwgMTMyNDAsIDE5NTA2OCwgNTE5MiwgNDMzOCwgMCwgCisgICAgMTA5NDgsIDkxNzYwMSwgMTMxOTksIDEyMDE2OSwgMTIzNiwgMTMyMDgsIDEzMjYxLCAxMzE4OSwgMTMxODgsIDEyMDE2NCwgCisgICAgMCwgNzQ0MCwgMCwgMTIwMTUzLCA5NTUzLCAxNTkwLCA2Mzc3NywgNjM3NzYsIDEzMTc4LCA2Mzc4MiwgNjM3ODEsIDYzNzgwLCAKKyAgICA2Mzc3OSwgMTU4MywgMCwgMTMyNjAsIDQ1NTAsIDAsIDY0MjA1LCAwLCAwLCA0MTUyMiwgMCwgMCwgMCwgMCwgMTEzNTQsIDAsIAorICAgIDAsIDQyNzk1LCAwLCAxMTkxOTUsIDExMzk0LCAxOTQ2NDYsIDEzMjM2LCAxMzI3MiwgMTMxOTQsIDEzMzQsIDAsIDQ0NzksIAorICAgIDExNzgsIDY1NTg2LCAxMjA2NjMsIDY2NjgxLCAxMTkxOTMsIDQ2MDEsIDAsIDAsIDAsIDAsIDAsIDE5NDY1OCwgMCwgNjgwOSwgCiAgICAgNjM3ODYsIDYwMzEsIDAsIDYzNzkxLCA2Mzc5MCwgMTE0NSwgNjM3ODgsIDc5MTAsIDYzNzg1LCA0MzE1MywgNzU0LCAKLSAgICAxMDE5MiwgMTMxMDUsIDgxODMsIDEyMDc0MSwgMjAzNywgMCwgMCwgMTA3NDcsIDEyNSwgMCwgMCwgMCwgMCwgMCwgNDE3MTksIAotICAgIDYzNzU4LCAzNTIzLCAxMDc0LCAxMzI1OCwgOTUzNiwgNzQwNzcsIDAsIDQ0MjcsIDc0MjQyLCA2Mzc1NywgNDMxNDUsIAotICAgIDEyMjE3LCA2Mzc1NCwgNDE1MzIsIDEzNDksIDYzNzUwLCA2Mzc0OSwgMCwgMCwgMCwgNjM3NTMsIDYzODAyLCA0MTA4NCwgCi0gICAgMTIwNjIyLCAwLCA0MTkzMCwgNjM4MDUsIDYzODA0LCA2MzgwMywgNjM4MDEsIDQxMDgyLCA4MTQwLCA2Mzc5OCwgNjI2MCwgCi0gICAgMCwgMCwgMTE5MjI1LCA2Mzc5MywgMTE5ODgsIDM4OTgsIDAsIDEwMjAxLCAxMjIzOCwgNjM3OTUsIDQyMzU4LCAxMDM2NywgCi0gICAgMTI1MjEsIDEwNDMxLCA0MjExNCwgNDE5MzIsIDEwNjgsIDAsIDEyNTIzLCAxMjk0NSwgMCwgMCwgNzk1MCwgMTA4MDQsIAotICAgIDYzNzcxLCA0Mjc4NywgNDM4NiwgMTIyMjQsIDY5NzMsIDI3OTMsIDEyNDc1LCAwLCAwLCA2Mzc2OSwgOTUzMCwgMCwgCi0gICAgMTIyMzIsIDEzMTM1LCA4NTk2LCA1NjgxLCA2Mzc2MiwgNDU5NSwgNjM3NjAsIDc5MiwgMCwgNjQ4MDMsIDAsIDg3NDIsIDAsIAotICAgIDExMDUzLCAwLCA2Mzc0NCwgMCwgMCwgNzU4OCwgNjM3NDgsIDE2OTMsIDYzNzQ2LCA0MzIwNCwgNTA1NSwgMCwgMCwgMTA5MCwgCi0gICAgMTIwNjc5LCAwLCAxMTY2NSwgNzQxMzMsIDQ1NTgsIDY1Njg1LCA5NTIzLCAwLCAwLCAwLCAxMTUxMywgMCwgNjE1NywgCi0gICAgNjM3NzUsIDYzNzc0LCA2Mzc3MywgMTMxOTEsIDEyMTcwLCAzNTAwLCAzMTM5LCAwLCAzMTcwLCAxMjQ4NSwgMCwgMTA4NzIsIAotICAgIDAsIDEzMDA2LCA2NDQzMywgMCwgMCwgOTQxLCAwLCAwLCAwLCA2NTU0MSwgMTEwNjMsIDAsIDgyMjgsIDAsIDQyMDY1LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzYwMywgMCwgNjUzOTcsIDI4OCwgMCwgMCwgMCwgMTAwMjUsIDAsIDI5MTgsIAotICAgIDAsIDY1MzAwLCAxMTk4NzEsIDk4ODMsIDY0NzI2LCAyNzkwLCA2NTM5NSwgMzc5MywgMCwgMCwgNjUzOTMsIDAsIDc0MTM4LCAKLSAgICAwLCAwLCAwLCA3NDEzOSwgMTIwNjEzLCA2NTM5NCwgMTE1NDgsIDUyNzAsIDAsIDY1Mzk2LCAwLCA2NTgxMywgMTMyNTYsIAotICAgIDEyODIsIDEyMDc3MSwgMCwgMCwgMTA4ODgsIDAsIDY1MjQyLCAwLCAzMzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzA0LCAKLSAgICA0Mjc1MywgMCwgMCwgMCwgMTYyNywgMCwgMCwgMCwgNTM3MSwgMTMxMTYsIDAsIDE4MjYsIDAsIDAsIDQzMDk0LCAwLCAwLCAKLSAgICAwLCAwLCA5MDM1LCAwLCAwLCAwLCAwLCAwLCA2ODEyNSwgMCwgMTY0LCAwLCAwLCAwLCA2OTU4LCAwLCA0MzExNiwgMCwgMCwgCi0gICAgMTMyNDUsIDAsIDAsIDAsIDAsIDczODkzLCAwLCAxMjY2NiwgMTMxNzUsIDEzMjA3LCAxMjA0MTQsIDY2MDE0LCAxMjA0MjgsIAorICAgIDEwMTkyLCAxMzEwNSwgODE4MywgMTIwNzQxLCAyMDM3LCAwLCAwLCAxMDc0NywgMTI1LCAwLCA2NDg5MCwgMCwgMCwgMCwgCisgICAgNDE3MTksIDYzNzU4LCAzNTIzLCAxMDc0LCAxMzI1OCwgOTUzNiwgNzQwNzcsIDAsIDQ0MjcsIDc0MjQyLCA2Mzc1NywgCisgICAgNDMxNDUsIDEyMjE3LCA2Mzc1NCwgNDE1MzIsIDEzNDksIDYzNzUwLCA2Mzc0OSwgMCwgMCwgMCwgNjM3NTMsIDYzODAyLCAKKyAgICA0MTA4NCwgMTIwNjIyLCA2ODEzMywgNDE5MzAsIDYzODA1LCA2MzgwNCwgNDM2MzIsIDYzODAxLCA0MTA4MiwgODE0MCwgCisgICAgNjM3OTgsIDYyNjAsIDAsIDAsIDExOTIyNSwgNjM3OTMsIDExOTg4LCAzODk4LCAwLCAxMDIwMSwgMTIyMzgsIDYzNzk1LCAKKyAgICA0MjE5NCwgMTAzNjcsIDEyNTIxLCAxMDQzMSwgNDIxMTQsIDQxOTMyLCAxMDY4LCAwLCAxMjUyMywgMTI5NDUsIDAsIAorICAgIDQyMjAzLCA3OTUwLCAxMDgwNCwgNjM3NzEsIDQyNzg3LCA0Mzg2LCAxMjIyNCwgNjk3MywgMjc5MywgMTI0NzUsIDAsIDAsIAorICAgIDYzNzY5LCA5NTMwLCAwLCAxMjIzMiwgMTMxMzUsIDg1OTYsIDU2ODEsIDYzNzYyLCA0NTk1LCA2Mzc2MCwgNzkyLCAwLCAKKyAgICA2NDgwMywgMCwgODc0MiwgMCwgMTEwNTMsIDAsIDYzNzQ0LCAwLCAwLCA3NTg4LCA2Mzc0OCwgMTY5MywgNjM3NDYsIAorICAgIDQzMjA0LCA1MDU1LCA2ODQyNiwgOTE3ODUzLCAxMDkwLCAxMjA2NzksIDAsIDExNjY1LCA3NDEzMywgNDU1OCwgNjU2ODUsIAorICAgIDk1MjMsIDAsIDAsIDc4NjgxLCAxMTUxMywgMCwgNjE1NywgNjM3NzUsIDYzNzc0LCA2Mzc3MywgMTMxOTEsIDEyMTcwLCAKKyAgICAzNTAwLCAzMTM5LCAwLCAzMTcwLCAxMjQ4NSwgMCwgMTA4NzIsIDc4MjcxLCAxMzAwNiwgNjQ0MzMsIDAsIDAsIDk0MSwgMCwgCisgICAgMCwgMCwgNjU1NDEsIDExMDYzLCAwLCA4MjI4LCAwLCA0MjA2NSwgMCwgMCwgMCwgMCwgMCwgNzM4NiwgMCwgNjgzNTgsIDAsIAorICAgIDAsIDQzNjAzLCAwLCA2NTM5NywgMjg4LCAwLCAwLCAwLCAxMDAyNSwgOTE3OTE2LCAyOTE4LCAwLCA2NTMwMCwgMTE5ODcxLCAKKyAgICA5ODgzLCA2NDcyNiwgMjc5MCwgNjUzOTUsIDM3OTMsIDAsIDAsIDY1MzkzLCAwLCA3NDEzOCwgMCwgMCwgMCwgNzQxMzksIAorICAgIDEyMDYxMywgNjUzOTQsIDExNTQ4LCA1MjcwLCAwLCA2NTM5NiwgMCwgNjU4MTMsIDEzMjU2LCAxMjgyLCAxMjA3NzEsIDAsIAorICAgIDAsIDEwODg4LCAwLCA2NTI0MiwgMCwgMzMzMCwgMCwgMCwgMCwgMCwgMCwgNzQyNTksIDMzMDQsIDQyNzUzLCAwLCAwLCAwLCAKKyAgICAxNjI3LCAwLCAwLCAwLCA1MzcxLCAxMzExNiwgMCwgMTgyNiwgMTE4Nzk0LCAwLCA0MzA5NCwgMCwgNDM2NTAsIDAsIDAsIAorICAgIDkwMzUsIDAsIDAsIDAsIDAsIDAsIDY4MTI1LCAwLCAxNjQsIDAsIDAsIDAsIDY5NTgsIDAsIDQzMTE2LCAwLCAwLCAxMzI0NSwgCisgICAgMCwgMCwgMTI3Mzc2LCAwLCA3Mzg5MywgMCwgMTI2NjYsIDEzMTc1LCAxMzIwNywgMTIwNDE0LCA2NjAxNCwgMTIwNDI4LCAKICAgICA3NDQ3LCA1OTI5LCAwLCA2NTUwOSwgMCwgNzQ0OSwgMTEzMDYsIDAsIDczOTIwLCAzMTgwLCAwLCA2MzgwOCwgOTA1NCwgCi0gICAgOTcxLCAxMzA2MiwgMCwgMCwgNjUxOTUsIDY0NzY3LCAwLCA3NDQyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAwNDUsIDY0MzAzLCAKLSAgICAxMzI3NSwgMCwgMTEwNTcsIDAsIDEzMjc2LCAwLCA0MTUyNSwgMCwgNzI3MSwgMTE0NDQsIDAsIDAsIDAsIDEyMjI5LCAKLSAgICA0MTUyMywgMCwgMCwgNzM3NTEsIDAsIDY0ODEzLCAwLCAwLCAxMDQ3NiwgMzg1OCwgMCwgMzkzMiwgNjQ5NTgsIDAsIDAsIAotICAgIDczOTg5LCAwLCAwLCAwLCAzNjksIDAsIDQxNzg0LCAwLCA2NDE2MywgMCwgMCwgMCwgNjU0NzQsIDQ3OTYsIDQxNzgyLCAwLCAKLSAgICA2NTQ3OSwgMCwgNDE3ODEsIDEwNDg2LCA0MTQ4MCwgMTIwNTExLCA5ODk5LCAwLCAwLCA0MDQsIDEyODIxLCAzNzQxLCAwLCAKLSAgICA1Nzg4LCAwLCAwLCA0MTIyMiwgMTgzMSwgNjYwMjAsIDAsIDAsIDQzODgsIDAsIDc0NiwgMTIwNzg0LCAwLCAwLCAxMzEzMSwgCi0gICAgNjUyOTQsIDAsIDAsIDAsIDAsIDQ0MjIsIDQ3MDgsIDM3OTksIDc0MjkyLCAxMTkzNTcsIDAsIDc0NDMwLCAwLCAxMTcwMCwgCi0gICAgNDM3NCwgMCwgMCwgMTM2NCwgMCwgODAzOCwgMCwgOTE3NTk3LCAwLCAwLCAwLCAwLCA3Mzk3OSwgMTMxNzQsIDczOTY4LCAKLSAgICAxMzIyNSwgMCwgMCwgNjU4MzUsIDAsIDIzNjUsIDc4NDEsIDAsIDQyODU1LCAxMTg4NTYsIDQyODY2LCAwLCAwLCAwLCAKLSAgICA2NjQzOCwgNDE3ODUsIDQxMTcxLCA2NDE3MiwgMTMxNzMsIDQzNzIsIDExOTM1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5NjUsIAotICAgIDM4NCwgNjQ1MTIsIDEwNDA0LCAxMDM0MCwgMTE5MzUyLCAxNTU2LCA1Mjc0LCAxMzIxMCwgMCwgMTAwMTcsIDk3MzMsIAotICAgIDQxNzg3LCAwLCAwLCA0MTM3MywgMCwgMTIzMDMsIDAsIDEzMjMyLCAxMzIzMywgMzQ5LCA0ODYzLCA0MTM3MSwgMTE2NTYsIAotICAgIDAsIDEyMDcwMywgMTE5ODgzLCAxMjg2MSwgNDM5OCwgODU0MywgNjU2MTgsIDAsIDEwOTYsIDAsIDAsIDAsIDEyNDQxLCAKLSAgICAxMjM1NSwgMTE5MzQ4LCAxMTkzNDcsIDQzMTgsIDEwNDUyLCAwLCA4MDMyLCAxMzI0MywgMTMyMzcsIDEyNzE5LCAwLCAKLSAgICAxMTkxMDEsIDAsIDY0ODg0LCAxMTk4NzIsIDExOTM0NSwgODU5NywgMCwgMCwgOTg2NCwgMCwgMTIwNzg1LCAwLCAwLCAKLSAgICAxMzE5NSwgNDE0NTIsIDY0OTYxLCA3NzIyLCAwLCAxMDQ1OSwgMTE5ODc4LCAwLCAxMTk4NzksIDY2NTkwLCAwLCA0MTUzMywgCi0gICAgNjYzMzcsIDAsIDAsIDAsIDQ5NjUsIDAsIDkxNzUzNiwgNzM4NDksIDAsIDAsIDAsIDAsIDYyNjEsIDExOTM0MiwgNDMxNDcsIAotICAgIDY2NTcwLCAxOTU3LCAxMDQyMCwgOTgyLCAyNzU2LCAxMzI5MiwgMTMyMDYsIDAsIDAsIDI5MjUsIDczODA5LCAxMzA1NiwgMCwgCi0gICAgMTMyMTIsIDY1MTEwLCAwLCAxMzE5MCwgMTMxODcsIDAsIDEzMTk4LCAxMTg3OTMsIDAsIDUyNDIsIDExOTE3OSwgNjQ0NzYsIAotICAgIDE2OTQsIDgyMTYsIDAsIDAsIDQzMzMxLCAwLCA2NTYyMCwgMCwgNDM1NDQsIDAsIDAsIDQxNDQ0LCA2NTYyMSwgMTIwMzI1LCAKLSAgICA2NDc5OSwgNTI0NiwgMTIwMzI2LCAxMzE4NSwgOTcwOSwgMTIwMzIzLCAxMjAzMjIsIDEyMzE0LCA2NTYxNiwgNTIzOCwgCi0gICAgMTE5MzMzLCAwLCAxMTkzMzcsIDUyMzYsIDQwOTc5LCAwLCA3NDIwMSwgODI4NiwgMCwgMzkzNiwgMTE5MzMxLCAxMTY5OSwgCi0gICAgNDEzNDcsIDAsIDEzMjM1LCA4ODQyLCA0MTI0OCwgMCwgNDM3OSwgMTMyMzksIDEyNjkyLCA3OTY5LCAwLCA3MjE5LCAwLCAwLCAKLSAgICAxMjA1MDksIDAsIDY2MjI0LCA3MzQsIDI5NzksIDEyMDMwMywgNjU2MTksIDk4NzIsIDk1NywgNjQ5MjEsIDE4NDYsIAotICAgIDY2NjMxLCA0MTQ3NywgMTE5MjU2LCAxMjAzMTAsIDc0NTExLCA0MTc3MCwgMTY3MCwgNjQ0MiwgMTIwMzE3LCA0MjQ0NiwgCi0gICAgNTM3OSwgMTIwMzE4LCA0MTE2MywgNzQ4MzIsIDEyMDMxNSwgMTIwMzE0LCAwLCAwLCA0Mjg0MSwgMTMyNjcsIDAsIDAsIAotICAgIDQxNzc1LCAwLCAwLCA0MTc3MywgMCwgMTA2NjMsIDAsIDAsIDAsIDYxNTEsIDEyMTEwLCAwLCA2NTU3MiwgMTE5NjAyLCAKLSAgICA2NTI1MCwgMTMyNjUsIDEzMjY0LCA2NDUxOCwgMCwgNjEwMCwgMCwgMCwgNTgwOCwgNjU5MjIsIDAsIDEyOTY3LCA2NjA0MSwgCi0gICAgOTY3NiwgNDU4MywgMCwgMCwgNjgwOTcsIDY0NTc1LCAwLCAxMTk2NSwgMCwgMTE5MjExLCAwLCAwLCAwLCAwLCA2ODEwMiwgCi0gICAgOTY5OCwgNzgxNCwgNzQ0NzYsIDExOTY1MSwgMCwgMCwgNDE5MjEsIDAsIDk3NTYsIDY5ODUsIDExOTI1OCwgMCwgNzQyMTksIAotICAgIDAsIDAsIDAsIDgwMTIsIDU2NzQsIDEyMzUzLCAwLCAxMjM2MSwgNTY3NywgNDIzMjMsIDAsIDQxOTI1LCAwLCA0MTkyMCwgCi0gICAgNTY3MywgMTIwNTM0LCA1Njc2LCA0MTkyMywgMTI2OTQsIDExODk3OCwgNTY3MiwgMTI5NCwgMCwgMCwgMCwgNDI1MTEsIAotICAgIDE3MjcsIDAsIDAsIDAsIDAsIDAsIDc0MjIyLCA4NzE4LCAzNTUwLCA3MzYsIDEwMjY4LCA0NTA1LCAxMDMxNiwgNzQwOTAsIAotICAgIDU4MjYsIDc0MjcwLCA1ODEzLCAwLCAxMjA3MTIsIDU4NDEsIDU4MzcsIDAsIDAsIDMxMDUsIDEyODI5LCA1ODM4LCA1Nzk2LCAKLSAgICAwLCAxMTk1OTIsIDU3OTMsIDAsIDU4NjYsIDU3OTcsIDQxMDExLCA1ODY1LCAxMjAwOTEsIDc5NTYsIDU5OCwgMCwgNjQ2NDksIAorICAgIDk3MSwgMTMwNjIsIDAsIDAsIDY1MTk1LCAxMDE2NCwgMCwgNzQ0MjgsIDAsIDc4MTQ2LCAwLCAwLCAwLCAwLCAxMDA0NSwgCisgICAgMTI4ODIsIDEzMjc1LCAwLCAxMTA1NywgMCwgMTMyNzYsIDAsIDQxNTI1LCA3ODE1MCwgNzI3MSwgMTE0NDQsIDAsIDAsIDAsIAorICAgIDEyMjI5LCA0MTUyMywgMCwgNDM0MTEsIDczNzUxLCAwLCA2NDgxMywgMCwgMCwgMTA0NzYsIDM4NTgsIDAsIDM5MzIsIAorICAgIDY0OTU4LCAwLCAwLCA3Mzk4OSwgNjgxOTIsIDAsIDAsIDM2OSwgMCwgNDE3ODQsIDAsIDY0MTYzLCAwLCAwLCAwLCA2NTQ3NCwgCisgICAgNDc5NiwgMTIyOTIsIDAsIDY1NDc5LCAwLCA0MTc4MSwgMTA0ODYsIDQxNDgwLCAxMjA1MTEsIDk4OTksIDAsIDAsIDQwNCwgCisgICAgMTI4MjEsIDM3NDEsIDAsIDU3ODgsIDgwOTIsIDY4MjEyLCA0MTIyMiwgMTgzMSwgNjYwMjAsIDAsIDAsIDQzODgsIDAsIAorICAgIDc0NiwgMTIwNzg0LCAwLCAwLCAxMjAxOCwgNjUyOTQsIDAsIDAsIDAsIDAsIDQ0MjIsIDQ3MDgsIDM3OTksIDc0MjkyLCAKKyAgICAxMTkzNTcsIDAsIDc0NDMwLCAwLCAxMTcwMCwgNDM3NCwgMCwgMCwgMTM2NCwgMCwgODAzOCwgMCwgOTE3NTk3LCAxMjg2OCwgCisgICAgNjk4MTQsIDAsIDY3MzUsIDczOTc5LCAxMzE3NCwgNzM5NjgsIDEzMjI1LCAwLCA2OTgwOCwgNjU4MzUsIDAsIDIzNjUsIAorICAgIDc4NDEsIDAsIDQyODU1LCAxMTg4NTYsIDQyODY2LCAwLCAwLCAwLCA2NjQzOCwgNDE3ODUsIDQxMTcxLCA2NDE3MiwgCisgICAgMTMxNzMsIDQzNzIsIDExOTM1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5NjUsIDM4NCwgNjQ1MTIsIDEwNDA0LCAxMDM0MCwgCisgICAgMTE5MzUyLCAxNTU2LCA1Mjc0LCAxMzIxMCwgMCwgMTAwMTcsIDk3MzMsIDQxNzg3LCAwLCAxMjY5OTQsIDQxMzczLCAKKyAgICA3ODAzOSwgMTIzMDMsIDAsIDEzMjMyLCAxMzIzMywgMzQ5LCA0ODYzLCA0MTM3MSwgMTE2NTYsIDAsIDEyMDcwMywgCisgICAgMTE5ODgzLCAxMjg2MSwgNDM5OCwgODU0MywgNjU2MTgsIDAsIDEwOTYsIDAsIDAsIDQyNjg4LCAxMjQ0MSwgMTIzNTUsIAorICAgIDExOTM0OCwgMTE5MzQ3LCA0MzE4LCAxMDQ1MiwgMCwgODAzMiwgMTMyNDMsIDEzMjM3LCAxMjcxOSwgMCwgMTE5MTAxLCAwLCAKKyAgICA2NDg4NCwgMTE5ODcyLCAxMTkzNDUsIDg1OTcsIDAsIDAsIDk4NjQsIDAsIDEyMDc4NSwgMTE5ODc0LCAwLCAxMzE5NSwgCisgICAgNDE0NTIsIDY0OTYxLCA3NzIyLCAwLCAxMDQ1OSwgMTE5ODc4LCAwLCAxMTk4NzksIDY2NTkwLCAwLCA0MTUzMywgNjYzMzcsIAorICAgIDAsIDAsIDAsIDQ5NjUsIDAsIDkxNzUzNiwgNzM4NDksIDAsIDQzNjM4LCA3ODUzNywgMCwgNjI2MSwgMTE5MzQyLCA0MzE0NywgCisgICAgNjY1NzAsIDE5NTcsIDEwNDIwLCA5ODIsIDI3NTYsIDEzMjkyLCAxMzIwNiwgMCwgMCwgMjkyNSwgNzM4MDksIDEzMDU2LCAKKyAgICAxMjc1NTksIDEzMjEyLCA0MzIzOCwgMCwgMTMxOTAsIDEzMTg3LCAwLCAxMzE5OCwgMTE4NzkzLCAwLCA1MjQyLCAxMTkxNzksIAorICAgIDY0NDc2LCAxNjk0LCA4MjE2LCAwLCA2NzcwLCA0MzMzMSwgMCwgNjU2MjAsIDAsIDQzNTQ0LCAwLCAwLCA0MTQ0NCwgCisgICAgNjU2MjEsIDEyMDMyNSwgNjQ3OTksIDUyNDYsIDEyMDMyNiwgMTMxODUsIDk3MDksIDEyMDMyMywgMTIwMzIyLCAxMjMxNCwgCisgICAgNjU2MTYsIDUyMzgsIDExOTMzMywgMCwgMTE5MzM3LCA1MjM2LCA0MDk3OSwgMCwgNzQyMDEsIDgyODYsIDAsIDM5MzYsIAorICAgIDExOTMzMSwgMTE2OTksIDQxMzQ3LCAxMjcyNDksIDEzMjM1LCA4ODQyLCA0MTI0OCwgMCwgNDM3OSwgMTMyMzksIDEyNjkyLCAKKyAgICA3OTY5LCAxMjcyNjYsIDcyMTksIDEyNzI1MCwgMCwgMTIwNTA5LCAwLCA2NjIyNCwgNzM0LCAyOTc5LCAxMjAzMDMsIAorICAgIDY1NjE5LCA5ODcyLCA5NTcsIDY0OTIxLCAxODQ2LCA2NjYzMSwgNDE0NzcsIDExOTI1NiwgMTIwMzEwLCA3NDUxMSwgCisgICAgNDE3NzAsIDE2NzAsIDY0NDIsIDEyMDMxNywgNDI0NDYsIDUzNzksIDEyMDMxOCwgNDExNjMsIDc0ODMyLCAxMjAzMTUsIAorICAgIDEyMDMxNCwgMCwgMCwgNDI4NDEsIDEzMjY3LCAwLCAwLCA0MTc3NSwgMCwgMCwgNDE3NzMsIDAsIDEwNjYzLCAwLCAwLCAwLCAKKyAgICA2MTUxLCAxMjExMCwgNDI2NzMsIDY1NTcyLCAxMTk2MDIsIDY1MjUwLCAxMzI2NSwgMTMyNjQsIDY0NTE4LCAwLCA2MTAwLCAKKyAgICAwLCAwLCA1ODA4LCA2NTkyMiwgMCwgMTI5NjcsIDY2MDQxLCA1NjEyLCA0NTgzLCAwLCAwLCA2ODA5NywgNjQ1NzUsIDAsIAorICAgIDExOTY1LCAwLCAxMTkyMTEsIDAsIDY5Nzg5LCAwLCAwLCA2ODEwMiwgOTY5OCwgNzgxNCwgNzQ0NzYsIDExOTY1MSwgMCwgMCwgCisgICAgNDE5MjEsIDExODg1OCwgOTc1NiwgNjk4NSwgMTE5MjU4LCAwLCA3NDIxOSwgMCwgMCwgMTE4OTk3LCA4MDEyLCA1Njc0LCAKKyAgICAxMjM1MywgMCwgMTIzNjEsIDU2NzcsIDU1ODgsIDAsIDQxOTI1LCAwLCA0MTkyMCwgNTY3MywgMTIwNTM0LCA1Njc2LCAKKyAgICA0MTkyMywgMTI2OTQsIDExODk3OCwgNTY3MiwgMTI5NCwgMCwgNzgwNTksIDAsIDQyNTExLCAxNzI3LCAwLCA0MjQzNiwgMCwgCisgICAgMCwgMCwgNzQyMjIsIDg3MTgsIDM1NTAsIDczNiwgMTAyNjgsIDQ1MDUsIDEwMzE2LCA3NDA5MCwgNTgyNiwgNTUyMzIsIAorICAgIDU4MTMsIDAsIDEyMDcxMiwgNTg0MSwgNTgzNywgNTUyMzQsIDAsIDMxMDUsIDEyODI5LCA1ODM4LCA1Nzk2LCAwLCAKKyAgICAxMTk1OTIsIDU3OTMsIDAsIDU4NjYsIDU3OTcsIDQxMDExLCA1ODY1LCAxMjAwOTEsIDc5NTYsIDU5OCwgMCwgNjQ2NDksIAogICAgIDU4MDYsIDQyMzk4LCAwLCA5MDM3LCA1NjcxLCAxMjAwNDEsIDAsIDAsIDAsIDAsIDAsIDg0NywgMCwgOTUyOSwgMCwgCi0gICAgNjY2NTcsIDY5ODAsIDAsIDEyMDAzNSwgMCwgMCwgMCwgMTIwMDMzLCAwLCAwLCAwLCAxMjAwMzksIDAsIDAsIDAsIDk2MjQsIAotICAgIDAsIDAsIDQzMTkwLCA2NTQ2MywgMTU1NCwgMCwgNDI2MTEsIDQyNTYzLCAwLCA1NjUxLCAyOTI5LCAwLCA0MzIwMSwgMCwgCi0gICAgMTk5NjMsIDU2OTgsIDAsIDAsIDAsIDAsIDU2NDQsIDEwMjkyLCA2NTU0NiwgMTIwNDkyLCA2ODE0MSwgODM3MiwgMCwgCi0gICAgNjUxMTYsIDAsIDEyMDAyMiwgMCwgMTAzODgsIDQyNzk5LCAwLCA0MTAxMywgMTA1NjgsIDAsIDAsIDI4NjksIDAsIDQxMDE1LCAKLSAgICAwLCAyNzg1LCA0MzY2LCAwLCAxMDk1NCwgNDE4MDIsIDAsIDQyNjA4LCAxOTQ2ODgsIDk4ODQsIDQ3NTksIDAsIDAsIAotICAgIDEwMjY2LCA0MTM1OSwgMTE3MCwgMTI3MDE3LCAwLCA3MzkwOCwgMTYwOSwgOTAyLCAwLCA2MzkzNiwgMCwgMTE2NjEsIAotICAgIDgxMjIsIDU4MTgsIDAsIDAsIDM4NjEsIDk1NDAsIDExMDI4LCAyNTU0LCA1MTU4LCA1NzE0LCAxMjcwMTUsIDAsIDAsIDgwNywgCi0gICAgNDMwNzksIDAsIDAsIDk3NiwgNTUxMSwgNjQ1NTMsIDAsIDQyMTU1LCAwLCA0MTM1NiwgNzQxMTAsIDExODgwMSwgMCwgMCwgCi0gICAgODY3NiwgMCwgMCwgMTEwNjYsIDQ1MSwgNjM5NDEsIDU3OTgsIDkzNDksIDQyMDE4LCAwLCAwLCAwLCA0MzYwOSwgMTk0NzAzLCAKLSAgICAxMjA1NTMsIDE0NDAsIDAsIDAsIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgCi0gICAgMCwgMCwgMTAwOTQsIDAsIDExNTI5LCAxMDg1NywgMTIwNjQzLCA2NjQzNiwgNjU0NiwgOTMsIDAsIDAsIDc0NDQwLCAwLCAwLCAKLSAgICA4MTcxLCAwLCAxMTkwOTcsIDEyNzA2NSwgOTE3NTQzLCAzODMsIDEwMzc3LCA0MTY1NiwgMCwgMCwgMCwgNTE4NywgMCwgMCwgCi0gICAgMTEyODYsIDAsIDY0MjE3LCAwLCA1MjMyLCAwLCA0MTAwOSwgMCwgNDEwMDUsIDAsIDAsIDAsIDgyOTIsIDE5NTA3NCwgCi0gICAgNDk4MCwgODg2MCwgNzM5NDcsIDEwMDI4LCA2NjQ3OCwgNzA3NiwgMTMxODIsIDE5NDcwNSwgMCwgMCwgMTA2MzEsIDY2MDMxLCAKLSAgICA3OTcyLCAwLCAwLCAwLCA3OTAwLCAwLCAxMTMwOSwgMTk0NzExLCA0MTk4LCA2NDIxMSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI5MzEsIDAsIDAsIDc0Mjg1LCAxMDE4NSwgMCwgNjQzNjYsIDY1MTU2LCA4ODE0LCAwLCA3NDc3MSwgMCwgMCwgMTI4MzYsIAotICAgIDAsIDAsIDc0MzQyLCA4NTkzLCAwLCAwLCAwLCAxMzI1NSwgMCwgMCwgNzQ2NCwgMCwgNjU4NjUsIDAsIDE5NDY1MCwgMCwgMCwgCi0gICAgOTM0MiwgMTIwNDY0LCAwLCA2NDUxNiwgMCwgMCwgMTAxMjksIDQxMDA3LCAwLCAwLCA0MDk5NSwgMTIyMDksIDQxMDEyLCAKLSAgICAxMTkxMzYsIDAsIDAsIDEyMDYzMywgNDA5OTIsIDAsIDAsIDAsIDQzNTU4LCA1NTIyLCAwLCA2MSwgMCwgNzQxMDUsIDM2MzMsIAotICAgIDAsIDY1MTYyLCA0MTIzNCwgMTIwODksIDAsIDk3NzEsIDAsIDEzMjUxLCAwLCAwLCA2MjYyLCAyNzg0LCAwLCAwLCA4MTI2LCAKLSAgICA2NjQ4MywgMCwgMCwgNDQxLCA0MjYyMSwgMCwgMCwgNDEwMDIsIDQwOTk5LCAxMTk2MjMsIDQzMjY2LCAwLCAwLCAxMDg5MCwgCi0gICAgNzQ0ODEsIDY1ODM0LCA4MzI0LCAxMTkxMDMsIDY0NDE3LCA3NDgxNywgMCwgNjQ3MzcsIDAsIDAsIDg5MzAsIDAsIDc0MjQ5LCAKLSAgICAxMTkzLCAxMDA1NiwgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAwLCAwLCA3NzQzLCAwLCAwLCAwLCAwLCAwLCA5MDM0LCAKLSAgICA2MDM5LCAwLCAxMDA3NSwgMCwgNDEwMTgsIDY1NjgzLCAxMDMzOCwgNjY0NjksIDAsIDAsIDAsIDQyODE1LCAwLCA0MTk2NiwgCi0gICAgMCwgMCwgMCwgMTE3OTIsIDAsIDAsIDkxMSwgNzUzOSwgMCwgMCwgMTIwMzM5LCA2NTE1OSwgNjQzOTAsIDAsIDAsIDU1MjAsIAotICAgIDExNjYyLCAwLCA2NTMzMCwgNzM4ODYsIDAsIDAsIDEyMzI2LCAwLCAwLCA0MjgwOCwgMCwgOTM0OCwgNjQ5MDEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NTcsIDY1MzQyLCAwLCAxMTkxMjAsIDAsIDg2NDQsIDAsIDAsIDAsIDc0Mjk2LCAKLSAgICA0MTkwOSwgMCwgMTIwMzMyLCAyNzkxLCAwLCAxODkxLCAwLCAwLCA0MTkwNywgNjY2NDcsIDAsIDg3NjEsIDEyOTQyLCAKLSAgICA1NzQ4LCAwLCAxMDc3MywgMCwgMCwgODc5NiwgMCwgNjQxMiwgMTIwMzQ3LCA4NTIwLCAxMzE0NiwgMCwgNjM5MzEsIDAsIAotICAgIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMCwgMCwgMCwgMCwgMCwgNzM4NjAsIDAsIDAsIDY0MzQ1LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5MTc1ODUsIDY1MTE3LCAwLCAwLCAxMDQyNywgMCwgMzg0NCwgMCwgOTc1NSwgMTExMCwgNjYxMiwgCi0gICAgMTIyMjIsIDAsIDAsIDAsIDAsIDc4MywgMTk0OTM1LCAwLCAwLCAwLCAwLCA2NTA1NiwgMzYyMCwgMCwgMTE4OTQ1LCA0NTU2LCAKLSAgICAwLCAwLCAxOTQ5MzMsIDc0MjUwLCAwLCAwLCAxMDUxMCwgNDM4MiwgNjY0ODIsIDAsIDAsIDAsIDkxNzcsIDg5MDIsIDAsIAotICAgIDk4MzksIDAsIDEyODkxLCAwLCAwLCA2Mzk5OSwgMjAxNiwgNDE5MTcsIDk3ODgsIDYzOTI4LCAwLCAxODYyLCA2NTgwMCwgCi0gICAgOTE1NSwgNjY2MjMsIDk3ODYsIDY1MDgyLCA0MTkxOSwgODU3OSwgNDE5MTQsIDc5ODEsIDAsIDAsIDQ1MDgsIDY0ODgzLCAwLCAKLSAgICAwLCAwLCAwLCA2NDU5MiwgNzQyNzYsIDEyMDA4MCwgNDE3ODAsIDEyMDA3OSwgNjgxODEsIDAsIDAsIDAsIDAsIDEyMTQ3LCAKLSAgICA5MDI0LCA2NjM3OCwgNjY0NzIsIDAsIDY0Mjg5LCA2NTI4OSwgMCwgMCwgMCwgNjQ1MDksIDAsIDAsIDAsIDExMDUxLCAwLCAKLSAgICAwLCAxMTM1NSwgNjU4ODUsIDAsIDAsIDQxMjE0LCAwLCAxMjI5OSwgMCwgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgCi0gICAgMTE4OTEyLCAwLCAwLCA0MDQwLCAwLCA2MTY3LCAwLCA2MzkyMiwgNjU5NCwgMCwgMCwgMCwgMzYyNCwgNDMwMzYsIDAsIAotICAgIDY0NjU1LCA2Mzk5MCwgMTk5NDcsIDYzOTg4LCA0MTk1NSwgMCwgNjM5OTMsIDYzOTkyLCA5NjExLCAwLCAwLCAwLCA3NzM4LCAKLSAgICA2Mzk4NiwgMTE0NDYsIDYzOTg0LCAwLCAzNDM1LCAxMTk2NTIsIDAsIDExOTEwOCwgNzAyOSwgNjQyNTgsIDQxMjkyLCAKLSAgICAxMTg4OTgsIDEyNzQ4LCA0MzExNSwgOTUxNywgMTE1MTgsIDAsIDAsIDAsIDE5NDc3NywgNjM5NTYsIDQyNDU4LCA2Mzk1NCwgCi0gICAgNjM5NTMsIDYzOTYwLCA5NTkxLCA2Mzk1OCwgMTAyMTcsIDExODg0NSwgMTE0NjksIDAsIDQyMzA2LCAyNzIzLCAxMTg5NDcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDExMzk3LCAyODgwLCAwLCAwLCAyODcyLCAwLCAwLCAzNDk4LCA0Mzc4LCA5MTc1MzksIDQyNzAsIAotICAgIDAsIDY1NTUxLCAxMTg5MjgsIDY2MzMsIDAsIDAsIDUyMzAsIDAsIDAsIDAsIDAsIDAsIDgxNjEsIDM5MywgMTIwMTMsIDAsIAotICAgIDAsIDAsIDQxNSwgNjM5NjQsIDYzOTYzLCA0MjM0NSwgMCwgNTE4MywgMTg3NywgNDI0OTgsIDAsIDI5MjcsIDAsIDYzOTYxLCAKLSAgICA0NDcyLCAwLCAwLCAwLCAwLCA5MTc5MzYsIDQyMzQwLCA0NzU2LCAwLCA3MDgxLCAxMDczMCwgNzY5MSwgMCwgNjM4MzAsIAotICAgIDExOTYyNSwgMTk0OTQ1LCA0MjEwMywgODYyOCwgOTgxMywgMCwgNDI0NTMsIDE2MDQsIDk1NjUsIDEwNTM5LCAwLCA2NTc2NCwgCi0gICAgNDE0MTUsIDY1NzY3LCAwLCA4NDU3LCA0MjMwMSwgMTEzNzIsIDY0ODczLCAxMTk5MiwgMCwgMCwgNjM5ODAsIDExODAxLCAKLSAgICAzNjIyLCAwLCA2NDMzNiwgMTIwMTcsIDEwNDYzLCA2Mzk4MSwgNDk2NywgNjQxODksIDE5NjYsIDYzOTc2LCAwLCAwLCAwLCAKLSAgICAwLCA2Mzk3MSwgNDM0NywgNDQxNiwgNDIwOTgsIDExMDA5LCAxMDY5NCwgNjM5NzMsIDQwMiwgMCwgMTMxNDcsIDAsIAotICAgIDQyMTAwLCA2NDY0NiwgMTMyMjgsIDAsIDQxODc1LCAzNTE1LCA3NDI1MiwgMTE4MDUsIDAsIDExMzAyLCA2MjU5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA3NDQyNSwgMTEyOTksIDE1NjEsIDAsIDAsIDY0OTQyLCAwLCAxOTQ3MzMsIDAsIDE5NDczMiwgMCwgCi0gICAgNzQzMDEsIDAsIDExMjgwLCAwLCAwLCA3NDA2MCwgMCwgMCwgMTE5NjY0LCA1MTQ1LCAxMjQ4NiwgNjUwMTgsIDY2NTE2LCAKLSAgICA1NDA5LCAwLCAxOTQ2NjksIDY0MzQ3LCA1Mzk5LCA5Njg1LCA3NDA4OSwgNzk1MiwgNTQwMSwgMCwgNjY2MTYsIDAsIDAsIDAsIAotICAgIDU0MDUsIDkxNzU1NSwgNjQ4NjYsIDAsIDAsIDAsIDAsIDc0MjQ4LCAxMTMzMCwgMTk0NzIzLCA2NDY5MCwgMzI1NCwgMCwgMCwgCi0gICAgMCwgNDIzOTAsIDAsIDE5NDcyNSwgMCwgNjUwNzcsIDAsIDAsIDMzNTUsIDk1MDgsIDk4NjcsIDU3MjMsIDExNTIwLCA1NjExLCAKLSAgICAwLCAzMzc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTkxMTksIDAsIDAsIDExOTA2OCwgMCwgMCwgMTM3OSwgMjQ2LCAwLCAKLSAgICAwLCAzNzg4LCAwLCAxMTA0MSwgMCwgNjYzMDQsIDAsIDAsIDg5MTcsIDQyNDAzLCAzMDEsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEwNjU2LCAwLCA2NTIxNCwgMTE5MjQyLCA0MjU2NywgMCwgMTMxNjMsIDAsIDEyMDgzMSwgNzQ1OTcsIDMxODIsIDAsIDAsIAotICAgIDAsIDAsIDY1ODg5LCA0MjE2OSwgNDc1NSwgNzQyNDQsIDAsIDExNDQzLCAwLCA2NjMyNiwgNzQ1OTgsIDYwOCwgNjAwLCAwLCAKLSAgICAxMjE5LCAzOTM0LCA2NDIwNiwgMTE0ODMsIDc0NTEwLCAwLCA3NDQ4NSwgNDI0NDIsIDY1NDcwLCAwLCA2NDIwMiwgMTMxNjAsIAotICAgIDc3NTksIDQyNDgyLCA0ODUsIDAsIDAsIDk4MjgsIDAsIDAsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgCi0gICAgNDI0MzEsIDY5MTYsIDEyMDgsIDAsIDExOTYzMSwgMTEwMDIsIDQyNDcwLCAwLCAwLCAwLCAwLCA3NDA0MSwgMCwgMCwgCi0gICAgNDM1MzksIDU0MTEsIDAsIDAsIDAsIDAsIDkxNTAsIDAsIDQyMzkzLCAxMzA4NiwgMTMxMCwgMTk0Njg3LCA5MzM3LCAKLSAgICAxMjA1MiwgMTA2NDMsIDY0NTg2LCAwLCAxOTQ2ODQsIDI1NDYsIDE5NDY4MywgMjEzLCAxMTg4NTIsIDY1NjExLCAwLCAwLCAKLSAgICAxOTQ3NTYsIDc0MzEwLCA2NTU0LCAwLCAxMTkxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTk0NjgxLCAxMTg4MjYsIDI3MTMsIDAsIAotICAgIDk2NTAsIDQzMzMwLCAwLCAxOTQ2NzUsIDE0MDYsIDAsIDAsIDAsIDAsIDE5NDY3OCwgNDE0MywgMTk0Njc3LCAwLCA2NTc0OCwgCi0gICAgNDE0MSwgOTY4MiwgNjUyODcsIDE1MDgsIDAsIDg3NzksIDEwNTY5LCA4NzI1LCAxMzI5OSwgNjY2MzgsIDAsIDQyMjYzLCAKLSAgICA0MTQ1LCAwLCA2NTc1MSwgNjY2MTMsIDAsIDY1NzM4LCA3MzcyOSwgOTE4NSwgOTU1MCwgMCwgMCwgMCwgMCwgMCwgNjU3MzYsIAotICAgIDQxOTUxLCA2NDgxNiwgNjU3NTYsIDAsIDEyOTU1LCAxMDU5NiwgMjg4OCwgMCwgMCwgMCwgOTY1NywgOTAxOSwgMTk0NzY2LCAKLSAgICAwLCAyODc4LCA1MzkwLCAwLCAxOTQ5NjEsIDAsIDAsIDAsIDc1MDEsIDEzMjAzLCAwLCAxMDQyOSwgMTAzNjUsIDAsIDAsIAotICAgIDQxOTQ2LCA3NTAzLCA1MjM1LCA4MDMsIDAsIDAsIDAsIDg5ODYsIDAsIDEwNjMyLCAxMTkzNCwgMTE0NTIsIDEzMzIsIDAsIAotICAgIDAsIDAsIDAsIDkxNzU0NSwgMTc5MSwgNTE5MSwgOTI4OCwgNjQ4MjIsIDI4OTIsIDAsIDY3ODQ5LCA1NTUsIDAsIDAsIAotICAgIDY2NjQ2LCAwLCAxMTkwMDIsIDEzMTUxLCA3NDUxMiwgNzI4OSwgNzQwNTUsIDAsIDAsIDY0MTYyLCA1ODU4LCA0MTkyNywgCi0gICAgMTA1ODIsIDAsIDE3ODQsIDEzNjEsIDE5NTA0NywgMCwgNzkwNSwgMCwgNjQ4NjgsIDAsIDEzMTU4LCAwLCA3MjExLCAwLCAKLSAgICA5MzcxLCAwLCAwLCAwLCAxNjI1LCAwLCAwLCAxMzQyLCAwLCA2NDE3MSwgMCwgMTA5MDMsIDAsIDAsIDAsIDAsIDAsIDQ0ODIsIAotICAgIDQxNjA2LCAwLCAwLCAwLCAwLCA2NDM4MSwgMCwgMCwgMCwgNDIyNDUsIDAsIDQxOTcyLCAwLCA0NDQsIDAsIDkxMjcsIAotICAgIDY2Njg3LCA2NjYxOSwgMCwgMTk0OTcyLCAwLCAxMTM0OSwgNDA5OTEsIDAsIDAsIDExOTU5OSwgMTIwODMwLCAwLCAxMTk3LCAKLSAgICAwLCAxMTQ5LCAxOTQ5NzAsIDAsIDAsIDQwOTkwLCAwLCAwLCAzNDkyLCAwLCAwLCAwLCAwLCAwLCAxMjgzOCwgMCwgMTk5NDgsIAotICAgIDAsIDMwOTksIDAsIDAsIDQxMDg3LCAwLCAwLCAwLCAxMTkwNTksIDEyMDM2LCAwLCAwLCAwLCA4MTUyLCAwLCA2NDQyOCwgCi0gICAgMTIyMjcsIDAsIDAsIDEyODI4LCAwLCAwLCAwLCAwLCAwLCAwLCAxMDM4NiwgMTE5NTc0LCAwLCAwLCAwLCAwLCA2ODE1NCwgCi0gICAgMCwgMTc0MywgMCwgMCwgMCwgNjUxODYsIDAsIDAsIDk2MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5NDk2NywgMCwgCi0gICAgMCwgMzM5NSwgOTM2MiwgMTA4NzgsIDAsIDAsIDAsIDY0ODMwLCAwLCAwLCA0MTA5MSwgMzQyNiwgMTM0NCwgODg3MCwgMCwgCi0gICAgMCwgNDczNSwgMCwgNjExOSwgMTI4MjIsIDAsIDAsIDAsIDc0ODE4LCAwLCAwLCA0MjYzNywgNDEwODAsIDAsIDEyMDM5LCAKLSAgICAxMDU1OSwgMCwgMTE4ODkyLCAwLCA5NDcyLCAwLCAxMTkyOSwgMCwgNzE3MCwgOTU5NiwgNjEzMCwgMCwgMCwgMTE1NzksIDAsIAotICAgIDAsIDE5NDc0MCwgMCwgMCwgNjY2OTksIDAsIDEwMDQsIDAsIDE5NDczNywgMCwgNjYwMDgsIDEyNjI3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMTMwMCwgNDMzMDQsIDk2ODYsIDU4OTAsIDExNzc2LCA3NTU4LCAwLCA2NTYyNywgMCwgMTA3MTgsIDEzMTU0LCAKLSAgICAzNDYxLCA5MTM5LCAwLCAwLCAwLCAwLCAwLCA3Mzg3NywgNjU2MjgsIDAsIDAsIDAsIDQxNzA4LCAxMjg2MCwgNDE3MDMsIAotICAgIDEyMDY5LCAxMDgzOCwgNTQwMywgMTAzNTIsIDczOTE3LCAxMDA2MSwgMCwgMCwgNTE0MCwgMjA5LCAwLCA0MTcwNCwgMCwgCi0gICAgNDMwNzgsIDAsIDAsIDAsIDEwODk5LCA2NTQ2OSwgMCwgMCwgMCwgMjQxMCwgOTkzLCAwLCAxMjA1ODksIDEyMDY4OSwgMCwgCi0gICAgMCwgMCwgNzIzMiwgMCwgMTE5MjUzLCAwLCAwLCA3NDQ2MiwgMCwgMTA0ODksIDQyMTY2LCAwLCAxMDY1OSwgMzYwMCwgMCwgCi0gICAgNDIyNCwgMTMzNiwgNDE1MTgsIDAsIDAsIDAsIDAsIDQxMTM5LCA2NDgyMCwgMCwgMTI5NjYsIDQxMTM0LCAwLCAwLCAwLCAwLCAKLSAgICAyNzIsIDQyNjMsIDg3OTMsIDAsIDAsIDQxNTAyLCAwLCA5ODMsIDEyNTQ5LCAwLCAwLCAxMTkwLCA0MTA5LCAxMzM1LCA4NDEsIAotICAgIDU4ODgsIDQxMzU4LCA2NDg2MywgOTU0NCwgMCwgMCwgMCwgMCwgNzIwOSwgODIyMywgMjQwOSwgNzc5OSwgMCwgNzQ0MjQsIAotICAgIDAsIDAsIDQ3MzEsIDAsIDY2NjI5LCAwLCAwLCAxMjU1LCA0MTQ5LCA5MjQ3LCAwLCA5OTEzLCAwLCAwLCAwLCAwLCA2NTEwMSwgCi0gICAgMCwgMTE2OTQsIDAsIDExNjkwLCA1ODM1LCAwLCA2NjYyNSwgMTA4NDIsIDQxMzU0LCA0MjEyMywgNDMwOTcsIDExNjg4LCAKLSAgICA2NjYzNCwgMTA5NCwgMTk0LCA2NDY5MiwgMCwgODE4MCwgMCwgMCwgNzM4NzIsIDczODY1LCAwLCA2MTE0LCAxMDg5OCwgCi0gICAgNDMwNzIsIDAsIDAsIDAsIDAsIDAsIDEwNjk1LCAwLCA3NTQwLCAwLCA4ODEsIDc4NTcsIDYwNjcsIDY1MTY0LCAwLCAwLCAwLCAKLSAgICAxMzMxMSwgMCwgNDE4NTcsIDY0MzIxLCA4MzU5LCAwLCAxMjY4OSwgMCwgMTk0NTk0LCAwLCAwLCAwLCA2ODE4MywgMCwgMCwgCi0gICAgMTI4NywgNTQzNiwgMCwgMCwgNzQxNDIsIDEyNzAxMywgNzQxNTIsIDExOTA3OCwgNjA1MSwgMTA0OTcsIDAsIDg5ODUsIAotICAgIDEyMTA5LCAwLCAwLCAwLCAwLCAwLCAzNjUyLCAxMDUzNywgMCwgMTI3NiwgMCwgNjU0OSwgMjc5LCAwLCAwLCAwLCAwLCAKLSAgICAxNDg5LCAwLCAwLCAwLCAzODk5LCAxMDA3LCA0MjEyNCwgMCwgNDIxMjIsIDAsIDAsIDAsIDExOTg1LCAxMzQ1LCAxMjcwMDYsIAotICAgIDAsIDAsIDg5NTYsIDQzMDgzLCAwLCA0MjEzOCwgMCwgMCwgMTIxNTEsIDAsIDAsIDAsIDYyODUsIDAsIDAsIDAsIDc0MTk0LCAKLSAgICA0OTIsIDg2ODUsIDAsIDAsIDAsIDAsIDAsIDI1ODIsIDExNDcwLCA2NDUzOCwgNzQ0NCwgMCwgMCwgNDE1NTAsIDAsIAotICAgIDczODM3LCAwLCAyNTI3LCAxMTk4MjQsIDE5NywgMjc5OSwgMCwgMCwgMTIwMjc2LCAwLCAwLCA2NjUxNSwgNzY3LCA1NTI0LCAKLSAgICA3MDI4LCAwLCAwLCAxMTk4MjcsIDAsIDAsIDAsIDAsIDAsIDE3OTksIDEyMDQ5NywgNjk3MSwgNzQzMzYsIDAsIDAsIAotICAgIDY1MzQwLCAxMTg5NzksIDAsIDI0MzQsIDAsIDAsIDEyMDU3OSwgMCwgNDYzMSwgMCwgMCwgNjQwNywgMCwgMTk5MzEsIAotICAgIDQzMjE0LCAwLCA3NTcwLCAwLCAzMTkyLCAwLCA4NDE0LCAwLCAwLCAwLCAwLCAwLCA5MTY0LCA2NjYxMiwgMCwgMzE3MSwgCi0gICAgNjYyMywgNDk2MSwgMCwgODg2LCAwLCA4NjU0LCAwLCA5OTkzLCA3NDM5MCwgNjQ2MDMsIDAsIDAsIDk1OTksIDAsIDQzMDg0LCAKLSAgICAwLCAwLCAwLCAyMzk5LCAwLCA4OTk0LCAxMDk0NCwgNDEyMDgsIDAsIDQxMTY4LCA4MTc4LCAwLCAzMzY3LCAxOTUwMDgsIAotICAgIDQyNTEwLCAwLCAwLCA3Nzg5LCAwLCAxOTQ3LCAwLCAwLCAwLCA0Mjc1OSwgMTEwNjgsIDE3MDUsIDkzMzEsIDAsIDc0Nzk4LCAKLSAgICA5MTgxLCAwLCAwLCA4MDE3LCAwLCA2NTA5NiwgNjY3MjAsIDAsIDAsIDAsIDQ5MDksIDEyMTI2LCAwLCAxMjA2OTYsIDQ5MDQsIAotICAgIDAsIDE5NTAxMiwgMTM2NSwgOTI1MywgNDI3NTcsIDAsIDc0NjIsIDAsIDAsIDAsIDAsIDExOTU4NywgNjQ0MTUsIDAsIDAsIAotICAgIDUzOTgsIDAsIDE5NTAxNCwgMCwgMCwgMCwgMCwgMCwgMCwgOTQ3NiwgMCwgMCwgMTI3NjMsIDAsIDM2MjksIDAsIDEzMDA1LCAKLSAgICAwLCAzNjI4LCAwLCAwLCAwLCAzNDY5LCA0MjEwNywgNDIxMTYsIDkxNzU3OCwgNjQ4MDksIDI5MjgsIDQ5MDUsIDk4NTMsIAotICAgIDg1MSwgOTA0MCwgMCwgNjQ2NjUsIDQzMDg2LCA5MTE0LCAwLCA0MjU4MywgOTMxNSwgNDgyMiwgNDkwNiwgMzg1MiwgMjg0NywgCi0gICAgMCwgMzIzNiwgMTEzMTcsIDEyNTEsIDc3NzcsIDQxODUyLCAxMTQxMCwgMTA5NjQsIDAsIDQzMjIyLCAxMjY0NiwgMTIwMjY5LCAKLSAgICAxMDI1OSwgOTg2NSwgNjU4MjEsIDAsIDYwMTgsIDAsIDAsIDEyMjc2LCAwLCAwLCAwLCAwLCAxMTk2MTMsIDAsIDAsIAotICAgIDEwNDY3LCAwLCAyNDQzLCAxMDkxOCwgMCwgMCwgMTAwMSwgOTI0MSwgMTkyNywgMCwgMCwgNzM5ODcsIDAsIDAsIDAsIAotICAgIDExODgyOCwgMCwgNjU2NzgsIDEyODY3LCAwLCA4MjYwLCAwLCA3NTE5LCAxMTg3OTQsIDEyMjc0LCA4OTA0LCA1MTgsIAotICAgIDY1ODU3LCAwLCAwLCAxMzIwNCwgNDM4NywgODU3LCAwLCA2NTM2OSwgMCwgMTE5NTgzLCA0MzEyNSwgMTIwNTkyLCAwLCAwLCAKLSAgICAwLCAwLCA1MTM2LCAxOTY4LCAwLCAxOTUwMjMsIDEzMzcsIDY0OTY3LCAxNjI5LCAwLCA3OTYsIDY2NTA2LCAwLCA3NDEyMywgCi0gICAgMCwgMCwgNDIzMTQsIDE5NTAyMSwgMCwgNzQ0MDMsIDYxMjAsIDQ3OCwgNjUxNTEsIDY4MTI4LCAwLCA0MzA4MiwgNjAxNiwgCi0gICAgMCwgNDIyODQsIDAsIDQyNzYsIDEyMDYsIDM2MTksIDQxNjM4LCAwLCAzODQzLCAxMjAxMSwgODg1MywgMzM2MSwgMCwgNDkwLCAKLSAgICAxMDcxNSwgNzU3OCwgMCwgMCwgNjUzNTAsIDEwNTMwLCAxMjM0OCwgODY1MywgNzQzMTQsIDQyNDM1LCA2MTU0LCA5NTUxLCAKLSAgICA2NTM1NCwgMCwgNzg0LCA0MjM5NywgMzM0LCAwLCA0MjQxNiwgNjUzNTYsIDY1MjczLCAwLCAwLCA3MDI1LCAxMDM2NCwgMCwgCi0gICAgNzc4LCA0MTYyNiwgNDI0NTUsIDc5ODksIDc0MDYzLCAzMjI3LCAwLCAwLCA3Mzk4MywgMjkxNSwgNDE2OTgsIDQxMDIyLCAKLSAgICA0MTcwMiwgMTAzMDksIDEyNzAzNSwgMCwgMCwgNjk3NSwgMCwgNTQxNSwgMTIxNzYsIDAsIDAsIDM0NjIsIDY1MjE1LCAKLSAgICA0MjYyOSwgMCwgNzM3ODQsIDAsIDAsIDk3NTksIDAsIDAsIDAsIDgxMTQsIDAsIDAsIDAsIDAsIDg3MTAsIDQyNDk1LCAKLSAgICAxMTg5NTYsIDAsIDQwNTEsIDEwNDYwLCA3NDA5NywgMTE4OTE3LCAxMzU2LCAxMjE2MSwgMCwgMCwgMCwgMTYxOSwgOTcwMywgCisgICAgNjY2NTcsIDY5ODAsIDAsIDEyMDAzNSwgNzg0ODQsIDAsIDAsIDEyMDAzMywgNzg0ODYsIDAsIDAsIDEyMDAzOSwgNDI2ODMsIAorICAgIDAsIDAsIDk2MjQsIDAsIDAsIDQzMTkwLCA2NTQ2MywgMTU1NCwgMCwgNDI2MTEsIDQyNTYzLCAwLCA1NjUxLCAyOTI5LCAKKyAgICA2NzkyLCA0MzIwMSwgMCwgMTk5NjMsIDU2OTgsIDAsIDAsIDAsIDAsIDU2NDQsIDEwMjkyLCA2NTU0NiwgNjk4MjEsIAorICAgIDY4MTQxLCA4MzcyLCAwLCA2NTExNiwgMCwgMTIwMDIyLCAwLCAxMDM4OCwgNDI3OTksIDAsIDQxMDEzLCAxMDU2OCwgMCwgMCwgCisgICAgMjg2OSwgMCwgNDEwMTUsIDE5NDY5MiwgMjc4NSwgNDM2NiwgMCwgMTA5NTQsIDQxODAyLCAwLCA0MjYwOCwgNzg0NjksIAorICAgIDk4ODQsIDQ3NTksIDAsIDAsIDEwMjY2LCA0MTM1OSwgMTE3MCwgNDMzNjUsIDY5ODEwLCA3MzkwOCwgMTYwOSwgOTAyLCAwLCAKKyAgICA2MzkzNiwgMCwgMTE2NjEsIDgxMjIsIDU4MTgsIDAsIDAsIDM4NjEsIDk1NDAsIDExMDI4LCAyNTU0LCA1MTU4LCA1NzE0LCAKKyAgICAxMjcwMTUsIDAsIDAsIDgwNywgNDMwNzksIDAsIDc4NDc1LCA5NzYsIDU1MTEsIDY0NTUzLCAwLCA0MjE1NSwgMCwgNDEzNTYsIAorICAgIDc0MTEwLCAxMTg4MDEsIDAsIDAsIDg2NzYsIDAsIDAsIDExMDY2LCA0NTEsIDYzOTQxLCA1Nzk4LCA5MzQ5LCA0MjAxOCwgMCwgCisgICAgMCwgMCwgNDM2MDksIDE5NDcwMywgMTIwNTUzLCAxNDQwLCAwLCAxOTQ3MDEsIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCAKKyAgICA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgMCwgNDMzOTMsIDEwMDk0LCAwLCAxMTUyOSwgMTA4NTcsIDEyMDY0MywgCisgICAgNjY0MzYsIDY1NDYsIDkzLCA4MTAyLCAwLCA2ODQwNSwgMCwgMCwgODE3MSwgMCwgMTE5MDk3LCAxMjcwNjQsIDkxNzU0MywgCisgICAgMzgzLCAxMDM3NywgNDE2NTYsIDAsIDAsIDAsIDUxODcsIDAsIDEyNzI3NywgMTEyODYsIDY4NjIwLCA2NDIxNywgMCwgCisgICAgNTIzMiwgMCwgNDEwMDksIDAsIDQxMDA1LCAwLCAwLCAwLCA4MjkyLCAxOTUwNzQsIDQ5ODAsIDg4NjAsIDczOTQ3LCAKKyAgICAxMDAyOCwgNjY0NzgsIDcwNzYsIDEzMTgyLCAxOTQ3MDUsIDAsIDAsIDEwNjMxLCA2NjAzMSwgNzk3MiwgMCwgNzg3ODUsIDAsIAorICAgIDc5MDAsIDAsIDExMzA5LCA3ODMxOSwgNDE5OCwgNDI3MjUsIDAsIDY3NjU2LCA3ODgxOSwgMCwgMCwgMCwgMTI5MzEsIDAsIAorICAgIDQyNjg0LCA3NDI4NSwgMjA4OCwgMCwgNjQzNjYsIDY1MTU2LCA4ODE0LCA0MjIzOCwgNzQ3NzEsIDAsIDAsIDEyODM2LCAwLCAKKyAgICAwLCA3NDM0MiwgODU5MywgMCwgMCwgNjg0NDUsIDEzMjU1LCAwLCAwLCA3NDY0LCAwLCA2NTg2NSwgMCwgMTk0NjUwLCAwLCAKKyAgICAwLCA5MzQyLCAxMjA0NjQsIDAsIDY0NTE2LCAwLCA3ODc5MiwgMTAxMjksIDQxMDA3LCA3NDM3NSwgMCwgNDA5OTUsIAorICAgIDEyMjA5LCA0MTAxMiwgMTE5MTM2LCAwLCAwLCAxMjA2MzMsIDQwOTkyLCAwLCAwLCA2ODY1MywgNDM1NTgsIDU1MjIsIDAsIAorICAgIDYxLCAwLCA3NDEwNSwgMzYzMywgMCwgNjUxNjIsIDQxMjM0LCAxMjA4OSwgNzgyODEsIDk3NzEsIDAsIDEzMjUxLCAwLCAwLCAKKyAgICA2MjYyLCAyNzg0LCA0Mjc0MywgMCwgODEyNiwgNjY0ODMsIDAsIDAsIDQ0MSwgNDI2MjEsIDAsIDAsIDQxMDAyLCA0MDk5OSwgCisgICAgMTE5NjIzLCA0MzI2NiwgMCwgMCwgMTA4OTAsIDc0NDgxLCA2NTgzNCwgODMyNCwgMTE5MTAzLCA2NDQxNywgNzQ4MTcsIDAsIAorICAgIDY0NzM3LCAwLCAwLCA4OTMwLCA2NjY3OCwgNzQyNDksIDExOTMsIDEwMDU2LCAxODAwLCAxMzI1MywgMTMyNTIsIDc4MjksIAorICAgIDAsIDAsIDc3NDMsIDAsIDAsIDc3OTA0LCAwLCA3NzkwNSwgOTAzNCwgNjAzOSwgMCwgMTAwNzUsIDAsIDQxMDE4LCA2NTY4MywgCisgICAgMTAzMzgsIDY2NDY5LCAwLCAwLCAwLCA0MjgxNSwgMCwgNDE5NjYsIDAsIDAsIDAsIDExNzkyLCA0MzA2NCwgNDEwMjUsIAorICAgIDkxMSwgNzUzOSwgMCwgMCwgMTIwMzM5LCA2NTE1OSwgNjQzOTAsIDAsIDAsIDU1MjAsIDExNjYyLCAwLCA2NTMzMCwgCisgICAgNDI4MTIsIDAsIDAsIDEyMzI2LCAwLCAwLCA0MjgwOCwgMCwgOTM0OCwgNjQ5MDEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDkxNzU4NCwgNDM3MDIsIDAsIDU4NTcsIDY1MzQyLCAwLCAxMTkxMjAsIDEyMDA3OSwgODY0NCwgMCwgMCwgMCwgNzQyOTYsIAorICAgIDQxOTA5LCAwLCAxMjAzMzIsIDI3OTEsIDAsIDE4OTEsIDY5ODI0LCAwLCA0MTkwNywgNjY2NDcsIDAsIDg3NjEsIDEyOTQyLCAKKyAgICA1NzQ4LCAwLCAxMDc3MywgMCwgMCwgODc5NiwgNzgxNDksIDY0MTIsIDIwNjEsIDg1MjAsIDEzMTQ2LCAwLCA2MzkzMSwgMCwgCisgICAgNjU5MDIsIDI4ODIsIDAsIDAsIDEyODQzLCA0NTIwLCAxMjAzNDUsIDAsIDAsIDAsIDAsIDczODYwLCAwLCAwLCA2NDM0NSwgCisgICAgMCwgMCwgMCwgMTk0OTQwLCAwLCAwLCA0MzY3OSwgOTE3NTg1LCA2NTExNywgMTk0OTM5LCAwLCAxMDQyNywgMCwgMzg0NCwgCisgICAgMCwgOTc1NSwgMTExMCwgNjYxMiwgMTIyMjIsIDAsIDE5NDkzNCwgMCwgMCwgNzgzLCAxOTQ5MzUsIDAsIDAsIDAsIAorICAgIDE5NDcyMCwgNjUwNTYsIDM2MjAsIDAsIDY4Mzc4LCA0NTU2LCAwLCAwLCAxOTQ5MzMsIDc0MjUwLCAwLCA2NzY1NywgCisgICAgMTA1MTAsIDQzODIsIDY2NDgyLCAwLCAwLCAwLCA5MTc3LCA4OTAyLCAwLCA5ODM5LCAwLCAxMjg5MSwgMCwgMCwgNjM5OTksIAorICAgIDIwMTYsIDQxOTE3LCA5Nzg4LCA2MzkyOCwgMCwgMTg2MiwgNjU4MDAsIDkxNTUsIDY2NjIzLCA5Nzg2LCA2NTA4MiwgCisgICAgNDE5MTksIDg1NzksIDQxOTE0LCA3OTgxLCAwLCAwLCA0NTA4LCA2NDg4MywgMCwgMCwgMCwgMCwgNjQ1OTIsIDc0Mjc2LCAKKyAgICAxMjAwODAsIDY3ODQsIDc4Nzg4LCA2ODE4MSwgMCwgMCwgMCwgMTI3NTM0LCAxMjE0NywgOTAyNCwgNjYzNzgsIDY2NDcyLCAKKyAgICAwLCA2NDI4OSwgNjUyODksIDc4MTUxLCA2NjY1OCwgMTk0OTI5LCA2NDUwOSwgNzgxNTIsIDAsIDAsIDExMDUxLCAwLCAwLCAKKyAgICAxMTM1NSwgNjU4ODUsIDAsIDAsIDQxMjE0LCAwLCAxMjI5OSwgMCwgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgOTk2MywgCisgICAgNjg2NDksIDAsIDQwNDAsIDAsIDYxNjcsIDAsIDYzOTIyLCA2NTk0LCAwLCAwLCAwLCAzNjI0LCA0MzAzNiwgMCwgNjM4NywgCisgICAgNjM5OTAsIDE5OTQ3LCA2Mzk4OCwgNDE5NTUsIDAsIDYzOTkzLCAxMDQ0MCwgOTYxMSwgMCwgNjgwMywgMCwgNzczOCwgCisgICAgNjM5ODYsIDExNDQ2LCA2Mzk4NCwgMTIwMzMxLCAzNDM1LCA3ODE2NCwgMCwgMTE5MTA4LCA3MDI5LCA2NDI1OCwgNDEyOTIsIAorICAgIDExODg5OCwgMTI3NDgsIDQyNzQyLCA5NTE3LCAxMTUxOCwgMCwgNzg3OTAsIDAsIDE5NDc3NywgNjM5NTYsIDQyNDU4LCAKKyAgICA2Mzk1NCwgNjM5NTMsIDYzOTYwLCA5NTkxLCA0NTE2LCAxMDIxNywgNjgzNzAsIDExNDY5LCAwLCA0MjMwNiwgMjcyMywgCisgICAgMTE4OTQ3LCAwLCAwLCAwLCAwLCAwLCAxMTM5NywgMjg4MCwgMCwgMCwgMjg3MiwgMCwgMCwgMzQ5OCwgNDM3OCwgOTE3NTM5LCAKKyAgICA0MjcwLCAwLCA2NTU1MSwgNjgyMDUsIDY2MzMsIDQzMzg3LCAwLCA1MjMwLCAwLCAwLCAwLCAwLCAwLCA4MTYxLCAzOTMsIAorICAgIDEyMDEzLCAwLCAwLCAwLCA0MTUsIDYzOTY0LCA2Mzk2MywgNDIzNDUsIDAsIDUxODMsIDE4NzcsIDQyNDk4LCAwLCAyOTI3LCAKKyAgICAwLCA2Mzk2MSwgNDQ3MiwgMCwgMCwgNzgxNTksIDAsIDkxNzkzNiwgNDIzNDAsIDQ3NTYsIDAsIDcwODEsIDEwNzMwLCAKKyAgICA3NjkxLCAxMDMzMSwgNjM4MzAsIDExOTYyNSwgMTk0OTQ1LCA0MjEwMywgODYyOCwgOTgxMywgMCwgNDI0NTMsIDE2MDQsIAorICAgIDk1NjUsIDEwNTM5LCAwLCA2NTc2NCwgNDE0MTUsIDY1NzY3LCAwLCA4NDU3LCA0MjMwMSwgMTEzNzIsIDY0ODczLCAxMTk5MiwgCisgICAgMCwgMCwgNjM5ODAsIDExODAxLCAzNjIyLCAwLCA2NDMzNiwgMTIwMTcsIDEwNDYzLCA2Mzk4MSwgNDk2NywgNjQxODksIAorICAgIDE5NjYsIDQzNjI4LCAwLCAwLCAwLCAwLCA2Mzk3MSwgNDM0NywgNDQxNiwgNDIwOTgsIDExMDA5LCAxMDY5NCwgNjM5NzMsIAorICAgIDQwMiwgMCwgMTMxNDcsIDAsIDQyMTAwLCA2NDY0NiwgMTMyMjgsIDAsIDQxODc1LCAzNTE1LCA3NDI1MiwgMTE4MDUsIDAsIAorICAgIDExMzAyLCA2MjU5LCA0MzM5NSwgMCwgMCwgMTk0NjcwLCAwLCAwLCAwLCA3NDQyNSwgMTEyOTksIDE1NjEsIDAsIDAsIAorICAgIDY0OTQyLCAwLCAxOTQ3MzMsIDAsIDE5NDczMiwgMCwgNzQzMDEsIDAsIDExMjgwLCAwLCA2OTc4NCwgNzQwNjAsIDAsIDAsIAorICAgIDExOTY2NCwgNTE0NSwgMTI0ODYsIDY1MDE4LCA2NjUxNiwgNTQwOSwgMCwgMTk0NjY5LCA3NDAyLCA1Mzk5LCA5Njg1LCAKKyAgICA3NDA4OSwgNzk1MiwgNTQwMSwgMCwgNjY2MTYsIDY4NDIxLCAwLCAwLCA1NDA1LCA5MTc1NTUsIDY0ODY2LCAwLCAwLCAwLCAKKyAgICA3ODc4NCwgNzQyNDgsIDExMzMwLCAxOTQ3MjMsIDY0NjkwLCAzMjU0LCAwLCAwLCAwLCA0MjM5MCwgNDM2NzgsIDE5NDcyNSwgCisgICAgMCwgNjUwNzcsIDAsIDYzODgsIDMzNTUsIDk1MDgsIDk4NjcsIDU3MjMsIDExNTIwLCA1NjExLCAwLCAzMzc3LCAwLCAwLCAwLCAKKyAgICAwLCA3ODIyOCwgMCwgMCwgNDI2OTEsIDkxNzg4NiwgMCwgNzQ3NjcsIDAsIDAsIDEzNzksIDI0NiwgMCwgMCwgMzc4OCwgMCwgCisgICAgMTEwNDEsIDAsIDY2MzA0LCAwLCAwLCA4OTE3LCA0MjQwMywgMzAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDY1NiwgMCwgCisgICAgNjUyMTQsIDExOTI0MiwgNDI1NjcsIDAsIDEzMTYzLCAwLCAxMjA4MzEsIDc0NTk3LCAzMTgyLCAwLCAwLCAwLCA2NTAzNCwgCisgICAgNjU4ODksIDQyMTY5LCA0NzU1LCA3NDI0NCwgMCwgMTE0NDMsIDAsIDY2MzE5LCA3NDU5OCwgNjA4LCA2MDAsIDAsIDEyMTksIAorICAgIDM5MzQsIDY0MjA2LCAxMTQ4MywgNzQ1MTAsIDAsIDc0NDg1LCA0MjQ0MiwgNjU0NzAsIDAsIDY0MjAyLCAxMzE2MCwgNzc1OSwgCisgICAgNDI0ODIsIDQ4NSwgMCwgMCwgOTgyOCwgMCwgMCwgNDIyODAsIDAsIDkzNTEsIDc3NzgsIDY0Mzc5LCA3NDk2LCA0MjQzMSwgCisgICAgNjkxNiwgMTIwOCwgMCwgMTE5NjMxLCAxMTAwMiwgNDI0NzAsIDAsIDExODk0NiwgMCwgMCwgNzQwNDEsIDAsIDAsIDQzNTM5LCAKKyAgICA1NDExLCA0MjE5NiwgMCwgMCwgMCwgOTE1MCwgMCwgNDIzOTMsIDEzMDg2LCAxMzEwLCAxOTQ2ODcsIDkzMzcsIDEyMDUyLCAKKyAgICAxMDY0MywgNTUyNzEsIDAsIDE5NDY4NCwgMjU0NiwgMTk0NjgzLCAyMTMsIDExODg1MiwgNjU2MTEsIDAsIDAsIDE5NDc1NiwgCisgICAgNzQzMTAsIDY1NTQsIDAsIDExOTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAxOTQ2ODEsIDExODgyNiwgMjcxMywgMCwgOTY1MCwgCisgICAgNDMzMzAsIDAsIDE5NDY3NSwgMTQwNiwgMCwgMCwgMCwgMCwgNjgyMjMsIDQxNDMsIDE5NDY3NywgMCwgNjU3NDgsIDQxNDEsIAorICAgIDk2ODIsIDY1Mjg3LCAxNTA4LCAxOTQ5NjMsIDg3NzksIDEwNTY5LCA4NzI1LCAxMzI5OSwgNjY2MzgsIDY1NzUwLCA0MjI2MywgCisgICAgNDE0NSwgNjM4MCwgNjU3NTEsIDY2NjEzLCA0Mzk5NCwgNjU3MzgsIDU1MjUwLCA5MTg1LCA5NTUwLCAwLCA0MzQwMywgMCwgCisgICAgMCwgMCwgNjU3MzYsIDQxOTUxLCA2NDgxNiwgNjU3NTYsIDAsIDEyOTU1LCAxMDU5NiwgMjg4OCwgMCwgMCwgMCwgOTY1NywgCisgICAgOTAxOSwgMTk0NzY2LCAwLCAyODc4LCA1MzkwLCAwLCAxOTQ5NjEsIDAsIDY4Njc5LCAwLCA3NTAxLCA2MzI4LCAwLCAKKyAgICAxMDQyOSwgMTAzNjUsIDAsIDAsIDQxOTQ2LCA3NTAzLCA1MjM1LCA4MDMsIDY4MzgxLCAwLCAwLCA4OTg2LCAwLCAxMDYzMiwgCisgICAgMTE5MzQsIDExNDUyLCAxMzMyLCAwLCAwLCAwLCAwLCAxMTg4ODcsIDE3OTEsIDUxOTEsIDkyODgsIDY0ODIyLCAyODkyLCAwLCAKKyAgICA0MzM5NCwgNTU1LCAwLCAwLCA2NjY0NiwgMCwgMTE5MDAyLCAxMzE1MSwgNzQ1MTIsIDcyODksIDc0MDU1LCAwLCA4ODU0LCAKKyAgICA2NDE2MiwgNTg1OCwgNDE5MjcsIDEwNTgyLCAwLCAxNzg0LCAxMzYxLCAxOTUwNDcsIDAsIDc5MDUsIDAsIDY0ODY4LCAwLCAKKyAgICAxMzE1OCwgMCwgNzIxMSwgMCwgOTM3MSwgNzM5NzMsIDAsIDY4MjgsIDE2MjUsIDAsIDAsIDEzNDIsIDY4NDQwLCA2NDE3MSwgCisgICAgMCwgMTA5MDMsIDAsIDAsIDAsIDAsIDAsIDQ0ODIsIDQxNjA2LCAwLCAwLCAwLCAwLCA2NDM4MSwgMCwgMCwgMCwgNDIyNDUsIAorICAgIDAsIDQxOTcyLCAwLCA0NDQsIDAsIDkxMjcsIDY2Njg3LCA2NjYxOSwgMCwgNzgwMjUsIDAsIDExMzQ5LCA0MDk5MSwgMCwgMCwgCisgICAgMTE5NTk5LCAxMjA4MzAsIDAsIDExOTcsIDAsIDExNDksIDE5NDk3MCwgMCwgMCwgNDA5OTAsIDAsIDAsIDM0OTIsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEyODM4LCAwLCAxOTk0OCwgMCwgMzA5OSwgMCwgMCwgNDEwODcsIDAsIDAsIDAsIDExOTA1OSwgMTIwMzYsIAorICAgIDAsIDAsIDAsIDgxNTIsIDAsIDY0NDI4LCAxMjIyNywgMCwgMCwgMTI4MjgsIDEyNzUxMSwgMCwgMCwgMTIwNzA4LCAwLCAwLCAKKyAgICAxMDM4NiwgMTE5NTc0LCAwLCAwLCAwLCAwLCA2ODE1NCwgMCwgMTc0MywgMCwgMCwgMCwgNjUxODYsIDAsIDAsIDk2MDYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5NDk2NywgMCwgMCwgMzM5NSwgOTM2MiwgMTA4NzgsIDAsIDAsIDc4MzYyLCA2NDgzMCwgCisgICAgMCwgMCwgNDEwOTEsIDM0MjYsIDEzNDQsIDg4NzAsIDAsIDAsIDQ3MzUsIDAsIDYxMTksIDEyODIyLCA0MjY5OSwgMCwgMCwgCisgICAgNzQ4MTgsIDAsIDAsIDQyNjM3LCA0MTA4MCwgMCwgMTIwMzksIDEwNTU5LCAwLCAxMTg4OTIsIDAsIDk0NzIsIDAsIDExOTI5LCAKKyAgICAwLCA3MTcwLCA5NTk2LCA2MTMwLCAwLCA0MzYyOSwgMTE1NzksIDE5NDc0MSwgMCwgMTk0NzQwLCAwLCAwLCA2NjY5OSwgMCwgCisgICAgMTAwNCwgMCwgMTk0NzM3LCA0MzIzNCwgNjYwMDgsIDEyNjI3LCAwLCA2ODQxNCwgMCwgNDM2MTksIDQzMzgyLCAxMTMwMCwgCisgICAgNDMzMDQsIDk2ODYsIDU4OTAsIDExNzc2LCA3NTU4LCAwLCA2NTYyNywgMCwgMTA3MTgsIDEzMTU0LCAzNDYxLCA5MTM5LCAwLCAKKyAgICAwLCAwLCAwLCA2NTM2NSwgNzM4NzcsIDY1NjI4LCA3ODAxOSwgMCwgMCwgNDE3MDgsIDEyODYwLCA0MTcwMywgMTIwNjksIAorICAgIDEwODM4LCA1NDAzLCAxMDM1MiwgNzM5MTcsIDEwMDYxLCA0MzIzNywgMCwgNTE0MCwgMjA5LCAwLCA0MTcwNCwgNDEwNTYsIAorICAgIDQzMDc4LCAwLCAwLCAwLCAxMDg5OSwgNjU0NjksIDAsIDAsIDAsIDI0MTAsIDk5MywgMCwgMTIwNTg5LCAxMjA2ODksIAorICAgIDc4NjkzLCAwLCAwLCA3MjMyLCAwLCAxMTkyNTMsIDAsIDAsIDc0NDYyLCAyMDY2LCAxMDQ4OSwgNDIxNjYsIDQzNDYzLCAKKyAgICAxMDY1OSwgMzYwMCwgMCwgNDIyNCwgMTMzNiwgNDE1MTgsIDAsIDAsIDAsIDAsIDQxMTM5LCA2NDgyMCwgMCwgMTI5NjYsIAorICAgIDQxMTM0LCAwLCAwLCAwLCAwLCAyNzIsIDQyNjMsIDg3OTMsIDAsIDAsIDQxNTAyLCAwLCA5ODMsIDEyNTQ5LCAwLCAwLCAKKyAgICAxMTkwLCA0MTA5LCAxMzM1LCA4NDEsIDU4ODgsIDQxMzU4LCA2NDg2MywgOTU0NCwgNDM0ODEsIDAsIDAsIDAsIDIwOTksIAorICAgIDUxMjAsIDI0MDksIDc3OTksIDAsIDc0NDI0LCAwLCAwLCA0NzMxLCAwLCA2NjYyOSwgMCwgMCwgMTI1NSwgNDE0OSwgOTI0NywgCisgICAgMCwgOTkxMywgMCwgMCwgNjQ5MTQsIDkxNzc4NywgNjUxMDEsIDAsIDExNjk0LCAwLCAxMTY5MCwgNTgzNSwgMCwgNjY2MjUsIAorICAgIDEwODQyLCA0MTM1NCwgNDIxMjMsIDQzMDk3LCAxMTY4OCwgNjY2MzQsIDEwOTQsIDE5NCwgNjQ2OTIsIDAsIDgxODAsIDAsIAorICAgIDAsIDk5NzIsIDczODY1LCA0NTE5LCA2MTE0LCAxMDg5OCwgNDMwNzIsIDAsIDAsIDAsIDAsIDAsIDEwNjk1LCAwLCA3NTQwLCAKKyAgICAwLCA4ODEsIDc4NTcsIDYwNjcsIDY1MTY0LCAwLCAwLCAwLCAxMzMxMSwgNjg0MDMsIDQxODU3LCA2NDMyMSwgODM1OSwgMCwgCisgICAgMTI2ODksIDAsIDE5NDU5NCwgMCwgMCwgMCwgNjgxODMsIDAsIDAsIDEyODcsIDU0MzYsIDAsIDAsIDc0MTQyLCAxMjcwMTMsIAorICAgIDc0MTUyLCAxMTkwNzgsIDYwNTEsIDEwNDk3LCAwLCA4OTg1LCAxMjEwOSwgMCwgMCwgMCwgMCwgMCwgMzY1MiwgMTA1MzcsIAorICAgIDAsIDEyNzYsIDEyMDQ0MCwgNjU0OSwgMjc5LCA3Mzc0NSwgMCwgMCwgMCwgMTQ4OSwgMCwgMCwgMCwgMzg5OSwgMTAwNywgCisgICAgNDIxMjQsIDAsIDQyMTIyLCAwLCAwLCAwLCAxMTk4NSwgMTM0NSwgNzg2MDAsIDAsIDAsIDg5NTYsIDQzMDgzLCAxMTk4MzAsIAorICAgIDQyMTM4LCA3ODYxMCwgMCwgMTIxNTEsIDc4NjA4LCA3ODYwNCwgNzg2MDUsIDYyODUsIDc4NjAzLCA3ODYxMiwgNzg2MTMsIAorICAgIDc0MTk0LCA0OTIsIDg2ODUsIDAsIDAsIDAsIDc4NjIyLCA0MzcxMiwgMjU4MiwgMTE0NzAsIDY0NTM4LCA3NDQ0LCA3ODYxNSwgCisgICAgNzg2MTYsIDQxNTUwLCAwLCA3MzgzNywgMTE5ODIzLCAyNTI3LCAxMTk4MjQsIDE5NywgMjc5OSwgMCwgNDE5NDQsIAorICAgIDEyMDI3NiwgOTkzMywgMCwgNjY1MTUsIDc2NywgNTUyNCwgNzAyOCwgMCwgMCwgMTE5ODI3LCAxMTk4MTcsIDExOTgyOCwgCisgICAgNzg2MzMsIDEwODk2LCAwLCAxNzk5LCAxMjA0OTcsIDY5NzEsIDc0MzM2LCAwLCAwLCA2NTM0MCwgMTE4OTc5LCA0MTU1MSwgCisgICAgMjQzNCwgMCwgMCwgMTIwNTc5LCAwLCA0NjMxLCAwLCAwLCA2NDA3LCAwLCA2MzM4LCA0MzIxNCwgMCwgNzU3MCwgMCwgCisgICAgMzE5MiwgMCwgODQxNCwgMCwgMCwgMCwgMCwgMCwgOTE2NCwgNjY2MTIsIDAsIDMxNzEsIDY2MjMsIDQ5NjEsIDY4Mzk2LCAKKyAgICA4ODYsIDU1MjE2LCA4NjU0LCA3ODgzMiwgOTk5MywgNzQzOTAsIDY0NjAzLCAwLCA2OTI0MSwgOTU5OSwgNzg2MjksIAorICAgIDQzMDg0LCA3ODYyNywgNzg2MjgsIDc4NjI1LCAyMzk5LCAwLCA4OTk0LCAxMDk0NCwgNDEyMDgsIDAsIDQxMTY4LCA4MTc4LCAKKyAgICAwLCAzMzY3LCAxOTUwMDgsIDQyNTEwLCA3ODY0MSwgNzg2MzYsIDY4MDQsIDc4NjM0LCAxOTQ3LCAwLCAwLCAwLCA0Mjc1OSwgCisgICAgMTEwNjgsIDE3MDUsIDkzMzEsIDAsIDc0Nzk4LCA5MTgxLCA2NTM1OSwgMCwgODAxNywgMCwgNjUwOTYsIDY2NzIwLCAwLCAKKyAgICA0MzQ3NSwgMCwgNDkwOSwgMTIxMjYsIDAsIDEyMDY5NiwgNDkwNCwgMCwgMTk1MDEyLCAxMzY1LCA5MjUzLCA0Mjc1NywgCisgICAgNDM0MzYsIDc0NjIsIDAsIDAsIDAsIDAsIDExOTU4NywgNjQ0MTUsIDAsIDAsIDUzOTgsIDAsIDE5NTAxNCwgMCwgMCwgMCwgCisgICAgMTE5MDE1LCAwLCAwLCA5NDc2LCAwLCAwLCAxMjc2MywgMCwgMzYyOSwgMCwgMTMwMDUsIDAsIDM2MjgsIDAsIDAsIDAsIAorICAgIDM0NjksIDQyMTA3LCA0MjExNiwgOTE3NTc4LCA2NDgwOSwgMjkyOCwgNDkwNSwgOTg1MywgODUxLCA5MDQwLCAwLCA2NDY2NSwgCisgICAgNDMwODYsIDkxMTQsIDAsIDQyNTgzLCA5MzE1LCA0ODIyLCA0OTA2LCAzODUyLCAyODQ3LCAxMTk4MjEsIDMyMzYsIDExMzE3LCAKKyAgICAxMjUxLCA3Nzc3LCA0MTg1MiwgMTE0MTAsIDEwOTY0LCAwLCA0MzIyMiwgMTI2NDYsIDEyMDI2OSwgMTAyNTksIDk4NjUsIAorICAgIDY1ODIxLCAwLCA2MDE4LCAxMTk4MTQsIDAsIDEyMjc2LCAwLCA2ODM3MiwgMCwgMCwgMTE5MjQ0LCAwLCAwLCAxMDQ2NywgMCwgCisgICAgMjQ0MywgMTA5MTgsIDc4MjE3LCAxMTk4MjUsIDEwMDEsIDkyNDEsIDE5MjcsIDAsIDAsIDczOTg3LCAwLCAwLCAwLCAKKyAgICAxMTg4MjgsIDEyNzUwNCwgNjU2NzgsIDEyODY3LCAwLCA4MjYwLCA3Nzk0NSwgNzUxOSwgMTE1MDUsIDEyMjc0LCA4OTA0LCAKKyAgICA1MTgsIDY1ODU3LCAwLCAwLCAxMzIwNCwgNDM4NywgODU3LCAwLCA2NTM2OSwgMCwgMTE5NTgzLCA0MzEyNSwgMTIwNTkyLCAKKyAgICAwLCAwLCAwLCAwLCA1MTM2LCAxOTY4LCAwLCAxOTUwMjMsIDEzMzcsIDY0OTY3LCAxNjI5LCAwLCA3OTYsIDY2NTA2LCAwLCAKKyAgICA3NDEyMywgMTI4NzcsIDAsIDQyMzE0LCA0MzM4OCwgMCwgNzQ0MDMsIDYxMjAsIDQ3OCwgNjUxNTEsIDY4MTI4LCAwLCAKKyAgICA0MzA4MiwgNjAxNiwgMCwgNDIyODQsIDAsIDQyNzYsIDEyMDYsIDM2MTksIDQxNjM4LCAwLCAzODQzLCAxMjAxMSwgODg1MywgCisgICAgMzM2MSwgMCwgNDkwLCAxMDcxNSwgNzU3OCwgNjgzODQsIDAsIDY1MzUwLCAxMDUzMCwgMTIzNDgsIDg2NTMsIDc0MzE0LCAKKyAgICA0MjQzNSwgNjE1NCwgOTU1MSwgNjUzNTQsIDc4NTIyLCA3ODQsIDQyMzk3LCAzMzQsIDAsIDQyNDE2LCA2NTM1NiwgNjUyNzMsIAorICAgIDc3OTg3LCAxMjcyNjUsIDQ0NDIsIDEwMzY0LCAwLCA3NzgsIDQxNjI2LCA0MjQ1NSwgNzk4OSwgNzQwNjMsIDMyMjcsIDAsIAorICAgIDEyNzI3NSwgNzM5ODMsIDI5MTUsIDExNTAyLCA0MTAyMiwgNDE3MDIsIDEwMzA5LCAxMjcwMzUsIDc4MzIwLCAwLCA2OTc1LCAKKyAgICAwLCA1NDE1LCAxMjE3NiwgMCwgMCwgMzQ2MiwgNjUyMTUsIDQyNjI5LCA3ODY5MSwgNzM3ODQsIDAsIDAsIDk3NTksIDAsIAorICAgIDc4MzI0LCAxMjcyNTQsIDgxMTQsIDc4Njk4LCA3ODY5NywgNzg2OTYsIDc4Njk1LCA4NzEwLCA0MjQ5NSwgMTE4OTU2LCAwLCAKKyAgICA0MDUxLCAxMDQ2MCwgNDMzNjQsIDExODkxNywgMTM1NiwgMTIxNjEsIDQyNzEzLCAwLCAxMjcyNjgsIDE2MTksIDk3MDMsIAogICAgIDQzMTUyLCA0MjQ4OSwgNDIxMTIsIDAsIDE4NzUsIDEwODA4LCA0MjEwOSwgMTIwMjg0LCA0MTg2MCwgNjQ4NjIsIDEzMzA1LCAKLSAgICA2NDkwNywgNTI4OSwgMTMxNDQsIDAsIDAsIDU1NzUsIDk2NzUsIDAsIDU5NDAsIDIyNiwgMjY0OSwgNzQ0OTMsIDAsIDAsIDAsIAotICAgIDMzODIsIDQyNDQ5LCA2NDk4LCAxNjU4LCAxMTkzNiwgMCwgMCwgMTEyNjksIDAsIDczNzU5LCA0MzEwMCwgNzQ0NDksIAotICAgIDY1NTA4LCAwLCAwLCAwLCA4OTM1LCA5MTc5ODUsIDAsIDAsIDAsIDYxNiwgMCwgNjUxNzgsIDQ2ODQsIDAsIDExOTY1MywgMCwgCi0gICAgMCwgMCwgNjA0OCwgNzQ0NjAsIDQyMTEwLCA3Mzk2NSwgMTA4NzAsIDg1NTcsIDExMDU0LCAwLCAwLCA5NjgxLCA0NDc1LCAwLCAKLSAgICAwLCAwLCAwLCAxMjA3MzEsIDYwMzUsIDAsIDc2NTEsIDEwMjk2LCAwLCAwLCAwLCAwLCAwLCAxMTg5NjYsIDc0MTQ0LCAKLSAgICA0MDk5NywgMCwgMTAzOTIsIDEwMzI4LCA0MDk5OCwgMCwgNzQ0ODgsIDAsIDk4MDAsIDg5NzksIDAsIDExOTEzMSwgNDEwMDAsIAotICAgIDAsIDExOTIzOSwgNjQ4NywgMTA5NzcsIDAsIDEwMzQ0LCAwLCA2NTI5OSwgNTM5NCwgMCwgMCwgMTAyMjAsIDY2NTA1LCAKLSAgICA0MTIwMCwgMCwgNDQyNSwgMCwgMCwgMCwgNDMwNzQsIDczNzk5LCAwLCAwLCAwLCAxMjE3MywgMCwgMCwgMCwgNjUzMzgsIDAsIAotICAgIDAsIDExOTU4MiwgNDQ3NCwgMCwgNDMwOTMsIDAsIDE1ODcsIDAsIDAsIDY0NDc1LCAwLCAxMzY5LCAwLCAwLCAwLCAwLCAKLSAgICA0NTYwLCAwLCAwLCAwLCAwLCA2NDk0OCwgNDQzMCwgNzQzNDcsIDQyNjAxLCA0NTE0LCAwLCAwLCA4MTk0LCA2NTQ2MiwgCi0gICAgMTA2MjYsIDEwOTY1LCAwLCA4ODkzLCAwLCAxMjU0MiwgMCwgNjUzNDEsIDAsIDY1ODI5LCA3OTI1LCAwLCAxMDQ3NSwgMCwgCi0gICAgMCwgMTM1MiwgMTEwNjksIDc3MDcsIDAsIDAsIDY1Mjc5LCAxMjcxMDIsIDEyNzEwMSwgMTI3MTAwLCA2NTYwNSwgNjA0MCwgCi0gICAgMTI3MDk3LCAxMDQ0MCwgMCwgOTMzNiwgMCwgMCwgODg5OSwgNzc5OCwgNjQ0NzQsIDY0MjU5LCAwLCA2NTE4OCwgNzgyMCwgCi0gICAgNDMwMTgsIDAsIDAsIDc3NDYsIDE0OTIsIDAsIDEwODg0LCAwLCAwLCA1MTI3LCAxMTI4NSwgNDI1MDEsIDU0OTUsIDQyNzMsIAotICAgIDQzMDk1LCA0MTQyNiwgMTA4NDksIDU3MzAsIDI5OTksIDAsIDEyMDcyMCwgNzQzMDQsIDM3MSwgNjQzNzMsIDYwMjMsIDE2OSwgCi0gICAgNTQ5NywgMTE3MDgsIDAsIDAsIDAsIDAsIDgyMjQsIDAsIDg5MzgsIDYwNDMsIDEyNzM4LCAwLCAwLCA1MzIxLCAwLCAwLCAwLCAKLSAgICAyNTg5LCA3NDMzMiwgMTY4OSwgNzgwMiwgNDY4MywgNzQzMTgsIDAsIDEyMDI5NiwgNjY3MDQsIDAsIDAsIDAsIDAsIAotICAgIDc0NTEzLCA2MDQ5LCAwLCA0MDI3LCA4MzQsIDExODk2MiwgMTgwMywgMCwgMTUwMywgMCwgMCwgMCwgNTczMSwgMTM4MSwgCi0gICAgMjM4NywgMCwgMCwgODI4OSwgNjQ1MjUsIDY1ODE3LCAyODgxLCA2NTUxNCwgMCwgOTYwMSwgMjg3OSwgOTY2OCwgOTc2NiwgCi0gICAgMCwgNTcyOSwgMCwgNzQ0MTAsIDYwMzYsIDY0ODgxLCA0MDI2LCA5MzYxLCAxMjcwOTEsIDI4ODcsIDAsIDM1MjYsIDYyOTgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDg1NzIsIDYwMjEsIDAsIDAsIDAsIDQzMTU1LCAwLCAwLCAzMTQ2LCAxMDk1OSwgMCwgMCwgMCwgCi0gICAgMTA5ODEsIDE2NiwgMCwgODYzNSwgMCwgMTA2MjMsIDQwOCwgMCwgMCwgMTMyOTgsIDAsIDc0MjYsIDQxNjQxLCAxMjcxNywgCi0gICAgMCwgNzYwNywgMTA2MzksIDY2NzEzLCAwLCAwLCA0MTY0MywgNzQxMzQsIDAsIDg3MTMsIDQxNjQwLCAwLCA0MTY0NSwgCi0gICAgNjY3MTIsIDY2NDUsIDY0NiwgNjY3MjYsIDY2NzExLCA0MjEyOSwgMCwgMCwgMzQ3MiwgODY5NywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNTgwOSwgMTk1MCwgMTE5MzU2LCAwLCA3NDU3MiwgMCwgNDIxMzYsIDAsIDAsIDAsIDAsIDMyNDcsIDExOTg1NCwgCi0gICAgNjUwMTcsIDAsIDAsIDY2NjY4LCAwLCAwLCAxMDk4MywgMCwgMCwgMCwgNDE1NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgyODUsIDAsIDQ1MDksIDAsIDY2NDcxLCAxMjIxNiwgMCwgNDA5ODgsIDAsIDAsIDQxNzI3LCAwLCAwLCAyMzk2LCAwLCAwLCAKLSAgICAwLCAwLCA2NDk0MCwgMCwgMzg4NiwgMCwgNDI0NTcsIDAsIDAsIDk5NiwgMCwgOTE3NTcxLCA0MjQ5LCAwLCA5MTc1OTQsIAotICAgIDExNzA3LCA4MjIyLCAwLCA3OTM5LCAwLCA5MTc1NzQsIDkxNzU4MiwgOTE3NTkyLCA5MTc1NjksIDg1MzQsIDAsIDQwOTgzLCAKLSAgICAwLCAwLCAwLCA3MjAxLCAxMjU2MSwgMCwgNDIzNzEsIDEyNTU4LCAwLCAwLCAxMDA1MiwgNDA5ODIsIDAsIDAsIDE0ODgsIDAsIAotICAgIDAsIDAsIDkxNzU1OSwgMCwgMCwgMTU2MywgMCwgOTYxOSwgMCwgMCwgMCwgMCwgMCwgNTgwMywgNzc5NywgNjA3MCwgCi0gICAgMTAwMDYsIDAsIDI5MjIsIDYwODIsIDAsIDY1MDA5LCAwLCAxMjU2NywgMCwgMCwgMCwgMCwgMCwgMzYwNywgNjU4NjMsIAotICAgIDEwMDQ2LCA5NjEyLCA0MjE1MywgODIxOCwgOTQ4NSwgMCwgMjAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgNDMwODUsIDYwNTcsIAotICAgIDUwOCwgMCwgMCwgMTIwMjY1LCAwLCAwLCAwLCAwLCA2MzgsIDYwODMsIDExOTA3MiwgMCwgMCwgMjMwNSwgMCwgMCwgMCwgCi0gICAgNjA1NiwgNjY1OSwgMCwgMCwgNjA4NSwgMCwgMCwgMzkxNSwgNDE2MzQsIDAsIDQxNjM5LCA2MzkxMiwgMTE5NDEsIDAsIAotICAgIDQwMjgsIDE3ODcsIDQyMTgwLCA0MzA5NiwgMCwgMzI0OSwgMTc2OCwgMCwgMTIzMjgsIDUwMSwgMTI3MDc0LCAxMDYwMSwgMCwgCi0gICAgNTgzLCAwLCA0MTk3NywgMCwgNjYwMDQsIDExOTM1MCwgNjUwNSwgNzQwMTAsIDAsIDEzMDY0LCAwLCAxMjA4MTAsIDY1MDAsIAotICAgIDU1MjYsIDY1MDQ5LCAwLCA3NDUzMSwgMCwgMCwgMTI3NDUsIDk2NzgsIDAsIDEyMDU4NywgOTg2OSwgMCwgMTc3MSwgMCwgCi0gICAgODkzNiwgMCwgMCwgNDIwOCwgMCwgMTE5MTE1LCAwLCAwLCAwLCA3NDEwMSwgMCwgMTE3NjIsIDAsIDAsIDAsIDAsIDY2NDc1LCAKLSAgICAwLCA1MDI3LCAwLCAwLCAwLCA1MDY5LCA3Mzg2MiwgNTAyOCwgOTg5NywgMCwgNzM3MzksIDUwMjYsIDAsIDAsIDAsIDAsIAotICAgIDg5MzEsIDAsIDE0MTUsIDg4NjYsIDQxOTAxLCA3NDc5MCwgMCwgMTE5MzYxLCAwLCA0MzEwNiwgNTAyOSwgMTE5MzYwLCAKLSAgICAxNTgwLCAzNTk4LCAwLCA0MTA3MCwgMCwgMCwgMzQ0MCwgMTE5MzU5LCAxNTYyLCAwLCA5MTc4MjcsIDExOTM1OCwgMTcxNiwgCi0gICAgMCwgMTA2MDAsIDAsIDYyMCwgNDEwMDEsIDYwMjgsIDAsIDQyODkyLCAwLCA3NDgyMiwgNTAyNCwgMTIwODI5LCA0MTAwMywgCi0gICAgMCwgNTAyNSwgMCwgMCwgMCwgMTE5MzI4LCAwLCA2NTU1NywgMCwgMCwgMCwgMTE1OTksIDAsIDExNjAyLCA2MjQzLCAKLSAgICAxMTU3NCwgMTE1ODEsIDExNTk3LCAxMTU5OCwgNjI1MywgNjEwNSwgMTE1ODQsIDc0MTk1LCAxMTU2OSwgNjUyNzUsIDg5MDYsIAotICAgIDEyNzA5NiwgNjY0OTEsIDI2MzYsIDAsIDEwODE1LCAxMTYxOSwgMCwgNDE1NDAsIDc4MTUsIDExNjE2LCA2OTc5LCAxMjA4MCwgCi0gICAgNzcyMSwgMTE2MDQsIDc4NjksIDE1OTIsIDAsIDQyMTUyLCAwLCA0MTA0OCwgMCwgODI5LCAwLCAwLCAxOTk1MCwgMCwgMCwgCi0gICAgNjYxNiwgMCwgMTE4ODc1LCAxMDk1MywgMzkxLCAwLCAwLCA0ODIsIDQyMjk2LCAxMTU4OCwgMCwgNDM2MDYsIDAsIDAsIAotICAgIDY2MzcwLCAwLCA0MjMzNSwgMCwgMCwgMCwgNzUzOCwgNTMxNSwgMCwgNDI0OTEsIDAsIDQyMDYxLCAwLCA0NTc2LCAwLCAwLCAKLSAgICAxMjAyNDEsIDQyNzcsIDAsIDQwMzksIDY0NDcyLCA0MjMzOCwgMzY4LCA0MjA1OCwgMzk2MCwgMTEwNDMsIDExMzM3LCAKLSAgICAxMjAyNDcsIDkxNzgyMCwgNjM5ODksIDM5NTgsIDEyMTMyLCAxODQ5LCAwLCA5OTIxLCA0MjQ1MSwgOTE3ODE4LCA0MTE0NywgCi0gICAgNDIwNjQsIDExOTU5LCA0MjQwNCwgNDExNjAsIDAsIDM2MTgsIDAsIDAsIDQzMzAwLCA1MTU2LCAwLCAwLCA5MjksIDAsIAotICAgIDkxNzgyMiwgNDI0MzcsIDE1NTUsIDAsIDg2OTEsIDY2NDM1LCAwLCA0MTY2MiwgMCwgMCwgMCwgMCwgMCwgNDU3OCwgCi0gICAgNjQ1MTMsIDQxNjY0LCAwLCA0MjU3OCwgMCwgNDE2NjEsIDAsIDQzMzA1LCA5MzU2LCAwLCAwLCAwLCAxMjg2LCAxMDE2NiwgCi0gICAgMCwgMCwgNjQ3MDcsIDAsIDQyNDc2LCA3NzMwLCAwLCAwLCA0MjQ4MywgMCwgMCwgNDIzMjQsIDQyMjkxLCAxMDAyMCwgCi0gICAgNDMzNTksIDAsIDY2NDEsIDUyNSwgNDE2MjcsIDAsIDg3NjMsIDAsIDQxNjI4LCA1MzMsIDExOTMxLCA2NTIyNSwgODMyMSwgCi0gICAgNDI1MDQsIDQyNTgxLCAwLCA2OTE1LCA0MjMxMCwgNDM3NywgODU1OSwgMCwgMTIwMjM0LCAwLCAxMzE5MywgNjQzNTAsIAotICAgIDExNjY2LCA4Njc5LCA0MTkyNCwgMTU3NiwgNzczNSwgMCwgMCwgNzM4NDAsIDAsIDExMzc0LCAwLCAxMDg4OSwgOTE3OTA5LCAKLSAgICA3NzU3LCA0MjQ2MiwgMTIwMjI2LCAxMjY5OTQsIDY2NDkzLCAyNzE4LCA0MTY4LCA3Mzg0MiwgMTMzMDgsIDEyMDExMiwgMCwgCi0gICAgMTE3OSwgNDQ0MCwgMCwgMCwgMzYzLCAxMTAxNSwgMCwgMCwgNjQyOTYsIDEyNzA5MCwgNjY2OTIsIDEyMDgyNiwgMCwgCi0gICAgNjY0OTIsIDY1OTMsIDY0NjI1LCA0MTk2MywgMCwgMTE5MzI5LCAwLCAxMDAxMywgMCwgMCwgMTI3MDk1LCA5NDkyLCAKLSAgICAxMTc4MiwgNjQzODIsIDEyODMzLCAwLCAwLCAxMjk3LCA0MTYzMCwgNjMwLCAxMjcwOTQsIDAsIDAsIDAsIDEwNDMsIDAsIDAsIAotICAgIDEwMDkwLCAwLCAwLCAzMTMsIDkxNzU2MywgNDE4ODEsIDAsIDQyMzExLCA3NDQ1LCAwLCA1NzUwLCAxMDc1OSwgOTQxOSwgMCwgCi0gICAgOTQwNSwgMTEyNjgsIDAsIDkzOTgsIDg1MjYsIDkzOTksIDk0MjIsIDAsIDY2NDk1LCAwLCAwLCAwLCA0MTcxOCwgMTA3MDcsIAotICAgIDE2MDMsIDAsIDAsIDAsIDYzMSwgMCwgMCwgMTMxNjEsIDY1MjcyLCAwLCAxMDU0NiwgNzQyMTAsIDAsIDExNjAwLCAwLCAKLSAgICAyNzk3LCA3MzgyMSwgNDI0MjcsIDMwNiwgNzE0LCAzMDU4LCA0MjM4MSwgMTIwMDM2LCAxMjcwODAsIDEyMzUxLCA0MjM5NSwgCi0gICAgMCwgMTE2MDcsIDAsIDQyMjgyLCAwLCAwLCA5MTU3LCA3Mzc2NSwgNjYzNjQsIDQyNDMzLCAwLCA3NjAzLCAxMjgwMywgMTgwLCAKLSAgICA0MjE0MSwgMCwgMTIwNjEyLCA2NjQ5NCwgMTI2NzQsIDgyNDQsIDM2MiwgMCwgMCwgODAzNywgOTE3ODA0LCAxMTUzNSwgMCwgCi0gICAgNzQ4NDUsIDUxODUsIDY2Njk2LCA1NTIxLCAxMDMzNCwgNTUxOSwgMCwgMTAzMDIsIDAsIDEwMTA0LCAxMDI3LCA1MTgxLCAwLCAKLSAgICAwLCAxMDUyMywgMTQ0NiwgNDIzMjAsIDQxNjQ2LCA5OTEsIDUxODksIDQyNDcyLCA0MTY0NywgMTIwMTA1LCAxNzIyLCAKLSAgICA1NTgxLCAwLCAzNDA1LCAwLCAxOTQ2NDQsIDU1MjMsIDAsIDQyNjIwLCAwLCAwLCA5NTQ5LCAwLCAxMDU0OSwgMCwgOTY2MSwgCi0gICAgNjY0ODYsIDAsIDEyMDUzNywgMTIwMDI2LCAwLCAwLCAwLCAwLCA0MTk5MSwgMCwgMCwgNzYzMCwgOTg0NiwgNzY4NCwgCi0gICAgMTAzNTAsIDAsIDExNzQsIDAsIDAsIDAsIDAsIDY2NDg1LCAwLCA0MjI3NywgMCwgNDI0NTYsIDY1NjY3LCAwLCAxMjMzMCwgCi0gICAgMCwgMCwgNDI0MTcsIDQyMzgzLCAwLCA0MTM0NCwgNjI5MywgMCwgNjYyNTIsIDAsIDc0NDQzLCAwLCAxMDIwOSwgODMxMywgCi0gICAgNDE5NSwgMCwgOTAxMCwgNjY2OTAsIDAsIDAsIDY0ODk0LCAwLCA2NTg3MSwgMCwgMTczNiwgMCwgMzkwMSwgMTIyMjgsIAotICAgIDEyMDE1MSwgNjUyMDAsIDMzODMsIDEwNDQ2LCAwLCA2OTMsIDkxMzAsIDMxNCwgNjQxNDksIDQyNDIwLCAxMTk0OSwgMCwgMCwgCi0gICAgMTEwMjYsIDAsIDUzMzIsIDY5NDAsIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCAxMjA2MjgsIDE3NTEsIDI3MywgODE2NSwgCi0gICAgMTMxNjYsIDEyMDc2MywgMCwgMCwgMTI4MjQsIDAsIDQ1MjgsIDUzMjAsIDYzMDEsIDAsIDYxMzMsIDkzMzksIDk0NjMsIAotICAgIDQyMzQ2LCAxMDkyMiwgNjQ1NjAsIDM3NTcsIDAsIDAsIDAsIDY1ODY5LCA3Mzc2MCwgMjU2OSwgMCwgMjMyNiwgNjU3NDAsIAotICAgIDI1NjUsIDQyNDU5LCA3NTk2LCA3OTIxLCAwLCA3NDA5NSwgMCwgNDE4NDgsIDI1NjcsIDY2MDA2LCAwLCA0MDQ0LCAwLCAwLCAKLSAgICAxMjIzMywgMCwgMTAyMywgNDc0LCAwLCAxMTk4MTgsIDAsIDAsIDQyNDg3LCA2NTU1NiwgMCwgMCwgNDIyOTUsIDAsIDAsIDAsIAotICAgIDAsIDk4MzUsIDY2NDk5LCAwLCAwLCAxMjI3NSwgMTA4OTUsIDAsIDI3NCwgMCwgMTg1OCwgMCwgMCwgMCwgMTAxMTgsIAotICAgIDMxMzMsIDAsIDczNzk1LCAwLCA5NjEwLCA4MDY4LCA4MTk3LCAwLCA2OTksIDAsIDQxNjY1LCA1ODY4LCAwLCAwLCA0MjE4MiwgCi0gICAgNzU4MSwgMTk5NDAsIDAsIDQxNjY3LCAwLCAwLCAxOTIzLCA2NTU4MywgNjU4MDIsIDAsIDY0NTk3LCAwLCAxMTkxODQsIDAsIAotICAgIDAsIDY0NjQsIDcwMzYsIDI5OTYsIDE5MzcsIDAsIDAsIDQxODM1LCA0MDQ3LCA0MTg0MiwgMCwgNjUyMTcsIDAsIDAsIAotICAgIDExMDE3LCAwLCAwLCAyOTMsIDAsIDAsIDY0NzkxLCA0MTgyNywgNDI0NjYsIDY1NDE2LCAxMDU3OSwgODU2MCwgMCwgCi0gICAgNjU0MTMsIDExODgzNSwgNDgwMywgMTI5NjQsIDE3MzksIDE5NDEsIDM5MDAsIDAsIDE3MTMsIDAsIDAsIDczOTU3LCAKKyAgICA2NDkwNywgNTI4OSwgMTMxNDQsIDAsIDAsIDU1NzUsIDk2NzUsIDAsIDU5NDAsIDIyNiwgMjY0OSwgNjMzNiwgMCwgMCwgCisgICAgNDMyMzYsIDMzODIsIDQyNDQ5LCA2NDk4LCAxNjU4LCAxMTkzNiwgNzgyMzIsIDAsIDExMjY5LCAxMDE1MSwgNzM3NTksIAorICAgIDQzMTAwLCA3NDQ0OSwgNjU1MDgsIDAsIDAsIDAsIDg5MzUsIDkxNzk4NSwgMCwgMCwgMCwgNjE2LCA3NDc1MywgNjUxNzgsIAorICAgIDQ2ODQsIDc4NzAxLCAxMTk2NTMsIDAsIDAsIDAsIDYwNDgsIDc0NDYwLCA0MjExMCwgNzM5NjUsIDEwODcwLCA4NTU3LCAKKyAgICAxMTA1NCwgNjg2NjQsIDExOTA0OSwgOTY4MSwgNDQ3NSwgMCwgNDExNDIsIDIxMDAsIDAsIDEyMDczMSwgNjAzNSwgMCwgCisgICAgNzY1MSwgMTAyOTYsIDAsIDAsIDAsIDkxNzk4NywgMCwgMTE4OTY2LCA3NDE0NCwgNDA5OTcsIDAsIDEwMzkyLCAxMDMyOCwgCisgICAgNDA5OTgsIDQzNDYyLCA3NDQ4OCwgMCwgOTgwMCwgODk3OSwgMCwgMTE5MTMxLCA0MTAwMCwgMCwgMTE5MjM5LCA2NDg3LCAKKyAgICAxMDk3NywgMCwgMTAzNDQsIDAsIDY1Mjk5LCA1Mzk0LCA0MzI0NiwgNzgyNDMsIDEwMjIwLCA2NjUwNSwgNDEyMDAsIDAsIAorICAgIDQ0MjUsIDAsIDAsIDAsIDQzMDc0LCA3Mzc5OSwgMCwgNzgxNDcsIDAsIDEyMTczLCA3ODU0NSwgMCwgMCwgNjUzMzgsIDAsIAorICAgIDAsIDExOTU4MiwgNDQ3NCwgMCwgNDMwOTMsIDAsIDE1ODcsIDAsIDEyNzM3MiwgNjQ0NzUsIDAsIDEzNjksIDAsIDc4MjUxLCAKKyAgICA3OTI3LCAwLCA0NTYwLCAwLCAwLCAwLCAwLCA2NDk0OCwgNDQzMCwgNzQzNDcsIDQyNjAxLCA0NTE0LCA2NjQzNCwgMCwgCisgICAgODE5NCwgNjU0NjIsIDEwNjI2LCAxMDk2NSwgMCwgODg5MywgMCwgMTI1NDIsIDAsIDY1MzQxLCAwLCA2NTgyOSwgNzkyNSwgCisgICAgMTE5ODIyLCAxMDQ3NSwgMCwgMCwgMTM1MiwgMTEwNjksIDc3MDcsIDEyNzU2MCwgMCwgNjUyNzksIDEyNzEwMiwgNjgyMDcsIAorICAgIDEyNzEwMCwgNjU2MDUsIDYwNDAsIDEyNzA5NywgMTAwNzEsIDAsIDkzMzYsIDAsIDAsIDg4OTksIDc3OTgsIDY0NDc0LCAKKyAgICA2NDI1OSwgMCwgNjUxODgsIDc4MjAsIDQzMDE4LCAwLCAwLCA3NzQ2LCAxNDkyLCA3ODU1MSwgMTA4ODQsIDc3OTgyLCAwLCAKKyAgICA1MTI3LCAxMTI4NSwgNDI1MDEsIDU0OTUsIDQyNzMsIDQzMDk1LCA0MTQyNiwgMTA4NDksIDU3MzAsIDI5OTksIDYzNDIsIAorICAgIDY4NjM2LCA3NDMwNCwgMzcxLCA2NDM3MywgNjAyMywgMTY5LCA1NDk3LCAxMTcwOCwgMCwgMCwgNjMyMywgMCwgODIyNCwgMCwgCisgICAgODkzOCwgNjA0MywgMTI3MzgsIDAsIDAsIDUzMjEsIDAsIDAsIDAsIDI1ODksIDc0MzMyLCAxNjg5LCA3ODAyLCA0NjgzLCAKKyAgICA3NDMxOCwgNDI3MDQsIDEyMDI5NiwgMTE5MDUsIDAsIDAsIDAsIDAsIDc0NTEzLCA2MDQ5LCAwLCA0MDI3LCA4MzQsIAorICAgIDExODk2MiwgMTgwMywgMCwgMTUwMywgMCwgMCwgMCwgNTczMSwgMTM4MSwgMjM4NywgMCwgMCwgODI4OSwgNjQ1MjUsIAorICAgIDY1ODE3LCAyODgxLCA0MzE0MiwgMCwgOTYwMSwgMjg3OSwgOTY2OCwgOTc2NiwgMCwgNTcyOSwgOTE3ODMzLCA3NDQxMCwgCisgICAgNjAzNiwgNjQ4ODEsIDQwMjYsIDkzNjEsIDEyNzA5MSwgMjg4NywgMCwgMzUyNiwgNjI5OCwgMCwgNzc4OTcsIDAsIDc4NTE5LCAKKyAgICAwLCA4NTcyLCA2MDIxLCA3Nzg5NiwgMCwgNzc4OTUsIDQzMTU1LCAwLCAwLCAzMTQ2LCAxMDk1OSwgOTQ4MywgMCwgNzc4OTMsIAorICAgIDEwOTgxLCAxNjYsIDkxNzg0MSwgODYzNSwgMCwgMTA2MjMsIDQwOCwgMTE5MDU4LCAxMjc1MDcsIDEzMjk4LCAwLCA3NDI2LCAKKyAgICA0MTY0MSwgMTI3MTcsIDAsIDc2MDcsIDEwNjM5LCA2NjcxMywgMCwgMCwgNDE2NDMsIDc0MTM0LCAwLCA4NzEzLCA0MTY0MCwgCisgICAgMTAyMjEsIDQxNjQ1LCA2NjcxMiwgNjY0NSwgNjQ2LCA2NjcyNiwgNjY3MTEsIDQyMTI5LCAwLCA3NzkwMSwgMzQ3MiwgCisgICAgODY5NywgMCwgMCwgMCwgMCwgMCwgMCwgNTgwOSwgMTk1MCwgMTE5MzU2LCAwLCA3NDU3MiwgMCwgNDIxMzYsIDAsIDAsIDAsIAorICAgIDAsIDMyNDcsIDExOTg1NCwgNjUwMTcsIDAsIDY4NDI4LCA2NjY2OCwgMCwgMCwgMTA5ODMsIDAsIDAsIDAsIDQxNTY3LCAwLCAKKyAgICAwLCAwLCAxOTQ2MjQsIDAsIDAsIDAsIDgyODUsIDAsIDQ1MDksIDAsIDY2NDcxLCAxMjIxNiwgMCwgNDA5ODgsIDAsIDAsIAorICAgIDQxNzI3LCAwLCAwLCAyMzk2LCAwLCAwLCA3NDAxOCwgOTE3NTM4LCA2NDk0MCwgMCwgMzg4NiwgMCwgNDI0NTcsIDExOTAwOCwgCisgICAgMCwgOTk2LCA2ODEyMywgOTE3NTcxLCA0MjQ5LCAwLCA5MTc1OTQsIDExNzA3LCA4MjIyLCAwLCA3OTM5LCAwLCA5MTc1NzQsIAorICAgIDkxNzU4MiwgOTE3NTkyLCA5MTc1NjksIDg1MzQsIDAsIDQwOTgzLCAwLCAwLCAwLCA3MjAxLCAxMjU2MSwgMCwgNDIzNzEsIAorICAgIDEyNTU4LCAwLCAwLCAxMDA1MiwgNDA5ODIsIDAsIDAsIDE0ODgsIDAsIDAsIDAsIDkxNzU1OSwgMCwgMCwgMTU2MywgMCwgCisgICAgOTYxOSwgMCwgMCwgMCwgMCwgMCwgNTgwMywgNzc5NywgNjA3MCwgMTAwMDYsIDAsIDI5MjIsIDYwODIsIDAsIDY1MDA5LCAwLCAKKyAgICAxMjU2NywgMCwgMCwgNDE0MTIsIDAsIDAsIDM2MDcsIDY1ODYzLCAxMDA0NiwgOTYxMiwgNDIxNTMsIDgyMTgsIDk0ODUsIDAsIAorICAgIDIwMzIsIDc4MzU0LCAwLCAwLCAwLCAwLCAwLCA0MzA4NSwgNjA1NywgNTA4LCAwLCAwLCAxMjAyNjUsIDAsIDAsIDAsIDAsIAorICAgIDYzOCwgNjA4MywgMTE5MDcyLCAwLCAwLCAyMzA1LCA3ODM0OCwgMCwgMCwgNjA1NiwgNjY1OSwgMCwgMCwgNjA4NSwgMCwgMCwgCisgICAgMzkxNSwgNDE2MzQsIDAsIDQxNjM5LCA2MzkxMiwgMTE5NDEsIDAsIDQwMjgsIDE3ODcsIDQyMTgwLCA0MzA5NiwgMCwgCisgICAgMzI0OSwgMTc2OCwgMCwgMTIzMjgsIDUwMSwgMTI3MDc0LCAxMDYwMSwgMCwgNTgzLCAwLCA0MTk3NywgMCwgNjYwMDQsIAorICAgIDExOTM1MCwgNjUwNSwgNzQwMTAsIDAsIDEzMDY0LCA1NTI2NywgMTIwODEwLCA2NTAwLCA1NTI2LCA2NTA0OSwgMCwgCisgICAgNzM3NjQsIDAsIDAsIDEyNzQ1LCA5Njc4LCAwLCAxMjA1ODcsIDk4NjksIDAsIDE3NzEsIDAsIDg5MzYsIDAsIDAsIDQyMDgsIAorICAgIDc4MzQxLCAxMTkxMTUsIDc4MzQyLCAwLCAwLCA3NDEwMSwgMCwgMTE3NjIsIDAsIDAsIDc3OTk3LCAwLCA2NjQ3NSwgMCwgCisgICAgNTAyNywgMCwgMCwgMCwgNTA2OSwgNzM4NjIsIDUwMjgsIDk4OTcsIDAsIDczNzM5LCA1MDI2LCAwLCA2ODYzOSwgNjMzMSwgCisgICAgMCwgODkzMSwgMCwgMTQxNSwgODg2NiwgNDE5MDEsIDc0NzkwLCA3ODEzOCwgMTE5MzYxLCAwLCA0MzEwNiwgNTAyOSwgCisgICAgNjUzMDksIDE1ODAsIDM1OTgsIDY4NDI0LCA0MTA3MCwgNzc5MDMsIDAsIDM0NDAsIDc4MjE1LCAxNTYyLCAwLCAxMjcyMzYsIAorICAgIDExOTM1OCwgMTcxNiwgMCwgMTA2MDAsIDAsIDYyMCwgNDEwMDEsIDYwMjgsIDAsIDQyODkyLCAwLCA3NDgyMiwgNTAyNCwgCisgICAgMTIwODI5LCA0MTAwMywgMCwgNTAyNSwgMCwgMCwgMCwgMTE5MzI4LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDAsIDExNTk5LCAwLCAKKyAgICAxMTYwMiwgNjI0MywgMTE1NzQsIDExNTgxLCAxMTU5NywgMTE1OTgsIDYyNTMsIDYxMDUsIDExNTg0LCA3NDE5NSwgMTE1NjksIAorICAgIDY1Mjc1LCA4OTA2LCAxMjcwOTYsIDU3NTUsIDI2MzYsIDAsIDEwODE1LCAxMTYxOSwgNzg3MTcsIDQxNTQwLCA3ODE1LCAKKyAgICAxMTYxNiwgNjk3OSwgMTIwODAsIDc3MjEsIDExNjA0LCA3ODY5LCAxNTkyLCAwLCA0MjE1MiwgNzg0OTgsIDQxMDQ4LCAwLCAKKyAgICA4MjksIDAsIDAsIDE5OTUwLCAwLCAwLCA2NjE2LCAwLCAxMTg4NzUsIDEwOTUzLCAzOTEsIDAsIDY5Nzg1LCA0ODIsIAorICAgIDQyMjk2LCAxMTU4OCwgMCwgNDM2MDYsIDAsIDY4Mzk3LCA2NjM3MCwgMCwgNDIzMzUsIDAsIDAsIDAsIDc1MzgsIDUzMTUsIAorICAgIDAsIDQyNDkxLCAwLCA0MjA2MSwgMCwgNDU3NiwgMCwgNjg0MTcsIDEyMDI0MSwgNDI3NywgMCwgNDAzOSwgNjQ0NzIsIAorICAgIDQyMzM4LCAzNjgsIDQyMDU4LCAzOTYwLCAxMTA0MywgMTEzMzcsIDc4MjA5LCA5MTc4MjAsIDYzOTg5LCAzOTU4LCAxMjEzMiwgCisgICAgMTg0OSwgMCwgOTkyMSwgNDI0NTEsIDQyNTMsIDQxMTQ3LCA0MjA2NCwgMTE5NTksIDQyNDA0LCA0MTE2MCwgMCwgMzYxOCwgCisgICAgNzgzMzgsIDAsIDQzMzAwLCA1MTU2LCAwLCAwLCA5MjksIDY4MjcsIDQyMDM1LCA0MjQzNywgMTU1NSwgMCwgODY5MSwgCisgICAgNjY0MzUsIDAsIDQxNjYyLCAwLCAwLCAwLCAwLCAwLCA0NTc4LCA2NDUxMywgNDE2NjQsIDAsIDQyNTc4LCAwLCA0MTY2MSwgCisgICAgNzg3MTUsIDQzMzA1LCA5MzU2LCAwLCAwLCAwLCAxMjg2LCAxMDE2NiwgMCwgMCwgNjQ3MDcsIDAsIDQyNDc2LCA3NzMwLCAwLCAKKyAgICAwLCA0MjQ4MywgMCwgMCwgNDIzMjQsIDQyMjkxLCAxMDAyMCwgNDMzNTksIDAsIDY2NDEsIDUyNSwgNDE2MjcsIDAsIDg3NjMsIAorICAgIDAsIDQxNjI4LCA1MzMsIDExOTMxLCA2NTIyNSwgODMyMSwgNDI1MDQsIDQyNTgxLCAwLCA2OTE1LCA0MjMxMCwgNDM3NywgCisgICAgODU1OSwgMCwgMTIwMjM0LCAwLCAxMzE5MywgNjQzNTAsIDExNjY2LCA4Njc5LCA0MTkyNCwgMTU3NiwgNzczNSwgMCwgMCwgCisgICAgNzM4NDAsIDAsIDExMzc0LCA3ODA0MywgMTA4ODksIDQzNDYxLCA3NzU3LCA0MjQ2MiwgMTIwMjI2LCAxMDAyOSwgNjY0OTMsIAorICAgIDI3MTgsIDQxNjgsIDczODQyLCAxMzMwOCwgMTIwMTEyLCAwLCAxMTc5LCA0NDQwLCAwLCA3Nzk0OCwgMzYzLCAxMTAxNSwgCisgICAgNzc5NDcsIDc3OTQ0LCA2NDI5NiwgMTI3MDkwLCA2NjY5MiwgMTIwODI2LCAwLCA2NjQ5MiwgNjU5MywgNjQ2MjUsIDQxOTYzLCAKKyAgICAwLCAxMTkzMjksIDAsIDEwMDEzLCAwLCAwLCAxMjcwOTUsIDk0OTIsIDExNzgyLCA2NDM4MiwgMTI4MzMsIDExODk4NiwgMCwgCisgICAgMTI5NywgNDE2MzAsIDYzMCwgMTI3MDk0LCAwLCAxMjA3NzQsIDEyMDU3MCwgMTA0MywgNDM2NTIsIDY2MjIzLCAxMDA5MCwgCisgICAgMCwgMCwgMzEzLCA5MTc1NjMsIDQxODgxLCAwLCA0MjMxMSwgNzQ0NSwgMCwgNTc1MCwgMTA3NTksIDk0MTksIDU1MjIyLCAKKyAgICA5NDA1LCAxMTI2OCwgMCwgOTM5OCwgODUyNiwgOTM5OSwgOTQyMiwgMCwgNjY0OTUsIDAsIDAsIDEyNzIzOSwgNDE3MTgsIAorICAgIDEwNzA3LCAxNjAzLCAwLCAxMTkwMDMsIDAsIDYzMSwgNzc5NTIsIDc3OTUzLCAxMzE2MSwgNjUyNzIsIDAsIDEwNTQ2LCAKKyAgICA3NDIxMCwgNzgxMDEsIDExNjAwLCA3Nzk2MSwgMjc5NywgNzM4MjEsIDQyNDI3LCAzMDYsIDcxNCwgMzA1OCwgNDIzODEsIAorICAgIDc3OTYyLCAxMjcwODAsIDEyMzUxLCA0MjM5NSwgMCwgMTE2MDcsIDAsIDQyMjgyLCA3Nzk3MSwgNzc5NjcsIDkxNTcsIAorICAgIDczNzY1LCA2NjM2NCwgNDI0MzMsIDc3OTY0LCA3NjAzLCAxMjgwMywgMTgwLCA0MjE0MSwgMCwgMTIwNjEyLCA2NjQ5NCwgCisgICAgMTI2NzQsIDgyNDQsIDM2MiwgMCwgMCwgODAzNywgOTE3ODAzLCAxMTUzNSwgMCwgNzQ4NDUsIDUxODUsIDY2Njk2LCA1NTIxLCAKKyAgICAxMDMzNCwgMjA5MywgNzc5ODMsIDEwMzAyLCAwLCAxMDEwNCwgMTAyNywgNTE4MSwgMCwgMCwgMTA1MjMsIDE0NDYsIAorICAgIDQyMzIwLCA0MTY0NiwgOTkxLCA1MTg5LCA0MjQ3MiwgNDE2NDcsIDEyMDEwNSwgMTcyMiwgNTU4MSwgNzc5NzksIDM0MDUsIAorICAgIDAsIDE5NDY0NCwgNTUyMywgMCwgNDI2MjAsIDAsIDAsIDk1NDksIDAsIDEwNTQ5LCA1NTI4MiwgOTY2MSwgNDM2ODIsIDAsIAorICAgIDc3OTEwLCAxMjAwMjYsIDc4NzA4LCAwLCA3NzkxMSwgMCwgNDE5OTEsIDAsIDAsIDc2MzAsIDk4NDYsIDc2ODQsIDEwMzUwLCAKKyAgICAwLCAxMTc0LCA3Nzk4MSwgNDI3MzMsIDc3OTc4LCA3Nzk4MCwgNjY0ODUsIDc3OTc3LCA0MjI3NywgNzc5NzQsIDQyNDU2LCAKKyAgICA2NTY2NywgMCwgMTIzMzAsIDAsIDAsIDQyNDE3LCA0MjM4MywgMCwgNDEzNDQsIDYyOTMsIDAsIDY2MjUyLCA3Nzk4NCwgCisgICAgNzQ0NDMsIDAsIDEwMjA5LCA4MzEzLCA0MTk1LCA3NDQzNSwgMTMxNiwgNjY2OTAsIDEyMDAzMiwgNjMzMiwgNjQ4OTQsIDAsIAorICAgIDY1ODcxLCA3ODA2MCwgMTczNiwgMCwgMzkwMSwgMTIyMjgsIDEyMDE1MSwgNjUyMDAsIDMzODMsIDEwNDQ2LCA3ODg0MSwgCisgICAgNjkzLCA5MTMwLCAzMTQsIDY0MTQ5LCA0MjQyMCwgMTE5NDksIDAsIDEyMDE1MiwgMTEwMjYsIDAsIDUzMzIsIDY5NDAsIAorICAgIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCA0MjcwNiwgMTc1MSwgMjczLCA4MTY1LCAxMzE2NiwgMTIwNzYzLCA3ODg0MCwgMCwgCisgICAgMTI4MjQsIDAsIDQ1MjgsIDUzMjAsIDYzMDEsIDQzNjYyLCA2MTMzLCA5MzM5LCA5NDYzLCA0MjM0NiwgMTA5MjIsIDY0NTYwLCAKKyAgICAzNzU3LCAwLCAwLCAwLCA2NTg2OSwgNzM3NjAsIDI1NjksIDAsIDIzMjYsIDY1NzQwLCAyNTY1LCA0MjQ1OSwgNzU5NiwgCisgICAgNzkyMSwgMCwgNzQwOTUsIDAsIDQxODQ4LCAyNTY3LCA2NjAwNiwgMCwgNDA0NCwgMCwgMCwgMTIyMzMsIDAsIDEwMjMsIAorICAgIDQ3NCwgMCwgMTE5ODE4LCAwLCAwLCA0MjQ4NywgNjU1NTYsIDAsIDAsIDQyMjk1LCAwLCAwLCAwLCAwLCA5ODM1LCA2NjQ5OSwgCisgICAgMCwgNTQxNywgMTIyNzUsIDEwODk1LCAwLCAyNzQsIDAsIDE4NTgsIDAsIDAsIDU1MjUxLCAxMDExOCwgMzEzMywgMCwgCisgICAgNzM3OTUsIDAsIDk2MTAsIDgwNjgsIDgxOTcsIDAsIDY5OSwgMCwgNDE2NjUsIDU4NjgsIDAsIDAsIDQyMTgyLCA3NTgxLCAKKyAgICAxOTk0MCwgNDM2NjgsIDQxNjY3LCAwLCAwLCAxOTIzLCA2NTU4MywgNjU4MDIsIDAsIDY0NTk3LCA0MzQ0NCwgMTE5MTg0LCAKKyAgICAwLCAwLCA2NDY0LCA3MDM2LCAyOTk2LCAxOTM3LCAwLCAwLCA0MTgzNSwgNDA0NywgNDE4NDIsIDAsIDY0MTA3LCAwLCAwLCAKKyAgICAxMTAxNywgMCwgMCwgMjkzLCA3Nzk2NiwgMCwgNjQ3OTEsIDQxODI3LCA0MjQ2NiwgNDM0MjIsIDEwNTc5LCA4NTYwLCAwLCAKKyAgICA2NTQxMywgNzc5NjMsIDQ4MDMsIDEyOTY0LCAxNzM5LCAxOTQxLCAzOTAwLCAwLCAxNzEzLCA3Nzk2OSwgMCwgNzM5NTcsIAogICAgIDExNDA3LCA0MjQ0MSwgNDE5NzEsIDYyOTcsIDEyMDA5OCwgNjQxMDUsIDAsIDQyNDgxLCAxMTcxNiwgNjY0NzMsIDcxNzksIAogICAgIDQyMjg5LCAwLCA2NDEwMywgOTY5LCAwLCA5MzUyLCAwLCA2MTY1LCA2NDEwMCwgMCwgNjYzMiwgNzM4NjEsIDQyNDAyLCAKLSAgICA3NDMyNywgNzgwNiwgMCwgODkxNCwgMCwgMCwgMzE4MywgMTQzNSwgNjQ4NzYsIDI5NjksIDYwNDYsIDAsIDYyMDgsIDAsIAotICAgIDU3NDYsIDczNzQ5LCAwLCA2NDQxNiwgNDI0MjIsIDAsIDAsIDcwODIsIDczNzc1LCAzMzgsIDUwNTksIDE5NDcxOSwgMCwgCi0gICAgNDIzMjgsIDEwNzY3LCAwLCA4MTE1LCAwLCAwLCAwLCA4MjI3LCAwLCAxMjE4LCAwLCAwLCA2NTg0OCwgMCwgMCwgMCwgMCwgCi0gICAgMTI2OTg3LCA0NDg2LCAwLCAwLCAwLCAxMDkyNSwgMCwgMCwgMCwgMCwgNDIzMDksIDEwMjU3LCAwLCAxMDI3MywgMCwgCi0gICAgMTAzMDUsIDQyNDYxLCAwLCA0MjM0OSwgODgzMiwgMCwgNjQxMjcsIDEwNjQ0LCAwLCAwLCA0MjI3OCwgNzQ0NTEsIAotICAgIDEyNjk4OCwgOTE3ODU3LCA3Nzk0LCAwLCA0MjQyOSwgMTEwODEsIDQyMzE2LCAxMTkwMjYsIDM2NjksIDM5NjgsIDQyNDY4LCAKLSAgICAwLCAwLCAwLCA2NTQwMiwgMTE5NTgxLCAwLCAwLCA2NDkzMywgMCwgNDE5NjAsIDAsIDAsIDAsIDAsIDY2Njc4LCA0MjM5MSwgCi0gICAgMTU4OCwgNjU0MDAsIDg0MDksIDAsIDE5OTY3LCA2NTM5OCwgNzg3LCAwLCAwLCAwLCA2MTE1LCAxMTg5NDAsIDQxNjU0LCAKLSAgICA0MjQ4MCwgMCwgMCwgNDE2NTUsIDY1NDAxLCAwLCAwLCAwLCAwLCA2NDQsIDY1NTAwLCA0MTY1NywgMTA3NzgsIDM2NTksIAotICAgIDk1MzMsIDE4NCwgMTU1MywgMTMxMDcsIDY1NDg0LCAwLCAxMDUwMiwgNzQ0NTcsIDAsIDAsIDQxNTU0LCAwLCA4MjIwLCAwLCAKLSAgICA0MTU1NywgMCwgMCwgMTEwNzAsIDAsIDUxNTcsIDQwMjAsIDczODU4LCA0MTU1NSwgOTUxNCwgNjQ4MTgsIDY1MTAzLCAKLSAgICA2NDY0MSwgMCwgMTE5NjMzLCA3NTIwLCAwLCA3NDM3NywgMTEwMjksIDY2NjUxLCAwLCAwLCAxMTg5MzAsIDY0NTI3LCAwLCAKLSAgICA3ODc3LCA3MzgwMywgMCwgMCwgMTIwMDk2LCA3NDYwMiwgMCwgMCwgMCwgNDI4MTcsIDAsIDY1MjEyLCAxMTcxNSwgMTIxOTAsIAotICAgIDEyMzE5LCAwLCAwLCAwLCA5NTAyLCA2NTQyNywgMCwgNjU0MjQsIDAsIDAsIDk3MzQsIDY1NDI1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDExMiwgMTA4MjcsIDAsIDk4NjYsIDc0NTI3LCA2NjY3NSwgMCwgODYyNSwgNjQzNDYsIDExMjkwLCAxMDQ3NywgMCwgCi0gICAgODYzNiwgMCwgODMxNSwgNjU0NDQsIDAsIDAsIDc0NTk1LCA2MTUyLCAwLCAwLCA2NjI5LCAwLCAxMjAxNzEsIDAsIDc0NTg5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxMTA0NiwgMTE0OTAsIDQzMTI3LCA0NDg1LCAwLCAwLCA2NDkyNiwgMCwgMCwgMCwgNTg2OSwgCi0gICAgMTI0MzcsIDAsIDAsIDcwNDAsIDM1ODgsIDAsIDEyODI1LCAwLCAwLCAxMjcyNSwgMCwgMCwgMTIwMTY3LCAyMjMsIDAsIDAsIAotICAgIDEyMDE2NiwgNDI0NDQsIDAsIDY0NDk5LCA2NTI0NSwgMCwgMTE3MSwgMCwgMTIwMTY1LCAwLCAxODA1LCA4NzcyLCAwLCAwLCAKLSAgICA2NTA3OCwgNjUyNDcsIDAsIDEyMDExMSwgMjMzOCwgMCwgMTE4ODUzLCAwLCAwLCAwLCA2NDgwMCwgNjUyMzYsIDY3NjQ0LCAKLSAgICA2ODEyNiwgMTIxMywgMCwgNjQwNzUsIDc5NywgNjQwNzQsIDg3MzQsIDQyMTIsIDAsIDY0Mzg3LCA0MTE1LCAwLCA1MDA1LCAKLSAgICA2NDA3MCwgNjQwNzMsIDEwNjc5LCAwLCAwLCAwLCA2NDI3NiwgNDI2LCAwLCAwLCA4MjUxLCAxMDEzNiwgNjU0MzYsIDAsIAotICAgIDY1MDg4LCA0MzMwMiwgMTIyNCwgMCwgNjU1NzYsIDAsIDEwNzAxLCAxNzY0LCAzMTAxLCAwLCA2NTI5MSwgMTIwMTU5LCAwLCAKLSAgICAxMTM3MywgNzQ1NjYsIDAsIDEyMDEwMywgODY2MywgOTMxMiwgNDE2NDQsIDQ1MzksIDM3ODcsIDAsIDkyMjIsIDAsIDAsIAotICAgIDQyNTksIDkwOTIsIDc0NTY3LCA0MTk2MSwgMCwgMTI3MjQsIDY2MzU3LCA0MjMzMSwgNjQ5MzUsIDAsIDAsIDEyOTMsIAotICAgIDc5NDcsIDEyMDAzLCAwLCA3NDU5MywgMTIwMzA4LCAyNDU0LCA3NDgwNywgMzYxMywgMCwgMCwgMCwgNjU4ODgsIDEyMDMwNywgCi0gICAgMTA5NzgsIDEwODQwLCAwLCAxMDY2OCwgMCwgNDMwODcsIDEyNTk1LCAxMjAzMDQsIDAsIDExODgwNiwgMCwgMTE1NywgCi0gICAgNjQ5MDMsIDg2MzgsIDAsIDAsIDAsIDAsIDEyMDMxOSwgODIzNSwgMCwgNDQwNSwgMTAwODYsIDAsIDAsIDAsIDAsIDY1NDMwLCAKLSAgICA3NDAxMywgNjA3OSwgMCwgMTA3NjQsIDAsIDY0MjkxLCAwLCA5OTgsIDEyMDMxMiwgMTEwNjIsIDEyMDMxMywgNjQzMjcsIAotICAgIDE1NTgsIDAsIDE5OTEsIDc4ODIsIDQyMjU0LCAwLCA0MTcwMCwgNTMwLCAwLCAxMDQyOCwgMTE5MzM1LCAxMjAwMiwgCi0gICAgMTE5MzM2LCA1NzQyLCA0MzA3NiwgNDY5MiwgNjQ2MzAsIDQxODIzLCA0MDA3LCA1MDA0LCAxMTkzMzQsIDc4OTYsIDc1MSwgCi0gICAgNjU5NSwgNjU5NiwgMCwgNjYzNzMsIDAsIDAsIDY0OTA4LCAwLCA2MzExLCAwLCAxMjAwNCwgMTE5MTkyLCAxMjA0OSwgCi0gICAgNDMxMDgsIDAsIDAsIDQxNzA1LCAwLCA2NTk4LCAwLCA2NTk5LCAwLCAwLCA0MjE0OCwgMTE4ODI1LCA2NjAyNywgMCwgCi0gICAgNjU5NywgOTQxMiwgODM0MCwgMTE4MjQsIDY0NzQ1LCAwLCAwLCAwLCAxOTg4LCA1NDA3LCA2Nzg2NSwgMjQzMCwgNDE2NzgsIAotICAgIDAsIDAsIDIzMzYsIDAsIDAsIDAsIDEyMDQ0MiwgMCwgMTkyMSwgMTA5NDcsIDE5OTI3LCAwLCA2NTQwNiwgMCwgMTk5MTMsIAotICAgIDQyODQsIDEzMjE3LCAwLCAwLCAxMjg0MSwgOTIyOSwgMTA5NTYsIDQyMjg1LCA0MTY3NCwgMTk5NjQsIDQxNjc5LCA2NTA4NCwgCi0gICAgMzUyMSwgMCwgNTc3NCwgODMyNSwgMCwgNjU0MDMsIDAsIDE4NTQsIDEwNzk0LCAwLCAwLCAwLCAwLCAwLCA1MjgwLCAwLCAKLSAgICA0MzQ0LCAxMjkwNSwgNjU0MzMsIDYwNzYsIDY0NzkzLCA0MTYxMCwgNzY4LCAxMjA3NCwgNDQyLCAwLCA2ODE2MiwgNjQwODEsIAotICAgIDEyOTM0LCA0MTY4MiwgNjU0MzIsIDQxNjkzLCAwLCA2MDcxLCA2NTQzNCwgMCwgNDgwNCwgNjk5NCwgMCwgMCwgMCwgCi0gICAgNDE2OTYsIDQ2NywgMCwgMCwgMCwgMCwgMCwgODQyMSwgMCwgMCwgNjQ4MDEsIDUwMiwgMCwgNjU0MzEsIDAsIDAsIDEyMDQzLCAKLSAgICAxMzAzLCAzMTYsIDAsIDIwMjksIDY1MTkxLCAxMTkyNDYsIDExNTMzLCA2NDM2NSwgMCwgMCwgNDg2MCwgMTk0NjQ1LCAwLCAKLSAgICA0MjQ4OCwgMCwgOTU4MywgMCwgNTU0NiwgODAxOSwgNzM4NTYsIDAsIDAsIDAsIDU1NDQsIDIzNTUsIDEyMTUwLCA2NTcyNSwgCi0gICAgNTU0MywgMTE5MjQ1LCA2Mzc1MSwgMTIxMzcsIDU1NDgsIDAsIDAsIDAsIDAsIDY1NzI2LCA2MDc3LCAwLCA2NTQ1MiwgMCwgCi0gICAgMTEzMDEsIDAsIDAsIDAsIDk4NzQsIDAsIDAsIDAsIDMwNTAsIDY1NDEwLCAwLCAwLCAwLCAwLCA0MjgzMCwgMCwgNjY3MTYsIAotICAgIDAsIDQ2OTEsIDAsIDkzNDUsIDYyMSwgMCwgMCwgMCwgNjU0MTEsIDAsIDQxMTgyLCA3Mzg4MSwgNjU0MDgsIDczODk5LCAwLCAKLSAgICA5NDc0LCAxMDU0NSwgMTE5MTE4LCAxMDg4NywgMzc4NiwgNjU0MDksIDg4OTQsIDQzMTc5LCAxMTk2MTEsIDc5MjMsIDM3MTYsIAorICAgIDc0MzI3LCA3ODA2LCAwLCA4OTE0LCAwLCAwLCAzMTgzLCAxNDM1LCA2NDg3NiwgMjk2OSwgNjA0NiwgMCwgNjIwOCwgCisgICAgNjc4NDksIDU3NDYsIDczNzQ5LCAwLCA2NDQxNiwgNDI0MjIsIDAsIDAsIDcwODIsIDczNzc1LCAzMzgsIDUwNTksIAorICAgIDE5NDcxOSwgMCwgNDIzMjgsIDEwNzY3LCAwLCA4MTE1LCAwLCAwLCAwLCA4MjI3LCAyMDczLCAxMjE4LCAwLCAwLCA2NTg0OCwgCisgICAgMCwgMCwgMCwgMCwgMTI2OTg3LCA0NDg2LCAwLCAwLCAwLCAxMDkyNSwgMCwgMCwgMCwgMCwgNDIzMDksIDEwMjU3LCAwLCAKKyAgICAxMDI3MywgMCwgMTAzMDUsIDQyNDYxLCAwLCA0MjM0OSwgODgzMiwgNzgwNTEsIDY0MTI3LCAxMDY0NCwgNDI2NjIsIAorICAgIDc4ODI4LCA0MjI3OCwgNzQ0NTEsIDEyNjk4OCwgOTE3ODU3LCA3Nzk0LCAwLCA0MjQyOSwgNjM3NywgNDIzMTYsIDExOTAyNiwgCisgICAgMzY2OSwgMzk2OCwgNDI0NjgsIDAsIDc4NTQ0LCAwLCA2NTQwMiwgMTE5NTgxLCAwLCAwLCA2NDkzMywgMCwgNDE5NjAsIAorICAgIDY2OTksIDAsIDAsIDAsIDY4MjMsIDQyMzkxLCAxNTg4LCA2NTQwMCwgODQwOSwgNzgyMjMsIDE5OTY3LCA2NTM5OCwgNzg3LCAKKyAgICAwLCA5MTc5MzksIDAsIDYxMTUsIDIwNzgsIDQxNjU0LCA0MjQ4MCwgMCwgMCwgNDE2NTUsIDY1NDAxLCA0Mzk3NSwgMCwgMCwgCisgICAgMCwgNjQ0LCA2NTUwMCwgNDE2NTcsIDEwNzc4LCAzNjU5LCA5NTMzLCAxODQsIDE1NTMsIDEzMTA3LCA2NTQ4NCwgMCwgCisgICAgMTA1MDIsIDc0NDU3LCAwLCAwLCA0MTU1NCwgMCwgODIyMCwgOTE3OTQzLCA0MTU1NywgMCwgMCwgMTEwNzAsIDExOTIyMSwgCisgICAgNTE1NywgNDAyMCwgNzM4NTgsIDQxNTU1LCA5NTE0LCA2NDgxOCwgNjUxMDMsIDY0NjQxLCA2NDMwMywgNzgxMzEsIDc1MjAsIAorICAgIDAsIDc0Mzc3LCAxMTAyOSwgNjY2NTEsIDAsIDAsIDExODkzMCwgNjQ1MjcsIDAsIDc4NzcsIDczODAzLCAwLCAwLCAKKyAgICAxMjAwOTYsIDc0NjAyLCA5OTU1LCAwLCA0MDU1LCA0MjgxNywgMCwgNjUyMTIsIDExNzE1LCAxMjE5MCwgMTIzMTksIAorICAgIDc4NjMwLCAwLCA3ODYzMSwgOTUwMiwgNjU0MjcsIDAsIDY1NDI0LCAxMjYwNywgMCwgOTczNCwgNjU0MjUsIDAsIDAsIDAsIAorICAgIDc4ODM1LCAwLCAxMDExMiwgMTA4MjcsIDAsIDk4NjYsIDc0NTI3LCA2NjY3NSwgMCwgODYyNSwgNjQzNDYsIDExMjkwLCAKKyAgICAxMDQ3NywgMCwgODYzNiwgMCwgODMxNSwgNjU0NDQsIDAsIDAsIDc0NTk1LCA2MTUyLCAwLCAwLCA2NjI5LCAwLCAxMjAxNzEsIAorICAgIDAsIDc0NTg5LCA0Mzk5MywgMCwgNjk3OTAsIDAsIDAsIDQzNjkwLCAxMTA0NiwgMTE0OTAsIDQyNzMwLCA0NDg1LCAwLCAwLCAKKyAgICA2NDkyNiwgMCwgMCwgMCwgNTg2OSwgMTI0MzcsIDQyNzI4LCAwLCA3MDQwLCAzNTg4LCAwLCAxMjgyNSwgMCwgMCwgMTI3MjUsIAorICAgIDAsIDAsIDc4NjQyLCAyMjMsIDAsIDY5ODA2LCAxMjAxNjYsIDQyNDQ0LCAwLCA2NDQ5OSwgNjUyNDUsIDAsIDExNzEsIDAsIAorICAgIDEyMDE2NSwgMCwgMTgwNSwgODc3MiwgMCwgMCwgOTkzMCwgNjUyNDcsIDc4NjE5LCAxMjAxMTEsIDIzMzgsIDAsIDExODg1MywgCisgICAgMCwgNDI2NzYsIDAsIDY0ODAwLCA2NTIzNiwgNjc2NDQsIDY4MTI2LCAxMjEzLCAwLCA2NDA3NSwgNzk3LCA2NDA3NCwgCisgICAgODczNCwgNDIxMiwgMCwgNjQzODcsIDQxMTUsIDAsIDUwMDUsIDY0MDcwLCA2NDA3MywgMTA2NzksIDAsIDc3OTU0LCAwLCAKKyAgICA2NDI3NiwgNDI2LCAwLCAwLCA4MjUxLCAxMDEzNiwgNjU0MzYsIDAsIDY1MDg4LCA0MzMwMiwgMTIyNCwgMCwgNjU1NzYsIAorICAgIDEyMDE1OCwgMTA3MDEsIDE3NjQsIDMxMDEsIDAsIDY1MjkxLCAxMjAxNTksIDAsIDExMzczLCA2Mzc4LCAwLCAxMjAxMDMsIAorICAgIDg2NjMsIDkzMTIsIDQxNjQ0LCA0NTM5LCAzNzg3LCAwLCA5MjIyLCAwLCAwLCA0MjU5LCA5MDkyLCA3NDU2NywgNDE5NjEsIAorICAgIDAsIDEyNzI0LCA2NjM1NywgNDIzMzEsIDY0OTM1LCAwLCAwLCAxMjkzLCA3OTQ3LCAxMjAwMywgMCwgNzQ1OTMsIDEyMDMwOCwgCisgICAgMjQ1NCwgNDI3MTcsIDM2MTMsIDAsIDAsIDAsIDY1ODg4LCA4ODE2LCAxMDk3OCwgMTA4NDAsIDAsIDEwNjY4LCAwLCAKKyAgICA0MzA4NywgMTI1OTUsIDEyMDMwNCwgMCwgMTE4ODA2LCAwLCAxMTU3LCA2NDkwMywgODYzOCwgMCwgMCwgMCwgMCwgCisgICAgMTIwMzE5LCA4MjM1LCAxMjAzMTYsIDQ0MDUsIDEwMDg2LCAxMjAyNDcsIDAsIDY5MjE2LCAwLCA2NTQzMCwgNzQwMTMsIAorICAgIDYwNzksIDY4MTcsIDEwNzY0LCAwLCA2NDI5MSwgMCwgOTk4LCAxMjAzMTIsIDExMDYyLCAxMzE3LCA2NDMyNywgMTU1OCwgMCwgCisgICAgMTk5MSwgNzg4MiwgNDIyNTQsIDAsIDQxNzAwLCA1MzAsIDAsIDEwNDI4LCAxMTkzMzUsIDEyMDAyLCAxMTkzMzYsIDU3NDIsIAorICAgIDQzMDc2LCA0NjkyLCA2NDYzMCwgNDE4MjMsIDQwMDcsIDUwMDQsIDExOTMzNCwgNzg5NiwgNzUxLCA2NTk1LCA2NTk2LCAwLCAKKyAgICA2NjM3MywgMCwgMCwgNjQ5MDgsIDAsIDYzMTEsIDAsIDEyMDA0LCAxMTkxOTIsIDEyMDQ5LCA0MzEwOCwgMCwgMCwgNDE3MDUsIAorICAgIDAsIDY1OTgsIDAsIDY1OTksIDAsIDAsIDQyMTQ4LCAxMTg4MjUsIDY2MDI3LCAwLCA2NTk3LCA5NDEyLCA4MzQwLCAxMTgyNCwgCisgICAgNjQ3NDUsIDAsIDAsIDAsIDE5ODgsIDU0MDcsIDY3ODY1LCAyNDMwLCA0MTY3OCwgMCwgMTIwMjQzLCAyMzM2LCAwLCAwLCAKKyAgICA3ODg3MSwgMTIwNDQyLCAwLCAxOTIxLCAxMDk0NywgMTk5MjcsIDAsIDY1NDA2LCAwLCAxOTkxMywgNDI4NCwgMTMyMTcsIDAsIAorICAgIDAsIDEyODQxLCA5MjI5LCAxMDk1NiwgNDIyODUsIDQxNjc0LCAxOTk2NCwgNDE2NzksIDY1MDg0LCAzNTIxLCAwLCA1Nzc0LCAKKyAgICA4MzI1LCAwLCA2NTQwMywgMCwgMTg1NCwgMTA3OTQsIDAsIDY3NjYwLCAwLCAwLCA3ODM1OSwgNTI4MCwgMCwgNDM0NCwgCisgICAgMTI5MDUsIDY1NDMzLCA2MDc2LCA2NDc5MywgNDE2MTAsIDc2OCwgMTIwNzQsIDQ0MiwgMCwgNjgxNjIsIDY0MDgxLCAKKyAgICAxMjkzNCwgNDE2ODIsIDY1NDMyLCA0MTY5MywgMCwgNjA3MSwgNjU0MzQsIDAsIDQ4MDQsIDQwNTMsIDAsIDAsIDE5NDY1MywgCisgICAgNDE2OTYsIDQ2NywgNjk4MjMsIDAsIDY5Nzk3LCAwLCAwLCA4NDIxLCAwLCAwLCA0MzcwNSwgNTAyLCAwLCA2NTQzMSwgCisgICAgMTE5MDU2LCAwLCAxMjA0MywgMTMwMywgMzE2LCAwLCAyMDI5LCA2NTE5MSwgMTE5MjQ2LCAxMTUzMywgNjQzNjUsIDQzNDgwLCAKKyAgICAwLCA0ODYwLCAxOTQ2NDUsIDAsIDQyNDg4LCAwLCA5NTgzLCAwLCA1NTQ2LCA4MDE5LCA3Mzg1NiwgMCwgMCwgMCwgNTU0NCwgCisgICAgMjM1NSwgMTIxNTAsIDY1NzI1LCA1NTQzLCA3Nzk4OSwgNjM3NTEsIDEyMTM3LCA1NTQ4LCA3Nzk4NSwgMCwgNjU3MjcsIAorICAgIDY4Mzg4LCA2NTcyNiwgNjA3NywgMCwgNjU0NTIsIDAsIDExMzAxLCA3ODAxMywgNzgwMDgsIDc4MDEwLCA5ODc0LCA3ODAwNywgCisgICAgMCwgMCwgMzA1MCwgNjU0MTAsIDAsIDAsIDc4MDE2LCA3ODAxNywgNDI4MzAsIDQzOTk2LCA2NjcxNiwgMCwgNDY5MSwgMCwgCisgICAgOTM0NSwgNjIxLCAwLCAwLCAwLCA2NTQxMSwgMCwgNDExODIsIDczODgxLCA2NTQwOCwgNzM4OTksIDc4MDI0LCA5NDc0LCAKKyAgICAxMDU0NSwgMTE5MTE4LCAxMDg4NywgMzc4NiwgNjU0MDksIDg4OTQsIDQzMTc5LCAxMTk2MTEsIDc5MjMsIDM3MTYsIAogICAgIDExOTM0MSwgOTk5NiwgODUwOCwgMCwgNzAxMiwgODE5NSwgMCwgOTU2NiwgMCwgMzcyMiwgMCwgNDE3MDcsIDg0OTMsIDU0NSwgCi0gICAgOTU3NSwgNDEzNzksIDEwMDUwLCAxMjcxOCwgMCwgODg1OSwgNDE0NTksIDAsIDAsIDEyMDc0MCwgMCwgMCwgOTExOSwgCi0gICAgMjc4NywgNzkyMCwgMTE4ODIzLCA0MDIxLCAyMDEyLCA3OTg1LCAwLCAxMTk2NjMsIDAsIDAsIDAsIDAsIDQxMCwgMTIwNDQ5LCAKLSAgICAxODAyLCAxMjA3ODksIDc0MTA3LCAwLCA0MTY1OSwgNDE2NzEsIDE4MjcsIDAsIDY0Mzk2LCAxMDEyNiwgMTIxMTYsIAotICAgIDQxNjczLCAxMjAzNzAsIDExNDIyLCAxMjAzNzIsIDEyMDM3MywgMzg2MCwgMTIwMzY3LCAxMjAzNjgsIDQxMzQ1LCAKLSAgICAxMjAzNjIsIDEyMDM2MywgMTE3NDgsIDQyMTU4LCA3OTQxLCAxMTA3NiwgODc0OSwgMTIwMzYxLCAxMjY5OCwgNjQ4NTgsIAotICAgIDM2MSwgMTIwMzU3LCA4NDUsIDAsIDQxNTYwLCAxMTk3MCwgNDU2MiwgOTE3OTIwLCAyOTI2LCAwLCA0NTY5LCA3NDEzMCwgMCwgCi0gICAgMTE5MjIxLCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAwLCA2NTYyOSwgMCwgMCwgMCwgMCwgMCwgMTIwNTQzLCAwLCAwLCAKLSAgICA2MjkxLCAwLCAwLCA0MTY2OSwgNzA5NCwgOTE3OTIxLCAwLCAwLCA3NDA1NCwgMCwgMCwgMCwgODM5LCAwLCA3Njk1LCAKLSAgICA4NzY5LCA2NTI0NiwgNDgyOSwgMCwgNDg1OSwgNjQ0NjcsIDAsIDAsIDExODk5OCwgNzIwNiwgMCwgNjY0NywgMCwgMCwgMCwgCi0gICAgMCwgNjQ3NjQsIDQyMTAsIDAsIDAsIDgwNCwgMCwgMCwgMTIyOTgsIDAsIDAsIDAsIDY0OTI0LCAxMDA5MSwgNzM5MzEsIAotICAgIDk0NjgsIDc0MjQ1LCAwLCAwLCA3NDI0NiwgMCwgMTI4MzksIDY0NjY5LCAwLCAwLCAxMjc5LCAxNDI1LCA2MjI0LCAKLSAgICAxMTkyMjksIDExMDQ5LCAwLCA5MTc1NDksIDAsIDg0ODIsIDAsIDAsIDUwMzIsIDAsIDExOTQwLCA2Nzg4OCwgNjY0LCAwLCAKLSAgICA1MDM0LCAwLCAwLCAwLCAwLCA3Mzg4OCwgMCwgMTMyOTQsIDY3ODczLCA2NDg2OSwgNjAzMiwgMCwgOTExNSwgNzQzMCwgCi0gICAgMTIwMzc3LCAwLCAxMjA4MTksIDAsIDEyMDE2OCwgNzM5MTMsIDEyMDE3MCwgNDExNjEsIDU1MTgsIDQxNzQsIDEwOTkzLCAKLSAgICA0MTE2MiwgMTIwMTYwLCA2NDUyOCwgMTE2OSwgNDM0LCA0MTQzNywgMTkwNSwgNjAzNCwgNDExNjQsIDY0NzQ0LCA5NTI4LCAKLSAgICAxMTg4NjcsIDAsIDUyNCwgMCwgNzQwMjksIDc4OCwgNzQwMjcsIDAsIDAsIDAsIDE2NjMsIDEwNDE5LCA3NDAyNSwgNDI2MzYsIAotICAgIDAsIDAsIDAsIDEyMDY1NiwgMCwgMCwgMCwgMCwgMCwgNjc4OTcsIDc0MDM5LCAwLCAwLCAxMTM5NSwgMCwgMTE5MTA3LCAKLSAgICA0MzYxMiwgNjQzNDQsIDAsIDAsIDEwODU1LCA1NDQ1LCA5MzU1LCAwLCA2NTE5OCwgMCwgODk4OSwgMjIxLCA2NTY4NiwgMCwgCi0gICAgMCwgODAxMCwgNzE5MSwgNDk2MiwgMCwgODg1NSwgMCwgMCwgNjQ0NjksIDAsIDEwNTU1LCAwLCAwLCAwLCAwLCAxMjA0MjcsIAotICAgIDEwNDUxLCAwLCAxMjAxNTIsIDcyNDUsIDEyNDQzLCA3NDQwNSwgMTIwMTQ4LCAxMjAxNDksIDEyMDE1MCwgMzg3MywgODM2NywgCi0gICAgMCwgMTIwMTQ2LCAxMjAxNDcsIDAsIDY2NTA3LCAwLCAwLCAxMTAxMCwgMTI3MjMsIDc0MDU5LCA3NDA2MiwgNjIxNywgCisgICAgOTU3NSwgNDEzNzksIDEwMDUwLCAxMjcxOCwgMCwgODg1OSwgNjgyMCwgNzQzNDUsIDY1MTEwLCAxMjA3NDAsIDAsIDAsIAorICAgIDkxMTksIDI3ODcsIDc5MjAsIDExODgyMywgNDAyMSwgMjAxMiwgNzk4NSwgMCwgMTE5NjYzLCAwLCAwLCA3ODAyMSwgCisgICAgNzgwMjIsIDQxMCwgNzgwMjAsIDE4MDIsIDc4MDE4LCA3NDEwNywgMCwgNDE2NTksIDQxNjcxLCAxODI3LCAwLCA2NDM5NiwgCisgICAgMTAxMjYsIDEyMTE2LCA0MTY3MywgMTIwMzcwLCAxMTQyMiwgNzgxNDEsIDEyMDM3MywgMzg2MCwgMTIwMzY3LCA2ODQxMiwgCisgICAgNDEzNDUsIDEyMDM2MiwgMTIwMzYzLCAxMTc0OCwgNDIxNTgsIDc5NDEsIDExMDc2LCA4NzQ5LCAxMjAzNjEsIDIxMDQsIAorICAgIDY0ODU4LCAzNjEsIDEyMDM1NywgODQ1LCAwLCA0MTU2MCwgMTE5NzAsIDQ1NjIsIDkxNzkyMCwgMjkyNiwgMCwgNDU2OSwgCisgICAgNzQxMzAsIDAsIDQzNDg3LCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAxMjAzNzksIDY1NjI5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjA1NDMsIDAsIDAsIDYyOTEsIDAsIDc4NjM5LCA0MTY2OSwgNzA5NCwgOTE3OTIxLCAwLCAwLCA3NDA1NCwgMCwgCisgICAgMTk1MDI5LCAwLCA4MzksIDAsIDc2OTUsIDg3NjksIDY1MjQ2LCA0ODI5LCAwLCA0ODU5LCA2NDQ2NywgMCwgMCwgMTE4OTk4LCAKKyAgICA3MjA2LCAwLCA2NjQ3LCA0Mzk4NiwgMCwgNjk3NjYsIDAsIDY0NzY0LCA0MjEwLCAwLCAwLCA4MDQsIDAsIDAsIDEyMjk4LCAKKyAgICAwLCA2NjY1MywgMCwgNjQ5MjQsIDEwMDkxLCA3MzkzMSwgOTQ2OCwgNzQyNDUsIDAsIDAsIDc0MjQ2LCAwLCAxMjgzOSwgCisgICAgNjQ2NjksIDAsIDAsIDEyNzksIDE0MjUsIDYyMjQsIDExOTIyOSwgMTEwNDksIDAsIDkxNzU0OSwgNDMyMzksIDg0ODIsIDAsIAorICAgIDAsIDUwMzIsIDc3ODMwLCAxMTk0MCwgNjc4ODgsIDY2NCwgMCwgNTAzNCwgMCwgMCwgMTI3NTI1LCA0MjcwMiwgNzM4ODgsIAorICAgIDAsIDEzMjk0LCA2Nzg3MywgNjQ4NjksIDYwMzIsIDAsIDkxMTUsIDc0MzAsIDEyMDM3NywgMCwgMTIwODE5LCA2ODM4NywgCisgICAgMTIwMTY4LCA3MzkxMywgMTIwMTcwLCA0MTE2MSwgNTUxOCwgNDE3NCwgMTA5OTMsIDQxMTYyLCAxMjAxNjAsIDY0NTI4LCAKKyAgICAxMTY5LCA0MzQsIDQxNDM3LCAxOTA1LCA2MDM0LCA0MTE2NCwgNjQ3NDQsIDk1MjgsIDExODg2NywgMTk0NjY4LCA1MjQsIDAsIAorICAgIDc0MDI5LCA3ODgsIDc0MDI3LCAwLCAwLCAwLCAxNjYzLCAxMDQxOSwgNzQwMjUsIDQyNjM2LCAwLCAwLCAwLCAxMjA2NTYsIAorICAgIDAsIDY3ODc2LCAwLCAwLCAwLCA2Nzg5NywgNzQwMzksIDAsIDAsIDExMzk1LCAwLCAxMTkxMDcsIDQzNjEyLCA2NDM0NCwgMCwgCisgICAgMCwgMTA4NTUsIDU0NDUsIDkzNTUsIDAsIDY1MTk4LCA3MzkxLCA4OTg5LCAyMjEsIDY1Njg2LCAwLCAwLCA4MDEwLCA3MTkxLCAKKyAgICA0OTYyLCA2OTc3MiwgODg1NSwgMCwgMCwgNjQ0NjksIDEyMDQyNiwgMTA1NTUsIDAsIDQzMzMzLCAwLCAwLCAxMjA0MjcsIAorICAgIDEwNDUxLCAwLCA2NzY1MywgNzI0NSwgMTI0NDMsIDc0NDA1LCA5OTQ3LCAxMjAxNDksIDc4MzE3LCAzODczLCA4MzY3LCAwLCAKKyAgICAxMjAxNDYsIDQzNDMzLCA0MzY0OSwgMTE5ODcsIDAsIDAsIDExMDEwLCAxMjcyMywgNzQwNTksIDc0MDYyLCA2MjE3LCAKICAgICA1ODk2LCAwLCA3NjgyLCA3NDA0OSwgMTQ2MiwgMTAyMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNTk1LCAwLCA3NDQwMiwgCiAgICAgMTE4ODYwLCAwLCAxMjA0MTksIDAsIDc0MDUyLCAwLCAwLCAxMjA1NDksIDExOTA4MiwgNjQyOTUsIDEyMDQxOCwgMCwgCiAgICAgNjQ3NjUsIDczOTIzLCAxMjA0MTcsIDEyMDY2MiwgMTIwNzMwLCAwLCA2MjE2LCAwLCAxMDc1NSwgOTQ1NSwgMCwgODEyNCwgCi0gICAgMCwgOTQ3MCwgNjk0NCwgMCwgMCwgMCwgMjgyOCwgMCwgNTMxLCA0MjYzOCwgMCwgMCwgMCwgNzM3NjQsIDgyMDQsIDM2MTQsIAotICAgIDI4MjcsIDk2OTYsIDAsIDAsIDg3MjgsIDQzNTQsIDEwOTA0LCAxMjA1MDIsIDE5OTM2LCA3ODMzLCAxMjA2OTEsIDAsIAotICAgIDQyNTk5LCA0MjU5NywgMCwgMTIwNDA5LCAwLCAwLCA4NTM3LCAwLCAwLCAwLCAwLCAwLCA0MTE5OSwgMTAxMjEsIDIwMjgsIAotICAgIDAsIDAsIDAsIDAsIDMwNjIsIDAsIDc0NDQ3LCAxMjYwOCwgMCwgNjY0NDAsIDc1NDUsIDk3MDAsIDEyNTgwLCAwLCAKLSAgICAxMjA3NzcsIDAsIDQxMTU1LCAwLCA3NDA3MSwgMCwgMCwgMTI3MTMsIDAsIDAsIDAsIDAsIDAsIDE3MzQsIDAsIDAsIDAsIDAsIAotICAgIDI0NTYsIDIzMSwgMCwgNzQxNjcsIDU0MiwgMCwgMTE4Nzg2LCAwLCAwLCAxMjMwLCAwLCAwLCAzNTk3LCA5NzYxLCAxMDU4NCwgCi0gICAgNzQyMzUsIDAsIDQwMzcsIDAsIDgzNTIsIDAsIDU2ODcsIDAsIDY0NTE1LCAwLCAwLCAwLCA2Nzg0NiwgMCwgOTcwNCwgMCwgCi0gICAgMCwgNzQyODQsIDAsIDAsIDg2NjAsIDAsIDAsIDAsIDAsIDc0NDgyLCA0NDgzLCAxNzA5LCAwLCA5OTA5LCA2MDgwLCAwLCAwLCAKLSAgICAxNzQ2LCAxMzE1LCA4NjY3LCAwLCAwLCAxMzE0MCwgNjU4OTksIDEwNjA0LCAwLCA0NDgwLCAxMTI2NiwgMCwgMTIyNiwgCi0gICAgNjkzMCwgMCwgMCwgMCwgMTA4OTcsIDQxMjMwLCA2MDUsIDAsIDc0Nzg1LCAxMjAzNTYsIDAsIDAsIDQxNTAwLCAwLCAzMTEsIAotICAgIDExNDUzLCA2MjIxLCAxMDYwOCwgNjQ5NDMsIDc0MjgwLCAxMDg3NywgMCwgNjQ4ODUsIDc0MjcyLCAwLCAwLCAwLCAwLCAKLSAgICA3NDMxMiwgMzQ1LCAwLCA3NDQ1NiwgNjQ2MDYsIDQyNTg5LCAwLCAwLCA1MDM3LCAwLCAxNzc2LCA4NDIyLCAwLCAxMTg4MTQsIAotICAgIDQxNTA4LCA0MTIwMSwgMzIzLCA0MzMyOCwgMCwgMTIwNjk4LCAxMjk1LCAwLCA0NjI1LCAwLCA0NjMwLCAxMzExNywgMCwgMCwgCi0gICAgNjUxMjMsIDExMjkzLCAyNjY4LCAxMTI4OCwgMCwgNDI2NDAsIDY1NjY2LCAyNTE5LCAwLCA2NTQyMCwgMCwgMCwgOTE3ODg2LCAKLSAgICA1MDQ5LCAwLCAxMTkwMTEsIDcwNiwgNzc1NCwgMTA4NTQsIDg3MzgsIDAsIDY1NDE5LCAwLCAwLCA2NDksIDY1NDIxLCAwLCAKKyAgICAxMjcwNDIsIDk0NzAsIDY5NDQsIDAsIDAsIDAsIDI4MjgsIDAsIDUzMSwgNDI2MzgsIDAsIDAsIDAsIDQzNDI4LCA4MjA0LCAKKyAgICAzNjE0LCAyODI3LCA5Njk2LCAwLCAwLCA4NzI4LCA0MzU0LCAxMDkwNCwgNzg1NjIsIDE5OTM2LCA3ODMzLCAxMjA2OTEsIDAsIAorICAgIDQyNTk5LCA0MjU5NywgNDI3MDksIDEyMDQwOSwgMTI3MDQ0LCAwLCA4NTM3LCAwLCAwLCAwLCAwLCAwLCA0MTE5OSwgCisgICAgMTAxMjEsIDIwMjgsIDAsIDAsIDAsIDAsIDMwNjIsIDAsIDc0NDQ3LCAxMjYwOCwgMCwgNjY0NDAsIDc1NDUsIDk3MDAsIAorICAgIDEyNTgwLCAwLCAxMjA3NzcsIDEyMDUwMiwgNDExNTUsIDAsIDc0MDcxLCAwLCAwLCAxMjcxMywgMCwgMCwgMCwgNzg3NzIsIAorICAgIDAsIDE3MzQsIDAsIDAsIDAsIDY0NTk0LCAyNDU2LCAyMzEsIDAsIDc0MTY3LCA1NDIsIDAsIDExODc4NiwgMCwgMCwgMTIzMCwgCisgICAgMCwgMCwgMzU5NywgNDQ0NiwgMTA1ODQsIDc0MjM1LCAwLCA0MDM3LCAwLCA4MzUyLCAwLCA1Njg3LCAwLCA2NDUxNSwgMCwgCisgICAgMCwgNTUyNjUsIDY3ODQ2LCA3ODQzNCwgOTcwNCwgMCwgMCwgNzQyODQsIDAsIDAsIDg2NjAsIDAsIDAsIDAsIDc4NzczLCAKKyAgICA3NDQ4MiwgNDQ4MywgMTcwOSwgMTIwNjE3LCA5OTA5LCA2MDgwLCAwLCAwLCAxNzQ2LCAxMzE1LCA4NjY3LCAwLCAwLCAKKyAgICAxMzE0MCwgNjU4OTksIDEwNjA0LCAwLCA0NDgwLCAxMTI2NiwgMCwgMTIyNiwgNjkzMCwgMCwgMCwgNjM2MCwgMTA4OTcsIAorICAgIDQxMjMwLCA2MDUsIDAsIDc0Nzg1LCAxMjAzNTYsIDAsIDAsIDQxNTAwLCAwLCAzMTEsIDExNDUzLCA2MjIxLCAxMDYwOCwgCisgICAgNjQ5NDMsIDc0MjgwLCAxMDg3NywgMTE4ODY4LCA2NDg4NSwgNzQyNzIsIDAsIDAsIDAsIDEyMDczNiwgNzQzMTIsIDM0NSwgCisgICAgMCwgNzQ0NTYsIDY0NjA2LCA5OTE3LCAwLCAwLCA1MDM3LCAwLCAxNzc2LCA4NDIyLCAwLCAxMTg4MTQsIDQxNTA4LCAKKyAgICA0MTIwMSwgMzIzLCA0MzMyOCwgMCwgNDI2OTgsIDEyOTUsIDAsIDQ2MjUsIDAsIDQ2MzAsIDEzMTE3LCAwLCAwLCA2NTEyMywgCisgICAgMTEyOTMsIDI2NjgsIDExMjg4LCAwLCA0MjY0MCwgNjU2NjYsIDI1MTksIDAsIDY1NDIwLCAwLCAwLCA0MjUyLCA1MDQ5LCAKKyAgICA0MjY1OSwgMTE5MDExLCA3MDYsIDc3NTQsIDEwODU0LCA4NzM4LCAwLCA2NTQxOSwgMCwgMCwgNjQ5LCA2NTQyMSwgMCwgCiAgICAgNjY3MDIsIDAsIDEyNjcwLCAxMDEzLCAwLCA2NDkxOSwgNzA1LCAwLCA2NTQyMiwgMCwgMTE4MywgMCwgNzAxNywgNDI4NTIsIAotICAgIDAsIDgxNTcsIDk3MzYsIDY0NTAzLCA2NTQxOCwgMCwgMCwgNzQwMzUsIDAsIDExOTEzLCA3Mzg3NCwgNDI4NDgsIDAsIAotICAgIDg5MjAsIDAsIDAsIDc5NjIsIDEyMjExLCA5ODM3LCAwLCA2NjIyNywgMCwgNDE4NCwgMCwgMCwgMTAxNzcsIDczNzc3LCAKLSAgICAxODU3LCAwLCA0NjI2LCA4NDY0LCA4NDcyLCAwLCA0NjI5LCA4NDk5LCAwLCAwLCA0NjI0LCA3ODE4LCAxOTQ2MjIsIDAsIDAsIAotICAgIDc4MDUsIDAsIDAsIDY5MzUsIDAsIDAsIDAsIDAsIDQzMzI3LCAwLCAxMTkwNDYsIDg0OTIsIDgyNTAsIDg0NTksIDAsIAotICAgIDg0OTcsIDg0OTYsIDAsIDAsIDAsIDAsIDk1NDMsIDAsIDAsIDAsIDY1ODQ5LCAwLCAwLCAwLCAwLCAwLCA4Njg0LCAwLCAKLSAgICA2MTAyLCAwLCA1Mjk4LCAwLCA1Mjk0LCAwLCAwLCAwLCAwLCAwLCAxMTk4MjYsIDAsIDExOTIxNSwgMCwgMTIwNzMsIDAsIDAsIAotICAgIDAsIDEzMTA4LCAwLCA3NDM5NywgNDE0NjgsIDAsIDAsIDUyOTIsIDAsIDAsIDE5MzksIDUzMDIsIDM5NzAsIDAsIDEyNDU1LCAKLSAgICAxNzkzLCAwLCAwLCAwLCA2NjQzLCAwLCA2NTI2MywgMCwgMCwgNDEyOTMsIDAsIDExOTEyNSwgMCwgMTMyMTksIDk1NjksIDAsIAotICAgIDc0MzgzLCAwLCAwLCAwLCA1NTAwLCA4ODEzLCAwLCAwLCAwLCA1MzIyLCAwLCAwLCAwLCA1MzI0LCA2NjQ0MywgMzc4NCwgCi0gICAgNDE2MTQsIDY1MjY5LCA2MjMwLCAwLCAwLCA0MzMyNCwgMzM2MCwgMCwgMTE1MjMsIDAsIDAsIDQxNzMyLCA3MTk3LCAwLCAwLCAKLSAgICAwLCA0MTgyMSwgMTI0OSwgMCwgMCwgMCwgMTE4OTkyLCAwLCA2NDg5OSwgNjQ3NjMsIDQxMTQ5LCA0MTgwNywgNDMxNjIsIAotICAgIDQxODE1LCA0MTE1MCwgMCwgMTA1NzEsIDEwMDk2LCAwLCAwLCAwLCA2OTQ3LCA0MTE1MiwgODg3LCA5MjQ5LCA2NTY1LCAwLCAKLSAgICA0MTk5MCwgMCwgNDE4MTEsIDc0NDY2LCAwLCA2NjcwLCAwLCAwLCAwLCA0MzA5MiwgNDMzMjUsIDAsIDEwMTY4LCAwLCAKLSAgICA5NzgxLCAwLCA5MTkwLCAwLCA5NjY2LCA4MjY5LCA2NTk0NCwgNzQwMDUsIDEzMDE5LCAxMTY3MCwgMCwgMzE1LCAxMjgxMywgCi0gICAgMCwgMTE5NjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzc4LCA5NTA5LCAwLCAwLCA3NDQ3NSwgMzA2NiwgMCwgNjc4NDcsIAotICAgIDAsIDAsIDAsIDAsIDg3ODcsIDAsIDE5NDYxNiwgNDE2MTgsIDE5NDYxNSwgMCwgMTk0NjE0LCAwLCA2NDY1MiwgMCwgCi0gICAgMTk0NjEyLCAwLCAwLCA0MjA4OCwgMCwgMCwgNzE3NiwgMCwgMTAxMzcsIDYxMjEsIDEwOTk1LCAwLCA3NDUzNCwgODExOSwgCi0gICAgNjQ4NzQsIDAsIDAsIDAsIDAsIDc0NTI1LCAwLCAwLCAxMjkzMCwgMTM5NCwgNzQ1MTQsIDAsIDc0NTE1LCAwLCAxMTg4MDQsIAotICAgIDI5OTgsIDk1MjcsIDEyMDY1OSwgNjUxOTAsIDEyOTc3LCA0MjA5MCwgMTE5MTY1LCAwLCAxMTkxMDAsIDQxMjM2LCAwLCAKLSAgICA2NTE2OCwgNDIwMDMsIDQxMjM3LCA1ODQ4LCAwLCAwLCAzNjcwLCAwLCAwLCAwLCAwLCA3ODkwLCAwLCAxMTI5OCwgNDMzMTUsIAotICAgIDAsIDYyMjksIDE1OTMsIDAsIDAsIDYxOSwgNDYzNSwgNjUwODAsIDAsIDAsIDQxMjAsIDY1MzM3LCA2NTMzNiwgMCwgCi0gICAgMTE4MDgsIDExOTIxNCwgNzQxMTUsIDkzNjYsIDQyNzkwLCA0MjAwNiwgMCwgNjUzMjcsIDY1MzI2LCA2NTMyNSwgMTA3NTcsIAotICAgIDE1MDcsIDY1MzIyLCA2NTMyMSwgNjUzMjAsIDY1MzM1LCA2NTMzNCwgNjUzMzMsIDY1MzMyLCA2NTMzMSwgNDIwNTksIAotICAgIDY1MzI5LCA2NTMyOCwgMCwgOTEyOCwgMTE4ODg1LCA0MjA3MywgNDE2MzEsIDY0NTkwLCAwLCA0MzcxLCA3MTk2LCA2NTMxOCwgCi0gICAgMjAzNSwgNjUzMTYsIDQxMDYsIDY1MzE0LCA2NTMxMywgNDIwNzQsIDAsIDQxMjI4LCAwLCAxMTkxMTcsIDQxMjQxLCA3OTAzLCAKLSAgICA0MTIzOSwgNDM1MzMsIDEyNzA5OSwgNzE4OSwgMCwgMCwgMCwgMTIzNTcsIDQyODAyLCAwLCA4NDg3LCA5MTMxLCAwLCAKLSAgICA0NjE1LCAxMjY5NSwgMCwgMCwgMTIxNzUsIDAsIDY0NTM1LCAwLCA3ODA5LCAwLCAwLCA1NjIsIDEyMTY5LCA2NTkwLCAwLCAKLSAgICA2NjQ1NSwgNjQ3MzgsIDMyMTksIDAsIDAsIDAsIDEwMzcsIDAsIDIwMjUsIDAsIDEzMDk4LCAwLCAxMDYzNywgNDU2OCwgCi0gICAgNTQ5LCAxNTcwLCAwLCAyODM1LCAwLCAxMDYyNCwgMTk0NTg3LCAxMTA3MiwgMCwgMCwgMCwgMTI2MDYsIDAsIDI4MjUsIDAsIAotICAgIDEwODI1LCA4MDc5LCAyODIxLCA0MTA0NiwgMCwgMCwgMCwgMTIwNTkzLCAxMzA3MSwgMCwgNDUyLCA0MTA0OSwgNDI4NDAsIAotICAgIDQzNjE0LCAyODMxLCAwLCA3NDU5NiwgMTE0NjUsIDUyMTIsIDAsIDY0NzAzLCAxMTkxOTEsIDQyMzA4LCA3MTgxLCAwLCAKLSAgICA0MTMzMiwgMCwgMTIzMzMsIDAsIDE2NjgsIDAsIDAsIDAsIDExODcsIDAsIDQyNjI4LCAwLCAwLCAwLCAwLCAzMjQwLCAwLCAKLSAgICAxMjE5NCwgMCwgMTE1OTEsIDQxMDY1LCA1MzIzLCA4MTY2LCAwLCAwLCAwLCA3NDUzNSwgMTYyMywgNjUyOTcsIDAsIDU3MSwgCi0gICAgMCwgNDkxOCwgMCwgNTI4OCwgMCwgODkxNiwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDAsIDEwNzM2LCAwLCAxMTU3MSwgCi0gICAgNzYxNSwgMCwgMCwgNDIzNywgMCwgMTAzNSwgNjU4MTUsIDAsIDc4ODEsIDcwMSwgNjU5MzYsIDM0ODksIDAsIDAsIDAsIAotICAgIDExNDAzLCAwLCAwLCAwLCAzNzk2LCAwLCAwLCAzOTk0LCAxMTQyMSwgMCwgMCwgMCwgMCwgMCwgMCwgNjQ4NTcsIDAsIAotICAgIDI4NTUsIDAsIDY2MzA4LCA0MTYyMSwgMCwgMCwgMCwgMTA2NTQsIDAsIDExOTIyNiwgMTIxNjQsIDMyNDYsIDc5MDYsIDAsIAotICAgIDY1ODQ3LCA3MTgyLCAwLCAxMzAyNCwgMTk0ODIyLCAxMTk5MzEsIDAsIDAsIDAsIDAsIDE0OTYsIDc0NywgMCwgOTQyLCAKLSAgICAyMzc4LCA0MzEzNiwgMCwgODQ2NiwgMCwgOTMyMCwgODAwMSwgMTIzMiwgODEzOSwgMTE2MTcsIDAsIDAsIDExNDA5LCAwLCAKLSAgICAwLCAwLCA2NjMxOSwgMCwgMCwgMTE2MTIsIDAsIDAsIDIzNzQsIDAsIDg0NzUsIDExNjA5LCA2NjMxMywgMCwgMCwgNTI4NiwgCi0gICAgMTE5Mjk3LCAwLCAwLCA2NDkyNSwgMCwgMCwgMCwgMTk0NTgzLCA3NzA1LCAxMTk0MiwgMTEzMDUsIDE5NDU4MSwgMzMwOSwgCi0gICAgMCwgMCwgMCwgMCwgMTE5NzUsIDAsIDQxNjUzLCAxMjgwLCAxMjQxLCA3MTY4LCAxMjA5NiwgMCwgMCwgNDI1NjUsIDQxNjUxLCAKLSAgICAwLCAwLCAwLCA0MTY1MCwgMCwgNjY0NzAsIDAsIDEyOTE0LCA0MTQ5MSwgNjYwMTAsIDExOTU1MiwgNjA3OCwgNjUxMDAsIDAsIAotICAgIDE0NzUsIDAsIDAsIDYwODQsIDkxNzU0NiwgNDEwNjQsIDQxMDYyLCAwLCAwLCAzMjU2LCAwLCA0MjA3NiwgMCwgMCwgMCwgCi0gICAgODcyNywgMCwgNjU4NzUsIDAsIDAsIDAsIDEwNTYyLCA3NDIxNSwgNjc2MDgsIDAsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCAKLSAgICA5MDE1LCAwLCAwLCAzNjM1LCA2NDMzNywgMCwgMCwgMCwgNzE5NSwgMCwgMjAwNywgNjQ0MzEsIDAsIDAsIDAsIDAsIDYzNSwgCi0gICAgMCwgMCwgNjU2MTMsIDAsIDAsIDczOTk3LCAwLCAwLCAxMTkyMTgsIDc5ODQsIDg2MDAsIDc0NDM0LCAwLCA0MTc2LCAwLCAKLSAgICAyMDM0LCAwLCAxMjA4MDUsIDY1ODkxLCAxMjcwMzgsIDAsIDMxOCwgMjAzOCwgMCwgMCwgMCwgMzY0OSwgMTMxNDksIAotICAgIDQyMTQ1LCA0Mjc5OCwgMzYzNCwgMTIwMjkxLCAxMTg5MjcsIDAsIDEyMDEyNCwgNzg2NiwgMCwgMTE0MDIsIDQyMTQ2LCAKLSAgICAxMjAxMzQsIDc0MjM4LCAxMjAxMjksIDI4NDksIDEyNzAzNCwgMCwgNzkzOCwgMTI5NjAsIDE3NjEsIDExODEyLCA2NTM3OSwgCi0gICAgNzQ1MDksIDAsIDExNTksIDAsIDAsIDAsIDAsIDcxNzgsIDE5NDYzMiwgMCwgNDE2ODAsIDAsIDAsIDExNTM0LCAxNTE0LCAKLSAgICAxMTY2OCwgNjc4OTEsIDkzMTMsIDcwMTUsIDAsIDY3ODc3LCAwLCAxMjk4OSwgMTk0NTYwLCA5MzY4LCAxMjg0OCwgMTYyNCwgCi0gICAgNDMyNzAsIDAsIDE5NDU2MywgMTA4MTgsIDE5NDU2MiwgMTI2NDksIDAsIDAsIDExOTQsIDMyNDIsIDAsIDk1NTUsIDg1OTgsIAotICAgIDEyMDI5OSwgNjE2OSwgMCwgMTU1MSwgMjc5OCwgNjUxNzYsIDEyMDI5OCwgNDI3NTIsIDExOTAyNSwgMCwgNjc4NzUsIAotICAgIDEyMDMwMSwgMzQ5NSwgNjY2NDgsIDAsIDAsIDAsIDAsIDQ4OTEsIDAsIDEwNjQxLCAwLCA3Mzc0NiwgMCwgMCwgMCwgCi0gICAgNzM3ODcsIDAsIDAsIDcxOTksIDY0OTU1LCAwLCAwLCAwLCAwLCAwLCA2NDk1MiwgMCwgMTkzLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA4MTU3LCA5NzM2LCA2NDUwMywgNjU0MTgsIDAsIDAsIDc0MDM1LCAwLCAxMTkxMywgNzM4NzQsIDY2OTYsIDAsIDg5MjAsIAorICAgIDAsIDAsIDc5NjIsIDEyMjExLCA5ODM3LCAyMDUxLCA2NjIyNywgMCwgNDE4NCwgMCwgMCwgMTAxNzcsIDczNzc3LCAxODU3LCAKKyAgICAwLCA0NjI2LCA4NDY0LCA4NDcyLCAwLCA0NjI5LCA4NDk5LCA3ODMyMSwgNzgzMjIsIDQ2MjQsIDc4MTgsIDExOTE3MywgMCwgCisgICAgMCwgNzgwNSwgMCwgMCwgNjkzNSwgMCwgNzgzMjUsIDc4MzI2LCA3ODMyMywgNDMzMjcsIDQzOTg5LCAxMTkwNDYsIDg0OTIsIAorICAgIDgyNTAsIDg0NTksIDAsIDg0OTcsIDg0OTYsIDAsIDAsIDc4MzM2LCA3ODMzOSwgOTU0MywgNzgzMzUsIDc4MzMyLCA3NzgzMiwgCisgICAgNjU4NDksIDc3ODMxLCAwLCAwLCAxMjQ1MSwgMCwgODY4NCwgMCwgNjEwMiwgMCwgNTI5OCwgMCwgNTI5NCwgMCwgMCwgMCwgCisgICAgMTk1MDYyLCA5OTQ5LCAxMTk4MjYsIDQzNjE3LCAxMTkyMTUsIDAsIDEyMDczLCAwLCAwLCA3Nzg2MywgMTMxMDgsIDAsIAorICAgIDc0Mzk3LCA0MTQ2OCwgMCwgMCwgNTI5MiwgNTUyNzIsIDAsIDE5MzksIDUzMDIsIDM5NzAsIDAsIDEyNDU1LCAxNzkzLCAwLCAKKyAgICAwLCAwLCA2NjQzLCAwLCA2NTI2MywgMCwgNzgzMzAsIDQxMjkzLCA3ODMyOCwgNzgzMjksIDAsIDEzMjE5LCA5NTY5LCAwLCAKKyAgICA3NDM4MywgMCwgMCwgMCwgNTUwMCwgODgxMywgMCwgMCwgNzQ1NjYsIDUzMjIsIDAsIDc4MzQwLCA0MzYzMSwgNTMyNCwgCisgICAgNjY0NDMsIDM3ODQsIDQxNjE0LCA2NTI2OSwgNjIzMCwgNzgzNDksIDc4MzQ1LCA0MzMyNCwgMzM2MCwgNzgzNDQsIDExNTIzLCAKKyAgICAwLCAwLCA5OTI2LCA3MTk3LCAwLCA2ODQyOSwgMCwgNDE4MjEsIDEyNDksIDc4MzYwLCA3ODM2MSwgNzgzNTYsIDc4MzU4LCAKKyAgICA3ODM1MywgNjQ4OTksIDY0NzYzLCA0MTE0OSwgNDE4MDcsIDQzMTYyLCA0MTgxNSwgNDExNTAsIDAsIDEwNTcxLCAxMDA5NiwgCisgICAgMCwgMCwgNzgwNzQsIDY5NDcsIDQxMTUyLCA4ODcsIDkyNDksIDY1NjUsIDc4NTEwLCA0MTk5MCwgNzg1MDksIDQxODExLCAKKyAgICA3NDQ2NiwgMCwgNjY3MCwgNzc4ODIsIDAsIDAsIDQzMDkyLCA0MzMyNSwgMCwgMTAxNjgsIDAsIDk3ODEsIDE5NDYxMCwgCisgICAgOTE5MCwgMCwgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAxMzAxOSwgMTE2NzAsIDAsIDMxNSwgMTI4MTMsIDAsIDc4NDMyLCAKKyAgICA3ODI1NiwgNzgzNTEsIDc4MzUyLCAwLCAwLCAwLCAwLCAxMzc4LCA5NTA5LCAwLCAwLCA3NDQ3NSwgMzA2NiwgMCwgNjc4NDcsIAorICAgIDAsIDAsIDAsIDc4MzY1LCA4Nzg3LCAwLCAxOTQ2MTYsIDQxNjE4LCAxOTQ2MTUsIDc4MjYxLCAxOTQ2MTQsIDAsIDY0NjUyLCAKKyAgICAwLCAxOTQ2MTIsIDAsIDc4MzY2LCA0MjA4OCwgMCwgMCwgNzE3NiwgMCwgMTAxMzcsIDYxMjEsIDEwOTk1LCA3ODI1OSwgCisgICAgNzQ1MzQsIDgxMTksIDY0ODc0LCA5MTc4MTYsIDAsIDAsIDAsIDc0NTI1LCAwLCAwLCAxMjkzMCwgMTM5NCwgNzQ1MTQsIDAsIAorICAgIDc0NTE1LCAwLCAxMTg4MDQsIDI5OTgsIDk1MjcsIDEyMDY1OSwgNjUxOTAsIDEyOTc3LCA0MjA5MCwgMTE5MTY1LCAwLCAKKyAgICAxMTkxMDAsIDQxMjM2LCAwLCA0MjAwNSwgNDIwMDMsIDQxMjM3LCA1ODQ4LCAwLCAwLCAzNjcwLCAwLCAxOTQ2MDAsIDAsIDAsIAorICAgIDc4OTAsIDAsIDExMjk4LCA0MzMxNSwgMCwgNjIyOSwgMTU5MywgMCwgMCwgNjE5LCA0NjM1LCA2NTA4MCwgMCwgMCwgNDEyMCwgCisgICAgNjUzMzcsIDY1MzM2LCAwLCAxMTgwOCwgMTE5MjE0LCA3NDExNSwgOTM2NiwgNDI3OTAsIDQyMDA2LCAwLCA2NTMyNywgCisgICAgNjUzMjYsIDY1MzI1LCAxMDc1NywgMTUwNywgNDIyMTYsIDY1MzIxLCA2NTMyMCwgNjUzMzUsIDY1MzM0LCA2NTMzMywgCisgICAgNjUzMzIsIDY1MzMxLCA0MjA1OSwgNjUzMjksIDQyNjg5LCAwLCA5MTI4LCAxMTg4ODUsIDQyMDczLCA2Nzg1LCA2NDU5MCwgCisgICAgMCwgNDM3MSwgNzE5NiwgNjUzMTgsIDIwMzUsIDY1MzE2LCA0MTA2LCA2NTMxNCwgNjUzMTMsIDQyMDc0LCAwLCA0MTIyOCwgCisgICAgMCwgNjU2MDksIDQxMjQxLCA3OTAzLCA0MTIzOSwgNDM1MzMsIDc4NDU5LCA3MTg5LCAwLCAwLCAwLCAxMjM1NywgNDI4MDIsIAorICAgIDc4NDUwLCA4NDg3LCA5MTMxLCAwLCA0NjE1LCAxMjY5NSwgMCwgMCwgMTIxNzUsIDAsIDY0NTM1LCAwLCA3ODA5LCAwLCAwLCAKKyAgICA1NjIsIDEyMTY5LCA2NTkwLCA2OTc2MiwgNjY0NTUsIDY0NzM4LCAzMjE5LCA2ODY1NCwgMCwgMCwgMTAzNywgMCwgMjAyNSwgCisgICAgMCwgMTMwOTgsIDc4NDQyLCAxMDYzNywgNDU2OCwgNTQ5LCAxNTcwLCAwLCAyODM1LCAwLCAxMDYyNCwgNDM2MjMsIDExMDcyLCAKKyAgICAwLCAwLCAwLCAxMjYwNiwgNzg0MzMsIDI4MjUsIDAsIDEwODI1LCA4MDc5LCAyODIxLCA0MTA0NiwgMCwgMCwgMCwgCisgICAgMTIwNTkzLCAxMzA3MSwgMCwgNDUyLCA0MTA0OSwgNDI4NDAsIDYzNDYsIDI4MzEsIDU0NjEsIDc0NTk2LCAxMTQ2NSwgCisgICAgNTIxMiwgMCwgNjQ3MDMsIDExOTE5MSwgNDIzMDgsIDcxODEsIDAsIDQxMzMyLCAwLCAxMjMzMywgMCwgMTY2OCwgMCwgMCwgCisgICAgMCwgMTE4NywgMCwgNDI2MjgsIDc4NTc1LCAwLCAwLCAwLCAzMjQwLCAwLCAxMjE5NCwgMCwgMTE1OTEsIDQxMDY1LCA1MzIzLCAKKyAgICA4MTY2LCAwLCAwLCAwLCA3NDUzNSwgMTYyMywgNjUyOTcsIDAsIDU3MSwgMCwgNDkxOCwgMCwgNTI4OCwgMTI3Mjk1LCAKKyAgICA4OTE2LCA2NTA0OCwgMTkwOSwgODg2NCwgMCwgMCwgMTA3MzYsIDAsIDExNTcxLCA3NjE1LCAwLCAwLCA0MjM3LCAwLCAKKyAgICAxMDM1LCA2NTgxNSwgMCwgNzg4MSwgNzAxLCA2NTkzNiwgMzQ4OSwgMCwgMCwgMTIwNzUxLCAxMTQwMywgMCwgMCwgMCwgCisgICAgMzc5NiwgNjgwMCwgMCwgMzk5NCwgMTE0MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDY0ODU3LCAwLCAyODU1LCAwLCA2NjMwOCwgCisgICAgNDE2MjEsIDY4MjE0LCAwLCAwLCAxMDY1NCwgMCwgMTE5MjI2LCAxMjE2NCwgMzI0NiwgNzkwNiwgNDM5NzIsIDY1ODQ3LCAKKyAgICA3MTgyLCAwLCAxMzAyNCwgMTk0ODIyLCA3NDI3MCwgMCwgMCwgMCwgMCwgMTQ5NiwgNzQ3LCAwLCA5NDIsIDIzNzgsIAorICAgIDQzMTM2LCAwLCA4NDY2LCAwLCA5MzIwLCA4MDAxLCAxMjMyLCA4MTM5LCAxMTYxNywgMCwgMCwgMTE0MDksIDY4MzczLCAKKyAgICA2MzgyLCAwLCA2NDYzNCwgMCwgMCwgMTE2MTIsIDAsIDY3NjAwLCAyMzc0LCAwLCA4NDc1LCAxMTYwOSwgNjYzMTMsIDAsIDAsIAorICAgIDUyODYsIDExOTI5NywgMCwgMCwgNjQ5MjUsIDAsIDAsIDExODk4MiwgMTk0NTgzLCA3NzA1LCAxMTk0MiwgMTEzMDUsIAorICAgIDE5NDU4MSwgMzMwOSwgMCwgMCwgMCwgMCwgNjgwMiwgMCwgNDE2NTMsIDEyODAsIDEyNDEsIDcxNjgsIDEyMDk2LCAwLCAKKyAgICA2NjYxNSwgNDI1NjUsIDQxNjUxLCAwLCAwLCAwLCA0MTY1MCwgNjY1MDcsIDY2NDcwLCAwLCAxMjkxNCwgNDE0OTEsIAorICAgIDY2MDEwLCAxMTk1NTIsIDYwNzgsIDY1MTAwLCAwLCAxNDc1LCAwLCA5OTM4LCA2MDg0LCA5MTc1NDYsIDQxMDY0LCA0MTA2MiwgCisgICAgMCwgMCwgMzI1NiwgMCwgNDIwNzYsIDQzMjUyLCA3ODgyMywgMCwgODcyNywgMCwgNjU4NzUsIDAsIDAsIDAsIDEwNTYyLCAKKyAgICA3NDIxNSwgNDMwNjUsIDAsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCA5MDE1LCAwLCAwLCAzNjM1LCA2NDMzNywgMCwgMCwgMCwgCisgICAgNzE5NSwgMCwgMjAwNywgNjQ0MzEsIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgNjU2MTMsIDc3OTA5LCAwLCA3Mzk5NywgMCwgCisgICAgMCwgMTE5MjE4LCA3OTg0LCA4NjAwLCA3NDQzNCwgMCwgNDE3NiwgMCwgMjAzNCwgMCwgMTIwODA1LCA2NTg5MSwgMTI3MDM4LCAKKyAgICAwLCAzMTgsIDIwMzgsIDAsIDc4NTk2LCAwLCAzNjQ5LCAxMzE0OSwgNDIxNDUsIDQyNzk4LCAzNjM0LCAxMjAyOTEsIAorICAgIDExODkyNywgNjc2NzcsIDEyMDEyNCwgNzg2NiwgMCwgMTE0MDIsIDQyMTQ2LCAxMjAxMzQsIDc0MjM4LCA0MjY2NCwgMjg0OSwgCisgICAgMTI3MDM0LCAwLCA3OTM4LCAxMjk2MCwgMTc2MSwgMTE4MTIsIDY1Mzc5LCA2ODM4NiwgMCwgMTE1OSwgMCwgMCwgMCwgMCwgCisgICAgNzE3OCwgMTk0NjMyLCAwLCA0MTY4MCwgMCwgMCwgMTE1MzQsIDE1MTQsIDExNjY4LCA2Nzg5MSwgOTMxMywgNzAxNSwgMCwgCisgICAgNjc4NzcsIDAsIDEyOTg5LCA2NjQ3NCwgOTM2OCwgMTI4NDgsIDE2MjQsIDQzMjcwLCAwLCAxOTQ1NjMsIDEwODE4LCAKKyAgICAxOTQ1NjIsIDk5NTMsIDAsIDc4NDIxLCAxMTk0LCAzMjQyLCA5NzYxLCA5NTU1LCA4NTk4LCAxMjAyOTksIDYxNjksIAorICAgIDEyODcxLCAxNTUxLCAyNzk4LCA2NTE3NiwgMTIwMjk4LCA0Mjc1MiwgMTE5MDI1LCAwLCA2Nzg3NSwgMTIwMzAxLCAzNDk1LCAKKyAgICA2NjY0OCwgMCwgMCwgNjgzNjQsIDAsIDQ4OTEsIDAsIDEwNjQxLCAwLCA3Mzc0NiwgMCwgNjgzNTIsIDAsIDczNzg3LCAwLCAKKyAgICAxOTQ2MzMsIDcxOTksIDY0OTU1LCAwLCAwLCAwLCAwLCAwLCA0MjY4NSwgNDI2NzksIDE5MywgMCwgMCwgMCwgNDI2NjcsIDAsIAogICAgIDUyNzEsIDAsIDExOTY2MSwgMTE4ODgyLCAxMzYyLCAxMzI5NywgMCwgMCwgMCwgMCwgNzM3ODksIDAsIDY2NTgsIDQ0MjYsIAotICAgIDAsIDAsIDAsIDExOTEyMywgNzI3NiwgNDIxNjMsIDUyMjAsIDAsIDAsIDAsIDI0MTYsIDMzMTAsIDY2MDMwLCAwLCAzNzksIAotICAgIDAsIDAsIDAsIDAsIDMyMjMsIDY1NDkyLCAxMjg0LCAwLCA0NTQ5LCAwLCAwLCAwLCAwLCAxMDgwNywgOTU1OCwgMCwgMCwgCi0gICAgODUxNSwgODY4OCwgMTI4NjYsIDAsIDMyOTQsIDAsIDAsIDAsIDAsIDc1NjQsIDAsIDQzMzI5LCAwLCAwLCA3Mzc1NywgCi0gICAgNjY0NTYsIDQyMzU5LCAwLCAyMDMxLCAwLCA3MjAyLCAwLCAxMjY3NiwgNjY2MTUsIDAsIDMyMTUsIDAsIDc3MTAsIDE2MTAsIAotICAgIDczODAxLCAwLCAwLCA2NTY4MiwgMCwgMCwgNjU5MjQsIDAsIDIyOCwgMCwgMTUwMSwgMCwgNjQzOTUsIDUxNzksIDcyMDAsIAotICAgIDYyMjUsIDAsIDY1Nzk0LCAxNzI1LCA2NTUzMywgODE5NiwgNzQ3NiwgNzQzOTksIDAsIDAsIDAsIDg1MDIsIDU3NjIsIAotICAgIDE5NjcsIDc0ODMsIDAsIDAsIDgxMDQsIDAsIDc0NzQsIDAsIDAsIDAsIDEwNDE0LCAxMzAwMSwgODE0MSwgMCwgNDI1MzcsIAotICAgIDE1NTcsIDAsIDAsIDAsIDAsIDg2MzEsIDI1NDUsIDEyMDY3MiwgMCwgMCwgNzQxOTAsIDAsIDAsIDAsIDQyNzYyLCAwLCAwLCAKLSAgICAxNjUwLCAyNjIsIDE2MzcsIDAsIDc5MDEsIDMyMzgsIDAsIDQxODYxLCAwLCAwLCA2NTE1OCwgMTA4NjAsIDAsIDExOTEzNCwgCi0gICAgNzUyNywgMCwgNDMzMTksIDY0MTksIDAsIDQ1LCAwLCAwLCAwLCAwLCAxMTk4MTAsIDcxOTQsIDUyOTEsIDAsIDAsIDEzMTI5LCAKLSAgICAwLCA5MDg0LCAwLCA4NzM3LCAwLCAxMjg4MSwgMCwgMTI5MDYsIDk2MzksIDc5MTIsIDI2MjAsIDAsIDAsIDAsIDAsIDE3OSwgCi0gICAgNjU4OTYsIDAsIDY0NzU2LCAyODUzLCAwLCAxMTg4MTMsIDAsIDExODk5NiwgMCwgMjg1MCwgODA4NCwgMCwgNzM4NTAsIAotICAgIDI4MDEsIDExOTgzNywgNDIwNjksIDExOTgzOSwgNzQ3NTQsIDExOTg0MSwgNDIwNzIsIDExOTg0MywgMTE5ODQyLCA3NDc2NywgCi0gICAgMCwgMCwgMCwgMCwgODI0NSwgMTE5MzEzLCAzMTU4LCAxMTk4NTMsIDQzODksIDczODEzLCA5MjMsIDExOTg1NywgMTE5ODU2LCAKLSAgICAyOTIsIDEzMDAyLCAxMTk4NDUsIDExOTg0NCwgMzIyMSwgMTc2MywgMTE5ODQ5LCA0NjEyLCAxMTk4NTEsIDExOTg1MCwgCi0gICAgNzI1MywgMTI3MTEwLCAxMjA2MTgsIDAsIDEwNzgyLCAzNjM3LCAxMjk5NiwgNDM1NDIsIDAsIDY0NTc4LCAwLCAzMjI4LCAKLSAgICA3Mzg2OSwgODc4MywgMCwgMTE5NjE0LCAyNzMxLCAwLCAwLCAxMTg5MzksIDQxMDIsIDc2OTYsIDczODc4LCAwLCAwLCAwLCAKLSAgICA0MzMxNiwgNDE3NywgMTEyODMsIDkwODksIDAsIDczOTk2LCAwLCA2NDUwMCwgNjgxMzMsIDAsIDAsIDE4NTYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDMyMDgsIDEyOTc1LCAwLCAwLCAwLCAwLCA3NDA3MiwgMCwgMCwgMCwgMCwgMjAzMywgMTE5MDA4LCAwLCAKLSAgICAxOTUwMjYsIDAsIDc3NDAsIDAsIDAsIDAsIDczOTY0LCAwLCAwLCAwLCA2NTY3NCwgMCwgMCwgNDE2ODksIDAsIDc0MDA2LCAKLSAgICA2NDkwOSwgNjY0NiwgMTE3OTAsIDc0MDE5LCAwLCAwLCAwLCA4NTYxLCA0NTczLCAwLCA1MzI2LCAwLCAxMjA2MDUsIDcyMzAsIAotICAgIDgyNTcsIDAsIDg3NzgsIDQxNjg4LCAwLCA2NTc3NiwgMCwgODMxNCwgNjQ1OSwgMCwgNzYyOCwgNjUwOTIsIDczOTAzLCAKLSAgICA2NjcyMSwgMTEzNDIsIDAsIDAsIDAsIDAsIDEyNzAwMSwgMCwgMTE4MTAsIDEzMTY0LCAxMDcyMywgOTY3LCAwLCAwLCAKLSAgICAxMTk0NiwgMCwgMzI1NywgMCwgMTIzMDcsIDE4NDUsIDAsIDQzNTI2LCAwLCAwLCAxODg2LCA0MjM0MiwgMTAwODksIDg3MCwgCi0gICAgNzY0OCwgMzQ5OSwgODYwOSwgNzY1MiwgODc2LCA4NzEsIDg3NywgMCwgODc4LCA0MjAxNSwgODc5LCAwLCA0NTYzLCAwLCAwLCAKLSAgICA3NTkxLCA2NTg4NywgODY3LCA5NTIwLCA4NzIsIDAsIDg2OCwgODczLCA3NjQyLCAwLCA4NjksIDg3NCwgNzY0NCwgMCwgCi0gICAgODc1LCA3OTAsIDAsIDAsIDAsIDAsIDY2MTgyLCAwLCA1NDI5LCAwLCA2NjE4MCwgMCwgNjYxODEsIDAsIDAsIDAsIDQyMDY3LCAKLSAgICAwLCA1NDMzLCAxMDY1NywgNzkxMSwgMCwgMTU0NywgNjYxNzYsIDQyMDEyLCAwLCA1NDI1LCA0OTc3LCA5OTk5LCA1MzE3LCAKLSAgICA1NDIzLCA0NjExLCAwLCA2NzYzNywgMCwgOTY3OSwgNzQxMjIsIDAsIDAsIDAsIDAsIDQ0MTgsIDY2MTg0LCA0NjI4LCAKLSAgICA0MjQ1LCAwLCAwLCAwLCAxODUxLCAwLCAwLCAxMTkwOCwgMCwgOTM2MCwgMTE4ODk3LCAwLCA0Mjc3NiwgNjYxODcsIAotICAgIDEyODM3LCA4ODI5LCAwLCAwLCAwLCAwLCA0MzMxOCwgMCwgODgwOSwgMTE5OTc0LCAwLCAwLCAxMjA2MDQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDc0MjcsIDAsIDQ1ODgsIDAsIDAsIDc0NDg0LCAwLCAyNDMzLCAwLCAxMTk2MjIsIDMzNTIsIDc0MzYzLCAwLCAKLSAgICAwLCA3OTMsIDc0NDA0LCAwLCAzMDUsIDU2NywgMCwgODQyLCAwLCA4MjA4LCAwLCA0MTY5NSwgMTY0NywgMTE4ODc3LCAwLCAKLSAgICA3ODM3LCA5MTc2MjUsIDgxOCwgNTMzNywgOTE3NjIyLCA5MTc2MjEsIDQxMzc2LCAxMTk5NzgsIDkxNzYxOCwgMTIwNTk0LCAKLSAgICA3NDA4NiwgOTE3NjE1LCA5MTc2MTQsIDkxNzYxMywgMTA5NzMsIDY2MzU5LCAxMzcyLCA5MTc2MDksIDkxNzYwOCwgNDk2OSwgCi0gICAgMTI1NCwgOTE3NjA1LCA5MTc2MDQsIDkxNzYwMywgOTE3NjAyLCA2NTIyOCwgMCwgMCwgMCwgMjg0MCwgMCwgMTE5OTgyLCAwLCAKLSAgICAwLCAzMjQ1LCA5MDY4LCAxMTkwNjksIDY0NzI1LCAwLCAwLCAxMjk5MSwgMCwgMjY1MSwgMCwgMCwgOTE3NjExLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0MzMyMiwgMCwgMCwgMCwgNjQzNzIsIDAsIDMyMjYsIDY1NSwgNzUyLCA3NDU3LCA3NDU2LCAKKyAgICAwLCAwLCAwLCAxMTkxMjMsIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCAwLCAwLCAyNDE2LCAzMzEwLCA0MjcwMywgMCwgMzc5LCAKKyAgICAwLCAwLCAwLCAwLCAzMjIzLCA2NTQ5MiwgMTI4NCwgMTk0NzcxLCA0NTQ5LCAwLCAwLCAwLCAwLCAxMDgwNywgOTU1OCwgCisgICAgMTk0NjEzLCAwLCA4NTE1LCA4Njg4LCAxMjg2NiwgMCwgMzI5NCwgMCwgODUyOSwgMCwgNDMzODUsIDc1NjQsIDAsIDQzMzI5LCAKKyAgICAwLCAwLCA3Mzc1NywgNjY0NTYsIDQyMzU5LCAwLCAyMDMxLCAwLCA3MjAyLCAwLCAxMjY3NiwgNDI3MjksIDAsIDMyMTUsIDAsIAorICAgIDc3MTAsIDE2MTAsIDczODAxLCAwLCAwLCA2NTY4MiwgMCwgMTIwNTM3LCA2NTkyNCwgOTk3NCwgMjI4LCA2NjM1NCwgMTUwMSwgCisgICAgMCwgNjQzOTUsIDUxNzksIDcyMDAsIDYyMjUsIDAsIDY1Nzk0LCAxNzI1LCA2NTUzMywgODE5NiwgNzQ3NiwgNzQzOTksIDAsIAorICAgIDAsIDAsIDg1MDIsIDU3NjIsIDE5NjcsIDc0ODMsIDAsIDAsIDgxMDQsIDAsIDc0NzQsIDAsIDAsIDAsIDEwNDE0LCAxMzAwMSwgCisgICAgODE0MSwgMCwgNDI1MzcsIDE1NTcsIDQzNTk0LCAwLCA2MzMwLCA2ODA1LCA4NjMxLCAyNTQ1LCAxMjA2NzIsIDAsIDAsIAorICAgIDc0MTkwLCAwLCAwLCAwLCA0Mjc2MiwgMCwgMTI3MDE3LCAxNjUwLCAyNjIsIDE2MzcsIDAsIDc5MDEsIDMyMzgsIDAsIAorICAgIDQxODYxLCAwLCAwLCA2NTE1OCwgMTA4NjAsIDAsIDQzNjU4LCA3NTI3LCAwLCA0MzMxOSwgNjQxOSwgMCwgNDUsIDAsIDAsIAorICAgIDAsIDAsIDExOTgxMCwgNzE5NCwgNTI5MSwgMCwgNDM2NjYsIDEzMTI5LCAwLCA5MDg0LCAwLCA4NzM3LCAwLCAxMjg4MSwgMCwgCisgICAgMTI5MDYsIDk2MzksIDc5MTIsIDI2MjAsIDAsIDAsIDAsIDAsIDE3OSwgNjU4OTYsIDAsIDY0NzU2LCAyODUzLCAwLCAKKyAgICAxMTg4MTMsIDAsIDExODk5NiwgMTE5MDA5LCAyODUwLCA4MDg0LCAwLCA3Mzg1MCwgMjgwMSwgMTE5ODM3LCA0MjA2OSwgCisgICAgMTE5ODM5LCA3NDc1NCwgMTE5ODQxLCA0MjA3MiwgMTE5ODQzLCAxMTk4NDIsIDEwMzk4LCAwLCAwLCAwLCAwLCA4MjQ1LCAKKyAgICA2ODQwMSwgMzE1OCwgMTE5ODUzLCA0Mzg5LCA0MzY1NiwgOTIzLCAxMTk4NTcsIDExOTg1NiwgMjkyLCAxMzAwMiwgCisgICAgMTE5ODQ1LCAxMTk4NDQsIDMyMjEsIDE3NjMsIDExOTg0OSwgNDYxMiwgMTE5ODUxLCAxMTk4NTAsIDcyNTMsIDEyNzExMCwgCisgICAgNjgzOTEsIDAsIDEwNzgyLCAzNjM3LCAxMjk5NiwgNDM1NDIsIDAsIDY0NTc4LCAwLCAzMjI4LCA3Mzg2OSwgODc4MywgMCwgCisgICAgMTE5NjE0LCAyNzMxLCAwLCAwLCA3ODU4NSwgNDEwMiwgNzY5NiwgNzM4NzgsIDAsIDAsIDc4NTg2LCA0MzMxNiwgNDE3NywgCisgICAgMTEyODMsIDkwODksIDAsIDczOTk2LCAwLCA2NDUwMCwgNDM2NzQsIDAsIDAsIDE4NTYsIDAsIDAsIDYzNzksIDAsIDAsIDAsIAorICAgIDMyMDgsIDEyOTc1LCAwLCAwLCAwLCAwLCA3NDA3MiwgNTUyNjksIDAsIDAsIDAsIDIwMzMsIDc4NTc3LCA3ODU3NiwgCisgICAgMTk1MDI2LCA1NTI1NCwgNzc0MCwgMCwgMCwgMCwgNzM5NjQsIDAsIDAsIDY3NjEyLCA2NTY3NCwgMCwgMCwgNDE2ODksIDAsIAorICAgIDc0MDA2LCA2NDkwOSwgNjY0NiwgMTE3OTAsIDc0MDE5LCAwLCAwLCAwLCA4NTYxLCA0NTczLCAwLCA1MzI2LCAwLCAKKyAgICAxMjA2MDUsIDcyMzAsIDgyNTcsIDAsIDg3NzgsIDQxNjg4LCAwLCA2NTc3NiwgMjA3MSwgODMxNCwgNjQ1OSwgMCwgNzYyOCwgCisgICAgNjUwOTIsIDczOTAzLCA2NjcyMSwgMTEzNDIsIDAsIDAsIDAsIDAsIDEyNzAwMSwgMCwgMTE4MTAsIDEzMTY0LCAxMDcyMywgCisgICAgOTY3LCAwLCAwLCAxMTk0NiwgMCwgMzI1NywgMCwgMTIzMDcsIDE4NDUsIDAsIDQzNTI2LCAwLCAwLCAxODg2LCA0MjM0MiwgCisgICAgMTAwODksIDg3MCwgNzY0OCwgMzQ5OSwgODYwOSwgNzY1MiwgODc2LCA4NzEsIDg3NywgMCwgODc4LCA0MjAxNSwgODc5LCAKKyAgICA0MzY5MiwgNDU2MywgMCwgMCwgNzU5MSwgNjU4ODcsIDg2NywgOTUyMCwgODcyLCAwLCA4NjgsIDg3MywgNzY0MiwgMCwgCisgICAgODY5LCA4NzQsIDc2NDQsIDAsIDg3NSwgNzkwLCAwLCAwLCAwLCAwLCA2NjE4MiwgMCwgNTQyOSwgMCwgNjYxODAsIDAsIAorICAgIDY2MTgxLCA2ODQ1MiwgMCwgMCwgNDIwNjcsIDAsIDU0MzMsIDEwNjU3LCA3OTExLCAxOTQ2MjIsIDE1NDcsIDY2MTc2LCAKKyAgICA0MjAxMiwgMTIwNTc2LCA1NDI1LCA0OTc3LCA5OTk5LCA1MzE3LCA1NDIzLCA0NjExLCAwLCA2NzYzNywgMCwgOTY3OSwgCisgICAgNzQxMjIsIDAsIDAsIDAsIDAsIDQ0MTgsIDY2MTg0LCA0NjI4LCA0MjQ1LCAxMTk2NDgsIDAsIDAsIDE4NTEsIDAsIDAsIAorICAgIDExOTA4LCAwLCA5MzYwLCAxMTg4OTcsIDAsIDQyNzc2LCA2NjE4NywgMTI4MzcsIDg4MjksIDc3MTEsIDAsIDAsIDExOTk3MywgCisgICAgNDMzMTgsIDAsIDg4MDksIDExOTk3NCwgMCwgMCwgMTIwNjA0LCAwLCAwLCAwLCAwLCAwLCAwLCA3NDI3LCAwLCA0NTg4LCAKKyAgICA0MzY4MCwgMCwgNzQ0ODQsIDAsIDI0MzMsIDAsIDExOTYyMiwgMzM1MiwgNzQzNjMsIDAsIDAsIDc5MywgNzQ0MDQsIDAsIAorICAgIDMwNSwgNTY3LCA2NzY2MiwgODQyLCAwLCA4MjA4LCAwLCA0MTY5NSwgMTY0NywgMTE4ODc3LCAwLCA3ODM3LCA5MTc2MjUsIAorICAgIDgxOCwgNTMzNywgOTE3NjIyLCA5MTc2MjEsIDQxMzc2LCAxMTk5NzgsIDkxNzYxOCwgMTIwNTk0LCA3NDA4NiwgOTE3NjE1LCAKKyAgICA5MTc2MTQsIDkxNzYxMywgMTA5NzMsIDY2MzU5LCAxMzcyLCA5MTc2MDksIDkxNzYwOCwgNDk2OSwgMTI1NCwgOTE3NjA1LCAKKyAgICA5MTc2MDQsIDkxNzYwMywgOTE3NjAyLCA2NTIyOCwgNzgyMjEsIDAsIDAsIDI4NDAsIDAsIDExOTk4MiwgMCwgMCwgMzI0NSwgCisgICAgOTA2OCwgNjgxOTQsIDY0NzI1LCAwLCAwLCAxMjk5MSwgMCwgMjY1MSwgMCwgMCwgOTE3NjExLCAxMjcwMjYsIDAsIDAsIDAsIAorICAgIDQzNjQ4LCAxMjA4MTIsIDAsIDQzMzIyLCAwLCAwLCAwLCA2NDM3MiwgMCwgMzIyNiwgNjU1LCA3NTIsIDc0NTcsIDc0NTYsIAogICAgIDc0NTIsIDMyODUsIDAsIDAsIDExOTk4OCwgNjU2MTAsIDAsIDAsIDAsIDY3MSwgMjUwLCA3NDM0LCA2MTgsIDY2OCwgNjEwLCAKICAgICA0MjgwMCwgNzQzMSwgMTE1MiwgNDI4MDEsIDY0MCwgMTIwNjY2LCA3NDQ4LCA3NDM5LCA2MjgsIDM5MDUsIDczODEwLCAwLCAKLSAgICAwLCA2NDc0OSwgNjc4NTAsIDAsIDAsIDAsIDAsIDE5NDg3MywgMCwgMCwgNjU5NDUsIDAsIDAsIDExOTU5MCwgMCwgMCwgMCwgCi0gICAgOTg3LCA2OTI3LCAxMTU3MiwgNDIyNjEsIDExNDY0LCAzMzY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTMzNCwgCi0gICAgNDMzMjYsIDEyNjA5LCAxMTUxOSwgMCwgNTUzMCwgNTIxMCwgMCwgNDYyNywgMCwgNTIwOCwgMCwgMCwgMTAzMzIsIDUyMTgsIAotICAgIDc5NzYsIDkxNTYsIDAsIDMyNDQsIDU1MjksIDAsIDczODk0LCAwLCA1NDMyLCA2NDk2NSwgNTUyNywgNzQwMzMsIDEwNTE2LCAKLSAgICA3NzkwLCA1NTI4LCAwLCA0MjE0MCwgMTIwMjgxLCAwLCAwLCA0MzU0NSwgMTIwMjgyLCAwLCA0MDAwLCA3NDI5LCA3NDI4LCAKLSAgICA2NjUsIDc0MjQsIDMyMDYsIDEyMDI3OSwgNzg4NCwgMCwgMCwgMCwgMCwgMjExLCAyNTA5LCAwLCAxMjA1NzMsIDAsIDMyMjAsIAotICAgIDAsIDAsIDEwNjkwLCA4OTUxLCA1MjE0LCA0MjQ3NCwgODExOCwgMCwgNzA0OCwgNDU5MCwgMCwgNTg1MiwgMCwgMCwgMCwgCi0gICAgMTcwOCwgMCwgMCwgMjYyMywgMCwgMCwgMCwgMCwgNDY5OCwgNjY1MDksIDEwNjYsIDAsIDQ3MDEsIDAsIDEyMDI4NSwgCi0gICAgNzQyMjUsIDExOTExNCwgODI2NywgMCwgMCwgMCwgNzUxNiwgMCwgMjYyNSwgMCwgODAzNCwgNzQzMDksIDAsIDM2MzEsIAotICAgIDEwOTU1LCA3ODUwLCAxMjAyOTMsIDg0MTYsIDAsIDAsIDAsIDAsIDEyNjYwLCAwLCAwLCAwLCA3NDg1MCwgNDEwNjksIDAsIAotICAgIDAsIDEyMDk5LCA0MzEwLCAxMDAzMiwgNjI1MiwgNzEzLCA3OTkwLCAwLCAzOTkwLCAwLCAwLCA2NjM2OCwgNTAxNywgCi0gICAgNjQ5NTYsIDcwNzEsIDAsIDAsIDEwMzAsIDExODgwMCwgMCwgOTUxMywgNDEwNTksIDkzNTcsIDAsIDE3NzMsIDAsIAotICAgIDEyMDM1MCwgMCwgMCwgNzc0NSwgOTg0NCwgMCwgNjQ2NTAsIDk0LCAxODgwLCA3NDc2NiwgMCwgODkwOCwgMCwgMCwgCi0gICAgNjU5MTMsIDAsIDEwNzUyLCAxMzAwMywgMCwgMCwgNDEzMDcsIDg3MzIsIDEyMDMzOCwgMCwgMTc1NywgNjk2NCwgNDY5NiwgCi0gICAgMCwgMCwgMTIwODA2LCAxMDAyOSwgMzY0MSwgNTQxOSwgMCwgMCwgMCwgMCwgMTIwMzQ0LCAwLCAwLCA4NjEwLCA2NTIzMCwgCi0gICAgNzU5MiwgODU2LCA3NDI5OSwgOTM2LCAxMzI4OSwgMCwgNDMxNzEsIDE0NTksIDAsIDY1MjQzLCAwLCAxOTk1MywgMCwgCi0gICAgMTUwNCwgMCwgMCwgMCwgNzQyMDYsIDc1MjksIDAsIDAsIDAsIDEyMDc4MiwgNDExMywgMCwgMjM3MiwgMzM2LCAwLCA3NTA5LCAKLSAgICAxMjE1MiwgMCwgNjgyLCA2NjQ1OCwgNDE1MDUsIDAsIDY0NzQzLCAxMDU5MywgMTcwMywgMCwgMCwgODAzMywgMCwgMCwgCi0gICAgOTgxMCwgMCwgMCwgMTI5NzAsIDAsIDQyMzUxLCAxMDEwOSwgMCwgMCwgMCwgMCwgMTE5MjQ3LCAwLCAwLCA3NDI5MSwgCi0gICAgMTk2NSwgNzA2OSwgNDMzMTIsIDAsIDczODg3LCAwLCAwLCA2NDM3MCwgNjMxNCwgNDE3MTQsIDg1MDEsIDAsIDAsIDc0MjM5LCAKLSAgICA0MTMxNywgMCwgNTQxNywgMCwgMCwgMCwgOTM1MywgMCwgNDEzMTUsIDkxNzYxNiwgMCwgMCwgNjU2OSwgMCwgMCwgMCwgCi0gICAgMTE5MjM2LCA2MzQsIDAsIDAsIDAsIDkxNzYxMCwgNDE2NSwgODc0NiwgMCwgOTY1NCwgMTI4NTYsIDY5MjQsIDAsIDcwNjYsIAotICAgIDAsIDAsIDAsIDQxMDM3LCAwLCA3Nzg2LCA5MTc2MDcsIDQxMDM5LCAwLCAwLCA2ODAsIDYyNzQsIDAsIDExODEsIDcwNTYsIAotICAgIDMxNzQsIDAsIDAsIDAsIDY1NjY1LCAwLCAwLCA2OTIwLCAwLCAwLCAwLCAwLCAwLCA2NDY0NCwgMTI2OTgxLCAwLCAwLCAKLSAgICA0MTAyOCwgMCwgNjIzMSwgMjYxMywgNjUzMDIsIDQwOTg5LCAwLCAwLCAwLCA0Mjc2MCwgMCwgMCwgMCwgNDA5ODcsIDQ2NjcsIAotICAgIDAsIDAsIDg4MjgsIDAsIDAsIDEyNDYsIDQ3NDYsIDAsIDAsIDExMDIxLCA0NzQ5LCAwLCAwLCA5MjEsIDQ3NDQsIDAsIAotICAgIDEyNzAyLCAyNDIsIDAsIDE1NjYsIDgyMTcsIDAsIDY0NjUzLCAwLCAwLCA3NDAzNiwgNzQ1MDUsIDQzMjc0LCA1MzEzLCAKLSAgICA5NTEsIDAsIDAsIDAsIDc2MDQsIDAsIDQwMDksIDAsIDAsIDEyMDU2MiwgMCwgMCwgNjQ4NjAsIDExOTEzOCwgMTE5OTAyLCAKLSAgICAwLCAwLCA0MDQ4LCAwLCAwLCAxMjA1OTYsIDE2NDYsIDAsIDY0NTM0LCA3Mzk5NSwgMCwgMCwgMTE5ODkwLCAyNTc5LCAKLSAgICAxMTk5MDUsIDMxNzcsIDExMzU3LCA5MDk5LCA0MTA3LCAzNDQxLCAxMTk4OTQsIDI5NzUsIDc0NDQyLCA5ODIyLCAwLCAwLCAKLSAgICAxMDA4NCwgNzM5NDMsIDAsIDAsIDkxNzU2MiwgMCwgMzM5OSwgOTg1MSwgMCwgMTE5MDksIDkwNTksIDAsIDc2ODcsIDAsIAotICAgIDg4NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NzcsIDkxNTEsIDExMzcsIDAsIDc0OSwgNDIzNjYsIDAsIDUzODUsIDAsIDAsIAotICAgIDAsIDAsIDU5ODksIDAsIDAsIDAsIDAsIDQxNjg1LCAwLCAwLCA5NzY5LCA0MTY4NCwgMCwgNTE5LCAwLCAxMTc0MCwgNTc2NiwgCi0gICAgMCwgMCwgMjYwMCwgODg0OCwgMTIwMTM4LCA0MTI5NywgMCwgMzY2NiwgNzQ0NzMsIDQxMzAwLCA3NDQ2OCwgNjUxNjAsIDAsIAotICAgIDc0NTQyLCAwLCA3NDQ3OSwgMCwgNjU1OCwgMCwgMCwgMCwgMTIwNzUwLCAyNTIsIDAsIDQxMzAyLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTcyOSwgODcxOSwgOTA2MCwgMCwgMTIwMTM5LCAxMDc2MSwgMCwgMCwgMCwgMTE4NzkyLCAxMTczNCwgMCwgMTE3MzAsIDAsIAotICAgIDk1OTMsIDExOTE4OCwgMjQwMywgNjQ4MDgsIDAsIDAsIDExNzI4LCA2NTg5NCwgMCwgMCwgNzc2NCwgMCwgMCwgMTIwODI1LCAKLSAgICAwLCAwLCA0MjgyLCA4Mjk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NDU2LCAwLCA3NDc4MywgNjU2NzAsIDAsIDAsIAotICAgIDAsIDc3NzQsIDEwNjA3LCA5NzkyLCAwLCAwLCAwLCAwLCAxMjA3NjQsIDAsIDEwMDE5LCA3NDc2MiwgMCwgMzQ1OCwgNDM2NSwgCi0gICAgMCwgMCwgMzY0NywgMCwgMjYwMiwgMCwgMCwgMTk0NzA3LCA0MTEzNSwgMCwgMCwgMCwgNjQ2MzEsIDE3MiwgNDk3MSwgCi0gICAgNDEyMTksIDQxMTM3LCAxODg5LCA3MjM4LCA2NTQ1LCAwLCAwLCA3NTk3LCAxMDUyOCwgMCwgMCwgMzczMiwgNzM5MTAsIDAsIAotICAgIDUzNDQsIDAsIDAsIDAsIDkwNjIsIDExOTI1MiwgMCwgMCwgMCwgNjQ0NzksIDkyMzIsIDAsIDAsIDAsIDAsIDEwOTAwLCAKLSAgICA0MTUzMSwgMTI2MywgMzcyMCwgMTIwNDgsIDAsIDY0MjkyLCA0MTUyNCwgNzIyNywgMTE5NjM1LCA2MDk5LCA0MTUzNCwgMCwgCi0gICAgMCwgMCwgMjk5LCAwLCA4NTI1LCAwLCAzNTI0LCAwLCA4ODMxLCAwLCAwLCAzMDc1LCAwLCAwLCAwLCA2NjM2MiwgMCwgCi0gICAgNzQ3NTgsIDAsIDAsIDU4NDUsIDAsIDAsIDAsIDI1ODEsIDgyMDAsIDY1MTE0LCA3NDM5MywgMCwgNDMyODMsIDU1NTEsIDAsIAotICAgIDEyNzA4NSwgMCwgMCwgMTE4ODU1LCAwLCAwLCA4NjgwLCA3MjA0LCAwLCAyNTg4LCAyOTE0LCA3MDExLCAwLCAwLCAyNDcxLCAKLSAgICAwLCAyODgzLCAyNzQ5LCAxMTk1NjMsIDczNzc0LCAxMDkxMywgMCwgMCwgODY2NiwgNjc1LCA0MjQ5MywgMCwgMCwgMCwgCi0gICAgNjIxOSwgMCwgMCwgNDEyMzIsIDEwOTI4LCAwLCA0MTE1MywgNDEyMjksIDExODk2NywgMCwgMzczOCwgMCwgMCwgMTI3MTEsIAotICAgIDMxODEsIDY2MjEyLCA3NDI4OSwgMCwgNDI4NTcsIDgyNjIsIDAsIDAsIDAsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgNzIzNCwgCi0gICAgNzQwNDcsIDAsIDAsIDY0Njc0LCAwLCAwLCA3Mzg0NiwgMCwgMTI3MjIsIDAsIDkyMiwgNzQ0MjYsIDc0NTA3LCAwLCAwLCAKLSAgICAzMjE4LCAxMjA0NzEsIDc0MjkwLCAxMjA0NjksIDY0NTYyLCAxMjA0NzUsIDg1NjksIDExNDA0LCAxMTkzMiwgNzM3MjgsIAotICAgIDMyMTQsIDEyMDQ2MSwgMTIwNDY4LCAxMjEyOCwgMzIwNywgNjU0ODYsIDAsIDE5MDEsIDAsIDAsIDEyMDQ2MCwgNzQyNSwgCi0gICAgMzIwNSwgMCwgMCwgMCwgMCwgMCwgMCwgNjU0NTksIDI2MDYsIDAsIDczODk3LCAwLCAxMTQ5NiwgMTE3MywgMCwgNDEyNzIsIAotICAgIDAsIDAsIDAsIDAsIDEyMDczNywgMCwgMCwgMCwgMzc4LCAyNjEwLCAwLCA2NTA3OSwgMCwgNjU2OTUsIDAsIDM3LCA3MDY4LCAKLSAgICAwLCAxMjA0ODAsIDEyMDQ3OSwgMzIwOSwgMTIwNDc3LCAwLCAxMDYzOCwgOTc2OCwgMTIwNDgxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA2NTUxMCwgMCwgMCwgNTIzMywgMCwgNjQ3OTIsIDAsIDAsIDAsIDAsIDcwNjAsIDk4NDcsIDAsIDE2ODUsIDU5NSwgMCwgCi0gICAgNzM5NzEsIDEyOTIsIDg5NDAsIDAsIDExMDg4LCAwLCAxMDAwNCwgMTI2OTk3LCAwLCA2NTQxLCAwLCAwLCAwLCAzMjQzLCAKLSAgICA5MDE0LCA1NjA2LCAwLCA1MzgsIDY0NjIwLCA1NjAyLCA4NDY3LCA3NDM5MSwgNjU0NywgMCwgODIwMywgMCwgMCwgODQ1OCwgCi0gICAgNjUyMTEsIDg0OTUsIDAsIDAsIDkxNzU1MiwgNzc5LCAwLCA2NDM2NywgMjQ2NSwgMCwgODE5MywgMCwgOTczMCwgOTI4MCwgCi0gICAgMCwgNzA2NSwgNzQxNTUsIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIDEyMDcxNSwgODk4MiwgMCwgMCwgMCwgNzgyLCAwLCAKLSAgICAxMDg4MywgMCwgOTE3ODc2LCA3MzIsIDM3MzcsIDAsIDE1NDgsIDAsIDAsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAwLCAKLSAgICA0Mzc2LCAwLCA0MTE0MiwgMzc0NSwgMCwgMCwgNDI4ODgsIDY1NzEyLCAwLCAzODY5LCAxMTkzNywgNTcyNSwgMCwgMTc4MywgCi0gICAgMCwgNTcyOCwgMCwgMCwgMCwgMTE5MTgsIDY2NTY3LCA1NzI0LCAwLCA1NzI3LCAwLCAwLCAwLCA3NjQsIDAsIDAsIDQzNTMxLCAKLSAgICAwLCA5MDMzLCAwLCA0MjUzMiwgNjIyMywgMTEwNDIsIDAsIDExNDIzLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTU5LCA2NDU1NywgCi0gICAgMCwgMCwgMTIwNjQ4LCA0MzAxOSwgMCwgMTAyMzgsIDAsIDAsIDAsIDEyMDY3NSwgMCwgMTQ3OCwgOTc4MywgMCwgMjYwNywgCisgICAgMCwgNjQ3NDksIDY3ODUwLCAyMTA3LCAwLCAwLCA0NjA1LCAxOTQ4NzMsIDAsIDQzMzcyLCA2NTk0NSwgMCwgMCwgMTE5NTkwLCAKKyAgICAwLCAwLCAwLCA5ODcsIDY5MjcsIDExNTcyLCA0MjI2MSwgMTE0NjQsIDMzNjUsIDk5NzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDExMzM0LCA0MzMyNiwgMTI2MDksIDExNTE5LCAxMTUwMywgNTUzMCwgNTIxMCwgMCwgNDYyNywgMCwgNTIwOCwgMCwgMCwgCisgICAgMTAzMzIsIDUyMTgsIDc5NzYsIDkxNTYsIDAsIDMyNDQsIDU1MjksIDAsIDczODk0LCAwLCA1NDMyLCA2NDk2NSwgNTUyNywgCisgICAgNzQwMzMsIDEwNTE2LCA3NzkwLCA1NTI4LCAwLCA0MjE0MCwgMTIwMjgxLCAwLCAwLCA0MzU0NSwgOTg4NywgMCwgNDAwMCwgCisgICAgNzQyOSwgNzQyOCwgNjY1LCA3NDI0LCAzMjA2LCAxMjAyNzgsIDc4ODQsIDAsIDAsIDAsIDAsIDIxMSwgMjUwOSwgMCwgCisgICAgMTIwNTczLCA2ODY3MiwgMzIyMCwgNDIyMzUsIDAsIDEwNjkwLCA4OTUxLCA1MjE0LCA0MjQ3NCwgODExOCwgMCwgNzA0OCwgCisgICAgNDU5MCwgMTI3MjU4LCA1ODUyLCAwLCAwLCAxMjcyNTksIDE3MDgsIDAsIDAsIDI2MjMsIDExOTQzLCAwLCA2OTIyNiwgMCwgCisgICAgNDY5OCwgNjY1MDksIDEwNjYsIDExOTkyMSwgNDcwMSwgMCwgMTIwMjg1LCA3NDIyNSwgMTE5MTE0LCA4MjY3LCAwLCAwLCAwLCAKKyAgICA3NTE2LCAwLCAyNjI1LCAwLCA4MDM0LCA3NDMwOSwgMCwgMzYzMSwgMTA5NTUsIDc4NTAsIDEyMDI5MywgODQxNiwgMCwgMCwgCisgICAgMCwgNDMzODQsIDEyNjYwLCAwLCAwLCAwLCA3NDg1MCwgNDEwNjksIDAsIDAsIDEyMDk5LCA0MzEwLCAxMDAzMiwgNjI1MiwgCisgICAgNzEzLCA3OTkwLCAwLCAzOTkwLCAwLCAwLCA2NjM2OCwgNTAxNywgNjQ5NTYsIDcwNzEsIDAsIDExOTE0NCwgMTAzMCwgCisgICAgMTE4ODAwLCAwLCA5NTEzLCA0MTA1OSwgOTM1NywgMCwgMTc3MywgMCwgMTIwMzUwLCAwLCA2MzM5LCA3NzQ1LCA5ODQ0LCAwLCAKKyAgICA2NDY1MCwgOTQsIDE4ODAsIDc0NzY2LCAwLCA4OTA4LCAwLCAwLCA2NTkxMywgNzg0NzAsIDEwNzUyLCAxMzAwMywgMCwgMCwgCisgICAgNDEzMDcsIDg3MzIsIDEyMDMzOCwgMCwgMTc1NywgNjk2NCwgNDY5NiwgMCwgMCwgNjQ3ODUsIDczOTQsIDM2NDEsIDU0MTksIAorICAgIDAsIDAsIDAsIDAsIDEyMDM0NCwgNDM5ODgsIDAsIDg2MTAsIDQzMDYyLCA3NTkyLCA4NTYsIDc0Mjk5LCA5MzYsIDEzMjg5LCAKKyAgICAxMjc1MjEsIDQzMTcxLCAxNDU5LCAwLCA2NTI0MywgNzg2MzgsIDE5OTUzLCAwLCAxNTA0LCAwLCAwLCAxMjkxMywgNzQyMDYsIAorICAgIDc1MjksIDAsIDAsIDAsIDEyMDc4MiwgNDExMywgMCwgMjM3MiwgMzM2LCAwLCA3NTA5LCAxMjE1MiwgMCwgNjgyLCA2NjQ1OCwgCisgICAgNDE1MDUsIDAsIDY0NzQzLCAxMDU5MywgMTcwMywgMCwgMCwgODAzMywgMCwgMCwgOTgxMCwgMTI3MjY5LCAwLCAxMjk3MCwgCisgICAgMCwgNDIzNTEsIDEwMTA5LCAwLCAwLCAxOTQ2OTMsIDAsIDExOTI0NywgMCwgMCwgNzQyOTEsIDE5NjUsIDcwNjksIDQzMzEyLCAKKyAgICAwLCA3Mzg4NywgMCwgMjA4NywgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAwLCAwLCA3NDIzOSwgNDEzMTcsIDAsIDIwOTEsIAorICAgIDAsIDIwOTAsIDAsIDkzNTMsIDc3ODg3LCAyMDc3LCA3Nzg4NiwgMCwgMTA0OTgsIDIwODMsIDc3ODg4LCAwLCAwLCAKKyAgICAxMTkyMzYsIDYzNCwgMCwgMCwgMCwgNjk3NzksIDQxNjUsIDg3NDYsIDAsIDk2NTQsIDEyODU2LCA2OTI0LCAwLCA3MDY2LCAKKyAgICAwLCAwLCAwLCA0MTAzNywgNDI2OTIsIDc3ODYsIDEyOTU5LCA0MTAzOSwgMCwgMCwgNjgwLCA2Mjc0LCAwLCAxMTgxLCAKKyAgICA3MDU2LCAzMTc0LCAwLCAwLCAwLCA2NTY2NSwgMCwgMCwgNjkyMCwgMCwgMCwgMCwgMTE4OTY1LCAwLCA2NDY0NCwgCisgICAgMTI2OTgxLCAwLCAwLCA0MTAyOCwgMCwgNjIzMSwgMjYxMywgNjUzMDIsIDQwOTg5LCAwLCAxOTQ2OTYsIDAsIDQyNzYwLCAwLCAKKyAgICAwLCAwLCA0MDk4NywgNDY2NywgMCwgMCwgODgyOCwgMCwgMCwgMTI0NiwgNDc0NiwgMCwgMCwgMTEwMjEsIDQ3NDksIDAsIDAsIAorICAgIDkyMSwgNDc0NCwgMCwgMTI3MDIsIDI0MiwgMCwgMTU2NiwgODIxNywgMCwgNjQ2NTMsIDc4Mzg2LCAwLCA3NDAzNiwgCisgICAgNzQ1MDUsIDQzMjc0LCA1MzEzLCA5NTEsIDAsIDAsIDAsIDc2MDQsIDAsIDQwMDksIDAsIDAsIDEyMDU2MiwgMCwgMCwgCisgICAgNjQ4NjAsIDExOTEzOCwgMTE5ODg3LCAwLCAxOTQ3MDIsIDQwNDgsIDAsIDAsIDEyMDU5NiwgMTY0NiwgNzc4OTAsIDY0NTM0LCAKKyAgICA3Mzk5NSwgMCwgMCwgMTE5ODkwLCAyNTc5LCAxMTk5MDUsIDMxNzcsIDExMzU3LCA5MDk5LCA0MTA3LCAzNDQxLCAxMTk4OTQsIAorICAgIDI5NzUsIDc0NDQyLCA5ODIyLCAwLCA1NTIyMCwgMTAwODQsIDczOTQzLCAxMTg4NDAsIDAsIDkxNzU2MiwgMCwgMzM5OSwgCisgICAgOTg1MSwgMCwgMTE5MDksIDkwNTksIDAsIDc2ODcsIDAsIDY3ODksIDAsIDAsIDAsIDAsIDAsIDAsIDE3NzcsIDkxNTEsIAorICAgIDExMzcsIDY5NzY3LCA3NDksIDQyMzY2LCAwLCA1Mzg1LCAwLCAwLCAwLCAwLCA1OTg5LCAwLCAwLCAwLCAwLCA0MTY4NSwgCisgICAgNjkyMjMsIDAsIDk3NjksIDQxNjg0LCAwLCA1MTksIDAsIDExNzQwLCA1NzY2LCAwLCAwLCAyNjAwLCA4ODQ4LCAxMjAxMzgsIAorICAgIDQxMjk3LCAwLCAzNjY2LCA3NDQ3MywgNDEzMDAsIDc0NDY4LCA2NTE2MCwgMCwgNzQ1NDIsIDY5NzcxLCA3NDQ3OSwgMCwgCisgICAgNjU1OCwgMCwgMCwgNjk3NjUsIDEyMDc1MCwgMjUyLCAwLCA0MTMwMiwgMCwgMCwgMCwgNjk3NjMsIDAsIDExNzI5LCA4NzE5LCAKKyAgICA5MDYwLCAwLCAxMjAxMzksIDEwNzYxLCAwLCAwLCAwLCAxMTg3OTIsIDExNzM0LCAwLCAxMTczMCwgMCwgOTU5MywgNTc1NywgCisgICAgMjQwMywgNjQ4MDgsIDU1Mjc1LCAwLCAxMTcyOCwgNjU4OTQsIDAsIDAsIDc3NjQsIDAsIDExMDk0LCAxMjA4MjUsIDAsIDAsIAorICAgIDQyODIsIDgyOTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzUwOSwgNjM4NTQsIDg0NTYsIDAsIDc0NzgzLCA2NTY3MCwgMCwgCisgICAgNzgyNTAsIDAsIDc3NzQsIDEwNjA3LCA5NzkyLCAwLCAwLCAwLCAwLCAxMjA3NjQsIDAsIDEwMDE5LCA3NDc2MiwgMCwgCisgICAgMzQ1OCwgNDM2NSwgMCwgMCwgMzY0NywgMCwgMjYwMiwgMCwgMCwgMTk0NzA3LCA0MTEzNSwgMCwgMCwgMCwgNjQ2MzEsIAorICAgIDE3MiwgNDk3MSwgNDEyMTksIDQxMTM3LCAxODg5LCA3MjM4LCA2NTQ1LCAwLCAwLCA3NTk3LCAxMDUyOCwgMCwgMCwgMzczMiwgCisgICAgNzM5MTAsIDE5NDU4OCwgNTM0NCwgMCwgNDMzNjYsIDQzMzYzLCA5MDYyLCAxMTkyNTIsIDAsIDAsIDAsIDY0NDc5LCA5MjMyLCAKKyAgICAwLCAwLCAwLCAxOTQ3MTIsIDEwOTAwLCA0MTUzMSwgMTI2MywgMzcyMCwgMTIwNDgsIDAsIDY0MjkyLCA0MTUyNCwgNzIyNywgCisgICAgMTE5NjM1LCA2MDk5LCA0MTUzNCwgMCwgMCwgMCwgMjk5LCAwLCA4NTI1LCAwLCAzNTI0LCA5MTc1NjUsIDg4MzEsIDAsIDAsIAorICAgIDMwNzUsIDY3ODY3LCAwLCAwLCA2NjM2MiwgMCwgNzQ3NTgsIDAsIDAsIDU4NDUsIDAsIDAsIDAsIDI1ODEsIDgyMDAsIAorICAgIDY1MTE0LCA2ODQ2MCwgMCwgNDMyODMsIDU1NTEsIDAsIDEyMDczNSwgMCwgNjM0MCwgMTE4ODU1LCAwLCA3ODEzNCwgODY4MCwgCisgICAgNzIwNCwgMCwgMjU4OCwgMjkxNCwgNzAxMSwgNTUyODEsIDAsIDI0NzEsIDAsIDI4ODMsIDI3NDksIDExOTU2MywgNzM3NzQsIAorICAgIDEwOTEzLCAwLCAwLCA4NjY2LCA2NzUsIDQyNDkzLCAwLCA0MzU3MSwgMCwgNjIxOSwgMCwgOTk4MCwgNDEyMzIsIDEwOTI4LCAKKyAgICAwLCA0MTE1MywgNDEyMjksIDExODk2NywgMCwgMzczOCwgMCwgMCwgMTI3MTEsIDMxODEsIDY2MjEyLCA3NDI4OSwgNjg0NzIsIAorICAgIDQyODU3LCA4MjYyLCAwLCAwLCAwLCAwLCA0MjM0NywgMTIwOTIsIDk2MTUsIDcyMzQsIDc0MDQ3LCAwLCAwLCA2NDY3NCwgMCwgCisgICAgMCwgNzM4NDYsIDAsIDEyNzIyLCAwLCA5MjIsIDQzOTgzLCA3NDUwNywgMCwgNzQ0NjEsIDMyMTgsIDEyMDQ3MSwgNzQyOTAsIAorICAgIDEyMDQ2OSwgNjQ1NjIsIDEyMDQ3NSwgODU2OSwgMTE0MDQsIDExOTMyLCA3MzcyOCwgMzIxNCwgMTIwNDYxLCAxMjA0NjgsIAorICAgIDEyMTI4LCAzMjA3LCA2NTQ4NiwgNzg3MjksIDE5MDEsIDc4NzI3LCAwLCAxMjA0NjAsIDc0MjUsIDMyMDUsIDAsIDc4NzM3LCAKKyAgICA3ODczNiwgNzg3MzUsIDQzMzgzLCA3ODczMywgNjU0NTksIDI2MDYsIDc4NzMwLCA3Mzg5NywgMCwgMTE0OTYsIDExNzMsIDAsIAorICAgIDQxMjcyLCAwLCAwLCAwLCAwLCAxMjA3MzcsIDAsIDAsIDAsIDM3OCwgMjYxMCwgMCwgNjUwNzksIDAsIDY1Njk1LCAwLCAzNywgCisgICAgNzA2OCwgMCwgMTIwNDgwLCAxMjA0NzksIDMyMDksIDEyMDQ3NywgMCwgMTA2MzgsIDk3NjgsIDEyMDQ4MSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNjU1MTAsIDAsIDAsIDUyMzMsIDAsIDY0NzkyLCAwLCAwLCAwLCAwLCA3MDYwLCA5ODQ3LCAxMjAxNDQsIAorICAgIDE2ODUsIDU5NSwgMCwgNzM5NzEsIDEyOTIsIDg5NDAsIDczODAsIDExMDg4LCAwLCAxMDAwNCwgMTI2OTk3LCAwLCA2NTQxLCAKKyAgICAwLCAwLCAwLCAzMjQzLCA5MDE0LCA1NjA2LCAwLCA1MzgsIDY0NjIwLCA1NjAyLCA4NDY3LCA3NDM5MSwgNjU0NywgMCwgCisgICAgODIwMywgNzg0ODgsIDAsIDg0NTgsIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgNzc5LCA3ODMxNCwgNjQzNjcsIAorICAgIDI0NjUsIDAsIDgxOTMsIDU1Mjc5LCA5NzMwLCA5MjgwLCAwLCA3MDY1LCA3NDE1NSwgNDM0NiwgMCwgNzM3OTgsIDUwNCwgMCwgCisgICAgMTIwNzE1LCA4OTgyLCAwLCAwLCAwLCA3ODIsIDAsIDEwODgzLCAwLCAxOTQ4NTIsIDczMiwgMzczNywgMTI3MjUzLCAxNTQ4LCAKKyAgICA2ODY1MCwgMCwgMTgzMiwgNTYwNCwgNTczNSwgNDExNDEsIDExOTAyMCwgNDM3NiwgMCwgMTE3ODcsIDM3NDUsIDAsIDAsIAorICAgIDQyODg4LCA2NTcxMiwgMCwgMzg2OSwgMTE5MzcsIDU3MjUsIDAsIDE3ODMsIDY4NjQ4LCA1NzI4LCAwLCAwLCAwLCAxMTkxOCwgCisgICAgNjY1NjcsIDU3MjQsIDAsIDU3MjcsIDAsIDAsIDAsIDc2NCwgMCwgMCwgNDM1MzEsIDAsIDkwMzMsIDAsIDQyNTMyLCA2MjIzLCAKKyAgICAxMTA0MiwgMTIwNzQ5LCAxMTQyMywgMCwgMCwgMCwgNDM0NjUsIDAsIDAsIDY1NTksIDY0NTU3LCAwLCAwLCAxMjA2NDgsIAorICAgIDQzMDE5LCA0MzQ3NywgMTAyMzgsIDAsIDAsIDQzMzc3LCAxMjA2NzUsIDAsIDE0NzgsIDk3ODMsIDExODI1LCAyNjA3LCAKICAgICA2NDc0MCwgMCwgNzczOSwgNzQ1NDMsIDAsIDAsIDAsIDYxMzIsIDAsIDYzNzY1LCAwLCAwLCA0MTE0NCwgMCwgMCwgNDM1MzcsIAotICAgIDAsIDEwMDkzLCA0MzY5LCA5MTc3OTEsIDAsIDAsIDg4MjAsIDM5NDcsIDAsIDAsIDExNTE1LCA1MjYsIDAsIDQxMjk1LCAKLSAgICAxOTQ2MDMsIDkxNzc4NSwgMCwgMCwgNzY4OCwgOTE3Nzg2LCA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgMCwgMTU0MywgCi0gICAgMzcxMywgNDEyMjEsIDEyNDIzLCA0MjI4MSwgOTE3Nzg4LCA3NDAyNCwgMTIyOTMsIDAsIDY0MzU3LCAxMTc5NCwgNDIwODIsIAotICAgIDAsIDE3MzcsIDg5ODcsIDQyMDgxLCAwLCA3MjA1LCAwLCA5MzM1LCAxMjg1MCwgMTE5ODcwLCA2NTUzLCA3MDU1LCAwLCAKLSAgICA4Mjc3LCAwLCAwLCA1NDc1LCA3NDc5NSwgNzA1MiwgMCwgMCwgMTI5OTAsIDExNjAsIDQyMDg0LCAxMTk2NTAsIDQxMjE3LCAKLSAgICAxMTk2NjAsIDEwMDE4LCAzNjAsIDAsIDAsIDY4MTc2LCA1ODYzLCAzMTM3LCAwLCA0MTQ3LCAwLCA0MTIxNiwgNzg0NCwgCi0gICAgMjYxNiwgMTE5MTkwLCAwLCA2NTIzNCwgMCwgMTMwNzYsIDMxMzUsIDAsIDAsIDExOTEzOSwgMzE0MiwgMTk0OTQ4LCAwLCAKLSAgICAxMDgxOSwgMTE5NTgwLCAxMDE4MywgMCwgMjYwOCwgMTQ3MCwgNzM5NjcsIDAsIDYyMjcsIDAsIDAsIDc0Nzc1LCAwLCAKLSAgICA2MTYzLCAwLCAwLCAwLCAwLCAwLCA4NjAzLCAwLCAxMTk4NjYsIDMzMDYsIDEwODc2LCAwLCAxMTk1NzMsIDAsIDU4MzQsIDAsIAotICAgIDYyMjIsIDAsIDAsIDEyMDg2LCAwLCAxNjAwLCA2NDMwOSwgNjQ5MzksIDAsIDY0NzgzLCAwLCAxMTMxMCwgMCwgODg4MiwgMCwgCi0gICAgMCwgMjU3MCwgNzAyMSwgMCwgMCwgNDMxMTAsIDAsIDEyMzQsIDY1NDAsIDY5NzQsIDAsIDAsIDAsIDUwMDIsIDAsIDQxMjg2LCAKLSAgICAwLCAxMjcwMTksIDAsIDQzNTg1LCAwLCA2NTUxLCAwLCAwLCAwLCA0MTI4OSwgMCwgMCwgMCwgODk3NywgNjAyLCAxMjA4MTQsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQxMjc5LCAwLCAwLCAwLCAwLCA0MzYxNSwgMCwgMCwgMCwgMCwgMTI3MjcsIDAsIDAsIDAsIAotICAgIDk0NzUsIDAsIDY1MTA1LCAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDAsIDAsIDAsIDczOTE1LCA4MDc2LCA0MzA0OCwgCi0gICAgODI5MCwgODI5MSwgNDMwNTEsIDAsIDAsIDI1OTYsIDQzNTg0LCAwLCAxMzExMywgMCwgMCwgMjM5MywgNzA1OCwgOTA4NywgCi0gICAgNzQwNjcsIDAsIDQxNTc0LCAwLCAwLCA3NDA1OCwgNDIwMzUsIDAsIDAsIDAsIDAsIDk4NTQsIDAsIDY0Njk2LCAwLCAwLCAwLCAKLSAgICA3NDE2NSwgMCwgMTcyMCwgMCwgMCwgMCwgNjUyOSwgNzA2MywgMCwgMzc1MSwgOTEyMCwgMCwgMCwgMTc5OCwgNzA5LCAwLCAKLSAgICAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIDgxMzcsIDAsIDAsIDAsIDAsIDI0NSwgMCwgMTE0NTYsIDQxMjMzLCAKLSAgICA3MDcwLCAwLCAwLCA2MTM2LCAwLCA2NTY3NywgODY4MiwgNDEyMzUsIDAsIDQyMDQ1LCA5ODA0LCAwLCA0MzIsIDM1OTUsIDAsIAotICAgIDY1NDM3LCAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIDAsIDAsIDExOTY1OCwgMCwgMCwgMCwgMCwgODc5NywgMCwgOTA1MiwgCi0gICAgNjQ4ODgsIDAsIDIzNTYsIDk1LCA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgMCwgMTE5MTA0LCAwLCAwLCAwLCAKLSAgICAxMDA2MywgMTI2NTIsIDEyMTk5LCAxMjcwMzAsIDAsIDI1NjYsIDExOTcxLCAwLCAwLCAxMDY1LCAwLCAwLCAwLCAyNTc2LCAKLSAgICAwLCAwLCAwLCA0MzYwNCwgMCwgMCwgNzQwODIsIDUxNCwgNzQ1MDIsIDAsIDI5MjEsIDQzMjE1LCA2NDQ5MywgNTc3MiwgCi0gICAgMTI5NjgsIDAsIDAsIDc0NTgwLCA5MTc1NjUsIDI1ODAsIDAsIDQxMzQxLCA0MTIyMywgNjU2NCwgMTQ2MywgNDEzNDIsIDAsIAotICAgIDUyOTMsIDAsIDAsIDM3MzMsIDExMzQ2LCAwLCAxMjA1NCwgMCwgNzQwOTgsIDQyODI3LCAwLCAxMzA5MSwgMCwgMCwgMCwgCi0gICAgOTE3OTE1LCAwLCAxMjcwMjYsIDAsIDc0ODIxLCAwLCAwLCAxMTkwNDIsIDAsIDAsIDEzMDkwLCA2NjY0MywgMCwgMTI3MCwgCi0gICAgMTEzMiwgNDIzNjAsIDAsIDc0MDk2LCA2NjY1NSwgNDI1NjksIDAsIDAsIDY0NzYxLCAwLCA0MTAyMSwgODUxMCwgNDI0MzIsIAotICAgIDAsIDAsIDAsIDAsIDY0NDk2LCA3NDEwOSwgMCwgOTkxNSwgMCwgMCwgNzA2MSwgNDEzMzYsIDM4NTQsIDAsIDEzMTQxLCAKLSAgICA5MTc1NjQsIDAsIDQyMzE5LCAxMzA4MiwgMCwgNzA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTAyOSwgNDM1NDMsIDAsIAotICAgIDIzNTMsIDYzMDgsIDAsIDc0NzkyLCAyNjExLCAxMTkxODYsIDAsIDAsIDAsIDAsIDAsIDY2NjI3LCAwLCA0NDg0LCA4NTA5LCAKLSAgICAxMTg5NzYsIDAsIDY1MjMzLCAwLCA0MTIyNCwgNDEwMTcsIDAsIDM3NDcsIDEwNTIyLCAwLCAwLCAxNjkxLCA0MTIyNiwgMCwgCi0gICAgMTIxMDcsIDAsIDEwOTA1LCA2NTAxMCwgMCwgNjk3LCA2NjAxOCwgOTI4NCwgNDI0NCwgMCwgMCwgMCwgMTMxMjEsIDAsIDAsIAotICAgIDEyMDEwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTgxNiwgNjgxMTEsIDAsIDAsIDY1NjY4LCAwLCAwLCAxMTg3ODQsIDY2MzY1LCAKLSAgICAwLCAwLCAxMjY0OCwgMCwgMCwgMCwgNTc4NSwgNDEzMDksIDk3NjQsIDQxMzE2LCA2NTg3NywgMCwgMTMyMzAsIDQxMjk5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEyMiwgMCwgMTkxLCA3NDExOSwgMCwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIAotICAgIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIDQxNTc3LCAwLCAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIAotICAgIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAxMjkwMSwgMCwgMCwgMzQzLCAwLCAwLCA0MTM2MCwgMCwgMCwgNDc0MywgMCwgMCwgCi0gICAgNzQwNDAsIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjQsIDAsIDM3MzksIDYyNjMsIDAsIDAsIDM5NjQsIDY1OTIsIAotICAgIDAsIDAsIDY2MDQwLCAwLCA0MjU2OCwgMCwgMCwgMTc3OCwgMzk1NiwgMCwgNDIwNzAsIDY1NjMsIDQzMDc1LCA5MDE4LCAwLCAKLSAgICAwLCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIDAsIDAsIDAsIDgxNzUsIDAsIDI4NCwgODEwOCwgOTM0LCAwLCA3NDAwMSwgCi0gICAgMTczLCA2NjQ2MCwgNzE3NCwgMCwgMCwgMTc1MCwgMCwgNDM5NCwgMCwgMTgwNywgMCwgMCwgMCwgNTg4OSwgMCwgNzE4MCwgCi0gICAgMCwgMTE5MTQ1LCAwLCAwLCA0MjQ3MSwgNjk4MiwgMTcyMSwgMTE5MTQ0LCA3ODkxLCA0MjI0MywgNDIxNjAsIDI1ODMsIAotICAgIDQ1MTIsIDAsIDAsIDAsIDAsIDAsIDM4NTUsIDAsIDAsIDAsIDAsIDc0Mjk1LCAwLCAwLCAxMTkxNDAsIDM5NzUsIDAsIAotICAgIDc0MDg3LCAwLCAxMjY3MiwgMzc5OCwgMjcwMywgMCwgMCwgMCwgOTc3NCwgMTI3NSwgMCwgMCwgNDEwOTUsIDM5NjIsIDAsIAotICAgIDc4NzMsIDQxMTAxLCAzOTU0LCA2NDU3LCA0NTEzLCAwLCAwLCA3Mzk5NCwgNzM5OTIsIDE0NjgsIDAsIDAsIDQxODUxLCAwLCAKLSAgICA0MTg0NiwgMCwgMCwgNzYzMywgNDE4NDksIDAsIDQzMjAsIDMyMjQsIDAsIDAsIDAsIDQyNTMxLCAwLCAxNTEwLCAwLCAKLSAgICA4MjU2LCAwLCAxMTM5MywgMCwgODg3OSwgMCwgMCwgODc3MCwgMCwgMCwgMTI3MTIwLCAxOTEwLCA4NjcxLCAwLCA0MjgzLCAKLSAgICAwLCAxMjcxMTcsIDAsIDAsIDI2NTQsIDc4OTMsIDAsIDAsIDAsIDAsIDY1MTA2LCA0Mjc2MSwgMTI4NTcsIDQ1ODEsIDg0MTEsIAotICAgIDExOTAyOSwgMTI3MTIxLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzMzLCA0MzkyLCAyNTY4LCAxMDc4NiwgMCwgMCwgODE4NCwgCi0gICAgNDE0ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDcxODUsIDc5NjUsIDAsIDAsIDAsIDAsIDQxMzUwLCA5MTI5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMDQ4MSwgMCwgMCwgNzE3MSwgMCwgMzQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTc2MjAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDY1MjAzLCAxMTM5MiwgMCwgMCwgMCwgMzIxMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE3NjE5LCAwLCAwLCAxMDA0MywgMCwgCi0gICAgMTE4NiwgNDE1NzEsIDY5OTksIDYxNywgOTQ2NCwgMCwgMzY3NSwgNTIwNywgNjUwNjIsIDUyMTMsIDAsIDI2MTcsIDQxMzQ4LCAKLSAgICA0MTU2OCwgMCwgMzI1MywgMTIwNTM1LCAwLCA4NjMwLCAwLCAwLCA1NTk2LCA1NTQ1LCA3Mjg4LCAyNTg2LCA2NDg4NywgMCwgCi0gICAgNTIxNywgMCwgMCwgMCwgMCwgNjQyOTMsIDY4MDk4LCAyNjM1LCAwLCAwLCAwLCAwLCAwLCA3ODM1LCAwLCAwLCAxOTQ5ODgsIAotICAgIDAsIDY0NTU4LCAwLCAwLCAwLCAwLCAwLCAwLCA1Nzg0LCAwLCAwLCAwLCAwLCA0MDExLCAwLCA2ODEwMSwgMCwgNzg2NCwgCi0gICAgNDI1NCwgMTE4OTc1LCAwLCA1NjAwLCAzOTAzLCAxMjcwODMsIDEwNDQ3LCA1NTk4LCAxMjA3LCAxMjA1MjEsIDAsIDM1MDEsIAotICAgIDQyNTgyLCA0MzYwMCwgMCwgMCwgMTEyNCwgNTU5NywgMCwgMCwgOTMyMSwgMCwgMCwgMCwgMCwgMTcxOSwgMTIwNTc2LCAwLCAKLSAgICA5NjcxLCAxMTI1LCA0Mzk5LCAwLCAwLCAwLCA3NjMxLCA1NDg4LCA2NTIyMywgMCwgMCwgNTQ5MSwgMCwgODkzNywgNDMwNDQsIAotICAgIDI2MDQsIDc0MTg3LCA1NDkwLCA0MzA0NiwgNTQ4OSwgNzIxMiwgMTE3NjgsIDQzMDQzLCA2MzAwLCAwLCAxOTQ3ODksIDAsIAotICAgIDQzOTAsIDQ1NCwgNDEzOTcsIDAsIDk4NzUsIDc1OTMsIDE5NDc5MiwgMCwgMTE4OTEzLCA3MjA3LCAwLCA2NTkwMSwgMjM5NCwgCi0gICAgMjU3NSwgMCwgMzc0NiwgMTEwMTYsIDY1NzUyLCAwLCAwLCA5MTc5NDQsIDAsIDExOTg5LCAwLCAwLCAwLCAwLCAwLCA4MjQ5LCAKLSAgICAwLCAwLCAwLCA2NjQwLCA3NDgwNiwgMjU5OCwgNTEzLCAwLCA2NTg2LCA4NjU2LCAwLCAwLCA2NTAwOCwgMCwgMTk0Nzg0LCAKLSAgICAwLCAxOTQ3OTUsIDAsIDAsIDE5NDk4NywgMCwgMCwgMCwgMTk0OTg2LCAxMjY0NywgMCwgMTk0Nzk2LCAwLCAxMDM2LCAwLCAKLSAgICAwLCAxNzIzLCAwLCAwLCAwLCA0MTU3OSwgMjQ0NCwgMCwgMTA3MDUsIDczODc2LCAwLCA3NDQ4NiwgMCwgNzQwLCAxOTQ5ODUsIAotICAgIDAsIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDkxNzk0MywgMCwgMCwgMCwgODEyMSwgMTA0MzgsIDc0NDg3LCAKLSAgICA0MjU3NCwgMTMyODUsIDE5NTAwMSwgMTE5MDcsIDAsIDU2OTAsIDE5NDk5OSwgMCwgMCwgNDMxODEsIDEzMDk1LCAwLCAwLCAKLSAgICA2NDQ5OCwgMCwgOTUwNiwgNjk3OCwgMTk0OTkzLCAwLCAwLCAwLCAxOTQ5OTIsIDAsIDAsIDExMjIsIDMxNywgMCwgMCwgMCwgCi0gICAgMCwgMTkyMCwgMCwgMTAxNzMsIDgyNywgMCwgMCwgMCwgMTIwMTI2LCA1MjIzLCAxMzA0LCAwLCAxMTk1NjQsIDUyMjYsIAotICAgIDEyNjAyLCAwLCAwLCA5MzI5LCA3NzU4LCA5MjM5LCA0MTE3MywgNTIyNCwgNTQ4NywgMTIyMiwgNTY5MiwgNDE3MjUsIDAsIAotICAgIDk2NzQsIDU2OTUsIDQxNzExLCA2NDYyNywgMTk5MDksIDAsIDc0NjA0LCA1NjkxLCAyODcsIDg2NiwgMjMzLCAwLCAwLCAKLSAgICA0MjgxNiwgMCwgNjUxNDAsIDc0Nzk3LCAwLCA4ODMwLCA2NTY4LCA0MjMwMCwgMTA1MjQsIDQxMTc1LCAwLCAwLCAwLCAKLSAgICA1Mjk2LCAwLCA0MjQ5MiwgMCwgMCwgMzMwMiwgMCwgMCwgNjUxNiwgNjUxNSwgNjUxNCwgNjUxMywgNjUxMiwgMCwgNzg1NiwgCi0gICAgODY5MCwgMCwgMCwgMTIxMjIsIDExOTYyOCwgMTk0ODEzLCAwLCAxNzg1LCAwLCAxMjA2MzUsIDY1MTUzLCAxOTQ4MTAsIAotICAgIDUxMzgsIDAsIDAsIDAsIDAsIDQ1NDAsIDQxMTgxLCAwLCA2MjAwLCAwLCA1MTM0LCAwLCAzMjIsIDQ2NDMsIDUxMzIsIDAsIAotICAgIDAsIDAsIDUxNDMsIDAsIDg3OTAsIDAsIDAsIDE5NDgwMiwgMCwgODg2OSwgMTIwNjAxLCAwLCA0MjA2MCwgMCwgMCwgMCwgMCwgCi0gICAgMTAyNzAsIDEwMjg2LCAxMDMxOCwgMTAzODIsIDQzNTI5LCA2NjQ3NywgMCwgMCwgNzQxNzAsIDAsIDMyMzQsIDAsIDAsIAotICAgIDc0Mzc2LCA0MzEzOSwgMTE4OTI0LCAxMjcwODQsIDEyMDYyNywgODc2NywgMCwgNzQ0ODksIDQxMjgxLCAxMjA3NDYsIAotICAgIDUyMDEsIDAsIDYyMTUsIDEyNzE0LCA2MjE0LCAxMzEwMSwgMCwgMCwgNjUyNjgsIDAsIDAsIDAsIDExMDI3LCAwLCAxMDA1OSwgCi0gICAgMTA1MTEsIDQyMDc1LCA5NzY3LCA3ODksIDE3NDksIDAsIDEyNzA3MSwgMCwgMzIwLCAwLCA4NjQ3LCAwLCAzMDQ5LCAwLCAKLSAgICA2NDcxLCA0MjA3MSwgNDMxNTYsIDAsIDAsIDAsIDAsIDQ5NjAsIDU1NDksIDAsIDAsIDg0ODUsIDQ2NzEsIDU0MTgsIDAsIAotICAgIDMzNTEsIDAsIDAsIDEwNjEwLCA1NDE0LCAzMDY0LCA2MjEyLCA0Mjg2LCA1NDIxLCAwLCA5NTU0LCAwLCAwLCAwLCA2NjUzLCAKLSAgICAwLCAwLCA2NDUxMCwgNjIxMywgMTI4ODUsIDAsIDExOTA0NSwgNjQ3MjAsIDAsIDEyMDc1OSwgNzM3NDEsIDEyNjAzLCAwLCAKLSAgICAxMTQzMCwgNDU2NiwgNzg0MywgOTMxNywgMzgwMSwgMTAzNDIsIDEwNDA2LCAwLCAxMTkyNTksIDQyNTc2LCAwLCA1MjAwLCAKLSAgICAwLCAwLCAwLCA5MTgzLCAwLCA3NDQ1OCwgNzM4MjUsIDM5NSwgNTQ4MiwgNTE5OCwgODc4NiwgMTAzOTAsIDc0MjAyLCAKLSAgICA1MTk2LCA0MzIyNCwgNjExMywgNDIwMDksIDUyMDUsIDAsIDQzMzA3LCAwLCAxMTg5NzMsIDAsIDEyMTM0LCAwLCAwLCAKLSAgICAxMTg4NDMsIDkxMjYsIDQzNSwgMCwgMTIwMTQsIDEyODkzLCA4MDkzLCA5MDc5LCAzMjAzLCAxOTIsIDY1MTA5LCAzMzg1LCAKLSAgICAwLCA2NDQzMCwgNTM4MywgMTAyOTQsIDEwMzI2LCAwLCA1NzM4LCAwLCAzMzM2LCAwLCA1MzYxLCAzNjIzLCA0MTE1OSwgMCwgCi0gICAgNjgxMTIsIDc4NzIsIDg1ODEsIDAsIDEyNjAsIDMxNDksIDUzNTksIDAsIDAsIDc5MTQsIDUzNTcsIDAsIDAsIDI2MjQsIAotICAgIDUzNjQsIDAsIDExNDMxLCAwLCA5MTAxLCAxMTA1OCwgMCwgMCwgMCwgNDIyNzEsIDAsIDY1NzM3LCAxMjA3OTMsIDAsIDAsIAotICAgIDAsIDEwNjE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MzE5LCA3MDk3LCAxMTkwNTUsIDAsIDMyMzIsIDczODI0LCAKLSAgICA3NDU4MSwgMCwgMCwgMCwgNDE4ODksIDAsIDAsIDExNjEsIDQxODk1LCA3NDEwMywgOTcwMSwgODYyMiwgMCwgMCwgNzM4MTksIAotICAgIDEyMDU4OCwgNTAxMiwgMTE5MDQ5LCA0MTM2MiwgMCwgOTE3NzYyLCAxMTkyMSwgMCwgMTE3NjksIDAsIDAsIDQxMzY0LCAwLCAKLSAgICA3NDIyOCwgNDEzNTIsIDQxMzYxLCAwLCA0MTM2NiwgMCwgMzM1NiwgMCwgOTE3LCAwLCAxMTk5MTUsIDExOTkyMywgODE5OSwgCi0gICAgMTE5OTEyLCAxMTk5MTcsIDY3NywgMTE5OTE2LCAwLCAxMTk5MzIsIDAsIDAsIDAsIDAsIDMzNDksIDc0MTI1LCA3MDIyLCAKLSAgICA4OTI3LCA0NzM5LCAwLCA1ODAyLCAwLCA4NjE1LCAwLCAwLCA0OTEsIDAsIDAsIDAsIDY1ODM3LCAwLCA4NDI2LCAxMTA5MiwgCi0gICAgOTg5MSwgMCwgNDI0OTcsIDAsIDc1ODYsIDQyMzA1LCAxMDg1MiwgMCwgMCwgMCwgMCwgOTA5NSwgNzc0MSwgMTI2ODQsIAotICAgIDQxODg1LCAxMDQ2LCAwLCAwLCAwLCA1ODE1LCA1MTcxLCA2NTUzOSwgMCwgNjkzMiwgMCwgNDIzOTQsIDQxODc4LCA3NDg0OSwgCi0gICAgOTE3OTUxLCAwLCA1MTY5LCAxMTkzNSwgMCwgMCwgMzE3NSwgMTIwODIyLCAxNTM3LCAxMjA4MDQsIDUxNzYsIDg5MDUsIAotICAgIDQxMzYsIDQ4NzEsIDAsIDAsIDk4MzMsIDAsIDAsIDExMjgsIDY1OTIwLCAwLCA5NzExLCA3MDU3LCA5NDA4LCA5NDA5LCAKLSAgICA5NDEwLCA5NDExLCAzNjYyLCA5NDEzLCAzMzc4LCA5NDE1LCA5NDE2LCA5NDE3LCA5NDE4LCA4OTA5LCA5NDIwLCA5NDIxLCAKLSAgICA1ODk3LCA5NDIzLCA1MTY1LCA1MTI2LCA0MTM4NSwgMCwgNDEzODksIDkxNzkzOCwgODk1NSwgMzM3NCwgOTQwMCwgOTQwMSwgCi0gICAgOTQwMiwgOTQwMywgOTQwNCwgMzUwNywgOTQwNiwgNzYyOSwgMCwgMTk5MjUsIDAsIDczODMyLCAxODMsIDAsIDI2MzEsIDAsIAotICAgIDEwNjI3LCA0MTEzMCwgMCwgMzk5NiwgMCwgMCwgMCwgMCwgMTE5MzA3LCAwLCA2NTgwLCA0MzMyLCA2NDgyNSwgNjYzMjksIAotICAgIDEwNzI2LCA2NjY4NiwgNDExMjUsIDU4OTksIDQxMzY1LCA5MTc5MTgsIDEyMDg1LCAwLCA1NzQsIDkxNzkyMiwgMCwgCi0gICAgNzM4MjgsIDU0NDgsIDQxMDU4LCA1NDQ2LCA3MzkwMCwgNDEzMjIsIDc0NzY4LCA1NDQyLCA0MTkwLCAwLCAwLCA1NDUxLCAwLCAKLSAgICAzNjE2LCAwLCAwLCAwLCA3NzA4LCAwLCAxMDg1OSwgNjU4NjcsIDEwMzQ1LCAxMDQwOSwgNDE5MSwgMCwgMTIwNzE5LCAKLSAgICA3MzgwMCwgNDIxODEsIDAsIDAsIDQ0NDcsIDAsIDEyMDcwOCwgMTE3ODgsIDY1NTg3LCAwLCAxMDQxNSwgNzQxMDIsIDAsIAotICAgIDIwNSwgMCwgMTAzNTEsIDExOTA3NiwgMCwgOTg2MiwgNjU4OCwgMCwgNjQ2OTcsIDAsIDQxMzU1LCA1NTA1LCAxMTkxNTQsIAotICAgIDU1MDMsIDgwMjEsIDAsIDExOTE1MCwgOTgxOSwgNDEzNTcsIDgwMTEsIDQyODg1LCA1NTA3LCAxMjA0NCwgMCwgMCwgCi0gICAgMTAwMjYsIDU0NzIsIDY1MTA4LCAxMTkxLCAxMzEwNiwgNTQ3MCwgMTAzMjksIDU0NzYsIDg5OTEsIDY2MzIyLCAwLCAwLCAKLSAgICA0Mjg3NCwgODU1MCwgNDI4NzYsIDU1OTIsIDI5MTksIDAsIDI2NzUsIDU1OTUsIDAsIDAsIDQzNjcsIDAsIDAsIDU0NzgsIAotICAgIDU5MDQsIDU1OTQsIDAsIDc0MTUwLCA3MjkxLCA1NTkwLCAwLCAxMzA2NywgMTE4OTA5LCAwLCAwLCA5NzMxLCAwLCA2NDYzMywgCi0gICAgMTk0NTY1LCAwLCAwLCAwLCAwLCAwLCAxMDc1MCwgMCwgMCwgNzQ1NDUsIDAsIDAsIDEyODg3LCAxMDU1MSwgMTk0NTY0LCAwLCAKLSAgICAwLCAwLCAxMjA1NzAsIDAsIDUxOTksIDAsIDExMjAsIDQyMzg3LCAwLCAxNDQ0LCA5NDg2LCA3NTU0LCA2NTgzOSwgMCwgMCwgCi0gICAgMTQ0MiwgMCwgNTg5NCwgMCwgMCwgMCwgMCwgNzQzMTMsIDAsIDEzMTYyLCAwLCAzMzM0LCAwLCAxMTg4MDMsIDAsIDY2MDIyLCAKLSAgICAwLCAwLCAxNjUxLCAwLCA4ODYxLCAwLCAwLCAxMTQyLCAwLCA4MjcxLCAwLCAwLCAwLCAxMjkwMywgMCwgNDAwMiwgMCwgCi0gICAgMTA0NDIsIDEwNjc2LCAzMzQ0LCAwLCAwLCAxMjkyMCwgMCwgMCwgMCwgMCwgMTI3NywgMCwgNzg3MSwgMCwgMCwgMCwgMCwgCi0gICAgMTE5MDE1LCAxMjAzNjAsIDAsIDExNzg0LCAwLCAwLCA0NzAwLCA2NjM2NiwgMCwgMTIwMzU5LCAxMTAxMiwgMCwgMCwgCi0gICAgMTIwMzU4LCAwLCA0OTczLCA4Nzg0LCAwLCA3NDgwNCwgMCwgMCwgMTE4OTgxLCA0MjQ0MCwgMCwgNDMxMTgsIDAsIDQyMzY0LCAKLSAgICAwLCAxMTU0MywgMCwgMCwgMTAzNDYsIDEwNDEwLCAwLCA5MjQzLCAyNDY0LCAwLCA2MTA4LCAzMzcyLCAwLCA2MjQ3LCAKLSAgICA0MzExNywgNzQ1MjYsIDAsIDc0MTY2LCAwLCAxMjAzNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MjE3LCAzMzU0LCAwLCAKLSAgICA0MTkyLCA5Mjg5LCAxMTg5OTksIDQxMTkxLCAzODc2LCAwLCAwLCAxMjA2NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNjAzLCAKLSAgICAwLCAwLCA2NTg5LCAwLCAxOTQ2NzksIDAsIDAsIDAsIDAsIDAsIDQyNTcyLCAwLCAxMDYzMCwgNzQ4MjcsIDE5NjMsIAotICAgIDExODg4OSwgMCwgMTE2NTQsIDAsIDc1NTAsIDEwNjg2LCA1OTAzLCAwLCAwLCA0MTMyOSwgOTY2MiwgOTE3OTM3LCA2NDY5OCwgCi0gICAgMzM2NiwgMTAzOTksIDAsIDAsIDExMDEzLCAwLCA5MTc5MzMsIDAsIDAsIDAsIDY5MjUsIDAsIDAsIDkxNzkyOSwgMCwgCi0gICAgMTE1NjgsIDAsIDkxNzkzMSwgNjQ1NzksIDkxNzkzMCwgNzg1MiwgMCwgMCwgMTIyOTIsIDYzMTIsIDAsIDY0NjcyLCAKLSAgICA2NTI5NiwgMCwgMTE4OTU3LCAwLCA0MTYsIDEyMjk2LCA3NDc1MywgNzM4MzQsIDAsIDExMDUwLCAxMDk4NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOTUzMiwgNjYzNTUsIDAsIDAsIDkxNzkyNSwgNjQzNDMsIDE5NTAzMiwgMCwgMTk1MDMxLCAwLCAwLCAKLSAgICAxOTUwNTcsIDExNDQ1LCAwLCAxOTUwMjgsIDAsIDE5NTAyNywgMCwgMTAyMSwgMCwgOTUwNywgMTAyMTAsIDc0NTQ0LCAKLSAgICA4MDIzLCAxMjAwLCAxMjI0MywgMTk1MDYyLCA1MjgyLCAxOTUwNjEsIDEyNTQwLCAxMTU0NSwgMCwgMTIwNDkzLCAzMzQzLCAKLSAgICA0NDI0LCAxMTA0NywgMTg4NSwgNDMyNjgsIDM4OTYsIDAsIDY2NDk3LCAyOTQ3LCAzOTIsIDc4OTQsIDQzOTEsIDY4MTM5LCAKLSAgICAwLCAxMzA1OSwgNzQ4MTYsIDAsIDMzODEsIDc5NDIsIDAsIDAsIDAsIDAsIDAsIDM5MTMsIDAsIDAsIDAsIDcwNDQsIDEyNjUsIAotICAgIDAsIDYzMDksIDcwNDUsIDcxNzUsIDcwNDcsIDAsIDExNzkxLCAwLCAwLCA4MjIxLCAwLCA0MTg2NCwgMCwgMCwgMCwgMCwgCi0gICAgMTY3LCAwLCA5MTc1ODQsIDAsIDc0MjExLCA0MTg5NywgMCwgMCwgMCwgMCwgMCwgMjQ5MywgMCwgMTE4ODExLCAwLCAwLCAKLSAgICA2NDM1NCwgMCwgODc3NywgMCwgNDA2LCA4ODg0LCAyMzg1LCAwLCAwLCAwLCAwLCA0MzAzMCwgNDIwMjcsIDEyMTE0LCAwLCAKLSAgICAwLCA2NDkzNiwgMCwgMCwgMTIwNjI5LCAxMDU2MSwgMCwgODM2NSwgMCwgMCwgNjU4NDEsIDEyMDc4NywgMTE2MDEsIDAsIDAsIAotICAgIDAsIDkxNzU3NSwgNzgzNCwgNzQxNTksIDAsIDAsIDEwMjk4LCA2NjI0LCA0OTA4LCA5MTc1OTYsIDE2MzksIDAsIDAsIAotICAgIDc0MTU3LCAwLCAwLCAwLCAwLCAwLCAwLCA0ODE3LCAwLCAxOTQ3NTksIDAsIDcwNDMsIDk2MDAsIDExMDIyLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3NTQ4LCA2NDc5NCwgNDIwNTAsIDEyMjkxLCAwLCAxOTQ3NjEsIDEyMzQzLCA2NTcsIDE5NTA1NCwgNjQ2ODIsIAotICAgIDQ0NjEsIDExMzQsIDE4MzgsIDAsIDAsIDAsIDQ0NjgsIDAsIDAsIDAsIDQ0NTYsIDUyMDYsIDEwNzIwLCAwLCA0MjUyMywgMCwgCi0gICAgMCwgMCwgMCwgNjU1NTAsIDI2MCwgNDgxNiwgNzQxNjMsIDEwNjg3LCAwLCA0ODIxLCA0NDY2LCAwLCAxOTUwNDMsIDQ4MTgsIAorICAgIDY3NjEsIDEwMDkzLCA0MzY5LCA5MTc3OTEsIDAsIDAsIDg4MjAsIDM5NDcsIDAsIDAsIDExNTE1LCA1MjYsIDAsIDQxMjk1LCAKKyAgICAxOTQ2MDMsIDkxNzc4NSwgMTk0OTMyLCAwLCA3Njg4LCA5MTc3ODYsIDc2ODYsIDgyODgsIDExODE1LCAwLCAwLCAwLCAKKyAgICAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCAKKyAgICA0MjA4MiwgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIAorICAgIDAsIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA2NzgwLCAwLCAwLCAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgCisgICAgNDEyMTcsIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIDMxMzcsIDAsIDQxNDcsIDAsIDQxMjE2LCAKKyAgICA3ODQ0LCAyNjE2LCAxMTkxOTAsIDY4NDYxLCA2NTIzNCwgMCwgMTMwNzYsIDMxMzUsIDAsIDc4MTQzLCAxMTkxMzksIDMxNDIsIAorICAgIDE5NDk0OCwgMCwgMTA4MTksIDExOTU4MCwgMTAxODMsIDAsIDI2MDgsIDE0NzAsIDczOTY3LCAwLCA2MjI3LCAwLCAwLCAKKyAgICA3NDc3NSwgMCwgNjE2MywgMCwgMCwgMCwgMCwgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgNDMzOTIsIAorICAgIDExOTU3MywgMCwgNTc1MSwgMCwgNjIyMiwgMCwgMCwgMTIwODYsIDc0MDMsIDE2MDAsIDY0MzA5LCA2NDkzOSwgMCwgCisgICAgNjQ3ODMsIDAsIDExMzEwLCAwLCA4ODgyLCAwLCAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgCisgICAgNjk3NCwgMCwgMCwgMCwgNTAwMiwgMCwgNDEyODYsIDAsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIDAsIDAsIDAsIAorICAgIDQxMjg5LCAwLCAwLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgMCwgMCwgMCwgMCwgMCwgNDEyNzksIDAsIDAsIDAsIDExMDgxLCAKKyAgICA0MzYxNSwgMCwgMCwgMCwgMCwgMTI3MjcsIDAsIDAsIDc4Mzk3LCA5NDc1LCAwLCA2NTEwNSwgMCwgOTYzMywgMTA4ODYsIAorICAgIDQzNTkyLCA3ODMxLCAwLCAwLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIDgyOTAsIDgyOTEsIDQzMDUxLCAwLCAwLCAyNTk2LCAKKyAgICA0MzU4NCwgMCwgMTMxMTMsIDAsIDAsIDIzOTMsIDcwNTgsIDkwODcsIDc0MDY3LCA2ODY3MywgNDE1NzQsIDc4MzM3LCAwLCAKKyAgICA3NDA1OCwgNjM3NiwgMCwgMCwgMCwgMCwgOTg1NCwgMCwgNjQ2OTYsIDAsIDAsIDAsIDY5OTQsIDAsIDE3MjAsIDAsIDAsIDAsIAorICAgIDY1MjksIDcwNjMsIDAsIDM3NTEsIDkxMjAsIDAsIDAsIDE3OTgsIDcwOSwgMCwgMTM1NCwgMTg3NiwgMTMxNTIsIDY1NTcsIAorICAgIDEyNDMwLCA4MTM3LCAwLCAwLCAwLCAwLCAyNDUsIDAsIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgMCwgNjEzNiwgMCwgCisgICAgNjU2NzcsIDg2ODIsIDQxMjM1LCAwLCA0MjA0NSwgOTgwNCwgMCwgNDMyLCAzNTk1LCAwLCA2NTQzNywgMCwgNzQ0NTUsIAorICAgIDQyMzk5LCAwLCAwLCAwLCAwLCAxMTk2NTgsIDAsIDAsIDAsIDc3ODk0LCA4Nzk3LCAwLCA5MDUyLCA2NDg4OCwgMCwgMjM1NiwgCisgICAgOTUsIDc0Nzg0LCAxMDU4MCwgMCwgNDIyODYsIDAsIDY0NjQwLCAwLCAxMTkxMDQsIDAsIDAsIDAsIDEwMDYzLCAxMjY1MiwgCisgICAgMTIxOTksIDEyNzAzMCwgMCwgMjU2NiwgMTE5NzEsIDAsIDAsIDEwNjUsIDAsIDAsIDQzNDAwLCAyNTc2LCAwLCAwLCAwLCAKKyAgICA0MzYwNCwgMCwgMCwgNzQwODIsIDUxNCwgNzQ1MDIsIDAsIDI5MjEsIDQzMjE1LCA2NDQ5MywgNTc3MiwgMTI5NjgsIDAsIAorICAgIDE5NDk0NCwgNzQ1ODAsIDQzMzk4LCAyNTgwLCAwLCA0MTM0MSwgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCA1MjkzLCAKKyAgICAwLCAwLCAzNzMzLCAxMTM0NiwgMCwgMTIwNTQsIDAsIDc0MDk4LCA0MjgyNywgMCwgMTMwOTEsIDAsIDAsIDAsIDkxNzkxNSwgCisgICAgMCwgMTI3MDI1LCAwLCA3NDgyMSwgMCwgMCwgMTE5MDQyLCAwLCAwLCAxMzA5MCwgNjY2NDMsIDAsIDEyNzAsIDExMzIsIAorICAgIDQyMzYwLCAwLCA3NDA5NiwgNjY2NTUsIDQyNTY5LCAwLCAwLCA2NDc2MSwgMCwgNDEwMjEsIDg1MTAsIDQyNDMyLCAwLCAwLCAKKyAgICAwLCAwLCA2NDQ5NiwgNzQxMDksIDAsIDk5MTUsIDAsIDAsIDcwNjEsIDQxMzM2LCAzODU0LCAwLCAxMzE0MSwgNjg0MTMsIAorICAgIDQzNDAxLCA0MjMxOSwgMTMwODIsIDAsIDcwNjcsIDY4MjIxLCAwLCAwLCAwLCAwLCAwLCAwLCA5MDI5LCA0MzU0MywgMCwgCisgICAgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgNDM2NjQsIDAsIDY2NjI3LCAwLCA0NDg0LCAKKyAgICA4NTA5LCAxMTg5NzYsIDc4MTE2LCA2NTIzMywgMCwgNDEyMjQsIDQxMDE3LCAwLCAzNzQ3LCAxMDUyMiwgMCwgMCwgMTY5MSwgCisgICAgNDEyMjYsIDAsIDEyMTA3LCA0NDAwMiwgMTA5MDUsIDY1MDEwLCAwLCA2OTcsIDY2MDE4LCA5Mjg0LCA0MjQ0LCAwLCAwLCAwLCAKKyAgICAxMzEyMSwgMTIwMDM2LCAwLCAxMjAxMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU4MTYsIDY4MTExLCAwLCAwLCA2NTY2OCwgMCwgCisgICAgNjYxOCwgMTE4Nzg0LCA2NjM2NSwgMCwgNDIyMzQsIDEyNjQ4LCAwLCAwLCAwLCA1Nzg1LCA0MTMwOSwgOTc2NCwgNDEzMTYsIAorICAgIDY1ODc3LCA3MzgzLCAxMzIzMCwgNDEyOTksIDAsIDAsIDY4MzY1LCAwLCAwLCAwLCAwLCAxMzEyMiwgMCwgMTkxLCA3NDExOSwgCisgICAgODU4NSwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIDQxNTc3LCAwLCAKKyAgICAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAxMjkwMSwgNDMwNTgsIAorICAgIDAsIDM0MywgMCwgNDI2ODAsIDQxMzYwLCA3ODE1NCwgMCwgNDc0MywgMCwgMCwgNzQwNDAsIDc0MTA4LCA4NzQzLCAxNzI0LCAKKyAgICAxNDMzLCAxMTkzMjIsIDAsIDM3MzksIDYyNjMsIDAsIDAsIDM5NjQsIDY1OTIsIDAsIDAsIDY2MDQwLCAwLCA0MjU2OCwgMCwgCisgICAgMCwgMTc3OCwgMzk1NiwgMCwgNDIwNzAsIDY1NjMsIDQzMDc1LCA5MDE4LCAwLCAwLCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIAorICAgIDc0NTMxLCAwLCAwLCA4MTc1LCAwLCAyODQsIDgxMDgsIDkzNCwgMCwgNzQwMDEsIDE3MywgNjY0NjAsIDcxNzQsIDkxNzkxNywgCisgICAgMTE4ODIyLCAxNzUwLCAwLCA0Mzk0LCA2ODM2OCwgMTgwNywgMCwgMCwgMCwgNTg4OSwgMCwgNzE4MCwgMCwgMTE5MTQ1LCAwLCAKKyAgICAwLCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgNDUxMiwgMTE5MzYwLCAKKyAgICA2NTIzMCwgMCwgMCwgMCwgMzg1NSwgMCwgMCwgMCwgMCwgNzQyOTUsIDAsIDAsIDExOTE0MCwgMzk3NSwgMCwgNzQwODcsIDAsIAorICAgIDEyNjcyLCAzNzk4LCAyNzAzLCAwLCAwLCAyMTA5LCA5Nzc0LCAxMjc1LCAwLCAwLCA0MTA5NSwgMzk2MiwgMCwgNzg3MywgCisgICAgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgMCwgMCwgNDE4NTEsIDAsIDQxODQ2LCAKKyAgICAwLCA1NTIzOCwgNzYzMywgNDE4NDksIDY4Mzg1LCA0MzIwLCAzMjI0LCAwLCAwLCAwLCA0MjUzMSwgMCwgMTUxMCwgMCwgCisgICAgODI1NiwgMCwgMTEzOTMsIDAsIDg4NzksIDAsIDAsIDg3NzAsIDAsIDAsIDc4Mzc3LCAxOTEwLCA4NjcxLCA3ODM3NCwgCisgICAgNDI4MywgMCwgMTI3MTE3LCA2ODM2MSwgNzgzMTgsIDI2NTQsIDc4OTMsIDE5NTAwNywgMCwgMCwgMCwgNjUxMDYsIDQyNzYxLCAKKyAgICAxMjg1NywgNDU4MSwgODQxMSwgNzgzNzIsIDc4MzcxLCA3ODM3MCwgNzgzNjksIDc4MzY4LCAwLCAwLCAwLCAxNzMzLCAKKyAgICA0MzkyLCAyNTY4LCAxMDc4NiwgMCwgMCwgODE4NCwgNDE0ODYsIDAsIDczOTYsIDAsIDAsIDY5Nzg4LCAwLCA3MTg1LCAKKyAgICA3OTY1LCAwLCAwLCAwLCAwLCA0MTM1MCwgOTEyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0ODEsIDAsIDAsIDcxNzEsIDAsIAorICAgIDM0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjc2NCwgMCwgMCwgMCwgMCwgMCwgNjUyMDMsIDExMzkyLCAxMTkwOTgsIAorICAgIDExOTM1OSwgMCwgMzIxMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE3NjE5LCAwLCAwLCAxMDA0MywgMCwgMTE4NiwgNDE1NzEsIAorICAgIDY5OTksIDYxNywgOTQ2NCwgMCwgMzY3NSwgNTIwNywgNjUwNjIsIDUyMTMsIDE5NDc2OSwgMjYxNywgNDEzNDgsIDQxNTY4LCAKKyAgICAwLCAzMjUzLCAxMjA1MzUsIDAsIDg2MzAsIDAsIDAsIDU1OTYsIDU1NDUsIDcyODgsIDI1ODYsIDY0ODg3LCAwLCA1MjE3LCAKKyAgICAwLCAwLCAwLCAwLCA2NDI5MywgNjgwOTgsIDI2MzUsIDAsIDAsIDAsIDAsIDAsIDc4MzUsIDAsIDAsIDE5NDk4OCwgMCwgCisgICAgNjQ1NTgsIDEyNzEyMiwgMCwgMTI3MTIxLCAwLCAwLCAwLCA1Nzg0LCAwLCAwLCAwLCAwLCA0MDExLCA5MTc2MTYsIDY4MTAxLCAKKyAgICAwLCA3ODY0LCA0MjU0LCA2NTA5NSwgMCwgNTYwMCwgMzkwMywgMTI3MDgzLCAxMDQ0NywgNTU5OCwgMTIwNywgMTIwNTIxLCAKKyAgICA2NjY4OSwgMzUwMSwgNDI1ODIsIDQzNjAwLCAxOTQ3ODAsIDAsIDExMjQsIDU1OTcsIDAsIDAsIDkzMjEsIDAsIDAsIDAsIDAsIAorICAgIDE3MTksIDY4MzU2LCA2ODM1NCwgOTY3MSwgMTEyNSwgNDM5OSwgMCwgOTE3NjEwLCAwLCA3NjMxLCA1NDg4LCA2NTIyMywgCisgICAgMTIwNTMyLCAwLCA1NDkxLCAwLCA4OTM3LCA0MzA0NCwgMjYwNCwgNzQxODcsIDU0OTAsIDQzMDQ2LCA1NDg5LCA3MjEyLCAKKyAgICAxMTc2OCwgNDMwNDMsIDYzMDAsIDAsIDE5NDc4OSwgMCwgNDM5MCwgNDU0LCA0MTM5NywgMCwgOTg3NSwgNzU5MywgCisgICAgMTk0NzkyLCAwLCAxMTg5MTMsIDcyMDcsIDAsIDY1OTAxLCAyMzk0LCAyNTc1LCAwLCAzNzQ2LCAxMTAxNiwgNjU3NTIsIAorICAgIDEyMDAzNywgMCwgNDM0MjMsIDAsIDExOTg5LCAwLCAwLCAwLCAwLCAwLCA4MjQ5LCAwLCAwLCA3ODUzMSwgNjY0MCwgCisgICAgNzQ4MDYsIDI1OTgsIDUxMywgMCwgNjU4NiwgODY1NiwgMCwgMTI3MDAyLCA2NTAwOCwgMCwgMTk0Nzg0LCAwLCAxOTQ3OTUsIAorICAgIDAsIDAsIDY4NDc1LCAwLCAwLCAwLCA3ODYzNywgMTI2NDcsIDAsIDE5NDc5NiwgMCwgMTAzNiwgMCwgMCwgMTcyMywgMCwgMCwgCisgICAgMCwgNDE1NzksIDI0NDQsIDAsIDEwNzA1LCA3Mzg3NiwgMCwgNzQ0ODYsIDAsIDc0MCwgMTk0OTg1LCAxOTQ5NzgsIAorICAgIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDY4NDM3LCA3ODE0MCwgNzgxMzksIDAsIDgxMjEsIDEwNDM4LCA3NDQ4NywgCisgICAgNDI1NzQsIDEzMjg1LCA1NTI2MywgMTE5MDcsIDE5NTAwMCwgNTY5MCwgMTk0OTk5LCAwLCAwLCA0MzE4MSwgMTMwOTUsIDAsIAorICAgIDAsIDY0NDk4LCAwLCA5NTA2LCA2OTc4LCAxOTQ5OTMsIDc3OTkyLCAwLCAwLCAxOTQ5OTIsIDAsIDAsIDExMjIsIDMxNywgMCwgCisgICAgMCwgMCwgMCwgMTkyMCwgMCwgMTAxNzMsIDgyNywgMCwgMCwgNzgzNzgsIDEyMDEyNiwgNTIyMywgMTMwNCwgMCwgMTE5NTY0LCAKKyAgICA1MjI2LCAxMjYwMiwgMCwgMCwgOTMyOSwgNzc1OCwgOTIzOSwgNDExNzMsIDUyMjQsIDU0ODcsIDEyMjIsIDU2OTIsIAorICAgIDQxNzI1LCA2OTIyOSwgOTY3NCwgNTY5NSwgNDE3MTEsIDY0NjI3LCAxOTkwOSwgMCwgNzQ2MDQsIDU2OTEsIDI4NywgODY2LCAKKyAgICAyMzMsIDAsIDAsIDQyODE2LCAwLCA2NTE0MCwgNzQ3OTcsIDAsIDg4MzAsIDY1NjgsIDQyMzAwLCAxMDUyNCwgNDExNzUsIDAsIAorICAgIDAsIDAsIDUyOTYsIDAsIDQyNDkyLCA0MzQwMiwgMCwgMzMwMiwgMCwgMCwgNjUxNiwgNjUxNSwgNjUxNCwgNjUxMywgNjUxMiwgCisgICAgMCwgNzg1NiwgODY5MCwgMCwgMCwgMTIxMjIsIDExOTYyOCwgNDM5NzYsIDAsIDE3ODUsIDAsIDY4NjIyLCA2NTE1MywgCisgICAgMTk0ODEwLCA1MTM4LCAwLCAwLCAwLCAwLCA0NTQwLCA0MTE4MSwgMCwgNjIwMCwgMCwgNTEzNCwgMCwgMzIyLCA0NjQzLCAKKyAgICA1MTMyLCAwLCA2Mzg5LCAwLCA1MTQzLCAwLCA4NzkwLCAwLCAwLCAxOTQ4MDIsIDAsIDg4NjksIDEyMDYwMSwgMCwgNDIwNjAsIAorICAgIDAsIDAsIDAsIDAsIDEwMjcwLCAxMDI4NiwgMTAzMTgsIDEwMzgyLCA0MzUyOSwgNjY0NzcsIDAsIDAsIDc0MTcwLCAwLCAKKyAgICAzMjM0LCAwLCAwLCA3NDM3NiwgNDMxMzksIDExODgxNSwgMTI3MDg0LCAxMjA2MjcsIDg3NjcsIDAsIDc0NDg5LCA5Njk1LCAKKyAgICAxMjA3NDYsIDUyMDEsIDAsIDYyMTUsIDEyNzE0LCA2MjE0LCAxMzEwMSwgMCwgMCwgNjUyNjgsIDAsIDAsIDAsIDExMDI3LCAKKyAgICAwLCAxMDA1OSwgMTA1MTEsIDQyMDc1LCA5NzY3LCA3ODksIDE3NDksIDc4ODkwLCAxMjcwNzEsIDAsIDMyMCwgMCwgODY0NywgCisgICAgMCwgMzA0OSwgMCwgNjQ3MSwgNDIwNzEsIDQzMTU2LCA5OTI1LCAxMjczNTYsIDEyNzM1NSwgMCwgNDk2MCwgNTU0OSwgCisgICAgMTI3MzU5LCAwLCA4NDg1LCA0NjcxLCA1NDE4LCAwLCAzMzUxLCAxMjcwMDYsIDAsIDEwNjEwLCA1NDE0LCAzMDY0LCA2MjEyLCAKKyAgICA0Mjg2LCA1NDIxLCAwLCA5NTU0LCAwLCAwLCAwLCA2NjUzLCAwLCAwLCA2NDUxMCwgNjIxMywgMTI4ODUsIDAsIDExOTA0NSwgCisgICAgNjQ3MjAsIDAsIDEyMDc1OSwgNzM3NDEsIDEyNjAzLCA3ODY1NCwgMTE0MzAsIDQ1NjYsIDc4NDMsIDkzMTcsIDM4MDEsIAorICAgIDEwMzQyLCAxMDQwNiwgMCwgMTE5MjU5LCA0MjU3NiwgMCwgNTIwMCwgMCwgOTE3OTQ4LCAwLCA5MTgzLCAwLCA3NDQ1OCwgCisgICAgNzM4MjUsIDM5NSwgNTQ4MiwgNTE5OCwgODc4NiwgMTAzOTAsIDc0MjAyLCA1MTk2LCA0MzIyNCwgNjExMywgNDIwMDksIAorICAgIDUyMDUsIDAsIDQzMzA3LCAwLCAxMTg5NzMsIDAsIDEyMTM0LCAwLCAwLCAxMTg4NDMsIDkxMjYsIDQzNSwgMCwgMTIwMTQsIAorICAgIDEyODkzLCA4MDkzLCA5MDc5LCAzMjAzLCAxOTIsIDY1MTA5LCAzMzg1LCAwLCA2NDQzMCwgNTM4MywgMTAyOTQsIDEwMzI2LCAKKyAgICAwLCA1NzM4LCAwLCAzMzM2LCA3ODM1NSwgNTM2MSwgMzYyMywgNDExNTksIDAsIDY4MTEyLCA3ODcyLCA4NTgxLCAwLCAKKyAgICAxMjYwLCAzMTQ5LCA1MzU5LCAwLCAwLCA3OTE0LCA1MzU3LCAwLCAwLCAyNjI0LCA1MzY0LCAwLCAxMTQzMSwgMTIwMDMwLCAKKyAgICA5MTAxLCAxMTA1OCwgNzgyODgsIDAsIDc4MjkzLCA0MjI3MSwgNzgyODksIDY1NzM3LCAxMjA3OTMsIDAsIDY1NTY2LCAKKyAgICA2NzE3LCAxMDYxOSwgNDMzNjAsIDc4Mzg1LCA3ODM4NCwgNzgzODMsIDc4MzgyLCA3ODM4MSwgNzgzODAsIDc4Mzc5LCAKKyAgICA5MzE5LCA3MDk3LCAxMTkwNTUsIDc3OTA2LCAzMjMyLCA3MzgyNCwgNzQ1ODEsIDEyMDYzMiwgMCwgMCwgNDE4ODksIDAsIDAsIAorICAgIDExNjEsIDQxODk1LCA3NDEwMywgOTcwMSwgODYyMiwgMCwgMCwgNzM4MTksIDEyMDU4OCwgNTAxMiwgNzc5MTIsIDQxMzYyLCAKKyAgICAwLCA3ODI5NiwgMTE5MjEsIDAsIDExNzY5LCAwLCA2ODYwOSwgNDEzNjQsIDAsIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIAorICAgIDQxMzY2LCAwLCAzMzU2LCAwLCA5MTcsIDY4NDIyLCAxMTk5MTUsIDExOTkyMywgODE5OSwgNzgzODksIDExOTkxNywgNjc3LCAKKyAgICAxMTk5MTYsIDAsIDExOTkzMiwgMCwgMCwgMCwgMCwgMzM0OSwgNzQxMjUsIDcwMjIsIDg5MjcsIDQ3MzksIDAsIDU4MDIsIDAsIAorICAgIDg2MTUsIDAsIDAsIDQ5MSwgMCwgMCwgMCwgNjU4MzcsIDAsIDg0MjYsIDExMDkyLCA5ODkxLCAwLCA0MjQ5NywgMCwgNzU4NiwgCisgICAgNDIzMDUsIDEwODUyLCAwLCAwLCA0NjA2LCA2ODQ0OCwgOTA5NSwgNzc0MSwgMTI2ODQsIDQxODg1LCAxMDQ2LCAwLCAwLCAwLCAKKyAgICA1ODE1LCA1MTcxLCA2NTUzOSwgMCwgNjkzMiwgNzgzMTUsIDQyMzk0LCA0MTg3OCwgNzQ4NDksIDEyMDYyMSwgMCwgNTE2OSwgCisgICAgMTE5MzUsIDAsIDAsIDMxNzUsIDEyMDgyMiwgMTUzNywgMTIwODA0LCA1MTc2LCA4OTA1LCA0MTM2LCA0ODcxLCA3ODI4NywgCisgICAgMCwgOTgzMywgMCwgMCwgMTEyOCwgNjU5MjAsIDAsIDk3MTEsIDcwNTcsIDk0MDgsIDk0MDksIDk0MTAsIDk0MTEsIDM2NjIsIAorICAgIDk0MTMsIDMzNzgsIDk0MTUsIDk0MTYsIDk0MTcsIDk0MTgsIDYzMjAsIDk0MjAsIDk0MjEsIDU4OTcsIDk0MjMsIDUxNjUsIAorICAgIDUxMjYsIDQxMzg1LCAwLCA0MTM4OSwgOTE3OTM4LCA4OTU1LCAzMzc0LCA5NDAwLCA5NDAxLCA5NDAyLCA5NDAzLCA5NDA0LCAKKyAgICAzNTA3LCA5NDA2LCA3NjI5LCAwLCAxOTkyNSwgNDI2NjksIDY4NDYzLCAxODMsIDQzOTg1LCAyNjMxLCAwLCAxMDYyNywgCisgICAgNDExMzAsIDc4MjYwLCAzOTk2LCAwLCA3ODc3MSwgMCwgMTE5MzEzLCAxMTkzMDcsIDc4NzY4LCA2NTgwLCA0MzMyLCAKKyAgICA2NDgyNSwgNjYzMjksIDEwNzI2LCA2NjY4NiwgNDExMjUsIDU4OTksIDQxMzY1LCA5MTc5MTgsIDEyMDg1LCAwLCA1NzQsIAorICAgIDkxNzkyMiwgNzc4MjUsIDczODI4LCA1NDQ4LCA0MTA1OCwgNTQ0NiwgNzM5MDAsIDQxMzIyLCA0MjIxMSwgNTQ0MiwgNDE5MCwgCisgICAgNzc4MzQsIDc3ODM1LCA1NDUxLCA3NzgzMywgMzYxNiwgNzc4MjgsIDc3ODM3LCA3NzgzOCwgNzcwOCwgNzc4MzYsIDEwODU5LCAKKyAgICA2NTg2NywgMTAzNDUsIDEwNDA5LCA0MTkxLCAwLCA3Nzg0NCwgNzM4MDAsIDQyMTgxLCA3Nzg0MywgNzc4MzksIDIwNjAsIDAsIAorICAgIDc4MzExLCAxMTc4OCwgNjU1ODcsIDY4MTI5LCAxMDQxNSwgNzQxMDIsIDAsIDIwNSwgMCwgMTAzNTEsIDExOTA3NiwgMCwgCisgICAgOTg2MiwgNjU4OCwgNDMyNTcsIDY0Njk3LCA3Mzk5OCwgNDEzNTUsIDU1MDUsIDExOTE1NCwgNTUwMywgODAyMSwgMCwgCisgICAgMTE5MTUwLCA5ODE5LCA0MTM1NywgODAxMSwgNDI4ODUsIDU1MDcsIDEyMDQ0LCAwLCAwLCAxMDAyNiwgNTQ3MiwgNjUxMDgsIAorICAgIDExOTEsIDEzMTA2LCA1NDcwLCAxMDMyOSwgNTQ3NiwgODk5MSwgNjYzMjIsIDY5Nzc4LCA3ODI2NywgNDI4NzQsIDg1NTAsIAorICAgIDQyODc2LCA1NTkyLCAyOTE5LCAwLCAyNjc1LCA1NTk1LCA3ODQxMSwgMCwgNDM2NywgMCwgMCwgNTQ3OCwgNTkwNCwgNTU5NCwgCisgICAgMCwgNzQxNTAsIDcyOTEsIDU1OTAsIDc3ODQ5LCAxMzA2NywgMTE4OTA5LCAxMjAzNzIsIDAsIDk3MzEsIDAsIDY0NjMzLCAKKyAgICA3Nzg1NywgNzc4NTQsIDc3ODU1LCA3Nzg1MiwgNzc4NTMsIDc3ODUwLCAxMDc1MCwgNDM3MTQsIDc3ODU4LCA3NDU0NSwgMCwgCisgICAgMCwgMTI4ODcsIDEwNTUxLCAxOTQ1NjQsIDc3ODY2LCA3Nzg2NywgNzc4NjQsIDc3ODY1LCA5OTI5LCA1MTk5LCA5OTM2LCAKKyAgICAxMTIwLCA0MjM4NywgMCwgMTQ0NCwgOTQ4NiwgNzU1NCwgNjU4MzksIDU1MjUyLCAwLCAxNDQyLCAwLCA1ODk0LCAwLCAwLCAKKyAgICAwLCAwLCA3NDMxMywgMCwgMTMxNjIsIDAsIDMzMzQsIDAsIDExODgwMywgNzc4ODEsIDY2MDIyLCAwLCAwLCAxNjUxLCAwLCAKKyAgICA4ODYxLCAwLCAwLCAxMTQyLCAwLCA4MjcxLCAwLCAwLCAwLCAxMjkwMywgMCwgNDAwMiwgNDM2MjYsIDEwNDQyLCAxMDY3NiwgCisgICAgMzM0NCwgMCwgMCwgMTI5MjAsIDE5NDU2MCwgMCwgMCwgNjY2NDIsIDEyNzcsIDAsIDc4NzEsIDAsIDAsIDc4ODUzLCAwLCAKKyAgICA3ODg1NCwgMTIwMzYwLCAwLCAxMTc4NCwgMCwgNzgwMTIsIDQ3MDAsIDY2MzY2LCA3ODg1OCwgMTIwMzU5LCAxMTAxMiwgMCwgCisgICAgNzg4NTYsIDEyMDM1OCwgNzc4NzksIDQ5NzMsIDg3ODQsIDc3ODc3LCA3NDgwNCwgNzc4NzQsIDc3ODY5LCA3Nzg3MSwgCisgICAgNDI0NDAsIDAsIDQzMTE4LCAwLCA0MjM2NCwgNjc3NCwgNjc3MywgMCwgMTIwMzY5LCAxMDM0NiwgMTA0MTAsIDc4ODU5LCAKKyAgICA5MjQzLCAyNDY0LCAwLCA2MTA4LCAzMzcyLCAwLCA2MjQ3LCA0MzExNywgNzQ1MjYsIDAsIDc0MTY2LCAwLCAxMjAzNTUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDc0MjE3LCAzMzU0LCAwLCA0MTkyLCA5Mjg5LCAxMTg5OTksIDQxMTkxLCAzODc2LCAwLCAwLCAKKyAgICAxMjA2NjAsIDQzNjk2LCA0MzM4MCwgMCwgMCwgMCwgMCwgMTE2MDMsIDAsIDAsIDY1ODksIDAsIDE5NDY3OSwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDI1NzIsIDAsIDEwNjMwLCA3NDgyNywgMTk2MywgMTE4ODg5LCAwLCAxMTY1NCwgMCwgNzU1MCwgMTA2ODYsIAorICAgIDU5MDMsIDAsIDc4MDA5LCA0MTMyOSwgOTY2MiwgOTE3OTM3LCA2NDY5OCwgMzM2NiwgMTAzOTksIDAsIDAsIDExMDEzLCAwLCAKKyAgICA5MTc5MzMsIDAsIDc4NjIxLCAxOTQ2NzIsIDY5MjUsIDAsIDAsIDkxNzkyOSwgMCwgMTE1NjgsIDAsIDkxNzkzMSwgNjQ1NzksIAorICAgIDkxNzkzMCwgNzg1MiwgMCwgMCwgNjc1NCwgNjMxMiwgMCwgNjQ2NzIsIDY1Mjk2LCAwLCAxMTg5NTcsIDAsIDQxNiwgCisgICAgMTIyOTYsIDY4NDU3LCA3MzgzNCwgNjgxNzcsIDExMDUwLCAxMDk4NCwgMCwgMCwgMCwgMCwgMCwgMCwgOTUzMiwgNjYzNTUsIAorICAgIDAsIDAsIDkxNzkyNSwgNjQzNDMsIDE5NTAzMiwgMCwgMTk1MDMxLCAwLCAwLCAxOTUwNTcsIDExNDQ1LCAwLCAxOTUwMjgsIAorICAgIDE5NTA1NiwgMTk1MDI3LCAxMDE4NSwgMTAyMSwgMCwgOTUwNywgMTAyMTAsIDc0NTQ0LCA4MDIzLCAxMjAwLCAxMjI0MywgCisgICAgNzgwMDEsIDUyODIsIDc4MDAzLCAxMjU0MCwgMTE1NDUsIDAsIDEyMDQ5MywgMzM0MywgNDQyNCwgMTEwNDcsIDE4ODUsIAorICAgIDQzMjY4LCAzODk2LCA3ODYyNiwgNjY0OTcsIDI5NDcsIDM5MiwgNzg5NCwgNDM5MSwgNjgxMzksIDAsIDEzMDU5LCA3NDgxNiwgCisgICAgNzc5OTgsIDMzODEsIDc5NDIsIDAsIDY5MjE5LCAwLCA2NDc1NywgMCwgMzkxMywgMCwgMCwgNzgyMzUsIDcwNDQsIDEyNjUsIAorICAgIDAsIDYzMDksIDcwNDUsIDcxNzUsIDcwNDcsIDc4MjM5LCAxMTc5MSwgMCwgMCwgODIyMSwgNzgzMDcsIDQxODY0LCAwLCAwLCAKKyAgICAwLCAwLCAxNjcsIDAsIDc4MzAxLCAwLCA3NDIxMSwgNDE4OTcsIDY4NDc3LCAwLCA5MTc1ODMsIDAsIDAsIDI0OTMsIDAsIAorICAgIDExODgxMSwgMCwgMCwgNjQzNTQsIDAsIDg3NzcsIDAsIDQwNiwgODg4NCwgMjM4NSwgMCwgMCwgMCwgOTE3NTczLCA0MzAzMCwgCisgICAgNDIwMjcsIDEyMTE0LCAwLCA5MTc1NzksIDY0OTM2LCAwLCAwLCAxMjA2MjksIDEwNTYxLCAwLCA4MzY1LCAwLCAwLCAKKyAgICA2NTg0MSwgMTIwNzg3LCAxMTYwMSwgMCwgNzQxMjEsIDAsIDkxNzU3NSwgNzgzNCwgNzQxNTksIDAsIDAsIDEwMjk4LCAKKyAgICA2NjI0LCA0OTA4LCA5MTc1OTYsIDE2MzksIDAsIDAsIDc0MTU3LCA2MzI3LCA2NzI0LCAwLCAwLCAwLCAwLCA0ODE3LCAKKyAgICA3ODQ0NiwgMTk0NzU5LCAwLCA3MDQzLCA5NjAwLCAxMTAyMiwgMCwgMCwgMCwgMCwgMCwgMCwgNzU0OCwgNjQ3OTQsIAorICAgIDQyMDUwLCAxMjI5MSwgNTUyODksIDE5NDc2MSwgMTIzNDMsIDY1NywgMTk1MDU0LCA0MjcwNSwgNDQ2MSwgMTEzNCwgMTgzOCwgCisgICAgNzg0MzgsIDIwNTcsIDAsIDQ0NjgsIDAsIDAsIDAsIDQ0NTYsIDUyMDYsIDEwNzIwLCAwLCA0MjUyMywgMTI3NTIwLCAwLCAwLCAKKyAgICA5MTc1OTUsIDY1NTUwLCAyNjAsIDQ4MTYsIDY3NjU4LCAxMDY4NywgMCwgNDgyMSwgNDQ2NiwgMCwgMTk1MDQzLCA0ODE4LCAKICAgICAwLCA0MTQwMywgMTE5OTc3LCAwLCAwLCA0MTQwNiwgNDMyNzMsIDc0MTYwLCAxMTk5ODMsIDczOTM5LCAxMTk5ODUsIAogICAgIDExOTk4NCwgMTE5OTc5LCA0MTQwNCwgMTE2NSwgMTE5OTgwLCA0NDUxLCAxMzA4NywgMCwgMTEyODQsIDExOTk4NywgCi0gICAgNzM4NTUsIDY1MTU1LCA0MzAxNCwgNTQzOSwgOTM2MywgMCwgMzM3NSwgMCwgNTkwMCwgMCwgNzg4OSwgMjcyMiwgNDIyNjIsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTQzOCwgMCwgNzI4MCwgMCwgMCwgMCwgCi0gICAgNDg2OCwgMTE5OTY3LCAxMTk5NjYsIDAsIDAsIDAsIDQzMTYxLCAwLCAxMTk5NjQsIDAsIDUxODIsIDAsIDEyMDU0MiwgMCwgCi0gICAgMCwgNDIyNiwgMTIwNzk4LCAxMjEzNSwgNTczMiwgNDQ2NCwgMCwgMCwgOTc3LCA0NDU4LCAwLCAwLCA2NDc3MCwgMCwgMCwgCi0gICAgMzQ0LCAwLCAxOTQ3OTAsIDEzOTUsIDY0Mjc5LCAwLCAwLCAwLCA3ODYsIDAsIDQzMTc0LCA2NDM0MCwgMCwgMCwgMCwgCi0gICAgNDMwMjYsIDc2MTIsIDEwMTMyLCA2NDQxMywgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNDk4LCAwLCAxMjA3MzQsIDAsIAotICAgIDExOTE2MCwgMTAyMDQsIDAsIDAsIDAsIDAsIDEzOTksIDAsIDAsIDAsIDg4NTIsIDAsIDI0MSwgMCwgNDkwNywgMCwgMCwgCi0gICAgNzkzMiwgOTcyNywgMCwgNzQyNTUsIDg3NDgsIDAsIDAsIDAsIDAsIDQyNzgwLCAwLCAwLCAwLCA0MjE3LCAwLCA4NjUwLCAwLCAKLSAgICAwLCAwLCAwLCAxMTg4NzIsIDQzMDk5LCAzOTY1LCAwLCAwLCAwLCAxMzMwMCwgMCwgMCwgMCwgNjY1ODgsIDExODk5MSwgMCwgCi0gICAgMCwgNzM4MTUsIDQ0MjAsIDAsIDY0MTAsIDc3NjAsIDAsIDAsIDAsIDAsIDAsIDcyOTQsIDAsIDAsIDAsIDkwNjYsIDAsIAotICAgIDExOTkzLCA0MzE4OCwgMjYyNiwgNzc2MiwgMCwgMCwgMCwgMCwgNDI4MjUsIDQxODU0LCA1MzA0LCAwLCAwLCA2OTE5LCAKLSAgICA4NjE5LCAxMTk2NTUsIDEwMDM4LCA2NjQ1NCwgOTU5MiwgNDI4NTEsIDEyNjk5MywgMTU0MiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzQzMTEsIDAsIDAsIDEwMTgxLCAwLCAwLCAwLCA3Nzc5LCAwLCAxMDE5NSwgOTQ3OSwgNjAyOSwgMCwgMCwgOTY4OSwgMCwgCi0gICAgMCwgODk5MywgNjYzNTgsIDAsIDQyMzc4LCAzMzY4LCA2MDYsIDAsIDc2OTcsIDAsIDAsIDIwMzAsIDAsIDYwMjcsIDgzNzAsIAotICAgIDQzMjIsIDAsIDY1MjA3LCAwLCAwLCAwLCAwLCAwLCAyNzM1LCA0MjgzMSwgMCwgMCwgNzQ4NjYsIDg4ODEsIDExOTA0NywgMCwgCi0gICAgMCwgNzM5NDYsIDAsIDAsIDAsIDY4MTQwLCAwLCA5NTc2LCAwLCAzMzQ3LCA0MTYwLCA1MTU0LCAwLCAzNzk0LCA2NjU2NCwgCi0gICAgNjY1MTQsIDAsIDc3MDksIDQxMTEyLCAwLCA2NjU2MCwgNDIwNDEsIDQ1NzIsIDAsIDY2NTYxLCAwLCA0MTExMywgMCwgCi0gICAgMTYxNSwgNTg1NSwgODA5LCAwLCAwLCAwLCAwLCA1Nzk5LCAwLCAwLCAwLCA3MjYwLCAwLCA0MzAzMSwgNjQ0MjUsIDY1MTI4LCAKLSAgICAxMjcwNjEsIDY0Mzg2LCA2NTI1NywgMCwgMCwgMTIwNjA3LCA5MzQ3LCAwLCA2NTMyLCAwLCAwLCAwLCAwLCA2NTgyOCwgMCwgCi0gICAgMjgzLCA5MTc5MTcsIDAsIDUzMiwgMCwgMCwgMCwgMTIwNjA5LCAwLCAzMzcwLCAwLCAxMTM2MSwgNTQ0MywgMCwgODE1MywgCi0gICAgNzM3NjcsIDAsIDEwNzQxLCAwLCAwLCAwLCAwLCA2NTQ5NSwgNjQ3MDYsIDAsIDAsIDAsIDAsIDk0NjYsIDExOTYwMCwgCi0gICAgOTgyNCwgMCwgMCwgMCwgMCwgOTE1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MzI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjgxNjEsIDY0NTUwLCA1MTg2LCAxMjg5MCwgMCwgMCwgMTIxMDgsIDAsIDY1MTI0LCAwLCA2NjA0MywgMCwgMCwgNDMxMDcsIAotICAgIDAsIDAsIDQyNTYyLCAwLCAwLCAwLCAwLCAxMTQ4NSwgNjEwMywgMTI3MTIzLCAwLCAxMTcxOCwgMCwgMTI4ODksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE2MzAsIDAsIDY1NDgzLCAwLCAxMjU2NSwgMCwgNjU0NzYsIDAsIDAsIDExOTU1NCwgOTI4MywgCi0gICAgNzcwMCwgOTE3NTM3LCA5NjkwLCA2NTQ5OSwgMCwgNjQ1OTMsIDUxMiwgMzM3NiwgMTE4ODYyLCAwLCAwLCAwLCA2MzIsIAotICAgIDEyOTQwLCAwLCA0MjUyOSwgMCwgMCwgNTk1NywgMCwgODkyNiwgMCwgMCwgMCwgMTA3NDUsIDEwMTc0LCAwLCA2NDU4MSwgCi0gICAgNTM4NiwgMTIwNjg2LCAxMTcxMywgMTA2MzMsIDEyMDUzMSwgNTA1NiwgMCwgMCwgMCwgMTIwNzczLCAwLCA5ODEyLCAwLCAKLSAgICA0NDYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDI3OCwgMCwgMCwgMCwgMCwgNjQzODksIDI5NTMsIDczODc5LCAxODAxLCAKLSAgICAxMjgzNSwgOTE3NjI3LCAwLCA3MzgyMywgMCwgNjYzNzUsIDAsIDcwMiwgNDI1NzksIDAsIDAsIDEzMDc0LCAwLCAwLCAwLCAKLSAgICAwLCAxMjEwNiwgMCwgNzQyMDcsIDE3NTUsIDEwNDgyLCAxMjg2MywgMCwgMTE2MywgMjk1MSwgOTUyMiwgNzQwNzksIAotICAgIDE5NTA3NiwgMTIwNjc0LCAwLCAzMzg0LCAxMjA3MjgsIDEwNzAyLCA4MzAsIDAsIDAsIDAsIDg0NTEsIDAsIDAsIDAsIAotICAgIDEyMDc2MiwgMCwgMCwgMCwgMCwgMjkwOCwgMCwgMCwgNjQ5MDIsIDQyNDMsIDAsIDEyMjM5LCAwLCAwLCA0NDQxLCAwLCAwLCAKLSAgICA3Mzk0MCwgNjQzNTIsIDAsIDAsIDQxMSwgMCwgMCwgMCwgMCwgMCwgNDE4OTAsIDAsIDI3MzAsIDQxNjA0LCAwLCA1NDI4LCAKLSAgICAxOTQ3NDMsIDMzNjQsIDQyMjY1LCAwLCAwLCAxMTg4MTYsIDAsIDk2ODQsIDIxNiwgMCwgMTQwMSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTE1OCwgMCwgMTIwNjY0LCA1NzY4LCAwLCAwLCAwLCA0ODQsIDAsIDAsIDAsIDY1ODk1LCAwLCAwLCAzMzM4LCA3MzkzNSwgCi0gICAgNTcyLCA3MDQxLCAyNzM2LCAwLCAwLCAwLCAyNzk0LCA4ODA3LCA2NDQ5MSwgMCwgNTQzOCwgNTIyMiwgNTM4MSwgNDMxMTQsIAotICAgIDAsIDUxOTMsIDUxMjUsIDU0NTYsIDU1MDksIDAsIDE5NDc0NywgOTUzNCwgMCwgMCwgMCwgMzQzMCwgMCwgMCwgMCwgMCwgCi0gICAgOTgxLCAwLCA0MzMwLCAxMjA2NzMsIDEyMDUzNiwgMTgyNCwgMTA5MDgsIDAsIDcwMzQsIDQxNjgzLCA2NDYxNywgMCwgCi0gICAgNzM3NTQsIDM5NTcsIDAsIDY0NTQ3LCAwLCA2NzQsIDYzOTkxLCAwLCAyOTQ2LCA1MzU0LCA1MjUxLCA1MzI4LCA1MzA3LCAKLSAgICAzNzU5LCAxMTQxMSwgODM2NCwgNTEyMywgMCwgNTI4MSwgNTQ2OSwgNTEyMSwgMCwgMCwgMCwgNTEzMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIwNzI2LCAxMjIxLCAyNzMzLCAxMTc0NiwgMCwgNTIxNiwgMCwgMCwgMCwgMCwgMzQ2OCwgMCwgOTIzMCwgNTkzOSwgMCwgCi0gICAgMCwgMCwgMTIwNjc3LCAxMjA3MjksIDcyNzgsIDEwMzIxLCAxMDI4OSwgNjQ2MTMsIDEwMzg1LCA0MTcwNiwgMCwgMCwgMCwgCi0gICAgMCwgMTE3MzksIDAsIDQxOTgxLCAwLCA1OTM4LCAwLCAwLCAxMjQ0OCwgNzU3NiwgMTA0MDEsIDEwMzM3LCA3Mzg1MiwgMCwgCisgICAgNzM4NTUsIDY1MTU1LCA0MzAxNCwgNTQzOSwgOTM2MywgMTI3NTU4LCAzMzc1LCAwLCA1OTAwLCAwLCA3ODg5LCAyNzIyLCAKKyAgICA0MjI2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0MDEsIDAsIDAsIDY4NDU5LCAwLCAwLCAwLCAwLCA2NTQzOCwgMCwgCisgICAgNzI4MCwgMCwgMCwgMCwgNDg2OCwgMTE5OTY3LCAxMTk5NjYsIDAsIDAsIDAsIDQzMTYxLCAwLCAxMTk5NjQsIDAsIDUxODIsIAorICAgIDAsIDEyMDU0MiwgMCwgMCwgNDIyNiwgMTIwNzk4LCAxMjEzNSwgNTczMiwgNDQ2NCwgMCwgMCwgOTc3LCA0NDU4LCAwLCAwLCAKKyAgICA2NDc3MCwgNzQ4MzgsIDAsIDM0NCwgMCwgMTk0NzkwLCAxMzk1LCA2NDI3OSwgMCwgMCwgMCwgNzg2LCAwLCA0MzE3NCwgCisgICAgNjQzNDAsIDAsIDAsIDAsIDQzMDI2LCA3NjEyLCAxMDEzMiwgNjQ0MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDY4NDQ0LCAwLCAKKyAgICAxMjA3MzQsIDAsIDExOTE2MCwgMTAyMDQsIDAsIDAsIDAsIDAsIDEzOTksIDAsIDY1MjE3LCAwLCA4ODUyLCAwLCAyNDEsIDAsIAorICAgIDQ5MDcsIDAsIDAsIDc5MzIsIDk3MjcsIDAsIDc0MjU1LCA4NzQ4LCAwLCAwLCAwLCAwLCA0Mjc4MCwgMCwgMCwgMCwgNDIxNywgCisgICAgMCwgODY1MCwgMCwgMCwgMCwgMCwgMTE4ODcyLCA0MzA5OSwgMzk2NSwgMTE5MTE5LCA2NzE5LCAwLCAxMzMwMCwgNzg0MzksIAorICAgIDAsIDQzMDU3LCA2NjU4OCwgMTE4OTkxLCAwLCAwLCA3MzgxNSwgNDQyMCwgMCwgNjQxMCwgNzc2MCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNzI5NCwgMCwgMCwgMCwgOTA2NiwgMCwgMTE5OTMsIDQzMTg4LCAyNjI2LCA3NzYyLCAwLCAwLCAwLCAwLCA0MjgyNSwgCisgICAgNDE4NTQsIDUzMDQsIDAsIDc4NTE2LCA2OTE5LCA4NjE5LCAxMTk2NTUsIDEwMDM4LCA2NjQ1NCwgOTU5MiwgNDI4NTEsIAorICAgIDEyNjk5MywgMTU0MiwgMCwgMCwgMCwgMCwgMCwgNzQzMTEsIDc4NDk3LCAwLCAxMDE4MSwgMCwgNDM2MjQsIDAsIDc3NzksIAorICAgIDAsIDEwMTk1LCA5NDc5LCA2MDI5LCAwLCAwLCA5Njg5LCAwLCAwLCA4OTkzLCA2NjM1OCwgMCwgNDIzNzgsIDMzNjgsIDYwNiwgCisgICAgMCwgNzY5NywgNjkyMzcsIDY5Nzg3LCAyMDMwLCAwLCA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgMCwgMCwgMCwgCisgICAgMCwgMjczNSwgNDI4MzEsIDc3OTM1LCAxMjcxMjAsIDc0ODY2LCA4ODgxLCAxMTkwNDcsIDAsIDAsIDczOTQ2LCAwLCAwLCAwLCAKKyAgICA2ODE0MCwgMCwgOTU3NiwgMCwgMzM0NywgNDE2MCwgNTE1NCwgNTUyODgsIDM3OTQsIDY2NTY0LCA4NTMwLCAxMjcwNjMsIAorICAgIDc3MDksIDQxMTEyLCAwLCA2NjU2MCwgNDIwNDEsIDQ1NzIsIDEyODc2LCA2NjU2MSwgMCwgNjc1OCwgMCwgMTYxNSwgNTg1NSwgCisgICAgODA5LCAwLCAwLCAwLCAwLCA1Nzk5LCAwLCAwLCAwLCA3MjYwLCAwLCA0MzAzMSwgNjQ0MjUsIDY1MTI4LCAxMjcwNjEsIAorICAgIDY0Mzg2LCA2NTI1NywgMCwgNjg2MTYsIDEyMDYwNywgOTM0NywgMCwgNjUzMiwgMCwgMCwgMCwgMCwgNjU4MjgsIDAsIDI4MywgCisgICAgNjg2NjUsIDc4ODEzLCA1MzIsIDc4NjYzLCAwLCAwLCAxMjA2MDksIDAsIDMzNzAsIDAsIDExMzYxLCA1NDQzLCA3ODc3OCwgCisgICAgODE1MywgNzM3NjcsIDAsIDEwNzQxLCAwLCAwLCAwLCAwLCA2NTQ5NSwgNjQ3MDYsIDAsIDQzMzQ0LCAwLCA3ODg3MCwgCisgICAgOTQ2NiwgNzg4NjYsIDk4MjQsIDAsIDAsIDAsIDAsIDkxNSwgNDM0MjUsIDAsIDAsIDAsIDAsIDAsIDQzMjY0LCAwLCAwLCAwLCAKKyAgICAwLCA3ODg2NCwgNjczMCwgNzg4NjIsIDY4MTYxLCA2NDU1MCwgNTE4NiwgMTI4OTAsIDAsIDAsIDEyMTA4LCAwLCA2NTEyNCwgCisgICAgNDMxMjcsIDY2MDQzLCAwLCA2MzI2LCA0MzEwNywgNzc4MjYsIDAsIDQyNTYyLCAwLCAwLCAwLCAwLCAxMTQ4NSwgNjEwMywgCisgICAgMTI3MTIzLCAwLCAxMTcxOCwgMCwgMTI4ODksIDAsIDAsIDAsIDAsIDAsIDU1MjQ1LCAwLCAxNjMwLCAwLCA2NTQ4MywgMCwgCisgICAgMTI1NjUsIDAsIDY1NDc2LCAxMjAwMTMsIDAsIDExOTU1NCwgOTI4MywgNzcwMCwgOTE3NTM3LCA5NjkwLCA2NTQ5OSwgMCwgCisgICAgNjQ1OTMsIDUxMiwgMzM3NiwgNjgyMTAsIDAsIDAsIDc3ODkyLCA2MzIsIDEyOTQwLCA3Nzg5MSwgNDI1MjksIDc4NTg3LCAwLCAKKyAgICA1OTU3LCAwLCA4OTI2LCAwLCAwLCAwLCAxMDc0NSwgMTAxNzQsIDczNzksIDY0NTgxLCA1Mzg2LCAxMjA2ODYsIDExNzEzLCAKKyAgICAxMDYzMywgMTIwNTMxLCA1MDU2LCAwLCAwLCAwLCAxMjA3NzMsIDAsIDk4MTIsIDAsIDQ0NjAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDY0Mjc4LCAwLCA0MzQ2NiwgMCwgMCwgNjQzODksIDI5NTMsIDczODc5LCAxODAxLCAxMjgzNSwgMTE5MDI5LCAwLCAKKyAgICA3MzgyMywgMCwgNjYzNzUsIDIwODUsIDcwMiwgNDI1NzksIDc3ODg0LCA3Nzg4NSwgMTMwNzQsIDc3ODgzLCAwLCAwLCAwLCAKKyAgICAxMjEwNiwgMCwgNzQyMDcsIDE3NTUsIDEwNDgyLCAxMjg2MywgNzc4OTgsIDExNjMsIDI5NTEsIDk1MjIsIDc0MDc5LCAKKyAgICA3ODI2NiwgMTIwNjc0LCAwLCAzMzg0LCA2OTIyNywgMTA3MDIsIDgzMCwgNzc5MDIsIDc3ODk5LCA3NzkwMCwgODQ1MSwgMCwgCisgICAgMCwgMCwgMTIwNzYyLCAwLCAwLCAwLCAwLCAyOTA4LCAwLCA0MzM4NiwgNjQ5MDIsIDQyNDMsIDAsIDEyMjM5LCAwLCAwLCAKKyAgICA0NDQxLCAwLCAwLCA3Mzk0MCwgNjQzNTIsIDEyNzUxMywgMCwgNDExLCAwLCAwLCAwLCA0MDU2LCAxMTg5OTIsIDQxODkwLCAKKyAgICAwLCAyNzMwLCA0MTYwNCwgMCwgNTQyOCwgMTk0NzQzLCAzMzY0LCA0MjI2NSwgMCwgMCwgMTE4ODE2LCAxOTQ3NDIsIDk2ODQsIAorICAgIDIxNiwgMCwgMTQwMSwgMCwgNDQwMTIsIDAsIDAsIDAsIDkxNTgsIDc3ODQyLCAxMjA2NjQsIDU3NjgsIDAsIDAsIDAsIDQ4NCwgCisgICAgMCwgMCwgMCwgNjU4OTUsIDAsIDAsIDMzMzgsIDczOTM1LCA1NzIsIDcwNDEsIDI3MzYsIDY3NjA1LCAwLCAwLCAyNzk0LCAKKyAgICA4ODA3LCA2NDQ5MSwgNzc4NDcsIDU0MzgsIDUyMjIsIDUzODEsIDQzMTE0LCAwLCA1MTkzLCA1MTI1LCA1NDU2LCA1NTA5LCAKKyAgICA3Nzg0NiwgMTk0NzQ3LCA5NTM0LCAwLCAwLCAwLCAzNDMwLCAwLCAwLCAwLCAwLCA5ODEsIDAsIDQzMzAsIDczOTI5LCAKKyAgICAxMjA1MzYsIDE4MjQsIDEwOTA4LCAwLCA3MDM0LCA0MTY4MywgNjQ2MTcsIDAsIDczNzU0LCAzOTU3LCA2NDM1OCwgNjQ1NDcsIAorICAgIDAsIDY3NCwgNjM5OTEsIDAsIDI5NDYsIDUzNTQsIDUyNTEsIDUzMjgsIDUzMDcsIDM3NTksIDExNDExLCA4MzY0LCA1MTIzLCAKKyAgICAwLCA1MjgxLCA1NDY5LCA1MTIxLCAxMTkyNDUsIDAsIDAsIDUxMzAsIDAsIDAsIDc3OTkwLCAwLCAxMjA3MjYsIDEyMjEsIAorICAgIDI3MzMsIDExNzQ2LCA3Nzk5MSwgNTIxNiwgMCwgMCwgMCwgMCwgMzQ2OCwgNzAzMywgOTIzMCwgNTkzOSwgMCwgMCwgMCwgCisgICAgMTIwNjc3LCA2ODQwMCwgNzI3OCwgMTAzMjEsIDEwMjg5LCA2NDYxMywgMTAzODUsIDQxNzA2LCAwLCAwLCAwLCAwLCAKKyAgICAxMTczOSwgMCwgNDE5ODEsIDAsIDU5MzgsIDAsIDAsIDEyNDQ4LCA3NTc2LCAxMDQwMSwgMTAzMzcsIDczODUyLCAwLCAKICAgICAxMzA1NywgMCwgMTI2OTc2LCAwLCAxMDAwOSwgMCwgNjQzMDQsIDAsIDEyMTY1LCAwLCAwLCA5ODg1LCAwLCA4MDc3LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0MjIwLCAxMDcyNSwgMTA0MzMsIDAsIDAsIDQ5ODcsIDY0NTE5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDk3MCwgMTE3MzMsIDAsIDEyMDc5MiwgMCwgMTk5NDQsIDAsIDkwMDksIDg1NTEsIDAsIDExNDY4LCA3NDAwMywgNzU3NSwgCi0gICAgMCwgMjcyNCwgMCwgMCwgMTIzMTMsIDExOTk0OSwgNTE1LCAxMTk5NDcsIDQyNzkxLCA2Mzk4NywgMTE5OTQyLCAxMTk5NDMsIAotICAgIDExOTk0MCwgMTE5OTQxLCAxMTk5MzgsIDk3NzUsIDQwNDYsIDQ1ODksIDQ1MjEsIDAsIDkxNDEsIDAsIDAsIDI3NDEsIAotICAgIDY0Mzk5LCA2MTk3LCAxMzcwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTg0LCA4NjA2LCAzMzAzLCA0MTM3MiwgMTE3ODYsIAotICAgIDk0NzMsIDY2MjAzLCA2NjE3NywgMCwgMTE1OTMsIDQzMDA3LCA0NDc4LCA2NjE3OCwgMCwgMCwgMjc0NCwgMCwgNDQ3NywgMCwgCi0gICAgODE0LCA0MjA2NiwgNjYxODMsIDY2MjA0LCA2NjE5NCwgMTE5OTYxLCA2NjE5OCwgNDE4ODAsIDY2MTg4LCA2NjE5NywgCi0gICAgMTE5OTU0LCAxMTk1NSwgNjYxOTAsIDY2MTkxLCA0MTExMSwgNjYxODksIDczNzg4LCA3Nzg4LCA0ODQ3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxNTgxLCA2NTM1LCAwLCAxMjk1NCwgNDMwLCAxOTQ5MzQsIDE5NDkzOSwgMCwgMTk0OTM4LCA1Mjc4LCA0OTQ1LCAKLSAgICA0Mjg4MywgNDk1MCwgMCwgMTIwNTQ3LCAwLCA3MjY5LCAwLCA1OTY0LCAxMjkwOCwgMCwgMCwgNzQ3NjQsIDc0NDc3LCAKLSAgICAxMTkxNDYsIDE5NDkzNiwgNDk0OSwgMCwgNDQzLCAwLCA0OTQ0LCA1NDY3LCAxMTk2MDMsIDAsIDY1MTM3LCA2MDQ0LCAKLSAgICA2NTM5MiwgMCwgNDIxMywgMCwgNDEzMDMsIDAsIDE5NDkzMSwgMCwgNDEzMDYsIDczOTg0LCAyNjk4LCAwLCAwLCAxMjA3MiwgCi0gICAgMzE5MywgMCwgNDEzMDQsIDgyNCwgMCwgMTIwOTEsIDExOTgxNCwgMTE5ODEzLCAxMTk4MTYsIDQ2NzMsIDY0ODA0LCA0Njc4LCAKLSAgICAxMTk4MjAsIDExOTgxOSwgNjUwNTksIDAsIDExOTgwOCwgMCwgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCAKLSAgICAxMTk4MjksIDExOTgzMiwgNDY3NywgMTI2ODgsIDMxMDIsIDAsIDQ2NzIsIDExOTgyMiwgMTE5ODIxLCA1NTMxLCAxMTk4MjMsIAotICAgIDQyNTc1LCAxMTk4MjUsIDExOTgyOCwgNDY3NCwgNDU0OCwgMCwgMCwgMCwgMTE5OTQ2LCA4MDI1LCAwLCAxMjcwMjQsIAotICAgIDE4NTUsIDAsIDExOTk0NSwgMCwgMTIwNTU0LCAwLCAwLCAwLCAwLCAyNzQ1LCAxMTc5NywgMCwgMCwgMTE5OTM5LCA0NjU0LCAKLSAgICAwLCAwLCAxOTQ5NTksIDczOTkzLCAxMDUyNSwgNDY0OSwgNjUyMDksIDAsIDAsIDQ2NDgsIDQzMDgwLCAwLCAwLCAwLCAKLSAgICA2MjQ2LCA2NDk1MCwgNzgyOCwgNDY1MCwgMCwgMCwgMTE5MDg2LCA0NjUzLCA3ODIyLCAwLCAwLCA0MzE4NywgODY2OSwgMCwgCi0gICAgMCwgNjUwOTMsIDAsIDAsIDI3MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDYwLCA4NTQ3LCAyNzExLCA0MjE2NSwgMCwgCi0gICAgMTE5MjI4LCA3OTkyLCAwLCAwLCA0NjYyLCAwLCAwLCA5MTQ5LCA5MTQ2LCA1OTksIDQ2NTcsIDE5NDk2MywgMTIwNzU0LCAKLSAgICAxOTQ5NjIsIDQ2NTYsIDEwMTMwLCAwLCA3ODExLCA0MDk5NCwgMTk0OTY1LCA2NDE0LCA1OTY3LCA0NjU4LCAzNzI1LCAKLSAgICA1NzEzLCA1ODE0LCA0NjYxLCA0MjQzNCwgMCwgMCwgMCwgNjQ5MDQsIDkwMjYsIDEwODMzLCAwLCA3NTQ3LCA0ODY3LCAwLCAKLSAgICAxMDAwOCwgMTAyMjIsIDMwNTQsIDE5NDk1NiwgOTc0NCwgMCwgNzYwNSwgNDYyMiwgMTE5NjU2LCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5MDQ1LCAwLCA0MjI1LCAxOTkyNiwgMCwgMTI4ODAsIDY1MzA3LCA0NjE3LCAwLCAwLCAwLCA0NjE2LCAxMDUxOCwgMTA0MjMsIAotICAgIDEwMzU5LCAwLCA1OTU4LCAwLCAwLCA0MjE1LCA5Nzg5LCA5MTc5NDEsIDQzMjEsIDQ2MjEsIDAsIDQxMzEzLCA1MjIsIAotICAgIDUzNjgsIDAsIDY1ODAzLCAwLCA1MzY2LCAxMjIwMSwgNTM3MiwgMCwgMCwgMCwgNzcyMCwgMCwgMjY5NiwgMCwgMCwgNDYzOCwgCi0gICAgMCwgMTc5MCwgMCwgNTk2NSwgNjQzNjMsIDY2NTY5LCAwLCAxOTQ5NjgsIDUzNzYsIDE4MzUsIDUzMzUsIDE5NDk2NiwgMCwgCi0gICAgNDYzMywgMCwgNjgxMTksIDExODAsIDQ2MzIsIDAsIDUzODcsIDUzMzMsIDAsIDAsIDQyMDk0LCA1MzMxLCA0NjM0LCAKLSAgICAxMTkyOCwgMCwgNTMzOCwgNDYzNywgMCwgNTk3MSwgNDI0MTQsIDAsIDEyNjgsIDY1MDk3LCA0MjM2MSwgMCwgMCwgNzM4NTMsIAotICAgIDE0MjcsIDAsIDAsIDU5NzAsIDM0MzEsIDAsIDEwMzU4LCAxMDQyMiwgNDc1OCwgMCwgMTYwOCwgMjczOCwgMCwgMTA0NTUsIAotICAgIDQ3NTMsIDc0MDI2LCAxMTM0NCwgNDIyMiwgNjI0MCwgNTIzMSwgNzQzODQsIDAsIDAsIDYyNDgsIDAsIDAsIDAsIDQyMzE4LCAKLSAgICAwLCA1MjI5LCA0NzU3LCAwLCAwLCAyNzI4LCA0NzUyLCA2NDU2MywgNjUyMzUsIDUyMzQsIDAsIDAsIDAsIDEwNzEzLCAwLCAKLSAgICAwLCAyNjIyLCA3NDYwLCAwLCAwLCAwLCA4OTU0LCA3NDc2MCwgNjUxODksIDI2MzIsIDAsIDEwMTA4LCAxMDExLCA1NTc0LCAKLSAgICAxODUzLCAyNzA5LCA2NTEzOSwgNTU3NywgMCwgMCwgMTE4ODcxLCAwLCA4OTY1LCA3NjM1LCA0MjE3NywgNTMxNiwgMCwgCi0gICAgNTMxNCwgNjQ1MSwgNTU3MiwgMCwgNTMxMiwgMCwgNTUyNSwgNTMzMCwgNTMxOSwgMCwgMCwgMTk0OTA3LCAxMTkwMTYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDE5NTAwOSwgMCwgNzQwMjIsIDAsIDY0NjA5LCAwLCAwLCAwLCA1NzIxLCAwLCAxMDM5OCwgODYzMiwgCi0gICAgNjY0NjUsIDExMjY3LCA3Mzk2MSwgMCwgNTcyMCwgMCwgMTY5MiwgNDIxOSwgNDYxMCwgODY5NiwgNDMwNSwgMCwgNDYwOSwgCi0gICAgMCwgNDYxNCwgNTQxLCAwLCA1Mjg3LCA1MzA5LCA1Mjg1LCAwLCA1OTYxLCA0NjQ3LCA1NiwgNDIxNiwgMTA1NzcsIDQxMzgxLCAKLSAgICA2MDEsIDQ2MTMsIDAsIDAsIDAsIDQ2MDgsIDY0MjYwLCA0MTEyNCwgNTE5MCwgNjc2MjgsIDAsIDY4MTQ1LCA3MDg2LCAwLCAKLSAgICAxMTkyNDMsIDY3NjIwLCAwLCAyNzM0LCAxMTA3NCwgMCwgNjc2MjcsIDQzNTkzLCAwLCA2NzYyNSwgNTk2MCwgMCwgODk5MiwgCi0gICAgNjUyOTMsIDAsIDE3ODIsIDY3NjIyLCA2ODExNCwgMTE5OTUwLCAwLCA2ODE4MCwgNTUwMSwgMTE5OTUyLCA0MjUwOCwgCi0gICAgNzQ0MiwgMTIwNzQ5LCAzNTksIDQxMjUzLCAxMTk5NTcsIDYyMzksIDExOTk1NiwgNDEyNTYsIDAsIDY4MTM0LCAwLCAKLSAgICA3NDIwOSwgMCwgOTM0NiwgMTE4OTA0LCA0MTI1NCwgMCwgNDMyOTEsIDM3NjcsIDU3MzcsIDAsIDQ4NjUsIDAsIDU3NDAsIDAsIAotICAgIDU3MzYsIDQzNjgsIDAsIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDAsIDQ4NjksIAotICAgIDEyMDU2MywgMCwgNDIyMywgMCwgNjY1MCwgMCwgMCwgMCwgMCwgNDg3MCwgMCwgNzQ4MDUsIDY2NTY2LCAwLCAxMjA3NTgsIAotICAgIDAsIDAsIDAsIDEwMTIyLCA0ODY0LCA2NjU2OCwgNDE0NCwgNzkzNywgMCwgNjI0NSwgMCwgMjczMiwgNjY0NTksIDc0NSwgMCwgCi0gICAgMTk1MDk3LCAwLCA0Nzc3LCA3ODIxLCAwLCAwLCA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCAwLCA0Nzc4LCAKLSAgICAwLCAxMDg2MywgMCwgNDc4MSwgMCwgNjQ0MDcsIDAsIDAsIDg1NzcsIDAsIDExODk2NCwgNDMyODUsIDEwMjE2LCA0NzgyLCAKLSAgICAwLCAwLCAxMjA3NTcsIDkxNzkyNCwgMTIzMjUsIDAsIDg3MTcsIDAsIDAsIDQ3NzYsIDAsIDExNDkyLCA4NzAwLCAwLCAKLSAgICAxMzE3NiwgMCwgMTA0MjYsIDAsIDkxNzU5OSwgMTAzNjIsIDAsIDE3MTUsIDQ4NDksIDgyNDIsIDk1NjEsIDczOTIyLCAKLSAgICA0MzI3OCwgNDI2MzUsIDAsIDAsIDU5NjMsIDkxNzkyNiwgMCwgMCwgNDg1MCwgMCwgMTYwNywgNDY2LCA0ODUzLCAxMTg5OTUsIAotICAgIDQ4NTQsIDAsIDUxNjQsIDAsIDEzNTAsIDUxMjQsIDY0NDIwLCAxOTkzLCA1MzYyLCA4NDcxLCAyNzA4LCAwLCAxMjQ0NSwgCi0gICAgMzc4NSwgMjM0LCAzMTk5LCAwLCA0MTI2OCwgNDg0OCwgMjUzMCwgMCwgNDc5OCwgMTk2NCwgMCwgNzM3NjIsIDEwNDU4LCAwLCAKLSAgICA4NTc2LCAwLCAwLCAyNzA0LCA0Nzk0LCAwLCAwLCA4MzIyLCA0Nzk3LCA3NDA3NCwgMCwgMjY5NCwgNDc5MiwgMCwgMjQzOSwgCi0gICAgNjUxMDQsIDAsIDAsIDMwMywgMCwgMCwgMCwgMjQzNywgMCwgNDIyMSwgNDg0NCwgMTE4ODY5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0MzI5MiwgMCwgMjQ0MSwgMTA3MzksIDY1MDkwLCAwLCAxMTkzMjcsIDAsIDI0NTEsIDI3MTQsIDExOTMyNiwgMCwgMCwgCi0gICAgNDkzNywgNzQ1NDEsIDc1MywgNTg0OSwgMTA1OTcsIDQzMDg5LCAxMTcyMiwgOTI0OCwgMCwgNDI4NzksIDExNzI1LCAwLCAwLCAKLSAgICAyNzI2LCAzMTA3LCA3Mzk1OCwgNDk0MSwgNjQ5MzcsIDkxNzUzOCwgOTE0MCwgMTQwOCwgNTI2MSwgNDE0MTIsIDAsIDE4MSwgCi0gICAgMCwgNDk0MiwgOTUzOSwgNDkzOCwgMCwgNjUyMDEsIDUyNTksIDkzNjksIDY0MTg1LCA0MTQyLCA1MjU3LCAwLCAwLCA0OTY0LCAKLSAgICA1MjY0LCA2NDE3OCwgNjQxNzcsIDEyOTc5LCAwLCA2NDE4MiwgNjQxODEsIDY0MTgwLCA2NDE3OSwgOTQ4MiwgNDg3MywgCi0gICAgNDEyMzEsIDE4MjIsIDQyNTI2LCAwLCAxMjc1OCwgMzg2NSwgMCwgMCwgMTA1MDAsIDAsIDAsIDAsIDAsIDk4MzAsIDAsIAotICAgIDM4OSwgMTA4OTMsIDc1MjEsIDAsIDQ4NzIsIDU0NjMsIDAsIDMxMjUsIDk1NjcsIDAsIDQ4NzgsIDU0NTksIDQ4NzQsIDAsIAotICAgIDk1NTcsIDU0NjUsIDAsIDAsIDExNDk0LCAwLCA5NTYzLCAxMDg2NSwgNzQ1NzAsIDQzMjc5LCA2NDE4NiwgMCwgMCwgCi0gICAgNjQxOTEsIDY0MTkwLCA4ODk4LCA2NDE4OCwgMCwgNDEwMzAsIDAsIDAsIDkxNzgzNSwgMCwgOTE3ODM0LCAwLCA5MTc4MzcsIAotICAgIDQxMDMxLCAwLCAxMTk2MCwgMCwgMzA4MiwgMCwgMCwgMCwgMTA1NzMsIDAsIDcwNzksIDU4NTYsIDEyNzA0MywgNTE2MywgCi0gICAgMTI3MDQyLCAwLCAxODE3LCA2NjcyNCwgMCwgMCwgMTA1NjQsIDc3NjMsIDEzMDc3LCA0MTgxMywgNDQwMCwgNDE3NDUsIAotICAgIDY0MjA3LCAxMDI3NSwgODkyNSwgMTAzNzEsIDEwMzA3LCA0MTgxNCwgNDI0OCwgMCwgMCwgNDU0MSwgNjI5OSwgNjQyMDQsIAotICAgIDY0MjAzLCA2NDIwMSwgNjQyMDAsIDY0MTk5LCA2NDE5OCwgMCwgNDIxNTYsIDAsIDAsIDY0MTkzLCA2NDE5MiwgMCwgMCwgCi0gICAgNjQxOTcsIDY0MTk2LCA2NDE5NSwgNjQxOTQsIDEzMjgyLCA2NDE3NSwgNjQxNzQsIDY0MTczLCAwLCA4NDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDI1NDMsIDEyMTYzLCAzMTA4LCA5NzQ1LCA2NDE2NywgNjQxNjYsIDY0MTY1LCA2NDE2NCwgNDE3NDMsIDAsIAotICAgIDY0MTY5LCA2NDE2OCwgNjQ5NDksIDEwOTcyLCAxMDI1MSwgMTAyNDcsIDQyNzY4LCA3MTUsIDY0MTYxLCA0MzI5OSwgOTQ1MywgCi0gICAgNTM0OCwgMTA5NDMsIDEyMDM3OCwgMCwgMTEzNTIsIDU1MCwgOTkxMCwgMCwgMCwgNjY1NzksIDExNTUxLCAwLCAwLCA5NTA0LCAKLSAgICA3MTg3LCAwLCAxMDM3MywgMCwgMTIwNzkxLCAxMDI2MSwgMTAyNTMsIDY0MDQsIDEwMjc3LCAwLCAxMTk4NCwgMTU1MiwgCi0gICAgNjUyMjIsIDY5OTgsIDAsIDAsIDMxMjgsIDQ3ODksIDUwNjcsIDUwNjYsIDExODg0OSwgNDc4NCwgMCwgODgyNywgMTE0NiwgCi0gICAgNTA2NSwgMCwgMCwgNjgxMzYsIDAsIDAsIDUwNjQsIDI0MzEsIDAsIDk0NTAsIDE4MDksIDAsIDAsIDAsIDUwNjIsIDEyNjQsIAotICAgIDY0ODE3LCAxMzI1NCwgMTE2OTcsIDAsIDk3ODUsIDY0NzE2LCAwLCAzOTMzLCA3NDU1OSwgNDc0MCwgNzk1NCwgMCwgMCwgCi0gICAgNDI2MDksIDAsIDc0MTc1LCAwLCAxMjcwMTYsIDAsIDAsIDQyMTMwLCAwLCA1MTUxLCA5MTc4MzEsIDkxNzgyMywgMCwgMCwgCi0gICAgMCwgNzYyMCwgMzgwMCwgNjUxMjIsIDAsIDAsIDgzNTUsIDc4NTQsIDAsIDk1NCwgNjQ5MjcsIDQxODUsIDQxMDQ1LCAwLCAKLSAgICA0MTQzOCwgNDE0MzksIDczOTc4LCAxMDcxMSwgNDU5MywgMCwgMTIwNTg0LCAwLCA2NDc3NCwgMTMzMDksIDEwNTMyLCAKLSAgICA2NjcyNywgMCwgMCwgMCwgNjQ3NTksIDAsIDUxNjYsIDk4ODgsIDAsIDUxNDgsIDQyODM0LCAwLCAxMjA2MzQsIDExODk0NiwgCi0gICAgNjQxNDAsIDAsIDY0MTMxLCAzMTE5LCA5MTc4MTQsIDAsIDMwNjAsIDY0MTM1LCA5OTg2LCAwLCAwLCA2MzYsIDExNjk4LCAwLCAKLSAgICAwLCA5OTE2LCAxMTcwMSwgNzgzNiwgMCwgNjQxMzcsIDgzMjAsIDExODk2OSwgODg2MywgMCwgMTE5OTYwLCAxNDc3LCAKLSAgICA0MzI4OSwgMCwgNzQzNTgsIDg2MTgsIDAsIDk5MDgsIDAsIDAsIDAsIDM5MzcsIDEyMzEyLCAwLCAwLCAwLCA2NDc4MSwgCi0gICAgOTEyLCAxMDQ5OCwgNDUzNiwgMTE5OTYzLCA3NDUzMiwgMCwgNjI0NCwgMCwgMTk0NTgwLCAzOTM1LCAxMjA2NjUsIDAsIDAsIAotICAgIDExOTUwLCA1MzkyLCA0MjI0OCwgNjUxMjksIDAsIDUzOTcsIDAsIDEyMDQ2LCAxMjU5OSwgMCwgMCwgNTM5NSwgMCwgNTM5MywgCi0gICAgMzU0LCAwLCAxMTk5NDgsIDAsIDAsIDAsIDQyMDM5LCAwLCAwLCA2NDE0MiwgNjI2LCAwLCA1ODk1LCAwLCAwLCA1NzgwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0MzI5NywgMCwgNDMxMSwgNDY0NCwgODgxOCwgMCwgMCwgMCwgNzM4MTgsIDM5MTgsIDY2NDUyLCAKLSAgICAzNzk3LCAxNjQ0LCAxMTk5NDQsIDk2NTgsIDQxNDAsIDExMzg1LCA2NTk0NywgNjQ1NSwgOTAzMCwgODEzLCAwLCA2ODEzMSwgCi0gICAgNDE0NiwgMCwgNTM2MCwgMjQ2NiwgMCwgMCwgMCwgNjI0OSwgNDIxMTcsIDAsIDAsIDAsIDAsIDc0MDQ2LCAxMjA1ODMsIAotICAgIDQ5MTEsIDk4OCwgOTE3ODA5LCAwLCAwLCAwLCA3MDU0LCA2NDE0NywgMCwgNjQ5MjAsIDkxNzgxMiwgOTE3ODAzLCAKLSAgICAxMTg5MzMsIDEyMDM0OSwgMCwgMCwgMTE5ODEsIDEyMjAyLCAwLCAxMTAzMiwgMTIwNzI1LCA2MDkzLCAxMTYwOCwgOTc1LCAKLSAgICAwLCA2NTg0MywgMTcwLCAwLCAwLCA0MTY5LCAwLCA0MTg1OSwgNjA1OCwgMTIwNDAxLCAwLCAxMjA2NTcsIDAsIDAsIDAsIAotICAgIDk4MTgsIDEwMTc4LCAxMDMyNCwgNDIxMDYsIDU4OTgsIDc0NTQwLCA0NzM4LCA0MTg1NiwgNzA2MiwgOTE3ODY1LCA0NzM3LCAKLSAgICAxMTc3OSwgNDc0MiwgMTIwNTY0LCA5MTc4NjYsIDczNzM2LCAwLCA5ODI1LCA2NDQ4LCAxMjcwMCwgMTI3MDA4LCA0ODMxLCAKLSAgICAwLCAwLCAwLCA1MzAwLCA0NzQxLCA0MjEwOCwgMCwgNjQxNTksIDQ3MzYsIDY0MTQ4LCAwLCA4NDksIDAsIDAsIDQzMjg4LCAKLSAgICAwLCA2NjYyMCwgMCwgMCwgNjU1NDksIDk0OTYsIDY0NTk4LCAwLCAwLCA3ODc2LCA2ODEzMiwgOTE3ODcyLCAzOTI4LCAKLSAgICA5MTc4NzAsIDY1MjgzLCAxMDcwNiwgNzE5OCwgMCwgNDg0MiwgMTIwNTMsIDAsIDAsIDQ4NDEsIDAsIDQxNzEsIDEyMDA4LCAKLSAgICA2MjUxLCAzOTIzLCAxNDkwLCAwLCAxMTk1OTEsIDAsIDQwOTcyLCA1MjQ1LCAwLCAxMDExNCwgNDIwMDEsIDQxODg4LCAKLSAgICA0ODQ1LCA4MzMyLCA0MDk3NCwgMCwgNDg0MCwgOTA3NywgOTE3ODUxLCAxNzQ3LCA5MTc4NDksIDQ4MjUsIDAsIDkxNzg1MiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTg1MCwgMTE4OTM3LCAzNjcsIDE0NzIsIDkxNzg1OSwgNjY4NywgMTI3NCwgMCwgCi0gICAgNTkwNSwgMTIzMzksIDg5MTksIDczOTUzLCAxMDkwNywgNjUyNjEsIDExMDIzLCAxMTk1NTksIDQ4MzAsIDkxMzQsIDAsIAotICAgIDY0MTI2LCA0MzAxMSwgMCwgMCwgNjQxMDEsIDAsIDAsIDQ4MjQsIDEwNjE0LCAxMjAzOTAsIDAsIDE4ODgsIDE5NjAsIAotICAgIDc4NjEsIDkxNzg1NiwgMCwgNDE4MzYsIDQzMDEyLCA2MDUyLCA2MDY0LCA1NCwgNDMwMDksIDEyMjE0LCAwLCA2MjExLCAwLCAKLSAgICAzNTgsIDQxOTk3LCA0MTgzMywgMTE0NDIsIDEwNzU4LCA2NTc3NCwgMCwgMTIwMzg0LCA2NDExNSwgMTIwMzg1LCAwLCAwLCAKLSAgICAwLCAxMTkwNTMsIDAsIDEyNzY1LCA2NDEyMSwgMTI2OTk4LCAxMjk2MiwgMCwgMCwgNDAxNywgMTI4MjcsIDUyNDEsIAotICAgIDEyMDM5MiwgMCwgNDExMTgsIDM5MjQsIDAsIDExMzY2LCA5MTc4NDMsIDAsIDAsIDkxNzg0NiwgNDExMTYsIDkxNzg0NCwgCi0gICAgOTE3ODQ1LCAwLCAxMTM2MywgMTIwNTcsIDExOTE3LCAxNTY3LCA3NDAwMCwgNDcyMSwgMCwgNjYyMDIsIDg5NTcsIDQxMzksIAotICAgIDAsIDAsIDAsIDAsIDAsIDEyNzQwLCAwLCA0NzIyLCAxMjc2MSwgMCwgMTI3NTksIDQ3MjUsIDAsIDQ3MjYsIDAsIDAsIDAsIAotICAgIDkxNzkwNCwgOTE3OTA1LCAwLCAxMjc1NSwgMTI3NjIsIDQwMTUsIDAsIDgwNTIsIDQ3NiwgMCwgMCwgMCwgNjQyMTIsIAotICAgIDQxMDIwLCAxMzgyLCA2NDIwOSwgNjQyMTYsIDY0MjE1LCA2NDIxNCwgMTY1NiwgNDE4MzEsIDAsIDAsIDQxODQzLCA4NzIwLCAKLSAgICAzOTA4LCAxNDUyLCAxMzExMSwgMCwgNjQwNjcsIDAsIDg1NTIsIDY0MTEzLCA0MTg0NSwgMzg0OSwgMCwgNjYyMzIsIDk3NzgsIAotICAgIDEyMDA2NiwgNTg5MSwgNzA2NCwgNTUsIDc0NDM3LCA5MTc5MTEsIDAsIDAsIDc5MzUsIDY3NTg2LCAwLCAxMTE0LCAwLCAKLSAgICA2NzU4NSwgMTIwMDUyLCAxMjAwNTMsIDEyMDA1MCwgMTIwMDUxLCAzOTM4LCAxMjAwNTcsIDY1NDE3LCA2NDcxNywgCi0gICAgMTIwMDYwLCAxMjAwNjEsIDY1NDE1LCAxMjAwNTksIDYyOTIsIDY1MzAzLCA3OTU1LCA2NDUyLCA0NzEzLCA5MTc4ODcsIAotICAgIDY2MjQ5LCA5MTc4ODUsIDkxNzg5MCwgOTE3ODkxLCA2NTE1MiwgNzE5LCAxMjAwNDQsIDEyMDA0NSwgMTIwMDQyLCA0MTk0NCwgCi0gICAgNDUzMiwgNjU0MTIsIDEyMDA0NiwgMTA4NjgsIDQ3MTcsIDIzNDksIDU5MDIsIDY2NDUwLCA0NzEyLCA5MTc5MDIsIAotICAgIDkxNzg5OSwgOTE3OTAwLCAwLCA4MTU1LCA0NzE4LCAzOTQyLCA0NzE0LCA5NjI1LCAwLCAwLCAwLCAxMjAwNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNjU0MTQsIDY0NTQsIDEyMjksIDAsIDY2NDM3LCA2NjAyNSwgOTE3ODk0LCAwLCA0MjUwMCwgMTIwNTA4LCA0ODA5LCAKLSAgICA5NjIzLCA5MTc4NzQsIDkxNzg3OSwgOTE3ODgwLCA5MTc4NzcsIDkxNzg3OCwgNjU0MDUsIDY4MTU5LCA5MTc4ODEsIAotICAgIDkxNzg4MiwgNTM2NSwgNDU0NSwgODkwMSwgOTE3NTY2LCAxMTk1NTUsIDQ4MTMsIDAsIDAsIDU5MjUsIDQ4MDgsIDY0MzMwLCAKLSAgICAwLCA2NTQ3NSwgMCwgMCwgNDgxNCwgMCwgNDgxMCwgMCwgMCwgNjQ5MjgsIDEwNTQzLCAwLCAzNTIyLCAwLCA0MTQsIAotICAgIDY1NDA0LCAwLCAwLCA2NDU2LCA3MzgyMCwgMCwgMTE5MDUsIDkxNzg4MywgMCwgMCwgMCwgNzQ0OTUsIDAsIDAsIDAsIAotICAgIDExODgyMCwgOTc1MSwgNjU0MDcsIDAsIDExNzcwLCAzOTE5LCAwLCAwLCA2NTA2MSwgMCwgMCwgMCwgMTIyMzUsIDAsIDAsIAotICAgIDAsIDY2NTc2LCAwLCA2NDA4MCwgMCwgNjQwOTAsIDAsIDAsIDEwMTYyLCAxMDMxMCwgMCwgODQ1NCwgMCwgNDIwMzgsIDM4NywgCi0gICAgNDEzNjMsIDEyNzM3LCAwLCA0NzgwLCAwLCAwLCA2NDMxMCwgNjQ2MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDg4OTYsIDAsIAotICAgIDM3NSwgNjk3NiwgMCwgMTE5MDA1LCAwLCAwLCAwLCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAKLSAgICAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgMCwgMCwgMCwgMTMxNTAsIAotICAgIDY0NDkyLCAwLCAwLCAwLCAxMjkwMiwgMCwgNDI4OTEsIDY2MzI3LCA3NDI5OCwgMCwgMTA3OTksIDAsIDI1ODcsIDY2MzcyLCAKLSAgICAwLCA0MTkzLCAxMjAzMzQsIDQyNDEsIDAsIDc5OTgsIDAsIDAsIDAsIDAsIDIzMTYsIDExODgyMSwgMCwgMCwgMCwgNjQyOTcsIAotICAgIDc0Nzk5LCAwLCA3NDE0MCwgMCwgNTM3MywgMCwgMCwgMzc2MiwgMTAwMTUsIDAsIDExOTIzMiwgMCwgNDE1OTAsIDAsIDAsIAotICAgIDM3ODAsIDc0ODUsIDU3NzksIDAsIDQyMDM3LCAwLCAzOTA2LCAxMjM0OSwgMCwgODMyNiwgMCwgNjU0OTgsIDM3NjMsIAotICAgIDY5ODMsIDU2MTgsIDAsIDM3NzksIDAsIDQzNjEzLCAwLCAwLCAwLCAwLCAwLCAwLCAyODAsIDc0NTU4LCAwLCA2ODEzOCwgCi0gICAgMTMwNzIsIDE4OTQsIDAsIDAsIDY1NDc4LCA0MzMxMCwgNzIzMSwgMCwgMTE3NzMsIDAsIDAsIDAsIDAsIDI1NTEsIDAsIAotICAgIDY0NTMsIDEwMjAwLCA2MjM1LCAwLCAwLCAwLCAwLCA0NDcwLCAwLCAwLCA3NzgwLCA1MzY5LCAxMTg5NTgsIDUyNDksIDAsIAotICAgIDUzNjcsIDg3NTYsIDAsIDAsIDUzNzcsIDEyMDU4NSwgNjgxNDMsIDE2ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxNjk3LCAKLSAgICA0MTMxOSwgMTMwMCwgMTA2NTAsIDQxNjkyLCA2NDUwNSwgNDY2OCwgMCwgMTE5NjI0LCAxNDY1LCAxMDg1MCwgMzk0MywgMCwgCi0gICAgNDEyMDUsIDAsIDAsIDAsIDAsIDUzNTIsIDAsIDAsIDg4MzksIDQxMzE0LCAwLCA3Nzg1LCA0MTIwNCwgMCwgNDEyMDksIDAsIAotICAgIDAsIDQzNjA3LCAwLCAwLCA1NDIwLCAzODk3LCAwLCAwLCA3NDQxNywgNDAxOCwgMCwgNjgxMjcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI1NjEsIDAsIDM1NDIsIDQxOTE1LCAxMjA3NiwgNzk1MSwgNjgxNTIsIDExODg1NywgNTMwMywgNjI3NiwgMTcwNiwgMCwgMCwgCi0gICAgNzQxMTYsIDAsIDY1MTUwLCA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAxMDUwNiwgMCwgCi0gICAgMCwgMTA3NTMsIDEwODMwLCAwLCA2MTUsIDY0NDkwLCA3NTc0LCAwLCAwLCAwLCAxMjkwOSwgNDMwMTYsIDY0NTU5LCAKLSAgICAxMjcwMjgsIDAsIDAsIDAsIDIwMjAsIDAsIDQwMjIsIDAsIDAsIDAsIDAsIDQxNjkxLCAwLCAwLCAwLCAwLCA2NDYyMiwgCi0gICAgOTA3MCwgMCwgMCwgMzkxMSwgNDI4MjksIDQzMTIyLCAxMDMzLCAwLCAwLCA3MDAwLCAzOTA0LCAwLCAwLCAwLCAwLCAKLSAgICAxMjcwMTIsIDEzMTIzLCAxMDg0NiwgMzQ1MCwgMCwgMCwgMTE4ODA3LCAwLCA0Mjc3OCwgMTAwMDAsIDQxMDg4LCA0NDksIDAsIAotICAgIDM3NzcsIDAsIDAsIDk2MzYsIDAsIDEwNzM4LCAwLCA5MzY3LCA1OTMsIDQxMDg1LCAzOTk5LCA2NTIyNiwgNDE3MTMsIAotICAgIDEyNzY0LCAwLCA2NDQwOSwgMzU5NiwgMCwgMCwgOTc2MywgMTIwMjgwLCAxMjAyODMsIDEyMzQ3LCAxMjQsIDEyOTgxLCAKLSAgICA0MTEyNywgMTIwMjc4LCAwLCAwLCAwLCAwLCAxMDgyMCwgMCwgMCwgMCwgMTc2OSwgNDE3MTUsIDI0NjMsIDAsIDAsIAotICAgIDEyNzcwLCAwLCAxNTM4LCAwLCA0MzEyNCwgMCwgMTk1MDU4LCA3Nzk1LCAxMjAzMDAsIDAsIDQ4MjgsIDEyNTgsIDAsIAotICAgIDIwMDYsIDAsIDAsIDk0OTgsIDEyNzAzMiwgMTI3MDMzLCAxMjAyODksIDEyMDI4OCwgMzkzOSwgMTIwMjkwLCA4ODQ2LCAKLSAgICA4OTQzLCAxMjAyODcsIDEyMDI4NiwgMjY1MCwgNDQ5MSwgMTk2MSwgNDI2MDIsIDExNTI1LCAxMjAyOTIsIDE5NTksIAotICAgIDEyMDI5NCwgMCwgMTE3NzQsIDQxMDE2LCAwLCAwLCAwLCAxNTExLCA5MzI0LCAwLCAxMDUxOSwgNjYzMzEsIDM0NTQsIAotICAgIDE5OTMwLCAwLCA0MTAxOSwgMCwgMCwgNjUyOTIsIDAsIDEyODYyLCAwLCAwLCA0MjE0MywgNDE4MjgsIDAsIDY1NTMxLCAwLCAKLSAgICAxMTg4NzksIDAsIDAsIDAsIDQxODI2LCA4ODY1LCA2NDAyLCAwLCAxMzI3OSwgNzkxNywgMTIwMzQwLCAwLCA3NzMzLCAwLCAKLSAgICA0OTk4LCAwLCAwLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgMCwgNDAxMywgMCwgMTA4ODEsIDAsIDAsIDAsIDc0Nzg4LCAKLSAgICAyMDE0LCAwLCAwLCA5NzY1LCAwLCAwLCAwLCAxOTUwNTksIDAsIDY1MjgxLCAwLCAxMDk0OSwgMCwgMCwgMCwgMjAxNSwgMCwgCi0gICAgMCwgMCwgNjYzMTgsIDc0ODI0LCAwLCA0MjUxNywgMCwgMCwgMCwgMCwgODA5NCwgNjQ0NjgsIDY1OTA5LCA2NDc0LCA3OTQsIAotICAgIDAsIDEyNjU2LCAwLCAxMTkzNTMsIDAsIDE2NjUsIDAsIDQ4MzMsIDAsIDExOTM1MSwgMCwgMCwgMTg5LCAxMjYxMSwgMCwgMCwgCi0gICAgMjg1OSwgNDgzOCwgMCwgNDgzNCwgMCwgMCwgMCwgNDgzNywgMCwgNzcwLCAwLCA4MTEsIDAsIDQxMDQyLCAwLCA0MTMxOCwgCi0gICAgNjQ0MjcsIDAsIDAsIDAsIDM4OTUsIDAsIDc0MzQxLCAzOTc2LCAwLCA0Mjg1OSwgMTAxOTMsIDMxMTYsIDc3NDcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQxODc3LCAwLCAyODcxLCA2NDYxNCwgMCwgOTk5LCAwLCA2ODE3NywgNDE4NzYsIDI2NjMsIAotICAgIDIwMTcsIDAsIDAsIDExMDQwLCAxMDE1MCwgMCwgNjQzMDgsIDE1MjIsIDU5NywgNDc3NSwgMTI1NTUsIDEyNTcxLCAxMjU1MCwgCi0gICAgMTI1ODMsIDEyNTYwLCAyMDE5LCAxMjU1NiwgMTI1ODQsIDMwOTIsIDAsIDEyNTYyLCA0NzgzLCAxMjU2NiwgMTI1NjksIAotICAgIDEyNTU0LCAwLCAxMDgxMiwgMCwgMCwgMCwgMzA3OCwgMTQwMiwgMCwgMCwgMCwgMCwgMCwgMzk0LCAzMDg4LCAwLCAwLCAwLCAKLSAgICAzOTkxLCA2NDM5MSwgMCwgMCwgNDI0LCA2NjMyOCwgMTk5OSwgMCwgNzM5MTQsIDAsIDAsIDAsIDAsIDAsIDgyNDYsIDAsIDAsIAotICAgIDAsIDQxODQwLCAwLCAyMzc3LCAxMjk4LCA2NDAxMSwgMTI1NzIsIDExMzE4LCAxMjU1NywgMTI1NTksIDEyNTcwLCA4NDg4LCAKLSAgICAxMDAzLCAyMzczLCA5NDQ2LCA5NDQ3LCA5NDQ4LCA0OCwgMCwgOTQ4MCwgNDgxLCAwLCA5NDM4LCA5NDM5LCA5NDQwLCAKLSAgICA5NDQxLCA4NDY1LCA5NDQzLCA5NDQ0LCA5NDQ1LCA5NDMwLCA5NDMxLCA5NDMyLCA5NDMzLCA5NDM0LCA5NDM1LCAzOTg0LCAKLSAgICA5NDM3LCAwLCAwLCA5NDI0LCA5NDI1LCA5NDI2LCA5NDI3LCA5NDI4LCA5NDI5LCA2NDc1OCwgMCwgOTY1NSwgMCwgMjAwNCwgCi0gICAgOTA5NiwgOTc4MiwgMCwgOTE3MiwgMCwgMTk5NjUsIDAsIDU5NTUsIDEyMDQ4NSwgMTEwOCwgMCwgNzQ3NzMsIDAsIDAsIAotICAgIDY0NzgyLCAzOTI2LCAwLCA2NTIxMCwgODc5OCwgMCwgMCwgMTM5MiwgMCwgMCwgOTE3NTU3LCAxMDYwNiwgODA2NSwgCi0gICAgMTE4ODA1LCAxMDM1MywgMTA0MTcsIDAsIDAsIDY0NTI0LCAwLCA0MDE5LCAwLCAwLCA0MzI4MCwgODIxOSwgMCwgMTgxMiwgCi0gICAgMCwgMCwgMCwgMCwgNDI0MTAsIDc0NDQ4LCAxMTkxMzIsIDYwNTQsIDEwNjk3LCAzMTY5LCA0MjI5NywgNDIzMjIsIDEwNjQyLCAKLSAgICAzOTA5LCA3NDQ2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0OSwgMCwgNjU3MDcsIDExOTQzLCA0MTgwNiwgMCwgNDIzMzYsIAotICAgIDM5MjEsIDAsIDExNzc1LCA2NDc2MCwgMTE3NjYsIDEwMzgsIDQyMzAzLCA5ODIzLCAwLCAwLCA0MDA4LCA2NDAwNCwgODc3MywgCi0gICAgMTA3MzMsIDM2LCAwLCA1MTUzLCA0MTgwNSwgMCwgNzM3MzUsIDc2MywgNDE4MDgsIDY0OTEwLCAwLCAyMDA5LCAwLCAwLCAwLCAKLSAgICA5NjQwLCAxMTk5NTEsIDAsIDEyMDY5NSwgODYyMSwgMCwgMTI4NTIsIDMwMzEsIDAsIDY0MzYxLCAwLCAxODIsIDE5NDcxOCwgCi0gICAgMCwgMCwgMCwgMCwgOTA1OCwgMzY2LCAwLCA5ODkyLCA1OTY5LCAxMTc1NCwgMTA4NDgsIDQ1NzAsIDY1MzAxLCAwLCA0MjU1LCAKLSAgICAwLCAxMDEwMiwgNDExODksIDQwMDMsIDQxMDI2LCA2ODEwOSwgMTMyOTMsIDQxMTkyLCAwLCAwLCA0MjI1MSwgMCwgNDI1MzQsIAotICAgIDAsIDExMjg3LCA2MTI4LCAwLCAxMTAzNCwgMTA5MjMsIDY0NDIzLCAwLCA2NTUwNiwgMCwgMCwgNzQwODMsIDAsIDY2NTgyLCAKLSAgICAwLCAwLCAxMTk5NTUsIDAsIDk4MTcsIDAsIDAsIDAsIDEyMTE3LCA2NjU4NiwgNDE4MywgMTA1NDAsIDY2MjUwLCAxMjcwNDQsIAotICAgIDEyNzA0NSwgMCwgMCwgMCwgMTI4OTcsIDM3OTIsIDIwMTEsIDAsIDYwNjUsIDQzMTYwLCAwLCAxOTQ3MTUsIDg2OTIsIAotICAgIDQxMTg2LCA0MTgxNiwgNDEwMjMsIDQxODE4LCA0MTE4NywgMTE2NTksIDc5MjIsIDEyNjE0LCAyMDA1LCA4NTIzLCAKLSAgICAxMjAxNDQsIDAsIDc1MTMsIDE4NjMsIDQ3MTAsIDAsIDU5NTYsIDc2MjEsIDEyMDI3NCwgMTI3MTE2LCA0NzA1LCA3MTYsIDAsIAotICAgIDAsIDQ3MDQsIDEyMDA0MCwgMTIwMjcwLCA0MjI0MSwgMTYxLCAwLCA3NDU0NiwgNjYyMTQsIDQ3MDYsIDAsIDAsIDEyMDAzNywgCi0gICAgNDcwOSwgMTA2ODAsIDAsIDQzMjkzLCAwLCAwLCAxMTkxNjQsIDAsIDAsIDAsIDE3MDAsIDExOTIyMywgMCwgMCwgMCwgCi0gICAgNDAwNCwgMCwgMTA5NjgsIDQzMjk2LCAwLCA4NTA2LCAwLCAwLCAxMjY5OTYsIDEwMDUsIDkzNywgMTIwMDMwLCA0NzM0LCAKLSAgICAyODcwLCAwLCAxMjAwMzIsIDAsIDc0NjMsIDQ3MjksIDAsIDIzNSwgMTM4NCwgNDcyOCwgMCwgMTIwNDIwLCAxMjA2NDQsIDAsIAotICAgIDgxMDksIDQzMTA1LCAwLCA0NzMwLCA0NDcsIDEzMTg2LCAxNTEzLCA0NzMzLCAxMjA0MTUsIDAsIDAsIDQyNTI3LCAxMjkxMSwgCi0gICAgMCwgMTM4MywgODU2NSwgMjQ2OSwgMTIwMDI0LCAxMTkwODksIDYxNTYsIDY4MTE3LCAwLCA3OTkzLCA0Mjg4LCAxMjA0MTYsIAotICAgIDI2NzQsIDEzMjM4LCAxMTkyMiwgMCwgMTIwMzMwLCAzNTEwLCAxMzIzNCwgMCwgMTIwNDA3LCA1NjA1LCA0MjA5NSwgCi0gICAgMTEzNjQsIDAsIDEzODAsIDY1NjE3LCAxMjAzMjAsIDEyMDI2MSwgMTMxOTYsIDEzMTk3LCAxMjAzMDksIDEyMDY4MiwgCi0gICAgOTQ5NSwgMTE5MzQ2LCAwLCA1OTU5LCAwLCA3Mzk3NiwgMTIwMzA1LCAwLCA2OTQxLCAxMTkzNDksIDEzMjA1LCAxMzIxMSwgCi0gICAgNTgwMSwgMTI3NjksIDY1OTA1LCAxMjAzMTYsIDEyODMsIDEyMDMwMiwgNDc3OSwgMCwgMzcxOSwgNDAwNiwgMCwgMTk5NTcsIAotICAgIDAsIDIwMjEsIDExOTMzMiwgMCwgMCwgNDMwMjgsIDY1NDkzLCA0MTgzOCwgMzg3NSwgNTk2MiwgNjQzNDEsIDExOTMzOSwgCi0gICAgOTgxNCwgNDM1NzEsIDU4MjcsIDMzMTQsIDc3ODcsIDAsIDY1NDk0LCA2ODE1MywgMCwgMCwgMTIwNjM2LCA2NDUzMSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNjU0NjcsIDU3NzEsIDQxMjk4LCAwLCA5NzQyLCA1MjEsIDAsIDEwODAwLCAwLCA4NDA0LCAxOTQ2MjUsIAotICAgIDQ4MywgNzA5NiwgNzA4OSwgNjYzMjMsIDkyOCwgMCwgMCwgMCwgMTA1OTksIDExNTg2LCAzOTg5LCAxMDk3MSwgMCwgCi0gICAgNjU3ODIsIDk4NDEsIDg4NDMsIDEyMTQ1LCAwLCAxMDA3NCwgMTIwODE2LCAwLCAzNzY5LCAwLCAwLCAwLCAwLCA5NTczLCAwLCAKLSAgICA2NTI5MCwgODg0OSwgMCwgNjU4NTUsIDY1MTEyLCAxNzk2LCAwLCAwLCAwLCA4MTY0LCA0MTMwMSwgMzUwMiwgMCwgMCwgCi0gICAgMTA2MjEsIDczODM4LCAwLCA1ODI1LCAxMzAwNywgNjgxNjUsIDAsIDAsIDEyNjYxLCA3NjA4LCAxMDM1NCwgMTA0MTgsIAotICAgIDQyNDExLCAyMDIyLCAwLCAxNDA5LCAxMjE5NSwgNDAwMSwgMzExMiwgMTA4MjQsIDEyMDYzOSwgMTM5MCwgMCwgMCwgNDIxLCAKLSAgICA0MzUzNiwgNTg0NiwgMTIwMTIwLCA0MTMwLCAwLCA3NTk1LCA0MjU4OCwgNzYwMCwgMCwgNjYwMzUsIDAsIDAsIDY1ODUxLCAKLSAgICA0MjYwNywgMCwgMCwgMzE2OCwgMCwgNDIxMzQsIDAsIDIzNzAsIDI4NDYsIDAsIDAsIDAsIDEyMDEzMiwgMCwgMTgzNiwgMCwgCi0gICAgMCwgMTE5MTM3LCAzNzQwLCAwLCA2MjkwLCA2NTM3NCwgMTIwNDUxLCA2NTkyMywgMzk0NCwgNjY2MjgsIDEyMDQzNCwgMCwgCi0gICAgNjEzNSwgMzExOCwgNzQyNjUsIDExOTA5MywgMTIwNDQ2LCAwLCAwLCA4MTI3LCA4OTc1LCA2NDczOSwgNzk0MywgMCwgMCwgCi0gICAgMTA2MTgsIDI1ODQsIDAsIDAsIDAsIDk5OTgsIDAsIDAsIDAsIDAsIDAsIDYyMDQsIDAsIDAsIDgyNzksIDg3NzYsIDY0OTU0LCAKLSAgICA0OTc1LCA3NDgwOSwgMCwgNDI2NywgMCwgMCwgMCwgMCwgMTk1MDQ2LCA2NTcwMCwgNjY1NjIsIDAsIDY0NjQ1LCAwLCAwLCAKLSAgICAwLCAxMjU4NiwgMCwgOTI0MiwgMCwgMCwgNDUyMywgNTg0MiwgMTA0OTUsIDMxMjIsIDAsIDc3OTMsIDAsIDkzMjgsIDAsIDAsIAotICAgIDEyNjA0LCAwLCA2NjE1LCAwLCAwLCAzOTg2LCAwLCAwLCA4OTEyLCA2NDU1NSwgMCwgMCwgMCwgOTU0MSwgMCwgMCwgCi0gICAgMTEyNzUsIDg1NDAsIDExNDk4LCAwLCAwLCA0MTA0MCwgMjQ1OSwgMCwgMTMwNjAsIDQxMDQxLCA3NDQxMywgMCwgMCwgMCwgCi0gICAgMCwgMTA0NTAsIDEyNTUxLCA0MTA0MywgNzAyMCwgMTIwMzUzLCAzNzY1LCAwLCAwLCAxNjA2LCAxMjAzNDgsIDEyMDM1MSwgCi0gICAgMzA5MywgMCwgMCwgMCwgMTIwNjQ5LCAwLCAwLCA0MzEyLCA3NDA5MSwgMTIwMzM3LCAxMjAzMzYsIDExOTIzLCA0MDIzLCAKLSAgICAxMjAzMzMsIDU3NjMsIDEyMDMzNSwgNDgyNywgMTA4OTQsIDEyODEwLCA2NDQwNiwgMTE4Nzg1LCA0NDU1LCA3NDMyMSwgCi0gICAgNDMzLCAxMTk2MjAsIDY2NjYwLCAyNDk5LCAwLCAwLCAwLCAxMTk3MywgMTMwODksIDQyOTMsIDEyMDMyOSwgMTIwMzI4LCAKLSAgICA0Mjc1OCwgMTIxOTYsIDQyODM3LCAwLCAxMTkzMTksIDAsIDAsIDU4MTcsIDAsIDAsIDMxMjAsIDk3OTcsIDAsIDAsIDAsIAotICAgIDEwMzg5LCAwLCAwLCA0ODk1LCA2NTM1OCwgMCwgNDM1OSwgNTg1LCAwLCAzNTA5LCAwLCA0ODYsIDQyOTAsIDAsIDAsIDAsIAotICAgIDAsIDcwMDQsIDAsIDY1ODgwLCAwLCAxMTkwNDgsIDIzODAsIDExMzgwLCAwLCAwLCAyMzc2LCAwLCAwLCAwLCA1MTk3LCAKLSAgICAxMjcwNDYsIDEyNzA0NywgMTI3MDQ4LCAyMzY2LCAxMjcwNTAsIDEyNzA1MSwgMTI3MDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3NDE4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwMDQ5LCAwLCAxODQ3LCAwLCAxMDMzOSwgMCwgNDIzODQsIDAsIAotICAgIDQyMjcsIDc0MTU4LCAwLCAwLCA0MzAzMiwgMCwgNDIzNjUsIDAsIDEyNjcxLCAxMTM4NCwgMCwgMCwgMCwgNjQ3OTcsIDAsIAotICAgIDU4MjAsIDAsIDAsIDEyMDA2NSwgMCwgMTIwMDY0LCAxMjA2NTAsIDQyMTM3LCA5ODkzLCAyNzU0LCAxMjY2NCwgMTIwMDYzLCAKLSAgICAwLCAxMzE5MiwgMCwgNDE3OTksIDY1NTMwLCAxNzExLCAxMjk4NCwgNDMwMzksIDMxMTQsIDYyNTUsIDAsIDExODkzOCwgMCwgCi0gICAgMTA4NTMsIDkyNiwgMCwgNzQxODQsIDAsIDEyMDA1NSwgMCwgNDMxNzUsIDAsIDQzMDM3LCA0MTc5OCwgNDEwMzUsIDExNTgzLCAKLSAgICAwLCA0MTgwMSwgMTE5MDg4LCAwLCA1MjAsIDQyMDAsIDEyNjk5LCA4MzMxLCAwLCAzMDkxLCA0MTAzNCwgMCwgMCwgODM2MCwgCi0gICAgMCwgMCwgMzIxLCA0MjI5LCA2NDU0MywgMCwgNjU1NjMsIDAsIDAsIDI4NjEsIDAsIDEwMDk1LCAwLCAwLCAwLCAxODYxLCAwLCAKLSAgICAwLCAwLCAwLCA0MzA0MSwgMCwgMCwgMCwgMzg1OSwgMTIxODEsIDQxNjYwLCA4MjA5LCAwLCAxMjA2NzgsIDEyOTczLCAwLCAKLSAgICA3NDc1NywgMCwgNDE2NTgsIDAsIDAsIDU3NjAsIDAsIDc0MywgNDQxNCwgMTIwNzY2LCAwLCA0MjYzMiwgOTE3OTczLCAKLSAgICA2NTE2MSwgNzM4OTYsIDAsIDAsIDE0MDUsIDExOTA2MywgNDMyMjAsIDQzMzQxLCAwLCAxOTkxOSwgMCwgNjQ1MzIsIAotICAgIDY1MzY3LCAwLCAwLCAwLCAzNTEzLCAwLCAxMTg4ODMsIDQzMzQyLCAxMTkwNjQsIDY1NTI5LCA2NTM2NCwgMCwgMCwgNjQ4NSwgCi0gICAgMTM5NywgMCwgNjUzNjUsIDAsIDAsIDAsIDAsIDAsIDc0NzEsIDEyMDc5LCAwLCAxMjY4MiwgNDMyODcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEwOTksIDEwNDkwLCAwLCAxMDUwMSwgNjUxODEsIDc0NDYzLCAwLCA0NjQsIDQxNjI0LCAxMTk1OTQsIDAsIDAsIAotICAgIDEzNDYsIDAsIDkxNzYzMSwgNjQ3MjQsIDY0ODk3LCA0MjMsIDE4MTgsIDY1MTQ0LCAwLCA4MjcyLCAwLCAwLCA0MjE4LCAKLSAgICAzMDg3LCA2NDk2MCwgMCwgNDM1NjQsIDAsIDAsIDk1ODQsIDEwNDY1LCAwLCA3NDM1OSwgMTI2MjYsIDkxMDYsIDAsIAotICAgIDQyNjQyLCAwLCA2NDc1MCwgOTM5MCwgMCwgNDE3OTcsIDAsIDAsIDI2NSwgNDE3OTUsIDY0NjY2LCAwLCA0MzUzMCwgMjc1MiwgCi0gICAgMCwgMCwgMCwgNTksIDAsIDAsIDAsIDAsIDAsIDQxODEwLCAwLCA3MDEwLCAwLCA0MTgwOSwgNDE0OTUsIDExOTM2NCwgMCwgCi0gICAgNDIyNTIsIDAsIDgwMDksIDMzMDUsIDQzMDMzLCA1MTEsIDExOTMyMCwgNjYyNTUsIDEzMTI3LCAxMjAwNjcsIDAsIDAsIDAsIAotICAgIDkxNzk3NywgNjU5MTUsIDE0MDAsIDQxODEyLCAxMDY4NSwgMTk0ODcwLCA0MTIxMSwgMTAzODcsIDQ0NTMsIDQzMjc2LCAKLSAgICA5MTc3ODMsIDEzMTU5LCAwLCA2NDgxLCA0MTIxMywgMCwgMCwgMCwgMCwgNDE5ODMsIDc0MTk4LCA2NjE3LCA5MTE2LCAwLCAKLSAgICAwLCA0NjIsIDY4MTEwLCAxMDQ5MywgMCwgODEyOSwgMCwgMCwgNzQ0NzEsIDY2NDQsIDExNjU4LCAwLCAwLCAzNDUyLCAKLSAgICAxMTkwNiwgOTU4MSwgMTM4NSwgMzA5OCwgMCwgMTE5MDEzLCA0MzM0MCwgMCwgNDEwMzMsIDY0OTMsIDQyNjI2LCAwLCAwLCAKLSAgICAxMTQyNiwgMCwgMTY4MSwgMTE4Nzg5LCAxMjA0LCAzNzU1LCA2NDY2MSwgNzIzNSwgMTAxNzAsIDM5NjYsIDg5MTEsIDAsIAotICAgIDQxODQxLCA0MzMzOCwgMCwgMCwgNTcyNiwgNjQ5MTUsIDQyMTc1LCAwLCAwLCA0MTQ5NywgNjUwNDQsIDAsIDI4NTEsIAotICAgIDQzMDE3LCAwLCAwLCA0MzczLCAwLCAwLCA5NTg3LCAxNzg5LCA2NjcxLCAwLCAzMTAwLCAwLCA2NTM2MCwgMCwgMCwgMCwgCi0gICAgNjQ5MjIsIDAsIDgxOTAsIDEyMDgzLCAwLCAwLCA2NTA2LCA2NDMxMiwgNzQzNzQsIDIzNjgsIDAsIDQ0MTksIDAsIDAsIAotICAgIDM0MzksIDE4MjUsIDExOTIsIDEyMDEwNiwgODg5MSwgMzA4MCwgMTIwMjI4LCAyMzQ3LCA1NDMwLCAwLCA4OTkwLCAyODQ4LCAKLSAgICAwLCAwLCAwLCAyNDksIDAsIDAsIDAsIDEyMDY1OCwgMCwgMCwgODg4MywgOTE3ODAyLCA3MjgsIDY4MTc4LCA5OTUsIDAsIDAsIAotICAgIDY0ODI2LCAwLCA5MTc3OTgsIDAsIDAsIDE5OTQ1LCA4MDkxLCA1NTgsIDAsIDEyMjczLCAwLCAwLCAxMjExMiwgMCwgMCwgMCwgCi0gICAgNzQ0MTksIDEyMzM1LCAxMjAxMDQsIDkxNzc5NSwgMzQ0MywgMzEyOSwgMCwgMTI5MTMsIDY1NDQ1LCAwLCA2NDg5MSwgMCwgCi0gICAgNzcyNSwgMCwgMCwgMCwgODYyNCwgMCwgMTI0NDYsIDQzMjk1LCAwLCA0MTg5NCwgMCwgNjI3NywgNDE2NzIsIDQxODkzLCAKLSAgICAxMDAxMCwgMCwgMzU0MCwgMCwgODM1LCAwLCAwLCAxMTk4NjgsIDc0NDA4LCAwLCA3Mzk1OSwgNTQyNiwgNDI1OCwgMCwgMCwgCi0gICAgNTQyNCwgMCwgODI4MywgMCwgNTQzNCwgMCwgMCwgMTk5MTcsIDExNDA4LCAwLCAxMTk0NywgMCwgMTQwNCwgMzA5NSwgCi0gICAgMTE0MzIsIDAsIDM0NjQsIDY0ODYsIDQ4MTksIDAsIDAsIDU3MCwgODA5NSwgMzY3MiwgMTE5ODY0LCAxNDk4LCAwLCAwLCAwLCAKLSAgICA0MzEsIDAsIDAsIDAsIDAsIDY4MTY3LCAwLCAxMzA5NiwgMCwgMCwgMCwgOTUxNiwgMCwgNTI2OCwgMCwgMCwgMCwgNDQ1MCwgCi0gICAgMTIwNzIzLCAxMTU0NywgNjQzNTgsIDAsIDM1NiwgMzQ3NywgMjI3LCAxMDQ4OCwgMCwgMzgyLCAxMTQxOCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNjQ4NCwgMjU0MSwgNjYwMzksIDAsIDAsIDAsIDM1NDksIDAsIDkxMTAsIDExOTY2NSwgMjc0MywgMCwgCi0gICAgNDMyOTAsIDE5NDgxMiwgOTA5NywgMCwgNDMwMTUsIDg3ODIsIDAsIDc3NiwgMjUyNCwgMCwgODU3MywgMCwgMCwgMCwgMCwgCi0gICAgMTIwNTcyLCA2NDk0NCwgODk1MiwgMzg1NiwgMTE4ODE4LCAwLCA1ODcyLCA2NDk1LCAwLCAwLCAwLCAwLCAwLCAxMjA3MzMsIAotICAgIDEyODQ5LCAzOTUzLCAxODk3LCAwLCAwLCAxMTk5NCwgNDMzOSwgNzQ1NTYsIDAsIDY3ODQzLCAwLCAwLCAwLCA3NDI1MSwgMCwgCi0gICAgNTIyOCwgMCwgNzg2OCwgNDMxODQsIDAsIDAsIDczOTg2LCAwLCAwLCA0MzAyMiwgMCwgMTE2MiwgMCwgMjY3MSwgMCwgMCwgCi0gICAgMCwgMCwgMTE4ODY1LCA0NTUzLCA3MzgxMSwgMCwgMTk1MDA1LCAwLCAwLCAxOTkyMSwgNzQzMzEsIDExNDI0LCAwLCA0NTY3LCAKLSAgICA0MTg5MSwgMCwgMCwgMTE5MDU2LCA0ODIwLCA2NTIzOSwgMTk0NjYyLCAwLCAwLCA0MzA0MiwgMTE5MjEyLCAxMzc3LCAwLCAKLSAgICA0ODk3LCA0MjgyMSwgOTI1MCwgMCwgNDQzOCwgNjQzODUsIDAsIDE3NTMsIDExMzMxLCA2MTQ3LCAwLCA0MzI4MiwgODgzMywgCi0gICAgMCwgMCwgNjUwNCwgMTk0NjY3LCAxMjY5NzksIDEwNzE5LCAwLCAxODk4LCAxNDEzLCA0MjQ0MywgMCwgODAyLCAxMjE0MSwgCi0gICAgMCwgMCwgNjY0OCwgMTA2NzEsIDI1MjgsIDAsIDY0Nzg5LCA5MTY5LCA4MzgsIDEyNzA5MiwgMTIwNjk3LCA4NDQsIDUwMTQsIAotICAgIDAsIDI1NiwgMCwgOTk5MCwgMCwgNDMzMDEsIDAsIDc1NDIsIDY1NDY0LCA5NzI2LCAwLCA2NDg5LCAxMDA0OCwgNzQzMjYsIAotICAgIDAsIDY2NTczLCAwLCAwLCAwLCAxMTc2MSwgMTk0NjU1LCAwLCA0MTA5NCwgMCwgMCwgMCwgMCwgMCwgNjE5NiwgNjk0NSwgCi0gICAgMTk0NjI4LCAxOTQ4OTAsIDE5NDYzMSwgMTIwNDkxLCAxMTgxNiwgMTk0OTQzLCA1NzMzLCAwLCAwLCAwLCA0MTA5OCwgMCwgCi0gICAgNDEwOTMsIDAsIDY2NjI2LCA1ODgsIDk3NjAsIDAsIDE5NDcxNywgMTIzOCwgMjAwLCAwLCAxNjYwLCA3MzkxNiwgMCwgCi0gICAgMTE4OTA1LCA3NDM2MiwgMCwgMCwgMTk0NjUxLCAwLCAwLCAzMzk0LCAwLCAxMjA2NjgsIDAsIDAsIDAsIDY2MjE5LCAwLCAKLSAgICA0MzI4NCwgMCwgNzgxNywgMTg0MSwgMTEwNTUsIDEyMDUzMywgMTk0OTc5LCAxOTQ5ODIsIDE2NjksIDEwNzc2LCAxOTQ5ODEsIAotICAgIDc3MDEsIDE5NDk4MCwgMCwgMTk0OTk1LCAxNzMyLCA0MDMwLCAwLCAzOTYzLCA2NjYxMSwgMCwgNDE3NjgsIDY0OTEsIDAsIAotICAgIDY1MzI0LCA5MTQsIDY1MzIzLCA4MDcxLCAzNTM4LCAwLCAwLCAwLCAwLCA3NDM2NywgNzYxNCwgMCwgMTE4MTksIDAsIAotICAgIDEyMDA5LCAxMjM5OSwgMCwgNjc4NTIsIDY1NTM3LCAwLCAxMDg0MSwgMCwgNTMwMSwgMCwgMCwgNTczNCwgODk2MCwgMCwgMCwgCi0gICAgNjUzMTcsIDAsIDAsIDAsIDAsIDEyMzA0LCAwLCAwLCA2NTMxNSwgMCwgMCwgMCwgMCwgMCwgMTE5NjIxLCAwLCA3NDUzNiwgCi0gICAgMTI0NDcsIDY0NDg2LCAwLCAwLCAwLCAwLCAwLCAwLCA0Mjc2NywgMTA5MTUsIDAsIDEyMDA3LCAwLCAxMjA1MjAsIDAsIAotICAgIDE5NDg3OCwgMCwgMCwgMCwgODYyOSwgMCwgNDMxNjgsIDQxODcyLCAwLCA0NDk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA2NDczMCwgMCwgNjY3MTQsIDAsIDAsIDAsIDY1NTk2LCAwLCAxMTQxNiwgNDI4MCwgMTE5MDE4LCA4NzY1LCAxMjc4NCwgCi0gICAgNzc5MiwgMTM5MywgMCwgNjc4NzEsIDc0Mzg2LCAwLCA4MjMzLCA0MzU3MiwgMCwgNjY4MywgMCwgMzQ0MiwgMTIxNDQsIAotICAgIDI4NDEsIDEyNTQzLCAwLCAxNDczLCA0MjgyMCwgNjQzMjksIDkxNzc3MiwgMCwgMCwgNjQ4OCwgMzU3LCAxMDQ4LCA0MTEwMCwgCi0gICAgMCwgNDExMDQsIDAsIDQxMDk5LCAxMDU0LCAxMTkwNjUsIDEwNDAsIDY1NDUwLCAwLCA0NDM0LCAxMDY5LCAwLCAwLCAKLSAgICA3NDIzMSwgOTE3NzY1LCAwLCAwLCAwLCA5NjkzLCA0MTk0MywgMCwgNDE5MzEsIDQxNzU5LCAxMjc1NywgNDM1MywgMCwgCi0gICAgMTA1OSwgOTc5MCwgODk5NSwgMCwgMCwgNjU5MzcsIDAsIDQxNzY0LCAxMDY0NiwgMCwgMTE4ODMzLCAwLCAwLCA3NDgzMCwgCi0gICAgMCwgMTI3NDMsIDAsIDY0ODAsIDkxNzc2MSwgNDE3NzksIDQyNTgwLCA2NjYwMSwgMTIyMDcsIDExOTYxOSwgMTA5ODYsIAotICAgIDY2NjAyLCAxMTMxMiwgNjQ4MDcsIDAsIDAsIDQxNzY3LCAwLCAwLCA0MzAyMCwgMCwgMzk1NSwgNzQyNTQsIDAsIDAsIAotICAgIDkxNzg2MSwgMCwgMTIwNzM1LCA5NzcwLCA5MjQ2LCAxMjIzMCwgMCwgMCwgMCwgMTA0NDgsIDQxNzgzLCA0MTc4NiwgCi0gICAgMTI3MDkzLCAxMjc5NywgMjc1NSwgNjQ1NzEsIDE5NDkxMiwgMTk0OTI3LCA0ODU3LCAwLCA0NDI4LCAxMjc5NCwgNzM3NTUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDU3NDcsIDE5NDcyMCwgMCwgNzk3OCwgNDEwOTIsIDc0NTcxLCAwLCAxMTkyNCwgNzQyMDUsIAotICAgIDQyMTQ0LCA2NTAxNSwgMCwgNTYzLCAwLCAwLCAxMjc5OCwgMTEyNzEsIDU3LCAwLCAwLCAwLCAxMTkwNDMsIDAsIDAsIAotICAgIDQzMTM3LCA2OTQsIDAsIDk4NzYsIDAsIDExOTE2OCwgMCwgMCwgNjQ1MzcsIDAsIDI3NywgNzQzODUsIDcyMjksIDc0NDU5LCAKLSAgICAwLCAwLCA2NDYzNCwgNjQ4MTEsIDg3NTcsIDExOTA4NywgMCwgMTU3NCwgMTk0NjMzLCAwLCAyNTI1LCA0ODUyLCA1NzQ5LCAKLSAgICAwLCAxMzAyNywgNDI4MjQsIDEyMDU3NCwgMTAzOSwgOTgwMSwgMTAxNTUsIDU3NDUsIDE4OCwgNDE4NTgsIDExNTkyLCAwLCAKLSAgICA3NDAxNSwgMCwgNDE4NTMsIDQ4NTgsIDAsIDAsIDQzNiwgNDc3MSwgMCwgMjc4NiwgMCwgNDg1NiwgODA1MSwgMCwgCi0gICAgMTE5NjA5LCAwLCA5NjQ0LCAwLCAwLCAwLCAxOTQ5MTYsIDEyMDczMiwgNjY3MTAsIDExODgzNCwgMCwgNzM5MDYsIDAsIAotICAgIDEyNzExNCwgMCwgMTAyMzQsIDU4NDMsIDExOTM5LCAwLCA0MjE1NywgMCwgMzE1NywgMTk0OTE4LCAwLCAwLCAzNTA0LCAKLSAgICAxMTkxNzgsIDAsIDEwODIyLCA1MTQ5LCA2NjAyOSwgMTAyMjYsIDY1MTQyLCAwLCAzNTk0LCA0MjQyNCwgMCwgNDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQyMjAsIDEwNzI1LCAxMDQzMywgMCwgNjgzOTUsIDQ5ODcsIDY0NTE5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxMDk3MCwgMTE3MzMsIDAsIDEyMDc5MiwgMCwgMTk5NDQsIDAsIDkwMDksIDg1NTEsIDAsIDExNDY4LCA2NDYzNiwgCisgICAgNzU3NSwgMCwgMjcyNCwgMCwgMCwgMTIzMTMsIDExOTk0OSwgNTE1LCAxMTk5NDcsIDQyNzkxLCA2Mzk4NywgNzgyODYsIAorICAgIDExOTk0MywgMTE5OTQwLCAxMTk5NDEsIDExOTkzOCwgOTc3NSwgNDA0NiwgNDU4OSwgNDUyMSwgNjg2MjksIDkxNDEsIDAsIAorICAgIDc4ODUwLCAyNzQxLCA2NDM5OSwgNjE5NywgMTM3MCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE4NCwgODYwNiwgMzMwMywgCisgICAgNDEzNzIsIDExNzg2LCA5NDczLCA2NjIwMywgNjYxNzcsIDAsIDExNTkzLCA0MzAwNywgNDQ3OCwgNjYxNzgsIDAsIDAsIAorICAgIDI3NDQsIDAsIDQ0NzcsIDExODk2NCwgODE0LCA0MjA2NiwgNjYxODMsIDY2MjA0LCA2NjE5NCwgMTE5OTYxLCA2NjE5OCwgCisgICAgNDE4ODAsIDY2MTg4LCA2NjE5NywgNzgxNDgsIDExOTU1LCA2NjE5MCwgNjYxOTEsIDQxMTExLCA2NjE4OSwgNzM3ODgsIAorICAgIDc3ODgsIDQ4NDcsIDAsIDAsIDAsIDAsIDAsIDE1ODEsIDY1MzUsIDc4MTYxLCAxMjk1NCwgNDMwLCA3ODE2MCwgNTUyNTksIAorICAgIDc4MTU4LCAxOTQ5MzgsIDUyNzgsIDQ5NDUsIDQyODgzLCA0OTUwLCAwLCA2ODYyNSwgMCwgNzI2OSwgMCwgNTk2NCwgCisgICAgMTI5MDgsIDAsIDAsIDc0NzY0LCA3NDQ3NywgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDAsIDQ0MywgMCwgNDk0NCwgNTQ2NywgCisgICAgMTE5NjAzLCAwLCA2NTEzNywgNjA0NCwgNjUzOTIsIDAsIDQyMTMsIDAsIDQxMzAzLCAwLCAxOTQ5MzEsIDAsIDQxMzA2LCAKKyAgICA3Mzk4NCwgMjY5OCwgMTI3NTMxLCAwLCAxMjA3MiwgMzE5MywgMCwgNDEzMDQsIDgyNCwgMCwgMTIwOTEsIDc4ODkzLCAKKyAgICA3ODg5NCwgMTE5ODE2LCA0NjczLCA2NDgwNCwgNDY3OCwgMTE5ODIwLCAxMTk4MTksIDY1MDU5LCAwLCA2NzM5LCAwLCAKKyAgICA1NDgxLCAzNDkwLCAxMTk5LCAxMTk4MTEsIDgzNTYsIDExOTgyOSwgMTE5ODMyLCA0Njc3LCAxMjY4OCwgMzEwMiwgMCwgCisgICAgNDY3MiwgNzgxNzMsIDc4MTc1LCA1NTMxLCA2ODM2NywgNDI1NzUsIDc4MTcwLCA3ODE2NiwgNDY3NCwgNDU0OCwgNDQwMDUsIAorICAgIDAsIDY4NjU4LCAxMTk5NDYsIDgwMjUsIDY4NjMwLCAxMjcwMjQsIDE4NTUsIDAsIDY4NjY5LCAwLCAxMTk5NDIsIDEyNzU1NCwgCisgICAgMCwgMCwgMTE5NjUyLCAyNzQ1LCAxMTc5NywgMCwgMCwgNjg2NDMsIDQ2NTQsIDAsIDAsIDY4NjM4LCA3Mzk5MywgMTA1MjUsIAorICAgIDQ2NDksIDY1MjA5LCAwLCAwLCA0NjQ4LCA0MzA4MCwgMCwgMCwgMCwgNjI0NiwgNjQ5NTAsIDc4MjgsIDQ2NTAsIDY3NzcsIAorICAgIDY3NzYsIDY3NzUsIDQ2NTMsIDc4MjIsIDc4MDA1LCAwLCA0MzE4NywgODY2OSwgMCwgNjgyMSwgNjUwOTMsIDAsIDc4ODgxLCAKKyAgICAyNzE2LCAwLCAwLCAwLCAwLCA2ODM2OSwgMCwgMTEwNjAsIDg1NDcsIDI3MTEsIDQyMTY1LCA3ODAyNywgNzgwMjYsIDc5OTIsIAorICAgIDAsIDAsIDQ2NjIsIDc4MDMzLCA3ODAzMiwgOTE0OSwgOTE0NiwgNTk5LCAyMDgxLCA3ODAzMSwgNzgwMzAsIDE5NDk2MiwgCisgICAgNDY1NiwgMTAxMzAsIDY4NDUwLCA3ODExLCA0MDk5NCwgMTk0OTY1LCA2NDE0LCA1OTY3LCA0NjU4LCAzNzI1LCA1NzEzLCAKKyAgICA1ODE0LCA0NjYxLCA0MjQzNCwgMCwgMCwgMCwgNjQ5MDQsIDkwMjYsIDEwODMzLCA3NDg2NCwgNzU0NywgNDg2NywgMCwgCisgICAgMTAwMDgsIDEwMjIyLCAzMDU0LCAxOTQ5NTYsIDk3NDQsIDc4ODYwLCA3NjA1LCA0NjIyLCAxMTk2NTYsIDAsIDAsIDAsIDAsIAorICAgIDAsIDkwNDUsIDc4ODg4LCA0MjI1LCAxOTkyNiwgNzg4ODcsIDEyODgwLCA2NTMwNywgNDYxNywgNzg4ODMsIDAsIDQxNzMyLCAKKyAgICA0NjE2LCAxMDUxOCwgMTA0MjMsIDEwMzU5LCAwLCA1OTU4LCAwLCAwLCA0MjE1LCA5Nzg5LCA5MTc5NDEsIDQzMjEsIDQ2MjEsIAorICAgIDAsIDQxMzEzLCA1MjIsIDUzNjgsIDAsIDY1ODAzLCAwLCA1MzY2LCAxMjIwMSwgNTM3MiwgMCwgMCwgMCwgNzcyMCwgNzM5MCwgCisgICAgMjY5NiwgMCwgMCwgNDYzOCwgMCwgMTc5MCwgNzgyNDIsIDU5NjUsIDY0MzYzLCA2NjU2OSwgNjg2NDYsIDE5NDk2OCwgCisgICAgNTM3NiwgMTgzNSwgNTMzNSwgMTk0OTY2LCAwLCA0NjMzLCAwLCA2ODExOSwgMTE4MCwgNDYzMiwgMCwgNTM4NywgNTMzMywgCisgICAgMCwgMCwgNDIwOTQsIDUzMzEsIDQ2MzQsIDExOTI4LCAwLCA1MzM4LCA0NjM3LCAwLCA1OTcxLCA0MjQxNCwgMCwgMTI2OCwgCisgICAgNjUwOTcsIDQyMzYxLCAwLCAwLCA3Mzg1MywgMTQyNywgMCwgMCwgNTk3MCwgMzQzMSwgMCwgMTAzNTgsIDEwNDIyLCA0NzU4LCAKKyAgICAwLCAxNjA4LCAyNzM4LCAwLCAxMDQ1NSwgNDc1MywgNzQwMjYsIDExMzQ0LCA0MjIyLCA2MjQwLCA1MjMxLCA3NDM4NCwgMCwgCisgICAgNjgzNzcsIDYyNDgsIDAsIDAsIDAsIDQyMzE4LCAwLCA1MjI5LCA0NzU3LCAwLCAwLCAyNzI4LCA0NzUyLCA2NDU2MywgCisgICAgNjUyMzUsIDUyMzQsIDAsIDAsIDAsIDEwNzEzLCAwLCAwLCAyNjIyLCA3NDYwLCAwLCAwLCAwLCA4OTU0LCA3NDc2MCwgCisgICAgNjUxODksIDI2MzIsIDAsIDEwMTA4LCAxMDExLCA1NTc0LCAxODUzLCAyNzA5LCA2NTEzOSwgNTU3NywgMCwgMCwgMTE4ODcxLCAKKyAgICA2ODY0MSwgODk2NSwgNzYzNSwgNDIxNzcsIDUzMTYsIDAsIDUzMTQsIDY0NTEsIDU1NzIsIDAsIDUzMTIsIDAsIDU1MjUsIAorICAgIDUzMzAsIDUzMTksIDAsIDAsIDE5NDkwNywgNDQwMDMsIDAsIDAsIDAsIDEyMDQ5OCwgMCwgMTk1MDA5LCAwLCA3NDAyMiwgMCwgCisgICAgNjQ2MDksIDAsIDEyMDYzNCwgMCwgNTcyMSwgMCwgNTUxOSwgODYzMiwgNjY0NjUsIDExMjY3LCA3Mzk2MSwgMCwgNTcyMCwgCisgICAgMCwgMTY5MiwgNDIxOSwgNDYxMCwgODY5NiwgNDMwNSwgMCwgNDYwOSwgNDM0NzgsIDQ2MTQsIDU0MSwgMCwgNTI4NywgCisgICAgNTMwOSwgNTI4NSwgNjgzODksIDU5NjEsIDQ2NDcsIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIDYwMSwgNDYxMywgMCwgMCwgCisgICAgMCwgNDYwOCwgNjQyNjAsIDQxMTI0LCA1MTkwLCA2NzYyOCwgMCwgNjgxNDUsIDcwODYsIDAsIDExOTI0MywgNjc2MjAsIDAsIAorICAgIDI3MzQsIDExMDc0LCAwLCA2NzYyNywgNDM1OTMsIDAsIDY3NjI1LCA1OTYwLCAwLCA4OTkyLCA2NTI5MywgMCwgMTc4MiwgCisgICAgNjc2MjIsIDY4MTE0LCAxMTk5MzksIDAsIDY4MTgwLCA1NTAxLCAxMTk5NTIsIDQyNTA4LCA3NDQyLCA0MzY2NSwgMzU5LCAKKyAgICA0MTI1MywgNjgzOTIsIDYyMzksIDExOTk1NiwgNDEyNTYsIDAsIDY4MTM0LCAwLCA3NDIwOSwgMCwgOTM0NiwgMTE4OTA0LCAKKyAgICA0MTI1NCwgMCwgNDMyOTEsIDM3NjcsIDU3MzcsIDAsIDQ4NjUsIDAsIDU3NDAsIDkxNzk5NywgNTczNiwgNDM2OCwgMCwgCisgICAgNzE5MywgNjgxMzcsIDAsIDU3MzksIDQxMDI0LCA0ODY2LCAwLCA3MzkwNCwgMCwgNDg2OSwgMTIwNTYzLCAwLCA0MjIzLCAwLCAKKyAgICA2NjUwLCAwLCAwLCAwLCAwLCA0ODcwLCAwLCA2ODY2MSwgNjcxNiwgNzgxNzYsIDY4NjY3LCA2ODM4MiwgNjg2NzYsIDAsIAorICAgIDEwMTIyLCA0ODY0LCA2NjU2OCwgNDE0NCwgNzkzNywgMCwgNjI0NSwgNjg2NTIsIDI3MzIsIDQyNzM0LCA3NDUsIDAsIAorICAgIDE5NTA5NywgMCwgNDc3NywgNzgyMSwgMCwgNjg2MzEsIDQyNzc1LCAwLCAxOTQ5NTQsIDAsIDMwOTcsIDAsIDU5NjYsIDAsIAorICAgIDQ3NzgsIDAsIDEwODYzLCAwLCA0NzgxLCAwLCA2NDQwNywgMCwgMCwgODU3NywgMCwgNjgxOTYsIDQzMjg1LCAxMDIxNiwgCisgICAgNDc4MiwgMCwgMCwgMTIwNzU3LCA2ODYxOCwgMTIzMjUsIDQzMDU2LCA4NzE3LCAwLCAwLCA0Nzc2LCAwLCAxMTQ5MiwgCisgICAgODcwMCwgMCwgMTMxNzYsIDY4MzYzLCAxMDQyNiwgMCwgOTE3NTk5LCAxMDM2MiwgMCwgMTcxNSwgNDg0OSwgODI0MiwgCisgICAgOTU2MSwgNzM5MjIsIDQzMjc4LCA0MjYzNSwgMCwgMCwgNTk2MywgOTE3OTI2LCAwLCAwLCA0ODUwLCAwLCAxNjA3LCA0NjYsIAorICAgIDQ4NTMsIDExODk5NSwgNDg1NCwgMCwgNTE2NCwgMCwgMTM1MCwgNTEyNCwgNjQ0MjAsIDE5OTMsIDUzNjIsIDg0NzEsIAorICAgIDI3MDgsIDAsIDEyNDQ1LCAzNzg1LCAyMzQsIDMxOTksIDAsIDQxMjY4LCA0ODQ4LCAyNTMwLCA5MTc5MDksIDIwNjgsIAorICAgIDE5NjQsIDAsIDczNzYyLCAxMDQ1OCwgMCwgODU3NiwgNzg1NDMsIDAsIDI3MDQsIDQ3OTQsIDAsIDY4MjExLCA4MzIyLCAKKyAgICA0Nzk3LCA1NzUzLCAwLCAyNjk0LCA0NzkyLCAwLCAyNDM5LCA2NTEwNCwgNjk4MDQsIDAsIDMwMywgMCwgMCwgMCwgMjQzNywgCisgICAgMCwgNDIyMSwgNDg0NCwgMTE4ODY5LCAwLCAwLCAwLCAwLCAwLCA0MzI5MiwgMCwgMjQ0MSwgMTA3MzksIDY1MDkwLCAwLCAKKyAgICAxMTkzMjcsIDAsIDI0NTEsIDI3MTQsIDExOTMyNiwgMCwgNDMzNzksIDQ5MzcsIDQzMzc2LCA3NTMsIDU4NDksIDEwNTk3LCAKKyAgICA0MzA4OSwgMTE3MjIsIDkyNDgsIDAsIDQyODc5LCAxMTcyNSwgMCwgMCwgMjcyNiwgMzEwNywgNzM5NTgsIDQ5NDEsIAorICAgIDY0OTM3LCAxMTkyMzMsIDkxNDAsIDE0MDgsIDUyNjEsIDQ2MDcsIDAsIDE4MSwgMCwgNDk0MiwgOTUzOSwgNDkzOCwgMCwgCisgICAgNjUyMDEsIDUyNTksIDkzNjksIDY0MTg1LCA0MTQyLCA1MjU3LCAwLCAwLCA0OTY0LCA1MjY0LCA2NDE3OCwgNjQxNzcsIAorICAgIDEyOTc5LCA0MTQxMSwgNjQxODIsIDY0MTgxLCA2NDE4MCwgNjQxNzksIDk0ODIsIDQ4NzMsIDQxMjMxLCAxODIyLCA0MjUyNiwgCisgICAgMCwgMTI3NTgsIDM4NjUsIDAsIDAsIDEwNTAwLCAwLCAwLCA3ODAyOCwgMCwgOTgzMCwgNDM2NDIsIDM4OSwgMTA4OTMsIAorICAgIDc1MjEsIDAsIDQ4NzIsIDU0NjMsIDAsIDMxMjUsIDk1NjcsIDAsIDQ4NzgsIDU0NTksIDQ2MDQsIDAsIDk1NTcsIDU0NjUsIAorICAgIDY4NjE3LCAwLCAxMTQ5NCwgMCwgOTU2MywgMTA4NjUsIDc0NTcwLCA0MzI3OSwgNjQxODYsIDAsIDc4NzE0LCA2NDE5MSwgCisgICAgNjQxOTAsIDg4OTgsIDY0MTg4LCAwLCA0MTAzMCwgNzg4MzYsIDAsIDkxNzgzNSwgNzg4MjAsIDkxNzgzNCwgMCwgNzg4MDUsIAorICAgIDQxMDMxLCA3ODgwMSwgMTE5NjAsIDY3NDUsIDMwODIsIDAsIDc4NTM5LCA3MzkxOSwgMTA1NzMsIDQxNzQ0LCA3MDc5LCAKKyAgICA1ODU2LCAxMjcwNDMsIDUxNjMsIDc4ODA5LCAwLCAxODE3LCA2NjcyNCwgNzg1MzgsIDAsIDEwNTY0LCA3NzYzLCAxMzA3NywgCisgICAgNDE4MTMsIDQ0MDAsIDQxNzQ1LCA2NDIwNywgMTAyNzUsIDg5MjUsIDEwMzcxLCAxMDMwNywgNDE4MTQsIDQyNDgsIDAsIDAsIAorICAgIDQ1NDEsIDYyOTksIDY0MjA0LCA2NDIwMywgNjQyMDEsIDY0MjAwLCA2NDE5OSwgNjQxOTgsIDAsIDQyMTU2LCA3ODY4OCwgMCwgCisgICAgNjQxOTMsIDY0MTkyLCA3ODAwMCwgOTk0MywgNjQxOTcsIDY0MTk2LCA2NDE5NSwgNjQxOTQsIDEzMjgyLCA2NDE3NSwgCisgICAgNjQxNzQsIDY0MTczLCA3ODE4OSwgODQ2LCA3ODE4NiwgOTk2NSwgMCwgMCwgMCwgMCwgMjU0MywgMTIxNjMsIDMxMDgsIAorICAgIDk3NDUsIDY0MTY3LCA2NDE2NiwgNjQxNjUsIDY0MTY0LCAyMTEwLCAwLCA2NDE2OSwgNjQxNjgsIDY0OTQ5LCAxMDk3MiwgCisgICAgMTAyNTEsIDEwMjQ3LCA0Mjc2OCwgNzE1LCA2NDE2MSwgNDMyOTksIDk0NTMsIDUzNDgsIDEwOTQzLCAxMjAzNzgsIDAsIAorICAgIDExMzUyLCA1NTAsIDk5MTAsIDAsIDAsIDY2NTc5LCAxMTU1MSwgMCwgMCwgOTUwNCwgNzE4NywgMCwgMTAzNzMsIDAsIAorICAgIDEyMDc5MSwgMTAyNjEsIDEwMjUzLCA2NDA0LCAxMDI3NywgNzgxODMsIDExOTg0LCAxNTUyLCA2NTIyMiwgNjk5OCwgCisgICAgNzgxODAsIDAsIDMxMjgsIDQ3ODksIDUwNjcsIDUwNjYsIDExODg0OSwgNDc4NCwgMCwgODgyNywgMTE0NiwgNTA2NSwgCisgICAgNzgxOTYsIDc4MTkyLCA2ODEzNiwgNzgxOTAsIDQzNDEyLCA1MDY0LCAyNDMxLCAwLCA5NDUwLCAxODA5LCAwLCA3ODIwMCwgCisgICAgNzgyMDEsIDUwNjIsIDEyNjQsIDY0ODE3LCAxMzI1NCwgMTE2OTcsIDAsIDk3ODUsIDY0NzE2LCAwLCAzOTMzLCA3NDU1OSwgCisgICAgNDc0MCwgNzk1NCwgMCwgMCwgNDI2MDksIDAsIDc0MTc1LCAwLCAxMjcwMTYsIDAsIDAsIDQyMTMwLCAwLCA1MTUxLCAKKyAgICA5MTc4MjksIDkxNzgyMywgMCwgMCwgMCwgNzYyMCwgMzgwMCwgNjUxMjIsIDAsIDAsIDgzNTUsIDc4NTQsIDAsIDk1NCwgCisgICAgNjQ5MjcsIDQxODUsIDQxMDQ1LCAwLCA0MTQzOCwgNDE0MzksIDY4NjY2LCAxMDcxMSwgNDU5MywgMCwgMTIwNTg0LCAwLCAKKyAgICA2NDc3NCwgODA1MywgMTA1MzIsIDY2NzI3LCAwLCAwLCAwLCA2NDc1OSwgNjM4MSwgNTE2NiwgOTg4OCwgMCwgNTE0OCwgCisgICAgNDI4MzQsIDAsIDc4MjA1LCA3ODIwNiwgNjQxNDAsIDc4MjA0LCA2NDEzMSwgMzExOSwgOTE3ODE0LCAwLCAzMDYwLCAKKyAgICA2NDEzNSwgOTk4NiwgMCwgNzc4NzYsIDYzNiwgMTE2OTgsIDAsIDAsIDk5MTYsIDExNzAxLCA3ODM2LCA0Mjc0MSwgNjQxMzcsIAorICAgIDgzMjAsIDc4NjQwLCA4ODYzLCAwLCAxMTk5NjAsIDE0NzcsIDQzMjg5LCAwLCA3NDM1OCwgODYxOCwgMCwgOTkwOCwgMCwgMCwgCisgICAgMCwgMzkzNywgMTIzMTIsIDAsIDAsIDAsIDY0NzgxLCA5MTIsIDYzNDksIDQ1MzYsIDExOTk2MywgNzQ1MzIsIDAsIDYyNDQsIAorICAgIDAsIDE5NDU4MCwgMzkzNSwgMTIwNjY1LCAwLCAwLCAxMTk1MCwgNTM5MiwgNDIyNDgsIDY1MTI5LCA2ODY1NiwgNTM5NywgMCwgCisgICAgMTIwNDYsIDEyNTk5LCAwLCAwLCA1Mzk1LCAwLCA1MzkzLCAzNTQsIDY4NjE1LCAxMTk5NDgsIDc4NTAzLCAwLCAwLCAKKyAgICA0MjAzOSwgMCwgMCwgNjQxNDIsIDYyNiwgMCwgNTg5NSwgMCwgMCwgNTc4MCwgMCwgMCwgMCwgMCwgMCwgNDMyOTcsIDAsIAorICAgIDQzMTEsIDQ2NDQsIDg4MTgsIDAsIDAsIDAsIDczODE4LCAzOTE4LCA2NjQ1MiwgMzc5NywgMTY0NCwgMTE5OTQ0LCA5NjU4LCAKKyAgICA0MTQwLCAxMTM4NSwgNjU5NDcsIDY0NTUsIDkwMzAsIDgxMywgMTE5OTQ1LCA2ODEzMSwgNDE0NiwgMTE5OTU3LCA1MzYwLCAKKyAgICAyNDY2LCAwLCA2NzY2OSwgMCwgNjI0OSwgNDIxMTcsIDAsIDAsIDAsIDAsIDc0MDQ2LCAxMjA1ODMsIDQ5MTEsIDk4OCwgCisgICAgOTE3ODA3LCAwLCAwLCA0MzA2MSwgNzA1NCwgNjQxNDcsIDAsIDY0OTIwLCA2ODE5NSwgNjY5OCwgMTE4OTMzLCAxMjAzNDksIAorICAgIDAsIDAsIDExOTgxLCAxMjIwMiwgMCwgMTEwMzIsIDY3NjU0LCA2MDkzLCAxMTYwOCwgOTc1LCA2ODY2MiwgNjU4NDMsIDE3MCwgCisgICAgMCwgMCwgNDE2OSwgMCwgNDE4NTksIDYwNTgsIDEyMDQwMSwgMTMyMDMsIDEyMDY1NywgMCwgMCwgNjg2NTcsIDk4MTgsIAorICAgIDEwMTc4LCAxMDMyNCwgNDIxMDYsIDU4OTgsIDc0NTQwLCA0NzM4LCA0MTg1NiwgNzA2MiwgOTE3ODY1LCA0NzM3LCAxMTc3OSwgCisgICAgNDc0MiwgMTIwNTY0LCA5MTc4NjYsIDczNzM2LCAwLCA5ODI1LCA2NDQ4LCA2NzE1LCAxMjcwMDgsIDQ4MzEsIDAsIDAsIDAsIAorICAgIDUzMDAsIDQ3NDEsIDQyMTA4LCAwLCA2NDE1OSwgNDczNiwgNjQxNDgsIDAsIDg0OSwgMCwgNzg0OTEsIDQzMjg4LCAwLCAKKyAgICA2NjYyMCwgMCwgMTk0OTIwLCA2NTU0OSwgOTQ5NiwgNjQ1OTgsIDExODg2NiwgMCwgNzg3NiwgNjgxMzIsIDkxNzg3MiwgCisgICAgMzkyOCwgOTE3ODcwLCA0MzM3OCwgMTA3MDYsIDcxOTgsIDAsIDQ4NDIsIDEyMDUzLCAwLCAwLCA0ODQxLCAwLCA0MTcxLCAKKyAgICAxMjAwOCwgNjI1MSwgMzkyMywgMTQ5MCwgMCwgMTE5NTkxLCAwLCA0MDk3MiwgNTI0NSwgMCwgMTAxMTQsIDQyMDAxLCAKKyAgICA0MTg4OCwgNDg0NSwgODMzMiwgNDA5NzQsIDY0MzQ3LCA0ODQwLCA5MDc3LCA3ODM0NiwgMTc0NywgOTE3ODQ5LCA0ODI1LCAKKyAgICA2OTI0MCwgOTE3ODUyLCA2ODY1NSwgMCwgMCwgMCwgMCwgNjg2MjgsIDAsIDk4NTAsIDExODkzNywgMzY3LCAxNDcyLCAKKyAgICA5MTc4NTksIDY2ODcsIDEyNzQsIDAsIDU5MDUsIDEyMzM5LCA4OTE5LCA3Mzk1MywgMTA5MDcsIDY1MjYxLCAxMTAyMywgCisgICAgMTE5NTU5LCA0ODMwLCA5MTM0LCA3ODY2NiwgNjQxMjYsIDQzMDExLCAwLCAwLCA2NDEwMSwgMCwgMCwgNDgyNCwgMTA2MTQsIAorICAgIDEyMDM5MCwgMCwgMTg4OCwgMTk2MCwgNzg2MSwgOTE3ODU2LCA3ODUyNCwgNDE4MzYsIDQzMDEyLCA2MDUyLCA2MDY0LCA1NCwgCisgICAgNDMwMDksIDEyMjE0LCAwLCA2MjExLCAwLCAzNTgsIDQxOTk3LCA0MTgzMywgMTE0NDIsIDEwNzU4LCA2NTc3NCwgMCwgCisgICAgMTIwMzg0LCA2NDExNSwgMTIwMzg1LCAwLCAwLCAwLCAxMTkwNTMsIDAsIDEyNzY1LCA2NDExOCwgMTI2OTk4LCAxMjk2MiwgCisgICAgMCwgMCwgNDAxNywgMTI4MjcsIDUyNDEsIDEyMDM5MiwgMCwgNDExMTgsIDM5MjQsIDAsIDExMzY2LCA5MTc4NDMsIDAsIDAsIAorICAgIDkxNzg0NiwgNDExMTYsIDkxNzg0NCwgOTE3NTY0LCAwLCAxMTM2MywgMTIwNTcsIDExOTE3LCAxNTY3LCA3NDAwMCwgNDcyMSwgCisgICAgMCwgNjYyMDIsIDg5NTcsIDQxMzksIDAsIDAsIDAsIDAsIDAsIDEyNzQwLCAwLCA0NzIyLCA2ODE2LCAwLCAxMjc1OSwgCisgICAgNDcyNSwgMCwgNDcyNiwgMCwgMCwgMCwgOTE3OTA0LCA5MTc5MDUsIDAsIDEyNzU1LCAxMjc2MiwgNDAxNSwgMCwgODA1MiwgCisgICAgNDc2LCAwLCAwLCAwLCA2NDIxMiwgNDEwMjAsIDEzODIsIDY0MjA5LCA2NDIxNiwgNjQyMTUsIDY0MjE0LCAxNjU2LCAKKyAgICA0MTgzMSwgMCwgMCwgNDE4NDMsIDg3MjAsIDM5MDgsIDE0NTIsIDEzMTExLCAwLCA2NDA2NywgMCwgODU1MiwgNjQxMTMsIAorICAgIDQxODQ1LCAzODQ5LCA3ODczMiwgNjYyMzIsIDk3NzgsIDEyMDA2NiwgNTg5MSwgNzA2NCwgNTUsIDk5NDgsIDkxNzkxMSwgMCwgCisgICAgMCwgNzkzNSwgNjc1ODYsIDAsIDExMTQsIDAsIDY3NTg1LCA3ODY3NSwgMTIwMDUzLCAxMjAwNTAsIDEyMDA1MSwgMzkzOCwgCisgICAgMTIwMDU3LCA2NTQxNywgNjQ3MTcsIDEyMDA2MCwgMTIwMDYxLCA2NTQxNSwgMTIwMDU5LCA2MjkyLCA2NTMwMywgNzk1NSwgCisgICAgNjQ1MiwgNDcxMywgOTE3ODg3LCA2NjI0OSwgOTE3ODg1LCA5MTc4OTAsIDkxNzg5MSwgNjUxNTIsIDcxOSwgMTIwMDQ0LCAKKyAgICA3ODYyMywgMTIwMDQyLCA2NzEzLCA0NTMyLCA2NTQxMiwgNjk4MjIsIDEwODY4LCA0NzE3LCAyMzQ5LCA1OTAyLCA2NjQ1MCwgCisgICAgNDcxMiwgOTE3OTAyLCA5MTc4OTksIDkxNzkwMCwgNjU0MTYsIDgxNTUsIDQ3MTgsIDM5NDIsIDQ3MTQsIDk2MjUsIDAsIAorICAgIDYzODMsIDAsIDEyMDA2LCAwLCAwLCAwLCAwLCAwLCA2NTQxNCwgNjQ1NCwgMTIyOSwgMCwgNjY0MzcsIDY2MDI1LCA3ODY5OSwgCisgICAgMCwgNDI1MDAsIDEyMDUwOCwgNDgwOSwgOTYyMywgOTE3ODc0LCA3ODY5NCwgOTE3ODgwLCA5MTc4NzcsIDkxNzg3OCwgCisgICAgNjU0MDUsIDY4MTU5LCA5MTc4ODEsIDkxNzg4MiwgNTM2NSwgNDU0NSwgODkwMSwgOTE3NTY2LCAxMTk1NTUsIDQ4MTMsIDAsIAorICAgIDAsIDU5MjUsIDQ4MDgsIDY0MzMwLCAwLCA2NTQ3NSwgMTE4OTQwLCAwLCA0ODE0LCAwLCA0ODEwLCAwLCAwLCA2NDkyOCwgCisgICAgMTA1NDMsIDAsIDM1MjIsIDAsIDQxNCwgNjU0MDQsIDAsIDAsIDY0NTYsIDczODIwLCAwLCA2NjkxLCA0MjE5MywgMCwgMCwgCisgICAgMCwgNzQ0OTUsIDAsIDAsIDAsIDExODgyMCwgOTc1MSwgNjU0MDcsIDAsIDExNzcwLCAzOTE5LCAwLCAwLCA2NTA2MSwgMCwgCisgICAgMCwgMCwgMTIyMzUsIDAsIDAsIDE5NTAyNSwgNjQwOTIsIDAsIDY0MDgwLCAwLCA2NDA5MCwgMCwgMCwgMTAxNjIsIDEwMzEwLCAKKyAgICAwLCA4NDU0LCAwLCA0MjAzOCwgMzg3LCA0MTM2MywgMTI3MzcsIDAsIDQ3ODAsIDQzMzY4LCAwLCA2NDMxMCwgNjQ2MjEsIAorICAgIDY3MzIsIDAsIDAsIDAsIDAsIDAsIDg4OTYsIDAsIDM3NSwgNjk3NiwgNjY1ODIsIDExOTAwNSwgMCwgMCwgMCwgMTE5MjAyLCAKKyAgICAxMTkyMDMsIDEyNTI2LCA0MzEyMCwgMjMxNSwgMCwgMTkzOCwgMTE5MTk3LCAwLCA0NTI5LCAxMTkyMDAsIDExOTIwMSwgCisgICAgMTE5MTk4LCAxMTkxOTksIDAsIDAsIDAsIDEzMTUwLCA2NDQ5MiwgMCwgMCwgMCwgMTI5MDIsIDAsIDQyODkxLCA2NjMyNywgCisgICAgNzQyOTgsIDAsIDEwNzk5LCAwLCAyNTg3LCA2NjM3MiwgMCwgNDE5MywgMTIwMzM0LCA0MjQxLCAwLCA3OTk4LCAwLCAwLCAwLCAKKyAgICAwLCAyMzE2LCAxMTg4MjEsIDAsIDAsIDAsIDY0Mjk3LCA3NDc5OSwgMCwgNzQxNDAsIDAsIDUzNzMsIDAsIDAsIDM3NjIsIAorICAgIDEwMDE1LCAwLCAxMTkyMzIsIDAsIDQxNTkwLCAwLCAwLCAzNzgwLCA3NDg1LCA1Nzc5LCAwLCA0MjAzNywgMCwgMzkwNiwgCisgICAgMTIzNDksIDAsIDgzMjYsIDAsIDY1NDk4LCAzNzYzLCA2OTgzLCA1NjE4LCAwLCAzNzc5LCAwLCA0MzYxMywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjgwLCA3NDU1OCwgMCwgNjgxMzgsIDEzMDcyLCAxODk0LCAwLCAwLCA2NTQ3OCwgNDMzMTAsIDcyMzEsIDAsIAorICAgIDExNzczLCAwLCAwLCAwLCAwLCAyNTUxLCAwLCA2NDUzLCAxMDIwMCwgNjIzNSwgMCwgMTE5MjM3LCAwLCAwLCA0NDcwLCAKKyAgICAxMTk2MTMsIDAsIDc3ODAsIDUzNjksIDExODk1OCwgNTI0OSwgMCwgNTM2NywgODc1NiwgMCwgMCwgNTM3NywgMTIwNTg1LCAKKyAgICA2ODE0MywgMTY4OCwgNzgyNDUsIDAsIDAsIDAsIDAsIDAsIDQ0MDIwLCA2ODA4LCA0MTMxOSwgMTMwMCwgMTA2NTAsIAorICAgIDQxNjkyLCA2NDUwNSwgNDY2OCwgMCwgMTE5NjI0LCAxNDY1LCAxMDg1MCwgMzk0MywgMCwgNDEyMDUsIDQxMzE1LCAwLCAwLCAKKyAgICAwLCA1MzUyLCAwLCAwLCA4ODM5LCA0MTMxNCwgNzM4NCwgNzc4NSwgNDEyMDQsIDAsIDQxMjA5LCAwLCAwLCA0MzYwNywgMCwgCisgICAgMCwgNTQyMCwgMzg5NywgMCwgMCwgNzQ0MTcsIDQwMTgsIDAsIDY4MTI3LCAwLCAwLCAwLCAwLCAxMjc1MjYsIDI1NjEsIAorICAgIDY4NjIxLCAzNTQyLCA0MTkxNSwgMTIwNzYsIDc5NTEsIDY4MTUyLCAxMTg4NTcsIDUzMDMsIDYyNzYsIDE3MDYsIDAsIAorICAgIDc4NzUxLCA3NDExNiwgMCwgNjUxNTAsIDQxODE5LCAwLCA3Mzk1MSwgMTA4NDcsIDQxODIyLCA5OTg1LCA4NjAsIDAsIAorICAgIDEwNTA2LCAwLCAwLCAxMDc1MywgMTA4MzAsIDAsIDYxNSwgNjQ0OTAsIDc1NzQsIDAsIDc3OTIyLCAwLCAxMjkwOSwgCisgICAgNDMwMTYsIDY0NTU5LCAxMjcwMjgsIDAsIDAsIDAsIDIwMjAsIDAsIDQwMjIsIDAsIDAsIDc3OTIzLCAwLCA0MTY5MSwgMCwgCisgICAgMCwgNzQzMjksIDAsIDY0NjIyLCA5MDcwLCAwLCA2ODQxMSwgMzkxMSwgNDI4MjksIDQzMTIyLCAxMDMzLCA3NDQ0MCwgMCwgCisgICAgNzAwMCwgMzkwNCwgMCwgMCwgMCwgMCwgMTI3MDEyLCAxMzEyMywgMTA4NDYsIDM0NTAsIDAsIDczOTcsIDExODgwNywgMCwgCisgICAgNDI3NzgsIDEwMDAwLCA0MTA4OCwgNDQ5LCAwLCAzNzc3LCA2ODQ1OCwgMCwgOTYzNiwgMCwgMTA3MzgsIDAsIDkzNjcsIAorICAgIDU5MywgNDEwODUsIDM5OTksIDY1MjI2LCA0MTcxMywgMTI3NjQsIDAsIDY0NDA5LCAzNTk2LCAwLCAwLCA5NzYzLCAKKyAgICAxMjAyODAsIDEyMDI4MywgMTIzNDcsIDEyNCwgMTI5ODEsIDQxMTI3LCAyMDkyLCAwLCAwLCAwLCAwLCAxMDgyMCwgNDM5ODcsIAorICAgIDAsIDAsIDE3NjksIDQxNzE1LCAyNDYzLCA3ODQ4OSwgMCwgMTI3NzAsIDAsIDE1MzgsIDAsIDQzMTI0LCAwLCAxOTUwNTgsIAorICAgIDc3OTUsIDEyMDMwMCwgMCwgNDgyOCwgMTI1OCwgMCwgMjAwNiwgMCwgMCwgOTQ5OCwgMTI3MDMyLCAxMjcwMzMsIDEyMDI4OSwgCisgICAgMTIwMjg4LCAzOTM5LCAxMjAyOTAsIDg4NDYsIDg5NDMsIDEyMDI4NywgMTIwMjg2LCAyNjUwLCA0NDkxLCAxOTYxLCAKKyAgICA0MjYwMiwgMTE1MjUsIDEyMDI5MiwgMTk1OSwgMTIwMjk0LCA1NTIyOCwgMTE3NzQsIDQxMDE2LCAwLCA2ODY3NSwgMCwgCisgICAgMTUxMSwgOTMyNCwgNzgyMTEsIDEwNTE5LCA2NjMzMSwgMzQ1NCwgMTk5MzAsIDAsIDQxMDE5LCAwLCAwLCA2NTI5MiwgCisgICAgNjgyMiwgMTI4NjIsIDAsIDAsIDQyMTQzLCA0MTgyOCwgNzgyMDcsIDY1NTMxLCA3ODIwOCwgMTE4ODc5LCA1NTIyMywgMCwgCisgICAgMCwgNDE4MjYsIDg4NjUsIDY0MDIsIDAsIDEzMjc5LCA3OTE3LCAxMjAzNDAsIDAsIDc3MzMsIDAsIDQ5OTgsIDAsIDAsIAorICAgIDQxOTUwLCAwLCA0MjY4LCAwLCAwLCAwLCA0MDEzLCAwLCAxMDg4MSwgMCwgMCwgMCwgNzQ3ODgsIDIwMTQsIDAsIDAsIAorICAgIDk3NjUsIDAsIDAsIDAsIDE5NTA1OSwgNzgzNTcsIDY1MjgxLCAwLCAxMDk0OSwgMCwgMCwgMCwgMjAxNSwgMCwgMCwgMCwgCisgICAgNjYzMTgsIDQzMjMzLCAwLCA0MjUxNywgMCwgMCwgMCwgMTI2OTgsIDgwOTQsIDQzNDQ1LCA2NTkwOSwgNjQ3NCwgNzk0LCAwLCAKKyAgICAxMjY1NiwgMCwgMTE5MzUzLCAwLCAxNjY1LCAwLCA0ODMzLCAwLCAxMTkzNTEsIDAsIDAsIDE4OSwgMTI2MTEsIDAsIDAsIAorICAgIDI4NTksIDQ4MzgsIDAsIDQ4MzQsIDY1MDc4LCAwLCAwLCA0ODM3LCAwLCA3NzAsIDAsIDgxMSwgMCwgNDEwNDIsIDkxNzU1MSwgCisgICAgNDEzMTgsIDY0NDI3LCAwLCAwLCA3ODg0OCwgMzg5NSwgMCwgNzQzNDEsIDM5NzYsIDAsIDQyODU5LCAxMDE5MywgMzExNiwgCisgICAgNzc0NywgMCwgMCwgMCwgMCwgMCwgNDM2ODYsIDc4ODQ2LCA0MTg3NywgMCwgMjg3MSwgNjQ2MTQsIDAsIDk5OSwgMCwgCisgICAgNjM0NSwgNDE4NzYsIDI2NjMsIDIwMTcsIDAsIDAsIDExMDQwLCAxMDE1MCwgMCwgNjQzMDgsIDE1MjIsIDU5NywgNDc3NSwgCisgICAgMTI1NTUsIDEyNTcxLCAxMjU1MCwgMTI1ODMsIDEyNTYwLCAyMDE5LCAxMjU1NiwgMTI1ODQsIDMwOTIsIDAsIDEyNTYyLCAKKyAgICA0NzgzLCAxMjU2NiwgMTI1NjksIDEyNTU0LCAwLCAxMDgxMiwgNzg4NTEsIDAsIDAsIDMwNzgsIDE0MDIsIDAsIDAsIDAsIDAsIAorICAgIDExOTI0OCwgMzk0LCAzMDg4LCAwLCAwLCAwLCAzOTkxLCA2NDM5MSwgMCwgMCwgNDI0LCA2NjMyOCwgMTk5OSwgMCwgCisgICAgNzM5MTQsIDAsIDAsIDAsIDAsIDQyMjMxLCA4MjQ2LCAwLCAwLCAwLCA0MTg0MCwgMCwgMjM3NywgMTI5OCwgNjQwMTEsIAorICAgIDEyNTcyLCAxMTMxOCwgMTI1NTcsIDEyNTU5LCAxMjU3MCwgODQ4OCwgMTAwMywgMjM3MywgOTQ0NiwgNzQ4MSwgOTQ0OCwgCisgICAgNDgsIDAsIDk0ODAsIDQ4MSwgMCwgOTQzOCwgOTQzOSwgOTQ0MCwgOTQ0MSwgODQ2NSwgOTQ0MywgOTQ0NCwgOTQ0NSwgCisgICAgOTQzMCwgOTQzMSwgOTQzMiwgOTQzMywgOTQzNCwgOTQzNSwgMzk4NCwgOTQzNywgMCwgMCwgOTQyNCwgOTQyNSwgOTQyNiwgCisgICAgOTQyNywgOTQyOCwgOTQyOSwgNjQ3NTgsIDAsIDk2NTUsIDAsIDIwMDQsIDkwOTYsIDk3ODIsIDAsIDkxNzIsIDAsIDE5OTY1LCAKKyAgICAwLCA1OTU1LCA2NzY2NiwgMTEwOCwgMCwgNzQ3NzMsIDAsIDAsIDY0NzgyLCAzOTI2LCAwLCA2NTIxMCwgODc5OCwgMCwgMCwgCisgICAgMTM5MiwgMCwgMCwgOTE3NTU3LCAxMDYwNiwgODA2NSwgMTE4ODA1LCAxMDM1MywgMTA0MTcsIDAsIDAsIDY0NTI0LCAwLCAKKyAgICA0MDE5LCAwLCAwLCA0MzI4MCwgODIxOSwgNjg0MDIsIDE4MTIsIDAsIDAsIDAsIDAsIDQyNDEwLCA3NDQ0OCwgMTE5MTMyLCAKKyAgICA2MDU0LCAxMDY5NywgMzE2OSwgNDIyOTcsIDQyMzIyLCAxMDY0MiwgMzkwOSwgOTk1MCwgMCwgMCwgMCwgNjg2NzgsIDAsIDAsIAorICAgIDEwNDksIDAsIDY1NzA3LCAyMzA0LCA0MTgwNiwgMCwgNDIzMzYsIDM5MjEsIDAsIDExNzc1LCA2NDc2MCwgMTE3NjYsIAorICAgIDEwMzgsIDQyMzAzLCA5ODIzLCAxMjcyNzgsIDY5MjM2LCA0MDA4LCA2NDAwNCwgODc3MywgMTA3MzMsIDM2LCAwLCA1MTUzLCAKKyAgICA0MTgwNSwgMCwgNzM3MzUsIDc2MywgNDE4MDgsIDY0OTEwLCAwLCAyMDA5LCAwLCAwLCAwLCA5NjQwLCAxMTk5NTEsIDAsIAorICAgIDEyMDY5NSwgODYyMSwgMCwgMTI4NTIsIDMwMzEsIDAsIDY0MzYxLCAwLCAxODIsIDE5NDcxOCwgMCwgMCwgMTE5OTUwLCAwLCAKKyAgICA5MDU4LCAzNjYsIDAsIDk4OTIsIDU5NjksIDExNzU0LCAxMDg0OCwgNDU3MCwgNjUzMDEsIDQ0MDEzLCA0MjU1LCAwLCAKKyAgICAxMDEwMiwgNDExODksIDQwMDMsIDQxMDI2LCA2ODEwOSwgMTMyOTMsIDQxMTkyLCAwLCAwLCA0MjI1MSwgMCwgNDI1MzQsIAorICAgIDY1MTc5LCAxMTI4NywgNjEyOCwgMCwgMTEwMzQsIDEwOTIzLCA2NDQyMywgMCwgNjU1MDYsIDAsIDAsIDc0MDgzLCAwLCAKKyAgICA5OTMyLCAwLCAwLCAxMTk5NTUsIDAsIDk4MTcsIDAsIDEyMDE0MCwgMCwgMTIxMTcsIDY2NTg2LCA0MTgzLCAxMDU0MCwgCisgICAgNjYyNTAsIDkwNjMsIDEyNzA0NSwgMCwgMTE5OTU0LCAwLCAxMjg5NywgMzc5MiwgMjAxMSwgMCwgNjA2NSwgNDMxNjAsIDAsIAorICAgIDE5NDcxNSwgODY5MiwgNDExODYsIDQxODE2LCA0MTAyMywgNDE4MTgsIDQxMTg3LCAxMTY1OSwgNzkyMiwgMTI2MTQsIAorICAgIDIwMDUsIDg1MjMsIDc4MDAyLCAwLCA3NTEzLCAxODYzLCA0NzEwLCAwLCA1OTU2LCA3NjIxLCA3ODAwNiwgMTI3MTE2LCAKKyAgICA0NzA1LCA3MTYsIDc4MDA0LCAwLCA0NzA0LCAxMjAwNDAsIDEyMDI3MCwgNDIyNDEsIDE2MSwgNDM5NzcsIDc0NTQ2LCAKKyAgICA2NjIxNCwgNDcwNiwgMCwgMCwgNDI2NzIsIDQ3MDksIDEwNjgwLCAwLCA0MzI5MywgMCwgMCwgMTE5MTY0LCAxMjAzMjgsIDAsIAorICAgIDAsIDE3MDAsIDExOTIyMywgMCwgMCwgMCwgNDAwNCwgMCwgMTA5NjgsIDQzMjk2LCAwLCA4NTA2LCAwLCAwLCAxMjY5OTYsIAorICAgIDEwMDUsIDkzNywgNzgyMTYsIDQ3MzQsIDI4NzAsIDAsIDc4MjE4LCAwLCA3NDYzLCA0NzI5LCAwLCAyMzUsIDEzODQsIAorICAgIDQ3MjgsIDAsIDEyMDQyMCwgMTIwNjQ0LCAxMjA0MjEsIDgxMDksIDQzMTA1LCAwLCA0NzMwLCA0NDcsIDEzMTg2LCAxNTEzLCAKKyAgICA0NzMzLCAxMjA0MTUsIDAsIDAsIDQyNTI3LCAxMjkxMSwgNDM0MjcsIDEzODMsIDg1NjUsIDI0NjksIDEyMDAyNCwgNjY5MCwgCisgICAgNjE1NiwgNjgxMTcsIDQzNDM5LCA3OTkzLCA0Mjg4LCAxMjA0MTYsIDI2NzQsIDEzMjM4LCAxMTkyMiwgMCwgMTIwMzMwLCAKKyAgICAzNTEwLCAxMzIzNCwgMCwgMTIwNDA3LCA1NjA1LCA0MjA5NSwgMTEzNjQsIDAsIDEzODAsIDY1NjE3LCAxMjAyNTMsIAorICAgIDEyMDI2MSwgMTMxOTYsIDEzMTk3LCAxMjAzMDksIDEyMDY4MiwgOTQ5NSwgMTE5MzQ2LCAwLCA1OTU5LCAwLCA3Mzk3NiwgCisgICAgMTIwMzA1LCA0MzM3MSwgNjk0MSwgMTE5MzQ5LCAxMzIwNSwgMTMyMTEsIDU4MDEsIDEyNzY5LCA2NTkwNSwgNDE2OTcsIAorICAgIDEyODMsIDEyMDMwMiwgNDc3OSwgMCwgMzcxOSwgNDAwNiwgMCwgMTk5NTcsIDAsIDIwMjEsIDExOTMzMiwgMCwgMCwgCisgICAgNDMwMjgsIDY1NDkzLCA0MTgzOCwgMzg3NSwgNTk2MiwgNjQzNDEsIDExOTMzOSwgOTgxNCwgNDM0NTcsIDU4MjcsIDMzMTQsIAorICAgIDc3ODcsIDc4MjM0LCA2NTQ5NCwgNjgxNTMsIDAsIDAsIDEyMDYzNiwgNjQ1MzEsIDEyMDY5MiwgMCwgMCwgMCwgNjYzMTYsIAorICAgIDY1NDY3LCA1NzcxLCA0MTI5OCwgMCwgOTc0MiwgNTIxLCAwLCAxMDgwMCwgMCwgODQwNCwgMTk0NjI1LCA0ODMsIDcwOTYsIAorICAgIDcwODksIDY2MzIzLCA5MjgsIDAsIDAsIDExOTAxOCwgMTA1OTksIDExNTg2LCAzOTg5LCAxMDk3MSwgMCwgNjU3ODIsIAorICAgIDk4NDEsIDg4NDMsIDEyMTQ1LCAwLCAxMDA3NCwgNzg1NDgsIDAsIDM3NjksIDAsIDAsIDAsIDAsIDk1NzMsIDAsIDY1MjkwLCAKKyAgICA4ODQ5LCAwLCA2NTg1NSwgNjUxMTIsIDE3OTYsIDEyMDUwNSwgMCwgNzg1NTUsIDgxNjQsIDQxMzAxLCAzNTAyLCAwLCAKKyAgICA3Mzg4LCAxMDYyMSwgNzM4MzgsIDc4NTUzLCA1ODI1LCAxMzAwNywgNjgxNjUsIDAsIDEyMDQ1NywgMTI2NjEsIDc2MDgsIAorICAgIDEwMzU0LCAxMDQxOCwgNDI0MTEsIDIwMjIsIDAsIDE0MDksIDEyMTk1LCA0MDAxLCAzMTEyLCAxMDgyNCwgMTIwNjM5LCAKKyAgICAxMzkwLCAwLCAwLCA0MjEsIDQzNTM2LCA1ODQ2LCAxMjAxMjAsIDQxMzAsIDAsIDc1OTUsIDQyNTg4LCA3NjAwLCAxMjAxMjEsIAorICAgIDY2MDM1LCAwLCAwLCA2NTg1MSwgNDI2MDcsIDAsIDAsIDMxNjgsIDAsIDQyMTM0LCAwLCAyMzcwLCAyODQ2LCAwLCAwLCAwLCAKKyAgICAxMjAxMzIsIDAsIDE4MzYsIDAsIDAsIDExOTEzNywgMzc0MCwgMCwgNjI5MCwgNjUzNzQsIDEyMDQ1MSwgNjU5MjMsIDM5NDQsIAorICAgIDY2NjI4LCAxMjA0MzQsIDAsIDYxMzUsIDMxMTgsIDc0MjY1LCAxMTkwOTMsIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgCisgICAgNjQ3MzksIDc5NDMsIDAsIDAsIDEwNjE4LCAyNTg0LCAwLCAwLCAwLCA5OTk4LCAwLCAwLCAwLCAwLCAwLCA2MjA0LCAwLCAwLCAKKyAgICA4Mjc5LCA4Nzc2LCA2NDk1NCwgNDk3NSwgNzQ4MDksIDEyMDEzMCwgNDI2NywgMCwgNDIyMDYsIDAsIDAsIDE5NTA0NiwgCisgICAgNjU3MDAsIDY2NTYyLCAwLCA2NDY0NSwgMCwgMCwgMCwgMTI1ODYsIDAsIDkyNDIsIDAsIDAsIDQ1MjMsIDU4NDIsIDEwNDk1LCAKKyAgICAzMTIyLCAwLCA3NzkzLCA3ODI3NSwgOTMyOCwgMCwgMCwgMTI2MDQsIDAsIDY2MTUsIDY3NjUwLCAwLCAzOTg2LCA0NDAyNSwgCisgICAgMCwgODkxMiwgNjQ1NTUsIDc0MDksIDAsIDAsIDk1NDEsIDc4Mjc2LCAwLCAxMTI3NSwgODU0MCwgMTE0OTgsIDAsIDAsIAorICAgIDQxMDQwLCAyNDU5LCAwLCAxMzA2MCwgNDEwNDEsIDc0NDEzLCAwLCAwLCAwLCA2ODQyNywgMTA0NTAsIDEyNTUxLCA0MTA0MywgCisgICAgNzAyMCwgMTIwMzUzLCAzNzY1LCAwLCAwLCAxNjA2LCAxMjAzNDgsIDEyMDM1MSwgMzA5MywgNjg0MzYsIDAsIDAsIAorICAgIDEyMDY0OSwgMCwgMCwgNDMxMiwgNzQwOTEsIDEyMDMzNywgMTIwMzM2LCAxMTkyMywgNDAyMywgMTIwMzMzLCA1NzYzLCAKKyAgICAxMjAzMzUsIDQ4MjcsIDEwODk0LCAxMjgxMCwgNjQ0MDYsIDExODc4NSwgNDQ1NSwgNzQzMjEsIDQzMywgMTE5NjIwLCAKKyAgICA2NjY2MCwgMjQ5OSwgMCwgMCwgMCwgMTE5NzMsIDEzMDg5LCA0MjkzLCAxMjAzMjksIDQyMjI0LCA0Mjc1OCwgMTIxOTYsIAorICAgIDQyODM3LCA0MjIyNiwgMTE5MzE5LCAwLCAxMTkxMjYsIDU4MTcsIDAsIDU1Mjc3LCAzMTIwLCA5Nzk3LCAwLCAwLCAwLCAKKyAgICAxMDM4OSwgMCwgMCwgNDg5NSwgNjUzNTgsIDAsIDQzNTksIDU4NSwgMCwgMzUwOSwgMCwgNDg2LCA0MjkwLCA1NzU4LCAwLCAKKyAgICAwLCAwLCA3MDA0LCAwLCA2NTg4MCwgMCwgMTE5MDQ4LCAyMzgwLCAxMTM4MCwgMCwgMCwgMjM3NiwgMCwgOTE3ODQ3LCAwLCAKKyAgICA1MTk3LCAxMjcwNDYsIDEyNzA0NywgMTI3MDQ4LCAyMzY2LCAxMjcwNTAsIDEyNzA1MSwgMTIwNTU0LCAxMjAwNDUsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDc0MTg4LCAwLCAwLCAwLCAxMjAwNDcsIDAsIDAsIDAsIDEyMDA0OSwgMCwgMTg0NywgMCwgCisgICAgMTAzMzksIDAsIDQyMzg0LCAwLCA0MjI3LCA3NDE1OCwgMCwgMCwgNDMwMzIsIDAsIDQyMzY1LCAwLCAxMjY3MSwgMTEzODQsIAorICAgIDAsIDAsIDAsIDY0Nzk3LCAwLCA1ODIwLCAwLCAxMjAwNTIsIDEyMDA2NSwgMCwgMTIwMDY0LCAxMjA2NTAsIDQyMTM3LCAKKyAgICA5ODkzLCAyNzU0LCAxMjY2NCwgMTIwMDYzLCAwLCA3Mzc3LCAwLCA0MTc5OSwgNjU1MzAsIDE3MTEsIDEyOTg0LCA0MzAzOSwgCisgICAgMzExNCwgNjI1NSwgMCwgMTE4OTM4LCAwLCAxMDg1MywgOTI2LCAwLCA3NDE4NCwgMCwgMTIwMDU1LCAwLCA0MzE3NSwgMCwgCisgICAgNDMwMzcsIDQxNzk4LCA0MTAzNSwgMTE1ODMsIDAsIDQxODAxLCAxMTkwODgsIDAsIDUyMCwgNDIwMCwgMTI2OTksIDgzMzEsIAorICAgIDAsIDMwOTEsIDQxMDM0LCAxMjczNTMsIDAsIDgzNjAsIDAsIDc4MDQ0LCAzMjEsIDQyMjksIDY0NTQzLCAwLCA2NTU2MywgMCwgCisgICAgOTE3OTc0LCAyODYxLCAwLCAxMDA5NSwgMCwgMCwgMCwgMTg2MSwgMCwgMCwgMCwgMCwgNDMwNDEsIDAsIDAsIDAsIDM4NTksIAorICAgIDEyMTgxLCA0MTY2MCwgODIwOSwgMCwgNzM4NjcsIDEyOTczLCAwLCA3NDc1NywgMTI3NTE0LCA0MTY1OCwgMCwgMCwgNTc2MCwgCisgICAgMCwgNzQzLCA0NDE0LCAxMjA3NjYsIDAsIDQyNjMyLCA5MTc5NzMsIDY1MTYxLCA3Mzg5NiwgMCwgMCwgMTQwNSwgMTE5MDYzLCAKKyAgICA0MzIyMCwgNDMzNDEsIDAsIDE5OTE5LCAwLCA2NDUzMiwgNjUzNjcsIDQzNzEwLCAwLCAwLCAzNTEzLCAwLCAxMTg4ODMsIAorICAgIDQzMzQyLCAxMTkwNjQsIDY1NTI5LCA2NTM2NCwgMCwgMCwgNjQ4NSwgMTM5NywgMCwgNDE5ODYsIDAsIDAsIDAsIDc0MDk3LCAKKyAgICAwLCA3NDcxLCAxMjA3OSwgMCwgMTI2ODIsIDQzMjg3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMDk5LCAxMDQ5MCwgMCwgMTA1MDEsIAorICAgIDY1MTgxLCA3NDQ2MywgMCwgNDY0LCA0MTYyNCwgNjUyODMsIDY3NjYzLCA3ODIyMiwgMTM0NiwgMCwgOTE3NjMxLCA2NDcyNCwgCisgICAgNjQ4OTcsIDQyMywgMTgxOCwgNjUxNDQsIDAsIDgyNzIsIDAsIDE5OTExLCA0MjE4LCAzMDg3LCA2NDk2MCwgMTI3MjM0LCAKKyAgICA0MzU2NCwgMCwgMCwgOTU4NCwgMTA0NjUsIDAsIDc0MzU5LCAxMjYyNiwgOTEwNiwgMCwgNDI2NDIsIDAsIDY0NzUwLCAKKyAgICA5MzkwLCAwLCA0MTc5NywgMCwgMCwgMjY1LCA0MTc5NSwgNjQ2NjYsIDAsIDQzNTMwLCAyNzUyLCAwLCAwLCAwLCA1OSwgMCwgCisgICAgMCwgMCwgMCwgNzc4NzMsIDQxODEwLCAwLCA3MDEwLCAwLCA0MTgwOSwgNDE0OTUsIDExOTM2NCwgMCwgNDIyNTIsIDQyMjEzLCAKKyAgICA4MDA5LCAzMzA1LCA0MzAzMywgNTExLCAxMTkzMjAsIDY2MjU1LCAxMzEyNywgMTIwMDY3LCAwLCAwLCAwLCA5MTc5NzcsIAorICAgIDY1OTE1LCAxNDAwLCA0MTgxMiwgMTA2ODUsIDE5NDg3MCwgMjEwMywgMTAzODcsIDQ0NTMsIDQzMjc2LCA5MTc3ODMsIAorICAgIDEzMTU5LCAwLCA2NDgxLCA0MTIxMywgMCwgMCwgMCwgMCwgNDE5ODMsIDc0MTk4LCA2NjE3LCA5MTE2LCAxMTk2NTQsIDAsIAorICAgIDQ2MiwgNjgxMTAsIDEwNDkzLCAwLCA4MTI5LCAwLCAwLCA3NDQ3MSwgNjY0NCwgMTE2NTgsIDAsIDAsIDM0NTIsIDExOTA2LCAKKyAgICA5NTgxLCAxMzg1LCAzMDk4LCAwLCAxMTkwMTMsIDQzMzQwLCAwLCA0MTAzMywgNjQ5MywgNDI2MjYsIDAsIDAsIDExNDI2LCAKKyAgICAwLCAxNjgxLCAxMTg3ODksIDEyMDQsIDM3NTUsIDY0NjYxLCA3MjM1LCAxMDE3MCwgMzk2NiwgODkxMSwgMCwgNDE4NDEsIAorICAgIDQzMzM4LCAwLCAwLCA1NzI2LCA2NDkxNSwgNDIxNzUsIDAsIDAsIDQxNDk3LCA2NTA0NCwgMCwgMjg1MSwgNDMwMTcsIDAsIAorICAgIDAsIDQzNzMsIDc4MDU4LCAwLCA5NTg3LCAxNzg5LCA2NjcxLCAwLCAzMTAwLCAwLCA2NTM2MCwgMCwgMTI3NTEwLCAwLCAKKyAgICA2NDkyMiwgMCwgODE5MCwgMTIwODMsIDAsIDAsIDY1MDYsIDY0MzEyLCA3NDM3NCwgMjM2OCwgMCwgNDQxOSwgMCwgCisgICAgMTE5MTI1LCAzNDM5LCAxODI1LCAxMTkyLCAxMjAxMDYsIDg4OTEsIDMwODAsIDEyMDIyOCwgMjM0NywgNTQzMCwgMCwgCisgICAgODk5MCwgMjg0OCwgMCwgMCwgMCwgMjQ5LCAwLCAwLCAwLCAxMjA2NTgsIDAsIDAsIDg4ODMsIDkxNzgwMiwgNzI4LCAKKyAgICA2ODE3OCwgOTk1LCAwLCAwLCA2NDgyNiwgMCwgOTE3Nzk4LCAwLCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgCisgICAgMTk0ODE0LCAwLCAxMjExMiwgMCwgMCwgMCwgNzQ0MTksIDEyMzM1LCAxMjAxMDQsIDkxNzc5NSwgMzQ0MywgMzEyOSwgMCwgCisgICAgMjEwMiwgNjU0NDUsIDc4MjU4LCA2NDg5MSwgMCwgNzcyNSwgMCwgNzgyNTUsIDAsIDg2MjQsIDY5MjQ2LCAxMjQ0NiwgCisgICAgNDMyOTUsIDAsIDQxODk0LCAwLCA2Mjc3LCA0MTY3MiwgNDE4OTMsIDEwMDEwLCAwLCAzNTQwLCAwLCA4MzUsIDAsIDY5ODE2LCAKKyAgICAxMTk4NjgsIDc0NDA4LCAwLCA3Mzk1OSwgNTQyNiwgNDI1OCwgMCwgMCwgNTQyNCwgMCwgODI4MywgMCwgNTQzNCwgMCwgMCwgCisgICAgMTk5MTcsIDExNDA4LCAwLCAxMTk0NywgMCwgMTQwNCwgMzA5NSwgMTE0MzIsIDE5NDgxMywgMzQ2NCwgNjQ4NiwgNDgxOSwgCisgICAgMCwgMCwgNTcwLCA4MDk1LCAzNjcyLCAxMTk4NjQsIDE0OTgsIDY3ODY2LCAwLCAwLCA0MzEsIDAsIDAsIDAsIDAsIDY4MTY3LCAKKyAgICAwLCAxMzA5NiwgMCwgMCwgNDM0MDgsIDk1MTYsIDAsIDUyNjgsIDQyMjMwLCA0MjIyMCwgMCwgNDQ1MCwgMTIwNzIzLCAKKyAgICAxMTU0NywgNDM0MTcsIDAsIDM1NiwgMzQ3NywgMjI3LCAxMDQ4OCwgNjgyMDMsIDM4MiwgMTE0MTgsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDY0ODQsIDI1NDEsIDY2MDM5LCAwLCA3ODcxOCwgMCwgMzU0OSwgMCwgOTExMCwgMTE5NjY1LCAyNzQzLCAwLCA0MzI5MCwgCisgICAgMTk0ODEyLCA5MDk3LCAwLCA0MzAxNSwgODc4MiwgMCwgNzc2LCAyNTI0LCA0MjcwNywgODU3MywgMCwgMCwgMCwgMCwgCisgICAgNDI2OTQsIDY0OTQ0LCA4OTUyLCAzODU2LCAxMTg4MTgsIDAsIDU4NzIsIDY0OTUsIDAsIDAsIDAsIDAsIDAsIDEyMDczMywgCisgICAgMTI4NDksIDM5NTMsIDE4OTcsIDAsIDY1MDk0LCAxMTk5NCwgNDMzOSwgNzQ1NTYsIDAsIDY3ODQzLCAwLCAwLCAwLCAKKyAgICA2ODQ3MywgNzQxMDQsIDUyMjgsIDAsIDc4NjgsIDQzMTg0LCAwLCAwLCA3Mzk4NiwgNDM0MzgsIDAsIDQzMDIyLCAwLCAKKyAgICAxMTYyLCAwLCAyNjcxLCAwLCAwLCAwLCAwLCAxMTg4NjUsIDQ1NTMsIDczODExLCAwLCAxOTUwMDUsIDAsIDAsIDE5OTIxLCAKKyAgICA3NDMzMSwgMTE0MjQsIDE5NTAwNiwgNDU2NywgNDE4OTEsIDAsIDAsIDU1MjQ5LCA0ODIwLCA2NTIzOSwgMTk0NjYyLCAwLCAKKyAgICAwLCA0MzA0MiwgMTE5MjEyLCAxMzc3LCAxMjg2OSwgNDg5NywgNDI4MjEsIDkyNTAsIDAsIDQ0MzgsIDY0Mzg1LCAwLCAKKyAgICAxNzUzLCAxMTMzMSwgNjE0NywgMTk0OTQxLCA0MzI4MiwgODgzMywgMCwgMCwgNjUwNCwgNzg0MDgsIDEyNjk3OSwgMTA3MTksIAorICAgIDAsIDE4OTgsIDE0MTMsIDQyNDQzLCAwLCA4MDIsIDEyMTQxLCAwLCAxOTQ2NzEsIDY2NDgsIDEwNjcxLCAyNTI4LCAwLCAKKyAgICA2NDc4OSwgOTE2OSwgODM4LCAxMjcwOTIsIDEyMDY5NywgODQ0LCA1MDE0LCAwLCAyNTYsIDAsIDk5OTAsIDAsIDQyNzM5LCAKKyAgICAwLCA3NTQyLCA2NTQ2NCwgOTcyNiwgMCwgNjQ4OSwgMTAwNDgsIDc0MzI2LCA3ODcxOSwgNjY1NzMsIDAsIDc4NzI0LCAKKyAgICA3ODcxMiwgMTE3NjEsIDE5NDY1NSwgMCwgNDEwOTQsIDAsIDAsIDAsIDAsIDAsIDYxOTYsIDY5NDUsIDE5NDYyOCwgCisgICAgMTk0ODkwLCAxOTQ2MzEsIDEyMDQ5MSwgMTE4MTYsIDE5NDk0MywgNTczMywgMCwgMCwgMCwgNDEwOTgsIDAsIDQxMDkzLCAwLCAKKyAgICA2NjYyNiwgNTg4LCA5NzYwLCAwLCAxOTQ3MTcsIDEyMzgsIDIwMCwgMCwgMTY2MCwgNzM5MTYsIDAsIDExODkwNSwgNzQzNjIsIAorICAgIDAsIDAsIDE5NDY1MSwgMCwgMCwgMzM5NCwgMTk0ODk0LCAxMjA2NjgsIDAsIDAsIDAsIDY2MjE5LCAwLCA0MzI4NCwgCisgICAgMTk0NjU3LCA3ODE3LCAxODQxLCAxMTA1NSwgMTIwNTMzLCAxOTQ5NzksIDE5NDk4MiwgMTY2OSwgMTA3NzYsIDE5NDk4MSwgCisgICAgNzcwMSwgMTk0OTgwLCAwLCAxOTQ5OTUsIDE3MzIsIDQwMzAsIDAsIDM5NjMsIDY2NjExLCAxMjc1MzAsIDQxNzY4LCA2NDkxLCAKKyAgICAwLCA2NTMyNCwgOTE0LCA2NTMyMywgODA3MSwgMzUzOCwgMCwgNzg3MTMsIDY1MzI4LCAwLCA3NDM2NywgNzYxNCwgMCwgCisgICAgMTE4MTksIDAsIDEyMDA5LCAxMjM5OSwgMCwgNjc4NTIsIDY1NTM3LCAwLCAxMDg0MSwgNDM0MzAsIDUzMDEsIDAsIDAsIAorICAgIDU3MzQsIDg5NjAsIDAsIDEyNzUyNywgNjUzMTcsIDc3ODgwLCAwLCAwLCAwLCAxMjMwNCwgMCwgMCwgNjUzMTUsIDAsIDAsIAorICAgIDAsIDAsIDAsIDExOTYyMSwgMCwgNzQ1MzYsIDEyNDQ3LCA2NDQ4NiwgMCwgMCwgMCwgMCwgMCwgMCwgNDI3NjcsIDEwOTE1LCAKKyAgICAwLCAxMjAwNywgNDM2OTUsIDEyMDUyMCwgMTE5NzUsIDE5NDg3OCwgMCwgMCwgMjU1NSwgODYyOSwgMCwgNDMxNjgsIAorICAgIDQxODcyLCA0MzcwNiwgNDQ5NiwgMTk0ODc5LCAwLCAwLCAwLCAwLCAwLCAwLCA2NDczMCwgMCwgNjY3MTQsIDY4MjIyLCAwLCAKKyAgICAwLCA2NTU5NiwgMCwgMTE0MTYsIDQyODAsIDY3NjU1LCA4NzY1LCAxMjc4NCwgNzc5MiwgMTM5MywgMTI3MjQyLCA2Nzg3MSwgCisgICAgNzQzODYsIDAsIDgyMzMsIDQzNTcyLCAwLCA2NjgzLCAwLCAzNDQyLCAxMjE0NCwgMjg0MSwgMTI1NDMsIDAsIDE0NzMsIAorICAgIDQyODIwLCA2NDMyOSwgOTE3NzcyLCAwLCA2ODY0MiwgNjQ4OCwgMzU3LCAxMDQ4LCA0MTEwMCwgMCwgNDExMDQsIDAsIAorICAgIDQxMDk5LCAxMDU0LCAxMTkwNjUsIDEwNDAsIDY1NDUwLCAwLCA0NDM0LCAxMDY5LCAwLCAxMTg4NjIsIDc0MjMxLCAKKyAgICA5MTc3NjUsIDAsIDAsIDAsIDk2OTMsIDQxOTQzLCAwLCA0MTkzMSwgNDE3NTksIDEyNzU3LCA0MzUzLCAwLCAxMDU5LCAKKyAgICA5NzkwLCA4OTk1LCAwLCAwLCA2NTkzNywgMCwgNDE3NjQsIDEwNjQ2LCAwLCAxMTg4MzMsIDAsIDAsIDc0ODMwLCA3ODU2OSwgCisgICAgMTI3NDMsIDAsIDY0ODAsIDkxNzc2MSwgNDE3NzksIDQyNTgwLCA2NjYwMSwgMTIyMDcsIDExOTYxOSwgNjMzNSwgNjY2MDIsIAorICAgIDExMzEyLCA2NDgwNywgMCwgMCwgNDE3NjcsIDAsIDAsIDQzMDIwLCAwLCAzOTU1LCA3NDI1NCwgMCwgMCwgOTE3ODYxLCAwLCAKKyAgICA3NzkyNiwgOTc3MCwgOTI0NiwgMTIyMzAsIDAsIDAsIDAsIDEwNDQ4LCA0MTc4MywgNDE3ODYsIDEyNzA5MywgMTI3OTcsIAorICAgIDI3NTUsIDY0NTcxLCA3ODU3OCwgMTk0OTI3LCA0ODU3LCAwLCA0NDI4LCAxMjc5NCwgNzM3NTUsIDAsIDc4NTc0LCAwLCAwLCAKKyAgICAwLCA1NzQ3LCA3ODgyNSwgMCwgNzk3OCwgNDEwOTIsIDc0NTcxLCAwLCAxMTkyNCwgNzQyMDUsIDQyMTQ0LCA2NTAxNSwgMCwgCisgICAgNTYzLCAwLCAwLCAxMjc5OCwgMTEyNzEsIDU3LCAwLCAwLCA5MTc4NjAsIDExOTA0MywgMCwgMCwgNDMxMzcsIDY5NCwgMCwgCisgICAgOTg3NiwgMCwgMTE5MTY4LCAwLCA3ODgyMiwgNjQ1MzcsIDAsIDI3NywgNzQzODUsIDcyMjksIDEyNzYxLCAwLCAwLCAKKyAgICAxMzAyNSwgNjQ4MTEsIDg3NTcsIDc4ODI0LCAwLCAxNTc0LCA3MzgxLCAwLCAyNTI1LCA0ODUyLCA1NzQ5LCA2ODQ2NSwgCisgICAgMTMwMjcsIDQyODI0LCAxMjA1NzQsIDEwMzksIDk4MDEsIDEwMTU1LCA1NzQ1LCAxODgsIDQxODU4LCAxMTU5MiwgMCwgCisgICAgNzQwMTUsIDkwNTUsIDQxODUzLCA0ODU4LCA5MTc3ODAsIDAsIDQzNiwgNDc3MSwgMCwgMjc4NiwgMCwgNDg1NiwgODA1MSwgCisgICAgMCwgMTE5NjA5LCAwLCA5NjQ0LCAwLCAwLCAwLCAxOTQ5MTYsIDEyMDczMiwgNjY3MTAsIDExODgzNCwgMCwgNzM5MDYsIDAsIAorICAgIDEyNzExNCwgMCwgMTAyMzQsIDU4NDMsIDExOTM5LCAwLCA0MjE1NywgMCwgMzE1NywgMTk0OTE4LCA2ODM5MywgMCwgMzUwNCwgCisgICAgMTE5MTc4LCAwLCAxMDgyMiwgNTE0OSwgNjYwMjksIDEwMjI2LCA2NTE0MiwgMCwgMzU5NCwgNDI0MjQsIDE5NDk1OSwgNDAsIAogICAgIDEyNjU3LCAwLCAwLCAzODYsIDAsIDg4MzQsIDAsIDEyODE1LCA0MzU3NCwgMCwgNzM5MDcsIDAsIDc0MTk2LCA3MjIwLCAKLSAgICA3NDUwNCwgMCwgNzQzMTYsIDAsIDAsIDQzMDQsIDc0NTAzLCA4MTYwLCAwLCAxOTQ3NTMsIDAsIDAsIDAsIDEzNDgsIDAsIDAsIAotICAgIDAsIDEzMzAzLCAwLCAwLCAxOTQ3NTUsIDc1OTksIDEyNzgsIDAsIDEzMjY5LCAwLCAwLCA3NDM4NywgMCwgMCwgNzQ0OTIsIAotICAgIDYwOTcsIDc1NjgsIDg3ODAsIDQ5ODIsIDAsIDc0NTAxLCAxOTQ3NjMsIDAsIDE5NDc2MiwgMjY3MiwgMzczNSwgMTk0NzM1LCAKLSAgICAxMzEzOCwgNDIyNjYsIDk0ODQsIDEwNzI0LCA0MTIwMiwgMTE5MDI0LCAwLCAwLCAwLCA5NDg3LCAwLCAxOTQ3NjUsIDM4NDIsIAotICAgIDE5NTAzNCwgMTk1MDU2LCAxMjQ0MiwgNjE5MywgOTc5MSwgMCwgMCwgNDI1MTYsIDcyMjgsIDc1NTksIDc0ODAzLCAKLSAgICAxOTQ2ODksIDE5NDg1MSwgMTEzOTksIDExOTIxOSwgMTk0ODU2LCAxOTQ4NTUsIDAsIDE5NDg1NywgMzYwNCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDI1MDcsIDE5NjIsIDE5NDg2MSwgMTk0Njk2LCA0MjUwNSwgMTE2NjAsIDAsIDAsIDAsIDY5OTUsIDc0MTczLCAKLSAgICA1NDM3LCA3NDE3NCwgMTA2NjksIDg3MDIsIDc5NjQsIDE5NDcwNiwgMCwgMTk5LCAxOTQ4NDMsIDQxMDUsIDE5NDg0NSwgCi0gICAgMTk0NzAxLCAxOTQ4NDcsIDE5NDcxMCwgMTE5ODc1LCAxMzE0OCwgNzU2MCwgMCwgOTIyNiwgMCwgMTk1MDcwLCA2NDcyLCAKLSAgICA2NTgxNCwgNzM5NTQsIDAsIDQ3MjQsIDAsIDAsIDkxOTEsIDAsIDAsIDAsIDAsIDE5NTAyNCwgMTAxOTYsIDc4ODYsIDAsIAotICAgIDY1ODUsIDAsIDY2ODAsIDE5NTA0MiwgMCwgMTk1MDUxLCA2Njc5LCA3NDQxMiwgMCwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIAotICAgIDAsIDAsIDAsIDAsIDE5NDgzMywgMTk0ODMyLCA2NjgxLCAxOTQ4MzQsIDEyNjkzLCAxOTQ4MzYsIDE5NDgzOSwgMTk0ODM4LCAKLSAgICAxOTQ4NDEsIDE5NDg0MCwgNjU0NDIsIDExOTYxMCwgMTE4ODg3LCAxMjE2NiwgNzQ0MTUsIDY2MjQ4LCAxOTQ4MTYsIDAsIAotICAgIDE5NDgxOCwgMTk0ODE3LCAxOTQ4MjAsIDE5NDgxOSwgNTI5NywgNzA0MiwgMTMyODQsIDYxMTIsIDc5NjgsIDE5NDgyNSwgCi0gICAgNzM5MjksIDE5NDczOCwgMTk0NzM2LCA2NTc0NiwgMCwgNzQ0MDksIDc0Mzg5LCAxOTQ4MjYsIDQzNDIsIDQyODM5LCAKLSAgICAxOTQ4MzEsIDE2NzcsIDAsIDAsIDAsIDkxNzg1NSwgMTEwOTEsIDExMDExLCAyNzE5LCAwLCAwLCAwLCA2NDQ5NSwgMCwgMCwgCi0gICAgNzU4NSwgNjUxNjksIDQyODQ1LCA0MzA4LCA5MTc4NTgsIDc0MTc3LCA3NTA1LCA1NDMsIDY0OTE2LCA2NDczNiwgMCwgMCwgCi0gICAgNjY2NzAsIDAsIDExODkyMiwgMTk5MTEsIDAsIDQzMTU4LCA3OTAyLCAwLCA2NTI2NSwgMTk0NjM5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3NDUwNCwgMCwgNzQzMTYsIDAsIDc3OTMyLCA0MzA0LCA3NDUwMywgODE2MCwgNzg3MDcsIDE5NDc1MywgMCwgMCwgMCwgCisgICAgMTM0OCwgMCwgNzg1OTcsIDAsIDEzMzAzLCAwLCAwLCAxOTQ3NTUsIDc1OTksIDEyNzgsIDQzNjE2LCAxMzI2OSwgMCwgMCwgCisgICAgNzQzODcsIDc4MTc5LCA3ODU5OCwgNzQ0OTIsIDYwOTcsIDc1NjgsIDg3ODAsIDQ5ODIsIDAsIDc0NTAxLCAxOTQ3NjMsIAorICAgIDc4NTkyLCAxOTQ3NjIsIDI2NzIsIDM3MzUsIDE5NDczNSwgMTMxMzgsIDQyMjY2LCA5NDg0LCAxMDcyNCwgNDEyMDIsIAorICAgIDExOTAyNCwgMCwgNDM3NDIsIDAsIDk0ODcsIDExOTk1OSwgMTE5MTE3LCAzODQyLCAxOTUwMzQsIDc4NjY4LCAxMjQ0MiwgCisgICAgNjE5MywgOTc5MSwgMCwgMCwgNDI1MTYsIDcyMjgsIDc1NTksIDc0ODAzLCA3ODQ2OCwgMTk0ODUxLCAxMTM5OSwgMTE5MjE5LCAKKyAgICAxOTQ2OTEsIDE5NDg1NSwgMTk0NjkwLCAxOTQ4NTcsIDM2MDQsIDAsIDExOTE4OCwgMCwgNzg1NDAsIDc4NTQxLCA0MjUwNywgCisgICAgMTk2MiwgNzg0OTAsIDc4NDc2LCA0MjUwNSwgMTE2NjAsIDAsIDIwNzIsIDAsIDY5OTUsIDc0MTczLCA1NDM3LCA3NDE3NCwgCisgICAgMTA2NjksIDg3MDIsIDc5NjQsIDE5NDcwNiwgMCwgMTk5LCAxOTQ4NDMsIDQxMDUsIDE5NDg0NSwgMTk0Njk5LCAxOTQ4NDcsIAorICAgIDE5NDcxMCwgMTE5ODc1LCAxMzE0OCwgNzU2MCwgNzg0NzksIDkyMjYsIDc4NDgwLCAxOTUwNzAsIDY0NzIsIDY1ODE0LCAKKyAgICA3Mzk1NCwgMCwgNDcyNCwgMCwgMCwgOTE5MSwgMCwgNjQ0MzIsIDAsIDAsIDE5NTAyNCwgMTAxOTYsIDc4ODYsIDAsIDY1ODUsIAorICAgIDAsIDY2ODAsIDE5NTA0MiwgMCwgMTk1MDUxLCA2Njc5LCA3NDQxMiwgMCwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDAsIDAsIAorICAgIDAsIDAsIDE5NDgzMywgMTk0ODMyLCA2NjgxLCAxOTQ4MzQsIDEyNjkzLCAxOTQ4MzYsIDQyNzI3LCAxOTQ4MzgsIDE5NDg0MSwgCisgICAgNzgxOTUsIDY1NDQyLCAxMTk2MTAsIDc4MTk5LCAxMjE2NiwgNDMyNDgsIDY2MjQ4LCAxOTQ4MTYsIDAsIDE5NDgxOCwgCisgICAgMTk0ODE3LCAxOTQ4MjAsIDE5NDgxOSwgNTI5NywgNzA0MiwgMTMyODQsIDYxMTIsIDc5NjgsIDE5NDgyNSwgNzM5MjcsIAorICAgIDE5NDczOCwgMTk0NzM2LCA2NTc0NiwgMCwgNzQ0MDksIDc0Mzg5LCAxOTQ4MjYsIDQzNDIsIDQyODM5LCAxOTQ4MzEsIAorICAgIDE2NzcsIDAsIDAsIDE5NDgwNiwgOTE3ODU1LCAxMTA5MSwgMTEwMTEsIDI3MTksIDAsIDAsIDExOTU5NSwgNjQ0OTUsIDAsIAorICAgIDAsIDc1ODUsIDY1MTY5LCAyMDUyLCA0MzA4LCA5MTc4NTgsIDc0MTc3LCA3NTA1LCA1NDMsIDY0OTE2LCA2NDczNiwgMCwgMCwgCisgICAgNjQ2NTUsIDAsIDExODkyMiwgMjA2NCwgMCwgNDMxNTgsIDc5MDIsIDAsIDY1MjY1LCAxOTQ2MzksIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDEyOTk0LCAwLCAxMDgyOCwgMCwgNjIyOCwgNDMwNywgMzQ4MiwgMCwgMCwgMCwgMCwgNTA2LCA3NDU3MywgNDExOTQsIAotICAgIDY1NzM1LCAwLCAwLCA0MTE5NSwgMCwgODE2OSwgMCwgODg0MSwgMCwgNTE2LCAwLCA0MTE5NywgMTE5MDUxLCAzNCwgMCwgCi0gICAgMTIwMTg2LCAxMjAxODUsIDE2MTIsIDc0MzMzLCAxMjAxODIsIDEyMDE4MSwgNzQzMDgsIDEyMDAxLCAxMjAxNzgsIDEwMjQyLCAKLSAgICA2NDU2NCwgMTIwMTc5LCAxMjAxNzQsIDY1ODQsIDc3NDksIDExMDM3LCAwLCAxNzU4LCAwLCAxMDY2NywgMTA1NjAsIAotICAgIDEyMDE5NywgMTIwNzU2LCAxOTM1LCAxMTUxNywgMTIwMTkzLCAxMjAxOTYsIDEyMDE5NSwgMTkzMSwgMTIwMTg5LCA3NDgzOSwgCi0gICAgMTIwMTkxLCAxMjE3LCA2NDcwMiwgMTI2NDMsIDgyNSwgMCwgMTk0OTA1LCAxMjI5NCwgMCwgMTk0OTA4LCA5MTM4LCAKLSAgICAxOTQ5MTAsIDE5NDkwMiwgMTI2MzEsIDE5NDkxMSwgMTEwODAsIDc0NTU0LCAwLCA1NTkxLCAxMjM5LCAwLCAxMTMxMywgMCwgCi0gICAgMzQwMywgMCwgMCwgNjQzNjQsIDAsIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgMCwgMCwgMTk0ODk4LCAKLSAgICA2NzU4OSwgNDE4NTAsIDY0MjkwLCAzNDMzLCAwLCAxMjYxNSwgMTU5NCwgNjU2MDcsIDY5MTQsIDY3NjAzLCAwLCAxMTk1NjksIAorICAgIDY1NzM1LCAyMDU1LCA0MzI1NSwgNDExOTUsIDAsIDgxNjksIDAsIDg4NDEsIDAsIDUxNiwgMCwgMjA2MywgMTE5MDUxLCAzNCwgCisgICAgMCwgMTIwMTg2LCAxMTUwNCwgMTYxMiwgNzQzMzMsIDEyMDE4MiwgNzQ1MjAsIDc0MzA4LCAxMjAwMSwgMTIwMTc4LCAKKyAgICAxMDI0MiwgNjQ1NjQsIDEyMDE3OSwgMTIwMTc0LCA2NTg0LCA3NzQ5LCAxMTAzNywgMCwgMTc1OCwgMCwgMTA2NjcsIAorICAgIDEwNTYwLCAxMjAxOTcsIDEyMDc1NiwgMTkzNSwgMTE1MTcsIDEyMDE5MywgMTIwMTk2LCAxMjAxOTUsIDE5MzEsIDEyMDE4OSwgCisgICAgNzQ4MzksIDEyMDE5MSwgMTIxNywgNjQ3MDIsIDEyNjQzLCA4MjUsIDAsIDE5NDkwNSwgMTIyOTQsIDEyNzI2MSwgNzg4MzQsIAorICAgIDkxMzgsIDc4ODMxLCA3ODgzMywgMTI2MzEsIDc4ODI5LCAxMTA4MCwgNzQ1NTQsIDAsIDU1OTEsIDEyMzksIDAsIDExMzEzLCAKKyAgICAwLCAzNDAzLCAwLCAwLCA2NDM2NCwgMCwgMCwgNzQ1ODIsIDg5OTgsIDEyOTg4LCAwLCA5MTUyLCAwLCAwLCAxOTQ4OTgsIAorICAgIDY3NTg5LCA0MTg1MCwgNjQyOTAsIDM0MzMsIDAsIDEyNjE1LCAxNTk0LCA0MjE5MiwgNjkxNCwgNjc2MDMsIDAsIDExOTU2OSwgCiAgICAgNzQ1NjUsIDQxMzUzLCA2NzYwMiwgNjc2MTEsIDQzMzcsIDAsIDE5NDg5NywgOTE4LCA2NTAzNSwgNDEzNTEsIDc2ODEsIAotICAgIDE5NDkwMCwgNDI1NzcsIDQxMzkzLCAxMjY2OCwgMTk0OTA0LCAyNDc3LCAwLCAwLCAwLCAwLCA2NzYwNCwgMTk0ODgwLCAwLCAKLSAgICA1NzMsIDE5NDg4MSwgMTk0ODg0LCAxMTQxNywgMTk0ODg2LCAxOTQ4ODUsIDE5NDg4OCwgNjc1OTksIDAsIDE5NDg4OSwgCi0gICAgNjc2MDcsIDExNDgyLCAwLCAwLCAzMzU3LCAwLCAxOTQ4OTEsIDQyMDcsIDEyODgsIDE5NDg5MiwgMTk0ODk1LCAxOTQ4OTQsIAotICAgIDAsIDExNTg5LCA2NjM1NCwgMTk0ODcyLCAwLCAwLCA2NDYwMiwgMTk0NjcwLCAwLCAwLCA0Mjc4OCwgMCwgNjQ0ODAsIAotICAgIDE5NDg3NSwgODQyMywgMzM0OCwgNDQ4LCAxOTQ4NzksIDk3MTcsIDAsIDAsIDk5NywgMCwgMCwgMCwgMCwgMTE0NDAsIAotICAgIDExMzc5LCA0MjAwMCwgMTMxMzksIDAsIDY1MDEzLCAxMjY5OTksIDAsIDczNzk2LCAwLCAwLCAxMjAzNSwgMCwgMjgxOCwgMCwgCi0gICAgMCwgNzM3OTMsIDAsIDQxNzIsIDAsIDAsIDgzNzMsIDEwODczLCAxMjE5NywgMCwgMCwgMCwgMCwgMCwgMTI2OTc3LCAwLCAwLCAKLSAgICAxOTQ4NjUsIDEyNjk4MiwgNzQ1NjMsIDY0ODI4LCAxMTQxOSwgMTk0ODY4LCA3NjYsIDEyNTcsIDAsIDAsIDExMzgxLCAKLSAgICAzMjY1LCA2NjYxNywgMzI3NCwgMCwgMCwgMCwgMCwgMCwgNDE5ODksIDAsIDAsIDAsIDMyNjMsIDAsIDY1NjcyLCAwLCAKLSAgICAzMjcwLCA2NDUzOSwgMTE0ODksIDAsIDAsIDAsIDAsIDk1MDUsIDY1NTE4LCAwLCA3NTYsIDE5NTA1MiwgMCwgMCwgMCwgCi0gICAgNzI2MSwgMCwgMTg2LCAwLCAxMTkxNTYsIDU3NzAsIDEzMTc5LCA2NTgzMCwgMTI2MTIsIDEyOTQ5LCA2NDg1NiwgMTI4MDAsIAotICAgIDAsIDc0MjAzLCA2NDcxOCwgMCwgMCwgMCwgMTE4OTI5LCAwLCAxMTU3OCwgMCwgMTE5Mjk2LCAwLCAwLCAwLCAwLCA3NDU2OCwgCi0gICAgOTI1NCwgMCwgMTc5NCwgMTIwMjE3LCA2NDUyMSwgNTYyNCwgMTIwMjIwLCAxMjAyMjEsIDExOTk1OCwgMTIwMjIzLCAzNjE3LCAKLSAgICA2NjYzNiwgNjQ4ODYsIDEyMDIxMSwgMTIwMjEyLCAxMjAyMTMsIDEyMDIxNCwgMTg3MiwgNjY1MDgsIDEyMDQ2NywgNDEwNzksIAotICAgIDEwNzQ4LCA1NTAyLCAxMTkzMzAsIDQ0NTIsIDAsIDAsIDAsIDQ1MTEsIDAsIDAsIDAsIDExNDI1LCAwLCAwLCAxMjMxLCAwLCAKLSAgICAwLCAwLCA5MDAzLCA4MTkyLCAwLCA1MzA1LCA5NjUzLCAxMDYxNiwgODY5NCwgOTU0NiwgMCwgMCwgMTIwNDc4LCAxMjAyMDAsIAotICAgIDY1MjA1LCAxMjAyMDIsIDY0MDYzLCA5ODc4LCA3NDc4MCwgMTE5NjI2LCAxMjAyMDcsIDY0MDU4LCA4Nzk5LCA0MjEzMSwgMCwgCi0gICAgNjQwNjIsIDEwMjgsIDY0MDYwLCA2NDA1OSwgODM3LCAxMDU2NywgMCwgNDMxMDMsIDAsIDAsIDExNDI3LCAyOTAyLCAKLSAgICA2NDA0MywgNjQwNDIsIDY2NDY0LCAxMDc1NiwgMCwgNDI2MDYsIDY0MDQ1LCA2NDA0NCwgMCwgMTAwNzYsIDY0MDQwLCAKLSAgICA2NDAzOSwgMCwgMTAzNCwgMzM5MiwgMCwgNDMwOTEsIDY0MDMzLCA2NDAzMiwgNjU0NjgsIDY0MDM4LCA2NDAzNywgNjQwMzYsIAotICAgIDY0MDM1LCA0MjkxLCAxOTQ5MjgsIDY0MDE1LCA2NDAxNCwgNjQ2ODEsIDE5NDkzMCwgMCwgMTk0OTQ0LCAwLCA0MzA5MCwgMCwgCi0gICAgMzQ3NiwgODk3MywgNjQwMTIsIDQyNDczLCA2NDAxMCwgNjQwMDgsIDY0MDA3LCAyMDAzLCA3NzA2LCA2NDUxNywgMTE5MTgzLCAKKyAgICAxOTQ5MDAsIDQyNTc3LCA0MTM5MywgMTI2NjgsIDE5NDkwNCwgMjQ3NywgMCwgMCwgMTI3MzAyLCAwLCA2NzYwNCwgCisgICAgMTk0ODgwLCAxMjcyMzUsIDU3MywgMTk0ODgxLCAxOTQ4ODQsIDExNDE3LCAxOTQ4ODYsIDE5NDg4NSwgMTk0ODg4LCAKKyAgICA2NzU5OSwgMCwgMTk0ODg5LCA2NzYwNywgMTE0ODIsIDAsIDAsIDMzNTcsIDAsIDQyMjIzLCA0MjA3LCAxMjg4LCA3ODg0MiwgCisgICAgNzg4MzksIDY4NDE5LCA3ODgzNywgMTE1ODksIDQyMTk1LCAxOTQ4NzIsIDkxNzYyNywgMTI3MjYzLCA2NDYwMiwgNjc2MTgsIAorICAgIDAsIDAsIDQyNzg4LCA2ODQxNiwgNjQ0ODAsIDE5NDg3NSwgODQyMywgMzM0OCwgNDQ4LCA2ODQ3NiwgOTcxNywgMCwgMCwgCisgICAgOTk3LCAwLCAwLCAwLCAwLCAxMTQ0MCwgMTEzNzksIDQyMDAwLCAxMzEzOSwgNDIyMjEsIDY1MDEzLCAxMjY5OTksIDAsIAorICAgIDczNzk2LCAwLCAxMTkyMjgsIDEyMDM1LCAwLCAyODE4LCAwLCAwLCA3Mzc5MywgMCwgNDE3MiwgMCwgMCwgODM3MywgCisgICAgMTA4NzMsIDEyMTk3LCAwLCAwLCAwLCAwLCAwLCA3ODIxMCwgMCwgMCwgMTk0ODY1LCAxMjY5ODIsIDc0NTYzLCA2NDgyOCwgCisgICAgMTE0MTksIDE5NDg2OCwgNzY2LCAxMjU3LCAwLCAxMTg4NDUsIDExMzgxLCAzMjY1LCA2NjYxNywgMzI3NCwgMCwgMCwgMCwgCisgICAgMCwgMTE5MDkyLCA0MTk4OSwgMCwgMCwgMCwgMzI2MywgMCwgNjU2NzIsIDAsIDMyNzAsIDY0NTM5LCAxMTQ4OSwgMCwgMCwgCisgICAgMCwgMCwgOTUwNSwgNjU1MTgsIDE5NDc3NiwgNzU2LCAxOTUwNTIsIDAsIDAsIDAsIDcyNjEsIDAsIDE4NiwgMCwgMTE5MTU2LCAKKyAgICA1NzcwLCAxMzE3OSwgNjU4MzAsIDEyNjEyLCAxMjk0OSwgNjQ4NTYsIDEyODAwLCAwLCA3NDIwMywgNjQ3MTgsIDAsIDAsIDAsIAorICAgIDExODkyOSwgMCwgMTE1NzgsIDAsIDExOTI5NiwgMCwgMCwgMCwgMCwgNzQ1NjgsIDkyNTQsIDAsIDE3OTQsIDEyMDIxNywgCisgICAgNjQ1MjEsIDU2MjQsIDEyMDIyMCwgMTIwMjIxLCAxMTk5NTgsIDEyMDIyMywgMzYxNywgNjY2MzYsIDY0ODg2LCAxMjAyMTEsIAorICAgIDEyMDIxMiwgMTIwMjEzLCAxMjAyMTQsIDE4NzIsIDY2NTA4LCAxMjA0NjcsIDQxMDc5LCAxMDc0OCwgNTUwMiwgMTE5MzMwLCAKKyAgICA0NDUyLCAwLCAwLCA5MTc4NzksIDQ1MTEsIDAsIDAsIDY0Njc4LCAxMTQyNSwgMCwgNDMyNDUsIDEyMzEsIDAsIDAsIDAsIAorICAgIDkwMDMsIDgxOTIsIDAsIDUzMDUsIDk2NTMsIDEwNjE2LCA4Njk0LCA5NTQ2LCAwLCAwLCAxMjA0NzgsIDEyMDIwMCwgCisgICAgNjUyMDUsIDEyMDIwMiwgNjQwNjMsIDk4NzgsIDc0NzgwLCAxMTk2MjYsIDc4MjAyLCA2NDA1OCwgODc5OSwgNDIxMzEsIDAsIAorICAgIDY0MDYyLCAxMDI4LCA2NDA2MCwgNjQwNTksIDgzNywgMTA1NjcsIDAsIDQzMTAzLCAwLCAxMjA3NTQsIDExNDI3LCAyOTAyLCAKKyAgICA2NDA0MywgNjQwNDIsIDY2NDY0LCAxMDc1NiwgMCwgNDI2MDYsIDY0MDQ1LCA2NDA0NCwgNDM5NzksIDEwMDc2LCA2NDA0MCwgCisgICAgNDMwNjAsIDAsIDEwMzQsIDMzOTIsIDAsIDQzMDkxLCA2NDAzMywgNjQwMzIsIDQyNzM1LCA2NDAzOCwgNjQwMzcsIDY0MDM2LCAKKyAgICA2NDAzNSwgNDI5MSwgMTk0OTI4LCA2NDAxNSwgNjQwMTQsIDY0NjgxLCAxOTQ5MzAsIDAsIDc4MTQ1LCAwLCA0MzA5MCwgMCwgCisgICAgMzQ3NiwgODk3MywgNjQwMTIsIDQyNDczLCA2NDAxMCwgNjQwMDgsIDY0MDA3LCAyMDAzLCA3NzA2LCA2NDUxNywgNzgxNTMsIAogICAgIDI1MzgsIDY0MDA5LCAyMDQsIDAsIDQ4MDIsIDQxMTEsIDgyMzksIDkwOTgsIDQ4MDUsIDY0MDAxLCA2NDA1NywgNzg4NSwgCiAgICAgNzI0NywgNjQwNTQsIDAsIDAsIDQ3NjcsIDkzNDMsIDY0MDQ5LCA2NDA0OCwgMTIwMDM0LCAxMTMzLCA2NDA1MywgNjQwNTIsIAotICAgIDY0MDUxLCA2NDA1MCwgNDEzNDAsIDAsIDAsIDEwMDA1LCAxMjMyOSwgNDEzMzMsIDAsIDg0ODksIDE5NDIsIDAsIDAsIAotICAgIDQyNTIwLCAwLCAwLCAwLCAxMDc2MCwgNjQwMjMsIDY0MDIyLCA2NDAyMSwgNjU4MiwgMCwgMCwgNjQwMjUsIDkxNjcsIAotICAgIDQyMTUxLCAwLCAwLCAyMDI2LCA2NDAxOSwgNjQwMTgsIDY0MDE3LCA2NDAxNiwgMTI3NjgsIDAsIDc1ODIsIDAsIDExODkxNSwgCi0gICAgMCwgMCwgMCwgMCwgMTIwNTM5LCAwLCA0MTQxMSwgMTMwOTQsIDAsIDc1MzIsIDQxNDE0LCAwLCAzMTc5LCAwLCA2NDc2OSwgCi0gICAgMCwgMCwgMTE0NjEsIDc0NDU0LCAxMDc1MSwgOTA1MSwgMCwgMCwgMTA1MzUsIDAsIDAsIDAsIDIwMDgsIDY0MDMxLCAKLSAgICA2NDAzMCwgMjk0LCA0MTg3NCwgMCwgMTI2OTkxLCA2NTkyOSwgMCwgMCwgMCwgMCwgNjQwMjgsIDgxNDYsIDY0MDI2LCAKLSAgICA0MTc4OCwgMTk0ODQ0LCAwLCAxMTg3OTUsIDAsIDExOTg4NywgMTE5ODg4LCAwLCAxMTk4ODYsIDExOTg5MSwgMTE5ODkyLCAKLSAgICAxMTk4ODksIDExNDMzLCAxMTk4OTUsIDExOTg5NiwgMCwgNzgwMSwgNjU1NzgsIDAsIDEyOTE1LCAwLCAzMjk3LCA5Njk5LCAKLSAgICAwLCAxMTM1LCAwLCAwLCAwLCAxOTk1LCA3OTI3LCAwLCAwLCAyNTUyLCA0MTU0NiwgNjAsIDAsIDg2NDksIDQxNTQ5LCAwLCAKLSAgICAwLCAwLCA2NjgyLCAwLCAwLCA2NDcxMCwgNDE1NDcsIDAsIDIwMTMsIDAsIDExOTg5OSwgMTE5OTAwLCAxMTk4OTcsIAotICAgIDExOTg5OCwgMTI4MzIsIDExOTkwNCwgODA4MSwgODM2MiwgMzUzNywgMTE5OTA4LCA5MTM3LCAxMTk5MDYsIDg5OTksIDAsIAotICAgIDExOTkwOSwgMzQ2NiwgMCwgMCwgMTk5NiwgMCwgMzQ1MywgNjI4MiwgMCwgMjAwMiwgMjAwMCwgMTIwMTc1LCA1MzcsIDAsIAotICAgIDQxNzksIDY1MTE5LCAxOTk4LCAwLCAxODQyLCAwLCAwLCA5NjI4LCAwLCAxMjA4MSwgOTgyNiwgNjQ1MDIsIDE3NjcsIDAsIAotICAgIDAsIDAsIDEyMDIwMSwgMCwgMCwgMCwgMzA1OSwgMCwgMTIwMjA0LCAxMTk5NTMsIDEyMDIwNSwgMCwgMCwgMCwgNDEwMCwgCi0gICAgOTIwLCAxODExLCAxMzU1LCAwLCAwLCAzNTkyLCAxMDA3OCwgMCwgMCwgMCwgODU5MiwgNjU4NzAsIDY4MTY0LCAwLCAKKyAgICA0MzQ1MywgNjQwNTAsIDQxMzQwLCAxMTg5NzUsIDAsIDEwMDA1LCAxMjMyOSwgNDEzMzMsIDAsIDg0ODksIDE5NDIsIDAsIDAsIAorICAgIDQyNTIwLCAwLCAwLCAwLCAxMDc2MCwgNjQwMjMsIDY0MDIyLCA2NDAyMSwgNjU4MiwgNDM2NzAsIDAsIDY0MDI1LCA5MTY3LCAKKyAgICA0MjE1MSwgNzgyNDQsIDAsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMCwgNzU4MiwgNzgyNTIsIAorICAgIDc4MjQ4LCA3NzkxNCwgNzgyNDYsIDc4MjQ3LCAwLCA3NzkxNSwgNzg3NjYsIDY3ODgsIDEzMDk0LCA3NzkyMCwgNzUzMiwgCisgICAgNDE0MTQsIDc4NTIwLCAzMTc5LCA3ODUxOCwgNjQ3NjksIDc4NTE0LCA3ODUxNywgMTE0NjEsIDc0NDU0LCAxMDc1MSwgCisgICAgOTA1MSwgMTIwNzIwLCA2NzA4LCAxMDUzNSwgMCwgNjgyMTgsIDU1Mjc0LCAyMDA4LCA2NDAzMSwgNjQwMzAsIDI5NCwgCisgICAgNDE4NzQsIDAsIDEyNjk5MSwgNjU5MjksIDAsIDAsIDAsIDAsIDY0MDI4LCA4MTQ2LCA2NDAyNiwgNDE3ODgsIDE5NDg0NCwgCisgICAgMCwgMTE4Nzk1LCA2MzQzLCA0MzI0NywgMTE5ODg4LCAwLCAxMTk4ODYsIDExOTg5MSwgMTE5ODkyLCAxMTk4ODksIDExNDMzLCAKKyAgICAxMTk4OTUsIDExOTg5NiwgMCwgNzgwMSwgNjU1NzgsIDE5NDgzOSwgMTI5MTUsIDQzOTY4LCAzMjk3LCA5Njk5LCAxOTQ5NTUsIAorICAgIDExMzUsIDAsIDAsIDAsIDE5OTUsIDY3MjIsIDAsIDAsIDI1NTIsIDQxNTQ2LCA2MCwgNjgzOTQsIDg2NDksIDQxNTQ5LCAKKyAgICA3ODQ5NiwgMCwgMCwgNjY4MiwgMCwgNzg2NzksIDY0NzEwLCA0MTU0NywgMCwgMjAxMywgMCwgNzg1MzAsIDc4NTMyLCAKKyAgICA3ODUyOCwgNzg1MjksIDEyODMyLCA3ODQ5MywgODA4MSwgODM2MiwgMzUzNywgMTE5OTA4LCA5MTM3LCAxMTk5MDYsIDg5OTksIAorICAgIDAsIDc4NTMzLCAzNDY2LCAwLCAwLCAxOTk2LCAwLCAzNDUzLCA2MjgyLCAwLCAyMDAyLCAyMDAwLCAxMjAxNzUsIDUzNywgMCwgCisgICAgNDE3OSwgNjUxMTksIDE5OTgsIDAsIDE4NDIsIDAsIDAsIDk2MjgsIDY4NDQ2LCAxMjA4MSwgOTgyNiwgNjQ1MDIsIDE3NjcsIAorICAgIDAsIDAsIDAsIDEyMDIwMSwgMCwgMCwgMCwgMzA1OSwgNDQwMjQsIDEyMDIwNCwgMTE5OTUzLCAxMjAyMDUsIDAsIDAsIDAsIAorICAgIDQxMDAsIDkyMCwgMTgxMSwgMTM1NSwgMCwgMCwgMzU5MiwgMTAwNzgsIDAsIDAsIDAsIDg1OTIsIDY1ODcwLCA2ODE2NCwgMCwgCiAgICAgMTA3NDIsIDAsIDAsIDE5OTQsIDkyODEsIDMyOTYsIDEyODY1LCAxOTk3LCAxODk1LCAKIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvemlwaW1wb3J0LmMgYi9Nb2R1bGVzL3ppcGltcG9ydC5jCmluZGV4IGMzNjc2ZTUuLmM5YWNiN2QgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemlwaW1wb3J0LmMKKysrIGIvTW9kdWxlcy96aXBpbXBvcnQuYwpAQCAtMzc4LDcgKzM3OCw3IEBACiAgICAgY2hhciAqZnVsbG5hbWUsICptb2RwYXRoOwogICAgIGludCBpc3BhY2thZ2U7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6emlwaW1wb3J0ZXIuX2dldF9maWxlbmFtZSIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOnppcGltcG9ydGVyLmdldF9maWxlbmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ1bGxuYW1lKSkKICAgICByZXR1cm4gTlVMTDsKIApAQCAtNTUzLDcgKzU1Myw3IEBACiAKIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfZmlsZW5hbWUsCi0iX2dldF9maWxlbmFtZShmdWxsbmFtZSkgLT4gZmlsZW5hbWUgc3RyaW5nLlxuXAorImdldF9maWxlbmFtZShmdWxsbmFtZSkgLT4gZmlsZW5hbWUgc3RyaW5nLlxuXAogXG5cCiBSZXR1cm4gdGhlIGZpbGVuYW1lIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4iKTsKIApAQCAtNTY4LDcgKzU2OCw3IEBACiAgICAgIGRvY19nZXRfY29kZX0sCiAgICAgeyJnZXRfc291cmNlIiwgemlwaW1wb3J0ZXJfZ2V0X3NvdXJjZSwgTUVUSF9WQVJBUkdTLAogICAgICBkb2NfZ2V0X3NvdXJjZX0sCi0gICAgeyJfZ2V0X2ZpbGVuYW1lIiwgemlwaW1wb3J0ZXJfZ2V0X2ZpbGVuYW1lLCBNRVRIX1ZBUkFSR1MsCisgICAgeyJnZXRfZmlsZW5hbWUiLCB6aXBpbXBvcnRlcl9nZXRfZmlsZW5hbWUsIE1FVEhfVkFSQVJHUywKICAgICAgZG9jX2dldF9maWxlbmFtZX0sCiAgICAgeyJpc19wYWNrYWdlIiwgemlwaW1wb3J0ZXJfaXNfcGFja2FnZSwgTUVUSF9WQVJBUkdTLAogICAgICBkb2NfaXNfcGFja2FnZX0sCmRpZmYgLS1naXQgYS9PYmplY3RzL2Fic3RyYWN0LmMgYi9PYmplY3RzL2Fic3RyYWN0LmMKaW5kZXggZDUzYjE3Zi4uMWU3OWRkZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9hYnN0cmFjdC5jCisrKyBiL09iamVjdHMvYWJzdHJhY3QuYwpAQCAtOTMsNyArOTMsNyBAQAogX1B5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgZGVmYXVsdHZhbHVlKQogewogICAgIHN0YXRpYyBQeU9iamVjdCAqaGludHN0cm9iaiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnJvOworICAgIFB5T2JqZWN0ICpybywgKmhpbnRtZXRoOwogICAgIFB5X3NzaXplX3QgcnY7CiAKICAgICAvKiB0cnkgby5fX2xlbl9fKCkgKi8KQEAgLTEwNywxOSArMTA3LDIyIEBACiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQogCi0gICAgLyogY2FjaGUgYSBoYXNoZWQgdmVyc2lvbiBvZiB0aGUgYXR0cmlidXRlIHN0cmluZyAqLwotICAgIGlmIChoaW50c3Ryb2JqID09IE5VTEwpIHsKLSAgICAgICAgaGludHN0cm9iaiA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9fbGVuZ3RoX2hpbnRfXyIpOwotICAgICAgICBpZiAoaGludHN0cm9iaiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQorICAgIGlmIChQeUluc3RhbmNlX0NoZWNrKG8pKQorICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOwogICAgIC8qIHRyeSBvLl9fbGVuZ3RoX2hpbnRfXygpICovCi0gICAgcm8gPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhvLCBoaW50c3Ryb2JqLCBOVUxMKTsKKyAgICBoaW50bWV0aCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG8sICJfX2xlbmd0aF9oaW50X18iLCAmaGludHN0cm9iaik7CisgICAgaWYgKGhpbnRtZXRoID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CisgICAgfQorICAgIHJvID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhoaW50bWV0aCwgTlVMTCk7CisgICAgUHlfREVDUkVGKGhpbnRtZXRoKTsKICAgICBpZiAocm8gPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSAmJgogICAgICAgICAgICAgIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWx1ZTsKICAgICB9CkBAIC0xNTMsNyArMTU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBpbnRlZ2VyLCBub3QgJyUuMjAwcyciLCBrZXkpOwogICAgIH0KIAotICAgIHJldHVybiB0eXBlX2Vycm9yKCInJS4yMDBzJyBvYmplY3QgaXMgdW5zdWJzY3JpcHRhYmxlIiwgbyk7CisgICAgcmV0dXJuIHR5cGVfZXJyb3IoIiclLjIwMHMnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIsIG8pOwogfQogCiBpbnQKQEAgLTQzOSw4ICs0NDIsOCBAQAogfQogCiAKLXN0YXRpYyB2b2lkCi1fYWRkX29uZV90b19pbmRleF9GKGludCBuZCwgUHlfc3NpemVfdCAqaW5kZXgsIFB5X3NzaXplX3QgKnNoYXBlKQordm9pZAorX1B5X2FkZF9vbmVfdG9faW5kZXhfRihpbnQgbmQsIFB5X3NzaXplX3QgKmluZGV4LCBjb25zdCBQeV9zc2l6ZV90ICpzaGFwZSkKIHsKICAgICBpbnQgazsKIApAQCAtNDU1LDggKzQ1OCw4IEBACiAgICAgfQogfQogCi1zdGF0aWMgdm9pZAotX2FkZF9vbmVfdG9faW5kZXhfQyhpbnQgbmQsIFB5X3NzaXplX3QgKmluZGV4LCBQeV9zc2l6ZV90ICpzaGFwZSkKK3ZvaWQKK19QeV9hZGRfb25lX3RvX2luZGV4X0MoaW50IG5kLCBQeV9zc2l6ZV90ICppbmRleCwgY29uc3QgUHlfc3NpemVfdCAqc2hhcGUpCiB7CiAgICAgaW50IGs7CiAKQEAgLTQ4MCw3ICs0ODMsNyBAQAogUHlCdWZmZXJfVG9Db250aWd1b3VzKHZvaWQgKmJ1ZiwgUHlfYnVmZmVyICp2aWV3LCBQeV9zc2l6ZV90IGxlbiwgY2hhciBmb3J0KQogewogICAgIGludCBrOwotICAgIHZvaWQgKCphZGRvbmUpKGludCwgUHlfc3NpemVfdCAqLCBQeV9zc2l6ZV90ICopOworICAgIHZvaWQgKCphZGRvbmUpKGludCwgUHlfc3NpemVfdCAqLCBjb25zdCBQeV9zc2l6ZV90ICopOwogICAgIFB5X3NzaXplX3QgKmluZGljZXMsIGVsZW1lbnRzOwogICAgIGNoYXIgKmRlc3QsICpwdHI7CiAKQEAgLTUwNywxMCArNTEwLDEwIEBACiAgICAgfQogCiAgICAgaWYgKGZvcnQgPT0gJ0YnKSB7Ci0gICAgICAgIGFkZG9uZSA9IF9hZGRfb25lX3RvX2luZGV4X0Y7CisgICAgICAgIGFkZG9uZSA9IF9QeV9hZGRfb25lX3RvX2luZGV4X0Y7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBhZGRvbmUgPSBfYWRkX29uZV90b19pbmRleF9DOworICAgICAgICBhZGRvbmUgPSBfUHlfYWRkX29uZV90b19pbmRleF9DOwogICAgIH0KICAgICBkZXN0ID0gYnVmOwogICAgIC8qIFhYWCA6IFRoaXMgaXMgbm90IGdvaW5nIHRvIGJlIHRoZSBmYXN0ZXN0IGNvZGUgaW4gdGhlIHdvcmxkCkBAIC01MzEsNyArNTM0LDcgQEAKIFB5QnVmZmVyX0Zyb21Db250aWd1b3VzKFB5X2J1ZmZlciAqdmlldywgdm9pZCAqYnVmLCBQeV9zc2l6ZV90IGxlbiwgY2hhciBmb3J0KQogewogICAgIGludCBrOwotICAgIHZvaWQgKCphZGRvbmUpKGludCwgUHlfc3NpemVfdCAqLCBQeV9zc2l6ZV90ICopOworICAgIHZvaWQgKCphZGRvbmUpKGludCwgUHlfc3NpemVfdCAqLCBjb25zdCBQeV9zc2l6ZV90ICopOwogICAgIFB5X3NzaXplX3QgKmluZGljZXMsIGVsZW1lbnRzOwogICAgIGNoYXIgKnNyYywgKnB0cjsKIApAQCAtNTU4LDEwICs1NjEsMTAgQEAKICAgICB9CiAKICAgICBpZiAoZm9ydCA9PSAnRicpIHsKLSAgICAgICAgYWRkb25lID0gX2FkZF9vbmVfdG9faW5kZXhfRjsKKyAgICAgICAgYWRkb25lID0gX1B5X2FkZF9vbmVfdG9faW5kZXhfRjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGFkZG9uZSA9IF9hZGRfb25lX3RvX2luZGV4X0M7CisgICAgICAgIGFkZG9uZSA9IF9QeV9hZGRfb25lX3RvX2luZGV4X0M7CiAgICAgfQogICAgIHNyYyA9IGJ1ZjsKICAgICAvKiBYWFggOiBUaGlzIGlzIG5vdCBnb2luZyB0byBiZSB0aGUgZmFzdGVzdCBjb2RlIGluIHRoZSB3b3JsZApAQCAtNjM4LDcgKzY0MSw3IEBACiAgICAgICAgIGVsZW1lbnRzICo9IHZpZXdfc3JjLnNoYXBlW2tdOwogICAgIH0KICAgICB3aGlsZSAoZWxlbWVudHMtLSkgewotICAgICAgICBfYWRkX29uZV90b19pbmRleF9DKHZpZXdfc3JjLm5kaW0sIGluZGljZXMsIHZpZXdfc3JjLnNoYXBlKTsKKyAgICAgICAgX1B5X2FkZF9vbmVfdG9faW5kZXhfQyh2aWV3X3NyYy5uZGltLCBpbmRpY2VzLCB2aWV3X3NyYy5zaGFwZSk7CiAgICAgICAgIGRwdHIgPSBQeUJ1ZmZlcl9HZXRQb2ludGVyKCZ2aWV3X2Rlc3QsIGluZGljZXMpOwogICAgICAgICBzcHRyID0gUHlCdWZmZXJfR2V0UG9pbnRlcigmdmlld19zcmMsIGluZGljZXMpOwogICAgICAgICBtZW1jcHkoZHB0ciwgc3B0ciwgdmlld19zcmMuaXRlbXNpemUpOwpAQCAtNzIwLDE5ICs3MjMsMTIgQEAKIFB5T2JqZWN0ICoKIFB5T2JqZWN0X0Zvcm1hdChQeU9iamVjdCogb2JqLCBQeU9iamVjdCAqZm9ybWF0X3NwZWMpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICogc3RyX19mb3JtYXRfXyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmVtcHR5ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgaW50IHNwZWNfaXNfdW5pY29kZTsKICAgICBpbnQgcmVzdWx0X2lzX3VuaWNvZGU7Ci0KLSAgICAvKiBJbml0aWFsaXplIGNhY2hlZCB2YWx1ZSAqLwotICAgIGlmIChzdHJfX2Zvcm1hdF9fID09IE5VTEwpIHsKLSAgICAgICAgLyogSW5pdGlhbGl6ZSBzdGF0aWMgdmFyaWFibGUgbmVlZGVkIGJ5IF9QeVR5cGVfTG9va3VwICovCi0gICAgICAgIHN0cl9fZm9ybWF0X18gPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJfX2Zvcm1hdF9fIik7Ci0gICAgICAgIGlmIChzdHJfX2Zvcm1hdF9fID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfQorI2VuZGlmCiAKICAgICAvKiBJZiBubyBmb3JtYXRfc3BlYyBpcyBwcm92aWRlZCwgdXNlIGFuIGVtcHR5IHN0cmluZyAqLwogICAgIGlmIChmb3JtYXRfc3BlYyA9PSBOVUxMKSB7CkBAIC03NDEsOTEgKzczNywxMjEgQEAKICAgICB9CiAKICAgICAvKiBDaGVjayB0aGUgZm9ybWF0X3NwZWMgdHlwZSwgYW5kIG1ha2Ugc3VyZSBpdCdzIHN0ciBvciB1bmljb2RlICovCisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soZm9ybWF0X3NwZWMpKQogICAgICAgICBzcGVjX2lzX3VuaWNvZGUgPSAxOwogICAgIGVsc2UgaWYgKFB5U3RyaW5nX0NoZWNrKGZvcm1hdF9zcGVjKSkKICAgICAgICAgc3BlY19pc191bmljb2RlID0gMDsKICAgICBlbHNlIHsKKyNlbHNlCisgICAgaWYgKCFQeVN0cmluZ19DaGVjayhmb3JtYXRfc3BlYykpIHsKKyNlbmRpZgogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCBleHBlY3RzIGFyZyAyIHRvIGJlIHN0cmluZyAiCiAgICAgICAgICAgICAgICAgICAgICAib3IgdW5pY29kZSwgbm90ICUuMTAwcyIsIFB5X1RZUEUoZm9ybWF0X3NwZWMpLT50cF9uYW1lKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KIAotICAgIC8qIE1ha2Ugc3VyZSB0aGUgdHlwZSBpcyBpbml0aWFsaXplZC4gIGZsb2F0IGdldHMgaW5pdGlhbGl6ZWQgbGF0ZSAqLwotICAgIGlmIChQeV9UWVBFKG9iaiktPnRwX2RpY3QgPT0gTlVMTCkKLSAgICAgICAgaWYgKFB5VHlwZV9SZWFkeShQeV9UWVBFKG9iaikpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLQogICAgIC8qIENoZWNrIGZvciBhIF9fZm9ybWF0X18gbWV0aG9kIGFuZCBjYWxsIGl0LiAqLwogICAgIGlmIChQeUluc3RhbmNlX0NoZWNrKG9iaikpIHsKICAgICAgICAgLyogV2UncmUgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzc2ljIGNsYXNzICovCi0gICAgICAgIFB5T2JqZWN0ICpib3VuZF9tZXRob2QgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX19mb3JtYXRfXyk7CisgICAgICAgIFB5T2JqZWN0ICpib3VuZF9tZXRob2QgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG9iaiwgIl9fZm9ybWF0X18iKTsKICAgICAgICAgaWYgKGJvdW5kX21ldGhvZCAhPSBOVUxMKSB7CiAgICAgICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGJvdW5kX21ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICAgICAgUHlfREVDUkVGKGJvdW5kX21ldGhvZCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqc2VsZl9hc19zdHI7Ci0gICAgICAgICAgICBQeU9iamVjdCAqZm9ybWF0X21ldGhvZDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZWxmX2FzX3N0ciA9IE5VTEw7CisgICAgICAgICAgICBQeU9iamVjdCAqZm9ybWF0X21ldGhvZCA9IE5VTEw7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9sZW47CiAKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAvKiBQZXIgdGhlIFBFUCwgY29udmVydCB0byBzdHIgKG9yIHVuaWNvZGUsCiAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIGZvcm1hdAogICAgICAgICAgICAgICAgc3BlY2lmaWVyKS4gIEZvciBuZXctc3R5bGUgY2xhc3NlcywgdGhpcwogICAgICAgICAgICAgICAgbG9naWMgaXMgZG9uZSBieSBvYmplY3QuX19mb3JtYXRfXygpLiAqLwotICAgICAgICAgICAgaWYgKHNwZWNfaXNfdW5pY29kZSkKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCisgICAgICAgICAgICBpZiAoc3BlY19pc191bmljb2RlKSB7CisgICAgICAgICAgICAgICAgZm9ybWF0X2xlbiA9IFB5VW5pY29kZV9HRVRfU0laRShmb3JtYXRfc3BlYyk7CiAgICAgICAgICAgICAgICAgc2VsZl9hc19zdHIgPSBQeU9iamVjdF9Vbmljb2RlKG9iaik7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvcm1hdF9sZW4gPSBQeVN0cmluZ19HRVRfU0laRShmb3JtYXRfc3BlYyk7CiAgICAgICAgICAgICAgICAgc2VsZl9hc19zdHIgPSBQeU9iamVjdF9TdHIob2JqKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzZWxmX2FzX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmUxOworCisgICAgICAgICAgICBpZiAoZm9ybWF0X2xlbiA+IDApIHsKKyAgICAgICAgICAgICAgICAvKiBTZWUgdGhlIGFsbW9zdCBpZGVudGljYWwgY29kZSBpbgorICAgICAgICAgICAgICAgICAgIHR5cGVvYmplY3QuYyBmb3IgbmV3LXN0eWxlCisgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy4gKi8KKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAib2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSAiCisgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgc3RyaW5nIGlzIGRlcHJlY2F0ZWQiLCAxKQorICAgICAgICAgICAgICAgICAgICAgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIEV2ZW50dWFsbHkgdGhpcyB3aWxsIGJlY29tZSBhbgorICAgICAgICAgICAgICAgICAgIGVycm9yOgorICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIm5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIHBhc3NlZCB0byAiCisgICAgICAgICAgICAgICAgICAgIm9iamVjdC5fX2Zvcm1hdF9fIik7CisgICAgICAgICAgICAgICAgZ290byBkb25lMTsKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBUaGVuIGNhbGwgc3RyLl9fZm9ybWF0X18gb24gdGhhdCByZXN1bHQgKi8KLSAgICAgICAgICAgIGZvcm1hdF9tZXRob2QgPSBQeU9iamVjdF9HZXRBdHRyKHNlbGZfYXNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX19mb3JtYXRfXyk7CisgICAgICAgICAgICBmb3JtYXRfbWV0aG9kID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzZWxmX2FzX3N0ciwgIl9fZm9ybWF0X18iKTsKICAgICAgICAgICAgIGlmIChmb3JtYXRfbWV0aG9kID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZl9hc19zdHIpOwotICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmUxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmb3JtYXRfbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VsZl9hc19zdHIpOwotICAgICAgICAgICAgUHlfREVDUkVGKGZvcm1hdF9tZXRob2QpOworZG9uZTE6CisgICAgICAgICAgICBQeV9YREVDUkVGKHNlbGZfYXNfc3RyKTsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoZm9ybWF0X21ldGhvZCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogTm90IGFuIGluc3RhbmNlIG9mIGEgY2xhc3NpYyBjbGFzcywgdXNlIHRoZSBjb2RlCiAgICAgICAgICAgIGZyb20gcHkzayAqLworICAgICAgICBzdGF0aWMgUHlPYmplY3QgKmZvcm1hdF9jYWNoZSA9IE5VTEw7CiAKICAgICAgICAgLyogRmluZCB0aGUgKHVuYm91bmQhKSBfX2Zvcm1hdF9fIG1ldGhvZCAoYSBib3Jyb3dlZAogICAgICAgICAgICByZWZlcmVuY2UpICovCi0gICAgICAgIFB5T2JqZWN0ICptZXRob2QgPSBfUHlUeXBlX0xvb2t1cChQeV9UWVBFKG9iaiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfX2Zvcm1hdF9fKTsKKyAgICAgICAgUHlPYmplY3QgKm1ldGhvZCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG9iaiwgIl9fZm9ybWF0X18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdF9jYWNoZSk7CiAgICAgICAgIGlmIChtZXRob2QgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX19mb3JtYXRfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKKyAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX19mb3JtYXRfXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KLSAgICAgICAgLyogQW5kIGNhbGwgaXQsIGJpbmRpbmcgaXQgdG8gdGhlIHZhbHVlICovCi0gICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MobWV0aG9kLCBvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWMsIE5VTEwpOworICAgICAgICAvKiBBbmQgY2FsbCBpdC4gKi8KKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhtZXRob2QsIGZvcm1hdF9zcGVjLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKG1ldGhvZCk7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICBnb3RvIGRvbmU7CiAKICAgICAvKiBDaGVjayB0aGUgcmVzdWx0IHR5cGUsIGFuZCBtYWtlIHN1cmUgaXQncyBzdHIgb3IgdW5pY29kZSAqLworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHJlc3VsdCkpCiAgICAgICAgIHJlc3VsdF9pc191bmljb2RlID0gMTsKICAgICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhyZXN1bHQpKQogICAgICAgICByZXN1bHRfaXNfdW5pY29kZSA9IDA7CiAgICAgZWxzZSB7CisjZWxzZQorICAgIGlmICghUHlTdHJpbmdfQ2hlY2socmVzdWx0KSkgeworI2VuZGlmCiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiJS4xMDBzLl9fZm9ybWF0X18gbXVzdCByZXR1cm4gc3RyaW5nIG9yICIKICAgICAgICAgICAgICAgICAgICAgICJ1bmljb2RlLCBub3QgJS4xMDBzIiwgUHlfVFlQRShvYmopLT50cF9uYW1lLApAQCAtODM3LDEyICs4NjMsMTQgQEAKIAogICAgIC8qIENvbnZlcnQgdG8gdW5pY29kZSwgaWYgbmVlZGVkLiAgUmVxdWlyZWQgaWYgc3BlYyBpcyB1bmljb2RlCiAgICAgICAgYW5kIHJlc3VsdCBpcyBzdHIgKi8KKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgaWYgKHNwZWNfaXNfdW5pY29kZSAmJiAhcmVzdWx0X2lzX3VuaWNvZGUpIHsKICAgICAgICAgUHlPYmplY3QgKnRtcCA9IFB5T2JqZWN0X1VuaWNvZGUocmVzdWx0KTsKICAgICAgICAgLyogVGhpcyBsb2dpYyB3b3JrcyB3aGV0aGVyIG9yIG5vdCB0bXAgaXMgTlVMTCAqLwogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmVzdWx0ID0gdG1wOwogICAgIH0KKyNlbmRpZgogCiBkb25lOgogICAgIFB5X1hERUNSRUYoZW1wdHkpOwpAQCAtMTY4NSw3ICsxNzEzLDE0IEBACiAgICAgaWYgKG0gJiYgbS0+bmJfbG9uZykgeyAvKiBUaGlzIHNob3VsZCBpbmNsdWRlIHN1YmNsYXNzZXMgb2YgbG9uZyAqLwogICAgICAgICAvKiBDbGFzc2ljIGNsYXNzZXMgYWx3YXlzIHRha2UgdGhpcyBicmFuY2guICovCiAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBtLT5uYl9sb25nKG8pOwotICAgICAgICBpZiAocmVzICYmICghUHlJbnRfQ2hlY2socmVzKSAmJiAhUHlMb25nX0NoZWNrKHJlcykpKSB7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlJbnRfQ2hlY2socmVzKSkgeworICAgICAgICAgICAgbG9uZyB2YWx1ZSA9IFB5SW50X0FTX0xPTkcocmVzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIVB5TG9uZ19DaGVjayhyZXMpKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvbmdfXyByZXR1cm5lZCBub24tbG9uZyAodHlwZSAlLjIwMHMpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXMtPm9iX3R5cGUtPnRwX25hbWUpOwpAQCAtMTc5MSwxMSArMTgyNiwxMyBAQAogaW50CiBQeVNlcXVlbmNlX0NoZWNrKFB5T2JqZWN0ICpzKQogewotICAgIGlmIChzICYmIFB5SW5zdGFuY2VfQ2hlY2socykpCi0gICAgICAgIHJldHVybiBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKHMsICJfX2dldGl0ZW1fXyIpOwotICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKHMsIChQeU9iamVjdCAqKSZQeURpY3RfVHlwZSkpCisgICAgaWYgKHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHMgIT0gTlVMTCAmJiBzLT5vYl90eXBlLT50cF9hc19zZXF1ZW5jZSAmJgorICAgIGlmIChQeUluc3RhbmNlX0NoZWNrKHMpKQorICAgICAgICByZXR1cm4gUHlPYmplY3RfSGFzQXR0clN0cmluZyhzLCAiX19nZXRpdGVtX18iKTsKKyAgICBpZiAoUHlEaWN0X0NoZWNrKHMpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gIHMtPm9iX3R5cGUtPnRwX2FzX3NlcXVlbmNlICYmCiAgICAgICAgIHMtPm9iX3R5cGUtPnRwX2FzX3NlcXVlbmNlLT5zcV9pdGVtICE9IE5VTEw7CiB9CiAKQEAgLTI4ODksNyArMjkyNiw2IEBACiBQeU9iamVjdF9Jc0luc3RhbmNlKFB5T2JqZWN0ICppbnN0LCBQeU9iamVjdCAqY2xzKQogewogICAgIHN0YXRpYyBQeU9iamVjdCAqbmFtZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmNoZWNrZXI7CiAKICAgICAvKiBRdWljayB0ZXN0IGZvciBhbiBleGFjdCBtYXRjaCAqLwogICAgIGlmIChQeV9UWVBFKGluc3QpID09IChQeVR5cGVPYmplY3QgKiljbHMpCkBAIC0yOTEzLDI5ICsyOTQ5LDI4IEBACiAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwogICAgICAgICByZXR1cm4gcjsKICAgICB9Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCkgewotICAgICAgICBuYW1lID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiX19pbnN0YW5jZWNoZWNrX18iKTsKLSAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgY2hlY2tlciA9IFB5T2JqZWN0X0dldEF0dHIoY2xzLCBuYW1lKTsKLSAgICBpZiAoY2hlY2tlciA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgaWYgKGNoZWNrZXIgIT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqcmVzOwotICAgICAgICBpbnQgb2sgPSAtMTsKLSAgICAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIGluIF9faW5zdGFuY2VjaGVja19fIikpIHsKKworICAgIGlmICghKFB5Q2xhc3NfQ2hlY2soY2xzKSB8fCBQeUluc3RhbmNlX0NoZWNrKGNscykpKSB7CisgICAgICAgIFB5T2JqZWN0ICpjaGVja2VyOworICAgICAgICBjaGVja2VyID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwoY2xzLCAiX19pbnN0YW5jZWNoZWNrX18iLCAmbmFtZSk7CisgICAgICAgIGlmIChjaGVja2VyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgICAgICBpbnQgb2sgPSAtMTsKKyAgICAgICAgICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiBpbiBfX2luc3RhbmNlY2hlY2tfXyIpKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNoZWNrZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY2hlY2tlciwgaW5zdCwgTlVMTCk7CisgICAgICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihjaGVja2VyKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG9rID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gb2s7CiAgICAgICAgIH0KLSAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhjaGVja2VyLCBpbnN0LCBOVUxMKTsKLSAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7Ci0gICAgICAgIFB5X0RFQ1JFRihjaGVja2VyKTsKLSAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBvayA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOwotICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG9rOworICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICByZXR1cm4gcmVjdXJzaXZlX2lzaW5zdGFuY2UoaW5zdCwgY2xzKTsKIH0KQEAgLTI5NzQsOCArMzAwOSw2IEBACiBQeU9iamVjdF9Jc1N1YmNsYXNzKFB5T2JqZWN0ICpkZXJpdmVkLCBQeU9iamVjdCAqY2xzKQogewogICAgIHN0YXRpYyBQeU9iamVjdCAqbmFtZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnQsICp2LCAqdGI7Ci0gICAgUHlPYmplY3QgKmNoZWNrZXI7CiAKICAgICBpZiAoUHlUdXBsZV9DaGVjayhjbHMpKSB7CiAgICAgICAgIFB5X3NzaXplX3QgaTsKQEAgLTI5OTUsMjkgKzMwMjgsMjggQEAKICAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CiAgICAgICAgIHJldHVybiByOwogICAgIH0KLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIG5hbWUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJfX3N1YmNsYXNzY2hlY2tfXyIpOwotICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBQeUVycl9GZXRjaCgmdCwgJnYsICZ0Yik7Ci0gICAgY2hlY2tlciA9IFB5T2JqZWN0X0dldEF0dHIoY2xzLCBuYW1lKTsKLSAgICBQeUVycl9SZXN0b3JlKHQsIHYsIHRiKTsKLSAgICBpZiAoY2hlY2tlciAhPSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgICAgIGludCBvayA9IC0xOwotICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgaW4gX19zdWJjbGFzc2NoZWNrX18iKSkgeworICAgIGlmICghKFB5Q2xhc3NfQ2hlY2soY2xzKSB8fCBQeUluc3RhbmNlX0NoZWNrKGNscykpKSB7CisgICAgICAgIFB5T2JqZWN0ICpjaGVja2VyOworICAgICAgICBjaGVja2VyID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwoY2xzLCAiX19zdWJjbGFzc2NoZWNrX18iLCAmbmFtZSk7CisgICAgICAgIGlmIChjaGVja2VyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgICAgICBpbnQgb2sgPSAtMTsKKyAgICAgICAgICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiBpbiBfX3N1YmNsYXNzY2hlY2tfXyIpKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNoZWNrZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY2hlY2tlciwgZGVyaXZlZCwgTlVMTCk7CisgICAgICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihjaGVja2VyKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG9rID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gb2s7CiAgICAgICAgIH0KLSAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhjaGVja2VyLCBkZXJpdmVkLCBOVUxMKTsKLSAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7Ci0gICAgICAgIFB5X0RFQ1JFRihjaGVja2VyKTsKLSAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBvayA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOwotICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gb2s7CiAgICAgfQogICAgIHJldHVybiByZWN1cnNpdmVfaXNzdWJjbGFzcyhkZXJpdmVkLCBjbHMpOwogfQpAQCAtMzA3Miw3ICszMTA0LDYgQEAKIFB5SXRlcl9OZXh0KFB5T2JqZWN0ICppdGVyKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgYXNzZXJ0KFB5SXRlcl9DaGVjayhpdGVyKSk7CiAgICAgcmVzdWx0ID0gKCppdGVyLT5vYl90eXBlLT50cF9pdGVybmV4dCkoaXRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMICYmCiAgICAgICAgIFB5RXJyX09jY3VycmVkKCkgJiYKZGlmZiAtLWdpdCBhL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMgYi9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCmluZGV4IDM4NzdjNmYuLjg2MDkzOTUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYwpAQCAtNSwyNCArNSwxNiBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgImJ5dGVzX21ldGhvZHMuaCIKIAotc3RhdGljIFB5Qnl0ZUFycmF5T2JqZWN0ICpudWxsYnl0ZXMgPSBOVUxMOwogY2hhciBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nW10gPSAiIjsKIAogdm9pZAogUHlCeXRlQXJyYXlfRmluaSh2b2lkKQogewotICAgIFB5X0NMRUFSKG51bGxieXRlcyk7CiB9CiAKIGludAogUHlCeXRlQXJyYXlfSW5pdCh2b2lkKQogewotICAgIG51bGxieXRlcyA9IFB5T2JqZWN0X05ldyhQeUJ5dGVBcnJheU9iamVjdCwgJlB5Qnl0ZUFycmF5X1R5cGUpOwotICAgIGlmIChudWxsYnl0ZXMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgbnVsbGJ5dGVzLT5vYl9ieXRlcyA9IE5VTEw7Ci0gICAgUHlfU0laRShudWxsYnl0ZXMpID0gbnVsbGJ5dGVzLT5vYl9hbGxvYyA9IDA7Ci0gICAgbnVsbGJ5dGVzLT5vYl9leHBvcnRzID0gMDsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtNjgsNyArNjAsNyBAQAogfQogCiBzdGF0aWMgUHlfc3NpemVfdAotYnl0ZXNfYnVmZmVyX2dldHJlYWRidWYoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaW5kZXgsIGNvbnN0IHZvaWQgKipwdHIpCitieXRlYXJyYXlfYnVmZmVyX2dldHJlYWRidWYoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaW5kZXgsIGNvbnN0IHZvaWQgKipwdHIpCiB7CiAgICAgaWYgKCBpbmRleCAhPSAwICkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC04MCw3ICs3Miw3IEBACiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90Ci1ieXRlc19idWZmZXJfZ2V0d3JpdGVidWYoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaW5kZXgsIGNvbnN0IHZvaWQgKipwdHIpCitieXRlYXJyYXlfYnVmZmVyX2dldHdyaXRlYnVmKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGluZGV4LCBjb25zdCB2b2lkICoqcHRyKQogewogICAgIGlmICggaW5kZXggIT0gMCApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLApAQCAtOTIsNyArODQsNyBAQAogfQogCiBzdGF0aWMgUHlfc3NpemVfdAotYnl0ZXNfYnVmZmVyX2dldHNlZ2NvdW50KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90ICpsZW5wKQorYnl0ZWFycmF5X2J1ZmZlcl9nZXRzZWdjb3VudChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCAqbGVucCkKIHsKICAgICBpZiAoIGxlbnAgKQogICAgICAgICAqbGVucCA9IFB5X1NJWkUoc2VsZik7CkBAIC0xMDAsNyArOTIsNyBAQAogfQogCiBzdGF0aWMgUHlfc3NpemVfdAotYnl0ZXNfYnVmZmVyX2dldGNoYXJidWYoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaW5kZXgsIGNvbnN0IGNoYXIgKipwdHIpCitieXRlYXJyYXlfYnVmZmVyX2dldGNoYXJidWYoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaW5kZXgsIGNvbnN0IGNoYXIgKipwdHIpCiB7CiAgICAgaWYgKCBpbmRleCAhPSAwICkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC0xMTIsNyArMTA0LDcgQEAKIH0KIAogc3RhdGljIGludAotYnl0ZXNfZ2V0YnVmZmVyKFB5Qnl0ZUFycmF5T2JqZWN0ICpvYmosIFB5X2J1ZmZlciAqdmlldywgaW50IGZsYWdzKQorYnl0ZWFycmF5X2dldGJ1ZmZlcihQeUJ5dGVBcnJheU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcsIGludCBmbGFncykKIHsKICAgICBpbnQgcmV0OwogICAgIHZvaWQgKnB0cjsKQEAgLTEyOSw3ICsxMjEsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotYnl0ZXNfcmVsZWFzZWJ1ZmZlcihQeUJ5dGVBcnJheU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcpCitieXRlYXJyYXlfcmVsZWFzZWJ1ZmZlcihQeUJ5dGVBcnJheU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcpCiB7CiAgICAgb2JqLT5vYl9leHBvcnRzLS07CiB9CkBAIC0yOTYsNyArMjg4LDcgQEAKIAogICAgIHNpemUgPSB2YS5sZW4gKyB2Yi5sZW47CiAgICAgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCkBAIC0zMTcsMTMgKzMwOSwxMyBAQAogLyogRnVuY3Rpb25zIHN0dWZmZWQgaW50byB0aGUgdHlwZSBvYmplY3QgKi8KIAogc3RhdGljIFB5X3NzaXplX3QKLWJ5dGVzX2xlbmd0aChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKK2J5dGVhcnJheV9sZW5ndGgoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCiB7CiAgICAgcmV0dXJuIFB5X1NJWkUoc2VsZik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19pY29uY2F0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIpCitieXRlYXJyYXlfaWNvbmNhdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyKQogewogICAgIFB5X3NzaXplX3QgbXlzaXplOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKQEAgLTM1Niw3ICszNDgsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcmVwZWF0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGNvdW50KQorYnl0ZWFycmF5X3JlcGVhdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBjb3VudCkKIHsKICAgICBQeUJ5dGVBcnJheU9iamVjdCAqcmVzdWx0OwogICAgIFB5X3NzaXplX3QgbXlzaXplOwpAQCAtMzgyLDcgKzM3NCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19pcmVwZWF0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGNvdW50KQorYnl0ZWFycmF5X2lyZXBlYXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgY291bnQpCiB7CiAgICAgUHlfc3NpemVfdCBteXNpemU7CiAgICAgUHlfc3NpemVfdCBzaXplOwpAQCAtNDEzLDcgKzQwNSw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19nZXRpdGVtKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGkpCitieXRlYXJyYXlfZ2V0aXRlbShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpKQogewogICAgIGlmIChpIDwgMCkKICAgICAgICAgaSArPSBQeV9TSVpFKHNlbGYpOwpAQCAtNDI1LDcgKzQxNyw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19zdWJzY3JpcHQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbmRleCkKK2J5dGVhcnJheV9zdWJzY3JpcHQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbmRleCkKIHsKICAgICBpZiAoUHlJbmRleF9DaGVjayhpbmRleCkpIHsKICAgICAgICAgUHlfc3NpemVfdCBpID0gUHlOdW1iZXJfQXNTc2l6ZV90KGluZGV4LCBQeUV4Y19JbmRleEVycm9yKTsKQEAgLTQ4MCw3ICs0NzIsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1ieXRlc19zZXRzbGljZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSwKK2J5dGVhcnJheV9zZXRzbGljZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSwKICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZXMpCiB7CiAgICAgUHlfc3NpemVfdCBhdmFpbCwgbmVlZGVkOwpAQCAtNDk1LDcgKzQ4Nyw3IEBACiAgICAgICAgIHZhbHVlcyA9IFB5Qnl0ZUFycmF5X0Zyb21PYmplY3QodmFsdWVzKTsKICAgICAgICAgaWYgKHZhbHVlcyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBlcnIgPSBieXRlc19zZXRzbGljZShzZWxmLCBsbywgaGksIHZhbHVlcyk7CisgICAgICAgIGVyciA9IGJ5dGVhcnJheV9zZXRzbGljZShzZWxmLCBsbywgaGksIHZhbHVlcyk7CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZXMpOwogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KQEAgLTU3MCw3ICs1NjIsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1ieXRlc19zZXRpdGVtKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGksIFB5T2JqZWN0ICp2YWx1ZSkKK2J5dGVhcnJheV9zZXRpdGVtKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGksIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBpbnQgaXZhbDsKIApAQCAtNTgzLDcgKzU3NSw3IEBACiAgICAgfQogCiAgICAgaWYgKHZhbHVlID09IE5VTEwpCi0gICAgICAgIHJldHVybiBieXRlc19zZXRzbGljZShzZWxmLCBpLCBpKzEsIE5VTEwpOworICAgICAgICByZXR1cm4gYnl0ZWFycmF5X3NldHNsaWNlKHNlbGYsIGksIGkrMSwgTlVMTCk7CiAKICAgICBpZiAoIV9nZXRieXRldmFsdWUodmFsdWUsICZpdmFsKSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNTkzLDcgKzU4NSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWJ5dGVzX2Fzc19zdWJzY3JpcHQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbmRleCwgUHlPYmplY3QgKnZhbHVlcykKK2J5dGVhcnJheV9hc3Nfc3Vic2NyaXB0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5kZXgsIFB5T2JqZWN0ICp2YWx1ZXMpCiB7CiAgICAgUHlfc3NpemVfdCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW4sIG5lZWRlZDsKICAgICBjaGFyICpieXRlczsKQEAgLTY0NCwxMiArNjM2LDEyIEBACiAgICAgICAgIG5lZWRlZCA9IDA7CiAgICAgfQogICAgIGVsc2UgaWYgKHZhbHVlcyA9PSAoUHlPYmplY3QgKilzZWxmIHx8ICFQeUJ5dGVBcnJheV9DaGVjayh2YWx1ZXMpKSB7Ci0gICAgICAgIC8qIE1ha2UgYSBjb3B5IGFuIGNhbGwgdGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSAqLworICAgICAgICAvKiBNYWtlIGEgY29weSBhbmQgY2FsbCB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5ICovCiAgICAgICAgIGludCBlcnI7CiAgICAgICAgIHZhbHVlcyA9IFB5Qnl0ZUFycmF5X0Zyb21PYmplY3QodmFsdWVzKTsKICAgICAgICAgaWYgKHZhbHVlcyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBlcnIgPSBieXRlc19hc3Nfc3Vic2NyaXB0KHNlbGYsIGluZGV4LCB2YWx1ZXMpOworICAgICAgICBlcnIgPSBieXRlYXJyYXlfYXNzX3N1YnNjcmlwdChzZWxmLCBpbmRleCwgdmFsdWVzKTsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlcyk7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQpAQCAtNzUxLDcgKzc0Myw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWJ5dGVzX2luaXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK2J5dGVhcnJheV9pbml0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzb3VyY2UiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07CiAgICAgUHlPYmplY3QgKmFyZyA9IE5VTEw7CkBAIC03OTQsNyArNzg2LDcgQEAKICAgICAgICAgICAgIGVuY29kZWQgPSBhcmc7CiAgICAgICAgICAgICBQeV9JTkNSRUYoYXJnKTsKICAgICAgICAgfQotICAgICAgICBuZXcgPSBieXRlc19pY29uY2F0KHNlbGYsIGFyZyk7CisgICAgICAgIG5ldyA9IGJ5dGVhcnJheV9pY29uY2F0KHNlbGYsIGFyZyk7CiAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICAgICAgaWYgKG5ldyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtODAyLDYgKzc5NCw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAorI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGFyZykpIHsKICAgICAgICAgLyogRW5jb2RlIHZpYSB0aGUgY29kZWMgcmVnaXN0cnkgKi8KICAgICAgICAgUHlPYmplY3QgKmVuY29kZWQsICpuZXc7CkBAIC04MTQsMTMgKzgwNywxNCBAQAogICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBhc3NlcnQoUHlCeXRlc19DaGVjayhlbmNvZGVkKSk7Ci0gICAgICAgIG5ldyA9IGJ5dGVzX2ljb25jYXQoc2VsZiwgZW5jb2RlZCk7CisgICAgICAgIG5ldyA9IGJ5dGVhcnJheV9pY29uY2F0KHNlbGYsIGVuY29kZWQpOwogICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgICAgIGlmIChuZXcgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgUHlfREVDUkVGKG5ldyk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyNlbmRpZgogCiAgICAgLyogSWYgaXQncyBub3QgdW5pY29kZSwgdGhlcmUgY2FuJ3QgYmUgZW5jb2Rpbmcgb3IgZXJyb3JzICovCiAgICAgaWYgKGVuY29kaW5nICE9IE5VTEwgfHwgZXJyb3JzICE9IE5VTEwpIHsKQEAgLTkxNyw3ICs5MTEsNyBAQAogLyogTW9zdGx5IGNvcGllZCBmcm9tIHN0cmluZ19yZXByLCBidXQgd2l0aG91dCB0aGUKICAgICJzbWFydCBxdW90ZSIgZnVuY3Rpb25hbGl0eS4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yZXByKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKQorYnl0ZWFycmF5X3JlcHIoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmhleGRpZ2l0cyA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKICAgICBjb25zdCBjaGFyICpxdW90ZV9wcmVmaXggPSAiYnl0ZWFycmF5KGIiOwpAQCAtOTMyLDE0ICs5MjYsMTQgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIG5ld3NpemUgPSAxNCArIDQgKiBsZW5ndGg7Ci0gICAgdiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCBuZXdzaXplKTsKKyAgICB2ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbmV3c2l6ZSk7CiAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICAgICAgcmVnaXN0ZXIgUHlfVU5JQ09ERSBjOwotICAgICAgICByZWdpc3RlciBQeV9VTklDT0RFICpwOworICAgICAgICByZWdpc3RlciBjaGFyIGM7CisgICAgICAgIHJlZ2lzdGVyIGNoYXIgKnA7CiAgICAgICAgIGludCBxdW90ZTsKIAogICAgICAgICAvKiBGaWd1cmUgb3V0IHdoaWNoIHF1b3RlIHRvIHVzZTsgc2luZ2xlIGlzIHByZWZlcnJlZCAqLwpAQCAtOTU5LDcgKzk1Myw3IEBACiAgICAgICAgICAgICA7CiAgICAgICAgIH0KIAotICAgICAgICBwID0gUHlVbmljb2RlX0FTX1VOSUNPREUodik7CisgICAgICAgIHAgPSBQeVN0cmluZ19BU19TVFJJTkcodik7CiAgICAgICAgIHdoaWxlICgqcXVvdGVfcHJlZml4KQogICAgICAgICAgICAgKnArKyA9ICpxdW90ZV9wcmVmaXgrKzsKICAgICAgICAgKnArKyA9IHF1b3RlOwpAQCAtOTY3LDcgKzk2MSw3IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgLyogVGhlcmUncyBhdCBsZWFzdCBlbm91Z2ggcm9vbSBmb3IgYSBoZXggZXNjYXBlCiAgICAgICAgICAgICAgICBhbmQgYSBjbG9zaW5nIHF1b3RlLiAqLwotICAgICAgICAgICAgYXNzZXJ0KG5ld3NpemUgLSAocCAtIFB5VW5pY29kZV9BU19VTklDT0RFKHYpKSA+PSA1KTsKKyAgICAgICAgICAgIGFzc2VydChuZXdzaXplIC0gKHAgLSBQeVN0cmluZ19BU19TVFJJTkcodikpID49IDUpOwogICAgICAgICAgICAgYyA9IHNlbGYtPm9iX2J5dGVzW2ldOwogICAgICAgICAgICAgaWYgKGMgPT0gJ1wnJyB8fCBjID09ICdcXCcpCiAgICAgICAgICAgICAgICAgKnArKyA9ICdcXCcsICpwKysgPSBjOwpAQCAtOTg4LDEzICs5ODIsMTMgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAqcCsrID0gYzsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQobmV3c2l6ZSAtIChwIC0gUHlVbmljb2RlX0FTX1VOSUNPREUodikpID49IDEpOworICAgICAgICBhc3NlcnQobmV3c2l6ZSAtIChwIC0gUHlTdHJpbmdfQVNfU1RSSU5HKHYpKSA+PSAxKTsKICAgICAgICAgKnArKyA9IHF1b3RlOwogICAgICAgICB3aGlsZSAoKnF1b3RlX3Bvc3RmaXgpIHsKICAgICAgICAgICAgKnArKyA9ICpxdW90ZV9wb3N0Zml4Kys7CiAgICAgICAgIH0KICAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmdiwgKHAgLSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh2KSkpKSB7CisgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZ2LCAocCAtIFB5U3RyaW5nX0FTX1NUUklORyh2KSkpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTAwMyw3ICs5OTcsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfc3RyKFB5T2JqZWN0ICpvcCkKK2J5dGVhcnJheV9zdHIoUHlPYmplY3QgKm9wKQogewogI2lmIDAKICAgICBpZiAoUHlfQnl0ZXNXYXJuaW5nRmxhZykgewpAQCAtMTAxMSwxMyArMTAwNSwxMyBAQAogICAgICAgICAgICAgICAgICAic3RyKCkgb24gYSBieXRlYXJyYXkgaW5zdGFuY2UiLCAxKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gYnl0ZXNfcmVwcigoUHlCeXRlQXJyYXlPYmplY3QqKW9wKTsKKyAgICByZXR1cm4gYnl0ZWFycmF5X3JlcHIoKFB5Qnl0ZUFycmF5T2JqZWN0KilvcCk7CiAjZW5kaWYKICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoKFB5Qnl0ZUFycmF5T2JqZWN0KilvcCktPm9iX2J5dGVzLCBQeV9TSVpFKG9wKSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCitieXRlYXJyYXlfcmljaGNvbXBhcmUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvdGhlciwgaW50IG9wKQogewogICAgIFB5X3NzaXplX3Qgc2VsZl9zaXplLCBvdGhlcl9zaXplOwogICAgIFB5X2J1ZmZlciBzZWxmX2J5dGVzLCBvdGhlcl9ieXRlczsKQEAgLTEwMjgsNiArMTAyMiw3IEBACiAgICAgLyogQnl0ZXMgY2FuIGJlIGNvbXBhcmVkIHRvIGFueXRoaW5nIHRoYXQgc3VwcG9ydHMgdGhlIChiaW5hcnkpCiAgICAgICAgYnVmZmVyIEFQSS4gIEV4Y2VwdCB0aGF0IGEgY29tcGFyaXNvbiB3aXRoIFVuaWNvZGUgaXMgYWx3YXlzIGFuCiAgICAgICAgZXJyb3IsIGV2ZW4gaWYgdGhlIGNvbXBhcmlzb24gaXMgZm9yIGVxdWFsaXR5LiAqLworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShzZWxmLCAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgfHwKICAgICAgICAgUHlPYmplY3RfSXNJbnN0YW5jZShvdGhlciwgKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpKSB7CiAgICAgICAgIGlmIChQeV9CeXRlc1dhcm5pbmdGbGFnICYmIG9wID09IFB5X0VRKSB7CkBAIC0xMDM5LDYgKzEwMzQsNyBAQAogICAgICAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOwogICAgICAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7CiAgICAgfQorI2VuZGlmCiAKICAgICBzZWxmX3NpemUgPSBfZ2V0YnVmZmVyKHNlbGYsICZzZWxmX2J5dGVzKTsKICAgICBpZiAoc2VsZl9zaXplIDwgMCkgewpAQCAtMTA5MiwxMyArMTA4OCwxMyBAQAogfQogCiBzdGF0aWMgdm9pZAotYnl0ZXNfZGVhbGxvYyhQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKK2J5dGVhcnJheV9kZWFsbG9jKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKQogewotCWlmIChzZWxmLT5vYl9leHBvcnRzID4gMCkgewotCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgaWYgKHNlbGYtPm9iX2V4cG9ydHMgPiAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJkZWFsbG9jYXRlZCBieXRlYXJyYXkgb2JqZWN0IGhhcyBleHBvcnRlZCBidWZmZXJzIik7Ci0JCVB5RXJyX1ByaW50KCk7Ci0JfQorICAgICAgICBQeUVycl9QcmludCgpOworICAgIH0KICAgICBpZiAoc2VsZi0+b2JfYnl0ZXMgIT0gMCkgewogICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPm9iX2J5dGVzKTsKICAgICB9CkBAIC0xMTEwLDE5ICsxMTA2LDE5IEBACiAvKiBNZXRob2RzICovCiAKICNkZWZpbmUgU1RSSU5HTElCX0NIQVIgY2hhcgotI2RlZmluZSBTVFJJTkdMSUJfQ01QIG1lbWNtcAogI2RlZmluZSBTVFJJTkdMSUJfTEVOIFB5Qnl0ZUFycmF5X0dFVF9TSVpFCiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgUHlCeXRlQXJyYXlfQVNfU1RSSU5HCiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKLSNkZWZpbmUgU1RSSU5HTElCX0VNUFRZIG51bGxieXRlcworI2RlZmluZSBTVFJJTkdMSUJfSVNTUEFDRSBQeV9JU1NQQUNFCisjZGVmaW5lIFNUUklOR0xJQl9JU0xJTkVCUkVBSyh4KSAoKHggPT0gJ1xuJykgfHwgKHggPT0gJ1xyJykpCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCBQeUJ5dGVBcnJheV9DaGVja0V4YWN0CiAjZGVmaW5lIFNUUklOR0xJQl9NVVRBQkxFIDEKLSNkZWZpbmUgRlJPTV9CWVRFQVJSQVkgMQogCiAjaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY3R5cGUuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgiCiAKQEAgLTExMzAsMjQgKzExMjYsMjMgQEAKIC8qIFRoZSBmb2xsb3dpbmcgUHlfTE9DQUxfSU5MSU5FIGFuZCBQeV9MT0NBTCBmdW5jdGlvbnMKIHdlcmUgY29waWVkIGZyb20gdGhlIG9sZCBjaGFyKiBzdHlsZSBzdHJpbmcgb2JqZWN0LiAqLwogCi1QeV9MT0NBTF9JTkxJTkUodm9pZCkKLV9hZGp1c3RfaW5kaWNlcyhQeV9zc2l6ZV90ICpzdGFydCwgUHlfc3NpemVfdCAqZW5kLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICBpZiAoKmVuZCA+IGxlbikKLSAgICAgICAgKmVuZCA9IGxlbjsKLSAgICBlbHNlIGlmICgqZW5kIDwgMCkKLSAgICAgICAgKmVuZCArPSBsZW47Ci0gICAgaWYgKCplbmQgPCAwKQotICAgICAgICAqZW5kID0gMDsKLSAgICBpZiAoKnN0YXJ0IDwgMCkKLSAgICAgICAgKnN0YXJ0ICs9IGxlbjsKLSAgICBpZiAoKnN0YXJ0IDwgMCkKLSAgICAgICAgKnN0YXJ0ID0gMDsKLX0KLQorLyogaGVscGVyIG1hY3JvIHRvIGZpeHVwIHN0YXJ0L2VuZCBzbGljZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKSAgICAgICAgIFwKKyAgICBpZiAoZW5kID4gbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChlbmQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGVuZCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGVuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoc3RhcnQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhcnQgKz0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKIFB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQotYnl0ZXNfZmluZF9pbnRlcm5hbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIGludCBkaXIpCitieXRlYXJyYXlfZmluZF9pbnRlcm5hbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIGludCBkaXIpCiB7CiAgICAgUHlPYmplY3QgKnN1Ym9iajsKICAgICBQeV9idWZmZXIgc3ViYnVmOwpAQCAtMTE4MSw5ICsxMTc2LDkgQEAKIFJldHVybiAtMSBvbiBmYWlsdXJlLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfZmluZChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfZmluZChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlfc3NpemVfdCByZXN1bHQgPSBieXRlc19maW5kX2ludGVybmFsKHNlbGYsIGFyZ3MsICsxKTsKKyAgICBQeV9zc2l6ZV90IHJlc3VsdCA9IGJ5dGVhcnJheV9maW5kX2ludGVybmFsKHNlbGYsIGFyZ3MsICsxKTsKICAgICBpZiAocmVzdWx0ID09IC0yKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3QocmVzdWx0KTsKQEAgLTExOTcsNyArMTE5Miw3IEBACiBhcyBpbiBzbGljZSBub3RhdGlvbi4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2NvdW50KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9jb3VudChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnN1Yl9vYmo7CiAgICAgY29uc3QgY2hhciAqc3RyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwpAQCAtMTIxMiwxMCArMTIwNywxMCBAQAogICAgIGlmIChfZ2V0YnVmZmVyKHN1Yl9vYmosICZ2c3ViKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgX2FkanVzdF9pbmRpY2VzKCZzdGFydCwgJmVuZCwgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikpOworICAgIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpKTsKIAogICAgIGNvdW50X29iaiA9IFB5SW50X0Zyb21Tc2l6ZV90KAotICAgICAgICBzdHJpbmdsaWJfY291bnQoc3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LCB2c3ViLmJ1ZiwgdnN1Yi5sZW4pCisgICAgICAgIHN0cmluZ2xpYl9jb3VudChzdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHZzdWIuYnVmLCB2c3ViLmxlbiwgUFlfU1NJWkVfVF9NQVgpCiAgICAgICAgICk7CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7CiAgICAgcmV0dXJuIGNvdW50X29iajsKQEAgLTEyMjgsOSArMTIyMyw5IEBACiBMaWtlIEIuZmluZCgpIGJ1dCByYWlzZSBWYWx1ZUVycm9yIHdoZW4gdGhlIHN1YnNlY3Rpb24gaXMgbm90IGZvdW5kLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfaW5kZXgoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X2luZGV4KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeV9zc2l6ZV90IHJlc3VsdCA9IGJ5dGVzX2ZpbmRfaW50ZXJuYWwoc2VsZiwgYXJncywgKzEpOworICAgIFB5X3NzaXplX3QgcmVzdWx0ID0gYnl0ZWFycmF5X2ZpbmRfaW50ZXJuYWwoc2VsZiwgYXJncywgKzEpOwogICAgIGlmIChyZXN1bHQgPT0gLTIpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKQEAgLTEyNTIsOSArMTI0Nyw5IEBACiBSZXR1cm4gLTEgb24gZmFpbHVyZS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3JmaW5kKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9yZmluZChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlfc3NpemVfdCByZXN1bHQgPSBieXRlc19maW5kX2ludGVybmFsKHNlbGYsIGFyZ3MsIC0xKTsKKyAgICBQeV9zc2l6ZV90IHJlc3VsdCA9IGJ5dGVhcnJheV9maW5kX2ludGVybmFsKHNlbGYsIGFyZ3MsIC0xKTsKICAgICBpZiAocmVzdWx0ID09IC0yKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3QocmVzdWx0KTsKQEAgLTEyNjcsOSArMTI2Miw5IEBACiBMaWtlIEIucmZpbmQoKSBidXQgcmFpc2UgVmFsdWVFcnJvciB3aGVuIHRoZSBzdWJzZWN0aW9uIGlzIG5vdCBmb3VuZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3JpbmRleChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfcmluZGV4KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeV9zc2l6ZV90IHJlc3VsdCA9IGJ5dGVzX2ZpbmRfaW50ZXJuYWwoc2VsZiwgYXJncywgLTEpOworICAgIFB5X3NzaXplX3QgcmVzdWx0ID0gYnl0ZWFycmF5X2ZpbmRfaW50ZXJuYWwoc2VsZiwgYXJncywgLTEpOwogICAgIGlmIChyZXN1bHQgPT0gLTIpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKQEAgLTEyODIsNyArMTI3Nyw3IEBACiAKIAogc3RhdGljIGludAotYnl0ZXNfY29udGFpbnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCitieXRlYXJyYXlfY29udGFpbnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCiB7CiAgICAgUHlfc3NpemVfdCBpdmFsID0gUHlOdW1iZXJfQXNTc2l6ZV90KGFyZywgUHlFeGNfVmFsdWVFcnJvcik7CiAgICAgaWYgKGl2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewpAQCAtMTMxMCw3ICsxMzA1LDcgQEAKICAqIC0xIG9uIGVycm9yLCAwIGlmIG5vdCBmb3VuZCBhbmQgMSBpZiBmb3VuZC4KICAqLwogUHlfTE9DQUwoaW50KQotX2J5dGVzX3RhaWxtYXRjaChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN1YnN0ciwgUHlfc3NpemVfdCBzdGFydCwKK19ieXRlYXJyYXlfdGFpbG1hdGNoKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3Vic3RyLCBQeV9zc2l6ZV90IHN0YXJ0LAogICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGVuZCwgaW50IGRpcmVjdGlvbikKIHsKICAgICBQeV9zc2l6ZV90IGxlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpOwpAQCAtMTMyMyw3ICsxMzE4LDcgQEAKICAgICBpZiAoX2dldGJ1ZmZlcihzdWJzdHIsICZ2c3Vic3RyKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIF9hZGp1c3RfaW5kaWNlcygmc3RhcnQsICZlbmQsIGxlbik7CisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKTsKIAogICAgIGlmIChkaXJlY3Rpb24gPCAwKSB7CiAgICAgICAgIC8qIHN0YXJ0c3dpdGggKi8KQEAgLTEzNTcsNyArMTM1Miw3IEBACiBwcmVmaXggY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBzdHJpbmdzIHRvIHRyeS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3N0YXJ0c3dpdGgoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3N0YXJ0c3dpdGgoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwogICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7CkBAIC0xMzcwLDcgKzEzNjUsNyBAQAogICAgIGlmIChQeVR1cGxlX0NoZWNrKHN1Ym9iaikpIHsKICAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlUdXBsZV9HRVRfU0laRShzdWJvYmopOyBpKyspIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IF9ieXRlc190YWlsbWF0Y2goc2VsZiwKKyAgICAgICAgICAgIHJlc3VsdCA9IF9ieXRlYXJyYXlfdGFpbG1hdGNoKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX0lURU0oc3Vib2JqLCBpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCwgLTEpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKQEAgLTEzODEsNyArMTM3Niw3IEBACiAgICAgICAgIH0KICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogICAgIH0KLSAgICByZXN1bHQgPSBfYnl0ZXNfdGFpbG1hdGNoKHNlbGYsIHN1Ym9iaiwgc3RhcnQsIGVuZCwgLTEpOworICAgIHJlc3VsdCA9IF9ieXRlYXJyYXlfdGFpbG1hdGNoKHNlbGYsIHN1Ym9iaiwgc3RhcnQsIGVuZCwgLTEpOwogICAgIGlmIChyZXN1bHQgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGVsc2UKQEAgLTEzOTcsNyArMTM5Miw3IEBACiBzdWZmaXggY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBzdHJpbmdzIHRvIHRyeS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2VuZHN3aXRoKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9lbmRzd2l0aChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBzdGFydCA9IDA7CiAgICAgUHlfc3NpemVfdCBlbmQgPSBQWV9TU0laRV9UX01BWDsKQEAgLTE0MTAsNyArMTQwNSw3IEBACiAgICAgaWYgKFB5VHVwbGVfQ2hlY2soc3Vib2JqKSkgewogICAgICAgICBQeV9zc2l6ZV90IGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeVR1cGxlX0dFVF9TSVpFKHN1Ym9iaik7IGkrKykgewotICAgICAgICAgICAgcmVzdWx0ID0gX2J5dGVzX3RhaWxtYXRjaChzZWxmLAorICAgICAgICAgICAgcmVzdWx0ID0gX2J5dGVhcnJheV90YWlsbWF0Y2goc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfSVRFTShzdWJvYmosIGkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLCArMSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IC0xKQpAQCAtMTQyMSw3ICsxNDE2LDcgQEAKICAgICAgICAgfQogICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiAgICAgfQotICAgIHJlc3VsdCA9IF9ieXRlc190YWlsbWF0Y2goc2VsZiwgc3Vib2JqLCBzdGFydCwgZW5kLCArMSk7CisgICAgcmVzdWx0ID0gX2J5dGVhcnJheV90YWlsbWF0Y2goc2VsZiwgc3Vib2JqLCBzdGFydCwgZW5kLCArMSk7CiAgICAgaWYgKHJlc3VsdCA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZWxzZQpAQCAtMTQzOCw3ICsxNDMzLDcgQEAKIHRhYmxlLCB3aGljaCBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0IG9mIGxlbmd0aCAyNTYuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc190cmFuc2xhdGUoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3RyYW5zbGF0ZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgcmVnaXN0ZXIgY2hhciAqaW5wdXQsICpvdXRwdXQ7CiAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqdGFibGU7CkBAIC0xNDQ2LDI5ICsxNDQxLDM1IEBACiAgICAgUHlPYmplY3QgKmlucHV0X29iaiA9IChQeU9iamVjdCopc2VsZjsKICAgICBjb25zdCBjaGFyICpvdXRwdXRfc3RhcnQ7CiAgICAgUHlfc3NpemVfdCBpbmxlbjsKLSAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIGludCB0cmFuc190YWJsZVsyNTZdOwotICAgIFB5T2JqZWN0ICp0YWJsZW9iaiwgKmRlbG9iaiA9IE5VTEw7CisgICAgUHlPYmplY3QgKnRhYmxlb2JqID0gTlVMTCwgKmRlbG9iaiA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIHZ0YWJsZSwgdmRlbDsKIAogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInRyYW5zbGF0ZSIsIDEsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFibGVvYmosICZkZWxvYmopKQogICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9nZXRidWZmZXIodGFibGVvYmosICZ2dGFibGUpIDwgMCkKKyAgICBpZiAodGFibGVvYmogPT0gUHlfTm9uZSkgeworICAgICAgICB0YWJsZSA9IE5VTEw7CisgICAgICAgIHRhYmxlb2JqID0gTlVMTDsKKyAgICB9IGVsc2UgaWYgKF9nZXRidWZmZXIodGFibGVvYmosICZ2dGFibGUpIDwgMCkgewogICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmICh2dGFibGUubGVuICE9IDI1NikgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0cmFuc2xhdGlvbiB0YWJsZSBtdXN0IGJlIDI1NiBjaGFyYWN0ZXJzIGxvbmciKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnRhYmxlKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHZ0YWJsZS5sZW4gIT0gMjU2KSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJhbnNsYXRpb24gdGFibGUgbXVzdCBiZSAyNTYgY2hhcmFjdGVycyBsb25nIik7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2dGFibGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdGFibGUgPSAoY29uc3QgY2hhciopdnRhYmxlLmJ1ZjsKICAgICB9CiAKICAgICBpZiAoZGVsb2JqICE9IE5VTEwpIHsKICAgICAgICAgaWYgKF9nZXRidWZmZXIoZGVsb2JqLCAmdmRlbCkgPCAwKSB7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2dGFibGUpOwotCSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGlmICh0YWJsZW9iaiAhPSBOVUxMKQorICAgICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZ0YWJsZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKQEAgLTE0NzYsNyArMTQ3Nyw2IEBACiAgICAgICAgIHZkZWwubGVuID0gMDsKICAgICB9CiAKLSAgICB0YWJsZSA9IChjb25zdCBjaGFyICopdnRhYmxlLmJ1ZjsKICAgICBpbmxlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKGlucHV0X29iaik7CiAgICAgcmVzdWx0ID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBpbmxlbik7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAKICAgICBvdXRwdXRfc3RhcnQgPSBvdXRwdXQgPSBQeUJ5dGVBcnJheV9Bc1N0cmluZyhyZXN1bHQpOwogICAgIGlucHV0ID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGlucHV0X29iaik7CiAKLSAgICBpZiAodmRlbC5sZW4gPT0gMCkgeworICAgIGlmICh2ZGVsLmxlbiA9PSAwICYmIHRhYmxlICE9IE5VTEwpIHsKICAgICAgICAgLyogSWYgbm8gZGVsZXRpb25zIGFyZSByZXF1aXJlZCwgdXNlIGZhc3RlciBjb2RlICovCiAgICAgICAgIGZvciAoaSA9IGlubGVuOyAtLWkgPj0gMDsgKSB7CiAgICAgICAgICAgICBjID0gUHlfQ0hBUk1BU0soKmlucHV0KyspOwpAQCAtMTQ5Miw5ICsxNDkyLDE0IEBACiAgICAgICAgIH0KICAgICAgICAgZ290byBkb25lOwogICAgIH0KLSAgICAKLSAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgICAgIHRyYW5zX3RhYmxlW2ldID0gUHlfQ0hBUk1BU0sodGFibGVbaV0pOworCisgICAgaWYgKHRhYmxlID09IE5VTEwpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICAgICAgICAgdHJhbnNfdGFibGVbaV0gPSBQeV9DSEFSTUFTSyhpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgICAgICAgICB0cmFuc190YWJsZVtpXSA9IFB5X0NIQVJNQVNLKHRhYmxlW2ldKTsKKyAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgdmRlbC5sZW47IGkrKykKICAgICAgICAgdHJhbnNfdGFibGVbKGludCkgUHlfQ0hBUk1BU0soICgodW5zaWduZWQgY2hhciopdmRlbC5idWYpW2ldICldID0gLTE7CkBAIC0xNTEwLDI3ICsxNTE1LDE5IEBACiAgICAgICAgIFB5Qnl0ZUFycmF5X1Jlc2l6ZShyZXN1bHQsIG91dHB1dCAtIG91dHB1dF9zdGFydCk7CiAKIGRvbmU6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmdnRhYmxlKTsKKyAgICBpZiAodGFibGVvYmogIT0gTlVMTCkKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnRhYmxlKTsKICAgICBpZiAoZGVsb2JqICE9IE5VTEwpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZkZWwpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAotI2RlZmluZSBGT1JXQVJEIDEKLSNkZWZpbmUgUkVWRVJTRSAtMQotCiAvKiBmaW5kIGFuZCBjb3VudCBjaGFyYWN0ZXJzIGFuZCBzdWJzdHJpbmdzICovCiAKICNkZWZpbmUgZmluZGNoYXIodGFyZ2V0LCB0YXJnZXRfbGVuLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgoY2hhciAqKW1lbWNocigoY29uc3Qgdm9pZCAqKSh0YXJnZXQpLCBjLCB0YXJnZXRfbGVuKSkKIAotLyogRG9uJ3QgY2FsbCBpZiBsZW5ndGggPCAyICovCi0jZGVmaW5lIFB5X1NUUklOR19NQVRDSCh0YXJnZXQsIG9mZnNldCwgcGF0dGVybiwgbGVuZ3RoKSAgICAgICAgXAotICAodGFyZ2V0W29mZnNldF0gPT0gcGF0dGVyblswXSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIHRhcmdldFtvZmZzZXQrbGVuZ3RoLTFdID09IHBhdHRlcm5bbGVuZ3RoLTFdICYmICAgICAgICAgICAgICBcCi0gICAhbWVtY21wKHRhcmdldCtvZmZzZXQrMSwgcGF0dGVybisxLCBsZW5ndGgtMikgKQotCiAKIC8qIEJ5dGVzIG9wcyBtdXN0IHJldHVybiBhIHN0cmluZywgY3JlYXRlIGEgY29weSAqLwogUHlfTE9DQUwoUHlCeXRlQXJyYXlPYmplY3QgKikKQEAgLTE1NTcsOTMgKzE1NTQsNiBAQAogICAgIHJldHVybiBjb3VudDsKIH0KIAotUHlfTE9DQUwoUHlfc3NpemVfdCkKLWZpbmRzdHJpbmcoY29uc3QgY2hhciAqdGFyZ2V0LCBQeV9zc2l6ZV90IHRhcmdldF9sZW4sCi0gICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIFB5X3NzaXplX3QgcGF0dGVybl9sZW4sCi0gICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsCi0gICAgICAgICAgIFB5X3NzaXplX3QgZW5kLAotICAgICAgICAgICBpbnQgZGlyZWN0aW9uKQotewotICAgIGlmIChzdGFydCA8IDApIHsKLSAgICAgICAgc3RhcnQgKz0gdGFyZ2V0X2xlbjsKLSAgICAgICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICB9Ci0gICAgaWYgKGVuZCA+IHRhcmdldF9sZW4pIHsKLSAgICAgICAgZW5kID0gdGFyZ2V0X2xlbjsKLSAgICB9IGVsc2UgaWYgKGVuZCA8IDApIHsKLSAgICAgICAgZW5kICs9IHRhcmdldF9sZW47Ci0gICAgICAgIGlmIChlbmQgPCAwKQotICAgICAgICAgICAgZW5kID0gMDsKLSAgICB9Ci0KLSAgICAvKiB6ZXJvLWxlbmd0aCBzdWJzdHJpbmdzIGFsd2F5cyBtYXRjaCBhdCB0aGUgZmlyc3QgYXR0ZW1wdCAqLwotICAgIGlmIChwYXR0ZXJuX2xlbiA9PSAwKQotICAgICAgICByZXR1cm4gKGRpcmVjdGlvbiA+IDApID8gc3RhcnQgOiBlbmQ7Ci0KLSAgICBlbmQgLT0gcGF0dGVybl9sZW47Ci0KLSAgICBpZiAoZGlyZWN0aW9uIDwgMCkgewotICAgICAgICBmb3IgKDsgZW5kID49IHN0YXJ0OyBlbmQtLSkKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBlbmQsIHBhdHRlcm4sIHBhdHRlcm5fbGVuKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZW5kOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoOyBzdGFydCA8PSBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHRhcmdldCwgc3RhcnQsIHBhdHRlcm4sIHBhdHRlcm5fbGVuKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQ7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCi1jb3VudHN0cmluZyhjb25zdCBjaGFyICp0YXJnZXQsIFB5X3NzaXplX3QgdGFyZ2V0X2xlbiwKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIFB5X3NzaXplX3QgcGF0dGVybl9sZW4sCi0gICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LAotICAgICAgICAgICAgUHlfc3NpemVfdCBlbmQsCi0gICAgICAgICAgICBpbnQgZGlyZWN0aW9uLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIFB5X3NzaXplX3QgY291bnQ9MDsKLQotICAgIGlmIChzdGFydCA8IDApIHsKLSAgICAgICAgc3RhcnQgKz0gdGFyZ2V0X2xlbjsKLSAgICAgICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICB9Ci0gICAgaWYgKGVuZCA+IHRhcmdldF9sZW4pIHsKLSAgICAgICAgZW5kID0gdGFyZ2V0X2xlbjsKLSAgICB9IGVsc2UgaWYgKGVuZCA8IDApIHsKLSAgICAgICAgZW5kICs9IHRhcmdldF9sZW47Ci0gICAgICAgIGlmIChlbmQgPCAwKQotICAgICAgICAgICAgZW5kID0gMDsKLSAgICB9Ci0KLSAgICAvKiB6ZXJvLWxlbmd0aCBzdWJzdHJpbmdzIG1hdGNoIGV2ZXJ5d2hlcmUgKi8KLSAgICBpZiAocGF0dGVybl9sZW4gPT0gMCB8fCBtYXhjb3VudCA9PSAwKSB7Ci0gICAgICAgIGlmICh0YXJnZXRfbGVuKzEgPCBtYXhjb3VudCkKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXRfbGVuKzE7Ci0gICAgICAgIHJldHVybiBtYXhjb3VudDsKLSAgICB9Ci0KLSAgICBlbmQgLT0gcGF0dGVybl9sZW47Ci0gICAgaWYgKGRpcmVjdGlvbiA8IDApIHsKLSAgICAgICAgZm9yICg7IChlbmQgPj0gc3RhcnQpOyBlbmQtLSkKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBlbmQsIHBhdHRlcm4sIHBhdHRlcm5fbGVuKSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaWYgKC0tbWF4Y291bnQgPD0gMCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZW5kIC09IHBhdHRlcm5fbGVuLTE7Ci0gICAgICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICg7IChzdGFydCA8PSBlbmQpOyBzdGFydCsrKQotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSCh0YXJnZXQsIHN0YXJ0LCBwYXR0ZXJuLCBwYXR0ZXJuX2xlbikpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlmICgtLW1heGNvdW50IDw9IDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHN0YXJ0ICs9IHBhdHRlcm5fbGVuLTE7Ci0gICAgICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQogCiAvKiBBbGdvcml0aG1zIGZvciBkaWZmZXJlbnQgY2FzZXMgb2Ygc3RyaW5nIHJlcGxhY2VtZW50ICovCiAKQEAgLTE3NjUsMTAgKzE2NzUsOSBAQAogICAgIHNlbGZfbGVuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZik7CiAgICAgc2VsZl9zID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCi0gICAgY291bnQgPSBjb3VudHN0cmluZyhzZWxmX3MsIHNlbGZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGZfbGVuLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4Y291bnQpOworICAgIGNvdW50ID0gc3RyaW5nbGliX2NvdW50KHNlbGZfcywgc2VsZl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhjb3VudCk7CiAKICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAvKiBubyBtYXRjaGVzICovCkBAIC0xNzg3LDkgKzE2OTYsOSBAQAogICAgIHN0YXJ0ID0gc2VsZl9zOwogICAgIGVuZCA9IHNlbGZfcyArIHNlbGZfbGVuOwogICAgIHdoaWxlIChjb3VudC0tID4gMCkgewotICAgICAgICBvZmZzZXQgPSBmaW5kc3RyaW5nKHN0YXJ0LCBlbmQtc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBlbmQtc3RhcnQsIEZPUldBUkQpOworICAgICAgICBvZmZzZXQgPSBzdHJpbmdsaWJfZmluZChzdGFydCwgZW5kLXN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICAgaWYgKG9mZnNldCA9PSAtMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBuZXh0ID0gc3RhcnQgKyBvZmZzZXQ7CkBAIC0xODY1LDkgKzE3NzQsOSBAQAogICAgIHNlbGZfcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBzZWxmX2xlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpOwogCi0gICAgb2Zmc2V0ID0gZmluZHN0cmluZyhzZWxmX3MsIHNlbGZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGZfbGVuLCBGT1JXQVJEKTsKKyAgICBvZmZzZXQgPSBzdHJpbmdsaWJfZmluZChzZWxmX3MsIHNlbGZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAgICAgaWYgKG9mZnNldCA9PSAtMSkgewogICAgICAgICAvKiBObyBtYXRjaGVzOyByZXR1cm4gdGhlIG9yaWdpbmFsIGJ5dGVzICovCiAgICAgICAgIHJldHVybiByZXR1cm5fc2VsZihzZWxmKTsKQEAgLTE4ODcsOSArMTc5Niw5IEBACiAgICAgZW5kID0gcmVzdWx0X3MgKyBzZWxmX2xlbjsKIAogICAgIHdoaWxlICggLS1tYXhjb3VudCA+IDApIHsKLSAgICAgICAgb2Zmc2V0ID0gZmluZHN0cmluZyhzdGFydCwgZW5kLXN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZW5kLXN0YXJ0LCBGT1JXQVJEKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RyaW5nbGliX2ZpbmQoc3RhcnQsIGVuZC1zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAgICAgICAgIGlmIChvZmZzZXQ9PS0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIFB5X01FTUNQWShzdGFydCtvZmZzZXQsIHRvX3MsIGZyb21fbGVuKTsKQEAgLTE5ODIsOSArMTg5MSwxMCBAQAogICAgIHNlbGZfcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBzZWxmX2xlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpOwogCi0gICAgY291bnQgPSBjb3VudHN0cmluZyhzZWxmX3MsIHNlbGZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGZfbGVuLCBGT1JXQVJELCBtYXhjb3VudCk7CisgICAgY291bnQgPSBzdHJpbmdsaWJfY291bnQoc2VsZl9zLCBzZWxmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGNvdW50KTsKKwogICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgIC8qIG5vIG1hdGNoZXMsIHJldHVybiB1bmNoYW5nZWQgKi8KICAgICAgICAgcmV0dXJuIHJldHVybl9zZWxmKHNlbGYpOwpAQCAtMjAxMSw5ICsxOTIxLDkgQEAKICAgICBzdGFydCA9IHNlbGZfczsKICAgICBlbmQgPSBzZWxmX3MgKyBzZWxmX2xlbjsKICAgICB3aGlsZSAoY291bnQtLSA+IDApIHsKLSAgICAgICAgb2Zmc2V0ID0gZmluZHN0cmluZyhzdGFydCwgZW5kLXN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZW5kLXN0YXJ0LCBGT1JXQVJEKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RyaW5nbGliX2ZpbmQoc3RhcnQsIGVuZC1zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAgICAgICAgIGlmIChvZmZzZXQgPT0gLTEpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbmV4dCA9IHN0YXJ0K29mZnNldDsKQEAgLTIxMTcsNyArMjAyNyw3IEBACiBnaXZlbiwgb25seSB0aGUgZmlyc3QgY291bnQgb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcmVwbGFjZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfcmVwbGFjZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBjb3VudCA9IC0xOwogICAgIFB5T2JqZWN0ICpmcm9tLCAqdG8sICpyZXM7CkBAIC0yMTQyLDEyMyArMjA1Miw2IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotCi0vKiBPdmVyYWxsb2NhdGUgdGhlIGluaXRpYWwgbGlzdCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiByZWFsbG9jcyBmb3Igc21hbGwKLSAgIHNwbGl0IHNpemVzLiAgRWcsICJBIEEgQSBBIEEgQSBBIEEgQSBBIi5zcGxpdCgpICgxMCBlbGVtZW50cykgaGFzIHRocmVlCi0gICByZXNpemVzLCB0byBzaXplcyA0LCA4LCB0aGVuIDE2LiAgTW9zdCBvYnNlcnZlZCBzdHJpbmcgc3BsaXRzIGFyZSBmb3IgaHVtYW4KLSAgIHRleHQgKHJvdWdobHkgMTEgd29yZHMgcGVyIGxpbmUpIGFuZCBmaWVsZCBkZWxpbWl0ZWQgZGF0YSAodXN1YWxseSAxLTEwCi0gICBmaWVsZHMpLiAgRm9yIGxhcmdlIHN0cmluZ3MgdGhlIHNwbGl0IGFsZ29yaXRobXMgYXJlIGJhbmR3aWR0aCBsaW1pdGVkCi0gICBzbyBpbmNyZWFzaW5nIHRoZSBwcmVhbGxvY2F0aW9uIGxpa2VseSB3aWxsIG5vdCBpbXByb3ZlIHRoaW5ncy4qLwotCi0jZGVmaW5lIE1BWF9QUkVBTExPQyAxMgotCi0vKiA1IHNwbGl0cyBnaXZlcyA2IGVsZW1lbnRzICovCi0jZGVmaW5lIFBSRUFMTE9DX1NJWkUobWF4c3BsaXQpIFwKLSAgICAobWF4c3BsaXQgPj0gTUFYX1BSRUFMTE9DID8gTUFYX1BSRUFMTE9DIDogbWF4c3BsaXQrMSkKLQotI2RlZmluZSBTUExJVF9BUFBFTkQoZGF0YSwgbGVmdCwgcmlnaHQpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdHIgPSBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZSgoZGF0YSkgKyAobGVmdCksICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmlnaHQpIC0gKGxlZnQpKTsgICAgIFwKLSAgICBpZiAoc3RyID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHN0cikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYoc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0KLSNkZWZpbmUgU1BMSVRfQUREKGRhdGEsIGxlZnQsIHJpZ2h0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RyID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoKGRhdGEpICsgKGxlZnQpLCAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0KSAtIChsZWZ0KSk7ICAgICBcCi0gICAgaWYgKHN0ciA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoY291bnQgPCBNQVhfUFJFQUxMT0MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGNvdW50LCBzdHIpOyAgICAgICAgICAgICAgXAotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdHIpKSB7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNvdW50Kys7IH0KLQotLyogQWx3YXlzIGZvcmNlIHRoZSBsaXN0IHRvIHRoZSBleHBlY3RlZCBzaXplLiAqLwotI2RlZmluZSBGSVhfUFJFQUxMT0NfU0laRShsaXN0KSBQeV9TSVpFKGxpc3QpID0gY291bnQKLQotCi1QeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKLXNwbGl0X2NoYXIoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBsZW4sIGNoYXIgY2gsIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqLCBjb3VudCA9IDA7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOwotCi0gICAgaWYgKGxpc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpID0gaiA9IDA7Ci0gICAgd2hpbGUgKChqIDwgbGVuKSAmJiAobWF4Y291bnQtLSA+IDApKSB7Ci0gICAgICAgIGZvcig7IGogPCBsZW47IGorKykgewotICAgICAgICAgICAgLyogSSBmb3VuZCB0aGF0IHVzaW5nIG1lbWNociBtYWtlcyBubyBkaWZmZXJlbmNlICovCi0gICAgICAgICAgICBpZiAoc1tqXSA9PSBjaCkgewotICAgICAgICAgICAgICAgIFNQTElUX0FERChzLCBpLCBqKTsKLSAgICAgICAgICAgICAgICBpID0gaiA9IGogKyAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpIDw9IGxlbikgewotICAgICAgICBTUExJVF9BREQocywgaSwgbGVuKTsKLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCi1zcGxpdF93aGl0ZXNwYWNlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbGVuLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgaiwgY291bnQgPSAwOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKLQotICAgIGlmIChsaXN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZm9yIChpID0gaiA9IDA7IGkgPCBsZW47ICkgewotICAgICAgICAvKiBmaW5kIGEgdG9rZW4gKi8KLSAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgSVNTUEFDRShzW2ldKSkKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgaiA9IGk7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmICFJU1NQQUNFKHNbaV0pKQotICAgICAgICAgICAgaSsrOwotICAgICAgICBpZiAoaiA8IGkpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BREQocywgaiwgaSk7Ci0gICAgICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiBJU1NQQUNFKHNbaV0pKQotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGogPSBpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChqIDwgbGVuKSB7Ci0gICAgICAgIFNQTElUX0FERChzLCBqLCBsZW4pOwotICAgIH0KLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKLSAgICByZXR1cm4gbGlzdDsKLQotICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQogUHlEb2NfU1RSVkFSKHNwbGl0X19kb2NfXywKICJCLnNwbGl0KFtzZXBbLCBtYXhzcGxpdF1dKSAtPiBsaXN0IG9mIGJ5dGVhcnJheVxuXAogXG5cCkBAIC0yMjY4LDE2ICsyMDYxLDEzIEBACiBJZiBtYXhzcGxpdCBpcyBnaXZlbiwgYXQgbW9zdCBtYXhzcGxpdCBzcGxpdHMgYXJlIGRvbmUuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19zcGxpdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfc3BsaXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5X3NzaXplX3QgbGVuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZiksIG4sIGksIGo7Ci0gICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xLCBjb3VudCA9IDA7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSwgbjsKKyAgICBQeV9zc2l6ZV90IG1heHNwbGl0ID0gLTE7CiAgICAgY29uc3QgY2hhciAqcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwgKnN1YjsKLSAgICBQeU9iamVjdCAqbGlzdCwgKnN0ciwgKnN1Ym9iaiA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKmxpc3QsICpzdWJvYmogPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2c3ViOwotI2lmZGVmIFVTRV9GQVNUCi0gICAgUHlfc3NpemVfdCBwb3M7Ci0jZW5kaWYKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE9uOnNwbGl0IiwgJnN1Ym9iaiwgJm1heHNwbGl0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMjg1LDg2ICsyMDc1LDE4IEBACiAgICAgICAgIG1heHNwbGl0ID0gUFlfU1NJWkVfVF9NQVg7CiAKICAgICBpZiAoc3Vib2JqID09IFB5X05vbmUpCi0gICAgICAgIHJldHVybiBzcGxpdF93aGl0ZXNwYWNlKHMsIGxlbiwgbWF4c3BsaXQpOworICAgICAgICByZXR1cm4gc3RyaW5nbGliX3NwbGl0X3doaXRlc3BhY2UoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBtYXhzcGxpdCk7CiAKICAgICBpZiAoX2dldGJ1ZmZlcihzdWJvYmosICZ2c3ViKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN1YiA9IHZzdWIuYnVmOwogICAgIG4gPSB2c3ViLmxlbjsKIAotICAgIGlmIChuID09IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbXB0eSBzZXBhcmF0b3IiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAobiA9PSAxKSB7Ci0gICAgICAgIGxpc3QgPSBzcGxpdF9jaGFyKHMsIGxlbiwgc3ViWzBdLCBtYXhzcGxpdCk7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0KLSAgICBsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heHNwbGl0KSk7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0jaWZkZWYgVVNFX0ZBU1QKLSAgICBpID0gaiA9IDA7Ci0gICAgd2hpbGUgKG1heHNwbGl0LS0gPiAwKSB7Ci0gICAgICAgIHBvcyA9IGZhc3RzZWFyY2gocytpLCBsZW4taSwgc3ViLCBuLCBGQVNUX1NFQVJDSCk7Ci0gICAgICAgIGlmIChwb3MgPCAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBqID0gaStwb3M7Ci0gICAgICAgIFNQTElUX0FERChzLCBpLCBqKTsKLSAgICAgICAgaSA9IGogKyBuOwotICAgIH0KLSNlbHNlCi0gICAgaSA9IGogPSAwOwotICAgIHdoaWxlICgoaituIDw9IGxlbikgJiYgKG1heHNwbGl0LS0gPiAwKSkgewotICAgICAgICBmb3IgKDsgaituIDw9IGxlbjsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHMsIGosIHN1YiwgbikpIHsKLSAgICAgICAgICAgICAgICBTUExJVF9BREQocywgaSwgaik7Ci0gICAgICAgICAgICAgICAgaSA9IGogPSBqICsgbjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIFNQTElUX0FERChzLCBpLCBsZW4pOwotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOworICAgIGxpc3QgPSBzdHJpbmdsaWJfc3BsaXQoCisgICAgICAgIChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgc3ViLCBuLCBtYXhzcGxpdAorICAgICAgICApOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwogICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgIHJldHVybiBOVUxMOwotfQotCi0vKiBzdHJpbmdsaWIncyBwYXJ0aXRpb24gc2hhcmVzIG51bGxieXRlcyBpbiBzb21lIGNhc2VzLgotICAgdW5kbyB0aGlzLCB3ZSBkb24ndCB3YW50IHRoZSBudWxsYnl0ZXMgdG8gYmUgc2hhcmVkLiAqLwotc3RhdGljIFB5T2JqZWN0ICoKLW1ha2VfbnVsbGJ5dGVzX3VuaXF1ZShQeU9iamVjdCAqcmVzdWx0KQotewotICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgYXNzZXJ0KFB5VHVwbGVfQ2hlY2socmVzdWx0KSk7Ci0gICAgICAgIGFzc2VydChQeVR1cGxlX0dFVF9TSVpFKHJlc3VsdCkgPT0gMyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChQeVR1cGxlX0dFVF9JVEVNKHJlc3VsdCwgaSkgPT0gKFB5T2JqZWN0ICopbnVsbGJ5dGVzKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm5ldyA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwotICAgICAgICAgICAgICAgIGlmIChuZXcgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihudWxsYnl0ZXMpOwotICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpLCBuZXcpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5RG9jX1NUUlZBUihwYXJ0aXRpb25fX2RvY19fLApAQCAtMjM3NSw3ICsyMDk3LDcgQEAKIGZvdW5kLCByZXR1cm5zIEIgYW5kIHR3byBlbXB0eSBieXRlYXJyYXkgb2JqZWN0cy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3BhcnRpdGlvbihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnNlcF9vYmopCitieXRlYXJyYXlfcGFydGl0aW9uKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc2VwX29iaikKIHsKICAgICBQeU9iamVjdCAqYnl0ZXNlcCwgKnJlc3VsdDsKIApAQCAtMjM5MSw3ICsyMTEzLDcgQEAKICAgICAgICAgICAgICk7CiAKICAgICBQeV9ERUNSRUYoYnl0ZXNlcCk7Ci0gICAgcmV0dXJuIG1ha2VfbnVsbGJ5dGVzX3VuaXF1ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5RG9jX1NUUlZBUihycGFydGl0aW9uX19kb2NfXywKQEAgLTI0MDMsNyArMjEyNSw3IEBACiBieXRlYXJyYXkgb2JqZWN0cyBhbmQgQi4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3JwYXJ0aXRpb24oUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzZXBfb2JqKQorYnl0ZWFycmF5X3JwYXJ0aXRpb24oUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzZXBfb2JqKQogewogICAgIFB5T2JqZWN0ICpieXRlc2VwLCAqcmVzdWx0OwogCkBAIC0yNDE5LDgxICsyMTQxLDcgQEAKICAgICAgICAgICAgICk7CiAKICAgICBQeV9ERUNSRUYoYnl0ZXNlcCk7Ci0gICAgcmV0dXJuIG1ha2VfbnVsbGJ5dGVzX3VuaXF1ZShyZXN1bHQpOwotfQotCi1QeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKLXJzcGxpdF9jaGFyKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbGVuLCBjaGFyIGNoLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgaiwgY291bnQ9MDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7Ci0KLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGkgPSBqID0gbGVuIC0gMTsKLSAgICB3aGlsZSAoKGkgPj0gMCkgJiYgKG1heGNvdW50LS0gPiAwKSkgewotICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGlmIChzW2ldID09IGNoKSB7Ci0gICAgICAgICAgICAgICAgU1BMSVRfQUREKHMsIGkgKyAxLCBqICsgMSk7Ci0gICAgICAgICAgICAgICAgaiA9IGkgPSBpIC0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaiA+PSAtMSkgewotICAgICAgICBTUExJVF9BREQocywgMCwgaiArIDEpOwotICAgIH0KLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KLSAgICByZXR1cm4gbGlzdDsKLQotICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCi1yc3BsaXRfd2hpdGVzcGFjZShjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IGxlbiwgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGosIGNvdW50ID0gMDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7Ci0KLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGZvciAoaSA9IGogPSBsZW4gLSAxOyBpID49IDA7ICkgewotICAgICAgICAvKiBmaW5kIGEgdG9rZW4gKi8KLSAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBJU1NQQUNFKHNbaV0pKQotICAgICAgICAgICAgaS0tOwotICAgICAgICBqID0gaTsKLSAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiAhSVNTUEFDRShzW2ldKSkKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgaWYgKGogPiBpKSB7Ci0gICAgICAgICAgICBpZiAobWF4Y291bnQtLSA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU1BMSVRfQUREKHMsIGkgKyAxLCBqICsgMSk7Ci0gICAgICAgICAgICB3aGlsZSAoaSA+PSAwICYmIElTU1BBQ0Uoc1tpXSkpCi0gICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgaiA9IGk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGogPj0gMCkgewotICAgICAgICBTUExJVF9BREQocywgMCwgaiArIDEpOwotICAgIH0KLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KLSAgICByZXR1cm4gbGlzdDsKLQotICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeURvY19TVFJWQVIocnNwbGl0X19kb2NfXywKQEAgLTI1MDYsMTIgKzIxNTQsMTIgQEAKIElmIG1heHNwbGl0IGlzIGdpdmVuLCBhdCBtb3N0IG1heHNwbGl0IHNwbGl0cyBhcmUgZG9uZS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3JzcGxpdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfcnNwbGl0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpLCBuLCBpLCBqOwotICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMSwgY291bnQgPSAwOworICAgIFB5X3NzaXplX3QgbGVuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZiksIG47CisgICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xOwogICAgIGNvbnN0IGNoYXIgKnMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksICpzdWI7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpzdHIsICpzdWJvYmogPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpsaXN0LCAqc3Vib2JqID0gUHlfTm9uZTsKICAgICBQeV9idWZmZXIgdnN1YjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE9uOnJzcGxpdCIsICZzdWJvYmosICZtYXhzcGxpdCkpCkBAIC0yNTIwLDU0ICsyMTY4LDE4IEBACiAgICAgICAgIG1heHNwbGl0ID0gUFlfU1NJWkVfVF9NQVg7CiAKICAgICBpZiAoc3Vib2JqID09IFB5X05vbmUpCi0gICAgICAgIHJldHVybiByc3BsaXRfd2hpdGVzcGFjZShzLCBsZW4sIG1heHNwbGl0KTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9yc3BsaXRfd2hpdGVzcGFjZSgoUHlPYmplY3QqKSBzZWxmLCBzLCBsZW4sIG1heHNwbGl0KTsKIAogICAgIGlmIChfZ2V0YnVmZmVyKHN1Ym9iaiwgJnZzdWIpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3ViID0gdnN1Yi5idWY7CiAgICAgbiA9IHZzdWIubGVuOwogCi0gICAgaWYgKG4gPT0gMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtcHR5IHNlcGFyYXRvciIpOwotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UgaWYgKG4gPT0gMSkgewotICAgICAgICBsaXN0ID0gcnNwbGl0X2NoYXIocywgbGVuLCBzdWJbMF0sIG1heHNwbGl0KTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7Ci0gICAgICAgIHJldHVybiBsaXN0OwotICAgIH0KLQotICAgIGxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4c3BsaXQpKTsKLSAgICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBqID0gbGVuOwotICAgIGkgPSBqIC0gbjsKLQotICAgIHdoaWxlICggKGkgPj0gMCkgJiYgKG1heHNwbGl0LS0gPiAwKSApIHsKLSAgICAgICAgZm9yICg7IGk+PTA7IGktLSkgewotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSChzLCBpLCBzdWIsIG4pKSB7Ci0gICAgICAgICAgICAgICAgU1BMSVRfQUREKHMsIGkgKyBuLCBqKTsKLSAgICAgICAgICAgICAgICBqID0gaTsKLSAgICAgICAgICAgICAgICBpIC09IG47Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgU1BMSVRfQUREKHMsIDAsIGopOwotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOwotICAgIGlmIChQeUxpc3RfUmV2ZXJzZShsaXN0KSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICBsaXN0ID0gc3RyaW5nbGliX3JzcGxpdCgKKyAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBzdWIsIG4sIG1heHNwbGl0CisgICAgICAgICk7CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7CiAgICAgcmV0dXJuIGxpc3Q7Ci0KLW9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgIHJldHVybiBOVUxMOwogfQogCiBQeURvY19TVFJWQVIocmV2ZXJzZV9fZG9jX18sCkBAIC0yNTc1LDcgKzIxODcsNyBAQAogXG5cCiBSZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgdmFsdWVzIGluIEIgaW4gcGxhY2UuIik7CiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcmV2ZXJzZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK2J5dGVhcnJheV9yZXZlcnNlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGNoYXIgc3dhcCwgKmhlYWQsICp0YWlsOwogICAgIFB5X3NzaXplX3QgaSwgaiwgbiA9IFB5X1NJWkUoc2VsZik7CkBAIC0yNTk3LDcgKzIyMDksNyBAQAogXG5cCiBJbnNlcnQgYSBzaW5nbGUgaXRlbSBpbnRvIHRoZSBieXRlYXJyYXkgYmVmb3JlIHRoZSBnaXZlbiBpbmRleC4iKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19pbnNlcnQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X2luc2VydChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnZhbHVlOwogICAgIGludCBpdmFsOwpAQCAtMjYzNCw3ICsyMjQ2LDcgQEAKIFxuXAogQXBwZW5kIGEgc2luZ2xlIGl0ZW0gdG8gdGhlIGVuZCBvZiBCLiIpOwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2FwcGVuZChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK2J5dGVhcnJheV9hcHBlbmQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCiB7CiAgICAgaW50IHZhbHVlOwogICAgIFB5X3NzaXplX3QgbiA9IFB5X1NJWkUoc2VsZik7CkBAIC0yNjYwLDE2ICsyMjcyLDE2IEBACiBBcHBlbmQgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBpdGVyYXRvciBvciBzZXF1ZW5jZSB0byB0aGVcblwKIGVuZCBvZiBCLiIpOwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2V4dGVuZChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK2J5dGVhcnJheV9leHRlbmQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCiB7Ci0gICAgUHlPYmplY3QgKml0LCAqaXRlbSwgKmJ5dGVzX29iajsKKyAgICBQeU9iamVjdCAqaXQsICppdGVtLCAqYnl0ZWFycmF5X29iajsKICAgICBQeV9zc2l6ZV90IGJ1Zl9zaXplID0gMCwgbGVuID0gMDsKICAgICBpbnQgdmFsdWU7CiAgICAgY2hhciAqYnVmOwogCi0gICAgLyogYnl0ZXNfc2V0c2xpY2UgY29kZSBvbmx5IGFjY2VwdHMgc29tZXRoaW5nIHN1cHBvcnRpbmcgUEVQIDMxMTguICovCisgICAgLyogYnl0ZWFycmF5X3NldHNsaWNlIGNvZGUgb25seSBhY2NlcHRzIHNvbWV0aGluZyBzdXBwb3J0aW5nIFBFUCAzMTE4LiAqLwogICAgIGlmIChQeU9iamVjdF9DaGVja0J1ZmZlcihhcmcpKSB7Ci0gICAgICAgIGlmIChieXRlc19zZXRzbGljZShzZWxmLCBQeV9TSVpFKHNlbGYpLCBQeV9TSVpFKHNlbGYpLCBhcmcpID09IC0xKQorICAgICAgICBpZiAoYnl0ZWFycmF5X3NldHNsaWNlKHNlbGYsIFB5X1NJWkUoc2VsZiksIFB5X1NJWkUoc2VsZiksIGFyZykgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTI2ODYsMTYgKzIyOTgsMTYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgYnl0ZXNfb2JqID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmX3NpemUpOwotICAgIGlmIChieXRlc19vYmogPT0gTlVMTCkKKyAgICBieXRlYXJyYXlfb2JqID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmX3NpemUpOworICAgIGlmIChieXRlYXJyYXlfb2JqID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhieXRlc19vYmopOworICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhieXRlYXJyYXlfb2JqKTsKIAogICAgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewogICAgICAgICBpZiAoISBfZ2V0Ynl0ZXZhbHVlKGl0ZW0sICZ2YWx1ZSkpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXNfb2JqKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlYXJyYXlfb2JqKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGJ1ZltsZW4rK10gPSB2YWx1ZTsKQEAgLTI3MDMsMjcgKzIzMTUsMjcgQEAKIAogICAgICAgICBpZiAobGVuID49IGJ1Zl9zaXplKSB7CiAgICAgICAgICAgICBidWZfc2l6ZSA9IGxlbiArIChsZW4gPj4gMSkgKyAxOwotICAgICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilieXRlc19vYmosIGJ1Zl9zaXplKSA8IDApIHsKKyAgICAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopYnl0ZWFycmF5X29iaiwgYnVmX3NpemUpIDwgMCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGJ5dGVzX29iaik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGJ5dGVhcnJheV9vYmopOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogUmVjb21wdXRlIHRoZSBgYnVmJyBwb2ludGVyLCBzaW5jZSB0aGUgcmVzaXppbmcgb3BlcmF0aW9uIG1heQogICAgICAgICAgICAgICAgaGF2ZSBpbnZhbGlkYXRlZCBpdC4gKi8KLSAgICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhieXRlc19vYmopOworICAgICAgICAgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGJ5dGVhcnJheV9vYmopOwogICAgICAgICB9CiAgICAgfQogICAgIFB5X0RFQ1JFRihpdCk7CiAKICAgICAvKiBSZXNpemUgZG93biB0byBleGFjdCBzaXplLiAqLwotICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopYnl0ZXNfb2JqLCBsZW4pIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoYnl0ZXNfb2JqKTsKKyAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKWJ5dGVhcnJheV9vYmosIGxlbikgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihieXRlYXJyYXlfb2JqKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKGJ5dGVzX3NldHNsaWNlKHNlbGYsIFB5X1NJWkUoc2VsZiksIFB5X1NJWkUoc2VsZiksIGJ5dGVzX29iaikgPT0gLTEpCisgICAgaWYgKGJ5dGVhcnJheV9zZXRzbGljZShzZWxmLCBQeV9TSVpFKHNlbGYpLCBQeV9TSVpFKHNlbGYpLCBieXRlYXJyYXlfb2JqKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfREVDUkVGKGJ5dGVzX29iaik7CisgICAgUHlfREVDUkVGKGJ5dGVhcnJheV9vYmopOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CkBAIC0yNzM0LDcgKzIzNDYsNyBAQAogUmVtb3ZlIGFuZCByZXR1cm4gYSBzaW5nbGUgaXRlbSBmcm9tIEIuIElmIG5vIGluZGV4XG5cCiBhcmd1bWVudCBpcyBnaXZlbiwgd2lsbCBwb3AgdGhlIGxhc3QgdmFsdWUuIik7CiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcG9wKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9wb3AoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGludCB2YWx1ZTsKICAgICBQeV9zc2l6ZV90IHdoZXJlID0gLTEsIG4gPSBQeV9TSVpFKHNlbGYpOwpAQCAtMjc0Myw4ICsyMzU1LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBwb3AgYW4gZW1wdHkgYnl0ZWFycmF5Iik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvcCBmcm9tIGVtcHR5IGJ5dGVhcnJheSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKHdoZXJlIDwgMCkKQEAgLTI3NjksNyArMjM4MSw3IEBACiBcblwKIFJlbW92ZSB0aGUgZmlyc3Qgb2NjdXJhbmNlIG9mIGEgdmFsdWUgaW4gQi4iKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yZW1vdmUoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCitieXRlYXJyYXlfcmVtb3ZlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewogICAgIGludCB2YWx1ZTsKICAgICBQeV9zc2l6ZV90IHdoZXJlLCBuID0gUHlfU0laRShzZWxmKTsKQEAgLTI4MjMsNyArMjQzNSw3IEBACiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50LlxuXAogSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIHN0cmlwIEFTQ0lJIHdoaXRlc3BhY2UuIik7CiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3N0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IGxlZnQsIHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7CiAgICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CkBAIC0yODU5LDcgKzI0NzEsNyBAQAogU3RyaXAgbGVhZGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50LlxuXAogSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIHN0cmlwIGxlYWRpbmcgQVNDSUkgd2hpdGVzcGFjZS4iKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19sc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X2xzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBsZWZ0LCByaWdodCwgbXlzaXplLCBhcmdzaXplOwogICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOwpAQCAtMjg5Miw3ICsyNTA0LDcgQEAKIFN0cmlwIHRyYWlsaW5nIGJ5dGVzIGNvbnRhaW5lZCBpbiB0aGUgYXJndW1lbnQuXG5cCiBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgc3RyaXAgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZS4iKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3JzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBsZWZ0LCByaWdodCwgbXlzaXplLCBhcmdzaXplOwogICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOwpAQCAtMjkzMCwxNSArMjU0MiwyMiBAQAogYWJsZSB0byBoYW5kbGUgVW5pY29kZURlY29kZUVycm9ycy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2RlY29kZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfZGVjb2RlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBjb25zdCBjaGFyICplbmNvZGluZyA9IE5VTEw7CiAgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8c3M6ZGVjb2RlIiwgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8c3M6ZGVjb2RlIiwga3dsaXN0LCAmZW5jb2RpbmcsICZlcnJvcnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkKKyAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkgeworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICAgICAgZW5jb2RpbmcgPSBQeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nKCk7CisjZWxzZQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm5vIGVuY29kaW5nIHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorICAgIH0KICAgICByZXR1cm4gUHlDb2RlY19EZWNvZGUoc2VsZiwgZW5jb2RpbmcsIGVycm9ycyk7CiB9CiAKQEAgLTI5NDgsNyArMjU2Nyw3IEBACiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgYWxsb2NhdGVkLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfYWxsb2MoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCitieXRlYXJyYXlfYWxsb2MoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCiB7CiAgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KHNlbGYtPm9iX2FsbG9jKTsKIH0KQEAgLTI5NTksNyArMjU3OCw3IEBACiBDb25jYXRlbmF0ZXMgYW55IG51bWJlciBvZiBieXRlYXJyYXkgb2JqZWN0cywgd2l0aCBCIGluIGJldHdlZW4gZWFjaCBwYWlyLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfam9pbihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0KQorYnl0ZWFycmF5X2pvaW4oUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppdCkKIHsKICAgICBQeU9iamVjdCAqc2VxOwogICAgIFB5X3NzaXplX3QgbXlzaXplID0gUHlfU0laRShzZWxmKTsKQEAgLTMwMjgsNiArMjY0NywyNyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitQeURvY19TVFJWQVIoc3BsaXRsaW5lc19fZG9jX18sCisiQi5zcGxpdGxpbmVzKFtrZWVwZW5kc10pIC0+IGxpc3Qgb2YgbGluZXNcblwKK1xuXAorUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gQiwgYnJlYWtpbmcgYXQgbGluZSBib3VuZGFyaWVzLlxuXAorTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3QgdW5sZXNzIGtlZXBlbmRzXG5cCitpcyBnaXZlbiBhbmQgdHJ1ZS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorYnl0ZWFycmF5X3NwbGl0bGluZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBrZWVwZW5kcyA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOnNwbGl0bGluZXMiLCAma2VlcGVuZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBzdHJpbmdsaWJfc3BsaXRsaW5lcygKKyAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLAorICAgICAgICBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSwga2VlcGVuZHMKKyAgICAgICAgKTsKK30KKwogUHlEb2NfU1RSVkFSKGZyb21oZXhfZG9jLAogImJ5dGVhcnJheS5mcm9taGV4KHN0cmluZykgLT4gYnl0ZWFycmF5XG5cCiBcblwKQEAgLTMwMzYsMTUgKzI2NzYsMTMgQEAKIEV4YW1wbGU6IGJ5dGVhcnJheS5mcm9taGV4KCdCOSAwMUVGJykgLT4gYnl0ZWFycmF5KGInXFx4YjlcXHgwMVxceGVmJykuIik7CiAKIHN0YXRpYyBpbnQKLWhleF9kaWdpdF90b19pbnQoUHlfVU5JQ09ERSBjKQoraGV4X2RpZ2l0X3RvX2ludChjaGFyIGMpCiB7Ci0gICAgaWYgKGMgPj0gMTI4KQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKElTRElHSVQoYykpCisgICAgaWYgKFB5X0lTRElHSVQoYykpCiAgICAgICAgIHJldHVybiBjIC0gJzAnOwogICAgIGVsc2UgewotICAgICAgICBpZiAoSVNVUFBFUihjKSkKLSAgICAgICAgICAgIGMgPSBUT0xPV0VSKGMpOworICAgICAgICBpZiAoUHlfSVNVUFBFUihjKSkKKyAgICAgICAgICAgIGMgPSBQeV9UT0xPV0VSKGMpOwogICAgICAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCiAgICAgICAgICAgICByZXR1cm4gYyAtICdhJyArIDEwOwogICAgIH0KQEAgLTMwNTIsMTkgKzI2OTAsMTYgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2Zyb21oZXgoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfZnJvbWhleChQeU9iamVjdCAqY2xzLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqbmV3Ynl0ZXMsICpoZXhvYmo7CisgICAgUHlPYmplY3QgKm5ld2J5dGVzOwogICAgIGNoYXIgKmJ1ZjsKLSAgICBQeV9VTklDT0RFICpoZXg7CisgICAgY2hhciAqaGV4OwogICAgIFB5X3NzaXplX3QgaGV4bGVuLCBieXRlc2xlbiwgaSwgajsKICAgICBpbnQgdG9wLCBib3Q7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6ZnJvbWhleCIsICZoZXhvYmopKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6ZnJvbWhleCIsICZoZXgsICZoZXhsZW4pKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKGhleG9iaikpOwotICAgIGhleGxlbiA9IFB5VW5pY29kZV9HRVRfU0laRShoZXhvYmopOwotICAgIGhleCA9IFB5VW5pY29kZV9BU19VTklDT0RFKGhleG9iaik7CiAgICAgYnl0ZXNsZW4gPSBoZXhsZW4vMjsgLyogVGhpcyBvdmVyZXN0aW1hdGVzIGlmIHRoZXJlIGFyZSBzcGFjZXMgKi8KICAgICBuZXdieXRlcyA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ5dGVzbGVuKTsKICAgICBpZiAoIW5ld2J5dGVzKQpAQCAtMzA5OCwxNCArMjczMywyMiBAQAogUHlEb2NfU1RSVkFSKHJlZHVjZV9kb2MsICJSZXR1cm4gc3RhdGUgaW5mb3JtYXRpb24gZm9yIHBpY2tsaW5nLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcmVkdWNlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKQorYnl0ZWFycmF5X3JlZHVjZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqbGF0aW4xLCAqZGljdDsKICAgICBpZiAoc2VsZi0+b2JfYnl0ZXMpCisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQogICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKHNlbGYtPm9iX2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZiksIE5VTEwpOworI2Vsc2UKKyAgICAgICAgbGF0aW4xID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+b2JfYnl0ZXMsIFB5X1NJWkUoc2VsZikpOworI2VuZGlmCiAgICAgZWxzZQorI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOworI2Vsc2UKKyAgICAgICAgbGF0aW4xID0gUHlTdHJpbmdfRnJvbVN0cmluZygiIik7CisjZW5kaWYKIAogICAgIGRpY3QgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKXNlbGYsICJfX2RpY3RfXyIpOwogICAgIGlmIChkaWN0ID09IE5VTEwpIHsKQEAgLTMxMjIsNyArMjc2NSw3IEBACiAgXG5cCiBSZXR1cm5zIHRoZSBzaXplIG9mIEIgaW4gbWVtb3J5LCBpbiBieXRlcyIpOwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3NpemVvZihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKK2J5dGVhcnJheV9zaXplb2YoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlfc3NpemVfdCByZXM7CiAKQEAgLTMxMzAsNTQgKzI3NzMsNTQgQEAKICAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3QocmVzKTsKIH0KIAotc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIGJ5dGVzX2FzX3NlcXVlbmNlID0gewotICAgIChsZW5mdW5jKWJ5dGVzX2xlbmd0aCwgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLworc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIGJ5dGVhcnJheV9hc19zZXF1ZW5jZSA9IHsKKyAgICAobGVuZnVuYylieXRlYXJyYXlfbGVuZ3RoLCAgICAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCiAgICAgKGJpbmFyeWZ1bmMpUHlCeXRlQXJyYXlfQ29uY2F0LCAgICAgICAgIC8qIHNxX2NvbmNhdCAqLwotICAgIChzc2l6ZWFyZ2Z1bmMpYnl0ZXNfcmVwZWF0LCAgICAgICAgIC8qIHNxX3JlcGVhdCAqLwotICAgIChzc2l6ZWFyZ2Z1bmMpYnl0ZXNfZ2V0aXRlbSwgICAgICAgIC8qIHNxX2l0ZW0gKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9zbGljZSAqLwotICAgIChzc2l6ZW9iamFyZ3Byb2MpYnl0ZXNfc2V0aXRlbSwgICAgIC8qIHNxX2Fzc19pdGVtICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfYXNzX3NsaWNlICovCi0gICAgKG9iam9ianByb2MpYnl0ZXNfY29udGFpbnMsICAgICAgICAgLyogc3FfY29udGFpbnMgKi8KLSAgICAoYmluYXJ5ZnVuYylieXRlc19pY29uY2F0LCAgICAgICAgICAvKiBzcV9pbnBsYWNlX2NvbmNhdCAqLwotICAgIChzc2l6ZWFyZ2Z1bmMpYnl0ZXNfaXJlcGVhdCwgICAgICAgIC8qIHNxX2lucGxhY2VfcmVwZWF0ICovCisgICAgKHNzaXplYXJnZnVuYylieXRlYXJyYXlfcmVwZWF0LCAgICAgICAgIC8qIHNxX3JlcGVhdCAqLworICAgIChzc2l6ZWFyZ2Z1bmMpYnl0ZWFycmF5X2dldGl0ZW0sICAgICAgICAvKiBzcV9pdGVtICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3NsaWNlICovCisgICAgKHNzaXplb2JqYXJncHJvYylieXRlYXJyYXlfc2V0aXRlbSwgICAgIC8qIHNxX2Fzc19pdGVtICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2Fzc19zbGljZSAqLworICAgIChvYmpvYmpwcm9jKWJ5dGVhcnJheV9jb250YWlucywgICAgICAgICAvKiBzcV9jb250YWlucyAqLworICAgIChiaW5hcnlmdW5jKWJ5dGVhcnJheV9pY29uY2F0LCAgICAgICAgICAvKiBzcV9pbnBsYWNlX2NvbmNhdCAqLworICAgIChzc2l6ZWFyZ2Z1bmMpYnl0ZWFycmF5X2lyZXBlYXQsICAgICAgICAvKiBzcV9pbnBsYWNlX3JlcGVhdCAqLwogfTsKIAotc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgYnl0ZXNfYXNfbWFwcGluZyA9IHsKLSAgICAobGVuZnVuYylieXRlc19sZW5ndGgsCi0gICAgKGJpbmFyeWZ1bmMpYnl0ZXNfc3Vic2NyaXB0LAotICAgIChvYmpvYmphcmdwcm9jKWJ5dGVzX2Fzc19zdWJzY3JpcHQsCitzdGF0aWMgUHlNYXBwaW5nTWV0aG9kcyBieXRlYXJyYXlfYXNfbWFwcGluZyA9IHsKKyAgICAobGVuZnVuYylieXRlYXJyYXlfbGVuZ3RoLAorICAgIChiaW5hcnlmdW5jKWJ5dGVhcnJheV9zdWJzY3JpcHQsCisgICAgKG9iam9iamFyZ3Byb2MpYnl0ZWFycmF5X2Fzc19zdWJzY3JpcHQsCiB9OwogCi1zdGF0aWMgUHlCdWZmZXJQcm9jcyBieXRlc19hc19idWZmZXIgPSB7Ci0gICAgKHJlYWRidWZmZXJwcm9jKWJ5dGVzX2J1ZmZlcl9nZXRyZWFkYnVmLAotICAgICh3cml0ZWJ1ZmZlcnByb2MpYnl0ZXNfYnVmZmVyX2dldHdyaXRlYnVmLAotICAgIChzZWdjb3VudHByb2MpYnl0ZXNfYnVmZmVyX2dldHNlZ2NvdW50LAotICAgIChjaGFyYnVmZmVycHJvYylieXRlc19idWZmZXJfZ2V0Y2hhcmJ1ZiwKLSAgICAoZ2V0YnVmZmVycHJvYylieXRlc19nZXRidWZmZXIsCi0gICAgKHJlbGVhc2VidWZmZXJwcm9jKWJ5dGVzX3JlbGVhc2VidWZmZXIsCitzdGF0aWMgUHlCdWZmZXJQcm9jcyBieXRlYXJyYXlfYXNfYnVmZmVyID0geworICAgIChyZWFkYnVmZmVycHJvYylieXRlYXJyYXlfYnVmZmVyX2dldHJlYWRidWYsCisgICAgKHdyaXRlYnVmZmVycHJvYylieXRlYXJyYXlfYnVmZmVyX2dldHdyaXRlYnVmLAorICAgIChzZWdjb3VudHByb2MpYnl0ZWFycmF5X2J1ZmZlcl9nZXRzZWdjb3VudCwKKyAgICAoY2hhcmJ1ZmZlcnByb2MpYnl0ZWFycmF5X2J1ZmZlcl9nZXRjaGFyYnVmLAorICAgIChnZXRidWZmZXJwcm9jKWJ5dGVhcnJheV9nZXRidWZmZXIsCisgICAgKHJlbGVhc2VidWZmZXJwcm9jKWJ5dGVhcnJheV9yZWxlYXNlYnVmZmVyLAogfTsKIAogc3RhdGljIFB5TWV0aG9kRGVmCi1ieXRlc19tZXRob2RzW10gPSB7Ci0gICAgeyJfX2FsbG9jX18iLCAoUHlDRnVuY3Rpb24pYnl0ZXNfYWxsb2MsIE1FVEhfTk9BUkdTLCBhbGxvY19kb2N9LAotICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilieXRlc19yZWR1Y2UsIE1FVEhfTk9BUkdTLCByZWR1Y2VfZG9jfSwKLSAgICB7Il9fc2l6ZW9mX18iLCAoUHlDRnVuY3Rpb24pYnl0ZXNfc2l6ZW9mLCBNRVRIX05PQVJHUywgc2l6ZW9mX2RvY30sCi0gICAgeyJhcHBlbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfYXBwZW5kLCBNRVRIX08sIGFwcGVuZF9fZG9jX199LAorYnl0ZWFycmF5X21ldGhvZHNbXSA9IHsKKyAgICB7Il9fYWxsb2NfXyIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfYWxsb2MsIE1FVEhfTk9BUkdTLCBhbGxvY19kb2N9LAorICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcmVkdWNlLCBNRVRIX05PQVJHUywgcmVkdWNlX2RvY30sCisgICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9zaXplb2YsIE1FVEhfTk9BUkdTLCBzaXplb2ZfZG9jfSwKKyAgICB7ImFwcGVuZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfYXBwZW5kLCBNRVRIX08sIGFwcGVuZF9fZG9jX199LAogICAgIHsiY2FwaXRhbGl6ZSIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfY2FwaXRhbGl6ZSwgTUVUSF9OT0FSR1MsCiAgICAgIF9QeV9jYXBpdGFsaXplX19kb2NfX30sCiAgICAgeyJjZW50ZXIiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2NlbnRlciwgTUVUSF9WQVJBUkdTLCBjZW50ZXJfX2RvY19ffSwKLSAgICB7ImNvdW50IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2NvdW50LCBNRVRIX1ZBUkFSR1MsIGNvdW50X19kb2NfX30sCi0gICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZGVjb2RlLCBNRVRIX1ZBUkFSR1MsIGRlY29kZV9kb2N9LAotICAgIHsiZW5kc3dpdGgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZW5kc3dpdGgsIE1FVEhfVkFSQVJHUywgZW5kc3dpdGhfX2RvY19ffSwKKyAgICB7ImNvdW50IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9jb3VudCwgTUVUSF9WQVJBUkdTLCBjb3VudF9fZG9jX199LAorICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9kZWNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGRlY29kZV9kb2N9LAorICAgIHsiZW5kc3dpdGgiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2VuZHN3aXRoLCBNRVRIX1ZBUkFSR1MsIGVuZHN3aXRoX19kb2NfX30sCiAgICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MsCiAgICAgIGV4cGFuZHRhYnNfX2RvY19ffSwKLSAgICB7ImV4dGVuZCIsIChQeUNGdW5jdGlvbilieXRlc19leHRlbmQsIE1FVEhfTywgZXh0ZW5kX19kb2NfX30sCi0gICAgeyJmaW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2ZpbmQsIE1FVEhfVkFSQVJHUywgZmluZF9fZG9jX199LAotICAgIHsiZnJvbWhleCIsIChQeUNGdW5jdGlvbilieXRlc19mcm9taGV4LCBNRVRIX1ZBUkFSR1N8TUVUSF9DTEFTUywKKyAgICB7ImV4dGVuZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZXh0ZW5kLCBNRVRIX08sIGV4dGVuZF9fZG9jX199LAorICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZmluZCwgTUVUSF9WQVJBUkdTLCBmaW5kX19kb2NfX30sCisgICAgeyJmcm9taGV4IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9mcm9taGV4LCBNRVRIX1ZBUkFSR1N8TUVUSF9DTEFTUywKICAgICAgZnJvbWhleF9kb2N9LAotICAgIHsiaW5kZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfaW5kZXgsIE1FVEhfVkFSQVJHUywgaW5kZXhfX2RvY19ffSwKLSAgICB7Imluc2VydCIsIChQeUNGdW5jdGlvbilieXRlc19pbnNlcnQsIE1FVEhfVkFSQVJHUywgaW5zZXJ0X19kb2NfX30sCisgICAgeyJpbmRleCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfaW5kZXgsIE1FVEhfVkFSQVJHUywgaW5kZXhfX2RvY19ffSwKKyAgICB7Imluc2VydCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfaW5zZXJ0LCBNRVRIX1ZBUkFSR1MsIGluc2VydF9fZG9jX199LAogICAgIHsiaXNhbG51bSIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfaXNhbG51bSwgTUVUSF9OT0FSR1MsCiAgICAgIF9QeV9pc2FsbnVtX19kb2NfX30sCiAgICAgeyJpc2FscGhhIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9pc2FscGhhLCBNRVRIX05PQVJHUywKQEAgLTMxOTIsMzggKzI4MzUsMzggQEAKICAgICAgX1B5X2lzdGl0bGVfX2RvY19ffSwKICAgICB7ImlzdXBwZXIiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2lzdXBwZXIsIE1FVEhfTk9BUkdTLAogICAgICBfUHlfaXN1cHBlcl9fZG9jX199LAotICAgIHsiam9pbiIsIChQeUNGdW5jdGlvbilieXRlc19qb2luLCBNRVRIX08sIGpvaW5fZG9jfSwKKyAgICB7ImpvaW4iLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2pvaW4sIE1FVEhfTywgam9pbl9kb2N9LAogICAgIHsibGp1c3QiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2xqdXN0LCBNRVRIX1ZBUkFSR1MsIGxqdXN0X19kb2NfX30sCiAgICAgeyJsb3dlciIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfbG93ZXIsIE1FVEhfTk9BUkdTLCBfUHlfbG93ZXJfX2RvY19ffSwKLSAgICB7ImxzdHJpcCIsIChQeUNGdW5jdGlvbilieXRlc19sc3RyaXAsIE1FVEhfVkFSQVJHUywgbHN0cmlwX19kb2NfX30sCi0gICAgeyJwYXJ0aXRpb24iLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcGFydGl0aW9uLCBNRVRIX08sIHBhcnRpdGlvbl9fZG9jX199LAotICAgIHsicG9wIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3BvcCwgTUVUSF9WQVJBUkdTLCBwb3BfX2RvY19ffSwKLSAgICB7InJlbW92ZSIsIChQeUNGdW5jdGlvbilieXRlc19yZW1vdmUsIE1FVEhfTywgcmVtb3ZlX19kb2NfX30sCi0gICAgeyJyZXBsYWNlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JlcGxhY2UsIE1FVEhfVkFSQVJHUywgcmVwbGFjZV9fZG9jX199LAotICAgIHsicmV2ZXJzZSIsIChQeUNGdW5jdGlvbilieXRlc19yZXZlcnNlLCBNRVRIX05PQVJHUywgcmV2ZXJzZV9fZG9jX199LAotICAgIHsicmZpbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcmZpbmQsIE1FVEhfVkFSQVJHUywgcmZpbmRfX2RvY19ffSwKLSAgICB7InJpbmRleCIsIChQeUNGdW5jdGlvbilieXRlc19yaW5kZXgsIE1FVEhfVkFSQVJHUywgcmluZGV4X19kb2NfX30sCisgICAgeyJsc3RyaXAiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2xzdHJpcCwgTUVUSF9WQVJBUkdTLCBsc3RyaXBfX2RvY19ffSwKKyAgICB7InBhcnRpdGlvbiIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcGFydGl0aW9uLCBNRVRIX08sIHBhcnRpdGlvbl9fZG9jX199LAorICAgIHsicG9wIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9wb3AsIE1FVEhfVkFSQVJHUywgcG9wX19kb2NfX30sCisgICAgeyJyZW1vdmUiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3JlbW92ZSwgTUVUSF9PLCByZW1vdmVfX2RvY19ffSwKKyAgICB7InJlcGxhY2UiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3JlcGxhY2UsIE1FVEhfVkFSQVJHUywgcmVwbGFjZV9fZG9jX199LAorICAgIHsicmV2ZXJzZSIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcmV2ZXJzZSwgTUVUSF9OT0FSR1MsIHJldmVyc2VfX2RvY19ffSwKKyAgICB7InJmaW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yZmluZCwgTUVUSF9WQVJBUkdTLCByZmluZF9fZG9jX199LAorICAgIHsicmluZGV4IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yaW5kZXgsIE1FVEhfVkFSQVJHUywgcmluZGV4X19kb2NfX30sCiAgICAgeyJyanVzdCIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfcmp1c3QsIE1FVEhfVkFSQVJHUywgcmp1c3RfX2RvY19ffSwKLSAgICB7InJwYXJ0aXRpb24iLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcnBhcnRpdGlvbiwgTUVUSF9PLCBycGFydGl0aW9uX19kb2NfX30sCi0gICAgeyJyc3BsaXQiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcnNwbGl0LCBNRVRIX1ZBUkFSR1MsIHJzcGxpdF9fZG9jX199LAotICAgIHsicnN0cmlwIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JzdHJpcCwgTUVUSF9WQVJBUkdTLCByc3RyaXBfX2RvY19ffSwKLSAgICB7InNwbGl0IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3NwbGl0LCBNRVRIX1ZBUkFSR1MsIHNwbGl0X19kb2NfX30sCi0gICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9zcGxpdGxpbmVzLCBNRVRIX1ZBUkFSR1MsCisgICAgeyJycGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9ycGFydGl0aW9uLCBNRVRIX08sIHJwYXJ0aXRpb25fX2RvY19ffSwKKyAgICB7InJzcGxpdCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcnNwbGl0LCBNRVRIX1ZBUkFSR1MsIHJzcGxpdF9fZG9jX199LAorICAgIHsicnN0cmlwIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yc3RyaXAsIE1FVEhfVkFSQVJHUywgcnN0cmlwX19kb2NfX30sCisgICAgeyJzcGxpdCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfc3BsaXQsIE1FVEhfVkFSQVJHUywgc3BsaXRfX2RvY19ffSwKKyAgICB7InNwbGl0bGluZXMiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3NwbGl0bGluZXMsIE1FVEhfVkFSQVJHUywKICAgICAgc3BsaXRsaW5lc19fZG9jX199LAotICAgIHsic3RhcnRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlc19zdGFydHN3aXRoLCBNRVRIX1ZBUkFSR1MgLAorICAgIHsic3RhcnRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfc3RhcnRzd2l0aCwgTUVUSF9WQVJBUkdTICwKICAgICAgc3RhcnRzd2l0aF9fZG9jX199LAotICAgIHsic3RyaXAiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfc3RyaXAsIE1FVEhfVkFSQVJHUywgc3RyaXBfX2RvY19ffSwKKyAgICB7InN0cmlwIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9zdHJpcCwgTUVUSF9WQVJBUkdTLCBzdHJpcF9fZG9jX199LAogICAgIHsic3dhcGNhc2UiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3N3YXBjYXNlLCBNRVRIX05PQVJHUywKICAgICAgX1B5X3N3YXBjYXNlX19kb2NfX30sCiAgICAgeyJ0aXRsZSIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfdGl0bGUsIE1FVEhfTk9BUkdTLCBfUHlfdGl0bGVfX2RvY19ffSwKLSAgICB7InRyYW5zbGF0ZSIsIChQeUNGdW5jdGlvbilieXRlc190cmFuc2xhdGUsIE1FVEhfVkFSQVJHUywKKyAgICB7InRyYW5zbGF0ZSIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfdHJhbnNsYXRlLCBNRVRIX1ZBUkFSR1MsCiAgICAgIHRyYW5zbGF0ZV9fZG9jX199LAogICAgIHsidXBwZXIiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3VwcGVyLCBNRVRIX05PQVJHUywgX1B5X3VwcGVyX19kb2NfX30sCiAgICAgeyJ6ZmlsbCIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfemZpbGwsIE1FVEhfVkFSQVJHUywgemZpbGxfX2RvY19ffSwKICAgICB7TlVMTH0KIH07CiAKLVB5RG9jX1NUUlZBUihieXRlc19kb2MsCitQeURvY19TVFJWQVIoYnl0ZWFycmF5X2RvYywKICJieXRlYXJyYXkoaXRlcmFibGVfb2ZfaW50cykgLT4gYnl0ZWFycmF5LlxuXAogYnl0ZWFycmF5KHN0cmluZywgZW5jb2RpbmdbLCBlcnJvcnNdKSAtPiBieXRlYXJyYXkuXG5cCiBieXRlYXJyYXkoYnl0ZXNfb3JfYnl0ZWFycmF5KSAtPiBtdXRhYmxlIGNvcHkgb2YgYnl0ZXNfb3JfYnl0ZWFycmF5LlxuXApAQCAtMzI0MCwzOCArMjg4MywzOCBAQAogQ29uc3RydWN0IGEgemVyby1pbml0aWFsaXplZCBieXRlYXJyYXkgb2YgdGhlIGdpdmVuIGxlbmd0aC4iKTsKIAogCi1zdGF0aWMgUHlPYmplY3QgKmJ5dGVzX2l0ZXIoUHlPYmplY3QgKnNlcSk7CitzdGF0aWMgUHlPYmplY3QgKmJ5dGVhcnJheV9pdGVyKFB5T2JqZWN0ICpzZXEpOwogCiBQeVR5cGVPYmplY3QgUHlCeXRlQXJyYXlfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICJieXRlYXJyYXkiLAogICAgIHNpemVvZihQeUJ5dGVBcnJheU9iamVjdCksCiAgICAgMCwKLSAgICAoZGVzdHJ1Y3RvcilieXRlc19kZWFsbG9jLCAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgKGRlc3RydWN0b3IpYnl0ZWFycmF5X2RlYWxsb2MsICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLwotICAgIChyZXByZnVuYylieXRlc19yZXByLCAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpYnl0ZWFycmF5X3JlcHIsICAgICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCi0gICAgJmJ5dGVzX2FzX3NlcXVlbmNlLCAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KLSAgICAmYnl0ZXNfYXNfbWFwcGluZywgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgJmJ5dGVhcnJheV9hc19zZXF1ZW5jZSwgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAmYnl0ZWFycmF5X2FzX21hcHBpbmcsICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KLSAgICBieXRlc19zdHIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBieXRlYXJyYXlfc3RyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCi0gICAgJmJ5dGVzX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgJmJ5dGVhcnJheV9hc19idWZmZXIsICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8CiAgICAgUHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUiwgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KLSAgICBieXRlc19kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBieXRlYXJyYXlfZG9jLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCi0gICAgKHJpY2hjbXBmdW5jKWJ5dGVzX3JpY2hjb21wYXJlLCAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAocmljaGNtcGZ1bmMpYnl0ZWFycmF5X3JpY2hjb21wYXJlLCAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCi0gICAgYnl0ZXNfaXRlciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIGJ5dGVhcnJheV9pdGVyLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIGJ5dGVzX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBieXRlYXJyYXlfbWV0aG9kcywgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTMyNzksNyArMjkyMiw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgIChpbml0cHJvYylieXRlc19pbml0LCAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAoaW5pdHByb2MpYnl0ZWFycmF5X2luaXQsICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICBQeU9iamVjdF9EZWwsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCkBAIC0zMjk0LDcgKzI5MzcsNyBAQAogfSBieXRlc2l0ZXJvYmplY3Q7CiAKIHN0YXRpYyB2b2lkCi1ieXRlc2l0ZXJfZGVhbGxvYyhieXRlc2l0ZXJvYmplY3QgKml0KQorYnl0ZWFycmF5aXRlcl9kZWFsbG9jKGJ5dGVzaXRlcm9iamVjdCAqaXQpCiB7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soaXQpOwogICAgIFB5X1hERUNSRUYoaXQtPml0X3NlcSk7CkBAIC0zMzAyLDE0ICsyOTQ1LDE0IEBACiB9CiAKIHN0YXRpYyBpbnQKLWJ5dGVzaXRlcl90cmF2ZXJzZShieXRlc2l0ZXJvYmplY3QgKml0LCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK2J5dGVhcnJheWl0ZXJfdHJhdmVyc2UoYnl0ZXNpdGVyb2JqZWN0ICppdCwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CiAgICAgUHlfVklTSVQoaXQtPml0X3NlcSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2l0ZXJfbmV4dChieXRlc2l0ZXJvYmplY3QgKml0KQorYnl0ZWFycmF5aXRlcl9uZXh0KGJ5dGVzaXRlcm9iamVjdCAqaXQpCiB7CiAgICAgUHlCeXRlQXJyYXlPYmplY3QgKnNlcTsKICAgICBQeU9iamVjdCAqaXRlbTsKQEAgLTMzMzQsNyArMjk3Nyw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2l0ZXJfbGVuZ3RoX2hpbnQoYnl0ZXNpdGVyb2JqZWN0ICppdCkKK2J5dGVzYXJyYXlpdGVyX2xlbmd0aF9oaW50KGJ5dGVzaXRlcm9iamVjdCAqaXQpCiB7CiAgICAgUHlfc3NpemVfdCBsZW4gPSAwOwogICAgIGlmIChpdC0+aXRfc2VxKQpAQCAtMzM0NSw4ICsyOTg4LDggQEAKIFB5RG9jX1NUUlZBUihsZW5ndGhfaGludF9kb2MsCiAgICAgIlByaXZhdGUgbWV0aG9kIHJldHVybmluZyBhbiBlc3RpbWF0ZSBvZiBsZW4obGlzdChpdCkpLiIpOwogCi1zdGF0aWMgUHlNZXRob2REZWYgYnl0ZXNpdGVyX21ldGhvZHNbXSA9IHsKLSAgICB7Il9fbGVuZ3RoX2hpbnRfXyIsIChQeUNGdW5jdGlvbilieXRlc2l0ZXJfbGVuZ3RoX2hpbnQsIE1FVEhfTk9BUkdTLAorc3RhdGljIFB5TWV0aG9kRGVmIGJ5dGVhcnJheWl0ZXJfbWV0aG9kc1tdID0geworICAgIHsiX19sZW5ndGhfaGludF9fIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzYXJyYXlpdGVyX2xlbmd0aF9oaW50LCBNRVRIX05PQVJHUywKICAgICAgbGVuZ3RoX2hpbnRfZG9jfSwKICAgICB7TlVMTCwgTlVMTH0gLyogc2VudGluZWwgKi8KIH07CkBAIC0zMzU3LDcgKzMwMDAsNyBAQAogICAgIHNpemVvZihieXRlc2l0ZXJvYmplY3QpLCAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwogICAgIC8qIG1ldGhvZHMgKi8KLSAgICAoZGVzdHJ1Y3RvcilieXRlc2l0ZXJfZGVhbGxvYywgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAoZGVzdHJ1Y3RvcilieXRlYXJyYXlpdGVyX2RlYWxsb2MsIC8qIHRwX2RlYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCkBAIC0zMzc0LDE4ICszMDE3LDE4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qIHRwX2ZsYWdzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAodHJhdmVyc2Vwcm9jKWJ5dGVzaXRlcl90cmF2ZXJzZSwgIC8qIHRwX3RyYXZlcnNlICovCisgICAgKHRyYXZlcnNlcHJvYylieXRlYXJyYXlpdGVyX3RyYXZlcnNlLCAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICBQeU9iamVjdF9TZWxmSXRlciwgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KLSAgICAoaXRlcm5leHRmdW5jKWJ5dGVzaXRlcl9uZXh0LCAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgYnl0ZXNpdGVyX21ldGhvZHMsICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgKGl0ZXJuZXh0ZnVuYylieXRlYXJyYXlpdGVyX25leHQsICAvKiB0cF9pdGVybmV4dCAqLworICAgIGJ5dGVhcnJheWl0ZXJfbWV0aG9kcywgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsCiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfaXRlcihQeU9iamVjdCAqc2VxKQorYnl0ZWFycmF5X2l0ZXIoUHlPYmplY3QgKnNlcSkKIHsKICAgICBieXRlc2l0ZXJvYmplY3QgKml0OwogCmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVzX21ldGhvZHMuYyBiL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCmluZGV4IDhjZTA4NTYuLjE0MDZhYzEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCisrKyBiL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCkBAIC0xLDIxOSArMSw2IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAiYnl0ZXNfbWV0aG9kcy5oIgogCi0vKiBPdXIgb3duIGxvY2FsZS1pbmRlcGVuZGVudCBjdHlwZS5oLWxpa2UgbWFjcm9zICovCi0KLWNvbnN0IHVuc2lnbmVkIGludCBfUHlfY3R5cGVfdGFibGVbMjU2XSA9IHsKLSAgICAwLCAvKiAweDAgJ1x4MDAnICovCi0gICAgMCwgLyogMHgxICdceDAxJyAqLwotICAgIDAsIC8qIDB4MiAnXHgwMicgKi8KLSAgICAwLCAvKiAweDMgJ1x4MDMnICovCi0gICAgMCwgLyogMHg0ICdceDA0JyAqLwotICAgIDAsIC8qIDB4NSAnXHgwNScgKi8KLSAgICAwLCAvKiAweDYgJ1x4MDYnICovCi0gICAgMCwgLyogMHg3ICdceDA3JyAqLwotICAgIDAsIC8qIDB4OCAnXHgwOCcgKi8KLSAgICBGTEFHX1NQQUNFLCAvKiAweDkgJ1x0JyAqLwotICAgIEZMQUdfU1BBQ0UsIC8qIDB4YSAnXG4nICovCi0gICAgRkxBR19TUEFDRSwgLyogMHhiICdcdicgKi8KLSAgICBGTEFHX1NQQUNFLCAvKiAweGMgJ1xmJyAqLwotICAgIEZMQUdfU1BBQ0UsIC8qIDB4ZCAnXHInICovCi0gICAgMCwgLyogMHhlICdceDBlJyAqLwotICAgIDAsIC8qIDB4ZiAnXHgwZicgKi8KLSAgICAwLCAvKiAweDEwICdceDEwJyAqLwotICAgIDAsIC8qIDB4MTEgJ1x4MTEnICovCi0gICAgMCwgLyogMHgxMiAnXHgxMicgKi8KLSAgICAwLCAvKiAweDEzICdceDEzJyAqLwotICAgIDAsIC8qIDB4MTQgJ1x4MTQnICovCi0gICAgMCwgLyogMHgxNSAnXHgxNScgKi8KLSAgICAwLCAvKiAweDE2ICdceDE2JyAqLwotICAgIDAsIC8qIDB4MTcgJ1x4MTcnICovCi0gICAgMCwgLyogMHgxOCAnXHgxOCcgKi8KLSAgICAwLCAvKiAweDE5ICdceDE5JyAqLwotICAgIDAsIC8qIDB4MWEgJ1x4MWEnICovCi0gICAgMCwgLyogMHgxYiAnXHgxYicgKi8KLSAgICAwLCAvKiAweDFjICdceDFjJyAqLwotICAgIDAsIC8qIDB4MWQgJ1x4MWQnICovCi0gICAgMCwgLyogMHgxZSAnXHgxZScgKi8KLSAgICAwLCAvKiAweDFmICdceDFmJyAqLwotICAgIEZMQUdfU1BBQ0UsIC8qIDB4MjAgJyAnICovCi0gICAgMCwgLyogMHgyMSAnIScgKi8KLSAgICAwLCAvKiAweDIyICciJyAqLwotICAgIDAsIC8qIDB4MjMgJyMnICovCi0gICAgMCwgLyogMHgyNCAnJCcgKi8KLSAgICAwLCAvKiAweDI1ICclJyAqLwotICAgIDAsIC8qIDB4MjYgJyYnICovCi0gICAgMCwgLyogMHgyNyAiJyIgKi8KLSAgICAwLCAvKiAweDI4ICcoJyAqLwotICAgIDAsIC8qIDB4MjkgJyknICovCi0gICAgMCwgLyogMHgyYSAnKicgKi8KLSAgICAwLCAvKiAweDJiICcrJyAqLwotICAgIDAsIC8qIDB4MmMgJywnICovCi0gICAgMCwgLyogMHgyZCAnLScgKi8KLSAgICAwLCAvKiAweDJlICcuJyAqLwotICAgIDAsIC8qIDB4MmYgJy8nICovCi0gICAgRkxBR19ESUdJVHxGTEFHX1hESUdJVCwgLyogMHgzMCAnMCcgKi8KLSAgICBGTEFHX0RJR0lUfEZMQUdfWERJR0lULCAvKiAweDMxICcxJyAqLwotICAgIEZMQUdfRElHSVR8RkxBR19YRElHSVQsIC8qIDB4MzIgJzInICovCi0gICAgRkxBR19ESUdJVHxGTEFHX1hESUdJVCwgLyogMHgzMyAnMycgKi8KLSAgICBGTEFHX0RJR0lUfEZMQUdfWERJR0lULCAvKiAweDM0ICc0JyAqLwotICAgIEZMQUdfRElHSVR8RkxBR19YRElHSVQsIC8qIDB4MzUgJzUnICovCi0gICAgRkxBR19ESUdJVHxGTEFHX1hESUdJVCwgLyogMHgzNiAnNicgKi8KLSAgICBGTEFHX0RJR0lUfEZMQUdfWERJR0lULCAvKiAweDM3ICc3JyAqLwotICAgIEZMQUdfRElHSVR8RkxBR19YRElHSVQsIC8qIDB4MzggJzgnICovCi0gICAgRkxBR19ESUdJVHxGTEFHX1hESUdJVCwgLyogMHgzOSAnOScgKi8KLSAgICAwLCAvKiAweDNhICc6JyAqLwotICAgIDAsIC8qIDB4M2IgJzsnICovCi0gICAgMCwgLyogMHgzYyAnPCcgKi8KLSAgICAwLCAvKiAweDNkICc9JyAqLwotICAgIDAsIC8qIDB4M2UgJz4nICovCi0gICAgMCwgLyogMHgzZiAnPycgKi8KLSAgICAwLCAvKiAweDQwICdAJyAqLwotICAgIEZMQUdfVVBQRVJ8RkxBR19YRElHSVQsIC8qIDB4NDEgJ0EnICovCi0gICAgRkxBR19VUFBFUnxGTEFHX1hESUdJVCwgLyogMHg0MiAnQicgKi8KLSAgICBGTEFHX1VQUEVSfEZMQUdfWERJR0lULCAvKiAweDQzICdDJyAqLwotICAgIEZMQUdfVVBQRVJ8RkxBR19YRElHSVQsIC8qIDB4NDQgJ0QnICovCi0gICAgRkxBR19VUFBFUnxGTEFHX1hESUdJVCwgLyogMHg0NSAnRScgKi8KLSAgICBGTEFHX1VQUEVSfEZMQUdfWERJR0lULCAvKiAweDQ2ICdGJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NDcgJ0cnICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg0OCAnSCcgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDQ5ICdJJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NGEgJ0onICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg0YiAnSycgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDRjICdMJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NGQgJ00nICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg0ZSAnTicgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDRmICdPJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NTAgJ1AnICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg1MSAnUScgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDUyICdSJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NTMgJ1MnICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg1NCAnVCcgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDU1ICdVJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NTYgJ1YnICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg1NyAnVycgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDU4ICdYJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NTkgJ1knICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg1YSAnWicgKi8KLSAgICAwLCAvKiAweDViICdbJyAqLwotICAgIDAsIC8qIDB4NWMgJ1xcJyAqLwotICAgIDAsIC8qIDB4NWQgJ10nICovCi0gICAgMCwgLyogMHg1ZSAnXicgKi8KLSAgICAwLCAvKiAweDVmICdfJyAqLwotICAgIDAsIC8qIDB4NjAgJ2AnICovCi0gICAgRkxBR19MT1dFUnxGTEFHX1hESUdJVCwgLyogMHg2MSAnYScgKi8KLSAgICBGTEFHX0xPV0VSfEZMQUdfWERJR0lULCAvKiAweDYyICdiJyAqLwotICAgIEZMQUdfTE9XRVJ8RkxBR19YRElHSVQsIC8qIDB4NjMgJ2MnICovCi0gICAgRkxBR19MT1dFUnxGTEFHX1hESUdJVCwgLyogMHg2NCAnZCcgKi8KLSAgICBGTEFHX0xPV0VSfEZMQUdfWERJR0lULCAvKiAweDY1ICdlJyAqLwotICAgIEZMQUdfTE9XRVJ8RkxBR19YRElHSVQsIC8qIDB4NjYgJ2YnICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg2NyAnZycgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDY4ICdoJyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NjkgJ2knICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg2YSAnaicgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDZiICdrJyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NmMgJ2wnICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg2ZCAnbScgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDZlICduJyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NmYgJ28nICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg3MCAncCcgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDcxICdxJyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NzIgJ3InICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg3MyAncycgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDc0ICd0JyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NzUgJ3UnICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg3NiAndicgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDc3ICd3JyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NzggJ3gnICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg3OSAneScgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDdhICd6JyAqLwotICAgIDAsIC8qIDB4N2IgJ3snICovCi0gICAgMCwgLyogMHg3YyAnfCcgKi8KLSAgICAwLCAvKiAweDdkICd9JyAqLwotICAgIDAsIC8qIDB4N2UgJ34nICovCi0gICAgMCwgLyogMHg3ZiAnXHg3ZicgKi8KLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi19OwotCi0KLWNvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X2N0eXBlX3RvbG93ZXJbMjU2XSA9IHsKLSAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0gICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLSAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAotICAgIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsCi0gICAgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKLSAgICAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotICAgIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCi0gICAgMHg0MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLSAgICAweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAotICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCi0gICAgMHg3OCwgMHg3OSwgMHg3YSwgMHg1YiwgMHg1YywgMHg1ZCwgMHg1ZSwgMHg1ZiwKLSAgICAweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotICAgIDB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsCi0gICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywKLSAgICAweDc4LCAweDc5LCAweDdhLCAweDdiLCAweDdjLCAweDdkLCAweDdlLCAweDdmLAotICAgIDB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCi0gICAgMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKLSAgICAweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAotICAgIDB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCi0gICAgMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywKLSAgICAweGE4LCAweGE5LCAweGFhLCAweGFiLCAweGFjLCAweGFkLCAweGFlLCAweGFmLAotICAgIDB4YjAsIDB4YjEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsCi0gICAgMHhiOCwgMHhiOSwgMHhiYSwgMHhiYiwgMHhiYywgMHhiZCwgMHhiZSwgMHhiZiwKLSAgICAweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAotICAgIDB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsCi0gICAgMHhkMCwgMHhkMSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywKLSAgICAweGQ4LCAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLAotICAgIDB4ZTAsIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsCi0gICAgMHhlOCwgMHhlOSwgMHhlYSwgMHhlYiwgMHhlYywgMHhlZCwgMHhlZSwgMHhlZiwKLSAgICAweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAotICAgIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQsIDB4ZmUsIDB4ZmYsCi19OwotCi1jb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9jdHlwZV90b3VwcGVyWzI1Nl0gPSB7Ci0gICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0gICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKLSAgICAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAotICAgIDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCi0gICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLSAgICAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAotICAgIDB4NDAsIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsCi0gICAgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwKLSAgICAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LAotICAgIDB4NTgsIDB4NTksIDB4NWEsIDB4NWIsIDB4NWMsIDB4NWQsIDB4NWUsIDB4NWYsCi0gICAgMHg2MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywKLSAgICAweDQ4LCAweDQ5LCAweDRhLCAweDRiLCAweDRjLCAweDRkLCAweDRlLCAweDRmLAotICAgIDB4NTAsIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsCi0gICAgMHg1OCwgMHg1OSwgMHg1YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwKLSAgICAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAotICAgIDB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCi0gICAgMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKLSAgICAweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLAotICAgIDB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCi0gICAgMHhhOCwgMHhhOSwgMHhhYSwgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwKLSAgICAweGIwLCAweGIxLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LCAweGI3LAotICAgIDB4YjgsIDB4YjksIDB4YmEsIDB4YmIsIDB4YmMsIDB4YmQsIDB4YmUsIDB4YmYsCi0gICAgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKLSAgICAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLAotICAgIDB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsCi0gICAgMHhkOCwgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwKLSAgICAweGUwLCAweGUxLCAweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LAotICAgIDB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZWIsIDB4ZWMsIDB4ZWQsIDB4ZWUsIDB4ZWYsCi0gICAgMHhmMCwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywKLSAgICAweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkLCAweGZlLCAweGZmLAotfTsKLQotCiBQeURvY19TVFJWQVJfc2hhcmVkKF9QeV9pc3NwYWNlX19kb2NfXywKICJCLmlzc3BhY2UoKSAtPiBib29sXG5cCiBcblwKQEAgLTIyOCw3ICsxNSw3IEBACiAgICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KLSAgICBpZiAobGVuID09IDEgJiYgSVNTUEFDRSgqcCkpCisgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTU1BBQ0UoKnApKQogICAgICAgICBQeV9SRVRVUk5fVFJVRTsKIAogICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZW1wdHkgc3RyaW5ncyAqLwpAQCAtMjM3LDcgKzI0LDcgQEAKIAogICAgIGUgPSBwICsgbGVuOwogICAgIGZvciAoOyBwIDwgZTsgcCsrKSB7Ci0gICAgICAgIGlmICghSVNTUEFDRSgqcCkpCisgICAgICAgIGlmICghUHlfSVNTUEFDRSgqcCkpCiAgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiAgICAgfQogICAgIFB5X1JFVFVSTl9UUlVFOwpAQCAtMjU4LDcgKzQ1LDcgQEAKICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwotICAgIGlmIChsZW4gPT0gMSAmJiBJU0FMUEhBKCpwKSkKKyAgICBpZiAobGVuID09IDEgJiYgUHlfSVNBTFBIQSgqcCkpCiAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogCiAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBlbXB0eSBzdHJpbmdzICovCkBAIC0yNjcsNyArNTQsNyBAQAogCiAgICAgZSA9IHAgKyBsZW47CiAgICAgZm9yICg7IHAgPCBlOyBwKyspIHsKLSAgICAgICAgaWYgKCFJU0FMUEhBKCpwKSkKKyAgICAgICAgaWYgKCFQeV9JU0FMUEhBKCpwKSkKICAgICAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKICAgICB9CiAgICAgUHlfUkVUVVJOX1RSVUU7CkBAIC0yODgsNyArNzUsNyBAQAogICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCi0gICAgaWYgKGxlbiA9PSAxICYmIElTQUxOVU0oKnApKQorICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0FMTlVNKCpwKSkKICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CiAKICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGVtcHR5IHN0cmluZ3MgKi8KQEAgLTI5Nyw3ICs4NCw3IEBACiAKICAgICBlID0gcCArIGxlbjsKICAgICBmb3IgKDsgcCA8IGU7IHArKykgewotICAgICAgICBpZiAoIUlTQUxOVU0oKnApKQorICAgICAgICBpZiAoIVB5X0lTQUxOVU0oKnApKQogICAgICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogICAgIH0KICAgICBQeV9SRVRVUk5fVFJVRTsKQEAgLTMxOCw3ICsxMDUsNyBAQAogICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCi0gICAgaWYgKGxlbiA9PSAxICYmIElTRElHSVQoKnApKQorICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0RJR0lUKCpwKSkKICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CiAKICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGVtcHR5IHN0cmluZ3MgKi8KQEAgLTMyNyw3ICsxMTQsNyBAQAogCiAgICAgZSA9IHAgKyBsZW47CiAgICAgZm9yICg7IHAgPCBlOyBwKyspIHsKLSAgICAgICAgaWYgKCFJU0RJR0lUKCpwKSkKKyAgICAgICAgaWYgKCFQeV9JU0RJR0lUKCpwKSkKICAgICAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKICAgICB9CiAgICAgUHlfUkVUVVJOX1RSVUU7CkBAIC0zNTAsNyArMTM3LDcgQEAKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEpCi0gICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoSVNMT1dFUigqcCkpOworICAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKFB5X0lTTE9XRVIoKnApKTsKIAogICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZW1wdHkgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMCkKQEAgLTM1OSw5ICsxNDYsOSBAQAogICAgIGUgPSBwICsgbGVuOwogICAgIGNhc2VkID0gMDsKICAgICBmb3IgKDsgcCA8IGU7IHArKykgewotICAgICAgICBpZiAoSVNVUFBFUigqcCkpCisgICAgICAgIGlmIChQeV9JU1VQUEVSKCpwKSkKICAgICAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKLSAgICAgICAgZWxzZSBpZiAoIWNhc2VkICYmIElTTE9XRVIoKnApKQorICAgICAgICBlbHNlIGlmICghY2FzZWQgJiYgUHlfSVNMT1dFUigqcCkpCiAgICAgICAgICAgICBjYXNlZCA9IDE7CiAgICAgfQogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoY2FzZWQpOwpAQCAtMzg0LDcgKzE3MSw3IEBACiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxKQotICAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKElTVVBQRVIoKnApKTsKKyAgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhQeV9JU1VQUEVSKCpwKSk7CiAKICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGVtcHR5IHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDApCkBAIC0zOTMsOSArMTgwLDkgQEAKICAgICBlID0gcCArIGxlbjsKICAgICBjYXNlZCA9IDA7CiAgICAgZm9yICg7IHAgPCBlOyBwKyspIHsKLSAgICAgICAgaWYgKElTTE9XRVIoKnApKQorICAgICAgICBpZiAoUHlfSVNMT1dFUigqcCkpCiAgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7Ci0gICAgICAgIGVsc2UgaWYgKCFjYXNlZCAmJiBJU1VQUEVSKCpwKSkKKyAgICAgICAgZWxzZSBpZiAoIWNhc2VkICYmIFB5X0lTVVBQRVIoKnApKQogICAgICAgICAgICAgY2FzZWQgPSAxOwogICAgIH0KICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGNhc2VkKTsKQEAgLTQyMCw3ICsyMDcsNyBAQAogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSkKLSAgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhJU1VQUEVSKCpwKSk7CisgICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoUHlfSVNVUFBFUigqcCkpOwogCiAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBlbXB0eSBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAwKQpAQCAtNDMyLDEzICsyMTksMTMgQEAKICAgICBmb3IgKDsgcCA8IGU7IHArKykgewogICAgICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyIGNoID0gKnA7CiAKLSAgICAgICAgaWYgKElTVVBQRVIoY2gpKSB7CisgICAgICAgIGlmIChQeV9JU1VQUEVSKGNoKSkgewogICAgICAgICAgICAgaWYgKHByZXZpb3VzX2lzX2Nhc2VkKQogICAgICAgICAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKICAgICAgICAgICAgIHByZXZpb3VzX2lzX2Nhc2VkID0gMTsKICAgICAgICAgICAgIGNhc2VkID0gMTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJU0xPV0VSKGNoKSkgeworICAgICAgICBlbHNlIGlmIChQeV9JU0xPV0VSKGNoKSkgewogICAgICAgICAgICAgaWYgKCFwcmV2aW91c19pc19jYXNlZCkKICAgICAgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiAgICAgICAgICAgICBwcmV2aW91c19pc19jYXNlZCA9IDE7CkBAIC00NzMsOCArMjYwLDggQEAKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpbnQgYyA9IFB5X0NIQVJNQVNLKHJlc3VsdFtpXSk7Ci0gICAgICAgICAgICAgICAgaWYgKElTVVBQRVIoYykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBUT0xPV0VSKGMpOworICAgICAgICAgICAgICAgIGlmIChQeV9JU1VQUEVSKGMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gUHlfVE9MT1dFUihjKTsKICAgICAgICAgfQogfQogCkBAIC01MDEsOCArMjg4LDggQEAKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpbnQgYyA9IFB5X0NIQVJNQVNLKHJlc3VsdFtpXSk7Ci0gICAgICAgICAgICAgICAgaWYgKElTTE9XRVIoYykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBUT1VQUEVSKGMpOworICAgICAgICAgICAgICAgIGlmIChQeV9JU0xPV0VSKGMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gUHlfVE9VUFBFUihjKTsKICAgICAgICAgfQogfQogCkBAIC01MjcsMTMgKzMxNCwxMyBAQAogICAgICAgICAqLwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpbnQgYyA9IFB5X0NIQVJNQVNLKCpzKyspOwotICAgICAgICAgICAgICAgIGlmIChJU0xPV0VSKGMpKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X0lTTE9XRVIoYykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNfaXNfY2FzZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IFRPVVBQRVIoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IFB5X1RPVVBQRVIoYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19pc19jYXNlZCA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJU1VQUEVSKGMpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChQeV9JU1VQUEVSKGMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNfaXNfY2FzZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IFRPTE9XRVIoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IFB5X1RPTE9XRVIoYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19pc19jYXNlZCA9IDE7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19pc19jYXNlZCA9IDA7CkBAIC01NDUsNyArMzMyLDggQEAKIFB5RG9jX1NUUlZBUl9zaGFyZWQoX1B5X2NhcGl0YWxpemVfX2RvY19fLAogIkIuY2FwaXRhbGl6ZSgpIC0+IGNvcHkgb2YgQlxuXAogXG5cCi1SZXR1cm4gYSBjb3B5IG9mIEIgd2l0aCBvbmx5IGl0cyBmaXJzdCBjaGFyYWN0ZXIgY2FwaXRhbGl6ZWQgKEFTQ0lJKS4iKTsKK1JldHVybiBhIGNvcHkgb2YgQiB3aXRoIG9ubHkgaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZCAoQVNDSUkpXG5cCithbmQgdGhlIHJlc3QgbG93ZXItY2FzZWQuIik7CiAKIHZvaWQKIF9QeV9ieXRlc19jYXBpdGFsaXplKGNoYXIgKnJlc3VsdCwgY2hhciAqcywgUHlfc3NpemVfdCBsZW4pCkBAIC01NjAsMTYgKzM0OCwxNiBAQAogICAgICAgICAqLwogICAgICAgICBpZiAoMCA8IGxlbikgewogICAgICAgICAgICAgICAgIGludCBjID0gUHlfQ0hBUk1BU0soKnMrKyk7Ci0gICAgICAgICAgICAgICAgaWYgKElTTE9XRVIoYykpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gVE9VUFBFUihjKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlfSVNMT1dFUihjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICpyZXN1bHQgPSBQeV9UT1VQUEVSKGMpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICpyZXN1bHQgPSBjOwogICAgICAgICAgICAgICAgIHJlc3VsdCsrOwogICAgICAgICB9CiAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGludCBjID0gUHlfQ0hBUk1BU0soKnMrKyk7Ci0gICAgICAgICAgICAgICAgaWYgKElTVVBQRVIoYykpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gVE9MT1dFUihjKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlfSVNVUFBFUihjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICpyZXN1bHQgPSBQeV9UT0xPV0VSKGMpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICpyZXN1bHQgPSBjOwogICAgICAgICAgICAgICAgIHJlc3VsdCsrOwpAQCAtNTk2LDExICszODQsMTEgQEAKICAgICAgICAgKi8KICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaW50IGMgPSBQeV9DSEFSTUFTSygqcysrKTsKLSAgICAgICAgICAgICAgICBpZiAoSVNMT1dFUihjKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdCA9IFRPVVBQRVIoYyk7CisgICAgICAgICAgICAgICAgaWYgKFB5X0lTTE9XRVIoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpyZXN1bHQgPSBQeV9UT1VQUEVSKGMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChJU1VQUEVSKGMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gVE9MT1dFUihjKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChQeV9JU1VQUEVSKGMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gUHlfVE9MT1dFUihjKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdCA9IGM7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NhcHN1bGUuYyBiL09iamVjdHMvY2Fwc3VsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjBmODIKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL2NhcHN1bGUuYwpAQCAtMCwwICsxLDMyNCBAQAorLyogV3JhcCB2b2lkICogcG9pbnRlcnMgdG8gYmUgcGFzc2VkIGJldHdlZW4gQyBtb2R1bGVzICovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKworLyogSW50ZXJuYWwgc3RydWN0dXJlIG9mIFB5Q2Fwc3VsZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICB2b2lkICpwb2ludGVyOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgdm9pZCAqY29udGV4dDsKKyAgICBQeUNhcHN1bGVfRGVzdHJ1Y3RvciBkZXN0cnVjdG9yOworfSBQeUNhcHN1bGU7CisKKworCitzdGF0aWMgaW50CitfaXNfbGVnYWxfY2Fwc3VsZShQeUNhcHN1bGUgKmNhcHN1bGUsIGNvbnN0IGNoYXIgKmludmFsaWRfY2Fwc3VsZSkKK3sKKyAgICBpZiAoIWNhcHN1bGUgfHwgIVB5Q2Fwc3VsZV9DaGVja0V4YWN0KGNhcHN1bGUpIHx8IGNhcHN1bGUtPnBvaW50ZXIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgaW52YWxpZF9jYXBzdWxlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAxOworfQorCisjZGVmaW5lIGlzX2xlZ2FsX2NhcHN1bGUoY2Fwc3VsZSwgbmFtZSkgXAorICAgIChfaXNfbGVnYWxfY2Fwc3VsZShjYXBzdWxlLCBcCisgICAgIG5hbWUgIiBjYWxsZWQgd2l0aCBpbnZhbGlkIFB5Q2Fwc3VsZSBvYmplY3QiKSkKKworCitzdGF0aWMgaW50CituYW1lX21hdGNoZXMoY29uc3QgY2hhciAqbmFtZTEsIGNvbnN0IGNoYXIgKm5hbWUyKSB7CisgICAgLyogaWYgZWl0aGVyIGlzIE5VTEwsICovCisgICAgaWYgKCFuYW1lMSB8fCAhbmFtZTIpIHsKKyAgICAgICAgLyogdGhleSdyZSBvbmx5IHRoZSBzYW1lIGlmIHRoZXkncmUgYm90aCBOVUxMLiAqLworICAgICAgICByZXR1cm4gbmFtZTEgPT0gbmFtZTI7CisgICAgfQorICAgIHJldHVybiAhc3RyY21wKG5hbWUxLCBuYW1lMik7Cit9CisKKworCitQeU9iamVjdCAqCitQeUNhcHN1bGVfTmV3KHZvaWQgKnBvaW50ZXIsIGNvbnN0IGNoYXIgKm5hbWUsIFB5Q2Fwc3VsZV9EZXN0cnVjdG9yIGRlc3RydWN0b3IpCit7CisgICAgUHlDYXBzdWxlICpjYXBzdWxlOworCisgICAgaWYgKCFwb2ludGVyKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiUHlDYXBzdWxlX05ldyBjYWxsZWQgd2l0aCBudWxsIHBvaW50ZXIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY2Fwc3VsZSA9IFB5T2JqZWN0X05FVyhQeUNhcHN1bGUsICZQeUNhcHN1bGVfVHlwZSk7CisgICAgaWYgKGNhcHN1bGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjYXBzdWxlLT5wb2ludGVyID0gcG9pbnRlcjsKKyAgICBjYXBzdWxlLT5uYW1lID0gbmFtZTsKKyAgICBjYXBzdWxlLT5jb250ZXh0ID0gTlVMTDsKKyAgICBjYXBzdWxlLT5kZXN0cnVjdG9yID0gZGVzdHJ1Y3RvcjsKKworICAgIHJldHVybiAoUHlPYmplY3QgKiljYXBzdWxlOworfQorCisKK2ludAorUHlDYXBzdWxlX0lzVmFsaWQoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgUHlDYXBzdWxlICpjYXBzdWxlID0gKFB5Q2Fwc3VsZSAqKW87CisKKyAgICByZXR1cm4gKGNhcHN1bGUgIT0gTlVMTCAmJgorICAgICAgICAgICAgUHlDYXBzdWxlX0NoZWNrRXhhY3QoY2Fwc3VsZSkgJiYKKyAgICAgICAgICAgIGNhcHN1bGUtPnBvaW50ZXIgIT0gTlVMTCAmJgorICAgICAgICAgICAgbmFtZV9tYXRjaGVzKGNhcHN1bGUtPm5hbWUsIG5hbWUpKTsKK30KKworCit2b2lkICoKK1B5Q2Fwc3VsZV9HZXRQb2ludGVyKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvOworCisgICAgaWYgKCFpc19sZWdhbF9jYXBzdWxlKGNhcHN1bGUsICJQeUNhcHN1bGVfR2V0UG9pbnRlciIpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghbmFtZV9tYXRjaGVzKG5hbWUsIGNhcHN1bGUtPm5hbWUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiUHlDYXBzdWxlX0dldFBvaW50ZXIgY2FsbGVkIHdpdGggaW5jb3JyZWN0IG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGNhcHN1bGUtPnBvaW50ZXI7Cit9CisKKworY29uc3QgY2hhciAqCitQeUNhcHN1bGVfR2V0TmFtZShQeU9iamVjdCAqbykKK3sKKyAgICBQeUNhcHN1bGUgKmNhcHN1bGUgPSAoUHlDYXBzdWxlICopbzsKKworICAgIGlmICghaXNfbGVnYWxfY2Fwc3VsZShjYXBzdWxlLCAiUHlDYXBzdWxlX0dldE5hbWUiKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGNhcHN1bGUtPm5hbWU7Cit9CisKKworUHlDYXBzdWxlX0Rlc3RydWN0b3IKK1B5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yKFB5T2JqZWN0ICpvKQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvOworCisgICAgaWYgKCFpc19sZWdhbF9jYXBzdWxlKGNhcHN1bGUsICJQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvciIpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gY2Fwc3VsZS0+ZGVzdHJ1Y3RvcjsKK30KKworCit2b2lkICoKK1B5Q2Fwc3VsZV9HZXRDb250ZXh0KFB5T2JqZWN0ICpvKQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvOworCisgICAgaWYgKCFpc19sZWdhbF9jYXBzdWxlKGNhcHN1bGUsICJQeUNhcHN1bGVfR2V0Q29udGV4dCIpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gY2Fwc3VsZS0+Y29udGV4dDsKK30KKworCitpbnQKK1B5Q2Fwc3VsZV9TZXRQb2ludGVyKFB5T2JqZWN0ICpvLCB2b2lkICpwb2ludGVyKQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvOworCisgICAgaWYgKCFwb2ludGVyKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiUHlDYXBzdWxlX1NldFBvaW50ZXIgY2FsbGVkIHdpdGggbnVsbCBwb2ludGVyIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIWlzX2xlZ2FsX2NhcHN1bGUoY2Fwc3VsZSwgIlB5Q2Fwc3VsZV9TZXRQb2ludGVyIikpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNhcHN1bGUtPnBvaW50ZXIgPSBwb2ludGVyOworICAgIHJldHVybiAwOworfQorCisKK2ludAorUHlDYXBzdWxlX1NldE5hbWUoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgUHlDYXBzdWxlICpjYXBzdWxlID0gKFB5Q2Fwc3VsZSAqKW87CisKKyAgICBpZiAoIWlzX2xlZ2FsX2NhcHN1bGUoY2Fwc3VsZSwgIlB5Q2Fwc3VsZV9TZXROYW1lIikpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNhcHN1bGUtPm5hbWUgPSBuYW1lOworICAgIHJldHVybiAwOworfQorCisKK2ludAorUHlDYXBzdWxlX1NldERlc3RydWN0b3IoUHlPYmplY3QgKm8sIFB5Q2Fwc3VsZV9EZXN0cnVjdG9yIGRlc3RydWN0b3IpCit7CisgICAgUHlDYXBzdWxlICpjYXBzdWxlID0gKFB5Q2Fwc3VsZSAqKW87CisKKyAgICBpZiAoIWlzX2xlZ2FsX2NhcHN1bGUoY2Fwc3VsZSwgIlB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yIikpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNhcHN1bGUtPmRlc3RydWN0b3IgPSBkZXN0cnVjdG9yOworICAgIHJldHVybiAwOworfQorCisKK2ludAorUHlDYXBzdWxlX1NldENvbnRleHQoUHlPYmplY3QgKm8sIHZvaWQgKmNvbnRleHQpCit7CisgICAgUHlDYXBzdWxlICpjYXBzdWxlID0gKFB5Q2Fwc3VsZSAqKW87CisKKyAgICBpZiAoIWlzX2xlZ2FsX2NhcHN1bGUoY2Fwc3VsZSwgIlB5Q2Fwc3VsZV9TZXRDb250ZXh0IikpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNhcHN1bGUtPmNvbnRleHQgPSBjb250ZXh0OworICAgIHJldHVybiAwOworfQorCisKK3ZvaWQgKgorUHlDYXBzdWxlX0ltcG9ydChjb25zdCBjaGFyICpuYW1lLCBpbnQgbm9fYmxvY2spCit7CisgICAgUHlPYmplY3QgKm9iamVjdCA9IE5VTEw7CisgICAgdm9pZCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjaGFyICp0cmFjZTsKKyAgICBzaXplX3QgbmFtZV9sZW5ndGggPSAoc3RybGVuKG5hbWUpICsgMSkgKiBzaXplb2YoY2hhcik7CisgICAgY2hhciAqbmFtZV9kdXAgPSAoY2hhciAqKVB5TWVtX01BTExPQyhuYW1lX2xlbmd0aCk7CisKKyAgICBpZiAoIW5hbWVfZHVwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1lbWNweShuYW1lX2R1cCwgbmFtZSwgbmFtZV9sZW5ndGgpOworCisgICAgdHJhY2UgPSBuYW1lX2R1cDsKKyAgICB3aGlsZSAodHJhY2UpIHsKKyAgICAgICAgY2hhciAqZG90ID0gc3RyY2hyKHRyYWNlLCAnLicpOworICAgICAgICBpZiAoZG90KSB7CisgICAgICAgICAgICAqZG90KysgPSAnXDAnOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9iamVjdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAobm9fYmxvY2spIHsKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrKHRyYWNlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgb2JqZWN0ID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKHRyYWNlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsICJQeUNhcHN1bGVfSW1wb3J0IGNvdWxkIG5vdCBpbXBvcnQgbW9kdWxlIFwiJXNcIiIsIHRyYWNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeU9iamVjdCAqb2JqZWN0MiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcob2JqZWN0LCB0cmFjZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdDI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgICAgIGdvdG8gRVhJVDsKKyAgICAgICAgfQorCisgICAgICAgIHRyYWNlID0gZG90OworICAgIH0KKworICAgIC8qIGNvbXBhcmUgYXR0cmlidXRlIG5hbWUgdG8gbW9kdWxlLm5hbWUgYnkgaGFuZCAqLworICAgIGlmIChQeUNhcHN1bGVfSXNWYWxpZChvYmplY3QsIG5hbWUpKSB7CisgICAgICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvYmplY3Q7CisgICAgICAgIHJldHVybl92YWx1ZSA9IGNhcHN1bGUtPnBvaW50ZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgIlB5Q2Fwc3VsZV9JbXBvcnQgXCIlc1wiIGlzIG5vdCB2YWxpZCIsCisgICAgICAgICAgICBuYW1lKTsKKyAgICB9CisKK0VYSVQ6CisgICAgUHlfWERFQ1JFRihvYmplY3QpOworICAgIGlmIChuYW1lX2R1cCkgeworICAgICAgICBQeU1lbV9GUkVFKG5hbWVfZHVwKTsKKyAgICB9CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworCitzdGF0aWMgdm9pZAorY2Fwc3VsZV9kZWFsbG9jKFB5T2JqZWN0ICpvKQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvOworICAgIGlmIChjYXBzdWxlLT5kZXN0cnVjdG9yKSB7CisgICAgICAgIGNhcHN1bGUtPmRlc3RydWN0b3Iobyk7CisgICAgfQorICAgIFB5T2JqZWN0X0RFTChvKTsKK30KKworCitzdGF0aWMgUHlPYmplY3QgKgorY2Fwc3VsZV9yZXByKFB5T2JqZWN0ICpvKQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgY29uc3QgY2hhciAqcXVvdGU7CisKKyAgICBpZiAoY2Fwc3VsZS0+bmFtZSkgeworICAgICAgICBxdW90ZSA9ICJcIiI7CisgICAgICAgIG5hbWUgPSBjYXBzdWxlLT5uYW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIHF1b3RlID0gIiI7CisgICAgICAgIG5hbWUgPSAiTlVMTCI7CisgICAgfQorCisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxjYXBzdWxlIG9iamVjdCAlcyVzJXMgYXQgJXA+IiwKKyAgICAgICAgcXVvdGUsIG5hbWUsIHF1b3RlLCBjYXBzdWxlKTsKK30KKworCisKK1B5RG9jX1NUUlZBUihQeUNhcHN1bGVfVHlwZV9fZG9jX18sCisiQ2Fwc3VsZSBvYmplY3RzIGxldCB5b3Ugd3JhcCBhIEMgXCJ2b2lkICpcIiBwb2ludGVyIGluIGEgUHl0aG9uXG5cCitvYmplY3QuICBUaGV5J3JlIGEgd2F5IG9mIHBhc3NpbmcgZGF0YSB0aHJvdWdoIHRoZSBQeXRob24gaW50ZXJwcmV0ZXJcblwKK3dpdGhvdXQgY3JlYXRpbmcgeW91ciBvd24gY3VzdG9tIHR5cGUuXG5cCitcblwKK0NhcHN1bGVzIGFyZSB1c2VkIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gZXh0ZW5zaW9uIG1vZHVsZXMuXG5cCitUaGV5IHByb3ZpZGUgYSB3YXkgZm9yIGFuIGV4dGVuc2lvbiBtb2R1bGUgdG8gZXhwb3J0IGEgQyBpbnRlcmZhY2VcblwKK3RvIG90aGVyIGV4dGVuc2lvbiBtb2R1bGVzLCBzbyB0aGF0IGV4dGVuc2lvbiBtb2R1bGVzIGNhbiB1c2UgdGhlXG5cCitQeXRob24gaW1wb3J0IG1lY2hhbmlzbSB0byBsaW5rIHRvIG9uZSBhbm90aGVyLlxuXAorIik7CisKK1B5VHlwZU9iamVjdCBQeUNhcHN1bGVfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQorICAgICJQeUNhcHN1bGUiLAkJLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoUHlDYXBzdWxlKSwJCS8qdHBfYmFzaWNzaXplKi8KKyAgICAwLAkJCQkvKnRwX2l0ZW1zaXplKi8KKyAgICAvKiBtZXRob2RzICovCisgICAgY2Fwc3VsZV9kZWFsbG9jLCAvKnRwX2RlYWxsb2MqLworICAgIDAsCQkJCS8qdHBfcHJpbnQqLworICAgIDAsCQkJCS8qdHBfZ2V0YXR0ciovCisgICAgMCwJCQkJLyp0cF9zZXRhdHRyKi8KKyAgICAwLAkJCQkvKnRwX3Jlc2VydmVkKi8KKyAgICBjYXBzdWxlX3JlcHIsIC8qdHBfcmVwciovCisgICAgMCwJCQkJLyp0cF9hc19udW1iZXIqLworICAgIDAsCQkJCS8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsCQkJCS8qdHBfYXNfbWFwcGluZyovCisgICAgMCwJCQkJLyp0cF9oYXNoKi8KKyAgICAwLAkJCQkvKnRwX2NhbGwqLworICAgIDAsCQkJCS8qdHBfc3RyKi8KKyAgICAwLAkJCQkvKnRwX2dldGF0dHJvKi8KKyAgICAwLAkJCQkvKnRwX3NldGF0dHJvKi8KKyAgICAwLAkJCQkvKnRwX2FzX2J1ZmZlciovCisgICAgMCwJCQkJLyp0cF9mbGFncyovCisgICAgUHlDYXBzdWxlX1R5cGVfX2RvY19fCS8qdHBfZG9jKi8KK307CisKKwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jbGFzc29iamVjdC5jIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCmluZGV4IDhjMzM4MjMuLjA4MzI1MzEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY2xhc3NvYmplY3QuYworKysgYi9PYmplY3RzL2NsYXNzb2JqZWN0LmMKQEAgLTEyMyw2ICsxMjMsNyBAQAogICAgIG9wLT5jbF9kaWN0ID0gZGljdDsKICAgICBQeV9YSU5DUkVGKG5hbWUpOwogICAgIG9wLT5jbF9uYW1lID0gbmFtZTsKKyAgICBvcC0+Y2xfd2Vha3JlZmxpc3QgPSBOVUxMOwogCiAgICAgb3AtPmNsX2dldGF0dHIgPSBjbGFzc19sb29rdXAob3AsIGdldGF0dHJzdHIsICZkdW1teSk7CiAgICAgb3AtPmNsX3NldGF0dHIgPSBjbGFzc19sb29rdXAob3AsIHNldGF0dHJzdHIsICZkdW1teSk7CkBAIC0xODgsNiArMTg5LDggQEAKIGNsYXNzX2RlYWxsb2MoUHlDbGFzc09iamVjdCAqb3ApCiB7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0sob3ApOworICAgIGlmIChvcC0+Y2xfd2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgb3ApOwogICAgIFB5X0RFQ1JFRihvcC0+Y2xfYmFzZXMpOwogICAgIFB5X0RFQ1JFRihvcC0+Y2xfZGljdCk7CiAgICAgUHlfWERFQ1JFRihvcC0+Y2xfbmFtZSk7CkBAIC00NTQsNyArNDU3LDcgQEAKICAgICAodHJhdmVyc2Vwcm9jKWNsYXNzX3RyYXZlcnNlLCAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgb2Zmc2V0b2YoUHlDbGFzc09iamVjdCwgY2xfd2Vha3JlZmxpc3QpLCAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KQEAgLTIyMjYsMTAgKzIyMjksNiBAQAogUHlNZXRob2RfTmV3KFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtsYXNzKQogewogICAgIHJlZ2lzdGVyIFB5TWV0aG9kT2JqZWN0ICppbTsKLSAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soZnVuYykpIHsKLSAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBpbSA9IGZyZWVfbGlzdDsKICAgICBpZiAoaW0gIT0gTlVMTCkgewogICAgICAgICBmcmVlX2xpc3QgPSAoUHlNZXRob2RPYmplY3QgKikoaW0tPmltX3NlbGYpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jb2JqZWN0LmMgYi9PYmplY3RzL2NvYmplY3QuYwppbmRleCBjNDM3NDkxLi4zNTU0MjFlIDEwMDY0NAotLS0gYS9PYmplY3RzL2NvYmplY3QuYworKysgYi9PYmplY3RzL2NvYmplY3QuYwpAQCAtOSwxMSArOSwyMiBAQAogdHlwZWRlZiB2b2lkICgqZGVzdHJ1Y3RvcjEpKHZvaWQgKik7CiB0eXBlZGVmIHZvaWQgKCpkZXN0cnVjdG9yMikodm9pZCAqLCB2b2lkKik7CiAKK3N0YXRpYyBpbnQgY29iamVjdF9kZXByZWNhdGlvbl93YXJuaW5nKHZvaWQpCit7CisgICAgcmV0dXJuIFB5RXJyX1dhcm5QeTNrKCJDT2JqZWN0IHR5cGUgaXMgbm90IHN1cHBvcnRlZCBpbiAzLnguICIKKyAgICAgICAgIlBsZWFzZSB1c2UgY2Fwc3VsZSBvYmplY3RzIGluc3RlYWQuIiwgMSk7Cit9CisKKwogUHlPYmplY3QgKgogUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKHZvaWQgKmNvYmosIHZvaWQgKCpkZXN0cikodm9pZCAqKSkKIHsKICAgICBQeUNPYmplY3QgKnNlbGY7CiAKKyAgICBpZiAoY29iamVjdF9kZXByZWNhdGlvbl93YXJuaW5nKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgc2VsZiA9IFB5T2JqZWN0X05FVyhQeUNPYmplY3QsICZQeUNPYmplY3RfVHlwZSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMCw2ICs0MSwxMCBAQAogewogICAgIFB5Q09iamVjdCAqc2VsZjsKIAorICAgIGlmIChjb2JqZWN0X2RlcHJlY2F0aW9uX3dhcm5pbmcoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBpZiAoIWRlc2MpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjIGNhbGxlZCB3aXRoIG51bGwiCkBAIC01MCw2ICs2NSwxMCBAQAogUHlDT2JqZWN0X0FzVm9pZFB0cihQeU9iamVjdCAqc2VsZikKIHsKICAgICBpZiAoc2VsZikgeworICAgICAgICBpZiAoUHlDYXBzdWxlX0NoZWNrRXhhY3Qoc2VsZikpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBQeUNhcHN1bGVfR2V0TmFtZShzZWxmKTsKKyAgICAgICAgICAgIHJldHVybiAodm9pZCAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKHNlbGYsIG5hbWUpOworICAgICAgICB9CiAgICAgICAgIGlmIChzZWxmLT5vYl90eXBlID09ICZQeUNPYmplY3RfVHlwZSkKICAgICAgICAgICAgIHJldHVybiAoKFB5Q09iamVjdCAqKXNlbGYpLT5jb2JqZWN0OwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jb2Rlb2JqZWN0LmMgYi9PYmplY3RzL2NvZGVvYmplY3QuYwppbmRleCA5YzNiZmVlLi45ODc5ZGY1IDEwMDY0NAotLS0gYS9PYmplY3RzL2NvZGVvYmplY3QuYworKysgYi9PYmplY3RzL2NvZGVvYmplY3QuYwpAQCAtMTAzLDEwICsxMDMsNTcgQEAKICAgICAgICAgUHlfSU5DUkVGKGxub3RhYik7CiAgICAgICAgIGNvLT5jb19sbm90YWIgPSBsbm90YWI7CiAgICAgICAgIGNvLT5jb196b21iaWVmcmFtZSA9IE5VTEw7CisgICAgICAgIGNvLT5jb193ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgfQogICAgIHJldHVybiBjbzsKIH0KIAorUHlDb2RlT2JqZWN0ICoKK1B5Q29kZV9OZXdFbXB0eShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZnVuY25hbWUsIGludCBmaXJzdGxpbmVubykKK3sKKyAgICBzdGF0aWMgUHlPYmplY3QgKmVtcHR5c3RyaW5nID0gTlVMTDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKm51bGx0dXBsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lX29iID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZnVuY25hbWVfb2IgPSBOVUxMOworICAgIFB5Q29kZU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBpZiAoZW1wdHlzdHJpbmcgPT0gTlVMTCkgeworICAgICAgICBlbXB0eXN0cmluZyA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIiIpOworICAgICAgICBpZiAoZW1wdHlzdHJpbmcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBpZiAobnVsbHR1cGxlID09IE5VTEwpIHsKKyAgICAgICAgbnVsbHR1cGxlID0gUHlUdXBsZV9OZXcoMCk7CisgICAgICAgIGlmIChudWxsdHVwbGUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBmdW5jbmFtZV9vYiA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoZnVuY25hbWUpOworICAgIGlmIChmdW5jbmFtZV9vYiA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICBmaWxlbmFtZV9vYiA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoZmlsZW5hbWUpOworICAgIGlmIChmaWxlbmFtZV9vYiA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWxlZDsKKworICAgIHJlc3VsdCA9IFB5Q29kZV9OZXcoMCwgICAgICAgICAgICAgICAgICAgICAgLyogYXJnY291bnQgKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5sb2NhbHMgKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YWNrc2l6ZSAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KKyAgICAgICAgICAgICAgICBlbXB0eXN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIGNvZGUgKi8KKyAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnN0cyAqLworICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgICAgICAgICAgICAgICAgLyogbmFtZXMgKi8KKyAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgICAgICAgICAgICAgICAgIC8qIHZhcm5hbWVzICovCisgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAgICAgICAgICAgICAgICAvKiBmcmVldmFycyAqLworICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgICAgICAgICAgICAgICAgLyogY2VsbHZhcnMgKi8KKyAgICAgICAgICAgICAgICBmaWxlbmFtZV9vYiwgICAgICAgICAgICAgICAgICAgIC8qIGZpbGVuYW1lICovCisgICAgICAgICAgICAgICAgZnVuY25hbWVfb2IsICAgICAgICAgICAgICAgICAgICAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgZmlyc3RsaW5lbm8sICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdGxpbmVubyAqLworICAgICAgICAgICAgICAgIGVtcHR5c3RyaW5nICAgICAgICAgICAgICAgICAgICAgLyogbG5vdGFiICovCisgICAgICAgICAgICAgICAgKTsKKworZmFpbGVkOgorICAgIFB5X1hERUNSRUYoZnVuY25hbWVfb2IpOworICAgIFB5X1hERUNSRUYoZmlsZW5hbWVfb2IpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKICNkZWZpbmUgT0ZGKHgpIG9mZnNldG9mKFB5Q29kZU9iamVjdCwgeCkKIApAQCAtMjY4LDYgKzMxNSw4IEBACiAgICAgUHlfWERFQ1JFRihjby0+Y29fbG5vdGFiKTsKICAgICBpZiAoY28tPmNvX3pvbWJpZWZyYW1lICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0dDX0RlbChjby0+Y29fem9tYmllZnJhbWUpOworICAgIGlmIChjby0+Y29fd2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QqKWNvKTsKICAgICBQeU9iamVjdF9ERUwoY28pOwogfQogCkBAIC00NDQsOCArNDkzLDggQEAKICAgICBjb2RlX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCi0gICAgY29kZV9yaWNoY29tcGFyZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBjb2RlX3JpY2hjb21wYXJlLCAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG9mZnNldG9mKFB5Q29kZU9iamVjdCwgY29fd2Vha3JlZmxpc3QpLCAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KQEAgLTQ2MSw0OCArNTEwLDggQEAKICAgICBjb2RlX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KIH07CiAKLS8qIEFsbCBhYm91dCBjX2xub3RhYi4KLQotY19sbm90YWIgaXMgYW4gYXJyYXkgb2YgdW5zaWduZWQgYnl0ZXMgZGlzZ3Vpc2VkIGFzIGEgUHl0aG9uIHN0cmluZy4gIEluIC1PCi1tb2RlLCBTRVRfTElORU5PIG9wY29kZXMgYXJlbid0IGdlbmVyYXRlZCwgYW5kIGJ5dGVjb2RlIG9mZnNldHMgYXJlIG1hcHBlZAotdG8gc291cmNlIGNvZGUgbGluZSAjcyAod2hlbiBuZWVkZWQgZm9yIHRyYWNlYmFja3MpIHZpYSBjX2xub3RhYiBpbnN0ZWFkLgotVGhlIGFycmF5IGlzIGNvbmNlcHR1YWxseSBhIGxpc3Qgb2YKLSAgICAoYnl0ZWNvZGUgb2Zmc2V0IGluY3JlbWVudCwgbGluZSBudW1iZXIgaW5jcmVtZW50KQotcGFpcnMuICBUaGUgZGV0YWlscyBhcmUgaW1wb3J0YW50IGFuZCBkZWxpY2F0ZSwgYmVzdCBpbGx1c3RyYXRlZCBieSBleGFtcGxlOgotCi0gICAgYnl0ZSBjb2RlIG9mZnNldCAgICBzb3VyY2UgY29kZSBsaW5lIG51bWJlcgotICAgIDAgICAgICAgICAgICAgICAgICAgICAgIDEKLSAgICA2ICAgICAgICAgICAgICAgICAgICAgICAyCi0gICAgICAgNTAgICAgICAgICAgICAgICAgICAgNwotICAgICAgMzUwICAgICAgICAgICAgICAgICAzMDcKLSAgICAgIDM2MSAgICAgICAgICAgICAgICAgMzA4Ci0KLVRoZSBmaXJzdCB0cmljayBpcyB0aGF0IHRoZXNlIG51bWJlcnMgYXJlbid0IHN0b3JlZCwgb25seSB0aGUgaW5jcmVtZW50cwotZnJvbSBvbmUgcm93IHRvIHRoZSBuZXh0ICh0aGlzIGRvZXNuJ3QgcmVhbGx5IHdvcmssIGJ1dCBpdCdzIGEgc3RhcnQpOgotCi0gICAgMCwgMSwgIDYsIDEsICA0NCwgNSwgIDMwMCwgMzAwLCAgMTEsIDEKLQotVGhlIHNlY29uZCB0cmljayBpcyB0aGF0IGFuIHVuc2lnbmVkIGJ5dGUgY2FuJ3QgaG9sZCBuZWdhdGl2ZSB2YWx1ZXMsIG9yCi12YWx1ZXMgbGFyZ2VyIHRoYW4gMjU1LCBzbyAoYSkgdGhlcmUncyBhIGRlZXAgYXNzdW1wdGlvbiB0aGF0IGJ5dGUgY29kZQotb2Zmc2V0cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBsaW5lICNzIGJvdGggaW5jcmVhc2UgbW9ub3RvbmljYWxseSwgYW5kIChiKQotaWYgYXQgbGVhc3Qgb25lIGNvbHVtbiBqdW1wcyBieSBtb3JlIHRoYW4gMjU1IGZyb20gb25lIHJvdyB0byB0aGUgbmV4dCwgbW9yZQotdGhhbiBvbmUgcGFpciBpcyB3cml0dGVuIHRvIHRoZSB0YWJsZS4gSW4gY2FzZSAjYiwgdGhlcmUncyBubyB3YXkgdG8ga25vdwotZnJvbSBsb29raW5nIGF0IHRoZSB0YWJsZSBsYXRlciBob3cgbWFueSB3ZXJlIHdyaXR0ZW4uICBUaGF0J3MgdGhlIGRlbGljYXRlCi1wYXJ0LiAgQSB1c2VyIG9mIGNfbG5vdGFiIGRlc2lyaW5nIHRvIGZpbmQgdGhlIHNvdXJjZSBsaW5lIG51bWJlcgotY29ycmVzcG9uZGluZyB0byBhIGJ5dGVjb2RlIGFkZHJlc3MgQSBzaG91bGQgZG8gc29tZXRoaW5nIGxpa2UgdGhpcwotCi0gICAgbGluZW5vID0gYWRkciA9IDAKLSAgICBmb3IgYWRkcl9pbmNyLCBsaW5lX2luY3IgaW4gY19sbm90YWI6Ci0gICAgYWRkciArPSBhZGRyX2luY3IKLSAgICBpZiBhZGRyID4gQToKLSAgICAgICAgcmV0dXJuIGxpbmVubwotICAgIGxpbmVubyArPSBsaW5lX2luY3IKLQotSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgd2hlbiB0aGUgYWRkciBmaWVsZCBpbmNyZW1lbnRzIGJ5IG1vcmUgdGhhbiAyNTUsCi10aGUgbGluZSAjIGluY3JlbWVudCBpbiBlYWNoIHBhaXIgZ2VuZXJhdGVkIG11c3QgYmUgMCB1bnRpbCB0aGUgcmVtYWluaW5nIGFkZHIKLWluY3JlbWVudCBpcyA8IDI1Ni4gIFNvLCBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgY29tX3NldF9saW5lbm8gc2hvdWxkIG5vdCAoYXMKLXdhcyBhY3R1YWxseSBkb25lIHVudGlsIDIuMikgZXhwYW5kIDMwMCwgMzAwIHRvIDI1NSwgMjU1LCAgNDUsIDQ1LCBidXQgdG8KLTI1NSwgMCwgIDQ1LCAyNTUsICAwLCA0NS4KKy8qIFVzZSBjb19sbm90YWIgdG8gY29tcHV0ZSB0aGUgbGluZSBudW1iZXIgZnJvbSBhIGJ5dGVjb2RlIGluZGV4LCBhZGRycS4gIFNlZQorICAgbG5vdGFiX25vdGVzLnR4dCBmb3IgdGhlIGRldGFpbHMgb2YgdGhlIGxub3RhYiByZXByZXNlbnRhdGlvbi4KICovCiAKIGludApAQCAtNTIxLDg1ICs1MzAsMTAgQEAKICAgICByZXR1cm4gbGluZTsKIH0KIAotLyoKLSAgIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZS4KLQotICovCi0KLSAgICAvKiBUaGUgdGhlb3J5IG9mIFNFVF9MSU5FTk8tbGVzcyB0cmFjaW5nLgotCi0gICAgICAgSW4gYSBudXRzaGVsbCwgd2UgdXNlIHRoZSBjb19sbm90YWIgZmllbGQgb2YgdGhlIGNvZGUgb2JqZWN0Ci0gICAgICAgdG8gdGVsbCB3aGVuIGV4ZWN1dGlvbiBoYXMgbW92ZWQgb250byBhIGRpZmZlcmVudCBsaW5lLgotCi0gICAgICAgQXMgbWVudGlvbmVkIGFib3ZlLCB0aGUgYmFzaWMgaWRlYSBpcyBzbyBzZXQgdGhpbmdzIHVwIHNvCi0gICAgICAgdGhhdAotCi0gICAgICAgICAqaW5zdHJfbGIgPD0gZnJhbWUtPmZfbGFzdGkgPCAqaW5zdHJfdWIKLQotICAgICAgIGlzIHRydWUgc28gbG9uZyBhcyBleGVjdXRpb24gZG9lcyBub3QgY2hhbmdlIGxpbmVzLgotCi0gICAgICAgVGhpcyBpcyBhbGwgZmFpcmx5IHNpbXBsZS4gIERpZ2dpbmcgdGhlIGluZm9ybWF0aW9uIG91dCBvZgotICAgICAgIGNvX2xub3RhYiB0YWtlcyBzb21lIHdvcmssIGJ1dCBpcyBjb25jZXB0dWFsbHkgY2xlYXIuCi0KLSAgICAgICBTb21ld2hhdCBoYXJkZXIgdG8gZXhwbGFpbiBpcyB3aHkgd2UgZG9uJ3QgKmFsd2F5cyogY2FsbCB0aGUKLSAgICAgICBsaW5lIHRyYWNlIGZ1bmN0aW9uIHdoZW4gdGhlIGFib3ZlIHRlc3QgZmFpbHMuCi0KLSAgICAgICBDb25zaWRlciB0aGlzIGNvZGU6Ci0KLSAgICAgICAxOiBkZWYgZihhKToKLSAgICAgICAyOiAgICAgaWYgYToKLSAgICAgICAzOiAgICAgICAgcHJpbnQgMQotICAgICAgIDQ6ICAgICBlbHNlOgotICAgICAgIDU6ICAgICAgICBwcmludCAyCi0KLSAgICAgICB3aGljaCBjb21waWxlcyB0byB0aGlzOgotCi0gICAgICAgMiAgICAgICAgICAgMCBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoYSkKLSAgICAgICAgICAgICAgICAgICAzIEpVTVBfSUZfRkFMU0UgICAgICAgICAgICA5ICh0byAxNSkKLSAgICAgICAgICAgICAgICAgICA2IFBPUF9UT1AKLQotICAgICAgIDMgICAgICAgICAgIDcgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCi0gICAgICAgICAgICAgICAgICAxMCBQUklOVF9JVEVNCi0gICAgICAgICAgICAgICAgICAxMSBQUklOVF9ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAxMiBKVU1QX0ZPUldBUkQgICAgICAgICAgICAgNiAodG8gMjEpCi0gICAgICAgICA+PiAgIDE1IFBPUF9UT1AKLQotICAgICAgIDUgICAgICAgICAgMTYgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDIpCi0gICAgICAgICAgICAgICAgICAxOSBQUklOVF9JVEVNCi0gICAgICAgICAgICAgICAgICAyMCBQUklOVF9ORVdMSU5FCi0gICAgICAgICA+PiAgIDIxIExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQotICAgICAgICAgICAgICAyNCBSRVRVUk5fVkFMVUUKLQotICAgICAgIElmICdhJyBpcyBmYWxzZSwgZXhlY3V0aW9uIHdpbGwganVtcCB0byBpbnN0cnVjdGlvbiBhdCBvZmZzZXQKLSAgICAgICAxNSBhbmQgdGhlIGNvX2xub3RhYiB3aWxsIGNsYWltIHRoYXQgZXhlY3V0aW9uIGhhcyBtb3ZlZCB0bwotICAgICAgIGxpbmUgMy4gIFRoaXMgaXMgYXQgYmVzdCBtaXNsZWFkaW5nLiAgSW4gdGhpcyBjYXNlIHdlIGNvdWxkCi0gICAgICAgYXNzb2NpYXRlIHRoZSBQT1BfVE9QIHdpdGggbGluZSA0LCBidXQgdGhhdCBkb2Vzbid0IG1ha2UKLSAgICAgICBzZW5zZSBpbiBhbGwgY2FzZXMgKEkgdGhpbmspLgotCi0gICAgICAgV2hhdCB3ZSBkbyBpcyBvbmx5IGNhbGwgdGhlIGxpbmUgdHJhY2UgZnVuY3Rpb24gaWYgdGhlIGNvX2xub3RhYgotICAgICAgIGluZGljYXRlcyB3ZSBoYXZlIGp1bXBlZCB0byB0aGUgKnN0YXJ0KiBvZiBhIGxpbmUsIGkuZS4gaWYgdGhlCi0gICAgICAgY3VycmVudCBpbnN0cnVjdGlvbiBvZmZzZXQgbWF0Y2hlcyB0aGUgb2Zmc2V0IGdpdmVuIGZvciB0aGUKLSAgICAgICBzdGFydCBvZiBhIGxpbmUgYnkgdGhlIGNvX2xub3RhYi4KLQotICAgICAgIFRoaXMgYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSBzaXR1YXRpb24gd2hlcmUgJ2EnIGlzIHRydWUuCi0gICAgICAgRXhlY3V0aW9uIHdpbGwganVtcCBmcm9tIGluc3RydWN0aW9uIG9mZnNldCAxMiB0byBvZmZzZXQgMjEuCi0gICAgICAgVGhlbiB0aGUgY29fbG5vdGFiIHdvdWxkIGltcGx5IHRoYXQgZXhlY3V0aW9uIGhhcyBtb3ZlZCB0byBsaW5lCi0gICAgICAgNSwgd2hpY2ggaXMgYWdhaW4gbWlzbGVhZGluZy4KLQotICAgICAgIFdoeSBkbyB3ZSBzZXQgZl9saW5lbm8gd2hlbiB0cmFjaW5nPyAgV2VsbCwgY29uc2lkZXIgdGhlIGNvZGUKLSAgICAgICBhYm92ZSB3aGVuICdhJyBpcyB0cnVlLiAgSWYgc3RlcHBpbmcgdGhyb3VnaCB0aGlzIHdpdGggJ24nIGluCi0gICAgICAgcGRiLCB5b3Ugd291bGQgc3RvcCBhdCBsaW5lIDEgd2l0aCBhICJjYWxsIiB0eXBlIGV2ZW50LCB0aGVuCi0gICAgICAgbGluZSBldmVudHMgb24gbGluZXMgMiBhbmQgMywgdGhlbiBhICJyZXR1cm4iIHR5cGUgZXZlbnQgLS0gYnV0Ci0gICAgICAgeW91IHdvdWxkIGJlIHNob3duIGxpbmUgNSBkdXJpbmcgdGhpcyBldmVudC4gIFRoaXMgaXMgYSBjaGFuZ2UKLSAgICAgICBmcm9tIHRoZSBiZWhhdmlvdXIgaW4gMi4yIGFuZCBiZWZvcmUsIGFuZCBJJ3ZlIGZvdW5kIGl0Ci0gICAgICAgY29uZnVzaW5nIGluIHByYWN0aWNlLiAgQnkgc2V0dGluZyBhbmQgdXNpbmcgZl9saW5lbm8gd2hlbgotICAgICAgIHRyYWNpbmcsIG9uZSBjYW4gcmVwb3J0IGEgbGluZSBudW1iZXIgZGlmZmVyZW50IGZyb20gdGhhdAotICAgICAgIHN1Z2dlc3RlZCBieSBmX2xhc3RpIG9uIHRoaXMgb25lIG9jY2FzaW9uIHdoZXJlIGl0J3MgZGVzaXJhYmxlLgotICAgICovCi0KLQorLyogVXBkYXRlICpib3VuZHMgdG8gZGVzY3JpYmUgdGhlIGZpcnN0IGFuZCBvbmUtcGFzdC10aGUtbGFzdCBpbnN0cnVjdGlvbnMgaW4KKyAgIHRoZSBzYW1lIGxpbmUgYXMgbGFzdGkuICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGF0IGxpbmUuICovCiBpbnQKLVB5Q29kZV9DaGVja0xpbmVOdW1iZXIoUHlDb2RlT2JqZWN0KiBjbywgaW50IGxhc3RpLCBQeUFkZHJQYWlyICpib3VuZHMpCitfUHlDb2RlX0NoZWNrTGluZU51bWJlcihQeUNvZGVPYmplY3QqIGNvLCBpbnQgbGFzdGksIFB5QWRkclBhaXIgKmJvdW5kcykKIHsKICAgICBpbnQgc2l6ZSwgYWRkciwgbGluZTsKICAgICB1bnNpZ25lZCBjaGFyKiBwOwpAQCAtNjE2LDExICs1NTAsOSBAQAogICAgICAgIGluc3RyX2xiIC0tIGlmIHdlIHN0b3JlZCB0aGUgbWF0Y2hpbmcgdmFsdWUgb2YgcAogICAgICAgIHNvbXdoZXJlIHdlIGNvdWxkIHNraXAgdGhlIGZpcnN0IHdoaWxlIGxvb3AuICovCiAKLSAgICAvKiBzZWUgY29tbWVudHMgaW4gY29tcGlsZS5jIGZvciB0aGUgZGVzY3JpcHRpb24gb2YKKyAgICAvKiBTZWUgbG5vdGFiX25vdGVzLnR4dCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mCiAgICAgICAgY29fbG5vdGFiLiAgQSBwb2ludCB0byByZW1lbWJlcjogaW5jcmVtZW50cyB0byBwCi0gICAgICAgc2hvdWxkIGNvbWUgaW4gcGFpcnMgLS0gYWx0aG91Z2ggd2UgZG9uJ3QgY2FyZSBhYm91dAotICAgICAgIHRoZSBsaW5lIGluY3JlbWVudHMgaGVyZSwgdHJlYXRpbmcgdGhlbSBhcyBieXRlCi0gICAgICAgaW5jcmVtZW50cyBnZXRzIGNvbmZ1c2luZywgdG8gc2F5IHRoZSBsZWFzdC4gKi8KKyAgICAgICBjb21lIGluIChhZGRyLCBsaW5lKSBwYWlycy4gKi8KIAogICAgIGJvdW5kcy0+YXBfbG93ZXIgPSAwOwogICAgIHdoaWxlIChzaXplID4gMCkgewpAQCAtNjMzLDEzICs1NjUsNiBAQAogICAgICAgICAtLXNpemU7CiAgICAgfQogCi0gICAgLyogSWYgbGFzdGkgYW5kIGFkZHIgZG9uJ3QgbWF0Y2ggZXhhY3RseSwgd2UgZG9uJ3Qgd2FudCB0bwotICAgICAgIGNoYW5nZSB0aGUgbGluZW5vIHNsb3Qgb24gdGhlIGZyYW1lIG9yIGV4ZWN1dGUgYSB0cmFjZQotICAgICAgIGZ1bmN0aW9uLiAgUmV0dXJuIC0xIGluc3RlYWQuCi0gICAgKi8KLSAgICBpZiAoYWRkciAhPSBsYXN0aSkKLSAgICAgICAgbGluZSA9IC0xOwotCiAgICAgaWYgKHNpemUgPiAwKSB7CiAgICAgICAgIHdoaWxlICgtLXNpemUgPj0gMCkgewogICAgICAgICAgICAgYWRkciArPSAqcCsrOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMgYi9PYmplY3RzL2NvbXBsZXhvYmplY3QuYwppbmRleCBlOGM4ZWJiLi42NzdhYzBlIDEwMDY0NAotLS0gYS9PYmplY3RzL2NvbXBsZXhvYmplY3QuYworKysgYi9PYmplY3RzL2NvbXBsZXhvYmplY3QuYwpAQCAtOCwxMCArOCw2IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSNpZmRlZiBIQVZFX0lFRUVGUF9ICi0jaW5jbHVkZSA8aWVlZWZwLmg+Ci0jZW5kaWYKLQogI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKIAogLyogUHJlY2lzaW9ucyB1c2VkIGJ5IHJlcHIoKSBhbmQgc3RyKCksIHJlc3BlY3RpdmVseS4KQEAgLTI4NCwxMiArMjgwLDQzIEBACiAgICAgfQogfQogCitzdGF0aWMgUHlPYmplY3QgKgordHJ5X2NvbXBsZXhfc3BlY2lhbF9tZXRob2QoUHlPYmplY3QgKm9wKSB7CisgICAgUHlPYmplY3QgKmY7CisgICAgc3RhdGljIFB5T2JqZWN0ICpjb21wbGV4c3RyOworCisgICAgaWYgKGNvbXBsZXhzdHIgPT0gTlVMTCkgeworICAgICAgICBjb21wbGV4c3RyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiX19jb21wbGV4X18iKTsKKyAgICAgICAgaWYgKGNvbXBsZXhzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlJbnN0YW5jZV9DaGVjayhvcCkpIHsKKyAgICAgICAgZiA9IFB5T2JqZWN0X0dldEF0dHIob3AsIGNvbXBsZXhzdHIpOworICAgICAgICBpZiAoZiA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZiA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG9wLCAiX19jb21wbGV4X18iLCAmY29tcGxleHN0cik7CisgICAgICAgIGlmIChmID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoZiAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGYsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoZik7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCiBQeV9jb21wbGV4CiBQeUNvbXBsZXhfQXNDQ29tcGxleChQeU9iamVjdCAqb3ApCiB7CiAgICAgUHlfY29tcGxleCBjdjsKICAgICBQeU9iamVjdCAqbmV3b3AgPSBOVUxMOwotICAgIHN0YXRpYyBQeU9iamVjdCAqY29tcGxleF9zdHIgPSBOVUxMOwogCiAgICAgYXNzZXJ0KG9wKTsKICAgICAvKiBJZiBvcCBpcyBhbHJlYWR5IG9mIHR5cGUgUHlDb21wbGV4X1R5cGUsIHJldHVybiBpdHMgdmFsdWUgKi8KQEAgLTMwMiwyOSArMzI5LDcgQEAKICAgICBjdi5yZWFsID0gLTEuOwogICAgIGN2LmltYWcgPSAwLjsKIAotICAgIGlmIChjb21wbGV4X3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICghKGNvbXBsZXhfc3RyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiX19jb21wbGV4X18iKSkpCi0gICAgICAgICAgICByZXR1cm4gY3Y7Ci0gICAgfQotCi0gICAgaWYgKFB5SW5zdGFuY2VfQ2hlY2sob3ApKSB7Ci0gICAgICAgIC8qIHRoaXMgY2FuIGdvIGF3YXkgaW4gcHl0aG9uIDMwMDAgKi8KLSAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHIob3AsIGNvbXBsZXhfc3RyKSkgewotICAgICAgICAgICAgbmV3b3AgPSBQeU9iamVjdF9DYWxsTWV0aG9kKG9wLCAiX19jb21wbGV4X18iLCBOVUxMKTsKLSAgICAgICAgICAgIGlmICghbmV3b3ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN2OwotICAgICAgICB9Ci0gICAgICAgIC8qIGVsc2UgdHJ5IF9fZmxvYXRfXyAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5T2JqZWN0ICpjb21wbGV4ZnVuYzsKLSAgICAgICAgY29tcGxleGZ1bmMgPSBfUHlUeXBlX0xvb2t1cChvcC0+b2JfdHlwZSwgY29tcGxleF9zdHIpOwotICAgICAgICAvKiBjb21wbGV4ZnVuYyBpcyBhIGJvcnJvd2VkIHJlZmVyZW5jZSAqLwotICAgICAgICBpZiAoY29tcGxleGZ1bmMpIHsKLSAgICAgICAgICAgIG5ld29wID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhjb21wbGV4ZnVuYywgb3AsIE5VTEwpOwotICAgICAgICAgICAgaWYgKCFuZXdvcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3Y7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV3b3AgPSB0cnlfY29tcGxleF9zcGVjaWFsX21ldGhvZChvcCk7CiAKICAgICBpZiAobmV3b3ApIHsKICAgICAgICAgaWYgKCFQeUNvbXBsZXhfQ2hlY2sobmV3b3ApKSB7CkBAIC0zMzcsNiArMzQyLDkgQEAKICAgICAgICAgUHlfREVDUkVGKG5ld29wKTsKICAgICAgICAgcmV0dXJuIGN2OwogICAgIH0KKyAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiBjdjsKKyAgICB9CiAgICAgLyogSWYgbmVpdGhlciBvZiB0aGUgYWJvdmUgd29ya3MsIGludGVycHJldCBvcCBhcyBhIGZsb2F0IGdpdmluZyB0aGUKICAgICAgICByZWFsIHBhcnQgb2YgdGhlIHJlc3VsdCwgYW5kIGZpbGwgaW4gdGhlIGltYWdpbmFyeSBwYXJ0IGFzIDAuICovCiAgICAgZWxzZSB7CkBAIC0zNTMsODMgKzM2MSw5OCBAQAogfQogCiAKLXN0YXRpYyB2b2lkCi1jb21wbGV4X3RvX2J1ZihjaGFyICpidWYsIGludCBidWZzeiwgUHlDb21wbGV4T2JqZWN0ICp2LCBpbnQgcHJlY2lzaW9uKQorc3RhdGljIFB5T2JqZWN0ICoKK2NvbXBsZXhfZm9ybWF0KFB5Q29tcGxleE9iamVjdCAqdiwgaW50IHByZWNpc2lvbiwgY2hhciBmb3JtYXRfY29kZSkKIHsKLSAgICBjaGFyIGZvcm1hdFszMl07Ci0gICAgaWYgKHYtPmN2YWwucmVhbCA9PSAwLikgewotICAgICAgICBpZiAoIVB5X0lTX0ZJTklURSh2LT5jdmFsLmltYWcpKSB7Ci0gICAgICAgICAgICBpZiAoUHlfSVNfTkFOKHYtPmN2YWwuaW1hZykpCi0gICAgICAgICAgICAgICAgc3RybmNweShidWYsICJuYW4qaiIsIDYpOwotICAgICAgICAgICAgZWxzZSBpZiAoY29weXNpZ24oMSwgdi0+Y3ZhbC5pbWFnKSA9PSAxKQotICAgICAgICAgICAgICAgIHN0cm5jcHkoYnVmLCAiaW5mKmoiLCA2KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHJuY3B5KGJ1ZiwgIi1pbmYqaiIsIDcpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlPU19zbnByaW50Zihmb3JtYXQsIHNpemVvZihmb3JtYXQpLCAiJSUuJWlnIiwgcHJlY2lzaW9uKTsKLSAgICAgICAgICAgIFB5T1NfYXNjaWlfZm9ybWF0ZChidWYsIGJ1ZnN6IC0gMSwgZm9ybWF0LCB2LT5jdmFsLmltYWcpOwotICAgICAgICAgICAgc3RybmNhdChidWYsICJqIiwgMSk7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBsZW47CisKKyAgICAvKiBJZiB0aGVzZSBhcmUgbm9uLU5VTEwsIHRoZXknbGwgbmVlZCB0byBiZSBmcmVlZC4gKi8KKyAgICBjaGFyICpwcmUgPSBOVUxMOworICAgIGNoYXIgKmltID0gTlVMTDsKKyAgICBjaGFyICpidWYgPSBOVUxMOworCisgICAgLyogVGhlc2UgZG8gbm90IG5lZWQgdG8gYmUgZnJlZWQuIHJlIGlzIGVpdGhlciBhbiBhbGlhcworICAgICAgIGZvciBwcmUgb3IgYSBwb2ludGVyIHRvIGEgY29uc3RhbnQuICBsZWFkIGFuZCB0YWlsCisgICAgICAgYXJlIHBvaW50ZXJzIHRvIGNvbnN0YW50cy4gKi8KKyAgICBjaGFyICpyZSA9IE5VTEw7CisgICAgY2hhciAqbGVhZCA9ICIiOworICAgIGNoYXIgKnRhaWwgPSAiIjsKKworICAgIGlmICh2LT5jdmFsLnJlYWwgPT0gMC4gJiYgY29weXNpZ24oMS4wLCB2LT5jdmFsLnJlYWwpPT0xLjApIHsKKyAgICAgICAgcmUgPSAiIjsKKyAgICAgICAgaW0gPSBQeU9TX2RvdWJsZV90b19zdHJpbmcodi0+Y3ZhbC5pbWFnLCBmb3JtYXRfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uLCAwLCBOVUxMKTsKKyAgICAgICAgaWYgKCFpbSkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIgcmVbNjRdLCBpbVs2NF07CiAgICAgICAgIC8qIEZvcm1hdCBpbWFnaW5hcnkgcGFydCB3aXRoIHNpZ24sIHJlYWwgcGFydCB3aXRob3V0ICovCi0gICAgICAgIGlmICghUHlfSVNfRklOSVRFKHYtPmN2YWwucmVhbCkpIHsKLSAgICAgICAgICAgIGlmIChQeV9JU19OQU4odi0+Y3ZhbC5yZWFsKSkKLSAgICAgICAgICAgICAgICBzdHJuY3B5KHJlLCAibmFuIiwgNCk7Ci0gICAgICAgICAgICAvKiBlbHNlIGlmIChjb3B5c2lnbigxLCB2LT5jdmFsLnJlYWwpID09IDEpICovCi0gICAgICAgICAgICBlbHNlIGlmICh2LT5jdmFsLnJlYWwgPiAwKQotICAgICAgICAgICAgICAgIHN0cm5jcHkocmUsICJpbmYiLCA0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHJuY3B5KHJlLCAiLWluZiIsIDUpOworICAgICAgICBwcmUgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcodi0+Y3ZhbC5yZWFsLCBmb3JtYXRfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiwgMCwgTlVMTCk7CisgICAgICAgIGlmICghcHJlKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlPU19zbnByaW50Zihmb3JtYXQsIHNpemVvZihmb3JtYXQpLCAiJSUuJWlnIiwgcHJlY2lzaW9uKTsKLSAgICAgICAgICAgIFB5T1NfYXNjaWlfZm9ybWF0ZChyZSwgc2l6ZW9mKHJlKSwgZm9ybWF0LCB2LT5jdmFsLnJlYWwpOworICAgICAgICByZSA9IHByZTsKKworICAgICAgICBpbSA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh2LT5jdmFsLmltYWcsIGZvcm1hdF9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24sIFB5X0RUU0ZfU0lHTiwgTlVMTCk7CisgICAgICAgIGlmICghaW0pIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFQeV9JU19GSU5JVEUodi0+Y3ZhbC5pbWFnKSkgewotICAgICAgICAgICAgaWYgKFB5X0lTX05BTih2LT5jdmFsLmltYWcpKQotICAgICAgICAgICAgICAgIHN0cm5jcHkoaW0sICIrbmFuKiIsIDYpOwotICAgICAgICAgICAgLyogZWxzZSBpZiAoY29weXNpZ24oMSwgdi0+Y3ZhbC5pbWFnKSA9PSAxKSAqLwotICAgICAgICAgICAgZWxzZSBpZiAodi0+Y3ZhbC5pbWFnID4gMCkKLSAgICAgICAgICAgICAgICBzdHJuY3B5KGltLCAiK2luZioiLCA2KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHJuY3B5KGltLCAiLWluZioiLCA2KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5T1Nfc25wcmludGYoZm9ybWF0LCBzaXplb2YoZm9ybWF0KSwgIiUlKy4laWciLCBwcmVjaXNpb24pOwotICAgICAgICAgICAgUHlPU19hc2NpaV9mb3JtYXRkKGltLCBzaXplb2YoaW0pLCBmb3JtYXQsIHYtPmN2YWwuaW1hZyk7Ci0gICAgICAgIH0KLSAgICAgICAgUHlPU19zbnByaW50ZihidWYsIGJ1ZnN6LCAiKCVzJXNqKSIsIHJlLCBpbSk7CisgICAgICAgIGxlYWQgPSAiKCI7CisgICAgICAgIHRhaWwgPSAiKSI7CiAgICAgfQorICAgIC8qIEFsbG9jIHRoZSBmaW5hbCBidWZmZXIuIEFkZCBvbmUgZm9yIHRoZSAiaiIgaW4gdGhlIGZvcm1hdCBzdHJpbmcsCisgICAgICAgYW5kIG9uZSBmb3IgdGhlIHRyYWlsaW5nIHplcm8uICovCisgICAgbGVuID0gc3RybGVuKGxlYWQpICsgc3RybGVuKHJlKSArIHN0cmxlbihpbSkgKyBzdHJsZW4odGFpbCkgKyAyOworICAgIGJ1ZiA9IFB5TWVtX01hbGxvYyhsZW4pOworICAgIGlmICghYnVmKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgUHlPU19zbnByaW50ZihidWYsIGxlbiwgIiVzJXMlc2olcyIsIGxlYWQsIHJlLCBpbSwgdGFpbCk7CisgICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhidWYpOworICBkb25lOgorICAgIFB5TWVtX0ZyZWUoaW0pOworICAgIFB5TWVtX0ZyZWUocHJlKTsKKyAgICBQeU1lbV9GcmVlKGJ1Zik7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50CiBjb21wbGV4X3ByaW50KFB5Q29tcGxleE9iamVjdCAqdiwgRklMRSAqZnAsIGludCBmbGFncykKIHsKLSAgICBjaGFyIGJ1ZlsxMDBdOwotICAgIGNvbXBsZXhfdG9fYnVmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHYsCi0gICAgICAgICAgICAgICAgICAgKGZsYWdzICYgUHlfUFJJTlRfUkFXKSA/IFBSRUNfU1RSIDogUFJFQ19SRVBSKTsKKyAgICBQeU9iamVjdCAqZm9ybWF0djsKKyAgICBjaGFyICpidWY7CisgICAgaWYgKGZsYWdzICYgUHlfUFJJTlRfUkFXKQorICAgICAgICBmb3JtYXR2ID0gY29tcGxleF9mb3JtYXQodiwgUHlGbG9hdF9TVFJfUFJFQ0lTSU9OLCAnZycpOworICAgIGVsc2UKKyAgICAgICAgZm9ybWF0diA9IGNvbXBsZXhfZm9ybWF0KHYsIDAsICdyJyk7CisgICAgaWYgKGZvcm1hdHYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGJ1ZiA9IFB5U3RyaW5nX0FTX1NUUklORyhmb3JtYXR2KTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgZnB1dHMoYnVmLCBmcCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBQeV9ERUNSRUYoZm9ybWF0dik7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBjb21wbGV4X3JlcHIoUHlDb21wbGV4T2JqZWN0ICp2KQogewotICAgIGNoYXIgYnVmWzEwMF07Ci0gICAgY29tcGxleF90b19idWYoYnVmLCBzaXplb2YoYnVmKSwgdiwgUFJFQ19SRVBSKTsKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhidWYpOworICAgIHJldHVybiBjb21wbGV4X2Zvcm1hdCh2LCAwLCAncicpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogY29tcGxleF9zdHIoUHlDb21wbGV4T2JqZWN0ICp2KQogewotICAgIGNoYXIgYnVmWzEwMF07Ci0gICAgY29tcGxleF90b19idWYoYnVmLCBzaXplb2YoYnVmKSwgdiwgUFJFQ19TVFIpOwotICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKGJ1Zik7CisgICAgcmV0dXJuIGNvbXBsZXhfZm9ybWF0KHYsIFB5RmxvYXRfU1RSX1BSRUNJU0lPTiwgJ2cnKTsKIH0KIAogc3RhdGljIGxvbmcKQEAgLTQ5MCw1NiArNTEzLDY5IEBACiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBsZXhfYWRkKFB5Q29tcGxleE9iamVjdCAqdiwgUHlDb21wbGV4T2JqZWN0ICp3KQorY29tcGxleF9hZGQoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQogewogICAgIFB5X2NvbXBsZXggcmVzdWx0OworICAgIFB5X2NvbXBsZXggYSwgYjsKKyAgICBUT19DT01QTEVYKHYsIGEpOworICAgIFRPX0NPTVBMRVgodywgYik7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleF9hZGQiLCByZXR1cm4gMCkKLSAgICByZXN1bHQgPSBjX3N1bSh2LT5jdmFsLHctPmN2YWwpOworICAgIHJlc3VsdCA9IGNfc3VtKGEsIGIpOwogICAgIFB5RlBFX0VORF9QUk9URUNUKHJlc3VsdCkKICAgICByZXR1cm4gUHlDb21wbGV4X0Zyb21DQ29tcGxleChyZXN1bHQpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotY29tcGxleF9zdWIoUHlDb21wbGV4T2JqZWN0ICp2LCBQeUNvbXBsZXhPYmplY3QgKncpCitjb21wbGV4X3N1YihQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgUHlfY29tcGxleCByZXN1bHQ7CisgICAgUHlfY29tcGxleCBhLCBiOworICAgIFRPX0NPTVBMRVgodiwgYSk7CisgICAgVE9fQ09NUExFWCh3LCBiKTs7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleF9zdWIiLCByZXR1cm4gMCkKLSAgICByZXN1bHQgPSBjX2RpZmYodi0+Y3ZhbCx3LT5jdmFsKTsKKyAgICByZXN1bHQgPSBjX2RpZmYoYSwgYik7CiAgICAgUHlGUEVfRU5EX1BST1RFQ1QocmVzdWx0KQogICAgIHJldHVybiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KHJlc3VsdCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jb21wbGV4X211bChQeUNvbXBsZXhPYmplY3QgKnYsIFB5Q29tcGxleE9iamVjdCAqdykKK2NvbXBsZXhfbXVsKFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKIHsKICAgICBQeV9jb21wbGV4IHJlc3VsdDsKKyAgICBQeV9jb21wbGV4IGEsIGI7CisgICAgVE9fQ09NUExFWCh2LCBhKTsKKyAgICBUT19DT01QTEVYKHcsIGIpOwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXhfbXVsIiwgcmV0dXJuIDApCi0gICAgcmVzdWx0ID0gY19wcm9kKHYtPmN2YWwsdy0+Y3ZhbCk7CisgICAgcmVzdWx0ID0gY19wcm9kKGEsIGIpOwogICAgIFB5RlBFX0VORF9QUk9URUNUKHJlc3VsdCkKICAgICByZXR1cm4gUHlDb21wbGV4X0Zyb21DQ29tcGxleChyZXN1bHQpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotY29tcGxleF9kaXYoUHlDb21wbGV4T2JqZWN0ICp2LCBQeUNvbXBsZXhPYmplY3QgKncpCitjb21wbGV4X2RpdihQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgUHlfY29tcGxleCBxdW90OwotCisgICAgUHlfY29tcGxleCBhLCBiOworICAgIFRPX0NPTVBMRVgodiwgYSk7CisgICAgVE9fQ09NUExFWCh3LCBiKTsKICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJjb21wbGV4X2RpdiIsIHJldHVybiAwKQogICAgIGVycm5vID0gMDsKLSAgICBxdW90ID0gY19xdW90KHYtPmN2YWwsdy0+Y3ZhbCk7CisgICAgcXVvdCA9IGNfcXVvdChhLCBiKTsKICAgICBQeUZQRV9FTkRfUFJPVEVDVChxdW90KQogICAgIGlmIChlcnJubyA9PSBFRE9NKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwgImNvbXBsZXggZGl2aXNpb24iKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLCAiY29tcGxleCBkaXZpc2lvbiBieSB6ZXJvIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gUHlDb21wbGV4X0Zyb21DQ29tcGxleChxdW90KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBsZXhfY2xhc3NpY19kaXYoUHlDb21wbGV4T2JqZWN0ICp2LCBQeUNvbXBsZXhPYmplY3QgKncpCitjb21wbGV4X2NsYXNzaWNfZGl2KFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKIHsKICAgICBQeV9jb21wbGV4IHF1b3Q7Ci0KKyAgICBQeV9jb21wbGV4IGEsIGI7CisgICAgVE9fQ09NUExFWCh2LCBhKTsKKyAgICBUT19DT01QTEVYKHcsIGIpOwogICAgIGlmIChQeV9EaXZpc2lvbldhcm5pbmdGbGFnID49IDIgJiYKICAgICAgICAgUHlFcnJfV2FybihQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCiAgICAgICAgICAgICAgICAgICAgImNsYXNzaWMgY29tcGxleCBkaXZpc2lvbiIpIDwgMCkKQEAgLTU0Nyw1NyArNTgzLDYxIEBACiAKICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJjb21wbGV4X2NsYXNzaWNfZGl2IiwgcmV0dXJuIDApCiAgICAgZXJybm8gPSAwOwotICAgIHF1b3QgPSBjX3F1b3Qodi0+Y3ZhbCx3LT5jdmFsKTsKKyAgICBxdW90ID0gY19xdW90KGEsIGIpOwogICAgIFB5RlBFX0VORF9QUk9URUNUKHF1b3QpCiAgICAgaWYgKGVycm5vID09IEVET00pIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLCAiY29tcGxleCBkaXZpc2lvbiIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IsICJjb21wbGV4IGRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KHF1b3QpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotY29tcGxleF9yZW1haW5kZXIoUHlDb21wbGV4T2JqZWN0ICp2LCBQeUNvbXBsZXhPYmplY3QgKncpCitjb21wbGV4X3JlbWFpbmRlcihQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgUHlfY29tcGxleCBkaXYsIG1vZDsKLQorICAgIFB5X2NvbXBsZXggYSwgYjsKKyAgICBUT19DT01QTEVYKHYsIGEpOworICAgIFRPX0NPTVBMRVgodywgYik7CiAgICAgaWYgKFB5RXJyX1dhcm4oUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAogICAgICAgICAgICAgICAgICAgICJjb21wbGV4IGRpdm1vZCgpLCAvLyBhbmQgJSBhcmUgZGVwcmVjYXRlZCIpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlcnJubyA9IDA7Ci0gICAgZGl2ID0gY19xdW90KHYtPmN2YWwsdy0+Y3ZhbCk7IC8qIFRoZSByYXcgZGl2aXNvciB2YWx1ZS4gKi8KKyAgICBkaXYgPSBjX3F1b3QoYSwgYik7IC8qIFRoZSByYXcgZGl2aXNvciB2YWx1ZS4gKi8KICAgICBpZiAoZXJybm8gPT0gRURPTSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IsICJjb21wbGV4IHJlbWFpbmRlciIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZGl2LnJlYWwgPSBmbG9vcihkaXYucmVhbCk7IC8qIFVzZSB0aGUgZmxvb3Igb2YgdGhlIHJlYWwgcGFydC4gKi8KICAgICBkaXYuaW1hZyA9IDAuMDsKLSAgICBtb2QgPSBjX2RpZmYodi0+Y3ZhbCwgY19wcm9kKHctPmN2YWwsIGRpdikpOworICAgIG1vZCA9IGNfZGlmZihhLCBjX3Byb2QoYiwgZGl2KSk7CiAKICAgICByZXR1cm4gUHlDb21wbGV4X0Zyb21DQ29tcGxleChtb2QpOwogfQogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jb21wbGV4X2Rpdm1vZChQeUNvbXBsZXhPYmplY3QgKnYsIFB5Q29tcGxleE9iamVjdCAqdykKK2NvbXBsZXhfZGl2bW9kKFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKIHsKICAgICBQeV9jb21wbGV4IGRpdiwgbW9kOwogICAgIFB5T2JqZWN0ICpkLCAqbSwgKno7Ci0KKyAgICBQeV9jb21wbGV4IGEsIGI7CisgICAgVE9fQ09NUExFWCh2LCBhKTsKKyAgICBUT19DT01QTEVYKHcsIGIpOwogICAgIGlmIChQeUVycl9XYXJuKFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKICAgICAgICAgICAgICAgICAgICAiY29tcGxleCBkaXZtb2QoKSwgLy8gYW5kICUgYXJlIGRlcHJlY2F0ZWQiKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZXJybm8gPSAwOwotICAgIGRpdiA9IGNfcXVvdCh2LT5jdmFsLHctPmN2YWwpOyAvKiBUaGUgcmF3IGRpdmlzb3IgdmFsdWUuICovCisgICAgZGl2ID0gY19xdW90KGEsIGIpOyAvKiBUaGUgcmF3IGRpdmlzb3IgdmFsdWUuICovCiAgICAgaWYgKGVycm5vID09IEVET00pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLCAiY29tcGxleCBkaXZtb2QoKSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZGl2LnJlYWwgPSBmbG9vcihkaXYucmVhbCk7IC8qIFVzZSB0aGUgZmxvb3Igb2YgdGhlIHJlYWwgcGFydC4gKi8KICAgICBkaXYuaW1hZyA9IDAuMDsKLSAgICBtb2QgPSBjX2RpZmYodi0+Y3ZhbCwgY19wcm9kKHctPmN2YWwsIGRpdikpOworICAgIG1vZCA9IGNfZGlmZihhLCBjX3Byb2QoYiwgZGl2KSk7CiAgICAgZCA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoZGl2KTsKICAgICBtID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChtb2QpOwogICAgIHogPSBQeVR1cGxlX1BhY2soMiwgZCwgbSk7CkBAIC02MTUsNyArNjU1LDYgQEAKICAgICBQeV9jb21wbGV4IGEsIGI7CiAgICAgVE9fQ09NUExFWCh2LCBhKTsKICAgICBUT19DT01QTEVYKHcsIGIpOwotCiAgICAgaWYgKHohPVB5X05vbmUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjb21wbGV4IG1vZHVsbyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTY0NSwxMCArNjg0LDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jb21wbGV4X2ludF9kaXYoUHlDb21wbGV4T2JqZWN0ICp2LCBQeUNvbXBsZXhPYmplY3QgKncpCitjb21wbGV4X2ludF9kaXYoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQogewogICAgIFB5T2JqZWN0ICp0LCAqcjsKLQorICAgIFB5X2NvbXBsZXggYSwgYjsKKyAgICBUT19DT01QTEVYKHYsIGEpOworICAgIFRPX0NPTVBMRVgodywgYik7CiAgICAgaWYgKFB5RXJyX1dhcm4oUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAogICAgICAgICAgICAgICAgICAgICJjb21wbGV4IGRpdm1vZCgpLCAvLyBhbmQgJSBhcmUgZGVwcmVjYXRlZCIpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03NDIsNDMgKzc4Myw3MCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGNvbXBsZXhfcmljaGNvbXBhcmUoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3LCBpbnQgb3ApCiB7Ci0gICAgaW50IGM7Ci0gICAgUHlfY29tcGxleCBpLCBqOwogICAgIFB5T2JqZWN0ICpyZXM7Ci0KLSAgICBjID0gUHlOdW1iZXJfQ29lcmNlRXgoJnYsICZ3KTsKLSAgICBpZiAoYyA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChjID4gMCkgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOwotICAgICAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7Ci0gICAgfQotICAgIC8qIE1ha2Ugc3VyZSBib3RoIGFyZ3VtZW50cyBhcmUgY29tcGxleC4gKi8KLSAgICBpZiAoIShQeUNvbXBsZXhfQ2hlY2sodikgJiYgUHlDb21wbGV4X0NoZWNrKHcpKSkgewotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKLSAgICAgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOwotICAgIH0KLQotICAgIGkgPSAoKFB5Q29tcGxleE9iamVjdCAqKXYpLT5jdmFsOwotICAgIGogPSAoKFB5Q29tcGxleE9iamVjdCAqKXcpLT5jdmFsOwotICAgIFB5X0RFQ1JFRih2KTsKLSAgICBQeV9ERUNSRUYodyk7CisgICAgUHlfY29tcGxleCBpOworICAgIGludCBlcXVhbDsKIAogICAgIGlmIChvcCAhPSBQeV9FUSAmJiBvcCAhPSBQeV9ORSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgIm5vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgLyogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBjb21wYXJpc29ucyB3aXRoIG5vbi1udW1iZXJzIHJldHVybgorICAgICAgICAgKiBOb3RJbXBsZW1lbnRlZC4gIE9ubHkgY29tcGFyaXNvbnMgd2l0aCBjb3JlIG51bWVyaWMgdHlwZXMgcmFpc2UKKyAgICAgICAgICogVHlwZUVycm9yLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKFB5SW50X0NoZWNrKHcpIHx8IFB5TG9uZ19DaGVjayh3KSB8fAorICAgICAgICAgICAgUHlGbG9hdF9DaGVjayh3KSB8fCBQeUNvbXBsZXhfQ2hlY2sodykpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgY29tcGxleCBudW1iZXJzIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBnb3RvIFVuaW1wbGVtZW50ZWQ7CiAgICAgfQogCi0gICAgaWYgKChpLnJlYWwgPT0gai5yZWFsICYmIGkuaW1hZyA9PSBqLmltYWcpID09IChvcCA9PSBQeV9FUSkpCi0gICAgICAgIHJlcyA9IFB5X1RydWU7CisgICAgYXNzZXJ0KFB5Q29tcGxleF9DaGVjayh2KSk7CisgICAgVE9fQ09NUExFWCh2LCBpKTsKKworICAgIGlmIChQeUludF9DaGVjayh3KSB8fCBQeUxvbmdfQ2hlY2sodykpIHsKKyAgICAgICAgLyogQ2hlY2sgZm9yIDAuMCBpbWFnaW5hcnkgcGFydCBmaXJzdCB0byBhdm9pZCB0aGUgcmljaAorICAgICAgICAgKiBjb21wYXJpc29uIHdoZW4gcG9zc2libGUuCisgICAgICAgICAqLworICAgICAgICBpZiAoaS5pbWFnID09IDAuMCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmosICpzdWJfcmVzOworICAgICAgICAgICAgaiA9IFB5RmxvYXRfRnJvbURvdWJsZShpLnJlYWwpOworICAgICAgICAgICAgaWYgKGogPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgc3ViX3JlcyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKGosIHcsIG9wKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihqKTsKKyAgICAgICAgICAgIHJldHVybiBzdWJfcmVzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZXF1YWwgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKFB5RmxvYXRfQ2hlY2sodykpIHsKKyAgICAgICAgZXF1YWwgPSAoaS5yZWFsID09IFB5RmxvYXRfQXNEb3VibGUodykgJiYgaS5pbWFnID09IDAuMCk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5Q29tcGxleF9DaGVjayh3KSkgeworICAgICAgICBQeV9jb21wbGV4IGo7CisKKyAgICAgICAgVE9fQ09NUExFWCh3LCBqKTsKKyAgICAgICAgZXF1YWwgPSAoaS5yZWFsID09IGoucmVhbCAmJiBpLmltYWcgPT0gai5pbWFnKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGdvdG8gVW5pbXBsZW1lbnRlZDsKKyAgICB9CisKKyAgICBpZiAoZXF1YWwgPT0gKG9wID09IFB5X0VRKSkKKyAgICAgICAgIHJlcyA9IFB5X1RydWU7CiAgICAgZWxzZQotICAgICAgICByZXMgPSBQeV9GYWxzZTsKKyAgICAgICAgIHJlcyA9IFB5X0ZhbHNlOwogCiAgICAgUHlfSU5DUkVGKHJlcyk7CiAgICAgcmV0dXJuIHJlczsKKworICBVbmltcGxlbWVudGVkOgorICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7CisgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtODI2LDYgKzg5NCw0MSBAQAogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoZGQpIiwgYy5yZWFsLCBjLmltYWcpOwogfQogCitQeURvY19TVFJWQVIoY29tcGxleF9fZm9ybWF0X19kb2MsCisiY29tcGxleC5fX2Zvcm1hdF9fKCkgLT4gc3RyXG4iCisiXG4iCisiQ29udmVydHMgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGZvcm1hdF9zcGVjLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorY29tcGxleF9fZm9ybWF0X18oUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIFB5T2JqZWN0ICpmb3JtYXRfc3BlYzsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpfX2Zvcm1hdF9fIiwgJmZvcm1hdF9zcGVjKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlCeXRlc19DaGVjayhmb3JtYXRfc3BlYykpCisgICAgcmV0dXJuIF9QeUNvbXBsZXhfRm9ybWF0QWR2YW5jZWQoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhmb3JtYXRfc3BlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShmb3JtYXRfc3BlYykpOworICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soZm9ybWF0X3NwZWMpKSB7CisgICAgLyogQ29udmVydCBmb3JtYXRfc3BlYyB0byBhIHN0ciAqLworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKnN0cl9zcGVjID0gUHlPYmplY3RfU3RyKGZvcm1hdF9zcGVjKTsKKworICAgIGlmIChzdHJfc3BlYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlc3VsdCA9IF9QeUNvbXBsZXhfRm9ybWF0QWR2YW5jZWQoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHN0cl9zcGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoc3RyX3NwZWMpKTsKKworICAgIFB5X0RFQ1JFRihzdHJfc3BlYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIl9fZm9ybWF0X18gcmVxdWlyZXMgc3RyIG9yIHVuaWNvZGUiKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwogI2lmIDAKIHN0YXRpYyBQeU9iamVjdCAqCiBjb21wbGV4X2lzX2Zpbml0ZShQeU9iamVjdCAqc2VsZikKQEAgLTg1MCw2ICs5NTMsOCBAQAogICAgICBjb21wbGV4X2lzX2Zpbml0ZV9kb2N9LAogI2VuZGlmCiAgICAgeyJfX2dldG5ld2FyZ3NfXyIsICAgICAgICAgIChQeUNGdW5jdGlvbiljb21wbGV4X2dldG5ld2FyZ3MsICAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJfX2Zvcm1hdF9fIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWNvbXBsZXhfX2Zvcm1hdF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLCBjb21wbGV4X19mb3JtYXRfX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTg2NywxMyArOTcyLDkgQEAKICAgICBjb25zdCBjaGFyICpzLCAqc3RhcnQ7CiAgICAgY2hhciAqZW5kOwogICAgIGRvdWJsZSB4PTAuMCwgeT0wLjAsIHo7Ci0gICAgaW50IGdvdF9yZT0wLCBnb3RfaW09MCwgZ290X2JyYWNrZXQ9MCwgZG9uZT0wOwotICAgIGludCBkaWdpdF9vcl9kb3Q7Ci0gICAgaW50IHN3X2Vycm9yPTA7Ci0gICAgaW50IHNpZ247Ci0gICAgY2hhciBidWZmZXJbMjU2XTsgLyogRm9yIGVycm9ycyAqLworICAgIGludCBnb3RfYnJhY2tldD0wOwogI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKLSAgICBjaGFyIHNfYnVmZmVyWzI1Nl07CisgICAgY2hhciAqc19idWZmZXIgPSBOVUxMOwogI2VuZGlmCiAgICAgUHlfc3NpemVfdCBsZW47CiAKQEAgLTg4MywxNiArOTg0LDE0IEBACiAgICAgfQogI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2sodikpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfU0laRSh2KSA+PSAoUHlfc3NpemVfdClzaXplb2Yoc19idWZmZXIpKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJjb21wbGV4KCkgbGl0ZXJhbCB0b28gbGFyZ2UgdG8gY29udmVydCIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgc19idWZmZXIgPSAoY2hhciAqKVB5TWVtX01BTExPQyhQeVVuaWNvZGVfR0VUX1NJWkUodikrMSk7CisgICAgICAgIGlmIChzX2J1ZmZlciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGlmIChQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbChQeVVuaWNvZGVfQVNfVU5JQ09ERSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNfYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIHMgPSBzX2J1ZmZlcjsKICAgICAgICAgbGVuID0gc3RybGVuKHMpOwogICAgIH0KQEAgLTkwNSwxNDcgKzEwMDQsMTM4IEBACiAKICAgICAvKiBwb3NpdGlvbiBvbiBmaXJzdCBub25ibGFuayAqLwogICAgIHN0YXJ0ID0gczsKLSAgICB3aGlsZSAoKnMgJiYgaXNzcGFjZShQeV9DSEFSTUFTSygqcykpKQorICAgIHdoaWxlIChQeV9JU1NQQUNFKCpzKSkKICAgICAgICAgcysrOwotICAgIGlmIChzWzBdID09ICdcMCcpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tcGxleCgpIGFyZyBpcyBhbiBlbXB0eSBzdHJpbmciKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChzWzBdID09ICcoJykgeworICAgIGlmICgqcyA9PSAnKCcpIHsKICAgICAgICAgLyogU2tpcCBvdmVyIHBvc3NpYmxlIGJyYWNrZXQgZnJvbSByZXByKCkuICovCiAgICAgICAgIGdvdF9icmFja2V0ID0gMTsKICAgICAgICAgcysrOwotICAgICAgICB3aGlsZSAoKnMgJiYgaXNzcGFjZShQeV9DSEFSTUFTSygqcykpKQorICAgICAgICB3aGlsZSAoUHlfSVNTUEFDRSgqcykpCiAgICAgICAgICAgICBzKys7CiAgICAgfQogCi0gICAgeiA9IC0xLjA7Ci0gICAgc2lnbiA9IDE7Ci0gICAgZG8geworICAgIC8qIGEgdmFsaWQgY29tcGxleCBzdHJpbmcgdXN1YWxseSB0YWtlcyBvbmUgb2YgdGhlIHRocmVlIGZvcm1zOgogCi0gICAgICAgIHN3aXRjaCAoKnMpIHsKKyAgICAgICAgIDxmbG9hdD4gICAgICAgICAgICAgICAgICAtIHJlYWwgcGFydCBvbmx5CisgICAgICAgICA8ZmxvYXQ+aiAgICAgICAgICAgICAgICAgLSBpbWFnaW5hcnkgcGFydCBvbmx5CisgICAgICAgICA8ZmxvYXQ+PHNpZ25lZC1mbG9hdD5qICAgLSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMKIAotICAgICAgICBjYXNlICdcMCc6Ci0gICAgICAgICAgICBpZiAocy1zdGFydCAhPSBsZW4pIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJjb21wbGV4KCkgYXJnIGNvbnRhaW5zIGEgbnVsbCBieXRlIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZighZG9uZSkgc3dfZXJyb3I9MTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgIHdoZXJlIDxmbG9hdD4gcmVwcmVzZW50cyBhbnkgbnVtZXJpYyBzdHJpbmcgdGhhdCdzIGFjY2VwdGVkIGJ5IHRoZQorICAgICAgIGZsb2F0IGNvbnN0cnVjdG9yIChpbmNsdWRpbmcgJ25hbicsICdpbmYnLCAnaW5maW5pdHknLCBldGMuKSwgYW5kCisgICAgICAgPHNpZ25lZC1mbG9hdD4gaXMgYW55IHN0cmluZyBvZiB0aGUgZm9ybSA8ZmxvYXQ+IHdob3NlIGZpcnN0CisgICAgICAgY2hhcmFjdGVyIGlzICcrJyBvciAnLScuCiAKLSAgICAgICAgY2FzZSAnKSc6Ci0gICAgICAgICAgICBpZiAoIWdvdF9icmFja2V0IHx8ICEoZ290X3JlIHx8IGdvdF9pbSkpIHsKLSAgICAgICAgICAgICAgICBzd19lcnJvcj0xOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ290X2JyYWNrZXQ9MDsKLSAgICAgICAgICAgIGRvbmU9MTsKLSAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIHdoaWxlICgqcyAmJiBpc3NwYWNlKFB5X0NIQVJNQVNLKCpzKSkpCi0gICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgaWYgKCpzKSBzd19lcnJvcj0xOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgZXh0cmEgZm9ybXMKIAotICAgICAgICBjYXNlICctJzoKLSAgICAgICAgICAgIHNpZ24gPSAtMTsKLSAgICAgICAgICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLwotICAgICAgICBjYXNlICcrJzoKLSAgICAgICAgICAgIGlmIChkb25lKSAgc3dfZXJyb3I9MTsKLSAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIGlmICAoICAqcz09J1wwJ3x8KnM9PScrJ3x8KnM9PSctJ3x8KnM9PScpJ3x8Ci0gICAgICAgICAgICAgICAgICAgaXNzcGFjZShQeV9DSEFSTUFTSygqcykpICApICBzd19lcnJvcj0xOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICA8ZmxvYXQ+PHNpZ24+agorICAgICAgICAgPHNpZ24+agorICAgICAgICAgagogCi0gICAgICAgIGNhc2UgJ0onOgotICAgICAgICBjYXNlICdqJzoKLSAgICAgICAgICAgIGlmIChnb3RfaW0gfHwgZG9uZSkgewotICAgICAgICAgICAgICAgIHN3X2Vycm9yID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICAoejwwLjApIHsKLSAgICAgICAgICAgICAgICB5PXNpZ247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgIHk9c2lnbip6OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ290X2ltPTE7Ci0gICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICBpZiAgKCpzIT0nKycgJiYgKnMhPSctJyApCi0gICAgICAgICAgICAgICAgZG9uZT0xOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgYXJlIGFsc28gYWNjZXB0ZWQsIHRob3VnaCBzdXBwb3J0IGZvciB0aGVzZSBmb3JtcyBtYXkgYmUgcmVtb3ZlZCBmcm9tCisgICAgICAgYSBmdXR1cmUgdmVyc2lvbiBvZiBQeXRob24uCisgICAgKi8KIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKGlzc3BhY2UoUHlfQ0hBUk1BU0soKnMpKSkgewotICAgICAgICAgICAgICAgIHdoaWxlICgqcyAmJiBpc3NwYWNlKFB5X0NIQVJNQVNLKCpzKSkpCi0gICAgICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAgICBpZiAoKnMgJiYgKnMgIT0gJyknKQotICAgICAgICAgICAgICAgICAgICBzd19lcnJvcj0xOworICAgIC8qIGZpcnN0IGxvb2sgZm9yIGZvcm1zIHN0YXJ0aW5nIHdpdGggPGZsb2F0PiAqLworICAgIHogPSBQeU9TX3N0cmluZ190b19kb3VibGUocywgJmVuZCwgTlVMTCk7CisgICAgaWYgKHogPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1ZhbHVlRXJyb3IpKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgaWYgKGVuZCAhPSBzKSB7CisgICAgICAgIC8qIGFsbCA0IGZvcm1zIHN0YXJ0aW5nIHdpdGggPGZsb2F0PiBsYW5kIGhlcmUgKi8KKyAgICAgICAgcyA9IGVuZDsKKyAgICAgICAgaWYgKCpzID09ICcrJyB8fCAqcyA9PSAnLScpIHsKKyAgICAgICAgICAgIC8qIDxmbG9hdD48c2lnbmVkLWZsb2F0PmogfCA8ZmxvYXQ+PHNpZ24+aiAqLworICAgICAgICAgICAgeCA9IHo7CisgICAgICAgICAgICB5ID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKHMsICZlbmQsIE5VTEwpOworICAgICAgICAgICAgaWYgKHkgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVmFsdWVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkb25lID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRpZ2l0X29yX2RvdCA9Ci0gICAgICAgICAgICAgICAgKCpzPT0nLicgfHwgaXNkaWdpdChQeV9DSEFSTUFTSygqcykpKTsKLSAgICAgICAgICAgIGlmICAoZG9uZXx8IWRpZ2l0X29yX2RvdCkgewotICAgICAgICAgICAgICAgIHN3X2Vycm9yPTE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZW5kICE9IHMpCisgICAgICAgICAgICAgICAgLyogPGZsb2F0PjxzaWduZWQtZmxvYXQ+aiAqLworICAgICAgICAgICAgICAgIHMgPSBlbmQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiA8ZmxvYXQ+PHNpZ24+aiAqLworICAgICAgICAgICAgICAgIHkgPSAqcyA9PSAnKycgPyAxLjAgOiAtMS4wOworICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoInN0cnRvZCIsIHJldHVybiAwKQotICAgICAgICAgICAgeiA9IFB5T1NfYXNjaWlfc3RydG9kKHMsICZlbmQpIDsKLSAgICAgICAgICAgIFB5RlBFX0VORF9QUk9URUNUKHopCi0gICAgICAgICAgICBpZiAoZXJybm8gPT0gRVJBTkdFICYmIGZhYnMoeikgPj0gMS4wKSB7Ci0gICAgICAgICAgICAgICAgUHlPU19zbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAotICAgICAgICAgICAgICAgICAgICAiZmxvYXQoKSBvdXQgb2YgcmFuZ2U6ICUuMTUwcyIsIHMpOwotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHM9ZW5kOwotICAgICAgICAgICAgaWYgICgqcz09J0onIHx8ICpzPT0naicpIHsKLQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgIChnb3RfcmUpIHsKLSAgICAgICAgICAgICAgICBzd19lcnJvcj0xOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogYWNjZXB0IGEgcmVhbCBwYXJ0ICovCi0gICAgICAgICAgICB4PXNpZ24qejsKLSAgICAgICAgICAgIGdvdF9yZT0xOwotICAgICAgICAgICAgaWYgIChnb3RfaW0pICBkb25lPTE7Ci0gICAgICAgICAgICB6ID0gLTEuMDsKLSAgICAgICAgICAgIHNpZ24gPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgfSAgLyogZW5kIG9mIHN3aXRjaCAgKi8KLQotICAgIH0gd2hpbGUgKHMgLSBzdGFydCA8IGxlbiAmJiAhc3dfZXJyb3IpOwotCi0gICAgaWYgKHN3X2Vycm9yIHx8IGdvdF9icmFja2V0KSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBhcmcgaXMgYSBtYWxmb3JtZWQgc3RyaW5nIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgaWYgKCEoKnMgPT0gJ2onIHx8ICpzID09ICdKJykpCisgICAgICAgICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgqcyA9PSAnaicgfHwgKnMgPT0gJ0onKSB7CisgICAgICAgICAgICAvKiA8ZmxvYXQ+aiAqLworICAgICAgICAgICAgcysrOworICAgICAgICAgICAgeSA9IHo7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLyogPGZsb2F0PiAqLworICAgICAgICAgICAgeCA9IHo7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBub3Qgc3RhcnRpbmcgd2l0aCA8ZmxvYXQ+OyBtdXN0IGJlIDxzaWduPmogb3IgaiAqLworICAgICAgICBpZiAoKnMgPT0gJysnIHx8ICpzID09ICctJykgeworICAgICAgICAgICAgLyogPHNpZ24+aiAqLworICAgICAgICAgICAgeSA9ICpzID09ICcrJyA/IDEuMCA6IC0xLjA7CisgICAgICAgICAgICBzKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLyogaiAqLworICAgICAgICAgICAgeSA9IDEuMDsKKyAgICAgICAgaWYgKCEoKnMgPT0gJ2onIHx8ICpzID09ICdKJykpCisgICAgICAgICAgICBnb3RvIHBhcnNlX2Vycm9yOworICAgICAgICBzKys7CiAgICAgfQogCisgICAgLyogdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgY2xvc2luZyBicmFja2V0ICovCisgICAgd2hpbGUgKFB5X0lTU1BBQ0UoKnMpKQorICAgICAgICBzKys7CisgICAgaWYgKGdvdF9icmFja2V0KSB7CisgICAgICAgIC8qIGlmIHRoZXJlIHdhcyBhbiBvcGVuaW5nIHBhcmVudGhlc2lzLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgIGNsb3NpbmcgcGFyZW50aGVzaXMgc2hvdWxkIGJlIHJpZ2h0IGhlcmUgKi8KKyAgICAgICAgaWYgKCpzICE9ICcpJykKKyAgICAgICAgICAgIGdvdG8gcGFyc2VfZXJyb3I7CisgICAgICAgIHMrKzsKKyAgICAgICAgd2hpbGUgKFB5X0lTU1BBQ0UoKnMpKQorICAgICAgICAgICAgcysrOworICAgIH0KKworICAgIC8qIHdlIHNob3VsZCBub3cgYmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovCisgICAgaWYgKHMtc3RhcnQgIT0gbGVuKQorICAgICAgICBnb3RvIHBhcnNlX2Vycm9yOworCisKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCisgICAgaWYgKHNfYnVmZmVyKQorICAgICAgICBQeU1lbV9GUkVFKHNfYnVmZmVyKTsKKyNlbmRpZgogICAgIHJldHVybiBjb21wbGV4X3N1YnR5cGVfZnJvbV9kb3VibGVzKHR5cGUsIHgsIHkpOworCisgIHBhcnNlX2Vycm9yOgorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiY29tcGxleCgpIGFyZyBpcyBhIG1hbGZvcm1lZCBzdHJpbmciKTsKKyAgZXJyb3I6CisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQorICAgIGlmIChzX2J1ZmZlcikKKyAgICAgICAgUHlNZW1fRlJFRShzX2J1ZmZlcik7CisjZW5kaWYKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGNvbXBsZXhfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIFB5T2JqZWN0ICpyLCAqaSwgKnRtcCwgKmY7CisgICAgUHlPYmplY3QgKnIsICppLCAqdG1wOwogICAgIFB5TnVtYmVyTWV0aG9kcyAqbmJyLCAqbmJpID0gTlVMTDsKICAgICBQeV9jb21wbGV4IGNyLCBjaTsKICAgICBpbnQgb3duX3IgPSAwOwogICAgIGludCBjcl9pc19jb21wbGV4ID0gMDsKICAgICBpbnQgY2lfaXNfY29tcGxleCA9IDA7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpjb21wbGV4c3RyOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicmVhbCIsICJpbWFnIiwgMH07CiAKICAgICByID0gUHlfRmFsc2U7CkBAIC0xMDgwLDI2ICsxMTcwLDE1IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIC8qIFhYWCBIYWNrIHRvIHN1cHBvcnQgY2xhc3NlcyB3aXRoIF9fY29tcGxleF9fIG1ldGhvZCAqLwotICAgIGlmIChjb21wbGV4c3RyID09IE5VTEwpIHsKLSAgICAgICAgY29tcGxleHN0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9fY29tcGxleF9fIik7Ci0gICAgICAgIGlmIChjb21wbGV4c3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZiA9IFB5T2JqZWN0X0dldEF0dHIociwgY29tcGxleHN0cik7Ci0gICAgaWYgKGYgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKmFyZ3MgPSBQeVR1cGxlX05ldygwKTsKLSAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICByID0gUHlFdmFsX0NhbGxPYmplY3QoZiwgYXJncyk7Ci0gICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKLSAgICAgICAgUHlfREVDUkVGKGYpOwotICAgICAgICBpZiAociA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdG1wID0gdHJ5X2NvbXBsZXhfc3BlY2lhbF9tZXRob2Qocik7CisgICAgaWYgKHRtcCkgeworICAgICAgICByID0gdG1wOwogICAgICAgICBvd25fciA9IDE7CiAgICAgfQorICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgbmJyID0gci0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOwogICAgIGlmIChpICE9IE5VTEwpCiAgICAgICAgIG5iaSA9IGktPm9iX3R5cGUtPnRwX2FzX251bWJlcjsKQEAgLTEyNDgsNyArMTMyNyw4IEBACiAgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19DSEVDS1RZUEVTIHwKKyAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRSwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCiAgICAgY29tcGxleF9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9kZXNjcm9iamVjdC5jIGIvT2JqZWN0cy9kZXNjcm9iamVjdC5jCmluZGV4IGJmZTY2NTYuLjlkNzM1YTIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGVzY3JvYmplY3QuYworKysgYi9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKQEAgLTExMDIsNyArMTEwMiw3IEBACiB9IHByb3BlcnR5b2JqZWN0OwogCiBzdGF0aWMgUHlPYmplY3QgKiBwcm9wZXJ0eV9jb3B5KFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKik7CiAKIHN0YXRpYyBQeU1lbWJlckRlZiBwcm9wZXJ0eV9tZW1iZXJzW10gPSB7CiAgICAgeyJmZ2V0IiwgVF9PQkpFQ1QsIG9mZnNldG9mKHByb3BlcnR5b2JqZWN0LCBwcm9wX2dldCksIFJFQURPTkxZfSwKQEAgLTExMTksNyArMTExOSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcHJvcGVydHlfZ2V0dGVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZ2V0dGVyKQogewotICAgIHJldHVybiBwcm9wZXJ0eV9jb3B5KHNlbGYsIGdldHRlciwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgcmV0dXJuIHByb3BlcnR5X2NvcHkoc2VsZiwgZ2V0dGVyLCBOVUxMLCBOVUxMKTsKIH0KIAogCkBAIC0xMTI5LDcgKzExMjksNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHByb3BlcnR5X3NldHRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnNldHRlcikKIHsKLSAgICByZXR1cm4gcHJvcGVydHlfY29weShzZWxmLCBOVUxMLCBzZXR0ZXIsIE5VTEwsIE5VTEwpOworICAgIHJldHVybiBwcm9wZXJ0eV9jb3B5KHNlbGYsIE5VTEwsIHNldHRlciwgTlVMTCk7CiB9CiAKIApAQCAtMTEzOSw3ICsxMTM5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwcm9wZXJ0eV9kZWxldGVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZGVsZXRlcikKIHsKLSAgICByZXR1cm4gcHJvcGVydHlfY29weShzZWxmLCBOVUxMLCBOVUxMLCBkZWxldGVyLCBOVUxMKTsKKyAgICByZXR1cm4gcHJvcGVydHlfY29weShzZWxmLCBOVUxMLCBOVUxMLCBkZWxldGVyKTsKIH0KIAogCkBAIC0xMjA4LDExICsxMjA4LDEwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wcm9wZXJ0eV9jb3B5KFB5T2JqZWN0ICpvbGQsIFB5T2JqZWN0ICpnZXQsIFB5T2JqZWN0ICpzZXQsIFB5T2JqZWN0ICpkZWwsCi0gICAgICAgICAgICAgICAgUHlPYmplY3QgKmRvYykKK3Byb3BlcnR5X2NvcHkoUHlPYmplY3QgKm9sZCwgUHlPYmplY3QgKmdldCwgUHlPYmplY3QgKnNldCwgUHlPYmplY3QgKmRlbCkKIHsKICAgICBwcm9wZXJ0eW9iamVjdCAqcG9sZCA9IChwcm9wZXJ0eW9iamVjdCAqKW9sZDsKLSAgICBQeU9iamVjdCAqbmV3LCAqdHlwZTsKKyAgICBQeU9iamVjdCAqbmV3LCAqdHlwZSwgKmRvYzsKIAogICAgIHR5cGUgPSBQeU9iamVjdF9UeXBlKG9sZCk7CiAgICAgaWYgKHR5cGUgPT0gTlVMTCkKQEAgLTEyMzAsMTUgKzEyMjksMTIgQEAKICAgICAgICAgUHlfWERFQ1JFRihkZWwpOwogICAgICAgICBkZWwgPSBwb2xkLT5wcm9wX2RlbCA/IHBvbGQtPnByb3BfZGVsIDogUHlfTm9uZTsKICAgICB9Ci0gICAgaWYgKGRvYyA9PSBOVUxMIHx8IGRvYyA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIFB5X1hERUNSRUYoZG9jKTsKLSAgICAgICAgaWYgKHBvbGQtPmdldHRlcl9kb2MgJiYgZ2V0ICE9IFB5X05vbmUpIHsKLSAgICAgICAgICAgIC8qIG1ha2UgX2luaXQgdXNlIF9fZG9jX18gZnJvbSBnZXR0ZXIgKi8KLSAgICAgICAgICAgIGRvYyA9IFB5X05vbmU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBkb2MgPSBwb2xkLT5wcm9wX2RvYyA/IHBvbGQtPnByb3BfZG9jIDogUHlfTm9uZTsKLSAgICAgICAgfQorICAgIGlmIChwb2xkLT5nZXR0ZXJfZG9jICYmIGdldCAhPSBQeV9Ob25lKSB7CisgICAgICAgIC8qIG1ha2UgX2luaXQgdXNlIF9fZG9jX18gZnJvbSBnZXR0ZXIgKi8KKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRvYyA9IHBvbGQtPnByb3BfZG9jID8gcG9sZC0+cHJvcF9kb2MgOiBQeV9Ob25lOwogICAgIH0KIAogICAgIG5ldyA9ICBQeU9iamVjdF9DYWxsRnVuY3Rpb24odHlwZSwgIk9PT08iLCBnZXQsIHNldCwgZGVsLCBkb2MpOwpAQCAtMTI4MCwyNiArMTI3NiwyOSBAQAogICAgIC8qIGlmIG5vIGRvY3N0cmluZyBnaXZlbiBhbmQgdGhlIGdldHRlciBoYXMgb25lLCB1c2UgdGhhdCBvbmUgKi8KICAgICBpZiAoKGRvYyA9PSBOVUxMIHx8IGRvYyA9PSBQeV9Ob25lKSAmJiBnZXQgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqZ2V0X2RvYyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoZ2V0LCAiX19kb2NfXyIpOwotICAgICAgICBpZiAoZ2V0X2RvYyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvKiBnZXRfZG9jIGFscmVhZHkgSU5DUkVGJ2QgYnkgR2V0QXR0ciAqLwotICAgICAgICAgICAgaWYgKFB5X1RZUEUoc2VsZik9PSZQeVByb3BlcnR5X1R5cGUpIHsKKyAgICAgICAgaWYgKGdldF9kb2MpIHsKKyAgICAgICAgICAgIGlmIChQeV9UWVBFKHNlbGYpID09ICZQeVByb3BlcnR5X1R5cGUpIHsKICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHByb3AtPnByb3BfZG9jKTsKICAgICAgICAgICAgICAgICBwcm9wLT5wcm9wX2RvYyA9IGdldF9kb2M7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qIFB1dCBfX2RvY19fIGluIGRpY3Qgb2YgdGhlIHN1YmNsYXNzIGluc3RhbmNlIGluc3RlYWQsCi0gICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGl0IGdldHMgc2hhZG93ZWQgYnkgY2xhc3MncyBfX2RvY19fLiAqLwotICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKHNlbGYsICJfX2RvY19fIiwgZ2V0X2RvYykgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIERFQ1JFRiBmb3IgcHJvcHMgaGFuZGxlZCBieSBfZGVhbGxvYyAqLwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZ2V0X2RvYyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGlzIGEgcHJvcGVydHkgc3ViY2xhc3MsIHB1dCBfX2RvY19fCisgICAgICAgICAgICAgICAgaW4gZGljdCBvZiB0aGUgc3ViY2xhc3MgaW5zdGFuY2UgaW5zdGVhZCwKKyAgICAgICAgICAgICAgICBvdGhlcndpc2UgaXQgZ2V0cyBzaGFkb3dlZCBieSBfX2RvY19fIGluIHRoZQorICAgICAgICAgICAgICAgIGNsYXNzJ3MgZGljdC4gKi8KKyAgICAgICAgICAgICAgICBpbnQgZXJyID0gUHlPYmplY3RfU2V0QXR0clN0cmluZyhzZWxmLCAiX19kb2NfXyIsIGdldF9kb2MpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihnZXRfZG9jKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcHJvcC0+Z2V0dGVyX2RvYyA9IDE7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19FeGNlcHRpb24pKSB7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9PYmplY3RzL2RpY3RvYmplY3QuYyBiL09iamVjdHMvZGljdG9iamVjdC5jCmluZGV4IDlkMTliMWQuLjM2NzBlOTcgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGljdG9iamVjdC5jCisrKyBiL09iamVjdHMvZGljdG9iamVjdC5jCkBAIC0xODAsNiArMTgwLDI0IEBACiB9CiAjZW5kaWYKIAorLyogRGVidWcgc3RhdGlzdGljIHRvIGNvdW50IEdDIHRyYWNraW5nIG9mIGRpY3RzICovCisjaWZkZWYgU0hPV19UUkFDS19DT1VOVAorc3RhdGljIFB5X3NzaXplX3QgY291bnRfdW50cmFja2VkID0gMDsKK3N0YXRpYyBQeV9zc2l6ZV90IGNvdW50X3RyYWNrZWQgPSAwOworCitzdGF0aWMgdm9pZAorc2hvd190cmFjayh2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiRGljdHMgY3JlYXRlZDogJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwKKyAgICAgICAgY291bnRfdHJhY2tlZCArIGNvdW50X3VudHJhY2tlZCk7CisgICAgZnByaW50ZihzdGRlcnIsICJEaWN0cyB0cmFja2VkIGJ5IHRoZSBHQzogJSIgUFlfRk9STUFUX1NJWkVfVAorICAgICAgICAiZFxuIiwgY291bnRfdHJhY2tlZCk7CisgICAgZnByaW50ZihzdGRlcnIsICIlLjJmJSUgZGljdCB0cmFja2luZyByYXRlXG5cbiIsCisgICAgICAgICgxMDAuMCpjb3VudF90cmFja2VkLyhjb3VudF91bnRyYWNrZWQrY291bnRfdHJhY2tlZCkpKTsKK30KKyNlbmRpZgorCisKIC8qIEluaXRpYWxpemF0aW9uIG1hY3Jvcy4KICAgIFRoZXJlIGFyZSB0d28gd2F5cyB0byBjcmVhdGUgYSBkaWN0OiAgUHlEaWN0X05ldygpIGlzIHRoZSBtYWluIEMgQVBJCiAgICBmdW5jdGlvbiwgYW5kIHRoZSB0cF9uZXcgc2xvdCBtYXBzIHRvIGRpY3RfbmV3KCkuICBJbiB0aGUgbGF0dGVyIGNhc2Ugd2UKQEAgLTIzMyw2ICsyNTEsOSBAQAogI2lmZGVmIFNIT1dfQUxMT0NfQ09VTlQKICAgICAgICAgUHlfQXRFeGl0KHNob3dfYWxsb2MpOwogI2VuZGlmCisjaWZkZWYgU0hPV19UUkFDS19DT1VOVAorICAgICAgICBQeV9BdEV4aXQoc2hvd190cmFjayk7CisjZW5kaWYKICAgICB9CiAgICAgaWYgKG51bWZyZWUpIHsKICAgICAgICAgbXAgPSBmcmVlX2xpc3RbLS1udW1mcmVlXTsKQEAgLTI2MiwxMCArMjgzLDEyIEBACiAjZW5kaWYKICAgICB9CiAgICAgbXAtPm1hX2xvb2t1cCA9IGxvb2tkaWN0X3N0cmluZzsKKyNpZmRlZiBTSE9XX1RSQUNLX0NPVU5UCisgICAgY291bnRfdW50cmFja2VkKys7CisjZW5kaWYKICNpZmRlZiBTSE9XX0NPTlZFUlNJT05fQ09VTlRTCiAgICAgKytjcmVhdGVkOwogI2VuZGlmCi0gICAgX1B5T2JqZWN0X0dDX1RSQUNLKG1wKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbXA7CiB9CiAKQEAgLTQzMyw2ICs0NTYsNTMgQEAKICAgICByZXR1cm4gMDsKIH0KIAorI2lmZGVmIFNIT1dfVFJBQ0tfQ09VTlQKKyNkZWZpbmUgSU5DUkVBU0VfVFJBQ0tfQ09VTlQgXAorICAgIChjb3VudF90cmFja2VkKyssIGNvdW50X3VudHJhY2tlZC0tKTsKKyNkZWZpbmUgREVDUkVBU0VfVFJBQ0tfQ09VTlQgXAorICAgIChjb3VudF90cmFja2VkLS0sIGNvdW50X3VudHJhY2tlZCsrKTsKKyNlbHNlCisjZGVmaW5lIElOQ1JFQVNFX1RSQUNLX0NPVU5UCisjZGVmaW5lIERFQ1JFQVNFX1RSQUNLX0NPVU5UCisjZW5kaWYKKworI2RlZmluZSBNQUlOVEFJTl9UUkFDS0lORyhtcCwga2V5LCB2YWx1ZSkgXAorICAgIGRvIHsgXAorICAgICAgICBpZiAoIV9QeU9iamVjdF9HQ19JU19UUkFDS0VEKG1wKSkgeyBcCisgICAgICAgICAgICBpZiAoX1B5T2JqZWN0X0dDX01BWV9CRV9UUkFDS0VEKGtleSkgfHwgXAorICAgICAgICAgICAgICAgIF9QeU9iamVjdF9HQ19NQVlfQkVfVFJBQ0tFRCh2YWx1ZSkpIHsgXAorICAgICAgICAgICAgICAgIF9QeU9iamVjdF9HQ19UUkFDSyhtcCk7IFwKKyAgICAgICAgICAgICAgICBJTkNSRUFTRV9UUkFDS19DT1VOVCBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGlsZSgwKQorCit2b2lkCitfUHlEaWN0X01heWJlVW50cmFjayhQeU9iamVjdCAqb3ApCit7CisgICAgUHlEaWN0T2JqZWN0ICptcDsKKyAgICBQeU9iamVjdCAqdmFsdWU7CisgICAgUHlfc3NpemVfdCBtYXNrLCBpOworICAgIFB5RGljdEVudHJ5ICplcDsKKworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qob3ApIHx8ICFfUHlPYmplY3RfR0NfSVNfVFJBQ0tFRChvcCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1wID0gKFB5RGljdE9iamVjdCAqKSBvcDsKKyAgICBlcCA9IG1wLT5tYV90YWJsZTsKKyAgICBtYXNrID0gbXAtPm1hX21hc2s7CisgICAgZm9yIChpID0gMDsgaSA8PSBtYXNrOyBpKyspIHsKKyAgICAgICAgaWYgKCh2YWx1ZSA9IGVwW2ldLm1lX3ZhbHVlKSA9PSBOVUxMKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChfUHlPYmplY3RfR0NfTUFZX0JFX1RSQUNLRUQodmFsdWUpIHx8CisgICAgICAgICAgICBfUHlPYmplY3RfR0NfTUFZX0JFX1RSQUNLRUQoZXBbaV0ubWVfa2V5KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgREVDUkVBU0VfVFJBQ0tfQ09VTlQKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhvcCk7Cit9CisKKwogLyoKIEludGVybmFsIHJvdXRpbmUgdG8gaW5zZXJ0IGEgbmV3IGl0ZW0gaW50byB0aGUgdGFibGUuCiBVc2VkIGJvdGggYnkgdGhlIGludGVybmFsIHJlc2l6ZSByb3V0aW5lIGFuZCBieSB0aGUgcHVibGljIGluc2VydCByb3V0aW5lLgpAQCAtNDUzLDYgKzUyMyw3IEBACiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgTUFJTlRBSU5fVFJBQ0tJTkcobXAsIGtleSwgdmFsdWUpOwogICAgIGlmIChlcC0+bWVfdmFsdWUgIT0gTlVMTCkgewogICAgICAgICBvbGRfdmFsdWUgPSBlcC0+bWVfdmFsdWU7CiAgICAgICAgIGVwLT5tZV92YWx1ZSA9IHZhbHVlOwpAQCAtNDkyLDYgKzU2Myw3IEBACiAgICAgUHlEaWN0RW50cnkgKmVwMCA9IG1wLT5tYV90YWJsZTsKICAgICByZWdpc3RlciBQeURpY3RFbnRyeSAqZXA7CiAKKyAgICBNQUlOVEFJTl9UUkFDS0lORyhtcCwga2V5LCB2YWx1ZSk7CiAgICAgaSA9IGhhc2ggJiBtYXNrOwogICAgIGVwID0gJmVwMFtpXTsKICAgICBmb3IgKHBlcnR1cmIgPSBoYXNoOyBlcC0+bWVfa2V5ICE9IE5VTEw7IHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQpIHsKQEAgLTY0MCw5ICs3MTIsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIFdlIGNhbiBhcnJpdmUgaGVyZSB3aXRoIGEgTlVMTCB0c3RhdGUgZHVyaW5nIGluaXRpYWxpemF0aW9uOgotICAgICAgIHRyeSBydW5uaW5nICJweXRob24gLVdpIiBmb3IgYW4gZXhhbXBsZSByZWxhdGVkIHRvIHN0cmluZwotICAgICAgIGludGVybmluZy4gIExldCdzIGp1c3QgaG9wZSB0aGF0IG5vIGV4Y2VwdGlvbiBvY2N1cnMgdGhlbi4uLiAqLworICAgIC8qIFdlIGNhbiBhcnJpdmUgaGVyZSB3aXRoIGEgTlVMTCB0c3RhdGUgZHVyaW5nIGluaXRpYWxpemF0aW9uOiB0cnkKKyAgICAgICBydW5uaW5nICJweXRob24gLVdpIiBmb3IgYW4gZXhhbXBsZSByZWxhdGVkIHRvIHN0cmluZyBpbnRlcm5pbmcuCisgICAgICAgTGV0J3MganVzdCBob3BlIHRoYXQgbm8gZXhjZXB0aW9uIG9jY3VycyB0aGVuLi4uICBUaGlzIG11c3QgYmUKKyAgICAgICBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50IGFuZCBub3QgUHlUaHJlYWRTdGF0ZV9HRVQoKSBiZWNhdXNlIGluIGRlYnVnCisgICAgICAgbW9kZSwgdGhlIGxhdHRlciBjb21wbGFpbnMgaWYgdHN0YXRlIGlzIE5VTEwuICovCiAgICAgdHN0YXRlID0gX1B5VGhyZWFkU3RhdGVfQ3VycmVudDsKICAgICBpZiAodHN0YXRlICE9IE5VTEwgJiYgdHN0YXRlLT5jdXJleGNfdHlwZSAhPSBOVUxMKSB7CiAgICAgICAgIC8qIHByZXNlcnZlIHRoZSBleGlzdGluZyBleGNlcHRpb24gKi8KQEAgLTEwODEsMTUgKzExNTUsMTkgQEAKICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3QobXApKSB7CiAgICAgICAgICAgICAvKiBMb29rIHVwIF9fbWlzc2luZ19fIG1ldGhvZCBpZiB3ZSdyZSBhIHN1YmNsYXNzLiAqLwotICAgICAgICAgICAgUHlPYmplY3QgKm1pc3Npbmc7CisgICAgICAgICAgICBQeU9iamVjdCAqbWlzc2luZywgKnJlczsKICAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqbWlzc2luZ19zdHIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKG1pc3Npbmdfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgbWlzc2luZ19zdHIgPQotICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiX19taXNzaW5nX18iKTsKLSAgICAgICAgICAgIG1pc3NpbmcgPSBfUHlUeXBlX0xvb2t1cChQeV9UWVBFKG1wKSwgbWlzc2luZ19zdHIpOwotICAgICAgICAgICAgaWYgKG1pc3NpbmcgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhtaXNzaW5nLAotICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKiltcCwga2V5LCBOVUxMKTsKKyAgICAgICAgICAgIG1pc3NpbmcgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbCgoUHlPYmplY3QgKiltcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19taXNzaW5nX18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtaXNzaW5nX3N0cik7CisgICAgICAgICAgICBpZiAobWlzc2luZyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhtaXNzaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCBOVUxMKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobWlzc2luZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE5MDIsOCArMTk4MCw3IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZGVmbHQpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmx0OwogICAgICAgICB9Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19LZXlFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJwb3AoKTogZGljdGlvbmFyeSBpcyBlbXB0eSIpOworICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoIVB5U3RyaW5nX0NoZWNrRXhhY3Qoa2V5KSB8fApAQCAtMjEwNiw2ICsyMTgzLDE4IEBACiBQeURvY19TVFJWQVIoaXRlcml0ZW1zX19kb2NfXywKICJELml0ZXJpdGVtcygpIC0+IGFuIGl0ZXJhdG9yIG92ZXIgdGhlIChrZXksIHZhbHVlKSBpdGVtcyBvZiBEIik7CiAKKy8qIEZvcndhcmQgKi8KK3N0YXRpYyBQeU9iamVjdCAqZGljdGtleXNfbmV3KFB5T2JqZWN0ICopOworc3RhdGljIFB5T2JqZWN0ICpkaWN0aXRlbXNfbmV3KFB5T2JqZWN0ICopOworc3RhdGljIFB5T2JqZWN0ICpkaWN0dmFsdWVzX25ldyhQeU9iamVjdCAqKTsKKworUHlEb2NfU1RSVkFSKHZpZXdrZXlzX19kb2NfXywKKyAgICAgICAgICAgICAiRC52aWV3a2V5cygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGtleXMiKTsKK1B5RG9jX1NUUlZBUih2aWV3aXRlbXNfX2RvY19fLAorICAgICAgICAgICAgICJELnZpZXdpdGVtcygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGl0ZW1zIik7CitQeURvY19TVFJWQVIodmlld3ZhbHVlc19fZG9jX18sCisgICAgICAgICAgICAgIkQudmlld3ZhbHVlcygpIC0+IGFuIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyB2YWx1ZXMiKTsKKwogc3RhdGljIFB5TWV0aG9kRGVmIG1hcHBfbWV0aG9kc1tdID0gewogICAgIHsiX19jb250YWluc19fIiwoUHlDRnVuY3Rpb24pZGljdF9jb250YWlucywgICAgICAgICBNRVRIX08gfCBNRVRIX0NPRVhJU1QsCiAgICAgIGNvbnRhaW5zX19kb2NfX30sCkBAIC0yMTI5LDYgKzIyMTgsMTIgQEAKICAgICAgaXRlbXNfX2RvY19ffSwKICAgICB7InZhbHVlcyIsICAgICAgICAgIChQeUNGdW5jdGlvbilkaWN0X3ZhbHVlcywgICAgICAgTUVUSF9OT0FSR1MsCiAgICAgIHZhbHVlc19fZG9jX199LAorICAgIHsidmlld2tleXMiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3RrZXlzX25ldywgICAgICBNRVRIX05PQVJHUywKKyAgICAgdmlld2tleXNfX2RvY19ffSwKKyAgICB7InZpZXdpdGVtcyIsICAgICAgIChQeUNGdW5jdGlvbilkaWN0aXRlbXNfbmV3LCAgICAgTUVUSF9OT0FSR1MsCisgICAgIHZpZXdpdGVtc19fZG9jX199LAorICAgIHsidmlld3ZhbHVlcyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3R2YWx1ZXNfbmV3LCAgICBNRVRIX05PQVJHUywKKyAgICAgdmlld3ZhbHVlc19fZG9jX199LAogICAgIHsidXBkYXRlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3RfdXBkYXRlLCAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICB1cGRhdGVfX2RvY19ffSwKICAgICB7ImZyb21rZXlzIiwgICAgICAgIChQeUNGdW5jdGlvbilkaWN0X2Zyb21rZXlzLCAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9DTEFTUywKQEAgLTIyMDIsOSArMjI5NywxOCBAQAogICAgICAgICBhc3NlcnQoZC0+bWFfdGFibGUgPT0gTlVMTCAmJiBkLT5tYV9maWxsID09IDAgJiYgZC0+bWFfdXNlZCA9PSAwKTsKICAgICAgICAgSU5JVF9OT05aRVJPX0RJQ1RfU0xPVFMoZCk7CiAgICAgICAgIGQtPm1hX2xvb2t1cCA9IGxvb2tkaWN0X3N0cmluZzsKKyAgICAgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGVseSB0cmFja2VkIGJ5IHRwX2FsbG9jICovCisgICAgICAgIGlmICh0eXBlID09ICZQeURpY3RfVHlwZSkKKyAgICAgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGQpOwogI2lmZGVmIFNIT1dfQ09OVkVSU0lPTl9DT1VOVFMKICAgICAgICAgKytjcmVhdGVkOwogI2VuZGlmCisjaWZkZWYgU0hPV19UUkFDS19DT1VOVAorICAgICAgICBpZiAoX1B5T2JqZWN0X0dDX0lTX1RSQUNLRUQoZCkpCisgICAgICAgICAgICBjb3VudF90cmFja2VkKys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvdW50X3VudHJhY2tlZCsrOworI2VuZGlmCiAgICAgfQogICAgIHJldHVybiBzZWxmOwogfQpAQCAtMjYxMywzICsyNzE3LDQ5NCBAQAogICAgIGRpY3RpdGVyX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsCiB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBWaWV3IG9iamVjdHMgZm9yIGtleXMoKSwgaXRlbXMoKSwgdmFsdWVzKCkuICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBpbnN0YW5jZSBsYXktb3V0IGlzIHRoZSBzYW1lIGZvciBhbGwgdGhyZWU7IGJ1dCB0aGUgdHlwZSBkaWZmZXJzLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5RGljdE9iamVjdCAqZHZfZGljdDsKK30gZGljdHZpZXdvYmplY3Q7CisKKworc3RhdGljIHZvaWQKK2RpY3R2aWV3X2RlYWxsb2MoZGljdHZpZXdvYmplY3QgKmR2KQoreworICAgIFB5X1hERUNSRUYoZHYtPmR2X2RpY3QpOworICAgIFB5T2JqZWN0X0dDX0RlbChkdik7Cit9CisKK3N0YXRpYyBpbnQKK2RpY3R2aWV3X3RyYXZlcnNlKGRpY3R2aWV3b2JqZWN0ICpkdiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUHlfVklTSVQoZHYtPmR2X2RpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlfc3NpemVfdAorZGljdHZpZXdfbGVuKGRpY3R2aWV3b2JqZWN0ICpkdikKK3sKKyAgICBQeV9zc2l6ZV90IGxlbiA9IDA7CisgICAgaWYgKGR2LT5kdl9kaWN0ICE9IE5VTEwpCisgICAgICAgIGxlbiA9IGR2LT5kdl9kaWN0LT5tYV91c2VkOworICAgIHJldHVybiBsZW47Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0dmlld19uZXcoUHlPYmplY3QgKmRpY3QsIFB5VHlwZU9iamVjdCAqdHlwZSkKK3sKKyAgICBkaWN0dmlld29iamVjdCAqZHY7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICghUHlEaWN0X0NoZWNrKGRpY3QpKSB7CisgICAgICAgIC8qIFhYWCBHZXQgcmlkIG9mIHRoaXMgcmVzdHJpY3Rpb24gbGF0ZXIgKi8KKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICIlcygpIHJlcXVpcmVzIGEgZGljdCBhcmd1bWVudCwgbm90ICclcyciLAorICAgICAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSwgZGljdC0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBkdiA9IFB5T2JqZWN0X0dDX05ldyhkaWN0dmlld29iamVjdCwgdHlwZSk7CisgICAgaWYgKGR2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihkaWN0KTsKKyAgICBkdi0+ZHZfZGljdCA9IChQeURpY3RPYmplY3QgKilkaWN0OworICAgIF9QeU9iamVjdF9HQ19UUkFDSyhkdik7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKWR2OworfQorCisvKiBUT0RPKGd1aWRvKTogVGhlIHZpZXdzIG9iamVjdHMgYXJlIG5vdCBjb21wbGV0ZToKKworICogc3VwcG9ydCBtb3JlIHNldCBvcGVyYXRpb25zCisgKiBzdXBwb3J0IGFyYml0cmFyeSBtYXBwaW5ncz8KKyAgIC0gZWl0aGVyIHRoZXNlIHNob3VsZCBiZSBzdGF0aWMgb3IgZXhwb3J0ZWQgaW4gZGljdG9iamVjdC5oCisgICAtIGlmIHB1YmxpYyB0aGVuIHRoZXkgc2hvdWxkIHByb2JhYmx5IGJlIGluIGJ1aWx0aW5zCisqLworCisvKiBSZXR1cm4gMSBpZiBzZWxmIGlzIGEgc3Vic2V0IG9mIG90aGVyLCBpdGVyYXRpbmcgb3ZlciBzZWxmOworICAgMCBpZiBub3Q7IC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLiAqLworc3RhdGljIGludAorYWxsX2NvbnRhaW5lZF9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyKQoreworICAgIFB5T2JqZWN0ICppdGVyID0gUHlPYmplY3RfR2V0SXRlcihzZWxmKTsKKyAgICBpbnQgb2sgPSAxOworCisgICAgaWYgKGl0ZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGZvciAoOzspIHsKKyAgICAgICAgUHlPYmplY3QgKm5leHQgPSBQeUl0ZXJfTmV4dChpdGVyKTsKKyAgICAgICAgaWYgKG5leHQgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgb2sgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG9rID0gUHlTZXF1ZW5jZV9Db250YWlucyhvdGhlciwgbmV4dCk7CisgICAgICAgIFB5X0RFQ1JFRihuZXh0KTsKKyAgICAgICAgaWYgKG9rIDw9IDApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgUHlfREVDUkVGKGl0ZXIpOworICAgIHJldHVybiBvazsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RpY3R2aWV3X3JpY2hjb21wYXJlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIsIGludCBvcCkKK3sKKyAgICBQeV9zc2l6ZV90IGxlbl9zZWxmLCBsZW5fb3RoZXI7CisgICAgaW50IG9rOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisKKyAgICBhc3NlcnQoc2VsZiAhPSBOVUxMKTsKKyAgICBhc3NlcnQoUHlEaWN0Vmlld1NldF9DaGVjayhzZWxmKSk7CisgICAgYXNzZXJ0KG90aGVyICE9IE5VTEwpOworCisgICAgaWYgKCFQeUFueVNldF9DaGVjayhvdGhlcikgJiYgIVB5RGljdFZpZXdTZXRfQ2hlY2sob3RoZXIpKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7CisgICAgICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKKyAgICB9CisKKyAgICBsZW5fc2VsZiA9IFB5T2JqZWN0X1NpemUoc2VsZik7CisgICAgaWYgKGxlbl9zZWxmIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbGVuX290aGVyID0gUHlPYmplY3RfU2l6ZShvdGhlcik7CisgICAgaWYgKGxlbl9vdGhlciA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb2sgPSAwOworICAgIHN3aXRjaChvcCkgeworCisgICAgY2FzZSBQeV9ORToKKyAgICBjYXNlIFB5X0VROgorICAgICAgICBpZiAobGVuX3NlbGYgPT0gbGVuX290aGVyKQorICAgICAgICAgICAgb2sgPSBhbGxfY29udGFpbmVkX2luKHNlbGYsIG90aGVyKTsKKyAgICAgICAgaWYgKG9wID09IFB5X05FICYmIG9rID49IDApCisgICAgICAgICAgICBvayA9ICFvazsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFB5X0xUOgorICAgICAgICBpZiAobGVuX3NlbGYgPCBsZW5fb3RoZXIpCisgICAgICAgICAgICBvayA9IGFsbF9jb250YWluZWRfaW4oc2VsZiwgb3RoZXIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBQeV9MRToKKyAgICAgICAgICBpZiAobGVuX3NlbGYgPD0gbGVuX290aGVyKQorICAgICAgICAgICAgICBvayA9IGFsbF9jb250YWluZWRfaW4oc2VsZiwgb3RoZXIpOworICAgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBQeV9HVDoKKyAgICAgICAgaWYgKGxlbl9zZWxmID4gbGVuX290aGVyKQorICAgICAgICAgICAgb2sgPSBhbGxfY29udGFpbmVkX2luKG90aGVyLCBzZWxmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFB5X0dFOgorICAgICAgICBpZiAobGVuX3NlbGYgPj0gbGVuX290aGVyKQorICAgICAgICAgICAgb2sgPSBhbGxfY29udGFpbmVkX2luKG90aGVyLCBzZWxmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICB9CisgICAgaWYgKG9rIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gb2sgPyBQeV9UcnVlIDogUHlfRmFsc2U7CisgICAgUHlfSU5DUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RpY3R2aWV3X3JlcHIoZGljdHZpZXdvYmplY3QgKmR2KQoreworICAgIFB5T2JqZWN0ICpzZXE7CisgICAgUHlPYmplY3QgKnNlcV9zdHI7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKworICAgIHNlcSA9IFB5U2VxdWVuY2VfTGlzdCgoUHlPYmplY3QgKilkdik7CisgICAgaWYgKHNlcSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlcV9zdHIgPSBQeU9iamVjdF9SZXByKHNlcSk7CisgICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbUZvcm1hdCgiJXMoJXMpIiwgUHlfVFlQRShkdiktPnRwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcoc2VxX3N0cikpOworICAgIFB5X0RFQ1JFRihzZXFfc3RyKTsKKyAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKioqIGRpY3Rfa2V5cyAqKiovCisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0a2V5c19pdGVyKGRpY3R2aWV3b2JqZWN0ICpkdikKK3sKKyAgICBpZiAoZHYtPmR2X2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICB9CisgICAgcmV0dXJuIGRpY3RpdGVyX25ldyhkdi0+ZHZfZGljdCwgJlB5RGljdEl0ZXJLZXlfVHlwZSk7Cit9CisKK3N0YXRpYyBpbnQKK2RpY3RrZXlzX2NvbnRhaW5zKGRpY3R2aWV3b2JqZWN0ICpkdiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBpZiAoZHYtPmR2X2RpY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIFB5RGljdF9Db250YWlucygoUHlPYmplY3QgKilkdi0+ZHZfZGljdCwgb2JqKTsKK30KKworc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIGRpY3RrZXlzX2FzX3NlcXVlbmNlID0geworICAgIChsZW5mdW5jKWRpY3R2aWV3X2xlbiwgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2NvbmNhdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3JlcGVhdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2l0ZW0gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9zbGljZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2Fzc19pdGVtICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfYXNzX3NsaWNlICovCisgICAgKG9iam9ianByb2MpZGljdGtleXNfY29udGFpbnMsICAgICAgLyogc3FfY29udGFpbnMgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCoKK2RpY3R2aWV3c19zdWIoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICpvdGhlcikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlTZXRfTmV3KHNlbGYpOworICAgIFB5T2JqZWN0ICp0bXA7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHRtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocmVzdWx0LCAiZGlmZmVyZW5jZV91cGRhdGUiLCAiTyIsIG90aGVyKTsKKyAgICBpZiAodG1wID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X0RFQ1JFRih0bXApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2RpY3R2aWV3c19hbmQoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICpvdGhlcikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlTZXRfTmV3KHNlbGYpOworICAgIFB5T2JqZWN0ICp0bXA7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHRtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocmVzdWx0LCAiaW50ZXJzZWN0aW9uX3VwZGF0ZSIsICJPIiwgb3RoZXIpOworICAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfREVDUkVGKHRtcCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0KgorZGljdHZpZXdzX29yKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqb3RoZXIpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5U2V0X05ldyhzZWxmKTsKKyAgICBQeU9iamVjdCAqdG1wOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0bXAgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHJlc3VsdCwgInVwZGF0ZSIsICJPIiwgb3RoZXIpOworICAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfREVDUkVGKHRtcCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0KgorZGljdHZpZXdzX3hvcihQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKm90aGVyKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeVNldF9OZXcoc2VsZik7CisgICAgUHlPYmplY3QgKnRtcDsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdG1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChyZXN1bHQsICJzeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUiLCAiTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcik7CisgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9ERUNSRUYodG1wKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUHlOdW1iZXJNZXRob2RzIGRpY3R2aWV3c19hc19udW1iZXIgPSB7CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypuYl9hZGQqLworICAgIChiaW5hcnlmdW5jKWRpY3R2aWV3c19zdWIsICAgICAgICAgIC8qbmJfc3VidHJhY3QqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfbXVsdGlwbHkqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfZGl2aWRlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX3JlbWFpbmRlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypuYl9kaXZtb2QqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfcG93ZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfbmVnYXRpdmUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfcG9zaXRpdmUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfYWJzb2x1dGUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfbm9uemVybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypuYl9pbnZlcnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfbHNoaWZ0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX3JzaGlmdCovCisgICAgKGJpbmFyeWZ1bmMpZGljdHZpZXdzX2FuZCwgICAgICAgICAgLypuYl9hbmQqLworICAgIChiaW5hcnlmdW5jKWRpY3R2aWV3c194b3IsICAgICAgICAgIC8qbmJfeG9yKi8KKyAgICAoYmluYXJ5ZnVuYylkaWN0dmlld3Nfb3IsICAgICAgICAgICAvKm5iX29yKi8KK307CisKK3N0YXRpYyBQeU1ldGhvZERlZiBkaWN0a2V5c19tZXRob2RzW10gPSB7CisgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKK1B5VHlwZU9iamVjdCBQeURpY3RLZXlzX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAiZGljdF9rZXlzIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YoZGljdHZpZXdvYmplY3QpLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAvKiBtZXRob2RzICovCisgICAgKGRlc3RydWN0b3IpZGljdHZpZXdfZGVhbGxvYywgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAocmVwcmZ1bmMpZGljdHZpZXdfcmVwciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAmZGljdHZpZXdzX2FzX251bWJlciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgICZkaWN0a2V5c19hc19zZXF1ZW5jZSwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfAorICAgICAgICBQeV9UUEZMQUdTX0NIRUNLVFlQRVMsICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpZGljdHZpZXdfdHJhdmVyc2UsICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgZGljdHZpZXdfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAoZ2V0aXRlcmZ1bmMpZGljdGtleXNfaXRlciwgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgZGljdGtleXNfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwKK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0a2V5c19uZXcoUHlPYmplY3QgKmRpY3QpCit7CisgICAgcmV0dXJuIGRpY3R2aWV3X25ldyhkaWN0LCAmUHlEaWN0S2V5c19UeXBlKTsKK30KKworLyoqKiBkaWN0X2l0ZW1zICoqKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2RpY3RpdGVtc19pdGVyKGRpY3R2aWV3b2JqZWN0ICpkdikKK3sKKyAgICBpZiAoZHYtPmR2X2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICB9CisgICAgcmV0dXJuIGRpY3RpdGVyX25ldyhkdi0+ZHZfZGljdCwgJlB5RGljdEl0ZXJJdGVtX1R5cGUpOworfQorCitzdGF0aWMgaW50CitkaWN0aXRlbXNfY29udGFpbnMoZGljdHZpZXdvYmplY3QgKmR2LCBQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZSwgKmZvdW5kOworICAgIGlmIChkdi0+ZHZfZGljdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2sob2JqKSB8fCBQeVR1cGxlX0dFVF9TSVpFKG9iaikgIT0gMikKKyAgICAgICAgcmV0dXJuIDA7CisgICAga2V5ID0gUHlUdXBsZV9HRVRfSVRFTShvYmosIDApOworICAgIHZhbHVlID0gUHlUdXBsZV9HRVRfSVRFTShvYmosIDEpOworICAgIGZvdW5kID0gUHlEaWN0X0dldEl0ZW0oKFB5T2JqZWN0ICopZHYtPmR2X2RpY3QsIGtleSk7CisgICAgaWYgKGZvdW5kID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHZhbHVlLCBmb3VuZCwgUHlfRVEpOworfQorCitzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgZGljdGl0ZW1zX2FzX3NlcXVlbmNlID0geworICAgIChsZW5mdW5jKWRpY3R2aWV3X2xlbiwgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2NvbmNhdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3JlcGVhdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2l0ZW0gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9zbGljZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2Fzc19pdGVtICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfYXNzX3NsaWNlICovCisgICAgKG9iam9ianByb2MpZGljdGl0ZW1zX2NvbnRhaW5zLCAgICAgLyogc3FfY29udGFpbnMgKi8KK307CisKK3N0YXRpYyBQeU1ldGhvZERlZiBkaWN0aXRlbXNfbWV0aG9kc1tdID0geworICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitQeVR5cGVPYmplY3QgUHlEaWN0SXRlbXNfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQorICAgICJkaWN0X2l0ZW1zIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihkaWN0dmlld29iamVjdCksICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAgIC8qIG1ldGhvZHMgKi8KKyAgICAoZGVzdHJ1Y3RvcilkaWN0dmlld19kZWFsbG9jLCAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLworICAgIChyZXByZnVuYylkaWN0dmlld19yZXByLCAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgICZkaWN0dmlld3NfYXNfbnVtYmVyLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgJmRpY3RpdGVtc19hc19zZXF1ZW5jZSwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8CisgICAgICAgIFB5X1RQRkxBR1NfQ0hFQ0tUWVBFUywgICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgKHRyYXZlcnNlcHJvYylkaWN0dmlld190cmF2ZXJzZSwgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICBkaWN0dmlld19yaWNoY29tcGFyZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIChnZXRpdGVyZnVuYylkaWN0aXRlbXNfaXRlciwgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBkaWN0aXRlbXNfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLAorfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2RpY3RpdGVtc19uZXcoUHlPYmplY3QgKmRpY3QpCit7CisgICAgcmV0dXJuIGRpY3R2aWV3X25ldyhkaWN0LCAmUHlEaWN0SXRlbXNfVHlwZSk7Cit9CisKKy8qKiogZGljdF92YWx1ZXMgKioqLworCitzdGF0aWMgUHlPYmplY3QgKgorZGljdHZhbHVlc19pdGVyKGRpY3R2aWV3b2JqZWN0ICpkdikKK3sKKyAgICBpZiAoZHYtPmR2X2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICB9CisgICAgcmV0dXJuIGRpY3RpdGVyX25ldyhkdi0+ZHZfZGljdCwgJlB5RGljdEl0ZXJWYWx1ZV9UeXBlKTsKK30KKworc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIGRpY3R2YWx1ZXNfYXNfc2VxdWVuY2UgPSB7CisgICAgKGxlbmZ1bmMpZGljdHZpZXdfbGVuLCAgICAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfY29uY2F0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfcmVwZWF0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfaXRlbSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3NsaWNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfYXNzX2l0ZW0gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9hc3Nfc2xpY2UgKi8KKyAgICAob2Jqb2JqcHJvYykwLCAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb250YWlucyAqLworfTsKKworc3RhdGljIFB5TWV0aG9kRGVmIGRpY3R2YWx1ZXNfbWV0aG9kc1tdID0geworICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitQeVR5cGVPYmplY3QgUHlEaWN0VmFsdWVzX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAiZGljdF92YWx1ZXMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YoZGljdHZpZXdvYmplY3QpLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAvKiBtZXRob2RzICovCisgICAgKGRlc3RydWN0b3IpZGljdHZpZXdfZGVhbGxvYywgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAocmVwcmZ1bmMpZGljdHZpZXdfcmVwciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgICZkaWN0dmFsdWVzX2FzX3NlcXVlbmNlLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpZGljdHZpZXdfdHJhdmVyc2UsICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAoZ2V0aXRlcmZ1bmMpZGljdHZhbHVlc19pdGVyLCAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgZGljdHZhbHVlc19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwKK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0dmFsdWVzX25ldyhQeU9iamVjdCAqZGljdCkKK3sKKyAgICByZXR1cm4gZGljdHZpZXdfbmV3KGRpY3QsICZQeURpY3RWYWx1ZXNfVHlwZSk7Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL2VudW1vYmplY3QuYyBiL09iamVjdHMvZW51bW9iamVjdC5jCmluZGV4IGQwYzg3ODIuLjFlZjM4MWYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZW51bW9iamVjdC5jCisrKyBiL09iamVjdHMvZW51bW9iamVjdC5jCkBAIC0yMjMsNyArMjIzLDggQEAKIHJldmVyc2VkX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeV9zc2l6ZV90IG47Ci0gICAgUHlPYmplY3QgKnNlcTsKKyAgICBQeU9iamVjdCAqc2VxLCAqcmV2ZXJzZWRfbWV0aDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKnJldmVyc2VkX2NhY2hlID0gTlVMTDsKICAgICByZXZlcnNlZG9iamVjdCAqcm87CiAKICAgICBpZiAodHlwZSA9PSAmUHlSZXZlcnNlZF9UeXBlICYmICFfUHlBcmdfTm9LZXl3b3JkcygicmV2ZXJzZWQoKSIsIGt3ZHMpKQpAQCAtMjMyLDggKzIzMywyNiBAQAogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInJldmVyc2VkIiwgMSwgMSwgJnNlcSkgKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKHNlcSwgIl9fcmV2ZXJzZWRfXyIpKQotICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChzZXEsICJfX3JldmVyc2VkX18iLCBOVUxMKTsKKyAgICBpZiAoUHlJbnN0YW5jZV9DaGVjayhzZXEpKSB7CisgICAgICAgIHJldmVyc2VkX21ldGggPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHNlcSwgIl9fcmV2ZXJzZWRfXyIpOworICAgICAgICBpZiAocmV2ZXJzZWRfbWV0aCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV2ZXJzZWRfbWV0aCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKHNlcSwgIl9fcmV2ZXJzZWRfXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV2ZXJzZWRfY2FjaGUpOworICAgICAgICBpZiAocmV2ZXJzZWRfbWV0aCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHJldmVyc2VkX21ldGggIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhyZXZlcnNlZF9tZXRoLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKHJldmVyc2VkX21ldGgpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KIAogICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzZXEpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCmRpZmYgLS1naXQgYS9PYmplY3RzL2V4Y2VwdGlvbnMuYyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCmluZGV4IGEwZDdiNTMuLjcxMWM4N2QgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZXhjZXB0aW9ucy5jCisrKyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgIm9zZGVmcy5oIgogCi0jZGVmaW5lIE1BS0VfSVRfTk9ORSh4KSAoeCkgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CiAjZGVmaW5lIEVYQ19NT0RVTEVfTkFNRSAiZXhjZXB0aW9ucy4iCiAKIC8qIE5PVEU6IElmIHRoZSBleGNlcHRpb24gY2xhc3MgaGllcmFyY2h5IGNoYW5nZXMsIGRvbid0IGZvcmdldCB0byB1cGRhdGUKQEAgLTIwNDcsMjggKzIwNDYsNiBAQAogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhiZGljdCwgIyBUWVBFLCBQeUV4Y18gIyMgVFlQRSkpIFwKICAgICAgICAgUHlfRmF0YWxFcnJvcigiTW9kdWxlIGRpY3Rpb25hcnkgaW5zZXJ0aW9uIHByb2JsZW0uIik7CiAKLSNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIF9NU0NfVkVSID49IDE0MDAgJiYgZGVmaW5lZChfX1NURENfU0VDVVJFX0xJQl9fKQotLyogY3J0IHZhcmlhYmxlIGNoZWNraW5nIGluIFZpc3VhbFN0dWRpbyAuTkVUIDIwMDUgKi8KLSNpbmNsdWRlIDxjcnRkYmcuaD4KLQotc3RhdGljIGludCAgICAgIHByZXZDcnRSZXBvcnRNb2RlOwotc3RhdGljIF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyICAgICAgIHByZXZDcnRIYW5kbGVyOwotCi0vKiBJbnZhbGlkIHBhcmFtZXRlciBoYW5kbGVyLiAgU2V0cyBhIFZhbHVlRXJyb3IgZXhjZXB0aW9uICovCi1zdGF0aWMgdm9pZAotSW52YWxpZFBhcmFtZXRlckhhbmRsZXIoCi0gICAgY29uc3Qgd2NoYXJfdCAqIGV4cHJlc3Npb24sCi0gICAgY29uc3Qgd2NoYXJfdCAqIGZ1bmN0aW9uLAotICAgIGNvbnN0IHdjaGFyX3QgKiBmaWxlLAotICAgIHVuc2lnbmVkIGludCBsaW5lLAotICAgIHVpbnRwdHJfdCBwUmVzZXJ2ZWQpCi17Ci0gICAgLyogRG8gbm90aGluZywgYWxsb3cgZXhlY3V0aW9uIHRvIGNvbnRpbnVlLiAgVXN1YWxseSB0aGlzCi0gICAgICogbWVhbnMgdGhhdCB0aGUgQ1JUIHdpbGwgc2V0IGVycm5vIHRvIEVJTlZBTAotICAgICAqLwotfQotI2VuZGlmCi0KIAogUHlNT0RJTklUX0ZVTkMKIF9QeUV4Y19Jbml0KHZvaWQpCkBAIC0yMjAyLDcgKzIxNzksNyBAQAogCiAgICAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0ID0gQmFzZUV4Y2VwdGlvbl9uZXcoJl9QeUV4Y19NZW1vcnlFcnJvciwgTlVMTCwgTlVMTCk7CiAgICAgaWYgKCFQeUV4Y19NZW1vcnlFcnJvckluc3QpCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbm5vdCBwcmUtYWxsb2NhdGUgTWVtb3J5RXJyb3IgaW5zdGFuY2VcbiIpOworICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW5ub3QgcHJlLWFsbG9jYXRlIE1lbW9yeUVycm9yIGluc3RhbmNlIik7CiAKICAgICBQeUV4Y19SZWN1cnNpb25FcnJvckluc3QgPSBCYXNlRXhjZXB0aW9uX25ldygmX1B5RXhjX1J1bnRpbWVFcnJvciwgTlVMTCwgTlVMTCk7CiAgICAgaWYgKCFQeUV4Y19SZWN1cnNpb25FcnJvckluc3QpCkBAIC0yMjI4LDIzICsyMjA1LDExIEBACiAgICAgfQogCiAgICAgUHlfREVDUkVGKGJsdGlubW9kKTsKLQotI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMCAmJiBkZWZpbmVkKF9fU1REQ19TRUNVUkVfTElCX18pCi0gICAgLyogU2V0IENSVCBhcmd1bWVudCBlcnJvciBoYW5kbGVyICovCi0gICAgcHJldkNydEhhbmRsZXIgPSBfc2V0X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIoSW52YWxpZFBhcmFtZXRlckhhbmRsZXIpOwotICAgIC8qIHR1cm4gb2ZmIGFzc2VydGlvbnMgaW4gZGVidWcgbW9kZSAqLwotICAgIHByZXZDcnRSZXBvcnRNb2RlID0gX0NydFNldFJlcG9ydE1vZGUoX0NSVF9BU1NFUlQsIDApOwotI2VuZGlmCiB9CiAKIHZvaWQKIF9QeUV4Y19GaW5pKHZvaWQpCiB7Ci0gICAgUHlfWERFQ1JFRihQeUV4Y19NZW1vcnlFcnJvckluc3QpOwotICAgIFB5RXhjX01lbW9yeUVycm9ySW5zdCA9IE5VTEw7Ci0jaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBfTVNDX1ZFUiA+PSAxNDAwICYmIGRlZmluZWQoX19TVERDX1NFQ1VSRV9MSUJfXykKLSAgICAvKiByZXNldCBDUlQgZXJyb3IgaGFuZGxpbmcgKi8KLSAgICBfc2V0X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIocHJldkNydEhhbmRsZXIpOwotICAgIF9DcnRTZXRSZXBvcnRNb2RlKF9DUlRfQVNTRVJULCBwcmV2Q3J0UmVwb3J0TW9kZSk7Ci0jZW5kaWYKKyAgICBQeV9DTEVBUihQeUV4Y19NZW1vcnlFcnJvckluc3QpOworICAgIFB5X0NMRUFSKFB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCk7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2ZpbGVvYmplY3QuYyBiL09iamVjdHMvZmlsZW9iamVjdC5jCmluZGV4IGRmNWExMDIuLjk3NGQ2NDIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmlsZW9iamVjdC5jCisrKyBiL09iamVjdHMvZmlsZW9iamVjdC5jCkBAIC0xNiwxOSArMTYsMTMgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAotI2lmZGVmIF9NU0NfVkVSCi0vKiBOZWVkIEdldFZlcnNpb24gdG8gc2VlIGlmIG9uIE5UIHNvIHNhZmUgdG8gdXNlIF93Zm9wZW4gKi8KLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbmRpZiAvKiBfTVNDX1ZFUiAqLwotCiAjaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKICNpbmNsdWRlIDxpby5oPgogI2VuZGlmCiAKICNkZWZpbmUgQlVGKHYpIFB5U3RyaW5nX0FTX1NUUklORygoUHlTdHJpbmdPYmplY3QgKil2KQogCi0jaWZuZGVmIERPTlRfSEFWRV9FUlJOT19ICisjaWZkZWYgSEFWRV9FUlJOT19ICiAjaW5jbHVkZSA8ZXJybm8uaD4KICNlbmRpZgogCkBAIC0xODgsNiArMTgyLDg3IEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBmOwogfQogCisjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBfTVNDX1ZFUiA+PSAxNDAwICYmIGRlZmluZWQoX19TVERDX1NFQ1VSRV9MSUJfXykKKyNkZWZpbmUgUHlfVkVSSUZZX1dJTk5UCisvKiBUaGUgQ1JUIG9uIHdpbmRvd3MgY29tcGlsZWQgd2l0aCBWaXN1YWwgU3R1ZGlvIDIwMDUgYW5kIGhpZ2hlciBtYXkKKyAqIGFzc2VydCBpZiBnaXZlbiBpbnZhbGlkIG1vZGUgc3RyaW5ncy4gIFRoaXMgaXMgYWxsIGZpbmUgYW5kIHdlbGwKKyAqIGluIHN0YXRpYyBsYW5ndWFnZXMgbGlrZSBDIHdoZXJlIHRoZSBtb2RlIHN0cmluZyBpcyB0eXBjaWFsbHkgaGFyZAorICogY29kZWQuICBCdXQgaW4gUHl0aG9uLCB3ZXJlIHdlIHBhc3MgaW4gdGhlIG1vZGUgc3RyaW5nIGZyb20gdGhlIHVzZXIsCisgKiB3ZSBuZWVkIHRvIHZlcmlmeSBpdCBmaXJzdCBtYW51YWxseQorICovCitzdGF0aWMgaW50IF9QeVZlcmlmeV9Nb2RlX1dJTk5UKGNvbnN0IGNoYXIgKm1vZGUpCit7CisgICAgLyogU2VlIGlmIG1vZGUgc3RyaW5nIGlzIHZhbGlkIG9uIFdpbmRvd3MgdG8gYXZvaWQgaGFyZCBhc3NlcnRpb25zICovCisgICAgLyogcmVtb3ZlIGxlYWRpbmcgc3BhY2VzZSAqLworICAgIGludCBzaW5nbGVzID0gMDsKKyAgICBpbnQgcGFpcnMgPSAwOworICAgIGludCBlbmNvZGluZyA9IDA7CisgICAgY29uc3QgY2hhciAqcywgKmM7CisKKyAgICB3aGlsZSgqbW9kZSA9PSAnICcpIC8qIHN0cmlwIGluaXRpYWwgc3BhY2VzICovCisgICAgICAgICsrbW9kZTsKKyAgICBpZiAoIXN0cmNocigicndhIiwgKm1vZGUpKSAvKiBtdXN0IHN0YXJ0IHdpdGggb25lIG9mIHRoZXNlICovCisgICAgICAgIHJldHVybiAwOworICAgIHdoaWxlICgqKyttb2RlKSB7CisgICAgICAgIGlmICgqbW9kZSA9PSAnICcgfHwgKm1vZGUgPT0gJ04nKSAvKiBpZ25vcmUgc3BhY2VzIGFuZCBOICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcyA9ICIrVEQiOyAvKiBlYWNoIG9mIHRoaXMgY2FuIGFwcGVhciBvbmx5IG9uY2UgKi8KKyAgICAgICAgYyA9IHN0cmNocihzLCAqbW9kZSk7CisgICAgICAgIGlmIChjKSB7CisgICAgICAgICAgICBwdHJkaWZmX3QgaWR4ID0gcy1jOworICAgICAgICAgICAgaWYgKHNpbmdsZXMgJiAoMTw8aWR4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHNpbmdsZXMgfD0gKDE8PGlkeCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzID0gImJ0Y25TUiI7IC8qIG9ubHkgb25lIG9mIGVhY2ggbGV0dGVyIGluIHRoZSBwYWlycyBhbGxvd2VkICovCisgICAgICAgIGMgPSBzdHJjaHIocywgKm1vZGUpOworICAgICAgICBpZiAoYykgeworICAgICAgICAgICAgcHRyZGlmZl90IGlkeCA9IChzLWMpLzI7CisgICAgICAgICAgICBpZiAocGFpcnMgJiAoMTw8aWR4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHBhaXJzIHw9ICgxPDxpZHgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCptb2RlID09ICcsJykgeworICAgICAgICAgICAgZW5jb2RpbmcgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7IC8qIGZvdW5kIGFuIGludmFsaWQgY2hhciAqLworICAgIH0KKworICAgIGlmIChlbmNvZGluZykgeworICAgICAgICBjaGFyICplW10gPSB7IlVURi04IiwgIlVURi0xNkxFIiwgIlVOSUNPREUifTsKKyAgICAgICAgd2hpbGUgKCptb2RlID09ICcgJykKKyAgICAgICAgICAgICsrbW9kZTsKKyAgICAgICAgLyogZmluZCAnY2NzID0nICovCisgICAgICAgIGlmIChzdHJuY21wKG1vZGUsICJjY3MiLCAzKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBtb2RlICs9IDM7CisgICAgICAgIHdoaWxlICgqbW9kZSA9PSAnICcpCisgICAgICAgICAgICArK21vZGU7CisgICAgICAgIGlmICgqbW9kZSAhPSAnPScpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgd2hpbGUgKCptb2RlID09ICcgJykKKyAgICAgICAgICAgICsrbW9kZTsKKyAgICAgICAgZm9yKGVuY29kaW5nID0gMDsgZW5jb2Rpbmc8X2NvdW50b2YoZSk7ICsrZW5jb2RpbmcpIHsKKyAgICAgICAgICAgIHNpemVfdCBsID0gc3RybGVuKGVbZW5jb2RpbmddKTsKKyAgICAgICAgICAgIGlmICghc3RybmNtcChtb2RlLCBlW2VuY29kaW5nXSwgbCkpIHsKKyAgICAgICAgICAgICAgICBtb2RlICs9IGw7IC8qIGZvdW5kIGEgdmFsaWQgZW5jb2RpbmcgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZW5jb2RpbmcgPT0gX2NvdW50b2YoZSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgLyogc2tpcCB0cmFpbGluZyBzcGFjZXMgKi8KKyAgICB3aGlsZSAoKm1vZGUgPT0gJyAnKQorICAgICAgICArK21vZGU7CisKKyAgICByZXR1cm4gKm1vZGUgPT0gJ1wwJzsgLyogbXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KK30KKyNlbmRpZgorCiAvKiBjaGVjayBmb3Iga25vd24gaW5jb3JyZWN0IG1vZGUgc3RyaW5ncyAtIHByb2JsZW0gaXMsIHBsYXRmb3JtcyBhcmUKICAgIGZyZWUgdG8gYWNjZXB0IGFueSBtb2RlIGNoYXJhY3RlcnMgdGhleSBsaWtlIGFuZCBhcmUgc3VwcG9zZWQgdG8KICAgIGlnbm9yZSBzdHVmZiB0aGV5IGRvbid0IHVuZGVyc3RhbmQuLi4gd3JpdGUgb3IgYXBwZW5kIG1vZGUgd2l0aApAQCAtMjMwLDcgKzMwNSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAib25lIG9mICdyJywgJ3cnLCAnYScgb3IgJ1UnLCBub3QgJyUuMjAwcyciLCBtb2RlKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLQorI2lmZGVmIFB5X1ZFUklGWV9XSU5OVAorICAgIC8qIGFkZGl0aW9uYWwgY2hlY2tzIG9uIE5UIHdpdGggdmlzdWFsIHN0dWRpbyAyMDA1IGFuZCBoaWdoZXIgKi8KKyAgICBpZiAoIV9QeVZlcmlmeV9Nb2RlX1dJTk5UKG1vZGUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiSW52YWxpZCBtb2RlICgnJS41MHMnKSIsIG1vZGUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM0Miw2ICs0MjMsNyBAQAogICAgIGludCBzdHMgPSAwOwogICAgIGludCAoKmxvY2FsX2Nsb3NlKShGSUxFICopOwogICAgIEZJTEUgKmxvY2FsX2ZwID0gZi0+Zl9mcDsKKyAgICBjaGFyICpsb2NhbF9zZXRidWYgPSBmLT5mX3NldGJ1ZjsKICAgICBpZiAobG9jYWxfZnAgIT0gTlVMTCkgewogICAgICAgICBsb2NhbF9jbG9zZSA9IGYtPmZfY2xvc2U7CiAgICAgICAgIGlmIChsb2NhbF9jbG9zZSAhPSBOVUxMICYmIGYtPnVubG9ja2VkX2NvdW50ID4gMCkgewpAQCAtMzY1LDEwICs0NDcsMTUgQEAKICAgICAgICAgICogY2FsbGVkLiAqLwogICAgICAgICBmLT5mX2ZwID0gTlVMTDsKICAgICAgICAgaWYgKGxvY2FsX2Nsb3NlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIElzc3VlICM5Mjk1OiBtdXN0IHRlbXBvcmFyaWx5IHJlc2V0IGZfc2V0YnVmIHNvIHRoYXQgYW5vdGhlcgorICAgICAgICAgICAgICAgdGhyZWFkIGRvZXNuJ3QgZnJlZSBpdCB3aGVuIHJ1bm5pbmcgZmlsZV9jbG9zZSgpIGNvbmN1cnJlbnRseS4KKyAgICAgICAgICAgICAgIE90aGVyd2lzZSB0aGlzIGNsb3NlKCkgd2lsbCBjcmFzaCB3aGVuIGZsdXNoaW5nIHRoZSBidWZmZXIuICovCisgICAgICAgICAgICBmLT5mX3NldGJ1ZiA9IE5VTEw7CiAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgICAgICBzdHMgPSAoKmxvY2FsX2Nsb3NlKShsb2NhbF9mcCk7CiAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgZi0+Zl9zZXRidWYgPSBsb2NhbF9zZXRidWY7CiAgICAgICAgICAgICBpZiAoc3RzID09IEVPRikKICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogICAgICAgICAgICAgaWYgKHN0cyAhPSAwKQpAQCAtMTAyMyw4ICsxMTEwLDggQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChieXRlc3JlYWQgIT0gYnVmZmVyc2l6ZSkKLSAgICAgICAgX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgYnl0ZXNyZWFkKTsKKyAgICBpZiAoYnl0ZXNyZWFkICE9IGJ1ZmZlcnNpemUgJiYgX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgYnl0ZXNyZWFkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIHY7CiB9CiAKQEAgLTEyNzcsOCArMTM2NCw4IEBACiAgICAgICAgIC8qIG92ZXJ3cml0ZSB0aGUgdHJhaWxpbmcgbnVsbCBieXRlICovCiAgICAgICAgIHB2ZnJlZSA9IEJVRih2KSArIChwcmV2X3Zfc2l6ZSAtIDEpOwogICAgIH0KLSAgICBpZiAoQlVGKHYpICsgdG90YWxfdl9zaXplICE9IHApCi0gICAgICAgIF9QeVN0cmluZ19SZXNpemUoJnYsIHAgLSBCVUYodikpOworICAgIGlmIChCVUYodikgKyB0b3RhbF92X3NpemUgIT0gcCAmJiBfUHlTdHJpbmdfUmVzaXplKCZ2LCBwIC0gQlVGKHYpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIHY7CiAjdW5kZWYgSU5JVEJVRlNJWkUKICN1bmRlZiBNQVhCVUZTSVpFCkBAIC0xMzkwLDggKzE0NzcsOCBAQAogICAgIH0KIAogICAgIHVzZWRfdl9zaXplID0gYnVmIC0gQlVGKHYpOwotICAgIGlmICh1c2VkX3Zfc2l6ZSAhPSB0b3RhbF92X3NpemUpCi0gICAgICAgIF9QeVN0cmluZ19SZXNpemUoJnYsIHVzZWRfdl9zaXplKTsKKyAgICBpZiAodXNlZF92X3NpemUgIT0gdG90YWxfdl9zaXplICYmIF9QeVN0cmluZ19SZXNpemUoJnYsIHVzZWRfdl9zaXplKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIHY7CiB9CiAKQEAgLTE0NTcsOCArMTU0NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFT0Ygd2hlbiByZWFkaW5nIGEgbGluZSIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNbbGVuLTFdID09ICdcbicpIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQtPm9iX3JlZmNudCA9PSAxKQotICAgICAgICAgICAgICAgIF9QeVN0cmluZ19SZXNpemUoJnJlc3VsdCwgbGVuLTEpOworICAgICAgICAgICAgaWYgKHJlc3VsdC0+b2JfcmVmY250ID09IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcmVzdWx0LCBsZW4tMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnY7CiAgICAgICAgICAgICAgICAgdiA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKHMsIGxlbi0xKTsKQEAgLTE2NTIsOCArMTc0MSwxMCBAQAogZmlsZV93cml0ZShQeUZpbGVPYmplY3QgKmYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X2J1ZmZlciBwYnVmOwotICAgIGNoYXIgKnM7CisgICAgY29uc3QgY2hhciAqczsKICAgICBQeV9zc2l6ZV90IG4sIG4yOworICAgIFB5T2JqZWN0ICplbmNvZGVkID0gTlVMTDsKKwogICAgIGlmIChmLT5mX2ZwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBlcnJfY2xvc2VkKCk7CiAgICAgaWYgKCFmLT53cml0YWJsZSkKQEAgLTE2NjMsMTQgKzE3NTQsNDEgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBzID0gcGJ1Zi5idWY7CiAgICAgICAgIG4gPSBwYnVmLmxlbjsKLSAgICB9IGVsc2UKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ0IyIsICZzLCAmbikpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsICplcnJvcnM7CisgICAgICAgIFB5T2JqZWN0ICp0ZXh0OworICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmdGV4dCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBpZiAoUHlTdHJpbmdfQ2hlY2sodGV4dCkpIHsKKyAgICAgICAgICAgIHMgPSBQeVN0cmluZ19BU19TVFJJTkcodGV4dCk7CisgICAgICAgICAgICBuID0gUHlTdHJpbmdfR0VUX1NJWkUodGV4dCk7CisgICAgICAgIH0gZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHRleHQpKSB7CisgICAgICAgICAgICBpZiAoZi0+Zl9lbmNvZGluZyAhPSBQeV9Ob25lKQorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gUHlTdHJpbmdfQVNfU1RSSU5HKGYtPmZfZW5jb2RpbmcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZygpOworICAgICAgICAgICAgaWYgKGYtPmZfZXJyb3JzICE9IFB5X05vbmUpCisgICAgICAgICAgICAgICAgZXJyb3JzID0gUHlTdHJpbmdfQVNfU1RSSU5HKGYtPmZfZXJyb3JzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlcnJvcnMgPSAic3RyaWN0IjsKKyAgICAgICAgICAgIGVuY29kZWQgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHRleHQsIGVuY29kaW5nLCBlcnJvcnMpOworICAgICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHMgPSBQeVN0cmluZ19BU19TVFJJTkcoZW5jb2RlZCk7CisgICAgICAgICAgICBuID0gUHlTdHJpbmdfR0VUX1NJWkUoZW5jb2RlZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHRleHQsICZzLCAmbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAgICAgZi0+Zl9zb2Z0c3BhY2UgPSAwOwogICAgIEZJTEVfQkVHSU5fQUxMT1dfVEhSRUFEUyhmKQogICAgIGVycm5vID0gMDsKICAgICBuMiA9IGZ3cml0ZShzLCAxLCBuLCBmLT5mX2ZwKTsKICAgICBGSUxFX0VORF9BTExPV19USFJFQURTKGYpCisgICAgUHlfWERFQ1JFRihlbmNvZGVkKTsKICAgICBpZiAoZi0+Zl9iaW5hcnkpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIGlmIChuMiAhPSBuKSB7CkBAIC0xNzM3LDYgKzE4NTUsMTEgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgUHlMaXN0X1NldEl0ZW0obGlzdCwgaiwgbGluZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBUaGUgaXRlcmF0b3IgbWlnaHQgaGF2ZSBjbG9zZWQgdGhlIGZpbGUgb24gdXMuICovCisgICAgICAgICAgICBpZiAoZi0+Zl9mcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZXJyX2Nsb3NlZCgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGogPT0gMCkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE5MSw2ICsyMzE0LDkgQEAKICAgICBjaGFyICptb2RlID0gInIiOwogICAgIGludCBidWZzaXplID0gLTE7CiAgICAgaW50IHdpZGVhcmd1bWVudCA9IDA7CisjaWZkZWYgTVNfV0lORE9XUworICAgIFB5T2JqZWN0ICpwbzsKKyNlbmRpZgogCiAgICAgYXNzZXJ0KFB5RmlsZV9DaGVjayhzZWxmKSk7CiAgICAgaWYgKGZvc2VsZi0+Zl9mcCAhPSBOVUxMKSB7CkBAIC0yMjAxLDIwICsyMzI3LDE3IEBACiAgICAgICAgIFB5X0RFQ1JFRihjbG9zZXJlc3VsdCk7CiAgICAgfQogCi0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCi0gICAgaWYgKEdldFZlcnNpb24oKSA8IDB4ODAwMDAwMDApIHsgICAgLyogT24gTlQsIHNvIHdpZGUgQVBJIGF2YWlsYWJsZSAqLwotICAgICAgICBQeU9iamVjdCAqcG87Ci0gICAgICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIlV8c2k6ZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmcG8sICZtb2RlLCAmYnVmc2l6ZSkpIHsKLSAgICAgICAgICAgIHdpZGVhcmd1bWVudCA9IDE7Ci0gICAgICAgICAgICBpZiAoZmlsbF9maWxlX2ZpZWxkcyhmb3NlbGYsIE5VTEwsIHBvLCBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdwotICAgICAgICAgICAgICAgc3RyaW5ncyBhcmUgYWxzbyB2YWxpZC4gKi8KLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiVXxzaTpmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnBvLCAmbW9kZSwgJmJ1ZnNpemUpKSB7CisgICAgICAgIHdpZGVhcmd1bWVudCA9IDE7CisgICAgICAgIGlmIChmaWxsX2ZpbGVfZmllbGRzKGZvc2VsZiwgTlVMTCwgcG8sIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gRXJyb3I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cKKyAgICAgICAgICAgc3RyaW5ncyBhcmUgYWxzbyB2YWxpZC4gKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mbG9hdG9iamVjdC5jIGIvT2JqZWN0cy9mbG9hdG9iamVjdC5jCmluZGV4IDBiYjY5NjEuLjc3YjEwMDUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmxvYXRvYmplY3QuYworKysgYi9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKQEAgLTE1LDEwICsxNSw2IEBACiAjZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQogI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKIAotI2lmZGVmIEhBVkVfSUVFRUZQX0gKLSNpbmNsdWRlIDxpZWVlZnAuaD4KLSNlbmRpZgotCiAjaWZkZWYgX09TRl9TT1VSQ0UKIC8qIE9TRjEgNS4xIGRvZXNuJ3QgbWFrZSB0aGlzIGF2YWlsYWJsZSB3aXRoIFhPUEVOX1NPVVJDRV9FWFRFTkRFRCBkZWZpbmVkICovCiBleHRlcm4gaW50IGZpbml0ZShkb3VibGUpOwpAQCAtNzIsNyArNjgsNyBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBGbG9hdEluZm9UeXBlID0gezAsIDAsIDAsIDAsIDAsIDB9OwogCiBQeURvY19TVFJWQVIoZmxvYXRpbmZvX19kb2NfXywKLSJzeXMuZmxvYXRpbmZvXG5cCisic3lzLmZsb2F0X2luZm9cblwKIFxuXAogQSBzdHJ1Y3RzZXEgaG9sZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmxvYXQgdHlwZS4gSXQgY29udGFpbnMgbG93IGxldmVsXG5cCiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJlY2lzaW9uIGFuZCBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gUGxlYXNlIHN0dWR5XG5cCkBAIC05OSw3ICs5NSw3IEBACiB9OwogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjIGZsb2F0aW5mb19kZXNjID0gewotICAgICJzeXMuZmxvYXRpbmZvIiwgICAgICAgICAgICAvKiBuYW1lICovCisgICAgInN5cy5mbG9hdF9pbmZvIiwgICAgICAgICAgIC8qIG5hbWUgKi8KICAgICBmbG9hdGluZm9fX2RvY19fLCAgICAgICAgICAgLyogZG9jICovCiAgICAgZmxvYXRpbmZvX2ZpZWxkcywgICAgICAgICAgIC8qIGZpZWxkcyAqLwogICAgIDExCkBAIC0xNzcsMTMgKzE3MywxNCBAQAogUHlPYmplY3QgKgogUHlGbG9hdF9Gcm9tU3RyaW5nKFB5T2JqZWN0ICp2LCBjaGFyICoqcGVuZCkKIHsKLSAgICBjb25zdCBjaGFyICpzLCAqbGFzdCwgKmVuZCwgKnNwOworICAgIGNvbnN0IGNoYXIgKnMsICpsYXN0LCAqZW5kOwogICAgIGRvdWJsZSB4OwogICAgIGNoYXIgYnVmZmVyWzI1Nl07IC8qIGZvciBlcnJvcnMgKi8KICNpZmRlZiBQeV9VU0lOR19VTklDT0RFCi0gICAgY2hhciBzX2J1ZmZlclsyNTZdOyAvKiBmb3Igb2JqZWN0cyBjb252ZXJ0aWJsZSB0byBhIGNoYXIgYnVmZmVyICovCisgICAgY2hhciAqc19idWZmZXIgPSBOVUxMOwogI2VuZGlmCiAgICAgUHlfc3NpemVfdCBsZW47CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKICAgICBpZiAocGVuZCkKICAgICAgICAgKnBlbmQgPSBOVUxMOwpAQCAtMTkzLDEwMSArMTkwLDUwIEBACiAgICAgfQogI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2sodikpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfU0laRSh2KSA+PSAoUHlfc3NpemVfdClzaXplb2Yoc19idWZmZXIpKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAiVW5pY29kZSBmbG9hdCgpIGxpdGVyYWwgdG9vIGxvbmcgdG8gY29udmVydCIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgc19idWZmZXIgPSAoY2hhciAqKVB5TWVtX01BTExPQyhQeVVuaWNvZGVfR0VUX1NJWkUodikrMSk7CisgICAgICAgIGlmIChzX2J1ZmZlciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGlmIChQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbChQeVVuaWNvZGVfQVNfVU5JQ09ERSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNfYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIHMgPSBzX2J1ZmZlcjsKICAgICAgICAgbGVuID0gc3RybGVuKHMpOwogICAgIH0KICNlbmRpZgogICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcih2LCAmcywgJmxlbikpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIiKTsKKyAgICAgICAgICAgICJmbG9hdCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotCiAgICAgbGFzdCA9IHMgKyBsZW47Ci0gICAgd2hpbGUgKCpzICYmIGlzc3BhY2UoUHlfQ0hBUk1BU0soKnMpKSkKLSAgICAgICAgcysrOwotICAgIGlmICgqcyA9PSAnXDAnKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc3RyaW5nIGZvciBmbG9hdCgpIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBzcCA9IHM7Ci0gICAgLyogV2UgZG9uJ3QgY2FyZSBhYm91dCBvdmVyZmxvdyBvciB1bmRlcmZsb3cuICBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMKLSAgICAgKiB0aGVtLCBpbmZpbml0aWVzIGFuZCBzaWduZWQgemVyb2VzIChvbiB1bmRlcmZsb3cpIGFyZSBmaW5lLgotICAgICAqIEhvd2V2ZXIsIHN0cnRvZCBjYW4gcmV0dXJuIDAgZm9yIGRlbm9ybWFsaXplZCBudW1iZXJzLCB3aGVyZSBhdG9mCi0gICAgICogZG9lcyBub3QuICBTbyAoYWxhcyEpIHdlIHNwZWNpYWwtY2FzZSBhIHplcm8gcmVzdWx0LiAgTm90ZSB0aGF0Ci0gICAgICogd2hldGhlciBzdHJ0b2Qgc2V0cyBlcnJubyBvbiB1bmRlcmZsb3cgaXMgbm90IGRlZmluZWQsIHNvIHdlIGNhbid0Ci0gICAgICoga2V5IG9mZiBlcnJuby4KLSAgICAgKi8KLSAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJzdHJ0b2QiLCByZXR1cm4gTlVMTCkKLSAgICB4ID0gUHlPU19hc2NpaV9zdHJ0b2QocywgKGNoYXIgKiopJmVuZCk7Ci0gICAgUHlGUEVfRU5EX1BST1RFQ1QoeCkKLSAgICBlcnJubyA9IDA7Ci0gICAgLyogQmVsaWV2ZSBpdCBvciBub3QsIFNvbGFyaXMgMi42IGNhbiBtb3ZlIGVuZCAqYmV5b25kKiB0aGUgbnVsbAotICAgICAgIGJ5dGUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCB3aGVuIHRoZSBpbnB1dCBpcyBpbmYoaW5pdHkpLiAqLwotICAgIGlmIChlbmQgPiBsYXN0KQotICAgICAgICBlbmQgPSBsYXN0OwotICAgIC8qIENoZWNrIGZvciBpbmYgYW5kIG5hbi4gVGhpcyBpcyBkb25lIGxhdGUgYmVjYXVzZSBpdCByYXJlbHkgaGFwcGVucy4gKi8KLSAgICBpZiAoZW5kID09IHMpIHsKLSAgICAgICAgY2hhciAqcCA9IChjaGFyKilzcDsKLSAgICAgICAgaW50IHNpZ24gPSAxOwogCi0gICAgICAgIGlmICgqcCA9PSAnLScpIHsKLSAgICAgICAgICAgIHNpZ24gPSAtMTsKLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgfQotICAgICAgICBpZiAoKnAgPT0gJysnKSB7Ci0gICAgICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFB5T1Nfc3RybmljbXAocCwgImluZiIsIDQpID09IDApIHsKLSAgICAgICAgICAgIFB5X1JFVFVSTl9JTkYoc2lnbik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFB5T1Nfc3RybmljbXAocCwgImluZmluaXR5IiwgOSkgPT0gMCkgewotICAgICAgICAgICAgUHlfUkVUVVJOX0lORihzaWduKTsKLSAgICAgICAgfQotI2lmZGVmIFB5X05BTgotICAgICAgICBpZihQeU9TX3N0cm5pY21wKHAsICJuYW4iLCA0KSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9SRVRVUk5fTkFOOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgUHlPU19zbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAotICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGZsb2F0KCk6ICUuMjAwcyIsIHMpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIC8qIFNpbmNlIGVuZCAhPSBzLCB0aGUgcGxhdGZvcm0gbWFkZSAqc29tZSoga2luZCBvZiBzZW5zZSBvdXQKLSAgICAgICBvZiB0aGUgaW5wdXQuICBUcnVzdCBpdC4gKi8KLSAgICB3aGlsZSAoKmVuZCAmJiBpc3NwYWNlKFB5X0NIQVJNQVNLKCplbmQpKSkKKyAgICB3aGlsZSAoUHlfSVNTUEFDRSgqcykpCisgICAgICAgIHMrKzsKKyAgICAvKiBXZSBkb24ndCBjYXJlIGFib3V0IG92ZXJmbG93IG9yIHVuZGVyZmxvdy4gIElmIHRoZSBwbGF0Zm9ybQorICAgICAqIHN1cHBvcnRzIHRoZW0sIGluZmluaXRpZXMgYW5kIHNpZ25lZCB6ZXJvZXMgKG9uIHVuZGVyZmxvdykgYXJlCisgICAgICogZmluZS4gKi8KKyAgICB4ID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKHMsIChjaGFyICoqKSZlbmQsIE5VTEwpOworICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB3aGlsZSAoUHlfSVNTUEFDRSgqZW5kKSkKICAgICAgICAgZW5kKys7Ci0gICAgaWYgKCplbmQgIT0gJ1wwJykgeworICAgIGlmIChlbmQgPT0gbGFzdCkKKyAgICAgICAgcmVzdWx0ID0gUHlGbG9hdF9Gcm9tRG91YmxlKHgpOworICAgIGVsc2UgewogICAgICAgICBQeU9TX3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCiAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgZmxvYXQoKTogJS4yMDBzIiwgcyk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBidWZmZXIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmVzdWx0ID0gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoZW5kICE9IGxhc3QpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAibnVsbCBieXRlIGluIGFyZ3VtZW50IGZvciBmbG9hdCgpIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoeCA9PSAwLjApIHsKLSAgICAgICAgLyogU2VlIGFib3ZlIC0tIG1heSBoYXZlIGJlZW4gc3RydG9kIGJlaW5nIGFuYWwKLSAgICAgICAgICAgYWJvdXQgZGVub3Jtcy4gKi8KLSAgICAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiYXRvZiIsIHJldHVybiBOVUxMKQotICAgICAgICB4ID0gUHlPU19hc2NpaV9hdG9mKHMpOwotICAgICAgICBQeUZQRV9FTkRfUFJPVEVDVCh4KQotICAgICAgICBlcnJubyA9IDA7ICAgIC8qIHdoZXRoZXIgYXRvZiBldmVyIHNldCBlcnJubyBpcyB1bmRlZmluZWQgKi8KLSAgICB9Ci0gICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSh4KTsKKworICBlcnJvcjoKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCisgICAgaWYgKHNfYnVmZmVyKQorICAgICAgICBQeU1lbV9GUkVFKHNfYnVmZmVyKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zMzgsNzQgKzI4NCw2IEBACiAKIC8qIE1ldGhvZHMgKi8KIAotc3RhdGljIHZvaWQKLWZvcm1hdF9mbG9hdChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIFB5RmxvYXRPYmplY3QgKnYsIGludCBwcmVjaXNpb24pCi17Ci0gICAgcmVnaXN0ZXIgY2hhciAqY3A7Ci0gICAgY2hhciBmb3JtYXRbMzJdOwotICAgIGludCBpOwotCi0gICAgLyogU3Vicm91dGluZSBmb3IgZmxvYXRfcmVwciBhbmQgZmxvYXRfcHJpbnQuCi0gICAgICAgV2Ugd2FudCBmbG9hdCBudW1iZXJzIHRvIGJlIHJlY29nbml6YWJsZSBhcyBzdWNoLAotICAgICAgIGkuZS4sIHRoZXkgc2hvdWxkIGNvbnRhaW4gYSBkZWNpbWFsIHBvaW50IG9yIGFuIGV4cG9uZW50LgotICAgICAgIEhvd2V2ZXIsICVnIG1heSBwcmludCB0aGUgbnVtYmVyIGFzIGFuIGludGVnZXI7Ci0gICAgICAgaW4gc3VjaCBjYXNlcywgd2UgYXBwZW5kICIuMCIgdG8gdGhlIHN0cmluZy4gKi8KLQotICAgIGFzc2VydChQeUZsb2F0X0NoZWNrKHYpKTsKLSAgICBQeU9TX3NucHJpbnRmKGZvcm1hdCwgMzIsICIlJS4laWciLCBwcmVjaXNpb24pOwotICAgIFB5T1NfYXNjaWlfZm9ybWF0ZChidWYsIGJ1ZmxlbiwgZm9ybWF0LCB2LT5vYl9mdmFsKTsKLSAgICBjcCA9IGJ1ZjsKLSAgICBpZiAoKmNwID09ICctJykKLSAgICAgICAgY3ArKzsKLSAgICBmb3IgKDsgKmNwICE9ICdcMCc7IGNwKyspIHsKLSAgICAgICAgLyogQW55IG5vbi1kaWdpdCBtZWFucyBpdCdzIG5vdCBhbiBpbnRlZ2VyOwotICAgICAgICAgICB0aGlzIHRha2VzIGNhcmUgb2YgTkFOIGFuZCBJTkYgYXMgd2VsbC4gKi8KLSAgICAgICAgaWYgKCFpc2RpZ2l0KFB5X0NIQVJNQVNLKCpjcCkpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICgqY3AgPT0gJ1wwJykgewotICAgICAgICAqY3ArKyA9ICcuJzsKLSAgICAgICAgKmNwKysgPSAnMCc7Ci0gICAgICAgICpjcCsrID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBDaGVja2luZyB0aGUgbmV4dCB0aHJlZSBjaGFycyBzaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaCB0bwotICAgICAqIGRldGVjdCBpbmYgb3IgbmFuLCBldmVuIG9uIFdpbmRvd3MuIFdlIGNoZWNrIGZvciBpbmYgb3IgbmFuCi0gICAgICogYXQgbGFzdCBiZWNhdXNlIHRoZXkgYXJlIHJhcmUgY2FzZXMuCi0gICAgICovCi0gICAgZm9yIChpPTA7ICpjcCAhPSAnXDAnICYmIGk8MzsgY3ArKywgaSsrKSB7Ci0gICAgICAgIGlmIChpc2RpZ2l0KFB5X0NIQVJNQVNLKCpjcCkpIHx8ICpjcCA9PSAnLicpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLyogZm91bmQgc29tZXRoaW5nIHRoYXQgaXMgbmVpdGhlciBhIGRpZ2l0IG5vciBwb2ludAotICAgICAgICAgKiBpdCBtaWdodCBiZSBhIE5hTiBvciBJTkYKLSAgICAgICAgICovCi0jaWZkZWYgUHlfTkFOCi0gICAgICAgIGlmIChQeV9JU19OQU4odi0+b2JfZnZhbCkpIHsKLSAgICAgICAgICAgIHN0cmNweShidWYsICJuYW4iKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgaWYgKFB5X0lTX0lORklOSVRZKHYtPm9iX2Z2YWwpKSB7Ci0gICAgICAgICAgICBjcCA9IGJ1ZjsKLSAgICAgICAgICAgIGlmICgqY3AgPT0gJy0nKQotICAgICAgICAgICAgICAgIGNwKys7Ci0gICAgICAgICAgICBzdHJjcHkoY3AsICJpbmYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLX0KLQotLyogWFhYIFB5RmxvYXRfQXNTdHJpbmdFeCBzaG91bGQgbm90IGJlIGEgcHVibGljIEFQSSBmdW5jdGlvbiAoZm9yIG9uZQotICAgWFhYIHRoaW5nLCBpdHMgc2lnbmF0dXJlIHBhc3NlcyBhIGJ1ZmZlciB3aXRob3V0IGEgbGVuZ3RoOyBmb3IgYW5vdGhlciwKLSAgIFhYWCBpdCBpc24ndCB1c2VmdWwgb3V0c2lkZSB0aGlzIGZpbGUpLgotKi8KLXZvaWQKLVB5RmxvYXRfQXNTdHJpbmdFeChjaGFyICpidWYsIFB5RmxvYXRPYmplY3QgKnYsIGludCBwcmVjaXNpb24pCi17Ci0gICAgZm9ybWF0X2Zsb2F0KGJ1ZiwgMTAwLCB2LCBwcmVjaXNpb24pOwotfQotCiAvKiBNYWNybyBhbmQgaGVscGVyIHRoYXQgY29udmVydCBQeU9iamVjdCBvYmogdG8gYSBDIGRvdWJsZSBhbmQgc3RvcmUKICAgIHRoZSB2YWx1ZSBpbiBkYmw7IHRoaXMgcmVwbGFjZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGNvZXJjaW9uCiAgICBzbG90IGZ1bmN0aW9uLiAgSWYgY29udmVyc2lvbiB0byBkb3VibGUgcmFpc2VzIGFuIGV4Y2VwdGlvbiwgb2JqIGlzCkBAIC00NDIsNjYgKzMyMCw3MiBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiBQcmVjaXNpb25zIHVzZWQgYnkgcmVwcigpIGFuZCBzdHIoKSwgcmVzcGVjdGl2ZWx5LgotCi0gICBUaGUgcmVwcigpIHByZWNpc2lvbiAoMTcgc2lnbmlmaWNhbnQgZGVjaW1hbCBkaWdpdHMpIGlzIHRoZSBtaW5pbWFsIG51bWJlcgotICAgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgZW5vdWdoIHByZWNpc2lvbiBzbyB0aGF0IGlmIHRoZSBudW1iZXIgaXMgcmVhZAotICAgYmFjayBpbiB0aGUgZXhhY3Qgc2FtZSBiaW5hcnkgdmFsdWUgaXMgcmVjcmVhdGVkLiAgVGhpcyBpcyB0cnVlIGZvciBJRUVFCi0gICBmbG9hdGluZyBwb2ludCBieSBkZXNpZ24sIGFuZCBhbHNvIGhhcHBlbnMgdG8gd29yayBmb3IgYWxsIG90aGVyIG1vZGVybgotICAgaGFyZHdhcmUuCi0KLSAgIFRoZSBzdHIoKSBwcmVjaXNpb24gaXMgY2hvc2VuIHNvIHRoYXQgaW4gbW9zdCBjYXNlcywgdGhlIHJvdW5kaW5nIG5vaXNlCi0gICBjcmVhdGVkIGJ5IHZhcmlvdXMgb3BlcmF0aW9ucyBpcyBzdXBwcmVzc2VkLCB3aGlsZSBnaXZpbmcgcGxlbnR5IG9mCi0gICBwcmVjaXNpb24gZm9yIHByYWN0aWNhbCB1c2UuCi0KLSovCi0KLSNkZWZpbmUgUFJFQ19SRVBSICAgICAgIDE3Ci0jZGVmaW5lIFBSRUNfU1RSICAgICAgICAxMgotCi0vKiBYWFggUHlGbG9hdF9Bc1N0cmluZyBhbmQgUHlGbG9hdF9Bc1JlcHJTdHJpbmcgc2hvdWxkIGJlIGRlcHJlY2F0ZWQ6CisvKiBYWFggUHlGbG9hdF9Bc1N0cmluZyBhbmQgUHlGbG9hdF9Bc1JlcHJTdHJpbmcgYXJlIGRlcHJlY2F0ZWQ6CiAgICBYWFggdGhleSBwYXNzIGEgY2hhciBidWZmZXIgd2l0aG91dCBwYXNzaW5nIGEgbGVuZ3RoLgogKi8KIHZvaWQKIFB5RmxvYXRfQXNTdHJpbmcoY2hhciAqYnVmLCBQeUZsb2F0T2JqZWN0ICp2KQogewotICAgIGZvcm1hdF9mbG9hdChidWYsIDEwMCwgdiwgUFJFQ19TVFIpOworICAgIGNoYXIgKnRtcCA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh2LT5vYl9mdmFsLCAnZycsCisgICAgICAgICAgICAgICAgICAgIFB5RmxvYXRfU1RSX1BSRUNJU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgUHlfRFRTRl9BRERfRE9UXzAsIE5VTEwpOworICAgIHN0cmNweShidWYsIHRtcCk7CisgICAgUHlNZW1fRnJlZSh0bXApOwogfQogCiB2b2lkCiBQeUZsb2F0X0FzUmVwclN0cmluZyhjaGFyICpidWYsIFB5RmxvYXRPYmplY3QgKnYpCiB7Ci0gICAgZm9ybWF0X2Zsb2F0KGJ1ZiwgMTAwLCB2LCBQUkVDX1JFUFIpOworICAgIGNoYXIgKiB0bXAgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcodi0+b2JfZnZhbCwgJ3InLCAwLAorICAgICAgICAgICAgICAgICAgICBQeV9EVFNGX0FERF9ET1RfMCwgTlVMTCk7CisgICAgc3RyY3B5KGJ1ZiwgdG1wKTsKKyAgICBQeU1lbV9GcmVlKHRtcCk7CiB9CiAKIC8qIEFSR1NVU0VEICovCiBzdGF0aWMgaW50CiBmbG9hdF9wcmludChQeUZsb2F0T2JqZWN0ICp2LCBGSUxFICpmcCwgaW50IGZsYWdzKQogewotICAgIGNoYXIgYnVmWzEwMF07Ci0gICAgZm9ybWF0X2Zsb2F0KGJ1Ziwgc2l6ZW9mKGJ1ZiksIHYsCi0gICAgICAgICAgICAgICAgIChmbGFncyAmIFB5X1BSSU5UX1JBVykgPyBQUkVDX1NUUiA6IFBSRUNfUkVQUik7CisgICAgY2hhciAqYnVmOworICAgIGlmIChmbGFncyAmIFB5X1BSSU5UX1JBVykKKyAgICAgICAgYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHYtPm9iX2Z2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZycsIFB5RmxvYXRfU1RSX1BSRUNJU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RUU0ZfQUREX0RPVF8wLCBOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIGJ1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh2LT5vYl9mdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyJywgMCwgUHlfRFRTRl9BRERfRE9UXzAsIE5VTEwpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBmcHV0cyhidWYsIGZwKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK2Zsb2F0X3N0cl9vcl9yZXByKFB5RmxvYXRPYmplY3QgKnYsIGludCBwcmVjaXNpb24sIGNoYXIgZm9ybWF0X2NvZGUpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBjaGFyICpidWYgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoUHlGbG9hdF9BU19ET1VCTEUodiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2NvZGUsIHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9EVFNGX0FERF9ET1RfMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAoIWJ1ZikKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhidWYpOworICAgIFB5TWVtX0ZyZWUoYnVmKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUHlPYmplY3QgKgogZmxvYXRfcmVwcihQeUZsb2F0T2JqZWN0ICp2KQogewotICAgIGNoYXIgYnVmWzEwMF07Ci0gICAgZm9ybWF0X2Zsb2F0KGJ1Ziwgc2l6ZW9mKGJ1ZiksIHYsIFBSRUNfUkVQUik7Ci0KLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhidWYpOworICAgIHJldHVybiBmbG9hdF9zdHJfb3JfcmVwcih2LCAwLCAncicpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogZmxvYXRfc3RyKFB5RmxvYXRPYmplY3QgKnYpCiB7Ci0gICAgY2hhciBidWZbMTAwXTsKLSAgICBmb3JtYXRfZmxvYXQoYnVmLCBzaXplb2YoYnVmKSwgdiwgUFJFQ19TVFIpOwotICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKGJ1Zik7CisgICAgcmV0dXJuIGZsb2F0X3N0cl9vcl9yZXByKHYsIFB5RmxvYXRfU1RSX1BSRUNJU0lPTiwgJ2cnKTsKIH0KIAogLyogQ29tcGFyaXNvbiBpcyBwcmV0dHkgbXVjaCBhIG5pZ2h0bWFyZS4gIFdoZW4gY29tcGFyaW5nIGZsb2F0IHRvIGZsb2F0LApAQCAtNzg0LDcgKzY2OCw3IEBACiAjaWZkZWYgUHlfTkFOCiAgICAgaWYgKGIgPT0gMC4wKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdCBkaXZpc2lvbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0IGRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2VuZGlmCkBAIC04MDYsNyArNjkwLDcgQEAKICNpZmRlZiBQeV9OQU4KICAgICBpZiAoYiA9PSAwLjApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0IGRpdmlzaW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQgZGl2aXNpb24gYnkgemVybyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjZW5kaWYKQEAgLTgzMiwxMCArNzE2LDIwIEBACiAjZW5kaWYKICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJtb2R1bG8iLCByZXR1cm4gMCkKICAgICBtb2QgPSBmbW9kKHZ4LCB3eCk7Ci0gICAgLyogbm90ZTogY2hlY2tpbmcgbW9kKnd4IDwgMCBpcyBpbmNvcnJlY3QgLS0gdW5kZXJmbG93cyB0bwotICAgICAgIDAgaWYgd3ggPCBzcXJ0KHNtYWxsZXN0IG5vbnplcm8gZG91YmxlKSAqLwotICAgIGlmIChtb2QgJiYgKCh3eCA8IDApICE9IChtb2QgPCAwKSkpIHsKLSAgICAgICAgbW9kICs9IHd4OworICAgIGlmIChtb2QpIHsKKyAgICAgICAgLyogZW5zdXJlIHRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRlbm9taW5hdG9yICovCisgICAgICAgIGlmICgod3ggPCAwKSAhPSAobW9kIDwgMCkpIHsKKyAgICAgICAgICAgIG1vZCArPSB3eDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogdGhlIHJlbWFpbmRlciBpcyB6ZXJvLCBhbmQgaW4gdGhlIHByZXNlbmNlIG9mIHNpZ25lZCB6ZXJvZXMKKyAgICAgICAgICAgZm1vZCByZXR1cm5zIGRpZmZlcmVudCByZXN1bHRzIGFjcm9zcyBwbGF0Zm9ybXM7IGVuc3VyZQorICAgICAgICAgICBpdCBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGVub21pbmF0b3I7IHdlJ2QgbGlrZSB0byBkbworICAgICAgICAgICAibW9kID0gd3ggKiAwLjAiLCBidXQgdGhhdCBtYXkgZ2V0IG9wdGltaXplZCBhd2F5ICovCisgICAgICAgIG1vZCAqPSBtb2Q7ICAvKiBoaWRlICJtb2QgPSArMCIgZnJvbSBvcHRpbWl6ZXIgKi8KKyAgICAgICAgaWYgKHd4IDwgMC4wKQorICAgICAgICAgICAgbW9kID0gLW1vZDsKICAgICB9CiAgICAgUHlGUEVfRU5EX1BST1RFQ1QobW9kKQogICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUobW9kKTsKQEAgLTkwNywxMCArODAxLDE1IEBACiAgICAgcmV0dXJuIHI7CiB9CiAKKy8qIGRldGVybWluZSB3aGV0aGVyIHggaXMgYW4gb2RkIGludGVnZXIgb3Igbm90OyAgYXNzdW1lcyB0aGF0CisgICB4IGlzIG5vdCBhbiBpbmZpbml0eSBvciBuYW4uICovCisjZGVmaW5lIERPVUJMRV9JU19PRERfSU5URUdFUih4KSAoZm1vZChmYWJzKHgpLCAyLjApID09IDEuMCkKKwogc3RhdGljIFB5T2JqZWN0ICoKIGZsb2F0X3BvdyhQeU9iamVjdCAqdiwgUHlPYmplY3QgKncsIFB5T2JqZWN0ICp6KQogewogICAgIGRvdWJsZSBpdiwgaXcsIGl4OworICAgIGludCBuZWdhdGVfcmVzdWx0ID0gMDsKIAogICAgIGlmICgoUHlPYmplY3QgKil6ICE9IFB5X05vbmUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInBvdygpIDNyZCBhcmd1bWVudCBub3QgIgpAQCAtOTI1LDE3ICs4MjQsNTMgQEAKICAgICBpZiAoaXcgPT0gMCkgeyAgICAgICAgICAgICAgLyogdioqMCBpcyAxLCBldmVuIDAqKjAgKi8KICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgxLjApOwogICAgIH0KLSAgICBpZiAoaXYgPT0gMC4wKSB7ICAvKiAwKip3IGlzIGVycm9yIGlmIHc8MCwgZWxzZSAxICovCisgICAgaWYgKFB5X0lTX05BTihpdikpIHsgICAgICAgIC8qIG5hbioqdyA9IG5hbiwgdW5sZXNzIHcgPT0gMCAqLworICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGl2KTsKKyAgICB9CisgICAgaWYgKFB5X0lTX05BTihpdykpIHsgICAgICAgIC8qIHYqKm5hbiA9IG5hbiwgdW5sZXNzIHYgPT0gMTsgMSoqbmFuID0gMSAqLworICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGl2ID09IDEuMCA/IDEuMCA6IGl3KTsKKyAgICB9CisgICAgaWYgKFB5X0lTX0lORklOSVRZKGl3KSkgeworICAgICAgICAvKiB2KippbmYgaXM6IDAuMCBpZiBhYnModikgPCAxOyAxLjAgaWYgYWJzKHYpID09IDE7IGluZiBpZgorICAgICAgICAgKiAgICAgYWJzKHYpID4gMSAoaW5jbHVkaW5nIGNhc2Ugd2hlcmUgdiBpbmZpbml0ZSkKKyAgICAgICAgICoKKyAgICAgICAgICogdioqLWluZiBpczogaW5mIGlmIGFicyh2KSA8IDE7IDEuMCBpZiBhYnModikgPT0gMTsgMC4wIGlmCisgICAgICAgICAqICAgICBhYnModikgPiAxIChpbmNsdWRpbmcgY2FzZSB3aGVyZSB2IGluZmluaXRlKQorICAgICAgICAgKi8KKyAgICAgICAgaXYgPSBmYWJzKGl2KTsKKyAgICAgICAgaWYgKGl2ID09IDEuMCkKKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoMS4wKTsKKyAgICAgICAgZWxzZSBpZiAoKGl3ID4gMC4wKSA9PSAoaXYgPiAxLjApKQorICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShmYWJzKGl3KSk7IC8qIHJldHVybiBpbmYgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgwLjApOworICAgIH0KKyAgICBpZiAoUHlfSVNfSU5GSU5JVFkoaXYpKSB7CisgICAgICAgIC8qICgrLWluZikqKncgaXM6IGluZiBmb3IgdyBwb3NpdGl2ZSwgMCBmb3IgdyBuZWdhdGl2ZTsgaW4KKyAgICAgICAgICogICAgIGJvdGggY2FzZXMsIHdlIG5lZWQgdG8gYWRkIHRoZSBhcHByb3ByaWF0ZSBzaWduIGlmIHcgaXMKKyAgICAgICAgICogICAgIGFuIG9kZCBpbnRlZ2VyLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IGl3X2lzX29kZCA9IERPVUJMRV9JU19PRERfSU5URUdFUihpdyk7CisgICAgICAgIGlmIChpdyA+IDAuMCkKKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoaXdfaXNfb2RkID8gaXYgOiBmYWJzKGl2KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoaXdfaXNfb2RkID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weXNpZ24oMC4wLCBpdikgOiAwLjApOworICAgIH0KKyAgICBpZiAoaXYgPT0gMC4wKSB7ICAvKiAwKip3IGlzOiAwIGZvciB3IHBvc2l0aXZlLCAxIGZvciB3IHplcm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAoYWxyZWFkeSBkZWFsdCB3aXRoIGFib3ZlKSwgYW5kIGFuIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdyBpcyBuZWdhdGl2ZS4gKi8KKyAgICAgICAgaW50IGl3X2lzX29kZCA9IERPVUJMRV9JU19PRERfSU5URUdFUihpdyk7CiAgICAgICAgIGlmIChpdyA8IDAuMCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwLjAgY2Fubm90IGJlIHJhaXNlZCB0byBhIG5lZ2F0aXZlIHBvd2VyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAuMCBjYW5ub3QgYmUgcmFpc2VkIHRvIGEgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWdhdGl2ZSBwb3dlciIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgwLjApOworICAgICAgICAvKiB1c2UgY29ycmVjdCBzaWduIGlmIGl3IGlzIG9kZCAqLworICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGl3X2lzX29kZCA/IGl2IDogMC4wKTsKICAgICB9Ci0gICAgaWYgKGl2ID09IDEuMCkgeyAvKiAxKip3IGlzIDEsIGV2ZW4gMSoqaW5mIGFuZCAxKipuYW4gKi8KLSAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgxLjApOwotICAgIH0KKwogICAgIGlmIChpdiA8IDAuMCkgewogICAgICAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4gZXJyb3IgaXMgYSBtZXNzLCBhbmQgYnVtcHMgaW50byBsaWJtCiAgICAgICAgICAqIGJ1Z3Mgc28gd2UgaGF2ZSB0byBmaWd1cmUgaXQgb3V0IG91cnNlbHZlcy4KQEAgLTk0NSwzMyArODgwLDQxIEBACiAgICAgICAgICAgICAgICAgImNhbm5vdCBiZSByYWlzZWQgdG8gYSBmcmFjdGlvbmFsIHBvd2VyIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICAvKiBpdyBpcyBhbiBleGFjdCBpbnRlZ2VyLCBhbGJlaXQgcGVyaGFwcyBhIHZlcnkgbGFyZ2Ugb25lLgorICAgICAgICAvKiBpdyBpcyBhbiBleGFjdCBpbnRlZ2VyLCBhbGJlaXQgcGVyaGFwcyBhIHZlcnkgbGFyZ2UKKyAgICAgICAgICogb25lLiAgUmVwbGFjZSBpdiBieSBpdHMgYWJzb2x1dGUgdmFsdWUgYW5kIHJlbWVtYmVyCisgICAgICAgICAqIHRvIG5lZ2F0ZSB0aGUgcG93IHJlc3VsdCBpZiBpdyBpcyBvZGQuCisgICAgICAgICAqLworICAgICAgICBpdiA9IC1pdjsKKyAgICAgICAgbmVnYXRlX3Jlc3VsdCA9IERPVUJMRV9JU19PRERfSU5URUdFUihpdyk7CisgICAgfQorCisgICAgaWYgKGl2ID09IDEuMCkgeyAvKiAxKip3IGlzIDEsIGV2ZW4gMSoqaW5mIGFuZCAxKipuYW4gKi8KKyAgICAgICAgLyogKC0xKSAqKiBsYXJnZV9pbnRlZ2VyIGFsc28gZW5kcyB1cCBoZXJlLiAgSGVyZSdzIGFuCisgICAgICAgICAqIGV4dHJhY3QgZnJvbSB0aGUgY29tbWVudHMgZm9yIHRoZSBwcmV2aW91cworICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBleHBsYWluaW5nIHdoeSB0aGlzIHNwZWNpYWwgY2FzZSBpcworICAgICAgICAgKiBuZWNlc3Nhcnk6CisgICAgICAgICAqCiAgICAgICAgICAqIC0xIHJhaXNlZCB0byBhbiBleGFjdCBpbnRlZ2VyIHNob3VsZCBuZXZlciBiZSBleGNlcHRpb25hbC4KICAgICAgICAgICogQWxhcywgc29tZSBsaWJtcyAoY2hpZWZseSBnbGliYyBhcyBvZiBlYXJseSAyMDAzKSByZXR1cm4KICAgICAgICAgICogTmFOIGFuZCBzZXQgRURPTSBvbiBwb3coLTEsIGxhcmdlX2ludCkgaWYgdGhlIGludCBkb2Vzbid0CiAgICAgICAgICAqIGhhcHBlbiB0byBiZSByZXByZXNlbnRhYmxlIGluIGEgKkMqIGludGVnZXIuICBUaGF0J3MgYQotICAgICAgICAgKiBidWc7IHdlIGxldCB0aGF0IHNsaWRlIGluIG1hdGgucG93KCkgKHdoaWNoIGN1cnJlbnRseQotICAgICAgICAgKiByZWZsZWN0cyBhbGwgcGxhdGZvcm0gYWNjaWRlbnRzKSwgYnV0IG5vdCBmb3IgUHl0aG9uJ3MgKiouCisgICAgICAgICAqIGJ1Zy4KICAgICAgICAgICovCi0gICAgICAgICBpZiAoaXYgPT0gLTEuMCAmJiBQeV9JU19GSU5JVEUoaXcpKSB7Ci0gICAgICAgICAgICAvKiBSZXR1cm4gMSBpZiBpdyBpcyBldmVuLCAtMSBpZiBpdyBpcyBvZGQ7IHRoZXJlJ3MKLSAgICAgICAgICAgICAqIG5vIGd1YXJhbnRlZSB0aGF0IGFueSBDIGludGVncmFsIHR5cGUgaXMgYmlnCi0gICAgICAgICAgICAgKiBlbm91Z2ggdG8gaG9sZCBpdywgc28gd2UgaGF2ZSB0byBjaGVjayB0aGlzCi0gICAgICAgICAgICAgKiBpbmRpcmVjdGx5LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpeCA9IGZsb29yKGl3ICogMC41KSAqIDIuMDsKLSAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoaXggPT0gaXcgPyAxLjAgOiAtMS4wKTsKLSAgICAgICAgfQotICAgICAgICAvKiBFbHNlIGl2ICE9IC0xLjAsIGFuZCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgYXJlIHBvc3NpYmxlLgotICAgICAgICAgKiBVbmxlc3Mgd2UncmUgdG8gd3JpdGUgcG93KCkgb3Vyc2VsdmVzLCB3ZSBoYXZlIHRvIHRydXN0Ci0gICAgICAgICAqIHRoZSBwbGF0Zm9ybSB0byBkbyB0aGlzIGNvcnJlY3RseS4KLSAgICAgICAgICovCisgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUobmVnYXRlX3Jlc3VsdCA/IC0xLjAgOiAxLjApOwogICAgIH0KKworICAgIC8qIE5vdyBpdiBhbmQgaXcgYXJlIGZpbml0ZSwgaXcgaXMgbm9uemVybywgYW5kIGl2IGlzCisgICAgICogcG9zaXRpdmUgYW5kIG5vdCBlcXVhbCB0byAxLjAuICBXZSBmaW5hbGx5IGFsbG93CisgICAgICogdGhlIHBsYXRmb3JtIHBvdyB0byBzdGVwIGluIGFuZCBkbyB0aGUgcmVzdC4KKyAgICAgKi8KICAgICBlcnJubyA9IDA7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgicG93IiwgcmV0dXJuIE5VTEwpCiAgICAgaXggPSBwb3coaXYsIGl3KTsKICAgICBQeUZQRV9FTkRfUFJPVEVDVChpeCkKICAgICBQeV9BREpVU1RfRVJBTkdFMShpeCk7CisgICAgaWYgKG5lZ2F0ZV9yZXN1bHQpCisgICAgICAgIGl4ID0gLWl4OworCiAgICAgaWYgKGVycm5vICE9IDApIHsKICAgICAgICAgLyogV2UgZG9uJ3QgZXhwZWN0IGFueSBlcnJubyB2YWx1ZSBvdGhlciB0aGFuIEVSQU5HRSwgYnV0CiAgICAgICAgICAqIHRoZSByYW5nZSBvZiBsaWJtIGJ1Z3MgYXBwZWFycyB1bmJvdW5kZWQuCkBAIC05ODMsNiArOTI2LDggQEAKICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGl4KTsKIH0KIAorI3VuZGVmIERPVUJMRV9JU19PRERfSU5URUdFUgorCiBzdGF0aWMgUHlPYmplY3QgKgogZmxvYXRfbmVnKFB5RmxvYXRPYmplY3QgKnYpCiB7CkBAIC0xMTExLDYgKzEwNTYsMjAyIEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tRG91YmxlKHgpOwogfQogCisvKiBfUHlfZG91YmxlX3JvdW5kOiByb3VuZHMgYSBmaW5pdGUgbm9uemVybyBkb3VibGUgdG8gdGhlIGNsb3Nlc3QgbXVsdGlwbGUgb2YKKyAgIDEwKiotbmRpZ2l0czsgaGVyZSBuZGlnaXRzIGlzIHdpdGhpbiByZWFzb25hYmxlIGJvdW5kcyAodHlwaWNhbGx5LCAtMzA4IDw9CisgICBuZGlnaXRzIDw9IDMyMykuICBSZXR1cm5zIGEgUHl0aG9uIGZsb2F0LCBvciBzZXRzIGEgUHl0aG9uIGVycm9yIGFuZAorICAgcmV0dXJucyBOVUxMIG9uIGZhaWx1cmUgKE92ZXJmbG93RXJyb3IgYW5kIG1lbW9yeSBlcnJvcnMgYXJlIHBvc3NpYmxlKS4gKi8KKworI2lmbmRlZiBQWV9OT19TSE9SVF9GTE9BVF9SRVBSCisvKiB2ZXJzaW9uIG9mIF9QeV9kb3VibGVfcm91bmQgdGhhdCB1c2VzIHRoZSBjb3JyZWN0bHktcm91bmRlZCBzdHJpbmc8LT5kb3VibGUKKyAgIGNvbnZlcnNpb25zIGZyb20gUHl0aG9uL2R0b2EuYyAqLworCisvKiBGSVZFX1BPV19MSU1JVCBpcyB0aGUgbGFyZ2VzdCBrIHN1Y2ggdGhhdCA1KiprIGlzIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcworICAgYSBkb3VibGUuICBTaW5jZSB3ZSdyZSB1c2luZyB0aGUgY29kZSBpbiBQeXRob24vZHRvYS5jLCBpdCBzaG91bGQgYmUgc2FmZQorICAgdG8gYXNzdW1lIHRoYXQgQyBkb3VibGVzIGFyZSBJRUVFIDc1NCBiaW5hcnk2NCBmb3JtYXQuICBUbyBiZSBvbiB0aGUgc2FmZQorICAgc2lkZSwgd2UgY2hlY2sgdGhpcy4gKi8KKyNpZiBEQkxfTUFOVF9ESUcgPT0gNTMKKyNkZWZpbmUgRklWRV9QT1dfTElNSVQgMjIKKyNlbHNlCisjZXJyb3IgIkMgZG91YmxlcyBkbyBub3QgYXBwZWFyIHRvIGJlIElFRUUgNzU0IGJpbmFyeTY0IGZvcm1hdCIKKyNlbmRpZgorCitQeU9iamVjdCAqCitfUHlfZG91YmxlX3JvdW5kKGRvdWJsZSB4LCBpbnQgbmRpZ2l0cykgeworCisgICAgZG91YmxlIHJvdW5kZWQsIG07CisgICAgUHlfc3NpemVfdCBidWZsZW4sIG15YnVmbGVuPTEwMDsKKyAgICBjaGFyICpidWYsICpidWZfZW5kLCBzaG9ydGJ1ZlsxMDBdLCAqbXlidWY9c2hvcnRidWY7CisgICAgaW50IGRlY3B0LCBzaWduLCB2YWwsIGhhbGZ3YXlfY2FzZTsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKworICAgIC8qIFRoZSBiYXNpYyBpZGVhIGlzIHZlcnkgc2ltcGxlOiBjb252ZXJ0IGFuZCByb3VuZCB0aGUgZG91YmxlIHRvIGEKKyAgICAgICBkZWNpbWFsIHN0cmluZyB1c2luZyBfUHlfZGdfZHRvYSwgdGhlbiBjb252ZXJ0IHRoYXQgZGVjaW1hbCBzdHJpbmcKKyAgICAgICBiYWNrIHRvIGEgZG91YmxlIHdpdGggX1B5X2RnX3N0cnRvZC4gIFRoZXJlJ3Mgb25lIG1pbm9yIGRpZmZpY3VsdHk6CisgICAgICAgUHl0aG9uIDIueCBleHBlY3RzIHJvdW5kIHRvIGRvIHJvdW5kLWhhbGYtYXdheS1mcm9tLXplcm8sIHdoaWxlCisgICAgICAgX1B5X2RnX2R0b2EgZG9lcyByb3VuZC1oYWxmLXRvLWV2ZW4uICBTbyB3ZSBuZWVkIHNvbWUgd2F5IHRvIGRldGVjdAorICAgICAgIGFuZCBjb3JyZWN0IHRoZSBoYWxmd2F5IGNhc2VzLgorCisgICAgICAgRGV0ZWN0aW9uOiBhIGhhbGZ3YXkgdmFsdWUgaGFzIHRoZSBmb3JtIGsgKiAwLjUgKiAxMCoqLW5kaWdpdHMgZm9yCisgICAgICAgc29tZSBvZGQgaW50ZWdlciBrLiAgT3IgaW4gb3RoZXIgd29yZHMsIGEgcmF0aW9uYWwgbnVtYmVyIHggaXMKKyAgICAgICBleGFjdGx5IGhhbGZ3YXkgYmV0d2VlbiB0d28gbXVsdGlwbGVzIG9mIDEwKiotbmRpZ2l0cyBpZiBpdHMKKyAgICAgICAyLXZhbHVhdGlvbiBpcyBleGFjdGx5IC1uZGlnaXRzLTEgYW5kIGl0cyA1LXZhbHVhdGlvbiBpcyBhdCBsZWFzdAorICAgICAgIC1uZGlnaXRzLiAgRm9yIG5kaWdpdHMgPj0gMCB0aGUgbGF0dGVyIGNvbmRpdGlvbiBpcyBhdXRvbWF0aWNhbGx5CisgICAgICAgc2F0aXNmaWVkIGZvciBhIGJpbmFyeSBmbG9hdCB4LCBzaW5jZSBhbnkgc3VjaCBmbG9hdCBoYXMKKyAgICAgICBub25uZWdhdGl2ZSA1LXZhbHVhdGlvbi4gIEZvciAwID4gbmRpZ2l0cyA+PSAtMjIsIHggbmVlZHMgdG8gYmUgYW4KKyAgICAgICBpbnRlZ3JhbCBtdWx0aXBsZSBvZiA1KiotbmRpZ2l0czsgd2UgY2FuIGNoZWNrIHRoaXMgdXNpbmcgZm1vZC4KKyAgICAgICBGb3IgLTIyID4gbmRpZ2l0cywgdGhlcmUgYXJlIG5vIGhhbGZ3YXkgY2FzZXM6IDUqKjIzIHRha2VzIDU0IGJpdHMKKyAgICAgICB0byByZXByZXNlbnQgZXhhY3RseSwgc28gYW55IG9kZCBtdWx0aXBsZSBvZiAwLjUgKiAxMCoqbiBmb3IgbiA+PQorICAgICAgIDIzIHRha2VzIGF0IGxlYXN0IDU0IGJpdHMgb2YgcHJlY2lzaW9uIHRvIHJlcHJlc2VudCBleGFjdGx5LgorCisgICAgICAgQ29ycmVjdGlvbjogYSBzaW1wbGUgc3RyYXRlZ3kgZm9yIGRlYWxpbmcgd2l0aCBoYWxmd2F5IGNhc2VzIGlzIHRvCisgICAgICAgKGZvciB0aGUgaGFsZndheSBjYXNlcyBvbmx5KSBjYWxsIF9QeV9kZ19kdG9hIHdpdGggYW4gYXJndW1lbnQgb2YKKyAgICAgICBuZGlnaXRzKzEgaW5zdGVhZCBvZiBuZGlnaXRzICh0aHVzIGRvaW5nIGFuIGV4YWN0IGNvbnZlcnNpb24gdG8KKyAgICAgICBkZWNpbWFsKSwgcm91bmQgdGhlIHJlc3VsdGluZyBzdHJpbmcgbWFudWFsbHksIGFuZCB0aGVuIGNvbnZlcnQKKyAgICAgICBiYWNrIHVzaW5nIF9QeV9kZ19zdHJ0b2QuCisgICAgKi8KKworICAgIC8qIG5hbnMsIGluZmluaXRpZXMgYW5kIHplcm9zIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZWFsdAorICAgICAgIHdpdGggYnkgdGhlIGNhbGxlciAoaW4gdGhpcyBjYXNlLCBidWlsdGluX3JvdW5kKSAqLworICAgIGFzc2VydChQeV9JU19GSU5JVEUoeCkgJiYgeCAhPSAwLjApOworCisgICAgLyogZmluZCAyLXZhbHVhdGlvbiB2YWwgb2YgeCAqLworICAgIG0gPSBmcmV4cCh4LCAmdmFsKTsKKyAgICB3aGlsZSAobSAhPSBmbG9vcihtKSkgeworICAgICAgICBtICo9IDIuMDsKKyAgICAgICAgdmFsLS07CisgICAgfQorCisgICAgLyogZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIGhhbGZ3YXkgY2FzZSAqLworICAgIGlmICh2YWwgPT0gLW5kaWdpdHMtMSkgeworICAgICAgICBpZiAobmRpZ2l0cyA+PSAwKQorICAgICAgICAgICAgaGFsZndheV9jYXNlID0gMTsKKyAgICAgICAgZWxzZSBpZiAobmRpZ2l0cyA+PSAtRklWRV9QT1dfTElNSVQpIHsKKyAgICAgICAgICAgIGRvdWJsZSBmaXZlX3BvdyA9IDEuMDsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgZm9yIChpPTA7IGkgPCAtbmRpZ2l0czsgaSsrKQorICAgICAgICAgICAgICAgIGZpdmVfcG93ICo9IDUuMDsKKyAgICAgICAgICAgIGhhbGZ3YXlfY2FzZSA9IGZtb2QoeCwgZml2ZV9wb3cpID09IDAuMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBoYWxmd2F5X2Nhc2UgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGhhbGZ3YXlfY2FzZSA9IDA7CisKKyAgICAvKiByb3VuZCB0byBhIGRlY2ltYWwgc3RyaW5nOyB1c2UgYW4gZXh0cmEgcGxhY2UgZm9yIGhhbGZ3YXkgY2FzZSAqLworICAgIGJ1ZiA9IF9QeV9kZ19kdG9hKHgsIDMsIG5kaWdpdHMraGFsZndheV9jYXNlLCAmZGVjcHQsICZzaWduLCAmYnVmX2VuZCk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBidWZsZW4gPSBidWZfZW5kIC0gYnVmOworCisgICAgLyogaW4gaGFsZndheSBjYXNlLCBkbyB0aGUgcm91bmQtaGFsZi1hd2F5LWZyb20temVybyBtYW51YWxseSAqLworICAgIGlmIChoYWxmd2F5X2Nhc2UpIHsKKyAgICAgICAgaW50IGksIGNhcnJ5OworICAgICAgICAvKiBzYW5pdHkgY2hlY2s6IF9QeV9kZ19kdG9hIHNob3VsZCBub3QgaGF2ZSBzdHJpcHBlZAorICAgICAgICAgICBhbnkgemVyb3MgZnJvbSB0aGUgcmVzdWx0OiB0aGVyZSBzaG91bGQgYmUgZXhhY3RseQorICAgICAgICAgICBuZGlnaXRzKzEgcGxhY2VzIGZvbGxvd2luZyB0aGUgZGVjaW1hbCBwb2ludCwgYW5kCisgICAgICAgICAgIHRoZSBsYXN0IGRpZ2l0IGluIHRoZSBidWZmZXIgc2hvdWxkIGJlIGEgJzUnLiovCisgICAgICAgIGFzc2VydChidWZsZW4gLSBkZWNwdCA9PSBuZGlnaXRzKzEpOworICAgICAgICBhc3NlcnQoYnVmW2J1Zmxlbi0xXSA9PSAnNScpOworCisgICAgICAgIC8qIGluY3JlbWVudCBhbmQgc2hpZnQgcmlnaHQgYXQgdGhlIHNhbWUgdGltZS4gKi8KKyAgICAgICAgZGVjcHQgKz0gMTsKKyAgICAgICAgY2FycnkgPSAxOworICAgICAgICBmb3IgKGk9YnVmbGVuLTE7IGktLSA+IDA7KSB7CisgICAgICAgICAgICBjYXJyeSArPSBidWZbaV0gLSAnMCc7CisgICAgICAgICAgICBidWZbaSsxXSA9IGNhcnJ5ICUgMTAgKyAnMCc7CisgICAgICAgICAgICBjYXJyeSAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICBidWZbMF0gPSBjYXJyeSArICcwJzsKKyAgICB9CisKKyAgICAvKiBHZXQgbmV3IGJ1ZmZlciBpZiBzaG9ydGJ1ZiBpcyB0b28gc21hbGwuICBTcGFjZSBuZWVkZWQgPD0gYnVmX2VuZCAtCisgICAgICAgYnVmICsgODogKDEgZXh0cmEgZm9yICcwJywgMSBmb3Igc2lnbiwgNSBmb3IgZXhwLCAxIGZvciAnXDAnKS4gKi8KKyAgICBpZiAoYnVmbGVuICsgOCA+IG15YnVmbGVuKSB7CisgICAgICAgIG15YnVmbGVuID0gYnVmbGVuKzg7CisgICAgICAgIG15YnVmID0gKGNoYXIgKilQeU1lbV9NYWxsb2MobXlidWZsZW4pOworICAgICAgICBpZiAobXlidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBjb3B5IGJ1ZiB0byBteWJ1ZiwgYWRkaW5nIGV4cG9uZW50LCBzaWduIGFuZCBsZWFkaW5nIDAgKi8KKyAgICBQeU9TX3NucHJpbnRmKG15YnVmLCBteWJ1ZmxlbiwgIiVzMCVzZSVkIiwgKHNpZ24gPyAiLSIgOiAiIiksCisgICAgICAgICAgICAgICAgICBidWYsIGRlY3B0IC0gKGludClidWZsZW4pOworCisgICAgLyogYW5kIGNvbnZlcnQgdGhlIHJlc3VsdGluZyBzdHJpbmcgYmFjayB0byBhIGRvdWJsZSAqLworICAgIGVycm5vID0gMDsKKyAgICByb3VuZGVkID0gX1B5X2RnX3N0cnRvZChteWJ1ZiwgTlVMTCk7CisgICAgaWYgKGVycm5vID09IEVSQU5HRSAmJiBmYWJzKHJvdW5kZWQpID49IDEuKQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyb3VuZGVkIHZhbHVlIHRvbyBsYXJnZSB0byByZXByZXNlbnQiKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IFB5RmxvYXRfRnJvbURvdWJsZShyb3VuZGVkKTsKKworICAgIC8qIGRvbmUgY29tcHV0aW5nIHZhbHVlOyAgbm93IGNsZWFuIHVwICovCisgICAgaWYgKG15YnVmICE9IHNob3J0YnVmKQorICAgICAgICBQeU1lbV9GcmVlKG15YnVmKTsKKyAgZXhpdDoKKyAgICBfUHlfZGdfZnJlZWR0b2EoYnVmKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjdW5kZWYgRklWRV9QT1dfTElNSVQKKworI2Vsc2UgLyogUFlfTk9fU0hPUlRfRkxPQVRfUkVQUiAqLworCisvKiBmYWxsYmFjayB2ZXJzaW9uLCB0byBiZSB1c2VkIHdoZW4gY29ycmVjdGx5IHJvdW5kZWQgYmluYXJ5PC0+ZGVjaW1hbAorICAgY29udmVyc2lvbnMgYXJlbid0IGF2YWlsYWJsZSAqLworCitQeU9iamVjdCAqCitfUHlfZG91YmxlX3JvdW5kKGRvdWJsZSB4LCBpbnQgbmRpZ2l0cykgeworICAgIGRvdWJsZSBwb3cxLCBwb3cyLCB5LCB6OworICAgIGlmIChuZGlnaXRzID49IDApIHsKKyAgICAgICAgaWYgKG5kaWdpdHMgPiAyMikgeworICAgICAgICAgICAgLyogcG93MSBhbmQgcG93MiBhcmUgZWFjaCBzYWZlIGZyb20gb3ZlcmZsb3csIGJ1dAorICAgICAgICAgICAgICAgcG93MSpwb3cyIH49IHBvdygxMC4wLCBuZGlnaXRzKSBtaWdodCBvdmVyZmxvdyAqLworICAgICAgICAgICAgcG93MSA9IHBvdygxMC4wLCAoZG91YmxlKShuZGlnaXRzLTIyKSk7CisgICAgICAgICAgICBwb3cyID0gMWUyMjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBvdzEgPSBwb3coMTAuMCwgKGRvdWJsZSluZGlnaXRzKTsKKyAgICAgICAgICAgIHBvdzIgPSAxLjA7CisgICAgICAgIH0KKyAgICAgICAgeSA9ICh4KnBvdzEpKnBvdzI7CisgICAgICAgIC8qIGlmIHkgb3ZlcmZsb3dzLCB0aGVuIHJvdW5kZWQgdmFsdWUgaXMgZXhhY3RseSB4ICovCisgICAgICAgIGlmICghUHlfSVNfRklOSVRFKHkpKQorICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSh4KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHBvdzEgPSBwb3coMTAuMCwgKGRvdWJsZSktbmRpZ2l0cyk7CisgICAgICAgIHBvdzIgPSAxLjA7IC8qIHVudXNlZDsgc2lsZW5jZXMgYSBnY2MgY29tcGlsZXIgd2FybmluZyAqLworICAgICAgICB5ID0geCAvIHBvdzE7CisgICAgfQorCisgICAgeiA9IHJvdW5kKHkpOworICAgIGlmIChmYWJzKHkteikgPT0gMC41KQorICAgICAgICAvKiBoYWxmd2F5IGJldHdlZW4gdHdvIGludGVnZXJzOyB1c2Ugcm91bmQtYXdheS1mcm9tLXplcm8gKi8KKyAgICAgICAgeiA9IHkgKyBjb3B5c2lnbigwLjUsIHkpOworCisgICAgaWYgKG5kaWdpdHMgPj0gMCkKKyAgICAgICAgeiA9ICh6IC8gcG93MikgLyBwb3cxOworICAgIGVsc2UKKyAgICAgICAgeiAqPSBwb3cxOworCisgICAgLyogaWYgY29tcHV0YXRpb24gcmVzdWx0ZWQgaW4gb3ZlcmZsb3csIHJhaXNlIE92ZXJmbG93RXJyb3IgKi8KKyAgICBpZiAoIVB5X0lTX0ZJTklURSh6KSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJvdmVyZmxvdyBvY2N1cnJlZCBkdXJpbmcgcm91bmQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSh6KTsKK30KKworI2VuZGlmIC8qIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIgKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKIGZsb2F0X2Zsb2F0KFB5T2JqZWN0ICp2KQogewpAQCAtMTI2MywxNCArMTQwNCwxNCBAQAogPj4+IDMuMTQxNTkuaGV4KClcblwKICcweDEuOTIxZjlmMDFiODY2ZXArMSciKTsKIAotLyogQ2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcgbWF0Y2ggdXNlZCBmb3IgbmFuIGFuZCBpbmYgZGV0ZWN0aW9uLiB0IHNob3VsZCBiZQotICAgbG93ZXItY2FzZSBhbmQgbnVsbC10ZXJtaW5hdGVkLiAgUmV0dXJuIGEgbm9uemVybyByZXN1bHQgaWYgdGhlIGZpcnN0Ci0gICBzdHJsZW4odCkgY2hhcmFjdGVycyBvZiBzIG1hdGNoIHQgYW5kIDAgb3RoZXJ3aXNlLiAqLworLyogQ2FzZS1pbnNlbnNpdGl2ZSBsb2NhbGUtaW5kZXBlbmRlbnQgc3RyaW5nIG1hdGNoIHVzZWQgZm9yIG5hbiBhbmQgaW5mCisgICBkZXRlY3Rpb24uIHQgc2hvdWxkIGJlIGxvd2VyLWNhc2UgYW5kIG51bGwtdGVybWluYXRlZC4gIFJldHVybiBhIG5vbnplcm8KKyAgIHJlc3VsdCBpZiB0aGUgZmlyc3Qgc3RybGVuKHQpIGNoYXJhY3RlcnMgb2YgcyBtYXRjaCB0IGFuZCAwIG90aGVyd2lzZS4gKi8KIAogc3RhdGljIGludAogY2FzZV9pbnNlbnNpdGl2ZV9tYXRjaChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICp0KQogewotICAgIHdoaWxlKCp0ICYmIHRvbG93ZXIoKnMpID09ICp0KSB7CisgICAgd2hpbGUoKnQgJiYgUHlfVE9MT1dFUigqcykgPT0gKnQpIHsKICAgICAgICAgcysrOwogICAgICAgICB0Kys7CiAgICAgfQpAQCAtMTM0Myw3ICsxNDg0LDcgQEAKICAgICAgKioqKioqKioqKioqKioqKioqKiovCiAKICAgICAvKiBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIG9wdGlvbmFsIHNpZ24gKi8KLSAgICB3aGlsZSAoKnMgJiYgaXNzcGFjZShQeV9DSEFSTUFTSygqcykpKQorICAgIHdoaWxlIChQeV9JU1NQQUNFKCpzKSkKICAgICAgICAgcysrOwogICAgIGlmICgqcyA9PSAnLScpIHsKICAgICAgICAgcysrOwpAQCAtMTM3NCw3ICsxNTE1LDcgQEAKICAgICBzX3N0b3JlID0gczsKICAgICBpZiAoKnMgPT0gJzAnKSB7CiAgICAgICAgIHMrKzsKLSAgICAgICAgaWYgKHRvbG93ZXIoKnMpID09IChpbnQpJ3gnKQorICAgICAgICBpZiAoKnMgPT0gJ3gnIHx8ICpzID09ICdYJykKICAgICAgICAgICAgIHMrKzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcyA9IHNfc3RvcmU7CkBAIC0xNDA0LDcgKzE1NDUsNyBAQAogICAgICAgICBnb3RvIGluc2FuZV9sZW5ndGhfZXJyb3I7CiAKICAgICAvKiBbcCA8ZXhwb25lbnQ+XSAqLwotICAgIGlmICh0b2xvd2VyKCpzKSA9PSAoaW50KSdwJykgeworICAgIGlmICgqcyA9PSAncCcgfHwgKnMgPT0gJ1AnKSB7CiAgICAgICAgIHMrKzsKICAgICAgICAgZXhwX3N0YXJ0ID0gczsKICAgICAgICAgaWYgKCpzID09ICctJyB8fCAqcyA9PSAnKycpCkBAIC0xNTAxLDcgKzE2NDIsNyBAQAogCiAgIGZpbmlzaGVkOgogICAgIC8qIG9wdGlvbmFsIHRyYWlsaW5nIHdoaXRlc3BhY2UgbGVhZGluZyB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KLSAgICB3aGlsZSAoKnMgJiYgaXNzcGFjZShQeV9DSEFSTUFTSygqcykpKQorICAgIHdoaWxlIChQeV9JU1NQQUNFKCpzKSkKICAgICAgICAgcysrOwogICAgIGlmIChzICE9IHNfZW5kKQogICAgICAgICBnb3RvIHBhcnNlX2Vycm9yOwpAQCAtMjExNiwxNSArMjI1NywyMSBAQAogICAgICAgICAgICAgICAgICBpKyssIHArKykgewogICAgICAgICAgICAgICAgIGlmIChQeUZsb2F0X0NoZWNrRXhhY3QocCkgJiYKICAgICAgICAgICAgICAgICAgICAgUHlfUkVGQ05UKHApICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBidWZbMTAwXTsKLSAgICAgICAgICAgICAgICAgICAgUHlGbG9hdF9Bc1N0cmluZyhidWYsIHApOwotICAgICAgICAgICAgICAgICAgICAvKiBYWFgodHdvdXRlcnMpIGNhc3QgcmVmY291bnQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1bnRpbCAlemQgaXMgdW5pdmVyc2FsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlCi0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgUHlGbG9hdF9BU19ET1VCTEUocCksICdyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBpZiAoYnVmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFgodHdvdXRlcnMpIGNhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmNvdW50IHRvIGxvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudGlsICV6ZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAiIyAgIDxmbG9hdCBhdCAlcCwgcmVmY250PSVsZCwgdmFsPSVzPlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIChsb25nKVB5X1JFRkNOVChwKSwgYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CkBAIC0yMzQxLDcgKzI0ODgsNyBAQAogCiAgICAgICAgIC8qIEVpZ2h0aCBieXRlICovCiAgICAgICAgICpwID0gZmxvICYgMHhGRjsKLSAgICAgICAgcCArPSBpbmNyOworICAgICAgICAvKiBwICs9IGluY3I7IFVubmVlZGVkIChmb3Igbm93KSAqLwogCiAgICAgICAgIC8qIERvbmUgKi8KICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9PYmplY3RzL2ZyYW1lb2JqZWN0LmMgYi9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKaW5kZXggMTEyMTEwYy4uYTM0NzZjZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mcmFtZW9iamVjdC5jCisrKyBiL09iamVjdHMvZnJhbWVvYmplY3QuYwpAQCAtMjAsMTIgKzIwLDM4IEBACiAgICAgeyJmX2J1aWx0aW5zIiwgICAgICBUX09CSkVDVCwgICAgICAgT0ZGKGZfYnVpbHRpbnMpLFJPfSwKICAgICB7ImZfZ2xvYmFscyIsICAgICAgIFRfT0JKRUNULCAgICAgICBPRkYoZl9nbG9iYWxzKSwgUk99LAogICAgIHsiZl9sYXN0aSIsICAgICAgICAgVF9JTlQsICAgICAgICAgIE9GRihmX2xhc3RpKSwgICBST30sCi0gICAgeyJmX2V4Y190eXBlIiwgICAgICBUX09CSkVDVCwgICAgICAgT0ZGKGZfZXhjX3R5cGUpfSwKLSAgICB7ImZfZXhjX3ZhbHVlIiwgICAgIFRfT0JKRUNULCAgICAgICBPRkYoZl9leGNfdmFsdWUpfSwKLSAgICB7ImZfZXhjX3RyYWNlYmFjayIsIFRfT0JKRUNULCAgICAgICBPRkYoZl9leGNfdHJhY2ViYWNrKX0sCiAgICAge05VTEx9ICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKKyNkZWZpbmUgV0FSTl9HRVRfU0VUKE5BTUUpIFwKK3N0YXRpYyBQeU9iamVjdCAqIGZyYW1lX2dldF8gIyMgTkFNRShQeUZyYW1lT2JqZWN0ICpmKSB7IFwKKyAgICBpZiAoUHlFcnJfV2FyblB5M2soI05BTUUgIiBoYXMgYmVlbiByZW1vdmVkIGluIDMueCIsIDIpIDwgMCkgXAorICAgICAgICByZXR1cm4gTlVMTDsgXAorICAgIGlmIChmLT5OQU1FKSB7IFwKKyAgICAgICAgUHlfSU5DUkVGKGYtPk5BTUUpOyBcCisgICAgICAgIHJldHVybiBmLT5OQU1FOyBcCisgICAgfSBcCisgICAgUHlfUkVUVVJOX05PTkU7ICAgICBcCit9IFwKK3N0YXRpYyBpbnQgZnJhbWVfc2V0XyAjIyBOQU1FKFB5RnJhbWVPYmplY3QgKmYsIFB5T2JqZWN0ICpuZXcpIHsgXAorICAgIGlmIChQeUVycl9XYXJuUHkzaygjTkFNRSAiIGhhcyBiZWVuIHJlbW92ZWQgaW4gMy54IiwgMikgPCAwKSBcCisgICAgICAgIHJldHVybiAtMTsgXAorICAgIGlmIChmLT5OQU1FKSB7IFwKKyAgICAgICAgUHlfQ0xFQVIoZi0+TkFNRSk7IFwKKyAgICB9IFwKKyAgICBpZiAobmV3ID09IFB5X05vbmUpIFwKKyAgICAgICAgbmV3ID0gTlVMTDsgXAorICAgIFB5X1hJTkNSRUYobmV3KTsgXAorICAgIGYtPk5BTUUgPSBuZXc7IFwKKyAgICByZXR1cm4gMDsgXAorfQorCisKK1dBUk5fR0VUX1NFVChmX2V4Y190cmFjZWJhY2spCitXQVJOX0dFVF9TRVQoZl9leGNfdHlwZSkKK1dBUk5fR0VUX1NFVChmX2V4Y192YWx1ZSkKKworCiBzdGF0aWMgUHlPYmplY3QgKgogZnJhbWVfZ2V0bG9jYWxzKFB5RnJhbWVPYmplY3QgKmYsIHZvaWQgKmNsb3N1cmUpCiB7CkBAIC0zNCwxNyArNjAsMTkgQEAKICAgICByZXR1cm4gZi0+Zl9sb2NhbHM7CiB9CiAKK2ludAorUHlGcmFtZV9HZXRMaW5lTnVtYmVyKFB5RnJhbWVPYmplY3QgKmYpCit7CisgICAgaWYgKGYtPmZfdHJhY2UpCisgICAgICAgIHJldHVybiBmLT5mX2xpbmVubzsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBQeUNvZGVfQWRkcjJMaW5lKGYtPmZfY29kZSwgZi0+Zl9sYXN0aSk7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBmcmFtZV9nZXRsaW5lbm8oUHlGcmFtZU9iamVjdCAqZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBpbnQgbGluZW5vOwotCi0gICAgaWYgKGYtPmZfdHJhY2UpCi0gICAgICAgIGxpbmVubyA9IGYtPmZfbGluZW5vOwotICAgIGVsc2UKLSAgICAgICAgbGluZW5vID0gUHlDb2RlX0FkZHIyTGluZShmLT5mX2NvZGUsIGYtPmZfbGFzdGkpOwotCi0gICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKGxpbmVubyk7CisgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKFB5RnJhbWVfR2V0TGluZU51bWJlcihmKSk7CiB9CiAKIC8qIFNldHRlciBmb3IgZl9saW5lbm8gLSB5b3UgY2FuIHNldCBmX2xpbmVubyBmcm9tIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uIGluCkBAIC04Niw3ICsxMTQsNiBAQAogICAgIGludCBpbl9maW5hbGx5W0NPX01BWEJMT0NLU107ICAgICAgIC8qIChkaXR0bykgKi8KICAgICBpbnQgYmxvY2tzdGFja190b3AgPSAwOyAgICAgICAgICAgICAvKiAoZGl0dG8pICovCiAgICAgdW5zaWduZWQgY2hhciBzZXR1cF9vcCA9IDA7ICAgICAgICAgLyogKGRpdHRvKSAqLwotICAgIGNoYXIgKnRtcDsKIAogICAgIC8qIGZfbGluZW5vIG11c3QgYmUgYW4gaW50ZWdlci4gKi8KICAgICBpZiAoIVB5SW50X0NoZWNrKHBfbmV3X2xpbmVubykpIHsKQEAgLTEwMCw3ICsxMjcsOCBAQAogICAgIGlmICghZi0+Zl90cmFjZSkKICAgICB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImZfbGluZW5vIGNhbiBvbmx5IGJlIHNldCBieSBhIHRyYWNlIGZ1bmN0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAiZl9saW5lbm8gY2FuIG9ubHkgYmUgc2V0IGJ5IGEiCisgICAgICAgICAgICAgICAgICAgICAiIGxpbmUgdHJhY2UgZnVuY3Rpb24iKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtMTEyLDIyICsxNDAsMjggQEAKICAgICAgICAgICAgICAgICAgICAgIG5ld19saW5lbm8pOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotCi0gICAgLyogRmluZCB0aGUgYnl0ZWNvZGUgb2Zmc2V0IGZvciB0aGUgc3RhcnQgb2YgdGhlIGdpdmVuIGxpbmUsIG9yIHRoZQotICAgICAqIGZpcnN0IGNvZGUtb3duaW5nIGxpbmUgYWZ0ZXIgaXQuICovCi0gICAgUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKGYtPmZfY29kZS0+Y29fbG5vdGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wLCAmbG5vdGFiX2xlbik7Ci0gICAgbG5vdGFiID0gKHVuc2lnbmVkIGNoYXIgKikgdG1wOwotICAgIGFkZHIgPSAwOwotICAgIGxpbmUgPSBmLT5mX2NvZGUtPmNvX2ZpcnN0bGluZW5vOwotICAgIG5ld19sYXN0aSA9IC0xOwotICAgIGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbG5vdGFiX2xlbjsgb2Zmc2V0ICs9IDIpIHsKLSAgICAgICAgYWRkciArPSBsbm90YWJbb2Zmc2V0XTsKLSAgICAgICAgbGluZSArPSBsbm90YWJbb2Zmc2V0KzFdOwotICAgICAgICBpZiAobGluZSA+PSBuZXdfbGluZW5vKSB7Ci0gICAgICAgICAgICBuZXdfbGFzdGkgPSBhZGRyOwotICAgICAgICAgICAgbmV3X2xpbmVubyA9IGxpbmU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBlbHNlIGlmIChuZXdfbGluZW5vID09IGYtPmZfY29kZS0+Y29fZmlyc3RsaW5lbm8pIHsKKyAgICAgICAgbmV3X2xhc3RpID0gMDsKKyAgICAgICAgbmV3X2xpbmVubyA9IGYtPmZfY29kZS0+Y29fZmlyc3RsaW5lbm87CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBGaW5kIHRoZSBieXRlY29kZSBvZmZzZXQgZm9yIHRoZSBzdGFydCBvZiB0aGUgZ2l2ZW4KKyAgICAgICAgICogbGluZSwgb3IgdGhlIGZpcnN0IGNvZGUtb3duaW5nIGxpbmUgYWZ0ZXIgaXQuICovCisgICAgICAgIGNoYXIgKnRtcDsKKyAgICAgICAgUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKGYtPmZfY29kZS0+Y29fbG5vdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcCwgJmxub3RhYl9sZW4pOworICAgICAgICBsbm90YWIgPSAodW5zaWduZWQgY2hhciAqKSB0bXA7CisgICAgICAgIGFkZHIgPSAwOworICAgICAgICBsaW5lID0gZi0+Zl9jb2RlLT5jb19maXJzdGxpbmVubzsKKyAgICAgICAgbmV3X2xhc3RpID0gLTE7CisgICAgICAgIGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbG5vdGFiX2xlbjsgb2Zmc2V0ICs9IDIpIHsKKyAgICAgICAgICAgIGFkZHIgKz0gbG5vdGFiW29mZnNldF07CisgICAgICAgICAgICBsaW5lICs9IGxub3RhYltvZmZzZXQrMV07CisgICAgICAgICAgICBpZiAobGluZSA+PSBuZXdfbGluZW5vKSB7CisgICAgICAgICAgICAgICAgbmV3X2xhc3RpID0gYWRkcjsKKyAgICAgICAgICAgICAgICBuZXdfbGluZW5vID0gbGluZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMzI4LDE2ICszNjIsMTQgQEAKIHN0YXRpYyBpbnQKIGZyYW1lX3NldHRyYWNlKFB5RnJhbWVPYmplY3QgKmYsIFB5T2JqZWN0KiB2LCB2b2lkICpjbG9zdXJlKQogeworICAgIFB5T2JqZWN0KiBvbGRfdmFsdWU7CisKICAgICAvKiBXZSByZWx5IG9uIGZfbGluZW5vIGJlaW5nIGFjY3VyYXRlIHdoZW4gZl90cmFjZSBpcyBzZXQuICovCisgICAgZi0+Zl9saW5lbm8gPSBQeUZyYW1lX0dldExpbmVOdW1iZXIoZik7CiAKLSAgICBQeU9iamVjdCogb2xkX3ZhbHVlID0gZi0+Zl90cmFjZTsKLQorICAgIG9sZF92YWx1ZSA9IGYtPmZfdHJhY2U7CiAgICAgUHlfWElOQ1JFRih2KTsKICAgICBmLT5mX3RyYWNlID0gdjsKLQotICAgIGlmICh2ICE9IE5VTEwpCi0gICAgICAgIGYtPmZfbGluZW5vID0gUHlDb2RlX0FkZHIyTGluZShmLT5mX2NvZGUsIGYtPmZfbGFzdGkpOwotCiAgICAgUHlfWERFQ1JFRihvbGRfdmFsdWUpOwogCiAgICAgcmV0dXJuIDA7CkBAIC0zNTUsNiArMzg3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpZnJhbWVfc2V0bGluZW5vLCBOVUxMfSwKICAgICB7ImZfdHJhY2UiLCAgICAgICAgIChnZXR0ZXIpZnJhbWVfZ2V0dHJhY2UsIChzZXR0ZXIpZnJhbWVfc2V0dHJhY2UsIE5VTEx9LAogICAgIHsiZl9yZXN0cmljdGVkIiwoZ2V0dGVyKWZyYW1lX2dldHJlc3RyaWN0ZWQsTlVMTCwgTlVMTH0sCisgICAgeyJmX2V4Y190cmFjZWJhY2siLCAoZ2V0dGVyKWZyYW1lX2dldF9mX2V4Y190cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpZnJhbWVfc2V0X2ZfZXhjX3RyYWNlYmFjaywgTlVMTH0sCisgICAgeyJmX2V4Y190eXBlIiwgIChnZXR0ZXIpZnJhbWVfZ2V0X2ZfZXhjX3R5cGUsCisgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpZnJhbWVfc2V0X2ZfZXhjX3R5cGUsIE5VTEx9LAorICAgIHsiZl9leGNfdmFsdWUiLCAoZ2V0dGVyKWZyYW1lX2dldF9mX2V4Y192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgKHNldHRlcilmcmFtZV9zZXRfZl9leGNfdmFsdWUsIE5VTEx9LAogICAgIHswfQogfTsKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mdW5jb2JqZWN0LmMgYi9PYmplY3RzL2Z1bmNvYmplY3QuYwppbmRleCA3ZjZiMTIzLi5hZDBmNDI3IDEwMDY0NAotLS0gYS9PYmplY3RzL2Z1bmNvYmplY3QuYworKysgYi9PYmplY3RzL2Z1bmNvYmplY3QuYwpAQCAtNDg5LDEzICs0ODksMTQgQEAKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIFB5T2JqZWN0ICphcmdkZWZzOworICAgIFB5T2JqZWN0ICprd3R1cGxlID0gTlVMTDsKICAgICBQeU9iamVjdCAqKmQsICoqazsKICAgICBQeV9zc2l6ZV90IG5rLCBuZDsKIAogICAgIGFyZ2RlZnMgPSBQeUZ1bmN0aW9uX0dFVF9ERUZBVUxUUyhmdW5jKTsKICAgICBpZiAoYXJnZGVmcyAhPSBOVUxMICYmIFB5VHVwbGVfQ2hlY2soYXJnZGVmcykpIHsKICAgICAgICAgZCA9ICZQeVR1cGxlX0dFVF9JVEVNKChQeVR1cGxlT2JqZWN0ICopYXJnZGVmcywgMCk7Ci0gICAgICAgIG5kID0gUHlUdXBsZV9TaXplKGFyZ2RlZnMpOworICAgICAgICBuZCA9IFB5VHVwbGVfR0VUX1NJWkUoYXJnZGVmcyk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBkID0gTlVMTDsKQEAgLTUwNSwxNiArNTA2LDE3IEBACiAgICAgaWYgKGt3ICE9IE5VTEwgJiYgUHlEaWN0X0NoZWNrKGt3KSkgewogICAgICAgICBQeV9zc2l6ZV90IHBvcywgaTsKICAgICAgICAgbmsgPSBQeURpY3RfU2l6ZShrdyk7Ci0gICAgICAgIGsgPSBQeU1lbV9ORVcoUHlPYmplY3QgKiwgMipuayk7Ci0gICAgICAgIGlmIChrID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGt3dHVwbGUgPSBQeVR1cGxlX05ldygyKm5rKTsKKyAgICAgICAgaWYgKGt3dHVwbGUgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgICAgIGsgPSAmUHlUdXBsZV9HRVRfSVRFTShrd3R1cGxlLCAwKTsKICAgICAgICAgcG9zID0gaSA9IDA7Ci0gICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChrdywgJnBvcywgJmtbaV0sICZrW2krMV0pKQorICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQoa3csICZwb3MsICZrW2ldLCAma1tpKzFdKSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGtbaV0pOworICAgICAgICAgICAgUHlfSU5DUkVGKGtbaSsxXSk7CiAgICAgICAgICAgICBpICs9IDI7CisgICAgICAgIH0KICAgICAgICAgbmsgPSBpLzI7Ci0gICAgICAgIC8qIFhYWCBUaGlzIGlzIGJyb2tlbiBpZiB0aGUgY2FsbGVyIGRlbGV0ZXMgZGljdCBpdGVtcyEgKi8KICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGsgPSBOVUxMOwpAQCAtNTI0LDEyICs1MjYsMTEgQEAKICAgICByZXN1bHQgPSBQeUV2YWxfRXZhbENvZGVFeCgKICAgICAgICAgKFB5Q29kZU9iamVjdCAqKVB5RnVuY3Rpb25fR0VUX0NPREUoZnVuYyksCiAgICAgICAgIFB5RnVuY3Rpb25fR0VUX0dMT0JBTFMoZnVuYyksIChQeU9iamVjdCAqKU5VTEwsCi0gICAgICAgICZQeVR1cGxlX0dFVF9JVEVNKGFyZywgMCksIFB5VHVwbGVfU2l6ZShhcmcpLAorICAgICAgICAmUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApLCBQeVR1cGxlX0dFVF9TSVpFKGFyZyksCiAgICAgICAgIGssIG5rLCBkLCBuZCwKICAgICAgICAgUHlGdW5jdGlvbl9HRVRfQ0xPU1VSRShmdW5jKSk7CiAKLSAgICBpZiAoayAhPSBOVUxMKQotICAgICAgICBQeU1lbV9ERUwoayk7CisgICAgUHlfWERFQ1JFRihrd3R1cGxlKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC02NTgsMTcgKzY1OSwxNiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCFfUHlBcmdfTm9LZXl3b3JkcygiY2xhc3NtZXRob2QiLCBrd2RzKSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICghUHlDYWxsYWJsZV9DaGVjayhjYWxsYWJsZSkpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiclcycgb2JqZWN0IGlzIG5vdCBjYWxsYWJsZSIsCi0gICAgICAgICAgICAgY2FsbGFibGUtPm9iX3R5cGUtPnRwX25hbWUpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCiAgICAgUHlfSU5DUkVGKGNhbGxhYmxlKTsKICAgICBjbS0+Y21fY2FsbGFibGUgPSBjYWxsYWJsZTsKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIFB5TWVtYmVyRGVmIGNtX21lbWJlcmxpc3RbXSA9IHsKKyAgICB7Il9fZnVuY19fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKGNsYXNzbWV0aG9kLCBjbV9jYWxsYWJsZSksIFJFQURPTkxZfSwKKyAgICB7TlVMTH0gIC8qIFNlbnRpbmVsICovCit9OworCiBQeURvY19TVFJWQVIoY2xhc3NtZXRob2RfZG9jLAogImNsYXNzbWV0aG9kKGZ1bmN0aW9uKSAtPiBtZXRob2RcblwKIFxuXApAQCAtNzE5LDcgKzcxOSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGNtX21lbWJlcmxpc3QsICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KQEAgLTgxOSw2ICs4MTksMTEgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIFB5TWVtYmVyRGVmIHNtX21lbWJlcmxpc3RbXSA9IHsKKyAgICB7Il9fZnVuY19fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHN0YXRpY21ldGhvZCwgc21fY2FsbGFibGUpLCBSRUFET05MWX0sCisgICAge05VTEx9ICAvKiBTZW50aW5lbCAqLworfTsKKwogUHlEb2NfU1RSVkFSKHN0YXRpY21ldGhvZF9kb2MsCiAic3RhdGljbWV0aG9kKGZ1bmN0aW9uKSAtPiBtZXRob2RcblwKIFxuXApAQCAtODY2LDcgKzg3MSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIHNtX21lbWJlcmxpc3QsICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvaW50b2JqZWN0LmMgYi9PYmplY3RzL2ludG9iamVjdC5jCmluZGV4IDAyOTg1NGYuLjdkNzBiZmIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvaW50b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9pbnRvYmplY3QuYwpAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KIAogc3RhdGljIFB5T2JqZWN0ICppbnRfaW50KFB5SW50T2JqZWN0ICp2KTsKIApAQCAtNzgsNyArNzksOCBAQAogc3RhdGljIFB5SW50T2JqZWN0ICpzbWFsbF9pbnRzW05TTUFMTE5FR0lOVFMgKyBOU01BTExQT1NJTlRTXTsKICNlbmRpZgogI2lmZGVmIENPVU5UX0FMTE9DUwotaW50IHF1aWNrX2ludF9hbGxvY3MsIHF1aWNrX25lZ19pbnRfYWxsb2NzOworUHlfc3NpemVfdCBxdWlja19pbnRfYWxsb2NzOworUHlfc3NpemVfdCBxdWlja19uZWdfaW50X2FsbG9jczsKICNlbmRpZgogCiBQeU9iamVjdCAqCkBAIC0xNzYsNyArMTc4LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgUHlfREVDUkVGKGlvKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5iX2ludCBzaG91bGQgcmV0dXJuIGludCBvYmplY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX2ludF9fIG1ldGhvZCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KQEAgLTIzNCw3ICsyMzYsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaW8pOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmJfaW50IHNob3VsZCByZXR1cm4gaW50IG9iamVjdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgIl9faW50X18gbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlciIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQpAQCAtMjc5LDcgKzI4MSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpbyk7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYl9pbnQgc2hvdWxkIHJldHVybiBpbnQgb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAiX19pbnRfXyBtZXRob2Qgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyIik7CiAgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpLTE7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMjQsNyArMzI2LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgUHlfREVDUkVGKGlvKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5iX2ludCBzaG91bGQgcmV0dXJuIGludCBvYmplY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX2ludF9fIG1ldGhvZCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIiKTsKICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgUFlfTE9OR19MT05HKS0xOwogICAgICAgICB9CiAgICAgfQpAQCAtNDM0LDEyICs0MzYsNiBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotaW50X3JlcHIoUHlJbnRPYmplY3QgKnYpCi17Ci0gICAgcmV0dXJuIF9QeUludF9Gb3JtYXQodiwgMTAsIDApOwotfQotCiBzdGF0aWMgaW50CiBpbnRfY29tcGFyZShQeUludE9iamVjdCAqdiwgUHlJbnRPYmplY3QgKncpCiB7CkBAIC02NDksMTYgKzY0NSwzNSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotaW50X3RydWVfZGl2aWRlKFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKK2ludF90cnVlX2RpdmlkZShQeUludE9iamVjdCAqeCwgUHlJbnRPYmplY3QgKnkpCiB7CisgICAgbG9uZyB4aSwgeWk7CiAgICAgLyogSWYgdGhleSBhcmVuJ3QgYm90aCBpbnRzLCBnaXZlIHNvbWVvbmUgZWxzZSBhIGNoYW5jZS4gIEluCiAgICAgICAgcGFydGljdWxhciwgdGhpcyBsZXRzIGludC9sb25nIGdldCBoYW5kbGVkIGJ5IGxvbmdzLCB3aGljaAogICAgICAgIHVuZGVyZmxvd3MgdG8gMCBncmFjZWZ1bGx5IGlmIHRoZSBsb25nIGlzIHRvbyBiaWcgdG8gY29udmVydAogICAgICAgIHRvIGZsb2F0LiAqLwotICAgIGlmIChQeUludF9DaGVjayh2KSAmJiBQeUludF9DaGVjayh3KSkKLSAgICAgICAgcmV0dXJuIFB5RmxvYXRfVHlwZS50cF9hc19udW1iZXItPm5iX3RydWVfZGl2aWRlKHYsIHcpOwotICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7Ci0gICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOworICAgIENPTlZFUlRfVE9fTE9ORyh4LCB4aSk7CisgICAgQ09OVkVSVF9UT19MT05HKHksIHlpKTsKKyAgICBpZiAoeWkgPT0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZGl2aXNpb24gYnkgemVybyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHhpID09IDApCisgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoeWkgPCAwID8gLTAuMCA6IDAuMCk7CisKKyNkZWZpbmUgV0lEVEhfT0ZfVUxPTkcgKENIQVJfQklUKlNJWkVPRl9MT05HKQorI2lmIERCTF9NQU5UX0RJRyA8IFdJRFRIX09GX1VMT05HCisgICAgaWYgKCh4aSA+PSAwID8gMFVMICsgeGkgOiAwVUwgLSB4aSkgPj4gREJMX01BTlRfRElHIHx8CisgICAgICAgICh5aSA+PSAwID8gMFVMICsgeWkgOiAwVUwgLSB5aSkgPj4gREJMX01BTlRfRElHKQorICAgICAgICAvKiBMYXJnZSB4IG9yIHkuICBVc2UgbG9uZyBpbnRlZ2VyIGFyaXRobWV0aWMuICovCisgICAgICAgIHJldHVybiBQeUxvbmdfVHlwZS50cF9hc19udW1iZXItPm5iX3RydWVfZGl2aWRlKAorICAgICAgICAgICAgKFB5T2JqZWN0ICopeCwgKFB5T2JqZWN0ICopeSk7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIC8qIEJvdGggaW50cyBjYW4gYmUgZXhhY3RseSByZXByZXNlbnRlZCBhcyBkb3VibGVzLiAgRG8gYQorICAgICAgICAgICBmbG9hdGluZy1wb2ludCBkaXZpc2lvbi4gKi8KKyAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgoZG91YmxlKXhpIC8gKGRvdWJsZSl5aSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC05MzksMTIgKzk1NCw3OCBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHYgLT4gb2JfaXZhbCkpOwogfQogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBCaXRMZW5ndGhUYWJsZVszMl0gPSB7CisgICAgMCwgMSwgMiwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1Cit9OworCitzdGF0aWMgaW50CitiaXRzX2luX3Vsb25nKHVuc2lnbmVkIGxvbmcgZCkKK3sKKyAgICBpbnQgZF9iaXRzID0gMDsKKyAgICB3aGlsZSAoZCA+PSAzMikgeworICAgICAgICBkX2JpdHMgKz0gNjsKKyAgICAgICAgZCA+Pj0gNjsKKyAgICB9CisgICAgZF9iaXRzICs9IChpbnQpQml0TGVuZ3RoVGFibGVbZF07CisgICAgcmV0dXJuIGRfYml0czsKK30KKworI2lmIDgqU0laRU9GX0xPTkctMSA8PSBEQkxfTUFOVF9ESUcKKy8qIEV2ZXJ5IFB5dGhvbiBpbnQgY2FuIGJlIGV4YWN0bHkgcmVwcmVzZW50ZWQgYXMgYSBmbG9hdC4gKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKIGludF9mbG9hdChQeUludE9iamVjdCAqdikKIHsKICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKChkb3VibGUpKHYgLT4gb2JfaXZhbCkpOwogfQogCisjZWxzZQorLyogSGVyZSBub3QgYWxsIFB5dGhvbiBpbnRzIGFyZSBleGFjdGx5IHJlcHJlc2VudGFibGUgYXMgZmxvYXRzLCBzbyB3ZSBtYXkKKyAgIGhhdmUgdG8gcm91bmQuICBXZSBkbyB0aGlzIG1hbnVhbGx5LCBzaW5jZSB0aGUgQyBzdGFuZGFyZHMgZG9uJ3Qgc3BlY2lmeQorICAgd2hldGhlciBjb252ZXJ0aW5nIGFuIGludGVnZXIgdG8gYSBmbG9hdCByb3VuZHMgdXAgb3IgZG93biAqLworCitzdGF0aWMgUHlPYmplY3QgKgoraW50X2Zsb2F0KFB5SW50T2JqZWN0ICp2KQoreworICAgIHVuc2lnbmVkIGxvbmcgYWJzX2l2YWwsIGxzYjsKKyAgICBpbnQgcm91bmRfdXA7CisKKyAgICBpZiAodi0+b2JfaXZhbCA8IDApCisgICAgICAgIGFic19pdmFsID0gMFUtKHVuc2lnbmVkIGxvbmcpdi0+b2JfaXZhbDsKKyAgICBlbHNlCisgICAgICAgIGFic19pdmFsID0gKHVuc2lnbmVkIGxvbmcpdi0+b2JfaXZhbDsKKyAgICBpZiAoYWJzX2l2YWwgPCAoMUwgPDwgREJMX01BTlRfRElHKSkKKyAgICAgICAgLyogc21hbGwgaW50ZWdlcjsgIG5vIG5lZWQgdG8gcm91bmQgKi8KKyAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgoZG91YmxlKXYtPm9iX2l2YWwpOworCisgICAgLyogUm91bmQgYWJzX2l2YWwgdG8gTUFOVF9ESUcgc2lnbmlmaWNhbnQgYml0cywgdXNpbmcgdGhlCisgICAgICAgcm91bmQtaGFsZi10by1ldmVuIHJ1bGUuICBhYnNfaXZhbCAmIGxzYiBwaWNrcyBvdXQgdGhlICdyb3VuZGluZycKKyAgICAgICBiaXQ6IHRoZSBmaXJzdCBiaXQgYWZ0ZXIgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgTUFOVF9ESUcgYml0cyBvZgorICAgICAgIGFic19pdmFsLiAgV2Ugcm91bmQgdXAgaWYgdGhpcyBiaXQgaXMgc2V0LCBwcm92aWRlZCB0aGF0IGVpdGhlcjoKKworICAgICAgICAgKDEpIGFic19pdmFsIGlzbid0IGV4YWN0bHkgaGFsZndheSBiZXR3ZWVuIHR3byBmbG9hdHMsIGluIHdoaWNoCisgICAgICAgICBjYXNlIGF0IGxlYXN0IG9uZSBvZiB0aGUgYml0cyBmb2xsb3dpbmcgdGhlIHJvdW5kaW5nIGJpdCBtdXN0IGJlCisgICAgICAgICBzZXQ7IGkuZS4sIGFic19pdmFsICYgbHNiLTEgIT0gMCwgb3I6CisKKyAgICAgICAgICgyKSB0aGUgcmVzdWx0aW5nIHJvdW5kZWQgdmFsdWUgaGFzIGxlYXN0IHNpZ25pZmljYW50IGJpdCAwOyBvcgorICAgICAgICAgaW4gb3RoZXIgd29yZHMgdGhlIGJpdCBhYm92ZSB0aGUgcm91bmRpbmcgYml0IGlzIHNldCAodGhpcyBpcyB0aGUKKyAgICAgICAgICd0by1ldmVuJyBiaXQgb2Ygcm91bmQtaGFsZi10by1ldmVuKTsgaS5lLiwgYWJzX2l2YWwgJiAyKmxzYiAhPSAwCisKKyAgICAgICBUaGUgY29uZGl0aW9uICIoMSkgb3IgKDIpIiBlcXVhdGVzIHRvIGFic19pdmFsICYgMypsc2ItMSAhPSAwLiAqLworCisgICAgbHNiID0gMUwgPDwgKGJpdHNfaW5fdWxvbmcoYWJzX2l2YWwpLURCTF9NQU5UX0RJRy0xKTsKKyAgICByb3VuZF91cCA9IChhYnNfaXZhbCAmIGxzYikgJiYgKGFic19pdmFsICYgKDMqbHNiLTEpKTsKKyAgICBhYnNfaXZhbCAmPSAtMipsc2I7CisgICAgaWYgKHJvdW5kX3VwKQorICAgICAgICBhYnNfaXZhbCArPSAyKmxzYjsKKyAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHYtPm9iX2l2YWwgPCAwID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oZG91YmxlKWFic19pdmFsIDoKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpYWJzX2l2YWwpOworfQorCisjZW5kaWYKKwogc3RhdGljIFB5T2JqZWN0ICoKIGludF9vY3QoUHlJbnRPYmplY3QgKnYpCiB7CkBAIC0xMDQ4LDggKzExMjksMzMgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWludF9nZXROKFB5SW50T2JqZWN0ICp2LCB2b2lkICpjb250ZXh0KSB7Ci0gICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChQeV9pbnRwdHJfdCljb250ZXh0KTsKK2ludF9nZXQwKFB5SW50T2JqZWN0ICp2LCB2b2lkICpjb250ZXh0KSB7CisgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKDBMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2ludF9nZXQxKFB5SW50T2JqZWN0ICp2LCB2b2lkICpjb250ZXh0KSB7CisgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKDFMKTsKK30KKworLyogQ29udmVydCBhbiBpbnRlZ2VyIHRvIGEgZGVjaW1hbCBzdHJpbmcuICBPbiBtYW55IHBsYXRmb3JtcywgdGhpcworICAgd2lsbCBiZSBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSBnZW5lcmFsIGFyYml0cmFyeS1iYXNlCisgICBjb252ZXJzaW9uIG1hY2hpbmVyeSBpbiBfUHlJbnRfRm9ybWF0LCB0aGFua3MgdG8gb3B0aW1pemF0aW9uCisgICBvcHBvcnR1bml0aWVzIG9mZmVyZWQgYnkgZGl2aXNpb24gYnkgYSBjb21waWxlLXRpbWUgY29uc3RhbnQuICovCitzdGF0aWMgUHlPYmplY3QgKgoraW50X3RvX2RlY2ltYWxfc3RyaW5nKFB5SW50T2JqZWN0ICp2KSB7CisgICAgY2hhciBidWZbc2l6ZW9mKGxvbmcpKkNIQVJfQklULzMrNl0sICpwLCAqYnVmZW5kOworICAgIGxvbmcgbiA9IHYtPm9iX2l2YWw7CisgICAgdW5zaWduZWQgbG9uZyBhYnNuOworICAgIHAgPSBidWZlbmQgPSBidWYgKyBzaXplb2YoYnVmKTsKKyAgICBhYnNuID0gbiA8IDAgPyAwVUwgLSBuIDogbjsKKyAgICBkbyB7CisgICAgICAgICotLXAgPSAnMCcgKyAoY2hhcikoYWJzbiAlIDEwKTsKKyAgICAgICAgYWJzbiAvPSAxMDsKKyAgICB9IHdoaWxlIChhYnNuKTsKKyAgICBpZiAobiA8IDApCisgICAgICAgICotLXAgPSAnLSc7CisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKHAsIGJ1ZmVuZCAtIHApOwogfQogCiAvKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gdGhlIGdpdmVuIGJhc2UuICBSZXR1cm5zIGEgc3RyaW5nLgpAQCAtMTA3Niw2ICsxMTgyLDEwIEBACiAKICAgICBhc3NlcnQoYmFzZSA+PSAyICYmIGJhc2UgPD0gMzYpOwogCisgICAgLyogU3BlY2lhbCBjYXNlIGJhc2UgMTAsIGZvciBzcGVlZCAqLworICAgIGlmIChiYXNlID09IDEwKQorICAgICAgICByZXR1cm4gaW50X3RvX2RlY2ltYWxfc3RyaW5nKHYpOworCiAgICAgZG8gewogICAgICAgICAvKiBJJ2QgdXNlIGlfZGl2bW9kLCBleGNlcHQgaXQgZG9lc24ndCBwcm9kdWNlIHRoZSByZXN1bHRzCiAgICAgICAgICAgIEkgd2FudCB3aGVuIG4gaXMgbmVnYXRpdmUuICBTbyBqdXN0IGR1cGxpY2F0ZSB0aGUgc2FsaWVudApAQCAtMTEwOCw3ICsxMjE4LDcgQEAKICAgICAgICAgKi0tcCA9ICd4JzsKICAgICAgICAgKi0tcCA9ICcwJzsKICAgICB9Ci0gICAgZWxzZSBpZiAoYmFzZSAhPSAxMCkgeworICAgIGVsc2UgewogICAgICAgICAqLS1wID0gJyMnOwogICAgICAgICAqLS1wID0gJzAnICsgYmFzZSUxMDsKICAgICAgICAgaWYgKGJhc2UgPiAxMCkKQEAgLTExNTAsNiArMTI2MCwyOSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgoraW50X2JpdF9sZW5ndGgoUHlJbnRPYmplY3QgKnYpCit7CisgICAgdW5zaWduZWQgbG9uZyBuOworCisgICAgaWYgKHYtPm9iX2l2YWwgPCAwKQorICAgICAgICAvKiBhdm9pZCB1bmRlZmluZWQgYmVoYXZpb3VyIHdoZW4gdi0+b2JfaXZhbCA9PSAtTE9OR19NQVgtMSAqLworICAgICAgICBuID0gMFUtKHVuc2lnbmVkIGxvbmcpdi0+b2JfaXZhbDsKKyAgICBlbHNlCisgICAgICAgIG4gPSAodW5zaWduZWQgbG9uZyl2LT5vYl9pdmFsOworCisgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKGJpdHNfaW5fdWxvbmcobikpOworfQorCitQeURvY19TVFJWQVIoaW50X2JpdF9sZW5ndGhfZG9jLAorImludC5iaXRfbGVuZ3RoKCkgLT4gaW50XG5cCitcblwKK051bWJlciBvZiBiaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgc2VsZiBpbiBiaW5hcnkuXG5cCis+Pj4gYmluKDM3KVxuXAorJzBiMTAwMTAxJ1xuXAorPj4+ICgzNykuYml0X2xlbmd0aCgpXG5cCis2Iik7CisKICNpZiAwCiBzdGF0aWMgUHlPYmplY3QgKgogaW50X2lzX2Zpbml0ZShQeU9iamVjdCAqdikKQEAgLTExNjEsNiArMTI5NCw4IEBACiBzdGF0aWMgUHlNZXRob2REZWYgaW50X21ldGhvZHNbXSA9IHsKICAgICB7ImNvbmp1Z2F0ZSIsICAgICAgIChQeUNGdW5jdGlvbilpbnRfaW50LCAgIE1FVEhfTk9BUkdTLAogICAgICAiUmV0dXJucyBzZWxmLCB0aGUgY29tcGxleCBjb25qdWdhdGUgb2YgYW55IGludC4ifSwKKyAgICB7ImJpdF9sZW5ndGgiLCAoUHlDRnVuY3Rpb24paW50X2JpdF9sZW5ndGgsIE1FVEhfTk9BUkdTLAorICAgICBpbnRfYml0X2xlbmd0aF9kb2N9LAogI2lmIDAKICAgICB7ImlzX2Zpbml0ZSIsICAgICAgIChQeUNGdW5jdGlvbilpbnRfaXNfZmluaXRlLCAgICAgTUVUSF9OT0FSR1MsCiAgICAgICJSZXR1cm5zIGFsd2F5cyBUcnVlLiJ9LApAQCAtMTE3OCwxNyArMTMxMywxNyBAQAogICAgICAidGhlIHJlYWwgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyIiwKICAgICAgTlVMTH0sCiAgICAgeyJpbWFnIiwKLSAgICAgKGdldHRlcilpbnRfZ2V0TiwgKHNldHRlcilOVUxMLAorICAgICAoZ2V0dGVyKWludF9nZXQwLCAoc2V0dGVyKU5VTEwsCiAgICAgICJ0aGUgaW1hZ2luYXJ5IHBhcnQgb2YgYSBjb21wbGV4IG51bWJlciIsCi0gICAgICh2b2lkKikwfSwKKyAgICAgTlVMTH0sCiAgICAgeyJudW1lcmF0b3IiLAogICAgICAoZ2V0dGVyKWludF9pbnQsIChzZXR0ZXIpTlVMTCwKICAgICAgInRoZSBudW1lcmF0b3Igb2YgYSByYXRpb25hbCBudW1iZXIgaW4gbG93ZXN0IHRlcm1zIiwKICAgICAgTlVMTH0sCiAgICAgeyJkZW5vbWluYXRvciIsCi0gICAgIChnZXR0ZXIpaW50X2dldE4sIChzZXR0ZXIpTlVMTCwKKyAgICAgKGdldHRlcilpbnRfZ2V0MSwgKHNldHRlcilOVUxMLAogICAgICAidGhlIGRlbm9taW5hdG9yIG9mIGEgcmF0aW9uYWwgbnVtYmVyIGluIGxvd2VzdCB0ZXJtcyIsCi0gICAgICh2b2lkKikxfSwKKyAgICAgTlVMTH0sCiAgICAge05VTEx9ICAvKiBTZW50aW5lbCAqLwogfTsKIApAQCAtMTIzOSw3ICsxMzc0LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLypuYl9pbnBsYWNlX3hvciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfaW5wbGFjZV9vciovCiAgICAgKGJpbmFyeWZ1bmMpaW50X2RpdiwgICAgICAgIC8qIG5iX2Zsb29yX2RpdmlkZSAqLwotICAgIGludF90cnVlX2RpdmlkZSwgICAgICAgICAgICAvKiBuYl90cnVlX2RpdmlkZSAqLworICAgIChiaW5hcnlmdW5jKWludF90cnVlX2RpdmlkZSwgLyogbmJfdHJ1ZV9kaXZpZGUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9mbG9vcl9kaXZpZGUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV90cnVlX2RpdmlkZSAqLwogICAgICh1bmFyeWZ1bmMpaW50X2ludCwgICAgICAgICAvKiBuYl9pbmRleCAqLwpAQCAtMTI1NSwxMyArMTM5MCwxMyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwogICAgIChjbXBmdW5jKWludF9jb21wYXJlLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLwotICAgIChyZXByZnVuYylpbnRfcmVwciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIChyZXByZnVuYylpbnRfdG9fZGVjaW1hbF9zdHJpbmcsICAgICAgICAgICAgLyogdHBfcmVwciAqLwogICAgICZpbnRfYXNfbnVtYmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwogICAgIChoYXNoZnVuYylpbnRfaGFzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLwotICAgIChyZXByZnVuYylpbnRfcmVwciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgKHJlcHJmdW5jKWludF90b19kZWNpbWFsX3N0cmluZywgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCmRpZmYgLS1naXQgYS9PYmplY3RzL2xpc3RvYmplY3QuYyBiL09iamVjdHMvbGlzdG9iamVjdC5jCmluZGV4IGE1YmFjZjMuLjk3MDRkOGQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbGlzdG9iamVjdC5jCisrKyBiL09iamVjdHMvbGlzdG9iamVjdC5jCkBAIC0xODMsOSArMTgzLDEyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoaSA8IDAgfHwgaSA+PSBQeV9TSVpFKG9wKSkgewotICAgICAgICBpZiAoaW5kZXhlcnIgPT0gTlVMTCkKKyAgICAgICAgaWYgKGluZGV4ZXJyID09IE5VTEwpIHsKICAgICAgICAgICAgIGluZGV4ZXJyID0gUHlTdHJpbmdfRnJvbVN0cmluZygKICAgICAgICAgICAgICAgICAibGlzdCBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIGlmIChpbmRleGVyciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19JbmRleEVycm9yLCBpbmRleGVycik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTQ0Nyw5ICs0NTAsMTIgQEAKIGxpc3RfaXRlbShQeUxpc3RPYmplY3QgKmEsIFB5X3NzaXplX3QgaSkKIHsKICAgICBpZiAoaSA8IDAgfHwgaSA+PSBQeV9TSVpFKGEpKSB7Ci0gICAgICAgIGlmIChpbmRleGVyciA9PSBOVUxMKQorICAgICAgICBpZiAoaW5kZXhlcnIgPT0gTlVMTCkgewogICAgICAgICAgICAgaW5kZXhlcnIgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKAogICAgICAgICAgICAgICAgICJsaXN0IGluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgaWYgKGluZGV4ZXJyID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0luZGV4RXJyb3IsIGluZGV4ZXJyKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMjI3MCw3ICsyMjc2LDggQEAKIGxpc3RpbmRleChQeUxpc3RPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3QgaSwgc3RhcnQ9MCwgc3RvcD1QeV9TSVpFKHNlbGYpOwotICAgIFB5T2JqZWN0ICp2OworICAgIFB5T2JqZWN0ICp2LCAqZm9ybWF0X3R1cGxlLCAqZXJyX3N0cmluZzsKKyAgICBzdGF0aWMgUHlPYmplY3QgKmVycl9mb3JtYXQgPSBOVUxMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfE8mTyY6aW5kZXgiLCAmdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5RXZhbF9TbGljZUluZGV4LCAmc3RhcnQsCkBAIC0yMjkzLDcgKzIzMDAsMjAgQEAKICAgICAgICAgZWxzZSBpZiAoY21wIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImxpc3QuaW5kZXgoeCk6IHggbm90IGluIGxpc3QiKTsKKyAgICBpZiAoZXJyX2Zvcm1hdCA9PSBOVUxMKSB7CisgICAgICAgIGVycl9mb3JtYXQgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCIlciBpcyBub3QgaW4gbGlzdCIpOworICAgICAgICBpZiAoZXJyX2Zvcm1hdCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGZvcm1hdF90dXBsZSA9IFB5VHVwbGVfUGFjaygxLCB2KTsKKyAgICBpZiAoZm9ybWF0X3R1cGxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGVycl9zdHJpbmcgPSBQeVN0cmluZ19Gb3JtYXQoZXJyX2Zvcm1hdCwgZm9ybWF0X3R1cGxlKTsKKyAgICBQeV9ERUNSRUYoZm9ybWF0X3R1cGxlKTsKKyAgICBpZiAoZXJyX3N0cmluZyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfVmFsdWVFcnJvciwgZXJyX3N0cmluZyk7CisgICAgUHlfREVDUkVGKGVycl9zdHJpbmcpOwogICAgIHJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9PYmplY3RzL2xub3RhYl9ub3Rlcy50eHQgYi9PYmplY3RzL2xub3RhYl9ub3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0N2VkZAotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvbG5vdGFiX25vdGVzLnR4dApAQCAtMCwwICsxLDEyNCBAQAorQWxsIGFib3V0IGNvX2xub3RhYiwgdGhlIGxpbmUgbnVtYmVyIHRhYmxlLgorCitDb2RlIG9iamVjdHMgc3RvcmUgYSBmaWVsZCBuYW1lZCBjb19sbm90YWIuICBUaGlzIGlzIGFuIGFycmF5IG9mIHVuc2lnbmVkIGJ5dGVzCitkaXNndWlzZWQgYXMgYSBQeXRob24gc3RyaW5nLiAgSXQgaXMgdXNlZCB0byBtYXAgYnl0ZWNvZGUgb2Zmc2V0cyB0byBzb3VyY2UgY29kZQorbGluZSAjcyBmb3IgdHJhY2ViYWNrcyBhbmQgdG8gaWRlbnRpZnkgbGluZSBudW1iZXIgYm91bmRhcmllcyBmb3IgbGluZSB0cmFjaW5nLgorCitUaGUgYXJyYXkgaXMgY29uY2VwdHVhbGx5IGEgY29tcHJlc3NlZCBsaXN0IG9mCisgICAgKGJ5dGVjb2RlIG9mZnNldCBpbmNyZW1lbnQsIGxpbmUgbnVtYmVyIGluY3JlbWVudCkKK3BhaXJzLiAgVGhlIGRldGFpbHMgYXJlIGltcG9ydGFudCBhbmQgZGVsaWNhdGUsIGJlc3QgaWxsdXN0cmF0ZWQgYnkgZXhhbXBsZToKKworICAgIGJ5dGUgY29kZSBvZmZzZXQgICAgc291cmNlIGNvZGUgbGluZSBudW1iZXIKKyAgICAgICAgMAkJICAgIDEKKyAgICAgICAgNgkJICAgIDIKKyAgICAgICA1MAkJICAgIDcKKyAgICAgIDM1MCAgICAgICAgICAgICAgICAgMzA3CisgICAgICAzNjEgICAgICAgICAgICAgICAgIDMwOAorCitJbnN0ZWFkIG9mIHN0b3JpbmcgdGhlc2UgbnVtYmVycyBsaXRlcmFsbHksIHdlIGNvbXByZXNzIHRoZSBsaXN0IGJ5IHN0b3Jpbmcgb25seQordGhlIGluY3JlbWVudHMgZnJvbSBvbmUgcm93IHRvIHRoZSBuZXh0LiAgQ29uY2VwdHVhbGx5LCB0aGUgc3RvcmVkIGxpc3QgbWlnaHQKK2xvb2sgbGlrZToKKworICAgIDAsIDEsICA2LCAxLCAgNDQsIDUsICAzMDAsIDMwMCwgIDExLCAxCisKK1RoZSBhYm92ZSBkb2Vzbid0IHJlYWxseSB3b3JrLCBidXQgaXQncyBhIHN0YXJ0LiBOb3RlIHRoYXQgYW4gdW5zaWduZWQgYnl0ZQorY2FuJ3QgaG9sZCBuZWdhdGl2ZSB2YWx1ZXMsIG9yIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUsIGFuZCB0aGUgYWJvdmUgZXhhbXBsZQorY29udGFpbnMgdHdvIHN1Y2ggdmFsdWVzLiBTbyB3ZSBtYWtlIHR3byB0d2Vha3M6CisKKyAoYSkgdGhlcmUncyBhIGRlZXAgYXNzdW1wdGlvbiB0aGF0IGJ5dGUgY29kZSBvZmZzZXRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nCisgbGluZSAjcyBib3RoIGluY3JlYXNlIG1vbm90b25pY2FsbHksIGFuZAorIChiKSBpZiBhdCBsZWFzdCBvbmUgY29sdW1uIGp1bXBzIGJ5IG1vcmUgdGhhbiAyNTUgZnJvbSBvbmUgcm93IHRvIHRoZSBuZXh0LAorIG1vcmUgdGhhbiBvbmUgcGFpciBpcyB3cml0dGVuIHRvIHRoZSB0YWJsZS4gSW4gY2FzZSAjYiwgdGhlcmUncyBubyB3YXkgdG8ga25vdworIGZyb20gbG9va2luZyBhdCB0aGUgdGFibGUgbGF0ZXIgaG93IG1hbnkgd2VyZSB3cml0dGVuLiAgVGhhdCdzIHRoZSBkZWxpY2F0ZQorIHBhcnQuICBBIHVzZXIgb2YgY29fbG5vdGFiIGRlc2lyaW5nIHRvIGZpbmQgdGhlIHNvdXJjZSBsaW5lIG51bWJlcgorIGNvcnJlc3BvbmRpbmcgdG8gYSBieXRlY29kZSBhZGRyZXNzIEEgc2hvdWxkIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMKKworICAgIGxpbmVubyA9IGFkZHIgPSAwCisgICAgZm9yIGFkZHJfaW5jciwgbGluZV9pbmNyIGluIGNvX2xub3RhYjoKKyAgICAgICAgYWRkciArPSBhZGRyX2luY3IKKyAgICAgICAgaWYgYWRkciA+IEE6CisgICAgICAgICAgICByZXR1cm4gbGluZW5vCisgICAgICAgIGxpbmVubyArPSBsaW5lX2luY3IKKworKEluIEMsIHRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgUHlDb2RlX0FkZHIyTGluZSgpLikgIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssCit3aGVuIHRoZSBhZGRyIGZpZWxkIGluY3JlbWVudHMgYnkgbW9yZSB0aGFuIDI1NSwgdGhlIGxpbmUgIyBpbmNyZW1lbnQgaW4gZWFjaAorcGFpciBnZW5lcmF0ZWQgbXVzdCBiZSAwIHVudGlsIHRoZSByZW1haW5pbmcgYWRkciBpbmNyZW1lbnQgaXMgPCAyNTYuICBTbywgaW4KK3RoZSBleGFtcGxlIGFib3ZlLCBhc3NlbWJsZV9sbm90YWIgaW4gY29tcGlsZS5jIHNob3VsZCBub3QgKGFzIHdhcyBhY3R1YWxseSBkb25lCit1bnRpbCAyLjIpIGV4cGFuZCAzMDAsIDMwMCB0bworICAgIDI1NSwgMjU1LCA0NSwgNDUsCitidXQgdG8KKyAgICAyNTUsIDAsIDQ1LCAyNTUsIDAsIDQ1LgorCitUaGUgYWJvdmUgaXMgc3VmZmljaWVudCB0byByZWNvbnN0cnVjdCBsaW5lIG51bWJlcnMgZm9yIHRyYWNlYmFja3MsIGJ1dCBub3QgZm9yCitsaW5lIHRyYWNpbmcuICBUcmFjaW5nIGlzIGhhbmRsZWQgYnkgUHlDb2RlX0NoZWNrTGluZU51bWJlcigpIGluIGNvZGVvYmplY3QuYworYW5kIG1heWJlX2NhbGxfbGluZV90cmFjZSgpIGluIGNldmFsLmMuCisKKyoqKiBUcmFjaW5nICoqKgorCitUbyBhIGZpcnN0IGFwcHJveGltYXRpb24sIHdlIHdhbnQgdG8gY2FsbCB0aGUgdHJhY2luZyBmdW5jdGlvbiB3aGVuIHRoZSBsaW5lCitudW1iZXIgb2YgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gY2hhbmdlcy4gIFJlLWNvbXB1dGluZyB0aGUgY3VycmVudCBsaW5lIGZvcgorZXZlcnkgaW5zdHJ1Y3Rpb24gaXMgYSBsaXR0bGUgc2xvdywgdGhvdWdoLCBzbyBlYWNoIHRpbWUgd2UgY29tcHV0ZSB0aGUgbGluZQorbnVtYmVyIHdlIHNhdmUgdGhlIGJ5dGVjb2RlIGluZGljZXMgd2hlcmUgaXQncyB2YWxpZDoKKworICAgICAqaW5zdHJfbGIgPD0gZnJhbWUtPmZfbGFzdGkgPCAqaW5zdHJfdWIKKworaXMgdHJ1ZSBzbyBsb25nIGFzIGV4ZWN1dGlvbiBkb2VzIG5vdCBjaGFuZ2UgbGluZXMuICBUaGF0IGlzLCAqaW5zdHJfbGIgaG9sZHMKK3RoZSBmaXJzdCBieXRlY29kZSBpbmRleCBvZiB0aGUgY3VycmVudCBsaW5lLCBhbmQgKmluc3RyX3ViIGhvbGRzIHRoZSBmaXJzdAorYnl0ZWNvZGUgaW5kZXggb2YgdGhlIG5leHQgbGluZS4gIEFzIGxvbmcgYXMgdGhlIGFib3ZlIGV4cHJlc3Npb24gaXMgdHJ1ZSwKK21heWJlX2NhbGxfbGluZV90cmFjZSgpIGRvZXMgbm90IG5lZWQgdG8gY2FsbCBQeUNvZGVfQ2hlY2tMaW5lTnVtYmVyKCkuICBOb3RlCit0aGF0IHRoZSBzYW1lIGxpbmUgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgbG5vdGFiLCBlaXRoZXIgYmVjYXVzZSB0aGUKK2J5dGVjb2RlIGp1bXBlZCBtb3JlIHRoYW4gMjU1IGluZGljZXMgYmV0d2VlbiBsaW5lIG51bWJlciBjaGFuZ2VzIG9yIGJlY2F1c2UKK3RoZSBjb21waWxlciBpbnNlcnRlZCB0aGUgc2FtZSBsaW5lIHR3aWNlLiAgRXZlbiBpbiB0aGF0IGNhc2UsICppbnN0cl91YiBob2xkcwordGhlIGZpcnN0IGluZGV4IG9mIHRoZSBuZXh0IGxpbmUuCisKK0hvd2V2ZXIsIHdlIGRvbid0ICphbHdheXMqIHdhbnQgdG8gY2FsbCB0aGUgbGluZSB0cmFjZSBmdW5jdGlvbiB3aGVuIHRoZSBhYm92ZQordGVzdCBmYWlscy4KKworQ29uc2lkZXIgdGhpcyBjb2RlOgorCisxOiBkZWYgZihhKToKKzI6ICAgIHdoaWxlIGE6CiszOiAgICAgICBwcmludCAxLAorNDogICAgICAgYnJlYWsKKzU6ICAgIGVsc2U6Cis2OiAgICAgICBwcmludCAyLAorCit3aGljaCBjb21waWxlcyB0byB0aGlzOgorCisgIDIgICAgICAgICAgIDAgU0VUVVBfTE9PUCAgICAgICAgICAgICAgMTkgKHRvIDIyKQorICAgICAgICA+PiAgICAzIExPQURfRkFTVCAgICAgICAgICAgICAgICAwIChhKQorICAgICAgICAgICAgICA2IFBPUF9KVU1QX0lGX0ZBTFNFICAgICAgIDE3CisKKyAgMyAgICAgICAgICAgOSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKKyAgICAgICAgICAgICAxMiBQUklOVF9JVEVNICAgICAgICAgIAorCisgIDQgICAgICAgICAgMTMgQlJFQUtfTE9PUCAgICAgICAgICAKKyAgICAgICAgICAgICAxNCBKVU1QX0FCU09MVVRFICAgICAgICAgICAgMworICAgICAgICA+PiAgIDE3IFBPUF9CTE9DSyAgICAgICAgICAgCisKKyAgNiAgICAgICAgICAxOCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMiAoMikKKyAgICAgICAgICAgICAyMSBQUklOVF9JVEVNICAgICAgICAgIAorICAgICAgICA+PiAgIDIyIExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorICAgICAgICAgICAgIDI1IFJFVFVSTl9WQUxVRSAgICAgICAgCisKK0lmICdhJyBpcyBmYWxzZSwgZXhlY3V0aW9uIHdpbGwganVtcCB0byB0aGUgUE9QX0JMT0NLIGluc3RydWN0aW9uIGF0IG9mZnNldCAxNworYW5kIHRoZSBjb19sbm90YWIgd2lsbCBjbGFpbSB0aGF0IGV4ZWN1dGlvbiBoYXMgbW92ZWQgdG8gbGluZSA0LCB3aGljaCBpcyB3cm9uZy4KK0luIHRoaXMgY2FzZSwgd2UgY291bGQgaW5zdGVhZCBhc3NvY2lhdGUgdGhlIFBPUF9CTE9DSyB3aXRoIGxpbmUgNSwgYnV0IHRoYXQKK3dvdWxkIGJyZWFrIGp1bXBzIGFyb3VuZCBsb29wcyB3aXRob3V0IGVsc2UgY2xhdXNlcy4KKworV2UgZml4IHRoaXMgYnkgb25seSBjYWxsaW5nIHRoZSBsaW5lIHRyYWNlIGZ1bmN0aW9uIGZvciBhIGZvcndhcmQganVtcCBpZiB0aGUKK2NvX2xub3RhYiBpbmRpY2F0ZXMgd2UgaGF2ZSBqdW1wZWQgdG8gdGhlICpzdGFydCogb2YgYSBsaW5lLCBpLmUuIGlmIHRoZSBjdXJyZW50CitpbnN0cnVjdGlvbiBvZmZzZXQgbWF0Y2hlcyB0aGUgb2Zmc2V0IGdpdmVuIGZvciB0aGUgc3RhcnQgb2YgYSBsaW5lIGJ5IHRoZQorY29fbG5vdGFiLiAgRm9yIGJhY2t3YXJkIGp1bXBzLCBob3dldmVyLCB3ZSBhbHdheXMgY2FsbCB0aGUgbGluZSB0cmFjZSBmdW5jdGlvbiwKK3doaWNoIGxldHMgYSBkZWJ1Z2dlciBzdG9wIG9uIGV2ZXJ5IGV2YWx1YXRpb24gb2YgYSBsb29wIGd1YXJkICh3aGljaCB1c3VhbGx5Cit3b24ndCBiZSB0aGUgZmlyc3Qgb3Bjb2RlIGluIGEgbGluZSkuCisKK1doeSBkbyB3ZSBzZXQgZl9saW5lbm8gd2hlbiB0cmFjaW5nLCBhbmQgb25seSBqdXN0IGJlZm9yZSBjYWxsaW5nIHRoZSB0cmFjZQorZnVuY3Rpb24/ICBXZWxsLCBjb25zaWRlciB0aGUgY29kZSBhYm92ZSB3aGVuICdhJyBpcyB0cnVlLiAgSWYgc3RlcHBpbmcgdGhyb3VnaAordGhpcyB3aXRoICduJyBpbiBwZGIsIHlvdSB3b3VsZCBzdG9wIGF0IGxpbmUgMSB3aXRoIGEgImNhbGwiIHR5cGUgZXZlbnQsIHRoZW4KK2xpbmUgZXZlbnRzIG9uIGxpbmVzIDIsIDMsIGFuZCA0LCB0aGVuIGEgInJldHVybiIgdHlwZSBldmVudCAtLSBidXQgYmVjYXVzZSB0aGUKK2NvZGUgZm9yIHRoZSByZXR1cm4gYWN0dWFsbHkgZmFsbHMgaW4gdGhlIHJhbmdlIG9mIHRoZSAibGluZSA2IiBvcGNvZGVzLCB5b3UKK3dvdWxkIGJlIHNob3duIGxpbmUgNiBkdXJpbmcgdGhpcyBldmVudC4gIFRoaXMgaXMgYSBjaGFuZ2UgZnJvbSB0aGUgYmVoYXZpb3VyIGluCisyLjIgYW5kIGJlZm9yZSwgYW5kIEkndmUgZm91bmQgaXQgY29uZnVzaW5nIGluIHByYWN0aWNlLiAgQnkgc2V0dGluZyBhbmQgdXNpbmcKK2ZfbGluZW5vIHdoZW4gdHJhY2luZywgb25lIGNhbiByZXBvcnQgYSBsaW5lIG51bWJlciBkaWZmZXJlbnQgZnJvbSB0aGF0CitzdWdnZXN0ZWQgYnkgZl9sYXN0aSBvbiB0aGlzIG9uZSBvY2Nhc2lvbiB3aGVyZSBpdCdzIGRlc2lyYWJsZS4KZGlmZiAtLWdpdCBhL09iamVjdHMvbG9uZ29iamVjdC5jIGIvT2JqZWN0cy9sb25nb2JqZWN0LmMKaW5kZXggZTZlZGI0Zi4uZmJkMThhMiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9sb25nb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9sb25nb2JqZWN0LmMKQEAgLTEsMTMgKzEsMTQgQEAKLQotCiAvKiBMb25nIChhcmJpdHJhcnkgcHJlY2lzaW9uKSBpbnRlZ2VyIG9iamVjdCBpbXBsZW1lbnRhdGlvbiAqLwogCiAvKiBYWFggVGhlIGZ1bmN0aW9uYWwgb3JnYW5pemF0aW9uIG9mIHRoaXMgZmlsZSBpcyB0ZXJyaWJsZSAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAibG9uZ2ludHJlcHIuaCIKKyNpbmNsdWRlICJzdHJ1Y3RzZXEuaCIKIAorI2luY2x1ZGUgPGZsb2F0Lmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KIAogLyogRm9yIGxvbmcgbXVsdGlwbGljYXRpb24sIHVzZSB0aGUgTyhOKioyKSBzY2hvb2wgYWxnb3JpdGhtIHVubGVzcwogICogYm90aCBvcGVyYW5kcyBjb250YWluIG1vcmUgdGhhbiBLQVJBVFNVQkFfQ1VUT0ZGIGRpZ2l0cyAodGhpcwpAQCAtMzAsMTcgKzMxLDEzIEBACiAjZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQogI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA+ICh5KSA/ICh5KSA6ICh4KSkKIAotLyogRm9yd2FyZCAqLwotc3RhdGljIFB5TG9uZ09iamVjdCAqbG9uZ19ub3JtYWxpemUoUHlMb25nT2JqZWN0ICopOwotc3RhdGljIFB5TG9uZ09iamVjdCAqbXVsMShQeUxvbmdPYmplY3QgKiwgd2RpZ2l0KTsKLXN0YXRpYyBQeUxvbmdPYmplY3QgKm11bGFkZDEoUHlMb25nT2JqZWN0ICosIHdkaWdpdCwgd2RpZ2l0KTsKLXN0YXRpYyBQeUxvbmdPYmplY3QgKmRpdnJlbTEoUHlMb25nT2JqZWN0ICosIGRpZ2l0LCBkaWdpdCAqKTsKLQotI2RlZmluZSBTSUdDSEVDSyhQeVRyeUJsb2NrKSBcCi0gICAgaWYgKC0tX1B5X1RpY2tlciA8IDApIHsgXAotICAgICAgICBfUHlfVGlja2VyID0gX1B5X0NoZWNrSW50ZXJ2YWw7IFwKLSAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKSBQeVRyeUJsb2NrIFwKLSAgICB9CisjZGVmaW5lIFNJR0NIRUNLKFB5VHJ5QmxvY2spICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoLS1fUHlfVGlja2VyIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfUHlfVGlja2VyID0gX1B5X0NoZWNrSW50ZXJ2YWw7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgUHlUcnlCbG9jayAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQogCiAvKiBOb3JtYWxpemUgKHJlbW92ZSBsZWFkaW5nIHplcm9zIGZyb20pIGEgbG9uZyBpbnQgb2JqZWN0LgogICAgRG9lc24ndCBhdHRlbXB0IHRvIGZyZWUgdGhlIHN0b3JhZ2UtLWluIG1vc3QgY2FzZXMsIGR1ZSB0byB0aGUgbmF0dXJlCkBAIC02MiwxNiArNTksMjAgQEAKIC8qIEFsbG9jYXRlIGEgbmV3IGxvbmcgaW50IG9iamVjdCB3aXRoIHNpemUgZGlnaXRzLgogICAgUmV0dXJuIE5VTEwgYW5kIHNldCBleGNlcHRpb24gaWYgd2UgcnVuIG91dCBvZiBtZW1vcnkuICovCiAKKyNkZWZpbmUgTUFYX0xPTkdfRElHSVRTIFwKKyAgICAoKFBZX1NTSVpFX1RfTUFYIC0gb2Zmc2V0b2YoUHlMb25nT2JqZWN0LCBvYl9kaWdpdCkpL3NpemVvZihkaWdpdCkpCisKIFB5TG9uZ09iamVjdCAqCiBfUHlMb25nX05ldyhQeV9zc2l6ZV90IHNpemUpCiB7Ci0gICAgaWYgKHNpemUgPiBQWV9TU0laRV9UX01BWCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgIGlmIChzaXplID4gKFB5X3NzaXplX3QpTUFYX0xPTkdfRElHSVRTKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtYW55IGRpZ2l0cyBpbiBpbnRlZ2VyIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAvKiBjb3Zlcml0eVthbXBlcnNhbmRfaW5fc2l6ZV0gKi8KLSAgICAvKiBYWFgobm5vcndpdHopOiBUaGlzIGNhbiBvdmVyZmxvdyAtLQotICAgICAgIFB5T2JqZWN0X05FV19WQVIgLyBfUHlPYmplY3RfVkFSX1NJWkUgbmVlZCB0byBkZXRlY3Qgb3ZlcmZsb3cgKi8KKyAgICAvKiBYWFgobm5vcndpdHopOiBQeU9iamVjdF9ORVdfVkFSIC8gX1B5T2JqZWN0X1ZBUl9TSVpFIG5lZWQgdG8gZGV0ZWN0CisgICAgICAgb3ZlcmZsb3cgKi8KICAgICByZXR1cm4gUHlPYmplY3RfTkVXX1ZBUihQeUxvbmdPYmplY3QsICZQeUxvbmdfVHlwZSwgc2l6ZSk7CiB9CiAKQEAgLTE3NiwxMiArMTc3LDEyIEBACiAgICAgbmVnID0gMDsKICAgICBpZiAoUHlfSVNfSU5GSU5JVFkoZHZhbCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAiY2Fubm90IGNvbnZlcnQgZmxvYXQgaW5maW5pdHkgdG8gaW50ZWdlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBjb252ZXJ0IGZsb2F0IGluZmluaXR5IHRvIGludGVnZXIiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChQeV9JU19OQU4oZHZhbCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAiY2Fubm90IGNvbnZlcnQgZmxvYXQgTmFOIHRvIGludGVnZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY29udmVydCBmbG9hdCBOYU4gdG8gaW50ZWdlciIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKGR2YWwgPCAwLjApIHsKQEAgLTE5Nyw4ICsxOTgsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmcmFjID0gbGRleHAoZnJhYywgKGV4cG8tMSkgJSBQeUxvbmdfU0hJRlQgKyAxKTsKICAgICBmb3IgKGkgPSBuZGlnOyAtLWkgPj0gMDsgKSB7Ci0gICAgICAgIGxvbmcgYml0cyA9IChsb25nKWZyYWM7Ci0gICAgICAgIHYtPm9iX2RpZ2l0W2ldID0gKGRpZ2l0KSBiaXRzOworICAgICAgICBkaWdpdCBiaXRzID0gKGRpZ2l0KWZyYWM7CisgICAgICAgIHYtPm9iX2RpZ2l0W2ldID0gYml0czsKICAgICAgICAgZnJhYyA9IGZyYWMgLSAoZG91YmxlKWJpdHM7CiAgICAgICAgIGZyYWMgPSBsZGV4cChmcmFjLCBQeUxvbmdfU0hJRlQpOwogICAgIH0KQEAgLTIxOSw1MyArMjIwLDEyMyBAQAogI2RlZmluZSBQWV9BQlNfTE9OR19NSU4gICAgICAgICAoMC0odW5zaWduZWQgbG9uZylMT05HX01JTikKICNkZWZpbmUgUFlfQUJTX1NTSVpFX1RfTUlOICAgICAgKDAtKHNpemVfdClQWV9TU0laRV9UX01JTikKIAotLyogR2V0IGEgQyBsb25nIGludCBmcm9tIGEgbG9uZyBpbnQgb2JqZWN0LgotICAgUmV0dXJucyAtMSBhbmQgc2V0cyBhbiBlcnJvciBjb25kaXRpb24gaWYgb3ZlcmZsb3cgb2NjdXJzLiAqLworLyogR2V0IGEgQyBsb25nIGludCBmcm9tIGEgUHl0aG9uIGxvbmcgb3IgUHl0aG9uIGludCBvYmplY3QuCisgICBPbiBvdmVyZmxvdywgcmV0dXJucyAtMSBhbmQgc2V0cyAqb3ZlcmZsb3cgdG8gMSBvciAtMSBkZXBlbmRpbmcKKyAgIG9uIHRoZSBzaWduIG9mIHRoZSByZXN1bHQuICBPdGhlcndpc2UgKm92ZXJmbG93IGlzIDAuCisKKyAgIEZvciBvdGhlciBlcnJvcnMgKGUuZy4sIHR5cGUgZXJyb3IpLCByZXR1cm5zIC0xIGFuZCBzZXRzIGFuIGVycm9yCisgICBjb25kaXRpb24uCisqLwogCiBsb25nCi1QeUxvbmdfQXNMb25nKFB5T2JqZWN0ICp2dikKK1B5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqdnYsIGludCAqb3ZlcmZsb3cpCiB7CiAgICAgLyogVGhpcyB2ZXJzaW9uIGJ5IFRpbSBQZXRlcnMgKi8KICAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgbG9uZyB4LCBwcmV2OworICAgIGxvbmcgcmVzOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKKyAgICBpbnQgZG9fZGVjcmVmID0gMDsgLyogaWYgbmJfaW50IHdhcyBjYWxsZWQgKi8KIAotICAgIGlmICh2diA9PSBOVUxMIHx8ICFQeUxvbmdfQ2hlY2sodnYpKSB7Ci0gICAgICAgIGlmICh2diAhPSBOVUxMICYmIFB5SW50X0NoZWNrKHZ2KSkKLSAgICAgICAgICAgIHJldHVybiBQeUludF9Bc0xvbmcodnYpOworICAgICpvdmVyZmxvdyA9IDA7CisgICAgaWYgKHZ2ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgdiA9IChQeUxvbmdPYmplY3QgKil2djsKLSAgICBpID0gdi0+b2Jfc2l6ZTsKLSAgICBzaWduID0gMTsKLSAgICB4ID0gMDsKLSAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgc2lnbiA9IC0xOwotICAgICAgICBpID0gLShpKTsKLSAgICB9Ci0gICAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgICAgIHByZXYgPSB4OwotICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSArIHYtPm9iX2RpZ2l0W2ldOwotICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KQotICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKLSAgICB9Ci0gICAgLyogSGF2ZW4ndCBsb3N0IGFueSBiaXRzLCBidXQgY2FzdGluZyB0byBsb25nIHJlcXVpcmVzIGV4dHJhIGNhcmUKLSAgICAgKiAoc2VlIGNvbW1lbnQgYWJvdmUpLgotICAgICAqLwotICAgIGlmICh4IDw9ICh1bnNpZ25lZCBsb25nKUxPTkdfTUFYKSB7Ci0gICAgICAgIHJldHVybiAobG9uZyl4ICogc2lnbjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2lnbiA8IDAgJiYgeCA9PSBQWV9BQlNfTE9OR19NSU4pIHsKLSAgICAgICAgcmV0dXJuIExPTkdfTUlOOwotICAgIH0KLSAgICAvKiBlbHNlIG92ZXJmbG93ICovCiAKLSBvdmVyZmxvdzoKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImxvbmcgaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGludCIpOwotICAgIHJldHVybiAtMTsKKyAgICBpZihQeUludF9DaGVjayh2dikpCisgICAgICAgIHJldHVybiBQeUludF9Bc0xvbmcodnYpOworCisgICAgaWYgKCFQeUxvbmdfQ2hlY2sodnYpKSB7CisgICAgICAgIFB5TnVtYmVyTWV0aG9kcyAqbmI7CisgICAgICAgIG5iID0gdnYtPm9iX3R5cGUtPnRwX2FzX251bWJlcjsKKyAgICAgICAgaWYgKG5iID09IE5VTEwgfHwgbmItPm5iX2ludCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgdnYgPSAoKm5iLT5uYl9pbnQpICh2dik7CisgICAgICAgIGlmICh2diA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBkb19kZWNyZWYgPSAxOworICAgICAgICBpZihQeUludF9DaGVjayh2dikpIHsKKyAgICAgICAgICAgIHJlcyA9IFB5SW50X0FzTG9uZyh2dik7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodnYpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodnYpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmJfaW50IHNob3VsZCByZXR1cm4gaW50IG9iamVjdCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzID0gLTE7CisgICAgdiA9IChQeUxvbmdPYmplY3QgKil2djsKKyAgICBpID0gUHlfU0laRSh2KTsKKworICAgIHN3aXRjaCAoaSkgeworICAgIGNhc2UgLTE6CisgICAgICAgIHJlcyA9IC0oc2RpZ2l0KXYtPm9iX2RpZ2l0WzBdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDA6CisgICAgICAgIHJlcyA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgcmVzID0gdi0+b2JfZGlnaXRbMF07CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHNpZ24gPSAxOworICAgICAgICB4ID0gMDsKKyAgICAgICAgaWYgKGkgPCAwKSB7CisgICAgICAgICAgICBzaWduID0gLTE7CisgICAgICAgICAgICBpID0gLShpKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoLS1pID49IDApIHsKKyAgICAgICAgICAgIHByZXYgPSB4OworICAgICAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgKyB2LT5vYl9kaWdpdFtpXTsKKyAgICAgICAgICAgIGlmICgoeCA+PiBQeUxvbmdfU0hJRlQpICE9IHByZXYpIHsKKyAgICAgICAgICAgICAgICAqb3ZlcmZsb3cgPSBzaWduOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBIYXZlbid0IGxvc3QgYW55IGJpdHMsIGJ1dCBjYXN0aW5nIHRvIGxvbmcgcmVxdWlyZXMgZXh0cmEKKyAgICAgICAgICogY2FyZSAoc2VlIGNvbW1lbnQgYWJvdmUpLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHggPD0gKHVuc2lnbmVkIGxvbmcpTE9OR19NQVgpIHsKKyAgICAgICAgICAgIHJlcyA9IChsb25nKXggKiBzaWduOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNpZ24gPCAwICYmIHggPT0gUFlfQUJTX0xPTkdfTUlOKSB7CisgICAgICAgICAgICByZXMgPSBMT05HX01JTjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICpvdmVyZmxvdyA9IHNpZ247CisgICAgICAgICAgICAvKiByZXMgaXMgYWxyZWFkeSBzZXQgdG8gLTEgKi8KKyAgICAgICAgfQorICAgIH0KKyAgZXhpdDoKKyAgICBpZiAoZG9fZGVjcmVmKSB7CisgICAgICAgIFB5X0RFQ1JFRih2dik7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKy8qIEdldCBhIEMgbG9uZyBpbnQgZnJvbSBhIGxvbmcgaW50IG9iamVjdC4KKyAgIFJldHVybnMgLTEgYW5kIHNldHMgYW4gZXJyb3IgY29uZGl0aW9uIGlmIG92ZXJmbG93IG9jY3Vycy4gKi8KKworbG9uZworUHlMb25nX0FzTG9uZyhQeU9iamVjdCAqb2JqKQoreworICAgIGludCBvdmVyZmxvdzsKKyAgICBsb25nIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmosICZvdmVyZmxvdyk7CisgICAgaWYgKG92ZXJmbG93KSB7CisgICAgICAgIC8qIFhYWDogY291bGQgYmUgY3V0ZSBhbmQgZ2l2ZSBhIGRpZmZlcmVudAorICAgICAgICAgICBtZXNzYWdlIGZvciBvdmVyZmxvdyA9PSAtMSAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIEMgbG9uZyIpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvKiBHZXQgYSBQeV9zc2l6ZV90IGZyb20gYSBsb25nIGludCBvYmplY3QuCkBAIC0yOTIsNyArMzYzLDcgQEAKICAgICB9CiAgICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgICAgIHByZXYgPSB4OwotICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSArIHYtPm9iX2RpZ2l0W2ldOworICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KQogICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKICAgICB9CkBAIC0zMDcsNyArMzc4LDcgQEAKICAgICB9CiAgICAgLyogZWxzZSBvdmVyZmxvdyAqLwogCi0gb3ZlcmZsb3c6CisgIG92ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAibG9uZyBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgdG8gaW50Iik7CiAgICAgcmV0dXJuIC0xOwpAQCAtMzI4LDcgKzM5OSw4IEBACiAgICAgICAgICAgICBsb25nIHZhbCA9IFB5SW50X0FzTG9uZyh2dik7CiAgICAgICAgICAgICBpZiAodmFsIDwgMCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICJjYW4ndCBjb252ZXJ0IG5lZ2F0aXZlIHZhbHVlIHRvIHVuc2lnbmVkIGxvbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGNvbnZlcnQgbmVnYXRpdmUgdmFsdWUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gdW5zaWduZWQgbG9uZyIpOwogICAgICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdmFsOwpAQCAtMzQxLDE1ICs0MTMsMTUgQEAKICAgICB4ID0gMDsKICAgICBpZiAoaSA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgImNhbid0IGNvbnZlcnQgbmVnYXRpdmUgdmFsdWUgdG8gdW5zaWduZWQgbG9uZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGNvbnZlcnQgbmVnYXRpdmUgdmFsdWUgdG8gdW5zaWduZWQgbG9uZyIpOwogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC0xOwogICAgIH0KICAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgICAgcHJldiA9IHg7Ci0gICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpICsgdi0+b2JfZGlnaXRbaV07CisgICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpIHwgdi0+b2JfZGlnaXRbaV07CiAgICAgICAgIGlmICgoeCA+PiBQeUxvbmdfU0hJRlQpICE9IHByZXYpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICJsb25nIGludCB0b28gbGFyZ2UgdG8gY29udmVydCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb25nIGludCB0b28gbGFyZ2UgdG8gY29udmVydCIpOwogICAgICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtMTsKICAgICAgICAgfQogICAgIH0KQEAgLTM4Miw3ICs0NTQsNyBAQAogICAgICAgICBpID0gLWk7CiAgICAgfQogICAgIHdoaWxlICgtLWkgPj0gMCkgewotICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSArIHYtPm9iX2RpZ2l0W2ldOworICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgIH0KICAgICByZXR1cm4geCAqIHNpZ247CiB9CkBAIC00MjQsNyArNDk2LDcgQEAKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIAotT3ZlcmZsb3c6CisgIE92ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibG9uZyBoYXMgdG9vIG1hbnkgYml0cyAiCiAgICAgICAgICAgICAgICAgICAgICJ0byBleHByZXNzIGluIGEgcGxhdGZvcm0gc2l6ZV90Iik7CiAgICAgcmV0dXJuIChzaXplX3QpLTE7CkBAIC00MzQsMTMgKzUwNiwxMyBAQAogX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGl0dGxlX2VuZGlhbiwgaW50IGlzX3NpZ25lZCkKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwc3RhcnRieXRlOy8qIExTQiBvZiBieXRlcyAqLworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBzdGFydGJ5dGU7ICAgIC8qIExTQiBvZiBieXRlcyAqLwogICAgIGludCBpbmNyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpcmVjdGlvbiB0byBtb3ZlIHBzdGFydGJ5dGUgKi8KICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwZW5kYnl0ZTsgICAgICAvKiBNU0Igb2YgYnl0ZXMgKi8KICAgICBzaXplX3QgbnVtc2lnbmlmaWNhbnRieXRlczsgICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYXR0ZXIgKi8KLSAgICBzaXplX3QgbmRpZ2l0czsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgUHl0aG9uIGxvbmcgZGlnaXRzICovCisgICAgUHlfc3NpemVfdCBuZGlnaXRzOyAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIFB5dGhvbiBsb25nIGRpZ2l0cyAqLwogICAgIFB5TG9uZ09iamVjdCogdjsgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VsdCAqLwotICAgIGludCBpZGlnaXQgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIG5leHQgZnJlZSBpbmRleCBpbiB2LT5vYl9kaWdpdCAqLworICAgIFB5X3NzaXplX3QgaWRpZ2l0ID0gMDsgICAgICAgICAgICAgIC8qIG5leHQgZnJlZSBpbmRleCBpbiB2LT5vYl9kaWdpdCAqLwogCiAgICAgaWYgKG4gPT0gMCkKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwTCk7CkBAIC00ODMsMTIgKzU1NSwxNiBAQAogICAgIH0KIAogICAgIC8qIEhvdyBtYW55IFB5dGhvbiBsb25nIGRpZ2l0cyBkbyB3ZSBuZWVkPyAgV2UgaGF2ZQotICAgICAgIDgqbnVtc2lnbmlmaWNhbnRieXRlcyBiaXRzLCBhbmQgZWFjaCBQeXRob24gbG9uZyBkaWdpdCBoYXMgUHlMb25nX1NISUZUCi0gICAgICAgYml0cywgc28gaXQncyB0aGUgY2VpbGluZyBvZiB0aGUgcXVvdGllbnQuICovCisgICAgICAgOCpudW1zaWduaWZpY2FudGJ5dGVzIGJpdHMsIGFuZCBlYWNoIFB5dGhvbiBsb25nIGRpZ2l0IGhhcworICAgICAgIFB5TG9uZ19TSElGVCBiaXRzLCBzbyBpdCdzIHRoZSBjZWlsaW5nIG9mIHRoZSBxdW90aWVudC4gKi8KKyAgICAvKiBjYXRjaCBvdmVyZmxvdyBiZWZvcmUgaXQgaGFwcGVucyAqLworICAgIGlmIChudW1zaWduaWZpY2FudGJ5dGVzID4gKFBZX1NTSVpFX1RfTUFYIC0gUHlMb25nX1NISUZUKSAvIDgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZSBhcnJheSB0b28gbG9uZyB0byBjb252ZXJ0IHRvIGludCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgbmRpZ2l0cyA9IChudW1zaWduaWZpY2FudGJ5dGVzICogOCArIFB5TG9uZ19TSElGVCAtIDEpIC8gUHlMb25nX1NISUZUOwotICAgIGlmIChuZGlnaXRzID4gKHNpemVfdClJTlRfTUFYKQotICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB2ID0gX1B5TG9uZ19OZXcoKGludCluZGlnaXRzKTsKKyAgICB2ID0gX1B5TG9uZ19OZXcobmRpZ2l0cyk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTUxNyw3ICs1OTMsNyBAQAogICAgICAgICAgICAgYWNjdW1iaXRzICs9IDg7CiAgICAgICAgICAgICBpZiAoYWNjdW1iaXRzID49IFB5TG9uZ19TSElGVCkgewogICAgICAgICAgICAgICAgIC8qIFRoZXJlJ3MgZW5vdWdoIHRvIGZpbGwgYSBQeXRob24gZGlnaXQuICovCi0gICAgICAgICAgICAgICAgYXNzZXJ0KGlkaWdpdCA8IChpbnQpbmRpZ2l0cyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGlkaWdpdCA8IG5kaWdpdHMpOwogICAgICAgICAgICAgICAgIHYtPm9iX2RpZ2l0W2lkaWdpdF0gPSAoZGlnaXQpKGFjY3VtICYgUHlMb25nX01BU0spOwogICAgICAgICAgICAgICAgICsraWRpZ2l0OwogICAgICAgICAgICAgICAgIGFjY3VtID4+PSBQeUxvbmdfU0hJRlQ7CkBAIC01MjcsNyArNjAzLDcgQEAKICAgICAgICAgfQogICAgICAgICBhc3NlcnQoYWNjdW1iaXRzIDwgUHlMb25nX1NISUZUKTsKICAgICAgICAgaWYgKGFjY3VtYml0cykgewotICAgICAgICAgICAgYXNzZXJ0KGlkaWdpdCA8IChpbnQpbmRpZ2l0cyk7CisgICAgICAgICAgICBhc3NlcnQoaWRpZ2l0IDwgbmRpZ2l0cyk7CiAgICAgICAgICAgICB2LT5vYl9kaWdpdFtpZGlnaXRdID0gKGRpZ2l0KWFjY3VtOwogICAgICAgICAgICAgKytpZGlnaXQ7CiAgICAgICAgIH0KQEAgLTU0Myw5ICs2MTksOSBAQAogICAgICAgICAgICAgICAgICAgICBpbnQgbGl0dGxlX2VuZGlhbiwgaW50IGlzX3NpZ25lZCkKIHsKICAgICBQeV9zc2l6ZV90IGk7ICAgICAgICAgICAgICAgLyogaW5kZXggaW50byB2LT5vYl9kaWdpdCAqLwotICAgIFB5X3NzaXplX3QgbmRpZ2l0czsgICAgICAgICAgICAgICAgIC8qIHx2LT5vYl9zaXplfCAqLworICAgIFB5X3NzaXplX3QgbmRpZ2l0czsgICAgICAgICAvKiB8di0+b2Jfc2l6ZXwgKi8KICAgICB0d29kaWdpdHMgYWNjdW07ICAgICAgICAgICAgLyogc2xpZGluZyByZWdpc3RlciAqLwotICAgIHVuc2lnbmVkIGludCBhY2N1bWJpdHM7IC8qICMgYml0cyBpbiBhY2N1bSAqLworICAgIHVuc2lnbmVkIGludCBhY2N1bWJpdHM7ICAgICAvKiAjIGJpdHMgaW4gYWNjdW0gKi8KICAgICBpbnQgZG9fdHdvc19jb21wOyAgICAgICAgICAgLyogc3RvcmUgMidzLWNvbXA/ICBpc19zaWduZWQgYW5kIHYgPCAwICovCiAgICAgZGlnaXQgY2Fycnk7ICAgICAgICAgICAgICAgIC8qIGZvciBjb21wdXRpbmcgMidzLWNvbXAgKi8KICAgICBzaXplX3QgajsgICAgICAgICAgICAgICAgICAgLyogIyBieXRlcyBmaWxsZWQgKi8KQEAgLTU1Nyw4ICs2MzMsOCBAQAogICAgIGlmIChQeV9TSVpFKHYpIDwgMCkgewogICAgICAgICBuZGlnaXRzID0gLShQeV9TSVpFKHYpKTsKICAgICAgICAgaWYgKCFpc19zaWduZWQpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgImNhbid0IGNvbnZlcnQgbmVnYXRpdmUgbG9uZyB0byB1bnNpZ25lZCIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGNvbnZlcnQgbmVnYXRpdmUgbG9uZyB0byB1bnNpZ25lZCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGRvX3R3b3NfY29tcCA9IDE7CkBAIC02MDQsOCArNjgwLDcgQEAKICAgICAgICAgICAgIC8qIENvdW50ICMgb2Ygc2lnbiBiaXRzIC0tIHRoZXkgbmVlZG4ndCBiZSBzdG9yZWQsCiAgICAgICAgICAgICAgKiBhbHRob3VnaCBmb3Igc2lnbmVkIGNvbnZlcnNpb24gd2UgbmVlZCBsYXRlciB0bwogICAgICAgICAgICAgICogbWFrZSBzdXJlIGF0IGxlYXN0IG9uZSBzaWduIGJpdCBnZXRzIHN0b3JlZC4gKi8KLSAgICAgICAgICAgIGRpZ2l0IHMgPSBkb190d29zX2NvbXAgPyB0aGlzZGlnaXQgXiBQeUxvbmdfTUFTSyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzZGlnaXQ7CisgICAgICAgICAgICBkaWdpdCBzID0gZG9fdHdvc19jb21wID8gdGhpc2RpZ2l0IF4gUHlMb25nX01BU0sgOiB0aGlzZGlnaXQ7CiAgICAgICAgICAgICB3aGlsZSAocyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgcyA+Pj0gMTsKICAgICAgICAgICAgICAgICBhY2N1bWJpdHMrKzsKQEAgLTY2NSw5NyArNzQwLDEyIEBACiAKICAgICByZXR1cm4gMDsKIAotT3ZlcmZsb3c6CisgIE92ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibG9uZyB0b28gYmlnIHRvIGNvbnZlcnQiKTsKICAgICByZXR1cm4gLTE7CiAKIH0KIAotZG91YmxlCi1fUHlMb25nX0FzU2NhbGVkRG91YmxlKFB5T2JqZWN0ICp2diwgaW50ICpleHBvbmVudCkKLXsKLS8qIE5CSVRTX1dBTlRFRCBzaG91bGQgYmUgPiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBkb3VibGUncyBwcmVjaXNpb24sCi0gICBidXQgc21hbGwgZW5vdWdoIHNvIHRoYXQgMioqTkJJVFNfV0FOVEVEIGlzIHdpdGhpbiB0aGUgbm9ybWFsIGRvdWJsZQotICAgcmFuZ2UuICBuYml0c25lZWRlZCBpcyBzZXQgdG8gMSBsZXNzIHRoYW4gdGhhdCBiZWNhdXNlIHRoZSBtb3N0LXNpZ25pZmljYW50Ci0gICBQeXRob24gZGlnaXQgY29udGFpbnMgYXQgbGVhc3QgMSBzaWduaWZpY2FudCBiaXQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvCi0gICBib3RoZXIgY291bnRpbmcgdGhlbSAoY2F0ZXJpbmcgdG8gdGhlIHdvcnN0IGNhc2UgY2hlYXBseSkuCi0KLSAgIDU3IGlzIG9uZSBtb3JlIHRoYW4gVkFYLUQgZG91YmxlIHByZWNpc2lvbjsgSSAoVGltKSBkb24ndCBrbm93IG9mIGEgZG91YmxlCi0gICBmb3JtYXQgd2l0aCBtb3JlIHByZWNpc2lvbiB0aGFuIHRoYXQ7IGl0J3MgMSBsYXJnZXIgc28gdGhhdCB3ZSBhZGQgaW4gYXQKLSAgIGxlYXN0IG9uZSByb3VuZCBiaXQgdG8gc3RhbmQgaW4gZm9yIHRoZSBpZ25vcmVkIGxlYXN0LXNpZ25pZmljYW50IGJpdHMuCi0qLwotI2RlZmluZSBOQklUU19XQU5URUQgNTcKLSAgICBQeUxvbmdPYmplY3QgKnY7Ci0gICAgZG91YmxlIHg7Ci0gICAgY29uc3QgZG91YmxlIG11bHRpcGxpZXIgPSAoZG91YmxlKSgxTCA8PCBQeUxvbmdfU0hJRlQpOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBpbnQgc2lnbjsKLSAgICBpbnQgbmJpdHNuZWVkZWQ7Ci0KLSAgICBpZiAodnYgPT0gTlVMTCB8fCAhUHlMb25nX0NoZWNrKHZ2KSkgewotICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICB2ID0gKFB5TG9uZ09iamVjdCAqKXZ2OwotICAgIGkgPSBQeV9TSVpFKHYpOwotICAgIHNpZ24gPSAxOwotICAgIGlmIChpIDwgMCkgewotICAgICAgICBzaWduID0gLTE7Ci0gICAgICAgIGkgPSAtKGkpOwotICAgIH0KLSAgICBlbHNlIGlmIChpID09IDApIHsKLSAgICAgICAgKmV4cG9uZW50ID0gMDsKLSAgICAgICAgcmV0dXJuIDAuMDsKLSAgICB9Ci0gICAgLS1pOwotICAgIHggPSAoZG91YmxlKXYtPm9iX2RpZ2l0W2ldOwotICAgIG5iaXRzbmVlZGVkID0gTkJJVFNfV0FOVEVEIC0gMTsKLSAgICAvKiBJbnZhcmlhbnQ6ICBpIFB5dGhvbiBkaWdpdHMgcmVtYWluIHVuYWNjb3VudGVkIGZvci4gKi8KLSAgICB3aGlsZSAoaSA+IDAgJiYgbmJpdHNuZWVkZWQgPiAwKSB7Ci0gICAgICAgIC0taTsKLSAgICAgICAgeCA9IHggKiBtdWx0aXBsaWVyICsgKGRvdWJsZSl2LT5vYl9kaWdpdFtpXTsKLSAgICAgICAgbmJpdHNuZWVkZWQgLT0gUHlMb25nX1NISUZUOwotICAgIH0KLSAgICAvKiBUaGVyZSBhcmUgaSBkaWdpdHMgd2UgZGlkbid0IHNoaWZ0IGluLiAgUHJldGVuZGluZyB0aGV5J3JlIGFsbAotICAgICAgIHplcm9lcywgdGhlIHRydWUgdmFsdWUgaXMgeCAqIDIqKihpKlB5TG9uZ19TSElGVCkuICovCi0gICAgKmV4cG9uZW50ID0gaTsKLSAgICBhc3NlcnQoeCA+IDAuMCk7Ci0gICAgcmV0dXJuIHggKiBzaWduOwotI3VuZGVmIE5CSVRTX1dBTlRFRAotfQotCi0vKiBHZXQgYSBDIGRvdWJsZSBmcm9tIGEgbG9uZyBpbnQgb2JqZWN0LiAqLwotCi1kb3VibGUKLVB5TG9uZ19Bc0RvdWJsZShQeU9iamVjdCAqdnYpCi17Ci0gICAgaW50IGUgPSAtMTsKLSAgICBkb3VibGUgeDsKLQotICAgIGlmICh2diA9PSBOVUxMIHx8ICFQeUxvbmdfQ2hlY2sodnYpKSB7Ci0gICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHggPSBfUHlMb25nX0FzU2NhbGVkRG91YmxlKHZ2LCAmZSk7Ci0gICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gLTEuMDsKLSAgICAvKiAnZScgaW5pdGlhbGl6ZWQgdG8gLTEgdG8gc2lsZW5jZSBnY2MtNC4wLngsIGJ1dCBpdCBzaG91bGQgYmUKLSAgICAgICBzZXQgY29ycmVjdGx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCBfUHlMb25nX0FzU2NhbGVkRG91YmxlKCkgY2FsbCAqLwotICAgIGFzc2VydChlID49IDApOwotICAgIGlmIChlID4gSU5UX01BWCAvIFB5TG9uZ19TSElGVCkKLSAgICAgICAgZ290byBvdmVyZmxvdzsKLSAgICBlcnJubyA9IDA7Ci0gICAgeCA9IGxkZXhwKHgsIGUgKiBQeUxvbmdfU0hJRlQpOwotICAgIGlmIChQeV9PVkVSRkxPV0VEKHgpKQotICAgICAgICBnb3RvIG92ZXJmbG93OwotICAgIHJldHVybiB4OwotCi1vdmVyZmxvdzoKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgImxvbmcgaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGZsb2F0Iik7Ci0gICAgcmV0dXJuIC0xLjA7Ci19Ci0KIC8qIENyZWF0ZSBhIG5ldyBsb25nIChvciBpbnQpIG9iamVjdCBmcm9tIGEgQyBwb2ludGVyICovCiAKIFB5T2JqZWN0ICoKQEAgLTgzMCw2ICs4MjAsNyBAQAogICovCiAKICNkZWZpbmUgSVNfTElUVExFX0VORElBTiAoaW50KSoodW5zaWduZWQgY2hhciopJm9uZQorI2RlZmluZSBQWV9BQlNfTExPTkdfTUlOICgwLSh1bnNpZ25lZCBQWV9MT05HX0xPTkcpUFlfTExPTkdfTUlOKQogCiAvKiBDcmVhdGUgYSBuZXcgbG9uZyBpbnQgb2JqZWN0IGZyb20gYSBDIFBZX0xPTkdfTE9ORyBpbnQuICovCiAKQEAgLTkwOCw5ICs4OTksOCBAQAogewogICAgIFB5X3NzaXplX3QgYnl0ZXMgPSBpdmFsOwogICAgIGludCBvbmUgPSAxOwotICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoCi0gICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAotICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfU0laRV9ULCBJU19MSVRUTEVfRU5ESUFOLCAxKTsKKyAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KCh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX1NJWkVfVCwgSVNfTElUVExFX0VORElBTiwgMSk7CiB9CiAKIC8qIENyZWF0ZSBhIG5ldyBsb25nIGludCBvYmplY3QgZnJvbSBhIEMgc2l6ZV90LiAqLwpAQCAtOTIwLDkgKzkxMCw4IEBACiB7CiAgICAgc2l6ZV90IGJ5dGVzID0gaXZhbDsKICAgICBpbnQgb25lID0gMTsKLSAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KAotICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSZieXRlcywKLSAgICAgICAgICAgICAgICAgICAgU0laRU9GX1NJWkVfVCwgSVNfTElUVExFX0VORElBTiwgMCk7CisgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheSgodW5zaWduZWQgY2hhciAqKSZieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9TSVpFX1QsIElTX0xJVFRMRV9FTkRJQU4sIDApOwogfQogCiAvKiBHZXQgYSBDIFBZX0xPTkdfTE9ORyBpbnQgZnJvbSBhIGxvbmcgaW50IG9iamVjdC4KQEAgLTk2Nyw5ICs5NTYsOCBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgKLSAgICAgICAgICAgICAgICAgICAgKFB5TG9uZ09iamVjdCAqKXZ2LCAodW5zaWduZWQgY2hhciAqKSZieXRlcywKLSAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMSk7CisgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdnYsICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMSk7CiAKICAgICAvKiBQbGFuIDkgY2FuJ3QgaGFuZGxlIFBZX0xPTkdfTE9ORyBpbiA/IDogZXhwcmVzc2lvbnMgKi8KICAgICBpZiAocmVzIDwgMCkKQEAgLTk5Myw5ICs5ODEsOCBAQAogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIFBZX0xPTkdfTE9ORyktMTsKICAgICB9CiAKLSAgICByZXMgPSBfUHlMb25nX0FzQnl0ZUFycmF5KAotICAgICAgICAgICAgICAgICAgICAoUHlMb25nT2JqZWN0ICopdnYsICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAotICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBJU19MSVRUTEVfRU5ESUFOLCAwKTsKKyAgICByZXMgPSBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3QgKil2diwgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBJU19MSVRUTEVfRU5ESUFOLCAwKTsKIAogICAgIC8qIFBsYW4gOSBjYW4ndCBoYW5kbGUgUFlfTE9OR19MT05HIGluID8gOiBleHByZXNzaW9ucyAqLwogICAgIGlmIChyZXMgPCAwKQpAQCAtMTAyOCwxMCArMTAxNSwxMTMgQEAKICAgICAgICAgaSA9IC1pOwogICAgIH0KICAgICB3aGlsZSAoLS1pID49IDApIHsKLSAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgKyB2LT5vYl9kaWdpdFtpXTsKKyAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgfCB2LT5vYl9kaWdpdFtpXTsKICAgICB9CiAgICAgcmV0dXJuIHggKiBzaWduOwogfQorCisvKiBHZXQgYSBDIGxvbmcgbG9uZyBpbnQgZnJvbSBhIFB5dGhvbiBsb25nIG9yIFB5dGhvbiBpbnQgb2JqZWN0LgorICAgT24gb3ZlcmZsb3csIHJldHVybnMgLTEgYW5kIHNldHMgKm92ZXJmbG93IHRvIDEgb3IgLTEgZGVwZW5kaW5nCisgICBvbiB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0LiAgT3RoZXJ3aXNlICpvdmVyZmxvdyBpcyAwLgorCisgICBGb3Igb3RoZXIgZXJyb3JzIChlLmcuLCB0eXBlIGVycm9yKSwgcmV0dXJucyAtMSBhbmQgc2V0cyBhbiBlcnJvcgorICAgY29uZGl0aW9uLgorKi8KKworUFlfTE9OR19MT05HCitQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICp2diwgaW50ICpvdmVyZmxvdykKK3sKKyAgICAvKiBUaGlzIHZlcnNpb24gYnkgVGltIFBldGVycyAqLworICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgeCwgcHJldjsKKyAgICBQWV9MT05HX0xPTkcgcmVzOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2lnbjsKKyAgICBpbnQgZG9fZGVjcmVmID0gMDsgLyogaWYgbmJfaW50IHdhcyBjYWxsZWQgKi8KKworICAgICpvdmVyZmxvdyA9IDA7CisgICAgaWYgKHZ2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoUHlJbnRfQ2hlY2sodnYpKQorICAgICAgICByZXR1cm4gUHlJbnRfQXNMb25nKHZ2KTsKKworICAgIGlmICghUHlMb25nX0NoZWNrKHZ2KSkgeworICAgICAgICBQeU51bWJlck1ldGhvZHMgKm5iOworICAgICAgICBuYiA9IHZ2LT5vYl90eXBlLT50cF9hc19udW1iZXI7CisgICAgICAgIGlmIChuYiA9PSBOVUxMIHx8IG5iLT5uYl9pbnQgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHZ2ID0gKCpuYi0+bmJfaW50KSAodnYpOworICAgICAgICBpZiAodnYgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZG9fZGVjcmVmID0gMTsKKyAgICAgICAgaWYoUHlJbnRfQ2hlY2sodnYpKSB7CisgICAgICAgICAgICByZXMgPSBQeUludF9Bc0xvbmcodnYpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHZ2KSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHZ2KTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5iX2ludCBzaG91bGQgcmV0dXJuIGludCBvYmplY3QiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlcyA9IC0xOworICAgIHYgPSAoUHlMb25nT2JqZWN0ICopdnY7CisgICAgaSA9IFB5X1NJWkUodik7CisKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICBjYXNlIC0xOgorICAgICAgICByZXMgPSAtKHNkaWdpdCl2LT5vYl9kaWdpdFswXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAwOgorICAgICAgICByZXMgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIHJlcyA9IHYtPm9iX2RpZ2l0WzBdOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzaWduID0gMTsKKyAgICAgICAgeCA9IDA7CisgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAgc2lnbiA9IC0xOworICAgICAgICAgICAgaSA9IC0oaSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7CisgICAgICAgICAgICBwcmV2ID0geDsKKyAgICAgICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpICsgdi0+b2JfZGlnaXRbaV07CisgICAgICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KSB7CisgICAgICAgICAgICAgICAgKm92ZXJmbG93ID0gc2lnbjsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogSGF2ZW4ndCBsb3N0IGFueSBiaXRzLCBidXQgY2FzdGluZyB0byBsb25nIHJlcXVpcmVzIGV4dHJhCisgICAgICAgICAqIGNhcmUgKHNlZSBjb21tZW50IGFib3ZlKS4KKyAgICAgICAgICovCisgICAgICAgIGlmICh4IDw9ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpUFlfTExPTkdfTUFYKSB7CisgICAgICAgICAgICByZXMgPSAoUFlfTE9OR19MT05HKXggKiBzaWduOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNpZ24gPCAwICYmIHggPT0gUFlfQUJTX0xMT05HX01JTikgeworICAgICAgICAgICAgcmVzID0gUFlfTExPTkdfTUlOOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgKm92ZXJmbG93ID0gc2lnbjsKKyAgICAgICAgICAgIC8qIHJlcyBpcyBhbHJlYWR5IHNldCB0byAtMSAqLworICAgICAgICB9CisgICAgfQorICBleGl0OgorICAgIGlmIChkb19kZWNyZWYpIHsKKyAgICAgICAgUHlfREVDUkVGKHZ2KTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKwogI3VuZGVmIElTX0xJVFRMRV9FTkRJQU4KIAogI2VuZGlmIC8qIEhBVkVfTE9OR19MT05HICovCkBAIC0xMDYzLDExICsxMTUzLDMzIEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLSNkZWZpbmUgQ09OVkVSVF9CSU5PUCh2LCB3LCBhLCBiKSBcCi0gICAgaWYgKCFjb252ZXJ0X2Jpbm9wKHYsIHcsIGEsIGIpKSB7IFwKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsgXAotICAgICAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7IFwKKyNkZWZpbmUgQ09OVkVSVF9CSU5PUCh2LCB3LCBhLCBiKSAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCFjb252ZXJ0X2Jpbm9wKHYsIHcsIGEsIGIpKSB7ICAgICAgIFwKKyAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKworLyogYml0c19pbl9kaWdpdChkKSByZXR1cm5zIHRoZSB1bmlxdWUgaW50ZWdlciBrIHN1Y2ggdGhhdCAyKiooay0xKSA8PSBkIDwKKyAgIDIqKmsgaWYgZCBpcyBub256ZXJvLCBlbHNlIDAuICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIEJpdExlbmd0aFRhYmxlWzMyXSA9IHsKKyAgICAwLCAxLCAyLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUKK307CisKK3N0YXRpYyBpbnQKK2JpdHNfaW5fZGlnaXQoZGlnaXQgZCkKK3sKKyAgICBpbnQgZF9iaXRzID0gMDsKKyAgICB3aGlsZSAoZCA+PSAzMikgeworICAgICAgICBkX2JpdHMgKz0gNjsKKyAgICAgICAgZCA+Pj0gNjsKICAgICB9CisgICAgZF9iaXRzICs9IChpbnQpQml0TGVuZ3RoVGFibGVbZF07CisgICAgcmV0dXJuIGRfYml0czsKK30KIAogLyogeFswOm1dIGFuZCB5WzA6bl0gYXJlIGRpZ2l0IHZlY3RvcnMsIExTRCBmaXJzdCwgbSA+PSBuIHJlcXVpcmVkLiAgeFswOm5dCiAgKiBpcyBtb2RpZmllZCBpbiBwbGFjZSwgYnkgYWRkaW5nIHkgdG8gaXQuICBDYXJyaWVzIGFyZSBwcm9wYWdhdGVkIGFzIGZhciBhcwpAQCAtMTEyMSwzMyArMTIzMyw0MSBAQAogICAgIHJldHVybiBib3Jyb3c7CiB9CiAKLS8qIE11bHRpcGx5IGJ5IGEgc2luZ2xlIGRpZ2l0LCBpZ25vcmluZyB0aGUgc2lnbi4gKi8KLQotc3RhdGljIFB5TG9uZ09iamVjdCAqCi1tdWwxKFB5TG9uZ09iamVjdCAqYSwgd2RpZ2l0IG4pCisvKiBTaGlmdCBkaWdpdCB2ZWN0b3IgYVswOm1dIGQgYml0cyBsZWZ0LCB3aXRoIDAgPD0gZCA8IFB5TG9uZ19TSElGVC4gIFB1dAorICogcmVzdWx0IGluIHpbMDptXSwgYW5kIHJldHVybiB0aGUgZCBiaXRzIHNoaWZ0ZWQgb3V0IG9mIHRoZSB0b3AuCisgKi8KK3N0YXRpYyBkaWdpdAordl9sc2hpZnQoZGlnaXQgKnosIGRpZ2l0ICphLCBQeV9zc2l6ZV90IG0sIGludCBkKQogewotICAgIHJldHVybiBtdWxhZGQxKGEsIG4sIChkaWdpdCkwKTsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgZGlnaXQgY2FycnkgPSAwOworCisgICAgYXNzZXJ0KDAgPD0gZCAmJiBkIDwgUHlMb25nX1NISUZUKTsKKyAgICBmb3IgKGk9MDsgaSA8IG07IGkrKykgeworICAgICAgICB0d29kaWdpdHMgYWNjID0gKHR3b2RpZ2l0cylhW2ldIDw8IGQgfCBjYXJyeTsKKyAgICAgICAgeltpXSA9IChkaWdpdClhY2MgJiBQeUxvbmdfTUFTSzsKKyAgICAgICAgY2FycnkgPSAoZGlnaXQpKGFjYyA+PiBQeUxvbmdfU0hJRlQpOworICAgIH0KKyAgICByZXR1cm4gY2Fycnk7CiB9CiAKLS8qIE11bHRpcGx5IGJ5IGEgc2luZ2xlIGRpZ2l0IGFuZCBhZGQgYSBzaW5nbGUgZGlnaXQsIGlnbm9yaW5nIHRoZSBzaWduLiAqLwotCi1zdGF0aWMgUHlMb25nT2JqZWN0ICoKLW11bGFkZDEoUHlMb25nT2JqZWN0ICphLCB3ZGlnaXQgbiwgd2RpZ2l0IGV4dHJhKQorLyogU2hpZnQgZGlnaXQgdmVjdG9yIGFbMDptXSBkIGJpdHMgcmlnaHQsIHdpdGggMCA8PSBkIDwgUHlMb25nX1NISUZULiAgUHV0CisgKiByZXN1bHQgaW4gelswOm1dLCBhbmQgcmV0dXJuIHRoZSBkIGJpdHMgc2hpZnRlZCBvdXQgb2YgdGhlIGJvdHRvbS4KKyAqLworc3RhdGljIGRpZ2l0Cit2X3JzaGlmdChkaWdpdCAqeiwgZGlnaXQgKmEsIFB5X3NzaXplX3QgbSwgaW50IGQpCiB7Ci0gICAgUHlfc3NpemVfdCBzaXplX2EgPSBBQlMoUHlfU0laRShhKSk7Ci0gICAgUHlMb25nT2JqZWN0ICp6ID0gX1B5TG9uZ19OZXcoc2l6ZV9hKzEpOwotICAgIHR3b2RpZ2l0cyBjYXJyeSA9IGV4dHJhOwogICAgIFB5X3NzaXplX3QgaTsKKyAgICBkaWdpdCBjYXJyeSA9IDA7CisgICAgZGlnaXQgbWFzayA9ICgoZGlnaXQpMSA8PCBkKSAtIDFVOwogCi0gICAgaWYgKHogPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNpemVfYTsgKytpKSB7Ci0gICAgICAgIGNhcnJ5ICs9ICh0d29kaWdpdHMpYS0+b2JfZGlnaXRbaV0gKiBuOwotICAgICAgICB6LT5vYl9kaWdpdFtpXSA9IChkaWdpdCkgKGNhcnJ5ICYgUHlMb25nX01BU0spOwotICAgICAgICBjYXJyeSA+Pj0gUHlMb25nX1NISUZUOworICAgIGFzc2VydCgwIDw9IGQgJiYgZCA8IFB5TG9uZ19TSElGVCk7CisgICAgZm9yIChpPW07IGktLSA+IDA7KSB7CisgICAgICAgIHR3b2RpZ2l0cyBhY2MgPSAodHdvZGlnaXRzKWNhcnJ5IDw8IFB5TG9uZ19TSElGVCB8IGFbaV07CisgICAgICAgIGNhcnJ5ID0gKGRpZ2l0KWFjYyAmIG1hc2s7CisgICAgICAgIHpbaV0gPSAoZGlnaXQpKGFjYyA+PiBkKTsKICAgICB9Ci0gICAgei0+b2JfZGlnaXRbaV0gPSAoZGlnaXQpIGNhcnJ5OwotICAgIHJldHVybiBsb25nX25vcm1hbGl6ZSh6KTsKKyAgICByZXR1cm4gY2Fycnk7CiB9CiAKIC8qIERpdmlkZSBsb25nIHBpbiwgdy8gc2l6ZSBkaWdpdHMsIGJ5IG5vbi16ZXJvIGRpZ2l0IG4sIHN0b3JpbmcgcXVvdGllbnQKQEAgLTExNjYsNyArMTI4Niw3IEBACiAgICAgcG91dCArPSBzaXplOwogICAgIHdoaWxlICgtLXNpemUgPj0gMCkgewogICAgICAgICBkaWdpdCBoaTsKLSAgICAgICAgcmVtID0gKHJlbSA8PCBQeUxvbmdfU0hJRlQpICsgKi0tcGluOworICAgICAgICByZW0gPSAocmVtIDw8IFB5TG9uZ19TSElGVCkgfCAqLS1waW47CiAgICAgICAgICotLXBvdXQgPSBoaSA9IChkaWdpdCkocmVtIC8gbik7CiAgICAgICAgIHJlbSAtPSAodHdvZGlnaXRzKWhpICogbjsKICAgICB9CkBAIC0xMTkxLDYgKzEzMTEsMTIzIEBACiAgICAgcmV0dXJuIGxvbmdfbm9ybWFsaXplKHopOwogfQogCisvKiBDb252ZXJ0IGEgbG9uZyBpbnRlZ2VyIHRvIGEgYmFzZSAxMCBzdHJpbmcuICBSZXR1cm5zIGEgbmV3IG5vbi1zaGFyZWQKKyAgIHN0cmluZy4gIChSZXR1cm4gdmFsdWUgaXMgbm9uLXNoYXJlZCBzbyB0aGF0IGNhbGxlcnMgY2FuIG1vZGlmeSB0aGUKKyAgIHJldHVybmVkIHZhbHVlIGlmIG5lY2Vzc2FyeS4pICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitsb25nX3RvX2RlY2ltYWxfc3RyaW5nKFB5T2JqZWN0ICphYSwgaW50IGFkZEwpCit7CisgICAgUHlMb25nT2JqZWN0ICpzY3JhdGNoLCAqYTsKKyAgICBQeU9iamVjdCAqc3RyOworICAgIFB5X3NzaXplX3Qgc2l6ZSwgc3RybGVuLCBzaXplX2EsIGksIGo7CisgICAgZGlnaXQgKnBvdXQsICpwaW4sIHJlbSwgdGVucG93OworICAgIGNoYXIgKnA7CisgICAgaW50IG5lZ2F0aXZlOworCisgICAgYSA9IChQeUxvbmdPYmplY3QgKilhYTsKKyAgICBpZiAoYSA9PSBOVUxMIHx8ICFQeUxvbmdfQ2hlY2soYSkpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzaXplX2EgPSBBQlMoUHlfU0laRShhKSk7CisgICAgbmVnYXRpdmUgPSBQeV9TSVpFKGEpIDwgMDsKKworICAgIC8qIHF1aWNrIGFuZCBkaXJ0eSB1cHBlciBib3VuZCBmb3IgdGhlIG51bWJlciBvZiBkaWdpdHMKKyAgICAgICByZXF1aXJlZCB0byBleHByZXNzIGEgaW4gYmFzZSBfUHlMb25nX0RFQ0lNQUxfQkFTRToKKworICAgICAgICAgI2RpZ2l0cyA9IDEgKyBmbG9vcihsb2cyKGEpIC8gbG9nMihfUHlMb25nX0RFQ0lNQUxfQkFTRSkpCisKKyAgICAgICBCdXQgbG9nMihhKSA8IHNpemVfYSAqIFB5TG9uZ19TSElGVCwgYW5kCisgICAgICAgbG9nMihfUHlMb25nX0RFQ0lNQUxfQkFTRSkgPSBsb2cyKDEwKSAqIF9QeUxvbmdfREVDSU1BTF9TSElGVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gMyAqIF9QeUxvbmdfREVDSU1BTF9TSElGVAorICAgICovCisgICAgaWYgKHNpemVfYSA+IFBZX1NTSVpFX1RfTUFYIC8gUHlMb25nX1NISUZUKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcgaXMgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgLyogdGhlIGV4cHJlc3Npb24gc2l6ZV9hICogUHlMb25nX1NISUZUIGlzIG5vdyBzYWZlIGZyb20gb3ZlcmZsb3cgKi8KKyAgICBzaXplID0gMSArIHNpemVfYSAqIFB5TG9uZ19TSElGVCAvICgzICogX1B5TG9uZ19ERUNJTUFMX1NISUZUKTsKKyAgICBzY3JhdGNoID0gX1B5TG9uZ19OZXcoc2l6ZSk7CisgICAgaWYgKHNjcmF0Y2ggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBjb252ZXJ0IGFycmF5IG9mIGJhc2UgX1B5TG9uZ19CQVNFIGRpZ2l0cyBpbiBwaW4gdG8gYW4gYXJyYXkgb2YKKyAgICAgICBiYXNlIF9QeUxvbmdfREVDSU1BTF9CQVNFIGRpZ2l0cyBpbiBwb3V0LCBmb2xsb3dpbmcgS251dGggKFRBT0NQLAorICAgICAgIFZvbHVtZSAyICgzcmQgZWRuKSwgc2VjdGlvbiA0LjQsIE1ldGhvZCAxYikuICovCisgICAgcGluID0gYS0+b2JfZGlnaXQ7CisgICAgcG91dCA9IHNjcmF0Y2gtPm9iX2RpZ2l0OworICAgIHNpemUgPSAwOworICAgIGZvciAoaSA9IHNpemVfYTsgLS1pID49IDA7ICkgeworICAgICAgICBkaWdpdCBoaSA9IHBpbltpXTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgdHdvZGlnaXRzIHogPSAodHdvZGlnaXRzKXBvdXRbal0gPDwgUHlMb25nX1NISUZUIHwgaGk7CisgICAgICAgICAgICBoaSA9IChkaWdpdCkoeiAvIF9QeUxvbmdfREVDSU1BTF9CQVNFKTsKKyAgICAgICAgICAgIHBvdXRbal0gPSAoZGlnaXQpKHogLSAodHdvZGlnaXRzKWhpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUxvbmdfREVDSU1BTF9CQVNFKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaGkpIHsKKyAgICAgICAgICAgIHBvdXRbc2l6ZSsrXSA9IGhpICUgX1B5TG9uZ19ERUNJTUFMX0JBU0U7CisgICAgICAgICAgICBoaSAvPSBfUHlMb25nX0RFQ0lNQUxfQkFTRTsKKyAgICAgICAgfQorICAgICAgICAvKiBjaGVjayBmb3Iga2V5Ym9hcmQgaW50ZXJydXB0ICovCisgICAgICAgIFNJR0NIRUNLKHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgLyogcG91dCBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgZGlnaXQsIHNvIHRoYXQgdGhlIGNhc2Ugd2hlbiBhID0gMAorICAgICAgIHdvcmtzIGNvcnJlY3RseSAqLworICAgIGlmIChzaXplID09IDApCisgICAgICAgIHBvdXRbc2l6ZSsrXSA9IDA7CisKKyAgICAvKiBjYWxjdWxhdGUgZXhhY3QgbGVuZ3RoIG9mIG91dHB1dCBzdHJpbmcsIGFuZCBhbGxvY2F0ZSAqLworICAgIHN0cmxlbiA9IChhZGRMICE9IDApICsgbmVnYXRpdmUgKworICAgICAgICAxICsgKHNpemUgLSAxKSAqIF9QeUxvbmdfREVDSU1BTF9TSElGVDsKKyAgICB0ZW5wb3cgPSAxMDsKKyAgICByZW0gPSBwb3V0W3NpemUtMV07CisgICAgd2hpbGUgKHJlbSA+PSB0ZW5wb3cpIHsKKyAgICAgICAgdGVucG93ICo9IDEwOworICAgICAgICBzdHJsZW4rKzsKKyAgICB9CisgICAgc3RyID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc3RybGVuKTsKKyAgICBpZiAoc3RyID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHNjcmF0Y2gpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBmaWxsIHRoZSBzdHJpbmcgcmlnaHQtdG8tbGVmdCAqLworICAgIHAgPSBQeVN0cmluZ19BU19TVFJJTkcoc3RyKSArIHN0cmxlbjsKKyAgICAqcCA9ICdcMCc7CisgICAgaWYgKGFkZEwpCisgICAgICAgICotLXAgPSAnTCc7CisgICAgLyogcG91dFswXSB0aHJvdWdoIHBvdXRbc2l6ZS0yXSBjb250cmlidXRlIGV4YWN0bHkKKyAgICAgICBfUHlMb25nX0RFQ0lNQUxfU0hJRlQgZGlnaXRzIGVhY2ggKi8KKyAgICBmb3IgKGk9MDsgaSA8IHNpemUgLSAxOyBpKyspIHsKKyAgICAgICAgcmVtID0gcG91dFtpXTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IF9QeUxvbmdfREVDSU1BTF9TSElGVDsgaisrKSB7CisgICAgICAgICAgICAqLS1wID0gJzAnICsgcmVtICUgMTA7CisgICAgICAgICAgICByZW0gLz0gMTA7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogcG91dFtzaXplLTFdOiBhbHdheXMgcHJvZHVjZSBhdCBsZWFzdCBvbmUgZGVjaW1hbCBkaWdpdCAqLworICAgIHJlbSA9IHBvdXRbaV07CisgICAgZG8geworICAgICAgICAqLS1wID0gJzAnICsgcmVtICUgMTA7CisgICAgICAgIHJlbSAvPSAxMDsKKyAgICB9IHdoaWxlIChyZW0gIT0gMCk7CisKKyAgICAvKiBhbmQgc2lnbiAqLworICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgKi0tcCA9ICctJzsKKworICAgIC8qIGNoZWNrIHdlJ3ZlIGNvdW50ZWQgY29ycmVjdGx5ICovCisgICAgYXNzZXJ0KHAgPT0gUHlTdHJpbmdfQVNfU1RSSU5HKHN0cikpOworICAgIFB5X0RFQ1JFRihzY3JhdGNoKTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopc3RyOworfQorCiAvKiBDb252ZXJ0IHRoZSBsb25nIHRvIGEgc3RyaW5nIG9iamVjdCB3aXRoIGdpdmVuIGJhc2UsCiAgICBhcHBlbmRpbmcgYSBiYXNlIHByZWZpeCBvZiAwW2JveF0gaWYgYmFzZSBpcyAyLCA4IG9yIDE2LgogICAgQWRkIGEgdHJhaWxpbmcgIkwiIGlmIGFkZEwgaXMgbm9uLXplcm8uCkBAIC0xMjA3LDYgKzE0NDQsOSBAQAogICAgIGludCBiaXRzOwogICAgIGNoYXIgc2lnbiA9ICdcMCc7CiAKKyAgICBpZiAoYmFzZSA9PSAxMCkKKyAgICAgICAgcmV0dXJuIGxvbmdfdG9fZGVjaW1hbF9zdHJpbmcoKFB5T2JqZWN0ICopYSwgYWRkTCk7CisKICAgICBpZiAoYSA9PSBOVUxMIHx8ICFQeUxvbmdfQ2hlY2soYSkpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTI2Myw4ICsxNTAzLDcgQEAKICAgICAgICAgICAgICAgICAqLS1wID0gY2RpZ2l0OwogICAgICAgICAgICAgICAgIGFjY3VtYml0cyAtPSBiYXNlYml0czsKICAgICAgICAgICAgICAgICBhY2N1bSA+Pj0gYmFzZWJpdHM7Ci0gICAgICAgICAgICB9IHdoaWxlIChpIDwgc2l6ZV9hLTEgPyBhY2N1bWJpdHMgPj0gYmFzZWJpdHMgOgotICAgICAgICAgICAgICAgICAgICAgICAgYWNjdW0gPiAwKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGkgPCBzaXplX2EtMSA/IGFjY3VtYml0cyA+PSBiYXNlYml0cyA6IGFjY3VtID4gMCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CkBAIC0xMjc4LDcgKzE1MTcsNyBAQAogICAgICAgICBkaWdpdCBwb3diYXNlID0gYmFzZTsgIC8qIHBvd2Jhc2UgPT0gYmFzZSAqKiBwb3dlciAqLwogICAgICAgICBpbnQgcG93ZXIgPSAxOwogICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5ld3BvdyA9IHBvd2Jhc2UgKiAodW5zaWduZWQgbG9uZyliYXNlOworICAgICAgICAgICAgdHdvZGlnaXRzIG5ld3BvdyA9IHBvd2Jhc2UgKiAodHdvZGlnaXRzKWJhc2U7CiAgICAgICAgICAgICBpZiAobmV3cG93ID4+IFB5TG9uZ19TSElGVCkKICAgICAgICAgICAgICAgICAvKiBkb2Vzbid0IGZpdCBpbiBhIGRpZ2l0ICovCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjk3LDE1ICsxNTM2LDE1IEBACiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGludCBudG9zdG9yZSA9IHBvd2VyOwogICAgICAgICAgICAgZGlnaXQgcmVtID0gaW5wbGFjZV9kaXZyZW0xKHNjcmF0Y2gtPm9iX2RpZ2l0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW4sIHNpemUsIHBvd2Jhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbiwgc2l6ZSwgcG93YmFzZSk7CiAgICAgICAgICAgICBwaW4gPSBzY3JhdGNoLT5vYl9kaWdpdDsgLyogbm8gbmVlZCB0byB1c2UgYSBhZ2FpbiAqLwogICAgICAgICAgICAgaWYgKHBpbltzaXplIC0gMV0gPT0gMCkKICAgICAgICAgICAgICAgICAtLXNpemU7CiAgICAgICAgICAgICBTSUdDSEVDSyh7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNjcmF0Y2gpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIC8qIEJyZWFrIHJlbSBpbnRvIGRpZ2l0cy4gKi8KICAgICAgICAgICAgIGFzc2VydChudG9zdG9yZSA+IDApOwpAQCAtMTUxOSwxNCArMTc1OCwxNSBAQAogICAgIFB5TG9uZ19CQVNFKipuID49IEIqKk4gICAgICBbdGFraW5nIGxvZ3MgdG8gYmFzZSBQeUxvbmdfQkFTRV0KICAgICBuID49IGxvZyhCKipOKS9sb2coUHlMb25nX0JBU0UpID0gTiAqIGxvZyhCKS9sb2coUHlMb25nX0JBU0UpCiAKLVRoZSBzdGF0aWMgYXJyYXkgbG9nX2Jhc2VfUHlMb25nX0JBU0VbYmFzZV0gPT0gbG9nKGJhc2UpL2xvZyhQeUxvbmdfQkFTRSkgc28gd2UgY2FuIGNvbXB1dGUKLXRoaXMgcXVpY2tseS4gIEEgUHl0aG9uIGxvbmcgd2l0aCB0aGF0IG11Y2ggc3BhY2UgaXMgcmVzZXJ2ZWQgbmVhciB0aGUgc3RhcnQsCi1hbmQgdGhlIHJlc3VsdCBpcyBjb21wdXRlZCBpbnRvIGl0LgorVGhlIHN0YXRpYyBhcnJheSBsb2dfYmFzZV9QeUxvbmdfQkFTRVtiYXNlXSA9PSBsb2coYmFzZSkvbG9nKFB5TG9uZ19CQVNFKSBzbword2UgY2FuIGNvbXB1dGUgdGhpcyBxdWlja2x5LiAgQSBQeXRob24gbG9uZyB3aXRoIHRoYXQgbXVjaCBzcGFjZSBpcyByZXNlcnZlZAorbmVhciB0aGUgc3RhcnQsIGFuZCB0aGUgcmVzdWx0IGlzIGNvbXB1dGVkIGludG8gaXQuCiAKIFRoZSBpbnB1dCBzdHJpbmcgaXMgYWN0dWFsbHkgdHJlYXRlZCBhcyBiZWluZyBpbiBiYXNlIGJhc2UqKmkgKGkuZS4sIGkgZGlnaXRzCiBhcmUgcHJvY2Vzc2VkIGF0IGEgdGltZSksIHdoZXJlIHR3byBtb3JlIHN0YXRpYyBhcnJheXMgaG9sZDoKIAotICAgIGNvbnZ3aWR0aF9iYXNlW2Jhc2VdID0gdGhlIGxhcmdlc3QgaW50ZWdlciBpIHN1Y2ggdGhhdCBiYXNlKippIDw9IFB5TG9uZ19CQVNFCisgICAgY29udndpZHRoX2Jhc2VbYmFzZV0gPSB0aGUgbGFyZ2VzdCBpbnRlZ2VyIGkgc3VjaCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlKippIDw9IFB5TG9uZ19CQVNFCiAgICAgY29udm11bHRtYXhfYmFzZVtiYXNlXSA9IGJhc2UgKiogY29udndpZHRoX2Jhc2VbYmFzZV0KIAogVGhlIGZpcnN0IG9mIHRoZXNlIGlzIHRoZSBsYXJnZXN0IGkgc3VjaCB0aGF0IGkgY29uc2VjdXRpdmUgaW5wdXQgZGlnaXRzCkBAIC0xNTUwLDMzICsxNzkwLDM0IEBACiAgICAgc2l6ZV96ID0gKFB5X3NzaXplX3QpKChzY2FuIC0gc3RyKSAqIGxvZ19iYXNlX1B5TG9uZ19CQVNFW2Jhc2VdKSArIDE7CiAKIGJlbG93LiAgVHdvIG51bWVyaWMgY29uY2VybnMgYXJlIGhvdyBtdWNoIHNwYWNlIHRoaXMgY2FuIHdhc3RlLCBhbmQgd2hldGhlcgotdGhlIGNvbXB1dGVkIHJlc3VsdCBjYW4gYmUgdG9vIHNtYWxsLiAgVG8gYmUgY29uY3JldGUsIGFzc3VtZSBQeUxvbmdfQkFTRSA9IDIqKjE1LAotd2hpY2ggaXMgdGhlIGRlZmF1bHQgKGFuZCBpdCdzIHVubGlrZWx5IGFueW9uZSBjaGFuZ2VzIHRoYXQpLgordGhlIGNvbXB1dGVkIHJlc3VsdCBjYW4gYmUgdG9vIHNtYWxsLiAgVG8gYmUgY29uY3JldGUsIGFzc3VtZSBQeUxvbmdfQkFTRSA9CisyKioxNSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgKGFuZCBpdCdzIHVubGlrZWx5IGFueW9uZSBjaGFuZ2VzIHRoYXQpLgogCi1XYXN0ZSBpc24ndCBhIHByb2JsZW06ICBwcm92aWRlZCB0aGUgZmlyc3QgaW5wdXQgZGlnaXQgaXNuJ3QgMCwgdGhlIGRpZmZlcmVuY2UKK1dhc3RlIGlzbid0IGEgcHJvYmxlbTogcHJvdmlkZWQgdGhlIGZpcnN0IGlucHV0IGRpZ2l0IGlzbid0IDAsIHRoZSBkaWZmZXJlbmNlCiBiZXR3ZWVuIHRoZSB3b3JzdC1jYXNlIGlucHV0IHdpdGggTiBkaWdpdHMgYW5kIHRoZSBzbWFsbGVzdCBpbnB1dCB3aXRoIE4KLWRpZ2l0cyBpcyBhYm91dCBhIGZhY3RvciBvZiBCLCBidXQgQiBpcyBzbWFsbCBjb21wYXJlZCB0byBQeUxvbmdfQkFTRSBzbyBhdCBtb3N0Ci1vbmUgYWxsb2NhdGVkIFB5dGhvbiBkaWdpdCBjYW4gcmVtYWluIHVudXNlZCBvbiB0aGF0IGNvdW50LiAgSWYKLU4qbG9nKEIpL2xvZyhQeUxvbmdfQkFTRSkgaXMgbWF0aGVtYXRpY2FsbHkgYW4gZXhhY3QgaW50ZWdlciwgdGhlbiB0cnVuY2F0aW5nIHRoYXQKLWFuZCBhZGRpbmcgMSByZXR1cm5zIGEgcmVzdWx0IDEgbGFyZ2VyIHRoYW4gbmVjZXNzYXJ5LiAgSG93ZXZlciwgdGhhdCBjYW4ndAotaGFwcGVuOiAgd2hlbmV2ZXIgQiBpcyBhIHBvd2VyIG9mIDIsIGxvbmdfZnJvbV9iaW5hcnlfYmFzZSgpIGlzIGNhbGxlZAotaW5zdGVhZCwgYW5kIGl0J3MgaW1wb3NzaWJsZSBmb3IgQioqaSB0byBiZSBhbiBpbnRlZ2VyIHBvd2VyIG9mIDIqKjE1IHdoZW4KLUIgaXMgbm90IGEgcG93ZXIgb2YgMiAoaS5lLiwgaXQncyBpbXBvc3NpYmxlIGZvciBOKmxvZyhCKS9sb2coUHlMb25nX0JBU0UpIHRvIGJlCitkaWdpdHMgaXMgYWJvdXQgYSBmYWN0b3Igb2YgQiwgYnV0IEIgaXMgc21hbGwgY29tcGFyZWQgdG8gUHlMb25nX0JBU0Ugc28gYXQKK21vc3Qgb25lIGFsbG9jYXRlZCBQeXRob24gZGlnaXQgY2FuIHJlbWFpbiB1bnVzZWQgb24gdGhhdCBjb3VudC4gIElmCitOKmxvZyhCKS9sb2coUHlMb25nX0JBU0UpIGlzIG1hdGhlbWF0aWNhbGx5IGFuIGV4YWN0IGludGVnZXIsIHRoZW4gdHJ1bmNhdGluZwordGhhdCBhbmQgYWRkaW5nIDEgcmV0dXJucyBhIHJlc3VsdCAxIGxhcmdlciB0aGFuIG5lY2Vzc2FyeS4gIEhvd2V2ZXIsIHRoYXQKK2Nhbid0IGhhcHBlbjogd2hlbmV2ZXIgQiBpcyBhIHBvd2VyIG9mIDIsIGxvbmdfZnJvbV9iaW5hcnlfYmFzZSgpIGlzIGNhbGxlZAoraW5zdGVhZCwgYW5kIGl0J3MgaW1wb3NzaWJsZSBmb3IgQioqaSB0byBiZSBhbiBpbnRlZ2VyIHBvd2VyIG9mIDIqKjE1IHdoZW4gQgoraXMgbm90IGEgcG93ZXIgb2YgMiAoaS5lLiwgaXQncyBpbXBvc3NpYmxlIGZvciBOKmxvZyhCKS9sb2coUHlMb25nX0JBU0UpIHRvIGJlCiBhbiBleGFjdCBpbnRlZ2VyIHdoZW4gQiBpcyBub3QgYSBwb3dlciBvZiAyLCBzaW5jZSBCKippIGhhcyBhIHByaW1lIGZhY3Rvcgogb3RoZXIgdGhhbiAyIGluIHRoYXQgY2FzZSwgYnV0ICgyKioxNSkqKmoncyBvbmx5IHByaW1lIGZhY3RvciBpcyAyKS4KIAotVGhlIGNvbXB1dGVkIHJlc3VsdCBjYW4gYmUgdG9vIHNtYWxsIGlmIHRoZSB0cnVlIHZhbHVlIG9mIE4qbG9nKEIpL2xvZyhQeUxvbmdfQkFTRSkKLWlzIGEgbGl0dGxlIGJpdCBsYXJnZXIgdGhhbiBhbiBleGFjdCBpbnRlZ2VyLCBidXQgZHVlIHRvIHJvdW5kb2ZmIGVycm9ycyAoaW4KLWNvbXB1dGluZyBsb2coQiksIGxvZyhQeUxvbmdfQkFTRSksIHRoZWlyIHF1b3RpZW50LCBhbmQvb3IgbXVsdGlwbHlpbmcgdGhhdCBieSBOKQoteWllbGRzIGEgbnVtZXJpYyByZXN1bHQgYSBsaXR0bGUgbGVzcyB0aGFuIHRoYXQgaW50ZWdlci4gIFVuZm9ydHVuYXRlbHksICJob3cKLWNsb3NlIGNhbiBhIHRyYW5zY2VuZGVudGFsIGZ1bmN0aW9uIGdldCB0byBhbiBpbnRlZ2VyIG92ZXIgc29tZSByYW5nZT8iCi1xdWVzdGlvbnMgYXJlIGdlbmVyYWxseSB0aGVvcmV0aWNhbGx5IGludHJhY3RhYmxlLiAgQ29tcHV0ZXIgYW5hbHlzaXMgdmlhCi1jb250aW51ZWQgZnJhY3Rpb25zIGlzIHByYWN0aWNhbDogIGV4cGFuZCBsb2coQikvbG9nKFB5TG9uZ19CQVNFKSB2aWEgY29udGludWVkCi1mcmFjdGlvbnMsIGdpdmluZyBhIHNlcXVlbmNlIGkvaiBvZiAidGhlIGJlc3QiIHJhdGlvbmFsIGFwcHJveGltYXRpb25zLiAgVGhlbgotaipsb2coQikvbG9nKFB5TG9uZ19CQVNFKSBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvICh0aGUgaW50ZWdlcikgaS4gIFRoaXMgc2hvd3MgdGhhdAotd2UgY2FuIGdldCB2ZXJ5IGNsb3NlIHRvIGJlaW5nIGluIHRyb3VibGUsIGJ1dCB2ZXJ5IHJhcmVseS4gIEZvciBleGFtcGxlLAotNzY1NzMgaXMgYSBkZW5vbWluYXRvciBpbiBvbmUgb2YgdGhlIGNvbnRpbnVlZC1mcmFjdGlvbiBhcHByb3hpbWF0aW9ucyB0bwotbG9nKDEwKS9sb2coMioqMTUpLCBhbmQgaW5kZWVkOgorVGhlIGNvbXB1dGVkIHJlc3VsdCBjYW4gYmUgdG9vIHNtYWxsIGlmIHRoZSB0cnVlIHZhbHVlIG9mCitOKmxvZyhCKS9sb2coUHlMb25nX0JBU0UpIGlzIGEgbGl0dGxlIGJpdCBsYXJnZXIgdGhhbiBhbiBleGFjdCBpbnRlZ2VyLCBidXQKK2R1ZSB0byByb3VuZG9mZiBlcnJvcnMgKGluIGNvbXB1dGluZyBsb2coQiksIGxvZyhQeUxvbmdfQkFTRSksIHRoZWlyIHF1b3RpZW50LAorYW5kL29yIG11bHRpcGx5aW5nIHRoYXQgYnkgTikgeWllbGRzIGEgbnVtZXJpYyByZXN1bHQgYSBsaXR0bGUgbGVzcyB0aGFuIHRoYXQKK2ludGVnZXIuICBVbmZvcnR1bmF0ZWx5LCAiaG93IGNsb3NlIGNhbiBhIHRyYW5zY2VuZGVudGFsIGZ1bmN0aW9uIGdldCB0byBhbgoraW50ZWdlciBvdmVyIHNvbWUgcmFuZ2U/IiAgcXVlc3Rpb25zIGFyZSBnZW5lcmFsbHkgdGhlb3JldGljYWxseSBpbnRyYWN0YWJsZS4KK0NvbXB1dGVyIGFuYWx5c2lzIHZpYSBjb250aW51ZWQgZnJhY3Rpb25zIGlzIHByYWN0aWNhbDogZXhwYW5kCitsb2coQikvbG9nKFB5TG9uZ19CQVNFKSB2aWEgY29udGludWVkIGZyYWN0aW9ucywgZ2l2aW5nIGEgc2VxdWVuY2UgaS9qIG9mICJ0aGUKK2Jlc3QiIHJhdGlvbmFsIGFwcHJveGltYXRpb25zLiAgVGhlbiBqKmxvZyhCKS9sb2coUHlMb25nX0JBU0UpIGlzCithcHByb3hpbWF0ZWx5IGVxdWFsIHRvICh0aGUgaW50ZWdlcikgaS4gIFRoaXMgc2hvd3MgdGhhdCB3ZSBjYW4gZ2V0IHZlcnkgY2xvc2UKK3RvIGJlaW5nIGluIHRyb3VibGUsIGJ1dCB2ZXJ5IHJhcmVseS4gIEZvciBleGFtcGxlLCA3NjU3MyBpcyBhIGRlbm9taW5hdG9yIGluCitvbmUgb2YgdGhlIGNvbnRpbnVlZC1mcmFjdGlvbiBhcHByb3hpbWF0aW9ucyB0byBsb2coMTApL2xvZygyKioxNSksIGFuZAoraW5kZWVkOgogCiAgICAgPj4+IGxvZygxMCkvbG9nKDIqKjE1KSo3NjU3MwogICAgIDE2OTU4LjAwMDAwMDY1NDAwMwpAQCAtMTYwNyw4ICsxODQ4LDggQEAKICAgICAgICAgICAgIHR3b2RpZ2l0cyBjb252bWF4ID0gYmFzZTsKICAgICAgICAgICAgIGludCBpID0gMTsKIAotICAgICAgICAgICAgbG9nX2Jhc2VfUHlMb25nX0JBU0VbYmFzZV0gPSBsb2coKGRvdWJsZSliYXNlKSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coKGRvdWJsZSlQeUxvbmdfQkFTRSk7CisgICAgICAgICAgICBsb2dfYmFzZV9QeUxvbmdfQkFTRVtiYXNlXSA9IChsb2coKGRvdWJsZSliYXNlKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coKGRvdWJsZSlQeUxvbmdfQkFTRSkpOwogICAgICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgICAgIHR3b2RpZ2l0cyBuZXh0ID0gY29udm1heCAqIGJhc2U7CiAgICAgICAgICAgICAgICAgaWYgKG5leHQgPiBQeUxvbmdfQkFTRSkKQEAgLTE2NTIsNyArMTg5Myw3IEBACiAgICAgICAgICAgICBjID0gKGRpZ2l0KV9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSygqc3RyKyspXTsKICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBjb252d2lkdGggJiYgc3RyICE9IHNjYW47ICsraSwgKytzdHIpIHsKICAgICAgICAgICAgICAgICBjID0gKHR3b2RpZ2l0cykoYyAqICBiYXNlICsKLSAgICAgICAgICAgICAgICAgICAgX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKCpzdHIpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSygqc3RyKV0pOwogICAgICAgICAgICAgICAgIGFzc2VydChjIDwgUHlMb25nX0JBU0UpOwogICAgICAgICAgICAgfQogCkBAIC0xNzE3LDcgKzE5NTgsNyBAQAogICAgICAgICAqcGVuZCA9IHN0cjsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHo7CiAKLSBvbkVycm9yOgorICBvbkVycm9yOgogICAgIFB5X1hERUNSRUYoeik7CiAgICAgc2xlbiA9IHN0cmxlbihvcmlnX3N0cikgPCAyMDAgPyBzdHJsZW4ob3JpZ19zdHIpIDogMjAwOwogICAgIHN0cm9iaiA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKG9yaWdfc3RyLCBzbGVuKTsKQEAgLTE3NTgsOCArMTk5OSw2IEBACiBzdGF0aWMgUHlMb25nT2JqZWN0ICp4X2RpdnJlbQogICAgIChQeUxvbmdPYmplY3QgKiwgUHlMb25nT2JqZWN0ICosIFB5TG9uZ09iamVjdCAqKik7CiBzdGF0aWMgUHlPYmplY3QgKmxvbmdfbG9uZyhQeU9iamVjdCAqdik7Ci1zdGF0aWMgaW50IGxvbmdfZGl2cmVtKFB5TG9uZ09iamVjdCAqLCBQeUxvbmdPYmplY3QgKiwKLSAgICBQeUxvbmdPYmplY3QgKiosIFB5TG9uZ09iamVjdCAqKik7CiAKIC8qIExvbmcgZGl2aXNpb24gd2l0aCByZW1haW5kZXIsIHRvcC1sZXZlbCByb3V0aW5lICovCiAKQEAgLTE4MTQsMTA0ICsyMDUzLDI3OCBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiBVbnNpZ25lZCBsb25nIGRpdmlzaW9uIHdpdGggcmVtYWluZGVyIC0tIHRoZSBhbGdvcml0aG0gKi8KKy8qIFVuc2lnbmVkIGxvbmcgZGl2aXNpb24gd2l0aCByZW1haW5kZXIgLS0gdGhlIGFsZ29yaXRobS4gIFRoZSBhcmd1bWVudHMgdjEKKyAgIGFuZCB3MSBzaG91bGQgc2F0aXNmeSAyIDw9IEFCUyhQeV9TSVpFKHcxKSkgPD0gQUJTKFB5X1NJWkUodjEpKS4gKi8KIAogc3RhdGljIFB5TG9uZ09iamVjdCAqCiB4X2RpdnJlbShQeUxvbmdPYmplY3QgKnYxLCBQeUxvbmdPYmplY3QgKncxLCBQeUxvbmdPYmplY3QgKipwcmVtKQogewotICAgIFB5X3NzaXplX3Qgc2l6ZV92ID0gQUJTKFB5X1NJWkUodjEpKSwgc2l6ZV93ID0gQUJTKFB5X1NJWkUodzEpKTsKLSAgICBkaWdpdCBkID0gKGRpZ2l0KSAoKHR3b2RpZ2l0cylQeUxvbmdfQkFTRSAvICh3MS0+b2JfZGlnaXRbc2l6ZV93LTFdICsgMSkpOwotICAgIFB5TG9uZ09iamVjdCAqdiA9IG11bDEodjEsIGQpOwotICAgIFB5TG9uZ09iamVjdCAqdyA9IG11bDEodzEsIGQpOwotICAgIFB5TG9uZ09iamVjdCAqYTsKLSAgICBQeV9zc2l6ZV90IGosIGs7CisgICAgUHlMb25nT2JqZWN0ICp2LCAqdywgKmE7CisgICAgUHlfc3NpemVfdCBpLCBrLCBzaXplX3YsIHNpemVfdzsKKyAgICBpbnQgZDsKKyAgICBkaWdpdCB3bTEsIHdtMiwgY2FycnksIHEsIHIsIHZ0b3AsICp2MCwgKnZrLCAqdzAsICphazsKKyAgICB0d29kaWdpdHMgdnY7CisgICAgc2RpZ2l0IHpoaTsKKyAgICBzdHdvZGlnaXRzIHo7CiAKLSAgICBpZiAodiA9PSBOVUxMIHx8IHcgPT0gTlVMTCkgewotICAgICAgICBQeV9YREVDUkVGKHYpOwotICAgICAgICBQeV9YREVDUkVGKHcpOworICAgIC8qIFdlIGZvbGxvdyBLbnV0aCBbVGhlIEFydCBvZiBDb21wdXRlciBQcm9ncmFtbWluZywgVm9sLiAyICgzcmQKKyAgICAgICBlZG4uKSwgc2VjdGlvbiA0LjMuMSwgQWxnb3JpdGhtIERdLCBleGNlcHQgdGhhdCB3ZSBkb24ndCBleHBsaWNpdGx5CisgICAgICAgaGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugd2hlbiB0aGUgaW5pdGlhbCBlc3RpbWF0ZSBxIGZvciBhIHF1b3RpZW50CisgICAgICAgZGlnaXQgaXMgPj0gUHlMb25nX0JBU0U6IHRoZSBtYXggdmFsdWUgZm9yIHEgaXMgUHlMb25nX0JBU0UrMSwgYW5kCisgICAgICAgdGhhdCB3b24ndCBvdmVyZmxvdyBhIGRpZ2l0LiAqLworCisgICAgLyogYWxsb2NhdGUgc3BhY2U7IHcgd2lsbCBhbHNvIGJlIHVzZWQgdG8gaG9sZCB0aGUgZmluYWwgcmVtYWluZGVyICovCisgICAgc2l6ZV92ID0gQUJTKFB5X1NJWkUodjEpKTsKKyAgICBzaXplX3cgPSBBQlMoUHlfU0laRSh3MSkpOworICAgIGFzc2VydChzaXplX3YgPj0gc2l6ZV93ICYmIHNpemVfdyA+PSAyKTsgLyogQXNzZXJ0IGNoZWNrcyBieSBkaXYoKSAqLworICAgIHYgPSBfUHlMb25nX05ldyhzaXplX3YrMSk7CisgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAqcHJlbSA9IE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB3ID0gX1B5TG9uZ19OZXcoc2l6ZV93KTsKKyAgICBpZiAodyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgKnByZW0gPSBOVUxMOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBhc3NlcnQoc2l6ZV92ID49IHNpemVfdyAmJiBzaXplX3cgPiAxKTsgLyogQXNzZXJ0IGNoZWNrcyBieSBkaXYoKSAqLwotICAgIGFzc2VydChQeV9SRUZDTlQodikgPT0gMSk7IC8qIFNpbmNlIHYgd2lsbCBiZSB1c2VkIGFzIGFjY3VtdWxhdG9yISAqLwotICAgIGFzc2VydChzaXplX3cgPT0gQUJTKFB5X1NJWkUodykpKTsgLyogVGhhdCdzIGhvdyBkIHdhcyBjYWxjdWxhdGVkICovCisgICAgLyogbm9ybWFsaXplOiBzaGlmdCB3MSBsZWZ0IHNvIHRoYXQgaXRzIHRvcCBkaWdpdCBpcyA+PSBQeUxvbmdfQkFTRS8yLgorICAgICAgIHNoaWZ0IHYxIGxlZnQgYnkgdGhlIHNhbWUgYW1vdW50LiAgUmVzdWx0cyBnbyBpbnRvIHcgYW5kIHYuICovCisgICAgZCA9IFB5TG9uZ19TSElGVCAtIGJpdHNfaW5fZGlnaXQodzEtPm9iX2RpZ2l0W3NpemVfdy0xXSk7CisgICAgY2FycnkgPSB2X2xzaGlmdCh3LT5vYl9kaWdpdCwgdzEtPm9iX2RpZ2l0LCBzaXplX3csIGQpOworICAgIGFzc2VydChjYXJyeSA9PSAwKTsKKyAgICBjYXJyeSA9IHZfbHNoaWZ0KHYtPm9iX2RpZ2l0LCB2MS0+b2JfZGlnaXQsIHNpemVfdiwgZCk7CisgICAgaWYgKGNhcnJ5ICE9IDAgfHwgdi0+b2JfZGlnaXRbc2l6ZV92LTFdID49IHctPm9iX2RpZ2l0W3NpemVfdy0xXSkgeworICAgICAgICB2LT5vYl9kaWdpdFtzaXplX3ZdID0gY2Fycnk7CisgICAgICAgIHNpemVfdisrOworICAgIH0KIAotICAgIHNpemVfdiA9IEFCUyhQeV9TSVpFKHYpKTsKKyAgICAvKiBOb3cgdi0+b2JfZGlnaXRbc2l6ZV92LTFdIDwgdy0+b2JfZGlnaXRbc2l6ZV93LTFdLCBzbyBxdW90aWVudCBoYXMKKyAgICAgICBhdCBtb3N0IChhbmQgdXN1YWxseSBleGFjdGx5KSBrID0gc2l6ZV92IC0gc2l6ZV93IGRpZ2l0cy4gKi8KICAgICBrID0gc2l6ZV92IC0gc2l6ZV93OwotICAgIGEgPSBfUHlMb25nX05ldyhrICsgMSk7Ci0KLSAgICBmb3IgKGogPSBzaXplX3Y7IGEgIT0gTlVMTCAmJiBrID49IDA7IC0taiwgLS1rKSB7Ci0gICAgICAgIGRpZ2l0IHZqID0gKGogPj0gc2l6ZV92KSA/IDAgOiB2LT5vYl9kaWdpdFtqXTsKLSAgICAgICAgdHdvZGlnaXRzIHE7Ci0gICAgICAgIHN0d29kaWdpdHMgY2FycnkgPSAwOwotICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgYXNzZXJ0KGsgPj0gMCk7CisgICAgYSA9IF9QeUxvbmdfTmV3KGspOworICAgIGlmIChhID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICpwcmVtID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHYwID0gdi0+b2JfZGlnaXQ7CisgICAgdzAgPSB3LT5vYl9kaWdpdDsKKyAgICB3bTEgPSB3MFtzaXplX3ctMV07CisgICAgd20yID0gdzBbc2l6ZV93LTJdOworICAgIGZvciAodmsgPSB2MCtrLCBhayA9IGEtPm9iX2RpZ2l0ICsgazsgdmstLSA+IHYwOykgeworICAgICAgICAvKiBpbm5lciBsb29wOiBkaXZpZGUgdmtbMDpzaXplX3crMV0gYnkgdzBbMDpzaXplX3ddLCBnaXZpbmcKKyAgICAgICAgICAgc2luZ2xlLWRpZ2l0IHF1b3RpZW50IHEsIHJlbWFpbmRlciBpbiB2a1swOnNpemVfd10uICovCiAKICAgICAgICAgU0lHQ0hFQ0soewotICAgICAgICAgICAgUHlfREVDUkVGKGEpOwotICAgICAgICAgICAgYSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSkKLSAgICAgICAgaWYgKHZqID09IHctPm9iX2RpZ2l0W3NpemVfdy0xXSkKLSAgICAgICAgICAgIHEgPSBQeUxvbmdfTUFTSzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcSA9ICgoKHR3b2RpZ2l0cyl2aiA8PCBQeUxvbmdfU0hJRlQpICsgdi0+b2JfZGlnaXRbai0xXSkgLwotICAgICAgICAgICAgICAgIHctPm9iX2RpZ2l0W3NpemVfdy0xXTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgICAgICAqcHJlbSA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9KTsKIAotICAgICAgICB3aGlsZSAody0+b2JfZGlnaXRbc2l6ZV93LTJdKnEgPgotICAgICAgICAgICAgICAgICAgICAgICAgKCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh0d29kaWdpdHMpdmogPDwgUHlMb25nX1NISUZUKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHYtPm9iX2RpZ2l0W2otMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBxKnctPm9iX2RpZ2l0W3NpemVfdy0xXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDw8IFB5TG9uZ19TSElGVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgdi0+b2JfZGlnaXRbai0yXSkKKyAgICAgICAgLyogZXN0aW1hdGUgcXVvdGllbnQgZGlnaXQgcTsgbWF5IG92ZXJlc3RpbWF0ZSBieSAxIChyYXJlKSAqLworICAgICAgICB2dG9wID0gdmtbc2l6ZV93XTsKKyAgICAgICAgYXNzZXJ0KHZ0b3AgPD0gd20xKTsKKyAgICAgICAgdnYgPSAoKHR3b2RpZ2l0cyl2dG9wIDw8IFB5TG9uZ19TSElGVCkgfCB2a1tzaXplX3ctMV07CisgICAgICAgIHEgPSAoZGlnaXQpKHZ2IC8gd20xKTsKKyAgICAgICAgciA9IChkaWdpdCkodnYgLSAodHdvZGlnaXRzKXdtMSAqIHEpOyAvKiByID0gdnYgJSB3bTEgKi8KKyAgICAgICAgd2hpbGUgKCh0d29kaWdpdHMpd20yICogcSA+ICgoKHR3b2RpZ2l0cylyIDw8IFB5TG9uZ19TSElGVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHZrW3NpemVfdy0yXSkpIHsKICAgICAgICAgICAgIC0tcTsKKyAgICAgICAgICAgIHIgKz0gd20xOworICAgICAgICAgICAgaWYgKHIgPj0gUHlMb25nX0JBU0UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHEgPD0gUHlMb25nX0JBU0UpOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplX3cgJiYgaStrIDwgc2l6ZV92OyArK2kpIHsKLSAgICAgICAgICAgIHR3b2RpZ2l0cyB6ID0gdy0+b2JfZGlnaXRbaV0gKiBxOwotICAgICAgICAgICAgZGlnaXQgenogPSAoZGlnaXQpICh6ID4+IFB5TG9uZ19TSElGVCk7Ci0gICAgICAgICAgICBjYXJyeSArPSB2LT5vYl9kaWdpdFtpK2tdIC0gegotICAgICAgICAgICAgICAgICsgKCh0d29kaWdpdHMpenogPDwgUHlMb25nX1NISUZUKTsKLSAgICAgICAgICAgIHYtPm9iX2RpZ2l0W2kra10gPSAoZGlnaXQpKGNhcnJ5ICYgUHlMb25nX01BU0spOwotICAgICAgICAgICAgY2FycnkgPSBQeV9BUklUSE1FVElDX1JJR0hUX1NISUZUKEJBU0VfVFdPRElHSVRTX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FycnksIFB5TG9uZ19TSElGVCk7Ci0gICAgICAgICAgICBjYXJyeSAtPSB6ejsKKyAgICAgICAgLyogc3VidHJhY3QgcSp3MFswOnNpemVfd10gZnJvbSB2a1swOnNpemVfdysxXSAqLworICAgICAgICB6aGkgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZV93OyArK2kpIHsKKyAgICAgICAgICAgIC8qIGludmFyaWFudHM6IC1QeUxvbmdfQkFTRSA8PSAtcSA8PSB6aGkgPD0gMDsKKyAgICAgICAgICAgICAgIC1QeUxvbmdfQkFTRSAqIHEgPD0geiA8IFB5TG9uZ19CQVNFICovCisgICAgICAgICAgICB6ID0gKHNkaWdpdCl2a1tpXSArIHpoaSAtCisgICAgICAgICAgICAgICAgKHN0d29kaWdpdHMpcSAqIChzdHdvZGlnaXRzKXcwW2ldOworICAgICAgICAgICAgdmtbaV0gPSAoZGlnaXQpeiAmIFB5TG9uZ19NQVNLOworICAgICAgICAgICAgemhpID0gKHNkaWdpdClQeV9BUklUSE1FVElDX1JJR0hUX1NISUZUKHN0d29kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiwgUHlMb25nX1NISUZUKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpK2sgPCBzaXplX3YpIHsKLSAgICAgICAgICAgIGNhcnJ5ICs9IHYtPm9iX2RpZ2l0W2kra107Ci0gICAgICAgICAgICB2LT5vYl9kaWdpdFtpK2tdID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjYXJyeSA9PSAwKQotICAgICAgICAgICAgYS0+b2JfZGlnaXRba10gPSAoZGlnaXQpIHE7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXNzZXJ0KGNhcnJ5ID09IC0xKTsKLSAgICAgICAgICAgIGEtPm9iX2RpZ2l0W2tdID0gKGRpZ2l0KSBxLTE7CisgICAgICAgIC8qIGFkZCB3IGJhY2sgaWYgcSB3YXMgdG9vIGxhcmdlICh0aGlzIGJyYW5jaCB0YWtlbiByYXJlbHkpICovCisgICAgICAgIGFzc2VydCgoc2RpZ2l0KXZ0b3AgKyB6aGkgPT0gLTEgfHwgKHNkaWdpdCl2dG9wICsgemhpID09IDApOworICAgICAgICBpZiAoKHNkaWdpdCl2dG9wICsgemhpIDwgMCkgewogICAgICAgICAgICAgY2FycnkgPSAwOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVfdyAmJiBpK2sgPCBzaXplX3Y7ICsraSkgewotICAgICAgICAgICAgICAgIGNhcnJ5ICs9IHYtPm9iX2RpZ2l0W2kra10gKyB3LT5vYl9kaWdpdFtpXTsKLSAgICAgICAgICAgICAgICB2LT5vYl9kaWdpdFtpK2tdID0gKGRpZ2l0KShjYXJyeSAmIFB5TG9uZ19NQVNLKTsKLSAgICAgICAgICAgICAgICBjYXJyeSA9IFB5X0FSSVRITUVUSUNfUklHSFRfU0hJRlQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBU0VfVFdPRElHSVRTX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcnJ5LCBQeUxvbmdfU0hJRlQpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVfdzsgKytpKSB7CisgICAgICAgICAgICAgICAgY2FycnkgKz0gdmtbaV0gKyB3MFtpXTsKKyAgICAgICAgICAgICAgICB2a1tpXSA9IGNhcnJ5ICYgUHlMb25nX01BU0s7CisgICAgICAgICAgICAgICAgY2FycnkgPj49IFB5TG9uZ19TSElGVDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC0tcTsKICAgICAgICAgfQotICAgIH0gLyogZm9yIGosIGsgKi8KIAotICAgIGlmIChhID09IE5VTEwpCi0gICAgICAgICpwcmVtID0gTlVMTDsKLSAgICBlbHNlIHsKLSAgICAgICAgYSA9IGxvbmdfbm9ybWFsaXplKGEpOwotICAgICAgICAqcHJlbSA9IGRpdnJlbTEodiwgZCwgJmQpOwotICAgICAgICAvKiBkIHJlY2VpdmVzIHRoZSAodW51c2VkKSByZW1haW5kZXIgKi8KLSAgICAgICAgaWYgKCpwcmVtID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihhKTsKLSAgICAgICAgICAgIGEgPSBOVUxMOwotICAgICAgICB9CisgICAgICAgIC8qIHN0b3JlIHF1b3RpZW50IGRpZ2l0ICovCisgICAgICAgIGFzc2VydChxIDwgUHlMb25nX0JBU0UpOworICAgICAgICAqLS1hayA9IHE7CiAgICAgfQorCisgICAgLyogdW5zaGlmdCByZW1haW5kZXI7IHdlIHJldXNlIHcgdG8gc3RvcmUgdGhlIHJlc3VsdCAqLworICAgIGNhcnJ5ID0gdl9yc2hpZnQodzAsIHYwLCBzaXplX3csIGQpOworICAgIGFzc2VydChjYXJyeT09MCk7CiAgICAgUHlfREVDUkVGKHYpOwotICAgIFB5X0RFQ1JFRih3KTsKLSAgICByZXR1cm4gYTsKKworICAgICpwcmVtID0gbG9uZ19ub3JtYWxpemUodyk7CisgICAgcmV0dXJuIGxvbmdfbm9ybWFsaXplKGEpOworfQorCisvKiBGb3IgYSBub256ZXJvIFB5TG9uZyBhLCBleHByZXNzIGEgaW4gdGhlIGZvcm0geCAqIDIqKmUsIHdpdGggMC41IDw9CisgICBhYnMoeCkgPCAxLjAgYW5kIGUgPj0gMDsgcmV0dXJuIHggYW5kIHB1dCBlIGluICplLiAgSGVyZSB4IGlzCisgICByb3VuZGVkIHRvIERCTF9NQU5UX0RJRyBzaWduaWZpY2FudCBiaXRzIHVzaW5nIHJvdW5kLWhhbGYtdG8tZXZlbi4KKyAgIElmIGEgPT0gMCwgcmV0dXJuIDAuMCBhbmQgc2V0ICplID0gMC4gIElmIHRoZSByZXN1bHRpbmcgZXhwb25lbnQKKyAgIGUgaXMgbGFyZ2VyIHRoYW4gUFlfU1NJWkVfVF9NQVgsIHJhaXNlIE92ZXJmbG93RXJyb3IgYW5kIHJldHVybgorICAgLTEuMC4gKi8KKworLyogYXR0ZW1wdCB0byBkZWZpbmUgMi4wKipEQkxfTUFOVF9ESUcgYXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgKi8KKyNpZiBEQkxfTUFOVF9ESUcgPT0gNTMKKyNkZWZpbmUgRVhQMl9EQkxfTUFOVF9ESUcgOTAwNzE5OTI1NDc0MDk5Mi4wCisjZWxzZQorI2RlZmluZSBFWFAyX0RCTF9NQU5UX0RJRyAobGRleHAoMS4wLCBEQkxfTUFOVF9ESUcpKQorI2VuZGlmCisKK2RvdWJsZQorX1B5TG9uZ19GcmV4cChQeUxvbmdPYmplY3QgKmEsIFB5X3NzaXplX3QgKmUpCit7CisgICAgUHlfc3NpemVfdCBhX3NpemUsIGFfYml0cywgc2hpZnRfZGlnaXRzLCBzaGlmdF9iaXRzLCB4X3NpemU7CisgICAgLyogU2VlIGJlbG93IGZvciB3aHkgeF9kaWdpdHMgaXMgYWx3YXlzIGxhcmdlIGVub3VnaC4gKi8KKyAgICBkaWdpdCByZW0sIHhfZGlnaXRzWzIgKyAoREJMX01BTlRfRElHICsgMSkgLyBQeUxvbmdfU0hJRlRdOworICAgIGRvdWJsZSBkeDsKKyAgICAvKiBDb3JyZWN0aW9uIHRlcm0gZm9yIHJvdW5kLWhhbGYtdG8tZXZlbiByb3VuZGluZy4gIEZvciBhIGRpZ2l0IHgsCisgICAgICAgInggKyBoYWxmX2V2ZW5fY29ycmVjdGlvblt4ICYgN10iIGdpdmVzIHggcm91bmRlZCB0byB0aGUgbmVhcmVzdAorICAgICAgIG11bHRpcGxlIG9mIDQsIHJvdW5kaW5nIHRpZXMgdG8gYSBtdWx0aXBsZSBvZiA4LiAqLworICAgIHN0YXRpYyBjb25zdCBpbnQgaGFsZl9ldmVuX2NvcnJlY3Rpb25bOF0gPSB7MCwgLTEsIC0yLCAxLCAwLCAtMSwgMiwgMX07CisKKyAgICBhX3NpemUgPSBBQlMoUHlfU0laRShhKSk7CisgICAgaWYgKGFfc2l6ZSA9PSAwKSB7CisgICAgICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgMDogc2lnbmlmaWNhbmQgMC4wLCBleHBvbmVudCAwLiAqLworICAgICAgICAqZSA9IDA7CisgICAgICAgIHJldHVybiAwLjA7CisgICAgfQorICAgIGFfYml0cyA9IGJpdHNfaW5fZGlnaXQoYS0+b2JfZGlnaXRbYV9zaXplLTFdKTsKKyAgICAvKiBUaGUgZm9sbG93aW5nIGlzIGFuIG92ZXJmbG93LWZyZWUgdmVyc2lvbiBvZiB0aGUgY2hlY2sKKyAgICAgICAiaWYgKChhX3NpemUgLSAxKSAqIFB5TG9uZ19TSElGVCArIGFfYml0cyA+IFBZX1NTSVpFX1RfTUFYKSAuLi4iICovCisgICAgaWYgKGFfc2l6ZSA+PSAoUFlfU1NJWkVfVF9NQVggLSAxKSAvIFB5TG9uZ19TSElGVCArIDEgJiYKKyAgICAgICAgKGFfc2l6ZSA+IChQWV9TU0laRV9UX01BWCAtIDEpIC8gUHlMb25nX1NISUZUICsgMSB8fAorICAgICAgICAgYV9iaXRzID4gKFBZX1NTSVpFX1RfTUFYIC0gMSkgJSBQeUxvbmdfU0hJRlQgKyAxKSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICBhX2JpdHMgPSAoYV9zaXplIC0gMSkgKiBQeUxvbmdfU0hJRlQgKyBhX2JpdHM7CisKKyAgICAvKiBTaGlmdCB0aGUgZmlyc3QgREJMX01BTlRfRElHICsgMiBiaXRzIG9mIGEgaW50byB4X2RpZ2l0c1swOnhfc2l6ZV0KKyAgICAgICAoc2hpZnRpbmcgbGVmdCBpZiBhX2JpdHMgPD0gREJMX01BTlRfRElHICsgMikuCisKKyAgICAgICBOdW1iZXIgb2YgZGlnaXRzIG5lZWRlZCBmb3IgcmVzdWx0OiB3cml0ZSAvLyBmb3IgZmxvb3IgZGl2aXNpb24uCisgICAgICAgVGhlbiBpZiBzaGlmdGluZyBsZWZ0LCB3ZSBlbmQgdXAgdXNpbmcKKworICAgICAgICAgMSArIGFfc2l6ZSArIChEQkxfTUFOVF9ESUcgKyAyIC0gYV9iaXRzKSAvLyBQeUxvbmdfU0hJRlQKKworICAgICAgIGRpZ2l0cy4gIElmIHNoaWZ0aW5nIHJpZ2h0LCB3ZSB1c2UKKworICAgICAgICAgYV9zaXplIC0gKGFfYml0cyAtIERCTF9NQU5UX0RJRyAtIDIpIC8vIFB5TG9uZ19TSElGVAorCisgICAgICAgZGlnaXRzLiAgVXNpbmcgYV9zaXplID0gMSArIChhX2JpdHMgLSAxKSAvLyBQeUxvbmdfU0hJRlQgYWxvbmcgd2l0aAorICAgICAgIHRoZSBpbmVxdWFsaXRpZXMKKworICAgICAgICAgbSAvLyBQeUxvbmdfU0hJRlQgKyBuIC8vIFB5TG9uZ19TSElGVCA8PSAobSArIG4pIC8vIFB5TG9uZ19TSElGVAorICAgICAgICAgbSAvLyBQeUxvbmdfU0hJRlQgLSBuIC8vIFB5TG9uZ19TSElGVCA8PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSArIChtIC0gbiAtIDEpIC8vIFB5TG9uZ19TSElGVCwKKworICAgICAgIHZhbGlkIGZvciBhbnkgaW50ZWdlcnMgbSBhbmQgbiwgd2UgZmluZCB0aGF0IHhfc2l6ZSBzYXRpc2ZpZXMKKworICAgICAgICAgeF9zaXplIDw9IDIgKyAoREJMX01BTlRfRElHICsgMSkgLy8gUHlMb25nX1NISUZUCisKKyAgICAgICBpbiBib3RoIGNhc2VzLgorICAgICovCisgICAgaWYgKGFfYml0cyA8PSBEQkxfTUFOVF9ESUcgKyAyKSB7CisgICAgICAgIHNoaWZ0X2RpZ2l0cyA9IChEQkxfTUFOVF9ESUcgKyAyIC0gYV9iaXRzKSAvIFB5TG9uZ19TSElGVDsKKyAgICAgICAgc2hpZnRfYml0cyA9IChEQkxfTUFOVF9ESUcgKyAyIC0gYV9iaXRzKSAlIFB5TG9uZ19TSElGVDsKKyAgICAgICAgeF9zaXplID0gMDsKKyAgICAgICAgd2hpbGUgKHhfc2l6ZSA8IHNoaWZ0X2RpZ2l0cykKKyAgICAgICAgICAgIHhfZGlnaXRzW3hfc2l6ZSsrXSA9IDA7CisgICAgICAgIHJlbSA9IHZfbHNoaWZ0KHhfZGlnaXRzICsgeF9zaXplLCBhLT5vYl9kaWdpdCwgYV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNoaWZ0X2JpdHMpOworICAgICAgICB4X3NpemUgKz0gYV9zaXplOworICAgICAgICB4X2RpZ2l0c1t4X3NpemUrK10gPSByZW07CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzaGlmdF9kaWdpdHMgPSAoYV9iaXRzIC0gREJMX01BTlRfRElHIC0gMikgLyBQeUxvbmdfU0hJRlQ7CisgICAgICAgIHNoaWZ0X2JpdHMgPSAoYV9iaXRzIC0gREJMX01BTlRfRElHIC0gMikgJSBQeUxvbmdfU0hJRlQ7CisgICAgICAgIHJlbSA9IHZfcnNoaWZ0KHhfZGlnaXRzLCBhLT5vYl9kaWdpdCArIHNoaWZ0X2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgYV9zaXplIC0gc2hpZnRfZGlnaXRzLCAoaW50KXNoaWZ0X2JpdHMpOworICAgICAgICB4X3NpemUgPSBhX3NpemUgLSBzaGlmdF9kaWdpdHM7CisgICAgICAgIC8qIEZvciBjb3JyZWN0IHJvdW5kaW5nIGJlbG93LCB3ZSBuZWVkIHRoZSBsZWFzdCBzaWduaWZpY2FudAorICAgICAgICAgICBiaXQgb2YgeCB0byBiZSAnc3RpY2t5JyBmb3IgdGhpcyBzaGlmdDogaWYgYW55IG9mIHRoZSBiaXRzCisgICAgICAgICAgIHNoaWZ0ZWQgb3V0IHdhcyBub256ZXJvLCB3ZSBzZXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdAorICAgICAgICAgICBvZiB4LiAqLworICAgICAgICBpZiAocmVtKQorICAgICAgICAgICAgeF9kaWdpdHNbMF0gfD0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgd2hpbGUgKHNoaWZ0X2RpZ2l0cyA+IDApCisgICAgICAgICAgICAgICAgaWYgKGEtPm9iX2RpZ2l0Wy0tc2hpZnRfZGlnaXRzXSkgeworICAgICAgICAgICAgICAgICAgICB4X2RpZ2l0c1swXSB8PSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgfQorICAgIGFzc2VydCgxIDw9IHhfc2l6ZSAmJgorICAgICAgICAgICB4X3NpemUgPD0gKFB5X3NzaXplX3QpKHNpemVvZih4X2RpZ2l0cykvc2l6ZW9mKGRpZ2l0KSkpOworCisgICAgLyogUm91bmQsIGFuZCBjb252ZXJ0IHRvIGRvdWJsZS4gKi8KKyAgICB4X2RpZ2l0c1swXSArPSBoYWxmX2V2ZW5fY29ycmVjdGlvblt4X2RpZ2l0c1swXSAmIDddOworICAgIGR4ID0geF9kaWdpdHNbLS14X3NpemVdOworICAgIHdoaWxlICh4X3NpemUgPiAwKQorICAgICAgICBkeCA9IGR4ICogUHlMb25nX0JBU0UgKyB4X2RpZ2l0c1stLXhfc2l6ZV07CisKKyAgICAvKiBSZXNjYWxlOyAgbWFrZSBjb3JyZWN0aW9uIGlmIHJlc3VsdCBpcyAxLjAuICovCisgICAgZHggLz0gNC4wICogRVhQMl9EQkxfTUFOVF9ESUc7CisgICAgaWYgKGR4ID09IDEuMCkgeworICAgICAgICBpZiAoYV9iaXRzID09IFBZX1NTSVpFX1RfTUFYKQorICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAgICAgZHggPSAwLjU7CisgICAgICAgIGFfYml0cyArPSAxOworICAgIH0KKworICAgICplID0gYV9iaXRzOworICAgIHJldHVybiBQeV9TSVpFKGEpIDwgMCA/IC1keCA6IGR4OworCisgIG92ZXJmbG93OgorICAgIC8qIGV4cG9uZW50ID4gUFlfU1NJWkVfVF9NQVggKi8KKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgImh1Z2UgaW50ZWdlcjogbnVtYmVyIG9mIGJpdHMgb3ZlcmZsb3dzIGEgUHlfc3NpemVfdCIpOworICAgICplID0gMDsKKyAgICByZXR1cm4gLTEuMDsKK30KKworLyogR2V0IGEgQyBkb3VibGUgZnJvbSBhIGxvbmcgaW50IG9iamVjdC4gIFJvdW5kcyB0byB0aGUgbmVhcmVzdCBkb3VibGUsCisgICB1c2luZyB0aGUgcm91bmQtaGFsZi10by1ldmVuIHJ1bGUgaW4gdGhlIGNhc2Ugb2YgYSB0aWUuICovCisKK2RvdWJsZQorUHlMb25nX0FzRG91YmxlKFB5T2JqZWN0ICp2KQoreworICAgIFB5X3NzaXplX3QgZXhwb25lbnQ7CisgICAgZG91YmxlIHg7CisKKyAgICBpZiAodiA9PSBOVUxMIHx8ICFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMS4wOworICAgIH0KKyAgICB4ID0gX1B5TG9uZ19GcmV4cCgoUHlMb25nT2JqZWN0ICopdiwgJmV4cG9uZW50KTsKKyAgICBpZiAoKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB8fCBleHBvbmVudCA+IERCTF9NQVhfRVhQKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcgaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGZsb2F0Iik7CisgICAgICAgIHJldHVybiAtMS4wOworICAgIH0KKyAgICByZXR1cm4gbGRleHAoeCwgKGludClleHBvbmVudCk7CiB9CiAKIC8qIE1ldGhvZHMgKi8KQEAgLTE5NDAsMTAgKzIzNTMsNyBAQAogICAgIFB5X3NzaXplX3Qgc2lnbjsKIAogICAgIGlmIChQeV9TSVpFKGEpICE9IFB5X1NJWkUoYikpIHsKLSAgICAgICAgaWYgKEFCUyhQeV9TSVpFKGEpKSA9PSAwICYmIEFCUyhQeV9TSVpFKGIpKSA9PSAwKQotICAgICAgICAgICAgc2lnbiA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpZ24gPSBQeV9TSVpFKGEpIC0gUHlfU0laRShiKTsKKyAgICAgICAgc2lnbiA9IFB5X1NJWkUoYSkgLSBQeV9TSVpFKGIpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfc3NpemVfdCBpID0gQUJTKFB5X1NJWkUoYSkpOwpAQCAtMTk1Miw3ICsyMzYyLDcgQEAKICAgICAgICAgaWYgKGkgPCAwKQogICAgICAgICAgICAgc2lnbiA9IDA7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2lnbiA9IChpbnQpYS0+b2JfZGlnaXRbaV0gLSAoaW50KWItPm9iX2RpZ2l0W2ldOworICAgICAgICAgICAgc2lnbiA9IChzZGlnaXQpYS0+b2JfZGlnaXRbaV0gLSAoc2RpZ2l0KWItPm9iX2RpZ2l0W2ldOwogICAgICAgICAgICAgaWYgKFB5X1NJWkUoYSkgPCAwKQogICAgICAgICAgICAgICAgIHNpZ24gPSAtc2lnbjsKICAgICAgICAgfQpAQCAtMTk3NywxNCArMjM4NywxMiBAQAogICAgICAgICBzaWduID0gLTE7CiAgICAgICAgIGkgPSAtKGkpOwogICAgIH0KLSNkZWZpbmUgTE9OR19CSVRfUHlMb25nX1NISUZUICAgKDgqc2l6ZW9mKGxvbmcpIC0gUHlMb25nX1NISUZUKQogICAgIC8qIFRoZSBmb2xsb3dpbmcgbG9vcCBwcm9kdWNlcyBhIEMgdW5zaWduZWQgbG9uZyB4IHN1Y2ggdGhhdCB4IGlzCiAgICAgICAgY29uZ3J1ZW50IHRvIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB2IG1vZHVsbyBVTE9OR19NQVguICBUaGUKICAgICAgICByZXN1bHRpbmcgeCBpcyBub256ZXJvIGlmIGFuZCBvbmx5IGlmIHYgaXMuICovCiAgICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgICAgIC8qIEZvcmNlIGEgbmF0aXZlIGxvbmcgIy1iaXRzICgzMiBvciA2NCkgY2lyY3VsYXIgc2hpZnQgKi8KLSAgICAgICAgeCA9ICgoeCA8PCBQeUxvbmdfU0hJRlQpICYgflB5TG9uZ19NQVNLKSB8Ci0gICAgICAgICAgICAoKHggPj4gTE9OR19CSVRfUHlMb25nX1NISUZUKSAmIFB5TG9uZ19NQVNLKTsKKyAgICAgICAgeCA9ICh4ID4+ICg4KlNJWkVPRl9MT05HLVB5TG9uZ19TSElGVCkpIHwgKHggPDwgUHlMb25nX1NISUZUKTsKICAgICAgICAgeCArPSB2LT5vYl9kaWdpdFtpXTsKICAgICAgICAgLyogSWYgdGhlIGFkZGl0aW9uIGFib3ZlIG92ZXJmbG93ZWQgd2UgY29tcGVuc2F0ZSBieQogICAgICAgICAgICBpbmNyZW1lbnRpbmcuICBUaGlzIHByZXNlcnZlcyB0aGUgdmFsdWUgbW9kdWxvCkBAIC0xOTkyLDExICsyNDAwLDEwIEBACiAgICAgICAgIGlmICh4IDwgdi0+b2JfZGlnaXRbaV0pCiAgICAgICAgICAgICB4Kys7CiAgICAgfQotI3VuZGVmIExPTkdfQklUX1B5TG9uZ19TSElGVAogICAgIHggPSB4ICogc2lnbjsKLSAgICBpZiAoeCA9PSAtMSkKLSAgICAgICAgeCA9IC0yOwotICAgIHJldHVybiB4OworICAgIGlmICh4ID09ICh1bnNpZ25lZCBsb25nKS0xKQorICAgICAgICB4ID0gKHVuc2lnbmVkIGxvbmcpLTI7CisgICAgcmV0dXJuIChsb25nKXg7CiB9CiAKIApAQCAtMjAxNCw4ICsyNDIxLDggQEAKICAgICBpZiAoc2l6ZV9hIDwgc2l6ZV9iKSB7CiAgICAgICAgIHsgUHlMb25nT2JqZWN0ICp0ZW1wID0gYTsgYSA9IGI7IGIgPSB0ZW1wOyB9CiAgICAgICAgIHsgUHlfc3NpemVfdCBzaXplX3RlbXAgPSBzaXplX2E7Ci0gICAgICAgICAgc2l6ZV9hID0gc2l6ZV9iOwotICAgICAgICAgIHNpemVfYiA9IHNpemVfdGVtcDsgfQorICAgICAgICAgICAgc2l6ZV9hID0gc2l6ZV9iOworICAgICAgICAgICAgc2l6ZV9iID0gc2l6ZV90ZW1wOyB9CiAgICAgfQogICAgIHogPSBfUHlMb25nX05ldyhzaXplX2ErMSk7CiAgICAgaWYgKHogPT0gTlVMTCkKQEAgLTIwNTAsOCArMjQ1Nyw4IEBACiAgICAgICAgIHNpZ24gPSAtMTsKICAgICAgICAgeyBQeUxvbmdPYmplY3QgKnRlbXAgPSBhOyBhID0gYjsgYiA9IHRlbXA7IH0KICAgICAgICAgeyBQeV9zc2l6ZV90IHNpemVfdGVtcCA9IHNpemVfYTsKLSAgICAgICAgICBzaXplX2EgPSBzaXplX2I7Ci0gICAgICAgICAgc2l6ZV9iID0gc2l6ZV90ZW1wOyB9CisgICAgICAgICAgICBzaXplX2EgPSBzaXplX2I7CisgICAgICAgICAgICBzaXplX2IgPSBzaXplX3RlbXA7IH0KICAgICB9CiAgICAgZWxzZSBpZiAoc2l6ZV9hID09IHNpemVfYikgewogICAgICAgICAvKiBGaW5kIGhpZ2hlc3QgZGlnaXQgd2hlcmUgYSBhbmQgYiBkaWZmZXI6ICovCkBAIC0yMTczLDkgKzI1ODAsOSBAQAogICAgICAgICAgICAgZGlnaXQgKnBhZW5kID0gYS0+b2JfZGlnaXQgKyBzaXplX2E7CiAKICAgICAgICAgICAgIFNJR0NIRUNLKHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBjYXJyeSA9ICpweiArIGYgKiBmOwogICAgICAgICAgICAgKnB6KysgPSAoZGlnaXQpKGNhcnJ5ICYgUHlMb25nX01BU0spOwpAQCAtMjIxMSw5ICsyNjE4LDkgQEAKICAgICAgICAgICAgIGRpZ2l0ICpwYmVuZCA9IGItPm9iX2RpZ2l0ICsgc2l6ZV9iOwogCiAgICAgICAgICAgICBTSUdDSEVDSyh7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHopOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHopOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgd2hpbGUgKHBiIDwgcGJlbmQpIHsKICAgICAgICAgICAgICAgICBjYXJyeSArPSAqcHogKyAqcGIrKyAqIGY7CkBAIC0yMjM3LDcgKzI2NDQsMTAgQEAKICAgIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgogKi8KIHN0YXRpYyBpbnQKLWttdWxfc3BsaXQoUHlMb25nT2JqZWN0ICpuLCBQeV9zc2l6ZV90IHNpemUsIFB5TG9uZ09iamVjdCAqKmhpZ2gsIFB5TG9uZ09iamVjdCAqKmxvdykKK2ttdWxfc3BsaXQoUHlMb25nT2JqZWN0ICpuLAorICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCisgICAgICAgICAgIFB5TG9uZ09iamVjdCAqKmhpZ2gsCisgICAgICAgICAgIFB5TG9uZ09iamVjdCAqKmxvdykKIHsKICAgICBQeUxvbmdPYmplY3QgKmhpLCAqbG87CiAgICAgUHlfc3NpemVfdCBzaXplX2xvLCBzaXplX2hpOwpAQCAtMjQyNiw3ICsyODM2LDcgQEAKIAogICAgIHJldHVybiBsb25nX25vcm1hbGl6ZShyZXQpOwogCi0gZmFpbDoKKyAgZmFpbDoKICAgICBQeV9YREVDUkVGKHJldCk7CiAgICAgUHlfWERFQ1JFRihhaCk7CiAgICAgUHlfWERFQ1JFRihhbCk7CkBAIC0yNTM2LDcgKzI5NDYsNyBAQAogICAgIFB5X0RFQ1JFRihic2xpY2UpOwogICAgIHJldHVybiBsb25nX25vcm1hbGl6ZShyZXQpOwogCi0gZmFpbDoKKyAgZmFpbDoKICAgICBQeV9ERUNSRUYocmV0KTsKICAgICBQeV9YREVDUkVGKGJzbGljZSk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNjU1LDUwICszMDY1LDI3MSBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKilkaXY7CiB9CiAKKy8qIFB5TG9uZy9QeUxvbmcgLT4gZmxvYXQsIHdpdGggY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0LiAqLworCisjZGVmaW5lIE1BTlRfRElHX0RJR0lUUyAoREJMX01BTlRfRElHIC8gUHlMb25nX1NISUZUKQorI2RlZmluZSBNQU5UX0RJR19CSVRTIChEQkxfTUFOVF9ESUcgJSBQeUxvbmdfU0hJRlQpCisKIHN0YXRpYyBQeU9iamVjdCAqCiBsb25nX3RydWVfZGl2aWRlKFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKIHsKLSAgICBQeUxvbmdPYmplY3QgKmEsICpiOwotICAgIGRvdWJsZSBhZCwgYmQ7Ci0gICAgaW50IGZhaWxlZCwgYWV4cCA9IC0xLCBiZXhwID0gLTE7CisgICAgUHlMb25nT2JqZWN0ICphLCAqYiwgKng7CisgICAgUHlfc3NpemVfdCBhX3NpemUsIGJfc2l6ZSwgc2hpZnQsIGV4dHJhX2JpdHMsIGRpZmYsIHhfc2l6ZSwgeF9iaXRzOworICAgIGRpZ2l0IG1hc2ssIGxvdzsKKyAgICBpbnQgaW5leGFjdCwgbmVnYXRlLCBhX2lzX3NtYWxsLCBiX2lzX3NtYWxsOworICAgIGRvdWJsZSBkeCwgcmVzdWx0OwogCiAgICAgQ09OVkVSVF9CSU5PUCh2LCB3LCAmYSwgJmIpOwotICAgIGFkID0gX1B5TG9uZ19Bc1NjYWxlZERvdWJsZSgoUHlPYmplY3QgKilhLCAmYWV4cCk7Ci0gICAgYmQgPSBfUHlMb25nX0FzU2NhbGVkRG91YmxlKChQeU9iamVjdCAqKWIsICZiZXhwKTsKLSAgICBmYWlsZWQgPSAoYWQgPT0gLTEuMCB8fCBiZCA9PSAtMS4wKSAmJiBQeUVycl9PY2N1cnJlZCgpOwotICAgIFB5X0RFQ1JFRihhKTsKLSAgICBQeV9ERUNSRUYoYik7Ci0gICAgaWYgKGZhaWxlZCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgLyogJ2FleHAnIGFuZCAnYmV4cCcgd2VyZSBpbml0aWFsaXplZCB0byAtMSB0byBzaWxlbmNlIGdjYy00LjAueCwKLSAgICAgICBidXQgc2hvdWxkIHJlYWxseSBiZSBzZXQgY29ycmVjdGx5IGFmdGVyIHN1Y2Vzc2Z1bCBjYWxscyB0bwotICAgICAgIF9QeUxvbmdfQXNTY2FsZWREb3VibGUoKSAqLwotICAgIGFzc2VydChhZXhwID49IDAgJiYgYmV4cCA+PSAwKTsKIAotICAgIGlmIChiZCA9PSAwLjApIHsKKyAgICAvKgorICAgICAgIE1ldGhvZCBpbiBhIG51dHNoZWxsOgorCisgICAgICAgICAwLiByZWR1Y2UgdG8gY2FzZSBhLCBiID4gMDsgZmlsdGVyIG91dCBvYnZpb3VzIHVuZGVyZmxvdy9vdmVyZmxvdworICAgICAgICAgMS4gY2hvb3NlIGEgc3VpdGFibGUgaW50ZWdlciAnc2hpZnQnCisgICAgICAgICAyLiB1c2UgaW50ZWdlciBhcml0aG1ldGljIHRvIGNvbXB1dGUgeCA9IGZsb29yKDIqKi1zaGlmdCphL2IpCisgICAgICAgICAzLiBhZGp1c3QgeCBmb3IgY29ycmVjdCByb3VuZGluZworICAgICAgICAgNC4gY29udmVydCB4IHRvIGEgZG91YmxlIGR4IHdpdGggdGhlIHNhbWUgdmFsdWUKKyAgICAgICAgIDUuIHJldHVybiBsZGV4cChkeCwgc2hpZnQpLgorCisgICAgICAgSW4gbW9yZSBkZXRhaWw6CisKKyAgICAgICAwLiBGb3IgYW55IGEsIGEvMCByYWlzZXMgWmVyb0RpdmlzaW9uRXJyb3I7IGZvciBub256ZXJvIGIsIDAvYgorICAgICAgIHJldHVybnMgZWl0aGVyIDAuMCBvciAtMC4wLCBkZXBlbmRpbmcgb24gdGhlIHNpZ24gb2YgYi4gIEZvciBhIGFuZAorICAgICAgIGIgYm90aCBub256ZXJvLCBpZ25vcmUgc2lnbnMgb2YgYSBhbmQgYiwgYW5kIGFkZCB0aGUgc2lnbiBiYWNrIGluCisgICAgICAgYXQgdGhlIGVuZC4gIE5vdyB3cml0ZSBhX2JpdHMgYW5kIGJfYml0cyBmb3IgdGhlIGJpdCBsZW5ndGhzIG9mIGEKKyAgICAgICBhbmQgYiByZXNwZWN0aXZlbHkgKHRoYXQgaXMsIGFfYml0cyA9IDEgKyBmbG9vcihsb2dfMihhKSk7IGxpa2V3aXNlCisgICAgICAgZm9yIGIpLiAgVGhlbgorCisgICAgICAgICAgMioqKGFfYml0cyAtIGJfYml0cyAtIDEpIDwgYS9iIDwgMioqKGFfYml0cyAtIGJfYml0cyArIDEpLgorCisgICAgICAgU28gaWYgYV9iaXRzIC0gYl9iaXRzID4gREJMX01BWF9FWFAgdGhlbiBhL2IgPiAyKipEQkxfTUFYX0VYUCBhbmQKKyAgICAgICBzbyBvdmVyZmxvd3MuICBTaW1pbGFybHksIGlmIGFfYml0cyAtIGJfYml0cyA8IERCTF9NSU5fRVhQIC0KKyAgICAgICBEQkxfTUFOVF9ESUcgLSAxIHRoZW4gYS9iIHVuZGVyZmxvd3MgdG8gMC4gIFdpdGggdGhlc2UgY2FzZXMgb3V0IG9mCisgICAgICAgdGhlIHdheSwgd2UgY2FuIGFzc3VtZSB0aGF0CisKKyAgICAgICAgICBEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRyAtIDEgPD0gYV9iaXRzIC0gYl9iaXRzIDw9IERCTF9NQVhfRVhQLgorCisgICAgICAgMS4gVGhlIGludGVnZXIgJ3NoaWZ0JyBpcyBjaG9zZW4gc28gdGhhdCB4IGhhcyB0aGUgcmlnaHQgbnVtYmVyIG9mCisgICAgICAgYml0cyBmb3IgYSBkb3VibGUsIHBsdXMgdHdvIG9yIHRocmVlIGV4dHJhIGJpdHMgdGhhdCB3aWxsIGJlIHVzZWQKKyAgICAgICBpbiB0aGUgcm91bmRpbmcgZGVjaXNpb25zLiAgV3JpdGluZyBhX2JpdHMgYW5kIGJfYml0cyBmb3IgdGhlCisgICAgICAgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJpdHMgaW4gYSBhbmQgYiByZXNwZWN0aXZlbHksIGEKKyAgICAgICBzdHJhaWdodGZvcndhcmQgZm9ybXVsYSBmb3Igc2hpZnQgaXM6CisKKyAgICAgICAgICBzaGlmdCA9IGFfYml0cyAtIGJfYml0cyAtIERCTF9NQU5UX0RJRyAtIDIKKworICAgICAgIFRoaXMgaXMgZmluZSBpbiB0aGUgdXN1YWwgY2FzZSwgYnV0IGlmIGEvYiBpcyBzbWFsbGVyIHRoYW4gdGhlCisgICAgICAgc21hbGxlc3Qgbm9ybWFsIGZsb2F0IHRoZW4gaXQgY2FuIGxlYWQgdG8gZG91YmxlIHJvdW5kaW5nIG9uIGFuCisgICAgICAgSUVFRSA3NTQgcGxhdGZvcm0sIGdpdmluZyBpbmNvcnJlY3RseSByb3VuZGVkIHJlc3VsdHMuICBTbyB3ZQorICAgICAgIGFkanVzdCB0aGUgZm9ybXVsYSBzbGlnaHRseS4gIFRoZSBhY3R1YWwgZm9ybXVsYSB1c2VkIGlzOgorCisgICAgICAgICAgIHNoaWZ0ID0gTUFYKGFfYml0cyAtIGJfYml0cywgREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHIC0gMgorCisgICAgICAgMi4gVGhlIHF1YW50aXR5IHggaXMgY29tcHV0ZWQgYnkgZmlyc3Qgc2hpZnRpbmcgYSAobGVmdCAtc2hpZnQgYml0cworICAgICAgIGlmIHNoaWZ0IDw9IDAsIHJpZ2h0IHNoaWZ0IGJpdHMgaWYgc2hpZnQgPiAwKSBhbmQgdGhlbiBkaXZpZGluZyBieQorICAgICAgIGIuICBGb3IgYm90aCB0aGUgc2hpZnQgYW5kIHRoZSBkaXZpc2lvbiwgd2Uga2VlcCB0cmFjayBvZiB3aGV0aGVyCisgICAgICAgdGhlIHJlc3VsdCBpcyBpbmV4YWN0LCBpbiBhIGZsYWcgJ2luZXhhY3QnOyB0aGlzIGluZm9ybWF0aW9uIGlzCisgICAgICAgbmVlZGVkIGF0IHRoZSByb3VuZGluZyBzdGFnZS4KKworICAgICAgIFdpdGggdGhlIGNob2ljZSBvZiBzaGlmdCBhYm92ZSwgdG9nZXRoZXIgd2l0aCBvdXIgYXNzdW1wdGlvbiB0aGF0CisgICAgICAgYV9iaXRzIC0gYl9iaXRzID49IERCTF9NSU5fRVhQIC0gREJMX01BTlRfRElHIC0gMSwgaXQgZm9sbG93cworICAgICAgIHRoYXQgeCA+PSAxLgorCisgICAgICAgMy4gTm93IHggKiAyKipzaGlmdCA8PSBhL2IgPCAoeCsxKSAqIDIqKnNoaWZ0LiAgV2Ugd2FudCB0byByZXBsYWNlCisgICAgICAgdGhpcyB3aXRoIGFuIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBmbG9hdCBvZiB0aGUgZm9ybQorCisgICAgICAgICAgcm91bmQoeC8yKipleHRyYV9iaXRzKSAqIDIqKihleHRyYV9iaXRzK3NoaWZ0KS4KKworICAgICAgIEZvciBmbG9hdCByZXByZXNlbnRhYmlsaXR5LCB3ZSBuZWVkIHgvMioqZXh0cmFfYml0cyA8CisgICAgICAgMioqREJMX01BTlRfRElHIGFuZCBleHRyYV9iaXRzICsgc2hpZnQgPj0gREJMX01JTl9FWFAgLQorICAgICAgIERCTF9NQU5UX0RJRy4gIFRoaXMgdHJhbnNsYXRlcyB0byB0aGUgY29uZGl0aW9uOgorCisgICAgICAgICAgZXh0cmFfYml0cyA+PSBNQVgoeF9iaXRzLCBEQkxfTUlOX0VYUCAtIHNoaWZ0KSAtIERCTF9NQU5UX0RJRworCisgICAgICAgVG8gcm91bmQsIHdlIGp1c3QgbW9kaWZ5IHRoZSBib3R0b20gZGlnaXQgb2YgeCBpbi1wbGFjZTsgdGhpcyBjYW4KKyAgICAgICBlbmQgdXAgZ2l2aW5nIGEgZGlnaXQgd2l0aCB2YWx1ZSA+IFB5TE9OR19NQVNLLCBidXQgdGhhdCdzIG5vdCBhCisgICAgICAgcHJvYmxlbSBzaW5jZSBkaWdpdHMgY2FuIGhvbGQgdmFsdWVzIHVwIHRvIDIqUHlMT05HX01BU0srMS4KKworICAgICAgIFdpdGggdGhlIG9yaWdpbmFsIGNob2ljZXMgZm9yIHNoaWZ0IGFib3ZlLCBleHRyYV9iaXRzIHdpbGwgYWx3YXlzCisgICAgICAgYmUgMiBvciAzLiAgVGhlbiByb3VuZGluZyB1bmRlciB0aGUgcm91bmQtaGFsZi10by1ldmVuIHJ1bGUsIHdlCisgICAgICAgcm91bmQgdXAgaWZmIHRoZSBtb3N0IHNpZ25pZmljYW50IG9mIHRoZSBleHRyYSBiaXRzIGlzIDEsIGFuZAorICAgICAgIGVpdGhlcjogKGEpIHRoZSBjb21wdXRhdGlvbiBvZiB4IGluIHN0ZXAgMiBoYWQgYW4gaW5leGFjdCByZXN1bHQsCisgICAgICAgb3IgKGIpIGF0IGxlYXN0IG9uZSBvdGhlciBvZiB0aGUgZXh0cmEgYml0cyBpcyAxLCBvciAoYykgdGhlIGxlYXN0CisgICAgICAgc2lnbmlmaWNhbnQgYml0IG9mIHggKGFib3ZlIHRob3NlIHRvIGJlIHJvdW5kZWQpIGlzIDEuCisKKyAgICAgICA0LiBDb252ZXJzaW9uIHRvIGEgZG91YmxlIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgYWxsIGZsb2F0aW5nLXBvaW50CisgICAgICAgb3BlcmF0aW9ucyBpbnZvbHZlZCBpbiB0aGUgY29udmVyc2lvbiBhcmUgZXhhY3QsIHNvIHRoZXJlJ3Mgbm8KKyAgICAgICBkYW5nZXIgb2Ygcm91bmRpbmcgZXJyb3JzLgorCisgICAgICAgNS4gVXNlIGxkZXhwKHgsIHNoaWZ0KSB0byBjb21wdXRlIHgqMioqc2hpZnQsIHRoZSBmaW5hbCByZXN1bHQuCisgICAgICAgVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBleGFjdGx5IHJlcHJlc2VudGFibGUgYXMgYSBkb3VibGUsIGV4Y2VwdAorICAgICAgIGluIHRoZSBjYXNlIHRoYXQgaXQgb3ZlcmZsb3dzLiAgVG8gYXZvaWQgZGVwZW5kZW5jZSBvbiB0aGUgZXhhY3QKKyAgICAgICBiZWhhdmlvdXIgb2YgbGRleHAgb24gb3ZlcmZsb3csIHdlIGNoZWNrIGZvciBvdmVyZmxvdyBiZWZvcmUKKyAgICAgICBhcHBseWluZyBsZGV4cC4gIFRoZSByZXN1bHQgb2YgbGRleHAgaXMgYWRqdXN0ZWQgZm9yIHNpZ24gYmVmb3JlCisgICAgICAgcmV0dXJuaW5nLgorICAgICovCisKKyAgICAvKiBSZWR1Y2UgdG8gY2FzZSB3aGVyZSBhIGFuZCBiIGFyZSBib3RoIHBvc2l0aXZlLiAqLworICAgIGFfc2l6ZSA9IEFCUyhQeV9TSVpFKGEpKTsKKyAgICBiX3NpemUgPSBBQlMoUHlfU0laRShiKSk7CisgICAgbmVnYXRlID0gKFB5X1NJWkUoYSkgPCAwKSBeIChQeV9TSVpFKGIpIDwgMCk7CisgICAgaWYgKGJfc2l6ZSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwKLSAgICAgICAgICAgICJsb25nIGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgImRpdmlzaW9uIGJ5IHplcm8iKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgaWYgKGFfc2l6ZSA9PSAwKQorICAgICAgICBnb3RvIHVuZGVyZmxvd19vcl96ZXJvOworCisgICAgLyogRmFzdCBwYXRoIGZvciBhIGFuZCBiIHNtYWxsIChleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gYSBkb3VibGUpLgorICAgICAgIFJlbGllcyBvbiBmbG9hdGluZy1wb2ludCBkaXZpc2lvbiBiZWluZyBjb3JyZWN0bHkgcm91bmRlZDsgcmVzdWx0cworICAgICAgIG1heSBiZSBzdWJqZWN0IHRvIGRvdWJsZSByb3VuZGluZyBvbiB4ODYgbWFjaGluZXMgdGhhdCBvcGVyYXRlIHdpdGgKKyAgICAgICB0aGUgeDg3IEZQVSBzZXQgdG8gNjQtYml0IHByZWNpc2lvbi4gKi8KKyAgICBhX2lzX3NtYWxsID0gYV9zaXplIDw9IE1BTlRfRElHX0RJR0lUUyB8fAorICAgICAgICAoYV9zaXplID09IE1BTlRfRElHX0RJR0lUUysxICYmCisgICAgICAgICBhLT5vYl9kaWdpdFtNQU5UX0RJR19ESUdJVFNdID4+IE1BTlRfRElHX0JJVFMgPT0gMCk7CisgICAgYl9pc19zbWFsbCA9IGJfc2l6ZSA8PSBNQU5UX0RJR19ESUdJVFMgfHwKKyAgICAgICAgKGJfc2l6ZSA9PSBNQU5UX0RJR19ESUdJVFMrMSAmJgorICAgICAgICAgYi0+b2JfZGlnaXRbTUFOVF9ESUdfRElHSVRTXSA+PiBNQU5UX0RJR19CSVRTID09IDApOworICAgIGlmIChhX2lzX3NtYWxsICYmIGJfaXNfc21hbGwpIHsKKyAgICAgICAgZG91YmxlIGRhLCBkYjsKKyAgICAgICAgZGEgPSBhLT5vYl9kaWdpdFstLWFfc2l6ZV07CisgICAgICAgIHdoaWxlIChhX3NpemUgPiAwKQorICAgICAgICAgICAgZGEgPSBkYSAqIFB5TG9uZ19CQVNFICsgYS0+b2JfZGlnaXRbLS1hX3NpemVdOworICAgICAgICBkYiA9IGItPm9iX2RpZ2l0Wy0tYl9zaXplXTsKKyAgICAgICAgd2hpbGUgKGJfc2l6ZSA+IDApCisgICAgICAgICAgICBkYiA9IGRiICogUHlMb25nX0JBU0UgKyBiLT5vYl9kaWdpdFstLWJfc2l6ZV07CisgICAgICAgIHJlc3VsdCA9IGRhIC8gZGI7CisgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICB9CiAKLSAgICAvKiBUcnVlIHZhbHVlIGlzIHZlcnkgY2xvc2UgdG8gYWQvYmQgKiAyKiooUHlMb25nX1NISUZUKihhZXhwLWJleHApKSAqLwotICAgIGFkIC89IGJkOyAgICAgICAgICAgLyogb3ZlcmZsb3cvdW5kZXJmbG93IGltcG9zc2libGUgaGVyZSAqLwotICAgIGFleHAgLT0gYmV4cDsKLSAgICBpZiAoYWV4cCA+IElOVF9NQVggLyBQeUxvbmdfU0hJRlQpCisgICAgLyogQ2F0Y2ggb2J2aW91cyBjYXNlcyBvZiB1bmRlcmZsb3cgYW5kIG92ZXJmbG93ICovCisgICAgZGlmZiA9IGFfc2l6ZSAtIGJfc2l6ZTsKKyAgICBpZiAoZGlmZiA+IFBZX1NTSVpFX1RfTUFYL1B5TG9uZ19TSElGVCAtIDEpCisgICAgICAgIC8qIEV4dHJlbWUgb3ZlcmZsb3cgKi8KICAgICAgICAgZ290byBvdmVyZmxvdzsKLSAgICBlbHNlIGlmIChhZXhwIDwgLShJTlRfTUFYIC8gUHlMb25nX1NISUZUKSkKLSAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgwLjApOyAgICAgICAgIC8qIHVuZGVyZmxvdyB0byAwICovCi0gICAgZXJybm8gPSAwOwotICAgIGFkID0gbGRleHAoYWQsIGFleHAgKiBQeUxvbmdfU0hJRlQpOwotICAgIGlmIChQeV9PVkVSRkxPV0VEKGFkKSkgLyogaWdub3JlIHVuZGVyZmxvdyB0byAwLjAgKi8KKyAgICBlbHNlIGlmIChkaWZmIDwgMSAtIFBZX1NTSVpFX1RfTUFYL1B5TG9uZ19TSElGVCkKKyAgICAgICAgLyogRXh0cmVtZSB1bmRlcmZsb3cgKi8KKyAgICAgICAgZ290byB1bmRlcmZsb3dfb3JfemVybzsKKyAgICAvKiBOZXh0IGxpbmUgaXMgbm93IHNhZmUgZnJvbSBvdmVyZmxvd2luZyBhIFB5X3NzaXplX3QgKi8KKyAgICBkaWZmID0gZGlmZiAqIFB5TG9uZ19TSElGVCArIGJpdHNfaW5fZGlnaXQoYS0+b2JfZGlnaXRbYV9zaXplIC0gMV0pIC0KKyAgICAgICAgYml0c19pbl9kaWdpdChiLT5vYl9kaWdpdFtiX3NpemUgLSAxXSk7CisgICAgLyogTm93IGRpZmYgPSBhX2JpdHMgLSBiX2JpdHMuICovCisgICAgaWYgKGRpZmYgPiBEQkxfTUFYX0VYUCkKICAgICAgICAgZ290byBvdmVyZmxvdzsKLSAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGFkKTsKKyAgICBlbHNlIGlmIChkaWZmIDwgREJMX01JTl9FWFAgLSBEQkxfTUFOVF9ESUcgLSAxKQorICAgICAgICBnb3RvIHVuZGVyZmxvd19vcl96ZXJvOwogCi1vdmVyZmxvdzoKKyAgICAvKiBDaG9vc2UgdmFsdWUgZm9yIHNoaWZ0OyBzZWUgY29tbWVudHMgZm9yIHN0ZXAgMSBhYm92ZS4gKi8KKyAgICBzaGlmdCA9IE1BWChkaWZmLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcgLSAyOworCisgICAgaW5leGFjdCA9IDA7CisKKyAgICAvKiB4ID0gYWJzKGEgKiAyKiotc2hpZnQpICovCisgICAgaWYgKHNoaWZ0IDw9IDApIHsKKyAgICAgICAgUHlfc3NpemVfdCBpLCBzaGlmdF9kaWdpdHMgPSAtc2hpZnQgLyBQeUxvbmdfU0hJRlQ7CisgICAgICAgIGRpZ2l0IHJlbTsKKyAgICAgICAgLyogeCA9IGEgPDwgLXNoaWZ0ICovCisgICAgICAgIGlmIChhX3NpemUgPj0gUFlfU1NJWkVfVF9NQVggLSAxIC0gc2hpZnRfZGlnaXRzKSB7CisgICAgICAgICAgICAvKiBJbiBwcmFjdGljZSwgaXQncyBwcm9iYWJseSBpbXBvc3NpYmxlIHRvIGVuZCB1cAorICAgICAgICAgICAgICAgaGVyZS4gIEJvdGggYSBhbmQgYiB3b3VsZCBoYXZlIHRvIGJlIGVub3Jtb3VzLAorICAgICAgICAgICAgICAgdXNpbmcgY2xvc2UgdG8gU0laRV9UX01BWCBieXRlcyBvZiBtZW1vcnkgZWFjaC4gKi8KKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm1lZGlhdGUgb3ZlcmZsb3cgZHVyaW5nIGRpdmlzaW9uIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHggPSBfUHlMb25nX05ldyhhX3NpemUgKyBzaGlmdF9kaWdpdHMgKyAxKTsKKyAgICAgICAgaWYgKHggPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaGlmdF9kaWdpdHM7IGkrKykKKyAgICAgICAgICAgIHgtPm9iX2RpZ2l0W2ldID0gMDsKKyAgICAgICAgcmVtID0gdl9sc2hpZnQoeC0+b2JfZGlnaXQgKyBzaGlmdF9kaWdpdHMsIGEtPm9iX2RpZ2l0LAorICAgICAgICAgICAgICAgICAgICAgICBhX3NpemUsIC1zaGlmdCAlIFB5TG9uZ19TSElGVCk7CisgICAgICAgIHgtPm9iX2RpZ2l0W2Ffc2l6ZSArIHNoaWZ0X2RpZ2l0c10gPSByZW07CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeV9zc2l6ZV90IHNoaWZ0X2RpZ2l0cyA9IHNoaWZ0IC8gUHlMb25nX1NISUZUOworICAgICAgICBkaWdpdCByZW07CisgICAgICAgIC8qIHggPSBhID4+IHNoaWZ0ICovCisgICAgICAgIGFzc2VydChhX3NpemUgPj0gc2hpZnRfZGlnaXRzKTsKKyAgICAgICAgeCA9IF9QeUxvbmdfTmV3KGFfc2l6ZSAtIHNoaWZ0X2RpZ2l0cyk7CisgICAgICAgIGlmICh4ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZW0gPSB2X3JzaGlmdCh4LT5vYl9kaWdpdCwgYS0+b2JfZGlnaXQgKyBzaGlmdF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgIGFfc2l6ZSAtIHNoaWZ0X2RpZ2l0cywgc2hpZnQgJSBQeUxvbmdfU0hJRlQpOworICAgICAgICAvKiBzZXQgaW5leGFjdCBpZiBhbnkgb2YgdGhlIGJpdHMgc2hpZnRlZCBvdXQgaXMgbm9uemVybyAqLworICAgICAgICBpZiAocmVtKQorICAgICAgICAgICAgaW5leGFjdCA9IDE7CisgICAgICAgIHdoaWxlICghaW5leGFjdCAmJiBzaGlmdF9kaWdpdHMgPiAwKQorICAgICAgICAgICAgaWYgKGEtPm9iX2RpZ2l0Wy0tc2hpZnRfZGlnaXRzXSkKKyAgICAgICAgICAgICAgICBpbmV4YWN0ID0gMTsKKyAgICB9CisgICAgbG9uZ19ub3JtYWxpemUoeCk7CisgICAgeF9zaXplID0gUHlfU0laRSh4KTsKKworICAgIC8qIHggLy89IGIuIElmIHRoZSByZW1haW5kZXIgaXMgbm9uemVybywgc2V0IGluZXhhY3QuICBXZSBvd24gdGhlIG9ubHkKKyAgICAgICByZWZlcmVuY2UgdG8geCwgc28gaXQncyBzYWZlIHRvIG1vZGlmeSBpdCBpbi1wbGFjZS4gKi8KKyAgICBpZiAoYl9zaXplID09IDEpIHsKKyAgICAgICAgZGlnaXQgcmVtID0gaW5wbGFjZV9kaXZyZW0xKHgtPm9iX2RpZ2l0LCB4LT5vYl9kaWdpdCwgeF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+b2JfZGlnaXRbMF0pOworICAgICAgICBsb25nX25vcm1hbGl6ZSh4KTsKKyAgICAgICAgaWYgKHJlbSkKKyAgICAgICAgICAgIGluZXhhY3QgPSAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlMb25nT2JqZWN0ICpkaXYsICpyZW07CisgICAgICAgIGRpdiA9IHhfZGl2cmVtKHgsIGIsICZyZW0pOworICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgIHggPSBkaXY7CisgICAgICAgIGlmICh4ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoUHlfU0laRShyZW0pKQorICAgICAgICAgICAgaW5leGFjdCA9IDE7CisgICAgICAgIFB5X0RFQ1JFRihyZW0pOworICAgIH0KKyAgICB4X3NpemUgPSBBQlMoUHlfU0laRSh4KSk7CisgICAgYXNzZXJ0KHhfc2l6ZSA+IDApOyAvKiByZXN1bHQgb2YgZGl2aXNpb24gaXMgbmV2ZXIgemVybyAqLworICAgIHhfYml0cyA9ICh4X3NpemUtMSkqUHlMb25nX1NISUZUK2JpdHNfaW5fZGlnaXQoeC0+b2JfZGlnaXRbeF9zaXplLTFdKTsKKworICAgIC8qIFRoZSBudW1iZXIgb2YgZXh0cmEgYml0cyB0aGF0IGhhdmUgdG8gYmUgcm91bmRlZCBhd2F5LiAqLworICAgIGV4dHJhX2JpdHMgPSBNQVgoeF9iaXRzLCBEQkxfTUlOX0VYUCAtIHNoaWZ0KSAtIERCTF9NQU5UX0RJRzsKKyAgICBhc3NlcnQoZXh0cmFfYml0cyA9PSAyIHx8IGV4dHJhX2JpdHMgPT0gMyk7CisKKyAgICAvKiBSb3VuZCBieSBkaXJlY3RseSBtb2RpZnlpbmcgdGhlIGxvdyBkaWdpdCBvZiB4LiAqLworICAgIG1hc2sgPSAoZGlnaXQpMSA8PCAoZXh0cmFfYml0cyAtIDEpOworICAgIGxvdyA9IHgtPm9iX2RpZ2l0WzBdIHwgaW5leGFjdDsKKyAgICBpZiAobG93ICYgbWFzayAmJiBsb3cgJiAoMyptYXNrLTEpKQorICAgICAgICBsb3cgKz0gbWFzazsKKyAgICB4LT5vYl9kaWdpdFswXSA9IGxvdyAmIH4obWFzay0xVSk7CisKKyAgICAvKiBDb252ZXJ0IHggdG8gYSBkb3VibGUgZHg7IHRoZSBjb252ZXJzaW9uIGlzIGV4YWN0LiAqLworICAgIGR4ID0geC0+b2JfZGlnaXRbLS14X3NpemVdOworICAgIHdoaWxlICh4X3NpemUgPiAwKQorICAgICAgICBkeCA9IGR4ICogUHlMb25nX0JBU0UgKyB4LT5vYl9kaWdpdFstLXhfc2l6ZV07CisgICAgUHlfREVDUkVGKHgpOworCisgICAgLyogQ2hlY2sgd2hldGhlciBsZGV4cCByZXN1bHQgd2lsbCBvdmVyZmxvdyBhIGRvdWJsZS4gKi8KKyAgICBpZiAoc2hpZnQgKyB4X2JpdHMgPj0gREJMX01BWF9FWFAgJiYKKyAgICAgICAgKHNoaWZ0ICsgeF9iaXRzID4gREJMX01BWF9FWFAgfHwgZHggPT0gbGRleHAoMS4wLCAoaW50KXhfYml0cykpKQorICAgICAgICBnb3RvIG92ZXJmbG93OworICAgIHJlc3VsdCA9IGxkZXhwKGR4LCAoaW50KXNoaWZ0KTsKKworICBzdWNjZXNzOgorICAgIFB5X0RFQ1JFRihhKTsKKyAgICBQeV9ERUNSRUYoYik7CisgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShuZWdhdGUgPyAtcmVzdWx0IDogcmVzdWx0KTsKKworICB1bmRlcmZsb3dfb3JfemVybzoKKyAgICBQeV9ERUNSRUYoYSk7CisgICAgUHlfREVDUkVGKGIpOworICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUobmVnYXRlID8gLTAuMCA6IDAuMCk7CisKKyAgb3ZlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICJsb25nL2xvbmcgdG9vIGxhcmdlIGZvciBhIGZsb2F0Iik7CisgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIGRpdmlzaW9uIHJlc3VsdCB0b28gbGFyZ2UgZm9yIGEgZmxvYXQiKTsKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGEpOworICAgIFB5X0RFQ1JFRihiKTsKICAgICByZXR1cm4gTlVMTDsKLQogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjc4Miw3ICszNDEzLDcgQEAKICAgICBpZiAoUHlfU0laRShiKSA8IDApIHsgIC8qIGlmIGV4cG9uZW50IGlzIG5lZ2F0aXZlICovCiAgICAgICAgIGlmIChjKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicG93KCkgMm5kIGFyZ3VtZW50ICIKLSAgICAgICAgICAgICAgICAiY2Fubm90IGJlIG5lZ2F0aXZlIHdoZW4gM3JkIGFyZ3VtZW50IHNwZWNpZmllZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgYmUgbmVnYXRpdmUgd2hlbiAzcmQgYXJndW1lbnQgc3BlY2lmaWVkIik7CiAgICAgICAgICAgICBnb3RvIEVycm9yOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtMjg0OCwyNiArMzQ3OSwyOCBAQAogICAgICAqIGlzIE5VTEwuCiAgICAgICovCiAjZGVmaW5lIFJFRFVDRShYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoYyAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAobF9kaXZtb2QoWCwgYywgTlVMTCwgJnRlbXApIDwgMCkgICAgICAgICAgICBcCi0gICAgICAgICAgICBnb3RvIEVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfWERFQ1JFRihYKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBYID0gdGVtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHRlbXAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGMgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKGxfZGl2bW9kKFgsIGMsIE5VTEwsICZ0ZW1wKSA8IDApICAgICAgICBcCisgICAgICAgICAgICAgICAgZ290byBFcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFB5X1hERUNSRUYoWCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgWCA9IHRlbXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0ZW1wID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKIAogICAgIC8qIE11bHRpcGx5IHR3byB2YWx1ZXMsIHRoZW4gcmVkdWNlIHRoZSByZXN1bHQ6CiAgICAgICAgcmVzdWx0ID0gWCpZICUgYy4gIElmIGMgaXMgTlVMTCwgc2tpcCB0aGUgbW9kLiAqLwotI2RlZmluZSBNVUxUKFgsIFksIHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB0ZW1wID0gKFB5TG9uZ09iamVjdCAqKWxvbmdfbXVsKFgsIFkpOyAgICAgICAgICAgICAgXAotICAgIGlmICh0ZW1wID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdvdG8gRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBQeV9YREVDUkVGKHJlc3VsdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJlc3VsdCA9IHRlbXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdGVtcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBSRURVQ0UocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQorI2RlZmluZSBNVUxUKFgsIFksIHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZW1wID0gKFB5TG9uZ09iamVjdCAqKWxvbmdfbXVsKFgsIFkpOyAgXAorICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZ290byBFcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXN1bHQgPSB0ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZW1wID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRURVQ0UocmVzdWx0KTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKIAogICAgIGlmIChQeV9TSVpFKGIpIDw9IEZJVkVBUllfQ1VUT0ZGKSB7CiAgICAgICAgIC8qIExlZnQtdG8tcmlnaHQgYmluYXJ5IGV4cG9uZW50aWF0aW9uIChIQUMgQWxnb3JpdGhtIDE0Ljc5KSAqLwpAQCAtMjg3NSwxMCArMzUwOCwxMCBAQAogICAgICAgICBmb3IgKGkgPSBQeV9TSVpFKGIpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgICAgIGRpZ2l0IGJpID0gYi0+b2JfZGlnaXRbaV07CiAKLSAgICAgICAgICAgIGZvciAoaiA9IDEgPDwgKFB5TG9uZ19TSElGVC0xKTsgaiAhPSAwOyBqID4+PSAxKSB7Ci0gICAgICAgICAgICAgICAgTVVMVCh6LCB6LCB6KQorICAgICAgICAgICAgZm9yIChqID0gKGRpZ2l0KTEgPDwgKFB5TG9uZ19TSElGVC0xKTsgaiAhPSAwOyBqID4+PSAxKSB7CisgICAgICAgICAgICAgICAgTVVMVCh6LCB6LCB6KTsKICAgICAgICAgICAgICAgICBpZiAoYmkgJiBqKQotICAgICAgICAgICAgICAgICAgICBNVUxUKHosIGEsIHopCisgICAgICAgICAgICAgICAgICAgIE1VTFQoeiwgYSwgeik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yODg3LDcgKzM1MjAsNyBAQAogICAgICAgICBQeV9JTkNSRUYoeik7ICAgICAgICAgICAvKiBzdGlsbCBob2xkcyAxTCAqLwogICAgICAgICB0YWJsZVswXSA9IHo7CiAgICAgICAgIGZvciAoaSA9IDE7IGkgPCAzMjsgKytpKQotICAgICAgICAgICAgTVVMVCh0YWJsZVtpLTFdLCBhLCB0YWJsZVtpXSkKKyAgICAgICAgICAgIE1VTFQodGFibGVbaS0xXSwgYSwgdGFibGVbaV0pOwogCiAgICAgICAgIGZvciAoaSA9IFB5X1NJWkUoYikgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgY29uc3QgZGlnaXQgYmkgPSBiLT5vYl9kaWdpdFtpXTsKQEAgLTI4OTUsOSArMzUyOCw5IEBACiAgICAgICAgICAgICBmb3IgKGogPSBQeUxvbmdfU0hJRlQgLSA1OyBqID49IDA7IGogLT0gNSkgewogICAgICAgICAgICAgICAgIGNvbnN0IGludCBpbmRleCA9IChiaSA+PiBqKSAmIDB4MWY7CiAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IDU7ICsraykKLSAgICAgICAgICAgICAgICAgICAgTVVMVCh6LCB6LCB6KQorICAgICAgICAgICAgICAgICAgICBNVUxUKHosIHosIHopOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgTVVMVCh6LCB0YWJsZVtpbmRleF0sIHopCisgICAgICAgICAgICAgICAgICAgIE1VTFQoeiwgdGFibGVbaW5kZXhdLCB6KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI5MTIsMTMgKzM1NDUsMTMgQEAKICAgICB9CiAgICAgZ290byBEb25lOwogCi0gRXJyb3I6CisgIEVycm9yOgogICAgIGlmICh6ICE9IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHopOwogICAgICAgICB6ID0gTlVMTDsKICAgICB9CiAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gRG9uZToKKyAgRG9uZToKICAgICBpZiAoUHlfU0laRShiKSA+IEZJVkVBUllfQ1VUT0ZGKSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgKytpKQogICAgICAgICAgICAgUHlfWERFQ1JFRih0YWJsZVtpXSk7CkBAIC0yOTc0LDcgKzM2MDcsNyBAQAogc3RhdGljIGludAogbG9uZ19ub256ZXJvKFB5TG9uZ09iamVjdCAqdikKIHsKLSAgICByZXR1cm4gQUJTKFB5X1NJWkUodikpICE9IDA7CisgICAgcmV0dXJuIFB5X1NJWkUodikgIT0gMDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI5ODIsOCArMzYxNSw3IEBACiB7CiAgICAgUHlMb25nT2JqZWN0ICphLCAqYjsKICAgICBQeUxvbmdPYmplY3QgKnogPSBOVUxMOwotICAgIGxvbmcgc2hpZnRieTsKLSAgICBQeV9zc2l6ZV90IG5ld3NpemUsIHdvcmRzaGlmdCwgbG9zaGlmdCwgaGlzaGlmdCwgaSwgajsKKyAgICBQeV9zc2l6ZV90IHNoaWZ0YnksIG5ld3NpemUsIHdvcmRzaGlmdCwgbG9zaGlmdCwgaGlzaGlmdCwgaSwgajsKICAgICBkaWdpdCBsb21hc2ssIGhpbWFzazsKIAogICAgIENPTlZFUlRfQklOT1AoKFB5T2JqZWN0ICopdiwgKFB5T2JqZWN0ICopdywgJmEsICZiKTsKQEAgLTMwMDIsOCArMzYzNCw3IEBACiAgICAgICAgIFB5X0RFQ1JFRihhMik7CiAgICAgfQogICAgIGVsc2UgewotCi0gICAgICAgIHNoaWZ0YnkgPSBQeUxvbmdfQXNMb25nKChQeU9iamVjdCAqKWIpOworICAgICAgICBzaGlmdGJ5ID0gUHlMb25nX0FzU3NpemVfdCgoUHlPYmplY3QgKiliKTsKICAgICAgICAgaWYgKHNoaWZ0YnkgPT0gLTFMICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIHJzaGlmdF9lcnJvcjsKICAgICAgICAgaWYgKHNoaWZ0YnkgPCAwKSB7CkBAIC0zMDMxLDEyICszNjYyLDExIEBACiAgICAgICAgIGZvciAoaSA9IDAsIGogPSB3b3Jkc2hpZnQ7IGkgPCBuZXdzaXplOyBpKyssIGorKykgewogICAgICAgICAgICAgei0+b2JfZGlnaXRbaV0gPSAoYS0+b2JfZGlnaXRbal0gPj4gbG9zaGlmdCkgJiBsb21hc2s7CiAgICAgICAgICAgICBpZiAoaSsxIDwgbmV3c2l6ZSkKLSAgICAgICAgICAgICAgICB6LT5vYl9kaWdpdFtpXSB8PQotICAgICAgICAgICAgICAgICAgKGEtPm9iX2RpZ2l0W2orMV0gPDwgaGlzaGlmdCkgJiBoaW1hc2s7CisgICAgICAgICAgICAgICAgei0+b2JfZGlnaXRbaV0gfD0gKGEtPm9iX2RpZ2l0W2orMV0gPDwgaGlzaGlmdCkgJiBoaW1hc2s7CiAgICAgICAgIH0KICAgICAgICAgeiA9IGxvbmdfbm9ybWFsaXplKHopOwogICAgIH0KLXJzaGlmdF9lcnJvcjoKKyAgcnNoaWZ0X2Vycm9yOgogICAgIFB5X0RFQ1JFRihhKTsKICAgICBQeV9ERUNSRUYoYik7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSB6OwpAQCAtMzA0OSwyNyArMzY3OSwyMSBAQAogICAgIC8qIFRoaXMgdmVyc2lvbiBkdWUgdG8gVGltIFBldGVycyAqLwogICAgIFB5TG9uZ09iamVjdCAqYSwgKmI7CiAgICAgUHlMb25nT2JqZWN0ICp6ID0gTlVMTDsKLSAgICBsb25nIHNoaWZ0Ynk7Ci0gICAgUHlfc3NpemVfdCBvbGRzaXplLCBuZXdzaXplLCB3b3Jkc2hpZnQsIHJlbXNoaWZ0LCBpLCBqOworICAgIFB5X3NzaXplX3Qgc2hpZnRieSwgb2xkc2l6ZSwgbmV3c2l6ZSwgd29yZHNoaWZ0LCByZW1zaGlmdCwgaSwgajsKICAgICB0d29kaWdpdHMgYWNjdW07CiAKICAgICBDT05WRVJUX0JJTk9QKHYsIHcsICZhLCAmYik7CiAKLSAgICBzaGlmdGJ5ID0gUHlMb25nX0FzTG9uZygoUHlPYmplY3QgKiliKTsKKyAgICBzaGlmdGJ5ID0gUHlMb25nX0FzU3NpemVfdCgoUHlPYmplY3QgKiliKTsKICAgICBpZiAoc2hpZnRieSA9PSAtMUwgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7CiAgICAgaWYgKHNoaWZ0YnkgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibmVnYXRpdmUgc2hpZnQgY291bnQiKTsKICAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7CiAgICAgfQotICAgIGlmICgobG9uZykoaW50KXNoaWZ0YnkgIT0gc2hpZnRieSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJvdXRyYWdlb3VzIGxlZnQgc2hpZnQgY291bnQiKTsKLSAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7Ci0gICAgfQogICAgIC8qIHdvcmRzaGlmdCwgcmVtc2hpZnQgPSBkaXZtb2Qoc2hpZnRieSwgUHlMb25nX1NISUZUKSAqLwotICAgIHdvcmRzaGlmdCA9IChpbnQpc2hpZnRieSAvIFB5TG9uZ19TSElGVDsKLSAgICByZW1zaGlmdCAgPSAoaW50KXNoaWZ0YnkgLSB3b3Jkc2hpZnQgKiBQeUxvbmdfU0hJRlQ7CisgICAgd29yZHNoaWZ0ID0gc2hpZnRieSAvIFB5TG9uZ19TSElGVDsKKyAgICByZW1zaGlmdCAgPSBzaGlmdGJ5IC0gd29yZHNoaWZ0ICogUHlMb25nX1NISUZUOwogCiAgICAgb2xkc2l6ZSA9IEFCUyhhLT5vYl9zaXplKTsKICAgICBuZXdzaXplID0gb2xkc2l6ZSArIHdvcmRzaGlmdDsKQEAgLTMwOTMsNzUgKzM3MTcsNzkgQEAKICAgICBlbHNlCiAgICAgICAgIGFzc2VydCghYWNjdW0pOwogICAgIHogPSBsb25nX25vcm1hbGl6ZSh6KTsKLWxzaGlmdF9lcnJvcjoKKyAgbHNoaWZ0X2Vycm9yOgogICAgIFB5X0RFQ1JFRihhKTsKICAgICBQeV9ERUNSRUYoYik7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSB6OwogfQogCisvKiBDb21wdXRlIHR3bydzIGNvbXBsZW1lbnQgb2YgZGlnaXQgdmVjdG9yIGFbMDptXSwgd3JpdGluZyByZXN1bHQgdG8KKyAgIHpbMDptXS4gIFRoZSBkaWdpdCB2ZWN0b3IgYSBuZWVkIG5vdCBiZSBub3JtYWxpemVkLCBidXQgc2hvdWxkIG5vdAorICAgYmUgZW50aXJlbHkgemVyby4gIGEgYW5kIHogbWF5IHBvaW50IHRvIHRoZSBzYW1lIGRpZ2l0IHZlY3Rvci4gKi8KKworc3RhdGljIHZvaWQKK3ZfY29tcGxlbWVudChkaWdpdCAqeiwgZGlnaXQgKmEsIFB5X3NzaXplX3QgbSkKK3sKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgZGlnaXQgY2FycnkgPSAxOworICAgIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIHsKKyAgICAgICAgY2FycnkgKz0gYVtpXSBeIFB5TG9uZ19NQVNLOworICAgICAgICB6W2ldID0gY2FycnkgJiBQeUxvbmdfTUFTSzsKKyAgICAgICAgY2FycnkgPj49IFB5TG9uZ19TSElGVDsKKyAgICB9CisgICAgYXNzZXJ0KGNhcnJ5ID09IDApOworfQogCiAvKiBCaXR3aXNlIGFuZC94b3Ivb3Igb3BlcmF0aW9ucyAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgogbG9uZ19iaXR3aXNlKFB5TG9uZ09iamVjdCAqYSwKICAgICAgICAgICAgICBpbnQgb3AsICAvKiAnJicsICd8JywgJ14nICovCi0gICAgICAgICBQeUxvbmdPYmplY3QgKmIpCisgICAgICAgICAgICAgUHlMb25nT2JqZWN0ICpiKQogewotICAgIGRpZ2l0IG1hc2thLCBtYXNrYjsgLyogMCBvciBQeUxvbmdfTUFTSyAqLwotICAgIGludCBuZWd6OwotICAgIFB5X3NzaXplX3Qgc2l6ZV9hLCBzaXplX2IsIHNpemVfejsKKyAgICBpbnQgbmVnYSwgbmVnYiwgbmVnejsKKyAgICBQeV9zc2l6ZV90IHNpemVfYSwgc2l6ZV9iLCBzaXplX3osIGk7CiAgICAgUHlMb25nT2JqZWN0ICp6OwotICAgIGludCBpOwotICAgIGRpZ2l0IGRpZ2EsIGRpZ2I7Ci0gICAgUHlPYmplY3QgKnY7CiAKLSAgICBpZiAoUHlfU0laRShhKSA8IDApIHsKLSAgICAgICAgYSA9IChQeUxvbmdPYmplY3QgKikgbG9uZ19pbnZlcnQoYSk7Ci0gICAgICAgIGlmIChhID09IE5VTEwpCisgICAgLyogQml0d2lzZSBvcGVyYXRpb25zIGZvciBuZWdhdGl2ZSBudW1iZXJzIG9wZXJhdGUgYXMgdGhvdWdoCisgICAgICAgb24gYSB0d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLiAgU28gY29udmVydCBhcmd1bWVudHMKKyAgICAgICBmcm9tIHNpZ24tbWFnbml0dWRlIHRvIHR3bydzIGNvbXBsZW1lbnQsIGFuZCBjb252ZXJ0IHRoZQorICAgICAgIHJlc3VsdCBiYWNrIHRvIHNpZ24tbWFnbml0dWRlIGF0IHRoZSBlbmQuICovCisKKyAgICAvKiBJZiBhIGlzIG5lZ2F0aXZlLCByZXBsYWNlIGl0IGJ5IGl0cyB0d28ncyBjb21wbGVtZW50LiAqLworICAgIHNpemVfYSA9IEFCUyhQeV9TSVpFKGEpKTsKKyAgICBuZWdhID0gUHlfU0laRShhKSA8IDA7CisgICAgaWYgKG5lZ2EpIHsKKyAgICAgICAgeiA9IF9QeUxvbmdfTmV3KHNpemVfYSk7CisgICAgICAgIGlmICh6ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgbWFza2EgPSBQeUxvbmdfTUFTSzsKKyAgICAgICAgdl9jb21wbGVtZW50KHotPm9iX2RpZ2l0LCBhLT5vYl9kaWdpdCwgc2l6ZV9hKTsKKyAgICAgICAgYSA9IHo7CiAgICAgfQotICAgIGVsc2UgeworICAgIGVsc2UKKyAgICAgICAgLyogS2VlcCByZWZlcmVuY2UgY291bnQgY29uc2lzdGVudC4gKi8KICAgICAgICAgUHlfSU5DUkVGKGEpOwotICAgICAgICBtYXNrYSA9IDA7Ci0gICAgfQotICAgIGlmIChQeV9TSVpFKGIpIDwgMCkgewotICAgICAgICBiID0gKFB5TG9uZ09iamVjdCAqKSBsb25nX2ludmVydChiKTsKLSAgICAgICAgaWYgKGIgPT0gTlVMTCkgeworCisgICAgLyogU2FtZSBmb3IgYi4gKi8KKyAgICBzaXplX2IgPSBBQlMoUHlfU0laRShiKSk7CisgICAgbmVnYiA9IFB5X1NJWkUoYikgPCAwOworICAgIGlmIChuZWdiKSB7CisgICAgICAgIHogPSBfUHlMb25nX05ldyhzaXplX2IpOworICAgICAgICBpZiAoeiA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoYSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBtYXNrYiA9IFB5TG9uZ19NQVNLOworICAgICAgICB2X2NvbXBsZW1lbnQoei0+b2JfZGlnaXQsIGItPm9iX2RpZ2l0LCBzaXplX2IpOworICAgICAgICBiID0gejsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZQogICAgICAgICBQeV9JTkNSRUYoYik7Ci0gICAgICAgIG1hc2tiID0gMDsKLSAgICB9CiAKLSAgICBuZWd6ID0gMDsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSAnXic6Ci0gICAgICAgIGlmIChtYXNrYSAhPSBtYXNrYikgewotICAgICAgICAgICAgbWFza2EgXj0gUHlMb25nX01BU0s7Ci0gICAgICAgICAgICBuZWd6ID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnJic6Ci0gICAgICAgIGlmIChtYXNrYSAmJiBtYXNrYikgewotICAgICAgICAgICAgb3AgPSAnfCc7Ci0gICAgICAgICAgICBtYXNrYSBePSBQeUxvbmdfTUFTSzsKLSAgICAgICAgICAgIG1hc2tiIF49IFB5TG9uZ19NQVNLOwotICAgICAgICAgICAgbmVneiA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ3wnOgotICAgICAgICBpZiAobWFza2EgfHwgbWFza2IpIHsKLSAgICAgICAgICAgIG9wID0gJyYnOwotICAgICAgICAgICAgbWFza2EgXj0gUHlMb25nX01BU0s7Ci0gICAgICAgICAgICBtYXNrYiBePSBQeUxvbmdfTUFTSzsKLSAgICAgICAgICAgIG5lZ3ogPSAtMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAvKiBTd2FwIGEgYW5kIGIgaWYgbmVjZXNzYXJ5IHRvIGVuc3VyZSBzaXplX2EgPj0gc2l6ZV9iLiAqLworICAgIGlmIChzaXplX2EgPCBzaXplX2IpIHsKKyAgICAgICAgeiA9IGE7IGEgPSBiOyBiID0gejsKKyAgICAgICAgc2l6ZV96ID0gc2l6ZV9hOyBzaXplX2EgPSBzaXplX2I7IHNpemVfYiA9IHNpemVfejsKKyAgICAgICAgbmVneiA9IG5lZ2E7IG5lZ2EgPSBuZWdiOyBuZWdiID0gbmVnejsKICAgICB9CiAKICAgICAvKiBKUkg6IFRoZSBvcmlnaW5hbCBsb2dpYyBoZXJlIHdhcyB0byBhbGxvY2F0ZSB0aGUgcmVzdWx0IHZhbHVlICh6KQpAQCAtMzE2OSw0MyArMzc5Nyw3MiBAQAogICAgICAgIHdoZXJlIHRoZSByZXN1bHQgaXMgZ3VhcmFudGVlZCB0byBiZSBzaG9ydGVyIHRoYW4gdGhhdDogQU5EIG9mIHR3bwogICAgICAgIHBvc2l0aXZlcywgT1Igb2YgdHdvIG5lZ2F0aXZlczogdXNlIHRoZSBzaG9ydGVyIG51bWJlci4gIEFORCB3aXRoCiAgICAgICAgbWl4ZWQgc2lnbnM6IHVzZSB0aGUgcG9zaXRpdmUgbnVtYmVyLiAgT1Igd2l0aCBtaXhlZCBzaWduczogdXNlIHRoZQotICAgICAgIG5lZ2F0aXZlIG51bWJlci4gIEFmdGVyIHRoZSB0cmFuc2Zvcm1hdGlvbnMgYWJvdmUsIG9wIHdpbGwgYmUgJyYnCi0gICAgICAgaWZmIG9uZSBvZiB0aGVzZSBjYXNlcyBhcHBsaWVzLCBhbmQgbWFzayB3aWxsIGJlIG5vbi0wIGZvciBvcGVyYW5kcwotICAgICAgIHdob3NlIGxlbmd0aCBzaG91bGQgYmUgaWdub3JlZC4KKyAgICAgICBuZWdhdGl2ZSBudW1iZXIuCiAgICAgKi8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSAnXic6CisgICAgICAgIG5lZ3ogPSBuZWdhIF4gbmVnYjsKKyAgICAgICAgc2l6ZV96ID0gc2l6ZV9hOworICAgICAgICBicmVhazsKKyAgICBjYXNlICcmJzoKKyAgICAgICAgbmVneiA9IG5lZ2EgJiBuZWdiOworICAgICAgICBzaXplX3ogPSBuZWdiID8gc2l6ZV9hIDogc2l6ZV9iOworICAgICAgICBicmVhazsKKyAgICBjYXNlICd8JzoKKyAgICAgICAgbmVneiA9IG5lZ2EgfCBuZWdiOworICAgICAgICBzaXplX3ogPSBuZWdiID8gc2l6ZV9iIDogc2l6ZV9hOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICBzaXplX2EgPSBQeV9TSVpFKGEpOwotICAgIHNpemVfYiA9IFB5X1NJWkUoYik7Ci0gICAgc2l6ZV96ID0gb3AgPT0gJyYnCi0gICAgICAgID8gKG1hc2thCi0gICAgICAgICAgID8gc2l6ZV9iCi0gICAgICAgICAgIDogKG1hc2tiID8gc2l6ZV9hIDogTUlOKHNpemVfYSwgc2l6ZV9iKSkpCi0gICAgICAgIDogTUFYKHNpemVfYSwgc2l6ZV9iKTsKLSAgICB6ID0gX1B5TG9uZ19OZXcoc2l6ZV96KTsKKyAgICAvKiBXZSBhbGxvdyBhbiBleHRyYSBkaWdpdCBpZiB6IGlzIG5lZ2F0aXZlLCB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgIHRoZSBmaW5hbCB0d28ncyBjb21wbGVtZW50IG9mIHogZG9lc24ndCBvdmVyZmxvdy4gKi8KKyAgICB6ID0gX1B5TG9uZ19OZXcoc2l6ZV96ICsgbmVneik7CiAgICAgaWYgKHogPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoYSk7CiAgICAgICAgIFB5X0RFQ1JFRihiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZm9yIChpID0gMDsgaSA8IHNpemVfejsgKytpKSB7Ci0gICAgICAgIGRpZ2EgPSAoaSA8IHNpemVfYSA/IGEtPm9iX2RpZ2l0W2ldIDogMCkgXiBtYXNrYTsKLSAgICAgICAgZGlnYiA9IChpIDwgc2l6ZV9iID8gYi0+b2JfZGlnaXRbaV0gOiAwKSBeIG1hc2tiOwotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgJyYnOiB6LT5vYl9kaWdpdFtpXSA9IGRpZ2EgJiBkaWdiOyBicmVhazsKLSAgICAgICAgY2FzZSAnfCc6IHotPm9iX2RpZ2l0W2ldID0gZGlnYSB8IGRpZ2I7IGJyZWFrOwotICAgICAgICBjYXNlICdeJzogei0+b2JfZGlnaXRbaV0gPSBkaWdhIF4gZGlnYjsgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAvKiBDb21wdXRlIGRpZ2l0cyBmb3Igb3ZlcmxhcCBvZiBhIGFuZCBiLiAqLworICAgIHN3aXRjaChvcCkgeworICAgIGNhc2UgJyYnOgorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZV9iOyArK2kpCisgICAgICAgICAgICB6LT5vYl9kaWdpdFtpXSA9IGEtPm9iX2RpZ2l0W2ldICYgYi0+b2JfZGlnaXRbaV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3wnOgorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZV9iOyArK2kpCisgICAgICAgICAgICB6LT5vYl9kaWdpdFtpXSA9IGEtPm9iX2RpZ2l0W2ldIHwgYi0+b2JfZGlnaXRbaV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ14nOgorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZV9iOyArK2kpCisgICAgICAgICAgICB6LT5vYl9kaWdpdFtpXSA9IGEtPm9iX2RpZ2l0W2ldIF4gYi0+b2JfZGlnaXRbaV07CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIENvcHkgYW55IHJlbWFpbmluZyBkaWdpdHMgb2YgYSwgaW52ZXJ0aW5nIGlmIG5lY2Vzc2FyeS4gKi8KKyAgICBpZiAob3AgPT0gJ14nICYmIG5lZ2IpCisgICAgICAgIGZvciAoOyBpIDwgc2l6ZV96OyArK2kpCisgICAgICAgICAgICB6LT5vYl9kaWdpdFtpXSA9IGEtPm9iX2RpZ2l0W2ldIF4gUHlMb25nX01BU0s7CisgICAgZWxzZSBpZiAoaSA8IHNpemVfeikKKyAgICAgICAgbWVtY3B5KCZ6LT5vYl9kaWdpdFtpXSwgJmEtPm9iX2RpZ2l0W2ldLAorICAgICAgICAgICAgICAgKHNpemVfei1pKSpzaXplb2YoZGlnaXQpKTsKKworICAgIC8qIENvbXBsZW1lbnQgcmVzdWx0IGlmIG5lZ2F0aXZlLiAqLworICAgIGlmIChuZWd6KSB7CisgICAgICAgIFB5X1NJWkUoeikgPSAtKFB5X1NJWkUoeikpOworICAgICAgICB6LT5vYl9kaWdpdFtzaXplX3pdID0gUHlMb25nX01BU0s7CisgICAgICAgIHZfY29tcGxlbWVudCh6LT5vYl9kaWdpdCwgei0+b2JfZGlnaXQsIHNpemVfeisxKTsKICAgICB9CiAKICAgICBQeV9ERUNSRUYoYSk7CiAgICAgUHlfREVDUkVGKGIpOwotICAgIHogPSBsb25nX25vcm1hbGl6ZSh6KTsKLSAgICBpZiAobmVneiA9PSAwKQotICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHo7Ci0gICAgdiA9IGxvbmdfaW52ZXJ0KHopOwotICAgIFB5X0RFQ1JFRih6KTsKLSAgICByZXR1cm4gdjsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopbG9uZ19ub3JtYWxpemUoeik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zMjc5LDEzICszOTM2LDEzIEBACiAgICAgeCA9IFB5TG9uZ19Bc0xvbmcodik7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9QeUxvbmdfQ29weSgoUHlMb25nT2JqZWN0ICopdik7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpKSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHYpOworICAgICAgICAgICAgICAgIHJldHVybiB2OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBfUHlMb25nX0NvcHkoKFB5TG9uZ09iamVjdCAqKXYpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzMzOCw3ICszOTk1LDcgQEAKICAgICAgICAgLyogU2luY2UgUHlMb25nX0Zyb21TdHJpbmcgZG9lc24ndCBoYXZlIGEgbGVuZ3RoIHBhcmFtZXRlciwKICAgICAgICAgICogY2hlY2sgaGVyZSBmb3IgcG9zc2libGUgTlVMcyBpbiB0aGUgc3RyaW5nLiAqLwogICAgICAgICBjaGFyICpzdHJpbmcgPSBQeVN0cmluZ19BU19TVFJJTkcoeCk7Ci0gICAgICAgIGlmIChzdHJsZW4oc3RyaW5nKSAhPSBQeVN0cmluZ19TaXplKHgpKSB7CisgICAgICAgIGlmIChzdHJsZW4oc3RyaW5nKSAhPSAoc2l6ZV90KVB5U3RyaW5nX1NpemUoeCkpIHsKICAgICAgICAgICAgIC8qIGNyZWF0ZSBhIHJlcHIoKSBvZiB0aGUgaW5wdXQgc3RyaW5nLAogICAgICAgICAgICAgICoganVzdCBsaWtlIFB5TG9uZ19Gcm9tU3RyaW5nIGRvZXMuICovCiAgICAgICAgICAgICBQeU9iamVjdCAqc3JlcHI7CkBAIC0zMzQ2LDggKzQwMDMsOCBAQAogICAgICAgICAgICAgaWYgKHNyZXByID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgbG9uZygpIHdpdGggYmFzZSAlZDogJXMiLAotICAgICAgICAgICAgICAgICBiYXNlLCBQeVN0cmluZ19BU19TVFJJTkcoc3JlcHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBsb25nKCkgd2l0aCBiYXNlICVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgUHlTdHJpbmdfQVNfU1RSSU5HKHNyZXByKSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3JlcHIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTMzNjEsNyArNDAxOCw3IEBACiAjZW5kaWYKICAgICBlbHNlIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJsb25nKCkgY2FuJ3QgY29udmVydCBub24tc3RyaW5nIHdpdGggZXhwbGljaXQgYmFzZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcoKSBjYW4ndCBjb252ZXJ0IG5vbi1zdHJpbmcgd2l0aCBleHBsaWNpdCBiYXNlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KQEAgLTM0MDUsOCArNDA2MiwxMyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotbG9uZ19nZXROKFB5TG9uZ09iamVjdCAqdiwgdm9pZCAqY29udGV4dCkgewotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKFB5X2ludHB0cl90KWNvbnRleHQpOworbG9uZ19nZXQwKFB5TG9uZ09iamVjdCAqdiwgdm9pZCAqY29udGV4dCkgeworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbG9uZ19nZXQxKFB5TG9uZ09iamVjdCAqdiwgdm9pZCAqY29udGV4dCkgeworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMUwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMzQ0NCwxMiArNDEwNiw3NCBAQAogewogICAgIFB5X3NzaXplX3QgcmVzOwogCi0gICAgcmVzID0gdi0+b2JfdHlwZS0+dHBfYmFzaWNzaXplOwotICAgIGlmICh2LT5vYl9zaXplICE9IDApCi0gICAgICAgIHJlcyArPSBhYnModi0+b2Jfc2l6ZSkgKiBzaXplb2YoZGlnaXQpOworICAgIHJlcyA9IHYtPm9iX3R5cGUtPnRwX2Jhc2ljc2l6ZSArIEFCUyhQeV9TSVpFKHYpKSpzaXplb2YoZGlnaXQpOwogICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdChyZXMpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorbG9uZ19iaXRfbGVuZ3RoKFB5TG9uZ09iamVjdCAqdikKK3sKKyAgICBQeUxvbmdPYmplY3QgKnJlc3VsdCwgKngsICp5OworICAgIFB5X3NzaXplX3QgbmRpZ2l0cywgbXNkX2JpdHMgPSAwOworICAgIGRpZ2l0IG1zZDsKKworICAgIGFzc2VydCh2ICE9IE5VTEwpOworICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodikpOworCisgICAgbmRpZ2l0cyA9IEFCUyhQeV9TSVpFKHYpKTsKKyAgICBpZiAobmRpZ2l0cyA9PSAwKQorICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoMCk7CisKKyAgICBtc2QgPSB2LT5vYl9kaWdpdFtuZGlnaXRzLTFdOworICAgIHdoaWxlIChtc2QgPj0gMzIpIHsKKyAgICAgICAgbXNkX2JpdHMgKz0gNjsKKyAgICAgICAgbXNkID4+PSA2OworICAgIH0KKyAgICBtc2RfYml0cyArPSAobG9uZykoQml0TGVuZ3RoVGFibGVbbXNkXSk7CisKKyAgICBpZiAobmRpZ2l0cyA8PSBQWV9TU0laRV9UX01BWC9QeUxvbmdfU0hJRlQpCisgICAgICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdCgobmRpZ2l0cy0xKSpQeUxvbmdfU0hJRlQgKyBtc2RfYml0cyk7CisKKyAgICAvKiBleHByZXNzaW9uIGFib3ZlIG1heSBvdmVyZmxvdzsgdXNlIFB5dGhvbiBpbnRlZ2VycyBpbnN0ZWFkICovCisgICAgcmVzdWx0ID0gKFB5TG9uZ09iamVjdCAqKVB5TG9uZ19Gcm9tU3NpemVfdChuZGlnaXRzIC0gMSk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB4ID0gKFB5TG9uZ09iamVjdCAqKVB5TG9uZ19Gcm9tTG9uZyhQeUxvbmdfU0hJRlQpOworICAgIGlmICh4ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgeSA9IChQeUxvbmdPYmplY3QgKilsb25nX211bChyZXN1bHQsIHgpOworICAgIFB5X0RFQ1JFRih4KTsKKyAgICBpZiAoeSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIHJlc3VsdCA9IHk7CisKKyAgICB4ID0gKFB5TG9uZ09iamVjdCAqKVB5TG9uZ19Gcm9tTG9uZygobG9uZyltc2RfYml0cyk7CisgICAgaWYgKHggPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB5ID0gKFB5TG9uZ09iamVjdCAqKWxvbmdfYWRkKHJlc3VsdCwgeCk7CisgICAgUHlfREVDUkVGKHgpOworICAgIGlmICh5ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgcmVzdWx0ID0geTsKKworICAgIHJldHVybiAoUHlPYmplY3QgKilyZXN1bHQ7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5RG9jX1NUUlZBUihsb25nX2JpdF9sZW5ndGhfZG9jLAorImxvbmcuYml0X2xlbmd0aCgpIC0+IGludCBvciBsb25nXG5cCitcblwKK051bWJlciBvZiBiaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgc2VsZiBpbiBiaW5hcnkuXG5cCis+Pj4gYmluKDM3TClcblwKKycwYjEwMDEwMSdcblwKKz4+PiAoMzdMKS5iaXRfbGVuZ3RoKClcblwKKzYiKTsKKwogI2lmIDAKIHN0YXRpYyBQeU9iamVjdCAqCiBsb25nX2lzX2Zpbml0ZShQeU9iamVjdCAqdikKQEAgLTM0NjEsNiArNDE4NSw4IEBACiBzdGF0aWMgUHlNZXRob2REZWYgbG9uZ19tZXRob2RzW10gPSB7CiAgICAgeyJjb25qdWdhdGUiLCAgICAgICAoUHlDRnVuY3Rpb24pbG9uZ19sb25nLCBNRVRIX05PQVJHUywKICAgICAgIlJldHVybnMgc2VsZiwgdGhlIGNvbXBsZXggY29uanVnYXRlIG9mIGFueSBsb25nLiJ9LAorICAgIHsiYml0X2xlbmd0aCIsICAgICAgKFB5Q0Z1bmN0aW9uKWxvbmdfYml0X2xlbmd0aCwgTUVUSF9OT0FSR1MsCisgICAgIGxvbmdfYml0X2xlbmd0aF9kb2N9LAogI2lmIDAKICAgICB7ImlzX2Zpbml0ZSIsICAgICAgIChQeUNGdW5jdGlvbilsb25nX2lzX2Zpbml0ZSwgICAgTUVUSF9OT0FSR1MsCiAgICAgICJSZXR1cm5zIGFsd2F5cyBUcnVlLiJ9LApAQCAtMzQ4MCwxNyArNDIwNiwxNyBAQAogICAgICAidGhlIHJlYWwgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyIiwKICAgICAgTlVMTH0sCiAgICAgeyJpbWFnIiwKLSAgICAgKGdldHRlcilsb25nX2dldE4sIChzZXR0ZXIpTlVMTCwKKyAgICAgKGdldHRlcilsb25nX2dldDAsIChzZXR0ZXIpTlVMTCwKICAgICAgInRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyIiwKLSAgICAgKHZvaWQqKTB9LAorICAgICBOVUxMfSwKICAgICB7Im51bWVyYXRvciIsCiAgICAgIChnZXR0ZXIpbG9uZ19sb25nLCAoc2V0dGVyKU5VTEwsCiAgICAgICJ0aGUgbnVtZXJhdG9yIG9mIGEgcmF0aW9uYWwgbnVtYmVyIGluIGxvd2VzdCB0ZXJtcyIsCiAgICAgIE5VTEx9LAogICAgIHsiZGVub21pbmF0b3IiLAotICAgICAoZ2V0dGVyKWxvbmdfZ2V0TiwgKHNldHRlcilOVUxMLAorICAgICAoZ2V0dGVyKWxvbmdfZ2V0MSwgKHNldHRlcilOVUxMLAogICAgICAidGhlIGRlbm9taW5hdG9yIG9mIGEgcmF0aW9uYWwgbnVtYmVyIGluIGxvd2VzdCB0ZXJtcyIsCi0gICAgICh2b2lkKikxfSwKKyAgICAgTlVMTH0sCiAgICAge05VTEx9ICAvKiBTZW50aW5lbCAqLwogfTsKIApAQCAtMzUwNCw1MiArNDIzMCw1MiBAQAogY29udmVydGluZyBhIG5vbi1zdHJpbmcuIik7CiAKIHN0YXRpYyBQeU51bWJlck1ldGhvZHMgbG9uZ19hc19udW1iZXIgPSB7Ci0gICAgKGJpbmFyeWZ1bmMpICAgICAgICBsb25nX2FkZCwgICAgICAgLypuYl9hZGQqLwotICAgIChiaW5hcnlmdW5jKSAgICAgICAgbG9uZ19zdWIsICAgICAgIC8qbmJfc3VidHJhY3QqLwotICAgIChiaW5hcnlmdW5jKSAgICAgICAgbG9uZ19tdWwsICAgICAgIC8qbmJfbXVsdGlwbHkqLwotICAgICAgICAgICAgbG9uZ19jbGFzc2ljX2RpdiwgLypuYl9kaXZpZGUqLwotICAgICAgICAgICAgbG9uZ19tb2QsICAgICAgICAgICAgICAgICAgIC8qbmJfcmVtYWluZGVyKi8KLSAgICAgICAgICAgIGxvbmdfZGl2bW9kLCAgICAgICAgICAgICAgICAvKm5iX2Rpdm1vZCovCi0gICAgICAgICAgICBsb25nX3BvdywgICAgICAgICAgICAgICAgICAgLypuYl9wb3dlciovCi0gICAgKHVuYXJ5ZnVuYykgICAgICAgICBsb25nX25lZywgICAgICAgLypuYl9uZWdhdGl2ZSovCi0gICAgKHVuYXJ5ZnVuYykgICAgICAgICBsb25nX2xvbmcsICAgICAgLyp0cF9wb3NpdGl2ZSovCi0gICAgKHVuYXJ5ZnVuYykgICAgICAgICBsb25nX2FicywgICAgICAgLyp0cF9hYnNvbHV0ZSovCi0gICAgKGlucXVpcnkpICAgICAgICAgICBsb25nX25vbnplcm8sICAgLyp0cF9ub256ZXJvKi8KLSAgICAodW5hcnlmdW5jKSAgICAgICAgIGxvbmdfaW52ZXJ0LCAgICAvKm5iX2ludmVydCovCi0gICAgICAgICAgICBsb25nX2xzaGlmdCwgICAgICAgICAgICAgICAgLypuYl9sc2hpZnQqLwotICAgIChiaW5hcnlmdW5jKSAgICAgICAgbG9uZ19yc2hpZnQsICAgIC8qbmJfcnNoaWZ0Ki8KLSAgICAgICAgICAgIGxvbmdfYW5kLCAgICAgICAgICAgICAgICAgICAvKm5iX2FuZCovCi0gICAgICAgICAgICBsb25nX3hvciwgICAgICAgICAgICAgICAgICAgLypuYl94b3IqLwotICAgICAgICAgICAgbG9uZ19vciwgICAgICAgICAgICAgICAgICAgIC8qbmJfb3IqLwotICAgICAgICAgICAgbG9uZ19jb2VyY2UsICAgICAgICAgICAgICAgIC8qbmJfY29lcmNlKi8KLSAgICAgICAgICAgIGxvbmdfaW50LCAgICAgICAgICAgICAgICAgICAvKm5iX2ludCovCi0gICAgICAgICAgICBsb25nX2xvbmcsICAgICAgICAgICAgICAgICAgLypuYl9sb25nKi8KLSAgICAgICAgICAgIGxvbmdfZmxvYXQsICAgICAgICAgICAgICAgICAvKm5iX2Zsb2F0Ki8KLSAgICAgICAgICAgIGxvbmdfb2N0LCAgICAgICAgICAgICAgICAgICAvKm5iX29jdCovCi0gICAgICAgICAgICBsb25nX2hleCwgICAgICAgICAgICAgICAgICAgLypuYl9oZXgqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfYWRkICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9zdWJ0cmFjdCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfbXVsdGlwbHkgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2RpdmlkZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfcmVtYWluZGVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9wb3dlciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfbHNoaWZ0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9yc2hpZnQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2FuZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfeG9yICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9vciAqLwotICAgIGxvbmdfZGl2LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2Zsb29yX2RpdmlkZSAqLwotICAgIGxvbmdfdHJ1ZV9kaXZpZGUsICAgICAgICAgICAgICAgICAgIC8qIG5iX3RydWVfZGl2aWRlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9mbG9vcl9kaXZpZGUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3RydWVfZGl2aWRlICovCi0gICAgbG9uZ19sb25nLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5kZXggKi8KKyAgICAoYmluYXJ5ZnVuYylsb25nX2FkZCwgICAgICAgLypuYl9hZGQqLworICAgIChiaW5hcnlmdW5jKWxvbmdfc3ViLCAgICAgICAvKm5iX3N1YnRyYWN0Ki8KKyAgICAoYmluYXJ5ZnVuYylsb25nX211bCwgICAgICAgLypuYl9tdWx0aXBseSovCisgICAgbG9uZ19jbGFzc2ljX2RpdiwgICAgICAgICAgIC8qbmJfZGl2aWRlKi8KKyAgICBsb25nX21vZCwgICAgICAgICAgICAgICAgICAgLypuYl9yZW1haW5kZXIqLworICAgIGxvbmdfZGl2bW9kLCAgICAgICAgICAgICAgICAvKm5iX2Rpdm1vZCovCisgICAgbG9uZ19wb3csICAgICAgICAgICAgICAgICAgIC8qbmJfcG93ZXIqLworICAgICh1bmFyeWZ1bmMpbG9uZ19uZWcsICAgICAgICAvKm5iX25lZ2F0aXZlKi8KKyAgICAodW5hcnlmdW5jKWxvbmdfbG9uZywgICAgICAgLyp0cF9wb3NpdGl2ZSovCisgICAgKHVuYXJ5ZnVuYylsb25nX2FicywgICAgICAgIC8qdHBfYWJzb2x1dGUqLworICAgIChpbnF1aXJ5KWxvbmdfbm9uemVybywgICAgICAvKnRwX25vbnplcm8qLworICAgICh1bmFyeWZ1bmMpbG9uZ19pbnZlcnQsICAgICAvKm5iX2ludmVydCovCisgICAgbG9uZ19sc2hpZnQsICAgICAgICAgICAgICAgIC8qbmJfbHNoaWZ0Ki8KKyAgICAoYmluYXJ5ZnVuYylsb25nX3JzaGlmdCwgICAgLypuYl9yc2hpZnQqLworICAgIGxvbmdfYW5kLCAgICAgICAgICAgICAgICAgICAvKm5iX2FuZCovCisgICAgbG9uZ194b3IsICAgICAgICAgICAgICAgICAgIC8qbmJfeG9yKi8KKyAgICBsb25nX29yLCAgICAgICAgICAgICAgICAgICAgLypuYl9vciovCisgICAgbG9uZ19jb2VyY2UsICAgICAgICAgICAgICAgIC8qbmJfY29lcmNlKi8KKyAgICBsb25nX2ludCwgICAgICAgICAgICAgICAgICAgLypuYl9pbnQqLworICAgIGxvbmdfbG9uZywgICAgICAgICAgICAgICAgICAvKm5iX2xvbmcqLworICAgIGxvbmdfZmxvYXQsICAgICAgICAgICAgICAgICAvKm5iX2Zsb2F0Ki8KKyAgICBsb25nX29jdCwgICAgICAgICAgICAgICAgICAgLypuYl9vY3QqLworICAgIGxvbmdfaGV4LCAgICAgICAgICAgICAgICAgICAvKm5iX2hleCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfYWRkICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2Vfc3VidHJhY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9tdWx0aXBseSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2RpdmlkZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3JlbWFpbmRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3Bvd2VyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfbHNoaWZ0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfcnNoaWZ0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfYW5kICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfeG9yICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2Vfb3IgKi8KKyAgICBsb25nX2RpdiwgICAgICAgICAgICAgICAgICAgLyogbmJfZmxvb3JfZGl2aWRlICovCisgICAgbG9uZ190cnVlX2RpdmlkZSwgICAgICAgICAgIC8qIG5iX3RydWVfZGl2aWRlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfZmxvb3JfZGl2aWRlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfdHJ1ZV9kaXZpZGUgKi8KKyAgICBsb25nX2xvbmcsICAgICAgICAgICAgICAgICAgLyogbmJfaW5kZXggKi8KIH07CiAKIFB5VHlwZU9iamVjdCBQeUxvbmdfVHlwZSA9IHsKICAgICBQeU9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlKQogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Jfc2l6ZSAqLwogICAgICJsb25nIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwotICAgIHNpemVvZihQeUxvbmdPYmplY3QpIC0gc2l6ZW9mKGRpZ2l0KSwgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgb2Zmc2V0b2YoUHlMb25nT2JqZWN0LCBvYl9kaWdpdCksICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KICAgICBzaXplb2YoZGlnaXQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCiAgICAgbG9uZ19kZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwpAQCAtMzU2Nyw3ICs0MjkzLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0NIRUNLVFlQRVMgfAotICAgICAgICBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTLCAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1MsIC8qIHRwX2ZsYWdzICovCiAgICAgbG9uZ19kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMzU4Niw1ICs0MzEyLDU0IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIGxvbmdfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCi0gICAgUHlPYmplY3RfRGVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICBQeU9iamVjdF9EZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgTG9uZ19JbmZvVHlwZTsKKworUHlEb2NfU1RSVkFSKGxvbmdfaW5mb19fZG9jX18sCisic3lzLmxvbmdfaW5mb1xuXAorXG5cCitBIHN0cnVjdCBzZXF1ZW5jZSB0aGF0IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IFB5dGhvbidzXG5cCitpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBpbnRlZ2Vycy4gIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuIik7CisKK3N0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIGxvbmdfaW5mb19maWVsZHNbXSA9IHsKKyAgICB7ImJpdHNfcGVyX2RpZ2l0IiwgInNpemUgb2YgYSBkaWdpdCBpbiBiaXRzIn0sCisgICAgeyJzaXplb2ZfZGlnaXQiLCAic2l6ZSBpbiBieXRlcyBvZiB0aGUgQyB0eXBlIHVzZWQgdG8gcmVwcmVzZW50IGEgZGlnaXQifSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgbG9uZ19pbmZvX2Rlc2MgPSB7CisgICAgInN5cy5sb25nX2luZm8iLCAgIC8qIG5hbWUgKi8KKyAgICBsb25nX2luZm9fX2RvY19fLCAgLyogZG9jICovCisgICAgbG9uZ19pbmZvX2ZpZWxkcywgIC8qIGZpZWxkcyAqLworICAgIDIgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZmllbGRzICovCit9OworCitQeU9iamVjdCAqCitQeUxvbmdfR2V0SW5mbyh2b2lkKQoreworICAgIFB5T2JqZWN0KiBsb25nX2luZm87CisgICAgaW50IGZpZWxkID0gMDsKKyAgICBsb25nX2luZm8gPSBQeVN0cnVjdFNlcXVlbmNlX05ldygmTG9uZ19JbmZvVHlwZSk7CisgICAgaWYgKGxvbmdfaW5mbyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGxvbmdfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5SW50X0Zyb21Mb25nKFB5TG9uZ19TSElGVCkpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0obG9uZ19pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlJbnRfRnJvbUxvbmcoc2l6ZW9mKGRpZ2l0KSkpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0NMRUFSKGxvbmdfaW5mbyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gbG9uZ19pbmZvOworfQorCitpbnQKK19QeUxvbmdfSW5pdCh2b2lkKQoreworICAgIC8qIGluaXRpYWxpemUgbG9uZ19pbmZvICovCisgICAgaWYgKExvbmdfSW5mb1R5cGUudHBfbmFtZSA9PSAwKQorICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZMb25nX0luZm9UeXBlLCAmbG9uZ19pbmZvX2Rlc2MpOworICAgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9tZW1vcnlvYmplY3QuYyBiL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJhYzI2NgotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKQEAgLTAsMCArMSw4NDIgQEAKKworLyogTWVtb3J5dmlldyBvYmplY3QgaW1wbGVtZW50YXRpb24gKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorCitzdGF0aWMgUHlfc3NpemVfdAorZ2V0X3NoYXBlMChQeV9idWZmZXIgKmJ1ZikKK3sKKyAgICBpZiAoYnVmLT5zaGFwZSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gYnVmLT5zaGFwZVswXTsKKyAgICBpZiAoYnVmLT5uZGltID09IDApCisgICAgICAgIHJldHVybiAxOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICJleHBvcnRlZCBidWZmZXIgZG9lcyBub3QgaGF2ZSBhbnkgc2hhcGUgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCAiCisgICAgICAgICJ0byBpdCIpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQKK2R1cF9idWZmZXIoUHlfYnVmZmVyICpkZXN0LCBQeV9idWZmZXIgKnNyYykKK3sKKyAgICAqZGVzdCA9ICpzcmM7CisgICAgaWYgKHNyYy0+bmRpbSA9PSAxICYmIHNyYy0+c2hhcGUgIT0gTlVMTCkgeworICAgICAgICBkZXN0LT5zaGFwZSA9ICYoZGVzdC0+c21hbGx0YWJsZVswXSk7CisgICAgICAgIGRlc3QtPnNoYXBlWzBdID0gZ2V0X3NoYXBlMChzcmMpOworICAgIH0KKyAgICBpZiAoc3JjLT5uZGltID09IDEgJiYgc3JjLT5zdHJpZGVzICE9IE5VTEwpIHsKKyAgICAgICAgZGVzdC0+c3RyaWRlcyA9ICYoZGVzdC0+c21hbGx0YWJsZVsxXSk7CisgICAgICAgIGRlc3QtPnN0cmlkZXNbMF0gPSBzcmMtPnN0cmlkZXNbMF07CisgICAgfQorfQorCitzdGF0aWMgaW50CittZW1vcnlfZ2V0YnVmKFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZiwgUHlfYnVmZmVyICp2aWV3LCBpbnQgZmxhZ3MpCit7CisgICAgaW50IHJlcyA9IDA7CisgICAgaWYgKHNlbGYtPnZpZXcub2JqICE9IE5VTEwpCisgICAgICAgIHJlcyA9IFB5T2JqZWN0X0dldEJ1ZmZlcihzZWxmLT52aWV3Lm9iaiwgdmlldywgZmxhZ3MpOworICAgIGlmICh2aWV3KQorICAgICAgICBkdXBfYnVmZmVyKHZpZXcsICZzZWxmLT52aWV3KTsKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAorbWVtb3J5X3JlbGVhc2VidWYoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKnZpZXcpCit7CisgICAgUHlCdWZmZXJfUmVsZWFzZSh2aWV3KTsKK30KKworUHlEb2NfU1RSVkFSKG1lbW9yeV9kb2MsCisibWVtb3J5dmlldyhvYmplY3QpXG5cCitcblwKK0NyZWF0ZSBhIG5ldyBtZW1vcnl2aWV3IG9iamVjdCB3aGljaCByZWZlcmVuY2VzIHRoZSBnaXZlbiBvYmplY3QuIik7CisKK1B5T2JqZWN0ICoKK1B5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKFB5X2J1ZmZlciAqaW5mbykKK3sKKyAgICBQeU1lbW9yeVZpZXdPYmplY3QgKm12aWV3OworCisgICAgbXZpZXcgPSAoUHlNZW1vcnlWaWV3T2JqZWN0ICopCisgICAgICAgIFB5T2JqZWN0X0dDX05ldyhQeU1lbW9yeVZpZXdPYmplY3QsICZQeU1lbW9yeVZpZXdfVHlwZSk7CisgICAgaWYgKG12aWV3ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG12aWV3LT5iYXNlID0gTlVMTDsKKyAgICBkdXBfYnVmZmVyKCZtdmlldy0+dmlldywgaW5mbyk7CisgICAgLyogTk9URTogbXZpZXctPnZpZXcub2JqIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZWYnZWQgYXMKKyAgICAgICBwYXJ0IG9mIFB5QnVmZmVyX0ZpbGxJbmZvKCkuICovCisgICAgX1B5T2JqZWN0X0dDX1RSQUNLKG12aWV3KTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopbXZpZXc7Cit9CisKK1B5T2JqZWN0ICoKK1B5TWVtb3J5Vmlld19Gcm9tT2JqZWN0KFB5T2JqZWN0ICpiYXNlKQoreworICAgIFB5TWVtb3J5Vmlld09iamVjdCAqbXZpZXc7CisgICAgUHlfYnVmZmVyIHZpZXc7CisKKyAgICBpZiAoIVB5T2JqZWN0X0NoZWNrQnVmZmVyKGJhc2UpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiY2Fubm90IG1ha2UgbWVtb3J5IHZpZXcgYmVjYXVzZSBvYmplY3QgZG9lcyAiCisgICAgICAgICAgICAibm90IGhhdmUgdGhlIGJ1ZmZlciBpbnRlcmZhY2UiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihiYXNlLCAmdmlldywgUHlCVUZfRlVMTF9STykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG12aWV3ID0gKFB5TWVtb3J5Vmlld09iamVjdCAqKVB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKCZ2aWV3KTsKKyAgICBpZiAobXZpZXcgPT0gTlVMTCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbXZpZXctPmJhc2UgPSBiYXNlOworICAgIFB5X0lOQ1JFRihiYXNlKTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopbXZpZXc7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfbmV3KFB5VHlwZU9iamVjdCAqc3VidHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJvYmplY3QiLCAwfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPOm1lbW9yeXZpZXciLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIFB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0KG9iaik7Cit9CisKKworc3RhdGljIHZvaWQKK19zdHJpZGVkX2NvcHlfbmQoY2hhciAqZGVzdCwgY2hhciAqc3JjLCBpbnQgbmQsIFB5X3NzaXplX3QgKnNoYXBlLAorICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpzdHJpZGVzLCBQeV9zc2l6ZV90IGl0ZW1zaXplLCBjaGFyIGZvcnQpCit7CisgICAgaW50IGs7CisgICAgUHlfc3NpemVfdCBvdXRzdHJpZGU7CisKKyAgICBpZiAobmQ9PTApIHsKKyAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgaXRlbXNpemUpOworICAgIH0KKyAgICBlbHNlIGlmIChuZCA9PSAxKSB7CisgICAgICAgIGZvciAoayA9IDA7IGs8c2hhcGVbMF07IGsrKykgeworICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgaXRlbXNpemUpOworICAgICAgICAgICAgZGVzdCArPSBpdGVtc2l6ZTsKKyAgICAgICAgICAgIHNyYyArPSBzdHJpZGVzWzBdOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoZm9ydCA9PSAnRicpIHsKKyAgICAgICAgICAgIC8qIENvcHkgZmlyc3QgZGltZW5zaW9uIGZpcnN0LAorICAgICAgICAgICAgICAgc2Vjb25kIGRpbWVuc2lvbiBzZWNvbmQsIGV0Yy4uLgorICAgICAgICAgICAgICAgU2V0IHVwIHRoZSByZWN1cnNpdmUgbG9vcCBiYWNrd2FyZHMgc28gdGhhdCBmaW5hbAorICAgICAgICAgICAgICAgZGltZW5zaW9uIGlzIGFjdHVhbGx5IGNvcGllZCBsYXN0LgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG91dHN0cmlkZSA9IGl0ZW1zaXplOworICAgICAgICAgICAgZm9yIChrPTE7IGs8bmQtMTtrKyspIHsKKyAgICAgICAgICAgICAgICBvdXRzdHJpZGUgKj0gc2hhcGVba107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGs9MDsgazxzaGFwZVtuZC0xXTsgaysrKSB7CisgICAgICAgICAgICAgICAgX3N0cmlkZWRfY29weV9uZChkZXN0LCBzcmMsIG5kLTEsIHNoYXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlcywgaXRlbXNpemUsIGZvcnQpOworICAgICAgICAgICAgICAgIGRlc3QgKz0gb3V0c3RyaWRlOworICAgICAgICAgICAgICAgIHNyYyArPSBzdHJpZGVzW25kLTFdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBDb3B5IGxhc3QgZGltZW5zaW9uIGZpcnN0LAorICAgICAgICAgICAgICAgc2Vjb25kLXRvLWxhc3QgZGltZW5zaW9uIHNlY29uZCwgZXRjLgorICAgICAgICAgICAgICAgU2V0IHVwIHRoZSByZWN1cnNpb24gc28gdGhhdCB0aGUKKyAgICAgICAgICAgICAgIGZpcnN0IGRpbWVuc2lvbiBpcyBjb3BpZWQgbGFzdAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG91dHN0cmlkZSA9IGl0ZW1zaXplOworICAgICAgICAgICAgZm9yIChrPTE7IGsgPCBuZDsgaysrKSB7CisgICAgICAgICAgICAgICAgb3V0c3RyaWRlICo9IHNoYXBlW2tdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChrPTA7IGs8c2hhcGVbMF07IGsrKykgeworICAgICAgICAgICAgICAgIF9zdHJpZGVkX2NvcHlfbmQoZGVzdCwgc3JjLCBuZC0xLCBzaGFwZSsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlcysxLCBpdGVtc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcnQpOworICAgICAgICAgICAgICAgIGRlc3QgKz0gb3V0c3RyaWRlOworICAgICAgICAgICAgICAgIHNyYyArPSBzdHJpZGVzWzBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybjsKK30KKworc3RhdGljIGludAorX2luZGlyZWN0X2NvcHlfbmQoY2hhciAqZGVzdCwgUHlfYnVmZmVyICp2aWV3LCBjaGFyIGZvcnQpCit7CisgICAgUHlfc3NpemVfdCAqaW5kaWNlczsKKyAgICBpbnQgazsKKyAgICBQeV9zc2l6ZV90IGVsZW1lbnRzOworICAgIGNoYXIgKnB0cjsKKyAgICB2b2lkICgqZnVuYykoaW50LCBQeV9zc2l6ZV90ICosIGNvbnN0IFB5X3NzaXplX3QgKik7CisKKyAgICBpZiAodmlldy0+bmRpbSA+IFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKFB5X3NzaXplX3QpKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpbmRpY2VzID0gKFB5X3NzaXplX3QgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5X3NzaXplX3QpKnZpZXctPm5kaW0pOworICAgIGlmIChpbmRpY2VzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBmb3IgKGs9MDsgazx2aWV3LT5uZGltO2srKykgeworICAgICAgICBpbmRpY2VzW2tdID0gMDsKKyAgICB9CisKKyAgICBlbGVtZW50cyA9IDE7CisgICAgZm9yIChrPTA7IGs8dmlldy0+bmRpbTsgaysrKSB7CisgICAgICAgIGVsZW1lbnRzICo9IHZpZXctPnNoYXBlW2tdOworICAgIH0KKyAgICBpZiAoZm9ydCA9PSAnRicpIHsKKyAgICAgICAgZnVuYyA9IF9QeV9hZGRfb25lX3RvX2luZGV4X0Y7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmdW5jID0gX1B5X2FkZF9vbmVfdG9faW5kZXhfQzsKKyAgICB9CisgICAgd2hpbGUgKGVsZW1lbnRzLS0pIHsKKyAgICAgICAgZnVuYyh2aWV3LT5uZGltLCBpbmRpY2VzLCB2aWV3LT5zaGFwZSk7CisgICAgICAgIHB0ciA9IFB5QnVmZmVyX0dldFBvaW50ZXIodmlldywgaW5kaWNlcyk7CisgICAgICAgIG1lbWNweShkZXN0LCBwdHIsIHZpZXctPml0ZW1zaXplKTsKKyAgICAgICAgZGVzdCArPSB2aWV3LT5pdGVtc2l6ZTsKKyAgICB9CisKKyAgICBQeU1lbV9GcmVlKGluZGljZXMpOworICAgIHJldHVybiAwOworfQorCisvKgorICAgR2V0IGEgdGhlIGRhdGEgZnJvbSBhbiBvYmplY3QgYXMgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSAoaW4KKyAgIGVpdGhlciAnQycgb3IgJ0Ynb3J0cmFuIG9yZGVyKSBldmVuIGlmIGl0IG1lYW5zIGNvcHlpbmcgaXQgaW50byBhCisgICBzZXBhcmF0ZSBtZW1vcnkgYXJlYS4KKworICAgUmV0dXJucyBhIG5ldyByZWZlcmVuY2UgdG8gYSBNZW1vcnkgdmlldyBvYmplY3QuICBJZiBubyBjb3B5IGlzIG5lZWRlZCwKKyAgIHRoZSBtZW1vcnkgdmlldyBvYmplY3QgcG9pbnRzIHRvIHRoZSBvcmlnaW5hbCBtZW1vcnkgYW5kIGhvbGRzIGEKKyAgIGxvY2sgb24gdGhlIG9yaWdpbmFsLiAgSWYgYSBjb3B5IGlzIG5lZWRlZCwgdGhlbiB0aGUgbWVtb3J5IHZpZXcgb2JqZWN0CisgICBwb2ludHMgdG8gYSBicmFuZC1uZXcgQnl0ZXMgb2JqZWN0IChhbmQgaG9sZHMgYSBtZW1vcnkgbG9jayBvbiBpdCkuCisKKyAgIGJ1ZmZlcnR5cGUKKworICAgUHlCVUZfUkVBRCAgYnVmZmVyIG9ubHkgbmVlZHMgdG8gYmUgcmVhZC1vbmx5CisgICBQeUJVRl9XUklURSBidWZmZXIgbmVlZHMgdG8gYmUgd3JpdGFibGUgKGdpdmUgZXJyb3IgaWYgbm90IGNvbnRpZ3VvdXMpCisgICBQeUJVRl9TSEFET1cgYnVmZmVyIG5lZWRzIHRvIGJlIHdyaXRhYmxlIHNvIHNoYWRvdyBpdCB3aXRoCisgICAgICAgICAgICAgICAgYSBjb250aWd1b3VzIGJ1ZmZlciBpZiBpdCBpcyBub3QuIFRoZSB2aWV3IHdpbGwgcG9pbnQgdG8KKyAgICAgICAgICAgICAgICB0aGUgc2hhZG93IGJ1ZmZlciB3aGljaCBjYW4gYmUgd3JpdHRlbiB0byBhbmQgdGhlbgorICAgICAgICAgICAgICAgIHdpbGwgYmUgY29waWVkIGJhY2sgaW50byB0aGUgb3RoZXIgYnVmZmVyIHdoZW4gdGhlIG1lbW9yeQorICAgICAgICAgICAgICAgIHZpZXcgaXMgZGUtYWxsb2NhdGVkLiAgV2hpbGUgdGhlIHNoYWRvdyBidWZmZXIgaXMKKyAgICAgICAgICAgICAgICBiZWluZyB1c2VkLCBpdCB3aWxsIGhhdmUgYW4gZXhjbHVzaXZlIHdyaXRlIGxvY2sgb24KKyAgICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgYnVmZmVyLgorICovCisKK1B5T2JqZWN0ICoKK1B5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzKFB5T2JqZWN0ICpvYmosIGludCBidWZmZXJ0eXBlLCBjaGFyIGZvcnQpCit7CisgICAgUHlNZW1vcnlWaWV3T2JqZWN0ICptZW07CisgICAgUHlPYmplY3QgKmJ5dGVzOworICAgIFB5X2J1ZmZlciAqdmlldzsKKyAgICBpbnQgZmxhZ3M7CisgICAgY2hhciAqZGVzdDsKKworICAgIGlmICghUHlPYmplY3RfQ2hlY2tCdWZmZXIob2JqKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBkb2VzIG5vdCBoYXZlIHRoZSBidWZmZXIgaW50ZXJmYWNlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1lbSA9IFB5T2JqZWN0X0dDX05ldyhQeU1lbW9yeVZpZXdPYmplY3QsICZQeU1lbW9yeVZpZXdfVHlwZSk7CisgICAgaWYgKG1lbSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHZpZXcgPSAmbWVtLT52aWV3OworICAgIGZsYWdzID0gUHlCVUZfRlVMTF9STzsKKyAgICBzd2l0Y2goYnVmZmVydHlwZSkgeworICAgIGNhc2UgUHlCVUZfV1JJVEU6CisgICAgICAgIGZsYWdzID0gUHlCVUZfRlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihvYmosIHZpZXcsIGZsYWdzKSAhPSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihtZW0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoUHlCdWZmZXJfSXNDb250aWd1b3VzKHZpZXcsIGZvcnQpKSB7CisgICAgICAgIC8qIG5vIGNvcHkgbmVlZGVkICovCisgICAgICAgIFB5X0lOQ1JFRihvYmopOworICAgICAgICBtZW0tPmJhc2UgPSBvYmo7CisgICAgICAgIF9QeU9iamVjdF9HQ19UUkFDSyhtZW0pOworICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopbWVtOworICAgIH0KKyAgICAvKiBvdGhlcndpc2UgYSBjb3B5IGlzIG5lZWRlZCAqLworICAgIGlmIChidWZmZXJ0eXBlID09IFB5QlVGX1dSSVRFKSB7CisgICAgICAgIFB5X0RFQ1JFRihtZW0pOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQnVmZmVyRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGFibGUgY29udGlndW91cyBidWZmZXIgcmVxdWVzdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgYSBub24tY29udGlndW91c29iamVjdC4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3LT5sZW4pOworICAgIGlmIChieXRlcyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihtZW0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZGVzdCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKTsKKyAgICAvKiBkaWZmZXJlbnQgY29weWluZyBzdHJhdGVneSBkZXBlbmRpbmcgb24gd2hldGhlcgorICAgICAgIG9yIG5vdCBhbnkgcG9pbnRlciBkZS1yZWZlcmVuY2luZyBpcyBuZWVkZWQKKyAgICAqLworICAgIC8qIHN0cmlkZWQgb3IgaW4tZGlyZWN0IGNvcHkgKi8KKyAgICBpZiAodmlldy0+c3Vib2Zmc2V0cz09TlVMTCkgeworICAgICAgICBfc3RyaWRlZF9jb3B5X25kKGRlc3QsIHZpZXctPmJ1Ziwgdmlldy0+bmRpbSwgdmlldy0+c2hhcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy0+c3RyaWRlcywgdmlldy0+aXRlbXNpemUsIGZvcnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKF9pbmRpcmVjdF9jb3B5X25kKGRlc3QsIHZpZXcsIGZvcnQpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtZW0pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGJ1ZmZlcnR5cGUgPT0gUHlCVUZfU0hBRE9XKSB7CisgICAgICAgIC8qIHJldHVybiBhIHNoYWRvd2VkIG1lbW9yeS12aWV3IG9iamVjdCAqLworICAgICAgICB2aWV3LT5idWYgPSBkZXN0OworICAgICAgICBtZW0tPmJhc2UgPSBQeVR1cGxlX1BhY2soMiwgb2JqLCBieXRlcyk7CisgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CisgICAgICAgIGlmIChtZW0tPmJhc2UgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKG1lbSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSh2aWV3KTsgIC8qIFhYWCA/ICovCisgICAgICAgIC8qIHN0ZWFsIHRoZSByZWZlcmVuY2UgKi8KKyAgICAgICAgbWVtLT5iYXNlID0gYnl0ZXM7CisgICAgfQorICAgIF9QeU9iamVjdF9HQ19UUkFDSyhtZW0pOworICAgIHJldHVybiAoUHlPYmplY3QgKiltZW07Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKK21lbW9yeV9mb3JtYXRfZ2V0KFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhzZWxmLT52aWV3LmZvcm1hdCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfaXRlbXNpemVfZ2V0KFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPnZpZXcuaXRlbXNpemUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX0ludFR1cGxlRnJvbVNzaXpldChpbnQgbGVuLCBQeV9zc2l6ZV90ICp2YWxzKQoreworICAgIGludCBpOworICAgIFB5T2JqZWN0ICpvOworICAgIFB5T2JqZWN0ICppbnRUdXBsZTsKKworICAgIGlmICh2YWxzID09IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisgICAgaW50VHVwbGUgPSBQeVR1cGxlX05ldyhsZW4pOworICAgIGlmICghaW50VHVwbGUpIHJldHVybiBOVUxMOworICAgIGZvcihpPTA7IGk8bGVuOyBpKyspIHsKKyAgICAgICAgbyA9IFB5TG9uZ19Gcm9tU3NpemVfdCh2YWxzW2ldKTsKKyAgICAgICAgaWYgKCFvKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoaW50VHVwbGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShpbnRUdXBsZSwgaSwgbyk7CisgICAgfQorICAgIHJldHVybiBpbnRUdXBsZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK21lbW9yeV9zaGFwZV9nZXQoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBfSW50VHVwbGVGcm9tU3NpemV0KHNlbGYtPnZpZXcubmRpbSwgc2VsZi0+dmlldy5zaGFwZSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfc3RyaWRlc19nZXQoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBfSW50VHVwbGVGcm9tU3NpemV0KHNlbGYtPnZpZXcubmRpbSwgc2VsZi0+dmlldy5zdHJpZGVzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK21lbW9yeV9zdWJvZmZzZXRzX2dldChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIF9JbnRUdXBsZUZyb21Tc2l6ZXQoc2VsZi0+dmlldy5uZGltLCBzZWxmLT52aWV3LnN1Ym9mZnNldHMpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWVtb3J5X3JlYWRvbmx5X2dldChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhzZWxmLT52aWV3LnJlYWRvbmx5KTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK21lbW9yeV9uZGltX2dldChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT52aWV3Lm5kaW0pOworfQorCitzdGF0aWMgUHlHZXRTZXREZWYgbWVtb3J5X2dldHNldGxpc3RbXSA9eworICAgIHsiZm9ybWF0IiwgICAgICAgICAgKGdldHRlciltZW1vcnlfZm9ybWF0X2dldCwgICAgICBOVUxMLCBOVUxMfSwKKyAgICB7Iml0ZW1zaXplIiwgICAgICAgIChnZXR0ZXIpbWVtb3J5X2l0ZW1zaXplX2dldCwgICAgTlVMTCwgTlVMTH0sCisgICAgeyJzaGFwZSIsICAgICAgICAgICAoZ2V0dGVyKW1lbW9yeV9zaGFwZV9nZXQsICAgICAgIE5VTEwsIE5VTEx9LAorICAgIHsic3RyaWRlcyIsICAgICAgICAgKGdldHRlciltZW1vcnlfc3RyaWRlc19nZXQsICAgICBOVUxMLCBOVUxMfSwKKyAgICB7InN1Ym9mZnNldHMiLCAgICAgIChnZXR0ZXIpbWVtb3J5X3N1Ym9mZnNldHNfZ2V0LCAgTlVMTCwgTlVMTH0sCisgICAgeyJyZWFkb25seSIsICAgICAgICAoZ2V0dGVyKW1lbW9yeV9yZWFkb25seV9nZXQsICAgIE5VTEwsIE5VTEx9LAorICAgIHsibmRpbSIsICAgICAgICAgICAgKGdldHRlciltZW1vcnlfbmRpbV9nZXQsICAgICAgICBOVUxMLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sCit9OworCisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfdG9ieXRlcyhQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCit7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoKFB5T2JqZWN0ICopc2VsZiwgJnZpZXcsIFB5QlVGX1NJTVBMRSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4pOworICAgIFB5QnVmZmVyX1RvQ29udGlndW91cyhQeUJ5dGVzX0FTX1NUUklORyhyZXMpLCAmdmlldywgdmlldy5sZW4sICdDJyk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgcmV0dXJuIHJlczsKK30KKworLyogVE9ETzogcmV3cml0ZSB0aGlzIGZ1bmN0aW9uIHVzaW5nIHRoZSBzdHJ1Y3QgbW9kdWxlIHRvIHVucGFjaworICAgZWFjaCBidWZmZXIgaXRlbSAqLworCitzdGF0aWMgUHlPYmplY3QgKgorbWVtb3J5X3RvbGlzdChQeU1lbW9yeVZpZXdPYmplY3QgKm1lbSwgUHlPYmplY3QgKm5vYXJncykKK3sKKyAgICBQeV9idWZmZXIgKnZpZXcgPSAmKG1lbS0+dmlldyk7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5T2JqZWN0ICpyZXMsICppdGVtOworICAgIGNoYXIgKmJ1ZjsKKworICAgIGlmIChzdHJjbXAodmlldy0+Zm9ybWF0LCAiQiIpIHx8IHZpZXctPml0ZW1zaXplICE9IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsIAorICAgICAgICAgICAgICAgICJ0b2xpc3QoKSBvbmx5IHN1cHBvcnRzIGJ5dGUgdmlld3MiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICh2aWV3LT5uZGltICE9IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsIAorICAgICAgICAgICAgICAgICJ0b2xpc3QoKSBvbmx5IHN1cHBvcnRzIG9uZS1kaW1lbnNpb25hbCBvYmplY3RzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXMgPSBQeUxpc3RfTmV3KHZpZXctPmxlbik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBidWYgPSB2aWV3LT5idWY7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXctPmxlbjsgaSsrKSB7CisgICAgICAgIGl0ZW0gPSBQeUludF9Gcm9tTG9uZygodW5zaWduZWQgY2hhcikgKmJ1Zik7CisgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHJlcywgaSwgaXRlbSk7CisgICAgICAgIGJ1ZisrOworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgbWVtb3J5X21ldGhvZHNbXSA9IHsKKyAgICB7InRvYnl0ZXMiLCAoUHlDRnVuY3Rpb24pbWVtb3J5X3RvYnl0ZXMsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7InRvbGlzdCIsIChQeUNGdW5jdGlvbiltZW1vcnlfdG9saXN0LCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworCitzdGF0aWMgdm9pZAorbWVtb3J5X2RlYWxsb2MoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQoreworICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOworICAgIGlmIChzZWxmLT52aWV3Lm9iaiAhPSBOVUxMKSB7CisgICAgICAgIGlmIChzZWxmLT5iYXNlICYmIFB5VHVwbGVfQ2hlY2soc2VsZi0+YmFzZSkpIHsKKyAgICAgICAgICAgIC8qIFNwZWNpYWwgY2FzZSB3aGVuIGZpcnN0IGVsZW1lbnQgaXMgZ2VuZXJpYyBvYmplY3QKKyAgICAgICAgICAgICAgIHdpdGggYnVmZmVyIGludGVyZmFjZSBhbmQgdGhlIHNlY29uZCBlbGVtZW50IGlzIGEKKyAgICAgICAgICAgICAgIGNvbnRpZ3VvdXMgInNoYWRvdyIgdGhhdCBtdXN0IGJlIGNvcGllZCBiYWNrIGludG8KKyAgICAgICAgICAgICAgIHRoZSBkYXRhIGFyZWF5IG9mIHRoZSBmaXJzdCB0dXBsZSBlbGVtZW50IGJlZm9yZQorICAgICAgICAgICAgICAgcmVsZWFzaW5nIHRoZSBidWZmZXIgb24gdGhlIGZpcnN0IGVsZW1lbnQuCisgICAgICAgICAgICAqLworCisgICAgICAgICAgICBQeU9iamVjdF9Db3B5RGF0YShQeVR1cGxlX0dFVF9JVEVNKHNlbGYtPmJhc2UsMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9JVEVNKHNlbGYtPmJhc2UsMSkpOworCisgICAgICAgICAgICAvKiBUaGUgdmlldyBtZW1iZXIgc2hvdWxkIGhhdmUgcmVhZG9ubHkgPT0gLTEgaW4KKyAgICAgICAgICAgICAgIHRoaXMgaW5zdGFuY2UgaW5kaWNhdGluZyB0aGF0IHRoZSBtZW1vcnkgY2FuCisgICAgICAgICAgICAgICBiZSAibG9ja2VkIiBhbmQgd2FzIGxvY2tlZCBhbmQgd2lsbCBiZSB1bmxvY2tlZAorICAgICAgICAgICAgICAgYWdhaW4gYWZ0ZXIgdGhpcyBjYWxsLgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJihzZWxmLT52aWV3KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCYoc2VsZi0+dmlldykpOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKHNlbGYtPmJhc2UpOworICAgIH0KKyAgICBQeU9iamVjdF9HQ19EZWwoc2VsZik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfcmVwcihQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxtZW1vcnkgYXQgJXA+Iiwgc2VsZik7Cit9CisKKy8qIFNlcXVlbmNlIG1ldGhvZHMgKi8KK3N0YXRpYyBQeV9zc2l6ZV90CittZW1vcnlfbGVuZ3RoKFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gZ2V0X3NoYXBlMCgmc2VsZi0+dmlldyk7Cit9CisKKy8qIEFsdGVybmF0ZSB2ZXJzaW9uIG9mIG1lbW9yeV9zdWJjcmlwdCB0aGF0IG9ubHkgYWNjZXB0cyBpbmRpY2VzLgorICAgVXNlZCBieSBQeVNlcUl0ZXJfTmV3KCkuCisqLworc3RhdGljIFB5T2JqZWN0ICoKK21lbW9yeV9pdGVtKFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZiwgUHlfc3NpemVfdCByZXN1bHQpCit7CisgICAgUHlfYnVmZmVyICp2aWV3ID0gJihzZWxmLT52aWV3KTsKKworICAgIGlmICh2aWV3LT5uZGltID09IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBpbmRleGluZyBvZiAwLWRpbSBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICh2aWV3LT5uZGltID09IDEpIHsKKyAgICAgICAgLyogUmV0dXJuIGEgYnl0ZXMgb2JqZWN0ICovCisgICAgICAgIGNoYXIgKnB0cjsKKyAgICAgICAgcHRyID0gKGNoYXIgKil2aWV3LT5idWY7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gZ2V0X3NoYXBlMCh2aWV3KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHJlc3VsdCA8IDApIHx8IChyZXN1bHQgPj0gZ2V0X3NoYXBlMCh2aWV3KSkpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5kZXggb3V0IG9mIGJvdW5kcyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZpZXctPnN0cmlkZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIHB0ciArPSB2aWV3LT5pdGVtc2l6ZSAqIHJlc3VsdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHRyICs9IHZpZXctPnN0cmlkZXNbMF0gKiByZXN1bHQ7CisgICAgICAgIGlmICh2aWV3LT5zdWJvZmZzZXRzICE9IE5VTEwgJiYKKyAgICAgICAgICAgIHZpZXctPnN1Ym9mZnNldHNbMF0gPj0gMCkgeworICAgICAgICAgICAgcHRyID0gKigoY2hhciAqKilwdHIpICsgdmlldy0+c3Vib2Zmc2V0c1swXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShwdHIsIHZpZXctPml0ZW1zaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBSZXR1cm4gYSBuZXcgbWVtb3J5LXZpZXcgb2JqZWN0ICovCisgICAgICAgIFB5X2J1ZmZlciBuZXd2aWV3OworICAgICAgICBtZW1zZXQoJm5ld3ZpZXcsIDAsIHNpemVvZihuZXd2aWV3KSk7CisgICAgICAgIC8qIFhYWDogIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgc28gaXQgYWN0dWFsbHkgcmV0dXJucyBhIHN1Yi12aWV3ICovCisgICAgICAgIHJldHVybiBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcigmbmV3dmlldyk7CisgICAgfQorfQorCisvKgorICBtZW1bb2JqXSByZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGhvbGRpbmcgdGhlIGRhdGEgZm9yIG9uZSBlbGVtZW50IGlmCisgICAgICAgICAgIG9iaiBmdWxseSBpbmRleGVzIHRoZSBtZW1vcnkgdmlldyBvciBhbm90aGVyIG1lbW9yeS12aWV3IG9iamVjdAorICAgICAgICAgICBpZiBpdCBkb2VzIG5vdC4KKworICAgICAgICAgICAwLWQgbWVtb3J5LXZpZXcgb2JqZWN0cyBjYW4gYmUgcmVmZXJlbmNlZCB1c2luZyAuLi4gb3IgKCkgYnV0CisgICAgICAgICAgIG5vdCB3aXRoIGFueXRoaW5nIGVsc2UuCisgKi8KK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfc3Vic2NyaXB0KFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSkKK3sKKyAgICBQeV9idWZmZXIgKnZpZXc7CisgICAgdmlldyA9ICYoc2VsZi0+dmlldyk7CisgICAgCisgICAgaWYgKHZpZXctPm5kaW0gPT0gMCkgeworICAgICAgICBpZiAoa2V5ID09IFB5X0VsbGlwc2lzIHx8CisgICAgICAgICAgICAoUHlUdXBsZV9DaGVjayhrZXkpICYmIFB5VHVwbGVfR0VUX1NJWkUoa2V5KT09MCkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGluZGV4aW5nIG9mIDAtZGltIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5SW5kZXhfQ2hlY2soa2V5KSkgeworICAgICAgICBQeV9zc2l6ZV90IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ID0gUHlOdW1iZXJfQXNTc2l6ZV90KGtleSwgTlVMTCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIG1lbW9yeV9pdGVtKHNlbGYsIHJlc3VsdCk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soa2V5KSkgeworICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbmd0aDsKKworICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5U2xpY2VPYmplY3QqKWtleSwgZ2V0X3NoYXBlMCh2aWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJnN0b3AsICZzdGVwLCAmc2xpY2VsZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHN0ZXAgPT0gMSAmJiB2aWV3LT5uZGltID09IDEpIHsKKyAgICAgICAgICAgIFB5X2J1ZmZlciBuZXd2aWV3OworICAgICAgICAgICAgdm9pZCAqbmV3YnVmID0gKGNoYXIgKikgdmlldy0+YnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0YXJ0ICogdmlldy0+aXRlbXNpemU7CisgICAgICAgICAgICBpbnQgbmV3ZmxhZ3MgPSB2aWV3LT5yZWFkb25seQorICAgICAgICAgICAgICAgICAgICA/IFB5QlVGX0NPTlRJR19STyA6IFB5QlVGX0NPTlRJRzsKKyAgICAKKyAgICAgICAgICAgIC8qIFhYWCBUaGVyZSBzaG91bGQgYmUgYW4gQVBJIHRvIGNyZWF0ZSBhIHN1YmJ1ZmZlciAqLworICAgICAgICAgICAgaWYgKHZpZXctPm9iaiAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcih2aWV3LT5vYmosICZuZXd2aWV3LCBuZXdmbGFncykgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbmV3dmlldyA9ICp2aWV3OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3dmlldy5idWYgPSBuZXdidWY7CisgICAgICAgICAgICBuZXd2aWV3LmxlbiA9IHNsaWNlbGVuZ3RoICogbmV3dmlldy5pdGVtc2l6ZTsKKyAgICAgICAgICAgIG5ld3ZpZXcuZm9ybWF0ID0gdmlldy0+Zm9ybWF0OworICAgICAgICAgICAgbmV3dmlldy5zaGFwZSA9ICYobmV3dmlldy5zbWFsbHRhYmxlWzBdKTsKKyAgICAgICAgICAgIG5ld3ZpZXcuc2hhcGVbMF0gPSBzbGljZWxlbmd0aDsKKyAgICAgICAgICAgIG5ld3ZpZXcuc3RyaWRlcyA9ICYobmV3dmlldy5pdGVtc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoJm5ld3ZpZXcpOworICAgICAgICB9CisgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAiY2Fubm90IGluZGV4IG1lbW9yeSB1c2luZyBcIiUuMjAwc1wiIiwgCisgICAgICAgIGtleS0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogTmVlZCB0byBzdXBwb3J0IGFzc2lnbmluZyBtZW1vcnkgaWYgd2UgY2FuICovCitzdGF0aWMgaW50CittZW1vcnlfYXNzX3N1YihQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKK3sKKyAgICBQeV9zc2l6ZV90IHN0YXJ0LCBsZW4sIGJ5dGVsZW47CisgICAgUHlfYnVmZmVyIHNyY3ZpZXc7CisgICAgUHlfYnVmZmVyICp2aWV3ID0gJihzZWxmLT52aWV3KTsKKyAgICBjaGFyICpzcmNidWYsICpkZXN0YnVmOworCisgICAgaWYgKHZpZXctPnJlYWRvbmx5KSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiY2Fubm90IG1vZGlmeSByZWFkLW9ubHkgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgZGVsZXRlIG1lbW9yeSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh2aWV3LT5uZGltICE9IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoUHlJbmRleF9DaGVjayhrZXkpKSB7CisgICAgICAgIHN0YXJ0ID0gUHlOdW1iZXJfQXNTc2l6ZV90KGtleSwgTlVMTCk7CisgICAgICAgIGlmIChzdGFydCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CisgICAgICAgICAgICBzdGFydCArPSBnZXRfc2hhcGUwKHZpZXcpOworICAgICAgICB9CisgICAgICAgIGlmICgoc3RhcnQgPCAwKSB8fCAoc3RhcnQgPj0gZ2V0X3NoYXBlMCh2aWV3KSkpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleCBvdXQgb2YgYm91bmRzIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbGVuID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhrZXkpKSB7CisgICAgICAgIFB5X3NzaXplX3Qgc3RvcCwgc3RlcDsKKworICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5U2xpY2VPYmplY3QqKWtleSwgZ2V0X3NoYXBlMCh2aWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZzdG9wLCAmc3RlcCwgJmxlbikgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0ZXAgIT0gMSkgeworICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJjYW5ub3QgaW5kZXggbWVtb3J5IHVzaW5nIFwiJS4yMDBzXCIiLCAKKyAgICAgICAgICAgIGtleS0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcih2YWx1ZSwgJnNyY3ZpZXcsIFB5QlVGX0NPTlRJR19STykgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvKiBYWFggc2hvdWxkIHdlIGFsbG93IGFzc2lnbm1lbnQgb2YgZGlmZmVyZW50IGl0ZW0gc2l6ZXMKKyAgICAgICBhcyBsb25nIGFzIHRoZSBieXRlIGxlbmd0aCBpcyB0aGUgc2FtZT8KKyAgICAgICAoZS5nLiBhc3NpZ24gMiBzaG9ydHMgdG8gYSA0LWJ5dGUgc2xpY2UpICovCisgICAgaWYgKHNyY3ZpZXcuaXRlbXNpemUgIT0gdmlldy0+aXRlbXNpemUpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJtaXNtYXRjaGluZyBpdGVtIHNpemVzIGZvciBcIiUuMjAwc1wiIGFuZCBcIiUuMjAwc1wiIiwgCisgICAgICAgICAgICB2aWV3LT5vYmotPm9iX3R5cGUtPnRwX25hbWUsIHNyY3ZpZXcub2JqLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBfZXJyb3I7CisgICAgfQorICAgIGJ5dGVsZW4gPSBsZW4gKiB2aWV3LT5pdGVtc2l6ZTsKKyAgICBpZiAoYnl0ZWxlbiAhPSBzcmN2aWV3LmxlbikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICJjYW5ub3QgbW9kaWZ5IHNpemUgb2YgbWVtb3J5dmlldyBvYmplY3QiKTsKKyAgICAgICAgZ290byBfZXJyb3I7CisgICAgfQorICAgIC8qIERvIHRoZSBhY3R1YWwgY29weSAqLworICAgIGRlc3RidWYgPSAoY2hhciAqKSB2aWV3LT5idWYgKyBzdGFydCAqIHZpZXctPml0ZW1zaXplOworICAgIHNyY2J1ZiA9IChjaGFyICopIHNyY3ZpZXcuYnVmOworICAgIGlmIChkZXN0YnVmICsgYnl0ZWxlbiA8IHNyY2J1ZiB8fCBzcmNidWYgKyBieXRlbGVuIDwgZGVzdGJ1ZikKKyAgICAgICAgLyogTm8gb3ZlcmxhcHBpbmcgKi8KKyAgICAgICAgbWVtY3B5KGRlc3RidWYsIHNyY2J1ZiwgYnl0ZWxlbik7CisgICAgZWxzZQorICAgICAgICBtZW1tb3ZlKGRlc3RidWYsIHNyY2J1ZiwgYnl0ZWxlbik7CisKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzcmN2aWV3KTsKKyAgICByZXR1cm4gMDsKKworX2Vycm9yOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNyY3ZpZXcpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK21lbW9yeV9yaWNoY29tcGFyZShQeU9iamVjdCAqdiwgUHlPYmplY3QgKncsIGludCBvcCkKK3sKKyAgICBQeV9idWZmZXIgdnYsIHd3OworICAgIGludCBlcXVhbCA9IDA7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIHZ2Lm9iaiA9IE5VTEw7CisgICAgd3cub2JqID0gTlVMTDsKKyAgICBpZiAob3AgIT0gUHlfRVEgJiYgb3AgIT0gUHlfTkUpCisgICAgICAgIGdvdG8gX25vdGltcGw7CisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcih2LCAmdnYsIFB5QlVGX0NPTlRJR19STykgPT0gLTEpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgZ290byBfbm90aW1wbDsKKyAgICB9CisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcih3LCAmd3csIFB5QlVGX0NPTlRJR19STykgPT0gLTEpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgZ290byBfbm90aW1wbDsKKyAgICB9CisKKyAgICBpZiAodnYuaXRlbXNpemUgIT0gd3cuaXRlbXNpemUgfHwgdnYubGVuICE9IHd3LmxlbikKKyAgICAgICAgZ290byBfZW5kOworCisgICAgZXF1YWwgPSAhbWVtY21wKHZ2LmJ1Ziwgd3cuYnVmLCB2di5sZW4pOworCitfZW5kOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZ2KTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ3dyk7CisgICAgaWYgKChlcXVhbCAmJiBvcCA9PSBQeV9FUSkgfHwgKCFlcXVhbCAmJiBvcCA9PSBQeV9ORSkpCisgICAgICAgIHJlcyA9IFB5X1RydWU7CisgICAgZWxzZQorICAgICAgICByZXMgPSBQeV9GYWxzZTsKKyAgICBQeV9JTkNSRUYocmVzKTsKKyAgICByZXR1cm4gcmVzOworCitfbm90aW1wbDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2dik7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmd3cpOworICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7CisgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOworfQorCisKK3N0YXRpYyBpbnQKK21lbW9yeV90cmF2ZXJzZShQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIGlmIChzZWxmLT5iYXNlICE9IE5VTEwpCisgICAgICAgIFB5X1ZJU0lUKHNlbGYtPmJhc2UpOworICAgIGlmIChzZWxmLT52aWV3Lm9iaiAhPSBOVUxMKQorICAgICAgICBQeV9WSVNJVChzZWxmLT52aWV3Lm9iaik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21lbW9yeV9jbGVhcihQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCit7CisgICAgUHlfQ0xFQVIoc2VsZi0+YmFzZSk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+dmlldyk7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyogQXMgbWFwcGluZyAqLworc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgbWVtb3J5X2FzX21hcHBpbmcgPSB7CisgICAgKGxlbmZ1bmMpbWVtb3J5X2xlbmd0aCwgICAgICAgICAgICAgICAvKiBtcF9sZW5ndGggKi8KKyAgICAoYmluYXJ5ZnVuYyltZW1vcnlfc3Vic2NyaXB0LCAgICAgICAgIC8qIG1wX3N1YnNjcmlwdCAqLworICAgIChvYmpvYmphcmdwcm9jKW1lbW9yeV9hc3Nfc3ViLCAgICAgICAgLyogbXBfYXNzX3N1YnNjcmlwdCAqLworfTsKKworc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIG1lbW9yeV9hc19zZXF1ZW5jZSA9IHsKKwkwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9sZW5ndGggKi8KKwkwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb25jYXQgKi8KKwkwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KKwkoc3NpemVhcmdmdW5jKW1lbW9yeV9pdGVtLCAgICAgICAgICAvKiBzcV9pdGVtICovCit9OworCisvKiBCdWZmZXIgbWV0aG9kcyAqLworc3RhdGljIFB5QnVmZmVyUHJvY3MgbWVtb3J5X2FzX2J1ZmZlciA9IHsKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJmX2dldHJlYWRidWZmZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJmX2dldHdyaXRlYnVmZmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiZl9nZXRzZWdjb3VudCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmZfZ2V0Y2hhcmJ1ZmZlciAqLworICAgIChnZXRidWZmZXJwcm9jKW1lbW9yeV9nZXRidWYsICAgICAgICAgLyogYmZfZ2V0YnVmZmVyICovCisgICAgKHJlbGVhc2VidWZmZXJwcm9jKW1lbW9yeV9yZWxlYXNlYnVmLCAvKiBiZl9yZWxlYXNlYnVmZmVyICovCit9OworCisKK1B5VHlwZU9iamVjdCBQeU1lbW9yeVZpZXdfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQorICAgICJtZW1vcnl2aWV3IiwKKyAgICBzaXplb2YoUHlNZW1vcnlWaWV3T2JqZWN0KSwKKyAgICAwLAorICAgIChkZXN0cnVjdG9yKW1lbW9yeV9kZWFsbG9jLCAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLworICAgIChyZXByZnVuYyltZW1vcnlfcmVwciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAmbWVtb3J5X2FzX3NlcXVlbmNlLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgICZtZW1vcnlfYXNfbWFwcGluZywgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAmbWVtb3J5X2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfAorICAgICAgICBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSLCAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgbWVtb3J5X2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgKHRyYXZlcnNlcHJvYyltZW1vcnlfdHJhdmVyc2UsICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSltZW1vcnlfY2xlYXIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIG1lbW9yeV9yaWNoY29tcGFyZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBtZW1vcnlfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIG1lbW9yeV9nZXRzZXRsaXN0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIG1lbW9yeV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKZGlmZiAtLWdpdCBhL09iamVjdHMvb2JqZWN0LmMgYi9PYmplY3RzL29iamVjdC5jCmluZGV4IDQyNGYzNTMuLmI2YWQ1ZGUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9vYmplY3QuYwpAQCAtODIsMjQgKzgyLDI5IEBACiAgICBnYXJiYWdlIGl0c2VsZi4gSWYgdW5saXN0X3R5cGVzX3dpdGhvdXRfb2JqZWN0cwogICAgaXMgc2V0LCB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSB0eXBlX2xpc3QKICAgIG9uY2UgdGhlIGxhc3Qgb2JqZWN0IGlzIGRlYWxsb2NhdGVkLiAqLwotaW50IHVubGlzdF90eXBlc193aXRob3V0X29iamVjdHM7Ci1leHRlcm4gaW50IHR1cGxlX3plcm9fYWxsb2NzLCBmYXN0X3R1cGxlX2FsbG9jczsKLWV4dGVybiBpbnQgcXVpY2tfaW50X2FsbG9jcywgcXVpY2tfbmVnX2ludF9hbGxvY3M7Ci1leHRlcm4gaW50IG51bGxfc3RyaW5ncywgb25lX3N0cmluZ3M7CitzdGF0aWMgaW50IHVubGlzdF90eXBlc193aXRob3V0X29iamVjdHM7CitleHRlcm4gUHlfc3NpemVfdCB0dXBsZV96ZXJvX2FsbG9jcywgZmFzdF90dXBsZV9hbGxvY3M7CitleHRlcm4gUHlfc3NpemVfdCBxdWlja19pbnRfYWxsb2NzLCBxdWlja19uZWdfaW50X2FsbG9jczsKK2V4dGVybiBQeV9zc2l6ZV90IG51bGxfc3RyaW5ncywgb25lX3N0cmluZ3M7CiB2b2lkCiBkdW1wX2NvdW50cyhGSUxFKiBmKQogewogICAgIFB5VHlwZU9iamVjdCAqdHA7CiAKICAgICBmb3IgKHRwID0gdHlwZV9saXN0OyB0cDsgdHAgPSB0cC0+dHBfbmV4dCkKLSAgICAgICAgZnByaW50ZihmLCAiJXMgYWxsb2MnZDogJWQsIGZyZWVkOiAlZCwgbWF4IGluIHVzZTogJWRcbiIsCisgICAgICAgIGZwcmludGYoZiwgIiVzIGFsbG9jJ2Q6ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQsICIKKyAgICAgICAgICAgICJmcmVlZDogJSIgUFlfRk9STUFUX1NJWkVfVCAiZCwgIgorICAgICAgICAgICAgIm1heCBpbiB1c2U6ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCiAgICAgICAgICAgICB0cC0+dHBfbmFtZSwgdHAtPnRwX2FsbG9jcywgdHAtPnRwX2ZyZWVzLAogICAgICAgICAgICAgdHAtPnRwX21heGFsbG9jKTsKLSAgICBmcHJpbnRmKGYsICJmYXN0IHR1cGxlIGFsbG9jczogJWQsIGVtcHR5OiAlZFxuIiwKKyAgICBmcHJpbnRmKGYsICJmYXN0IHR1cGxlIGFsbG9jczogJSIgUFlfRk9STUFUX1NJWkVfVCAiZCwgIgorICAgICAgICAiZW1wdHk6ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCiAgICAgICAgIGZhc3RfdHVwbGVfYWxsb2NzLCB0dXBsZV96ZXJvX2FsbG9jcyk7Ci0gICAgZnByaW50ZihmLCAiZmFzdCBpbnQgYWxsb2NzOiBwb3M6ICVkLCBuZWc6ICVkXG4iLAorICAgIGZwcmludGYoZiwgImZhc3QgaW50IGFsbG9jczogcG9zOiAlIiBQWV9GT1JNQVRfU0laRV9UICJkLCAiCisgICAgICAgICJuZWc6ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCiAgICAgICAgIHF1aWNrX2ludF9hbGxvY3MsIHF1aWNrX25lZ19pbnRfYWxsb2NzKTsKLSAgICBmcHJpbnRmKGYsICJudWxsIHN0cmluZ3M6ICVkLCAxLXN0cmluZ3M6ICVkXG4iLAorICAgIGZwcmludGYoZiwgIm51bGwgc3RyaW5nczogJSIgUFlfRk9STUFUX1NJWkVfVCAiZCwgIgorICAgICAgICAiMS1zdHJpbmdzOiAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLAogICAgICAgICBudWxsX3N0cmluZ3MsIG9uZV9zdHJpbmdzKTsKIH0KIApAQCAtNDgzLDEyICs0ODgsNiBAQAogICAgICAgICByZXR1cm4gdjsKICAgICB9CiAKLSAgICAvKiBUcnkgdGhlIF9fdW5pY29kZV9fIG1ldGhvZCAqLwotICAgIGlmICh1bmljb2Rlc3RyID09IE5VTEwpIHsKLSAgICAgICAgdW5pY29kZXN0cj0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiX191bmljb2RlX18iKTsKLSAgICAgICAgaWYgKHVuaWNvZGVzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBpZiAoUHlJbnN0YW5jZV9DaGVjayh2KSkgewogICAgICAgICAvKiBXZSdyZSBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzaWMgY2xhc3MgKi8KICAgICAgICAgLyogVHJ5IF9fdW5pY29kZV9fIGZyb20gdGhlIGluc3RhbmNlIC0tIGFsYXMgd2UgaGF2ZSBubyB0eXBlICovCkBAIC01MDMsMTYgKzUwMiwxNSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAvKiBOb3QgYSBjbGFzc2ljIGNsYXNzIGluc3RhbmNlLCB0cnkgX191bmljb2RlX18gZnJvbSB0eXBlICovCi0gICAgICAgIC8qIF9QeVR5cGVfTG9va3VwIGRvZXNuJ3QgY3JlYXRlIGEgcmVmZXJlbmNlICovCi0gICAgICAgIGZ1bmMgPSBfUHlUeXBlX0xvb2t1cChQeV9UWVBFKHYpLCB1bmljb2Rlc3RyKTsKKyAgICAgICAgLyogTm90IGEgY2xhc3NpYyBjbGFzcyBpbnN0YW5jZSwgdHJ5IF9fdW5pY29kZV9fLiAqLworICAgICAgICBmdW5jID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwodiwgIl9fdW5pY29kZV9fIiwgJnVuaWNvZGVzdHIpOwogICAgICAgICBpZiAoZnVuYyAhPSBOVUxMKSB7CiAgICAgICAgICAgICB1bmljb2RlX21ldGhvZF9mb3VuZCA9IDE7Ci0gICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGZ1bmMsIHYsIE5VTEwpOworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmdW5jLCBOVUxMKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIERpZG4ndCBmaW5kIF9fdW5pY29kZV9fICovCkBAIC0xMDI3LDE1ICsxMDI1LDE4IEBACiAgICAgICogb2YgbWFwcGluZyBrZXlzIHdpbGwgdHVybiBvdXQgd2VpcmQuCiAgICAgICovCiAKKyAgICBpZiAoIVB5X0lTX0ZJTklURSh2KSkgeworICAgICAgICBpZiAoUHlfSVNfSU5GSU5JVFkodikpCisgICAgICAgICAgICByZXR1cm4gdiA8IDAgPyAtMjcxODI4IDogMzE0MTU5OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgZnJhY3RwYXJ0ID0gbW9kZih2LCAmaW50cGFydCk7CiAgICAgaWYgKGZyYWN0cGFydCA9PSAwLjApIHsKICAgICAgICAgLyogVGhpcyBtdXN0IHJldHVybiB0aGUgc2FtZSBoYXNoIGFzIGFuIGVxdWFsIGludCBvciBsb25nLiAqLwogICAgICAgICBpZiAoaW50cGFydCA+IExPTkdfTUFYLzIgfHwgLWludHBhcnQgPiBMT05HX01BWC8yKSB7CiAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIGxvbmcgYW5kIHVzZSBpdHMgaGFzaC4gKi8KICAgICAgICAgICAgIFB5T2JqZWN0ICpwbG9uZzsgICAgICAgICAgICAgICAgICAgIC8qIGNvbnZlcnRlZCB0byBQeXRob24gbG9uZyAqLwotICAgICAgICAgICAgaWYgKFB5X0lTX0lORklOSVRZKGludHBhcnQpKQotICAgICAgICAgICAgICAgIC8qIGNhbid0IGNvbnZlcnQgdG8gbG9uZyBpbnQgLS0gYXJiaXRyYXJ5ICovCi0gICAgICAgICAgICAgICAgdiA9IHYgPCAwID8gLTI3MTgyOC4wIDogMzE0MTU5LjA7CiAgICAgICAgICAgICBwbG9uZyA9IFB5TG9uZ19Gcm9tRG91YmxlKHYpOwogICAgICAgICAgICAgaWYgKHBsb25nID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTA3NCwyMyArMTA3NSwxNSBAQAogbG9uZwogX1B5X0hhc2hQb2ludGVyKHZvaWQgKnApCiB7Ci0jaWYgU0laRU9GX0xPTkcgPj0gU0laRU9GX1ZPSURfUAotICAgIHJldHVybiAobG9uZylwOwotI2Vsc2UKLSAgICAvKiBjb252ZXJ0IHRvIGEgUHl0aG9uIGxvbmcgYW5kIGhhc2ggdGhhdCAqLwotICAgIFB5T2JqZWN0KiBsb25nb2JqOwogICAgIGxvbmcgeDsKLQotICAgIGlmICgobG9uZ29iaiA9IFB5TG9uZ19Gcm9tVm9pZFB0cihwKSkgPT0gTlVMTCkgewotICAgICAgICB4ID0gLTE7Ci0gICAgICAgIGdvdG8gZmluYWxseTsKLSAgICB9Ci0gICAgeCA9IFB5T2JqZWN0X0hhc2gobG9uZ29iaik7Ci0KLWZpbmFsbHk6Ci0gICAgUHlfWERFQ1JFRihsb25nb2JqKTsKKyAgICBzaXplX3QgeSA9IChzaXplX3QpcDsKKyAgICAvKiBib3R0b20gMyBvciA0IGJpdHMgYXJlIGxpa2VseSB0byBiZSAwOyByb3RhdGUgeSBieSA0IHRvIGF2b2lkCisgICAgICAgZXhjZXNzaXZlIGhhc2ggY29sbGlzaW9ucyBmb3IgZGljdHMgYW5kIHNldHMgKi8KKyAgICB5ID0gKHkgPj4gNCkgfCAoeSA8PCAoOCAqIFNJWkVPRl9WT0lEX1AgLSA0KSk7CisgICAgeCA9IChsb25nKXk7CisgICAgaWYgKHggPT0gLTEpCisgICAgICAgIHggPSAtMjsKICAgICByZXR1cm4geDsKLSNlbmRpZgogfQogCiBsb25nCkBAIC0xMzA3LDEwICsxMzAwLDI0IEBACiAgICAgcmV0dXJuIG9iajsKIH0KIAorLyogSGVscGVyIHVzZWQgd2hlbiB0aGUgX19uZXh0X18gbWV0aG9kIGlzIHJlbW92ZWQgZnJvbSBhIHR5cGU6CisgICB0cF9pdGVybmV4dCBpcyBuZXZlciBOVUxMIGFuZCBjYW4gYmUgc2FmZWx5IGNhbGxlZCB3aXRob3V0IGNoZWNraW5nCisgICBvbiBldmVyeSBpdGVyYXRpb24uCisgKi8KKworUHlPYmplY3QgKgorX1B5T2JqZWN0X05leHROb3RJbXBsZW1lbnRlZChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAiJyUuMjAwcycgb2JqZWN0IGlzIG5vdCBpdGVyYWJsZSIsCisgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUpOworICAgIHJldHVybiBOVUxMOworfQorCiAvKiBHZW5lcmljIEdldEF0dHIgZnVuY3Rpb25zIC0gcHV0IHRoZXNlIGluIHlvdXIgdHBfW2dzXWV0YXR0cm8gc2xvdCAqLwogCiBQeU9iamVjdCAqCi1QeU9iamVjdF9HZW5lcmljR2V0QXR0cihQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSkKK19QeU9iamVjdF9HZW5lcmljR2V0QXR0cldpdGhEaWN0KFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqZGljdCkKIHsKICAgICBQeVR5cGVPYmplY3QgKnRwID0gUHlfVFlQRShvYmopOwogICAgIFB5T2JqZWN0ICpkZXNjciA9IE5VTEw7CkBAIC0xMzg4LDM3ICsxMzk1LDM4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBJbmxpbmUgX1B5T2JqZWN0X0dldERpY3RQdHIgKi8KLSAgICBkaWN0b2Zmc2V0ID0gdHAtPnRwX2RpY3RvZmZzZXQ7Ci0gICAgaWYgKGRpY3RvZmZzZXQgIT0gMCkgewotICAgICAgICBQeU9iamVjdCAqZGljdDsKLSAgICAgICAgaWYgKGRpY3RvZmZzZXQgPCAwKSB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IHRzaXplOwotICAgICAgICAgICAgc2l6ZV90IHNpemU7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICAvKiBJbmxpbmUgX1B5T2JqZWN0X0dldERpY3RQdHIgKi8KKyAgICAgICAgZGljdG9mZnNldCA9IHRwLT50cF9kaWN0b2Zmc2V0OworICAgICAgICBpZiAoZGljdG9mZnNldCAhPSAwKSB7CisgICAgICAgICAgICBpZiAoZGljdG9mZnNldCA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHRzaXplOworICAgICAgICAgICAgICAgIHNpemVfdCBzaXplOwogCi0gICAgICAgICAgICB0c2l6ZSA9ICgoUHlWYXJPYmplY3QgKilvYmopLT5vYl9zaXplOwotICAgICAgICAgICAgaWYgKHRzaXplIDwgMCkKLSAgICAgICAgICAgICAgICB0c2l6ZSA9IC10c2l6ZTsKLSAgICAgICAgICAgIHNpemUgPSBfUHlPYmplY3RfVkFSX1NJWkUodHAsIHRzaXplKTsKKyAgICAgICAgICAgICAgICB0c2l6ZSA9ICgoUHlWYXJPYmplY3QgKilvYmopLT5vYl9zaXplOworICAgICAgICAgICAgICAgIGlmICh0c2l6ZSA8IDApCisgICAgICAgICAgICAgICAgICAgIHRzaXplID0gLXRzaXplOworICAgICAgICAgICAgICAgIHNpemUgPSBfUHlPYmplY3RfVkFSX1NJWkUodHAsIHRzaXplKTsKIAotICAgICAgICAgICAgZGljdG9mZnNldCArPSAobG9uZylzaXplOwotICAgICAgICAgICAgYXNzZXJ0KGRpY3RvZmZzZXQgPiAwKTsKLSAgICAgICAgICAgIGFzc2VydChkaWN0b2Zmc2V0ICUgU0laRU9GX1ZPSURfUCA9PSAwKTsKLSAgICAgICAgfQotICAgICAgICBkaWN0cHRyID0gKFB5T2JqZWN0ICoqKSAoKGNoYXIgKilvYmogKyBkaWN0b2Zmc2V0KTsKLSAgICAgICAgZGljdCA9ICpkaWN0cHRyOwotICAgICAgICBpZiAoZGljdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZGljdCk7Ci0gICAgICAgICAgICByZXMgPSBQeURpY3RfR2V0SXRlbShkaWN0LCBuYW1lKTsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihyZXMpOwotICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoZGVzY3IpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKLSAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgZGljdG9mZnNldCArPSAobG9uZylzaXplOworICAgICAgICAgICAgICAgIGFzc2VydChkaWN0b2Zmc2V0ID4gMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGRpY3RvZmZzZXQgJSBTSVpFT0ZfVk9JRF9QID09IDApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICAgICAgZGljdHB0ciA9IChQeU9iamVjdCAqKikgKChjaGFyICopb2JqICsgZGljdG9mZnNldCk7CisgICAgICAgICAgICBkaWN0ID0gKmRpY3RwdHI7CiAgICAgICAgIH0KICAgICB9CisgICAgaWYgKGRpY3QgIT0gTlVMTCkgeworICAgICAgICBQeV9JTkNSRUYoZGljdCk7CisgICAgICAgIHJlcyA9IFB5RGljdF9HZXRJdGVtKGRpY3QsIG5hbWUpOworICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihyZXMpOworICAgICAgICAgICAgUHlfWERFQ1JFRihkZXNjcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgIH0KIAogICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICAgcmVzID0gZihkZXNjciwgb2JqLCAoUHlPYmplY3QgKilQeV9UWVBFKG9iaikpOwpAQCAtMTQ0MCw4ICsxNDQ4LDE1IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorUHlPYmplY3QgKgorUHlPYmplY3RfR2VuZXJpY0dldEF0dHIoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUpCit7CisgICAgcmV0dXJuIF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cldpdGhEaWN0KG9iaiwgbmFtZSwgTlVMTCk7Cit9CisKIGludAotUHlPYmplY3RfR2VuZXJpY1NldEF0dHIoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICp2YWx1ZSkKK19QeU9iamVjdF9HZW5lcmljU2V0QXR0cldpdGhEaWN0KFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqZGljdCkKIHsKICAgICBQeVR5cGVPYmplY3QgKnRwID0gUHlfVFlQRShvYmopOwogICAgIFB5T2JqZWN0ICpkZXNjcjsKQEAgLTE0ODcsMjYgKzE1MDIsMjggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRpY3RwdHIgPSBfUHlPYmplY3RfR2V0RGljdFB0cihvYmopOwotICAgIGlmIChkaWN0cHRyICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKmRpY3QgPSAqZGljdHB0cjsKLSAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCAmJiB2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBkaWN0ID0gUHlEaWN0X05ldygpOwotICAgICAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICAqZGljdHB0ciA9IGRpY3Q7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERpY3RQdHIob2JqKTsKKyAgICAgICAgaWYgKGRpY3RwdHIgIT0gTlVMTCkgeworICAgICAgICAgICAgZGljdCA9ICpkaWN0cHRyOworICAgICAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCAmJiB2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZGljdCA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgKmRpY3RwdHIgPSBkaWN0OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChkaWN0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihkaWN0KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJlcyA9IFB5RGljdF9EZWxJdGVtKGRpY3QsIG5hbWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtKGRpY3QsIG5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgbmFtZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7Ci0gICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KKyAgICB9CisgICAgaWYgKGRpY3QgIT0gTlVMTCkgeworICAgICAgICBQeV9JTkNSRUYoZGljdCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgICAgcmVzID0gUHlEaWN0X0RlbEl0ZW0oZGljdCwgbmFtZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtKGRpY3QsIG5hbWUsIHZhbHVlKTsKKyAgICAgICAgaWYgKHJlcyA8IDAgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCisgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG5hbWUpOworICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKICAgICBpZiAoZiAhPSBOVUxMKSB7CkBAIC0xNTI5LDYgKzE1NDYsMTMgQEAKICAgICByZXR1cm4gcmVzOwogfQogCitpbnQKK1B5T2JqZWN0X0dlbmVyaWNTZXRBdHRyKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIF9QeU9iamVjdF9HZW5lcmljU2V0QXR0cldpdGhEaWN0KG9iaiwgbmFtZSwgdmFsdWUsIE5VTEwpOworfQorCisKIC8qIFRlc3QgYSB2YWx1ZSB1c2VkIGFzIGNvbmRpdGlvbiwgZS5nLiwgaW4gYSBmb3Igb3IgaWYgc3RhdGVtZW50LgogICAgUmV0dXJuIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkICovCiAKQEAgLTIxMDQsNiArMjEyOCw5IEBACiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlQcm9wZXJ0eV9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgcHJvcGVydHkgdHlwZSIpOwogCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlNZW1vcnlWaWV3X1R5cGUpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBtZW1vcnl2aWV3IHR5cGUiKTsKKwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5VHVwbGVfVHlwZSkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIHR1cGxlIHR5cGUiKTsKIApAQCAtMjE1MSw2ICsyMTc4LDkgQEAKIAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5TWVtYmVyRGVzY3JfVHlwZSkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIG1lbWJlciBkZXNjcmlwdG9yIHR5cGUiKTsKKworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RmlsZV9UeXBlKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgZmlsZSB0eXBlIik7CiB9CiAKIApAQCAtMjI1OSw2ICsyMjg5LDEwIEBACiAjZW5kaWYKIAogCisvKiBIYWNrIHRvIGZvcmNlIGxvYWRpbmcgb2YgY2Fwc3VsZS5vICovCitQeVR5cGVPYmplY3QgKl9QeV9jYXBzdWxlX2hhY2sgPSAmUHlDYXBzdWxlX1R5cGU7CisKKwogLyogSGFjayB0byBmb3JjZSBsb2FkaW5nIG9mIGNvYmplY3QubyAqLwogUHlUeXBlT2JqZWN0ICpfUHlfY29iamVjdF9oYWNrID0gJlB5Q09iamVjdF9UeXBlOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL29ibWFsbG9jLmMgYi9PYmplY3RzL29ibWFsbG9jLmMKaW5kZXggZjMyOTdmMi4uNDgzODQ3YyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9vYm1hbGxvYy5jCisrKyBiL09iamVjdHMvb2JtYWxsb2MuYwpAQCAtMiw2ICsyLDIxIEBACiAKICNpZmRlZiBXSVRIX1BZTUFMTE9DCiAKKyNpZmRlZiBXSVRIX1ZBTEdSSU5ECisjaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KKworLyogSWYgd2UncmUgdXNpbmcgR0NDLCB1c2UgX19idWlsdGluX2V4cGVjdCgpIHRvIHJlZHVjZSBvdmVyaGVhZCBvZgorICAgdGhlIHZhbGdyaW5kIGNoZWNrcyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+IDIpICYmIGRlZmluZWQoX19PUFRJTUlaRV9fKQorIyAgZGVmaW5lIFVOTElLRUxZKHZhbHVlKSBfX2J1aWx0aW5fZXhwZWN0KCh2YWx1ZSksIDApCisjZWxzZQorIyAgZGVmaW5lIFVOTElLRUxZKHZhbHVlKSAodmFsdWUpCisjZW5kaWYKKworLyogLTEgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZW4ndCBjaGVja2VkIHRoYXQgd2UncmUgcnVubmluZyBvbiB2YWxncmluZCB5ZXQuICovCitzdGF0aWMgaW50IHJ1bm5pbmdfb25fdmFsZ3JpbmQgPSAtMTsKKyNlbmRpZgorCiAvKiBBbiBvYmplY3QgYWxsb2NhdG9yIGZvciBQeXRob24uCiAKICAgIEhlcmUgaXMgYW4gaW50cm9kdWN0aW9uIHRvIHRoZSBsYXllcnMgb2YgdGhlIFB5dGhvbiBtZW1vcnkgYXJjaGl0ZWN0dXJlLApAQCAtMjM0LDcgKzI0OSw3IEBACiAvKiBQb29sIGZvciBzbWFsbCBibG9ja3MuICovCiBzdHJ1Y3QgcG9vbF9oZWFkZXIgewogICAgIHVuaW9uIHsgYmxvY2sgKl9wYWRkaW5nOwotICAgICAgICB1aW50IGNvdW50OyB9IHJlZjsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBhbGxvY2F0ZWQgYmxvY2tzICAgICovCisgICAgICAgICAgICB1aW50IGNvdW50OyB9IHJlZjsgICAgICAgICAgLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBibG9ja3MgICAgKi8KICAgICBibG9jayAqZnJlZWJsb2NrOyAgICAgICAgICAgICAgICAgICAvKiBwb29sJ3MgZnJlZSBsaXN0IGhlYWQgICAgICAgICAqLwogICAgIHN0cnVjdCBwb29sX2hlYWRlciAqbmV4dHBvb2w7ICAgICAgIC8qIG5leHQgcG9vbCBvZiB0aGlzIHNpemUgY2xhc3MgICovCiAgICAgc3RydWN0IHBvb2xfaGVhZGVyICpwcmV2cG9vbDsgICAgICAgLyogcHJldmlvdXMgcG9vbCAgICAgICAiIiAgICAgICAgKi8KQEAgLTM4OSw3ICs0MDQsNyBAQAogaW1tZWRpYXRlbHkgZm9sbG93IGEgcG9vbF9oZWFkZXIncyBmaXJzdCB0d28gbWVtYmVyczoKIAogICAgIHVuaW9uIHsgYmxvY2sgKl9wYWRkaW5nOwotICAgICAgICB1aW50IGNvdW50OyB9IHJlZjsKKyAgICAgICAgICAgIHVpbnQgY291bnQ7IH0gcmVmOwogICAgIGJsb2NrICpmcmVlYmxvY2s7CiAKIGVhY2ggb2Ygd2hpY2ggY29uc3VtZSBzaXplb2YoYmxvY2sgKikgYnl0ZXMuICBTbyB3aGF0IHVzZWRwb29sc1tpK2ldIHJlYWxseQpAQCAtNjY3LDExICs2ODIsMTkgQEAKIG9ibWFsbG9jIGluIGEgc21hbGwgY29uc3RhbnQgdGltZSwgaW5kZXBlbmRlbnQgb2YgdGhlIG51bWJlciBvZiBhcmVuYXMKIG9ibWFsbG9jIGNvbnRyb2xzLiAgU2luY2UgdGhpcyB0ZXN0IGlzIG5lZWRlZCBhdCBldmVyeSBlbnRyeSBwb2ludCwgaXQncwogZXh0cmVtZWx5IGRlc2lyYWJsZSB0aGF0IGl0IGJlIHRoaXMgZmFzdC4KKworU2luY2UgUHlfQUREUkVTU19JTl9SQU5HRSBtYXkgYmUgcmVhZGluZyBmcm9tIG1lbW9yeSB3aGljaCB3YXMgbm90IGFsbG9jYXRlZAorYnkgUHl0aG9uLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCAoUE9PTCktPmFyZW5haW5kZXggaXMgcmVhZCBvbmx5IG9uY2UsIGFzCithbm90aGVyIHRocmVhZCBtYXkgYmUgY29uY3VycmVudGx5IG1vZGlmeWluZyB0aGUgdmFsdWUgd2l0aG91dCBob2xkaW5nIHRoZQorR0lMLiAgVG8gYWNjb21wbGlzaCB0aGlzLCB0aGUgYXJlbmFpbmRleF90ZW1wIHZhcmlhYmxlIGlzIHVzZWQgdG8gc3RvcmUKKyhQT09MKS0+YXJlbmFpbmRleCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBQeV9BRERSRVNTX0lOX1JBTkdFIG1hY3JvJ3MKK2V4ZWN1dGlvbi4gIFRoZSBjYWxsZXIgb2YgdGhlIG1hY3JvIGlzIHJlc3BvbnNpYmxlIGZvciBkZWNsYXJpbmcgdGhpcwordmFyaWFibGUuCiAqLwogI2RlZmluZSBQeV9BRERSRVNTX0lOX1JBTkdFKFAsIFBPT0wpICAgICAgICAgICAgICAgICAgICBcCi0gICAgKChQT09MKS0+YXJlbmFpbmRleCA8IG1heGFyZW5hcyAmJiAgICAgICAgICAgICAgICAgIFwKLSAgICAgKHVwdHIpKFApIC0gYXJlbmFzWyhQT09MKS0+YXJlbmFpbmRleF0uYWRkcmVzcyA8ICh1cHRyKUFSRU5BX1NJWkUgJiYgXAotICAgICBhcmVuYXNbKFBPT0wpLT5hcmVuYWluZGV4XS5hZGRyZXNzICE9IDApCisgICAgKChhcmVuYWluZGV4X3RlbXAgPSAoUE9PTCktPmFyZW5haW5kZXgpIDwgbWF4YXJlbmFzICYmICAgICAgICAgICAgICBcCisgICAgICh1cHRyKShQKSAtIGFyZW5hc1thcmVuYWluZGV4X3RlbXBdLmFkZHJlc3MgPCAodXB0cilBUkVOQV9TSVpFICYmIFwKKyAgICAgYXJlbmFzW2FyZW5haW5kZXhfdGVtcF0uYWRkcmVzcyAhPSAwKQogCiAKIC8qIFRoaXMgaXMgb25seSB1c2VmdWwgd2hlbiBydW5uaW5nIG1lbW9yeSBkZWJ1Z2dlcnMgc3VjaCBhcwpAQCAtNjk0LDcgKzcxNyw3IEBACiAjdW5kZWYgUHlfQUREUkVTU19JTl9SQU5HRQogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMSkgfHwgXAotICAgICAgICAgICAgICAoX19HTlVDX18gPj0gNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0dOVUNfXyA+PSA0KSkKICNkZWZpbmUgUHlfTk9fSU5MSU5FIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpCiAjZWxzZQogI2RlZmluZSBQeV9OT19JTkxJTkUKQEAgLTcyOCw2ICs3NTEsMTMgQEAKICAgICBwb29scCBuZXh0OwogICAgIHVpbnQgc2l6ZTsKIAorI2lmZGVmIFdJVEhfVkFMR1JJTkQKKyAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA9PSAtMSkpCisgICAgICAgIHJ1bm5pbmdfb25fdmFsZ3JpbmQgPSBSVU5OSU5HX09OX1ZBTEdSSU5EOworICAgIGlmIChVTkxJS0VMWShydW5uaW5nX29uX3ZhbGdyaW5kKSkKKyAgICAgICAgZ290byByZWRpcmVjdDsKKyNlbmRpZgorCiAgICAgLyoKICAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KICAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjawpAQCAtOTIzLDEwICs5NTMsMTggQEAKICAgICBibG9jayAqbGFzdGZyZWU7CiAgICAgcG9vbHAgbmV4dCwgcHJldjsKICAgICB1aW50IHNpemU7CisjaWZuZGVmIFB5X1VTSU5HX01FTU9SWV9ERUJVR0dFUgorICAgIHVpbnQgYXJlbmFpbmRleF90ZW1wOworI2VuZGlmCiAKICAgICBpZiAocCA9PSBOVUxMKSAgICAgIC8qIGZyZWUoTlVMTCkgaGFzIG5vIGVmZmVjdCAqLwogICAgICAgICByZXR1cm47CiAKKyNpZmRlZiBXSVRIX1ZBTEdSSU5ECisgICAgaWYgKFVOTElLRUxZKHJ1bm5pbmdfb25fdmFsZ3JpbmQgPiAwKSkKKyAgICAgICAgZ290byByZWRpcmVjdDsKKyNlbmRpZgorCiAgICAgcG9vbCA9IFBPT0xfQUREUihwKTsKICAgICBpZiAoUHlfQUREUkVTU19JTl9SQU5HRShwLCBwb29sKSkgewogICAgICAgICAvKiBXZSBhbGxvY2F0ZWQgdGhpcyBhZGRyZXNzLiAqLwpAQCAtMTEyMSw2ICsxMTU5LDkgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmZGVmIFdJVEhfVkFMR1JJTkQKK3JlZGlyZWN0OgorI2VuZGlmCiAgICAgLyogV2UgZGlkbid0IGFsbG9jYXRlIHRoaXMgYWRkcmVzcy4gKi8KICAgICBmcmVlKHApOwogfQpAQCAtMTEzNyw2ICsxMTc4LDkgQEAKICAgICB2b2lkICpicDsKICAgICBwb29scCBwb29sOwogICAgIHNpemVfdCBzaXplOworI2lmbmRlZiBQeV9VU0lOR19NRU1PUllfREVCVUdHRVIKKyAgICB1aW50IGFyZW5haW5kZXhfdGVtcDsKKyNlbmRpZgogCiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X01hbGxvYyhuYnl0ZXMpOwpAQCAtMTE1MCw2ICsxMTk0LDEyIEBACiAgICAgaWYgKG5ieXRlcyA+IFBZX1NTSVpFX1RfTUFYKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorI2lmZGVmIFdJVEhfVkFMR1JJTkQKKyAgICAvKiBUcmVhdCBydW5uaW5nX29uX3ZhbGdyaW5kID09IC0xIHRoZSBzYW1lIGFzIDAgKi8KKyAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA+IDApKQorICAgICAgICBnb3RvIHJlZGlyZWN0OworI2VuZGlmCisKICAgICBwb29sID0gUE9PTF9BRERSKHApOwogICAgIGlmIChQeV9BRERSRVNTX0lOX1JBTkdFKHAsIHBvb2wpKSB7CiAgICAgICAgIC8qIFdlJ3JlIGluIGNoYXJnZSBvZiB0aGlzIGJsb2NrICovCkBAIC0xMTc3LDYgKzEyMjcsOSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBicDsKICAgICB9CisjaWZkZWYgV0lUSF9WQUxHUklORAorIHJlZGlyZWN0OgorI2VuZGlmCiAgICAgLyogV2UncmUgbm90IG1hbmFnaW5nIHRoaXMgYmxvY2suICBJZiBuYnl0ZXMgPD0KICAgICAgKiBTTUFMTF9SRVFVRVNUX1RIUkVTSE9MRCwgaXQncyB0ZW1wdGluZyB0byB0cnkgdG8gdGFrZSBvdmVyIHRoaXMKICAgICAgKiBibG9jay4gIEhvd2V2ZXIsIGlmIHdlIGRvLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHZhbGlkIGRhdGEgZnJvbQpAQCAtMTI0MSw2ICsxMjk0LDEwIEBACiAjZGVmaW5lIERFQURCWVRFICAgICAgIDB4REIgICAgLyogZGVhZCAobmV3bHkgZnJlZWQpIG1lbW9yeSAqLwogI2RlZmluZSBGT1JCSURERU5CWVRFICAweEZCICAgIC8qIHVudG91Y2hhYmxlIGJ5dGVzIGF0IGVhY2ggZW5kIG9mIGEgYmxvY2sgKi8KIAorLyogV2UgdGFnIGVhY2ggYmxvY2sgd2l0aCBhbiBBUEkgSUQgaW4gb3JkZXIgdG8gdGFnIEFQSSB2aW9sYXRpb25zICovCisjZGVmaW5lIF9QWU1BTExPQ19NRU1fSUQgJ20nICAgLyogdGhlIFB5TWVtX01hbGxvYygpIEFQSSAqLworI2RlZmluZSBfUFlNQUxMT0NfT0JKX0lEICdvJyAgIC8qIFRoZSBQeU9iamVjdF9NYWxsb2MoKSBBUEkgKi8KKwogc3RhdGljIHNpemVfdCBzZXJpYWxubyA9IDA7ICAgICAvKiBpbmNyZW1lbnRlZCBvbiBlYWNoIGRlYnVnIHttLHJlfWFsbG9jICovCiAKIC8qIHNlcmlhbG5vIGlzIGFsd2F5cyBpbmNyZW1lbnRlZCB2aWEgY2FsbGluZyB0aGlzIHJvdXRpbmUuICBUaGUgcG9pbnQgaXMKQEAgLTEzMzEsOSArMTM4OCw1MCBAQAogICAgIGluc3RhbnQgYXQgd2hpY2ggdGhpcyBibG9jayB3YXMgcGFzc2VkIG91dC4KICovCiAKKy8qIGRlYnVnIHJlcGxhY2VtZW50cyBmb3IgdGhlIFB5TWVtXyogbWVtb3J5IEFQSSAqLwordm9pZCAqCitfUHlNZW1fRGVidWdNYWxsb2Moc2l6ZV90IG5ieXRlcykKK3sKKyAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKF9QWU1BTExPQ19NRU1fSUQsIG5ieXRlcyk7Cit9Cit2b2lkICoKK19QeU1lbV9EZWJ1Z1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKK3sKKyAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShfUFlNQUxMT0NfTUVNX0lELCBwLCBuYnl0ZXMpOworfQordm9pZAorX1B5TWVtX0RlYnVnRnJlZSh2b2lkICpwKQoreworICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoX1BZTUFMTE9DX01FTV9JRCwgcCk7Cit9CisKKy8qIGRlYnVnIHJlcGxhY2VtZW50cyBmb3IgdGhlIFB5T2JqZWN0XyogbWVtb3J5IEFQSSAqLwogdm9pZCAqCiBfUHlPYmplY3RfRGVidWdNYWxsb2Moc2l6ZV90IG5ieXRlcykKIHsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKF9QWU1BTExPQ19PQkpfSUQsIG5ieXRlcyk7Cit9Cit2b2lkICoKK19QeU9iamVjdF9EZWJ1Z1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKK3sKKyAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShfUFlNQUxMT0NfT0JKX0lELCBwLCBuYnl0ZXMpOworfQordm9pZAorX1B5T2JqZWN0X0RlYnVnRnJlZSh2b2lkICpwKQoreworICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoX1BZTUFMTE9DX09CSl9JRCwgcCk7Cit9Cit2b2lkCitfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3MoY29uc3Qgdm9pZCAqcCkKK3sKKyAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoX1BZTUFMTE9DX09CSl9JRCwgcCk7Cit9CisKKworLyogZ2VuZXJpYyBkZWJ1ZyBtZW1vcnkgYXBpLCB3aXRoIGFuICJpZCIgdG8gaWRlbnRpZnkgdGhlIEFQSSBpbiB1c2UgKi8KK3ZvaWQgKgorX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKGNoYXIgaWQsIHNpemVfdCBuYnl0ZXMpCit7CiAgICAgdWNoYXIgKnA7ICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3Mgb2YgbWFsbG9jJ2VkIGJsb2NrICovCiAgICAgdWNoYXIgKnRhaWw7ICAgICAgICAvKiBwICsgMipTU1QgKyBuYnl0ZXMgPT0gcG9pbnRlciB0byB0YWlsIHBhZCBieXRlcyAqLwogICAgIHNpemVfdCB0b3RhbDsgICAgICAgLyogbmJ5dGVzICsgNCpTU1QgKi8KQEAgLTEzNDgsMTIgKzE0NDYsMTUgQEAKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIC8qIGF0IHAsIHdyaXRlIHNpemUgKFNTVCBieXRlcyksIGlkICgxIGJ5dGUpLCBwYWQgKFNTVC0xIGJ5dGVzKSAqLwogICAgIHdyaXRlX3NpemVfdChwLCBuYnl0ZXMpOwotICAgIG1lbXNldChwICsgU1NULCBGT1JCSURERU5CWVRFLCBTU1QpOworICAgIHBbU1NUXSA9ICh1Y2hhcilpZDsKKyAgICBtZW1zZXQocCArIFNTVCArIDEgLCBGT1JCSURERU5CWVRFLCBTU1QtMSk7CiAKICAgICBpZiAobmJ5dGVzID4gMCkKICAgICAgICAgbWVtc2V0KHAgKyAyKlNTVCwgQ0xFQU5CWVRFLCBuYnl0ZXMpOwogCisgICAgLyogYXQgdGFpbCwgd3JpdGUgcGFkIChTU1QgYnl0ZXMpIGFuZCBzZXJpYWxubyAoU1NUIGJ5dGVzKSAqLwogICAgIHRhaWwgPSBwICsgMipTU1QgKyBuYnl0ZXM7CiAgICAgbWVtc2V0KHRhaWwsIEZPUkJJRERFTkJZVEUsIFNTVCk7CiAgICAgd3JpdGVfc2l6ZV90KHRhaWwgKyBTU1QsIHNlcmlhbG5vKTsKQEAgLTEzNjIsMjcgKzE0NjMsMjggQEAKIH0KIAogLyogVGhlIGRlYnVnIGZyZWUgZmlyc3QgY2hlY2tzIHRoZSAyKlNTVCBieXRlcyBvbiBlYWNoIGVuZCBmb3Igc2FuaXR5IChpbgotICAgcGFydGljdWxhciwgdGhhdCB0aGUgRk9SQklEREVOQllURXMgYXJlIHN0aWxsIGludGFjdCkuCisgICBwYXJ0aWN1bGFyLCB0aGF0IHRoZSBGT1JCSURERU5CWVRFcyB3aXRoIHRoZSBhcGkgSUQgYXJlIHN0aWxsIGludGFjdCkuCiAgICBUaGVuIGZpbGxzIHRoZSBvcmlnaW5hbCBieXRlcyB3aXRoIERFQURCWVRFLgogICAgVGhlbiBjYWxscyB0aGUgdW5kZXJseWluZyBmcmVlLgogKi8KIHZvaWQKLV9QeU9iamVjdF9EZWJ1Z0ZyZWUodm9pZCAqcCkKK19QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApCiB7CiAgICAgdWNoYXIgKnEgPSAodWNoYXIgKilwIC0gMipTU1Q7ICAvKiBhZGRyZXNzIHJldHVybmVkIGZyb20gbWFsbG9jICovCiAgICAgc2l6ZV90IG5ieXRlczsKIAogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKLSAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3MocCk7CisgICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGFwaSwgcCk7CiAgICAgbmJ5dGVzID0gcmVhZF9zaXplX3QocSk7CisgICAgbmJ5dGVzICs9IDQqU1NUOwogICAgIGlmIChuYnl0ZXMgPiAwKQogICAgICAgICBtZW1zZXQocSwgREVBREJZVEUsIG5ieXRlcyk7CiAgICAgUHlPYmplY3RfRnJlZShxKTsKIH0KIAogdm9pZCAqCi1fUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCitfUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKGNoYXIgYXBpLCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQogewogICAgIHVjaGFyICpxID0gKHVjaGFyICopcDsKICAgICB1Y2hhciAqdGFpbDsKQEAgLTEzOTEsOSArMTQ5Myw5IEBACiAgICAgaW50IGk7CiAKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnTWFsbG9jKG5ieXRlcyk7CisgICAgICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoYXBpLCBuYnl0ZXMpOwogCi0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKHApOworICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShhcGksIHApOwogICAgIGJ1bXBzZXJpYWxubygpOwogICAgIG9yaWdpbmFsX25ieXRlcyA9IHJlYWRfc2l6ZV90KHEgLSAyKlNTVCk7CiAgICAgdG90YWwgPSBuYnl0ZXMgKyA0KlNTVDsKQEAgLTE0MDMsMTYgKzE1MDUsMjAgQEAKIAogICAgIGlmIChuYnl0ZXMgPCBvcmlnaW5hbF9uYnl0ZXMpIHsKICAgICAgICAgLyogc2hyaW5raW5nOiAgbWFyayBvbGQgZXh0cmEgbWVtb3J5IGRlYWQgKi8KLSAgICAgICAgbWVtc2V0KHEgKyBuYnl0ZXMsIERFQURCWVRFLCBvcmlnaW5hbF9uYnl0ZXMgLSBuYnl0ZXMpOworICAgICAgICBtZW1zZXQocSArIG5ieXRlcywgREVBREJZVEUsIG9yaWdpbmFsX25ieXRlcyAtIG5ieXRlcyArIDIqU1NUKTsKICAgICB9CiAKLSAgICAvKiBSZXNpemUgYW5kIGFkZCBkZWNvcmF0aW9ucy4gKi8KKyAgICAvKiBSZXNpemUgYW5kIGFkZCBkZWNvcmF0aW9ucy4gV2UgbWF5IGdldCBhIG5ldyBwb2ludGVyIGhlcmUsIGluIHdoaWNoCisgICAgICogY2FzZSB3ZSBkaWRuJ3QgZ2V0IHRoZSBjaGFuY2UgdG8gbWFyayB0aGUgb2xkIG1lbW9yeSB3aXRoIERFQURCWVRFLAorICAgICAqIGJ1dCB3ZSBsaXZlIHdpdGggdGhhdC4KKyAgICAgKi8KICAgICBxID0gKHVjaGFyICopUHlPYmplY3RfUmVhbGxvYyhxIC0gMipTU1QsIHRvdGFsKTsKICAgICBpZiAocSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHdyaXRlX3NpemVfdChxLCBuYnl0ZXMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBTU1Q7ICsraSkKKyAgICBhc3NlcnQocVtTU1RdID09ICh1Y2hhcilhcGkpOworICAgIGZvciAoaSA9IDE7IGkgPCBTU1Q7ICsraSkKICAgICAgICAgYXNzZXJ0KHFbU1NUICsgaV0gPT0gRk9SQklEREVOQllURSk7CiAgICAgcSArPSAyKlNTVDsKICAgICB0YWlsID0gcSArIG5ieXRlczsKQEAgLTE0MjIsNyArMTUyOCw3IEBACiAgICAgaWYgKG5ieXRlcyA+IG9yaWdpbmFsX25ieXRlcykgewogICAgICAgICAvKiBncm93aW5nOiAgbWFyayBuZXcgZXh0cmEgbWVtb3J5IGNsZWFuICovCiAgICAgICAgIG1lbXNldChxICsgb3JpZ2luYWxfbmJ5dGVzLCBDTEVBTkJZVEUsCi0gICAgICAgICAgICBuYnl0ZXMgLSBvcmlnaW5hbF9uYnl0ZXMpOworICAgICAgICAgICAgICAgbmJ5dGVzIC0gb3JpZ2luYWxfbmJ5dGVzKTsKICAgICB9CiAKICAgICByZXR1cm4gcTsKQEAgLTE0MzEsMjYgKzE1MzcsMzggQEAKIC8qIENoZWNrIHRoZSBmb3JiaWRkZW4gYnl0ZXMgb24gYm90aCBlbmRzIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBwLgogICogSWYgYW55dGhpbmcgaXMgd3JvbmcsIHByaW50IGluZm8gdG8gc3RkZXJyIHZpYSBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcywKICAqIGFuZCBjYWxsIFB5X0ZhdGFsRXJyb3IgdG8ga2lsbCB0aGUgcHJvZ3JhbS4KKyAqIFRoZSBBUEkgaWQsIGlzIGFsc28gY2hlY2tlZC4KICAqLwogIHZvaWQKLV9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzcyhjb25zdCB2b2lkICpwKQorX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGNoYXIgYXBpLCBjb25zdCB2b2lkICpwKQogewogICAgIGNvbnN0IHVjaGFyICpxID0gKGNvbnN0IHVjaGFyICopcDsKKyAgICBjaGFyIG1zZ2J1Zls2NF07CiAgICAgY2hhciAqbXNnOwogICAgIHNpemVfdCBuYnl0ZXM7CiAgICAgY29uc3QgdWNoYXIgKnRhaWw7CiAgICAgaW50IGk7CisgICAgY2hhciBpZDsKIAogICAgIGlmIChwID09IE5VTEwpIHsKICAgICAgICAgbXNnID0gImRpZG4ndCBleHBlY3QgYSBOVUxMIHBvaW50ZXIiOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAorICAgIC8qIENoZWNrIHRoZSBBUEkgaWQgKi8KKyAgICBpZCA9IChjaGFyKXFbLVNTVF07CisgICAgaWYgKGlkICE9IGFwaSkgeworICAgICAgICBtc2cgPSBtc2didWY7CisgICAgICAgIHNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZ2J1ZiksICJiYWQgSUQ6IEFsbG9jYXRlZCB1c2luZyBBUEkgJyVjJywgdmVyaWZpZWQgdXNpbmcgQVBJICclYyciLCBpZCwgYXBpKTsKKyAgICAgICAgbXNnYnVmW3NpemVvZihtc2didWYpLTFdID0gMDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKICAgICAvKiBDaGVjayB0aGUgc3R1ZmYgYXQgdGhlIHN0YXJ0IG9mIHAgZmlyc3Q6ICBpZiB0aGVyZSdzIHVuZGVyd3JpdGUKICAgICAgKiBjb3JydXB0aW9uLCB0aGUgbnVtYmVyLW9mLWJ5dGVzIGZpZWxkIG1heSBiZSBudXRzLCBhbmQgY2hlY2tpbmcKICAgICAgKiB0aGUgdGFpbCBjb3VsZCBsZWFkIHRvIGEgc2VnZmF1bHQgdGhlbi4KICAgICAgKi8KLSAgICBmb3IgKGkgPSBTU1Q7IGkgPj0gMTsgLS1pKSB7CisgICAgZm9yIChpID0gU1NULTE7IGkgPj0gMTsgLS1pKSB7CiAgICAgICAgIGlmICgqKHEtaSkgIT0gRk9SQklEREVOQllURSkgewogICAgICAgICAgICAgbXNnID0gImJhZCBsZWFkaW5nIHBhZCBieXRlIjsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xNDgyLDE5ICsxNjAwLDI0IEBACiAgICAgc2l6ZV90IG5ieXRlcywgc2VyaWFsOwogICAgIGludCBpOwogICAgIGludCBvazsKKyAgICBjaGFyIGlkOwogCi0gICAgZnByaW50ZihzdGRlcnIsICJEZWJ1ZyBtZW1vcnkgYmxvY2sgYXQgYWRkcmVzcyBwPSVwOlxuIiwgcCk7Ci0gICAgaWYgKHAgPT0gTlVMTCkKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkRlYnVnIG1lbW9yeSBibG9jayBhdCBhZGRyZXNzIHA9JXA6IiwgcCk7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWQgPSAoY2hhcilxWy1TU1RdOworICAgIGZwcmludGYoc3RkZXJyLCAiIEFQSSAnJWMnXG4iLCBpZCk7CiAKICAgICBuYnl0ZXMgPSByZWFkX3NpemVfdChxIC0gMipTU1QpOwogICAgIGZwcmludGYoc3RkZXJyLCAiICAgICUiIFBZX0ZPUk1BVF9TSVpFX1QgInUgYnl0ZXMgb3JpZ2luYWxseSAiCiAgICAgICAgICAgICAgICAgICAgICJyZXF1ZXN0ZWRcbiIsIG5ieXRlcyk7CiAKICAgICAvKiBJbiBjYXNlIHRoaXMgaXMgbnV0cywgY2hlY2sgdGhlIGxlYWRpbmcgcGFkIGJ5dGVzIGZpcnN0LiAqLwotICAgIGZwcmludGYoc3RkZXJyLCAiICAgIFRoZSAlZCBwYWQgYnl0ZXMgYXQgcC0lZCBhcmUgIiwgU1NULCBTU1QpOworICAgIGZwcmludGYoc3RkZXJyLCAiICAgIFRoZSAlZCBwYWQgYnl0ZXMgYXQgcC0lZCBhcmUgIiwgU1NULTEsIFNTVC0xKTsKICAgICBvayA9IDE7Ci0gICAgZm9yIChpID0gMTsgaSA8PSBTU1Q7ICsraSkgeworICAgIGZvciAoaSA9IDE7IGkgPD0gU1NULTE7ICsraSkgewogICAgICAgICBpZiAoKihxLWkpICE9IEZPUkJJRERFTkJZVEUpIHsKICAgICAgICAgICAgIG9rID0gMDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTUwNSw3ICsxNjI4LDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJub3QgYWxsIEZPUkJJRERFTkJZVEUgKDB4JTAyeCk6XG4iLAogICAgICAgICAgICAgRk9SQklEREVOQllURSk7Ci0gICAgICAgIGZvciAoaSA9IFNTVDsgaSA+PSAxOyAtLWkpIHsKKyAgICAgICAgZm9yIChpID0gU1NULTE7IGkgPj0gMTsgLS1pKSB7CiAgICAgICAgICAgICBjb25zdCB1Y2hhciBieXRlID0gKihxLWkpOwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgICAgIGF0IHAtJWQ6IDB4JTAyeCIsIGksIGJ5dGUpOwogICAgICAgICAgICAgaWYgKGJ5dGUgIT0gRk9SQklEREVOQllURSkKQEAgLTE1MzIsMTEgKzE2NTUsMTEgQEAKICAgICAgICAgZnB1dHMoIkZPUkJJRERFTkJZVEUsIGFzIGV4cGVjdGVkLlxuIiwgc3RkZXJyKTsKICAgICBlbHNlIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJub3QgYWxsIEZPUkJJRERFTkJZVEUgKDB4JTAyeCk6XG4iLAotICAgICAgICAgICAgRk9SQklEREVOQllURSk7CisgICAgICAgICAgICAgICAgRk9SQklEREVOQllURSk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBTU1Q7ICsraSkgewogICAgICAgICAgICAgY29uc3QgdWNoYXIgYnl0ZSA9IHRhaWxbaV07CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAgICAgYXQgdGFpbCslZDogMHglMDJ4IiwKLSAgICAgICAgICAgICAgICBpLCBieXRlKTsKKyAgICAgICAgICAgICAgICAgICAgaSwgYnl0ZSk7CiAgICAgICAgICAgICBpZiAoYnl0ZSAhPSBGT1JCSURERU5CWVRFKQogICAgICAgICAgICAgICAgIGZwdXRzKCIgKioqIE9VQ0giLCBzdGRlcnIpOwogICAgICAgICAgICAgZnB1dGMoJ1xuJywgc3RkZXJyKTsKQEAgLTE2NDIsNyArMTc2NSw3IEBACiAgICAgY2hhciBidWZbMTI4XTsKIAogICAgIGZwcmludGYoc3RkZXJyLCAiU21hbGwgYmxvY2sgdGhyZXNob2xkID0gJWQsIGluICV1IHNpemUgY2xhc3Nlcy5cbiIsCi0gICAgICAgIFNNQUxMX1JFUVVFU1RfVEhSRVNIT0xELCBudW1jbGFzc2VzKTsKKyAgICAgICAgICAgIFNNQUxMX1JFUVVFU1RfVEhSRVNIT0xELCBudW1jbGFzc2VzKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1jbGFzc2VzOyArK2kpCiAgICAgICAgIG51bXBvb2xzW2ldID0gbnVtYmxvY2tzW2ldID0gbnVtZnJlZWJsb2Nrc1tpXSA9IDA7CkBAIC0xNjUyLDcgKzE3NzUsNiBAQAogICAgICAqIHdpbGwgYmUgbGl2aW5nIGluIGZ1bGwgcG9vbHMgLS0gd291bGQgYmUgYSBzaGFtZSB0byBtaXNzIHRoZW0uCiAgICAgICovCiAgICAgZm9yIChpID0gMDsgaSA8IG1heGFyZW5hczsgKytpKSB7Ci0gICAgICAgIHVpbnQgcG9vbHNpbmFyZW5hOwogICAgICAgICB1aW50IGo7CiAgICAgICAgIHVwdHIgYmFzZSA9IGFyZW5hc1tpXS5hZGRyZXNzOwogCkBAIC0xNjYxLDcgKzE3ODMsNiBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG5hcmVuYXMgKz0gMTsKIAotICAgICAgICBwb29sc2luYXJlbmEgPSBhcmVuYXNbaV0ubnRvdGFscG9vbHM7CiAgICAgICAgIG51bWZyZWVwb29scyArPSBhcmVuYXNbaV0ubmZyZWVwb29sczsKIAogICAgICAgICAvKiByb3VuZCB1cCB0byBwb29sIGFsaWdubWVudCAqLwpAQCAtMTcwMCw3ICsxODIxLDcgQEAKICAgICBmcHV0YygnXG4nLCBzdGRlcnIpOwogICAgIGZwdXRzKCJjbGFzcyAgIHNpemUgICBudW0gcG9vbHMgICBibG9ja3MgaW4gdXNlICBhdmFpbCBibG9ja3NcbiIKICAgICAgICAgICAiLS0tLS0gICAtLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tXG4iLAotICAgICAgICBzdGRlcnIpOworICAgICAgICAgIHN0ZGVycik7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtY2xhc3NlczsgKytpKSB7CiAgICAgICAgIHNpemVfdCBwID0gbnVtcG9vbHNbaV07CkBAIC0xNzE1LDcgKzE4MzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIiUxMSIgUFlfRk9STUFUX1NJWkVfVCAidSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiJTE1IiBQWV9GT1JNQVRfU0laRV9UICJ1ICIKICAgICAgICAgICAgICAgICAgICAgICAgICIlMTMiIFBZX0ZPUk1BVF9TSVpFX1QgInVcbiIsCi0gICAgICAgICAgICBpLCBzaXplLCBwLCBiLCBmKTsKKyAgICAgICAgICAgICAgICBpLCBzaXplLCBwLCBiLCBmKTsKICAgICAgICAgYWxsb2NhdGVkX2J5dGVzICs9IGIgKiBzaXplOwogICAgICAgICBhdmFpbGFibGVfYnl0ZXMgKz0gZiAqIHNpemU7CiAgICAgICAgIHBvb2xfaGVhZGVyX2J5dGVzICs9IHAgKiBQT09MX09WRVJIRUFEOwpAQCAtMTc1OCw4ICsxODc5LDEwIEBACiBpbnQKIFB5X0FERFJFU1NfSU5fUkFOR0Uodm9pZCAqUCwgcG9vbHAgcG9vbCkKIHsKLSAgICByZXR1cm4gcG9vbC0+YXJlbmFpbmRleCA8IG1heGFyZW5hcyAmJgotICAgICAgICAgICAodXB0cilQIC0gYXJlbmFzW3Bvb2wtPmFyZW5haW5kZXhdLmFkZHJlc3MgPCAodXB0cilBUkVOQV9TSVpFICYmCi0gICAgICAgICAgIGFyZW5hc1twb29sLT5hcmVuYWluZGV4XS5hZGRyZXNzICE9IDA7CisgICAgdWludCBhcmVuYWluZGV4X3RlbXAgPSBwb29sLT5hcmVuYWluZGV4OworCisgICAgcmV0dXJuIGFyZW5haW5kZXhfdGVtcCA8IG1heGFyZW5hcyAmJgorICAgICAgICAgICAodXB0cilQIC0gYXJlbmFzW2FyZW5haW5kZXhfdGVtcF0uYWRkcmVzcyA8ICh1cHRyKUFSRU5BX1NJWkUgJiYKKyAgICAgICAgICAgYXJlbmFzW2FyZW5haW5kZXhfdGVtcF0uYWRkcmVzcyAhPSAwOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9PYmplY3RzL3NldG9iamVjdC5jIGIvT2JqZWN0cy9zZXRvYmplY3QuYwppbmRleCA2YTZlYjNhLi4wMGNhYmU2IDEwMDY0NAotLS0gYS9PYmplY3RzL3NldG9iamVjdC5jCisrKyBiL09iamVjdHMvc2V0b2JqZWN0LmMKQEAgLTE4NTUsMTIgKzE4NTUsMTAgQEAKICAgICAgICAgaWYgKCFQeVNldF9DaGVjayhrZXkpIHx8ICFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIHRtcGtleSA9IG1ha2VfbmV3X3NldCgmUHlGcm96ZW5TZXRfVHlwZSwgTlVMTCk7CisgICAgICAgIHRtcGtleSA9IG1ha2VfbmV3X3NldCgmUHlGcm96ZW5TZXRfVHlwZSwga2V5KTsKICAgICAgICAgaWYgKHRtcGtleSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBzZXRfc3dhcF9ib2RpZXMoKFB5U2V0T2JqZWN0ICopdG1wa2V5LCAoUHlTZXRPYmplY3QgKilrZXkpOwogICAgICAgICBydiA9IHNldF9jb250YWlucyhzbywgdG1wa2V5KTsKLSAgICAgICAgc2V0X3N3YXBfYm9kaWVzKChQeVNldE9iamVjdCAqKXRtcGtleSwgKFB5U2V0T2JqZWN0ICopa2V5KTsKICAgICAgICAgUHlfREVDUkVGKHRtcGtleSk7CiAgICAgfQogICAgIHJldHVybiBydjsKQEAgLTE4OTAsMTIgKzE4ODgsMTAgQEAKICAgICAgICAgaWYgKCFQeVNldF9DaGVjayhrZXkpIHx8ICFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgdG1wa2V5ID0gbWFrZV9uZXdfc2V0KCZQeUZyb3plblNldF9UeXBlLCBOVUxMKTsKKyAgICAgICAgdG1wa2V5ID0gbWFrZV9uZXdfc2V0KCZQeUZyb3plblNldF9UeXBlLCBrZXkpOwogICAgICAgICBpZiAodG1wa2V5ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgc2V0X3N3YXBfYm9kaWVzKChQeVNldE9iamVjdCAqKXRtcGtleSwgKFB5U2V0T2JqZWN0ICopa2V5KTsKICAgICAgICAgcnYgPSBzZXRfZGlzY2FyZF9rZXkoc28sIHRtcGtleSk7Ci0gICAgICAgIHNldF9zd2FwX2JvZGllcygoUHlTZXRPYmplY3QgKil0bXBrZXksIChQeVNldE9iamVjdCAqKWtleSk7CiAgICAgICAgIFB5X0RFQ1JFRih0bXBrZXkpOwogICAgICAgICBpZiAocnYgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE5MjQsMTIgKzE5MjAsMTAgQEAKICAgICAgICAgaWYgKCFQeVNldF9DaGVjayhrZXkpIHx8ICFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgdG1wa2V5ID0gbWFrZV9uZXdfc2V0KCZQeUZyb3plblNldF9UeXBlLCBOVUxMKTsKKyAgICAgICAgdG1wa2V5ID0gbWFrZV9uZXdfc2V0KCZQeUZyb3plblNldF9UeXBlLCBrZXkpOwogICAgICAgICBpZiAodG1wa2V5ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgc2V0X3N3YXBfYm9kaWVzKChQeVNldE9iamVjdCAqKXRtcGtleSwgKFB5U2V0T2JqZWN0ICopa2V5KTsKICAgICAgICAgcmVzdWx0ID0gc2V0X2Rpc2NhcmQoc28sIHRtcGtleSk7Ci0gICAgICAgIHNldF9zd2FwX2JvZGllcygoUHlTZXRPYmplY3QgKil0bXBrZXksIChQeVNldE9iamVjdCAqKWtleSk7CiAgICAgICAgIFB5X0RFQ1JFRih0bXBrZXkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTIzODksMTEgKzIzODMsMjUgQEAKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKmVsZW09TlVMTCwgKmR1cD1OVUxMLCAqdCwgKmYsICpkdXAyLCAqeDsKICAgICBQeU9iamVjdCAqb2IgPSAoUHlPYmplY3QgKilzbzsKKyAgICBQeU9iamVjdCAqc3RyOwogCi0gICAgLyogVmVyaWZ5IHByZWNvbmRpdGlvbnMgYW5kIGV4ZXJjaXNlIHR5cGUvc2l6ZSBjaGVja3MgKi8KKyAgICAvKiBWZXJpZnkgcHJlY29uZGl0aW9ucyAqLwogICAgIGFzc2VydChQeUFueVNldF9DaGVjayhvYikpOwogICAgIGFzc2VydChQeUFueVNldF9DaGVja0V4YWN0KG9iKSk7CiAgICAgYXNzZXJ0KCFQeUZyb3plblNldF9DaGVja0V4YWN0KG9iKSk7CisKKyAgICAvKiBzby5jbGVhcigpOyBzbyB8PSBzZXQoImFiYyIpOyAqLworICAgIHN0ciA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoImFiYyIpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc2V0X2NsZWFyX2ludGVybmFsKHNvKTsKKyAgICBpZiAoc2V0X3VwZGF0ZV9pbnRlcm5hbChzbywgc3RyKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0RFQ1JFRihzdHIpOworCisgICAgLyogRXhlcmNpc2UgdHlwZS9zaXplIGNoZWNrcyAqLwogICAgIGFzc2VydChQeVNldF9TaXplKG9iKSA9PSAzKTsKICAgICBhc3NlcnQoUHlTZXRfR0VUX1NJWkUob2IpID09IDMpOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9SRUFETUUudHh0IGIvT2JqZWN0cy9zdHJpbmdsaWIvUkVBRE1FLnR4dAppbmRleCA4MmE4Nzc0Li5hYjUwNmQ2IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9SRUFETUUudHh0CisrKyBiL09iamVjdHMvc3RyaW5nbGliL1JFQURNRS50eHQKQEAgLTEzLDExICsxMyw4IEBACiAKIFNUUklOR0xJQl9FTVBUWQogCi0gICAgYSBQeU9iamVjdCByZXByZXNlbnRpbmcgdGhlIGVtcHR5IHN0cmluZwotCi1pbnQgU1RSSU5HTElCX0NNUChTVFJJTkdMSUJfQ0hBUiosIFNUUklOR0xJQl9DSEFSKiwgUHlfc3NpemVfdCkKLQotICAgIGNvbXBhcmVzIHR3byBzdHJpbmdzLiByZXR1cm5zIDAgaWYgdGhleSBtYXRjaCwgYW5kIG5vbi16ZXJvIGlmIG5vdC4KKyAgICBhIFB5T2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZW1wdHkgc3RyaW5nLCBvbmx5IHRvIGJlIHVzZWQgaWYKKyAgICBTVFJJTkdMSUJfTVVUQUJMRSBpcyAwCiAKIFB5X3NzaXplX3QgU1RSSU5HTElCX0xFTihQeU9iamVjdCopCiAKQEAgLTMyLDMgKzI5LDEyIEBACiAKICAgICByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXIgZGF0YSBmb3IgdGhlIGdpdmVuIHN0cmluZwogICAgIG9iamVjdCAod2hpY2ggbXVzdCBiZSBvZiB0aGUgcmlnaHQgdHlwZSkKKworaW50IFNUUklOR0xJQl9DSEVDS19FWEFDVChQeU9iamVjdCAqKQorCisgICAgcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2Ygb3VyIHR5cGUsIG5vdCBhIHN1YmNsYXNzCisKK1NUUklOR0xJQl9NVVRBQkxFCisKKyAgICBtdXN0IGJlIDAgb3IgMSB0byB0ZWxsIHRoZSBjcHAgbWFjcm9zIGluIHN0cmluZ2xpYiBjb2RlIGlmIHRoZSBvYmplY3QKKyAgICBiZWluZyBvcGVyYXRlZCBvbiBpcyBtdXRhYmxlIG9yIG5vdApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvY291bnQuaCBiL09iamVjdHMvc3RyaW5nbGliL2NvdW50LmgKaW5kZXggZWJhMzdlOS4uZGUzNGY5NiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvY291bnQuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9jb3VudC5oCkBAIC05LDI4ICs5LDIyIEBACiAKIFB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQogc3RyaW5nbGliX2NvdW50KGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKLSAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3ViLCBQeV9zc2l6ZV90IHN1Yl9sZW4pCisgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN1YiwgUHlfc3NpemVfdCBzdWJfbGVuLAorICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCiB7CiAgICAgUHlfc3NpemVfdCBjb3VudDsKIAogICAgIGlmIChzdHJfbGVuIDwgMCkKICAgICAgICAgcmV0dXJuIDA7IC8qIHN0YXJ0ID4gbGVuKHN0cikgKi8KICAgICBpZiAoc3ViX2xlbiA9PSAwKQotICAgICAgICByZXR1cm4gc3RyX2xlbiArIDE7CisgICAgICAgIHJldHVybiAoc3RyX2xlbiA8IG1heGNvdW50KSA/IHN0cl9sZW4gKyAxIDogbWF4Y291bnQ7CiAKLSAgICBjb3VudCA9IGZhc3RzZWFyY2goc3RyLCBzdHJfbGVuLCBzdWIsIHN1Yl9sZW4sIEZBU1RfQ09VTlQpOworICAgIGNvdW50ID0gZmFzdHNlYXJjaChzdHIsIHN0cl9sZW4sIHN1Yiwgc3ViX2xlbiwgbWF4Y291bnQsIEZBU1RfQ09VTlQpOwogCiAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgY291bnQgPSAwOyAvKiBubyBtYXRjaCAqLworICAgICAgICByZXR1cm4gMDsgLyogbm8gbWF0Y2ggKi8KIAogICAgIHJldHVybiBjb3VudDsKIH0KIAogI2VuZGlmCi0KLS8qCi1Mb2NhbCB2YXJpYWJsZXM6Ci1jLWJhc2ljLW9mZnNldDogNAotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0qLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvY3R5cGUuaCBiL09iamVjdHMvc3RyaW5nbGliL2N0eXBlLmgKaW5kZXggODk1MTI3Ni4uNzM5Y2YzZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvY3R5cGUuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9jdHlwZS5oCkBAIC0xMDcsNCArMTA3LDMgQEAKICAgICAgICAgICAgICAgICAgICAgU1RSSU5HTElCX0xFTihzZWxmKSk7CiAgICAgcmV0dXJuIG5ld29iajsKIH0KLQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCmluZGV4IDIzYmNjZmIuLmUyMzFjNTggMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKQEAgLTUsNyArNSw3IEBACiAKIC8qIGZhc3Qgc2VhcmNoL2NvdW50IGltcGxlbWVudGF0aW9uLCBiYXNlZCBvbiBhIG1peCBiZXR3ZWVuIGJveWVyLQogICAgbW9vcmUgYW5kIGhvcnNwb29sLCB3aXRoIGEgZmV3IG1vcmUgYmVsbHMgYW5kIHdoaXN0bGVzIG9uIHRoZSB0b3AuCi0gICBmb3Igc29tZSBtb3JlIGJhY2tncm91bmQsIHNlZTogaHR0cDovL2VmZmJvdC5vcmcvc3RyaW5nbGliLmh0bSAqLworICAgZm9yIHNvbWUgbW9yZSBiYWNrZ3JvdW5kLCBzZWU6IGh0dHA6Ly9lZmZib3Qub3JnL3pvbmUvc3RyaW5nbGliLmh0bSAqLwogCiAvKiBub3RlOiBmYXN0c2VhcmNoIG1heSBhY2Nlc3Mgc1tuXSwgd2hpY2ggaXNuJ3QgYSBwcm9ibGVtIHdoZW4gdXNpbmcKICAgIFB5dGhvbidzIG9yZGluYXJ5IHN0cmluZyB0eXBlcywgYnV0IG1heSBjYXVzZSBwcm9ibGVtcyBpZiB5b3UncmUKQEAgLTE2LDE5ICsxNiwzNSBAQAogCiAjZGVmaW5lIEZBU1RfQ09VTlQgMAogI2RlZmluZSBGQVNUX1NFQVJDSCAxCisjZGVmaW5lIEZBU1RfUlNFQVJDSCAyCisKKyNpZiBMT05HX0JJVCA+PSAxMjgKKyNkZWZpbmUgU1RSSU5HTElCX0JMT09NX1dJRFRIIDEyOAorI2VsaWYgTE9OR19CSVQgPj0gNjQKKyNkZWZpbmUgU1RSSU5HTElCX0JMT09NX1dJRFRIIDY0CisjZWxpZiBMT05HX0JJVCA+PSAzMgorI2RlZmluZSBTVFJJTkdMSUJfQkxPT01fV0lEVEggMzIKKyNlbHNlCisjZXJyb3IgIkxPTkdfQklUIGlzIHNtYWxsZXIgdGhhbiAzMiIKKyNlbmRpZgorCisjZGVmaW5lIFNUUklOR0xJQl9CTE9PTV9BREQobWFzaywgY2gpIFwKKyAgICAoKG1hc2sgfD0gKDFVTCA8PCAoKGNoKSAmIChTVFJJTkdMSUJfQkxPT01fV0lEVEggLTEpKSkpKQorI2RlZmluZSBTVFJJTkdMSUJfQkxPT00obWFzaywgY2gpICAgICBcCisgICAgKChtYXNrICYgICgxVUwgPDwgKChjaCkgJiAoU1RSSU5HTElCX0JMT09NX1dJRFRIIC0xKSkpKSkKIAogUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCiBmYXN0c2VhcmNoKGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzLCBQeV9zc2l6ZV90IG4sCiAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBwLCBQeV9zc2l6ZV90IG0sCi0gICAgICAgICAgIGludCBtb2RlKQorICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50LCBpbnQgbW9kZSkKIHsKLSAgICBsb25nIG1hc2s7CisgICAgdW5zaWduZWQgbG9uZyBtYXNrOwogICAgIFB5X3NzaXplX3Qgc2tpcCwgY291bnQgPSAwOwogICAgIFB5X3NzaXplX3QgaSwgaiwgbWxhc3QsIHc7CiAKICAgICB3ID0gbiAtIG07CiAKLSAgICBpZiAodyA8IDApCisgICAgaWYgKHcgPCAwIHx8IChtb2RlID09IEZBU1RfQ09VTlQgJiYgbWF4Y291bnQgPT0gMCkpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGxvb2sgZm9yIHNwZWNpYWwgY2FzZXMgKi8KQEAgLTM4LDU0ICs1NCwxMDEgQEAKICAgICAgICAgLyogdXNlIHNwZWNpYWwgY2FzZSBmb3IgMS1jaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgICAgICBpZiAobW9kZSA9PSBGQVNUX0NPVU5UKSB7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgICAgIGlmIChzW2ldID09IHBbMF0pCisgICAgICAgICAgICAgICAgaWYgKHNbaV0gPT0gcFswXSkgewogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gbWF4Y291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF4Y291bnQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGNvdW50OwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gRkFTVF9TRUFSQ0gpIHsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAgICAgICAgaWYgKHNbaV0gPT0gcFswXSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSB7ICAgIC8qIEZBU1RfUlNFQVJDSCAqLworICAgICAgICAgICAgZm9yIChpID0gbiAtIDE7IGkgPiAtMTsgaS0tKQorICAgICAgICAgICAgICAgIGlmIChzW2ldID09IHBbMF0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBtbGFzdCA9IG0gLSAxOwotCi0gICAgLyogY3JlYXRlIGNvbXByZXNzZWQgYm95ZXItbW9vcmUgZGVsdGEgMSB0YWJsZSAqLwogICAgIHNraXAgPSBtbGFzdCAtIDE7Ci0gICAgLyogcHJvY2VzcyBwYXR0ZXJuWzotMV0gKi8KLSAgICBmb3IgKG1hc2sgPSBpID0gMDsgaSA8IG1sYXN0OyBpKyspIHsKLSAgICAgICAgbWFzayB8PSAoMSA8PCAocFtpXSAmIDB4MUYpKTsKLSAgICAgICAgaWYgKHBbaV0gPT0gcFttbGFzdF0pCi0gICAgICAgICAgICBza2lwID0gbWxhc3QgLSBpIC0gMTsKLSAgICB9Ci0gICAgLyogcHJvY2VzcyBwYXR0ZXJuWy0xXSBvdXRzaWRlIHRoZSBsb29wICovCi0gICAgbWFzayB8PSAoMSA8PCAocFttbGFzdF0gJiAweDFGKSk7CisgICAgbWFzayA9IDA7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDw9IHc7IGkrKykgewotICAgICAgICAvKiBub3RlOiB1c2luZyBtbGFzdCBpbiB0aGUgc2tpcCBwYXRoIHNsb3dzIHRoaW5ncyBkb3duIG9uIHg4NiAqLwotICAgICAgICBpZiAoc1tpK20tMV0gPT0gcFttLTFdKSB7Ci0gICAgICAgICAgICAvKiBjYW5kaWRhdGUgbWF0Y2ggKi8KLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBtbGFzdDsgaisrKQotICAgICAgICAgICAgICAgIGlmIChzW2kral0gIT0gcFtqXSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoaiA9PSBtbGFzdCkgewotICAgICAgICAgICAgICAgIC8qIGdvdCBhIG1hdGNoISAqLwotICAgICAgICAgICAgICAgIGlmIChtb2RlICE9IEZBU1RfQ09VTlQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaSA9IGkgKyBtbGFzdDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICBpZiAobW9kZSAhPSBGQVNUX1JTRUFSQ0gpIHsKKworICAgICAgICAvKiBjcmVhdGUgY29tcHJlc3NlZCBib3llci1tb29yZSBkZWx0YSAxIHRhYmxlICovCisKKyAgICAgICAgLyogcHJvY2VzcyBwYXR0ZXJuWzotMV0gKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG1sYXN0OyBpKyspIHsKKyAgICAgICAgICAgIFNUUklOR0xJQl9CTE9PTV9BREQobWFzaywgcFtpXSk7CisgICAgICAgICAgICBpZiAocFtpXSA9PSBwW21sYXN0XSkKKyAgICAgICAgICAgICAgICBza2lwID0gbWxhc3QgLSBpIC0gMTsKKyAgICAgICAgfQorICAgICAgICAvKiBwcm9jZXNzIHBhdHRlcm5bLTFdIG91dHNpZGUgdGhlIGxvb3AgKi8KKyAgICAgICAgU1RSSU5HTElCX0JMT09NX0FERChtYXNrLCBwW21sYXN0XSk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8PSB3OyBpKyspIHsKKyAgICAgICAgICAgIC8qIG5vdGU6IHVzaW5nIG1sYXN0IGluIHRoZSBza2lwIHBhdGggc2xvd3MgdGhpbmdzIGRvd24gb24geDg2ICovCisgICAgICAgICAgICBpZiAoc1tpK20tMV0gPT0gcFttLTFdKSB7CisgICAgICAgICAgICAgICAgLyogY2FuZGlkYXRlIG1hdGNoICovCisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG1sYXN0OyBqKyspCisgICAgICAgICAgICAgICAgICAgIGlmIChzW2kral0gIT0gcFtqXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChqID09IG1sYXN0KSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGdvdCBhIG1hdGNoISAqLworICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSAhPSBGQVNUX0NPVU5UKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PSBtYXhjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXhjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBtbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIG1pc3M6IGNoZWNrIGlmIG5leHQgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLworICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNbaSttXSkpCisgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgc2tpcDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogc2tpcDogY2hlY2sgaWYgbmV4dCBjaGFyYWN0ZXIgaXMgcGFydCBvZiBwYXR0ZXJuICovCisgICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc1tpK21dKSkKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBtOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogbWlzczogY2hlY2sgaWYgbmV4dCBjaGFyYWN0ZXIgaXMgcGFydCBvZiBwYXR0ZXJuICovCi0gICAgICAgICAgICBpZiAoIShtYXNrICYgKDEgPDwgKHNbaSttXSAmIDB4MUYpKSkpCi0gICAgICAgICAgICAgICAgaSA9IGkgKyBtOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGkgPSBpICsgc2tpcDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHNraXA6IGNoZWNrIGlmIG5leHQgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgaWYgKCEobWFzayAmICgxIDw8IChzW2krbV0gJiAweDFGKSkpKQotICAgICAgICAgICAgICAgIGkgPSBpICsgbTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7ICAgIC8qIEZBU1RfUlNFQVJDSCAqLworCisgICAgICAgIC8qIGNyZWF0ZSBjb21wcmVzc2VkIGJveWVyLW1vb3JlIGRlbHRhIDEgdGFibGUgKi8KKworICAgICAgICAvKiBwcm9jZXNzIHBhdHRlcm5bMF0gb3V0c2lkZSB0aGUgbG9vcCAqLworICAgICAgICBTVFJJTkdMSUJfQkxPT01fQUREKG1hc2ssIHBbMF0pOworICAgICAgICAvKiBwcm9jZXNzIHBhdHRlcm5bOjA6LTFdICovCisgICAgICAgIGZvciAoaSA9IG1sYXN0OyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICBTVFJJTkdMSUJfQkxPT01fQUREKG1hc2ssIHBbaV0pOworICAgICAgICAgICAgaWYgKHBbaV0gPT0gcFswXSkKKyAgICAgICAgICAgICAgICBza2lwID0gaSAtIDE7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSB3OyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKHNbaV0gPT0gcFswXSkgeworICAgICAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSBtYXRjaCAqLworICAgICAgICAgICAgICAgIGZvciAoaiA9IG1sYXN0OyBqID4gMDsgai0tKQorICAgICAgICAgICAgICAgICAgICBpZiAoc1tpK2pdICE9IHBbal0pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoaiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAvKiBnb3QgYSBtYXRjaCEgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgLyogbWlzczogY2hlY2sgaWYgcHJldmlvdXMgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLworICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiAhU1RSSU5HTElCX0JMT09NKG1hc2ssIHNbaS0xXSkpCisgICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gbTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gc2tpcDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogc2tpcDogY2hlY2sgaWYgcHJldmlvdXMgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLworICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiAhU1RSSU5HTElCX0JMT09NKG1hc2ssIHNbaS0xXSkpCisgICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gbTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtOTUsMTAgKzE1OCwzIEBACiB9CiAKICNlbmRpZgotCi0vKgotTG9jYWwgdmFyaWFibGVzOgotYy1iYXNpYy1vZmZzZXQ6IDQKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaCBiL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaAppbmRleCBmYmU5OWM3Li5mOTE1Mjk2YyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaApAQCAtMTksNyArMTksNyBAQAogICAgIGlmIChzdWJfbGVuID09IDApCiAgICAgICAgIHJldHVybiBvZmZzZXQ7CiAKLSAgICBwb3MgPSBmYXN0c2VhcmNoKHN0ciwgc3RyX2xlbiwgc3ViLCBzdWJfbGVuLCBGQVNUX1NFQVJDSCk7CisgICAgcG9zID0gZmFzdHNlYXJjaChzdHIsIHN0cl9sZW4sIHN1Yiwgc3ViX2xlbiwgLTEsIEZBU1RfU0VBUkNIKTsKIAogICAgIGlmIChwb3MgPj0gMCkKICAgICAgICAgcG9zICs9IG9mZnNldDsKQEAgLTMyLDQyICszMiw0MyBAQAogICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdWIsIFB5X3NzaXplX3Qgc3ViX2xlbiwKICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG9mZnNldCkKIHsKLSAgICAvKiBYWFggLSBjcmVhdGUgcmV2ZXJzZWZhc3RzZWFyY2ggaGVscGVyISAqLwotICAgIGlmIChzdWJfbGVuID09IDApIHsKLSAgICAgICAgaWYgKHN0cl9sZW4gPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotCXJldHVybiBzdHJfbGVuICsgb2Zmc2V0OwotICAgIH0gZWxzZSB7Ci0JUHlfc3NpemVfdCBqLCBwb3MgPSAtMTsKLQlmb3IgKGogPSBzdHJfbGVuIC0gc3ViX2xlbjsgaiA+PSAwOyAtLWopCi0gICAgICAgICAgICBpZiAoU1RSSU5HTElCX0NNUChzdHIraiwgc3ViLCBzdWJfbGVuKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcG9zID0gaiArIG9mZnNldDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBvczsKLSAgICB9CisgICAgUHlfc3NpemVfdCBwb3M7CisKKyAgICBpZiAoc3RyX2xlbiA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoc3ViX2xlbiA9PSAwKQorICAgICAgICByZXR1cm4gc3RyX2xlbiArIG9mZnNldDsKKworICAgIHBvcyA9IGZhc3RzZWFyY2goc3RyLCBzdHJfbGVuLCBzdWIsIHN1Yl9sZW4sIC0xLCBGQVNUX1JTRUFSQ0gpOworCisgICAgaWYgKHBvcyA+PSAwKQorICAgICAgICBwb3MgKz0gb2Zmc2V0OworCisgICAgcmV0dXJuIHBvczsKIH0KIAorLyogaGVscGVyIG1hY3JvIHRvIGZpeHVwIHN0YXJ0L2VuZCBzbGljZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKSAgICAgICAgIFwKKyAgICBpZiAoZW5kID4gbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChlbmQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGVuZCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGVuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoc3RhcnQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhcnQgKz0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKIFB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQogc3RyaW5nbGliX2ZpbmRfc2xpY2UoY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN1YiwgUHlfc3NpemVfdCBzdWJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQpCiB7Ci0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgKz0gc3RyX2xlbjsKLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBzdGFydCA9IDA7Ci0gICAgaWYgKGVuZCA+IHN0cl9sZW4pCi0gICAgICAgIGVuZCA9IHN0cl9sZW47Ci0gICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCArPSBzdHJfbGVuOwotICAgIGlmIChlbmQgPCAwKQotICAgICAgICBlbmQgPSAwOwotCi0gICAgcmV0dXJuIHN0cmluZ2xpYl9maW5kKAotICAgICAgICBzdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQsCi0gICAgICAgIHN1Yiwgc3ViX2xlbiwgc3RhcnQKLSAgICAgICAgKTsKKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBzdHJfbGVuKTsKKyAgICByZXR1cm4gc3RyaW5nbGliX2ZpbmQoc3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LCBzdWIsIHN1Yl9sZW4sIHN0YXJ0KTsKIH0KIAogUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCkBAIC03NSwyMSArNzYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3ViLCBQeV9zc2l6ZV90IHN1Yl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQpCiB7Ci0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgKz0gc3RyX2xlbjsKLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBzdGFydCA9IDA7Ci0gICAgaWYgKGVuZCA+IHN0cl9sZW4pCi0gICAgICAgIGVuZCA9IHN0cl9sZW47Ci0gICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCArPSBzdHJfbGVuOwotICAgIGlmIChlbmQgPCAwKQotICAgICAgICBlbmQgPSAwOwotCisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgc3RyX2xlbik7CiAgICAgcmV0dXJuIHN0cmluZ2xpYl9yZmluZChzdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHN1Yiwgc3ViX2xlbiwgc3RhcnQpOwogfQogCi0jaWYgZGVmaW5lZChTVFJJTkdMSUJfU1RSKSAmJiAhZGVmaW5lZChGUk9NX0JZVEVBUlJBWSkKKyNpZmRlZiBTVFJJTkdMSUJfV0FOVF9DT05UQUlOU19PQkoKIAogUHlfTE9DQUxfSU5MSU5FKGludCkKIHN0cmluZ2xpYl9jb250YWluc19vYmooUHlPYmplY3QqIHN0ciwgUHlPYmplY3QqIHN1YikKQEAgLTEwMCw5ICs5MSw5IEBACiAgICAgICAgICkgIT0gLTE7CiB9CiAKLSNlbmRpZiAvKiBTVFJJTkdMSUJfU1RSICovCisjZW5kaWYgLyogU1RSSU5HTElCX1dBTlRfQ09OVEFJTlNfT0JKICovCiAKLSNpZmRlZiBGUk9NX1VOSUNPREUKKyNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQogCiAvKgogVGhpcyBmdW5jdGlvbiBpcyBhIGhlbHBlciBmb3IgdGhlICJmaW5kIiBmYW1pbHkgKGZpbmQsIHJmaW5kLCBpbmRleCwKQEAgLTE1MCwxMyArMTQxLDYgQEAKICAgICByZXR1cm4gMTsKIH0KIAotI2VuZGlmIC8qIEZST01fVU5JQ09ERSAqLworI2VuZGlmIC8qIFNUUklOR0xJQl9JU19VTklDT0RFICovCiAKICNlbmRpZiAvKiBTVFJJTkdMSUJfRklORF9IICovCi0KLS8qCi1Mb2NhbCB2YXJpYWJsZXM6Ci1jLWJhc2ljLW9mZnNldDogNAotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0qLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZm9ybWF0dGVyLmggYi9PYmplY3RzL3N0cmluZ2xpYi9mb3JtYXR0ZXIuaAppbmRleCBlOTQ5NWM5Li5jNDlhMTA0IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9mb3JtYXR0ZXIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9mb3JtYXR0ZXIuaApAQCAtMSw2ICsxLDggQEAKIC8qIGltcGxlbWVudHMgdGhlIHN0cmluZywgbG9uZywgYW5kIGZsb2F0IGZvcm1hdHRlcnMuICB0aGF0IGlzLAogICAgc3RyaW5nLl9fZm9ybWF0X18sIGV0Yy4gKi8KIAorI2luY2x1ZGUgPGxvY2FsZS5oPgorCiAvKiBCZWZvcmUgaW5jbHVkaW5nIHRoaXMsIHlvdSBtdXN0IGluY2x1ZGUgZWl0aGVyOgogICAgc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKICAgIHN0cmluZ2xpYi9zdHJpbmdkZWZzLmgKQEAgLTksMTIgKzExLDExIEBACiAgICBGT1JNQVRfU1RSSU5HCiAgICBGT1JNQVRfTE9ORwogICAgRk9STUFUX0ZMT0FUCisgICBGT1JNQVRfQ09NUExFWAogICAgdG8gYmUgd2hhdGV2ZXIgeW91IHdhbnQgdGhlIHB1YmxpYyBuYW1lcyBvZiB0aGVzZSBmdW5jdGlvbnMgdG8KICAgIGJlLiAgVGhlc2UgYXJlIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgaGVyZS4KICovCiAKLSNkZWZpbmUgQUxMT1dfUEFSRU5TX0ZPUl9TSUdOIDAKLQogLyogUmFpc2VzIGFuIGV4Y2VwdGlvbiBhYm91dCBhbiB1bmtub3duIHByZXNlbnRhdGlvbiB0eXBlIGZvciB0aGlzCiAgKiB0eXBlLiAqLwogCkBAIC00Myw2ICs0NCwyNCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkCitpbnZhbGlkX2NvbW1hX3R5cGUoU1RSSU5HTElCX0NIQVIgcHJlc2VudGF0aW9uX3R5cGUpCit7CisjaWYgU1RSSU5HTElCX0lTX1VOSUNPREUKKyAgICAvKiBTZWUgY29tbWVudCBpbiB1bmtub3duX3ByZXNlbnRhdGlvbl90eXBlICovCisgICAgaWYgKHByZXNlbnRhdGlvbl90eXBlID4gMzIgJiYgcHJlc2VudGF0aW9uX3R5cGUgPCAxMjgpCisjZW5kaWYKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgJywnIHdpdGggJyVjJy4iLAorICAgICAgICAgICAgICAgICAgICAgKGNoYXIpcHJlc2VudGF0aW9uX3R5cGUpOworI2lmIFNUUklOR0xJQl9JU19VTklDT0RFCisgICAgZWxzZQorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc3BlY2lmeSAnLCcgd2l0aCAnXFx4JXgnLiIsCisgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXByZXNlbnRhdGlvbl90eXBlKTsKKyNlbmRpZgorfQorCiAvKgogICAgIGdldF9pbnRlZ2VyIGNvbnN1bWVzIDAgb3IgbW9yZSBkZWNpbWFsIGRpZ2l0IGNoYXJhY3RlcnMgZnJvbSBhbgogICAgIGlucHV0IHN0cmluZywgdXBkYXRlcyAqcmVzdWx0IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcG9zaXRpdmUKQEAgLTEwNCw5ICsxMjMsNiBAQAogewogICAgIHN3aXRjaCAoYykgewogICAgIGNhc2UgJyAnOiBjYXNlICcrJzogY2FzZSAnLSc6Ci0jaWYgQUxMT1dfUEFSRU5TX0ZPUl9TSUdOCi0gICAgY2FzZSAnKCc6Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuIDE7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMjAsMTAgKzEzNiwzMSBAQAogICAgIGludCBhbHRlcm5hdGU7CiAgICAgU1RSSU5HTElCX0NIQVIgc2lnbjsKICAgICBQeV9zc2l6ZV90IHdpZHRoOworICAgIGludCB0aG91c2FuZHNfc2VwYXJhdG9yczsKICAgICBQeV9zc2l6ZV90IHByZWNpc2lvbjsKICAgICBTVFJJTkdMSUJfQ0hBUiB0eXBlOwogfSBJbnRlcm5hbEZvcm1hdFNwZWM7CiAKKworI2lmIDAKKy8qIE9jY2Fzc2lvbmFsbHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuIFNob3VsZCBub3JtYWxseSBiZSBjb21tZW50ZWQgb3V0LiAqLworc3RhdGljIHZvaWQKK0RFQlVHX1BSSU5UX0ZPUk1BVF9TUEVDKEludGVybmFsRm9ybWF0U3BlYyAqZm9ybWF0KQoreworICAgIHByaW50ZigiaW50ZXJuYWwgZm9ybWF0IHNwZWM6IGZpbGxfY2hhciAlZFxuIiwgZm9ybWF0LT5maWxsX2NoYXIpOworICAgIHByaW50ZigiaW50ZXJuYWwgZm9ybWF0IHNwZWM6IGFsaWduICVkXG4iLCBmb3JtYXQtPmFsaWduKTsKKyAgICBwcmludGYoImludGVybmFsIGZvcm1hdCBzcGVjOiBhbHRlcm5hdGUgJWRcbiIsIGZvcm1hdC0+YWx0ZXJuYXRlKTsKKyAgICBwcmludGYoImludGVybmFsIGZvcm1hdCBzcGVjOiBzaWduICVkXG4iLCBmb3JtYXQtPnNpZ24pOworICAgIHByaW50ZigiaW50ZXJuYWwgZm9ybWF0IHNwZWM6IHdpZHRoICV6ZFxuIiwgZm9ybWF0LT53aWR0aCk7CisgICAgcHJpbnRmKCJpbnRlcm5hbCBmb3JtYXQgc3BlYzogdGhvdXNhbmRzX3NlcGFyYXRvcnMgJWRcbiIsCisgICAgICAgICAgIGZvcm1hdC0+dGhvdXNhbmRzX3NlcGFyYXRvcnMpOworICAgIHByaW50ZigiaW50ZXJuYWwgZm9ybWF0IHNwZWM6IHByZWNpc2lvbiAlemRcbiIsIGZvcm1hdC0+cHJlY2lzaW9uKTsKKyAgICBwcmludGYoImludGVybmFsIGZvcm1hdCBzcGVjOiB0eXBlICVjXG4iLCBmb3JtYXQtPnR5cGUpOworICAgIHByaW50ZigiXG4iKTsKK30KKyNlbmRpZgorCisKIC8qCiAgIHB0ciBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmb3JtYXRfc3BlYywgZW5kIHBvaW50cyBqdXN0IHBhc3QgaXRzIGVuZC4KICAgZmlsbHMgaW4gZm9ybWF0IHdpdGggdGhlIHBhcnNlZCBpbmZvcm1hdGlvbi4KQEAgLTEzNCw3ICsxNzEsOCBAQAogcGFyc2VfaW50ZXJuYWxfcmVuZGVyX2Zvcm1hdF9zcGVjKFNUUklOR0xJQl9DSEFSICpmb3JtYXRfc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9zcGVjX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdFNwZWMgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRlZmF1bHRfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRlZmF1bHRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRlZmF1bHRfYWxpZ24pCiB7CiAgICAgU1RSSU5HTElCX0NIQVIgKnB0ciA9IGZvcm1hdF9zcGVjOwogICAgIFNUUklOR0xJQl9DSEFSICplbmQgPSBmb3JtYXRfc3BlYyArIGZvcm1hdF9zcGVjX2xlbjsKQEAgLTE0MiwxMyArMTgwLDE1IEBACiAgICAgLyogZW5kLXB0ciBpcyB1c2VkIHRocm91Z2hvdXQgdGhpcyBjb2RlIHRvIHNwZWNpZnkgdGhlIGxlbmd0aCBvZgogICAgICAgIHRoZSBpbnB1dCBzdHJpbmcgKi8KIAotICAgIFB5X3NzaXplX3Qgc3BlY2lmaWVkX3dpZHRoOworICAgIFB5X3NzaXplX3QgY29uc3VtZWQ7CisgICAgaW50IGFsaWduX3NwZWNpZmllZCA9IDA7CiAKICAgICBmb3JtYXQtPmZpbGxfY2hhciA9ICdcMCc7Ci0gICAgZm9ybWF0LT5hbGlnbiA9ICdcMCc7CisgICAgZm9ybWF0LT5hbGlnbiA9IGRlZmF1bHRfYWxpZ247CiAgICAgZm9ybWF0LT5hbHRlcm5hdGUgPSAwOwogICAgIGZvcm1hdC0+c2lnbiA9ICdcMCc7CiAgICAgZm9ybWF0LT53aWR0aCA9IC0xOworICAgIGZvcm1hdC0+dGhvdXNhbmRzX3NlcGFyYXRvcnMgPSAwOwogICAgIGZvcm1hdC0+cHJlY2lzaW9uID0gLTE7CiAgICAgZm9ybWF0LT50eXBlID0gZGVmYXVsdF90eXBlOwogCkBAIC0xNTcsMTAgKzE5NywxMiBAQAogICAgIGlmIChlbmQtcHRyID49IDIgJiYgaXNfYWxpZ25tZW50X3Rva2VuKHB0clsxXSkpIHsKICAgICAgICAgZm9ybWF0LT5hbGlnbiA9IHB0clsxXTsKICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXIgPSBwdHJbMF07CisgICAgICAgIGFsaWduX3NwZWNpZmllZCA9IDE7CiAgICAgICAgIHB0ciArPSAyOwogICAgIH0KICAgICBlbHNlIGlmIChlbmQtcHRyID49IDEgJiYgaXNfYWxpZ25tZW50X3Rva2VuKHB0clswXSkpIHsKICAgICAgICAgZm9ybWF0LT5hbGlnbiA9IHB0clswXTsKKyAgICAgICAgYWxpZ25fc3BlY2lmaWVkID0gMTsKICAgICAgICAgKytwdHI7CiAgICAgfQogCkBAIC0xNjgsMTEgKzIxMCw2IEBACiAgICAgaWYgKGVuZC1wdHIgPj0gMSAmJiBpc19zaWduX2VsZW1lbnQocHRyWzBdKSkgewogICAgICAgICBmb3JtYXQtPnNpZ24gPSBwdHJbMF07CiAgICAgICAgICsrcHRyOwotI2lmIEFMTE9XX1BBUkVOU19GT1JfU0lHTgotICAgICAgICBpZiAoZW5kLXB0ciA+PSAxICYmIHB0clswXSA9PSAnKScpIHsKLSAgICAgICAgICAgICsrcHRyOwotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAKICAgICAvKiBJZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgIywgd2UncmUgaW4gYWx0ZXJuYXRlIG1vZGUuICBUaGlzIG9ubHkKQEAgLTE4NSwzMSArMjIyLDQxIEBACiAgICAgLyogVGhlIHNwZWNpYWwgY2FzZSBmb3IgMC1wYWRkaW5nIChiYWNrd2FyZHMgY29tcGF0KSAqLwogICAgIGlmIChmb3JtYXQtPmZpbGxfY2hhciA9PSAnXDAnICYmIGVuZC1wdHIgPj0gMSAmJiBwdHJbMF0gPT0gJzAnKSB7CiAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyID0gJzAnOwotICAgICAgICBpZiAoZm9ybWF0LT5hbGlnbiA9PSAnXDAnKSB7CisgICAgICAgIGlmICghYWxpZ25fc3BlY2lmaWVkKSB7CiAgICAgICAgICAgICBmb3JtYXQtPmFsaWduID0gJz0nOwogICAgICAgICB9CiAgICAgICAgICsrcHRyOwogICAgIH0KIAotICAgIC8qIFhYWCBhZGQgZXJyb3IgY2hlY2tpbmcgKi8KLSAgICBzcGVjaWZpZWRfd2lkdGggPSBnZXRfaW50ZWdlcigmcHRyLCBlbmQsICZmb3JtYXQtPndpZHRoKTsKKyAgICBjb25zdW1lZCA9IGdldF9pbnRlZ2VyKCZwdHIsIGVuZCwgJmZvcm1hdC0+d2lkdGgpOworICAgIGlmIChjb25zdW1lZCA9PSAtMSkKKyAgICAgICAgLyogT3ZlcmZsb3cgZXJyb3IuIEV4Y2VwdGlvbiBhbHJlYWR5IHNldC4gKi8KKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvKiBpZiBzcGVjaWZpZWRfd2lkdGggaXMgMCwgd2UgZGlkbid0IGNvbnN1bWUgYW55IGNoYXJhY3RlcnMgZm9yCi0gICAgICAgdGhlIHdpZHRoLiBpbiB0aGF0IGNhc2UsIHJlc2V0IHRoZSB3aWR0aCB0byAtMSwgYmVjYXVzZQotICAgICAgIGdldF9pbnRlZ2VyKCkgd2lsbCBoYXZlIHNldCBpdCB0byB6ZXJvICovCi0gICAgaWYgKHNwZWNpZmllZF93aWR0aCA9PSAwKSB7CisgICAgLyogSWYgY29uc3VtZWQgaXMgMCwgd2UgZGlkbid0IGNvbnN1bWUgYW55IGNoYXJhY3RlcnMgZm9yIHRoZQorICAgICAgIHdpZHRoLiBJbiB0aGF0IGNhc2UsIHJlc2V0IHRoZSB3aWR0aCB0byAtMSwgYmVjYXVzZQorICAgICAgIGdldF9pbnRlZ2VyKCkgd2lsbCBoYXZlIHNldCBpdCB0byB6ZXJvLiAtMSBpcyBob3cgd2UgcmVjb3JkCisgICAgICAgdGhhdCB0aGUgd2lkdGggd2Fzbid0IHNwZWNpZmllZC4gKi8KKyAgICBpZiAoY29uc3VtZWQgPT0gMCkKICAgICAgICAgZm9ybWF0LT53aWR0aCA9IC0xOworCisgICAgLyogQ29tbWEgc2lnbmlmaWVzIGFkZCB0aG91c2FuZHMgc2VwYXJhdG9ycyAqLworICAgIGlmIChlbmQtcHRyICYmIHB0clswXSA9PSAnLCcpIHsKKyAgICAgICAgZm9ybWF0LT50aG91c2FuZHNfc2VwYXJhdG9ycyA9IDE7CisgICAgICAgICsrcHRyOwogICAgIH0KIAogICAgIC8qIFBhcnNlIGZpZWxkIHByZWNpc2lvbiAqLwogICAgIGlmIChlbmQtcHRyICYmIHB0clswXSA9PSAnLicpIHsKICAgICAgICAgKytwdHI7CiAKLSAgICAgICAgLyogWFhYIGFkZCBlcnJvciBjaGVja2luZyAqLwotICAgICAgICBzcGVjaWZpZWRfd2lkdGggPSBnZXRfaW50ZWdlcigmcHRyLCBlbmQsICZmb3JtYXQtPnByZWNpc2lvbik7CisgICAgICAgIGNvbnN1bWVkID0gZ2V0X2ludGVnZXIoJnB0ciwgZW5kLCAmZm9ybWF0LT5wcmVjaXNpb24pOworICAgICAgICBpZiAoY29uc3VtZWQgPT0gLTEpCisgICAgICAgICAgICAvKiBPdmVyZmxvdyBlcnJvci4gRXhjZXB0aW9uIGFscmVhZHkgc2V0LiAqLworICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgLyogbm90IGhhdmluZyBhIHByZWNpc2lvbiBhZnRlciBhIGRvdCBpcyBhbiBlcnJvciAqLwotICAgICAgICBpZiAoc3BlY2lmaWVkX3dpZHRoID09IDApIHsKKyAgICAgICAgLyogTm90IGhhdmluZyBhIHByZWNpc2lvbiBhZnRlciBhIGRvdCBpcyBhbiBlcnJvci4gKi8KKyAgICAgICAgaWYgKGNvbnN1bWVkID09IDApIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJGb3JtYXQgc3BlY2lmaWVyIG1pc3NpbmcgcHJlY2lzaW9uIik7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTIxNywxMCArMjY0LDEwIEBACiAKICAgICB9CiAKLSAgICAvKiBGaW5hbGx5LCBwYXJzZSB0aGUgdHlwZSBmaWVsZCAqLworICAgIC8qIEZpbmFsbHksIHBhcnNlIHRoZSB0eXBlIGZpZWxkLiAqLwogCiAgICAgaWYgKGVuZC1wdHIgPiAxKSB7Ci0gICAgICAgIC8qIGludmFsaWQgY29udmVyc2lvbiBzcGVjICovCisgICAgICAgIC8qIE1vcmUgdGhhbiBvbmUgY2hhciByZW1haW4sIGludmFsaWQgY29udmVyc2lvbiBzcGVjLiAqLwogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpY2F0aW9uIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIzMCwxNCArMjc3LDEwMyBAQAogICAgICAgICArK3B0cjsKICAgICB9CiAKKyAgICAvKiBEbyBhcyBtdWNoIHZhbGlkYXRpbmcgYXMgd2UgY2FuLCBqdXN0IGJ5IGxvb2tpbmcgYXQgdGhlIGZvcm1hdAorICAgICAgIHNwZWNpZmllci4gIERvIG5vdCB0YWtlIGludG8gYWNjb3VudCB3aGF0IHR5cGUgb2YgZm9ybWF0dGluZworICAgICAgIHdlJ3JlIGRvaW5nIChpbnQsIGZsb2F0LCBzdHJpbmcpLiAqLworCisgICAgaWYgKGZvcm1hdC0+dGhvdXNhbmRzX3NlcGFyYXRvcnMpIHsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQtPnR5cGUpIHsKKyAgICAgICAgY2FzZSAnZCc6CisgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgY2FzZSAnZyc6CisgICAgICAgIGNhc2UgJ0UnOgorICAgICAgICBjYXNlICdHJzoKKyAgICAgICAgY2FzZSAnJSc6CisgICAgICAgIGNhc2UgJ0YnOgorICAgICAgICBjYXNlICdcMCc6CisgICAgICAgICAgICAvKiBUaGVzZSBhcmUgYWxsb3dlZC4gU2VlIFBFUCAzNzguKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaW52YWxpZF9jb21tYV90eXBlKGZvcm1hdC0+dHlwZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiAxOwogfQogCi0jaWYgZGVmaW5lZCBGT1JNQVRfRkxPQVQgfHwgZGVmaW5lZCBGT1JNQVRfTE9ORworLyogQ2FsY3VsYXRlIHRoZSBwYWRkaW5nIG5lZWRlZC4gKi8KK3N0YXRpYyB2b2lkCitjYWxjX3BhZGRpbmcoUHlfc3NpemVfdCBuY2hhcnMsIFB5X3NzaXplX3Qgd2lkdGgsIFNUUklOR0xJQl9DSEFSIGFsaWduLAorICAgICAgICAgICAgIFB5X3NzaXplX3QgKm5fbHBhZGRpbmcsIFB5X3NzaXplX3QgKm5fcnBhZGRpbmcsCisgICAgICAgICAgICAgUHlfc3NpemVfdCAqbl90b3RhbCkKK3sKKyAgICBpZiAod2lkdGggPj0gMCkgeworICAgICAgICBpZiAobmNoYXJzID4gd2lkdGgpCisgICAgICAgICAgICAqbl90b3RhbCA9IG5jaGFyczsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKm5fdG90YWwgPSB3aWR0aDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIG5vdCBzcGVjaWZpZWQsIHVzZSBhbGwgb2YgdGhlIGNoYXJzIGFuZCBubyBtb3JlICovCisgICAgICAgICpuX3RvdGFsID0gbmNoYXJzOworICAgIH0KKworICAgIC8qIEZpZ3VyZSBvdXQgaG93IG11Y2ggbGVhZGluZyBzcGFjZSB3ZSBuZWVkLCBiYXNlZCBvbiB0aGUKKyAgICAgICBhbGlnbmluZyAqLworICAgIGlmIChhbGlnbiA9PSAnPicpCisgICAgICAgICpuX2xwYWRkaW5nID0gKm5fdG90YWwgLSBuY2hhcnM7CisgICAgZWxzZSBpZiAoYWxpZ24gPT0gJ14nKQorICAgICAgICAqbl9scGFkZGluZyA9ICgqbl90b3RhbCAtIG5jaGFycykgLyAyOworICAgIGVsc2UgaWYgKGFsaWduID09ICc8JyB8fCBhbGlnbiA9PSAnPScpCisgICAgICAgICpuX2xwYWRkaW5nID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgLyogV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gdW5zcGVjaWZpZWQgYWxpZ25tZW50LiAqLworICAgICAgICAqbl9scGFkZGluZyA9IDA7CisgICAgICAgIGFzc2VydCgwKTsKKyAgICB9CisKKyAgICAqbl9ycGFkZGluZyA9ICpuX3RvdGFsIC0gbmNoYXJzIC0gKm5fbHBhZGRpbmc7Cit9CisKKy8qIERvIHRoZSBwYWRkaW5nLCBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgY2FsbGVyLXN1cHBsaWVkCisgICBjb250ZW50IGdvZXMuICovCitzdGF0aWMgU1RSSU5HTElCX0NIQVIgKgorZmlsbF9wYWRkaW5nKFNUUklOR0xJQl9DSEFSICpwLCBQeV9zc2l6ZV90IG5jaGFycywgU1RSSU5HTElCX0NIQVIgZmlsbF9jaGFyLAorICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9scGFkZGluZywgUHlfc3NpemVfdCBuX3JwYWRkaW5nKQoreworICAgIC8qIFBhZCBvbiBsZWZ0LiAqLworICAgIGlmIChuX2xwYWRkaW5nKQorICAgICAgICBTVFJJTkdMSUJfRklMTChwLCBmaWxsX2NoYXIsIG5fbHBhZGRpbmcpOworCisgICAgLyogUGFkIG9uIHJpZ2h0LiAqLworICAgIGlmIChuX3JwYWRkaW5nKQorICAgICAgICBTVFJJTkdMSUJfRklMTChwICsgbmNoYXJzICsgbl9scGFkZGluZywgZmlsbF9jaGFyLCBuX3JwYWRkaW5nKTsKKworICAgIC8qIFBvaW50ZXIgdG8gdGhlIHVzZXIgY29udGVudC4gKi8KKyAgICByZXR1cm4gcCArIG5fbHBhZGRpbmc7Cit9CisKKyNpZiBkZWZpbmVkIEZPUk1BVF9GTE9BVCB8fCBkZWZpbmVkIEZPUk1BVF9MT05HIHx8IGRlZmluZWQgRk9STUFUX0NPTVBMRVgKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKiogY29tbW9uIHJvdXRpbmVzIGZvciBudW1lcmljIGZvcm1hdHRpbmcgKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogTG9jYWxlIHR5cGUgY29kZXMuICovCisjZGVmaW5lIExUX0NVUlJFTlRfTE9DQUxFIDAKKyNkZWZpbmUgTFRfREVGQVVMVF9MT0NBTEUgMQorI2RlZmluZSBMVF9OT19MT0NBTEUgMgorCisvKiBMb2NhbGUgaW5mbyBuZWVkZWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMgYW5kIHRoZSBwYXJ0IG9mIGZsb2F0cworICAgYmVmb3JlIGFuZCBpbmNsdWRpbmcgdGhlIGRlY2ltYWwuIE5vdGUgdGhhdCBsb2NhbGVzIG9ubHkgc3VwcG9ydAorICAgOC1iaXQgY2hhcnMsIG5vdCB1bmljb2RlLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CisgICAgY2hhciAqdGhvdXNhbmRzX3NlcDsKKyAgICBjaGFyICpncm91cGluZzsKK30gTG9jYWxlSW5mbzsKKwogLyogZGVzY3JpYmVzIHRoZSBsYXlvdXQgZm9yIGFuIGludGVnZXIsIHNlZSB0aGUgY29tbWVudCBpbgogICAgY2FsY19udW1iZXJfd2lkdGhzKCkgZm9yIGRldGFpbHMgKi8KIHR5cGVkZWYgc3RydWN0IHsKQEAgLTI0NSwzOCArMzgxLDg1IEBACiAgICAgUHlfc3NpemVfdCBuX3ByZWZpeDsKICAgICBQeV9zc2l6ZV90IG5fc3BhZGRpbmc7CiAgICAgUHlfc3NpemVfdCBuX3JwYWRkaW5nOwotICAgIGNoYXIgbHNpZ247Ci0gICAgUHlfc3NpemVfdCBuX2xzaWduOwotICAgIGNoYXIgcnNpZ247Ci0gICAgUHlfc3NpemVfdCBuX3JzaWduOwotICAgIFB5X3NzaXplX3Qgbl90b3RhbDsgLyoganVzdCBhIGNvbnZlbmllbmNlLCBpdCdzIGRlcml2YWJsZSBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgZmllbGRzICovCisgICAgY2hhciBzaWduOworICAgIFB5X3NzaXplX3Qgbl9zaWduOyAgICAgIC8qIG51bWJlciBvZiBkaWdpdHMgbmVlZGVkIGZvciBzaWduICgwLzEpICovCisgICAgUHlfc3NpemVfdCBuX2dyb3VwZWRfZGlnaXRzOyAvKiBTcGFjZSB0YWtlbiB1cCBieSB0aGUgZGlnaXRzLCBpbmNsdWRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBncm91cGluZyBjaGFycy4gKi8KKyAgICBQeV9zc2l6ZV90IG5fZGVjaW1hbDsgICAvKiAwIGlmIG9ubHkgYW4gaW50ZWdlciAqLworICAgIFB5X3NzaXplX3Qgbl9yZW1haW5kZXI7IC8qIERpZ2l0cyBpbiBkZWNpbWFsIGFuZC9vciBleHBvbmVudCBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGluZyB0aGUgZGVjaW1hbCBpdHNlbGYsIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudC4gKi8KKworICAgIC8qIFRoZXNlIDIgYXJlIG5vdCB0aGUgd2lkdGhzIG9mIGZpZWxkcywgYnV0IGFyZSBuZWVkZWQgYnkKKyAgICAgICBTVFJJTkdMSUJfR1JPVVBJTkcuICovCisgICAgUHlfc3NpemVfdCBuX2RpZ2l0czsgICAgLyogVGhlIG51bWJlciBvZiBkaWdpdHMgYmVmb3JlIGEgZGVjaW1hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGV4cG9uZW50LiAqLworICAgIFB5X3NzaXplX3Qgbl9taW5fd2lkdGg7IC8qIFRoZSBtaW5fd2lkdGggd2UgdXNlZCB3aGVuIHdlIGNvbXB1dGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5fZ3JvdXBlZF9kaWdpdHMgd2lkdGguICovCiB9IE51bWJlckZpZWxkV2lkdGhzOwogCisKKy8qIEdpdmVuIGEgbnVtYmVyIG9mIHRoZSBmb3JtOgorICAgZGlnaXRzW3JlbWFpbmRlcl0KKyAgIHdoZXJlIHB0ciBwb2ludHMgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIHRvIHRoZSBlbmQsIGZpbmQgd2hlcmUKKyAgICB0aGUgaW50ZWdlciBwYXJ0IGVuZHMuIFRoaXMgY291bGQgYmUgYSBkZWNpbWFsLCBhbiBleHBvbmVudCwgYm90aCwKKyAgICBvciBuZWl0aGVyLgorICAgSWYgYSBkZWNpbWFsIHBvaW50IGlzIHByZXNlbnQsIHNldCAqaGFzX2RlY2ltYWwgYW5kIGluY3JlbWVudAorICAgIHJlbWFpbmRlciBiZXlvbmQgaXQuCisgICBSZXN1bHRzIGFyZSB1bmRlZmluZWQgKGJ1dCBzaG91bGRuJ3QgY3Jhc2gpIGZvciBpbXByb3Blcmx5CisgICAgZm9ybWF0dGVkIHN0cmluZ3MuCisqLworc3RhdGljIHZvaWQKK3BhcnNlX251bWJlcihTVFJJTkdMSUJfQ0hBUiAqcHRyLCBQeV9zc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICBQeV9zc2l6ZV90ICpuX3JlbWFpbmRlciwgaW50ICpoYXNfZGVjaW1hbCkKK3sKKyAgICBTVFJJTkdMSUJfQ0hBUiAqZW5kID0gcHRyICsgbGVuOworICAgIFNUUklOR0xJQl9DSEFSICpyZW1haW5kZXI7CisKKyAgICB3aGlsZSAocHRyPGVuZCAmJiBpc2RpZ2l0KCpwdHIpKQorICAgICAgICArK3B0cjsKKyAgICByZW1haW5kZXIgPSBwdHI7CisKKyAgICAvKiBEb2VzIHJlbWFpbmRlciBzdGFydCB3aXRoIGEgZGVjaW1hbCBwb2ludD8gKi8KKyAgICAqaGFzX2RlY2ltYWwgPSBwdHI8ZW5kICYmICpyZW1haW5kZXIgPT0gJy4nOworCisgICAgLyogU2tpcCB0aGUgZGVjaW1hbCBwb2ludC4gKi8KKyAgICBpZiAoKmhhc19kZWNpbWFsKQorICAgICAgICByZW1haW5kZXIrKzsKKworICAgICpuX3JlbWFpbmRlciA9IGVuZCAtIHJlbWFpbmRlcjsKK30KKwogLyogbm90IGFsbCBmaWVsZHMgb2YgZm9ybWF0IGFyZSB1c2VkLiAgZm9yIGV4YW1wbGUsIHByZWNpc2lvbiBpcwogICAgdW51c2VkLiAgc2hvdWxkIHRoaXMgdGFrZSBkaXNjcmV0ZSBwYXJhbXMgaW4gb3JkZXIgdG8gYmUgbW9yZSBjbGVhcgogICAgYWJvdXQgd2hhdCBpdCBkb2VzPyAgb3IgaXMgcGFzc2luZyBhIHNpbmdsZSBmb3JtYXQgcGFyYW1ldGVyIGVhc2llcgogICAgYW5kIG1vcmUgZWZmaWNpZW50IGVub3VnaCB0byBqdXN0aWZ5IGEgbGl0dGxlIG9iZnVzY2F0aW9uPyAqLwotc3RhdGljIHZvaWQKLWNhbGNfbnVtYmVyX3dpZHRocyhOdW1iZXJGaWVsZFdpZHRocyAqc3BlYywgU1RSSU5HTElCX0NIQVIgYWN0dWFsX3NpZ24sCi0gICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuX3ByZWZpeCwgUHlfc3NpemVfdCBuX2RpZ2l0cywKK3N0YXRpYyBQeV9zc2l6ZV90CitjYWxjX251bWJlcl93aWR0aHMoTnVtYmVyRmllbGRXaWR0aHMgKnNwZWMsIFB5X3NzaXplX3Qgbl9wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgc2lnbl9jaGFyLCBTVFJJTkdMSUJfQ0hBUiAqbnVtYmVyLAorICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9udW1iZXIsIFB5X3NzaXplX3Qgbl9yZW1haW5kZXIsCisgICAgICAgICAgICAgICAgICAgaW50IGhhc19kZWNpbWFsLCBjb25zdCBMb2NhbGVJbmZvICpsb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50ZXJuYWxGb3JtYXRTcGVjICpmb3JtYXQpCiB7CisgICAgUHlfc3NpemVfdCBuX25vbl9kaWdpdF9ub25fcGFkZGluZzsKKyAgICBQeV9zc2l6ZV90IG5fcGFkZGluZzsKKworICAgIHNwZWMtPm5fZGlnaXRzID0gbl9udW1iZXIgLSBuX3JlbWFpbmRlciAtIChoYXNfZGVjaW1hbD8xOjApOwogICAgIHNwZWMtPm5fbHBhZGRpbmcgPSAwOwotICAgIHNwZWMtPm5fcHJlZml4ID0gMDsKKyAgICBzcGVjLT5uX3ByZWZpeCA9IG5fcHJlZml4OworICAgIHNwZWMtPm5fZGVjaW1hbCA9IGhhc19kZWNpbWFsID8gc3RybGVuKGxvY2FsZS0+ZGVjaW1hbF9wb2ludCkgOiAwOworICAgIHNwZWMtPm5fcmVtYWluZGVyID0gbl9yZW1haW5kZXI7CiAgICAgc3BlYy0+bl9zcGFkZGluZyA9IDA7CiAgICAgc3BlYy0+bl9ycGFkZGluZyA9IDA7Ci0gICAgc3BlYy0+bHNpZ24gPSAnXDAnOwotICAgIHNwZWMtPm5fbHNpZ24gPSAwOwotICAgIHNwZWMtPnJzaWduID0gJ1wwJzsKLSAgICBzcGVjLT5uX3JzaWduID0gMDsKKyAgICBzcGVjLT5zaWduID0gJ1wwJzsKKyAgICBzcGVjLT5uX3NpZ24gPSAwOwogCiAgICAgLyogdGhlIG91dHB1dCB3aWxsIGxvb2sgbGlrZToKLSAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgfCA8bHBhZGRpbmc+IDxsc2lnbj4gPHByZWZpeD4gPHNwYWRkaW5nPiA8ZGlnaXRzPiA8cnNpZ24+IDxycGFkZGluZz4gfAotICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgfCA8bHBhZGRpbmc+IDxzaWduPiA8cHJlZml4PiA8c3BhZGRpbmc+IDxncm91cGVkX2RpZ2l0cz4gPGRlY2ltYWw+IDxyZW1haW5kZXI+IDxycGFkZGluZz4gfAorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIAotICAgICAgIGxzaWduIGFuZCByc2lnbiBhcmUgY29tcHV0ZWQgZnJvbSBmb3JtYXQtPnNpZ24gYW5kIHRoZSBhY3R1YWwKKyAgICAgICBzaWduIGlzIGNvbXB1dGVkIGZyb20gZm9ybWF0LT5zaWduIGFuZCB0aGUgYWN0dWFsCiAgICAgICAgc2lnbiBvZiB0aGUgbnVtYmVyCiAKICAgICAgICBwcmVmaXggaXMgZ2l2ZW4gKGl0J3MgZm9yIHRoZSAnMHgnIHByZWZpeCkKQEAgLTI5MSwxMDkgKzQ3NCwxOTYgQEAKICAgICAqLwogCiAgICAgLyogY29tcHV0ZSB0aGUgdmFyaW91cyBwYXJ0cyB3ZSdyZSBnb2luZyB0byB3cml0ZSAqLwotICAgIGlmIChmb3JtYXQtPnNpZ24gPT0gJysnKSB7CisgICAgc3dpdGNoIChmb3JtYXQtPnNpZ24pIHsKKyAgICBjYXNlICcrJzoKICAgICAgICAgLyogYWx3YXlzIHB1dCBhICsgb3IgLSAqLwotICAgICAgICBzcGVjLT5uX2xzaWduID0gMTsKLSAgICAgICAgc3BlYy0+bHNpZ24gPSAoYWN0dWFsX3NpZ24gPT0gJy0nID8gJy0nIDogJysnKTsKLSAgICB9Ci0jaWYgQUxMT1dfUEFSRU5TX0ZPUl9TSUdOCi0gICAgZWxzZSBpZiAoZm9ybWF0LT5zaWduID09ICcoJykgewotICAgICAgICBpZiAoYWN0dWFsX3NpZ24gPT0gJy0nKSB7Ci0gICAgICAgICAgICBzcGVjLT5uX2xzaWduID0gMTsKLSAgICAgICAgICAgIHNwZWMtPmxzaWduID0gJygnOwotICAgICAgICAgICAgc3BlYy0+bl9yc2lnbiA9IDE7Ci0gICAgICAgICAgICBzcGVjLT5yc2lnbiA9ICcpJzsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIGVsc2UgaWYgKGZvcm1hdC0+c2lnbiA9PSAnICcpIHsKLSAgICAgICAgc3BlYy0+bl9sc2lnbiA9IDE7Ci0gICAgICAgIHNwZWMtPmxzaWduID0gKGFjdHVhbF9zaWduID09ICctJyA/ICctJyA6ICcgJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBub24gc3BlY2lmaWVkLCBvciB0aGUgZGVmYXVsdCAoLSkgKi8KLSAgICAgICAgaWYgKGFjdHVhbF9zaWduID09ICctJykgewotICAgICAgICAgICAgc3BlYy0+bl9sc2lnbiA9IDE7Ci0gICAgICAgICAgICBzcGVjLT5sc2lnbiA9ICctJzsKKyAgICAgICAgc3BlYy0+bl9zaWduID0gMTsKKyAgICAgICAgc3BlYy0+c2lnbiA9IChzaWduX2NoYXIgPT0gJy0nID8gJy0nIDogJysnKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnICc6CisgICAgICAgIHNwZWMtPm5fc2lnbiA9IDE7CisgICAgICAgIHNwZWMtPnNpZ24gPSAoc2lnbl9jaGFyID09ICctJyA/ICctJyA6ICcgJyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIE5vdCBzcGVjaWZpZWQsIG9yIHRoZSBkZWZhdWx0ICgtKSAqLworICAgICAgICBpZiAoc2lnbl9jaGFyID09ICctJykgeworICAgICAgICAgICAgc3BlYy0+bl9zaWduID0gMTsKKyAgICAgICAgICAgIHNwZWMtPnNpZ24gPSAnLSc7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzcGVjLT5uX3ByZWZpeCA9IG5fcHJlZml4OworICAgIC8qIFRoZSBudW1iZXIgb2YgY2hhcnMgdXNlZCBmb3Igbm9uLWRpZ2l0cyBhbmQgbm9uLXBhZGRpbmcuICovCisgICAgbl9ub25fZGlnaXRfbm9uX3BhZGRpbmcgPSBzcGVjLT5uX3NpZ24gKyBzcGVjLT5uX3ByZWZpeCArIHNwZWMtPm5fZGVjaW1hbCArCisgICAgICAgIHNwZWMtPm5fcmVtYWluZGVyOwogCi0gICAgLyogbm93IHRoZSBudW1iZXIgb2YgcGFkZGluZyBjaGFyYWN0ZXJzICovCi0gICAgaWYgKGZvcm1hdC0+d2lkdGggPT0gLTEpIHsKLSAgICAgICAgLyogbm8gcGFkZGluZyBhdCBhbGwsIG5vdGhpbmcgdG8gZG8gKi8KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIHNlZSBpZiBhbnkgcGFkZGluZyBpcyBuZWVkZWQgKi8KLSAgICAgICAgaWYgKHNwZWMtPm5fbHNpZ24gKyBuX2RpZ2l0cyArIHNwZWMtPm5fcnNpZ24gKwotICAgICAgICAgICAgICAgIHNwZWMtPm5fcHJlZml4ID49IGZvcm1hdC0+d2lkdGgpIHsKLSAgICAgICAgICAgIC8qIG5vIHBhZGRpbmcgbmVlZGVkLCB3ZSdyZSBhbHJlYWR5IGJpZ2dlciB0aGFuIHRoZQotICAgICAgICAgICAgICAgcmVxdWVzdGVkIHdpZHRoICovCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBkZXRlcm1pbmUgd2hpY2ggb2YgbGVmdCwgc3BhY2UsIG9yIHJpZ2h0IHBhZGRpbmcgaXMKLSAgICAgICAgICAgICAgIG5lZWRlZCAqLwotICAgICAgICAgICAgUHlfc3NpemVfdCBwYWRkaW5nID0gZm9ybWF0LT53aWR0aCAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BlYy0+bl9sc2lnbiArIHNwZWMtPm5fcHJlZml4ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2RpZ2l0cyArIHNwZWMtPm5fcnNpZ24pOwotICAgICAgICAgICAgaWYgKGZvcm1hdC0+YWxpZ24gPT0gJzwnKQotICAgICAgICAgICAgICAgIHNwZWMtPm5fcnBhZGRpbmcgPSBwYWRkaW5nOwotICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0LT5hbGlnbiA9PSAnPicpCi0gICAgICAgICAgICAgICAgc3BlYy0+bl9scGFkZGluZyA9IHBhZGRpbmc7Ci0gICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQtPmFsaWduID09ICdeJykgewotICAgICAgICAgICAgICAgIHNwZWMtPm5fbHBhZGRpbmcgPSBwYWRkaW5nIC8gMjsKLSAgICAgICAgICAgICAgICBzcGVjLT5uX3JwYWRkaW5nID0gcGFkZGluZyAtIHNwZWMtPm5fbHBhZGRpbmc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQtPmFsaWduID09ICc9JykKLSAgICAgICAgICAgICAgICBzcGVjLT5uX3NwYWRkaW5nID0gcGFkZGluZzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcGVjLT5uX2xwYWRkaW5nID0gcGFkZGluZzsKKyAgICAvKiBtaW5fd2lkdGggY2FuIGdvIG5lZ2F0aXZlLCB0aGF0J3Mgb2theS4gZm9ybWF0LT53aWR0aCA9PSAtMSBtZWFucworICAgICAgIHdlIGRvbid0IGNhcmUuICovCisgICAgaWYgKGZvcm1hdC0+ZmlsbF9jaGFyID09ICcwJyAmJiBmb3JtYXQtPmFsaWduID09ICc9JykKKyAgICAgICAgc3BlYy0+bl9taW5fd2lkdGggPSBmb3JtYXQtPndpZHRoIC0gbl9ub25fZGlnaXRfbm9uX3BhZGRpbmc7CisgICAgZWxzZQorICAgICAgICBzcGVjLT5uX21pbl93aWR0aCA9IDA7CisKKyAgICBpZiAoc3BlYy0+bl9kaWdpdHMgPT0gMCkKKyAgICAgICAgLyogVGhpcyBjYXNlIG9ubHkgb2NjdXJzIHdoZW4gdXNpbmcgJ2MnIGZvcm1hdHRpbmcsIHdlIG5lZWQKKyAgICAgICAgICAgdG8gc3BlY2lhbCBjYXNlIGl0IGJlY2F1c2UgdGhlIGdyb3VwaW5nIGNvZGUgYWx3YXlzIHdhbnRzCisgICAgICAgICAgIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgc3BlYy0+bl9ncm91cGVkX2RpZ2l0cyA9IDA7CisgICAgZWxzZQorICAgICAgICBzcGVjLT5uX2dyb3VwZWRfZGlnaXRzID0gU1RSSU5HTElCX0dST1VQSU5HKE5VTEwsIDAsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlYy0+bl9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlYy0+bl9taW5fd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlLT5ncm91cGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUtPnRob3VzYW5kc19zZXApOworCisgICAgLyogR2l2ZW4gdGhlIGRlc2lyZWQgd2lkdGggYW5kIHRoZSB0b3RhbCBvZiBkaWdpdCBhbmQgbm9uLWRpZ2l0CisgICAgICAgc3BhY2Ugd2UgY29uc3VtZSwgc2VlIGlmIHdlIG5lZWQgYW55IHBhZGRpbmcuIGZvcm1hdC0+d2lkdGggY2FuCisgICAgICAgYmUgbmVnYXRpdmUgKG1lYW5pbmcgbm8gcGFkZGluZyksIGJ1dCB0aGlzIGNvZGUgc3RpbGwgd29ya3MgaW4KKyAgICAgICB0aGF0IGNhc2UuICovCisgICAgbl9wYWRkaW5nID0gZm9ybWF0LT53aWR0aCAtCisgICAgICAgICAgICAgICAgICAgICAgICAobl9ub25fZGlnaXRfbm9uX3BhZGRpbmcgKyBzcGVjLT5uX2dyb3VwZWRfZGlnaXRzKTsKKyAgICBpZiAobl9wYWRkaW5nID4gMCkgeworICAgICAgICAvKiBTb21lIHBhZGRpbmcgaXMgbmVlZGVkLiBEZXRlcm1pbmUgaWYgaXQncyBsZWZ0LCBzcGFjZSwgb3IgcmlnaHQuICovCisgICAgICAgIHN3aXRjaCAoZm9ybWF0LT5hbGlnbikgeworICAgICAgICBjYXNlICc8JzoKKyAgICAgICAgICAgIHNwZWMtPm5fcnBhZGRpbmcgPSBuX3BhZGRpbmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXic6CisgICAgICAgICAgICBzcGVjLT5uX2xwYWRkaW5nID0gbl9wYWRkaW5nIC8gMjsKKyAgICAgICAgICAgIHNwZWMtPm5fcnBhZGRpbmcgPSBuX3BhZGRpbmcgLSBzcGVjLT5uX2xwYWRkaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgc3BlYy0+bl9zcGFkZGluZyA9IG5fcGFkZGluZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc+JzoKKyAgICAgICAgICAgIHNwZWMtPm5fbHBhZGRpbmcgPSBuX3BhZGRpbmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIFNob3VsZG4ndCBnZXQgaGVyZSwgYnV0IHRyZWF0IGl0IGFzICc+JyAqLworICAgICAgICAgICAgc3BlYy0+bl9scGFkZGluZyA9IG5fcGFkZGluZzsKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIHNwZWMtPm5fdG90YWwgPSBzcGVjLT5uX2xwYWRkaW5nICsgc3BlYy0+bl9sc2lnbiArIHNwZWMtPm5fcHJlZml4ICsKLSAgICAgICAgICAgIHNwZWMtPm5fc3BhZGRpbmcgKyBuX2RpZ2l0cyArIHNwZWMtPm5fcnNpZ24gKyBzcGVjLT5uX3JwYWRkaW5nOworICAgIHJldHVybiBzcGVjLT5uX2xwYWRkaW5nICsgc3BlYy0+bl9zaWduICsgc3BlYy0+bl9wcmVmaXggKworICAgICAgICBzcGVjLT5uX3NwYWRkaW5nICsgc3BlYy0+bl9ncm91cGVkX2RpZ2l0cyArIHNwZWMtPm5fZGVjaW1hbCArCisgICAgICAgIHNwZWMtPm5fcmVtYWluZGVyICsgc3BlYy0+bl9ycGFkZGluZzsKIH0KIAotLyogZmlsbCBpbiB0aGUgbm9uLWRpZ2l0IHBhcnRzIG9mIGEgbnVtYmVycydzIHN0cmluZyByZXByZXNlbnRhdGlvbiwKLSAgIGFzIGRldGVybWluZWQgaW4gY2FsY19udW1iZXJfd2lkdGhzKCkuICByZXR1cm5zIHRoZSBwb2ludGVyIHRvCi0gICB3aGVyZSB0aGUgZGlnaXRzIGdvLiAqLwotc3RhdGljIFNUUklOR0xJQl9DSEFSICoKLWZpbGxfbm9uX2RpZ2l0cyhTVFJJTkdMSUJfQ0hBUiAqcF9idWYsIGNvbnN0IE51bWJlckZpZWxkV2lkdGhzICpzcGVjLAotICAgICAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSICpwcmVmaXgsIFB5X3NzaXplX3Qgbl9kaWdpdHMsCi0gICAgICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgZmlsbF9jaGFyKQorLyogRmlsbCBpbiB0aGUgZGlnaXQgcGFydHMgb2YgYSBudW1iZXJzJ3Mgc3RyaW5nIHJlcHJlc2VudGF0aW9uLAorICAgYXMgZGV0ZXJtaW5lZCBpbiBjYWxjX251bWJlcl93aWR0aHMoKS4KKyAgIE5vIGVycm9yIGNoZWNraW5nLCBzaW5jZSB3ZSBrbm93IHRoZSBidWZmZXIgaXMgdGhlIGNvcnJlY3Qgc2l6ZS4gKi8KK3N0YXRpYyB2b2lkCitmaWxsX251bWJlcihTVFJJTkdMSUJfQ0hBUiAqYnVmLCBjb25zdCBOdW1iZXJGaWVsZFdpZHRocyAqc3BlYywKKyAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSICpkaWdpdHMsIFB5X3NzaXplX3Qgbl9kaWdpdHMsCisgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqcHJlZml4LCBTVFJJTkdMSUJfQ0hBUiBmaWxsX2NoYXIsCisgICAgICAgICAgICBMb2NhbGVJbmZvICpsb2NhbGUsIGludCB0b3VwcGVyKQogewotICAgIFNUUklOR0xJQl9DSEFSICpwX2RpZ2l0czsKKyAgICAvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZGlnaXRzLCBkZWNpbWFsLCBhbmQgcmVtYWluZGVyLiAqLworICAgIFNUUklOR0xJQl9DSEFSICpwID0gZGlnaXRzOworCisjaWZuZGVmIE5ERUJVRworICAgIFB5X3NzaXplX3QgcjsKKyNlbmRpZgogCiAgICAgaWYgKHNwZWMtPm5fbHBhZGRpbmcpIHsKLSAgICAgICAgU1RSSU5HTElCX0ZJTEwocF9idWYsIGZpbGxfY2hhciwgc3BlYy0+bl9scGFkZGluZyk7Ci0gICAgICAgIHBfYnVmICs9IHNwZWMtPm5fbHBhZGRpbmc7CisgICAgICAgIFNUUklOR0xJQl9GSUxMKGJ1ZiwgZmlsbF9jaGFyLCBzcGVjLT5uX2xwYWRkaW5nKTsKKyAgICAgICAgYnVmICs9IHNwZWMtPm5fbHBhZGRpbmc7CiAgICAgfQotICAgIGlmIChzcGVjLT5uX2xzaWduID09IDEpIHsKLSAgICAgICAgKnBfYnVmKysgPSBzcGVjLT5sc2lnbjsKKyAgICBpZiAoc3BlYy0+bl9zaWduID09IDEpIHsKKyAgICAgICAgKmJ1ZisrID0gc3BlYy0+c2lnbjsKICAgICB9CiAgICAgaWYgKHNwZWMtPm5fcHJlZml4KSB7Ci0gICAgICAgIG1lbW1vdmUocF9idWYsCisgICAgICAgIG1lbW1vdmUoYnVmLAogICAgICAgICAgICAgICAgIHByZWZpeCwKICAgICAgICAgICAgICAgICBzcGVjLT5uX3ByZWZpeCAqIHNpemVvZihTVFJJTkdMSUJfQ0hBUikpOwotICAgICAgICBwX2J1ZiArPSBzcGVjLT5uX3ByZWZpeDsKKyAgICAgICAgaWYgKHRvdXBwZXIpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgdDsKKyAgICAgICAgICAgIGZvciAodCA9IDA7IHQgPCBzcGVjLT5uX3ByZWZpeDsgKyt0KQorICAgICAgICAgICAgICAgIGJ1Zlt0XSA9IFNUUklOR0xJQl9UT1VQUEVSKGJ1Zlt0XSk7CisgICAgICAgIH0KKyAgICAgICAgYnVmICs9IHNwZWMtPm5fcHJlZml4OwogICAgIH0KICAgICBpZiAoc3BlYy0+bl9zcGFkZGluZykgewotICAgICAgICBTVFJJTkdMSUJfRklMTChwX2J1ZiwgZmlsbF9jaGFyLCBzcGVjLT5uX3NwYWRkaW5nKTsKLSAgICAgICAgcF9idWYgKz0gc3BlYy0+bl9zcGFkZGluZzsKKyAgICAgICAgU1RSSU5HTElCX0ZJTEwoYnVmLCBmaWxsX2NoYXIsIHNwZWMtPm5fc3BhZGRpbmcpOworICAgICAgICBidWYgKz0gc3BlYy0+bl9zcGFkZGluZzsKICAgICB9Ci0gICAgcF9kaWdpdHMgPSBwX2J1ZjsKLSAgICBwX2J1ZiArPSBuX2RpZ2l0czsKLSAgICBpZiAoc3BlYy0+bl9yc2lnbiA9PSAxKSB7Ci0gICAgICAgICpwX2J1ZisrID0gc3BlYy0+cnNpZ247CisKKyAgICAvKiBPbmx5IGZvciB0eXBlICdjJyBzcGVjaWFsIGNhc2UsIGl0IGhhcyBubyBkaWdpdHMuICovCisgICAgaWYgKHNwZWMtPm5fZGlnaXRzICE9IDApIHsKKyAgICAgICAgLyogRmlsbCB0aGUgZGlnaXRzIHdpdGggSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcuICovCisjaWZuZGVmIE5ERUJVRworICAgICAgICByID0KKyNlbmRpZgorICAgICAgICAgICAgU1RSSU5HTElCX0dST1VQSU5HKGJ1Ziwgc3BlYy0+bl9ncm91cGVkX2RpZ2l0cywgZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWMtPm5fZGlnaXRzLCBzcGVjLT5uX21pbl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUtPmdyb3VwaW5nLCBsb2NhbGUtPnRob3VzYW5kc19zZXApOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYXNzZXJ0KHIgPT0gc3BlYy0+bl9ncm91cGVkX2RpZ2l0cyk7CisjZW5kaWYKKyAgICAgICAgcCArPSBzcGVjLT5uX2RpZ2l0czsKICAgICB9CisgICAgaWYgKHRvdXBwZXIpIHsKKyAgICAgICAgUHlfc3NpemVfdCB0OworICAgICAgICBmb3IgKHQgPSAwOyB0IDwgc3BlYy0+bl9ncm91cGVkX2RpZ2l0czsgKyt0KQorICAgICAgICAgICAgYnVmW3RdID0gU1RSSU5HTElCX1RPVVBQRVIoYnVmW3RdKTsKKyAgICB9CisgICAgYnVmICs9IHNwZWMtPm5fZ3JvdXBlZF9kaWdpdHM7CisKKyAgICBpZiAoc3BlYy0+bl9kZWNpbWFsKSB7CisgICAgICAgIFB5X3NzaXplX3QgdDsKKyAgICAgICAgZm9yICh0ID0gMDsgdCA8IHNwZWMtPm5fZGVjaW1hbDsgKyt0KQorICAgICAgICAgICAgYnVmW3RdID0gbG9jYWxlLT5kZWNpbWFsX3BvaW50W3RdOworICAgICAgICBidWYgKz0gc3BlYy0+bl9kZWNpbWFsOworICAgICAgICBwICs9IDE7CisgICAgfQorCisgICAgaWYgKHNwZWMtPm5fcmVtYWluZGVyKSB7CisgICAgICAgIG1lbWNweShidWYsIHAsIHNwZWMtPm5fcmVtYWluZGVyICogc2l6ZW9mKFNUUklOR0xJQl9DSEFSKSk7CisgICAgICAgIGJ1ZiArPSBzcGVjLT5uX3JlbWFpbmRlcjsKKyAgICAgICAgcCArPSBzcGVjLT5uX3JlbWFpbmRlcjsKKyAgICB9CisKICAgICBpZiAoc3BlYy0+bl9ycGFkZGluZykgewotICAgICAgICBTVFJJTkdMSUJfRklMTChwX2J1ZiwgZmlsbF9jaGFyLCBzcGVjLT5uX3JwYWRkaW5nKTsKLSAgICAgICAgcF9idWYgKz0gc3BlYy0+bl9ycGFkZGluZzsKKyAgICAgICAgU1RSSU5HTElCX0ZJTEwoYnVmLCBmaWxsX2NoYXIsIHNwZWMtPm5fcnBhZGRpbmcpOworICAgICAgICBidWYgKz0gc3BlYy0+bl9ycGFkZGluZzsKICAgICB9Ci0gICAgcmV0dXJuIHBfZGlnaXRzOwogfQotI2VuZGlmIC8qIEZPUk1BVF9GTE9BVCB8fCBGT1JNQVRfTE9ORyAqLworCitzdGF0aWMgY2hhciBub19ncm91cGluZ1sxXSA9IHtDSEFSX01BWH07CisKKy8qIEZpbmQgdGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyKHM/KSwgdGhvdXNhbmRzX3NlcGFyYXRvcihzPyksIGFuZAorICAgZ3JvdXBpbmcgZGVzY3JpcHRpb24sIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlIGlmIHR5cGUgaXMKKyAgIExUX0NVUlJFTlRfTE9DQUxFLCBhIGhhcmQtY29kZWQgbG9jYWxlIGlmIExUX0RFRkFVTFRfTE9DQUxFLCBvcgorICAgbm9uZSBpZiBMVF9OT19MT0NBTEUuICovCitzdGF0aWMgdm9pZAorZ2V0X2xvY2FsZV9pbmZvKGludCB0eXBlLCBMb2NhbGVJbmZvICpsb2NhbGVfaW5mbykKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIExUX0NVUlJFTlRfTE9DQUxFOiB7CisgICAgICAgIHN0cnVjdCBsY29udiAqbG9jYWxlX2RhdGEgPSBsb2NhbGVjb252KCk7CisgICAgICAgIGxvY2FsZV9pbmZvLT5kZWNpbWFsX3BvaW50ID0gbG9jYWxlX2RhdGEtPmRlY2ltYWxfcG9pbnQ7CisgICAgICAgIGxvY2FsZV9pbmZvLT50aG91c2FuZHNfc2VwID0gbG9jYWxlX2RhdGEtPnRob3VzYW5kc19zZXA7CisgICAgICAgIGxvY2FsZV9pbmZvLT5ncm91cGluZyA9IGxvY2FsZV9kYXRhLT5ncm91cGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTFRfREVGQVVMVF9MT0NBTEU6CisgICAgICAgIGxvY2FsZV9pbmZvLT5kZWNpbWFsX3BvaW50ID0gIi4iOworICAgICAgICBsb2NhbGVfaW5mby0+dGhvdXNhbmRzX3NlcCA9ICIsIjsKKyAgICAgICAgbG9jYWxlX2luZm8tPmdyb3VwaW5nID0gIlwzIjsgLyogR3JvdXAgZXZlcnkgMyBjaGFyYWN0ZXJzLiAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbXBsaWNpdCkgdHJhaWxpbmcgMCBtZWFucyByZXBlYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5maW5pdGVseS4gKi8KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMVF9OT19MT0NBTEU6CisgICAgICAgIGxvY2FsZV9pbmZvLT5kZWNpbWFsX3BvaW50ID0gIi4iOworICAgICAgICBsb2NhbGVfaW5mby0+dGhvdXNhbmRzX3NlcCA9ICIiOworICAgICAgICBsb2NhbGVfaW5mby0+Z3JvdXBpbmcgPSBub19ncm91cGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOworICAgIH0KK30KKworI2VuZGlmIC8qIEZPUk1BVF9GTE9BVCB8fCBGT1JNQVRfTE9ORyB8fCBGT1JNQVRfQ09NUExFWCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqIHN0cmluZyBmb3JtYXR0aW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQwMiwxMCArNjcyLDEwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZm9ybWF0X3N0cmluZ19pbnRlcm5hbChQeU9iamVjdCAqdmFsdWUsIGNvbnN0IEludGVybmFsRm9ybWF0U3BlYyAqZm9ybWF0KQogewotICAgIFB5X3NzaXplX3Qgd2lkdGg7IC8qIHRvdGFsIGZpZWxkIHdpZHRoICovCiAgICAgUHlfc3NpemVfdCBscGFkOwotICAgIFNUUklOR0xJQl9DSEFSICpkc3Q7Ci0gICAgU1RSSU5HTElCX0NIQVIgKnNyYyA9IFNUUklOR0xJQl9TVFIodmFsdWUpOworICAgIFB5X3NzaXplX3QgcnBhZDsKKyAgICBQeV9zc2l6ZV90IHRvdGFsOworICAgIFNUUklOR0xJQl9DSEFSICpwOwogICAgIFB5X3NzaXplX3QgbGVuID0gU1RSSU5HTElCX0xFTih2YWx1ZSk7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKQEAgLTQzOCw1NiArNzA4LDIwIEBACiAgICAgICAgIGxlbiA9IGZvcm1hdC0+cHJlY2lzaW9uOwogICAgIH0KIAotICAgIGlmIChmb3JtYXQtPndpZHRoID49IDApIHsKLSAgICAgICAgd2lkdGggPSBmb3JtYXQtPndpZHRoOwotCi0gICAgICAgIC8qIGJ1dCB1c2UgYXQgbGVhc3QgbGVuIGNoYXJhY3RlcnMgKi8KLSAgICAgICAgaWYgKGxlbiA+IHdpZHRoKSB7Ci0gICAgICAgICAgICB3aWR0aCA9IGxlbjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogbm90IHNwZWNpZmllZCwgdXNlIGFsbCBvZiB0aGUgY2hhcnMgYW5kIG5vIG1vcmUgKi8KLSAgICAgICAgd2lkdGggPSBsZW47Ci0gICAgfQorICAgIGNhbGNfcGFkZGluZyhsZW4sIGZvcm1hdC0+d2lkdGgsIGZvcm1hdC0+YWxpZ24sICZscGFkLCAmcnBhZCwgJnRvdGFsKTsKIAogICAgIC8qIGFsbG9jYXRlIHRoZSByZXN1bHRpbmcgc3RyaW5nICovCi0gICAgcmVzdWx0ID0gU1RSSU5HTElCX05FVyhOVUxMLCB3aWR0aCk7CisgICAgcmVzdWx0ID0gU1RSSU5HTElCX05FVyhOVUxMLCB0b3RhbCk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICBnb3RvIGRvbmU7CiAKLSAgICAvKiBub3cgd3JpdGUgaW50byB0aGF0IHNwYWNlICovCi0gICAgZHN0ID0gU1RSSU5HTElCX1NUUihyZXN1bHQpOworICAgIC8qIFdyaXRlIGludG8gdGhhdCBzcGFjZS4gRmlyc3QgdGhlIHBhZGRpbmcuICovCisgICAgcCA9IGZpbGxfcGFkZGluZyhTVFJJTkdMSUJfU1RSKHJlc3VsdCksIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyPT0nXDAnPycgJzpmb3JtYXQtPmZpbGxfY2hhciwKKyAgICAgICAgICAgICAgICAgICAgIGxwYWQsIHJwYWQpOwogCi0gICAgLyogZmlndXJlIG91dCBob3cgbXVjaCBsZWFkaW5nIHNwYWNlIHdlIG5lZWQsIGJhc2VkIG9uIHRoZQotICAgICAgIGFsaWduaW5nICovCi0gICAgaWYgKGZvcm1hdC0+YWxpZ24gPT0gJz4nKQotICAgICAgICBscGFkID0gd2lkdGggLSBsZW47Ci0gICAgZWxzZSBpZiAoZm9ybWF0LT5hbGlnbiA9PSAnXicpCi0gICAgICAgIGxwYWQgPSAod2lkdGggLSBsZW4pIC8gMjsKLSAgICBlbHNlCi0gICAgICAgIGxwYWQgPSAwOwotCi0gICAgLyogaWYgcmlnaHQgYWxpZ25pbmcsIGluY3JlbWVudCB0aGUgZGVzdGluYXRpb24gYWxsb3cgc3BhY2Ugb24gdGhlCi0gICAgICAgbGVmdCAqLwotICAgIG1lbWNweShkc3QgKyBscGFkLCBzcmMsIGxlbiAqIHNpemVvZihTVFJJTkdMSUJfQ0hBUikpOwotCi0gICAgLyogZG8gYW55IHBhZGRpbmcgKi8KLSAgICBpZiAod2lkdGggPiBsZW4pIHsKLSAgICAgICAgU1RSSU5HTElCX0NIQVIgZmlsbF9jaGFyID0gZm9ybWF0LT5maWxsX2NoYXI7Ci0gICAgICAgIGlmIChmaWxsX2NoYXIgPT0gJ1wwJykgewotICAgICAgICAgICAgLyogdXNlIHRoZSBkZWZhdWx0LCBpZiBub3Qgc3BlY2lmaWVkICovCi0gICAgICAgICAgICBmaWxsX2NoYXIgPSAnICc7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBwYWQgb24gbGVmdCAqLwotICAgICAgICBpZiAobHBhZCkKLSAgICAgICAgICAgIFNUUklOR0xJQl9GSUxMKGRzdCwgZmlsbF9jaGFyLCBscGFkKTsKLQotICAgICAgICAvKiBwYWQgb24gcmlnaHQgKi8KLSAgICAgICAgaWYgKHdpZHRoIC0gbGVuIC0gbHBhZCkKLSAgICAgICAgICAgIFNUUklOR0xJQl9GSUxMKGRzdCArIGxlbiArIGxwYWQsIGZpbGxfY2hhciwgd2lkdGggLSBsZW4gLSBscGFkKTsKLSAgICB9CisgICAgLyogVGhlbiB0aGUgc291cmNlIHN0cmluZy4gKi8KKyAgICBtZW1jcHkocCwgU1RSSU5HTElCX1NUUih2YWx1ZSksIGxlbiAqIHNpemVvZihTVFJJTkdMSUJfQ0hBUikpOwogCiBkb25lOgogICAgIHJldHVybiByZXN1bHQ7CkBAIC01MTAsMTkgKzc0NCwyMSBAQAogICAgIFB5T2JqZWN0ICp0bXAgPSBOVUxMOwogICAgIFNUUklOR0xJQl9DSEFSICpwbnVtZXJpY19jaGFyczsKICAgICBTVFJJTkdMSUJfQ0hBUiBudW1lcmljX2NoYXI7Ci0gICAgU1RSSU5HTElCX0NIQVIgc2lnbiA9ICdcMCc7Ci0gICAgU1RSSU5HTElCX0NIQVIgKnA7CisgICAgU1RSSU5HTElCX0NIQVIgc2lnbl9jaGFyID0gJ1wwJzsKICAgICBQeV9zc2l6ZV90IG5fZGlnaXRzOyAgICAgICAvKiBjb3VudCBvZiBkaWdpdHMgbmVlZCBmcm9tIHRoZSBjb21wdXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAqLwotICAgIFB5X3NzaXplX3Qgbl9sZWFkaW5nX2NoYXJzOwotICAgIFB5X3NzaXplX3Qgbl9ncm91cGluZ19jaGFycyA9IDA7IC8qIENvdW50IG9mIGFkZGl0aW9uYWwgY2hhcnMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZSwgdXNlZCBmb3IgJ24nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZy4gKi8KKyAgICBQeV9zc2l6ZV90IG5fcmVtYWluZGVyID0gMDsgLyogVXNlZCBvbmx5IGZvciAnYycgZm9ybWF0dGluZywgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXMgbm9uLWRpZ2l0cyAqLwogICAgIFB5X3NzaXplX3Qgbl9wcmVmaXggPSAwOyAgIC8qIENvdW50IG9mIHByZWZpeCBjaGFycywgKGUuZy4sICcweCcpICovCisgICAgUHlfc3NpemVfdCBuX3RvdGFsOwogICAgIFNUUklOR0xJQl9DSEFSICpwcmVmaXggPSBOVUxMOwogICAgIE51bWJlckZpZWxkV2lkdGhzIHNwZWM7CiAgICAgbG9uZyB4OwogCisgICAgLyogTG9jYWxlIHNldHRpbmdzLCBlaXRoZXIgZnJvbSB0aGUgYWN0dWFsIGxvY2FsZSBvcgorICAgICAgIGZyb20gYSBoYXJkLWNvZGUgcHNldWRvLWxvY2FsZSAqLworICAgIExvY2FsZUluZm8gbG9jYWxlOworCiAgICAgLyogbm8gcHJlY2lzaW9uIGFsbG93ZWQgb24gaW50ZWdlcnMgKi8KICAgICBpZiAoZm9ybWF0LT5wcmVjaXNpb24gIT0gLTEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC01MzAsNyArNzY2LDYgQEAKICAgICAgICAgZ290byBkb25lOwogICAgIH0KIAotCiAgICAgLyogc3BlY2lhbCBjYXNlIGZvciBjaGFyYWN0ZXIgZm9ybWF0dGluZyAqLwogICAgIGlmIChmb3JtYXQtPnR5cGUgPT0gJ2MnKSB7CiAgICAgICAgIC8qIGVycm9yIHRvIHNwZWNpZnkgYSBzaWduICovCkBAIC01NDEsNiArNzc2LDE0IEBACiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KIAorICAgICAgICAvKiBFcnJvciB0byBzcGVjaWZ5IGEgY29tbWEuICovCisgICAgICAgIGlmIChmb3JtYXQtPnRob3VzYW5kc19zZXBhcmF0b3JzKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhvdXNhbmRzIHNlcGFyYXRvcnMgbm90IGFsbG93ZWQgd2l0aCBpbnRlZ2VyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZm9ybWF0IHNwZWNpZmllciAnYyciKTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorCiAgICAgICAgIC8qIHRha2VuIGZyb20gdW5pY29kZW9iamVjdC5jIGZvcm1hdGNoYXIoKSAqLwogICAgICAgICAvKiBJbnRlZ2VyIGlucHV0IHRydW5jYXRlZCB0byBhIGNoYXJhY3RlciAqLwogLyogWFhYOiB3b24ndCB3b3JrIGZvciBpbnQgKi8KQEAgLTU2NSw2ICs4MDgsMTMgQEAKICAgICAgICAgbnVtZXJpY19jaGFyID0gKFNUUklOR0xJQl9DSEFSKXg7CiAgICAgICAgIHBudW1lcmljX2NoYXJzID0gJm51bWVyaWNfY2hhcjsKICAgICAgICAgbl9kaWdpdHMgPSAxOworCisgICAgICAgIC8qIEFzIGEgc29ydC1vZiBoYWNrLCB3ZSB0ZWxsIGNhbGNfbnVtYmVyX3dpZHRocyB0aGF0IHdlIG9ubHkKKyAgICAgICAgICAgaGF2ZSAicmVtYWluZGVyIiBjaGFyYWN0ZXJzLiBjYWxjX251bWJlcl93aWR0aHMgdGhpbmtzCisgICAgICAgICAgIHRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgZG9uJ3QgZ2V0IGZvcm1hdHRlZCwgb25seSBjb3BpZWQKKyAgICAgICAgICAgaW50byB0aGUgb3V0cHV0IHN0cmluZy4gV2UgZG8gdGhpcyBmb3IgJ2MnIGZvcm1hdHRpbmcsCisgICAgICAgICAgIGJlY2F1c2UgdGhlIGNoYXJhY3RlcnMgYXJlIGxpa2VseSB0byBiZSBub24tZGlnaXRzLiAqLworICAgICAgICBuX3JlbWFpbmRlciA9IDE7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBpbnQgYmFzZTsKQEAgLTYxNiw4ICs4NjYsOCBAQAogCiAgICAgICAgIC8qIElzIGEgc2lnbiBjaGFyYWN0ZXIgcHJlc2VudCBpbiB0aGUgb3V0cHV0PyAgSWYgc28sIHJlbWVtYmVyIGl0CiAgICAgICAgICAgIGFuZCBza2lwIGl0ICovCi0gICAgICAgIHNpZ24gPSBwbnVtZXJpY19jaGFyc1swXTsKLSAgICAgICAgaWYgKHNpZ24gPT0gJy0nKSB7CisgICAgICAgIGlmIChwbnVtZXJpY19jaGFyc1swXSA9PSAnLScpIHsKKyAgICAgICAgICAgIHNpZ25fY2hhciA9IHBudW1lcmljX2NoYXJzWzBdOwogICAgICAgICAgICAgKytwcmVmaXg7CiAgICAgICAgICAgICArK2xlYWRpbmdfY2hhcnNfdG9fc2tpcDsKICAgICAgICAgfQpAQCAtNjI3LDcwICs4NzcsMjYgQEAKICAgICAgICAgcG51bWVyaWNfY2hhcnMgKz0gbGVhZGluZ19jaGFyc190b19za2lwOwogICAgIH0KIAotICAgIGlmIChmb3JtYXQtPnR5cGUgPT0gJ24nKQotICAgICAgICAgICAgLyogQ29tcHV0ZSBob3cgbWFueSBhZGRpdGlvbmFsIGNoYXJzIHdlIG5lZWQgdG8gYWxsb2NhdGUKLSAgICAgICAgICAgICAgIHRvIGhvbGQgdGhlIHRob3VzYW5kcyBncm91cGluZy4gKi8KLSAgICAgICAgICAgIFNUUklOR0xJQl9HUk9VUElORyhOVUxMLCBuX2RpZ2l0cywgbl9kaWdpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgJm5fZ3JvdXBpbmdfY2hhcnMsIDApOworICAgIC8qIERldGVybWluZSB0aGUgZ3JvdXBpbmcsIHNlcGFyYXRvciwgYW5kIGRlY2ltYWwgcG9pbnQsIGlmIGFueS4gKi8KKyAgICBnZXRfbG9jYWxlX2luZm8oZm9ybWF0LT50eXBlID09ICduJyA/IExUX0NVUlJFTlRfTE9DQUxFIDoKKyAgICAgICAgICAgICAgICAgICAgKGZvcm1hdC0+dGhvdXNhbmRzX3NlcGFyYXRvcnMgPworICAgICAgICAgICAgICAgICAgICAgTFRfREVGQVVMVF9MT0NBTEUgOgorICAgICAgICAgICAgICAgICAgICAgTFRfTk9fTE9DQUxFKSwKKyAgICAgICAgICAgICAgICAgICAgJmxvY2FsZSk7CiAKLSAgICAvKiBDYWxjdWxhdGUgdGhlIHdpZHRocyBvZiB0aGUgdmFyaW91cyBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXJ0cyAqLwotICAgIGNhbGNfbnVtYmVyX3dpZHRocygmc3BlYywgc2lnbiwgbl9wcmVmaXgsIG5fZGlnaXRzICsgbl9ncm91cGluZ19jaGFycywKLSAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KTsKKyAgICAvKiBDYWxjdWxhdGUgaG93IG11Y2ggbWVtb3J5IHdlJ2xsIG5lZWQuICovCisgICAgbl90b3RhbCA9IGNhbGNfbnVtYmVyX3dpZHRocygmc3BlYywgbl9wcmVmaXgsIHNpZ25fY2hhciwgcG51bWVyaWNfY2hhcnMsCisgICAgICAgICAgICAgICAgICAgICAgIG5fZGlnaXRzLCBuX3JlbWFpbmRlciwgMCwgJmxvY2FsZSwgZm9ybWF0KTsKIAotICAgIC8qIEFsbG9jYXRlIGEgbmV3IHN0cmluZyB0byBob2xkIHRoZSByZXN1bHQgKi8KLSAgICByZXN1bHQgPSBTVFJJTkdMSUJfTkVXKE5VTEwsIHNwZWMubl90b3RhbCk7CisgICAgLyogQWxsb2NhdGUgdGhlIG1lbW9yeS4gKi8KKyAgICByZXN1bHQgPSBTVFJJTkdMSUJfTkVXKE5VTEwsIG5fdG90YWwpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBnb3RvIGRvbmU7Ci0gICAgcCA9IFNUUklOR0xJQl9TVFIocmVzdWx0KTsKIAotICAgIC8qIFhYWCBUaGVyZSBpcyB0b28gbXVjaCBtYWdpYyBoZXJlIHJlZ2FyZGluZyB0aGUgaW50ZXJuYWxzIG9mCi0gICAgICAgc3BlYyBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBwcmVmaXggYW5kIGRpZ2l0cy4gIEl0IHdvdWxkIGJlCi0gICAgICAgYmV0dGVyIGlmIGNhbGNfbnVtYmVyX3dpZHRocyByZXR1cm5lZCBhIG51bWJlciBvZiBsb2dpY2FsCi0gICAgICAgb2Zmc2V0cyBpbnRvIHRoZSBidWZmZXIsIGFuZCB0aG9zZSB3ZXJlIHVzZWQuICBNYXliZSBpbiBhCi0gICAgICAgZnV0dXJlIGNvZGUgY2xlYW51cC4gKi8KLQotICAgIC8qIEZpbGwgaW4gdGhlIGRpZ2l0IHBhcnRzICovCi0gICAgbl9sZWFkaW5nX2NoYXJzID0gc3BlYy5uX2xwYWRkaW5nICsgc3BlYy5uX2xzaWduICsKLSAgICAgICAgICAgIHNwZWMubl9wcmVmaXggKyBzcGVjLm5fc3BhZGRpbmc7Ci0gICAgbWVtbW92ZShwICsgbl9sZWFkaW5nX2NoYXJzLAotICAgICAgICAgICAgcG51bWVyaWNfY2hhcnMsCi0gICAgICAgICAgICBuX2RpZ2l0cyAqIHNpemVvZihTVFJJTkdMSUJfQ0hBUikpOwotCi0gICAgLyogSWYgdHlwZSBpcyAnWCcsIGNvbnZlcnQgdGhlIGZpbGxlZCBpbiBkaWdpdHMgdG8gdXBwZXJjYXNlICovCi0gICAgaWYgKGZvcm1hdC0+dHlwZSA9PSAnWCcpIHsKLSAgICAgICAgUHlfc3NpemVfdCB0OwotICAgICAgICBmb3IgKHQgPSAwOyB0IDwgbl9kaWdpdHM7ICsrdCkKLSAgICAgICAgICAgIHBbdCArIG5fbGVhZGluZ19jaGFyc10gPSBTVFJJTkdMSUJfVE9VUFBFUihwW3QgKyBuX2xlYWRpbmdfY2hhcnNdKTsKLSAgICB9Ci0KLSAgICAvKiBJbnNlcnQgdGhlIGdyb3VwaW5nLCBpZiBhbnksIGFmdGVyIHRoZSB1cHBlcmNhc2luZyBvZiB0aGUgZGlnaXRzLCBzbwotICAgICAgIHdlIGNhbiBlbnN1cmUgdGhhdCBncm91cGluZyBjaGFycyB3b24ndCBiZSBhZmZlY3RlZC4gKi8KLSAgICBpZiAobl9ncm91cGluZ19jaGFycykgewotICAgICAgICAgICAgLyogV2Uga25vdyB0aGlzIGNhbid0IGZhaWwsIHNpbmNlIHdlJ3ZlIGFscmVhZHkKLSAgICAgICAgICAgICAgIHJlc2VydmVkIGVub3VnaCBzcGFjZS4gKi8KLSAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSICpwc3RhcnQgPSBwICsgbl9sZWFkaW5nX2NoYXJzOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIGludCByID0KLSNlbmRpZgotICAgICAgICAgICAgICAgIFNUUklOR0xJQl9HUk9VUElORyhwc3RhcnQsIG5fZGlnaXRzLCBuX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWMubl90b3RhbCtuX2dyb3VwaW5nX2NoYXJzLW5fbGVhZGluZ19jaGFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOwotICAgICAgICAgICAgYXNzZXJ0KHIpOwotICAgIH0KLQotICAgIC8qIEZpbGwgaW4gdGhlIG5vbi1kaWdpdCBwYXJ0cyAocGFkZGluZywgc2lnbiwgZXRjLikgKi8KLSAgICBmaWxsX25vbl9kaWdpdHMocCwgJnNwZWMsIHByZWZpeCwgbl9kaWdpdHMgKyBuX2dyb3VwaW5nX2NoYXJzLAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQtPmZpbGxfY2hhciA9PSAnXDAnID8gJyAnIDogZm9ybWF0LT5maWxsX2NoYXIpOwotCi0gICAgLyogSWYgdHlwZSBpcyAnWCcsIHVwcGVyY2FzZSB0aGUgcHJlZml4LiAgVGhpcyBoYXMgdG8gYmUgZG9uZSBhZnRlciB0aGUKLSAgICAgICBwcmVmaXggaXMgZmlsbGVkIGluIGJ5IGZpbGxfbm9uX2RpZ2l0cyAqLwotICAgIGlmIChmb3JtYXQtPnR5cGUgPT0gJ1gnKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgdDsKLSAgICAgICAgZm9yICh0ID0gMDsgdCA8IG5fcHJlZml4OyArK3QpCi0gICAgICAgICAgICBwW3QgKyBzcGVjLm5fbHBhZGRpbmcgKyBzcGVjLm5fbHNpZ25dID0KLSAgICAgICAgICAgICAgICAgICAgU1RSSU5HTElCX1RPVVBQRVIocFt0ICsgc3BlYy5uX2xwYWRkaW5nICsgc3BlYy5uX2xzaWduXSk7Ci0gICAgfQotCisgICAgLyogUG9wdWxhdGUgdGhlIG1lbW9yeS4gKi8KKyAgICBmaWxsX251bWJlcihTVFJJTkdMSUJfU1RSKHJlc3VsdCksICZzcGVjLCBwbnVtZXJpY19jaGFycywgbl9kaWdpdHMsCisgICAgICAgICAgICAgICAgcHJlZml4LCBmb3JtYXQtPmZpbGxfY2hhciA9PSAnXDAnID8gJyAnIDogZm9ybWF0LT5maWxsX2NoYXIsCisgICAgICAgICAgICAgICAgJmxvY2FsZSwgZm9ybWF0LT50eXBlID09ICdYJyk7CiAKIGRvbmU6CiAgICAgUHlfWERFQ1JFRih0bXApOwpAQCAtNzA0LDY0ICs5MTAsNDYgQEAKIAogI2lmZGVmIEZPUk1BVF9GTE9BVAogI2lmIFNUUklOR0xJQl9JU19VTklDT0RFCi0vKiB0YWtlbiBmcm9tIHVuaWNvZGVvYmplY3QuYyAqLwotc3RhdGljIFB5X3NzaXplX3QKLXN0cnRvdW5pY29kZShQeV9VTklDT0RFICpidWZmZXIsIGNvbnN0IGNoYXIgKmNoYXJidWZmZXIpCitzdGF0aWMgdm9pZAorc3RydG91bmljb2RlKFB5X1VOSUNPREUgKmJ1ZmZlciwgY29uc3QgY2hhciAqY2hhcmJ1ZmZlciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIFB5X3NzaXplX3QgbGVuID0gc3RybGVuKGNoYXJidWZmZXIpOwotICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICBidWZmZXJbaV0gPSAoUHlfVU5JQ09ERSkgY2hhcmJ1ZmZlcltpXTsKLQotICAgIHJldHVybiBsZW47CisgICAgUHlfc3NpemVfdCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICAgICAgYnVmZmVyW2ldID0gKFB5X1VOSUNPREUpY2hhcmJ1ZmZlcltpXTsKIH0KICNlbmRpZgogCi0vKiBzZWUgRk9STUFUQlVGTEVOIGluIHVuaWNvZGVvYmplY3QuYyAqLwotI2RlZmluZSBGTE9BVF9GT1JNQVRCVUZMRU4gMTIwCi0KIC8qIG11Y2ggb2YgdGhpcyBpcyB0YWtlbiBmcm9tIHVuaWNvZGVvYmplY3QuYyAqLwogc3RhdGljIFB5T2JqZWN0ICoKIGZvcm1hdF9mbG9hdF9pbnRlcm5hbChQeU9iamVjdCAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50ZXJuYWxGb3JtYXRTcGVjICpmb3JtYXQpCiB7Ci0gICAgLyogZm10ID0gJyUuJyArIGBwcmVjYCArIGB0eXBlYCArICclJScKLSAgICAgICB3b3JzdCBjYXNlIGxlbmd0aCA9IDIgKyAxMCAobGVuIG9mIElOVF9NQVgpICsgMSArIDIgPSAxNSAodXNlIDIwKSovCi0gICAgY2hhciBmbXRbMjBdOwotCi0gICAgLyogdGFrZW4gZnJvbSB1bmljb2Rlb2JqZWN0LmMgKi8KLSAgICAvKiBXb3JzdCBjYXNlIGxlbmd0aCBjYWxjIHRvIGVuc3VyZSBubyBidWZmZXIgb3ZlcnJ1bjoKLQotICAgICAgICdnJyBmb3JtYXRzOgotICAgICAgICAgZm10ID0gJSMuPHByZWM+ZwotICAgICAgICAgYnVmID0gJy0nICsgWzAtOV0qcHJlYyArICcuJyArICdlKycgKyAobG9uZ2VzdCBleHAKLSAgICAgICAgICAgIGZvciBhbnkgZG91YmxlIHJlcC4pCi0gICAgICAgICBsZW4gPSAxICsgcHJlYyArIDEgKyAyICsgNSA9IDkgKyBwcmVjCi0KLSAgICAgICAnZicgZm9ybWF0czoKLSAgICAgICAgIGJ1ZiA9ICctJyArIFswLTldKnggKyAnLicgKyBbMC05XSpwcmVjICh3aXRoIHggPCA1MCkKLSAgICAgICAgIGxlbiA9IDEgKyA1MCArIDEgKyBwcmVjID0gNTIgKyBwcmVjCi0KLSAgICAgICBJZiBwcmVjPTAgdGhlIGVmZmVjdGl2ZSBwcmVjaXNpb24gaXMgMSAodGhlIGxlYWRpbmcgZGlnaXQgaXMKLSAgICAgICBhbHdheXMgZ2l2ZW4pLCB0aGVyZWZvcmUgaW5jcmVhc2UgdGhlIGxlbmd0aCBieSBvbmUuCi0KLSAgICAqLwotICAgIGNoYXIgY2hhcmJ1ZltGTE9BVF9GT1JNQVRCVUZMRU5dOworICAgIGNoYXIgKmJ1ZiA9IE5VTEw7ICAgICAgIC8qIGJ1ZmZlciByZXR1cm5lZCBmcm9tIFB5T1NfZG91YmxlX3RvX3N0cmluZyAqLwogICAgIFB5X3NzaXplX3Qgbl9kaWdpdHM7Ci0gICAgZG91YmxlIHg7CisgICAgUHlfc3NpemVfdCBuX3JlbWFpbmRlcjsKKyAgICBQeV9zc2l6ZV90IG5fdG90YWw7CisgICAgaW50IGhhc19kZWNpbWFsOworICAgIGRvdWJsZSB2YWw7CiAgICAgUHlfc3NpemVfdCBwcmVjaXNpb24gPSBmb3JtYXQtPnByZWNpc2lvbjsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKLSAgICBTVFJJTkdMSUJfQ0hBUiBzaWduOwotICAgIGNoYXIqIHRyYWlsaW5nID0gIiI7CisgICAgUHlfc3NpemVfdCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CisgICAgU1RSSU5HTElCX0NIQVIgdHlwZSA9IGZvcm1hdC0+dHlwZTsKKyAgICBpbnQgYWRkX3BjdCA9IDA7CiAgICAgU1RSSU5HTElCX0NIQVIgKnA7CiAgICAgTnVtYmVyRmllbGRXaWR0aHMgc3BlYzsKLSAgICBTVFJJTkdMSUJfQ0hBUiB0eXBlID0gZm9ybWF0LT50eXBlOworICAgIGludCBmbGFncyA9IDA7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgU1RSSU5HTElCX0NIQVIgc2lnbl9jaGFyID0gJ1wwJzsKKyAgICBpbnQgZmxvYXRfdHlwZTsgLyogVXNlZCB0byBzZWUgaWYgd2UgaGF2ZSBhIG5hbiwgaW5mLCBvciByZWd1bGFyIGZsb2F0LiAqLwogCiAjaWYgU1RSSU5HTElCX0lTX1VOSUNPREUKLSAgICBQeV9VTklDT0RFIHVuaWNvZGVidWZbRkxPQVRfRk9STUFUQlVGTEVOXTsKKyAgICBQeV9VTklDT0RFICp1bmljb2RlX3RtcCA9IE5VTEw7CiAjZW5kaWYKIAotICAgIC8qIGFsdGVybmF0ZSBpcyBub3QgYWxsb3dlZCBvbiBmbG9hdHMuICovCisgICAgLyogTG9jYWxlIHNldHRpbmdzLCBlaXRoZXIgZnJvbSB0aGUgYWN0dWFsIGxvY2FsZSBvcgorICAgICAgIGZyb20gYSBoYXJkLWNvZGUgcHNldWRvLWxvY2FsZSAqLworICAgIExvY2FsZUluZm8gbG9jYWxlOworCisgICAgLyogQWx0ZXJuYXRlIGlzIG5vdCBhbGxvd2VkIG9uIGZsb2F0cy4gKi8KICAgICBpZiAoZm9ybWF0LT5hbHRlcm5hdGUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQWx0ZXJuYXRlIGZvcm0gKCMpIG5vdCBhbGxvd2VkIGluIGZsb2F0IGZvcm1hdCAiCkBAIC03NjksODkgKzk1NywzMzMgQEAKICAgICAgICAgZ290byBkb25lOwogICAgIH0KIAotICAgIC8qIGZpcnN0LCBkbyB0aGUgY29udmVyc2lvbiBhcyA4LWJpdCBjaGFycywgdXNpbmcgdGhlIHBsYXRmb3JtJ3MKLSAgICAgICBzbnByaW50Zi4gIHRoZW4sIGlmIG5lZWRlZCwgY29udmVydCB0byB1bmljb2RlLiAqLworICAgIGlmICh0eXBlID09ICdcMCcpIHsKKyAgICAgICAgLyogT21pdHRlZCB0eXBlIHNwZWNpZmllci4gVGhpcyBpcyBsaWtlICdnJyBidXQgd2l0aCBhdCBsZWFzdCBvbmUKKyAgICAgICAgICAgZGlnaXQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQsIGFuZCBkaWZmZXJlbnQgZGVmYXVsdCBwcmVjaXNpb24uKi8KKyAgICAgICAgdHlwZSA9ICdnJzsKKyAgICAgICAgZGVmYXVsdF9wcmVjaXNpb24gPSBQeUZsb2F0X1NUUl9QUkVDSVNJT047CisgICAgICAgIGZsYWdzIHw9IFB5X0RUU0ZfQUREX0RPVF8wOworICAgIH0KIAotICAgIC8qICdGJyBpcyB0aGUgc2FtZSBhcyAnZicsIHBlciB0aGUgUEVQICovCi0gICAgaWYgKHR5cGUgPT0gJ0YnKQotICAgICAgICB0eXBlID0gJ2YnOworICAgIGlmICh0eXBlID09ICduJykKKyAgICAgICAgLyogJ24nIGlzIHRoZSBzYW1lIGFzICdnJywgZXhjZXB0IGZvciB0aGUgbG9jYWxlIHVzZWQgdG8KKyAgICAgICAgICAgZm9ybWF0IHRoZSByZXN1bHQuIFdlIHRha2UgY2FyZSBvZiB0aGF0IGxhdGVyLiAqLworICAgICAgICB0eXBlID0gJ2cnOwogCi0gICAgeCA9IFB5RmxvYXRfQXNEb3VibGUodmFsdWUpOwotCi0gICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgIHZhbCA9IFB5RmxvYXRfQXNEb3VibGUodmFsdWUpOworICAgIGlmICh2YWwgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICBnb3RvIGRvbmU7CiAKICAgICBpZiAodHlwZSA9PSAnJScpIHsKICAgICAgICAgdHlwZSA9ICdmJzsKLSAgICAgICAgeCAqPSAxMDA7Ci0gICAgICAgIHRyYWlsaW5nID0gIiUiOworICAgICAgICB2YWwgKj0gMTAwOworICAgICAgICBhZGRfcGN0ID0gMTsKICAgICB9CiAKICAgICBpZiAocHJlY2lzaW9uIDwgMCkKLSAgICAgICAgcHJlY2lzaW9uID0gNjsKLSAgICBpZiAodHlwZSA9PSAnZicgJiYgZmFicyh4KSA+PSAxZTUwKQotICAgICAgICB0eXBlID0gJ2cnOworICAgICAgICBwcmVjaXNpb24gPSBkZWZhdWx0X3ByZWNpc2lvbjsKIAotICAgIC8qIGNhc3QgInR5cGUiLCBiZWNhdXNlIGlmIHdlJ3JlIGluIHVuaWNvZGUgd2UgbmVlZCB0byBwYXNzIGEKLSAgICAgICA4LWJpdCBjaGFyLiAgdGhpcyBpcyBzYWZlLCBiZWNhdXNlIHdlJ3ZlIHJlc3RyaWN0ZWQgd2hhdCAidHlwZSIKLSAgICAgICBjYW4gYmUgKi8KLSAgICBQeU9TX3NucHJpbnRmKGZtdCwgc2l6ZW9mKGZtdCksICIlJS4lIiBQWV9GT1JNQVRfU0laRV9UICJkJWMiLCBwcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAoY2hhcil0eXBlKTsKKyAgICAvKiBDYXN0ICJ0eXBlIiwgYmVjYXVzZSBpZiB3ZSdyZSBpbiB1bmljb2RlIHdlIG5lZWQgdG8gcGFzcyBhCisgICAgICAgOC1iaXQgY2hhci4gVGhpcyBpcyBzYWZlLCBiZWNhdXNlIHdlJ3ZlIHJlc3RyaWN0ZWQgd2hhdCAidHlwZSIKKyAgICAgICBjYW4gYmUuICovCisgICAgYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHZhbCwgKGNoYXIpdHlwZSwgcHJlY2lzaW9uLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZsb2F0X3R5cGUpOworICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworICAgIG5fZGlnaXRzID0gc3RybGVuKGJ1Zik7CiAKLSAgICAvKiBkbyB0aGUgYWN0dWFsIGZvcm1hdHRpbmcgKi8KLSAgICBQeU9TX2FzY2lpX2Zvcm1hdGQoY2hhcmJ1Ziwgc2l6ZW9mKGNoYXJidWYpLCBmbXQsIHgpOworICAgIGlmIChhZGRfcGN0KSB7CisgICAgICAgIC8qIFdlIGtub3cgdGhhdCBidWYgaGFzIGEgdHJhaWxpbmcgemVybyAoc2luY2Ugd2UganVzdCBjYWxsZWQKKyAgICAgICAgICAgc3RybGVuKCkgb24gaXQpLCBhbmQgd2UgZG9uJ3QgdXNlIHRoYXQgZmFjdCBhbnkgbW9yZS4gU28gd2UKKyAgICAgICAgICAgY2FuIGp1c3Qgd3JpdGUgb3ZlciB0aGUgdHJhaWxpbmcgemVyby4gKi8KKyAgICAgICAgYnVmW25fZGlnaXRzXSA9ICclJzsKKyAgICAgICAgbl9kaWdpdHMgKz0gMTsKKyAgICB9CiAKLSAgICAvKiBhZGRpbmcgdHJhaWxpbmcgdG8gZm10IHdpdGggUHlPU19zbnByaW50ZiBkb2Vzbid0IHdvcmssIG5vdAotICAgICAgIHN1cmUgd2h5LiAgd2UnbGwganVzdCBjb25jYXRlbnRhdGUgaXQgaGVyZSwgbm8gaGFybSBkb25lLiAgd2UKLSAgICAgICBrbm93IHdlIGNhbid0IGhhdmUgYSBidWZmZXIgb3ZlcmZsb3cgZnJvbSB0aGUgZm10IHNpemUKLSAgICAgICBhbmFseXNpcyAqLwotICAgIHN0cmNhdChjaGFyYnVmLCB0cmFpbGluZyk7Ci0KLSAgICAvKiByYXRoZXIgdGhhbiBkdXBsaWNhdGUgdGhlIGNvZGUgZm9yIHNucHJpbnRmIGZvciBib3RoIHVuaWNvZGUKLSAgICAgICBhbmQgOCBiaXQgc3RyaW5ncywgd2UganVzdCB1c2UgdGhlIDggYml0IHZlcnNpb24gYW5kIHRoZW4KLSAgICAgICBjb252ZXJ0IHRvIHVuaWNvZGUgaW4gYSBzZXBhcmF0ZSBjb2RlIHBhdGguICB0aGF0J3MgcHJvYmFibHkKLSAgICAgICB0aGUgbGVzc2VyIG9mIDIgZXZpbHMuICovCisgICAgLyogU2luY2UgdGhlcmUgaXMgbm8gdW5pY29kZSB2ZXJzaW9uIG9mIFB5T1NfZG91YmxlX3RvX3N0cmluZywKKyAgICAgICBqdXN0IHVzZSB0aGUgOCBiaXQgdmVyc2lvbiBhbmQgdGhlbiBjb252ZXJ0IHRvIHVuaWNvZGUuICovCiAjaWYgU1RSSU5HTElCX0lTX1VOSUNPREUKLSAgICBuX2RpZ2l0cyA9IHN0cnRvdW5pY29kZSh1bmljb2RlYnVmLCBjaGFyYnVmKTsKLSAgICBwID0gdW5pY29kZWJ1ZjsKKyAgICB1bmljb2RlX3RtcCA9IChQeV9VTklDT0RFKilQeU1lbV9NYWxsb2MoKG5fZGlnaXRzKSpzaXplb2YoUHlfVU5JQ09ERSkpOworICAgIGlmICh1bmljb2RlX3RtcCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgc3RydG91bmljb2RlKHVuaWNvZGVfdG1wLCBidWYsIG5fZGlnaXRzKTsKKyAgICBwID0gdW5pY29kZV90bXA7CiAjZWxzZQotICAgIC8qIGNvbXB1dGUgdGhlIGxlbmd0aC4gIEkgYmVsaWV2ZSB0aGlzIGlzIGRvbmUgYmVjYXVzZSB0aGUgcmV0dXJuCi0gICAgICAgdmFsdWUgZnJvbSBzbnByaW50ZiBhYm92ZSBpcyB1bnJlbGlhYmxlICovCi0gICAgbl9kaWdpdHMgPSBzdHJsZW4oY2hhcmJ1Zik7Ci0gICAgcCA9IGNoYXJidWY7CisgICAgcCA9IGJ1ZjsKICNlbmRpZgogCi0gICAgLyogaXMgYSBzaWduIGNoYXJhY3RlciBwcmVzZW50IGluIHRoZSBvdXRwdXQ/ICBpZiBzbywgcmVtZW1iZXIgaXQKKyAgICAvKiBJcyBhIHNpZ24gY2hhcmFjdGVyIHByZXNlbnQgaW4gdGhlIG91dHB1dD8gIElmIHNvLCByZW1lbWJlciBpdAogICAgICAgIGFuZCBza2lwIGl0ICovCi0gICAgc2lnbiA9IHBbMF07Ci0gICAgaWYgKHNpZ24gPT0gJy0nKSB7CisgICAgaWYgKCpwID09ICctJykgeworICAgICAgICBzaWduX2NoYXIgPSAqcDsKICAgICAgICAgKytwOwogICAgICAgICAtLW5fZGlnaXRzOwogICAgIH0KIAotICAgIGNhbGNfbnVtYmVyX3dpZHRocygmc3BlYywgc2lnbiwgMCwgbl9kaWdpdHMsIGZvcm1hdCk7CisgICAgLyogRGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW55ICJyZW1haW5kZXIiIChhZnRlciB0aGUgZGlnaXRzLCBtaWdodCBpbmNsdWRlCisgICAgICAgZGVjaW1hbCBvciBleHBvbmVudCBvciBib3RoIChvciBuZWl0aGVyKSkgKi8KKyAgICBwYXJzZV9udW1iZXIocCwgbl9kaWdpdHMsICZuX3JlbWFpbmRlciwgJmhhc19kZWNpbWFsKTsKIAotICAgIC8qIGFsbG9jYXRlIGEgc3RyaW5nIHdpdGggZW5vdWdoIHNwYWNlICovCi0gICAgcmVzdWx0ID0gU1RSSU5HTElCX05FVyhOVUxMLCBzcGVjLm5fdG90YWwpOworICAgIC8qIERldGVybWluZSB0aGUgZ3JvdXBpbmcsIHNlcGFyYXRvciwgYW5kIGRlY2ltYWwgcG9pbnQsIGlmIGFueS4gKi8KKyAgICBnZXRfbG9jYWxlX2luZm8oZm9ybWF0LT50eXBlID09ICduJyA/IExUX0NVUlJFTlRfTE9DQUxFIDoKKyAgICAgICAgICAgICAgICAgICAgKGZvcm1hdC0+dGhvdXNhbmRzX3NlcGFyYXRvcnMgPworICAgICAgICAgICAgICAgICAgICAgTFRfREVGQVVMVF9MT0NBTEUgOgorICAgICAgICAgICAgICAgICAgICAgTFRfTk9fTE9DQUxFKSwKKyAgICAgICAgICAgICAgICAgICAgJmxvY2FsZSk7CisKKyAgICAvKiBDYWxjdWxhdGUgaG93IG11Y2ggbWVtb3J5IHdlJ2xsIG5lZWQuICovCisgICAgbl90b3RhbCA9IGNhbGNfbnVtYmVyX3dpZHRocygmc3BlYywgMCwgc2lnbl9jaGFyLCBwLCBuX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fcmVtYWluZGVyLCBoYXNfZGVjaW1hbCwgJmxvY2FsZSwgZm9ybWF0KTsKKworICAgIC8qIEFsbG9jYXRlIHRoZSBtZW1vcnkuICovCisgICAgcmVzdWx0ID0gU1RSSU5HTElCX05FVyhOVUxMLCBuX3RvdGFsKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZG9uZTsKIAotICAgIC8qIEZpbGwgaW4gdGhlIG5vbi1kaWdpdCBwYXJ0cyAocGFkZGluZywgc2lnbiwgZXRjLikgKi8KLSAgICBmaWxsX25vbl9kaWdpdHMoU1RSSU5HTElCX1NUUihyZXN1bHQpLCAmc3BlYywgTlVMTCwgbl9kaWdpdHMsCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyID09ICdcMCcgPyAnICcgOiBmb3JtYXQtPmZpbGxfY2hhcik7Ci0KLSAgICAvKiBmaWxsIGluIHRoZSBkaWdpdCBwYXJ0cyAqLwotICAgIG1lbW1vdmUoU1RSSU5HTElCX1NUUihyZXN1bHQpICsKLSAgICAgICAgICAgICAgIChzcGVjLm5fbHBhZGRpbmcgKyBzcGVjLm5fbHNpZ24gKyBzcGVjLm5fc3BhZGRpbmcpLAotICAgICAgICAgICAgcCwKLSAgICAgICAgICAgIG5fZGlnaXRzICogc2l6ZW9mKFNUUklOR0xJQl9DSEFSKSk7CisgICAgLyogUG9wdWxhdGUgdGhlIG1lbW9yeS4gKi8KKyAgICBmaWxsX251bWJlcihTVFJJTkdMSUJfU1RSKHJlc3VsdCksICZzcGVjLCBwLCBuX2RpZ2l0cywgTlVMTCwKKyAgICAgICAgICAgICAgICBmb3JtYXQtPmZpbGxfY2hhciA9PSAnXDAnID8gJyAnIDogZm9ybWF0LT5maWxsX2NoYXIsICZsb2NhbGUsCisgICAgICAgICAgICAgICAgMCk7CiAKIGRvbmU6CisgICAgUHlNZW1fRnJlZShidWYpOworI2lmIFNUUklOR0xJQl9JU19VTklDT0RFCisgICAgUHlNZW1fRnJlZSh1bmljb2RlX3RtcCk7CisjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmIC8qIEZPUk1BVF9GTE9BVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqIGNvbXBsZXggZm9ybWF0dGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBGT1JNQVRfQ09NUExFWAorCitzdGF0aWMgUHlPYmplY3QgKgorZm9ybWF0X2NvbXBsZXhfaW50ZXJuYWwoUHlPYmplY3QgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50ZXJuYWxGb3JtYXRTcGVjICpmb3JtYXQpCit7CisgICAgZG91YmxlIHJlOworICAgIGRvdWJsZSBpbTsKKyAgICBjaGFyICpyZV9idWYgPSBOVUxMOyAgICAgICAvKiBidWZmZXIgcmV0dXJuZWQgZnJvbSBQeU9TX2RvdWJsZV90b19zdHJpbmcgKi8KKyAgICBjaGFyICppbV9idWYgPSBOVUxMOyAgICAgICAvKiBidWZmZXIgcmV0dXJuZWQgZnJvbSBQeU9TX2RvdWJsZV90b19zdHJpbmcgKi8KKworICAgIEludGVybmFsRm9ybWF0U3BlYyB0bXBfZm9ybWF0ID0gKmZvcm1hdDsKKyAgICBQeV9zc2l6ZV90IG5fcmVfZGlnaXRzOworICAgIFB5X3NzaXplX3Qgbl9pbV9kaWdpdHM7CisgICAgUHlfc3NpemVfdCBuX3JlX3JlbWFpbmRlcjsKKyAgICBQeV9zc2l6ZV90IG5faW1fcmVtYWluZGVyOworICAgIFB5X3NzaXplX3Qgbl9yZV90b3RhbDsKKyAgICBQeV9zc2l6ZV90IG5faW1fdG90YWw7CisgICAgaW50IHJlX2hhc19kZWNpbWFsOworICAgIGludCBpbV9oYXNfZGVjaW1hbDsKKyAgICBQeV9zc2l6ZV90IHByZWNpc2lvbiA9IGZvcm1hdC0+cHJlY2lzaW9uOworICAgIFB5X3NzaXplX3QgZGVmYXVsdF9wcmVjaXNpb24gPSA2OworICAgIFNUUklOR0xJQl9DSEFSIHR5cGUgPSBmb3JtYXQtPnR5cGU7CisgICAgU1RSSU5HTElCX0NIQVIgKnBfcmU7CisgICAgU1RSSU5HTElCX0NIQVIgKnBfaW07CisgICAgTnVtYmVyRmllbGRXaWR0aHMgcmVfc3BlYzsKKyAgICBOdW1iZXJGaWVsZFdpZHRocyBpbV9zcGVjOworICAgIGludCBmbGFncyA9IDA7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgU1RSSU5HTElCX0NIQVIgKnA7CisgICAgU1RSSU5HTElCX0NIQVIgcmVfc2lnbl9jaGFyID0gJ1wwJzsKKyAgICBTVFJJTkdMSUJfQ0hBUiBpbV9zaWduX2NoYXIgPSAnXDAnOworICAgIGludCByZV9mbG9hdF90eXBlOyAvKiBVc2VkIHRvIHNlZSBpZiB3ZSBoYXZlIGEgbmFuLCBpbmYsIG9yIHJlZ3VsYXIgZmxvYXQuICovCisgICAgaW50IGltX2Zsb2F0X3R5cGU7CisgICAgaW50IGFkZF9wYXJlbnMgPSAwOworICAgIGludCBza2lwX3JlID0gMDsKKyAgICBQeV9zc2l6ZV90IGxwYWQ7CisgICAgUHlfc3NpemVfdCBycGFkOworICAgIFB5X3NzaXplX3QgdG90YWw7CisKKyNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQorICAgIFB5X1VOSUNPREUgKnJlX3VuaWNvZGVfdG1wID0gTlVMTDsKKyAgICBQeV9VTklDT0RFICppbV91bmljb2RlX3RtcCA9IE5VTEw7CisjZW5kaWYKKworICAgIC8qIExvY2FsZSBzZXR0aW5ncywgZWl0aGVyIGZyb20gdGhlIGFjdHVhbCBsb2NhbGUgb3IKKyAgICAgICBmcm9tIGEgaGFyZC1jb2RlIHBzZXVkby1sb2NhbGUgKi8KKyAgICBMb2NhbGVJbmZvIGxvY2FsZTsKKworICAgIC8qIEFsdGVybmF0ZSBpcyBub3QgYWxsb3dlZCBvbiBjb21wbGV4LiAqLworICAgIGlmIChmb3JtYXQtPmFsdGVybmF0ZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJBbHRlcm5hdGUgZm9ybSAoIykgbm90IGFsbG93ZWQgaW4gY29tcGxleCBmb3JtYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZmllciIpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgLyogTmVpdGhlciBpcyB6ZXJvIHBhZGluZy4gKi8KKyAgICBpZiAoZm9ybWF0LT5maWxsX2NoYXIgPT0gJzAnKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlplcm8gcGFkZGluZyBpcyBub3QgYWxsb3dlZCBpbiBjb21wbGV4IGZvcm1hdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWVyIik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICAvKiBOZWl0aGVyIGlzICc9JyBhbGlnbm1lbnQgLiAqLworICAgIGlmIChmb3JtYXQtPmFsaWduID09ICc9JykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICInPScgYWxpZ25tZW50IGZsYWcgaXMgbm90IGFsbG93ZWQgaW4gY29tcGxleCBmb3JtYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZmllciIpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgcmUgPSBQeUNvbXBsZXhfUmVhbEFzRG91YmxlKHZhbHVlKTsKKyAgICBpZiAocmUgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGRvbmU7CisgICAgaW0gPSBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlKHZhbHVlKTsKKyAgICBpZiAoaW0gPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICBpZiAodHlwZSA9PSAnXDAnKSB7CisgICAgICAgIC8qIE9taXR0ZWQgdHlwZSBzcGVjaWZpZXIuIFNob3VsZCBiZSBsaWtlIHN0cihzZWxmKS4gKi8KKyAgICAgICAgdHlwZSA9ICdnJzsKKyAgICAgICAgZGVmYXVsdF9wcmVjaXNpb24gPSBQeUZsb2F0X1NUUl9QUkVDSVNJT047CisgICAgICAgIGlmIChyZSA9PSAwLjAgJiYgY29weXNpZ24oMS4wLCByZSkgPT0gMS4wKQorICAgICAgICAgICAgc2tpcF9yZSA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZF9wYXJlbnMgPSAxOworICAgIH0KKworICAgIGlmICh0eXBlID09ICduJykKKyAgICAgICAgLyogJ24nIGlzIHRoZSBzYW1lIGFzICdnJywgZXhjZXB0IGZvciB0aGUgbG9jYWxlIHVzZWQgdG8KKyAgICAgICAgICAgZm9ybWF0IHRoZSByZXN1bHQuIFdlIHRha2UgY2FyZSBvZiB0aGF0IGxhdGVyLiAqLworICAgICAgICB0eXBlID0gJ2cnOworCisgICAgaWYgKHByZWNpc2lvbiA8IDApCisgICAgICAgIHByZWNpc2lvbiA9IGRlZmF1bHRfcHJlY2lzaW9uOworCisgICAgLyogQ2FzdCAidHlwZSIsIGJlY2F1c2UgaWYgd2UncmUgaW4gdW5pY29kZSB3ZSBuZWVkIHRvIHBhc3MgYQorICAgICAgIDgtYml0IGNoYXIuIFRoaXMgaXMgc2FmZSwgYmVjYXVzZSB3ZSd2ZSByZXN0cmljdGVkIHdoYXQgInR5cGUiCisgICAgICAgY2FuIGJlLiAqLworICAgIHJlX2J1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyhyZSwgKGNoYXIpdHlwZSwgcHJlY2lzaW9uLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlX2Zsb2F0X3R5cGUpOworICAgIGlmIChyZV9idWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworICAgIGltX2J1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyhpbSwgKGNoYXIpdHlwZSwgcHJlY2lzaW9uLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmltX2Zsb2F0X3R5cGUpOworICAgIGlmIChpbV9idWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgbl9yZV9kaWdpdHMgPSBzdHJsZW4ocmVfYnVmKTsKKyAgICBuX2ltX2RpZ2l0cyA9IHN0cmxlbihpbV9idWYpOworCisgICAgLyogU2luY2UgdGhlcmUgaXMgbm8gdW5pY29kZSB2ZXJzaW9uIG9mIFB5T1NfZG91YmxlX3RvX3N0cmluZywKKyAgICAgICBqdXN0IHVzZSB0aGUgOCBiaXQgdmVyc2lvbiBhbmQgdGhlbiBjb252ZXJ0IHRvIHVuaWNvZGUuICovCisjaWYgU1RSSU5HTElCX0lTX1VOSUNPREUKKyAgICByZV91bmljb2RlX3RtcCA9IChQeV9VTklDT0RFKilQeU1lbV9NYWxsb2MoKG5fcmVfZGlnaXRzKSpzaXplb2YoUHlfVU5JQ09ERSkpOworICAgIGlmIChyZV91bmljb2RlX3RtcCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgc3RydG91bmljb2RlKHJlX3VuaWNvZGVfdG1wLCByZV9idWYsIG5fcmVfZGlnaXRzKTsKKyAgICBwX3JlID0gcmVfdW5pY29kZV90bXA7CisKKyAgICBpbV91bmljb2RlX3RtcCA9IChQeV9VTklDT0RFKilQeU1lbV9NYWxsb2MoKG5faW1fZGlnaXRzKSpzaXplb2YoUHlfVU5JQ09ERSkpOworICAgIGlmIChpbV91bmljb2RlX3RtcCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgc3RydG91bmljb2RlKGltX3VuaWNvZGVfdG1wLCBpbV9idWYsIG5faW1fZGlnaXRzKTsKKyAgICBwX2ltID0gaW1fdW5pY29kZV90bXA7CisjZWxzZQorICAgIHBfcmUgPSByZV9idWY7CisgICAgcF9pbSA9IGltX2J1ZjsKKyNlbmRpZgorCisgICAgLyogSXMgYSBzaWduIGNoYXJhY3RlciBwcmVzZW50IGluIHRoZSBvdXRwdXQ/ICBJZiBzbywgcmVtZW1iZXIgaXQKKyAgICAgICBhbmQgc2tpcCBpdCAqLworICAgIGlmICgqcF9yZSA9PSAnLScpIHsKKyAgICAgICAgcmVfc2lnbl9jaGFyID0gKnBfcmU7CisgICAgICAgICsrcF9yZTsKKyAgICAgICAgLS1uX3JlX2RpZ2l0czsKKyAgICB9CisgICAgaWYgKCpwX2ltID09ICctJykgeworICAgICAgICBpbV9zaWduX2NoYXIgPSAqcF9pbTsKKyAgICAgICAgKytwX2ltOworICAgICAgICAtLW5faW1fZGlnaXRzOworICAgIH0KKworICAgIC8qIERldGVybWluZSBpZiB3ZSBoYXZlIGFueSAicmVtYWluZGVyIiAoYWZ0ZXIgdGhlIGRpZ2l0cywgbWlnaHQgaW5jbHVkZQorICAgICAgIGRlY2ltYWwgb3IgZXhwb25lbnQgb3IgYm90aCAob3IgbmVpdGhlcikpICovCisgICAgcGFyc2VfbnVtYmVyKHBfcmUsIG5fcmVfZGlnaXRzLCAmbl9yZV9yZW1haW5kZXIsICZyZV9oYXNfZGVjaW1hbCk7CisgICAgcGFyc2VfbnVtYmVyKHBfaW0sIG5faW1fZGlnaXRzLCAmbl9pbV9yZW1haW5kZXIsICZpbV9oYXNfZGVjaW1hbCk7CisKKyAgICAvKiBEZXRlcm1pbmUgdGhlIGdyb3VwaW5nLCBzZXBhcmF0b3IsIGFuZCBkZWNpbWFsIHBvaW50LCBpZiBhbnkuICovCisgICAgZ2V0X2xvY2FsZV9pbmZvKGZvcm1hdC0+dHlwZSA9PSAnbicgPyBMVF9DVVJSRU5UX0xPQ0FMRSA6CisgICAgICAgICAgICAgICAgICAgIChmb3JtYXQtPnRob3VzYW5kc19zZXBhcmF0b3JzID8KKyAgICAgICAgICAgICAgICAgICAgIExUX0RFRkFVTFRfTE9DQUxFIDoKKyAgICAgICAgICAgICAgICAgICAgIExUX05PX0xPQ0FMRSksCisgICAgICAgICAgICAgICAgICAgICZsb2NhbGUpOworCisgICAgLyogVHVybiBvZmYgYW55IHBhZGRpbmcuIFdlJ2xsIGRvIGl0IGxhdGVyIGFmdGVyIHdlJ3ZlIGNvbXBvc2VkCisgICAgICAgdGhlIG51bWJlcnMgd2l0aG91dCBwYWRkaW5nLiAqLworICAgIHRtcF9mb3JtYXQuZmlsbF9jaGFyID0gJ1wwJzsKKyAgICB0bXBfZm9ybWF0LmFsaWduID0gJzwnOworICAgIHRtcF9mb3JtYXQud2lkdGggPSAtMTsKKworICAgIC8qIENhbGN1bGF0ZSBob3cgbXVjaCBtZW1vcnkgd2UnbGwgbmVlZC4gKi8KKyAgICBuX3JlX3RvdGFsID0gY2FsY19udW1iZXJfd2lkdGhzKCZyZV9zcGVjLCAwLCByZV9zaWduX2NoYXIsIHBfcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX3JlX2RpZ2l0cywgbl9yZV9yZW1haW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZV9oYXNfZGVjaW1hbCwgJmxvY2FsZSwgJnRtcF9mb3JtYXQpOworCisgICAgLyogU2FtZSBmb3JtYXR0aW5nLCBidXQgYWx3YXlzIGluY2x1ZGUgYSBzaWduLCB1bmxlc3MgdGhlIHJlYWwgcGFydCBpcworICAgICAqIGdvaW5nIHRvIGJlIG9taXR0ZWQsIGluIHdoaWNoIGNhc2Ugd2UgdXNlIHdoYXRldmVyIHNpZ24gY29udmVudGlvbiB3YXMKKyAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIG9yaWdpbmFsIGZvcm1hdC4gKi8KKyAgICBpZiAoIXNraXBfcmUpCisgICAgICAgIHRtcF9mb3JtYXQuc2lnbiA9ICcrJzsKKyAgICBuX2ltX3RvdGFsID0gY2FsY19udW1iZXJfd2lkdGhzKCZpbV9zcGVjLCAwLCBpbV9zaWduX2NoYXIsIHBfaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2ltX2RpZ2l0cywgbl9pbV9yZW1haW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbV9oYXNfZGVjaW1hbCwgJmxvY2FsZSwgJnRtcF9mb3JtYXQpOworCisgICAgaWYgKHNraXBfcmUpCisgICAgICAgIG5fcmVfdG90YWwgPSAwOworCisgICAgLyogQWRkIDEgZm9yIHRoZSAnaicsIGFuZCBvcHRpb25hbGx5IDIgZm9yIHBhcmVucy4gKi8KKyAgICBjYWxjX3BhZGRpbmcobl9yZV90b3RhbCArIG5faW1fdG90YWwgKyAxICsgYWRkX3BhcmVucyAqIDIsCisgICAgICAgICAgICAgICAgIGZvcm1hdC0+d2lkdGgsIGZvcm1hdC0+YWxpZ24sICZscGFkLCAmcnBhZCwgJnRvdGFsKTsKKworICAgIHJlc3VsdCA9IFNUUklOR0xJQl9ORVcoTlVMTCwgdG90YWwpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgLyogUG9wdWxhdGUgdGhlIG1lbW9yeS4gRmlyc3QsIHRoZSBwYWRkaW5nLiAqLworICAgIHAgPSBmaWxsX3BhZGRpbmcoU1RSSU5HTElCX1NUUihyZXN1bHQpLAorICAgICAgICAgICAgICAgICAgICAgbl9yZV90b3RhbCArIG5faW1fdG90YWwgKyAxICsgYWRkX3BhcmVucyAqIDIsCisgICAgICAgICAgICAgICAgICAgICBmb3JtYXQtPmZpbGxfY2hhcj09J1wwJyA/ICcgJyA6IGZvcm1hdC0+ZmlsbF9jaGFyLAorICAgICAgICAgICAgICAgICAgICAgbHBhZCwgcnBhZCk7CisKKyAgICBpZiAoYWRkX3BhcmVucykKKyAgICAgICAgKnArKyA9ICcoJzsKKworICAgIGlmICghc2tpcF9yZSkgeworICAgICAgICBmaWxsX251bWJlcihwLCAmcmVfc3BlYywgcF9yZSwgbl9yZV9kaWdpdHMsIE5VTEwsIDAsICZsb2NhbGUsIDApOworICAgICAgICBwICs9IG5fcmVfdG90YWw7CisgICAgfQorICAgIGZpbGxfbnVtYmVyKHAsICZpbV9zcGVjLCBwX2ltLCBuX2ltX2RpZ2l0cywgTlVMTCwgMCwgJmxvY2FsZSwgMCk7CisgICAgcCArPSBuX2ltX3RvdGFsOworICAgICpwKysgPSAnaic7CisKKyAgICBpZiAoYWRkX3BhcmVucykKKyAgICAgICAgKnArKyA9ICcpJzsKKworZG9uZToKKyAgICBQeU1lbV9GcmVlKHJlX2J1Zik7CisgICAgUHlNZW1fRnJlZShpbV9idWYpOworI2lmIFNUUklOR0xJQl9JU19VTklDT0RFCisgICAgUHlNZW1fRnJlZShyZV91bmljb2RlX3RtcCk7CisgICAgUHlNZW1fRnJlZShpbV91bmljb2RlX3RtcCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8qIEZPUk1BVF9DT01QTEVYICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKiogYnVpbHQgaW4gZm9ybWF0dGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIFB5T2JqZWN0ICoKQEAgLTg3MSw3ICsxMzAzLDcgQEAKIAogICAgIC8qIHBhcnNlIHRoZSBmb3JtYXRfc3BlYyAqLwogICAgIGlmICghcGFyc2VfaW50ZXJuYWxfcmVuZGVyX2Zvcm1hdF9zcGVjKGZvcm1hdF9zcGVjLCBmb3JtYXRfc3BlY19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCwgJ3MnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ybWF0LCAncycsICc8JykpCiAgICAgICAgIGdvdG8gZG9uZTsKIAogICAgIC8qIHR5cGUgY29udmVyc2lvbj8gKi8KQEAgLTkxMSw3ICsxMzQzLDcgQEAKICAgICAvKiBwYXJzZSB0aGUgZm9ybWF0X3NwZWMgKi8KICAgICBpZiAoIXBhcnNlX2ludGVybmFsX3JlbmRlcl9mb3JtYXRfc3BlYyhmb3JtYXRfc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlY19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCwgJ2QnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ybWF0LCAnZCcsICc+JykpCiAgICAgICAgIGdvdG8gZG9uZTsKIAogICAgIC8qIHR5cGUgY29udmVyc2lvbj8gKi8KQEAgLTEwMjIsMTYgKzE0NTQsMTIgQEAKICAgICAvKiBwYXJzZSB0aGUgZm9ybWF0X3NwZWMgKi8KICAgICBpZiAoIXBhcnNlX2ludGVybmFsX3JlbmRlcl9mb3JtYXRfc3BlYyhmb3JtYXRfc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlY19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCwgJ1wwJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCwgJ1wwJywgJz4nKSkKICAgICAgICAgZ290byBkb25lOwogCiAgICAgLyogdHlwZSBjb252ZXJzaW9uPyAqLwogICAgIHN3aXRjaCAoZm9ybWF0LnR5cGUpIHsKLSAgICBjYXNlICdcMCc6Ci0gICAgICAgIC8qICdaJyBtZWFucyBsaWtlICdnJywgYnV0IHdpdGggYXQgbGVhc3Qgb25lIGRlY2ltYWwuICBTZWUKLSAgICAgICAgICAgUHlPU19hc2NpaV9mb3JtYXRkICovCi0gICAgICAgIGZvcm1hdC50eXBlID0gJ1onOwotICAgICAgICAvKiBEZWxpYmVyYXRlIGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBjYXNlIHN0YXRlbWVudCAqLworICAgIGNhc2UgJ1wwJzogLyogTm8gZm9ybWF0IGNvZGU6IGxpa2UgJ2cnLCBidXQgd2l0aCBhdCBsZWFzdCBvbmUgZGVjaW1hbC4gKi8KICAgICBjYXNlICdlJzoKICAgICBjYXNlICdFJzoKICAgICBjYXNlICdmJzoKQEAgLTEwNTQsMyArMTQ4Miw1MCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYgLyogRk9STUFUX0ZMT0FUICovCisKKyNpZmRlZiBGT1JNQVRfQ09NUExFWAorUHlPYmplY3QgKgorRk9STUFUX0NPTVBMRVgoUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSICpmb3JtYXRfc3BlYywKKyAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZm9ybWF0X3NwZWNfbGVuKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIEludGVybmFsRm9ybWF0U3BlYyBmb3JtYXQ7CisKKyAgICAvKiBjaGVjayBmb3IgdGhlIHNwZWNpYWwgY2FzZSBvZiB6ZXJvIGxlbmd0aCBmb3JtYXQgc3BlYywgbWFrZQorICAgICAgIGl0IGVxdWl2YWxlbnQgdG8gc3RyKG9iaikgKi8KKyAgICBpZiAoZm9ybWF0X3NwZWNfbGVuID09IDApIHsKKyAgICAgICAgcmVzdWx0ID0gU1RSSU5HTElCX1RPU1RSKG9iaik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICAvKiBwYXJzZSB0aGUgZm9ybWF0X3NwZWMgKi8KKyAgICBpZiAoIXBhcnNlX2ludGVybmFsX3JlbmRlcl9mb3JtYXRfc3BlYyhmb3JtYXRfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCwgJ1wwJywgJz4nKSkKKyAgICAgICAgZ290byBkb25lOworCisgICAgLyogdHlwZSBjb252ZXJzaW9uPyAqLworICAgIHN3aXRjaCAoZm9ybWF0LnR5cGUpIHsKKyAgICBjYXNlICdcMCc6IC8qIE5vIGZvcm1hdCBjb2RlOiBsaWtlICdnJywgYnV0IHdpdGggYXQgbGVhc3Qgb25lIGRlY2ltYWwuICovCisgICAgY2FzZSAnZSc6CisgICAgY2FzZSAnRSc6CisgICAgY2FzZSAnZic6CisgICAgY2FzZSAnRic6CisgICAgY2FzZSAnZyc6CisgICAgY2FzZSAnRyc6CisgICAgY2FzZSAnbic6CisgICAgICAgIC8qIG5vIGNvbnZlcnNpb24sIGFscmVhZHkgYSBjb21wbGV4LiAgZG8gdGhlIGZvcm1hdHRpbmcgKi8KKyAgICAgICAgcmVzdWx0ID0gZm9ybWF0X2NvbXBsZXhfaW50ZXJuYWwob2JqLCAmZm9ybWF0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvKiB1bmtub3duICovCisgICAgICAgIHVua25vd25fcHJlc2VudGF0aW9uX3R5cGUoZm9ybWF0LnR5cGUsIG9iai0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKK2RvbmU6CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvKiBGT1JNQVRfQ09NUExFWCAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvbG9jYWxldXRpbC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvbG9jYWxldXRpbC5oCmluZGV4IDk3MzBjNjcuLmY1NDgxMzMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2xvY2FsZXV0aWwuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmgKQEAgLTUsMTI2ICs1LDIwOCBAQAogCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAKKyNkZWZpbmUgTUFYKHgsIHkpICgoeCkgPCAoeSkgPyAoeSkgOiAoeCkpCisjZGVmaW5lIE1JTih4LCB5KSAoKHgpIDwgKHkpID8gKHgpIDogKHkpKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqZ3JvdXBpbmc7CisgICAgY2hhciBwcmV2aW91czsKKyAgICBQeV9zc2l6ZV90IGk7IC8qIFdoZXJlIHdlJ3JlIGN1cnJlbnRseSBwb2ludGluZyBpbiBncm91cGluZy4gKi8KK30gR3JvdXBHZW5lcmF0b3I7CisKK3N0YXRpYyB2b2lkCitfR3JvdXBHZW5lcmF0b3JfaW5pdChHcm91cEdlbmVyYXRvciAqc2VsZiwgY29uc3QgY2hhciAqZ3JvdXBpbmcpCit7CisgICAgc2VsZi0+Z3JvdXBpbmcgPSBncm91cGluZzsKKyAgICBzZWxmLT5pID0gMDsKKyAgICBzZWxmLT5wcmV2aW91cyA9IDA7Cit9CisKKy8qIFJldHVybnMgdGhlIG5leHQgZ3JvdXBpbmcsIG9yIDAgdG8gc2lnbmlmeSBlbmQuICovCitzdGF0aWMgUHlfc3NpemVfdAorX0dyb3VwR2VuZXJhdG9yX25leHQoR3JvdXBHZW5lcmF0b3IgKnNlbGYpCit7CisgICAgLyogTm90ZSB0aGF0IHdlIGRvbid0IHJlYWxseSBkbyBtdWNoIGVycm9yIGNoZWNraW5nIGhlcmUuIElmIGEKKyAgICAgICBncm91cGluZyBzdHJpbmcgY29udGFpbnMganVzdCBDSEFSX01BWCwgZm9yIGV4YW1wbGUsIHRoZW4ganVzdAorICAgICAgIHRlcm1pbmF0ZSB0aGUgZ2VuZXJhdG9yLiBUaGF0IHNob3VsZG4ndCBoYXBwZW4sIGJ1dCBhdCBsZWFzdCB3ZQorICAgICAgIGZhaWwgZ3JhY2VmdWxseS4gKi8KKyAgICBzd2l0Y2ggKHNlbGYtPmdyb3VwaW5nW3NlbGYtPmldKSB7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gc2VsZi0+cHJldmlvdXM7CisgICAgY2FzZSBDSEFSX01BWDoKKyAgICAgICAgLyogU3RvcCB0aGUgZ2VuZXJhdG9yLiAqLworICAgICAgICByZXR1cm4gMDsKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGNoYXIgY2ggPSBzZWxmLT5ncm91cGluZ1tzZWxmLT5pXTsKKyAgICAgICAgc2VsZi0+cHJldmlvdXMgPSBjaDsKKyAgICAgICAgc2VsZi0+aSsrOworICAgICAgICByZXR1cm4gKFB5X3NzaXplX3QpY2g7CisgICAgfQorICAgIH0KK30KKworLyogRmlsbCBpbiBzb21lIGRpZ2l0cywgbGVhZGluZyB6ZXJvcywgYW5kIHRob3VzYW5kcyBzZXBhcmF0b3IuIEFsbAorICAgYXJlIG9wdGlvbmFsLCBkZXBlbmRpbmcgb24gd2hlbiB3ZSdyZSBjYWxsZWQuICovCitzdGF0aWMgdm9pZAorZmlsbChTVFJJTkdMSUJfQ0hBUiAqKmRpZ2l0c19lbmQsIFNUUklOR0xJQl9DSEFSICoqYnVmZmVyX2VuZCwKKyAgICAgUHlfc3NpemVfdCBuX2NoYXJzLCBQeV9zc2l6ZV90IG5femVyb3MsIGNvbnN0IGNoYXIqIHRob3VzYW5kc19zZXAsCisgICAgIFB5X3NzaXplX3QgdGhvdXNhbmRzX3NlcF9sZW4pCit7CisjaWYgU1RSSU5HTElCX0lTX1VOSUNPREUKKyAgICBQeV9zc2l6ZV90IGk7CisjZW5kaWYKKworICAgIGlmICh0aG91c2FuZHNfc2VwKSB7CisgICAgICAgICpidWZmZXJfZW5kIC09IHRob3VzYW5kc19zZXBfbGVuOworCisgICAgICAgIC8qIENvcHkgdGhlIHRob3VzYW5kc19zZXAgY2hhcnMgaW50byB0aGUgYnVmZmVyLiAqLworI2lmIFNUUklOR0xJQl9JU19VTklDT0RFCisgICAgICAgIC8qIENvbnZlcnQgZnJvbSB0aGUgY2hhcidzIG9mIHRoZSB0aG91c2FuZHNfc2VwIGZyb20KKyAgICAgICAgICAgdGhlIGxvY2FsZSBpbnRvIHVuaWNvZGUuICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aG91c2FuZHNfc2VwX2xlbjsgKytpKQorICAgICAgICAgICAgKCpidWZmZXJfZW5kKVtpXSA9IHRob3VzYW5kc19zZXBbaV07CisjZWxzZQorICAgICAgICAvKiBObyBjb252ZXJzaW9uLCBqdXN0IG1lbWNweSB0aGUgdGhvdXNhbmRzX3NlcC4gKi8KKyAgICAgICAgbWVtY3B5KCpidWZmZXJfZW5kLCB0aG91c2FuZHNfc2VwLCB0aG91c2FuZHNfc2VwX2xlbik7CisjZW5kaWYKKyAgICB9CisKKyAgICAqYnVmZmVyX2VuZCAtPSBuX2NoYXJzOworICAgICpkaWdpdHNfZW5kIC09IG5fY2hhcnM7CisgICAgbWVtY3B5KCpidWZmZXJfZW5kLCAqZGlnaXRzX2VuZCwgbl9jaGFycyAqIHNpemVvZihTVFJJTkdMSUJfQ0hBUikpOworCisgICAgKmJ1ZmZlcl9lbmQgLT0gbl96ZXJvczsKKyAgICBTVFJJTkdMSUJfRklMTCgqYnVmZmVyX2VuZCwgJzAnLCBuX3plcm9zKTsKK30KKwogLyoqCiAgKiBfUHlfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmc6CiAgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIGEgc3RyaW5nLgotICogQG5fYnVmZmVyOiBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKiBAbl9idWZmZXI6IE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIEBidWZmZXIuCisgKiBAZGlnaXRzOiBBIHBvaW50ZXIgdG8gdGhlIGRpZ2l0cyB3ZSdyZSByZWFkaW5nIGZyb20uIElmIGNvdW50CisgKiAgICAgICAgICBpcyBub24tTlVMTCwgdGhpcyBpcyB1bnVzZWQuCiAgKiBAbl9kaWdpdHM6IFRoZSBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBzdHJpbmcsIGluIHdoaWNoIHdlIHdhbnQKICAqICAgICAgICAgICAgdG8gcHV0IHRoZSBncm91cGluZyBjaGFycy4KLSAqIEBidWZfc2l6ZTogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgYnVmZmVyLgotICogQGNvdW50OiBJZiBub24tTlVMTCwgcG9pbnRzIHRvIGEgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlCi0gKiAgICAgICAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdlIG5lZWQgdG8gaW5zZXJ0IChhbmQgbm8gZm9ybWF0dGluZwotICogICAgICAgICB3aWxsIGFjdHVhbGx5IG9jY3VyKS4KLSAqIEBhcHBlbmRfemVyb19jaGFyOiBJZiBub24temVybywgcHV0IGEgdHJhaWxpbmcgemVybyBhdCB0aGUgZW5kIG9mCi0gKiAgICAgICAgIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nLCBpZiBhbmQgb25seSBpZiB3ZSBtb2RpZmllZCB0aGUKLSAqICAgICAgICAgc3RyaW5nLgorICogQG1pbl93aWR0aDogVGhlIG1pbmltdW0gd2lkdGggb2YgdGhlIGRpZ2l0cyBpbiB0aGUgb3V0cHV0IHN0cmluZy4KKyAqICAgICAgICAgICAgIE91dHB1dCB3aWxsIGJlIHplcm8tcGFkZGVkIG9uIHRoZSBsZWZ0IHRvIGZpbGwuCisgKiBAZ3JvdXBpbmc6IHNlZSBkZWZpbml0aW9uIGluIGxvY2FsZWNvbnYoKS4KKyAqIEB0aG91c2FuZHNfc2VwOiBzZWUgZGVmaW5pdGlvbiBpbiBsb2NhbGVjb252KCkuCiAgKgotICogSW5zZXJ0cyB0aG91c2FuZCBncm91cGluZyBjaGFyYWN0ZXJzIChhcyBkZWZpbmVkIGluIHRoZSBjdXJyZW50Ci0gKiAgbG9jYWxlKSBpbnRvIHRoZSBzdHJpbmcgYmV0d2VlbiBidWZmZXIgYW5kIGJ1ZmZlcituX2RpZ2l0cy4gIElmCi0gKiAgY291bnQgaXMgbm9uLU5VTEwsIGRvbid0IGRvIGFueSBmb3JtYXR0aW5nLCBqdXN0IGNvdW50IHRoZSBudW1iZXIKLSAqICBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydC4gIFRoaXMgaXMgdXNlZCBieSB0aGUgY2FsbGVyIHRvCi0gKiAgYXBwcm9wcmlhdGVseSByZXNpemUgdGhlIGJ1ZmZlciwgaWYgbmVlZGVkLiAgSWYgY291bnQgaXMgbm9uLU5VTEwsCi0gKiAgYnVmZmVyIGNhbiBiZSBOVUxMIChpdCBpcyBub3QgZGVyZWZlcmVuY2VkIGF0IGFsbCBpbiB0aGF0IGNhc2UpLgorICogVGhlcmUgYXJlIDIgbW9kZXM6IGNvdW50aW5nIGFuZCBmaWxsaW5nLiBJZiBAYnVmZmVyIGlzIE5VTEwsCisgKiAgd2UgYXJlIGluIGNvdW50aW5nIG1vZGUsIGVsc2UgZmlsbGluZyBtb2RlLgorICogSWYgY291bnRpbmcsIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZSBpcyByZXR1cm5lZC4KKyAqIElmIGZpbGxpbmcsIHdlIGtub3cgdGhlIGJ1ZmZlciB3aWxsIGJlIGxhcmdlIGVub3VnaCwgc28gd2UgZG9uJ3QKKyAqICBuZWVkIHRvIHBhc3MgaW4gdGhlIGJ1ZmZlciBzaXplLgorICogSW5zZXJ0cyB0aG91c2FuZCBncm91cGluZyBjaGFyYWN0ZXJzIChhcyBkZWZpbmVkIGJ5IGdyb3VwaW5nIGFuZAorICogIHRob3VzYW5kc19zZXApIGludG8gdGhlIHN0cmluZyBiZXR3ZWVuIGJ1ZmZlciBhbmQgYnVmZmVyK25fZGlnaXRzLgogICoKICAqIFJldHVybiB2YWx1ZTogMCBvbiBlcnJvciwgZWxzZSAxLiAgTm90ZSB0aGF0IG5vIGVycm9yIGNhbiBvY2N1ciBpZgogICogIGNvdW50IGlzIG5vbi1OVUxMLgogICoKICAqIFRoaXMgbmFtZSB3b24ndCBiZSB1c2VkLCB0aGUgaW5jbHVkZXIgb2YgdGhpcyBmaWxlIHNob3VsZCBkZWZpbmUKICAqICBpdCB0byBiZSB0aGUgYWN0dWFsIGZ1bmN0aW9uIG5hbWUsIGJhc2VkIG9uIHVuaWNvZGUgb3Igc3RyaW5nLgorICoKKyAqIEFzIGNsb3NlbHkgYXMgcG9zc2libGUsIHRoaXMgY29kZSBtaW1pY3MgdGhlIGxvZ2ljIGluIGRlY2ltYWwucHkncworICAgIF9pbnNlcnRfdGhvdXNhbmRzX3NlcCgpLgogICoqLwotaW50CitQeV9zc2l6ZV90CiBfUHlfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcoU1RSSU5HTElCX0NIQVIgKmJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5fYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSICpkaWdpdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGJ1Zl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcHBlbmRfemVyb19jaGFyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWluX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmdyb3VwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRob3VzYW5kc19zZXApCiB7Ci0gICAgc3RydWN0IGxjb252ICpsb2NhbGVfZGF0YSA9IGxvY2FsZWNvbnYoKTsKLSAgICBjb25zdCBjaGFyICpncm91cGluZyA9IGxvY2FsZV9kYXRhLT5ncm91cGluZzsKLSAgICBjb25zdCBjaGFyICp0aG91c2FuZHNfc2VwID0gbG9jYWxlX2RhdGEtPnRob3VzYW5kc19zZXA7CisgICAgUHlfc3NpemVfdCBjb3VudCA9IDA7CisgICAgUHlfc3NpemVfdCBuX3plcm9zOworICAgIGludCBsb29wX2Jyb2tlbiA9IDA7CisgICAgaW50IHVzZV9zZXBhcmF0b3IgPSAwOyAvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGRvbid0IGFwcGVuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvci4gVGhleSBvbmx5IGdvIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwcy4gKi8KKyAgICBTVFJJTkdMSUJfQ0hBUiAqYnVmZmVyX2VuZCA9IE5VTEw7CisgICAgU1RSSU5HTElCX0NIQVIgKmRpZ2l0c19lbmQgPSBOVUxMOworICAgIFB5X3NzaXplX3QgbDsKKyAgICBQeV9zc2l6ZV90IG5fY2hhcnM7CiAgICAgUHlfc3NpemVfdCB0aG91c2FuZHNfc2VwX2xlbiA9IHN0cmxlbih0aG91c2FuZHNfc2VwKTsKLSAgICBTVFJJTkdMSUJfQ0hBUiAqcGVuZCA9IE5VTEw7IC8qIGN1cnJlbnQgZW5kIG9mIGJ1ZmZlciAqLwotICAgIFNUUklOR0xJQl9DSEFSICpwbWF4ID0gTlVMTDsgLyogbWF4IG9mIGJ1ZmZlciAqLwotICAgIGNoYXIgY3VycmVudF9ncm91cGluZzsKICAgICBQeV9zc2l6ZV90IHJlbWFpbmluZyA9IG5fZGlnaXRzOyAvKiBOdW1iZXIgb2YgY2hhcnMgcmVtYWluaW5nIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgbG9va2VkIGF0ICovCisgICAgLyogQSBnZW5lcmF0b3IgdGhhdCByZXR1cm5zIGFsbCBvZiB0aGUgZ3JvdXBpbmcgd2lkdGhzLCB1bnRpbCBpdAorICAgICAgIHJldHVybnMgMC4gKi8KKyAgICBHcm91cEdlbmVyYXRvciBncm91cGdlbjsKKyAgICBfR3JvdXBHZW5lcmF0b3JfaW5pdCgmZ3JvdXBnZW4sIGdyb3VwaW5nKTsKIAotICAgIC8qIEluaXRpYWxpemUgdGhlIGNoYXJhY3RlciBjb3VudCwgaWYgd2UncmUganVzdCBjb3VudGluZy4gKi8KLSAgICBpZiAoY291bnQpCi0gICAgICAgICpjb3VudCA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIFdlJ3JlIG5vdCBqdXN0IGNvdW50aW5nLCB3ZSdyZSBtb2RpZnlpbmcgYnVmZmVyICovCi0gICAgICAgIHBlbmQgPSBidWZmZXIgKyBuX2J1ZmZlcjsKLSAgICAgICAgcG1heCA9IGJ1ZmZlciArIGJ1Zl9zaXplOworICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgYnVmZmVyX2VuZCA9IGJ1ZmZlciArIG5fYnVmZmVyOworICAgICAgICBkaWdpdHNfZW5kID0gZGlnaXRzICsgbl9kaWdpdHM7CiAgICAgfQogCi0gICAgLyogU3RhcnRpbmcgYXQgdGhlIGVuZCBhbmQgd29ya2luZyByaWdodC10by1sZWZ0LCBrZWVwIHRyYWNrIG9mCi0gICAgICAgd2hhdCBncm91cGluZyBuZWVkcyB0byBiZSBhZGRlZCBhbmQgaW5zZXJ0IHRoYXQuICovCi0gICAgY3VycmVudF9ncm91cGluZyA9ICpncm91cGluZysrOworICAgIHdoaWxlICgobCA9IF9Hcm91cEdlbmVyYXRvcl9uZXh0KCZncm91cGdlbikpID4gMCkgeworICAgICAgICBsID0gTUlOKGwsIE1BWChNQVgocmVtYWluaW5nLCBtaW5fd2lkdGgpLCAxKSk7CisgICAgICAgIG5femVyb3MgPSBNQVgoMCwgbCAtIHJlbWFpbmluZyk7CisgICAgICAgIG5fY2hhcnMgPSBNQVgoMCwgTUlOKHJlbWFpbmluZywgbCkpOwogCi0gICAgLyogSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyAwLCBwZXJmb3JtIG5vIGdyb3VwaW5nIGF0IGFsbC4gKi8KLSAgICBpZiAoY3VycmVudF9ncm91cGluZyA9PSAwKQotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgLyogVXNlIG5femVybyB6ZXJvJ3MgYW5kIG5fY2hhcnMgY2hhcnMgKi8KIAotICAgIHdoaWxlIChyZW1haW5pbmcgPiBjdXJyZW50X2dyb3VwaW5nKSB7Ci0gICAgICAgIC8qIEFsd2F5cyBsZWF2ZSBidWZmZXIgYW5kIHBlbmQgdmFsaWQgYXQgdGhlIGVuZCBvZiB0aGlzCi0gICAgICAgICAgIGxvb3AsIHNpbmNlIHdlIG1pZ2h0IGxlYXZlIHdpdGggYSByZXR1cm4gc3RhdGVtZW50LiAqLworICAgICAgICAvKiBDb3VudCBvbmx5LCBkb24ndCBkbyBhbnl0aGluZy4gKi8KKyAgICAgICAgY291bnQgKz0gKHVzZV9zZXBhcmF0b3IgPyB0aG91c2FuZHNfc2VwX2xlbiA6IDApICsgbl96ZXJvcyArIG5fY2hhcnM7CiAKLSAgICAgICAgcmVtYWluaW5nIC09IGN1cnJlbnRfZ3JvdXBpbmc7Ci0gICAgICAgIGlmIChjb3VudCkgewotICAgICAgICAgICAgLyogV2UncmUgb25seSBjb3VudGluZywgbm90IHRvdWNoaW5nIHRoZSBtZW1vcnkuICovCi0gICAgICAgICAgICAqY291bnQgKz0gdGhvdXNhbmRzX3NlcF9sZW47Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBEbyB0aGUgZm9ybWF0dGluZy4gKi8KLQotICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgKnBsYXN0ID0gYnVmZmVyICsgcmVtYWluaW5nOwotCi0gICAgICAgICAgICAvKiBJcyB0aGVyZSByb29tIHRvIGluc2VydCB0aG91c2FuZHNfc2VwX2xlbiBjaGFycz8gKi8KLSAgICAgICAgICAgIGlmIChwbWF4IC0gcGVuZCA8IHRob3VzYW5kc19zZXBfbGVuKQotICAgICAgICAgICAgICAgIC8qIE5vIHJvb20uICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIC8qIE1vdmUgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBkb3duLiAqLwotICAgICAgICAgICAgbWVtbW92ZShwbGFzdCArIHRob3VzYW5kc19zZXBfbGVuLAotICAgICAgICAgICAgICAgIHBsYXN0LAotICAgICAgICAgICAgICAgIChwZW5kIC0gcGxhc3QpICogc2l6ZW9mKFNUUklOR0xJQl9DSEFSKSk7Ci0gICAgICAgICAgICAvKiBDb3B5IHRoZSB0aG91c2FuZHNfc2VwIGNoYXJzIGludG8gdGhlIGJ1ZmZlci4gKi8KLSNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQotICAgICAgICAgICAgLyogQ29udmVydCBmcm9tIHRoZSBjaGFyJ3Mgb2YgdGhlIHRob3VzYW5kc19zZXAgZnJvbQotICAgICAgICAgICAgICAgdGhlIGxvY2FsZSBpbnRvIHVuaWNvZGUuICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aG91c2FuZHNfc2VwX2xlbjsgKytpKQotICAgICAgICAgICAgICAgICAgICBwbGFzdFtpXSA9IHRob3VzYW5kc19zZXBbaV07Ci0gICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgLyogTm8gY29udmVyc2lvbiwganVzdCBtZW1jcHkgdGhlIHRob3VzYW5kc19zZXAuICovCi0gICAgICAgICAgICBtZW1jcHkocGxhc3QsIHRob3VzYW5kc19zZXAsIHRob3VzYW5kc19zZXBfbGVuKTsKLSNlbmRpZgorICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAvKiBDb3B5IGludG8gdGhlIG91dHB1dCBidWZmZXIuICovCisgICAgICAgICAgICBmaWxsKCZkaWdpdHNfZW5kLCAmYnVmZmVyX2VuZCwgbl9jaGFycywgbl96ZXJvcywKKyAgICAgICAgICAgICAgICAgdXNlX3NlcGFyYXRvciA/IHRob3VzYW5kc19zZXAgOiBOVUxMLCB0aG91c2FuZHNfc2VwX2xlbik7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBBZGp1c3QgZW5kIHBvaW50ZXIuICovCi0gICAgICAgIHBlbmQgKz0gdGhvdXNhbmRzX3NlcF9sZW47CisgICAgICAgIC8qIFVzZSBhIHNlcGFyYXRvciBuZXh0IHRpbWUuICovCisgICAgICAgIHVzZV9zZXBhcmF0b3IgPSAxOwogCi0gICAgICAgIC8qIE1vdmUgdG8gdGhlIG5leHQgZ3JvdXBpbmcgY2hhcmFjdGVyLCB1bmxlc3Mgd2UncmUKLSAgICAgICAgICAgcmVwZWF0aW5nICh3aGljaCBpcyBkZXNpZ25hdGVkIGJ5IGEgZ3JvdXBpbmcgb2YgMCkuICovCi0gICAgICAgIGlmICgqZ3JvdXBpbmcgIT0gMCkgewotICAgICAgICAgICAgY3VycmVudF9ncm91cGluZyA9ICpncm91cGluZysrOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRfZ3JvdXBpbmcgPT0gQ0hBUl9NQVgpCi0gICAgICAgICAgICAgICAgLyogV2UncmUgZG9uZS4gKi8KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmVtYWluaW5nIC09IG5fY2hhcnM7CisgICAgICAgIG1pbl93aWR0aCAtPSBsOworCisgICAgICAgIGlmIChyZW1haW5pbmcgPD0gMCAmJiBtaW5fd2lkdGggPD0gMCkgeworICAgICAgICAgICAgbG9vcF9icm9rZW4gPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbWluX3dpZHRoIC09IHRob3VzYW5kc19zZXBfbGVuOworICAgIH0KKyAgICBpZiAoIWxvb3BfYnJva2VuKSB7CisgICAgICAgIC8qIFdlIGxlZnQgdGhlIGxvb3Agd2l0aG91dCB1c2luZyBhIGJyZWFrIHN0YXRlbWVudC4gKi8KKworICAgICAgICBsID0gTUFYKE1BWChyZW1haW5pbmcsIG1pbl93aWR0aCksIDEpOworICAgICAgICBuX3plcm9zID0gTUFYKDAsIGwgLSByZW1haW5pbmcpOworICAgICAgICBuX2NoYXJzID0gTUFYKDAsIE1JTihyZW1haW5pbmcsIGwpKTsKKworICAgICAgICAvKiBVc2Ugbl96ZXJvIHplcm8ncyBhbmQgbl9jaGFycyBjaGFycyAqLworICAgICAgICBjb3VudCArPSAodXNlX3NlcGFyYXRvciA/IHRob3VzYW5kc19zZXBfbGVuIDogMCkgKyBuX3plcm9zICsgbl9jaGFyczsKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgLyogQ29weSBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLiAqLworICAgICAgICAgICAgZmlsbCgmZGlnaXRzX2VuZCwgJmJ1ZmZlcl9lbmQsIG5fY2hhcnMsIG5femVyb3MsCisgICAgICAgICAgICAgICAgIHVzZV9zZXBhcmF0b3IgPyB0aG91c2FuZHNfc2VwIDogTlVMTCwgdGhvdXNhbmRzX3NlcF9sZW4pOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChhcHBlbmRfemVyb19jaGFyKSB7Ci0gICAgICAgIC8qIEFwcGVuZCBhIHplcm8gY2hhcmFjdGVyIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLAotICAgICAgICAgICBpZiB0aGVyZSdzIHJvb20uICovCi0gICAgICAgIGlmIChwZW5kIC0gKGJ1ZmZlciArIHJlbWFpbmluZykgPCAxKQotICAgICAgICAgICAgLyogTm8gcm9vbSwgZXJyb3IuICovCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgKnBlbmQgPSAwOwotICAgIH0KLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gY291bnQ7Cit9CisKKy8qKgorICogX1B5X0luc2VydFRob3VzYW5kc0dyb3VwaW5nTG9jYWxlOgorICogQGJ1ZmZlcjogQSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiBhIHN0cmluZy4KKyAqIEBuX2RpZ2l0czogVGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIHN0cmluZywgaW4gd2hpY2ggd2Ugd2FudAorICogICAgICAgICAgICB0byBwdXQgdGhlIGdyb3VwaW5nIGNoYXJzLgorICoKKyAqIFJlYWRzIHRoZWUgY3VycmVudCBsb2NhbGUgYW5kIGNhbGxzIF9QeV9JbnNlcnRUaG91c2FuZHNHcm91cGluZygpLgorICoqLworUHlfc3NpemVfdAorX1B5X0luc2VydFRob3VzYW5kc0dyb3VwaW5nTG9jYWxlKFNUUklOR0xJQl9DSEFSICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtaW5fd2lkdGgpCit7CisgICAgICAgIHN0cnVjdCBsY29udiAqbG9jYWxlX2RhdGEgPSBsb2NhbGVjb252KCk7CisgICAgICAgIGNvbnN0IGNoYXIgKmdyb3VwaW5nID0gbG9jYWxlX2RhdGEtPmdyb3VwaW5nOworICAgICAgICBjb25zdCBjaGFyICp0aG91c2FuZHNfc2VwID0gbG9jYWxlX2RhdGEtPnRob3VzYW5kc19zZXA7CisKKyAgICAgICAgcmV0dXJuIF9QeV9JbnNlcnRUaG91c2FuZHNHcm91cGluZyhidWZmZXIsIG5fYnVmZmVyLCBkaWdpdHMsIG5fZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl93aWR0aCwgZ3JvdXBpbmcsIHRob3VzYW5kc19zZXApOwogfQogI2VuZGlmIC8qIFNUUklOR0xJQl9MT0NBTEVVVElMX0ggKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKaW5kZXggMjBjNzUwNy4uMDE3MGJkZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKQEAgLTgsMTAgKzgsMTAgQEAKICNlbmRpZgogCiBQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QqKQotc3RyaW5nbGliX3BhcnRpdGlvbigKLSAgICBQeU9iamVjdCogc3RyX29iaiwgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAotICAgIFB5T2JqZWN0KiBzZXBfb2JqLCBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc2VwLCBQeV9zc2l6ZV90IHNlcF9sZW4KLSAgICApCitzdHJpbmdsaWJfcGFydGl0aW9uKFB5T2JqZWN0KiBzdHJfb2JqLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBzZXBfb2JqLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc2VwLCBQeV9zc2l6ZV90IHNlcF9sZW4pCiB7CiAgICAgUHlPYmplY3QqIG91dDsKICAgICBQeV9zc2l6ZV90IHBvczsKQEAgLTI1LDE1ICsyNSwyMSBAQAogICAgIGlmICghb3V0KQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHBvcyA9IGZhc3RzZWFyY2goc3RyLCBzdHJfbGVuLCBzZXAsIHNlcF9sZW4sIEZBU1RfU0VBUkNIKTsKKyAgICBwb3MgPSBmYXN0c2VhcmNoKHN0ciwgc3RyX2xlbiwgc2VwLCBzZXBfbGVuLCAtMSwgRkFTVF9TRUFSQ0gpOwogCiAgICAgaWYgKHBvcyA8IDApIHsKKyNpZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgU1RSSU5HTElCX05FVyhzdHIsIHN0cl9sZW4pKTsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDEsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CisjZWxzZQogICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBzdHJfb2JqKTsKICAgICAgICAgUHlfSU5DUkVGKFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCAoUHlPYmplY3QqKSBTVFJJTkdMSUJfRU1QVFkpOwogICAgICAgICBQeV9JTkNSRUYoU1RSSU5HTElCX0VNUFRZKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIChQeU9iamVjdCopIFNUUklOR0xJQl9FTVBUWSk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIG91dDsKICAgICB9CiAKQEAgLTUyLDEzICs1OCwxMyBAQAogfQogCiBQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QqKQotc3RyaW5nbGliX3JwYXJ0aXRpb24oCi0gICAgUHlPYmplY3QqIHN0cl9vYmosIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKLSAgICBQeU9iamVjdCogc2VwX29iaiwgY29uc3QgU1RSSU5HTElCX0NIQVIqIHNlcCwgUHlfc3NpemVfdCBzZXBfbGVuCi0gICAgKQorc3RyaW5nbGliX3JwYXJ0aXRpb24oUHlPYmplY3QqIHN0cl9vYmosCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogc2VwX29iaiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzZXAsIFB5X3NzaXplX3Qgc2VwX2xlbikKIHsKICAgICBQeU9iamVjdCogb3V0OwotICAgIFB5X3NzaXplX3QgcG9zLCBqOworICAgIFB5X3NzaXplX3QgcG9zOwogCiAgICAgaWYgKHNlcF9sZW4gPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtcHR5IHNlcGFyYXRvciIpOwpAQCAtNjksMjEgKzc1LDIxIEBACiAgICAgaWYgKCFvdXQpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogWFhYIC0gY3JlYXRlIHJldmVyc2VmYXN0c2VhcmNoIGhlbHBlciEgKi8KLSAgICAgICAgcG9zID0gLTE7Ci0gICAgICAgIGZvciAoaiA9IHN0cl9sZW4gLSBzZXBfbGVuOyBqID49IDA7IC0taikKLSAgICAgICAgICAgIGlmIChTVFJJTkdMSUJfQ01QKHN0citqLCBzZXAsIHNlcF9sZW4pID09IDApIHsKLSAgICAgICAgICAgICAgICBwb3MgPSBqOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgIHBvcyA9IGZhc3RzZWFyY2goc3RyLCBzdHJfbGVuLCBzZXAsIHNlcF9sZW4sIC0xLCBGQVNUX1JTRUFSQ0gpOwogCiAgICAgaWYgKHBvcyA8IDApIHsKKyNpZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIFNUUklOR0xJQl9ORVcoc3RyLCBzdHJfbGVuKSk7CisjZWxzZQogICAgICAgICBQeV9JTkNSRUYoU1RSSU5HTElCX0VNUFRZKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIChQeU9iamVjdCopIFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5X0lOQ1JFRihTVFJJTkdMSUJfRU1QVFkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMSwgKFB5T2JqZWN0KikgU1RSSU5HTElCX0VNUFRZKTsKICAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgKFB5T2JqZWN0Kikgc3RyX29iaik7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIG91dDsKICAgICB9CiAKQEAgLTEwMiwxMCArMTA4LDMgQEAKIH0KIAogI2VuZGlmCi0KLS8qCi1Mb2NhbCB2YXJpYWJsZXM6Ci1jLWJhc2ljLW9mZnNldDogNAotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0qLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBiL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlNzc2NwotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmgKQEAgLTAsMCArMSwzOTQgQEAKKy8qIHN0cmluZ2xpYjogc3BsaXQgaW1wbGVtZW50YXRpb24gKi8KKworI2lmbmRlZiBTVFJJTkdMSUJfU1BMSVRfSAorI2RlZmluZSBTVFJJTkdMSUJfU1BMSVRfSAorCisjaWZuZGVmIFNUUklOR0xJQl9GQVNUU0VBUkNIX0gKKyNlcnJvciBtdXN0IGluY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBtb2R1bGUKKyNlbmRpZgorCisvKiBPdmVyYWxsb2NhdGUgdGhlIGluaXRpYWwgbGlzdCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiByZWFsbG9jcyBmb3Igc21hbGwKKyAgIHNwbGl0IHNpemVzLiAgRWcsICJBIEEgQSBBIEEgQSBBIEEgQSBBIi5zcGxpdCgpICgxMCBlbGVtZW50cykgaGFzIHRocmVlCisgICByZXNpemVzLCB0byBzaXplcyA0LCA4LCB0aGVuIDE2LiAgTW9zdCBvYnNlcnZlZCBzdHJpbmcgc3BsaXRzIGFyZSBmb3IgaHVtYW4KKyAgIHRleHQgKHJvdWdobHkgMTEgd29yZHMgcGVyIGxpbmUpIGFuZCBmaWVsZCBkZWxpbWl0ZWQgZGF0YSAodXN1YWxseSAxLTEwCisgICBmaWVsZHMpLiAgRm9yIGxhcmdlIHN0cmluZ3MgdGhlIHNwbGl0IGFsZ29yaXRobXMgYXJlIGJhbmR3aWR0aCBsaW1pdGVkCisgICBzbyBpbmNyZWFzaW5nIHRoZSBwcmVhbGxvY2F0aW9uIGxpa2VseSB3aWxsIG5vdCBpbXByb3ZlIHRoaW5ncy4qLworCisjZGVmaW5lIE1BWF9QUkVBTExPQyAxMgorCisvKiA1IHNwbGl0cyBnaXZlcyA2IGVsZW1lbnRzICovCisjZGVmaW5lIFBSRUFMTE9DX1NJWkUobWF4c3BsaXQpIFwKKyAgICAobWF4c3BsaXQgPj0gTUFYX1BSRUFMTE9DID8gTUFYX1BSRUFMTE9DIDogbWF4c3BsaXQrMSkKKworI2RlZmluZSBTUExJVF9BUFBFTkQoZGF0YSwgbGVmdCwgcmlnaHQpICAgICAgICAgXAorICAgIHN1YiA9IFNUUklOR0xJQl9ORVcoKGRhdGEpICsgKGxlZnQpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0KSAtIChsZWZ0KSk7ICAgICAgXAorICAgIGlmIChzdWIgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHN1YikpIHsgICAgICAgICAgICAgXAorICAgICAgICBQeV9ERUNSRUYoc3ViKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9ERUNSRUYoc3ViKTsKKworI2RlZmluZSBTUExJVF9BREQoZGF0YSwgbGVmdCwgcmlnaHQpIHsgICAgICAgICAgXAorICAgIHN1YiA9IFNUUklOR0xJQl9ORVcoKGRhdGEpICsgKGxlZnQpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0KSAtIChsZWZ0KSk7ICAgICAgXAorICAgIGlmIChzdWIgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChjb3VudCA8IE1BWF9QUkVBTExPQykgeyAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgY291bnQsIHN1Yik7ICAgICAgXAorICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdWIpKSB7ICAgICAgICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvdW50Kys7IH0KKworCisvKiBBbHdheXMgZm9yY2UgdGhlIGxpc3QgdG8gdGhlIGV4cGVjdGVkIHNpemUuICovCisjZGVmaW5lIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpIFB5X1NJWkUobGlzdCkgPSBjb3VudAorCitQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKK3N0cmluZ2xpYl9zcGxpdF93aGl0ZXNwYWNlKFB5T2JqZWN0KiBzdHJfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKKyAgICBQeU9iamVjdCAqc3ViOworCisgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpID0gaiA9IDA7CisgICAgd2hpbGUgKG1heGNvdW50LS0gPiAwKSB7CisgICAgICAgIHdoaWxlIChpIDwgc3RyX2xlbiAmJiBTVFJJTkdMSUJfSVNTUEFDRShzdHJbaV0pKQorICAgICAgICAgICAgaSsrOworICAgICAgICBpZiAoaSA9PSBzdHJfbGVuKSBicmVhazsKKyAgICAgICAgaiA9IGk7IGkrKzsKKyAgICAgICAgd2hpbGUgKGkgPCBzdHJfbGVuICYmICFTVFJJTkdMSUJfSVNTUEFDRShzdHJbaV0pKQorICAgICAgICAgICAgaSsrOworI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgICAgICBpZiAoaiA9PSAwICYmIGkgPT0gc3RyX2xlbiAmJiBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1Qoc3RyX29iaikpIHsKKyAgICAgICAgICAgIC8qIE5vIHdoaXRlc3BhY2UgaW4gc3RyX29iaiwgc28ganVzdCB1c2UgaXQgYXMgbGlzdFswXSAqLworICAgICAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOworICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXN0cl9vYmopOworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgU1BMSVRfQUREKHN0ciwgaiwgaSk7CisgICAgfQorCisgICAgaWYgKGkgPCBzdHJfbGVuKSB7CisgICAgICAgIC8qIE9ubHkgb2NjdXJzIHdoZW4gbWF4Y291bnQgd2FzIHJlYWNoZWQgKi8KKyAgICAgICAgLyogU2tpcCBhbnkgcmVtYWluaW5nIHdoaXRlc3BhY2UgYW5kIGNvcHkgdG8gZW5kIG9mIHN0cmluZyAqLworICAgICAgICB3aGlsZSAoaSA8IHN0cl9sZW4gJiYgU1RSSU5HTElCX0lTU1BBQ0Uoc3RyW2ldKSkKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgaWYgKGkgIT0gc3RyX2xlbikKKyAgICAgICAgICAgIFNQTElUX0FERChzdHIsIGksIHN0cl9sZW4pOworICAgIH0KKyAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKKyAgICByZXR1cm4gbGlzdDsKKworICBvbkVycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCitzdHJpbmdsaWJfc3BsaXRfY2hhcihQeU9iamVjdCogc3RyX29iaiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSIGNoLAorICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKKyAgICBQeU9iamVjdCAqc3ViOworCisgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpID0gaiA9IDA7CisgICAgd2hpbGUgKChqIDwgc3RyX2xlbikgJiYgKG1heGNvdW50LS0gPiAwKSkgeworICAgICAgICBmb3IoOyBqIDwgc3RyX2xlbjsgaisrKSB7CisgICAgICAgICAgICAvKiBJIGZvdW5kIHRoYXQgdXNpbmcgbWVtY2hyIG1ha2VzIG5vIGRpZmZlcmVuY2UgKi8KKyAgICAgICAgICAgIGlmIChzdHJbal0gPT0gY2gpIHsKKyAgICAgICAgICAgICAgICBTUExJVF9BREQoc3RyLCBpLCBqKTsKKyAgICAgICAgICAgICAgICBpID0gaiA9IGogKyAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgIGlmIChjb3VudCA9PSAwICYmIFNUUklOR0xJQl9DSEVDS19FWEFDVChzdHJfb2JqKSkgeworICAgICAgICAvKiBjaCBub3QgaW4gc3RyX29iaiwgc28ganVzdCB1c2Ugc3RyX29iaiBhcyBsaXN0WzBdICovCisgICAgICAgIFB5X0lOQ1JFRihzdHJfb2JqKTsKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXN0cl9vYmopOworICAgICAgICBjb3VudCsrOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgaWYgKGkgPD0gc3RyX2xlbikgeworICAgICAgICBTUExJVF9BREQoc3RyLCBpLCBzdHJfbGVuKTsKKyAgICB9CisgICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7CisgICAgcmV0dXJuIGxpc3Q7CisKKyAgb25FcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorc3RyaW5nbGliX3NwbGl0KFB5T2JqZWN0KiBzdHJfb2JqLAorICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKKyAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc2VwLCBQeV9zc2l6ZV90IHNlcF9sZW4sCisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBQeV9zc2l6ZV90IGksIGosIHBvcywgY291bnQ9MDsKKyAgICBQeU9iamVjdCAqbGlzdCwgKnN1YjsKKworICAgIGlmIChzZXBfbGVuID09IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbXB0eSBzZXBhcmF0b3IiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKHNlcF9sZW4gPT0gMSkKKyAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdF9jaGFyKHN0cl9vYmosIHN0ciwgc3RyX2xlbiwgc2VwWzBdLCBtYXhjb3VudCk7CisKKyAgICBsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7CisgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpID0gaiA9IDA7CisgICAgd2hpbGUgKG1heGNvdW50LS0gPiAwKSB7CisgICAgICAgIHBvcyA9IGZhc3RzZWFyY2goc3RyK2ksIHN0cl9sZW4taSwgc2VwLCBzZXBfbGVuLCAtMSwgRkFTVF9TRUFSQ0gpOworICAgICAgICBpZiAocG9zIDwgMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBqID0gaSArIHBvczsKKyAgICAgICAgU1BMSVRfQUREKHN0ciwgaSwgaik7CisgICAgICAgIGkgPSBqICsgc2VwX2xlbjsKKyAgICB9CisjaWZuZGVmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgaWYgKGNvdW50ID09IDAgJiYgU1RSSU5HTElCX0NIRUNLX0VYQUNUKHN0cl9vYmopKSB7CisgICAgICAgIC8qIE5vIG1hdGNoIGluIHN0cl9vYmosIHNvIGp1c3QgdXNlIGl0IGFzIGxpc3RbMF0gKi8KKyAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOworICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc3RyX29iaik7CisgICAgICAgIGNvdW50Kys7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIFNQTElUX0FERChzdHIsIGksIHN0cl9sZW4pOworICAgIH0KKyAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKKyAgICByZXR1cm4gbGlzdDsKKworICBvbkVycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCitzdHJpbmdsaWJfcnNwbGl0X3doaXRlc3BhY2UoUHlPYmplY3QqIHN0cl9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgUHlfc3NpemVfdCBpLCBqLCBjb3VudD0wOworICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7CisgICAgUHlPYmplY3QgKnN1YjsKKworICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaSA9IGogPSBzdHJfbGVuIC0gMTsKKyAgICB3aGlsZSAobWF4Y291bnQtLSA+IDApIHsKKyAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBTVFJJTkdMSUJfSVNTUEFDRShzdHJbaV0pKQorICAgICAgICAgICAgaS0tOworICAgICAgICBpZiAoaSA8IDApIGJyZWFrOworICAgICAgICBqID0gaTsgaS0tOworICAgICAgICB3aGlsZSAoaSA+PSAwICYmICFTVFJJTkdMSUJfSVNTUEFDRShzdHJbaV0pKQorICAgICAgICAgICAgaS0tOworI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgICAgICBpZiAoaiA9PSBzdHJfbGVuIC0gMSAmJiBpIDwgMCAmJiBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1Qoc3RyX29iaikpIHsKKyAgICAgICAgICAgIC8qIE5vIHdoaXRlc3BhY2UgaW4gc3RyX29iaiwgc28ganVzdCB1c2UgaXQgYXMgbGlzdFswXSAqLworICAgICAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOworICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXN0cl9vYmopOworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgU1BMSVRfQUREKHN0ciwgaSArIDEsIGogKyAxKTsKKyAgICB9CisKKyAgICBpZiAoaSA+PSAwKSB7CisgICAgICAgIC8qIE9ubHkgb2NjdXJzIHdoZW4gbWF4Y291bnQgd2FzIHJlYWNoZWQgKi8KKyAgICAgICAgLyogU2tpcCBhbnkgcmVtYWluaW5nIHdoaXRlc3BhY2UgYW5kIGNvcHkgdG8gYmVnaW5uaW5nIG9mIHN0cmluZyAqLworICAgICAgICB3aGlsZSAoaSA+PSAwICYmIFNUUklOR0xJQl9JU1NQQUNFKHN0cltpXSkpCisgICAgICAgICAgICBpLS07CisgICAgICAgIGlmIChpID49IDApCisgICAgICAgICAgICBTUExJVF9BREQoc3RyLCAwLCBpICsgMSk7CisgICAgfQorICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOworICAgIGlmIChQeUxpc3RfUmV2ZXJzZShsaXN0KSA8IDApCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICByZXR1cm4gbGlzdDsKKworICBvbkVycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCitzdHJpbmdsaWJfcnNwbGl0X2NoYXIoUHlPYmplY3QqIHN0cl9vYmosCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSIGNoLAorICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgUHlfc3NpemVfdCBpLCBqLCBjb3VudD0wOworICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7CisgICAgUHlPYmplY3QgKnN1YjsKKworICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaSA9IGogPSBzdHJfbGVuIC0gMTsKKyAgICB3aGlsZSAoKGkgPj0gMCkgJiYgKG1heGNvdW50LS0gPiAwKSkgeworICAgICAgICBmb3IoOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKHN0cltpXSA9PSBjaCkgeworICAgICAgICAgICAgICAgIFNQTElUX0FERChzdHIsIGkgKyAxLCBqICsgMSk7CisgICAgICAgICAgICAgICAgaiA9IGkgPSBpIC0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNpZm5kZWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICBpZiAoY291bnQgPT0gMCAmJiBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1Qoc3RyX29iaikpIHsKKyAgICAgICAgLyogY2ggbm90IGluIHN0cl9vYmosIHNvIGp1c3QgdXNlIHN0cl9vYmogYXMgbGlzdFswXSAqLworICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAwLCAoUHlPYmplY3QgKilzdHJfb2JqKTsKKyAgICAgICAgY291bnQrKzsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIGlmIChqID49IC0xKSB7CisgICAgICAgIFNQTElUX0FERChzdHIsIDAsIGogKyAxKTsKKyAgICB9CisgICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7CisgICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIHJldHVybiBsaXN0OworCisgIG9uRXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCitQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKK3N0cmluZ2xpYl9yc3BsaXQoUHlPYmplY3QqIHN0cl9vYmosCisgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKKyAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHNlcCwgUHlfc3NpemVfdCBzZXBfbGVuLAorICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgIFB5X3NzaXplX3QgaiwgcG9zLCBjb3VudD0wOworICAgIFB5T2JqZWN0ICpsaXN0LCAqc3ViOworCisgICAgaWYgKHNlcF9sZW4gPT0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtcHR5IHNlcGFyYXRvciIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc2VwX2xlbiA9PSAxKQorICAgICAgICByZXR1cm4gc3RyaW5nbGliX3JzcGxpdF9jaGFyKHN0cl9vYmosIHN0ciwgc3RyX2xlbiwgc2VwWzBdLCBtYXhjb3VudCk7CisKKyAgICBsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7CisgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBqID0gc3RyX2xlbjsKKyAgICB3aGlsZSAobWF4Y291bnQtLSA+IDApIHsKKyAgICAgICAgcG9zID0gZmFzdHNlYXJjaChzdHIsIGosIHNlcCwgc2VwX2xlbiwgLTEsIEZBU1RfUlNFQVJDSCk7CisgICAgICAgIGlmIChwb3MgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFNQTElUX0FERChzdHIsIHBvcyArIHNlcF9sZW4sIGopOworICAgICAgICBqID0gcG9zOworICAgIH0KKyNpZm5kZWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICBpZiAoY291bnQgPT0gMCAmJiBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1Qoc3RyX29iaikpIHsKKyAgICAgICAgLyogTm8gbWF0Y2ggaW4gc3RyX29iaiwgc28ganVzdCB1c2UgaXQgYXMgbGlzdFswXSAqLworICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAwLCAoUHlPYmplY3QgKilzdHJfb2JqKTsKKyAgICAgICAgY291bnQrKzsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgU1BMSVRfQUREKHN0ciwgMCwgaik7CisgICAgfQorICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOworICAgIGlmIChQeUxpc3RfUmV2ZXJzZShsaXN0KSA8IDApCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICByZXR1cm4gbGlzdDsKKworICBvbkVycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCitzdHJpbmdsaWJfc3BsaXRsaW5lcyhQeU9iamVjdCogc3RyX29iaiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGludCBrZWVwZW5kcykKK3sKKyAgICAvKiBUaGlzIGRvZXMgbm90IHVzZSB0aGUgcHJlYWxsb2NhdGVkIGxpc3QgYmVjYXVzZSBzcGxpdGxpbmVzIGlzCisgICAgICAgdXN1YWxseSBydW4gd2l0aCBodW5kcmVkcyBvZiBuZXdsaW5lcy4gIFRoZSBvdmVyaGVhZCBvZgorICAgICAgIHN3aXRjaGluZyBiZXR3ZWVuIFB5TGlzdF9TRVRfSVRFTSBhbmQgYXBwZW5kIGNhdXNlcyBhYm91dCBhCisgICAgICAgMi0zJSBzbG93ZG93biBmb3IgdGhhdCBjb21tb24gY2FzZS4gIEEgc21hcnRlciBpbXBsZW1lbnRhdGlvbgorICAgICAgIGNvdWxkIG1vdmUgdGhlIGlmIGNoZWNrIG91dCwgc28gdGhlIFNFVF9JVEVNcyBhcmUgZG9uZSBmaXJzdAorICAgICAgIGFuZCB0aGUgYXBwZW5kcyBvbmx5IGRvbmUgd2hlbiB0aGUgcHJlYWxsb2MgYnVmZmVyIGlzIGZ1bGwuCisgICAgICAgVGhhdCdzIHRvbyBtdWNoIHdvcmsgZm9yIGxpdHRsZSBnYWluLiovCisKKyAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CisgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOworICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldygwKTsKKyAgICBQeU9iamVjdCAqc3ViOworCisgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGkgPSBqID0gMDsgaSA8IHN0cl9sZW47ICkgeworICAgICAgICBQeV9zc2l6ZV90IGVvbDsKKworICAgICAgICAvKiBGaW5kIGEgbGluZSBhbmQgYXBwZW5kIGl0ICovCisgICAgICAgIHdoaWxlIChpIDwgc3RyX2xlbiAmJiAhU1RSSU5HTElCX0lTTElORUJSRUFLKHN0cltpXSkpCisgICAgICAgICAgICBpKys7CisKKyAgICAgICAgLyogU2tpcCB0aGUgbGluZSBicmVhayByZWFkaW5nIENSTEYgYXMgb25lIGxpbmUgYnJlYWsgKi8KKyAgICAgICAgZW9sID0gaTsKKyAgICAgICAgaWYgKGkgPCBzdHJfbGVuKSB7CisgICAgICAgICAgICBpZiAoc3RyW2ldID09ICdccicgJiYgaSArIDEgPCBzdHJfbGVuICYmIHN0cltpKzFdID09ICdcbicpCisgICAgICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIGlmIChrZWVwZW5kcykKKyAgICAgICAgICAgICAgICBlb2wgPSBpOworICAgICAgICB9CisjaWZuZGVmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgICAgIGlmIChqID09IDAgJiYgZW9sID09IHN0cl9sZW4gJiYgU1RSSU5HTElCX0NIRUNLX0VYQUNUKHN0cl9vYmopKSB7CisgICAgICAgICAgICAvKiBObyBsaW5lYnJlYWsgaW4gc3RyX29iaiwgc28ganVzdCB1c2UgaXQgYXMgbGlzdFswXSAqLworICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgc3RyX29iaikpCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBTUExJVF9BUFBFTkQoc3RyLCBqLCBlb2wpOworICAgICAgICBqID0gaTsKKyAgICB9CisgICAgcmV0dXJuIGxpc3Q7CisKKyAgb25FcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nX2Zvcm1hdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nX2Zvcm1hdC5oCmluZGV4IDcwNDM4NjYuLmU3YmY3MjQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ19mb3JtYXQuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdfZm9ybWF0LmgKQEAgLTMxLDEwICszMSwyMyBAQAogfSBTdWJTdHJpbmc7CiAKIAordHlwZWRlZiBlbnVtIHsKKyAgICBBTlNfSU5JVCwKKyAgICBBTlNfQVVUTywKKyAgICBBTlNfTUFOVUFMCit9IEF1dG9OdW1iZXJTdGF0ZTsgICAvKiBLZWVwIHRyYWNrIGlmIHdlJ3JlIGF1dG8tbnVtYmVyaW5nIGZpZWxkcyAqLworCisvKiBLZWVwcyB0cmFjayBvZiBvdXIgYXV0by1udW1iZXJpbmcgc3RhdGUsIGFuZCB3aGljaCBudW1iZXIgZmllbGQgd2UncmUgb24gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBBdXRvTnVtYmVyU3RhdGUgYW5fc3RhdGU7CisgICAgaW50IGFuX2ZpZWxkX251bWJlcjsKK30gQXV0b051bWJlcjsKKworCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIGZvciByZWN1cnNpb24gKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsZF9zdHJpbmcoU3ViU3RyaW5nICppbnB1dCwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MsCi0gICAgICAgICAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aCk7CisgICAgICAgICAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aCwgQXV0b051bWJlciAqYXV0b19udW1iZXIpOwogCiAKIApAQCAtNDIsNiArNTUsMTMgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiAgVXRpbGl0eSAgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZAorQXV0b051bWJlcl9Jbml0KEF1dG9OdW1iZXIgKmF1dG9fbnVtYmVyKQoreworICAgIGF1dG9fbnVtYmVyLT5hbl9zdGF0ZSA9IEFOU19JTklUOworICAgIGF1dG9fbnVtYmVyLT5hbl9maWVsZF9udW1iZXIgPSAwOworfQorCiAvKiBmaWxsIGluIGEgU3ViU3RyaW5nIGZyb20gYSBwb2ludGVyIGFuZCBsZW5ndGggKi8KIFB5X0xPQ0FMX0lOTElORSh2b2lkKQogU3ViU3RyaW5nX2luaXQoU3ViU3RyaW5nICpzdHIsIFNUUklOR0xJQl9DSEFSICpwLCBQeV9zc2l6ZV90IGxlbikKQEAgLTc0LDYgKzk0LDMyIEBACiAgICAgcmV0dXJuIFNUUklOR0xJQl9ORVcoc3RyLT5wdHIsIHN0ci0+ZW5kIC0gc3RyLT5wdHIpOwogfQogCisvKiBSZXR1cm4gMSBpZiBhbiBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZCBzd2l0Y2hpbmcgYmV0d2VlbiBhdXRvbWF0aWMKKyAgIGZpZWxkIG51bWJlcmluZyBhbmQgbWFudWFsIGZpZWxkIHNwZWNpZmljYXRpb24sIGVsc2UgcmV0dXJuIDAuIFNldAorICAgVmFsdWVFcnJvciBvbiBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK2F1dG9udW1iZXJfc3RhdGVfZXJyb3IoQXV0b051bWJlclN0YXRlIHN0YXRlLCBpbnQgZmllbGRfbmFtZV9pc19lbXB0eSkKK3sKKyAgICBpZiAoc3RhdGUgPT0gQU5TX01BTlVBTCkgeworICAgICAgICBpZiAoZmllbGRfbmFtZV9pc19lbXB0eSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjYW5ub3Qgc3dpdGNoIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYW51YWwgZmllbGQgc3BlY2lmaWNhdGlvbiB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9tYXRpYyBmaWVsZCBudW1iZXJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoIWZpZWxkX25hbWVfaXNfZW1wdHkpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY2Fubm90IHN3aXRjaCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXV0b21hdGljIGZpZWxkIG51bWJlcmluZyB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hbnVhbCBmaWVsZCBzcGVjaWZpY2F0aW9uIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqICAgIE91dHB1dCBzdHJpbmcgbWFuYWdlbWVudCBmdW5jdGlvbnMgICAgICAgKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNTUsMTEgKzQwMSwxNCBAQAogKi8KIHN0YXRpYyBpbnQKIGZpZWxkX25hbWVfc3BsaXQoU1RSSU5HTElCX0NIQVIgKnB0ciwgUHlfc3NpemVfdCBsZW4sIFN1YlN0cmluZyAqZmlyc3QsCi0gICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmZpcnN0X2lkeCwgRmllbGROYW1lSXRlcmF0b3IgKnJlc3QpCisgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmZpcnN0X2lkeCwgRmllbGROYW1lSXRlcmF0b3IgKnJlc3QsCisgICAgICAgICAgICAgICAgIEF1dG9OdW1iZXIgKmF1dG9fbnVtYmVyKQogewogICAgIFNUUklOR0xJQl9DSEFSIGM7CiAgICAgU1RSSU5HTElCX0NIQVIgKnAgPSBwdHI7CiAgICAgU1RSSU5HTElCX0NIQVIgKmVuZCA9IHB0ciArIGxlbjsKKyAgICBpbnQgZmllbGRfbmFtZV9pc19lbXB0eTsKKyAgICBpbnQgdXNpbmdfbnVtZXJpY19pbmRleDsKIAogICAgIC8qIGZpbmQgdGhlIHBhcnQgdXAgdW50aWwgdGhlIGZpcnN0ICcuJyBvciAnWycgKi8KICAgICB3aGlsZSAocCA8IGVuZCkgewpAQCAtMzg1LDE1ICs0MzQsNDEgQEAKICAgICBpZiAoKmZpcnN0X2lkeCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8qIHplcm8gbGVuZ3RoIHN0cmluZyBpcyBhbiBlcnJvciAqLwotICAgIGlmIChmaXJzdC0+cHRyID49IGZpcnN0LT5lbmQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbXB0eSBmaWVsZCBuYW1lIik7Ci0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgZmllbGRfbmFtZV9pc19lbXB0eSA9IGZpcnN0LT5wdHIgPj0gZmlyc3QtPmVuZDsKKworICAgIC8qIElmIHRoZSBmaWVsZCBuYW1lIGlzIG9taXR0ZWQgb3IgaWYgd2UgaGF2ZSBhIG51bWVyaWMgaW5kZXgKKyAgICAgICBzcGVjaWZpZWQsIHRoZW4gd2UncmUgZG9pbmcgbnVtZXJpYyBpbmRleGluZyBpbnRvIGFyZ3MuICovCisgICAgdXNpbmdfbnVtZXJpY19pbmRleCA9IGZpZWxkX25hbWVfaXNfZW1wdHkgfHwgKmZpcnN0X2lkeCAhPSAtMTsKKworICAgIC8qIFdlIGFsd2F5cyBnZXQgaGVyZSBleGFjdGx5IG9uZSB0aW1lIGZvciBlYWNoIGZpZWxkIHdlJ3JlCisgICAgICAgcHJvY2Vzc2luZy4gQW5kIHdlIGdldCBoZXJlIGluIGZpZWxkIG9yZGVyIChjb3VudGluZyBieSBsZWZ0CisgICAgICAgYnJhY2VzKS4gU28gdGhpcyBpcyB0aGUgcGVyZmVjdCBwbGFjZSB0byBoYW5kbGUgYXV0b21hdGljIGZpZWxkCisgICAgICAgbnVtYmVyaW5nIGlmIHRoZSBmaWVsZCBuYW1lIGlzIG9taXR0ZWQuICovCisKKyAgICAvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIHRoZSBhdXRvLW51bWJlcmluZy4gSXQncyBub3QgbmVlZGVkIGlmCisgICAgICAgd2UncmUgY2FsbGVkIGZyb20gc3RyaW5nLkZvcm1hdCByb3V0aW5lcywgYmVjYXVzZSBpdCdzIGhhbmRsZWQKKyAgICAgICBpbiB0aGF0IGNsYXNzIGJ5IGl0c2VsZi4gKi8KKyAgICBpZiAoYXV0b19udW1iZXIpIHsKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBvdXIgYXV0byBudW1iZXJpbmcgc3RhdGUgaWYgdGhpcyBpcyB0aGUgZmlyc3QKKyAgICAgICAgICAgdGltZSB3ZSdyZSBlaXRoZXIgYXV0by1udW1iZXJpbmcgb3IgbWFudWFsbHkgbnVtYmVyaW5nLiAqLworICAgICAgICBpZiAoYXV0b19udW1iZXItPmFuX3N0YXRlID09IEFOU19JTklUICYmIHVzaW5nX251bWVyaWNfaW5kZXgpCisgICAgICAgICAgICBhdXRvX251bWJlci0+YW5fc3RhdGUgPSBmaWVsZF9uYW1lX2lzX2VtcHR5ID8KKyAgICAgICAgICAgICAgICBBTlNfQVVUTyA6IEFOU19NQU5VQUw7CisKKyAgICAgICAgLyogTWFrZSBzdXJlIG91ciBzdGF0ZSBpcyBjb25zaXN0ZW50IHdpdGggd2hhdCB3ZSdyZSBkb2luZworICAgICAgICAgICB0aGlzIHRpbWUgdGhyb3VnaC4gT25seSBjaGVjayBpZiB3ZSdyZSB1c2luZyBhIG51bWVyaWMKKyAgICAgICAgICAgaW5kZXguICovCisgICAgICAgIGlmICh1c2luZ19udW1lcmljX2luZGV4KQorICAgICAgICAgICAgaWYgKGF1dG9udW1iZXJfc3RhdGVfZXJyb3IoYXV0b19udW1iZXItPmFuX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZV9pc19lbXB0eSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIC8qIFplcm8gbGVuZ3RoIGZpZWxkIG1lYW5zIHdlIHdhbnQgdG8gZG8gYXV0by1udW1iZXJpbmcgb2YgdGhlCisgICAgICAgICAgIGZpZWxkcy4gKi8KKyAgICAgICAgaWYgKGZpZWxkX25hbWVfaXNfZW1wdHkpCisgICAgICAgICAgICAqZmlyc3RfaWR4ID0gKGF1dG9fbnVtYmVyLT5hbl9maWVsZF9udW1iZXIpKys7CiAgICAgfQogCiAgICAgcmV0dXJuIDE7Ci1lcnJvcjoKLSAgICByZXR1cm4gMDsKIH0KIAogCkBAIC00MDMsNyArNDc4LDggQEAKICAgICB0aGUgZW50aXJlIGlucHV0IHN0cmluZy4KICovCiBzdGF0aWMgUHlPYmplY3QgKgotZ2V0X2ZpZWxkX29iamVjdChTdWJTdHJpbmcgKmlucHV0LCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK2dldF9maWVsZF9vYmplY3QoU3ViU3RyaW5nICppbnB1dCwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MsCisgICAgICAgICAgICAgICAgIEF1dG9OdW1iZXIgKmF1dG9fbnVtYmVyKQogewogICAgIFB5T2JqZWN0ICpvYmogPSBOVUxMOwogICAgIGludCBvazsKQEAgLTQxNCw3ICs0OTAsNyBAQAogICAgIEZpZWxkTmFtZUl0ZXJhdG9yIHJlc3Q7CiAKICAgICBpZiAoIWZpZWxkX25hbWVfc3BsaXQoaW5wdXQtPnB0ciwgaW5wdXQtPmVuZCAtIGlucHV0LT5wdHIsICZmaXJzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmluZGV4LCAmcmVzdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmluZGV4LCAmcmVzdCwgYXV0b19udW1iZXIpKSB7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCkBAIC01NjIsMTQgKzYzOCwxOCBAQAogcGFyc2VfZmllbGQoU3ViU3RyaW5nICpzdHIsIFN1YlN0cmluZyAqZmllbGRfbmFtZSwgU3ViU3RyaW5nICpmb3JtYXRfc3BlYywKICAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSICpjb252ZXJzaW9uKQogeworICAgIC8qIE5vdGUgdGhpcyBmdW5jdGlvbiB3b3JrcyBpZiB0aGUgZmllbGQgbmFtZSBpcyB6ZXJvIGxlbmd0aCwKKyAgICAgICB3aGljaCBpcyBnb29kLiAgWmVybyBsZW5ndGggZmllbGQgbmFtZXMgYXJlIGhhbmRsZWQgbGF0ZXIsIGluCisgICAgICAgZmllbGRfbmFtZV9zcGxpdC4gKi8KKwogICAgIFNUUklOR0xJQl9DSEFSIGMgPSAwOwogCiAgICAgLyogaW5pdGlhbGl6ZSB0aGVzZSwgYXMgdGhleSBtYXkgYmUgZW1wdHkgKi8KICAgICAqY29udmVyc2lvbiA9ICdcMCc7CiAgICAgU3ViU3RyaW5nX2luaXQoZm9ybWF0X3NwZWMsIE5VTEwsIDApOwogCi0gICAgLyogc2VhcmNoIGZvciB0aGUgZmllbGQgbmFtZS4gIGl0J3MgdGVybWluYXRlZCBieSB0aGUgZW5kIG9mIHRoZQotICAgICAgIHN0cmluZywgb3IgYSAnOicgb3IgJyEnICovCisgICAgLyogU2VhcmNoIGZvciB0aGUgZmllbGQgbmFtZS4gIGl0J3MgdGVybWluYXRlZCBieSB0aGUgZW5kIG9mCisgICAgICAgdGhlIHN0cmluZywgb3IgYSAnOicgb3IgJyEnICovCiAgICAgZmllbGRfbmFtZS0+cHRyID0gc3RyLT5wdHI7CiAgICAgd2hpbGUgKHN0ci0+cHRyIDwgc3RyLT5lbmQpIHsKICAgICAgICAgc3dpdGNoIChjID0gKihzdHItPnB0cisrKSkgewpAQCAtNjEyLDE1ICs2OTIsMTIgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMTsKLQogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlCiAgICAgICAgIC8qIGVuZCBvZiBzdHJpbmcsIHRoZXJlJ3Mgbm8gZm9ybWF0X3NwZWMgb3IgY29udmVyc2lvbiAqLwogICAgICAgICBmaWVsZF9uYW1lLT5lbmQgPSBzdHItPnB0cjsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQorCisgICAgcmV0dXJuIDE7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02NDcsOCArNzI0LDggQEAKICAgIHN0cmluZyAob3Igc29tZXRoaW5nIHRvIGJlIGV4cGFuZGVkKSAqLwogc3RhdGljIGludAogTWFya3VwSXRlcmF0b3JfbmV4dChNYXJrdXBJdGVyYXRvciAqc2VsZiwgU3ViU3RyaW5nICpsaXRlcmFsLAotICAgICAgICAgICAgICAgICAgICBTdWJTdHJpbmcgKmZpZWxkX25hbWUsIFN1YlN0cmluZyAqZm9ybWF0X3NwZWMsCi0gICAgICAgICAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSICpjb252ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICBpbnQgKmZpZWxkX3ByZXNlbnQsIFN1YlN0cmluZyAqZmllbGRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgU3ViU3RyaW5nICpmb3JtYXRfc3BlYywgU1RSSU5HTElCX0NIQVIgKmNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgIGludCAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nKQogewogICAgIGludCBhdF9lbmQ7CkBAIC02NjQsNiArNzQxLDcgQEAKICAgICBTdWJTdHJpbmdfaW5pdChmb3JtYXRfc3BlYywgTlVMTCwgMCk7CiAgICAgKmNvbnZlcnNpb24gPSAnXDAnOwogICAgICpmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcgPSAwOworICAgICpmaWVsZF9wcmVzZW50ID0gMDsKIAogICAgIC8qIE5vIG1vcmUgaW5wdXQsIGVuZCBvZiBpdGVyYXRvci4gIFRoaXMgaXMgdGhlIG5vcm1hbCBleGl0CiAgICAgICAgcGF0aC4gKi8KQEAgLTcyNSw2ICs4MDMsNyBAQAogICAgIC8qIHRoaXMgaXMgbWFya3VwLCBmaW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBieSBjb3VudGluZyBuZXN0ZWQKICAgICAgICBicmFjZXMuICBub3RlIHRoYXQgdGhpcyBwcm9oaWJpdHMgZXNjYXBlZCBicmFjZXMsIHNvIHRoYXQKICAgICAgICBmb3JtYXRfc3BlY3MgY2Fubm90IGhhdmUgYnJhY2VzIGluIHRoZW0uICovCisgICAgKmZpZWxkX3ByZXNlbnQgPSAxOwogICAgIGNvdW50ID0gMTsKIAogICAgIHN0YXJ0ID0gc2VsZi0+c3RyLnB0cjsKQEAgLTc0OSwxMyArODI4LDYgQEAKICAgICAgICAgICAgICAgICBpZiAocGFyc2VfZmllbGQoJnMsIGZpZWxkX25hbWUsIGZvcm1hdF9zcGVjLCBjb252ZXJzaW9uKSA9PSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgICAgIC8qIGEgemVybyBsZW5ndGggZmllbGRfbmFtZSBpcyBhbiBlcnJvciAqLwotICAgICAgICAgICAgICAgIGlmIChmaWVsZF9uYW1lLT5wdHIgPT0gZmllbGRfbmFtZS0+ZW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiemVybyBsZW5ndGggZmllbGQgbmFtZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gZm9ybWF0Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KICAgICAgICAgICAgICAgICByZXR1cm4gMjsKICAgICAgICAgICAgIH0KQEAgLTgwMywxMyArODc1LDE3IEBACiAgICBjb21wdXRlIHRoZSByZXN1bHQgYW5kIHdyaXRlIGl0IHRvIG91dHB1dC4KICAgIGZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZyBpcyBhbiBvcHRpbWl6YXRpb24uICBpZiBpdCdzIGZhbHNlLAogICAganVzdCBvdXRwdXQgdGhlIHN0cmluZyBkaXJlY3RseSwgb3RoZXJ3aXNlIHJlY3Vyc2l2ZWx5IGV4cGFuZCB0aGUKLSAgIGZvcm1hdF9zcGVjIHN0cmluZy4gKi8KKyAgIGZvcm1hdF9zcGVjIHN0cmluZy4KKworICAgZmllbGRfbmFtZSBpcyBhbGxvd2VkIHRvIGJlIHplcm8gbGVuZ3RoLCBpbiB3aGljaCBjYXNlIHdlCisgICBhcmUgZG9pbmcgYXV0byBmaWVsZCBudW1iZXJpbmcuCisqLwogCiBzdGF0aWMgaW50CiBvdXRwdXRfbWFya3VwKFN1YlN0cmluZyAqZmllbGRfbmFtZSwgU3ViU3RyaW5nICpmb3JtYXRfc3BlYywKICAgICAgICAgICAgICAgaW50IGZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZywgU1RSSU5HTElCX0NIQVIgY29udmVyc2lvbiwKICAgICAgICAgICAgICAgT3V0cHV0U3RyaW5nICpvdXRwdXQsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzLAotICAgICAgICAgICAgICBpbnQgcmVjdXJzaW9uX2RlcHRoKQorICAgICAgICAgICAgICBpbnQgcmVjdXJzaW9uX2RlcHRoLCBBdXRvTnVtYmVyICphdXRvX251bWJlcikKIHsKICAgICBQeU9iamVjdCAqdG1wID0gTlVMTDsKICAgICBQeU9iamVjdCAqZmllbGRvYmogPSBOVUxMOwpAQCAtODE4LDcgKzg5NCw3IEBACiAgICAgaW50IHJlc3VsdCA9IDA7CiAKICAgICAvKiBjb252ZXJ0IGZpZWxkX25hbWUgdG8gYW4gb2JqZWN0ICovCi0gICAgZmllbGRvYmogPSBnZXRfZmllbGRfb2JqZWN0KGZpZWxkX25hbWUsIGFyZ3MsIGt3YXJncyk7CisgICAgZmllbGRvYmogPSBnZXRfZmllbGRfb2JqZWN0KGZpZWxkX25hbWUsIGFyZ3MsIGt3YXJncywgYXV0b19udW1iZXIpOwogICAgIGlmIChmaWVsZG9iaiA9PSBOVUxMKQogICAgICAgICBnb3RvIGRvbmU7CiAKQEAgLTgzNSw3ICs5MTEsOCBAQAogCiAgICAgLyogaWYgbmVlZGVkLCByZWN1cml2ZWx5IGNvbXB1dGUgdGhlIGZvcm1hdF9zcGVjICovCiAgICAgaWYgKGZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZykgewotICAgICAgICB0bXAgPSBidWlsZF9zdHJpbmcoZm9ybWF0X3NwZWMsIGFyZ3MsIGt3YXJncywgcmVjdXJzaW9uX2RlcHRoLTEpOworICAgICAgICB0bXAgPSBidWlsZF9zdHJpbmcoZm9ybWF0X3NwZWMsIGFyZ3MsIGt3YXJncywgcmVjdXJzaW9uX2RlcHRoLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvX251bWJlcik7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZG9uZTsKIApAQCAtODY5LDI2ICs5NDYsMjggQEAKICovCiBzdGF0aWMgaW50CiBkb19tYXJrdXAoU3ViU3RyaW5nICppbnB1dCwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MsCi0gICAgICAgICAgT3V0cHV0U3RyaW5nICpvdXRwdXQsIGludCByZWN1cnNpb25fZGVwdGgpCisgICAgICAgICAgT3V0cHV0U3RyaW5nICpvdXRwdXQsIGludCByZWN1cnNpb25fZGVwdGgsIEF1dG9OdW1iZXIgKmF1dG9fbnVtYmVyKQogewogICAgIE1hcmt1cEl0ZXJhdG9yIGl0ZXI7CiAgICAgaW50IGZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZzsKICAgICBpbnQgcmVzdWx0OworICAgIGludCBmaWVsZF9wcmVzZW50OwogICAgIFN1YlN0cmluZyBsaXRlcmFsOwogICAgIFN1YlN0cmluZyBmaWVsZF9uYW1lOwogICAgIFN1YlN0cmluZyBmb3JtYXRfc3BlYzsKICAgICBTVFJJTkdMSUJfQ0hBUiBjb252ZXJzaW9uOwogCiAgICAgTWFya3VwSXRlcmF0b3JfaW5pdCgmaXRlciwgaW5wdXQtPnB0ciwgaW5wdXQtPmVuZCAtIGlucHV0LT5wdHIpOwotICAgIHdoaWxlICgocmVzdWx0ID0gTWFya3VwSXRlcmF0b3JfbmV4dCgmaXRlciwgJmxpdGVyYWwsICZmaWVsZF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ybWF0X3NwZWMsICZjb252ZXJzaW9uLAorICAgIHdoaWxlICgocmVzdWx0ID0gTWFya3VwSXRlcmF0b3JfbmV4dCgmaXRlciwgJmxpdGVyYWwsICZmaWVsZF9wcmVzZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmllbGRfbmFtZSwgJmZvcm1hdF9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZykpID09IDIpIHsKICAgICAgICAgaWYgKCFvdXRwdXRfZGF0YShvdXRwdXQsIGxpdGVyYWwucHRyLCBsaXRlcmFsLmVuZCAtIGxpdGVyYWwucHRyKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoZmllbGRfbmFtZS5wdHIgIT0gZmllbGRfbmFtZS5lbmQpCisgICAgICAgIGlmIChmaWVsZF9wcmVzZW50KQogICAgICAgICAgICAgaWYgKCFvdXRwdXRfbWFya3VwKCZmaWVsZF9uYW1lLCAmZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nLCBjb252ZXJzaW9uLCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywga3dhcmdzLCByZWN1cnNpb25fZGVwdGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsIGt3YXJncywgcmVjdXJzaW9uX2RlcHRoLCBhdXRvX251bWJlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC05MDEsNyArOTgwLDcgQEAKICovCiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbGRfc3RyaW5nKFN1YlN0cmluZyAqaW5wdXQsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzLAotICAgICAgICAgICAgIGludCByZWN1cnNpb25fZGVwdGgpCisgICAgICAgICAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aCwgQXV0b051bWJlciAqYXV0b19udW1iZXIpCiB7CiAgICAgT3V0cHV0U3RyaW5nIG91dHB1dDsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKQEAgLTkyMyw3ICsxMDAyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRJQUxfU0laRV9JTkNSRU1FTlQpKQogICAgICAgICBnb3RvIGRvbmU7CiAKLSAgICBpZiAoIWRvX21hcmt1cChpbnB1dCwgYXJncywga3dhcmdzLCAmb3V0cHV0LCByZWN1cnNpb25fZGVwdGgpKSB7CisgICAgaWYgKCFkb19tYXJrdXAoaW5wdXQsIGFyZ3MsIGt3YXJncywgJm91dHB1dCwgcmVjdXJzaW9uX2RlcHRoLAorICAgICAgICAgICAgICAgICAgIGF1dG9fbnVtYmVyKSkgewogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCkBAIC05NTcsOCArMTAzNywxMSBAQAogICAgICovCiAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aCA9IDI7CiAKKyAgICBBdXRvTnVtYmVyIGF1dG9fbnVtYmVyOworCisgICAgQXV0b051bWJlcl9Jbml0KCZhdXRvX251bWJlcik7CiAgICAgU3ViU3RyaW5nX2luaXQoJmlucHV0LCBTVFJJTkdMSUJfU1RSKHNlbGYpLCBTVFJJTkdMSUJfTEVOKHNlbGYpKTsKLSAgICByZXR1cm4gYnVpbGRfc3RyaW5nKCZpbnB1dCwgYXJncywga3dhcmdzLCByZWN1cnNpb25fZGVwdGgpOworICAgIHJldHVybiBidWlsZF9zdHJpbmcoJmlucHV0LCBhcmdzLCBrd2FyZ3MsIHJlY3Vyc2lvbl9kZXB0aCwgJmF1dG9fbnVtYmVyKTsKIH0KIAogCkBAIC0xMDAzLDggKzEwODYsOSBAQAogICAgIFN1YlN0cmluZyBmb3JtYXRfc3BlYzsKICAgICBTVFJJTkdMSUJfQ0hBUiBjb252ZXJzaW9uOwogICAgIGludCBmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmc7Ci0gICAgaW50IHJlc3VsdCA9IE1hcmt1cEl0ZXJhdG9yX25leHQoJml0LT5pdF9tYXJrdXAsICZsaXRlcmFsLCAmZmllbGRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ybWF0X3NwZWMsICZjb252ZXJzaW9uLAorICAgIGludCBmaWVsZF9wcmVzZW50OworICAgIGludCByZXN1bHQgPSBNYXJrdXBJdGVyYXRvcl9uZXh0KCZpdC0+aXRfbWFya3VwLCAmbGl0ZXJhbCwgJmZpZWxkX3ByZXNlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpZWxkX25hbWUsICZmb3JtYXRfc3BlYywgJmNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZyk7CiAKICAgICAvKiBhbGwgb2YgdGhlIFN1YlN0cmluZyBvYmplY3RzIHBvaW50IGludG8gaXQtPnN0ciwgc28gbm8KQEAgLTEwMTksNyArMTEwMyw2IEBACiAgICAgICAgIFB5T2JqZWN0ICpmb3JtYXRfc3BlY19zdHIgPSBOVUxMOwogICAgICAgICBQeU9iamVjdCAqY29udmVyc2lvbl9zdHIgPSBOVUxMOwogICAgICAgICBQeU9iamVjdCAqdHVwbGUgPSBOVUxMOwotICAgICAgICBpbnQgaGFzX2ZpZWxkID0gZmllbGRfbmFtZS5wdHIgIT0gZmllbGRfbmFtZS5lbmQ7CiAKICAgICAgICAgbGl0ZXJhbF9zdHIgPSBTdWJTdHJpbmdfbmV3X29iamVjdCgmbGl0ZXJhbCk7CiAgICAgICAgIGlmIChsaXRlcmFsX3N0ciA9PSBOVUxMKQpAQCAtMTAzMSw3ICsxMTE0LDcgQEAKIAogICAgICAgICAvKiBpZiBmaWVsZF9uYW1lIGlzIG5vbi16ZXJvIGxlbmd0aCwgcmV0dXJuIGEgc3RyaW5nIGZvcgogICAgICAgICAgICBmb3JtYXRfc3BlYyAoZXZlbiBpZiB6ZXJvIGxlbmd0aCksIGVsc2UgcmV0dXJuIE5vbmUgKi8KLSAgICAgICAgZm9ybWF0X3NwZWNfc3RyID0gKGhhc19maWVsZCA/CisgICAgICAgIGZvcm1hdF9zcGVjX3N0ciA9IChmaWVsZF9wcmVzZW50ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YlN0cmluZ19uZXdfb2JqZWN0X29yX2VtcHR5IDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YlN0cmluZ19uZXdfb2JqZWN0KSgmZm9ybWF0X3NwZWMpOwogICAgICAgICBpZiAoZm9ybWF0X3NwZWNfc3RyID09IE5VTEwpCkBAIC0xMjU1LDkgKzEzMzgsMTEgQEAKICAgICBQeV9JTkNSRUYoc2VsZik7CiAgICAgaXQtPnN0ciA9IHNlbGY7CiAKKyAgICAvKiBQYXNzIGluIGF1dG9fbnVtYmVyID0gTlVMTC4gV2UnbGwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IKKyAgICAgICBmaXJzdF9vYmogaW4gdGhhdCBjYXNlLiAqLwogICAgIGlmICghZmllbGRfbmFtZV9zcGxpdChTVFJJTkdMSUJfU1RSKHNlbGYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdMSUJfTEVOKHNlbGYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlyc3QsICZmaXJzdF9pZHgsICZpdC0+aXRfZmllbGQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlyc3QsICZmaXJzdF9pZHgsICZpdC0+aXRfZmllbGQsIE5VTEwpKQogICAgICAgICBnb3RvIGRvbmU7CiAKICAgICAvKiBmaXJzdCBiZWNvbWVzIGFuIGludGVnZXIsIGlmIHBvc3NpYmxlOyBlbHNlIGEgc3RyaW5nICovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmggYi9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKaW5kZXggZGFhYTJlMi4uODRlNDYxNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaApAQCAtMTEsMTggKzExLDIzIEBACiAjZGVmaW5lIFNUUklOR0xJQl9UWVBFX05BTUUgICAgICAic3RyaW5nIgogI2RlZmluZSBTVFJJTkdMSUJfUEFSU0VfQ09ERSAgICAgIlMiCiAjZGVmaW5lIFNUUklOR0xJQl9FTVBUWSAgICAgICAgICBudWxsc3RyaW5nCisjZGVmaW5lIFNUUklOR0xJQl9JU1NQQUNFICAgICAgICBQeV9JU1NQQUNFCisjZGVmaW5lIFNUUklOR0xJQl9JU0xJTkVCUkVBSyh4KSAoKHggPT0gJ1xuJykgfHwgKHggPT0gJ1xyJykpCiAjZGVmaW5lIFNUUklOR0xJQl9JU0RFQ0lNQUwoeCkgICAoKHggPj0gJzAnKSAmJiAoeCA8PSAnOScpKQogI2RlZmluZSBTVFJJTkdMSUJfVE9ERUNJTUFMKHgpICAgKFNUUklOR0xJQl9JU0RFQ0lNQUwoeCkgPyAoeCAtICcwJykgOiAtMSkKLSNkZWZpbmUgU1RSSU5HTElCX1RPVVBQRVIgICAgICAgIHRvdXBwZXIKLSNkZWZpbmUgU1RSSU5HTElCX1RPTE9XRVIgICAgICAgIHRvbG93ZXIKKyNkZWZpbmUgU1RSSU5HTElCX1RPVVBQRVIgICAgICAgIFB5X1RPVVBQRVIKKyNkZWZpbmUgU1RSSU5HTElCX1RPTE9XRVIgICAgICAgIFB5X1RPTE9XRVIKICNkZWZpbmUgU1RSSU5HTElCX0ZJTEwgICAgICAgICAgIG1lbXNldAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVN0cmluZ19HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUKICNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIF9QeVN0cmluZ19SZXNpemUKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5U3RyaW5nX0NoZWNrCi0jZGVmaW5lIFNUUklOR0xJQl9DTVAgICAgICAgICAgICBtZW1jbXAKKyNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5U3RyaW5nX0NoZWNrRXhhY3QKICNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1N0cgogI2RlZmluZSBTVFJJTkdMSUJfR1JPVVBJTkcgICAgICAgX1B5U3RyaW5nX0luc2VydFRob3VzYW5kc0dyb3VwaW5nCisjZGVmaW5lIFNUUklOR0xJQl9HUk9VUElOR19MT0NBTEUgX1B5U3RyaW5nX0luc2VydFRob3VzYW5kc0dyb3VwaW5nTG9jYWxlCisKKyNkZWZpbmUgU1RSSU5HTElCX1dBTlRfQ09OVEFJTlNfT0JKIDEKIAogI2VuZGlmIC8qICFTVFJJTkdMSUJfU1RSSU5HREVGU19IICovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaCBiL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCmluZGV4IDQzOTBlMjIuLjFlMTMyZTUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCkBAIC0xLDEzICsxLDYgQEAKIC8qIE5PVEU6IHRoaXMgQVBJIGlzIC1PTkxZLSBmb3IgdXNlIHdpdGggc2luZ2xlIGJ5dGUgY2hhcmFjdGVyIHN0cmluZ3MuICovCiAvKiBEbyBub3QgdXNlIGl0IHdpdGggVW5pY29kZS4gKi8KIAotI2luY2x1ZGUgImJ5dGVzX21ldGhvZHMuaCIKLQotI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQotI3dhcm5pbmcgIlNUUklOR0xJQl9NVVRBQkxFIG5vdCBkZWZpbmVkIGJlZm9yZSAjaW5jbHVkZSwgYXNzdW1pbmcgMCIKLSNkZWZpbmUgU1RSSU5HTElCX01VVEFCTEUgMAotI2VuZGlmCi0KIC8qIHRoZSBtb3JlIGNvbXBsaWNhdGVkIG1ldGhvZHMuICBwYXJ0cyBvZiB0aGVzZSBzaG91bGQgYmUgcHVsbGVkIG91dCBpbnRvIHRoZQogICAgc2hhcmVkIGNvZGUgaW4gYnl0ZXNfbWV0aG9kcy5jIHRvIGN1dCBkb3duIG9uIGR1cGxpY2F0ZSBjb2RlIGJsb2F0LiAgKi8KIApAQCAtMjUsMTAgKzE4LDEwIEBACiAgICAgc2l6ZV90IGksIGo7CiAgICAgUHlPYmplY3QgKnU7CiAgICAgaW50IHRhYnNpemUgPSA4OwotCisgICAgCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpleHBhbmR0YWJzIiwgJnRhYnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLQorICAgIAogICAgIC8qIEZpcnN0IHBhc3M6IGRldGVybWluZSBzaXplIG9mIG91dHB1dCBzdHJpbmcgKi8KICAgICBpID0gaiA9IDA7CiAgICAgZSA9IFNUUklOR0xJQl9TVFIoc2VsZikgKyBTVFJJTkdMSUJfTEVOKHNlbGYpOwpAQCAtNTUsMjAgKzQ4LDIwIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KKyAgICAKICAgICBpZiAoKGkgKyBqKSA+IFBZX1NTSVpFX1RfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAicmVzdWx0IGlzIHRvbyBsb25nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQorICAgIAogICAgIC8qIFNlY29uZCBwYXNzOiBjcmVhdGUgb3V0cHV0IHN0cmluZyBhbmQgZmlsbCBpdCAqLwogICAgIHUgPSBTVFJJTkdMSUJfTkVXKE5VTEwsIGkgKyBqKTsKICAgICBpZiAoIXUpCiAgICAgICAgIHJldHVybiBOVUxMOwotCisgICAgCiAgICAgaiA9IDA7CiAgICAgcSA9IFNUUklOR0xJQl9TVFIodSk7Ci0KKyAgICAKICAgICBmb3IgKHAgPSBTVFJJTkdMSUJfU1RSKHNlbGYpOyBwIDwgZTsgcCsrKQogICAgICAgICBpZiAoKnAgPT0gJ1x0JykgewogICAgICAgICAgICAgaWYgKHRhYnNpemUgPiAwKSB7CkBAIC04NCw3ICs3Nyw3IEBACiAgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyB8fCAqcCA9PSAnXHInKQogICAgICAgICAgICAgICAgIGogPSAwOwogICAgICAgICB9Ci0KKyAgICAKICAgICByZXR1cm4gdTsKIH0KIApAQCAtMTEwLDE2ICsxMDMsMTYgQEAKICAgICB9CiAKICAgICB1ID0gU1RSSU5HTElCX05FVyhOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgU1RSSU5HTElCX0xFTihzZWxmKSArIHJpZ2h0KTsKKwkJCQkgICBsZWZ0ICsgU1RSSU5HTElCX0xFTihzZWxmKSArIHJpZ2h0KTsKICAgICBpZiAodSkgewogICAgICAgICBpZiAobGVmdCkKICAgICAgICAgICAgIG1lbXNldChTVFJJTkdMSUJfU1RSKHUpLCBmaWxsLCBsZWZ0KTsKICAgICAgICAgUHlfTUVNQ1BZKFNUUklOR0xJQl9TVFIodSkgKyBsZWZ0LAotICAgICAgICAgICAgICAgU1RSSU5HTElCX1NUUihzZWxmKSwKLSAgICAgICAgICAgICAgIFNUUklOR0xJQl9MRU4oc2VsZikpOworCSAgICAgICBTVFJJTkdMSUJfU1RSKHNlbGYpLAorCSAgICAgICBTVFJJTkdMSUJfTEVOKHNlbGYpKTsKICAgICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAgbWVtc2V0KFNUUklOR0xJQl9TVFIodSkgKyBsZWZ0ICsgU1RSSU5HTElCX0xFTihzZWxmKSwKLSAgICAgICAgICAgICAgICAgICBmaWxsLCByaWdodCk7CisJCSAgIGZpbGwsIHJpZ2h0KTsKICAgICB9CiAKICAgICByZXR1cm4gdTsKQEAgLTI2OSw4NyArMjYyLDMgQEAKIAogICAgIHJldHVybiAoUHlPYmplY3QqKSBzOwogfQotCi0KLSNkZWZpbmUgX1NUUklOR0xJQl9TUExJVF9BUFBFTkQoZGF0YSwgbGVmdCwgcmlnaHQpICAgICAgICAgICAgICBcCi0gICAgICAgIHN0ciA9IFNUUklOR0xJQl9ORVcoKGRhdGEpICsgKGxlZnQpLCAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmlnaHQpIC0gKGxlZnQpKTsgICAgIFwKLSAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdHIpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0KLVB5RG9jX1NUUlZBUihzcGxpdGxpbmVzX19kb2NfXywKLSJCLnNwbGl0bGluZXMoW2tlZXBlbmRzXSkgLT4gbGlzdCBvZiBsaW5lc1xuXAotXG5cCi1SZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiBCLCBicmVha2luZyBhdCBsaW5lIGJvdW5kYXJpZXMuXG5cCi1MaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdCB1bmxlc3Mga2VlcGVuZHNcblwKLWlzIGdpdmVuIGFuZCB0cnVlLiIpOwotCi1zdGF0aWMgUHlPYmplY3QqCi1zdHJpbmdsaWJfc3BsaXRsaW5lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKLSAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICBpbnQga2VlcGVuZHMgPSAwOwotICAgIFB5T2JqZWN0ICpsaXN0OwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgY2hhciAqZGF0YTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6c3BsaXRsaW5lcyIsICZrZWVwZW5kcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZGF0YSA9IFNUUklOR0xJQl9TVFIoc2VsZik7Ci0gICAgbGVuID0gU1RSSU5HTElCX0xFTihzZWxmKTsKLQotICAgIC8qIFRoaXMgZG9lcyBub3QgdXNlIHRoZSBwcmVhbGxvY2F0ZWQgbGlzdCBiZWNhdXNlIHNwbGl0bGluZXMgaXMKLSAgICAgICB1c3VhbGx5IHJ1biB3aXRoIGh1bmRyZWRzIG9mIG5ld2xpbmVzLiAgVGhlIG92ZXJoZWFkIG9mCi0gICAgICAgc3dpdGNoaW5nIGJldHdlZW4gUHlMaXN0X1NFVF9JVEVNIGFuZCBhcHBlbmQgY2F1c2VzIGFib3V0IGEKLSAgICAgICAyLTMlIHNsb3dkb3duIGZvciB0aGF0IGNvbW1vbiBjYXNlLiAgQSBzbWFydGVyIGltcGxlbWVudGF0aW9uCi0gICAgICAgY291bGQgbW92ZSB0aGUgaWYgY2hlY2sgb3V0LCBzbyB0aGUgU0VUX0lURU1zIGFyZSBkb25lIGZpcnN0Ci0gICAgICAgYW5kIHRoZSBhcHBlbmRzIG9ubHkgZG9uZSB3aGVuIHRoZSBwcmVhbGxvYyBidWZmZXIgaXMgZnVsbC4KLSAgICAgICBUaGF0J3MgdG9vIG11Y2ggd29yayBmb3IgbGl0dGxlIGdhaW4uKi8KLQotICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmICghbGlzdCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgZm9yIChpID0gaiA9IDA7IGkgPCBsZW47ICkgewotICAgICAgICBQeV9zc2l6ZV90IGVvbDsKLQotICAgICAgICAvKiBGaW5kIGEgbGluZSBhbmQgYXBwZW5kIGl0ICovCi0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmIGRhdGFbaV0gIT0gJ1xuJyAmJiBkYXRhW2ldICE9ICdccicpCi0gICAgICAgICAgICBpKys7Ci0KLSAgICAgICAgLyogU2tpcCB0aGUgbGluZSBicmVhayByZWFkaW5nIENSTEYgYXMgb25lIGxpbmUgYnJlYWsgKi8KLSAgICAgICAgZW9sID0gaTsKLSAgICAgICAgaWYgKGkgPCBsZW4pIHsKLSAgICAgICAgICAgIGlmIChkYXRhW2ldID09ICdccicgJiYgaSArIDEgPCBsZW4gJiYKLSAgICAgICAgICAgICAgICBkYXRhW2krMV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgaWYgKGtlZXBlbmRzKQotICAgICAgICAgICAgICAgIGVvbCA9IGk7Ci0gICAgICAgIH0KLSAgICAgICAgX1NUUklOR0xJQl9TUExJVF9BUFBFTkQoZGF0YSwgaiwgZW9sKTsKLSAgICAgICAgaiA9IGk7Ci0gICAgfQotICAgIGlmIChqIDwgbGVuKSB7Ci0gICAgICAgIF9TVFJJTkdMSUJfU1BMSVRfQVBQRU5EKGRhdGEsIGosIGxlbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpc3Q7Ci0KLSBvbkVycm9yOgotICAgIFB5X1hERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLSN1bmRlZiBfU1RSSU5HTElCX1NQTElUX0FQUEVORAotCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAppbmRleCA4Zjg3ZmUwLi5kZDgxNGY2IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgU1RSSU5HTElCX1RZUEVfTkFNRSAgICAgICJ1bmljb2RlIgogI2RlZmluZSBTVFJJTkdMSUJfUEFSU0VfQ09ERSAgICAgIlUiCiAjZGVmaW5lIFNUUklOR0xJQl9FTVBUWSAgICAgICAgICB1bmljb2RlX2VtcHR5CisjZGVmaW5lIFNUUklOR0xJQl9JU1NQQUNFICAgICAgICBQeV9VTklDT0RFX0lTU1BBQ0UKKyNkZWZpbmUgU1RSSU5HTElCX0lTTElORUJSRUFLICAgIEJMT09NX0xJTkVCUkVBSwogI2RlZmluZSBTVFJJTkdMSUJfSVNERUNJTUFMICAgICAgUHlfVU5JQ09ERV9JU0RFQ0lNQUwKICNkZWZpbmUgU1RSSU5HTElCX1RPREVDSU1BTCAgICAgIFB5X1VOSUNPREVfVE9ERUNJTUFMCiAjZGVmaW5lIFNUUklOR0xJQl9UT1VQUEVSICAgICAgICBQeV9VTklDT0RFX1RPVVBQRVIKQEAgLTIxLDYgKzIzLDcgQEAKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tVW5pY29kZQogI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgUHlVbmljb2RlX1Jlc2l6ZQogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCisjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogI2RlZmluZSBTVFJJTkdMSUJfR1JPVVBJTkcgICAgICAgX1B5VW5pY29kZV9JbnNlcnRUaG91c2FuZHNHcm91cGluZwogCiAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDAwMDAwCkBAIC0zMSwyMyArMzQsNCBAQAogCiAjZGVmaW5lIFNUUklOR0xJQl9XQU5UX0NPTlRBSU5TX09CSiAxCiAKLS8qIFNUUklOR0xJQl9DTVAgd2FzIGRlZmluZWQgYXM6Ci0KLVB5X0xPQ0FMX0lOTElORShpbnQpCi1TVFJJTkdMSUJfQ01QKGNvbnN0IFB5X1VOSUNPREUqIHN0ciwgY29uc3QgUHlfVU5JQ09ERSogb3RoZXIsIFB5X3NzaXplX3QgbGVuKQotewotICAgIGlmIChzdHJbMF0gIT0gb3RoZXJbMF0pCi0gICAgICAgIHJldHVybiAxOwotICAgIHJldHVybiBtZW1jbXAoKHZvaWQqKSBzdHIsICh2b2lkKikgb3RoZXIsIGxlbiAqIHNpemVvZihQeV9VTklDT0RFKSk7Ci19Ci0KLWJ1dCB1bmZvcnR1bmF0ZWx5IHRoYXQgZ2l2ZXMgYSBlcnJvciBpZiB0aGUgZnVuY3Rpb24gaXNuJ3QgdXNlZCBpbiBhIGZpbGUgdGhhdAotaW5jbHVkZXMgdGhpcyBmaWxlLiAgU28sIHJlbHVjdGFudGx5IGNvbnZlcnQgaXQgdG8gYSBtYWNybyBpbnN0ZWFkLiAqLwotCi0jZGVmaW5lIFNUUklOR0xJQl9DTVAoc3RyLCBvdGhlciwgbGVuKSBcCi0gICAgKCgoc3RyKVswXSAhPSAob3RoZXIpWzBdKSA/IFwKLSAgICAgMSA6IFwKLSAgICAgbWVtY21wKCh2b2lkKikgKHN0ciksICh2b2lkKikgKG90aGVyKSwgKGxlbikgKiBzaXplb2YoUHlfVU5JQ09ERSkpKQotCi0KICNlbmRpZiAvKiAhU1RSSU5HTElCX1VOSUNPREVERUZTX0ggKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nb2JqZWN0LmMgYi9PYmplY3RzL3N0cmluZ29iamVjdC5jCmluZGV4IGUzN2I1NzkuLjZkM2NhOGUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zdHJpbmdvYmplY3QuYwpAQCAtNCw5ICs0LDEwIEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgogCiAjaWZkZWYgQ09VTlRfQUxMT0NTCi1pbnQgbnVsbF9zdHJpbmdzLCBvbmVfc3RyaW5nczsKK1B5X3NzaXplX3QgbnVsbF9zdHJpbmdzLCBvbmVfc3RyaW5nczsKICNlbmRpZgogCiBzdGF0aWMgUHlTdHJpbmdPYmplY3QgKmNoYXJhY3RlcnNbVUNIQVJfTUFYICsgMV07CkBAIC0yMiw2ICsyMywxNCBAQAogKi8KIHN0YXRpYyBQeU9iamVjdCAqaW50ZXJuZWQ7CiAKKy8qIFB5U3RyaW5nT2JqZWN0X1NJWkUgZ2l2ZXMgdGhlIGJhc2ljIHNpemUgb2YgYSBzdHJpbmc7IGFueSBtZW1vcnkgYWxsb2NhdGlvbgorICAgZm9yIGEgc3RyaW5nIG9mIGxlbmd0aCBuIHNob3VsZCByZXF1ZXN0IFB5U3RyaW5nT2JqZWN0X1NJWkUgKyBuIGJ5dGVzLgorCisgICBVc2luZyBQeVN0cmluZ09iamVjdF9TSVpFIGluc3RlYWQgb2Ygc2l6ZW9mKFB5U3RyaW5nT2JqZWN0KSBzYXZlcworICAgMyBieXRlcyBwZXIgc3RyaW5nIGFsbG9jYXRpb24gb24gYSB0eXBpY2FsIHN5c3RlbS4KKyovCisjZGVmaW5lIFB5U3RyaW5nT2JqZWN0X1NJWkUgKG9mZnNldG9mKFB5U3RyaW5nT2JqZWN0LCBvYl9zdmFsKSArIDEpCisKIC8qCiAgICBGb3IgYm90aCBQeVN0cmluZ19Gcm9tU3RyaW5nKCkgYW5kIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCksIHRoZQogICAgcGFyYW1ldGVyIGBzaXplJyBkZW5vdGVzIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGFsbG9jYXRlLCBub3QgY291bnRpbmcgYW55CkBAIC03NCwxMyArODMsMTMgQEAKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKW9wOwogICAgIH0KIAotICAgIGlmIChzaXplID4gUFlfU1NJWkVfVF9NQVggLSBzaXplb2YoUHlTdHJpbmdPYmplY3QpKSB7CisgICAgaWYgKHNpemUgPiBQWV9TU0laRV9UX01BWCAtIFB5U3RyaW5nT2JqZWN0X1NJWkUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJzdHJpbmcgaXMgdG9vIGxhcmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIElubGluZSBQeU9iamVjdF9OZXdWYXIgKi8KLSAgICBvcCA9IChQeVN0cmluZ09iamVjdCAqKVB5T2JqZWN0X01BTExPQyhzaXplb2YoUHlTdHJpbmdPYmplY3QpICsgc2l6ZSk7CisgICAgb3AgPSAoUHlTdHJpbmdPYmplY3QgKilQeU9iamVjdF9NQUxMT0MoUHlTdHJpbmdPYmplY3RfU0laRSArIHNpemUpOwogICAgIGlmIChvcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5U3RyaW5nX1R5cGUsIHNpemUpOwpAQCAtMTE0LDcgKzEyMyw3IEBACiAKICAgICBhc3NlcnQoc3RyICE9IE5VTEwpOwogICAgIHNpemUgPSBzdHJsZW4oc3RyKTsKLSAgICBpZiAoc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gc2l6ZW9mKFB5U3RyaW5nT2JqZWN0KSkgeworICAgIGlmIChzaXplID4gUFlfU1NJWkVfVF9NQVggLSBQeVN0cmluZ09iamVjdF9TSVpFKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgInN0cmluZyBpcyB0b28gbG9uZyBmb3IgYSBQeXRob24gc3RyaW5nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTM1LDcgKzE0NCw3IEBACiAgICAgfQogCiAgICAgLyogSW5saW5lIFB5T2JqZWN0X05ld1ZhciAqLwotICAgIG9wID0gKFB5U3RyaW5nT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKHNpemVvZihQeVN0cmluZ09iamVjdCkgKyBzaXplKTsKKyAgICBvcCA9IChQeVN0cmluZ09iamVjdCAqKVB5T2JqZWN0X01BTExPQyhQeVN0cmluZ09iamVjdF9TSVpFICsgc2l6ZSk7CiAgICAgaWYgKG9wID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlTdHJpbmdfVHlwZSwgc2l6ZSk7CkBAIC0xODAsNiArMTg5LDkgQEAKICAgICAvKiBzdGVwIDE6IGZpZ3VyZSBvdXQgaG93IGxhcmdlIGEgYnVmZmVyIHdlIG5lZWQgKi8KICAgICBmb3IgKGYgPSBmb3JtYXQ7ICpmOyBmKyspIHsKICAgICAgICAgaWYgKCpmID09ICclJykgeworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICBpbnQgbG9uZ2xvbmdmbGFnID0gMDsKKyNlbmRpZgogICAgICAgICAgICAgY29uc3QgY2hhciogcCA9IGY7CiAgICAgICAgICAgICB3aGlsZSAoKisrZiAmJiAqZiAhPSAnJScgJiYgIWlzYWxwaGEoUHlfQ0hBUk1BU0soKmYpKSkKICAgICAgICAgICAgICAgICA7CkBAIC0xODcsOSArMTk5LDIxIEBACiAgICAgICAgICAgICAvKiBza2lwIHRoZSAnbCcgb3IgJ3onIGluIHslbGQsICV6ZCwgJWx1LCAlenV9IHNpbmNlCiAgICAgICAgICAgICAgKiB0aGV5IGRvbid0IGFmZmVjdCB0aGUgYW1vdW50IG9mIHNwYWNlIHdlIHJlc2VydmUuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICgoKmYgPT0gJ2wnIHx8ICpmID09ICd6JykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZlsxXSA9PSAnZCcgfHwgZlsxXSA9PSAndScpKQorICAgICAgICAgICAgaWYgKCpmID09ICdsJykgeworICAgICAgICAgICAgICAgIGlmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JykgeworICAgICAgICAgICAgICAgICAgICArK2Y7CisgICAgICAgICAgICAgICAgfQorI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZlsxXSA9PSAnbCcgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZlsyXSA9PSAnZCcgfHwgZlsyXSA9PSAndScpKSB7CisgICAgICAgICAgICAgICAgICAgIGxvbmdsb25nZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIGYgKz0gMjsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCpmID09ICd6JyAmJiAoZlsxXSA9PSAnZCcgfHwgZlsxXSA9PSAndScpKSB7CiAgICAgICAgICAgICAgICAgKytmOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzd2l0Y2ggKCpmKSB7CiAgICAgICAgICAgICBjYXNlICdjJzoKQEAgLTIwMCwxMCArMjI0LDIxIEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdkJzogY2FzZSAndSc6IGNhc2UgJ2knOiBjYXNlICd4JzoKICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKGNvdW50LCBpbnQpOwotICAgICAgICAgICAgICAgIC8qIDIwIGJ5dGVzIGlzIGVub3VnaCB0byBob2xkIGEgNjQtYml0Ci0gICAgICAgICAgICAgICAgICAgaW50ZWdlci4gIERlY2ltYWwgdGFrZXMgdGhlIG1vc3Qgc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgVGhpcyBpc24ndCBlbm91Z2ggZm9yIG9jdGFsLiAqLwotICAgICAgICAgICAgICAgIG4gKz0gMjA7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgICAgICAvKiBOZWVkIGF0IG1vc3QKKyAgICAgICAgICAgICAgICAgICBjZWlsKGxvZzEwKDI1NikqU0laRU9GX0xPTkdfTE9ORykgZGlnaXRzLAorICAgICAgICAgICAgICAgICAgIHBsdXMgMSBmb3IgdGhlIHNpZ24uICA1My8yMiBpcyBhbiB1cHBlcgorICAgICAgICAgICAgICAgICAgIGJvdW5kIGZvciBsb2cxMCgyNTYpLiAqLworICAgICAgICAgICAgICAgIGlmIChsb25nbG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgICAgIG4gKz0gMiArIChTSVpFT0ZfTE9OR19MT05HKjUzLTEpIC8gMjI7CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIC8qIDIwIGJ5dGVzIGlzIGVub3VnaCB0byBob2xkIGEgNjQtYml0CisgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXIuICBEZWNpbWFsIHRha2VzIHRoZSBtb3N0CisgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLiAgVGhpcyBpc24ndCBlbm91Z2ggZm9yCisgICAgICAgICAgICAgICAgICAgICAgIG9jdGFsLiAqLworICAgICAgICAgICAgICAgICAgICBuICs9IDIwOworCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgICBzID0gdmFfYXJnKGNvdW50LCBjaGFyKik7CkBAIC0yNDYsNiArMjgxLDkgQEAKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHAgPSBmKys7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IGk7CiAgICAgICAgICAgICBpbnQgbG9uZ2ZsYWcgPSAwOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICBpbnQgbG9uZ2xvbmdmbGFnID0gMDsKKyNlbmRpZgogICAgICAgICAgICAgaW50IHNpemVfdGZsYWcgPSAwOwogICAgICAgICAgICAgLyogcGFyc2UgdGhlIHdpZHRoLnByZWNpc2lvbiBwYXJ0ICh3ZSdyZSBvbmx5CiAgICAgICAgICAgICAgICBpbnRlcmVzdGVkIGluIHRoZSBwcmVjaXNpb24gdmFsdWUsIGlmIGFueSkgKi8KQEAgLTI2MCwxNCArMjk4LDIyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3aGlsZSAoKmYgJiYgKmYgIT0gJyUnICYmICFpc2FscGhhKFB5X0NIQVJNQVNLKCpmKSkpCiAgICAgICAgICAgICAgICAgZisrOwotICAgICAgICAgICAgLyogaGFuZGxlIHRoZSBsb25nIGZsYWcsIGJ1dCBvbmx5IGZvciAlbGQgYW5kICVsdS4KLSAgICAgICAgICAgICAgIG90aGVycyBjYW4gYmUgYWRkZWQgd2hlbiBuZWNlc3NhcnkuICovCi0gICAgICAgICAgICBpZiAoKmYgPT0gJ2wnICYmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JykpIHsKLSAgICAgICAgICAgICAgICBsb25nZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgKytmOworICAgICAgICAgICAgLyogSGFuZGxlICVsZCwgJWx1LCAlbGxkIGFuZCAlbGx1LiAqLworICAgICAgICAgICAgaWYgKCpmID09ICdsJykgeworICAgICAgICAgICAgICAgIGlmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JykgeworICAgICAgICAgICAgICAgICAgICBsb25nZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgICAgICsrZjsKKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmWzFdID09ICdsJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIChmWzJdID09ICdkJyB8fCBmWzJdID09ICd1JykpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9uZ2xvbmdmbGFnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZiArPSAyOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogaGFuZGxlIHRoZSBzaXplX3QgZmxhZy4gKi8KLSAgICAgICAgICAgIGlmICgqZiA9PSAneicgJiYgKGZbMV0gPT0gJ2QnIHx8IGZbMV0gPT0gJ3UnKSkgeworICAgICAgICAgICAgZWxzZSBpZiAoKmYgPT0gJ3onICYmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JykpIHsKICAgICAgICAgICAgICAgICBzaXplX3RmbGFnID0gMTsKICAgICAgICAgICAgICAgICArK2Y7CiAgICAgICAgICAgICB9CkBAIC0yNzksNiArMzI1LDExIEBACiAgICAgICAgICAgICBjYXNlICdkJzoKICAgICAgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCiAgICAgICAgICAgICAgICAgICAgIHNwcmludGYocywgIiVsZCIsIHZhX2FyZyh2YXJncywgbG9uZykpOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQorICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHMsICIlIiBQWV9GT1JNQVRfTE9OR19MT05HICJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyh2YXJncywgUFlfTE9OR19MT05HKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQogICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHMsICIlIiBQWV9GT1JNQVRfU0laRV9UICJkIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyh2YXJncywgUHlfc3NpemVfdCkpOwpAQCAtMjkwLDYgKzM0MSwxMSBAQAogICAgICAgICAgICAgICAgIGlmIChsb25nZmxhZykKICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzLCAiJWx1IiwKICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyh2YXJncywgdW5zaWduZWQgbG9uZykpOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQorICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHMsICIlIiBQWV9GT1JNQVRfTE9OR19MT05HICJ1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyh2YXJncywgUFlfTE9OR19MT05HKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQogICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHMsICIlIiBQWV9GT1JNQVRfU0laRV9UICJ1IiwKICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyh2YXJncywgc2l6ZV90KSk7CkBAIC0zMzksNyArMzk1LDggQEAKICAgICB9CiAKICBlbmQ6Ci0gICAgX1B5U3RyaW5nX1Jlc2l6ZSgmc3RyaW5nLCBzIC0gUHlTdHJpbmdfQVNfU1RSSU5HKHN0cmluZykpOworICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZzdHJpbmcsIHMgLSBQeVN0cmluZ19BU19TVFJJTkcoc3RyaW5nKSkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBzdHJpbmc7CiB9CiAKQEAgLTY5MSw4ICs3NDgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYtOCBieXRlcyBtYXkgZm9sbG93LiAqLwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChwLWJ1ZiA8IG5ld2xlbikKLSAgICAgICAgX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgcCAtIGJ1Zik7CisgICAgaWYgKHAtYnVmIDwgbmV3bGVuICYmIF9QeVN0cmluZ19SZXNpemUoJnYsIHAgLSBidWYpKQorICAgICAgICBnb3RvIGZhaWxlZDsKICAgICByZXR1cm4gdjsKICAgZmFpbGVkOgogICAgIFB5X0RFQ1JFRih2KTsKQEAgLTc4NSw2ICs4NDIsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3BhcnRpdGlvbi5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogCiAjZGVmaW5lIF9QeV9JbnNlcnRUaG91c2FuZHNHcm91cGluZyBfUHlTdHJpbmdfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcKICNpbmNsdWRlICJzdHJpbmdsaWIvbG9jYWxldXRpbC5oIgpAQCAtOTIwLDggKzk3OCw4IEBACiAgICAgICAgIGFzc2VydChuZXdzaXplIC0gKHAgLSBQeVN0cmluZ19BU19TVFJJTkcodikpID49IDEpOwogICAgICAgICAqcCsrID0gcXVvdGU7CiAgICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgX1B5U3RyaW5nX1Jlc2l6ZSgKLSAgICAgICAgICAgICZ2LCAocCAtIFB5U3RyaW5nX0FTX1NUUklORyh2KSkpOworICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgKHAgLSBQeVN0cmluZ19BU19TVFJJTkcodikpKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXR1cm4gdjsKICAgICB9CiB9CkBAIC05OTQsMTIgKzEwNTIsMTIgQEAKICAgICB9CiAKICAgICAvKiBJbmxpbmUgUHlPYmplY3RfTmV3VmFyICovCi0gICAgaWYgKHNpemUgPiBQWV9TU0laRV9UX01BWCAtIHNpemVvZihQeVN0cmluZ09iamVjdCkpIHsKKyAgICBpZiAoc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gUHlTdHJpbmdPYmplY3RfU0laRSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmdzIGFyZSB0b28gbGFyZ2UgdG8gY29uY2F0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBvcCA9IChQeVN0cmluZ09iamVjdCAqKVB5T2JqZWN0X01BTExPQyhzaXplb2YoUHlTdHJpbmdPYmplY3QpICsgc2l6ZSk7CisgICAgb3AgPSAoUHlTdHJpbmdPYmplY3QgKilQeU9iamVjdF9NQUxMT0MoUHlTdHJpbmdPYmplY3RfU0laRSArIHNpemUpOwogICAgIGlmIChvcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5U3RyaW5nX1R5cGUsIHNpemUpOwpAQCAtMTAzNiwxMyArMTA5NCwxMiBAQAogICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopYTsKICAgICB9CiAgICAgbmJ5dGVzID0gKHNpemVfdClzaXplOwotICAgIGlmIChuYnl0ZXMgKyBzaXplb2YoUHlTdHJpbmdPYmplY3QpIDw9IG5ieXRlcykgeworICAgIGlmIChuYnl0ZXMgKyBQeVN0cmluZ09iamVjdF9TSVpFIDw9IG5ieXRlcykgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICJyZXBlYXRlZCBzdHJpbmcgaXMgdG9vIGxvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIG9wID0gKFB5U3RyaW5nT2JqZWN0ICopCi0gICAgICAgIFB5T2JqZWN0X01BTExPQyhzaXplb2YoUHlTdHJpbmdPYmplY3QpICsgbmJ5dGVzKTsKKyAgICBvcCA9IChQeVN0cmluZ09iamVjdCAqKVB5T2JqZWN0X01BTExPQyhQeVN0cmluZ09iamVjdF9TSVpFICsgbmJ5dGVzKTsKICAgICBpZiAob3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeVN0cmluZ19UeXBlLCBzaXplKTsKQEAgLTEzNzAsMTQ1ICsxNDI3LDYgQEAKIAogI2RlZmluZSBTVFJJUE5BTUUoaSkgKHN0cmlwZm9ybWF0W2ldKzMpCiAKLQotLyogRG9uJ3QgY2FsbCBpZiBsZW5ndGggPCAyICovCi0jZGVmaW5lIFB5X1NUUklOR19NQVRDSCh0YXJnZXQsIG9mZnNldCwgcGF0dGVybiwgbGVuZ3RoKSAgICAgICAgXAotICAodGFyZ2V0W29mZnNldF0gPT0gcGF0dGVyblswXSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIHRhcmdldFtvZmZzZXQrbGVuZ3RoLTFdID09IHBhdHRlcm5bbGVuZ3RoLTFdICYmICAgICAgICAgICAgICBcCi0gICAhbWVtY21wKHRhcmdldCtvZmZzZXQrMSwgcGF0dGVybisxLCBsZW5ndGgtMikgKQotCi0KLS8qIE92ZXJhbGxvY2F0ZSB0aGUgaW5pdGlhbCBsaXN0IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHJlYWxsb2NzIGZvciBzbWFsbAotICAgc3BsaXQgc2l6ZXMuICBFZywgIkEgQSBBIEEgQSBBIEEgQSBBIEEiLnNwbGl0KCkgKDEwIGVsZW1lbnRzKSBoYXMgdGhyZWUKLSAgIHJlc2l6ZXMsIHRvIHNpemVzIDQsIDgsIHRoZW4gMTYuICBNb3N0IG9ic2VydmVkIHN0cmluZyBzcGxpdHMgYXJlIGZvciBodW1hbgotICAgdGV4dCAocm91Z2hseSAxMSB3b3JkcyBwZXIgbGluZSkgYW5kIGZpZWxkIGRlbGltaXRlZCBkYXRhICh1c3VhbGx5IDEtMTAKLSAgIGZpZWxkcykuICBGb3IgbGFyZ2Ugc3RyaW5ncyB0aGUgc3BsaXQgYWxnb3JpdGhtcyBhcmUgYmFuZHdpZHRoIGxpbWl0ZWQKLSAgIHNvIGluY3JlYXNpbmcgdGhlIHByZWFsbG9jYXRpb24gbGlrZWx5IHdpbGwgbm90IGltcHJvdmUgdGhpbmdzLiovCi0KLSNkZWZpbmUgTUFYX1BSRUFMTE9DIDEyCi0KLS8qIDUgc3BsaXRzIGdpdmVzIDYgZWxlbWVudHMgKi8KLSNkZWZpbmUgUFJFQUxMT0NfU0laRShtYXhzcGxpdCkgXAotICAgIChtYXhzcGxpdCA+PSBNQVhfUFJFQUxMT0MgPyBNQVhfUFJFQUxMT0MgOiBtYXhzcGxpdCsxKQotCi0jZGVmaW5lIFNQTElUX0FQUEVORChkYXRhLCBsZWZ0LCByaWdodCkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0ciA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKChkYXRhKSArIChsZWZ0KSwgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmlnaHQpIC0gKGxlZnQpKTsgICAgICAgICBcCi0gICAgaWYgKHN0ciA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdHIpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5X0RFQ1JFRihzdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLQotI2RlZmluZSBTUExJVF9BREQoZGF0YSwgbGVmdCwgcmlnaHQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdHIgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgoZGF0YSkgKyAobGVmdCksICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0KSAtIChsZWZ0KSk7ICAgICAgICAgXAotICAgIGlmIChzdHIgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGNvdW50IDwgTUFYX1BSRUFMTE9DKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgY291bnQsIHN0cik7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHN0cikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNvdW50Kys7IH0KLQotLyogQWx3YXlzIGZvcmNlIHRoZSBsaXN0IHRvIHRoZSBleHBlY3RlZCBzaXplLiAqLwotI2RlZmluZSBGSVhfUFJFQUxMT0NfU0laRShsaXN0KSBQeV9TSVpFKGxpc3QpID0gY291bnQKLQotI2RlZmluZSBTS0lQX1NQQUNFKHMsIGksIGxlbikgICAgeyB3aGlsZSAoaTxsZW4gJiYgIGlzc3BhY2UoUHlfQ0hBUk1BU0soc1tpXSkpKSBpKys7IH0KLSNkZWZpbmUgU0tJUF9OT05TUEFDRShzLCBpLCBsZW4pIHsgd2hpbGUgKGk8bGVuICYmICFpc3NwYWNlKFB5X0NIQVJNQVNLKHNbaV0pKSkgaSsrOyB9Ci0jZGVmaW5lIFJTS0lQX1NQQUNFKHMsIGkpICAgICAgICB7IHdoaWxlIChpPj0wICAmJiAgaXNzcGFjZShQeV9DSEFSTUFTSyhzW2ldKSkpIGktLTsgfQotI2RlZmluZSBSU0tJUF9OT05TUEFDRShzLCBpKSAgICAgeyB3aGlsZSAoaT49MCAgJiYgIWlzc3BhY2UoUHlfQ0hBUk1BU0soc1tpXSkpKSBpLS07IH0KLQotUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCi1zcGxpdF93aGl0ZXNwYWNlKFB5U3RyaW5nT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGxlbiwgUHlfc3NpemVfdCBtYXhzcGxpdCkKLXsKLSAgICBjb25zdCBjaGFyICpzID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpOwotICAgIFB5X3NzaXplX3QgaSwgaiwgY291bnQ9MDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heHNwbGl0KSk7Ci0KLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGkgPSBqID0gMDsKLQotICAgIHdoaWxlIChtYXhzcGxpdC0tID4gMCkgewotICAgICAgICBTS0lQX1NQQUNFKHMsIGksIGxlbik7Ci0gICAgICAgIGlmIChpPT1sZW4pIGJyZWFrOwotICAgICAgICBqID0gaTsgaSsrOwotICAgICAgICBTS0lQX05PTlNQQUNFKHMsIGksIGxlbik7Ci0gICAgICAgIGlmIChqID09IDAgJiYgaSA9PSBsZW4gJiYgUHlTdHJpbmdfQ2hlY2tFeGFjdChzZWxmKSkgewotICAgICAgICAgICAgLyogTm8gd2hpdGVzcGFjZSBpbiBzZWxmLCBzbyBqdXN0IHVzZSBpdCBhcyBsaXN0WzBdICovCi0gICAgICAgICAgICBQeV9JTkNSRUYoc2VsZik7Ci0gICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc2VsZik7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgU1BMSVRfQUREKHMsIGosIGkpOwotICAgIH0KLQotICAgIGlmIChpIDwgbGVuKSB7Ci0gICAgICAgIC8qIE9ubHkgb2NjdXJzIHdoZW4gbWF4c3BsaXQgd2FzIHJlYWNoZWQgKi8KLSAgICAgICAgLyogU2tpcCBhbnkgcmVtYWluaW5nIHdoaXRlc3BhY2UgYW5kIGNvcHkgdG8gZW5kIG9mIHN0cmluZyAqLwotICAgICAgICBTS0lQX1NQQUNFKHMsIGksIGxlbik7Ci0gICAgICAgIGlmIChpICE9IGxlbikKLSAgICAgICAgICAgIFNQTElUX0FERChzLCBpLCBsZW4pOwotICAgIH0KLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKLSAgICByZXR1cm4gbGlzdDsKLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLVB5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQotc3BsaXRfY2hhcihQeVN0cmluZ09iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsZW4sIGNoYXIgY2gsIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgY29uc3QgY2hhciAqcyA9IFB5U3RyaW5nX0FTX1NUUklORyhzZWxmKTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOwotCi0gICAgaWYgKGxpc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpID0gaiA9IDA7Ci0gICAgd2hpbGUgKChqIDwgbGVuKSAmJiAobWF4Y291bnQtLSA+IDApKSB7Ci0gICAgICAgIGZvcig7IGo8bGVuOyBqKyspIHsKLSAgICAgICAgICAgIC8qIEkgZm91bmQgdGhhdCB1c2luZyBtZW1jaHIgbWFrZXMgbm8gZGlmZmVyZW5jZSAqLwotICAgICAgICAgICAgaWYgKHNbal0gPT0gY2gpIHsKLSAgICAgICAgICAgICAgICBTUExJVF9BREQocywgaSwgaik7Ci0gICAgICAgICAgICAgICAgaSA9IGogPSBqICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaSA9PSAwICYmIGNvdW50ID09IDAgJiYgUHlTdHJpbmdfQ2hlY2tFeGFjdChzZWxmKSkgewotICAgICAgICAvKiBjaCBub3QgaW4gc2VsZiwgc28ganVzdCB1c2Ugc2VsZiBhcyBsaXN0WzBdICovCi0gICAgICAgIFB5X0lOQ1JFRihzZWxmKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXNlbGYpOwotICAgICAgICBjb3VudCsrOwotICAgIH0KLSAgICBlbHNlIGlmIChpIDw9IGxlbikgewotICAgICAgICBTUExJVF9BREQocywgaSwgbGVuKTsKLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KIFB5RG9jX1NUUlZBUihzcGxpdF9fZG9jX18sCiAiUy5zcGxpdChbc2VwIFssbWF4c3BsaXRdXSkgLT4gbGlzdCBvZiBzdHJpbmdzXG5cCiBcblwKQEAgLTE1MjEsMjAgKzE0MzksMTcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzdHJpbmdfc3BsaXQoUHlTdHJpbmdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5X3NzaXplX3QgbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUoc2VsZiksIG4sIGksIGo7Ci0gICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xLCBjb3VudD0wOworICAgIFB5X3NzaXplX3QgbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUoc2VsZiksIG47CisgICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xOwogICAgIGNvbnN0IGNoYXIgKnMgPSBQeVN0cmluZ19BU19TVFJJTkcoc2VsZiksICpzdWI7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpzdHIsICpzdWJvYmogPSBQeV9Ob25lOwotI2lmZGVmIFVTRV9GQVNUCi0gICAgUHlfc3NpemVfdCBwb3M7Ci0jZW5kaWYKKyAgICBQeU9iamVjdCAqc3Vib2JqID0gUHlfTm9uZTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE9uOnNwbGl0IiwgJnN1Ym9iaiwgJm1heHNwbGl0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKG1heHNwbGl0IDwgMCkKICAgICAgICAgbWF4c3BsaXQgPSBQWV9TU0laRV9UX01BWDsKICAgICBpZiAoc3Vib2JqID09IFB5X05vbmUpCi0gICAgICAgIHJldHVybiBzcGxpdF93aGl0ZXNwYWNlKHNlbGYsIGxlbiwgbWF4c3BsaXQpOworICAgICAgICByZXR1cm4gc3RyaW5nbGliX3NwbGl0X3doaXRlc3BhY2UoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBtYXhzcGxpdCk7CiAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKHN1Ym9iaikpIHsKICAgICAgICAgc3ViID0gUHlTdHJpbmdfQVNfU1RSSU5HKHN1Ym9iaik7CiAgICAgICAgIG4gPSBQeVN0cmluZ19HRVRfU0laRShzdWJvYmopOwpAQCAtMTU0Niw0NiArMTQ2MSw3IEBACiAgICAgZWxzZSBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHN1Ym9iaiwgJnN1YiwgJm4pKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChuID09IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbXB0eSBzZXBhcmF0b3IiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UgaWYgKG4gPT0gMSkKLSAgICAgICAgcmV0dXJuIHNwbGl0X2NoYXIoc2VsZiwgbGVuLCBzdWJbMF0sIG1heHNwbGl0KTsKLQotICAgIGxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4c3BsaXQpKTsKLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotI2lmZGVmIFVTRV9GQVNUCi0gICAgaSA9IGogPSAwOwotICAgIHdoaWxlIChtYXhzcGxpdC0tID4gMCkgewotICAgICAgICBwb3MgPSBmYXN0c2VhcmNoKHMraSwgbGVuLWksIHN1YiwgbiwgRkFTVF9TRUFSQ0gpOwotICAgICAgICBpZiAocG9zIDwgMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBqID0gaStwb3M7Ci0gICAgICAgIFNQTElUX0FERChzLCBpLCBqKTsKLSAgICAgICAgaSA9IGogKyBuOwotICAgIH0KLSNlbHNlCi0gICAgaSA9IGogPSAwOwotICAgIHdoaWxlICgoaituIDw9IGxlbikgJiYgKG1heHNwbGl0LS0gPiAwKSkgewotICAgICAgICBmb3IgKDsgaituIDw9IGxlbjsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHMsIGosIHN1YiwgbikpIHsKLSAgICAgICAgICAgICAgICBTUExJVF9BREQocywgaSwgaik7Ci0gICAgICAgICAgICAgICAgaSA9IGogPSBqICsgbjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIFNQTElUX0FERChzLCBpLCBsZW4pOwotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOwotICAgIHJldHVybiBsaXN0OwotCi0gb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdCgoUHlPYmplY3QqKSBzZWxmLCBzLCBsZW4sIHN1YiwgbiwgbWF4c3BsaXQpOwogfQogCiBQeURvY19TVFJWQVIocGFydGl0aW9uX19kb2NfXywKQEAgLTE2NTAsOTAgKzE1MjYsNiBAQAogICAgICAgICApOwogfQogCi1QeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKLXJzcGxpdF93aGl0ZXNwYWNlKFB5U3RyaW5nT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGxlbiwgUHlfc3NpemVfdCBtYXhzcGxpdCkKLXsKLSAgICBjb25zdCBjaGFyICpzID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpOwotICAgIFB5X3NzaXplX3QgaSwgaiwgY291bnQ9MDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heHNwbGl0KSk7Ci0KLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGkgPSBqID0gbGVuLTE7Ci0KLSAgICB3aGlsZSAobWF4c3BsaXQtLSA+IDApIHsKLSAgICAgICAgUlNLSVBfU1BBQ0UocywgaSk7Ci0gICAgICAgIGlmIChpPDApIGJyZWFrOwotICAgICAgICBqID0gaTsgaS0tOwotICAgICAgICBSU0tJUF9OT05TUEFDRShzLCBpKTsKLSAgICAgICAgaWYgKGogPT0gbGVuLTEgJiYgaSA8IDAgJiYgUHlTdHJpbmdfQ2hlY2tFeGFjdChzZWxmKSkgewotICAgICAgICAgICAgLyogTm8gd2hpdGVzcGFjZSBpbiBzZWxmLCBzbyBqdXN0IHVzZSBpdCBhcyBsaXN0WzBdICovCi0gICAgICAgICAgICBQeV9JTkNSRUYoc2VsZik7Ci0gICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc2VsZik7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgU1BMSVRfQUREKHMsIGkgKyAxLCBqICsgMSk7Ci0gICAgfQotICAgIGlmIChpID49IDApIHsKLSAgICAgICAgLyogT25seSBvY2N1cnMgd2hlbiBtYXhzcGxpdCB3YXMgcmVhY2hlZCAqLwotICAgICAgICAvKiBTa2lwIGFueSByZW1haW5pbmcgd2hpdGVzcGFjZSBhbmQgY29weSB0byBiZWdpbm5pbmcgb2Ygc3RyaW5nICovCi0gICAgICAgIFJTS0lQX1NQQUNFKHMsIGkpOwotICAgICAgICBpZiAoaSA+PSAwKQotICAgICAgICAgICAgU1BMSVRfQUREKHMsIDAsIGkgKyAxKTsKLQotICAgIH0KLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1QeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKLXJzcGxpdF9jaGFyKFB5U3RyaW5nT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGxlbiwgY2hhciBjaCwgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICBjb25zdCBjaGFyICpzID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgaiwgY291bnQ9MDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7Ci0KLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGkgPSBqID0gbGVuIC0gMTsKLSAgICB3aGlsZSAoKGkgPj0gMCkgJiYgKG1heGNvdW50LS0gPiAwKSkgewotICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGlmIChzW2ldID09IGNoKSB7Ci0gICAgICAgICAgICAgICAgU1BMSVRfQUREKHMsIGkgKyAxLCBqICsgMSk7Ci0gICAgICAgICAgICAgICAgaiA9IGkgPSBpIC0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaSA8IDAgJiYgY291bnQgPT0gMCAmJiBQeVN0cmluZ19DaGVja0V4YWN0KHNlbGYpKSB7Ci0gICAgICAgIC8qIGNoIG5vdCBpbiBzZWxmLCBzbyBqdXN0IHVzZSBzZWxmIGFzIGxpc3RbMF0gKi8KLSAgICAgICAgUHlfSU5DUkVGKHNlbGYpOwotICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc2VsZik7Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotICAgIGVsc2UgaWYgKGogPj0gLTEpIHsKLSAgICAgICAgU1BMSVRfQUREKHMsIDAsIGogKyAxKTsKLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIHJldHVybiBsaXN0OwotCi0gb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KIFB5RG9jX1NUUlZBUihyc3BsaXRfX2RvY19fLAogIlMucnNwbGl0KFtzZXAgWyxtYXhzcGxpdF1dKSAtPiBsaXN0IG9mIHN0cmluZ3NcblwKIFxuXApAQCAtMTc0NiwxNyArMTUzOCwxNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHN0cmluZ19yc3BsaXQoUHlTdHJpbmdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5X3NzaXplX3QgbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUoc2VsZiksIG4sIGksIGo7Ci0gICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xLCBjb3VudD0wOwotICAgIGNvbnN0IGNoYXIgKnMsICpzdWI7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpzdHIsICpzdWJvYmogPSBQeV9Ob25lOworICAgIFB5X3NzaXplX3QgbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUoc2VsZiksIG47CisgICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xOworICAgIGNvbnN0IGNoYXIgKnMgPSBQeVN0cmluZ19BU19TVFJJTkcoc2VsZiksICpzdWI7CisgICAgUHlPYmplY3QgKnN1Ym9iaiA9IFB5X05vbmU7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPbjpyc3BsaXQiLCAmc3Vib2JqLCAmbWF4c3BsaXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAobWF4c3BsaXQgPCAwKQogICAgICAgICBtYXhzcGxpdCA9IFBZX1NTSVpFX1RfTUFYOwogICAgIGlmIChzdWJvYmogPT0gUHlfTm9uZSkKLSAgICAgICAgcmV0dXJuIHJzcGxpdF93aGl0ZXNwYWNlKHNlbGYsIGxlbiwgbWF4c3BsaXQpOworICAgICAgICByZXR1cm4gc3RyaW5nbGliX3JzcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwogICAgIGlmIChQeVN0cmluZ19DaGVjayhzdWJvYmopKSB7CiAgICAgICAgIHN1YiA9IFB5U3RyaW5nX0FTX1NUUklORyhzdWJvYmopOwogICAgICAgICBuID0gUHlTdHJpbmdfR0VUX1NJWkUoc3Vib2JqKTsKQEAgLTE3NjgsNDAgKzE1NjAsNyBAQAogICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihzdWJvYmosICZzdWIsICZuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc2VwYXJhdG9yIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlmIChuID09IDEpCi0gICAgICAgIHJldHVybiByc3BsaXRfY2hhcihzZWxmLCBsZW4sIHN1YlswXSwgbWF4c3BsaXQpOwotCi0gICAgbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhzcGxpdCkpOwotICAgIGlmIChsaXN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaiA9IGxlbjsKLSAgICBpID0gaiAtIG47Ci0KLSAgICBzID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpOwotICAgIHdoaWxlICggKGkgPj0gMCkgJiYgKG1heHNwbGl0LS0gPiAwKSApIHsKLSAgICAgICAgZm9yICg7IGk+PTA7IGktLSkgewotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSChzLCBpLCBzdWIsIG4pKSB7Ci0gICAgICAgICAgICAgICAgU1BMSVRfQUREKHMsIGkgKyBuLCBqKTsKLSAgICAgICAgICAgICAgICBqID0gaTsKLSAgICAgICAgICAgICAgICBpIC09IG47Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgU1BMSVRfQUREKHMsIDAsIGopOwotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOwotICAgIGlmIChQeUxpc3RfUmV2ZXJzZShsaXN0KSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICByZXR1cm4gbGlzdDsKLQotb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9yc3BsaXQoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBzdWIsIG4sIG1heHNwbGl0KTsKIH0KIAogCkBAIC0xOTE2LDIwICsxNjc1LDIwIEBACiAgICAgcmV0dXJuIHN0cmluZ19qb2luKChQeVN0cmluZ09iamVjdCAqKXNlcCwgeCk7CiB9CiAKLVB5X0xPQ0FMX0lOTElORSh2b2lkKQotc3RyaW5nX2FkanVzdF9pbmRpY2VzKFB5X3NzaXplX3QgKnN0YXJ0LCBQeV9zc2l6ZV90ICplbmQsIFB5X3NzaXplX3QgbGVuKQotewotICAgIGlmICgqZW5kID4gbGVuKQotICAgICAgICAqZW5kID0gbGVuOwotICAgIGVsc2UgaWYgKCplbmQgPCAwKQotICAgICAgICAqZW5kICs9IGxlbjsKLSAgICBpZiAoKmVuZCA8IDApCi0gICAgICAgICplbmQgPSAwOwotICAgIGlmICgqc3RhcnQgPCAwKQotICAgICAgICAqc3RhcnQgKz0gbGVuOwotICAgIGlmICgqc3RhcnQgPCAwKQotICAgICAgICAqc3RhcnQgPSAwOwotfQorLyogaGVscGVyIG1hY3JvIHRvIGZpeHVwIHN0YXJ0L2VuZCBzbGljZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKSAgICAgICAgIFwKKyAgICBpZiAoZW5kID4gbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbmQgPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoZW5kIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZW5kIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHN0YXJ0IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhcnQgKz0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoc3RhcnQgPCAwKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXJ0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCiBzdHJpbmdfZmluZF9pbnRlcm5hbChQeVN0cmluZ09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIGludCBkaXIpCkBAIC0yMzgzLDEwICsyMTQyLDEwIEBACiAgICAgZWxzZSBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHN1Yl9vYmosICZzdWIsICZzdWJfbGVuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzdHJpbmdfYWRqdXN0X2luZGljZXMoJnN0YXJ0LCAmZW5kLCBQeVN0cmluZ19HRVRfU0laRShzZWxmKSk7CisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgUHlTdHJpbmdfR0VUX1NJWkUoc2VsZikpOwogCiAgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KAotICAgICAgICBzdHJpbmdsaWJfY291bnQoc3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LCBzdWIsIHN1Yl9sZW4pCisgICAgICAgIHN0cmluZ2xpYl9jb3VudChzdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHN1Yiwgc3ViX2xlbiwgUFlfU1NJWkVfVF9NQVgpCiAgICAgICAgICk7CiB9CiAKQEAgLTI1NDMsMTUgKzIzMDIsMTIgQEAKICAgICAgICAgcmV0dXJuIGlucHV0X29iajsKICAgICB9CiAgICAgLyogRml4IHRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nICovCi0gICAgaWYgKGlubGVuID4gMCkKLSAgICAgICAgX1B5U3RyaW5nX1Jlc2l6ZSgmcmVzdWx0LCBvdXRwdXQgLSBvdXRwdXRfc3RhcnQpOworICAgIGlmIChpbmxlbiA+IDAgJiYgX1B5U3RyaW5nX1Jlc2l6ZSgmcmVzdWx0LCBvdXRwdXQgLSBvdXRwdXRfc3RhcnQpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKLSNkZWZpbmUgRk9SV0FSRCAxCi0jZGVmaW5lIFJFVkVSU0UgLTEKLQogLyogZmluZCBhbmQgY291bnQgY2hhcmFjdGVycyBhbmQgc3Vic3RyaW5ncyAqLwogCiAjZGVmaW5lIGZpbmRjaGFyKHRhcmdldCwgdGFyZ2V0X2xlbiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjU4Nyw5MyArMjM0Myw2IEBACiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1QeV9MT0NBTChQeV9zc2l6ZV90KQotZmluZHN0cmluZyhjb25zdCBjaGFyICp0YXJnZXQsIFB5X3NzaXplX3QgdGFyZ2V0X2xlbiwKLSAgICAgICAgICAgY29uc3QgY2hhciAqcGF0dGVybiwgUHlfc3NpemVfdCBwYXR0ZXJuX2xlbiwKLSAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwKLSAgICAgICAgICAgUHlfc3NpemVfdCBlbmQsCi0gICAgICAgICAgIGludCBkaXJlY3Rpb24pCi17Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICBzdGFydCArPSB0YXJnZXRfbGVuOwotICAgICAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICAgICAgc3RhcnQgPSAwOwotICAgIH0KLSAgICBpZiAoZW5kID4gdGFyZ2V0X2xlbikgewotICAgICAgICBlbmQgPSB0YXJnZXRfbGVuOwotICAgIH0gZWxzZSBpZiAoZW5kIDwgMCkgewotICAgICAgICBlbmQgKz0gdGFyZ2V0X2xlbjsKLSAgICAgICAgaWYgKGVuZCA8IDApCi0gICAgICAgICAgICBlbmQgPSAwOwotICAgIH0KLQotICAgIC8qIHplcm8tbGVuZ3RoIHN1YnN0cmluZ3MgYWx3YXlzIG1hdGNoIGF0IHRoZSBmaXJzdCBhdHRlbXB0ICovCi0gICAgaWYgKHBhdHRlcm5fbGVuID09IDApCi0gICAgICAgIHJldHVybiAoZGlyZWN0aW9uID4gMCkgPyBzdGFydCA6IGVuZDsKLQotICAgIGVuZCAtPSBwYXR0ZXJuX2xlbjsKLQotICAgIGlmIChkaXJlY3Rpb24gPCAwKSB7Ci0gICAgICAgIGZvciAoOyBlbmQgPj0gc3RhcnQ7IGVuZC0tKQotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSCh0YXJnZXQsIGVuZCwgcGF0dGVybiwgcGF0dGVybl9sZW4pKQotICAgICAgICAgICAgICAgIHJldHVybiBlbmQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICg7IHN0YXJ0IDw9IGVuZDsgc3RhcnQrKykKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBzdGFydCwgcGF0dGVybiwgcGF0dGVybl9sZW4pKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1QeV9MT0NBTF9JTkxJTkUoUHlfc3NpemVfdCkKLWNvdW50c3RyaW5nKGNvbnN0IGNoYXIgKnRhcmdldCwgUHlfc3NpemVfdCB0YXJnZXRfbGVuLAotICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0dGVybiwgUHlfc3NpemVfdCBwYXR0ZXJuX2xlbiwKLSAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsCi0gICAgICAgICAgICBQeV9zc2l6ZV90IGVuZCwKLSAgICAgICAgICAgIGludCBkaXJlY3Rpb24sIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgUHlfc3NpemVfdCBjb3VudD0wOwotCi0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICBzdGFydCArPSB0YXJnZXRfbGVuOwotICAgICAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICAgICAgc3RhcnQgPSAwOwotICAgIH0KLSAgICBpZiAoZW5kID4gdGFyZ2V0X2xlbikgewotICAgICAgICBlbmQgPSB0YXJnZXRfbGVuOwotICAgIH0gZWxzZSBpZiAoZW5kIDwgMCkgewotICAgICAgICBlbmQgKz0gdGFyZ2V0X2xlbjsKLSAgICAgICAgaWYgKGVuZCA8IDApCi0gICAgICAgICAgICBlbmQgPSAwOwotICAgIH0KLQotICAgIC8qIHplcm8tbGVuZ3RoIHN1YnN0cmluZ3MgbWF0Y2ggZXZlcnl3aGVyZSAqLwotICAgIGlmIChwYXR0ZXJuX2xlbiA9PSAwIHx8IG1heGNvdW50ID09IDApIHsKLSAgICAgICAgaWYgKHRhcmdldF9sZW4rMSA8IG1heGNvdW50KQotICAgICAgICAgICAgcmV0dXJuIHRhcmdldF9sZW4rMTsKLSAgICAgICAgcmV0dXJuIG1heGNvdW50OwotICAgIH0KLQotICAgIGVuZCAtPSBwYXR0ZXJuX2xlbjsKLSAgICBpZiAoZGlyZWN0aW9uIDwgMCkgewotICAgICAgICBmb3IgKDsgKGVuZCA+PSBzdGFydCk7IGVuZC0tKQotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSCh0YXJnZXQsIGVuZCwgcGF0dGVybiwgcGF0dGVybl9sZW4pKSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpZiAoLS1tYXhjb3VudCA8PSAwKSBicmVhazsKLSAgICAgICAgICAgICAgICBlbmQgLT0gcGF0dGVybl9sZW4tMTsKLSAgICAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKDsgKHN0YXJ0IDw9IGVuZCk7IHN0YXJ0KyspCi0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHRhcmdldCwgc3RhcnQsIHBhdHRlcm4sIHBhdHRlcm5fbGVuKSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaWYgKC0tbWF4Y291bnQgPD0gMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgc3RhcnQgKz0gcGF0dGVybl9sZW4tMTsKLSAgICAgICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCiAKIC8qIEFsZ29yaXRobXMgZm9yIGRpZmZlcmVudCBjYXNlcyBvZiBzdHJpbmcgcmVwbGFjZW1lbnQgKi8KIApAQCAtMjc5NCwxMCArMjQ2Myw5IEBACiAgICAgc2VsZl9sZW4gPSBQeVN0cmluZ19HRVRfU0laRShzZWxmKTsKICAgICBzZWxmX3MgPSBQeVN0cmluZ19BU19TVFJJTkcoc2VsZik7CiAKLSAgICBjb3VudCA9IGNvdW50c3RyaW5nKHNlbGZfcywgc2VsZl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2VsZl9sZW4sIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXhjb3VudCk7CisgICAgY291bnQgPSBzdHJpbmdsaWJfY291bnQoc2VsZl9zLCBzZWxmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGNvdW50KTsKIAogICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgIC8qIG5vIG1hdGNoZXMgKi8KQEAgLTI4MTYsOSArMjQ4NCw5IEBACiAgICAgc3RhcnQgPSBzZWxmX3M7CiAgICAgZW5kID0gc2VsZl9zICsgc2VsZl9sZW47CiAgICAgd2hpbGUgKGNvdW50LS0gPiAwKSB7Ci0gICAgICAgIG9mZnNldCA9IGZpbmRzdHJpbmcoc3RhcnQsIGVuZC1zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGVuZC1zdGFydCwgRk9SV0FSRCk7CisgICAgICAgIG9mZnNldCA9IHN0cmluZ2xpYl9maW5kKHN0YXJ0LCBlbmQtc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICAgICAgICBpZiAob2Zmc2V0ID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5leHQgPSBzdGFydCArIG9mZnNldDsKQEAgLTI4OTQsOSArMjU2Miw5IEBACiAgICAgc2VsZl9zID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpOwogICAgIHNlbGZfbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUoc2VsZik7CiAKLSAgICBvZmZzZXQgPSBmaW5kc3RyaW5nKHNlbGZfcywgc2VsZl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2VsZl9sZW4sIEZPUldBUkQpOworICAgIG9mZnNldCA9IHN0cmluZ2xpYl9maW5kKHNlbGZfcywgc2VsZl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgICBpZiAob2Zmc2V0ID09IC0xKSB7CiAgICAgICAgIC8qIE5vIG1hdGNoZXM7IHJldHVybiB0aGUgb3JpZ2luYWwgc3RyaW5nICovCiAgICAgICAgIHJldHVybiByZXR1cm5fc2VsZihzZWxmKTsKQEAgLTI5MTYsOSArMjU4NCw5IEBACiAgICAgZW5kID0gcmVzdWx0X3MgKyBzZWxmX2xlbjsKIAogICAgIHdoaWxlICggLS1tYXhjb3VudCA+IDApIHsKLSAgICAgICAgb2Zmc2V0ID0gZmluZHN0cmluZyhzdGFydCwgZW5kLXN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZW5kLXN0YXJ0LCBGT1JXQVJEKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RyaW5nbGliX2ZpbmQoc3RhcnQsIGVuZC1zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAgICAgICAgIGlmIChvZmZzZXQ9PS0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIFB5X01FTUNQWShzdGFydCtvZmZzZXQsIHRvX3MsIGZyb21fbGVuKTsKQEAgLTMwMTAsOSArMjY3OCwxMCBAQAogICAgIHNlbGZfcyA9IFB5U3RyaW5nX0FTX1NUUklORyhzZWxmKTsKICAgICBzZWxmX2xlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHNlbGYpOwogCi0gICAgY291bnQgPSBjb3VudHN0cmluZyhzZWxmX3MsIHNlbGZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGZfbGVuLCBGT1JXQVJELCBtYXhjb3VudCk7CisgICAgY291bnQgPSBzdHJpbmdsaWJfY291bnQoc2VsZl9zLCBzZWxmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGNvdW50KTsKKwogICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgIC8qIG5vIG1hdGNoZXMsIHJldHVybiB1bmNoYW5nZWQgKi8KICAgICAgICAgcmV0dXJuIHJldHVybl9zZWxmKHNlbGYpOwpAQCAtMzAzOSw5ICsyNzA4LDkgQEAKICAgICBzdGFydCA9IHNlbGZfczsKICAgICBlbmQgPSBzZWxmX3MgKyBzZWxmX2xlbjsKICAgICB3aGlsZSAoY291bnQtLSA+IDApIHsKLSAgICAgICAgb2Zmc2V0ID0gZmluZHN0cmluZyhzdGFydCwgZW5kLXN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZW5kLXN0YXJ0LCBGT1JXQVJEKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RyaW5nbGliX2ZpbmQoc3RhcnQsIGVuZC1zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAgICAgICAgIGlmIChvZmZzZXQgPT0gLTEpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbmV4dCA9IHN0YXJ0K29mZnNldDsKQEAgLTMyMTEsNyArMjg4MCw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBzdHIgPSBQeVN0cmluZ19BU19TVFJJTkcoc2VsZik7CiAKLSAgICBzdHJpbmdfYWRqdXN0X2luZGljZXMoJnN0YXJ0LCAmZW5kLCBsZW4pOworICAgIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIGxlbik7CiAKICAgICBpZiAoZGlyZWN0aW9uIDwgMCkgewogICAgICAgICAvKiBzdGFydHN3aXRoICovCkBAIC0zMzI0LDEzICsyOTkzLDE1IEBACiBjb2RlY3MucmVnaXN0ZXJfZXJyb3IgdGhhdCBpcyBhYmxlIHRvIGhhbmRsZSBVbmljb2RlRW5jb2RlRXJyb3JzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotc3RyaW5nX2VuY29kZShQeVN0cmluZ09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitzdHJpbmdfZW5jb2RlKFB5U3RyaW5nT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwogICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKICAgICBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICp2OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8c3M6ZW5jb2RlIiwgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8c3M6ZW5jb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZlbmNvZGluZywgJmVycm9ycykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHYgPSBQeVN0cmluZ19Bc0VuY29kZWRPYmplY3QoKFB5T2JqZWN0ICopc2VsZiwgZW5jb2RpbmcsIGVycm9ycyk7CiAgICAgaWYgKHYgPT0gTlVMTCkKQEAgLTMzNjEsMTMgKzMwMzIsMTUgQEAKIGFibGUgdG8gaGFuZGxlIFVuaWNvZGVEZWNvZGVFcnJvcnMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1zdHJpbmdfZGVjb2RlKFB5U3RyaW5nT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3N0cmluZ19kZWNvZGUoUHlTdHJpbmdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogeworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07CiAgICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwogICAgIGNoYXIgKmVycm9ycyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnY7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxzczpkZWNvZGUiLCAmZW5jb2RpbmcsICZlcnJvcnMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxzczpkZWNvZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmVuY29kaW5nLCAmZXJyb3JzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgdiA9IFB5U3RyaW5nX0FzRGVjb2RlZE9iamVjdCgoUHlPYmplY3QgKilzZWxmLCBlbmNvZGluZywgZXJyb3JzKTsKICAgICBpZiAodiA9PSBOVUxMKQpAQCAtMzg3NSw2MiArMzU0OCwxNSBAQAogc3RhdGljIFB5T2JqZWN0Kgogc3RyaW5nX3NwbGl0bGluZXMoUHlTdHJpbmdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW47CiAgICAgaW50IGtlZXBlbmRzID0gMDsKLSAgICBQeU9iamVjdCAqbGlzdDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIGNoYXIgKmRhdGE7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOnNwbGl0bGluZXMiLCAma2VlcGVuZHMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGRhdGEgPSBQeVN0cmluZ19BU19TVFJJTkcoc2VsZik7Ci0gICAgbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUoc2VsZik7Ci0KLSAgICAvKiBUaGlzIGRvZXMgbm90IHVzZSB0aGUgcHJlYWxsb2NhdGVkIGxpc3QgYmVjYXVzZSBzcGxpdGxpbmVzIGlzCi0gICAgICAgdXN1YWxseSBydW4gd2l0aCBodW5kcmVkcyBvZiBuZXdsaW5lcy4gIFRoZSBvdmVyaGVhZCBvZgotICAgICAgIHN3aXRjaGluZyBiZXR3ZWVuIFB5TGlzdF9TRVRfSVRFTSBhbmQgYXBwZW5kIGNhdXNlcyBhYm91dCBhCi0gICAgICAgMi0zJSBzbG93ZG93biBmb3IgdGhhdCBjb21tb24gY2FzZS4gIEEgc21hcnRlciBpbXBsZW1lbnRhdGlvbgotICAgICAgIGNvdWxkIG1vdmUgdGhlIGlmIGNoZWNrIG91dCwgc28gdGhlIFNFVF9JVEVNcyBhcmUgZG9uZSBmaXJzdAotICAgICAgIGFuZCB0aGUgYXBwZW5kcyBvbmx5IGRvbmUgd2hlbiB0aGUgcHJlYWxsb2MgYnVmZmVyIGlzIGZ1bGwuCi0gICAgICAgVGhhdCdzIHRvbyBtdWNoIHdvcmsgZm9yIGxpdHRsZSBnYWluLiovCi0KLSAgICBsaXN0ID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoIWxpc3QpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQotICAgIGZvciAoaSA9IGogPSAwOyBpIDwgbGVuOyApIHsKLSAgICAgICAgUHlfc3NpemVfdCBlb2w7Ci0KLSAgICAgICAgLyogRmluZCBhIGxpbmUgYW5kIGFwcGVuZCBpdCAqLwotICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiBkYXRhW2ldICE9ICdcbicgJiYgZGF0YVtpXSAhPSAnXHInKQotICAgICAgICAgICAgaSsrOwotCi0gICAgICAgIC8qIFNraXAgdGhlIGxpbmUgYnJlYWsgcmVhZGluZyBDUkxGIGFzIG9uZSBsaW5lIGJyZWFrICovCi0gICAgICAgIGVvbCA9IGk7Ci0gICAgICAgIGlmIChpIDwgbGVuKSB7Ci0gICAgICAgICAgICBpZiAoZGF0YVtpXSA9PSAnXHInICYmIGkgKyAxIDwgbGVuICYmCi0gICAgICAgICAgICAgICAgZGF0YVtpKzFdID09ICdcbicpCi0gICAgICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGlmIChrZWVwZW5kcykKLSAgICAgICAgICAgICAgICBlb2wgPSBpOwotICAgICAgICB9Ci0gICAgICAgIFNQTElUX0FQUEVORChkYXRhLCBqLCBlb2wpOwotICAgICAgICBqID0gaTsKLSAgICB9Ci0gICAgaWYgKGogPCBsZW4pIHsKLSAgICAgICAgU1BMSVRfQVBQRU5EKGRhdGEsIGosIGxlbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpc3Q7Ci0KLSBvbkVycm9yOgotICAgIFB5X1hERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdGxpbmVzKAorICAgICAgICAoUHlPYmplY3QqKSBzZWxmLCBQeVN0cmluZ19BU19TVFJJTkcoc2VsZiksIFB5U3RyaW5nX0dFVF9TSVpFKHNlbGYpLAorICAgICAgICBrZWVwZW5kcworICAgICk7CiB9CiAKIFB5RG9jX1NUUlZBUihzaXplb2ZfX2RvY19fLApAQCAtMzk0MCwxNSArMzU2NiwxMCBAQAogc3RyaW5nX3NpemVvZihQeVN0cmluZ09iamVjdCAqdikKIHsKICAgICBQeV9zc2l6ZV90IHJlczsKLSAgICByZXMgPSBzaXplb2YoUHlTdHJpbmdPYmplY3QpICsgdi0+b2Jfc2l6ZSAqIHYtPm9iX3R5cGUtPnRwX2l0ZW1zaXplOworICAgIHJlcyA9IFB5U3RyaW5nT2JqZWN0X1NJWkUgKyBQeVN0cmluZ19HRVRfU0laRSh2KSAqIFB5X1RZUEUodiktPnRwX2l0ZW1zaXplOwogICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdChyZXMpOwogfQogCi0jdW5kZWYgU1BMSVRfQVBQRU5ECi0jdW5kZWYgU1BMSVRfQURECi0jdW5kZWYgTUFYX1BSRUFMTE9DCi0jdW5kZWYgUFJFQUxMT0NfU0laRQotCiBzdGF0aWMgUHlPYmplY3QgKgogc3RyaW5nX2dldG5ld2FyZ3MoUHlTdHJpbmdPYmplY3QgKnYpCiB7CkBAIC0zOTYxLDcgKzM1ODIsOCBAQAogUHlEb2NfU1RSVkFSKGZvcm1hdF9fZG9jX18sCiAiUy5mb3JtYXQoKmFyZ3MsICoqa3dhcmdzKSAtPiBzdHJpbmdcblwKIFxuXAotIik7CitSZXR1cm4gYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiBTLCB1c2luZyBzdWJzdGl0dXRpb25zIGZyb20gYXJncyBhbmQga3dhcmdzLlxuXAorVGhlIHN1YnN0aXR1dGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgYnJhY2VzICgneycgYW5kICd9JykuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzdHJpbmdfX2Zvcm1hdF9fKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTM5OTUsNyArMzYxNyw3IEBACiBQeURvY19TVFJWQVIocF9mb3JtYXRfX2RvY19fLAogIlMuX19mb3JtYXRfXyhmb3JtYXRfc3BlYykgLT4gc3RyaW5nXG5cCiBcblwKLSIpOworUmV0dXJuIGEgZm9ybWF0dGVkIHZlcnNpb24gb2YgUyBhcyBkZXNjcmliZWQgYnkgZm9ybWF0X3NwZWMuIik7CiAKIAogc3RhdGljIFB5TWV0aG9kRGVmCkBAIC00MDQ1LDggKzM2NjcsOCBAQAogICAgIHsiX19mb3JtYXRfXyIsIChQeUNGdW5jdGlvbikgc3RyaW5nX19mb3JtYXRfXywgTUVUSF9WQVJBUkdTLCBwX2Zvcm1hdF9fZG9jX199LAogICAgIHsiX2Zvcm1hdHRlcl9maWVsZF9uYW1lX3NwbGl0IiwgKFB5Q0Z1bmN0aW9uKSBmb3JtYXR0ZXJfZmllbGRfbmFtZV9zcGxpdCwgTUVUSF9OT0FSR1N9LAogICAgIHsiX2Zvcm1hdHRlcl9wYXJzZXIiLCAoUHlDRnVuY3Rpb24pIGZvcm1hdHRlcl9wYXJzZXIsIE1FVEhfTk9BUkdTfSwKLSAgICB7ImVuY29kZSIsIChQeUNGdW5jdGlvbilzdHJpbmdfZW5jb2RlLCBNRVRIX1ZBUkFSR1MsIGVuY29kZV9fZG9jX199LAotICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ19kZWNvZGUsIE1FVEhfVkFSQVJHUywgZGVjb2RlX19kb2NfX30sCisgICAgeyJlbmNvZGUiLCAoUHlDRnVuY3Rpb24pc3RyaW5nX2VuY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZW5jb2RlX19kb2NfX30sCisgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pc3RyaW5nX2RlY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZGVjb2RlX19kb2NfX30sCiAgICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ19leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MsCiAgICAgIGV4cGFuZHRhYnNfX2RvY19ffSwKICAgICB7InNwbGl0bGluZXMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nX3NwbGl0bGluZXMsIE1FVEhfVkFSQVJHUywKQEAgLTQxNzksNyArMzgwMSw3IEBACiBQeVR5cGVPYmplY3QgUHlTdHJpbmdfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICJzdHIiLAotICAgIHNpemVvZihQeVN0cmluZ09iamVjdCksCisgICAgUHlTdHJpbmdPYmplY3RfU0laRSwKICAgICBzaXplb2YoY2hhciksCiAgICAgc3RyaW5nX2RlYWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCiAgICAgKHByaW50ZnVuYylzdHJpbmdfcHJpbnQsICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwpAQCAtNDI3NSw3ICszODk3LDcgQEAKICAgICBfUHlfREVDX1JFRlRPVEFMOwogICAgIF9QeV9Gb3JnZXRSZWZlcmVuY2Uodik7CiAgICAgKnB2ID0gKFB5T2JqZWN0ICopCi0gICAgICAgIFB5T2JqZWN0X1JFQUxMT0MoKGNoYXIgKil2LCBzaXplb2YoUHlTdHJpbmdPYmplY3QpICsgbmV3c2l6ZSk7CisgICAgICAgIFB5T2JqZWN0X1JFQUxMT0MoKGNoYXIgKil2LCBQeVN0cmluZ09iamVjdF9TSVpFICsgbmV3c2l6ZSk7CiAgICAgaWYgKCpwdiA9PSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0X0RlbCh2KTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTQzMjAsNjMgKzM5NDIsMzMgQEAKICNkZWZpbmUgRl9BTFQgICAoMTw8MykKICNkZWZpbmUgRl9aRVJPICAoMTw8NCkKIAotUHlfTE9DQUxfSU5MSU5FKGludCkKLWZvcm1hdGZsb2F0KGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgaW50IGZsYWdzLAotICAgICAgICAgICAgaW50IHByZWMsIGludCB0eXBlLCBQeU9iamVjdCAqdikKKy8qIFJldHVybnMgYSBuZXcgcmVmZXJlbmNlIHRvIGEgUHlTdHJpbmcgb2JqZWN0LCBvciBOVUxMIG9uIGZhaWx1cmUuICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitmb3JtYXRmbG9hdChQeU9iamVjdCAqdiwgaW50IGZsYWdzLCBpbnQgcHJlYywgaW50IHR5cGUpCiB7Ci0gICAgLyogZm10ID0gJyUjLicgKyBgcHJlY2AgKyBgdHlwZWAKLSAgICAgICB3b3JzdCBjYXNlIGxlbmd0aCA9IDMgKyAxMCAobGVuIG9mIElOVF9NQVgpICsgMSA9IDE0ICh1c2UgMjApKi8KLSAgICBjaGFyIGZtdFsyMF07CisgICAgY2hhciAqcDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIGRvdWJsZSB4OworCiAgICAgeCA9IFB5RmxvYXRfQXNEb3VibGUodik7CiAgICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJmbG9hdCBhcmd1bWVudCByZXF1aXJlZCwgIgogICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKICAgICBpZiAocHJlYyA8IDApCiAgICAgICAgIHByZWMgPSA2OwotI2lmIFNJWkVPRl9JTlQgPiA0Ci0gICAgLyogbWFrZSBzdXJlIHRoYXQgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgcHJlY2lzaW9uIHJlYWxseSBkb2VzCi0gICAgICAgbmVlZCBhdCBtb3N0IDEwIGRpZ2l0czogcGxhdGZvcm1zIHdpdGggc2l6ZW9mKGludCkgPT0gOCBleGlzdCEgKi8KLSAgICBpZiAocHJlYyA+IDB4N2ZmZmZmZmYpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAib3V0cmFnZW91c2x5IGxhcmdlIHByZWNpc2lvbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGZvcm1hdHRlZCBmbG9hdCIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotI2VuZGlmCiAKLSAgICBpZiAodHlwZSA9PSAnZicgJiYgZmFicyh4KSA+PSAxZTUwKQotICAgICAgICB0eXBlID0gJ2cnOwotICAgIC8qIFdvcnN0IGNhc2UgbGVuZ3RoIGNhbGMgdG8gZW5zdXJlIG5vIGJ1ZmZlciBvdmVycnVuOgorICAgIHAgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoeCwgdHlwZSwgcHJlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIEZfQUxUKSA/IFB5X0RUU0ZfQUxUIDogMCwgTlVMTCk7CiAKLSAgICAgICAnZycgZm9ybWF0czoKLSAgICAgICAgIGZtdCA9ICUjLjxwcmVjPmcKLSAgICAgICAgIGJ1ZiA9ICctJyArIFswLTldKnByZWMgKyAnLicgKyAnZSsnICsgKGxvbmdlc3QgZXhwCi0gICAgICAgIGZvciBhbnkgZG91YmxlIHJlcC4pCi0gICAgICAgICBsZW4gPSAxICsgcHJlYyArIDEgKyAyICsgNSA9IDkgKyBwcmVjCi0KLSAgICAgICAnZicgZm9ybWF0czoKLSAgICAgICAgIGJ1ZiA9ICctJyArIFswLTldKnggKyAnLicgKyBbMC05XSpwcmVjICh3aXRoIHggPCA1MCkKLSAgICAgICAgIGxlbiA9IDEgKyA1MCArIDEgKyBwcmVjID0gNTIgKyBwcmVjCi0KLSAgICAgICBJZiBwcmVjPTAgdGhlIGVmZmVjdGl2ZSBwcmVjaXNpb24gaXMgMSAodGhlIGxlYWRpbmcgZGlnaXQgaXMKLSAgICAgICBhbHdheXMgZ2l2ZW4pLCB0aGVyZWZvcmUgaW5jcmVhc2UgdGhlIGxlbmd0aCBieSBvbmUuCi0KLSAgICAqLwotICAgIGlmICgoKHR5cGUgPT0gJ2cnIHx8IHR5cGUgPT0gJ0cnKSAmJgotICAgICAgICAgIGJ1ZmxlbiA8PSAoc2l6ZV90KTEwICsgKHNpemVfdClwcmVjKSB8fAotICAgICAgICAodHlwZSA9PSAnZicgJiYgYnVmbGVuIDw9IChzaXplX3QpNTMgKyAoc2l6ZV90KXByZWMpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgImZvcm1hdHRlZCBmbG9hdCBpcyB0b28gbG9uZyAocHJlY2lzaW9uIHRvbyBsYXJnZT8pIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgUHlPU19zbnByaW50ZihmbXQsIHNpemVvZihmbXQpLCAiJSUlcy4lZCVjIiwKLSAgICAgICAgICAgICAgICAgIChmbGFncyZGX0FMVCkgPyAiIyIgOiAiIiwKLSAgICAgICAgICAgICAgICAgIHByZWMsIHR5cGUpOwotICAgIFB5T1NfYXNjaWlfZm9ybWF0ZChidWYsIGJ1ZmxlbiwgZm10LCB4KTsKLSAgICByZXR1cm4gKGludClzdHJsZW4oYnVmKTsKKyAgICBpZiAocCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXN1bHQgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShwLCBzdHJsZW4ocCkpOworICAgIFB5TWVtX0ZyZWUocCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogX1B5U3RyaW5nX0Zvcm1hdExvbmcgZW11bGF0ZXMgdGhlIGZvcm1hdCBjb2RlcyBkLCB1LCBvLCB4IGFuZCBYLCBhbmQKQEAgLTQ2MTYsNyArNDIwOCw3IEBACiAKIC8qIGZtdCUodjEsdjIsLi4uKSBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gc3ByaW50ZihmbXQsIHYxLCB2MiwgLi4uKQogCi0gICBGT1JNQVRCVUZMRU4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIHdoaWNoIHRoZSBmbG9hdHMsIGludHMsICYKKyAgIEZPUk1BVEJVRkxFTiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gd2hpY2ggdGhlIGludHMgJgogICAgY2hhcnMgYXJlIGZvcm1hdHRlZC4gWFhYIFRoaXMgaXMgYSBtYWdpYyBudW1iZXIuIEVhY2ggZm9ybWF0dGluZwogICAgcm91dGluZSBkb2VzIGJvdW5kcyBjaGVja2luZyB0byBlbnN1cmUgbm8gb3ZlcmZsb3csIGJ1dCBhIGJldHRlcgogICAgc29sdXRpb24gbWF5IGJlIHRvIG1hbGxvYyBhIGJ1ZmZlciBvZiBhcHByb3ByaWF0ZSBzaXplIGZvciBlYWNoCkBAIC00NjY0LDcgKzQyNTYsNyBAQAogICAgICAgICAgICAgaWYgKC0tcmVzY250IDwgMCkgewogICAgICAgICAgICAgICAgIHJlc2NudCA9IGZtdGNudCArIDEwMDsKICAgICAgICAgICAgICAgICByZXNsZW4gKz0gcmVzY250OwotICAgICAgICAgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZyZXN1bHQsIHJlc2xlbikgPCAwKQorICAgICAgICAgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZyZXN1bHQsIHJlc2xlbikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIHJlcyA9IFB5U3RyaW5nX0FTX1NUUklORyhyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICsgcmVzbGVuIC0gcmVzY250OwpAQCAtNDY4Niw3ICs0Mjc4LDcgQEAKICAgICAgICAgICAgIGludCBzaWduOwogICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgICAgICAgICBjaGFyIGZvcm1hdGJ1ZltGT1JNQVRCVUZMRU5dOwotICAgICAgICAgICAgICAgICAvKiBGb3IgZm9ybWF0e2Zsb2F0LGludCxjaGFyfSgpICovCisgICAgICAgICAgICAgICAgIC8qIEZvciBmb3JtYXR7aW50LGNoYXJ9KCkgKi8KICNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgICAgICAgICBjaGFyICpmbXRfc3RhcnQgPSBmbXQ7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IGFyZ2lkeF9zdGFydCA9IGFyZ2lkeDsKQEAgLTQ5MzcsMTMgKzQ1MjksMTEgQEAKICAgICAgICAgICAgIGNhc2UgJ0YnOgogICAgICAgICAgICAgY2FzZSAnZyc6CiAgICAgICAgICAgICBjYXNlICdHJzoKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnRicpCi0gICAgICAgICAgICAgICAgICAgIGMgPSAnZic7Ci0gICAgICAgICAgICAgICAgcGJ1ZiA9IGZvcm1hdGJ1ZjsKLSAgICAgICAgICAgICAgICBsZW4gPSBmb3JtYXRmbG9hdChwYnVmLCBzaXplb2YoZm9ybWF0YnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgcHJlYywgYywgdik7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApCisgICAgICAgICAgICAgICAgdGVtcCA9IGZvcm1hdGZsb2F0KHYsIGZsYWdzLCBwcmVjLCBjKTsKKyAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIHBidWYgPSBQeVN0cmluZ19BU19TVFJJTkcodGVtcCk7CisgICAgICAgICAgICAgICAgbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUodGVtcCk7CiAgICAgICAgICAgICAgICAgc2lnbiA9IDE7CiAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRl9aRVJPKQogICAgICAgICAgICAgICAgICAgICBmaWxsID0gJzAnOwpAQCAtNDk5Myw3ICs0NTgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0ZW1wKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZyZXN1bHQsIHJlc2xlbikgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJlc3VsdCwgcmVzbGVuKSkgewogICAgICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHRlbXApOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CkBAIC01MDYxLDcgKzQ2NTEsOCBAQAogICAgIGlmIChhcmdzX293bmVkKSB7CiAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKICAgICB9Ci0gICAgX1B5U3RyaW5nX1Jlc2l6ZSgmcmVzdWx0LCByZXNsZW4gLSByZXNjbnQpOworICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZyZXN1bHQsIHJlc2xlbiAtIHJlc2NudCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiByZXN1bHQ7CiAKICNpZmRlZiBQeV9VU0lOR19VTklDT0RFCmRpZmYgLS1naXQgYS9PYmplY3RzL3R1cGxlb2JqZWN0LmMgYi9PYmplY3RzL3R1cGxlb2JqZWN0LmMKaW5kZXggYmJjNzhmNC4uMzI0OWNjYyAxMDA2NDQKLS0tIGEvT2JqZWN0cy90dXBsZW9iamVjdC5jCisrKyBiL09iamVjdHMvdHVwbGVvYmplY3QuYwpAQCAtMTksMTAgKzE5LDMyIEBACiBzdGF0aWMgaW50IG51bWZyZWVbUHlUdXBsZV9NQVhTQVZFU0laRV07CiAjZW5kaWYKICNpZmRlZiBDT1VOVF9BTExPQ1MKLWludCBmYXN0X3R1cGxlX2FsbG9jczsKLWludCB0dXBsZV96ZXJvX2FsbG9jczsKK1B5X3NzaXplX3QgZmFzdF90dXBsZV9hbGxvY3M7CitQeV9zc2l6ZV90IHR1cGxlX3plcm9fYWxsb2NzOwogI2VuZGlmCiAKKy8qIERlYnVnIHN0YXRpc3RpYyB0byBjb3VudCBHQyB0cmFja2luZyBvZiB0dXBsZXMuCisgICBQbGVhc2Ugbm90ZSB0aGF0IHR1cGxlcyBhcmUgb25seSB1bnRyYWNrZWQgd2hlbiBjb25zaWRlcmVkIGJ5IHRoZSBHQywgYW5kCisgICBtYW55IG9mIHRoZW0gd2lsbCBiZSBkZWFkIGJlZm9yZS4gVGhlcmVmb3JlLCBhIHRyYWNraW5nIHJhdGUgY2xvc2UgdG8gMTAwJQorICAgZG9lcyBub3QgbmVjZXNzYXJpbHkgcHJvdmUgdGhhdCB0aGUgaGV1cmlzdGljIGlzIGluZWZmaWNpZW50LgorKi8KKyNpZmRlZiBTSE9XX1RSQUNLX0NPVU5UCitzdGF0aWMgUHlfc3NpemVfdCBjb3VudF91bnRyYWNrZWQgPSAwOworc3RhdGljIFB5X3NzaXplX3QgY291bnRfdHJhY2tlZCA9IDA7CisKK3N0YXRpYyB2b2lkCitzaG93X3RyYWNrKHZvaWQpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJUdXBsZXMgY3JlYXRlZDogJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwKKyAgICAgICAgY291bnRfdHJhY2tlZCArIGNvdW50X3VudHJhY2tlZCk7CisgICAgZnByaW50ZihzdGRlcnIsICJUdXBsZXMgdHJhY2tlZCBieSB0aGUgR0M6ICUiIFBZX0ZPUk1BVF9TSVpFX1QKKyAgICAgICAgImRcbiIsIGNvdW50X3RyYWNrZWQpOworICAgIGZwcmludGYoc3RkZXJyLCAiJS4yZiUlIHR1cGxlIHRyYWNraW5nIHJhdGVcblxuIiwKKyAgICAgICAgKDEwMC4wKmNvdW50X3RyYWNrZWQvKGNvdW50X3VudHJhY2tlZCtjb3VudF90cmFja2VkKSkpOworfQorI2VuZGlmCisKKwogUHlPYmplY3QgKgogUHlUdXBsZV9OZXcocmVnaXN0ZXIgUHlfc3NpemVfdCBzaXplKQogewpAQCAtNjQsNyArODYsNiBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgfQotICAgICAgICBuYnl0ZXMgKz0gc2l6ZW9mKFB5VHVwbGVPYmplY3QpIC0gc2l6ZW9mKFB5T2JqZWN0ICopOwogCiAgICAgICAgIG9wID0gUHlPYmplY3RfR0NfTmV3VmFyKFB5VHVwbGVPYmplY3QsICZQeVR1cGxlX1R5cGUsIHNpemUpOwogICAgICAgICBpZiAob3AgPT0gTlVMTCkKQEAgLTc5LDYgKzEwMCw5IEBACiAgICAgICAgIFB5X0lOQ1JFRihvcCk7ICAgICAgICAgIC8qIGV4dHJhIElOQ1JFRiBzbyB0aGF0IHRoaXMgaXMgbmV2ZXIgZnJlZWQgKi8KICAgICB9CiAjZW5kaWYKKyNpZmRlZiBTSE9XX1RSQUNLX0NPVU5UCisgICAgY291bnRfdHJhY2tlZCsrOworI2VuZGlmCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKG9wKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9wOwogfQpAQCAtMTMxLDYgKzE1NSwzMiBAQAogICAgIHJldHVybiAwOwogfQogCit2b2lkCitfUHlUdXBsZV9NYXliZVVudHJhY2soUHlPYmplY3QgKm9wKQoreworICAgIFB5VHVwbGVPYmplY3QgKnQ7CisgICAgUHlfc3NpemVfdCBpLCBuOworCisgICAgaWYgKCFQeVR1cGxlX0NoZWNrRXhhY3Qob3ApIHx8ICFfUHlPYmplY3RfR0NfSVNfVFJBQ0tFRChvcCkpCisgICAgICAgIHJldHVybjsKKyAgICB0ID0gKFB5VHVwbGVPYmplY3QgKikgb3A7CisgICAgbiA9IFB5X1NJWkUodCk7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBQeU9iamVjdCAqZWx0ID0gUHlUdXBsZV9HRVRfSVRFTSh0LCBpKTsKKyAgICAgICAgLyogVHVwbGUgd2l0aCBOVUxMIGVsZW1lbnRzIGFyZW4ndAorICAgICAgICAgICBmdWxseSBjb25zdHJ1Y3RlZCwgZG9uJ3QgdW50cmFjaworICAgICAgICAgICB0aGVtIHlldC4gKi8KKyAgICAgICAgaWYgKCFlbHQgfHwKKyAgICAgICAgICAgIF9QeU9iamVjdF9HQ19NQVlfQkVfVFJBQ0tFRChlbHQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZmRlZiBTSE9XX1RSQUNLX0NPVU5UCisgICAgY291bnRfdHJhY2tlZC0tOworICAgIGNvdW50X3VudHJhY2tlZCsrOworI2VuZGlmCisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0sob3ApOworfQorCiBQeU9iamVjdCAqCiBQeVR1cGxlX1BhY2soUHlfc3NpemVfdCBuLCAuLi4pCiB7CkBAIC00ODMsNyArNTMzLDcgQEAKICAgICAgICAgZWxzZSBpZiAoY21wIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInR1cGxlLmluZGV4KHgpOiB4IG5vdCBpbiBsaXN0Iik7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0dXBsZS5pbmRleCh4KTogeCBub3QgaW4gdHVwbGUiKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtODI0LDcgKzg3NCw4IEBACiAKICAgICAvKiBYWFggVU5SRUYvTkVXUkVGIGludGVyZmFjZSBzaG91bGQgYmUgbW9yZSBzeW1tZXRyaWNhbCAqLwogICAgIF9QeV9ERUNfUkVGVE9UQUw7Ci0gICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0sodik7CisgICAgaWYgKF9QeU9iamVjdF9HQ19JU19UUkFDS0VEKHYpKQorICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyh2KTsKICAgICBfUHlfRm9yZ2V0UmVmZXJlbmNlKChQeU9iamVjdCAqKSB2KTsKICAgICAvKiBERUNSRUYgaXRlbXMgZGVsZXRlZCBieSBzaHJpbmthZ2UgKi8KICAgICBmb3IgKGkgPSBuZXdzaXplOyBpIDwgb2xkc2l6ZTsgaSsrKSB7CkBAIC04ODAsNiArOTMxLDkgQEAKIAogICAgICh2b2lkKVB5VHVwbGVfQ2xlYXJGcmVlTGlzdCgpOwogI2VuZGlmCisjaWZkZWYgU0hPV19UUkFDS19DT1VOVAorICAgIHNob3dfdHJhY2soKTsKKyNlbmRpZgogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKiogVHVwbGUgSXRlcmF0b3IgKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9PYmplY3RzL3R5cGVvYmplY3QuYyBiL09iamVjdHMvdHlwZW9iamVjdC5jCmluZGV4IDRjOTcyNjQuLjY2ZDZkY2EgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHlwZW9iamVjdC5jCisrKyBiL09iamVjdHMvdHlwZW9iamVjdC5jCkBAIC0xODgsOCArMTg4LDggQEAKIAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgdHlwZV9tZW1iZXJzW10gPSB7Ci0gICAgeyJfX2Jhc2ljc2l6ZV9fIiwgVF9JTlQsIG9mZnNldG9mKFB5VHlwZU9iamVjdCx0cF9iYXNpY3NpemUpLFJFQURPTkxZfSwKLSAgICB7Il9faXRlbXNpemVfXyIsIFRfSU5ULCBvZmZzZXRvZihQeVR5cGVPYmplY3QsIHRwX2l0ZW1zaXplKSwgUkVBRE9OTFl9LAorICAgIHsiX19iYXNpY3NpemVfXyIsIFRfUFlTU0laRVQsIG9mZnNldG9mKFB5VHlwZU9iamVjdCx0cF9iYXNpY3NpemUpLFJFQURPTkxZfSwKKyAgICB7Il9faXRlbXNpemVfXyIsIFRfUFlTU0laRVQsIG9mZnNldG9mKFB5VHlwZU9iamVjdCwgdHBfaXRlbXNpemUpLCBSRUFET05MWX0sCiAgICAgeyJfX2ZsYWdzX18iLCBUX0xPTkcsIG9mZnNldG9mKFB5VHlwZU9iamVjdCwgdHBfZmxhZ3MpLCBSRUFET05MWX0sCiAgICAgeyJfX3dlYWtyZWZvZmZzZXRfXyIsIFRfTE9ORywKICAgICAgb2Zmc2V0b2YoUHlUeXBlT2JqZWN0LCB0cF93ZWFrbGlzdG9mZnNldCksIFJFQURPTkxZfSwKQEAgLTMwNywxMCArMzA3LDEzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogdHlwZV9hYnN0cmFjdG1ldGhvZHMoUHlUeXBlT2JqZWN0ICp0eXBlLCB2b2lkICpjb250ZXh0KQogewotICAgIFB5T2JqZWN0ICptb2QgPSBQeURpY3RfR2V0SXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgIFB5T2JqZWN0ICptb2QgPSBOVUxMOworICAgIC8qIHR5cGUgaXRzZWxmIGhhcyBhbiBfX2Fic3RyYWN0bWV0aG9kc19fIGRlc2NyaXB0b3IgKHRoaXMpLiBEb24ndCByZXR1cm4KKyAgICAgICB0aGF0LiAqLworICAgIGlmICh0eXBlICE9ICZQeVR5cGVfVHlwZSkKKyAgICAgICAgbW9kID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKICAgICBpZiAoIW1vZCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X1hJTkNSRUYobW9kKTsKQEAgLTMyNCw4ICszMjcsMTcgQEAKICAgICAgICBhYmMuQUJDTWV0YS5fX25ld19fLCBzbyB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZG8gYW55dGhpbmcKICAgICAgICBzcGVjaWFsIHRvIHVwZGF0ZSBzdWJjbGFzc2VzLgogICAgICovCi0gICAgaW50IHJlcyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHR5cGUtPnRwX2RpY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2Fic3RyYWN0bWV0aG9kc19fIiwgdmFsdWUpOworICAgIGludCByZXM7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwgIl9fYWJzdHJhY3RtZXRob2RzX18iLCB2YWx1ZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXMgPSBQeURpY3RfRGVsSXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICBpZiAocmVzICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CiAgICAgaWYgKHJlcyA9PSAwKSB7CiAgICAgICAgIFB5VHlwZV9Nb2RpZmllZCh0eXBlKTsKICAgICAgICAgaWYgKHZhbHVlICYmIFB5T2JqZWN0X0lzVHJ1ZSh2YWx1ZSkpIHsKQEAgLTU4NiwxNCArNTk4LDYgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotdHlwZV9nZXRfaW5zdGFuY2VjaGVjayhQeU9iamVjdCAqdHlwZSwgdm9pZCAqY29udGV4dCkKLXsKLSAgICBzdGF0aWMgUHlNZXRob2REZWYgbWwgPSB7Il9faW5zdGFuY2VjaGVja19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9fX2luc3RhbmNlY2hlY2tfXywgTUVUSF9PIH07Ci0gICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ldygmbWwsIHR5cGUpOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogdHlwZV9fX3N1YmNsYXNzY2hlY2tfXyhQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmluc3QpCiB7CiAgICAgc3dpdGNoIChfUHlPYmplY3RfUmVhbElzU3ViY2xhc3MoaW5zdCwgdHlwZSkpIHsKQEAgLTYwNiwxMyArNjEwLDYgQEAKICAgICB9CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi10eXBlX2dldF9zdWJjbGFzc2NoZWNrKFB5T2JqZWN0ICp0eXBlLCB2b2lkICpjb250ZXh0KQotewotICAgIHN0YXRpYyBQeU1ldGhvZERlZiBtbCA9IHsiX19zdWJjbGFzc2NoZWNrX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX19fc3ViY2xhc3NjaGVja19fLCBNRVRIX08gfTsKLSAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3KCZtbCwgdHlwZSk7Ci19CiAKIHN0YXRpYyBQeUdldFNldERlZiB0eXBlX2dldHNldHNbXSA9IHsKICAgICB7Il9fbmFtZV9fIiwgKGdldHRlcil0eXBlX25hbWUsIChzZXR0ZXIpdHlwZV9zZXRfbmFtZSwgTlVMTH0sCkBAIC02MjIsOCArNjE5LDYgQEAKICAgICAgKHNldHRlcil0eXBlX3NldF9hYnN0cmFjdG1ldGhvZHMsIE5VTEx9LAogICAgIHsiX19kaWN0X18iLCAgKGdldHRlcil0eXBlX2RpY3QsICBOVUxMLCBOVUxMfSwKICAgICB7Il9fZG9jX18iLCAoZ2V0dGVyKXR5cGVfZ2V0X2RvYywgTlVMTCwgTlVMTH0sCi0gICAgeyJfX2luc3RhbmNlY2hlY2tfXyIsIChnZXR0ZXIpdHlwZV9nZXRfaW5zdGFuY2VjaGVjaywgTlVMTCwgTlVMTH0sCi0gICAgeyJfX3N1YmNsYXNzY2hlY2tfXyIsIChnZXR0ZXIpdHlwZV9nZXRfc3ViY2xhc3NjaGVjaywgTlVMTCwgTlVMTH0sCiAgICAgezB9CiB9OwogCkBAIC05ODgsNyArOTgzLDcgQEAKIAogICAgIC8qICBDbGVhciBzbG90cyB1cCB0byB0aGUgbmVhcmVzdCBiYXNlIHdpdGggYSBkaWZmZXJlbnQgdHBfZGVhbGxvYyAqLwogICAgIGJhc2UgPSB0eXBlOwotICAgIHdoaWxlICgoYmFzZWRlYWxsb2MgPSBiYXNlLT50cF9kZWFsbG9jKSA9PSBzdWJ0eXBlX2RlYWxsb2MpIHsKKyAgICB3aGlsZSAoYmFzZS0+dHBfZGVhbGxvYyA9PSBzdWJ0eXBlX2RlYWxsb2MpIHsKICAgICAgICAgaWYgKFB5X1NJWkUoYmFzZSkpCiAgICAgICAgICAgICBjbGVhcl9zbG90cyhiYXNlLCBzZWxmKTsKICAgICAgICAgYmFzZSA9IGJhc2UtPnRwX2Jhc2U7CkBAIC0xMTc0LDYgKzExNjksOCBAQAogICAgICB3aGVuIHRoZSBfUHlUeXBlX0xvb2t1cCgpIGNhbGwgZmFpbHM7CiAKICAgIC0gbG9va3VwX21ldGhvZCgpIGFsd2F5cyByYWlzZXMgYW4gZXhjZXB0aW9uIHVwb24gZXJyb3JzLgorCisgICAtIF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKCkgZXhwb3J0ZWQgZm9yIHRoZSBiZW5lZml0IG9mIG90aGVyIHBsYWNlcy4KICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMjA2LDYgKzEyMDMsMTMgQEAKICAgICByZXR1cm4gcmVzOwogfQogCitQeU9iamVjdCAqCitfUHlPYmplY3RfTG9va3VwU3BlY2lhbChQeU9iamVjdCAqc2VsZiwgY2hhciAqYXR0cnN0ciwgUHlPYmplY3QgKiphdHRyb2JqKQoreworICAgIGFzc2VydCghUHlJbnN0YW5jZV9DaGVjayhzZWxmKSk7CisgICAgcmV0dXJuIGxvb2t1cF9tYXliZShzZWxmLCBhdHRyc3RyLCBhdHRyb2JqKTsKK30KKwogLyogQSB2YXJpYXRpb24gb2YgUHlPYmplY3RfQ2FsbE1ldGhvZCB0aGF0IHVzZXMgbG9va3VwX21ldGhvZCgpCiAgICBpbnN0ZWFkIG9mIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoKS4gIFRoaXMgdXNlcyB0aGUgc2FtZSBjb252ZW50aW9uCiAgICBhcyBsb29rdXBfbWV0aG9kIHRvIGNhY2hlIHRoZSBpbnRlcm5lZCBuYW1lIHN0cmluZyBvYmplY3QuICovCkBAIC0yMzA1LDYgKzIzMDksOCBAQAogICAgICAgICBQeV9UUEZMQUdTX0JBU0VUWVBFOwogICAgIGlmIChiYXNlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9HQykKICAgICAgICAgdHlwZS0+dHBfZmxhZ3MgfD0gUHlfVFBGTEFHU19IQVZFX0dDOworICAgIGlmIChiYXNlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVIpCisgICAgICAgIHR5cGUtPnRwX2ZsYWdzIHw9IFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVI7CiAKICAgICAvKiBJdCdzIGEgbmV3LXN0eWxlIG51bWJlciB1bmxlc3MgaXQgc3BlY2lmaWNhbGx5IGluaGVyaXRzIGFueQogICAgICAgIG9sZC1zdHlsZSBudW1lcmljIGJlaGF2aW9yICovCkBAIC0yNjU4LDYgKzI2NjQsMTAgQEAKICAgICAgUHlEb2NfU1RSKCJtcm8oKSAtPiBsaXN0XG5yZXR1cm4gYSB0eXBlJ3MgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIiKX0sCiAgICAgeyJfX3N1YmNsYXNzZXNfXyIsIChQeUNGdW5jdGlvbil0eXBlX3N1YmNsYXNzZXMsIE1FVEhfTk9BUkdTLAogICAgICBQeURvY19TVFIoIl9fc3ViY2xhc3Nlc19fKCkgLT4gbGlzdCBvZiBpbW1lZGlhdGUgc3ViY2xhc3NlcyIpfSwKKyAgICB7Il9faW5zdGFuY2VjaGVja19fIiwgdHlwZV9fX2luc3RhbmNlY2hlY2tfXywgTUVUSF9PLAorICAgICBQeURvY19TVFIoIl9faW5zdGFuY2VjaGVja19fKCkgLT4gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIil9LAorICAgIHsiX19zdWJjbGFzc2NoZWNrX18iLCB0eXBlX19fc3ViY2xhc3NjaGVja19fLCBNRVRIX08sCisgICAgIFB5RG9jX1NUUigiX19zdWJjbGFzc2NoZWNrX18oKSAtPiBjaGVjayBpZiBhIGNsYXNzIGlzIGEgc3ViY2xhc3MiKX0sCiAgICAgezB9CiB9OwogCkBAIC0zMDAxLDEwICszMDExLDcgQEAKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlPYmplY3QgKnNsb3RzX2EsICpzbG90c19iOwogCi0gICAgaWYgKGJhc2UgIT0gYi0+dHBfYmFzZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGVxdWl2X3N0cnVjdHMoYSwgYmFzZSkgJiYgZXF1aXZfc3RydWN0cyhiLCBiYXNlKSkKLSAgICAgICAgcmV0dXJuIDE7CisgICAgYXNzZXJ0KGJhc2UgPT0gYi0+dHBfYmFzZSk7CiAgICAgc2l6ZSA9IGJhc2UtPnRwX2Jhc2ljc2l6ZTsKICAgICBpZiAoYS0+dHBfZGljdG9mZnNldCA9PSBzaXplICYmIGItPnRwX2RpY3RvZmZzZXQgPT0gc2l6ZSkKICAgICAgICAgc2l6ZSArPSBzaXplb2YoUHlPYmplY3QgKik7CkBAIC0zNDE1LDMwICszNDIyLDQ2IEBACiAgICAgUHlPYmplY3QgKmZvcm1hdF9zcGVjOwogICAgIFB5T2JqZWN0ICpzZWxmX2FzX3N0ciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmZvcm1hdF9tZXRoID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGZvcm1hdF9sZW47CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCiAgICAgICAgIHJldHVybiBOVUxMOworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGZvcm1hdF9zcGVjKSkgeworICAgICAgICBmb3JtYXRfbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKGZvcm1hdF9zcGVjKTsKICAgICAgICAgc2VsZl9hc19zdHIgPSBQeU9iamVjdF9Vbmljb2RlKHNlbGYpOwogICAgIH0gZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2soZm9ybWF0X3NwZWMpKSB7CisjZWxzZQorICAgIGlmIChQeVN0cmluZ19DaGVjayhmb3JtYXRfc3BlYykpIHsKKyNlbmRpZgorICAgICAgICBmb3JtYXRfbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUoZm9ybWF0X3NwZWMpOwogICAgICAgICBzZWxmX2FzX3N0ciA9IFB5T2JqZWN0X1N0cihzZWxmKTsKICAgICB9IGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYXJndW1lbnQgdG8gX19mb3JtYXRfXyBtdXN0IGJlIHVuaWNvZGUgb3Igc3RyIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJhcmd1bWVudCB0byBfX2Zvcm1hdF9fIG11c3QgYmUgdW5pY29kZSBvciBzdHIiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaWYgKHNlbGZfYXNfc3RyICE9IE5VTEwpIHsKLSAgICAgICAgLyogZmluZCB0aGUgZm9ybWF0IGZ1bmN0aW9uICovCi0gICAgICAgIGZvcm1hdF9tZXRoID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzZWxmX2FzX3N0ciwgIl9fZm9ybWF0X18iKTsKLSAgICAgICAgaWYgKGZvcm1hdF9tZXRoICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgIC8qIGFuZCBjYWxsIGl0ICovCi0gICAgICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGZvcm1hdF9tZXRoLCBmb3JtYXRfc3BlYywgTlVMTCk7CisgICAgICAgIC8qIElzc3VlIDc5OTQ6IElmIHdlJ3JlIGNvbnZlcnRpbmcgdG8gYSBzdHJpbmcsIHdlCisgICAgICAgICAgIHNob3VsZCByZWplY3QgZm9ybWF0IHNwZWNpZmljYXRpb25zICovCisgICAgICAgIGlmIChmb3JtYXRfbGVuID4gMCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICJvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCAiCisgICAgICAgICAgICAgInN0cmluZyBpcyBkZXByZWNhdGVkIiwgMSkgPCAwKSB7CisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogRXZlbnR1YWxseSB0aGlzIHdpbGwgYmVjb21lIGFuIGVycm9yOgorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICJub24tZW1wdHkgZm9ybWF0IHN0cmluZyBwYXNzZWQgdG8gb2JqZWN0Ll9fZm9ybWF0X18iKTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICovCiAgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfRm9ybWF0KHNlbGZfYXNfc3RyLCBmb3JtYXRfc3BlYyk7CiAgICAgfQogCitkb25lOgogICAgIFB5X1hERUNSRUYoc2VsZl9hc19zdHIpOwotICAgIFB5X1hERUNSRUYoZm9ybWF0X21ldGgpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTM1OTMsNiArMzYxNiw4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgQlVGRkVSX0ZMQUdTIChQeV9UUEZMQUdTX0hBVkVfR0VUQ0hBUkJVRkZFUiB8IFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVIpCisKIHN0YXRpYyB2b2lkCiBpbmhlcml0X3NwZWNpYWwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeVR5cGVPYmplY3QgKmJhc2UpCiB7CkBAIC0zNjAwLDkgKzM2MjUsOSBAQAogCiAgICAgLyogU3BlY2lhbCBmbGFnIG1hZ2ljICovCiAgICAgaWYgKCF0eXBlLT50cF9hc19idWZmZXIgJiYgYmFzZS0+dHBfYXNfYnVmZmVyKSB7Ci0gICAgICAgIHR5cGUtPnRwX2ZsYWdzICY9IH5QeV9UUEZMQUdTX0hBVkVfR0VUQ0hBUkJVRkZFUjsKKyAgICAgICAgdHlwZS0+dHBfZmxhZ3MgJj0gfkJVRkZFUl9GTEFHUzsKICAgICAgICAgdHlwZS0+dHBfZmxhZ3MgfD0KLSAgICAgICAgICAgIGJhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dFVENIQVJCVUZGRVI7CisgICAgICAgICAgICBiYXNlLT50cF9mbGFncyAmIEJVRkZFUl9GTEFHUzsKICAgICB9CiAgICAgaWYgKCF0eXBlLT50cF9hc19zZXF1ZW5jZSAmJiBiYXNlLT50cF9hc19zZXF1ZW5jZSkgewogICAgICAgICB0eXBlLT50cF9mbGFncyAmPSB+UHlfVFBGTEFHU19IQVZFX1NFUVVFTkNFX0lOOwpAQCAtNTk4NSw3ICs2MDEwLDcgQEAKICAgICAgICAgICAgd3JhcF9kZXNjcl9kZWxldGUsICJkZXNjci5fX2RlbGV0ZV9fKG9iaikiKSwKICAgICBGTFNMT1QoIl9faW5pdF9fIiwgdHBfaW5pdCwgc2xvdF90cF9pbml0LCAod3JhcHBlcmZ1bmMpd3JhcF9pbml0LAogICAgICAgICAgICAieC5fX2luaXRfXyguLi4pIGluaXRpYWxpemVzIHg7ICIKLSAgICAgICAgICAgInNlZSB4Ll9fY2xhc3NfXy5fX2RvY19fIGZvciBzaWduYXR1cmUiLAorICAgICAgICAgICAic2VlIGhlbHAodHlwZSh4KSkgZm9yIHNpZ25hdHVyZSIsCiAgICAgICAgICAgIFB5V3JhcHBlckZsYWdfS0VZV09SRFMpLAogICAgIFRQU0xPVCgiX19uZXdfXyIsIHRwX25ldywgc2xvdF90cF9uZXcsIE5VTEwsICIiKSwKICAgICBUUFNMT1QoIl9fZGVsX18iLCB0cF9kZWwsIHNsb3RfdHBfZGVsLCBOVUxMLCAiIiksCkBAIC02MDk0LDggKzYxMTksMTIgQEAKICAgICB9CiAgICAgZG8gewogICAgICAgICBkZXNjciA9IF9QeVR5cGVfTG9va3VwKHR5cGUsIHAtPm5hbWVfc3Ryb2JqKTsKLSAgICAgICAgaWYgKGRlc2NyID09IE5VTEwpCisgICAgICAgIGlmIChkZXNjciA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAocHRyID09ICh2b2lkKiopJnR5cGUtPnRwX2l0ZXJuZXh0KSB7CisgICAgICAgICAgICAgICAgc3BlY2lmaWMgPSBfUHlPYmplY3RfTmV4dE5vdEltcGxlbWVudGVkOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAgICAgICAgaWYgKFB5X1RZUEUoZGVzY3IpID09ICZQeVdyYXBwZXJEZXNjcl9UeXBlKSB7CiAgICAgICAgICAgICB2b2lkICoqdHB0ciA9IHJlc29sdmVfc2xvdGR1cHModHlwZSwgcC0+bmFtZV9zdHJvYmopOwogICAgICAgICAgICAgaWYgKHRwdHIgPT0gTlVMTCB8fCB0cHRyID09IHB0cikKQEAgLTYxMTQsNyArNjE0Myw3IEBACiAgICAgICAgIGVsc2UgaWYgKFB5X1RZUEUoZGVzY3IpID09ICZQeUNGdW5jdGlvbl9UeXBlICYmCiAgICAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dFVF9GVU5DVElPTihkZXNjcikgPT0KICAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRwX25ld193cmFwcGVyICYmCi0gICAgICAgICAgICAgICAgIHN0cmNtcChwLT5uYW1lLCAiX19uZXdfXyIpID09IDApCisgICAgICAgICAgICAgICAgIHB0ciA9PSAodm9pZCoqKSZ0eXBlLT50cF9uZXcpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIFRoZSBfX25ld19fIHdyYXBwZXIgaXMgbm90IGEgd3JhcHBlciBkZXNjcmlwdG9yLAogICAgICAgICAgICAgICAgc28gbXVzdCBiZSBzcGVjaWFsLWNhc2VkIGRpZmZlcmVudGx5LgpAQCAtNjEzNCw3ICs2MTYzLDcgQEAKICAgICAgICAgICAgICAgIHBvaW50IG91dCBhIGJ1ZyBpbiB0aGlzIHJlYXNvbmluZyBhIGJlZXIuICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoZGVzY3IgPT0gUHlfTm9uZSAmJgotICAgICAgICAgICAgICAgICBzdHJjbXAocC0+bmFtZSwgIl9faGFzaF9fIikgPT0gMCkgeworICAgICAgICAgICAgICAgICBwdHIgPT0gKHZvaWQqKikmdHlwZS0+dHBfaGFzaCkgewogICAgICAgICAgICAgLyogV2Ugc3BlY2lmaWNhbGx5IGFsbG93IF9faGFzaF9fIHRvIGJlIHNldCB0byBOb25lCiAgICAgICAgICAgICAgICB0byBwcmV2ZW50IGluaGVyaXRhbmNlIG9mIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBmcm9tIG9iamVjdC5fX2hhc2hfXyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYyBiL09iamVjdHMvdW5pY29kZWN0eXBlLmMKaW5kZXggNzhjNDBiNS4uOWM0MzlhNyAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYworKysgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjZGVmaW5lIFRJVExFX01BU0sgMHg0MAogI2RlZmluZSBVUFBFUl9NQVNLIDB4ODAKICNkZWZpbmUgTk9ERUxUQV9NQVNLIDB4MTAwCisjZGVmaW5lIE5VTUVSSUNfTUFTSyAweDIwMAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY29uc3QgUHlfVU5JQ09ERSB1cHBlcjsKQEAgLTM5LDM3ICs0MCwxNyBAQAogCiAjaWZkZWYgUHlfVU5JQ09ERV9XSURFCiAgICAgaWYgKGNvZGUgPj0gMHgxMTAwMDApCi0gICAgaW5kZXggPSAwOworICAgICAgICBpbmRleCA9IDA7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgewotICAgIGluZGV4ID0gaW5kZXgxWyhjb2RlPj5TSElGVCldOwotICAgIGluZGV4ID0gaW5kZXgyWyhpbmRleDw8U0hJRlQpKyhjb2RlJigoMTw8U0hJRlQpLTEpKV07CisgICAgICAgIGluZGV4ID0gaW5kZXgxWyhjb2RlPj5TSElGVCldOworICAgICAgICBpbmRleCA9IGluZGV4MlsoaW5kZXg8PFNISUZUKSsoY29kZSYoKDE8PFNISUZUKS0xKSldOwogICAgIH0KIAogICAgIHJldHVybiAmX1B5VW5pY29kZV9UeXBlUmVjb3Jkc1tpbmRleF07CiB9CiAKLS8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgY2F0ZWdvcnkgJ1psJywgJ1pwJyBvcgotICAgdHlwZSAnQicsIDAgb3RoZXJ3aXNlLiAqLwotCi1pbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhyZWdpc3RlciBjb25zdCBQeV9VTklDT0RFIGNoKQotewotICAgIHN3aXRjaCAoY2gpIHsKLSAgICBjYXNlIDB4MDAwQTogLyogTElORSBGRUVEICovCi0gICAgY2FzZSAweDAwMEQ6IC8qIENBUlJJQUdFIFJFVFVSTiAqLwotICAgIGNhc2UgMHgwMDFDOiAvKiBGSUxFIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDFEOiAvKiBHUk9VUCBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MDAxRTogLyogUkVDT1JEIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDg1OiAvKiBORVhUIExJTkUgKi8KLSAgICBjYXNlIDB4MjAyODogLyogTElORSBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MjAyOTogLyogUEFSQUdSQVBIIFNFUEFSQVRPUiAqLwotICAgIHJldHVybiAxOwotICAgIGRlZmF1bHQ6Ci0gICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiAvKiBSZXR1cm5zIHRoZSB0aXRsZWNhc2UgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gY2ggb3IganVzdAogICAgY2ggaWYgbm8gdGl0bGVjYXNlIG1hcHBpbmcgaXMga25vd24uICovCiAKQEAgLTc5LDEwICs2MCwxMCBAQAogICAgIGludCBkZWx0YSA9IGN0eXBlLT50aXRsZTsKIAogICAgIGlmIChjdHlwZS0+ZmxhZ3MgJiBOT0RFTFRBX01BU0spCi0gICAgcmV0dXJuIGRlbHRhOworCXJldHVybiBkZWx0YTsKIAogICAgIGlmIChkZWx0YSA+PSAzMjc2OCkKLSAgICAgICAgZGVsdGEgLT0gNjU1MzY7CisJICAgIGRlbHRhIC09IDY1NTM2OwogCiAgICAgcmV0dXJuIGNoICsgZGVsdGE7CiB9CkBAIC0xMTAsNyArOTEsNyBAQAogaW50IF9QeVVuaWNvZGVfSXNEZWNpbWFsRGlnaXQoUHlfVU5JQ09ERSBjaCkKIHsKICAgICBpZiAoX1B5VW5pY29kZV9Ub0RlY2ltYWxEaWdpdChjaCkgPCAwKQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIHJldHVybiAxOwogfQogCkBAIC0xMjcsNTc1ICsxMDgsMjIgQEAKIGludCBfUHlVbmljb2RlX0lzRGlnaXQoUHlfVU5JQ09ERSBjaCkKIHsKICAgICBpZiAoX1B5VW5pY29kZV9Ub0RpZ2l0KGNoKSA8IDApCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgcmV0dXJuIDE7CiB9CiAKIC8qIFJldHVybnMgdGhlIG51bWVyaWMgdmFsdWUgYXMgZG91YmxlIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nCiAgICB0aGlzIHByb3BlcnR5LCAtMS4wIG90aGVyd2lzZS4gKi8KIAotLyogVE9ETzogcmVwbGFjZSB3aXRoIHVuaWNvZGV0eXBlX2RiLmggdGFibGUgKi8KLQotZG91YmxlIF9QeVVuaWNvZGVfVG9OdW1lcmljKFB5X1VOSUNPREUgY2gpCi17Ci0gICAgc3dpdGNoIChjaCkgewotICAgIGNhc2UgMHgwRjMzOgotICAgIHJldHVybiAoZG91YmxlKSAtMSAvIDI7Ci0gICAgY2FzZSAweDE3RjA6Ci0gICAgY2FzZSAweDMwMDc6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMThBOgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDA7Ci0gICAgY2FzZSAweDA5RjQ6Ci0gICAgY2FzZSAweDE3RjE6Ci0gICAgY2FzZSAweDIxNUY6Ci0gICAgY2FzZSAweDIxNjA6Ci0gICAgY2FzZSAweDIxNzA6Ci0gICAgY2FzZSAweDMwMjE6Ci0gICAgY2FzZSAweDMxOTI6Ci0gICAgY2FzZSAweDMyMjA6Ci0gICAgY2FzZSAweDMyODA6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTA3OgotICAgIGNhc2UgMHgxMDE0MjoKLSAgICBjYXNlIDB4MTAxNTg6Ci0gICAgY2FzZSAweDEwMTU5OgotICAgIGNhc2UgMHgxMDE1QToKLSAgICBjYXNlIDB4MTAzMjA6Ci0gICAgY2FzZSAweDEwM0QxOgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDE7Ci0gICAgY2FzZSAweDAwQkQ6Ci0gICAgY2FzZSAweDBGMkE6Ci0gICAgY2FzZSAweDJDRkQ6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTQxOgotICAgIGNhc2UgMHgxMDE3NToKLSAgICBjYXNlIDB4MTAxNzY6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMSAvIDI7Ci0gICAgY2FzZSAweDIxNTM6Ci0gICAgcmV0dXJuIChkb3VibGUpIDEgLyAzOwotICAgIGNhc2UgMHgwMEJDOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDE0MDoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSAxIC8gNDsKLSAgICBjYXNlIDB4MjE1NToKLSAgICByZXR1cm4gKGRvdWJsZSkgMSAvIDU7Ci0gICAgY2FzZSAweDIxNTk6Ci0gICAgcmV0dXJuIChkb3VibGUpIDEgLyA2OwotICAgIGNhc2UgMHgyMTVCOgotICAgIHJldHVybiAoZG91YmxlKSAxIC8gODsKLSAgICBjYXNlIDB4MEJGMDoKLSAgICBjYXNlIDB4MTM3MjoKLSAgICBjYXNlIDB4MjE2OToKLSAgICBjYXNlIDB4MjE3OToKLSAgICBjYXNlIDB4MjQ2OToKLSAgICBjYXNlIDB4MjQ3RDoKLSAgICBjYXNlIDB4MjQ5MToKLSAgICBjYXNlIDB4MjRGRToKLSAgICBjYXNlIDB4Mjc3RjoKLSAgICBjYXNlIDB4Mjc4OToKLSAgICBjYXNlIDB4Mjc5MzoKLSAgICBjYXNlIDB4MzAzODoKLSAgICBjYXNlIDB4MzIyOToKLSAgICBjYXNlIDB4MzI4OToKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMTA6Ci0gICAgY2FzZSAweDEwMTQ5OgotICAgIGNhc2UgMHgxMDE1MDoKLSAgICBjYXNlIDB4MTAxNTc6Ci0gICAgY2FzZSAweDEwMTYwOgotICAgIGNhc2UgMHgxMDE2MToKLSAgICBjYXNlIDB4MTAxNjI6Ci0gICAgY2FzZSAweDEwMTYzOgotICAgIGNhc2UgMHgxMDE2NDoKLSAgICBjYXNlIDB4MTAzMjI6Ci0gICAgY2FzZSAweDEwM0QzOgotICAgIGNhc2UgMHgxMEE0NDoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSAxMDsKLSAgICBjYXNlIDB4MEJGMToKLSAgICBjYXNlIDB4MTM3QjoKLSAgICBjYXNlIDB4MjE2RDoKLSAgICBjYXNlIDB4MjE3RDoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMTk6Ci0gICAgY2FzZSAweDEwMTRCOgotICAgIGNhc2UgMHgxMDE1MjoKLSAgICBjYXNlIDB4MTAxNkE6Ci0gICAgY2FzZSAweDEwM0Q1OgotICAgIGNhc2UgMHgxMEE0NjoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSAxMDA7Ci0gICAgY2FzZSAweDBCRjI6Ci0gICAgY2FzZSAweDIxNkY6Ci0gICAgY2FzZSAweDIxN0Y6Ci0gICAgY2FzZSAweDIxODA6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTIyOgotICAgIGNhc2UgMHgxMDE0RDoKLSAgICBjYXNlIDB4MTAxNTQ6Ci0gICAgY2FzZSAweDEwMTcxOgotICAgIGNhc2UgMHgxMEE0NzoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSAxMDAwOwotICAgIGNhc2UgMHgxMzdDOgotICAgIGNhc2UgMHgyMTgyOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEyQjoKLSAgICBjYXNlIDB4MTAxNTU6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMTAwMDA7Ci0gICAgY2FzZSAweDIxNkE6Ci0gICAgY2FzZSAweDIxN0E6Ci0gICAgY2FzZSAweDI0NkE6Ci0gICAgY2FzZSAweDI0N0U6Ci0gICAgY2FzZSAweDI0OTI6Ci0gICAgY2FzZSAweDI0RUI6Ci0gICAgcmV0dXJuIChkb3VibGUpIDExOwotICAgIGNhc2UgMHgwRjJGOgotICAgIHJldHVybiAoZG91YmxlKSAxMSAvIDI7Ci0gICAgY2FzZSAweDIxNkI6Ci0gICAgY2FzZSAweDIxN0I6Ci0gICAgY2FzZSAweDI0NkI6Ci0gICAgY2FzZSAweDI0N0Y6Ci0gICAgY2FzZSAweDI0OTM6Ci0gICAgY2FzZSAweDI0RUM6Ci0gICAgcmV0dXJuIChkb3VibGUpIDEyOwotICAgIGNhc2UgMHgyNDZDOgotICAgIGNhc2UgMHgyNDgwOgotICAgIGNhc2UgMHgyNDk0OgotICAgIGNhc2UgMHgyNEVEOgotICAgIHJldHVybiAoZG91YmxlKSAxMzsKLSAgICBjYXNlIDB4MEYzMDoKLSAgICByZXR1cm4gKGRvdWJsZSkgMTMgLyAyOwotICAgIGNhc2UgMHgyNDZEOgotICAgIGNhc2UgMHgyNDgxOgotICAgIGNhc2UgMHgyNDk1OgotICAgIGNhc2UgMHgyNEVFOgotICAgIHJldHVybiAoZG91YmxlKSAxNDsKLSAgICBjYXNlIDB4MjQ2RToKLSAgICBjYXNlIDB4MjQ4MjoKLSAgICBjYXNlIDB4MjQ5NjoKLSAgICBjYXNlIDB4MjRFRjoKLSAgICByZXR1cm4gKGRvdWJsZSkgMTU7Ci0gICAgY2FzZSAweDBGMzE6Ci0gICAgcmV0dXJuIChkb3VibGUpIDE1IC8gMjsKLSAgICBjYXNlIDB4MDlGOToKLSAgICBjYXNlIDB4MjQ2RjoKLSAgICBjYXNlIDB4MjQ4MzoKLSAgICBjYXNlIDB4MjQ5NzoKLSAgICBjYXNlIDB4MjRGMDoKLSAgICByZXR1cm4gKGRvdWJsZSkgMTY7Ci0gICAgY2FzZSAweDE2RUU6Ci0gICAgY2FzZSAweDI0NzA6Ci0gICAgY2FzZSAweDI0ODQ6Ci0gICAgY2FzZSAweDI0OTg6Ci0gICAgY2FzZSAweDI0RjE6Ci0gICAgcmV0dXJuIChkb3VibGUpIDE3OwotICAgIGNhc2UgMHgwRjMyOgotICAgIHJldHVybiAoZG91YmxlKSAxNyAvIDI7Ci0gICAgY2FzZSAweDE2RUY6Ci0gICAgY2FzZSAweDI0NzE6Ci0gICAgY2FzZSAweDI0ODU6Ci0gICAgY2FzZSAweDI0OTk6Ci0gICAgY2FzZSAweDI0RjI6Ci0gICAgcmV0dXJuIChkb3VibGUpIDE4OwotICAgIGNhc2UgMHgxNkYwOgotICAgIGNhc2UgMHgyNDcyOgotICAgIGNhc2UgMHgyNDg2OgotICAgIGNhc2UgMHgyNDlBOgotICAgIGNhc2UgMHgyNEYzOgotICAgIHJldHVybiAoZG91YmxlKSAxOTsKLSAgICBjYXNlIDB4MDlGNToKLSAgICBjYXNlIDB4MTdGMjoKLSAgICBjYXNlIDB4MjE2MToKLSAgICBjYXNlIDB4MjE3MToKLSAgICBjYXNlIDB4MzAyMjoKLSAgICBjYXNlIDB4MzE5MzoKLSAgICBjYXNlIDB4MzIyMToKLSAgICBjYXNlIDB4MzI4MToKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMDg6Ci0gICAgY2FzZSAweDEwMTVCOgotICAgIGNhc2UgMHgxMDE1QzoKLSAgICBjYXNlIDB4MTAxNUQ6Ci0gICAgY2FzZSAweDEwMTVFOgotICAgIGNhc2UgMHgxMDNEMjoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSAyOwotICAgIGNhc2UgMHgyMTU0OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDE3NzoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSAyIC8gMzsKLSAgICBjYXNlIDB4MjE1NjoKLSAgICByZXR1cm4gKGRvdWJsZSkgMiAvIDU7Ci0gICAgY2FzZSAweDEzNzM6Ci0gICAgY2FzZSAweDI0NzM6Ci0gICAgY2FzZSAweDI0ODc6Ci0gICAgY2FzZSAweDI0OUI6Ci0gICAgY2FzZSAweDI0RjQ6Ci0gICAgY2FzZSAweDMwMzk6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTExOgotICAgIGNhc2UgMHgxMDNENDoKLSAgICBjYXNlIDB4MTBBNDU6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMjA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTFBOgotICAgIHJldHVybiAoZG91YmxlKSAyMDA7Ci0gICAgY2FzZSAweDEwMTIzOgotICAgIHJldHVybiAoZG91YmxlKSAyMDAwOwotICAgIGNhc2UgMHgxMDEyQzoKLSAgICByZXR1cm4gKGRvdWJsZSkgMjAwMDA7Ci0jZW5kaWYKLSAgICBjYXNlIDB4MzI1MToKLSAgICByZXR1cm4gKGRvdWJsZSkgMjE7Ci0gICAgY2FzZSAweDMyNTI6Ci0gICAgcmV0dXJuIChkb3VibGUpIDIyOwotICAgIGNhc2UgMHgzMjUzOgotICAgIHJldHVybiAoZG91YmxlKSAyMzsKLSAgICBjYXNlIDB4MzI1NDoKLSAgICByZXR1cm4gKGRvdWJsZSkgMjQ7Ci0gICAgY2FzZSAweDMyNTU6Ci0gICAgcmV0dXJuIChkb3VibGUpIDI1OwotICAgIGNhc2UgMHgzMjU2OgotICAgIHJldHVybiAoZG91YmxlKSAyNjsKLSAgICBjYXNlIDB4MzI1NzoKLSAgICByZXR1cm4gKGRvdWJsZSkgMjc7Ci0gICAgY2FzZSAweDMyNTg6Ci0gICAgcmV0dXJuIChkb3VibGUpIDI4OwotICAgIGNhc2UgMHgzMjU5OgotICAgIHJldHVybiAoZG91YmxlKSAyOTsKLSAgICBjYXNlIDB4MDlGNjoKLSAgICBjYXNlIDB4MTdGMzoKLSAgICBjYXNlIDB4MjE2MjoKLSAgICBjYXNlIDB4MjE3MjoKLSAgICBjYXNlIDB4MzAyMzoKLSAgICBjYXNlIDB4MzE5NDoKLSAgICBjYXNlIDB4MzIyMjoKLSAgICBjYXNlIDB4MzI4MjoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMDk6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMzsKLSAgICBjYXNlIDB4MEYyQjoKLSAgICByZXR1cm4gKGRvdWJsZSkgMyAvIDI7Ci0gICAgY2FzZSAweDAwQkU6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTc4OgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDMgLyA0OwotICAgIGNhc2UgMHgyMTU3OgotICAgIHJldHVybiAoZG91YmxlKSAzIC8gNTsKLSAgICBjYXNlIDB4MjE1QzoKLSAgICByZXR1cm4gKGRvdWJsZSkgMyAvIDg7Ci0gICAgY2FzZSAweDEzNzQ6Ci0gICAgY2FzZSAweDMwM0E6Ci0gICAgY2FzZSAweDMyNUE6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTEyOgotICAgIGNhc2UgMHgxMDE2NToKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSAzMDsKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMUI6Ci0gICAgY2FzZSAweDEwMTZCOgotICAgIHJldHVybiAoZG91YmxlKSAzMDA7Ci0gICAgY2FzZSAweDEwMTI0OgotICAgIHJldHVybiAoZG91YmxlKSAzMDAwOwotICAgIGNhc2UgMHgxMDEyRDoKLSAgICByZXR1cm4gKGRvdWJsZSkgMzAwMDA7Ci0jZW5kaWYKLSAgICBjYXNlIDB4MzI1QjoKLSAgICByZXR1cm4gKGRvdWJsZSkgMzE7Ci0gICAgY2FzZSAweDMyNUM6Ci0gICAgcmV0dXJuIChkb3VibGUpIDMyOwotICAgIGNhc2UgMHgzMjVEOgotICAgIHJldHVybiAoZG91YmxlKSAzMzsKLSAgICBjYXNlIDB4MzI1RToKLSAgICByZXR1cm4gKGRvdWJsZSkgMzQ7Ci0gICAgY2FzZSAweDMyNUY6Ci0gICAgcmV0dXJuIChkb3VibGUpIDM1OwotICAgIGNhc2UgMHgzMkIxOgotICAgIHJldHVybiAoZG91YmxlKSAzNjsKLSAgICBjYXNlIDB4MzJCMjoKLSAgICByZXR1cm4gKGRvdWJsZSkgMzc7Ci0gICAgY2FzZSAweDMyQjM6Ci0gICAgcmV0dXJuIChkb3VibGUpIDM4OwotICAgIGNhc2UgMHgzMkI0OgotICAgIHJldHVybiAoZG91YmxlKSAzOTsKLSAgICBjYXNlIDB4MDlGNzoKLSAgICBjYXNlIDB4MTdGNDoKLSAgICBjYXNlIDB4MjE2MzoKLSAgICBjYXNlIDB4MjE3MzoKLSAgICBjYXNlIDB4MzAyNDoKLSAgICBjYXNlIDB4MzE5NToKLSAgICBjYXNlIDB4MzIyMzoKLSAgICBjYXNlIDB4MzI4MzoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMEE6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgNDsKLSAgICBjYXNlIDB4MjE1ODoKLSAgICByZXR1cm4gKGRvdWJsZSkgNCAvIDU7Ci0gICAgY2FzZSAweDEzNzU6Ci0gICAgY2FzZSAweDMyQjU6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTEzOgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDQwOwotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExQzoKLSAgICByZXR1cm4gKGRvdWJsZSkgNDAwOwotICAgIGNhc2UgMHgxMDEyNToKLSAgICByZXR1cm4gKGRvdWJsZSkgNDAwMDsKLSAgICBjYXNlIDB4MTAxMkU6Ci0gICAgcmV0dXJuIChkb3VibGUpIDQwMDAwOwotI2VuZGlmCi0gICAgY2FzZSAweDMyQjY6Ci0gICAgcmV0dXJuIChkb3VibGUpIDQxOwotICAgIGNhc2UgMHgzMkI3OgotICAgIHJldHVybiAoZG91YmxlKSA0MjsKLSAgICBjYXNlIDB4MzJCODoKLSAgICByZXR1cm4gKGRvdWJsZSkgNDM7Ci0gICAgY2FzZSAweDMyQjk6Ci0gICAgcmV0dXJuIChkb3VibGUpIDQ0OwotICAgIGNhc2UgMHgzMkJBOgotICAgIHJldHVybiAoZG91YmxlKSA0NTsKLSAgICBjYXNlIDB4MzJCQjoKLSAgICByZXR1cm4gKGRvdWJsZSkgNDY7Ci0gICAgY2FzZSAweDMyQkM6Ci0gICAgcmV0dXJuIChkb3VibGUpIDQ3OwotICAgIGNhc2UgMHgzMkJEOgotICAgIHJldHVybiAoZG91YmxlKSA0ODsKLSAgICBjYXNlIDB4MzJCRToKLSAgICByZXR1cm4gKGRvdWJsZSkgNDk7Ci0gICAgY2FzZSAweDE3RjU6Ci0gICAgY2FzZSAweDIxNjQ6Ci0gICAgY2FzZSAweDIxNzQ6Ci0gICAgY2FzZSAweDMwMjU6Ci0gICAgY2FzZSAweDMyMjQ6Ci0gICAgY2FzZSAweDMyODQ6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTBCOgotICAgIGNhc2UgMHgxMDE0MzoKLSAgICBjYXNlIDB4MTAxNDg6Ci0gICAgY2FzZSAweDEwMTRGOgotICAgIGNhc2UgMHgxMDE1RjoKLSAgICBjYXNlIDB4MTAxNzM6Ci0gICAgY2FzZSAweDEwMzIxOgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDU7Ci0gICAgY2FzZSAweDBGMkM6Ci0gICAgcmV0dXJuIChkb3VibGUpIDUgLyAyOwotICAgIGNhc2UgMHgyMTVBOgotICAgIHJldHVybiAoZG91YmxlKSA1IC8gNjsKLSAgICBjYXNlIDB4MjE1RDoKLSAgICByZXR1cm4gKGRvdWJsZSkgNSAvIDg7Ci0gICAgY2FzZSAweDEzNzY6Ci0gICAgY2FzZSAweDIxNkM6Ci0gICAgY2FzZSAweDIxN0M6Ci0gICAgY2FzZSAweDMyQkY6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTE0OgotICAgIGNhc2UgMHgxMDE0NDoKLSAgICBjYXNlIDB4MTAxNEE6Ci0gICAgY2FzZSAweDEwMTUxOgotICAgIGNhc2UgMHgxMDE2NjoKLSAgICBjYXNlIDB4MTAxNjc6Ci0gICAgY2FzZSAweDEwMTY4OgotICAgIGNhc2UgMHgxMDE2OToKLSAgICBjYXNlIDB4MTAxNzQ6Ci0gICAgY2FzZSAweDEwMzIzOgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDUwOwotICAgIGNhc2UgMHgyMTZFOgotICAgIGNhc2UgMHgyMTdFOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExRDoKLSAgICBjYXNlIDB4MTAxNDU6Ci0gICAgY2FzZSAweDEwMTRDOgotICAgIGNhc2UgMHgxMDE1MzoKLSAgICBjYXNlIDB4MTAxNkM6Ci0gICAgY2FzZSAweDEwMTZEOgotICAgIGNhc2UgMHgxMDE2RToKLSAgICBjYXNlIDB4MTAxNkY6Ci0gICAgY2FzZSAweDEwMTcwOgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDUwMDsKLSAgICBjYXNlIDB4MjE4MToKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMjY6Ci0gICAgY2FzZSAweDEwMTQ2OgotICAgIGNhc2UgMHgxMDE0RToKLSAgICBjYXNlIDB4MTAxNzI6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgNTAwMDsKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMkY6Ci0gICAgY2FzZSAweDEwMTQ3OgotICAgIGNhc2UgMHgxMDE1NjoKLSAgICByZXR1cm4gKGRvdWJsZSkgNTAwMDA7Ci0jZW5kaWYKLSAgICBjYXNlIDB4MTdGNjoKLSAgICBjYXNlIDB4MjE2NToKLSAgICBjYXNlIDB4MjE3NToKLSAgICBjYXNlIDB4MzAyNjoKLSAgICBjYXNlIDB4MzIyNToKLSAgICBjYXNlIDB4MzI4NToKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMEM6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgNjsKLSAgICBjYXNlIDB4MTM3NzoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMTU6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgNjA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTFFOgotICAgIHJldHVybiAoZG91YmxlKSA2MDA7Ci0gICAgY2FzZSAweDEwMTI3OgotICAgIHJldHVybiAoZG91YmxlKSA2MDAwOwotICAgIGNhc2UgMHgxMDEzMDoKLSAgICByZXR1cm4gKGRvdWJsZSkgNjAwMDA7Ci0jZW5kaWYKLSAgICBjYXNlIDB4MTdGNzoKLSAgICBjYXNlIDB4MjE2NjoKLSAgICBjYXNlIDB4MjE3NjoKLSAgICBjYXNlIDB4MzAyNzoKLSAgICBjYXNlIDB4MzIyNjoKLSAgICBjYXNlIDB4MzI4NjoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMEQ6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgNzsKLSAgICBjYXNlIDB4MEYyRDoKLSAgICByZXR1cm4gKGRvdWJsZSkgNyAvIDI7Ci0gICAgY2FzZSAweDIxNUU6Ci0gICAgcmV0dXJuIChkb3VibGUpIDcgLyA4OwotICAgIGNhc2UgMHgxMzc4OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExNjoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSA3MDsKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMUY6Ci0gICAgcmV0dXJuIChkb3VibGUpIDcwMDsKLSAgICBjYXNlIDB4MTAxMjg6Ci0gICAgcmV0dXJuIChkb3VibGUpIDcwMDA7Ci0gICAgY2FzZSAweDEwMTMxOgotICAgIHJldHVybiAoZG91YmxlKSA3MDAwMDsKLSNlbmRpZgotICAgIGNhc2UgMHgxN0Y4OgotICAgIGNhc2UgMHgyMTY3OgotICAgIGNhc2UgMHgyMTc3OgotICAgIGNhc2UgMHgzMDI4OgotICAgIGNhc2UgMHgzMjI3OgotICAgIGNhc2UgMHgzMjg3OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEwRToKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSA4OwotICAgIGNhc2UgMHgxMzc5OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExNzoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSA4MDsKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMjA6Ci0gICAgcmV0dXJuIChkb3VibGUpIDgwMDsKLSAgICBjYXNlIDB4MTAxMjk6Ci0gICAgcmV0dXJuIChkb3VibGUpIDgwMDA7Ci0gICAgY2FzZSAweDEwMTMyOgotICAgIHJldHVybiAoZG91YmxlKSA4MDAwMDsKLSNlbmRpZgotICAgIGNhc2UgMHgxN0Y5OgotICAgIGNhc2UgMHgyMTY4OgotICAgIGNhc2UgMHgyMTc4OgotICAgIGNhc2UgMHgzMDI5OgotICAgIGNhc2UgMHgzMjI4OgotICAgIGNhc2UgMHgzMjg4OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEwRjoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSA5OwotICAgIGNhc2UgMHgwRjJFOgotICAgIHJldHVybiAoZG91YmxlKSA5IC8gMjsKLSAgICBjYXNlIDB4MTM3QToKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMTg6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgOTA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTIxOgotICAgIGNhc2UgMHgxMDM0QToKLSAgICByZXR1cm4gKGRvdWJsZSkgOTAwOwotICAgIGNhc2UgMHgxMDEyQToKLSAgICByZXR1cm4gKGRvdWJsZSkgOTAwMDsKLSAgICBjYXNlIDB4MTAxMzM6Ci0gICAgcmV0dXJuIChkb3VibGUpIDkwMDAwOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICByZXR1cm4gKGRvdWJsZSkgX1B5VW5pY29kZV9Ub0RpZ2l0KGNoKTsKLSAgICB9Ci19Ci0KIGludCBfUHlVbmljb2RlX0lzTnVtZXJpYyhQeV9VTklDT0RFIGNoKQogewotICAgIHJldHVybiBfUHlVbmljb2RlX1RvTnVtZXJpYyhjaCkgIT0gLTEuMDsKKyAgICBjb25zdCBfUHlVbmljb2RlX1R5cGVSZWNvcmQgKmN0eXBlID0gZ2V0dHlwZXJlY29yZChjaCk7CisKKyAgICByZXR1cm4gKGN0eXBlLT5mbGFncyAmIE5VTUVSSUNfTUFTSykgIT0gMDsKIH0KIAogI2lmbmRlZiBXQU5UX1dDVFlQRV9GVU5DVElPTlMKIAotLyogUmV0dXJucyAxIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nIHRoZSBiaWRpcmVjdGlvbmFsIHR5cGUKLSAgICdXUycsICdCJyBvciAnUycgb3IgdGhlIGNhdGVnb3J5ICdacycsIDAgb3RoZXJ3aXNlLiAqLwotCi1pbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UocmVnaXN0ZXIgY29uc3QgUHlfVU5JQ09ERSBjaCkKLXsKLSAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgY2FzZSAweDAwMDk6IC8qIEhPUklaT05UQUwgVEFCVUxBVElPTiAqLwotICAgIGNhc2UgMHgwMDBBOiAvKiBMSU5FIEZFRUQgKi8KLSAgICBjYXNlIDB4MDAwQjogLyogVkVSVElDQUwgVEFCVUxBVElPTiAqLwotICAgIGNhc2UgMHgwMDBDOiAvKiBGT1JNIEZFRUQgKi8KLSAgICBjYXNlIDB4MDAwRDogLyogQ0FSUklBR0UgUkVUVVJOICovCi0gICAgY2FzZSAweDAwMUM6IC8qIEZJTEUgU0VQQVJBVE9SICovCi0gICAgY2FzZSAweDAwMUQ6IC8qIEdST1VQIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDFFOiAvKiBSRUNPUkQgU0VQQVJBVE9SICovCi0gICAgY2FzZSAweDAwMUY6IC8qIFVOSVQgU0VQQVJBVE9SICovCi0gICAgY2FzZSAweDAwMjA6IC8qIFNQQUNFICovCi0gICAgY2FzZSAweDAwODU6IC8qIE5FWFQgTElORSAqLwotICAgIGNhc2UgMHgwMEEwOiAvKiBOTy1CUkVBSyBTUEFDRSAqLwotICAgIGNhc2UgMHgxNjgwOiAvKiBPR0hBTSBTUEFDRSBNQVJLICovCi0gICAgY2FzZSAweDIwMDA6IC8qIEVOIFFVQUQgKi8KLSAgICBjYXNlIDB4MjAwMTogLyogRU0gUVVBRCAqLwotICAgIGNhc2UgMHgyMDAyOiAvKiBFTiBTUEFDRSAqLwotICAgIGNhc2UgMHgyMDAzOiAvKiBFTSBTUEFDRSAqLwotICAgIGNhc2UgMHgyMDA0OiAvKiBUSFJFRS1QRVItRU0gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwNTogLyogRk9VUi1QRVItRU0gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwNjogLyogU0lYLVBFUi1FTSBTUEFDRSAqLwotICAgIGNhc2UgMHgyMDA3OiAvKiBGSUdVUkUgU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwODogLyogUFVOQ1RVQVRJT04gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwOTogLyogVEhJTiBTUEFDRSAqLwotICAgIGNhc2UgMHgyMDBBOiAvKiBIQUlSIFNQQUNFICovCi0gICAgY2FzZSAweDIwMEI6IC8qIFpFUk8gV0lEVEggU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAyODogLyogTElORSBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MjAyOTogLyogUEFSQUdSQVBIIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgyMDJGOiAvKiBOQVJST1cgTk8tQlJFQUsgU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjA1RjogLyogTUVESVVNIE1BVEhFTUFUSUNBTCBTUEFDRSAqLwotICAgIGNhc2UgMHgzMDAwOiAvKiBJREVPR1JBUEhJQyBTUEFDRSAqLwotICAgIHJldHVybiAxOwotICAgIGRlZmF1bHQ6Ci0gICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiAvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGNhdGVnb3J5ICdMbCcsIDAKICAgIG90aGVyd2lzZS4gKi8KIApAQCAtNzI0LDkgKzE1Miw5IEBACiAgICAgY29uc3QgX1B5VW5pY29kZV9UeXBlUmVjb3JkICpjdHlwZSA9IGdldHR5cGVyZWNvcmQoY2gpOwogICAgIGludCBkZWx0YSA9IGN0eXBlLT51cHBlcjsKICAgICBpZiAoY3R5cGUtPmZsYWdzICYgTk9ERUxUQV9NQVNLKQotICAgIHJldHVybiBkZWx0YTsKKwlyZXR1cm4gZGVsdGE7CiAgICAgaWYgKGRlbHRhID49IDMyNzY4KQotICAgICAgICBkZWx0YSAtPSA2NTUzNjsKKwkgICAgZGVsdGEgLT0gNjU1MzY7CiAgICAgcmV0dXJuIGNoICsgZGVsdGE7CiB9CiAKQEAgLTczOCw5ICsxNjYsOSBAQAogICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKICAgICBpbnQgZGVsdGEgPSBjdHlwZS0+bG93ZXI7CiAgICAgaWYgKGN0eXBlLT5mbGFncyAmIE5PREVMVEFfTUFTSykKLSAgICByZXR1cm4gZGVsdGE7CisJcmV0dXJuIGRlbHRhOwogICAgIGlmIChkZWx0YSA+PSAzMjc2OCkKLSAgICAgICAgZGVsdGEgLT0gNjU1MzY7CisJICAgIGRlbHRhIC09IDY1NTM2OwogICAgIHJldHVybiBjaCArIGRlbHRhOwogfQogCkBAIC03NTksMTEgKzE4Nyw2IEBACiAvKiBFeHBvcnQgdGhlIGludGVyZmFjZXMgdXNpbmcgdGhlIHdjaGFyX3QgdHlwZSBmb3IgcG9ydGFiaWxpdHkKICAgIHJlYXNvbnM6ICAqLwogCi1pbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UoUHlfVU5JQ09ERSBjaCkKLXsKLSAgICByZXR1cm4gaXN3c3BhY2UoY2gpOwotfQotCiBpbnQgX1B5VW5pY29kZV9Jc0xvd2VyY2FzZShQeV9VTklDT0RFIGNoKQogewogICAgIHJldHVybiBpc3dsb3dlcihjaCk7CmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCmluZGV4IGQ4ZGFiNjcuLjFjZDM2ODggMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZW9iamVjdC5jCisrKyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCkBAIC0xMTUsOSArMTE1LDkgQEAKIC8qIEZhc3QgZGV0ZWN0aW9uIG9mIHRoZSBtb3N0IGZyZXF1ZW50IHdoaXRlc3BhY2UgY2hhcmFjdGVycyAqLwogY29uc3QgdW5zaWduZWQgY2hhciBfUHlfYXNjaWlfd2hpdGVzcGFjZVtdID0gewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0vKiAgICAgY2FzZSAweDAwMDk6ICogSE9SSVpPTlRBTCBUQUJVTEFUSU9OICovCisvKiAgICAgY2FzZSAweDAwMDk6ICogQ0hBUkFDVEVSIFRBQlVMQVRJT04gKi8KIC8qICAgICBjYXNlIDB4MDAwQTogKiBMSU5FIEZFRUQgKi8KLS8qICAgICBjYXNlIDB4MDAwQjogKiBWRVJUSUNBTCBUQUJVTEFUSU9OICovCisvKiAgICAgY2FzZSAweDAwMEI6ICogTElORSBUQUJVTEFUSU9OICovCiAvKiAgICAgY2FzZSAweDAwMEM6ICogRk9STSBGRUVEICovCiAvKiAgICAgY2FzZSAweDAwMEQ6ICogQ0FSUklBR0UgUkVUVVJOICovCiAgICAgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMCwKQEAgLTE0Nyw4ICsxNDcsMTAgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGFzY2lpX2xpbmVicmVha1tdID0gewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAvKiAgICAgICAgIDB4MDAwQSwgKiBMSU5FIEZFRUQgKi8KKy8qICAgICAgICAgMHgwMDBCLCAqIExJTkUgVEFCVUxBVElPTiAqLworLyogICAgICAgICAweDAwMEMsICogRk9STSBGRUVEICovCiAvKiAgICAgICAgIDB4MDAwRCwgKiBDQVJSSUFHRSBSRVRVUk4gKi8KLSAgICAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLAorICAgIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDAsCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKIC8qICAgICAgICAgMHgwMDFDLCAqIEZJTEUgU0VQQVJBVE9SICovCiAvKiAgICAgICAgIDB4MDAxRCwgKiBHUk9VUCBTRVBBUkFUT1IgKi8KQEAgLTE5MCwxMSArMTkyLDIyIEBACiAKIC8qIHRoZSBsaW5lYnJlYWsgbWFzayBpcyBzZXQgdXAgYnkgVW5pY29kZV9Jbml0IGJlbG93ICovCiAKKyNpZiBMT05HX0JJVCA+PSAxMjgKKyNkZWZpbmUgQkxPT01fV0lEVEggMTI4CisjZWxpZiBMT05HX0JJVCA+PSA2NAorI2RlZmluZSBCTE9PTV9XSURUSCA2NAorI2VsaWYgTE9OR19CSVQgPj0gMzIKKyNkZWZpbmUgQkxPT01fV0lEVEggMzIKKyNlbHNlCisjZXJyb3IgIkxPTkdfQklUIGlzIHNtYWxsZXIgdGhhbiAzMiIKKyNlbmRpZgorCiAjZGVmaW5lIEJMT09NX01BU0sgdW5zaWduZWQgbG9uZwogCiBzdGF0aWMgQkxPT01fTUFTSyBibG9vbV9saW5lYnJlYWs7CiAKLSNkZWZpbmUgQkxPT00obWFzaywgY2gpICgobWFzayAmICgxIDw8ICgoY2gpICYgMHgxRikpKSkKKyNkZWZpbmUgQkxPT01fQUREKG1hc2ssIGNoKSAoKG1hc2sgfD0gKDFVTCA8PCAoKGNoKSAmIChCTE9PTV9XSURUSCAtIDEpKSkpKQorI2RlZmluZSBCTE9PTShtYXNrLCBjaCkgICAgICgobWFzayAmICAoMVVMIDw8ICgoY2gpICYgKEJMT09NX1dJRFRIIC0gMSkpKSkpCiAKICNkZWZpbmUgQkxPT01fTElORUJSRUFLKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAoKGNoKSA8IDEyOFUgPyBhc2NpaV9saW5lYnJlYWtbKGNoKV0gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTIwNCwxMiArMjE3LDEyIEBACiB7CiAgICAgLyogY2FsY3VsYXRlIHNpbXBsZSBibG9vbS1zdHlsZSBiaXRtYXNrIGZvciBhIGdpdmVuIHVuaWNvZGUgc3RyaW5nICovCiAKLSAgICBsb25nIG1hc2s7CisgICAgQkxPT01fTUFTSyBtYXNrOwogICAgIFB5X3NzaXplX3QgaTsKIAogICAgIG1hc2sgPSAwOwogICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgbWFzayB8PSAoMSA8PCAocHRyW2ldICYgMHgxRikpOworICAgICAgICBCTE9PTV9BREQobWFzaywgcHRyW2ldKTsKIAogICAgIHJldHVybiBtYXNrOwogfQpAQCAtMjgwLDcgKzI5Myw3IEBACiB9CiAKIC8qIFdlIGFsbG9jYXRlIG9uZSBtb3JlIGJ5dGUgdG8gbWFrZSBzdXJlIHRoZSBzdHJpbmcgaXMKLSAgIFV4MDAwMCB0ZXJtaW5hdGVkIC0tIFhYWCBpcyB0aGlzIG5lZWRlZCA/CisgICBVeDAwMDAgdGVybWluYXRlZDsgc29tZSBjb2RlIHJlbGllcyBvbiB0aGF0LgogCiAgICBYWFggVGhpcyBhbGxvY2F0b3IgY291bGQgZnVydGhlciBiZSBlbmhhbmNlZCBieSBhc3N1cmluZyB0aGF0IHRoZQogICAgZnJlZSBsaXN0IG5ldmVyIHJlZHVjZXMgaXRzIHNpemUgYmVsb3cgMS4KQEAgLTUyNyw2ICs1NDAsNjAgQEAKIAogI2lmZGVmIEhBVkVfV0NIQVJfSAogCisjaWYgKFB5X1VOSUNPREVfU0laRSA9PSAyKSAmJiBkZWZpbmVkKFNJWkVPRl9XQ0hBUl9UKSAmJiAoU0laRU9GX1dDSEFSX1QgPT0gNCkKKyMgZGVmaW5lIENPTlZFUlRfV0NIQVJfVE9fU1VSUk9HQVRFUworI2VuZGlmCisKKyNpZmRlZiBDT05WRVJUX1dDSEFSX1RPX1NVUlJPR0FURVMKKworLyogSGVyZSBzaXplb2Yod2NoYXJfdCkgaXMgNCBidXQgUHlfVU5JQ09ERV9TSVpFID09IDIsIHNvIHdlIG5lZWQKKyAgIHRvIGNvbnZlcnQgZnJvbSBVVEYzMiB0byBVVEYxNi4gKi8KKworUHlPYmplY3QgKlB5VW5pY29kZV9Gcm9tV2lkZUNoYXIocmVnaXN0ZXIgY29uc3Qgd2NoYXJfdCAqdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSkKK3sKKyAgICBQeVVuaWNvZGVPYmplY3QgKnVuaWNvZGU7CisgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgYWxsb2M7CisgICAgY29uc3Qgd2NoYXJfdCAqb3JpZ193OworCisgICAgaWYgKHcgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgYWxsb2MgPSBzaXplOworICAgIG9yaWdfdyA9IHc7CisgICAgZm9yIChpID0gc2l6ZTsgaSA+IDA7IGktLSkgeworICAgICAgICBpZiAoKncgPiAweEZGRkYpCisgICAgICAgICAgICBhbGxvYysrOworICAgICAgICB3Kys7CisgICAgfQorICAgIHcgPSBvcmlnX3c7CisgICAgdW5pY29kZSA9IF9QeVVuaWNvZGVfTmV3KGFsbG9jKTsKKyAgICBpZiAoIXVuaWNvZGUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogQ29weSB0aGUgd2NoYXJfdCBkYXRhIGludG8gdGhlIG5ldyBvYmplY3QgKi8KKyAgICB7CisgICAgICAgIHJlZ2lzdGVyIFB5X1VOSUNPREUgKnU7CisgICAgICAgIHUgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh1bmljb2RlKTsKKyAgICAgICAgZm9yIChpID0gc2l6ZTsgaSA+IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKCp3ID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgd2NoYXJfdCBvcmRpbmFsID0gKncrKzsKKyAgICAgICAgICAgICAgICBvcmRpbmFsIC09IDB4MTAwMDA7CisgICAgICAgICAgICAgICAgKnUrKyA9IDB4RDgwMCB8IChvcmRpbmFsID4+IDEwKTsKKyAgICAgICAgICAgICAgICAqdSsrID0gMHhEQzAwIHwgKG9yZGluYWwgJiAweDNGRik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKnUrKyA9ICp3Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChQeU9iamVjdCAqKXVuaWNvZGU7Cit9CisKKyNlbHNlCisKIFB5T2JqZWN0ICpQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHJlZ2lzdGVyIGNvbnN0IHdjaGFyX3QgKncsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUpCiB7CkBAIC01NTcsNiArNjI0LDEwIEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXVuaWNvZGU7CiB9CiAKKyNlbmRpZiAvKiBDT05WRVJUX1dDSEFSX1RPX1NVUlJPR0FURVMgKi8KKworI3VuZGVmIENPTlZFUlRfV0NIQVJfVE9fU1VSUk9HQVRFUworCiBzdGF0aWMgdm9pZAogbWFrZWZtdChjaGFyICpmbXQsIGludCBsb25nZmxhZywgaW50IHNpemVfdGZsYWcsIGludCB6ZXJvcGFkLCBpbnQgd2lkdGgsIGludCBwcmVjaXNpb24sIGNoYXIgYykKIHsKQEAgLTY4MSw3ICs3NTIsNyBAQAogICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLyogVVRGLTggKi8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzID0gdmFfYXJnKGNvdW50LCB1bnNpZ25lZCBjaGFyKik7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcyA9IHZhX2FyZyhjb3VudCwgY29uc3QgY2hhciopOwogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHIgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChzLCBzdHJsZW4ocyksICJyZXBsYWNlIik7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHIpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKQEAgLTE0MDgsNjkgKzE0NzksODEgQEAKIAogLyogLS0tIFVURi03IENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIHNlZSBSRkMyMTUyIGZvciBkZXRhaWxzICovCisvKiBTZWUgUkZDMjE1MiBmb3IgZGV0YWlscy4gIFdlIGVuY29kZSBjb25zZXJ2YXRpdmVseSBhbmQgZGVjb2RlIGxpYmVyYWxseS4gKi8KKworLyogVGhyZWUgc2ltcGxlIG1hY3JvcyBkZWZpbmluZyBiYXNlLTY0LiAqLworCisvKiBJcyBjIGEgYmFzZS02NCBjaGFyYWN0ZXI/ICovCisKKyNkZWZpbmUgSVNfQkFTRTY0KGMpIFwKKyAgICAoaXNhbG51bShjKSB8fCAoYykgPT0gJysnIHx8IChjKSA9PSAnLycpCisKKy8qIGdpdmVuIHRoYXQgYyBpcyBhIGJhc2UtNjQgY2hhcmFjdGVyLCB3aGF0IGlzIGl0cyBiYXNlLTY0IHZhbHVlPyAqLworCisjZGVmaW5lIEZST01fQkFTRTY0KGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoYykgPj0gJ0EnICYmIChjKSA8PSAnWicpID8gKGMpIC0gJ0EnIDogICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoYykgPj0gJ2EnICYmIChjKSA8PSAneicpID8gKGMpIC0gJ2EnICsgMjYgOiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoYykgPj0gJzAnICYmIChjKSA8PSAnOScpID8gKGMpIC0gJzAnICsgNTIgOiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIChjKSA9PSAnKycgPyA2MiA6IDYzKQorCisvKiBXaGF0IGlzIHRoZSBiYXNlLTY0IGNoYXJhY3RlciBvZiB0aGUgYm90dG9tIDYgYml0cyBvZiBuPyAqLworCisjZGVmaW5lIFRPX0JBU0U2NChuKSAgXAorICAgICgiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyJbKG4pICYgMHgzZl0pCisKKy8qIERFQ09ERV9ESVJFQ1Q6IHRoaXMgYnl0ZSBlbmNvdW50ZXJlZCBpbiBhIFVURi03IHN0cmluZyBzaG91bGQgYmUKKyAqIGRlY29kZWQgYXMgaXRzZWxmLiAgV2UgYXJlIHBlcm1pc3NpdmUgb24gZGVjb2Rpbmc7IHRoZSBvbmx5IEFTQ0lJCisgKiBieXRlIG5vdCBkZWNvZGluZyB0byBpdHNlbGYgaXMgdGhlICsgd2hpY2ggYmVnaW5zIGEgYmFzZTY0CisgKiBzdHJpbmcuICovCisKKyNkZWZpbmUgREVDT0RFX0RJUkVDVChjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoYykgPD0gMTI3ICYmIChjKSAhPSAnKycpCisKKy8qIFRoZSBVVEYtNyBlbmNvZGVyIHRyZWF0cyBBU0NJSSBjaGFyYWN0ZXJzIGRpZmZlcmVudGx5IGFjY29yZGluZyB0bworICogd2hldGhlciB0aGV5IGFyZSBTZXQgRCwgU2V0IE8sIFdoaXRlc3BhY2UsIG9yIHNwZWNpYWwgKGkuZS4gbm9uZSBvZgorICogdGhlIGFib3ZlKS4gIFNlZSBSRkMyMTUyLiAgVGhpcyBhcnJheSBpZGVudGlmaWVzIHRoZXNlIGRpZmZlcmVudAorICogc2V0czoKKyAqIDAgOiAiU2V0IEQiCisgKiAgICAgYWxwaGFudW1lcmljIGFuZCAnKCksLS4vOj8KKyAqIDEgOiAiU2V0IE8iCisgKiAgICAgISIjJCUmKjs8PT5AW11eX2B7fH0KKyAqIDIgOiAid2hpdGVzcGFjZSIKKyAqICAgICBodCBubCBjciBzcAorICogMyA6IHNwZWNpYWwgKG11c3QgYmUgYmFzZTY0IGVuY29kZWQpCisgKiAgICAgZXZlcnl0aGluZyBlbHNlIChpLmUuICtcfiBhbmQgbm9uLXByaW50aW5nIGNvZGVzIDAtOCAxMS0xMiAxNC0zMSAxMjcpCisgKi8KIAogc3RhdGljCi1jaGFyIHV0Zjdfc3BlY2lhbFsxMjhdID0gewotICAgIC8qIGluZGljYXRlIHdoZXRoZXIgYSBVVEYtNyBjaGFyYWN0ZXIgaXMgc3BlY2lhbCBpLmUuIGNhbm5vdCBiZSBkaXJlY3RseQotICAgICAgIGVuY29kZWQ6Ci0gICAgICAgMCAtIG5vdCBzcGVjaWFsCi0gICAgICAgMSAtIHNwZWNpYWwKLSAgICAgICAyIC0gd2hpdGVzcGFjZSAob3B0aW9uYWwpCi0gICAgICAgMyAtIFJGQzIxNTIgU2V0IE8gKG9wdGlvbmFsKSAqLwotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIsIDIsIDEsIDEsIDIsIDEsIDEsCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKLSAgICAyLCAzLCAzLCAzLCAzLCAzLCAzLCAwLCAwLCAwLCAzLCAxLCAwLCAwLCAwLCAxLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDMsIDMsIDMsIDAsCi0gICAgMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAxLCAzLCAzLCAzLAotICAgIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgMywgMywgMSwgMSwKLQorY2hhciB1dGY3X2NhdGVnb3J5WzEyOF0gPSB7CisvKiBudWwgc29oIHN0eCBldHggZW90IGVucSBhY2sgYmVsIGJzICBodCAgbmwgIHZ0ICBucCAgY3IgIHNvICBzaSAgKi8KKyAgICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAyLCAgMiwgIDMsICAzLCAgMiwgIDMsICAzLAorLyogZGxlIGRjMSBkYzIgZGMzIGRjNCBuYWsgc3luIGV0YiBjYW4gZW0gIHN1YiBlc2MgZnMgIGdzICBycyAgdXMgICovCisgICAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMywKKy8qIHNwICAgISAgICIgICAjICAgJCAgICUgICAmICAgJyAgICggICApICAgKiAgICsgICAsICAgLSAgIC4gICAvICAqLworICAgIDIsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAxLCAgMywgIDAsICAwLCAgMCwgIDAsCisvKiAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgIDogICA7ICAgPCAgID0gICA+ICAgPyAgKi8KKyAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwLAorLyogIEAgICBBICAgQiAgIEMgICBEICAgRSAgIEYgICBHICAgSCAgIEkgICBKICAgSyAgIEwgICBNICAgTiAgIE8gICovCisgICAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKy8qICBQICAgUSAgIFIgICBTICAgVCAgIFUgICBWICAgVyAgIFggICBZICAgWiAgIFsgICBcICAgXSAgIF4gICBfICAqLworICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDMsICAxLCAgMSwgIDEsCisvKiAgYCAgIGEgICBiICAgYyAgIGQgICBlICAgZiAgIGcgICBoICAgaSAgIGogICBrICAgbCAgIG0gICBuICAgbyAgKi8KKyAgICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorLyogIHAgICBxICAgciAgIHMgICB0ICAgdSAgIHYgICB3ICAgeCAgIHkgICB6ICAgeyAgIHwgICB9ICAgfiAgZGVsICovCisgICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAzLCAgMywKIH07CiAKLS8qIE5vdGU6IFRoZSBjb21wYXJpc29uIChjKSA8PSAwIGlzIGEgdHJpY2sgdG8gd29yay1hcm91bmQgZ2NjCi0gICB3YXJuaW5ncyBhYm91dCB0aGUgY29tcGFyaXNvbiBhbHdheXMgYmVpbmcgZmFsc2U7IHNpbmNlCi0gICB1dGY3X3NwZWNpYWxbMF0gaXMgMSwgd2UgY2FuIHNhZmVseSBtYWtlIHRoYXQgb25lIGNvbXBhcmlzb24KLSAgIHRydWUgICovCisvKiBFTkNPREVfRElSRUNUOiB0aGlzIGNoYXJhY3RlciBzaG91bGQgYmUgZW5jb2RlZCBhcyBpdHNlbGYuICBUaGUKKyAqIGFuc3dlciBkZXBlbmRzIG9uIHdoZXRoZXIgd2UgYXJlIGVuY29kaW5nIHNldCBPIGFzIGl0c2VsZiwgYW5kIGFsc28KKyAqIG9uIHdoZXRoZXIgd2UgYXJlIGVuY29kaW5nIHdoaXRlc3BhY2UgYXMgaXRzZWxmLiAgUkZDMjE1MiBtYWtlcyBpdAorICogY2xlYXIgdGhhdCB0aGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgdmFyeSBiZXR3ZWVuCisgKiBhcHBsaWNhdGlvbnMsIHNvIHRoaXMgY29kZSBuZWVkcyB0byBiZSBmbGV4aWJsZS4gICovCiAKLSNkZWZpbmUgU1BFQ0lBTChjLCBlbmNvZGVPLCBlbmNvZGVXUykgICAgICAgICAgICAgICAgICAgXAotICAgICgoYykgPiAxMjcgfHwgKGMpIDw9IDAgfHwgdXRmN19zcGVjaWFsWyhjKV0gPT0gMSB8fCBcCi0gICAgIChlbmNvZGVXUyAmJiAodXRmN19zcGVjaWFsWyhjKV0gPT0gMikpIHx8ICAgICAgICAgIFwKLSAgICAgKGVuY29kZU8gJiYgKHV0Zjdfc3BlY2lhbFsoYyldID09IDMpKSkKLQotI2RlZmluZSBCNjQobikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyJbKG4pICYgMHgzZl0pCi0jZGVmaW5lIEI2NENIQVIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGlzYWxudW0oYykgfHwgKGMpID09ICcrJyB8fCAoYykgPT0gJy8nKQotI2RlZmluZSBVQjY0KGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKChjKSA9PSAnKycgPyA2MiA6IChjKSA9PSAnLycgPyA2MyA6IChjKSA+PSAnYScgPyAgIFwKLSAgICAgKGMpIC0gNzEgOiAoYykgPj0gJ0EnID8gKGMpIC0gNjUgOiAoYykgKyA0ICkKLQotI2RlZmluZSBFTkNPREUob3V0LCBjaCwgYml0cykgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChiaXRzID49IDYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAqb3V0KysgPSBCNjQoY2ggPj4gKGJpdHMtNikpOyAgICAgICAgICAgXAotICAgICAgICBiaXRzIC09IDY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotI2RlZmluZSBERUNPREUob3V0LCBjaCwgYml0cywgc3Vycm9nYXRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChiaXRzID49IDE2KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9VTklDT0RFIG91dENoID0gKFB5X1VOSUNPREUpICgoY2ggPj4gKGJpdHMtMTYpKSAmIDB4ZmZmZik7ICAgXAotICAgICAgICBiaXRzIC09IDE2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoc3Vycm9nYXRlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgLyogV2UgaGF2ZSBhbHJlYWR5IGdlbmVyYXRlZCBhbiBlcnJvciBmb3IgdGhlIGhpZ2ggc3Vycm9nYXRlIFwKLSAgICAgICAgICAgICAgIHNvIGxldCdzIG5vdCBib3RoZXIgc2VlaW5nIGlmIHRoZSBsb3cgc3Vycm9nYXRlIGlzIGNvcnJlY3Qgb3Igbm90ICovIFwKLSAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIGlmICgweERDMDAgPD0gb3V0Q2ggJiYgb3V0Q2ggPD0gMHhERkZGKSB7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIC8qIFRoaXMgaXMgYSBzdXJyb2dhdGUgcGFpci4gVW5mb3J0dW5hdGVseSB3ZSBjYW4ndCByZXByZXNlbnQgXAotICAgICAgICAgICAgICAgaXQgaW4gYSAxNi1iaXQgY2hhcmFjdGVyICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3Vycm9nYXRlID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZXJybXNnID0gImNvZGUgcGFpcnMgYXJlIG5vdCBzdXBwb3J0ZWQiOyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZ290byB1dGY3RXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgKm91dCsrID0gb3V0Q2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KKyNkZWZpbmUgRU5DT0RFX0RJUkVDVChjLCBkaXJlY3RPLCBkaXJlY3RXUykgICAgICAgICAgICAgXAorICAgICgoYykgPCAxMjggJiYgKGMpID4gMCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgodXRmN19jYXRlZ29yeVsoYyldID09IDApIHx8ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChkaXJlY3RXUyAmJiAodXRmN19jYXRlZ29yeVsoYyldID09IDIpKSB8fCAgICAgICAgXAorICAgICAgKGRpcmVjdE8gJiYgKHV0ZjdfY2F0ZWdvcnlbKGMpXSA9PSAxKSkpKQogCiBQeU9iamVjdCAqUHlVbmljb2RlX0RlY29kZVVURjcoY29uc3QgY2hhciAqcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCkBAIC0xNDc5LDYgKzE1NjIsMTMgQEAKICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bChzLCBzaXplLCBlcnJvcnMsIE5VTEwpOwogfQogCisvKiBUaGUgZGVjb2Rlci4gIFRoZSBvbmx5IHN0YXRlIHdlIHByZXNlcnZlIGlzIG91ciByZWFkIHBvc2l0aW9uLAorICogaS5lLiBob3cgbWFueSBjaGFyYWN0ZXJzIHdlIGhhdmUgY29uc3VtZWQuICBTbyBpZiB3ZSBlbmQgaW4gdGhlCisgKiBtaWRkbGUgb2YgYSBzaGlmdCBzZXF1ZW5jZSB3ZSBoYXZlIHRvIGJhY2sgb2ZmIHRoZSByZWFkIHBvc2l0aW9uCisgKiBhbmQgdGhlIG91dHB1dCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZSwgb3RoZXJ3aXNlIHdlIGxvc2UKKyAqIGFsbCB0aGUgc2hpZnQgc3RhdGUgKHNlZW4gYml0cywgbnVtYmVyIG9mIGJpdHMgc2VlbiwgaGlnaAorICogc3Vycm9nYXRlKS4gKi8KKwogUHlPYmplY3QgKlB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWwoY29uc3QgY2hhciAqcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywKQEAgLTE0OTMsOSArMTU4MywxMCBAQAogICAgIFB5X1VOSUNPREUgKnA7CiAgICAgY29uc3QgY2hhciAqZXJybXNnID0gIiI7CiAgICAgaW50IGluU2hpZnQgPSAwOwotICAgIHVuc2lnbmVkIGludCBiaXRzbGVmdCA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyBjaGFyc2xlZnQgPSAwOwotICAgIGludCBzdXJyb2dhdGUgPSAwOworICAgIFB5X1VOSUNPREUgKnNoaWZ0T3V0U3RhcnQ7CisgICAgdW5zaWduZWQgaW50IGJhc2U2NGJpdHMgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgYmFzZTY0YnVmZmVyID0gMDsKKyAgICBQeV9VTklDT0RFIHN1cnJvZ2F0ZSA9IDA7CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAKQEAgLTE1MDksNzkgKzE2MDAsMTA3IEBACiAgICAgfQogCiAgICAgcCA9IHVuaWNvZGUtPnN0cjsKKyAgICBzaGlmdE91dFN0YXJ0ID0gcDsKICAgICBlID0gcyArIHNpemU7CiAKICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjaDsKLSAgICAgIHJlc3RhcnQ6Ci0gICAgICAgIGNoID0gKHVuc2lnbmVkIGNoYXIpICpzOworICAgICAgICBQeV9VTklDT0RFIGNoID0gKHVuc2lnbmVkIGNoYXIpICpzOwogCi0gICAgICAgIGlmIChpblNoaWZ0KSB7Ci0gICAgICAgICAgICBpZiAoKGNoID09ICctJykgfHwgIUI2NENIQVIoY2gpKSB7CisgICAgICAgIGlmIChpblNoaWZ0KSB7IC8qIGluIGEgYmFzZS02NCBzZWN0aW9uICovCisgICAgICAgICAgICBpZiAoSVNfQkFTRTY0KGNoKSkgeyAvKiBjb25zdW1lIGEgYmFzZS02NCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAoYmFzZTY0YnVmZmVyIDw8IDYpIHwgRlJPTV9CQVNFNjQoY2gpOworICAgICAgICAgICAgICAgIGJhc2U2NGJpdHMgKz0gNjsKKyAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgaWYgKGJhc2U2NGJpdHMgPj0gMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogd2UgaGF2ZSBlbm91Z2ggYml0cyBmb3IgYSBVVEYtMTYgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBvdXRDaCA9IChQeV9VTklDT0RFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJhc2U2NGJ1ZmZlciA+PiAoYmFzZTY0Yml0cy0xNikpOworICAgICAgICAgICAgICAgICAgICBiYXNlNjRiaXRzIC09IDE2OworICAgICAgICAgICAgICAgICAgICBiYXNlNjRidWZmZXIgJj0gKDEgPDwgYmFzZTY0Yml0cykgLSAxOyAvKiBjbGVhciBoaWdoIGJpdHMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1cnJvZ2F0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhwZWN0aW5nIGEgc2Vjb25kIHN1cnJvZ2F0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dENoID49IDB4REMwMCAmJiBvdXRDaCA8PSAweERGRkYpIHsKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gKCgoc3Vycm9nYXRlICYgMHgzRkYpPDwxMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKG91dENoICYgMHgzRkYpKSArIDB4MTAwMDA7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBzdXJyb2dhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IG91dENoOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybXNnID0gInNlY29uZCBzdXJyb2dhdGUgbWlzc2luZyI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB1dGY3RXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0Q2ggPj0gMHhEODAwICYmIG91dENoIDw9IDB4REJGRikgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3Qgc3Vycm9nYXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSBvdXRDaDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRDaCA+PSAweERDMDAgJiYgb3V0Q2ggPD0gMHhERkZGKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJtc2cgPSAidW5leHBlY3RlZCBzZWNvbmQgc3Vycm9nYXRlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdXRmN0Vycm9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IG91dENoOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7IC8qIG5vdyBsZWF2aW5nIGEgYmFzZS02NCBzZWN0aW9uICovCiAgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDA7CiAgICAgICAgICAgICAgICAgcysrOwotCi0gICAgICAgICAgICAgICAgLyogcCwgY2hhcnNsZWZ0LCBiaXRzbGVmdCwgc3Vycm9nYXRlID0gKi8gREVDT0RFKHAsIGNoYXJzbGVmdCwgYml0c2xlZnQsIHN1cnJvZ2F0ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJpdHNsZWZ0ID49IDYpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogVGhlIHNoaWZ0IHNlcXVlbmNlIGhhcyBhIHBhcnRpYWwgY2hhcmFjdGVyIGluIGl0LiBJZgotICAgICAgICAgICAgICAgICAgICAgICBiaXRzbGVmdCA8IDYgdGhlbiB3ZSBjb3VsZCBqdXN0IGNsYXNzaWZ5IGl0IGFzIHBhZGRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRoYXQgaXMgbm90IHRoZSBjYXNlIGhlcmUgKi8KLQotICAgICAgICAgICAgICAgICAgICBlcnJtc2cgPSAicGFydGlhbCBjaGFyYWN0ZXIgaW4gc2hpZnQgc2VxdWVuY2UiOworICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybXNnID0gInNlY29uZCBzdXJyb2dhdGUgbWlzc2luZyBhdCBlbmQgb2Ygc2hpZnQgc2VxdWVuY2UiOwogICAgICAgICAgICAgICAgICAgICBnb3RvIHV0ZjdFcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogQWNjb3JkaW5nIHRvIFJGQzIxNTIgdGhlIHJlbWFpbmluZyBiaXRzIHNob3VsZCBiZSB6ZXJvLiBXZQotICAgICAgICAgICAgICAgICAgIGNob29zZSB0byBzaWduYWwgYW4gZXJyb3IvaW5zZXJ0IGEgcmVwbGFjZW1lbnQgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgICAgaGVyZSBzbyBpbmRpY2F0ZSB0aGUgcG90ZW50aWFsIG9mIGEgbWlzZW5jb2RlZCBjaGFyYWN0ZXIuICovCi0KLSAgICAgICAgICAgICAgICAvKiBPbiB4ODYsIGEgPDwgYiA9PSBhIDw8IChiJTMyKSBzbyBtYWtlIHN1cmUgdGhhdCBiaXRzbGVmdCAhPSAwICovCi0gICAgICAgICAgICAgICAgaWYgKGJpdHNsZWZ0ICYmIGNoYXJzbGVmdCA8PCAoc2l6ZW9mKGNoYXJzbGVmdCkgKiA4IC0gYml0c2xlZnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVycm1zZyA9ICJub24temVybyBwYWRkaW5nIGJpdHMgaW4gc2hpZnQgc2VxdWVuY2UiOwotICAgICAgICAgICAgICAgICAgICBnb3RvIHV0ZjdFcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgocyA8IGUpICYmICgqKHMpID09ICctJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnLSc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpblNoaWZ0ID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZTY0Yml0cyA+IDApIHsgLyogbGVmdC1vdmVyIGJpdHMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2U2NGJpdHMgPj0gNikgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UndmUgc2VlbiBhdCBsZWFzdCBvbmUgYmFzZS02NCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm1zZyA9ICJwYXJ0aWFsIGNoYXJhY3RlciBpbiBzaGlmdCBzZXF1ZW5jZSI7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHV0ZjdFcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoU1BFQ0lBTChjaCwwLDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVycm1zZyA9ICJ1bmV4cGVjdGVkIHNwZWNpYWwgY2hhcmFjdGVyIjsKLSAgICAgICAgICAgICAgICAgICAgZ290byB1dGY3RXJyb3I7Ci0gICAgICAgICAgICAgICAgfSBlbHNlICB7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogU29tZSBiaXRzIHJlbWFpbjsgdGhleSBzaG91bGQgYmUgemVybyAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2U2NGJ1ZmZlciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybXNnID0gIm5vbi16ZXJvIHBhZGRpbmcgYml0cyBpbiBzaGlmdCBzZXF1ZW5jZSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB1dGY3RXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoICE9ICctJykgeworICAgICAgICAgICAgICAgICAgICAvKiAnLScgaXMgYWJzb3JiZWQ7IG90aGVyIHRlcm1pbmF0aW5nCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgYXJlIHByZXNlcnZlZCAqLwogICAgICAgICAgICAgICAgICAgICAqcCsrID0gY2g7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjaGFyc2xlZnQgPSAoY2hhcnNsZWZ0IDw8IDYpIHwgVUI2NChjaCk7Ci0gICAgICAgICAgICAgICAgYml0c2xlZnQgKz0gNjsKLSAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgLyogcCwgY2hhcnNsZWZ0LCBiaXRzbGVmdCwgc3Vycm9nYXRlID0gKi8gREVDT0RFKHAsIGNoYXJzbGVmdCwgYml0c2xlZnQsIHN1cnJvZ2F0ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoIGNoID09ICcrJyApIHsKICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIGlmIChzIDwgZSAmJiAqcyA9PSAnLScpIHsKKyAgICAgICAgICAgIHMrKzsgLyogY29uc3VtZSAnKycgKi8KKyAgICAgICAgICAgIGlmIChzIDwgZSAmJiAqcyA9PSAnLScpIHsgLyogJystJyBlbmNvZGVzICcrJyAqLwogICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICAgICAgICAgICAqcCsrID0gJysnOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsgLyogYmVnaW4gYmFzZTY0LWVuY29kZWQgc2VjdGlvbiAqLwogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAxOwotICAgICAgICAgICAgICAgIGJpdHNsZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICBzaGlmdE91dFN0YXJ0ID0gcDsKKyAgICAgICAgICAgICAgICBiYXNlNjRiaXRzID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChTUEVDSUFMKGNoLDAsMCkpIHsKLSAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgIGVycm1zZyA9ICJ1bmV4cGVjdGVkIHNwZWNpYWwgY2hhcmFjdGVyIjsKLSAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIGdvdG8gdXRmN0Vycm9yOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICBlbHNlIGlmIChERUNPREVfRElSRUNUKGNoKSkgeyAvKiBjaGFyYWN0ZXIgZGVjb2RlcyBhcyBpdHNlbGYgKi8KICAgICAgICAgICAgICpwKysgPSBjaDsKICAgICAgICAgICAgIHMrKzsKICAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIGVycm1zZyA9ICJ1bmV4cGVjdGVkIHNwZWNpYWwgY2hhcmFjdGVyIjsKKyAgICAgICAgICAgIGdvdG8gdXRmN0Vycm9yOworICAgICAgICB9CiAgICAgICAgIGNvbnRpbnVlOwotICAgICAgdXRmN0Vycm9yOgordXRmN0Vycm9yOgogICAgICAgICBvdXRwb3MgPSBwLVB5VW5pY29kZV9BU19VTklDT0RFKHVuaWNvZGUpOwogICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwogICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCkBAIC0xNTkyLDIzICsxNzExLDMzIEBACiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCi0gICAgaWYgKGluU2hpZnQgJiYgIWNvbnN1bWVkKSB7Ci0gICAgICAgIG91dHBvcyA9IHAtUHlVbmljb2RlX0FTX1VOSUNPREUodW5pY29kZSk7Ci0gICAgICAgIGVuZGlucG9zID0gc2l6ZTsKLSAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAotICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAidXRmNyIsICJ1bnRlcm1pbmF0ZWQgc2hpZnQgc2VxdWVuY2UiLAotICAgICAgICAgICAgICAgIHN0YXJ0cywgc2l6ZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MsICZwKSkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgaWYgKHMgPCBlKQotICAgICAgICAgICAgZ290byByZXN0YXJ0OworICAgIC8qIGVuZCBvZiBzdHJpbmcgKi8KKworICAgIGlmIChpblNoaWZ0ICYmICFjb25zdW1lZCkgeyAvKiBpbiBzaGlmdCBzZXF1ZW5jZSwgbm8gbW9yZSB0byBmb2xsb3cgKi8KKyAgICAgICAgLyogaWYgd2UncmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLCB0aGF0J3MgYW4gZXJyb3IgKi8KKyAgICAgICAgaWYgKHN1cnJvZ2F0ZSB8fAorICAgICAgICAgICAgICAgIChiYXNlNjRiaXRzID49IDYpIHx8CisgICAgICAgICAgICAgICAgKGJhc2U2NGJpdHMgPiAwICYmIGJhc2U2NGJ1ZmZlciAhPSAwKSkgeworICAgICAgICAgICAgb3V0cG9zID0gcC1QeVVuaWNvZGVfQVNfVU5JQ09ERSh1bmljb2RlKTsKKyAgICAgICAgICAgIGVuZGlucG9zID0gc2l6ZTsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAidXRmNyIsICJ1bnRlcm1pbmF0ZWQgc2hpZnQgc2VxdWVuY2UiLAorICAgICAgICAgICAgICAgICAgICBzdGFydHMsIHNpemUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAorICAgICAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcywgJnApKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQogICAgIH0KKworICAgIC8qIHJldHVybiBzdGF0ZSAqLwogICAgIGlmIChjb25zdW1lZCkgewotICAgICAgICBpZihpblNoaWZ0KQorICAgICAgICBpZiAoaW5TaGlmdCkgeworICAgICAgICAgICAgcCA9IHNoaWZ0T3V0U3RhcnQ7IC8qIGJhY2sgb2ZmIG91dHB1dCAqLwogICAgICAgICAgICAgKmNvbnN1bWVkID0gc3RhcnRpbnBvczsKLSAgICAgICAgZWxzZQorICAgICAgICB9CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgKmNvbnN1bWVkID0gcy1zdGFydHM7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoX1B5VW5pY29kZV9SZXNpemUoJnVuaWNvZGUsIHAgLSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh1bmljb2RlKSkgPCAwKQpAQCAtMTYyOCwyNyArMTc1NywyNyBAQAogCiBQeU9iamVjdCAqUHlVbmljb2RlX0VuY29kZVVURjcoY29uc3QgUHlfVU5JQ09ERSAqcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuY29kZVNldE8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuY29kZVdoaXRlU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2U2NFNldE8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2U2NFdoaXRlU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewogICAgIFB5T2JqZWN0ICp2OwogICAgIC8qIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHRpZ2h0ZW4gdGhpcyB3b3JzdCBjYXNlICovCi0gICAgUHlfc3NpemVfdCBjYkFsbG9jYXRlZCA9IDUgKiBzaXplOworICAgIFB5X3NzaXplX3QgYWxsb2NhdGVkID0gOCAqIHNpemU7CiAgICAgaW50IGluU2hpZnQgPSAwOwogICAgIFB5X3NzaXplX3QgaSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGJpdHNsZWZ0ID0gMDsKLSAgICB1bnNpZ25lZCBsb25nIGNoYXJzbGVmdCA9IDA7CisgICAgdW5zaWduZWQgaW50IGJhc2U2NGJpdHMgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgYmFzZTY0YnVmZmVyID0gMDsKICAgICBjaGFyICogb3V0OwogICAgIGNoYXIgKiBzdGFydDsKIAotICAgIGlmIChjYkFsbG9jYXRlZCAvIDUgIT0gc2l6ZSkKKyAgICBpZiAoYWxsb2NhdGVkIC8gOCAhPSBzaXplKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKIAogICAgIGlmIChzaXplID09IDApCiAgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKTsKIAotICAgIHYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBjYkFsbG9jYXRlZCk7CisgICAgdiA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGFsbG9jYXRlZCk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE2NTYsNzggKzE3ODUsNzcgQEAKICAgICBmb3IgKDtpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFB5X1VOSUNPREUgY2ggPSBzW2ldOwogCi0gICAgICAgIGlmICghaW5TaGlmdCkgewotICAgICAgICAgICAgaWYgKGNoID09ICcrJykgewotICAgICAgICAgICAgICAgICpvdXQrKyA9ICcrJzsKLSAgICAgICAgICAgICAgICAqb3V0KysgPSAnLSc7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFNQRUNJQUwoY2gsIGVuY29kZVNldE8sIGVuY29kZVdoaXRlU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY2hhcnNsZWZ0ID0gY2g7Ci0gICAgICAgICAgICAgICAgYml0c2xlZnQgPSAxNjsKLSAgICAgICAgICAgICAgICAqb3V0KysgPSAnKyc7Ci0gICAgICAgICAgICAgICAgLyogb3V0LCBjaGFyc2xlZnQsIGJpdHNsZWZ0ID0gKi8gRU5DT0RFKG91dCwgY2hhcnNsZWZ0LCBiaXRzbGVmdCk7Ci0gICAgICAgICAgICAgICAgaW5TaGlmdCA9IGJpdHNsZWZ0ID4gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKm91dCsrID0gKGNoYXIpIGNoOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFTUEVDSUFMKGNoLCBlbmNvZGVTZXRPLCBlbmNvZGVXaGl0ZVNwYWNlKSkgewotICAgICAgICAgICAgICAgICpvdXQrKyA9IEI2NChjaGFyc2xlZnQgPDwgKDYtYml0c2xlZnQpKTsKLSAgICAgICAgICAgICAgICBjaGFyc2xlZnQgPSAwOwotICAgICAgICAgICAgICAgIGJpdHNsZWZ0ID0gMDsKLSAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXJzIG5vdCBpbiB0aGUgQkFTRTY0IHNldCBpbXBsaWNpdGx5IHVuc2hpZnQgdGhlIHNlcXVlbmNlCi0gICAgICAgICAgICAgICAgICAgc28gbm8gJy0nIGlzIHJlcXVpcmVkLCBleGNlcHQgaWYgdGhlIGNoYXJhY3RlciBpcyBpdHNlbGYgYSAnLScgKi8KLSAgICAgICAgICAgICAgICBpZiAoQjY0Q0hBUihjaCkgfHwgY2ggPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICctJzsKKyAgICAgICAgaWYgKGluU2hpZnQpIHsKKyAgICAgICAgICAgIGlmIChFTkNPREVfRElSRUNUKGNoLCAhYmFzZTY0U2V0TywgIWJhc2U2NFdoaXRlU3BhY2UpKSB7CisgICAgICAgICAgICAgICAgLyogc2hpZnRpbmcgb3V0ICovCisgICAgICAgICAgICAgICAgaWYgKGJhc2U2NGJpdHMpIHsgLyogb3V0cHV0IHJlbWFpbmluZyBiaXRzICovCisgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9IFRPX0JBU0U2NChiYXNlNjRidWZmZXIgPDwgKDYtYmFzZTY0Yml0cykpOworICAgICAgICAgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAwOworICAgICAgICAgICAgICAgICAgICBiYXNlNjRiaXRzID0gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDA7Ci0gICAgICAgICAgICAgICAgKm91dCsrID0gKGNoYXIpIGNoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBiaXRzbGVmdCArPSAxNjsKLSAgICAgICAgICAgICAgICBjaGFyc2xlZnQgPSAoY2hhcnNsZWZ0IDw8IDE2KSB8IGNoOwotICAgICAgICAgICAgICAgIC8qIG91dCwgY2hhcnNsZWZ0LCBiaXRzbGVmdCA9ICovIEVOQ09ERShvdXQsIGNoYXJzbGVmdCwgYml0c2xlZnQpOwotCi0gICAgICAgICAgICAgICAgLyogSWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIHNwZWNpYWwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHRlcm1pbmF0ZQotICAgICAgICAgICAgICAgICAgIHRoZSBzaGlmdCBzZXF1ZW5jZS4gSWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIG5vdCBhIEJBU0U2NCBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICAgICBvciAnLScgdGhlbiB0aGUgc2hpZnQgc2VxdWVuY2Ugd2lsbCBiZSB0ZXJtaW5hdGVkIGltcGxpY2l0bHkgYW5kIHdlCi0gICAgICAgICAgICAgICAgICAgZG9uJ3QgaGF2ZSB0byBpbnNlcnQgYSAnLScuICovCi0KLSAgICAgICAgICAgICAgICBpZiAoYml0c2xlZnQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBzaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGNoMiA9IHNbaSsxXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNQRUNJQUwoY2gyLCBlbmNvZGVTZXRPLCBlbmNvZGVXaGl0ZVNwYWNlKSkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEI2NENIQVIoY2gyKSB8fCBjaDIgPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gJy0nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluU2hpZnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNoaWZ0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gJy0nOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXJzIG5vdCBpbiB0aGUgQkFTRTY0IHNldCBpbXBsaWNpdGx5IHVuc2hpZnQgdGhlIHNlcXVlbmNlCisgICAgICAgICAgICAgICAgICAgc28gbm8gJy0nIGlzIHJlcXVpcmVkLCBleGNlcHQgaWYgdGhlIGNoYXJhY3RlciBpcyBpdHNlbGYgYSAnLScgKi8KKyAgICAgICAgICAgICAgICBpZiAoSVNfQkFTRTY0KGNoKSB8fCBjaCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gJy0nOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqb3V0KysgPSAoY2hhcikgY2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVuY29kZV9jaGFyOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvKiBub3QgaW4gYSBzaGlmdCBzZXF1ZW5jZSAqLworICAgICAgICAgICAgaWYgKGNoID09ICcrJykgeworICAgICAgICAgICAgICAgICpvdXQrKyA9ICcrJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICctJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKEVOQ09ERV9ESVJFQ1QoY2gsICFiYXNlNjRTZXRPLCAhYmFzZTY0V2hpdGVTcGFjZSkpIHsKKyAgICAgICAgICAgICAgICAqb3V0KysgPSAoY2hhcikgY2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAqb3V0KysgPSAnKyc7CisgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDE7CisgICAgICAgICAgICAgICAgZ290byBlbmNvZGVfY2hhcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsKK2VuY29kZV9jaGFyOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgICAgICBpZiAoY2ggPj0gMHgxMDAwMCkgeworICAgICAgICAgICAgLyogY29kZSBmaXJzdCBzdXJyb2dhdGUgKi8KKyAgICAgICAgICAgIGJhc2U2NGJpdHMgKz0gMTY7CisgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAoYmFzZTY0YnVmZmVyIDw8IDE2KSB8IDB4ZDgwMCB8ICgoY2gtMHgxMDAwMCkgPj4gMTApOworICAgICAgICAgICAgd2hpbGUgKGJhc2U2NGJpdHMgPj0gNikgeworICAgICAgICAgICAgICAgICpvdXQrKyA9IFRPX0JBU0U2NChiYXNlNjRidWZmZXIgPj4gKGJhc2U2NGJpdHMtNikpOworICAgICAgICAgICAgICAgIGJhc2U2NGJpdHMgLT0gNjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIHByZXBhcmUgc2Vjb25kIHN1cnJvZ2F0ZSAqLworICAgICAgICAgICAgY2ggPSAgMHhEQzAwIHwgKChjaC0weDEwMDAwKSAmIDB4M0ZGKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGJhc2U2NGJpdHMgKz0gMTY7CisgICAgICAgIGJhc2U2NGJ1ZmZlciA9IChiYXNlNjRidWZmZXIgPDwgMTYpIHwgY2g7CisgICAgICAgIHdoaWxlIChiYXNlNjRiaXRzID49IDYpIHsKKyAgICAgICAgICAgICpvdXQrKyA9IFRPX0JBU0U2NChiYXNlNjRidWZmZXIgPj4gKGJhc2U2NGJpdHMtNikpOworICAgICAgICAgICAgYmFzZTY0Yml0cyAtPSA2OworICAgICAgICB9CiAgICAgfQotICAgIGlmIChiaXRzbGVmdCkgewotICAgICAgICAqb3V0Kys9IEI2NChjaGFyc2xlZnQgPDwgKDYtYml0c2xlZnQpICk7CisgICAgaWYgKGJhc2U2NGJpdHMpCisgICAgICAgICpvdXQrKz0gVE9fQkFTRTY0KGJhc2U2NGJ1ZmZlciA8PCAoNi1iYXNlNjRiaXRzKSApOworICAgIGlmIChpblNoaWZ0KQogICAgICAgICAqb3V0KysgPSAnLSc7Ci0gICAgfQogCi0gICAgX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgb3V0IC0gc3RhcnQpOworICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZ2LCBvdXQgLSBzdGFydCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiB2OwogfQogCi0jdW5kZWYgU1BFQ0lBTAotI3VuZGVmIEI2NAotI3VuZGVmIEI2NENIQVIKLSN1bmRlZiBVQjY0Ci0jdW5kZWYgRU5DT0RFCi0jdW5kZWYgREVDT0RFCisjdW5kZWYgSVNfQkFTRTY0CisjdW5kZWYgRlJPTV9CQVNFNjQKKyN1bmRlZiBUT19CQVNFNjQKKyN1bmRlZiBERUNPREVfRElSRUNUCisjdW5kZWYgRU5DT0RFX0RJUkVDVAogCiAvKiAtLS0gVVRGLTggQ29kZWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMjAzMyw3ICsyMTYxLDggQEAKICAgICAgICAgLyogQ3V0IGJhY2sgdG8gc2l6ZSBhY3R1YWxseSBuZWVkZWQuICovCiAgICAgICAgIG5uZWVkZWQgPSBwIC0gUHlTdHJpbmdfQVNfU1RSSU5HKHYpOwogICAgICAgICBhc3NlcnQobm5lZWRlZCA8PSBuYWxsb2NhdGVkKTsKLSAgICAgICAgX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgbm5lZWRlZCk7CisgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZ2LCBubmVlZGVkKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gdjsKIApAQCAtMjA3NywxMCArMjIwNiwxMSBAQAogICAgIFB5X1VOSUNPREUgKnA7CiAjaWZuZGVmIFB5X1VOSUNPREVfV0lERQogICAgIGludCBwYWlycyA9IDA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcXE7CiAjZWxzZQogICAgIGNvbnN0IGludCBwYWlycyA9IDA7CiAjZW5kaWYKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxLCAqZSwgKnFxOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEsICplOwogICAgIGludCBibyA9IDA7ICAgICAgIC8qIGFzc3VtZSBuYXRpdmUgb3JkZXJpbmcgYnkgZGVmYXVsdCAqLwogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9ICIiOwogICAgIC8qIE9mZnNldHMgZnJvbSBxIGZvciByZXRyaWV2aW5nIGJ5dGVzIGluIHRoZSByaWdodCBvcmRlci4gKi8KQEAgLTI3NTcsMTYgKzI4ODcsNyBAQAogICAgICAgICAgICAgbWVzc2FnZSA9ICJtYWxmb3JtZWQgXFxOIGNoYXJhY3RlciBlc2NhcGUiOwogICAgICAgICAgICAgaWYgKHVjbmhhc2hfQ0FQSSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgLyogbG9hZCB0aGUgdW5pY29kZSBkYXRhIG1vZHVsZSAqLwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptLCAqYXBpOwotICAgICAgICAgICAgICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrKCJ1bmljb2RlZGF0YSIpOwotICAgICAgICAgICAgICAgIGlmIChtID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gdWNuaGFzaEVycm9yOwotICAgICAgICAgICAgICAgIGFwaSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobSwgInVjbmhhc2hfQ0FQSSIpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gdWNuaGFzaEVycm9yOwotICAgICAgICAgICAgICAgIHVjbmhhc2hfQ0FQSSA9IChfUHlVbmljb2RlX05hbWVfQ0FQSSAqKVB5Q09iamVjdF9Bc1ZvaWRQdHIoYXBpKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXBpKTsKKyAgICAgICAgICAgICAgICB1Y25oYXNoX0NBUEkgPSAoX1B5VW5pY29kZV9OYW1lX0NBUEkgKilQeUNhcHN1bGVfSW1wb3J0KFB5VW5pY29kZURhdGFfQ0FQU1VMRV9OQU1FLCAxKTsKICAgICAgICAgICAgICAgICBpZiAodWNuaGFzaF9DQVBJID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gdWNuaGFzaEVycm9yOwogICAgICAgICAgICAgfQpAQCAtMzAwNCw3ICszMTI1LDggQEAKICAgICAgICAgKnArKyA9IFB5U3RyaW5nX0FTX1NUUklORyhyZXByKVsxXTsKIAogICAgICpwID0gJ1wwJzsKLSAgICBfUHlTdHJpbmdfUmVzaXplKCZyZXByLCBwIC0gUHlTdHJpbmdfQVNfU1RSSU5HKHJlcHIpKTsKKyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcmVwciwgcCAtIFB5U3RyaW5nX0FTX1NUUklORyhyZXByKSkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiByZXByOwogfQogCkBAIC0zMjI1LDcgKzMzNDcsOCBAQAogICAgICAgICAgICAgKnArKyA9IChjaGFyKSBjaDsKICAgICB9CiAgICAgKnAgPSAnXDAnOwotICAgIF9QeVN0cmluZ19SZXNpemUoJnJlcHIsIHAgLSBxKTsKKyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcmVwciwgcCAtIHEpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gcmVwcjsKIH0KIApAQCAtMzU2NCw5ICszNjg3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbHN0YXJ0LXN0YXJ0cCwgY29sbGVuZC1zdGFydHAsICZuZXdwb3MpOwogICAgICAgICAgICAgICAgIGlmIChyZXB1bmljb2RlID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAvKiBuZWVkIG1vcmUgc3BhY2U/IChhdCBsZWFzdCBlbm91Z2ggZm9yIHdoYXQgd2UKLSAgICAgICAgICAgICAgICAgICBoYXZlK3RoZSByZXBsYWNlbWVudCt0aGUgcmVzdCBvZiB0aGUgc3RyaW5nLCBzbwotICAgICAgICAgICAgICAgICAgIHdlIHdvbid0IGhhdmUgdG8gY2hlY2sgc3BhY2UgZm9yIGVuY29kYWJsZSBjaGFyYWN0ZXJzKSAqLworICAgICAgICAgICAgICAgIC8qIG5lZWQgbW9yZSBzcGFjZT8gKGF0IGxlYXN0IGVub3VnaCBmb3Igd2hhdCB3ZSBoYXZlK3RoZQorICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50K3RoZSByZXN0IG9mIHRoZSBzdHJpbmcsIHNvIHdlIHdvbid0IGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICBjaGVjayBzcGFjZSBmb3IgZW5jb2RhYmxlIGNoYXJhY3RlcnMpICovCiAgICAgICAgICAgICAgICAgcmVzcG9zID0gc3RyLVB5U3RyaW5nX0FTX1NUUklORyhyZXMpOwogICAgICAgICAgICAgICAgIHJlcHNpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUocmVwdW5pY29kZSk7CiAgICAgICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gcmVzcG9zK3JlcHNpemUrKGVuZHAtY29sbGVuZCk7CkBAIC00MjE3LDcgKzQzNDAsNyBAQAogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgIGtleSA9IHZhbHVlID0gTlVMTDsKKyAgICAgICAgICAgIHZhbHVlID0gTlVMTDsKICAgICAgICAgICAgIGtleSA9IFB5SW50X0Zyb21Mb25nKGRlY29kZVtpXSk7CiAgICAgICAgICAgICB2YWx1ZSA9IFB5SW50X0Zyb21Mb25nKGkpOwogICAgICAgICAgICAgaWYgKCFrZXkgfHwgIXZhbHVlKQpAQCAtNTEyNCwyNyArNTI0NywyNyBAQAogLyogLS0tIEhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpbmNsdWRlICJzdHJpbmdsaWIvdW5pY29kZWRlZnMuaCIKLQotI2RlZmluZSBGUk9NX1VOSUNPREUKLQogI2luY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiCiAKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKIAogLyogaGVscGVyIG1hY3JvIHRvIGZpeHVwIHN0YXJ0L2VuZCBzbGljZSB2YWx1ZXMgKi8KLSNkZWZpbmUgRklYX1NUQVJUX0VORChvYmopICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoc3RhcnQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhcnQgKz0gKG9iaiktPmxlbmd0aDsgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoc3RhcnQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhcnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZW5kID4gKG9iaiktPmxlbmd0aCkgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZW5kID0gKG9iaiktPmxlbmd0aDsgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZW5kIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZW5kICs9IChvYmopLT5sZW5ndGg7ICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZW5kIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZW5kID0gMDsKKyNkZWZpbmUgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKSAgICAgICAgIFwKKyAgICBpZiAoZW5kID4gbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChlbmQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGVuZCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGVuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoc3RhcnQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhcnQgKz0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKIFB5X3NzaXplX3QgUHlVbmljb2RlX0NvdW50KFB5T2JqZWN0ICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3Vic3RyLApAQCAtNTE2NCwxMCArNTI4NywxMCBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgRklYX1NUQVJUX0VORChzdHJfb2JqKTsKLQorICAgIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIHN0cl9vYmotPmxlbmd0aCk7CiAgICAgcmVzdWx0ID0gc3RyaW5nbGliX2NvdW50KAotICAgICAgICBzdHJfb2JqLT5zdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHN1Yl9vYmotPnN0ciwgc3ViX29iai0+bGVuZ3RoCisgICAgICAgIHN0cl9vYmotPnN0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCwgc3ViX29iai0+c3RyLCBzdWJfb2JqLT5sZW5ndGgsCisgICAgICAgIFBZX1NTSVpFX1RfTUFYCiAgICAgICAgICk7CiAKICAgICBQeV9ERUNSRUYoc3ViX29iaik7CkBAIC01MjIyLDggKzUzNDUsNyBAQAogICAgIGlmIChzdWJzdHJpbmctPmxlbmd0aCA9PSAwKQogICAgICAgICByZXR1cm4gMTsKIAotICAgIEZJWF9TVEFSVF9FTkQoc2VsZik7Ci0KKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBzZWxmLT5sZW5ndGgpOwogICAgIGVuZCAtPSBzdWJzdHJpbmctPmxlbmd0aDsKICAgICBpZiAoZW5kIDwgc3RhcnQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTYwMCwzMDUgKzU3MjIsNDAgQEAKICAgICByZXR1cm4gdTsKIH0KIAotI2RlZmluZSBTUExJVF9BUFBFTkQoZGF0YSwgbGVmdCwgcmlnaHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgoZGF0YSkgKyAobGVmdCksIChyaWdodCkgLSAobGVmdCkpOyAgICAgXAotICAgIGlmICghc3RyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHN0cikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYoc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLQotc3RhdGljCi1QeU9iamVjdCAqc3BsaXRfd2hpdGVzcGFjZShQeVVuaWNvZGVPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCitQeU9iamVjdCAqUHlVbmljb2RlX1NwbGl0bGluZXMoUHlPYmplY3QgKnN0cmluZywgaW50IGtlZXBlbmRzKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBzZWxmLT5sZW5ndGg7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICByZWdpc3RlciBjb25zdCBQeV9VTklDT0RFICpidWYgPSBzZWxmLT5zdHI7Ci0KLSAgICBmb3IgKGkgPSBqID0gMDsgaSA8IGxlbjsgKSB7Ci0gICAgICAgIC8qIGZpbmQgYSB0b2tlbiAqLwotICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgaiA9IGk7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmICFQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgaWYgKGogPCBpKSB7Ci0gICAgICAgICAgICBpZiAobWF4Y291bnQtLSA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU1BMSVRfQVBQRU5EKGJ1ZiwgaiwgaSk7Ci0gICAgICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBqID0gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaiA8IGxlbikgewotICAgICAgICBTUExJVF9BUFBFTkQoYnVmLCBqLCBsZW4pOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLQotICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotUHlPYmplY3QgKlB5VW5pY29kZV9TcGxpdGxpbmVzKFB5T2JqZWN0ICpzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtlZXBlbmRzKQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QgKmxpc3Q7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeV9VTklDT0RFICpkYXRhOwogCiAgICAgc3RyaW5nID0gUHlVbmljb2RlX0Zyb21PYmplY3Qoc3RyaW5nKTsKICAgICBpZiAoc3RyaW5nID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShzdHJpbmcpOwotICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfU0laRShzdHJpbmcpOwogCi0gICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKCFsaXN0KQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KLSAgICBmb3IgKGkgPSBqID0gMDsgaSA8IGxlbjsgKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgZW9sOwotCi0gICAgICAgIC8qIEZpbmQgYSBsaW5lIGFuZCBhcHBlbmQgaXQgKi8KLSAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgIUJMT09NX0xJTkVCUkVBSyhkYXRhW2ldKSkKLSAgICAgICAgICAgIGkrKzsKLQotICAgICAgICAvKiBTa2lwIHRoZSBsaW5lIGJyZWFrIHJlYWRpbmcgQ1JMRiBhcyBvbmUgbGluZSBicmVhayAqLwotICAgICAgICBlb2wgPSBpOwotICAgICAgICBpZiAoaSA8IGxlbikgewotICAgICAgICAgICAgaWYgKGRhdGFbaV0gPT0gJ1xyJyAmJiBpICsgMSA8IGxlbiAmJgotICAgICAgICAgICAgICAgIGRhdGFbaSsxXSA9PSAnXG4nKQotICAgICAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBpZiAoa2VlcGVuZHMpCi0gICAgICAgICAgICAgICAgZW9sID0gaTsKLSAgICAgICAgfQotICAgICAgICBTUExJVF9BUFBFTkQoZGF0YSwgaiwgZW9sKTsKLSAgICAgICAgaiA9IGk7Ci0gICAgfQotICAgIGlmIChqIDwgbGVuKSB7Ci0gICAgICAgIFNQTElUX0FQUEVORChkYXRhLCBqLCBsZW4pOwotICAgIH0KKyAgICBsaXN0ID0gc3RyaW5nbGliX3NwbGl0bGluZXMoCisgICAgICAgIChQeU9iamVjdCopIHN0cmluZywgUHlVbmljb2RlX0FTX1VOSUNPREUoc3RyaW5nKSwKKyAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHN0cmluZyksIGtlZXBlbmRzKTsKIAogICAgIFB5X0RFQ1JFRihzdHJpbmcpOwogICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRihsaXN0KTsKLSAgICBQeV9ERUNSRUYoc3RyaW5nKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljCi1QeU9iamVjdCAqc3BsaXRfY2hhcihQeVVuaWNvZGVPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgY2gsCi0gICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBzZWxmLT5sZW5ndGg7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICByZWdpc3RlciBjb25zdCBQeV9VTklDT0RFICpidWYgPSBzZWxmLT5zdHI7Ci0KLSAgICBmb3IgKGkgPSBqID0gMDsgaSA8IGxlbjsgKSB7Ci0gICAgICAgIGlmIChidWZbaV0gPT0gY2gpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BUFBFTkQoYnVmLCBqLCBpKTsKLSAgICAgICAgICAgIGkgPSBqID0gaSArIDE7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaSsrOwotICAgIH0KLSAgICBpZiAoaiA8PSBsZW4pIHsKLSAgICAgICAgU1BMSVRfQVBQRU5EKGJ1ZiwgaiwgbGVuKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYwotUHlPYmplY3QgKnNwbGl0X3N1YnN0cmluZyhQeVVuaWNvZGVPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnN1YnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIFB5X3NzaXplX3QgbGVuID0gc2VsZi0+bGVuZ3RoOwotICAgIFB5X3NzaXplX3Qgc3VibGVuID0gc3Vic3RyaW5nLT5sZW5ndGg7Ci0gICAgUHlPYmplY3QgKnN0cjsKLQotICAgIGZvciAoaSA9IGogPSAwOyBpIDw9IGxlbiAtIHN1YmxlbjsgKSB7Ci0gICAgICAgIGlmIChQeV9VTklDT0RFX01BVENIKHNlbGYsIGksIHN1YnN0cmluZykpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BUFBFTkQoc2VsZi0+c3RyLCBqLCBpKTsKLSAgICAgICAgICAgIGkgPSBqID0gaSArIHN1YmxlbjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpKys7Ci0gICAgfQotICAgIGlmIChqIDw9IGxlbikgewotICAgICAgICBTUExJVF9BUFBFTkQoc2VsZi0+c3RyLCBqLCBsZW4pOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLQotICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljCi1QeU9iamVjdCAqcnNwbGl0X3doaXRlc3BhY2UoUHlVbmljb2RlT2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IHNlbGYtPmxlbmd0aDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIHJlZ2lzdGVyIGNvbnN0IFB5X1VOSUNPREUgKmJ1ZiA9IHNlbGYtPnN0cjsKLQotICAgIGZvciAoaSA9IGogPSBsZW4gLSAxOyBpID49IDA7ICkgewotICAgICAgICAvKiBmaW5kIGEgdG9rZW4gKi8KLSAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgaiA9IGk7Ci0gICAgICAgIHdoaWxlIChpID49IDAgJiYgIVB5X1VOSUNPREVfSVNTUEFDRShidWZbaV0pKQotICAgICAgICAgICAgaS0tOwotICAgICAgICBpZiAoaiA+IGkpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BUFBFTkQoYnVmLCBpICsgMSwgaiArIDEpOwotICAgICAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICBqID0gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaiA+PSAwKSB7Ci0gICAgICAgIFNQTElUX0FQUEVORChidWYsIDAsIGogKyAxKTsKLSAgICB9Ci0gICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMKLVB5T2JqZWN0ICpyc3BsaXRfY2hhcihQeVVuaWNvZGVPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBjaCwKLSAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBzZWxmLT5sZW5ndGg7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICByZWdpc3RlciBjb25zdCBQeV9VTklDT0RFICpidWYgPSBzZWxmLT5zdHI7Ci0KLSAgICBmb3IgKGkgPSBqID0gbGVuIC0gMTsgaSA+PSAwOyApIHsKLSAgICAgICAgaWYgKGJ1ZltpXSA9PSBjaCkgewotICAgICAgICAgICAgaWYgKG1heGNvdW50LS0gPD0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFNQTElUX0FQUEVORChidWYsIGkgKyAxLCBqICsgMSk7Ci0gICAgICAgICAgICBqID0gaSA9IGkgLSAxOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGktLTsKLSAgICB9Ci0gICAgaWYgKGogPj0gLTEpIHsKLSAgICAgICAgU1BMSVRfQVBQRU5EKGJ1ZiwgMCwgaiArIDEpOwotICAgIH0KLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYwotUHlPYmplY3QgKnJzcGxpdF9zdWJzdHJpbmcoUHlVbmljb2RlT2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnN1YnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IHNlbGYtPmxlbmd0aDsKLSAgICBQeV9zc2l6ZV90IHN1YmxlbiA9IHN1YnN0cmluZy0+bGVuZ3RoOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0KLSAgICBmb3IgKGkgPSBsZW4gLSBzdWJsZW4sIGogPSBsZW47IGkgPj0gMDsgKSB7Ci0gICAgICAgIGlmIChQeV9VTklDT0RFX01BVENIKHNlbGYsIGksIHN1YnN0cmluZykpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BUFBFTkQoc2VsZi0+c3RyLCBpICsgc3VibGVuLCBqKTsKLSAgICAgICAgICAgIGogPSBpOwotICAgICAgICAgICAgaSAtPSBzdWJsZW47Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaS0tOwotICAgIH0KLSAgICBpZiAoaiA+PSAwKSB7Ci0gICAgICAgIFNQTElUX0FQUEVORChzZWxmLT5zdHIsIDAsIGopOwotICAgIH0KLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLSN1bmRlZiBTUExJVF9BUFBFTkQKLQotc3RhdGljCiBQeU9iamVjdCAqc3BsaXQoUHlVbmljb2RlT2JqZWN0ICpzZWxmLAogICAgICAgICAgICAgICAgIFB5VW5pY29kZU9iamVjdCAqc3Vic3RyaW5nLAogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCiB7Ci0gICAgUHlPYmplY3QgKmxpc3Q7Ci0KICAgICBpZiAobWF4Y291bnQgPCAwKQogICAgICAgICBtYXhjb3VudCA9IFBZX1NTSVpFX1RfTUFYOwogCi0gICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKCFsaXN0KQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChzdWJzdHJpbmcgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHNwbGl0X3doaXRlc3BhY2Uoc2VsZixsaXN0LG1heGNvdW50KTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdF93aGl0ZXNwYWNlKAorICAgICAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgIHNlbGYtPnN0ciwgc2VsZi0+bGVuZ3RoLCBtYXhjb3VudAorICAgICAgICAgICAgKTsKIAotICAgIGVsc2UgaWYgKHN1YnN0cmluZy0+bGVuZ3RoID09IDEpCi0gICAgICAgIHJldHVybiBzcGxpdF9jaGFyKHNlbGYsbGlzdCxzdWJzdHJpbmctPnN0clswXSxtYXhjb3VudCk7Ci0KLSAgICBlbHNlIGlmIChzdWJzdHJpbmctPmxlbmd0aCA9PSAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbXB0eSBzZXBhcmF0b3IiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHNwbGl0X3N1YnN0cmluZyhzZWxmLGxpc3Qsc3Vic3RyaW5nLG1heGNvdW50KTsKKyAgICByZXR1cm4gc3RyaW5nbGliX3NwbGl0KAorICAgICAgICAoUHlPYmplY3QqKSBzZWxmLCAgc2VsZi0+c3RyLCBzZWxmLT5sZW5ndGgsCisgICAgICAgIHN1YnN0cmluZy0+c3RyLCBzdWJzdHJpbmctPmxlbmd0aCwKKyAgICAgICAgbWF4Y291bnQKKyAgICAgICAgKTsKIH0KIAogc3RhdGljCkBAIC01OTA2LDI4ICs1NzYzLDE5IEBACiAgICAgICAgICAgICAgICAgIFB5VW5pY29kZU9iamVjdCAqc3Vic3RyaW5nLAogICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQogewotICAgIFB5T2JqZWN0ICpsaXN0OwotCiAgICAgaWYgKG1heGNvdW50IDwgMCkKICAgICAgICAgbWF4Y291bnQgPSBQWV9TU0laRV9UX01BWDsKIAotICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmICghbGlzdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoc3Vic3RyaW5nID09IE5VTEwpCi0gICAgICAgIHJldHVybiByc3BsaXRfd2hpdGVzcGFjZShzZWxmLGxpc3QsbWF4Y291bnQpOworICAgICAgICByZXR1cm4gc3RyaW5nbGliX3JzcGxpdF93aGl0ZXNwYWNlKAorICAgICAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgIHNlbGYtPnN0ciwgc2VsZi0+bGVuZ3RoLCBtYXhjb3VudAorICAgICAgICAgICAgKTsKIAotICAgIGVsc2UgaWYgKHN1YnN0cmluZy0+bGVuZ3RoID09IDEpCi0gICAgICAgIHJldHVybiByc3BsaXRfY2hhcihzZWxmLGxpc3Qsc3Vic3RyaW5nLT5zdHJbMF0sbWF4Y291bnQpOwotCi0gICAgZWxzZSBpZiAoc3Vic3RyaW5nLT5sZW5ndGggPT0gMCkgewotICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc2VwYXJhdG9yIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJldHVybiByc3BsaXRfc3Vic3RyaW5nKHNlbGYsbGlzdCxzdWJzdHJpbmcsbWF4Y291bnQpOworICAgIHJldHVybiBzdHJpbmdsaWJfcnNwbGl0KAorICAgICAgICAoUHlPYmplY3QqKSBzZWxmLCAgc2VsZi0+c3RyLCBzZWxmLT5sZW5ndGgsCisgICAgICAgIHN1YnN0cmluZy0+c3RyLCBzdWJzdHJpbmctPmxlbmd0aCwKKyAgICAgICAgbWF4Y291bnQKKyAgICAgICAgKTsKIH0KIAogc3RhdGljCkBAIC01OTQwLDEwICs1Nzg4LDE0IEBACiAKICAgICBpZiAobWF4Y291bnQgPCAwKQogICAgICAgICBtYXhjb3VudCA9IFBZX1NTSVpFX1RfTUFYOworICAgIGVsc2UgaWYgKG1heGNvdW50ID09IDAgfHwgc2VsZi0+bGVuZ3RoID09IDApCisgICAgICAgIGdvdG8gbm90aGluZzsKIAogICAgIGlmIChzdHIxLT5sZW5ndGggPT0gc3RyMi0+bGVuZ3RoKSB7Ci0gICAgICAgIC8qIHNhbWUgbGVuZ3RoICovCiAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgLyogc2FtZSBsZW5ndGggKi8KKyAgICAgICAgaWYgKHN0cjEtPmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgZ290byBub3RoaW5nOwogICAgICAgICBpZiAoc3RyMS0+bGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgIC8qIHJlcGxhY2UgY2hhcmFjdGVycyAqLwogICAgICAgICAgICAgUHlfVU5JQ09ERSB1MSwgdTI7CkBAIC01OTYyLDggKzU4MTQsOCBAQAogICAgICAgICAgICAgICAgICAgICB1LT5zdHJbaV0gPSB1MjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpID0gZmFzdHNlYXJjaCgKLSAgICAgICAgICAgICAgICBzZWxmLT5zdHIsIHNlbGYtPmxlbmd0aCwgc3RyMS0+c3RyLCBzdHIxLT5sZW5ndGgsIEZBU1RfU0VBUkNICisgICAgICAgICAgICBpID0gc3RyaW5nbGliX2ZpbmQoCisgICAgICAgICAgICAgICAgc2VsZi0+c3RyLCBzZWxmLT5sZW5ndGgsIHN0cjEtPnN0ciwgc3RyMS0+bGVuZ3RoLCAwCiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIGlmIChpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG5vdGhpbmc7CkBAIC01OTcxLDI1ICs1ODIzLDMwIEBACiAgICAgICAgICAgICBpZiAoIXUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBQeV9VTklDT0RFX0NPUFkodS0+c3RyLCBzZWxmLT5zdHIsIHNlbGYtPmxlbmd0aCk7Ci0gICAgICAgICAgICB3aGlsZSAoaSA8PSBzZWxmLT5sZW5ndGggLSBzdHIxLT5sZW5ndGgpCi0gICAgICAgICAgICAgICAgaWYgKFB5X1VOSUNPREVfTUFUQ0goc2VsZiwgaSwgc3RyMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tbWF4Y291bnQgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfQ09QWSh1LT5zdHIraSwgc3RyMi0+c3RyLCBzdHIyLT5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBpICs9IHN0cjEtPmxlbmd0aDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaSsrOworCisgICAgICAgICAgICAvKiBjaGFuZ2UgZXZlcnl0aGluZyBpbi1wbGFjZSwgc3RhcnRpbmcgd2l0aCB0aGlzIG9uZSAqLworICAgICAgICAgICAgUHlfVU5JQ09ERV9DT1BZKHUtPnN0citpLCBzdHIyLT5zdHIsIHN0cjItPmxlbmd0aCk7CisgICAgICAgICAgICBpICs9IHN0cjEtPmxlbmd0aDsKKworICAgICAgICAgICAgd2hpbGUgKCAtLW1heGNvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIGkgPSBzdHJpbmdsaWJfZmluZChzZWxmLT5zdHIraSwgc2VsZi0+bGVuZ3RoLWksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cjEtPnN0ciwgc3RyMS0+bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9DT1BZKHUtPnN0citpLCBzdHIyLT5zdHIsIHN0cjItPmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaSArPSBzdHIxLT5sZW5ndGg7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogCi0gICAgICAgIFB5X3NzaXplX3QgbiwgaSwgaiwgZTsKKyAgICAgICAgUHlfc3NpemVfdCBuLCBpLCBqOwogICAgICAgICBQeV9zc2l6ZV90IHByb2R1Y3QsIG5ld19zaXplLCBkZWx0YTsKICAgICAgICAgUHlfVU5JQ09ERSAqcDsKIAogICAgICAgICAvKiByZXBsYWNlIHN0cmluZ3MgKi8KLSAgICAgICAgbiA9IHN0cmluZ2xpYl9jb3VudChzZWxmLT5zdHIsIHNlbGYtPmxlbmd0aCwgc3RyMS0+c3RyLCBzdHIxLT5sZW5ndGgpOwotICAgICAgICBpZiAobiA+IG1heGNvdW50KQotICAgICAgICAgICAgbiA9IG1heGNvdW50OworICAgICAgICBuID0gc3RyaW5nbGliX2NvdW50KHNlbGYtPnN0ciwgc2VsZi0+bGVuZ3RoLCBzdHIxLT5zdHIsIHN0cjEtPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhjb3VudCk7CiAgICAgICAgIGlmIChuID09IDApCiAgICAgICAgICAgICBnb3RvIG5vdGhpbmc7CiAgICAgICAgIC8qIG5ld19zaXplID0gc2VsZi0+bGVuZ3RoICsgbiAqIChzdHIyLT5sZW5ndGggLSBzdHIxLT5sZW5ndGgpKTsgKi8KQEAgLTYwMTUsMTkgKzU4NzIsMTUgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpID0gMDsKICAgICAgICAgcCA9IHUtPnN0cjsKLSAgICAgICAgZSA9IHNlbGYtPmxlbmd0aCAtIHN0cjEtPmxlbmd0aDsKICAgICAgICAgaWYgKHN0cjEtPmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CiAgICAgICAgICAgICAgICAgLyogbG9vayBmb3IgbmV4dCBtYXRjaCAqLwotICAgICAgICAgICAgICAgIGogPSBpOwotICAgICAgICAgICAgICAgIHdoaWxlIChqIDw9IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFB5X1VOSUNPREVfTUFUQ0goc2VsZiwgaiwgc3RyMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaiA+IGkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGogPiBlKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaiA9IHN0cmluZ2xpYl9maW5kKHNlbGYtPnN0citpLCBzZWxmLT5sZW5ndGgtaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyMS0+c3RyLCBzdHIxLT5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkpOworICAgICAgICAgICAgICAgIGlmIChqID09IC0xKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChqID4gaSkgewogICAgICAgICAgICAgICAgICAgICAvKiBjb3B5IHVuY2hhbmdlZCBwYXJ0IFtpOmpdICovCiAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfQ09QWShwLCBzZWxmLT5zdHIraSwgai1pKTsKICAgICAgICAgICAgICAgICAgICAgcCArPSBqIC0gaTsKQEAgLTYwODMsNyArNTkzNiw3IEBACiAgICAgICAgICAgICAgIlMuY2FwaXRhbGl6ZSgpIC0+IHVuaWNvZGVcblwKIFxuXAogUmV0dXJuIGEgY2FwaXRhbGl6ZWQgdmVyc2lvbiBvZiBTLCBpLmUuIG1ha2UgdGhlIGZpcnN0IGNoYXJhY3RlclxuXAotaGF2ZSB1cHBlciBjYXNlLiIpOworaGF2ZSB1cHBlciBjYXNlIGFuZCB0aGUgcmVzdCBsb3dlciBjYXNlLiIpOwogCiBzdGF0aWMgUHlPYmplY3QqCiB1bmljb2RlX2NhcGl0YWxpemUoUHlVbmljb2RlT2JqZWN0ICpzZWxmKQpAQCAtNjM4MSw4ICs2MjM0LDYgQEAKICAgICAvKiBDb2VyY2UgdGhlIHR3byBhcmd1bWVudHMgKi8KICAgICBzdWIgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChlbGVtZW50KTsKICAgICBpZiAoIXN1YikgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIidpbiA8c3RyaW5nPicgcmVxdWlyZXMgc3RyaW5nIGFzIGxlZnQgb3BlcmFuZCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC02NDY2LDExICs2MzE3LDExIEBACiAgICAgaWYgKHN1YnN0cmluZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIEZJWF9TVEFSVF9FTkQoc2VsZik7Ci0KKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBzZWxmLT5sZW5ndGgpOwogICAgIHJlc3VsdCA9IFB5SW50X0Zyb21Tc2l6ZV90KAogICAgICAgICBzdHJpbmdsaWJfY291bnQoc2VsZi0+c3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RyaW5nLT5zdHIsIHN1YnN0cmluZy0+bGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RyaW5nLT5zdHIsIHN1YnN0cmluZy0+bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpCiAgICAgICAgICk7CiAKICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKQEAgLTY0ODksMTMgKzYzNDAsMTUgQEAKIGNvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0IGNhbiBoYW5kbGUgVW5pY29kZUVuY29kZUVycm9ycy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXVuaWNvZGVfZW5jb2RlKFB5VW5pY29kZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit1bmljb2RlX2VuY29kZShQeVVuaWNvZGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogeworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07CiAgICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwogICAgIGNoYXIgKmVycm9ycyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnY7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxzczplbmNvZGUiLCAmZW5jb2RpbmcsICZlcnJvcnMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxzczplbmNvZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmVuY29kaW5nLCAmZXJyb3JzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgdiA9IFB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3QoKFB5T2JqZWN0ICopc2VsZiwgZW5jb2RpbmcsIGVycm9ycyk7CiAgICAgaWYgKHYgPT0gTlVMTCkKQEAgLTY1MjUsMTMgKzYzNzgsMTUgQEAKIGFibGUgdG8gaGFuZGxlIFVuaWNvZGVEZWNvZGVFcnJvcnMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlX2RlY29kZShQeVVuaWNvZGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQordW5pY29kZV9kZWNvZGUoUHlVbmljb2RlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwogICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKICAgICBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICp2OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8c3M6ZGVjb2RlIiwgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8c3M6ZGVjb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZlbmNvZGluZywgJmVycm9ycykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHYgPSBQeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0KChQeU9iamVjdCAqKXNlbGYsIGVuY29kaW5nLCBlcnJvcnMpOwogICAgIGlmICh2ID09IE5VTEwpCkBAIC03ODczLDcgKzc3MjgsOCBAQAogUHlEb2NfU1RSVkFSKGZvcm1hdF9fZG9jX18sCiAgICAgICAgICAgICAgIlMuZm9ybWF0KCphcmdzLCAqKmt3YXJncykgLT4gdW5pY29kZVxuXAogXG5cCi0iKTsKK1JldHVybiBhIGZvcm1hdHRlZCB2ZXJzaW9uIG9mIFMsIHVzaW5nIHN1YnN0aXR1dGlvbnMgZnJvbSBhcmdzIGFuZCBrd2FyZ3MuXG5cCitUaGUgc3Vic3RpdHV0aW9ucyBhcmUgaWRlbnRpZmllZCBieSBicmFjZXMgKCd7JyBhbmQgJ30nKS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHVuaWNvZGVfX2Zvcm1hdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTc5MDcsNyArNzc2Myw3IEBACiBQeURvY19TVFJWQVIocF9mb3JtYXRfX2RvY19fLAogICAgICAgICAgICAgICJTLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpIC0+IHVuaWNvZGVcblwKIFxuXAotIik7CitSZXR1cm4gYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiBTIGFzIGRlc2NyaWJlZCBieSBmb3JtYXRfc3BlYy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHVuaWNvZGVfX3NpemVvZl9fKFB5VW5pY29kZU9iamVjdCAqdikKQEAgLTc5MzMsNyArNzc4OSw3IEBACiAgICAgLyogT3JkZXIgaXMgYWNjb3JkaW5nIHRvIGNvbW1vbiB1c2FnZTogb2Z0ZW4gdXNlZCBtZXRob2RzIHNob3VsZAogICAgICAgIGFwcGVhciBmaXJzdCwgc2luY2UgbG9va3VwIGlzIGRvbmUgc2VxdWVudGlhbGx5LiAqLwogCi0gICAgeyJlbmNvZGUiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfZW5jb2RlLCBNRVRIX1ZBUkFSR1MsIGVuY29kZV9fZG9jX199LAorICAgIHsiZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2VuY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZW5jb2RlX19kb2NfX30sCiAgICAgeyJyZXBsYWNlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3JlcGxhY2UsIE1FVEhfVkFSQVJHUywgcmVwbGFjZV9fZG9jX199LAogICAgIHsic3BsaXQiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfc3BsaXQsIE1FVEhfVkFSQVJHUywgc3BsaXRfX2RvY19ffSwKICAgICB7InJzcGxpdCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9yc3BsaXQsIE1FVEhfVkFSQVJHUywgcnNwbGl0X19kb2NfX30sCkBAIC03OTQ5LDcgKzc4MDUsNyBAQAogICAgIHsibGp1c3QiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfbGp1c3QsIE1FVEhfVkFSQVJHUywgbGp1c3RfX2RvY19ffSwKICAgICB7Imxvd2VyIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2xvd2VyLCBNRVRIX05PQVJHUywgbG93ZXJfX2RvY19ffSwKICAgICB7ImxzdHJpcCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9sc3RyaXAsIE1FVEhfVkFSQVJHUywgbHN0cmlwX19kb2NfX30sCi0gICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfZGVjb2RlLCBNRVRIX1ZBUkFSR1MsIGRlY29kZV9fZG9jX199LAorICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2RlY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZGVjb2RlX19kb2NfX30sCiAvKiAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfbWFrZXRyYW5zLCBNRVRIX1ZBUkFSR1MsIG1ha2V0cmFuc19fZG9jX199LCAqLwogICAgIHsicmZpbmQiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcmZpbmQsIE1FVEhfVkFSQVJHUywgcmZpbmRfX2RvY19ffSwKICAgICB7InJpbmRleCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9yaW5kZXgsIE1FVEhfVkFSQVJHUywgcmluZGV4X19kb2NfX30sCkBAIC04MTY0LDE2ICs4MDIwLDYgQEAKIH0KIAogc3RhdGljIGludAotZG91YmxldG91bmljb2RlKFB5X1VOSUNPREUgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqZm9ybWF0LCBkb3VibGUgeCkKLXsKLSAgICBQeV9zc2l6ZV90IHJlc3VsdDsKLQotICAgIFB5T1NfYXNjaWlfZm9ybWF0ZCgoY2hhciAqKWJ1ZmZlciwgbGVuLCBmb3JtYXQsIHgpOwotICAgIHJlc3VsdCA9IHN0cnRvdW5pY29kZShidWZmZXIsIChjaGFyICopYnVmZmVyKTsKLSAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChyZXN1bHQsIFB5X3NzaXplX3QsIGludCk7Ci19Ci0KLXN0YXRpYyBpbnQKIGxvbmd0b3VuaWNvZGUoUHlfVU5JQ09ERSAqYnVmZmVyLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICpmb3JtYXQsIGxvbmcgeCkKIHsKICAgICBQeV9zc2l6ZV90IHJlc3VsdDsKQEAgLTgxODcsNjQgKzgwMzMsMjkgQEAKICAgIHNoYXJlZCB3aXRoIHN0cmluZ29iamVjdC5jLCBjb252ZXJ0aW5nIGZyb20gOC1iaXQgdG8gVW5pY29kZSBhZnRlciB0aGUKICAgIGZvcm1hdHRpbmcgaXMgZG9uZS4gKi8KIAotc3RhdGljIGludAotZm9ybWF0ZmxvYXQoUHlfVU5JQ09ERSAqYnVmLAotICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiwKLSAgICAgICAgICAgIGludCBmbGFncywKLSAgICAgICAgICAgIGludCBwcmVjLAotICAgICAgICAgICAgaW50IHR5cGUsCi0gICAgICAgICAgICBQeU9iamVjdCAqdikKKy8qIFJldHVybnMgYSBuZXcgcmVmZXJlbmNlIHRvIGEgUHlVbmljb2RlIG9iamVjdCwgb3IgTlVMTCBvbiBmYWlsdXJlLiAqLworCitzdGF0aWMgUHlPYmplY3QgKgorZm9ybWF0ZmxvYXQoUHlPYmplY3QgKnYsIGludCBmbGFncywgaW50IHByZWMsIGludCB0eXBlKQogewotICAgIC8qIGZtdCA9ICclIy4nICsgYHByZWNgICsgYHR5cGVgCi0gICAgICAgd29yc3QgY2FzZSBsZW5ndGggPSAzICsgMTAgKGxlbiBvZiBJTlRfTUFYKSArIDEgPSAxNCAodXNlIDIwKSovCi0gICAgY2hhciBmbXRbMjBdOworICAgIGNoYXIgKnA7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBkb3VibGUgeDsKIAogICAgIHggPSBQeUZsb2F0X0FzRG91YmxlKHYpOwogICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGlmIChwcmVjIDwgMCkKICAgICAgICAgcHJlYyA9IDY7Ci0jaWYgU0laRU9GX0lOVCA+IDQKLSAgICAvKiBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBwcmVjaXNpb24gcmVhbGx5IGRvZXMKLSAgICAgICBuZWVkIGF0IG1vc3QgMTAgZGlnaXRzOiBwbGF0Zm9ybXMgd2l0aCBzaXplb2YoaW50KSA9PSA4IGV4aXN0ISAqLwotICAgIGlmIChwcmVjID4gMHg3ZmZmZmZmZikgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJvdXRyYWdlb3VzbHkgbGFyZ2UgcHJlY2lzaW9uICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgZm9ybWF0dGVkIGZsb2F0Iik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZW5kaWYKIAotICAgIGlmICh0eXBlID09ICdmJyAmJiBmYWJzKHgpID49IDFlNTApCi0gICAgICAgIHR5cGUgPSAnZyc7Ci0gICAgLyogV29yc3QgY2FzZSBsZW5ndGggY2FsYyB0byBlbnN1cmUgbm8gYnVmZmVyIG92ZXJydW46Ci0KLSAgICAgICAnZycgZm9ybWF0czoKLSAgICAgICBmbXQgPSAlIy48cHJlYz5nCi0gICAgICAgYnVmID0gJy0nICsgWzAtOV0qcHJlYyArICcuJyArICdlKycgKyAobG9uZ2VzdCBleHAKLSAgICAgICBmb3IgYW55IGRvdWJsZSByZXAuKQotICAgICAgIGxlbiA9IDEgKyBwcmVjICsgMSArIDIgKyA1ID0gOSArIHByZWMKLQotICAgICAgICdmJyBmb3JtYXRzOgotICAgICAgIGJ1ZiA9ICctJyArIFswLTldKnggKyAnLicgKyBbMC05XSpwcmVjICh3aXRoIHggPCA1MCkKLSAgICAgICBsZW4gPSAxICsgNTAgKyAxICsgcHJlYyA9IDUyICsgcHJlYwotCi0gICAgICAgSWYgcHJlYz0wIHRoZSBlZmZlY3RpdmUgcHJlY2lzaW9uIGlzIDEgKHRoZSBsZWFkaW5nIGRpZ2l0IGlzCi0gICAgICAgYWx3YXlzIGdpdmVuKSwgdGhlcmVmb3JlIGluY3JlYXNlIHRoZSBsZW5ndGggYnkgb25lLgotCi0gICAgKi8KLSAgICBpZiAoKCh0eXBlID09ICdnJyB8fCB0eXBlID09ICdHJykgJiYKLSAgICAgICAgIGJ1ZmxlbiA8PSAoc2l6ZV90KTEwICsgKHNpemVfdClwcmVjKSB8fAotICAgICAgICAodHlwZSA9PSAnZicgJiYgYnVmbGVuIDw9IChzaXplX3QpNTMgKyAoc2l6ZV90KXByZWMpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdHRlZCBmbG9hdCBpcyB0b28gbG9uZyAocHJlY2lzaW9uIHRvbyBsYXJnZT8pIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgUHlPU19zbnByaW50ZihmbXQsIHNpemVvZihmbXQpLCAiJSUlcy4lZCVjIiwKLSAgICAgICAgICAgICAgICAgIChmbGFncyZGX0FMVCkgPyAiIyIgOiAiIiwKLSAgICAgICAgICAgICAgICAgIHByZWMsIHR5cGUpOwotICAgIHJldHVybiBkb3VibGV0b3VuaWNvZGUoYnVmLCBidWZsZW4sIGZtdCwgeCk7CisgICAgcCA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh4LCB0eXBlLCBwcmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgRl9BTFQpID8gUHlfRFRTRl9BTFQgOiAwLCBOVUxMKTsKKyAgICBpZiAocCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUocCwgc3RybGVuKHApKTsKKyAgICBQeU1lbV9GcmVlKHApOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTg0MTQsNyArODIyNSw3IEBACiAKIC8qIGZtdCUodjEsdjIsLi4uKSBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gc3ByaW50ZihmbXQsIHYxLCB2MiwgLi4uKQogCi0gICBGT1JNQVRCVUZMRU4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIHdoaWNoIHRoZSBmbG9hdHMsIGludHMsICYKKyAgIEZPUk1BVEJVRkxFTiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gd2hpY2ggdGhlIGludHMgJgogICAgY2hhcnMgYXJlIGZvcm1hdHRlZC4gWFhYIFRoaXMgaXMgYSBtYWdpYyBudW1iZXIuIEVhY2ggZm9ybWF0dGluZwogICAgcm91dGluZSBkb2VzIGJvdW5kcyBjaGVja2luZyB0byBlbnN1cmUgbm8gb3ZlcmZsb3csIGJ1dCBhIGJldHRlcgogICAgc29sdXRpb24gbWF5IGJlIHRvIG1hbGxvYyBhIGJ1ZmZlciBvZiBhcHByb3ByaWF0ZSBzaXplIGZvciBlYWNoCkBAIC04NDg1LDcgKzgyOTYsNyBAQAogICAgICAgICAgICAgUHlfVU5JQ09ERSAqcGJ1ZjsKICAgICAgICAgICAgIFB5X1VOSUNPREUgc2lnbjsKICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwotICAgICAgICAgICAgUHlfVU5JQ09ERSBmb3JtYXRidWZbRk9STUFUQlVGTEVOXTsgLyogRm9yIGZvcm1hdHtmbG9hdCxpbnQsY2hhcn0oKSAqLworICAgICAgICAgICAgUHlfVU5JQ09ERSBmb3JtYXRidWZbRk9STUFUQlVGTEVOXTsgLyogRm9yIGZvcm1hdHtpbnQsY2hhcn0oKSAqLwogCiAgICAgICAgICAgICBmbXQrKzsKICAgICAgICAgICAgIGlmICgqZm10ID09ICcoJykgewpAQCAtODc0NiwxMyArODU1NywxMSBAQAogICAgICAgICAgICAgY2FzZSAnRic6CiAgICAgICAgICAgICBjYXNlICdnJzoKICAgICAgICAgICAgIGNhc2UgJ0cnOgotICAgICAgICAgICAgICAgIGlmIChjID09ICdGJykKLSAgICAgICAgICAgICAgICAgICAgYyA9ICdmJzsKLSAgICAgICAgICAgICAgICBwYnVmID0gZm9ybWF0YnVmOwotICAgICAgICAgICAgICAgIGxlbiA9IGZvcm1hdGZsb2F0KHBidWYsIHNpemVvZihmb3JtYXRidWYpL3NpemVvZihQeV9VTklDT0RFKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgcHJlYywgYywgdik7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApCisgICAgICAgICAgICAgICAgdGVtcCA9IGZvcm1hdGZsb2F0KHYsIGZsYWdzLCBwcmVjLCBjKTsKKyAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICAgICAgcGJ1ZiA9IFB5VW5pY29kZV9BU19VTklDT0RFKHRlbXApOworICAgICAgICAgICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfU0laRSh0ZW1wKTsKICAgICAgICAgICAgICAgICBzaWduID0gMTsKICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGX1pFUk8pCiAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSAnMCc7CkBAIC05MDczLDExICs4ODgyLDMgQEAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCi0KLQotLyoKLSAgTG9jYWwgdmFyaWFibGVzOgotICBjLWJhc2ljLW9mZnNldDogNAotICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKLSAgRW5kOgotKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaCBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaAppbmRleCAyZTljMDFiLi5kMmVjNDZiIDEwMDY0NAotLS0gYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKKysrIGIvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCkBAIC02LDIzICs2LDI0IEBACiAgICAgezAsIDAsIDAsIDAsIDAsIDB9LAogICAgIHswLCAwLCAwLCAwLCAwLCAzMn0sCiAgICAgezAsIDAsIDAsIDAsIDAsIDQ4fSwKLSAgICB7MCwgMCwgMCwgMCwgMCwgNn0sCi0gICAgezAsIDAsIDAsIDEsIDEsIDZ9LAotICAgIHswLCAwLCAwLCAyLCAyLCA2fSwKLSAgICB7MCwgMCwgMCwgMywgMywgNn0sCi0gICAgezAsIDAsIDAsIDQsIDQsIDZ9LAotICAgIHswLCAwLCAwLCA1LCA1LCA2fSwKLSAgICB7MCwgMCwgMCwgNiwgNiwgNn0sCi0gICAgezAsIDAsIDAsIDcsIDcsIDZ9LAotICAgIHswLCAwLCAwLCA4LCA4LCA2fSwKLSAgICB7MCwgMCwgMCwgOSwgOSwgNn0sCisgICAgezAsIDAsIDAsIDAsIDAsIDUxOH0sCisgICAgezAsIDAsIDAsIDEsIDEsIDUxOH0sCisgICAgezAsIDAsIDAsIDIsIDIsIDUxOH0sCisgICAgezAsIDAsIDAsIDMsIDMsIDUxOH0sCisgICAgezAsIDAsIDAsIDQsIDQsIDUxOH0sCisgICAgezAsIDAsIDAsIDUsIDUsIDUxOH0sCisgICAgezAsIDAsIDAsIDYsIDYsIDUxOH0sCisgICAgezAsIDAsIDAsIDcsIDcsIDUxOH0sCisgICAgezAsIDAsIDAsIDgsIDgsIDUxOH0sCisgICAgezAsIDAsIDAsIDksIDksIDUxOH0sCiAgICAgezAsIDMyLCAwLCAwLCAwLCAxMjl9LAogICAgIHs2NTUwNCwgMCwgNjU1MDQsIDAsIDAsIDl9LAogICAgIHswLCAwLCAwLCAwLCAwLCA5fSwKLSAgICB7MCwgMCwgMCwgMCwgMiwgNH0sCi0gICAgezAsIDAsIDAsIDAsIDMsIDR9LAorICAgIHswLCAwLCAwLCAwLCAyLCA1MTZ9LAorICAgIHswLCAwLCAwLCAwLCAzLCA1MTZ9LAogICAgIHs3NDMsIDAsIDc0MywgMCwgMCwgOX0sCi0gICAgezAsIDAsIDAsIDAsIDEsIDR9LAorICAgIHswLCAwLCAwLCAwLCAxLCA1MTZ9LAorICAgIHswLCAwLCAwLCAwLCAwLCA1MTJ9LAogICAgIHsxMjEsIDAsIDEyMSwgMCwgMCwgOX0sCiAgICAgezAsIDEsIDAsIDAsIDAsIDEyOX0sCiAgICAgezY1NTM1LCAwLCA2NTUzNSwgMCwgMCwgOX0sCkBAIC02MCwxMSArNjEsMTMgQEAKICAgICB7MCwgMTA3OTUsIDAsIDAsIDAsIDEyOX0sCiAgICAgezAsIDY1MzczLCAwLCAwLCAwLCAxMjl9LAogICAgIHswLCAxMDc5MiwgMCwgMCwgMCwgMTI5fSwKKyAgICB7MTA4MTUsIDAsIDEwODE1LCAwLCAwLCA5fSwKICAgICB7MCwgNjUzNDEsIDAsIDAsIDAsIDEyOX0sCiAgICAgezAsIDY5LCAwLCAwLCAwLCAxMjl9LAogICAgIHswLCA3MSwgMCwgMCwgMCwgMTI5fSwKICAgICB7MTA3ODMsIDAsIDEwNzgzLCAwLCAwLCA5fSwKICAgICB7MTA3ODAsIDAsIDEwNzgwLCAwLCAwLCA5fSwKKyAgICB7MTA3ODIsIDAsIDEwNzgyLCAwLCAwLCA5fSwKICAgICB7NjUzMjYsIDAsIDY1MzI2LCAwLCAwLCA5fSwKICAgICB7NjUzMzAsIDAsIDY1MzMwLCAwLCAwLCA5fSwKICAgICB7NjUzMzEsIDAsIDY1MzMxLCAwLCAwLCA5fSwKQEAgLTExMiwxMiArMTE1LDEyIEBACiAgICAgezAsIDQ4LCAwLCAwLCAwLCAxMjl9LAogICAgIHs2NTQ4OCwgMCwgNjU0ODgsIDAsIDAsIDl9LAogICAgIHswLCA3MjY0LCAwLCAwLCAwLCAxMjl9LAotICAgIHswLCAwLCAwLCAwLCA0LCA0fSwKLSAgICB7MCwgMCwgMCwgMCwgNSwgNH0sCi0gICAgezAsIDAsIDAsIDAsIDYsIDR9LAotICAgIHswLCAwLCAwLCAwLCA3LCA0fSwKLSAgICB7MCwgMCwgMCwgMCwgOCwgNH0sCi0gICAgezAsIDAsIDAsIDAsIDksIDR9LAorICAgIHswLCAwLCAwLCAwLCA0LCA1MTZ9LAorICAgIHswLCAwLCAwLCAwLCA1LCA1MTZ9LAorICAgIHswLCAwLCAwLCAwLCA2LCA1MTZ9LAorICAgIHswLCAwLCAwLCAwLCA3LCA1MTZ9LAorICAgIHswLCAwLCAwLCAwLCA4LCA1MTZ9LAorICAgIHswLCAwLCAwLCAwLCA5LCA1MTZ9LAogICAgIHs0Mjg3NywgNzU0NSwgNDI4NzcsIDAsIDAsIDI2NX0sCiAgICAgezM4MTQsIDAsIDM4MTQsIDAsIDAsIDl9LAogICAgIHs2NTQ3NywgMCwgNjU0NzcsIDAsIDAsIDl9LApAQCAtMTQwLDE0ICsxNDMsMTQgQEAKICAgICB7MCwgNjU0MjQsIDAsIDAsIDAsIDEyOX0sCiAgICAgezAsIDY1NDA4LCAwLCAwLCAwLCAxMjl9LAogICAgIHswLCA2NTQxMCwgMCwgMCwgMCwgMTI5fSwKLSAgICB7MCwgMCwgMCwgMCwgMCwgNH0sCisgICAgezAsIDAsIDAsIDAsIDAsIDUxNn0sCiAgICAgezAsIDU4MDE5LCAwLCAwLCAwLCAxMjl9LAogICAgIHswLCA1NzE1MywgMCwgMCwgMCwgMTI5fSwKICAgICB7MCwgNTcyNzQsIDAsIDAsIDAsIDEyOX0sCiAgICAgezAsIDI4LCAwLCAwLCAwLCAxMjl9LAogICAgIHs2NTUwOCwgMCwgNjU1MDgsIDAsIDAsIDl9LAotICAgIHswLCAxNiwgMCwgMCwgMCwgMH0sCi0gICAgezY1NTIwLCAwLCA2NTUyMCwgMCwgMCwgMH0sCisgICAgezAsIDE2LCAwLCAwLCAwLCA1MTJ9LAorICAgIHs2NTUyMCwgMCwgNjU1MjAsIDAsIDAsIDUxMn0sCiAgICAgezAsIDI2LCAwLCAwLCAwLCAwfSwKICAgICB7NjU1MTAsIDAsIDY1NTEwLCAwLCAwLCAwfSwKICAgICB7MCwgNTQ3OTMsIDAsIDAsIDAsIDEyOX0sCkBAIC0xNTgsMTgxICsxNjEsODcgQEAKICAgICB7MCwgNTQ3NTYsIDAsIDAsIDAsIDEyOX0sCiAgICAgezAsIDU0Nzg3LCAwLCAwLCAwLCAxMjl9LAogICAgIHswLCA1NDc1MywgMCwgMCwgMCwgMTI5fSwKKyAgICB7MCwgNTQ3NTQsIDAsIDAsIDAsIDEyOX0sCisgICAgezAsIDU0NzIxLCAwLCAwLCAwLCAxMjl9LAogICAgIHs1ODI3MiwgMCwgNTgyNzIsIDAsIDAsIDl9LAorICAgIHswLCAwLCAwLCAwLCAwLCA1MTN9LAogICAgIHs0Mjg3NywgNzU0NSwgNDI4NzcsIDAsIDAsIDM4NX0sCiAgICAgezAsIDQwLCAwLCAwLCAwLCAxMjl9LAogICAgIHs2NTQ5NiwgMCwgNjU0OTYsIDAsIDAsIDl9LAogfTsKIAogLyogdHlwZSBpbmRleGVzICovCi0jZGVmaW5lIFNISUZUIDgKKyNkZWZpbmUgU0hJRlQgNwogc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5kZXgxW10gPSB7CiAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAKLSAgICAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzQsIDM3LCAKLSAgICAzOCwgMzQsIDM0LCAzNCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCAzNCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDQ3LCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCA0OCwgMjEsIDIxLCAyMSwgMjEsIDQ5LCAKLSAgICAyMSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA4LCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgNTUsIDM0LCAzNCwgMzQsIAorICAgIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzQsIDM1LCAzNiwgMzcsIAorICAgIDM4LCAzOSwgMzQsIDM0LCAzNCwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY0LCA2NCwgNjUsIDY2LCA2NywgNjQsIAorICAgIDY0LCA2NCwgNjgsIDY5LCA3MCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNzEsIDE3LCA3MiwgNzMsIDc0LCA3NSwgNzYsIAorICAgIDc3LCA2NCwgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDY0LCA2NCwgODUsIDg2LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCA4NywgMzQsIDM0LCAzNCwgMzQsIDM0LCA4OCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIxLCA1NiwgNTcsIDIxLCA1OCwgNTksIAotICAgIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDgsIDgsIDgsIDY2LCA2NywgNjgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDIxLCAyMSwgMjEsIDY5LCA3MCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgNzEsIDcyLCAKLSAgICA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA3OSwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDgwLCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAyMSwgMjEsIDgxLCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4MiwgODMsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgODksIDkwLCA5MSwgOTIsIDM0LCAzNCwgMzQsIDkzLCAzNCwgMzQsIAorICAgIDM0LCA5NCwgOTUsIDM0LCAzNCwgMzQsIDM0LCAzNCwgOTYsIDM0LCAzNCwgMzQsIDk3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgOTgsIDk5LCAxMDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDEwMSwgMTAyLCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDEwMywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAxMDQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTA1LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMTAxLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDEwNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTA2LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTA3LCAxMDgsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTA5LCAxMTAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTExLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAxMTIsIDM0LCAzNCwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgCisgICAgMTIyLCAxNywgMTIzLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAxMjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgCisgICAgMTI5LCAxMzAsIDM0LCAzNCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNywgCisgICAgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDUsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE0NiwgMTcsIDE0NywgMTcsIDE0OCwgCisgICAgMTcsIDE0OSwgMTcsIDE1MCwgMTcsIDE3LCAxNywgMTUxLCAxNywgMTcsIDE3LCAxNywgMTUyLCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxNTMsIDE3LCAxNTQsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxNTUsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgNjQsIDE1NiwgMTU3LCAxNTgsIDE1OSwgMTcsIDE2MCwgMTcsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgCisgICAgMTY4LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNjksIDE3MCwgMTcxLCAxNzIsIAorICAgIDE3MywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTc0LCAxNzUsIDE3NiwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgODcsIDE3NywgMzQsIDE3OCwgMTc5LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxODAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTgxLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMTgyLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDE4MywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIApAQCAtMzQwLDMyICsyNDksNDE5IEBACiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMTg0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDg0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA4NCwgCisgICAgMTg1LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAzNCwgMTgwLCAzNCwgMzQsIDE4NiwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTg3LCAxNywgNjQsIDE4OCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAxODksIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCAxODksIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5kZXgyW10gPSB7Ci0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMiwgMywgMiwgMiwgMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMiwgMywgMywgMywgMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMywgMywgMywgMiwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDE0LCAxNCwgMTQsIDE0LCAKICAgICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAKQEAgLTM3MywxMDUgKzY2OSwxMDggQEAKICAgICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMTYsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDE3LCAxOCwgMSwgMTksIDEsIDEsIDEsIDIwLCAxNiwgMSwgMSwgMSwgMSwgMSwgMTQsIDE0LCAxNCwgCisgICAgMSwgMSwgMSwgMSwgMTcsIDE4LCAxLCAxOSwgMSwgMSwgMSwgMjAsIDE2LCAxLCAyMSwgMjEsIDIxLCAxLCAxNCwgMTQsIDE0LCAKICAgICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAKICAgICAxNCwgMTQsIDEsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNiwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIAogICAgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxLCAxNSwgCi0gICAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMjEsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDI0LCAyNSwgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMTYsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAxNiwgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDI2LCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyNywgMjgsIDI5LCAyMiwgMjMsIDIyLCAyMywgMzAsIDIyLCAyMywgCi0gICAgMzEsIDMxLCAyMiwgMjMsIDE2LCAzMiwgMzMsIDM0LCAyMiwgMjMsIDMxLCAzNSwgMzYsIDM3LCAzOCwgMjIsIDIzLCAzOSwgCi0gICAgMTYsIDM3LCA0MCwgNDEsIDQyLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCA0MywgMjIsIDIzLCA0MywgMTYsIDE2LCAyMiwgCi0gICAgMjMsIDQzLCAyMiwgMjMsIDQ0LCA0NCwgMjIsIDIzLCAyMiwgMjMsIDQ1LCAyMiwgMjMsIDE2LCA0NiwgMjIsIDIzLCAxNiwgCi0gICAgNDcsIDQ2LCA0NiwgNDYsIDQ2LCA0OCwgNDksIDUwLCA0OCwgNDksIDUwLCA0OCwgNDksIDUwLCAyMiwgMjMsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgNTEsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDE2LCA0OCwgNDksIDUwLCAyMiwgCi0gICAgMjMsIDUyLCA1MywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDU0LCAxNiwgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgNTUsIDIyLCAyMywgCi0gICAgNTYsIDU3LCAxNiwgMTYsIDIyLCAyMywgNTgsIDU5LCA2MCwgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDYxLCA2MiwgMTYsIDYzLCA2NCwgMTYsIDY1LCA2NSwgMTYsIDY2LCAxNiwgNjcsIDE2LCAxNiwgMTYsIDE2LCA2NSwgCi0gICAgMTYsIDE2LCA2OCwgMTYsIDE2LCAxNiwgMTYsIDY5LCA3MCwgMTYsIDcxLCAxNiwgMTYsIDE2LCA3MCwgMTYsIDcyLCA3MywgCi0gICAgMTYsIDE2LCA3NCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDc1LCAxNiwgMTYsIDc2LCAxNiwgMTYsIDc2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgNzYsIDc3LCA3OCwgNzgsIDc5LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDgwLCAxNiwgNDYsIDE2LCAxNiwgCisgICAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMjIsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDI1LCAyNiwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMTYsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgCisgICAgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAxNiwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDI3LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyOCwgMjksIDMwLCAyMywgMjQsIDIzLCAyNCwgMzEsIDIzLCAyNCwgCisgICAgMzIsIDMyLCAyMywgMjQsIDE2LCAzMywgMzQsIDM1LCAyMywgMjQsIDMyLCAzNiwgMzcsIDM4LCAzOSwgMjMsIDI0LCA0MCwgCisgICAgMTYsIDM4LCA0MSwgNDIsIDQzLCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCA0NCwgMjMsIDI0LCA0NCwgMTYsIDE2LCAyMywgCisgICAgMjQsIDQ0LCAyMywgMjQsIDQ1LCA0NSwgMjMsIDI0LCAyMywgMjQsIDQ2LCAyMywgMjQsIDE2LCA0NywgMjMsIDI0LCAxNiwgCisgICAgNDgsIDQ3LCA0NywgNDcsIDQ3LCA0OSwgNTAsIDUxLCA0OSwgNTAsIDUxLCA0OSwgNTAsIDUxLCAyMywgMjQsIDIzLCAyNCwgCisgICAgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgNTIsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDE2LCA0OSwgNTAsIDUxLCAyMywgCisgICAgMjQsIDUzLCA1NCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDU1LCAxNiwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgNTYsIDIzLCAyNCwgCisgICAgNTcsIDU4LCA1OSwgNTksIDIzLCAyNCwgNjAsIDYxLCA2MiwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDYzLCA2NCwgNjUsIDY2LCA2NywgMTYsIDY4LCA2OCwgMTYsIDY5LCAxNiwgNzAsIDE2LCAxNiwgMTYsIDE2LCA2OCwgCisgICAgMTYsIDE2LCA3MSwgMTYsIDE2LCAxNiwgMTYsIDcyLCA3MywgMTYsIDc0LCAxNiwgMTYsIDE2LCA3MywgMTYsIDc1LCA3NiwgCisgICAgMTYsIDE2LCA3NywgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDc4LCAxNiwgMTYsIDc5LCAxNiwgMTYsIDc5LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgNzksIDgwLCA4MSwgODEsIDgyLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDgzLCAxNiwgNDcsIDE2LCAxNiwgCiAgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDEsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgMSwgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDgxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyMiwgMjMsIAotICAgIDIyLCAyMywgNDYsIDEsIDIyLCAyMywgMCwgMCwgNDYsIDQxLCA0MSwgNDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDgyLCAKLSAgICAxLCA4MywgODMsIDgzLCAwLCA4NCwgMCwgODUsIDg1LCAxNiwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgCisgICAgMSwgMSwgODQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIzLCAyNCwgCisgICAgMjMsIDI0LCA0NywgMSwgMjMsIDI0LCAwLCAwLCA0NywgNDIsIDQyLCA0MiwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgODUsIAorICAgIDEsIDg2LCA4NiwgODYsIDAsIDg3LCAwLCA4OCwgODgsIDE2LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAKICAgICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDAsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIAotICAgIDg2LCA4NywgODcsIDg3LCAxNiwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIAotICAgIDE1LCAxNSwgMTUsIDE1LCA4OCwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgODksIDkwLCA5MCwgOTEsIAotICAgIDkyLCA5MywgOTQsIDk0LCA5NCwgOTUsIDk2LCA5NywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgOTgsIDk5LCAxMDAsIDE2LCAKLSAgICAxMDEsIDEwMiwgMSwgMjIsIDIzLCAxMDMsIDIyLCAyMywgMTYsIDU0LCA1NCwgNTQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgCi0gICAgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTQsIDE0LCAxNCwgCisgICAgODksIDkwLCA5MCwgOTAsIDE2LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgCisgICAgMTUsIDE1LCAxNSwgMTUsIDkxLCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCA5MiwgOTMsIDkzLCA5NCwgCisgICAgOTUsIDk2LCA5NywgOTcsIDk3LCA5OCwgOTksIDEwMCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIAorICAgIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMTAxLCAxMDIsIDEwMywgCisgICAgMTYsIDEwNCwgMTA1LCAxLCAyMywgMjQsIDEwNiwgMjMsIDI0LCAxNiwgNTUsIDU1LCA1NSwgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxNCwgMTQsIDE0LCAKICAgICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAKICAgICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAKICAgICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAKLSAgICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCAKLSAgICA5OSwgOTksIDk5LCA5OSwgOTksIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAxMDUsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMTA2LCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEwOCwgMTA4LCAxMDgsIDEwOCwgCi0gICAgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIAotICAgIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAKLSAgICAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxNiwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgCisgICAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDEwOCwgMjMsIDI0LCAyMywgMjQsIAorICAgIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAxMDksIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwLCAxMTAsIAorICAgIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAKKyAgICAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgCisgICAgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDAsIDAsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAKKyAgICAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgCisgICAgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIAorICAgIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTYsIDAsIDEsIDEsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIAotICAgIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDAsIDAsIDEsIDEsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxLCAxLCAxLCAKLSAgICAxLCA0NiwgNDYsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNCwgNSwgNiwgCi0gICAgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQ2LCA0NiwgNDYsIDEsIDEsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAwLCAxLCA0NiwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCAKLSAgICA0NiwgMSwgMSwgMSwgMSwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAKKyAgICAxMSwgMTIsIDEzLCAxLCAxLCAxLCAxLCA0NywgNDcsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDEsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDQ3LCA0NywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQ3LCA0NywgNDcsIDEsIDEsIDQ3LCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCA0NywgMSwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAKKyAgICAxMiwgMTMsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ3LCA0NywgMSwgMSwgMSwgMSwgNDcsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAxLCAxLCAxLCAxLCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDEsIDEsIDEsIDQ3LCAxLCAxLCAxLCAKKyAgICAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTQ3OSwzODIgKzc3OCwzMzkgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAwLCAwLCAxLCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgNDcsIDEsIAorICAgIDEsIDEsIDEsIDEsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCA0LCAKKyAgICA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMSwgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgMSwgMSwgMSwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgCisgICAgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDAsIDAsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxLCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgCisgICAgMSwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgMSwgCisgICAgMSwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQ3LCA0NywgMSwgMSwgMjEsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgCisgICAgMCwgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgCisgICAgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIAorICAgIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDEsIDQ3LCA0NywgNDcsIDEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIAorICAgIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDEsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAKKyAgICAxLCAwLCAxLCAxLCAxLCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIAorICAgIDQ3LCAxLCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAKKyAgICAwLCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDEsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAKKyAgICAwLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCA0NywgNDcsIDAsIDQ3LCA0NywgCisgICAgNDcsIDEsIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxLCA0NywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIAorICAgIDAsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCA0NywgNDcsIDAsIDQ3LCAwLCA0NywgNDcsIDAsIAorICAgIDAsIDAsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgCisgICAgMSwgMSwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAyMSwgMjEsIDIxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIAorICAgIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDcsIDQ3LCAxLCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDEsIDAsIDAsIDEsIDEsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxLCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDcsIDAsIDQ3LCA0NywgMSwgMSwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDEsIAorICAgIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgMSwgMSwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDEsIDEsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgNDcsIDQ3LCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgMCwgNDcsIDAsIDAsIDQ3LCA0NywgMCwgNDcsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDAsIAorICAgIDQ3LCAwLCA0NywgMCwgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMSwgNDcsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAwLCAxLCAxLCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgCisgICAgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMSwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDAsIDAsIDQ2LCAxLCAxLCAxLCAxLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgMSwgMSwgMSwgMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDQ2LCA0NiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAxLCAxLCAxLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCAwLCA0NiwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDEsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAKLSAgICAwLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgNDYsIAotICAgIDQ2LCAwLCA0NiwgNDYsIDQ2LCAxLCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNDYsIDQ2LCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCAwLCAwLCAwLCAwLCA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgMCwgNDYsIDQ2LCAwLCA0NiwgNDYsIDAsIDQ2LCA0NiwgMCwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgCi0gICAgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDAsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMSwgMSwgCi0gICAgNDYsIDQ2LCA0NiwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMSwgNDYsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDAsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDEsIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIAotICAgIDEzLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMSwgNDYsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIAotICAgIDEsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgMSwgMSwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIAotICAgIDExLCAxMiwgMTMsIDEsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCA0NiwgCi0gICAgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIAotICAgIDAsIDQ2LCA0NiwgMCwgNDYsIDAsIDQ2LCA0NiwgMCwgMCwgMCwgNDYsIDQ2LCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCAwLCAwLCAKLSAgICAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCA0NiwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgCi0gICAgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDEsIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgCi0gICAgMTIsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMSwgCi0gICAgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCAwLCA0NiwgNDYsIDEsIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIAotICAgIDEwLCAxMSwgMTIsIDEzLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAKLSAgICAxLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIAotICAgIDAsIDAsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDEsIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIAotICAgIDksIDEwLCAxMSwgMTIsIDEzLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICAwLCAwLCAxLCAxLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDEsIDAsIAotICAgIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDQ2LCAKLSAgICA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxLCAxLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDAsIDQ2LCAwLCAwLCA0NiwgNDYsIDAsIDQ2LCAwLCAwLCA0NiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgCi0gICAgNDYsIDQ2LCAwLCA0NiwgMCwgNDYsIDAsIDAsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDEsIDQ2LCA0NiwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMCwgMSwgMSwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDAsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAwLCA0NiwgNDYsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAKLSAgICAxMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMSwgMSwgCisgICAgMCwgMCwgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0LCA1LCA2LCA3LCA4LCAKLSAgICA5LCAxMCwgMTEsIDEyLCAxMywgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDQ2LCAxLCAxLCAxLCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCAKLSAgICA0NiwgNDYsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgCi0gICAgMTMsIDAsIDAsIDAsIDAsIDEsIDEsIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgCi0gICAgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIAotICAgIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgNDYsIDAsIDAsIDAsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCAwLCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgCi0gICAgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjAsIDE3LCAxOCwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIAotICAgIDExNSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCAxLCAxLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIAotICAgIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCAKLSAgICAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIAotICAgIDEsIDEsIDEsIDEsIDQ2LCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMiwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ3LCA0LCA1LCA2LCA3LCA4LCAKKyAgICA5LCAxMCwgMTEsIDEyLCAxMywgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDQ3LCAxLCAxLCAxLCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ3LCAKKyAgICA0NywgNDcsIDEsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgCisgICAgMTMsIDEsIDEsIDEsIDEsIDEsIDEsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgCisgICAgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIAorICAgIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgNDcsIDAsIDAsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyMCwgMTcsIDE4LCAxMTMsIDExNCwgMTE1LCAKKyAgICAxMTYsIDExNywgMTE4LCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDIsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMjEsIDIxLCAyMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgNDcsIDQ3LCA0NywgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgCi0gICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDQ3LCAxLCAxLCAxLCAxLCA0NywgMSwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgCisgICAgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAKKyAgICAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgCisgICAgNDcsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDQsIDUsIDYsIAorICAgIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIAorICAgIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA1LCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgNDYsIDQ2LCA0LCA1LCAKLSAgICA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMSwgMSwgMSwgMSwgMCwgMCwgMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIAotICAgIDQ2LCA0NiwgNDYsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAKKyAgICAxMCwgMTEsIDEyLCAxMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgCisgICAgMCwgMCwgNDcsIDQ3LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIAorICAgIDExLCAxMiwgMTMsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA0NiwgMTE2LCAxNiwgMTYsIDE2LCAxMTcsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTE4LCAKLSAgICAxNiwgMTYsIDExOSwgMTYsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAotICAgIDEyMCwgMTIwLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKLSAgICAxMjAsIDEyMCwgMCwgMCwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMCwgMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKLSAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjAsIDEyMCwgCi0gICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIAotICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDAsIDAsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDAsIDAsIAotICAgIDE2LCAxMjAsIDE2LCAxMjAsIDE2LCAxMjAsIDE2LCAxMjAsIDAsIDEyMSwgMCwgMTIxLCAwLCAxMjEsIDAsIDEyMSwgMTIwLCAKLSAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgCi0gICAgMTIxLCAxMjIsIDEyMiwgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjQsIDEyNCwgMTI1LCAxMjUsIDEyNiwgMTI2LCAxMjcsIAotICAgIDEyNywgMCwgMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTIwLCAxMjAsIDE2LCAxMjksIDE2LCAwLCAxNiwgMTYsIAotICAgIDEyMSwgMTIxLCAxMzAsIDEzMCwgMTMxLCAxLCAxMzIsIDEsIDEsIDEsIDE2LCAxMjksIDE2LCAwLCAxNiwgMTYsIDEzMywgCi0gICAgMTMzLCAxMzMsIDEzMywgMTMxLCAxLCAxLCAxLCAxMjAsIDEyMCwgMTYsIDE2LCAwLCAwLCAxNiwgMTYsIDEyMSwgMTIxLCAKLSAgICAxMzQsIDEzNCwgMCwgMSwgMSwgMSwgMTIwLCAxMjAsIDE2LCAxNiwgMTYsIDEwMCwgMTYsIDE2LCAxMjEsIDEyMSwgMTM1LCAKLSAgICAxMzUsIDEwMywgMSwgMSwgMSwgMCwgMCwgMTYsIDEyOSwgMTYsIDAsIDE2LCAxNiwgMTM2LCAxMzYsIDEzNywgMTM3LCAxMzEsIAotICAgIDEsIDEsIDAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDMsIDMsIDEsIDEsIDEsIAotICAgIDEsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEzOCwgMTYsIDAsIDAsIAotICAgIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDEsIDEsIDEsIDEsIDEsIDE2LCAxMzgsIDIwLCAxNywgMTgsIDExMCwgCi0gICAgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDEsIDEsIDEsIDEsIDEsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgOTQsIDEsIDEsIDEsIDEsIDk0LCAxLCAxLCAxNiwgOTQsIDk0LCA5NCwgCi0gICAgMTYsIDE2LCA5NCwgOTQsIDk0LCAxNiwgMSwgOTQsIDEsIDEsIDEsIDk0LCA5NCwgOTQsIDk0LCA5NCwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgOTQsIDEsIDEzOSwgMSwgOTQsIDEsIDE0MCwgMTQxLCA5NCwgOTQsIDEsIDE2LCA5NCwgOTQsIDE0MiwgOTQsIDE2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgMTYsIDEsIDEsIDE2LCAxNiwgOTQsIDk0LCAxLCAxLCAxLCAxLCAxLCA5NCwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDEsIDEsIDEsIDEsIDE0MywgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKLSAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDEsIDEsIDEsIDIyLCAyMywgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDEsIDQ3LCA0NywgNDcsIDQ3LCAxLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCA0NywgMTE5LCAxNiwgMTYsIDE2LCAxMjAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTIxLCAxNiwgMTYsIDEyMiwgMTYsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDEyMywgCisgICAgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIAorICAgIDEyNCwgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMCwgMCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMCwgCisgICAgMCwgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIAorICAgIDEyNCwgMTI0LCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTI0LCAxMjQsIDEyNCwgMTI0LCAKKyAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDAsIDAsIDEyNCwgMTI0LCAxMjQsIAorICAgIDEyNCwgMTI0LCAxMjQsIDAsIDAsIDE2LCAxMjMsIDE2LCAxMjMsIDE2LCAxMjMsIDE2LCAxMjMsIDAsIDEyNCwgMCwgMTI0LCAKKyAgICAwLCAxMjQsIDAsIDEyNCwgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyNCwgMTI0LCAxMjQsIAorICAgIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjUsIDEyNSwgMTI2LCAxMjYsIDEyNiwgMTI2LCAxMjcsIDEyNywgMTI4LCAKKyAgICAxMjgsIDEyOSwgMTI5LCAxMzAsIDEzMCwgMCwgMCwgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAKKyAgICAxMjMsIDEyMywgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEyMywgMTIzLCAxMjMsIDEyMywgCisgICAgMTIzLCAxMjMsIDEyMywgMTIzLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTIzLCAxMjMsIDE2LCAKKyAgICAxMzIsIDE2LCAwLCAxNiwgMTYsIDEyNCwgMTI0LCAxMzMsIDEzMywgMTM0LCAxLCAxMzUsIDEsIDEsIDEsIDE2LCAxMzIsIAorICAgIDE2LCAwLCAxNiwgMTYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM0LCAxLCAxLCAxLCAxMjMsIDEyMywgMTYsIDE2LCAwLCAwLCAKKyAgICAxNiwgMTYsIDEyNCwgMTI0LCAxMzcsIDEzNywgMCwgMSwgMSwgMSwgMTIzLCAxMjMsIDE2LCAxNiwgMTYsIDEwMywgMTYsIAorICAgIDE2LCAxMjQsIDEyNCwgMTM4LCAxMzgsIDEwNiwgMSwgMSwgMSwgMCwgMCwgMTYsIDEzMiwgMTYsIDAsIDE2LCAxNiwgMTM5LCAKKyAgICAxMzksIDE0MCwgMTQwLCAxMzQsIDEsIDEsIDAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDMsIDMsIDEsIDEsIDEsIDEsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDE0MSwgNDcsIDAsIDAsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEsIDEsIDEsIDEsIDEsIDQ3LCAxNDEsIAorICAgIDIwLCAxNywgMTgsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEsIDEsIDEsIDEsIDEsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjAsIAotICAgIDE3LCAxOCwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMjAsIDE3LCAxOCwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMjAsIDE3LCAxOCwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgCi0gICAgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIAotICAgIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAKLSAgICAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxMzgsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIwLCAxNywgMTgsIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDEsIDEzOCwgMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgOTcsIDEsIDEsIDEsIDEsIDk3LCAxLCAxLCAKKyAgICAxNiwgOTcsIDk3LCA5NywgMTYsIDE2LCA5NywgOTcsIDk3LCAxNiwgMSwgOTcsIDEsIDEsIDEsIDk3LCA5NywgOTcsIDk3LCAKKyAgICA5NywgMSwgMSwgMSwgMSwgMSwgMSwgOTcsIDEsIDE0MiwgMSwgOTcsIDEsIDE0MywgMTQ0LCA5NywgOTcsIDEsIDE2LCA5NywgCisgICAgOTcsIDE0NSwgOTcsIDE2LCA0NywgNDcsIDQ3LCA0NywgMTYsIDEsIDEsIDE2LCAxNiwgOTcsIDk3LCAxLCAxLCAxLCAxLCAxLCAKKyAgICA5NywgMTYsIDE2LCAxNiwgMTYsIDEsIDEsIDEsIDEsIDE0NiwgMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAKKyAgICAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAyMSwgMjEsIDIxLCAyMywgMjQsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgCi0gICAgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgCi0gICAgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgCi0gICAgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjAsIDE3LCAxOCwgMTEwLCAxMTEsIDExMiwgMTEzLCAKLSAgICAxMTQsIDExNSwgMSwgMjAsIDE3LCAxOCwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMSwgMjAsIDE3LCAxOCwgCi0gICAgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjAsIDE3LCAxOCwgMTEzLCAKKyAgICAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMCwgCisgICAgMTcsIDE4LCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIwLCAxNywgMTgsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAKKyAgICAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgCisgICAgMTQ5LCAxNDksIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIAorICAgIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAKKyAgICAxNDEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMCwgMTcsIDE4LCAxMTMsIDExNCwgMTE1LCAKKyAgICAxMTYsIDExNywgMTE4LCAyMSwgMTQxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAKKyAgICAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAwLCAxLCAKKyAgICAxLCAxLCAxLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyMCwgMTcsIDE4LCAxMTMsIDExNCwgMTE1LCAxMTYsIAorICAgIDExNywgMTE4LCAyMSwgMjAsIDE3LCAxOCwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMjEsIDIwLCAxNywgMTgsIAorICAgIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDIxLCAxLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAwLCAwLCAwLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKQEAgLTg2MiwzOTggKzExMTgsNTczIEBACiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIAotICAgIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAKLSAgICAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgCi0gICAgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIAotICAgIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAwLCAyMiwgMjMsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAxNTMsIDE1NCwgMTU1LCAwLCAxNiwgMjIsIDIzLCAxNiwgMjIsIDIzLCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCA0NiwgMCwgMCwgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDE2LCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxNTYsIDE1NiwgCi0gICAgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIAotICAgIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAKLSAgICAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIAorICAgIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAKKyAgICAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgCisgICAgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMCwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIAorICAgIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAKKyAgICAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgCisgICAgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDAsIAorICAgIDIzLCAyNCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDE1NiwgMTU3LCAxNTgsIAorICAgIDE1OSwgMTYsIDIzLCAyNCwgMTYsIDIzLCAyNCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgNDcsIDE2MCwgMTYwLCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMTYsIDEsIDEsIDEsIDEsIDEsIDEsIDIzLCAyNCwgMjMsIDI0LCAKKyAgICAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyMSwgMSwgMSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKKyAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCisgICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAorICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDQ3LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAwLCAwLCAwLCAwLCAyLCAxLCAxLCAxLCAxLCA0NywgNDcsIDIxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDIxLCAyMSwgCisgICAgMjEsIDQ3LCA0NywgMSwgMSwgMSwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCAwLCAwLCAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMSwgMSwgMjEsIDIxLCAyMSwgMjEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDIsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICAxLCAxLCAxLCAxLCAxLCA0NiwgNDYsIDEsIDEsIDEsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMSwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgNDYsIDQ2LCA0NiwgNDYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEsIDEsIDEsIDEsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxNjIsIDQ3LCA0NywgMTYyLCAKKyAgICA0NywgNDcsIDQ3LCAxNjIsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMTYyLCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCAKKyAgICA0NywgMTYyLCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDE2MiwgCisgICAgMTYyLCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAxNjIsIDE2MiwgMTYyLCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgMTYyLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDE2MiwgMTYyLCA0NywgMTYyLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNDcsIAorICAgIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMywgMjQsIAorICAgIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIAorICAgIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDAsIDAsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDQ3LCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAKKyAgICAxLCAxLCA0NywgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIAorICAgIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDE2LCAxNiwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCA0NywgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAyMywgMjQsIDIzLCAyNCwgMTYzLCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgNDcsIDEsIDEsIDIzLCAyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDQ3LCA0NywgNDcsIDEsIDQ3LCA0NywgNDcsIDQ3LCAxLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDEsIDEsIAorICAgIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAKKyAgICAxMSwgMTIsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCA0NywgMCwgMCwgMCwgMCwgNCwgNSwgNiwgNywgCisgICAgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAwLCA0NywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAxLCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMSwgMSwgMSwgCisgICAgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCA0NywgMSwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgNDcsIDEsIDEsIDEsIDQ3LCA0NywgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAxLCAxLCA0NywgMSwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgCisgICAgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDAsIDAsIDAsIDAsIDAsIDQ3LCAxLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDAsIDQ3LCA0NywgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAwLCAwLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgCisgICAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMSwgMSwgMSwgMSwgMSwgMSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAKKyAgICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAKKyAgICAxNSwgMTUsIDE1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgCisgICAgNDcsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgMCwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAyMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAyMSwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQ2LCAKLSAgICA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAwLCAwLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCA0NiwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgCi0gICAgMSwgMSwgNDYsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgCisgICAgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIAorICAgIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY1LCAKKyAgICAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgCisgICAgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIAorICAgIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAxNiwgMTYsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgNDYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMjIsIDIzLCAyMiwgMjMsIDE1NywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDQ2LCAKLSAgICAxLCAxLCAyMiwgMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgMSwgNDYsIDQ2LCA0NiwgMSwgNDYsIDQ2LCA0NiwgNDYsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIAotICAgIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgMSwgMSwgMSwgMCwgCisgICAgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDIwLCAKKyAgICAxNywgMTgsIDExMywgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMjEsIDIxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NiwgNDYsIDQ2LCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDAsIDAsIDQsIDUsIAotICAgIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMCwgMTcsIDE4LCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMCwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAxLCAxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMSwgMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAKKyAgICAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ2LCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDAsIAotICAgIDQ2LCA0NiwgMCwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAKLSAgICAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDEsIDAsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgCi0gICAgMTIsIDEzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIAotICAgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgCi0gICAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAKLSAgICAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgCi0gICAgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIAotICAgIDE1OCwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAKLSAgICAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgCi0gICAgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgNDYsIDAsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCAwLCAwLCAwLCA0NiwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAKLSAgICAxLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQ2LCAxLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIAotICAgIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgCi0gICAgMCwgMCwgMCwgMSwgMjAsIDE3LCAxOCwgMTEwLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKQEAgLTEyNjEsMTQzICsxNjkyLDE5MyBAQAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAKLSAgICA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIDAsIDk0LCA5NCwgMCwgMCwgOTQsIDAsIDAsIDk0LCA5NCwgMCwgMCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDAsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgMTYsIDE2LCAxNiwgMTYsIDAsIDE2LCAKLSAgICAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIAotICAgIDk0LCAwLCA5NCwgOTQsIDk0LCA5NCwgMCwgMCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAwLCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NCwgOTQsIDAsIDk0LCAKLSAgICA5NCwgOTQsIDk0LCAwLCA5NCwgOTQsIDk0LCA5NCwgOTQsIDAsIDk0LCAwLCAwLCAwLCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDAsIDAsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAKLSAgICA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMSwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDEsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgMSwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDEsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk0LCA5NCwgOTQsIDk0LCAKLSAgICA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAKLSAgICA5NCwgOTQsIDk0LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDEsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxLCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCA5NCwgMTYsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0LCA1LCA2LCAKLSAgICA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQsIDUsIDYsIDcsIDgsIAotICAgIDksIDEwLCAxMSwgMTIsIDEzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKKyAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDk3LCAwLCA5NywgOTcsIDAsIDAsIDk3LCAwLCAwLCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCAKKyAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2LCAxNiwgMTYsIDE2LCAwLCAxNiwgMCwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk3LCA5NywgMCwgOTcsIDk3LCAKKyAgICA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCAwLCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAwLCAwLCA5NywgOTcsIDk3LCAKKyAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKKyAgICA5NywgOTcsIDk3LCA5NywgMSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDEsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMSwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKKyAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMSwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDEsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTcsIAorICAgIDE2LCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgCisgICAgMTMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgCisgICAgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE0MSwgMTQxLCAyMCwgMTcsIDE4LCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAKKyAgICAxLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKQEAgLTE0MDUsMjAgKzE4ODYsMTQ1MiBAQAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDAsIDAsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIAogfTsKIAorLyogUmV0dXJucyB0aGUgbnVtZXJpYyB2YWx1ZSBhcyBkb3VibGUgZm9yIFVuaWNvZGUgY2hhcmFjdGVycworICogaGF2aW5nIHRoaXMgcHJvcGVydHksIC0xLjAgb3RoZXJ3aXNlLgorICovCitkb3VibGUgX1B5VW5pY29kZV9Ub051bWVyaWMoUHlfVU5JQ09ERSBjaCkKK3sKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAweDBGMzM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAtMS4wLzIuMDsKKyAgICBjYXNlIDB4MDAzMDoKKyAgICBjYXNlIDB4MDY2MDoKKyAgICBjYXNlIDB4MDZGMDoKKyAgICBjYXNlIDB4MDdDMDoKKyAgICBjYXNlIDB4MDk2NjoKKyAgICBjYXNlIDB4MDlFNjoKKyAgICBjYXNlIDB4MEE2NjoKKyAgICBjYXNlIDB4MEFFNjoKKyAgICBjYXNlIDB4MEI2NjoKKyAgICBjYXNlIDB4MEJFNjoKKyAgICBjYXNlIDB4MEM2NjoKKyAgICBjYXNlIDB4MEM3ODoKKyAgICBjYXNlIDB4MENFNjoKKyAgICBjYXNlIDB4MEQ2NjoKKyAgICBjYXNlIDB4MEU1MDoKKyAgICBjYXNlIDB4MEVEMDoKKyAgICBjYXNlIDB4MEYyMDoKKyAgICBjYXNlIDB4MTA0MDoKKyAgICBjYXNlIDB4MTA5MDoKKyAgICBjYXNlIDB4MTdFMDoKKyAgICBjYXNlIDB4MTdGMDoKKyAgICBjYXNlIDB4MTgxMDoKKyAgICBjYXNlIDB4MTk0NjoKKyAgICBjYXNlIDB4MTlEMDoKKyAgICBjYXNlIDB4MUE4MDoKKyAgICBjYXNlIDB4MUE5MDoKKyAgICBjYXNlIDB4MUI1MDoKKyAgICBjYXNlIDB4MUJCMDoKKyAgICBjYXNlIDB4MUM0MDoKKyAgICBjYXNlIDB4MUM1MDoKKyAgICBjYXNlIDB4MjA3MDoKKyAgICBjYXNlIDB4MjA4MDoKKyAgICBjYXNlIDB4MjE4OToKKyAgICBjYXNlIDB4MjRFQToKKyAgICBjYXNlIDB4MjRGRjoKKyAgICBjYXNlIDB4MzAwNzoKKyAgICBjYXNlIDB4OTZGNjoKKyAgICBjYXNlIDB4QTYyMDoKKyAgICBjYXNlIDB4QTZFRjoKKyAgICBjYXNlIDB4QThEMDoKKyAgICBjYXNlIDB4QTkwMDoKKyAgICBjYXNlIDB4QTlEMDoKKyAgICBjYXNlIDB4QUE1MDoKKyAgICBjYXNlIDB4QUJGMDoKKyAgICBjYXNlIDB4RjlCMjoKKyAgICBjYXNlIDB4RkYxMDoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxOEE6CisgICAgY2FzZSAweDEwNEEwOgorICAgIGNhc2UgMHgxRDdDRToKKyAgICBjYXNlIDB4MUQ3RDg6CisgICAgY2FzZSAweDFEN0UyOgorICAgIGNhc2UgMHgxRDdFQzoKKyAgICBjYXNlIDB4MUQ3RjY6CisgICAgY2FzZSAweDFGMTAwOgorICAgIGNhc2UgMHgxRjEwMToKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMC4wOworICAgIGNhc2UgMHgwMDMxOgorICAgIGNhc2UgMHgwMEI5OgorICAgIGNhc2UgMHgwNjYxOgorICAgIGNhc2UgMHgwNkYxOgorICAgIGNhc2UgMHgwN0MxOgorICAgIGNhc2UgMHgwOTY3OgorICAgIGNhc2UgMHgwOUU3OgorICAgIGNhc2UgMHgwQTY3OgorICAgIGNhc2UgMHgwQUU3OgorICAgIGNhc2UgMHgwQjY3OgorICAgIGNhc2UgMHgwQkU3OgorICAgIGNhc2UgMHgwQzY3OgorICAgIGNhc2UgMHgwQzc5OgorICAgIGNhc2UgMHgwQzdDOgorICAgIGNhc2UgMHgwQ0U3OgorICAgIGNhc2UgMHgwRDY3OgorICAgIGNhc2UgMHgwRTUxOgorICAgIGNhc2UgMHgwRUQxOgorICAgIGNhc2UgMHgwRjIxOgorICAgIGNhc2UgMHgxMDQxOgorICAgIGNhc2UgMHgxMDkxOgorICAgIGNhc2UgMHgxMzY5OgorICAgIGNhc2UgMHgxN0UxOgorICAgIGNhc2UgMHgxN0YxOgorICAgIGNhc2UgMHgxODExOgorICAgIGNhc2UgMHgxOTQ3OgorICAgIGNhc2UgMHgxOUQxOgorICAgIGNhc2UgMHgxOURBOgorICAgIGNhc2UgMHgxQTgxOgorICAgIGNhc2UgMHgxQTkxOgorICAgIGNhc2UgMHgxQjUxOgorICAgIGNhc2UgMHgxQkIxOgorICAgIGNhc2UgMHgxQzQxOgorICAgIGNhc2UgMHgxQzUxOgorICAgIGNhc2UgMHgyMDgxOgorICAgIGNhc2UgMHgyMTVGOgorICAgIGNhc2UgMHgyMTYwOgorICAgIGNhc2UgMHgyMTcwOgorICAgIGNhc2UgMHgyNDYwOgorICAgIGNhc2UgMHgyNDc0OgorICAgIGNhc2UgMHgyNDg4OgorICAgIGNhc2UgMHgyNEY1OgorICAgIGNhc2UgMHgyNzc2OgorICAgIGNhc2UgMHgyNzgwOgorICAgIGNhc2UgMHgyNzhBOgorICAgIGNhc2UgMHgzMDIxOgorICAgIGNhc2UgMHgzMTkyOgorICAgIGNhc2UgMHgzMjIwOgorICAgIGNhc2UgMHgzMjgwOgorICAgIGNhc2UgMHg0RTAwOgorICAgIGNhc2UgMHg1OEYxOgorICAgIGNhc2UgMHg1OEY5OgorICAgIGNhc2UgMHg1RTdBOgorICAgIGNhc2UgMHg1RjBDOgorICAgIGNhc2UgMHhBNjIxOgorICAgIGNhc2UgMHhBNkU2OgorICAgIGNhc2UgMHhBOEQxOgorICAgIGNhc2UgMHhBOTAxOgorICAgIGNhc2UgMHhBOUQxOgorICAgIGNhc2UgMHhBQTUxOgorICAgIGNhc2UgMHhBQkYxOgorICAgIGNhc2UgMHhGRjExOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEwNzoKKyAgICBjYXNlIDB4MTAxNDI6CisgICAgY2FzZSAweDEwMTU4OgorICAgIGNhc2UgMHgxMDE1OToKKyAgICBjYXNlIDB4MTAxNUE6CisgICAgY2FzZSAweDEwMzIwOgorICAgIGNhc2UgMHgxMDNEMToKKyAgICBjYXNlIDB4MTA0QTE6CisgICAgY2FzZSAweDEwODU4OgorICAgIGNhc2UgMHgxMDkxNjoKKyAgICBjYXNlIDB4MTBBNDA6CisgICAgY2FzZSAweDEwQTdEOgorICAgIGNhc2UgMHgxMEI1ODoKKyAgICBjYXNlIDB4MTBCNzg6CisgICAgY2FzZSAweDEwRTYwOgorICAgIGNhc2UgMHgxMjQxNToKKyAgICBjYXNlIDB4MTI0MUU6CisgICAgY2FzZSAweDEyNDJDOgorICAgIGNhc2UgMHgxMjQzNDoKKyAgICBjYXNlIDB4MTI0NEY6CisgICAgY2FzZSAweDEyNDU4OgorICAgIGNhc2UgMHgxRDM2MDoKKyAgICBjYXNlIDB4MUQ3Q0Y6CisgICAgY2FzZSAweDFEN0Q5OgorICAgIGNhc2UgMHgxRDdFMzoKKyAgICBjYXNlIDB4MUQ3RUQ6CisgICAgY2FzZSAweDFEN0Y3OgorICAgIGNhc2UgMHgxRjEwMjoKKyAgICBjYXNlIDB4MjA5MkE6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEuMDsKKyAgICBjYXNlIDB4MjE1MjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEuMC8xMC4wOworICAgIGNhc2UgMHgwOUY0OgorICAgIGNhc2UgMHhBODMzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzE2LjA7CisgICAgY2FzZSAweDAwQkQ6CisgICAgY2FzZSAweDBENzQ6CisgICAgY2FzZSAweDBGMkE6CisgICAgY2FzZSAweDJDRkQ6CisgICAgY2FzZSAweEE4MzE6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTQxOgorICAgIGNhc2UgMHgxMDE3NToKKyAgICBjYXNlIDB4MTAxNzY6CisgICAgY2FzZSAweDEwRTdCOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvMi4wOworICAgIGNhc2UgMHgyMTUzOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMEU3RDoKKyAgICBjYXNlIDB4MTI0NUE6CisgICAgY2FzZSAweDEyNDVEOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvMy4wOworICAgIGNhc2UgMHgwMEJDOgorICAgIGNhc2UgMHgwOUY3OgorICAgIGNhc2UgMHgwRDczOgorICAgIGNhc2UgMHhBODMwOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDE0MDoKKyAgICBjYXNlIDB4MTBFN0M6CisgICAgY2FzZSAweDEyNDYwOgorICAgIGNhc2UgMHgxMjQ2MjoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzQuMDsKKyAgICBjYXNlIDB4MjE1NToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEuMC81LjA7CisgICAgY2FzZSAweDIxNTk6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEyNDYxOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvNi4wOworICAgIGNhc2UgMHgyMTUwOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzcuMDsKKyAgICBjYXNlIDB4MDlGNToKKyAgICBjYXNlIDB4MjE1QjoKKyAgICBjYXNlIDB4QTgzNDoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTI0NUY6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEuMC84LjA7CisgICAgY2FzZSAweDIxNTE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvOS4wOworICAgIGNhc2UgMHgwQkYwOgorICAgIGNhc2UgMHgwRDcwOgorICAgIGNhc2UgMHgxMzcyOgorICAgIGNhc2UgMHgyMTY5OgorICAgIGNhc2UgMHgyMTc5OgorICAgIGNhc2UgMHgyNDY5OgorICAgIGNhc2UgMHgyNDdEOgorICAgIGNhc2UgMHgyNDkxOgorICAgIGNhc2UgMHgyNEZFOgorICAgIGNhc2UgMHgyNzdGOgorICAgIGNhc2UgMHgyNzg5OgorICAgIGNhc2UgMHgyNzkzOgorICAgIGNhc2UgMHgzMDM4OgorICAgIGNhc2UgMHgzMjI5OgorICAgIGNhc2UgMHgzMjg5OgorICAgIGNhc2UgMHg0RUMwOgorICAgIGNhc2UgMHg1MzQxOgorICAgIGNhc2UgMHg2MkZFOgorICAgIGNhc2UgMHhGOTczOgorICAgIGNhc2UgMHhGOUZEOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExMDoKKyAgICBjYXNlIDB4MTAxNDk6CisgICAgY2FzZSAweDEwMTUwOgorICAgIGNhc2UgMHgxMDE1NzoKKyAgICBjYXNlIDB4MTAxNjA6CisgICAgY2FzZSAweDEwMTYxOgorICAgIGNhc2UgMHgxMDE2MjoKKyAgICBjYXNlIDB4MTAxNjM6CisgICAgY2FzZSAweDEwMTY0OgorICAgIGNhc2UgMHgxMDMyMjoKKyAgICBjYXNlIDB4MTAzRDM6CisgICAgY2FzZSAweDEwODVCOgorICAgIGNhc2UgMHgxMDkxNzoKKyAgICBjYXNlIDB4MTBBNDQ6CisgICAgY2FzZSAweDEwQjVDOgorICAgIGNhc2UgMHgxMEI3QzoKKyAgICBjYXNlIDB4MTBFNjk6CisgICAgY2FzZSAweDFEMzY5OgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMC4wOworICAgIGNhc2UgMHgwQkYxOgorICAgIGNhc2UgMHgwRDcxOgorICAgIGNhc2UgMHgxMzdCOgorICAgIGNhc2UgMHgyMTZEOgorICAgIGNhc2UgMHgyMTdEOgorICAgIGNhc2UgMHg0RjcwOgorICAgIGNhc2UgMHg3NjdFOgorICAgIGNhc2UgMHg5NjRDOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExOToKKyAgICBjYXNlIDB4MTAxNEI6CisgICAgY2FzZSAweDEwMTUyOgorICAgIGNhc2UgMHgxMDE2QToKKyAgICBjYXNlIDB4MTAzRDU6CisgICAgY2FzZSAweDEwODVEOgorICAgIGNhc2UgMHgxMDkxOToKKyAgICBjYXNlIDB4MTBBNDY6CisgICAgY2FzZSAweDEwQjVFOgorICAgIGNhc2UgMHgxMEI3RToKKyAgICBjYXNlIDB4MTBFNzI6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEwMC4wOworICAgIGNhc2UgMHgwQkYyOgorICAgIGNhc2UgMHgwRDcyOgorICAgIGNhc2UgMHgyMTZGOgorICAgIGNhc2UgMHgyMTdGOgorICAgIGNhc2UgMHgyMTgwOgorICAgIGNhc2UgMHg0RURGOgorICAgIGNhc2UgMHg1MzQzOgorICAgIGNhc2UgMHg5NjIxOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyMjoKKyAgICBjYXNlIDB4MTAxNEQ6CisgICAgY2FzZSAweDEwMTU0OgorICAgIGNhc2UgMHgxMDE3MToKKyAgICBjYXNlIDB4MTA4NUU6CisgICAgY2FzZSAweDEwQTQ3OgorICAgIGNhc2UgMHgxMEI1RjoKKyAgICBjYXNlIDB4MTBCN0Y6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEwMDAuMDsKKyAgICBjYXNlIDB4MTM3QzoKKyAgICBjYXNlIDB4MjE4MjoKKyAgICBjYXNlIDB4NEUwNzoKKyAgICBjYXNlIDB4ODQyQzoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMkI6CisgICAgY2FzZSAweDEwMTU1OgorICAgIGNhc2UgMHgxMDg1RjoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAwMDAuMDsKKyAgICBjYXNlIDB4MjE4ODoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEwMDAwMC4wOworICAgIGNhc2UgMHg0RUJGOgorICAgIGNhc2UgMHg1MTA0OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAwMDAwMDAwLjA7CisgICAgY2FzZSAweDUxNDY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMDAwMDAwMDAwMDAwLjA7CisgICAgY2FzZSAweDIxNkE6CisgICAgY2FzZSAweDIxN0E6CisgICAgY2FzZSAweDI0NkE6CisgICAgY2FzZSAweDI0N0U6CisgICAgY2FzZSAweDI0OTI6CisgICAgY2FzZSAweDI0RUI6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMS4wOworICAgIGNhc2UgMHgwRjJGOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTEuMC8yLjA7CisgICAgY2FzZSAweDIxNkI6CisgICAgY2FzZSAweDIxN0I6CisgICAgY2FzZSAweDI0NkI6CisgICAgY2FzZSAweDI0N0Y6CisgICAgY2FzZSAweDI0OTM6CisgICAgY2FzZSAweDI0RUM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMi4wOworICAgIGNhc2UgMHgyNDZDOgorICAgIGNhc2UgMHgyNDgwOgorICAgIGNhc2UgMHgyNDk0OgorICAgIGNhc2UgMHgyNEVEOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTMuMDsKKyAgICBjYXNlIDB4MEYzMDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEzLjAvMi4wOworICAgIGNhc2UgMHgyNDZEOgorICAgIGNhc2UgMHgyNDgxOgorICAgIGNhc2UgMHgyNDk1OgorICAgIGNhc2UgMHgyNEVFOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTQuMDsKKyAgICBjYXNlIDB4MjQ2RToKKyAgICBjYXNlIDB4MjQ4MjoKKyAgICBjYXNlIDB4MjQ5NjoKKyAgICBjYXNlIDB4MjRFRjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDE1LjA7CisgICAgY2FzZSAweDBGMzE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxNS4wLzIuMDsKKyAgICBjYXNlIDB4MDlGOToKKyAgICBjYXNlIDB4MjQ2RjoKKyAgICBjYXNlIDB4MjQ4MzoKKyAgICBjYXNlIDB4MjQ5NzoKKyAgICBjYXNlIDB4MjRGMDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDE2LjA7CisgICAgY2FzZSAweDE2RUU6CisgICAgY2FzZSAweDI0NzA6CisgICAgY2FzZSAweDI0ODQ6CisgICAgY2FzZSAweDI0OTg6CisgICAgY2FzZSAweDI0RjE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxNy4wOworICAgIGNhc2UgMHgwRjMyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTcuMC8yLjA7CisgICAgY2FzZSAweDE2RUY6CisgICAgY2FzZSAweDI0NzE6CisgICAgY2FzZSAweDI0ODU6CisgICAgY2FzZSAweDI0OTk6CisgICAgY2FzZSAweDI0RjI6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxOC4wOworICAgIGNhc2UgMHgxNkYwOgorICAgIGNhc2UgMHgyNDcyOgorICAgIGNhc2UgMHgyNDg2OgorICAgIGNhc2UgMHgyNDlBOgorICAgIGNhc2UgMHgyNEYzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTkuMDsKKyAgICBjYXNlIDB4MDAzMjoKKyAgICBjYXNlIDB4MDBCMjoKKyAgICBjYXNlIDB4MDY2MjoKKyAgICBjYXNlIDB4MDZGMjoKKyAgICBjYXNlIDB4MDdDMjoKKyAgICBjYXNlIDB4MDk2ODoKKyAgICBjYXNlIDB4MDlFODoKKyAgICBjYXNlIDB4MEE2ODoKKyAgICBjYXNlIDB4MEFFODoKKyAgICBjYXNlIDB4MEI2ODoKKyAgICBjYXNlIDB4MEJFODoKKyAgICBjYXNlIDB4MEM2ODoKKyAgICBjYXNlIDB4MEM3QToKKyAgICBjYXNlIDB4MEM3RDoKKyAgICBjYXNlIDB4MENFODoKKyAgICBjYXNlIDB4MEQ2ODoKKyAgICBjYXNlIDB4MEU1MjoKKyAgICBjYXNlIDB4MEVEMjoKKyAgICBjYXNlIDB4MEYyMjoKKyAgICBjYXNlIDB4MTA0MjoKKyAgICBjYXNlIDB4MTA5MjoKKyAgICBjYXNlIDB4MTM2QToKKyAgICBjYXNlIDB4MTdFMjoKKyAgICBjYXNlIDB4MTdGMjoKKyAgICBjYXNlIDB4MTgxMjoKKyAgICBjYXNlIDB4MTk0ODoKKyAgICBjYXNlIDB4MTlEMjoKKyAgICBjYXNlIDB4MUE4MjoKKyAgICBjYXNlIDB4MUE5MjoKKyAgICBjYXNlIDB4MUI1MjoKKyAgICBjYXNlIDB4MUJCMjoKKyAgICBjYXNlIDB4MUM0MjoKKyAgICBjYXNlIDB4MUM1MjoKKyAgICBjYXNlIDB4MjA4MjoKKyAgICBjYXNlIDB4MjE2MToKKyAgICBjYXNlIDB4MjE3MToKKyAgICBjYXNlIDB4MjQ2MToKKyAgICBjYXNlIDB4MjQ3NToKKyAgICBjYXNlIDB4MjQ4OToKKyAgICBjYXNlIDB4MjRGNjoKKyAgICBjYXNlIDB4Mjc3NzoKKyAgICBjYXNlIDB4Mjc4MToKKyAgICBjYXNlIDB4Mjc4QjoKKyAgICBjYXNlIDB4MzAyMjoKKyAgICBjYXNlIDB4MzE5MzoKKyAgICBjYXNlIDB4MzIyMToKKyAgICBjYXNlIDB4MzI4MToKKyAgICBjYXNlIDB4MzQ4MzoKKyAgICBjYXNlIDB4NEU4QzoKKyAgICBjYXNlIDB4NTE2OToKKyAgICBjYXNlIDB4NUYwRDoKKyAgICBjYXNlIDB4NUYxMDoKKyAgICBjYXNlIDB4OENBRToKKyAgICBjYXNlIDB4OENCMzoKKyAgICBjYXNlIDB4OEQzMDoKKyAgICBjYXNlIDB4QTYyMjoKKyAgICBjYXNlIDB4QTZFNzoKKyAgICBjYXNlIDB4QThEMjoKKyAgICBjYXNlIDB4QTkwMjoKKyAgICBjYXNlIDB4QTlEMjoKKyAgICBjYXNlIDB4QUE1MjoKKyAgICBjYXNlIDB4QUJGMjoKKyAgICBjYXNlIDB4Rjk3ODoKKyAgICBjYXNlIDB4RkYxMjoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMDg6CisgICAgY2FzZSAweDEwMTVCOgorICAgIGNhc2UgMHgxMDE1QzoKKyAgICBjYXNlIDB4MTAxNUQ6CisgICAgY2FzZSAweDEwMTVFOgorICAgIGNhc2UgMHgxMDNEMjoKKyAgICBjYXNlIDB4MTA0QTI6CisgICAgY2FzZSAweDEwODU5OgorICAgIGNhc2UgMHgxMDkxQToKKyAgICBjYXNlIDB4MTBBNDE6CisgICAgY2FzZSAweDEwQjU5OgorICAgIGNhc2UgMHgxMEI3OToKKyAgICBjYXNlIDB4MTBFNjE6CisgICAgY2FzZSAweDEyNDAwOgorICAgIGNhc2UgMHgxMjQxNjoKKyAgICBjYXNlIDB4MTI0MUY6CisgICAgY2FzZSAweDEyNDIzOgorICAgIGNhc2UgMHgxMjQyRDoKKyAgICBjYXNlIDB4MTI0MzU6CisgICAgY2FzZSAweDEyNDRBOgorICAgIGNhc2UgMHgxMjQ1MDoKKyAgICBjYXNlIDB4MTI0NTk6CisgICAgY2FzZSAweDFEMzYxOgorICAgIGNhc2UgMHgxRDdEMDoKKyAgICBjYXNlIDB4MUQ3REE6CisgICAgY2FzZSAweDFEN0U0OgorICAgIGNhc2UgMHgxRDdFRToKKyAgICBjYXNlIDB4MUQ3Rjg6CisgICAgY2FzZSAweDFGMTAzOgorICAgIGNhc2UgMHgyMjM5MDoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMi4wOworICAgIGNhc2UgMHgyMTU0OgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDE3NzoKKyAgICBjYXNlIDB4MTBFN0U6CisgICAgY2FzZSAweDEyNDVCOgorICAgIGNhc2UgMHgxMjQ1RToKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMi4wLzMuMDsKKyAgICBjYXNlIDB4MjE1NjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIuMC81LjA7CisgICAgY2FzZSAweDEzNzM6CisgICAgY2FzZSAweDI0NzM6CisgICAgY2FzZSAweDI0ODc6CisgICAgY2FzZSAweDI0OUI6CisgICAgY2FzZSAweDI0RjQ6CisgICAgY2FzZSAweDMwMzk6CisgICAgY2FzZSAweDUzNDQ6CisgICAgY2FzZSAweDVFRkY6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTExOgorICAgIGNhc2UgMHgxMDNENDoKKyAgICBjYXNlIDB4MTA4NUM6CisgICAgY2FzZSAweDEwOTE4OgorICAgIGNhc2UgMHgxMEE0NToKKyAgICBjYXNlIDB4MTBCNUQ6CisgICAgY2FzZSAweDEwQjdEOgorICAgIGNhc2UgMHgxMEU2QToKKyAgICBjYXNlIDB4MUQzNkE6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwLjA7CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTFBOgorICAgIGNhc2UgMHgxMEU3MzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwMC4wOworI2VuZGlmCisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTIzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAwMC4wOworI2VuZGlmCisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTJDOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAwMDAuMDsKKyNlbmRpZgorICAgIGNhc2UgMHgzMjUxOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjEuMDsKKyAgICBjYXNlIDB4MzI1MjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIyLjA7CisgICAgY2FzZSAweDMyNTM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyMy4wOworICAgIGNhc2UgMHgzMjU0OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjQuMDsKKyAgICBjYXNlIDB4MzI1NToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDI1LjA7CisgICAgY2FzZSAweDMyNTY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyNi4wOworICAgIGNhc2UgMHgzMjU3OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjcuMDsKKyAgICBjYXNlIDB4MzI1ODoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDI4LjA7CisgICAgY2FzZSAweDMyNTk6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyOS4wOworICAgIGNhc2UgMHgwMDMzOgorICAgIGNhc2UgMHgwMEIzOgorICAgIGNhc2UgMHgwNjYzOgorICAgIGNhc2UgMHgwNkYzOgorICAgIGNhc2UgMHgwN0MzOgorICAgIGNhc2UgMHgwOTY5OgorICAgIGNhc2UgMHgwOUU5OgorICAgIGNhc2UgMHgwQTY5OgorICAgIGNhc2UgMHgwQUU5OgorICAgIGNhc2UgMHgwQjY5OgorICAgIGNhc2UgMHgwQkU5OgorICAgIGNhc2UgMHgwQzY5OgorICAgIGNhc2UgMHgwQzdCOgorICAgIGNhc2UgMHgwQzdFOgorICAgIGNhc2UgMHgwQ0U5OgorICAgIGNhc2UgMHgwRDY5OgorICAgIGNhc2UgMHgwRTUzOgorICAgIGNhc2UgMHgwRUQzOgorICAgIGNhc2UgMHgwRjIzOgorICAgIGNhc2UgMHgxMDQzOgorICAgIGNhc2UgMHgxMDkzOgorICAgIGNhc2UgMHgxMzZCOgorICAgIGNhc2UgMHgxN0UzOgorICAgIGNhc2UgMHgxN0YzOgorICAgIGNhc2UgMHgxODEzOgorICAgIGNhc2UgMHgxOTQ5OgorICAgIGNhc2UgMHgxOUQzOgorICAgIGNhc2UgMHgxQTgzOgorICAgIGNhc2UgMHgxQTkzOgorICAgIGNhc2UgMHgxQjUzOgorICAgIGNhc2UgMHgxQkIzOgorICAgIGNhc2UgMHgxQzQzOgorICAgIGNhc2UgMHgxQzUzOgorICAgIGNhc2UgMHgyMDgzOgorICAgIGNhc2UgMHgyMTYyOgorICAgIGNhc2UgMHgyMTcyOgorICAgIGNhc2UgMHgyNDYyOgorICAgIGNhc2UgMHgyNDc2OgorICAgIGNhc2UgMHgyNDhBOgorICAgIGNhc2UgMHgyNEY3OgorICAgIGNhc2UgMHgyNzc4OgorICAgIGNhc2UgMHgyNzgyOgorICAgIGNhc2UgMHgyNzhDOgorICAgIGNhc2UgMHgzMDIzOgorICAgIGNhc2UgMHgzMTk0OgorICAgIGNhc2UgMHgzMjIyOgorICAgIGNhc2UgMHgzMjgyOgorICAgIGNhc2UgMHg0RTA5OgorICAgIGNhc2UgMHg0RUU4OgorICAgIGNhc2UgMHg1M0MxOgorICAgIGNhc2UgMHg1M0MyOgorICAgIGNhc2UgMHg1M0MzOgorICAgIGNhc2UgMHg1M0M0OgorICAgIGNhc2UgMHg1RjBFOgorICAgIGNhc2UgMHhBNjIzOgorICAgIGNhc2UgMHhBNkU4OgorICAgIGNhc2UgMHhBOEQzOgorICAgIGNhc2UgMHhBOTAzOgorICAgIGNhc2UgMHhBOUQzOgorICAgIGNhc2UgMHhBQTUzOgorICAgIGNhc2UgMHhBQkYzOgorICAgIGNhc2UgMHhGOTZCOgorICAgIGNhc2UgMHhGRjEzOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEwOToKKyAgICBjYXNlIDB4MTA0QTM6CisgICAgY2FzZSAweDEwODVBOgorICAgIGNhc2UgMHgxMDkxQjoKKyAgICBjYXNlIDB4MTBBNDI6CisgICAgY2FzZSAweDEwQjVBOgorICAgIGNhc2UgMHgxMEI3QToKKyAgICBjYXNlIDB4MTBFNjI6CisgICAgY2FzZSAweDEyNDAxOgorICAgIGNhc2UgMHgxMjQwODoKKyAgICBjYXNlIDB4MTI0MTc6CisgICAgY2FzZSAweDEyNDIwOgorICAgIGNhc2UgMHgxMjQyNDoKKyAgICBjYXNlIDB4MTI0MjU6CisgICAgY2FzZSAweDEyNDJFOgorICAgIGNhc2UgMHgxMjQyRjoKKyAgICBjYXNlIDB4MTI0MzY6CisgICAgY2FzZSAweDEyNDM3OgorICAgIGNhc2UgMHgxMjQzQToKKyAgICBjYXNlIDB4MTI0M0I6CisgICAgY2FzZSAweDEyNDRCOgorICAgIGNhc2UgMHgxMjQ1MToKKyAgICBjYXNlIDB4MUQzNjI6CisgICAgY2FzZSAweDFEN0QxOgorICAgIGNhc2UgMHgxRDdEQjoKKyAgICBjYXNlIDB4MUQ3RTU6CisgICAgY2FzZSAweDFEN0VGOgorICAgIGNhc2UgMHgxRDdGOToKKyAgICBjYXNlIDB4MUYxMDQ6CisgICAgY2FzZSAweDIwQUZEOgorICAgIGNhc2UgMHgyMEIxOToKKyAgICBjYXNlIDB4MjI5OTg6CisgICAgY2FzZSAweDIzQjFCOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAzLjA7CisgICAgY2FzZSAweDA5RjY6CisgICAgY2FzZSAweEE4MzU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzLjAvMTYuMDsKKyAgICBjYXNlIDB4MEYyQjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMuMC8yLjA7CisgICAgY2FzZSAweDAwQkU6CisgICAgY2FzZSAweDA5Rjg6CisgICAgY2FzZSAweDBENzU6CisgICAgY2FzZSAweEE4MzI6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTc4OgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAzLjAvNC4wOworICAgIGNhc2UgMHgyMTU3OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMy4wLzUuMDsKKyAgICBjYXNlIDB4MjE1QzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMuMC84LjA7CisgICAgY2FzZSAweDEzNzQ6CisgICAgY2FzZSAweDMwM0E6CisgICAgY2FzZSAweDMyNUE6CisgICAgY2FzZSAweDUzNDU6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTEyOgorICAgIGNhc2UgMHgxMDE2NToKKyAgICBjYXNlIDB4MTBFNkI6CisgICAgY2FzZSAweDFEMzZCOgorICAgIGNhc2UgMHgyMDk4MzoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzAuMDsKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMUI6CisgICAgY2FzZSAweDEwMTZCOgorICAgIGNhc2UgMHgxMEU3NDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMwMC4wOworI2VuZGlmCisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTI0OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzAwMC4wOworI2VuZGlmCisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTJEOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzAwMDAuMDsKKyNlbmRpZgorICAgIGNhc2UgMHgzMjVCOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzEuMDsKKyAgICBjYXNlIDB4MzI1QzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMyLjA7CisgICAgY2FzZSAweDMyNUQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzMy4wOworICAgIGNhc2UgMHgzMjVFOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzQuMDsKKyAgICBjYXNlIDB4MzI1RjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDM1LjA7CisgICAgY2FzZSAweDMyQjE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzNi4wOworICAgIGNhc2UgMHgzMkIyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzcuMDsKKyAgICBjYXNlIDB4MzJCMzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDM4LjA7CisgICAgY2FzZSAweDMyQjQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzOS4wOworICAgIGNhc2UgMHgwMDM0OgorICAgIGNhc2UgMHgwNjY0OgorICAgIGNhc2UgMHgwNkY0OgorICAgIGNhc2UgMHgwN0M0OgorICAgIGNhc2UgMHgwOTZBOgorICAgIGNhc2UgMHgwOUVBOgorICAgIGNhc2UgMHgwQTZBOgorICAgIGNhc2UgMHgwQUVBOgorICAgIGNhc2UgMHgwQjZBOgorICAgIGNhc2UgMHgwQkVBOgorICAgIGNhc2UgMHgwQzZBOgorICAgIGNhc2UgMHgwQ0VBOgorICAgIGNhc2UgMHgwRDZBOgorICAgIGNhc2UgMHgwRTU0OgorICAgIGNhc2UgMHgwRUQ0OgorICAgIGNhc2UgMHgwRjI0OgorICAgIGNhc2UgMHgxMDQ0OgorICAgIGNhc2UgMHgxMDk0OgorICAgIGNhc2UgMHgxMzZDOgorICAgIGNhc2UgMHgxN0U0OgorICAgIGNhc2UgMHgxN0Y0OgorICAgIGNhc2UgMHgxODE0OgorICAgIGNhc2UgMHgxOTRBOgorICAgIGNhc2UgMHgxOUQ0OgorICAgIGNhc2UgMHgxQTg0OgorICAgIGNhc2UgMHgxQTk0OgorICAgIGNhc2UgMHgxQjU0OgorICAgIGNhc2UgMHgxQkI0OgorICAgIGNhc2UgMHgxQzQ0OgorICAgIGNhc2UgMHgxQzU0OgorICAgIGNhc2UgMHgyMDc0OgorICAgIGNhc2UgMHgyMDg0OgorICAgIGNhc2UgMHgyMTYzOgorICAgIGNhc2UgMHgyMTczOgorICAgIGNhc2UgMHgyNDYzOgorICAgIGNhc2UgMHgyNDc3OgorICAgIGNhc2UgMHgyNDhCOgorICAgIGNhc2UgMHgyNEY4OgorICAgIGNhc2UgMHgyNzc5OgorICAgIGNhc2UgMHgyNzgzOgorICAgIGNhc2UgMHgyNzhEOgorICAgIGNhc2UgMHgzMDI0OgorICAgIGNhc2UgMHgzMTk1OgorICAgIGNhc2UgMHgzMjIzOgorICAgIGNhc2UgMHgzMjgzOgorICAgIGNhc2UgMHg0RTk2OgorICAgIGNhc2UgMHg1NkRCOgorICAgIGNhc2UgMHg4MDg2OgorICAgIGNhc2UgMHhBNjI0OgorICAgIGNhc2UgMHhBNkU5OgorICAgIGNhc2UgMHhBOEQ0OgorICAgIGNhc2UgMHhBOTA0OgorICAgIGNhc2UgMHhBOUQ0OgorICAgIGNhc2UgMHhBQTU0OgorICAgIGNhc2UgMHhBQkY0OgorICAgIGNhc2UgMHhGRjE0OgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEwQToKKyAgICBjYXNlIDB4MTA0QTQ6CisgICAgY2FzZSAweDEwQTQzOgorICAgIGNhc2UgMHgxMEI1QjoKKyAgICBjYXNlIDB4MTBCN0I6CisgICAgY2FzZSAweDEwRTYzOgorICAgIGNhc2UgMHgxMjQwMjoKKyAgICBjYXNlIDB4MTI0MDk6CisgICAgY2FzZSAweDEyNDBGOgorICAgIGNhc2UgMHgxMjQxODoKKyAgICBjYXNlIDB4MTI0MjE6CisgICAgY2FzZSAweDEyNDI2OgorICAgIGNhc2UgMHgxMjQzMDoKKyAgICBjYXNlIDB4MTI0Mzg6CisgICAgY2FzZSAweDEyNDNDOgorICAgIGNhc2UgMHgxMjQzRDoKKyAgICBjYXNlIDB4MTI0M0U6CisgICAgY2FzZSAweDEyNDNGOgorICAgIGNhc2UgMHgxMjQ0QzoKKyAgICBjYXNlIDB4MTI0NTI6CisgICAgY2FzZSAweDEyNDUzOgorICAgIGNhc2UgMHgxRDM2MzoKKyAgICBjYXNlIDB4MUQ3RDI6CisgICAgY2FzZSAweDFEN0RDOgorICAgIGNhc2UgMHgxRDdFNjoKKyAgICBjYXNlIDB4MUQ3RjA6CisgICAgY2FzZSAweDFEN0ZBOgorICAgIGNhc2UgMHgxRjEwNToKKyAgICBjYXNlIDB4MjAwNjQ6CisgICAgY2FzZSAweDIwMEUyOgorICAgIGNhc2UgMHgyNjI2RDoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNC4wOworICAgIGNhc2UgMHgyMTU4OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNC4wLzUuMDsKKyAgICBjYXNlIDB4MTM3NToKKyAgICBjYXNlIDB4MzJCNToKKyAgICBjYXNlIDB4NTM0QzoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMTM6CisgICAgY2FzZSAweDEwRTZDOgorICAgIGNhc2UgMHgxRDM2QzoKKyAgICBjYXNlIDB4MjA5OEM6CisgICAgY2FzZSAweDIwOTlDOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA0MC4wOworI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExQzoKKyAgICBjYXNlIDB4MTBFNzU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0MDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyNToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQwMDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyRToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQwMDAwLjA7CisjZW5kaWYKKyAgICBjYXNlIDB4MzJCNjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQxLjA7CisgICAgY2FzZSAweDMyQjc6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0Mi4wOworICAgIGNhc2UgMHgzMkI4OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDMuMDsKKyAgICBjYXNlIDB4MzJCOToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQ0LjA7CisgICAgY2FzZSAweDMyQkE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0NS4wOworICAgIGNhc2UgMHgzMkJCOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDYuMDsKKyAgICBjYXNlIDB4MzJCQzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQ3LjA7CisgICAgY2FzZSAweDMyQkQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0OC4wOworICAgIGNhc2UgMHgzMkJFOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDkuMDsKKyAgICBjYXNlIDB4MDAzNToKKyAgICBjYXNlIDB4MDY2NToKKyAgICBjYXNlIDB4MDZGNToKKyAgICBjYXNlIDB4MDdDNToKKyAgICBjYXNlIDB4MDk2QjoKKyAgICBjYXNlIDB4MDlFQjoKKyAgICBjYXNlIDB4MEE2QjoKKyAgICBjYXNlIDB4MEFFQjoKKyAgICBjYXNlIDB4MEI2QjoKKyAgICBjYXNlIDB4MEJFQjoKKyAgICBjYXNlIDB4MEM2QjoKKyAgICBjYXNlIDB4MENFQjoKKyAgICBjYXNlIDB4MEQ2QjoKKyAgICBjYXNlIDB4MEU1NToKKyAgICBjYXNlIDB4MEVENToKKyAgICBjYXNlIDB4MEYyNToKKyAgICBjYXNlIDB4MTA0NToKKyAgICBjYXNlIDB4MTA5NToKKyAgICBjYXNlIDB4MTM2RDoKKyAgICBjYXNlIDB4MTdFNToKKyAgICBjYXNlIDB4MTdGNToKKyAgICBjYXNlIDB4MTgxNToKKyAgICBjYXNlIDB4MTk0QjoKKyAgICBjYXNlIDB4MTlENToKKyAgICBjYXNlIDB4MUE4NToKKyAgICBjYXNlIDB4MUE5NToKKyAgICBjYXNlIDB4MUI1NToKKyAgICBjYXNlIDB4MUJCNToKKyAgICBjYXNlIDB4MUM0NToKKyAgICBjYXNlIDB4MUM1NToKKyAgICBjYXNlIDB4MjA3NToKKyAgICBjYXNlIDB4MjA4NToKKyAgICBjYXNlIDB4MjE2NDoKKyAgICBjYXNlIDB4MjE3NDoKKyAgICBjYXNlIDB4MjQ2NDoKKyAgICBjYXNlIDB4MjQ3ODoKKyAgICBjYXNlIDB4MjQ4QzoKKyAgICBjYXNlIDB4MjRGOToKKyAgICBjYXNlIDB4Mjc3QToKKyAgICBjYXNlIDB4Mjc4NDoKKyAgICBjYXNlIDB4Mjc4RToKKyAgICBjYXNlIDB4MzAyNToKKyAgICBjYXNlIDB4MzIyNDoKKyAgICBjYXNlIDB4MzI4NDoKKyAgICBjYXNlIDB4MzQwNToKKyAgICBjYXNlIDB4MzgyQToKKyAgICBjYXNlIDB4NEU5NDoKKyAgICBjYXNlIDB4NEYwRDoKKyAgICBjYXNlIDB4QTYyNToKKyAgICBjYXNlIDB4QTZFQToKKyAgICBjYXNlIDB4QThENToKKyAgICBjYXNlIDB4QTkwNToKKyAgICBjYXNlIDB4QTlENToKKyAgICBjYXNlIDB4QUE1NToKKyAgICBjYXNlIDB4QUJGNToKKyAgICBjYXNlIDB4RkYxNToKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMEI6CisgICAgY2FzZSAweDEwMTQzOgorICAgIGNhc2UgMHgxMDE0ODoKKyAgICBjYXNlIDB4MTAxNEY6CisgICAgY2FzZSAweDEwMTVGOgorICAgIGNhc2UgMHgxMDE3MzoKKyAgICBjYXNlIDB4MTAzMjE6CisgICAgY2FzZSAweDEwNEE1OgorICAgIGNhc2UgMHgxMEU2NDoKKyAgICBjYXNlIDB4MTI0MDM6CisgICAgY2FzZSAweDEyNDBBOgorICAgIGNhc2UgMHgxMjQxMDoKKyAgICBjYXNlIDB4MTI0MTk6CisgICAgY2FzZSAweDEyNDIyOgorICAgIGNhc2UgMHgxMjQyNzoKKyAgICBjYXNlIDB4MTI0MzE6CisgICAgY2FzZSAweDEyNDM5OgorICAgIGNhc2UgMHgxMjQ0RDoKKyAgICBjYXNlIDB4MTI0NTQ6CisgICAgY2FzZSAweDEyNDU1OgorICAgIGNhc2UgMHgxRDM2NDoKKyAgICBjYXNlIDB4MUQ3RDM6CisgICAgY2FzZSAweDFEN0REOgorICAgIGNhc2UgMHgxRDdFNzoKKyAgICBjYXNlIDB4MUQ3RjE6CisgICAgY2FzZSAweDFEN0ZCOgorICAgIGNhc2UgMHgxRjEwNjoKKyAgICBjYXNlIDB4MjAxMjE6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUuMDsKKyAgICBjYXNlIDB4MEYyQzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUuMC8yLjA7CisgICAgY2FzZSAweDIxNUE6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEyNDVDOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA1LjAvNi4wOworICAgIGNhc2UgMHgyMTVEOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNS4wLzguMDsKKyAgICBjYXNlIDB4MTM3NjoKKyAgICBjYXNlIDB4MjE2QzoKKyAgICBjYXNlIDB4MjE3QzoKKyAgICBjYXNlIDB4MjE4NjoKKyAgICBjYXNlIDB4MzJCRjoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMTQ6CisgICAgY2FzZSAweDEwMTQ0OgorICAgIGNhc2UgMHgxMDE0QToKKyAgICBjYXNlIDB4MTAxNTE6CisgICAgY2FzZSAweDEwMTY2OgorICAgIGNhc2UgMHgxMDE2NzoKKyAgICBjYXNlIDB4MTAxNjg6CisgICAgY2FzZSAweDEwMTY5OgorICAgIGNhc2UgMHgxMDE3NDoKKyAgICBjYXNlIDB4MTAzMjM6CisgICAgY2FzZSAweDEwQTdFOgorICAgIGNhc2UgMHgxMEU2RDoKKyAgICBjYXNlIDB4MUQzNkQ6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUwLjA7CisgICAgY2FzZSAweDIxNkU6CisgICAgY2FzZSAweDIxN0U6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTFEOgorICAgIGNhc2UgMHgxMDE0NToKKyAgICBjYXNlIDB4MTAxNEM6CisgICAgY2FzZSAweDEwMTUzOgorICAgIGNhc2UgMHgxMDE2QzoKKyAgICBjYXNlIDB4MTAxNkQ6CisgICAgY2FzZSAweDEwMTZFOgorICAgIGNhc2UgMHgxMDE2RjoKKyAgICBjYXNlIDB4MTAxNzA6CisgICAgY2FzZSAweDEwRTc2OgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA1MDAuMDsKKyAgICBjYXNlIDB4MjE4MToKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMjY6CisgICAgY2FzZSAweDEwMTQ2OgorICAgIGNhc2UgMHgxMDE0RToKKyAgICBjYXNlIDB4MTAxNzI6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUwMDAuMDsKKyAgICBjYXNlIDB4MjE4NzoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMkY6CisgICAgY2FzZSAweDEwMTQ3OgorICAgIGNhc2UgMHgxMDE1NjoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNTAwMDAuMDsKKyAgICBjYXNlIDB4MDAzNjoKKyAgICBjYXNlIDB4MDY2NjoKKyAgICBjYXNlIDB4MDZGNjoKKyAgICBjYXNlIDB4MDdDNjoKKyAgICBjYXNlIDB4MDk2QzoKKyAgICBjYXNlIDB4MDlFQzoKKyAgICBjYXNlIDB4MEE2QzoKKyAgICBjYXNlIDB4MEFFQzoKKyAgICBjYXNlIDB4MEI2QzoKKyAgICBjYXNlIDB4MEJFQzoKKyAgICBjYXNlIDB4MEM2QzoKKyAgICBjYXNlIDB4MENFQzoKKyAgICBjYXNlIDB4MEQ2QzoKKyAgICBjYXNlIDB4MEU1NjoKKyAgICBjYXNlIDB4MEVENjoKKyAgICBjYXNlIDB4MEYyNjoKKyAgICBjYXNlIDB4MTA0NjoKKyAgICBjYXNlIDB4MTA5NjoKKyAgICBjYXNlIDB4MTM2RToKKyAgICBjYXNlIDB4MTdFNjoKKyAgICBjYXNlIDB4MTdGNjoKKyAgICBjYXNlIDB4MTgxNjoKKyAgICBjYXNlIDB4MTk0QzoKKyAgICBjYXNlIDB4MTlENjoKKyAgICBjYXNlIDB4MUE4NjoKKyAgICBjYXNlIDB4MUE5NjoKKyAgICBjYXNlIDB4MUI1NjoKKyAgICBjYXNlIDB4MUJCNjoKKyAgICBjYXNlIDB4MUM0NjoKKyAgICBjYXNlIDB4MUM1NjoKKyAgICBjYXNlIDB4MjA3NjoKKyAgICBjYXNlIDB4MjA4NjoKKyAgICBjYXNlIDB4MjE2NToKKyAgICBjYXNlIDB4MjE3NToKKyAgICBjYXNlIDB4MjE4NToKKyAgICBjYXNlIDB4MjQ2NToKKyAgICBjYXNlIDB4MjQ3OToKKyAgICBjYXNlIDB4MjQ4RDoKKyAgICBjYXNlIDB4MjRGQToKKyAgICBjYXNlIDB4Mjc3QjoKKyAgICBjYXNlIDB4Mjc4NToKKyAgICBjYXNlIDB4Mjc4RjoKKyAgICBjYXNlIDB4MzAyNjoKKyAgICBjYXNlIDB4MzIyNToKKyAgICBjYXNlIDB4MzI4NToKKyAgICBjYXNlIDB4NTE2RDoKKyAgICBjYXNlIDB4OTY0NjoKKyAgICBjYXNlIDB4OTY3ODoKKyAgICBjYXNlIDB4QTYyNjoKKyAgICBjYXNlIDB4QTZFQjoKKyAgICBjYXNlIDB4QThENjoKKyAgICBjYXNlIDB4QTkwNjoKKyAgICBjYXNlIDB4QTlENjoKKyAgICBjYXNlIDB4QUE1NjoKKyAgICBjYXNlIDB4QUJGNjoKKyAgICBjYXNlIDB4RjlEMToKKyAgICBjYXNlIDB4RjlEMzoKKyAgICBjYXNlIDB4RkYxNjoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMEM6CisgICAgY2FzZSAweDEwNEE2OgorICAgIGNhc2UgMHgxMEU2NToKKyAgICBjYXNlIDB4MTI0MDQ6CisgICAgY2FzZSAweDEyNDBCOgorICAgIGNhc2UgMHgxMjQxMToKKyAgICBjYXNlIDB4MTI0MUE6CisgICAgY2FzZSAweDEyNDI4OgorICAgIGNhc2UgMHgxMjQ0MDoKKyAgICBjYXNlIDB4MTI0NEU6CisgICAgY2FzZSAweDFEMzY1OgorICAgIGNhc2UgMHgxRDdENDoKKyAgICBjYXNlIDB4MUQ3REU6CisgICAgY2FzZSAweDFEN0U4OgorICAgIGNhc2UgMHgxRDdGMjoKKyAgICBjYXNlIDB4MUQ3RkM6CisgICAgY2FzZSAweDFGMTA3OgorICAgIGNhc2UgMHgyMEFFQToKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNi4wOworICAgIGNhc2UgMHgxMzc3OgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExNToKKyAgICBjYXNlIDB4MTBFNkU6CisgICAgY2FzZSAweDFEMzZFOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA2MC4wOworI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExRToKKyAgICBjYXNlIDB4MTBFNzc6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA2MDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyNzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDYwMDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEzMDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDYwMDAwLjA7CisjZW5kaWYKKyAgICBjYXNlIDB4MDAzNzoKKyAgICBjYXNlIDB4MDY2NzoKKyAgICBjYXNlIDB4MDZGNzoKKyAgICBjYXNlIDB4MDdDNzoKKyAgICBjYXNlIDB4MDk2RDoKKyAgICBjYXNlIDB4MDlFRDoKKyAgICBjYXNlIDB4MEE2RDoKKyAgICBjYXNlIDB4MEFFRDoKKyAgICBjYXNlIDB4MEI2RDoKKyAgICBjYXNlIDB4MEJFRDoKKyAgICBjYXNlIDB4MEM2RDoKKyAgICBjYXNlIDB4MENFRDoKKyAgICBjYXNlIDB4MEQ2RDoKKyAgICBjYXNlIDB4MEU1NzoKKyAgICBjYXNlIDB4MEVENzoKKyAgICBjYXNlIDB4MEYyNzoKKyAgICBjYXNlIDB4MTA0NzoKKyAgICBjYXNlIDB4MTA5NzoKKyAgICBjYXNlIDB4MTM2RjoKKyAgICBjYXNlIDB4MTdFNzoKKyAgICBjYXNlIDB4MTdGNzoKKyAgICBjYXNlIDB4MTgxNzoKKyAgICBjYXNlIDB4MTk0RDoKKyAgICBjYXNlIDB4MTlENzoKKyAgICBjYXNlIDB4MUE4NzoKKyAgICBjYXNlIDB4MUE5NzoKKyAgICBjYXNlIDB4MUI1NzoKKyAgICBjYXNlIDB4MUJCNzoKKyAgICBjYXNlIDB4MUM0NzoKKyAgICBjYXNlIDB4MUM1NzoKKyAgICBjYXNlIDB4MjA3NzoKKyAgICBjYXNlIDB4MjA4NzoKKyAgICBjYXNlIDB4MjE2NjoKKyAgICBjYXNlIDB4MjE3NjoKKyAgICBjYXNlIDB4MjQ2NjoKKyAgICBjYXNlIDB4MjQ3QToKKyAgICBjYXNlIDB4MjQ4RToKKyAgICBjYXNlIDB4MjRGQjoKKyAgICBjYXNlIDB4Mjc3QzoKKyAgICBjYXNlIDB4Mjc4NjoKKyAgICBjYXNlIDB4Mjc5MDoKKyAgICBjYXNlIDB4MzAyNzoKKyAgICBjYXNlIDB4MzIyNjoKKyAgICBjYXNlIDB4MzI4NjoKKyAgICBjYXNlIDB4M0I0RDoKKyAgICBjYXNlIDB4NEUwMzoKKyAgICBjYXNlIDB4NjdEMjoKKyAgICBjYXNlIDB4NkYwNjoKKyAgICBjYXNlIDB4QTYyNzoKKyAgICBjYXNlIDB4QTZFQzoKKyAgICBjYXNlIDB4QThENzoKKyAgICBjYXNlIDB4QTkwNzoKKyAgICBjYXNlIDB4QTlENzoKKyAgICBjYXNlIDB4QUE1NzoKKyAgICBjYXNlIDB4QUJGNzoKKyAgICBjYXNlIDB4RkYxNzoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMEQ6CisgICAgY2FzZSAweDEwNEE3OgorICAgIGNhc2UgMHgxMEU2NjoKKyAgICBjYXNlIDB4MTI0MDU6CisgICAgY2FzZSAweDEyNDBDOgorICAgIGNhc2UgMHgxMjQxMjoKKyAgICBjYXNlIDB4MTI0MUI6CisgICAgY2FzZSAweDEyNDI5OgorICAgIGNhc2UgMHgxMjQ0MToKKyAgICBjYXNlIDB4MTI0NDI6CisgICAgY2FzZSAweDEyNDQzOgorICAgIGNhc2UgMHgxRDM2NjoKKyAgICBjYXNlIDB4MUQ3RDU6CisgICAgY2FzZSAweDFEN0RGOgorICAgIGNhc2UgMHgxRDdFOToKKyAgICBjYXNlIDB4MUQ3RjM6CisgICAgY2FzZSAweDFEN0ZEOgorICAgIGNhc2UgMHgxRjEwODoKKyAgICBjYXNlIDB4MjAwMDE6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDcuMDsKKyAgICBjYXNlIDB4MEYyRDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDcuMC8yLjA7CisgICAgY2FzZSAweDIxNUU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA3LjAvOC4wOworICAgIGNhc2UgMHgxMzc4OgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExNjoKKyAgICBjYXNlIDB4MTBFNkY6CisgICAgY2FzZSAweDFEMzZGOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA3MC4wOworI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExRjoKKyAgICBjYXNlIDB4MTBFNzg6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA3MDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyODoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDcwMDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEzMToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDcwMDAwLjA7CisjZW5kaWYKKyAgICBjYXNlIDB4MDAzODoKKyAgICBjYXNlIDB4MDY2ODoKKyAgICBjYXNlIDB4MDZGODoKKyAgICBjYXNlIDB4MDdDODoKKyAgICBjYXNlIDB4MDk2RToKKyAgICBjYXNlIDB4MDlFRToKKyAgICBjYXNlIDB4MEE2RToKKyAgICBjYXNlIDB4MEFFRToKKyAgICBjYXNlIDB4MEI2RToKKyAgICBjYXNlIDB4MEJFRToKKyAgICBjYXNlIDB4MEM2RToKKyAgICBjYXNlIDB4MENFRToKKyAgICBjYXNlIDB4MEQ2RToKKyAgICBjYXNlIDB4MEU1ODoKKyAgICBjYXNlIDB4MEVEODoKKyAgICBjYXNlIDB4MEYyODoKKyAgICBjYXNlIDB4MTA0ODoKKyAgICBjYXNlIDB4MTA5ODoKKyAgICBjYXNlIDB4MTM3MDoKKyAgICBjYXNlIDB4MTdFODoKKyAgICBjYXNlIDB4MTdGODoKKyAgICBjYXNlIDB4MTgxODoKKyAgICBjYXNlIDB4MTk0RToKKyAgICBjYXNlIDB4MTlEODoKKyAgICBjYXNlIDB4MUE4ODoKKyAgICBjYXNlIDB4MUE5ODoKKyAgICBjYXNlIDB4MUI1ODoKKyAgICBjYXNlIDB4MUJCODoKKyAgICBjYXNlIDB4MUM0ODoKKyAgICBjYXNlIDB4MUM1ODoKKyAgICBjYXNlIDB4MjA3ODoKKyAgICBjYXNlIDB4MjA4ODoKKyAgICBjYXNlIDB4MjE2NzoKKyAgICBjYXNlIDB4MjE3NzoKKyAgICBjYXNlIDB4MjQ2NzoKKyAgICBjYXNlIDB4MjQ3QjoKKyAgICBjYXNlIDB4MjQ4RjoKKyAgICBjYXNlIDB4MjRGQzoKKyAgICBjYXNlIDB4Mjc3RDoKKyAgICBjYXNlIDB4Mjc4NzoKKyAgICBjYXNlIDB4Mjc5MToKKyAgICBjYXNlIDB4MzAyODoKKyAgICBjYXNlIDB4MzIyNzoKKyAgICBjYXNlIDB4MzI4NzoKKyAgICBjYXNlIDB4NTE2QjoKKyAgICBjYXNlIDB4NjM0QzoKKyAgICBjYXNlIDB4QTYyODoKKyAgICBjYXNlIDB4QTZFRDoKKyAgICBjYXNlIDB4QThEODoKKyAgICBjYXNlIDB4QTkwODoKKyAgICBjYXNlIDB4QTlEODoKKyAgICBjYXNlIDB4QUE1ODoKKyAgICBjYXNlIDB4QUJGODoKKyAgICBjYXNlIDB4RkYxODoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMEU6CisgICAgY2FzZSAweDEwNEE4OgorICAgIGNhc2UgMHgxMEU2NzoKKyAgICBjYXNlIDB4MTI0MDY6CisgICAgY2FzZSAweDEyNDBEOgorICAgIGNhc2UgMHgxMjQxMzoKKyAgICBjYXNlIDB4MTI0MUM6CisgICAgY2FzZSAweDEyNDJBOgorICAgIGNhc2UgMHgxMjQ0NDoKKyAgICBjYXNlIDB4MTI0NDU6CisgICAgY2FzZSAweDFEMzY3OgorICAgIGNhc2UgMHgxRDdENjoKKyAgICBjYXNlIDB4MUQ3RTA6CisgICAgY2FzZSAweDFEN0VBOgorICAgIGNhc2UgMHgxRDdGNDoKKyAgICBjYXNlIDB4MUQ3RkU6CisgICAgY2FzZSAweDFGMTA5OgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA4LjA7CisgICAgY2FzZSAweDEzNzk6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTE3OgorICAgIGNhc2UgMHgxMEU3MDoKKyAgICBjYXNlIDB4MUQzNzA6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDgwLjA7CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTIwOgorICAgIGNhc2UgMHgxMEU3OToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDgwMC4wOworI2VuZGlmCisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTI5OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgODAwMC4wOworI2VuZGlmCisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTMyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgODAwMDAuMDsKKyNlbmRpZgorICAgIGNhc2UgMHgwMDM5OgorICAgIGNhc2UgMHgwNjY5OgorICAgIGNhc2UgMHgwNkY5OgorICAgIGNhc2UgMHgwN0M5OgorICAgIGNhc2UgMHgwOTZGOgorICAgIGNhc2UgMHgwOUVGOgorICAgIGNhc2UgMHgwQTZGOgorICAgIGNhc2UgMHgwQUVGOgorICAgIGNhc2UgMHgwQjZGOgorICAgIGNhc2UgMHgwQkVGOgorICAgIGNhc2UgMHgwQzZGOgorICAgIGNhc2UgMHgwQ0VGOgorICAgIGNhc2UgMHgwRDZGOgorICAgIGNhc2UgMHgwRTU5OgorICAgIGNhc2UgMHgwRUQ5OgorICAgIGNhc2UgMHgwRjI5OgorICAgIGNhc2UgMHgxMDQ5OgorICAgIGNhc2UgMHgxMDk5OgorICAgIGNhc2UgMHgxMzcxOgorICAgIGNhc2UgMHgxN0U5OgorICAgIGNhc2UgMHgxN0Y5OgorICAgIGNhc2UgMHgxODE5OgorICAgIGNhc2UgMHgxOTRGOgorICAgIGNhc2UgMHgxOUQ5OgorICAgIGNhc2UgMHgxQTg5OgorICAgIGNhc2UgMHgxQTk5OgorICAgIGNhc2UgMHgxQjU5OgorICAgIGNhc2UgMHgxQkI5OgorICAgIGNhc2UgMHgxQzQ5OgorICAgIGNhc2UgMHgxQzU5OgorICAgIGNhc2UgMHgyMDc5OgorICAgIGNhc2UgMHgyMDg5OgorICAgIGNhc2UgMHgyMTY4OgorICAgIGNhc2UgMHgyMTc4OgorICAgIGNhc2UgMHgyNDY4OgorICAgIGNhc2UgMHgyNDdDOgorICAgIGNhc2UgMHgyNDkwOgorICAgIGNhc2UgMHgyNEZEOgorICAgIGNhc2UgMHgyNzdFOgorICAgIGNhc2UgMHgyNzg4OgorICAgIGNhc2UgMHgyNzkyOgorICAgIGNhc2UgMHgzMDI5OgorICAgIGNhc2UgMHgzMjI4OgorICAgIGNhc2UgMHgzMjg4OgorICAgIGNhc2UgMHg0RTVEOgorICAgIGNhc2UgMHg1RUZFOgorICAgIGNhc2UgMHg3Mzk2OgorICAgIGNhc2UgMHhBNjI5OgorICAgIGNhc2UgMHhBNkVFOgorICAgIGNhc2UgMHhBOEQ5OgorICAgIGNhc2UgMHhBOTA5OgorICAgIGNhc2UgMHhBOUQ5OgorICAgIGNhc2UgMHhBQTU5OgorICAgIGNhc2UgMHhBQkY5OgorICAgIGNhc2UgMHhGRjE5OgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEwRjoKKyAgICBjYXNlIDB4MTA0QTk6CisgICAgY2FzZSAweDEwRTY4OgorICAgIGNhc2UgMHgxMjQwNzoKKyAgICBjYXNlIDB4MTI0MEU6CisgICAgY2FzZSAweDEyNDE0OgorICAgIGNhc2UgMHgxMjQxRDoKKyAgICBjYXNlIDB4MTI0MkI6CisgICAgY2FzZSAweDEyNDQ2OgorICAgIGNhc2UgMHgxMjQ0NzoKKyAgICBjYXNlIDB4MTI0NDg6CisgICAgY2FzZSAweDEyNDQ5OgorICAgIGNhc2UgMHgxRDM2ODoKKyAgICBjYXNlIDB4MUQ3RDc6CisgICAgY2FzZSAweDFEN0UxOgorICAgIGNhc2UgMHgxRDdFQjoKKyAgICBjYXNlIDB4MUQ3RjU6CisgICAgY2FzZSAweDFEN0ZGOgorICAgIGNhc2UgMHgxRjEwQToKKyAgICBjYXNlIDB4MkY4OTA6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDkuMDsKKyAgICBjYXNlIDB4MEYyRToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDkuMC8yLjA7CisgICAgY2FzZSAweDEzN0E6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTE4OgorICAgIGNhc2UgMHgxMDM0MToKKyAgICBjYXNlIDB4MTBFNzE6CisgICAgY2FzZSAweDFEMzcxOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA5MC4wOworI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyMToKKyAgICBjYXNlIDB4MTAzNEE6CisgICAgY2FzZSAweDEwRTdBOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgOTAwLjA7CisjZW5kaWYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMkE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA5MDAwLjA7CisjZW5kaWYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMzM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA5MDAwMC4wOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiAtMS4wOworfQorCisvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwKKyAqIHR5cGUgJ1dTJywgJ0InIG9yICdTJyBvciB0aGUgY2F0ZWdvcnkgJ1pzJywgMCBvdGhlcndpc2UuCisgKi8KK2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VTklDT0RFIGNoKQoreworI2lmZGVmIFdBTlRfV0NUWVBFX0ZVTkNUSU9OUworICAgIHJldHVybiBpc3dzcGFjZShjaCk7CisjZWxzZQorICAgIHN3aXRjaCAoY2gpIHsKKyAgICBjYXNlIDB4MDAwOToKKyAgICBjYXNlIDB4MDAwQToKKyAgICBjYXNlIDB4MDAwQjoKKyAgICBjYXNlIDB4MDAwQzoKKyAgICBjYXNlIDB4MDAwRDoKKyAgICBjYXNlIDB4MDAxQzoKKyAgICBjYXNlIDB4MDAxRDoKKyAgICBjYXNlIDB4MDAxRToKKyAgICBjYXNlIDB4MDAxRjoKKyAgICBjYXNlIDB4MDAyMDoKKyAgICBjYXNlIDB4MDA4NToKKyAgICBjYXNlIDB4MDBBMDoKKyAgICBjYXNlIDB4MTY4MDoKKyAgICBjYXNlIDB4MTgwRToKKyAgICBjYXNlIDB4MjAwMDoKKyAgICBjYXNlIDB4MjAwMToKKyAgICBjYXNlIDB4MjAwMjoKKyAgICBjYXNlIDB4MjAwMzoKKyAgICBjYXNlIDB4MjAwNDoKKyAgICBjYXNlIDB4MjAwNToKKyAgICBjYXNlIDB4MjAwNjoKKyAgICBjYXNlIDB4MjAwNzoKKyAgICBjYXNlIDB4MjAwODoKKyAgICBjYXNlIDB4MjAwOToKKyAgICBjYXNlIDB4MjAwQToKKyAgICBjYXNlIDB4MjAyODoKKyAgICBjYXNlIDB4MjAyOToKKyAgICBjYXNlIDB4MjAyRjoKKyAgICBjYXNlIDB4MjA1RjoKKyAgICBjYXNlIDB4MzAwMDoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgbGluZSBicmVhaworICogcHJvcGVydHkgJ0JLJywgJ0NSJywgJ0xGJyBvciAnTkwnIG9yIGhhdmluZyBiaWRpcmVjdGlvbmFsCisgKiB0eXBlICdCJywgMCBvdGhlcndpc2UuCisgKi8KK2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKHJlZ2lzdGVyIGNvbnN0IFB5X1VOSUNPREUgY2gpCit7CisgICAgc3dpdGNoIChjaCkgeworICAgIGNhc2UgMHgwMDBBOgorICAgIGNhc2UgMHgwMDBCOgorICAgIGNhc2UgMHgwMDBDOgorICAgIGNhc2UgMHgwMDBEOgorICAgIGNhc2UgMHgwMDFDOgorICAgIGNhc2UgMHgwMDFEOgorICAgIGNhc2UgMHgwMDFFOgorICAgIGNhc2UgMHgwMDg1OgorICAgIGNhc2UgMHgyMDI4OgorICAgIGNhc2UgMHgyMDI5OgorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fYnNkZGIuZHNwIGIvUEMvVkM2L19ic2RkYi5kc3AKaW5kZXggMTc1NmZlNy4uODA5ZmMzOSAxMDA2NDQKLS0tIGEvUEMvVkM2L19ic2RkYi5kc3AKKysrIGIvUEMvVkM2L19ic2RkYi5kc3AKQEAgLTEsOTkgKzEsOTkgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2JzZGRiIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9ic2RkYiAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9ic2RkYi5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2JzZGRiLm1hayIgQ0ZHPSJfYnNkZGIgLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfYnNkZGIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2JzZGRiIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2JzZGRiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9ic2RkYiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9ic2RkYiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cZGItNC43LjI1XGJ1aWxkX3dpbmRvd3MiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgLi5cLi5cLi5cZGItNC43LjI1XGJ1aWxkX3dpbmRvd3NcUmVsZWFzZVxsaWJkYjQ3cy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fYnNkZGIucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfYnNkZGIgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX2JzZGRiIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGRiLTQuNy4yNVxidWlsZF93aW5kb3dzIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC4uXC4uXC4uXGRiLTQuNy4yNVxidWlsZF93aW5kb3dzXFJlbGVhc2VcbGliZGI0N3MubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6Im1zdmNydGQiIC9vdXQ6Ii4vX2JzZGRiX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfYnNkZGIgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2JzZGRiIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9ic2RkYi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfYnNkZGIiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMgorCitDRkc9X2JzZGRiIC0gV2luMzIgUmVsZWFzZQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfYnNkZGIubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfYnNkZGIubWFrIiBDRkc9Il9ic2RkYiAtIFdpbjMyIFJlbGVhc2UiCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiX2JzZGRiIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAiX2JzZGRiIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIl9ic2RkYiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJfYnNkZGIgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9ic2RkYiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cZGItNC43LjI1XGJ1aWxkX3dpbmRvd3MiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC4uXC4uXC4uXGRiLTQuNy4yNVxidWlsZF93aW5kb3dzXFJlbGVhc2VcbGliZGI0N3MubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2JzZGRiLnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiX2JzZGRiIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX2JzZGRiIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGRiLTQuNy4yNVxidWlsZF93aW5kb3dzIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAuLlwuLlwuLlxkYi00LjcuMjVcYnVpbGRfd2luZG93c1xSZWxlYXNlXGxpYmRiNDdzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJtc3ZjcnRkIiAvb3V0OiIuL19ic2RkYl9kLnB5ZCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJfYnNkZGIgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJfYnNkZGIgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2JzZGRiLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fY3R5cGVzLmRzcCBiL1BDL1ZDNi9fY3R5cGVzLmRzcAppbmRleCBmZGYxODZhLi44YWI4OWY2IDEwMDY0NAotLS0gYS9QQy9WQzYvX2N0eXBlcy5kc3AKKysrIGIvUEMvVkM2L19jdHlwZXMuZHNwCkBAIC0xLDEzMSArMSwxMzEgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2N0eXBlcyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fY3R5cGVzIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXMubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXMubWFrIiBDRkc9Il9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfY3R5cGVzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2N0eXBlcyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlcyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXMucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfY3R5cGVzIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9jdHlwZXMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbGJhY2tzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxwcm9jLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNmaWVsZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbWFsbG9jX2Nsb3N1cmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNccHJlcF9jaWYuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcc3RnZGljdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW4zMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfY3R5cGVzIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPV9jdHlwZXMgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlcy5tYWsiIENGRz0iX2N0eXBlcyAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJfY3R5cGVzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIl9jdHlwZXMiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlcyIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzLnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9jdHlwZXMiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX2QucHlkIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJfY3R5cGVzIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlcy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxiYWNrcy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxwcm9jLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2ZpZWxkLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbWFsbG9jX2Nsb3N1cmUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xwcmVwX2NpZi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW4zMi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcCBiL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCmluZGV4IDk0MmIzMGMuLjc1ZDJkMTQgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCisrKyBiL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCkBAIC0xLDk5ICsxLDk5IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9jdHlwZXNfdGVzdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlc190ZXN0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzX3Rlc3QubWFrIiBDRkc9Il9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2N0eXBlc190ZXN0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc190ZXN0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9jdHlwZXNfdGVzdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX3Rlc3RfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2N0eXBlc190ZXN0IiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPV9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXNfdGVzdC5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXNfdGVzdC5tYWsiIENGRz0iX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIl9jdHlwZXNfdGVzdCIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfdGVzdC5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9jdHlwZXNfdGVzdCIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc190ZXN0X2QucHlkIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcCBiL1BDL1ZDNi9fZWxlbWVudHRyZWUuZHNwCmluZGV4IDVjOWEwOGIuLjhmZjNkMjUgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9fZWxlbWVudHRyZWUuZHNwCisrKyBiL1BDL1ZDNi9fZWxlbWVudHRyZWUuZHNwCkBAIC0xLDExMSArMSwxMTEgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2VsZW1lbnR0cmVlIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfZWxlbWVudHRyZWUubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9lbGVtZW50dHJlZS5tYWsiIENGRz0iX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfZWxlbWVudHRyZWUiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EICJCWVRFT1JERVI9MTIzNCIgL0QgIlhNTF9DT05URVhUX0JZVEVTPTEwMjQiIC9EICJVU0VfUFlFWFBBVF9DQVBJIiAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19lbGVtZW50dHJlZS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfZWxlbWVudHRyZWUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCAiQllURU9SREVSPTEyMzQiIC9EICJYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IiAvRCAiVVNFX1BZRVhQQVRfQ0FQSSIgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fZWxlbWVudHRyZWVfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2VsZW1lbnR0cmVlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9lbGVtZW50dHJlZSIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz1fZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfZWxlbWVudHRyZWUubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfZWxlbWVudHRyZWUubWFrIiBDRkc9Il9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJfZWxlbWVudHRyZWUiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCAiQllURU9SREVSPTEyMzQiIC9EICJYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IiAvRCAiVVNFX1BZRVhQQVRfQ0FQSSIgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19lbGVtZW50dHJlZS5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9lbGVtZW50dHJlZSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgIkJZVEVPUkRFUj0xMjM0IiAvRCAiWE1MX0NPTlRFWFRfQllURVM9MTAyNCIgL0QgIlVTRV9QWUVYUEFUX0NBUEkiIC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fZWxlbWVudHRyZWVfZC5weWQiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9lbGVtZW50dHJlZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvX21zaS5kc3AgYi9QQy9WQzYvX21zaS5kc3AKaW5kZXggMzhlNGFjNS4uYWE2Y2M4ZCAxMDA2NDQKLS0tIGEvUEMvVkM2L19tc2kuZHNwCisrKyBiL1BDL1ZDNi9fbXNpLmRzcApAQCAtMSw5OSArMSw5OSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfbXNpIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9tc2kgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX21zaS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX21zaS5tYWsiIENGRz0iX21zaSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfbXNpIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9tc2kgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfbXNpIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9tc2kgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfbXNpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX21zaS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9tc2kgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX21zaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX21zaV9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfbXNpIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQQ1xfbXNpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9tc2kiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMgorCitDRkc9X21zaSAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIl9tc2kubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfbXNpLm1hayIgQ0ZHPSJfbXNpIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgIl9tc2kgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiX21zaSIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJfbXNpIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfbXNpIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tc2kucHlkIgorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJfbXNpIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX21zaSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tc2lfZC5weWQiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIl9tc2kgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFBDXF9tc2kuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L19tdWx0aXByb2Nlc3NpbmcuZHNwIGIvUEMvVkM2L19tdWx0aXByb2Nlc3NpbmcuZHNwCmluZGV4IDJkM2Q2MzcuLjMyZmRiZDAgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcAorKysgYi9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AKQEAgLTEsMTE1ICsxLDExNSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfbXVsdGlwcm9jZXNzaW5nIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX211bHRpcHJvY2Vzc2luZy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX211bHRpcHJvY2Vzc2luZy5tYWsiIENGRz0iX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXVsdGlwcm9jZXNzaW5nLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMWQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tdWx0aXByb2Nlc3NpbmdfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xwaXBlX2Nvbm5lY3Rpb24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc2VtYXBob3JlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNvY2tldF9jb25uZWN0aW9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHdpbjMyX2Z1bmN0aW9ucy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfbXVsdGlwcm9jZXNzaW5nIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPV9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfbXVsdGlwcm9jZXNzaW5nLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX211bHRpcHJvY2Vzc2luZy5tYWsiIENGRz0iX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIl9tdWx0aXByb2Nlc3NpbmciCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX211bHRpcHJvY2Vzc2luZyIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tdWx0aXByb2Nlc3NpbmcucHlkIgorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX211bHRpcHJvY2Vzc2luZyIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxZDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX211bHRpcHJvY2Vzc2luZ19kLnB5ZCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHBpcGVfY29ubmVjdGlvbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNlbWFwaG9yZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNvY2tldF9jb25uZWN0aW9uLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcd2luMzJfZnVuY3Rpb25zLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc29ja2V0LmRzcCBiL1BDL1ZDNi9fc29ja2V0LmRzcAppbmRleCA0ZTg0MDU1Li42ZGU5Y2U3IDEwMDY0NAotLS0gYS9QQy9WQzYvX3NvY2tldC5kc3AKKysrIGIvUEMvVkM2L19zb2NrZXQuZHNwCkBAIC0xLDk5ICsxLDk5IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zb2NrZXQiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3NvY2tldCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc29ja2V0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc29ja2V0Lm1hayIgQ0ZHPSJfc29ja2V0IC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9zb2NrZXQiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zb2NrZXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zb2NrZXQucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc29ja2V0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zb2NrZXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NvY2tldF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfc29ja2V0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc29ja2V0IiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPV9zb2NrZXQgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfc29ja2V0Lm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX3NvY2tldC5tYWsiIENGRz0iX3NvY2tldCAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJfc29ja2V0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIl9zb2NrZXQiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NvY2tldCIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zb2NrZXQucHlkIgorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJfc29ja2V0IC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NvY2tldCIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NvY2tldF9kLnB5ZCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJfc29ja2V0IC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L19zcWxpdGUzLmRzcCBiL1BDL1ZDNi9fc3FsaXRlMy5kc3AKaW5kZXggYThmMzMyOS4uNzExNWE4MiAxMDA2NDQKLS0tIGEvUEMvVkM2L19zcWxpdGUzLmRzcAorKysgYi9QQy9WQzYvX3NxbGl0ZTMuZHNwCkBAIC0xLDEzMSArMSwxMzEgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NxbGl0ZTMiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3NxbGl0ZTMgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NxbGl0ZTMubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zcWxpdGUzLm1hayIgQ0ZHPSJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9zcWxpdGUzIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCBNT0RVTEVfTkFNRT1cInNxbGl0ZTNcIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc3FsaXRlMy5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zcWxpdGUzIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zcWxpdGUzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCBNT0RVTEVfTkFNRT1cInNxbGl0ZTNcIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc3FsaXRlM19kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NxbGl0ZTMiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMgorCitDRkc9X3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfc3FsaXRlMy5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIl9zcWxpdGUzLm1hayIgQ0ZHPSJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3NxbGl0ZTMiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCBNT0RVTEVfTkFNRT1cInNxbGl0ZTNcIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zcWxpdGUzLnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3FsaXRlMyIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCBNT0RVTEVfTkFNRT1cInNxbGl0ZTNcIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zcWxpdGUzX2QucHlkIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc3NsLmRzcCBiL1BDL1ZDNi9fc3NsLmRzcAppbmRleCBlOGJiOTkzLi5iZDVlNjhhIDEwMDY0NAotLS0gYS9QQy9WQzYvX3NzbC5kc3AKKysrIGIvUEMvVkM2L19zc2wuZHNwCkBAIC0xLDg5ICsxLDg5IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zc2wiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIgMHgwMTA2DQotDQotQ0ZHPV9zc2wgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NzbC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NzbC5tYWsiIENGRz0iX3NzbCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfc3NsIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBFeHRlcm5hbCBUYXJnZXQiKQ0KLSFNRVNTQUdFICJfc3NsIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBDbWRfTGluZSAiTk1BS0UgL2YgX3NzbC5tYWsiDQotIyBQUk9QIEJBU0UgUmVidWlsZF9PcHQgIi9hIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9GaWxlICJfc3NsLmV4ZSINCi0jIFBST1AgQkFTRSBCc2NfTmFtZSAiX3NzbC5ic2MiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NzbCINCi0jIFBST1AgQ21kX0xpbmUgInB5dGhvbiBidWlsZF9zc2wucHkiDQotIyBQUk9QIFJlYnVpbGRfT3B0ICItYSINCi0jIFBST1AgVGFyZ2V0X0ZpbGUgIl9zc2wucHlkIg0KLSMgUFJPUCBCc2NfTmFtZSAiIg0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zc2wiDQotIyBQUk9QIEJBU0UgQ21kX0xpbmUgIk5NQUtFIC9mIF9zc2wubWFrIg0KLSMgUFJPUCBCQVNFIFJlYnVpbGRfT3B0ICIvYSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRmlsZSAiX3NzbF9kLnB5ZCINCi0jIFBST1AgQkFTRSBCc2NfTmFtZSAiX3NzbF9kLmJzYyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCINCi0jIFBST1AgQ21kX0xpbmUgInB5dGhvbl9kIC11IGJ1aWxkX3NzbC5weSAtZCINCi0jIFBST1AgUmVidWlsZF9PcHQgIi1hIg0KLSMgUFJPUCBUYXJnZXRfRmlsZSAiX3NzbF9kLnB5ZCINCi0jIFBST1AgQnNjX05hbWUgIiINCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfc3NsIC0gV2luMzIgRGVidWciDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zc2wuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NzbCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBFeHRlcm5hbCBUYXJnZXQiIDB4MDEwNgorCitDRkc9X3NzbCAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIl9zc2wubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfc3NsLm1hayIgQ0ZHPSJfc3NsIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IikKKyFNRVNTQUdFICJfc3NsIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorCishSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgQ21kX0xpbmUgIk5NQUtFIC9mIF9zc2wubWFrIgorIyBQUk9QIEJBU0UgUmVidWlsZF9PcHQgIi9hIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0ZpbGUgIl9zc2wuZXhlIgorIyBQUk9QIEJBU0UgQnNjX05hbWUgIl9zc2wuYnNjIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc3NsIgorIyBQUk9QIENtZF9MaW5lICJweXRob24gYnVpbGRfc3NsLnB5IgorIyBQUk9QIFJlYnVpbGRfT3B0ICItYSIKKyMgUFJPUCBUYXJnZXRfRmlsZSAiX3NzbC5weWQiCisjIFBST1AgQnNjX05hbWUgIiIKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCIKKyMgUFJPUCBCQVNFIENtZF9MaW5lICJOTUFLRSAvZiBfc3NsLm1hayIKKyMgUFJPUCBCQVNFIFJlYnVpbGRfT3B0ICIvYSIKKyMgUFJPUCBCQVNFIFRhcmdldF9GaWxlICJfc3NsX2QucHlkIgorIyBQUk9QIEJBU0UgQnNjX05hbWUgIl9zc2xfZC5ic2MiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIgorIyBQUk9QIENtZF9MaW5lICJweXRob25fZCAtdSBidWlsZF9zc2wucHkgLWQiCisjIFBST1AgUmVidWlsZF9PcHQgIi1hIgorIyBQUk9QIFRhcmdldF9GaWxlICJfc3NsX2QucHlkIgorIyBQUk9QIEJzY19OYW1lICIiCisjIFBST1AgVGFyZ2V0X0RpciAiIgorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIl9zc2wgLSBXaW4zMiBEZWJ1ZyIKKworIUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgRGVidWciCisKKyFFTkRJRiAKKworIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3NsLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fdGVzdGNhcGkuZHNwIGIvUEMvVkM2L190ZXN0Y2FwaS5kc3AKaW5kZXggNTIxNWI2My4uNzQ2YTJjMCAxMDA2NDQKLS0tIGEvUEMvVkM2L190ZXN0Y2FwaS5kc3AKKysrIGIvUEMvVkM2L190ZXN0Y2FwaS5kc3AKQEAgLTEsOTkgKzEsOTkgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3Rlc3RjYXBpIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGVzdGNhcGkubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl90ZXN0Y2FwaS5tYWsiIENGRz0iX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfdGVzdGNhcGkiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3Rlc3RjYXBpIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUYwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGVzdGNhcGkucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3Rlc3RjYXBpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGVzdGNhcGlfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il90ZXN0Y2FwaSIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz1fdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfdGVzdGNhcGkubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfdGVzdGNhcGkubWFrIiBDRkc9Il90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgIl90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJfdGVzdGNhcGkiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiX3Rlc3RjYXBpIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUYwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGVzdGNhcGkucHlkIgorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfdGVzdGNhcGkiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGVzdGNhcGlfZC5weWQiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiX3Rlc3RjYXBpIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF90ZXN0Y2FwaW1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvX3RraW50ZXIuZHNwIGIvUEMvVkM2L190a2ludGVyLmRzcAppbmRleCA4Y2RhODNhLi40OTZiNmMxIDEwMDY0NAotLS0gYS9QQy9WQzYvX3RraW50ZXIuZHNwCisrKyBiL1BDL1ZDNi9fdGtpbnRlci5kc3AKQEAgLTEsMTAzICsxLDEwMyBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfdGtpbnRlciIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl90a2ludGVyLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGtpbnRlci5tYWsiIENGRz0iX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl90a2ludGVyIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlwuLlwuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl90a2ludGVyIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF90a2ludGVyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXC4uXHRjbHRrXGluY2x1ZGUiIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiV0lUSF9BUFBJTklUIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXHRjbHRrXGxpYlx0azg1Zy5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg1Zy5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE5MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGtpbnRlcl9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF90a2ludGVyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlIiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIldJVEhfQVBQSU5JVCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NS5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg1LmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTkwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190a2ludGVyLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl90a2ludGVyIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90a2ludGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3RraW50ZXIiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMgorCitDRkc9X3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIl90a2ludGVyLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX3RraW50ZXIubWFrIiBDRkc9Il90a2ludGVyIC0gV2luMzIgUmVsZWFzZSIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgIl90a2ludGVyIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIl90a2ludGVyIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXC4uXC4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIl90a2ludGVyIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3RraW50ZXIiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIldJVEhfQVBQSU5JVCIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIC4uXC4uXC4uXHRjbHRrXGxpYlx0azg1Zy5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg1Zy5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE5MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGtpbnRlcl9kLnB5ZCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3RraW50ZXIiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXC4uXHRjbHRrXGluY2x1ZGUiIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJXSVRIX0FQUElOSVQiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NS5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg1LmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTkwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190a2ludGVyLnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGtpbnRlci5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L2J1aWxkX3NzbC5weSBiL1BDL1ZDNi9idWlsZF9zc2wucHkKaW5kZXggM2U5NmE1Yi4uMjlhNTE5MiAxMDA2NDQKLS0tIGEvUEMvVkM2L2J1aWxkX3NzbC5weQorKysgYi9QQy9WQzYvYnVpbGRfc3NsLnB5CkBAIC0xMyw2ICsxMywxMSBAQAogIyBpdCBzaG91bGQgY29uZmlndXJlIGFuZCBidWlsZCBTU0wsIHRoZW4gYnVpbGQgdGhlIHNzbCBQeXRob24gZXh0ZW5zaW9uCiAjIHdpdGhvdXQgaW50ZXJ2ZW50aW9uLgogCisjIE1vZGlmaWVkIGJ5IENocmlzdGlhbiBIZWltZXMKKyMgTm93IHRoaXMgc2NyaXB0IHN1cHBvcnRzIHByZS1nZW5lcmF0ZWQgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4KKyMgRGV2ZWxvcGVycyBkb24ndCBuZWVkIGFuIGluc3RhbGxhdGlvbiBvZiBQZXJsIGFueW1vcmUgdG8gYnVpbGQgUHl0aG9uLiBBIHN2bgorIyBjaGVja291dCBmcm9tIG91ciBzdm4gcmVwb3NpdG9yeSBpcyBlbm91Z2guCisKIGltcG9ydCBvcywgc3lzLCByZSwgc2h1dGlsCiAKICMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgpAQCAtMzYsNyArNDEsNyBAQAogIyBpcyBhdmFpbGFibGUuCiBkZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgogICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKHBlcmwgKyAnIC1lICJ1c2UgV2luMzI7IicpCisgICAgICAgIGZoID0gb3MucG9wZW4oJyIlcyIgLWUgInVzZSBXaW4zMjsiJyAlIHBlcmwpCiAgICAgICAgIGZoLnJlYWQoKQogICAgICAgICByYyA9IGZoLmNsb3NlKCkKICAgICAgICAgaWYgcmM6CkBAIC0xMjAsNiArMTI1LDIyIEBACiAgICAgcHJpbnQgZG9fc2NyaXB0CiAgICAgb3Muc3lzdGVtKGRvX3NjcmlwdCkKIAorZGVmIGNtcChmMSwgZjIpOgorICAgIGJ1ZnNpemUgPSAxMDI0ICogOAorICAgIHdpdGggb3BlbihmMSwgJ3JiJykgYXMgZnAxLCBvcGVuKGYyLCAncmInKSBhcyBmcDI6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBiMSA9IGZwMS5yZWFkKGJ1ZnNpemUpCisgICAgICAgICAgICBiMiA9IGZwMi5yZWFkKGJ1ZnNpemUpCisgICAgICAgICAgICBpZiBiMSAhPSBiMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlmIG5vdCBiMToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCitkZWYgY29weShzcmMsIGRzdCk6CisgICAgaWYgb3MucGF0aC5pc2ZpbGUoZHN0KSBhbmQgY21wKHNyYywgZHN0KToKKyAgICAgICAgcmV0dXJuCisgICAgc2h1dGlsLmNvcHkoc3JjLCBkc3QpCisKIGRlZiBtYWluKCk6CiAgICAgZGVidWcgPSAiLWQiIGluIHN5cy5hcmd2CiAgICAgYnVpbGRfYWxsID0gIi1hIiBpbiBzeXMuYXJndgpAQCAtMTI5LDYgKzE1MCw3IEBACiAgICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fbmFzbSIKICAgICAgICAgbWFrZWZpbGU9Im1zXFxudC5tYWsiCiAgICAgICAgIG0zMiA9IG1ha2VmaWxlCisgICAgICAgIGRpcnN1ZmZpeCA9ICIzMiIKICAgICBjb25maWd1cmUgKz0gIiBuby1pZGVhIG5vLXJjNSBuby1tZGMyIgogICAgIG1ha2VfZmxhZ3MgPSAiIgogICAgIGlmIGJ1aWxkX2FsbDoKQEAgLTEzNywxMiArMTU5LDEyIEBACiAgICAgIyBhcyAid2VsbCBrbm93biIgbG9jYXRpb25zCiAgICAgcGVybHMgPSBmaW5kX2FsbF9vbl9wYXRoKCJwZXJsLmV4ZSIsIFsiXFxwZXJsXFxiaW4iLCAiQzpcXHBlcmxcXGJpbiJdKQogICAgIHBlcmwgPSBmaW5kX3dvcmtpbmdfcGVybChwZXJscykKLSAgICBpZiBwZXJsIGlzIE5vbmU6Ci0gICAgICAgIHByaW50ICJObyBQZXJsIGluc3RhbGxhdGlvbiB3YXMgZm91bmQuIEV4aXN0aW5nIE1ha2VmaWxlcyBhcmUgdXNlZC4iCi0gICAgZWxzZToKKyAgICBpZiBwZXJsOgogICAgICAgICBwcmludCAiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQgIk5vIFBlcmwgaW5zdGFsbGF0aW9uIHdhcyBmb3VuZC4gRXhpc3RpbmcgTWFrZWZpbGVzIGFyZSB1c2VkLiIKICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAzIGxldmVscyB1cCBmcm9tIHBjYnVpbGQgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KKyAgICAjIExvb2sgZm9yIFNTTCAzIGxldmVscyB1cCBmcm9tIFBDL1ZDNiAtIGllLCBzYW1lIHBsYWNlIHpsaWIgZXRjIGFsbCBsaXZlLgogICAgIHNzbF9kaXIgPSBmaW5kX2Jlc3Rfc3NsX2RpcigoIi4uXFwuLlxcLi4iLCkpCiAgICAgaWYgc3NsX2RpciBpcyBOb25lOgogICAgICAgICBzeXMuZXhpdCgxKQpAQCAtMTczLDEyICsxOTUsMjEgQEAKICAgICAgICAgICAgICMgICAgb3Muc3lzdGVtKCJwZXJsIHV0aWxcbWsxbWYucGwgZGVidWcgIitjb25maWd1cmUrIiA+IittYWtlZmlsZSkKIAogICAgICAgICAgICAgZml4X21ha2VmaWxlKG1ha2VmaWxlKQotICAgICAgICAgICAgc2h1dGlsLmNvcHkociJjcnlwdG9cYnVpbGRpbmYuaCIsIHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCkKLSAgICAgICAgICAgIHNodXRpbC5jb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiLCByImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gpCisgICAgICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mLmgiLCByImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gpCisgICAgICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiLCByImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gpCisKKyAgICAgICAgIyBJZiB0aGUgYXNzZW1ibGVyIGZpbGVzIGRvbid0IGV4aXN0IGluIHRtcFhYLCBjb3B5IHRoZW0gdGhlcmUKKyAgICAgICAgaWYgcGVybCBpcyBOb25lOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCJ0bXAiK2RpcnN1ZmZpeCk6CisgICAgICAgICAgICAgICAgb3MubWtkaXIoInRtcCIrZGlyc3VmZml4KQorICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcigiYXNtIitkaXJzdWZmaXgpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmLmVuZHN3aXRoKCIuYXNtIik6IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUociJ0bXAlc1wlcyIgJSAoZGlyc3VmZml4LCBmKSk6IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkociJhc20lc1wlcyIgJSAoZGlyc3VmZml4LCBmKSwgInRtcCIrZGlyc3VmZml4KQogCiAgICAgICAgICMgTm93IHJ1biBtYWtlLgotICAgICAgICBzaHV0aWwuY29weShyImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXGJ1aWxkaW5mLmgiKQotICAgICAgICBzaHV0aWwuY29weShyImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiKQorICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cYnVpbGRpbmYuaCIpCisgICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xvcGVuc3NsY29uZi5oIikKIAogICAgICAgICAjbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyBQRVJMPVwiJXNcIiAtZiBcIiVzXCIiICUocGVybCwgbWFrZWZpbGUpCiAgICAgICAgIG1ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gLWYgXCIlc1wiIiAlIG1ha2VmaWxlCmRpZmYgLS1naXQgYS9QQy9WQzYvYnoyLmRzcCBiL1BDL1ZDNi9iejIuZHNwCmluZGV4IDkwYzRkZTIuLjdhYTE2ODYgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9iejIuZHNwCisrKyBiL1BDL1ZDNi9iejIuZHNwCkBAIC0xLDk5ICsxLDk5IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImJ6MiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1iejIgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiYnoyLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJiejIubWFrIiBDRkc9ImJ6MiAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJiejIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiYnoyIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiYnoyIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gImJ6MiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXGJ6MiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cYnppcDItMS4wLjUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXGJ6aXAyLTEuMC41XGxpYmJ6Mi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE3MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9iejIucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZSAvbm9kZWZhdWx0bGliDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImJ6MiAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xiejIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cYnppcDItMS4wLjUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXGJ6aXAyLTEuMC41XGxpYmJ6Mi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE3MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibXN2Y3J0IiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL2J6Ml9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiYnoyIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgImJ6MiAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iYnoyIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPWJ6MiAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgImJ6Mi5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgImJ6Mi5tYWsiIENGRz0iYnoyIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiYnoyIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAiYnoyIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgImJ6MiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJiejIgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXGJ6MiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cYnppcDItMS4wLjUiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuNVxsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vYnoyLnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZSAvbm9kZWZhdWx0bGliCisKKyFFTFNFSUYgICIkKENGRykiID09ICJiejIgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xiejIiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cYnppcDItMS4wLjUiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuNVxsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6Im1zdmNydCIgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9iejJfZC5weWQiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiYnoyIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiYnoyIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGJ6Mm1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvbWFrZV92ZXJzaW9uaW5mby5kc3AgYi9QQy9WQzYvbWFrZV92ZXJzaW9uaW5mby5kc3AKaW5kZXggYTczNWUxMi4uNzY2YWRlZiAxMDA2NDQKLS0tIGEvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwCisrKyBiL1BDL1ZDNi9tYWtlX3ZlcnNpb25pbmZvLmRzcApAQCAtMSwxMDggKzEsMTA4IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Im1ha2VfdmVyc2lvbmluZm8iIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KLQ0KLUNGRz1tYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibWFrZV92ZXJzaW9uaW5mby5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibWFrZV92ZXJzaW9uaW5mby5tYWsiIENGRz0ibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJtYWtlX3ZlcnNpb25pbmZvIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxtYWtlX3ZlcnNpb25pbmZvIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotIyBCZWdpbiBDdXN0b20gQnVpbGQNCi1JbnB1dFBhdGg9LlxtYWtlX3ZlcnNpb25pbmZvLmV4ZQ0KLVNPVVJDRT0iJChJbnB1dFBhdGgpIg0KLQ0KLSIuLlxweXRob25udF9yYy5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KLQkuXG1ha2VfdmVyc2lvbmluZm8uZXhlID4uLlxweXRob25udF9yYy5oDQotDQotIyBFbmQgQ3VzdG9tIEJ1aWxkDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcbWFrZV92ZXJzaW9uaW5mbyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL21ha2VfdmVyc2lvbmluZm9fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0jIEJlZ2luIEN1c3RvbSBCdWlsZA0KLUlucHV0UGF0aD0uXG1ha2VfdmVyc2lvbmluZm9fZC5leGUNCi1TT1VSQ0U9IiQoSW5wdXRQYXRoKSINCi0NCi0iLi5ccHl0aG9ubnRfcmNfZC5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KLQkuXG1ha2VfdmVyc2lvbmluZm9fZC5leGUgPi4uXHB5dGhvbm50X3JjX2QuaA0KLQ0KLSMgRW5kIEN1c3RvbSBCdWlsZA0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxtYWtlX3ZlcnNpb25pbmZvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Im1ha2VfdmVyc2lvbmluZm8iIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1tYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJtYWtlX3ZlcnNpb25pbmZvLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAibWFrZV92ZXJzaW9uaW5mby5tYWsiIENGRz0ibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIm1ha2VfdmVyc2lvbmluZm8iCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXG1ha2VfdmVyc2lvbmluZm8iCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorIyBCZWdpbiBDdXN0b20gQnVpbGQKK0lucHV0UGF0aD0uXG1ha2VfdmVyc2lvbmluZm8uZXhlCitTT1VSQ0U9IiQoSW5wdXRQYXRoKSIKKworIi4uXHB5dGhvbm50X3JjLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJLlxtYWtlX3ZlcnNpb25pbmZvLmV4ZSA+Li5ccHl0aG9ubnRfcmMuaAorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xtYWtlX3ZlcnNpb25pbmZvIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisjIEJlZ2luIEN1c3RvbSBCdWlsZAorSW5wdXRQYXRoPS5cbWFrZV92ZXJzaW9uaW5mb19kLmV4ZQorU09VUkNFPSIkKElucHV0UGF0aCkiCisKKyIuLlxweXRob25udF9yY19kLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCisJLlxtYWtlX3ZlcnNpb25pbmZvX2QuZXhlID4uLlxweXRob25udF9yY19kLmgKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cbWFrZV92ZXJzaW9uaW5mby5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvcGNidWlsZC5kc3cgYi9QQy9WQzYvcGNidWlsZC5kc3cKaW5kZXggYzEwYzc5NC4uNjA2ZjgzOCAxMDA2NDQKLS0tIGEvUEMvVkM2L3BjYnVpbGQuZHN3CisrKyBiL1BDL1ZDNi9wY2J1aWxkLmRzdwpAQCAtMSwzMjAgKzEsMzIwIEBACi1NaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfYnNkZGIiPSIuXF9ic2RkYi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX2N0eXBlcyI9Ii5cX2N0eXBlcy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX2N0eXBlc190ZXN0Ij0iLlxfY3R5cGVzX3Rlc3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX2VsZW1lbnR0cmVlIj0iLlxfZWxlbWVudHRyZWUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX21zaSI9Ii5cX21zaS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX211bHRpcHJvY2Vzc2luZyI9Ii5cX211bHRpcHJvY2Vzc2luZy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3NvY2tldCI9Ii5cX3NvY2tldC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3NxbGl0ZTMiPSIuXF9zcWxpdGUzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zc2wiPSIuXF9zc2wuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgdzl4cG9wZW4NCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3Rlc3RjYXBpIj0iLlxfdGVzdGNhcGkuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl90a2ludGVyIj0iLlxfdGtpbnRlci5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiYnoyIj0iLlxiejIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibWFrZV92ZXJzaW9uaW5mbyI9Ii5cbWFrZV92ZXJzaW9uaW5mby5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJweWV4cGF0Ij0iLlxweWV4cGF0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJweXRob24iPSIuXHB5dGhvbi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHl0aG9uY29yZSI9Ii5ccHl0aG9uY29yZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIG1ha2VfdmVyc2lvbmluZm8NCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHl0aG9udyI9Ii5ccHl0aG9udy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic2VsZWN0Ij0iLlxzZWxlY3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInVuaWNvZGVkYXRhIj0iLlx1bmljb2RlZGF0YS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAidzl4cG9wZW4iPSIuXHc5eHBvcGVuLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIndpbnNvdW5kIj0iLlx3aW5zb3VuZC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1HbG9iYWw6DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTwzPg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCitNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSEKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiX2JzZGRiIj0iLlxfYnNkZGIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIl9jdHlwZXMiPSIuXF9jdHlwZXMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIl9jdHlwZXNfdGVzdCI9Ii5cX2N0eXBlc190ZXN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIl9lbGVtZW50dHJlZSI9Ii5cX2VsZW1lbnR0cmVlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIl9tc2kiPSIuXF9tc2kuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIl9tdWx0aXByb2Nlc3NpbmciPSIuXF9tdWx0aXByb2Nlc3NpbmcuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIl9zb2NrZXQiPSIuXF9zb2NrZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIl9zcWxpdGUzIj0iLlxfc3FsaXRlMy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJfc3NsIj0iLlxfc3NsLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIHc5eHBvcGVuCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIl90ZXN0Y2FwaSI9Ii5cX3Rlc3RjYXBpLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJfdGtpbnRlciI9Ii5cX3RraW50ZXIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogImJ6MiI9Ii5cYnoyLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIm1ha2VfdmVyc2lvbmluZm8iPSIuXG1ha2VfdmVyc2lvbmluZm8uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAicHlleHBhdCI9Ii5ccHlleHBhdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAicHl0aG9uIj0iLlxweXRob24uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogInB5dGhvbmNvcmUiPSIuXHB5dGhvbmNvcmUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBtYWtlX3ZlcnNpb25pbmZvCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogInB5dGhvbnciPSIuXHB5dGhvbncuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogInNlbGVjdCI9Ii5cc2VsZWN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJ1bmljb2RlZGF0YSI9Ii5cdW5pY29kZWRhdGEuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogInc5eHBvcGVuIj0iLlx3OXhwb3Blbi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJ3aW5zb3VuZCI9Ii5cd2luc291bmQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworR2xvYmFsOgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08Mz4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5ZXhwYXQuZHNwIGIvUEMvVkM2L3B5ZXhwYXQuZHNwCmluZGV4IDQwMzVhNTQuLjE2MzY2MjcgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9weWV4cGF0LmRzcAorKysgYi9QQy9WQzYvcHlleHBhdC5kc3AKQEAgLTEsMTExICsxLDExMSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweWV4cGF0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweWV4cGF0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweWV4cGF0Lm1hayIgQ0ZHPSJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJweWV4cGF0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHlleHBhdCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHlleHBhdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCBCWVRFT1JERVI9MTIzNCAvRCBYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHlleHBhdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHlleHBhdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiX0RFQlVHIiAvRCAiSEFWRV9FWFBBVF9IIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EIEJZVEVPUkRFUj0xMjM0IC9EIFhNTF9DT05URVhUX0JZVEVTPTEwMjQgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weWV4cGF0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccHlleHBhdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweWV4cGF0IiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPXB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgInB5ZXhwYXQubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJweWV4cGF0Lm1hayIgQ0ZHPSJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAicHlleHBhdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJweWV4cGF0IgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCBCWVRFT1JERVI9MTIzNCAvRCBYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weWV4cGF0LnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAicHlleHBhdCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5ZXhwYXQiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiSEFWRV9FWFBBVF9IIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EIEJZVEVPUkRFUj0xMjM0IC9EIFhNTF9DT05URVhUX0JZVEVTPTEwMjQgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5ZXhwYXRfZC5weWQiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNccHlleHBhdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvcHl0aG9uLmRzcCBiL1BDL1ZDNi9weXRob24uZHNwCmluZGV4IGZhOGI3NzIuLmI2NGY1YzEgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9weXRob24uZHNwCisrKyBiL1BDL1ZDNi9weXRob24uZHNwCkBAIC0xLDEwMCArMSwxMDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9uIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMNCi0NCi1DRkc9cHl0aG9uIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob24ubWFrIiBDRkc9InB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInB5dGhvbiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHl0aG9uIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweXRob24gLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHl0aG9uIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLi4uXFxJbmNsdWRlIiAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N0YWNrOjB4MjAwMDAwIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5dGhvbl9kLmV4ZSIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbiAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHljb24uaWNvDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccHl0aG9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHl0aG9uX2V4ZS5yYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9uIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9cHl0aG9uIC0gV2luMzIgUmVsZWFzZQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJweXRob24ubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJweXRob24ubWFrIiBDRkc9InB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJweXRob24gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJweXRob24iCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHl0aG9uIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbiAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi4uLlxcSW5jbHVkZSIgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdGFjazoweDIwMDAwMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weXRob25fZC5leGUiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAicHl0aG9uIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlxweWNvbi5pY28KKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHB5dGhvbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5ccHl0aG9uX2V4ZS5yYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbmNvcmUuZHNwIGIvUEMvVkM2L3B5dGhvbmNvcmUuZHNwCmluZGV4IDAzNzE2MjcuLjg5MzU0MmEgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9weXRob25jb3JlLmRzcAorKysgYi9QQy9WQzYvcHl0aG9uY29yZS5kc3AKQEAgLTEsNzY1ICsxLDc5NyBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweXRob25jb3JlIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob25jb3JlLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob25jb3JlLm1hayIgQ0ZHPSJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJweXRob25jb3JlIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHl0aG9uY29yZSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cbW9kdWxlc1x6bGliIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9ZWCAvRkQgL1ptMjAwIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMjYuZGxsIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweXRob25jb3JlIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbmNvcmUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cbW9kdWxlc1x6bGliIiAvRCAiX0RFQlVHIiAvRCAiVVNFX0RMX0VYUE9SVCIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL1ptMjAwIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMjZfZC5kbGwiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfYnl0ZXNpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfY24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19pc28yMDIyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19qcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY29kZWNzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY29sbGVjdGlvbnNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jc3YuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9maWxlaW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9oZWFwcW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2hvdHNob3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9qc29uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbG9jYWxlbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbHNwcm9mLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3JlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3RydWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUENcX3N1YnByb2Nlc3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cX3dhcm5pbmdzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfd2Vha3JlZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXF93aW5yZWcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGFic3RyYWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGFjY2VsZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cYXNkbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxhc3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGF1ZGlvb3AuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGJpbmFzY2lpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGJpdHNldC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxibHRpbm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYm9vbG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYnVmZmVyb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNlbGxvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cY2V2YWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjbWF0aG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxjb2RlY3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cY29tcGlsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY29tcGxleG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxjb21wcmVzcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXGNvbmZpZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY1BpY2tsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY1N0cmluZ0lPLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xkYXRldGltZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xkZXNjcm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXGRsX250LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxlcnJvcnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZpbGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcZmlyc3RzZXRzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfc3RyaW5nLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmcmFtZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmcm96ZW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZ1bmNvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZnV0dXJlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xmdXR1cmVfYnVpbHRpbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGdjbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xnZW5vYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0YXJncy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMNCi0jIEFERCBDUFAgL0QgQlVJTEQ9NDYNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGNvcHlyaWdodC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRtdGltZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRvcHQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxnZXRwYXRocC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRwbGF0Zm9ybS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdyYW1pbml0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGdyYW1tYXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcZ3JhbW1hcjEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcaW1hZ2VvcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxpbXBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxpbXBvcnRfbnQuYw0KLSMgQUREIENQUCAvSSAiLi5cLi5cUHl0aG9uIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25caW1wb3J0ZGwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGludG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcaXRlcm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcaXRlcnRvb2xzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGxpc3Rub2RlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xsaXN0b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xsb25nb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtYWluLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG1hcnNoYWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1kNS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXG1ldGFncmFtbWFyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xtZXRob2RvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbW9kc3VwcG9ydC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbW9kdWxlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cbXN2Y3J0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbXlyZWFkbGluZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxteXNucHJpbnRmLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG15c3RydG91bC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxub2RlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG9ibWFsbG9jLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xvcGVyYXRvci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxwYXJzZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxwYXJzZXRvay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxwZWVwaG9sZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlhcmVuYS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweWZwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweW1hdGguYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlzdGF0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXN0cmNtcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXN0cnRvZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweXRob25fbnQucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNccmFuZ2VvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYTUxMm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xzdHJpbmdvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHN0cm9wbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcc3RydWN0c2VxLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHN5bXRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxzeXNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cdGhyZWFkLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x0aHJlYWRtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHRyYWNlYmFjay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdHVwbGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHR5cGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdW5pY29kZWN0eXBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x3ZWFrcmVmb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHl1dmNvbnZlcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHppcGltcG9ydC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweXRob25jb3JlIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPXB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbmNvcmUubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJweXRob25jb3JlLm1hayIgQ0ZHPSJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJweXRob25jb3JlIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXG1vZHVsZXNcemxpYiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9ZWCAvRkQgL1ptMjAwIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uXC4uXEluY2x1ZGUiIC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGxhcmdlaW50LmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9weXRob24yNy5kbGwiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob25jb3JlIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXG1vZHVsZXNcemxpYiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiVVNFX0RMX0VYUE9SVCIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL1ptMjAwIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uXC4uXEluY2x1ZGUiIC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGxhcmdlaW50LmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9weXRob24yN19kLmRsbCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2NuLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2lzbzIwMjIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfanAuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfdHcuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2NvZGVjc21vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY29sbGVjdGlvbnNtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Nzdi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9oZWFwcW1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaG90c2hvdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9qc29uLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9sb2NhbGVtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbWF0aC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcmUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3N0cnVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUENcX3N1YnByb2Nlc3MuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxfd2FybmluZ3MuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXF93aW5yZWcuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcYWJzdHJhY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFBhcnNlclxhY2NlbGVyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGFzZGwuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxhc3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcYXVkaW9vcC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xiaW5hc2NpaS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUGFyc2VyXGJpdHNldC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGJsdGlubW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXGJ1ZmZlcmVkaW8uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcYnVmZmVyb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGJ5dGVhcnJheW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlc19tZXRob2RzLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGNhcHN1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcY2VsbG9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGNldmFsLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGNtYXRobW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGNvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxjb2RlY3MuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcY29kZW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGNvbXBpbGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcY29tcGxleG9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlxjb25maWcuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcY1BpY2tsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGNTdHJpbmdJTy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xkYXRldGltZW1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cZGxfbnQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxkdG9hLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZHlubG9hZF93aW4uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcZW51bW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGVycm9ycy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xleGNlcHRpb25zLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xmaWxlaW8uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcZmlsZW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGZvcm1hdHRlcl9zdHJpbmcuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xmcmFtZW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGZyb3plbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZnV0dXJlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGZ1dHVyZV9idWlsdGlucy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xnY21vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xnZW5vYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxnZXRhcmdzLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jCisjIEFERCBDUFAgL0QgQlVJTEQ9NDYKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZ2V0Y29tcGlsZXIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxnZXRjb3B5cmlnaHQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxnZXRvcHQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXGdldHBhdGhwLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZ3JhbWluaXQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFBhcnNlclxncmFtbWFyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQYXJzZXJcZ3JhbW1hcjEuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xpb2Jhc2UuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcaW1hZ2VvcC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGltcG9ydC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5caW1wb3J0X250LmMKKyMgQUREIENQUCAvSSAiLi5cLi5cUHl0aG9uIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxpbXBvcnRkbC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmJhY2suYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGludG9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xpdGVyb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUGFyc2VyXGxpc3Rub2RlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGxpc3RvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xtYWluLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cbWFyc2hhbC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXG1kNS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xtZDVtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcbWVtb3J5b2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxtb2RzdXBwb3J0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cbXN2Y3J0bW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUGFyc2VyXG15cmVhZGxpbmUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxteXNucHJpbnRmLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cbXlzdHJ0b3VsLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQYXJzZXJcbm9kZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcb2JtYWxsb2MuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFBhcnNlclxwYXJzZXIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQYXJzZXJccGFyc2V0b2suYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxwZWVwaG9sZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xwb3NpeG1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXHB5YXJlbmEuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxweWN0eXBlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25ccHlmcGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxweW1hdGguYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxweXN0YXRlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25ccHlzdHJjbXAuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxweXN0cnRvZC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Ii4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5ccHl0aG9uX250LnJjCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYTI1Nm1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGE1MTJtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xzbGljZW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcc3RyaW5nb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHN0cm9wbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cc3RydWN0bWVtYmVyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXHN5bXRhYmxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cc3lzbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1x0ZXh0aW8uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblx0aHJlYWQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcdGhyZWFkbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFBhcnNlclx0b2tlbml6ZXIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblx0cmFjZWJhY2suYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1x1bmljb2RlY3R5cGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcdW5pY29kZW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1x3ZWFrcmVmb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHh4c3VidHlwZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYm1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi9weXRob253LmRzcCBiL1BDL1ZDNi9weXRob253LmRzcAppbmRleCBlOWMzMjVjLi41YTA3NTc5IDEwMDY0NAotLS0gYS9QQy9WQzYvcHl0aG9udy5kc3AKKysrIGIvUEMvVkM2L3B5dGhvbncuZHNwCkBAIC0xLDEwMSArMSwxMDEgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9udyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iIDB4MDEwMQ0KLQ0KLUNGRz1weXRob253IC0gV2luMzIgQWxwaGEgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9udy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9udy5tYWsiIENGRz0icHl0aG9udyAtIFdpbjMyIEFscGhhIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAicHl0aG9udyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5dGhvbnciDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXHBjIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHl0aG9udyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbnciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9udyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob253Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5dGhvbndfZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHl0aG9udyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHl0aG9uX2V4ZS5yYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxXaW5NYWluLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbnciIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iIDB4MDEwMQorCitDRkc9cHl0aG9udyAtIFdpbjMyIEFscGhhIFJlbGVhc2UKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9udy5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbncubWFrIiBDRkc9InB5dGhvbncgLSBXaW4zMiBBbHBoYSBSZWxlYXNlIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJweXRob253IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgInB5dGhvbnciCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5ccGMiCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAicHl0aG9udyAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHl0aG9udyIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9udyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbnciCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5dGhvbndfZC5leGUiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAicHl0aG9udyAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXHB5dGhvbl9leGUucmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlxXaW5NYWluLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi9yZWFkbWUudHh0IGIvUEMvVkM2L3JlYWRtZS50eHQKaW5kZXggNTMzOWJiYi4uMDNkMjMxOCAxMDA2NDQKLS0tIGEvUEMvVkM2L3JlYWRtZS50eHQKKysrIGIvUEMvVkM2L3JlYWRtZS50eHQKQEAgLTEsNyArMSw4IEBACiBCdWlsZGluZyBQeXRob24gdXNpbmcgVkMrKyA2LjAgb3IgNS4wCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBmb3IgV2luMzIgcGxhdGZvcm1zLCBlLmcuIFdpbmRvd3MKLTIwMDAgYW5kIFhQLiAgSXQgcmVxdWlyZXMgTWljcm9zb2Z0IFZpc3VhbCBDKysgNi54IG9yIDUueC4KKzIwMDAgYW5kIFhQLiAgSXQgcmVxdWlyZXMgTWljcm9zb2Z0IFZpc3VhbCBDKysgNi54IG9yIDUueCBhbmQgUGxhdGZvcm0KK1NESyBGZWJydWFyeSAyMDAzIEVkaXRpb24gKENvcmUgU0RLKS4KIChGb3Igb3RoZXIgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycywgc2VlIC4uL3JlYWRtZS50eHQuKQogCiBBbGwgeW91IG5lZWQgdG8gZG8gaXMgb3BlbiB0aGUgd29ya3NwYWNlICJwY2J1aWxkLmRzdyIgaW4gTVNWQysrLCBzZWxlY3QKQEAgLTExLDcgKzEyLDcgQEAKIFRoZSBwcm9wZXIgb3JkZXIgdG8gYnVpbGQgc3VicHJvamVjdHM6CiAKIDEpIHB5dGhvbmNvcmUgKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBETEwgYW5kIGxpYnJhcnkgZmlsZXMsCi0gICAgICAgICAgICAgICBweXRob24yNi57ZGxsLCBsaWJ9IGluIFJlbGVhc2UgbW9kZSkKKyAgICAgICAgICAgICAgIHB5dGhvbjI3LntkbGwsIGxpYn0gaW4gUmVsZWFzZSBtb2RlKQogCiAyKSBweXRob24gKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBleGVjdXRhYmxlLAogICAgICAgICAgICBweXRob24uZXhlIGluIFJlbGVhc2UgbW9kZSkKQEAgLTIyLDcgKzIzLDcgQEAKICAgIHRvIHRoZSBzdWJzeXN0ZW1zIHRoZXkgaW1wbGVtZW50OyBzZWUgU1VCUFJPSkVDVFMgYmVsb3cpCiAKIFdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMjZfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcHlleHBhdF9kLnB5ZCwgYW5kIHNvIG9uLgordGhlaXIgbmFtZTogIHB5dGhvbjI3X2QuZGxsLCBweXRob25fZC5leGUsIHB5ZXhwYXRfZC5weWQsIGFuZCBzbyBvbi4KIAogU1VCUFJPSkVDVFMKIC0tLS0tLS0tLS0tCkBAIC0zOSw3ICs0MCw2IEBACiAgICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBwb3AgdXAgYSBET1MgYm94CiBfbXNpCiAgICAgX21zaS5jLiBZb3UgbmVlZCB0byBpbnN0YWxsIFdpbmRvd3MgSW5zdGFsbGVyIFNESyB0byBidWlsZCB0aGlzIG1vZHVsZS4KLSAgICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbXNkb3dubG9hZC9wbGF0Zm9ybXNkay9zZGt1cGRhdGUvcHNkay1mdWxsLmh0bQogX3NvY2tldAogICAgIHNvY2tldG1vZHVsZS5jCiBfdGVzdGNhcGkKQEAgLTIwMiwyMSArMjAyLDI3IEBACiAgICAgR2V0IHRoZSBsYXRlc3Qgc291cmNlIGNvZGUgZm9yIE9wZW5TU0wgZnJvbQogICAgICAgICBodHRwOi8vd3d3Lm9wZW5zc2wub3JnCiAKLSAgICBZb3UgKHByb2JhYmx5KSBkb24ndCB3YW50IHRoZSAiZW5naW5lIiBjb2RlLiAgRm9yIGV4YW1wbGUsIGdldAotICAgICAgICBvcGVuc3NsLTAuOS44Zy50YXIuZ3oKLSAgICBub3QKLSAgICAgICAgb3BlbnNzbC1lbmdpbmUtMC45LjhnLnRhci5negorICAgIFlvdSAocHJvYmFibHkpIGRvbid0IHdhbnQgdGhlICJlbmdpbmUiIGNvZGUuICBGb3IgZXhhbXBsZSwgZG9uJ3QgZ2V0CisgICAgICAgIG9wZW5zc2wtZW5naW5lLTAuOS42Zy50YXIuZ3oKIAogICAgIFVucGFjayBpbnRvIHRoZSAiZGlzdCIgZGlyZWN0b3J5LCByZXRhaW5pbmcgdGhlIGZvbGRlciBuYW1lIGZyb20KICAgICB0aGUgYXJjaGl2ZSAtIGZvciBleGFtcGxlLCB0aGUgbGF0ZXN0IHN0YWJsZSBPcGVuU1NMIHdpbGwgaW5zdGFsbCBhcwotICAgICAgICBkaXN0L29wZW5zc2wtMC45LjhnCisgICAgICAgIGRpc3Qvb3BlbnNzbC0xLjAuMGEKIAogICAgIFlvdSBjYW4gKHRoZW9yZXRpY2FsbHkpIHVzZSBhbnkgdmVyc2lvbiBvZiBPcGVuU1NMIHlvdSBsaWtlIC0gdGhlCiAgICAgYnVpbGQgcHJvY2VzcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBsYXRlc3QgdmVyc2lvbi4KIAotICAgIFlvdSBtdXN0IGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vUHJvZHVjdHMvQWN0aXZlUGVybC8KLSAgICBhcyB0aGlzIGlzIHVzZWQgYnkgdGhlIE9wZW5TU0wgYnVpbGQgcHJvY2Vzcy4gIENvbXBsYWluIHRvIHRoZW0gPHdpbms+LgorICAgIFlvdSBjYW4gaW5zdGFsbCB0aGUgTkFTTSBhc3NlbWJsZXIgZnJvbQorICAgICAgICBodHRwOi8vd3d3Lm5hc20udXMvCisgICAgZm9yIHg4NiBidWlsZHMuICBQdXQgbmFzbXcuZXhlIGFueXdoZXJlIGluIHlvdXIgUEFUSC4KKyAgICBOb3RlOiByZWNlbnQgcmVsZWFzZXMgb2YgbmFzbSBvbmx5IGhhdmUgbmFzbS5leGUuIEp1c3QgcmVuYW1lIGl0IHRvIAorICAgIG5hc213LmV4ZS4KKworICAgIFlvdSBjYW4gYWxzbyBpbnN0YWxsIEFjdGl2ZVBlcmwgZnJvbQorICAgICAgICBodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVwZXJsLworICAgIGlmIHlvdSBsaWtlIHRvIHVzZSB0aGUgb2ZmaWNpYWwgc291cmNlcyBpbnN0ZWFkIG9mIHRoZSBmaWxlcyBmcm9tIAorICAgIHB5dGhvbidzIHN1YnZlcnNpb24gcmVwb3NpdG9yeS4gVGhlIHN2biB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsZAorICAgIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCiAKICAgICBUaGUgTVNWQyBwcm9qZWN0IHNpbXBseSBpbnZva2VzIFBDL1ZDNi9idWlsZF9zc2wucHkgdG8gcGVyZm9ybQogICAgIHRoZSBidWlsZC4gIFRoaXMgUHl0aG9uIHNjcmlwdCBsb2NhdGVzIGFuZCBidWlsZHMgeW91ciBPcGVuU1NMCmRpZmYgLS1naXQgYS9QQy9WQzYvc2VsZWN0LmRzcCBiL1BDL1ZDNi9zZWxlY3QuZHNwCmluZGV4IGM1MzQ2YzAuLmMwYzZlMTIgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9zZWxlY3QuZHNwCisrKyBiL1BDL1ZDNi9zZWxlY3QuZHNwCkBAIC0xLDk5ICsxLDk5IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InNlbGVjdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1zZWxlY3QgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAic2VsZWN0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJzZWxlY3QubWFrIiBDRkc9InNlbGVjdCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAic2VsZWN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAic2VsZWN0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInNlbGVjdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cc2VsZWN0MTEzIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3c29jazMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3NlbGVjdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNlbGVjdCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xzZWxlY3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cc2VsZWN0MTEzIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3c29jazMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvbm9kZWZhdWx0bGliOiJtc3ZjcnQiIC9vdXQ6Ii4vc2VsZWN0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAic2VsZWN0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNlbGVjdG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJzZWxlY3QiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMgorCitDRkc9c2VsZWN0IC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAic2VsZWN0Lm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAic2VsZWN0Lm1hayIgQ0ZHPSJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAic2VsZWN0IgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInNlbGVjdCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2Vcc2VsZWN0IgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vc2VsZWN0LnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAic2VsZWN0IC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcc2VsZWN0IgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDExMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL25vZGVmYXVsdGxpYjoibXN2Y3J0IiAvb3V0OiIuL3NlbGVjdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcc2VsZWN0bW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi90Y2w4NTIucGF0Y2ggYi9QQy9WQzYvdGNsODUyLnBhdGNoCmluZGV4IDBiNmM0NjYuLmVkNjc4MGEgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi90Y2w4NTIucGF0Y2gKKysrIGIvUEMvVkM2L3RjbDg1Mi5wYXRjaApAQCAtOSwxNCArOSwzIEBACiAgdHlwZWRlZiBzdHJ1Y3QgX3N0YXRpNjQJVGNsX1N0YXRCdWY7CiAgIyAgICAgICAgIGVsc2UKICB0eXBlZGVmIHN0cnVjdCBfc3RhdDY0CVRjbF9TdGF0QnVmOwotLS0tIHRjbDguNS4yXGdlbmVyaWNcdGNsLmgJRnJpIEp1biAxMyAwMzozNTozOSAyMDA4Ci0rKysgdGNsOC41LjJcZ2VuZXJpY1x0Y2wuaAlTdW4gSmFuICA0IDE2OjUyOjMwIDIwMDkKLUBAIC0zNjcsNyArMzY3LDcgQEAKLSB0eXBlZGVmIHN0cnVjdCBzdGF0aTY0IFRjbF9TdGF0QnVmOwotICMgICAgICAgICBkZWZpbmUgVENMX0xMX01PRElGSUVSCSJMIgotICMgICAgICBlbHNlIC8qIF9fQk9STEFORENfXyAqLwotLSMgICAgICAgICBpZiBfTVNDX1ZFUiA8IDE0MDAgJiYgIWRlZmluZWQoX01fSVg4NikKLSsjICAgICAgICAgaWYgX01TQ19WRVIgPCAxNDAwIC8qJiYgIWRlZmluZWQoX01fSVg4NikqLwotIHR5cGVkZWYgc3RydWN0IF9zdGF0aTY0CVRjbF9TdGF0QnVmOwotICMgICAgICAgICBlbHNlCi0gdHlwZWRlZiBzdHJ1Y3QgX3N0YXQ2NAlUY2xfU3RhdEJ1ZjsKZGlmZiAtLWdpdCBhL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AgYi9QQy9WQzYvdW5pY29kZWRhdGEuZHNwCmluZGV4IDg1OWYzN2IuLjNiOWE4YjcgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AKKysrIGIvUEMvVkM2L3VuaWNvZGVkYXRhLmRzcApAQCAtMSw5OSArMSw5OSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ1bmljb2RlZGF0YSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz11bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ1bmljb2RlZGF0YS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidW5pY29kZWRhdGEubWFrIiBDRkc9InVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAidW5pY29kZWRhdGEiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAidW5pY29kZWRhdGEgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEyMDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdW5pY29kZWRhdGEucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x1bmljb2RlZGF0YSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTIwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdW5pY29kZWRhdGFfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InVuaWNvZGVkYXRhIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPXVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAidW5pY29kZWRhdGEubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJ1bmljb2RlZGF0YS5tYWsiIENGRz0idW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgInVuaWNvZGVkYXRhIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMjAwMDAiIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiIuL3VuaWNvZGVkYXRhLnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAidW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x1bmljb2RlZGF0YSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEyMDAwMCIgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3VuaWNvZGVkYXRhX2QucHlkIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAidW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGEuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L3c5eHBvcGVuLmRzcCBiL1BDL1ZDNi93OXhwb3Blbi5kc3AKaW5kZXggODg2YTBlNS4uZWU2M2NiOSAxMDA2NDQKLS0tIGEvUEMvVkM2L3c5eHBvcGVuLmRzcAorKysgYi9QQy9WQzYvdzl4cG9wZW4uZHNwCkBAIC0xLDk3ICsxLDk3IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Inc5eHBvcGVuIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIgMHgwMTAxDQotDQotQ0ZHPXc5eHBvcGVuIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInc5eHBvcGVuLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3OXhwb3Blbi5tYWsiIENGRz0idzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2Vcdzl4cG9wZW4iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIC9ub2xvZ28gL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x3OXhwb3BlbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIC9ub2xvZ28gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi93OXhwb3Blbl9kLmV4ZSIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHc5eHBvcGVuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Inc5eHBvcGVuIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIiAweDAxMDEKKworQ0ZHPXc5eHBvcGVuIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAidzl4cG9wZW4ubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJ3OXhwb3Blbi5tYWsiIENGRz0idzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJ3OXhwb3BlbiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgInc5eHBvcGVuIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHc5eHBvcGVuIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiB1c2VyMzIubGliIC9ub2xvZ28gL21hY2hpbmU6STM4NgorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHc5eHBvcGVuIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiAvbm9sb2dvIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdzl4cG9wZW5fZC5leGUiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cdzl4cG9wZW4uYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L3dpbnNvdW5kLmRzcCBiL1BDL1ZDNi93aW5zb3VuZC5kc3AKaW5kZXggMTE4MzYwNi4uNjhlODE0YyAxMDA2NDQKLS0tIGEvUEMvVkM2L3dpbnNvdW5kLmRzcAorKysgYi9QQy9WQzYvd2luc291bmQuZHNwCkBAIC0xLDk5ICsxLDk5IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IndpbnNvdW5kIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXdpbnNvdW5kIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIndpbnNvdW5kLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3aW5zb3VuZC5tYWsiIENGRz0id2luc291bmQgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAid2luc291bmQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAid2luc291bmQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJ3aW5zb3VuZCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5ccGMiDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHdpbnNvdW5kIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB3aW5tbS5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTYwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi93aW5zb3VuZC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHdpbnNvdW5kIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgd2lubW0ubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi93aW5zb3VuZF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAid2luc291bmQgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAid2luc291bmQgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHdpbnNvdW5kLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IndpbnNvdW5kIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPXdpbnNvdW5kIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAid2luc291bmQubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJ3aW5zb3VuZC5tYWsiIENGRz0id2luc291bmQgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgIndpbnNvdW5kIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIndpbnNvdW5kIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXHBjIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHdpbm1tLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNjAwMDAiIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiIuL3dpbnNvdW5kLnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAid2luc291bmQgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x3aW5zb3VuZCIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiB3aW5tbS5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE2MDAwMCIgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3dpbnNvdW5kX2QucHlkIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAid2luc291bmQgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXHdpbnNvdW5kLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19ic2RkYi52Y3Byb2ogYi9QQy9WUzcuMS9fYnNkZGIudmNwcm9qCmluZGV4IDRmYjc4ZGIuLmI1MzVlNGMgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL19ic2RkYi52Y3Byb2oKKysrIGIvUEMvVlM3LjEvX2JzZGRiLnZjcHJvagpAQCAtMjEsNyArMjEsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7JnF1b3Q7Li5cLi5cLi5cZGItNC40LjIwXGJ1aWxkX3dpbjMyJnF1b3Q7IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUyIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCkBAIC03Niw3ICs3Niw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7JnF1b3Q7Li5cLi5cLi5cZGItNC40LjIwXGJ1aWxkX3dpbjMyJnF1b3Q7IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7JnF1b3Q7Li5cLi5cLi5cZGItNC40LjIwXGJ1aWxkX3dpbjMyJnF1b3Q7IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOyZxdW90Oy4uXC4uXC4uXGRiLTQuNC4yMFxidWlsZF93aW4zMiZxdW90OyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvaiBiL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qCmluZGV4IGI0YjllZDEuLjdkYWQzZTEgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qCisrKyBiL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qCkBAIC0yMSw3ICsyMSw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlPcHRpbWl6YXRpb249IjAiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIgogCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCkBAIC03NSw3ICs3NSw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSIKQEAgLTEzMiw3ICsxMzIsNyBAQAogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19jdHlwZXNfdGVzdC52Y3Byb2ogYi9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qCmluZGV4IGZkMjM3ZTUuLmI4NWI1ZDIgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL19jdHlwZXNfdGVzdC52Y3Byb2oKKysrIGIvUEMvVlM3LjEvX2N0eXBlc190ZXN0LnZjcHJvagpAQCAtMjAsNyArMjAsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIgogCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCkBAIC03Miw3ICs3Miw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMTI3LDcgKzEyNyw3IEBACiAJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSIKIAkJCQlPcHRpbWl6YXRpb249IjAiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiCiAJCQkJTWluaW1hbFJlYnVpbGQ9IkZBTFNFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKQEAgLTE4Miw3ICsxODIsNyBAQAogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fZWxlbWVudHRyZWUudmNwcm9qIGIvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvagppbmRleCBlZGU3MDNlLi5mZTIyMTAyIDEwMDY0NAotLS0gYS9QQy9WUzcuMS9fZWxlbWVudHRyZWUudmNwcm9qCisrKyBiL1BDL1ZTNy4xL19lbGVtZW50dHJlZS52Y3Byb2oKQEAgLTIyLDcgKzIyLDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRztIQVZFX0VYUEFUX0g7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7SEFWRV9FWFBBVF9IO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCkBAIC03NSw3ICs3NSw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKQEAgLTE5MSw3ICsxOTEsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fbXNpLnZjcHJvaiBiL1BDL1ZTNy4xL19tc2kudmNwcm9qCmluZGV4IGFmMjk0NTMuLmVjYmNiODUgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL19tc2kudmNwcm9qCisrKyBiL1BDL1ZTNy4xL19tc2kudmNwcm9qCkBAIC0yMyw3ICsyMyw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlPcHRpbWl6YXRpb249IjAiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEwiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKQEAgLTc4LDcgKzc4LDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpAQCAtMTkzLDcgKzE5Myw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTCIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19zb2NrZXQudmNwcm9qIGIvUEMvVlM3LjEvX3NvY2tldC52Y3Byb2oKaW5kZXggZTNhMGNjMC4uMTU3ZDdkOSAxMDA2NDQKLS0tIGEvUEMvVlM3LjEvX3NvY2tldC52Y3Byb2oKKysrIGIvUEMvVlM3LjEvX3NvY2tldC52Y3Byb2oKQEAgLTIxLDcgKzIxLDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUyIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCkBAIC03NSw3ICs3NSw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2ogYi9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2oKaW5kZXggNjIzZWMzNy4uZGU4NmM2ZiAxMDA2NDQKLS0tIGEvUEMvVlM3LjEvX3NxbGl0ZTMudmNwcm9qCisrKyBiL1BDL1ZTNy4xL19zcWxpdGUzLnZjcHJvagpAQCAtMjIsNyArMjIsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCkBAIC03Nyw3ICs3Nyw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMTM1LDcgKzEzNSw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qIGIvUEMvVlM3LjEvX3Rlc3RjYXBpLnZjcHJvagppbmRleCA0YjJlMjU3Li41MjYxNTk3IDEwMDY0NAotLS0gYS9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qCisrKyBiL1BDL1ZTNy4xL190ZXN0Y2FwaS52Y3Byb2oKQEAgLTIzLDcgKzIzLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSIKQEAgLTc1LDcgKzc1LDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xODksNyArMTg5LDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2ogYi9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2oKaW5kZXggYjFmYmEwOC4uMDdmYzZjMyAxMDA2NDQKLS0tIGEvUEMvVlM3LjEvX3RraW50ZXIudmNwcm9qCisrKyBiL1BDL1ZTNy4xL190a2ludGVyLnZjcHJvagpAQCAtMjIsNyArMjIsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSIKQEAgLTc4LDcgKzc4LDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCQkJV2FybmluZ0xldmVsPSIzIgpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHRjbHRrXGluY2x1ZGUsLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9iejIudmNwcm9qIGIvUEMvVlM3LjEvYnoyLnZjcHJvagppbmRleCA3OTJhMmU5Li5iZGQwODVkIDEwMDY0NAotLS0gYS9QQy9WUzcuMS9iejIudmNwcm9qCisrKyBiL1BDL1ZTNy4xL2J6Mi52Y3Byb2oKQEAgLTIyLDcgKzIyLDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUyIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCkBAIC04MCw3ICs4MCw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiCkBAIC0xNDEsNyArMTQxLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weWV4cGF0LnZjcHJvaiBiL1BDL1ZTNy4xL3B5ZXhwYXQudmNwcm9qCmluZGV4IGM4NzVkM2YuLjcxZjAwMzIgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL3B5ZXhwYXQudmNwcm9qCisrKyBiL1BDL1ZTNy4xL3B5ZXhwYXQudmNwcm9qCkBAIC0yMSw3ICsyMSw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlPcHRpbWl6YXRpb249IjAiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7SEFWRV9FWFBBVF9IO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztIQVZFX0VYUEFUX0g7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCkBAIC03NCw3ICs3NCw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xOTAsNyArMTkwLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvaiBiL1BDL1ZTNy4xL3B5dGhvbmNvcmUudmNwcm9qCmluZGV4IGFhOWYyNWQuLjgxNGY5MWEgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL3B5dGhvbmNvcmUudmNwcm9qCisrKyBiL1BDL1ZTNy4xL3B5dGhvbmNvcmUudmNwcm9qCkBAIC0yNSw3ICsyNSw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMzksMTUgKzM5LDE1IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyIKLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjI2LmRsbCIKKwkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjI3LmRsbCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24yNi5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjI3LnBkYiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjI2LmxpYiIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMjcubGliIgogCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNSURMVG9vbCIvPgpAQCAtODcsNyArODcsNyBAQAogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7VVNFX0RMX0VYUE9SVDtXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1VTRV9ETF9FWFBPUlQ7V0lOMzI7X1dJTkRPV1MiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCQkJV2FybmluZ0xldmVsPSIzIgpAQCAtOTksMTUgKzk5LDE1IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyIKLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjI2X2QuZGxsIgorCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMjdfZC5kbGwiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMjZfZC5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjI3X2QucGRiIgogCQkJCVN1YlN5c3RlbT0iMiIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMjZfZC5saWIiCisJCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjI3X2QubGliIgogCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNSURMVG9vbCIvPgpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKQEAgLTE2NiwxNSArMTY2LDE1IEBACiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24yNi5kbGwiCisJCQkJT3V0cHV0RmlsZT0iLi9weXRob24yNy5kbGwiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iRkFMU0UiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjI2LnBkYiIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMjcucGRiIgogCQkJCVN1YlN5c3RlbT0iMiIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMjYubGliIgorCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24yNy5saWIiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMCIvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01JRExUb29sIi8+CkBAIC0yMTUsNyArMjE1LDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO1VTRV9ETF9FWFBPUlQiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpAQCAtMjMzLDE1ICsyMzMsMTUgQEAKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCiAJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24yNi5kbGwiCisJCQkJT3V0cHV0RmlsZT0iLi9weXRob24yNy5kbGwiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMjYucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24yNy5wZGIiCiAJCQkJU3ViU3lzdGVtPSIyIgogCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24yNi5saWIiCisJCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjI3LmxpYiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4KQEAgLTM2MiwxOCArMzYyLDEyIEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfdHcuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfYnl0ZXNpby5jIj4KLQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3N2LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2ZpbGVpby5jIj4KLQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKQEAgLTM4Myw2ICszNzcsOSBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9ob3RzaG90LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jIj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9qc29uLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCkBAIC0zOTIsNiArMzg5LDkgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbHNwcm9mLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX21hdGguYyI+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCkBAIC00NDMsMTggKzQ0MywyNyBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jIj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ1ZmZlcm9iamVjdC5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVhcnJheW9iamVjdC5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xieXRlc2lvLmMiPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nb2JqZWN0LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNfbWV0aG9kcy5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNhcHN1bGUuYyI+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCkBAIC01MDksNiArNTE4LDkgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZGxfbnQuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR0b2EuYyI+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCkBAIC01MjQsNiArNTM2LDkgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xleGNlcHRpb25zLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGZpbGVpby5jIj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZpbGVvYmplY3QuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKQEAgLTU2OSw5ICs1ODQsNiBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29weXJpZ2h0LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRtdGltZS5jIj4KLQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0b3B0LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCkBAIC02MzIsNiArNjQ0LDkgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xpbnRvYmplY3QuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9caW9iYXNlLmMiPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcaXRlcm9iamVjdC5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQpAQCAtNjYyLDYgKzY3Nyw5IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWVtb3J5b2JqZWN0LmMiPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxtZXRhZ3JhbW1hci5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQpAQCAtNzIyLDYgKzc0MCw5IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWFyZW5hLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWN0eXBlLmMiPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWZwZS5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQpAQCAtNzcwLDYgKzc5MSw5IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYyI+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzdHJvcG1vZHVsZS5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQpAQCAtNzg4LDYgKzgxMiw5IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzeXNtb2R1bGUuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMiPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblx0aHJlYWQuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKQEAgLTgyMSw5ICs4NDgsNiBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHh4c3VidHlwZS5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHl1dmNvbnZlcnQuYyI+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyI+CiAJCTwvRmlsZT4KIAk8L0ZpbGVzPgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcmVhZG1lLnR4dCBiL1BDL1ZTNy4xL3JlYWRtZS50eHQKaW5kZXggOWI3OGU2ZC4uZmRkMzA1MCAxMDA2NDQKLS0tIGEvUEMvVlM3LjEvcmVhZG1lLnR4dAorKysgYi9QQy9WUzcuMS9yZWFkbWUudHh0CkBAIC0xMiw3ICsxMiw3IEBACiBUaGUgcHJvcGVyIG9yZGVyIHRvIGJ1aWxkIHN1YnByb2plY3RzOgogCiAxKSBweXRob25jb3JlICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gRExMIGFuZCBsaWJyYXJ5IGZpbGVzLAotICAgICAgICAgICAgICAgcHl0aG9uMjYue2RsbCwgbGlifSBpbiBSZWxlYXNlIG1vZGUpCisgICAgICAgICAgICAgICBweXRob24yNy57ZGxsLCBsaWJ9IGluIFJlbGVhc2UgbW9kZSkKICAgICAgICAgICAgICAgTk9URTogIGluIHByZXZpb3VzIHJlbGVhc2VzLCB0aGlzIHN1YnByb2plY3Qgd2FzCiAgICAgICAgICAgICAgIG5hbWVkIGFmdGVyIHRoZSByZWxlYXNlIG51bWJlciwgZS5nLiBweXRob24yMC4KIApAQCAtMjYsNyArMjYsNyBAQAogICAgdGVzdCBzbGF2ZTsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQogCiBXaGVuIHVzaW5nIHRoZSBEZWJ1ZyBzZXR0aW5nLCB0aGUgb3V0cHV0IGZpbGVzIGhhdmUgYSBfZCBhZGRlZCB0bwotdGhlaXIgbmFtZTogIHB5dGhvbjI2X2QuZGxsLCBweXRob25fZC5leGUsIHBhcnNlcl9kLnB5ZCwgYW5kIHNvIG9uLgordGhlaXIgbmFtZTogIHB5dGhvbjI3X2QuZGxsLCBweXRob25fZC5leGUsIHBhcnNlcl9kLnB5ZCwgYW5kIHNvIG9uLgogCiBTVUJQUk9KRUNUUwogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2ogYi9QQy9WUzcuMS9zZWxlY3QudmNwcm9qCmluZGV4IDZhOGFmNGUuLjc5YzI2ZjMgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2oKKysrIGIvUEMvVlM3LjEvc2VsZWN0LnZjcHJvagpAQCAtMjIsNyArMjIsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMzUsNyArMzUsNyBAQAogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIgpAQCAtNzgsNyArNzgsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgogCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIgogCQkJCVdhcm5pbmdMZXZlbD0iMyIKQEAgLTg5LDcgKzg5LDcgQEAKIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlPdXRwdXRGaWxlPSIuL3NlbGVjdF9kLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIgpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3QucHlkIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3QucHlkIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2ogYi9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2oKaW5kZXggNjgyZDA2Yy4uYjZmMjgwOCAxMDA2NDQKLS0tIGEvUEMvVlM3LjEvdW5pY29kZWRhdGEudmNwcm9qCisrKyBiL1BDL1ZTNy4xL3VuaWNvZGVkYXRhLnZjcHJvagpAQCAtMjMsNyArMjMsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtNzUsNyArNzUsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKQEAgLTEzMCw3ICsxMzAsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKQEAgLTE4OSw3ICsxODksNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvaiBiL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvagppbmRleCA2YmQ5MjczLi5lZDEzM2ZiIDEwMDY0NAotLS0gYS9QQy9WUzcuMS93OXhwb3Blbi52Y3Byb2oKKysrIGIvUEMvVlM3LjEvdzl4cG9wZW4udmNwcm9qCkBAIC0yMSw3ICsyMSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCkBAIC03MSw3ICs3MSw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS93aW5zb3VuZC52Y3Byb2ogYi9QQy9WUzcuMS93aW5zb3VuZC52Y3Byb2oKaW5kZXggNWVlOWE0Mi4uNjZkMjlhMyAxMDA2NDQKLS0tIGEvUEMvVlM3LjEvd2luc291bmQudmNwcm9qCisrKyBiL1BDL1ZTNy4xL3dpbnNvdW5kLnZjcHJvagpAQCAtMjIsNyArMjIsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgogCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIgpAQCAtNzcsNyArNzcsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2ogYi9QQy9WUzguMC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvagppbmRleCBmM2QwNTY1Li5lZTc2YWVjIDEwMDY0NAotLS0gYS9QQy9WUzguMC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvagorKysgYi9QQy9WUzguMC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvagpAQCAtMSw1NTcgKzEsNTU3IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX211bHRpcHJvY2Vzc2luZyINCi0JUHJvamVjdEdVSUQ9Ins5ZTQ4YjMwMC0zN2QxLTExZGQtOGM0MS0wMDUwNTZjMDAwMDh9Ig0KLQlSb290TmFtZXNwYWNlPSJfbXVsdGlwcm9jZXNzaW5nIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXGNvbm5lY3Rpb24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdccGlwZV9jb25uZWN0aW9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc2VtYXBob3JlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc29ja2V0X2Nvbm5lY3Rpb24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1x3aW4zMl9mdW5jdGlvbnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOC4wMCIKKwlOYW1lPSJfbXVsdGlwcm9jZXNzaW5nIgorCVByb2plY3RHVUlEPSJ7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fSIKKwlSb290TmFtZXNwYWNlPSJfbXVsdGlwcm9jZXNzaW5nIgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiCisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXx4NjQiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyIKKwkJCUNoYXJhY3RlclNldD0iMCIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlBHVXBkYXRlfHg2NCIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPFJlZmVyZW5jZXM+CisJPC9SZWZlcmVuY2VzPgorCTxGaWxlcz4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXGNvbm5lY3Rpb24uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdccGlwZV9jb25uZWN0aW9uLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xzZW1hcGhvcmUuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNvY2tldF9jb25uZWN0aW9uLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1x3aW4zMl9mdW5jdGlvbnMuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM4LjAvX3NxbGl0ZTMudmNwcm9qCmluZGV4IGNiZDAyY2MuLmQ5ZTg5YzcgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvagorKysgYi9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2oKQEAgLTQyLDcgKzQyLDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiCiAJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKIAkJCS8+CiAJCQk8VG9vbApAQCAtMTA0LDcgKzEwNCw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIgogCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7IgogCQkJLz4KIAkJCTxUb29sCkBAIC0yMjksNyArMjI5LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiCiAJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKIAkJCS8+CiAJCQk8VG9vbApAQCAtMjkxLDcgKzI5MSw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIgogCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTM1NCw3ICszNTQsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7IgogCQkJLz4KIAkJCTxUb29sCkBAIC00MTcsNyArNDE3LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiCiAJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKIAkJCS8+CiAJCQk8VG9vbApAQCAtNDgwLDcgKzQ4MCw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIgogCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCiAJCQkvPgogCQkJPFRvb2wKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qIGIvUEMvVlM4LjAvYmRpc3Rfd2luaW5zdC52Y3Byb2oKaW5kZXggYTBkZTA0YS4uMGJkMmVlNiAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvYmRpc3Rfd2luaW5zdC52Y3Byb2oKKysrIGIvUEMvVlM4LjAvYmRpc3Rfd2luaW5zdC52Y3Byb2oKQEAgLTU1LDcgKzU1LDcgQEAKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGU7Li5cLi5cTW9kdWxlc1x6bGliIgogCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSIKIAkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgogCQkJCVdhcm5pbmdMZXZlbD0iMyIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGU7Li5cLi5cTW9kdWxlc1x6bGliIgogCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSIKIAkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgogCQkJCVdhcm5pbmdMZXZlbD0iMyIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9zc2wuYmF0IGIvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdAppbmRleCBjYjVhNzk3Li4yNTMxYTViIDEwMDY0NAotLS0gYS9QQy9WUzguMC9idWlsZF9zc2wuYmF0CisrKyBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQKQEAgLTIsMTAgKzIsMTAgQEAKIGlmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgKICAgaWYgJTEgRVFVIERlYnVnICgKICAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uX2QuZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjI2X2QuZGxsIGV4aXQgMQorICAgIGlmIG5vdCBleGlzdCBweXRob24yN19kLmRsbCBleGl0IDEKICAgKSBFTFNFICgKICAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24yNi5kbGwgZXhpdCAxCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjI3LmRsbCBleGl0IDEKICAgKQogKQogJUhPU1RfUFlUSE9OJSBidWlsZF9zc2wucHkgJTEgJTIgJTMKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkX3NzbC5weSBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5weQppbmRleCBhYjVmY2VhLi42NjNlNjU1IDEwMDY0NAotLS0gYS9QQy9WUzguMC9idWlsZF9zc2wucHkKKysrIGIvUEMvVlM4LjAvYnVpbGRfc3NsLnB5CkBAIC04LDcgKzgsNyBAQAogIyAgIGRpcmVjdG9yeS4gIEl0IGlzIGxpa2VseSB5b3Ugd2lsbCBhbHJlYWR5IGZpbmQgdGhlIHpsaWIgbGlicmFyeSBhbmQKICMgICBhbnkgb3RoZXIgZXh0ZXJuYWwgcGFja2FnZXMgdGhlcmUuCiAjICogSW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgaXMgc29tZXdoZXJlIG9uIHlvdXIgcGF0aC4KLSMgKiBSdW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgUENCdWlsZCBkaXJlY3RvcnkuCisjICogUnVuIHRoaXMgc2NyaXB0IGZyb20gdGhlIFBDL1ZTOC4wIGRpcmVjdG9yeS4KICMKICMgaXQgc2hvdWxkIGNvbmZpZ3VyZSBhbmQgYnVpbGQgU1NMLCB0aGVuIGJ1aWxkIHRoZSBfc3NsIGFuZCBfaGFzaGxpYgogIyBQeXRob24gZXh0ZW5zaW9ucyB3aXRob3V0IGludGVydmVudGlvbi4KQEAgLTQ2LDcgKzQ2LDcgQEAKICMgaXMgYXZhaWxhYmxlLgogZGVmIGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKToKICAgICBmb3IgcGVybCBpbiBwZXJsczoKLSAgICAgICAgZmggPSBvcy5wb3BlbihwZXJsICsgJyAtZSAidXNlIFdpbjMyOyInKQorICAgICAgICBmaCA9IG9zLnBvcGVuKCciJXMiIC1lICJ1c2UgV2luMzI7IicgJSBwZXJsKQogICAgICAgICBmaC5yZWFkKCkKICAgICAgICAgcmMgPSBmaC5jbG9zZSgpCiAgICAgICAgIGlmIHJjOgpAQCAtMTc4LDEyICsxNzgsMTIgQEAKICAgICAjIGFzICJ3ZWxsIGtub3duIiBsb2NhdGlvbnMKICAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgWyJcXHBlcmxcXGJpbiIsICJDOlxccGVybFxcYmluIl0pCiAgICAgcGVybCA9IGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKQotICAgIGlmIHBlcmwgaXMgTm9uZToKKyAgICBpZiBwZXJsOgorICAgICAgICBwcmludCgiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpKQorICAgIGVsc2U6CiAgICAgICAgIHByaW50KCJObyBQZXJsIGluc3RhbGxhdGlvbiB3YXMgZm91bmQuIEV4aXN0aW5nIE1ha2VmaWxlcyBhcmUgdXNlZC4iKQotCi0gICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAyIGxldmVscyB1cCBmcm9tIHBjYnVpbGQgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KKyAgICAjIExvb2sgZm9yIFNTTCAzIGxldmVscyB1cCBmcm9tIFBDL1ZTOC4wIC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCiAgICAgc3NsX2RpciA9IGZpbmRfYmVzdF9zc2xfZGlyKCgiLi5cXC4uXFwuLiIsKSkKICAgICBpZiBzc2xfZGlyIGlzIE5vbmU6CiAgICAgICAgIHN5cy5leGl0KDEpCmRpZmYgLS1naXQgYS9QQy9WUzguMC9iejIudmNwcm9qIGIvUEMvVlM4LjAvYnoyLnZjcHJvagppbmRleCA4MzgyODE4Li5mZWFkNjQwIDEwMDY0NAotLS0gYS9QQy9WUzguMC9iejIudmNwcm9qCisrKyBiL1BDL1ZTOC4wL2J6Mi52Y3Byb2oKQEAgLTQzLDYgKzQzLDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC01MiwxMiArNTMsMTAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgbGliYnoyIgotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKGJ6MkRpcikmI3gwRDsmI3gwQTtpZiBleGlzdCAkKFBsYXRmb3JtTmFtZSktRGVidWdcbGliYnoyLmxpYiBleGl0IDAmI3gwRDsmI3gwQTtpZiBub3QgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLURlYnVnIG1rZGlyICQoUGxhdGZvcm1OYW1lKS1EZWJ1ZyYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYiYjeDBEOyYjeDBBO2NvcHkgbGliYnoyLmxpYiAkKFBsYXRmb3JtTmFtZSktRGVidWcmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBjbGVhbiYjeDBEOyYjeDBBOyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGJ6MkRpcilcJChQbGF0Zm9ybU5hbWUpLURlYnVnXGxpYmJ6Mi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKQEAgLTEwNiw2ICsxMDUsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTExNSwxMiArMTE1LDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLURlYnVnXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1EZWJ1ZyBta2RpciAkKFBsYXRmb3JtTmFtZSktRGVidWcmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLURlYnVnJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1EZWJ1Z1xsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCkBAIC0xNjksNiArMTY3LDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0xNzgsMTIgKzE3NywxMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBsaWJiejIiCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoYnoyRGlyKSYjeDBEOyYjeDBBO2lmIGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlIG1rZGlyICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliJiN4MEQ7JiN4MEE7Y29weSBsaWJiejIubGliICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKQEAgLTIzMyw2ICsyMzAsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTI0MiwxMiArMjQwLDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiBleGl0IDAmI3gwRDsmI3gwQTtpZiBub3QgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UgbWtkaXIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBjbGVhbiYjeDBEOyYjeDBBOyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGJ6MkRpcilcJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpAQCAtMjk2LDYgKzI5Miw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtMzA1LDEyICszMDIsMTAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgbGliYnoyIgotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKGJ6MkRpcikmI3gwRDsmI3gwQTtpZiBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIGV4aXQgMCYjeDBEOyYjeDBBO2lmIG5vdCBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSBta2RpciAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYiYjeDBEOyYjeDBBO2NvcHkgbGliYnoyLmxpYiAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGNsZWFuJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoYnoyRGlyKVwkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCkBAIC0zNjAsNiArMzU1LDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0zNjksMTIgKzM2NSwxMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBsaWJiejIiCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoYnoyRGlyKSYjeDBEOyYjeDBBO2lmIGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlIG1rZGlyICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliJiN4MEQ7JiN4MEE7Y29weSBsaWJiejIubGliICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMTciCiAJCQkvPgogCQkJPFRvb2wKQEAgLTQyNCw2ICs0MTgsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTQzMywxMiArNDI4LDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiBleGl0IDAmI3gwRDsmI3gwQTtpZiBub3QgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UgbWtkaXIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBjbGVhbiYjeDBEOyYjeDBBOyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGJ6MkRpcilcJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpAQCAtNDg4LDYgKzQ4MSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtNDk3LDEyICs0OTEsMTAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgbGliYnoyIgotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKGJ6MkRpcikmI3gwRDsmI3gwQTtpZiBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIGV4aXQgMCYjeDBEOyYjeDBBO2lmIG5vdCBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSBta2RpciAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYiYjeDBEOyYjeDBBO2NvcHkgbGliYnoyLmxpYiAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGNsZWFuJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoYnoyRGlyKVwkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJCVRhcmdldE1hY2hpbmU9IjE3IgogCQkJLz4KIAkJCTxUb29sCkBAIC01MzksNiArNTMxLDUwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iYnppcDIgMS4wLjUgSGVhZGVyIEZpbGVzIgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWJfcHJpdmF0ZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9ImJ6aXAyIDEuMC41IFNvdXJjZSBGaWxlcyIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYmxvY2tzb3J0LmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYi5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcY29tcHJlc3MuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGNyY3RhYmxlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxkZWNvbXByZXNzLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxodWZmbWFuLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxyYW5kdGFibGUuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgogCTwvRmlsZXM+CiAJPEdsb2JhbHM+CiAJPC9HbG9iYWxzPgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZGVidWcudnNwcm9wcyBiL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMKaW5kZXggYmM2NDNjYi4uMmJlN2Y3NCAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvZGVidWcudnNwcm9wcworKysgYi9QQy9WUzguMC9kZWJ1Zy52c3Byb3BzCkBAIC0xLDE1ICsxLDE1IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iZGVidWciDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJLaWxsUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoT3V0RGlyKVxraWxsX3B5dGhvbl9kLmV4ZSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjguMDAiCisJTmFtZT0iZGVidWciCisJPgorCTxUb29sCisJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9IktpbGxQeXRob25FeGUiCisJCVZhbHVlPSIkKE91dERpcilca2lsbF9weXRob25fZC5leGUiCisJLz4KKzwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzIGIvUEMvVlM4LjAvcGdpbnN0cnVtZW50LnZzcHJvcHMKaW5kZXggMzhjNWYxOC4uOTNiOTY4NyAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvcGdpbnN0cnVtZW50LnZzcHJvcHMKKysrIGIvUEMvVlM4LjAvcGdpbnN0cnVtZW50LnZzcHJvcHMKQEAgLTEsMzQgKzEsMzQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJwZ2luc3RydW1lbnQiDQotCU91dHB1dERpcmVjdG9yeT0iJChPdXREaXJQR0kpIg0KLQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtcGdpXCQoUHJvamVjdE5hbWUpXCINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCU9wdGltaXphdGlvbj0iMiINCi0JCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCUZhdm9yU2l6ZU9yU3BlZWQ9IjIiDQotCQlPbWl0RnJhbWVQb2ludGVycz0idHJ1ZSINCi0JCUVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM9ImZhbHNlIg0KLQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KLQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KLQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQotCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KLQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iMiINCi0JCVByb2ZpbGVHdWlkZWREYXRhYmFzZT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktcGdpXCQoVGFyZ2V0TmFtZSkucGdkIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJPdXREaXJQR0kiDQotCQlWYWx1ZT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktcGdpXCINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjguMDAiCisJTmFtZT0icGdpbnN0cnVtZW50IgorCU91dHB1dERpcmVjdG9yeT0iJChPdXREaXJQR0kpIgorCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC1wZ2lcJChQcm9qZWN0TmFtZSlcIgorCT4KKwk8VG9vbAorCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQlPcHRpbWl6YXRpb249IjIiCisJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIgorCQlGYXZvclNpemVPclNwZWVkPSIyIgorCQlPbWl0RnJhbWVQb2ludGVycz0idHJ1ZSIKKwkJRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz0iZmFsc2UiCisJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSIKKwkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKKwkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiCisJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIgorCS8+CisJPFRvb2wKKwkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCisJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCisJCUxpbmtUaW1lQ29kZUdlbmVyYXRpb249IjIiCisJCVByb2ZpbGVHdWlkZWREYXRhYmFzZT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktcGdpXCQoVGFyZ2V0TmFtZSkucGdkIgorCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSlcJChUYXJnZXROYW1lKS5saWIiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9Ik91dERpclBHSSIKKwkJVmFsdWU9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnaVwiCisJLz4KKzwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3BndXBkYXRlLnZzcHJvcHMgYi9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzCmluZGV4IDI2Y2ZjMmQuLjdjZTRhM2EgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL3BndXBkYXRlLnZzcHJvcHMKKysrIGIvUEMvVlM4LjAvcGd1cGRhdGUudnNwcm9wcwpAQCAtMSwxNCArMSwxNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InBndXBkYXRlIg0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnb1wiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFNvbHV0aW9uRGlyKVxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJQWRkaXRpb25hbE1hbmlmZXN0RGVwZW5kZW5jaWVzPSIiDQotCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSI0Ig0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOC4wMCIKKwlOYW1lPSJwZ3VwZGF0ZSIKKwlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnb1wiCisJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoU29sdXRpb25EaXIpXHBnaW5zdHJ1bWVudC52c3Byb3BzIgorCT4KKwk8VG9vbAorCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCUFkZGl0aW9uYWxNYW5pZmVzdERlcGVuZGVuY2llcz0iIgorCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSI0IgorCS8+Cis8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWQudnNwcm9wcyBiL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCmluZGV4IGJmZTZiZDcuLmNlMDM5ZWIgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCisrKyBiL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCkBAIC0xLDIzICsxLDI4IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHlkIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRSINCi0JCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnB5ZCINCi0JCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5wZGIiDQotCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcilcJChUYXJnZXROYW1lKS5saWIiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCUNvbW1hbmRMaW5lPSIiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9InB5ZCIKKwlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyIKKwk+CisJPFRvb2wKKwkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFIgorCQlSdW50aW1lTGlicmFyeT0iMiIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnB5ZCIKKwkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnBkYiIKKwkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpXCQoVGFyZ2V0TmFtZSkubGliIgorCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQlFbWJlZE1hbmlmZXN0PSJmYWxzZSIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQlDb21tYW5kTGluZT0iIgorCS8+Cis8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWRfZC52c3Byb3BzIGIvUEMvVlM4LjAvcHlkX2QudnNwcm9wcwppbmRleCBmM2E5NTFjLi44NTA4MTU2IDEwMDY0NAotLS0gYS9QQy9WUzguMC9weWRfZC52c3Byb3BzCisrKyBiL1BDL1ZTOC4wL3B5ZF9kLnZzcHJvcHMKQEAgLTEsMzEgKzEsMzYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWRfZCINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjAiDQotCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFIg0KLQkJUnVudGltZUxpYnJhcnk9IjMiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5weWQiDQotCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5wZGIiDQotCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcilcJChUYXJnZXROYW1lKS5saWIiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCUNvbW1hbmRMaW5lPSIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKXB5dGhvbl9kLmV4ZSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjguMDAiCisJTmFtZT0icHlkX2QiCisJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIgorCT4KKwk8VG9vbAorCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQlPcHRpbWl6YXRpb249IjAiCisJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIwIgorCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIgorCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEUiCisJCVJ1bnRpbWVMaWJyYXJ5PSIzIgorCS8+CisJPFRvb2wKKwkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5weWQiCisJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QucGRiIgorCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcilcJChUYXJnZXROYW1lKS5saWIiCisJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIgorCS8+CisJPFRvb2wKKwkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCUVtYmVkTWFuaWZlc3Q9ImZhbHNlIgorCS8+CisJPFRvb2wKKwkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCUNvbW1hbmRMaW5lPSIiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9IlB5dGhvbkV4ZSIKKwkJVmFsdWU9IiQoU29sdXRpb25EaXIpcHl0aG9uX2QuZXhlIgorCS8+Cis8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CmRpZmYgLS1naXQgYS9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcyBiL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCmluZGV4IDcyYjQ1OWUuLmZmYWU0OTAgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCisrKyBiL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCkBAIC0xLDExMSArMSwxMTEgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweXByb2plY3QiDQotCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb25OYW1lKVwkKFByb2plY3ROYW1lKVwiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlPcHRpbWl6YXRpb249IjIiDQotCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7IC4uXC4uXFBDIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMiINCi0JCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCi0JCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJQ29tcGlsZUFzPSIwIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIg0KLQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KLQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQlTdWJTeXN0ZW09IjIiDQotCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQotCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCi0JCVRhcmdldE1hY2hpbmU9IjEiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cSW5jbHVkZSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHlEbGxOYW1lIg0KLQkJVmFsdWU9InB5dGhvbjI2Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeXRob25FeGUiDQotCQlWYWx1ZT0iJChTb2x1dGlvbkRpcilccHl0aG9uLmV4ZSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iZXh0ZXJuYWxzRGlyIg0KLQkJVmFsdWU9Ii4uXC4uXC4uIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJic2RkYkRpciINCi0JCVZhbHVlPSIkKGJzZGRiNDdEaXIpIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJic2RkYkRlcExpYnMiDQotCQlWYWx1ZT0iJChic2RkYjQ3RGVwTGlicykiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9ImJzZGRiNDREaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXGRiLTQuNC4yMFxidWlsZF93aW4zMiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iYnNkZGI0NERlcExpYnMiDQotCQlWYWx1ZT0iIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJic2RkYjQ3RGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxkYi00LjcuMjUuMFxidWlsZF93aW5kb3dzIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJic2RkYjQ3RGVwTGlicyINCi0JCVZhbHVlPSJ3czJfMzIubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJzcWxpdGUzRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy41LjkiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9ImJ6MkRpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcYnppcDItMS4wLjUiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9Im9wZW5zc2xEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMC45LjhnIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcdGNsdGsiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjREaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrNjQiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrTGliIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NS5saWIgJCh0Y2x0a0RpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0xpYkRlYnVnIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NWcubGliICQodGNsdGtEaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjRMaWIiDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODUubGliICQodGNsdGs2NERpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0TGliRGVidWciDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODVnLmxpYiAkKHRjbHRrNjREaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9InB5cHJvamVjdCIKKwlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpIgorCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb25OYW1lKVwkKFByb2plY3ROYW1lKVwiCisJPgorCTxUb29sCisJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCU9wdGltaXphdGlvbj0iMiIKKwkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKKwkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsgLi5cLi5cUEMiCisJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzIiCisJCVN0cmluZ1Bvb2xpbmc9InRydWUiCisJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIgorCQlSdW50aW1lTGlicmFyeT0iMCIKKwkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCVdhcm5pbmdMZXZlbD0iMyIKKwkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJQ29tcGlsZUFzPSIwIgorCS8+CisJPFRvb2wKKwkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKKwkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFRhcmdldE5hbWUpLnBkYiIKKwkJU3ViU3lzdGVtPSIyIgorCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCisJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgorCQlUYXJnZXRNYWNoaW5lPSIxIgorCS8+CisJPFRvb2wKKwkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cSW5jbHVkZSIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0iUHlEbGxOYW1lIgorCQlWYWx1ZT0icHl0aG9uMjciCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9IlB5dGhvbkV4ZSIKKwkJVmFsdWU9IiQoU29sdXRpb25EaXIpXHB5dGhvbi5leGUiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9ImV4dGVybmFsc0RpciIKKwkJVmFsdWU9Ii4uXC4uXC4uIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJic2RkYjQ3RGlyIgorCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXGRiLTQuNy4yNS4wXGJ1aWxkX3dpbmRvd3MiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9ImJzZGRiNDdEZXBMaWJzIgorCQlWYWx1ZT0id3MyXzMyLmxpYiIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0iYnNkZGJEaXIiCisJCVZhbHVlPSIkKGJzZGRiNDdEaXIpIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJic2RkYkRlcExpYnMiCisJCVZhbHVlPSIkKGJzZGRiNDdEZXBMaWJzKSIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0iYnNkZGI0NERpciIKKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxkYi00LjQuMjBcYnVpbGRfd2luMzIiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9ImJzZGRiNDREZXBMaWJzIgorCQlWYWx1ZT0iIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJzcWxpdGUzRGlyIgorCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjYuMjEiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9ImJ6MkRpciIKKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxiemlwMi0xLjAuNSIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0ib3BlbnNzbERpciIKKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTAuOS44bCIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0idGNsdGtEaXIiCisJCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcdGNsdGsiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9InRjbHRrNjREaXIiCisJCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcdGNsdGs2NCIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0idGNsdGtMaWIiCisJCVZhbHVlPSIkKHRjbHRrRGlyKVxsaWJcdGNsODUubGliICQodGNsdGtEaXIpXGxpYlx0azg1LmxpYiIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0idGNsdGtMaWJEZWJ1ZyIKKwkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NWcubGliICQodGNsdGtEaXIpXGxpYlx0azg1Zy5saWIiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9InRjbHRrNjRMaWIiCisJCVZhbHVlPSIkKHRjbHRrNjREaXIpXGxpYlx0Y2w4NS5saWIgJCh0Y2x0azY0RGlyKVxsaWJcdGs4NS5saWIiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9InRjbHRrNjRMaWJEZWJ1ZyIKKwkJVmFsdWU9IiQodGNsdGs2NERpcilcbGliXHRjbDg1Zy5saWIgJCh0Y2x0azY0RGlyKVxsaWJcdGs4NWcubGliIgorCS8+Cis8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CmRpZmYgLS1naXQgYS9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvaiBiL1BDL1ZTOC4wL3B5dGhvbmNvcmUudmNwcm9qCmluZGV4IGJhOWMyZWEuLjM4ZjQxZGYgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL3B5dGhvbmNvcmUudmNwcm9qCisrKyBiL1BDL1ZTOC4wL3B5dGhvbmNvcmUudmNwcm9qCkBAIC03MTUsNiArNzE1LDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZHRvYS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGVudW1vYmplY3QuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC04NTEsNiArODU1LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHljYXBzdWxlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHljdHlwZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZGVidWcuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC05OTUsMTQgKzEwMDcsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9maWxlaW8uYyIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfYnl0ZXNpby5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xMDI3LDYgKzEwMzEsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTExNzEsMTQgKzExODMsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHl1di5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHl1dmNvbnZlcnQuYyIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xMzU0LDYgKzEzNTgsNDIgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCTwvRmlsdGVyPgorCQkJPEZpbHRlcgorCQkJCU5hbWU9Il9pbyIKKwkJCQk+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuYyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xpb2Jhc2UuYyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1x0ZXh0aW8uYyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCTwvRmlsdGVyPgogCQk8L0ZpbHRlcj4KIAkJPEZpbHRlcgogCQkJTmFtZT0iT2JqZWN0cyIKQEAgLTEzNzksNyArMTQxOSw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nb2JqZWN0LmMiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNhcHN1bGUuYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtMTQ2Nyw2ICsxNTA3LDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWVtb3J5b2JqZWN0LmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTQ5OSw2ICsxNTQzLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nb2JqZWN0LmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RydWN0c2VxLmMiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTY1OSw2ICsxNzExLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkdG9hLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE2OTUsMTAgKzE3NTEsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0bXRpbWUuYyIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldG9wdC5jIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE3NTEsNiArMTgwMywxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHljdHlwZS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlmcGUuYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9QQy9WUzguMC9yZWxlYXNlLnZzcHJvcHMgYi9QQy9WUzguMC9yZWxlYXNlLnZzcHJvcHMKaW5kZXggMDhkZWY5MC4uNmQ2ODQyZCAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzCisrKyBiL1BDL1ZTOC4wL3JlbGVhc2UudnNwcm9wcwpAQCAtMSwxNSArMSwxNSBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InJlbGVhc2UiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJLaWxsUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoT3V0RGlyKVxraWxsX3B5dGhvbi5leGUiDQotCS8+CQ0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOC4wMCIKKwlOYW1lPSJyZWxlYXNlIgorCT4KKwk8VG9vbAorCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJLaWxsUHl0aG9uRXhlIgorCQlWYWx1ZT0iJChPdXREaXIpXGtpbGxfcHl0aG9uLmV4ZSIKKwkvPgkKKzwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2ogYi9QQy9WUzguMC9zZWxlY3QudmNwcm9qCmluZGV4IGZiMjVhNTguLjQ5ZWMyZjAgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2oKKysrIGIvUEMvVlM4LjAvc2VsZWN0LnZjcHJvagpAQCAtNTQsNyArNTQsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCS8+CkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCiAJCQkvPgpAQCAtMTc4LDcgKzE3OCw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJLz4KQEAgLTI0MSw3ICsyNDEsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCS8+CkBAIC0zMDMsNyArMzAzLDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCiAJCQkvPgpAQCAtMzY2LDcgKzM2Niw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJCVRhcmdldE1hY2hpbmU9IjE3IgpAQCAtNDI5LDcgKzQyOSw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJLz4KQEAgLTQ5Miw3ICs0OTIsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKaW5kZXggMDcxNTg5YS4uZTdlMDcyOCAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKKysrIGIvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKQEAgLTIyLDcgKzIyLDcgQEAKIAkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IkRlYnVnfFdpbjMyIgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5cZGVidWcudnNwcm9wcyIKIAkJCUNoYXJhY3RlclNldD0iMCIKIAkJCT4KIAkJCTxUb29sCkBAIC00Miw4ICs0Miw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iU1FMSVRFX0FQST1fX2RlY2xzcGVjKGRsbGV4cG9ydCkiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC04Myw3ICs4Miw3IEBACiAJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJEZWJ1Z3x4NjQiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXGRlYnVnLnZzcHJvcHM7Llx4NjQudnNwcm9wcyIKIAkJCUNoYXJhY3RlclNldD0iMCIKIAkJCT4KIAkJCTxUb29sCkBAIC0xMDQsOCArMTAzLDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTE0NSw3ICsxNDMsNyBAQAogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjAiCiAJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCiAJCQk+CkBAIC0xNjYsOCArMTY0LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTIwNyw3ICsyMDQsNyBAQAogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iUmVsZWFzZXx4NjQiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wcyIKIAkJCUNoYXJhY3RlclNldD0iMCIKIAkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKIAkJCT4KQEAgLTIyOSw4ICsyMjYsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlNRTElURV9BUEk9X19kZWNsc3BlYyhkbGxleHBvcnQpIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtMjcwLDcgKzI2Niw3IEBACiAJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyIKIAkJCUNoYXJhY3RlclNldD0iMCIKIAkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKIAkJCT4KQEAgLTI5MSw4ICsyODcsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlNRTElURV9BUEk9X19kZWNsc3BlYyhkbGxleHBvcnQpIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90Oy4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEmcXVvdDsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTMzMiw3ICszMjcsNyBAQAogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyIKIAkJCUNoYXJhY3RlclNldD0iMCIKIAkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKIAkJCT4KQEAgLTM1NCw4ICszNDksNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlNRTElURV9BUEk9X19kZWNsc3BlYyhkbGxleHBvcnQpIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtMzk0LDcgKzM4OCw3IEBACiAJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyIKIAkJCUNoYXJhY3RlclNldD0iMCIKIAkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKIAkJCT4KQEAgLTQxNSw4ICs0MDksNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlNRTElURV9BUEk9X19kZWNsc3BlYyhkbGxleHBvcnQpIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtNDU2LDcgKzQ0OSw3IEBACiAJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIgogCQkJQ2hhcmFjdGVyU2V0PSIwIgogCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgogCQkJPgpAQCAtNDc4LDggKzQ3MSw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iU1FMSVRFX0FQST1fX2RlY2xzcGVjKGRsbGV4cG9ydCkiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC01MjMsMTEgKzUxNSwxMSBAQAogCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgogCQkJPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOVxzcWxpdGUzLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTMuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNS45XHNxbGl0ZTNleHQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjFcc3FsaXRlM2V4dC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CkBAIC01MzUsNyArNTI3LDcgQEAKIAkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKIAkJCT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy41Ljlcc3FsaXRlMy5jIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzLmMiCiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NxbGl0ZTMudnNwcm9wcyBiL1BDL1ZTOC4wL3NxbGl0ZTMudnNwcm9wcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjcxMDJkCi0tLSAvZGV2L251bGwKKysrIGIvUEMvVlM4LjAvc3FsaXRlMy52c3Byb3BzCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9InNxbGl0ZTMiCisJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHMiCisJPgorCTxUb29sCisJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiCisJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSIKKwkJV2FybmluZ0xldmVsPSIxIgorCS8+Cis8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CmRpZmYgLS1naXQgYS9QQy9WUzguMC94NjQudnNwcm9wcyBiL1BDL1ZTOC4wL3g2NC52c3Byb3BzCmluZGV4IDlmODhkNDQuLjA3MjAwODQgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL3g2NC52c3Byb3BzCisrKyBiL1BDL1ZTOC4wL3g2NC52c3Byb3BzCkBAIC0xLDIyICsxLDIyIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iYW1kNjQiDQotCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcilcYW1kNjRcIg0KLQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uTmFtZSlcJChQcm9qZWN0TmFtZSlcIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjY0O19NX1g2NCINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeXRob25FeGUiDQotCQlWYWx1ZT0iJChIT1NUX1BZVEhPTikiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9ImFtZDY0IgorCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcilcYW1kNjRcIgorCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb25OYW1lKVwkKFByb2plY3ROYW1lKVwiCisJPgorCTxUb29sCisJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCUFkZGl0aW9uYWxPcHRpb25zPSIvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIgorCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjY0O19NX1g2NCIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJVGFyZ2V0TWFjaGluZT0iMTciCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9IlB5dGhvbkV4ZSIKKwkJVmFsdWU9IiQoSE9TVF9QWVRIT04pIgorCS8+Cis8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CmRpZmYgLS1naXQgYS9QQy9fc3VicHJvY2Vzcy5jIGIvUEMvX3N1YnByb2Nlc3MuYwppbmRleCA2YjM0MTc1Li42NzgwMzgyIDEwMDY0NAotLS0gYS9QQy9fc3VicHJvY2Vzcy5jCisrKyBiL1BDL19zdWJwcm9jZXNzLmMKQEAgLTY2OSw0ICs2NjksNSBAQAogICAgIGRlZmludChkLCAiSU5GSU5JVEUiLCBJTkZJTklURSk7CiAgICAgZGVmaW50KGQsICJXQUlUX09CSkVDVF8wIiwgV0FJVF9PQkpFQ1RfMCk7CiAgICAgZGVmaW50KGQsICJDUkVBVEVfTkVXX0NPTlNPTEUiLCBDUkVBVEVfTkVXX0NPTlNPTEUpOworICAgIGRlZmludChkLCAiQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQIiwgQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQKTsKIH0KZGlmZiAtLWdpdCBhL1BDL193aW5yZWcuYyBiL1BDL193aW5yZWcuYwppbmRleCAyOTNmMWRkLi40NDVjM2VkIDEwMDY0NAotLS0gYS9QQy9fd2lucmVnLmMKKysrIGIvUEMvX3dpbnJlZy5jCkBAIC04OSw3ICs4OSw3IEBACiAia2V5IGlzIHRoZSBwcmVkZWZpbmVkIGhhbmRsZSB0byBjb25uZWN0IHRvLlxuIgogIlxuIgogIlRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGhhbmRsZSBvZiB0aGUgb3BlbmVkIGtleS5cbiIKLSJJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIEVudmlyb25tZW50RXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKKyJJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGEgV2luZG93c0Vycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuIik7CiAKIFB5RG9jX1NUUlZBUihDcmVhdGVLZXlfZG9jLAogImtleSA9IENyZWF0ZUtleShrZXksIHN1Yl9rZXkpIC0gQ3JlYXRlcyBvciBvcGVucyB0aGUgc3BlY2lmaWVkIGtleS5cbiIKQEAgLTEwNCw2ICsxMDQsMjEgQEAKICJUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBoYW5kbGUgb2YgdGhlIG9wZW5lZCBrZXkuXG4iCiAiSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBleGNlcHRpb24gaXMgcmFpc2VkLiIpOwogCitQeURvY19TVFJWQVIoQ3JlYXRlS2V5RXhfZG9jLAorImtleSA9IENyZWF0ZUtleUV4KGtleSwgc3ViX2tleSwgcmVzLCBzYW0pIC0gQ3JlYXRlcyBvciBvcGVucyB0aGUgc3BlY2lmaWVkIGtleS5cbiIKKyJcbiIKKyJrZXkgaXMgYW4gYWxyZWFkeSBvcGVuIGtleSwgb3Igb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHNcbiIKKyJzdWJfa2V5IGlzIGEgc3RyaW5nIHRoYXQgbmFtZXMgdGhlIGtleSB0aGlzIG1ldGhvZCBvcGVucyBvciBjcmVhdGVzLlxuIgorInJlcyBpcyBhIHJlc2VydmVkIGludGVnZXIsIGFuZCBtdXN0IGJlIHplcm8uICBEZWZhdWx0IGlzIHplcm8uXG4iCisic2FtIGlzIGFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgYW4gYWNjZXNzIG1hc2sgdGhhdCBkZXNjcmliZXMgdGhlIGRlc2lyZWRcbiIKKyIgSWYga2V5IGlzIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBrZXlzLCBzdWJfa2V5IG1heSBiZSBOb25lLiBJbiB0aGF0IGNhc2UsXG4iCisiIHRoZSBoYW5kbGUgcmV0dXJuZWQgaXMgdGhlIHNhbWUga2V5IGhhbmRsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uLlxuIgorIlxuIgorIklmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIHRoaXMgZnVuY3Rpb24gb3BlbnMgdGhlIGV4aXN0aW5nIGtleVxuIgorIlxuIgorIlRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGhhbmRsZSBvZiB0aGUgb3BlbmVkIGtleS5cbiIKKyJJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQuIik7CisKIFB5RG9jX1NUUlZBUihEZWxldGVLZXlfZG9jLAogIkRlbGV0ZUtleShrZXksIHN1Yl9rZXkpIC0gRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGtleS5cbiIKICJcbiIKQEAgLTExNCw3ICsxMjksMjIgQEAKICJUaGlzIG1ldGhvZCBjYW4gbm90IGRlbGV0ZSBrZXlzIHdpdGggc3Via2V5cy5cbiIKICJcbiIKICJJZiB0aGUgbWV0aG9kIHN1Y2NlZWRzLCB0aGUgZW50aXJlIGtleSwgaW5jbHVkaW5nIGFsbCBvZiBpdHMgdmFsdWVzLFxuIgotImlzIHJlbW92ZWQuICBJZiB0aGUgbWV0aG9kIGZhaWxzLCBhbiBFbnZpcm9ubWVudEVycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuIik7CisiaXMgcmVtb3ZlZC4gIElmIHRoZSBtZXRob2QgZmFpbHMsIGEgV2luZG93c0Vycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuIik7CisKK1B5RG9jX1NUUlZBUihEZWxldGVLZXlFeF9kb2MsCisiRGVsZXRlS2V5RXgoa2V5LCBzdWJfa2V5LCBzYW0sIHJlcykgLSBEZWxldGVzIHRoZSBzcGVjaWZpZWQga2V5LlxuIgorIlxuIgorImtleSBpcyBhbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCisic3ViX2tleSBpcyBhIHN0cmluZyB0aGF0IG11c3QgYmUgYSBzdWJrZXkgb2YgdGhlIGtleSBpZGVudGlmaWVkIGJ5IHRoZSBrZXkgcGFyYW1ldGVyLlxuIgorInJlcyBpcyBhIHJlc2VydmVkIGludGVnZXIsIGFuZCBtdXN0IGJlIHplcm8uICBEZWZhdWx0IGlzIHplcm8uXG4iCisic2FtIGlzIGFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgYW4gYWNjZXNzIG1hc2sgdGhhdCBkZXNjcmliZXMgdGhlIGRlc2lyZWRcbiIKKyIgVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSBOb25lLCBhbmQgdGhlIGtleSBtYXkgbm90IGhhdmUgc3Via2V5cy5cbiIKKyJcbiIKKyJUaGlzIG1ldGhvZCBjYW4gbm90IGRlbGV0ZSBrZXlzIHdpdGggc3Via2V5cy5cbiIKKyJcbiIKKyJJZiB0aGUgbWV0aG9kIHN1Y2NlZWRzLCB0aGUgZW50aXJlIGtleSwgaW5jbHVkaW5nIGFsbCBvZiBpdHMgdmFsdWVzLFxuIgorImlzIHJlbW92ZWQuICBJZiB0aGUgbWV0aG9kIGZhaWxzLCBhIFdpbmRvd3NFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLlxuIgorIk9uIHVuc3VwcG9ydGVkIFdpbmRvd3MgdmVyc2lvbnMsIE5vdEltcGxlbWVudGVkRXJyb3IgaXMgcmFpc2VkLiIpOwogCiBQeURvY19TVFJWQVIoRGVsZXRlVmFsdWVfZG9jLAogIkRlbGV0ZVZhbHVlKGtleSwgdmFsdWUpIC0gUmVtb3ZlcyBhIG5hbWVkIHZhbHVlIGZyb20gYSByZWdpc3RyeSBrZXkuXG4iCkBAIC0xMjksNyArMTU5LDcgQEAKICJpbmRleCBpcyBhbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgaW5kZXggb2YgdGhlIGtleSB0byByZXRyaWV2ZS5cbiIKICJcbiIKICJUaGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBuYW1lIG9mIG9uZSBzdWJrZXkgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC5cbiIKLSJJdCBpcyB0eXBpY2FsbHkgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgYW4gRW52aXJvbm1lbnRFcnJvciBleGNlcHRpb24gaXNcbiIKKyJJdCBpcyB0eXBpY2FsbHkgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgYSBXaW5kb3dzRXJyb3IgZXhjZXB0aW9uIGlzXG4iCiAicmFpc2VkLCBpbmRpY2F0aW5nIG5vIG1vcmUgdmFsdWVzIGFyZSBhdmFpbGFibGUuIik7CiAKIFB5RG9jX1NUUlZBUihFbnVtVmFsdWVfZG9jLApAQCAtMTM4LDcgKzE2OCw3IEBACiAiaW5kZXggaXMgYW4gaW50ZWdlciB0aGF0IGlkZW50aWZpZXMgdGhlIGluZGV4IG9mIHRoZSB2YWx1ZSB0byByZXRyaWV2ZS5cbiIKICJcbiIKICJUaGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBuYW1lIG9mIG9uZSBzdWJrZXkgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC5cbiIKLSJJdCBpcyB0eXBpY2FsbHkgY2FsbGVkIHJlcGVhdGVkbHksIHVudGlsIGFuIEVudmlyb25tZW50RXJyb3IgZXhjZXB0aW9uXG4iCisiSXQgaXMgdHlwaWNhbGx5IGNhbGxlZCByZXBlYXRlZGx5LCB1bnRpbCBhIFdpbmRvd3NFcnJvciBleGNlcHRpb25cbiIKICJpcyByYWlzZWQsIGluZGljYXRpbmcgbm8gbW9yZSB2YWx1ZXMuXG4iCiAiXG4iCiAiVGhlIHJlc3VsdCBpcyBhIHR1cGxlIG9mIDMgaXRlbXM6XG4iCkBAIC0xOTIsNyArMjIyLDcgQEAKICIgc2VjdXJpdHkgYWNjZXNzIGZvciB0aGUga2V5LiAgRGVmYXVsdCBpcyBLRVlfUkVBRFxuIgogIlxuIgogIlRoZSByZXN1bHQgaXMgYSBuZXcgaGFuZGxlIHRvIHRoZSBzcGVjaWZpZWQga2V5XG4iCi0iSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBFbnZpcm9ubWVudEVycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuIik7CisiSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhIFdpbmRvd3NFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOwogCiBQeURvY19TVFJWQVIoT3BlbktleUV4X2RvYywgIlNlZSBPcGVuS2V5KCkiKTsKIApAQCAtNDExLDEwICs0NDEsOCBAQAogUHlIS0VZX3ByaW50RnVuYyhQeU9iamVjdCAqb2IsIEZJTEUgKmZwLCBpbnQgZmxhZ3MpCiB7CiAgICAgUHlIS0VZT2JqZWN0ICpweWhrZXkgPSAoUHlIS0VZT2JqZWN0ICopb2I7Ci0gICAgY2hhciByZXNCdWZbMTYwXTsKLSAgICB3c3ByaW50ZihyZXNCdWYsICI8UHlIS0VZIGF0ICVwICglcCk+IiwKLSAgICAgICAgICAgICBvYiwgcHloa2V5LT5oa2V5KTsKLSAgICBmcHV0cyhyZXNCdWYsIGZwKTsKKyAgICBmcHJpbnRmKGZwLCAiPFB5SEtFWSBhdCAlcCAoJXApPiIsCisgICAgICAgIG9iLCBweWhrZXktPmhrZXkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC00MjIsOSArNDUwLDcgQEAKIFB5SEtFWV9zdHJGdW5jKFB5T2JqZWN0ICpvYikKIHsKICAgICBQeUhLRVlPYmplY3QgKnB5aGtleSA9IChQeUhLRVlPYmplY3QgKilvYjsKLSAgICBjaGFyIHJlc0J1ZlsxNjBdOwotICAgIHdzcHJpbnRmKHJlc0J1ZiwgIjxQeUhLRVk6JXA+IiwgcHloa2V5LT5oa2V5KTsKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhyZXNCdWYpOworICAgIHJldHVybiBQeVN0cmluZ19Gcm9tRm9ybWF0KCI8UHlIS0VZOiVwPiIsIHB5aGtleS0+aGtleSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQ3Myw5ICs0OTksMjMgQEAKICAgICBQeUhLRVlfdW5hcnlGYWlsdXJlRnVuYywgICAgICAgICAgICAvKiBuYl9oZXggKi8KIH07CiAKK3N0YXRpYyBQeU9iamVjdCAqUHlIS0VZX0Nsb3NlTWV0aG9kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CitzdGF0aWMgUHlPYmplY3QgKlB5SEtFWV9EZXRhY2hNZXRob2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKK3N0YXRpYyBQeU9iamVjdCAqUHlIS0VZX0VudGVyKFB5T2JqZWN0ICpzZWxmKTsKK3N0YXRpYyBQeU9iamVjdCAqUHlIS0VZX0V4aXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKIAotLyogZndkIGRlY2xhcmUgX19nZXRhdHRyX18gKi8KLXN0YXRpYyBQeU9iamVjdCAqUHlIS0VZX2dldGF0dHIoUHlPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUpOworc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBQeUhLRVlfbWV0aG9kc1tdID0geworICAgIHsiQ2xvc2UiLCAgUHlIS0VZX0Nsb3NlTWV0aG9kLCBNRVRIX1ZBUkFSR1MsIFB5SEtFWV9DbG9zZV9kb2N9LAorICAgIHsiRGV0YWNoIiwgUHlIS0VZX0RldGFjaE1ldGhvZCwgTUVUSF9WQVJBUkdTLCBQeUhLRVlfRGV0YWNoX2RvY30sCisgICAgeyJfX2VudGVyX18iLCAoUHlDRnVuY3Rpb24pUHlIS0VZX0VudGVyLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX2V4aXRfXyIsIFB5SEtFWV9FeGl0LCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5TWVtYmVyRGVmIFB5SEtFWV9tZW1iZXJsaXN0W10gPSB7CisgICAgeyJoYW5kbGUiLCBUX1BZU1NJWkVULCBvZmZzZXRvZihQeUhLRVlPYmplY3QsIGhrZXkpLCBSRUFET05MWX0sCisgICAge05VTEx9ICAgIC8qIFNlbnRpbmVsICovCit9OwogCiAvKiBUaGUgdHlwZSBpdHNlbGYgKi8KIFB5VHlwZU9iamVjdCBQeUhLRVlfVHlwZSA9CkBAIC00ODYsNyArNTI2LDcgQEAKICAgICAwLAogICAgIFB5SEtFWV9kZWFsbG9jRnVuYywgICAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KICAgICBQeUhLRVlfcHJpbnRGdW5jLCAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwotICAgIFB5SEtFWV9nZXRhdHRyLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwogICAgIFB5SEtFWV9jb21wYXJlRnVuYywgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCkBAIC00OTksMTUgKzUzOSwxNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCiAgICAgUHlIS0VZX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCi19OwotCi0jZGVmaW5lIE9GRihlKSBvZmZzZXRvZihQeUhLRVlPYmplY3QsIGUpCi0KLXN0YXRpYyBzdHJ1Y3QgbWVtYmVybGlzdCBQeUhLRVlfbWVtYmVybGlzdFtdID0gewotICAgIHsiaGFuZGxlIiwgICAgICBUX0lOVCwgICAgICBPRkYoaGtleSl9LAotICAgIHtOVUxMfSAgICAvKiBTZW50aW5lbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgUHlIS0VZX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIFB5SEtFWV9tZW1iZXJsaXN0LCAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU1NCwyOCArNTk1LDYgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIFB5SEtFWV9tZXRob2RzW10gPSB7Ci0gICAgeyJDbG9zZSIsICBQeUhLRVlfQ2xvc2VNZXRob2QsIE1FVEhfVkFSQVJHUywgUHlIS0VZX0Nsb3NlX2RvY30sCi0gICAgeyJEZXRhY2giLCBQeUhLRVlfRGV0YWNoTWV0aG9kLCBNRVRIX1ZBUkFSR1MsIFB5SEtFWV9EZXRhY2hfZG9jfSwKLSAgICB7Il9fZW50ZXJfXyIsIChQeUNGdW5jdGlvbilQeUhLRVlfRW50ZXIsIE1FVEhfTk9BUkdTLCBOVUxMfSwKLSAgICB7Il9fZXhpdF9fIiwgUHlIS0VZX0V4aXQsIE1FVEhfVkFSQVJHUywgTlVMTH0sCi0gICAge05VTEx9Ci19OwotCi0vKnN0YXRpYyovIFB5T2JqZWN0ICoKLVB5SEtFWV9nZXRhdHRyKFB5T2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpuYW1lKQotewotICAgIFB5T2JqZWN0ICpyZXM7Ci0KLSAgICByZXMgPSBQeV9GaW5kTWV0aG9kKFB5SEtFWV9tZXRob2RzLCBzZWxmLCBuYW1lKTsKLSAgICBpZiAocmVzICE9IE5VTEwpCi0gICAgICAgIHJldHVybiByZXM7Ci0gICAgUHlFcnJfQ2xlYXIoKTsKLSAgICBpZiAoc3RyY21wKG5hbWUsICJoYW5kbGUiKSA9PSAwKQotICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Wb2lkUHRyKCgoUHlIS0VZT2JqZWN0ICopc2VsZiktPmhrZXkpOwotICAgIHJldHVybiBQeU1lbWJlcl9HZXQoKGNoYXIgKilzZWxmLCBQeUhLRVlfbWVtYmVybGlzdCwgbmFtZSk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgIFRoZSBwdWJsaWMgUHlIS0VZIEFQSSAod2VsbCwgbm90IHB1YmxpYyB5ZXQgOi0pCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDI1LDYgKzEwNDQsMjkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3JlYXRlS2V5RXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhLRVkgaEtleTsKKyAgICBQeU9iamVjdCAqb2JLZXk7CisgICAgY2hhciAqc3ViS2V5OworICAgIEhLRVkgcmV0S2V5OworICAgIGludCByZXMgPSAwOworICAgIFJFR1NBTSBzYW0gPSBLRVlfV1JJVEU7CisgICAgbG9uZyByYzsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk96fGlpOkNyZWF0ZUtleUV4IiwgJm9iS2V5LCAmc3ViS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXMsICZzYW0pKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmMgPSBSZWdDcmVhdGVLZXlFeChoS2V5LCBzdWJLZXksIHJlcywgTlVMTCwgKERXT1JEKU5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbSwgTlVMTCwgJnJldEtleSwgTlVMTCk7CisgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyYywgIkNyZWF0ZUtleUV4Iik7CisgICAgcmV0dXJuIFB5SEtFWV9Gcm9tSEtFWShyZXRLZXkpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogUHlEZWxldGVLZXkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIEhLRVkgaEtleTsKQEAgLTEwNDMsNiArMTA4NSw0NiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorUHlEZWxldGVLZXlFeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEtFWSBoS2V5OworICAgIFB5T2JqZWN0ICpvYktleTsKKyAgICBITU9EVUxFIGhNb2Q7CisgICAgdHlwZWRlZiBMT05HIChXSU5BUEkgKlJES0VGdW5jKShIS0VZLCBjb25zdCBjaGFyKiwgUkVHU0FNLCBpbnQpOworICAgIFJES0VGdW5jIHBmbiA9IE5VTEw7CisgICAgY2hhciAqc3ViS2V5OworICAgIGxvbmcgcmM7CisgICAgaW50IHJlcyA9IDA7CisgICAgUkVHU0FNIHNhbSA9IEtFWV9XT1c2NF82NEtFWTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3N8aWk6RGVsZXRlS2V5RXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvYktleSwgJnN1YktleSwgJnNhbSwgJnJlcykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlIS0VZX0FzSEtFWShvYktleSwgJmhLZXksIEZBTFNFKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBPbmx5IGF2YWlsYWJsZSBvbiA2NGJpdCBwbGF0Zm9ybXMsIHNvIHdlIG11c3QgbG9hZCBpdAorICAgICAgIGR5bmFtaWNhbGx5LiAqLworICAgIGhNb2QgPSBHZXRNb2R1bGVIYW5kbGUoImFkdmFwaTMyLmRsbCIpOworICAgIGlmIChoTW9kKQorICAgICAgICBwZm4gPSAoUkRLRUZ1bmMpR2V0UHJvY0FkZHJlc3MoaE1vZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVnRGVsZXRlS2V5RXhBIik7CisgICAgaWYgKCFwZm4pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmMgPSAoKnBmbikoaEtleSwgc3ViS2V5LCBzYW0sIHJlcyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyYyAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmMsICJSZWdEZWxldGVLZXlFeCIpOworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIFB5RGVsZXRlVmFsdWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIEhLRVkgaEtleTsKQEAgLTE1NjAsOCArMTY0Miw4IEBACiAgICAgaWYgKCFQeUhLRVlfQXNIS0VZKG9iS2V5LCAmaEtleSwgRkFMU0UpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8vIE9ubHkgYXZhaWxhYmxlIG9uIDY0Yml0IHBsYXRmb3Jtcywgc28gd2UgbXVzdCBsb2FkIGl0Ci0gICAgLy8gZHluYW1pY2FsbHkuCisgICAgLyogT25seSBhdmFpbGFibGUgb24gNjRiaXQgcGxhdGZvcm1zLCBzbyB3ZSBtdXN0IGxvYWQgaXQKKyAgICAgICBkeW5hbWljYWxseS4gKi8KICAgICBoTW9kID0gR2V0TW9kdWxlSGFuZGxlKCJhZHZhcGkzMi5kbGwiKTsKICAgICBpZiAoaE1vZCkKICAgICAgICAgcGZuID0gKFJEUktGdW5jKUdldFByb2NBZGRyZXNzKGhNb2QsCkBAIC0xNTk2LDggKzE2NzgsOCBAQAogICAgIGlmICghUHlIS0VZX0FzSEtFWShvYktleSwgJmhLZXksIEZBTFNFKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvLyBPbmx5IGF2YWlsYWJsZSBvbiA2NGJpdCBwbGF0Zm9ybXMsIHNvIHdlIG11c3QgbG9hZCBpdAotICAgIC8vIGR5bmFtaWNhbGx5LgorICAgIC8qIE9ubHkgYXZhaWxhYmxlIG9uIDY0Yml0IHBsYXRmb3Jtcywgc28gd2UgbXVzdCBsb2FkIGl0CisgICAgICAgZHluYW1pY2FsbHkuICovCiAgICAgaE1vZCA9IEdldE1vZHVsZUhhbmRsZSgiYWR2YXBpMzIuZGxsIik7CiAgICAgaWYgKGhNb2QpCiAgICAgICAgIHBmbiA9IChSRVJLRnVuYylHZXRQcm9jQWRkcmVzcyhoTW9kLApAQCAtMTYzMyw4ICsxNzE1LDggQEAKICAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLy8gT25seSBhdmFpbGFibGUgb24gNjRiaXQgcGxhdGZvcm1zLCBzbyB3ZSBtdXN0IGxvYWQgaXQKLSAgICAvLyBkeW5hbWljYWxseS4KKyAgICAvKiBPbmx5IGF2YWlsYWJsZSBvbiA2NGJpdCBwbGF0Zm9ybXMsIHNvIHdlIG11c3QgbG9hZCBpdAorICAgICAgIGR5bmFtaWNhbGx5LiAqLwogICAgIGhNb2QgPSBHZXRNb2R1bGVIYW5kbGUoImFkdmFwaTMyLmRsbCIpOwogICAgIGlmIChoTW9kKQogICAgICAgICBwZm4gPSAoUlFSS0Z1bmMpR2V0UHJvY0FkZHJlc3MoaE1vZCwKQEAgLTE2NTAsMTQgKzE3MzIsMTYgQEAKICAgICBpZiAocmMgIT0gRVJST1JfU1VDQ0VTUykKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZ1F1ZXJ5UmVmbGVjdGlvbktleSIpOwotICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmMpOworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzdWx0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiB3aW5yZWdfbWV0aG9kc1tdID0gewogICAgIHsiQ2xvc2VLZXkiLCAgICAgICAgIFB5Q2xvc2VLZXksICAgICAgICBNRVRIX1ZBUkFSR1MsIENsb3NlS2V5X2RvY30sCiAgICAgeyJDb25uZWN0UmVnaXN0cnkiLCAgUHlDb25uZWN0UmVnaXN0cnksIE1FVEhfVkFSQVJHUywgQ29ubmVjdFJlZ2lzdHJ5X2RvY30sCiAgICAgeyJDcmVhdGVLZXkiLCAgICAgICAgUHlDcmVhdGVLZXksICAgICAgIE1FVEhfVkFSQVJHUywgQ3JlYXRlS2V5X2RvY30sCisgICAgeyJDcmVhdGVLZXlFeCIsICAgICAgUHlDcmVhdGVLZXlFeCwgICAgIE1FVEhfVkFSQVJHUywgQ3JlYXRlS2V5RXhfZG9jfSwKICAgICB7IkRlbGV0ZUtleSIsICAgICAgICBQeURlbGV0ZUtleSwgICAgICAgTUVUSF9WQVJBUkdTLCBEZWxldGVLZXlfZG9jfSwKKyAgICB7IkRlbGV0ZUtleUV4IiwgICAgICBQeURlbGV0ZUtleUV4LCAgICAgTUVUSF9WQVJBUkdTLCBEZWxldGVLZXlFeF9kb2N9LAogICAgIHsiRGVsZXRlVmFsdWUiLCAgICAgIFB5RGVsZXRlVmFsdWUsICAgICBNRVRIX1ZBUkFSR1MsIERlbGV0ZVZhbHVlX2RvY30sCiAgICAgeyJEaXNhYmxlUmVmbGVjdGlvbktleSIsIFB5RGlzYWJsZVJlZmxlY3Rpb25LZXksIE1FVEhfVkFSQVJHUywgRGlzYWJsZVJlZmxlY3Rpb25LZXlfZG9jfSwKICAgICB7IkVuYWJsZVJlZmxlY3Rpb25LZXkiLCAgUHlFbmFibGVSZWZsZWN0aW9uS2V5LCAgTUVUSF9WQVJBUkdTLCBFbmFibGVSZWZsZWN0aW9uS2V5X2RvY30sCkBAIC0xNzA4LDcgKzE3OTIsOCBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICBQeUhLRVlfVHlwZS5vYl90eXBlID0gJlB5VHlwZV9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5SEtFWV9UeXBlKSA8IDApCisgICAgICAgIHJldHVybjsKICAgICBQeUhLRVlfVHlwZS50cF9kb2MgPSBQeUhLRVlfZG9jOwogICAgIFB5X0lOQ1JFRigmUHlIS0VZX1R5cGUpOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiSEtFWVR5cGUiLApkaWZmIC0tZ2l0IGEvUEMvY29uZmlnLmMgYi9QQy9jb25maWcuYwppbmRleCAzZmQ4ZGI3Li4zNWM2NjA4IDEwMDY0NAotLS0gYS9QQy9jb25maWcuYworKysgYi9QQy9jb25maWcuYwpAQCAtNTIsOCArNTIsNiBAQAogZXh0ZXJuIHZvaWQgaW5pdF93aW5yZWcodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X3N0cnVjdCh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRkYXRldGltZSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfZmlsZWlvKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdF9ieXRlc2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9mdW5jdG9vbHModm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X2pzb24odm9pZCk7CiBleHRlcm4gdm9pZCBpbml0emxpYih2b2lkKTsKQEAgLTY4LDYgKzY2LDcgQEAKIGV4dGVybiB2b2lkIGluaXRfc3VicHJvY2Vzcyh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfbHNwcm9mKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9hc3Qodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgX1B5V2FybmluZ3NfSW5pdCh2b2lkKTsKIAogLyogdG9vbHMvZnJlZXplL21ha2Vjb25maWcucHkgbWFya2VyIGZvciBhZGRpdGlvbmFsICJleHRlcm4iICovCkBAIC0xMzIsOCArMTMxLDYgQEAKICAgICB7Il93aW5yZWciLCBpbml0X3dpbnJlZ30sCiAgICAgeyJfc3RydWN0IiwgaW5pdF9zdHJ1Y3R9LAogICAgIHsiZGF0ZXRpbWUiLCBpbml0ZGF0ZXRpbWV9LAotICAgIHsiX2ZpbGVpbyIsIGluaXRfZmlsZWlvfSwKLSAgICB7Il9ieXRlc2lvIiwgaW5pdF9ieXRlc2lvfSwKICAgICB7Il9mdW5jdG9vbHMiLCBpbml0X2Z1bmN0b29sc30sCiAgICAgeyJfanNvbiIsIGluaXRfanNvbn0sCiAKQEAgLTE2Niw2ICsxNjMsOCBAQAogICAgIHsiZXhjZXB0aW9ucyIsIE5VTEx9LAogICAgIHsiX3dhcm5pbmdzIiwgX1B5V2FybmluZ3NfSW5pdH0sCiAKKyAgICB7Il9pbyIsIGluaXRfaW99LAorCiAgICAgLyogU2VudGluZWwgKi8KICAgICB7MCwgMH0KIH07CmRpZmYgLS1naXQgYS9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qIGIvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvagppbmRleCAxNzcxNGUzLi4wMTJmNjNlIDEwMDY0NAotLS0gYS9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qCisrKyBiL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2oKQEAgLTM5LDcgKzM5LDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvZXhwb3J0OmluaXRleGFtcGxlIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmMzMi5saWIgb2RiY2NwMzIubGliIHB5dGhvbjI2LmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24yNy5saWIiCiAJCQkJT3V0cHV0RmlsZT0iLlxSZWxlYXNlL2V4YW1wbGUucHlkIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvZXhwb3J0OmluaXRleGFtcGxlIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmMzMi5saWIgb2RiY2NwMzIubGliIHB5dGhvbjI2X2QubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmMzMi5saWIgb2RiY2NwMzIubGliIHB5dGhvbjI3X2QubGliIgogCQkJCU91dHB1dEZpbGU9Ii5cRGVidWcvZXhhbXBsZV9kLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIgpkaWZmIC0tZ2l0IGEvUEMvbXN2Y3J0bW9kdWxlLmMgYi9QQy9tc3ZjcnRtb2R1bGUuYwppbmRleCA0MTg5NjVkLi4wNTc5MDBkIDEwMDc1NQotLS0gYS9QQy9tc3ZjcnRtb2R1bGUuYworKysgYi9QQy9tc3ZjcnRtb2R1bGUuYwpAQCAtNDMsNiArNDMsMTIgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorUHlEb2NfU1RSVkFSKGhlYXBtaW5fZG9jLAorImhlYXBtaW4oKSAtPiBOb25lXG5cCitcblwKK0ZvcmNlIHRoZSBtYWxsb2MoKSBoZWFwIHRvIGNsZWFuIGl0c2VsZiB1cCBhbmQgcmV0dXJuIHVudXNlZCBibG9ja3NcblwKK3RvIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBPbiBmYWlsdXJlLCB0aGlzIHJhaXNlcyBJT0Vycm9yLiIpOworCiAvLyBQZXJmb3JtIGxvY2tpbmcgb3BlcmF0aW9ucyBvbiBhIEMgcnVudGltZSBmaWxlIGRlc2NyaXB0b3IuCiBzdGF0aWMgUHlPYmplY3QgKgogbXN2Y3J0X2xvY2tpbmcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtNjUsNiArNzEsMTcgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorUHlEb2NfU1RSVkFSKGxvY2tpbmdfZG9jLAorImxvY2tpbmcoZmQsIG1vZGUsIG5ieXRlcykgLT4gTm9uZVxuXAorXG5cCitMb2NrIHBhcnQgb2YgYSBmaWxlIGJhc2VkIG9uIGZpbGUgZGVzY3JpcHRvciBmZCBmcm9tIHRoZSBDIHJ1bnRpbWUuXG5cCitSYWlzZXMgSU9FcnJvciBvbiBmYWlsdXJlLiBUaGUgbG9ja2VkIHJlZ2lvbiBvZiB0aGUgZmlsZSBleHRlbmRzIGZyb21cblwKK3RoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gZm9yIG5ieXRlcyBieXRlcywgYW5kIG1heSBjb250aW51ZSBiZXlvbmRcblwKK3RoZSBlbmQgb2YgdGhlIGZpbGUuIG1vZGUgbXVzdCBiZSBvbmUgb2YgdGhlIExLXyogY29uc3RhbnRzIGxpc3RlZFxuXAorYmVsb3cuIE11bHRpcGxlIHJlZ2lvbnMgaW4gYSBmaWxlIG1heSBiZSBsb2NrZWQgYXQgdGhlIHNhbWUgdGltZSwgYnV0XG5cCittYXkgbm90IG92ZXJsYXAuIEFkamFjZW50IHJlZ2lvbnMgYXJlIG5vdCBtZXJnZWQ7IHRoZXkgbXVzdCBiZSB1bmxvY2tlZFxuXAoraW5kaXZpZHVhbGx5LiIpOworCiAvLyBTZXQgdGhlIGZpbGUgdHJhbnNsYXRpb24gbW9kZSBmb3IgYSBDIHJ1bnRpbWUgZmlsZSBkZXNjcmlwdG9yLgogc3RhdGljIFB5T2JqZWN0ICoKIG1zdmNydF9zZXRtb2RlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTgxLDYgKzk4LDEzIEBACiAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKGZsYWdzKTsKIH0KIAorUHlEb2NfU1RSVkFSKHNldG1vZGVfZG9jLAorInNldG1vZGUoZmQsIG1vZGUpIC0+IFByZXZpb3VzIG1vZGVcblwKK1xuXAorU2V0IHRoZSBsaW5lLWVuZCB0cmFuc2xhdGlvbiBtb2RlIGZvciB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLiBUbyBzZXRcblwKK2l0IHRvIHRleHQgbW9kZSwgZmxhZ3Mgc2hvdWxkIGJlIG9zLk9fVEVYVDsgZm9yIGJpbmFyeSwgaXQgc2hvdWxkIGJlXG5cCitvcy5PX0JJTkFSWS4iKTsKKwogLy8gQ29udmVydCBhbiBPUyBmaWxlIGhhbmRsZSB0byBhIEMgcnVudGltZSBmaWxlIGRlc2NyaXB0b3IuCiBzdGF0aWMgUHlPYmplY3QgKgogbXN2Y3J0X29wZW5fb3NmaGFuZGxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTk5LDYgKzEyMywxNCBAQAogICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhmZCk7CiB9CiAKK1B5RG9jX1NUUlZBUihvcGVuX29zZmhhbmRsZV9kb2MsCisib3Blbl9vc2ZoYW5kbGUoaGFuZGxlLCBmbGFncykgLT4gZmlsZSBkZXNjcmlwdG9yXG5cCitcblwKK0NyZWF0ZSBhIEMgcnVudGltZSBmaWxlIGRlc2NyaXB0b3IgZnJvbSB0aGUgZmlsZSBoYW5kbGUgaGFuZGxlLiBUaGVcblwKK2ZsYWdzIHBhcmFtZXRlciBzaG91bGQgYmUgYSBiaXR3aXNlIE9SIG9mIG9zLk9fQVBQRU5ELCBvcy5PX1JET05MWSxcblwKK2FuZCBvcy5PX1RFWFQuIFRoZSByZXR1cm5lZCBmaWxlIGRlc2NyaXB0b3IgbWF5IGJlIHVzZWQgYXMgYSBwYXJhbWV0ZXJcblwKK3RvIG9zLmZkb3BlbigpIHRvIGNyZWF0ZSBhIGZpbGUgb2JqZWN0LiIpOworCiAvLyBDb252ZXJ0IGEgQyBydW50aW1lIGZpbGUgZGVzY3JpcHRvciB0byBhbiBPUyBmaWxlIGhhbmRsZS4KIHN0YXRpYyBQeU9iamVjdCAqCiBtc3ZjcnRfZ2V0X29zZmhhbmRsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0xMDksNiArMTQxLDkgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTpnZXRfb3NmaGFuZGxlIiwgJmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CisKICAgICBoYW5kbGUgPSBfZ2V0X29zZmhhbmRsZShmZCk7CiAgICAgaWYgKGhhbmRsZSA9PSAtMSkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKQEAgLTExOSw2ICsxNTQsMTIgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Wb2lkUHRyKCh2b2lkKiloYW5kbGUpOwogfQogCitQeURvY19TVFJWQVIoZ2V0X29zZmhhbmRsZV9kb2MsCisiZ2V0X29zZmhhbmRsZShmZCkgLT4gZmlsZSBoYW5kbGVcblwKK1xuXAorUmV0dXJuIHRoZSBmaWxlIGhhbmRsZSBmb3IgdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4gUmFpc2VzIElPRXJyb3JcblwKK2lmIGZkIGlzIG5vdCByZWNvZ25pemVkLiIpOworCiAvKiBDb25zb2xlIEkvTyAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTMzLDYgKzE3NCwxMSBAQAogICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhvayk7CiB9CiAKK1B5RG9jX1NUUlZBUihrYmhpdF9kb2MsCisia2JoaXQoKSAtPiBib29sXG5cCitcblwKK1JldHVybiB0cnVlIGlmIGEga2V5cHJlc3MgaXMgd2FpdGluZyB0byBiZSByZWFkLiIpOworCiBzdGF0aWMgUHlPYmplY3QgKgogbXN2Y3J0X2dldGNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTE0OSw2ICsxOTUsMTYgQEAKICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUocywgMSk7CiB9CiAKK1B5RG9jX1NUUlZBUihnZXRjaF9kb2MsCisiZ2V0Y2goKSAtPiBrZXkgY2hhcmFjdGVyXG5cCitcblwKK1JlYWQgYSBrZXlwcmVzcyBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyLiBOb3RoaW5nIGlzIGVjaG9lZCB0b1xuXAordGhlIGNvbnNvbGUuIFRoaXMgY2FsbCB3aWxsIGJsb2NrIGlmIGEga2V5cHJlc3MgaXMgbm90IGFscmVhZHlcblwKK2F2YWlsYWJsZSwgYnV0IHdpbGwgbm90IHdhaXQgZm9yIEVudGVyIHRvIGJlIHByZXNzZWQuIElmIHRoZSBwcmVzc2VkIGtleVxuXAord2FzIGEgc3BlY2lhbCBmdW5jdGlvbiBrZXksIHRoaXMgd2lsbCByZXR1cm4gJ1xcMDAwJyBvciAnXFx4ZTAnOyB0aGUgbmV4dFxuXAorY2FsbCB3aWxsIHJldHVybiB0aGUga2V5Y29kZS4gVGhlIENvbnRyb2wtQyBrZXlwcmVzcyBjYW5ub3QgYmUgcmVhZCB3aXRoXG5cCit0aGlzIGZ1bmN0aW9uLiIpOworCiAjaWZkZWYgX1dDT05JT19ERUZJTkVECiBzdGF0aWMgUHlPYmplY3QgKgogbXN2Y3J0X2dldHdjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0xNjUsNiArMjIxLDExIEBACiAgICAgdVswXSA9IGNoOwogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVVuaWNvZGUodSwgMSk7CiB9CisKK1B5RG9jX1NUUlZBUihnZXR3Y2hfZG9jLAorImdldHdjaCgpIC0+IFVuaWNvZGUga2V5IGNoYXJhY3RlclxuXAorXG5cCitXaWRlIGNoYXIgdmFyaWFudCBvZiBnZXRjaCgpLCByZXR1cm5pbmcgYSBVbmljb2RlIHZhbHVlLiIpOwogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xODMsNiArMjQ0LDEyIEBACiAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKHMsIDEpOwogfQogCitQeURvY19TVFJWQVIoZ2V0Y2hlX2RvYywKKyJnZXRjaGUoKSAtPiBrZXkgY2hhcmFjdGVyXG5cCitcblwKK1NpbWlsYXIgdG8gZ2V0Y2goKSwgYnV0IHRoZSBrZXlwcmVzcyB3aWxsIGJlIGVjaG9lZCBpZiBpdCByZXByZXNlbnRzXG5cCithIHByaW50YWJsZSBjaGFyYWN0ZXIuIik7CisKICNpZmRlZiBfV0NPTklPX0RFRklORUQKIHN0YXRpYyBQeU9iamVjdCAqCiBtc3ZjcnRfZ2V0d2NoZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0xOTksNiArMjY2LDExIEBACiAgICAgc1swXSA9IGNoOwogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVVuaWNvZGUocywgMSk7CiB9CisKK1B5RG9jX1NUUlZBUihnZXR3Y2hlX2RvYywKKyJnZXR3Y2hlKCkgLT4gVW5pY29kZSBrZXkgY2hhcmFjdGVyXG5cCitcblwKK1dpZGUgY2hhciB2YXJpYW50IG9mIGdldGNoZSgpLCByZXR1cm5pbmcgYSBVbmljb2RlIHZhbHVlLiIpOwogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yMTQsNiArMjg2LDExIEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKK1B5RG9jX1NUUlZBUihwdXRjaF9kb2MsCisicHV0Y2goY2hhcikgLT4gTm9uZVxuXAorXG5cCitQcmludCB0aGUgY2hhcmFjdGVyIGNoYXIgdG8gdGhlIGNvbnNvbGUgd2l0aG91dCBidWZmZXJpbmcuIik7CisKICNpZmRlZiBfV0NPTklPX0RFRklORUQKIHN0YXRpYyBQeU9iamVjdCAqCiBtc3ZjcnRfcHV0d2NoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTIzMyw2ICszMTAsMTEgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIAogfQorCitQeURvY19TVFJWQVIocHV0d2NoX2RvYywKKyJwdXR3Y2godW5pY29kZV9jaGFyKSAtPiBOb25lXG5cCitcblwKK1dpZGUgY2hhciB2YXJpYW50IG9mIHB1dGNoKCksIGFjY2VwdGluZyBhIFVuaWNvZGUgdmFsdWUuIik7CiAjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI0OSw2ICszMzEsMTIgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorUHlEb2NfU1RSVkFSKHVuZ2V0Y2hfZG9jLAorInVuZ2V0Y2goY2hhcikgLT4gTm9uZVxuXAorXG5cCitDYXVzZSB0aGUgY2hhcmFjdGVyIGNoYXIgdG8gYmUgXCJwdXNoZWQgYmFja1wiIGludG8gdGhlIGNvbnNvbGUgYnVmZmVyO1xuXAoraXQgd2lsbCBiZSB0aGUgbmV4dCBjaGFyYWN0ZXIgcmVhZCBieSBnZXRjaCgpIG9yIGdldGNoZSgpLiIpOworCiAjaWZkZWYgX1dDT05JT19ERUZJTkVECiBzdGF0aWMgUHlPYmplY3QgKgogbXN2Y3J0X3VuZ2V0d2NoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTI2Myw2ICszNTEsMTEgQEAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CisKK1B5RG9jX1NUUlZBUih1bmdldHdjaF9kb2MsCisidW5nZXR3Y2godW5pY29kZV9jaGFyKSAtPiBOb25lXG5cCitcblwKK1dpZGUgY2hhciB2YXJpYW50IG9mIHVuZ2V0Y2goKSwgYWNjZXB0aW5nIGEgVW5pY29kZSB2YWx1ZS4iKTsKICNlbmRpZgogCiBzdGF0aWMgdm9pZApAQCAtMjgyLDIxICszNzUsMjEgQEAKIAogLyogTGlzdCBvZiBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhpcyBtb2R1bGUgKi8KIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbXN2Y3J0X2Z1bmN0aW9uc1tdID0gewotICAgIHsiaGVhcG1pbiIsICAgICAgICAgICAgICAgICBtc3ZjcnRfaGVhcG1pbiwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImxvY2tpbmciLCAgICAgICAgICAgICBtc3ZjcnRfbG9ja2luZywgTUVUSF9WQVJBUkdTfSwKLSAgICB7InNldG1vZGUiLCAgICAgICAgICAgICAgICAgbXN2Y3J0X3NldG1vZGUsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJvcGVuX29zZmhhbmRsZSIsICAgICAgICAgIG1zdmNydF9vcGVuX29zZmhhbmRsZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImdldF9vc2ZoYW5kbGUiLCAgICAgICAgICAgbXN2Y3J0X2dldF9vc2ZoYW5kbGUsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJrYmhpdCIsICAgICAgICAgICAgICAgICAgIG1zdmNydF9rYmhpdCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImdldGNoIiwgICAgICAgICAgICAgICAgICAgbXN2Y3J0X2dldGNoLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZ2V0Y2hlIiwgICAgICAgICAgICAgICAgICBtc3ZjcnRfZ2V0Y2hlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsicHV0Y2giLCAgICAgICAgICAgICAgICAgICBtc3ZjcnRfcHV0Y2gsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ1bmdldGNoIiwgICAgICAgICAgICAgICAgIG1zdmNydF91bmdldGNoLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaGVhcG1pbiIsICAgICAgICAgICAgICAgICBtc3ZjcnRfaGVhcG1pbiwgTUVUSF9WQVJBUkdTLCBoZWFwbWluX2RvY30sCisgICAgeyJsb2NraW5nIiwgICAgICAgICAgICAgbXN2Y3J0X2xvY2tpbmcsIE1FVEhfVkFSQVJHUywgbG9ja2luZ19kb2N9LAorICAgIHsic2V0bW9kZSIsICAgICAgICAgICAgICAgICBtc3ZjcnRfc2V0bW9kZSwgTUVUSF9WQVJBUkdTLCBzZXRtb2RlX2RvY30sCisgICAgeyJvcGVuX29zZmhhbmRsZSIsICAgICAgICAgIG1zdmNydF9vcGVuX29zZmhhbmRsZSwgTUVUSF9WQVJBUkdTLCBvcGVuX29zZmhhbmRsZV9kb2N9LAorICAgIHsiZ2V0X29zZmhhbmRsZSIsICAgICAgICAgICBtc3ZjcnRfZ2V0X29zZmhhbmRsZSwgTUVUSF9WQVJBUkdTLCBnZXRfb3NmaGFuZGxlX2RvY30sCisgICAgeyJrYmhpdCIsICAgICAgICAgICAgICAgICAgIG1zdmNydF9rYmhpdCwgTUVUSF9WQVJBUkdTLCBrYmhpdF9kb2N9LAorICAgIHsiZ2V0Y2giLCAgICAgICAgICAgICAgICAgICBtc3ZjcnRfZ2V0Y2gsIE1FVEhfVkFSQVJHUywgZ2V0Y2hfZG9jfSwKKyAgICB7ImdldGNoZSIsICAgICAgICAgICAgICAgICAgbXN2Y3J0X2dldGNoZSwgTUVUSF9WQVJBUkdTLCBnZXRjaGVfZG9jfSwKKyAgICB7InB1dGNoIiwgICAgICAgICAgICAgICAgICAgbXN2Y3J0X3B1dGNoLCBNRVRIX1ZBUkFSR1MsIHB1dGNoX2RvY30sCisgICAgeyJ1bmdldGNoIiwgICAgICAgICAgICAgICAgIG1zdmNydF91bmdldGNoLCBNRVRIX1ZBUkFSR1MsIHVuZ2V0Y2hfZG9jfSwKICNpZmRlZiBfV0NPTklPX0RFRklORUQKLSAgICB7ImdldHdjaCIsICAgICAgICAgICAgICAgICAgbXN2Y3J0X2dldHdjaCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImdldHdjaGUiLCAgICAgICAgICAgICAgICAgbXN2Y3J0X2dldHdjaGUsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJwdXR3Y2giLCAgICAgICAgICAgICAgICAgIG1zdmNydF9wdXR3Y2gsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ1bmdldHdjaCIsICAgICAgICAgICAgICAgIG1zdmNydF91bmdldHdjaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldHdjaCIsICAgICAgICAgICAgICAgICAgbXN2Y3J0X2dldHdjaCwgTUVUSF9WQVJBUkdTLCBnZXR3Y2hfZG9jfSwKKyAgICB7ImdldHdjaGUiLCAgICAgICAgICAgICAgICAgbXN2Y3J0X2dldHdjaGUsIE1FVEhfVkFSQVJHUywgZ2V0d2NoZV9kb2N9LAorICAgIHsicHV0d2NoIiwgICAgICAgICAgICAgICAgICBtc3ZjcnRfcHV0d2NoLCBNRVRIX1ZBUkFSR1MsIHB1dHdjaF9kb2N9LAorICAgIHsidW5nZXR3Y2giLCAgICAgICAgICAgICAgICBtc3ZjcnRfdW5nZXR3Y2gsIE1FVEhfVkFSQVJHUywgdW5nZXR3Y2hfZG9jfSwKICNlbmRpZgogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICBOVUxMfQogfTsKZGlmZiAtLWdpdCBhL1BDL29zMmVteC9NYWtlZmlsZSBiL1BDL29zMmVteC9NYWtlZmlsZQppbmRleCBmZjA0ZjcyLi5iZjJlNDg2IDEwMDY0NAotLS0gYS9QQy9vczJlbXgvTWFrZWZpbGUKKysrIGIvUEMvb3MyZW14L01ha2VmaWxlCkBAIC0yMzcsNyArMjM3LDcgQEAKIAogIyBPdXRwdXQgZmlsZSBuYW1lcwogUFlUSE9OX1ZFUj0JMi42Ci1QWVRIT05fTElCPQlweXRob24yNgorUFlUSE9OX0xJQj0JcHl0aG9uMjcKIFBZVEhPTi5MSUI9CSQoUFlUSE9OX0xJQilfcyRBCiBQWVRIT04uSU1QTElCPQkkKFBZVEhPTl9MSUIpJEEKIGlmZXEgKCQoRVhFT01GKSx5ZXMpCkBAIC0zNTEsNyArMzUxLDYgQEAKIAkJUHl0aG9uL2dldGFyZ3MuYyBcCiAJCVB5dGhvbi9nZXRjb21waWxlci5jIFwKIAkJUHl0aG9uL2dldGNvcHlyaWdodC5jIFwKLQkJUHl0aG9uL2dldG10aW1lLmMgXAogCQlQeXRob24vZ2V0cGxhdGZvcm0uYyBcCiAJCVB5dGhvbi9nZXR2ZXJzaW9uLmMgXAogCQlQeXRob24vZ3JhbWluaXQuYyBcCkBAIC0zNjMsNiArMzYyLDcgQEAKIAkJUHl0aG9uL215c3RydG91bC5jIFwKIAkJUHl0aG9uL3BlZXBob2xlLmMgXAogCQlQeXRob24vcHlhcmVuYS5jIFwKKwkJUHl0aG9uL3B5Y3R5cGUuYyBcCiAJCVB5dGhvbi9weWZwZS5jIFwKIAkJUHl0aG9uL3B5bWF0aC5jIFwKIAkJUHl0aG9uL3B5c3RhdGUuYyBcCkBAIC0zODQsNiArMzg0LDcgQEAKIAkJT2JqZWN0cy9ieXRlc19tZXRob2RzLmMgXAogCQlPYmplY3RzL2NlbGxvYmplY3QuYyBcCiAJCU9iamVjdHMvY2xhc3NvYmplY3QuYyBcCisJCU9iamVjdHMvY2Fwc3VsZS5jIFwKIAkJT2JqZWN0cy9jb2JqZWN0LmMgXAogCQlPYmplY3RzL2NvZGVvYmplY3QuYyBcCiAJCU9iamVjdHMvY29tcGxleG9iamVjdC5jIFwKZGlmZiAtLWdpdCBhL1BDL29zMmVteC9SRUFETUUub3MyZW14IGIvUEMvb3MyZW14L1JFQURNRS5vczJlbXgKaW5kZXggZTE4Njc5MC4uMDg5NGE1MCAxMDA2NDQKLS0tIGEvUEMvb3MyZW14L1JFQURNRS5vczJlbXgKKysrIGIvUEMvb3MyZW14L1JFQURNRS5vczJlbXgKQEAgLTMwOSw3ICszMDksNyBAQAogICAgdG8gYmUgaW5zdGFsbGVkIGluIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIFBZVEhPTkhPTUUgZGlyZWN0b3J5LCBzZXQgCiAgICB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIEVYRV9ESVIgdG8gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeS4KIAotMy4gSWYgeW91IHdpc2ggdGhlIFB5dGhvbiBjb3JlIERMTCAocHl0aG9uMjYuZGxsKSB0byBiZSBpbnN0YWxsZWQgaW4gYSAKKzMuIElmIHlvdSB3aXNoIHRoZSBQeXRob24gY29yZSBETEwgKHB5dGhvbjI3LmRsbCkgdG8gYmUgaW5zdGFsbGVkIGluIGEgCiAgICBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBQeXRob24gZXhlY3V0YWJsZXMgYXJlIAogICAgaW5zdGFsbGVkIChieSBkZWZhdWx0LCB0aGUgUFlUSE9OSE9NRSBkaXJlY3RvcnkpLCBzZXQgdGhlIHZhbHVlIG9mIHRoZSAKICAgIE1ha2VmaWxlIHZhcmlhYmxlIERMTF9ESVIgdG8gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeS4gIFRoaXMgRExMIG11c3QgCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvcHl0aG9uMjYuZGVmIGIvUEMvb3MyZW14L3B5dGhvbjI3LmRlZgpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBQQy9vczJlbXgvcHl0aG9uMjYuZGVmCnJlbmFtZSB0byBQQy9vczJlbXgvcHl0aG9uMjcuZGVmCmluZGV4IDI3OTUwNTAuLjU0NzdjZDIgMTAwNjQ0Ci0tLSBhL1BDL29zMmVteC9weXRob24yNi5kZWYKKysrIGIvUEMvb3MyZW14L3B5dGhvbjI3LmRlZgpAQCAtMSw1NCArMSw1NCBAQAotTElCUkFSWSBweXRob24yNiBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIAorTElCUkFSWSBweXRob24yNyBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIAogREVTQ1JJUFRJT04gIlB5dGhvbiAyLjYgQ29yZSBETEwiIAogUFJPVE1PREUgCiBEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCAKIEVYUE9SVFMgCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihjb25maWcpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoY29uZmlnKQogICAiX1B5SW1wb3J0X0luaXR0YWIiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihkbGZjbikKKzsgRnJvbSBweXRob24yN19zLmxpYihkbGZjbikKIDsgICJkbG9wZW4iCiA7ICAiZGxzeW0iCiA7ICAiZGxjbG9zZSIKIDsgICJkbGVycm9yIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZ2V0cGF0aHApCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ2V0cGF0aHApCiAgICJQeV9HZXRQcm9ncmFtRnVsbFBhdGgiCiAgICJQeV9HZXRQcmVmaXgiCiAgICJQeV9HZXRFeGVjUHJlZml4IgogICAiUHlfR2V0UGF0aCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGdldGJ1aWxkaW5mbykKKzsgRnJvbSBweXRob24yN19zLmxpYihnZXRidWlsZGluZm8pCiAgICJQeV9HZXRCdWlsZEluZm8iCiAgICJfUHlfc3ZudmVyc2lvbiIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG1haW4pCis7IEZyb20gcHl0aG9uMjdfcy5saWIobWFpbikKICAgIlB5X01haW4iCiAgICJQeV9HZXRBcmdjQXJndiIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGFjY2VsZXIpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoYWNjZWxlcikKICAgIlB5R3JhbW1hcl9BZGRBY2NlbGVyYXRvcnMiCiAgICJQeUdyYW1tYXJfUmVtb3ZlQWNjZWxlcmF0b3JzIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZ3JhbW1hcjEpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ3JhbW1hcjEpCiAgICJQeUdyYW1tYXJfRmluZERGQSIKICAgIlB5R3JhbW1hcl9MYWJlbFJlcHIiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihsaXN0bm9kZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihsaXN0bm9kZSkKICAgIlB5Tm9kZV9MaXN0VHJlZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG5vZGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIobm9kZSkKICAgIlB5Tm9kZV9OZXciCiAgICJQeU5vZGVfQWRkQ2hpbGQiCiAgICJQeU5vZGVfRnJlZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHBhcnNlcikKKzsgRnJvbSBweXRob24yN19zLmxpYihwYXJzZXIpCiAgICJQeVBhcnNlcl9BZGRUb2tlbiIKICAgIlB5UGFyc2VyX05ldyIKICAgIlB5UGFyc2VyX0RlbGV0ZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHBhcnNldG9rKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHBhcnNldG9rKQogICAiUHlfVGFiY2hlY2tGbGFnIgogICAiUHlQYXJzZXJfUGFyc2VTdHJpbmciCiAgICJQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWUiCkBAIC01NiwxOCArNTYsMTggQEAKICAgIlB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzIgogICAiUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFncyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGJpdHNldCkKKzsgRnJvbSBweXRob24yN19zLmxpYihiaXRzZXQpCiAgICJfUHlfbmV3Yml0c2V0IgogICAiX1B5X2RlbGJpdHNldCIKICAgIl9QeV9hZGRiaXQiCiAgICJfUHlfc2FtZWJpdHNldCIKICAgIl9QeV9tZXJnZWJpdHNldCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG1ldGFncmFtbWFyKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG1ldGFncmFtbWFyKQogICAiX1B5X21ldGFfZ3JhbW1hciIKICAgIlB5X21ldGFfZ3JhbW1hciIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHRva2VuaXplcikKKzsgRnJvbSBweXRob24yN19zLmxpYih0b2tlbml6ZXIpCiAgICJQeVRva2VuX09uZUNoYXIiCiAgICJQeVRva2VuX1R3b0NoYXJzIgogICAiUHlUb2tlbl9UaHJlZUNoYXJzIgpAQCAtNzcsMTQgKzc3LDE0IEBACiAgICJQeVRva2VuaXplcl9HZXQiCiAgICJfUHlQYXJzZXJfVG9rZW5OYW1lcyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG15cmVhZGxpbmUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIobXlyZWFkbGluZSkKICAgIl9QeU9TX1JlYWRsaW5lVFN0YXRlIgogICAiUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciIKICAgIlB5T1NfU3RkaW9SZWFkbGluZSIKICAgIlB5T1NfUmVhZGxpbmUiCiAgICJQeU9TX0lucHV0SG9vayIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGFic3RyYWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGFic3RyYWN0KQogICAiX1B5T2JqZWN0X0xlbmd0aEhpbnQiCiAgICJQeU1hcHBpbmdfU2l6ZSIKICAgIlB5T2JqZWN0X0NhbGxNZXRob2QiCkBAIC0xNzUsMTMgKzE3NSwxMyBAQAogICAiUHlPYmplY3RfSXNJbnN0YW5jZSIKICAgIlB5T2JqZWN0X0lzU3ViY2xhc3MiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihib29sb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGJvb2xvYmplY3QpCiAgICJQeUJvb2xfRnJvbUxvbmciCiAgICJQeUJvb2xfVHlwZSIKICAgIl9QeV9aZXJvU3RydWN0IgogICAiX1B5X1RydWVTdHJ1Y3QiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihidWZmZXJvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoYnVmZmVyb2JqZWN0KQogICAiUHlCdWZmZXJfRnJvbU9iamVjdCIKICAgIlB5QnVmZmVyX0Zyb21SZWFkV3JpdGVPYmplY3QiCiAgICJQeUJ1ZmZlcl9Gcm9tTWVtb3J5IgpAQCAtMTg5LDEzICsxODksMTMgQEAKICAgIlB5QnVmZmVyX05ldyIKICAgIlB5QnVmZmVyX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihjZWxsb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNlbGxvYmplY3QpCiAgICJQeUNlbGxfTmV3IgogICAiUHlDZWxsX0dldCIKICAgIlB5Q2VsbF9TZXQiCiAgICJQeUNlbGxfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGNsYXNzb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNsYXNzb2JqZWN0KQogICAiUHlDbGFzc19OZXciCiAgICJQeUNsYXNzX0lzU3ViY2xhc3MiCiAgICJQeUluc3RhbmNlX05ldyIKQEAgLTIxMCw3ICsyMTAsMjAgQEAKICAgIlB5SW5zdGFuY2VfVHlwZSIKICAgIlB5TWV0aG9kX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihjb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNhcHN1bGUpCisgICJQeUNhcHN1bGVfR2V0Q29udGV4dCIKKyAgIlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yIgorICAiUHlDYXBzdWxlX0dldE5hbWUiCisgICJQeUNhcHN1bGVfR2V0UG9pbnRlciIKKyAgIlB5Q2Fwc3VsZV9JbXBvcnQiCisgICJQeUNhcHN1bGVfSXNWYWxpZCIKKyAgIlB5Q2Fwc3VsZV9OZXciCisgICJQeUNhcHN1bGVfU2V0Q29udGV4dCIKKyAgIlB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yIgorICAiUHlDYXBzdWxlX1NldE5hbWUiCisgICJQeUNhcHN1bGVfU2V0UG9pbnRlciIKKworOyBGcm9tIHB5dGhvbjI3X3MubGliKGNvYmplY3QpCiAgICJQeUNPYmplY3RfRnJvbVZvaWRQdHIiCiAgICJQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjIgogICAiUHlDT2JqZWN0X0FzVm9pZFB0ciIKQEAgLTIxOSwxMyArMjMyLDEzIEBACiAgICJQeUNPYmplY3RfU2V0Vm9pZFB0ciIKICAgIlB5Q09iamVjdF9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoY29kZW9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihjb2Rlb2JqZWN0KQogICAiUHlDb2RlX05ldyIKICAgIlB5Q29kZV9BZGRyMkxpbmUiCiAgICJQeUNvZGVfQ2hlY2tMaW5lTnVtYmVyIgogICAiUHlDb2RlX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihjb21wbGV4b2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNvbXBsZXhvYmplY3QpCiAgICJfUHlfY19wb3ciCiAgICJfUHlfY19zdW0iCiAgICJfUHlfY19kaWZmIgpAQCAtMjM5LDcgKzI1Miw3IEBACiAgICJQeUNvbXBsZXhfQXNDQ29tcGxleCIKICAgIlB5Q29tcGxleF9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZGVzY3JvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZGVzY3JvYmplY3QpCiAgICJQeVdyYXBwZXJfTmV3IgogICAiUHlEZXNjcl9OZXdNZXRob2QiCiAgICJQeURlc2NyX05ld0NsYXNzTWV0aG9kIgpAQCAtMjUwLDcgKzI2Myw3IEBACiAgICJQeVdyYXBwZXJEZXNjcl9UeXBlIgogICAiUHlQcm9wZXJ0eV9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZGljdG9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihkaWN0b2JqZWN0KQogICAiUHlEaWN0X05ldyIKICAgIlB5RGljdF9HZXRJdGVtIgogICAiUHlEaWN0X1NldEl0ZW0iCkBAIC0yNzQsMTEgKzI4NywxMSBAQAogICAiUHlEaWN0SXRlclZhbHVlX1R5cGUiCiAgICJQeURpY3RJdGVySXRlbV9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZW51bW9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihlbnVtb2JqZWN0KQogICAiUHlFbnVtX1R5cGUiCiAgICJQeVJldmVyc2VkX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihmaWxlb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGZpbGVvYmplY3QpCiAgICJQeUZpbGVfRnJvbVN0cmluZyIKICAgIlB5X1VuaXZlcnNhbE5ld2xpbmVGcmVhZCIKICAgIlB5RmlsZV9HZXRMaW5lIgpAQCAtMjk0LDcgKzMwNyw3IEBACiAgICJQeUZpbGVfTmFtZSIKICAgIlB5RmlsZV9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZmxvYXRvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZmxvYXRvYmplY3QpCiAgICJQeUZsb2F0X0Zyb21TdHJpbmciCiAgICJQeUZsb2F0X0FzRG91YmxlIgogICAiUHlGbG9hdF9GaW5pIgpAQCAtMzA2LDEwICszMTksOSBAQAogICAiUHlGbG9hdF9Bc1JlcHJTdHJpbmciCiAgICJQeUZsb2F0X0FzU3RyaW5nIgogICAiX1B5RmxvYXRfSW5pdCIKLSAgIlB5RmxvYXRfQXNTdHJpbmdFeCIKICAgIlB5RmxvYXRfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGZyYW1lb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGZyYW1lb2JqZWN0KQogICAiUHlGcmFtZV9OZXciCiAgICJQeUZyYW1lX0Zhc3RUb0xvY2FscyIKICAgIlB5RnJhbWVfTG9jYWxzVG9GYXN0IgpAQCAtMzE5LDcgKzMzMSw3IEBACiAgICJQeUZyYW1lX0Jsb2NrUG9wIgogICAiUHlGcmFtZV9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZnVuY29iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihmdW5jb2JqZWN0KQogICAiUHlGdW5jdGlvbl9OZXciCiAgICJQeUZ1bmN0aW9uX0dldENvZGUiCiAgICJQeUZ1bmN0aW9uX0dldEdsb2JhbHMiCkBAIC0zMzQsMTIgKzM0NiwxMiBAQAogICAiUHlDbGFzc01ldGhvZF9UeXBlIgogICAiUHlTdGF0aWNNZXRob2RfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGdlbm9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihnZW5vYmplY3QpCiAgICJQeUdlbl9OZXciCiAgICJQeUdlbl9OZWVkc0ZpbmFsaXppbmciCiAgICJQeUdlbl9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoaW50b2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGludG9iamVjdCkKICAgIlB5SW50X0FzTG9uZyIKICAgIlB5SW50X0FzVW5zaWduZWRMb25nTWFzayIKICAgIlB5SW50X0FzVW5zaWduZWRMb25nTG9uZ01hc2siCkBAIC0zNTQsMTMgKzM2NiwxMyBAQAogICAiX1B5SW50X0luaXQiCiAgICJQeUludF9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoaXRlcm9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihpdGVyb2JqZWN0KQogICAiUHlTZXFJdGVyX05ldyIKICAgIlB5Q2FsbEl0ZXJfTmV3IgogICAiUHlTZXFJdGVyX1R5cGUiCiAgICJQeUNhbGxJdGVyX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihsaXN0b2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGxpc3RvYmplY3QpCiAgICJQeUxpc3RfTmV3IgogICAiUHlMaXN0X0FwcGVuZCIKICAgIlB5TGlzdF9TaXplIgpAQCAtMzc4LDcgKzM5MCw3IEBACiAgICJQeUxpc3RJdGVyX1R5cGUiCiAgICJQeUxpc3RSZXZJdGVyX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihsb25nb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGxvbmdvYmplY3QpCiAgICJQeUxvbmdfRnJvbURvdWJsZSIKICAgIlB5TG9uZ19Bc0xvbmciCiAgICJfUHlMb25nX0FzU3NpemVfdCIKQEAgLTQwOCw3ICs0MjAsNyBAQAogICAiUHlMb25nX1R5cGUiCiAgICJfUHlMb25nX0RpZ2l0VmFsdWUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihtZXRob2RvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIobWV0aG9kb2JqZWN0KQogICAiUHlDRnVuY3Rpb25fQ2FsbCIKICAgIlB5X0ZpbmRNZXRob2RJbkNoYWluIgogICAiUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24iCkBAIC00MjAsNyArNDMyLDcgQEAKICAgIlB5Q0Z1bmN0aW9uX05ldyIKICAgIlB5Q0Z1bmN0aW9uX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihtb2R1bGVvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIobW9kdWxlb2JqZWN0KQogICAiUHlNb2R1bGVfTmV3IgogICAiX1B5TW9kdWxlX0NsZWFyIgogICAiUHlNb2R1bGVfR2V0RGljdCIKQEAgLTQyOCw3ICs0NDAsNyBAQAogICAiUHlNb2R1bGVfR2V0RmlsZW5hbWUiCiAgICJQeU1vZHVsZV9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIob2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG9iamVjdCkKICAgIlB5X0RpdmlzaW9uV2FybmluZ0ZsYWciCiAgICJQeU9iamVjdF9TdHIiCiAgICJQeU9iamVjdF9SZXByIgpAQCAtNDgxLDE1ICs0OTMsMTUgQEAKICAgIl9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIgogICAiX1B5VHJhc2hfZGVsZXRlX2xhdGVyIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIob2JtYWxsb2MpCis7IEZyb20gcHl0aG9uMjdfcy5saWIob2JtYWxsb2MpCiAgICJQeU9iamVjdF9NYWxsb2MiCiAgICJQeU9iamVjdF9GcmVlIgogICAiUHlPYmplY3RfUmVhbGxvYyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHJhbmdlb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHJhbmdlb2JqZWN0KQogICAiUHlSYW5nZV9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoc2V0b2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHNldG9iamVjdCkKICAgIlB5U2V0X1BvcCIKICAgIlB5U2V0X05ldyIKICAgIlB5RnJvemVuU2V0X05ldyIKQEAgLTUwNCw3ICs1MTYsNyBAQAogICAiUHlTZXRfVHlwZSIKICAgIlB5RnJvemVuU2V0X1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihzbGljZW9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihzbGljZW9iamVjdCkKICAgIl9QeVNsaWNlX0Zyb21JbmRpY2VzIgogICAiUHlTbGljZV9HZXRJbmRpY2VzIgogICAiUHlTbGljZV9HZXRJbmRpY2VzRXgiCkBAIC01MTIsNyArNTI0LDcgQEAKICAgIl9QeV9FbGxpcHNpc09iamVjdCIKICAgIlB5U2xpY2VfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHN0cmluZ29iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihzdHJpbmdvYmplY3QpCiAgICJQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSIKICAgIlB5U3RyaW5nX0ludGVybkluUGxhY2UiCiAgICJQeVN0cmluZ19Gcm9tU3RyaW5nIgpAQCAtNTQzLDEyICs1NTUsMTIgQEAKICAgIlB5U3RyaW5nX1R5cGUiCiAgICJQeUJhc2VTdHJpbmdfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHN0cnVjdHNlcSkKKzsgRnJvbSBweXRob24yN19zLmxpYihzdHJ1Y3RzZXEpCiAgICJQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlIgogICAiUHlTdHJ1Y3RTZXF1ZW5jZV9OZXciCiAgICJQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHR1cGxlb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHR1cGxlb2JqZWN0KQogICAiUHlUdXBsZV9OZXciCiAgICJQeVR1cGxlX1BhY2siCiAgICJfUHlUdXBsZV9SZXNpemUiCkBAIC01NjAsNyArNTcyLDcgQEAKICAgIlB5VHVwbGVfVHlwZSIKICAgIlB5VHVwbGVJdGVyX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih0eXBlb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHR5cGVvYmplY3QpCiAgICJQeVR5cGVfSXNTdWJ0eXBlIgogICAiX1B5VHlwZV9Mb29rdXAiCiAgICJQeVR5cGVfUmVhZHkiCkBAIC01NzEsNyArNTgzLDcgQEAKICAgIlB5QmFzZU9iamVjdF9UeXBlIgogICAiUHlTdXBlcl9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIodW5pY29kZW9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYih1bmljb2Rlb2JqZWN0KQogICAiUHlVbmljb2RlVUNTMl9SZXNpemUiCiAgICJQeVVuaWNvZGVVQ1MyX0Zyb21PcmRpbmFsIgogICAiUHlVbmljb2RlVUNTMl9Gcm9tT2JqZWN0IgpAQCAtNjM3LDcgKzY0OSw3IEBACiAgICJQeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0IgogICAiUHlVbmljb2RlX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih1bmljb2RlY3R5cGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIodW5pY29kZWN0eXBlKQogICAiX1B5VW5pY29kZV9UeXBlUmVjb3JkcyIKICAgIl9QeVVuaWNvZGVVQ1MyX1RvTnVtZXJpYyIKICAgIl9QeVVuaWNvZGVVQ1MyX0lzTG93ZXJjYXNlIgpAQCAtNjU1LDcgKzY2Nyw3IEBACiAgICJfUHlVbmljb2RlVUNTMl9Jc051bWVyaWMiCiAgICJfUHlVbmljb2RlVUNTMl9Jc0FscGhhIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIod2Vha3JlZm9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYih3ZWFrcmVmb2JqZWN0KQogICAiUHlXZWFrcmVmX05ld1JlZiIKICAgIlB5V2Vha3JlZl9OZXdQcm94eSIKICAgIlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMiCkBAIC02NjYsNyArNjc4LDcgQEAKICAgIl9QeVdlYWtyZWZfUHJveHlUeXBlIgogICAiX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKFB5dGhvbi1hc3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoUHl0aG9uLWFzdCkKIDsgICJpbml0X2FzdCIKICAgIk1vZHVsZSIKICAgIkludGVyYWN0aXZlIgpAQCAtNzI1LDE4ICs3MzcsMTggQEAKICAgImFsaWFzIgogICAiUHlBU1RfbW9kMm9iaiIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGFzZGwpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoYXNkbCkKICAgImFzZGxfc2VxX25ldyIKICAgImFzZGxfaW50X3NlcV9uZXciCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihhc3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoYXN0KQogICAiUHlBU1RfRnJvbU5vZGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihibHRpbm1vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihibHRpbm1vZHVsZSkKICAgIl9QeUJ1aWx0aW5fSW5pdCIKICAgIlB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmciCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihleGNlcHRpb25zKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGV4Y2VwdGlvbnMpCiAgICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydCIKICAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0IgogICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kIgpAQCAtODEyLDcgKzgyNCw3IEBACiAgICJQeUV4Y19JbXBvcnRXYXJuaW5nIgogICAiUHlFeGNfTWVtb3J5RXJyb3JJbnN0IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoY2V2YWwpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoY2V2YWwpCiAgICJQeUV2YWxfRXZhbEZyYW1lRXgiCiAgICJQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcyIKICAgIlB5RXZhbF9FdmFsQ29kZUV4IgpAQCAtODUxLDEzICs4NjMsMTMgQEAKICAgIl9QeV9DaGVja0ludGVydmFsIgogICAiX1B5X1RpY2tlciIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGNvbXBpbGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoY29tcGlsZSkKICAgIl9QeV9NYW5nbGUiCiAgICJQeUFTVF9Db21waWxlIgogICAiUHlOb2RlX0NvbXBpbGUiCiAgICJQeV9PcHRpbWl6ZUZsYWciCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihjb2RlY3MpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoY29kZWNzKQogICAiX1B5Q29kZWNfTG9va3VwIgogICAiUHlDb2RlY19FbmNvZGUiCiAgICJQeUNvZGVjX0RlY29kZSIKQEAgLTg3Niw3ICs4ODgsNyBAQAogICAiUHlDb2RlY19Mb29rdXBFcnJvciIKICAgIlB5Q29kZWNfU3RyaWN0RXJyb3JzIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZXJyb3JzKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGVycm9ycykKICAgIlB5RXJyX1NldE5vbmUiCiAgICJQeUVycl9TZXRTdHJpbmciCiAgICJQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMiCkBAIC05MDIsMTYgKzkxNCwxNiBAQAogICAiUHlFcnJfV2FybiIKICAgIlB5RXJyX1dhcm5FeHBsaWNpdCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGZyb3plbikKKzsgRnJvbSBweXRob24yN19zLmxpYihmcm96ZW4pCiAgICJQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZnJvemVubWFpbikKKzsgRnJvbSBweXRob24yN19zLmxpYihmcm96ZW5tYWluKQogICAiUHlfRnJvemVuTWFpbiIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGZ1dHVyZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihmdXR1cmUpCiAgICJQeUZ1dHVyZV9Gcm9tQVNUIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZ2V0YXJncykKKzsgRnJvbSBweXRob24yN19zLmxpYihnZXRhcmdzKQogICAiUHlBcmdfUGFyc2UiCiAgICJfUHlBcmdfUGFyc2VfU2l6ZVQiCiAgICJQeUFyZ19QYXJzZVR1cGxlIgpAQCAtOTI1LDI1ICs5MzcsMjIgQEAKICAgIl9QeUFyZ19WYVBhcnNlX1NpemVUIgogICAiX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZ2V0Y29tcGlsZXIpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ2V0Y29tcGlsZXIpCiAgICJQeV9HZXRDb21waWxlciIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGdldGNvcHlyaWdodCkKKzsgRnJvbSBweXRob24yN19zLmxpYihnZXRjb3B5cmlnaHQpCiAgICJQeV9HZXRDb3B5cmlnaHQiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihnZXRtdGltZSkKLSAgIlB5T1NfR2V0TGFzdE1vZGlmaWNhdGlvblRpbWUiCi0KLTsgRnJvbSBweXRob24yNl9zLmxpYihnZXRwbGF0Zm9ybSkKKzsgRnJvbSBweXRob24yN19zLmxpYihnZXRwbGF0Zm9ybSkKICAgIlB5X0dldFBsYXRmb3JtIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZ2V0dmVyc2lvbikKKzsgRnJvbSBweXRob24yN19zLmxpYihnZXR2ZXJzaW9uKQogICAiUHlfR2V0VmVyc2lvbiIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGdyYW1pbml0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGdyYW1pbml0KQogICAiX1B5UGFyc2VyX0dyYW1tYXIiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihpbXBvcnQpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoaW1wb3J0KQogICAiX1B5SW1wb3J0X0luaXQiCiAgICJfUHlJbXBvcnRIb29rc19Jbml0IgogICAiUHlJbXBvcnRfSW1wb3J0TW9kdWxlIgpAQCAtOTcwLDEwICs5NzksMTAgQEAKICAgIlB5SW1wb3J0X0luaXR0YWIiCiAgICJfUHlJbXBvcnRfRmlsZXRhYiIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGltcG9ydGRsKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGltcG9ydGRsKQogICAiX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobWFyc2hhbCkKKzsgRnJvbSBweXRob24yN19zLmxpYihtYXJzaGFsKQogICAiUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUiCiAgICJQeU1hcnNoYWxfV3JpdGVPYmplY3RUb1N0cmluZyIKICAgIlB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGUiCkBAIC05ODQsNyArOTkzLDcgQEAKICAgIlB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyIKICAgIlB5TWFyc2hhbF9Jbml0IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobW9kc3VwcG9ydCkKKzsgRnJvbSBweXRob24yN19zLmxpYihtb2RzdXBwb3J0KQogICAiUHlfSW5pdE1vZHVsZTQiCiAgICJQeV9CdWlsZFZhbHVlIgogICAiX1B5X0J1aWxkVmFsdWVfU2l6ZVQiCkBAIC05OTcsMjQgKzEwMDYsMjQgQEAKICAgIlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50IgogICAiX1B5X1BhY2thZ2VDb250ZXh0IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobXlzbnByaW50ZikKKzsgRnJvbSBweXRob24yN19zLmxpYihteXNucHJpbnRmKQogICAiUHlPU19zbnByaW50ZiIKICAgIlB5T1NfdnNucHJpbnRmIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobXlzdHJ0b3VsKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG15c3RydG91bCkKICAgIlB5T1Nfc3RydG91bCIKICAgIlB5T1Nfc3RydG9sIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIocHlhcmVuYSkKKzsgRnJvbSBweXRob24yN19zLmxpYihweWFyZW5hKQogICAiUHlBcmVuYV9OZXciCiAgICJQeUFyZW5hX0ZyZWUiCiAgICJQeUFyZW5hX01hbGxvYyIKICAgIlB5QXJlbmFfQWRkUHlPYmplY3QiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihweWZwZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihweWZwZSkKICAgIlB5RlBFX2R1bW15IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIocHlzdGF0ZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihweXN0YXRlKQogICAiUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyIgogICAiUHlUaHJlYWRTdGF0ZV9DbGVhciIKICAgIl9QeVRocmVhZF9DdXJyZW50RnJhbWVzIgpAQCAtMTAzOSwxMiArMTA0OCwxMiBAQAogICAiX1B5VGhyZWFkU3RhdGVfQ3VycmVudCIKICAgIl9QeVRocmVhZFN0YXRlX0dldEZyYW1lIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIocHlzdHJ0b2QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIocHlzdHJ0b2QpCiAgICJQeU9TX2FzY2lpX3N0cnRvZCIKICAgIlB5T1NfYXNjaWlfZm9ybWF0ZCIKICAgIlB5T1NfYXNjaWlfYXRvZiIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHB5dGhvbnJ1bikKKzsgRnJvbSBweXRob24yN19zLmxpYihweXRob25ydW4pCiAgICJQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWciCiAgICJQeV9EZWJ1Z0ZsYWciCiAgICJQeV9WZXJib3NlRmxhZyIKQEAgLTExMDYsMjAgKzExMTUsMjAgQEAKICAgIlB5X1VuaWNvZGVGbGFnIgogICAiX1B5X1FuZXdGbGFnIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoc3RydWN0bWVtYmVyKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHN0cnVjdG1lbWJlcikKICAgIlB5TWVtYmVyX0dldCIKICAgIlB5TWVtYmVyX0dldE9uZSIKICAgIlB5TWVtYmVyX1NldE9uZSIKICAgIlB5TWVtYmVyX1NldCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHN5bXRhYmxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHN5bXRhYmxlKQogICAiUHlTeW10YWJsZV9CdWlsZCIKICAgIlB5U3ltdGFibGVfRnJlZSIKICAgIlB5U1RfR2V0U2NvcGUiCiAgICJQeVN5bXRhYmxlX0xvb2t1cCIKICAgIlB5U1RFbnRyeV9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoc3lzbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHN5c21vZHVsZSkKICAgIl9QeVN5c19Jbml0IgogICAiUHlTeXNfV3JpdGVTdGRlcnIiCiAgICJQeVN5c19TZXRQYXRoIgpAQCAtMTEzMywyMiArMTE0MiwyMiBAQAogICAiUHlTeXNfUmVzZXRXYXJuT3B0aW9ucyIKICAgIlB5U3lzX0FkZFdhcm5PcHRpb24iCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih0cmFjZWJhY2spCis7IEZyb20gcHl0aG9uMjdfcy5saWIodHJhY2ViYWNrKQogICAiUHlUcmFjZUJhY2tfSGVyZSIKICAgIlB5VHJhY2VCYWNrX1ByaW50IgogICAiUHlUcmFjZUJhY2tfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGdldG9wdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihnZXRvcHQpCiAgICJfUHlPU19HZXRPcHQiCiAgICJfUHlPU19vcHRlcnIiCiAgICJfUHlPU19vcHRpbmQiCiAgICJfUHlPU19vcHRhcmciCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihkeW5sb2FkX3NobGliKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGR5bmxvYWRfc2hsaWIpCiAgICJfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWIiCiAgICJfUHlJbXBvcnRfR2V0RHluTG9hZEZ1bmMiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih0aHJlYWQpCis7IEZyb20gcHl0aG9uMjdfcy5saWIodGhyZWFkKQogICAiUHlUaHJlYWRfZGVsZXRlX2tleV92YWx1ZSIKICAgIlB5VGhyZWFkX2luaXRfdGhyZWFkIgogICAiUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCIKQEAgLTExNjQsOSArMTE3Myw4IEBACiAgICJQeVRocmVhZF9kZWxldGVfa2V5IgogICAiUHlUaHJlYWRfc2V0X2tleV92YWx1ZSIKICAgIlB5VGhyZWFkX2dldF9rZXlfdmFsdWUiCi0gICJQeVRocmVhZF9fZXhpdF90aHJlYWQiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihnY21vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihnY21vZHVsZSkKIDsgICJpbml0Z2MiCiAgICJfUHlPYmplY3RfR0NfTmV3IgogICAiX1B5T2JqZWN0X0dDX05ld1ZhciIKQEAgLTExODIsNyArMTE5MCw3IEBACiAgICJfUHlPYmplY3RfR0NfRGVsIgogICAiX1B5R0NfZ2VuZXJhdGlvbjAiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihzaWduYWxtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoc2lnbmFsbW9kdWxlKQogOyAgImluaXRzaWduYWwiCiAgICJQeUVycl9DaGVja1NpZ25hbHMiCiAgICJQeUVycl9TZXRJbnRlcnJ1cHQiCkBAIC0xMTkxLDEyNCArMTE5OSwxMjQgQEAKICAgIlB5T1NfSW5pdEludGVycnVwdHMiCiAgICJQeU9TX0FmdGVyRm9yayIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHBvc2l4bW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHBvc2l4bW9kdWxlKQogOyAgImluaXRvczIiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih0aHJlYWRtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIodGhyZWFkbW9kdWxlKQogOyAgImluaXR0aHJlYWQiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihhcnJheW1vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihhcnJheW1vZHVsZSkKIDsgICJpbml0YXJyYXkiCiA7ICAiYXJyYXlfbWV0aG9kcyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGJpbmFzY2lpKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGJpbmFzY2lpKQogOyAgImluaXRiaW5hc2NpaSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGNtYXRobW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNtYXRobW9kdWxlKQogOyAgImluaXRjbWF0aCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKF9jb2RlY3Ntb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoX2NvZGVjc21vZHVsZSkKIDsgICJpbml0X2NvZGVjcyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGNvbGxlY3Rpb25zbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNvbGxlY3Rpb25zbW9kdWxlKQogOyAgImluaXRjb2xsZWN0aW9ucyIKICAgImRlcXVlaXRlcl90eXBlIgogICAiZGVxdWVyZXZpdGVyX3R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihjUGlja2xlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNQaWNrbGUpCiA7ICAiaW5pdGNQaWNrbGUiCiA7ICAiZmFzdF9zYXZlX2xlYXZlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoY1N0cmluZ0lPKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNTdHJpbmdJTykKIDsgICJpbml0Y1N0cmluZ0lPIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoX2NzdikKKzsgRnJvbSBweXRob24yN19zLmxpYihfY3N2KQogOyAgImluaXRfY3N2IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZGF0ZXRpbWVtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZGF0ZXRpbWVtb2R1bGUpCiA7ICAiaW5pdGRhdGV0aW1lIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZGxtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZGxtb2R1bGUpCiA7ICAiaW5pdGRsIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZXJybm9tb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZXJybm9tb2R1bGUpCiA7ICAiaW5pdGVycm5vIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZmNudGxtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZmNudGxtb2R1bGUpCiA7ICAiaW5pdGZjbnRsIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoX2Z1bmN0b29sc21vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihfZnVuY3Rvb2xzbW9kdWxlKQogOyAgImluaXRfZnVuY3Rvb2xzIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoX2hlYXBxbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKF9oZWFwcW1vZHVsZSkKIDsgICJpbml0X2hlYXBxIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoaW1hZ2VvcCkKKzsgRnJvbSBweXRob24yN19zLmxpYihpbWFnZW9wKQogOyAgImluaXRpbWFnZW9wIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoaXRlcnRvb2xzbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGl0ZXJ0b29sc21vZHVsZSkKIDsgICJpbml0aXRlcnRvb2xzIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoX2xvY2FsZW1vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihfbG9jYWxlbW9kdWxlKQogOyAgImluaXRfbG9jYWxlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobWF0aG1vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihtYXRobW9kdWxlKQogOyAgImluaXRtYXRoIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobWQ1KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG1kNSkKICAgIm1kNV9maW5pc2giCiAgICJtZDVfaW5pdCIKICAgIm1kNV9hcHBlbmQiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihtZDVtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIobWQ1bW9kdWxlKQogOyAgImluaXRfbWQ1IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIob3BlcmF0b3IpCis7IEZyb20gcHl0aG9uMjdfcy5saWIob3BlcmF0b3IpCiA7ICAiaW5pdG9wZXJhdG9yIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoX3JhbmRvbW1vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihfcmFuZG9tbW9kdWxlKQogOyAgImluaXRfcmFuZG9tIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIocmdiaW1nbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHJnYmltZ21vZHVsZSkKIDsgICJpbml0cmdiaW1nIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoc2hhbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHNoYW1vZHVsZSkKIDsgICJpbml0X3NoYSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHNoYTI1Nm1vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihzaGEyNTZtb2R1bGUpCiA7ICAiaW5pdF9zaGEyNTYiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihzaGE1MTJtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoc2hhNTEybW9kdWxlKQogOyAgImluaXRfc2hhNTEyIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoX3NyZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihfc3JlKQogOyAgImluaXRfc3JlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoc3Ryb3Btb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoc3Ryb3Btb2R1bGUpCiA7ICAiaW5pdHN0cm9wIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoX3N0cnVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihfc3RydWN0KQogOyAgImluaXRfc3RydWN0IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoc3ltdGFibGVtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoc3ltdGFibGVtb2R1bGUpCiA7ICAiaW5pdF9zeW10YWJsZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHRlcm1pb3MpCis7IEZyb20gcHl0aG9uMjdfcy5saWIodGVybWlvcykKIDsgICJpbml0dGVybWlvcyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHRpbWVtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIodGltZW1vZHVsZSkKIDsgICJpbml0dGltZSIKICAgIl9QeVRpbWVfRG91YmxlVG9UaW1ldCIKIDsgICJpbml0dGltZXpvbmUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih0aW1pbmdtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIodGltaW5nbW9kdWxlKQogOyAgImluaXR0aW1pbmciCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihfd2Vha3JlZikKKzsgRnJvbSBweXRob24yN19zLmxpYihfd2Vha3JlZikKIDsgICJpbml0X3dlYWtyZWYiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih4eHN1YnR5cGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoeHhzdWJ0eXBlKQogOyAgImluaXR4eHN1YnR5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih6aXBpbXBvcnQpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoemlwaW1wb3J0KQogOyAgImluaXR6aXBpbXBvcnQiCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9tYWtlZmlsZSBiL1BDL29zMnZhY3BwL21ha2VmaWxlCmluZGV4IGYzNDA0N2YuLjE2MDg5NjAgMTAwNjQ0Ci0tLSBhL1BDL29zMnZhY3BwL21ha2VmaWxlCisrKyBiL1BDL29zMnZhY3BwL21ha2VmaWxlCkBAIC0yMDMsOCArMjAzLDcgQEAKICAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3Ryb3BNb2R1bGUub2JqICAgXAogICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJ1Y3RNb2R1bGUub2JqICBcCiAgICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRpbWVNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVGhyZWFkTW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxZVVZDb252ZXJ0Lm9iagorICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaHJlYWRNb2R1bGUub2JqCiAKICMgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCiBQR0VOICAgICAgICAgICAgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTExMTMsOCArMTExMiw3IEBACiAJICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAogCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKIAkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oIFwKLQkgJChQWV9NT0RVTEVTKVx5dXYuaAorCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCiAKIHN5c2xvZ21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAogCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXApAQCAtMTE5OCw4ICsxMTk2LDYgQEAKIAkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAogCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCiAKLXl1dmNvbnZlcnQub2JqOiAkKFBZX01PRFVMRVMpXHl1di5oCi0KIHpsaWJtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCiAJICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAogCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXApAQCAtMTY5Nyw4ICsxNjkzLDYgQEAKIAkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAogCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKIAotZ2V0bXRpbWUub2JqOiBweWNvbmZpZy5oCi0KIGdldHBsYXRmb3JtLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCiAJICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCiAJIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXApkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rIGIvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rCmluZGV4IGIwMzcyNWEuLmM0ZjY0MzggMTAwNjQ0Ci0tLSBhL1BDL29zMnZhY3BwL21ha2VmaWxlLm9taworKysgYi9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsKQEAgLTE2NCw4ICsxNjQsNyBAQAogICAgICAgICAgICAgICAgICAgU3Ryb3BNb2R1bGUub2JqICAgXAogICAgICAgICAgICAgICAgICAgU3RydWN0TW9kdWxlLm9iaiAgXAogICAgICAgICAgICAgICAgICAgVGltZU1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgVGhyZWFkTW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgWVVWQ29udmVydC5vYmoKKyAgICAgICAgICAgICAgICAgIFRocmVhZE1vZHVsZS5vYmoKIAogIyBPbWl0dGVkIE1vZHVsZXMgKGFuZCBEZXNjcmlwdGlvbi9SZWFzb24pOgogICAjCkBAIC04MDMsOCArODAyLDcgQEAKIAkgaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAogCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKIAkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oIFwKLQkgeXV2LmgKKwkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCiAKIHN5c2xvZ21vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCiAJIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCkBAIC04NTQsOCArODUyLDYgQEAKIAkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKIAkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAogCi15dXZjb252ZXJ0Lm9iajogeXV2LmgKLQogemxpYm1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAogCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAogCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKQEAgLTExNTksOCArMTE1NSw2IEBACiAJIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAogCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCiAKLWdldG10aW1lLm9iajogcHljb25maWcuaAotCiBnZXRwbGF0Zm9ybS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAogCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAogCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYgYi9QQy9vczJ2YWNwcC9weXRob24uZGVmCmluZGV4IDc5ZDA1YjAuLjc2ZDU2Y2QgMTAwNjQ0Ci0tLSBhL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYKKysrIGIvUEMvb3MydmFjcHAvcHl0aG9uLmRlZgpAQCAtNiw2ICs2LDcgQEAKIEVYUE9SVFMKICAgICAgICAgICAgICAgIDsgRGF0YQogICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fVHlwZQorICAgICAgICAgICAgICAgUHlDYXBzdWxlX1R5cGUKICAgICAgICAgICAgICAgIFB5Q09iamVjdF9UeXBlCiAgICAgICAgICAgICAgICBQeUNsYXNzX1R5cGUKICAgICAgICAgICAgICAgIFB5Q29kZV9UeXBlCkBAIC03NSw2ICs3Niw3IEBACiAgICAgICAgICAgICAgICBfUHlfVHJ1ZVN0cnVjdAogICAgICAgICAgICAgICAgX1B5X1plcm9TdHJ1Y3QKICAgICAgICAgICAgICAgIF9QeV9hYnN0cmFjdF9oYWNrCisgICAgICAgICAgICAgICBfUHlfY2Fwc3VsZV9oYWNrCiAgICAgICAgICAgICAgICBfUHlfY29iamVjdF9oYWNrCiAgICAgICAgICAgICAgICBfUHlfcmVfc3ludGF4CiAgICAgICAgICAgICAgICBfUHlfcmVfc3ludGF4X3RhYmxlCkBAIC04OSw2ICs5MSwxNyBAQAogICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KICAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dldFNlbGYKICAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX05ldworICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldENvbnRleHQKKyAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCisgICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0TmFtZQorICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldFBvaW50ZXIKKyAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9JbXBvcnQKKyAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9Jc1ZhbGlkCisgICAgICAgICAgICAgICBQeUNhcHN1bGVfTmV3CisgICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0Q29udGV4dAorICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldERlc3RydWN0b3IKKyAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXROYW1lCisgICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0UG9pbnRlcgogICAgICAgICAgICAgICAgUHlDT2JqZWN0X0FzVm9pZFB0cgogICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYwogICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyCkBAIC0yODQsNyArMjk3LDYgQEAKICAgICAgICAgICAgICAgIFB5TnVtYmVyX1hvcgogICAgICAgICAgICAgICAgUHlPU19BZnRlckZvcmsKICAgICAgICAgICAgICAgIFB5T1NfRmluaUludGVycnVwdHMKLSAgICAgICAgICAgICAgIFB5T1NfR2V0TGFzdE1vZGlmaWNhdGlvblRpbWUKICAgICAgICAgICAgICAgIFB5T1NfSW5pdEludGVycnVwdHMKICAgICAgICAgICAgICAgIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQKICAgICAgICAgICAgICAgIFB5T1NfUmVhZGxpbmUKQEAgLTM2OSw3ICszODEsNiBAQAogICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXREaWN0CiAgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX05ldwogICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9Td2FwCi0gICAgICAgICAgICAgICBQeVRocmVhZF9fZXhpdF90aHJlYWQKICAgICAgICAgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jawogICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfbG9jawogICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfc2VtYQpkaWZmIC0tZ2l0IGEvUEMvcHljb25maWcuaCBiL1BDL3B5Y29uZmlnLmgKaW5kZXggYjgxZjg4My4uYzljZDJjMCAxMDA2NDQKLS0tIGEvUEMvcHljb25maWcuaAorKysgYi9QQy9weWNvbmZpZy5oCkBAIC05NSwxMiArOTUsNiBAQAogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5DRQotLyogUHl0aG9uIHVzZXMgR2V0VmVyc2lvbigpIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAqIFdpbmRvd3MgTlQgYW5kIDl4L01FIHdoZXJlIE9TIFVuaWNvZGUgc3VwcG9ydCBpcyBjb25jZXJuZWQuCi0gKiBXaW5kb3dzIENFIHN1cHBvcnRzIFVuaWNvZGUgaW4gdGhlIHNhbWUgd2F5IGFzIE5UIHNvIHdlCi0gKiBkZWZpbmUgdGhlIG1pc3NpbmcgR2V0VmVyc2lvbigpIGFjY29yZGluZ2x5LgotICovCi0jZGVmaW5lIEdldFZlcnNpb24oKSAoNCkKIC8qIFdpbmRvd3MgQ0UgZG9lcyBub3Qgc3VwcG9ydCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KICNkZWZpbmUgZ2V0ZW52KHYpIChOVUxMKQogI2RlZmluZSBlbnZpcm9uIChOVUxMKQpAQCAtMzI5LDkgKzMyMyw5IEBACiAJCQl0aGVpciBNYWtlZmlsZSAob3RoZXIgY29tcGlsZXJzIGFyZSBnZW5lcmFsbHkKIAkJCXRha2VuIGNhcmUgb2YgYnkgZGlzdHV0aWxzLikgKi8KICMJCQlpZmRlZiBfREVCVUcKLSMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24yNl9kLmxpYiIpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMjdfZC5saWIiKQogIwkJCWVsc2UKLSMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24yNi5saWIiKQorIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjI3LmxpYiIpCiAjCQkJZW5kaWYgLyogX0RFQlVHICovCiAjCQllbmRpZiAvKiBfTVNDX1ZFUiAqLwogIwllbmRpZiAvKiBQeV9CVUlMRF9DT1JFICovCkBAIC00MDAsNiArMzk0LDQyIEBACiAKICNlbmRpZgogCisvKiBkZWZpbmUgc2lnbmVkIGFuZCB1bnNpZ25lZCBleGFjdC13aWR0aCAzMi1iaXQgYW5kIDY0LWJpdCB0eXBlcywgdXNlZCBpbiB0aGUKKyAgIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiBsb25nIGludGVnZXJzLiAqLworI2lmbmRlZiBQWV9VSU5UMzJfVAorI2lmIFNJWkVPRl9JTlQgPT0gNAorI2RlZmluZSBIQVZFX1VJTlQzMl9UIDEKKyNkZWZpbmUgUFlfVUlOVDMyX1QgdW5zaWduZWQgaW50CisjZWxpZiBTSVpFT0ZfTE9ORyA9PSA0CisjZGVmaW5lIEhBVkVfVUlOVDMyX1QgMQorI2RlZmluZSBQWV9VSU5UMzJfVCB1bnNpZ25lZCBsb25nCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFBZX1VJTlQ2NF9UCisjaWYgU0laRU9GX0xPTkdfTE9ORyA9PSA4CisjZGVmaW5lIEhBVkVfVUlOVDY0X1QgMQorI2RlZmluZSBQWV9VSU5UNjRfVCB1bnNpZ25lZCBQWV9MT05HX0xPTkcKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgUFlfSU5UMzJfVAorI2lmIFNJWkVPRl9JTlQgPT0gNAorI2RlZmluZSBIQVZFX0lOVDMyX1QgMQorI2RlZmluZSBQWV9JTlQzMl9UIGludAorI2VsaWYgU0laRU9GX0xPTkcgPT0gNAorI2RlZmluZSBIQVZFX0lOVDMyX1QgMQorI2RlZmluZSBQWV9JTlQzMl9UIGxvbmcKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgUFlfSU5UNjRfVAorI2lmIFNJWkVPRl9MT05HX0xPTkcgPT0gOAorI2RlZmluZSBIQVZFX0lOVDY0X1QgMQorI2RlZmluZSBQWV9JTlQ2NF9UIFBZX0xPTkdfTE9ORworI2VuZGlmCisjZW5kaWYKKwogLyogRmFpcmx5IHN0YW5kYXJkIGZyb20gaGVyZSEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjb3B5c2lnbicgZnVuY3Rpb24uICovCkBAIC01MjksMTAgKzU1OSw2IEBACiAvKiBUaGlzIGlzIGVub3VnaCBmb3IgdW5pY29kZW9iamVjdC5oIHRvIGRvIHRoZSAicmlnaHQgdGhpbmciIG9uIFdpbmRvd3MuICovCiAjZGVmaW5lIFB5X1VOSUNPREVfU0laRSAyCiAKLS8qIERlZmluZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBQeXRob24gVW5pY29kZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgcGFzc2VkCi0gICBhcy1pcyB0byBXaW4zMiBXaWRlIEFQSS4gICovCi0jZGVmaW5lIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwotCiAvKiBVc2UgUHl0aG9uJ3Mgb3duIHNtYWxsLWJsb2NrIG1lbW9yeS1hbGxvY2F0b3IuICovCiAjZGVmaW5lIFdJVEhfUFlNQUxMT0MgMQogCkBAIC03MjMsNCArNzQ5LDggQEAKICAgIHNvY2tldCBoYW5kbGVzIGdyZWF0ZXIgdGhhbiBGRF9TRVRTSVpFICovCiAjZGVmaW5lIFB5X1NPQ0tFVF9GRF9DQU5fQkVfR0VfRkRfU0VUU0laRQogCisvKiBEZWZpbmUgaWYgQyBkb3VibGVzIGFyZSA2NC1iaXQgSUVFRSA3NTQgYmluYXJ5IGZvcm1hdCwgc3RvcmVkIHdpdGggdGhlCisgICBsZWFzdCBzaWduaWZpY2FudCBieXRlIGZpcnN0ICovCisjZGVmaW5lIERPVUJMRV9JU19MSVRUTEVfRU5ESUFOX0lFRUU3NTQgMQorCiAjZW5kaWYgLyogIVB5X0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9QQy9weXRob24ubWsgYi9QQy9weXRob24ubWsKaW5kZXggYTc2NTEwNi4uNWY2NmViOSAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uLm1rCisrKyBiL1BDL3B5dGhvbi5tawpAQCAtMSw1ICsxLDUgQEAKLXByb2plY3QgOiBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9vczJccHl0aF9vczIuZXhlIG46XHB5dGhvblxweXRob24tMS4mDQotNS4xXHBjXHdhdF9kb3NccHl0aF9kb3MuZXhlIC5TWU1CT0xJQw0KLQ0KLSFpbmNsdWRlIG46XHB5dGhvblxweXRob24tMS41LjFccGNcd2F0X29zMlxweXRoX29zMi5tazENCi0haW5jbHVkZSBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9kb3NccHl0aF9kb3MubWsxDQorcHJvamVjdCA6IG46XHB5dGhvblxweXRob24tMS41LjFccGNcd2F0X29zMlxweXRoX29zMi5leGUgbjpccHl0aG9uXHB5dGhvbi0xLiYKKzUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLmV4ZSAuU1lNQk9MSUMKKworIWluY2x1ZGUgbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfb3MyXHB5dGhfb3MyLm1rMQorIWluY2x1ZGUgbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLm1rMQpkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uX250LnJjIGIvUEMvcHl0aG9uX250LnJjCmluZGV4IGY1ZmZmODcuLmUxMzI4MzcgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbl9udC5yYworKysgYi9QQy9weXRob25fbnQucmMKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiUHl0aG9uIENvcmVcMCIKICAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIFBZVEhPTl9WRVJTSU9OCiAgICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgIlB5dGhvbiBETExcMCIKLSAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgqSAyMDAxLTIwMTAgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uIENvcHlyaWdodCCpIDIwMDAgQmVPcGVuLmNvbS4gQ29weXJpZ2h0IKkgMTk5NS0yMDAxIENOUkkuIENvcHlyaWdodCCpIDE5OTEtMTk5NSBTTUMuXDAiCisgICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgMjAwMS0yMDA4IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBDb3B5cmlnaHQgqSAyMDAwIEJlT3Blbi5jb20uIENvcHlyaWdodCCpIDE5OTUtMjAwMSBDTlJJLiBDb3B5cmlnaHQgqSAxOTkxLTE5OTUgU01DLlwwIgogICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCBQWVRIT05fRExMX05BTUUgIlwwIgogICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlB5dGhvblwwIgogICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgUFlUSE9OX1ZFUlNJT04KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX211bHRpcHJvY2Vzc2luZy52Y3Byb2ogYi9QQ2J1aWxkL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qCmluZGV4IDczYWE4OTkuLjZhYTE0N2UgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKKysrIGIvUENidWlsZC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvagpAQCAtMyw3ICszLDcgQEAKIAlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKIAlWZXJzaW9uPSI5LDAwIgogCU5hbWU9Il9tdWx0aXByb2Nlc3NpbmciCi0JUHJvamVjdEdVSUQ9Ins5ZTQ4YjMwMC0zN2QxLTExZGQtOGM0MS0wMDUwNTZjMDAwMDh9IgorCVByb2plY3RHVUlEPSJ7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fSIKIAlSb290TmFtZXNwYWNlPSJfbXVsdGlwcm9jZXNzaW5nIgogCUtleXdvcmQ9IldpbjMyUHJvaiIKIAlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQgYi9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKaW5kZXggY2I1YTc5Ny4uMjUzMWE1YiAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9zc2wuYmF0CisrKyBiL1BDYnVpbGQvYnVpbGRfc3NsLmJhdApAQCAtMiwxMCArMiwxMCBAQAogaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKAogICBpZiAlMSBFUVUgRGVidWcgKAogICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMjZfZC5kbGwgZXhpdCAxCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjI3X2QuZGxsIGV4aXQgMQogICApIEVMU0UgKAogICAgIHNldCBIT1NUX1BZVEhPTj1weXRob24uZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjI2LmRsbCBleGl0IDEKKyAgICBpZiBub3QgZXhpc3QgcHl0aG9uMjcuZGxsIGV4aXQgMQogICApCiApCiAlSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMiAlMwpkaWZmIC0tZ2l0IGEvUENidWlsZC9idWlsZF9zc2wucHkgYi9QQ2J1aWxkL2J1aWxkX3NzbC5weQppbmRleCBmMjRjOTA2Li5mODFlMGJjIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkX3NzbC5weQorKysgYi9QQ2J1aWxkL2J1aWxkX3NzbC5weQpAQCAtMSwzICsxLDQgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQsIHByaW50X2Z1bmN0aW9uCiAjIFNjcmlwdCBmb3IgYnVpbGRpbmcgdGhlIF9zc2wgYW5kIF9oYXNobGliIG1vZHVsZXMgZm9yIFdpbmRvd3MuCiAjIFVzZXMgUGVybCB0byBzZXR1cCB0aGUgT3BlblNTTCBlbnZpcm9ubWVudCBjb3JyZWN0bHkKICMgYW5kIGJ1aWxkIE9wZW5TU0wsIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBubWFrZSBzZXNzaW9uCkBAIC00Niw3ICs0Nyw3IEBACiAjIGlzIGF2YWlsYWJsZS4KIGRlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6CiAgICAgZm9yIHBlcmwgaW4gcGVybHM6Ci0gICAgICAgIGZoID0gb3MucG9wZW4ocGVybCArICcgLWUgInVzZSBXaW4zMjsiJykKKyAgICAgICAgZmggPSBvcy5wb3BlbignIiVzIiAtZSAidXNlIFdpbjMyOyInICUgcGVybCkKICAgICAgICAgZmgucmVhZCgpCiAgICAgICAgIHJjID0gZmguY2xvc2UoKQogICAgICAgICBpZiByYzoKQEAgLTEwMiwxMSArMTAzLDggQEAKICAgICAiIiIKICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobTMyKToKICAgICAgICAgcmV0dXJuCi0gICAgIyAyLjQgY29tcGF0aWJpbGl0eQotICAgIGZpbiA9IG9wZW4obTMyKQotICAgIGlmIDE6ICMgd2l0aCBvcGVuKG0zMikgYXMgZmluOgotICAgICAgICBmb3V0ID0gb3BlbihtYWtlZmlsZSwgJ3cnKQotICAgICAgICBpZiAxOiAjIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgorICAgIHdpdGggb3BlbihtMzIpIGFzIGZpbjoKKyAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPXRtcDMyIiwgIj10bXA2NCIpCiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPW91dDMyIiwgIj1vdXQ2NCIpCkBAIC0xODYsMTAgKzE4NCwxMCBAQAogICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwogICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKICAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybCBpcyBOb25lOgorICAgIGlmIHBlcmw6CisgICAgICAgIHByaW50KCJGb3VuZCBhIHdvcmtpbmcgcGVybCBhdCAnJXMnIiAlIChwZXJsLCkpCisgICAgZWxzZToKICAgICAgICAgcHJpbnQoIk5vIFBlcmwgaW5zdGFsbGF0aW9uIHdhcyBmb3VuZC4gRXhpc3RpbmcgTWFrZWZpbGVzIGFyZSB1c2VkLiIpCi0KLSAgICBwcmludCgiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpKQogICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICMgTG9vayBmb3IgU1NMIDIgbGV2ZWxzIHVwIGZyb20gcGNidWlsZCAtIGllLCBzYW1lIHBsYWNlIHpsaWIgZXRjIGFsbCBsaXZlLgogICAgIHNzbF9kaXIgPSBmaW5kX2Jlc3Rfc3NsX2RpcigoIi4uXFwuLiIsKSkKZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weSBiL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQppbmRleCAyMWU4OWNjLi4yZDU3OTdmIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKKysrIGIvUENidWlsZC9idWlsZF90a2ludGVyLnB5CkBAIC01MiwxOCArNTIsMTggQEAKICAgICBpZiAxOgogICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oUk9PVCwgVEssICJ3aW4iKSkKICAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iLCBUQ0xESVI9dGNsZGlyKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCBUQ0xESVI9dGNsZGlyLCBNQUNISU5FPW1hY2hpbmUpCi0gICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICJpbnN0YWxsIiwgVENMRElSPXRjbGRpciwgSU5TVEFMTERJUj1kZXN0LCBNQUNISU5FPW1hY2hpbmUpCisgICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iLCBERUJVRz0wLCBUQ0xESVI9dGNsZGlyKQorICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCBERUJVRz0wLCBNQUNISU5FPW1hY2hpbmUpCisgICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICJpbnN0YWxsIiwgREVCVUc9MCwgSU5TVEFMTERJUj1kZXN0LCBNQUNISU5FPW1hY2hpbmUpCiAKICAgICAjIFRJWAogICAgIGlmIDE6CiAgICAgICAgICMgcHl0aG9uOS5tYWsgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZwogICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oUk9PVCwgVElYLCAid2luIikpCiAgICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2UoInB5dGhvbjkubWFrIiwgImNsZWFuIikKLSAgICAgICAgbm1ha2UoInB5dGhvbjkubWFrIiwgTUFDSElORT1tYWNoaW5lLCBJTlNUQUxMX0RJUj1kZXN0KQotICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCAiaW5zdGFsbCIsIElOU1RBTExfRElSPWRlc3QpCisgICAgICAgICAgICBubWFrZSgicHl0aG9uLm1hayIsICJjbGVhbiIpCisgICAgICAgIG5tYWtlKCJweXRob24ubWFrIiwgTUFDSElORT1tYWNoaW5lLCBJTlNUQUxMX0RJUj1kZXN0KQorICAgICAgICBubWFrZSgicHl0aG9uLm1hayIsICJpbnN0YWxsIiwgSU5TVEFMTF9ESVI9ZGVzdCkKIAogZGVmIG1haW4oKToKICAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMiBvciBzeXMuYXJndlsxXSBub3QgaW4gKCJXaW4zMiIsICJBTUQ2NCIpOgpkaWZmIC0tZ2l0IGEvUENidWlsZC9iejIudmNwcm9qIGIvUENidWlsZC9iejIudmNwcm9qCmluZGV4IDJjMTZlYjAuLmFmZGE1NzggMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvYnoyLnZjcHJvagorKysgYi9QQ2J1aWxkL2J6Mi52Y3Byb2oKQEAgLTQzLDYgKzQzLDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC01MiwxMiArNTMsMTAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgbGliYnoyIgotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKGJ6MkRpcikmI3gwRDsmI3gwQTtpZiBleGlzdCAkKFBsYXRmb3JtTmFtZSktRGVidWdcbGliYnoyLmxpYiBleGl0IDAmI3gwRDsmI3gwQTtpZiBub3QgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLURlYnVnIG1rZGlyICQoUGxhdGZvcm1OYW1lKS1EZWJ1ZyYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYiYjeDBEOyYjeDBBO2NvcHkgbGliYnoyLmxpYiAkKFBsYXRmb3JtTmFtZSktRGVidWcmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBjbGVhbiYjeDBEOyYjeDBBOyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGJ6MkRpcilcJChQbGF0Zm9ybU5hbWUpLURlYnVnXGxpYmJ6Mi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKQEAgLTEwNiw2ICsxMDUsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTExNSwxMiArMTE1LDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLURlYnVnXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1EZWJ1ZyBta2RpciAkKFBsYXRmb3JtTmFtZSktRGVidWcmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLURlYnVnJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1EZWJ1Z1xsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCkBAIC0xNjksNiArMTY3LDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0xNzgsMTIgKzE3NywxMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBsaWJiejIiCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoYnoyRGlyKSYjeDBEOyYjeDBBO2lmIGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlIG1rZGlyICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliJiN4MEQ7JiN4MEE7Y29weSBsaWJiejIubGliICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKQEAgLTIzMyw2ICsyMzAsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTI0MiwxMiArMjQwLDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiBleGl0IDAmI3gwRDsmI3gwQTtpZiBub3QgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UgbWtkaXIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBjbGVhbiYjeDBEOyYjeDBBOyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGJ6MkRpcilcJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpAQCAtMjk2LDYgKzI5Miw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtMzA1LDEyICszMDIsMTAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgbGliYnoyIgotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKGJ6MkRpcikmI3gwRDsmI3gwQTtpZiBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIGV4aXQgMCYjeDBEOyYjeDBBO2lmIG5vdCBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSBta2RpciAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYiYjeDBEOyYjeDBBO2NvcHkgbGliYnoyLmxpYiAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGNsZWFuJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoYnoyRGlyKVwkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCkBAIC0zNjAsNiArMzU1LDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0zNjksMTIgKzM2NSwxMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBsaWJiejIiCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoYnoyRGlyKSYjeDBEOyYjeDBBO2lmIGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlIG1rZGlyICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliJiN4MEQ7JiN4MEE7Y29weSBsaWJiejIubGliICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMTciCiAJCQkvPgogCQkJPFRvb2wKQEAgLTQyNCw2ICs0MTgsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTQzMywxMiArNDI4LDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiBleGl0IDAmI3gwRDsmI3gwQTtpZiBub3QgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UgbWtkaXIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBjbGVhbiYjeDBEOyYjeDBBOyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGJ6MkRpcilcJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpAQCAtNDg4LDYgKzQ4MSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtNDk3LDEyICs0OTEsMTAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgbGliYnoyIgotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKGJ6MkRpcikmI3gwRDsmI3gwQTtpZiBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIGV4aXQgMCYjeDBEOyYjeDBBO2lmIG5vdCBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSBta2RpciAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYiYjeDBEOyYjeDBBO2NvcHkgbGliYnoyLmxpYiAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGNsZWFuJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoYnoyRGlyKVwkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJCVRhcmdldE1hY2hpbmU9IjE3IgogCQkJLz4KIAkJCTxUb29sCkBAIC01MzksNiArNTMxLDUwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iYnppcDIgMS4wLjUgSGVhZGVyIEZpbGVzIgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWJfcHJpdmF0ZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9ImJ6aXAyIDEuMC41IFNvdXJjZSBGaWxlcyIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYmxvY2tzb3J0LmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYi5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcY29tcHJlc3MuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGNyY3RhYmxlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxkZWNvbXByZXNzLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxodWZmbWFuLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxyYW5kdGFibGUuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgogCTwvRmlsZXM+CiAJPEdsb2JhbHM+CiAJPC9HbG9iYWxzPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9weWQudnNwcm9wcyBiL1BDYnVpbGQvcHlkLnZzcHJvcHMKaW5kZXggZWU3OWU3Zi4uY2UwMzllYiAxMDA2NDQKLS0tIGEvUENidWlsZC9weWQudnNwcm9wcworKysgYi9QQ2J1aWxkL3B5ZC52c3Byb3BzCkBAIC0xLDQgKzEsNCBAQAotCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KIDxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0CiAJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCiAJVmVyc2lvbj0iOC4wMCIKZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHlwcm9qZWN0LnZzcHJvcHMgYi9QQ2J1aWxkL3B5cHJvamVjdC52c3Byb3BzCmluZGV4IGZlOTBiZDAuLjMzYzM1NzYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHlwcm9qZWN0LnZzcHJvcHMKKysrIGIvUENidWlsZC9weXByb2plY3QudnNwcm9wcwpAQCAtMzgsNyArMzgsNyBAQAogCS8+CiAJPFVzZXJNYWNybwogCQlOYW1lPSJQeURsbE5hbWUiCi0JCVZhbHVlPSJweXRob24yNiIKKwkJVmFsdWU9InB5dGhvbjI3IgogCS8+CiAJPFVzZXJNYWNybwogCQlOYW1lPSJQeXRob25FeGUiCkBAIC03NCw3ICs3NCw3IEBACiAJLz4KIAk8VXNlck1hY3JvCiAJCU5hbWU9InNxbGl0ZTNEaXIiCi0JCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNS45IgorCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjYuMjEiCiAJLz4KIAk8VXNlck1hY3JvCiAJCU5hbWU9ImJ6MkRpciIKZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3Byb2ogYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmNwcm9qCmluZGV4IDcwZDg3MjQuLjRmMzE4NWIgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3Byb2oKKysrIGIvUENidWlsZC9weXRob25jb3JlLnZjcHJvagpAQCAtNzE1LDYgKzcxNSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGR0b2EuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxlbnVtb2JqZWN0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtODUxLDYgKzg1NSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHB5Y2Fwc3VsZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHB5Y3R5cGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxweWRlYnVnLmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtOTk1LDE0ICsxMDA3LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfZmlsZWlvLmMiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2J5dGVzaW8uYyIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTAyNyw2ICsxMDMxLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX21hdGguYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfbWF0aC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xMTcxLDE0ICsxMTgzLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x5dXYuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x5dXZjb252ZXJ0LmMiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcemlwaW1wb3J0LmMiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTM1NCw2ICsxMzU4LDQyIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQk8L0ZpbHRlcj4KKwkJCTxGaWx0ZXIKKwkJCQlOYW1lPSJfaW8iCisJCQkJPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2lvXGJ1ZmZlcmVkaW8uYyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2lvXGJ5dGVzaW8uYyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2lvXGZpbGVpby5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfaW9caW9iYXNlLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXF9pb1xzdHJpbmdpby5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQk8L0ZpbHRlcj4KIAkJPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9Ik9iamVjdHMiCkBAIC0xMzc5LDcgKzE0MTksNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXHN0cmluZ29iamVjdC5jIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xjYXBzdWxlLmMiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTE0NjcsNiArMTUwNywxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXG1ldGhvZG9iamVjdC5jIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE0OTksNiArMTU0MywxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxzcGxpdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXHN0cmluZ29iamVjdC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXHN0cnVjdHNlcS5jIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE2NTksNiArMTcxMSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25cZHRvYS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25cZHlubG9hZF93aW4uYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNjk1LDEwICsxNzUxLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGdldG10aW1lLmMiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxnZXRvcHQuYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNzUxLDYgKzE4MDMsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXHB5Y3R5cGUuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXHB5ZnBlLmMiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9yZWFkbWUudHh0IGIvUENidWlsZC9yZWFkbWUudHh0CmluZGV4IDExYTliY2UuLjM2NmZjMDcgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcmVhZG1lLnR4dAorKysgYi9QQ2J1aWxkL3JlYWRtZS50eHQKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBWaXN1YWwgQysrIDYuMAogUEMvVlM3LjEvCiAgICAgVmlzdWFsIFN0dWRpbyAyMDAzICg3LjEpCi1QQ2J1aWxkOC8KK1BDL1ZTOC4wLwogICAgIFZpc3VhbCBTdHVkaW8gMjAwNSAoOC4wKQogCiAKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgIFdyYXBzIEJlcmtlbGV5IERCIDQuNy4yNSwgd2hpY2ggaXMgY3VycmVudGx5IGJ1aWx0IGJ5IF9ic2RkYi52Y3Byb2ouCiAgICAgcHJvamVjdCAoc2VlIGJlbG93KS4KIF9zcWxpdGUzCi0gICAgV3JhcHMgU1FMaXRlIDMuNS45LCB3aGljaCBpcyBjdXJyZW50bHkgYnVpbHQgYnkgc3FsaXRlMy52Y3Byb2ogKHNlZSBiZWxvdykuCisgICAgV3JhcHMgU1FMaXRlIDMuNi4yMSwgd2hpY2ggaXMgY3VycmVudGx5IGJ1aWx0IGJ5IHNxbGl0ZTMudmNwcm9qIChzZWUgYmVsb3cpLgogX3RraW50ZXIKICAgICBXcmFwcyB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4gIFVubGlrZSBfYnNkZGIgYW5kIF9zcWxpdGUzLCB0aGVyZSdzIG5vCiAgICAgY29ycmVzcG9uZGluZyB0Y2x0ay52Y3Byb2otdHlwZSBwcm9qZWN0IHRoYXQgYnVpbGRzIFRjbC9UayBmcm9tIHZjcHJvaidzCkBAIC0xNTksNyArMTU5LDcgQEAKICAgICBuYXNtdy5leGUuCiAKICAgICBZb3UgY2FuIGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vUHJvZHVjdHMvQWN0aXZlUGVybC8KKyAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcGVybC8KICAgICBpZiB5b3UgbGlrZSB0byB1c2UgdGhlIG9mZmljaWFsIHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgZmlsZXMgZnJvbSAKICAgICBweXRob24ncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuIFRoZSBzdm4gdmVyc2lvbiBjb250YWlucyBwcmUtYnVpbGQKICAgICBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgpkaWZmIC0tZ2l0IGEvUENidWlsZC9ydC5iYXQgYi9QQ2J1aWxkL3J0LmJhdAppbmRleCA1ODNkNGYzLi5lZTE2NjFhIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3J0LmJhdAorKysgYi9QQ2J1aWxkL3J0LmJhdApAQCAtNDAsNyArNDAsNyBAQAogCiBQQVRIICVQQVRIJTsuLlwuLlwldGNsdGslXGJpbgogc2V0IGV4ZT0lcHJlZml4JVxweXRob24lc3VmZml4JQotc2V0IGNtZD0lZXhlJSAlZGFzaE8lIC1FIC10dCAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQorc2V0IGNtZD0lZXhlJSAlZGFzaE8lIC1XZCAtMyAtRSAtdHQgLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKIGlmIGRlZmluZWQgcW1vZGUgZ290byBRbW9kZQogCiBlY2hvIERlbGV0aW5nIC5weWMvLnB5byBmaWxlcyAuLi4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvc2VsZWN0LnZjcHJvaiBiL1BDYnVpbGQvc2VsZWN0LnZjcHJvagppbmRleCBiOTdjYjRkLi5iMDY3YWQwIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3NlbGVjdC52Y3Byb2oKKysrIGIvUENidWlsZC9zZWxlY3QudmNwcm9qCkBAIC01NCw3ICs1NCw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJLz4KQEAgLTExNiw3ICsxMTYsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCS8+CkBAIC0xNzgsNyArMTc4LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCiAJCQkvPgpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJLz4KQEAgLTMwMyw3ICszMDMsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCS8+CkBAIC0zNjYsNyArMzY2LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMTciCkBAIC00MjksNyArNDI5LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCiAJCQkvPgpAQCAtNDkyLDcgKzQ5Miw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJCVRhcmdldE1hY2hpbmU9IjE3IgpkaWZmIC0tZ2l0IGEvUENidWlsZC92czl0bzgucHkgYi9QQ2J1aWxkL3ZzOXRvOC5weQppbmRleCAyZGZiZDVkLi5hNGU2ODAxIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3ZzOXRvOC5weQorKysgYi9QQ2J1aWxkL3ZzOXRvOC5weQpAQCAtMjQsNyArMjQsNyBAQAogCiAgICAgICAgICAgICAjIEJhaC4gVlM4LjAgZG9lcyBub3QgZXhwYW5kIG1hY3JvcyBpbiBmaWxlIG5hbWVzLgogICAgICAgICAgICAgIyBSZXBsYWNlIHRoZW0gaGVyZS4KLSAgICAgICAgICAgIGxpbmVzID0gbGluZXMucmVwbGFjZSgnJChzcWxpdGUzRGlyKScsICcuLlxcLi5cXC4uXFxzcWxpdGUtMy41LjknKQorICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5yZXBsYWNlKCckKHNxbGl0ZTNEaXIpJywgJy4uXFwuLlxcLi5cXHNxbGl0ZS0zLjYuMjEnKQogICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5yZXBsYWNlKCckKGJzZGRiRGlyKVxcLi5cXC4uJywgJy4uXFwuLlxcLi5cXGRiLTQuNy4yNS4wXFxidWlsZF93aW5kb3dzXFwuLicpCiAgICAgICAgICAgICBsaW5lcyA9IGxpbmVzLnJlcGxhY2UoJyQoYnNkZGJEaXIpJywgJy4uXFwuLlxcLi5cXGRiLTQuNy4yNS4wXFxidWlsZF93aW5kb3dzJykKIApkaWZmIC0tZ2l0IGEvUGFyc2VyL1B5dGhvbi5hc2RsIGIvUGFyc2VyL1B5dGhvbi5hc2RsCmluZGV4IGE0Mzk0YzkuLjlhOWI5MzMgMTAwNjQ0Ci0tLSBhL1BhcnNlci9QeXRob24uYXNkbAorKysgYi9QYXJzZXIvUHl0aG9uLmFzZGwKQEAgLTExLDcgKzExLDcgQEAKIAogCXN0bXQgPSBGdW5jdGlvbkRlZihpZGVudGlmaWVyIG5hbWUsIGFyZ3VtZW50cyBhcmdzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG10KiBib2R5LCBleHByKiBkZWNvcmF0b3JfbGlzdCkKLQkgICAgICB8IENsYXNzRGVmKGlkZW50aWZpZXIgbmFtZSwgZXhwciogYmFzZXMsIHN0bXQqIGJvZHksIGV4cHIgKmRlY29yYXRvcl9saXN0KQorCSAgICAgIHwgQ2xhc3NEZWYoaWRlbnRpZmllciBuYW1lLCBleHByKiBiYXNlcywgc3RtdCogYm9keSwgZXhwciogZGVjb3JhdG9yX2xpc3QpCiAJICAgICAgfCBSZXR1cm4oZXhwcj8gdmFsdWUpCiAKIAkgICAgICB8IERlbGV0ZShleHByKiB0YXJnZXRzKQpAQCAtMzQsNyArMzQsNyBAQAogCSAgICAgIHwgQXNzZXJ0KGV4cHIgdGVzdCwgZXhwcj8gbXNnKQogCiAJICAgICAgfCBJbXBvcnQoYWxpYXMqIG5hbWVzKQotCSAgICAgIHwgSW1wb3J0RnJvbShpZGVudGlmaWVyIG1vZHVsZSwgYWxpYXMqIG5hbWVzLCBpbnQ/IGxldmVsKQorCSAgICAgIHwgSW1wb3J0RnJvbShpZGVudGlmaWVyPyBtb2R1bGUsIGFsaWFzKiBuYW1lcywgaW50PyBsZXZlbCkKIAogCSAgICAgIC0tIERvZXNuJ3QgY2FwdHVyZSByZXF1aXJlbWVudCB0aGF0IGxvY2FscyBtdXN0IGJlCiAJICAgICAgLS0gZGVmaW5lZCBpZiBnbG9iYWxzIGlzCkBAIC01Niw3ICs1NiwxMCBAQAogCSAgICAgfCBMYW1iZGEoYXJndW1lbnRzIGFyZ3MsIGV4cHIgYm9keSkKIAkgICAgIHwgSWZFeHAoZXhwciB0ZXN0LCBleHByIGJvZHksIGV4cHIgb3JlbHNlKQogCSAgICAgfCBEaWN0KGV4cHIqIGtleXMsIGV4cHIqIHZhbHVlcykKKwkgICAgIHwgU2V0KGV4cHIqIGVsdHMpCiAJICAgICB8IExpc3RDb21wKGV4cHIgZWx0LCBjb21wcmVoZW5zaW9uKiBnZW5lcmF0b3JzKQorCSAgICAgfCBTZXRDb21wKGV4cHIgZWx0LCBjb21wcmVoZW5zaW9uKiBnZW5lcmF0b3JzKQorCSAgICAgfCBEaWN0Q29tcChleHByIGtleSwgZXhwciB2YWx1ZSwgY29tcHJlaGVuc2lvbiogZ2VuZXJhdG9ycykKIAkgICAgIHwgR2VuZXJhdG9yRXhwKGV4cHIgZWx0LCBjb21wcmVoZW5zaW9uKiBnZW5lcmF0b3JzKQogCSAgICAgLS0gdGhlIGdyYW1tYXIgY29uc3RyYWlucyB3aGVyZSB5aWVsZCBleHByZXNzaW9ucyBjYW4gb2NjdXIKIAkgICAgIHwgWWllbGQoZXhwcj8gdmFsdWUpCmRpZmYgLS1naXQgYS9QYXJzZXIvYXNkbC5weSBiL1BhcnNlci9hc2RsLnB5CmluZGV4IDBjYWRhMmIuLjdmNTg1NmIgMTAwNjQ0Ci0tLSBhL1BhcnNlci9hc2RsLnB5CisrKyBiL1BhcnNlci9hc2RsLnB5CkBAIC0xMCwxNCArMTAsMTIgQEAKIENoYW5nZXMgZm9yIFB5dGhvbjogQWRkIHN1cHBvcnQgZm9yIG1vZHVsZSB2ZXJzaW9ucwogIiIiCiAKLSNfX21ldGFjbGFzc19fID0gdHlwZQotCiBpbXBvcnQgb3MKIGltcG9ydCB0cmFjZWJhY2sKIAogaW1wb3J0IHNwYXJrCiAKLWNsYXNzIFRva2VuOgorY2xhc3MgVG9rZW4ob2JqZWN0KToKICAgICAjIHNwYXJrIHNlZW1zIHRvIGRpc3BhdGNoIGluIHRoZSBwYXJzZXIgYmFzZWQgb24gYSB0b2tlbidzCiAgICAgIyB0eXBlIGF0dHJpYnV0ZQogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCBsaW5lbm8pOgpAQCAtNDUsNyArNDMsNyBAQAogICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KIAotY2xhc3MgQVNETFN5bnRheEVycm9yOgorY2xhc3MgQVNETFN5bnRheEVycm9yKEV4Y2VwdGlvbik6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZW5vLCB0b2tlbj1Ob25lLCBtc2c9Tm9uZSk6CiAgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCkBAIC0yMDYsMTkgKzIwNCwxOSBAQAogCiAgICAgZGVmIHBfZmllbGRfMihzZWxmLCAodHlwZSwgXywgbmFtZSkpOgogICAgICAgICAiIGZpZWxkIDo6PSBJZCAqIElkICIKLSAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGUsIG5hbWUsIHNlcT0xKQorICAgICAgICByZXR1cm4gRmllbGQodHlwZSwgbmFtZSwgc2VxPVRydWUpCiAKICAgICBkZWYgcF9maWVsZF8zKHNlbGYsICh0eXBlLCBfLCBuYW1lKSk6CiAgICAgICAgICIgZmllbGQgOjo9IElkID8gSWQgIgotICAgICAgICByZXR1cm4gRmllbGQodHlwZSwgbmFtZSwgb3B0PTEpCisgICAgICAgIHJldHVybiBGaWVsZCh0eXBlLCBuYW1lLCBvcHQ9VHJ1ZSkKIAogICAgIGRlZiBwX2ZpZWxkXzQoc2VsZiwgKHR5cGUsIF8pKToKICAgICAgICAgIiBmaWVsZCA6Oj0gSWQgKiAiCi0gICAgICAgIHJldHVybiBGaWVsZCh0eXBlLCBzZXE9MSkKKyAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGUsIHNlcT1UcnVlKQogCiAgICAgZGVmIHBfZmllbGRfNShzZWxmLCAodHlwZSwgXykpOgogICAgICAgICAiIGZpZWxkIDo6PSBJZCA/ICIKLSAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGUsIG9wdD0xKQorICAgICAgICByZXR1cm4gRmllbGQodHlwZSwgb3B0PVRydWUpCiAKIGJ1aWx0aW5fdHlwZXMgPSAoImlkZW50aWZpZXIiLCAic3RyaW5nIiwgImludCIsICJib29sIiwgIm9iamVjdCIpCiAKQEAgLTIyNiw3ICsyMjQsNyBAQAogIyBub3Qgc3VyZSBpZiBhbnkgb2YgdGhlIG1ldGhvZHMgYXJlIHVzZWZ1bCB5ZXQsIGJ1dCBJJ20gYWRkaW5nIHRoZW0KICMgcGllY2VtZWFsIGFzIHRoZXkgc2VlbSBoZWxwZnVsCiAKLWNsYXNzIEFTVDoKK2NsYXNzIEFTVChvYmplY3QpOgogICAgIHBhc3MgIyBhIG1hcmtlciBjbGFzcwogCiBjbGFzcyBNb2R1bGUoQVNUKToKQEAgLTI1OCw3ICsyNTYsNyBAQAogICAgICAgICByZXR1cm4gIkNvbnN0cnVjdG9yKCVzLCAlcykiICUgKHNlbGYubmFtZSwgc2VsZi5maWVsZHMpCiAKIGNsYXNzIEZpZWxkKEFTVCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIG5hbWU9Tm9uZSwgc2VxPTAsIG9wdD0wKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZSwgbmFtZT1Ob25lLCBzZXE9RmFsc2UsIG9wdD1GYWxzZSk6CiAgICAgICAgIHNlbGYudHlwZSA9IHR5cGUKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnNlcSA9IHNlcQpAQCAtMjY2LDkgKzI2NCw5IEBACiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIGlmIHNlbGYuc2VxOgotICAgICAgICAgICAgZXh0cmEgPSAiLCBzZXE9MSIKKyAgICAgICAgICAgIGV4dHJhID0gIiwgc2VxPVRydWUiCiAgICAgICAgIGVsaWYgc2VsZi5vcHQ6Ci0gICAgICAgICAgICBleHRyYSA9ICIsIG9wdD0xIgorICAgICAgICAgICAgZXh0cmEgPSAiLCBvcHQ9VHJ1ZSIKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGV4dHJhID0gIiIKICAgICAgICAgaWYgc2VsZi5uYW1lIGlzIE5vbmU6CkBAIC0yOTYsNyArMjk0LDcgQEAKIAogY2xhc3MgVmlzaXRvckJhc2Uob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBza2lwPTApOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBza2lwPUZhbHNlKToKICAgICAgICAgc2VsZi5jYWNoZSA9IHt9CiAgICAgICAgIHNlbGYuc2tpcCA9IHNraXAKIApAQCAtMzMxLDcgKzMyOSw3IEBACiBjbGFzcyBDaGVjayhWaXNpdG9yQmFzZSk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHN1cGVyKENoZWNrLCBzZWxmKS5fX2luaXRfXyhza2lwPTEpCisgICAgICAgIHN1cGVyKENoZWNrLCBzZWxmKS5fX2luaXRfXyhza2lwPVRydWUpCiAgICAgICAgIHNlbGYuY29ucyA9IHt9CiAgICAgICAgIHNlbGYuZXJyb3JzID0gMAogICAgICAgICBzZWxmLnR5cGVzID0ge30KQEAgLTM3Myw3ICszNzEsNyBAQAogICAgIHYudmlzaXQobW9kKQogCiAgICAgZm9yIHQgaW4gdi50eXBlczoKLSAgICAgICAgaWYgbm90IG1vZC50eXBlcy5oYXNfa2V5KHQpIGFuZCBub3QgdCBpbiBidWlsdGluX3R5cGVzOgorICAgICAgICBpZiB0IG5vdCBpbiBtb2QudHlwZXMgYW5kIG5vdCB0IGluIGJ1aWx0aW5fdHlwZXM6CiAgICAgICAgICAgICB2LmVycm9ycyArPSAxCiAgICAgICAgICAgICB1c2VzID0gIiwgIi5qb2luKHYudHlwZXNbdF0pCiAgICAgICAgICAgICBwcmludCAiVW5kZWZpbmVkIHR5cGUgJXMsIHVzZWQgaW4gJXMiICUgKHQsIHVzZXMpCmRpZmYgLS1naXQgYS9QYXJzZXIvYXNkbF9jLnB5IGIvUGFyc2VyL2FzZGxfYy5weQppbmRleCAzNzcyYjEyLi42MzRhZDI5IDEwMDc1NQotLS0gYS9QYXJzZXIvYXNkbF9jLnB5CisrKyBiL1BhcnNlci9hc2RsX2MucHkKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgc2VsZi5maWxlID0gZmlsZQogICAgICAgICBzdXBlcihFbWl0VmlzaXRvciwgc2VsZikuX19pbml0X18oKQogCi0gICAgZGVmIGVtaXQoc2VsZiwgcywgZGVwdGgsIHJlZmxvdz0xKToKKyAgICBkZWYgZW1pdChzZWxmLCBzLCBkZXB0aCwgcmVmbG93PVRydWUpOgogICAgICAgICAjIFhYWCByZWZsb3cgbG9uZyBsaW5lcz8KICAgICAgICAgaWYgcmVmbG93OgogICAgICAgICAgICAgbGluZXMgPSByZWZsb3dfbGluZXMocywgZGVwdGgpCkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICAgICAgY3R5cGUgPSBnZXRfY190eXBlKHR5cGUpCiAgICAgICAgIHNlbGYuZW1pdF9mdW5jdGlvbihjb25zLm5hbWUsIGN0eXBlLCBhcmdzLCBhdHRycykKIAotICAgIGRlZiBlbWl0X2Z1bmN0aW9uKHNlbGYsIG5hbWUsIGN0eXBlLCBhcmdzLCBhdHRycywgdW5pb249MSk6CisgICAgZGVmIGVtaXRfZnVuY3Rpb24oc2VsZiwgbmFtZSwgY3R5cGUsIGFyZ3MsIGF0dHJzLCB1bmlvbj1UcnVlKToKICAgICAgICAgYXJncyA9IGFyZ3MgKyBhdHRycwogICAgICAgICBpZiBhcmdzOgogICAgICAgICAgICAgYXJnc3RyID0gIiwgIi5qb2luKFsiJXMgJXMiICUgKGF0eXBlLCBhbmFtZSkKQEAgLTI2NywxOSArMjY3LDE5IEBACiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihhcmdzKSsxKToKICAgICAgICAgICAgIG1hcmdzICs9ICIsIGElZCIgJSBpCiAgICAgICAgIHNlbGYuZW1pdCgiI2RlZmluZSAlcyglcykgX1B5XyVzKCVzKSIgJSAobmFtZSwgbWFyZ3MsIG5hbWUsIG1hcmdzKSwgMCwKLSAgICAgICAgICAgICAgICByZWZsb3cgPSAwKQotICAgICAgICBzZWxmLmVtaXQoIiVzIF9QeV8lcyglcyk7IiAlIChjdHlwZSwgbmFtZSwgYXJnc3RyKSwgMCkKKyAgICAgICAgICAgICAgICByZWZsb3c9RmFsc2UpCisgICAgICAgIHNlbGYuZW1pdCgiJXMgX1B5XyVzKCVzKTsiICUgKGN0eXBlLCBuYW1lLCBhcmdzdHIpLCBGYWxzZSkKIAogICAgIGRlZiB2aXNpdFByb2R1Y3Qoc2VsZiwgcHJvZCwgbmFtZSk6CiAgICAgICAgIHNlbGYuZW1pdF9mdW5jdGlvbihuYW1lLCBnZXRfY190eXBlKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfYXJncyhwcm9kLmZpZWxkcyksIFtdLCB1bmlvbj0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfYXJncyhwcm9kLmZpZWxkcyksIFtdLCB1bmlvbj1GYWxzZSkKIAogCiBjbGFzcyBGdW5jdGlvblZpc2l0b3IoUHJvdG90eXBlVmlzaXRvcik6CiAgICAgIiIiVmlzaXRvciB0byBnZW5lcmF0ZSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgZm9yIEFTVC4iIiIKIAotICAgIGRlZiBlbWl0X2Z1bmN0aW9uKHNlbGYsIG5hbWUsIGN0eXBlLCBhcmdzLCBhdHRycywgdW5pb249MSk6Ci0gICAgICAgIGRlZiBlbWl0KHMsIGRlcHRoPTAsIHJlZmxvdz0xKToKKyAgICBkZWYgZW1pdF9mdW5jdGlvbihzZWxmLCBuYW1lLCBjdHlwZSwgYXJncywgYXR0cnMsIHVuaW9uPVRydWUpOgorICAgICAgICBkZWYgZW1pdChzLCBkZXB0aD0wLCByZWZsb3c9VHJ1ZSk6CiAgICAgICAgICAgICBzZWxmLmVtaXQocywgZGVwdGgsIHJlZmxvdykKICAgICAgICAgYXJnc3RyID0gIiwgIi5qb2luKFsiJXMgJXMiICUgKGF0eXBlLCBhbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXR5cGUsIGFuYW1lLCBvcHQgaW4gYXJncyArIGF0dHJzXSkKQEAgLTI5OCw3ICsyOTgsNyBAQAogICAgICAgICAgICAgICAgIGVtaXQoIlB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCIsIDIpCiAgICAgICAgICAgICAgICAgbXNnID0gImZpZWxkICVzIGlzIHJlcXVpcmVkIGZvciAlcyIgJSAoYXJnbmFtZSwgbmFtZSkKICAgICAgICAgICAgICAgICBlbWl0KCcgICAgICAgICAgICAgICAgIiVzIik7JyAlIG1zZywKLSAgICAgICAgICAgICAgICAgICAgIDIsIHJlZmxvdz0wKQorICAgICAgICAgICAgICAgICAgICAgMiwgcmVmbG93PUZhbHNlKQogICAgICAgICAgICAgICAgIGVtaXQoJ3JldHVybiBOVUxMOycsIDIpCiAgICAgICAgICAgICAgICAgZW1pdCgnfScsIDEpCiAKQEAgLTMxNCw3ICszMTQsNyBAQAogICAgICAgICBlbWl0KCIiKQogCiAgICAgZGVmIGVtaXRfYm9keV91bmlvbihzZWxmLCBuYW1lLCBhcmdzLCBhdHRycyk6Ci0gICAgICAgIGRlZiBlbWl0KHMsIGRlcHRoPTAsIHJlZmxvdz0xKToKKyAgICAgICAgZGVmIGVtaXQocywgZGVwdGg9MCwgcmVmbG93PVRydWUpOgogICAgICAgICAgICAgc2VsZi5lbWl0KHMsIGRlcHRoLCByZWZsb3cpCiAgICAgICAgIGVtaXQoInAtPmtpbmQgPSAlc19raW5kOyIgJSBuYW1lLCAxKQogICAgICAgICBmb3IgYXJndHlwZSwgYXJnbmFtZSwgb3B0IGluIGFyZ3M6CkBAIC0zMjMsNyArMzIzLDcgQEAKICAgICAgICAgICAgIGVtaXQoInAtPiVzID0gJXM7IiAlIChhcmduYW1lLCBhcmduYW1lKSwgMSkKIAogICAgIGRlZiBlbWl0X2JvZHlfc3RydWN0KHNlbGYsIG5hbWUsIGFyZ3MsIGF0dHJzKToKLSAgICAgICAgZGVmIGVtaXQocywgZGVwdGg9MCwgcmVmbG93PTEpOgorICAgICAgICBkZWYgZW1pdChzLCBkZXB0aD0wLCByZWZsb3c9VHJ1ZSk6CiAgICAgICAgICAgICBzZWxmLmVtaXQocywgZGVwdGgsIHJlZmxvdykKICAgICAgICAgZm9yIGFyZ3R5cGUsIGFyZ25hbWUsIG9wdCBpbiBhcmdzOgogICAgICAgICAgICAgZW1pdCgicC0+JXMgPSAlczsiICUgKGFyZ25hbWUsIGFyZ25hbWUpLCAxKQpAQCAtNzMzLDggKzczMyw5IEBACiB7CiAgICAgaW50IGksIHJlc3VsdDsKICAgICBQeU9iamVjdCAqcywgKmwgPSBQeVR1cGxlX05ldyhudW1fZmllbGRzKTsKLSAgICBpZiAoIWwpIHJldHVybiAwOwotICAgIGZvcihpID0gMDsgaSA8IG51bV9maWVsZHM7IGkrKykgeworICAgIGlmICghbCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9maWVsZHM7IGkrKykgewogICAgICAgICBzID0gUHlTdHJpbmdfRnJvbVN0cmluZyhhdHRyc1tpXSk7CiAgICAgICAgIGlmICghcykgewogICAgICAgICAgICAgUHlfREVDUkVGKGwpOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL2dyYW1tYXIubWFrIGIvUGFyc2VyL2dyYW1tYXIubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWYwMjhmLi4wMDAwMDAwCi0tLSBhL1BhcnNlci9ncmFtbWFyLm1haworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMgVGhpcyBtYW5hZ2VzIHRvIHJlYnVpbGQgZ3JhbWluaXQue2gsIGN9IHVuZGVyIE1TVkMgNiAoV2luZG93cyksIHZpYQotIwotIyAgICAgbm1ha2UgL2YgZ3JhbW1hci5tYWsKLSMKLSMgWW91IG1heSBhbHNvIG5lZWQgdG8gY29weSBweXRob24yMy5kbGwgaW50byB0aGlzIGRpcmVjdG9yeSwgb3IgZ2V0Ci0jIGl0IG9uIHlvdXIgc2VhcmNoIHBhdGguCi0jCi0jIFRoZSBpbnRlcm1lZGlhdGUgZmlsZXMgY2FuIGJlIG51a2VkIGFmdGVyd2FyZHM6Ci0jCi0jICAgICBubWFrZSAvZiBncmFtbWFyLm1hayBjbGVhbgotIwotIyBJIGRvbid0IHVuZGVyc3RhbmQgdGhlIG1hemUgb2YgcHJlcHJvY2Vzc29yICNkZWZpbmUncyBvbiBXaW5kb3dzLCBhbmQKLSMgYXMgYSByZXN1bHQgdGhpcyByZXF1aXJlcyBsaW5raW5nIHdpdGggcHl0aG9uMjMubGliLCBzbyBpdCdzIG9mIG5vIHVzZQotIyBmb3IgYm9vdHN0cmFwcGluZyAodGhlIGNhdXNlIGFwcGVhcnMgdG8gYmUgYSB1c2VsZXNzLS0gaW4gdGhpcwotIyBwYXJ0aWN1bGFyIGNhc2UgLS1wcmFnbWEgaW4gUENccHljb25maWcuaCwgd2hpY2ggZGVtYW5kcyB0aGF0Ci0jIHB5dGhvbjIzLmxpYiBnZXQgbGlua2VkIGluKS4KLQotTElCUz0gLi5cUENidWlsZFxweXRob24yNS5saWIKLQotQ0ZMQUdTPSAvSSAuLlxJbmNsdWRlIC9JIC4uXFBDIC9EIE1TX05PX0NPUkVETEwgL0QgUEdFTiAvTUQKLQotR1JBTU1BUl9IPSAuLlxJbmNsdWRlXGdyYW1pbml0LmgKLUdSQU1NQVJfQz0gLi5cUHl0aG9uXGdyYW1pbml0LmMKLUdSQU1NQVJfSU5QVVQ9IC4uXEdyYW1tYXJcR3JhbW1hcgotCi1QR0VOPSBwZ2VuLmV4ZQotCi1QT0JKUz0gYWNjZWxlci5vYmogZ3JhbW1hcjEub2JqIGxpc3Rub2RlLm9iaiBub2RlLm9iaiBwYXJzZXIub2JqIFwKLSAgICAgICBwYXJzZXRvay5vYmogdG9rZW5pemVyLm9iaiBiaXRzZXQub2JqIG1ldGFncmFtbWFyLm9iagotCi1QQVJTRVJfT0JKUz0gJChQT0JKUykgbXlyZWFkbGluZS5vYmoKLQotUEdPQkpTPSBmaXJzdHNldHMub2JqIGdyYW1tYXIub2JqIHBnZW4ub2JqIHByaW50Z3JhbW1hci5vYmogcGdlbm1haW4ub2JqCi0KLVBHRU5PQkpTPSAkKFBPQkpTKSAkKFBHT0JKUykKLQotJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKTogJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpCi0JCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCi0KLSQoUEdFTik6CSQoUEdFTk9CSlMpCi0JCSQoQ0MpICQoUEdFTk9CSlMpICQoTElCUykgL0ZlJChQR0VOKQotCi1jbGVhbjoKLSAgICAgICAgZGVsICoub2JqCi0gICAgICAgIGRlbCAkKFBHRU4pCmRpZmYgLS1naXQgYS9QYXJzZXIvbXlyZWFkbGluZS5jIGIvUGFyc2VyL215cmVhZGxpbmUuYwppbmRleCAxMjJmODk2Li42ZDkwZDIwIDEwMDY0NAotLS0gYS9QYXJzZXIvbXlyZWFkbGluZS5jCisrKyBiL1BhcnNlci9teXJlYWRsaW5lLmMKQEAgLTQwLDY2ICs0MCw2MyBAQAogbXlfZmdldHMoY2hhciAqYnVmLCBpbnQgbGVuLCBGSUxFICpmcCkKIHsKICAgICBjaGFyICpwOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKFB5T1NfSW5wdXRIb29rICE9IE5VTEwpCi0gICAgICAgICAgICAodm9pZCkoUHlPU19JbnB1dEhvb2spKCk7Ci0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgcCA9IGZnZXRzKGJ1ZiwgbGVuLCBmcCk7Ci0gICAgICAgIGlmIChwICE9IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gMDsgLyogTm8gZXJyb3IgKi8KKyAgICBpZiAoUHlPU19JbnB1dEhvb2sgIT0gTlVMTCkKKyAgICAgICAgKHZvaWQpKFB5T1NfSW5wdXRIb29rKSgpOworICAgIGVycm5vID0gMDsKKyAgICBwID0gZmdldHMoYnVmLCBsZW4sIGZwKTsKKyAgICBpZiAocCAhPSBOVUxMKQorICAgICAgICByZXR1cm4gMDsgLyogTm8gZXJyb3IgKi8KICNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgIC8qIEluIHRoZSBjYXNlIG9mIGEgQ3RybCtDIG9yIHNvbWUgb3RoZXIgZXh0ZXJuYWwgZXZlbnQKLSAgICAgICAgICAgaW50ZXJydXB0aW5nIHRoZSBvcGVyYXRpb246Ci0gICAgICAgICAgIFdpbjJrL05UOiBFUlJPUl9PUEVSQVRJT05fQUJPUlRFRCBpcyB0aGUgbW9zdCByZWNlbnQgV2luMzIKLSAgICAgICAgICAgZXJyb3IgY29kZSAoYW5kIGZlb2YoKSByZXR1cm5zIFRSVUUpLgotICAgICAgICAgICBXaW45eDogQ3RybCtDIHNlZW1zIHRvIGhhdmUgbm8gZWZmZWN0IG9uIGZnZXRzKCkgcmV0dXJuaW5nCi0gICAgICAgICAgIGVhcmx5IC0gdGhlIHNpZ25hbCBoYW5kbGVyIGlzIGNhbGxlZCwgYnV0IHRoZSBmZ2V0cygpCi0gICAgICAgICAgIG9ubHkgcmV0dXJucyAibm9ybWFsbHkiIChpZSwgd2hlbiBFbnRlciBoaXQgb3IgZmVvZigpKQorICAgIC8qIEluIHRoZSBjYXNlIG9mIGEgQ3RybCtDIG9yIHNvbWUgb3RoZXIgZXh0ZXJuYWwgZXZlbnQKKyAgICAgICBpbnRlcnJ1cHRpbmcgdGhlIG9wZXJhdGlvbjoKKyAgICAgICBXaW4yay9OVDogRVJST1JfT1BFUkFUSU9OX0FCT1JURUQgaXMgdGhlIG1vc3QgcmVjZW50IFdpbjMyCisgICAgICAgZXJyb3IgY29kZSAoYW5kIGZlb2YoKSByZXR1cm5zIFRSVUUpLgorICAgICAgIFdpbjl4OiBDdHJsK0Mgc2VlbXMgdG8gaGF2ZSBubyBlZmZlY3Qgb24gZmdldHMoKSByZXR1cm5pbmcKKyAgICAgICBlYXJseSAtIHRoZSBzaWduYWwgaGFuZGxlciBpcyBjYWxsZWQsIGJ1dCB0aGUgZmdldHMoKQorICAgICAgIG9ubHkgcmV0dXJucyAibm9ybWFsbHkiIChpZSwgd2hlbiBFbnRlciBoaXQgb3IgZmVvZigpKQorICAgICovCisgICAgaWYgKEdldExhc3RFcnJvcigpPT1FUlJPUl9PUEVSQVRJT05fQUJPUlRFRCkgeworICAgICAgICAvKiBTaWduYWxzIGNvbWUgYXN5bmNocm9ub3VzbHksIHNvIHdlIHNsZWVwIGEgYnJpZWYKKyAgICAgICAgICAgbW9tZW50IGJlZm9yZSBjaGVja2luZyBpZiB0aGUgaGFuZGxlciBoYXMgYmVlbgorICAgICAgICAgICB0cmlnZ2VyZWQgKHdlIGNhbnQganVzdCByZXR1cm4gMSBiZWZvcmUgdGhlCisgICAgICAgICAgIHNpZ25hbCBoYW5kbGVyIGhhcyBiZWVuIGNhbGxlZCwgYXMgdGhlIGxhdGVyCisgICAgICAgICAgIHNpZ25hbCBtYXkgYmUgdHJlYXRlZCBhcyBhIHNlcGFyYXRlIGludGVycnVwdCkuCiAgICAgICAgICovCi0gICAgICAgIGlmIChHZXRMYXN0RXJyb3IoKT09RVJST1JfT1BFUkFUSU9OX0FCT1JURUQpIHsKLSAgICAgICAgICAgIC8qIFNpZ25hbHMgY29tZSBhc3luY2hyb25vdXNseSwgc28gd2Ugc2xlZXAgYSBicmllZgotICAgICAgICAgICAgICAgbW9tZW50IGJlZm9yZSBjaGVja2luZyBpZiB0aGUgaGFuZGxlciBoYXMgYmVlbgotICAgICAgICAgICAgICAgdHJpZ2dlcmVkICh3ZSBjYW50IGp1c3QgcmV0dXJuIDEgYmVmb3JlIHRoZQotICAgICAgICAgICAgICAgc2lnbmFsIGhhbmRsZXIgaGFzIGJlZW4gY2FsbGVkLCBhcyB0aGUgbGF0ZXIKLSAgICAgICAgICAgICAgIHNpZ25hbCBtYXkgYmUgdHJlYXRlZCBhcyBhIHNlcGFyYXRlIGludGVycnVwdCkuCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgU2xlZXAoMSk7Ci0gICAgICAgICAgICBpZiAoUHlPU19JbnRlcnJ1cHRPY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8qIEludGVycnVwdCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogRWl0aGVyIHRoZSBzbGVlcCB3YXNuJ3QgbG9uZyBlbm91Z2ggKG5lZWQgYQotICAgICAgICAgICAgICAgc2hvcnQgbG9vcCByZXRyeWluZz8pIG9yIG5vdCBpbnRlcnJ1cHRlZCBhdCBhbGwKLSAgICAgICAgICAgICAgIChpbiB3aGljaCBjYXNlIHdlIHNob3VsZCByZXZpc2l0IHRoZSB3aG9sZSB0aGluZyEpCi0gICAgICAgICAgICAgICBMb2dnaW5nIHNvbWUgd2FybmluZyB3b3VsZCBiZSBuaWNlLiAgYXNzZXJ0IGlzIG5vdAotICAgICAgICAgICAgICAgdmlhYmxlIGFzIHVuZGVyIHRoZSBkZWJ1Z2dlciwgdGhlIHZhcmlvdXMgZGlhbG9ncwotICAgICAgICAgICAgICAgbWVhbiB0aGUgY29uZGl0aW9uIGlzIG5vdCB0cnVlLgotICAgICAgICAgICAgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KLSAgICAgICAgaWYgKGZlb2YoZnApKSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7IC8qIEVPRiAqLwotICAgICAgICB9Ci0jaWZkZWYgRUlOVFIKLSAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7Ci0gICAgICAgICAgICBpbnQgczsKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICAgICAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQoX1B5T1NfUmVhZGxpbmVUU3RhdGUpOwotI2VuZGlmCi0gICAgICAgICAgICBzID0gUHlFcnJfQ2hlY2tTaWduYWxzKCk7Ci0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICAgICAgICAgIFB5RXZhbF9TYXZlVGhyZWFkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChzIDwgMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgU2xlZXAoMSk7CiAgICAgICAgIGlmIChQeU9TX0ludGVycnVwdE9jY3VycmVkKCkpIHsKICAgICAgICAgICAgIHJldHVybiAxOyAvKiBJbnRlcnJ1cHQgKi8KICAgICAgICAgfQotICAgICAgICByZXR1cm4gLTI7IC8qIEVycm9yICovCisgICAgICAgIC8qIEVpdGhlciB0aGUgc2xlZXAgd2Fzbid0IGxvbmcgZW5vdWdoIChuZWVkIGEKKyAgICAgICAgICAgc2hvcnQgbG9vcCByZXRyeWluZz8pIG9yIG5vdCBpbnRlcnJ1cHRlZCBhdCBhbGwKKyAgICAgICAgICAgKGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIHJldmlzaXQgdGhlIHdob2xlIHRoaW5nISkKKyAgICAgICAgICAgTG9nZ2luZyBzb21lIHdhcm5pbmcgd291bGQgYmUgbmljZS4gIGFzc2VydCBpcyBub3QKKyAgICAgICAgICAgdmlhYmxlIGFzIHVuZGVyIHRoZSBkZWJ1Z2dlciwgdGhlIHZhcmlvdXMgZGlhbG9ncworICAgICAgICAgICBtZWFuIHRoZSBjb25kaXRpb24gaXMgbm90IHRydWUuCisgICAgICAgICovCiAgICAgfQotICAgIC8qIE5PVFJFQUNIRUQgKi8KKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCisgICAgaWYgKGZlb2YoZnApKSB7CisgICAgICAgIHJldHVybiAtMTsgLyogRU9GICovCisgICAgfQorI2lmZGVmIEVJTlRSCisgICAgaWYgKGVycm5vID09IEVJTlRSKSB7CisgICAgICAgIGludCBzOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgICAgIFB5RXZhbF9SZXN0b3JlVGhyZWFkKF9QeU9TX1JlYWRsaW5lVFN0YXRlKTsKKyNlbmRpZgorICAgICAgICBzID0gUHlFcnJfQ2hlY2tTaWduYWxzKCk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICAgICAgUHlFdmFsX1NhdmVUaHJlYWQoKTsKKyNlbmRpZgorICAgICAgICBpZiAocyA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgaWYgKFB5T1NfSW50ZXJydXB0T2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gMTsgLyogSW50ZXJydXB0ICovCisgICAgfQorICAgIHJldHVybiAtMjsgLyogRXJyb3IgKi8KIH0KIAogCmRpZmYgLS1naXQgYS9QYXJzZXIvcGFyc2V0b2suYyBiL1BhcnNlci9wYXJzZXRvay5jCmluZGV4IGNhZDdhODAuLmU4ZDM5NmEgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wYXJzZXRvay5jCisrKyBiL1BhcnNlci9wYXJzZXRvay5jCkBAIC01MSw3ICs1MSw3IEBACiAKICAgICBpbml0ZXJyKGVycl9yZXQsIGZpbGVuYW1lKTsKIAotICAgIGlmICgodG9rID0gUHlUb2tlbml6ZXJfRnJvbVN0cmluZyhzKSkgPT0gTlVMTCkgeworICAgIGlmICgodG9rID0gUHlUb2tlbml6ZXJfRnJvbVN0cmluZyhzLCBzdGFydCA9PSBmaWxlX2lucHV0KSkgPT0gTlVMTCkgewogICAgICAgICBlcnJfcmV0LT5lcnJvciA9IFB5RXJyX09jY3VycmVkKCkgPyBFX0RFQ09ERSA6IEVfTk9NRU07CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI0MywxNiArMjQzLDI0IEBACiAgICAgICAgICAgICBlcnJfcmV0LT50ZXh0ID0gdGV4dDsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAodG9rLT5lbmNvZGluZyAhPSBOVUxMKSB7CisgICAgICAgIC8qICdub2Rlcy0+bl9zdHInIHVzZXMgUHlPYmplY3RfKiwgd2hpbGUgJ3Rvay0+ZW5jb2RpbmcnIHdhcworICAgICAgICAgKiBhbGxvY2F0ZWQgdXNpbmcgUHlNZW1fCisgICAgICAgICAqLwogICAgICAgICBub2RlKiByID0gUHlOb2RlX05ldyhlbmNvZGluZ19kZWNsKTsKLSAgICAgICAgaWYgKCFyKSB7CisgICAgICAgIGlmIChyKQorICAgICAgICAgICAgci0+bl9zdHIgPSBQeU9iamVjdF9NQUxMT0Moc3RybGVuKHRvay0+ZW5jb2RpbmcpKzEpOworICAgICAgICBpZiAoIXIgfHwgIXItPm5fc3RyKSB7CiAgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfTk9NRU07CisgICAgICAgICAgICBpZiAocikKKyAgICAgICAgICAgICAgICBQeU9iamVjdF9GUkVFKHIpOwogICAgICAgICAgICAgbiA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KLSAgICAgICAgci0+bl9zdHIgPSB0b2stPmVuY29kaW5nOworICAgICAgICBzdHJjcHkoci0+bl9zdHIsIHRvay0+ZW5jb2RpbmcpOworICAgICAgICBQeU1lbV9GUkVFKHRvay0+ZW5jb2RpbmcpOworICAgICAgICB0b2stPmVuY29kaW5nID0gTlVMTDsKICAgICAgICAgci0+bl9uY2hpbGRyZW4gPSAxOwogICAgICAgICByLT5uX2NoaWxkID0gbjsKLSAgICAgICAgdG9rLT5lbmNvZGluZyA9IE5VTEw7CiAgICAgICAgIG4gPSByOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvUGFyc2VyL3Rva2VuaXplci5jIGIvUGFyc2VyL3Rva2VuaXplci5jCmluZGV4IGEwOGYxODMuLmVlNjMxM2IgMTAwNjQ0Ci0tLSBhL1BhcnNlci90b2tlbml6ZXIuYworKysgYi9QYXJzZXIvdG9rZW5pemVyLmMKQEAgLTkyLDcgKzkyLDYgQEAKICAgICAiPE5fVE9LRU5TPiIKIH07CiAKLQogLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHRva19zdGF0ZSBzdHJ1Y3R1cmUgKi8KIAogc3RhdGljIHN0cnVjdCB0b2tfc3RhdGUgKgpAQCAtMTA1LDYgKzEwNCw3IEBACiAgICAgdG9rLT5idWYgPSB0b2stPmN1ciA9IHRvay0+ZW5kID0gdG9rLT5pbnAgPSB0b2stPnN0YXJ0ID0gTlVMTDsKICAgICB0b2stPmRvbmUgPSBFX09LOwogICAgIHRvay0+ZnAgPSBOVUxMOworICAgIHRvay0+aW5wdXQgPSBOVUxMOwogICAgIHRvay0+dGFic2l6ZSA9IFRBQlNJWkU7CiAgICAgdG9rLT5pbmRlbnQgPSAwOwogICAgIHRvay0+aW5kc3RhY2tbMF0gPSAwOwpAQCAtMTMwLDYgKzEzMCwxNyBAQAogICAgIHJldHVybiB0b2s7CiB9CiAKK3N0YXRpYyBjaGFyICoKK25ld19zdHJpbmcoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBsZW4pCit7CisgICAgY2hhciogcmVzdWx0ID0gKGNoYXIgKilQeU1lbV9NQUxMT0MobGVuICsgMSk7CisgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7CisgICAgICAgIG1lbWNweShyZXN1bHQsIHMsIGxlbik7CisgICAgICAgIHJlc3VsdFtsZW5dID0gJ1wwJzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogI2lmZGVmIFBHRU4KIAogc3RhdGljIGNoYXIgKgpAQCAtMTQ0LDEwICsxNTUsMTAgQEAKICAgICByZXR1cm4gZmVvZih0b2stPmZwKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKgotZGVjb2RlX3N0cihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKK3N0YXRpYyBjaGFyICoKK2RlY29kZV9zdHIoY29uc3QgY2hhciAqc3RyLCBpbnQgZXhlY19pbnB1dCwgc3RydWN0IHRva19zdGF0ZSAqdG9rKQogewotICAgIHJldHVybiBzdHI7CisgICAgcmV0dXJuIG5ld19zdHJpbmcoc3RyLCBzdHJsZW4oc3RyKSk7CiB9CiAKICNlbHNlIC8qIFBHRU4gKi8KQEAgLTE2MiwxNiArMTczLDYgQEAKICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogYXMgaWYgaXQgd2VyZSBFT0YgKi8KIH0KIAotc3RhdGljIGNoYXIgKgotbmV3X3N0cmluZyhjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICBjaGFyKiByZXN1bHQgPSAoY2hhciAqKVB5TWVtX01BTExPQyhsZW4gKyAxKTsKLSAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgbWVtY3B5KHJlc3VsdCwgcywgbGVuKTsKLSAgICAgICAgcmVzdWx0W2xlbl0gPSAnXDAnOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBzdGF0aWMgY2hhciAqCiBnZXRfbm9ybWFsX25hbWUoY2hhciAqcykgICAgICAgIC8qIGZvciB1dGYtOCBhbmQgbGF0aW4tMSAqLwpAQCAtMTgwLDIwICsxODEsMjYgQEAKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgewogICAgICAgICBpbnQgYyA9IHNbaV07Ci0gICAgICAgIGlmIChjID09ICdcMCcpIGJyZWFrOwotICAgICAgICBlbHNlIGlmIChjID09ICdfJykgYnVmW2ldID0gJy0nOwotICAgICAgICBlbHNlIGJ1ZltpXSA9IHRvbG93ZXIoYyk7CisgICAgICAgIGlmIChjID09ICdcMCcpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnXycpCisgICAgICAgICAgICBidWZbaV0gPSAnLSc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJ1ZltpXSA9IHRvbG93ZXIoYyk7CiAgICAgfQogICAgIGJ1ZltpXSA9ICdcMCc7CiAgICAgaWYgKHN0cmNtcChidWYsICJ1dGYtOCIpID09IDAgfHwKLSAgICAgICAgc3RybmNtcChidWYsICJ1dGYtOC0iLCA2KSA9PSAwKSByZXR1cm4gInV0Zi04IjsKKyAgICAgICAgc3RybmNtcChidWYsICJ1dGYtOC0iLCA2KSA9PSAwKQorICAgICAgICByZXR1cm4gInV0Zi04IjsKICAgICBlbHNlIGlmIChzdHJjbXAoYnVmLCAibGF0aW4tMSIpID09IDAgfHwKICAgICAgICAgICAgICBzdHJjbXAoYnVmLCAiaXNvLTg4NTktMSIpID09IDAgfHwKICAgICAgICAgICAgICBzdHJjbXAoYnVmLCAiaXNvLWxhdGluLTEiKSA9PSAwIHx8CiAgICAgICAgICAgICAgc3RybmNtcChidWYsICJsYXRpbi0xLSIsIDgpID09IDAgfHwKICAgICAgICAgICAgICBzdHJuY21wKGJ1ZiwgImlzby04ODU5LTEtIiwgMTEpID09IDAgfHwKLSAgICAgICAgICAgICBzdHJuY21wKGJ1ZiwgImlzby1sYXRpbi0xLSIsIDEyKSA9PSAwKSByZXR1cm4gImlzby04ODU5LTEiOwotICAgIGVsc2UgcmV0dXJuIHM7CisgICAgICAgICAgICAgc3RybmNtcChidWYsICJpc28tbGF0aW4tMS0iLCAxMikgPT0gMCkKKyAgICAgICAgcmV0dXJuICJpc28tODg1OS0xIjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBzOwogfQogCiAvKiBSZXR1cm4gdGhlIGNvZGluZyBzcGVjIGluIFMsIG9yIE5VTEwgaWYgbm9uZSBpcyBmb3VuZC4gICovCkBAIC0yMjIsNyArMjI5LDcgQEAKICAgICAgICAgICAgIH0gd2hpbGUgKHRbMF0gPT0gJ1x4MjAnIHx8IHRbMF0gPT0gJ1x0Jyk7CiAKICAgICAgICAgICAgIGJlZ2luID0gdDsKLSAgICAgICAgICAgIHdoaWxlIChpc2FsbnVtKFB5X0NIQVJNQVNLKHRbMF0pKSB8fAorICAgICAgICAgICAgd2hpbGUgKFB5X0lTQUxOVU0odFswXSkgfHwKICAgICAgICAgICAgICAgICAgICB0WzBdID09ICctJyB8fCB0WzBdID09ICdfJyB8fCB0WzBdID09ICcuJykKICAgICAgICAgICAgICAgICB0Kys7CiAKQEAgLTQxNyw3ICs0MjQsOCBAQAogICAgIG1lbWNweShzLCBzdHIsIHV0ZjhsZW4pOwogICAgIHNbdXRmOGxlbl0gPSAnXDAnOwogICAgIFB5X0RFQ1JFRih1dGY4KTsKLSAgICBpZiAodXRmOGxlbiA9PSAwKSByZXR1cm4gTlVMTDsgLyogRU9GICovCisgICAgaWYgKHV0ZjhsZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIEVPRiAqLwogICAgIHJldHVybiBzOwogI2VuZGlmCiB9CkBAIC01ODksMTcgKzU5Nyw2MiBAQAogfQogI2VuZGlmCiAKKworc3RhdGljIGNoYXIgKgordHJhbnNsYXRlX25ld2xpbmVzKGNvbnN0IGNoYXIgKnMsIGludCBleGVjX2lucHV0LCBzdHJ1Y3QgdG9rX3N0YXRlICp0b2spIHsKKyAgICBpbnQgc2tpcF9uZXh0X2xmID0gMCwgbmVlZGVkX2xlbmd0aCA9IHN0cmxlbihzKSArIDIsIGZpbmFsX2xlbmd0aDsKKyAgICBjaGFyICpidWYsICpjdXJyZW50OworICAgIGNoYXIgYyA9ICdcMCc7CisgICAgYnVmID0gUHlNZW1fTUFMTE9DKG5lZWRlZF9sZW5ndGgpOworICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICB0b2stPmRvbmUgPSBFX05PTUVNOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZm9yIChjdXJyZW50ID0gYnVmOyAqczsgcysrLCBjdXJyZW50KyspIHsKKyAgICAgICAgYyA9ICpzOworICAgICAgICBpZiAoc2tpcF9uZXh0X2xmKSB7CisgICAgICAgICAgICBza2lwX25leHRfbGYgPSAwOworICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykgeworICAgICAgICAgICAgICAgIGMgPSAqKytzOworICAgICAgICAgICAgICAgIGlmICghYykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgc2tpcF9uZXh0X2xmID0gMTsKKyAgICAgICAgICAgIGMgPSAnXG4nOworICAgICAgICB9CisgICAgICAgICpjdXJyZW50ID0gYzsKKyAgICB9CisgICAgLyogSWYgdGhpcyBpcyBleGVjIGlucHV0LCBhZGQgYSBuZXdsaW5lIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBpZgorICAgICAgIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5LiAqLworICAgIGlmIChleGVjX2lucHV0ICYmIGMgIT0gJ1xuJykgeworICAgICAgICAqY3VycmVudCA9ICdcbic7CisgICAgICAgIGN1cnJlbnQrKzsKKyAgICB9CisgICAgKmN1cnJlbnQgPSAnXDAnOworICAgIGZpbmFsX2xlbmd0aCA9IGN1cnJlbnQgLSBidWYgKyAxOworICAgIGlmIChmaW5hbF9sZW5ndGggPCBuZWVkZWRfbGVuZ3RoICYmIGZpbmFsX2xlbmd0aCkKKyAgICAgICAgLyogc2hvdWxkIG5ldmVyIGZhaWwgKi8KKyAgICAgICAgYnVmID0gUHlNZW1fUkVBTExPQyhidWYsIGZpbmFsX2xlbmd0aCk7CisgICAgcmV0dXJuIGJ1ZjsKK30KKwogLyogRGVjb2RlIGEgYnl0ZSBzdHJpbmcgU1RSIGZvciB1c2UgYXMgdGhlIGJ1ZmZlciBvZiBUT0suCiAgICBMb29rIGZvciBlbmNvZGluZyBkZWNsYXJhdGlvbnMgaW5zaWRlIFNUUiwgYW5kIHJlY29yZCB0aGVtCiAgICBpbnNpZGUgVE9LLiAgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKgotZGVjb2RlX3N0cihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKK2RlY29kZV9zdHIoY29uc3QgY2hhciAqaW5wdXQsIGludCBzaW5nbGUsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKIHsKICAgICBQeU9iamVjdCogdXRmOCA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqc3RyOwogICAgIGNvbnN0IGNoYXIgKnM7CiAgICAgY29uc3QgY2hhciAqbmV3bFsyXSA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgbGluZW5vID0gMDsKKyAgICB0b2stPmlucHV0ID0gc3RyID0gdHJhbnNsYXRlX25ld2xpbmVzKGlucHV0LCBzaW5nbGUsIHRvayk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICB0b2stPmVuYyA9IE5VTEw7CiAgICAgdG9rLT5zdHIgPSBzdHI7CiAgICAgaWYgKCFjaGVja19ib20oYnVmX2dldGMsIGJ1Zl91bmdldGMsIGJ1Zl9zZXRyZWFkbCwgdG9rKSkKQEAgLTYzOSwxMSArNjkyLDggQEAKICAgICBpZiAodG9rLT5lbmMgIT0gTlVMTCkgewogICAgICAgICBhc3NlcnQodXRmOCA9PSBOVUxMKTsKICAgICAgICAgdXRmOCA9IHRyYW5zbGF0ZV9pbnRvX3V0Zjgoc3RyLCB0b2stPmVuYyk7Ci0gICAgICAgIGlmICh1dGY4ID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKLSAgICAgICAgICAgICAgICAidW5rbm93biBlbmNvZGluZzogJXMiLCB0b2stPmVuYyk7CisgICAgICAgIGlmICh1dGY4ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmV0KHRvayk7Ci0gICAgICAgIH0KICAgICAgICAgc3RyID0gUHlTdHJpbmdfQXNTdHJpbmcodXRmOCk7CiAgICAgfQogI2VuZGlmCkBAIC02NTcsMTIgKzcwNywxMiBAQAogLyogU2V0IHVwIHRva2VuaXplciBmb3Igc3RyaW5nICovCiAKIHN0cnVjdCB0b2tfc3RhdGUgKgotUHlUb2tlbml6ZXJfRnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIpCitQeVRva2VuaXplcl9Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGV4ZWNfaW5wdXQpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rID0gdG9rX25ldygpOwogICAgIGlmICh0b2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgc3RyID0gKGNoYXIgKilkZWNvZGVfc3RyKHN0ciwgdG9rKTsKKyAgICBzdHIgPSAoY2hhciAqKWRlY29kZV9zdHIoc3RyLCBleGVjX2lucHV0LCB0b2spOwogICAgIGlmIChzdHIgPT0gTlVMTCkgewogICAgICAgICBQeVRva2VuaXplcl9GcmVlKHRvayk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzA4LDYgKzc1OCw4IEBACiAjZW5kaWYKICAgICBpZiAodG9rLT5mcCAhPSBOVUxMICYmIHRvay0+YnVmICE9IE5VTEwpCiAgICAgICAgIFB5TWVtX0ZSRUUodG9rLT5idWYpOworICAgIGlmICh0b2stPmlucHV0KQorICAgICAgICBQeU1lbV9GUkVFKChjaGFyICopdG9rLT5pbnB1dCk7CiAgICAgUHlNZW1fRlJFRSh0b2spOwogfQogCkBAIC05NTMsNyArMTAwNSw3IEBACiB7CiAgICAgaWYgKGMgIT0gRU9GKSB7CiAgICAgICAgIGlmICgtLXRvay0+Y3VyIDwgdG9rLT5idWYpCi0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJ0b2tfYmFja3VwOiBiZWdpbiBvZiBidWZmZXIiKTsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInRva19iYWNrdXA6IGJlZ2lubmluZyBvZiBidWZmZXIiKTsKICAgICAgICAgaWYgKCp0b2stPmN1ciAhPSBjKQogICAgICAgICAgICAgKnRvay0+Y3VyID0gYzsKICAgICB9CkBAIC0xMTMyLDcgKzExODQsNiBAQAogICAgIHJldHVybiAwOwogfQogCi0KIC8qIEdldCBuZXh0IHRva2VuLCBhZnRlciBzcGFjZSBzdHJpcHBpbmcgZXRjLiAqLwogCiBzdGF0aWMgaW50CkBAIC0xMjg4LDcgKzEzMzksNyBAQAogICAgIH0KIAogICAgIC8qIElkZW50aWZpZXIgKG1vc3QgZnJlcXVlbnQgdG9rZW4hKSAqLwotICAgIGlmIChpc2FscGhhKGMpIHx8IGMgPT0gJ18nKSB7CisgICAgaWYgKFB5X0lTQUxQSEEoYykgfHwgYyA9PSAnXycpIHsKICAgICAgICAgLyogUHJvY2VzcyByIiIsIHUiIiBhbmQgdXIiIiAqLwogICAgICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICAgY2FzZSAnYic6CkBAIC0xMzE0LDcgKzEzNjUsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gbGV0dGVyX3F1b3RlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKGlzYWxudW0oYykgfHwgYyA9PSAnXycpIHsKKyAgICAgICAgd2hpbGUgKGMgIT0gRU9GICYmIChQeV9JU0FMTlVNKGMpIHx8IGMgPT0gJ18nKSkgewogICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwogICAgICAgICB9CiAgICAgICAgIHRva19iYWNrdXAodG9rLCBjKTsKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuaCBiL1BhcnNlci90b2tlbml6ZXIuaAppbmRleCAxOWFhNzAyLi5mMTVlMjUyIDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmgKKysrIGIvUGFyc2VyL3Rva2VuaXplci5oCkBAIC01Miw5ICs1MiwxMCBAQAogI2VuZGlmCiAgICAgY29uc3QgY2hhciogZW5jOwogICAgIGNvbnN0IGNoYXIqIHN0cjsKKyAgICBjb25zdCBjaGFyKiBpbnB1dDsgLyogVG9rZW5pemVyJ3MgbmV3bGluZSB0cmFuc2xhdGVkIGNvcHkgb2YgdGhlIHN0cmluZy4gKi8KIH07CiAKLWV4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKik7CitleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVN0cmluZyhjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqLCBjaGFyICosIGNoYXIgKik7CiBleHRlcm4gdm9pZCBQeVRva2VuaXplcl9GcmVlKHN0cnVjdCB0b2tfc3RhdGUgKik7CiBleHRlcm4gaW50IFB5VG9rZW5pemVyX0dldChzdHJ1Y3QgdG9rX3N0YXRlICosIGNoYXIgKiosIGNoYXIgKiopOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL1B5dGhvbi1hc3QuYyBiL1B5dGhvbi9QeXRob24tYXN0LmMKaW5kZXggYmM2Y2NhMC4uNzAxYWM0OCAxMDA2NDQKLS0tIGEvUHl0aG9uL1B5dGhvbi1hc3QuYworKysgYi9QeXRob24vUHl0aG9uLWFzdC5jCkBAIC0yLDcgKzIsNyBAQAogCiAKIC8qCi0gICBfX3ZlcnNpb25fXyA2MjA0Ny4KKyAgIF9fdmVyc2lvbl9fIDgyMTYwLgogCiAgICBUaGlzIG1vZHVsZSBtdXN0IGJlIGNvbW1pdHRlZCBzZXBhcmF0ZWx5IGFmdGVyIGVhY2ggQVNUIGdyYW1tYXIgY2hhbmdlOwogICAgVGhlIF9fdmVyc2lvbl9fIG51bWJlciBpcyBzZXQgdG8gdGhlIHJldmlzaW9uIG51bWJlciBvZiB0aGUgY29tbWl0CkBAIC0xODgsMTEgKzE4OCwyNiBAQAogICAgICAgICAia2V5cyIsCiAgICAgICAgICJ2YWx1ZXMiLAogfTsKK3N0YXRpYyBQeVR5cGVPYmplY3QgKlNldF90eXBlOworc3RhdGljIGNoYXIgKlNldF9maWVsZHNbXT17CisgICAgICAgICJlbHRzIiwKK307CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpMaXN0Q29tcF90eXBlOwogc3RhdGljIGNoYXIgKkxpc3RDb21wX2ZpZWxkc1tdPXsKICAgICAgICAgImVsdCIsCiAgICAgICAgICJnZW5lcmF0b3JzIiwKIH07CitzdGF0aWMgUHlUeXBlT2JqZWN0ICpTZXRDb21wX3R5cGU7CitzdGF0aWMgY2hhciAqU2V0Q29tcF9maWVsZHNbXT17CisgICAgICAgICJlbHQiLAorICAgICAgICAiZ2VuZXJhdG9ycyIsCit9Oworc3RhdGljIFB5VHlwZU9iamVjdCAqRGljdENvbXBfdHlwZTsKK3N0YXRpYyBjaGFyICpEaWN0Q29tcF9maWVsZHNbXT17CisgICAgICAgICJrZXkiLAorICAgICAgICAidmFsdWUiLAorICAgICAgICAiZ2VuZXJhdG9ycyIsCit9Owogc3RhdGljIFB5VHlwZU9iamVjdCAqR2VuZXJhdG9yRXhwX3R5cGU7CiBzdGF0aWMgY2hhciAqR2VuZXJhdG9yRXhwX2ZpZWxkc1tdPXsKICAgICAgICAgImVsdCIsCkBAIC01MTIsOCArNTI3LDkgQEAKIHsKICAgICBpbnQgaSwgcmVzdWx0OwogICAgIFB5T2JqZWN0ICpzLCAqbCA9IFB5VHVwbGVfTmV3KG51bV9maWVsZHMpOwotICAgIGlmICghbCkgcmV0dXJuIDA7Ci0gICAgZm9yKGkgPSAwOyBpIDwgbnVtX2ZpZWxkczsgaSsrKSB7CisgICAgaWYgKCFsKQorICAgICAgICByZXR1cm4gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2ZpZWxkczsgaSsrKSB7CiAgICAgICAgIHMgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGF0dHJzW2ldKTsKICAgICAgICAgaWYgKCFzKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobCk7CkBAIC03MTgsOCArNzM0LDE0IEBACiAgICAgICAgIGlmICghSWZFeHBfdHlwZSkgcmV0dXJuIDA7CiAgICAgICAgIERpY3RfdHlwZSA9IG1ha2VfdHlwZSgiRGljdCIsIGV4cHJfdHlwZSwgRGljdF9maWVsZHMsIDIpOwogICAgICAgICBpZiAoIURpY3RfdHlwZSkgcmV0dXJuIDA7CisgICAgICAgIFNldF90eXBlID0gbWFrZV90eXBlKCJTZXQiLCBleHByX3R5cGUsIFNldF9maWVsZHMsIDEpOworICAgICAgICBpZiAoIVNldF90eXBlKSByZXR1cm4gMDsKICAgICAgICAgTGlzdENvbXBfdHlwZSA9IG1ha2VfdHlwZSgiTGlzdENvbXAiLCBleHByX3R5cGUsIExpc3RDb21wX2ZpZWxkcywgMik7CiAgICAgICAgIGlmICghTGlzdENvbXBfdHlwZSkgcmV0dXJuIDA7CisgICAgICAgIFNldENvbXBfdHlwZSA9IG1ha2VfdHlwZSgiU2V0Q29tcCIsIGV4cHJfdHlwZSwgU2V0Q29tcF9maWVsZHMsIDIpOworICAgICAgICBpZiAoIVNldENvbXBfdHlwZSkgcmV0dXJuIDA7CisgICAgICAgIERpY3RDb21wX3R5cGUgPSBtYWtlX3R5cGUoIkRpY3RDb21wIiwgZXhwcl90eXBlLCBEaWN0Q29tcF9maWVsZHMsIDMpOworICAgICAgICBpZiAoIURpY3RDb21wX3R5cGUpIHJldHVybiAwOwogICAgICAgICBHZW5lcmF0b3JFeHBfdHlwZSA9IG1ha2VfdHlwZSgiR2VuZXJhdG9yRXhwIiwgZXhwcl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JFeHBfZmllbGRzLCAyKTsKICAgICAgICAgaWYgKCFHZW5lcmF0b3JFeHBfdHlwZSkgcmV0dXJuIDA7CkBAIC0xMzMwLDExICsxMzUyLDYgQEAKICAgICAgICAgICAgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgICAgIHN0bXRfdHkgcDsKLSAgICAgICAgaWYgKCFtb2R1bGUpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgSW1wb3J0RnJvbSIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAgICAgICAgIHAgPSAoc3RtdF90eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CiAgICAgICAgIGlmICghcCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE1OTUsNiArMTYxMiwyMCBAQAogfQogCiBleHByX3R5CitTZXQoYXNkbF9zZXEgKiBlbHRzLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgICAgIGV4cHJfdHkgcDsKKyAgICAgICAgcCA9IChleHByX3R5KVB5QXJlbmFfTWFsbG9jKGFyZW5hLCBzaXplb2YoKnApKTsKKyAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBwLT5raW5kID0gU2V0X2tpbmQ7CisgICAgICAgIHAtPnYuU2V0LmVsdHMgPSBlbHRzOworICAgICAgICBwLT5saW5lbm8gPSBsaW5lbm87CisgICAgICAgIHAtPmNvbF9vZmZzZXQgPSBjb2xfb2Zmc2V0OworICAgICAgICByZXR1cm4gcDsKK30KKworZXhwcl90eQogTGlzdENvbXAoZXhwcl90eSBlbHQsIGFzZGxfc2VxICogZ2VuZXJhdG9ycywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsCiAgICAgICAgICBQeUFyZW5hICphcmVuYSkKIHsKQEAgLTE2MTYsNiArMTY0Nyw1NCBAQAogfQogCiBleHByX3R5CitTZXRDb21wKGV4cHJfdHkgZWx0LCBhc2RsX3NlcSAqIGdlbmVyYXRvcnMsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hCisgICAgICAgICphcmVuYSkKK3sKKyAgICAgICAgZXhwcl90eSBwOworICAgICAgICBpZiAoIWVsdCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQgZWx0IGlzIHJlcXVpcmVkIGZvciBTZXRDb21wIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcCA9IChleHByX3R5KVB5QXJlbmFfTWFsbG9jKGFyZW5hLCBzaXplb2YoKnApKTsKKyAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBwLT5raW5kID0gU2V0Q29tcF9raW5kOworICAgICAgICBwLT52LlNldENvbXAuZWx0ID0gZWx0OworICAgICAgICBwLT52LlNldENvbXAuZ2VuZXJhdG9ycyA9IGdlbmVyYXRvcnM7CisgICAgICAgIHAtPmxpbmVubyA9IGxpbmVubzsKKyAgICAgICAgcC0+Y29sX29mZnNldCA9IGNvbF9vZmZzZXQ7CisgICAgICAgIHJldHVybiBwOworfQorCitleHByX3R5CitEaWN0Q29tcChleHByX3R5IGtleSwgZXhwcl90eSB2YWx1ZSwgYXNkbF9zZXEgKiBnZW5lcmF0b3JzLCBpbnQgbGluZW5vLCBpbnQKKyAgICAgICAgIGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQoreworICAgICAgICBleHByX3R5IHA7CisgICAgICAgIGlmICgha2V5KSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCBrZXkgaXMgcmVxdWlyZWQgZm9yIERpY3RDb21wIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQgdmFsdWUgaXMgcmVxdWlyZWQgZm9yIERpY3RDb21wIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcCA9IChleHByX3R5KVB5QXJlbmFfTWFsbG9jKGFyZW5hLCBzaXplb2YoKnApKTsKKyAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBwLT5raW5kID0gRGljdENvbXBfa2luZDsKKyAgICAgICAgcC0+di5EaWN0Q29tcC5rZXkgPSBrZXk7CisgICAgICAgIHAtPnYuRGljdENvbXAudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcC0+di5EaWN0Q29tcC5nZW5lcmF0b3JzID0gZ2VuZXJhdG9yczsKKyAgICAgICAgcC0+bGluZW5vID0gbGluZW5vOworICAgICAgICBwLT5jb2xfb2Zmc2V0ID0gY29sX29mZnNldDsKKyAgICAgICAgcmV0dXJuIHA7Cit9CisKK2V4cHJfdHkKIEdlbmVyYXRvckV4cChleHByX3R5IGVsdCwgYXNkbF9zZXEgKiBnZW5lcmF0b3JzLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwKICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKIHsKQEAgLTI1NzEsNiArMjY1MCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRfa2luZDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBQeVR5cGVfR2VuZXJpY05ldyhTZXRfdHlwZSwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPnYuU2V0LmVsdHMsIGFzdDJvYmpfZXhwcik7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcocmVzdWx0LCAiZWx0cyIsIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGlzdENvbXBfa2luZDoKICAgICAgICAgICAgICAgICByZXN1bHQgPSBQeVR5cGVfR2VuZXJpY05ldyhMaXN0Q29tcF90eXBlLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgZ290byBmYWlsZWQ7CkBAIC0yNTg2LDYgKzI2NzQsNDEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0Q29tcF9raW5kOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFB5VHlwZV9HZW5lcmljTmV3KFNldENvbXBfdHlwZSwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIHZhbHVlID0gYXN0Mm9ial9leHByKG8tPnYuU2V0Q29tcC5lbHQpOworICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKHJlc3VsdCwgImVsdCIsIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+di5TZXRDb21wLmdlbmVyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0Mm9ial9jb21wcmVoZW5zaW9uKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhyZXN1bHQsICJnZW5lcmF0b3JzIiwgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEaWN0Q29tcF9raW5kOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFB5VHlwZV9HZW5lcmljTmV3KERpY3RDb21wX3R5cGUsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT52LkRpY3RDb21wLmtleSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcocmVzdWx0LCAia2V5IiwgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT52LkRpY3RDb21wLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhyZXN1bHQsICJ2YWx1ZSIsIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+di5EaWN0Q29tcC5nZW5lcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzdDJvYmpfY29tcHJlaGVuc2lvbik7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcocmVzdWx0LCAiZ2VuZXJhdG9ycyIsIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2VuZXJhdG9yRXhwX2tpbmQ6CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoR2VuZXJhdG9yRXhwX3R5cGUsIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKQEAgLTQzNTksOCArNDQ4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHRtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBOVUxMOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJtb2R1bGVcIiBtaXNzaW5nIGZyb20gSW1wb3J0RnJvbSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBOVUxMOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhvYmosICJuYW1lcyIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzOwpAQCAtNDg2Niw2ICs0OTg4LDQyIEBACiAgICAgICAgICAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKVNldF90eXBlKTsKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNpbnN0YW5jZSkgeworICAgICAgICAgICAgICAgIGFzZGxfc2VxKiBlbHRzOworCisgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcob2JqLCAiZWx0cyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG9iaiwgImVsdHMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayh0bXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJTZXQgZmllbGQgXCJlbHRzXCIgbXVzdCBiZSBhIGxpc3QsIG5vdCBhICUuMjAwcyIsIHRtcC0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGVsdHMsIGksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImVsdHNcIiBtaXNzaW5nIGZyb20gU2V0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKm91dCA9IFNldChlbHRzLCBsaW5lbm8sIGNvbF9vZmZzZXQsIGFyZW5hKTsKKyAgICAgICAgICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopTGlzdENvbXBfdHlwZSk7CiAgICAgICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC00OTE1LDYgKzUwNzMsMTE4IEBACiAgICAgICAgICAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKVNldENvbXBfdHlwZSk7CisgICAgICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzaW5zdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBleHByX3R5IGVsdDsKKyAgICAgICAgICAgICAgICBhc2RsX3NlcSogZ2VuZXJhdG9yczsKKworICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKG9iaiwgImVsdCIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzOworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvYmosICJlbHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAmZWx0LCBhcmVuYSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZWx0XCIgbWlzc2luZyBmcm9tIFNldENvbXAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhvYmosICJnZW5lcmF0b3JzIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcob2JqLCAiZ2VuZXJhdG9ycyIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghUHlMaXN0X0NoZWNrKHRtcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIlNldENvbXAgZmllbGQgXCJnZW5lcmF0b3JzXCIgbXVzdCBiZSBhIGxpc3QsIG5vdCBhICUuMjAwcyIsIHRtcC0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl90eSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9jb21wcmVoZW5zaW9uKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGdlbmVyYXRvcnMsIGksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImdlbmVyYXRvcnNcIiBtaXNzaW5nIGZyb20gU2V0Q29tcCIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpvdXQgPSBTZXRDb21wKGVsdCwgZ2VuZXJhdG9ycywgbGluZW5vLCBjb2xfb2Zmc2V0LCBhcmVuYSk7CisgICAgICAgICAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKURpY3RDb21wX3R5cGUpOworICAgICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIGlmIChpc2luc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgZXhwcl90eSBrZXk7CisgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBhc2RsX3NlcSogZ2VuZXJhdG9yczsKKworICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKG9iaiwgImtleSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzOworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvYmosICJrZXkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAma2V5LCBhcmVuYSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia2V5XCIgbWlzc2luZyBmcm9tIERpY3RDb21wIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcob2JqLCAidmFsdWUiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcob2JqLCAidmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBOVUxMOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJ2YWx1ZVwiIG1pc3NpbmcgZnJvbSBEaWN0Q29tcCIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKG9iaiwgImdlbmVyYXRvcnMiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvYmosICJnZW5lcmF0b3JzIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2sodG1wKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRGljdENvbXAgZmllbGQgXCJnZW5lcmF0b3JzXCIgbXVzdCBiZSBhIGxpc3QsIG5vdCBhICUuMjAwcyIsIHRtcC0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl90eSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9jb21wcmVoZW5zaW9uKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGdlbmVyYXRvcnMsIGksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImdlbmVyYXRvcnNcIiBtaXNzaW5nIGZyb20gRGljdENvbXAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqb3V0ID0gRGljdENvbXAoa2V5LCB2YWx1ZSwgZ2VuZXJhdG9ycywgbGluZW5vLCBjb2xfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVuYSk7CisgICAgICAgICAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKUdlbmVyYXRvckV4cF90eXBlKTsKICAgICAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTYzMDAsNyArNjU3MCw3IEBACiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQVNUIiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpIDwgMCkgcmV0dXJuOwogICAgICAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5Q0ZfT05MWV9BU1QiLCBQeUNGX09OTFlfQVNUKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIl9fdmVyc2lvbl9fIiwgIjYyMDQ3IikgPCAwKQorICAgICAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIl9fdmVyc2lvbl9fIiwgIjgyMTYwIikgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJtb2QiLCAoUHlPYmplY3QqKW1vZF90eXBlKSA8IDApIHJldHVybjsKICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJNb2R1bGUiLCAoUHlPYmplY3QqKU1vZHVsZV90eXBlKSA8IDApCkBAIC02MzU3LDggKzY2MjcsMTMgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJJZkV4cCIsIChQeU9iamVjdCopSWZFeHBfdHlwZSkgPCAwKSByZXR1cm47CiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiRGljdCIsIChQeU9iamVjdCopRGljdF90eXBlKSA8IDApIHJldHVybjsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJTZXQiLCAoUHlPYmplY3QqKVNldF90eXBlKSA8IDApIHJldHVybjsKICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJMaXN0Q29tcCIsIChQeU9iamVjdCopTGlzdENvbXBfdHlwZSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlNldENvbXAiLCAoUHlPYmplY3QqKVNldENvbXBfdHlwZSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkRpY3RDb21wIiwgKFB5T2JqZWN0KilEaWN0Q29tcF90eXBlKSA8IDApCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiR2VuZXJhdG9yRXhwIiwKICAgICAgICAgICAgIChQeU9iamVjdCopR2VuZXJhdG9yRXhwX3R5cGUpIDwgMCkgcmV0dXJuOwogICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIllpZWxkIiwgKFB5T2JqZWN0KilZaWVsZF90eXBlKSA8IDApIHJldHVybjsKZGlmZiAtLWdpdCBhL1B5dGhvbi9fd2FybmluZ3MuYyBiL1B5dGhvbi9fd2FybmluZ3MuYwppbmRleCAzMzEzYzU5Li4xZGMyNTEyIDEwMDY0NAotLS0gYS9QeXRob24vX3dhcm5pbmdzLmMKKysrIGIvUHl0aG9uL193YXJuaW5ncy5jCkBAIC0xLDkgKzEsNyBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgImNvZGUuaCIgIC8qIEZvciBEZXByZWNhdGlvbldhcm5pbmcgYWJvdXQgYWRkaW5nICdsaW5lJy4gKi8KICNpbmNsdWRlICJmcmFtZW9iamVjdC5oIgogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJfd2FybmluZ3MiCi0jZGVmaW5lIERFRkFVTFRfQUNUSU9OX05BTUUgImRlZmF1bHRfYWN0aW9uIgogCiBQeURvY19TVFJWQVIod2FybmluZ3NfX2RvY19fLAogTU9EVUxFX05BTUUgIiBwcm92aWRlcyBiYXNpYyB3YXJuaW5nIGZpbHRlcmluZyBzdXBwb3J0LlxuIgpAQCAtMTMsNiArMTEsNyBAQAogICAgZ2V0X3dhcm5pbmdzX2F0dHIoKSB3aWxsIHJlc2V0IHRoZXNlIHZhcmlhYmxlcyBhY2NvcmRpbmdseS4gKi8KIHN0YXRpYyBQeU9iamVjdCAqX2ZpbHRlcnM7ICAvKiBMaXN0ICovCiBzdGF0aWMgUHlPYmplY3QgKl9vbmNlX3JlZ2lzdHJ5OyAgLyogRGljdCAqLworc3RhdGljIFB5T2JqZWN0ICpfZGVmYXVsdF9hY3Rpb247IC8qIFN0cmluZyAqLwogCiAKIHN0YXRpYyBpbnQKQEAgLTIyLDEwICsyMSwxMCBAQAogICAgIGludCByYzsKIAogICAgIGlmIChvYmogPT0gUHlfTm9uZSkKLSAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChvYmosICJtYXRjaCIsICJPIiwgYXJnKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gLTE7CiAKICAgICByYyA9IFB5T2JqZWN0X0lzVHJ1ZShyZXN1bHQpOwogICAgIFB5X0RFQ1JFRihyZXN1bHQpOwpAQCAtNDUsMTkgKzQ0LDE5IEBACiAgICAgaW50IHJlc3VsdDsKIAogICAgIGlmICh3YXJuaW5nc19zdHIgPT0gTlVMTCkgewotICAgIHdhcm5pbmdzX3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIndhcm5pbmdzIik7Ci0gICAgaWYgKHdhcm5pbmdzX3N0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgd2FybmluZ3Nfc3RyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygid2FybmluZ3MiKTsKKyAgICAgICAgaWYgKHdhcm5pbmdzX3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgYWxsX21vZHVsZXMgPSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCk7CiAgICAgcmVzdWx0ID0gUHlEaWN0X0NvbnRhaW5zKGFsbF9tb2R1bGVzLCB3YXJuaW5nc19zdHIpOwogICAgIGlmIChyZXN1bHQgPT0gLTEgfHwgcmVzdWx0ID09IDApCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgd2FybmluZ3NfbW9kdWxlID0gUHlEaWN0X0dldEl0ZW0oYWxsX21vZHVsZXMsIHdhcm5pbmdzX3N0cik7CiAgICAgaWYgKCFQeU9iamVjdF9IYXNBdHRyU3RyaW5nKHdhcm5pbmdzX21vZHVsZSwgYXR0cikpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcod2FybmluZ3NfbW9kdWxlLCBhdHRyKTsKIH0KIApAQCAtNjksOSArNjgsOSBAQAogCiAgICAgcmVnaXN0cnkgPSBnZXRfd2FybmluZ3NfYXR0cigib25jZXJlZ2lzdHJ5Iik7CiAgICAgaWYgKHJlZ2lzdHJ5ID09IE5VTEwpIHsKLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIF9vbmNlX3JlZ2lzdHJ5OworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gX29uY2VfcmVnaXN0cnk7CiAgICAgfQogICAgIFB5X0RFQ1JFRihfb25jZV9yZWdpc3RyeSk7CiAgICAgX29uY2VfcmVnaXN0cnkgPSByZWdpc3RyeTsKQEAgLTc5LDk3ICs3OCwxMTEgQEAKIH0KIAogCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X2RlZmF1bHRfYWN0aW9uKHZvaWQpCit7CisgICAgUHlPYmplY3QgKmRlZmF1bHRfYWN0aW9uOworCisgICAgZGVmYXVsdF9hY3Rpb24gPSBnZXRfd2FybmluZ3NfYXR0cigiZGVmYXVsdGFjdGlvbiIpOworICAgIGlmIChkZWZhdWx0X2FjdGlvbiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX2RlZmF1bHRfYWN0aW9uOworICAgIH0KKworICAgIFB5X0RFQ1JFRihfZGVmYXVsdF9hY3Rpb24pOworICAgIF9kZWZhdWx0X2FjdGlvbiA9IGRlZmF1bHRfYWN0aW9uOworICAgIHJldHVybiBkZWZhdWx0X2FjdGlvbjsKK30KKworCiAvKiBUaGUgaXRlbSBpcyBhIGJvcnJvd2VkIHJlZmVyZW5jZS4gKi8KIHN0YXRpYyBjb25zdCBjaGFyICoKIGdldF9maWx0ZXIoUHlPYmplY3QgKmNhdGVnb3J5LCBQeU9iamVjdCAqdGV4dCwgUHlfc3NpemVfdCBsaW5lbm8sCiAgICAgICAgICAgIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICoqaXRlbSkKIHsKLSAgICBQeU9iamVjdCAqYWN0aW9uLCAqbSwgKmQ7CisgICAgUHlPYmplY3QgKmFjdGlvbjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKndhcm5pbmdzX2ZpbHRlcnM7CiAKICAgICB3YXJuaW5nc19maWx0ZXJzID0gZ2V0X3dhcm5pbmdzX2F0dHIoImZpbHRlcnMiKTsKICAgICBpZiAod2FybmluZ3NfZmlsdGVycyA9PSBOVUxMKSB7Ci0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSAgICBQeV9ERUNSRUYoX2ZpbHRlcnMpOwotICAgIF9maWx0ZXJzID0gd2FybmluZ3NfZmlsdGVyczsKKyAgICAgICAgUHlfREVDUkVGKF9maWx0ZXJzKTsKKyAgICAgICAgX2ZpbHRlcnMgPSB3YXJuaW5nc19maWx0ZXJzOwogICAgIH0KIAogICAgIGlmICghUHlMaXN0X0NoZWNrKF9maWx0ZXJzKSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICBNT0RVTEVfTkFNRSAiLmZpbHRlcnMgbXVzdCBiZSBhIGxpc3QiKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfTkFNRSAiLmZpbHRlcnMgbXVzdCBiZSBhIGxpc3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyogX2ZpbHRlcnMgY291bGQgY2hhbmdlIHdoaWxlIHdlIGFyZSBpdGVyYXRpbmcgb3ZlciBpdC4gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgUHlMaXN0X0dFVF9TSVpFKF9maWx0ZXJzKTsgaSsrKSB7Ci0gICAgUHlPYmplY3QgKnRtcF9pdGVtLCAqYWN0aW9uLCAqbXNnLCAqY2F0LCAqbW9kLCAqbG5fb2JqOwotICAgIFB5X3NzaXplX3QgbG47Ci0gICAgaW50IGlzX3N1YmNsYXNzLCBnb29kX21zZywgZ29vZF9tb2Q7CisgICAgICAgIFB5T2JqZWN0ICp0bXBfaXRlbSwgKmFjdGlvbiwgKm1zZywgKmNhdCwgKm1vZCwgKmxuX29iajsKKyAgICAgICAgUHlfc3NpemVfdCBsbjsKKyAgICAgICAgaW50IGlzX3N1YmNsYXNzLCBnb29kX21zZywgZ29vZF9tb2Q7CiAKLSAgICB0bXBfaXRlbSA9ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKF9maWx0ZXJzLCBpKTsKLSAgICBpZiAoUHlUdXBsZV9TaXplKHRtcF9pdGVtKSAhPSA1KSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX05BTUUgIi5maWx0ZXJzIGl0ZW0gJXpkIGlzbid0IGEgNS10dXBsZSIsIGkpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgdG1wX2l0ZW0gPSAqaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShfZmlsdGVycywgaSk7CisgICAgICAgIGlmIChQeVR1cGxlX1NpemUodG1wX2l0ZW0pICE9IDUpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9OQU1FICIuZmlsdGVycyBpdGVtICV6ZCBpc24ndCBhIDUtdHVwbGUiLCBpKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogUHl0aG9uIGNvZGU6IGFjdGlvbiwgbXNnLCBjYXQsIG1vZCwgbG4gPSBpdGVtICovCisgICAgICAgIGFjdGlvbiA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDApOworICAgICAgICBtc2cgPSBQeVR1cGxlX0dFVF9JVEVNKHRtcF9pdGVtLCAxKTsKKyAgICAgICAgY2F0ID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgMik7CisgICAgICAgIG1vZCA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDMpOworICAgICAgICBsbl9vYmogPSBQeVR1cGxlX0dFVF9JVEVNKHRtcF9pdGVtLCA0KTsKKworICAgICAgICBnb29kX21zZyA9IGNoZWNrX21hdGNoZWQobXNnLCB0ZXh0KTsKKyAgICAgICAgZ29vZF9tb2QgPSBjaGVja19tYXRjaGVkKG1vZCwgbW9kdWxlKTsKKyAgICAgICAgaXNfc3ViY2xhc3MgPSBQeU9iamVjdF9Jc1N1YmNsYXNzKGNhdGVnb3J5LCBjYXQpOworICAgICAgICBsbiA9IFB5SW50X0FzU3NpemVfdChsbl9vYmopOworICAgICAgICBpZiAoZ29vZF9tc2cgPT0gLTEgfHwgZ29vZF9tb2QgPT0gLTEgfHwgaXNfc3ViY2xhc3MgPT0gLTEgfHwKKyAgICAgICAgICAgIChsbiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmIChnb29kX21zZyAmJiBpc19zdWJjbGFzcyAmJiBnb29kX21vZCAmJiAobG4gPT0gMCB8fCBsaW5lbm8gPT0gbG4pKQorICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0FzU3RyaW5nKGFjdGlvbik7CiAgICAgfQogCi0gICAgLyogUHl0aG9uIGNvZGU6IGFjdGlvbiwgbXNnLCBjYXQsIG1vZCwgbG4gPSBpdGVtICovCi0gICAgYWN0aW9uID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgMCk7Ci0gICAgbXNnID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgMSk7Ci0gICAgY2F0ID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgMik7Ci0gICAgbW9kID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgMyk7Ci0gICAgbG5fb2JqID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgNCk7Ci0KLSAgICBnb29kX21zZyA9IGNoZWNrX21hdGNoZWQobXNnLCB0ZXh0KTsKLSAgICBnb29kX21vZCA9IGNoZWNrX21hdGNoZWQobW9kLCBtb2R1bGUpOwotICAgIGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhjYXRlZ29yeSwgY2F0KTsKLSAgICBsbiA9IFB5SW50X0FzU3NpemVfdChsbl9vYmopOwotICAgIGlmIChnb29kX21zZyA9PSAtMSB8fCBnb29kX21vZCA9PSAtMSB8fCBpc19zdWJjbGFzcyA9PSAtMSB8fAotICAgICAgICAobG4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKGdvb2RfbXNnICYmIGlzX3N1YmNsYXNzICYmIGdvb2RfbW9kICYmIChsbiA9PSAwIHx8IGxpbmVubyA9PSBsbikpCisgICAgYWN0aW9uID0gZ2V0X2RlZmF1bHRfYWN0aW9uKCk7CisgICAgaWYgKGFjdGlvbiAhPSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBQeVN0cmluZ19Bc1N0cmluZyhhY3Rpb24pOwogICAgIH0KIAotICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoTU9EVUxFX05BTUUpOwotICAgIGlmIChtID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0gICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgUHlfREVDUkVGKG0pOwotICAgIGlmIChkID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0gICAgYWN0aW9uID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZCwgREVGQVVMVF9BQ1RJT05fTkFNRSk7Ci0gICAgaWYgKGFjdGlvbiAhPSBOVUxMKQotICAgIHJldHVybiBQeVN0cmluZ19Bc1N0cmluZyhhY3Rpb24pOwotCiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgIE1PRFVMRV9OQU1FICIuIiBERUZBVUxUX0FDVElPTl9OQU1FICIgbm90IGZvdW5kIik7CisgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9OQU1FICIuZGVmYXVsdGFjdGlvbiBub3QgZm91bmQiKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAorCiBzdGF0aWMgaW50CiBhbHJlYWR5X3dhcm5lZChQeU9iamVjdCAqcmVnaXN0cnksIFB5T2JqZWN0ICprZXksIGludCBzaG91bGRfc2V0KQogewogICAgIFB5T2JqZWN0ICphbHJlYWR5X3dhcm5lZDsKIAogICAgIGlmIChrZXkgPT0gTlVMTCkKLSAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAtMTsKIAogICAgIGFscmVhZHlfd2FybmVkID0gUHlEaWN0X0dldEl0ZW0ocmVnaXN0cnksIGtleSk7CiAgICAgaWYgKGFscmVhZHlfd2FybmVkICE9IE5VTEwpIHsKLSAgICBpbnQgcmMgPSBQeU9iamVjdF9Jc1RydWUoYWxyZWFkeV93YXJuZWQpOwotICAgIGlmIChyYyAhPSAwKQotICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIGludCByYyA9IFB5T2JqZWN0X0lzVHJ1ZShhbHJlYWR5X3dhcm5lZCk7CisgICAgICAgIGlmIChyYyAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIHJjOwogICAgIH0KIAogICAgIC8qIFRoaXMgd2FybmluZyB3YXNuJ3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LCBzZXQgaXQuICovCiAgICAgaWYgKHNob3VsZF9zZXQpCi0gICAgcmV0dXJuIFB5RGljdF9TZXRJdGVtKHJlZ2lzdHJ5LCBrZXksIFB5X1RydWUpOworICAgICAgICByZXR1cm4gUHlEaWN0X1NldEl0ZW0ocmVnaXN0cnksIGtleSwgUHlfVHJ1ZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE4MywyMyArMTk2LDIzIEBACiAKICAgICBpbnQgcmMgPSBQeU9iamVjdF9Jc1RydWUoZmlsZW5hbWUpOwogICAgIGlmIChyYyA9PSAtMSkKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZWxzZSBpZiAocmMgPT0gMCkKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZygiPHVua25vd24+Iik7CisgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKIAogICAgIG1vZF9zdHIgPSBQeVN0cmluZ19Bc1N0cmluZyhmaWxlbmFtZSk7CiAgICAgaWYgKG1vZF9zdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbGVuID0gUHlTdHJpbmdfU2l6ZShmaWxlbmFtZSk7CiAgICAgaWYgKGxlbiA8IDApCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChsZW4gPj0gMyAmJgotICAgIHN0cm5jbXAobW9kX3N0ciArIChsZW4gLSAzKSwgIi5weSIsIDMpID09IDApIHsKLSAgICBtb2R1bGUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShtb2Rfc3RyLCBsZW4tMyk7CisgICAgICAgICAgICBzdHJuY21wKG1vZF9zdHIgKyAobGVuIC0gMyksICIucHkiLCAzKSA9PSAwKSB7CisgICAgICAgIG1vZHVsZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKG1vZF9zdHIsIGxlbi0zKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgbW9kdWxlID0gZmlsZW5hbWU7Ci0gICAgUHlfSU5DUkVGKG1vZHVsZSk7CisgICAgICAgIG1vZHVsZSA9IGZpbGVuYW1lOworICAgICAgICBQeV9JTkNSRUYobW9kdWxlKTsKICAgICB9CiAgICAgcmV0dXJuIG1vZHVsZTsKIH0KQEAgLTIxMiwxMyArMjI1LDEzIEBACiAgICAgaW50IHJjOwogCiAgICAgaWYgKGFkZF96ZXJvKSB7Ci0gICAgemVybyA9IFB5SW50X0Zyb21Mb25nKDApOwotICAgIGlmICh6ZXJvID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBhbHRrZXkgPSBQeVR1cGxlX1BhY2soMywgdGV4dCwgY2F0ZWdvcnksIHplcm8pOworICAgICAgICB6ZXJvID0gUHlJbnRfRnJvbUxvbmcoMCk7CisgICAgICAgIGlmICh6ZXJvID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGFsdGtleSA9IFB5VHVwbGVfUGFjaygzLCB0ZXh0LCBjYXRlZ29yeSwgemVybyk7CiAgICAgfQogICAgIGVsc2UKLSAgICBhbHRrZXkgPSBQeVR1cGxlX1BhY2soMiwgdGV4dCwgY2F0ZWdvcnkpOworICAgICAgICBhbHRrZXkgPSBQeVR1cGxlX1BhY2soMiwgdGV4dCwgY2F0ZWdvcnkpOwogCiAgICAgcmMgPSBhbHJlYWR5X3dhcm5lZChyZWdpc3RyeSwgYWx0a2V5LCAxKTsKICAgICBQeV9YREVDUkVGKHplcm8pOwpAQCAtMjQyLDkgKzI1NSw5IEBACiAKICAgICBmX3N0ZGVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CiAgICAgaWYgKGZfc3RkZXJyID09IE5VTEwpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImxvc3Qgc3lzLnN0ZGVyclxuIik7Ci0gICAgUHlfREVDUkVGKG5hbWUpOwotICAgIHJldHVybjsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb3N0IHN5cy5zdGRlcnJcbiIpOworICAgICAgICBQeV9ERUNSRUYobmFtZSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvKiBQcmludCAiZmlsZW5hbWU6bGluZW5vOiBjYXRlZ29yeTogdGV4dFxuIiAqLwpAQCAtMjU4LDE3ICsyNzEsMTcgQEAKIAogICAgIC8qIFByaW50ICIgIHNvdXJjZV9saW5lXG4iICovCiAgICAgaWYgKHNvdXJjZWxpbmUpIHsKLSAgICBjaGFyICpzb3VyY2VfbGluZV9zdHIgPSBQeVN0cmluZ19BU19TVFJJTkcoc291cmNlbGluZSk7Ci0gICAgd2hpbGUgKCpzb3VyY2VfbGluZV9zdHIgPT0gJyAnIHx8ICpzb3VyY2VfbGluZV9zdHIgPT0gJ1x0JyB8fAotICAgICAgICAqc291cmNlX2xpbmVfc3RyID09ICdcMDE0JykKLSAgICAgICAgc291cmNlX2xpbmVfc3RyKys7CisgICAgICAgIGNoYXIgKnNvdXJjZV9saW5lX3N0ciA9IFB5U3RyaW5nX0FTX1NUUklORyhzb3VyY2VsaW5lKTsKKyAgICAgICAgd2hpbGUgKCpzb3VyY2VfbGluZV9zdHIgPT0gJyAnIHx8ICpzb3VyY2VfbGluZV9zdHIgPT0gJ1x0JyB8fAorICAgICAgICAgICAgICAgICpzb3VyY2VfbGluZV9zdHIgPT0gJ1wwMTQnKQorICAgICAgICAgICAgc291cmNlX2xpbmVfc3RyKys7CiAKLSAgICBQeUZpbGVfV3JpdGVTdHJpbmcoc291cmNlX2xpbmVfc3RyLCBmX3N0ZGVycik7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZfc3RkZXJyKTsKKyAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKHNvdXJjZV9saW5lX3N0ciwgZl9zdGRlcnIpOworICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpOwogICAgIH0KICAgICBlbHNlCi0gICAgX1B5X0Rpc3BsYXlTb3VyY2VMaW5lKGZfc3RkZXJyLCBQeVN0cmluZ19BU19TVFJJTkcoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8sIDIpOworICAgICAgICBfUHlfRGlzcGxheVNvdXJjZUxpbmUoZl9zdGRlcnIsIFB5U3RyaW5nX0FTX1NUUklORyhmaWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8sIDIpOwogICAgIFB5RXJyX0NsZWFyKCk7CiB9CiAKQEAgLTI4MywxNjQgKzI5NiwxMzMgQEAKICAgICBpbnQgcmM7CiAKICAgICBpZiAocmVnaXN0cnkgJiYgIVB5RGljdF9DaGVjayhyZWdpc3RyeSkgJiYgKHJlZ2lzdHJ5ICE9IFB5X05vbmUpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidyZWdpc3RyeScgbXVzdCBiZSBhIGRpY3QiKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidyZWdpc3RyeScgbXVzdCBiZSBhIGRpY3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyogTm9ybWFsaXplIG1vZHVsZS4gKi8KICAgICBpZiAobW9kdWxlID09IE5VTEwpIHsKLSAgICBtb2R1bGUgPSBub3JtYWxpemVfbW9kdWxlKGZpbGVuYW1lKTsKLSAgICBpZiAobW9kdWxlID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBtb2R1bGUgPSBub3JtYWxpemVfbW9kdWxlKGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UKLSAgICBQeV9JTkNSRUYobW9kdWxlKTsKKyAgICAgICAgUHlfSU5DUkVGKG1vZHVsZSk7CiAKICAgICAvKiBOb3JtYWxpemUgbWVzc2FnZS4gKi8KICAgICBQeV9JTkNSRUYobWVzc2FnZSk7ICAvKiBERUNSRUYnZWQgaW4gY2xlYW51cC4gKi8KICAgICByYyA9IFB5T2JqZWN0X0lzSW5zdGFuY2UobWVzc2FnZSwgUHlFeGNfV2FybmluZyk7CiAgICAgaWYgKHJjID09IC0xKSB7Ci0gICAgZ290byBjbGVhbnVwOworICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgfQogICAgIGlmIChyYyA9PSAxKSB7Ci0gICAgdGV4dCA9IFB5T2JqZWN0X1N0cihtZXNzYWdlKTsKLSAgICBpZiAodGV4dCA9PSBOVUxMKQotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgY2F0ZWdvcnkgPSAoUHlPYmplY3QqKW1lc3NhZ2UtPm9iX3R5cGU7CisgICAgICAgIHRleHQgPSBQeU9iamVjdF9TdHIobWVzc2FnZSk7CisgICAgICAgIGlmICh0ZXh0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIGNhdGVnb3J5ID0gKFB5T2JqZWN0KiltZXNzYWdlLT5vYl90eXBlOwogICAgIH0KICAgICBlbHNlIHsKLSAgICB0ZXh0ID0gbWVzc2FnZTsKLSAgICBtZXNzYWdlID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNhdGVnb3J5LCAiTyIsIG1lc3NhZ2UpOwotICAgIGlmIChtZXNzYWdlID09IE5VTEwpCi0gICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgdGV4dCA9IG1lc3NhZ2U7CisgICAgICAgIG1lc3NhZ2UgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oY2F0ZWdvcnksICJPIiwgbWVzc2FnZSk7CisgICAgICAgIGlmIChtZXNzYWdlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgfQogCiAgICAgbGluZW5vX29iaiA9IFB5SW50X0Zyb21Mb25nKGxpbmVubyk7CiAgICAgaWYgKGxpbmVub19vYmogPT0gTlVMTCkKLSAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIGdvdG8gY2xlYW51cDsKIAogICAgIC8qIENyZWF0ZSBrZXkuICovCiAgICAga2V5ID0gUHlUdXBsZV9QYWNrKDMsIHRleHQsIGNhdGVnb3J5LCBsaW5lbm9fb2JqKTsKICAgICBpZiAoa2V5ID09IE5VTEwpCi0gICAgZ290byBjbGVhbnVwOworICAgICAgICBnb3RvIGNsZWFudXA7CiAKICAgICBpZiAoKHJlZ2lzdHJ5ICE9IE5VTEwpICYmIChyZWdpc3RyeSAhPSBQeV9Ob25lKSkgewotICAgIHJjID0gYWxyZWFkeV93YXJuZWQocmVnaXN0cnksIGtleSwgMCk7Ci0gICAgaWYgKHJjID09IC0xKQotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgZWxzZSBpZiAocmMgPT0gMSkKLSAgICAgICAgZ290byByZXR1cm5fbm9uZTsKLSAgICAvKiBFbHNlIHRoaXMgd2FybmluZyBoYXNuJ3QgYmVlbiBnZW5lcmF0ZWQgYmVmb3JlLiAqLworICAgICAgICByYyA9IGFscmVhZHlfd2FybmVkKHJlZ2lzdHJ5LCBrZXksIDApOworICAgICAgICBpZiAocmMgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIGVsc2UgaWYgKHJjID09IDEpCisgICAgICAgICAgICBnb3RvIHJldHVybl9ub25lOworICAgICAgICAvKiBFbHNlIHRoaXMgd2FybmluZyBoYXNuJ3QgYmVlbiBnZW5lcmF0ZWQgYmVmb3JlLiAqLwogICAgIH0KIAogICAgIGFjdGlvbiA9IGdldF9maWx0ZXIoY2F0ZWdvcnksIHRleHQsIGxpbmVubywgbW9kdWxlLCAmaXRlbSk7CiAgICAgaWYgKGFjdGlvbiA9PSBOVUxMKQotICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgZ290byBjbGVhbnVwOwogCiAgICAgaWYgKHN0cmNtcChhY3Rpb24sICJlcnJvciIpID09IDApIHsKLSAgICBQeUVycl9TZXRPYmplY3QoY2F0ZWdvcnksIG1lc3NhZ2UpOwotICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgUHlFcnJfU2V0T2JqZWN0KGNhdGVnb3J5LCBtZXNzYWdlKTsKKyAgICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KIAogICAgIC8qIFN0b3JlIGluIHRoZSByZWdpc3RyeSB0aGF0IHdlJ3ZlIGJlZW4gaGVyZSwgKmV4Y2VwdCogd2hlbiB0aGUgYWN0aW9uCiAgICAgICAgaXMgImFsd2F5cyIuICovCiAgICAgcmMgPSAwOwogICAgIGlmIChzdHJjbXAoYWN0aW9uLCAiYWx3YXlzIikgIT0gMCkgewotICAgIGlmIChyZWdpc3RyeSAhPSBOVUxMICYmIHJlZ2lzdHJ5ICE9IFB5X05vbmUgJiYKLSAgICAgICAgUHlEaWN0X1NldEl0ZW0ocmVnaXN0cnksIGtleSwgUHlfVHJ1ZSkgPCAwKQotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgImlnbm9yZSIpID09IDApCi0gICAgICAgIGdvdG8gcmV0dXJuX25vbmU7Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgIm9uY2UiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChyZWdpc3RyeSA9PSBOVUxMIHx8IHJlZ2lzdHJ5ID09IFB5X05vbmUpIHsKLSAgICAgICAgcmVnaXN0cnkgPSBnZXRfb25jZV9yZWdpc3RyeSgpOwotICAgICAgICBpZiAocmVnaXN0cnkgPT0gTlVMTCkKKyAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSAmJgorICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHJlZ2lzdHJ5LCBrZXksIFB5X1RydWUpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgImlnbm9yZSIpID09IDApCisgICAgICAgICAgICBnb3RvIHJldHVybl9ub25lOworICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAib25jZSIpID09IDApIHsKKyAgICAgICAgICAgIGlmIChyZWdpc3RyeSA9PSBOVUxMIHx8IHJlZ2lzdHJ5ID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgICAgICByZWdpc3RyeSA9IGdldF9vbmNlX3JlZ2lzdHJ5KCk7CisgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIF9vbmNlX3JlZ2lzdHJ5Wyh0ZXh0LCBjYXRlZ29yeSldID0gMSAqLworICAgICAgICAgICAgcmMgPSB1cGRhdGVfcmVnaXN0cnkocmVnaXN0cnksIHRleHQsIGNhdGVnb3J5LCAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAibW9kdWxlIikgPT0gMCkgeworICAgICAgICAgICAgLyogcmVnaXN0cnlbKHRleHQsIGNhdGVnb3J5LCAwKV0gPSAxICovCisgICAgICAgICAgICBpZiAocmVnaXN0cnkgIT0gTlVMTCAmJiByZWdpc3RyeSAhPSBQeV9Ob25lKQorICAgICAgICAgICAgICAgIHJjID0gdXBkYXRlX3JlZ2lzdHJ5KHJlZ2lzdHJ5LCB0ZXh0LCBjYXRlZ29yeSwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgImRlZmF1bHQiKSAhPSAwKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9fc3RyID0gUHlPYmplY3RfU3RyKGl0ZW0pOworICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyX3N0ciA9ICI/Pz8iOworCisgICAgICAgICAgICBpZiAodG9fc3RyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgZXJyX3N0ciA9IFB5U3RyaW5nX0FTX1NUUklORyh0b19zdHIpOworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJVbnJlY29nbml6ZWQgYWN0aW9uICglcykgaW4gd2FybmluZ3MuZmlsdGVyczpcbiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGVycl9zdHIpOworICAgICAgICAgICAgUHlfWERFQ1JFRih0b19zdHIpOwogICAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAgICAgICB9Ci0gICAgICAgIC8qIF9vbmNlX3JlZ2lzdHJ5Wyh0ZXh0LCBjYXRlZ29yeSldID0gMSAqLwotICAgICAgICByYyA9IHVwZGF0ZV9yZWdpc3RyeShyZWdpc3RyeSwgdGV4dCwgY2F0ZWdvcnksIDApOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAibW9kdWxlIikgPT0gMCkgewotICAgICAgICAvKiByZWdpc3RyeVsodGV4dCwgY2F0ZWdvcnksIDApXSA9IDEgKi8KLSAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSkKLSAgICAgICAgcmMgPSB1cGRhdGVfcmVnaXN0cnkocmVnaXN0cnksIHRleHQsIGNhdGVnb3J5LCAwKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgImRlZmF1bHQiKSAhPSAwKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp0b19zdHIgPSBQeU9iamVjdF9TdHIoaXRlbSk7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmVycl9zdHIgPSAiPz8/IjsKLQotICAgICAgICBpZiAodG9fc3RyICE9IE5VTEwpCi0gICAgICAgIGVycl9zdHIgPSBQeVN0cmluZ19BU19TVFJJTkcodG9fc3RyKTsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIlVucmVjb2duaXplZCBhY3Rpb24gKCVzKSBpbiB3YXJuaW5ncy5maWx0ZXJzOlxuICVzIiwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uLCBlcnJfc3RyKTsKLSAgICAgICAgUHlfWERFQ1JFRih0b19zdHIpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQogICAgIH0KIAogICAgIGlmIChyYyA9PSAxKSAgLyogQWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgbW9kdWxlLiAqLwotICAgIGdvdG8gcmV0dXJuX25vbmU7CisgICAgICAgIGdvdG8gcmV0dXJuX25vbmU7CiAgICAgaWYgKHJjID09IDApIHsKLSAgICBQeU9iamVjdCAqc2hvd19meG4gPSBnZXRfd2FybmluZ3NfYXR0cigic2hvd3dhcm5pbmciKTsKLSAgICBpZiAoc2hvd19meG4gPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICBzaG93X3dhcm5pbmcoZmlsZW5hbWUsIGxpbmVubywgdGV4dCwgY2F0ZWdvcnksIHNvdXJjZWxpbmUpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgY2hhciAqbXNnID0gImZ1bmN0aW9ucyBvdmVycmlkaW5nIHdhcm5pbmdzLnNob3d3YXJuaW5nKCkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IHN1cHBvcnQgdGhlICdsaW5lJyBhcmd1bWVudCI7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnRleHRfY2hhciA9IFB5U3RyaW5nX0FTX1NUUklORyh0ZXh0KTsKLQotICAgICAgICBpZiAoc3RyY21wKG1zZywgdGV4dF9jaGFyKSA9PSAwKSB7Ci0gICAgICAgIC8qIFByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uIGJ5IHVzaW5nIGJ1aWx0LWluIGltcGxlbWVudGF0aW9uCi0gICAgICAgICAgIG9mIHNob3d3YXJuaW5nKCkuICovCi0gICAgICAgIHNob3dfd2FybmluZyhmaWxlbmFtZSwgbGluZW5vLCB0ZXh0LCBjYXRlZ29yeSwgc291cmNlbGluZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgIFB5T2JqZWN0ICpjaGVja19meG47Ci0gICAgICAgIFB5T2JqZWN0ICpkZWZhdWx0czsKLSAgICAgICAgUHlPYmplY3QgKnJlczsKLQotICAgICAgICBpZiAoUHlNZXRob2RfQ2hlY2soc2hvd19meG4pKQotICAgICAgICAgICAgY2hlY2tfZnhuID0gUHlNZXRob2RfRnVuY3Rpb24oc2hvd19meG4pOwotICAgICAgICBlbHNlIGlmIChQeUZ1bmN0aW9uX0NoZWNrKHNob3dfZnhuKSkKLSAgICAgICAgICAgIGNoZWNrX2Z4biA9IHNob3dfZnhuOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcm5pbmdzLnNob3d3YXJuaW5nKCkgbXVzdCBiZSBzZXQgdG8gYSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uIG9yIG1ldGhvZCIpOwotICAgICAgICAgICAgUHlfREVDUkVGKHNob3dfZnhuKTsKLSAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHRzID0gUHlGdW5jdGlvbl9HZXREZWZhdWx0cyhjaGVja19meG4pOwotICAgICAgICAvKiBBIHByb3BlciBpbXBsZW1lbnRhdGlvbiBvZiB3YXJuaW5ncy5zaG93d2FybmluZygpIHNob3VsZAotICAgICAgICAgICAgaGF2ZSBhdCBsZWFzdCB0d28gZGVmYXVsdCBhcmd1bWVudHMuICovCi0gICAgICAgIGlmICgoZGVmYXVsdHMgPT0gTlVMTCkgfHwgKFB5VHVwbGVfU2l6ZShkZWZhdWx0cykgPCAyKSkgewotICAgICAgICAgICAgUHlDb2RlT2JqZWN0ICpjb2RlID0gKFB5Q29kZU9iamVjdCAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0Q29kZShjaGVja19meG4pOwotICAgICAgICAgICAgaWYgKCEoY29kZS0+Y29fZmxhZ3MgJiBDT19WQVJBUkdTKSkgewotICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIG1zZywgMSkgPAotICAgICAgICAgICAgICAgIDApIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2hvd19meG4pOworICAgICAgICBQeU9iamVjdCAqc2hvd19meG4gPSBnZXRfd2FybmluZ3NfYXR0cigic2hvd3dhcm5pbmciKTsKKyAgICAgICAgaWYgKHNob3dfZnhuID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNob3dfd2FybmluZyhmaWxlbmFtZSwgbGluZW5vLCB0ZXh0LCBjYXRlZ29yeSwgc291cmNlbGluZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzaG93X2Z4biwgbWVzc2FnZSwgY2F0ZWdvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lbm9fb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgUHlfREVDUkVGKHNob3dfZnhuKTsKLSAgICAgICAgUHlfWERFQ1JFRihyZXMpOwotICAgICAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBQeU9iamVjdCAqcmVzOworCisgICAgICAgICAgICAgIGlmICghUHlNZXRob2RfQ2hlY2soc2hvd19meG4pICYmICFQeUZ1bmN0aW9uX0NoZWNrKHNob3dfZnhuKSkgeworICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FybmluZ3Muc2hvd3dhcm5pbmcoKSBtdXN0IGJlIHNldCB0byBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24gb3IgbWV0aG9kIik7CisgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2hvd19meG4pOworICAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzaG93X2Z4biwgbWVzc2FnZSwgY2F0ZWdvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lbm9fb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgICAgUHlfREVDUkVGKHNob3dfZnhuKTsKKyAgICAgICAgICAgICAgUHlfWERFQ1JFRihyZXMpOworICAgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgfQogICAgIGVsc2UgLyogaWYgKHJjID09IC0xKSAqLwotICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgZ290byBjbGVhbnVwOwogCiAgcmV0dXJuX25vbmU6CiAgICAgcmVzdWx0ID0gUHlfTm9uZTsKQEAgLTQ2NiwxNSArNDQ4LDE1IEBACiAgICAgLyogU2V0dXAgZ2xvYmFscyBhbmQgbGluZW5vLiAqLwogICAgIFB5RnJhbWVPYmplY3QgKmYgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5mcmFtZTsKICAgICB3aGlsZSAoLS1zdGFja19sZXZlbCA+IDAgJiYgZiAhPSBOVUxMKQotICAgIGYgPSBmLT5mX2JhY2s7CisgICAgICAgIGYgPSBmLT5mX2JhY2s7CiAKICAgICBpZiAoZiA9PSBOVUxMKSB7Ci0gICAgZ2xvYmFscyA9IFB5VGhyZWFkU3RhdGVfR2V0KCktPmludGVycC0+c3lzZGljdDsKLSAgICAqbGluZW5vID0gMTsKKyAgICAgICAgZ2xvYmFscyA9IFB5VGhyZWFkU3RhdGVfR2V0KCktPmludGVycC0+c3lzZGljdDsKKyAgICAgICAgKmxpbmVubyA9IDE7CiAgICAgfQogICAgIGVsc2UgewotICAgIGdsb2JhbHMgPSBmLT5mX2dsb2JhbHM7Ci0gICAgKmxpbmVubyA9IFB5Q29kZV9BZGRyMkxpbmUoZi0+Zl9jb2RlLCBmLT5mX2xhc3RpKTsKKyAgICAgICAgZ2xvYmFscyA9IGYtPmZfZ2xvYmFsczsKKyAgICAgICAgKmxpbmVubyA9IFB5RnJhbWVfR2V0TGluZU51bWJlcihmKTsKICAgICB9CiAKICAgICAqbW9kdWxlID0gTlVMTDsKQEAgLTQ4NCw4NCArNDY2LDg0IEBACiAgICAgYXNzZXJ0KFB5RGljdF9DaGVjayhnbG9iYWxzKSk7CiAgICAgKnJlZ2lzdHJ5ID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fd2FybmluZ3JlZ2lzdHJ5X18iKTsKICAgICBpZiAoKnJlZ2lzdHJ5ID09IE5VTEwpIHsKLSAgICBpbnQgcmM7CisgICAgICAgIGludCByYzsKIAotICAgICpyZWdpc3RyeSA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoKnJlZ2lzdHJ5ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICAqcmVnaXN0cnkgPSBQeURpY3RfTmV3KCk7CisgICAgICAgIGlmICgqcmVnaXN0cnkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgIHJjID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fd2FybmluZ3JlZ2lzdHJ5X18iLCAqcmVnaXN0cnkpOwotICAgICBpZiAocmMgPCAwKQotICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgICAgICAgIHJjID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fd2FybmluZ3JlZ2lzdHJ5X18iLCAqcmVnaXN0cnkpOworICAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwogICAgIH0KICAgICBlbHNlCi0gICAgUHlfSU5DUkVGKCpyZWdpc3RyeSk7CisgICAgICAgIFB5X0lOQ1JFRigqcmVnaXN0cnkpOwogCiAgICAgLyogU2V0dXAgbW9kdWxlLiAqLwogICAgICptb2R1bGUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19uYW1lX18iKTsKICAgICBpZiAoKm1vZHVsZSA9PSBOVUxMKSB7Ci0gICAgKm1vZHVsZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIjxzdHJpbmc+Iik7Ci0gICAgaWYgKCptb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgICptb2R1bGUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCI8c3RyaW5nPiIpOworICAgICAgICBpZiAoKm1vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CiAgICAgfQogICAgIGVsc2UKLSAgICBQeV9JTkNSRUYoKm1vZHVsZSk7CisgICAgICAgIFB5X0lOQ1JFRigqbW9kdWxlKTsKIAogICAgIC8qIFNldHVwIGZpbGVuYW1lLiAqLwogICAgICpmaWxlbmFtZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2ZpbGVfXyIpOwogICAgIGlmICgqZmlsZW5hbWUgIT0gTlVMTCkgewotICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IFB5U3RyaW5nX1NpemUoKmZpbGVuYW1lKTsKLSAgICBjb25zdCBjaGFyICpmaWxlX3N0ciA9IFB5U3RyaW5nX0FzU3RyaW5nKCpmaWxlbmFtZSk7Ci0gICAgICAgIGlmIChmaWxlX3N0ciA9PSBOVUxMIHx8IChsZW4gPCAwICYmIFB5RXJyX09jY3VycmVkKCkpKQotICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKLQotICAgIC8qIGlmIGZpbGVuYW1lLmxvd2VyKCkuZW5kc3dpdGgoKCIucHljIiwgIi5weW8iKSk6ICovCi0gICAgaWYgKGxlbiA+PSA0ICYmCi0gICAgICAgIGZpbGVfc3RyW2xlbi00XSA9PSAnLicgJiYKLSAgICAgICAgdG9sb3dlcihmaWxlX3N0cltsZW4tM10pID09ICdwJyAmJgotICAgICAgICB0b2xvd2VyKGZpbGVfc3RyW2xlbi0yXSkgPT0gJ3knICYmCi0gICAgICAgICh0b2xvd2VyKGZpbGVfc3RyW2xlbi0xXSkgPT0gJ2MnIHx8Ci0gICAgICAgIHRvbG93ZXIoZmlsZV9zdHJbbGVuLTFdKSA9PSAnbycpKQotICAgIHsKLSAgICAgICAgKmZpbGVuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoZmlsZV9zdHIsIGxlbi0xKTsKLSAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgUHlfc3NpemVfdCBsZW4gPSBQeVN0cmluZ19TaXplKCpmaWxlbmFtZSk7CisgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVfc3RyID0gUHlTdHJpbmdfQXNTdHJpbmcoKmZpbGVuYW1lKTsKKyAgICAgICAgICAgIGlmIChmaWxlX3N0ciA9PSBOVUxMIHx8IChsZW4gPCAwICYmIFB5RXJyX09jY3VycmVkKCkpKQogICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisKKyAgICAgICAgLyogaWYgZmlsZW5hbWUubG93ZXIoKS5lbmRzd2l0aCgoIi5weWMiLCAiLnB5byIpKTogKi8KKyAgICAgICAgaWYgKGxlbiA+PSA0ICYmCisgICAgICAgICAgICBmaWxlX3N0cltsZW4tNF0gPT0gJy4nICYmCisgICAgICAgICAgICB0b2xvd2VyKGZpbGVfc3RyW2xlbi0zXSkgPT0gJ3AnICYmCisgICAgICAgICAgICB0b2xvd2VyKGZpbGVfc3RyW2xlbi0yXSkgPT0gJ3knICYmCisgICAgICAgICAgICAodG9sb3dlcihmaWxlX3N0cltsZW4tMV0pID09ICdjJyB8fAorICAgICAgICAgICAgICAgIHRvbG93ZXIoZmlsZV9zdHJbbGVuLTFdKSA9PSAnbycpKQorICAgICAgICB7CisgICAgICAgICAgICAqZmlsZW5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShmaWxlX3N0ciwgbGVuLTEpOworICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CisgICAgICAgICAgICBQeV9JTkNSRUYoKmZpbGVuYW1lKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciA9IFB5U3RyaW5nX0FzU3RyaW5nKCptb2R1bGUpOwotICAgIGlmIChtb2R1bGVfc3RyICYmIHN0cmNtcChtb2R1bGVfc3RyLCAiX19tYWluX18iKSA9PSAwKSB7Ci0gICAgICAgIFB5T2JqZWN0ICphcmd2ID0gUHlTeXNfR2V0T2JqZWN0KCJhcmd2Iik7Ci0gICAgICAgIGlmIChhcmd2ICE9IE5VTEwgJiYgUHlMaXN0X1NpemUoYXJndikgPiAwKSB7Ci0gICAgICAgIGludCBpc190cnVlOwotICAgICAgICAqZmlsZW5hbWUgPSBQeUxpc3RfR2V0SXRlbShhcmd2LCAwKTsKLSAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7Ci0gICAgICAgIC8qIElmIHN5cy5hcmd2WzBdIGlzIGZhbHNlLCB0aGVuIHVzZSAnX19tYWluX18nLiAqLwotICAgICAgICBpc190cnVlID0gUHlPYmplY3RfSXNUcnVlKCpmaWxlbmFtZSk7Ci0gICAgICAgIGlmIChpc190cnVlIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKCpmaWxlbmFtZSk7Ci0gICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciA9IFB5U3RyaW5nX0FzU3RyaW5nKCptb2R1bGUpOworICAgICAgICBpZiAobW9kdWxlX3N0ciAmJiBzdHJjbXAobW9kdWxlX3N0ciwgIl9fbWFpbl9fIikgPT0gMCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3YgPSBQeVN5c19HZXRPYmplY3QoImFyZ3YiKTsKKyAgICAgICAgICAgIGlmIChhcmd2ICE9IE5VTEwgJiYgUHlMaXN0X1NpemUoYXJndikgPiAwKSB7CisgICAgICAgICAgICAgICAgaW50IGlzX3RydWU7CisgICAgICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlMaXN0X0dldEl0ZW0oYXJndiwgMCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAgLyogSWYgc3lzLmFyZ3ZbMF0gaXMgZmFsc2UsIHRoZW4gdXNlICdfX21haW5fXycuICovCisgICAgICAgICAgICAgICAgaXNfdHJ1ZSA9IFB5T2JqZWN0X0lzVHJ1ZSgqZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIGlmIChpc190cnVlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc190cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqZmlsZW5hbWUpOworICAgICAgICAgICAgICAgICAgICAqZmlsZW5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCJfX21haW5fXyIpOworICAgICAgICAgICAgICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBlbWJlZGRlZCBpbnRlcnByZXRlcnMgZG9uJ3QgaGF2ZSBzeXMuYXJndiwgc2VlIGJ1ZyAjODM5MTUxICovCisgICAgICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZygiX19tYWluX18iKTsKKyAgICAgICAgICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCFpc190cnVlKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoKmZpbGVuYW1lKTsKLSAgICAgICAgICAgICpmaWxlbmFtZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIl9fbWFpbl9fIik7Ci0gICAgICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAqZmlsZW5hbWUgPSAqbW9kdWxlOworICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CiAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgLyogZW1iZWRkZWQgaW50ZXJwcmV0ZXJzIGRvbid0IGhhdmUgc3lzLmFyZ3YsIHNlZSBidWcgIzgzOTE1MSAqLwotICAgICAgICAqZmlsZW5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCJfX21haW5fXyIpOwotICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICpmaWxlbmFtZSA9ICptb2R1bGU7Ci0gICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOwotICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gMTsKQEAgLTU4MiwyMSArNTY0LDIxIEBACiAgICAgLyogR2V0IGNhdGVnb3J5LiAqLwogICAgIHJjID0gUHlPYmplY3RfSXNJbnN0YW5jZShtZXNzYWdlLCBQeUV4Y19XYXJuaW5nKTsKICAgICBpZiAocmMgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHJjID09IDEpCi0gICAgY2F0ZWdvcnkgPSAoUHlPYmplY3QqKW1lc3NhZ2UtPm9iX3R5cGU7CisgICAgICAgIGNhdGVnb3J5ID0gKFB5T2JqZWN0KiltZXNzYWdlLT5vYl90eXBlOwogICAgIGVsc2UgaWYgKGNhdGVnb3J5ID09IE5VTEwpCi0gICAgY2F0ZWdvcnkgPSBQeUV4Y19Vc2VyV2FybmluZzsKKyAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19Vc2VyV2FybmluZzsKIAogICAgIC8qIFZhbGlkYXRlIGNhdGVnb3J5LiAqLwogICAgIHJjID0gUHlPYmplY3RfSXNTdWJjbGFzcyhjYXRlZ29yeSwgUHlFeGNfV2FybmluZyk7CiAgICAgaWYgKHJjID09IC0xKQotICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAocmMgPT0gMCkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiY2F0ZWdvcnkgaXMgbm90IGEgc3ViY2xhc3Mgb2YgV2FybmluZyIpOwotICAgIHJldHVybiBOVUxMOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYXRlZ29yeSBpcyBub3QgYSBzdWJjbGFzcyBvZiBXYXJuaW5nIik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHJldHVybiBjYXRlZ29yeTsKQEAgLTYwOSw3ICs1OTEsNyBAQAogICAgIGludCBsaW5lbm87CiAKICAgICBpZiAoIXNldHVwX2NvbnRleHQoc3RhY2tfbGV2ZWwsICZmaWxlbmFtZSwgJmxpbmVubywgJm1vZHVsZSwgJnJlZ2lzdHJ5KSkKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CkBAIC02MjgsMTEgKzYxMCwxMSBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T246d2FybiIsIGt3X2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1lc3NhZ2UsICZjYXRlZ29yeSwgJnN0YWNrX2xldmVsKSkKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBjYXRlZ29yeSA9IGdldF9jYXRlZ29yeShtZXNzYWdlLCBjYXRlZ29yeSk7CiAgICAgaWYgKGNhdGVnb3J5ID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBkb193YXJuKG1lc3NhZ2UsIGNhdGVnb3J5LCBzdGFja19sZXZlbCk7CiB9CiAKQEAgLTY1Miw2OCArNjM0LDY4IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PT2l8T09POndhcm5fZXhwbGljaXQiLAogICAgICAgICAgICAgICAgIGt3ZF9saXN0LCAmbWVzc2FnZSwgJmNhdGVnb3J5LCAmZmlsZW5hbWUsICZsaW5lbm8sICZtb2R1bGUsCiAgICAgICAgICAgICAgICAgJnJlZ2lzdHJ5LCAmbW9kdWxlX2dsb2JhbHMpKQotICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChtb2R1bGVfZ2xvYmFscykgewotICAgIHN0YXRpYyBQeU9iamVjdCAqZ2V0X3NvdXJjZV9uYW1lID0gTlVMTDsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnNwbGl0bGluZXNfbmFtZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmxvYWRlcjsKLSAgICBQeU9iamVjdCAqbW9kdWxlX25hbWU7Ci0gICAgUHlPYmplY3QgKnNvdXJjZTsKLSAgICBQeU9iamVjdCAqc291cmNlX2xpc3Q7Ci0gICAgUHlPYmplY3QgKnNvdXJjZV9saW5lOwotICAgIFB5T2JqZWN0ICpyZXR1cm5lZDsKKyAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpnZXRfc291cmNlX25hbWUgPSBOVUxMOworICAgICAgICBzdGF0aWMgUHlPYmplY3QgKnNwbGl0bGluZXNfbmFtZSA9IE5VTEw7CisgICAgICAgIFB5T2JqZWN0ICpsb2FkZXI7CisgICAgICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZTsKKyAgICAgICAgUHlPYmplY3QgKnNvdXJjZTsKKyAgICAgICAgUHlPYmplY3QgKnNvdXJjZV9saXN0OworICAgICAgICBQeU9iamVjdCAqc291cmNlX2xpbmU7CisgICAgICAgIFB5T2JqZWN0ICpyZXR1cm5lZDsKIAotICAgIGlmIChnZXRfc291cmNlX25hbWUgPT0gTlVMTCkgewotICAgICAgICBnZXRfc291cmNlX25hbWUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJnZXRfc291cmNlIik7Ci0gICAgICAgIGlmICghZ2V0X3NvdXJjZV9uYW1lKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHNwbGl0bGluZXNfbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIHNwbGl0bGluZXNfbmFtZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInNwbGl0bGluZXMiKTsKLSAgICAgICAgaWYgKCFzcGxpdGxpbmVzX25hbWUpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICAgICAgaWYgKGdldF9zb3VyY2VfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnZXRfc291cmNlX25hbWUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJnZXRfc291cmNlIik7CisgICAgICAgICAgICBpZiAoIWdldF9zb3VyY2VfbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3BsaXRsaW5lc19uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNwbGl0bGluZXNfbmFtZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInNwbGl0bGluZXMiKTsKKyAgICAgICAgICAgIGlmICghc3BsaXRsaW5lc19uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAKLSAgICAvKiBDaGVjay9nZXQgdGhlIHJlcXVpc2l0ZSBwaWVjZXMgbmVlZGVkIGZvciB0aGUgbG9hZGVyLiAqLwotICAgIGxvYWRlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZV9nbG9iYWxzLCAiX19sb2FkZXJfXyIpOwotICAgIG1vZHVsZV9uYW1lID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlX2dsb2JhbHMsICJfX25hbWVfXyIpOworICAgICAgICAvKiBDaGVjay9nZXQgdGhlIHJlcXVpc2l0ZSBwaWVjZXMgbmVlZGVkIGZvciB0aGUgbG9hZGVyLiAqLworICAgICAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVfZ2xvYmFscywgIl9fbG9hZGVyX18iKTsKKyAgICAgICAgbW9kdWxlX25hbWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVfZ2xvYmFscywgIl9fbmFtZV9fIik7CiAKLSAgICBpZiAobG9hZGVyID09IE5VTEwgfHwgbW9kdWxlX25hbWUgPT0gTlVMTCkKLSAgICAgICAgZ290byBzdGFuZGFyZF9jYWxsOworICAgICAgICBpZiAobG9hZGVyID09IE5VTEwgfHwgbW9kdWxlX25hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gc3RhbmRhcmRfY2FsbDsKIAotICAgIC8qIE1ha2Ugc3VyZSB0aGUgbG9hZGVyIGltcGxlbWVudHMgdGhlIG9wdGlvbmFsIGdldF9zb3VyY2UoKSBtZXRob2QuICovCi0gICAgaWYgKCFQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGxvYWRlciwgImdldF9zb3VyY2UiKSkKLSAgICAgICAgZ290byBzdGFuZGFyZF9jYWxsOwotICAgIC8qIENhbGwgZ2V0X3NvdXJjZSgpIHRvIGdldCB0aGUgc291cmNlIGNvZGUuICovCi0gICAgc291cmNlID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MobG9hZGVyLCBnZXRfc291cmNlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLCBOVUxMKTsKLSAgICBpZiAoIXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZWxzZSBpZiAoc291cmNlID09IFB5X05vbmUpIHsKLSAgICAgICAgUHlfREVDUkVGKFB5X05vbmUpOwotICAgICAgICBnb3RvIHN0YW5kYXJkX2NhbGw7Ci0gICAgfQorICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGxvYWRlciBpbXBsZW1lbnRzIHRoZSBvcHRpb25hbCBnZXRfc291cmNlKCkgbWV0aG9kLiAqLworICAgICAgICBpZiAoIVB5T2JqZWN0X0hhc0F0dHJTdHJpbmcobG9hZGVyLCAiZ2V0X3NvdXJjZSIpKQorICAgICAgICAgICAgICAgIGdvdG8gc3RhbmRhcmRfY2FsbDsKKyAgICAgICAgLyogQ2FsbCBnZXRfc291cmNlKCkgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZS4gKi8KKyAgICAgICAgc291cmNlID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MobG9hZGVyLCBnZXRfc291cmNlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSwgTlVMTCk7CisgICAgICAgIGlmICghc291cmNlKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGVsc2UgaWYgKHNvdXJjZSA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgICBnb3RvIHN0YW5kYXJkX2NhbGw7CisgICAgICAgIH0KIAotICAgIC8qIFNwbGl0IHRoZSBzb3VyY2UgaW50byBsaW5lcy4gKi8KLSAgICBzb3VyY2VfbGlzdCA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNvdXJjZSwgc3BsaXRsaW5lc19uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgUHlfREVDUkVGKHNvdXJjZSk7Ci0gICAgaWYgKCFzb3VyY2VfbGlzdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIC8qIFNwbGl0IHRoZSBzb3VyY2UgaW50byBsaW5lcy4gKi8KKyAgICAgICAgc291cmNlX2xpc3QgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzb3VyY2UsIHNwbGl0bGluZXNfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKHNvdXJjZSk7CisgICAgICAgIGlmICghc291cmNlX2xpc3QpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIEdldCB0aGUgc291cmNlIGxpbmUuICovCi0gICAgc291cmNlX2xpbmUgPSBQeUxpc3RfR2V0SXRlbShzb3VyY2VfbGlzdCwgbGluZW5vLTEpOwotICAgIGlmICghc291cmNlX2xpbmUpIHsKKyAgICAgICAgLyogR2V0IHRoZSBzb3VyY2UgbGluZS4gKi8KKyAgICAgICAgc291cmNlX2xpbmUgPSBQeUxpc3RfR2V0SXRlbShzb3VyY2VfbGlzdCwgbGluZW5vLTEpOworICAgICAgICBpZiAoIXNvdXJjZV9saW5lKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc291cmNlX2xpc3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiBIYW5kbGUgdGhlIHdhcm5pbmcuICovCisgICAgICAgIHJldHVybmVkID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBzb3VyY2VfbGluZSk7CiAgICAgICAgIFB5X0RFQ1JFRihzb3VyY2VfbGlzdCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qIEhhbmRsZSB0aGUgd2FybmluZy4gKi8KLSAgICByZXR1cm5lZCA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBzb3VyY2VfbGluZSk7Ci0gICAgUHlfREVDUkVGKHNvdXJjZV9saXN0KTsKLSAgICByZXR1cm4gcmV0dXJuZWQ7CisgICAgICAgIHJldHVybiByZXR1cm5lZDsKICAgICB9CiAKICBzdGFuZGFyZF9jYWxsOgpAQCAtNzI5LDE1ICs3MTEsMTUgQEAKICAgICBQeU9iamVjdCAqcmVzOwogICAgIFB5T2JqZWN0ICptZXNzYWdlID0gUHlTdHJpbmdfRnJvbVN0cmluZyh0ZXh0KTsKICAgICBpZiAobWVzc2FnZSA9PSBOVUxMKQotICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKGNhdGVnb3J5ID09IE5VTEwpCi0gICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKKyAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKIAogICAgIHJlcyA9IGRvX3dhcm4obWVzc2FnZSwgY2F0ZWdvcnksIHN0YWNrX2xldmVsKTsKICAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQotICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIFB5X0RFQ1JFRihyZXMpOwogCiAgICAgcmV0dXJuIDA7CkBAIC03NjcsMTkgKzc0OSwxOSBAQAogICAgIGludCByZXQgPSAtMTsKIAogICAgIGlmIChtZXNzYWdlID09IE5VTEwgfHwgZmlsZW5hbWUgPT0gTlVMTCkKLSAgICBnb3RvIGV4aXQ7Ci0gICAgaWYgKG1vZHVsZV9zdHIgIT0gTlVMTCkgewotICAgIG1vZHVsZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcobW9kdWxlX3N0cik7Ci0gICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKICAgICAgICAgZ290byBleGl0OworICAgIGlmIChtb2R1bGVfc3RyICE9IE5VTEwpIHsKKyAgICAgICAgbW9kdWxlID0gUHlTdHJpbmdfRnJvbVN0cmluZyhtb2R1bGVfc3RyKTsKKyAgICAgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCiAgICAgaWYgKGNhdGVnb3J5ID09IE5VTEwpCi0gICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKKyAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKICAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQotICAgIGdvdG8gZXhpdDsKKyAgICAgICAgZ290byBleGl0OwogICAgIFB5X0RFQ1JFRihyZXMpOwogICAgIHJldCA9IDA7CiAKQEAgLTc5OSwxMiArNzgxLDEyIEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZiB3YXJuaW5nc19mdW5jdGlvbnNbXSA9IHsKICAgICB7Indhcm4iLCAoUHlDRnVuY3Rpb24pd2FybmluZ3Nfd2FybiwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICB3YXJuX2RvY30sCisgICAgICAgIHdhcm5fZG9jfSwKICAgICB7Indhcm5fZXhwbGljaXQiLCAoUHlDRnVuY3Rpb24pd2FybmluZ3Nfd2Fybl9leHBsaWNpdCwKLSAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCB3YXJuX2V4cGxpY2l0X2RvY30sCisgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHdhcm5fZXhwbGljaXRfZG9jfSwKICAgICAvKiBYWFgoYnJldHQuY2Fubm9uKTogYWRkIHNob3d3YXJuaW5nPyAqLwogICAgIC8qIFhYWChicmV0dC5jYW5ub24pOiBSZWFzb25hYmxlIHRvIGFkZCBmb3JtYXR3YXJuaW5nPyAqLwotICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworICAgIHtOVUxMLCBOVUxMfQkgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCiAKQEAgLTgxOCwzNyArODAwLDM3IEBACiAgICAgUHlPYmplY3QgKmxpbmVubywgKnJlc3VsdDsKIAogICAgIGlmICghc3RyY21wKGFjdGlvbiwgImlnbm9yZSIpKSB7Ci0gICAgaWYgKGlnbm9yZV9zdHIgPT0gTlVMTCkgewotICAgICAgICBpZ25vcmVfc3RyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiaWdub3JlIik7Ci0gICAgICAgIGlmIChpZ25vcmVfc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBhY3Rpb25fb2JqID0gaWdub3JlX3N0cjsKKyAgICAgICAgaWYgKGlnbm9yZV9zdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgaWdub3JlX3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImlnbm9yZSIpOworICAgICAgICAgICAgaWYgKGlnbm9yZV9zdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBhY3Rpb25fb2JqID0gaWdub3JlX3N0cjsKICAgICB9CiAgICAgZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24sICJlcnJvciIpKSB7Ci0gICAgaWYgKGVycm9yX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yX3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImVycm9yIik7Ci0gICAgICAgIGlmIChlcnJvcl9zdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGFjdGlvbl9vYmogPSBlcnJvcl9zdHI7CisgICAgICAgIGlmIChlcnJvcl9zdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyb3Jfc3RyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiZXJyb3IiKTsKKyAgICAgICAgICAgIGlmIChlcnJvcl9zdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBhY3Rpb25fb2JqID0gZXJyb3Jfc3RyOwogICAgIH0KICAgICBlbHNlIGlmICghc3RyY21wKGFjdGlvbiwgImRlZmF1bHQiKSkgewotICAgIGlmIChkZWZhdWx0X3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGRlZmF1bHRfc3RyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiZGVmYXVsdCIpOwotICAgICAgICBpZiAoZGVmYXVsdF9zdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGFjdGlvbl9vYmogPSBkZWZhdWx0X3N0cjsKKyAgICAgICAgaWYgKGRlZmF1bHRfc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGRlZmF1bHRfc3RyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiZGVmYXVsdCIpOworICAgICAgICAgICAgaWYgKGRlZmF1bHRfc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgYWN0aW9uX29iaiA9IGRlZmF1bHRfc3RyOwogICAgIH0KICAgICBlbHNlIHsKLSAgICBQeV9GYXRhbEVycm9yKCJ1bmtub3duIGFjdGlvbiIpOworICAgICAgICBQeV9GYXRhbEVycm9yKCJ1bmtub3duIGFjdGlvbiIpOwogICAgIH0KIAogICAgIC8qIFRoaXMgYXNzdW1lcyB0aGUgbGluZSBudW1iZXIgaXMgemVybyBmb3Igbm93LiAqLwogICAgIGxpbmVubyA9IFB5SW50X0Zyb21Mb25nKDApOwogICAgIGlmIChsaW5lbm8gPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmVzdWx0ID0gUHlUdXBsZV9QYWNrKDUsIGFjdGlvbl9vYmosIFB5X05vbmUsIGNhdGVnb3J5LCBQeV9Ob25lLCBsaW5lbm8pOwogICAgIFB5X0RFQ1JFRihsaW5lbm8pOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04NTcsMjggKzgzOSwzOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGluaXRfZmlsdGVycyh2b2lkKQogewotICAgIFB5T2JqZWN0ICpmaWx0ZXJzID0gUHlMaXN0X05ldygzKTsKKyAgICAvKiBEb24ndCBzaWxlbmNlIERlcHJlY2F0aW9uV2FybmluZyBpZiAtMyBvciAtUSB3ZXJlIHVzZWQuICovCisgICAgUHlPYmplY3QgKmZpbHRlcnMgPSBQeUxpc3RfTmV3KFB5X1B5M2tXYXJuaW5nRmxhZyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRGl2aXNpb25XYXJuaW5nRmxhZyA/IDMgOiA0KTsKKyAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsgIC8qIFBvc3QtaW5jcmVtZW50ZWQgaW4gZWFjaCB1c2UuICovCisgICAgdW5zaWduZWQgaW50IHg7CiAgICAgY29uc3QgY2hhciAqYnl0ZXNfYWN0aW9uOwotICAgIGlmIChmaWx0ZXJzID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7CiAKLSAgICBQeUxpc3RfU0VUX0lURU0oZmlsdGVycywgMCwKKyAgICBpZiAoZmlsdGVycyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIElmIGd1YXJkIGNoYW5nZXMsIG1ha2Ugc3VyZSB0byB1cGRhdGUgJ2ZpbHRlcnMnIGluaXRpYWxpemF0aW9uIGFib3ZlLiAqLworICAgIGlmICghUHlfUHkza1dhcm5pbmdGbGFnICYmICFQeV9EaXZpc2lvbldhcm5pbmdGbGFnKSB7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShmaWx0ZXJzLCBwb3MrKywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV9maWx0ZXIoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCAiaWdub3JlIikpOworICAgIH0KKyAgICBQeUxpc3RfU0VUX0lURU0oZmlsdGVycywgcG9zKyssCiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV9maWx0ZXIoUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgImlnbm9yZSIpKTsKLSAgICBQeUxpc3RfU0VUX0lURU0oZmlsdGVycywgMSwgY3JlYXRlX2ZpbHRlcihQeUV4Y19JbXBvcnRXYXJuaW5nLCAiaWdub3JlIikpOworICAgIFB5TGlzdF9TRVRfSVRFTShmaWx0ZXJzLCBwb3MrKywKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlX2ZpbHRlcihQeUV4Y19JbXBvcnRXYXJuaW5nLCAiaWdub3JlIikpOwogICAgIGlmIChQeV9CeXRlc1dhcm5pbmdGbGFnID4gMSkKLSAgICBieXRlc19hY3Rpb24gPSAiZXJyb3IiOworICAgICAgICBieXRlc19hY3Rpb24gPSAiZXJyb3IiOwogICAgIGVsc2UgaWYgKFB5X0J5dGVzV2FybmluZ0ZsYWcpCi0gICAgYnl0ZXNfYWN0aW9uID0gImRlZmF1bHQiOworICAgICAgICBieXRlc19hY3Rpb24gPSAiZGVmYXVsdCI7CiAgICAgZWxzZQotICAgIGJ5dGVzX2FjdGlvbiA9ICJpZ25vcmUiOwotICAgIFB5TGlzdF9TRVRfSVRFTShmaWx0ZXJzLCAyLCBjcmVhdGVfZmlsdGVyKFB5RXhjX0J5dGVzV2FybmluZywKKyAgICAgICAgYnl0ZXNfYWN0aW9uID0gImlnbm9yZSI7CisgICAgUHlMaXN0X1NFVF9JVEVNKGZpbHRlcnMsIHBvcysrLCBjcmVhdGVfZmlsdGVyKFB5RXhjX0J5dGVzV2FybmluZywKICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfYWN0aW9uKSk7CiAKLSAgICBpZiAoUHlMaXN0X0dFVF9JVEVNKGZpbHRlcnMsIDApID09IE5VTEwgfHwKLSAgICBQeUxpc3RfR0VUX0lURU0oZmlsdGVycywgMSkgPT0gTlVMTCB8fAotICAgIFB5TGlzdF9HRVRfSVRFTShmaWx0ZXJzLCAyKSA9PSBOVUxMKSB7Ci0gICAgUHlfREVDUkVGKGZpbHRlcnMpOwotICAgIHJldHVybiBOVUxMOworICAgIGZvciAoeCA9IDA7IHggPCBwb3M7IHggKz0gMSkgeworICAgICAgICBpZiAoUHlMaXN0X0dFVF9JVEVNKGZpbHRlcnMsIHgpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmaWx0ZXJzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZpbHRlcnM7CkBAIC04ODgsMjkgKzg4MSwyOSBAQAogUHlNT0RJTklUX0ZVTkMKIF9QeVdhcm5pbmdzX0luaXQodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmRlZmF1bHRfYWN0aW9uOworICAgIFB5T2JqZWN0ICptOwogCiAgICAgbSA9IFB5X0luaXRNb2R1bGUzKE1PRFVMRV9OQU1FLCB3YXJuaW5nc19mdW5jdGlvbnMsIHdhcm5pbmdzX19kb2NfXyk7CiAgICAgaWYgKG0gPT0gTlVMTCkKLSAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKIAogICAgIF9maWx0ZXJzID0gaW5pdF9maWx0ZXJzKCk7CiAgICAgaWYgKF9maWx0ZXJzID09IE5VTEwpCi0gICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgUHlfSU5DUkVGKF9maWx0ZXJzKTsKICAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJmaWx0ZXJzIiwgX2ZpbHRlcnMpIDwgMCkKLSAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKIAogICAgIF9vbmNlX3JlZ2lzdHJ5ID0gUHlEaWN0X05ldygpOwogICAgIGlmIChfb25jZV9yZWdpc3RyeSA9PSBOVUxMKQotICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgIFB5X0lOQ1JFRihfb25jZV9yZWdpc3RyeSk7CiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAib25jZV9yZWdpc3RyeSIsIF9vbmNlX3JlZ2lzdHJ5KSA8IDApCi0gICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAKLSAgICBkZWZhdWx0X2FjdGlvbiA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImRlZmF1bHQiKTsKLSAgICBpZiAoZGVmYXVsdF9hY3Rpb24gPT0gTlVMTCkKLSAgICByZXR1cm47Ci0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCBERUZBVUxUX0FDVElPTl9OQU1FLCBkZWZhdWx0X2FjdGlvbikgPCAwKQotICAgIHJldHVybjsKKyAgICBfZGVmYXVsdF9hY3Rpb24gPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCJkZWZhdWx0Iik7CisgICAgaWYgKF9kZWZhdWx0X2FjdGlvbiA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZGVmYXVsdF9hY3Rpb24iLCBfZGVmYXVsdF9hY3Rpb24pIDwgMCkKKyAgICAgICAgcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2FzdC5jIGIvUHl0aG9uL2FzdC5jCmluZGV4IDU3NGEzZDguLjg4ZTQ3NDUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9hc3QuYworKysgYi9QeXRob24vYXN0LmMKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX2NvbnRleHRfdHkpOwogc3RhdGljIGV4cHJfdHkgYXN0X2Zvcl90ZXN0bGlzdChzdHJ1Y3QgY29tcGlsaW5nICosIGNvbnN0IG5vZGUgKik7CiBzdGF0aWMgc3RtdF90eSBhc3RfZm9yX2NsYXNzZGVmKHN0cnVjdCBjb21waWxpbmcgKiwgY29uc3Qgbm9kZSAqLCBhc2RsX3NlcSAqKTsKLXN0YXRpYyBleHByX3R5IGFzdF9mb3JfdGVzdGxpc3RfZ2V4cChzdHJ1Y3QgY29tcGlsaW5nICosIGNvbnN0IG5vZGUgKik7CitzdGF0aWMgZXhwcl90eSBhc3RfZm9yX3Rlc3RsaXN0X2NvbXAoc3RydWN0IGNvbXBpbGluZyAqLCBjb25zdCBub2RlICopOwogCiAvKiBOb3RlIGRpZmZlcmVudCBzaWduYXR1cmUgZm9yIGFzdF9mb3JfY2FsbCAqLwogc3RhdGljIGV4cHJfdHkgYXN0X2Zvcl9jYWxsKHN0cnVjdCBjb21waWxpbmcgKiwgY29uc3Qgbm9kZSAqLCBleHByX3R5KTsKQEAgLTQ0LDYgKzQ0LDkgQEAKICNkZWZpbmUgTElORU5PKG4pICAgICAgICgobiktPm5fbGluZW5vKQogI2VuZGlmCiAKKyNkZWZpbmUgQ09NUF9HRU5FWFAgMAorI2RlZmluZSBDT01QX1NFVENPTVAgIDEKKwogc3RhdGljIGlkZW50aWZpZXIKIG5ld19pZGVudGlmaWVyKGNvbnN0IGNoYXIqIG4sIFB5QXJlbmEgKmFyZW5hKSB7CiAgICAgUHlPYmplY3QqIGlkID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZyhuKTsKQEAgLTEzMSwxMCArMTM0LDE3IEBACiBmb3JiaWRkZW5fY2hlY2soc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgY29uc3QgY2hhciAqeCkKIHsKICAgICBpZiAoIXN0cmNtcCh4LCAiTm9uZSIpKQotICAgICAgICByZXR1cm4gYXN0X2Vycm9yKG4sICJhc3NpZ25tZW50IHRvIE5vbmUiKTsKLSAgICBpZiAoUHlfUHkza1dhcm5pbmdGbGFnICYmICEoc3RyY21wKHgsICJUcnVlIikgJiYgc3RyY21wKHgsICJGYWxzZSIpKSAmJgotICAgICAgICAhYXN0X3dhcm4oYywgbiwgImFzc2lnbm1lbnQgdG8gVHJ1ZSBvciBGYWxzZSBpcyBmb3JiaWRkZW4gaW4gMy54IikpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gYXN0X2Vycm9yKG4sICJjYW5ub3QgYXNzaWduIHRvIE5vbmUiKTsKKyAgICBpZiAoIXN0cmNtcCh4LCAiX19kZWJ1Z19fIikpCisgICAgICAgIHJldHVybiBhc3RfZXJyb3IobiwgImNhbm5vdCBhc3NpZ24gdG8gX19kZWJ1Z19fIik7CisgICAgaWYgKFB5X1B5M2tXYXJuaW5nRmxhZykgeworICAgICAgICBpZiAoIShzdHJjbXAoeCwgIlRydWUiKSAmJiBzdHJjbXAoeCwgIkZhbHNlIikpICYmCisgICAgICAgICAgICAhYXN0X3dhcm4oYywgbiwgImFzc2lnbm1lbnQgdG8gVHJ1ZSBvciBGYWxzZSBpcyBmb3JiaWRkZW4gaW4gMy54IikpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFzdHJjbXAoeCwgIm5vbmxvY2FsIikgJiYKKyAgICAgICAgICAgICFhc3Rfd2FybihjLCBuLCAibm9ubG9jYWwgaXMgYSBrZXl3b3JkIGluIDMueCIpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIHJldHVybiAxOwogfQogCkBAIC0xOTAsNyArMjAwLDcgQEAKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgY2hhciBidWZbMTI4XTsKIAotICAgICAgICAgICAgc3ByaW50ZihidWYsICJOb24tc3RhdGVtZW50IGZvdW5kOiAlZCAlZFxuIiwKKyAgICAgICAgICAgIHNwcmludGYoYnVmLCAiTm9uLXN0YXRlbWVudCBmb3VuZDogJWQgJWQiLAogICAgICAgICAgICAgICAgICAgICBUWVBFKG4pLCBOQ0gobikpOwogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcihidWYpOwogICAgICAgICB9CkBAIC0yNjEsNyArMjcxLDcgQEAKICAgICAgICAgY2FzZSBldmFsX2lucHV0OiB7CiAgICAgICAgICAgICBleHByX3R5IHRlc3RsaXN0X2FzdDsKIAotICAgICAgICAgICAgLyogWFhYIFdoeSBub3QgZ2VuX2ZvciBoZXJlPyAqLworICAgICAgICAgICAgLyogWFhYIFdoeSBub3QgY29tcF9mb3IgaGVyZT8gKi8KICAgICAgICAgICAgIHRlc3RsaXN0X2FzdCA9IGFzdF9mb3JfdGVzdGxpc3QoJmMsIENISUxEKG4sIDApKTsKICAgICAgICAgICAgIGlmICghdGVzdGxpc3RfYXN0KQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zOTUsMTAgKzQwNSwxMyBAQAogICAgICAgICAgICAgcyA9IGUtPnYuTGlzdC5lbHRzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHVwbGVfa2luZDoKLSAgICAgICAgICAgIGlmIChhc2RsX3NlcV9MRU4oZS0+di5UdXBsZS5lbHRzKSA9PSAwKSAKLSAgICAgICAgICAgICAgICByZXR1cm4gYXN0X2Vycm9yKG4sICJjYW4ndCBhc3NpZ24gdG8gKCkiKTsKLSAgICAgICAgICAgIGUtPnYuVHVwbGUuY3R4ID0gY3R4OwotICAgICAgICAgICAgcyA9IGUtPnYuVHVwbGUuZWx0czsKKyAgICAgICAgICAgIGlmIChhc2RsX3NlcV9MRU4oZS0+di5UdXBsZS5lbHRzKSkgIHsKKyAgICAgICAgICAgICAgICBlLT52LlR1cGxlLmN0eCA9IGN0eDsKKyAgICAgICAgICAgICAgICBzID0gZS0+di5UdXBsZS5lbHRzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZXhwcl9uYW1lID0gIigpIjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExhbWJkYV9raW5kOgogICAgICAgICAgICAgZXhwcl9uYW1lID0gImxhbWJkYSI7CkBAIC00MjAsNyArNDMzLDE0IEBACiAgICAgICAgIGNhc2UgTGlzdENvbXBfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJsaXN0IGNvbXByZWhlbnNpb24iOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0Q29tcF9raW5kOgorICAgICAgICAgICAgZXhwcl9uYW1lID0gInNldCBjb21wcmVoZW5zaW9uIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERpY3RDb21wX2tpbmQ6CisgICAgICAgICAgICBleHByX25hbWUgPSAiZGljdCBjb21wcmVoZW5zaW9uIjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERpY3Rfa2luZDoKKyAgICAgICAgY2FzZSBTZXRfa2luZDoKICAgICAgICAgY2FzZSBOdW1fa2luZDoKICAgICAgICAgY2FzZSBTdHJfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJsaXRlcmFsIjsKQEAgLTQzNSw4ICs0NTUsOCBAQAogICAgICAgICAgICAgZXhwcl9uYW1lID0gImNvbmRpdGlvbmFsIGV4cHJlc3Npb24iOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsIAotICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIGV4cHJlc3Npb24gaW4gYXNzaWdubWVudCAlZCAobGluZSAlZCkiLCAKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBleHByZXNzaW9uIGluIGFzc2lnbm1lbnQgJWQgKGxpbmUgJWQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBlLT5raW5kLCBlLT5saW5lbm8pOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNDUxLDcgKzQ3MSw3IEBACiAgICAgfQogCiAgICAgLyogSWYgdGhlIExIUyBpcyBhIGxpc3Qgb3IgdHVwbGUsIHdlIG5lZWQgdG8gc2V0IHRoZSBhc3NpZ25tZW50Ci0gICAgICAgY29udGV4dCBmb3IgYWxsIHRoZSBjb250YWluZWQgZWxlbWVudHMuICAKKyAgICAgICBjb250ZXh0IGZvciBhbGwgdGhlIGNvbnRhaW5lZCBlbGVtZW50cy4KICAgICAqLwogICAgIGlmIChzKSB7CiAgICAgICAgIGludCBpOwpAQCAtNTYzLDcgKzU4Myw3IEBACiAgICAgaW50IGk7CiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdGVzdGxpc3QgfHwKICAgICAgICAgICAgVFlQRShuKSA9PSBsaXN0bWFrZXIgfHwKLSAgICAgICAgICAgVFlQRShuKSA9PSB0ZXN0bGlzdF9nZXhwIHx8CisgICAgICAgICAgIFRZUEUobikgPT0gdGVzdGxpc3RfY29tcCB8fAogICAgICAgICAgICBUWVBFKG4pID09IHRlc3RsaXN0X3NhZmUgfHwKICAgICAgICAgICAgVFlQRShuKSA9PSB0ZXN0bGlzdDEpOwogCkBAIC02NjgsMTAgKzY4OCwxMCBAQAogICAgIH0KICAgICBhcmdzID0gKG5fYXJncyA/IGFzZGxfc2VxX25ldyhuX2FyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFhcmdzICYmIG5fYXJncykKLSAgICAgICAgcmV0dXJuIE5VTEw7IC8qIERvbid0IG5lZWQgdG8gZ290byBlcnJvcjsgbm8gb2JqZWN0cyBhbGxvY2F0ZWQgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZGVmYXVsdHMgPSAobl9kZWZhdWx0cyA/IGFzZGxfc2VxX25ldyhuX2RlZmF1bHRzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICghZGVmYXVsdHMgJiYgbl9kZWZhdWx0cykKLSAgICAgICAgcmV0dXJuIE5VTEw7IC8qIERvbid0IG5lZWQgdG8gZ290byBlcnJvcjsgbm8gb2JqZWN0cyBhbGxvY2F0ZWQgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBmcGRlZjogTkFNRSB8ICcoJyBmcGxpc3QgJyknCiAgICAgICAgZnBsaXN0OiBmcGRlZiAoJywnIGZwZGVmKSogWycsJ10KQEAgLTY5MSw3ICs3MTEsNyBAQAogICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IE5DSChuKSAmJiBUWVBFKENISUxEKG4sIGkgKyAxKSkgPT0gRVFVQUwpIHsKICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIGkgKyAyKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGRlZmF1bHRzICE9IE5VTEwpOwogICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoZGVmYXVsdHMsIGorKywgZXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgICAgIGkgKz0gMjsKQEAgLTcwMiwxMSArNzIyLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBmKCh4LCAoeSkpKTogcGFzcyB3aWxsIGp1c3QgaW5jdXIgdGhlIHR1cGxlIHVucGFja2luZyB3YXJuaW5nLiAqLwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50aGVzaXplZCAmJiAhY29tcGxleF9hcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhc3RfZXJyb3IobiwgInBhcmVudGhlc2l6ZWQgYXJnIHdpdGggZGVmYXVsdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGFzdF9lcnJvcihuLCAKKyAgICAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub24tZGVmYXVsdCBhcmd1bWVudCBmb2xsb3dzIGRlZmF1bHQgYXJndW1lbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgY2ggPSBDSElMRChjaCwgMSk7CkBAIC03MTUsMTEgKzczNSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UgaGF2ZSBjb21wbGV4IGFyZ3VtZW50cywgc2V0dXAgZm9yIHVucGFja2luZy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeV9QeTNrV2FybmluZ0ZsYWcgJiYgIWFzdF93YXJuKGMsIGNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0dXBsZSBwYXJhbWV0ZXIgdW5wYWNraW5nIGhhcyBiZWVuIHJlbW92ZWQgaW4gMy54IikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhfYXJncyA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoYXJncywgaysrLCBjb21waWxlcl9jb21wbGV4X2FyZ3MoYywgY2gpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXNkbF9zZXFfR0VUKGFyZ3MsIGstMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmIGZvbygoeCkpOiBzZXR1cCBmb3IgY2hlY2tpbmcgTkFNRSBiZWxvdy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvb3AgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSBwYXJlbnMgYW5kIHR1cGxlCkBAIC03MzQsNTUgKzc1NCw1MCBAQAogICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqaWQ7CiAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgbmFtZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JiaWRkZW5fY2hlY2soYywgbiwgU1RSKENISUxEKGNoLCAwKSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICAgICBpZCA9IE5FV19JREVOVElGSUVSKENISUxEKGNoLCAwKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBOYW1lKGlkLCBQYXJhbSwgTElORU5PKGNoKSwgY2gtPm5fY29sX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGFyZ3MsIGsrKywgbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGkgKz0gMjsgLyogdGhlIG5hbWUgYW5kIHRoZSBjb21tYSAqLwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpemVkICYmIFB5X1B5M2tXYXJuaW5nRmxhZyAmJgogICAgICAgICAgICAgICAgICAgICAhYXN0X3dhcm4oYywgY2gsICJwYXJlbnRoZXNpemVkIGFyZ3VtZW50IG5hbWVzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmUgaW52YWxpZCBpbiAzLngiKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgU1RBUjoKICAgICAgICAgICAgICAgICBpZiAoIWZvcmJpZGRlbl9jaGVjayhjLCBDSElMRChuLCBpKzEpLCBTVFIoQ0hJTEQobiwgaSsxKSkpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB2YXJhcmcgPSBORVdfSURFTlRJRklFUihDSElMRChuLCBpKzEpKTsKICAgICAgICAgICAgICAgICBpZiAoIXZhcmFyZykKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET1VCTEVTVEFSOgogICAgICAgICAgICAgICAgIGlmICghZm9yYmlkZGVuX2NoZWNrKGMsIENISUxEKG4sIGkrMSksIFNUUihDSElMRChuLCBpKzEpKSkpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGt3YXJnID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgaSsxKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFrd2FyZykKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIG5vZGUgaW4gdmFyYXJnc2xpc3Q6ICVkIEAgJWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFKGNoKSwgaSk7Ci0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBhcmd1bWVudHMoYXJncywgdmFyYXJnLCBrd2FyZywgZGVmYXVsdHMsIGMtPmNfYXJlbmEpOwotCi0gZXJyb3I6Ci0gICAgUHlfWERFQ1JFRih2YXJhcmcpOwotICAgIFB5X1hERUNSRUYoa3dhcmcpOwotICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgZXhwcl90eQpAQCAtODIzLDE1ICs4MzgsMTUgQEAKICAgICAvKiBkZWNvcmF0b3I6ICdAJyBkb3R0ZWRfbmFtZSBbICcoJyBbYXJnbGlzdF0gJyknIF0gTkVXTElORSAqLwogICAgIGV4cHJfdHkgZCA9IE5VTEw7CiAgICAgZXhwcl90eSBuYW1lX2V4cHI7Ci0gICAgCisKICAgICBSRVEobiwgZGVjb3JhdG9yKTsKICAgICBSRVEoQ0hJTEQobiwgMCksIEFUKTsKICAgICBSRVEoUkNISUxEKG4sIC0xKSwgTkVXTElORSk7Ci0gICAgCisKICAgICBuYW1lX2V4cHIgPSBhc3RfZm9yX2RvdHRlZF9uYW1lKGMsIENISUxEKG4sIDEpKTsKICAgICBpZiAoIW5hbWVfZXhwcikKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIAorCiAgICAgaWYgKE5DSChuKSA9PSAzKSB7IC8qIE5vIGFyZ3VtZW50cyAqLwogICAgICAgICBkID0gbmFtZV9leHByOwogICAgICAgICBuYW1lX2V4cHIgPSBOVUxMOwpAQCAtODU5LDE3ICs4NzQsMTcgQEAKICAgICBhc2RsX3NlcSogZGVjb3JhdG9yX3NlcTsKICAgICBleHByX3R5IGQ7CiAgICAgaW50IGk7Ci0gICAgCisKICAgICBSRVEobiwgZGVjb3JhdG9ycyk7CiAgICAgZGVjb3JhdG9yX3NlcSA9IGFzZGxfc2VxX25ldyhOQ0gobiksIGMtPmNfYXJlbmEpOwogICAgIGlmICghZGVjb3JhdG9yX3NlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIAorCiAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSsrKSB7CiAgICAgICAgIGQgPSBhc3RfZm9yX2RlY29yYXRvcihjLCBDSElMRChuLCBpKSk7Ci0gICAgICAgICAgICBpZiAoIWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBhc2RsX3NlcV9TRVQoZGVjb3JhdG9yX3NlcSwgaSwgZCk7CisgICAgICAgIGlmICghZCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBhc2RsX3NlcV9TRVQoZGVjb3JhdG9yX3NlcSwgaSwgZCk7CiAgICAgfQogICAgIHJldHVybiBkZWNvcmF0b3Jfc2VxOwogfQpAQCAtOTYxLDcgKzk3Niw3IEBACiBzdGF0aWMgZXhwcl90eQogYXN0X2Zvcl9pZmV4cHIoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKIHsKLSAgICAvKiB0ZXN0OiBvcl90ZXN0ICdpZicgb3JfdGVzdCAnZWxzZScgdGVzdCAqLyAKKyAgICAvKiB0ZXN0OiBvcl90ZXN0ICdpZicgb3JfdGVzdCAnZWxzZScgdGVzdCAqLwogICAgIGV4cHJfdHkgZXhwcmVzc2lvbiwgYm9keSwgb3JlbHNlOwogCiAgICAgYXNzZXJ0KE5DSChuKSA9PSA1KTsKQEAgLTEwNTIsNyArMTA2Nyw3IEBACiAgICAgICAgbGlzdF9pZjogJ2lmJyB0ZXN0IFtsaXN0X2l0ZXJdCiAgICAgICAgdGVzdGxpc3Rfc2FmZTogdGVzdCBbKCcsJyB0ZXN0KSsgWycsJ11dCiAgICAgKi8KLSAgICBleHByX3R5IGVsdDsKKyAgICBleHByX3R5IGVsdCwgZmlyc3Q7CiAgICAgYXNkbF9zZXEgKmxpc3Rjb21wczsKICAgICBpbnQgaSwgbl9mb3JzOwogICAgIG5vZGUgKmNoOwpAQCAtMTA3OCw5ICsxMDkzLDkgQEAKICAgICAgICAgYXNkbF9zZXEgKnQ7CiAgICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKICAgICAgICAgbm9kZSAqZm9yX2NoOwotICAgICAgICAKKwogICAgICAgICBSRVEoY2gsIGxpc3RfZm9yKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yX2NoID0gQ0hJTEQoY2gsIDEpOwogICAgICAgICB0ID0gYXN0X2Zvcl9leHBybGlzdChjLCBmb3JfY2gsIFN0b3JlKTsKICAgICAgICAgaWYgKCF0KQpAQCAtMTA4OCwxNSArMTEwMywxNSBAQAogICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl90ZXN0bGlzdChjLCBDSElMRChjaCwgMykpOwogICAgICAgICBpZiAoIWV4cHJlc3Npb24pCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgCisKICAgICAgICAgLyogQ2hlY2sgdGhlICMgb2YgY2hpbGRyZW4gcmF0aGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0LCBzaW5jZQogICAgICAgICAgICBbeCBmb3IgeCwgaW4gLi4uIF0gaGFzIDEgZWxlbWVudCBpbiB0LCBidXQgc3RpbGwgcmVxdWlyZXMgYSBUdXBsZS4KICAgICAgICAgKi8KKyAgICAgICAgZmlyc3QgPSAoZXhwcl90eSlhc2RsX3NlcV9HRVQodCwgMCk7CiAgICAgICAgIGlmIChOQ0goZm9yX2NoKSA9PSAxKQotICAgICAgICAgICAgbGMgPSBjb21wcmVoZW5zaW9uKChleHByX3R5KWFzZGxfc2VxX0dFVCh0LCAwKSwgZXhwcmVzc2lvbiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGxjID0gY29tcHJlaGVuc2lvbihmaXJzdCwgZXhwcmVzc2lvbiwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxjID0gY29tcHJlaGVuc2lvbihUdXBsZSh0LCBTdG9yZSwgTElORU5PKGNoKSwgY2gtPm5fY29sX29mZnNldCwKKyAgICAgICAgICAgIGxjID0gY29tcHJlaGVuc2lvbihUdXBsZSh0LCBTdG9yZSwgZmlyc3QtPmxpbmVubywgZmlyc3QtPmNvbF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghbGMpCkBAIC0xMTIwLDExICsxMTM1LDExIEBACiAgICAgICAgICAgICAgICAgUkVRKGNoLCBsaXN0X2l0ZXIpOwogICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDApOwogICAgICAgICAgICAgICAgIFJFUShjaCwgbGlzdF9pZik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBsaXN0X2Zvcl9leHByID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAxKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFsaXN0X2Zvcl9leHByKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChpZnMsIGosIGxpc3RfZm9yX2V4cHIpOwogICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID09IDMpCiAgICAgICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDIpOwpAQCAtMTE0MCw2MCArMTE1NSw2MCBAQAogICAgIHJldHVybiBMaXN0Q29tcChlbHQsIGxpc3Rjb21wcywgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogfQogCi0vKiBDb3VudCB0aGUgbnVtYmVyIG9mICdmb3InIGxvb3BzIGluIGEgZ2VuZXJhdG9yIGV4cHJlc3Npb24uCisvKgorICAgQ291bnQgdGhlIG51bWJlciBvZiAnZm9yJyBsb29wcyBpbiBhIGNvbXByZWhlbnNpb24uCiAKLSAgIEhlbHBlciBmb3IgYXN0X2Zvcl9nZW5leHAoKS4KKyAgIEhlbHBlciBmb3IgYXN0X2Zvcl9jb21wcmVoZW5zaW9uKCkuCiAqLwogCiBzdGF0aWMgaW50Ci1jb3VudF9nZW5fZm9ycyhzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQorY291bnRfY29tcF9mb3JzKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCiB7CiAgICAgaW50IG5fZm9ycyA9IDA7Ci0gICAgbm9kZSAqY2ggPSBDSElMRChuLCAxKTsKIAotIGNvdW50X2dlbl9mb3I6CisgIGNvdW50X2NvbXBfZm9yOgogICAgIG5fZm9ycysrOwotICAgIFJFUShjaCwgZ2VuX2Zvcik7Ci0gICAgaWYgKE5DSChjaCkgPT0gNSkKLSAgICAgICAgY2ggPSBDSElMRChjaCwgNCk7CisgICAgUkVRKG4sIGNvbXBfZm9yKTsKKyAgICBpZiAoTkNIKG4pID09IDUpCisgICAgICAgIG4gPSBDSElMRChuLCA0KTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBuX2ZvcnM7Ci0gY291bnRfZ2VuX2l0ZXI6Ci0gICAgUkVRKGNoLCBnZW5faXRlcik7Ci0gICAgY2ggPSBDSElMRChjaCwgMCk7Ci0gICAgaWYgKFRZUEUoY2gpID09IGdlbl9mb3IpCi0gICAgICAgIGdvdG8gY291bnRfZ2VuX2ZvcjsKLSAgICBlbHNlIGlmIChUWVBFKGNoKSA9PSBnZW5faWYpIHsKLSAgICAgICAgaWYgKE5DSChjaCkgPT0gMykgewotICAgICAgICAgICAgY2ggPSBDSElMRChjaCwgMik7Ci0gICAgICAgICAgICBnb3RvIGNvdW50X2dlbl9pdGVyOworICBjb3VudF9jb21wX2l0ZXI6CisgICAgUkVRKG4sIGNvbXBfaXRlcik7CisgICAgbiA9IENISUxEKG4sIDApOworICAgIGlmIChUWVBFKG4pID09IGNvbXBfZm9yKQorICAgICAgICBnb3RvIGNvdW50X2NvbXBfZm9yOworICAgIGVsc2UgaWYgKFRZUEUobikgPT0gY29tcF9pZikgeworICAgICAgICBpZiAoTkNIKG4pID09IDMpIHsKKyAgICAgICAgICAgIG4gPSBDSElMRChuLCAyKTsKKyAgICAgICAgICAgIGdvdG8gY291bnRfY29tcF9pdGVyOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBuX2ZvcnM7CiAgICAgfQotICAgIAorCiAgICAgLyogU2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQgKi8KICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJsb2dpYyBlcnJvciBpbiBjb3VudF9nZW5fZm9ycyIpOworICAgICAgICAgICAgICAgICAgICAibG9naWMgZXJyb3IgaW4gY291bnRfY29tcF9mb3JzIik7CiAgICAgcmV0dXJuIC0xOwogfQogCi0vKiBDb3VudCB0aGUgbnVtYmVyIG9mICdpZicgc3RhdGVtZW50cyBpbiBhIGdlbmVyYXRvciBleHByZXNzaW9uLgorLyogQ291bnQgdGhlIG51bWJlciBvZiAnaWYnIHN0YXRlbWVudHMgaW4gYSBjb21wcmVoZW5zaW9uLgogCi0gICBIZWxwZXIgZm9yIGFzdF9mb3JfZ2VuZXhwKCkuCisgICBIZWxwZXIgZm9yIGFzdF9mb3JfY29tcHJlaGVuc2lvbigpLgogKi8KIAogc3RhdGljIGludAotY291bnRfZ2VuX2lmcyhzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQorY291bnRfY29tcF9pZnMoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKIHsKICAgICBpbnQgbl9pZnMgPSAwOwogCiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgUkVRKG4sIGdlbl9pdGVyKTsKLSAgICAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IGdlbl9mb3IpCisgICAgICAgIFJFUShuLCBjb21wX2l0ZXIpOworICAgICAgICBpZiAoVFlQRShDSElMRChuLCAwKSkgPT0gY29tcF9mb3IpCiAgICAgICAgICAgICByZXR1cm4gbl9pZnM7CiAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKLSAgICAgICAgUkVRKG4sIGdlbl9pZik7CisgICAgICAgIFJFUShuLCBjb21wX2lmKTsKICAgICAgICAgbl9pZnMrKzsKICAgICAgICAgaWYgKE5DSChuKSA9PSAyKQogICAgICAgICAgICAgcmV0dXJuIG5faWZzOwpAQCAtMTIwMSw2OCArMTIxNiw1NCBAQAogICAgIH0KIH0KIAotLyogVE9ETyhqaHlsdG9uKTogQ29tYmluZSB3aXRoIGxpc3QgY29tcHJlaGVuc2lvbiBjb2RlPyAqLwotc3RhdGljIGV4cHJfdHkKLWFzdF9mb3JfZ2VuZXhwKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCitzdGF0aWMgYXNkbF9zZXEgKgorYXN0X2Zvcl9jb21wcmVoZW5zaW9uKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCiB7Ci0gICAgLyogdGVzdGxpc3RfZ2V4cDogdGVzdCAoIGdlbl9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSApCi0gICAgICAgYXJndW1lbnQ6IFt0ZXN0ICc9J10gdGVzdCBbZ2VuX2Zvcl0gICAgICAgIyBSZWFsbHkgW2tleXdvcmQgJz0nXSB0ZXN0ICovCi0gICAgZXhwcl90eSBlbHQ7Ci0gICAgYXNkbF9zZXEgKmdlbmV4cHM7CiAgICAgaW50IGksIG5fZm9yczsKLSAgICBub2RlICpjaDsKLSAgICAKLSAgICBhc3NlcnQoVFlQRShuKSA9PSAodGVzdGxpc3RfZ2V4cCkgfHwgVFlQRShuKSA9PSAoYXJndW1lbnQpKTsKLSAgICBhc3NlcnQoTkNIKG4pID4gMSk7Ci0gICAgCi0gICAgZWx0ID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDApKTsKLSAgICBpZiAoIWVsdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgCi0gICAgbl9mb3JzID0gY291bnRfZ2VuX2ZvcnMoYywgbik7CisgICAgYXNkbF9zZXEgKmNvbXBzOworCisgICAgbl9mb3JzID0gY291bnRfY29tcF9mb3JzKGMsIG4pOwogICAgIGlmIChuX2ZvcnMgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgZ2VuZXhwcyA9IGFzZGxfc2VxX25ldyhuX2ZvcnMsIGMtPmNfYXJlbmEpOwotICAgIGlmICghZ2VuZXhwcykKKyAgICBjb21wcyA9IGFzZGxfc2VxX25ldyhuX2ZvcnMsIGMtPmNfYXJlbmEpOworICAgIGlmICghY29tcHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgY2ggPSBDSElMRChuLCAxKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbl9mb3JzOyBpKyspIHsKLSAgICAgICAgY29tcHJlaGVuc2lvbl90eSBnZTsKKyAgICAgICAgY29tcHJlaGVuc2lvbl90eSBjb21wOwogICAgICAgICBhc2RsX3NlcSAqdDsKLSAgICAgICAgZXhwcl90eSBleHByZXNzaW9uOworICAgICAgICBleHByX3R5IGV4cHJlc3Npb24sIGZpcnN0OwogICAgICAgICBub2RlICpmb3JfY2g7Ci0gICAgICAgIAotICAgICAgICBSRVEoY2gsIGdlbl9mb3IpOwotICAgICAgICAKLSAgICAgICAgZm9yX2NoID0gQ0hJTEQoY2gsIDEpOworCisgICAgICAgIFJFUShuLCBjb21wX2Zvcik7CisKKyAgICAgICAgZm9yX2NoID0gQ0hJTEQobiwgMSk7CiAgICAgICAgIHQgPSBhc3RfZm9yX2V4cHJsaXN0KGMsIGZvcl9jaCwgU3RvcmUpOwogICAgICAgICBpZiAoIXQpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMykpOworICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDMpKTsKICAgICAgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgLyogQ2hlY2sgdGhlICMgb2YgY2hpbGRyZW4gcmF0aGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0LCBzaW5jZQogICAgICAgICAgICAoeCBmb3IgeCwgaW4gLi4uKSBoYXMgMSBlbGVtZW50IGluIHQsIGJ1dCBzdGlsbCByZXF1aXJlcyBhIFR1cGxlLiAqLworICAgICAgICBmaXJzdCA9IChleHByX3R5KWFzZGxfc2VxX0dFVCh0LCAwKTsKICAgICAgICAgaWYgKE5DSChmb3JfY2gpID09IDEpCi0gICAgICAgICAgICBnZSA9IGNvbXByZWhlbnNpb24oKGV4cHJfdHkpYXNkbF9zZXFfR0VUKHQsIDApLCBleHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgY29tcCA9IGNvbXByZWhlbnNpb24oZmlyc3QsIGV4cHJlc3Npb24sIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBnZSA9IGNvbXByZWhlbnNpb24oVHVwbGUodCwgU3RvcmUsIExJTkVOTyhjaCksIGNoLT5uX2NvbF9vZmZzZXQsCisgICAgICAgICAgICBjb21wID0gY29tcHJlaGVuc2lvbihUdXBsZSh0LCBTdG9yZSwgZmlyc3QtPmxpbmVubywgZmlyc3QtPmNvbF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiwgTlVMTCwgYy0+Y19hcmVuYSk7Ci0KLSAgICAgICAgaWYgKCFnZSkKKyAgICAgICAgaWYgKCFjb21wKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgaWYgKE5DSChjaCkgPT0gNSkgeworICAgICAgICBpZiAoTkNIKG4pID09IDUpIHsKICAgICAgICAgICAgIGludCBqLCBuX2lmczsKICAgICAgICAgICAgIGFzZGxfc2VxICppZnM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDQpOwotICAgICAgICAgICAgbl9pZnMgPSBjb3VudF9nZW5faWZzKGMsIGNoKTsKKworICAgICAgICAgICAgbiA9IENISUxEKG4sIDQpOworICAgICAgICAgICAgbl9pZnMgPSBjb3VudF9jb21wX2lmcyhjLCBuKTsKICAgICAgICAgICAgIGlmIChuX2lmcyA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTI3MSwzNiArMTI3Miw5OCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbl9pZnM7IGorKykgewotICAgICAgICAgICAgICAgIFJFUShjaCwgZ2VuX2l0ZXIpOwotICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDApOwotICAgICAgICAgICAgICAgIFJFUShjaCwgZ2VuX2lmKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAxKSk7CisgICAgICAgICAgICAgICAgUkVRKG4sIGNvbXBfaXRlcik7CisgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOworICAgICAgICAgICAgICAgIFJFUShuLCBjb21wX2lmKTsKKworICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMSkpOwogICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGlmcywgaiwgZXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgaWYgKE5DSChjaCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgY2ggPSBDSElMRChjaCwgMik7CisgICAgICAgICAgICAgICAgaWYgKE5DSChuKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBuID0gQ0hJTEQobiwgMik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBvbiBleGl0LCBtdXN0IGd1YXJhbnRlZSB0aGF0IGNoIGlzIGEgZ2VuX2ZvciAqLwotICAgICAgICAgICAgaWYgKFRZUEUoY2gpID09IGdlbl9pdGVyKQotICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDApOwotICAgICAgICAgICAgZ2UtPmlmcyA9IGlmczsKKyAgICAgICAgICAgIC8qIG9uIGV4aXQsIG11c3QgZ3VhcmFudGVlIHRoYXQgbiBpcyBhIGNvbXBfZm9yICovCisgICAgICAgICAgICBpZiAoVFlQRShuKSA9PSBjb21wX2l0ZXIpCisgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOworICAgICAgICAgICAgY29tcC0+aWZzID0gaWZzOwogICAgICAgICB9Ci0gICAgICAgIGFzZGxfc2VxX1NFVChnZW5leHBzLCBpLCBnZSk7CisgICAgICAgIGFzZGxfc2VxX1NFVChjb21wcywgaSwgY29tcCk7CiAgICAgfQotICAgIAotICAgIHJldHVybiBHZW5lcmF0b3JFeHAoZWx0LCBnZW5leHBzLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgcmV0dXJuIGNvbXBzOworfQorCitzdGF0aWMgZXhwcl90eQorYXN0X2Zvcl9pdGVyY29tcChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBpbnQgdHlwZSkKK3sKKyAgICBleHByX3R5IGVsdDsKKyAgICBhc2RsX3NlcSAqY29tcHM7CisKKyAgICBhc3NlcnQoTkNIKG4pID4gMSk7CisKKyAgICBlbHQgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMCkpOworICAgIGlmICghZWx0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGNvbXBzID0gYXN0X2Zvcl9jb21wcmVoZW5zaW9uKGMsIENISUxEKG4sIDEpKTsKKyAgICBpZiAoIWNvbXBzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICh0eXBlID09IENPTVBfR0VORVhQKQorICAgICAgICByZXR1cm4gR2VuZXJhdG9yRXhwKGVsdCwgY29tcHMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICBlbHNlIGlmICh0eXBlID09IENPTVBfU0VUQ09NUCkKKyAgICAgICAgcmV0dXJuIFNldENvbXAoZWx0LCBjb21wcywgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgIGVsc2UKKyAgICAgICAgLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLworICAgICAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGV4cHJfdHkKK2FzdF9mb3JfZGljdGNvbXAoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKK3sKKyAgICBleHByX3R5IGtleSwgdmFsdWU7CisgICAgYXNkbF9zZXEgKmNvbXBzOworCisgICAgYXNzZXJ0KE5DSChuKSA+IDMpOworICAgIFJFUShDSElMRChuLCAxKSwgQ09MT04pOworCisgICAga2V5ID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDApKTsKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB2YWx1ZSA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAyKSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBjb21wcyA9IGFzdF9mb3JfY29tcHJlaGVuc2lvbihjLCBDSElMRChuLCAzKSk7CisgICAgaWYgKCFjb21wcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gRGljdENvbXAoa2V5LCB2YWx1ZSwgY29tcHMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKK30KKworc3RhdGljIGV4cHJfdHkKK2FzdF9mb3JfZ2VuZXhwKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCit7CisgICAgYXNzZXJ0KFRZUEUobikgPT0gKHRlc3RsaXN0X2NvbXApIHx8IFRZUEUobikgPT0gKGFyZ3VtZW50KSk7CisgICAgcmV0dXJuIGFzdF9mb3JfaXRlcmNvbXAoYywgbiwgQ09NUF9HRU5FWFApOworfQorCitzdGF0aWMgZXhwcl90eQorYXN0X2Zvcl9zZXRjb21wKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCit7CisgICAgYXNzZXJ0KFRZUEUobikgPT0gKGRpY3RvcnNldG1ha2VyKSk7CisgICAgcmV0dXJuIGFzdF9mb3JfaXRlcmNvbXAoYywgbiwgQ09NUF9TRVRDT01QKTsKIH0KIAogc3RhdGljIGV4cHJfdHkKIGFzdF9mb3JfYXRvbShzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQogewotICAgIC8qIGF0b206ICcoJyBbeWllbGRfZXhwcnx0ZXN0bGlzdF9nZXhwXSAnKScgfCAnWycgW2xpc3RtYWtlcl0gJ10nCisgICAgLyogYXRvbTogJygnIFt5aWVsZF9leHByfHRlc3RsaXN0X2NvbXBdICcpJyB8ICdbJyBbbGlzdG1ha2VyXSAnXScKICAgICAgICB8ICd7JyBbZGljdG1ha2VyXSAnfScgfCAnYCcgdGVzdGxpc3QgJ2AnIHwgTkFNRSB8IE5VTUJFUiB8IFNUUklORysKICAgICAqLwogICAgIG5vZGUgKmNoID0gQ0hJTEQobiwgMCk7Ci0gICAgCisKICAgICBzd2l0Y2ggKFRZUEUoY2gpKSB7CiAgICAgY2FzZSBOQU1FOiB7CiAgICAgICAgIC8qIEFsbCBuYW1lcyBzdGFydCBpbiBMb2FkIGNvbnRleHQsIGJ1dCBtYXkgbGF0ZXIgYmUKQEAgLTEzNDgsMjMgKzE0MTEsMjAgQEAKICAgICB9CiAgICAgY2FzZSBMUEFSOiAvKiBzb21lIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbnMgKi8KICAgICAgICAgY2ggPSBDSElMRChuLCAxKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKFRZUEUoY2gpID09IFJQQVIpCiAgICAgICAgICAgICByZXR1cm4gVHVwbGUoTlVMTCwgTG9hZCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwotICAgICAgICAKKwogICAgICAgICBpZiAoVFlQRShjaCkgPT0geWllbGRfZXhwcikKICAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2V4cHIoYywgY2gpOwotICAgICAgICAKLSAgICAgICAgaWYgKChOQ0goY2gpID4gMSkgJiYgKFRZUEUoQ0hJTEQoY2gsIDEpKSA9PSBnZW5fZm9yKSkKLSAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2dlbmV4cChjLCBjaCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gYXN0X2Zvcl90ZXN0bGlzdF9nZXhwKGMsIGNoKTsKKworICAgICAgICByZXR1cm4gYXN0X2Zvcl90ZXN0bGlzdF9jb21wKGMsIGNoKTsKICAgICBjYXNlIExTUUI6IC8qIGxpc3QgKG9yIGxpc3QgY29tcHJlaGVuc2lvbikgKi8KICAgICAgICAgY2ggPSBDSElMRChuLCAxKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKFRZUEUoY2gpID09IFJTUUIpCiAgICAgICAgICAgICByZXR1cm4gTGlzdChOVUxMLCBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7Ci0gICAgICAgIAorCiAgICAgICAgIFJFUShjaCwgbGlzdG1ha2VyKTsKICAgICAgICAgaWYgKE5DSChjaCkgPT0gMSB8fCBUWVBFKENISUxEKGNoLCAxKSkgPT0gQ09NTUEpIHsKICAgICAgICAgICAgIGFzZGxfc2VxICplbHRzID0gc2VxX2Zvcl90ZXN0bGlzdChjLCBjaCk7CkBAIC0xMzc2LDM2ICsxNDM2LDY1IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2xpc3Rjb21wKGMsIGNoKTsKICAgICBjYXNlIExCUkFDRTogewotICAgICAgICAvKiBkaWN0bWFrZXI6IHRlc3QgJzonIHRlc3QgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10gKi8KKyAgICAgICAgLyogZGljdG9yc2V0bWFrZXI6CisgICAgICAgICAqICAgICh0ZXN0ICc6JyB0ZXN0IChjb21wX2ZvciB8ICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddKSkgfAorICAgICAgICAgKiAgICAodGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSkpCisgICAgICAgICAqLwogICAgICAgICBpbnQgaSwgc2l6ZTsKICAgICAgICAgYXNkbF9zZXEgKmtleXMsICp2YWx1ZXM7Ci0gICAgICAgIAorCiAgICAgICAgIGNoID0gQ0hJTEQobiwgMSk7Ci0gICAgICAgIHNpemUgPSAoTkNIKGNoKSArIDEpIC8gNDsgLyogKzEgaW4gY2FzZSBubyB0cmFpbGluZyBjb21tYSAqLwotICAgICAgICBrZXlzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOwotICAgICAgICBpZiAoIWtleXMpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlcyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKLSAgICAgICAgaWYgKCF2YWx1ZXMpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0goY2gpOyBpICs9IDQpIHsKLSAgICAgICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgaSkpOwotICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uKQorICAgICAgICBpZiAoVFlQRShjaCkgPT0gUkJSQUNFKSB7CisgICAgICAgICAgICAvKiBpdCdzIGFuIGVtcHR5IGRpY3QgKi8KKyAgICAgICAgICAgIHJldHVybiBEaWN0KE5VTEwsIE5VTEwsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgfSBlbHNlIGlmIChOQ0goY2gpID09IDEgfHwgVFlQRShDSElMRChjaCwgMSkpID09IENPTU1BKSB7CisgICAgICAgICAgICAvKiBpdCdzIGEgc2ltcGxlIHNldCAqLworICAgICAgICAgICAgYXNkbF9zZXEgKmVsdHM7CisgICAgICAgICAgICBzaXplID0gKE5DSChjaCkgKyAxKSAvIDI7IC8qICsxIGluIGNhc2Ugbm8gdHJhaWxpbmcgY29tbWEgKi8KKyAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBpZiAoIWVsdHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKGNoKTsgaSArPSAyKSB7CisgICAgICAgICAgICAgICAgZXhwcl90eSBleHByZXNzaW9uOworICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIGkpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChlbHRzLCBpIC8gMiwgZXhwcmVzc2lvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gU2V0KGVsdHMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgfSBlbHNlIGlmIChUWVBFKENISUxEKGNoLCAxKSkgPT0gY29tcF9mb3IpIHsKKyAgICAgICAgICAgIC8qIGl0J3MgYSBzZXQgY29tcHJlaGVuc2lvbiAqLworICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3Jfc2V0Y29tcChjLCBjaCk7CisgICAgICAgIH0gZWxzZSBpZiAoTkNIKGNoKSA+IDMgJiYgVFlQRShDSElMRChjaCwgMykpID09IGNvbXBfZm9yKSB7CisgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9kaWN0Y29tcChjLCBjaCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBpdCdzIGEgZGljdCAqLworICAgICAgICAgICAgc2l6ZSA9IChOQ0goY2gpICsgMSkgLyA0OyAvKiArMSBpbiBjYXNlIG5vIHRyYWlsaW5nIGNvbW1hICovCisgICAgICAgICAgICBrZXlzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCFrZXlzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBhc2RsX3NlcV9TRVQoa2V5cywgaSAvIDQsIGV4cHJlc3Npb24pOwotCi0gICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCBpICsgMikpOwotICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uKQorICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCF2YWx1ZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGFzZGxfc2VxX1NFVCh2YWx1ZXMsIGkgLyA0LCBleHByZXNzaW9uKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0goY2gpOyBpICs9IDQpIHsKKyAgICAgICAgICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CisKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCBpKSk7CisgICAgICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChrZXlzLCBpIC8gNCwgZXhwcmVzc2lvbik7CisKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCBpICsgMikpOworICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQodmFsdWVzLCBpIC8gNCwgZXhwcmVzc2lvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gRGljdChrZXlzLCB2YWx1ZXMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gRGljdChrZXlzLCB2YWx1ZXMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAgICAgY2FzZSBCQUNLUVVPVEU6IHsgLyogcmVwciAqLwogICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CkBAIC0xNDQzLDEwICsxNTMyLDEwIEBACiAgICAgaWYgKE5DSChuKSA9PSAxICYmIFRZUEUoY2gpID09IHRlc3QpIHsKICAgICAgICAgLyogJ3N0ZXAnIHZhcmlhYmxlIGhvbGQgbm8gc2lnbmlmaWNhbmNlIGluIHRlcm1zIG9mIGJlaW5nIHVzZWQgb3ZlcgogICAgICAgICAgICBvdGhlciB2YXJzICovCi0gICAgICAgIHN0ZXAgPSBhc3RfZm9yX2V4cHIoYywgY2gpOyAKKyAgICAgICAgc3RlcCA9IGFzdF9mb3JfZXhwcihjLCBjaCk7CiAgICAgICAgIGlmICghc3RlcCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgCisKICAgICAgICAgcmV0dXJuIEluZGV4KHN0ZXAsIGMtPmNfYXJlbmEpOwogICAgIH0KIApAQCAtMTQ4MCwxMCArMTU2OSwxNyBAQAogICAgIGNoID0gQ0hJTEQobiwgTkNIKG4pIC0gMSk7CiAgICAgaWYgKFRZUEUoY2gpID09IHNsaWNlb3ApIHsKICAgICAgICAgaWYgKE5DSChjaCkgPT0gMSkgewotICAgICAgICAgICAgLyogTm8gZXhwcmVzc2lvbiwgc28gc3RlcCBpcyBOb25lICovCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBUaGlzIGlzIGFuIGV4dGVuZGVkIHNsaWNlIChpZSAieFs6Ol0iKSB3aXRoIG5vIGV4cHJlc3Npb24gaW4gdGhlCisgICAgICAgICAgICAgIHN0ZXAgZmllbGQuIFdlIHNldCB0aGlzIGxpdGVyYWxseSB0byAiTm9uZSIgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgZGlzYW1iaWd1YXRlIGl0IGZyb20geFs6XS4gKFRoZSBpbnRlcnByZXRlciBtaWdodCBoYXZlIHRvIGNhbGwKKyAgICAgICAgICAgICAgX19nZXRzbGljZV9fIGZvciB4WzpdLCBidXQgaXQgbXVzdCBjYWxsIF9fZ2V0aXRlbV9fIGZvciB4Wzo6XS4pCisgICAgICAgICAgICAqLworICAgICAgICAgICAgaWRlbnRpZmllciBub25lID0gbmV3X2lkZW50aWZpZXIoIk5vbmUiLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmICghbm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDApOwotICAgICAgICAgICAgc3RlcCA9IE5hbWUobmV3X2lkZW50aWZpZXIoIk5vbmUiLCBjLT5jX2FyZW5hKSwgTG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIExJTkVOTyhjaCksIGNoLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgc3RlcCA9IE5hbWUobm9uZSwgTG9hZCwgTElORU5PKGNoKSwgY2gtPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIXN0ZXApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNTAzLDcgKzE1OTksNyBAQAogYXN0X2Zvcl9iaW5vcChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQogewogICAgICAgICAvKiBNdXN0IGFjY291bnQgZm9yIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnMuCi0gICAgICAgICAgIEhvdyBzaG91bGQgQSBvcCBCIG9wIEMgYnkgcmVwcmVzZW50ZWQ/ICAKKyAgICAgICAgICAgSG93IHNob3VsZCBBIG9wIEIgb3AgQyBieSByZXByZXNlbnRlZD8KICAgICAgICAgICAgQmluT3AoQmluT3AoQSwgb3AsIEIpLCBvcCwgQykuCiAgICAgICAgICovCiAKQEAgLTE1NDEsMTAgKzE2MzcsMTAgQEAKICAgICAgICAgICAgICAgICBpZiAoIXRtcCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgICAgICB0bXBfcmVzdWx0ID0gQmluT3AocmVzdWx0LCBuZXdvcGVyYXRvciwgdG1wLCAKKyAgICAgICAgICAgICAgICB0bXBfcmVzdWx0ID0gQmluT3AocmVzdWx0LCBuZXdvcGVyYXRvciwgdG1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8obmV4dF9vcGVyKSwgbmV4dF9vcGVyLT5uX2NvbF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpOwotICAgICAgICAgICAgICAgIGlmICghdG1wX3Jlc3VsdCkgCisgICAgICAgICAgICAgICAgaWYgKCF0bXBfcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdG1wX3Jlc3VsdDsKICAgICAgICAgfQpAQCAtMTU1NCw3ICsxNjUwLDcgQEAKIHN0YXRpYyBleHByX3R5CiBhc3RfZm9yX3RyYWlsZXIoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgZXhwcl90eSBsZWZ0X2V4cHIpCiB7Ci0gICAgLyogdHJhaWxlcjogJygnIFthcmdsaXN0XSAnKScgfCAnWycgc3Vic2NyaXB0bGlzdCAnXScgfCAnLicgTkFNRSAKKyAgICAvKiB0cmFpbGVyOiAnKCcgW2FyZ2xpc3RdICcpJyB8ICdbJyBzdWJzY3JpcHRsaXN0ICddJyB8ICcuJyBOQU1FCiAgICAgICAgc3Vic2NyaXB0bGlzdDogc3Vic2NyaXB0ICgnLCcgc3Vic2NyaXB0KSogWycsJ10KICAgICAgICBzdWJzY3JpcHQ6ICcuJyAnLicgJy4nIHwgdGVzdCB8IFt0ZXN0XSAnOicgW3Rlc3RdIFtzbGljZW9wXQogICAgICAqLwpAQCAtMTU4NSw3ICsxNjgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBUaGUgZ3JhbW1hciBpcyBhbWJpZ3VvdXMgaGVyZS4gVGhlIGFtYmlndWl0eSBpcyByZXNvbHZlZCAKKyAgICAgICAgICAgIC8qIFRoZSBncmFtbWFyIGlzIGFtYmlndW91cyBoZXJlLiBUaGUgYW1iaWd1aXR5IGlzIHJlc29sdmVkCiAgICAgICAgICAgICAgICBieSB0cmVhdGluZyB0aGUgc2VxdWVuY2UgYXMgYSB0dXBsZSBsaXRlcmFsIGlmIHRoZXJlIGFyZQogICAgICAgICAgICAgICAgbm8gc2xpY2UgZmVhdHVyZXMuCiAgICAgICAgICAgICAqLwpAQCAtMTcyMiw3ICsxODE4LDcgQEAKIHsKICAgICAvKiBoYW5kbGUgdGhlIGZ1bGwgcmFuZ2Ugb2Ygc2ltcGxlIGV4cHJlc3Npb25zCiAgICAgICAgdGVzdDogb3JfdGVzdCBbJ2lmJyBvcl90ZXN0ICdlbHNlJyB0ZXN0XSB8IGxhbWJkZWYKLSAgICAgICBvcl90ZXN0OiBhbmRfdGVzdCAoJ29yJyBhbmRfdGVzdCkqIAorICAgICAgIG9yX3Rlc3Q6IGFuZF90ZXN0ICgnb3InIGFuZF90ZXN0KSoKICAgICAgICBhbmRfdGVzdDogbm90X3Rlc3QgKCdhbmQnIG5vdF90ZXN0KSoKICAgICAgICBub3RfdGVzdDogJ25vdCcgbm90X3Rlc3QgfCBjb21wYXJpc29uCiAgICAgICAgY29tcGFyaXNvbjogZXhwciAoY29tcF9vcCBleHByKSoKQEAgLTE3MzksNyArMTgzNSw3IEBACiAgICAgICAgdG8gZXhwbGljaXRseSBhbGxvdzoKICAgICAgICBbIHggZm9yIHggaW4gbGFtYmRhOiAwLCBsYW1iZGE6IDEgXQogICAgICAgICh3aGljaCB3b3VsZCBiZSBhbWJpZ3VvdXMgd2l0aG91dCB0aGVzZSBleHRyYSBydWxlcykKLSAgICAgICAKKwogICAgICAgIG9sZF90ZXN0OiBvcl90ZXN0IHwgb2xkX2xhbWJkZWYKICAgICAgICBvbGRfbGFtYmRlZjogJ2xhbWJkYScgW3ZhcmFyZ2xpc3RdICc6JyBvbGRfdGVzdAogCkBAIC0xODE5LDcgKzE5MTUsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQob3BzLCBpIC8gMiwgbmV3b3BlcmF0b3IpOwogICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoY21wcywgaSAvIDIsIGV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgIH0KQEAgLTE4MjcsNyArMTkyMyw3IEBACiAgICAgICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGFyZShleHByZXNzaW9uLCBvcHMsIGNtcHMsIExJTkVOTyhuKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQpAQCAtMTg3OSw3ICsxOTc1LDcgQEAKICAgICAvKgogICAgICAgYXJnbGlzdDogKGFyZ3VtZW50ICcsJykqIChhcmd1bWVudCBbJywnXXwgJyonIHRlc3QgWycsJyAnKionIHRlc3RdCiAgICAgICAgICAgICAgICB8ICcqKicgdGVzdCkKLSAgICAgIGFyZ3VtZW50OiBbdGVzdCAnPSddIHRlc3QgW2dlbl9mb3JdICAgICAgICAjIFJlYWxseSBba2V5d29yZCAnPSddIHRlc3QKKyAgICAgIGFyZ3VtZW50OiBbdGVzdCAnPSddIHRlc3QgW2NvbXBfZm9yXSAgICAgICAgIyBSZWFsbHkgW2tleXdvcmQgJz0nXSB0ZXN0CiAgICAgKi8KIAogICAgIGludCBpLCBuYXJncywgbmtleXdvcmRzLCBuZ2VuczsKQEAgLTE4OTcsNyArMTk5Myw3IEBACiAgICAgICAgIGlmIChUWVBFKGNoKSA9PSBhcmd1bWVudCkgewogICAgICAgICAgICAgaWYgKE5DSChjaCkgPT0gMSkKICAgICAgICAgICAgICAgICBuYXJncysrOwotICAgICAgICAgICAgZWxzZSBpZiAoVFlQRShDSElMRChjaCwgMSkpID09IGdlbl9mb3IpCisgICAgICAgICAgICBlbHNlIGlmIChUWVBFKENISUxEKGNoLCAxKSkgPT0gY29tcF9mb3IpCiAgICAgICAgICAgICAgICAgbmdlbnMrKzsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBua2V5d29yZHMrKzsKQEAgLTE5NDEsOCArMjAzNyw4IEBACiAgICAgICAgICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoYXJncywgbmFyZ3MrKywgZSk7Ci0gICAgICAgICAgICB9ICAKLSAgICAgICAgICAgIGVsc2UgaWYgKFRZUEUoQ0hJTEQoY2gsIDEpKSA9PSBnZW5fZm9yKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChUWVBFKENISUxEKGNoLCAxKSkgPT0gY29tcF9mb3IpIHsKICAgICAgICAgICAgICAgICBlID0gYXN0X2Zvcl9nZW5leHAoYywgY2gpOwogICAgICAgICAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xOTU0LDcgKzIwNTAsNyBAQAogICAgICAgICAgICAgICAgIGludCBrOwogICAgICAgICAgICAgICAgIGNoYXIgKnRtcDsKIAotICAgICAgICAgICAgICAgIC8qIENISUxEKGNoLCAwKSBpcyB0ZXN0LCBidXQgbXVzdCBiZSBhbiBpZGVudGlmaWVyPyAqLyAKKyAgICAgICAgICAgICAgICAvKiBDSElMRChjaCwgMCkgaXMgdGVzdCwgYnV0IG11c3QgYmUgYW4gaWRlbnRpZmllcj8gKi8KICAgICAgICAgICAgICAgICBlID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAwKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIwMTIsMTQgKzIxMDgsMTQgQEAKIHN0YXRpYyBleHByX3R5CiBhc3RfZm9yX3Rlc3RsaXN0KHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUqIG4pCiB7Ci0gICAgLyogdGVzdGxpc3RfZ2V4cDogdGVzdCAoJywnIHRlc3QpKiBbJywnXSAqLworICAgIC8qIHRlc3RsaXN0X2NvbXA6IHRlc3QgKCcsJyB0ZXN0KSogWycsJ10gKi8KICAgICAvKiB0ZXN0bGlzdDogdGVzdCAoJywnIHRlc3QpKiBbJywnXSAqLwogICAgIC8qIHRlc3RsaXN0X3NhZmU6IHRlc3QgKCcsJyB0ZXN0KSsgWycsJ10gKi8KICAgICAvKiB0ZXN0bGlzdDE6IHRlc3QgKCcsJyB0ZXN0KSogKi8KICAgICBhc3NlcnQoTkNIKG4pID4gMCk7Ci0gICAgaWYgKFRZUEUobikgPT0gdGVzdGxpc3RfZ2V4cCkgeworICAgIGlmIChUWVBFKG4pID09IHRlc3RsaXN0X2NvbXApIHsKICAgICAgICAgaWYgKE5DSChuKSA+IDEpCi0gICAgICAgICAgICBhc3NlcnQoVFlQRShDSElMRChuLCAxKSkgIT0gZ2VuX2Zvcik7CisgICAgICAgICAgICBhc3NlcnQoVFlQRShDSElMRChuLCAxKSkgIT0gY29tcF9mb3IpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgYXNzZXJ0KFRZUEUobikgPT0gdGVzdGxpc3QgfHwKQEAgLTIwMzcsMTIgKzIxMzMsMTIgQEAKIH0KIAogc3RhdGljIGV4cHJfdHkKLWFzdF9mb3JfdGVzdGxpc3RfZ2V4cChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlKiBuKQorYXN0X2Zvcl90ZXN0bGlzdF9jb21wKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUqIG4pCiB7Ci0gICAgLyogdGVzdGxpc3RfZ2V4cDogdGVzdCAoIGdlbl9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSApICovCi0gICAgLyogYXJndW1lbnQ6IHRlc3QgWyBnZW5fZm9yIF0gKi8KLSAgICBhc3NlcnQoVFlQRShuKSA9PSB0ZXN0bGlzdF9nZXhwIHx8IFRZUEUobikgPT0gYXJndW1lbnQpOwotICAgIGlmIChOQ0gobikgPiAxICYmIFRZUEUoQ0hJTEQobiwgMSkpID09IGdlbl9mb3IpCisgICAgLyogdGVzdGxpc3RfY29tcDogdGVzdCAoIGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10gKSAqLworICAgIC8qIGFyZ3VtZW50OiB0ZXN0IFsgY29tcF9mb3IgXSAqLworICAgIGFzc2VydChUWVBFKG4pID09IHRlc3RsaXN0X2NvbXAgfHwgVFlQRShuKSA9PSBhcmd1bWVudCk7CisgICAgaWYgKE5DSChuKSA+IDEgJiYgVFlQRShDSElMRChuLCAxKSkgPT0gY29tcF9mb3IpCiAgICAgICAgIHJldHVybiBhc3RfZm9yX2dlbmV4cChjLCBuKTsKICAgICByZXR1cm4gYXN0X2Zvcl90ZXN0bGlzdChjLCBuKTsKIH0KQEAgLTIwNzMsNyArMjE2OSw3IEBACiBhc3RfZm9yX2V4cHJfc3RtdChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQogewogICAgIFJFUShuLCBleHByX3N0bXQpOwotICAgIC8qIGV4cHJfc3RtdDogdGVzdGxpc3QgKGF1Z2Fzc2lnbiAoeWllbGRfZXhwcnx0ZXN0bGlzdCkgCisgICAgLyogZXhwcl9zdG10OiB0ZXN0bGlzdCAoYXVnYXNzaWduICh5aWVsZF9leHByfHRlc3RsaXN0KQogICAgICAgICAgICAgICAgIHwgKCc9JyAoeWllbGRfZXhwcnx0ZXN0bGlzdCkpKikKICAgICAgICB0ZXN0bGlzdDogdGVzdCAoJywnIHRlc3QpKiBbJywnXQogICAgICAgIGF1Z2Fzc2lnbjogJys9JyB8ICctPScgfCAnKj0nIHwgJy89JyB8ICclPScgfCAnJj0nIHwgJ3w9JyB8ICdePScKQEAgLTIwOTYsMzMgKzIxOTIsMjEgQEAKICAgICAgICAgZXhwcjEgPSBhc3RfZm9yX3Rlc3RsaXN0KGMsIGNoKTsKICAgICAgICAgaWYgKCFleHByMSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAvKiBUT0RPKG5hcyk6IFJlbW92ZSBkdXBsaWNhdGVkIGVycm9yIGNoZWNrcyAoc2V0X2NvbnRleHQgZG9lcyBpdCkgKi8KKyAgICAgICAgaWYoIXNldF9jb250ZXh0KGMsIGV4cHIxLCBTdG9yZSwgY2gpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIC8qIHNldF9jb250ZXh0IGNoZWNrcyB0aGF0IG1vc3QgZXhwcmVzc2lvbnMgYXJlIG5vdCB0aGUgbGVmdCBzaWRlLgorICAgICAgICAgIEF1Z21lbnRlZCBhc3NpZ25tZW50cyBjYW4gb25seSBoYXZlIGEgbmFtZSwgYSBzdWJzY3JpcHQsIG9yIGFuCisgICAgICAgICAgYXR0cmlidXRlIG9uIHRoZSBsZWZ0LCB0aG91Z2gsIHNvIHdlIGhhdmUgdG8gZXhwbGljaXRseSBjaGVjayBmb3IKKyAgICAgICAgICB0aG9zZS4gKi8KICAgICAgICAgc3dpdGNoIChleHByMS0+a2luZCkgewotICAgICAgICAgICAgY2FzZSBHZW5lcmF0b3JFeHBfa2luZDoKLSAgICAgICAgICAgICAgICBhc3RfZXJyb3IoY2gsICJhdWdtZW50ZWQgYXNzaWdubWVudCB0byBnZW5lcmF0b3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiBub3QgcG9zc2libGUiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGNhc2UgWWllbGRfa2luZDoKLSAgICAgICAgICAgICAgICBhc3RfZXJyb3IoY2gsICJhdWdtZW50ZWQgYXNzaWdubWVudCB0byB5aWVsZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIG5vdCBwb3NzaWJsZSIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgY2FzZSBOYW1lX2tpbmQ6IHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YXJfbmFtZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGV4cHIxLT52Lk5hbWUuaWQpOwotICAgICAgICAgICAgICAgIGlmICgodmFyX25hbWVbMF0gPT0gJ04nIHx8IHZhcl9uYW1lWzBdID09ICdUJyB8fCB2YXJfbmFtZVswXSA9PSAnRicpICYmCi0gICAgICAgICAgICAgICAgICAgICFmb3JiaWRkZW5fY2hlY2soYywgY2gsIHZhcl9uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIE5hbWVfa2luZDoKICAgICAgICAgICAgIGNhc2UgQXR0cmlidXRlX2tpbmQ6CiAgICAgICAgICAgICBjYXNlIFN1YnNjcmlwdF9raW5kOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhc3RfZXJyb3IoY2gsICJpbGxlZ2FsIGV4cHJlc3Npb24gZm9yIGF1Z21lbnRlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJhc3NpZ25tZW50Iik7CisgICAgICAgICAgICAgICAgYXN0X2Vycm9yKGNoLCAiaWxsZWdhbCBleHByZXNzaW9uIGZvciBhdWdtZW50ZWQgYXNzaWdubWVudCIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmKCFzZXRfY29udGV4dChjLCBleHByMSwgU3RvcmUsIGNoKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIGNoID0gQ0hJTEQobiwgMik7CiAgICAgICAgIGlmIChUWVBFKGNoKSA9PSB0ZXN0bGlzdCkKQEAgLTIxNTgsMTEgKzIyNDIsMTAgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGUgPSBhc3RfZm9yX3Rlc3RsaXN0KGMsIGNoKTsKLQotICAgICAgICAgICAgLyogc2V0IGNvbnRleHQgdG8gYXNzaWduICovCi0gICAgICAgICAgICBpZiAoIWUpIAorICAgICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgICAgICAgICAvKiBzZXQgY29udGV4dCB0byBhc3NpZ24gKi8KICAgICAgICAgICAgIGlmICghc2V0X2NvbnRleHQoYywgZSwgU3RvcmUsIENISUxEKG4sIGkpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjE4Nyw5ICsyMjcwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAnPj4nIHRlc3QgWyAoJywnIHRlc3QpKyBbJywnXSBdICkKICAgICAgKi8KICAgICBleHByX3R5IGRlc3QgPSBOVUxMLCBleHByZXNzaW9uOwotICAgIGFzZGxfc2VxICpzZXE7CisgICAgYXNkbF9zZXEgKnNlcSA9IE5VTEw7CiAgICAgYm9vbCBubDsKLSAgICBpbnQgaSwgaiwgc3RhcnQgPSAxOworICAgIGludCBpLCBqLCB2YWx1ZXNfY291bnQsIHN0YXJ0ID0gMTsKIAogICAgIFJFUShuLCBwcmludF9zdG10KTsKICAgICBpZiAoTkNIKG4pID49IDIgJiYgVFlQRShDSElMRChuLCAxKSkgPT0gUklHSFRTSElGVCkgewpAQCAtMjE5OCwxNCArMjI4MSwxNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBzdGFydCA9IDQ7CiAgICAgfQotICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSAtIHN0YXJ0KSAvIDIsIGMtPmNfYXJlbmEpOwotICAgIGlmICghc2VxKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKGkgPSBzdGFydCwgaiA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMiwgKytqKSB7Ci0gICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgaSkpOwotICAgICAgICBpZiAoIWV4cHJlc3Npb24pCisgICAgdmFsdWVzX2NvdW50ID0gKE5DSChuKSArIDEgLSBzdGFydCkgLyAyOworICAgIGlmICh2YWx1ZXNfY291bnQpIHsKKyAgICAgICAgc2VxID0gYXNkbF9zZXFfbmV3KHZhbHVlc19jb3VudCwgYy0+Y19hcmVuYSk7CisgICAgICAgIGlmICghc2VxKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFzZGxfc2VxX1NFVChzZXEsIGosIGV4cHJlc3Npb24pOworICAgICAgICBmb3IgKGkgPSBzdGFydCwgaiA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMiwgKytqKSB7CisgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIGkpKTsKKyAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGFzZGxfc2VxX1NFVChzZXEsIGosIGV4cHJlc3Npb24pOworICAgICAgICB9CiAgICAgfQogICAgIG5sID0gKFRZUEUoQ0hJTEQobiwgTkNIKG4pIC0gMSkpID09IENPTU1BKSA/IGZhbHNlIDogdHJ1ZTsKICAgICByZXR1cm4gUHJpbnQoZGVzdCwgc2VxLCBubCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwpAQCAtMjIzOCw3ICsyMzI0LDcgQEAKIGFzdF9mb3JfZGVsX3N0bXQoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKIHsKICAgICBhc2RsX3NlcSAqZXhwcl9saXN0OwotICAgIAorCiAgICAgLyogZGVsX3N0bXQ6ICdkZWwnIGV4cHJsaXN0ICovCiAgICAgUkVRKG4sIGRlbF9zdG10KTsKIApAQCAtMjMyMiw3ICsyNDA4LDcgQEAKICAgICAgICAgICAgICAgICBleHByMyA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgNSkpOwogICAgICAgICAgICAgICAgIGlmICghZXhwcjMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHJldHVybiBSYWlzZShleHByMSwgZXhwcjIsIGV4cHIzLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICB9CkBAIC0yMzM3LDcgKzI0MjMsNyBAQAogfQogCiBzdGF0aWMgYWxpYXNfdHkKLWFsaWFzX2Zvcl9pbXBvcnRfbmFtZShzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQorYWxpYXNfZm9yX2ltcG9ydF9uYW1lKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4sIGludCBzdG9yZSkKIHsKICAgICAvKgogICAgICAgaW1wb3J0X2FzX25hbWU6IE5BTUUgWydhcycgTkFNRV0KQEAgLTIzNDgsMjggKzI0MzQsNDAgQEAKIAogIGxvb3A6CiAgICAgc3dpdGNoIChUWVBFKG4pKSB7Ci0gICAgICAgIGNhc2UgaW1wb3J0X2FzX25hbWU6CisgICAgICAgICBjYXNlIGltcG9ydF9hc19uYW1lOiB7CisgICAgICAgICAgICBub2RlICpuYW1lX25vZGUgPSBDSElMRChuLCAwKTsKICAgICAgICAgICAgIHN0ciA9IE5VTEw7CiAgICAgICAgICAgICBpZiAoTkNIKG4pID09IDMpIHsKLSAgICAgICAgICAgICAgICBzdHIgPSBORVdfSURFTlRJRklFUihDSElMRChuLCAyKSk7CisgICAgICAgICAgICAgICAgbm9kZSAqc3RyX25vZGUgPSBDSElMRChuLCAyKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RvcmUgJiYgIWZvcmJpZGRlbl9jaGVjayhjLCBzdHJfbm9kZSwgU1RSKHN0cl9ub2RlKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIHN0ciA9IE5FV19JREVOVElGSUVSKHN0cl9ub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBuYW1lID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFmb3JiaWRkZW5fY2hlY2soYywgbmFtZV9ub2RlLCBTVFIobmFtZV9ub2RlKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmFtZSA9IE5FV19JREVOVElGSUVSKG5hbWVfbm9kZSk7CiAgICAgICAgICAgICBpZiAoIW5hbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICByZXR1cm4gYWxpYXMobmFtZSwgc3RyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgfQogICAgICAgICBjYXNlIGRvdHRlZF9hc19uYW1lOgogICAgICAgICAgICAgaWYgKE5DSChuKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOwogICAgICAgICAgICAgICAgIGdvdG8gbG9vcDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGFsaWFzX3R5IGEgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgQ0hJTEQobiwgMCkpOworICAgICAgICAgICAgICAgIG5vZGUgKmFzbmFtZV9ub2RlID0gQ0hJTEQobiwgMik7CisgICAgICAgICAgICAgICAgYWxpYXNfdHkgYSA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBDSElMRChuLCAwKSwgMCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBhc3NlcnQoIWEtPmFzbmFtZSk7Ci0gICAgICAgICAgICAgICAgYS0+YXNuYW1lID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMikpOworICAgICAgICAgICAgICAgIGlmICghZm9yYmlkZGVuX2NoZWNrKGMsIGFzbmFtZV9ub2RlLCBTVFIoYXNuYW1lX25vZGUpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgYS0+YXNuYW1lID0gTkVXX0lERU5USUZJRVIoYXNuYW1lX25vZGUpOwogICAgICAgICAgICAgICAgIGlmICghYS0+YXNuYW1lKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm4gYTsKQEAgLTIzNzcsNyArMjQ3NSwxMCBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZG90dGVkX25hbWU6CiAgICAgICAgICAgICBpZiAoTkNIKG4pID09IDEpIHsKLSAgICAgICAgICAgICAgICBuYW1lID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMCkpOworICAgICAgICAgICAgICAgIG5vZGUgKm5hbWVfbm9kZSA9IENISUxEKG4sIDApOworICAgICAgICAgICAgICAgIGlmIChzdG9yZSAmJiAhZm9yYmlkZGVuX2NoZWNrKGMsIG5hbWVfbm9kZSwgU1RSKG5hbWVfbm9kZSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBuYW1lID0gTkVXX0lERU5USUZJRVIobmFtZV9ub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIHJldHVybiBhbGlhcyhuYW1lLCBOVUxMLCBjLT5jX2FyZW5hKTsKQEAgLTI0NTEsNyArMjU1Miw3IEBACiAgICAgICAgIGlmICghYWxpYXNlcykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKLSAgICAgICAgICAgIGFsaWFzX3R5IGltcG9ydF9hbGlhcyA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBDSElMRChuLCBpKSk7CisgICAgICAgICAgICBhbGlhc190eSBpbXBvcnRfYWxpYXMgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgQ0hJTEQobiwgaSksIDEpOwogICAgICAgICAgICAgaWYgKCFpbXBvcnRfYWxpYXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoYWxpYXNlcywgaSAvIDIsIGltcG9ydF9hbGlhcyk7CkBAIC0yNDYyLDEzICsyNTYzLDE1IEBACiAgICAgICAgIGludCBuX2NoaWxkcmVuOwogICAgICAgICBpbnQgaWR4LCBuZG90cyA9IDA7CiAgICAgICAgIGFsaWFzX3R5IG1vZCA9IE5VTEw7Ci0gICAgICAgIGlkZW50aWZpZXIgbW9kbmFtZTsKLSAgICAgICAgCisgICAgICAgIGlkZW50aWZpZXIgbW9kbmFtZSA9IE5VTEw7CisKICAgICAgICAvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGRvdHMgKGZvciByZWxhdGl2ZSBpbXBvcnRzKSBhbmQgY2hlY2sgZm9yIHRoZQogICAgICAgICAgIG9wdGlvbmFsIG1vZHVsZSBuYW1lICovCiAgICAgICAgIGZvciAoaWR4ID0gMTsgaWR4IDwgTkNIKG4pOyBpZHgrKykgewogICAgICAgICAgICAgaWYgKFRZUEUoQ0hJTEQobiwgaWR4KSkgPT0gZG90dGVkX25hbWUpIHsKLSAgICAgICAgICAgICAgICBtb2QgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgQ0hJTEQobiwgaWR4KSk7CisgICAgICAgICAgICAgICAgbW9kID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIGlkeCksIDApOworICAgICAgICAgICAgICAgIGlmICghbW9kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBpZHgrKzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoVFlQRShDSElMRChuLCBpZHgpKSAhPSBET1QpIHsKQEAgLTI1MDksMTQgKzI2MTIsMTQgQEAKIAogICAgICAgICAvKiBoYW5kbGUgImZyb20gLi4uIGltcG9ydCAqIiBzcGVjaWFsIGIvYyB0aGVyZSdzIG5vIGNoaWxkcmVuICovCiAgICAgICAgIGlmIChUWVBFKG4pID09IFNUQVIpIHsKLSAgICAgICAgICAgIGFsaWFzX3R5IGltcG9ydF9hbGlhcyA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBuKTsKKyAgICAgICAgICAgIGFsaWFzX3R5IGltcG9ydF9hbGlhcyA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBuLCAxKTsKICAgICAgICAgICAgIGlmICghaW1wb3J0X2FsaWFzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChhbGlhc2VzLCAwLCBpbXBvcnRfYWxpYXMpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7Ci0gICAgICAgICAgICAgICAgYWxpYXNfdHkgaW1wb3J0X2FsaWFzID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIGkpKTsKKyAgICAgICAgICAgICAgICBhbGlhc190eSBpbXBvcnRfYWxpYXMgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgQ0hJTEQobiwgaSksIDEpOwogICAgICAgICAgICAgICAgIGlmICghaW1wb3J0X2FsaWFzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGFsaWFzZXMsIGkgLyAyLCBpbXBvcnRfYWxpYXMpOwpAQCAtMjUyNCw4ICsyNjI3LDYgQEAKICAgICAgICAgfQogICAgICAgICBpZiAobW9kICE9IE5VTEwpCiAgICAgICAgICAgICBtb2RuYW1lID0gbW9kLT5uYW1lOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtb2RuYW1lID0gbmV3X2lkZW50aWZpZXIoIiIsIGMtPmNfYXJlbmEpOwogICAgICAgICByZXR1cm4gSW1wb3J0RnJvbShtb2RuYW1lLCBhbGlhc2VzLCBuZG90cywgbGluZW5vLCBjb2xfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKTsKICAgICB9CkBAIC0yNjA5LDcgKzI3MTAsNyBAQAogICAgICAgICBleHByMiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAzKSk7CiAgICAgICAgIGlmICghZXhwcjIpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIAorCiAgICAgICAgIHJldHVybiBBc3NlcnQoZXhwcjEsIGV4cHIyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKQEAgLTI2MzYsNyArMjczNyw3IEBACiAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IHNpbXBsZV9zdG10KSB7CiAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgLyogc2ltcGxlX3N0bXQgYWx3YXlzIGVuZHMgd2l0aCBhIE5FV0xJTkUsCi0gICAgICAgICAgIGFuZCBtYXkgaGF2ZSBhIHRyYWlsaW5nIFNFTUkgCisgICAgICAgICAgIGFuZCBtYXkgaGF2ZSBhIHRyYWlsaW5nIFNFTUkKICAgICAgICAgKi8KICAgICAgICAgZW5kID0gTkNIKG4pIC0gMTsKICAgICAgICAgaWYgKFRZUEUoQ0hJTEQobiwgZW5kIC0gMSkpID09IFNFTUkpCkBAIC0yNzAxLDEwICsyODAyLDEwIEBACiAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMSkpOwogICAgICAgICBpZiAoIWV4cHJlc3Npb24pCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgc3VpdGVfc2VxID0gYXN0X2Zvcl9zdWl0ZShjLCBDSElMRChuLCAzKSk7IAorICAgICAgICBzdWl0ZV9zZXEgPSBhc3RfZm9yX3N1aXRlKGMsIENISUxEKG4sIDMpKTsKICAgICAgICAgaWYgKCFzdWl0ZV9zZXEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIAorCiAgICAgICAgIHJldHVybiBJZihleHByZXNzaW9uLCBzdWl0ZV9zZXEsIE5VTEwsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSk7CiAgICAgfQpAQCAtMjc2Miw4ICsyODYzLDggQEAKICAgICAgICAgICAgIGlmICghc3VpdGVfc2VxMikKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgYXNkbF9zZXFfU0VUKG9yZWxzZSwgMCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgSWYoZXhwcmVzc2lvbiwgc3VpdGVfc2VxLCBzdWl0ZV9zZXEyLCAKKyAgICAgICAgICAgIGFzZGxfc2VxX1NFVChvcmVsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgSWYoZXhwcmVzc2lvbiwgc3VpdGVfc2VxLCBzdWl0ZV9zZXEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJTkVOTyhDSElMRChuLCBOQ0gobikgLSA2KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hJTEQobiwgTkNIKG4pIC0gNiktPm5fY29sX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKSk7CkBAIC0yNzg0LDcgKzI4ODUsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgICAgICBhc2RsX3NlcV9TRVQobmV3b2JqLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIElmKGV4cHJlc3Npb24sIHN1aXRlX3NlcSwgb3JlbHNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBJZihleHByZXNzaW9uLCBzdWl0ZV9zZXEsIG9yZWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8oQ0hJTEQobiwgb2ZmKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hJTEQobiwgb2ZmKS0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKSk7CiAgICAgICAgICAgICBvcmVsc2UgPSBuZXdvYmo7CkBAIC0yODUyLDcgKzI5NTMsNyBAQAogewogICAgIGFzZGxfc2VxICpfdGFyZ2V0LCAqc2VxID0gTlVMTCwgKnN1aXRlX3NlcTsKICAgICBleHByX3R5IGV4cHJlc3Npb247Ci0gICAgZXhwcl90eSB0YXJnZXQ7CisgICAgZXhwcl90eSB0YXJnZXQsIGZpcnN0OwogICAgIGNvbnN0IG5vZGUgKm5vZGVfdGFyZ2V0OwogICAgIC8qIGZvcl9zdG10OiAnZm9yJyBleHBybGlzdCAnaW4nIHRlc3RsaXN0ICc6JyBzdWl0ZSBbJ2Vsc2UnICc6JyBzdWl0ZV0gKi8KICAgICBSRVEobiwgZm9yX3N0bXQpOwpAQCAtMjg2OSwxMCArMjk3MCwxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBDaGVjayB0aGUgIyBvZiBjaGlsZHJlbiByYXRoZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIF90YXJnZXQsIHNpbmNlCiAgICAgICAgZm9yIHgsIGluIC4uLiBoYXMgMSBlbGVtZW50IGluIF90YXJnZXQsIGJ1dCBzdGlsbCByZXF1aXJlcyBhIFR1cGxlLiAqLworICAgIGZpcnN0ID0gKGV4cHJfdHkpYXNkbF9zZXFfR0VUKF90YXJnZXQsIDApOwogICAgIGlmIChOQ0gobm9kZV90YXJnZXQpID09IDEpCi0gICAgICAgIHRhcmdldCA9IChleHByX3R5KWFzZGxfc2VxX0dFVChfdGFyZ2V0LCAwKTsKKyAgICAgICAgdGFyZ2V0ID0gZmlyc3Q7CiAgICAgZWxzZQotICAgICAgICB0YXJnZXQgPSBUdXBsZShfdGFyZ2V0LCBTdG9yZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICB0YXJnZXQgPSBUdXBsZShfdGFyZ2V0LCBTdG9yZSwgZmlyc3QtPmxpbmVubywgZmlyc3QtPmNvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogCiAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfdGVzdGxpc3QoYywgQ0hJTEQobiwgMykpOwogICAgIGlmICghZXhwcmVzc2lvbikKQEAgLTI5ODIsNyArMzA4NCw3IEBACiAgICAgICAgIGFzdF9lcnJvcihuLCAibWFsZm9ybWVkICd0cnknIHN0YXRlbWVudCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgCisKICAgICBpZiAobl9leGNlcHQgPiAwKSB7CiAgICAgICAgIGludCBpOwogICAgICAgICBzdG10X3R5IGV4Y2VwdF9zdDsKQEAgLTMwMTcsMjcgKzMxMTksMTggQEAKICAgICByZXR1cm4gVHJ5RmluYWxseShib2R5LCBmaW5hbGx5LCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiB9CiAKLXN0YXRpYyBleHByX3R5Ci1hc3RfZm9yX3dpdGhfdmFyKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCi17Ci0gICAgUkVRKG4sIHdpdGhfdmFyKTsKLSAgICByZXR1cm4gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDEpKTsKLX0KLQotLyogd2l0aF9zdG10OiAnd2l0aCcgdGVzdCBbIHdpdGhfdmFyIF0gJzonIHN1aXRlICovCisvKiB3aXRoX2l0ZW06IHRlc3QgWydhcycgZXhwcl0gKi8KIHN0YXRpYyBzdG10X3R5Ci1hc3RfZm9yX3dpdGhfc3RtdChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQorYXN0X2Zvcl93aXRoX2l0ZW0oc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgYXNkbF9zZXEgKmNvbnRlbnQpCiB7CiAgICAgZXhwcl90eSBjb250ZXh0X2V4cHIsIG9wdGlvbmFsX3ZhcnMgPSBOVUxMOwotICAgIGludCBzdWl0ZV9pbmRleCA9IDM7ICAgIC8qIHNraXAgJ3dpdGgnLCB0ZXN0LCBhbmQgJzonICovCi0gICAgYXNkbF9zZXEgKnN1aXRlX3NlcTsKIAotICAgIGFzc2VydChUWVBFKG4pID09IHdpdGhfc3RtdCk7Ci0gICAgY29udGV4dF9leHByID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDEpKTsKKyAgICBSRVEobiwgd2l0aF9pdGVtKTsKKyAgICBjb250ZXh0X2V4cHIgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMCkpOwogICAgIGlmICghY29udGV4dF9leHByKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoVFlQRShDSElMRChuLCAyKSkgPT0gd2l0aF92YXIpIHsKLSAgICAgICAgb3B0aW9uYWxfdmFycyA9IGFzdF9mb3Jfd2l0aF92YXIoYywgQ0hJTEQobiwgMikpOworICAgIGlmIChOQ0gobikgPT0gMykgeworICAgICAgICBvcHRpb25hbF92YXJzID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDIpKTsKIAogICAgICAgICBpZiAoIW9wdGlvbmFsX3ZhcnMpIHsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzA0NSwyNCArMzEzOCw1NCBAQAogICAgICAgICBpZiAoIXNldF9jb250ZXh0KGMsIG9wdGlvbmFsX3ZhcnMsIFN0b3JlLCBuKSkgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgc3VpdGVfaW5kZXggPSA0OwogICAgIH0KIAotICAgIHN1aXRlX3NlcSA9IGFzdF9mb3Jfc3VpdGUoYywgQ0hJTEQobiwgc3VpdGVfaW5kZXgpKTsKLSAgICBpZiAoIXN1aXRlX3NlcSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIFdpdGgoY29udGV4dF9leHByLCBvcHRpb25hbF92YXJzLCBzdWl0ZV9zZXEsIExJTkVOTyhuKSwgCisgICAgcmV0dXJuIFdpdGgoY29udGV4dF9leHByLCBvcHRpb25hbF92YXJzLCBjb250ZW50LCBMSU5FTk8obiksCiAgICAgICAgICAgICAgICAgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKIH0KIAorLyogd2l0aF9zdG10OiAnd2l0aCcgd2l0aF9pdGVtICgnLCcgd2l0aF9pdGVtKSogJzonIHN1aXRlICovCitzdGF0aWMgc3RtdF90eQorYXN0X2Zvcl93aXRoX3N0bXQoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKK3sKKyAgICBpbnQgaTsKKyAgICBzdG10X3R5IHJldDsKKyAgICBhc2RsX3NlcSAqaW5uZXI7CisKKyAgICBSRVEobiwgd2l0aF9zdG10KTsKKworICAgIC8qIHByb2Nlc3MgdGhlIHdpdGggaXRlbXMgaW5zaWRlLW91dCAqLworICAgIGkgPSBOQ0gobikgLSAxOworICAgIC8qIHRoZSBzdWl0ZSBvZiB0aGUgaW5uZXJtb3N0IHdpdGggaXRlbSBpcyB0aGUgc3VpdGUgb2YgdGhlIHdpdGggc3RtdCAqLworICAgIGlubmVyID0gYXN0X2Zvcl9zdWl0ZShjLCBDSElMRChuLCBpKSk7CisgICAgaWYgKCFpbm5lcikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGkgLT0gMjsKKyAgICAgICAgcmV0ID0gYXN0X2Zvcl93aXRoX2l0ZW0oYywgQ0hJTEQobiwgaSksIGlubmVyKTsKKyAgICAgICAgaWYgKCFyZXQpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgLyogd2FzIHRoaXMgdGhlIGxhc3QgaXRlbT8gKi8KKyAgICAgICAgaWYgKGkgPT0gMSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKiBpZiBub3QsIHdyYXAgdGhlIHJlc3VsdCBzbyBmYXIgaW4gYSBuZXcgc2VxdWVuY2UgKi8KKyAgICAgICAgaW5uZXIgPSBhc2RsX3NlcV9uZXcoMSwgYy0+Y19hcmVuYSk7CisgICAgICAgIGlmICghaW5uZXIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYXNkbF9zZXFfU0VUKGlubmVyLCAwLCByZXQpOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzdG10X3R5CiBhc3RfZm9yX2NsYXNzZGVmKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4sIGFzZGxfc2VxICpkZWNvcmF0b3Jfc2VxKQogewogICAgIC8qIGNsYXNzZGVmOiAnY2xhc3MnIE5BTUUgWycoJyB0ZXN0bGlzdCAnKSddICc6JyBzdWl0ZSAqLwogICAgIFB5T2JqZWN0ICpjbGFzc25hbWU7CiAgICAgYXNkbF9zZXEgKmJhc2VzLCAqczsKLSAgICAKKwogICAgIFJFUShuLCBjbGFzc2RlZik7CiAKICAgICBpZiAoIWZvcmJpZGRlbl9jaGVjayhjLCBuLCBTVFIoQ0hJTEQobiwgMSkpKSkKQEAgLTMxMTcsNyArMzI0MCw2IEBACiAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICB9CiAgICAgaWYgKFRZUEUobikgPT0gc21hbGxfc3RtdCkgewotICAgICAgICBSRVEobiwgc21hbGxfc3RtdCk7CiAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgLyogc21hbGxfc3RtdDogZXhwcl9zdG10IHwgcHJpbnRfc3RtdCAgfCBkZWxfc3RtdCB8IHBhc3Nfc3RtdAogICAgICAgICAgICAgICAgICAgICAgfCBmbG93X3N0bXQgfCBpbXBvcnRfc3RtdCB8IGdsb2JhbF9zdG10IHwgZXhlY19zdG10CkBAIC0zMjEwLDE3ICszMzMyLDE3IEBACiAjaWZuZGVmIFdJVEhPVVRfQ09NUExFWAogICAgICAgICBpZiAoaW1mbGFnKSB7CiAgICAgICAgICAgICAgICAgY29tcGxleC5yZWFsID0gMC47Ci0gICAgICAgICAgICAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiYXRvZiIsIHJldHVybiAwKQotICAgICAgICAgICAgICAgIGNvbXBsZXguaW1hZyA9IFB5T1NfYXNjaWlfYXRvZihzKTsKLSAgICAgICAgICAgICAgICBQeUZQRV9FTkRfUFJPVEVDVChjb21wbGV4KQorICAgICAgICAgICAgICAgIGNvbXBsZXguaW1hZyA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShzLCAoY2hhciAqKikmZW5kLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAoY29tcGxleC5pbWFnID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIHJldHVybiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KGNvbXBsZXgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiYXRvZiIsIHJldHVybiAwKQotICAgICAgICAgICAgICAgIGR4ID0gUHlPU19hc2NpaV9hdG9mKHMpOwotICAgICAgICAgICAgICAgIFB5RlBFX0VORF9QUk9URUNUKGR4KQorICAgICAgICAgICAgICAgIGR4ID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKHMsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChkeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGR4KTsKICAgICAgICAgfQogfQpAQCAtMzI1MSwxNyArMzM3MywxMiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRlY29kZV91bmljb2RlKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4sIGludCByYXdtb2RlLCBjb25zdCBjaGFyICplbmNvZGluZykKIHsKLSAgICAgICAgUHlPYmplY3QgKnYsICp1OworICAgICAgICBQeU9iamVjdCAqdjsKKyAgICAgICAgUHlPYmplY3QgKnUgPSBOVUxMOwogICAgICAgICBjaGFyICpidWY7CiAgICAgICAgIGNoYXIgKnA7CiAgICAgICAgIGNvbnN0IGNoYXIgKmVuZDsKLSAgICAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBidWYgPSAoY2hhciAqKXM7Ci0gICAgICAgICAgICAgICAgdSA9IE5VTEw7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGVuY29kaW5nLCAiaXNvLTg4NTktMSIpID09IDApIHsKLSAgICAgICAgICAgICAgICBidWYgPSAoY2hhciAqKXM7Ci0gICAgICAgICAgICAgICAgdSA9IE5VTEw7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChlbmNvZGluZyAhPSBOVUxMICYmIHN0cmNtcChlbmNvZGluZywgImlzby04ODU5LTEiKSkgewogICAgICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93ICovCiAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IFBZX1NJWkVfTUFYIC8gNikKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzM1MSw3ICszNDY4LDcgQEAKICAgICAgICAgcysrOwogICAgICAgICBsZW4gPSBzdHJsZW4ocyk7CiAgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsIAorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvIHBhcnNlIGlzIHRvbyBsb25nIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9ibHRpbm1vZHVsZS5jIGIvUHl0aG9uL2JsdGlubW9kdWxlLmMKaW5kZXggNTdkOWRmOC4uNzY0YWU4NyAxMDA2NDQKLS0tIGEvUHl0aG9uL2JsdGlubW9kdWxlLmMKKysrIGIvUHl0aG9uL2JsdGlubW9kdWxlLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSAiZXZhbC5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPiAvKiBmb3IgREJMX01BTlRfRElHIGFuZCBmcmllbmRzICovCiAKICNpZmRlZiBSSVNDT1MKICNpbmNsdWRlICJ1bml4c3R1ZmYuaCIKQEAgLTE0ODksNyArMTQ5MCw3IEBACiAib3BlbihuYW1lWywgbW9kZVssIGJ1ZmZlcmluZ11dKSAtPiBmaWxlIG9iamVjdFxuXAogXG5cCiBPcGVuIGEgZmlsZSB1c2luZyB0aGUgZmlsZSgpIHR5cGUsIHJldHVybnMgYSBmaWxlIG9iamVjdC4gIFRoaXMgaXMgdGhlXG5cCi1wcmVmZXJyZWQgd2F5IHRvIG9wZW4gYSBmaWxlLiIpOworcHJlZmVycmVkIHdheSB0byBvcGVuIGEgZmlsZS4gIFNlZSBmaWxlLl9fZG9jX18gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uIik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE3OTYsNyArMTc5Nyw3IEBACiAgICAgUHlPYmplY3QgKmN1cm51bSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnYgPSBOVUxMOwogICAgIGxvbmcgYmlnbjsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAgICAgaW50IGNtcF9yZXN1bHQ7CiAKICAgICBQeU9iamVjdCAqemVybyA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKQEAgLTE4NjQsNyArMTg2NSw3IEBACiAgICAgICAgIFB5X0RFQ1JFRihuZWdfc3RlcCk7CiAgICAgfQogCi0gICAgbiA9IChpbnQpYmlnbjsKKyAgICBuID0gKFB5X3NzaXplX3QpYmlnbjsKICAgICBpZiAoYmlnbiA8IDAgfHwgKGxvbmcpbiAhPSBiaWduKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInJhbmdlKCkgcmVzdWx0IGhhcyB0b28gbWFueSBpdGVtcyIpOwpAQCAtMTk0NCw3ICsxOTQ1LDcgQEAKIHsKICAgICBsb25nIGlsb3cgPSAwLCBpaGlnaCA9IDAsIGlzdGVwID0gMTsKICAgICBsb25nIGJpZ247Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogCiAgICAgUHlPYmplY3QgKnY7CiAKQEAgLTE5NzMsNyArMTk3NCw3IEBACiAgICAgICAgIGJpZ24gPSBnZXRfbGVuX29mX3JhbmdlKGlsb3csIGloaWdoLCBpc3RlcCk7CiAgICAgZWxzZQogICAgICAgICBiaWduID0gZ2V0X2xlbl9vZl9yYW5nZShpaGlnaCwgaWxvdywgLWlzdGVwKTsKLSAgICBuID0gKGludCliaWduOworICAgIG4gPSAoUHlfc3NpemVfdCliaWduOwogICAgIGlmIChiaWduIDwgMCB8fCAobG9uZyluICE9IGJpZ24pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAicmFuZ2UoKSByZXN1bHQgaGFzIHRvbyBtYW55IGl0ZW1zIik7CkBAIC0yMTUxLDM2ICsyMTUyLDQ3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9yb3VuZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIGRvdWJsZSBudW1iZXIsIGFic19udW1iZXIsIGFic19yZXN1bHQ7Ci0gICAgZG91YmxlIGY7Ci0gICAgaW50IG5kaWdpdHMgPSAwOwotICAgIGludCBpOworICAgIGRvdWJsZSB4OworICAgIFB5T2JqZWN0ICpvX25kaWdpdHMgPSBOVUxMOworICAgIFB5X3NzaXplX3QgbmRpZ2l0czsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im51bWJlciIsICJuZGlnaXRzIiwgMH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiZHxpOnJvdW5kIiwKLSAgICAgICAga3dsaXN0LCAmbnVtYmVyLCAmbmRpZ2l0cykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgImR8Tzpyb3VuZCIsCisgICAgICAgIGt3bGlzdCwgJngsICZvX25kaWdpdHMpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmID0gMS4wOwotICAgIGkgPSBhYnMobmRpZ2l0cyk7Ci0gICAgd2hpbGUgICgtLWkgPj0gMCkKLSAgICAgICAgZiA9IGYqMTAuMDsKLSAgICBpZiAobmRpZ2l0cyA8IDApCi0gICAgICAgIG51bWJlciAvPSBmOwotICAgIGVsc2UKLSAgICAgICAgbnVtYmVyICo9IGY7CiAKLSAgICAvKiByb3VuZCBgbnVtYmVyYCB0byBuZWFyZXN0IGludGVnZXIsIHJvdW5kaW5nIGhhbHZlcyBhd2F5IGZyb20gemVybyAqLwotICAgIGFic19udW1iZXIgPSBmYWJzKG51bWJlcik7Ci0gICAgYWJzX3Jlc3VsdCA9IGZsb29yKGFic19udW1iZXIpOwotICAgIGlmIChhYnNfbnVtYmVyIC0gYWJzX3Jlc3VsdCA+PSAwLjUpCi0gICAgICAgIGFic19yZXN1bHQgKz0gMS4wOwotICAgIG51bWJlciA9IGNvcHlzaWduKGFic19yZXN1bHQsIG51bWJlcik7CisgICAgaWYgKG9fbmRpZ2l0cyA9PSBOVUxMKSB7CisgICAgICAgIC8qIHNlY29uZCBhcmd1bWVudCBkZWZhdWx0cyB0byAwICovCisgICAgICAgIG5kaWdpdHMgPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogaW50ZXJwcmV0IDJuZCBhcmd1bWVudCBhcyBhIFB5X3NzaXplX3Q7IGNsaXAgb24gb3ZlcmZsb3cgKi8KKyAgICAgICAgbmRpZ2l0cyA9IFB5TnVtYmVyX0FzU3NpemVfdChvX25kaWdpdHMsIE5VTEwpOworICAgICAgICBpZiAobmRpZ2l0cyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgaWYgKG5kaWdpdHMgPCAwKQotICAgICAgICBudW1iZXIgKj0gZjsKKyAgICAvKiBuYW5zLCBpbmZpbml0aWVzIGFuZCB6ZXJvcyByb3VuZCB0byB0aGVtc2VsdmVzICovCisgICAgaWYgKCFQeV9JU19GSU5JVEUoeCkgfHwgeCA9PSAwLjApCisgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoeCk7CisKKyAgICAvKiBEZWFsIHdpdGggZXh0cmVtZSB2YWx1ZXMgZm9yIG5kaWdpdHMuIEZvciBuZGlnaXRzID4gTkRJR0lUU19NQVgsIHgKKyAgICAgICBhbHdheXMgcm91bmRzIHRvIGl0c2VsZi4gIEZvciBuZGlnaXRzIDwgTkRJR0lUU19NSU4sIHggYWx3YXlzCisgICAgICAgcm91bmRzIHRvICstMC4wLiAgSGVyZSAwLjMwMTAzIGlzIGFuIHVwcGVyIGJvdW5kIGZvciBsb2cxMCgyKS4gKi8KKyNkZWZpbmUgTkRJR0lUU19NQVggKChpbnQpKChEQkxfTUFOVF9ESUctREJMX01JTl9FWFApICogMC4zMDEwMykpCisjZGVmaW5lIE5ESUdJVFNfTUlOICgtKGludCkoKERCTF9NQVhfRVhQICsgMSkgKiAwLjMwMTAzKSkKKyAgICBpZiAobmRpZ2l0cyA+IE5ESUdJVFNfTUFYKQorICAgICAgICAvKiByZXR1cm4geCAqLworICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHgpOworICAgIGVsc2UgaWYgKG5kaWdpdHMgPCBORElHSVRTX01JTikKKyAgICAgICAgLyogcmV0dXJuIDAuMCwgYnV0IHdpdGggc2lnbiBvZiB4ICovCisgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoMC4wKngpOwogICAgIGVsc2UKLSAgICAgICAgbnVtYmVyIC89IGY7Ci0gICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShudW1iZXIpOworICAgICAgICAvKiBmaW5pdGUgeCwgYW5kIG5kaWdpdHMgaXMgbm90IHVucmVhc29uYWJseSBsYXJnZSAqLworICAgICAgICAvKiBfUHlfZG91YmxlX3JvdW5kIGlzIGRlZmluZWQgaW4gZmxvYXRvYmplY3QuYyAqLworICAgICAgICByZXR1cm4gX1B5X2RvdWJsZV9yb3VuZCh4LCAoaW50KW5kaWdpdHMpOworI3VuZGVmIE5ESUdJVFNfTUFYCisjdW5kZWYgTkRJR0lUU19NSU4KIH0KIAogUHlEb2NfU1RSVkFSKHJvdW5kX2RvYywKQEAgLTIzODgsNiArMjQwMCwxNSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgLyogSXQncyB0ZW1wdGluZyB0byB1c2UgUHlOdW1iZXJfSW5QbGFjZUFkZCBpbnN0ZWFkIG9mCisgICAgICAgICAgIFB5TnVtYmVyX0FkZCBoZXJlLCB0byBhdm9pZCBxdWFkcmF0aWMgcnVubmluZyB0aW1lCisgICAgICAgICAgIHdoZW4gZG9pbmcgJ3N1bShsaXN0X29mX2xpc3RzLCBbXSknLiAgSG93ZXZlciwgdGhpcworICAgICAgICAgICB3b3VsZCBwcm9kdWNlIGEgY2hhbmdlIGluIGJlaGF2aW91cjogYSBzbmlwcGV0IGxpa2UKKworICAgICAgICAgICAgIGVtcHR5ID0gW10KKyAgICAgICAgICAgICBzdW0oW1t4XSBmb3IgeCBpbiByYW5nZSgxMCldLCBlbXB0eSkKKworICAgICAgICAgICB3b3VsZCBjaGFuZ2UgdGhlIHZhbHVlIG9mIGVtcHR5LiAqLwogICAgICAgICB0ZW1wID0gUHlOdW1iZXJfQWRkKHJlc3VsdCwgaXRlbSk7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CkBAIC0yNDc3LDggKzI0OTgsMTAgQEAKICAgICBsZW4gPSAtMTsgICAgICAgICAgIC8qIHVua25vd24gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXNpemU7ICsraSkgewogICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgaSk7Ci0gICAgICAgIFB5X3NzaXplX3QgdGhpc2xlbiA9IF9QeU9iamVjdF9MZW5ndGhIaW50KGl0ZW0sIC0xKTsKKyAgICAgICAgUHlfc3NpemVfdCB0aGlzbGVuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoaXRlbSwgLTIpOwogICAgICAgICBpZiAodGhpc2xlbiA8IDApIHsKKyAgICAgICAgICAgIGlmICh0aGlzbGVuID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgbGVuID0gLTE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjY2NCw3ICsyNjg3LDcgQEAKICAgICBTRVRCVUlMVElOKCJUcnVlIiwgICAgICAgICAgICAgICAgICBQeV9UcnVlKTsKICAgICBTRVRCVUlMVElOKCJiYXNlc3RyaW5nIiwgICAgICAgICAgICAmUHlCYXNlU3RyaW5nX1R5cGUpOwogICAgIFNFVEJVSUxUSU4oImJvb2wiLCAgICAgICAgICAgICAgICAgICZQeUJvb2xfVHlwZSk7Ci0gICAgLyogICAgICAgICAgU0VUQlVJTFRJTigibWVtb3J5dmlldyIsICAgICAgICAmUHlNZW1vcnlWaWV3X1R5cGUpOyAqLworICAgIFNFVEJVSUxUSU4oIm1lbW9yeXZpZXciLCAgICAgICAgJlB5TWVtb3J5Vmlld19UeXBlKTsKICAgICBTRVRCVUlMVElOKCJieXRlYXJyYXkiLCAgICAgICAgICAgICAmUHlCeXRlQXJyYXlfVHlwZSk7CiAgICAgU0VUQlVJTFRJTigiYnl0ZXMiLCAgICAgICAgICAgICAgICAgJlB5U3RyaW5nX1R5cGUpOwogICAgIFNFVEJVSUxUSU4oImJ1ZmZlciIsICAgICAgICAgICAgICAgICZQeUJ1ZmZlcl9UeXBlKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9jZXZhbC5jIGIvUHl0aG9uL2NldmFsLmMKaW5kZXggMWU0NGIxYy4uNGM2YzBlYSAxMDA2NDQKLS0tIGEvUHl0aG9uL2NldmFsLmMKKysrIGIvUHl0aG9uL2NldmFsLmMKQEAgLTI3LDEwICsyNywxMSBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjQ7CiAKLSNpZiBkZWZpbmVkKF9fcHBjX18pIC8qIDwtIERvbid0IGtub3cgaWYgdGhpcyBpcyB0aGUgY29ycmVjdCBzeW1ib2w7IHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gc2hvdWxkIHdvcmsgZm9yIEdDQyBvbiBhbnkgUG93ZXJQQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0sIGlycmVzcGVjdGl2ZSBvZiBPUy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFBPV0VSPyAgV2hvIGtub3dzIDotKSAqLworLyogUG93ZXJQQyBzdXBwcG9ydC4KKyAgICJfX3BwY19fIiBhcHBlYXJzIHRvIGJlIHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiB0byBkZXRlY3Qgb24gT1MgWCwgd2hlcmVhcworICAgIl9fcG93ZXJwY19fIiBhcHBlYXJzIHRvIGJlIHRoZSBjb3JyZWN0IG9uZSBmb3IgTGludXggd2l0aCBHQ0MKKyovCisjaWYgZGVmaW5lZChfX3BwY19fKSB8fCBkZWZpbmVkIChfX3Bvd2VycGNfXykKIAogI2RlZmluZSBSRUFEX1RJTUVTVEFNUCh2YXIpIHBwY19nZXRjb3VudGVyKCZ2YXIpCiAKQEAgLTE0Niw2ICsxNDcsNyBAQAogc3RhdGljIFB5T2JqZWN0ICogc3RyaW5nX2NvbmNhdGVuYXRlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqLCB1bnNpZ25lZCBjaGFyICopOwogc3RhdGljIFB5T2JqZWN0ICoga3dkX2FzX3N0cmluZyhQeU9iamVjdCAqKTsKK3N0YXRpYyBQeU9iamVjdCAqIHNwZWNpYWxfbG9va3VwKFB5T2JqZWN0ICosIGNoYXIgKiwgUHlPYmplY3QgKiopOwogCiAjZGVmaW5lIE5BTUVfRVJST1JfTVNHIFwKICAgICAibmFtZSAnJS4yMDBzJyBpcyBub3QgZGVmaW5lZCIKQEAgLTIzMiw2ICsyMzQsNyBAQAogI2luY2x1ZGUgInB5dGhyZWFkLmgiCiAKIHN0YXRpYyBQeVRocmVhZF90eXBlX2xvY2sgaW50ZXJwcmV0ZXJfbG9jayA9IDA7IC8qIFRoaXMgaXMgdGhlIEdJTCAqLworc3RhdGljIFB5VGhyZWFkX3R5cGVfbG9jayBwZW5kaW5nX2xvY2sgPSAwOyAvKiBmb3IgcGVuZGluZyBjYWxscyAqLwogc3RhdGljIGxvbmcgbWFpbl90aHJlYWQgPSAwOwogCiBpbnQKQEAgLTMwMyw2ICszMDYsNyBAQAogICAgICAgYWRkaW5nIGEgbmV3IGZ1bmN0aW9uIHRvIGVhY2ggdGhyZWFkXyouaC4gIEluc3RlYWQsIGp1c3QKICAgICAgIGNyZWF0ZSBhIG5ldyBsb2NrIGFuZCB3YXN0ZSBhIGxpdHRsZSBiaXQgb2YgbWVtb3J5ICovCiAgICAgaW50ZXJwcmV0ZXJfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICBwZW5kaW5nX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CiAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGludGVycHJldGVyX2xvY2ssIDEpOwogICAgIG1haW5fdGhyZWFkID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwogCkBAIC0zNzUsMTkgKzM3OSwxNDUgQEAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgQW55IHRocmVhZCBjYW4gc2NoZWR1bGUgcGVuZGluZyBjYWxscywgYnV0IG9ubHkgdGhlIG1haW4gdGhyZWFkCiAgICB3aWxsIGV4ZWN1dGUgdGhlbS4KKyAgIFRoZXJlIGlzIG5vIGZhY2lsaXR5IHRvIHNjaGVkdWxlIGNhbGxzIHRvIGEgcGFydGljdWxhciB0aHJlYWQsIGJ1dAorICAgdGhhdCBzaG91bGQgYmUgZWFzeSB0byBjaGFuZ2UsIHNob3VsZCB0aGF0IGV2ZXIgYmUgcmVxdWlyZWQuICBJbgorICAgdGhhdCBjYXNlLCB0aGUgc3RhdGljIHZhcmlhYmxlcyBoZXJlIHNob3VsZCBnbyBpbnRvIHRoZSBweXRob24KKyAgIHRocmVhZHN0YXRlLgogI2VuZGlmCisqLwogCi0gICBYWFggV0FSTklORyEgIEFTWU5DSFJPTk9VU0xZIEVYRUNVVElORyBDT0RFIQorI2lmZGVmIFdJVEhfVEhSRUFECisKKy8qIFRoZSBXSVRIX1RIUkVBRCBpbXBsZW1lbnRhdGlvbiBpcyB0aHJlYWQtc2FmZS4gIEl0IGFsbG93cworICAgc2NoZWR1bGluZyB0byBiZSBtYWRlIGZyb20gYW55IHRocmVhZCwgYW5kIGV2ZW4gZnJvbSBhbiBleGVjdXRpbmcKKyAgIGNhbGxiYWNrLgorICovCisKKyNkZWZpbmUgTlBFTkRJTkdDQUxMUyAzMgorc3RhdGljIHN0cnVjdCB7CisgICAgaW50ICgqZnVuYykodm9pZCAqKTsKKyAgICB2b2lkICphcmc7Cit9IHBlbmRpbmdjYWxsc1tOUEVORElOR0NBTExTXTsKK3N0YXRpYyBpbnQgcGVuZGluZ2ZpcnN0ID0gMDsKK3N0YXRpYyBpbnQgcGVuZGluZ2xhc3QgPSAwOworc3RhdGljIHZvbGF0aWxlIGludCBwZW5kaW5nY2FsbHNfdG9fZG8gPSAxOyAvKiB0cmlnZ2VyIGluaXRpYWxpemF0aW9uIG9mIGxvY2sgKi8KK3N0YXRpYyBjaGFyIHBlbmRpbmdidXN5ID0gMDsKKworaW50CitQeV9BZGRQZW5kaW5nQ2FsbChpbnQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcpCit7CisgICAgaW50IGksIGosIHJlc3VsdD0wOworICAgIFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrID0gcGVuZGluZ19sb2NrOworCisgICAgLyogdHJ5IGEgZmV3IHRpbWVzIGZvciB0aGUgbG9jay4gIFNpbmNlIHRoaXMgbWVjaGFuaXNtIGlzIHVzZWQKKyAgICAgKiBmb3Igc2lnbmFsIGhhbmRsaW5nIChvbiB0aGUgbWFpbiB0aHJlYWQpLCB0aGVyZSBpcyBhIChzbGltKQorICAgICAqIGNoYW5jZSB0aGF0IGEgc2lnbmFsIGlzIGRlbGl2ZXJlZCBvbiB0aGUgc2FtZSB0aHJlYWQgd2hpbGUgd2UKKyAgICAgKiBob2xkIHRoZSBsb2NrIGR1cmluZyB0aGUgUHlfTWFrZVBlbmRpbmdDYWxscygpIGZ1bmN0aW9uLgorICAgICAqIFRoaXMgYXZvaWRzIGEgZGVhZGxvY2sgaW4gdGhhdCBjYXNlLgorICAgICAqIE5vdGUgdGhhdCBzaWduYWxzIGNhbiBiZSBkZWxpdmVyZWQgb24gYW55IHRocmVhZC4gIEluIHBhcnRpY3VsYXIsCisgICAgICogb24gV2luZG93cywgYSBTSUdJTlQgaXMgZGVsaXZlcmVkIG9uIGEgc3lzdGVtLWNyZWF0ZWQgd29ya2VyCisgICAgICogdGhyZWFkLgorICAgICAqIFdlIGFsc28gY2hlY2sgZm9yIGxvY2sgYmVpbmcgTlVMTCwgaW4gdGhlIHVubGlrZWx5IGNhc2UgdGhhdAorICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBhbnkgYnl0ZWNvZGUgZXZhbHVhdGlvbiB0YWtlcyBwbGFjZS4KKyAgICAgKi8KKyAgICBpZiAobG9jayAhPSBOVUxMKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGk8MTAwOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChQeVRocmVhZF9hY3F1aXJlX2xvY2sobG9jaywgTk9XQUlUX0xPQ0spKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpID09IDEwMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpID0gcGVuZGluZ2xhc3Q7CisgICAgaiA9IChpICsgMSkgJSBOUEVORElOR0NBTExTOworICAgIGlmIChqID09IHBlbmRpbmdmaXJzdCkgeworICAgICAgICByZXN1bHQgPSAtMTsgLyogUXVldWUgZnVsbCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIHBlbmRpbmdjYWxsc1tpXS5mdW5jID0gZnVuYzsKKyAgICAgICAgcGVuZGluZ2NhbGxzW2ldLmFyZyA9IGFyZzsKKyAgICAgICAgcGVuZGluZ2xhc3QgPSBqOworICAgIH0KKyAgICAvKiBzaWduYWwgbWFpbiBsb29wICovCisgICAgX1B5X1RpY2tlciA9IDA7CisgICAgcGVuZGluZ2NhbGxzX3RvX2RvID0gMTsKKyAgICBpZiAobG9jayAhPSBOVUxMKQorICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sobG9jayk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50CitQeV9NYWtlUGVuZGluZ0NhbGxzKHZvaWQpCit7CisgICAgaW50IGk7CisgICAgaW50IHIgPSAwOworCisgICAgaWYgKCFwZW5kaW5nX2xvY2spIHsKKyAgICAgICAgLyogaW5pdGlhbCBhbGxvY2F0aW9uIG9mIHRoZSBsb2NrICovCisgICAgICAgIHBlbmRpbmdfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICAgICAgaWYgKHBlbmRpbmdfbG9jayA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIG9ubHkgc2VydmljZSBwZW5kaW5nIGNhbGxzIG9uIG1haW4gdGhyZWFkICovCisgICAgaWYgKG1haW5fdGhyZWFkICYmIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSAhPSBtYWluX3RocmVhZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLyogZG9uJ3QgcGVyZm9ybSByZWN1cnNpdmUgcGVuZGluZyBjYWxscyAqLworICAgIGlmIChwZW5kaW5nYnVzeSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcGVuZGluZ2J1c3kgPSAxOworICAgIC8qIHBlcmZvcm0gYSBib3VuZGVkIG51bWJlciBvZiBjYWxscywgaW4gY2FzZSBvZiByZWN1cnNpb24gKi8KKyAgICBmb3IgKGk9MDsgaTxOUEVORElOR0NBTExTOyBpKyspIHsKKyAgICAgICAgaW50IGo7CisgICAgICAgIGludCAoKmZ1bmMpKHZvaWQgKik7CisgICAgICAgIHZvaWQgKmFyZyA9IE5VTEw7CisKKyAgICAgICAgLyogcG9wIG9uZSBpdGVtIG9mZiB0aGUgcXVldWUgd2hpbGUgaG9sZGluZyB0aGUgbG9jayAqLworICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2socGVuZGluZ19sb2NrLCBXQUlUX0xPQ0spOworICAgICAgICBqID0gcGVuZGluZ2ZpcnN0OworICAgICAgICBpZiAoaiA9PSBwZW5kaW5nbGFzdCkgeworICAgICAgICAgICAgZnVuYyA9IE5VTEw7IC8qIFF1ZXVlIGVtcHR5ICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmdW5jID0gcGVuZGluZ2NhbGxzW2pdLmZ1bmM7CisgICAgICAgICAgICBhcmcgPSBwZW5kaW5nY2FsbHNbal0uYXJnOworICAgICAgICAgICAgcGVuZGluZ2ZpcnN0ID0gKGogKyAxKSAlIE5QRU5ESU5HQ0FMTFM7CisgICAgICAgIH0KKyAgICAgICAgcGVuZGluZ2NhbGxzX3RvX2RvID0gcGVuZGluZ2ZpcnN0ICE9IHBlbmRpbmdsYXN0OworICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2socGVuZGluZ19sb2NrKTsKKyAgICAgICAgLyogaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrLCBwZXJmb3JtIHRoZSBjYWxsYmFjayAqLworICAgICAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHIgPSBmdW5jKGFyZyk7CisgICAgICAgIGlmIChyKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHBlbmRpbmdidXN5ID0gMDsKKyAgICByZXR1cm4gcjsKK30KKworI2Vsc2UgLyogaWYgISBkZWZpbmVkIFdJVEhfVEhSRUFEICovCisKKy8qCisgICBXQVJOSU5HISAgQVNZTkNIUk9OT1VTTFkgRVhFQ1VUSU5HIENPREUhCisgICBUaGlzIGNvZGUgaXMgdXNlZCBmb3Igc2lnbmFsIGhhbmRsaW5nIGluIHB5dGhvbiB0aGF0IGlzbid0IGJ1aWx0CisgICB3aXRoIFdJVEhfVEhSRUFELgorICAgRG9uJ3QgdXNlIHRoaXMgaW1wbGVtZW50YXRpb24gd2hlbiBQeV9BZGRQZW5kaW5nQ2FsbHMoKSBjYW4gaGFwcGVuCisgICBvbiBhIGRpZmZlcmVudCB0aHJlYWQhCisKICAgIFRoZXJlIGFyZSB0d28gcG9zc2libGUgcmFjZSBjb25kaXRpb25zOgotICAgKDEpIG5lc3RlZCBhc3luY2hyb25vdXMgcmVnaXN0cnkgY2FsbHM7Ci0gICAoMikgcmVnaXN0cnkgY2FsbHMgbWFkZSB3aGlsZSBwZW5kaW5nIGNhbGxzIGFyZSBiZWluZyBwcm9jZXNzZWQuCi0gICBXaGlsZSAoMSkgaXMgdmVyeSB1bmxpa2VseSwgKDIpIGlzIGEgcmVhbCBwb3NzaWJpbGl0eS4KKyAgICgxKSBuZXN0ZWQgYXN5bmNocm9ub3VzIGNhbGxzIHRvIFB5X0FkZFBlbmRpbmdDYWxsKCkKKyAgICgyKSBBZGRQZW5kaW5nQ2FsbCgpIGNhbGxzIG1hZGUgd2hpbGUgcGVuZGluZyBjYWxscyBhcmUgYmVpbmcgcHJvY2Vzc2VkLgorCisgICAoMSkgaXMgdmVyeSB1bmxpa2VseSBiZWNhdXNlIHR5cGljYWxseSBzaWduYWwgZGVsaXZlcnkKKyAgIGlzIGJsb2NrZWQgZHVyaW5nIHNpZ25hbCBoYW5kbGluZy4gIFNvIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlLgorICAgKDIpIGlzIGEgcmVhbCBwb3NzaWJpbGl0eS4KICAgIFRoZSBjdXJyZW50IGNvZGUgaXMgc2FmZSBhZ2FpbnN0ICgyKSwgYnV0IG5vdCBhZ2FpbnN0ICgxKS4KICAgIFRoZSBzYWZldHkgYWdhaW5zdCAoMikgaXMgZGVyaXZlZCBmcm9tIHRoZSBmYWN0IHRoYXQgb25seSBvbmUKLSAgIHRocmVhZCAodGhlIG1haW4gdGhyZWFkKSBldmVyIHRha2VzIHRoaW5ncyBvdXQgb2YgdGhlIHF1ZXVlLgotCi0gICBYWFggRGFybiEgIFdpdGggdGhlIGFkdmVudCBvZiB0aHJlYWQgc3RhdGUsIHdlIHNob3VsZCBoYXZlIGFuIGFycmF5Ci0gICBvZiBwZW5kaW5nIGNhbGxzIHBlciB0aHJlYWQgaW4gdGhlIHRocmVhZCBzdGF0ZSEgIExhdGVyLi4uCisgICB0aHJlYWQgaXMgcHJlc2VudCwgaW50ZXJydXB0ZWQgYnkgc2lnbmFscywgYW5kIHRoYXQgdGhlIGNyaXRpY2FsCisgICBzZWN0aW9uIGlzIHByb3RlY3RlZCB3aXRoIHRoZSAiYnVzeSIgdmFyaWFibGUuICBPbiBXaW5kb3dzLCB3aGljaAorICAgZGVsaXZlcnMgU0lHSU5UIG9uIGEgc3lzdGVtIHRocmVhZCwgdGhpcyBkb2VzIG5vdCBob2xkIGFuZCB0aGVyZWZvcmUKKyAgIFdpbmRvd3MgcmVhbGx5IHNob3VsZG4ndCB1c2UgdGhpcyB2ZXJzaW9uLgorICAgVGhlIHR3byB0aHJlYWRzIGNvdWxkIHRoZW9yZXRpY2FsbHkgd2lnZ2xlIGFyb3VuZCB0aGUgImJ1c3kiIHZhcmlhYmxlLgogKi8KIAogI2RlZmluZSBOUEVORElOR0NBTExTIDMyCkBAIC0zOTcsNyArNTI3LDcgQEAKIH0gcGVuZGluZ2NhbGxzW05QRU5ESU5HQ0FMTFNdOwogc3RhdGljIHZvbGF0aWxlIGludCBwZW5kaW5nZmlyc3QgPSAwOwogc3RhdGljIHZvbGF0aWxlIGludCBwZW5kaW5nbGFzdCA9IDA7Ci1zdGF0aWMgdm9sYXRpbGUgaW50IHRoaW5nc190b19kbyA9IDA7CitzdGF0aWMgdm9sYXRpbGUgaW50IHBlbmRpbmdjYWxsc190b19kbyA9IDA7CiAKIGludAogUHlfQWRkUGVuZGluZ0NhbGwoaW50ICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKQpAQCAtNDA1LDggKzUzNSw2IEBACiAgICAgc3RhdGljIHZvbGF0aWxlIGludCBidXN5ID0gMDsKICAgICBpbnQgaSwgajsKICAgICAvKiBYWFggQmVnaW4gY3JpdGljYWwgc2VjdGlvbiAqLwotICAgIC8qIFhYWCBJZiB5b3Ugd2FudCB0aGlzIHRvIGJlIHNhZmUgYWdhaW5zdCBuZXN0ZWQKLSAgICAgICBYWFggYXN5bmNocm9ub3VzIGNhbGxzLCB5b3UnbGwgaGF2ZSB0byB3b3JrIGhhcmRlciEgKi8KICAgICBpZiAoYnVzeSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGJ1c3kgPSAxOwpAQCAtNDIxLDcgKzU0OSw3IEBACiAgICAgcGVuZGluZ2xhc3QgPSBqOwogCiAgICAgX1B5X1RpY2tlciA9IDA7Ci0gICAgdGhpbmdzX3RvX2RvID0gMTsgLyogU2lnbmFsIG1haW4gbG9vcCAqLworICAgIHBlbmRpbmdjYWxsc190b19kbyA9IDE7IC8qIFNpZ25hbCBtYWluIGxvb3AgKi8KICAgICBidXN5ID0gMDsKICAgICAvKiBYWFggRW5kIGNyaXRpY2FsIHNlY3Rpb24gKi8KICAgICByZXR1cm4gMDsKQEAgLTQzMSwxNCArNTU5LDEwIEBACiBQeV9NYWtlUGVuZGluZ0NhbGxzKHZvaWQpCiB7CiAgICAgc3RhdGljIGludCBidXN5ID0gMDsKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgIGlmIChtYWluX3RocmVhZCAmJiBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgIT0gbWFpbl90aHJlYWQpCi0gICAgICAgIHJldHVybiAwOwotI2VuZGlmCiAgICAgaWYgKGJ1c3kpCiAgICAgICAgIHJldHVybiAwOwogICAgIGJ1c3kgPSAxOwotICAgIHRoaW5nc190b19kbyA9IDA7CisgICAgcGVuZGluZ2NhbGxzX3RvX2RvID0gMDsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGludCBpOwogICAgICAgICBpbnQgKCpmdW5jKSh2b2lkICopOwpAQCAtNDUxLDcgKzU3NSw3IEBACiAgICAgICAgIHBlbmRpbmdmaXJzdCA9IChpICsgMSkgJSBOUEVORElOR0NBTExTOwogICAgICAgICBpZiAoZnVuYyhhcmcpIDwgMCkgewogICAgICAgICAgICAgYnVzeSA9IDA7Ci0gICAgICAgICAgICB0aGluZ3NfdG9fZG8gPSAxOyAvKiBXZSdyZSBub3QgZG9uZSB5ZXQgKi8KKyAgICAgICAgICAgIHBlbmRpbmdjYWxsc190b19kbyA9IDE7IC8qIFdlJ3JlIG5vdCBkb25lIHlldCAqLwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQpAQCAtNDU5LDYgKzU4Myw4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNlbmRpZiAvKiBXSVRIX1RIUkVBRCAqLworCiAKIC8qIFRoZSBpbnRlcnByZXRlcidzIHJlY3Vyc2lvbiBsaW1pdCAqLwogCkBAIC01MzMsNyArNjU5LDcgQEAKIC8qIGZvciBtYW5pcHVsYXRpbmcgdGhlIHRocmVhZCBzd2l0Y2ggYW5kIHBlcmlvZGljICJzdHVmZiIgLSB1c2VkIHRvIGJlCiAgICBwZXIgdGhyZWFkLCBub3cganVzdCBhIHBhaXIgbycgZ2xvYmFscyAqLwogaW50IF9QeV9DaGVja0ludGVydmFsID0gMTAwOwotdm9sYXRpbGUgaW50IF9QeV9UaWNrZXIgPSAxMDA7Cit2b2xhdGlsZSBpbnQgX1B5X1RpY2tlciA9IDA7IC8qIHNvIHRoYXQgd2UgaGl0IGEgInRpY2siIGZpcnN0IHRoaW5nICovCiAKIFB5T2JqZWN0ICoKIFB5RXZhbF9FdmFsQ29kZShQeUNvZGVPYmplY3QgKmNvLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscykKQEAgLTY1OCw4ICs3ODQsOCBAQAogLyogT3BDb2RlIHByZWRpY3Rpb24gbWFjcm9zCiAgICAgU29tZSBvcGNvZGVzIHRlbmQgdG8gY29tZSBpbiBwYWlycyB0aHVzIG1ha2luZyBpdCBwb3NzaWJsZSB0bwogICAgIHByZWRpY3QgdGhlIHNlY29uZCBjb2RlIHdoZW4gdGhlIGZpcnN0IGlzIHJ1bi4gIEZvciBleGFtcGxlLAotICAgIENPTVBBUkVfT1AgaXMgb2Z0ZW4gZm9sbG93ZWQgYnkgSlVNUF9JRl9GQUxTRSBvciBKVU1QX0lGX1RSVUUuICBBbmQsCi0gICAgdGhvc2Ugb3Bjb2RlcyBhcmUgb2Z0ZW4gZm9sbG93ZWQgYnkgYSBQT1BfVE9QLgorICAgIEdFVF9JVEVSIGlzIG9mdGVuIGZvbGxvd2VkIGJ5IEZPUl9JVEVSLiBBbmQgRk9SX0lURVIgaXMgb2Z0ZW4KKyAgICBmb2xsb3dlZCBieSBTVE9SRV9GQVNUIG9yIFVOUEFDS19TRVFVRU5DRS4KIAogICAgIFZlcmlmeWluZyB0aGUgcHJlZGljdGlvbiBjb3N0cyBhIHNpbmdsZSBoaWdoLXNwZWVkIHRlc3Qgb2YgYSByZWdpc3RlcgogICAgIHZhcmlhYmxlIGFnYWluc3QgYSBjb25zdGFudC4gIElmIHRoZSBwYWlyaW5nIHdhcyBnb29kLCB0aGVuIHRoZQpAQCAtNjk2LDEwICs4MjIsMTIgQEAKICNkZWZpbmUgU0VDT05EKCkgICAgICAgICAgKHN0YWNrX3BvaW50ZXJbLTJdKQogI2RlZmluZSBUSElSRCgpICAgICAgICAgICAoc3RhY2tfcG9pbnRlclstM10pCiAjZGVmaW5lIEZPVVJUSCgpICAgICAgICAgIChzdGFja19wb2ludGVyWy00XSkKKyNkZWZpbmUgUEVFSyhuKSAgICAgICAgICAgKHN0YWNrX3BvaW50ZXJbLShuKV0pCiAjZGVmaW5lIFNFVF9UT1AodikgICAgICAgIChzdGFja19wb2ludGVyWy0xXSA9ICh2KSkKICNkZWZpbmUgU0VUX1NFQ09ORCh2KSAgICAgKHN0YWNrX3BvaW50ZXJbLTJdID0gKHYpKQogI2RlZmluZSBTRVRfVEhJUkQodikgICAgICAoc3RhY2tfcG9pbnRlclstM10gPSAodikpCiAjZGVmaW5lIFNFVF9GT1VSVEgodikgICAgIChzdGFja19wb2ludGVyWy00XSA9ICh2KSkKKyNkZWZpbmUgU0VUX1ZBTFVFKG4sIHYpICAgKHN0YWNrX3BvaW50ZXJbLShuKV0gPSAodikpCiAjZGVmaW5lIEJBU0lDX1NUQUNLQURKKG4pIChzdGFja19wb2ludGVyICs9IG4pCiAjZGVmaW5lIEJBU0lDX1BVU0godikgICAgICgqc3RhY2tfcG9pbnRlcisrID0gKHYpKQogI2RlZmluZSBCQVNJQ19QT1AoKSAgICAgICAoKi0tc3RhY2tfcG9pbnRlcikKQEAgLTg1MSw3ICs5NzksNyBAQAogICAgICAgICAvKiBEbyBwZXJpb2RpYyB0aGluZ3MuICBEb2luZyB0aGlzIGV2ZXJ5IHRpbWUgdGhyb3VnaAogICAgICAgICAgICB0aGUgbG9vcCB3b3VsZCBhZGQgdG9vIG11Y2ggb3ZlcmhlYWQsIHNvIHdlIGRvIGl0CiAgICAgICAgICAgIG9ubHkgZXZlcnkgTnRoIGluc3RydWN0aW9uLiAgV2UgYWxzbyBkbyBpdCBpZgotICAgICAgICAgICBgYHRoaW5nc190b19kbycnIGlzIHNldCwgaS5lLiB3aGVuIGFuIGFzeW5jaHJvbm91cworICAgICAgICAgICBgYHBlbmRpbmdjYWxsc190b19kbycnIGlzIHNldCwgaS5lLiB3aGVuIGFuIGFzeW5jaHJvbm91cwogICAgICAgICAgICBldmVudCBuZWVkcyBhdHRlbnRpb24gKGUuZy4gYSBzaWduYWwgaGFuZGxlciBvcgogICAgICAgICAgICBhc3luYyBJL08gaGFuZGxlcik7IHNlZSBQeV9BZGRQZW5kaW5nQ2FsbCgpIGFuZAogICAgICAgICAgICBQeV9NYWtlUGVuZGluZ0NhbGxzKCkgYWJvdmUuICovCkBAIC04NjcsMTIgKzk5NSwxMiBAQAogI2lmZGVmIFdJVEhfVFNDCiAgICAgICAgICAgICB0aWNrZWQgPSAxOwogI2VuZGlmCi0gICAgICAgICAgICBpZiAodGhpbmdzX3RvX2RvKSB7CisgICAgICAgICAgICBpZiAocGVuZGluZ2NhbGxzX3RvX2RvKSB7CiAgICAgICAgICAgICAgICAgaWYgKFB5X01ha2VQZW5kaW5nQ2FsbHMoKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKICAgICAgICAgICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRoaW5nc190b19kbykKKyAgICAgICAgICAgICAgICBpZiAocGVuZGluZ2NhbGxzX3RvX2RvKQogICAgICAgICAgICAgICAgICAgICAvKiBNYWtlUGVuZGluZ0NhbGxzKCkgZGlkbid0IHN1Y2NlZWQuCiAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlIGVhcmx5IHJlLWV4ZWN1dGlvbiBvZiB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICJwZXJpb2RpYyIgY29kZSwgcG9zc2libHkgYWZ0ZXIKQEAgLTEwMDQsNyArMTEzMiw2IEBACiAgICAgICAgICAgICBTRVRMT0NBTChvcGFyZywgdik7CiAgICAgICAgICAgICBnb3RvIGZhc3RfbmV4dF9vcGNvZGU7CiAKLSAgICAgICAgUFJFRElDVEVEKFBPUF9UT1ApOwogICAgICAgICBjYXNlIFBPUF9UT1A6CiAgICAgICAgICAgICB2ID0gUE9QKCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CkBAIC0xMTc3LDcgKzEzMDQsMTAgQEAKICAgICAgICAgY2FzZSBCSU5BUllfTU9EVUxPOgogICAgICAgICAgICAgdyA9IFBPUCgpOwogICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1JlbWFpbmRlcih2LCB3KTsKKyAgICAgICAgICAgIGlmIChQeVN0cmluZ19DaGVja0V4YWN0KHYpKQorICAgICAgICAgICAgICAgIHggPSBQeVN0cmluZ19Gb3JtYXQodiwgdyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1JlbWFpbmRlcih2LCB3KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKICAgICAgICAgICAgIFNFVF9UT1AoeCk7CkBAIC0xMzE3LDkgKzE0NDcsMTkgQEAKIAogICAgICAgICBjYXNlIExJU1RfQVBQRU5EOgogICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFBPUCgpOworICAgICAgICAgICAgdiA9IFBFRUsob3BhcmcpOwogICAgICAgICAgICAgZXJyID0gUHlMaXN0X0FwcGVuZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgeworICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNFVF9BREQ6CisgICAgICAgICAgICB3ID0gUE9QKCk7CisgICAgICAgICAgICB2ID0gc3RhY2tfcG9pbnRlclstb3BhcmddOworICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHYsIHcpOwogICAgICAgICAgICAgUHlfREVDUkVGKHcpOwogICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7CiAgICAgICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKQEAgLTE4NDgsNyArMTk4OCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmICh1bnBhY2tfaXRlcmFibGUodiwgb3BhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICsgb3BhcmcpKSB7Ci0gICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciArPSBvcGFyZzsKKyAgICAgICAgICAgICAgICBTVEFDS0FESihvcGFyZyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qIHVucGFja19pdGVyYWJsZSgpIHJhaXNlZCBhbiBleGNlcHRpb24gKi8KICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwpAQCAtMjA1OCw2ICsyMTk4LDI1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIEJVSUxEX1NFVDoKKyAgICAgICAgICAgIHggPSBQeVNldF9OZXcoTlVMTCk7CisgICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZm9yICg7IC0tb3BhcmcgPj0gMDspIHsKKyAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQoeCwgdyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworCiAgICAgICAgIGNhc2UgQlVJTERfTUFQOgogICAgICAgICAgICAgeCA9IF9QeURpY3RfTmV3UHJlc2l6ZWQoKFB5X3NzaXplX3Qpb3BhcmcpOwogICAgICAgICAgICAgUFVTSCh4KTsKQEAgLTIwNzYsNiArMjIzNSwyMSBAQAogICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBjb250aW51ZTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgTUFQX0FERDoKKyAgICAgICAgICAgIHcgPSBUT1AoKTsgICAgIC8qIGtleSAqLworICAgICAgICAgICAgdSA9IFNFQ09ORCgpOyAgLyogdmFsdWUgKi8KKyAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKKyAgICAgICAgICAgIHYgPSBzdGFja19wb2ludGVyWy1vcGFyZ107ICAvKiBkaWN0ICovCisgICAgICAgICAgICBhc3NlcnQgKFB5RGljdF9DaGVja0V4YWN0KHYpKTsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKHYsIHcsIHUpOyAgLyogdlt3XSA9IHUgKi8KKyAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgeworICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIExPQURfQVRUUjoKICAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CiAgICAgICAgICAgICB2ID0gVE9QKCk7CkBAIC0yMTE2LDggKzIyOTAsOCBAQAogICAgICAgICAgICAgUHlfREVDUkVGKHcpOwogICAgICAgICAgICAgU0VUX1RPUCh4KTsKICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIGJyZWFrOwotICAgICAgICAgICAgUFJFRElDVChKVU1QX0lGX0ZBTFNFKTsKLSAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9JRl9UUlVFKTsKKyAgICAgICAgICAgIFBSRURJQ1QoUE9QX0pVTVBfSUZfRkFMU0UpOworICAgICAgICAgICAgUFJFRElDVChQT1BfSlVNUF9JRl9UUlVFKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGNhc2UgSU1QT1JUX05BTUU6CkBAIC0yMTk0LDQ0ICsyMzY4LDk1IEBACiAgICAgICAgICAgICBKVU1QQlkob3BhcmcpOwogICAgICAgICAgICAgZ290byBmYXN0X25leHRfb3Bjb2RlOwogCi0gICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhKVU1QX0lGX0ZBTFNFKTsKLSAgICAgICAgY2FzZSBKVU1QX0lGX0ZBTFNFOgotICAgICAgICAgICAgdyA9IFRPUCgpOworICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoUE9QX0pVTVBfSUZfRkFMU0UpOworICAgICAgICBjYXNlIFBPUF9KVU1QX0lGX0ZBTFNFOgorICAgICAgICAgICAgdyA9IFBPUCgpOwogICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgewotICAgICAgICAgICAgICAgIFBSRURJQ1QoUE9QX1RPUCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOwogICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9uZXh0X29wY29kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgSlVNUEJZKG9wYXJnKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBnb3RvIGZhc3RfbmV4dF9vcGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7CisgICAgICAgICAgICBQeV9ERUNSRUYodyk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCi0gICAgICAgICAgICAgICAgSlVNUEJZKG9wYXJnKTsKKyAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKEpVTVBfSUZfVFJVRSk7Ci0gICAgICAgIGNhc2UgSlVNUF9JRl9UUlVFOgotICAgICAgICAgICAgdyA9IFRPUCgpOworICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoUE9QX0pVTVBfSUZfVFJVRSk7CisgICAgICAgIGNhc2UgUE9QX0pVTVBfSUZfVFJVRToKKyAgICAgICAgICAgIHcgPSBQT1AoKTsKICAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChQT1BfVE9QKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CiAgICAgICAgICAgICAgICAgZ290byBmYXN0X25leHRfb3Bjb2RlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgewotICAgICAgICAgICAgICAgIEpVTVBCWShvcGFyZyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CisgICAgICAgICAgICAgICAgZ290byBmYXN0X25leHRfb3Bjb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOworICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgaWYgKGVyciA+IDApIHsKKyAgICAgICAgICAgICAgICBlcnIgPSAwOworICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjYXNlIEpVTVBfSUZfRkFMU0VfT1JfUE9QOgorICAgICAgICAgICAgdyA9IFRPUCgpOworICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgZ290byBmYXN0X25leHRfb3Bjb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOworICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9uZXh0X29wY29kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKKyAgICAgICAgICAgIGlmIChlcnIgPiAwKSB7CisgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBlcnIgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCisgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNhc2UgSlVNUF9JRl9UUlVFX09SX1BPUDoKKyAgICAgICAgICAgIHcgPSBUT1AoKTsKKyAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhc3RfbmV4dF9vcGNvZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBnb3RvIGZhc3RfbmV4dF9vcGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgICAgICAgICAgSlVNUEJZKG9wYXJnKTsKKyAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCi0gICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApIHsKKyAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0yMzEzLDYgKzI1MzgsMzUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFDS19MRVZFTCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIGNhc2UgU0VUVVBfV0lUSDoKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpleGl0LCAqZW50ZXI7CisgICAgICAgICAgICB3ID0gVE9QKCk7CisgICAgICAgICAgICB4ID0gc3BlY2lhbF9sb29rdXAodywgIl9fZXhpdF9fIiwgJmV4aXQpOworICAgICAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgU0VUX1RPUCh4KTsKKyAgICAgICAgICAgIHUgPSBzcGVjaWFsX2xvb2t1cCh3LCAiX19lbnRlcl9fIiwgJmVudGVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmICghdSkgeworICAgICAgICAgICAgICAgIHggPSBOVUxMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3ModSwgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICBpZiAoIXgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBTZXR1cCBhIGZpbmFsbHkgYmxvY2sgKFNFVFVQX1dJVEggYXMgYSBibG9jayBpcworICAgICAgICAgICAgICAgZXF1aXZhbGVudCB0byBTRVRVUF9GSU5BTExZIGV4Y2VwdCBpdCBub3JtYWxpemVzCisgICAgICAgICAgICAgICB0aGUgZXhjZXB0aW9uKSBiZWZvcmUgcHVzaGluZyB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICBfX2VudGVyX18gb24gdGhlIHN0YWNrLiAqLworICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwKGYsIFNFVFVQX1dJVEgsIElOU1RSX09GRlNFVCgpICsgb3BhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfTEVWRUwoKSk7CisKKyAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgV0lUSF9DTEVBTlVQOgogICAgICAgICB7CiAgICAgICAgICAgICAvKiBBdCB0aGUgdG9wIG9mIHRoZSBzdGFjayBhcmUgMS0zIHZhbHVlcyBpbmRpY2F0aW5nCkBAIC0yNDQ0LDcgKzI2OTgsNiBAQAogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqcGZ1bmMpOwogICAgICAgICAgICAgICAgICpwZnVuYyA9IHNlbGY7CiAgICAgICAgICAgICAgICAgbmErKzsKLSAgICAgICAgICAgICAgICBuKys7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CiAgICAgICAgICAgICBzcCA9IHN0YWNrX3BvaW50ZXI7CkBAIC0yNTQ0LDcgKzI3OTcsNyBAQAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgIlhYWCBsaW5lbm86ICVkLCBvcGNvZGU6ICVkXG4iLAotICAgICAgICAgICAgICAgIFB5Q29kZV9BZGRyMkxpbmUoZi0+Zl9jb2RlLCBmLT5mX2xhc3RpKSwKKyAgICAgICAgICAgICAgICBQeUZyYW1lX0dldExpbmVOdW1iZXIoZiksCiAgICAgICAgICAgICAgICAgb3Bjb2RlKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgInVua25vd24gb3Bjb2RlIik7CiAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwpAQCAtMjYyMiwyMCArMjg3NSwyMCBAQAogCiBmYXN0X2Jsb2NrX2VuZDoKICAgICAgICAgd2hpbGUgKHdoeSAhPSBXSFlfTk9UICYmIGYtPmZfaWJsb2NrID4gMCkgewotICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7CisgICAgICAgICAgICAvKiBQZWVrIGF0IHRoZSBjdXJyZW50IGJsb2NrLiAqLworICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9ICZmLT5mX2Jsb2Nrc3RhY2tbZi0+Zl9pYmxvY2sgLSAxXTsKIAogICAgICAgICAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfWUlFTEQpOwogICAgICAgICAgICAgaWYgKGItPmJfdHlwZSA9PSBTRVRVUF9MT09QICYmIHdoeSA9PSBXSFlfQ09OVElOVUUpIHsKLSAgICAgICAgICAgICAgICAvKiBGb3IgYSBjb250aW51ZSBpbnNpZGUgYSB0cnkgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgZG9uJ3QgcG9wIHRoZSBibG9jayBmb3IgdGhlIGxvb3AuICovCi0gICAgICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwKGYsIGItPmJfdHlwZSwgYi0+Yl9oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5iX2xldmVsKTsKICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfTk9UOwogICAgICAgICAgICAgICAgIEpVTVBUTyhQeUludF9BU19MT05HKHJldHZhbCkpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvKiBOb3cgd2UgaGF2ZSB0byBwb3AgdGhlIGJsb2NrLiAqLworICAgICAgICAgICAgZi0+Zl9pYmxvY2stLTsKKwogICAgICAgICAgICAgd2hpbGUgKFNUQUNLX0xFVkVMKCkgPiBiLT5iX2xldmVsKSB7CiAgICAgICAgICAgICAgICAgdiA9IFBPUCgpOwogICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodik7CkBAIC0yNjQ3LDcgKzI5MDAsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGItPmJfdHlwZSA9PSBTRVRVUF9GSU5BTExZIHx8CiAgICAgICAgICAgICAgICAgKGItPmJfdHlwZSA9PSBTRVRVUF9FWENFUFQgJiYKLSAgICAgICAgICAgICAgICAgd2h5ID09IFdIWV9FWENFUFRJT04pKSB7CisgICAgICAgICAgICAgICAgIHdoeSA9PSBXSFlfRVhDRVBUSU9OKSB8fAorICAgICAgICAgICAgICAgIGItPmJfdHlwZSA9PSBTRVRVUF9XSVRIKSB7CiAgICAgICAgICAgICAgICAgaWYgKHdoeSA9PSBXSFlfRVhDRVBUSU9OKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGMsICp2YWwsICp0YjsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbCwgJnRiKTsKQEAgLTI2NjAsNyArMjkxNCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIHNvIGEgcHJvZ3JhbSBjYW4gZW11bGF0ZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIG1haW4gbG9vcC4gIERvbid0IGRvCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZm9yICdmaW5hbGx5Jy4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGItPmJfdHlwZSA9PSBTRVRVUF9FWENFUFQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGItPmJfdHlwZSA9PSBTRVRVUF9FWENFUFQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGItPmJfdHlwZSA9PSBTRVRVUF9XSVRIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4YywgJnZhbCwgJnRiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9leGNfaW5mbyh0c3RhdGUsCkBAIC0yODAwLDEzICszMDU1LDEyIEBACiAgICAgICAgICAgICBpZiAoIShjby0+Y29fZmxhZ3MgJiBDT19WQVJBUkdTKSkgewogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyAlcyAlZCAiCi0gICAgICAgICAgICAgICAgICAgICIlc2FyZ3VtZW50JXMgKCVkIGdpdmVuKSIsCisgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCVzICglZCBnaXZlbikiLAogICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZyhjby0+Y29fbmFtZSksCiAgICAgICAgICAgICAgICAgICAgIGRlZmNvdW50ID8gImF0IG1vc3QiIDogImV4YWN0bHkiLAogICAgICAgICAgICAgICAgICAgICBjby0+Y29fYXJnY291bnQsCi0gICAgICAgICAgICAgICAgICAgIGt3Y291bnQgPyAibm9uLWtleXdvcmQgIiA6ICIiLAogICAgICAgICAgICAgICAgICAgICBjby0+Y29fYXJnY291bnQgPT0gMSA/ICIiIDogInMiLAotICAgICAgICAgICAgICAgICAgICBhcmdjb3VudCk7CisgICAgICAgICAgICAgICAgICAgIGFyZ2NvdW50ICsga3djb3VudCk7CiAgICAgICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbiA9IGNvLT5jb19hcmdjb3VudDsKQEAgLTI4MzIsOCArMzA4NiwxMSBAQAogICAgICAgICAgICAgUHlPYmplY3QgKmtleXdvcmQgPSBrd3NbMippXTsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IGt3c1syKmkgKyAxXTsKICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgaWYgKGtleXdvcmQgPT0gTlVMTCB8fCAhKFB5U3RyaW5nX0NoZWNrKGtleXdvcmQpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NoZWNrKGtleXdvcmQpKSkgeworICAgICAgICAgICAgaWYgKGtleXdvcmQgPT0gTlVMTCB8fCAhKFB5U3RyaW5nX0NoZWNrKGtleXdvcmQpCisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFB5VW5pY29kZV9DaGVjayhrZXl3b3JkKQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICApKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcygpIGtleXdvcmRzIG11c3QgYmUgc3RyaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKGNvLT5jb19uYW1lKSk7CkBAIC0yODQxLDcgKzMwOTgsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogU3BlZWQgaGFjazogZG8gcmF3IHBvaW50ZXIgY29tcGFyZXMuIEFzIG5hbWVzIGFyZQogICAgICAgICAgICAgICAgbm9ybWFsbHkgaW50ZXJuZWQgdGhpcyBzaG91bGQgYWxtb3N0IGFsd2F5cyBoaXQuICovCi0gICAgICAgICAgICBjb192YXJuYW1lcyA9IFB5U2VxdWVuY2VfRmFzdF9JVEVNUyhjby0+Y29fdmFybmFtZXMpOworICAgICAgICAgICAgY29fdmFybmFtZXMgPSAoKFB5VHVwbGVPYmplY3QgKikoY28tPmNvX3Zhcm5hbWVzKSktPm9iX2l0ZW07CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY28tPmNvX2FyZ2NvdW50OyBqKyspIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbm0gPSBjb192YXJuYW1lc1tqXTsKICAgICAgICAgICAgICAgICBpZiAobm0gPT0ga2V5d29yZCkKQEAgLTI4NTcsMjYgKzMxMTQsMjEgQEAKICAgICAgICAgICAgICAgICBlbHNlIGlmIChjbXAgPCAwKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBDaGVjayBlcnJvcnMgZnJvbSBDb21wYXJlICovCi0gICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICBpZiAoaiA+PSBjby0+Y29fYXJnY291bnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoa3dkaWN0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmt3ZF9zdHIgPSBrd2RfYXNfc3RyaW5nKGtleXdvcmQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoa3dkX3N0cikgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJS4yMDBzKCkgZ290IGFuIHVuZXhwZWN0ZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkIGFyZ3VtZW50ICclLjQwMHMnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZyhjby0+Y29fbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQXNTdHJpbmcoa3dkX3N0cikpOwotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGt3ZF9zdHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIGlmIChrd2RpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICprd2Rfc3RyID0ga3dkX2FzX3N0cmluZyhrZXl3b3JkKTsKKyAgICAgICAgICAgICAgICBpZiAoa3dkX3N0cikgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcygpIGdvdCBhbiB1bmV4cGVjdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkIGFyZ3VtZW50ICclLjQwMHMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKGNvLT5jb19uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKGt3ZF9zdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGt3ZF9zdHIpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShrd2RpY3QsIGtleXdvcmQsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgICAgICB9Ci1rd19mb3VuZDoKKyAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKGt3ZGljdCwga2V5d29yZCwgdmFsdWUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAga3dfZm91bmQ6CiAgICAgICAgICAgICBpZiAoR0VUTE9DQUwoaikgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICprd2Rfc3RyID0ga3dkX2FzX3N0cmluZyhrZXl3b3JkKTsKICAgICAgICAgICAgICAgICBpZiAoa3dkX3N0cikgewpAQCAtMjg5NywxNSArMzE0OSwxOCBAQAogICAgICAgICAgICAgaW50IG0gPSBjby0+Y29fYXJnY291bnQgLSBkZWZjb3VudDsKICAgICAgICAgICAgIGZvciAoaSA9IGFyZ2NvdW50OyBpIDwgbTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKEdFVExPQ0FMKGkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGosIGdpdmVuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvLT5jb19hcmdjb3VudDsgaisrKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdFVExPQ0FMKGopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuKys7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiJS4yMDBzKCkgdGFrZXMgJXMgJWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgIiVzYXJndW1lbnQlcyAoJWQgZ2l2ZW4pIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCVzICglZCBnaXZlbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQXNTdHJpbmcoY28tPmNvX25hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgKChjby0+Y29fZmxhZ3MgJiBDT19WQVJBUkdTKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmNvdW50KSA/ICJhdCBsZWFzdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiZXhhY3RseSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtLCBrd2NvdW50ID8gIm5vbi1rZXl3b3JkICIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG0gPT0gMSA/ICIiIDogInMiLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG0sIG0gPT0gMSA/ICIiIDogInMiLCBnaXZlbik7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yOTIyLDE0ICszMTc3LDEyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChhcmdjb3VudCA+IDAgfHwga3djb3VudCA+IDApIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIG5vIGFyZ3VtZW50cyAoJWQgZ2l2ZW4pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZyhjby0+Y29fbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXJnY291bnQgKyBrd2NvdW50KTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQorICAgIGVsc2UgaWYgKGFyZ2NvdW50ID4gMCB8fCBrd2NvdW50ID4gMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIG5vIGFyZ3VtZW50cyAoJWQgZ2l2ZW4pIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKGNvLT5jb19uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgIGFyZ2NvdW50ICsga3djb3VudCk7CisgICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAgICAgLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgc3RvcmFnZSBmb3IgY2VsbCB2YXJzLCBhbmQgY29weSBmcmVlCiAgICAgICAgdmFycyBpbnRvIGZyYW1lLiAgVGhpcyBpc24ndCB0b28gZWZmaWNpZW50IHJpZ2h0IG5vdy4gKi8KQEAgLTMwMTUsMTMgKzMyNjgsMzcgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgorc3BlY2lhbF9sb29rdXAoUHlPYmplY3QgKm8sIGNoYXIgKm1ldGgsIFB5T2JqZWN0ICoqY2FjaGUpCit7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBpZiAoUHlJbnN0YW5jZV9DaGVjayhvKSkgeworICAgICAgICBpZiAoISpjYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG8sIG1ldGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0cihvLCAqY2FjaGUpOworICAgIH0KKyAgICByZXMgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvLCBtZXRoLCBjYWNoZSk7CisgICAgaWYgKHJlcyA9PSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgKmNhY2hlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKIGt3ZF9hc19zdHJpbmcoUHlPYmplY3QgKmt3ZCkgeworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICBpZiAoUHlTdHJpbmdfQ2hlY2soa3dkKSkgeworI2Vsc2UKKyAgICAgICAgYXNzZXJ0KFB5U3RyaW5nX0NoZWNrKGt3ZCkpOworI2VuZGlmCiAgICAgICAgIFB5X0lOQ1JFRihrd2QpOwogICAgICAgICByZXR1cm4ga3dkOworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICB9Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc0RlZmF1bHRFbmNvZGVkU3RyaW5nKGt3ZCwgInJlcGxhY2UiKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZV9Bc0RlZmF1bHRFbmNvZGVkU3RyaW5nKGt3ZCwgInJlcGxhY2UiKTsKKyNlbmRpZgogfQogCiAKQEAgLTM0MjksMzMgKzM3MDYsMzAgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvKiBTZWUgT2JqZWN0cy9sbm90YWJfbm90ZXMudHh0IGZvciBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0cmFjaW5nIHdvcmtzLiAqLwogc3RhdGljIGludAogbWF5YmVfY2FsbF9saW5lX3RyYWNlKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgIFB5RnJhbWVPYmplY3QgKmZyYW1lLCBpbnQgKmluc3RyX2xiLCBpbnQgKmluc3RyX3ViLAogICAgICAgICAgICAgICAgICAgICAgIGludCAqaW5zdHJfcHJldikKIHsKICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBpbnQgbGluZSA9IGZyYW1lLT5mX2xpbmVubzsKIAogICAgIC8qIElmIHRoZSBsYXN0IGluc3RydWN0aW9uIGV4ZWN1dGVkIGlzbid0IGluIHRoZSBjdXJyZW50Ci0gICAgICAgaW5zdHJ1Y3Rpb24gd2luZG93LCByZXNldCB0aGUgd2luZG93LiAgSWYgdGhlIGxhc3QKLSAgICAgICBpbnN0cnVjdGlvbiBoYXBwZW5zIHRvIGZhbGwgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSBvciBpZiBpdAotICAgICAgIHJlcHJlc2VudHMgYSBqdW1wIGJhY2t3YXJkcywgY2FsbCB0aGUgdHJhY2UgZnVuY3Rpb24uCisgICAgICAgaW5zdHJ1Y3Rpb24gd2luZG93LCByZXNldCB0aGUgd2luZG93LgogICAgICovCi0gICAgaWYgKChmcmFtZS0+Zl9sYXN0aSA8ICppbnN0cl9sYiB8fCBmcmFtZS0+Zl9sYXN0aSA+PSAqaW5zdHJfdWIpKSB7Ci0gICAgICAgIGludCBsaW5lOworICAgIGlmIChmcmFtZS0+Zl9sYXN0aSA8ICppbnN0cl9sYiB8fCBmcmFtZS0+Zl9sYXN0aSA+PSAqaW5zdHJfdWIpIHsKICAgICAgICAgUHlBZGRyUGFpciBib3VuZHM7Ci0KLSAgICAgICAgbGluZSA9IFB5Q29kZV9DaGVja0xpbmVOdW1iZXIoZnJhbWUtPmZfY29kZSwgZnJhbWUtPmZfbGFzdGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib3VuZHMpOwotICAgICAgICBpZiAobGluZSA+PSAwKSB7Ci0gICAgICAgICAgICBmcmFtZS0+Zl9saW5lbm8gPSBsaW5lOwotICAgICAgICAgICAgcmVzdWx0ID0gY2FsbF90cmFjZShmdW5jLCBvYmosIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVRyYWNlX0xJTkUsIFB5X05vbmUpOwotICAgICAgICB9CisgICAgICAgIGxpbmUgPSBfUHlDb2RlX0NoZWNrTGluZU51bWJlcihmcmFtZS0+Zl9jb2RlLCBmcmFtZS0+Zl9sYXN0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib3VuZHMpOwogICAgICAgICAqaW5zdHJfbGIgPSBib3VuZHMuYXBfbG93ZXI7CiAgICAgICAgICppbnN0cl91YiA9IGJvdW5kcy5hcF91cHBlcjsKICAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWUtPmZfbGFzdGkgPD0gKmluc3RyX3ByZXYpIHsKKyAgICAvKiBJZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBmYWxscyBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIG9yIGlmCisgICAgICAgaXQgcmVwcmVzZW50cyBhIGp1bXAgYmFja3dhcmRzLCB1cGRhdGUgdGhlIGZyYW1lJ3MgbGluZQorICAgICAgIG51bWJlciBhbmQgY2FsbCB0aGUgdHJhY2UgZnVuY3Rpb24uICovCisgICAgaWYgKGZyYW1lLT5mX2xhc3RpID09ICppbnN0cl9sYiB8fCBmcmFtZS0+Zl9sYXN0aSA8ICppbnN0cl9wcmV2KSB7CisgICAgICAgIGZyYW1lLT5mX2xpbmVubyA9IGxpbmU7CiAgICAgICAgIHJlc3VsdCA9IGNhbGxfdHJhY2UoZnVuYywgb2JqLCBmcmFtZSwgUHlUcmFjZV9MSU5FLCBQeV9Ob25lKTsKICAgICB9CiAgICAgKmluc3RyX3ByZXYgPSBmcmFtZS0+Zl9sYXN0aTsKQEAgLTM1NzgsMTggKzM4NTIsNyBAQAogCiAKIC8qIEV4dGVybmFsIGludGVyZmFjZSB0byBjYWxsIGFueSBjYWxsYWJsZSBvYmplY3QuCi0gICBUaGUgYXJnIG11c3QgYmUgYSB0dXBsZSBvciBOVUxMLiAqLwotCi0jdW5kZWYgUHlFdmFsX0NhbGxPYmplY3QKLS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBleHBvcnQgdGhpcyBpbnRlcmZhY2UgKi8KLQotUHlPYmplY3QgKgotUHlFdmFsX0NhbGxPYmplY3QoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpCi17Ci0gICAgcmV0dXJuIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzKGZ1bmMsIGFyZywgKFB5T2JqZWN0ICopTlVMTCk7Ci19Ci0jZGVmaW5lIFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsYXJnKSBcCi0gICAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMoZnVuYywgYXJnLCAoUHlPYmplY3QgKilOVUxMKQorICAgVGhlIGFyZyBtdXN0IGJlIGEgdHVwbGUgb3IgTlVMTC4gIFRoZSBrdyBtdXN0IGJlIGEgZGljdCBvciBOVUxMLiAqLwogCiBQeU9iamVjdCAqCiBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3KQpAQCAtNDQxNyw3ICs0NjgwLDkgQEAKICAgICBlbHNlIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkKICAgICAgICAgbG9jYWxzID0gZ2xvYmFsczsKICAgICBpZiAoIVB5U3RyaW5nX0NoZWNrKHByb2cpICYmCisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQogICAgICAgICAhUHlVbmljb2RlX0NoZWNrKHByb2cpICYmCisjZW5kaWYKICAgICAgICAgIVB5Q29kZV9DaGVjayhwcm9nKSAmJgogICAgICAgICAhUHlGaWxlX0NoZWNrKHByb2cpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCmRpZmYgLS1naXQgYS9QeXRob24vY29tcGlsZS5jIGIvUHl0aG9uL2NvbXBpbGUuYwppbmRleCA2NjUwNTA0Li45NDQwY2VjIDEwMDY0NAotLS0gYS9QeXRob24vY29tcGlsZS5jCisrKyBiL1B5dGhvbi9jb21waWxlLmMKQEAgLTM5LDYgKzM5LDEwIEBACiAjZGVmaW5lIERFRkFVTFRfQ09ERV9TSVpFIDEyOAogI2RlZmluZSBERUZBVUxUX0xOT1RBQl9TSVpFIDE2CiAKKyNkZWZpbmUgQ09NUF9HRU5FWFAgICAwCisjZGVmaW5lIENPTVBfU0VUQ09NUCAgMQorI2RlZmluZSBDT01QX0RJQ1RDT01QIDIKKwogc3RydWN0IGluc3RyIHsKICAgICB1bnNpZ25lZCBpX2phYnMgOiAxOwogICAgIHVuc2lnbmVkIGlfanJlbCA6IDE7CkBAIC0xMTEsNyArMTE1LDYgQEAKICAgICAgICBtZW1iZXJzLCB5b3UgY2FuIHJlYWNoIGFsbCBlYXJseSBhbGxvY2F0ZWQgYmxvY2tzLiAqLwogICAgIGJhc2ljYmxvY2sgKnVfYmxvY2tzOwogICAgIGJhc2ljYmxvY2sgKnVfY3VyYmxvY2s7IC8qIHBvaW50ZXIgdG8gY3VycmVudCBibG9jayAqLwotICAgIGludCB1X3RtcG5hbWU7ICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGVzIGZvciBsaXN0IGNvbXBzICovCiAKICAgICBpbnQgdV9uZmJsb2NrczsKICAgICBzdHJ1Y3QgZmJsb2NraW5mbyB1X2ZibG9ja1tDT19NQVhCTE9DS1NdOwpAQCAtMTQwLDcgKzE0Myw2IEBACiAKICAgICBzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqdTsgLyogY29tcGlsZXIgc3RhdGUgZm9yIGN1cnJlbnQgYmxvY2sgKi8KICAgICBQeU9iamVjdCAqY19zdGFjazsgICAgICAgICAgIC8qIFB5dGhvbiBsaXN0IGhvbGRpbmcgY29tcGlsZXJfdW5pdCBwdHJzICovCi0gICAgY2hhciAqY19lbmNvZGluZzsgICAgICAgICAgICAvKiBzb3VyY2UgZW5jb2RpbmcgKGEgYm9ycm93ZWQgcmVmZXJlbmNlKSAqLwogICAgIFB5QXJlbmEgKmNfYXJlbmE7ICAgICAgICAgICAgLyogcG9pbnRlciB0byBtZW1vcnkgYWxsb2NhdGlvbiBhcmVuYSAqLwogfTsKIApAQCAtMTc5LDYgKzE4MSw4IEBACiBzdGF0aWMgUHlDb2RlT2JqZWN0ICphc3NlbWJsZShzdHJ1Y3QgY29tcGlsZXIgKiwgaW50IGFkZE5vbmUpOwogc3RhdGljIFB5T2JqZWN0ICpfX2RvY19fOwogCisjZGVmaW5lIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklUICJjb21waWxlLmMgY29tcGlsZXIgdW5pdCIKKwogUHlPYmplY3QgKgogX1B5X01hbmdsZShQeU9iamVjdCAqcHJpdmF0ZW9iaiwgUHlPYmplY3QgKmlkZW50KQogewpAQCAtMjgyLDkgKzI4Niw2IEBACiAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICB9CiAKLSAgICAvKiBYWFggaW5pdGlhbGl6ZSB0byBOVUxMIGZvciBub3csIG5lZWQgdG8gaGFuZGxlICovCi0gICAgYy5jX2VuY29kaW5nID0gTlVMTDsKLQogICAgIGNvID0gY29tcGlsZXJfbW9kKCZjLCBtb2QpOwogCiAgZmluYWxseToKQEAgLTQ3Miw3ICs0NzMsNiBAQAogICAgIH0KIAogICAgIHUtPnVfYmxvY2tzID0gTlVMTDsKLSAgICB1LT51X3RtcG5hbWUgPSAwOwogICAgIHUtPnVfbmZibG9ja3MgPSAwOwogICAgIHUtPnVfZmlyc3RsaW5lbm8gPSBsaW5lbm87CiAgICAgdS0+dV9saW5lbm8gPSAwOwpAQCAtNDkyLDEzICs0OTIsMTMgQEAKIAogICAgIC8qIFB1c2ggdGhlIG9sZCBjb21waWxlcl91bml0IG9uIHRoZSBzdGFjay4gKi8KICAgICBpZiAoYy0+dSkgewotICAgICAgICBQeU9iamVjdCAqd3JhcHBlciA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cihjLT51LCBOVUxMKTsKLSAgICAgICAgaWYgKCF3cmFwcGVyIHx8IFB5TGlzdF9BcHBlbmQoYy0+Y19zdGFjaywgd3JhcHBlcikgPCAwKSB7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHdyYXBwZXIpOworICAgICAgICBQeU9iamVjdCAqY2Fwc3VsZSA9IFB5Q2Fwc3VsZV9OZXcoYy0+dSwgQ09NUElMRVJfQ0FQU1VMRV9OQU1FX0NPTVBJTEVSX1VOSVQsIE5VTEwpOworICAgICAgICBpZiAoIWNhcHN1bGUgfHwgUHlMaXN0X0FwcGVuZChjLT5jX3N0YWNrLCBjYXBzdWxlKSA8IDApIHsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoY2Fwc3VsZSk7CiAgICAgICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYod3JhcHBlcik7CisgICAgICAgIFB5X0RFQ1JFRihjYXBzdWxlKTsKICAgICAgICAgdS0+dV9wcml2YXRlID0gYy0+dS0+dV9wcml2YXRlOwogICAgICAgICBQeV9YSU5DUkVGKHUtPnVfcHJpdmF0ZSk7CiAgICAgfQpAQCAtNTE1LDE1ICs1MTUsMTUgQEAKIGNvbXBpbGVyX2V4aXRfc2NvcGUoc3RydWN0IGNvbXBpbGVyICpjKQogewogICAgIGludCBuOwotICAgIFB5T2JqZWN0ICp3cmFwcGVyOworICAgIFB5T2JqZWN0ICpjYXBzdWxlOwogCiAgICAgYy0+Y19uZXN0bGV2ZWwtLTsKICAgICBjb21waWxlcl91bml0X2ZyZWUoYy0+dSk7CiAgICAgLyogUmVzdG9yZSBjLT51IHRvIHRoZSBwYXJlbnQgdW5pdC4gKi8KICAgICBuID0gUHlMaXN0X0dFVF9TSVpFKGMtPmNfc3RhY2spIC0gMTsKICAgICBpZiAobiA+PSAwKSB7Ci0gICAgICAgIHdyYXBwZXIgPSBQeUxpc3RfR0VUX0lURU0oYy0+Y19zdGFjaywgbik7Ci0gICAgICAgIGMtPnUgPSAoc3RydWN0IGNvbXBpbGVyX3VuaXQgKilQeUNPYmplY3RfQXNWb2lkUHRyKHdyYXBwZXIpOworICAgICAgICBjYXBzdWxlID0gUHlMaXN0X0dFVF9JVEVNKGMtPmNfc3RhY2ssIG4pOworICAgICAgICBjLT51ID0gKHN0cnVjdCBjb21waWxlcl91bml0ICopUHlDYXBzdWxlX0dldFBvaW50ZXIoY2Fwc3VsZSwgQ09NUElMRVJfQ0FQU1VMRV9OQU1FX0NPTVBJTEVSX1VOSVQpOwogICAgICAgICBhc3NlcnQoYy0+dSk7CiAgICAgICAgIC8qIHdlIGFyZSBkZWxldGluZyBmcm9tIGEgbGlzdCBzbyB0aGlzIHJlYWxseSBzaG91bGRuJ3QgZmFpbCAqLwogICAgICAgICBpZiAoUHlTZXF1ZW5jZV9EZWxJdGVtKGMtPmNfc3RhY2ssIG4pIDwgMCkKQEAgLTUzNSwxOCArNTM1LDYgQEAKIAogfQogCi0vKiBBbGxvY2F0ZSBhIG5ldyAiYW5vbnltb3VzIiBsb2NhbCB2YXJpYWJsZS4KLSAgIFVzZWQgYnkgbGlzdCBjb21wcmVoZW5zaW9ucyBhbmQgd2l0aCBzdGF0ZW1lbnRzLgotKi8KLQotc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBpbGVyX25ld190bXBuYW1lKHN0cnVjdCBjb21waWxlciAqYykKLXsKLSAgICBjaGFyIHRtcG5hbWVbMjU2XTsKLSAgICBQeU9TX3NucHJpbnRmKHRtcG5hbWUsIHNpemVvZih0bXBuYW1lKSwgIl9bJWRdIiwgKytjLT51LT51X3RtcG5hbWUpOwotICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHRtcG5hbWUpOwotfQotCiAvKiBBbGxvY2F0ZSBhIG5ldyBibG9jayBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4KICAgIFJldHVybnMgTlVMTCBvbiBlcnJvci4KICovCkBAIC02OTIsNyArNjgwLDExIEBACiAgICAgICAgIGNhc2UgVU5BUllfSU5WRVJUOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICAgICAgY2FzZSBTRVRfQUREOgogICAgICAgICBjYXNlIExJU1RfQVBQRU5EOgorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGNhc2UgTUFQX0FERDoKICAgICAgICAgICAgIHJldHVybiAtMjsKIAogICAgICAgICBjYXNlIEJJTkFSWV9QT1dFUjoKQEAgLTcxMCwxMyArNzAyLDEzIEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKICAgICAgICAgY2FzZSBTTElDRSswOgotICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgY2FzZSBTTElDRSsxOgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgU0xJQ0UrMjoKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIFNMSUNFKzM6CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGNhc2UgU0xJQ0UrMjoKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgY2FzZSBTTElDRSszOgorICAgICAgICAgICAgcmV0dXJuIC0yOwogCiAgICAgICAgIGNhc2UgU1RPUkVfU0xJQ0UrMDoKICAgICAgICAgICAgIHJldHVybiAtMjsKQEAgLTc3OCw2ICs3NzAsOCBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIEJSRUFLX0xPT1A6CiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBTRVRVUF9XSVRIOgorICAgICAgICAgICAgcmV0dXJuIDQ7CiAgICAgICAgIGNhc2UgV0lUSF9DTEVBTlVQOgogICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBYWFggU29tZXRpbWVzIG1vcmUgKi8KICAgICAgICAgY2FzZSBMT0FEX0xPQ0FMUzoKQEAgLTc5NCw3ICs3ODgsOCBAQAogICAgICAgICBjYXNlIFBPUF9CTE9DSzoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBjYXNlIEVORF9GSU5BTExZOgotICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBvciAtMiBvciAtMyBpZiBleGNlcHRpb24gb2NjdXJyZWQgKi8KKyAgICAgICAgICAgIHJldHVybiAtMzsgLyogb3IgLTEgb3IgLTIgaWYgbm8gZXhjZXB0aW9uIG9jY3VycmVkIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybi9icmVhay9jb250aW51ZSAqLwogICAgICAgICBjYXNlIEJVSUxEX0NMQVNTOgogICAgICAgICAgICAgcmV0dXJuIC0yOwogCkBAIC04MDUsNyArODAwLDcgQEAKICAgICAgICAgY2FzZSBVTlBBQ0tfU0VRVUVOQ0U6CiAgICAgICAgICAgICByZXR1cm4gb3BhcmctMTsKICAgICAgICAgY2FzZSBGT1JfSVRFUjoKLSAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgcmV0dXJuIDE7IC8qIG9yIC0xLCBhdCBlbmQgb2YgaXRlcmF0b3IgKi8KIAogICAgICAgICBjYXNlIFNUT1JFX0FUVFI6CiAgICAgICAgICAgICByZXR1cm4gLTI7CkBAIC04MjMsNiArODE4LDcgQEAKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIEJVSUxEX1RVUExFOgogICAgICAgICBjYXNlIEJVSUxEX0xJU1Q6CisgICAgICAgIGNhc2UgQlVJTERfU0VUOgogICAgICAgICAgICAgcmV0dXJuIDEtb3Bhcmc7CiAgICAgICAgIGNhc2UgQlVJTERfTUFQOgogICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC04MzEsMjYgKzgyNywyOSBAQAogICAgICAgICBjYXNlIENPTVBBUkVfT1A6CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgSU1QT1JUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBJTVBPUlRfRlJPTToKICAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGNhc2UgSlVNUF9GT1JXQVJEOgotICAgICAgICBjYXNlIEpVTVBfSUZfRkFMU0U6Ci0gICAgICAgIGNhc2UgSlVNUF9JRl9UUlVFOgorICAgICAgICBjYXNlIEpVTVBfSUZfVFJVRV9PUl9QT1A6ICAvKiAtMSBpZiBqdW1wIG5vdCB0YWtlbiAqLworICAgICAgICBjYXNlIEpVTVBfSUZfRkFMU0VfT1JfUE9QOiAgLyogICIiICovCiAgICAgICAgIGNhc2UgSlVNUF9BQlNPTFVURToKICAgICAgICAgICAgIHJldHVybiAwOwogCisgICAgICAgIGNhc2UgUE9QX0pVTVBfSUZfRkFMU0U6CisgICAgICAgIGNhc2UgUE9QX0pVTVBfSUZfVFJVRToKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwogICAgICAgICBjYXNlIExPQURfR0xPQkFMOgogICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgY2FzZSBDT05USU5VRV9MT09QOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNhc2UgU0VUVVBfTE9PUDoKLSAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBjYXNlIFNFVFVQX0VYQ0VQVDoKICAgICAgICAgY2FzZSBTRVRVUF9GSU5BTExZOgotICAgICAgICAgICAgcmV0dXJuIDM7IC8qIGFjdHVhbGx5IHB1c2hlZCBieSBhbiBleGNlcHRpb24gKi8KKyAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGNhc2UgTE9BRF9GQVNUOgogICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC04NzksNyArODc4LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAKICAgICAgICAgY2FzZSBNQUtFX0NMT1NVUkU6Ci0gICAgICAgICAgICByZXR1cm4gLW9wYXJnOworICAgICAgICAgICAgcmV0dXJuIC1vcGFyZy0xOwogICAgICAgICBjYXNlIExPQURfQ0xPU1VSRToKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIExPQURfREVSRUY6CkBAIC0xMjQ2LDcgKzEyNDUsNyBAQAogICAgICAgICBjaGFyIGJ1ZlszNTBdOwogICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpIGluICVzXG4iCi0gICAgICAgICAgICAgICAgICAgICAgInN5bWJvbHM6ICVzXG5sb2NhbHM6ICVzXG5nbG9iYWxzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAic3ltYm9sczogJXNcbmxvY2FsczogJXNcbmdsb2JhbHM6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcobmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HKGMtPnUtPnVfbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X3N0ZS0+c3RlX2lkKSwKQEAgLTE0OTEsMTIgKzE0OTAsMTAgQEAKICAgICBpZiAobmV4dCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKICAgICBWSVNJVChjLCBleHByLCBlLT52LklmRXhwLnRlc3QpOwotICAgIEFERE9QX0pSRUwoYywgSlVNUF9JRl9GQUxTRSwgbmV4dCk7Ci0gICAgQURET1AoYywgUE9QX1RPUCk7CisgICAgQURET1BfSkFCUyhjLCBQT1BfSlVNUF9JRl9GQUxTRSwgbmV4dCk7CiAgICAgVklTSVQoYywgZXhwciwgZS0+di5JZkV4cC5ib2R5KTsKICAgICBBRERPUF9KUkVMKGMsIEpVTVBfRk9SV0FSRCwgZW5kKTsKICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBuZXh0KTsKLSAgICBBRERPUChjLCBQT1BfVE9QKTsKICAgICBWSVNJVChjLCBleHByLCBlLT52LklmRXhwLm9yZWxzZSk7CiAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgZW5kKTsKICAgICByZXR1cm4gMTsKQEAgLTE1MjQsOSArMTUyMSwxOSBAQAogICAgIC8qIHVucGFjayBuZXN0ZWQgYXJndW1lbnRzICovCiAgICAgY29tcGlsZXJfYXJndW1lbnRzKGMsIGFyZ3MpOwogCisgICAgLyogTWFrZSBOb25lIHRoZSBmaXJzdCBjb25zdGFudCwgc28gdGhlIGxhbWJkYSBjYW4ndCBoYXZlIGEKKyAgICAgICBkb2NzdHJpbmcuICovCisgICAgaWYgKGNvbXBpbGVyX2FkZF9vKGMsIGMtPnUtPnVfY29uc3RzLCBQeV9Ob25lKSA8IDApCisgICAgICAgIHJldHVybiAwOworCiAgICAgYy0+dS0+dV9hcmdjb3VudCA9IGFzZGxfc2VxX0xFTihhcmdzLT5hcmdzKTsKICAgICBWSVNJVF9JTl9TQ09QRShjLCBleHByLCBlLT52LkxhbWJkYS5ib2R5KTsKLSAgICBBRERPUF9JTl9TQ09QRShjLCBSRVRVUk5fVkFMVUUpOworICAgIGlmIChjLT51LT51X3N0ZS0+c3RlX2dlbmVyYXRvcikgeworICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBQT1BfVE9QKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIEFERE9QX0lOX1NDT1BFKGMsIFJFVFVSTl9WQUxVRSk7CisgICAgfQogICAgIGNvID0gYXNzZW1ibGUoYywgMSk7CiAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKICAgICBpZiAoY28gPT0gTlVMTCkKQEAgLTE1ODQsOSArMTU5MSw2IEBACiAgICAgZW5kID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIGlmIChlbmQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbmV4dCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKLSAgICBpZiAobmV4dCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKIAogICAgIGNvbnN0YW50ID0gZXhwcl9jb25zdGFudChzLT52LklmLnRlc3QpOwogICAgIC8qIGNvbnN0YW50ID0gMDogImlmIDAiCkBAIC0xNTk4LDE1ICsxNjAyLDIxIEBACiAgICAgfSBlbHNlIGlmIChjb25zdGFudCA9PSAxKSB7CiAgICAgICAgIFZJU0lUX1NFUShjLCBzdG10LCBzLT52LklmLmJvZHkpOwogICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzLT52LklmLm9yZWxzZSkgeworICAgICAgICAgICAgbmV4dCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKKyAgICAgICAgICAgIGlmIChuZXh0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV4dCA9IGVuZDsKICAgICAgICAgVklTSVQoYywgZXhwciwgcy0+di5JZi50ZXN0KTsKLSAgICAgICAgQURET1BfSlJFTChjLCBKVU1QX0lGX0ZBTFNFLCBuZXh0KTsKLSAgICAgICAgQURET1AoYywgUE9QX1RPUCk7CisgICAgICAgIEFERE9QX0pBQlMoYywgUE9QX0pVTVBfSUZfRkFMU0UsIG5leHQpOwogICAgICAgICBWSVNJVF9TRVEoYywgc3RtdCwgcy0+di5JZi5ib2R5KTsKICAgICAgICAgQURET1BfSlJFTChjLCBKVU1QX0ZPUldBUkQsIGVuZCk7Ci0gICAgICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIG5leHQpOwotICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKLSAgICAgICAgaWYgKHMtPnYuSWYub3JlbHNlKQorICAgICAgICBpZiAocy0+di5JZi5vcmVsc2UpIHsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIG5leHQpOwogICAgICAgICAgICAgVklTSVRfU0VRKGMsIHN0bXQsIHMtPnYuSWYub3JlbHNlKTsKKyAgICAgICAgfQogICAgIH0KICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBlbmQpOwogICAgIHJldHVybiAxOwpAQCAtMTYyOCw5ICsxNjM4LDYgQEAKICAgICBWSVNJVChjLCBleHByLCBzLT52LkZvci5pdGVyKTsKICAgICBBRERPUChjLCBHRVRfSVRFUik7CiAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgc3RhcnQpOwotICAgIC8qIGZvciBleHByZXNzaW9ucyBtdXN0IGJlIHRyYWNlZCBvbiBlYWNoIGl0ZXJhdGlvbiwKLSAgICAgICBzbyB3ZSBuZWVkIHRvIHNldCBhbiBleHRyYSBsaW5lIG51bWJlci4gKi8KLSAgICBjLT51LT51X2xpbmVub19zZXQgPSBmYWxzZTsKICAgICBBRERPUF9KUkVMKGMsIEZPUl9JVEVSLCBjbGVhbnVwKTsKICAgICBWSVNJVChjLCBleHByLCBzLT52LkZvci50YXJnZXQpOwogICAgIFZJU0lUX1NFUShjLCBzdG10LCBzLT52LkZvci5ib2R5KTsKQEAgLTE2NzYsMTIgKzE2ODMsOCBAQAogICAgIGlmICghY29tcGlsZXJfcHVzaF9mYmxvY2soYywgTE9PUCwgbG9vcCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChjb25zdGFudCA9PSAtMSkgewotICAgICAgICAvKiB3aGlsZSBleHByZXNzaW9ucyBtdXN0IGJlIHRyYWNlZCBvbiBlYWNoIGl0ZXJhdGlvbiwKLSAgICAgICAgICAgc28gd2UgbmVlZCB0byBzZXQgYW4gZXh0cmEgbGluZSBudW1iZXIuICovCi0gICAgICAgIGMtPnUtPnVfbGluZW5vX3NldCA9IGZhbHNlOwogICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LldoaWxlLnRlc3QpOwotICAgICAgICBBRERPUF9KUkVMKGMsIEpVTVBfSUZfRkFMU0UsIGFuY2hvcik7Ci0gICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOworICAgICAgICBBRERPUF9KQUJTKGMsIFBPUF9KVU1QX0lGX0ZBTFNFLCBhbmNob3IpOwogICAgIH0KICAgICBWSVNJVF9TRVEoYywgc3RtdCwgcy0+di5XaGlsZS5ib2R5KTsKICAgICBBRERPUF9KQUJTKGMsIEpVTVBfQUJTT0xVVEUsIGxvb3ApOwpAQCAtMTY5Miw3ICsxNjk1LDYgQEAKIAogICAgIGlmIChjb25zdGFudCA9PSAtMSkgewogICAgICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBhbmNob3IpOwotICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKICAgICAgICAgQURET1AoYywgUE9QX0JMT0NLKTsKICAgICB9CiAgICAgY29tcGlsZXJfcG9wX2ZibG9jayhjLCBMT09QLCBsb29wKTsKQEAgLTE4MTMsMjAgKzE4MTUsMTcgQEAKICAgIFt0YiwgdmFsLCBleGNdICAgICAgIEwxOiAgICAgRFVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICBbdGIsIHZhbCwgZXhjLCBleGNdICAgICAgICAgIDxldmFsdWF0ZSBFMT4gICAgICAgICAgICAgICAgICAgKQogICAgW3RiLCB2YWwsIGV4YywgZXhjLCBFMV0gICAgICBDT01QQVJFX09QICAgICAgRVhDX01BVENIICAgICAgICkgb25seSBpZiBFMQotICAgW3RiLCB2YWwsIGV4YywgMS1vci0wXSAgICAgICBKVU1QX0lGX0ZBTFNFICAgTDIgICAgICAgICAgICAgICkKLSAgIFt0YiwgdmFsLCBleGMsIDFdICAgICAgICAgICAgUE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICBbdGIsIHZhbCwgZXhjLCAxLW9yLTBdICAgICAgIFBPUF9KVU1QX0lGX0ZBTFNFICAgICAgIEwyICAgICAgKQogICAgW3RiLCB2YWwsIGV4Y10gICAgICAgICAgICAgICBQT1AKICAgIFt0YiwgdmFsXSAgICAgICAgICAgICAgICAgICAgPGFzc2lnbiB0byBWMT4gIChvciBQT1AgaWYgbm8gVjEpCiAgICBbdGJdICAgICAgICAgICAgICAgICAgICAgICAgIFBPUAogICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBmb3IgUzE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpVTVBfRk9SV0FSRCAgICBMMAogCi0gICBbdGIsIHZhbCwgZXhjLCAwXSAgICBMMjogICAgIFBPUAotICAgW3RiLCB2YWwsIGV4Y10gICAgICAgICAgICAgICBEVVAKKyAgIFt0YiwgdmFsLCBleGNdICAgICAgIEwyOiAgICAgRFVQCiAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLmV0Yy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLSAgIFt0YiwgdmFsLCBleGMsIDBdICAgIExuKzE6ICAgUE9QCi0gICBbdGIsIHZhbCwgZXhjXSAgICAgICAgICAgICAgIEVORF9GSU5BTExZICAgICAjIHJlLXJhaXNlIGV4Y2VwdGlvbgorICAgW3RiLCB2YWwsIGV4Y10gICAgICAgTG4rMTogICBFTkRfRklOQUxMWSAgICAgIyByZS1yYWlzZSBleGNlcHRpb24KIAogICAgW10gICAgICAgICAgICAgICAgICAgTDA6ICAgICA8bmV4dCBzdGF0ZW1lbnQ+CiAKQEAgLTE4NjgsOCArMTg2Nyw3IEBACiAgICAgICAgICAgICBBRERPUChjLCBEVVBfVE9QKTsKICAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIGhhbmRsZXItPnYuRXhjZXB0SGFuZGxlci50eXBlKTsKICAgICAgICAgICAgIEFERE9QX0koYywgQ09NUEFSRV9PUCwgUHlDbXBfRVhDX01BVENIKTsKLSAgICAgICAgICAgIEFERE9QX0pSRUwoYywgSlVNUF9JRl9GQUxTRSwgZXhjZXB0KTsKLSAgICAgICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOworICAgICAgICAgICAgQURET1BfSkFCUyhjLCBQT1BfSlVNUF9JRl9GQUxTRSwgZXhjZXB0KTsKICAgICAgICAgfQogICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKICAgICAgICAgaWYgKGhhbmRsZXItPnYuRXhjZXB0SGFuZGxlci5uYW1lKSB7CkBAIC0xODgyLDggKzE4ODAsNiBAQAogICAgICAgICBWSVNJVF9TRVEoYywgc3RtdCwgaGFuZGxlci0+di5FeGNlcHRIYW5kbGVyLmJvZHkpOwogICAgICAgICBBRERPUF9KUkVMKGMsIEpVTVBfRk9SV0FSRCwgZW5kKTsKICAgICAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgZXhjZXB0KTsKLSAgICAgICAgaWYgKGhhbmRsZXItPnYuRXhjZXB0SGFuZGxlci50eXBlKQotICAgICAgICAgICAgQURET1AoYywgUE9QX1RPUCk7CiAgICAgfQogICAgIEFERE9QKGMsIEVORF9GSU5BTExZKTsKICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBvcmVsc2UpOwpAQCAtMTk4Miw2ICsxOTc4LDEzIEBACiAKICAgICBQeU9iamVjdCAqbmFtZXMgPSBQeVR1cGxlX05ldyhuKTsKICAgICBQeU9iamVjdCAqbGV2ZWw7CisgICAgc3RhdGljIFB5T2JqZWN0ICplbXB0eV9zdHJpbmc7CisKKyAgICBpZiAoIWVtcHR5X3N0cmluZykgeworICAgICAgICBlbXB0eV9zdHJpbmcgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCIiKTsKKyAgICAgICAgaWYgKCFlbXB0eV9zdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICBpZiAoIW5hbWVzKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwMDQsMjMgKzIwMDcsMjQgQEAKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShuYW1lcywgaSwgYWxpYXMtPm5hbWUpOwogICAgIH0KIAotICAgIGlmIChzLT5saW5lbm8gPiBjLT5jX2Z1dHVyZS0+ZmZfbGluZW5vKSB7Ci0gICAgICAgIGlmICghc3RyY21wKFB5U3RyaW5nX0FTX1NUUklORyhzLT52LkltcG9ydEZyb20ubW9kdWxlKSwKLSAgICAgICAgICAgICAgICAgICAgIl9fZnV0dXJlX18iKSkgewotICAgICAgICAgICAgUHlfREVDUkVGKGxldmVsKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lcyk7Ci0gICAgICAgICAgICByZXR1cm4gY29tcGlsZXJfZXJyb3IoYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb20gX19mdXR1cmVfXyBpbXBvcnRzIG11c3Qgb2NjdXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSIpOwotCi0gICAgICAgIH0KKyAgICBpZiAocy0+bGluZW5vID4gYy0+Y19mdXR1cmUtPmZmX2xpbmVubyAmJiBzLT52LkltcG9ydEZyb20ubW9kdWxlICYmCisgICAgICAgICFzdHJjbXAoUHlTdHJpbmdfQVNfU1RSSU5HKHMtPnYuSW1wb3J0RnJvbS5tb2R1bGUpLCAiX19mdXR1cmVfXyIpKSB7CisgICAgICAgIFB5X0RFQ1JFRihsZXZlbCk7CisgICAgICAgIFB5X0RFQ1JFRihuYW1lcyk7CisgICAgICAgIHJldHVybiBjb21waWxlcl9lcnJvcihjLCAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydHMgbXVzdCBvY2N1ciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSIpOwogICAgIH0KIAogICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgbGV2ZWwsIGNvbnN0cyk7CiAgICAgUHlfREVDUkVGKGxldmVsKTsKICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIG5hbWVzLCBjb25zdHMpOwogICAgIFB5X0RFQ1JFRihuYW1lcyk7Ci0gICAgQURET1BfTkFNRShjLCBJTVBPUlRfTkFNRSwgcy0+di5JbXBvcnRGcm9tLm1vZHVsZSwgbmFtZXMpOworICAgIGlmIChzLT52LkltcG9ydEZyb20ubW9kdWxlKSB7CisgICAgICAgIEFERE9QX05BTUUoYywgSU1QT1JUX05BTUUsIHMtPnYuSW1wb3J0RnJvbS5tb2R1bGUsIG5hbWVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIEFERE9QX05BTUUoYywgSU1QT1JUX05BTUUsIGVtcHR5X3N0cmluZywgbmFtZXMpOworICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgIGFsaWFzX3R5IGFsaWFzID0gKGFsaWFzX3R5KWFzZGxfc2VxX0dFVChzLT52LkltcG9ydEZyb20ubmFtZXMsIGkpOwogICAgICAgICBpZGVudGlmaWVyIHN0b3JlX25hbWU7CkBAIC0yMDcxLDggKzIwNzUsNyBAQAogICAgIGVuZCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBpZiAoZW5kID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIEFERE9QX0pSRUwoYywgSlVNUF9JRl9UUlVFLCBlbmQpOwotICAgIEFERE9QKGMsIFBPUF9UT1ApOworICAgIEFERE9QX0pBQlMoYywgUE9QX0pVTVBfSUZfVFJVRSwgZW5kKTsKICAgICBBRERPUF9PKGMsIExPQURfR0xPQkFMLCBhc3NlcnRpb25fZXJyb3IsIG5hbWVzKTsKICAgICBpZiAocy0+di5Bc3NlcnQubXNnKSB7CiAgICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuQXNzZXJ0Lm1zZyk7CkBAIC0yMDgyLDcgKzIwODUsNiBAQAogICAgICAgICBBRERPUF9JKGMsIFJBSVNFX1ZBUkFSR1MsIDEpOwogICAgIH0KICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBlbmQpOwotICAgIEFERE9QKGMsIFBPUF9UT1ApOwogICAgIHJldHVybiAxOwogfQogCkBAIC0yMzM2LDEyICsyMzM4LDYgQEAKICAgICBQeU9iamVjdCAqbWFuZ2xlZDsKICAgICAvKiBYWFggQXVnU3RvcmUgaXNuJ3QgdXNlZCBhbnl3aGVyZSEgKi8KIAotICAgIC8qIEZpcnN0IGNoZWNrIGZvciBhc3NpZ25tZW50IHRvIF9fZGVidWdfXy4gUGFyYW0/ICovCi0gICAgaWYgKChjdHggPT0gU3RvcmUgfHwgY3R4ID09IEF1Z1N0b3JlIHx8IGN0eCA9PSBEZWwpCi0gICAgICAgICYmICFzdHJjbXAoUHlTdHJpbmdfQVNfU1RSSU5HKG5hbWUpLCAiX19kZWJ1Z19fIikpIHsKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2Vycm9yKGMsICJjYW4gbm90IGFzc2lnbiB0byBfX2RlYnVnX18iKTsKLSAgICB9Ci0KICAgICBtYW5nbGVkID0gX1B5X01hbmdsZShjLT51LT51X3ByaXZhdGUsIG5hbWUpOwogICAgIGlmICghbWFuZ2xlZCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNDY2LDkgKzI0NjIsOSBAQAogCiAgICAgYXNzZXJ0KGUtPmtpbmQgPT0gQm9vbE9wX2tpbmQpOwogICAgIGlmIChlLT52LkJvb2xPcC5vcCA9PSBBbmQpCi0gICAgICAgIGp1bXBpID0gSlVNUF9JRl9GQUxTRTsKKyAgICAgICAganVtcGkgPSBKVU1QX0lGX0ZBTFNFX09SX1BPUDsKICAgICBlbHNlCi0gICAgICAgIGp1bXBpID0gSlVNUF9JRl9UUlVFOworICAgICAgICBqdW1waSA9IEpVTVBfSUZfVFJVRV9PUl9QT1A7CiAgICAgZW5kID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIGlmIChlbmQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNDc3LDggKzI0NzMsNyBAQAogICAgIGFzc2VydChuID49IDApOwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgVklTSVQoYywgZXhwciwgKGV4cHJfdHkpYXNkbF9zZXFfR0VUKHMsIGkpKTsKLSAgICAgICAgQURET1BfSlJFTChjLCBqdW1waSwgZW5kKTsKLSAgICAgICAgQURET1AoYywgUE9QX1RPUCkKKyAgICAgICAgQURET1BfSkFCUyhjLCBqdW1waSwgZW5kKTsKICAgICB9CiAgICAgVklTSVQoYywgZXhwciwgKGV4cHJfdHkpYXNkbF9zZXFfR0VUKHMsIG4pKTsKICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBlbmQpOwpAQCAtMjUzNiw5ICsyNTMxLDggQEAKICAgICAgICAgQURET1BfSShjLCBDT01QQVJFX09QLAogICAgICAgICAgICAgY21wb3AoKGNtcG9wX3R5KShhc2RsX3NlcV9HRVQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuQ29tcGFyZS5vcHMsIGkgLSAxKSkpKTsKLSAgICAgICAgQURET1BfSlJFTChjLCBKVU1QX0lGX0ZBTFNFLCBjbGVhbnVwKTsKKyAgICAgICAgQURET1BfSkFCUyhjLCBKVU1QX0lGX0ZBTFNFX09SX1BPUCwgY2xlYW51cCk7CiAgICAgICAgIE5FWFRfQkxPQ0soYyk7Ci0gICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOwogICAgICAgICBpZiAoaSA8IChuIC0gMSkpCiAgICAgICAgICAgICBWSVNJVChjLCBleHByLAogICAgICAgICAgICAgICAgIChleHByX3R5KWFzZGxfc2VxX0dFVChlLT52LkNvbXBhcmUuY29tcGFyYXRvcnMsIGkpKTsKQEAgLTI1OTcsOSArMjU5MSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNvbXBpbGVyX2xpc3Rjb21wX2dlbmVyYXRvcihzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5T2JqZWN0ICp0bXBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICpnZW5lcmF0b3JzLCBpbnQgZ2VuX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgZWx0KQorY29tcGlsZXJfbGlzdGNvbXBfZ2VuZXJhdG9yKHN0cnVjdCBjb21waWxlciAqYywgYXNkbF9zZXEgKmdlbmVyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdlbl9pbmRleCwgZXhwcl90eSBlbHQpCiB7CiAgICAgLyogZ2VuZXJhdGUgY29kZSBmb3IgdGhlIGl0ZXJhdG9yLCB0aGVuIGVhY2ggb2YgdGhlIGlmcywKICAgICAgICBhbmQgdGhlbiB3cml0ZSB0byB0aGUgZWxlbWVudCAqLwpAQCAtMjYzMCwzNyArMjYyMywyNCBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgZXhwcl90eSBlID0gKGV4cHJfdHkpYXNkbF9zZXFfR0VUKGwtPmlmcywgaSk7CiAgICAgICAgIFZJU0lUKGMsIGV4cHIsIGUpOwotICAgICAgICBBRERPUF9KUkVMKGMsIEpVTVBfSUZfRkFMU0UsIGlmX2NsZWFudXApOworICAgICAgICBBRERPUF9KQUJTKGMsIFBPUF9KVU1QX0lGX0ZBTFNFLCBpZl9jbGVhbnVwKTsKICAgICAgICAgTkVYVF9CTE9DSyhjKTsKLSAgICAgICAgQURET1AoYywgUE9QX1RPUCk7CiAgICAgfQogCiAgICAgaWYgKCsrZ2VuX2luZGV4IDwgYXNkbF9zZXFfTEVOKGdlbmVyYXRvcnMpKQotICAgICAgICBpZiAoIWNvbXBpbGVyX2xpc3Rjb21wX2dlbmVyYXRvcihjLCB0bXBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JzLCBnZW5faW5kZXgsIGVsdCkpCisgICAgICAgIGlmICghY29tcGlsZXJfbGlzdGNvbXBfZ2VuZXJhdG9yKGMsIGdlbmVyYXRvcnMsIGdlbl9pbmRleCwgZWx0KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvKiBvbmx5IGFwcGVuZCBhZnRlciB0aGUgbGFzdCBmb3IgZ2VuZXJhdG9yICovCiAgICAgaWYgKGdlbl9pbmRleCA+PSBhc2RsX3NlcV9MRU4oZ2VuZXJhdG9ycykpIHsKLSAgICAgICAgaWYgKCFjb21waWxlcl9uYW1lb3AoYywgdG1wbmFtZSwgTG9hZCkpCi0gICAgICAgIHJldHVybiAwOwogICAgICAgICBWSVNJVChjLCBleHByLCBlbHQpOwotICAgICAgICBBRERPUChjLCBMSVNUX0FQUEVORCk7CisgICAgICAgIEFERE9QX0koYywgTElTVF9BUFBFTkQsIGdlbl9pbmRleCsxKTsKIAogICAgICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBza2lwKTsKICAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBBRERPUF9JKGMsIEpVTVBfRk9SV0FSRCwgMSk7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAgICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBpZl9jbGVhbnVwKTsKLSAgICAgICAgQURET1AoYywgUE9QX1RPUCk7Ci0gICAgfQorICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIGlmX2NsZWFudXApOwogICAgIEFERE9QX0pBQlMoYywgSlVNUF9BQlNPTFVURSwgc3RhcnQpOwogICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIGFuY2hvcik7Ci0gICAgLyogZGVsZXRlIHRoZSB0ZW1wb3JhcnkgbGlzdCBuYW1lIGFkZGVkIHRvIGxvY2FscyAqLwotICAgIGlmIChnZW5faW5kZXggPT0gMSkKLSAgICAgICAgaWYgKCFjb21waWxlcl9uYW1lb3AoYywgdG1wbmFtZSwgRGVsKSkKLSAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gMTsKIH0KQEAgLTI2NjgsNDkgKzI2NDgsNDkgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX2xpc3Rjb21wKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIGlkZW50aWZpZXIgdG1wOwotICAgIGludCByYyA9IDA7Ci0gICAgYXNkbF9zZXEgKmdlbmVyYXRvcnMgPSBlLT52Lkxpc3RDb21wLmdlbmVyYXRvcnM7Ci0KICAgICBhc3NlcnQoZS0+a2luZCA9PSBMaXN0Q29tcF9raW5kKTsKLSAgICB0bXAgPSBjb21waWxlcl9uZXdfdG1wbmFtZShjKTsKLSAgICBpZiAoIXRtcCkKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgQURET1BfSShjLCBCVUlMRF9MSVNULCAwKTsKLSAgICBBRERPUChjLCBEVVBfVE9QKTsKLSAgICBpZiAoY29tcGlsZXJfbmFtZW9wKGMsIHRtcCwgU3RvcmUpKQotICAgICAgICByYyA9IGNvbXBpbGVyX2xpc3Rjb21wX2dlbmVyYXRvcihjLCB0bXAsIGdlbmVyYXRvcnMsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuTGlzdENvbXAuZWx0KTsKLSAgICBQeV9ERUNSRUYodG1wKTsKLSAgICByZXR1cm4gcmM7CisgICAgcmV0dXJuIGNvbXBpbGVyX2xpc3Rjb21wX2dlbmVyYXRvcihjLCBlLT52Lkxpc3RDb21wLmdlbmVyYXRvcnMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52Lkxpc3RDb21wLmVsdCk7CiB9CiAKKy8qIERpY3QgYW5kIHNldCBjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIHdvcmsgYnkgY3JlYXRpbmcgYQorICAgbmVzdGVkIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBpdGVyYXRpb24uIFRoaXMgbWVhbnMgdGhhdCB0aGUKKyAgIGl0ZXJhdGlvbiB2YXJpYWJsZXMgZG9uJ3QgbGVhayBpbnRvIHRoZSBjdXJyZW50IHNjb3BlLgorICAgVGhlIGRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBpdHMgZGVmaW5pdGlvbiwgd2l0aCB0aGUKKyAgIHJlc3VsdCBvZiB0aGF0IGNhbGwgYmVpbmcgdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbi4KKyAgIFRoZSBMQy9TQyB2ZXJzaW9uIHJldHVybnMgdGhlIHBvcHVsYXRlZCBjb250YWluZXIsIHdoaWxlIHRoZSBHRSB2ZXJzaW9uIGlzCisgICBmbGFnZ2VkIGluIHN5bXRhYmxlLmMgYXMgYSBnZW5lcmF0b3IsIHNvIGl0IHJldHVybnMgdGhlIGdlbmVyYXRvciBvYmplY3QKKyAgIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgIFRoaXMgY29kZSAqa25vd3MqIHRoYXQgdGhlIGxvb3AgY2Fubm90IGNvbnRhaW4gYnJlYWssIGNvbnRpbnVlLCBvciByZXR1cm4sCisgICBzbyBpdCBjaGVhdHMgYW5kIHNraXBzIHRoZSBTRVRVUF9MT09QL1BPUF9CTE9DSyBzdGVwcyB1c2VkIGluIG5vcm1hbCBsb29wcy4KKworICAgUG9zc2libGUgY2xlYW51cHM6CisgICAgLSBpdGVyYXRlIG92ZXIgdGhlIGdlbmVyYXRvciBzZXF1ZW5jZSBpbnN0ZWFkIG9mIHVzaW5nIHJlY3Vyc2lvbgorKi8KKwogc3RhdGljIGludAotY29tcGlsZXJfZ2VuZXhwX2dlbmVyYXRvcihzdHJ1Y3QgY29tcGlsZXIgKmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICpnZW5lcmF0b3JzLCBpbnQgZ2VuX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGVsdCkKK2NvbXBpbGVyX2NvbXByZWhlbnNpb25fZ2VuZXJhdG9yKHN0cnVjdCBjb21waWxlciAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICpnZW5lcmF0b3JzLCBpbnQgZ2VuX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBlbHQsIGV4cHJfdHkgdmFsLCBpbnQgdHlwZSkKIHsKICAgICAvKiBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgaXRlcmF0b3IsIHRoZW4gZWFjaCBvZiB0aGUgaWZzLAogICAgICAgIGFuZCB0aGVuIHdyaXRlIHRvIHRoZSBlbGVtZW50ICovCiAKLSAgICBjb21wcmVoZW5zaW9uX3R5IGdlOwotICAgIGJhc2ljYmxvY2sgKnN0YXJ0LCAqYW5jaG9yLCAqc2tpcCwgKmlmX2NsZWFudXAsICplbmQ7CisgICAgY29tcHJlaGVuc2lvbl90eSBnZW47CisgICAgYmFzaWNibG9jayAqc3RhcnQsICphbmNob3IsICpza2lwLCAqaWZfY2xlYW51cDsKICAgICBpbnQgaSwgbjsKIAogICAgIHN0YXJ0ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIHNraXAgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CiAgICAgaWZfY2xlYW51cCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBhbmNob3IgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7Ci0gICAgZW5kID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogCiAgICAgaWYgKHN0YXJ0ID09IE5VTEwgfHwgc2tpcCA9PSBOVUxMIHx8IGlmX2NsZWFudXAgPT0gTlVMTCB8fAotICAgICAgICBhbmNob3IgPT0gTlVMTCB8fCBlbmQgPT0gTlVMTCkKKyAgICAgICAgYW5jaG9yID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgZ2UgPSAoY29tcHJlaGVuc2lvbl90eSlhc2RsX3NlcV9HRVQoZ2VuZXJhdG9ycywgZ2VuX2luZGV4KTsKLSAgICBBRERPUF9KUkVMKGMsIFNFVFVQX0xPT1AsIGVuZCk7Ci0gICAgaWYgKCFjb21waWxlcl9wdXNoX2ZibG9jayhjLCBMT09QLCBzdGFydCkpCi0gICAgICAgIHJldHVybiAwOworICAgIGdlbiA9IChjb21wcmVoZW5zaW9uX3R5KWFzZGxfc2VxX0dFVChnZW5lcmF0b3JzLCBnZW5faW5kZXgpOwogCiAgICAgaWYgKGdlbl9pbmRleCA9PSAwKSB7CiAgICAgICAgIC8qIFJlY2VpdmUgb3V0ZXJtb3N0IGl0ZXIgYXMgYW4gaW1wbGljaXQgYXJndW1lbnQgKi8KQEAgLTI3MTksODQgKzI2OTksMTY0IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiBTdWItaXRlciAtIGNhbGN1bGF0ZSBvbiB0aGUgZmx5ICovCi0gICAgICAgIFZJU0lUKGMsIGV4cHIsIGdlLT5pdGVyKTsKKyAgICAgICAgVklTSVQoYywgZXhwciwgZ2VuLT5pdGVyKTsKICAgICAgICAgQURET1AoYywgR0VUX0lURVIpOwogICAgIH0KICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBzdGFydCk7CiAgICAgQURET1BfSlJFTChjLCBGT1JfSVRFUiwgYW5jaG9yKTsKICAgICBORVhUX0JMT0NLKGMpOwotICAgIFZJU0lUKGMsIGV4cHIsIGdlLT50YXJnZXQpOworICAgIFZJU0lUKGMsIGV4cHIsIGdlbi0+dGFyZ2V0KTsKIAogICAgIC8qIFhYWCB0aGlzIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAuLi5hIGxvdCEgKi8KLSAgICBuID0gYXNkbF9zZXFfTEVOKGdlLT5pZnMpOworICAgIG4gPSBhc2RsX3NlcV9MRU4oZ2VuLT5pZnMpOwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgZXhwcl90eSBlID0gKGV4cHJfdHkpYXNkbF9zZXFfR0VUKGdlLT5pZnMsIGkpOworICAgICAgICBleHByX3R5IGUgPSAoZXhwcl90eSlhc2RsX3NlcV9HRVQoZ2VuLT5pZnMsIGkpOwogICAgICAgICBWSVNJVChjLCBleHByLCBlKTsKLSAgICAgICAgQURET1BfSlJFTChjLCBKVU1QX0lGX0ZBTFNFLCBpZl9jbGVhbnVwKTsKKyAgICAgICAgQURET1BfSkFCUyhjLCBQT1BfSlVNUF9JRl9GQUxTRSwgaWZfY2xlYW51cCk7CiAgICAgICAgIE5FWFRfQkxPQ0soYyk7Ci0gICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOwogICAgIH0KIAogICAgIGlmICgrK2dlbl9pbmRleCA8IGFzZGxfc2VxX0xFTihnZW5lcmF0b3JzKSkKLSAgICAgICAgaWYgKCFjb21waWxlcl9nZW5leHBfZ2VuZXJhdG9yKGMsIGdlbmVyYXRvcnMsIGdlbl9pbmRleCwgZWx0KSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoIWNvbXBpbGVyX2NvbXByZWhlbnNpb25fZ2VuZXJhdG9yKGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9ycywgZ2VuX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsdCwgdmFsLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvKiBvbmx5IGFwcGVuZCBhZnRlciB0aGUgbGFzdCAnZm9yJyBnZW5lcmF0b3IgKi8KKyAgICAvKiBvbmx5IGFwcGVuZCBhZnRlciB0aGUgbGFzdCBmb3IgZ2VuZXJhdG9yICovCiAgICAgaWYgKGdlbl9pbmRleCA+PSBhc2RsX3NlcV9MRU4oZ2VuZXJhdG9ycykpIHsKLSAgICAgICAgVklTSVQoYywgZXhwciwgZWx0KTsKLSAgICAgICAgQURET1AoYywgWUlFTERfVkFMVUUpOwotICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKKyAgICAgICAgLyogY29tcHJlaGVuc2lvbiBzcGVjaWZpYyBjb2RlICovCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIENPTVBfR0VORVhQOgorICAgICAgICAgICAgVklTSVQoYywgZXhwciwgZWx0KTsKKyAgICAgICAgICAgIEFERE9QKGMsIFlJRUxEX1ZBTFVFKTsKKyAgICAgICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09NUF9TRVRDT01QOgorICAgICAgICAgICAgVklTSVQoYywgZXhwciwgZWx0KTsKKyAgICAgICAgICAgIEFERE9QX0koYywgU0VUX0FERCwgZ2VuX2luZGV4ICsgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDT01QX0RJQ1RDT01QOgorICAgICAgICAgICAgLyogV2l0aCAnZFtrXSA9IHYnLCB2IGlzIGV2YWx1YXRlZCBiZWZvcmUgaywgc28gd2UgZG8KKyAgICAgICAgICAgICAgIHRoZSBzYW1lLiAqLworICAgICAgICAgICAgVklTSVQoYywgZXhwciwgdmFsKTsKKyAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIGVsdCk7CisgICAgICAgICAgICBBRERPUF9JKGMsIE1BUF9BREQsIGdlbl9pbmRleCArIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogCiAgICAgICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIHNraXApOwogICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIEFERE9QX0koYywgSlVNUF9GT1JXQVJELCAxKTsKLSAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIGlmX2NsZWFudXApOwotCi0gICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOwotICAgIH0KKyAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBpZl9jbGVhbnVwKTsKICAgICBBRERPUF9KQUJTKGMsIEpVTVBfQUJTT0xVVEUsIHN0YXJ0KTsKICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBhbmNob3IpOwotICAgIEFERE9QKGMsIFBPUF9CTE9DSyk7Ci0gICAgY29tcGlsZXJfcG9wX2ZibG9jayhjLCBMT09QLCBzdGFydCk7Ci0gICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgZW5kKTsKIAogICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgaW50Citjb21waWxlcl9jb21wcmVoZW5zaW9uKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlLCBpbnQgdHlwZSwgaWRlbnRpZmllciBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqZ2VuZXJhdG9ycywgZXhwcl90eSBlbHQsIGV4cHJfdHkgdmFsKQoreworICAgIFB5Q29kZU9iamVjdCAqY28gPSBOVUxMOworICAgIGV4cHJfdHkgb3V0ZXJtb3N0X2l0ZXI7CisKKyAgICBvdXRlcm1vc3RfaXRlciA9ICgoY29tcHJlaGVuc2lvbl90eSkKKyAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9HRVQoZ2VuZXJhdG9ycywgMCkpLT5pdGVyOworCisgICAgaWYgKCFjb21waWxlcl9lbnRlcl9zY29wZShjLCBuYW1lLCAodm9pZCAqKWUsIGUtPmxpbmVubykpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBpZiAodHlwZSAhPSBDT01QX0dFTkVYUCkgeworICAgICAgICBpbnQgb3A7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIENPTVBfU0VUQ09NUDoKKyAgICAgICAgICAgIG9wID0gQlVJTERfU0VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09NUF9ESUNUQ09NUDoKKyAgICAgICAgICAgIG9wID0gQlVJTERfTUFQOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gY29tcHJlaGVuc2lvbiB0eXBlICVkIiwgdHlwZSk7CisgICAgICAgICAgICBnb3RvIGVycm9yX2luX3Njb3BlOworICAgICAgICB9CisKKyAgICAgICAgQURET1BfSShjLCBvcCwgMCk7CisgICAgfQorCisgICAgaWYgKCFjb21waWxlcl9jb21wcmVoZW5zaW9uX2dlbmVyYXRvcihjLCBnZW5lcmF0b3JzLCAwLCBlbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwsIHR5cGUpKQorICAgICAgICBnb3RvIGVycm9yX2luX3Njb3BlOworCisgICAgaWYgKHR5cGUgIT0gQ09NUF9HRU5FWFApIHsKKyAgICAgICAgQURET1AoYywgUkVUVVJOX1ZBTFVFKTsKKyAgICB9CisKKyAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOworICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CisgICAgaWYgKGNvID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBpZiAoIWNvbXBpbGVyX21ha2VfY2xvc3VyZShjLCBjbywgMCkpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgUHlfREVDUkVGKGNvKTsKKworICAgIFZJU0lUKGMsIGV4cHIsIG91dGVybW9zdF9pdGVyKTsKKyAgICBBRERPUChjLCBHRVRfSVRFUik7CisgICAgQURET1BfSShjLCBDQUxMX0ZVTkNUSU9OLCAxKTsKKyAgICByZXR1cm4gMTsKK2Vycm9yX2luX3Njb3BlOgorICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CitlcnJvcjoKKyAgICBQeV9YREVDUkVGKGNvKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogY29tcGlsZXJfZ2VuZXhwKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewogICAgIHN0YXRpYyBpZGVudGlmaWVyIG5hbWU7Ci0gICAgUHlDb2RlT2JqZWN0ICpjbzsKLSAgICBleHByX3R5IG91dGVybW9zdF9pdGVyID0gKChjb21wcmVoZW5zaW9uX3R5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXNkbF9zZXFfR0VUKGUtPnYuR2VuZXJhdG9yRXhwLmdlbmVyYXRvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpKS0+aXRlcjsKLQogICAgIGlmICghbmFtZSkgewogICAgICAgICBuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZygiPGdlbmV4cHI+Iik7CiAgICAgICAgIGlmICghbmFtZSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBhc3NlcnQoZS0+a2luZCA9PSBHZW5lcmF0b3JFeHBfa2luZCk7CisgICAgcmV0dXJuIGNvbXBpbGVyX2NvbXByZWhlbnNpb24oYywgZSwgQ09NUF9HRU5FWFAsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5HZW5lcmF0b3JFeHAuZ2VuZXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkdlbmVyYXRvckV4cC5lbHQsIE5VTEwpOworfQogCi0gICAgaWYgKCFjb21waWxlcl9lbnRlcl9zY29wZShjLCBuYW1lLCAodm9pZCAqKWUsIGUtPmxpbmVubykpCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbXBpbGVyX2dlbmV4cF9nZW5lcmF0b3IoYywgZS0+di5HZW5lcmF0b3JFeHAuZ2VuZXJhdG9ycywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuR2VuZXJhdG9yRXhwLmVsdCk7Ci0gICAgY28gPSBhc3NlbWJsZShjLCAxKTsKLSAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgIGlmIChjbyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKK3N0YXRpYyBpbnQKK2NvbXBpbGVyX3NldGNvbXAoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCit7CisgICAgc3RhdGljIGlkZW50aWZpZXIgbmFtZTsKKyAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgbmFtZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIjxzZXRjb21wPiIpOworICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYXNzZXJ0KGUtPmtpbmQgPT0gU2V0Q29tcF9raW5kKTsKKyAgICByZXR1cm4gY29tcGlsZXJfY29tcHJlaGVuc2lvbihjLCBlLCBDT01QX1NFVENPTVAsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5TZXRDb21wLmdlbmVyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5TZXRDb21wLmVsdCwgTlVMTCk7Cit9CiAKLSAgICBjb21waWxlcl9tYWtlX2Nsb3N1cmUoYywgY28sIDApOwotICAgIFB5X0RFQ1JFRihjbyk7Ci0KLSAgICBWSVNJVChjLCBleHByLCBvdXRlcm1vc3RfaXRlcik7Ci0gICAgQURET1AoYywgR0VUX0lURVIpOwotICAgIEFERE9QX0koYywgQ0FMTF9GVU5DVElPTiwgMSk7Ci0KLSAgICByZXR1cm4gMTsKK3N0YXRpYyBpbnQKK2NvbXBpbGVyX2RpY3Rjb21wKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQoreworICAgIHN0YXRpYyBpZGVudGlmaWVyIG5hbWU7CisgICAgaWYgKCFuYW1lKSB7CisgICAgICAgIG5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCI8ZGljdGNvbXA+Iik7CisgICAgICAgIGlmICghbmFtZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBhc3NlcnQoZS0+a2luZCA9PSBEaWN0Q29tcF9raW5kKTsKKyAgICByZXR1cm4gY29tcGlsZXJfY29tcHJlaGVuc2lvbihjLCBlLCBDT01QX0RJQ1RDT01QLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuRGljdENvbXAuZ2VuZXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkRpY3RDb21wLmtleSwgZS0+di5EaWN0Q29tcC52YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI4NTksODEgKzI5MTksMzUgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3dpdGgoc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMpCiB7Ci0gICAgc3RhdGljIGlkZW50aWZpZXIgZW50ZXJfYXR0ciwgZXhpdF9hdHRyOwogICAgIGJhc2ljYmxvY2sgKmJsb2NrLCAqZmluYWxseTsKLSAgICBpZGVudGlmaWVyIHRtcHZhbHVlID0gTlVMTDsKIAogICAgIGFzc2VydChzLT5raW5kID09IFdpdGhfa2luZCk7CiAKLSAgICBpZiAoIWVudGVyX2F0dHIpIHsKLSAgICAgICAgZW50ZXJfYXR0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9fZW50ZXJfXyIpOwotICAgICAgICBpZiAoIWVudGVyX2F0dHIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFleGl0X2F0dHIpIHsKLSAgICAgICAgZXhpdF9hdHRyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiX19leGl0X18iKTsKLSAgICAgICAgaWYgKCFleGl0X2F0dHIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBibG9jayA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBmaW5hbGx5ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIGlmICghYmxvY2sgfHwgIWZpbmFsbHkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKHMtPnYuV2l0aC5vcHRpb25hbF92YXJzKSB7Ci0gICAgICAgIC8qIENyZWF0ZSBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBob2xkIGNvbnRleHQuX19lbnRlcl9fKCkuCi0gICAgICAgICAgIFdlIG5lZWQgdG8gZG8gdGhpcyByYXRoZXIgdGhhbiBwcmVzZXJ2aW5nIGl0IG9uIHRoZSBzdGFjawotICAgICAgICAgICBiZWNhdXNlIFNFVFVQX0ZJTkFMTFkgcmVtZW1iZXJzIHRoZSBzdGFjayBsZXZlbC4KLSAgICAgICAgICAgV2UgbmVlZCB0byBkbyB0aGUgYXNzaWdubWVudCAqaW5zaWRlKiB0aGUgdHJ5L2ZpbmFsbHkKLSAgICAgICAgICAgc28gdGhhdCBjb250ZXh0Ll9fZXhpdF9fKCkgaXMgY2FsbGVkIHdoZW4gdGhlIGFzc2lnbm1lbnQKLSAgICAgICAgICAgZmFpbHMuICBCdXQgd2UgbmVlZCB0byBjYWxsIGNvbnRleHQuX19lbnRlcl9fKCkgKmJlZm9yZSoKLSAgICAgICAgICAgdGhlIHRyeS9maW5hbGx5IHNvIHRoYXQgaWYgaXQgZmFpbHMgd2Ugd29uJ3QgY2FsbAotICAgICAgICAgICBjb250ZXh0Ll9fZXhpdF9fKCkuCi0gICAgICAgICovCi0gICAgICAgIHRtcHZhbHVlID0gY29tcGlsZXJfbmV3X3RtcG5hbWUoYyk7Ci0gICAgICAgIGlmICh0bXB2YWx1ZSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgdG1wdmFsdWUpOwotICAgIH0KLQogICAgIC8qIEV2YWx1YXRlIEVYUFIgKi8KICAgICBWSVNJVChjLCBleHByLCBzLT52LldpdGguY29udGV4dF9leHByKTsKKyAgICBBRERPUF9KUkVMKGMsIFNFVFVQX1dJVEgsIGZpbmFsbHkpOwogCi0gICAgLyogU3F1aXJyZWwgYXdheSBjb250ZXh0Ll9fZXhpdF9fIGJ5IHN0dWZmaW5nIGl0IHVuZGVyIGNvbnRleHQgKi8KLSAgICBBRERPUChjLCBEVVBfVE9QKTsKLSAgICBBRERPUF9PKGMsIExPQURfQVRUUiwgZXhpdF9hdHRyLCBuYW1lcyk7Ci0gICAgQURET1AoYywgUk9UX1RXTyk7Ci0KLSAgICAvKiBDYWxsIGNvbnRleHQuX19lbnRlcl9fKCkgKi8KLSAgICBBRERPUF9PKGMsIExPQURfQVRUUiwgZW50ZXJfYXR0ciwgbmFtZXMpOwotICAgIEFERE9QX0koYywgQ0FMTF9GVU5DVElPTiwgMCk7Ci0KLSAgICBpZiAocy0+di5XaXRoLm9wdGlvbmFsX3ZhcnMpIHsKLSAgICAgICAgLyogU3RvcmUgaXQgaW4gdG1wdmFsdWUgKi8KLSAgICAgICAgaWYgKCFjb21waWxlcl9uYW1lb3AoYywgdG1wdmFsdWUsIFN0b3JlKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogRGlzY2FyZCByZXN1bHQgZnJvbSBjb250ZXh0Ll9fZW50ZXJfXygpICovCi0gICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOwotICAgIH0KLQotICAgIC8qIFN0YXJ0IHRoZSB0cnkgYmxvY2sgKi8KLSAgICBBRERPUF9KUkVMKGMsIFNFVFVQX0ZJTkFMTFksIGZpbmFsbHkpOwotCisgICAgLyogU0VUVVBfV0lUSCBwdXNoZXMgYSBmaW5hbGx5IGJsb2NrLiAqLwogICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIGJsb2NrKTsKKyAgICAvKiBOb3RlIHRoYXQgdGhlIGJsb2NrIGlzIGFjdHVhbGx5IGNhbGxlZCBTRVRVUF9XSVRIIGluIGNldmFsLmMsIGJ1dAorICAgICAgIGZ1bmN0aW9ucyB0aGUgc2FtZSBhcyBTRVRVUF9GSU5BTExZIGV4Y2VwdCB0aGF0IGV4Y2VwdGlvbnMgYXJlCisgICAgICAgbm9ybWFsaXplZC4gKi8KICAgICBpZiAoIWNvbXBpbGVyX3B1c2hfZmJsb2NrKGMsIEZJTkFMTFlfVFJZLCBibG9jaykpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKHMtPnYuV2l0aC5vcHRpb25hbF92YXJzKSB7Ci0gICAgICAgIC8qIEJpbmQgc2F2ZWQgcmVzdWx0IG9mIGNvbnRleHQuX19lbnRlcl9fKCkgdG8gVkFSICovCi0gICAgICAgIGlmICghY29tcGlsZXJfbmFtZW9wKGMsIHRtcHZhbHVlLCBMb2FkKSB8fAotICAgICAgICAgICAgIWNvbXBpbGVyX25hbWVvcChjLCB0bXB2YWx1ZSwgRGVsKSkKLSAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LldpdGgub3B0aW9uYWxfdmFycyk7CiAgICAgfQorICAgIGVsc2UgeworICAgIC8qIERpc2NhcmQgcmVzdWx0IGZyb20gY29udGV4dC5fX2VudGVyX18oKSAqLworICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKKyAgICB9CiAKICAgICAvKiBCTE9DSyBjb2RlICovCiAgICAgVklTSVRfU0VRKGMsIHN0bXQsIHMtPnYuV2l0aC5ib2R5KTsKQEAgLTI5OTcsOCArMzAxMSwxNyBAQAogICAgICAgICAgICAgQURET1AoYywgU1RPUkVfTUFQKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICBjYXNlIFNldF9raW5kOgorICAgICAgICBuID0gYXNkbF9zZXFfTEVOKGUtPnYuU2V0LmVsdHMpOworICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgZS0+di5TZXQuZWx0cyk7CisgICAgICAgIEFERE9QX0koYywgQlVJTERfU0VULCBuKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBMaXN0Q29tcF9raW5kOgogICAgICAgICByZXR1cm4gY29tcGlsZXJfbGlzdGNvbXAoYywgZSk7CisgICAgY2FzZSBTZXRDb21wX2tpbmQ6CisgICAgICAgIHJldHVybiBjb21waWxlcl9zZXRjb21wKGMsIGUpOworICAgIGNhc2UgRGljdENvbXBfa2luZDoKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2RpY3Rjb21wKGMsIGUpOwogICAgIGNhc2UgR2VuZXJhdG9yRXhwX2tpbmQ6CiAgICAgICAgIHJldHVybiBjb21waWxlcl9nZW5leHAoYywgZSk7CiAgICAgY2FzZSBZaWVsZF9raW5kOgpAQCAtMzQyMyw3ICszNDQ2LDcgQEAKIHN0YXRpYyBpbnQKIHN0YWNrZGVwdGhfd2FsayhzdHJ1Y3QgY29tcGlsZXIgKmMsIGJhc2ljYmxvY2sgKmIsIGludCBkZXB0aCwgaW50IG1heGRlcHRoKQogewotICAgIGludCBpOworICAgIGludCBpLCB0YXJnZXRfZGVwdGg7CiAgICAgc3RydWN0IGluc3RyICppbnN0cjsKICAgICBpZiAoYi0+Yl9zZWVuIHx8IGItPmJfc3RhcnRkZXB0aCA+PSBkZXB0aCkKICAgICAgICAgcmV0dXJuIG1heGRlcHRoOwpAQCAtMzQzNiw4ICszNDU5LDE3IEBACiAgICAgICAgICAgICBtYXhkZXB0aCA9IGRlcHRoOwogICAgICAgICBhc3NlcnQoZGVwdGggPj0gMCk7IC8qIGludmFsaWQgY29kZSBvciBidWcgaW4gc3RhY2tkZXB0aCgpICovCiAgICAgICAgIGlmIChpbnN0ci0+aV9qcmVsIHx8IGluc3RyLT5pX2phYnMpIHsKKyAgICAgICAgICAgIHRhcmdldF9kZXB0aCA9IGRlcHRoOworICAgICAgICAgICAgaWYgKGluc3RyLT5pX29wY29kZSA9PSBGT1JfSVRFUikgeworICAgICAgICAgICAgICAgIHRhcmdldF9kZXB0aCA9IGRlcHRoLTI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluc3RyLT5pX29wY29kZSA9PSBTRVRVUF9GSU5BTExZIHx8CisgICAgICAgICAgICAgICAgICAgICAgIGluc3RyLT5pX29wY29kZSA9PSBTRVRVUF9FWENFUFQpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRfZGVwdGggPSBkZXB0aCszOworICAgICAgICAgICAgICAgIGlmICh0YXJnZXRfZGVwdGggPiBtYXhkZXB0aCkKKyAgICAgICAgICAgICAgICAgICAgbWF4ZGVwdGggPSB0YXJnZXRfZGVwdGg7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtYXhkZXB0aCA9IHN0YWNrZGVwdGhfd2FsayhjLCBpbnN0ci0+aV90YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCwgbWF4ZGVwdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2RlcHRoLCBtYXhkZXB0aCk7CiAgICAgICAgICAgICBpZiAoaW5zdHItPmlfb3Bjb2RlID09IEpVTVBfQUJTT0xVVEUgfHwKICAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGNvZGUgPT0gSlVNUF9GT1JXQVJEKSB7CiAgICAgICAgICAgICAgICAgZ290byBvdXQ7IC8qIHJlbWFpbmluZyBjb2RlIGlzIGRlYWQgKi8KQEAgLTM1MjUsNTEgKzM1NTcsOSBAQAogICAgIHJldHVybiBzaXplOwogfQogCi0vKiBBbGwgYWJvdXQgYV9sbm90YWIuCi0KLWNfbG5vdGFiIGlzIGFuIGFycmF5IG9mIHVuc2lnbmVkIGJ5dGVzIGRpc2d1aXNlZCBhcyBhIFB5dGhvbiBzdHJpbmcuCi1JdCBpcyB1c2VkIHRvIG1hcCBieXRlY29kZSBvZmZzZXRzIHRvIHNvdXJjZSBjb2RlIGxpbmUgI3MgKHdoZW4gbmVlZGVkCi1mb3IgdHJhY2ViYWNrcykuCi0KLVRoZSBhcnJheSBpcyBjb25jZXB0dWFsbHkgYSBsaXN0IG9mCi0gICAgKGJ5dGVjb2RlIG9mZnNldCBpbmNyZW1lbnQsIGxpbmUgbnVtYmVyIGluY3JlbWVudCkKLXBhaXJzLiAgVGhlIGRldGFpbHMgYXJlIGltcG9ydGFudCBhbmQgZGVsaWNhdGUsIGJlc3QgaWxsdXN0cmF0ZWQgYnkgZXhhbXBsZToKLQotICAgIGJ5dGUgY29kZSBvZmZzZXQgICAgc291cmNlIGNvZGUgbGluZSBudW1iZXIKLSAgICAwICAgICAgICAgICAgICAgICAgICAgICAxCi0gICAgNiAgICAgICAgICAgICAgICAgICAgICAgMgotICAgICAgIDUwICAgICAgICAgICAgICAgICAgIDcKLSAgICAgIDM1MCAgICAgICAgICAgICAgICAgMzA3Ci0gICAgICAzNjEgICAgICAgICAgICAgICAgIDMwOAotCi1UaGUgZmlyc3QgdHJpY2sgaXMgdGhhdCB0aGVzZSBudW1iZXJzIGFyZW4ndCBzdG9yZWQsIG9ubHkgdGhlIGluY3JlbWVudHMKLWZyb20gb25lIHJvdyB0byB0aGUgbmV4dCAodGhpcyBkb2Vzbid0IHJlYWxseSB3b3JrLCBidXQgaXQncyBhIHN0YXJ0KToKLQotICAgIDAsIDEsICA2LCAxLCAgNDQsIDUsICAzMDAsIDMwMCwgIDExLCAxCi0KLVRoZSBzZWNvbmQgdHJpY2sgaXMgdGhhdCBhbiB1bnNpZ25lZCBieXRlIGNhbid0IGhvbGQgbmVnYXRpdmUgdmFsdWVzLCBvcgotdmFsdWVzIGxhcmdlciB0aGFuIDI1NSwgc28gKGEpIHRoZXJlJ3MgYSBkZWVwIGFzc3VtcHRpb24gdGhhdCBieXRlIGNvZGUKLW9mZnNldHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgbGluZSAjcyBib3RoIGluY3JlYXNlIG1vbm90b25pY2FsbHksIGFuZCAoYikKLWlmIGF0IGxlYXN0IG9uZSBjb2x1bW4ganVtcHMgYnkgbW9yZSB0aGFuIDI1NSBmcm9tIG9uZSByb3cgdG8gdGhlIG5leHQsIG1vcmUKLXRoYW4gb25lIHBhaXIgaXMgd3JpdHRlbiB0byB0aGUgdGFibGUuIEluIGNhc2UgI2IsIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cKLWZyb20gbG9va2luZyBhdCB0aGUgdGFibGUgbGF0ZXIgaG93IG1hbnkgd2VyZSB3cml0dGVuLiAgVGhhdCdzIHRoZSBkZWxpY2F0ZQotcGFydC4gIEEgdXNlciBvZiBjX2xub3RhYiBkZXNpcmluZyB0byBmaW5kIHRoZSBzb3VyY2UgbGluZSBudW1iZXIKLWNvcnJlc3BvbmRpbmcgdG8gYSBieXRlY29kZSBhZGRyZXNzIEEgc2hvdWxkIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMKLQotICAgIGxpbmVubyA9IGFkZHIgPSAwCi0gICAgZm9yIGFkZHJfaW5jciwgbGluZV9pbmNyIGluIGNfbG5vdGFiOgotICAgIGFkZHIgKz0gYWRkcl9pbmNyCi0gICAgaWYgYWRkciA+IEE6Ci0gICAgICAgIHJldHVybiBsaW5lbm8KLSAgICBsaW5lbm8gKz0gbGluZV9pbmNyCi0KLUluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdoZW4gdGhlIGFkZHIgZmllbGQgaW5jcmVtZW50cyBieSBtb3JlIHRoYW4gMjU1LAotdGhlIGxpbmUgIyBpbmNyZW1lbnQgaW4gZWFjaCBwYWlyIGdlbmVyYXRlZCBtdXN0IGJlIDAgdW50aWwgdGhlIHJlbWFpbmluZyBhZGRyCi1pbmNyZW1lbnQgaXMgPCAyNTYuICBTbywgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIGFzc2VtYmxlX2xub3RhYiAoaXQgdXNlZAotdG8gYmUgY2FsbGVkIGNvbV9zZXRfbGluZW5vKSBzaG91bGQgbm90IChhcyB3YXMgYWN0dWFsbHkgZG9uZSB1bnRpbCAyLjIpCi1leHBhbmQgMzAwLCAzMDAgdG8gMjU1LCAyNTUsIDQ1LCA0NSwKLSAgICAgICAgICAgIGJ1dCB0byAyNTUsICAgMCwgNDUsIDI1NSwgMCwgNDUuCi0qLworLyogQXBwZW5kcyBhIHBhaXIgdG8gdGhlIGVuZCBvZiB0aGUgbGluZSBudW1iZXIgdGFibGUsIGFfbG5vdGFiLCByZXByZXNlbnRpbmcKKyAgIHRoZSBpbnN0cnVjdGlvbidzIGJ5dGVjb2RlIG9mZnNldCBhbmQgbGluZSBudW1iZXIuICBTZWUKKyAgIE9iamVjdHMvbG5vdGFiX25vdGVzLnR4dCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5lIG51bWJlciB0YWJsZS4gKi8KIAogc3RhdGljIGludAogYXNzZW1ibGVfbG5vdGFiKHN0cnVjdCBhc3NlbWJsZXIgKmEsIHN0cnVjdCBpbnN0ciAqaSkKQEAgLTM3MTEsNDkgKzM3MDEsNDcgQEAKIGFzc2VtYmxlX2p1bXBfb2Zmc2V0cyhzdHJ1Y3QgYXNzZW1ibGVyICphLCBzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7CiAgICAgYmFzaWNibG9jayAqYjsKLSAgICBpbnQgYnNpemUsIHRvdHNpemUsIGV4dGVuZGVkX2FyZ19jb3VudCwgbGFzdF9leHRlbmRlZF9hcmdfY291bnQgPSAwOworICAgIGludCBic2l6ZSwgdG90c2l6ZSwgZXh0ZW5kZWRfYXJnX2NvdW50ID0gMCwgbGFzdF9leHRlbmRlZF9hcmdfY291bnQ7CiAgICAgaW50IGk7CiAKICAgICAvKiBDb21wdXRlIHRoZSBzaXplIG9mIGVhY2ggYmxvY2sgYW5kIGZpeHVwIGp1bXAgYXJncy4KICAgICAgICBSZXBsYWNlIGJsb2NrIHBvaW50ZXIgd2l0aCBwb3NpdGlvbiBpbiBieXRlY29kZS4gKi8KLXN0YXJ0OgotICAgIHRvdHNpemUgPSAwOwotICAgIGZvciAoaSA9IGEtPmFfbmJsb2NrcyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIGIgPSBhLT5hX3Bvc3RvcmRlcltpXTsKLSAgICAgICAgYnNpemUgPSBibG9ja3NpemUoYik7Ci0gICAgICAgIGItPmJfb2Zmc2V0ID0gdG90c2l6ZTsKLSAgICAgICAgdG90c2l6ZSArPSBic2l6ZTsKLSAgICB9Ci0gICAgZXh0ZW5kZWRfYXJnX2NvdW50ID0gMDsKLSAgICBmb3IgKGIgPSBjLT51LT51X2Jsb2NrczsgYiAhPSBOVUxMOyBiID0gYi0+Yl9saXN0KSB7Ci0gICAgICAgIGJzaXplID0gYi0+Yl9vZmZzZXQ7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiLT5iX2l1c2VkOyBpKyspIHsKLSAgICAgICAgICAgIHN0cnVjdCBpbnN0ciAqaW5zdHIgPSAmYi0+Yl9pbnN0cltpXTsKLSAgICAgICAgICAgIC8qIFJlbGF0aXZlIGp1bXBzIGFyZSBjb21wdXRlZCByZWxhdGl2ZSB0bwotICAgICAgICAgICAgICAgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgYWZ0ZXIgZmV0Y2hpbmcKLSAgICAgICAgICAgICAgIHRoZSBqdW1wIGluc3RydWN0aW9uLgotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGJzaXplICs9IGluc3Ryc2l6ZShpbnN0cik7Ci0gICAgICAgICAgICBpZiAoaW5zdHItPmlfamFicykKLSAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGFyZyA9IGluc3RyLT5pX3RhcmdldC0+Yl9vZmZzZXQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChpbnN0ci0+aV9qcmVsKSB7Ci0gICAgICAgICAgICAgICAgaW50IGRlbHRhID0gaW5zdHItPmlfdGFyZ2V0LT5iX29mZnNldCAtIGJzaXplOwotICAgICAgICAgICAgICAgIGluc3RyLT5pX29wYXJnID0gZGVsdGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoaW5zdHItPmlfb3BhcmcgPiAweGZmZmYpCi0gICAgICAgICAgICAgICAgZXh0ZW5kZWRfYXJnX2NvdW50Kys7CisgICAgZG8geworICAgICAgICB0b3RzaXplID0gMDsKKyAgICAgICAgZm9yIChpID0gYS0+YV9uYmxvY2tzIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGIgPSBhLT5hX3Bvc3RvcmRlcltpXTsKKyAgICAgICAgICAgIGJzaXplID0gYmxvY2tzaXplKGIpOworICAgICAgICAgICAgYi0+Yl9vZmZzZXQgPSB0b3RzaXplOworICAgICAgICAgICAgdG90c2l6ZSArPSBic2l6ZTsKICAgICAgICAgfQotICAgIH0KKyAgICAgICAgbGFzdF9leHRlbmRlZF9hcmdfY291bnQgPSBleHRlbmRlZF9hcmdfY291bnQ7CisgICAgICAgIGV4dGVuZGVkX2FyZ19jb3VudCA9IDA7CisgICAgICAgIGZvciAoYiA9IGMtPnUtPnVfYmxvY2tzOyBiICE9IE5VTEw7IGIgPSBiLT5iX2xpc3QpIHsKKyAgICAgICAgICAgIGJzaXplID0gYi0+Yl9vZmZzZXQ7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYi0+Yl9pdXNlZDsgaSsrKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IGluc3RyICppbnN0ciA9ICZiLT5iX2luc3RyW2ldOworICAgICAgICAgICAgICAgIC8qIFJlbGF0aXZlIGp1bXBzIGFyZSBjb21wdXRlZCByZWxhdGl2ZSB0bworICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIGFmdGVyIGZldGNoaW5nCisgICAgICAgICAgICAgICAgICAgdGhlIGp1bXAgaW5zdHJ1Y3Rpb24uCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBic2l6ZSArPSBpbnN0cnNpemUoaW5zdHIpOworICAgICAgICAgICAgICAgIGlmIChpbnN0ci0+aV9qYWJzKQorICAgICAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGFyZyA9IGluc3RyLT5pX3RhcmdldC0+Yl9vZmZzZXQ7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHItPmlfanJlbCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgZGVsdGEgPSBpbnN0ci0+aV90YXJnZXQtPmJfb2Zmc2V0IC0gYnNpemU7CisgICAgICAgICAgICAgICAgICAgIGluc3RyLT5pX29wYXJnID0gZGVsdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGluc3RyLT5pX29wYXJnID4gMHhmZmZmKQorICAgICAgICAgICAgICAgICAgICBleHRlbmRlZF9hcmdfY291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgLyogWFhYOiBUaGlzIGlzIGFuIGF3ZnVsIGhhY2sgdGhhdCBjb3VsZCBodXJ0IHBlcmZvcm1hbmNlLCBidXQKICAgICAgICAgb24gdGhlIGJyaWdodCBzaWRlIGl0IHNob3VsZCB3b3JrIHVudGlsIHdlIGNvbWUgdXAKICAgICAgICAgd2l0aCBhIGJldHRlciBzb2x1dGlvbi4KIAotICAgICAgICBJbiB0aGUgbWVhbnRpbWUsIHNob3VsZCB0aGUgZ290byBiZSBkcm9wcGVkIGluIGZhdm9yCi0gICAgICAgIG9mIGEgbG9vcD8KLQogICAgICAgICBUaGUgaXNzdWUgaXMgdGhhdCBpbiB0aGUgZmlyc3QgbG9vcCBibG9ja3NpemUoKSBpcyBjYWxsZWQKICAgICAgICAgd2hpY2ggY2FsbHMgaW5zdHJzaXplKCkgd2hpY2ggcmVxdWlyZXMgaV9vcGFyZyBiZSBzZXQKICAgICAgICAgYXBwcm9wcmlhdGVseS4gICAgICAgICAgVGhlcmUgaXMgYSBib290c3RyYXAgcHJvYmxlbSBiZWNhdXNlCkBAIC0zNzY0LDEwICszNzUyLDcgQEAKICAgICAgICAgb25lcyBpbiBqdW1wIGluc3RydWN0aW9ucy4gIFNvIHRoaXMgc2hvdWxkIGNvbnZlcmdlCiAgICAgICAgIGZhaXJseSBxdWlja2x5LgogICAgICovCi0gICAgaWYgKGxhc3RfZXh0ZW5kZWRfYXJnX2NvdW50ICE9IGV4dGVuZGVkX2FyZ19jb3VudCkgewotICAgICAgICBsYXN0X2V4dGVuZGVkX2FyZ19jb3VudCA9IGV4dGVuZGVkX2FyZ19jb3VudDsKLSAgICAgICAgZ290byBzdGFydDsKLSAgICB9CisgICAgfSB3aGlsZSAobGFzdF9leHRlbmRlZF9hcmdfY291bnQgIT0gZXh0ZW5kZWRfYXJnX2NvdW50KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTM3ODEsNiArMzc2Niw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHdoaWxlIChQeURpY3RfTmV4dChkaWN0LCAmcG9zLCAmaywgJnYpKSB7CiAgICAgICAgIGkgPSBQeUludF9BU19MT05HKHYpOworICAgICAgICAvKiBUaGUga2V5cyBvZiB0aGUgZGljdGlvbmFyeSBhcmUgdHVwbGVzLiAoc2VlIGNvbXBpbGVyX2FkZF9vKQorICAgICAgICAgICBUaGUgb2JqZWN0IHdlIHdhbnQgaXMgYWx3YXlzIGZpcnN0LCB0aG91Z2guICovCiAgICAgICAgIGsgPSBQeVR1cGxlX0dFVF9JVEVNKGssIDApOwogICAgICAgICBQeV9JTkNSRUYoayk7CiAgICAgICAgIGFzc2VydCgoaSAtIG9mZnNldCkgPCBzaXplKTsKQEAgLTM4MDQsMTMgKzM3OTEsMTEgQEAKICAgICAgICAgICAgIGZsYWdzIHw9IENPX05FU1RFRDsKICAgICAgICAgaWYgKHN0ZS0+c3RlX2dlbmVyYXRvcikKICAgICAgICAgICAgIGZsYWdzIHw9IENPX0dFTkVSQVRPUjsKKyAgICAgICAgaWYgKHN0ZS0+c3RlX3ZhcmFyZ3MpCisgICAgICAgICAgICBmbGFncyB8PSBDT19WQVJBUkdTOworICAgICAgICBpZiAoc3RlLT5zdGVfdmFya2V5d29yZHMpCisgICAgICAgICAgICBmbGFncyB8PSBDT19WQVJLRVlXT1JEUzsKICAgICB9Ci0gICAgaWYgKHN0ZS0+c3RlX3ZhcmFyZ3MpCi0gICAgICAgIGZsYWdzIHw9IENPX1ZBUkFSR1M7Ci0gICAgaWYgKHN0ZS0+c3RlX3ZhcmtleXdvcmRzKQotICAgICAgICBmbGFncyB8PSBDT19WQVJLRVlXT1JEUzsKLSAgICBpZiAoc3RlLT5zdGVfZ2VuZXJhdG9yKQotICAgICAgICBmbGFncyB8PSBDT19HRU5FUkFUT1I7CiAKICAgICAvKiAoT25seSkgaW5oZXJpdCBjb21waWxlcmZsYWdzIGluIFB5Q0ZfTUFTSyAqLwogICAgIGZsYWdzIHw9IChjLT5jX2ZsYWdzLT5jZl9mbGFncyAmIFB5Q0ZfTUFTSyk7CmRpZmYgLS1naXQgYS9QeXRob24vZHRvYS5jIGIvUHl0aG9uL2R0b2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGRjMDFmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uL2R0b2EuYwpAQCAtMCwwICsxLDI5MTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDIwMDAsIDIwMDEgYnkgTHVjZW50IFRlY2hub2xvZ2llcy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBlbnRpcmUgbm90aWNlCisgKiBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIGFueSBzb2Z0d2FyZSB3aGljaCBpcyBvciBpbmNsdWRlcyBhIGNvcHkKKyAqIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBpbiBhbGwgY29waWVzIG9mIHRoZSBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uIGZvciBzdWNoIHNvZnR3YXJlLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5UWS4gIElOIFBBUlRJQ1VMQVIsIE5FSVRIRVIgVEhFIEFVVEhPUiBOT1IgTFVDRU5UIE1BS0VTIEFOWQorICogUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUVSQ0hBTlRBQklMSVRZCisgKiBPRiBUSElTIFNPRlRXQVJFIE9SIElUUyBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGlzIGR0b2EuYyBieSBEYXZpZCBNLiBHYXksIGRvd25sb2FkZWQgZnJvbQorICogaHR0cDovL3d3dy5uZXRsaWIub3JnL2ZwL2R0b2EuYyBvbiBBcHJpbCAxNSwgMjAwOSBhbmQgbW9kaWZpZWQgZm9yCisgKiBpbmNsdXNpb24gaW50byB0aGUgUHl0aG9uIGNvcmUgYnkgTWFyayBFLiBULiBEaWNraW5zb24gYW5kIEVyaWMgVi4gU21pdGguCisgKgorICogUGxlYXNlIHJlbWVtYmVyIHRvIGNoZWNrIGh0dHA6Ly93d3cubmV0bGliLm9yZy9mcCByZWd1bGFybHkgKGFuZCBlc3BlY2lhbGx5CisgKiBiZWZvcmUgYW55IFB5dGhvbiByZWxlYXNlKSBmb3IgYnVnZml4ZXMgYW5kIHVwZGF0ZXMuCisgKgorICogVGhlIG1ham9yIG1vZGlmaWNhdGlvbnMgZnJvbSBHYXkncyBvcmlnaW5hbCBjb2RlIGFyZSBhcyBmb2xsb3dzOgorICoKKyAqICAwLiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgYmVlbiBzcGVjaWFsaXplZCB0byBQeXRob24ncyBuZWVkcyBieSByZW1vdmluZworICogICAgIG1hbnkgb2YgdGhlICNpZmRlZidkIHNlY3Rpb25zLiAgSW4gcGFydGljdWxhciwgY29kZSB0byBzdXBwb3J0IFZBWCBhbmQKKyAqICAgICBJQk0gZmxvYXRpbmctcG9pbnQgZm9ybWF0cywgaGV4IE5hTnMsIGhleCBmbG9hdHMsIGxvY2FsZS1hd2FyZQorICogICAgIHRyZWF0bWVudCBvZiB0aGUgZGVjaW1hbCBwb2ludCwgYW5kIHNldHRpbmcgb2YgdGhlIGluZXhhY3QgZmxhZyBoYXZlCisgKiAgICAgYmVlbiByZW1vdmVkLgorICoKKyAqICAxLiBXZSB1c2UgUHlNZW1fTWFsbG9jIGFuZCBQeU1lbV9GcmVlIGluIHBsYWNlIG9mIG1hbGxvYyBhbmQgZnJlZS4KKyAqCisgKiAgMi4gVGhlIHB1YmxpYyBmdW5jdGlvbnMgc3RydG9kLCBkdG9hIGFuZCBmcmVlZHRvYSBhbGwgbm93IGhhdmUKKyAqICAgICBhIF9QeV9kZ18gcHJlZml4LgorICoKKyAqICAzLiBJbnN0ZWFkIG9mIGFzc3VtaW5nIHRoYXQgUHlNZW1fTWFsbG9jIGFsd2F5cyBzdWNjZWVkcywgd2UgdGhyZWFkCisgKiAgICAgUHlNZW1fTWFsbG9jIGZhaWx1cmVzIHRocm91Z2ggdGhlIGNvZGUuICBUaGUgZnVuY3Rpb25zCisgKgorICogICAgICAgQmFsbG9jLCBtdWx0YWRkLCBzMmIsIGkyYiwgbXVsdCwgcG93NW11bHQsIGxzaGlmdCwgZGlmZiwgZDJiCisgKgorICogICAgIG9mIHJldHVybiB0eXBlICpCaWdpbnQgYWxsIHJldHVybiBOVUxMIHRvIGluZGljYXRlIGEgbWFsbG9jIGZhaWx1cmUuCisgKiAgICAgU2ltaWxhcmx5LCBydl9hbGxvYyBhbmQgbnJ2X2FsbG9jIChyZXR1cm4gdHlwZSBjaGFyICopIHJldHVybiBOVUxMIG9uCisgKiAgICAgZmFpbHVyZS4gIGJpZ2NvbXAgbm93IGhhcyByZXR1cm4gdHlwZSBpbnQgKGl0IHVzZWQgdG8gYmUgdm9pZCkgYW5kCisgKiAgICAgcmV0dXJucyAtMSBvbiBmYWlsdXJlIGFuZCAwIG90aGVyd2lzZS4gIF9QeV9kZ19kdG9hIHJldHVybnMgTlVMTAorICogICAgIG9uIGZhaWx1cmUuICBfUHlfZGdfc3RydG9kIGluZGljYXRlcyBmYWlsdXJlIGR1ZSB0byBtYWxsb2MgZmFpbHVyZQorICogICAgIGJ5IHJldHVybmluZyAtMS4wLCBzZXR0aW5nIGVycm5vPUVOT01FTSBhbmQgKnNlIHRvIHMwMC4KKyAqCisgKiAgNC4gVGhlIHN0YXRpYyB2YXJpYWJsZSBkdG9hX3Jlc3VsdCBoYXMgYmVlbiByZW1vdmVkLiAgQ2FsbGVycyBvZgorICogICAgIF9QeV9kZ19kdG9hIGFyZSBleHBlY3RlZCB0byBjYWxsIF9QeV9kZ19mcmVlZHRvYSB0byBmcmVlCisgKiAgICAgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgX1B5X2RnX2R0b2EuCisgKgorICogIDUuIFRoZSBjb2RlIGhhcyBiZWVuIHJlZm9ybWF0dGVkIHRvIGJldHRlciBmaXQgd2l0aCBQeXRob24ncworICogICAgIEMgc3R5bGUgZ3VpZGUgKFBFUCA3KS4KKyAqCisgKiAgNi4gQSBidWcgaW4gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGhhcyBiZWVuIGZpeGVkOiB0byBhdm9pZCBGUkVFaW5nIG1lbW9yeQorICogICAgIHRoYXQgaGFzbid0IGJlZW4gTUFMTE9DJ2VkLCBwcml2YXRlX21lbSBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gayA8PQorICogICAgIEttYXguCisgKgorICogIDcuIF9QeV9kZ19zdHJ0b2QgaGFzIGJlZW4gbW9kaWZpZWQgc28gdGhhdCBpdCBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIHdpdGgKKyAqICAgICBsZWFkaW5nIHdoaXRlc3BhY2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgZm9yIHRoZSBvcmlnaW5hbCBkdG9hLmMgY29kZSB0byBEYXZpZCBNLiBHYXkgKGRtZworICogYXQgYWNtIGRvdCBvcmcsIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4KKyAqIFBsZWFzZSByZXBvcnQgYnVncyBmb3IgdGhpcyBtb2RpZmllZCB2ZXJzaW9uIHVzaW5nIHRoZSBQeXRob24gaXNzdWUgdHJhY2tlcgorICogKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcpLiAqLworCisvKiBPbiBhIG1hY2hpbmUgd2l0aCBJRUVFIGV4dGVuZGVkLXByZWNpc2lvbiByZWdpc3RlcnMsIGl0IGlzCisgKiBuZWNlc3NhcnkgdG8gc3BlY2lmeSBkb3VibGUtcHJlY2lzaW9uICg1My1iaXQpIHJvdW5kaW5nIHByZWNpc2lvbgorICogYmVmb3JlIGludm9raW5nIHN0cnRvZCBvciBkdG9hLiAgSWYgdGhlIG1hY2hpbmUgdXNlcyAodGhlIGVxdWl2YWxlbnQKKyAqIG9mKSBJbnRlbCA4MHg4NyBhcml0aG1ldGljLCB0aGUgY2FsbAorICogICAgICBfY29udHJvbDg3KFBDXzUzLCBNQ1dfUEMpOworICogZG9lcyB0aGlzIHdpdGggbWFueSBjb21waWxlcnMuICBXaGV0aGVyIHRoaXMgb3IgYW5vdGhlciBjYWxsIGlzCisgKiBhcHByb3ByaWF0ZSBkZXBlbmRzIG9uIHRoZSBjb21waWxlcjsgZm9yIHRoaXMgdG8gd29yaywgaXQgbWF5IGJlCisgKiBuZWNlc3NhcnkgdG8gI2luY2x1ZGUgImZsb2F0LmgiIG9yIGFub3RoZXIgc3lzdGVtLWRlcGVuZGVudCBoZWFkZXIKKyAqIGZpbGUuCisgKi8KKworLyogc3RydG9kIGZvciBJRUVFLSwgVkFYLSwgYW5kIElCTS1hcml0aG1ldGljIG1hY2hpbmVzLgorICoKKyAqIFRoaXMgc3RydG9kIHJldHVybnMgYSBuZWFyZXN0IG1hY2hpbmUgbnVtYmVyIHRvIHRoZSBpbnB1dCBkZWNpbWFsCisgKiBzdHJpbmcgKG9yIHNldHMgZXJybm8gdG8gRVJBTkdFKS4gIFdpdGggSUVFRSBhcml0aG1ldGljLCB0aWVzIGFyZQorICogYnJva2VuIGJ5IHRoZSBJRUVFIHJvdW5kLWV2ZW4gcnVsZS4gIE90aGVyd2lzZSB0aWVzIGFyZSBicm9rZW4gYnkKKyAqIGJpYXNlZCByb3VuZGluZyAoYWRkIGhhbGYgYW5kIGNob3ApLgorICoKKyAqIEluc3BpcmVkIGxvb3NlbHkgYnkgV2lsbGlhbSBELiBDbGluZ2VyJ3MgcGFwZXIgIkhvdyB0byBSZWFkIEZsb2F0aW5nCisgKiBQb2ludCBOdW1iZXJzIEFjY3VyYXRlbHkiIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiA5Mi0xMDFdLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKgorICogICAgICAxLiBXZSBvbmx5IHJlcXVpcmUgSUVFRSwgSUJNLCBvciBWQVggZG91YmxlLXByZWNpc2lvbgorICogICAgICAgICAgICAgIGFyaXRobWV0aWMgKG5vdCBJRUVFIGRvdWJsZS1leHRlbmRlZCkuCisgKiAgICAgIDIuIFdlIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgaW4gYSBjYXNlIHRoYXQKKyAqICAgICAgICAgICAgICBDbGluZ2VyIG1pc3NlZCAtLSB3aGVuIHdlJ3JlIGNvbXB1dGluZyBkICogMTBebgorICogICAgICAgICAgICAgIGZvciBhIHNtYWxsIGludGVnZXIgZCBhbmQgdGhlIGludGVnZXIgbiBpcyBub3QgdG9vCisgKiAgICAgICAgICAgICAgbXVjaCBsYXJnZXIgdGhhbiAyMiAodGhlIG1heGltdW0gaW50ZWdlciBrIGZvciB3aGljaAorICogICAgICAgICAgICAgIHdlIGNhbiByZXByZXNlbnQgMTBeayBleGFjdGx5KSwgd2UgbWF5IGJlIGFibGUgdG8KKyAqICAgICAgICAgICAgICBjb21wdXRlIChkKjEwXmspICogMTBeKGUtaykgd2l0aCBqdXN0IG9uZSByb3VuZG9mZi4KKyAqICAgICAgMy4gUmF0aGVyIHRoYW4gYSBiaXQtYXQtYS10aW1lIGFkanVzdG1lbnQgb2YgdGhlIGJpbmFyeQorICogICAgICAgICAgICAgIHJlc3VsdCBpbiB0aGUgaGFyZCBjYXNlLCB3ZSB1c2UgZmxvYXRpbmctcG9pbnQKKyAqICAgICAgICAgICAgICBhcml0aG1ldGljIHRvIGRldGVybWluZSB0aGUgYWRqdXN0bWVudCB0byB3aXRoaW4KKyAqICAgICAgICAgICAgICBvbmUgYml0OyBvbmx5IGluIHJlYWxseSBoYXJkIGNhc2VzIGRvIHdlIG5lZWQgdG8KKyAqICAgICAgICAgICAgICBjb21wdXRlIGEgc2Vjb25kIHJlc2lkdWFsLgorICogICAgICA0LiBCZWNhdXNlIG9mIDMuLCB3ZSBkb24ndCBuZWVkIGEgbGFyZ2UgdGFibGUgb2YgcG93ZXJzIG9mIDEwCisgKiAgICAgICAgICAgICAgZm9yIHRlbi10by1lIChqdXN0IHNvbWUgc21hbGwgdGFibGVzLCBlLmcuIG9mIDEwXmsKKyAqICAgICAgICAgICAgICBmb3IgMCA8PSBrIDw9IDIyKS4KKyAqLworCisvKiBMaW5raW5nIG9mIFB5dGhvbidzICNkZWZpbmVzIHRvIEdheSdzICNkZWZpbmVzIHN0YXJ0cyBoZXJlLiAqLworCisjaW5jbHVkZSAiUHl0aG9uLmgiCisKKy8qIGlmIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIgaXMgZGVmaW5lZCwgdGhlbiBkb24ndCBldmVuIHRyeSB0byBjb21waWxlCisgICB0aGUgZm9sbG93aW5nIGNvZGUgKi8KKyNpZm5kZWYgUFlfTk9fU0hPUlRfRkxPQVRfUkVQUgorCisjaW5jbHVkZSAiZmxvYXQuaCIKKworI2RlZmluZSBNQUxMT0MgUHlNZW1fTWFsbG9jCisjZGVmaW5lIEZSRUUgUHlNZW1fRnJlZQorCisvKiBUaGlzIGNvZGUgc2hvdWxkIGFsc28gd29yayBmb3IgQVJNIG1peGVkLWVuZGlhbiBmb3JtYXQgb24gbGl0dGxlLWVuZGlhbgorICAgbWFjaGluZXMsIHdoZXJlIGRvdWJsZXMgaGF2ZSBieXRlIG9yZGVyIDQ1NjcwMTIzIChpbiBpbmNyZWFzaW5nIGFkZHJlc3MKKyAgIG9yZGVyLCAwIGJlaW5nIHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlKS4gKi8KKyNpZmRlZiBET1VCTEVfSVNfTElUVExFX0VORElBTl9JRUVFNzU0CisjICBkZWZpbmUgSUVFRV84MDg3CisjZW5kaWYKKyNpZiBkZWZpbmVkKERPVUJMRV9JU19CSUdfRU5ESUFOX0lFRUU3NTQpIHx8ICBcCisgIGRlZmluZWQoRE9VQkxFX0lTX0FSTV9NSVhFRF9FTkRJQU5fSUVFRTc1NCkKKyMgIGRlZmluZSBJRUVFX01DNjhrCisjZW5kaWYKKyNpZiBkZWZpbmVkKElFRUVfODA4NykgKyBkZWZpbmVkKElFRUVfTUM2OGspICE9IDEKKyNlcnJvciAiRXhhY3RseSBvbmUgb2YgSUVFRV84MDg3IG9yIElFRUVfTUM2OGsgc2hvdWxkIGJlIGRlZmluZWQuIgorI2VuZGlmCisKKy8qIFRoZSBjb2RlIGJlbG93IGFzc3VtZXMgdGhhdCB0aGUgZW5kaWFubmVzcyBvZiBpbnRlZ2VycyBtYXRjaGVzIHRoZQorICAgZW5kaWFubmVzcyBvZiB0aGUgdHdvIDMyLWJpdCB3b3JkcyBvZiBhIGRvdWJsZS4gIENoZWNrIHRoaXMuICovCisjaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pICYmIChkZWZpbmVkKERPVUJMRV9JU19MSVRUTEVfRU5ESUFOX0lFRUU3NTQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoRE9VQkxFX0lTX0FSTV9NSVhFRF9FTkRJQU5fSUVFRTc1NCkpCisjZXJyb3IgImRvdWJsZXMgYW5kIGludHMgaGF2ZSBpbmNvbXBhdGlibGUgZW5kaWFubmVzcyIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV09SRFNfQklHRU5ESUFOKSAmJiBkZWZpbmVkKERPVUJMRV9JU19CSUdfRU5ESUFOX0lFRUU3NTQpCisjZXJyb3IgImRvdWJsZXMgYW5kIGludHMgaGF2ZSBpbmNvbXBhdGlibGUgZW5kaWFubmVzcyIKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKEhBVkVfVUlOVDMyX1QpICYmIGRlZmluZWQoSEFWRV9JTlQzMl9UKQordHlwZWRlZiBQWV9VSU5UMzJfVCBVTG9uZzsKK3R5cGVkZWYgUFlfSU5UMzJfVCBMb25nOworI2Vsc2UKKyNlcnJvciAiRmFpbGVkIHRvIGZpbmQgYW4gZXhhY3Qtd2lkdGggMzItYml0IGludGVnZXIgdHlwZSIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1VJTlQ2NF9UKQorI2RlZmluZSBVTExvbmcgUFlfVUlOVDY0X1QKKyNlbHNlCisjdW5kZWYgVUxMb25nCisjZW5kaWYKKworI3VuZGVmIERFQlVHCisjaWZkZWYgUHlfREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCisvKiBFbmQgUHl0aG9uICNkZWZpbmUgbGlua2luZyAqLworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgQnVnKHgpIHtmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB4KTsgZXhpdCgxKTt9CisjZW5kaWYKKworI2lmbmRlZiBQUklWQVRFX01FTQorI2RlZmluZSBQUklWQVRFX01FTSAyMzA0CisjZW5kaWYKKyNkZWZpbmUgUFJJVkFURV9tZW0gKChQUklWQVRFX01FTStzaXplb2YoZG91YmxlKS0xKS9zaXplb2YoZG91YmxlKSkKK3N0YXRpYyBkb3VibGUgcHJpdmF0ZV9tZW1bUFJJVkFURV9tZW1dLCAqcG1lbV9uZXh0ID0gcHJpdmF0ZV9tZW07CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiB1bmlvbiB7IGRvdWJsZSBkOyBVTG9uZyBMWzJdOyB9IFU7CisKKyNpZmRlZiBJRUVFXzgwODcKKyNkZWZpbmUgd29yZDAoeCkgKHgpLT5MWzFdCisjZGVmaW5lIHdvcmQxKHgpICh4KS0+TFswXQorI2Vsc2UKKyNkZWZpbmUgd29yZDAoeCkgKHgpLT5MWzBdCisjZGVmaW5lIHdvcmQxKHgpICh4KS0+TFsxXQorI2VuZGlmCisjZGVmaW5lIGR2YWwoeCkgKHgpLT5kCisKKyNpZm5kZWYgU1RSVE9EX0RJR0xJTQorI2RlZmluZSBTVFJUT0RfRElHTElNIDQwCisjZW5kaWYKKworLyogbWF4aW11bSBwZXJtaXR0ZWQgZXhwb25lbnQgdmFsdWUgZm9yIHN0cnRvZDsgZXhwb25lbnRzIGxhcmdlciB0aGFuCisgICBNQVhfQUJTX0VYUCBpbiBhYnNvbHV0ZSB2YWx1ZSBnZXQgdHJ1bmNhdGVkIHRvICstTUFYX0FCU19FWFAuICBNQVhfQUJTX0VYUAorICAgc2hvdWxkIGZpdCBpbnRvIGFuIGludC4gKi8KKyNpZm5kZWYgTUFYX0FCU19FWFAKKyNkZWZpbmUgTUFYX0FCU19FWFAgMTk5OTlVCisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIG9mIFN0b3JlaW5jIGlzIGFwcHJvcHJpYXRlIGZvciBNSVBTIHByb2Nlc3NvcnMuCisgKiBBbiBhbHRlcm5hdGl2ZSB0aGF0IG1pZ2h0IGJlIGJldHRlciBvbiBzb21lIG1hY2hpbmVzIGlzCisgKiAjZGVmaW5lIFN0b3JlaW5jKGEsYixjKSAoKmErKyA9IGIgPDwgMTYgfCBjICYgMHhmZmZmKQorICovCisjaWYgZGVmaW5lZChJRUVFXzgwODcpCisjZGVmaW5lIFN0b3JlaW5jKGEsYixjKSAoKCh1bnNpZ25lZCBzaG9ydCAqKWEpWzFdID0gKHVuc2lnbmVkIHNob3J0KWIsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCAqKWEpWzBdID0gKHVuc2lnbmVkIHNob3J0KWMsIGErKykKKyNlbHNlCisjZGVmaW5lIFN0b3JlaW5jKGEsYixjKSAoKCh1bnNpZ25lZCBzaG9ydCAqKWEpWzBdID0gKHVuc2lnbmVkIHNob3J0KWIsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCAqKWEpWzFdID0gKHVuc2lnbmVkIHNob3J0KWMsIGErKykKKyNlbmRpZgorCisvKiAjZGVmaW5lIFAgREJMX01BTlRfRElHICovCisvKiBUZW5fcG1heCA9IGZsb29yKFAqbG9nKDIpL2xvZyg1KSkgKi8KKy8qIEJsZXRjaCA9IChoaWdoZXN0IHBvd2VyIG9mIDIgPCBEQkxfTUFYXzEwX0VYUCkgLyAxNiAqLworLyogUXVpY2tfbWF4ID0gZmxvb3IoKFAtMSkqbG9nKEZMVF9SQURJWCkvbG9nKDEwKSAtIDEpICovCisvKiBJbnRfbWF4ID0gZmxvb3IoUCpsb2coRkxUX1JBRElYKS9sb2coMTApIC0gMSkgKi8KKworI2RlZmluZSBFeHBfc2hpZnQgIDIwCisjZGVmaW5lIEV4cF9zaGlmdDEgMjAKKyNkZWZpbmUgRXhwX21zazEgICAgMHgxMDAwMDAKKyNkZWZpbmUgRXhwX21zazExICAgMHgxMDAwMDAKKyNkZWZpbmUgRXhwX21hc2sgIDB4N2ZmMDAwMDAKKyNkZWZpbmUgUCA1MworI2RlZmluZSBOYml0cyA1MworI2RlZmluZSBCaWFzIDEwMjMKKyNkZWZpbmUgRW1heCAxMDIzCisjZGVmaW5lIEVtaW4gKC0xMDIyKQorI2RlZmluZSBFdGlueSAoLTEwNzQpICAvKiBzbWFsbGVzdCBkZW5vcm1hbCBpcyAyKipFdGlueSAqLworI2RlZmluZSBFeHBfMSAgMHgzZmYwMDAwMAorI2RlZmluZSBFeHBfMTEgMHgzZmYwMDAwMAorI2RlZmluZSBFYml0cyAxMQorI2RlZmluZSBGcmFjX21hc2sgIDB4ZmZmZmYKKyNkZWZpbmUgRnJhY19tYXNrMSAweGZmZmZmCisjZGVmaW5lIFRlbl9wbWF4IDIyCisjZGVmaW5lIEJsZXRjaCAweDEwCisjZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZmZmZmYKKyNkZWZpbmUgQm5kcnlfbWFzazEgMHhmZmZmZgorI2RlZmluZSBTaWduX2JpdCAweDgwMDAwMDAwCisjZGVmaW5lIExvZzJQIDEKKyNkZWZpbmUgVGlueTAgMAorI2RlZmluZSBUaW55MSAxCisjZGVmaW5lIFF1aWNrX21heCAxNAorI2RlZmluZSBJbnRfbWF4IDE0CisKKyNpZm5kZWYgRmx0X1JvdW5kcworI2lmZGVmIEZMVF9ST1VORFMKKyNkZWZpbmUgRmx0X1JvdW5kcyBGTFRfUk9VTkRTCisjZWxzZQorI2RlZmluZSBGbHRfUm91bmRzIDEKKyNlbmRpZgorI2VuZGlmIC8qRmx0X1JvdW5kcyovCisKKyNkZWZpbmUgUm91bmRpbmcgRmx0X1JvdW5kcworCisjZGVmaW5lIEJpZzAgKEZyYWNfbWFzazEgfCBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xKSkKKyNkZWZpbmUgQmlnMSAweGZmZmZmZmZmCisKKy8qIHN0cnVjdCBCQ2luZm8gaXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gX1B5X2RnX3N0cnRvZCB0byBiaWdjb21wICovCisKK3R5cGVkZWYgc3RydWN0IEJDaW5mbyBCQ2luZm87CitzdHJ1Y3QKK0JDaW5mbyB7CisgICAgaW50IGUwLCBuZCwgbmQwLCBzY2FsZTsKK307CisKKyNkZWZpbmUgRkZGRkZGRkYgMHhmZmZmZmZmZlVMCisKKyNkZWZpbmUgS21heCA3CisKKy8qIHN0cnVjdCBCaWdpbnQgaXMgdXNlZCB0byByZXByZXNlbnQgYXJiaXRyYXJ5LXByZWNpc2lvbiBpbnRlZ2Vycy4gIFRoZXNlCisgICBpbnRlZ2VycyBhcmUgc3RvcmVkIGluIHNpZ24tbWFnbml0dWRlIGZvcm1hdCwgd2l0aCB0aGUgbWFnbml0dWRlIHN0b3JlZCBhcworICAgYW4gYXJyYXkgb2YgYmFzZSAyKiozMiBkaWdpdHMuICBCaWdpbnRzIGFyZSBhbHdheXMgbm9ybWFsaXplZDogaWYgeCBpcyBhCisgICBCaWdpbnQgdGhlbiB4LT53ZHMgPj0gMSwgYW5kIGVpdGhlciB4LT53ZHMgPT0gMSBvciB4W3dkcy0xXSBpcyBub256ZXJvLgorCisgICBUaGUgQmlnaW50IGZpZWxkcyBhcmUgYXMgZm9sbG93czoKKworICAgICAtIG5leHQgaXMgYSBoZWFkZXIgdXNlZCBieSBCYWxsb2MgYW5kIEJmcmVlIHRvIGtlZXAgdHJhY2sgb2YgbGlzdHMKKyAgICAgICAgIG9mIGZyZWVkIEJpZ2ludHM7ICBpdCdzIGFsc28gdXNlZCBmb3IgdGhlIGxpbmtlZCBsaXN0IG9mCisgICAgICAgICBwb3dlcnMgb2YgNSBvZiB0aGUgZm9ybSA1KioyKippIHVzZWQgYnkgcG93NW11bHQuCisgICAgIC0gayBpbmRpY2F0ZXMgd2hpY2ggcG9vbCB0aGlzIEJpZ2ludCB3YXMgYWxsb2NhdGVkIGZyb20KKyAgICAgLSBtYXh3ZHMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdvcmRzIHNwYWNlIHdhcyBhbGxvY2F0ZWQgZm9yCisgICAgICAgKHVzdWFsbHkgbWF4d2RzID09IDIqKmspCisgICAgIC0gc2lnbiBpcyAxIGZvciBuZWdhdGl2ZSBCaWdpbnRzLCAwIGZvciBwb3NpdGl2ZS4gIFRoZSBzaWduIGlzIHVudXNlZAorICAgICAgIChpZ25vcmVkIG9uIGlucHV0cywgc2V0IHRvIDAgb24gb3V0cHV0cykgaW4gYWxtb3N0IGFsbCBvcGVyYXRpb25zCisgICAgICAgaW52b2x2aW5nIEJpZ2ludHM6IGEgbm90YWJsZSBleGNlcHRpb24gaXMgdGhlIGRpZmYgZnVuY3Rpb24sIHdoaWNoCisgICAgICAgaWdub3JlcyBzaWducyBvbiBpbnB1dHMgYnV0IHNldHMgdGhlIHNpZ24gb2YgdGhlIG91dHB1dCBjb3JyZWN0bHkuCisgICAgIC0gd2RzIGlzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHNpZ25pZmljYW50IHdvcmRzCisgICAgIC0geCBjb250YWlucyB0aGUgdmVjdG9yIG9mIHdvcmRzIChkaWdpdHMpIGZvciB0aGlzIEJpZ2ludCwgZnJvbSBsZWFzdAorICAgICAgIHNpZ25pZmljYW50ICh4WzBdKSB0byBtb3N0IHNpZ25pZmljYW50ICh4W3dkcy0xXSkuCisqLworCitzdHJ1Y3QKK0JpZ2ludCB7CisgICAgc3RydWN0IEJpZ2ludCAqbmV4dDsKKyAgICBpbnQgaywgbWF4d2RzLCBzaWduLCB3ZHM7CisgICAgVUxvbmcgeFsxXTsKK307CisKK3R5cGVkZWYgc3RydWN0IEJpZ2ludCBCaWdpbnQ7CisKKyNpZm5kZWYgUHlfVVNJTkdfTUVNT1JZX0RFQlVHR0VSCisKKy8qIE1lbW9yeSBtYW5hZ2VtZW50OiBtZW1vcnkgaXMgYWxsb2NhdGVkIGZyb20sIGFuZCByZXR1cm5lZCB0bywgS21heCsxIHBvb2xzCisgICBvZiBtZW1vcnksIHdoZXJlIHBvb2wgayAoMCA8PSBrIDw9IEttYXgpIGlzIGZvciBCaWdpbnRzIGIgd2l0aCBiLT5tYXh3ZHMgPT0KKyAgIDEgPDwgay4gIFRoZXNlIHBvb2xzIGFyZSBtYWludGFpbmVkIGFzIGxpbmtlZCBsaXN0cywgd2l0aCBmcmVlbGlzdFtrXQorICAgcG9pbnRpbmcgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QgZm9yIHBvb2wgay4KKworICAgT24gYWxsb2NhdGlvbiwgaWYgdGhlcmUncyBubyBmcmVlIHNsb3QgaW4gdGhlIGFwcHJvcHJpYXRlIHBvb2wsIE1BTExPQyBpcworICAgY2FsbGVkIHRvIGdldCBtb3JlIG1lbW9yeS4gIFRoaXMgbWVtb3J5IGlzIG5vdCByZXR1cm5lZCB0byB0aGUgc3lzdGVtIHVudGlsCisgICBQeXRob24gcXVpdHMuICBUaGVyZSdzIGFsc28gYSBwcml2YXRlIG1lbW9yeSBwb29sIHRoYXQncyBhbGxvY2F0ZWQgZnJvbQorICAgaW4gcHJlZmVyZW5jZSB0byB1c2luZyBNQUxMT0MuCisKKyAgIEZvciBCaWdpbnRzIHdpdGggbW9yZSB0aGFuICgxIDw8IEttYXgpIGRpZ2l0cyAod2hpY2ggaW1wbGllcyBhdCBsZWFzdCAxMjMzCisgICBkZWNpbWFsIGRpZ2l0cyksIG1lbW9yeSBpcyBkaXJlY3RseSBhbGxvY2F0ZWQgdXNpbmcgTUFMTE9DLCBhbmQgZnJlZWQgdXNpbmcKKyAgIEZSRUUuCisKKyAgIFhYWDogaXQgd291bGQgYmUgZWFzeSB0byBieXBhc3MgdGhpcyBtZW1vcnktbWFuYWdlbWVudCBzeXN0ZW0gYW5kCisgICB0cmFuc2xhdGUgZWFjaCBjYWxsIHRvIEJhbGxvYyBpbnRvIGEgY2FsbCB0byBQeU1lbV9NYWxsb2MsIGFuZCBlYWNoCisgICBCZnJlZSB0byBQeU1lbV9GcmVlLiAgSW52ZXN0aWdhdGUgd2hldGhlciB0aGlzIGhhcyBhbnkgc2lnbmlmaWNhbnQKKyAgIHBlcmZvcm1hbmNlIG9uIGltcGFjdC4gKi8KKworc3RhdGljIEJpZ2ludCAqZnJlZWxpc3RbS21heCsxXTsKKworLyogQWxsb2NhdGUgc3BhY2UgZm9yIGEgQmlnaW50IHdpdGggdXAgdG8gMTw8ayBkaWdpdHMgKi8KKworc3RhdGljIEJpZ2ludCAqCitCYWxsb2MoaW50IGspCit7CisgICAgaW50IHg7CisgICAgQmlnaW50ICpydjsKKyAgICB1bnNpZ25lZCBpbnQgbGVuOworCisgICAgaWYgKGsgPD0gS21heCAmJiAocnYgPSBmcmVlbGlzdFtrXSkpCisgICAgICAgIGZyZWVsaXN0W2tdID0gcnYtPm5leHQ7CisgICAgZWxzZSB7CisgICAgICAgIHggPSAxIDw8IGs7CisgICAgICAgIGxlbiA9IChzaXplb2YoQmlnaW50KSArICh4LTEpKnNpemVvZihVTG9uZykgKyBzaXplb2YoZG91YmxlKSAtIDEpCisgICAgICAgICAgICAvc2l6ZW9mKGRvdWJsZSk7CisgICAgICAgIGlmIChrIDw9IEttYXggJiYgcG1lbV9uZXh0IC0gcHJpdmF0ZV9tZW0gKyBsZW4gPD0gUFJJVkFURV9tZW0pIHsKKyAgICAgICAgICAgIHJ2ID0gKEJpZ2ludCopcG1lbV9uZXh0OworICAgICAgICAgICAgcG1lbV9uZXh0ICs9IGxlbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJ2ID0gKEJpZ2ludCopTUFMTE9DKGxlbipzaXplb2YoZG91YmxlKSk7CisgICAgICAgICAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBydi0+ayA9IGs7CisgICAgICAgIHJ2LT5tYXh3ZHMgPSB4OworICAgIH0KKyAgICBydi0+c2lnbiA9IHJ2LT53ZHMgPSAwOworICAgIHJldHVybiBydjsKK30KKworLyogRnJlZSBhIEJpZ2ludCBhbGxvY2F0ZWQgd2l0aCBCYWxsb2MgKi8KKworc3RhdGljIHZvaWQKK0JmcmVlKEJpZ2ludCAqdikKK3sKKyAgICBpZiAodikgeworICAgICAgICBpZiAodi0+ayA+IEttYXgpCisgICAgICAgICAgICBGUkVFKCh2b2lkKil2KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2LT5uZXh0ID0gZnJlZWxpc3Rbdi0+a107CisgICAgICAgICAgICBmcmVlbGlzdFt2LT5rXSA9IHY7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNlbHNlCisKKy8qIEFsdGVybmF0aXZlIHZlcnNpb25zIG9mIEJhbGxvYyBhbmQgQmZyZWUgdGhhdCB1c2UgUHlNZW1fTWFsbG9jIGFuZAorICAgUHlNZW1fRnJlZSBkaXJlY3RseSBpbiBwbGFjZSBvZiB0aGUgY3VzdG9tIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSBhYm92ZS4KKyAgIFRoZXNlIGFyZSBwcm92aWRlZCBmb3IgdGhlIGJlbmVmaXQgb2YgbWVtb3J5IGRlYnVnZ2luZyB0b29scyBsaWtlCisgICBWYWxncmluZC4gKi8KKworLyogQWxsb2NhdGUgc3BhY2UgZm9yIGEgQmlnaW50IHdpdGggdXAgdG8gMTw8ayBkaWdpdHMgKi8KKworc3RhdGljIEJpZ2ludCAqCitCYWxsb2MoaW50IGspCit7CisgICAgaW50IHg7CisgICAgQmlnaW50ICpydjsKKyAgICB1bnNpZ25lZCBpbnQgbGVuOworCisgICAgeCA9IDEgPDwgazsKKyAgICBsZW4gPSAoc2l6ZW9mKEJpZ2ludCkgKyAoeC0xKSpzaXplb2YoVUxvbmcpICsgc2l6ZW9mKGRvdWJsZSkgLSAxKQorICAgICAgICAvc2l6ZW9mKGRvdWJsZSk7CisKKyAgICBydiA9IChCaWdpbnQqKU1BTExPQyhsZW4qc2l6ZW9mKGRvdWJsZSkpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJ2LT5rID0gazsKKyAgICBydi0+bWF4d2RzID0geDsKKyAgICBydi0+c2lnbiA9IHJ2LT53ZHMgPSAwOworICAgIHJldHVybiBydjsKK30KKworLyogRnJlZSBhIEJpZ2ludCBhbGxvY2F0ZWQgd2l0aCBCYWxsb2MgKi8KKworc3RhdGljIHZvaWQKK0JmcmVlKEJpZ2ludCAqdikKK3sKKyAgICBpZiAodikgeworICAgICAgICBGUkVFKCh2b2lkKil2KTsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBQeV9VU0lOR19NRU1PUllfREVCVUdHRVIgKi8KKworI2RlZmluZSBCY29weSh4LHkpIG1lbWNweSgoY2hhciAqKSZ4LT5zaWduLCAoY2hhciAqKSZ5LT5zaWduLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeS0+d2RzKnNpemVvZihMb25nKSArIDIqc2l6ZW9mKGludCkpCisKKy8qIE11bHRpcGx5IGEgQmlnaW50IGIgYnkgbSBhbmQgYWRkIGEuICBFaXRoZXIgbW9kaWZpZXMgYiBpbiBwbGFjZSBhbmQgcmV0dXJucworICAgYSBwb2ludGVyIHRvIHRoZSBtb2RpZmllZCBiLCBvciBCZnJlZXMgYiBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBjb3B5LgorICAgT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwuICBJbiB0aGlzIGNhc2UsIGIgd2lsbCBoYXZlIGJlZW4gYWxyZWFkeSBmcmVlZC4gKi8KKworc3RhdGljIEJpZ2ludCAqCittdWx0YWRkKEJpZ2ludCAqYiwgaW50IG0sIGludCBhKSAgICAgICAvKiBtdWx0aXBseSBieSBtIGFuZCBhZGQgYSAqLworeworICAgIGludCBpLCB3ZHM7CisjaWZkZWYgVUxMb25nCisgICAgVUxvbmcgKng7CisgICAgVUxMb25nIGNhcnJ5LCB5OworI2Vsc2UKKyAgICBVTG9uZyBjYXJyeSwgKngsIHk7CisgICAgVUxvbmcgeGksIHo7CisjZW5kaWYKKyAgICBCaWdpbnQgKmIxOworCisgICAgd2RzID0gYi0+d2RzOworICAgIHggPSBiLT54OworICAgIGkgPSAwOworICAgIGNhcnJ5ID0gYTsKKyAgICBkbyB7CisjaWZkZWYgVUxMb25nCisgICAgICAgIHkgPSAqeCAqIChVTExvbmcpbSArIGNhcnJ5OworICAgICAgICBjYXJyeSA9IHkgPj4gMzI7CisgICAgICAgICp4KysgPSAoVUxvbmcpKHkgJiBGRkZGRkZGRik7CisjZWxzZQorICAgICAgICB4aSA9ICp4OworICAgICAgICB5ID0gKHhpICYgMHhmZmZmKSAqIG0gKyBjYXJyeTsKKyAgICAgICAgeiA9ICh4aSA+PiAxNikgKiBtICsgKHkgPj4gMTYpOworICAgICAgICBjYXJyeSA9IHogPj4gMTY7CisgICAgICAgICp4KysgPSAoeiA8PCAxNikgKyAoeSAmIDB4ZmZmZik7CisjZW5kaWYKKyAgICB9CisgICAgd2hpbGUoKytpIDwgd2RzKTsKKyAgICBpZiAoY2FycnkpIHsKKyAgICAgICAgaWYgKHdkcyA+PSBiLT5tYXh3ZHMpIHsKKyAgICAgICAgICAgIGIxID0gQmFsbG9jKGItPmsrMSk7CisgICAgICAgICAgICBpZiAoYjEgPT0gTlVMTCl7CisgICAgICAgICAgICAgICAgQmZyZWUoYik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBCY29weShiMSwgYik7CisgICAgICAgICAgICBCZnJlZShiKTsKKyAgICAgICAgICAgIGIgPSBiMTsKKyAgICAgICAgfQorICAgICAgICBiLT54W3dkcysrXSA9IChVTG9uZyljYXJyeTsKKyAgICAgICAgYi0+d2RzID0gd2RzOworICAgIH0KKyAgICByZXR1cm4gYjsKK30KKworLyogY29udmVydCBhIHN0cmluZyBzIGNvbnRhaW5pbmcgbmQgZGVjaW1hbCBkaWdpdHMgKHBvc3NpYmx5IGNvbnRhaW5pbmcgYQorICAgZGVjaW1hbCBzZXBhcmF0b3IgYXQgcG9zaXRpb24gbmQwLCB3aGljaCBpcyBpZ25vcmVkKSB0byBhIEJpZ2ludC4gIFRoaXMKKyAgIGZ1bmN0aW9uIGNhcnJpZXMgb24gd2hlcmUgdGhlIHBhcnNpbmcgY29kZSBpbiBfUHlfZGdfc3RydG9kIGxlYXZlcyBvZmY6IG9uCisgICBlbnRyeSwgeTkgY29udGFpbnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBmaXJzdCA5IGRpZ2l0cy4gIFJldHVybnMKKyAgIE5VTEwgb24gZmFpbHVyZS4gKi8KKworc3RhdGljIEJpZ2ludCAqCitzMmIoY29uc3QgY2hhciAqcywgaW50IG5kMCwgaW50IG5kLCBVTG9uZyB5OSkKK3sKKyAgICBCaWdpbnQgKmI7CisgICAgaW50IGksIGs7CisgICAgTG9uZyB4LCB5OworCisgICAgeCA9IChuZCArIDgpIC8gOTsKKyAgICBmb3IoayA9IDAsIHkgPSAxOyB4ID4geTsgeSA8PD0gMSwgaysrKSA7CisgICAgYiA9IEJhbGxvYyhrKTsKKyAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBiLT54WzBdID0geTk7CisgICAgYi0+d2RzID0gMTsKKworICAgIGlmIChuZCA8PSA5KQorICAgICAgcmV0dXJuIGI7CisKKyAgICBzICs9IDk7CisgICAgZm9yIChpID0gOTsgaSA8IG5kMDsgaSsrKSB7CisgICAgICAgIGIgPSBtdWx0YWRkKGIsIDEwLCAqcysrIC0gJzAnKTsKKyAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzKys7CisgICAgZm9yKDsgaSA8IG5kOyBpKyspIHsKKyAgICAgICAgYiA9IG11bHRhZGQoYiwgMTAsICpzKysgLSAnMCcpOworICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBiOworfQorCisvKiBjb3VudCBsZWFkaW5nIDAgYml0cyBpbiB0aGUgMzItYml0IGludGVnZXIgeC4gKi8KKworc3RhdGljIGludAoraGkwYml0cyhVTG9uZyB4KQoreworICAgIGludCBrID0gMDsKKworICAgIGlmICghKHggJiAweGZmZmYwMDAwKSkgeworICAgICAgICBrID0gMTY7CisgICAgICAgIHggPDw9IDE2OworICAgIH0KKyAgICBpZiAoISh4ICYgMHhmZjAwMDAwMCkpIHsKKyAgICAgICAgayArPSA4OworICAgICAgICB4IDw8PSA4OworICAgIH0KKyAgICBpZiAoISh4ICYgMHhmMDAwMDAwMCkpIHsKKyAgICAgICAgayArPSA0OworICAgICAgICB4IDw8PSA0OworICAgIH0KKyAgICBpZiAoISh4ICYgMHhjMDAwMDAwMCkpIHsKKyAgICAgICAgayArPSAyOworICAgICAgICB4IDw8PSAyOworICAgIH0KKyAgICBpZiAoISh4ICYgMHg4MDAwMDAwMCkpIHsKKyAgICAgICAgaysrOworICAgICAgICBpZiAoISh4ICYgMHg0MDAwMDAwMCkpCisgICAgICAgICAgICByZXR1cm4gMzI7CisgICAgfQorICAgIHJldHVybiBrOworfQorCisvKiBjb3VudCB0cmFpbGluZyAwIGJpdHMgaW4gdGhlIDMyLWJpdCBpbnRlZ2VyIHksIGFuZCBzaGlmdCB5IHJpZ2h0IGJ5IHRoYXQKKyAgIG51bWJlciBvZiBiaXRzLiAqLworCitzdGF0aWMgaW50CitsbzBiaXRzKFVMb25nICp5KQoreworICAgIGludCBrOworICAgIFVMb25nIHggPSAqeTsKKworICAgIGlmICh4ICYgNykgeworICAgICAgICBpZiAoeCAmIDEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHggJiAyKSB7CisgICAgICAgICAgICAqeSA9IHggPj4gMTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgICp5ID0geCA+PiAyOworICAgICAgICByZXR1cm4gMjsKKyAgICB9CisgICAgayA9IDA7CisgICAgaWYgKCEoeCAmIDB4ZmZmZikpIHsKKyAgICAgICAgayA9IDE2OworICAgICAgICB4ID4+PSAxNjsKKyAgICB9CisgICAgaWYgKCEoeCAmIDB4ZmYpKSB7CisgICAgICAgIGsgKz0gODsKKyAgICAgICAgeCA+Pj0gODsKKyAgICB9CisgICAgaWYgKCEoeCAmIDB4ZikpIHsKKyAgICAgICAgayArPSA0OworICAgICAgICB4ID4+PSA0OworICAgIH0KKyAgICBpZiAoISh4ICYgMHgzKSkgeworICAgICAgICBrICs9IDI7CisgICAgICAgIHggPj49IDI7CisgICAgfQorICAgIGlmICghKHggJiAxKSkgeworICAgICAgICBrKys7CisgICAgICAgIHggPj49IDE7CisgICAgICAgIGlmICgheCkKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICB9CisgICAgKnkgPSB4OworICAgIHJldHVybiBrOworfQorCisvKiBjb252ZXJ0IGEgc21hbGwgbm9ubmVnYXRpdmUgaW50ZWdlciB0byBhIEJpZ2ludCAqLworCitzdGF0aWMgQmlnaW50ICoKK2kyYihpbnQgaSkKK3sKKyAgICBCaWdpbnQgKmI7CisKKyAgICBiID0gQmFsbG9jKDEpOworICAgIGlmIChiID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGItPnhbMF0gPSBpOworICAgIGItPndkcyA9IDE7CisgICAgcmV0dXJuIGI7Cit9CisKKy8qIG11bHRpcGx5IHR3byBCaWdpbnRzLiAgUmV0dXJucyBhIG5ldyBCaWdpbnQsIG9yIE5VTEwgb24gZmFpbHVyZS4gIElnbm9yZXMKKyAgIHRoZSBzaWducyBvZiBhIGFuZCBiLiAqLworCitzdGF0aWMgQmlnaW50ICoKK211bHQoQmlnaW50ICphLCBCaWdpbnQgKmIpCit7CisgICAgQmlnaW50ICpjOworICAgIGludCBrLCB3YSwgd2IsIHdjOworICAgIFVMb25nICp4LCAqeGEsICp4YWUsICp4YiwgKnhiZSwgKnhjLCAqeGMwOworICAgIFVMb25nIHk7CisjaWZkZWYgVUxMb25nCisgICAgVUxMb25nIGNhcnJ5LCB6OworI2Vsc2UKKyAgICBVTG9uZyBjYXJyeSwgejsKKyAgICBVTG9uZyB6MjsKKyNlbmRpZgorCisgICAgaWYgKCghYS0+eFswXSAmJiBhLT53ZHMgPT0gMSkgfHwgKCFiLT54WzBdICYmIGItPndkcyA9PSAxKSkgeworICAgICAgICBjID0gQmFsbG9jKDApOworICAgICAgICBpZiAoYyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGMtPndkcyA9IDE7CisgICAgICAgIGMtPnhbMF0gPSAwOworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisKKyAgICBpZiAoYS0+d2RzIDwgYi0+d2RzKSB7CisgICAgICAgIGMgPSBhOworICAgICAgICBhID0gYjsKKyAgICAgICAgYiA9IGM7CisgICAgfQorICAgIGsgPSBhLT5rOworICAgIHdhID0gYS0+d2RzOworICAgIHdiID0gYi0+d2RzOworICAgIHdjID0gd2EgKyB3YjsKKyAgICBpZiAod2MgPiBhLT5tYXh3ZHMpCisgICAgICAgIGsrKzsKKyAgICBjID0gQmFsbG9jKGspOworICAgIGlmIChjID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvcih4ID0gYy0+eCwgeGEgPSB4ICsgd2M7IHggPCB4YTsgeCsrKQorICAgICAgICAqeCA9IDA7CisgICAgeGEgPSBhLT54OworICAgIHhhZSA9IHhhICsgd2E7CisgICAgeGIgPSBiLT54OworICAgIHhiZSA9IHhiICsgd2I7CisgICAgeGMwID0gYy0+eDsKKyNpZmRlZiBVTExvbmcKKyAgICBmb3IoOyB4YiA8IHhiZTsgeGMwKyspIHsKKyAgICAgICAgaWYgKCh5ID0gKnhiKyspKSB7CisgICAgICAgICAgICB4ID0geGE7CisgICAgICAgICAgICB4YyA9IHhjMDsKKyAgICAgICAgICAgIGNhcnJ5ID0gMDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB6ID0gKngrKyAqIChVTExvbmcpeSArICp4YyArIGNhcnJ5OworICAgICAgICAgICAgICAgIGNhcnJ5ID0geiA+PiAzMjsKKyAgICAgICAgICAgICAgICAqeGMrKyA9IChVTG9uZykoeiAmIEZGRkZGRkZGKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlKHggPCB4YWUpOworICAgICAgICAgICAgKnhjID0gKFVMb25nKWNhcnJ5OworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBmb3IoOyB4YiA8IHhiZTsgeGIrKywgeGMwKyspIHsKKyAgICAgICAgaWYgKHkgPSAqeGIgJiAweGZmZmYpIHsKKyAgICAgICAgICAgIHggPSB4YTsKKyAgICAgICAgICAgIHhjID0geGMwOworICAgICAgICAgICAgY2FycnkgPSAwOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHogPSAoKnggJiAweGZmZmYpICogeSArICgqeGMgJiAweGZmZmYpICsgY2Fycnk7CisgICAgICAgICAgICAgICAgY2FycnkgPSB6ID4+IDE2OworICAgICAgICAgICAgICAgIHoyID0gKCp4KysgPj4gMTYpICogeSArICgqeGMgPj4gMTYpICsgY2Fycnk7CisgICAgICAgICAgICAgICAgY2FycnkgPSB6MiA+PiAxNjsKKyAgICAgICAgICAgICAgICBTdG9yZWluYyh4YywgejIsIHopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUoeCA8IHhhZSk7CisgICAgICAgICAgICAqeGMgPSBjYXJyeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeSA9ICp4YiA+PiAxNikgeworICAgICAgICAgICAgeCA9IHhhOworICAgICAgICAgICAgeGMgPSB4YzA7CisgICAgICAgICAgICBjYXJyeSA9IDA7CisgICAgICAgICAgICB6MiA9ICp4YzsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB6ID0gKCp4ICYgMHhmZmZmKSAqIHkgKyAoKnhjID4+IDE2KSArIGNhcnJ5OworICAgICAgICAgICAgICAgIGNhcnJ5ID0geiA+PiAxNjsKKyAgICAgICAgICAgICAgICBTdG9yZWluYyh4YywgeiwgejIpOworICAgICAgICAgICAgICAgIHoyID0gKCp4KysgPj4gMTYpICogeSArICgqeGMgJiAweGZmZmYpICsgY2Fycnk7CisgICAgICAgICAgICAgICAgY2FycnkgPSB6MiA+PiAxNjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlKHggPCB4YWUpOworICAgICAgICAgICAgKnhjID0gejI7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBmb3IoeGMwID0gYy0+eCwgeGMgPSB4YzAgKyB3Yzsgd2MgPiAwICYmICEqLS14YzsgLS13YykgOworICAgIGMtPndkcyA9IHdjOworICAgIHJldHVybiBjOworfQorCisjaWZuZGVmIFB5X1VTSU5HX01FTU9SWV9ERUJVR0dFUgorCisvKiBwNXMgaXMgYSBsaW5rZWQgbGlzdCBvZiBwb3dlcnMgb2YgNSBvZiB0aGUgZm9ybSA1KiooMioqaSksIGkgPj0gMiAqLworCitzdGF0aWMgQmlnaW50ICpwNXM7CisKKy8qIG11bHRpcGx5IHRoZSBCaWdpbnQgYiBieSA1KiprLiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHJlc3VsdCwgb3IgTlVMTCBvbgorICAgZmFpbHVyZTsgaWYgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMgZGlzdGluY3QgZnJvbSBiIHRoZW4gdGhlIG9yaWdpbmFsCisgICBCaWdpbnQgYiB3aWxsIGhhdmUgYmVlbiBCZnJlZSdkLiAgIElnbm9yZXMgdGhlIHNpZ24gb2YgYi4gKi8KKworc3RhdGljIEJpZ2ludCAqCitwb3c1bXVsdChCaWdpbnQgKmIsIGludCBrKQoreworICAgIEJpZ2ludCAqYjEsICpwNSwgKnA1MTsKKyAgICBpbnQgaTsKKyAgICBzdGF0aWMgaW50IHAwNVszXSA9IHsgNSwgMjUsIDEyNSB9OworCisgICAgaWYgKChpID0gayAmIDMpKSB7CisgICAgICAgIGIgPSBtdWx0YWRkKGIsIHAwNVtpLTFdLCAwKTsKKyAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghKGsgPj49IDIpKQorICAgICAgICByZXR1cm4gYjsKKyAgICBwNSA9IHA1czsKKyAgICBpZiAoIXA1KSB7CisgICAgICAgIC8qIGZpcnN0IHRpbWUgKi8KKyAgICAgICAgcDUgPSBpMmIoNjI1KTsKKyAgICAgICAgaWYgKHA1ID09IE5VTEwpIHsKKyAgICAgICAgICAgIEJmcmVlKGIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcDVzID0gcDU7CisgICAgICAgIHA1LT5uZXh0ID0gMDsKKyAgICB9CisgICAgZm9yKDs7KSB7CisgICAgICAgIGlmIChrICYgMSkgeworICAgICAgICAgICAgYjEgPSBtdWx0KGIsIHA1KTsKKyAgICAgICAgICAgIEJmcmVlKGIpOworICAgICAgICAgICAgYiA9IGIxOworICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShrID4+PSAxKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwNTEgPSBwNS0+bmV4dDsKKyAgICAgICAgaWYgKCFwNTEpIHsKKyAgICAgICAgICAgIHA1MSA9IG11bHQocDUscDUpOworICAgICAgICAgICAgaWYgKHA1MSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgQmZyZWUoYik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwNTEtPm5leHQgPSAwOworICAgICAgICAgICAgcDUtPm5leHQgPSBwNTE7CisgICAgICAgIH0KKyAgICAgICAgcDUgPSBwNTE7CisgICAgfQorICAgIHJldHVybiBiOworfQorCisjZWxzZQorCisvKiBWZXJzaW9uIG9mIHBvdzVtdWx0IHRoYXQgZG9lc24ndCBjYWNoZSBwb3dlcnMgb2YgNS4gUHJvdmlkZWQgZm9yCisgICB0aGUgYmVuZWZpdCBvZiBtZW1vcnkgZGVidWdnaW5nIHRvb2xzIGxpa2UgVmFsZ3JpbmQuICovCisKK3N0YXRpYyBCaWdpbnQgKgorcG93NW11bHQoQmlnaW50ICpiLCBpbnQgaykKK3sKKyAgICBCaWdpbnQgKmIxLCAqcDUsICpwNTE7CisgICAgaW50IGk7CisgICAgc3RhdGljIGludCBwMDVbM10gPSB7IDUsIDI1LCAxMjUgfTsKKworICAgIGlmICgoaSA9IGsgJiAzKSkgeworICAgICAgICBiID0gbXVsdGFkZChiLCBwMDVbaS0xXSwgMCk7CisgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShrID4+PSAyKSkKKyAgICAgICAgcmV0dXJuIGI7CisgICAgcDUgPSBpMmIoNjI1KTsKKyAgICBpZiAocDUgPT0gTlVMTCkgeworICAgICAgICBCZnJlZShiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZm9yKDs7KSB7CisgICAgICAgIGlmIChrICYgMSkgeworICAgICAgICAgICAgYjEgPSBtdWx0KGIsIHA1KTsKKyAgICAgICAgICAgIEJmcmVlKGIpOworICAgICAgICAgICAgYiA9IGIxOworICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIEJmcmVlKHA1KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIShrID4+PSAxKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwNTEgPSBtdWx0KHA1LCBwNSk7CisgICAgICAgIEJmcmVlKHA1KTsKKyAgICAgICAgcDUgPSBwNTE7CisgICAgICAgIGlmIChwNSA9PSBOVUxMKSB7CisgICAgICAgICAgICBCZnJlZShiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIEJmcmVlKHA1KTsKKyAgICByZXR1cm4gYjsKK30KKworI2VuZGlmIC8qIFB5X1VTSU5HX01FTU9SWV9ERUJVR0dFUiAqLworCisvKiBzaGlmdCBhIEJpZ2ludCBiIGxlZnQgYnkgayBiaXRzLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc2hpZnRlZCByZXN1bHQsCisgICBvciBOVUxMIG9uIGZhaWx1cmUuICBJZiB0aGUgcmV0dXJuZWQgcG9pbnRlciBpcyBkaXN0aW5jdCBmcm9tIGIgdGhlbiB0aGUKKyAgIG9yaWdpbmFsIGIgd2lsbCBoYXZlIGJlZW4gQmZyZWUnZC4gICBJZ25vcmVzIHRoZSBzaWduIG9mIGIuICovCisKK3N0YXRpYyBCaWdpbnQgKgorbHNoaWZ0KEJpZ2ludCAqYiwgaW50IGspCit7CisgICAgaW50IGksIGsxLCBuLCBuMTsKKyAgICBCaWdpbnQgKmIxOworICAgIFVMb25nICp4LCAqeDEsICp4ZSwgejsKKworICAgIGlmICghayB8fCAoIWItPnhbMF0gJiYgYi0+d2RzID09IDEpKQorICAgICAgICByZXR1cm4gYjsKKworICAgIG4gPSBrID4+IDU7CisgICAgazEgPSBiLT5rOworICAgIG4xID0gbiArIGItPndkcyArIDE7CisgICAgZm9yKGkgPSBiLT5tYXh3ZHM7IG4xID4gaTsgaSA8PD0gMSkKKyAgICAgICAgazErKzsKKyAgICBiMSA9IEJhbGxvYyhrMSk7CisgICAgaWYgKGIxID09IE5VTEwpIHsKKyAgICAgICAgQmZyZWUoYik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB4MSA9IGIxLT54OworICAgIGZvcihpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgKngxKysgPSAwOworICAgIHggPSBiLT54OworICAgIHhlID0geCArIGItPndkczsKKyAgICBpZiAoayAmPSAweDFmKSB7CisgICAgICAgIGsxID0gMzIgLSBrOworICAgICAgICB6ID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgKngxKysgPSAqeCA8PCBrIHwgejsKKyAgICAgICAgICAgIHogPSAqeCsrID4+IGsxOworICAgICAgICB9CisgICAgICAgIHdoaWxlKHggPCB4ZSk7CisgICAgICAgIGlmICgoKngxID0geikpCisgICAgICAgICAgICArK24xOworICAgIH0KKyAgICBlbHNlIGRvCisgICAgICAgICAgICAgKngxKysgPSAqeCsrOworICAgICAgICB3aGlsZSh4IDwgeGUpOworICAgIGIxLT53ZHMgPSBuMSAtIDE7CisgICAgQmZyZWUoYik7CisgICAgcmV0dXJuIGIxOworfQorCisvKiBEbyBhIHRocmVlLXdheSBjb21wYXJlIG9mIGEgYW5kIGIsIHJldHVybmluZyAtMSBpZiBhIDwgYiwgMCBpZiBhID09IGIgYW5kCisgICAxIGlmIGEgPiBiLiAgSWdub3JlcyBzaWducyBvZiBhIGFuZCBiLiAqLworCitzdGF0aWMgaW50CitjbXAoQmlnaW50ICphLCBCaWdpbnQgKmIpCit7CisgICAgVUxvbmcgKnhhLCAqeGEwLCAqeGIsICp4YjA7CisgICAgaW50IGksIGo7CisKKyAgICBpID0gYS0+d2RzOworICAgIGogPSBiLT53ZHM7CisjaWZkZWYgREVCVUcKKyAgICBpZiAoaSA+IDEgJiYgIWEtPnhbaS0xXSkKKyAgICAgICAgQnVnKCJjbXAgY2FsbGVkIHdpdGggYS0+eFthLT53ZHMtMV0gPT0gMCIpOworICAgIGlmIChqID4gMSAmJiAhYi0+eFtqLTFdKQorICAgICAgICBCdWcoImNtcCBjYWxsZWQgd2l0aCBiLT54W2ItPndkcy0xXSA9PSAwIik7CisjZW5kaWYKKyAgICBpZiAoaSAtPSBqKQorICAgICAgICByZXR1cm4gaTsKKyAgICB4YTAgPSBhLT54OworICAgIHhhID0geGEwICsgajsKKyAgICB4YjAgPSBiLT54OworICAgIHhiID0geGIwICsgajsKKyAgICBmb3IoOzspIHsKKyAgICAgICAgaWYgKCotLXhhICE9ICotLXhiKQorICAgICAgICAgICAgcmV0dXJuICp4YSA8ICp4YiA/IC0xIDogMTsKKyAgICAgICAgaWYgKHhhIDw9IHhhMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogVGFrZSB0aGUgZGlmZmVyZW5jZSBvZiBCaWdpbnRzIGEgYW5kIGIsIHJldHVybmluZyBhIG5ldyBCaWdpbnQuICBSZXR1cm5zCisgICBOVUxMIG9uIGZhaWx1cmUuICBUaGUgc2lnbnMgb2YgYSBhbmQgYiBhcmUgaWdub3JlZCwgYnV0IHRoZSBzaWduIG9mIHRoZQorICAgcmVzdWx0IGlzIHNldCBhcHByb3ByaWF0ZWx5LiAqLworCitzdGF0aWMgQmlnaW50ICoKK2RpZmYoQmlnaW50ICphLCBCaWdpbnQgKmIpCit7CisgICAgQmlnaW50ICpjOworICAgIGludCBpLCB3YSwgd2I7CisgICAgVUxvbmcgKnhhLCAqeGFlLCAqeGIsICp4YmUsICp4YzsKKyNpZmRlZiBVTExvbmcKKyAgICBVTExvbmcgYm9ycm93LCB5OworI2Vsc2UKKyAgICBVTG9uZyBib3Jyb3csIHk7CisgICAgVUxvbmcgejsKKyNlbmRpZgorCisgICAgaSA9IGNtcChhLGIpOworICAgIGlmICghaSkgeworICAgICAgICBjID0gQmFsbG9jKDApOworICAgICAgICBpZiAoYyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGMtPndkcyA9IDE7CisgICAgICAgIGMtPnhbMF0gPSAwOworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisgICAgaWYgKGkgPCAwKSB7CisgICAgICAgIGMgPSBhOworICAgICAgICBhID0gYjsKKyAgICAgICAgYiA9IGM7CisgICAgICAgIGkgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGkgPSAwOworICAgIGMgPSBCYWxsb2MoYS0+ayk7CisgICAgaWYgKGMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYy0+c2lnbiA9IGk7CisgICAgd2EgPSBhLT53ZHM7CisgICAgeGEgPSBhLT54OworICAgIHhhZSA9IHhhICsgd2E7CisgICAgd2IgPSBiLT53ZHM7CisgICAgeGIgPSBiLT54OworICAgIHhiZSA9IHhiICsgd2I7CisgICAgeGMgPSBjLT54OworICAgIGJvcnJvdyA9IDA7CisjaWZkZWYgVUxMb25nCisgICAgZG8geworICAgICAgICB5ID0gKFVMTG9uZykqeGErKyAtICp4YisrIC0gYm9ycm93OworICAgICAgICBib3Jyb3cgPSB5ID4+IDMyICYgKFVMb25nKTE7CisgICAgICAgICp4YysrID0gKFVMb25nKSh5ICYgRkZGRkZGRkYpOworICAgIH0KKyAgICB3aGlsZSh4YiA8IHhiZSk7CisgICAgd2hpbGUoeGEgPCB4YWUpIHsKKyAgICAgICAgeSA9ICp4YSsrIC0gYm9ycm93OworICAgICAgICBib3Jyb3cgPSB5ID4+IDMyICYgKFVMb25nKTE7CisgICAgICAgICp4YysrID0gKFVMb25nKSh5ICYgRkZGRkZGRkYpOworICAgIH0KKyNlbHNlCisgICAgZG8geworICAgICAgICB5ID0gKCp4YSAmIDB4ZmZmZikgLSAoKnhiICYgMHhmZmZmKSAtIGJvcnJvdzsKKyAgICAgICAgYm9ycm93ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKyAgICAgICAgeiA9ICgqeGErKyA+PiAxNikgLSAoKnhiKysgPj4gMTYpIC0gYm9ycm93OworICAgICAgICBib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OworICAgICAgICBTdG9yZWluYyh4YywgeiwgeSk7CisgICAgfQorICAgIHdoaWxlKHhiIDwgeGJlKTsKKyAgICB3aGlsZSh4YSA8IHhhZSkgeworICAgICAgICB5ID0gKCp4YSAmIDB4ZmZmZikgLSBib3Jyb3c7CisgICAgICAgIGJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisgICAgICAgIHogPSAoKnhhKysgPj4gMTYpIC0gYm9ycm93OworICAgICAgICBib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OworICAgICAgICBTdG9yZWluYyh4YywgeiwgeSk7CisgICAgfQorI2VuZGlmCisgICAgd2hpbGUoISotLXhjKQorICAgICAgICB3YS0tOworICAgIGMtPndkcyA9IHdhOworICAgIHJldHVybiBjOworfQorCisvKiBHaXZlbiBhIHBvc2l0aXZlIG5vcm1hbCBkb3VibGUgeCwgcmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgdGhlCisgICBuZXh0IGRvdWJsZSB1cC4gIERvZXNuJ3QgZ2l2ZSBjb3JyZWN0IHJlc3VsdHMgZm9yIHN1Ym5vcm1hbHMuICovCisKK3N0YXRpYyBkb3VibGUKK3VscChVICp4KQoreworICAgIExvbmcgTDsKKyAgICBVIHU7CisKKyAgICBMID0gKHdvcmQwKHgpICYgRXhwX21hc2spIC0gKFAtMSkqRXhwX21zazE7CisgICAgd29yZDAoJnUpID0gTDsKKyAgICB3b3JkMSgmdSkgPSAwOworICAgIHJldHVybiBkdmFsKCZ1KTsKK30KKworLyogQ29udmVydCBhIEJpZ2ludCB0byBhIGRvdWJsZSBwbHVzIGFuIGV4cG9uZW50ICovCisKK3N0YXRpYyBkb3VibGUKK2IyZChCaWdpbnQgKmEsIGludCAqZSkKK3sKKyAgICBVTG9uZyAqeGEsICp4YTAsIHcsIHksIHo7CisgICAgaW50IGs7CisgICAgVSBkOworCisgICAgeGEwID0gYS0+eDsKKyAgICB4YSA9IHhhMCArIGEtPndkczsKKyAgICB5ID0gKi0teGE7CisjaWZkZWYgREVCVUcKKyAgICBpZiAoIXkpIEJ1ZygiemVybyB5IGluIGIyZCIpOworI2VuZGlmCisgICAgayA9IGhpMGJpdHMoeSk7CisgICAgKmUgPSAzMiAtIGs7CisgICAgaWYgKGsgPCBFYml0cykgeworICAgICAgICB3b3JkMCgmZCkgPSBFeHBfMSB8IHkgPj4gKEViaXRzIC0gayk7CisgICAgICAgIHcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKyAgICAgICAgd29yZDEoJmQpID0geSA8PCAoKDMyLUViaXRzKSArIGspIHwgdyA+PiAoRWJpdHMgLSBrKTsKKyAgICAgICAgZ290byByZXRfZDsKKyAgICB9CisgICAgeiA9IHhhID4geGEwID8gKi0teGEgOiAwOworICAgIGlmIChrIC09IEViaXRzKSB7CisgICAgICAgIHdvcmQwKCZkKSA9IEV4cF8xIHwgeSA8PCBrIHwgeiA+PiAoMzIgLSBrKTsKKyAgICAgICAgeSA9IHhhID4geGEwID8gKi0teGEgOiAwOworICAgICAgICB3b3JkMSgmZCkgPSB6IDw8IGsgfCB5ID4+ICgzMiAtIGspOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgd29yZDAoJmQpID0gRXhwXzEgfCB5OworICAgICAgICB3b3JkMSgmZCkgPSB6OworICAgIH0KKyAgcmV0X2Q6CisgICAgcmV0dXJuIGR2YWwoJmQpOworfQorCisvKiBDb252ZXJ0IGEgc2NhbGVkIGRvdWJsZSB0byBhIEJpZ2ludCBwbHVzIGFuIGV4cG9uZW50LiAgU2ltaWxhciB0byBkMmIsCisgICBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIHRoZSBzY2FsZSBwYXJhbWV0ZXIgdXNlZCBpbiBfUHlfZGdfc3RydG9kICh3aGljaAorICAgc2hvdWxkIGJlIGVpdGhlciAwIG9yIDIqUCksIGFuZCB0aGUgbm9ybWFsaXphdGlvbiBmb3IgdGhlIHJldHVybiB2YWx1ZSBpcworICAgZGlmZmVyZW50IChzZWUgYmVsb3cpLiAgT24gaW5wdXQsIGQgc2hvdWxkIGJlIGZpbml0ZSBhbmQgbm9ubmVnYXRpdmUsIGFuZCBkCisgICAvIDIqKnNjYWxlIHNob3VsZCBiZSBleGFjdGx5IHJlcHJlc2VudGFibGUgYXMgYW4gSUVFRSA3NTQgZG91YmxlLgorCisgICBSZXR1cm5zIGEgQmlnaW50IGIgYW5kIGFuIGludGVnZXIgZSBzdWNoIHRoYXQKKworICAgICBkdmFsKGQpIC8gMioqc2NhbGUgPSBiICogMioqZS4KKworICAgVW5saWtlIGQyYiwgYiBpcyBub3QgbmVjZXNzYXJpbHkgb2RkOiBiIGFuZCBlIGFyZSBub3JtYWxpemVkIHNvCisgICB0aGF0IGVpdGhlciAyKiooUC0xKSA8PSBiIDwgMioqUCBhbmQgZSA+PSBFdGlueSwgb3IgYiA8IDIqKlAKKyAgIGFuZCBlID09IEV0aW55LiAgVGhpcyBhcHBsaWVzIGVxdWFsbHkgdG8gYW4gaW5wdXQgb2YgMC4wOiBpbiB0aGF0CisgICBjYXNlIHRoZSByZXR1cm4gdmFsdWVzIGFyZSBiID0gMCBhbmQgZSA9IEV0aW55LgorCisgICBUaGUgYWJvdmUgbm9ybWFsaXphdGlvbiBlbnN1cmVzIHRoYXQgZm9yIGFsbCBwb3NzaWJsZSBpbnB1dHMgZCwKKyAgIDIqKmUgZ2l2ZXMgdWxwKGQvMioqc2NhbGUpLgorCisgICBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KKyovCisKK3N0YXRpYyBCaWdpbnQgKgorc2QyYihVICpkLCBpbnQgc2NhbGUsIGludCAqZSkKK3sKKyAgICBCaWdpbnQgKmI7CisKKyAgICBiID0gQmFsbG9jKDEpOworICAgIGlmIChiID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIC8qIEZpcnN0IGNvbnN0cnVjdCBiIGFuZCBlIGFzc3VtaW5nIHRoYXQgc2NhbGUgPT0gMC4gKi8KKyAgICBiLT53ZHMgPSAyOworICAgIGItPnhbMF0gPSB3b3JkMShkKTsKKyAgICBiLT54WzFdID0gd29yZDAoZCkgJiBGcmFjX21hc2s7CisgICAgKmUgPSBFdGlueSAtIDEgKyAoaW50KSgod29yZDAoZCkgJiBFeHBfbWFzaykgPj4gRXhwX3NoaWZ0KTsKKyAgICBpZiAoKmUgPCBFdGlueSkKKyAgICAgICAgKmUgPSBFdGlueTsKKyAgICBlbHNlCisgICAgICAgIGItPnhbMV0gfD0gRXhwX21zazE7CisKKyAgICAvKiBOb3cgYWRqdXN0IGZvciBzY2FsZSwgcHJvdmlkZWQgdGhhdCBiICE9IDAuICovCisgICAgaWYgKHNjYWxlICYmIChiLT54WzBdIHx8IGItPnhbMV0pKSB7CisgICAgICAgICplIC09IHNjYWxlOworICAgICAgICBpZiAoKmUgPCBFdGlueSkgeworICAgICAgICAgICAgc2NhbGUgPSBFdGlueSAtICplOworICAgICAgICAgICAgKmUgPSBFdGlueTsKKyAgICAgICAgICAgIC8qIFdlIGNhbid0IHNoaWZ0IG1vcmUgdGhhbiBQLTEgYml0cyB3aXRob3V0IHNoaWZ0aW5nIG91dCBhIDEuICovCisgICAgICAgICAgICBhc3NlcnQoMCA8IHNjYWxlICYmIHNjYWxlIDw9IFAgLSAxKTsKKyAgICAgICAgICAgIGlmIChzY2FsZSA+PSAzMikgeworICAgICAgICAgICAgICAgIC8qIFRoZSBiaXRzIHNoaWZ0ZWQgb3V0IHNob3VsZCBhbGwgYmUgemVyby4gKi8KKyAgICAgICAgICAgICAgICBhc3NlcnQoYi0+eFswXSA9PSAwKTsKKyAgICAgICAgICAgICAgICBiLT54WzBdID0gYi0+eFsxXTsKKyAgICAgICAgICAgICAgICBiLT54WzFdID0gMDsKKyAgICAgICAgICAgICAgICBzY2FsZSAtPSAzMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzY2FsZSkgeworICAgICAgICAgICAgICAgIC8qIFRoZSBiaXRzIHNoaWZ0ZWQgb3V0IHNob3VsZCBhbGwgYmUgemVyby4gKi8KKyAgICAgICAgICAgICAgICBhc3NlcnQoYi0+eFswXSA8PCAoMzIgLSBzY2FsZSkgPT0gMCk7CisgICAgICAgICAgICAgICAgYi0+eFswXSA9IChiLT54WzBdID4+IHNjYWxlKSB8IChiLT54WzFdIDw8ICgzMiAtIHNjYWxlKSk7CisgICAgICAgICAgICAgICAgYi0+eFsxXSA+Pj0gc2NhbGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLyogRW5zdXJlIGIgaXMgbm9ybWFsaXplZC4gKi8KKyAgICBpZiAoIWItPnhbMV0pCisgICAgICAgIGItPndkcyA9IDE7CisKKyAgICByZXR1cm4gYjsKK30KKworLyogQ29udmVydCBhIGRvdWJsZSB0byBhIEJpZ2ludCBwbHVzIGFuIGV4cG9uZW50LiAgUmV0dXJuIE5VTEwgb24gZmFpbHVyZS4KKworICAgR2l2ZW4gYSBmaW5pdGUgbm9uemVybyBkb3VibGUgZCwgcmV0dXJuIGFuIG9kZCBCaWdpbnQgYiBhbmQgZXhwb25lbnQgKmUKKyAgIHN1Y2ggdGhhdCBmYWJzKGQpID0gYiAqIDIqKmUuICBPbiByZXR1cm4sICpiYml0cyBnaXZlcyB0aGUgbnVtYmVyIG9mCisgICBzaWduaWZpY2FudCBiaXRzIG9mIGI7IHRoYXQgaXMsIDIqKigqYmJpdHMtMSkgPD0gYiA8IDIqKigqYmJpdHMpLgorCisgICBJZiBkIGlzIHplcm8sIHRoZW4gYiA9PSAwLCAqZSA9PSAtMTAxMCwgKmJiaXRzID0gMC4KKyAqLworCitzdGF0aWMgQmlnaW50ICoKK2QyYihVICpkLCBpbnQgKmUsIGludCAqYml0cykKK3sKKyAgICBCaWdpbnQgKmI7CisgICAgaW50IGRlLCBrOworICAgIFVMb25nICp4LCB5LCB6OworICAgIGludCBpOworCisgICAgYiA9IEJhbGxvYygxKTsKKyAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB4ID0gYi0+eDsKKworICAgIHogPSB3b3JkMChkKSAmIEZyYWNfbWFzazsKKyAgICB3b3JkMChkKSAmPSAweDdmZmZmZmZmOyAgIC8qIGNsZWFyIHNpZ24gYml0LCB3aGljaCB3ZSBpZ25vcmUgKi8KKyAgICBpZiAoKGRlID0gKGludCkod29yZDAoZCkgPj4gRXhwX3NoaWZ0KSkpCisgICAgICAgIHogfD0gRXhwX21zazE7CisgICAgaWYgKCh5ID0gd29yZDEoZCkpKSB7CisgICAgICAgIGlmICgoayA9IGxvMGJpdHMoJnkpKSkgeworICAgICAgICAgICAgeFswXSA9IHkgfCB6IDw8ICgzMiAtIGspOworICAgICAgICAgICAgeiA+Pj0gazsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICB4WzBdID0geTsKKyAgICAgICAgaSA9CisgICAgICAgICAgICBiLT53ZHMgPSAoeFsxXSA9IHopID8gMiA6IDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBrID0gbG8wYml0cygmeik7CisgICAgICAgIHhbMF0gPSB6OworICAgICAgICBpID0KKyAgICAgICAgICAgIGItPndkcyA9IDE7CisgICAgICAgIGsgKz0gMzI7CisgICAgfQorICAgIGlmIChkZSkgeworICAgICAgICAqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgazsKKyAgICAgICAgKmJpdHMgPSBQIC0gazsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICplID0gZGUgLSBCaWFzIC0gKFAtMSkgKyAxICsgazsKKyAgICAgICAgKmJpdHMgPSAzMippIC0gaGkwYml0cyh4W2ktMV0pOworICAgIH0KKyAgICByZXR1cm4gYjsKK30KKworLyogQ29tcHV0ZSB0aGUgcmF0aW8gb2YgdHdvIEJpZ2ludHMsIGFzIGEgZG91YmxlLiAgVGhlIHJlc3VsdCBtYXkgaGF2ZSBhbgorICAgZXJyb3Igb2YgdXAgdG8gMi41IHVscHMuICovCisKK3N0YXRpYyBkb3VibGUKK3JhdGlvKEJpZ2ludCAqYSwgQmlnaW50ICpiKQoreworICAgIFUgZGEsIGRiOworICAgIGludCBrLCBrYSwga2I7CisKKyAgICBkdmFsKCZkYSkgPSBiMmQoYSwgJmthKTsKKyAgICBkdmFsKCZkYikgPSBiMmQoYiwgJmtiKTsKKyAgICBrID0ga2EgLSBrYiArIDMyKihhLT53ZHMgLSBiLT53ZHMpOworICAgIGlmIChrID4gMCkKKyAgICAgICAgd29yZDAoJmRhKSArPSBrKkV4cF9tc2sxOworICAgIGVsc2UgeworICAgICAgICBrID0gLWs7CisgICAgICAgIHdvcmQwKCZkYikgKz0gaypFeHBfbXNrMTsKKyAgICB9CisgICAgcmV0dXJuIGR2YWwoJmRhKSAvIGR2YWwoJmRiKTsKK30KKworc3RhdGljIGNvbnN0IGRvdWJsZQordGVuc1tdID0geworICAgIDFlMCwgMWUxLCAxZTIsIDFlMywgMWU0LCAxZTUsIDFlNiwgMWU3LCAxZTgsIDFlOSwKKyAgICAxZTEwLCAxZTExLCAxZTEyLCAxZTEzLCAxZTE0LCAxZTE1LCAxZTE2LCAxZTE3LCAxZTE4LCAxZTE5LAorICAgIDFlMjAsIDFlMjEsIDFlMjIKK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUKK2JpZ3RlbnNbXSA9IHsgMWUxNiwgMWUzMiwgMWU2NCwgMWUxMjgsIDFlMjU2IH07CitzdGF0aWMgY29uc3QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiwgMWUtNjQsIDFlLTEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAwNzE5OTI1NDc0MDk5Mi4qOTAwNzE5OTI1NDc0MDk5Mi5lLTI1NgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA9IDJeMTA2ICogMWUtMjU2ICovCit9OworLyogVGhlIGZhY3RvciBvZiAyXjUzIGluIHRpbnl0ZW5zWzRdIGhlbHBzIHVzIGF2b2lkIHNldHRpbmcgdGhlIHVuZGVyZmxvdyAqLworLyogZmxhZyB1bm5lY2Vzc2FyaWx5LiAgSXQgbGVhZHMgdG8gYSBzb25nIGFuZCBkYW5jZSBhdCB0aGUgZW5kIG9mIHN0cnRvZC4gKi8KKyNkZWZpbmUgU2NhbGVfQml0IDB4MTAKKyNkZWZpbmUgbl9iaWd0ZW5zIDUKKworI2RlZmluZSBVTGJpdHMgMzIKKyNkZWZpbmUga3NoaWZ0IDUKKyNkZWZpbmUga21hc2sgMzEKKworCitzdGF0aWMgaW50Citkc2hpZnQoQmlnaW50ICpiLCBpbnQgcDIpCit7CisgICAgaW50IHJ2ID0gaGkwYml0cyhiLT54W2ItPndkcy0xXSkgLSA0OworICAgIGlmIChwMiA+IDApCisgICAgICAgIHJ2IC09IHAyOworICAgIHJldHVybiBydiAmIGttYXNrOworfQorCisvKiBzcGVjaWFsIGNhc2Ugb2YgQmlnaW50IGRpdmlzaW9uLiAgVGhlIHF1b3RpZW50IGlzIGFsd2F5cyBpbiB0aGUgcmFuZ2UgMCA8PQorICAgcXVvdGllbnQgPCAxMCwgYW5kIG9uIGVudHJ5IHRoZSBkaXZpc29yIFMgaXMgbm9ybWFsaXplZCBzbyB0aGF0IGl0cyB0b3AgNAorICAgYml0cyAoMjgtLTMxKSBhcmUgemVybyBhbmQgYml0IDI3IGlzIHNldC4gKi8KKworc3RhdGljIGludAorcXVvcmVtKEJpZ2ludCAqYiwgQmlnaW50ICpTKQoreworICAgIGludCBuOworICAgIFVMb25nICpieCwgKmJ4ZSwgcSwgKnN4LCAqc3hlOworI2lmZGVmIFVMTG9uZworICAgIFVMTG9uZyBib3Jyb3csIGNhcnJ5LCB5LCB5czsKKyNlbHNlCisgICAgVUxvbmcgYm9ycm93LCBjYXJyeSwgeSwgeXM7CisgICAgVUxvbmcgc2ksIHosIHpzOworI2VuZGlmCisKKyAgICBuID0gUy0+d2RzOworI2lmZGVmIERFQlVHCisgICAgLypkZWJ1ZyovIGlmIChiLT53ZHMgPiBuKQorICAgICAgICAvKmRlYnVnKi8gICAgICAgQnVnKCJvdmVyc2l6ZSBiIGluIHF1b3JlbSIpOworI2VuZGlmCisgICAgaWYgKGItPndkcyA8IG4pCisgICAgICAgIHJldHVybiAwOworICAgIHN4ID0gUy0+eDsKKyAgICBzeGUgPSBzeCArIC0tbjsKKyAgICBieCA9IGItPng7CisgICAgYnhlID0gYnggKyBuOworICAgIHEgPSAqYnhlIC8gKCpzeGUgKyAxKTsgICAgICAvKiBlbnN1cmUgcSA8PSB0cnVlIHF1b3RpZW50ICovCisjaWZkZWYgREVCVUcKKyAgICAvKmRlYnVnKi8gaWYgKHEgPiA5KQorICAgICAgICAvKmRlYnVnKi8gICAgICAgQnVnKCJvdmVyc2l6ZWQgcXVvdGllbnQgaW4gcXVvcmVtIik7CisjZW5kaWYKKyAgICBpZiAocSkgeworICAgICAgICBib3Jyb3cgPSAwOworICAgICAgICBjYXJyeSA9IDA7CisgICAgICAgIGRvIHsKKyNpZmRlZiBVTExvbmcKKyAgICAgICAgICAgIHlzID0gKnN4KysgKiAoVUxMb25nKXEgKyBjYXJyeTsKKyAgICAgICAgICAgIGNhcnJ5ID0geXMgPj4gMzI7CisgICAgICAgICAgICB5ID0gKmJ4IC0gKHlzICYgRkZGRkZGRkYpIC0gYm9ycm93OworICAgICAgICAgICAgYm9ycm93ID0geSA+PiAzMiAmIChVTG9uZykxOworICAgICAgICAgICAgKmJ4KysgPSAoVUxvbmcpKHkgJiBGRkZGRkZGRik7CisjZWxzZQorICAgICAgICAgICAgc2kgPSAqc3grKzsKKyAgICAgICAgICAgIHlzID0gKHNpICYgMHhmZmZmKSAqIHEgKyBjYXJyeTsKKyAgICAgICAgICAgIHpzID0gKHNpID4+IDE2KSAqIHEgKyAoeXMgPj4gMTYpOworICAgICAgICAgICAgY2FycnkgPSB6cyA+PiAxNjsKKyAgICAgICAgICAgIHkgPSAoKmJ4ICYgMHhmZmZmKSAtICh5cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisgICAgICAgICAgICBib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworICAgICAgICAgICAgeiA9ICgqYnggPj4gMTYpIC0gKHpzICYgMHhmZmZmKSAtIGJvcnJvdzsKKyAgICAgICAgICAgIGJvcnJvdyA9ICh6ICYgMHgxMDAwMCkgPj4gMTY7CisgICAgICAgICAgICBTdG9yZWluYyhieCwgeiwgeSk7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICB3aGlsZShzeCA8PSBzeGUpOworICAgICAgICBpZiAoISpieGUpIHsKKyAgICAgICAgICAgIGJ4ID0gYi0+eDsKKyAgICAgICAgICAgIHdoaWxlKC0tYnhlID4gYnggJiYgISpieGUpCisgICAgICAgICAgICAgICAgLS1uOworICAgICAgICAgICAgYi0+d2RzID0gbjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY21wKGIsIFMpID49IDApIHsKKyAgICAgICAgcSsrOworICAgICAgICBib3Jyb3cgPSAwOworICAgICAgICBjYXJyeSA9IDA7CisgICAgICAgIGJ4ID0gYi0+eDsKKyAgICAgICAgc3ggPSBTLT54OworICAgICAgICBkbyB7CisjaWZkZWYgVUxMb25nCisgICAgICAgICAgICB5cyA9ICpzeCsrICsgY2Fycnk7CisgICAgICAgICAgICBjYXJyeSA9IHlzID4+IDMyOworICAgICAgICAgICAgeSA9ICpieCAtICh5cyAmIEZGRkZGRkZGKSAtIGJvcnJvdzsKKyAgICAgICAgICAgIGJvcnJvdyA9IHkgPj4gMzIgJiAoVUxvbmcpMTsKKyAgICAgICAgICAgICpieCsrID0gKFVMb25nKSh5ICYgRkZGRkZGRkYpOworI2Vsc2UKKyAgICAgICAgICAgIHNpID0gKnN4Kys7CisgICAgICAgICAgICB5cyA9IChzaSAmIDB4ZmZmZikgKyBjYXJyeTsKKyAgICAgICAgICAgIHpzID0gKHNpID4+IDE2KSArICh5cyA+PiAxNik7CisgICAgICAgICAgICBjYXJyeSA9IHpzID4+IDE2OworICAgICAgICAgICAgeSA9ICgqYnggJiAweGZmZmYpIC0gKHlzICYgMHhmZmZmKSAtIGJvcnJvdzsKKyAgICAgICAgICAgIGJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisgICAgICAgICAgICB6ID0gKCpieCA+PiAxNikgLSAoenMgJiAweGZmZmYpIC0gYm9ycm93OworICAgICAgICAgICAgYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKyAgICAgICAgICAgIFN0b3JlaW5jKGJ4LCB6LCB5KTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIHdoaWxlKHN4IDw9IHN4ZSk7CisgICAgICAgIGJ4ID0gYi0+eDsKKyAgICAgICAgYnhlID0gYnggKyBuOworICAgICAgICBpZiAoISpieGUpIHsKKyAgICAgICAgICAgIHdoaWxlKC0tYnhlID4gYnggJiYgISpieGUpCisgICAgICAgICAgICAgICAgLS1uOworICAgICAgICAgICAgYi0+d2RzID0gbjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcTsKK30KKworLyogc3VscCh4KSBpcyBhIHZlcnNpb24gb2YgdWxwKHgpIHRoYXQgdGFrZXMgYmMuc2NhbGUgaW50byBhY2NvdW50LgorCisgICBBc3N1bWluZyB0aGF0IHggaXMgZmluaXRlIGFuZCBub25uZWdhdGl2ZSAocG9zaXRpdmUgemVybyBpcyBmaW5lCisgICBoZXJlKSBhbmQgeCAvIDJeYmMuc2NhbGUgaXMgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGEgZG91YmxlLAorICAgc3VscCh4KSBpcyBlcXVpdmFsZW50IHRvIDJeYmMuc2NhbGUgKiB1bHAoeCAvIDJeYmMuc2NhbGUpLiAqLworCitzdGF0aWMgZG91YmxlCitzdWxwKFUgKngsIEJDaW5mbyAqYmMpCit7CisgICAgVSB1OworCisgICAgaWYgKGJjLT5zY2FsZSAmJiAyKlAgKyAxID4gKGludCkoKHdvcmQwKHgpICYgRXhwX21hc2spID4+IEV4cF9zaGlmdCkpIHsKKyAgICAgICAgLyogcnYvMl5iYy0+c2NhbGUgaXMgc3Vibm9ybWFsICovCisgICAgICAgIHdvcmQwKCZ1KSA9IChQKzIpKkV4cF9tc2sxOworICAgICAgICB3b3JkMSgmdSkgPSAwOworICAgICAgICByZXR1cm4gdS5kOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KHdvcmQwKHgpIHx8IHdvcmQxKHgpKTsgLyogeCAhPSAwLjAgKi8KKyAgICAgICAgcmV0dXJuIHVscCh4KTsKKyAgICB9Cit9CisKKy8qIFRoZSBiaWdjb21wIGZ1bmN0aW9uIGhhbmRsZXMgc29tZSBoYXJkIGNhc2VzIGZvciBzdHJ0b2QsIGZvciBpbnB1dHMKKyAgIHdpdGggbW9yZSB0aGFuIFNUUlRPRF9ESUdMSU0gZGlnaXRzLiAgSXQncyBjYWxsZWQgb25jZSBhbiBpbml0aWFsCisgICBlc3RpbWF0ZSBmb3IgdGhlIGRvdWJsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnB1dCBzdHJpbmcgaGFzCisgICBhbHJlYWR5IGJlZW4gb2J0YWluZWQgYnkgdGhlIGNvZGUgaW4gX1B5X2RnX3N0cnRvZC4KKworICAgVGhlIGJpZ2NvbXAgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgYWZ0ZXIgX1B5X2RnX3N0cnRvZCBoYXMgZm91bmQgYQorICAgZG91YmxlIHZhbHVlIHJ2IHN1Y2ggdGhhdCBlaXRoZXIgcnYgb3IgcnYgKyAxdWxwIHJlcHJlc2VudHMgdGhlCisgICBjb3JyZWN0bHkgcm91bmRlZCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcmlnaW5hbCBzdHJpbmcuICBJdAorICAgZGV0ZXJtaW5lcyB3aGljaCBvZiB0aGVzZSB0d28gdmFsdWVzIGlzIHRoZSBjb3JyZWN0IG9uZSBieQorICAgY29tcHV0aW5nIHRoZSBkZWNpbWFsIGRpZ2l0cyBvZiBydiArIDAuNXVscCBhbmQgY29tcGFyaW5nIHRoZW0gd2l0aAorICAgdGhlIGNvcnJlc3BvbmRpbmcgZGlnaXRzIG9mIHMwLgorCisgICBJbiB0aGUgZm9sbG93aW5nLCB3cml0ZSBkdiBmb3IgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIgcmVwcmVzZW50ZWQKKyAgIGJ5IHRoZSBpbnB1dCBzdHJpbmcuCisKKyAgIElucHV0czoKKworICAgICBzMCBwb2ludHMgdG8gdGhlIGZpcnN0IHNpZ25pZmljYW50IGRpZ2l0IG9mIHRoZSBpbnB1dCBzdHJpbmcuCisKKyAgICAgcnYgaXMgYSAocG9zc2libHkgc2NhbGVkKSBlc3RpbWF0ZSBmb3IgdGhlIGNsb3Nlc3QgZG91YmxlIHZhbHVlIHRvIHRoZQorICAgICAgICB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgb3JpZ2luYWwgaW5wdXQgdG8gX1B5X2RnX3N0cnRvZC4gIElmCisgICAgICAgIGJjLT5zY2FsZSBpcyBub256ZXJvLCB0aGVuIHJ2LzJeKGJjLT5zY2FsZSkgaXMgdGhlIGFwcHJveGltYXRpb24gdG8KKyAgICAgICAgdGhlIGlucHV0IHZhbHVlLgorCisgICAgIGJjIGlzIGEgc3RydWN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gZ2F0aGVyZWQgZHVyaW5nIHRoZSBwYXJzaW5nIGFuZAorICAgICAgICBlc3RpbWF0aW9uIHN0ZXBzIG9mIF9QeV9kZ19zdHJ0b2QuICBEZXNjcmlwdGlvbiBvZiBmaWVsZHMgZm9sbG93czoKKworICAgICAgICBiYy0+ZTAgZ2l2ZXMgdGhlIGV4cG9uZW50IG9mIHRoZSBpbnB1dCB2YWx1ZSwgc3VjaCB0aGF0IGR2ID0gKGludGVnZXIKKyAgICAgICAgICAgZ2l2ZW4gYnkgdGhlIGJkLT5uZCBkaWdpdHMgb2YgczApICogMTAqKmUwCisKKyAgICAgICAgYmMtPm5kIGdpdmVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHMwLiAgSXQgd2lsbAorICAgICAgICAgICBiZSBhdCBsZWFzdCAxLgorCisgICAgICAgIGJjLT5uZDAgZ2l2ZXMgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2YgczAgYmVmb3JlIHRoZQorICAgICAgICAgICBkZWNpbWFsIHNlcGFyYXRvci4gIElmIHRoZXJlJ3Mgbm8gZGVjaW1hbCBzZXBhcmF0b3IsIGJjLT5uZDAgPT0KKyAgICAgICAgICAgYmMtPm5kLgorCisgICAgICAgIGJjLT5zY2FsZSBpcyB0aGUgdmFsdWUgdXNlZCB0byBzY2FsZSBydiB0byBhdm9pZCBkb2luZyBhcml0aG1ldGljIHdpdGgKKyAgICAgICAgICAgc3Vibm9ybWFsIHZhbHVlcy4gIEl0J3MgZWl0aGVyIDAgb3IgMipQICg9MTA2KS4KKworICAgT3V0cHV0czoKKworICAgICBPbiBzdWNjZXNzZnVsIGV4aXQsIHJ2LzJeKGJjLT5zY2FsZSkgaXMgdGhlIGNsb3Nlc3QgZG91YmxlIHRvIGR2LgorCisgICAgIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlIChlLmcuLCBkdWUgdG8gYSBmYWlsZWQgbWFsbG9jIGNhbGwpLiAqLworCitzdGF0aWMgaW50CitiaWdjb21wKFUgKnJ2LCBjb25zdCBjaGFyICpzMCwgQkNpbmZvICpiYykKK3sKKyAgICBCaWdpbnQgKmIsICpkOworICAgIGludCBiMiwgZDIsIGRkLCBpLCBuZCwgbmQwLCBvZGQsIHAyLCBwNTsKKworICAgIG5kID0gYmMtPm5kOworICAgIG5kMCA9IGJjLT5uZDA7CisgICAgcDUgPSBuZCArIGJjLT5lMDsKKyAgICBiID0gc2QyYihydiwgYmMtPnNjYWxlLCAmcDIpOworICAgIGlmIChiID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIHJlY29yZCB3aGV0aGVyIHRoZSBsc2Igb2YgcnYvMl4oYmMtPnNjYWxlKSBpcyBvZGQ6ICBpbiB0aGUgZXhhY3QgaGFsZndheQorICAgICAgIGNhc2UsIHRoaXMgaXMgdXNlZCBmb3Igcm91bmQgdG8gZXZlbi4gKi8KKyAgICBvZGQgPSBiLT54WzBdICYgMTsKKworICAgIC8qIGxlZnQgc2hpZnQgYiBieSAxIGJpdCBhbmQgb3IgYSAxIGludG8gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdDsKKyAgICAgICB0aGlzIGdpdmVzIHVzIGIgKiAyKipwMiA9IHJ2LzJeKGJjLT5zY2FsZSkgKyAwLjUgdWxwLiAqLworICAgIGIgPSBsc2hpZnQoYiwgMSk7CisgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGItPnhbMF0gfD0gMTsKKyAgICBwMi0tOworCisgICAgcDIgLT0gcDU7CisgICAgZCA9IGkyYigxKTsKKyAgICBpZiAoZCA9PSBOVUxMKSB7CisgICAgICAgIEJmcmVlKGIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIEFycmFuZ2UgZm9yIGNvbnZlbmllbnQgY29tcHV0YXRpb24gb2YgcXVvdGllbnRzOgorICAgICAqIHNoaWZ0IGxlZnQgaWYgbmVjZXNzYXJ5IHNvIGRpdmlzb3IgaGFzIDQgbGVhZGluZyAwIGJpdHMuCisgICAgICovCisgICAgaWYgKHA1ID4gMCkgeworICAgICAgICBkID0gcG93NW11bHQoZCwgcDUpOworICAgICAgICBpZiAoZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBCZnJlZShiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChwNSA8IDApIHsKKyAgICAgICAgYiA9IHBvdzVtdWx0KGIsIC1wNSk7CisgICAgICAgIGlmIChiID09IE5VTEwpIHsKKyAgICAgICAgICAgIEJmcmVlKGQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGlmIChwMiA+IDApIHsKKyAgICAgICAgYjIgPSBwMjsKKyAgICAgICAgZDIgPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYjIgPSAwOworICAgICAgICBkMiA9IC1wMjsKKyAgICB9CisgICAgaSA9IGRzaGlmdChkLCBkMik7CisgICAgaWYgKChiMiArPSBpKSA+IDApIHsKKyAgICAgICAgYiA9IGxzaGlmdChiLCBiMik7CisgICAgICAgIGlmIChiID09IE5VTEwpIHsKKyAgICAgICAgICAgIEJmcmVlKGQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGlmICgoZDIgKz0gaSkgPiAwKSB7CisgICAgICAgIGQgPSBsc2hpZnQoZCwgZDIpOworICAgICAgICBpZiAoZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBCZnJlZShiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENvbXBhcmUgczAgd2l0aCBiL2Q6IHNldCBkZCB0byAtMSwgMCwgb3IgMSBhY2NvcmRpbmcgYXMgczAgPCBiL2QsIHMwID09CisgICAgICogYi9kLCBvciBzMCA+IGIvZC4gIEhlcmUgdGhlIGRpZ2l0cyBvZiBzMCBhcmUgdGhvdWdodCBvZiBhcyByZXByZXNlbnRpbmcKKyAgICAgKiBhIG51bWJlciBpbiB0aGUgcmFuZ2UgWzAuMSwgMSkuICovCisgICAgaWYgKGNtcChiLCBkKSA+PSAwKQorICAgICAgICAvKiBiL2QgPj0gMSAqLworICAgICAgICBkZCA9IC0xOworICAgIGVsc2UgeworICAgICAgICBpID0gMDsKKyAgICAgICAgZm9yKDs7KSB7CisgICAgICAgICAgICBiID0gbXVsdGFkZChiLCAxMCwgMCk7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgQmZyZWUoZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGQgPSBzMFtpIDwgbmQwID8gaSA6IGkrMV0gLSAnMCcgLSBxdW9yZW0oYiwgZCk7CisgICAgICAgICAgICBpKys7CisKKyAgICAgICAgICAgIGlmIChkZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICghYi0+eFswXSAmJiBiLT53ZHMgPT0gMSkgeworICAgICAgICAgICAgICAgIC8qIGIvZCA9PSAwICovCisgICAgICAgICAgICAgICAgZGQgPSBpIDwgbmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIShpIDwgbmQpKSB7CisgICAgICAgICAgICAgICAgLyogYi9kICE9IDAsIGJ1dCBkaWdpdHMgb2YgczAgZXhoYXVzdGVkICovCisgICAgICAgICAgICAgICAgZGQgPSAtMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBCZnJlZShiKTsKKyAgICBCZnJlZShkKTsKKyAgICBpZiAoZGQgPiAwIHx8IChkZCA9PSAwICYmIG9kZCkpCisgICAgICAgIGR2YWwocnYpICs9IHN1bHAocnYsIGJjKTsKKyAgICByZXR1cm4gMDsKK30KKworZG91YmxlCitfUHlfZGdfc3RydG9kKGNvbnN0IGNoYXIgKnMwMCwgY2hhciAqKnNlKQoreworICAgIGludCBiYjIsIGJiNSwgYmJlLCBiZDIsIGJkNSwgYnMyLCBjLCBkc2lnbiwgZSwgZTEsIGVycm9yOworICAgIGludCBlc2lnbiwgaSwgaiwgaywgbHosIG5kLCBuZDAsIG9kZCwgc2lnbjsKKyAgICBjb25zdCBjaGFyICpzLCAqczAsICpzMTsKKyAgICBkb3VibGUgYWFkaiwgYWFkajE7CisgICAgVSBhYWRqMiwgYWRqLCBydiwgcnYwOworICAgIFVMb25nIHksIHosIGFic19leHA7CisgICAgTG9uZyBMOworICAgIEJDaW5mbyBiYzsKKyAgICBCaWdpbnQgKmJiLCAqYmIxLCAqYmQsICpiZDAsICpicywgKmRlbHRhOworCisgICAgZHZhbCgmcnYpID0gMC47CisKKyAgICAvKiBTdGFydCBwYXJzaW5nLiAqLworICAgIGMgPSAqKHMgPSBzMDApOworCisgICAgLyogUGFyc2Ugb3B0aW9uYWwgc2lnbiwgaWYgcHJlc2VudC4gKi8KKyAgICBzaWduID0gMDsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICBjYXNlICctJzoKKyAgICAgICAgc2lnbiA9IDE7CisgICAgICAgIC8qIG5vIGJyZWFrICovCisgICAgY2FzZSAnKyc6CisgICAgICAgIGMgPSAqKytzOworICAgIH0KKworICAgIC8qIFNraXAgbGVhZGluZyB6ZXJvczogbHogaXMgdHJ1ZSBpZmYgdGhlcmUgd2VyZSBsZWFkaW5nIHplcm9zLiAqLworICAgIHMxID0gczsKKyAgICB3aGlsZSAoYyA9PSAnMCcpCisgICAgICAgIGMgPSAqKytzOworICAgIGx6ID0gcyAhPSBzMTsKKworICAgIC8qIFBvaW50IHMwIGF0IHRoZSBmaXJzdCBub256ZXJvIGRpZ2l0IChpZiBhbnkpLiAgbmQwIHdpbGwgYmUgdGhlIHBvc2l0aW9uCisgICAgICAgb2YgdGhlIHBvaW50IHJlbGF0aXZlIHRvIHMwLiAgbmQgd2lsbCBiZSB0aGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cworICAgICAgIGlnbm9yaW5nIGxlYWRpbmcgemVyb3MuICovCisgICAgczAgPSBzMSA9IHM7CisgICAgd2hpbGUgKCcwJyA8PSBjICYmIGMgPD0gJzknKQorICAgICAgICBjID0gKisrczsKKyAgICBuZDAgPSBuZCA9IHMgLSBzMTsKKworICAgIC8qIFBhcnNlIGRlY2ltYWwgcG9pbnQgYW5kIGZvbGxvd2luZyBkaWdpdHMuICovCisgICAgaWYgKGMgPT0gJy4nKSB7CisgICAgICAgIGMgPSAqKytzOworICAgICAgICBpZiAoIW5kKSB7CisgICAgICAgICAgICBzMSA9IHM7CisgICAgICAgICAgICB3aGlsZSAoYyA9PSAnMCcpCisgICAgICAgICAgICAgICAgYyA9ICorK3M7CisgICAgICAgICAgICBseiA9IGx6IHx8IHMgIT0gczE7CisgICAgICAgICAgICBuZDAgLT0gcyAtIHMxOworICAgICAgICAgICAgczAgPSBzOworICAgICAgICB9CisgICAgICAgIHMxID0gczsKKyAgICAgICAgd2hpbGUgKCcwJyA8PSBjICYmIGMgPD0gJzknKQorICAgICAgICAgICAgYyA9ICorK3M7CisgICAgICAgIG5kICs9IHMgLSBzMTsKKyAgICB9CisKKyAgICAvKiBOb3cgbHogaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSB3ZXJlIGxlYWRpbmcgemVybyBkaWdpdHMsIGFuZCBuZAorICAgICAgIGdpdmVzIHRoZSB0b3RhbCBudW1iZXIgb2YgZGlnaXRzIGlnbm9yaW5nIGxlYWRpbmcgemVyb3MuICBBIHZhbGlkIGlucHV0CisgICAgICAgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBkaWdpdC4gKi8KKyAgICBpZiAoIW5kICYmICFseikgeworICAgICAgICBpZiAoc2UpCisgICAgICAgICAgICAqc2UgPSAoY2hhciAqKXMwMDsKKyAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKKyAgICB9CisKKyAgICAvKiBQYXJzZSBleHBvbmVudC4gKi8KKyAgICBlID0gMDsKKyAgICBpZiAoYyA9PSAnZScgfHwgYyA9PSAnRScpIHsKKyAgICAgICAgczAwID0gczsKKyAgICAgICAgYyA9ICorK3M7CisKKyAgICAgICAgLyogRXhwb25lbnQgc2lnbi4gKi8KKyAgICAgICAgZXNpZ24gPSAwOworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICBlc2lnbiA9IDE7CisgICAgICAgICAgICAvKiBubyBicmVhayAqLworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIGMgPSAqKytzOworICAgICAgICB9CisKKyAgICAgICAgLyogU2tpcCB6ZXJvcy4gIGx6IGlzIHRydWUgaWZmIHRoZXJlIGFyZSBsZWFkaW5nIHplcm9zLiAqLworICAgICAgICBzMSA9IHM7CisgICAgICAgIHdoaWxlIChjID09ICcwJykKKyAgICAgICAgICAgIGMgPSAqKytzOworICAgICAgICBseiA9IHMgIT0gczE7CisKKyAgICAgICAgLyogR2V0IGFic29sdXRlIHZhbHVlIG9mIHRoZSBleHBvbmVudC4gKi8KKyAgICAgICAgczEgPSBzOworICAgICAgICBhYnNfZXhwID0gMDsKKyAgICAgICAgd2hpbGUgKCcwJyA8PSBjICYmIGMgPD0gJzknKSB7CisgICAgICAgICAgICBhYnNfZXhwID0gMTAqYWJzX2V4cCArIChjIC0gJzAnKTsKKyAgICAgICAgICAgIGMgPSAqKytzOworICAgICAgICB9CisKKyAgICAgICAgLyogYWJzX2V4cCB3aWxsIGJlIGNvcnJlY3QgbW9kdWxvIDIqKjMyLiAgQnV0IDEwKio5IDwgMioqMzIsIHNvIGlmCisgICAgICAgICAgIHRoZXJlIGFyZSBhdCBtb3N0IDkgc2lnbmlmaWNhbnQgZXhwb25lbnQgZGlnaXRzIHRoZW4gb3ZlcmZsb3cgaXMKKyAgICAgICAgICAgaW1wb3NzaWJsZS4gKi8KKyAgICAgICAgaWYgKHMgLSBzMSA+IDkgfHwgYWJzX2V4cCA+IE1BWF9BQlNfRVhQKQorICAgICAgICAgICAgZSA9IChpbnQpTUFYX0FCU19FWFA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGUgPSAoaW50KWFic19leHA7CisgICAgICAgIGlmIChlc2lnbikKKyAgICAgICAgICAgIGUgPSAtZTsKKworICAgICAgICAvKiBBIHZhbGlkIGV4cG9uZW50IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZGlnaXQuICovCisgICAgICAgIGlmIChzID09IHMxICYmICFseikKKyAgICAgICAgICAgIHMgPSBzMDA7CisgICAgfQorCisgICAgLyogQWRqdXN0IGV4cG9uZW50IHRvIHRha2UgaW50byBhY2NvdW50IHBvc2l0aW9uIG9mIHRoZSBwb2ludC4gKi8KKyAgICBlIC09IG5kIC0gbmQwOworICAgIGlmIChuZDAgPD0gMCkKKyAgICAgICAgbmQwID0gbmQ7CisKKyAgICAvKiBGaW5pc2hlZCBwYXJzaW5nLiAgU2V0IHNlIHRvIGluZGljYXRlIGhvdyBmYXIgd2UgcGFyc2VkICovCisgICAgaWYgKHNlKQorICAgICAgICAqc2UgPSAoY2hhciAqKXM7CisKKyAgICAvKiBJZiBhbGwgZGlnaXRzIHdlcmUgemVybywgZXhpdCB3aXRoIHJldHVybiB2YWx1ZSArLTAuMC4gIE90aGVyd2lzZSwKKyAgICAgICBzdHJpcCB0cmFpbGluZyB6ZXJvczogc2NhbiBiYWNrIHVudGlsIHdlIGhpdCBhIG5vbnplcm8gZGlnaXQuICovCisgICAgaWYgKCFuZCkKKyAgICAgICAgZ290byByZXQ7CisgICAgZm9yIChpID0gbmQ7IGkgPiAwOyApIHsKKyAgICAgICAgLS1pOworICAgICAgICBpZiAoczBbaSA8IG5kMCA/IGkgOiBpKzFdICE9ICcwJykgeworICAgICAgICAgICAgKytpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZSArPSBuZCAtIGk7CisgICAgbmQgPSBpOworICAgIGlmIChuZDAgPiBuZCkKKyAgICAgICAgbmQwID0gbmQ7CisKKyAgICAvKiBTdW1tYXJ5IG9mIHBhcnNpbmcgcmVzdWx0cy4gIEFmdGVyIHBhcnNpbmcsIGFuZCBkZWFsaW5nIHdpdGggemVybworICAgICAqIGlucHV0cywgd2UgaGF2ZSB2YWx1ZXMgczAsIG5kMCwgbmQsIGUsIHNpZ24sIHdoZXJlOgorICAgICAqCisgICAgICogIC0gczAgcG9pbnRzIHRvIHRoZSBmaXJzdCBzaWduaWZpY2FudCBkaWdpdCBvZiB0aGUgaW5wdXQgc3RyaW5nCisgICAgICoKKyAgICAgKiAgLSBuZCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyAoaGVyZSwgYW5kCisgICAgICogICAgYmVsb3csICdzaWduaWZpY2FudCBkaWdpdHMnIG1lYW5zIHRoZSBzZXQgb2YgZGlnaXRzIG9mIHRoZQorICAgICAqICAgIHNpZ25pZmljYW5kIG9mIHRoZSBpbnB1dCB0aGF0IHJlbWFpbiBhZnRlciBpZ25vcmluZyBsZWFkaW5nCisgICAgICogICAgYW5kIHRyYWlsaW5nIHplcm9zKS4KKyAgICAgKgorICAgICAqICAtIG5kMCBpbmRpY2F0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZWNpbWFsIHBvaW50LCBpZiBwcmVzZW50OyBpdAorICAgICAqICAgIHNhdGlzZmllcyAxIDw9IG5kMCA8PSBuZC4gIFRoZSBuZCBzaWduaWZpY2FudCBkaWdpdHMgYXJlIGluCisgICAgICogICAgczBbMDpuZDBdIGFuZCBzMFtuZDArMTpuZCsxXSB1c2luZyB0aGUgdXN1YWwgUHl0aG9uIGhhbGYtb3BlbiBzbGljZQorICAgICAqICAgIG5vdGF0aW9uLiAgKElmIG5kMCA8IG5kLCB0aGVuIHMwW25kMF0gY29udGFpbnMgYSAnLicgIGNoYXJhY3RlcjsgaWYKKyAgICAgKiAgICBuZDAgPT0gbmQsIHRoZW4gczBbbmQwXSBjb3VsZCBiZSBhbnkgbm9uLWRpZ2l0IGNoYXJhY3Rlci4pCisgICAgICoKKyAgICAgKiAgLSBlIGlzIHRoZSBhZGp1c3RlZCBleHBvbmVudDogdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIKKyAgICAgKiAgICByZXByZXNlbnRlZCBieSB0aGUgb3JpZ2luYWwgaW5wdXQgc3RyaW5nIGlzIG4gKiAxMCoqZSwgd2hlcmUKKyAgICAgKiAgICBuIGlzIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBjb25jYXRlbmF0aW9uIG9mCisgICAgICogICAgczBbMDpuZDBdIGFuZCBzMFtuZDArMTpuZCsxXQorICAgICAqCisgICAgICogIC0gc2lnbiBnaXZlcyB0aGUgc2lnbiBvZiB0aGUgaW5wdXQ6ICAxIGZvciBuZWdhdGl2ZSwgMCBmb3IgcG9zaXRpdmUKKyAgICAgKgorICAgICAqICAtIHRoZSBmaXJzdCBhbmQgbGFzdCBzaWduaWZpY2FudCBkaWdpdHMgYXJlIG5vbnplcm8KKyAgICAgKi8KKworICAgIC8qIHB1dCBmaXJzdCBEQkxfRElHKzEgZGlnaXRzIGludG8gaW50ZWdlciB5IGFuZCB6LgorICAgICAqCisgICAgICogIC0geSBjb250YWlucyB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIGZpcnN0IG1pbig5LCBuZCkKKyAgICAgKiAgICBzaWduaWZpY2FudCBkaWdpdHMKKyAgICAgKgorICAgICAqICAtIGlmIG5kID4gOSwgeiBjb250YWlucyB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgc2lnbmlmaWNhbnQgZGlnaXRzCisgICAgICogICAgd2l0aCBpbmRpY2VzIGluIFs5LCBtaW4oMTYsIG5kKSkuICBTbyB5ICogMTAqKihtaW4oMTYsIG5kKSAtIDkpICsgegorICAgICAqICAgIGdpdmVzIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgZmlyc3QgbWluKDE2LCBuZCkgc2lnLiBkaWdpdHMuCisgICAgICovCisKKyAgICBiYy5lMCA9IGUxID0gZTsKKyAgICB5ID0geiA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG5kOyBpKyspIHsKKyAgICAgICAgaWYgKGkgPCA5KQorICAgICAgICAgICAgeSA9IDEwKnkgKyBzMFtpIDwgbmQwID8gaSA6IGkrMV0gLSAnMCc7CisgICAgICAgIGVsc2UgaWYgKGkgPCBEQkxfRElHKzEpCisgICAgICAgICAgICB6ID0gMTAqeiArIHMwW2kgPCBuZDAgPyBpIDogaSsxXSAtICcwJzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgayA9IG5kIDwgREJMX0RJRyArIDEgPyBuZCA6IERCTF9ESUcgKyAxOworICAgIGR2YWwoJnJ2KSA9IHk7CisgICAgaWYgKGsgPiA5KSB7CisgICAgICAgIGR2YWwoJnJ2KSA9IHRlbnNbayAtIDldICogZHZhbCgmcnYpICsgejsKKyAgICB9CisgICAgYmQwID0gMDsKKyAgICBpZiAobmQgPD0gREJMX0RJRworICAgICAgICAmJiBGbHRfUm91bmRzID09IDEKKyAgICAgICAgKSB7CisgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgIGdvdG8gcmV0OworICAgICAgICBpZiAoZSA+IDApIHsKKyAgICAgICAgICAgIGlmIChlIDw9IFRlbl9wbWF4KSB7CisgICAgICAgICAgICAgICAgZHZhbCgmcnYpICo9IHRlbnNbZV07CisgICAgICAgICAgICAgICAgZ290byByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gREJMX0RJRyAtIG5kOworICAgICAgICAgICAgaWYgKGUgPD0gVGVuX3BtYXggKyBpKSB7CisgICAgICAgICAgICAgICAgLyogQSBmYW5jaWVyIHRlc3Qgd291bGQgc29tZXRpbWVzIGxldCB1cyBkbworICAgICAgICAgICAgICAgICAqIHRoaXMgZm9yIGxhcmdlciBpIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBlIC09IGk7CisgICAgICAgICAgICAgICAgZHZhbCgmcnYpICo9IHRlbnNbaV07CisgICAgICAgICAgICAgICAgZHZhbCgmcnYpICo9IHRlbnNbZV07CisgICAgICAgICAgICAgICAgZ290byByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZSA+PSAtVGVuX3BtYXgpIHsKKyAgICAgICAgICAgIGR2YWwoJnJ2KSAvPSB0ZW5zWy1lXTsKKyAgICAgICAgICAgIGdvdG8gcmV0OworICAgICAgICB9CisgICAgfQorICAgIGUxICs9IG5kIC0gazsKKworICAgIGJjLnNjYWxlID0gMDsKKworICAgIC8qIEdldCBzdGFydGluZyBhcHByb3hpbWF0aW9uID0gcnYgKiAxMCoqZTEgKi8KKworICAgIGlmIChlMSA+IDApIHsKKyAgICAgICAgaWYgKChpID0gZTEgJiAxNSkpCisgICAgICAgICAgICBkdmFsKCZydikgKj0gdGVuc1tpXTsKKyAgICAgICAgaWYgKGUxICY9IH4xNSkgeworICAgICAgICAgICAgaWYgKGUxID4gREJMX01BWF8xMF9FWFApCisgICAgICAgICAgICAgICAgZ290byBvdmZsOworICAgICAgICAgICAgZTEgPj49IDQ7CisgICAgICAgICAgICBmb3IoaiA9IDA7IGUxID4gMTsgaisrLCBlMSA+Pj0gMSkKKyAgICAgICAgICAgICAgICBpZiAoZTEgJiAxKQorICAgICAgICAgICAgICAgICAgICBkdmFsKCZydikgKj0gYmlndGVuc1tqXTsKKyAgICAgICAgICAgIC8qIFRoZSBsYXN0IG11bHRpcGxpY2F0aW9uIGNvdWxkIG92ZXJmbG93LiAqLworICAgICAgICAgICAgd29yZDAoJnJ2KSAtPSBQKkV4cF9tc2sxOworICAgICAgICAgICAgZHZhbCgmcnYpICo9IGJpZ3RlbnNbal07CisgICAgICAgICAgICBpZiAoKHogPSB3b3JkMCgmcnYpICYgRXhwX21hc2spCisgICAgICAgICAgICAgICAgPiBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy1QKSkKKyAgICAgICAgICAgICAgICBnb3RvIG92Zmw7CisgICAgICAgICAgICBpZiAoeiA+IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEtUCkpIHsKKyAgICAgICAgICAgICAgICAvKiBzZXQgdG8gbGFyZ2VzdCBudW1iZXIgKi8KKyAgICAgICAgICAgICAgICAvKiAoQ2FuJ3QgdHJ1c3QgREJMX01BWCkgKi8KKyAgICAgICAgICAgICAgICB3b3JkMCgmcnYpID0gQmlnMDsKKyAgICAgICAgICAgICAgICB3b3JkMSgmcnYpID0gQmlnMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB3b3JkMCgmcnYpICs9IFAqRXhwX21zazE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZTEgPCAwKSB7CisgICAgICAgIC8qIFRoZSBpbnB1dCBkZWNpbWFsIHZhbHVlIGxpZXMgaW4gWzEwKiplMSwgMTAqKihlMSsxNikpLgorCisgICAgICAgICAgIElmIGUxIDw9IC01MTIsIHVuZGVyZmxvdyBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgSWYgZTEgPD0gLTI1Niwgc2V0IGJjLnNjYWxlIHRvIDIqUC4KKworICAgICAgICAgICBTbyBmb3IgaW5wdXQgdmFsdWUgPCAxZS0yNTYsIGJjLnNjYWxlIGlzIGFsd2F5cyBzZXQ7CisgICAgICAgICAgIGZvciBpbnB1dCB2YWx1ZSA+PSAxZS0yNDAsIGJjLnNjYWxlIGlzIG5ldmVyIHNldC4KKyAgICAgICAgICAgRm9yIGlucHV0IHZhbHVlcyBpbiBbMWUtMjU2LCAxZS0yNDApLCBiYy5zY2FsZSBtYXkgb3IgbWF5CisgICAgICAgICAgIG5vdCBiZSBzZXQuICovCisKKyAgICAgICAgZTEgPSAtZTE7CisgICAgICAgIGlmICgoaSA9IGUxICYgMTUpKQorICAgICAgICAgICAgZHZhbCgmcnYpIC89IHRlbnNbaV07CisgICAgICAgIGlmIChlMSA+Pj0gNCkgeworICAgICAgICAgICAgaWYgKGUxID49IDEgPDwgbl9iaWd0ZW5zKQorICAgICAgICAgICAgICAgIGdvdG8gdW5kZmw7CisgICAgICAgICAgICBpZiAoZTEgJiBTY2FsZV9CaXQpCisgICAgICAgICAgICAgICAgYmMuc2NhbGUgPSAyKlA7CisgICAgICAgICAgICBmb3IoaiA9IDA7IGUxID4gMDsgaisrLCBlMSA+Pj0gMSkKKyAgICAgICAgICAgICAgICBpZiAoZTEgJiAxKQorICAgICAgICAgICAgICAgICAgICBkdmFsKCZydikgKj0gdGlueXRlbnNbal07CisgICAgICAgICAgICBpZiAoYmMuc2NhbGUgJiYgKGogPSAyKlAgKyAxIC0gKCh3b3JkMCgmcnYpICYgRXhwX21hc2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+IEV4cF9zaGlmdCkpID4gMCkgeworICAgICAgICAgICAgICAgIC8qIHNjYWxlZCBydiBpcyBkZW5vcm1hbDsgY2xlYXIgaiBsb3cgYml0cyAqLworICAgICAgICAgICAgICAgIGlmIChqID49IDMyKSB7CisgICAgICAgICAgICAgICAgICAgIHdvcmQxKCZydikgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaiA+PSA1MykKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQwKCZydikgPSAoUCsyKSpFeHBfbXNrMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgd29yZDAoJnJ2KSAmPSAweGZmZmZmZmZmIDw8IChqLTMyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB3b3JkMSgmcnYpICY9IDB4ZmZmZmZmZmYgPDwgajsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZHZhbCgmcnYpKQorICAgICAgICAgICAgICAgIGdvdG8gdW5kZmw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBOb3cgdGhlIGhhcmQgcGFydCAtLSBhZGp1c3RpbmcgcnYgdG8gdGhlIGNvcnJlY3QgdmFsdWUuKi8KKworICAgIC8qIFB1dCBkaWdpdHMgaW50byBiZDogdHJ1ZSB2YWx1ZSA9IGJkICogMTBeZSAqLworCisgICAgYmMubmQgPSBuZDsKKyAgICBiYy5uZDAgPSBuZDA7ICAgICAgIC8qIE9ubHkgbmVlZGVkIGlmIG5kID4gU1RSVE9EX0RJR0xJTSwgYnV0IGRvbmUgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gc2lsZW5jZSBhbiBlcnJvbmVvdXMgd2FybmluZyBhYm91dCBiYy5uZDAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3NpYmx5IG5vdCBiZWluZyBpbml0aWFsaXplZC4gKi8KKyAgICBpZiAobmQgPiBTVFJUT0RfRElHTElNKSB7CisgICAgICAgIC8qIEFTU0VSVChTVFJUT0RfRElHTElNID49IDE4KTsgMTggPT0gb25lIG1vcmUgdGhhbiB0aGUgKi8KKyAgICAgICAgLyogbWluaW11bSBudW1iZXIgb2YgZGVjaW1hbCBkaWdpdHMgdG8gZGlzdGluZ3Vpc2ggZG91YmxlIHZhbHVlcyAqLworICAgICAgICAvKiBpbiBJRUVFIGFyaXRobWV0aWMuICovCisKKyAgICAgICAgLyogVHJ1bmNhdGUgaW5wdXQgdG8gMTggc2lnbmlmaWNhbnQgZGlnaXRzLCB0aGVuIGRpc2NhcmQgYW55IHRyYWlsaW5nCisgICAgICAgICAgIHplcm9zIG9uIHRoZSByZXN1bHQgYnkgdXBkYXRpbmcgbmQsIG5kMCwgZSBhbmQgeSBzdWl0YWJseS4gKFRoZXJlJ3MKKyAgICAgICAgICAgbm8gbmVlZCB0byB1cGRhdGUgejsgaXQncyBub3QgcmV1c2VkIGJleW9uZCB0aGlzIHBvaW50LikgKi8KKyAgICAgICAgZm9yIChpID0gMTg7IGkgPiAwOyApIHsKKyAgICAgICAgICAgIC8qIHNjYW4gYmFjayB1bnRpbCB3ZSBoaXQgYSBub256ZXJvIGRpZ2l0LiAgc2lnbmlmaWNhbnQgZGlnaXQgJ2knCisgICAgICAgICAgICBpcyBzMFtpXSBpZiBpIDwgbmQwLCBzMFtpKzFdIGlmIGkgPj0gbmQwLiAqLworICAgICAgICAgICAgLS1pOworICAgICAgICAgICAgaWYgKHMwW2kgPCBuZDAgPyBpIDogaSsxXSAhPSAnMCcpIHsKKyAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZSArPSBuZCAtIGk7CisgICAgICAgIG5kID0gaTsKKyAgICAgICAgaWYgKG5kMCA+IG5kKQorICAgICAgICAgICAgbmQwID0gbmQ7CisgICAgICAgIGlmIChuZCA8IDkpIHsgLyogbXVzdCByZWNvbXB1dGUgeSAqLworICAgICAgICAgICAgeSA9IDA7CisgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBuZDA7ICsraSkKKyAgICAgICAgICAgICAgICB5ID0gMTAqeSArIHMwW2ldIC0gJzAnOworICAgICAgICAgICAgZm9yKDsgaSA8IG5kOyArK2kpCisgICAgICAgICAgICAgICAgeSA9IDEwKnkgKyBzMFtpKzFdIC0gJzAnOworICAgICAgICB9CisgICAgfQorICAgIGJkMCA9IHMyYihzMCwgbmQwLCBuZCwgeSk7CisgICAgaWYgKGJkMCA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisKKyAgICAvKiBOb3RhdGlvbiBmb3IgdGhlIGNvbW1lbnRzIGJlbG93LiAgV3JpdGU6CisKKyAgICAgICAgIC0gZHYgZm9yIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHJlcHJlc2VudGVkIGJ5IHRoZSBvcmlnaW5hbAorICAgICAgICAgICBkZWNpbWFsIGlucHV0IHN0cmluZy4KKworICAgICAgICAgLSBpZiB3ZSd2ZSB0cnVuY2F0ZWQgZHYsIHdyaXRlIHRkdiBmb3IgdGhlIHRydW5jYXRlZCB2YWx1ZS4KKyAgICAgICAgICAgT3RoZXJ3aXNlLCBzZXQgdGR2ID09IGR2LgorCisgICAgICAgICAtIHNydiBmb3IgdGhlIHF1YW50aXR5IHJ2LzJeYmMuc2NhbGU7IHNvIHNydiBpcyB0aGUgY3VycmVudCBiaW5hcnkKKyAgICAgICAgICAgYXBwcm94aW1hdGlvbiB0byB0ZHYgKGFuZCBkdikuICBJdCBzaG91bGQgYmUgZXhhY3RseSByZXByZXNlbnRhYmxlCisgICAgICAgICAgIGluIGFuIElFRUUgNzU0IGRvdWJsZS4KKyAgICAqLworCisgICAgZm9yKDs7KSB7CisKKyAgICAgICAgLyogVGhpcyBpcyB0aGUgbWFpbiBjb3JyZWN0aW9uIGxvb3AgZm9yIF9QeV9kZ19zdHJ0b2QuCisKKyAgICAgICAgICAgV2UndmUgZ290IGEgZGVjaW1hbCB2YWx1ZSB0ZHYsIGFuZCBhIGZsb2F0aW5nLXBvaW50IGFwcHJveGltYXRpb24KKyAgICAgICAgICAgc3J2PXJ2LzJeYmMuc2NhbGUgdG8gdGR2LiAgVGhlIGFpbSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBzcnYgaXMKKyAgICAgICAgICAgY2xvc2UgZW5vdWdoIChpLmUuLCB3aXRoaW4gMC41IHVscHMpIHRvIHRkdiwgYW5kIHRvIGNvbXB1dGUgYSBuZXcKKyAgICAgICAgICAgYXBwcm94aW1hdGlvbiBpZiBub3QuCisKKyAgICAgICAgICAgVG8gZGV0ZXJtaW5lIHdoZXRoZXIgc3J2IGlzIGNsb3NlIGVub3VnaCB0byB0ZHYsIGNvbXB1dGUgaW50ZWdlcnMKKyAgICAgICAgICAgYmQsIGJiIGFuZCBicyBwcm9wb3J0aW9uYWwgdG8gdGR2LCBzcnYgYW5kIDAuNSB1bHAoc3J2KQorICAgICAgICAgICByZXNwZWN0aXZlbHksIGFuZCB0aGVuIHVzZSBpbnRlZ2VyIGFyaXRobWV0aWMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKKyAgICAgICAgICAgfHRkdiAtIHNydnwgaXMgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIDAuNSB1bHAoc3J2KS4KKyAgICAgICAgKi8KKworICAgICAgICBiZCA9IEJhbGxvYyhiZDAtPmspOworICAgICAgICBpZiAoYmQgPT0gTlVMTCkgeworICAgICAgICAgICAgQmZyZWUoYmQwKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgfQorICAgICAgICBCY29weShiZCwgYmQwKTsKKyAgICAgICAgYmIgPSBzZDJiKCZydiwgYmMuc2NhbGUsICZiYmUpOyAgIC8qIHNydiA9IGJiICogMl5iYmUgKi8KKyAgICAgICAgaWYgKGJiID09IE5VTEwpIHsKKyAgICAgICAgICAgIEJmcmVlKGJkKTsKKyAgICAgICAgICAgIEJmcmVlKGJkMCk7CisgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgIH0KKyAgICAgICAgLyogUmVjb3JkIHdoZXRoZXIgbHNiIG9mIGJiIGlzIG9kZCwgaW4gY2FzZSB3ZSBuZWVkIHRoaXMKKyAgICAgICAgICAgZm9yIHRoZSByb3VuZC10by1ldmVuIHN0ZXAgbGF0ZXIuICovCisgICAgICAgIG9kZCA9IGJiLT54WzBdICYgMTsKKworICAgICAgICAvKiB0ZHYgPSBiZCAqIDEwKiplOyAgc3J2ID0gYmIgKiAyKipiYmUgKi8KKyAgICAgICAgYnMgPSBpMmIoMSk7CisgICAgICAgIGlmIChicyA9PSBOVUxMKSB7CisgICAgICAgICAgICBCZnJlZShiYik7CisgICAgICAgICAgICBCZnJlZShiZCk7CisgICAgICAgICAgICBCZnJlZShiZDApOworICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGUgPj0gMCkgeworICAgICAgICAgICAgYmIyID0gYmI1ID0gMDsKKyAgICAgICAgICAgIGJkMiA9IGJkNSA9IGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBiYjIgPSBiYjUgPSAtZTsKKyAgICAgICAgICAgIGJkMiA9IGJkNSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJiZSA+PSAwKQorICAgICAgICAgICAgYmIyICs9IGJiZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmQyIC09IGJiZTsKKyAgICAgICAgYnMyID0gYmIyOworICAgICAgICBiYjIrKzsKKyAgICAgICAgYmQyKys7CisKKyAgICAgICAgLyogQXQgdGhpcyBzdGFnZSBiZDUgLSBiYjUgPT0gZSA9PSBiZDIgLSBiYjIgKyBiYmUsIGJiMiAtIGJzMiA9PSAxLAorCSAgIGFuZCBicyA9PSAxLCBzbzoKKworICAgICAgICAgICAgICB0ZHYgPT0gYmQgKiAxMCoqZSA9IGJkICogMioqKGJiZSAtIGJiMiArIGJkMikgKiA1KiooYmQ1IC0gYmI1KQorICAgICAgICAgICAgICBzcnYgPT0gYmIgKiAyKipiYmUgPSBiYiAqIDIqKihiYmUgLSBiYjIgKyBiYjIpCisJICAgICAgMC41IHVscChzcnYpID09IDIqKihiYmUtMSkgPSBicyAqIDIqKihiYmUgLSBiYjIgKyBiczIpCisKKwkgICBJdCBmb2xsb3dzIHRoYXQ6CisKKyAgICAgICAgICAgICAgTSAqIHRkdiA9IGJkICogMioqYmQyICogNSoqYmQ1CisgICAgICAgICAgICAgIE0gKiBzcnYgPSBiYiAqIDIqKmJiMiAqIDUqKmJiNQorICAgICAgICAgICAgICBNICogMC41IHVscChzcnYpID0gYnMgKiAyKipiczIgKiA1KipiYjUKKworCSAgIGZvciBzb21lIGNvbnN0YW50IE0uICAoQWN0dWFsbHksIE0gPT0gMioqKGJiMiAtIGJiZSkgKiA1KipiYjUsIGJ1dAorCSAgIHRoaXMgZmFjdCBpcyBub3QgbmVlZGVkIGJlbG93LikKKyAgICAgICAgKi8KKworICAgICAgICAvKiBSZW1vdmUgZmFjdG9yIG9mIDIqKmksIHdoZXJlIGkgPSBtaW4oYmIyLCBiZDIsIGJzMikuICovCisgICAgICAgIGkgPSBiYjIgPCBiZDIgPyBiYjIgOiBiZDI7CisgICAgICAgIGlmIChpID4gYnMyKQorICAgICAgICAgICAgaSA9IGJzMjsKKyAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICBiYjIgLT0gaTsKKyAgICAgICAgICAgIGJkMiAtPSBpOworICAgICAgICAgICAgYnMyIC09IGk7CisgICAgICAgIH0KKworICAgICAgICAvKiBTY2FsZSBiYiwgYmQsIGJzIGJ5IHRoZSBhcHByb3ByaWF0ZSBwb3dlcnMgb2YgMiBhbmQgNS4gKi8KKyAgICAgICAgaWYgKGJiNSA+IDApIHsKKyAgICAgICAgICAgIGJzID0gcG93NW11bHQoYnMsIGJiNSk7CisgICAgICAgICAgICBpZiAoYnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIEJmcmVlKGJiKTsKKyAgICAgICAgICAgICAgICBCZnJlZShiZCk7CisgICAgICAgICAgICAgICAgQmZyZWUoYmQwKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiYjEgPSBtdWx0KGJzLCBiYik7CisgICAgICAgICAgICBCZnJlZShiYik7CisgICAgICAgICAgICBiYiA9IGJiMTsKKyAgICAgICAgICAgIGlmIChiYiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgQmZyZWUoYnMpOworICAgICAgICAgICAgICAgIEJmcmVlKGJkKTsKKyAgICAgICAgICAgICAgICBCZnJlZShiZDApOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoYmIyID4gMCkgeworICAgICAgICAgICAgYmIgPSBsc2hpZnQoYmIsIGJiMik7CisgICAgICAgICAgICBpZiAoYmIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIEJmcmVlKGJzKTsKKyAgICAgICAgICAgICAgICBCZnJlZShiZCk7CisgICAgICAgICAgICAgICAgQmZyZWUoYmQwKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJkNSA+IDApIHsKKyAgICAgICAgICAgIGJkID0gcG93NW11bHQoYmQsIGJkNSk7CisgICAgICAgICAgICBpZiAoYmQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIEJmcmVlKGJiKTsKKyAgICAgICAgICAgICAgICBCZnJlZShicyk7CisgICAgICAgICAgICAgICAgQmZyZWUoYmQwKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJkMiA+IDApIHsKKyAgICAgICAgICAgIGJkID0gbHNoaWZ0KGJkLCBiZDIpOworICAgICAgICAgICAgaWYgKGJkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBCZnJlZShiYik7CisgICAgICAgICAgICAgICAgQmZyZWUoYnMpOworICAgICAgICAgICAgICAgIEJmcmVlKGJkMCk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChiczIgPiAwKSB7CisgICAgICAgICAgICBicyA9IGxzaGlmdChicywgYnMyKTsKKyAgICAgICAgICAgIGlmIChicyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgQmZyZWUoYmIpOworICAgICAgICAgICAgICAgIEJmcmVlKGJkKTsKKyAgICAgICAgICAgICAgICBCZnJlZShiZDApOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIE5vdyBiZCwgYmIgYW5kIGJzIGFyZSBzY2FsZWQgdmVyc2lvbnMgb2YgdGR2LCBzcnYgYW5kIDAuNSB1bHAoc3J2KSwKKyAgICAgICAgICAgcmVzcGVjdGl2ZWx5LiAgQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZSB8dGR2IC0gc3J2fCwgYW5kIGNvbXBhcmUKKyAgICAgICAgICAgd2l0aCAwLjUgdWxwKHNydikuICovCisKKyAgICAgICAgZGVsdGEgPSBkaWZmKGJiLCBiZCk7CisgICAgICAgIGlmIChkZWx0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICBCZnJlZShiYik7CisgICAgICAgICAgICBCZnJlZShicyk7CisgICAgICAgICAgICBCZnJlZShiZCk7CisgICAgICAgICAgICBCZnJlZShiZDApOworICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICB9CisgICAgICAgIGRzaWduID0gZGVsdGEtPnNpZ247CisgICAgICAgIGRlbHRhLT5zaWduID0gMDsKKyAgICAgICAgaSA9IGNtcChkZWx0YSwgYnMpOworICAgICAgICBpZiAoYmMubmQgPiBuZCAmJiBpIDw9IDApIHsKKyAgICAgICAgICAgIGlmIChkc2lnbikKKyAgICAgICAgICAgICAgICBicmVhazsgIC8qIE11c3QgdXNlIGJpZ2NvbXAoKS4gKi8KKworICAgICAgICAgICAgLyogSGVyZSBydiBvdmVyZXN0aW1hdGVzIHRoZSB0cnVuY2F0ZWQgZGVjaW1hbCB2YWx1ZSBieSBhdCBtb3N0CisgICAgICAgICAgICAgICAwLjUgdWxwKHJ2KS4gIEhlbmNlIHJ2IGVpdGhlciBvdmVyZXN0aW1hdGVzIHRoZSB0cnVlIGRlY2ltYWwKKyAgICAgICAgICAgICAgIHZhbHVlIGJ5IDw9IDAuNSB1bHAocnYpLCBvciB1bmRlcmVzdGltYXRlcyBpdCBieSBzb21lIHNtYWxsCisgICAgICAgICAgICAgICBhbW91bnQgKDwgMC4xIHVscChydikpOyBlaXRoZXIgd2F5LCBydiBpcyB3aXRoaW4gMC41IHVscHMgb2YKKyAgICAgICAgICAgICAgIHRoZSB0cnVlIGRlY2ltYWwgdmFsdWUsIHNvIGl0J3MgcG9zc2libGUgdG8gZXhpdC4KKworICAgICAgICAgICAgICAgRXhjZXB0aW9uOiBpZiBzY2FsZWQgcnYgaXMgYSBub3JtYWwgZXhhY3QgcG93ZXIgb2YgMiwgYnV0IG5vdAorICAgICAgICAgICAgICAgREJMX01JTiwgdGhlbiBydiAtIDAuNSB1bHAocnYpIHRha2VzIHVzIGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlCisgICAgICAgICAgICAgICBuZXh0IGRvdWJsZSwgc28gdGhlIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdCBpcyBlaXRoZXIgcnYgLSAwLjUKKyAgICAgICAgICAgICAgIHVscChydikgb3IgcnY7IGluIHRoaXMgY2FzZSwgdXNlIGJpZ2NvbXAgdG8gZGlzdGluZ3Vpc2guICovCisKKyAgICAgICAgICAgIGlmICghd29yZDEoJnJ2KSAmJiAhKHdvcmQwKCZydikgJiBCbmRyeV9tYXNrKSkgeworICAgICAgICAgICAgICAgIC8qIHJ2IGNhbid0IGJlIDAsIHNpbmNlIGl0J3MgYW4gb3ZlcmVzdGltYXRlIGZvciBzb21lCisgICAgICAgICAgICAgICAgICAgbm9uemVybyB2YWx1ZS4gIFNvIHJ2IGlzIGEgbm9ybWFsIHBvd2VyIG9mIDIuICovCisgICAgICAgICAgICAgICAgaiA9IChpbnQpKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPj4gRXhwX3NoaWZ0OworICAgICAgICAgICAgICAgIC8qIHJ2IC8gMl5iYy5zY2FsZSA9IDJeKGogLSAxMDIzIC0gYmMuc2NhbGUpOyB1c2UgYmlnY29tcCBpZgorICAgICAgICAgICAgICAgICAgIHJ2IC8gMl5iYy5zY2FsZSA+PSAyXi0xMDIxLiAqLworICAgICAgICAgICAgICAgIGlmIChqIC0gYmMuc2NhbGUgPj0gMikgeworICAgICAgICAgICAgICAgICAgICBkdmFsKCZydikgLT0gMC41ICogc3VscCgmcnYsICZiYyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBVc2UgYmlnY29tcC4gKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYy5uZCA9IG5kOworICAgICAgICAgICAgICAgIGkgPSAtMTsgLyogRGlzY2FyZGVkIGRpZ2l0cyBtYWtlIGRlbHRhIHNtYWxsZXIuICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgIC8qIEVycm9yIGlzIGxlc3MgdGhhbiBoYWxmIGFuIHVscCAtLSBjaGVjayBmb3IKKyAgICAgICAgICAgICAqIHNwZWNpYWwgY2FzZSBvZiBtYW50aXNzYSBhIHBvd2VyIG9mIHR3by4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKGRzaWduIHx8IHdvcmQxKCZydikgfHwgd29yZDAoJnJ2KSAmIEJuZHJ5X21hc2sKKyAgICAgICAgICAgICAgICB8fCAod29yZDAoJnJ2KSAmIEV4cF9tYXNrKSA8PSAoMipQKzEpKkV4cF9tc2sxCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWRlbHRhLT54WzBdICYmIGRlbHRhLT53ZHMgPD0gMSkgeworICAgICAgICAgICAgICAgIC8qIGV4YWN0IHJlc3VsdCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsdGEgPSBsc2hpZnQoZGVsdGEsTG9nMlApOworICAgICAgICAgICAgaWYgKGRlbHRhID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBCZnJlZShiYik7CisgICAgICAgICAgICAgICAgQmZyZWUoYnMpOworICAgICAgICAgICAgICAgIEJmcmVlKGJkKTsKKyAgICAgICAgICAgICAgICBCZnJlZShiZDApOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjbXAoZGVsdGEsIGJzKSA+IDApCisgICAgICAgICAgICAgICAgZ290byBkcm9wX2Rvd247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAvKiBleGFjdGx5IGhhbGYtd2F5IGJldHdlZW4gKi8KKyAgICAgICAgICAgIGlmIChkc2lnbikgeworICAgICAgICAgICAgICAgIGlmICgod29yZDAoJnJ2KSAmIEJuZHJ5X21hc2sxKSA9PSBCbmRyeV9tYXNrMQorICAgICAgICAgICAgICAgICAgICAmJiAgd29yZDEoJnJ2KSA9PSAoCisgICAgICAgICAgICAgICAgICAgICAgICAoYmMuc2NhbGUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAoeSA9IHdvcmQwKCZydikgJiBFeHBfbWFzaykgPD0gMipQKkV4cF9tc2sxKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAoMHhmZmZmZmZmZiAmICgweGZmZmZmZmZmIDw8ICgyKlArMS0oeT4+RXhwX3NoaWZ0KSkpKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmKSkgeworICAgICAgICAgICAgICAgICAgICAvKmJvdW5kYXJ5IGNhc2UgLS0gaW5jcmVtZW50IGV4cG9uZW50Ki8KKyAgICAgICAgICAgICAgICAgICAgd29yZDAoJnJ2KSA9ICh3b3JkMCgmcnYpICYgRXhwX21hc2spCisgICAgICAgICAgICAgICAgICAgICAgICArIEV4cF9tc2sxCisgICAgICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgICAgIHdvcmQxKCZydikgPSAwOworICAgICAgICAgICAgICAgICAgICBkc2lnbiA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCEod29yZDAoJnJ2KSAmIEJuZHJ5X21hc2spICYmICF3b3JkMSgmcnYpKSB7CisgICAgICAgICAgICAgIGRyb3BfZG93bjoKKyAgICAgICAgICAgICAgICAvKiBib3VuZGFyeSBjYXNlIC0tIGRlY3JlbWVudCBleHBvbmVudCAqLworICAgICAgICAgICAgICAgIGlmIChiYy5zY2FsZSkgeworICAgICAgICAgICAgICAgICAgICBMID0gd29yZDAoJnJ2KSAmIEV4cF9tYXNrOworICAgICAgICAgICAgICAgICAgICBpZiAoTCA8PSAoMipQKzEpKkV4cF9tc2sxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTCA+IChQKzIpKkV4cF9tc2sxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJvdW5kIGV2ZW4gPT0+ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWNjZXB0IHJ2ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBydiA9IHNtYWxsZXN0IGRlbm9ybWFsICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmMubmQgPiBuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5kZmw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTCA9ICh3b3JkMCgmcnYpICYgRXhwX21hc2spIC0gRXhwX21zazE7CisgICAgICAgICAgICAgICAgd29yZDAoJnJ2KSA9IEwgfCBCbmRyeV9tYXNrMTsKKyAgICAgICAgICAgICAgICB3b3JkMSgmcnYpID0gMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghb2RkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGRzaWduKQorICAgICAgICAgICAgICAgIGR2YWwoJnJ2KSArPSBzdWxwKCZydiwgJmJjKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGR2YWwoJnJ2KSAtPSBzdWxwKCZydiwgJmJjKTsKKyAgICAgICAgICAgICAgICBpZiAoIWR2YWwoJnJ2KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYmMubmQgPm5kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5kZmw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZHNpZ24gPSAxIC0gZHNpZ247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGFhZGogPSByYXRpbyhkZWx0YSwgYnMpKSA8PSAyLikgeworICAgICAgICAgICAgaWYgKGRzaWduKQorICAgICAgICAgICAgICAgIGFhZGogPSBhYWRqMSA9IDEuOworICAgICAgICAgICAgZWxzZSBpZiAod29yZDEoJnJ2KSB8fCB3b3JkMCgmcnYpICYgQm5kcnlfbWFzaykgeworICAgICAgICAgICAgICAgIGlmICh3b3JkMSgmcnYpID09IFRpbnkxICYmICF3b3JkMCgmcnYpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYy5uZCA+bmQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZ290byB1bmRmbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWFkaiA9IDEuOworICAgICAgICAgICAgICAgIGFhZGoxID0gLTEuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogc3BlY2lhbCBjYXNlIC0tIHBvd2VyIG9mIEZMVF9SQURJWCB0byBiZSAqLworICAgICAgICAgICAgICAgIC8qIHJvdW5kZWQgZG93bi4uLiAqLworCisgICAgICAgICAgICAgICAgaWYgKGFhZGogPCAyLi9GTFRfUkFESVgpCisgICAgICAgICAgICAgICAgICAgIGFhZGogPSAxLi9GTFRfUkFESVg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhYWRqICo9IDAuNTsKKyAgICAgICAgICAgICAgICBhYWRqMSA9IC1hYWRqOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYWFkaiAqPSAwLjU7CisgICAgICAgICAgICBhYWRqMSA9IGRzaWduID8gYWFkaiA6IC1hYWRqOworICAgICAgICAgICAgaWYgKEZsdF9Sb3VuZHMgPT0gMCkKKyAgICAgICAgICAgICAgICBhYWRqMSArPSAwLjU7CisgICAgICAgIH0KKyAgICAgICAgeSA9IHdvcmQwKCZydikgJiBFeHBfbWFzazsKKworICAgICAgICAvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8KKworICAgICAgICBpZiAoeSA9PSBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xKSkgeworICAgICAgICAgICAgZHZhbCgmcnYwKSA9IGR2YWwoJnJ2KTsKKyAgICAgICAgICAgIHdvcmQwKCZydikgLT0gUCpFeHBfbXNrMTsKKyAgICAgICAgICAgIGFkai5kID0gYWFkajEgKiB1bHAoJnJ2KTsKKyAgICAgICAgICAgIGR2YWwoJnJ2KSArPSBhZGouZDsKKyAgICAgICAgICAgIGlmICgod29yZDAoJnJ2KSAmIEV4cF9tYXNrKSA+PQorICAgICAgICAgICAgICAgIEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLVApKSB7CisgICAgICAgICAgICAgICAgaWYgKHdvcmQwKCZydjApID09IEJpZzAgJiYgd29yZDEoJnJ2MCkgPT0gQmlnMSkgeworICAgICAgICAgICAgICAgICAgICBCZnJlZShiYik7CisgICAgICAgICAgICAgICAgICAgIEJmcmVlKGJkKTsKKyAgICAgICAgICAgICAgICAgICAgQmZyZWUoYnMpOworICAgICAgICAgICAgICAgICAgICBCZnJlZShiZDApOworICAgICAgICAgICAgICAgICAgICBCZnJlZShkZWx0YSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gb3ZmbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd29yZDAoJnJ2KSA9IEJpZzA7CisgICAgICAgICAgICAgICAgd29yZDEoJnJ2KSA9IEJpZzE7CisgICAgICAgICAgICAgICAgZ290byBjb250OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHdvcmQwKCZydikgKz0gUCpFeHBfbXNrMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChiYy5zY2FsZSAmJiB5IDw9IDIqUCpFeHBfbXNrMSkgeworICAgICAgICAgICAgICAgIGlmIChhYWRqIDw9IDB4N2ZmZmZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh6ID0gKFVMb25nKWFhZGopIDw9IDApCisgICAgICAgICAgICAgICAgICAgICAgICB6ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYWFkaiA9IHo7CisgICAgICAgICAgICAgICAgICAgIGFhZGoxID0gZHNpZ24gPyBhYWRqIDogLWFhZGo7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGR2YWwoJmFhZGoyKSA9IGFhZGoxOworICAgICAgICAgICAgICAgIHdvcmQwKCZhYWRqMikgKz0gKDIqUCsxKSpFeHBfbXNrMSAtIHk7CisgICAgICAgICAgICAgICAgYWFkajEgPSBkdmFsKCZhYWRqMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGouZCA9IGFhZGoxICogdWxwKCZydik7CisgICAgICAgICAgICBkdmFsKCZydikgKz0gYWRqLmQ7CisgICAgICAgIH0KKyAgICAgICAgeiA9IHdvcmQwKCZydikgJiBFeHBfbWFzazsKKyAgICAgICAgaWYgKGJjLm5kID09IG5kKSB7CisgICAgICAgICAgICBpZiAoIWJjLnNjYWxlKQorICAgICAgICAgICAgICAgIGlmICh5ID09IHopIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQ2FuIHdlIHN0b3Agbm93PyAqLworICAgICAgICAgICAgICAgICAgICBMID0gKExvbmcpYWFkajsKKyAgICAgICAgICAgICAgICAgICAgYWFkaiAtPSBMOworICAgICAgICAgICAgICAgICAgICAvKiBUaGUgdG9sZXJhbmNlcyBiZWxvdyBhcmUgY29uc2VydmF0aXZlLiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoZHNpZ24gfHwgd29yZDEoJnJ2KSB8fCB3b3JkMCgmcnYpICYgQm5kcnlfbWFzaykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFhZGogPCAuNDk5OTk5OSB8fCBhYWRqID4gLjUwMDAwMDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWFkaiA8IC40OTk5OTk5L0ZMVF9SQURJWCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgY29udDoKKyAgICAgICAgQmZyZWUoYmIpOworICAgICAgICBCZnJlZShiZCk7CisgICAgICAgIEJmcmVlKGJzKTsKKyAgICAgICAgQmZyZWUoZGVsdGEpOworICAgIH0KKyAgICBCZnJlZShiYik7CisgICAgQmZyZWUoYmQpOworICAgIEJmcmVlKGJzKTsKKyAgICBCZnJlZShiZDApOworICAgIEJmcmVlKGRlbHRhKTsKKyAgICBpZiAoYmMubmQgPiBuZCkgeworICAgICAgICBlcnJvciA9IGJpZ2NvbXAoJnJ2LCBzMCwgJmJjKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgIH0KKworICAgIGlmIChiYy5zY2FsZSkgeworICAgICAgICB3b3JkMCgmcnYwKSA9IEV4cF8xIC0gMipQKkV4cF9tc2sxOworICAgICAgICB3b3JkMSgmcnYwKSA9IDA7CisgICAgICAgIGR2YWwoJnJ2KSAqPSBkdmFsKCZydjApOworICAgIH0KKworICByZXQ6CisgICAgcmV0dXJuIHNpZ24gPyAtZHZhbCgmcnYpIDogZHZhbCgmcnYpOworCisgIHBhcnNlX2Vycm9yOgorICAgIHJldHVybiAwLjA7CisKKyAgZmFpbGVkX21hbGxvYzoKKyAgICBlcnJubyA9IEVOT01FTTsKKyAgICByZXR1cm4gLTEuMDsKKworICB1bmRmbDoKKyAgICByZXR1cm4gc2lnbiA/IC0wLjAgOiAwLjA7CisKKyAgb3ZmbDoKKyAgICBlcnJubyA9IEVSQU5HRTsKKyAgICAvKiBDYW4ndCB0cnVzdCBIVUdFX1ZBTCAqLworICAgIHdvcmQwKCZydikgPSBFeHBfbWFzazsKKyAgICB3b3JkMSgmcnYpID0gMDsKKyAgICByZXR1cm4gc2lnbiA/IC1kdmFsKCZydikgOiBkdmFsKCZydik7CisKK30KKworc3RhdGljIGNoYXIgKgorcnZfYWxsb2MoaW50IGkpCit7CisgICAgaW50IGosIGssICpyOworCisgICAgaiA9IHNpemVvZihVTG9uZyk7CisgICAgZm9yKGsgPSAwOworICAgICAgICBzaXplb2YoQmlnaW50KSAtIHNpemVvZihVTG9uZykgLSBzaXplb2YoaW50KSArIGogPD0gKHVuc2lnbmVkKWk7CisgICAgICAgIGogPDw9IDEpCisgICAgICAgIGsrKzsKKyAgICByID0gKGludCopQmFsbG9jKGspOworICAgIGlmIChyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgICpyID0gazsKKyAgICByZXR1cm4gKGNoYXIgKikocisxKTsKK30KKworc3RhdGljIGNoYXIgKgorbnJ2X2FsbG9jKGNoYXIgKnMsIGNoYXIgKipydmUsIGludCBuKQoreworICAgIGNoYXIgKnJ2LCAqdDsKKworICAgIHJ2ID0gcnZfYWxsb2Mobik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHQgPSBydjsKKyAgICB3aGlsZSgoKnQgPSAqcysrKSkgdCsrOworICAgIGlmIChydmUpCisgICAgICAgICpydmUgPSB0OworICAgIHJldHVybiBydjsKK30KKworLyogZnJlZWR0b2EocykgbXVzdCBiZSB1c2VkIHRvIGZyZWUgdmFsdWVzIHMgcmV0dXJuZWQgYnkgZHRvYQorICogd2hlbiBNVUxUSVBMRV9USFJFQURTIGlzICNkZWZpbmVkLiAgSXQgc2hvdWxkIGJlIHVzZWQgaW4gYWxsIGNhc2VzLAorICogYnV0IGZvciBjb25zaXN0ZW5jeSB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YgZHRvYSwgaXQgaXMgb3B0aW9uYWwKKyAqIHdoZW4gTVVMVElQTEVfVEhSRUFEUyBpcyBub3QgZGVmaW5lZC4KKyAqLworCit2b2lkCitfUHlfZGdfZnJlZWR0b2EoY2hhciAqcykKK3sKKyAgICBCaWdpbnQgKmIgPSAoQmlnaW50ICopKChpbnQgKilzIC0gMSk7CisgICAgYi0+bWF4d2RzID0gMSA8PCAoYi0+ayA9ICooaW50KiliKTsKKyAgICBCZnJlZShiKTsKK30KKworLyogZHRvYSBmb3IgSUVFRSBhcml0aG1ldGljIChkbWcpOiBjb252ZXJ0IGRvdWJsZSB0byBBU0NJSSBzdHJpbmcuCisgKgorICogSW5zcGlyZWQgYnkgIkhvdyB0byBQcmludCBGbG9hdGluZy1Qb2ludCBOdW1iZXJzIEFjY3VyYXRlbHkiIGJ5CisgKiBHdXkgTC4gU3RlZWxlLCBKci4gYW5kIEpvbiBMLiBXaGl0ZSBbUHJvYy4gQUNNIFNJR1BMQU4gJzkwLCBwcC4gMTEyLTEyNl0uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqICAgICAgMS4gUmF0aGVyIHRoYW4gaXRlcmF0aW5nLCB3ZSB1c2UgYSBzaW1wbGUgbnVtZXJpYyBvdmVyZXN0aW1hdGUKKyAqICAgICAgICAgdG8gZGV0ZXJtaW5lIGsgPSBmbG9vcihsb2cxMChkKSkuICBXZSBzY2FsZSByZWxldmFudAorICogICAgICAgICBxdWFudGl0aWVzIHVzaW5nIE8obG9nMihrKSkgcmF0aGVyIHRoYW4gTyhrKSBtdWx0aXBsaWNhdGlvbnMuCisgKiAgICAgIDIuIEZvciBzb21lIG1vZGVzID4gMiAoY29ycmVzcG9uZGluZyB0byBlY3Z0IGFuZCBmY3Z0KSwgd2UgZG9uJ3QKKyAqICAgICAgICAgdHJ5IHRvIGdlbmVyYXRlIGRpZ2l0cyBzdHJpY3RseSBsZWZ0IHRvIHJpZ2h0LiAgSW5zdGVhZCwgd2UKKyAqICAgICAgICAgY29tcHV0ZSB3aXRoIGZld2VyIGJpdHMgYW5kIHByb3BhZ2F0ZSB0aGUgY2FycnkgaWYgbmVjZXNzYXJ5CisgKiAgICAgICAgIHdoZW4gcm91bmRpbmcgdGhlIGZpbmFsIGRpZ2l0IHVwLiAgVGhpcyBpcyBvZnRlbiBmYXN0ZXIuCisgKiAgICAgIDMuIFVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgaW5wdXQgd2lsbCBiZSByb3VuZGVkIG5lYXJlc3QsCisgKiAgICAgICAgIG1vZGUgMCByZW5kZXJzIDFlMjMgYXMgMWUyMyByYXRoZXIgdGhhbiA5Ljk5OTk5OTk5OTk5OTk5OWUyMi4KKyAqICAgICAgICAgVGhhdCBpcywgd2UgYWxsb3cgZXF1YWxpdHkgaW4gc3RvcHBpbmcgdGVzdHMgd2hlbiB0aGUKKyAqICAgICAgICAgcm91bmQtbmVhcmVzdCBydWxlIHdpbGwgZ2l2ZSB0aGUgc2FtZSBmbG9hdGluZy1wb2ludCB2YWx1ZQorICogICAgICAgICBhcyB3b3VsZCBzYXRpc2ZhY3Rpb24gb2YgdGhlIHN0b3BwaW5nIHRlc3Qgd2l0aCBzdHJpY3QKKyAqICAgICAgICAgaW5lcXVhbGl0eS4KKyAqICAgICAgNC4gV2UgcmVtb3ZlIGNvbW1vbiBmYWN0b3JzIG9mIHBvd2VycyBvZiAyIGZyb20gcmVsZXZhbnQKKyAqICAgICAgICAgcXVhbnRpdGllcy4KKyAqICAgICAgNS4gV2hlbiBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IGludGVnZXJzIGxlc3MgdGhhbiAxZTE2LAorICogICAgICAgICB3ZSB1c2UgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyByYXRoZXIgdGhhbiByZXNvcnRpbmcKKyAqICAgICAgICAgdG8gbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXJzLgorICogICAgICA2LiBXaGVuIGFza2VkIHRvIHByb2R1Y2UgZmV3ZXIgdGhhbiAxNSBkaWdpdHMsIHdlIGZpcnN0IHRyeQorICogICAgICAgICB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljOyB3ZSByZXNvcnQgdG8KKyAqICAgICAgICAgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYyBvbmx5IGlmIHdlIGNhbm5vdAorICogICAgICAgICBndWFyYW50ZWUgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb24gaGFzIGdpdmVuCisgKiAgICAgICAgIHRoZSBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHQuICBGb3IgayByZXF1ZXN0ZWQgZGlnaXRzIGFuZAorICogICAgICAgICAidW5pZm9ybWx5IiBkaXN0cmlidXRlZCBpbnB1dCwgdGhlIHByb2JhYmlsaXR5IGlzCisgKiAgICAgICAgIHNvbWV0aGluZyBsaWtlIDEwXihrLTE1KSB0aGF0IHdlIG11c3QgcmVzb3J0IHRvIHRoZSBMb25nCisgKiAgICAgICAgIGNhbGN1bGF0aW9uLgorICovCisKKy8qIEFkZGl0aW9uYWwgbm90ZXMgKE1FVEQpOiAoMSkgcmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuICAoMikgdG8gYXZvaWQgbWVtb3J5CisgICBsZWFrYWdlLCBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBfUHlfZGdfZHRvYSBzaG91bGQgYWx3YXlzIGJlIG1hdGNoZWQgYnkgYQorICAgY2FsbCB0byBfUHlfZGdfZnJlZWR0b2EuICovCisKK2NoYXIgKgorX1B5X2RnX2R0b2EoZG91YmxlIGRkLCBpbnQgbW9kZSwgaW50IG5kaWdpdHMsCisgICAgICAgICAgICBpbnQgKmRlY3B0LCBpbnQgKnNpZ24sIGNoYXIgKipydmUpCit7CisgICAgLyogIEFyZ3VtZW50cyBuZGlnaXRzLCBkZWNwdCwgc2lnbiBhcmUgc2ltaWxhciB0byB0aG9zZQorICAgICAgICBvZiBlY3Z0IGFuZCBmY3Z0OyB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZCBmcm9tCisgICAgICAgIHRoZSByZXR1cm5lZCBzdHJpbmcuICBJZiBub3QgbnVsbCwgKnJ2ZSBpcyBzZXQgdG8gcG9pbnQKKyAgICAgICAgdG8gdGhlIGVuZCBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgSWYgZCBpcyArLUluZmluaXR5IG9yIE5hTiwKKyAgICAgICAgdGhlbiAqZGVjcHQgaXMgc2V0IHRvIDk5OTkuCisKKyAgICAgICAgbW9kZToKKyAgICAgICAgMCA9PT4gc2hvcnRlc3Qgc3RyaW5nIHRoYXQgeWllbGRzIGQgd2hlbiByZWFkIGluCisgICAgICAgIGFuZCByb3VuZGVkIHRvIG5lYXJlc3QuCisgICAgICAgIDEgPT0+IGxpa2UgMCwgYnV0IHdpdGggU3RlZWxlICYgV2hpdGUgc3RvcHBpbmcgcnVsZTsKKyAgICAgICAgZS5nLiB3aXRoIElFRUUgUDc1NCBhcml0aG1ldGljICwgbW9kZSAwIGdpdmVzCisgICAgICAgIDFlMjMgd2hlcmVhcyBtb2RlIDEgZ2l2ZXMgOS45OTk5OTk5OTk5OTk5OTllMjIuCisgICAgICAgIDIgPT0+IG1heCgxLG5kaWdpdHMpIHNpZ25pZmljYW50IGRpZ2l0cy4gIFRoaXMgZ2l2ZXMgYQorICAgICAgICByZXR1cm4gdmFsdWUgc2ltaWxhciB0byB0aGF0IG9mIGVjdnQsIGV4Y2VwdAorICAgICAgICB0aGF0IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkLgorICAgICAgICAzID09PiB0aHJvdWdoIG5kaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludC4gIFRoaXMKKyAgICAgICAgZ2l2ZXMgYSByZXR1cm4gdmFsdWUgc2ltaWxhciB0byB0aGF0IGZyb20gZmN2dCwKKyAgICAgICAgZXhjZXB0IHRoYXQgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQsIGFuZAorICAgICAgICBuZGlnaXRzIGNhbiBiZSBuZWdhdGl2ZS4KKyAgICAgICAgNCw1ID09PiBzaW1pbGFyIHRvIDIgYW5kIDMsIHJlc3BlY3RpdmVseSwgYnV0IChpbgorICAgICAgICByb3VuZC1uZWFyZXN0IG1vZGUpIHdpdGggdGhlIHRlc3RzIG9mIG1vZGUgMCB0bworICAgICAgICBwb3NzaWJseSByZXR1cm4gYSBzaG9ydGVyIHN0cmluZyB0aGF0IHJvdW5kcyB0byBkLgorICAgICAgICBXaXRoIElFRUUgYXJpdGhtZXRpYyBhbmQgY29tcGlsYXRpb24gd2l0aAorICAgICAgICAtREhvbm9yX0ZMVF9ST1VORFMsIG1vZGVzIDQgYW5kIDUgYmVoYXZlIHRoZSBzYW1lCisgICAgICAgIGFzIG1vZGVzIDIgYW5kIDMgd2hlbiBGTFRfUk9VTkRTICE9IDEuCisgICAgICAgIDYtOSA9PT4gRGVidWdnaW5nIG1vZGVzIHNpbWlsYXIgdG8gbW9kZSAtIDQ6ICBkb24ndCB0cnkKKyAgICAgICAgZmFzdCBmbG9hdGluZy1wb2ludCBlc3RpbWF0ZSAoaWYgYXBwbGljYWJsZSkuCisKKyAgICAgICAgVmFsdWVzIG9mIG1vZGUgb3RoZXIgdGhhbiAwLTkgYXJlIHRyZWF0ZWQgYXMgbW9kZSAwLgorCisgICAgICAgIFN1ZmZpY2llbnQgc3BhY2UgaXMgYWxsb2NhdGVkIHRvIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgdG8gaG9sZCB0aGUgc3VwcHJlc3NlZCB0cmFpbGluZyB6ZXJvcy4KKyAgICAqLworCisgICAgaW50IGJiaXRzLCBiMiwgYjUsIGJlLCBkaWcsIGksIGllcHMsIGlsaW0sIGlsaW0wLCBpbGltMSwKKyAgICAgICAgaiwgajEsIGssIGswLCBrX2NoZWNrLCBsZWZ0cmlnaHQsIG0yLCBtNSwgczIsIHM1LAorICAgICAgICBzcGVjX2Nhc2UsIHRyeV9xdWljazsKKyAgICBMb25nIEw7CisgICAgaW50IGRlbm9ybTsKKyAgICBVTG9uZyB4OworICAgIEJpZ2ludCAqYiwgKmIxLCAqZGVsdGEsICptbG8sICptaGksICpTOworICAgIFUgZDIsIGVwcywgdTsKKyAgICBkb3VibGUgZHM7CisgICAgY2hhciAqcywgKnMwOworCisgICAgLyogc2V0IHBvaW50ZXJzIHRvIE5VTEwsIHRvIHNpbGVuY2UgZ2NjIGNvbXBpbGVyIHdhcm5pbmdzIGFuZCBtYWtlCisgICAgICAgY2xlYW51cCBlYXNpZXIgb24gZXJyb3IgKi8KKyAgICBtbG8gPSBtaGkgPSBTID0gMDsKKyAgICBzMCA9IDA7CisKKyAgICB1LmQgPSBkZDsKKyAgICBpZiAod29yZDAoJnUpICYgU2lnbl9iaXQpIHsKKyAgICAgICAgLyogc2V0IHNpZ24gZm9yIGV2ZXJ5dGhpbmcsIGluY2x1ZGluZyAwJ3MgYW5kIE5hTnMgKi8KKyAgICAgICAgKnNpZ24gPSAxOworICAgICAgICB3b3JkMCgmdSkgJj0gflNpZ25fYml0OyAvKiBjbGVhciBzaWduIGJpdCAqLworICAgIH0KKyAgICBlbHNlCisgICAgICAgICpzaWduID0gMDsKKworICAgIC8qIHF1aWNrIHJldHVybiBmb3IgSW5maW5pdGllcywgTmFOcyBhbmQgemVyb3MgKi8KKyAgICBpZiAoKHdvcmQwKCZ1KSAmIEV4cF9tYXNrKSA9PSBFeHBfbWFzaykKKyAgICB7CisgICAgICAgIC8qIEluZmluaXR5IG9yIE5hTiAqLworICAgICAgICAqZGVjcHQgPSA5OTk5OworICAgICAgICBpZiAoIXdvcmQxKCZ1KSAmJiAhKHdvcmQwKCZ1KSAmIDB4ZmZmZmYpKQorICAgICAgICAgICAgcmV0dXJuIG5ydl9hbGxvYygiSW5maW5pdHkiLCBydmUsIDgpOworICAgICAgICByZXR1cm4gbnJ2X2FsbG9jKCJOYU4iLCBydmUsIDMpOworICAgIH0KKyAgICBpZiAoIWR2YWwoJnUpKSB7CisgICAgICAgICpkZWNwdCA9IDE7CisgICAgICAgIHJldHVybiBucnZfYWxsb2MoIjAiLCBydmUsIDEpOworICAgIH0KKworICAgIC8qIGNvbXB1dGUgayA9IGZsb29yKGxvZzEwKGQpKS4gIFRoZSBjb21wdXRhdGlvbiBtYXkgbGVhdmUgaworICAgICAgIG9uZSB0b28gbGFyZ2UsIGJ1dCBzaG91bGQgbmV2ZXIgbGVhdmUgayB0b28gc21hbGwuICovCisgICAgYiA9IGQyYigmdSwgJmJlLCAmYmJpdHMpOworICAgIGlmIChiID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICBpZiAoKGkgPSAoaW50KSh3b3JkMCgmdSkgPj4gRXhwX3NoaWZ0MSAmIChFeHBfbWFzaz4+RXhwX3NoaWZ0MSkpKSkgeworICAgICAgICBkdmFsKCZkMikgPSBkdmFsKCZ1KTsKKyAgICAgICAgd29yZDAoJmQyKSAmPSBGcmFjX21hc2sxOworICAgICAgICB3b3JkMCgmZDIpIHw9IEV4cF8xMTsKKworICAgICAgICAvKiBsb2coeCkgICAgICAgfj1+IGxvZygxLjUpICsgKHgtMS41KS8xLjUKKyAgICAgICAgICogbG9nMTAoeCkgICAgICA9ICBsb2coeCkgLyBsb2coMTApCisgICAgICAgICAqICAgICAgICAgICAgICB+PX4gbG9nKDEuNSkvbG9nKDEwKSArICh4LTEuNSkvKDEuNSpsb2coMTApKQorICAgICAgICAgKiBsb2cxMChkKSA9IChpLUJpYXMpKmxvZygyKS9sb2coMTApICsgbG9nMTAoZDIpCisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgc3VnZ2VzdHMgY29tcHV0aW5nIGFuIGFwcHJveGltYXRpb24gayB0byBsb2cxMChkKSBieQorICAgICAgICAgKgorICAgICAgICAgKiBrID0gKGkgLSBCaWFzKSowLjMwMTAyOTk5NTY2Mzk4MQorICAgICAgICAgKiAgICAgICsgKCAoZDItMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5MDU1NjgxICk7CisgICAgICAgICAqCisgICAgICAgICAqIFdlIHdhbnQgayB0byBiZSB0b28gbGFyZ2UgcmF0aGVyIHRoYW4gdG9vIHNtYWxsLgorICAgICAgICAgKiBUaGUgZXJyb3IgaW4gdGhlIGZpcnN0LW9yZGVyIFRheWxvciBzZXJpZXMgYXBwcm94aW1hdGlvbgorICAgICAgICAgKiBpcyBpbiBvdXIgZmF2b3IsIHNvIHdlIGp1c3Qgcm91bmQgdXAgdGhlIGNvbnN0YW50IGVub3VnaAorICAgICAgICAgKiB0byBjb21wZW5zYXRlIGZvciBhbnkgZXJyb3IgaW4gdGhlIG11bHRpcGxpY2F0aW9uIG9mCisgICAgICAgICAqIChpIC0gQmlhcykgYnkgMC4zMDEwMjk5OTU2NjM5ODE7IHNpbmNlIHxpIC0gQmlhc3wgPD0gMTA3NywKKyAgICAgICAgICogYW5kIDEwNzcgKiAwLjMwMTAzICogMl4tNTIgfj1+IDcuMmUtMTQsCisgICAgICAgICAqIGFkZGluZyAxZS0xMyB0byB0aGUgY29uc3RhbnQgdGVybSBtb3JlIHRoYW4gc3VmZmljZXMuCisgICAgICAgICAqIEhlbmNlIHdlIGFkanVzdCB0aGUgY29uc3RhbnQgdGVybSB0byAwLjE3NjA5MTI1OTA1NTguCisgICAgICAgICAqIChXZSBjb3VsZCBnZXQgYSBtb3JlIGFjY3VyYXRlIGsgYnkgaW52b2tpbmcgbG9nMTAsCisgICAgICAgICAqICBidXQgdGhpcyBpcyBwcm9iYWJseSBub3Qgd29ydGh3aGlsZS4pCisgICAgICAgICAqLworCisgICAgICAgIGkgLT0gQmlhczsKKyAgICAgICAgZGVub3JtID0gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIGQgaXMgZGVub3JtYWxpemVkICovCisKKyAgICAgICAgaSA9IGJiaXRzICsgYmUgKyAoQmlhcyArIChQLTEpIC0gMSk7CisgICAgICAgIHggPSBpID4gMzIgID8gd29yZDAoJnUpIDw8ICg2NCAtIGkpIHwgd29yZDEoJnUpID4+IChpIC0gMzIpCisgICAgICAgICAgICA6IHdvcmQxKCZ1KSA8PCAoMzIgLSBpKTsKKyAgICAgICAgZHZhbCgmZDIpID0geDsKKyAgICAgICAgd29yZDAoJmQyKSAtPSAzMSpFeHBfbXNrMTsgLyogYWRqdXN0IGV4cG9uZW50ICovCisgICAgICAgIGkgLT0gKEJpYXMgKyAoUC0xKSAtIDEpICsgMTsKKyAgICAgICAgZGVub3JtID0gMTsKKyAgICB9CisgICAgZHMgPSAoZHZhbCgmZDIpLTEuNSkqMC4yODk1Mjk2NTQ2MDIxNjggKyAwLjE3NjA5MTI1OTA1NTggKworICAgICAgICBpKjAuMzAxMDI5OTk1NjYzOTgxOworICAgIGsgPSAoaW50KWRzOworICAgIGlmIChkcyA8IDAuICYmIGRzICE9IGspCisgICAgICAgIGstLTsgICAgLyogd2FudCBrID0gZmxvb3IoZHMpICovCisgICAga19jaGVjayA9IDE7CisgICAgaWYgKGsgPj0gMCAmJiBrIDw9IFRlbl9wbWF4KSB7CisgICAgICAgIGlmIChkdmFsKCZ1KSA8IHRlbnNba10pCisgICAgICAgICAgICBrLS07CisgICAgICAgIGtfY2hlY2sgPSAwOworICAgIH0KKyAgICBqID0gYmJpdHMgLSBpIC0gMTsKKyAgICBpZiAoaiA+PSAwKSB7CisgICAgICAgIGIyID0gMDsKKyAgICAgICAgczIgPSBqOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYjIgPSAtajsKKyAgICAgICAgczIgPSAwOworICAgIH0KKyAgICBpZiAoayA+PSAwKSB7CisgICAgICAgIGI1ID0gMDsKKyAgICAgICAgczUgPSBrOworICAgICAgICBzMiArPSBrOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYjIgLT0gazsKKyAgICAgICAgYjUgPSAtazsKKyAgICAgICAgczUgPSAwOworICAgIH0KKyAgICBpZiAobW9kZSA8IDAgfHwgbW9kZSA+IDkpCisgICAgICAgIG1vZGUgPSAwOworCisgICAgdHJ5X3F1aWNrID0gMTsKKworICAgIGlmIChtb2RlID4gNSkgeworICAgICAgICBtb2RlIC09IDQ7CisgICAgICAgIHRyeV9xdWljayA9IDA7CisgICAgfQorICAgIGxlZnRyaWdodCA9IDE7CisgICAgaWxpbSA9IGlsaW0xID0gLTE7ICAvKiBWYWx1ZXMgZm9yIGNhc2VzIDAgYW5kIDE7IGRvbmUgaGVyZSB0byAqLworICAgIC8qIHNpbGVuY2UgZXJyb25lb3VzICJnY2MgLVdhbGwiIHdhcm5pbmcuICovCisgICAgc3dpdGNoKG1vZGUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgICAgICBpID0gMTg7CisgICAgICAgIG5kaWdpdHMgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGxlZnRyaWdodCA9IDA7CisgICAgICAgIC8qIG5vIGJyZWFrICovCisgICAgY2FzZSA0OgorICAgICAgICBpZiAobmRpZ2l0cyA8PSAwKQorICAgICAgICAgICAgbmRpZ2l0cyA9IDE7CisgICAgICAgIGlsaW0gPSBpbGltMSA9IGkgPSBuZGlnaXRzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICAgIGxlZnRyaWdodCA9IDA7CisgICAgICAgIC8qIG5vIGJyZWFrICovCisgICAgY2FzZSA1OgorICAgICAgICBpID0gbmRpZ2l0cyArIGsgKyAxOworICAgICAgICBpbGltID0gaTsKKyAgICAgICAgaWxpbTEgPSBpIC0gMTsKKyAgICAgICAgaWYgKGkgPD0gMCkKKyAgICAgICAgICAgIGkgPSAxOworICAgIH0KKyAgICBzMCA9IHJ2X2FsbG9jKGkpOworICAgIGlmIChzMCA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgcyA9IHMwOworCisKKyAgICBpZiAoaWxpbSA+PSAwICYmIGlsaW0gPD0gUXVpY2tfbWF4ICYmIHRyeV9xdWljaykgeworCisgICAgICAgIC8qIFRyeSB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLiAqLworCisgICAgICAgIGkgPSAwOworICAgICAgICBkdmFsKCZkMikgPSBkdmFsKCZ1KTsKKyAgICAgICAgazAgPSBrOworICAgICAgICBpbGltMCA9IGlsaW07CisgICAgICAgIGllcHMgPSAyOyAvKiBjb25zZXJ2YXRpdmUgKi8KKyAgICAgICAgaWYgKGsgPiAwKSB7CisgICAgICAgICAgICBkcyA9IHRlbnNbayYweGZdOworICAgICAgICAgICAgaiA9IGsgPj4gNDsKKyAgICAgICAgICAgIGlmIChqICYgQmxldGNoKSB7CisgICAgICAgICAgICAgICAgLyogcHJldmVudCBvdmVyZmxvd3MgKi8KKyAgICAgICAgICAgICAgICBqICY9IEJsZXRjaCAtIDE7CisgICAgICAgICAgICAgICAgZHZhbCgmdSkgLz0gYmlndGVuc1tuX2JpZ3RlbnMtMV07CisgICAgICAgICAgICAgICAgaWVwcysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yKDsgajsgaiA+Pj0gMSwgaSsrKQorICAgICAgICAgICAgICAgIGlmIChqICYgMSkgeworICAgICAgICAgICAgICAgICAgICBpZXBzKys7CisgICAgICAgICAgICAgICAgICAgIGRzICo9IGJpZ3RlbnNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZHZhbCgmdSkgLz0gZHM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGoxID0gLWspKSB7CisgICAgICAgICAgICBkdmFsKCZ1KSAqPSB0ZW5zW2oxICYgMHhmXTsKKyAgICAgICAgICAgIGZvcihqID0gajEgPj4gNDsgajsgaiA+Pj0gMSwgaSsrKQorICAgICAgICAgICAgICAgIGlmIChqICYgMSkgeworICAgICAgICAgICAgICAgICAgICBpZXBzKys7CisgICAgICAgICAgICAgICAgICAgIGR2YWwoJnUpICo9IGJpZ3RlbnNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChrX2NoZWNrICYmIGR2YWwoJnUpIDwgMS4gJiYgaWxpbSA+IDApIHsKKyAgICAgICAgICAgIGlmIChpbGltMSA8PSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9mYWlsZWQ7CisgICAgICAgICAgICBpbGltID0gaWxpbTE7CisgICAgICAgICAgICBrLS07CisgICAgICAgICAgICBkdmFsKCZ1KSAqPSAxMC47CisgICAgICAgICAgICBpZXBzKys7CisgICAgICAgIH0KKyAgICAgICAgZHZhbCgmZXBzKSA9IGllcHMqZHZhbCgmdSkgKyA3LjsKKyAgICAgICAgd29yZDAoJmVwcykgLT0gKFAtMSkqRXhwX21zazE7CisgICAgICAgIGlmIChpbGltID09IDApIHsKKyAgICAgICAgICAgIFMgPSBtaGkgPSAwOworICAgICAgICAgICAgZHZhbCgmdSkgLT0gNS47CisgICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiBkdmFsKCZlcHMpKQorICAgICAgICAgICAgICAgIGdvdG8gb25lX2RpZ2l0OworICAgICAgICAgICAgaWYgKGR2YWwoJnUpIDwgLWR2YWwoJmVwcykpCisgICAgICAgICAgICAgICAgZ290byBub19kaWdpdHM7CisgICAgICAgICAgICBnb3RvIGZhc3RfZmFpbGVkOworICAgICAgICB9CisgICAgICAgIGlmIChsZWZ0cmlnaHQpIHsKKyAgICAgICAgICAgIC8qIFVzZSBTdGVlbGUgJiBXaGl0ZSBtZXRob2Qgb2Ygb25seQorICAgICAgICAgICAgICogZ2VuZXJhdGluZyBkaWdpdHMgbmVlZGVkLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBkdmFsKCZlcHMpID0gMC41L3RlbnNbaWxpbS0xXSAtIGR2YWwoJmVwcyk7CisgICAgICAgICAgICBmb3IoaSA9IDA7OykgeworICAgICAgICAgICAgICAgIEwgPSAoTG9uZylkdmFsKCZ1KTsKKyAgICAgICAgICAgICAgICBkdmFsKCZ1KSAtPSBMOworICAgICAgICAgICAgICAgICpzKysgPSAnMCcgKyAoaW50KUw7CisgICAgICAgICAgICAgICAgaWYgKGR2YWwoJnUpIDwgZHZhbCgmZXBzKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byByZXQxOworICAgICAgICAgICAgICAgIGlmICgxLiAtIGR2YWwoJnUpIDwgZHZhbCgmZXBzKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBidW1wX3VwOworICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gaWxpbSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZHZhbCgmZXBzKSAqPSAxMC47CisgICAgICAgICAgICAgICAgZHZhbCgmdSkgKj0gMTAuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogR2VuZXJhdGUgaWxpbSBkaWdpdHMsIHRoZW4gZml4IHRoZW0gdXAuICovCisgICAgICAgICAgICBkdmFsKCZlcHMpICo9IHRlbnNbaWxpbS0xXTsKKyAgICAgICAgICAgIGZvcihpID0gMTs7IGkrKywgZHZhbCgmdSkgKj0gMTAuKSB7CisgICAgICAgICAgICAgICAgTCA9IChMb25nKShkdmFsKCZ1KSk7CisgICAgICAgICAgICAgICAgaWYgKCEoZHZhbCgmdSkgLT0gTCkpCisgICAgICAgICAgICAgICAgICAgIGlsaW0gPSBpOworICAgICAgICAgICAgICAgICpzKysgPSAnMCcgKyAoaW50KUw7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gaWxpbSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiAwLjUgKyBkdmFsKCZlcHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBidW1wX3VwOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkdmFsKCZ1KSA8IDAuNSAtIGR2YWwoJmVwcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCotLXMgPT0gJzAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmV0MTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGZhc3RfZmFpbGVkOgorICAgICAgICBzID0gczA7CisgICAgICAgIGR2YWwoJnUpID0gZHZhbCgmZDIpOworICAgICAgICBrID0gazA7CisgICAgICAgIGlsaW0gPSBpbGltMDsKKyAgICB9CisKKyAgICAvKiBEbyB3ZSBoYXZlIGEgInNtYWxsIiBpbnRlZ2VyPyAqLworCisgICAgaWYgKGJlID49IDAgJiYgayA8PSBJbnRfbWF4KSB7CisgICAgICAgIC8qIFllcy4gKi8KKyAgICAgICAgZHMgPSB0ZW5zW2tdOworICAgICAgICBpZiAobmRpZ2l0cyA8IDAgJiYgaWxpbSA8PSAwKSB7CisgICAgICAgICAgICBTID0gbWhpID0gMDsKKyAgICAgICAgICAgIGlmIChpbGltIDwgMCB8fCBkdmFsKCZ1KSA8PSA1KmRzKQorICAgICAgICAgICAgICAgIGdvdG8gbm9fZGlnaXRzOworICAgICAgICAgICAgZ290byBvbmVfZGlnaXQ7CisgICAgICAgIH0KKyAgICAgICAgZm9yKGkgPSAxOzsgaSsrLCBkdmFsKCZ1KSAqPSAxMC4pIHsKKyAgICAgICAgICAgIEwgPSAoTG9uZykoZHZhbCgmdSkgLyBkcyk7CisgICAgICAgICAgICBkdmFsKCZ1KSAtPSBMKmRzOworICAgICAgICAgICAgKnMrKyA9ICcwJyArIChpbnQpTDsKKyAgICAgICAgICAgIGlmICghZHZhbCgmdSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpID09IGlsaW0pIHsKKyAgICAgICAgICAgICAgICBkdmFsKCZ1KSArPSBkdmFsKCZ1KTsKKyAgICAgICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiBkcyB8fCAoZHZhbCgmdSkgPT0gZHMgJiYgTCAmIDEpKSB7CisgICAgICAgICAgICAgICAgICBidW1wX3VwOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSgqLS1zID09ICc5JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID09IHMwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaysrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArKypzKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdvdG8gcmV0MTsKKyAgICB9CisKKyAgICBtMiA9IGIyOworICAgIG01ID0gYjU7CisgICAgaWYgKGxlZnRyaWdodCkgeworICAgICAgICBpID0KKyAgICAgICAgICAgIGRlbm9ybSA/IGJlICsgKEJpYXMgKyAoUC0xKSAtIDEgKyAxKSA6CisgICAgICAgICAgICAxICsgUCAtIGJiaXRzOworICAgICAgICBiMiArPSBpOworICAgICAgICBzMiArPSBpOworICAgICAgICBtaGkgPSBpMmIoMSk7CisgICAgICAgIGlmIChtaGkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICB9CisgICAgaWYgKG0yID4gMCAmJiBzMiA+IDApIHsKKyAgICAgICAgaSA9IG0yIDwgczIgPyBtMiA6IHMyOworICAgICAgICBiMiAtPSBpOworICAgICAgICBtMiAtPSBpOworICAgICAgICBzMiAtPSBpOworICAgIH0KKyAgICBpZiAoYjUgPiAwKSB7CisgICAgICAgIGlmIChsZWZ0cmlnaHQpIHsKKyAgICAgICAgICAgIGlmIChtNSA+IDApIHsKKyAgICAgICAgICAgICAgICBtaGkgPSBwb3c1bXVsdChtaGksIG01KTsKKyAgICAgICAgICAgICAgICBpZiAobWhpID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgICAgICBiMSA9IG11bHQobWhpLCBiKTsKKyAgICAgICAgICAgICAgICBCZnJlZShiKTsKKyAgICAgICAgICAgICAgICBiID0gYjE7CisgICAgICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChqID0gYjUgLSBtNSkpIHsKKyAgICAgICAgICAgICAgICBiID0gcG93NW11bHQoYiwgaik7CisgICAgICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYiA9IHBvdzVtdWx0KGIsIGI1KTsKKyAgICAgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICB9CisgICAgfQorICAgIFMgPSBpMmIoMSk7CisgICAgaWYgKFMgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgIGlmIChzNSA+IDApIHsKKyAgICAgICAgUyA9IHBvdzVtdWx0KFMsIHM1KTsKKyAgICAgICAgaWYgKFMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4gKi8KKworICAgIHNwZWNfY2FzZSA9IDA7CisgICAgaWYgKChtb2RlIDwgMiB8fCBsZWZ0cmlnaHQpCisgICAgICAgICkgeworICAgICAgICBpZiAoIXdvcmQxKCZ1KSAmJiAhKHdvcmQwKCZ1KSAmIEJuZHJ5X21hc2spCisgICAgICAgICAgICAmJiB3b3JkMCgmdSkgJiAoRXhwX21hc2sgJiB+RXhwX21zazEpCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIC8qIFRoZSBzcGVjaWFsIGNhc2UgKi8KKyAgICAgICAgICAgIGIyICs9IExvZzJQOworICAgICAgICAgICAgczIgKz0gTG9nMlA7CisgICAgICAgICAgICBzcGVjX2Nhc2UgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQXJyYW5nZSBmb3IgY29udmVuaWVudCBjb21wdXRhdGlvbiBvZiBxdW90aWVudHM6CisgICAgICogc2hpZnQgbGVmdCBpZiBuZWNlc3Nhcnkgc28gZGl2aXNvciBoYXMgNCBsZWFkaW5nIDAgYml0cy4KKyAgICAgKgorICAgICAqIFBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgY29tcHV0ZSBsZWFkaW5nIDI4IGJpdHMgb2YgUyBvbmNlCisgICAgICogYW5kIGZvciBhbGwgYW5kIHBhc3MgdGhlbSBhbmQgYSBzaGlmdCB0byBxdW9yZW0sIHNvIGl0CisgICAgICogY2FuIGRvIHNoaWZ0cyBhbmQgb3JzIHRvIGNvbXB1dGUgdGhlIG51bWVyYXRvciBmb3IgcS4KKyAgICAgKi8KKyNkZWZpbmUgaUluYyAyOAorICAgIGkgPSBkc2hpZnQoUywgczIpOworICAgIGIyICs9IGk7CisgICAgbTIgKz0gaTsKKyAgICBzMiArPSBpOworICAgIGlmIChiMiA+IDApIHsKKyAgICAgICAgYiA9IGxzaGlmdChiLCBiMik7CisgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgfQorICAgIGlmIChzMiA+IDApIHsKKyAgICAgICAgUyA9IGxzaGlmdChTLCBzMik7CisgICAgICAgIGlmIChTID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgfQorICAgIGlmIChrX2NoZWNrKSB7CisgICAgICAgIGlmIChjbXAoYixTKSA8IDApIHsKKyAgICAgICAgICAgIGstLTsKKyAgICAgICAgICAgIGIgPSBtdWx0YWRkKGIsIDEwLCAwKTsgICAgICAvKiB3ZSBib3RjaGVkIHRoZSBrIGVzdGltYXRlICovCisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIGlmIChsZWZ0cmlnaHQpIHsKKyAgICAgICAgICAgICAgICBtaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworICAgICAgICAgICAgICAgIGlmIChtaGkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWxpbSA9IGlsaW0xOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbGltIDw9IDAgJiYgKG1vZGUgPT0gMyB8fCBtb2RlID09IDUpKSB7CisgICAgICAgIGlmIChpbGltIDwgMCkgeworICAgICAgICAgICAgLyogbm8gZGlnaXRzLCBmY3Z0IHN0eWxlICovCisgICAgICAgICAgbm9fZGlnaXRzOgorICAgICAgICAgICAgayA9IC0xIC0gbmRpZ2l0czsKKyAgICAgICAgICAgIGdvdG8gcmV0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUyA9IG11bHRhZGQoUywgNSwgMCk7CisgICAgICAgICAgICBpZiAoUyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIGlmIChjbXAoYiwgUykgPD0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIG5vX2RpZ2l0czsKKyAgICAgICAgfQorICAgICAgb25lX2RpZ2l0OgorICAgICAgICAqcysrID0gJzEnOworICAgICAgICBrKys7CisgICAgICAgIGdvdG8gcmV0OworICAgIH0KKyAgICBpZiAobGVmdHJpZ2h0KSB7CisgICAgICAgIGlmIChtMiA+IDApIHsKKyAgICAgICAgICAgIG1oaSA9IGxzaGlmdChtaGksIG0yKTsKKyAgICAgICAgICAgIGlmIChtaGkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgIH0KKworICAgICAgICAvKiBDb21wdXRlIG1sbyAtLSBjaGVjayBmb3Igc3BlY2lhbCBjYXNlCisgICAgICAgICAqIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4KKyAgICAgICAgICovCisKKyAgICAgICAgbWxvID0gbWhpOworICAgICAgICBpZiAoc3BlY19jYXNlKSB7CisgICAgICAgICAgICBtaGkgPSBCYWxsb2MobWhpLT5rKTsKKyAgICAgICAgICAgIGlmIChtaGkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICBCY29weShtaGksIG1sbyk7CisgICAgICAgICAgICBtaGkgPSBsc2hpZnQobWhpLCBMb2cyUCk7CisgICAgICAgICAgICBpZiAobWhpID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICB9CisKKyAgICAgICAgZm9yKGkgPSAxOztpKyspIHsKKyAgICAgICAgICAgIGRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworICAgICAgICAgICAgLyogRG8gd2UgeWV0IGhhdmUgdGhlIHNob3J0ZXN0IGRlY2ltYWwgc3RyaW5nCisgICAgICAgICAgICAgKiB0aGF0IHdpbGwgcm91bmQgdG8gZD8KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaiA9IGNtcChiLCBtbG8pOworICAgICAgICAgICAgZGVsdGEgPSBkaWZmKFMsIG1oaSk7CisgICAgICAgICAgICBpZiAoZGVsdGEgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICBqMSA9IGRlbHRhLT5zaWduID8gMSA6IGNtcChiLCBkZWx0YSk7CisgICAgICAgICAgICBCZnJlZShkZWx0YSk7CisgICAgICAgICAgICBpZiAoajEgPT0gMCAmJiBtb2RlICE9IDEgJiYgISh3b3JkMSgmdSkgJiAxKQorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIGlmIChkaWcgPT0gJzknKQorICAgICAgICAgICAgICAgICAgICBnb3RvIHJvdW5kXzlfdXA7CisgICAgICAgICAgICAgICAgaWYgKGogPiAwKQorICAgICAgICAgICAgICAgICAgICBkaWcrKzsKKyAgICAgICAgICAgICAgICAqcysrID0gZGlnOworICAgICAgICAgICAgICAgIGdvdG8gcmV0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGogPCAwIHx8IChqID09IDAgJiYgbW9kZSAhPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEod29yZDEoJnUpICYgMSkKKyAgICAgICAgICAgICAgICAgICAgKSkgeworICAgICAgICAgICAgICAgIGlmICghYi0+eFswXSAmJiBiLT53ZHMgPD0gMSkgeworICAgICAgICAgICAgICAgICAgICBnb3RvIGFjY2VwdF9kaWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChqMSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYiA9IGxzaGlmdChiLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgICAgICAgICAgajEgPSBjbXAoYiwgUyk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoajEgPiAwIHx8IChqMSA9PSAwICYmIGRpZyAmIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgZGlnKysgPT0gJzknKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byByb3VuZF85X3VwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYWNjZXB0X2RpZzoKKyAgICAgICAgICAgICAgICAqcysrID0gZGlnOworICAgICAgICAgICAgICAgIGdvdG8gcmV0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGoxID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChkaWcgPT0gJzknKSB7IC8qIHBvc3NpYmxlIGlmIGkgPT0gMSAqLworICAgICAgICAgICAgICAgICAgcm91bmRfOV91cDoKKyAgICAgICAgICAgICAgICAgICAgKnMrKyA9ICc5JzsKKyAgICAgICAgICAgICAgICAgICAgZ290byByb3VuZG9mZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnMrKyA9IGRpZyArIDE7CisgICAgICAgICAgICAgICAgZ290byByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqcysrID0gZGlnOworICAgICAgICAgICAgaWYgKGkgPT0gaWxpbSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKKyAgICAgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgaWYgKG1sbyA9PSBtaGkpIHsKKyAgICAgICAgICAgICAgICBtbG8gPSBtaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworICAgICAgICAgICAgICAgIGlmIChtbG8gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbWxvID0gbXVsdGFkZChtbG8sIDEwLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAobWxvID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgICAgICBtaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworICAgICAgICAgICAgICAgIGlmIChtaGkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZm9yKGkgPSAxOzsgaSsrKSB7CisgICAgICAgICAgICAqcysrID0gZGlnID0gcXVvcmVtKGIsUykgKyAnMCc7CisgICAgICAgICAgICBpZiAoIWItPnhbMF0gJiYgYi0+d2RzIDw9IDEpIHsKKyAgICAgICAgICAgICAgICBnb3RvIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpID49IGlsaW0pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBiID0gbXVsdGFkZChiLCAxMCwgMCk7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgfQorCisgICAgLyogUm91bmQgb2ZmIGxhc3QgZGlnaXQgKi8KKworICAgIGIgPSBsc2hpZnQoYiwgMSk7CisgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgIGogPSBjbXAoYiwgUyk7CisgICAgaWYgKGogPiAwIHx8IChqID09IDAgJiYgZGlnICYgMSkpIHsKKyAgICAgIHJvdW5kb2ZmOgorICAgICAgICB3aGlsZSgqLS1zID09ICc5JykKKyAgICAgICAgICAgIGlmIChzID09IHMwKSB7CisgICAgICAgICAgICAgICAgaysrOworICAgICAgICAgICAgICAgICpzKysgPSAnMSc7CisgICAgICAgICAgICAgICAgZ290byByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICsrKnMrKzsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdoaWxlKCotLXMgPT0gJzAnKTsKKyAgICAgICAgcysrOworICAgIH0KKyAgcmV0OgorICAgIEJmcmVlKFMpOworICAgIGlmIChtaGkpIHsKKyAgICAgICAgaWYgKG1sbyAmJiBtbG8gIT0gbWhpKQorICAgICAgICAgICAgQmZyZWUobWxvKTsKKyAgICAgICAgQmZyZWUobWhpKTsKKyAgICB9CisgIHJldDE6CisgICAgQmZyZWUoYik7CisgICAgKnMgPSAwOworICAgICpkZWNwdCA9IGsgKyAxOworICAgIGlmIChydmUpCisgICAgICAgICpydmUgPSBzOworICAgIHJldHVybiBzMDsKKyAgZmFpbGVkX21hbGxvYzoKKyAgICBpZiAoUykKKyAgICAgICAgQmZyZWUoUyk7CisgICAgaWYgKG1sbyAmJiBtbG8gIT0gbWhpKQorICAgICAgICBCZnJlZShtbG8pOworICAgIGlmIChtaGkpCisgICAgICAgIEJmcmVlKG1oaSk7CisgICAgaWYgKGIpCisgICAgICAgIEJmcmVlKGIpOworICAgIGlmIChzMCkKKyAgICAgICAgX1B5X2RnX2ZyZWVkdG9hKHMwKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLyogUFlfTk9fU0hPUlRfRkxPQVRfUkVQUiAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R1cDIuYyBiL1B5dGhvbi9kdXAyLmMKaW5kZXggYmE3NDEzYS4uMjU3OWFmZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2R1cDIuYworKysgYi9QeXRob24vZHVwMi5jCkBAIC0xMiw2ICsxMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNkZWZpbmUgQkFERVhJVCAtMQogCmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9haXguYyBiL1B5dGhvbi9keW5sb2FkX2FpeC5jCmluZGV4IDhkNTZkN2QuLjE0OTk5MGQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9keW5sb2FkX2FpeC5jCisrKyBiL1B5dGhvbi9keW5sb2FkX2FpeC5jCkBAIC0xMiw3ICsxMiw3IEBACiAKIAogI2lmZGVmIEFJWF9HRU5VSU5FX0NQTFVTUExVUwotI2luY2x1ZGUgIi91c3IvbHBwL3hsQy9pbmNsdWRlL2xvYWQuaCIKKyNpbmNsdWRlIDxsb2FkLmg+CiAjZGVmaW5lIGFpeF9sb2FkIGxvYWRBbmRJbml0CiAjZWxzZQogI2RlZmluZSBhaXhfbG9hZCBsb2FkCmRpZmYgLS1naXQgYS9QeXRob24vZXJyb3JzLmMgYi9QeXRob24vZXJyb3JzLmMKaW5kZXggZGE0YjQ2My4uNDI5NGYyZiAxMDA2NDQKLS0tIGEvUHl0aG9uL2Vycm9ycy5jCisrKyBiL1B5dGhvbi9lcnJvcnMuYwpAQCAtMTA2LDEwICsxMDYsMTYgQEAKICAgICAgICAgZXJyID0gUHlFeGNlcHRpb25JbnN0YW5jZV9DbGFzcyhlcnIpOwogCiAgICAgaWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soZXJyKSAmJiBQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGV4YykpIHsKLSAgICAgICAgaW50IHJlcyA9IDA7CisgICAgICAgIGludCByZXMgPSAwLCByZWNsaW1pdDsKICAgICAgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CiAgICAgICAgIFB5RXJyX0ZldGNoKCZleGNlcHRpb24sICZ2YWx1ZSwgJnRiKTsKKyAgICAgICAgLyogVGVtcG9yYXJpbHkgYnVtcCB0aGUgcmVjdXJzaW9uIGxpbWl0LCBzbyB0aGF0IGluIHRoZSBtb3N0CisgICAgICAgICAgIGNvbW1vbiBjYXNlIFB5T2JqZWN0X0lzU3ViY2xhc3Mgd2lsbCBub3QgcmFpc2UgYSByZWN1cnNpb24KKyAgICAgICAgICAgZXJyb3Igd2UgaGF2ZSB0byBpZ25vcmUgYW55d2F5LiAqLworICAgICAgICByZWNsaW1pdCA9IFB5X0dldFJlY3Vyc2lvbkxpbWl0KCk7CisgICAgICAgIFB5X1NldFJlY3Vyc2lvbkxpbWl0KHJlY2xpbWl0ICsgNSk7CiAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0lzU3ViY2xhc3MoZXJyLCBleGMpOworICAgICAgICBQeV9TZXRSZWN1cnNpb25MaW1pdChyZWNsaW1pdCk7CiAgICAgICAgIC8qIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgZmFpbCwgc28gcHJpbnQgdGhlIGVycm9yIGhlcmUgKi8KICAgICAgICAgaWYgKHJlcyA9PSAtMSkgewogICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGVycik7CkBAIC0zNjUsNyArMzcxLDcgQEAKIAogCiBQeU9iamVjdCAqCi1QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlPYmplY3QgKmV4YywgY2hhciAqZmlsZW5hbWUpCitQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlPYmplY3QgKmV4YywgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/IFB5U3RyaW5nX0Zyb21TdHJpbmcoZmlsZW5hbWUpIDogTlVMTDsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KGV4YywgbmFtZSk7CkBAIC0zNzMsOSArMzc5LDkgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCisjaWZkZWYgTVNfV0lORE9XUwogUHlPYmplY3QgKgotUHlFcnJfU2V0RnJvbUVycm5vV2l0aFVuaWNvZGVGaWxlbmFtZShQeU9iamVjdCAqZXhjLCBQeV9VTklDT0RFICpmaWxlbmFtZSkKK1B5RXJyX1NldEZyb21FcnJub1dpdGhVbmljb2RlRmlsZW5hbWUoUHlPYmplY3QgKmV4YywgY29uc3QgUHlfVU5JQ09ERSAqZmlsZW5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/CiAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoZmlsZW5hbWUsIHdjc2xlbihmaWxlbmFtZSkpIDoKQEAgLTM4NCw3ICszOTAsNyBAQAogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLSNlbmRpZiAvKiBQeV9XSU5fV0lERV9GSUxFTkFNRVMgKi8KKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIFB5T2JqZWN0ICoKIFB5RXJyX1NldEZyb21FcnJubyhQeU9iamVjdCAqZXhjKQpAQCAtNDU0LDcgKzQ2MCw2IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwogUHlPYmplY3QgKlB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aFVuaWNvZGVGaWxlbmFtZSgKICAgICBQeU9iamVjdCAqZXhjLAogICAgIGludCBpZXJyLApAQCAtNDY5LDcgKzQ3NCw2IEBACiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmV0OwogfQotI2VuZGlmIC8qIFB5X1dJTl9XSURFX0ZJTEVOQU1FUyAqLwogCiBQeU9iamVjdCAqUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlPYmplY3QgKmV4YywgaW50IGllcnIpCiB7CkBAIC00OTMsNyArNDk3LDYgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCiBQeU9iamVjdCAqUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoVW5pY29kZUZpbGVuYW1lKAogICAgIGludCBpZXJyLAogICAgIGNvbnN0IFB5X1VOSUNPREUgKmZpbGVuYW1lKQpAQCAtNTA3LDcgKzUxMCw2IEBACiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQotI2VuZGlmIC8qIFB5X1dJTl9XSURFX0ZJTEVOQU1FUyAqLwogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAogdm9pZApAQCAtNjAyLDYgKzYwNCw0MCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKworLyogQ3JlYXRlIGFuIGV4Y2VwdGlvbiB3aXRoIGRvY3N0cmluZyAqLworUHlPYmplY3QgKgorUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYyhjaGFyICpuYW1lLCBjaGFyICpkb2MsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCkKK3sKKyAgICBpbnQgcmVzdWx0OworICAgIFB5T2JqZWN0ICpyZXQgPSBOVUxMOworICAgIFB5T2JqZWN0ICpteWRpY3QgPSBOVUxMOyAvKiBwb2ludHMgdG8gdGhlIGRpY3Qgb25seSBpZiB3ZSBjcmVhdGUgaXQgKi8KKyAgICBQeU9iamVjdCAqZG9jb2JqOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICBkaWN0ID0gbXlkaWN0ID0gUHlEaWN0X05ldygpOworICAgICAgICBpZiAoZGljdCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkb2MgIT0gTlVMTCkgeworICAgICAgICBkb2NvYmogPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGRvYyk7CisgICAgICAgIGlmIChkb2NvYmogPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbHVyZTsKKyAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgIl9fZG9jX18iLCBkb2NvYmopOworICAgICAgICBQeV9ERUNSRUYoZG9jb2JqKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgfQorCisgICAgcmV0ID0gUHlFcnJfTmV3RXhjZXB0aW9uKG5hbWUsIGJhc2UsIGRpY3QpOworICBmYWlsdXJlOgorICAgIFB5X1hERUNSRUYobXlkaWN0KTsKKyAgICByZXR1cm4gcmV0OworfQorCisKIC8qIENhbGwgd2hlbiBhbiBleGNlcHRpb24gaGFzIG9jY3VycmVkIGJ1dCB0aGVyZSBpcyBubyB3YXkgZm9yIFB5dGhvbgogICAgdG8gaGFuZGxlIGl0LiAgRXhhbXBsZXM6IGV4Y2VwdGlvbiBpbiBfX2RlbF9fIG9yIGR1cmluZyBHQy4gKi8KIHZvaWQKZGlmZiAtLWdpdCBhL1B5dGhvbi9mb3JtYXR0ZXJfc3RyaW5nLmMgYi9QeXRob24vZm9ybWF0dGVyX3N0cmluZy5jCmluZGV4IGYzM2FkNzAuLjA2YTJlZjUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mb3JtYXR0ZXJfc3RyaW5nLmMKKysrIGIvUHl0aG9uL2Zvcm1hdHRlcl9zdHJpbmcuYwpAQCAtMSwxNCArMSwxNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogSW1wbGVtZW50cyB0aGUgc3RyaW5nIChhcyBvcHBvc2VkIHRvIHVuaWNvZGUpIHZlcnNpb24gb2YgdGhlCiAgICBidWlsdC1pbiBmb3JtYXR0ZXJzIGZvciBzdHJpbmcsIGludCwgZmxvYXQuICBUaGF0IGlzLCB0aGUgdmVyc2lvbnMKLSAgIG9mIGludC5fX2Zsb2F0X18sIGV0Yy4sIHRoYXQgdGFrZSBhbmQgcmV0dXJuIHN0cmluZyBvYmplY3RzICovCisgICBvZiBpbnQuX19mb3JtYXRfXywgZXRjLiwgdGhhdCB0YWtlIGFuZCByZXR1cm4gc3RyaW5nIG9iamVjdHMgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgIi4uL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaCIKIAotI2RlZmluZSBGT1JNQVRfU1RSSU5HIF9QeUJ5dGVzX0Zvcm1hdEFkdmFuY2VkCi0jZGVmaW5lIEZPUk1BVF9MT05HICAgX1B5TG9uZ19Gb3JtYXRBZHZhbmNlZAotI2RlZmluZSBGT1JNQVRfSU5UICAgIF9QeUludF9Gb3JtYXRBZHZhbmNlZAotI2RlZmluZSBGT1JNQVRfRkxPQVQgIF9QeUZsb2F0X0Zvcm1hdEFkdmFuY2VkCisjZGVmaW5lIEZPUk1BVF9TVFJJTkcgIF9QeUJ5dGVzX0Zvcm1hdEFkdmFuY2VkCisjZGVmaW5lIEZPUk1BVF9MT05HICAgIF9QeUxvbmdfRm9ybWF0QWR2YW5jZWQKKyNkZWZpbmUgRk9STUFUX0lOVCAgICAgX1B5SW50X0Zvcm1hdEFkdmFuY2VkCisjZGVmaW5lIEZPUk1BVF9GTE9BVCAgIF9QeUZsb2F0X0Zvcm1hdEFkdmFuY2VkCisjaWZuZGVmIFdJVEhPVVRfQ09NUExFWAorI2RlZmluZSBGT1JNQVRfQ09NUExFWCBfUHlDb21wbGV4X0Zvcm1hdEFkdmFuY2VkCisjZW5kaWYKIAogI2luY2x1ZGUgIi4uL09iamVjdHMvc3RyaW5nbGliL2Zvcm1hdHRlci5oIgpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMgYi9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYwppbmRleCA0ZjJlNTNmLi42ZTM2ODVkIDEwMDY0NAotLS0gYS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYworKysgYi9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYwpAQCAtMiwxMiArMiwxNyBAQAogICAgYnVpbHQtaW4gZm9ybWF0dGVyIGZvciB1bmljb2RlLiAgVGhhdCBpcywgdW5pY29kZS5fX2Zvcm1hdF9fKCkuICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKKworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKKwogI2luY2x1ZGUgIi4uL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgiCiAKICNkZWZpbmUgRk9STUFUX1NUUklORyBfUHlVbmljb2RlX0Zvcm1hdEFkdmFuY2VkCiAKLS8qIGRvbid0IGRlZmluZSBGT1JNQVRfTE9ORyBhbmQgRk9STUFUX0ZMT0FULCBzaW5jZSB3ZSBjYW4gbGl2ZQotICAgd2l0aCBvbmx5IHRoZSBzdHJpbmcgdmVyc2lvbnMgb2YgdGhvc2UuICBUaGUgYnVpbHRpbiBmb3JtYXQoKQotICAgd2lsbCBjb252ZXJ0IHRoZW0gdG8gdW5pY29kZS4gKi8KKy8qIGRvbid0IGRlZmluZSBGT1JNQVRfTE9ORywgRk9STUFUX0ZMT0FULCBhbmQgRk9STUFUX0NPTVBMRVgsIHNpbmNlCisgICB3ZSBjYW4gbGl2ZSB3aXRoIG9ubHkgdGhlIHN0cmluZyB2ZXJzaW9ucyBvZiB0aG9zZS4gIFRoZSBidWlsdGluCisgICBmb3JtYXQoKSB3aWxsIGNvbnZlcnQgdGhlbSB0byB1bmljb2RlLiAqLwogCiAjaW5jbHVkZSAiLi4vT2JqZWN0cy9zdHJpbmdsaWIvZm9ybWF0dGVyLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Z1dHVyZS5jIGIvUHl0aG9uL2Z1dHVyZS5jCmluZGV4IDkxNThkZjQuLjk2YmU3NTcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mdXR1cmUuYworKysgYi9QeXRob24vZnV0dXJlLmMKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSAic3ltdGFibGUuaCIKIAogI2RlZmluZSBVTkRFRklORURfRlVUVVJFX0ZFQVRVUkUgImZ1dHVyZSBmZWF0dXJlICUuMTAwcyBpcyBub3QgZGVmaW5lZCIKKyNkZWZpbmUgRVJSX0xBVEVfRlVUVVJFIFwKKyJmcm9tIF9fZnV0dXJlX18gaW1wb3J0cyBtdXN0IG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUiCiAKIHN0YXRpYyBpbnQKIGZ1dHVyZV9jaGVja19mZWF0dXJlcyhQeUZ1dHVyZUZlYXR1cmVzICpmZiwgc3RtdF90eSBzLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi9nZXRhcmdzLmMgYi9QeXRob24vZ2V0YXJncy5jCmluZGV4IGIzOWUwN2UuLjdjM2U5ZmEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9nZXRhcmdzLmMKKysrIGIvUHl0aG9uL2dldGFyZ3MuYwpAQCAtMTM5LDIyICsxMzksMzMgQEAKIAogLyogSGFuZGxlIGNsZWFudXAgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiBjYXNlIG9mIGV4Y2VwdGlvbiAqLwogCisjZGVmaW5lIEdFVEFSR1NfQ0FQU1VMRV9OQU1FX0NMRUFOVVBfUFRSICJnZXRhcmdzLmNsZWFudXBfcHRyIgorI2RlZmluZSBHRVRBUkdTX0NBUFNVTEVfTkFNRV9DTEVBTlVQX0JVRkZFUiAiZ2V0YXJncy5jbGVhbnVwX2J1ZmZlciIKKwogc3RhdGljIHZvaWQKLWNsZWFudXBfcHRyKHZvaWQgKnB0cikKK2NsZWFudXBfcHRyKFB5T2JqZWN0ICpzZWxmKQogewotICAgIFB5TWVtX0ZSRUUocHRyKTsKKyAgICB2b2lkICpwdHIgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihzZWxmLCBHRVRBUkdTX0NBUFNVTEVfTkFNRV9DTEVBTlVQX1BUUik7CisgICAgaWYgKHB0cikgeworICAgICAgUHlNZW1fRlJFRShwdHIpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQKLWNsZWFudXBfYnVmZmVyKHZvaWQgKnB0cikKK2NsZWFudXBfYnVmZmVyKFB5T2JqZWN0ICpzZWxmKQogewotICAgIFB5QnVmZmVyX1JlbGVhc2UoKFB5X2J1ZmZlciAqKSBwdHIpOworICAgIFB5X2J1ZmZlciAqcHRyID0gKFB5X2J1ZmZlciAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKHNlbGYsIEdFVEFSR1NfQ0FQU1VMRV9OQU1FX0NMRUFOVVBfQlVGRkVSKTsKKyAgICBpZiAocHRyKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UocHRyKTsKKyAgICB9CiB9CiAKIHN0YXRpYyBpbnQKLWFkZGNsZWFudXAodm9pZCAqcHRyLCBQeU9iamVjdCAqKmZyZWVsaXN0LCB2b2lkICgqZGVzdHIpKHZvaWQgKikpCithZGRjbGVhbnVwKHZvaWQgKnB0ciwgUHlPYmplY3QgKipmcmVlbGlzdCwgUHlDYXBzdWxlX0Rlc3RydWN0b3IgZGVzdHIpCiB7CiAgICAgUHlPYmplY3QgKmNvYmo7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKwogICAgIGlmICghKmZyZWVsaXN0KSB7CiAgICAgICAgICpmcmVlbGlzdCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgICAgIGlmICghKmZyZWVsaXN0KSB7CkBAIC0xNjIsNyArMTczLDE1IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgY29iaiA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cihwdHIsIGRlc3RyKTsKKworICAgIGlmIChkZXN0ciA9PSBjbGVhbnVwX3B0cikgeworICAgICAgICBuYW1lID0gR0VUQVJHU19DQVBTVUxFX05BTUVfQ0xFQU5VUF9QVFI7CisgICAgfSBlbHNlIGlmIChkZXN0ciA9PSBjbGVhbnVwX2J1ZmZlcikgeworICAgICAgICBuYW1lID0gR0VUQVJHU19DQVBTVUxFX05BTUVfQ0xFQU5VUF9CVUZGRVI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBjb2JqID0gUHlDYXBzdWxlX05ldyhwdHIsIG5hbWUsIGRlc3RyKTsKICAgICBpZiAoIWNvYmopIHsKICAgICAgICAgZGVzdHIocHRyKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTgzLDggKzIwMiw3IEBACiAgICAgICAgICAgIGRvbid0IGdldCBjYWxsZWQuICovCiAgICAgICAgIFB5X3NzaXplX3QgbGVuID0gUHlMaXN0X0dFVF9TSVpFKGZyZWVsaXN0KSwgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICAgICAgKChQeUNPYmplY3QgKikgUHlMaXN0X0dFVF9JVEVNKGZyZWVsaXN0LCBpKSkKLSAgICAgICAgICAgICAgICAtPmRlc3RydWN0b3IgPSBOVUxMOworICAgICAgICAgICAgUHlDYXBzdWxlX1NldERlc3RydWN0b3IoUHlMaXN0X0dFVF9JVEVNKGZyZWVsaXN0LCBpKSwgTlVMTCk7CiAgICAgfQogICAgIFB5X1hERUNSRUYoZnJlZWxpc3QpOwogICAgIHJldHVybiByZXR2YWw7CkBAIC0zMjgsNyArMzQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIGxldmVscywgbXNnYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXNnYnVmKSwgJmZyZWVsaXN0KTsKICAgICAgICAgaWYgKG1zZykgewotICAgICAgICAgICAgc2V0ZXJyb3IoaSsxLCBtc2csIGxldmVscywgZm5hbWUsIG1lc3NhZ2UpOworICAgICAgICAgICAgc2V0ZXJyb3IoaSsxLCBtc2csIGxldmVscywgZm5hbWUsIG1zZyk7CiAgICAgICAgICAgICByZXR1cm4gY2xlYW5yZXR1cm4oMCwgZnJlZWxpc3QpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTI2LDcgKzU0NCw3IEBACiAvKiBleHBsaWNpdGx5IGNoZWNrIGZvciBmbG9hdCBhcmd1bWVudHMgd2hlbiBpbnRlZ2VycyBhcmUgZXhwZWN0ZWQuICBGb3Igbm93CiAgKiBzaWduYWwgYSB3YXJuaW5nLiAgUmV0dXJucyB0cnVlIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkLiAqLwogc3RhdGljIGludAotZmxvYXRfYXJndW1lbnRfZXJyb3IoUHlPYmplY3QgKmFyZykKK2Zsb2F0X2FyZ3VtZW50X3dhcm5pbmcoUHlPYmplY3QgKmFyZykKIHsKICAgICBpZiAoUHlGbG9hdF9DaGVjayhhcmcpICYmCiAgICAgICAgIFB5RXJyX1dhcm4oUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLApAQCAtNTM2LDYgKzU1NCwyMCBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAorLyogZXhwbGljaXRseSBjaGVjayBmb3IgZmxvYXQgYXJndW1lbnRzIHdoZW4gaW50ZWdlcnMgYXJlIGV4cGVjdGVkLiAgUmFpc2VzCisgICBUeXBlRXJyb3IgYW5kIHJldHVybnMgdHJ1ZSBmb3IgZmxvYXQgYXJndW1lbnRzLiAqLworc3RhdGljIGludAorZmxvYXRfYXJndW1lbnRfZXJyb3IoUHlPYmplY3QgKmFyZykKK3sKKyAgICBpZiAoUHlGbG9hdF9DaGVjayhhcmcpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0Iik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCiAvKiBDb252ZXJ0IGEgbm9uLXR1cGxlIGFyZ3VtZW50LiAgUmV0dXJuIE5VTEwgaWYgY29udmVyc2lvbiB3ZW50IE9LLAogICAgb3IgYSBzdHJpbmcgd2l0aCBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgZmFpbHVyZS4gIFRoZSBtZXNzYWdlIGlzCiAgICBmb3JtYXR0ZWQgYXMgIm11c3QgYmUgPGRlc2lyZWQgdHlwZT4sIG5vdCA8YWN0dWFsIHR5cGU+Ii4KQEAgLTcxOSw3ICs3NTEsMTAgQEAKICNpZmRlZiBIQVZFX0xPTkdfTE9ORwogICAgIGNhc2UgJ0wnOiB7LyogUFlfTE9OR19MT05HICovCiAgICAgICAgIFBZX0xPTkdfTE9ORyAqcCA9IHZhX2FyZyggKnBfdmEsIFBZX0xPTkdfTE9ORyAqICk7Ci0gICAgICAgIFBZX0xPTkdfTE9ORyBpdmFsID0gUHlMb25nX0FzTG9uZ0xvbmcoIGFyZyApOworICAgICAgICBQWV9MT05HX0xPTkcgaXZhbDsKKyAgICAgICAgaWYgKGZsb2F0X2FyZ3VtZW50X3dhcm5pbmcoYXJnKSkKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJsb25nPEw+IiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOworICAgICAgICBpdmFsID0gUHlMb25nX0FzTG9uZ0xvbmcoYXJnKTsKICAgICAgICAgaWYgKGl2YWwgPT0gKFBZX0xPTkdfTE9ORyktMSAmJiBQeUVycl9PY2N1cnJlZCgpICkgewogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImxvbmc8TD4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNzMyLDE2ICsxNzY3LDYgQEAKICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKCpwX3ZhLCBQeVR5cGVPYmplY3QqKTsKICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKCpwX3ZhLCBQeU9iamVjdCAqKik7CiAgICAgICAgICAgICB9Ci0jaWYgMAotLyogSSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcyBmb3IgKi8KLSAgICAgICAgICAgIGVsc2UgaWYgKCpmb3JtYXQgPT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgaW5xdWlyeSBwcmVkID0gdmFfYXJnKCpwX3ZhLCBpbnF1aXJ5KTsKLSAgICAgICAgICAgICAgICBmb3JtYXQrKzsKLSAgICAgICAgICAgICAgICBpZiAoKCpwcmVkKShhcmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcoKnBfdmEsIFB5T2JqZWN0ICoqKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgICAgIGVsc2UgaWYgKCpmb3JtYXQgPT0gJyYnKSB7CiAgICAgICAgICAgICAgICAgdHlwZWRlZiBpbnQgKCpjb252ZXJ0ZXIpKFB5T2JqZWN0ICosIHZvaWQgKik7CiAgICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZygqcF92YSwgY29udmVydGVyKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9nZXRjb3B5cmlnaHQuYyBiL1B5dGhvbi9nZXRjb3B5cmlnaHQuYwppbmRleCBhNWU3ZmE2Li44MjRjN2IxIDEwMDY0NAotLS0gYS9QeXRob24vZ2V0Y29weXJpZ2h0LmMKKysrIGIvUHl0aG9uL2dldGNvcHlyaWdodC5jCkBAIC00LDcgKzQsNyBAQAogCiBzdGF0aWMgY2hhciBjcHJ0W10gPSAKICJcCi1Db3B5cmlnaHQgKGMpIDIwMDEtMjAxMCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi5cblwKK0NvcHlyaWdodCAoYykgMjAwMS0yMDExIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuXAogQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblwKIFxuXAogQ29weXJpZ2h0IChjKSAyMDAwIEJlT3Blbi5jb20uXG5cCmRpZmYgLS1naXQgYS9QeXRob24vZ2V0Y3dkLmMgYi9QeXRob24vZ2V0Y3dkLmMKaW5kZXggNGJlZGJkMS4uNDRkYzllNiAxMDA2NDQKLS0tIGEvUHl0aG9uL2dldGN3ZC5jCisrKyBiL1B5dGhvbi9nZXRjd2QuYwpAQCAtNTksMTQgKzU5LDEzIEBACiB7CiAgICAgRklMRSAqZnA7CiAgICAgY2hhciAqcDsKLSAgICBpbnQgc3RzOwogICAgIGlmIChzaXplIDw9IDApIHsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoKGZwID0gcG9wZW4oUFdEX0NNRCwgInIiKSkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGZnZXRzKGJ1Ziwgc2l6ZSwgZnApID09IE5VTEwgfHwgKHN0cyA9IHBjbG9zZShmcCkpICE9IDApIHsKKyAgICBpZiAoZmdldHMoYnVmLCBzaXplLCBmcCkgPT0gTlVMTCB8fCBwY2xvc2UoZnApICE9IDApIHsKICAgICAgICAgZXJybm8gPSBFQUNDRVM7IC8qIE1vc3QgbGlrZWx5IGVycm9yICovCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9nZXRtdGltZS5jIGIvUHl0aG9uL2dldG10aW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ZWRiNTMuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL2dldG10aW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0KLS8qIFN1YnJvdXRpbmUgdG8gZ2V0IHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSAqLwotCi0vKiAoQSBzZXBhcmF0ZSBmaWxlIGJlY2F1c2UgdGhpcyBtYXkgYmUgT1MgZGVwZW5kZW50KSAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAicHljb25maWcuaCIKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi10aW1lX3QKLVB5T1NfR2V0TGFzdE1vZGlmaWNhdGlvblRpbWUoY2hhciAqcGF0aCwgRklMRSAqZnApCi17Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0JaWYgKGZzdGF0KGZpbGVubyhmcCksICZzdCkgIT0gMCkKLQkJcmV0dXJuIC0xOwotCWVsc2UKLQkJcmV0dXJuIHN0LnN0X210aW1lOwotfQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9QeXRob24vZ3JhbWluaXQuYyBiL1B5dGhvbi9ncmFtaW5pdC5jCmluZGV4IGM4Y2YzNWEuLjVkYjZiYjUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9ncmFtaW5pdC5jCisrKyBiL1B5dGhvbi9ncmFtaW5pdC5jCkBAIC05MDEsNDIgKzkwMSw0MyBAQAogICAgIHsxMDAsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180MV8xWzFdID0gewotICAgIHsyOCwgMn0sCisgICAgezEwMSwgMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQxXzJbMl0gPSB7Ci0gICAgezEwMSwgM30sCi0gICAgezIzLCA0fSwKKyAgICB7MjksIDF9LAorICAgIHsyMywgM30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQxXzNbMV0gPSB7Ci0gICAgezIzLCA0fSwKKyAgICB7MjQsIDR9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180MV80WzFdID0gewotICAgIHsyNCwgNX0sCisgICAgezAsIDR9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180MV81WzFdID0gewotICAgIHswLCA1fSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzQxWzZdID0geworc3RhdGljIHN0YXRlIHN0YXRlc180MVs1XSA9IHsKICAgICB7MSwgYXJjc180MV8wfSwKICAgICB7MSwgYXJjc180MV8xfSwKICAgICB7MiwgYXJjc180MV8yfSwKICAgICB7MSwgYXJjc180MV8zfSwKICAgICB7MSwgYXJjc180MV80fSwKLSAgICB7MSwgYXJjc180MV81fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDJfMFsxXSA9IHsKLSAgICB7ODAsIDF9LAorICAgIHsyOCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzQyXzFbMV0gPSB7Ci0gICAgezg0LCAyfSwKK3N0YXRpYyBhcmMgYXJjc180Ml8xWzJdID0geworICAgIHs4MCwgMn0sCisgICAgezAsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180Ml8yWzFdID0gewotICAgIHswLCAyfSwKKyAgICB7ODQsIDN9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNDJbM10gPSB7CitzdGF0aWMgYXJjIGFyY3NfNDJfM1sxXSA9IHsKKyAgICB7MCwgM30sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc180Mls0XSA9IHsKICAgICB7MSwgYXJjc180Ml8wfSwKLSAgICB7MSwgYXJjc180Ml8xfSwKKyAgICB7MiwgYXJjc180Ml8xfSwKICAgICB7MSwgYXJjc180Ml8yfSwKKyAgICB7MSwgYXJjc180Ml8zfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDNfMFsxXSA9IHsKICAgICB7MTAyLCAxfSwKQEAgLTE1MjUsMjYgKzE1MjYsNTcgQEAKIHN0YXRpYyBhcmMgYXJjc183Ml8wWzFdID0gewogICAgIHsyOCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcyXzFbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNzJfMVs0XSA9IHsKICAgICB7MjMsIDJ9LAorICAgIHsxNTcsIDN9LAorICAgIHsyOSwgNH0sCisgICAgezAsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc183Ml8yWzFdID0gewotICAgIHsyOCwgM30sCisgICAgezI4LCA1fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzJfM1syXSA9IHsKLSAgICB7MjksIDR9LAorc3RhdGljIGFyYyBhcmNzXzcyXzNbMV0gPSB7CiAgICAgezAsIDN9LAogfTsKIHN0YXRpYyBhcmMgYXJjc183Ml80WzJdID0gewotICAgIHsyOCwgMX0sCisgICAgezI4LCA2fSwKICAgICB7MCwgNH0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc183Mls1XSA9IHsKK3N0YXRpYyBhcmMgYXJjc183Ml81WzNdID0geworICAgIHsxNTcsIDN9LAorICAgIHsyOSwgN30sCisgICAgezAsIDV9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183Ml82WzJdID0geworICAgIHsyOSwgNH0sCisgICAgezAsIDZ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183Ml83WzJdID0geworICAgIHsyOCwgOH0sCisgICAgezAsIDd9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183Ml84WzFdID0geworICAgIHsyMywgOX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzcyXzlbMV0gPSB7CisgICAgezI4LCAxMH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzcyXzEwWzJdID0geworICAgIHsyOSwgN30sCisgICAgezAsIDEwfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzcyWzExXSA9IHsKICAgICB7MSwgYXJjc183Ml8wfSwKLSAgICB7MSwgYXJjc183Ml8xfSwKKyAgICB7NCwgYXJjc183Ml8xfSwKICAgICB7MSwgYXJjc183Ml8yfSwKLSAgICB7MiwgYXJjc183Ml8zfSwKKyAgICB7MSwgYXJjc183Ml8zfSwKICAgICB7MiwgYXJjc183Ml80fSwKKyAgICB7MywgYXJjc183Ml81fSwKKyAgICB7MiwgYXJjc183Ml82fSwKKyAgICB7MiwgYXJjc183Ml83fSwKKyAgICB7MSwgYXJjc183Ml84fSwKKyAgICB7MSwgYXJjc183Ml85fSwKKyAgICB7MiwgYXJjc183Ml8xMH0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzczXzBbMV0gPSB7CiAgICAgezE2MSwgMX0sCkBAIC0xODc3LDEwICsxOTA5LDEwIEBACiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCiAgICAgezI5NiwgInRyeV9zdG10IiwgMCwgMTMsIHN0YXRlc180MCwKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7Mjk3LCAid2l0aF9zdG10IiwgMCwgNiwgc3RhdGVzXzQxLAorICAgIHsyOTcsICJ3aXRoX3N0bXQiLCAwLCA1LCBzdGF0ZXNfNDEsCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDIwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI5OCwgIndpdGhfdmFyIiwgMCwgMywgc3RhdGVzXzQyLAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyOTgsICJ3aXRoX2l0ZW0iLCAwLCA0LCBzdGF0ZXNfNDIsCisgICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMTBcMDAwXDIwMFwwNDFcMDQ0XDAxNVwwMDBcMDAwIn0sCiAgICAgezI5OSwgImV4Y2VwdF9jbGF1c2UiLCAwLCA1LCBzdGF0ZXNfNDMsCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCiAgICAgezMwMCwgInN1aXRlIiwgMCwgNSwgc3RhdGVzXzQ0LApAQCAtMTkyMyw3ICsxOTU1LDcgQEAKICAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDRcMDE1XDAwMFwwMDAifSwKICAgICB7MzE5LCAibGlzdG1ha2VyIiwgMCwgNSwgc3RhdGVzXzYzLAogICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDEwXDAwMFwyMDBcMDQxXDA0NFwwMTVcMDAwXDAwMCJ9LAotICAgIHszMjAsICJ0ZXN0bGlzdF9nZXhwIiwgMCwgNSwgc3RhdGVzXzY0LAorICAgIHszMjAsICJ0ZXN0bGlzdF9jb21wIiwgMCwgNSwgc3RhdGVzXzY0LAogICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDEwXDAwMFwyMDBcMDQxXDA0NFwwMTVcMDAwXDAwMCJ9LAogICAgIHszMjEsICJsYW1iZGVmIiwgMCwgNSwgc3RhdGVzXzY1LAogICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LApAQCAtMTkzOSw3ICsxOTcxLDcgQEAKICAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDA0MVwwNDRcMDE1XDAwMFwwMDAifSwKICAgICB7MzI3LCAidGVzdGxpc3QiLCAwLCAzLCBzdGF0ZXNfNzEsCiAgICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMTBcMDAwXDIwMFwwNDFcMDQ0XDAxNVwwMDBcMDAwIn0sCi0gICAgezMyOCwgImRpY3RtYWtlciIsIDAsIDUsIHN0YXRlc183MiwKKyAgICB7MzI4LCAiZGljdG9yc2V0bWFrZXIiLCAwLCAxMSwgc3RhdGVzXzcyLAogICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDEwXDAwMFwyMDBcMDQxXDA0NFwwMTVcMDAwXDAwMCJ9LAogICAgIHszMjksICJjbGFzc2RlZiIsIDAsIDgsIHN0YXRlc183MywKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMlwwMDAifSwKQEAgLTE5NTMsMTEgKzE5ODUsMTEgQEAKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKICAgICB7MzM0LCAibGlzdF9pZiIsIDAsIDQsIHN0YXRlc183OCwKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MzM1LCAiZ2VuX2l0ZXIiLCAwLCAyLCBzdGF0ZXNfNzksCisgICAgezMzNSwgImNvbXBfaXRlciIsIDAsIDIsIHN0YXRlc183OSwKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MzM2LCAiZ2VuX2ZvciIsIDAsIDYsIHN0YXRlc184MCwKKyAgICB7MzM2LCAiY29tcF9mb3IiLCAwLCA2LCBzdGF0ZXNfODAsCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezMzNywgImdlbl9pZiIsIDAsIDQsIHN0YXRlc184MSwKKyAgICB7MzM3LCAiY29tcF9pZiIsIDAsIDQsIHN0YXRlc184MSwKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKICAgICB7MzM4LCAidGVzdGxpc3QxIiwgMCwgMiwgc3RhdGVzXzgyLAogICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDEwXDAwMFwyMDBcMDQxXDA0NFwwMTVcMDAwXDAwMCJ9LApkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydC5jIGIvUHl0aG9uL2ltcG9ydC5jCmluZGV4IDA3ZjU3MjAuLjk5MGVlNTEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnQuYworKysgYi9QeXRob24vaW1wb3J0LmMKQEAgLTI3LDggKzI3LDYgQEAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW9kZV90OwogI2VuZGlmCiAKLWV4dGVybiB0aW1lX3QgUHlPU19HZXRMYXN0TW9kaWZpY2F0aW9uVGltZShjaGFyICosIEZJTEUgKik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiBnZXRtdGltZS5jICovCiAKIC8qIE1hZ2ljIHdvcmQgdG8gcmVqZWN0IC5weWMgZmlsZXMgZ2VuZXJhdGVkIGJ5IG90aGVyIFB5dGhvbiB2ZXJzaW9ucy4KICAgIEl0IHNob3VsZCBjaGFuZ2UgZm9yIGVhY2ggaW5jb21wYXRpYmxlIGNoYW5nZSB0byB0aGUgYnl0ZWNvZGUuCkBAIC03Myw5ICs3MSwxNSBAQAogICAgICAgIFB5dGhvbiAyLjVjMjogNjIxMzEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uIGluIGxpc3Rjb21wL2dlbmV4cCkKICAgICAgICBQeXRob24gMi42YTA6IDYyMTUxIChwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGFuZCBTVE9SRV9NQVAgb3Bjb2RlKQogICAgICAgIFB5dGhvbiAyLjZhMTogNjIxNjEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pCisgICAgICAgUHl0aG9uIDIuN2EwOiA2MjE3MSAob3B0aW1pemUgbGlzdCBjb21wcmVoZW5zaW9ucy9jaGFuZ2UgTElTVF9BUFBFTkQpCisgICAgICAgUHl0aG9uIDIuN2EwOiA2MjE4MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6CisgICAgICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQorICAgICAgIFB5dGhvbiAyLjdhMCAgNjIxOTEgKGludHJvZHVjZSBTRVRVUF9XSVRIKQorICAgICAgIFB5dGhvbiAyLjdhMCAgNjIyMDEgKGludHJvZHVjZSBCVUlMRF9TRVQpCisgICAgICAgUHl0aG9uIDIuN2EwICA2MjIxMSAoaW50cm9kdWNlIE1BUF9BREQgYW5kIFNFVF9BREQpCiAuCiAqLwotI2RlZmluZSBNQUdJQyAoNjIxNjEgfCAoKGxvbmcpJ1xyJzw8MTYpIHwgKChsb25nKSdcbic8PDI0KSkKKyNkZWZpbmUgTUFHSUMgKDYyMjExIHwgKChsb25nKSdccic8PDE2KSB8ICgobG9uZyknXG4nPDwyNCkpCiAKIC8qIE1hZ2ljIHdvcmQgYXMgZ2xvYmFsOyBub3RlIHRoYXQgX1B5SW1wb3J0X0luaXQoKSBjYW4gY2hhbmdlIHRoZQogICAgdmFsdWUgb2YgdGhpcyBnbG9iYWwgdG8gYWNjb21tb2RhdGUgZm9yIGFsdGVyYXRpb25zIG9mIGhvdyB0aGUKQEAgLTYxOSw3ICs2MjMsNyBAQAogCiAvKiBSZW1vdmUgbmFtZSBmcm9tIHN5cy5tb2R1bGVzLCBpZiBpdCdzIHRoZXJlLiAqLwogc3RhdGljIHZvaWQKLV9SZW1vdmVNb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKK3JlbW92ZV9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbW9kdWxlcyA9IFB5SW1wb3J0X0dldE1vZHVsZURpY3QoKTsKICAgICBpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgbmFtZSkgPT0gTlVMTCkKQEAgLTY5MSw3ICs2OTUsNyBAQAogICAgIHJldHVybiBtOwogCiAgIGVycm9yOgotICAgIF9SZW1vdmVNb2R1bGUobmFtZSk7CisgICAgcmVtb3ZlX21vZHVsZShuYW1lKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTc5Nyw3ICsxODAxLDcgQEAKICAgIGl0cyBtb2R1bGUgb2JqZWN0IFdJVEggSU5DUkVNRU5URUQgUkVGRVJFTkNFIENPVU5UICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1sb2FkX21vZHVsZShjaGFyICpuYW1lLCBGSUxFICpmcCwgY2hhciAqYnVmLCBpbnQgdHlwZSwgUHlPYmplY3QgKmxvYWRlcikKK2xvYWRfbW9kdWxlKGNoYXIgKm5hbWUsIEZJTEUgKmZwLCBjaGFyICpwYXRobmFtZSwgaW50IHR5cGUsIFB5T2JqZWN0ICpsb2FkZXIpCiB7CiAgICAgUHlPYmplY3QgKm1vZHVsZXM7CiAgICAgUHlPYmplY3QgKm07CkBAIC0xODE4LDI3ICsxODIyLDI3IEBACiAgICAgc3dpdGNoICh0eXBlKSB7CiAKICAgICBjYXNlIFBZX1NPVVJDRToKLSAgICAgICAgbSA9IGxvYWRfc291cmNlX21vZHVsZShuYW1lLCBidWYsIGZwKTsKKyAgICAgICAgbSA9IGxvYWRfc291cmNlX21vZHVsZShuYW1lLCBwYXRobmFtZSwgZnApOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUFlfQ09NUElMRUQ6Ci0gICAgICAgIG0gPSBsb2FkX2NvbXBpbGVkX21vZHVsZShuYW1lLCBidWYsIGZwKTsKKyAgICAgICAgbSA9IGxvYWRfY29tcGlsZWRfbW9kdWxlKG5hbWUsIHBhdGhuYW1lLCBmcCk7CiAgICAgICAgIGJyZWFrOwogCiAjaWZkZWYgSEFWRV9EWU5BTUlDX0xPQURJTkcKICAgICBjYXNlIENfRVhURU5TSU9OOgotICAgICAgICBtID0gX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlKG5hbWUsIGJ1ZiwgZnApOworICAgICAgICBtID0gX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlKG5hbWUsIHBhdGhuYW1lLCBmcCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAKICAgICBjYXNlIFBLR19ESVJFQ1RPUlk6Ci0gICAgICAgIG0gPSBsb2FkX3BhY2thZ2UobmFtZSwgYnVmKTsKKyAgICAgICAgbSA9IGxvYWRfcGFja2FnZShuYW1lLCBwYXRobmFtZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDX0JVSUxUSU46CiAgICAgY2FzZSBQWV9GUk9aRU46Ci0gICAgICAgIGlmIChidWYgIT0gTlVMTCAmJiBidWZbMF0gIT0gJ1wwJykKLSAgICAgICAgICAgIG5hbWUgPSBidWY7CisgICAgICAgIGlmIChwYXRobmFtZSAhPSBOVUxMICYmIHBhdGhuYW1lWzBdICE9ICdcMCcpCisgICAgICAgICAgICBuYW1lID0gcGF0aG5hbWU7CiAgICAgICAgIGlmICh0eXBlID09IENfQlVJTFRJTikKICAgICAgICAgICAgIGVyciA9IGluaXRfYnVpbHRpbihuYW1lKTsKICAgICAgICAgZWxzZQpAQCAtMzM3NSwxMyArMzM3OSwxMyBAQAogLyogU2hvcnRoYW5kIHRvIGFkZCBhIHNpbmdsZSBlbnRyeSBnaXZlbiBhIG5hbWUgYW5kIGEgZnVuY3Rpb24gKi8KIAogaW50Ci1QeUltcG9ydF9BcHBlbmRJbml0dGFiKGNoYXIgKm5hbWUsIHZvaWQgKCppbml0ZnVuYykodm9pZCkpCitQeUltcG9ydF9BcHBlbmRJbml0dGFiKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKCppbml0ZnVuYykodm9pZCkpCiB7CiAgICAgc3RydWN0IF9pbml0dGFiIG5ld3RhYlsyXTsKIAogICAgIG1lbXNldChuZXd0YWIsICdcMCcsIHNpemVvZiBuZXd0YWIpOwogCi0gICAgbmV3dGFiWzBdLm5hbWUgPSBuYW1lOworICAgIG5ld3RhYlswXS5uYW1lID0gKGNoYXIgKiluYW1lOwogICAgIG5ld3RhYlswXS5pbml0ZnVuYyA9IGluaXRmdW5jOwogCiAgICAgcmV0dXJuIFB5SW1wb3J0X0V4dGVuZEluaXR0YWIobmV3dGFiKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9tYXJzaGFsLmMgYi9QeXRob24vbWFyc2hhbC5jCmluZGV4IGJjYzg2MzYuLmZhY2EwMjcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9tYXJzaGFsLmMKKysrIGIvUHl0aG9uL21hcnNoYWwuYwpAQCAtMTEsNiArMTEsOCBAQAogI2luY2x1ZGUgImNvZGUuaCIKICNpbmNsdWRlICJtYXJzaGFsLmgiCiAKKyNkZWZpbmUgQUJTKHgpICgoeCkgPCAwID8gLSh4KSA6ICh4KSkKKwogLyogSGlnaCB3YXRlciBtYXJrIHRvIGRldGVybWluZSB3aGVuIHRoZSBtYXJzaGFsbGVkIG9iamVjdCBpcyBkYW5nZXJvdXNseSBkZWVwCiAgKiBhbmQgcmlza3MgY29yaW5nIHRoZSBpbnRlcnByZXRlci4gIFdoZW4gdGhlIG9iamVjdCBzdGFjayBnZXRzIHRoaXMgZGVlcCwKICAqIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcuCkBAIC00Miw5ICs0NCwxNCBAQAogI2RlZmluZSBUWVBFX1NFVCAgICAgICAgICAgICAgICAnPCcKICNkZWZpbmUgVFlQRV9GUk9aRU5TRVQgICAgICAgICAgJz4nCiAKKyNkZWZpbmUgV0ZFUlJfT0sgMAorI2RlZmluZSBXRkVSUl9VTk1BUlNIQUxMQUJMRSAxCisjZGVmaW5lIFdGRVJSX05FU1RFRFRPT0RFRVAgMgorI2RlZmluZSBXRkVSUl9OT01FTU9SWSAzCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBGSUxFICpmcDsKLSAgICBpbnQgZXJyb3I7CisgICAgaW50IGVycm9yOyAgLyogc2VlIFdGRVJSXyogdmFsdWVzICovCiAgICAgaW50IGRlcHRoOwogICAgIC8qIElmIGZwID09IE5VTEwsIHRoZSBmb2xsb3dpbmcgYXJlIHZhbGlkOiAqLwogICAgIFB5T2JqZWN0ICpzdHI7CkBAIC0xMTksNiArMTI2LDU2IEBACiB9CiAjZW5kaWYKIAorLyogV2UgYXNzdW1lIHRoYXQgUHl0aG9uIGxvbmdzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBpbiBiYXNlIHNvbWUgcG93ZXIgb2YKKyAgIDIqKjE1OyBmb3IgdGhlIHNha2Ugb2YgcG9ydGFiaWxpdHkgd2UnbGwgYWx3YXlzIHJlYWQgYW5kIHdyaXRlIHRoZW0gaW4gYmFzZQorICAgZXhhY3RseSAyKioxNS4gKi8KKworI2RlZmluZSBQeUxvbmdfTUFSU0hBTF9TSElGVCAxNQorI2RlZmluZSBQeUxvbmdfTUFSU0hBTF9CQVNFICgoc2hvcnQpMSA8PCBQeUxvbmdfTUFSU0hBTF9TSElGVCkKKyNkZWZpbmUgUHlMb25nX01BUlNIQUxfTUFTSyAoUHlMb25nX01BUlNIQUxfQkFTRSAtIDEpCisjaWYgUHlMb25nX1NISUZUICUgUHlMb25nX01BUlNIQUxfU0hJRlQgIT0gMAorI2Vycm9yICJQeUxvbmdfU0hJRlQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIFB5TG9uZ19NQVJTSEFMX1NISUZUIgorI2VuZGlmCisjZGVmaW5lIFB5TG9uZ19NQVJTSEFMX1JBVElPIChQeUxvbmdfU0hJRlQgLyBQeUxvbmdfTUFSU0hBTF9TSElGVCkKKworc3RhdGljIHZvaWQKK3dfUHlMb25nKGNvbnN0IFB5TG9uZ09iamVjdCAqb2IsIFdGSUxFICpwKQoreworICAgIFB5X3NzaXplX3QgaSwgaiwgbiwgbDsKKyAgICBkaWdpdCBkOworCisgICAgd19ieXRlKFRZUEVfTE9ORywgcCk7CisgICAgaWYgKFB5X1NJWkUob2IpID09IDApIHsKKyAgICAgICAgd19sb25nKChsb25nKTAsIHApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogc2V0IGwgdG8gbnVtYmVyIG9mIGJhc2UgUHlMb25nX01BUlNIQUxfQkFTRSBkaWdpdHMgKi8KKyAgICBuID0gQUJTKFB5X1NJWkUob2IpKTsKKyAgICBsID0gKG4tMSkgKiBQeUxvbmdfTUFSU0hBTF9SQVRJTzsKKyAgICBkID0gb2ItPm9iX2RpZ2l0W24tMV07CisgICAgYXNzZXJ0KGQgIT0gMCk7IC8qIGEgUHlMb25nIGlzIGFsd2F5cyBub3JtYWxpemVkICovCisgICAgZG8geworICAgICAgICBkID4+PSBQeUxvbmdfTUFSU0hBTF9TSElGVDsKKyAgICAgICAgbCsrOworICAgIH0gd2hpbGUgKGQgIT0gMCk7CisgICAgd19sb25nKChsb25nKShQeV9TSVpFKG9iKSA+IDAgPyBsIDogLWwpLCBwKTsKKworICAgIGZvciAoaT0wOyBpIDwgbi0xOyBpKyspIHsKKyAgICAgICAgZCA9IG9iLT5vYl9kaWdpdFtpXTsKKyAgICAgICAgZm9yIChqPTA7IGogPCBQeUxvbmdfTUFSU0hBTF9SQVRJTzsgaisrKSB7CisgICAgICAgICAgICB3X3Nob3J0KGQgJiBQeUxvbmdfTUFSU0hBTF9NQVNLLCBwKTsKKyAgICAgICAgICAgIGQgPj49IFB5TG9uZ19NQVJTSEFMX1NISUZUOworICAgICAgICB9CisgICAgICAgIGFzc2VydCAoZCA9PSAwKTsKKyAgICB9CisgICAgZCA9IG9iLT5vYl9kaWdpdFtuLTFdOworICAgIGRvIHsKKyAgICAgICAgd19zaG9ydChkICYgUHlMb25nX01BUlNIQUxfTUFTSywgcCk7CisgICAgICAgIGQgPj49IFB5TG9uZ19NQVJTSEFMX1NISUZUOworICAgIH0gd2hpbGUgKGQgIT0gMCk7Cit9CisKIHN0YXRpYyB2b2lkCiB3X29iamVjdChQeU9iamVjdCAqdiwgV0ZJTEUgKnApCiB7CkBAIC0xMjcsNyArMTg0LDcgQEAKICAgICBwLT5kZXB0aCsrOwogCiAgICAgaWYgKHAtPmRlcHRoID4gTUFYX01BUlNIQUxfU1RBQ0tfREVQVEgpIHsKLSAgICAgICAgcC0+ZXJyb3IgPSAyOworICAgICAgICBwLT5lcnJvciA9IFdGRVJSX05FU1RFRFRPT0RFRVA7CiAgICAgfQogICAgIGVsc2UgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICB3X2J5dGUoVFlQRV9OVUxMLCBwKTsKQEAgLTE2NCwzMiArMjIxLDMxIEBACiAgICAgfQogICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpKSB7CiAgICAgICAgIFB5TG9uZ09iamVjdCAqb2IgPSAoUHlMb25nT2JqZWN0ICopdjsKLSAgICAgICAgd19ieXRlKFRZUEVfTE9ORywgcCk7Ci0gICAgICAgIG4gPSBvYi0+b2Jfc2l6ZTsKLSAgICAgICAgd19sb25nKChsb25nKW4sIHApOwotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgICAgICBuID0gLW47Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB3X3Nob3J0KG9iLT5vYl9kaWdpdFtpXSwgcCk7CisgICAgICAgIHdfUHlMb25nKG9iLCBwKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlGbG9hdF9DaGVja0V4YWN0KHYpKSB7CiAgICAgICAgIGlmIChwLT52ZXJzaW9uID4gMSkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZbOF07CiAgICAgICAgICAgICBpZiAoX1B5RmxvYXRfUGFjazgoUHlGbG9hdF9Bc0RvdWJsZSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIDEpIDwgMCkgewotICAgICAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdfYnl0ZShUWVBFX0JJTkFSWV9GTE9BVCwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZygoY2hhciopYnVmLCA4LCBwKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl07IC8qIFBsZW50eSB0byBmb3JtYXQgYW55IGRvdWJsZSAqLwotICAgICAgICAgICAgUHlGbG9hdF9Bc1JlcHJTdHJpbmcoYnVmLCAoUHlGbG9hdE9iamVjdCAqKXYpOworICAgICAgICAgICAgY2hhciAqYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKFB5RmxvYXRfQVNfRE9VQkxFKHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnJywgMTcsIDAsIE5VTEwpOworICAgICAgICAgICAgaWYgKCFidWYpIHsKKyAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX05PTUVNT1JZOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4gPSBzdHJsZW4oYnVmKTsKICAgICAgICAgICAgIHdfYnl0ZShUWVBFX0ZMT0FULCBwKTsKICAgICAgICAgICAgIHdfYnl0ZSgoaW50KW4sIHApOwogICAgICAgICAgICAgd19zdHJpbmcoYnVmLCAoaW50KW4sIHApOworICAgICAgICAgICAgUHlNZW1fRnJlZShidWYpOwogICAgICAgICB9CiAgICAgfQogI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKQEAgLTE5OCw0NCArMjU0LDQxIEBACiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKICAgICAgICAgICAgIGlmIChfUHlGbG9hdF9QYWNrOChQeUNvbXBsZXhfUmVhbEFzRG91YmxlKHYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgMSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSAxOworICAgICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgd19ieXRlKFRZUEVfQklOQVJZX0NPTVBMRVgsIHApOwogICAgICAgICAgICAgd19zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCk7CiAgICAgICAgICAgICBpZiAoX1B5RmxvYXRfUGFjazgoUHlDb21wbGV4X0ltYWdBc0RvdWJsZSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIDEpIDwgMCkgewotICAgICAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdfc3RyaW5nKChjaGFyKilidWYsIDgsIHApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hhciBidWZbMjU2XTsgLyogUGxlbnR5IHRvIGZvcm1hdCBhbnkgZG91YmxlICovCi0gICAgICAgICAgICBQeUZsb2F0T2JqZWN0ICp0ZW1wOworICAgICAgICAgICAgY2hhciAqYnVmOwogICAgICAgICAgICAgd19ieXRlKFRZUEVfQ09NUExFWCwgcCk7Ci0gICAgICAgICAgICB0ZW1wID0gKFB5RmxvYXRPYmplY3QqKVB5RmxvYXRfRnJvbURvdWJsZSgKLSAgICAgICAgICAgICAgICBQeUNvbXBsZXhfUmVhbEFzRG91YmxlKHYpKTsKLSAgICAgICAgICAgIGlmICghdGVtcCkgewotICAgICAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgIGJ1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyhQeUNvbXBsZXhfUmVhbEFzRG91YmxlKHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnJywgMTcsIDAsIE5VTEwpOworICAgICAgICAgICAgaWYgKCFidWYpIHsKKyAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX05PTUVNT1JZOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5RmxvYXRfQXNSZXByU3RyaW5nKGJ1ZiwgdGVtcCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CiAgICAgICAgICAgICBuID0gc3RybGVuKGJ1Zik7CiAgICAgICAgICAgICB3X2J5dGUoKGludCluLCBwKTsKICAgICAgICAgICAgIHdfc3RyaW5nKGJ1ZiwgKGludCluLCBwKTsKLSAgICAgICAgICAgIHRlbXAgPSAoUHlGbG9hdE9iamVjdCopUHlGbG9hdF9Gcm9tRG91YmxlKAotICAgICAgICAgICAgICAgIFB5Q29tcGxleF9JbWFnQXNEb3VibGUodikpOwotICAgICAgICAgICAgaWYgKCF0ZW1wKSB7Ci0gICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSAxOworICAgICAgICAgICAgUHlNZW1fRnJlZShidWYpOworICAgICAgICAgICAgYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKFB5Q29tcGxleF9JbWFnQXNEb3VibGUodiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2cnLCAxNywgMCwgTlVMTCk7CisgICAgICAgICAgICBpZiAoIWJ1ZikgeworICAgICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfTk9NRU1PUlk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlGbG9hdF9Bc1JlcHJTdHJpbmcoYnVmLCB0ZW1wKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKICAgICAgICAgICAgIG4gPSBzdHJsZW4oYnVmKTsKICAgICAgICAgICAgIHdfYnl0ZSgoaW50KW4sIHApOwogICAgICAgICAgICAgd19zdHJpbmcoYnVmLCAoaW50KW4sIHApOworICAgICAgICAgICAgUHlNZW1fRnJlZShidWYpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0yNTYsNyArMzA5LDcgQEAKICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKG8pOwogICAgICAgICAgICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgICAgICAgICAgcC0+ZGVwdGgtLTsKLSAgICAgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSAxOworICAgICAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHdfYnl0ZShUWVBFX0lOVEVSTkVELCBwKTsKQEAgLTI2OSw3ICszMjIsNyBAQAogICAgICAgICBpZiAobiA+IElOVF9NQVgpIHsKICAgICAgICAgICAgIC8qIGh1Z2Ugc3RyaW5ncyBhcmUgbm90IHN1cHBvcnRlZCAqLwogICAgICAgICAgICAgcC0+ZGVwdGgtLTsKLSAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgd19sb25nKChsb25nKW4sIHApOwpAQCAtMjgxLDE0ICszMzQsMTQgQEAKICAgICAgICAgdXRmOCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcodik7CiAgICAgICAgIGlmICh1dGY4ID09IE5VTEwpIHsKICAgICAgICAgICAgIHAtPmRlcHRoLS07Ci0gICAgICAgICAgICBwLT5lcnJvciA9IDE7CisgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHdfYnl0ZShUWVBFX1VOSUNPREUsIHApOwogICAgICAgICBuID0gUHlTdHJpbmdfR0VUX1NJWkUodXRmOCk7CiAgICAgICAgIGlmIChuID4gSU5UX01BWCkgewogICAgICAgICAgICAgcC0+ZGVwdGgtLTsKLSAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgd19sb25nKChsb25nKW4sIHApOwpAQCAtMzM0LDE0ICszODcsMTQgQEAKICAgICAgICAgbiA9IFB5T2JqZWN0X1NpemUodik7CiAgICAgICAgIGlmIChuID09IC0xKSB7CiAgICAgICAgICAgICBwLT5kZXB0aC0tOwotICAgICAgICAgICAgcC0+ZXJyb3IgPSAxOworICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB3X2xvbmcoKGxvbmcpbiwgcCk7CiAgICAgICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcih2KTsKICAgICAgICAgaWYgKGl0ID09IE5VTEwpIHsKICAgICAgICAgICAgIHAtPmRlcHRoLS07Ci0gICAgICAgICAgICBwLT5lcnJvciA9IDE7CisgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHdoaWxlICgodmFsdWUgPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKQEAgLTM1MSw3ICs0MDQsNyBAQAogICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgcC0+ZGVwdGgtLTsKLSAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0zODEsNyArNDM0LDcgQEAKICAgICAgICAgbiA9ICgqcGItPmJmX2dldHJlYWRidWZmZXIpKHYsIDAsICh2b2lkICoqKSZzKTsKICAgICAgICAgaWYgKG4gPiBJTlRfTUFYKSB7CiAgICAgICAgICAgICBwLT5kZXB0aC0tOwotICAgICAgICAgICAgcC0+ZXJyb3IgPSAxOworICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB3X2xvbmcoKGxvbmcpbiwgcCk7CkBAIC0zODksNyArNDQyLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHdfYnl0ZShUWVBFX1VOS05PV04sIHApOwotICAgICAgICBwLT5lcnJvciA9IDE7CisgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgfQogICAgZXhpdDoKICAgICBwLT5kZXB0aC0tOwpAQCAtNDAxLDcgKzQ1NCw3IEBACiB7CiAgICAgV0ZJTEUgd2Y7CiAgICAgd2YuZnAgPSBmcDsKLSAgICB3Zi5lcnJvciA9IDA7CisgICAgd2YuZXJyb3IgPSBXRkVSUl9PSzsKICAgICB3Zi5kZXB0aCA9IDA7CiAgICAgd2Yuc3RyaW5ncyA9IE5VTEw7CiAgICAgd2YudmVyc2lvbiA9IHZlcnNpb247CkBAIC00MTMsNyArNDY2LDcgQEAKIHsKICAgICBXRklMRSB3ZjsKICAgICB3Zi5mcCA9IGZwOwotICAgIHdmLmVycm9yID0gMDsKKyAgICB3Zi5lcnJvciA9IFdGRVJSX09LOwogICAgIHdmLmRlcHRoID0gMDsKICAgICB3Zi5zdHJpbmdzID0gKHZlcnNpb24gPiAwKSA/IFB5RGljdF9OZXcoKSA6IE5VTEw7CiAgICAgd2YudmVyc2lvbiA9IHZlcnNpb247CkBAIC01MDcsNiArNTYwLDY2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCityX1B5TG9uZyhSRklMRSAqcCkKK3sKKyAgICBQeUxvbmdPYmplY3QgKm9iOworICAgIGludCBzaXplLCBpLCBqLCBtZCwgc2hvcnRzX2luX3RvcF9kaWdpdDsKKyAgICBsb25nIG47CisgICAgZGlnaXQgZDsKKworICAgIG4gPSByX2xvbmcocCk7CisgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKV9QeUxvbmdfTmV3KDApOworICAgIGlmIChuIDwgLUlOVF9NQVggfHwgbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbWFyc2hhbCBkYXRhIChsb25nIHNpemUgb3V0IG9mIHJhbmdlKSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzaXplID0gMSArIChBQlMobikgLSAxKSAvIFB5TG9uZ19NQVJTSEFMX1JBVElPOworICAgIHNob3J0c19pbl90b3BfZGlnaXQgPSAxICsgKEFCUyhuKSAtIDEpICUgUHlMb25nX01BUlNIQUxfUkFUSU87CisgICAgb2IgPSBfUHlMb25nX05ldyhzaXplKTsKKyAgICBpZiAob2IgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfU0laRShvYikgPSBuID4gMCA/IHNpemUgOiAtc2l6ZTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplLTE7IGkrKykgeworICAgICAgICBkID0gMDsKKyAgICAgICAgZm9yIChqPTA7IGogPCBQeUxvbmdfTUFSU0hBTF9SQVRJTzsgaisrKSB7CisgICAgICAgICAgICBtZCA9IHJfc2hvcnQocCk7CisgICAgICAgICAgICBpZiAobWQgPCAwIHx8IG1kID4gUHlMb25nX01BUlNIQUxfQkFTRSkKKyAgICAgICAgICAgICAgICBnb3RvIGJhZF9kaWdpdDsKKyAgICAgICAgICAgIGQgKz0gKGRpZ2l0KW1kIDw8IGoqUHlMb25nX01BUlNIQUxfU0hJRlQ7CisgICAgICAgIH0KKyAgICAgICAgb2ItPm9iX2RpZ2l0W2ldID0gZDsKKyAgICB9CisgICAgZCA9IDA7CisgICAgZm9yIChqPTA7IGogPCBzaG9ydHNfaW5fdG9wX2RpZ2l0OyBqKyspIHsKKyAgICAgICAgbWQgPSByX3Nob3J0KHApOworICAgICAgICBpZiAobWQgPCAwIHx8IG1kID4gUHlMb25nX01BUlNIQUxfQkFTRSkKKyAgICAgICAgICAgIGdvdG8gYmFkX2RpZ2l0OworICAgICAgICAvKiB0b3Btb3N0IG1hcnNoYWwgZGlnaXQgc2hvdWxkIGJlIG5vbnplcm8gKi8KKyAgICAgICAgaWYgKG1kID09IDAgJiYgaiA9PSBzaG9ydHNfaW5fdG9wX2RpZ2l0IC0gMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICJiYWQgbWFyc2hhbCBkYXRhICh1bm5vcm1hbGl6ZWQgbG9uZyBkYXRhKSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZCArPSAoZGlnaXQpbWQgPDwgaipQeUxvbmdfTUFSU0hBTF9TSElGVDsKKyAgICB9CisgICAgLyogdG9wIGRpZ2l0IHNob3VsZCBiZSBub256ZXJvLCBlbHNlIHRoZSByZXN1bHRpbmcgUHlMb25nIHdvbid0IGJlCisgICAgICAgbm9ybWFsaXplZCAqLworICAgIG9iLT5vYl9kaWdpdFtzaXplLTFdID0gZDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopb2I7CisgIGJhZF9kaWdpdDoKKyAgICBQeV9ERUNSRUYob2IpOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiYmFkIG1hcnNoYWwgZGF0YSAoZGlnaXQgb3V0IG9mIHJhbmdlIGluIGxvbmcpIik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKIHJfb2JqZWN0KFJGSUxFICpwKQogewogICAgIC8qIE5VTEwgaXMgYSB2YWxpZCByZXR1cm4gdmFsdWUsIGl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW5zIHRoYXQKQEAgLTU3MCwzOSArNjgzLDggQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFRZUEVfTE9ORzoKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBQeUxvbmdPYmplY3QgKm9iOwotICAgICAgICAgICAgbiA9IHJfbG9uZyhwKTsKLSAgICAgICAgICAgIGlmIChuIDwgLUlOVF9NQVggfHwgbiA+IElOVF9NQVgpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBtYXJzaGFsIGRhdGEiKTsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2l6ZSA9IG48MCA/IC1uIDogbjsKLSAgICAgICAgICAgIG9iID0gX1B5TG9uZ19OZXcoc2l6ZSk7Ci0gICAgICAgICAgICBpZiAob2IgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvYi0+b2Jfc2l6ZSA9IG47Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGRpZ2l0ID0gcl9zaG9ydChwKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlnaXQgPCAwIHx8Ci0gICAgICAgICAgICAgICAgICAgIChkaWdpdCA9PSAwICYmIGkgPT0gc2l6ZS0xKSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2IpOwotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbWFyc2hhbCBkYXRhIik7Ci0gICAgICAgICAgICAgICAgICAgIG9iID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChvYiAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBvYi0+b2JfZGlnaXRbaV0gPSBkaWdpdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHZhbCA9IChQeU9iamVjdCAqKW9iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dmFsID0gcl9QeUxvbmcocCk7CisgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBUWVBFX0ZMT0FUOgogICAgICAgICB7CkBAIC02MTYsMTAgKzY5OCwxMSBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnVmW25dID0gJ1wwJzsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJhdG9mIiwgYnJlYWspCi0gICAgICAgICAgICBkeCA9IFB5T1NfYXNjaWlfYXRvZihidWYpOwotICAgICAgICAgICAgUHlGUEVfRU5EX1BST1RFQ1QoZHgpCisgICAgICAgICAgICBkeCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShidWYsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgaWYgKGR4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR2YWwgPSBQeUZsb2F0X0Zyb21Eb3VibGUoZHgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTY1NiwxMCArNzM5LDExIEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBidWZbbl0gPSAnXDAnOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImF0b2YiLCBicmVhazspCi0gICAgICAgICAgICBjLnJlYWwgPSBQeU9TX2FzY2lpX2F0b2YoYnVmKTsKLSAgICAgICAgICAgIFB5RlBFX0VORF9QUk9URUNUKGMpCisgICAgICAgICAgICBjLnJlYWwgPSBQeU9TX3N0cmluZ190b19kb3VibGUoYnVmLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChjLnJlYWwgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4gPSByX2J5dGUocCk7CiAgICAgICAgICAgICBpZiAobiA9PSBFT0YgfHwgcl9zdHJpbmcoYnVmLCAoaW50KW4sIHApICE9IG4pIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCkBAIC02NjgsOSArNzUyLDExIEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBidWZbbl0gPSAnXDAnOwotICAgICAgICAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiYXRvZiIsIGJyZWFrKQotICAgICAgICAgICAgYy5pbWFnID0gUHlPU19hc2NpaV9hdG9mKGJ1Zik7Ci0gICAgICAgICAgICBQeUZQRV9FTkRfUFJPVEVDVChjKQorICAgICAgICAgICAgYy5pbWFnID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKGJ1ZiwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICBpZiAoYy5pbWFnID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR2YWwgPSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KGMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTcxMCw3ICs3OTYsNyBAQAogICAgIGNhc2UgVFlQRV9TVFJJTkc6CiAgICAgICAgIG4gPSByX2xvbmcocCk7CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gSU5UX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHN0cmluZyBzaXplIG91dCBvZiByYW5nZSkiKTsKICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzM5LDcgKzgyNSw3IEBACiAgICAgY2FzZSBUWVBFX1NUUklOR1JFRjoKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gUHlMaXN0X0dFVF9TSVpFKHAtPnN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoc3RyaW5nIHJlZiBvdXQgb2YgcmFuZ2UpIik7CiAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTc1NSw3ICs4NDEsNyBAQAogCiAgICAgICAgIG4gPSByX2xvbmcocCk7CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gSU5UX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHVuaWNvZGUgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7CiAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTc4MSw3ICs4NjcsNyBAQAogICAgIGNhc2UgVFlQRV9UVVBMRToKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBJTlRfTUFYKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAodHVwbGUgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7CiAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTc5NSw3ICs4ODEsNyBAQAogICAgICAgICAgICAgaWYgKCB2MiA9PSBOVUxMICkgewogICAgICAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJOVUxMIG9iamVjdCBpbiBtYXJzaGFsIGRhdGEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJOVUxMIG9iamVjdCBpbiBtYXJzaGFsIGRhdGEgZm9yIHR1cGxlIik7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICAgICAgICAgIHYgPSBOVUxMOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODA4LDcgKzg5NCw3IEBACiAgICAgY2FzZSBUWVBFX0xJU1Q6CiAgICAgICAgIG4gPSByX2xvbmcocCk7CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gSU5UX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKGxpc3Qgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7CiAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTgyMiw3ICs5MDgsNyBAQAogICAgICAgICAgICAgaWYgKCB2MiA9PSBOVUxMICkgewogICAgICAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJOVUxMIG9iamVjdCBpbiBtYXJzaGFsIGRhdGEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJOVUxMIG9iamVjdCBpbiBtYXJzaGFsIGRhdGEgZm9yIGxpc3QiKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgICAgICAgICAgdiA9IE5VTEw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC04NjAsNyArOTQ2LDcgQEAKICAgICBjYXNlIFRZUEVfRlJPWkVOU0VUOgogICAgICAgICBuID0gcl9sb25nKHApOwogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IElOVF9NQVgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChzZXQgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7CiAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTg3NCw3ICs5NjAsNyBAQAogICAgICAgICAgICAgaWYgKCB2MiA9PSBOVUxMICkgewogICAgICAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJOVUxMIG9iamVjdCBpbiBtYXJzaGFsIGRhdGEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJOVUxMIG9iamVjdCBpbiBtYXJzaGFsIGRhdGEgZm9yIHNldCIpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgICAgICAgICB2ID0gTlVMTDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk3NCw3ICsxMDYwLDcgQEAKICAgICBkZWZhdWx0OgogICAgICAgICAvKiBCb2d1cyBkYXRhIGdvdCB3cml0dGVuLCB3aGljaCBpc24ndCBpZGVhbC4KICAgICAgICAgICAgVGhpcyB3aWxsIGxldCB5b3Uga2VlcCB3b3JraW5nIGFuZCByZWNvdmVyLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh1bmtub3duIHR5cGUgY29kZSkiKTsKICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgYnJlYWs7CiAKQEAgLTk5Myw3ICsxMDc5LDcgQEAKICAgICB9CiAgICAgdiA9IHJfb2JqZWN0KHApOwogICAgIGlmICh2ID09IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJOVUxMIG9iamVjdCBpbiBtYXJzaGFsIGRhdGEiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIk5VTEwgb2JqZWN0IGluIG1hcnNoYWwgZGF0YSBmb3Igb2JqZWN0Iik7CiAgICAgcmV0dXJuIHY7CiB9CiAKQEAgLTEwNDAsMjMgKzExMjYsMTMgQEAKIFB5T2JqZWN0ICoKIFB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlKEZJTEUgKmZwKQogewotLyogNzUlIG9mIDIuMSdzIC5weWMgZmlsZXMgY2FuIGV4cGxvaXQgU01BTExfRklMRV9MSU1JVC4KLSAqIFJFQVNPTkFCTEVfRklMRV9MSU1JVCBpcyBieSBkZWZuIHNvbWV0aGluZyBiaWcgZW5vdWdoIGZvciBUa2ludGVyLnB5Yy4KLSAqLwotI2RlZmluZSBTTUFMTF9GSUxFX0xJTUlUICgxTCA8PCAxNCkKKy8qIFJFQVNPTkFCTEVfRklMRV9MSU1JVCBpcyBieSBkZWZuIHNvbWV0aGluZyBiaWcgZW5vdWdoIGZvciBUa2ludGVyLnB5Yy4gKi8KICNkZWZpbmUgUkVBU09OQUJMRV9GSUxFX0xJTUlUICgxTCA8PCAxOCkKICNpZmRlZiBIQVZFX0ZTVEFUCiAgICAgb2ZmX3QgZmlsZXNpemU7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX0ZTVEFUCiAgICAgZmlsZXNpemUgPSBnZXRmaWxlc2l6ZShmcCk7Ci0gICAgaWYgKGZpbGVzaXplID4gMCkgewotICAgICAgICBjaGFyIGJ1ZltTTUFMTF9GSUxFX0xJTUlUXTsKLSAgICAgICAgY2hhciogcEJ1ZiA9IE5VTEw7Ci0gICAgICAgIGlmIChmaWxlc2l6ZSA8PSBTTUFMTF9GSUxFX0xJTUlUKQotICAgICAgICAgICAgcEJ1ZiA9IGJ1ZjsKLSAgICAgICAgZWxzZSBpZiAoZmlsZXNpemUgPD0gUkVBU09OQUJMRV9GSUxFX0xJTUlUKQotICAgICAgICAgICAgcEJ1ZiA9IChjaGFyICopUHlNZW1fTUFMTE9DKGZpbGVzaXplKTsKKyAgICBpZiAoZmlsZXNpemUgPiAwICYmIGZpbGVzaXplIDw9IFJFQVNPTkFCTEVfRklMRV9MSU1JVCkgeworICAgICAgICBjaGFyKiBwQnVmID0gKGNoYXIgKilQeU1lbV9NQUxMT0MoZmlsZXNpemUpOwogICAgICAgICBpZiAocEJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgICAgICBQeU9iamVjdCogdjsKICAgICAgICAgICAgIHNpemVfdCBuOwpAQCAtMTA2NCw4ICsxMTQwLDcgQEAKICAgICAgICAgICAgICAgIGlzIHNtYWxsZXIgdGhhbiBSRUFTT05BQkxFX0ZJTEVfTElNSVQgKi8KICAgICAgICAgICAgIG4gPSBmcmVhZChwQnVmLCAxLCAoaW50KWZpbGVzaXplLCBmcCk7CiAgICAgICAgICAgICB2ID0gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKHBCdWYsIG4pOwotICAgICAgICAgICAgaWYgKHBCdWYgIT0gYnVmKQotICAgICAgICAgICAgICAgIFB5TWVtX0ZSRUUocEJ1Zik7CisgICAgICAgICAgICBQeU1lbV9GUkVFKHBCdWYpOwogICAgICAgICAgICAgcmV0dXJuIHY7CiAgICAgICAgIH0KIApAQCAtMTA3Niw3ICsxMTUxLDYgQEAKICAgICAgKi8KICAgICByZXR1cm4gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZShmcCk7CiAKLSN1bmRlZiBTTUFMTF9GSUxFX0xJTUlUCiAjdW5kZWYgUkVBU09OQUJMRV9GSUxFX0xJTUlUCiB9CiAKQEAgLTExMDksNiArMTE4MywyNCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyB2b2lkCitzZXRfZXJyb3IoaW50IGVycm9yKQoreworICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICBjYXNlIFdGRVJSX05PTUVNT1JZOgorICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdGRVJSX1VOTUFSU0hBTExBQkxFOgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVubWFyc2hhbGxhYmxlIG9iamVjdCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdGRVJSX05FU1RFRFRPT0RFRVA6CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAib2JqZWN0IHRvbyBkZWVwbHkgbmVzdGVkIHRvIG1hcnNoYWwiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiBQeU9iamVjdCAqCiBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb1N0cmluZyhQeU9iamVjdCAqeCwgaW50IHZlcnNpb24pCiB7CkBAIC0xMTE5LDcgKzEyMTEsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB3Zi5wdHIgPSBQeVN0cmluZ19BU19TVFJJTkcoKFB5U3RyaW5nT2JqZWN0ICopd2Yuc3RyKTsKICAgICB3Zi5lbmQgPSB3Zi5wdHIgKyBQeVN0cmluZ19TaXplKHdmLnN0cik7Ci0gICAgd2YuZXJyb3IgPSAwOworICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwogICAgIHdmLnN0cmluZ3MgPSAodmVyc2lvbiA+IDApID8gUHlEaWN0X05ldygpIDogTlVMTDsKQEAgLTExMzMsMTMgKzEyMjUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9vIG11Y2ggbWFyc2hhbGwgZGF0YSBmb3IgYSBzdHJpbmciKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIF9QeVN0cmluZ19SZXNpemUoJndmLnN0ciwgKFB5X3NzaXplX3QpKHdmLnB0ciAtIGJhc2UpKTsKKyAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJndmLnN0ciwgKFB5X3NzaXplX3QpKHdmLnB0ciAtIGJhc2UpKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAod2YuZXJyb3IpIHsKKyAgICBpZiAod2YuZXJyb3IgIT0gV0ZFUlJfT0spIHsKICAgICAgICAgUHlfWERFQ1JFRih3Zi5zdHIpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICh3Zi5lcnJvcj09MSk/InVubWFyc2hhbGxhYmxlIG9iamVjdCIKLSAgICAgICAgICAgICAgICAgICAgICAgIDoib2JqZWN0IHRvbyBkZWVwbHkgbmVzdGVkIHRvIG1hcnNoYWwiKTsKKyAgICAgICAgc2V0X2Vycm9yKHdmLmVycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiB3Zi5zdHI7CkBAIC0xMTY0LDE2ICsxMjU1LDE0IEBACiAgICAgd2YuZnAgPSBQeUZpbGVfQXNGaWxlKGYpOwogICAgIHdmLnN0ciA9IE5VTEw7CiAgICAgd2YucHRyID0gd2YuZW5kID0gTlVMTDsKLSAgICB3Zi5lcnJvciA9IDA7CisgICAgd2YuZXJyb3IgPSBXRkVSUl9PSzsKICAgICB3Zi5kZXB0aCA9IDA7CiAgICAgd2Yuc3RyaW5ncyA9ICh2ZXJzaW9uID4gMCkgPyBQeURpY3RfTmV3KCkgOiAwOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwogICAgIHdfb2JqZWN0KHgsICZ3Zik7CiAgICAgUHlfWERFQ1JFRih3Zi5zdHJpbmdzKTsKLSAgICBpZiAod2YuZXJyb3IpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAod2YuZXJyb3I9PTEpPyJ1bm1hcnNoYWxsYWJsZSBvYmplY3QiCi0gICAgICAgICAgICAgICAgICAgICAgICA6Im9iamVjdCB0b28gZGVlcGx5IG5lc3RlZCB0byBtYXJzaGFsIik7CisgICAgaWYgKHdmLmVycm9yICE9IFdGRVJSX09LKSB7CisgICAgICAgIHNldF9lcnJvcih3Zi5lcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CmRpZmYgLS1naXQgYS9QeXRob24vbW9kc3VwcG9ydC5jIGIvUHl0aG9uL21vZHN1cHBvcnQuYwppbmRleCA2ZWU0OGYzLi44YmRlYzhiIDEwMDY0NAotLS0gYS9QeXRob24vbW9kc3VwcG9ydC5jCisrKyBiL1B5dGhvbi9tb2RzdXBwb3J0LmMKQEAgLTM0LDggKzM0LDkgQEAKIHsKICAgICBQeU9iamVjdCAqbSwgKmQsICp2LCAqbjsKICAgICBQeU1ldGhvZERlZiAqbWw7Ci0gICAgaWYgKCFQeV9Jc0luaXRpYWxpemVkKCkpCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkludGVycHJldGVyIG5vdCBpbml0aWFsaXplZCAodmVyc2lvbiBtaXNtYXRjaD8pIik7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dldCgpLT5pbnRlcnA7CisgICAgaWYgKGludGVycC0+bW9kdWxlcyA9PSBOVUxMKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeXRob24gaW1wb3J0IG1hY2hpbmVyeSBub3QgaW5pdGlhbGl6ZWQiKTsKICAgICBpZiAobW9kdWxlX2FwaV92ZXJzaW9uICE9IFBZVEhPTl9BUElfVkVSU0lPTikgewogICAgICAgICBjaGFyIG1lc3NhZ2VbNTEyXTsKICAgICAgICAgUHlPU19zbnByaW50ZihtZXNzYWdlLCBzaXplb2YobWVzc2FnZSksCmRpZmYgLS1naXQgYS9QeXRob24vcGVlcGhvbGUuYyBiL1B5dGhvbi9wZWVwaG9sZS5jCmluZGV4IDk1Y2U5ZDAuLjMxM2ViNDMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9wZWVwaG9sZS5jCisrKyBiL1B5dGhvbi9wZWVwaG9sZS5jCkBAIC0xMyw3ICsxMywxMiBAQAogCiAjZGVmaW5lIEdFVEFSRyhhcnIsIGkpICgoaW50KSgoYXJyW2krMl08PDgpICsgYXJyW2krMV0pKQogI2RlZmluZSBVTkNPTkRJVElPTkFMX0pVTVAob3ApICAob3A9PUpVTVBfQUJTT0xVVEUgfHwgb3A9PUpVTVBfRk9SV0FSRCkKLSNkZWZpbmUgQUJTT0xVVEVfSlVNUChvcCkgKG9wPT1KVU1QX0FCU09MVVRFIHx8IG9wPT1DT05USU5VRV9MT09QKQorI2RlZmluZSBDT05ESVRJT05BTF9KVU1QKG9wKSAob3A9PVBPUF9KVU1QX0lGX0ZBTFNFIHx8IG9wPT1QT1BfSlVNUF9JRl9UUlVFIFwKKyAgICB8fCBvcD09SlVNUF9JRl9GQUxTRV9PUl9QT1AgfHwgb3A9PUpVTVBfSUZfVFJVRV9PUl9QT1ApCisjZGVmaW5lIEFCU09MVVRFX0pVTVAob3ApIChvcD09SlVNUF9BQlNPTFVURSB8fCBvcD09Q09OVElOVUVfTE9PUCBcCisgICAgfHwgb3A9PVBPUF9KVU1QX0lGX0ZBTFNFIHx8IG9wPT1QT1BfSlVNUF9JRl9UUlVFIFwKKyAgICB8fCBvcD09SlVNUF9JRl9GQUxTRV9PUl9QT1AgfHwgb3A9PUpVTVBfSUZfVFJVRV9PUl9QT1ApCisjZGVmaW5lIEpVTVBTX09OX1RSVUUob3ApIChvcD09UE9QX0pVTVBfSUZfVFJVRSB8fCBvcD09SlVNUF9JRl9UUlVFX09SX1BPUCkKICNkZWZpbmUgR0VUSlVNUFRHVChhcnIsIGkpIChHRVRBUkcoYXJyLGkpICsgKEFCU09MVVRFX0pVTVAoYXJyW2ldKSA/IDAgOiBpKzMpKQogI2RlZmluZSBTRVRBUkcoYXJyLCBpLCB2YWwpIGFycltpKzJdID0gdmFsPj44OyBhcnJbaSsxXSA9IHZhbCAmIDI1NQogI2RlZmluZSBDT0RFU0laRShvcCkgIChIQVNfQVJHKG9wKSA/IDMgOiAxKQpAQCAtMjQ1LDEzICsyNTAsMTYgQEAKICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKICAgICAgICAgICAgIGNhc2UgRk9SX0lURVI6CiAgICAgICAgICAgICBjYXNlIEpVTVBfRk9SV0FSRDoKLSAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9GQUxTRToKLSAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9UUlVFOgorICAgICAgICAgICAgY2FzZSBKVU1QX0lGX0ZBTFNFX09SX1BPUDoKKyAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9UUlVFX09SX1BPUDoKKyAgICAgICAgICAgIGNhc2UgUE9QX0pVTVBfSUZfRkFMU0U6CisgICAgICAgICAgICBjYXNlIFBPUF9KVU1QX0lGX1RSVUU6CiAgICAgICAgICAgICBjYXNlIEpVTVBfQUJTT0xVVEU6CiAgICAgICAgICAgICBjYXNlIENPTlRJTlVFX0xPT1A6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX0xPT1A6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX0VYQ0VQVDoKICAgICAgICAgICAgIGNhc2UgU0VUVVBfRklOQUxMWToKKyAgICAgICAgICAgIGNhc2UgU0VUVVBfV0lUSDoKICAgICAgICAgICAgICAgICBqID0gR0VUSlVNUFRHVChjb2RlLCBpKTsKICAgICAgICAgICAgICAgICBibG9ja3Nbal0gPSAxOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzM4LDI5ICszNDYsMjQgQEAKICAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGNvbnN0cykpOwogCiAgICAgZm9yIChpPTAgOyBpPGNvZGVsZW4gOyBpICs9IENPREVTSVpFKGNvZGVzdHJbaV0pKSB7CisgICAgICByZW9wdGltaXplX2N1cnJlbnQ6CiAgICAgICAgIG9wY29kZSA9IGNvZGVzdHJbaV07CiAKICAgICAgICAgbGFzdGxjID0gY3VtbGM7CiAgICAgICAgIGN1bWxjID0gMDsKIAogICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewotCi0gICAgICAgICAgICAvKiBSZXBsYWNlIFVOQVJZX05PVCBKVU1QX0lGX0ZBTFNFIFBPUF9UT1Agd2l0aAotICAgICAgICAgICAgICAgd2l0aCAgICAgICAgICAgICAgICBKVU1QX0lGX1RSVUUgUE9QX1RPUCAqLworICAgICAgICAgICAgLyogUmVwbGFjZSBVTkFSWV9OT1QgUE9QX0pVTVBfSUZfRkFMU0UKKyAgICAgICAgICAgICAgIHdpdGggICAgUE9QX0pVTVBfSUZfVFJVRSAqLwogICAgICAgICAgICAgY2FzZSBVTkFSWV9OT1Q6Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGVzdHJbaSsxXSAhPSBKVU1QX0lGX0ZBTFNFICB8fAotICAgICAgICAgICAgICAgICAgICBjb2Rlc3RyW2krNF0gIT0gUE9QX1RPUCAgfHwKLSAgICAgICAgICAgICAgICAgICAgIUlTQkFTSUNCTE9DSyhibG9ja3MsaSw1KSkKKyAgICAgICAgICAgICAgICBpZiAoY29kZXN0cltpKzFdICE9IFBPUF9KVU1QX0lGX0ZBTFNFCisgICAgICAgICAgICAgICAgICAgIHx8ICFJU0JBU0lDQkxPQ0soYmxvY2tzLGksNCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHRndCA9IEdFVEpVTVBUR1QoY29kZXN0ciwgKGkrMSkpOwotICAgICAgICAgICAgICAgIGlmIChjb2Rlc3RyW3RndF0gIT0gUE9QX1RPUCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaiA9IEdFVEFSRyhjb2Rlc3RyLCBpKzEpICsgMTsKLSAgICAgICAgICAgICAgICBjb2Rlc3RyW2ldID0gSlVNUF9JRl9UUlVFOworICAgICAgICAgICAgICAgIGogPSBHRVRBUkcoY29kZXN0ciwgaSsxKTsKKyAgICAgICAgICAgICAgICBjb2Rlc3RyW2ldID0gUE9QX0pVTVBfSUZfVFJVRTsKICAgICAgICAgICAgICAgICBTRVRBUkcoY29kZXN0ciwgaSwgaik7Ci0gICAgICAgICAgICAgICAgY29kZXN0cltpKzNdID0gUE9QX1RPUDsKLSAgICAgICAgICAgICAgICBjb2Rlc3RyW2krNF0gPSBOT1A7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY29kZXN0cltpKzNdID0gTk9QOworICAgICAgICAgICAgICAgIGdvdG8gcmVvcHRpbWl6ZV9jdXJyZW50OwogCiAgICAgICAgICAgICAgICAgLyogbm90IGEgaXMgYiAtLT4gIGEgaXMgbm90IGIKICAgICAgICAgICAgICAgICAgICBub3QgYSBpbiBiIC0tPiAgYSBub3QgaW4gYgpAQCAtNDAwLDE2ICs0MDMsMTYgQEAKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIC8qIFNraXAgb3ZlciBMT0FEX0NPTlNUIHRydWVjb25zdAotICAgICAgICAgICAgICAgICAgIEpVTVBfSUZfRkFMU0UgeHggIFBPUF9UT1AgKi8KKyAgICAgICAgICAgICAgICAgICBQT1BfSlVNUF9JRl9GQUxTRSB4eC4gVGhpcyBpbXByb3ZlcworICAgICAgICAgICAgICAgICAgICJ3aGlsZSAxIiBwZXJmb3JtYW5jZS4gKi8KICAgICAgICAgICAgIGNhc2UgTE9BRF9DT05TVDoKICAgICAgICAgICAgICAgICBjdW1sYyA9IGxhc3RsYyArIDE7CiAgICAgICAgICAgICAgICAgaiA9IEdFVEFSRyhjb2Rlc3RyLCBpKTsKLSAgICAgICAgICAgICAgICBpZiAoY29kZXN0cltpKzNdICE9IEpVTVBfSUZfRkFMU0UgIHx8Ci0gICAgICAgICAgICAgICAgICAgIGNvZGVzdHJbaSs2XSAhPSBQT1BfVE9QICB8fAotICAgICAgICAgICAgICAgICAgICAhSVNCQVNJQ0JMT0NLKGJsb2NrcyxpLDcpICB8fAorICAgICAgICAgICAgICAgIGlmIChjb2Rlc3RyW2krM10gIT0gUE9QX0pVTVBfSUZfRkFMU0UgIHx8CisgICAgICAgICAgICAgICAgICAgICFJU0JBU0lDQkxPQ0soYmxvY2tzLGksNikgIHx8CiAgICAgICAgICAgICAgICAgICAgICFQeU9iamVjdF9Jc1RydWUoUHlMaXN0X0dFVF9JVEVNKGNvbnN0cywgaikpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBtZW1zZXQoY29kZXN0citpLCBOT1AsIDcpOworICAgICAgICAgICAgICAgIG1lbXNldChjb2Rlc3RyK2ksIE5PUCwgNik7CiAgICAgICAgICAgICAgICAgY3VtbGMgPSAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC00OTgsMjcgKzUwMSw0OSBAQAogICAgICAgICAgICAgICAgICAgICJpZiBhIG9yIGI6IgogICAgICAgICAgICAgICAgICAgICJhIGFuZCBiIG9yIGMiCiAgICAgICAgICAgICAgICAgICAgIihhIGFuZCBiKSBhbmQgYyIKLSAgICAgICAgICAgICAgICAgICB4OkpVTVBfSUZfRkFMU0UgeSAgIHk6SlVNUF9JRl9GQUxTRSB6ICAtLT4gIHg6SlVNUF9JRl9GQUxTRSB6Ci0gICAgICAgICAgICAgICAgICAgeDpKVU1QX0lGX0ZBTFNFIHkgICB5OkpVTVBfSUZfVFJVRSB6ICAgICAgICAgICAgICAgICAgLS0+ICB4OkpVTVBfSUZfRkFMU0UgeSszCisgICAgICAgICAgICAgICAgICAgeDpKVU1QX0lGX0ZBTFNFX09SX1BPUCB5ICAgeTpKVU1QX0lGX0ZBTFNFX09SX1BPUCB6CisgICAgICAgICAgICAgICAgICAgICAgLS0+ICB4OkpVTVBfSUZfRkFMU0VfT1JfUE9QIHoKKyAgICAgICAgICAgICAgICAgICB4OkpVTVBfSUZfRkFMU0VfT1JfUE9QIHkgICB5OkpVTVBfSUZfVFJVRV9PUl9QT1AgegorICAgICAgICAgICAgICAgICAgICAgIC0tPiAgeDpQT1BfSlVNUF9JRl9GQUxTRSB5KzMKICAgICAgICAgICAgICAgICAgICB3aGVyZSB5KzMgaXMgdGhlIGluc3RydWN0aW9uIGZvbGxvd2luZyB0aGUgc2Vjb25kIHRlc3QuCiAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9GQUxTRToKLSAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9UUlVFOgorICAgICAgICAgICAgY2FzZSBKVU1QX0lGX0ZBTFNFX09SX1BPUDoKKyAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9UUlVFX09SX1BPUDoKICAgICAgICAgICAgICAgICB0Z3QgPSBHRVRKVU1QVEdUKGNvZGVzdHIsIGkpOwogICAgICAgICAgICAgICAgIGogPSBjb2Rlc3RyW3RndF07Ci0gICAgICAgICAgICAgICAgaWYgKGogPT0gSlVNUF9JRl9GQUxTRSAgICAgICAgICAgICAgICAgIHx8ICBqID09IEpVTVBfSUZfVFJVRSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaiA9PSBvcGNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRndHRndCA9IEdFVEpVTVBUR1QoY29kZXN0ciwgdGd0KSAtIGkgLSAzOworICAgICAgICAgICAgICAgIGlmIChDT05ESVRJT05BTF9KVU1QKGopKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIE5PVEU6IGFsbCBwb3NzaWJsZSBqdW1wcyBoZXJlIGFyZQorICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZSEgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKEpVTVBTX09OX1RSVUUoaikgPT0gSlVNUFNfT05fVFJVRShvcGNvZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc2Vjb25kIGp1bXAgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZW4gaWZmIHRoZSBmaXJzdCBpcy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRndHRndCA9IEdFVEpVTVBUR1QoY29kZXN0ciwgdGd0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBjdXJyZW50IG9wY29kZSBpbmhlcml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRzIHRhcmdldCdzIHN0YWNrIGJlaGF2aW91ciAqLworICAgICAgICAgICAgICAgICAgICAgICAgY29kZXN0cltpXSA9IGo7CiAgICAgICAgICAgICAgICAgICAgICAgICBTRVRBUkcoY29kZXN0ciwgaSwgdGd0dGd0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVvcHRpbWl6ZV9jdXJyZW50OwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGd0IC09IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTRVRBUkcoY29kZXN0ciwgaSwgdGd0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzZWNvbmQganVtcCBpcyBub3QgdGFrZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBmaXJzdCBpcyAoc28ganVtcCBwYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCksIGFuZCBhbGwgY29uZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBzIHBvcCB0aGVpciBhcmd1bWVudCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV5J3JlIG5vdCB0YWtlbiAoc28gY2hhbmdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QganVtcCB0byBwb3AgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCB3aGVuIGl0J3MgdGFrZW4pLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpVTVBTX09OX1RSVUUob3Bjb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc3RyW2ldID0gUE9QX0pVTVBfSUZfVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc3RyW2ldID0gUE9QX0pVTVBfSUZfRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICBTRVRBUkcoY29kZXN0ciwgaSwgKHRndCArIDMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVvcHRpbWl6ZV9jdXJyZW50OwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvKiBJbnRlbnRpb25hbCBmYWxsdGhyb3VnaCAqLwogCiAgICAgICAgICAgICAgICAgLyogUmVwbGFjZSBqdW1wcyB0byB1bmNvbmRpdGlvbmFsIGp1bXBzICovCisgICAgICAgICAgICBjYXNlIFBPUF9KVU1QX0lGX0ZBTFNFOgorICAgICAgICAgICAgY2FzZSBQT1BfSlVNUF9JRl9UUlVFOgogICAgICAgICAgICAgY2FzZSBGT1JfSVRFUjoKICAgICAgICAgICAgIGNhc2UgSlVNUF9GT1JXQVJEOgogICAgICAgICAgICAgY2FzZSBKVU1QX0FCU09MVVRFOgpAQCAtNTI2LDYgKzU1MSw3IEBACiAgICAgICAgICAgICBjYXNlIFNFVFVQX0xPT1A6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX0VYQ0VQVDoKICAgICAgICAgICAgIGNhc2UgU0VUVVBfRklOQUxMWToKKyAgICAgICAgICAgIGNhc2UgU0VUVVBfV0lUSDoKICAgICAgICAgICAgICAgICB0Z3QgPSBHRVRKVU1QVEdUKGNvZGVzdHIsIGkpOwogICAgICAgICAgICAgICAgIC8qIFJlcGxhY2UgSlVNUF8qIHRvIGEgUkVUVVJOIGludG8ganVzdCBhIFJFVFVSTiAqLwogICAgICAgICAgICAgICAgIGlmIChVTkNPTkRJVElPTkFMX0pVTVAob3Bjb2RlKSAmJgpAQCAtNTkxLDE3ICs2MTcsMjAgQEAKIAogICAgICAgICAgICAgY2FzZSBKVU1QX0FCU09MVVRFOgogICAgICAgICAgICAgY2FzZSBDT05USU5VRV9MT09QOgorICAgICAgICAgICAgY2FzZSBQT1BfSlVNUF9JRl9GQUxTRToKKyAgICAgICAgICAgIGNhc2UgUE9QX0pVTVBfSUZfVFJVRToKKyAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9GQUxTRV9PUl9QT1A6CisgICAgICAgICAgICBjYXNlIEpVTVBfSUZfVFJVRV9PUl9QT1A6CiAgICAgICAgICAgICAgICAgaiA9IGFkZHJtYXBbR0VUQVJHKGNvZGVzdHIsIGkpXTsKICAgICAgICAgICAgICAgICBTRVRBUkcoY29kZXN0ciwgaSwgaik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgRk9SX0lURVI6CiAgICAgICAgICAgICBjYXNlIEpVTVBfRk9SV0FSRDoKLSAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9GQUxTRToKLSAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9UUlVFOgogICAgICAgICAgICAgY2FzZSBTRVRVUF9MT09QOgogICAgICAgICAgICAgY2FzZSBTRVRVUF9FWENFUFQ6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX0ZJTkFMTFk6CisgICAgICAgICAgICBjYXNlIFNFVFVQX1dJVEg6CiAgICAgICAgICAgICAgICAgaiA9IGFkZHJtYXBbR0VUQVJHKGNvZGVzdHIsIGkpICsgaSArIDNdIC0gYWRkcm1hcFtpXSAtIDM7CiAgICAgICAgICAgICAgICAgU0VUQVJHKGNvZGVzdHIsIGksIGopOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5Y3R5cGUuYyBiL1B5dGhvbi9weWN0eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExMTdkNQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi9weWN0eXBlLmMKQEAgLTAsMCArMSwyMTQgQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKworLyogT3VyIG93biBsb2NhbGUtaW5kZXBlbmRlbnQgY3R5cGUuaC1saWtlIG1hY3JvcyAqLworCitjb25zdCB1bnNpZ25lZCBpbnQgX1B5X2N0eXBlX3RhYmxlWzI1Nl0gPSB7CisgICAgMCwgLyogMHgwICdceDAwJyAqLworICAgIDAsIC8qIDB4MSAnXHgwMScgKi8KKyAgICAwLCAvKiAweDIgJ1x4MDInICovCisgICAgMCwgLyogMHgzICdceDAzJyAqLworICAgIDAsIC8qIDB4NCAnXHgwNCcgKi8KKyAgICAwLCAvKiAweDUgJ1x4MDUnICovCisgICAgMCwgLyogMHg2ICdceDA2JyAqLworICAgIDAsIC8qIDB4NyAnXHgwNycgKi8KKyAgICAwLCAvKiAweDggJ1x4MDgnICovCisgICAgUFlfQ1RGX1NQQUNFLCAvKiAweDkgJ1x0JyAqLworICAgIFBZX0NURl9TUEFDRSwgLyogMHhhICdcbicgKi8KKyAgICBQWV9DVEZfU1BBQ0UsIC8qIDB4YiAnXHYnICovCisgICAgUFlfQ1RGX1NQQUNFLCAvKiAweGMgJ1xmJyAqLworICAgIFBZX0NURl9TUEFDRSwgLyogMHhkICdccicgKi8KKyAgICAwLCAvKiAweGUgJ1x4MGUnICovCisgICAgMCwgLyogMHhmICdceDBmJyAqLworICAgIDAsIC8qIDB4MTAgJ1x4MTAnICovCisgICAgMCwgLyogMHgxMSAnXHgxMScgKi8KKyAgICAwLCAvKiAweDEyICdceDEyJyAqLworICAgIDAsIC8qIDB4MTMgJ1x4MTMnICovCisgICAgMCwgLyogMHgxNCAnXHgxNCcgKi8KKyAgICAwLCAvKiAweDE1ICdceDE1JyAqLworICAgIDAsIC8qIDB4MTYgJ1x4MTYnICovCisgICAgMCwgLyogMHgxNyAnXHgxNycgKi8KKyAgICAwLCAvKiAweDE4ICdceDE4JyAqLworICAgIDAsIC8qIDB4MTkgJ1x4MTknICovCisgICAgMCwgLyogMHgxYSAnXHgxYScgKi8KKyAgICAwLCAvKiAweDFiICdceDFiJyAqLworICAgIDAsIC8qIDB4MWMgJ1x4MWMnICovCisgICAgMCwgLyogMHgxZCAnXHgxZCcgKi8KKyAgICAwLCAvKiAweDFlICdceDFlJyAqLworICAgIDAsIC8qIDB4MWYgJ1x4MWYnICovCisgICAgUFlfQ1RGX1NQQUNFLCAvKiAweDIwICcgJyAqLworICAgIDAsIC8qIDB4MjEgJyEnICovCisgICAgMCwgLyogMHgyMiAnIicgKi8KKyAgICAwLCAvKiAweDIzICcjJyAqLworICAgIDAsIC8qIDB4MjQgJyQnICovCisgICAgMCwgLyogMHgyNSAnJScgKi8KKyAgICAwLCAvKiAweDI2ICcmJyAqLworICAgIDAsIC8qIDB4MjcgIiciICovCisgICAgMCwgLyogMHgyOCAnKCcgKi8KKyAgICAwLCAvKiAweDI5ICcpJyAqLworICAgIDAsIC8qIDB4MmEgJyonICovCisgICAgMCwgLyogMHgyYiAnKycgKi8KKyAgICAwLCAvKiAweDJjICcsJyAqLworICAgIDAsIC8qIDB4MmQgJy0nICovCisgICAgMCwgLyogMHgyZSAnLicgKi8KKyAgICAwLCAvKiAweDJmICcvJyAqLworICAgIFBZX0NURl9ESUdJVHxQWV9DVEZfWERJR0lULCAvKiAweDMwICcwJyAqLworICAgIFBZX0NURl9ESUdJVHxQWV9DVEZfWERJR0lULCAvKiAweDMxICcxJyAqLworICAgIFBZX0NURl9ESUdJVHxQWV9DVEZfWERJR0lULCAvKiAweDMyICcyJyAqLworICAgIFBZX0NURl9ESUdJVHxQWV9DVEZfWERJR0lULCAvKiAweDMzICczJyAqLworICAgIFBZX0NURl9ESUdJVHxQWV9DVEZfWERJR0lULCAvKiAweDM0ICc0JyAqLworICAgIFBZX0NURl9ESUdJVHxQWV9DVEZfWERJR0lULCAvKiAweDM1ICc1JyAqLworICAgIFBZX0NURl9ESUdJVHxQWV9DVEZfWERJR0lULCAvKiAweDM2ICc2JyAqLworICAgIFBZX0NURl9ESUdJVHxQWV9DVEZfWERJR0lULCAvKiAweDM3ICc3JyAqLworICAgIFBZX0NURl9ESUdJVHxQWV9DVEZfWERJR0lULCAvKiAweDM4ICc4JyAqLworICAgIFBZX0NURl9ESUdJVHxQWV9DVEZfWERJR0lULCAvKiAweDM5ICc5JyAqLworICAgIDAsIC8qIDB4M2EgJzonICovCisgICAgMCwgLyogMHgzYiAnOycgKi8KKyAgICAwLCAvKiAweDNjICc8JyAqLworICAgIDAsIC8qIDB4M2QgJz0nICovCisgICAgMCwgLyogMHgzZSAnPicgKi8KKyAgICAwLCAvKiAweDNmICc/JyAqLworICAgIDAsIC8qIDB4NDAgJ0AnICovCisgICAgUFlfQ1RGX1VQUEVSfFBZX0NURl9YRElHSVQsIC8qIDB4NDEgJ0EnICovCisgICAgUFlfQ1RGX1VQUEVSfFBZX0NURl9YRElHSVQsIC8qIDB4NDIgJ0InICovCisgICAgUFlfQ1RGX1VQUEVSfFBZX0NURl9YRElHSVQsIC8qIDB4NDMgJ0MnICovCisgICAgUFlfQ1RGX1VQUEVSfFBZX0NURl9YRElHSVQsIC8qIDB4NDQgJ0QnICovCisgICAgUFlfQ1RGX1VQUEVSfFBZX0NURl9YRElHSVQsIC8qIDB4NDUgJ0UnICovCisgICAgUFlfQ1RGX1VQUEVSfFBZX0NURl9YRElHSVQsIC8qIDB4NDYgJ0YnICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDQ3ICdHJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg0OCAnSCcgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NDkgJ0knICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDRhICdKJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg0YiAnSycgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NGMgJ0wnICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDRkICdNJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg0ZSAnTicgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NGYgJ08nICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDUwICdQJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg1MSAnUScgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NTIgJ1InICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDUzICdTJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg1NCAnVCcgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NTUgJ1UnICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDU2ICdWJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg1NyAnVycgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NTggJ1gnICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDU5ICdZJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg1YSAnWicgKi8KKyAgICAwLCAvKiAweDViICdbJyAqLworICAgIDAsIC8qIDB4NWMgJ1xcJyAqLworICAgIDAsIC8qIDB4NWQgJ10nICovCisgICAgMCwgLyogMHg1ZSAnXicgKi8KKyAgICAwLCAvKiAweDVmICdfJyAqLworICAgIDAsIC8qIDB4NjAgJ2AnICovCisgICAgUFlfQ1RGX0xPV0VSfFBZX0NURl9YRElHSVQsIC8qIDB4NjEgJ2EnICovCisgICAgUFlfQ1RGX0xPV0VSfFBZX0NURl9YRElHSVQsIC8qIDB4NjIgJ2InICovCisgICAgUFlfQ1RGX0xPV0VSfFBZX0NURl9YRElHSVQsIC8qIDB4NjMgJ2MnICovCisgICAgUFlfQ1RGX0xPV0VSfFBZX0NURl9YRElHSVQsIC8qIDB4NjQgJ2QnICovCisgICAgUFlfQ1RGX0xPV0VSfFBZX0NURl9YRElHSVQsIC8qIDB4NjUgJ2UnICovCisgICAgUFlfQ1RGX0xPV0VSfFBZX0NURl9YRElHSVQsIC8qIDB4NjYgJ2YnICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDY3ICdnJyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg2OCAnaCcgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NjkgJ2knICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDZhICdqJyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg2YiAnaycgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NmMgJ2wnICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDZkICdtJyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg2ZSAnbicgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NmYgJ28nICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDcwICdwJyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg3MSAncScgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NzIgJ3InICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDczICdzJyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg3NCAndCcgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NzUgJ3UnICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDc2ICd2JyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg3NyAndycgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NzggJ3gnICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDc5ICd5JyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg3YSAneicgKi8KKyAgICAwLCAvKiAweDdiICd7JyAqLworICAgIDAsIC8qIDB4N2MgJ3wnICovCisgICAgMCwgLyogMHg3ZCAnfScgKi8KKyAgICAwLCAvKiAweDdlICd+JyAqLworICAgIDAsIC8qIDB4N2YgJ1x4N2YnICovCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorfTsKKworCitjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9jdHlwZV90b2xvd2VyWzI1Nl0gPSB7CisgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAorICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKKyAgICAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAorICAgIDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCisgICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKKyAgICAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAorICAgIDB4NDAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCisgICAgMHg2OCwgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywgMHg2ZCwgMHg2ZSwgMHg2ZiwKKyAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LAorICAgIDB4NzgsIDB4NzksIDB4N2EsIDB4NWIsIDB4NWMsIDB4NWQsIDB4NWUsIDB4NWYsCisgICAgMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKKyAgICAweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAorICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCisgICAgMHg3OCwgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwKKyAgICAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorICAgIDB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisgICAgMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKyAgICAweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLAorICAgIDB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCisgICAgMHhhOCwgMHhhOSwgMHhhYSwgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwKKyAgICAweGIwLCAweGIxLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LCAweGI3LAorICAgIDB4YjgsIDB4YjksIDB4YmEsIDB4YmIsIDB4YmMsIDB4YmQsIDB4YmUsIDB4YmYsCisgICAgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKKyAgICAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLAorICAgIDB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsCisgICAgMHhkOCwgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwKKyAgICAweGUwLCAweGUxLCAweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LAorICAgIDB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZWIsIDB4ZWMsIDB4ZWQsIDB4ZWUsIDB4ZWYsCisgICAgMHhmMCwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywKKyAgICAweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkLCAweGZlLCAweGZmLAorfTsKKworY29uc3QgdW5zaWduZWQgY2hhciBfUHlfY3R5cGVfdG91cHBlclsyNTZdID0geworICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKyAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsCisgICAgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNywKKyAgICAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLAorICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCisgICAgMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwKKyAgICAweDQwLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LAorICAgIDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsIDB4NGQsIDB4NGUsIDB4NGYsCisgICAgMHg1MCwgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywKKyAgICAweDU4LCAweDU5LCAweDVhLCAweDViLCAweDVjLCAweDVkLCAweDVlLCAweDVmLAorICAgIDB4NjAsIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsCisgICAgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwKKyAgICAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LAorICAgIDB4NTgsIDB4NTksIDB4NWEsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsCisgICAgMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKyAgICAweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorICAgIDB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisgICAgMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwKKyAgICAweGEwLCAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LAorICAgIDB4YTgsIDB4YTksIDB4YWEsIDB4YWIsIDB4YWMsIDB4YWQsIDB4YWUsIDB4YWYsCisgICAgMHhiMCwgMHhiMSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhiNywKKyAgICAweGI4LCAweGI5LCAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlLCAweGJmLAorICAgIDB4YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsCisgICAgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwKKyAgICAweGQwLCAweGQxLCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LAorICAgIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZGIsIDB4ZGMsIDB4ZGQsIDB4ZGUsIDB4ZGYsCisgICAgMHhlMCwgMHhlMSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywKKyAgICAweGU4LCAweGU5LCAweGVhLCAweGViLCAweGVjLCAweGVkLCAweGVlLCAweGVmLAorICAgIDB4ZjAsIDB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsCisgICAgMHhmOCwgMHhmOSwgMHhmYSwgMHhmYiwgMHhmYywgMHhmZCwgMHhmZSwgMHhmZiwKK307CisKZGlmZiAtLWdpdCBhL1B5dGhvbi9weW1hdGguYyBiL1B5dGhvbi9weW1hdGguYwppbmRleCAxYmEyZTYzLi44MjdhNzczIDEwMDY0NAotLS0gYS9QeXRob24vcHltYXRoLmMKKysrIGIvUHl0aG9uL3B5bWF0aC5jCkBAIC0xMyw2ICsxMywyNCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX0dDQ19BU01fRk9SX1g4NworCisvKiBpbmxpbmUgYXNzZW1ibHkgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgdGhlIDM4NyBGUFUgY29udHJvbCB3b3JkIG9uCisgICBnY2MveDg2ICovCisKK3Vuc2lnbmVkIHNob3J0IF9QeV9nZXRfMzg3Y29udHJvbHdvcmQodm9pZCkgeworICAgIHVuc2lnbmVkIHNob3J0IGN3OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGN3ICUwIiA6ICI9bSIgKGN3KSk7CisgICAgcmV0dXJuIGN3OworfQorCit2b2lkIF9QeV9zZXRfMzg3Y29udHJvbHdvcmQodW5zaWduZWQgc2hvcnQgY3cpIHsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGN3ICUwIiA6IDogIm0iIChjdykpOworfQorCisjZW5kaWYKKworCiAjaWZuZGVmIEhBVkVfSFlQT1QKIGRvdWJsZSBoeXBvdChkb3VibGUgeCwgZG91YmxlIHkpCiB7CkBAIC00NywyMDEgKzY1LDE1IEBACiB9CiAjZW5kaWYgLyogSEFWRV9DT1BZU0lHTiAqLwogCi0jaWZuZGVmIEhBVkVfTE9HMVAKLSNpbmNsdWRlIDxmbG9hdC5oPgotCisjaWZuZGVmIEhBVkVfUk9VTkQKIGRvdWJsZQotbG9nMXAoZG91YmxlIHgpCityb3VuZChkb3VibGUgeCkKIHsKLSAgICAvKiBGb3IgeCBzbWFsbCwgd2UgdXNlIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2guICBMZXQgeSBiZSB0aGUgbmVhcmVzdAotICAgICAgIGZsb2F0IHRvIDEreCwgdGhlbgotCi0gICAgICAgICAxK3ggPSB5ICogKDEgLSAoeS0xLXgpL3kpCi0KLSAgICAgICBzbyBsb2coMSt4KSA9IGxvZyh5KSArIGxvZygxLSh5LTEteCkveSkuICBTaW5jZSAoeS0xLXgpL3kgaXMgdGlueSwKLSAgICAgICB0aGUgc2Vjb25kIHRlcm0gaXMgd2VsbCBhcHByb3hpbWF0ZWQgYnkgKHktMS14KS95LiAgSWYgYWJzKHgpID49Ci0gICAgICAgREJMX0VQU0lMT04vMiBvciB0aGUgcm91bmRpbmctbW9kZSBpcyBzb21lIGZvcm0gb2Ygcm91bmQtdG8tbmVhcmVzdAotICAgICAgIHRoZW4geS0xLXggd2lsbCBiZSBleGFjdGx5IHJlcHJlc2VudGFibGUsIGFuZCBpcyBjb21wdXRlZCBleGFjdGx5Ci0gICAgICAgYnkgKHktMSkteC4KLQotICAgICAgIElmIGFicyh4KSA8IERCTF9FUFNJTE9OLzIgYW5kIHRoZSByb3VuZGluZyBtb2RlIGlzIG5vdCBrbm93biB0byBiZQotICAgICAgIHJvdW5kLXRvLW5lYXJlc3QgdGhlbiB0aGlzIG1ldGhvZCBpcyBzbGlnaHRseSBkYW5nZXJvdXM6IDEreCBjb3VsZAotICAgICAgIGJlIHJvdW5kZWQgdXAgdG8gMStEQkxfRVBTSUxPTiBpbnN0ZWFkIG9mIGRvd24gdG8gMSwgYW5kIGluIHRoYXQKLSAgICAgICBjYXNlIHktMS14IHdpbGwgbm90IGJlIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhbnkgbW9yZSBhbmQgdGhlCi0gICAgICAgcmVzdWx0IGNhbiBiZSBvZmYgYnkgbWFueSB1bHBzLiAgQnV0IHRoaXMgaXMgZWFzaWx5IGZpeGVkOiBmb3IgYQotICAgICAgIGZsb2F0aW5nLXBvaW50IG51bWJlciB8eHwgPCBEQkxfRVBTSUxPTi8yLiwgdGhlIGNsb3Nlc3QKLSAgICAgICBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gbG9nKDEreCkgaXMgZXhhY3RseSB4LgotICAgICovCi0KLSAgICBkb3VibGUgeTsKLSAgICBpZiAoZmFicyh4KSA8IERCTF9FUFNJTE9OLzIuKSB7Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0gZWxzZSBpZiAoLTAuNSA8PSB4ICYmIHggPD0gMS4pIHsKLSAgICAgICAgLyogV0FSTklORzogaXQncyBwb3NzaWJsZSB0aGFuIGFuIG92ZXJlYWdlciBjb21waWxlcgotICAgICAgICAgICB3aWxsIGluY29ycmVjdGx5IG9wdGltaXplIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzCi0gICAgICAgICAgIHRvIHRoZSBlcXVpdmFsZW50IG9mICJyZXR1cm4gbG9nKDEuK3gpIi4gSWYgdGhpcwotICAgICAgICAgICBoYXBwZW5zLCB0aGVuIHJlc3VsdHMgZnJvbSBsb2cxcCB3aWxsIGJlIGluYWNjdXJhdGUKLSAgICAgICAgICAgZm9yIHNtYWxsIHguICovCi0gICAgICAgIHkgPSAxLit4OwotICAgICAgICByZXR1cm4gbG9nKHkpLSgoeS0xLikteCkveTsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBOYU5zIGFuZCBpbmZpbml0aWVzIHNob3VsZCBlbmQgdXAgaGVyZSAqLwotICAgICAgICByZXR1cm4gbG9nKDEuK3gpOwotICAgIH0KLX0KLSNlbmRpZiAvKiBIQVZFX0xPRzFQICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotc3RhdGljIGNvbnN0IGRvdWJsZSBsbjIgPSA2LjkzMTQ3MTgwNTU5OTQ1Mjg2MjI3RS0wMTsKLXN0YXRpYyBjb25zdCBkb3VibGUgdHdvX3Bvd19tMjggPSAzLjcyNTI5MDI5ODQ2MTkxNDFFLTA5OyAvKiAyKiotMjggKi8KLXN0YXRpYyBjb25zdCBkb3VibGUgdHdvX3Bvd19wMjggPSAyNjg0MzU0NTYuMDsgLyogMioqMjggKi8KLXN0YXRpYyBjb25zdCBkb3VibGUgemVybyA9IDAuMDsKLQotLyogYXNpbmgoeCkKLSAqIE1ldGhvZCA6Ci0gKiAgICAgIEJhc2VkIG9uCi0gKiAgICAgICAgICAgICAgYXNpbmgoeCkgPSBzaWduKHgpICogbG9nIFsgfHh8ICsgc3FydCh4KngrMSkgXQotICogICAgICB3ZSBoYXZlCi0gKiAgICAgIGFzaW5oKHgpIDo9IHggIGlmICAxK3gqeD0xLAotICogICAgICAgICAgICAgICA6PSBzaWduKHgpKihsb2coeCkrbG4yKSkgZm9yIGxhcmdlIHx4fCwgZWxzZQotICogICAgICAgICAgICAgICA6PSBzaWduKHgpKmxvZygyfHh8KzEvKHx4fCtzcXJ0KHgqeCsxKSkpIGlmfHh8PjIsIGVsc2UKLSAqICAgICAgICAgICAgICAgOj0gc2lnbih4KSpsb2cxcCh8eHwgKyB4XjIvKDEgKyBzcXJ0KDEreF4yKSkpCi0gKi8KLQotI2lmbmRlZiBIQVZFX0FTSU5ICi1kb3VibGUKLWFzaW5oKGRvdWJsZSB4KQotewotICAgIGRvdWJsZSB3OwotICAgIGRvdWJsZSBhYnN4ID0gZmFicyh4KTsKLQotICAgIGlmIChQeV9JU19OQU4oeCkgfHwgUHlfSVNfSU5GSU5JVFkoeCkpIHsKLSAgICAgICAgcmV0dXJuIHgreDsKLSAgICB9Ci0gICAgaWYgKGFic3ggPCB0d29fcG93X20yOCkgeyAgICAgICAgICAgLyogfHh8IDwgMioqLTI4ICovCi0gICAgICAgIHJldHVybiB4OyAgICAgICAgICAgICAgIC8qIHJldHVybiB4IGluZXhhY3QgZXhjZXB0IDAgKi8KLSAgICB9Ci0gICAgaWYgKGFic3ggPiB0d29fcG93X3AyOCkgeyAgICAgICAgICAgLyogfHh8ID4gMioqMjggKi8KLSAgICAgICAgdyA9IGxvZyhhYnN4KStsbjI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGFic3ggPiAyLjApIHsgICAgICAgICAgICAgIC8qIDIgPCB8eHwgPCAyKioyOCAqLwotICAgICAgICB3ID0gbG9nKDIuMCphYnN4ICsgMS4wIC8gKHNxcnQoeCp4ICsgMS4wKSArIGFic3gpKTsKLSAgICB9Ci0gICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMioqLTI4IDw9IHx4fCA8IDI9ICovCi0gICAgICAgIGRvdWJsZSB0ID0geCp4OwotICAgICAgICB3ID0gbG9nMXAoYWJzeCArIHQgLyAoMS4wICsgc3FydCgxLjAgKyB0KSkpOwotICAgIH0KLSAgICByZXR1cm4gY29weXNpZ24odywgeCk7Ci0KLX0KLSNlbmRpZiAvKiBIQVZFX0FTSU5IICovCi0KLS8qIGFjb3NoKHgpCi0gKiBNZXRob2QgOgotICogICAgICBCYXNlZCBvbgotICogICAgICAgICAgICBhY29zaCh4KSA9IGxvZyBbIHggKyBzcXJ0KHgqeC0xKSBdCi0gKiAgICAgIHdlIGhhdmUKLSAqICAgICAgICAgICAgYWNvc2goeCkgOj0gbG9nKHgpK2xuMiwgaWYgeCBpcyBsYXJnZTsgZWxzZQotICogICAgICAgICAgICBhY29zaCh4KSA6PSBsb2coMngtMS8oc3FydCh4KngtMSkreCkpIGlmIHg+MjsgZWxzZQotICogICAgICAgICAgICBhY29zaCh4KSA6PSBsb2cxcCh0K3NxcnQoMi4wKnQrdCp0KSk7IHdoZXJlIHQ9eC0xLgotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKiAgICAgIGFjb3NoKHgpIGlzIE5hTiB3aXRoIHNpZ25hbCBpZiB4PDEuCi0gKiAgICAgIGFjb3NoKE5hTikgaXMgTmFOIHdpdGhvdXQgc2lnbmFsLgotICovCi0KLSNpZm5kZWYgSEFWRV9BQ09TSAotZG91YmxlCi1hY29zaChkb3VibGUgeCkKLXsKLSAgICBpZiAoUHlfSVNfTkFOKHgpKSB7Ci0gICAgICAgIHJldHVybiB4K3g7Ci0gICAgfQotICAgIGlmICh4IDwgMS4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIHggPCAxOyAgcmV0dXJuIGEgc2lnbmFsaW5nIE5hTiAqLwotICAgICAgICBlcnJubyA9IEVET007Ci0jaWZkZWYgUHlfTkFOCi0gICAgICAgIHJldHVybiBQeV9OQU47Ci0jZWxzZQotICAgICAgICByZXR1cm4gKHgteCkvKHgteCk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgZWxzZSBpZiAoeCA+PSB0d29fcG93X3AyOCkgeyAgICAgICAgLyogeCA+IDIqKjI4ICovCi0gICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh4KSkgewotICAgICAgICAgICAgcmV0dXJuIHgreDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBsb2coeCkrbG4yOyAgICAgICAgICAgICAgICAgIC8qIGFjb3NoKGh1Z2UpPWxvZygyeCkgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh4ID09IDEuKSB7Ci0gICAgICAgIHJldHVybiAwLjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhY29zaCgxKSA9IDAgKi8KLSAgICB9Ci0gICAgZWxzZSBpZiAoeCA+IDIuKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyIDwgeCA8IDIqKjI4ICovCi0gICAgICAgIGRvdWJsZSB0ID0geCp4OwotICAgICAgICByZXR1cm4gbG9nKDIuMCp4IC0gMS4wIC8gKHggKyBzcXJ0KHQgLSAxLjApKSk7Ci0gICAgfQotICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPCB4IDw9IDIgKi8KLSAgICAgICAgZG91YmxlIHQgPSB4IC0gMS4wOwotICAgICAgICByZXR1cm4gbG9nMXAodCArIHNxcnQoMi4wKnQgKyB0KnQpKTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogSEFWRV9BQ09TSCAqLwotCi0vKiBhdGFuaCh4KQotICogTWV0aG9kIDoKLSAqICAgIDEuUmVkdWNlZCB4IHRvIHBvc2l0aXZlIGJ5IGF0YW5oKC14KSA9IC1hdGFuaCh4KQotICogICAgMi5Gb3IgeD49MC41Ci0gKiAgICAgICAgICAgICAgICAxICAgICAgICAgICAyeCAgICAgICAgICAgICAgICAgICAgICAgICAgeAotICogICAgICBhdGFuaCh4KSA9IC0tLSAqIGxvZygxICsgLS0tLS0tLSkgPSAwLjUgKiBsb2cxcCgyICogLS0tLS0tLS0pCi0gKiAgICAgICAgICAgICAgICAyICAgICAgICAgIDEgLSB4ICAgICAgICAgICAgICAgICAgICAxIC0geAotICoKLSAqICAgICAgRm9yIHg8MC41Ci0gKiAgICAgIGF0YW5oKHgpID0gMC41KmxvZzFwKDJ4KzJ4KngvKDEteCkpCi0gKgotICogU3BlY2lhbCBjYXNlczoKLSAqICAgICAgYXRhbmgoeCkgaXMgTmFOIGlmIHx4fCA+PSAxIHdpdGggc2lnbmFsOwotICogICAgICBhdGFuaChOYU4pIGlzIHRoYXQgTmFOIHdpdGggbm8gc2lnbmFsOwotICoKLSAqLwotCi0jaWZuZGVmIEhBVkVfQVRBTkgKLWRvdWJsZQotYXRhbmgoZG91YmxlIHgpCi17Ci0gICAgZG91YmxlIGFic3g7Ci0gICAgZG91YmxlIHQ7Ci0KLSAgICBpZiAoUHlfSVNfTkFOKHgpKSB7Ci0gICAgICAgIHJldHVybiB4K3g7Ci0gICAgfQorICAgIGRvdWJsZSBhYnN4LCB5OwogICAgIGFic3ggPSBmYWJzKHgpOwotICAgIGlmIChhYnN4ID49IDEuKSB7ICAgICAgICAgICAgICAgICAgIC8qIHx4fCA+PSAxICovCi0gICAgICAgIGVycm5vID0gRURPTTsKLSNpZmRlZiBQeV9OQU4KLSAgICAgICAgcmV0dXJuIFB5X05BTjsKLSNlbHNlCi0gICAgICAgIHJldHVybiB4L3plcm87Ci0jZW5kaWYKLSAgICB9Ci0gICAgaWYgKGFic3ggPCB0d29fcG93X20yOCkgeyAgICAgICAgICAgLyogfHh8IDwgMioqLTI4ICovCi0gICAgICAgIHJldHVybiB4OwotICAgIH0KLSAgICBpZiAoYWJzeCA8IDAuNSkgeyAgICAgICAgICAgICAgICAgICAvKiB8eHwgPCAwLjUgKi8KLSAgICAgICAgdCA9IGFic3grYWJzeDsKLSAgICAgICAgdCA9IDAuNSAqIGxvZzFwKHQgKyB0KmFic3ggLyAoMS4wIC0gYWJzeCkpOwotICAgIH0KLSAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwLjUgPD0gfHh8IDw9IDEuMCAqLwotICAgICAgICB0ID0gMC41ICogbG9nMXAoKGFic3ggKyBhYnN4KSAvICgxLjAgLSBhYnN4KSk7Ci0gICAgfQotICAgIHJldHVybiBjb3B5c2lnbih0LCB4KTsKKyAgICB5ID0gZmxvb3IoYWJzeCk7CisgICAgaWYgKGFic3ggLSB5ID49IDAuNSkKKyAgICB5ICs9IDEuMDsKKyAgICByZXR1cm4gY29weXNpZ24oeSwgeCk7CiB9Ci0jZW5kaWYgLyogSEFWRV9BVEFOSCAqLworI2VuZGlmIC8qIEhBVkVfUk9VTkQgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi9weXN0YXRlLmMgYi9QeXRob24vcHlzdGF0ZS5jCmluZGV4IDVhZmMwMWEuLmMwMTI3YmUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXN0YXRlLmMKKysrIGIvUHl0aG9uL3B5c3RhdGUuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiB0c3RhdGUgaXMgc3RpbGwgY3VycmVudCIpOwogICAgIHRzdGF0ZV9kZWxldGVfY29tbW9uKHRzdGF0ZSk7CiAjaWZkZWYgV0lUSF9USFJFQUQKLSAgICBpZiAoYXV0b1RMU2tleSAmJiBQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpID09IHRzdGF0ZSkKKyAgICBpZiAoYXV0b0ludGVycHJldGVyU3RhdGUgJiYgUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KSA9PSB0c3RhdGUpCiAgICAgICAgIFB5VGhyZWFkX2RlbGV0ZV9rZXlfdmFsdWUoYXV0b1RMU2tleSk7CiAjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KIH0KQEAgLTMxNCw3ICszMTQsNyBAQAogICAgICAgICAgICAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudDogbm8gY3VycmVudCB0c3RhdGUiKTsKICAgICBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50ID0gTlVMTDsKICAgICB0c3RhdGVfZGVsZXRlX2NvbW1vbih0c3RhdGUpOwotICAgIGlmIChhdXRvVExTa2V5ICYmIFB5VGhyZWFkX2dldF9rZXlfdmFsdWUoYXV0b1RMU2tleSkgPT0gdHN0YXRlKQorICAgIGlmIChhdXRvSW50ZXJwcmV0ZXJTdGF0ZSAmJiBQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpID09IHRzdGF0ZSkKICAgICAgICAgUHlUaHJlYWRfZGVsZXRlX2tleV92YWx1ZShhdXRvVExTa2V5KTsKICAgICBQeUV2YWxfUmVsZWFzZUxvY2soKTsKIH0KQEAgLTUzNCw3ICs1MzQsNiBAQAogX1B5R0lMU3RhdGVfRmluaSh2b2lkKQogewogICAgIFB5VGhyZWFkX2RlbGV0ZV9rZXkoYXV0b1RMU2tleSk7Ci0gICAgYXV0b1RMU2tleSA9IDA7CiAgICAgYXV0b0ludGVycHJldGVyU3RhdGUgPSBOVUxMOwogfQogCkBAIC01NDYsMTAgKzU0NSwxMCBAQAogc3RhdGljIHZvaWQKIF9QeUdJTFN0YXRlX05vdGVUaHJlYWRTdGF0ZShQeVRocmVhZFN0YXRlKiB0c3RhdGUpCiB7Ci0gICAgLyogSWYgYXV0b1RMU2tleSBpcyAwLCB0aGlzIG11c3QgYmUgdGhlIHZlcnkgZmlyc3QgdGhyZWFkc3RhdGUgY3JlYXRlZAotICAgICAgIGluIFB5X0luaXRpYWxpemUoKS4gIERvbid0IGRvIGFueXRoaW5nIGZvciBub3cgKHdlJ2xsIGJlIGJhY2sgaGVyZQotICAgICAgIHdoZW4gX1B5R0lMU3RhdGVfSW5pdCBpcyBjYWxsZWQpLiAqLwotICAgIGlmICghYXV0b1RMU2tleSkKKyAgICAvKiBJZiBhdXRvVExTa2V5IGlzbid0IGluaXRpYWxpemVkLCB0aGlzIG11c3QgYmUgdGhlIHZlcnkgZmlyc3QKKyAgICAgICB0aHJlYWRzdGF0ZSBjcmVhdGVkIGluIFB5X0luaXRpYWxpemUoKS4gIERvbid0IGRvIGFueXRoaW5nIGZvciBub3cKKyAgICAgICAod2UnbGwgYmUgYmFjayBoZXJlIHdoZW4gX1B5R0lMU3RhdGVfSW5pdCBpcyBjYWxsZWQpLiAqLworICAgIGlmICghYXV0b0ludGVycHJldGVyU3RhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8qIFN0aWNrIHRoZSB0aHJlYWQgc3RhdGUgZm9yIHRoaXMgdGhyZWFkIGluIHRocmVhZCBsb2NhbCBzdG9yYWdlLgpAQCAtNTc3LDcgKzU3Niw3IEBACiBQeVRocmVhZFN0YXRlICoKIFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKHZvaWQpCiB7Ci0gICAgaWYgKGF1dG9JbnRlcnByZXRlclN0YXRlID09IE5VTEwgfHwgYXV0b1RMU2tleSA9PSAwKQorICAgIGlmIChhdXRvSW50ZXJwcmV0ZXJTdGF0ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gKFB5VGhyZWFkU3RhdGUgKilQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5c3RydG9kLmMgYi9QeXRob24vcHlzdHJ0b2QuYwppbmRleCA5MDA0Y2Y0Li44NTlhZjQzIDEwMDY0NAotLS0gYS9QeXRob24vcHlzdHJ0b2QuYworKysgYi9QeXRob24vcHlzdHJ0b2QuYwpAQCAtMywxMSArMyw1OSBAQAogI2luY2x1ZGUgPFB5dGhvbi5oPgogI2luY2x1ZGUgPGxvY2FsZS5oPgogCi0vKiBhc2NpaSBjaGFyYWN0ZXIgdGVzdHMgKGFzIG9wcG9zZWQgdG8gbG9jYWxlIHRlc3RzKSAqLwotI2RlZmluZSBJU1NQQUNFKGMpICAoKGMpID09ICcgJyB8fCAoYykgPT0gJ1xmJyB8fCAoYykgPT0gJ1xuJyB8fCBcCi0gICAgICAgICAgICAgKGMpID09ICdccicgfHwgKGMpID09ICdcdCcgfHwgKGMpID09ICdcdicpCi0jZGVmaW5lIElTRElHSVQoYykgICgoYykgPj0gJzAnICYmIChjKSA8PSAnOScpCisvKiBDYXNlLWluc2Vuc2l0aXZlIHN0cmluZyBtYXRjaCB1c2VkIGZvciBuYW4gYW5kIGluZiBkZXRlY3Rpb247IHQgc2hvdWxkIGJlCisgICBsb3dlci1jYXNlLiAgUmV0dXJucyAxIGZvciBhIHN1Y2Nlc3NmdWwgbWF0Y2gsIDAgb3RoZXJ3aXNlLiAqLwogCitzdGF0aWMgaW50CitjYXNlX2luc2Vuc2l0aXZlX21hdGNoKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQpCit7CisgICAgd2hpbGUoKnQgJiYgUHlfVE9MT1dFUigqcykgPT0gKnQpIHsKKyAgICAgICAgcysrOworICAgICAgICB0Kys7CisgICAgfQorICAgIHJldHVybiAqdCA/IDAgOiAxOworfQorCisvKiBfUHlfcGFyc2VfaW5mX29yX25hbjogQXR0ZW1wdCB0byBwYXJzZSBhIHN0cmluZyBvZiB0aGUgZm9ybSAibmFuIiwgImluZiIgb3IKKyAgICJpbmZpbml0eSIsIHdpdGggYW4gb3B0aW9uYWwgbGVhZGluZyBzaWduIG9mICIrIiBvciAiLSIuICBPbiBzdWNjZXNzLAorICAgcmV0dXJuIHRoZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb3VibGUgYW5kIHNldCAqZW5kcHRyIHRvIHBvaW50IGp1c3QgYmV5b25kCisgICB0aGUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBwb3J0aW9uIG9mIHRoZSBzdHJpbmcuICBPbiBmYWlsdXJlLCByZXR1cm4gLTEuMCBhbmQKKyAgIHNldCAqZW5kcHRyIHRvIHBvaW50IHRvIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nLiAqLworCitkb3VibGUKK19QeV9wYXJzZV9pbmZfb3JfbmFuKGNvbnN0IGNoYXIgKnAsIGNoYXIgKiplbmRwdHIpCit7CisgICAgZG91YmxlIHJldHZhbDsKKyAgICBjb25zdCBjaGFyICpzOworICAgIGludCBuZWdhdGUgPSAwOworCisgICAgcyA9IHA7CisgICAgaWYgKCpzID09ICctJykgeworICAgICAgICBuZWdhdGUgPSAxOworICAgICAgICBzKys7CisgICAgfQorICAgIGVsc2UgaWYgKCpzID09ICcrJykgeworICAgICAgICBzKys7CisgICAgfQorICAgIGlmIChjYXNlX2luc2Vuc2l0aXZlX21hdGNoKHMsICJpbmYiKSkgeworICAgICAgICBzICs9IDM7CisgICAgICAgIGlmIChjYXNlX2luc2Vuc2l0aXZlX21hdGNoKHMsICJpbml0eSIpKQorICAgICAgICAgICAgcyArPSA1OworICAgICAgICByZXR2YWwgPSBuZWdhdGUgPyAtUHlfSFVHRV9WQUwgOiBQeV9IVUdFX1ZBTDsKKyAgICB9CisjaWZkZWYgUHlfTkFOCisgICAgZWxzZSBpZiAoY2FzZV9pbnNlbnNpdGl2ZV9tYXRjaChzLCAibmFuIikpIHsKKyAgICAgICAgcyArPSAzOworICAgICAgICByZXR2YWwgPSBuZWdhdGUgPyAtUHlfTkFOIDogUHlfTkFOOworICAgIH0KKyNlbmRpZgorICAgIGVsc2UgeworICAgICAgICBzID0gcDsKKyAgICAgICAgcmV0dmFsID0gLTEuMDsKKyAgICB9CisgICAgKmVuZHB0ciA9IChjaGFyICopczsKKyAgICByZXR1cm4gcmV0dmFsOworfQogCiAvKioKICAqIFB5T1NfYXNjaWlfc3RydG9kOgpAQCAtMzcsOCArODUsNDQgQEAKICAqCiAgKiBSZXR1cm4gdmFsdWU6IHRoZSAjZ2RvdWJsZSB2YWx1ZS4KICAqKi8KKworI2lmbmRlZiBQWV9OT19TSE9SVF9GTE9BVF9SRVBSCisKIGRvdWJsZQotUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKK19QeU9TX2FzY2lpX3N0cnRvZChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyKQoreworICAgIGRvdWJsZSByZXN1bHQ7CisgICAgX1B5X1NFVF81M0JJVF9QUkVDSVNJT05fSEVBREVSOworCisgICAgYXNzZXJ0KG5wdHIgIT0gTlVMTCk7CisgICAgLyogU2V0IGVycm5vIHRvIHplcm8sIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHplcm8gcmVzdWx0cworICAgICAgIGFuZCB1bmRlcmZsb3dzICovCisgICAgZXJybm8gPSAwOworCisgICAgX1B5X1NFVF81M0JJVF9QUkVDSVNJT05fU1RBUlQ7CisgICAgcmVzdWx0ID0gX1B5X2RnX3N0cnRvZChucHRyLCBlbmRwdHIpOworICAgIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0VORDsKKworICAgIGlmICgqZW5kcHRyID09IG5wdHIpCisgICAgICAgIC8qIHN0cmluZyBtaWdodCByZXByZXNlbnQgYW4gaW5mIG9yIG5hbiAqLworICAgICAgICByZXN1bHQgPSBfUHlfcGFyc2VfaW5mX29yX25hbihucHRyLCBlbmRwdHIpOworCisgICAgcmV0dXJuIHJlc3VsdDsKKworfQorCisjZWxzZQorCisvKgorICAgVXNlIHN5c3RlbSBzdHJ0b2Q7ICBzaW5jZSBzdHJ0b2QgaXMgbG9jYWxlIGF3YXJlLCB3ZSBtYXkKKyAgIGhhdmUgdG8gZmlyc3QgZml4IHRoZSBkZWNpbWFsIHNlcGFyYXRvci4KKworICAgTm90ZSB0aGF0IHVubGlrZSBfUHlfZGdfc3RydG9kLCB0aGUgc3lzdGVtIHN0cnRvZCBtYXkgbm90IGFsd2F5cyBnaXZlCisgICBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHRzLgorKi8KKworZG91YmxlCitfUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKIHsKICAgICBjaGFyICpmYWlsX3BvczsKICAgICBkb3VibGUgdmFsID0gLTEuMDsKQEAgLTYyLDg1ICsxNDYsNzkgQEAKIAogICAgIGRlY2ltYWxfcG9pbnRfcG9zID0gTlVMTDsKIAotICAgIC8qIFdlIHByb2Nlc3MgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgdGhlIG9wdGlvbmFsIHNpZ24gbWFudWFsbHksCi0gICAgICAgdGhlbiBwYXNzIHRoZSByZW1haW5kZXIgdG8gdGhlIHN5c3RlbSBzdHJ0b2QuICBUaGlzIGVuc3VyZXMgdGhhdAotICAgICAgIHRoZSByZXN1bHQgb2YgYW4gdW5kZXJmbG93IGhhcyB0aGUgY29ycmVjdCBzaWduLiAoYnVnICMxNzI1KSAgKi8KKyAgICAvKiBQYXJzZSBpbmZpbml0aWVzIGFuZCBuYW5zICovCisgICAgdmFsID0gX1B5X3BhcnNlX2luZl9vcl9uYW4obnB0ciwgZW5kcHRyKTsKKyAgICBpZiAoKmVuZHB0ciAhPSBucHRyKQorICAgICAgICByZXR1cm4gdmFsOwogCisgICAgLyogU2V0IGVycm5vIHRvIHplcm8sIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHplcm8gcmVzdWx0cworICAgICAgIGFuZCB1bmRlcmZsb3dzICovCisgICAgZXJybm8gPSAwOworCisgICAgLyogV2UgcHJvY2VzcyB0aGUgb3B0aW9uYWwgc2lnbiBtYW51YWxseSwgdGhlbiBwYXNzIHRoZSByZW1haW5kZXIgdG8KKyAgICAgICB0aGUgc3lzdGVtIHN0cnRvZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSByZXN1bHQgb2YgYW4gdW5kZXJmbG93CisgICAgICAgaGFzIHRoZSBjb3JyZWN0IHNpZ24uIChidWcgIzE3MjUpICAqLwogICAgIHAgPSBucHRyOwotICAgIC8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotICAgIHdoaWxlIChJU1NQQUNFKCpwKSkKLSAgICAgICAgcCsrOwotCiAgICAgLyogUHJvY2VzcyBsZWFkaW5nIHNpZ24sIGlmIHByZXNlbnQgKi8KICAgICBpZiAoKnAgPT0gJy0nKSB7CiAgICAgICAgIG5lZ2F0ZSA9IDE7CiAgICAgICAgIHArKzsKLSAgICB9IGVsc2UgaWYgKCpwID09ICcrJykgeworICAgIH0KKyAgICBlbHNlIGlmICgqcCA9PSAnKycpIHsKICAgICAgICAgcCsrOwogICAgIH0KIAotICAgIC8qIFdoYXQncyBsZWZ0IHNob3VsZCBiZWdpbiB3aXRoIGEgZGlnaXQsIGEgZGVjaW1hbCBwb2ludCwgb3Igb25lIG9mCi0gICAgICAgdGhlIGxldHRlcnMgaSwgSSwgbiwgTi4gSXQgc2hvdWxkIG5vdCBiZWdpbiB3aXRoIDB4IG9yIDBYICovCi0gICAgaWYgKCghSVNESUdJVCgqcCkgJiYKLSAgICAgICAgICpwICE9ICcuJyAmJiAqcCAhPSAnaScgJiYgKnAgIT0gJ0knICYmICpwICE9ICduJyAmJiAqcCAhPSAnTicpCi0gICAgICAgIHx8Ci0gICAgICAgICgqcCA9PSAnMCcgJiYgKHBbMV0gPT0gJ3gnIHx8IHBbMV0gPT0gJ1gnKSkpCi0gICAgewotICAgICAgICBpZiAoZW5kcHRyKQotICAgICAgICAgICAgKmVuZHB0ciA9IChjaGFyKilucHRyOwotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIHZhbDsKLSAgICB9Ci0gICAgZGlnaXRzX3BvcyA9IHA7CisgICAgLyogU29tZSBwbGF0Zm9ybSBzdHJ0b2RzIGFjY2VwdCBoZXggZmxvYXRzOyBQeXRob24gc2hvdWxkbid0IChhdCB0aGUKKyAgICAgICBtb21lbnQpLCBzbyB3ZSBjaGVjayBleHBsaWNpdGx5IGZvciBzdHJpbmdzIHN0YXJ0aW5nIHdpdGggJzB4Jy4gKi8KKyAgICBpZiAoKnAgPT0gJzAnICYmICgqKHArMSkgPT0gJ3gnIHx8ICoocCsxKSA9PSAnWCcpKQorICAgICAgICBnb3RvIGludmFsaWRfc3RyaW5nOwogCisgICAgLyogQ2hlY2sgdGhhdCB3aGF0J3MgbGVmdCBiZWdpbnMgd2l0aCBhIGRpZ2l0IG9yIGRlY2ltYWwgcG9pbnQgKi8KKyAgICBpZiAoIVB5X0lTRElHSVQoKnApICYmICpwICE9ICcuJykKKyAgICAgICAgZ290byBpbnZhbGlkX3N0cmluZzsKKworICAgIGRpZ2l0c19wb3MgPSBwOwogICAgIGlmIChkZWNpbWFsX3BvaW50WzBdICE9ICcuJyB8fAogICAgICAgICBkZWNpbWFsX3BvaW50WzFdICE9IDApCiAgICAgewotICAgICAgICB3aGlsZSAoSVNESUdJVCgqcCkpCisgICAgICAgIC8qIExvb2sgZm9yIGEgJy4nIGluIHRoZSBpbnB1dDsgaWYgcHJlc2VudCwgaXQnbGwgbmVlZCB0byBiZQorICAgICAgICAgICBzd2FwcGVkIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBkZWNpbWFsIHBvaW50IGJlZm9yZSB3ZQorICAgICAgICAgICBjYWxsIHN0cnRvZC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBmaW5kIHRoZSBjdXJyZW50CisgICAgICAgICAgIGxvY2FsZSdzIGRlY2ltYWwgcG9pbnQgdGhlbiB0aGUgaW5wdXQgaXMgaW52YWxpZC4gKi8KKyAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKnApKQogICAgICAgICAgICAgcCsrOwogCiAgICAgICAgIGlmICgqcCA9PSAnLicpCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlY2ltYWxfcG9pbnRfcG9zID0gcCsrOwogCi0gICAgICAgICAgICB3aGlsZSAoSVNESUdJVCgqcCkpCisgICAgICAgICAgICAvKiBsb2NhdGUgZW5kIG9mIG51bWJlciAqLworICAgICAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKnApKQogICAgICAgICAgICAgICAgIHArKzsKIAogICAgICAgICAgICAgaWYgKCpwID09ICdlJyB8fCAqcCA9PSAnRScpCiAgICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICAgaWYgKCpwID09ICcrJyB8fCAqcCA9PSAnLScpCiAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgd2hpbGUgKElTRElHSVQoKnApKQorICAgICAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKnApKQogICAgICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAgIGVuZCA9IHA7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc3RybmNtcChwLCBkZWNpbWFsX3BvaW50LCBkZWNpbWFsX3BvaW50X2xlbikgPT0gMCkKLSAgICAgICAgewogICAgICAgICAgICAgLyogUHl0aG9uIGJ1ZyAjMTQxNzY5OSAqLwotICAgICAgICAgICAgaWYgKGVuZHB0cikKLSAgICAgICAgICAgICAgICAqZW5kcHRyID0gKGNoYXIqKW5wdHI7Ci0gICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgICAgIHJldHVybiB2YWw7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gaW52YWxpZF9zdHJpbmc7CiAgICAgICAgIC8qIEZvciB0aGUgb3RoZXIgY2FzZXMsIHdlIG5lZWQgbm90IGNvbnZlcnQgdGhlIGRlY2ltYWwKICAgICAgICAgICAgcG9pbnQgKi8KICAgICB9CiAKLSAgICAvKiBTZXQgZXJybm8gdG8gemVybywgc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggemVybyByZXN1bHRzCi0gICAgICAgYW5kIHVuZGVyZmxvd3MgKi8KLSAgICBlcnJubyA9IDA7Ci0KLSAgICBpZiAoZGVjaW1hbF9wb2ludF9wb3MpCi0gICAgeworICAgIGlmIChkZWNpbWFsX3BvaW50X3BvcykgewogICAgICAgICBjaGFyICpjb3B5LCAqYzsKLQotICAgICAgICAvKiBXZSBuZWVkIHRvIGNvbnZlcnQgdGhlICcuJyB0byB0aGUgbG9jYWxlIHNwZWNpZmljIGRlY2ltYWwKLSAgICAgICAgICAgcG9pbnQgKi8KKyAgICAgICAgLyogQ3JlYXRlIGEgY29weSBvZiB0aGUgaW5wdXQsIHdpdGggdGhlICcuJyBjb252ZXJ0ZWQgdG8gdGhlCisgICAgICAgICAgIGxvY2FsZS1zcGVjaWZpYyBkZWNpbWFsIHBvaW50ICovCiAgICAgICAgIGNvcHkgPSAoY2hhciAqKVB5TWVtX01BTExPQyhlbmQgLSBkaWdpdHNfcG9zICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgKyBkZWNpbWFsX3BvaW50X2xlbik7CiAgICAgICAgIGlmIChjb3B5ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChlbmRwdHIpCi0gICAgICAgICAgICAgICAgKmVuZHB0ciA9IChjaGFyICopbnB0cjsKKyAgICAgICAgICAgICplbmRwdHIgPSAoY2hhciAqKW5wdHI7CiAgICAgICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgIH0KQEAgLTE3NiwxNSArMjU0LDExOSBAQAogICAgIH0KIAogICAgIGlmIChmYWlsX3BvcyA9PSBkaWdpdHNfcG9zKQotICAgICAgICBmYWlsX3BvcyA9IChjaGFyICopbnB0cjsKKyAgICAgICAgZ290byBpbnZhbGlkX3N0cmluZzsKIAogICAgIGlmIChuZWdhdGUgJiYgZmFpbF9wb3MgIT0gbnB0cikKICAgICAgICAgdmFsID0gLXZhbDsKLQotICAgIGlmIChlbmRwdHIpCi0gICAgICAgICplbmRwdHIgPSBmYWlsX3BvczsKKyAgICAqZW5kcHRyID0gZmFpbF9wb3M7CiAKICAgICByZXR1cm4gdmFsOworCisgIGludmFsaWRfc3RyaW5nOgorICAgICplbmRwdHIgPSAoY2hhciopbnB0cjsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gLTEuMDsKK30KKworI2VuZGlmCisKKy8qIFB5T1NfYXNjaWlfc3RydG9kIGlzIERFUFJFQ0FURUQgaW4gUHl0aG9uIDIuNyBhbmQgMy4xICovCisKK2RvdWJsZQorUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKK3sKKyAgICBjaGFyICpmYWlsX3BvczsKKyAgICBjb25zdCBjaGFyICpwOworICAgIGRvdWJsZSB4OworCisgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAiUHlPU19hc2NpaV9zdHJ0b2QgYW5kIFB5T1NfYXNjaWlfYXRvZiBhcmUgIgorICAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQuICBVc2UgUHlPU19zdHJpbmdfdG9fZG91YmxlICIKKyAgICAgICAgICAgICAgICAgICAgICJpbnN0ZWFkLiIsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xLjA7CisKKyAgICAvKiBfUHlPU19hc2NpaV9zdHJ0b2QgYWxyZWFkeSBkb2VzIGV2ZXJ5dGhpbmcgdGhhdCB3ZSB3YW50LAorICAgICAgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgcGFyc2UgbGVhZGluZyB3aGl0ZXNwYWNlICovCisgICAgcCA9IG5wdHI7CisgICAgd2hpbGUgKFB5X0lTU1BBQ0UoKnApKQorICAgICAgICBwKys7CisgICAgeCA9IF9QeU9TX2FzY2lpX3N0cnRvZChwLCAmZmFpbF9wb3MpOworICAgIGlmIChmYWlsX3BvcyA9PSBwKQorICAgICAgICBmYWlsX3BvcyA9IChjaGFyICopbnB0cjsKKyAgICBpZiAoZW5kcHRyKQorICAgICAgICAqZW5kcHRyID0gKGNoYXIgKilmYWlsX3BvczsKKyAgICByZXR1cm4geDsKK30KKworLyogUHlPU19hc2NpaV9zdHJ0b2QgaXMgREVQUkVDQVRFRCBpbiBQeXRob24gMi43IGFuZCAzLjEgKi8KKworZG91YmxlCitQeU9TX2FzY2lpX2F0b2YoY29uc3QgY2hhciAqbnB0cikKK3sKKyAgICByZXR1cm4gUHlPU19hc2NpaV9zdHJ0b2QobnB0ciwgTlVMTCk7Cit9CisKKy8qIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZSBpcyB0aGUgcmVjb21tZW5kZWQgcmVwbGFjZW1lbnQgZm9yIHRoZSBkZXByZWNhdGVkCisgICBQeU9TX2FzY2lpX3N0cnRvZCBhbmQgUHlPU19hc2NpaV9hdG9mIGZ1bmN0aW9ucy4gIEl0IGNvbnZlcnRzIGEKKyAgIG51bGwtdGVybWluYXRlZCBieXRlIHN0cmluZyBzIChpbnRlcnByZXRlZCBhcyBhIHN0cmluZyBvZiBBU0NJSSBjaGFyYWN0ZXJzKQorICAgdG8gYSBmbG9hdC4gIFRoZSBzdHJpbmcgc2hvdWxkIG5vdCBoYXZlIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSAoaW4KKyAgIGNvbnRyYXN0LCBQeU9TX2FzY2lpX3N0cnRvZCBhbGxvd3MgbGVhZGluZyB3aGl0ZXNwYWNlIGJ1dCBub3QgdHJhaWxpbmcKKyAgIHdoaXRlc3BhY2UpLiAgVGhlIGNvbnZlcnNpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLgorCisgICBJZiBlbmRwdHIgaXMgTlVMTCwgdHJ5IHRvIGNvbnZlcnQgdGhlIHdob2xlIHN0cmluZy4gIFJhaXNlIFZhbHVlRXJyb3IgYW5kCisgICByZXR1cm4gLTEuMCBpZiB0aGUgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIHJlcHJlc2VudGF0aW9uIG9mIGEgZmxvYXRpbmctcG9pbnQKKyAgIG51bWJlci4KKworICAgSWYgZW5kcHRyIGlzIG5vbi1OVUxMLCB0cnkgdG8gY29udmVydCBhcyBtdWNoIG9mIHRoZSBzdHJpbmcgYXMgcG9zc2libGUuCisgICBJZiBubyBpbml0aWFsIHNlZ21lbnQgb2YgdGhlIHN0cmluZyBpcyB0aGUgdmFsaWQgcmVwcmVzZW50YXRpb24gb2YgYQorICAgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRoZW4gKmVuZHB0ciBpcyBzZXQgdG8gcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgIHN0cmluZywgLTEuMCBpcyByZXR1cm5lZCBhbmQgYWdhaW4gVmFsdWVFcnJvciBpcyByYWlzZWQuCisKKyAgIE9uIG92ZXJmbG93IChlLmcuLCB3aGVuIHRyeWluZyB0byBjb252ZXJ0ICcxZTUwMCcgb24gYW4gSUVFRSA3NTQgbWFjaGluZSksCisgICBpZiBvdmVyZmxvd19leGNlcHRpb24gaXMgTlVMTCB0aGVuICstUHlfSFVHRV9WQUwgaXMgcmV0dXJuZWQsIGFuZCBubyBQeXRob24KKyAgIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBPdGhlcndpc2UsIG92ZXJmbG93X2V4Y2VwdGlvbiBzaG91bGQgcG9pbnQgdG8gYQorICAgYSBQeXRob24gZXhjZXB0aW9uLCB0aGlzIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCwgLTEuMCB3aWxsIGJlIHJldHVybmVkLAorICAgYW5kICplbmRwdHIgd2lsbCBwb2ludCBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgY29udmVydGVkIHZhbHVlLgorCisgICBJZiBhbnkgb3RoZXIgZmFpbHVyZSBvY2N1cnMgKGZvciBleGFtcGxlIGxhY2sgb2YgbWVtb3J5KSwgLTEuMCBpcyByZXR1cm5lZAorICAgYW5kIHRoZSBhcHByb3ByaWF0ZSBQeXRob24gZXhjZXB0aW9uIHdpbGwgaGF2ZSBiZWVuIHNldC4KKyovCisKK2RvdWJsZQorUHlPU19zdHJpbmdfdG9fZG91YmxlKGNvbnN0IGNoYXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmVuZHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqb3ZlcmZsb3dfZXhjZXB0aW9uKQoreworICAgIGRvdWJsZSB4LCByZXN1bHQ9LTEuMDsKKyAgICBjaGFyICpmYWlsX3BvczsKKworICAgIGVycm5vID0gMDsKKyAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJQeU9TX3N0cmluZ190b19kb3VibGUiLCByZXR1cm4gLTEuMCkKKyAgICB4ID0gX1B5T1NfYXNjaWlfc3RydG9kKHMsICZmYWlsX3Bvcyk7CisgICAgUHlGUEVfRU5EX1BST1RFQ1QoeCkKKworICAgIGlmIChlcnJubyA9PSBFTk9NRU0pIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZmFpbF9wb3MgPSAoY2hhciAqKXM7CisgICAgfQorICAgIGVsc2UgaWYgKCFlbmRwdHIgJiYgKGZhaWxfcG9zID09IHMgfHwgKmZhaWxfcG9zICE9ICdcMCcpKQorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIGZsb2F0OiAiCisgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcyIsIHMpOworICAgIGVsc2UgaWYgKGZhaWxfcG9zID09IHMpCisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8gZmxvYXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAiJS4yMDBzIiwgcyk7CisgICAgZWxzZSBpZiAoZXJybm8gPT0gRVJBTkdFICYmIGZhYnMoeCkgPj0gMS4wICYmIG92ZXJmbG93X2V4Y2VwdGlvbikKKyAgICAgICAgUHlFcnJfRm9ybWF0KG92ZXJmbG93X2V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgdG9vIGxhcmdlIHRvIGNvbnZlcnQgdG8gZmxvYXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAiJS4yMDBzIiwgcyk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSB4OworCisgICAgaWYgKGVuZHB0ciAhPSBOVUxMKQorICAgICAgICAqZW5kcHRyID0gZmFpbF9wb3M7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogR2l2ZW4gYSBzdHJpbmcgdGhhdCBtYXkgaGF2ZSBhIGRlY2ltYWwgcG9pbnQgaW4gdGhlIGN1cnJlbnQKQEAgLTIwMSw3ICszODMsNyBAQAogCiAgICAgICAgIGlmICgqYnVmZmVyID09ICcrJyB8fCAqYnVmZmVyID09ICctJykKICAgICAgICAgICAgIGJ1ZmZlcisrOwotICAgICAgICB3aGlsZSAoaXNkaWdpdChQeV9DSEFSTUFTSygqYnVmZmVyKSkpCisgICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCpidWZmZXIpKQogICAgICAgICAgICAgYnVmZmVyKys7CiAgICAgICAgIGlmIChzdHJuY21wKGJ1ZmZlciwgZGVjaW1hbF9wb2ludCwgZGVjaW1hbF9wb2ludF9sZW4pID09IDApIHsKICAgICAgICAgICAgICpidWZmZXIgPSAnLic7CkBAIC0yNDQsNyArNDI2LDcgQEAKIAogICAgICAgICAvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIGV4cG9uZW50LCBrZWVwaW5nIHRyYWNrIG9mIGxlYWRpbmcKICAgICAgICAgICAgemVyb3MuICovCi0gICAgICAgIHdoaWxlICgqcCAmJiBpc2RpZ2l0KFB5X0NIQVJNQVNLKCpwKSkpIHsKKyAgICAgICAgd2hpbGUgKCpwICYmIFB5X0lTRElHSVQoKnApKSB7CiAgICAgICAgICAgICBpZiAoaW5fbGVhZGluZ196ZXJvcyAmJiAqcCA9PSAnMCcpCiAgICAgICAgICAgICAgICAgKytsZWFkaW5nX3plcm9fY250OwogICAgICAgICAgICAgaWYgKCpwICE9ICcwJykKQEAgLTI5MiwxMyArNDc0LDYxIEBACiAgICAgfQogfQogCi0vKiBFbnN1cmUgdGhhdCBidWZmZXIgaGFzIGEgZGVjaW1hbCBwb2ludCBpbiBpdC4gIFRoZSBkZWNpbWFsIHBvaW50Ci0gICB3aWxsIG5vdCBiZSBpbiB0aGUgY3VycmVudCBsb2NhbGUsIGl0IHdpbGwgYWx3YXlzIGJlICcuJyAqLworLyogUmVtb3ZlIHRyYWlsaW5nIHplcm9zIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGZyb20gYSBudW1lcmljIHN0cmluZzsgYWxzbworICAgcmVtb3ZlIHRoZSBkZWNpbWFsIHBvaW50IGlmIGFsbCBkaWdpdHMgZm9sbG93aW5nIGl0IGFyZSB6ZXJvLiAgVGhlIG51bWVyaWMKKyAgIHN0cmluZyBtdXN0IGVuZCBpbiAnXDAnLCBhbmQgc2hvdWxkIG5vdCBoYXZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nCisgICB3aGl0ZXNwYWNlLiAgQXNzdW1lcyB0aGF0IHRoZSBkZWNpbWFsIHBvaW50IGlzICcuJy4gKi8KIFB5X0xPQ0FMX0lOTElORSh2b2lkKQotZW5zdXJlX2RlY2ltYWxfcG9pbnQoY2hhciogYnVmZmVyLCBzaXplX3QgYnVmX3NpemUpCityZW1vdmVfdHJhaWxpbmdfemVyb3MoY2hhciAqYnVmZmVyKQogewotICAgIGludCBpbnNlcnRfY291bnQgPSAwOwotICAgIGNoYXIqIGNoYXJzX3RvX2luc2VydDsKKyAgICBjaGFyICpvbGRfZnJhY3Rpb25fZW5kLCAqbmV3X2ZyYWN0aW9uX2VuZCwgKmVuZCwgKnA7CisKKyAgICBwID0gYnVmZmVyOworICAgIGlmICgqcCA9PSAnLScgfHwgKnAgPT0gJysnKQorICAgICAgICAvKiBTa2lwIGxlYWRpbmcgc2lnbiwgaWYgcHJlc2VudCAqLworICAgICAgICArK3A7CisgICAgd2hpbGUgKFB5X0lTRElHSVQoKnApKQorICAgICAgICArK3A7CisKKyAgICAvKiBpZiB0aGVyZSdzIG5vIGRlY2ltYWwgcG9pbnQgdGhlcmUncyBub3RoaW5nIHRvIGRvICovCisgICAgaWYgKCpwKysgIT0gJy4nKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBzY2FuIGFueSBkaWdpdHMgYWZ0ZXIgdGhlIHBvaW50ICovCisgICAgd2hpbGUgKFB5X0lTRElHSVQoKnApKQorICAgICAgICArK3A7CisgICAgb2xkX2ZyYWN0aW9uX2VuZCA9IHA7CisKKyAgICAvKiBzY2FuIHVwIHRvIGVuZGluZyAnXDAnICovCisgICAgd2hpbGUgKCpwICE9ICdcMCcpCisgICAgICAgIHArKzsKKyAgICAvKiArMSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBtb3ZlIHRoZSBudWxsIGJ5dGUgYXMgd2VsbCAqLworICAgIGVuZCA9IHArMTsKKworICAgIC8qIHNjYW4gYmFjayBmcm9tIGZyYWN0aW9uX2VuZCwgbG9va2luZyBmb3IgcmVtb3ZhYmxlIHplcm9zICovCisgICAgcCA9IG9sZF9mcmFjdGlvbl9lbmQ7CisgICAgd2hpbGUgKCoocC0xKSA9PSAnMCcpCisgICAgICAgIC0tcDsKKyAgICAvKiBhbmQgcmVtb3ZlIHBvaW50IGlmIHdlJ3ZlIGdvdCB0aGF0IGZhciAqLworICAgIGlmICgqKHAtMSkgPT0gJy4nKQorICAgICAgICAtLXA7CisgICAgbmV3X2ZyYWN0aW9uX2VuZCA9IHA7CisKKyAgICBtZW1tb3ZlKG5ld19mcmFjdGlvbl9lbmQsIG9sZF9mcmFjdGlvbl9lbmQsIGVuZC1vbGRfZnJhY3Rpb25fZW5kKTsKK30KKworLyogRW5zdXJlIHRoYXQgYnVmZmVyIGhhcyBhIGRlY2ltYWwgcG9pbnQgaW4gaXQuICBUaGUgZGVjaW1hbCBwb2ludCB3aWxsIG5vdAorICAgYmUgaW4gdGhlIGN1cnJlbnQgbG9jYWxlLCBpdCB3aWxsIGFsd2F5cyBiZSAnLicuIERvbid0IGFkZCBhIGRlY2ltYWwgcG9pbnQKKyAgIGlmIGFuIGV4cG9uZW50IGlzIHByZXNlbnQuICBBbHNvLCBjb252ZXJ0IHRvIGV4cG9uZW50aWFsIG5vdGF0aW9uIHdoZXJlCisgICBhZGRpbmcgYSAnLjAnIHdvdWxkIHByb2R1Y2UgdG9vIG1hbnkgc2lnbmlmaWNhbnQgZGlnaXRzIChzZWUgaXNzdWUgNTg2NCkuCisKKyAgIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXhlZCBidWZmZXIsIG9yIE5VTEwgb24gZmFpbHVyZS4KKyovCitQeV9MT0NBTF9JTkxJTkUoY2hhciAqKQorZW5zdXJlX2RlY2ltYWxfcG9pbnQoY2hhciogYnVmZmVyLCBzaXplX3QgYnVmX3NpemUsIGludCBwcmVjaXNpb24pCit7CisgICAgaW50IGRpZ2l0X2NvdW50LCBpbnNlcnRfY291bnQgPSAwLCBjb252ZXJ0X3RvX2V4cCA9IDA7CisgICAgY2hhciAqY2hhcnNfdG9faW5zZXJ0LCAqZGlnaXRzX3N0YXJ0OwogCiAgICAgLyogc2VhcmNoIGZvciB0aGUgZmlyc3Qgbm9uLWRpZ2l0IGNoYXJhY3RlciAqLwogICAgIGNoYXIgKnAgPSBidWZmZXI7CkBAIC0zMDYsMjUgKzUzNiw0NCBAQAogICAgICAgICAvKiBTa2lwIGxlYWRpbmcgc2lnbiwgaWYgcHJlc2VudC4gIEkgdGhpbmsgdGhpcyBjb3VsZCBvbmx5CiAgICAgICAgICAgIGV2ZXIgYmUgJy0nLCBidXQgaXQgY2FuJ3QgaHVydCB0byBjaGVjayBmb3IgYm90aC4gKi8KICAgICAgICAgKytwOwotICAgIHdoaWxlICgqcCAmJiBpc2RpZ2l0KFB5X0NIQVJNQVNLKCpwKSkpCisgICAgZGlnaXRzX3N0YXJ0ID0gcDsKKyAgICB3aGlsZSAoKnAgJiYgUHlfSVNESUdJVCgqcCkpCiAgICAgICAgICsrcDsKKyAgICBkaWdpdF9jb3VudCA9IFB5X1NBRkVfRE9XTkNBU1QocCAtIGRpZ2l0c19zdGFydCwgUHlfc3NpemVfdCwgaW50KTsKIAogICAgIGlmICgqcCA9PSAnLicpIHsKLSAgICAgICAgaWYgKGlzZGlnaXQoUHlfQ0hBUk1BU0soKihwKzEpKSkpIHsKKyAgICAgICAgaWYgKFB5X0lTRElHSVQoKihwKzEpKSkgewogICAgICAgICAgICAgLyogTm90aGluZyB0byBkbywgd2UgYWxyZWFkeSBoYXZlIGEgZGVjaW1hbAogICAgICAgICAgICAgICAgcG9pbnQgYW5kIGEgZGlnaXQgYWZ0ZXIgaXQgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qIFdlIGhhdmUgYSBkZWNpbWFsIHBvaW50LCBidXQgbm8gZm9sbG93aW5nCiAgICAgICAgICAgICAgICBkaWdpdC4gIEluc2VydCBhIHplcm8gYWZ0ZXIgdGhlIGRlY2ltYWwuICovCisgICAgICAgICAgICAvKiBjYW4ndCBldmVyIGdldCBoZXJlIHZpYSBQeU9TX2RvdWJsZV90b19zdHJpbmcgKi8KKyAgICAgICAgICAgIGFzc2VydChwcmVjaXNpb24gPT0gLTEpOwogICAgICAgICAgICAgKytwOwogICAgICAgICAgICAgY2hhcnNfdG9faW5zZXJ0ID0gIjAiOwogICAgICAgICAgICAgaW5zZXJ0X2NvdW50ID0gMTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgY2hhcnNfdG9faW5zZXJ0ID0gIi4wIjsKLSAgICAgICAgaW5zZXJ0X2NvdW50ID0gMjsKKyAgICBlbHNlIGlmICghKCpwID09ICdlJyB8fCAqcCA9PSAnRScpKSB7CisgICAgICAgIC8qIERvbid0IGFkZCAiLjAiIGlmIHdlIGhhdmUgYW4gZXhwb25lbnQuICovCisgICAgICAgIGlmIChkaWdpdF9jb3VudCA9PSBwcmVjaXNpb24pIHsKKyAgICAgICAgICAgIC8qIGlzc3VlIDU4NjQ6IGRvbid0IGFkZCBhIHRyYWlsaW5nIC4wIGluIHRoZSBjYXNlCisgICAgICAgICAgICAgICB3aGVyZSB0aGUgJyVnJy1mb3JtYXR0ZWQgcmVzdWx0IGFscmVhZHkgaGFzIGFzIG1hbnkKKyAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhcyB3ZXJlIHJlcXVlc3RlZC4gIFN3aXRjaCB0bworICAgICAgICAgICAgICAgZXhwb25lbnRpYWwgbm90YXRpb24gaW5zdGVhZC4gKi8KKyAgICAgICAgICAgIGNvbnZlcnRfdG9fZXhwID0gMTsKKyAgICAgICAgICAgIC8qIG5vIGV4cG9uZW50LCBubyBwb2ludCwgYW5kIHdlIHNob3VsZG4ndCBsYW5kIGhlcmUKKyAgICAgICAgICAgICAgIGZvciBpbmZzIGFuZCBuYW5zLCBzbyB3ZSBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICBzdHJpbmcuICovCisgICAgICAgICAgICBhc3NlcnQoKnAgPT0gJ1wwJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQocHJlY2lzaW9uID09IC0xIHx8IGRpZ2l0X2NvdW50IDwgcHJlY2lzaW9uKTsKKyAgICAgICAgICAgIGNoYXJzX3RvX2luc2VydCA9ICIuMCI7CisgICAgICAgICAgICBpbnNlcnRfY291bnQgPSAyOworICAgICAgICB9CiAgICAgfQogICAgIGlmIChpbnNlcnRfY291bnQpIHsKICAgICAgICAgc2l6ZV90IGJ1Zl9sZW4gPSBzdHJsZW4oYnVmZmVyKTsKQEAgLTMzOSwzNyArNTg4LDMwIEBACiAgICAgICAgICAgICBtZW1jcHkocCwgY2hhcnNfdG9faW5zZXJ0LCBpbnNlcnRfY291bnQpOwogICAgICAgICB9CiAgICAgfQotfQotCi0vKiBBZGQgdGhlIGxvY2FsZSBzcGVjaWZpYyBncm91cGluZyBjaGFyYWN0ZXJzIHRvIGJ1ZmZlci4gIE5vdGUKLSAgIHRoYXQgYW55IGRlY2ltYWwgcG9pbnQgKGlmIGl0J3MgcHJlc2VudCkgaW4gYnVmZmVyIGlzIGFscmVhZHkKLSAgIGxvY2FsZS1zcGVjaWZpYy4gIFJldHVybiAwIG9uIGVycm9yLCBlbHNlIDEuICovCi1QeV9MT0NBTF9JTkxJTkUoaW50KQotYWRkX3Rob3VzYW5kc19ncm91cGluZyhjaGFyKiBidWZmZXIsIHNpemVfdCBidWZfc2l6ZSkKLXsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IHN0cmxlbihidWZmZXIpOwotICAgIHN0cnVjdCBsY29udiAqbG9jYWxlX2RhdGEgPSBsb2NhbGVjb252KCk7Ci0gICAgY29uc3QgY2hhciAqZGVjaW1hbF9wb2ludCA9IGxvY2FsZV9kYXRhLT5kZWNpbWFsX3BvaW50OwotCi0gICAgLyogRmluZCB0aGUgZGVjaW1hbCBwb2ludCwgaWYgYW55LiAgV2UncmUgb25seSBjb25jZXJuZWQKLSAgICAgICBhYm91dCB0aGUgY2hhcmFjdGVycyB0byB0aGUgbGVmdCBvZiB0aGUgZGVjaW1hbCB3aGVuCi0gICAgICAgYWRkaW5nIGdyb3VwaW5nLiAqLwotICAgIGNoYXIgKnAgPSBzdHJzdHIoYnVmZmVyLCBkZWNpbWFsX3BvaW50KTsKLSAgICBpZiAoIXApIHsKLSAgICAgICAgLyogTm8gZGVjaW1hbCwgdXNlIHRoZSBlbnRpcmUgc3RyaW5nLiAqLwotCi0gICAgICAgIC8qIElmIGFueSBleHBvbmVudCwgYWRqdXN0IHAuICovCi0gICAgICAgIHAgPSBzdHJwYnJrKGJ1ZmZlciwgImVFIik7Ci0gICAgICAgIGlmICghcCkKLSAgICAgICAgICAgIC8qIE5vIGV4cG9uZW50IGFuZCBubyBkZWNpbWFsLiAgVXNlIHRoZSBlbnRpcmUKLSAgICAgICAgICAgICAgIHN0cmluZy4gKi8KLSAgICAgICAgICAgIHAgPSBidWZmZXIgKyBsZW47CisgICAgaWYgKGNvbnZlcnRfdG9fZXhwKSB7CisgICAgICAgIGludCB3cml0dGVuOworICAgICAgICBzaXplX3QgYnVmX2F2YWlsOworICAgICAgICBwID0gZGlnaXRzX3N0YXJ0OworICAgICAgICAvKiBpbnNlcnQgZGVjaW1hbCBwb2ludCAqLworICAgICAgICBhc3NlcnQoZGlnaXRfY291bnQgPj0gMSk7CisgICAgICAgIG1lbW1vdmUocCsyLCBwKzEsIGRpZ2l0X2NvdW50KTsgLyogc2FmZSwgYnV0IG92ZXJ3cml0ZXMgbnVsICovCisgICAgICAgIHBbMV0gPSAnLic7CisgICAgICAgIHAgKz0gZGlnaXRfY291bnQrMTsKKyAgICAgICAgYXNzZXJ0KHAgPD0gYnVmX3NpemUrYnVmZmVyKTsKKyAgICAgICAgYnVmX2F2YWlsID0gYnVmX3NpemUrYnVmZmVyLXA7CisgICAgICAgIGlmIChidWZfYXZhaWwgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAvKiBBZGQgZXhwb25lbnQuICBJdCdzIG9rYXkgdG8gdXNlIGxvd2VyIGNhc2UgJ2UnOiB3ZSBvbmx5CisgICAgICAgICAgIGFycml2ZSBoZXJlIGFzIGEgcmVzdWx0IG9mIHVzaW5nIHRoZSBlbXB0eSBmb3JtYXQgY29kZSBvcgorICAgICAgICAgICByZXByL3N0ciBidWlsdGlucyBhbmQgdGhvc2UgbmV2ZXIgd2FudCBhbiB1cHBlciBjYXNlICdFJyAqLworICAgICAgICB3cml0dGVuID0gUHlPU19zbnByaW50ZihwLCBidWZfYXZhaWwsICJlJSsuMDJkIiwgZGlnaXRfY291bnQtMSk7CisgICAgICAgIGlmICghKDAgPD0gd3JpdHRlbiAmJgorICAgICAgICAgICAgICB3cml0dGVuIDwgUHlfU0FGRV9ET1dOQ0FTVChidWZfYXZhaWwsIHNpemVfdCwgaW50KSkpCisgICAgICAgICAgICAvKiBvdXRwdXQgdHJ1bmNhdGVkLCBvciBzb21ldGhpbmcgZWxzZSBiYWQgaGFwcGVuZWQgKi8KKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZW1vdmVfdHJhaWxpbmdfemVyb3MoYnVmZmVyKTsKICAgICB9Ci0gICAgLyogQXQgdGhpcyBwb2ludCwgcCBwb2ludHMganVzdCBwYXN0IHRoZSByaWdodC1tb3N0IGNoYXJhY3RlciB3ZQotICAgICAgIHdhbnQgdG8gZm9ybWF0LiAgV2UgbmVlZCB0byBhZGQgdGhlIGdyb3VwaW5nIHN0cmluZyBmb3IgdGhlCi0gICAgICAgY2hhcmFjdGVycyBiZXR3ZWVuIGJ1ZmZlciBhbmQgcC4gKi8KLSAgICByZXR1cm4gX1B5U3RyaW5nX0luc2VydFRob3VzYW5kc0dyb3VwaW5nKGJ1ZmZlciwgbGVuLCBwLWJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zl9zaXplLCBOVUxMLCAxKTsKKyAgICByZXR1cm4gYnVmZmVyOwogfQogCiAvKiBzZWUgRk9STUFUQlVGTEVOIGluIHVuaWNvZGVvYmplY3QuYyAqLwpAQCAtMzg2LDI4ICs2MjgsMjQgQEAKICAqIENvbnZlcnRzIGEgI2dkb3VibGUgdG8gYSBzdHJpbmcsIHVzaW5nIHRoZSAnLicgYXMKICAqIGRlY2ltYWwgcG9pbnQuIFRvIGZvcm1hdCB0aGUgbnVtYmVyIHlvdSBwYXNzIGluCiAgKiBhIHByaW50ZigpLXN0eWxlIGZvcm1hdCBzdHJpbmcuIEFsbG93ZWQgY29udmVyc2lvbgotICogc3BlY2lmaWVycyBhcmUgJ2UnLCAnRScsICdmJywgJ0YnLCAnZycsICdHJywgYW5kICduJy4KKyAqIHNwZWNpZmllcnMgYXJlICdlJywgJ0UnLCAnZicsICdGJywgJ2cnLCAnRycsIGFuZCAnWicuCiAgKgotICogJ24nIGlzIHRoZSBzYW1lIGFzICdnJywgZXhjZXB0IGl0IHVzZXMgdGhlIGN1cnJlbnQgbG9jYWxlLgogICogJ1onIGlzIHRoZSBzYW1lIGFzICdnJywgZXhjZXB0IGl0IGFsd2F5cyBoYXMgYSBkZWNpbWFsIGFuZAogICogICAgIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciB0aGUgZGVjaW1hbC4KICAqCiAgKiBSZXR1cm4gdmFsdWU6IFRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2l0aCB0aGUgY29udmVydGVkIHN0cmluZy4KKyAqIE9uIGZhaWx1cmUgcmV0dXJucyBOVUxMIGJ1dCBkb2VzIG5vdCBzZXQgYW55IFB5dGhvbiBleGNlcHRpb24uCiAgKiovCiBjaGFyICoKLVB5T1NfYXNjaWlfZm9ybWF0ZChjaGFyICAgICAgICpidWZmZXIsCitfUHlPU19hc2NpaV9mb3JtYXRkKGNoYXIgICAgICAgKmJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICBidWZfc2l6ZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgZG91YmxlICAgICAgZCkKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgICAgICBkLAorICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIHByZWNpc2lvbikKIHsKICAgICBjaGFyIGZvcm1hdF9jaGFyOwogICAgIHNpemVfdCBmb3JtYXRfbGVuID0gc3RybGVuKGZvcm1hdCk7CiAKLSAgICAvKiBGb3IgdHlwZSAnbicsIHdlIG5lZWQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGJlY2F1c2UKLSAgICAgICB3ZSdyZSBnb2luZyB0byBtb2RpZnkgJ24nIC0+ICdnJywgYW5kIGZvcm1hdCBpcyBjb25zdCBjaGFyKiwgc28gd2UKLSAgICAgICBjYW4ndCBtb2RpZnkgaXQgZGlyZWN0bHkuICBGTE9BVF9GT1JNQVRCVUZMRU4gc2hvdWxkIGJlIGxvbmdlciB0aGFuCi0gICAgICAgd2UgZXZlciBuZWVkIHRoaXMgdG8gYmUuICBUaGVyZSdzIGFuIHVwY29taW5nIGNoZWNrIHRvIGVuc3VyZSBpdCdzCi0gICAgICAgYmlnIGVub3VnaC4gKi8KICAgICAvKiBJc3N1ZSAyMjY0OiBjb2RlICdaJyByZXF1aXJlcyBjb3B5aW5nIHRoZSBmb3JtYXQuICAnWicgaXMgJ2cnLCBidXQKICAgICAgICBhbHNvIHdpdGggYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBwYXN0IHRoZSBkZWNpbWFsLiAqLwogICAgIGNoYXIgdG1wX2Zvcm1hdFtGTE9BVF9GT1JNQVRCVUZMRU5dOwpAQCAtNDMzLDEyICs2NzEsMTIgQEAKICAgICBpZiAoIShmb3JtYXRfY2hhciA9PSAnZScgfHwgZm9ybWF0X2NoYXIgPT0gJ0UnIHx8CiAgICAgICAgICAgZm9ybWF0X2NoYXIgPT0gJ2YnIHx8IGZvcm1hdF9jaGFyID09ICdGJyB8fAogICAgICAgICAgIGZvcm1hdF9jaGFyID09ICdnJyB8fCBmb3JtYXRfY2hhciA9PSAnRycgfHwKLSAgICAgICAgICBmb3JtYXRfY2hhciA9PSAnbicgfHwgZm9ybWF0X2NoYXIgPT0gJ1onKSkKKyAgICAgICAgICBmb3JtYXRfY2hhciA9PSAnWicpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIE1hcCAnbicgb3IgJ1onIGZvcm1hdF9jaGFyIHRvICdnJywgYnkgY29weWluZyB0aGUgZm9ybWF0IHN0cmluZyBhbmQKKyAgICAvKiBNYXAgJ1onIGZvcm1hdF9jaGFyIHRvICdnJywgYnkgY29weWluZyB0aGUgZm9ybWF0IHN0cmluZyBhbmQKICAgICAgICByZXBsYWNpbmcgdGhlIGZpbmFsIGNoYXIgd2l0aCBhICdnJyAqLwotICAgIGlmIChmb3JtYXRfY2hhciA9PSAnbicgfHwgZm9ybWF0X2NoYXIgPT0gJ1onKSB7CisgICAgaWYgKGZvcm1hdF9jaGFyID09ICdaJykgewogICAgICAgICBpZiAoZm9ybWF0X2xlbiArIDEgPj0gc2l6ZW9mKHRtcF9mb3JtYXQpKSB7CiAgICAgICAgICAgICAvKiBUaGUgZm9ybWF0IHdvbid0IGZpdCBpbiBvdXIgY29weS4gIEVycm9yIG91dC4gIEluCiAgICAgICAgICAgICAgICBwcmFjdGljZSwgdGhpcyB3aWxsIG5ldmVyIGhhcHBlbiBhbmQgd2lsbCBiZQpAQCAtNDU3LDExICs2OTUsOCBAQAogICAgIC8qIERvIHZhcmlvdXMgZml4dXBzIG9uIHRoZSByZXR1cm4gc3RyaW5nICovCiAKICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgbG9jYWxlLCBhbmQgZmluZCB0aGUgZGVjaW1hbCBwb2ludCBzdHJpbmcuCi0gICAgICAgQ29udmVydCB0aGF0IHN0cmluZyBiYWNrIHRvIGEgZG90LiAgRG8gbm90IGRvIHRoaXMgaWYgdXNpbmcgdGhlCi0gICAgICAgJ24nIChudW1iZXIpIGZvcm1hdCBjb2RlLCBzaW5jZSB3ZSB3YW50IHRvIGtlZXAgdGhlIGxvY2FsaXplZAotICAgICAgIGRlY2ltYWwgcG9pbnQgaW4gdGhhdCBjYXNlLiAqLwotICAgIGlmIChmb3JtYXRfY2hhciAhPSAnbicpCi0gICAgICAgIGNoYW5nZV9kZWNpbWFsX2Zyb21fbG9jYWxlX3RvX2RvdChidWZmZXIpOworICAgICAgIENvbnZlcnQgdGhhdCBzdHJpbmcgYmFjayB0byBhIGRvdC4gKi8KKyAgICBjaGFuZ2VfZGVjaW1hbF9mcm9tX2xvY2FsZV90b19kb3QoYnVmZmVyKTsKIAogICAgIC8qIElmIGFuIGV4cG9uZW50IGV4aXN0cywgZW5zdXJlIHRoYXQgdGhlIGV4cG9uZW50IGlzIGF0IGxlYXN0CiAgICAgICAgTUlOX0VYUE9ORU5UX0RJR0lUUyBkaWdpdHMsIHByb3ZpZGluZyB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaApAQCAtNDcxLDIwICs3MDYsNTQ0IEBACiAgICAgZW5zdXJlX21pbmltdW1fZXhwb25lbnRfbGVuZ3RoKGJ1ZmZlciwgYnVmX3NpemUpOwogCiAgICAgLyogSWYgZm9ybWF0X2NoYXIgaXMgJ1onLCBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyCi0gICAgICAgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgKGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIGRlY2ltYWwgcG9pbnQpLiAqLworICAgICAgIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IChhbmQgbWFrZSBzdXJlIHdlIGhhdmUgYSBkZWNpbWFsIHBvaW50KTsKKyAgICAgICBhbHNvIHN3aXRjaCB0byBleHBvbmVudGlhbCBub3RhdGlvbiBpbiBzb21lIGVkZ2UgY2FzZXMgd2hlcmUgdGhlCisgICAgICAgZXh0cmEgY2hhcmFjdGVyIHdvdWxkIHByb2R1Y2UgbW9yZSBzaWduaWZpY2FudCBkaWdpdHMgdGhhdCB3ZQorICAgICAgIHJlYWxseSB3YW50LiAqLwogICAgIGlmIChmb3JtYXRfY2hhciA9PSAnWicpCi0gICAgICAgIGVuc3VyZV9kZWNpbWFsX3BvaW50KGJ1ZmZlciwgYnVmX3NpemUpOwotCi0gICAgLyogSWYgZm9ybWF0X2NoYXIgaXMgJ24nLCBhZGQgdGhlIHRob3VzYW5kcyBncm91cGluZy4gKi8KLSAgICBpZiAoZm9ybWF0X2NoYXIgPT0gJ24nKQotICAgICAgICBpZiAoIWFkZF90aG91c2FuZHNfZ3JvdXBpbmcoYnVmZmVyLCBidWZfc2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnVmZmVyID0gZW5zdXJlX2RlY2ltYWxfcG9pbnQoYnVmZmVyLCBidWZfc2l6ZSwgcHJlY2lzaW9uKTsKIAogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLWRvdWJsZQotUHlPU19hc2NpaV9hdG9mKGNvbnN0IGNoYXIgKm5wdHIpCitjaGFyICoKK1B5T1NfYXNjaWlfZm9ybWF0ZChjaGFyICAgICAgICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgIGRvdWJsZSAgICAgIGQpCiB7Ci0gICAgcmV0dXJuIFB5T1NfYXNjaWlfc3RydG9kKG5wdHIsIE5VTEwpOworICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgIlB5T1NfYXNjaWlfZm9ybWF0ZCBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAgICAgICAgICAidXNlIFB5T1NfZG91YmxlX3RvX3N0cmluZyBpbnN0ZWFkIiwgMSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBfUHlPU19hc2NpaV9mb3JtYXRkKGJ1ZmZlciwgYnVmX3NpemUsIGZvcm1hdCwgZCwgLTEpOwogfQorCisjaWZkZWYgUFlfTk9fU0hPUlRfRkxPQVRfUkVQUgorCisvKiBUaGUgZmFsbGJhY2sgY29kZSB0byB1c2UgaWYgX1B5X2RnX2R0b2EgaXMgbm90IGF2YWlsYWJsZS4gKi8KKworUHlBUElfRlVOQyhjaGFyICopIFB5T1NfZG91YmxlX3RvX3N0cmluZyhkb3VibGUgdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGZvcm1hdF9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdHlwZSkKK3sKKyAgICBjaGFyIGZvcm1hdFszMl07CisgICAgUHlfc3NpemVfdCBidWZzaXplOworICAgIGNoYXIgKmJ1ZjsKKyAgICBpbnQgdCwgZXhwOworICAgIGludCB1cHBlciA9IDA7CisKKyAgICAvKiBWYWxpZGF0ZSBmb3JtYXRfY29kZSwgYW5kIG1hcCB1cHBlciBhbmQgbG93ZXIgY2FzZSAqLworICAgIHN3aXRjaCAoZm9ybWF0X2NvZGUpIHsKKyAgICBjYXNlICdlJzogICAgICAgICAgLyogZXhwb25lbnQgKi8KKyAgICBjYXNlICdmJzogICAgICAgICAgLyogZml4ZWQgKi8KKyAgICBjYXNlICdnJzogICAgICAgICAgLyogZ2VuZXJhbCAqLworICAgICAgICBicmVhazsKKyAgICBjYXNlICdFJzoKKyAgICAgICAgdXBwZXIgPSAxOworICAgICAgICBmb3JtYXRfY29kZSA9ICdlJzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnRic6CisgICAgICAgIHVwcGVyID0gMTsKKyAgICAgICAgZm9ybWF0X2NvZGUgPSAnZic7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ0cnOgorICAgICAgICB1cHBlciA9IDE7CisgICAgICAgIGZvcm1hdF9jb2RlID0gJ2cnOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdyJzogICAgICAgICAgLyogcmVwciBmb3JtYXQgKi8KKyAgICAgICAgLyogU3VwcGxpZWQgcHJlY2lzaW9uIGlzIHVudXNlZCwgbXVzdCBiZSAwLiAqLworICAgICAgICBpZiAocHJlY2lzaW9uICE9IDApIHsKKyAgICAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgLyogVGhlIHJlcHIoKSBwcmVjaXNpb24gKDE3IHNpZ25pZmljYW50IGRlY2ltYWwgZGlnaXRzKSBpcyB0aGUKKyAgICAgICAgICAgbWluaW1hbCBudW1iZXIgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgZW5vdWdoIHByZWNpc2lvbgorICAgICAgICAgICBzbyB0aGF0IGlmIHRoZSBudW1iZXIgaXMgcmVhZCBiYWNrIGluIHRoZSBleGFjdCBzYW1lIGJpbmFyeQorICAgICAgICAgICB2YWx1ZSBpcyByZWNyZWF0ZWQuICBUaGlzIGlzIHRydWUgZm9yIElFRUUgZmxvYXRpbmcgcG9pbnQKKyAgICAgICAgICAgYnkgZGVzaWduLCBhbmQgYWxzbyBoYXBwZW5zIHRvIHdvcmsgZm9yIGFsbCBvdGhlciBtb2Rlcm4KKyAgICAgICAgICAgaGFyZHdhcmUuICovCisgICAgICAgIHByZWNpc2lvbiA9IDE3OworICAgICAgICBmb3JtYXRfY29kZSA9ICdnJzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIEhlcmUncyBhIHF1aWNrLWFuZC1kaXJ0eSBjYWxjdWxhdGlvbiB0byBmaWd1cmUgb3V0IGhvdyBiaWcgYSBidWZmZXIKKyAgICAgICB3ZSBuZWVkLiAgSW4gZ2VuZXJhbCwgZm9yIGEgZmluaXRlIGZsb2F0IHdlIG5lZWQ6CisKKyAgICAgICAgIDEgYnl0ZSBmb3IgZWFjaCBkaWdpdCBvZiB0aGUgZGVjaW1hbCBzaWduaWZpY2FuZCwgYW5kCisKKyAgICAgICAgIDEgZm9yIGEgcG9zc2libGUgc2lnbgorICAgICAgICAgMSBmb3IgYSBwb3NzaWJsZSBkZWNpbWFsIHBvaW50CisgICAgICAgICAyIGZvciBhIHBvc3NpYmxlIFtlRV1bKy1dCisgICAgICAgICAxIGZvciBlYWNoIGRpZ2l0IG9mIHRoZSBleHBvbmVudDsgIGlmIHdlIGFsbG93IDE5IGRpZ2l0cworICAgICAgICAgICB0b3RhbCB0aGVuIHdlJ3JlIHNhZmUgdXAgdG8gZXhwb25lbnRzIG9mIDIqKjYzLgorICAgICAgICAgMSBmb3IgdGhlIHRyYWlsaW5nIG51bCBieXRlCisKKyAgICAgICBUaGlzIGdpdmVzIGEgdG90YWwgb2YgMjQgKyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgc2lnbmlmaWNhbmQsCisgICAgICAgYW5kIHRoZSBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBzaWduaWZpY2FuZCBpczoKKworICAgICAgICAgZm9yICdnJyBmb3JtYXQ6IGF0IG1vc3QgcHJlY2lzaW9uLCBleGNlcHQgcG9zc2libHkKKyAgICAgICAgICAgd2hlbiBwcmVjaXNpb24gPT0gMCwgd2hlbiBpdCdzIDEuCisgICAgICAgICBmb3IgJ2UnIGZvcm1hdDogcHJlY2lzaW9uKzEKKyAgICAgICAgIGZvciAnZicgZm9ybWF0OiBwcmVjaXNpb24gZGlnaXRzIGFmdGVyIHRoZSBwb2ludCwgYXQgbGVhc3QgMQorICAgICAgICAgICBiZWZvcmUuICBUbyBmaWd1cmUgb3V0IGhvdyBtYW55IGRpZ2l0cyBhcHBlYXIgYmVmb3JlIHRoZSBwb2ludAorICAgICAgICAgICB3ZSBoYXZlIHRvIGV4YW1pbmUgdGhlIHNpemUgb2YgdGhlIG51bWJlci4gIElmIGZhYnModmFsKSA8IDEuMAorICAgICAgICAgICB0aGVuIHRoZXJlIHdpbGwgYmUgb25seSBvbmUgZGlnaXQgYmVmb3JlIHRoZSBwb2ludC4gIElmCisgICAgICAgICAgIGZhYnModmFsKSA+PSAxLjAsIHRoZW4gdGhlcmUgYXJlIGF0IG1vc3QKKworICAgICAgICAgMStmbG9vcihsb2cxMChjZWlsaW5nKGZhYnModmFsKSkpKQorCisgICAgICAgICAgIGRpZ2l0cyBiZWZvcmUgdGhlIHBvaW50ICh3aGVyZSB0aGUgJ2NlaWxpbmcnIGFsbG93cyBmb3IgdGhlCisgICAgICAgICAgIHBvc3NpYmlsaXR5IHRoYXQgdGhlIHJvdW5kaW5nIHJvdW5kcyB0aGUgaW50ZWdlciBwYXJ0IG9mIHZhbAorICAgICAgICAgICB1cCkuICBBIHNhZmUgdXBwZXIgYm91bmQgZm9yIHRoZSBhYm92ZSBxdWFudGl0eSBpcworICAgICAgICAgICAxK2Zsb29yKGV4cC8zKSwgd2hlcmUgZXhwIGlzIHRoZSB1bmlxdWUgaW50ZWdlciBzdWNoIHRoYXQgMC41CisgICAgICAgICAgIDw9IGZhYnModmFsKS8yKipleHAgPCAxLjAuICBUaGlzIGV4cCBjYW4gYmUgb2J0YWluZWQgZnJvbQorICAgICAgICAgICBmcmV4cC4KKworICAgICAgIFNvIHdlIGFsbG93IHJvb20gZm9yIHByZWNpc2lvbisxIGRpZ2l0cyBmb3IgYWxsIGZvcm1hdHMsIHBsdXMgYW4KKyAgICAgICBleHRyYSBmbG9vcihleHAvMykgZGlnaXRzIGZvciAnZicgZm9ybWF0LgorCisgICAgKi8KKworICAgIGlmIChQeV9JU19OQU4odmFsKSB8fCBQeV9JU19JTkZJTklUWSh2YWwpKQorICAgICAgICAvKiAzIGZvciAnaW5mJy8nbmFuJywgMSBmb3Igc2lnbiwgMSBmb3IgJ1wwJyAqLworICAgICAgICBidWZzaXplID0gNTsKKyAgICBlbHNlIHsKKyAgICAgICAgYnVmc2l6ZSA9IDI1ICsgcHJlY2lzaW9uOworICAgICAgICBpZiAoZm9ybWF0X2NvZGUgPT0gJ2YnICYmIGZhYnModmFsKSA+PSAxLjApIHsKKyAgICAgICAgICAgIGZyZXhwKHZhbCwgJmV4cCk7CisgICAgICAgICAgICBidWZzaXplICs9IGV4cC8zOworICAgICAgICB9CisgICAgfQorCisgICAgYnVmID0gUHlNZW1fTWFsbG9jKGJ1ZnNpemUpOworICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBIYW5kbGUgbmFuIGFuZCBpbmYuICovCisgICAgaWYgKFB5X0lTX05BTih2YWwpKSB7CisgICAgICAgIHN0cmNweShidWYsICJuYW4iKTsKKyAgICAgICAgdCA9IFB5X0RUU1RfTkFOOworICAgIH0gZWxzZSBpZiAoUHlfSVNfSU5GSU5JVFkodmFsKSkgeworICAgICAgICBpZiAoY29weXNpZ24oMS4sIHZhbCkgPT0gMS4pCisgICAgICAgICAgICBzdHJjcHkoYnVmLCAiaW5mIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cmNweShidWYsICItaW5mIik7CisgICAgICAgIHQgPSBQeV9EVFNUX0lORklOSVRFOworICAgIH0gZWxzZSB7CisgICAgICAgIHQgPSBQeV9EVFNUX0ZJTklURTsKKyAgICAgICAgaWYgKGZsYWdzICYgUHlfRFRTRl9BRERfRE9UXzApCisgICAgICAgICAgICBmb3JtYXRfY29kZSA9ICdaJzsKKworICAgICAgICBQeU9TX3NucHJpbnRmKGZvcm1hdCwgc2l6ZW9mKGZvcm1hdCksICIlJSVzLiVpJWMiLAorICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIFB5X0RUU0ZfQUxUID8gIiMiIDogIiIpLCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2NvZGUpOworICAgICAgICBfUHlPU19hc2NpaV9mb3JtYXRkKGJ1ZiwgYnVmc2l6ZSwgZm9ybWF0LCB2YWwsIHByZWNpc2lvbik7CisgICAgfQorCisgICAgLyogQWRkIHNpZ24gd2hlbiByZXF1ZXN0ZWQuICBJdCdzIGNvbnZlbmllbnQgKGVzcC4gd2hlbiBmb3JtYXR0aW5nCisgICAgIGNvbXBsZXggbnVtYmVycykgdG8gaW5jbHVkZSBhIHNpZ24gZXZlbiBmb3IgaW5mIGFuZCBuYW4uICovCisgICAgaWYgKGZsYWdzICYgUHlfRFRTRl9TSUdOICYmIGJ1ZlswXSAhPSAnLScpIHsKKyAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihidWYpOworICAgICAgICAvKiB0aGUgYnVmc2l6ZSBjYWxjdWxhdGlvbnMgYWJvdmUgc2hvdWxkIGVuc3VyZSB0aGF0IHdlJ3ZlIGdvdAorICAgICAgICAgICBzcGFjZSB0byBhZGQgYSBzaWduICovCisgICAgICAgIGFzc2VydCgoc2l6ZV90KWJ1ZnNpemUgPj0gbGVuKzIpOworICAgICAgICBtZW1tb3ZlKGJ1ZisxLCBidWYsIGxlbisxKTsKKyAgICAgICAgYnVmWzBdID0gJysnOworICAgIH0KKyAgICBpZiAodXBwZXIpIHsKKyAgICAgICAgLyogQ29udmVydCB0byB1cHBlciBjYXNlLiAqLworICAgICAgICBjaGFyICpwMTsKKyAgICAgICAgZm9yIChwMSA9IGJ1ZjsgKnAxOyBwMSsrKQorICAgICAgICAgICAgKnAxID0gUHlfVE9VUFBFUigqcDEpOworICAgIH0KKworICAgIGlmICh0eXBlKQorICAgICAgICAqdHlwZSA9IHQ7CisgICAgcmV0dXJuIGJ1ZjsKK30KKworI2Vsc2UKKworLyogX1B5X2RnX2R0b2EgaXMgYXZhaWxhYmxlLiAqLworCisvKiBJJ20gdXNpbmcgYSBsb29rdXAgdGFibGUgaGVyZSBzbyB0aGF0IEkgZG9uJ3QgaGF2ZSB0byBpbnZlbnQgYSBub24tbG9jYWxlCisgICBzcGVjaWZpYyB3YXkgdG8gY29udmVydCB0byB1cHBlcmNhc2UgKi8KKyNkZWZpbmUgT0ZTX0lORiAwCisjZGVmaW5lIE9GU19OQU4gMQorI2RlZmluZSBPRlNfRSAyCisKKy8qIFRoZSBsZW5ndGhzIG9mIHRoZXNlIGFyZSBrbm93biB0byB0aGUgY29kZSBiZWxvdywgc28gZG9uJ3QgY2hhbmdlIHRoZW0gKi8KK3N0YXRpYyBjaGFyICpsY19mbG9hdF9zdHJpbmdzW10gPSB7CisgICAgImluZiIsCisgICAgIm5hbiIsCisgICAgImUiLAorfTsKK3N0YXRpYyBjaGFyICp1Y19mbG9hdF9zdHJpbmdzW10gPSB7CisgICAgIklORiIsCisgICAgIk5BTiIsCisgICAgIkUiLAorfTsKKworCisvKiBDb252ZXJ0IGEgZG91YmxlIGQgdG8gYSBzdHJpbmcsIGFuZCByZXR1cm4gYSBQeU1lbV9NYWxsb2MnZCBibG9jayBvZgorICAgbWVtb3J5IGNvbnRhaW4gdGhlIHJlc3VsdGluZyBzdHJpbmcuCisKKyAgIEFyZ3VtZW50czoKKyAgICAgZCBpcyB0aGUgZG91YmxlIHRvIGJlIGNvbnZlcnRlZAorICAgICBmb3JtYXRfY29kZSBpcyBvbmUgb2YgJ2UnLCAnZicsICdnJywgJ3InLiAgJ2UnLCAnZicgYW5kICdnJworICAgICAgIGNvcnJlc3BvbmQgdG8gJyVlJywgJyVmJyBhbmQgJyVnJzsgICdyJyBjb3JyZXNwb25kcyB0byByZXByLgorICAgICBtb2RlIGlzIG9uZSBvZiAnMCcsICcyJyBvciAnMycsIGFuZCBpcyBjb21wbGV0ZWx5IGRldGVybWluZWQgYnkKKyAgICAgICBmb3JtYXRfY29kZTogJ2UnIGFuZCAnZycgdXNlIG1vZGUgMjsgJ2YnIG1vZGUgMywgJ3InIG1vZGUgMC4KKyAgICAgcHJlY2lzaW9uIGlzIHRoZSBkZXNpcmVkIHByZWNpc2lvbgorICAgICBhbHdheXNfYWRkX3NpZ24gaXMgbm9uemVybyBpZiBhICcrJyBzaWduIHNob3VsZCBiZSBpbmNsdWRlZCBmb3IgcG9zaXRpdmUKKyAgICAgICBudW1iZXJzCisgICAgIGFkZF9kb3RfMF9pZl9pbnRlZ2VyIGlzIG5vbnplcm8gaWYgaW50ZWdlcnMgaW4gbm9uLWV4cG9uZW50aWFsIGZvcm0KKyAgICAgICBzaG91bGQgaGF2ZSAiLjAiIGFkZGVkLiAgT25seSBhcHBsaWVzIHRvIGZvcm1hdCBjb2RlcyAncicgYW5kICdnJy4KKyAgICAgdXNlX2FsdF9mb3JtYXR0aW5nIGlzIG5vbnplcm8gaWYgYWx0ZXJuYXRpdmUgZm9ybWF0dGluZyBzaG91bGQgYmUKKyAgICAgICB1c2VkLiAgT25seSBhcHBsaWVzIHRvIGZvcm1hdCBjb2RlcyAnZScsICdmJyBhbmQgJ2cnLiAgRm9yIGNvZGUgJ2cnLAorICAgICAgIGF0IG1vc3Qgb25lIG9mIHVzZV9hbHRfZm9ybWF0dGluZyBhbmQgYWRkX2RvdF8wX2lmX2ludGVnZXIgc2hvdWxkCisgICAgICAgYmUgbm9uemVyby4KKyAgICAgdHlwZSwgaWYgbm9uLU5VTEwsIHdpbGwgYmUgc2V0IHRvIG9uZSBvZiB0aGVzZSBjb25zdGFudHMgdG8gaWRlbnRpZnkKKyAgICAgICB0aGUgdHlwZSBvZiB0aGUgJ2QnIGFyZ3VtZW50OgorICAgICBQeV9EVFNUX0ZJTklURQorICAgICBQeV9EVFNUX0lORklOSVRFCisgICAgIFB5X0RUU1RfTkFOCisKKyAgIFJldHVybnMgYSBQeU1lbV9NYWxsb2MnZCBibG9jayBvZiBtZW1vcnkgY29udGFpbmluZyB0aGUgcmVzdWx0aW5nIHN0cmluZywKKyAgICBvciBOVUxMIG9uIGVycm9yLiBJZiBOVUxMIGlzIHJldHVybmVkLCB0aGUgUHl0aG9uIGVycm9yIGhhcyBiZWVuIHNldC4KKyAqLworCitzdGF0aWMgY2hhciAqCitmb3JtYXRfZmxvYXRfc2hvcnQoZG91YmxlIGQsIGNoYXIgZm9ybWF0X2NvZGUsCisgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIFB5X3NzaXplX3QgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgIGludCBhbHdheXNfYWRkX3NpZ24sIGludCBhZGRfZG90XzBfaWZfaW50ZWdlciwKKyAgICAgICAgICAgICAgICAgICBpbnQgdXNlX2FsdF9mb3JtYXR0aW5nLCBjaGFyICoqZmxvYXRfc3RyaW5ncywgaW50ICp0eXBlKQoreworICAgIGNoYXIgKmJ1ZiA9IE5VTEw7CisgICAgY2hhciAqcCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBidWZzaXplID0gMDsKKyAgICBjaGFyICpkaWdpdHMsICpkaWdpdHNfZW5kOworICAgIGludCBkZWNwdF9hc19pbnQsIHNpZ24sIGV4cF9sZW4sIGV4cCA9IDAsIHVzZV9leHAgPSAwOworICAgIFB5X3NzaXplX3QgZGVjcHQsIGRpZ2l0c19sZW4sIHZkaWdpdHNfc3RhcnQsIHZkaWdpdHNfZW5kOworICAgIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0hFQURFUjsKKworICAgIC8qIF9QeV9kZ19kdG9hIHJldHVybnMgYSBkaWdpdCBzdHJpbmcgKG5vIGRlY2ltYWwgcG9pbnQgb3IgZXhwb25lbnQpLgorICAgICAgIE11c3QgYmUgbWF0Y2hlZCBieSBhIGNhbGwgdG8gX1B5X2RnX2ZyZWVkdG9hLiAqLworICAgIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX1NUQVJUOworICAgIGRpZ2l0cyA9IF9QeV9kZ19kdG9hKGQsIG1vZGUsIHByZWNpc2lvbiwgJmRlY3B0X2FzX2ludCwgJnNpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgJmRpZ2l0c19lbmQpOworICAgIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0VORDsKKworICAgIGRlY3B0ID0gKFB5X3NzaXplX3QpZGVjcHRfYXNfaW50OworICAgIGlmIChkaWdpdHMgPT0gTlVMTCkgeworICAgICAgICAvKiBUaGUgb25seSBmYWlsdXJlIG1vZGUgaXMgbm8gbWVtb3J5LiAqLworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGFzc2VydChkaWdpdHNfZW5kICE9IE5VTEwgJiYgZGlnaXRzX2VuZCA+PSBkaWdpdHMpOworICAgIGRpZ2l0c19sZW4gPSBkaWdpdHNfZW5kIC0gZGlnaXRzOworCisgICAgaWYgKGRpZ2l0c19sZW4gJiYgIVB5X0lTRElHSVQoZGlnaXRzWzBdKSkgeworICAgICAgICAvKiBJbmZpbml0aWVzIGFuZCBuYW5zIGhlcmU7IGFkYXB0IEdheSdzIG91dHB1dCwKKyAgICAgICAgICAgc28gY29udmVydCBJbmZpbml0eSB0byBpbmYgYW5kIE5hTiB0byBuYW4sIGFuZAorICAgICAgICAgICBpZ25vcmUgc2lnbiBvZiBuYW4uIFRoZW4gcmV0dXJuLiAqLworCisgICAgICAgIC8qIGlnbm9yZSB0aGUgYWN0dWFsIHNpZ24gb2YgYSBuYW4gKi8KKyAgICAgICAgaWYgKGRpZ2l0c1swXSA9PSAnbicgfHwgZGlnaXRzWzBdID09ICdOJykKKyAgICAgICAgICAgIHNpZ24gPSAwOworCisgICAgICAgIC8qIFdlIG9ubHkgbmVlZCA1IGJ5dGVzIHRvIGhvbGQgdGhlIHJlc3VsdCAiK2luZlwwIiAuICovCisgICAgICAgIGJ1ZnNpemUgPSA1OyAvKiBVc2VkIGxhdGVyIGluIGFuIGFzc2VydC4gKi8KKyAgICAgICAgYnVmID0gKGNoYXIgKilQeU1lbV9NYWxsb2MoYnVmc2l6ZSk7CisgICAgICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBwID0gYnVmOworCisgICAgICAgIGlmIChzaWduID09IDEpIHsKKyAgICAgICAgICAgICpwKysgPSAnLSc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYWx3YXlzX2FkZF9zaWduKSB7CisgICAgICAgICAgICAqcCsrID0gJysnOworICAgICAgICB9CisgICAgICAgIGlmIChkaWdpdHNbMF0gPT0gJ2knIHx8IGRpZ2l0c1swXSA9PSAnSScpIHsKKyAgICAgICAgICAgIHN0cm5jcHkocCwgZmxvYXRfc3RyaW5nc1tPRlNfSU5GXSwgMyk7CisgICAgICAgICAgICBwICs9IDM7CisKKyAgICAgICAgICAgIGlmICh0eXBlKQorICAgICAgICAgICAgICAgICp0eXBlID0gUHlfRFRTVF9JTkZJTklURTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkaWdpdHNbMF0gPT0gJ24nIHx8IGRpZ2l0c1swXSA9PSAnTicpIHsKKyAgICAgICAgICAgIHN0cm5jcHkocCwgZmxvYXRfc3RyaW5nc1tPRlNfTkFOXSwgMyk7CisgICAgICAgICAgICBwICs9IDM7CisKKyAgICAgICAgICAgIGlmICh0eXBlKQorICAgICAgICAgICAgICAgICp0eXBlID0gUHlfRFRTVF9OQU47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBzaG91bGRuJ3QgZ2V0IGhlcmU6IEdheSdzIGNvZGUgc2hvdWxkIGFsd2F5cyByZXR1cm4KKyAgICAgICAgICAgICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIGEgZGlnaXQsIGFuICdJJywgIG9yICdOJyAqLworICAgICAgICAgICAgc3RybmNweShwLCAiRVJSIiwgMyk7CisgICAgICAgICAgICBwICs9IDM7CisgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qIFRoZSByZXN1bHQgbXVzdCBiZSBmaW5pdGUgKG5vdCBpbmYgb3IgbmFuKS4gKi8KKyAgICBpZiAodHlwZSkKKyAgICAgICAgKnR5cGUgPSBQeV9EVFNUX0ZJTklURTsKKworCisgICAgLyogV2UgZ290IGRpZ2l0cyBiYWNrLCBmb3JtYXQgdGhlbS4gIFdlIG1heSBuZWVkIHRvIHBhZCAnZGlnaXRzJworICAgICAgIGVpdGhlciBvbiB0aGUgbGVmdCBvciByaWdodCAob3IgYm90aCkgd2l0aCBleHRyYSB6ZXJvcywgc28gaW4KKyAgICAgICBnZW5lcmFsIHRoZSByZXN1bHRpbmcgc3RyaW5nIGhhcyB0aGUgZm9ybQorCisgICAgICAgICBbPHNpZ24+XTx6ZXJvcz48ZGlnaXRzPjx6ZXJvcz5bPGV4cG9uZW50Pl0KKworICAgICAgIHdoZXJlIGVpdGhlciBvZiB0aGUgPHplcm9zPiBwaWVjZXMgY291bGQgYmUgZW1wdHksIGFuZCB0aGVyZSdzIGEKKyAgICAgICBkZWNpbWFsIHBvaW50IHRoYXQgY291bGQgYXBwZWFyIGVpdGhlciBpbiA8ZGlnaXRzPiBvciBpbiB0aGUKKyAgICAgICBsZWFkaW5nIG9yIHRyYWlsaW5nIDx6ZXJvcz4uCisKKyAgICAgICBJbWFnaW5lIGFuIGluZmluaXRlICd2aXJ0dWFsJyBzdHJpbmcgdmRpZ2l0cywgY29uc2lzdGluZyBvZiB0aGUKKyAgICAgICBzdHJpbmcgJ2RpZ2l0cycgKHN0YXJ0aW5nIGF0IGluZGV4IDApIHBhZGRlZCBvbiBib3RoIHRoZSBsZWZ0IGFuZAorICAgICAgIHJpZ2h0IHdpdGggaW5maW5pdGUgc3RyaW5ncyBvZiB6ZXJvcy4gIFdlIHdhbnQgdG8gb3V0cHV0IGEgc2xpY2UKKworICAgICAgICAgdmRpZ2l0c1t2ZGlnaXRzX3N0YXJ0IDogdmRpZ2l0c19lbmRdCisKKyAgICAgICBvZiB0aGlzIHZpcnR1YWwgc3RyaW5nLiAgVGh1cyBpZiB2ZGlnaXRzX3N0YXJ0IDwgMCB0aGVuIHdlJ2xsIGVuZAorICAgICAgIHVwIHByb2R1Y2luZyBzb21lIGxlYWRpbmcgemVyb3M7IGlmIHZkaWdpdHNfZW5kID4gZGlnaXRzX2xlbiB0aGVyZQorICAgICAgIHdpbGwgYmUgdHJhaWxpbmcgemVyb3MgaW4gdGhlIG91dHB1dC4gIFRoZSBuZXh0IHNlY3Rpb24gb2YgY29kZQorICAgICAgIGRldGVybWluZXMgd2hldGhlciB0byB1c2UgYW4gZXhwb25lbnQgb3Igbm90LCBmaWd1cmVzIG91dCB0aGUKKyAgICAgICBwb3NpdGlvbiAnZGVjcHQnIG9mIHRoZSBkZWNpbWFsIHBvaW50LCBhbmQgY29tcHV0ZXMgJ3ZkaWdpdHNfc3RhcnQnCisgICAgICAgYW5kICd2ZGlnaXRzX2VuZCcuICovCisgICAgdmRpZ2l0c19lbmQgPSBkaWdpdHNfbGVuOworICAgIHN3aXRjaCAoZm9ybWF0X2NvZGUpIHsKKyAgICBjYXNlICdlJzoKKyAgICAgICAgdXNlX2V4cCA9IDE7CisgICAgICAgIHZkaWdpdHNfZW5kID0gcHJlY2lzaW9uOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdmJzoKKyAgICAgICAgdmRpZ2l0c19lbmQgPSBkZWNwdCArIHByZWNpc2lvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnZyc6CisgICAgICAgIGlmIChkZWNwdCA8PSAtNCB8fCBkZWNwdCA+CisgICAgICAgICAgICAoYWRkX2RvdF8wX2lmX2ludGVnZXIgPyBwcmVjaXNpb24tMSA6IHByZWNpc2lvbikpCisgICAgICAgICAgICB1c2VfZXhwID0gMTsKKyAgICAgICAgaWYgKHVzZV9hbHRfZm9ybWF0dGluZykKKyAgICAgICAgICAgIHZkaWdpdHNfZW5kID0gcHJlY2lzaW9uOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdyJzoKKyAgICAgICAgLyogY29udmVydCB0byBleHBvbmVudGlhbCBmb3JtYXQgYXQgMWUxNi4gIFdlIHVzZWQgdG8gY29udmVydAorICAgICAgICAgICBhdCAxZTE3LCBidXQgdGhhdCBnaXZlcyBvZGQtbG9va2luZyByZXN1bHRzIGZvciBzb21lIHZhbHVlcworICAgICAgICAgICB3aGVuIGEgMTYtZGlnaXQgJ3Nob3J0ZXN0JyByZXByIGlzIHBhZGRlZCB3aXRoIGJvZ3VzIHplcm9zLgorICAgICAgICAgICBGb3IgZXhhbXBsZSwgcmVwcigyZTE2KzgpIHdvdWxkIGdpdmUgMjAwMDAwMDAwMDAwMDAwMTAuMDsKKyAgICAgICAgICAgdGhlIHRydWUgdmFsdWUgaXMgMjAwMDAwMDAwMDAwMDAwMDguMC4gKi8KKyAgICAgICAgaWYgKGRlY3B0IDw9IC00IHx8IGRlY3B0ID4gMTYpCisgICAgICAgICAgICB1c2VfZXhwID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKiBpZiB1c2luZyBhbiBleHBvbmVudCwgcmVzZXQgZGVjaW1hbCBwb2ludCBwb3NpdGlvbiB0byAxIGFuZCBhZGp1c3QKKyAgICAgICBleHBvbmVudCBhY2NvcmRpbmdseS4qLworICAgIGlmICh1c2VfZXhwKSB7CisgICAgICAgIGV4cCA9IGRlY3B0IC0gMTsKKyAgICAgICAgZGVjcHQgPSAxOworICAgIH0KKyAgICAvKiBlbnN1cmUgdmRpZ2l0c19zdGFydCA8IGRlY3B0IDw9IHZkaWdpdHNfZW5kLCBvciB2ZGlnaXRzX3N0YXJ0IDwKKyAgICAgICBkZWNwdCA8IHZkaWdpdHNfZW5kIGlmIGFkZF9kb3RfMF9pZl9pbnRlZ2VyIGFuZCBubyBleHBvbmVudCAqLworICAgIHZkaWdpdHNfc3RhcnQgPSBkZWNwdCA8PSAwID8gZGVjcHQtMSA6IDA7CisgICAgaWYgKCF1c2VfZXhwICYmIGFkZF9kb3RfMF9pZl9pbnRlZ2VyKQorICAgICAgICB2ZGlnaXRzX2VuZCA9IHZkaWdpdHNfZW5kID4gZGVjcHQgPyB2ZGlnaXRzX2VuZCA6IGRlY3B0ICsgMTsKKyAgICBlbHNlCisgICAgICAgIHZkaWdpdHNfZW5kID0gdmRpZ2l0c19lbmQgPiBkZWNwdCA/IHZkaWdpdHNfZW5kIDogZGVjcHQ7CisKKyAgICAvKiBkb3VibGUgY2hlY2sgaW5lcXVhbGl0aWVzICovCisgICAgYXNzZXJ0KHZkaWdpdHNfc3RhcnQgPD0gMCAmJgorICAgICAgICAgICAwIDw9IGRpZ2l0c19sZW4gJiYKKyAgICAgICAgICAgZGlnaXRzX2xlbiA8PSB2ZGlnaXRzX2VuZCk7CisgICAgLyogZGVjaW1hbCBwb2ludCBzaG91bGQgYmUgaW4gKHZkaWdpdHNfc3RhcnQsIHZkaWdpdHNfZW5kXSAqLworICAgIGFzc2VydCh2ZGlnaXRzX3N0YXJ0IDwgZGVjcHQgJiYgZGVjcHQgPD0gdmRpZ2l0c19lbmQpOworCisgICAgLyogQ29tcHV0ZSBhbiB1cHBlciBib3VuZCBob3cgbXVjaCBtZW1vcnkgd2UgbmVlZC4gVGhpcyBtaWdodCBiZSBhIGZldworICAgICAgIGNoYXJzIHRvbyBsb25nLCBidXQgbm8gYmlnIGRlYWwuICovCisgICAgYnVmc2l6ZSA9CisgICAgICAgIC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQgYW5kIHRyYWlsaW5nIDAgYnl0ZSAqLworICAgICAgICAzICsKKworICAgICAgICAvKiB0b3RhbCBkaWdpdCBjb3VudCAoaW5jbHVkaW5nIHplcm8gcGFkZGluZyBvbiBib3RoIHNpZGVzKSAqLworICAgICAgICAodmRpZ2l0c19lbmQgLSB2ZGlnaXRzX3N0YXJ0KSArCisKKyAgICAgICAgLyogZXhwb25lbnQgImUrMTAwIiwgbWF4IDMgbnVtZXJpY2FsIGRpZ2l0cyAqLworICAgICAgICAodXNlX2V4cCA/IDUgOiAwKTsKKworICAgIC8qIE5vdyBhbGxvY2F0ZSB0aGUgbWVtb3J5IGFuZCBpbml0aWFsaXplIHAgdG8gcG9pbnQgdG8gdGhlIHN0YXJ0IG9mCisgICAgICAgaXQuICovCisgICAgYnVmID0gKGNoYXIgKilQeU1lbV9NYWxsb2MoYnVmc2l6ZSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcCA9IGJ1ZjsKKworICAgIC8qIEFkZCBhIG5lZ2F0aXZlIHNpZ24gaWYgbmVnYXRpdmUsIGFuZCBhIHBsdXMgc2lnbiBpZiBub24tbmVnYXRpdmUKKyAgICAgICBhbmQgYWx3YXlzX2FkZF9zaWduIGlzIHRydWUuICovCisgICAgaWYgKHNpZ24gPT0gMSkKKyAgICAgICAgKnArKyA9ICctJzsKKyAgICBlbHNlIGlmIChhbHdheXNfYWRkX3NpZ24pCisgICAgICAgICpwKysgPSAnKyc7CisKKyAgICAvKiBub3RlIHRoYXQgZXhhY3RseSBvbmUgb2YgdGhlIHRocmVlICdpZicgY29uZGl0aW9ucyBpcyB0cnVlLAorICAgICAgIHNvIHdlIGluY2x1ZGUgZXhhY3RseSBvbmUgZGVjaW1hbCBwb2ludCAqLworICAgIC8qIFplcm8gcGFkZGluZyBvbiBsZWZ0IG9mIGRpZ2l0IHN0cmluZyAqLworICAgIGlmIChkZWNwdCA8PSAwKSB7CisgICAgICAgIG1lbXNldChwLCAnMCcsIGRlY3B0LXZkaWdpdHNfc3RhcnQpOworICAgICAgICBwICs9IGRlY3B0IC0gdmRpZ2l0c19zdGFydDsKKyAgICAgICAgKnArKyA9ICcuJzsKKyAgICAgICAgbWVtc2V0KHAsICcwJywgMC1kZWNwdCk7CisgICAgICAgIHAgKz0gMC1kZWNwdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1lbXNldChwLCAnMCcsIDAtdmRpZ2l0c19zdGFydCk7CisgICAgICAgIHAgKz0gMCAtIHZkaWdpdHNfc3RhcnQ7CisgICAgfQorCisgICAgLyogRGlnaXRzLCB3aXRoIGluY2x1ZGVkIGRlY2ltYWwgcG9pbnQgKi8KKyAgICBpZiAoMCA8IGRlY3B0ICYmIGRlY3B0IDw9IGRpZ2l0c19sZW4pIHsKKyAgICAgICAgc3RybmNweShwLCBkaWdpdHMsIGRlY3B0LTApOworICAgICAgICBwICs9IGRlY3B0LTA7CisgICAgICAgICpwKysgPSAnLic7CisgICAgICAgIHN0cm5jcHkocCwgZGlnaXRzK2RlY3B0LCBkaWdpdHNfbGVuLWRlY3B0KTsKKyAgICAgICAgcCArPSBkaWdpdHNfbGVuLWRlY3B0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RybmNweShwLCBkaWdpdHMsIGRpZ2l0c19sZW4pOworICAgICAgICBwICs9IGRpZ2l0c19sZW47CisgICAgfQorCisgICAgLyogQW5kIHplcm9zIG9uIHRoZSByaWdodCAqLworICAgIGlmIChkaWdpdHNfbGVuIDwgZGVjcHQpIHsKKyAgICAgICAgbWVtc2V0KHAsICcwJywgZGVjcHQtZGlnaXRzX2xlbik7CisgICAgICAgIHAgKz0gZGVjcHQtZGlnaXRzX2xlbjsKKyAgICAgICAgKnArKyA9ICcuJzsKKyAgICAgICAgbWVtc2V0KHAsICcwJywgdmRpZ2l0c19lbmQtZGVjcHQpOworICAgICAgICBwICs9IHZkaWdpdHNfZW5kLWRlY3B0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbWVtc2V0KHAsICcwJywgdmRpZ2l0c19lbmQtZGlnaXRzX2xlbik7CisgICAgICAgIHAgKz0gdmRpZ2l0c19lbmQtZGlnaXRzX2xlbjsKKyAgICB9CisKKyAgICAvKiBEZWxldGUgYSB0cmFpbGluZyBkZWNpbWFsIHB0IHVubGVzcyB1c2luZyBhbHRlcm5hdGl2ZSBmb3JtYXR0aW5nLiAqLworICAgIGlmIChwWy0xXSA9PSAnLicgJiYgIXVzZV9hbHRfZm9ybWF0dGluZykKKyAgICAgICAgcC0tOworCisgICAgLyogTm93IHRoYXQgd2UndmUgZG9uZSB6ZXJvIHBhZGRpbmcsIGFkZCBhbiBleHBvbmVudCBpZiBuZWVkZWQuICovCisgICAgaWYgKHVzZV9leHApIHsKKyAgICAgICAgKnArKyA9IGZsb2F0X3N0cmluZ3NbT0ZTX0VdWzBdOworICAgICAgICBleHBfbGVuID0gc3ByaW50ZihwLCAiJSsuMDJkIiwgZXhwKTsKKyAgICAgICAgcCArPSBleHBfbGVuOworICAgIH0KKyAgZXhpdDoKKyAgICBpZiAoYnVmKSB7CisgICAgICAgICpwID0gJ1wwJzsKKyAgICAgICAgLyogSXQncyB0b28gbGF0ZSBpZiB0aGlzIGZhaWxzLCBhcyB3ZSd2ZSBhbHJlYWR5IHN0ZXBwZWQgb24KKyAgICAgICAgICAgbWVtb3J5IHRoYXQgaXNuJ3Qgb3Vycy4gQnV0IGl0J3MgYW4gb2theSBkZWJ1Z2dpbmcgdGVzdC4gKi8KKyAgICAgICAgYXNzZXJ0KHAtYnVmIDwgYnVmc2l6ZSk7CisgICAgfQorICAgIGlmIChkaWdpdHMpCisgICAgICAgIF9QeV9kZ19mcmVlZHRvYShkaWdpdHMpOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKworCitQeUFQSV9GVU5DKGNoYXIgKikgUHlPU19kb3VibGVfdG9fc3RyaW5nKGRvdWJsZSB2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZm9ybWF0X2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp0eXBlKQoreworICAgIGNoYXIgKipmbG9hdF9zdHJpbmdzID0gbGNfZmxvYXRfc3RyaW5nczsKKyAgICBpbnQgbW9kZTsKKworICAgIC8qIFZhbGlkYXRlIGZvcm1hdF9jb2RlLCBhbmQgbWFwIHVwcGVyIGFuZCBsb3dlciBjYXNlLiBDb21wdXRlIHRoZQorICAgICAgIG1vZGUgYW5kIG1ha2UgYW55IGFkanVzdG1lbnRzIGFzIG5lZWRlZC4gKi8KKyAgICBzd2l0Y2ggKGZvcm1hdF9jb2RlKSB7CisgICAgLyogZXhwb25lbnQgKi8KKyAgICBjYXNlICdFJzoKKyAgICAgICAgZmxvYXRfc3RyaW5ncyA9IHVjX2Zsb2F0X3N0cmluZ3M7CisgICAgICAgIGZvcm1hdF9jb2RlID0gJ2UnOworICAgICAgICAvKiBGYWxsIHRocm91Z2guICovCisgICAgY2FzZSAnZSc6CisgICAgICAgIG1vZGUgPSAyOworICAgICAgICBwcmVjaXNpb24rKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICAvKiBmaXhlZCAqLworICAgIGNhc2UgJ0YnOgorICAgICAgICBmbG9hdF9zdHJpbmdzID0gdWNfZmxvYXRfc3RyaW5nczsKKyAgICAgICAgZm9ybWF0X2NvZGUgPSAnZic7CisgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gKi8KKyAgICBjYXNlICdmJzoKKyAgICAgICAgbW9kZSA9IDM7CisgICAgICAgIGJyZWFrOworCisgICAgLyogZ2VuZXJhbCAqLworICAgIGNhc2UgJ0cnOgorICAgICAgICBmbG9hdF9zdHJpbmdzID0gdWNfZmxvYXRfc3RyaW5nczsKKyAgICAgICAgZm9ybWF0X2NvZGUgPSAnZyc7CisgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gKi8KKyAgICBjYXNlICdnJzoKKyAgICAgICAgbW9kZSA9IDI7CisgICAgICAgIC8qIHByZWNpc2lvbiAwIG1ha2VzIG5vIHNlbnNlIGZvciAnZycgZm9ybWF0OyBpbnRlcnByZXQgYXMgMSAqLworICAgICAgICBpZiAocHJlY2lzaW9uID09IDApCisgICAgICAgICAgICBwcmVjaXNpb24gPSAxOworICAgICAgICBicmVhazsKKworICAgIC8qIHJlcHIgZm9ybWF0ICovCisgICAgY2FzZSAncic6CisgICAgICAgIG1vZGUgPSAwOworICAgICAgICAvKiBTdXBwbGllZCBwcmVjaXNpb24gaXMgdW51c2VkLCBtdXN0IGJlIDAuICovCisgICAgICAgIGlmIChwcmVjaXNpb24gIT0gMCkgeworICAgICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gZm9ybWF0X2Zsb2F0X3Nob3J0KHZhbCwgZm9ybWF0X2NvZGUsIG1vZGUsIHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICYgUHlfRFRTRl9TSUdOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgJiBQeV9EVFNGX0FERF9ET1RfMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICYgUHlfRFRTRl9BTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdF9zdHJpbmdzLCB0eXBlKTsKK30KKyNlbmRpZiAvKiBpZmRlZiBQWV9OT19TSE9SVF9GTE9BVF9SRVBSICovCmRpZmYgLS1naXQgYS9QeXRob24vcHl0aG9ucnVuLmMgYi9QeXRob24vcHl0aG9ucnVuLmMKaW5kZXggMWE3ZTAxZS4uODdmZmIzOSAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5dGhvbnJ1bi5jCisrKyBiL1B5dGhvbi9weXRob25ydW4uYwpAQCAtMTg0LDYgKzE4NCw5IEBACiAgICAgaWYgKCFfUHlJbnRfSW5pdCgpKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGludHMiKTsKIAorICAgIGlmICghX1B5TG9uZ19Jbml0KCkpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgbG9uZ3MiKTsKKwogICAgIGlmICghUHlCeXRlQXJyYXlfSW5pdCgpKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGJ5dGVhcnJheSIpOwogCkBAIC02OTgsNyArNzAxLDcgQEAKICAgICAgICAgaWYgKGJpbW9kID09IE5VTEwgfHwKICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJfX2J1aWx0aW5zX18iLCBiaW1vZCkgIT0gMCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGFkZCBfX2J1aWx0aW5zX18gdG8gX19tYWluX18iKTsKLSAgICAgICAgUHlfREVDUkVGKGJpbW9kKTsKKyAgICAgICAgUHlfWERFQ1JFRihiaW1vZCk7CiAgICAgfQogfQogCkBAIC03MDcsMjAgKzcxMCwxMiBAQAogc3RhdGljIHZvaWQKIGluaXRzaXRlKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpmOworICAgIFB5T2JqZWN0ICptOwogICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInNpdGUiKTsKICAgICBpZiAobSA9PSBOVUxMKSB7Ci0gICAgICAgIGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOwotICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpIHsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygKLSAgICAgICAgICAgICAgICAiJ2ltcG9ydCBzaXRlJyBmYWlsZWQ7IHRyYWNlYmFjazpcbiIsIGYpOwotICAgICAgICAgICAgUHlFcnJfUHJpbnQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygKLSAgICAgICAgICAgICAgIidpbXBvcnQgc2l0ZScgZmFpbGVkOyB1c2UgLXYgZm9yIHRyYWNlYmFja1xuIiwgZik7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIFB5X0ZpbmFsaXplKCk7CisgICAgICAgIGV4aXQoMSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9ERUNSRUYobSk7CkBAIC0xMDUwLDcgKzEwNDUsNyBAQAogewogICAgIGNoYXIgKm5sOwogICAgIGlmIChvZmZzZXQgPj0gMCkgewotICAgICAgICBpZiAob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPT0gKGludClzdHJsZW4odGV4dCkpCisgICAgICAgIGlmIChvZmZzZXQgPiAwICYmIG9mZnNldCA9PSBzdHJsZW4odGV4dCkgJiYgdGV4dFtvZmZzZXQgLSAxXSA9PSAnXG4nKQogICAgICAgICAgICAgb2Zmc2V0LS07CiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIG5sID0gc3RyY2hyKHRleHQsICdcbicpOwpAQCAtMTE1NCw3ICsxMTQ5LDcgQEAKICAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJsYXN0X3RyYWNlYmFjayIsIHRiKTsKICAgICB9CiAgICAgaG9vayA9IFB5U3lzX0dldE9iamVjdCgiZXhjZXB0aG9vayIpOwotICAgIGlmIChob29rKSB7CisgICAgaWYgKGhvb2sgJiYgaG9vayAhPSBQeV9Ob25lKSB7CiAgICAgICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9QYWNrKDMsCiAgICAgICAgICAgICBleGNlcHRpb24sIHYsIHRiID8gdGIgOiBQeV9Ob25lKTsKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGhvb2ssIGFyZ3MpOwpAQCAtMTIwNCw3ICsxMTk5LDcgQEAKICAgICBpbnQgZXJyID0gMDsKICAgICBQeU9iamVjdCAqZiA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CiAgICAgUHlfSU5DUkVGKHZhbHVlKTsKLSAgICBpZiAoZiA9PSBOVUxMKQorICAgIGlmIChmID09IE5VTEwgfHwgZiA9PSBQeV9Ob25lKQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxvc3Qgc3lzLnN0ZGVyclxuIik7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChQeV9GbHVzaExpbmUoKSkKZGlmZiAtLWdpdCBhL1B5dGhvbi9zdHJ0b2QuYyBiL1B5dGhvbi9zdHJ0b2QuYwppbmRleCA2Nzk4ZWZhLi5lZTU1ODk4IDEwMDY0NAotLS0gYS9QeXRob24vc3RydG9kLmMKKysrIGIvUHl0aG9uL3N0cnRvZC5jCkBAIC0xLDMgKzEsNiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKICNpbmNsdWRlICJweWNvbmZpZy5oIgogCiAvKiBjb21wLnNvdXJjZXMubWlzYyBzdHJ0b2QoKSwgYXMgcG9zdGVkIGluIGNvbXAubGFuZy50Y2wsCkBAIC03Nyw3ICs4MCw3IEBACiAgICAgZHAgPSBidWZmZXI7CiAgICAgKmRwKysgPSAnMCc7ICpkcCsrID0gJy4nOwogICAgIGJ1Zm9yZyA9IGRwLCBidWZsaW0gPSBidWZmZXIrNDg7Ci0gICAgZm9yIChzYXZlID0gc3A7IGMgPSAqc3A7IHNwKyspCisgICAgZm9yIChzYXZlID0gc3A7IChjID0gKnNwKTsgc3ArKykKICAgICAgICAgaWYgKGMgPT0gJy4nKSB7CiAgICAgICAgIGlmIChkb3RzZWVuKSBicmVhazsKICAgICAgICAgZG90c2VlbisrOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N0cnVjdG1lbWJlci5jIGIvUHl0aG9uL3N0cnVjdG1lbWJlci5jCmluZGV4IDRjZWY0MmYuLmUzNDdiNTEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9zdHJ1Y3RtZW1iZXIuYworKysgYi9QeXRob24vc3RydWN0bWVtYmVyLmMKQEAgLTI1NywxMiArMjU3LDEzIEBACiAgICAgICAgIH0KICAgICBjYXNlIFRfVUlOVDp7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgdWxvbmdfdmFsID0gUHlMb25nX0FzVW5zaWduZWRMb25nKHYpOwotICAgICAgICBpZiAoKHVsb25nX3ZhbCA9PSAodW5zaWduZWQgaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGlmICgodWxvbmdfdmFsID09ICh1bnNpZ25lZCBsb25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICAvKiBYWFg6IEZvciBjb21wYXRpYmlsaXR5LCBhY2NlcHQgbmVnYXRpdmUgaW50IHZhbHVlcwogICAgICAgICAgICAgICAgYXMgd2VsbC4gKi8KICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICB1bG9uZ192YWwgPSBQeUxvbmdfQXNMb25nKHYpOwotICAgICAgICAgICAgaWYgKCh1bG9uZ192YWwgPT0gKHVuc2lnbmVkIGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGlmICgodWxvbmdfdmFsID09ICh1bnNpZ25lZCBsb25nKS0xKSAmJgorICAgICAgICAgICAgICAgIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQgKilhZGRyID0gKHVuc2lnbmVkIGludCl1bG9uZ192YWw7CiAgICAgICAgICAgICBXQVJOKCJXcml0aW5nIG5lZ2F0aXZlIHZhbHVlIGludG8gdW5zaWduZWQgZmllbGQiKTsKQEAgLTI4Niw3ICsyODcsNyBAQAogICAgICAgICAgICAgICAgYXMgd2VsbC4gKi8KICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAqKHVuc2lnbmVkIGxvbmcqKWFkZHIgPSBQeUxvbmdfQXNMb25nKHYpOwotICAgICAgICAgICAgaWYgKCgqKHVuc2lnbmVkIGxvbmcqKWFkZHIgPT0gKHVuc2lnbmVkIGludCktMSkKKyAgICAgICAgICAgIGlmICgoKih1bnNpZ25lZCBsb25nKilhZGRyID09ICh1bnNpZ25lZCBsb25nKS0xKQogICAgICAgICAgICAgICAgICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgV0FSTigiV3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSBpbnRvIHVuc2lnbmVkIGZpZWxkIik7CmRpZmYgLS1naXQgYS9QeXRob24vc3ltdGFibGUuYyBiL1B5dGhvbi9zeW10YWJsZS5jCmluZGV4IGYzMGJhMGYuLjUxYjU5ZjAgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9zeW10YWJsZS5jCisrKyBiL1B5dGhvbi9zeW10YWJsZS5jCkBAIC0zMiw3ICszMiw2IEBACiAgICAgICAgIGdvdG8gZmFpbDsKICAgICBzdGUtPnN0ZV90YWJsZSA9IHN0OwogICAgIHN0ZS0+c3RlX2lkID0gazsKLSAgICBzdGUtPnN0ZV90bXBuYW1lID0gMDsKIAogICAgIHN0ZS0+c3RlX25hbWUgPSBuYW1lOwogICAgIFB5X0lOQ1JFRihuYW1lKTsKQEAgLTE2OCw2ICsxNjcsOCBAQAogc3RhdGljIGludCBzeW10YWJsZV92aXNpdF9zdG10KHN0cnVjdCBzeW10YWJsZSAqc3QsIHN0bXRfdHkgcyk7CiBzdGF0aWMgaW50IHN5bXRhYmxlX3Zpc2l0X2V4cHIoc3RydWN0IHN5bXRhYmxlICpzdCwgZXhwcl90eSBzKTsKIHN0YXRpYyBpbnQgc3ltdGFibGVfdmlzaXRfZ2VuZXhwKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4cHJfdHkgcyk7CitzdGF0aWMgaW50IHN5bXRhYmxlX3Zpc2l0X3NldGNvbXAoc3RydWN0IHN5bXRhYmxlICpzdCwgZXhwcl90eSBlKTsKK3N0YXRpYyBpbnQgc3ltdGFibGVfdmlzaXRfZGljdGNvbXAoc3RydWN0IHN5bXRhYmxlICpzdCwgZXhwcl90eSBlKTsKIHN0YXRpYyBpbnQgc3ltdGFibGVfdmlzaXRfYXJndW1lbnRzKHN0cnVjdCBzeW10YWJsZSAqc3QsIGFyZ3VtZW50c190eSk7CiBzdGF0aWMgaW50IHN5bXRhYmxlX3Zpc2l0X2V4Y2VwdGhhbmRsZXIoc3RydWN0IHN5bXRhYmxlICpzdCwgZXhjZXB0aGFuZGxlcl90eSk7CiBzdGF0aWMgaW50IHN5bXRhYmxlX3Zpc2l0X2FsaWFzKHN0cnVjdCBzeW10YWJsZSAqc3QsIGFsaWFzX3R5KTsKQEAgLTE3OSw3ICsxODAsOCBAQAogc3RhdGljIGludCBzeW10YWJsZV9pbXBsaWNpdF9hcmcoc3RydWN0IHN5bXRhYmxlICpzdCwgaW50IHBvcyk7CiAKIAotc3RhdGljIGlkZW50aWZpZXIgdG9wID0gTlVMTCwgbGFtYmRhID0gTlVMTCwgZ2VuZXhwciA9IE5VTEw7CitzdGF0aWMgaWRlbnRpZmllciB0b3AgPSBOVUxMLCBsYW1iZGEgPSBOVUxMLCBnZW5leHByID0gTlVMTCwgc2V0Y29tcCA9IE5VTEwsCisgICAgZGljdGNvbXAgPSBOVUxMOwogCiAjZGVmaW5lIEdFVF9JREVOVElGSUVSKFZBUikgXAogICAgICgoVkFSKSA/IChWQVIpIDogKChWQVIpID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygjIFZBUikpKQpAQCAtMjA0LDcgKzIwNiw2IEBACiAgICAgaWYgKChzdC0+c3Rfc3ltYm9scyA9IFB5RGljdF9OZXcoKSkgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOwogICAgIHN0LT5zdF9jdXIgPSBOVUxMOwotICAgIHN0LT5zdF90bXBuYW1lID0gMDsKICAgICBzdC0+c3RfcHJpdmF0ZSA9IE5VTEw7CiAgICAgcmV0dXJuIHN0OwogIGZhaWw6CkBAIC00OTUsNyArNDk2LDcgQEAKICAgICBjYXNlIE9QVF9JTVBPUlRfU1RBUjoKICAgICAgICAgUHlPU19zbnByaW50ZihidWYsIHNpemVvZihidWYpLAogICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgKiBpcyBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiAnJS4xMDBzJyAiCi0gICAgICAgICAgICAgICAgICAgICAgImJlY2F1c2UgaXQgaXMgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICJiZWNhdXNlIGl0ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcoc3RlLT5zdGVfbmFtZSksIHRyYWlsZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE9QVF9CQVJFX0VYRUM6CkBAIC03MDIsNyArNzAzLDggQEAKICAgICAgICAgICAgIHN0ZS0+c3RlX2NoaWxkX2ZyZWUgPSAxOwogICAgIH0KIAotICAgIFB5RGljdF9VcGRhdGUobmV3ZnJlZSwgYWxsZnJlZSk7CisgICAgaWYgKFB5RGljdF9VcGRhdGUobmV3ZnJlZSwgYWxsZnJlZSkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmIChzdGUtPnN0ZV90eXBlID09IEZ1bmN0aW9uQmxvY2sgJiYgIWFuYWx5emVfY2VsbHMoc2NvcGUsIG5ld2ZyZWUpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmICghdXBkYXRlX3N5bWJvbHMoc3RlLT5zdGVfc3ltYm9scywgc2NvcGUsIGJvdW5kLCBuZXdmcmVlLApAQCAtODQ2LDcgKzg0OCw3IEBACiAgICAgc3QtPnN0X2N1ciA9IHN0ZV9uZXcoc3QsIG5hbWUsIGJsb2NrLCBhc3QsIGxpbmVubyk7CiAgICAgaWYgKHN0LT5zdF9jdXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG5hbWUgPT0gR0VUX0lERU5USUZJRVIodG9wKSkKKyAgICBpZiAoYmxvY2sgPT0gTW9kdWxlQmxvY2spCiAgICAgICAgIHN0LT5zdF9nbG9iYWwgPSBzdC0+c3RfY3VyLT5zdGVfc3ltYm9sczsKICAgICBpZiAocHJldikgewogICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChwcmV2LT5zdGVfY2hpbGRyZW4sCkBAIC05OTQsMjMgKzk5Niw2IEBACiB9CiAKIHN0YXRpYyBpbnQKLXN5bXRhYmxlX25ld190bXBuYW1lKHN0cnVjdCBzeW10YWJsZSAqc3QpCi17Ci0gICAgY2hhciB0bXBuYW1lWzI1Nl07Ci0gICAgaWRlbnRpZmllciB0bXA7Ci0KLSAgICBQeU9TX3NucHJpbnRmKHRtcG5hbWUsIHNpemVvZih0bXBuYW1lKSwgIl9bJWRdIiwKLSAgICAgICAgICAgICAgICAgICsrc3QtPnN0X2N1ci0+c3RlX3RtcG5hbWUpOwotICAgIHRtcCA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcodG1wbmFtZSk7Ci0gICAgaWYgKCF0bXApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgdG1wLCBERUZfTE9DQUwpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBQeV9ERUNSRUYodG1wKTsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludAogc3ltdGFibGVfdmlzaXRfc3RtdChzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBzdG10X3R5IHMpCiB7CiAgICAgc3dpdGNoIChzLT5raW5kKSB7CkBAIC0xMTgzLDEyICsxMTY4LDggQEAKICAgICAgICAgLyogbm90aGluZyB0byBkbyBoZXJlICovCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2l0aF9raW5kOgotICAgICAgICBpZiAoIXN5bXRhYmxlX25ld190bXBuYW1lKHN0KSkKLSAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBWSVNJVChzdCwgZXhwciwgcy0+di5XaXRoLmNvbnRleHRfZXhwcik7CiAgICAgICAgIGlmIChzLT52LldpdGgub3B0aW9uYWxfdmFycykgewotICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9uZXdfdG1wbmFtZShzdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBWSVNJVChzdCwgZXhwciwgcy0+di5XaXRoLm9wdGlvbmFsX3ZhcnMpOwogICAgICAgICB9CiAgICAgICAgIFZJU0lUX1NFUShzdCwgc3RtdCwgcy0+di5XaXRoLmJvZHkpOwpAQCAtMTIxMiw4ICsxMTkzLDcgQEAKICAgICAgICAgVklTSVQoc3QsIGV4cHIsIGUtPnYuVW5hcnlPcC5vcGVyYW5kKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBMYW1iZGFfa2luZDogewotICAgICAgICBpZiAoIUdFVF9JREVOVElGSUVSKGxhbWJkYSkgfHwKLSAgICAgICAgICAgICFzeW10YWJsZV9hZGRfZGVmKHN0LCBsYW1iZGEsIERFRl9MT0NBTCkpCisgICAgICAgIGlmICghR0VUX0lERU5USUZJRVIobGFtYmRhKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoZS0+di5MYW1iZGEuYXJncy0+ZGVmYXVsdHMpCiAgICAgICAgICAgICBWSVNJVF9TRVEoc3QsIGV4cHIsIGUtPnYuTGFtYmRhLmFyZ3MtPmRlZmF1bHRzKTsKQEAgLTEyMzUsOSArMTIxNSwxMCBAQAogICAgICAgICBWSVNJVF9TRVEoc3QsIGV4cHIsIGUtPnYuRGljdC5rZXlzKTsKICAgICAgICAgVklTSVRfU0VRKHN0LCBleHByLCBlLT52LkRpY3QudmFsdWVzKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXRfa2luZDoKKyAgICAgICAgVklTSVRfU0VRKHN0LCBleHByLCBlLT52LlNldC5lbHRzKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBMaXN0Q29tcF9raW5kOgotICAgICAgICBpZiAoIXN5bXRhYmxlX25ld190bXBuYW1lKHN0KSkKLSAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBWSVNJVChzdCwgZXhwciwgZS0+di5MaXN0Q29tcC5lbHQpOwogICAgICAgICBWSVNJVF9TRVEoc3QsIGNvbXByZWhlbnNpb24sIGUtPnYuTGlzdENvbXAuZ2VuZXJhdG9ycyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTI0NSw2ICsxMjI2LDE0IEBACiAgICAgICAgIGlmICghc3ltdGFibGVfdmlzaXRfZ2VuZXhwKHN0LCBlKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFNldENvbXBfa2luZDoKKyAgICAgICAgaWYgKCFzeW10YWJsZV92aXNpdF9zZXRjb21wKHN0LCBlKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERpY3RDb21wX2tpbmQ6CisgICAgICAgIGlmICghc3ltdGFibGVfdmlzaXRfZGljdGNvbXAoc3QsIGUpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgWWllbGRfa2luZDoKICAgICAgICAgaWYgKGUtPnYuWWllbGQudmFsdWUpCiAgICAgICAgICAgICBWSVNJVChzdCwgZXhwciwgZS0+di5ZaWVsZC52YWx1ZSk7CkBAIC0xNDA3LDcgKzEzOTYsNyBAQAogc3ltdGFibGVfdmlzaXRfYWxpYXMoc3RydWN0IHN5bXRhYmxlICpzdCwgYWxpYXNfdHkgYSkKIHsKICAgICAvKiBDb21wdXRlIHN0b3JlX25hbWUsIHRoZSBuYW1lIGFjdHVhbGx5IGJvdW5kIGJ5IHRoZSBpbXBvcnQKLSAgICAgICBvcGVyYXRpb24uICBJdCBpcyBkaWZlcmVudCB0aGFuIGEtPm5hbWUgd2hlbiBhLT5uYW1lIGlzIGEKKyAgICAgICBvcGVyYXRpb24uICBJdCBpcyBkaWZmZXJlbnQgdGhhbiBhLT5uYW1lIHdoZW4gYS0+bmFtZSBpcyBhCiAgICAgICAgZG90dGVkIHBhY2thZ2UgbmFtZSAoZS5nLiBzcGFtLmVnZ3MpCiAgICAgKi8KICAgICBQeU9iamVjdCAqc3RvcmVfbmFtZTsKQEAgLTE0ODYsMjcgKzE0NzUsODAgQEAKIH0KIAogc3RhdGljIGludAotc3ltdGFibGVfdmlzaXRfZ2VuZXhwKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4cHJfdHkgZSkKK3N5bXRhYmxlX25ld190bXBuYW1lKHN0cnVjdCBzeW10YWJsZSAqc3QpCiB7CisgICAgY2hhciB0bXBuYW1lWzI1Nl07CisgICAgaWRlbnRpZmllciB0bXA7CisKKyAgICBQeU9TX3NucHJpbnRmKHRtcG5hbWUsIHNpemVvZih0bXBuYW1lKSwgIl9bJWRdIiwKKyAgICAgICAgICAgICAgICAgICsrc3QtPnN0X2N1ci0+c3RlX3RtcG5hbWUpOworICAgIHRtcCA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcodG1wbmFtZSk7CisgICAgaWYgKCF0bXApCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgdG1wLCBERUZfTE9DQUwpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBQeV9ERUNSRUYodG1wKTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc3ltdGFibGVfaGFuZGxlX2NvbXByZWhlbnNpb24oc3RydWN0IHN5bXRhYmxlICpzdCwgZXhwcl90eSBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciBzY29wZV9uYW1lLCBhc2RsX3NlcSAqZ2VuZXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgZWx0LCBleHByX3R5IHZhbHVlKQoreworICAgIGludCBpc19nZW5lcmF0b3IgPSAoZS0+a2luZCA9PSBHZW5lcmF0b3JFeHBfa2luZCk7CisgICAgaW50IG5lZWRzX3RtcCA9ICFpc19nZW5lcmF0b3I7CiAgICAgY29tcHJlaGVuc2lvbl90eSBvdXRlcm1vc3QgPSAoKGNvbXByZWhlbnNpb25fdHkpCi0gICAgICAgICAgICAgICAgICAgICAoYXNkbF9zZXFfR0VUKGUtPnYuR2VuZXJhdG9yRXhwLmdlbmVyYXRvcnMsIDApKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9HRVQoZ2VuZXJhdG9ycywgMCkpOwogICAgIC8qIE91dGVybW9zdCBpdGVyYXRvciBpcyBldmFsdWF0ZWQgaW4gY3VycmVudCBzY29wZSAqLwogICAgIFZJU0lUKHN0LCBleHByLCBvdXRlcm1vc3QtPml0ZXIpOwotICAgIC8qIENyZWF0ZSBnZW5lcmF0b3Igc2NvcGUgZm9yIHRoZSByZXN0ICovCi0gICAgaWYgKCFHRVRfSURFTlRJRklFUihnZW5leHByKSB8fAotICAgICAgICAhc3ltdGFibGVfZW50ZXJfYmxvY2soc3QsIGdlbmV4cHIsIEZ1bmN0aW9uQmxvY2ssICh2b2lkICopZSwgZS0+bGluZW5vKSkgeworICAgIC8qIENyZWF0ZSBjb21wcmVoZW5zaW9uIHNjb3BlIGZvciB0aGUgcmVzdCAqLworICAgIGlmICghc2NvcGVfbmFtZSB8fAorICAgICAgICAhc3ltdGFibGVfZW50ZXJfYmxvY2soc3QsIHNjb3BlX25hbWUsIEZ1bmN0aW9uQmxvY2ssICh2b2lkICopZSwgMCkpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHN0LT5zdF9jdXItPnN0ZV9nZW5lcmF0b3IgPSAxOworICAgIHN0LT5zdF9jdXItPnN0ZV9nZW5lcmF0b3IgPSBpc19nZW5lcmF0b3I7CiAgICAgLyogT3V0ZXJtb3N0IGl0ZXIgaXMgcmVjZWl2ZWQgYXMgYW4gYXJndW1lbnQgKi8KICAgICBpZiAoIXN5bXRhYmxlX2ltcGxpY2l0X2FyZyhzdCwgMCkpIHsKICAgICAgICAgc3ltdGFibGVfZXhpdF9ibG9jayhzdCwgKHZvaWQgKillKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIC8qIEFsbG9jYXRlIHRlbXBvcmFyeSBuYW1lIGlmIG5lZWRlZCAqLworICAgIGlmIChuZWVkc190bXAgJiYgIXN5bXRhYmxlX25ld190bXBuYW1lKHN0KSkgeworICAgICAgICBzeW10YWJsZV9leGl0X2Jsb2NrKHN0LCAodm9pZCAqKWUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgVklTSVRfSU5fQkxPQ0soc3QsIGV4cHIsIG91dGVybW9zdC0+dGFyZ2V0LCAodm9pZCopZSk7CiAgICAgVklTSVRfU0VRX0lOX0JMT0NLKHN0LCBleHByLCBvdXRlcm1vc3QtPmlmcywgKHZvaWQqKWUpOwogICAgIFZJU0lUX1NFUV9UQUlMX0lOX0JMT0NLKHN0LCBjb21wcmVoZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuR2VuZXJhdG9yRXhwLmdlbmVyYXRvcnMsIDEsICh2b2lkKillKTsKLSAgICBWSVNJVF9JTl9CTE9DSyhzdCwgZXhwciwgZS0+di5HZW5lcmF0b3JFeHAuZWx0LCAodm9pZCopZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9ycywgMSwgKHZvaWQqKWUpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgVklTSVRfSU5fQkxPQ0soc3QsIGV4cHIsIHZhbHVlLCAodm9pZCopZSk7CisgICAgVklTSVRfSU5fQkxPQ0soc3QsIGV4cHIsIGVsdCwgKHZvaWQqKWUpOwogICAgIHJldHVybiBzeW10YWJsZV9leGl0X2Jsb2NrKHN0LCAodm9pZCAqKWUpOwogfQorCitzdGF0aWMgaW50CitzeW10YWJsZV92aXNpdF9nZW5leHAoc3RydWN0IHN5bXRhYmxlICpzdCwgZXhwcl90eSBlKQoreworICAgIHJldHVybiBzeW10YWJsZV9oYW5kbGVfY29tcHJlaGVuc2lvbihzdCwgZSwgR0VUX0lERU5USUZJRVIoZ2VuZXhwciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuR2VuZXJhdG9yRXhwLmdlbmVyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuR2VuZXJhdG9yRXhwLmVsdCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK3N5bXRhYmxlX3Zpc2l0X3NldGNvbXAoc3RydWN0IHN5bXRhYmxlICpzdCwgZXhwcl90eSBlKQoreworICAgIHJldHVybiBzeW10YWJsZV9oYW5kbGVfY29tcHJlaGVuc2lvbihzdCwgZSwgR0VUX0lERU5USUZJRVIoc2V0Y29tcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuU2V0Q29tcC5nZW5lcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LlNldENvbXAuZWx0LCBOVUxMKTsKK30KKworc3RhdGljIGludAorc3ltdGFibGVfdmlzaXRfZGljdGNvbXAoc3RydWN0IHN5bXRhYmxlICpzdCwgZXhwcl90eSBlKQoreworICAgIHJldHVybiBzeW10YWJsZV9oYW5kbGVfY29tcHJlaGVuc2lvbihzdCwgZSwgR0VUX0lERU5USUZJRVIoZGljdGNvbXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkRpY3RDb21wLmdlbmVyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuRGljdENvbXAua2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkRpY3RDb21wLnZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1B5dGhvbi9zeXNtb2R1bGUuYyBiL1B5dGhvbi9zeXNtb2R1bGUuYwppbmRleCA5MWZlMjI0Li45N2NlOGNkIDEwMDY0NAotLS0gYS9QeXRob24vc3lzbW9kdWxlLmMKKysrIGIvUHl0aG9uL3N5c21vZHVsZS5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIFB5RG9jX1NUUlZBUihkaXNwbGF5aG9va19kb2MsCiAiZGlzcGxheWhvb2sob2JqZWN0KSAtPiBOb25lXG4iCiAiXG4iCi0iUHJpbnQgYW4gb2JqZWN0IHRvIHN5cy5zdGRvdXQgYW5kIGFsc28gc2F2ZSBpdCBpbiBfX2J1aWx0aW5fXy5cbiIKKyJQcmludCBhbiBvYmplY3QgdG8gc3lzLnN0ZG91dCBhbmQgYWxzbyBzYXZlIGl0IGluIF9fYnVpbHRpbl9fLl9cbiIKICk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NTcsMjYgKzU1Nyw2NSBAQAogUHlEb2NfU1RSVkFSKGdldHdpbmRvd3N2ZXJzaW9uX2RvYywKICJnZXR3aW5kb3dzdmVyc2lvbigpXG5cCiBcblwKLVJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcnVubmluZyB2ZXJzaW9uIG9mIFdpbmRvd3MuXG5cCi1UaGUgcmVzdWx0IGlzIGEgdHVwbGUgb2YgKG1ham9yLCBtaW5vciwgYnVpbGQsIHBsYXRmb3JtLCB0ZXh0KVxuXAotQWxsIGVsZW1lbnRzIGFyZSBudW1iZXJzLCBleGNlcHQgdGV4dCB3aGljaCBpcyBhIHN0cmluZy5cblwKLVBsYXRmb3JtIG1heSBiZSAwIGZvciB3aW4zMnMsIDEgZm9yIFdpbmRvd3MgOXgvTUUsIDIgZm9yIFdpbmRvd3MgTlQvMjAwMC9YUFxuXAotIgorUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBydW5uaW5nIHZlcnNpb24gb2YgV2luZG93cyBhcyBhIG5hbWVkIHR1cGxlLlxuXAorVGhlIG1lbWJlcnMgYXJlIG5hbWVkOiBtYWpvciwgbWlub3IsIGJ1aWxkLCBwbGF0Zm9ybSwgc2VydmljZV9wYWNrLFxuXAorc2VydmljZV9wYWNrX21ham9yLCBzZXJ2aWNlX3BhY2tfbWlub3IsIHN1aXRlX21hc2ssIGFuZCBwcm9kdWN0X3R5cGUuIEZvclxuXAorYmFja3dhcmQgY29tcGF0aWJpbGl5LCBvbmx5IHRoZSBmaXJzdCA1IGl0ZW1zIGFyZSBhdmFpbGFibGUgYnkgaW5kZXhpbmcuXG5cCitBbGwgZWxlbWVudHMgYXJlIG51bWJlcnMsIGV4Y2VwdCBzZXJ2aWNlX3BhY2sgd2hpY2ggaXMgYSBzdHJpbmcuIFBsYXRmb3JtXG5cCittYXkgYmUgMCBmb3Igd2luMzJzLCAxIGZvciBXaW5kb3dzIDl4L01FLCAyIGZvciBXaW5kb3dzIE5ULzIwMDAvWFAvVmlzdGEvNyxcblwKKzMgZm9yIFdpbmRvd3MgQ0UuIFByb2R1Y3RfdHlwZSBtYXkgYmUgMSBmb3IgYSB3b3Jrc3RhdGlvbiwgMiBmb3IgYSBkb21haW5cblwKK2NvbnRyb2xsZXIsIDMgZm9yIGEgc2VydmVyLiIKICk7CiAKK3N0YXRpYyBQeVR5cGVPYmplY3QgV2luZG93c1ZlcnNpb25UeXBlID0gezAsIDAsIDAsIDAsIDAsIDB9OworCitzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCB3aW5kb3dzX3ZlcnNpb25fZmllbGRzW10gPSB7CisgICAgeyJtYWpvciIsICJNYWpvciB2ZXJzaW9uIG51bWJlciJ9LAorICAgIHsibWlub3IiLCAiTWlub3IgdmVyc2lvbiBudW1iZXIifSwKKyAgICB7ImJ1aWxkIiwgIkJ1aWxkIG51bWJlciJ9LAorICAgIHsicGxhdGZvcm0iLCAiT3BlcmF0aW5nIHN5c3RlbSBwbGF0Zm9ybSJ9LAorICAgIHsic2VydmljZV9wYWNrIiwgIkxhdGVzdCBTZXJ2aWNlIFBhY2sgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0ifSwKKyAgICB7InNlcnZpY2VfcGFja19tYWpvciIsICJTZXJ2aWNlIFBhY2sgbWFqb3IgdmVyc2lvbiBudW1iZXIifSwKKyAgICB7InNlcnZpY2VfcGFja19taW5vciIsICJTZXJ2aWNlIFBhY2sgbWlub3IgdmVyc2lvbiBudW1iZXIifSwKKyAgICB7InN1aXRlX21hc2siLCAiQml0IG1hc2sgaWRlbnRpZnlpbmcgYXZhaWxhYmxlIHByb2R1Y3Qgc3VpdGVzIn0sCisgICAgeyJwcm9kdWN0X3R5cGUiLCAiU3lzdGVtIHByb2R1Y3QgdHlwZSJ9LAorICAgIHswfQorfTsKKworc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRGVzYyB3aW5kb3dzX3ZlcnNpb25fZGVzYyA9IHsKKyAgICAic3lzLmdldHdpbmRvd3N2ZXJzaW9uIiwgIC8qIG5hbWUgKi8KKyAgICBnZXR3aW5kb3dzdmVyc2lvbl9kb2MsICAgIC8qIGRvYyAqLworICAgIHdpbmRvd3NfdmVyc2lvbl9maWVsZHMsICAgLyogZmllbGRzICovCisgICAgNSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgdGhlIGZpcnN0IDUgaXRlbXMgYXJlIGFjY2Vzc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpYSBpbmRleGluZywgdGhlIHJlc3QgYXJlIG5hbWUgb25seSAqLworfTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIHN5c19nZXR3aW5kb3dzdmVyc2lvbihQeU9iamVjdCAqc2VsZikKIHsKLSAgICBPU1ZFUlNJT05JTkZPIHZlcjsKKyAgICBQeU9iamVjdCAqdmVyc2lvbjsKKyAgICBpbnQgcG9zID0gMDsKKyAgICBPU1ZFUlNJT05JTkZPRVggdmVyOwogICAgIHZlci5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHZlcik7Ci0gICAgaWYgKCFHZXRWZXJzaW9uRXgoJnZlcikpCisgICAgaWYgKCFHZXRWZXJzaW9uRXgoKE9TVkVSU0lPTklORk8qKSAmdmVyKSkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJISEhIcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdmVyLmR3TWFqb3JWZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZlci5kd01pbm9yVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2ZXIuZHdCdWlsZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2ZXIuZHdQbGF0Zm9ybUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZlci5zekNTRFZlcnNpb24pOworCisgICAgdmVyc2lvbiA9IFB5U3RydWN0U2VxdWVuY2VfTmV3KCZXaW5kb3dzVmVyc2lvblR5cGUpOworICAgIGlmICh2ZXJzaW9uID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlJbnRfRnJvbUxvbmcodmVyLmR3TWFqb3JWZXJzaW9uKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlJbnRfRnJvbUxvbmcodmVyLmR3TWlub3JWZXJzaW9uKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlJbnRfRnJvbUxvbmcodmVyLmR3QnVpbGROdW1iZXIpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHZlcnNpb24sIHBvcysrLCBQeUludF9Gcm9tTG9uZyh2ZXIuZHdQbGF0Zm9ybUlkKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlTdHJpbmdfRnJvbVN0cmluZyh2ZXIuc3pDU0RWZXJzaW9uKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlJbnRfRnJvbUxvbmcodmVyLndTZXJ2aWNlUGFja01ham9yKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlJbnRfRnJvbUxvbmcodmVyLndTZXJ2aWNlUGFja01pbm9yKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlJbnRfRnJvbUxvbmcodmVyLndTdWl0ZU1hc2spKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHZlcnNpb24sIHBvcysrLCBQeUludF9Gcm9tTG9uZyh2ZXIud1Byb2R1Y3RUeXBlKSk7CisKKyAgICByZXR1cm4gdmVyc2lvbjsKIH0KIAogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KQEAgLTU5OSwxMiArNjM4LDE0IEBACiBQeURvY19TVFJWQVIoc2V0ZGxvcGVuZmxhZ3NfZG9jLAogInNldGRsb3BlbmZsYWdzKG4pIC0+IE5vbmVcblwKIFxuXAotU2V0IHRoZSBmbGFncyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgZGxvcGVuKCkgY2FsbHMuIEFtb25nIG90aGVyXG5cCi10aGluZ3MsIHRoaXMgd2lsbCBlbmFibGUgYSBsYXp5IHJlc29sdmluZyBvZiBzeW1ib2xzIHdoZW4gaW1wb3J0aW5nXG5cCi1hIG1vZHVsZSwgaWYgY2FsbGVkIGFzIHN5cy5zZXRkbG9wZW5mbGFncygwKVxuXAotVG8gc2hhcmUgc3ltYm9scyBhY3Jvc3MgZXh0ZW5zaW9uIG1vZHVsZXMsIGNhbGwgYXNcblwKLXN5cy5zZXRkbG9wZW5mbGFncyhkbC5SVExEX05PV3xkbC5SVExEX0dMT0JBTCkiCi0pOworU2V0IHRoZSBmbGFncyB1c2VkIGJ5IHRoZSBpbnRlcnByZXRlciBmb3IgZGxvcGVuIGNhbGxzLCBzdWNoIGFzIHdoZW4gdGhlXG5cCitpbnRlcnByZXRlciBsb2FkcyBleHRlbnNpb24gbW9kdWxlcy4gIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyB3aWxsIGVuYWJsZVxuXAorYSBsYXp5IHJlc29sdmluZyBvZiBzeW1ib2xzIHdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlLCBpZiBjYWxsZWQgYXNcblwKK3N5cy5zZXRkbG9wZW5mbGFncygwKS4gIFRvIHNoYXJlIHN5bWJvbHMgYWNyb3NzIGV4dGVuc2lvbiBtb2R1bGVzLCBjYWxsIGFzXG5cCitzeXMuc2V0ZGxvcGVuZmxhZ3MoY3R5cGVzLlJUTERfR0xPQkFMKS4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyBtb2R1bGVzXG5cCitjYW4gYmUgZWl0aGVyIGZvdW5kIGluIHRoZSBjdHlwZXMgbW9kdWxlLCBvciBpbiB0aGUgRExGQ04gbW9kdWxlLiBJZiBETEZDTlxuXAoraXMgbm90IGF2YWlsYWJsZSwgaXQgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIC91c3IvaW5jbHVkZS9kbGZjbi5oIHVzaW5nIHRoZVxuXAoraDJweSBzY3JpcHQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzeXNfZ2V0ZGxvcGVuZmxhZ3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtNjE4LDEwICs2NTksMTAgQEAKIFB5RG9jX1NUUlZBUihnZXRkbG9wZW5mbGFnc19kb2MsCiAiZ2V0ZGxvcGVuZmxhZ3MoKSAtPiBpbnRcblwKIFxuXAotUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciBkbG9wZW4oKVxuXAotY2FsbHMuIFRoZSBmbGFnIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgZGwgbW9kdWxlLiIKLSk7Ci0jZW5kaWYKK1JldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgdXNlZCBmb3IgZGxvcGVuIGNhbGxzLlxuXAorVGhlIGZsYWcgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHRoZSBjdHlwZXMgYW5kIERMRkNOIG1vZHVsZXMuIik7CisKKyNlbmRpZiAgLyogSEFWRV9ETE9QRU4gKi8KIAogI2lmZGVmIFVTRV9NQUxMT1BUCiAvKiBMaW5rIHdpdGggLWxtYWxsb2MgKG9yIC1sbXBjKSBvbiBhbiBTR0kgKi8KQEAgLTY0Myw3ICs2ODQsNyBAQAogc3lzX2dldHNpemVvZihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotICAgIHN0YXRpYyBQeU9iamVjdCAqc3RyX19zaXplb2ZfXywgKmdjX2hlYWRfc2l6ZSA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICpzdHJfX3NpemVvZl9fID0gTlVMTCwgKmdjX2hlYWRfc2l6ZSA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJvYmplY3QiLCAiZGVmYXVsdCIsIDB9OwogICAgIFB5T2JqZWN0ICpvLCAqZGZsdCA9IE5VTEw7CiAKQEAgLTY1MSwxMyArNjkyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZvLCAmZGZsdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogSW5pdGlhbGl6ZSBzdGF0aWMgdmFyaWFibGUgbmVlZGVkIGJ5IF9QeVR5cGVfTG9va3VwICovCi0gICAgaWYgKHN0cl9fc2l6ZW9mX18gPT0gTlVMTCkgewotICAgICAgICBzdHJfX3NpemVvZl9fID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiX19zaXplb2ZfXyIpOwotICAgICAgICBpZiAoc3RyX19zaXplb2ZfXyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCiAgICAgLyogSW5pdGlhbGl6ZSBzdGF0aWMgdmFyaWFibGUgZm9yIEdDIGhlYWQgc2l6ZSAqLwogICAgIGlmIChnY19oZWFkX3NpemUgPT0gTlVMTCkgewogICAgICAgICBnY19oZWFkX3NpemUgPSBQeUludF9Gcm9tU3NpemVfdChzaXplb2YoUHlHQ19IZWFkKSk7CkBAIC02NzQsMTQgKzcwOCwxOCBAQAogICAgICAgICByZXMgPSBQeUludF9Gcm9tU3NpemVfdChQeUluc3RhbmNlX1R5cGUudHBfYmFzaWNzaXplKTsKICAgICAvKiBhbGwgb3RoZXIgb2JqZWN0cyAqLwogICAgIGVsc2UgewotICAgICAgICBQeU9iamVjdCAqbWV0aG9kID0gX1B5VHlwZV9Mb29rdXAoUHlfVFlQRShvKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9fc2l6ZW9mX18pOwotICAgICAgICBpZiAobWV0aG9kID09IE5VTEwpCi0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJUeXBlICUuMTAwcyBkb2Vzbid0IGRlZmluZSBfX3NpemVvZl9fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG8pLT50cF9uYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhtZXRob2QsIG8sIE5VTEwpOworICAgICAgICBQeU9iamVjdCAqbWV0aG9kID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgIl9fc2l6ZW9mX18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cl9fc2l6ZW9mX18pOworICAgICAgICBpZiAobWV0aG9kID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX19zaXplb2ZfXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobyktPnRwX25hbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhtZXRob2QsIE5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKG1ldGhvZCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBIYXMgYSBkZWZhdWx0IHZhbHVlIGJlZW4gZ2l2ZW4/ICovCkBAIC0xMDQzLDE4ICsxMDgxLDIxIEBACiAiXG5cCiBTdGF0aWMgb2JqZWN0czpcblwKIFxuXAorZmxvYXRfaW5mbyAtLSBhIGRpY3Qgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmxvYXQgaW5wbGVtZW50YXRpb24uXG5cCitsb25nX2luZm8gLS0gYSBzdHJ1Y3Qgc2VxdWVuY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9uZyBpbXBsZW1lbnRhdGlvbi5cblwKIG1heGludCAtLSB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQgaW50ZWdlciAodGhlIHNtYWxsZXN0IGlzIC1tYXhpbnQtMSlcblwKIG1heHNpemUgLS0gdGhlIGxhcmdlc3Qgc3VwcG9ydGVkIGxlbmd0aCBvZiBjb250YWluZXJzLlxuXAogbWF4dW5pY29kZSAtLSB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQgY2hhcmFjdGVyXG5cCiBidWlsdGluX21vZHVsZV9uYW1lcyAtLSB0dXBsZSBvZiBtb2R1bGUgbmFtZXMgYnVpbHQgaW50byB0aGlzIGludGVycHJldGVyXG5cCiB2ZXJzaW9uIC0tIHRoZSB2ZXJzaW9uIG9mIHRoaXMgaW50ZXJwcmV0ZXIgYXMgYSBzdHJpbmdcblwKLXZlcnNpb25faW5mbyAtLSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFzIGEgdHVwbGVcblwKK3ZlcnNpb25faW5mbyAtLSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFzIGEgbmFtZWQgdHVwbGVcblwKIGhleHZlcnNpb24gLS0gdmVyc2lvbiBpbmZvcm1hdGlvbiBlbmNvZGVkIGFzIGEgc2luZ2xlIGludGVnZXJcblwKIGNvcHlyaWdodCAtLSBjb3B5cmlnaHQgbm90aWNlIHBlcnRhaW5pbmcgdG8gdGhpcyBpbnRlcnByZXRlclxuXAogcGxhdGZvcm0gLS0gcGxhdGZvcm0gaWRlbnRpZmllclxuXAogZXhlY3V0YWJsZSAtLSBwYXRobmFtZSBvZiB0aGlzIFB5dGhvbiBpbnRlcnByZXRlclxuXAogcHJlZml4IC0tIHByZWZpeCB1c2VkIHRvIGZpbmQgdGhlIFB5dGhvbiBsaWJyYXJ5XG5cCiBleGVjX3ByZWZpeCAtLSBwcmVmaXggdXNlZCB0byBmaW5kIHRoZSBtYWNoaW5lLXNwZWNpZmljIFB5dGhvbiBsaWJyYXJ5XG5cCitmbG9hdF9yZXByX3N0eWxlIC0tIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBzdHlsZSBvZiByZXByKCkgb3V0cHV0IGZvciBmbG9hdHNcblwKICIKICkKICNpZmRlZiBNU19XSU5ET1dTCkBAIC0xMjc5LDYgKzEzMjAsNzUgQEAKICAgICByZXR1cm4gc2VxOwogfQogCitQeURvY19TVFJWQVIodmVyc2lvbl9pbmZvX19kb2NfXywKKyJzeXMudmVyc2lvbl9pbmZvXG5cCitcblwKK1ZlcnNpb24gaW5mb3JtYXRpb24gYXMgYSBuYW1lZCB0dXBsZS4iKTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBWZXJzaW9uSW5mb1R5cGUgPSB7MCwgMCwgMCwgMCwgMCwgMH07CisKK3N0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIHZlcnNpb25faW5mb19maWVsZHNbXSA9IHsKKyAgICB7Im1ham9yIiwgIk1ham9yIHJlbGVhc2UgbnVtYmVyIn0sCisgICAgeyJtaW5vciIsICJNaW5vciByZWxlYXNlIG51bWJlciJ9LAorICAgIHsibWljcm8iLCAiUGF0Y2ggcmVsZWFzZSBudW1iZXIifSwKKyAgICB7InJlbGVhc2VsZXZlbCIsICInYWxwaGEnLCAnYmV0YScsICdjYW5kaWRhdGUnLCBvciAncmVsZWFzZScifSwKKyAgICB7InNlcmlhbCIsICJTZXJpYWwgcmVsZWFzZSBudW1iZXIifSwKKyAgICB7MH0KK307CisKK3N0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgdmVyc2lvbl9pbmZvX2Rlc2MgPSB7CisgICAgInN5cy52ZXJzaW9uX2luZm8iLCAgICAgLyogbmFtZSAqLworICAgIHZlcnNpb25faW5mb19fZG9jX18sICAgIC8qIGRvYyAqLworICAgIHZlcnNpb25faW5mb19maWVsZHMsICAgIC8qIGZpZWxkcyAqLworICAgIDUKK307CisKK3N0YXRpYyBQeU9iamVjdCAqCittYWtlX3ZlcnNpb25faW5mbyh2b2lkKQoreworICAgIFB5T2JqZWN0ICp2ZXJzaW9uX2luZm87CisgICAgY2hhciAqczsKKyAgICBpbnQgcG9zID0gMDsKKworICAgIHZlcnNpb25faW5mbyA9IFB5U3RydWN0U2VxdWVuY2VfTmV3KCZWZXJzaW9uSW5mb1R5cGUpOworICAgIGlmICh2ZXJzaW9uX2luZm8gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoZXNlIHJlbGVhc2UgbGV2ZWwgY2hlY2tzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgYW5kIGNvdmVyCisgICAgICogdGhlIGZpZWxkLCBzbyBkb24ndCBnZXQgdG9vIGZhbmN5IHdpdGggdGhlIHByZS1wcm9jZXNzb3IhCisgICAgICovCisjaWYgUFlfUkVMRUFTRV9MRVZFTCA9PSBQWV9SRUxFQVNFX0xFVkVMX0FMUEhBCisgICAgcyA9ICJhbHBoYSI7CisjZWxpZiBQWV9SRUxFQVNFX0xFVkVMID09IFBZX1JFTEVBU0VfTEVWRUxfQkVUQQorICAgIHMgPSAiYmV0YSI7CisjZWxpZiBQWV9SRUxFQVNFX0xFVkVMID09IFBZX1JFTEVBU0VfTEVWRUxfR0FNTUEKKyAgICBzID0gImNhbmRpZGF0ZSI7CisjZWxpZiBQWV9SRUxFQVNFX0xFVkVMID09IFBZX1JFTEVBU0VfTEVWRUxfRklOQUwKKyAgICBzID0gImZpbmFsIjsKKyNlbmRpZgorCisjZGVmaW5lIFNldEludEl0ZW0oZmxhZykgXAorICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbl9pbmZvLCBwb3MrKywgUHlJbnRfRnJvbUxvbmcoZmxhZykpCisjZGVmaW5lIFNldFN0ckl0ZW0oZmxhZykgXAorICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbl9pbmZvLCBwb3MrKywgUHlTdHJpbmdfRnJvbVN0cmluZyhmbGFnKSkKKworICAgIFNldEludEl0ZW0oUFlfTUFKT1JfVkVSU0lPTik7CisgICAgU2V0SW50SXRlbShQWV9NSU5PUl9WRVJTSU9OKTsKKyAgICBTZXRJbnRJdGVtKFBZX01JQ1JPX1ZFUlNJT04pOworICAgIFNldFN0ckl0ZW0ocyk7CisgICAgU2V0SW50SXRlbShQWV9SRUxFQVNFX1NFUklBTCk7CisjdW5kZWYgU2V0SW50SXRlbQorI3VuZGVmIFNldFN0ckl0ZW0KKworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0NMRUFSKHZlcnNpb25faW5mbyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gdmVyc2lvbl9pbmZvOworfQorCiBQeU9iamVjdCAqCiBfUHlTeXNfSW5pdCh2b2lkKQogewpAQCAtMTM1NCwyNSArMTQ2NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZpc2lvbikpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImRvbnRfd3JpdGVfYnl0ZWNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qm9vbF9Gcm9tTG9uZyhQeV9Eb250V3JpdGVCeXRlY29kZUZsYWcpKTsKLSAgICAvKgotICAgICAqIFRoZXNlIHJlbGVhc2UgbGV2ZWwgY2hlY2tzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgYW5kIGNvdmVyCi0gICAgICogdGhlIGZpZWxkLCBzbyBkb24ndCBnZXQgdG9vIGZhbmN5IHdpdGggdGhlIHByZS1wcm9jZXNzb3IhCi0gICAgICovCi0jaWYgUFlfUkVMRUFTRV9MRVZFTCA9PSBQWV9SRUxFQVNFX0xFVkVMX0FMUEhBCi0gICAgcyA9ICJhbHBoYSI7Ci0jZWxpZiBQWV9SRUxFQVNFX0xFVkVMID09IFBZX1JFTEVBU0VfTEVWRUxfQkVUQQotICAgIHMgPSAiYmV0YSI7Ci0jZWxpZiBQWV9SRUxFQVNFX0xFVkVMID09IFBZX1JFTEVBU0VfTEVWRUxfR0FNTUEKLSAgICBzID0gImNhbmRpZGF0ZSI7Ci0jZWxpZiBQWV9SRUxFQVNFX0xFVkVMID09IFBZX1JFTEVBU0VfTEVWRUxfRklOQUwKLSAgICBzID0gImZpbmFsIjsKLSNlbmRpZgotCi0gICAgU0VUX1NZU19GUk9NX1NUUklORygidmVyc2lvbl9pbmZvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0J1aWxkVmFsdWUoImlpaXNpIiwgUFlfTUFKT1JfVkVSU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9NSU5PUl9WRVJTSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX01JQ1JPX1ZFUlNJT04sIHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfUkVMRUFTRV9TRVJJQUwpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJhcGlfdmVyc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUludF9Gcm9tTG9uZyhQWVRIT05fQVBJX1ZFUlNJT04pKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJjb3B5cmlnaHQiLApAQCAtMTM5Myw2ICsxNDg0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qm9vbF9Gcm9tTG9uZyhQeV9QeTNrV2FybmluZ0ZsYWcpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJmbG9hdF9pbmZvIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5RmxvYXRfR2V0SW5mbygpKTsKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJsb25nX2luZm8iLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0dldEluZm8oKSk7CiAjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoIm1heHVuaWNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlJbnRfRnJvbUxvbmcoUHlVbmljb2RlX0dldE1heCgpKSk7CkBAIC0xNDI5LDYgKzE1MjIsMTUgQEAKICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIndhcm5vcHRpb25zIiwgd2Fybm9wdGlvbnMpOwogICAgIH0KIAorICAgIC8qIHZlcnNpb25faW5mbyAqLworICAgIGlmIChWZXJzaW9uSW5mb1R5cGUudHBfbmFtZSA9PSAwKQorICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZWZXJzaW9uSW5mb1R5cGUsICZ2ZXJzaW9uX2luZm9fZGVzYyk7CisgICAgU0VUX1NZU19GUk9NX1NUUklORygidmVyc2lvbl9pbmZvIiwgbWFrZV92ZXJzaW9uX2luZm8oKSk7CisgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLworICAgIFZlcnNpb25JbmZvVHlwZS50cF9pbml0ID0gTlVMTDsKKyAgICBWZXJzaW9uSW5mb1R5cGUudHBfbmV3ID0gTlVMTDsKKworICAgIC8qIGZsYWdzICovCiAgICAgaWYgKEZsYWdzVHlwZS50cF9uYW1lID09IDApCiAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkZsYWdzVHlwZSwgJmZsYWdzX2Rlc2MpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImZsYWdzIiwgbWFrZV9mbGFncygpKTsKQEAgLTE0MzYsNiArMTUzOCwyNSBAQAogICAgIEZsYWdzVHlwZS50cF9pbml0ID0gTlVMTDsKICAgICBGbGFnc1R5cGUudHBfbmV3ID0gTlVMTDsKIAorCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQorICAgIC8qIGdldHdpbmRvd3N2ZXJzaW9uICovCisgICAgaWYgKFdpbmRvd3NWZXJzaW9uVHlwZS50cF9uYW1lID09IDApCisgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJldpbmRvd3NWZXJzaW9uVHlwZSwgJndpbmRvd3NfdmVyc2lvbl9kZXNjKTsKKyAgICAvKiBwcmV2ZW50IHVzZXIgZnJvbSBjcmVhdGluZyBuZXcgaW5zdGFuY2VzICovCisgICAgV2luZG93c1ZlcnNpb25UeXBlLnRwX2luaXQgPSBOVUxMOworICAgIFdpbmRvd3NWZXJzaW9uVHlwZS50cF9uZXcgPSBOVUxMOworI2VuZGlmCisKKyAgICAvKiBmbG9hdCByZXByIHN0eWxlOiAwLjAzIChzaG9ydCkgdnMgMC4wMjk5OTk5OTk5OTk5OTk5OTkgKGxlZ2FjeSkgKi8KKyNpZm5kZWYgUFlfTk9fU0hPUlRfRkxPQVRfUkVQUgorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImZsb2F0X3JlcHJfc3R5bGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZygic2hvcnQiKSk7CisjZWxzZQorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImZsb2F0X3JlcHJfc3R5bGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZygibGVnYWN5IikpOworI2VuZGlmCisKICN1bmRlZiBTRVRfU1lTX0ZST01fU1RSSU5HCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZC5jIGIvUHl0aG9uL3RocmVhZC5jCmluZGV4IDA5N2U3MmQuLjE1NzhmODIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWQuYworKysgYi9QeXRob24vdGhyZWFkLmMKQEAgLTEzNywxMCArMTM3LDYgQEAKICNpbmNsdWRlICJ0aHJlYWRfYmVvcy5oIgogI2VuZGlmCiAKLSNpZmRlZiBXSU5DRV9USFJFQURTCi0jaW5jbHVkZSAidGhyZWFkX3dpbmNlLmgiCi0jZW5kaWYKLQogI2lmZGVmIFBMQU45X1RIUkVBRFMKICNpbmNsdWRlICJ0aHJlYWRfcGxhbjkuaCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9hdGhlb3MuaCBiL1B5dGhvbi90aHJlYWRfYXRoZW9zLmgKaW5kZXggYzM5MGI1Ny4uMjMwNTk0ZiAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9hdGhlb3MuaAorKysgYi9QeXRob24vdGhyZWFkX2F0aGVvcy5oCkBAIC0xMjgsMTcgKzEyOCwxNCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKGludCBub19jbGVhbnVwKQordm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewogICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKIAogICAgIC8qIFRocmVhZC1zYWZlIHdheSB0byByZWFkIGEgdmFyaWFibGUgd2l0aG91dCBhIG11dGV4OiAqLwogICAgIGlmIChhdG9taWNfYWRkKCZ0aHJlYWRfY291bnQsIDApID09IDApIHsKICAgICAgICAgLyogTm8gdGhyZWFkcyBhcm91bmQsIHNvIGV4aXQgbWFpbigpLiAqLwotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOworICAgICAgICBleGl0KDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIFdlJ3JlIGEgdGhyZWFkICovCiAgICAgICAgIGV4aXRfdGhyZWFkKDApOwpAQCAtMTQ2LDQ0ICsxNDMsNiBAQAogfQogCiAKLXZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotCi12b2lkIFB5VGhyZWFkX19leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDEpOwotfQotCi0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKLQotICAgIC8qIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcsIHRoZSB0aHJlYWRzIGdldCB0b3JuIGRvd24gaWYgbWFpbigpZXhpdHMuICovCi0gICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgZWxzZQotICAgICAgICBleGl0KHN0YXR1cyk7Ci19Ci0KLQotdm9pZCBQeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotCi12b2lkIFB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTk9fRVhJVF9QUk9HICovCi0KLQogLyoKICAqIExvY2sgc3VwcG9ydC4KICAqCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX2Jlb3MuaCBiL1B5dGhvbi90aHJlYWRfYmVvcy5oCmluZGV4IGVkZTQ0ZGYuLjY1ZGM0NzAgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfYmVvcy5oCisrKyBiL1B5dGhvbi90aHJlYWRfYmVvcy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAgICByZXR1cm4gKCB0aWQgIT0gQl9OQU1FX05PVF9GT1VORCA/IHRpZCA6IC0xICk7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKCBpbnQgbm9fY2xlYW51cCApCit2b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKCB2b2lkICkKIHsKICAgICBpbnQzMiB0aHJlYWRzOwogCkBAIC0xNTUsNTIgKzE1NSwxMyBAQAogCiAgICAgaWYoIHRocmVhZHMgPT0gMCApIHsKICAgICAgICAgLyogTm8gdGhyZWFkcyBhcm91bmQsIHNvIGV4aXQgbWFpbigpLiAqLwotICAgICAgICBpZiggbm9fY2xlYW51cCApIHsKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXhpdCgwKTsKLSAgICAgICAgfQorICAgICAgICBleGl0KDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIE9oLCB3ZSdyZSBhIHRocmVhZCwgbGV0J3MgdHJ5IHRvIGV4aXQgZ3JhY2VmdWxseS4uLiAqLwogICAgICAgICBleGl0X3RocmVhZCggQl9OT19FUlJPUiApOwogICAgIH0KIH0KIAotdm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCggdm9pZCApCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMCk7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfX2V4aXRfdGhyZWFkKCB2b2lkICkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyggaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXAgKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7Ci0KLSAgICAvKiBObyBuZWVkIHRvIGRvIGFueXRoaW5nLCB0aGUgdGhyZWFkcyBnZXQgdG9ybiBkb3duIGlmIG1haW4oKSBleGl0cy4gKi8KLQotICAgIGlmIChub19jbGVhbnVwKSB7Ci0gICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZXhpdChzdGF0dXMpOwotICAgIH0KLX0KLQotdm9pZCBQeVRocmVhZF9leGl0X3Byb2coIGludCBzdGF0dXMgKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3Byb2coIGludCBzdGF0dXMgKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBMb2NrIHN1cHBvcnQuCiAgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfY3RocmVhZC5oIGIvUHl0aG9uL3RocmVhZF9jdGhyZWFkLmgKaW5kZXggOGNiNTA0NC4uMWIzZTM5MCAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9jdGhyZWFkLmgKKysrIGIvUHl0aG9uL3RocmVhZF9jdGhyZWFkLmgKQEAgLTUwLDU5ICs1MCwxNSBAQAogICAgIHJldHVybiAobG9uZykgY3RocmVhZF9zZWxmKCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKLSAgICBjdGhyZWFkX2V4aXQoMCk7Ci19Ci0KIHZvaWQKIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCiB7Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMCk7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX19leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDEpOwotfQotCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljCi12b2lkIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzLCBpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF9wcm9nKCVkKSBjYWxsZWRcbiIsIHN0YXR1cykpOworICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKICAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoc3RhdHVzKTsKLSAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICBlbHNlCi0gICAgICAgIGV4aXQoc3RhdHVzKTsKKyAgICAgICAgZXhpdCgwKTsKKyAgICBjdGhyZWFkX2V4aXQoMCk7CiB9CiAKLXZvaWQKLVB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KIC8qCiAgKiBMb2NrIHN1cHBvcnQuCiAgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfZm9vYmFyLmggYi9QeXRob24vdGhyZWFkX2Zvb2Jhci5oCmluZGV4IGMyZGZmYTYuLmQyYjc4YzUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfZm9vYmFyLmgKKysrIGIvUHl0aG9uL3RocmVhZF9mb29iYXIuaApAQCAtMjksNTQgKzI5LDE0IEBACiAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7CiB9CiAKLXN0YXRpYwotdm9pZCBkb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKLX0KLQogdm9pZAogUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKIHsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMKLXZvaWQgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7CisgICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOworICAgICAgICBleGl0KDApOwogfQogCi12b2lkCi1QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogTG9jayBzdXBwb3J0LgogICovCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX2x3cC5oIGIvUHl0aG9uL3RocmVhZF9sd3AuaAppbmRleCA3NTE5Y2Q0Li5iYTdiMzdhIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX2x3cC5oCisrKyBiL1B5dGhvbi90aHJlYWRfbHdwLmgKQEAgLTQ3LDUwICs0NywxNCBAQAogICAgIHJldHVybiB0aWQudGhyZWFkX2lkOwogfQogCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKK3ZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKIHsKICAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7CiAgICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgZXhpdCgwKTsKICAgICBsd3BfZGVzdHJveShTRUxGKTsKIH0KIAotdm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDEpOwotfQotCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljIHZvaWQgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KHN0YXR1cyk7Ci0gICAgcG9kX2V4aXQoc3RhdHVzKTsKLX0KLQotdm9pZCBQeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KIC8qCiAgKiBMb2NrIHN1cHBvcnQuCiAgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfbnQuaCBiL1B5dGhvbi90aHJlYWRfbnQuaAppbmRleCA3NTEyYzczLi45Nzk2YTM0IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX250LmgKKysrIGIvUHl0aG9uL3RocmVhZF9udC5oCkBAIC0xMDQsMjAgKzEwNCwyMSBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHZvaWQgKCpmdW5jKSh2b2lkKik7CiAgICAgdm9pZCAqYXJnOwotICAgIGxvbmcgaWQ7Ci0gICAgSEFORExFIGRvbmU7CiB9IGNhbGxvYmo7CiAKLXN0YXRpYyBpbnQKKy8qIHRodW5rZXIgdG8gY2FsbCBhZGFwdCBiZXR3ZWVuIHRoZSBmdW5jdGlvbiB0eXBlIHVzZWQgYnkgdGhlIHN5c3RlbSdzCit0aHJlYWQgc3RhcnQgZnVuY3Rpb24gYW5kIHRoZSBpbnRlcm5hbGx5IHVzZWQgb25lLiAqLworI2lmIGRlZmluZWQoTVNfV0lOQ0UpCitzdGF0aWMgRFdPUkQgV0lOQVBJCisjZWxzZQorc3RhdGljIHVuc2lnbmVkIF9fc3RkY2FsbAorI2VuZGlmCiBib290c3RyYXAodm9pZCAqY2FsbCkKIHsKICAgICBjYWxsb2JqICpvYmogPSAoY2FsbG9iaiopY2FsbDsKLSAgICAvKiBjb3B5IGNhbGxvYmogc2luY2Ugb3RoZXIgdGhyZWFkIG1pZ2h0IGZyZWUgaXQgYmVmb3JlIHdlJ3JlIGRvbmUgKi8KICAgICB2b2lkICgqZnVuYykodm9pZCopID0gb2JqLT5mdW5jOwogICAgIHZvaWQgKmFyZyA9IG9iai0+YXJnOwotCi0gICAgb2JqLT5pZCA9IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKTsKLSAgICBSZWxlYXNlU2VtYXBob3JlKG9iai0+ZG9uZSwgMSwgTlVMTCk7CisgICAgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgb2JqKTsKICAgICBmdW5jKGFyZyk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xMjUsNDIgKzEyNiw1NSBAQAogbG9uZwogUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKQogewotICAgIFB5X3VpbnRwdHJfdCBydjsKLSAgICBjYWxsb2JqIG9iajsKKyAgICBIQU5ETEUgaFRocmVhZDsKKyAgICB1bnNpZ25lZCB0aHJlYWRJRDsKKyAgICBjYWxsb2JqICpvYmo7CiAKICAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIGNhbGxlZFxuIiwKICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkpKTsKICAgICBpZiAoIWluaXRpYWxpemVkKQogICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwogCi0gICAgb2JqLmlkID0gLTE7ICAgICAgICAvKiBndWlsdHkgdW50aWwgcHJvdmVkIGlubm9jZW50ICovCi0gICAgb2JqLmZ1bmMgPSBmdW5jOwotICAgIG9iai5hcmcgPSBhcmc7Ci0gICAgb2JqLmRvbmUgPSBDcmVhdGVTZW1hcGhvcmUoTlVMTCwgMCwgMSwgTlVMTCk7Ci0gICAgaWYgKG9iai5kb25lID09IE5VTEwpCisgICAgb2JqID0gKGNhbGxvYmoqKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCAwLCBzaXplb2YoKm9iaikpOworICAgIGlmICghb2JqKQogICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBydiA9IF9iZWdpbnRocmVhZChib290c3RyYXAsCisgICAgb2JqLT5mdW5jID0gZnVuYzsKKyAgICBvYmotPmFyZyA9IGFyZzsKKyNpZiBkZWZpbmVkKE1TX1dJTkNFKQorICAgIGhUaHJlYWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NBRkVfRE9XTkNBU1QoX3B5dGhyZWFkX3N0YWNrc2l6ZSwgUHlfc3NpemVfdCwgU0laRV9UKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RzdHJhcCwgb2JqLCAwLCAmdGhyZWFkSUQpOworI2Vsc2UKKyAgICBoVGhyZWFkID0gKEhBTkRMRSlfYmVnaW50aHJlYWRleCgwLAogICAgICAgICAgICAgICAgICAgICAgIFB5X1NBRkVfRE9XTkNBU1QoX3B5dGhyZWFkX3N0YWNrc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QsIGludCksCi0gICAgICAgICAgICAgICAgICAgICAgJm9iaik7Ci0gICAgaWYgKHJ2ID09IChQeV91aW50cHRyX3QpLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QsIHVuc2lnbmVkIGludCksCisgICAgICAgICAgICAgICAgICAgICAgYm9vdHN0cmFwLCBvYmosCisgICAgICAgICAgICAgICAgICAgICAgMCwgJnRocmVhZElEKTsKKyNlbmRpZgorICAgIGlmIChoVGhyZWFkID09IDApIHsKKyNpZiBkZWZpbmVkKE1TX1dJTkNFKQorICAgICAgICAvKiBTYXZlIGVycm9yIGluIHZhcmlhYmxlLCB0byBwcmV2ZW50IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQKKyAgICAgICAgICAgZnJvbSBjbG9iYmVyaW5nIGl0LiAqLworICAgICAgICB1bnNpZ25lZCBlID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQgZmFpbGVkLCB3aW4zMiBlcnJvciBjb2RlICV1XG4iLAorICAgICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksIGUpKTsKKyNlbHNlCiAgICAgICAgIC8qIEkndmUgc2VlbiBlcnJubyA9PSBFQUdBSU4gaGVyZSwgd2hpY2ggbWVhbnMgInRoZXJlIGFyZQogICAgICAgICAgKiB0b28gbWFueSB0aHJlYWRzIi4KICAgICAgICAgICovCi0gICAgICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQgZmFpbGVkOiAlcCBlcnJubyAlZFxuIiwKLSAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLCAodm9pZCopcnYsIGVycm5vKSk7Ci0gICAgICAgIG9iai5pZCA9IC0xOworICAgICAgICBpbnQgZSA9IGVycm5vOworICAgICAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIGZhaWxlZCwgZXJybm8gJWRcbiIsCisgICAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwgZSkpOworI2VuZGlmCisgICAgICAgIHRocmVhZElEID0gKHVuc2lnbmVkKS0xOworICAgICAgICBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBvYmopOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCBzdWNjZWVkZWQ6ICVwXG4iLAotICAgICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksICh2b2lkKilydikpOwotICAgICAgICAvKiB3YWl0IGZvciB0aHJlYWQgdG8gaW5pdGlhbGl6ZSwgc28gd2UgY2FuIGdldCBpdHMgaWQgKi8KLSAgICAgICAgV2FpdEZvclNpbmdsZU9iamVjdChvYmouZG9uZSwgSU5GSU5JVEUpOwotICAgICAgICBhc3NlcnQob2JqLmlkICE9IC0xKTsKKyAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLCAodm9pZCopaFRocmVhZCkpOworICAgICAgICBDbG9zZUhhbmRsZShoVGhyZWFkKTsKICAgICB9Ci0gICAgQ2xvc2VIYW5kbGUoKEhBTkRMRSlvYmouZG9uZSk7Ci0gICAgcmV0dXJuIG9iai5pZDsKKyAgICByZXR1cm4gKGxvbmcpIHRocmVhZElEOwogfQogCiAvKgpAQCAtMTc2LDU1ICsxOTAsMTkgQEAKICAgICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIsIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoMCk7Ci0gICAgX2VuZHRocmVhZCgpOwotfQotCiB2b2lkCiBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKKyAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIsIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOworICAgICAgICBleGl0KDApOworI2lmIGRlZmluZWQoTVNfV0lOQ0UpCisgICAgRXhpdFRocmVhZCgwKTsKKyNlbHNlCisgICAgX2VuZHRocmVhZGV4KDApOworI2VuZGlmCiB9CiAKLXZvaWQKLVB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KIC8qCiAgKiBMb2NrIHN1cHBvcnQuIEl0IGhhcyB0b28gYmUgaW1wbGVtZW50ZWQgYXMgc2VtYXBob3Jlcy4KICAqIEkgW0RhZ10gdHJpZWQgdG8gaW1wbGVtZW50IGl0IHdpdGggbXV0ZXggYnV0IEkgY291bGQgZmluZCBhIHdheSB0bwpAQCAtMzA5LDMgKzI4Nyw3MyBAQAogfQogCiAjZGVmaW5lIFRIUkVBRF9TRVRfU1RBQ0tTSVpFKHgpIF9weXRocmVhZF9udF9zZXRfc3RhY2tzaXplKHgpCisKKworLyogdXNlIG5hdGl2ZSBXaW5kb3dzIFRMUyBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgUHlfSEFWRV9OQVRJVkVfVExTCisKKyNpZmRlZiBQeV9IQVZFX05BVElWRV9UTFMKK2ludAorUHlUaHJlYWRfY3JlYXRlX2tleSh2b2lkKQoreworICAgIHJldHVybiAoaW50KSBUbHNBbGxvYygpOworfQorCit2b2lkCitQeVRocmVhZF9kZWxldGVfa2V5KGludCBrZXkpCit7CisgICAgVGxzRnJlZShrZXkpOworfQorCisvKiBXZSBtdXN0IGJlIGNhcmVmdWwgdG8gZW11bGF0ZSB0aGUgc3RyYW5nZSBzZW1hbnRpY3MgaW1wbGVtZW50ZWQgaW4gdGhyZWFkLmMsCisgKiB3aGVyZSB0aGUgdmFsdWUgaXMgb25seSBzZXQgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGJlZm9yZS4KKyAqLworaW50CitQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKGludCBrZXksIHZvaWQgKnZhbHVlKQoreworICAgIEJPT0wgb2s7CisgICAgdm9pZCAqb2xkdmFsdWU7CisKKyAgICBhc3NlcnQodmFsdWUgIT0gTlVMTCk7CisgICAgb2xkdmFsdWUgPSBUbHNHZXRWYWx1ZShrZXkpOworICAgIGlmIChvbGR2YWx1ZSAhPSBOVUxMKQorICAgICAgICAvKiBpZ25vcmUgdmFsdWUgaWYgYWxyZWFkeSBzZXQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgb2sgPSBUbHNTZXRWYWx1ZShrZXksIHZhbHVlKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgKgorUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShpbnQga2V5KQoreworICAgIC8qIGJlY2F1c2UgVExTIGlzIHVzZWQgaW4gdGhlIFB5X0VORF9BTExPV19USFJFQUQgbWFjcm8sCisgICAgICogaXQgaXMgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHRoZSB3aW5kb3dzIGVycm9yIHN0YXRlLCBiZWNhdXNlCisgICAgICogaXQgaXMgYXNzdW1lZCB0byBiZSBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBjYWxsIHRvIHRoZSBtYWNyby4KKyAgICAgKiBJZGVhbGx5LCB0aGUgbWFjcm8gc2hvdWxkIGJlIGZpeGVkLCBidXQgaXQgaXMgc2ltcGxlciB0bworICAgICAqIGRvIGl0IGhlcmUuCisgICAgICovCisgICAgRFdPUkQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICB2b2lkICpyZXN1bHQgPSBUbHNHZXRWYWx1ZShrZXkpOworICAgIFNldExhc3RFcnJvcihlcnJvcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZAorUHlUaHJlYWRfZGVsZXRlX2tleV92YWx1ZShpbnQga2V5KQoreworICAgIC8qIE5VTEwgaXMgdXNlZCBhcyAia2V5IG1pc3NpbmciLCBhbmQgaXQgaXMgYWxzbyB0aGUgZGVmYXVsdAorICAgICAqIGdpdmVuIGJ5IFRsc0dldFZhbHVlKCkgaWYgbm90aGluZyBoYXMgYmVlbiBzZXQgeWV0LgorICAgICAqLworICAgIFRsc1NldFZhbHVlKGtleSwgTlVMTCk7Cit9CisKKy8qIHJlaW5pdGlhbGl6YXRpb24gb2YgVExTIGlzIG5vdCBuZWNlc3NhcnkgYWZ0ZXIgZm9yayB3aGVuIHVzaW5nCisgKiB0aGUgbmF0aXZlIFRMUyBmdW5jdGlvbnMuICBBbmQgZm9ya2luZyBpc24ndCBzdXBwb3J0ZWQgb24gV2luZG93cyBlaXRoZXIuCisgKi8KK3ZvaWQKK1B5VGhyZWFkX1JlSW5pdFRMUyh2b2lkKQore30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX29zMi5oIGIvUHl0aG9uL3RocmVhZF9vczIuaAppbmRleCAyODI4NGJiLi4xYjI2NGI1IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX29zMi5oCisrKyBiL1B5dGhvbi90aHJlYWRfb3MyLmgKQEAgLTY4LDU2ICs2OCwxNiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKK3ZvaWQKK1B5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCiB7CiAgICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iLAogICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIGV4aXQoMCk7CiAgICAgX2VuZHRocmVhZCgpOwogfQogCi12b2lkCi1QeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoc3RhdHVzKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogLyoKICAqIExvY2sgc3VwcG9ydC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgd2l0aCBhbiBldmVudCBzZW1hcGhvcmUgYW5kIGNyaXRpY2FsCiAgKiBzZWN0aW9ucyB0byBtYWtlIGl0IGJlaGF2ZSBtb3JlIGxpa2UgYSBwb3NpeCBtdXRleCB0aGFuIGl0cyBPUy8yCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3B0aC5oIGIvUHl0aG9uL3RocmVhZF9wdGguaAppbmRleCAxZjE2OTRhLi44MmEwMGU3IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3B0aC5oCisrKyBiL1B5dGhvbi90aHJlYWRfcHRoLmgKQEAgLTc0LDQ5ICs3NCwxNCBAQAogICAgIHJldHVybiAobG9uZykgKihsb25nICopICZ0aHJlYWRpZDsKIH0KIAotc3RhdGljIHZvaWQgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoaW50IG5vX2NsZWFudXApCit2b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCiB7CiAgICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgZXhpdCgwKTsKICAgICB9CiB9CiAKLXZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzLCBpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF9wcm9nKCVkKSBjYWxsZWRcbiIsIHN0YXR1cykpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOwotfQotCi12b2lkIFB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogLyoKICAqIExvY2sgc3VwcG9ydC4KICAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmggYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAppbmRleCAzMmZkMmQwLi5lZjQ5YTMwIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAorKysgYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaApAQCAtMjI1LDU1ICsyMjUsMTUgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZAotZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKLSAgICB9Ci19Ci0KIHZvaWQKIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCiB7Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMCk7CisgICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgZXhpdCgwKTsKKyAgICB9CiB9CiAKLXZvaWQKLVB5VGhyZWFkX19leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDEpOwotfQotCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljIHZvaWQKLWRvX1B5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzLCBpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF9wcm9nKCVkKSBjYWxsZWRcbiIsIHN0YXR1cykpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOwotfQotCi12b2lkCi1QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAjaWZkZWYgVVNFX1NFTUFQSE9SRVMKIAogLyoKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfc2dpLmggYi9QeXRob24vdGhyZWFkX3NnaS5oCmluZGV4IDY3OWQxMTMuLjc3MWFiMmMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfc2dpLmgKKysrIGIvUHl0aG9uL3RocmVhZF9zZ2kuaApAQCAtMTcsOSArMTcsNiBAQAogc3RhdGljIGludCB3YWl0aW5nX2Zvcl90aHJlYWRzOyAvKiBwcm90ZWN0ZWQgYnkgY291bnRfbG9jayAqLwogc3RhdGljIGludCBudGhyZWFkczsgICAgICAgICAgICAvKiBwcm90ZWN0ZWQgYnkgY291bnRfbG9jayAqLwogc3RhdGljIGludCBleGl0X3N0YXR1czsKLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgaW50IGRvX2V4aXQ7ICAgICAgICAgICAgIC8qIGluZGljYXRlcyB0aGF0IHRoZSBwcm9ncmFtIGlzIHRvIGV4aXQgKi8KLSNlbmRpZgogc3RhdGljIGludCBleGl0aW5nOyAgICAgICAgICAgICAvKiB3ZSdyZSBhbHJlYWR5IGV4aXRpbmcgKGZvciBtYXliZV9leGl0KSAqLwogc3RhdGljIHBpZF90IG15X3BpZDsgICAgICAgICAgICAvKiBQSUQgb2YgbWFpbiB0aHJlYWQgKi8KIHN0YXRpYyBzdHJ1Y3QgcGlkbGlzdCB7CkBAIC0yNyw1MyArMjQsMTEgQEAKICAgICBwaWRfdCBjaGlsZDsKIH0gcGlkbGlzdFtNQVhQUk9DXTsgICAgIC8qIFBJRHMgb2Ygb3RoZXIgdGhyZWFkczsgcHJvdGVjdGVkIGJ5IGNvdW50X2xvY2sgKi8KIHN0YXRpYyBpbnQgbWF4cGlkaW5kZXg7ICAgICAgICAgLyogIyBvZiBQSURzIGluIHBpZGxpc3QgKi8KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLS8qCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGFzIGEgc2lnbmFsIGhhbmRsZXIgd2hlbiBhbm90aGVyIHRocmVhZAotICogZXhpdHMuICBXaGVuIHRoYXQgaGFwcGVucywgd2UgbXVzdCBzZWUgd2hldGhlciB3ZSBoYXZlIHRvIGV4aXQgYXMKLSAqIHdlbGwgKGJlY2F1c2Ugb2YgYW4gUHlUaHJlYWRfZXhpdF9wcm9nKCkpIG9yIHdoZXRoZXIgd2Ugc2hvdWxkIGNvbnRpbnVlIG9uLgotICovCi1zdGF0aWMgdm9pZCBleGl0X3NpZyh2b2lkKQotewotICAgIGQycHJpbnRmKCgiZXhpdF9zaWcgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKGV4aXRpbmcgJiYgZ2V0cGlkKCkgPT0gbXlfcGlkKSB7Ci0gICAgICAgIGQycHJpbnRmKCgiYWxyZWFkeSBleGl0aW5nXG4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRvX2V4aXQpIHsKLSAgICAgICAgZDJwcmludGYoKCJleGl0aW5nIGluIGV4aXRfc2lnXG4iKSk7Ci0jaWZkZWYgUHlfREVCVUcKLSAgICAgICAgaWYgKCh0aHJlYWRfZGVidWcgJiA4KSA9PSAwKQotICAgICAgICAgICAgdGhyZWFkX2RlYnVnICY9IH4xOyAvKiBkb24ndCBwcm9kdWNlIGRlYnVnIG1lc3NhZ2VzICovCi0jZW5kaWYKLSAgICAgICAgUHlUaHJlYWRfZXhpdF90aHJlYWQoKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gYSBwcm9jZXNzIGNhbGxzIGV4aXQoKS4gIElmIHRoYXQgd2Fzbid0Ci0gKiBkb25lIGZyb20gdGhlIGxpYnJhcnksIHdlIGRvIGFzIGlmIGFuIFB5VGhyZWFkX2V4aXRfcHJvZygpIHdhcyBpbnRlbmRlZC4KLSAqLwotc3RhdGljIHZvaWQgbWF5YmVfZXhpdCh2b2lkKQotewotICAgIGRwcmludGYoKCJtYXliZV9leGl0IGNhbGxlZFxuIikpOwotICAgIGlmIChleGl0aW5nKSB7Ci0gICAgICAgIGRwcmludGYoKCJhbHJlYWR5IGV4aXRpbmdcbiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBQeVRocmVhZF9leGl0X3Byb2coMCk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KIC8qCiAgKiBJbml0aWFsaXphdGlvbi4KICAqLwogc3RhdGljIHZvaWQgUHlUaHJlYWRfX2luaXRfdGhyZWFkKHZvaWQpCiB7Ci0jaWZuZGVmIE5PX0VYSVRfUFJPRwotICAgIHN0cnVjdCBzaWdhY3Rpb24gczsKLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KICNpZmRlZiBVU0VfREwKICAgICBsb25nIGFkZHIsIHNpemU7CiAjZW5kaWYgLyogVVNFX0RMICovCkBAIC05MywxNiArNDgsNiBAQAogICAgIGlmICh1c2NvbmZpZyhDT05GX0lOSVRVU0VSUywgMTYpIDwgMCkKICAgICAgICAgcGVycm9yKCJ1c2NvbmZpZyAtIENPTkZfSU5JVFVTRVJTIik7CiAgICAgbXlfcGlkID0gZ2V0cGlkKCk7ICAgICAgICAgIC8qIHNvIHRoYXQgd2Uga25vdyB3aGljaCBpcyB0aGUgbWFpbiB0aHJlYWQgKi8KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi0gICAgYXRleGl0KG1heWJlX2V4aXQpOwotICAgIHMuc2FfaGFuZGxlciA9IGV4aXRfc2lnOwotICAgIHNpZ2VtcHR5c2V0KCZzLnNhX21hc2spOwotICAgIC8qc2lnYWRkc2V0KCZzLnNhX21hc2ssIFNJR1VTUjEpOyovCi0gICAgcy5zYV9mbGFncyA9IDA7Ci0gICAgc2lnYWN0aW9uKFNJR1VTUjEsICZzLCAwKTsKLSAgICBpZiAocHJjdGwoUFJfU0VURVhJVFNJRywgU0lHVVNSMSkgPCAwKQotICAgICAgICBwZXJyb3IoInByY3RsIC0gUFJfU0VURVhJVFNJRyIpOwotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwogICAgIGlmICh1c2NvbmZpZyhDT05GX0FSRU5BVFlQRSwgVVNfU0hBUkVET05MWSkgPCAwKQogICAgICAgICBwZXJyb3IoInVzY29uZmlnIC0gQ09ORl9BUkVOQVRZUEUiKTsKICAgICB1c2NvbmZpZyhDT05GX0xPQ0tUWVBFLCBVU19ERUJVRyk7IC8qIFhYWCAqLwpAQCAtMjI3LDQ2ICsxNzIsMjQgQEAKICAgICByZXR1cm4gZ2V0cGlkKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKGludCBub19jbGVhbnVwKQordm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewogICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKICAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOworICAgICAgICBleGl0KDApOwogICAgIGlmICh1c3NldGxvY2soY291bnRfbG9jaykgPCAwKQogICAgICAgICBwZXJyb3IoInVzc2V0bG9jayAoY291bnRfbG9jaykiKTsKICAgICBudGhyZWFkcy0tOwogICAgIGlmIChnZXRwaWQoKSA9PSBteV9waWQpIHsKICAgICAgICAgLyogbWFpbiB0aHJlYWQ7IHdhaXQgZm9yIG90aGVyIHRocmVhZHMgdG8gZXhpdCAqLwogICAgICAgICBleGl0aW5nID0gMTsKLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi0gICAgICAgIGlmIChkb19leGl0KSB7Ci0gICAgICAgICAgICBpbnQgaTsKLQotICAgICAgICAgICAgLyogbm90aWZ5IG90aGVyIHRocmVhZHMgKi8KLSAgICAgICAgICAgIGNsZWFuX3RocmVhZHMoKTsKLSAgICAgICAgICAgIGlmIChudGhyZWFkcyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgZHByaW50ZigoImtpbGwgb3RoZXIgdGhyZWFkc1xuIikpOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXhwaWRpbmRleDsgaSsrKQotICAgICAgICAgICAgICAgICAgICBpZiAocGlkbGlzdFtpXS5jaGlsZCA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkga2lsbChwaWRsaXN0W2ldLmNoaWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lHS0lMTCk7Ci0gICAgICAgICAgICAgICAgX2V4aXQoZXhpdF9zdGF0dXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCiAgICAgICAgIHdhaXRpbmdfZm9yX3RocmVhZHMgPSAxOwogICAgICAgICBpZiAodXNzZXRsb2NrKHdhaXRfbG9jaykgPCAwKQogICAgICAgICAgICAgcGVycm9yKCJ1c3NldGxvY2sgKHdhaXRfbG9jaykiKTsKICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgaWYgKG50aHJlYWRzIDwgMCkgewogICAgICAgICAgICAgICAgIGRwcmludGYoKCJyZWFsbHkgZXhpdCAoJWQpXG4iLCBleGl0X3N0YXR1cykpOwotICAgICAgICAgICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgICAgICAgICBfZXhpdChleGl0X3N0YXR1cyk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBleGl0KGV4aXRfc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBleGl0KGV4aXRfc3RhdHVzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh1c3Vuc2V0bG9jayhjb3VudF9sb2NrKSA8IDApCiAgICAgICAgICAgICAgICAgcGVycm9yKCJ1c3Vuc2V0bG9jayAoY291bnRfbG9jaykiKTsKQEAgLTI4Myw1MCArMjA2LDExIEBACiAgICAgICAgIGlmICh1c3Vuc2V0bG9jayh3YWl0X2xvY2spIDwgMCkKICAgICAgICAgICAgIHBlcnJvcigidXN1bnNldGxvY2sgKHdhaXRfbG9jaykiKTsKICAgICB9Ci0jaWZuZGVmIE5PX0VYSVRfUFJPRwotICAgIGVsc2UgaWYgKGRvX2V4aXQpCi0gICAgICAgICh2b2lkKSBraWxsKG15X3BpZCwgU0lHVVNSMSk7Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCiAgICAgaWYgKHVzdW5zZXRsb2NrKGNvdW50X2xvY2spIDwgMCkKICAgICAgICAgcGVycm9yKCJ1c3Vuc2V0bG9jayAoY291bnRfbG9jaykiKTsKICAgICBfZXhpdCgwKTsKIH0KIAotdm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDEpOwotfQotCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljIHZvaWQgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KHN0YXR1cyk7Ci0gICAgZG9fZXhpdCA9IDE7Ci0gICAgZXhpdF9zdGF0dXMgPSBzdGF0dXM7Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQobm9fY2xlYW51cCk7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogTG9jayBzdXBwb3J0LgogICovCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3NvbGFyaXMuaCBiL1B5dGhvbi90aHJlYWRfc29sYXJpcy5oCmluZGV4IDU2YWM4YWUuLjFjZTFjZmMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfc29sYXJpcy5oCisrKyBiL1B5dGhvbi90aHJlYWRfc29sYXJpcy5oCkBAIC02NCw1OSArNjQsMTUgQEAKICAgICByZXR1cm4gdGhyX3NlbGYoKTsKIH0KIAotc3RhdGljIHZvaWQKLWRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOwotICAgIHRocl9leGl0KDApOwotfQotCiB2b2lkCiBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKKyAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7CiAgICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KHN0YXR1cyk7Ci0gICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgZWxzZQotICAgICAgICBleGl0KHN0YXR1cyk7CisgICAgICAgIGV4aXQoMCk7CisgICAgdGhyX2V4aXQoMCk7CiB9CiAKLXZvaWQKLVB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KIC8qCiAgKiBMb2NrIHN1cHBvcnQuCiAgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfd2luY2UuaCBiL1B5dGhvbi90aHJlYWRfd2luY2UuaAppbmRleCAzM2NmNWE0Li41MWRkYzAyIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3dpbmNlLmgKKysrIGIvUHl0aG9uL3RocmVhZF93aW5jZS5oCkBAIC01Myw0OSArNTMsMTQgQEAKICAgICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCIlbGQ6IGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIiwgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBleGl0KDApOyAvKiBYWFggLSB3YXMgX2V4aXQoKSEhICovCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoMCk7Ci0gICAgX2VuZHRocmVhZCgpOwotfQotCiB2b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCiB7Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMCk7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKKyAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIsIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOworICAgICAgICBleGl0KDApOworICAgIF9lbmR0aHJlYWQoKTsKIH0KIAotdm9pZCBQeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KIC8qCiAgKiBMb2NrIHN1cHBvcnQuIEl0IGhhcyB0byBiZSBpbXBsZW1lbnRlZCB1c2luZyBNdXRleGVzLCBhcwogICogQ0UgZG9lc250IHN1cHBvcnQgc2VtYXBob3Jlcy4gIFRoZXJlZm9yZSB3ZSB1c2Ugc29tZSBoYWNrcyB0bwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RyYWNlYmFjay5jIGIvUHl0aG9uL3RyYWNlYmFjay5jCmluZGV4IGE2MGExODMuLmFkZmQ2NmMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90cmFjZWJhY2suYworKysgYi9QeXRob24vdHJhY2ViYWNrLmMKQEAgLTk2LDggKzk2LDcgQEAKICAgICAgICAgUHlfWElOQ1JFRihmcmFtZSk7CiAgICAgICAgIHRiLT50Yl9mcmFtZSA9IGZyYW1lOwogICAgICAgICB0Yi0+dGJfbGFzdGkgPSBmcmFtZS0+Zl9sYXN0aTsKLSAgICAgICAgdGItPnRiX2xpbmVubyA9IFB5Q29kZV9BZGRyMkxpbmUoZnJhbWUtPmZfY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmZfbGFzdGkpOworICAgICAgICB0Yi0+dGJfbGluZW5vID0gUHlGcmFtZV9HZXRMaW5lTnVtYmVyKGZyYW1lKTsKICAgICAgICAgUHlPYmplY3RfR0NfVHJhY2sodGIpOwogICAgIH0KICAgICByZXR1cm4gdGI7CkBAIC0xNjIsNyArMTYxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KG5hbWVidWYrbGVuLCB0YWlsKTsKICAgICAgICAgICAgICAgICAgICAgeGZwID0gZm9wZW4obmFtZWJ1ZiwgInIiIFBZX1NURElPVEVYVE1PREUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoeGZwICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gbmFtZWJ1ZjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDZkYjE5ZmEuLmQ5Y2RmZjkgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNCArMSw0IEBACi1UaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDIuNi42CitUaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDIuNy4xCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMApAQCAtMjI1LDcgKzIyNSw3IEBACiBVbnN1cHBvcnRlZCBzeXN0ZW1zCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUEgbnVtYmVyIG9mIHN5c3RlbXMgaXMgbm90IHN1cHBvcnRlZCBpbiBQeXRob24gMi42IGFueW1vcmUuIFNvbWUKK0EgbnVtYmVyIG9mIHN5c3RlbXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gUHl0aG9uIDIuNyBhbnltb3JlLiBTb21lCiBzdXBwb3J0IGNvZGUgaXMgc3RpbGwgcHJlc2VudCwgYnV0IHdpbGwgYmUgcmVtb3ZlZCBpbiBsYXRlciB2ZXJzaW9ucy4KIElmIHlvdSBzdGlsbCBuZWVkIHRvIHVzZSBjdXJyZW50IFB5dGhvbiB2ZXJzaW9ucyBvbiB0aGVzZSBzeXN0ZW1zLAogcGxlYXNlIHNlbmQgYSBtZXNzYWdlIHRvIHB5dGhvbi1kZXZAcHl0aG9uLm9yZyBpbmRpY2F0aW5nIHRoYXQgeW91CkBAIC0yNDgsMjQgKzI0OCw5IEBACiAtIFN5c3RlbXMgdXNpbmcgLS13aXRoLWRsLWRsZAogLSBTeXN0ZW1zIHVzaW5nIC0td2l0aG91dC11bml2ZXJzYWwtbmV3bGluZXMKIC0gTWFjT1MgOQotCi1UaGUgZm9sbG93aW5nIHN5c3RlbXMgYXJlIHN0aWxsIHN1cHBvcnRlZCBpbiBQeXRob24gMi41LCBidXQKLXN1cHBvcnQgd2lsbCBiZSBkcm9wcGVkIGluIDIuNjoKIC0gU3lzdGVtcyB1c2luZyAtLXdpdGgtd2N0eXBlLWZ1bmN0aW9ucwogLSBXaW45eCwgV2luTUUKIAotV2FybmluZyBvbiBpbnN0YWxsIGluIFdpbmRvd3MgOTggYW5kIFdpbmRvd3MgTWUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZvbGxvd2luZyBNaWNyb3NvZnQncyBjbG9zaW5nIG9mIEV4dGVuZGVkIFN1cHBvcnQgZm9yCi1XaW5kb3dzIDk4L01FIChKdWx5IDExLCAyMDA2KSwgUHl0aG9uIDIuNiB3aWxsIHN0b3AKLXN1cHBvcnRpbmcgdGhlc2UgcGxhdGZvcm1zLiBQeXRob24gZGV2ZWxvcG1lbnQgYW5kCi1tYWludGFpbmFiaWxpdHkgYmVjb21lcyBlYXNpZXIgKGFuZCBtb3JlIHJlbGlhYmxlKSB3aGVuCi1wbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHRhcmdldGluZyBPU2VzIHdpdGggZmV3IHVzZXJzCi1hbmQgbm8gZGVkaWNhdGVkIGV4cGVydCBkZXZlbG9wZXJzIGlzIHRha2VuIG91dC4gVGhlCi12ZW5kb3IgYWxzbyB3YXJucyB0aGF0IHRoZSBPUyB2ZXJzaW9ucyBsaXN0ZWQgYWJvdmUKLSJjYW4gZXhwb3NlIGN1c3RvbWVycyB0byBzZWN1cml0eSByaXNrcyIgYW5kIHJlY29tbWVuZHMKLXVwZ3JhZGUuCiAKIFBsYXRmb3JtIHNwZWNpZmljIG5vdGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTQ3LDE0ICs1MzIsNiBAQAogICAgICAgICBhbmQgdHlwZSBOTUFLRS4gIFRocmVhZGluZyBhbmQgc29ja2V0cyBhcmUgc3VwcG9ydGVkIGJ5IGRlZmF1bHQKICAgICAgICAgaW4gdGhlIHJlc3VsdGluZyBiaW5hcmllcyBvZiBQWVRIT04xNS5ETEwgYW5kIFBZVEhPTi5FWEUuCiAKLU1vbnRlcmV5ICg2NC1iaXQgQUlYKTogVGhlIGN1cnJlbnQgTW9udGVyZXkgQyBjb21waWxlciAoVmlzdWFsIEFnZSkKLSAgICAgICAgdXNlcyB0aGUgT0JKRUNUX01PREU9ezMyfDY0fSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgdGhlCi0gICAgICAgIGNvbXBpbGF0aW9uIG1vZGUgdG8gZWl0aGVyIDMyLWJpdCBvciA2NC1iaXQgKDMyLWJpdCBtb2RlIGlzCi0gICAgICAgIHRoZSBkZWZhdWx0KS4gIFByZXN1bWFibHkgeW91IHdhbnQgNjQtYml0IGNvbXBpbGF0aW9uIG1vZGUgZm9yCi0gICAgICAgIHRoaXMgNjQtYml0IE9TLiAgQXMgYSByZXN1bHQgeW91IG11c3QgZmlyc3Qgc2V0IE9CSkVDVF9NT0RFPTY0Ci0gICAgICAgIGluIHlvdXIgZW52aXJvbm1lbnQgYmVmb3JlIGNvbmZpZ3VyaW5nICguL2NvbmZpZ3VyZSkgb3IKLSAgICAgICAgYnVpbGRpbmcgKG1ha2UpIFB5dGhvbiBvbiBNb250ZXJleS4KLQogUmVsaWFudCBVTklYOiBUaGUgdGhyZWFkIHN1cHBvcnQgZG9lcyBub3QgY29tcGlsZSBvbiBSZWxpYW50IFVOSVgsIGFuZAogICAgICAgICB0aGVyZSBpcyBhIChtaW5vcikgcHJvYmxlbSBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBmb3IgdGhhdAogICAgICAgICBwbGF0Zm9ybSBhcyB3ZWxsLiAgVGhpcyBzaG91bGQgYmUgcmVzb2x2ZWQgaW4gdGltZSBmb3IgYQpAQCAtMTA4Myw2ICsxMDYwLDkgQEAKIC0td2l0aC1zeXN0ZW0tZmZpOiAgQnVpbGQgdGhlIF9jdHlwZXMgZXh0ZW5zaW9uIG1vZHVsZSB1c2luZyBhbiBmZmkKICAgICAgICAgbGlicmFyeSBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4KIAorLS13aXRoLWRibWxpYm9yZGVyPWRiMTpkYjI6Li4uOiAgU3BlY2lmeSB0aGUgb3JkZXIgdGhhdCBiYWNrZW5kcyBmb3IgdGhlCisJZGJtIGV4dGVuc2lvbiBhcmUgY2hlY2tlZC4gVmFsaWQgdmFsdWUgaXMgYSBjb2xvbiBzZXBhcmF0ZWQgc3RyaW5nCisJd2l0aCB0aGUgYmFja2VuZCBuYW1lcyBgbmRibScsIGBnZGJtJyBhbmQgYGJkYicuCiAKIEJ1aWxkaW5nIGZvciBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICh1c2luZyB0aGUgVlBBVEggZmVhdHVyZSkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExNjcsMTYgKzExNDcsMTAgQEAKIC0tLS0tLS0tLS0KIAogVGhlcmUncyBhbiBleGNlbGxlbnQgRW1hY3MgZWRpdGluZyBtb2RlIGZvciBQeXRob24gY29kZTsgc2VlIHRoZSBmaWxlCi1NaXNjL3B5dGhvbi1tb2RlLmVsLiAgT3JpZ2luYWxseSB3cml0dGVuIGJ5IHRoZSBmYW1vdXMgVGltIFBldGVycywgaXQKLWlzIG5vdyBtYWludGFpbmVkIGJ5IHRoZSBlcXVhbGx5IGZhbW91cyBCYXJyeSBXYXJzYXcgKGl0J3Mgbm8KLWNvaW5jaWRlbmNlIHRoYXQgdGhleSBub3cgYm90aCB3b3JrIG9uIHRoZSBzYW1lIHRlYW0pLiAgVGhlIGxhdGVzdAotdmVyc2lvbiwgYWxvbmcgd2l0aCB2YXJpb3VzIG90aGVyIGNvbnRyaWJ1dGVkIFB5dGhvbi1yZWxhdGVkIEVtYWNzCi1nb29kaWVzLCBpcyBvbmxpbmUgYXQgaHR0cDovL3d3dy5weXRob24ub3JnL2VtYWNzL3B5dGhvbi1tb2RlLy4gIEFuZAotaWYgeW91IGFyZSBwbGFubmluZyB0byBlZGl0IHRoZSBQeXRob24gQyBjb2RlLCBwbGVhc2UgcGljayB1cCB0aGUKLWxhdGVzdCB2ZXJzaW9uIG9mIENDIE1vZGUgaHR0cDovL3d3dy5weXRob24ub3JnL2VtYWNzL2NjLW1vZGUvOyBpdAotY29udGFpbnMgYSAicHl0aG9uIiBzdHlsZSB1c2VkIHRocm91Z2hvdXQgbW9zdCBvZiB0aGUgUHl0aG9uIEMgc291cmNlCi1maWxlcy4gIChOZXdlciB2ZXJzaW9ucyBvZiBFbWFjcyBvciBYRW1hY3MgbWF5IGFscmVhZHkgY29tZSB3aXRoIHRoZQotbGF0ZXN0IHZlcnNpb24gb2YgcHl0aG9uLW1vZGUuKQorTWlzYy9weXRob24tbW9kZS5lbC4gIE9yaWdpbmFsbHkgd3JpdHRlbiBieSB0aGUgZmFtb3VzIFRpbSBQZXRlcnMsIGl0IGlzIG5vdworbWFpbnRhaW5lZCBieSB0aGUgZXF1YWxseSBmYW1vdXMgQmFycnkgV2Fyc2F3LiAgVGhlIGxhdGVzdCB2ZXJzaW9uLCBhbG9uZyB3aXRoCit2YXJpb3VzIG90aGVyIGNvbnRyaWJ1dGVkIFB5dGhvbi1yZWxhdGVkIEVtYWNzIGdvb2RpZXMsIGlzIG9ubGluZSBhdAoraHR0cDovL2xhdW5jaHBhZC5uZXQvcHl0aG9uLW1vZGUvLgogCiAKIFRraW50ZXIKZGlmZiAtLWdpdCBhL1JJU0NPUy9NYWtlZmlsZSBiL1JJU0NPUy9NYWtlZmlsZQppbmRleCAxNzg4YjVjLi5iZDYzZTM4IDEwMDY0NAotLS0gYS9SSVNDT1MvTWFrZWZpbGUKKysrIGIvUklTQ09TL01ha2VmaWxlCkBAIC0xMzUsNyArMTM1LDYgQEAKIE9CSkVDVFNfUklTQ09TID0gXAogCUAuUHl0aG9uLm8uZHlubG9hZF9yaXNjb3NcCiAJQC5QeXRob24uby5nZXRjd2RfcmlzY29zXAotCUAuUHl0aG9uLm8uZ2V0bXRpbWVfcmlzY29zXAogCUAuby51bml4c3R1ZmYKIAogCmRpZmYgLS1naXQgYS9SSVNDT1MvUHl0aG9uL2dldG10aW1lX3Jpc2Nvcy5jIGIvUklTQ09TL1B5dGhvbi9nZXRtdGltZV9yaXNjb3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE1MzYzOC4uMDAwMDAwMAotLS0gYS9SSVNDT1MvUHl0aG9uL2dldG10aW1lX3Jpc2Nvcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNkZWZpbmUgX19zd2kKLSNpbmNsdWRlICJvc2xpYi9vc2ZpbGUuaCIKLQotbG9uZyBQeU9TX0dldExhc3RNb2RpZmljYXRpb25UaW1lKGNoYXIgKnBhdGgsIEZJTEUgKmZwKQotewotICBpbnQgb2JqOwotICBiaXRzIGxvYWQsIGV4ZWMsIGZ0eXBlOwotCi0gIGlmICh4b3NmaWxlX3JlYWRfc3RhbXBlZF9ub19wYXRoKHBhdGgsICZvYmosICZsb2FkLCAmZXhlYywgMCwgMCwgJmZ0eXBlKSkgcmV0dXJuIC0xOwotICBpZiAob2JqICE9IG9zZmlsZV9JU19GSUxFKSByZXR1cm4gLTE7Ci0gIGlmIChmdHlwZSA9PSBvc2ZpbGVfVFlQRV9VTlRZUEVEKSByZXR1cm4gLTE7Ci0KLSAgbG9hZCAmPSAweEZGOwotICBsb2FkIC09IDUxOwotICBpZiAoZXhlYyA8IDE4NTU1NDgwMDRVKSBsb2FkLS07Ci0gIGV4ZWMgLT0gMTg1NTU0ODAwNFU7Ci0gIHJldHVybiBleGVjLzEwMCs0Mjk0OTY3Mipsb2FkKyg5NSpsb2FkKS8xMDA7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9SRUFETUUgYi9Ub29scy9SRUFETUUKaW5kZXggNmUwMjc2Yy4uMWZiMDEwMyAxMDA2NDQKLS0tIGEvVG9vbHMvUkVBRE1FCisrKyBiL1Rvb2xzL1JFQURNRQpAQCAtMjAsMTkgKzIwLDIwIEBACiAKIGZyZWV6ZQkJQ3JlYXRlIGEgc3RhbmQtYWxvbmUgZXhlY3V0YWJsZSBmcm9tIGEgUHl0aG9uIHByb2dyYW0uCiAKK2dkYiAgICAgICAgICAgICBQeXRob24gY29kZSB0byBiZSBydW4gaW5zaWRlIGdkYiwgdG8gbWFrZSBpdCBlYXNpZXIgdG8KKyAgICAgICAgICAgICAgICBkZWJ1ZyBQeXRob24gaXRzZWxmIChieSBEYXZpZCBNYWxjb2xtKS4KKwogaTE4bgkJVG9vbHMgZm9yIGludGVybmF0aW9uYWxpemF0aW9uLiBweWdldHRleHQucHkgCiAJCXBhcnNlcyBQeXRob24gc291cmNlIGNvZGUgYW5kIGdlbmVyYXRlcyAucG90IGZpbGVzLAogCQlhbmQgbXNnZm10LnB5IGdlbmVyYXRlcyBhIGJpbmFyeSBtZXNzYWdlIGNhdGFsb2cgCiAJCWZyb20gYSBjYXRhbG9nIGluIHRleHQgZm9ybWF0LgogCi1tb2R1bGF0b3IJSW50ZXJhY3RpdmVseSBnZW5lcmF0ZSBib2lsZXIgcGxhdGUgZm9yIGFuIGV4dGVuc2lvbgotCQltb2R1bGUuCSBXb3JrcyBlYXNpZXN0IGlmIHlvdSBoYXZlIFRrLgotCiBweW5jaGUJCUEgVGtpbnRlci1iYXNlZCBjb2xvciBlZGl0b3IuCiAKLXNjcmlwdHMJCUEgbnVtYmVyIG9mIHVzZWZ1bCBzaW5nbGUtZmlsZSBwcm9ncmFtcywgZS5nLiB0YWJuYW5ueS5weQotCQkoYnkgVGltIFBldGVycyksIHdoaWNoIGNoZWNrcyBmb3IgaW5jb25zaXN0ZW50IG1peGluZwotCQlvZiB0YWJzIGFuZCBzcGFjZXMuCitzY3JpcHRzICAgICAgICAgQSBudW1iZXIgb2YgdXNlZnVsIHNpbmdsZS1maWxlIHByb2dyYW1zLCBlLmcuIHRhYm5hbm55LnB5CisgICAgICAgICAgICAgICAgYnkgVGltIFBldGVycywgd2hpY2ggY2hlY2tzIGZvciBpbmNvbnNpc3RlbnQgbWl4aW5nIG9mCisgICAgICAgICAgICAgICAgdGFicyBhbmQgc3BhY2VzLCBhbmQgMnRvMywgd2hpY2ggY29udmVydHMgUHl0aG9uIDIgY29kZQorICAgICAgICAgICAgICAgIHRvIFB5dGhvbiAzIGNvZGUuCiAKIHVuaWNvZGUJCVRvb2xzIHVzZWQgdG8gZ2VuZXJhdGUgdW5pY29kZSBkYXRhYmFzZSBmaWxlcyBmb3IKIAkJUHl0aG9uIDIuMCAoYnkgRnJlZHJpayBMdW5kaCkuCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9idWlsZG1zaS5iYXQgYi9Ub29scy9idWlsZGJvdC9idWlsZG1zaS5iYXQKaW5kZXggMjNmMTUzNS4uYTBmNDNhNiAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvYnVpbGRtc2kuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2J1aWxkbXNpLmJhdApAQCAtMTEsNyArMTEsNyBAQAogYmFzaC5leGUgLWMgJ2NkIERvYzttYWtlIFBZVEhPTj1weXRob24yLjUgdXBkYXRlIGh0bWxoZWxwJwogIiVQcm9ncmFtRmlsZXMlXEhUTUwgSGVscCBXb3Jrc2hvcFxoaGMuZXhlIiBEb2NcYnVpbGRcaHRtbGhlbHBccHl0aG9uMjZhMy5oaHAKIAotQHJlbSBidW9sZCB0aGUgTVNJIGZpbGUKK0ByZW0gYnVpbGQgdGhlIE1TSSBmaWxlCiBjZCBQQwogbm1ha2UgL2YgaWNvbnMubWFrCiBjZCAuLlxUb29sc1xtc2kKZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0CmluZGV4IGM2N2VmZGYuLjgzNDkyMGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtY29tbW9uLmJhdApAQCAtMTYsNyArMTYsNyBAQAogQHJlbSBpZiBleGlzdCBkYi00LjQuMjAgcmQgL3MvcSBkYi00LjQuMjAKIEByZW0gaWYgZXhpc3QgZGItNC43LjI1LjAgcmQgL3MvcSBkYi00LjcuMjUuMAogQHJlbSBpZiBleGlzdCBvcGVuc3NsLTAuOS44bCByZCAvcy9xIG9wZW5zc2wtMC45LjhsCi1AcmVtIGlmIGV4aXN0IHNxbGl0ZS0zLjUuOSByZCAvcy9xIHNxbGl0ZS0zLjUuOSAgICAKK0ByZW0gaWYgZXhpc3Qgc3FsaXRlLTMuNi4yMSByZCAvcy9xIHNxbGl0ZS0zLjYuMjEgICAgCiAKIEByZW0gYnppcAogaWYgbm90IGV4aXN0IGJ6aXAyLTEuMC41ICgKQEAgLTM5LDcgKzM5LDcgQEAKIGlmIG5vdCBleGlzdCB0ay04LjUuMi4wIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RrLTguNS4yLjAKIAogQHJlbSBzcWxpdGUzCi1pZiBub3QgZXhpc3Qgc3FsaXRlLTMuNS45ICgKK2lmIG5vdCBleGlzdCBzcWxpdGUtMy42LjIxICgKICAgcmQgL3MvcSBzcWxpdGUtc291cmNlLTMuMy40Ci0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS0zLjUuOQorICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtMy42LjIxCiApCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC90ZXN0LmJhdCBiL1Rvb2xzL2J1aWxkYm90L3Rlc3QuYmF0CmluZGV4IGM4YjE5MzcuLjNlY2NjZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L3Rlc3QuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L3Rlc3QuYmF0CkBAIC0xLDMgKzEsMyBAQAogQHJlbSBVc2VkIGJ5IHRoZSBidWlsZGJvdCAidGVzdCIgc3RlcC4KIGNkIFBDYnVpbGQKLWNhbGwgcnQuYmF0IC1kIC1xIC11YWxsIC1ydworY2FsbCBydC5iYXQgLWQgLXEgLXVhbGwgLXJ3VwpkaWZmIC0tZ2l0IGEvVG9vbHMvY2NiZW5jaC9jY2JlbmNoLnB5IGIvVG9vbHMvY2NiZW5jaC9jY2JlbmNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NzlkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9jY2JlbmNoL2NjYmVuY2gucHkKQEAgLTAsMCArMSw2MDkgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjIFRoaXMgZmlsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggYm90aCBQeXRob24gMi42IGFuZCBQeXRob24gPj0gMy4wLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKKyIiIgorY2NiZW5jaCwgYSBQeXRob24gY29uY3VycmVuY3kgYmVuY2htYXJrLgorIiIiCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc29ja2V0Citmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIsIFNVUFBSRVNTX0hFTFAKK2ltcG9ydCBwbGF0Zm9ybQorCisjIENvbXBhdGliaWxpdHkKK3RyeToKKyAgICB4cmFuZ2UKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgeHJhbmdlID0gcmFuZ2UKKwordHJ5OgorICAgIG1hcCA9IGl0ZXJ0b29scy5pbWFwCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgcGFzcworCisKK1RIUk9VR0hQVVRfRFVSQVRJT04gPSAyLjAKKworTEFURU5DWV9QSU5HX0lOVEVSVkFMID0gMC4xCitMQVRFTkNZX0RVUkFUSU9OID0gMi4wCisKK0JBTkRXSURUSF9QQUNLRVRfU0laRSA9IDEwMjQKK0JBTkRXSURUSF9EVVJBVElPTiA9IDIuMAorCisKK2RlZiB0YXNrX3BpZGlnaXRzKCk6CisgICAgIiIiUGkgY2FsY3VsYXRpb24gKFB5dGhvbikiIiIKKyAgICBfbWFwID0gbWFwCisgICAgX2NvdW50ID0gaXRlcnRvb2xzLmNvdW50CisgICAgX2lzbGljZSA9IGl0ZXJ0b29scy5pc2xpY2UKKworICAgIGRlZiBjYWxjX25kaWdpdHMobik6CisgICAgICAgICMgRnJvbSBodHRwOi8vc2hvb3RvdXQuYWxpb3RoLmRlYmlhbi5vcmcvCisgICAgICAgIGRlZiBnZW5feCgpOgorICAgICAgICAgICAgcmV0dXJuIF9tYXAobGFtYmRhIGs6IChrLCA0KmsgKyAyLCAwLCAyKmsgKyAxKSwgX2NvdW50KDEpKQorCisgICAgICAgIGRlZiBjb21wb3NlKGEsIGIpOgorICAgICAgICAgICAgYXEsIGFyLCBhc18sIGF0ID0gYQorICAgICAgICAgICAgYnEsIGJyLCBicywgYnQgPSBiCisgICAgICAgICAgICByZXR1cm4gKGFxICogYnEsCisgICAgICAgICAgICAgICAgICAgIGFxICogYnIgKyBhciAqIGJ0LAorICAgICAgICAgICAgICAgICAgICBhc18gKiBicSArIGF0ICogYnMsCisgICAgICAgICAgICAgICAgICAgIGFzXyAqIGJyICsgYXQgKiBidCkKKworICAgICAgICBkZWYgZXh0cmFjdCh6LCBqKToKKyAgICAgICAgICAgIHEsIHIsIHMsIHQgPSB6CisgICAgICAgICAgICByZXR1cm4gKHEqaiArIHIpIC8vIChzKmogKyB0KQorCisgICAgICAgIGRlZiBwaV9kaWdpdHMoKToKKyAgICAgICAgICAgIHogPSAoMSwgMCwgMCwgMSkKKyAgICAgICAgICAgIHggPSBnZW5feCgpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHkgPSBleHRyYWN0KHosIDMpCisgICAgICAgICAgICAgICAgd2hpbGUgeSAhPSBleHRyYWN0KHosIDQpOgorICAgICAgICAgICAgICAgICAgICB6ID0gY29tcG9zZSh6LCBuZXh0KHgpKQorICAgICAgICAgICAgICAgICAgICB5ID0gZXh0cmFjdCh6LCAzKQorICAgICAgICAgICAgICAgIHogPSBjb21wb3NlKCgxMCwgLTEwKnksIDAsIDEpLCB6KQorICAgICAgICAgICAgICAgIHlpZWxkIHkKKworICAgICAgICByZXR1cm4gbGlzdChfaXNsaWNlKHBpX2RpZ2l0cygpLCBuKSkKKworICAgIHJldHVybiBjYWxjX25kaWdpdHMsICg1MCwgKQorCitkZWYgdGFza19yZWdleCgpOgorICAgICIiInJlZ3VsYXIgZXhwcmVzc2lvbiAoQykiIiIKKyAgICAjIFhYWCB0aGlzIHRhc2sgZ2l2ZXMgaG9ycmVuZG91cyBsYXRlbmN5IHJlc3VsdHMuCisgICAgaW1wb3J0IHJlCisgICAgIyBUYWtlbiBmcm9tIHRoZSBgaW5zcGVjdGAgbW9kdWxlCisgICAgcGF0ID0gcmUuY29tcGlsZShyJ14oXHMqZGVmXHMpfCguKig/PCFcdylsYW1iZGEoOnxccykpfF4oXHMqQCknLCByZS5NVUxUSUxJTkUpCisgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAiciIpIGFzIGY6CisgICAgICAgIGFyZyA9IGYucmVhZCgyMDAwKQorCisgICAgZGVmIGZpbmRhbGwocyk6CisgICAgICAgIHQgPSB0aW1lLnRpbWUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gcGF0LmZpbmRhbGwocykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHByaW50KHRpbWUudGltZSgpIC0gdCkKKyAgICByZXR1cm4gcGF0LmZpbmRhbGwsIChhcmcsICkKKworZGVmIHRhc2tfc29ydCgpOgorICAgICIiImxpc3Qgc29ydGluZyAoQykiIiIKKyAgICBkZWYgbGlzdF9zb3J0KGwpOgorICAgICAgICBsID0gbFs6Oi0xXQorICAgICAgICBsLnNvcnQoKQorCisgICAgcmV0dXJuIGxpc3Rfc29ydCwgKGxpc3QocmFuZ2UoMTAwMCkpLCApCisKK2RlZiB0YXNrX2NvbXByZXNzX3psaWIoKToKKyAgICAiIiJ6bGliIGNvbXByZXNzaW9uIChDKSIiIgorICAgIGltcG9ydCB6bGliCisgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAicmIiKSBhcyBmOgorICAgICAgICBhcmcgPSBmLnJlYWQoNTAwMCkgKiAzCisKKyAgICBkZWYgY29tcHJlc3Mocyk6CisgICAgICAgIHpsaWIuZGVjb21wcmVzcyh6bGliLmNvbXByZXNzKHMsIDUpKQorICAgIHJldHVybiBjb21wcmVzcywgKGFyZywgKQorCitkZWYgdGFza19jb21wcmVzc19iejIoKToKKyAgICAiIiJiejIgY29tcHJlc3Npb24gKEMpIiIiCisgICAgaW1wb3J0IGJ6MgorICAgIHdpdGggb3BlbihfX2ZpbGVfXywgInJiIikgYXMgZjoKKyAgICAgICAgYXJnID0gZi5yZWFkKDMwMDApICogMgorCisgICAgZGVmIGNvbXByZXNzKHMpOgorICAgICAgICBiejIuY29tcHJlc3MocykKKyAgICByZXR1cm4gY29tcHJlc3MsIChhcmcsICkKKworZGVmIHRhc2tfaGFzaGluZygpOgorICAgICIiIlNIQTEgaGFzaGluZyAoQykiIiIKKyAgICBpbXBvcnQgaGFzaGxpYgorICAgIHdpdGggb3BlbihfX2ZpbGVfXywgInJiIikgYXMgZjoKKyAgICAgICAgYXJnID0gZi5yZWFkKDUwMDApICogMzAKKworICAgIGRlZiBjb21wdXRlKHMpOgorICAgICAgICBoYXNobGliLnNoYTEocykuZGlnZXN0KCkKKyAgICByZXR1cm4gY29tcHV0ZSwgKGFyZywgKQorCisKK3Rocm91Z2hwdXRfdGFza3MgPSBbdGFza19waWRpZ2l0cywgdGFza19yZWdleF0KK2ZvciBtb2QgaW4gJ2J6MicsICdoYXNobGliJzoKKyAgICB0cnk6CisgICAgICAgIGdsb2JhbHMoKVttb2RdID0gX19pbXBvcnRfXyhtb2QpCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBnbG9iYWxzKClbbW9kXSA9IE5vbmUKKworIyBGb3Igd2hhdGV2ZXIgcmVhc29ucywgemxpYiBnaXZlcyBpcnJlZ3VsYXIgcmVzdWx0cywgc28gd2UgcHJlZmVyIGJ6MiBvcgorIyBoYXNobGliIGlmIGF2YWlsYWJsZS4KKyMgKE5PVEU6IGhhc2hsaWIgcmVsZWFzZXMgdGhlIEdJTCBmcm9tIDIuNyBhbmQgMy4xIG9ud2FyZHMpCitpZiBiejIgaXMgbm90IE5vbmU6CisgICAgdGhyb3VnaHB1dF90YXNrcy5hcHBlbmQodGFza19jb21wcmVzc19iejIpCitlbGlmIGhhc2hsaWIgaXMgbm90IE5vbmU6CisgICAgdGhyb3VnaHB1dF90YXNrcy5hcHBlbmQodGFza19oYXNoaW5nKQorZWxzZToKKyAgICB0aHJvdWdocHV0X3Rhc2tzLmFwcGVuZCh0YXNrX2NvbXByZXNzX3psaWIpCisKK2xhdGVuY3lfdGFza3MgPSB0aHJvdWdocHV0X3Rhc2tzCitiYW5kd2lkdGhfdGFza3MgPSBbdGFza19waWRpZ2l0c10KKworCitjbGFzcyBUaW1lZExvb3A6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMsIGFyZ3MpOgorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzdGFydF90aW1lLCBtaW5fZHVyYXRpb24sIGVuZF9ldmVudCwgZG9feWllbGQ9RmFsc2UpOgorICAgICAgICBzdGVwID0gMjAKKyAgICAgICAgbml0ZXJzID0gMAorICAgICAgICBkdXJhdGlvbiA9IDAuMAorICAgICAgICBfdGltZSA9IHRpbWUudGltZQorICAgICAgICBfc2xlZXAgPSB0aW1lLnNsZWVwCisgICAgICAgIF9mdW5jID0gc2VsZi5mdW5jCisgICAgICAgIF9hcmdzID0gc2VsZi5hcmdzCisgICAgICAgIHQxID0gc3RhcnRfdGltZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc3RlcCk6CisgICAgICAgICAgICAgICAgX2Z1bmMoKl9hcmdzKQorICAgICAgICAgICAgdDIgPSBfdGltZSgpCisgICAgICAgICAgICAjIElmIGFub3RoZXIgdGhyZWFkIHRlcm1pbmF0ZWQsIHRoZSBjdXJyZW50IG1lYXN1cmVtZW50IGlzIGludmFsaWQKKyAgICAgICAgICAgICMgPT4gcmV0dXJuIHRoZSBwcmV2aW91cyBvbmUuCisgICAgICAgICAgICBpZiBlbmRfZXZlbnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5pdGVycywgZHVyYXRpb24KKyAgICAgICAgICAgIG5pdGVycyArPSBzdGVwCisgICAgICAgICAgICBkdXJhdGlvbiA9IHQyIC0gc3RhcnRfdGltZQorICAgICAgICAgICAgaWYgZHVyYXRpb24gPj0gbWluX2R1cmF0aW9uOgorICAgICAgICAgICAgICAgIGVuZF9ldmVudC5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbml0ZXJzLCBkdXJhdGlvbgorICAgICAgICAgICAgaWYgdDIgLSB0MSA8IDAuMDE6CisgICAgICAgICAgICAgICAgIyBNaW5pbWl6ZSBpbnRlcmZlcmVuY2Ugb2YgbWVhc3VyZW1lbnQgb24gb3ZlcmFsbCBydW50aW1lCisgICAgICAgICAgICAgICAgc3RlcCA9IHN0ZXAgKiAzIC8vIDIKKyAgICAgICAgICAgIGVsaWYgZG9feWllbGQ6CisgICAgICAgICAgICAgICAgIyBPUyBzY2hlZHVsaW5nIG9mIFB5dGhvbiB0aHJlYWRzIGlzIHNvbWV0aW1lcyBzbyBiYWQgdGhhdCB3ZQorICAgICAgICAgICAgICAgICMgaGF2ZSB0byBmb3JjZSB0aHJlYWQgc3dpdGNoaW5nIG91cnNlbHZlcywgb3RoZXJ3aXNlIHdlIGdldAorICAgICAgICAgICAgICAgICMgY29tcGxldGVseSB1c2VsZXNzIHJlc3VsdHMuCisgICAgICAgICAgICAgICAgX3NsZWVwKDAuMDAwMSkKKyAgICAgICAgICAgIHQxID0gdDIKKworCitkZWYgcnVuX3Rocm91Z2hwdXRfdGVzdChmdW5jLCBhcmdzLCBudGhyZWFkcyk6CisgICAgYXNzZXJ0IG50aHJlYWRzID49IDEKKworICAgICMgV2FybSB1cAorICAgIGZ1bmMoKmFyZ3MpCisKKyAgICByZXN1bHRzID0gW10KKyAgICBsb29wID0gVGltZWRMb29wKGZ1bmMsIGFyZ3MpCisgICAgZW5kX2V2ZW50ID0gW10KKworICAgIGlmIG50aHJlYWRzID09IDE6CisgICAgICAgICMgUHVyZSBzaW5nbGUtdGhyZWFkZWQgcGVyZm9ybWFuY2UsIHdpdGhvdXQgYW55IHN3aXRjaGluZyBvcgorICAgICAgICAjIHN5bmNocm9uaXphdGlvbiBvdmVyaGVhZC4KKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKGxvb3Aoc3RhcnRfdGltZSwgVEhST1VHSFBVVF9EVVJBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfZXZlbnQsIGRvX3lpZWxkPUZhbHNlKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgIHN0YXJ0ZWQgPSBGYWxzZQorICAgIHJlYWR5X2NvbmQgPSB0aHJlYWRpbmcuQ29uZGl0aW9uKCkKKyAgICBzdGFydF9jb25kID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCisgICAgcmVhZHkgPSBbXQorCisgICAgZGVmIHJ1bigpOgorICAgICAgICB3aXRoIHJlYWR5X2NvbmQ6CisgICAgICAgICAgICByZWFkeS5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgIHJlYWR5X2NvbmQubm90aWZ5KCkKKyAgICAgICAgd2l0aCBzdGFydF9jb25kOgorICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0ZWQ6CisgICAgICAgICAgICAgICAgc3RhcnRfY29uZC53YWl0KCkKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQobG9vcChzdGFydF90aW1lLCBUSFJPVUdIUFVUX0RVUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9ldmVudCwgZG9feWllbGQ9VHJ1ZSkpCisKKyAgICB0aHJlYWRzID0gW10KKyAgICBmb3IgaSBpbiByYW5nZShudGhyZWFkcyk6CisgICAgICAgIHRocmVhZHMuYXBwZW5kKHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1bikpCisgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgdC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgdC5zdGFydCgpCisgICAgIyBXZSBkb24ndCB3YW50IG1lYXN1cmVtZW50cyB0byBpbmNsdWRlIHRocmVhZCBzdGFydHVwIG92ZXJoZWFkLAorICAgICMgc28gd2UgYXJyYW5nZSBmb3IgdGltaW5nIHRvIHN0YXJ0IGFmdGVyIGFsbCB0aHJlYWRzIGFyZSByZWFkeS4KKyAgICB3aXRoIHJlYWR5X2NvbmQ6CisgICAgICAgIHdoaWxlIGxlbihyZWFkeSkgPCBudGhyZWFkczoKKyAgICAgICAgICAgIHJlYWR5X2NvbmQud2FpdCgpCisgICAgd2l0aCBzdGFydF9jb25kOgorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgc3RhcnRlZCA9IFRydWUKKyAgICAgICAgc3RhcnRfY29uZC5ub3RpZnkobnRocmVhZHMpCisgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgdC5qb2luKCkKKworICAgIHJldHVybiByZXN1bHRzCisKK2RlZiBydW5fdGhyb3VnaHB1dF90ZXN0cyhtYXhfdGhyZWFkcyk6CisgICAgZm9yIHRhc2sgaW4gdGhyb3VnaHB1dF90YXNrczoKKyAgICAgICAgcHJpbnQodGFzay5fX2RvY19fKQorICAgICAgICBwcmludCgpCisgICAgICAgIGZ1bmMsIGFyZ3MgPSB0YXNrKCkKKyAgICAgICAgbnRocmVhZHMgPSAxCisgICAgICAgIGJhc2VsaW5lX3NwZWVkID0gTm9uZQorICAgICAgICB3aGlsZSBudGhyZWFkcyA8PSBtYXhfdGhyZWFkczoKKyAgICAgICAgICAgIHJlc3VsdHMgPSBydW5fdGhyb3VnaHB1dF90ZXN0KGZ1bmMsIGFyZ3MsIG50aHJlYWRzKQorICAgICAgICAgICAgIyBUYWtpbmcgdGhlIG1heCBkdXJhdGlvbiByYXRoZXIgdGhhbiBhdmVyYWdlIGdpdmVzIHBlc3NpbWlzdGljCisgICAgICAgICAgICAjIHJlc3VsdHMgcmF0aGVyIHRoYW4gb3B0aW1pc3RpYy4KKyAgICAgICAgICAgIHNwZWVkID0gc3VtKHJbMF0gZm9yIHIgaW4gcmVzdWx0cykgLyBtYXgoclsxXSBmb3IgciBpbiByZXN1bHRzKQorICAgICAgICAgICAgcHJpbnQoInRocmVhZHM9JWQ6ICVkIiAlIChudGhyZWFkcywgc3BlZWQpLCBlbmQ9IiIpCisgICAgICAgICAgICBpZiBiYXNlbGluZV9zcGVlZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHByaW50KCIgaXRlcmF0aW9ucy9zLiIpCisgICAgICAgICAgICAgICAgYmFzZWxpbmVfc3BlZWQgPSBzcGVlZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCgiICggJWQgJSUpIiAlIChzcGVlZCAvIGJhc2VsaW5lX3NwZWVkICogMTAwKSkKKyAgICAgICAgICAgIG50aHJlYWRzICs9IDEKKyAgICAgICAgcHJpbnQoKQorCisKK0xBVF9FTkQgPSAiRU5EIgorCitkZWYgX3NlbmR0byhzb2NrLCBzLCBhZGRyKToKKyAgICBzb2NrLnNlbmR0byhzLmVuY29kZSgnYXNjaWknKSwgYWRkcikKKworZGVmIF9yZWN2KHNvY2ssIG4pOgorICAgIHJldHVybiBzb2NrLnJlY3YobikuZGVjb2RlKCdhc2NpaScpCisKK2RlZiBsYXRlbmN5X2NsaWVudChhZGRyLCBuYl9waW5ncywgaW50ZXJ2YWwpOgorICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKyAgICBfdGltZSA9IHRpbWUudGltZQorICAgIF9zbGVlcCA9IHRpbWUuc2xlZXAKKyAgICBkZWYgX3BpbmcoKToKKyAgICAgICAgX3NlbmR0byhzb2NrLCAiJXJcbiIgJSBfdGltZSgpLCBhZGRyKQorICAgICMgVGhlIGZpcnN0IHBpbmcgc2lnbmFscyB0aGUgcGFyZW50IHByb2Nlc3MgdGhhdCB3ZSBhcmUgcmVhZHkuCisgICAgX3BpbmcoKQorICAgICMgV2UgZ2l2ZSB0aGUgcGFyZW50IGEgYml0IG9mIHRpbWUgdG8gbm90aWNlLgorICAgIF9zbGVlcCgxLjApCisgICAgZm9yIGkgaW4gcmFuZ2UobmJfcGluZ3MpOgorICAgICAgICBfc2xlZXAoaW50ZXJ2YWwpCisgICAgICAgIF9waW5nKCkKKyAgICBfc2VuZHRvKHNvY2ssIExBVF9FTkQgKyAiXG4iLCBhZGRyKQorCitkZWYgcnVuX2xhdGVuY3lfY2xpZW50KCoqa3dhcmdzKToKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1FJywgb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKV0KKyAgICBjbWRfbGluZS5leHRlbmQoWyctLWxhdGNsaWVudCcsIHJlcHIoa3dhcmdzKV0pCisgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUpICMsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCitkZWYgcnVuX2xhdGVuY3lfdGVzdChmdW5jLCBhcmdzLCBudGhyZWFkcyk6CisgICAgIyBDcmVhdGUgYSBsaXN0ZW5pbmcgc29ja2V0IHRvIHJlY2VpdmUgdGhlIHBpbmdzLiBXZSB1c2UgVURQIHdoaWNoIHNob3VsZAorICAgICMgYmUgcGFpbmxlc3NseSBjcm9zcy1wbGF0Zm9ybS4KKyAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgc29jay5iaW5kKCgiMTI3LjAuMC4xIiwgMCkpCisgICAgYWRkciA9IHNvY2suZ2V0c29ja25hbWUoKQorCisgICAgaW50ZXJ2YWwgPSBMQVRFTkNZX1BJTkdfSU5URVJWQUwKKyAgICBkdXJhdGlvbiA9IExBVEVOQ1lfRFVSQVRJT04KKyAgICBuYl9waW5ncyA9IGludChkdXJhdGlvbiAvIGludGVydmFsKQorCisgICAgcmVzdWx0cyA9IFtdCisgICAgdGhyZWFkcyA9IFtdCisgICAgZW5kX2V2ZW50ID0gW10KKyAgICBzdGFydF9jb25kID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCisgICAgc3RhcnRlZCA9IEZhbHNlCisgICAgaWYgbnRocmVhZHMgPiAwOgorICAgICAgICAjIFdhcm0gdXAKKyAgICAgICAgZnVuYygqYXJncykKKworICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgbG9vcCA9IFRpbWVkTG9vcChmdW5jLCBhcmdzKQorICAgICAgICByZWFkeSA9IFtdCisgICAgICAgIHJlYWR5X2NvbmQgPSB0aHJlYWRpbmcuQ29uZGl0aW9uKCkKKworICAgICAgICBkZWYgcnVuKCk6CisgICAgICAgICAgICB3aXRoIHJlYWR5X2NvbmQ6CisgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICAgICAgcmVhZHlfY29uZC5ub3RpZnkoKQorICAgICAgICAgICAgd2l0aCBzdGFydF9jb25kOgorICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzdGFydGVkOgorICAgICAgICAgICAgICAgICAgICBzdGFydF9jb25kLndhaXQoKQorICAgICAgICAgICAgbG9vcChzdGFydF90aW1lLCBkdXJhdGlvbiAqIDEuNSwgZW5kX2V2ZW50LCBkb195aWVsZD1GYWxzZSkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShudGhyZWFkcyk6CisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW4pKQorICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAjIFdhaXQgZm9yIHRocmVhZHMgdG8gYmUgcmVhZHkKKyAgICAgICAgd2l0aCByZWFkeV9jb25kOgorICAgICAgICAgICAgd2hpbGUgbGVuKHJlYWR5KSA8IG50aHJlYWRzOgorICAgICAgICAgICAgICAgIHJlYWR5X2NvbmQud2FpdCgpCisKKyAgICAjIFJ1biB0aGUgY2xpZW50IGFuZCB3YWl0IGZvciB0aGUgZmlyc3QgcGluZyhzKSB0byBhcnJpdmUgYmVmb3JlCisgICAgIyB1bmJsb2NraW5nIHRoZSBiYWNrZ3JvdW5kIHRocmVhZHMuCisgICAgY2h1bmtzID0gW10KKyAgICBwcm9jZXNzID0gcnVuX2xhdGVuY3lfY2xpZW50KGFkZHI9c29jay5nZXRzb2NrbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJfcGluZ3M9bmJfcGluZ3MsIGludGVydmFsPWludGVydmFsKQorICAgIHMgPSBfcmVjdihzb2NrLCA0MDk2KQorICAgIF90aW1lID0gdGltZS50aW1lCisKKyAgICB3aXRoIHN0YXJ0X2NvbmQ6CisgICAgICAgIHN0YXJ0X3RpbWUgPSBfdGltZSgpCisgICAgICAgIHN0YXJ0ZWQgPSBUcnVlCisgICAgICAgIHN0YXJ0X2NvbmQubm90aWZ5KG50aHJlYWRzKQorCisgICAgd2hpbGUgTEFUX0VORCBub3QgaW4gczoKKyAgICAgICAgcyA9IF9yZWN2KHNvY2ssIDQwOTYpCisgICAgICAgIHQgPSBfdGltZSgpCisgICAgICAgIGNodW5rcy5hcHBlbmQoKHQsIHMpKQorCisgICAgIyBUZWxsIHRoZSBiYWNrZ3JvdW5kIHRocmVhZHMgdG8gc3RvcC4KKyAgICBlbmRfZXZlbnQuYXBwZW5kKE5vbmUpCisgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgdC5qb2luKCkKKyAgICBwcm9jZXNzLndhaXQoKQorCisgICAgZm9yIHJlY3ZfdGltZSwgY2h1bmsgaW4gY2h1bmtzOgorICAgICAgICAjIE5PVEU6IGl0IGlzIGFzc3VtZWQgdGhhdCBhIGxpbmUgc2VudCBieSBhIGNsaWVudCB3YXNuJ3QgcmVjZWl2ZWQKKyAgICAgICAgIyBpbiB0d28gY2h1bmtzIGJlY2F1c2UgdGhlIGxpbmVzIGFyZSB2ZXJ5IHNtYWxsLgorICAgICAgICBmb3IgbGluZSBpbiBjaHVuay5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICBpZiBsaW5lIGFuZCBsaW5lICE9IExBVF9FTkQ6CisgICAgICAgICAgICAgICAgc2VuZF90aW1lID0gZXZhbChsaW5lKQorICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbmRfdGltZSwgZmxvYXQpCisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKHNlbmRfdGltZSwgcmVjdl90aW1lKSkKKworICAgIHJldHVybiByZXN1bHRzCisKK2RlZiBydW5fbGF0ZW5jeV90ZXN0cyhtYXhfdGhyZWFkcyk6CisgICAgZm9yIHRhc2sgaW4gbGF0ZW5jeV90YXNrczoKKyAgICAgICAgcHJpbnQoIkJhY2tncm91bmQgQ1BVIHRhc2s6IiwgdGFzay5fX2RvY19fKQorICAgICAgICBwcmludCgpCisgICAgICAgIGZ1bmMsIGFyZ3MgPSB0YXNrKCkKKyAgICAgICAgbnRocmVhZHMgPSAwCisgICAgICAgIHdoaWxlIG50aHJlYWRzIDw9IG1heF90aHJlYWRzOgorICAgICAgICAgICAgcmVzdWx0cyA9IHJ1bl9sYXRlbmN5X3Rlc3QoZnVuYywgYXJncywgbnRocmVhZHMpCisgICAgICAgICAgICBuID0gbGVuKHJlc3VsdHMpCisgICAgICAgICAgICAjIFdlIHByaW50IG91dCBtaWxsaXNlY29uZHMKKyAgICAgICAgICAgIGxhdHMgPSBbMTAwMCAqICh0MiAtIHQxKSBmb3IgKHQxLCB0MikgaW4gcmVzdWx0c10KKyAgICAgICAgICAgICNwcmludChsaXN0KG1hcChpbnQsIGxhdHMpKSkKKyAgICAgICAgICAgIGF2ZyA9IHN1bShsYXRzKSAvIG4KKyAgICAgICAgICAgIGRldiA9IChzdW0oKHggLSBhdmcpICoqIDIgZm9yIHggaW4gbGF0cykgLyBuKSAqKiAwLjUKKyAgICAgICAgICAgIHByaW50KCJDUFUgdGhyZWFkcz0lZDogJWQgbXMuIChzdGQgZGV2OiAlZCBtcy4pIiAlIChudGhyZWFkcywgYXZnLCBkZXYpLCBlbmQ9IiIpCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAjcHJpbnQoIiAgICBbLi4uIGZyb20gJWQgc2FtcGxlc10iICUgbikKKyAgICAgICAgICAgIG50aHJlYWRzICs9IDEKKyAgICAgICAgcHJpbnQoKQorCisKK0JXX0VORCA9ICJFTkQiCisKK2RlZiBiYW5kd2lkdGhfY2xpZW50KGFkZHIsIHBhY2tldF9zaXplLCBkdXJhdGlvbik6CisgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgIHNvY2suYmluZCgoIjEyNy4wLjAuMSIsIDApKQorICAgIGxvY2FsX2FkZHIgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICBfdGltZSA9IHRpbWUudGltZQorICAgIF9zbGVlcCA9IHRpbWUuc2xlZXAKKyAgICBkZWYgX3NlbmRfY2h1bmsobXNnKToKKyAgICAgICAgX3NlbmR0byhzb2NrLCAoIiVyIyVzXG4iICUgKGxvY2FsX2FkZHIsIG1zZykpLnJqdXN0KHBhY2tldF9zaXplKSwgYWRkcikKKyAgICAjIFdlIGdpdmUgdGhlIHBhcmVudCBzb21lIHRpbWUgdG8gYmUgcmVhZHkuCisgICAgX3NsZWVwKDEuMCkKKyAgICB0cnk6CisgICAgICAgIHN0YXJ0X3RpbWUgPSBfdGltZSgpCisgICAgICAgIGVuZF90aW1lID0gc3RhcnRfdGltZSArIGR1cmF0aW9uICogMi4wCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIF90aW1lKCkgPCBlbmRfdGltZToKKyAgICAgICAgICAgIF9zZW5kX2NodW5rKHN0cihpKSkKKyAgICAgICAgICAgIHMgPSBfcmVjdihzb2NrLCBwYWNrZXRfc2l6ZSkKKyAgICAgICAgICAgIGFzc2VydCBsZW4ocykgPT0gcGFja2V0X3NpemUKKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICBfc2VuZF9jaHVuayhCV19FTkQpCisgICAgZmluYWxseToKKyAgICAgICAgc29jay5jbG9zZSgpCisKK2RlZiBydW5fYmFuZHdpZHRoX2NsaWVudCgqKmt3YXJncyk6CisgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRScsIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXyldCisgICAgY21kX2xpbmUuZXh0ZW5kKFsnLS1id2NsaWVudCcsIHJlcHIoa3dhcmdzKV0pCisgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUpICMsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCitkZWYgcnVuX2JhbmR3aWR0aF90ZXN0KGZ1bmMsIGFyZ3MsIG50aHJlYWRzKToKKyAgICAjIENyZWF0ZSBhIGxpc3RlbmluZyBzb2NrZXQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0cy4gV2UgdXNlIFVEUCB3aGljaCBzaG91bGQKKyAgICAjIGJlIHBhaW5sZXNzbHkgY3Jvc3MtcGxhdGZvcm0uCisgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgIHNvY2suYmluZCgoIjEyNy4wLjAuMSIsIDApKQorICAgIGFkZHIgPSBzb2NrLmdldHNvY2tuYW1lKCkKKworICAgIGR1cmF0aW9uID0gQkFORFdJRFRIX0RVUkFUSU9OCisgICAgcGFja2V0X3NpemUgPSBCQU5EV0lEVEhfUEFDS0VUX1NJWkUKKworICAgIHJlc3VsdHMgPSBbXQorICAgIHRocmVhZHMgPSBbXQorICAgIGVuZF9ldmVudCA9IFtdCisgICAgc3RhcnRfY29uZCA9IHRocmVhZGluZy5Db25kaXRpb24oKQorICAgIHN0YXJ0ZWQgPSBGYWxzZQorICAgIGlmIG50aHJlYWRzID4gMDoKKyAgICAgICAgIyBXYXJtIHVwCisgICAgICAgIGZ1bmMoKmFyZ3MpCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGxvb3AgPSBUaW1lZExvb3AoZnVuYywgYXJncykKKyAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICByZWFkeV9jb25kID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCisKKyAgICAgICAgZGVmIHJ1bigpOgorICAgICAgICAgICAgd2l0aCByZWFkeV9jb25kOgorICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZChOb25lKQorICAgICAgICAgICAgICAgIHJlYWR5X2NvbmQubm90aWZ5KCkKKyAgICAgICAgICAgIHdpdGggc3RhcnRfY29uZDoKKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRlZDoKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfY29uZC53YWl0KCkKKyAgICAgICAgICAgIGxvb3Aoc3RhcnRfdGltZSwgZHVyYXRpb24gKiAxLjUsIGVuZF9ldmVudCwgZG9feWllbGQ9RmFsc2UpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnRocmVhZHMpOgorICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuKSkKKyAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgIyBXYWl0IGZvciB0aHJlYWRzIHRvIGJlIHJlYWR5CisgICAgICAgIHdpdGggcmVhZHlfY29uZDoKKyAgICAgICAgICAgIHdoaWxlIGxlbihyZWFkeSkgPCBudGhyZWFkczoKKyAgICAgICAgICAgICAgICByZWFkeV9jb25kLndhaXQoKQorCisgICAgIyBSdW4gdGhlIGNsaWVudCBhbmQgd2FpdCBmb3IgdGhlIGZpcnN0IHBhY2tldCB0byBhcnJpdmUgYmVmb3JlCisgICAgIyB1bmJsb2NraW5nIHRoZSBiYWNrZ3JvdW5kIHRocmVhZHMuCisgICAgcHJvY2VzcyA9IHJ1bl9iYW5kd2lkdGhfY2xpZW50KGFkZHI9YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X3NpemU9cGFja2V0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uPWR1cmF0aW9uKQorICAgIF90aW1lID0gdGltZS50aW1lCisgICAgIyBUaGlzIHdpbGwgYWxzbyB3YWl0IGZvciB0aGUgcGFyZW50IHRvIGJlIHJlYWR5CisgICAgcyA9IF9yZWN2KHNvY2ssIHBhY2tldF9zaXplKQorICAgIHJlbW90ZV9hZGRyID0gZXZhbChzLnBhcnRpdGlvbignIycpWzBdKQorCisgICAgd2l0aCBzdGFydF9jb25kOgorICAgICAgICBzdGFydF90aW1lID0gX3RpbWUoKQorICAgICAgICBzdGFydGVkID0gVHJ1ZQorICAgICAgICBzdGFydF9jb25kLm5vdGlmeShudGhyZWFkcykKKworICAgIG4gPSAwCisgICAgZmlyc3RfdGltZSA9IE5vbmUKKyAgICB3aGlsZSBub3QgZW5kX2V2ZW50IGFuZCBCV19FTkQgbm90IGluIHM6CisgICAgICAgIF9zZW5kdG8oc29jaywgcywgcmVtb3RlX2FkZHIpCisgICAgICAgIHMgPSBfcmVjdihzb2NrLCBwYWNrZXRfc2l6ZSkKKyAgICAgICAgaWYgZmlyc3RfdGltZSBpcyBOb25lOgorICAgICAgICAgICAgZmlyc3RfdGltZSA9IF90aW1lKCkKKyAgICAgICAgbiArPSAxCisgICAgZW5kX3RpbWUgPSBfdGltZSgpCisKKyAgICBlbmRfZXZlbnQuYXBwZW5kKE5vbmUpCisgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgdC5qb2luKCkKKyAgICBwcm9jZXNzLmtpbGwoKQorCisgICAgcmV0dXJuIChuIC0gMSkgLyAoZW5kX3RpbWUgLSBmaXJzdF90aW1lKQorCitkZWYgcnVuX2JhbmR3aWR0aF90ZXN0cyhtYXhfdGhyZWFkcyk6CisgICAgZm9yIHRhc2sgaW4gYmFuZHdpZHRoX3Rhc2tzOgorICAgICAgICBwcmludCgiQmFja2dyb3VuZCBDUFUgdGFzazoiLCB0YXNrLl9fZG9jX18pCisgICAgICAgIHByaW50KCkKKyAgICAgICAgZnVuYywgYXJncyA9IHRhc2soKQorICAgICAgICBudGhyZWFkcyA9IDAKKyAgICAgICAgYmFzZWxpbmVfc3BlZWQgPSBOb25lCisgICAgICAgIHdoaWxlIG50aHJlYWRzIDw9IG1heF90aHJlYWRzOgorICAgICAgICAgICAgcmVzdWx0cyA9IHJ1bl9iYW5kd2lkdGhfdGVzdChmdW5jLCBhcmdzLCBudGhyZWFkcykKKyAgICAgICAgICAgIHNwZWVkID0gcmVzdWx0cworICAgICAgICAgICAgI3NwZWVkID0gbGVuKHJlc3VsdHMpICogMS4wIC8gcmVzdWx0c1stMV1bMF0KKyAgICAgICAgICAgIHByaW50KCJDUFUgdGhyZWFkcz0lZDogJS4xZiIgJSAobnRocmVhZHMsIHNwZWVkKSwgZW5kPSIiKQorICAgICAgICAgICAgaWYgYmFzZWxpbmVfc3BlZWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwcmludCgiIHBhY2tldHMvcy4iKQorICAgICAgICAgICAgICAgIGJhc2VsaW5lX3NwZWVkID0gc3BlZWQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIiAoICVkICUlKSIgJSAoc3BlZWQgLyBiYXNlbGluZV9zcGVlZCAqIDEwMCkpCisgICAgICAgICAgICBudGhyZWFkcyArPSAxCisgICAgICAgIHByaW50KCkKKworCitkZWYgbWFpbigpOgorICAgIHVzYWdlID0gInVzYWdlOiAlcHJvZyBbLWh8LS1oZWxwXSBbb3B0aW9uc10iCisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRocm91Z2hwdXQiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InRocm91Z2hwdXQiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biB0aHJvdWdocHV0IHRlc3RzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1sYXRlbmN5IiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJsYXRlbmN5IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gbGF0ZW5jeSB0ZXN0cyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1iIiwgIi0tYmFuZHdpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJiYW5kd2lkdGgiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biBJL08gYmFuZHdpZHRoIHRlc3RzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWkiLCAiLS1pbnRlcnZhbCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImludCIsIGRlc3Q9ImNoZWNrX2ludGVydmFsIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InN5cy5zZXRjaGVja2ludGVydmFsKCkgdmFsdWUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItSSIsICItLXN3aXRjaC1pbnRlcnZhbCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImZsb2F0IiwgZGVzdD0ic3dpdGNoX2ludGVydmFsIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InN5cy5zZXRzd2l0Y2hpbnRlcnZhbCgpIHZhbHVlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW4iLCAiLS1udW0tdGhyZWFkcyIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImludCIsIGRlc3Q9Im50aHJlYWRzIiwgZGVmYXVsdD00LAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Im1heCBudW1iZXIgb2YgdGhyZWFkcyBpbiB0ZXN0cyIpCisKKyAgICAjIEhpZGRlbiBvcHRpb24gdG8gcnVuIHRoZSBwaW5naW5nIGFuZCBiYW5kd2lkdGggY2xpZW50cworICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1sYXRjbGllbnQiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJsYXRjbGllbnQiLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD1TVVBQUkVTU19IRUxQKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1id2NsaWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImJ3Y2xpZW50IiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9U1VQUFJFU1NfSEVMUCkKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYgYXJnczoKKyAgICAgICAgcGFyc2VyLmVycm9yKCJ1bmV4cGVjdGVkIGFyZ3VtZW50cyIpCisKKyAgICBpZiBvcHRpb25zLmxhdGNsaWVudDoKKyAgICAgICAga3dhcmdzID0gZXZhbChvcHRpb25zLmxhdGNsaWVudCkKKyAgICAgICAgbGF0ZW5jeV9jbGllbnQoKiprd2FyZ3MpCisgICAgICAgIHJldHVybgorCisgICAgaWYgb3B0aW9ucy5id2NsaWVudDoKKyAgICAgICAga3dhcmdzID0gZXZhbChvcHRpb25zLmJ3Y2xpZW50KQorICAgICAgICBiYW5kd2lkdGhfY2xpZW50KCoqa3dhcmdzKQorICAgICAgICByZXR1cm4KKworICAgIGlmIG5vdCBvcHRpb25zLnRocm91Z2hwdXQgYW5kIG5vdCBvcHRpb25zLmxhdGVuY3kgYW5kIG5vdCBvcHRpb25zLmJhbmR3aWR0aDoKKyAgICAgICAgb3B0aW9ucy50aHJvdWdocHV0ID0gb3B0aW9ucy5sYXRlbmN5ID0gb3B0aW9ucy5iYW5kd2lkdGggPSBUcnVlCisgICAgaWYgb3B0aW9ucy5jaGVja19pbnRlcnZhbDoKKyAgICAgICAgc3lzLnNldGNoZWNraW50ZXJ2YWwob3B0aW9ucy5jaGVja19pbnRlcnZhbCkKKyAgICBpZiBvcHRpb25zLnN3aXRjaF9pbnRlcnZhbDoKKyAgICAgICAgc3lzLnNldHN3aXRjaGludGVydmFsKG9wdGlvbnMuc3dpdGNoX2ludGVydmFsKQorCisgICAgcHJpbnQoIj09ICVzICVzICglcykgPT0iICUgKAorICAgICAgICBwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKSwKKyAgICAgICAgcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSwKKyAgICAgICAgcGxhdGZvcm0ucHl0aG9uX2J1aWxkKClbMF0sCisgICAgKSkKKyAgICAjIFByb2Nlc3NvciBpZGVudGlmaWNhdGlvbiBvZnRlbiBoYXMgcmVwZWF0ZWQgc3BhY2VzCisgICAgY3B1ID0gJyAnLmpvaW4ocGxhdGZvcm0ucHJvY2Vzc29yKCkuc3BsaXQoKSkKKyAgICBwcmludCgiPT0gJXMgJXMgb24gJyVzJyA9PSIgJSAoCisgICAgICAgIHBsYXRmb3JtLm1hY2hpbmUoKSwKKyAgICAgICAgcGxhdGZvcm0uc3lzdGVtKCksCisgICAgICAgIGNwdSwKKyAgICApKQorICAgIHByaW50KCkKKworICAgIGlmIG9wdGlvbnMudGhyb3VnaHB1dDoKKyAgICAgICAgcHJpbnQoIi0tLSBUaHJvdWdocHV0IC0tLSIpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcnVuX3Rocm91Z2hwdXRfdGVzdHMob3B0aW9ucy5udGhyZWFkcykKKworICAgIGlmIG9wdGlvbnMubGF0ZW5jeToKKyAgICAgICAgcHJpbnQoIi0tLSBMYXRlbmN5IC0tLSIpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcnVuX2xhdGVuY3lfdGVzdHMob3B0aW9ucy5udGhyZWFkcykKKworICAgIGlmIG9wdGlvbnMuYmFuZHdpZHRoOgorICAgICAgICBwcmludCgiLS0tIEkvTyBiYW5kd2lkdGggLS0tIikKKyAgICAgICAgcHJpbnQoKQorICAgICAgICBydW5fYmFuZHdpZHRoX3Rlc3RzKG9wdGlvbnMubnRocmVhZHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9mYXF3aXovZmFxdy5weSBiL1Rvb2xzL2ZhcXdpei9mYXF3LnB5CmluZGV4IGM2YzFhNmQuLmZlYTk4ZWMgMTAwNzU1Ci0tLSBhL1Rvb2xzL2ZhcXdpei9mYXF3LnB5CisrKyBiL1Rvb2xzL2ZhcXdpei9mYXF3LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9sb2NhbC9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KIAogIiIiRkFRIHdpemFyZCBib290c3RyYXAuIiIiCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5IGIvVG9vbHMvZnJlZXplL21ha2Vjb25maWcucHkKaW5kZXggN2NkOWI3OC4uMDZjYmI2MCAxMDA2NDQKLS0tIGEvVG9vbHMvZnJlZXplL21ha2Vjb25maWcucHkKKysrIGIvVG9vbHMvZnJlZXplL21ha2Vjb25maWcucHkKQEAgLTEsOSArMSw5IEBACiBpbXBvcnQgcmUKLQoraW1wb3J0IHN5cwogCiAjIFdyaXRlIHRoZSBjb25maWcuYyBmaWxlCiAKLW5ldmVyID0gWydtYXJzaGFsJywgJ19fbWFpbl9fJywgJ19fYnVpbHRpbl9fJywgJ3N5cycsICdleGNlcHRpb25zJ10KK25ldmVyID0gWydtYXJzaGFsJywgJ19fbWFpbl9fJywgJ19fYnVpbHRpbl9fJywgJ3N5cycsICdleGNlcHRpb25zJywgJ193YXJuaW5ncyddCiAKIGRlZiBtYWtlY29uZmlnKGluZnAsIG91dGZwLCBtb2R1bGVzLCB3aXRoX2lmZGVmPTApOgogICAgIG0xID0gcmUuY29tcGlsZSgnLS0gQURETU9EVUxFIE1BUktFUiAxIC0tJykKQEAgLTM4LDcgKzM4LDYgQEAKICMgVGVzdCBwcm9ncmFtLgogCiBkZWYgdGVzdCgpOgotICAgIGltcG9ydCBzeXMKICAgICBpZiBub3Qgc3lzLmFyZ3ZbMzpdOgogICAgICAgICBwcmludCAndXNhZ2U6IHB5dGhvbiBtYWtlY29uZmlnLnB5IGNvbmZpZy5jLmluIG91dHB1dGZpbGUnLAogICAgICAgICBwcmludCAnbW9kdWxlbmFtZSAuLi4nCmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvd2lubWFrZW1ha2VmaWxlLnB5IGIvVG9vbHMvZnJlZXplL3dpbm1ha2VtYWtlZmlsZS5weQppbmRleCA4NTcwZjNkLi4xOTUwZDZiIDEwMDY0NAotLS0gYS9Ub29scy9mcmVlemUvd2lubWFrZW1ha2VmaWxlLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS93aW5tYWtlbWFrZWZpbGUucHkKQEAgLTEzNCwxMiArMTM0LDEzIEBACiAgICAgcHJpbnQgOyBwcmludAogCiAgICAgcHJpbnQgIiQodGFyZ2V0KSQoZGVidWdfc3VmZml4KSVzOiAkKHRlbXBfZGlyKSAkKE9CSlMpIiAlICh0YXJnZXRfZXh0KQotICAgIHByaW50ICJcdGxpbmsgLW91dDokKHRhcmdldCkkKGRlYnVnX3N1ZmZpeCklcyAlcyIgJSAodGFyZ2V0X2V4dCwgdGFyZ2V0X2xpbmtfZmxhZ3MpLAotICAgIHByaW50ICJcdCQoT0JKUykgXFwiCi0gICAgcHJpbnQgIlx0JChMSUJTKSBcXCIKLSAgICBwcmludCAiXHQkKEFERE5fTElOS19GSUxFUykgXFwiCi0gICAgcHJpbnQgIlx0JChweXRob25saWIpICQobGN1c3RvbSkgJChsX2RlYnVnKVxcIgorICAgIHByaW50ICJcdGxpbmsgLW91dDokKHRhcmdldCkkKGRlYnVnX3N1ZmZpeCklcyAlcyIgJSAodGFyZ2V0X2V4dCwgdGFyZ2V0X2xpbmtfZmxhZ3MpLCAiQDw8IgorICAgIHByaW50ICJcdCQoT0JKUykiCisgICAgcHJpbnQgIlx0JChMSUJTKSIKKyAgICBwcmludCAiXHQkKEFERE5fTElOS19GSUxFUykiCisgICAgcHJpbnQgIlx0JChweXRob25saWIpICQobGN1c3RvbSkgJChsX2RlYnVnKSIKICAgICBwcmludCAiXHQkKHJlc291cmNlcykiCisgICAgcHJpbnQgIjw8IgogICAgIHByaW50CiAgICAgcHJpbnQgImNsZWFuOiIKICAgICBwcmludCAiXHQtcm0gLWYgKi5vYmoiCmRpZmYgLS1naXQgYS9Ub29scy9nZGIvbGlicHl0aG9uLnB5IGIvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWU3NGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQpAQCAtMCwwICsxLDE0NDcgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisnJycKK0Zyb20gZ2RiIDcgb253YXJkcywgZ2RiJ3MgYnVpbGQgY2FuIGJlIGNvbmZpZ3VyZWQgLS13aXRoLXB5dGhvbiwgYWxsb3dpbmcgZ2RiCit0byBiZSBleHRlbmRlZCB3aXRoIFB5dGhvbiBjb2RlIGUuZy4gZm9yIGxpYnJhcnktc3BlY2lmaWMgZGF0YSB2aXN1YWxpemF0aW9ucywKK3N1Y2ggYXMgZm9yIHRoZSBDKysgU1RMIHR5cGVzLiAgRG9jdW1lbnRhdGlvbiBvbiB0aGlzIEFQSSBjYW4gYmUgc2VlbiBhdDoKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9nZGIvY3VycmVudC9vbmxpbmVkb2NzL2dkYi9QeXRob24tQVBJLmh0bWwKKworCitUaGlzIHB5dGhvbiBtb2R1bGUgZGVhbHMgd2l0aCB0aGUgY2FzZSB3aGVuIHRoZSBwcm9jZXNzIGJlaW5nIGRlYnVnZ2VkICh0aGUKKyJpbmZlcmlvciBwcm9jZXNzIiBpbiBnZGIgcGFybGFuY2UpIGlzIGl0c2VsZiBweXRob24sIG9yIG1vcmUgc3BlY2lmaWNhbGx5LAorbGlua2VkIGFnYWluc3QgbGlicHl0aG9uLiAgSW4gdGhpcyBzaXR1YXRpb24sIGFsbW9zdCBldmVyeSBpdGVtIG9mIGRhdGEgaXMgYQorKFB5T2JqZWN0KiksIGFuZCBoYXZpbmcgdGhlIGRlYnVnZ2VyIG1lcmVseSBwcmludCB0aGVpciBhZGRyZXNzZXMgaXMgbm90IHZlcnkKK2VubGlnaHRlbmluZy4KKworVGhpcyBtb2R1bGUgZW1iZWRzIGtub3dsZWRnZSBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBsaWJweXRob24gc28KK3RoYXQgd2UgY2FuIGVtaXQgdXNlZnVsIHZpc3VhbGl6YXRpb25zIGUuZy4gYSBzdHJpbmcsIGEgbGlzdCwgYSBkaWN0LCBhIGZyYW1lCitnaXZpbmcgZmlsZS9saW5lIGluZm9ybWF0aW9uIGFuZCB0aGUgc3RhdGUgb2YgbG9jYWwgdmFyaWFibGVzCisKK0luIHBhcnRpY3VsYXIsIGdpdmVuIGEgZ2RiLlZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYSBQeU9iamVjdCogaW4gdGhlIGluZmVyaW9yCitwcm9jZXNzLCB3ZSBjYW4gZ2VuZXJhdGUgYSAicHJveHkgdmFsdWUiIHdpdGhpbiB0aGUgZ2RiIHByb2Nlc3MuICBGb3IgZXhhbXBsZSwKK2dpdmVuIGEgUHlPYmplY3QqIGluIHRoZSBpbmZlcmlvciBwcm9jZXNzIHRoYXQgaXMgaW4gZmFjdCBhIFB5TGlzdE9iamVjdCoKK2hvbGRpbmcgdGhyZWUgUHlPYmplY3QqIHRoYXQgdHVybiBvdXQgdG8gYmUgUHlTdHJpbmdPYmplY3QqIGluc3RhbmNlcywgd2UgY2FuCitnZW5lcmF0ZSBhIHByb3h5IHZhbHVlIHdpdGhpbiB0aGUgZ2RiIHByb2Nlc3MgdGhhdCBpcyBhIGxpc3Qgb2Ygc3RyaW5nczoKKyAgWyJmb28iLCAiYmFyIiwgImJheiJdCisKK0RvaW5nIHNvIGNhbiBiZSBleHBlbnNpdmUgZm9yIGNvbXBsaWNhdGVkIGdyYXBocyBvZiBvYmplY3RzLCBhbmQgY291bGQgdGFrZQorc29tZSB0aW1lLCBzbyB3ZSBhbHNvIGhhdmUgYSAid3JpdGVfcmVwciIgbWV0aG9kIHRoYXQgd3JpdGVzIGEgcmVwcmVzZW50YXRpb24KK29mIHRoZSBkYXRhIHRvIGEgZmlsZS1saWtlIG9iamVjdC4gIFRoaXMgYWxsb3dzIHVzIHRvIHN0b3AgdGhlIHRyYXZlcnNhbCBieQoraGF2aW5nIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBnZXRzIHRvbyBtdWNoIGRhdGEuCisKK1dpdGggYm90aCAicHJveHl2YWwiIGFuZCAid3JpdGVfcmVwciIgd2Uga2VlcCB0cmFjayBvZiB0aGUgc2V0IG9mIGFsbCBhZGRyZXNzZXMKK3Zpc2l0ZWQgc28gZmFyIGluIHRoZSB0cmF2ZXJzYWwsIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBkdWUgdG8gY3ljbGVzIGluCit0aGUgZ3JhcGggb2Ygb2JqZWN0IHJlZmVyZW5jZXMuCisKK1dlIHRyeSB0byBkZWZlciBnZGIubG9va3VwX3R5cGUoKSBpbnZvY2F0aW9ucyBmb3IgcHl0aG9uIHR5cGVzIHVudGlsIGFzIGxhdGUgYXMKK3Bvc3NpYmxlOiBmb3IgYSBkeW5hbWljYWxseSBsaW5rZWQgcHl0aG9uIGJpbmFyeSwgd2hlbiB0aGUgcHJvY2VzcyBzdGFydHMgaW4KK3RoZSBkZWJ1Z2dlciwgdGhlIGxpYnB5dGhvbi5zbyBoYXNuJ3QgYmVlbiBkeW5hbWljYWxseSBsb2FkZWQgeWV0LCBzbyBub25lIG9mCit0aGUgdHlwZSBuYW1lcyBhcmUga25vd24gdG8gdGhlIGRlYnVnZ2VyCisKK1RoZSBtb2R1bGUgYWxzbyBleHRlbmRzIGdkYiB3aXRoIHNvbWUgcHl0aG9uLXNwZWNpZmljIGNvbW1hbmRzLgorJycnCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CitpbXBvcnQgZ2RiCitpbXBvcnQgc3lzCisKKyMgTG9vayB1cCB0aGUgZ2RiLlR5cGUgZm9yIHNvbWUgc3RhbmRhcmQgdHlwZXM6CitfdHlwZV9jaGFyX3B0ciA9IGdkYi5sb29rdXBfdHlwZSgnY2hhcicpLnBvaW50ZXIoKSAjIGNoYXIqCitfdHlwZV91bnNpZ25lZF9jaGFyX3B0ciA9IGdkYi5sb29rdXBfdHlwZSgndW5zaWduZWQgY2hhcicpLnBvaW50ZXIoKSAjIHVuc2lnbmVkIGNoYXIqCitfdHlwZV92b2lkX3B0ciA9IGdkYi5sb29rdXBfdHlwZSgndm9pZCcpLnBvaW50ZXIoKSAjIHZvaWQqCitfdHlwZV9zaXplX3QgPSBnZGIubG9va3VwX3R5cGUoJ3NpemVfdCcpCisKK1NJWkVPRl9WT0lEX1AgPSBfdHlwZV92b2lkX3B0ci5zaXplb2YKKworCitQeV9UUEZMQUdTX0hFQVBUWVBFID0gKDFMIDw8IDkpCisKK1B5X1RQRkxBR1NfSU5UX1NVQkNMQVNTICAgICAgPSAoMUwgPDwgMjMpCitQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1MgICAgID0gKDFMIDw8IDI0KQorUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTICAgICA9ICgxTCA8PCAyNSkKK1B5X1RQRkxBR1NfVFVQTEVfU1VCQ0xBU1MgICAgPSAoMUwgPDwgMjYpCitQeV9UUEZMQUdTX1NUUklOR19TVUJDTEFTUyAgID0gKDFMIDw8IDI3KQorUHlfVFBGTEFHU19VTklDT0RFX1NVQkNMQVNTICA9ICgxTCA8PCAyOCkKK1B5X1RQRkxBR1NfRElDVF9TVUJDTEFTUyAgICAgPSAoMUwgPDwgMjkpCitQeV9UUEZMQUdTX0JBU0VfRVhDX1NVQkNMQVNTID0gKDFMIDw8IDMwKQorUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTICAgICA9ICgxTCA8PCAzMSkKKworCitNQVhfT1VUUFVUX0xFTj0xMDI0CisKK2NsYXNzIE51bGxQeU9iamVjdFB0cihSdW50aW1lRXJyb3IpOgorICAgIHBhc3MKKworCitkZWYgc2FmZXR5X2xpbWl0KHZhbCk6CisgICAgIyBHaXZlbiBhIGludGVnZXIgdmFsdWUgZnJvbSB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZCwgbGltaXQgaXQgdG8gc29tZQorICAgICMgc2FmZXR5IHRocmVzaG9sZCBzbyB0aGF0IGFyYml0cmFyeSBicmVha2FnZSB3aXRoaW4gc2FpZCBwcm9jZXNzIGRvZXNuJ3QKKyAgICAjIGJyZWFrIHRoZSBnZGIgcHJvY2VzcyB0b28gbXVjaCAoZS5nLiBzaXplcyBvZiBpdGVyYXRpb25zLCBzaXplcyBvZiBsaXN0cykKKyAgICByZXR1cm4gbWluKHZhbCwgMTAwMCkKKworCitkZWYgc2FmZV9yYW5nZSh2YWwpOgorICAgICMgQXMgcGVyIHJhbmdlLCBidXQgZG9uJ3QgdHJ1c3QgdGhlIHZhbHVlIHRvbyBtdWNoOiBjYXAgaXQgdG8gYSBzYWZldHkKKyAgICAjIHRocmVzaG9sZCBpbiBjYXNlIHRoZSBkYXRhIHdhcyBjb3JydXB0ZWQKKyAgICByZXR1cm4geHJhbmdlKHNhZmV0eV9saW1pdCh2YWwpKQorCisKK2NsYXNzIFN0cmluZ1RydW5jYXRlZChSdW50aW1lRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgVHJ1bmNhdGVkU3RyaW5nSU8ob2JqZWN0KToKKyAgICAnJydTaW1pbGFyIHRvIGNTdHJpbmdJTywgYnV0IGNhbiB0cnVuY2F0ZSB0aGUgb3V0cHV0IGJ5IHJhaXNpbmcgYQorICAgIFN0cmluZ1RydW5jYXRlZCBleGNlcHRpb24nJycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4bGVuPU5vbmUpOgorICAgICAgICBzZWxmLl92YWwgPSAnJworICAgICAgICBzZWxmLm1heGxlbiA9IG1heGxlbgorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBzZWxmLm1heGxlbjoKKyAgICAgICAgICAgIGlmIGxlbihkYXRhKSArIGxlbihzZWxmLl92YWwpID4gc2VsZi5tYXhsZW46CisgICAgICAgICAgICAgICAgIyBUcnVuY2F0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYuX3ZhbCArPSBkYXRhWzA6c2VsZi5tYXhsZW4gLSBsZW4oc2VsZi5fdmFsKV0KKyAgICAgICAgICAgICAgICByYWlzZSBTdHJpbmdUcnVuY2F0ZWQoKQorCisgICAgICAgIHNlbGYuX3ZhbCArPSBkYXRhCisKKyAgICBkZWYgZ2V0dmFsdWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl92YWwKKworY2xhc3MgUHlPYmplY3RQdHIob2JqZWN0KToKKyAgICAiIiIKKyAgICBDbGFzcyB3cmFwcGluZyBhIGdkYi5WYWx1ZSB0aGF0J3MgYSBlaXRoZXIgYSAoUHlPYmplY3QqKSB3aXRoaW4gdGhlCisgICAgaW5mZXJpb3IgcHJvY2Vzcywgb3Igc29tZSBzdWJjbGFzcyBwb2ludGVyIGUuZy4gKFB5U3RyaW5nT2JqZWN0KikKKworICAgIFRoZXJlIHdpbGwgYmUgYSBzdWJjbGFzcyBmb3IgZXZlcnkgcmVmaW5lZCBQeU9iamVjdCB0eXBlIHRoYXQgd2UgY2FyZQorICAgIGFib3V0LgorCisgICAgTm90ZSB0aGF0IGF0IGV2ZXJ5IHN0YWdlIHRoZSB1bmRlcmx5aW5nIHBvaW50ZXIgY291bGQgYmUgTlVMTCwgcG9pbnQKKyAgICB0byBjb3JydXB0IGRhdGEsIGV0YzsgdGhpcyBpcyB0aGUgZGVidWdnZXIsIGFmdGVyIGFsbC4KKyAgICAiIiIKKyAgICBfdHlwZW5hbWUgPSAnUHlPYmplY3QnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2RidmFsLCBjYXN0X3RvPU5vbmUpOgorICAgICAgICBpZiBjYXN0X3RvOgorICAgICAgICAgICAgc2VsZi5fZ2RidmFsID0gZ2RidmFsLmNhc3QoY2FzdF90bykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2dkYnZhbCA9IGdkYnZhbAorCisgICAgZGVmIGZpZWxkKHNlbGYsIG5hbWUpOgorICAgICAgICAnJycKKyAgICAgICAgR2V0IHRoZSBnZGIuVmFsdWUgZm9yIHRoZSBnaXZlbiBmaWVsZCB3aXRoaW4gdGhlIFB5T2JqZWN0LCBjb3Bpbmcgd2l0aAorICAgICAgICBzb21lIHB5dGhvbiAyIHZlcnN1cyBweXRob24gMyBkaWZmZXJlbmNlcy4KKworICAgICAgICBWYXJpb3VzIGxpYnB5dGhvbiB0eXBlcyBhcmUgZGVmaW5lZCB1c2luZyB0aGUgIlB5T2JqZWN0X0hFQUQiIGFuZAorICAgICAgICAiUHlPYmplY3RfVkFSX0hFQUQiIG1hY3Jvcy4KKworICAgICAgICBJbiBQeXRob24gMiwgdGhpcyB0aGVzZSBhcmUgZGVmaW5lZCBzbyB0aGF0ICJvYl90eXBlIiBhbmQgKGZvciBhIHZhcgorICAgICAgICBvYmplY3QpICJvYl9zaXplIiBhcmUgZmllbGRzIG9mIHRoZSB0eXBlIGluIHF1ZXN0aW9uLgorCisgICAgICAgIEluIFB5dGhvbiAzLCB0aGlzIGlzIGRlZmluZWQgYXMgYW4gZW1iZWRkZWQgUHlWYXJPYmplY3QgdHlwZSB0aHVzOgorICAgICAgICAgICBQeVZhck9iamVjdCBvYl9iYXNlOworICAgICAgICBzbyB0aGF0IHRoZSAib2Jfc2l6ZSIgZmllbGQgaXMgbG9jYXRlZCBpbnNpemUgdGhlICJvYl9iYXNlIiBmaWVsZCwgYW5kCisgICAgICAgIHRoZSAib2JfdHlwZSIgaXMgbW9zdCBlYXNpbHkgYWNjZXNzZWQgYnkgY2FzdGluZyBiYWNrIHRvIGEgKFB5T2JqZWN0KikuCisgICAgICAgICcnJworICAgICAgICBpZiBzZWxmLmlzX251bGwoKToKKyAgICAgICAgICAgIHJhaXNlIE51bGxQeU9iamVjdFB0cihzZWxmKQorCisgICAgICAgIGlmIG5hbWUgPT0gJ29iX3R5cGUnOgorICAgICAgICAgICAgcHlvX3B0ciA9IHNlbGYuX2dkYnZhbC5jYXN0KFB5T2JqZWN0UHRyLmdldF9nZGJfdHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIHB5b19wdHIuZGVyZWZlcmVuY2UoKVtuYW1lXQorCisgICAgICAgIGlmIG5hbWUgPT0gJ29iX3NpemUnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBQeXRob24gMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2RidmFsLmRlcmVmZXJlbmNlKClbbmFtZV0KKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgIyBQeXRob24gMzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2RidmFsLmRlcmVmZXJlbmNlKClbJ29iX2Jhc2UnXVtuYW1lXQorCisgICAgICAgICMgR2VuZXJhbCBjYXNlOiBsb29rIGl0IHVwIGluc2lkZSB0aGUgb2JqZWN0OgorICAgICAgICByZXR1cm4gc2VsZi5fZ2RidmFsLmRlcmVmZXJlbmNlKClbbmFtZV0KKworICAgIGRlZiBweW9wX2ZpZWxkKHNlbGYsIG5hbWUpOgorICAgICAgICAnJycKKyAgICAgICAgR2V0IGEgUHlPYmplY3RQdHIgZm9yIHRoZSBnaXZlbiBQeU9iamVjdCogZmllbGQgd2l0aGluIHRoaXMgUHlPYmplY3QsCisgICAgICAgIGNvcGluZyB3aXRoIHNvbWUgcHl0aG9uIDIgdmVyc3VzIHB5dGhvbiAzIGRpZmZlcmVuY2VzLgorICAgICAgICAnJycKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKHNlbGYuZmllbGQobmFtZSkpCisKKyAgICBkZWYgd3JpdGVfZmllbGRfcmVwcihzZWxmLCBuYW1lLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAnJycKKyAgICAgICAgRXh0cmFjdCB0aGUgUHlPYmplY3QqIGZpZWxkIG5hbWVkICJuYW1lIiwgYW5kIHdyaXRlIGl0cyByZXByZXNlbnRhdGlvbgorICAgICAgICB0byBmaWxlLWxpa2Ugb2JqZWN0ICJvdXQiCisgICAgICAgICcnJworICAgICAgICBmaWVsZF9vYmogPSBzZWxmLnB5b3BfZmllbGQobmFtZSkKKyAgICAgICAgZmllbGRfb2JqLndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQorCisgICAgZGVmIGdldF90cnVuY2F0ZWRfcmVwcihzZWxmLCBtYXhsZW4pOgorICAgICAgICAnJycKKyAgICAgICAgR2V0IGEgcmVwci1saWtlIHN0cmluZyBmb3IgdGhlIGRhdGEsIGJ1dCB0cnVuY2F0ZSBpdCBhdCAibWF4bGVuIiBieXRlcworICAgICAgICAoZW5kaW5nIHRoZSBvYmplY3QgZ3JhcGggdHJhdmVyc2FsIGFzIHNvb24gYXMgeW91IGRvKQorICAgICAgICAnJycKKyAgICAgICAgb3V0ID0gVHJ1bmNhdGVkU3RyaW5nSU8obWF4bGVuKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLndyaXRlX3JlcHIob3V0LCBzZXQoKSkKKyAgICAgICAgZXhjZXB0IFN0cmluZ1RydW5jYXRlZDoKKyAgICAgICAgICAgICMgVHJ1bmNhdGlvbiBvY2N1cnJlZDoKKyAgICAgICAgICAgIHJldHVybiBvdXQuZ2V0dmFsdWUoKSArICcuLi4odHJ1bmNhdGVkKScKKworICAgICAgICAjIE5vIHRydW5jYXRpb24gb2NjdXJyZWQ6CisgICAgICAgIHJldHVybiBvdXQuZ2V0dmFsdWUoKQorCisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBQeVR5cGVPYmplY3RQdHIoc2VsZi5maWVsZCgnb2JfdHlwZScpKQorCisgICAgZGVmIGlzX251bGwoc2VsZik6CisgICAgICAgIHJldHVybiAwID09IGxvbmcoc2VsZi5fZ2RidmFsKQorCisgICAgZGVmIGlzX29wdGltaXplZF9vdXQoc2VsZik6CisgICAgICAgICcnJworICAgICAgICBJcyB0aGUgdmFsdWUgb2YgdGhlIHVuZGVybHlpbmcgUHlPYmplY3QqIHZpc2libGUgdG8gdGhlIGRlYnVnZ2VyPworCisgICAgICAgIFRoaXMgY2FuIHZhcnkgd2l0aCB0aGUgcHJlY2lzZSB2ZXJzaW9uIG9mIHRoZSBjb21waWxlciB1c2VkIHRvIGJ1aWxkCisgICAgICAgIFB5dGhvbiwgYW5kIHRoZSBwcmVjaXNlIHZlcnNpb24gb2YgZ2RiLgorCisgICAgICAgIFNlZSBlLmcuIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NTU2OTc1IHdpdGgKKyAgICAgICAgUHlFdmFsX0V2YWxGcmFtZUV4J3MgImYiCisgICAgICAgICcnJworICAgICAgICByZXR1cm4gc2VsZi5fZ2RidmFsLmlzX29wdGltaXplZF9vdXQKKworICAgIGRlZiBzYWZlX3RwX25hbWUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnR5cGUoKS5maWVsZCgndHBfbmFtZScpLnN0cmluZygpCisgICAgICAgIGV4Y2VwdCBOdWxsUHlPYmplY3RQdHI6CisgICAgICAgICAgICAjIE5VTEwgdHBfbmFtZT8KKyAgICAgICAgICAgIHJldHVybiAndW5rbm93bicKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICMgQ2FuJ3QgZXZlbiByZWFkIHRoZSBvYmplY3QgYXQgYWxsPworICAgICAgICAgICAgcmV0dXJuICd1bmtub3duJworCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAnJycKKyAgICAgICAgU2NyYXBlIGEgdmFsdWUgZnJvbSB0aGUgaW5mZXJpb3IgcHJvY2VzcywgYW5kIHRyeSB0byByZXByZXNlbnQgaXQKKyAgICAgICAgd2l0aGluIHRoZSBnZGIgcHJvY2Vzcywgd2hpbHN0IChob3BlZnVsbHkpIGF2b2lkaW5nIGNyYXNoZXMgd2hlbgorICAgICAgICB0aGUgcmVtb3RlIGRhdGEgaXMgY29ycnVwdC4KKworICAgICAgICBEZXJpdmVkIGNsYXNzZXMgd2lsbCBvdmVycmlkZSB0aGlzLgorCisgICAgICAgIEZvciBleGFtcGxlLCBhIFB5SW50T2JqZWN0KiB3aXRoIG9iX2l2YWwgNDIgaW4gdGhlIGluZmVyaW9yIHByb2Nlc3MKKyAgICAgICAgc2hvdWxkIHJlc3VsdCBpbiBhbiBpbnQoNDIpIGluIHRoaXMgcHJvY2Vzcy4KKworICAgICAgICB2aXNpdGVkOiBhIHNldCBvZiBhbGwgZ2RiLlZhbHVlIHB5b2JqZWN0IHBvaW50ZXJzIGFscmVhZHkgdmlzaXRlZAorICAgICAgICB3aGlsc3QgZ2VuZXJhdGluZyB0aGlzIHZhbHVlICh0byBndWFyZCBhZ2FpbnN0IGluZmluaXRlIHJlY3Vyc2lvbiB3aGVuCisgICAgICAgIHZpc2l0aW5nIG9iamVjdCBncmFwaHMgd2l0aCBsb29wcykuICBBbmFsb2dvdXMgdG8gUHlfUmVwckVudGVyIGFuZAorICAgICAgICBQeV9SZXByTGVhdmUKKyAgICAgICAgJycnCisKKyAgICAgICAgY2xhc3MgRmFrZVJlcHIob2JqZWN0KToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgQ2xhc3MgcmVwcmVzZW50aW5nIGEgbm9uLWRlc2NyaXB0IFB5T2JqZWN0KiB2YWx1ZSBpbiB0aGUgaW5mZXJpb3IKKyAgICAgICAgICAgIHByb2Nlc3MgZm9yIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhIGN1c3RvbSBzY3JhcGVyLCBpbnRlbmRlZCB0byBoYXZlCisgICAgICAgICAgICBhIHNhbmUgcmVwcigpLgorICAgICAgICAgICAgIiIiCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cF9uYW1lLCBhZGRyZXNzKToKKyAgICAgICAgICAgICAgICBzZWxmLnRwX25hbWUgPSB0cF9uYW1lCisgICAgICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gYWRkcmVzcworCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBGb3IgdGhlIE5VTEwgcG9pbnRlciwgd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBhIHR5cGUsIHNvCisgICAgICAgICAgICAgICAgIyBzcGVjaWFsLWNhc2UgaXQgYXMgcGVyCisgICAgICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODAzMiNtc2cxMDA4ODIKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmFkZHJlc3MgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcweDAnCisgICAgICAgICAgICAgICAgcmV0dXJuICc8JXMgYXQgcmVtb3RlIDB4JXg+JyAlIChzZWxmLnRwX25hbWUsIHNlbGYuYWRkcmVzcykKKworICAgICAgICByZXR1cm4gRmFrZVJlcHIoc2VsZi5zYWZlX3RwX25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoc2VsZi5fZ2RidmFsKSkKKworICAgIGRlZiB3cml0ZV9yZXByKHNlbGYsIG91dCwgdmlzaXRlZCk6CisgICAgICAgICcnJworICAgICAgICBXcml0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgc2NyYXBlZCBmcm9tIHRoZSBpbmZlcmlvcgorICAgICAgICBwcm9jZXNzIHRvICJvdXQiLCBhIGZpbGUtbGlrZSBvYmplY3QuCisgICAgICAgICcnJworICAgICAgICAjIERlZmF1bHQgaW1wbGVtZW50YXRpb246IGdlbmVyYXRlIGEgcHJveHkgdmFsdWUgYW5kIHdyaXRlIGl0cyByZXByCisgICAgICAgICMgSG93ZXZlciwgdGhpcyBjb3VsZCBpbnZvbHZlIGEgbG90IG9mIHdvcmsgZm9yIGNvbXBsaWNhdGVkIG9iamVjdHMsCisgICAgICAgICMgc28gZm9yIGRlcml2ZWQgY2xhc3NlcyB3ZSBzcGVjaWFsaXplIHRoaXMKKyAgICAgICAgcmV0dXJuIG91dC53cml0ZShyZXByKHNlbGYucHJveHl2YWwodmlzaXRlZCkpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN1YmNsYXNzX2Zyb21fdHlwZShjbHMsIHQpOgorICAgICAgICAnJycKKyAgICAgICAgR2l2ZW4gYSBQeVR5cGVPYmplY3RQdHIgaW5zdGFuY2Ugd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEKKyAgICAgICAgKFB5VHlwZU9iamVjdCopLCBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRpbmcgc3ViY2xhc3Mgb2YgUHlPYmplY3RQdHIKKyAgICAgICAgdG8gdXNlCisKKyAgICAgICAgSWRlYWxseSwgd2Ugd291bGQgbG9vayB1cCB0aGUgc3ltYm9scyBmb3IgdGhlIGdsb2JhbCB0eXBlcywgYnV0IHRoYXQKKyAgICAgICAgaXNuJ3Qgd29ya2luZyB5ZXQ6CisgICAgICAgICAgKGdkYikgcHl0aG9uIHByaW50IGdkYi5sb29rdXBfc3ltYm9sKCdQeUxpc3RfVHlwZScpWzBdLnZhbHVlCisgICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAgICAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvcjogU3ltYm9sIHR5cGUgbm90IHlldCBzdXBwb3J0ZWQgaW4gUHl0aG9uIHNjcmlwdHMuCisgICAgICAgICAgRXJyb3Igd2hpbGUgZXhlY3V0aW5nIFB5dGhvbiBjb2RlLgorCisgICAgICAgIEZvciBub3csIHdlIHVzZSB0cF9mbGFncywgYWZ0ZXIgZG9pbmcgc29tZSBzdHJpbmcgY29tcGFyaXNvbnMgb24gdGhlCisgICAgICAgIHRwX25hbWUgZm9yIHNvbWUgc3BlY2lhbC1jYXNlcyB0aGF0IGRvbid0IHNlZW0gdG8gYmUgdmlzaWJsZSB0aHJvdWdoCisgICAgICAgIGZsYWdzCisgICAgICAgICcnJworICAgICAgICB0cnk6CisgICAgICAgICAgICB0cF9uYW1lID0gdC5maWVsZCgndHBfbmFtZScpLnN0cmluZygpCisgICAgICAgICAgICB0cF9mbGFncyA9IGludCh0LmZpZWxkKCd0cF9mbGFncycpKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyBIYW5kbGUgYW55IGtpbmQgb2YgZXJyb3IgZS5nLiBOVUxMIHB0cnMgYnkgc2ltcGx5IHVzaW5nIHRoZSBiYXNlCisgICAgICAgICAgICAjIGNsYXNzCisgICAgICAgICAgICByZXR1cm4gY2xzCisKKyAgICAgICAgI3ByaW50ICd0cF9mbGFncyA9IDB4JTA4eCcgJSB0cF9mbGFncworICAgICAgICAjcHJpbnQgJ3RwX25hbWUgPSAlcicgJSB0cF9uYW1lCisKKyAgICAgICAgbmFtZV9tYXAgPSB7J2Jvb2wnOiBQeUJvb2xPYmplY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdjbGFzc29iaic6IFB5Q2xhc3NPYmplY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdpbnN0YW5jZSc6IFB5SW5zdGFuY2VPYmplY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdOb25lVHlwZSc6IFB5Tm9uZVN0cnVjdFB0ciwKKyAgICAgICAgICAgICAgICAgICAgJ2ZyYW1lJzogUHlGcmFtZU9iamVjdFB0ciwKKyAgICAgICAgICAgICAgICAgICAgJ3NldCcgOiBQeVNldE9iamVjdFB0ciwKKyAgICAgICAgICAgICAgICAgICAgJ2Zyb3plbnNldCcgOiBQeVNldE9iamVjdFB0ciwKKyAgICAgICAgICAgICAgICAgICAgJ2J1aWx0aW5fZnVuY3Rpb25fb3JfbWV0aG9kJyA6IFB5Q0Z1bmN0aW9uT2JqZWN0UHRyLAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGlmIHRwX25hbWUgaW4gbmFtZV9tYXA6CisgICAgICAgICAgICByZXR1cm4gbmFtZV9tYXBbdHBfbmFtZV0KKworICAgICAgICBpZiB0cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEU6CisgICAgICAgICAgICByZXR1cm4gSGVhcFR5cGVPYmplY3RQdHIKKworICAgICAgICBpZiB0cF9mbGFncyAmIFB5X1RQRkxBR1NfSU5UX1NVQkNMQVNTOgorICAgICAgICAgICAgcmV0dXJuIFB5SW50T2JqZWN0UHRyCisgICAgICAgIGlmIHRwX2ZsYWdzICYgUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTOgorICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ09iamVjdFB0cgorICAgICAgICBpZiB0cF9mbGFncyAmIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBQeUxpc3RPYmplY3RQdHIKKyAgICAgICAgaWYgdHBfZmxhZ3MgJiBQeV9UUEZMQUdTX1RVUExFX1NVQkNMQVNTOgorICAgICAgICAgICAgcmV0dXJuIFB5VHVwbGVPYmplY3RQdHIKKyAgICAgICAgaWYgdHBfZmxhZ3MgJiBQeV9UUEZMQUdTX1NUUklOR19TVUJDTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBQeVN0cmluZ09iamVjdFB0cgorICAgICAgICBpZiB0cF9mbGFncyAmIFB5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVPYmplY3RQdHIKKyAgICAgICAgaWYgdHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0RJQ1RfU1VCQ0xBU1M6CisgICAgICAgICAgICByZXR1cm4gUHlEaWN0T2JqZWN0UHRyCisgICAgICAgIGlmIHRwX2ZsYWdzICYgUHlfVFBGTEFHU19CQVNFX0VYQ19TVUJDTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBQeUJhc2VFeGNlcHRpb25PYmplY3RQdHIKKyAgICAgICAgI2lmIHRwX2ZsYWdzICYgUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTOgorICAgICAgICAjICAgIHJldHVybiBQeVR5cGVPYmplY3RQdHIKKworICAgICAgICAjIFVzZSB0aGUgYmFzZSBjbGFzczoKKyAgICAgICAgcmV0dXJuIGNscworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fcHlvYmplY3RfcHRyKGNscywgZ2RidmFsKToKKyAgICAgICAgJycnCisgICAgICAgIFRyeSB0byBsb2NhdGUgdGhlIGFwcHJvcHJpYXRlIGRlcml2ZWQgY2xhc3MgZHluYW1pY2FsbHksIGFuZCBjYXN0CisgICAgICAgIHRoZSBwb2ludGVyIGFjY29yZGluZ2x5LgorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IFB5T2JqZWN0UHRyKGdkYnZhbCkKKyAgICAgICAgICAgIGNscyA9IGNscy5zdWJjbGFzc19mcm9tX3R5cGUocC50eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gY2xzKGdkYnZhbCwgY2FzdF90bz1jbHMuZ2V0X2dkYl90eXBlKCkpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAjIEhhbmRsZSBhbnkga2luZCBvZiBlcnJvciBlLmcuIE5VTEwgcHRycyBieSBzaW1wbHkgdXNpbmcgdGhlIGJhc2UKKyAgICAgICAgICAgICMgY2xhc3MKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIGNscyhnZGJ2YWwpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X2dkYl90eXBlKGNscyk6CisgICAgICAgIHJldHVybiBnZGIubG9va3VwX3R5cGUoY2xzLl90eXBlbmFtZSkucG9pbnRlcigpCisKKyAgICBkZWYgYXNfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxvbmcoc2VsZi5fZ2RidmFsKQorCisKK2NsYXNzIFByb3h5QWxyZWFkeVZpc2l0ZWQob2JqZWN0KToKKyAgICAnJycKKyAgICBQbGFjZWhvbGRlciBwcm94eSB0byB1c2Ugd2hlbiBwcm90ZWN0aW5nIGFnYWluc3QgaW5maW5pdGUgcmVjdXJzaW9uIGR1ZSB0bworICAgIGxvb3BzIGluIHRoZSBvYmplY3QgZ3JhcGguCisKKyAgICBBbmFsb2dvdXMgdG8gdGhlIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSB1c2VycyBvZiBQeV9SZXByRW50ZXIgYW5kIFB5X1JlcHJMZWF2ZQorICAgICcnJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXApOgorICAgICAgICBzZWxmLl9yZXAgPSByZXAKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcAorCisKK2RlZiBfd3JpdGVfaW5zdGFuY2VfcmVwcihvdXQsIHZpc2l0ZWQsIG5hbWUsIHB5b3BfYXR0cmRpY3QsIGFkZHJlc3MpOgorICAgICcnJ1NoYXJlZCBjb2RlIGZvciB1c2UgYnkgb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgY2xhc3NlczoKKyAgICB3cml0ZSBhIHJlcHJlc2VudGF0aW9uIHRvIGZpbGUtbGlrZSBvYmplY3QgIm91dCInJycKKyAgICBvdXQud3JpdGUoJzwnKQorICAgIG91dC53cml0ZShuYW1lKQorCisgICAgIyBXcml0ZSBkaWN0aW9uYXJ5IG9mIGluc3RhbmNlIGF0dHJpYnV0ZXM6CisgICAgaWYgaXNpbnN0YW5jZShweW9wX2F0dHJkaWN0LCBQeURpY3RPYmplY3RQdHIpOgorICAgICAgICBvdXQud3JpdGUoJygnKQorICAgICAgICBmaXJzdCA9IFRydWUKKyAgICAgICAgZm9yIHB5b3BfYXJnLCBweW9wX3ZhbCBpbiBweW9wX2F0dHJkaWN0Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAgb3V0LndyaXRlKHB5b3BfYXJnLnByb3h5dmFsKHZpc2l0ZWQpKQorICAgICAgICAgICAgb3V0LndyaXRlKCc9JykKKyAgICAgICAgICAgIHB5b3BfdmFsLndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQorICAgICAgICBvdXQud3JpdGUoJyknKQorICAgIG91dC53cml0ZSgnIGF0IHJlbW90ZSAweCV4PicgJSBhZGRyZXNzKQorCisKK2NsYXNzIEluc3RhbmNlUHJveHkob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbF9uYW1lLCBhdHRyZGljdCwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuY2xfbmFtZSA9IGNsX25hbWUKKyAgICAgICAgc2VsZi5hdHRyZGljdCA9IGF0dHJkaWN0CisgICAgICAgIHNlbGYuYWRkcmVzcyA9IGFkZHJlc3MKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmF0dHJkaWN0LCBkaWN0KToKKyAgICAgICAgICAgIGt3YXJncyA9ICcsICcuam9pbihbIiVzPSVyIiAlIChhcmcsIHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZywgdmFsIGluIHNlbGYuYXR0cmRpY3QuaXRlcml0ZW1zKCldKQorICAgICAgICAgICAgcmV0dXJuICc8JXMoJXMpIGF0IHJlbW90ZSAweCV4PicgJSAoc2VsZi5jbF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmdzLCBzZWxmLmFkZHJlc3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJzwlcyBhdCByZW1vdGUgMHgleD4nICUgKHNlbGYuY2xfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRyZXNzKQorCitkZWYgX1B5T2JqZWN0X1ZBUl9TSVpFKHR5cGVvYmosIG5pdGVtcyk6CisgICAgcmV0dXJuICggKCB0eXBlb2JqLmZpZWxkKCd0cF9iYXNpY3NpemUnKSArCisgICAgICAgICAgICAgICBuaXRlbXMgKiB0eXBlb2JqLmZpZWxkKCd0cF9pdGVtc2l6ZScpICsKKyAgICAgICAgICAgICAgIChTSVpFT0ZfVk9JRF9QIC0gMSkKKyAgICAgICAgICAgICApICYgfihTSVpFT0ZfVk9JRF9QIC0gMSkKKyAgICAgICAgICAgKS5jYXN0KF90eXBlX3NpemVfdCkKKworY2xhc3MgSGVhcFR5cGVPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeU9iamVjdCcKKworICAgIGRlZiBnZXRfYXR0cl9kaWN0KHNlbGYpOgorICAgICAgICAnJycKKyAgICAgICAgR2V0IHRoZSBQeURpY3RPYmplY3QgcHRyIHJlcHJlc2VudGluZyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkKKyAgICAgICAgKG9yIE5vbmUgaWYgdGhlcmUncyBhIHByb2JsZW0pCisgICAgICAgICcnJworICAgICAgICB0cnk6CisgICAgICAgICAgICB0eXBlb2JqID0gc2VsZi50eXBlKCkKKyAgICAgICAgICAgIGRpY3RvZmZzZXQgPSBpbnRfZnJvbV9pbnQodHlwZW9iai5maWVsZCgndHBfZGljdG9mZnNldCcpKQorICAgICAgICAgICAgaWYgZGljdG9mZnNldCAhPSAwOgorICAgICAgICAgICAgICAgIGlmIGRpY3RvZmZzZXQgPCAwOgorICAgICAgICAgICAgICAgICAgICB0eXBlX1B5VmFyT2JqZWN0X3B0ciA9IGdkYi5sb29rdXBfdHlwZSgnUHlWYXJPYmplY3QnKS5wb2ludGVyKCkKKyAgICAgICAgICAgICAgICAgICAgdHNpemUgPSBpbnRfZnJvbV9pbnQoc2VsZi5fZ2RidmFsLmNhc3QodHlwZV9QeVZhck9iamVjdF9wdHIpWydvYl9zaXplJ10pCisgICAgICAgICAgICAgICAgICAgIGlmIHRzaXplIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRzaXplID0gLXRzaXplCisgICAgICAgICAgICAgICAgICAgIHNpemUgPSBfUHlPYmplY3RfVkFSX1NJWkUodHlwZW9iaiwgdHNpemUpCisgICAgICAgICAgICAgICAgICAgIGRpY3RvZmZzZXQgKz0gc2l6ZQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZGljdG9mZnNldCA+IDAKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGRpY3RvZmZzZXQgJSBTSVpFT0ZfVk9JRF9QID09IDAKKworICAgICAgICAgICAgICAgIGRpY3RwdHIgPSBzZWxmLl9nZGJ2YWwuY2FzdChfdHlwZV9jaGFyX3B0cikgKyBkaWN0b2Zmc2V0CisgICAgICAgICAgICAgICAgUHlPYmplY3RQdHJQdHIgPSBQeU9iamVjdFB0ci5nZXRfZ2RiX3R5cGUoKS5wb2ludGVyKCkKKyAgICAgICAgICAgICAgICBkaWN0cHRyID0gZGljdHB0ci5jYXN0KFB5T2JqZWN0UHRyUHRyKQorICAgICAgICAgICAgICAgIHJldHVybiBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihkaWN0cHRyLmRlcmVmZXJlbmNlKCkpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAjIENvcnJ1cHQgZGF0YSBzb21ld2hlcmU7IGZhaWwgc2FmZQorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgTm90IGZvdW5kLCBvciBzb21lIGtpbmQgb2YgZXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgICcnJworICAgICAgICBTdXBwb3J0IGZvciBuZXctc3R5bGUgY2xhc3Nlcy4KKworICAgICAgICBDdXJyZW50bHkgd2UganVzdCBsb2NhdGUgdGhlIGRpY3Rpb25hcnkgdXNpbmcgYSB0cmFuc2xpdGVyYXRpb24gdG8KKyAgICAgICAgcHl0aG9uIG9mIF9QeU9iamVjdF9HZXREaWN0UHRyLCBpZ25vcmluZyBkZXNjcmlwdG9ycworICAgICAgICAnJycKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgcmV0dXJuIFByb3h5QWxyZWFkeVZpc2l0ZWQoJzwuLi4+JykKKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgcHlvcF9hdHRyX2RpY3QgPSBzZWxmLmdldF9hdHRyX2RpY3QoKQorICAgICAgICBpZiBweW9wX2F0dHJfZGljdDoKKyAgICAgICAgICAgIGF0dHJfZGljdCA9IHB5b3BfYXR0cl9kaWN0LnByb3h5dmFsKHZpc2l0ZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhdHRyX2RpY3QgPSB7fQorICAgICAgICB0cF9uYW1lID0gc2VsZi5zYWZlX3RwX25hbWUoKQorCisgICAgICAgICMgTmV3LXN0eWxlIGNsYXNzOgorICAgICAgICByZXR1cm4gSW5zdGFuY2VQcm94eSh0cF9uYW1lLCBhdHRyX2RpY3QsIGxvbmcoc2VsZi5fZ2RidmFsKSkKKworICAgIGRlZiB3cml0ZV9yZXByKHNlbGYsIG91dCwgdmlzaXRlZCk6CisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIG91dC53cml0ZSgnPC4uLj4nKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgIHB5b3BfYXR0cmRpY3QgPSBzZWxmLmdldF9hdHRyX2RpY3QoKQorICAgICAgICBfd3JpdGVfaW5zdGFuY2VfcmVwcihvdXQsIHZpc2l0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2FmZV90cF9uYW1lKCksIHB5b3BfYXR0cmRpY3QsIHNlbGYuYXNfYWRkcmVzcygpKQorCitjbGFzcyBQcm94eUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cF9uYW1lLCBhcmdzKToKKyAgICAgICAgc2VsZi50cF9uYW1lID0gdHBfbmFtZQorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnJXMlcicgJSAoc2VsZi50cF9uYW1lLCBzZWxmLmFyZ3MpCisKK2NsYXNzIFB5QmFzZUV4Y2VwdGlvbk9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgIiIiCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEgUHlCYXNlRXhjZXB0aW9uT2JqZWN0KiBpLmUuIGFuIGV4Y2VwdGlvbgorICAgIHdpdGhpbiB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZC4KKyAgICAiIiIKKyAgICBfdHlwZW5hbWUgPSAnUHlCYXNlRXhjZXB0aW9uT2JqZWN0JworCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICByZXR1cm4gUHJveHlBbHJlYWR5VmlzaXRlZCgnKC4uLiknKQorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKyAgICAgICAgYXJnX3Byb3h5ID0gc2VsZi5weW9wX2ZpZWxkKCdhcmdzJykucHJveHl2YWwodmlzaXRlZCkKKyAgICAgICAgcmV0dXJuIFByb3h5RXhjZXB0aW9uKHNlbGYuc2FmZV90cF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfcHJveHkpCisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICBvdXQud3JpdGUoJyguLi4pJykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICBvdXQud3JpdGUoc2VsZi5zYWZlX3RwX25hbWUoKSkKKyAgICAgICAgc2VsZi53cml0ZV9maWVsZF9yZXByKCdhcmdzJywgb3V0LCB2aXNpdGVkKQorCitjbGFzcyBQeUJvb2xPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgICIiIgorICAgIENsYXNzIHdyYXBwaW5nIGEgZ2RiLlZhbHVlIHRoYXQncyBhIFB5Qm9vbE9iamVjdCogaS5lLiBvbmUgb2YgdGhlIHR3bworICAgIDxib29sPiBpbnN0YW5jZXMgKFB5X1RydWUvUHlfRmFsc2UpIHdpdGhpbiB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZC4KKyAgICAiIiIKKyAgICBfdHlwZW5hbWUgPSAnUHlCb29sT2JqZWN0JworCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICBpZiBpbnRfZnJvbV9pbnQoc2VsZi5maWVsZCgnb2JfaXZhbCcpKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBQeUNsYXNzT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICAiIiIKKyAgICBDbGFzcyB3cmFwcGluZyBhIGdkYi5WYWx1ZSB0aGF0J3MgYSBQeUNsYXNzT2JqZWN0KiBpLmUuIGEgPGNsYXNzb2JqPgorICAgIGluc3RhbmNlIHdpdGhpbiB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZC4KKyAgICAiIiIKKyAgICBfdHlwZW5hbWUgPSAnUHlDbGFzc09iamVjdCcKKworCitjbGFzcyBCdWlsdEluRnVuY3Rpb25Qcm94eShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtbF9uYW1lKToKKyAgICAgICAgc2VsZi5tbF9uYW1lID0gbWxfbmFtZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxidWlsdC1pbiBmdW5jdGlvbiAlcz4iICUgc2VsZi5tbF9uYW1lCisKK2NsYXNzIEJ1aWx0SW5NZXRob2RQcm94eShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtbF9uYW1lLCBweW9wX21fc2VsZik6CisgICAgICAgIHNlbGYubWxfbmFtZSA9IG1sX25hbWUKKyAgICAgICAgc2VsZi5weW9wX21fc2VsZiA9IHB5b3BfbV9zZWxmCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoJzxidWlsdC1pbiBtZXRob2QgJXMgb2YgJXMgb2JqZWN0IGF0IHJlbW90ZSAweCV4PicKKyAgICAgICAgICAgICAgICAlIChzZWxmLm1sX25hbWUsCisgICAgICAgICAgICAgICAgICAgc2VsZi5weW9wX21fc2VsZi5zYWZlX3RwX25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICBzZWxmLnB5b3BfbV9zZWxmLmFzX2FkZHJlc3MoKSkKKyAgICAgICAgICAgICAgICApCisKK2NsYXNzIFB5Q0Z1bmN0aW9uT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICAiIiIKKyAgICBDbGFzcyB3cmFwcGluZyBhIGdkYi5WYWx1ZSB0aGF0J3MgYSBQeUNGdW5jdGlvbk9iamVjdCoKKyAgICAoc2VlIEluY2x1ZGUvbWV0aG9kb2JqZWN0LmggYW5kIE9iamVjdHMvbWV0aG9kb2JqZWN0LmMpCisgICAgIiIiCisgICAgX3R5cGVuYW1lID0gJ1B5Q0Z1bmN0aW9uT2JqZWN0JworCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICBtX21sID0gc2VsZi5maWVsZCgnbV9tbCcpICMgbV9tbCBpcyBhIChQeU1ldGhvZERlZiopCisgICAgICAgIG1sX25hbWUgPSBtX21sWydtbF9uYW1lJ10uc3RyaW5nKCkKKworICAgICAgICBweW9wX21fc2VsZiA9IHNlbGYucHlvcF9maWVsZCgnbV9zZWxmJykKKyAgICAgICAgaWYgcHlvcF9tX3NlbGYuaXNfbnVsbCgpOgorICAgICAgICAgICAgcmV0dXJuIEJ1aWx0SW5GdW5jdGlvblByb3h5KG1sX25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gQnVpbHRJbk1ldGhvZFByb3h5KG1sX25hbWUsIHB5b3BfbV9zZWxmKQorCisKK2NsYXNzIFB5Q29kZU9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgIiIiCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEgUHlDb2RlT2JqZWN0KiBpLmUuIGEgPGNvZGU+IGluc3RhbmNlCisgICAgd2l0aGluIHRoZSBwcm9jZXNzIGJlaW5nIGRlYnVnZ2VkLgorICAgICIiIgorICAgIF90eXBlbmFtZSA9ICdQeUNvZGVPYmplY3QnCisKKyAgICBkZWYgYWRkcjJsaW5lKHNlbGYsIGFkZHJxKToKKyAgICAgICAgJycnCisgICAgICAgIEdldCB0aGUgbGluZSBudW1iZXIgZm9yIGEgZ2l2ZW4gYnl0ZWNvZGUgb2Zmc2V0CisKKyAgICAgICAgQW5hbG9nb3VzIHRvIFB5Q29kZV9BZGRyMkxpbmU7IHRyYW5zbGF0ZWQgZnJvbSBwc2V1ZG9jb2RlIGluCisgICAgICAgIE9iamVjdHMvbG5vdGFiX25vdGVzLnR4dAorICAgICAgICAnJycKKyAgICAgICAgY29fbG5vdGFiID0gc2VsZi5weW9wX2ZpZWxkKCdjb19sbm90YWInKS5wcm94eXZhbChzZXQoKSkKKworICAgICAgICAjIEluaXRpYWxpemUgbGluZW5vIHRvIGNvX2ZpcnN0bGluZW5vIGFzIHBlciBQeUNvZGVfQWRkcjJMaW5lCisgICAgICAgICMgbm90IDAsIGFzIGxub3RhYl9ub3Rlcy50eHQgaGFzIGl0OgorICAgICAgICBsaW5lbm8gPSBpbnRfZnJvbV9pbnQoc2VsZi5maWVsZCgnY29fZmlyc3RsaW5lbm8nKSkKKworICAgICAgICBhZGRyID0gMAorICAgICAgICBmb3IgYWRkcl9pbmNyLCBsaW5lX2luY3IgaW4gemlwKGNvX2xub3RhYls6OjJdLCBjb19sbm90YWJbMTo6Ml0pOgorICAgICAgICAgICAgYWRkciArPSBvcmQoYWRkcl9pbmNyKQorICAgICAgICAgICAgaWYgYWRkciA+IGFkZHJxOgorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lbm8KKyAgICAgICAgICAgIGxpbmVubyArPSBvcmQobGluZV9pbmNyKQorICAgICAgICByZXR1cm4gbGluZW5vCisKKworY2xhc3MgUHlEaWN0T2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICAiIiIKKyAgICBDbGFzcyB3cmFwcGluZyBhIGdkYi5WYWx1ZSB0aGF0J3MgYSBQeURpY3RPYmplY3QqIGkuZS4gYSBkaWN0IGluc3RhbmNlCisgICAgd2l0aGluIHRoZSBwcm9jZXNzIGJlaW5nIGRlYnVnZ2VkLgorICAgICIiIgorICAgIF90eXBlbmFtZSA9ICdQeURpY3RPYmplY3QnCisKKyAgICBkZWYgaXRlcml0ZW1zKHNlbGYpOgorICAgICAgICAnJycKKyAgICAgICAgWWllbGRzIGEgc2VxdWVuY2Ugb2YgKFB5T2JqZWN0UHRyIGtleSwgUHlPYmplY3RQdHIgdmFsdWUpIHBhaXJzLAorICAgICAgICBhbmFsYWdvdXMgdG8gZGljdC5pdGVyaXRlbXMoKQorICAgICAgICAnJycKKyAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmZpZWxkKCdtYV9tYXNrJykgKyAxKToKKyAgICAgICAgICAgIGVwID0gc2VsZi5maWVsZCgnbWFfdGFibGUnKSArIGkKKyAgICAgICAgICAgIHB5b3BfdmFsdWUgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihlcFsnbWVfdmFsdWUnXSkKKyAgICAgICAgICAgIGlmIG5vdCBweW9wX3ZhbHVlLmlzX251bGwoKToKKyAgICAgICAgICAgICAgICBweW9wX2tleSA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGVwWydtZV9rZXknXSkKKyAgICAgICAgICAgICAgICB5aWVsZCAocHlvcF9rZXksIHB5b3BfdmFsdWUpCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIHJldHVybiBQcm94eUFscmVhZHlWaXNpdGVkKCd7Li4ufScpCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIGZvciBweW9wX2tleSwgcHlvcF92YWx1ZSBpbiBzZWxmLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgcHJveHlfa2V5ID0gcHlvcF9rZXkucHJveHl2YWwodmlzaXRlZCkKKyAgICAgICAgICAgIHByb3h5X3ZhbHVlID0gcHlvcF92YWx1ZS5wcm94eXZhbCh2aXNpdGVkKQorICAgICAgICAgICAgcmVzdWx0W3Byb3h5X2tleV0gPSBwcm94eV92YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICBvdXQud3JpdGUoJ3suLi59JykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICBvdXQud3JpdGUoJ3snKQorICAgICAgICBmaXJzdCA9IFRydWUKKyAgICAgICAgZm9yIHB5b3Bfa2V5LCBweW9wX3ZhbHVlIGluIHNlbGYuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgZmlyc3Q6CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcsICcpCisgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCisgICAgICAgICAgICBweW9wX2tleS53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKKyAgICAgICAgICAgIG91dC53cml0ZSgnOiAnKQorICAgICAgICAgICAgcHlvcF92YWx1ZS53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKKyAgICAgICAgb3V0LndyaXRlKCd9JykKKworY2xhc3MgUHlJbnN0YW5jZU9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgX3R5cGVuYW1lID0gJ1B5SW5zdGFuY2VPYmplY3QnCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIHJldHVybiBQcm94eUFscmVhZHlWaXNpdGVkKCc8Li4uPicpCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgICMgR2V0IG5hbWUgb2YgY2xhc3M6CisgICAgICAgIGluX2NsYXNzID0gc2VsZi5weW9wX2ZpZWxkKCdpbl9jbGFzcycpCisgICAgICAgIGNsX25hbWUgPSBpbl9jbGFzcy5weW9wX2ZpZWxkKCdjbF9uYW1lJykucHJveHl2YWwodmlzaXRlZCkKKworICAgICAgICAjIEdldCBkaWN0aW9uYXJ5IG9mIGluc3RhbmNlIGF0dHJpYnV0ZXM6CisgICAgICAgIGluX2RpY3QgPSBzZWxmLnB5b3BfZmllbGQoJ2luX2RpY3QnKS5wcm94eXZhbCh2aXNpdGVkKQorCisgICAgICAgICMgT2xkLXN0eWxlIGNsYXNzOgorICAgICAgICByZXR1cm4gSW5zdGFuY2VQcm94eShjbF9uYW1lLCBpbl9kaWN0LCBsb25nKHNlbGYuX2dkYnZhbCkpCisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICBvdXQud3JpdGUoJzwuLi4+JykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICAjIE9sZC1zdHlsZSBjbGFzczoKKworICAgICAgICAjIEdldCBuYW1lIG9mIGNsYXNzOgorICAgICAgICBpbl9jbGFzcyA9IHNlbGYucHlvcF9maWVsZCgnaW5fY2xhc3MnKQorICAgICAgICBjbF9uYW1lID0gaW5fY2xhc3MucHlvcF9maWVsZCgnY2xfbmFtZScpLnByb3h5dmFsKHZpc2l0ZWQpCisKKyAgICAgICAgIyBHZXQgZGljdGlvbmFyeSBvZiBpbnN0YW5jZSBhdHRyaWJ1dGVzOgorICAgICAgICBweW9wX2luX2RpY3QgPSBzZWxmLnB5b3BfZmllbGQoJ2luX2RpY3QnKQorCisgICAgICAgIF93cml0ZV9pbnN0YW5jZV9yZXByKG91dCwgdmlzaXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xfbmFtZSwgcHlvcF9pbl9kaWN0LCBzZWxmLmFzX2FkZHJlc3MoKSkKKworY2xhc3MgUHlJbnRPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeUludE9iamVjdCcKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgcmVzdWx0ID0gaW50X2Zyb21faW50KHNlbGYuZmllbGQoJ29iX2l2YWwnKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCitjbGFzcyBQeUxpc3RPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeUxpc3RPYmplY3QnCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICMgR2V0IHRoZSBnZGIuVmFsdWUgZm9yIHRoZSAoUHlPYmplY3QqKSB3aXRoIHRoZSBnaXZlbiBpbmRleDoKKyAgICAgICAgZmllbGRfb2JfaXRlbSA9IHNlbGYuZmllbGQoJ29iX2l0ZW0nKQorICAgICAgICByZXR1cm4gZmllbGRfb2JfaXRlbVtpXQorCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICByZXR1cm4gUHJveHlBbHJlYWR5VmlzaXRlZCgnWy4uLl0nKQorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICByZXN1bHQgPSBbUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoc2VsZltpXSkucHJveHl2YWwodmlzaXRlZCkKKyAgICAgICAgICAgICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2UoaW50X2Zyb21faW50KHNlbGYuZmllbGQoJ29iX3NpemUnKSkpXQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICBvdXQud3JpdGUoJ1suLi5dJykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICBvdXQud3JpdGUoJ1snKQorICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKGludF9mcm9tX2ludChzZWxmLmZpZWxkKCdvYl9zaXplJykpKToKKyAgICAgICAgICAgIGlmIGkgPiAwOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZWxlbWVudCA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKHNlbGZbaV0pCisgICAgICAgICAgICBlbGVtZW50LndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQorICAgICAgICBvdXQud3JpdGUoJ10nKQorCitjbGFzcyBQeUxvbmdPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeUxvbmdPYmplY3QnCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgICcnJworICAgICAgICBQeXRob24ncyBJbmNsdWRlL2xvbmdvYmpyZXAuaCBoYXMgdGhpcyBkZWNsYXJhdGlvbjoKKyAgICAgICAgICAgc3RydWN0IF9sb25nb2JqZWN0IHsKKyAgICAgICAgICAgICAgIFB5T2JqZWN0X1ZBUl9IRUFECisgICAgICAgICAgICAgICBkaWdpdCBvYl9kaWdpdFsxXTsKKyAgICAgICAgICAgfTsKKworICAgICAgICB3aXRoIHRoaXMgZGVzY3JpcHRpb246CisgICAgICAgICAgICBUaGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBudW1iZXIgaXMgZXF1YWwgdG8KKyAgICAgICAgICAgICAgICAgU1VNKGZvciBpPTAgdGhyb3VnaCBhYnMob2Jfc2l6ZSktMSkgb2JfZGlnaXRbaV0gKiAyKiooU0hJRlQqaSkKKyAgICAgICAgICAgIE5lZ2F0aXZlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIHdpdGggb2Jfc2l6ZSA8IDA7CisgICAgICAgICAgICB6ZXJvIGlzIHJlcHJlc2VudGVkIGJ5IG9iX3NpemUgPT0gMC4KKworICAgICAgICB3aGVyZSBTSElGVCBjYW4gYmUgZWl0aGVyOgorICAgICAgICAgICAgI2RlZmluZSBQeUxvbmdfU0hJRlQgICAgICAgIDMwCisgICAgICAgICAgICAjZGVmaW5lIFB5TG9uZ19TSElGVCAgICAgICAgMTUKKyAgICAgICAgJycnCisgICAgICAgIG9iX3NpemUgPSBsb25nKHNlbGYuZmllbGQoJ29iX3NpemUnKSkKKyAgICAgICAgaWYgb2Jfc2l6ZSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIDBMCisKKyAgICAgICAgb2JfZGlnaXQgPSBzZWxmLmZpZWxkKCdvYl9kaWdpdCcpCisKKyAgICAgICAgaWYgZ2RiLmxvb2t1cF90eXBlKCdkaWdpdCcpLnNpemVvZiA9PSAyOgorICAgICAgICAgICAgU0hJRlQgPSAxNUwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIFNISUZUID0gMzBMCisKKyAgICAgICAgZGlnaXRzID0gW2xvbmcob2JfZGlnaXRbaV0pICogMioqKFNISUZUKmkpCisgICAgICAgICAgICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKGFicyhvYl9zaXplKSldCisgICAgICAgIHJlc3VsdCA9IHN1bShkaWdpdHMpCisgICAgICAgIGlmIG9iX3NpemUgPCAwOgorICAgICAgICAgICAgcmVzdWx0ID0gLXJlc3VsdAorICAgICAgICByZXR1cm4gcmVzdWx0CisKKworY2xhc3MgUHlOb25lU3RydWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICAiIiIKKyAgICBDbGFzcyB3cmFwcGluZyBhIGdkYi5WYWx1ZSB0aGF0J3MgYSBQeU9iamVjdCogcG9pbnRpbmcgdG8gdGhlCisgICAgc2luZ2xldG9uICh3ZSBob3BlKSBfUHlfTm9uZVN0cnVjdCB3aXRoIG9iX3R5cGUgUHlOb25lX1R5cGUKKyAgICAiIiIKKyAgICBfdHlwZW5hbWUgPSAnUHlPYmplY3QnCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgUHlGcmFtZU9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgX3R5cGVuYW1lID0gJ1B5RnJhbWVPYmplY3QnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2RidmFsLCBjYXN0X3RvKToKKyAgICAgICAgUHlPYmplY3RQdHIuX19pbml0X18oc2VsZiwgZ2RidmFsLCBjYXN0X3RvKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX29wdGltaXplZF9vdXQoKToKKyAgICAgICAgICAgIHNlbGYuY28gPSBQeUNvZGVPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoc2VsZi5maWVsZCgnZl9jb2RlJykpCisgICAgICAgICAgICBzZWxmLmNvX25hbWUgPSBzZWxmLmNvLnB5b3BfZmllbGQoJ2NvX25hbWUnKQorICAgICAgICAgICAgc2VsZi5jb19maWxlbmFtZSA9IHNlbGYuY28ucHlvcF9maWVsZCgnY29fZmlsZW5hbWUnKQorCisgICAgICAgICAgICBzZWxmLmZfbGluZW5vID0gaW50X2Zyb21faW50KHNlbGYuZmllbGQoJ2ZfbGluZW5vJykpCisgICAgICAgICAgICBzZWxmLmZfbGFzdGkgPSBpbnRfZnJvbV9pbnQoc2VsZi5maWVsZCgnZl9sYXN0aScpKQorICAgICAgICAgICAgc2VsZi5jb19ubG9jYWxzID0gaW50X2Zyb21faW50KHNlbGYuY28uZmllbGQoJ2NvX25sb2NhbHMnKSkKKyAgICAgICAgICAgIHNlbGYuY29fdmFybmFtZXMgPSBQeVR1cGxlT2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKHNlbGYuY28uZmllbGQoJ2NvX3Zhcm5hbWVzJykpCisKKyAgICBkZWYgaXRlcl9sb2NhbHMoc2VsZik6CisgICAgICAgICcnJworICAgICAgICBZaWVsZCBhIHNlcXVlbmNlIG9mIChuYW1lLHZhbHVlKSBwYWlycyBvZiBQeU9iamVjdFB0ciBpbnN0YW5jZXMsIGZvcgorICAgICAgICB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoaXMgZnJhbWUKKyAgICAgICAgJycnCisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW1pemVkX291dCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZl9sb2NhbHNwbHVzID0gc2VsZi5maWVsZCgnZl9sb2NhbHNwbHVzJykKKyAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmNvX25sb2NhbHMpOgorICAgICAgICAgICAgcHlvcF92YWx1ZSA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGZfbG9jYWxzcGx1c1tpXSkKKyAgICAgICAgICAgIGlmIG5vdCBweW9wX3ZhbHVlLmlzX251bGwoKToKKyAgICAgICAgICAgICAgICBweW9wX25hbWUgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmLmNvX3Zhcm5hbWVzW2ldKQorICAgICAgICAgICAgICAgIHlpZWxkIChweW9wX25hbWUsIHB5b3BfdmFsdWUpCisKKyAgICBkZWYgaXRlcl9nbG9iYWxzKHNlbGYpOgorICAgICAgICAnJycKKyAgICAgICAgWWllbGQgYSBzZXF1ZW5jZSBvZiAobmFtZSx2YWx1ZSkgcGFpcnMgb2YgUHlPYmplY3RQdHIgaW5zdGFuY2VzLCBmb3IKKyAgICAgICAgdGhlIGdsb2JhbCB2YXJpYWJsZXMgb2YgdGhpcyBmcmFtZQorICAgICAgICAnJycKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpbWl6ZWRfb3V0KCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBweW9wX2dsb2JhbHMgPSBzZWxmLnB5b3BfZmllbGQoJ2ZfZ2xvYmFscycpCisgICAgICAgIHJldHVybiBweW9wX2dsb2JhbHMuaXRlcml0ZW1zKCkKKworICAgIGRlZiBpdGVyX2J1aWx0aW5zKHNlbGYpOgorICAgICAgICAnJycKKyAgICAgICAgWWllbGQgYSBzZXF1ZW5jZSBvZiAobmFtZSx2YWx1ZSkgcGFpcnMgb2YgUHlPYmplY3RQdHIgaW5zdGFuY2VzLCBmb3IKKyAgICAgICAgdGhlIGJ1aWx0aW4gdmFyaWFibGVzCisgICAgICAgICcnJworICAgICAgICBpZiBzZWxmLmlzX29wdGltaXplZF9vdXQoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHB5b3BfYnVpbHRpbnMgPSBzZWxmLnB5b3BfZmllbGQoJ2ZfYnVpbHRpbnMnKQorICAgICAgICByZXR1cm4gcHlvcF9idWlsdGlucy5pdGVyaXRlbXMoKQorCisgICAgZGVmIGdldF92YXJfYnlfbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgJycnCisgICAgICAgIExvb2sgZm9yIHRoZSBuYW1lZCBsb2NhbCB2YXJpYWJsZSwgcmV0dXJuaW5nIGEgKFB5T2JqZWN0UHRyLCBzY29wZSkgcGFpcgorICAgICAgICB3aGVyZSBzY29wZSBpcyBhIHN0cmluZyAnbG9jYWwnLCAnZ2xvYmFsJywgJ2J1aWx0aW4nCisKKyAgICAgICAgSWYgbm90IGZvdW5kLCByZXR1cm4gKE5vbmUsIE5vbmUpCisgICAgICAgICcnJworICAgICAgICBmb3IgcHlvcF9uYW1lLCBweW9wX3ZhbHVlIGluIHNlbGYuaXRlcl9sb2NhbHMoKToKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gcHlvcF9uYW1lLnByb3h5dmFsKHNldCgpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHlvcF92YWx1ZSwgJ2xvY2FsJworICAgICAgICBmb3IgcHlvcF9uYW1lLCBweW9wX3ZhbHVlIGluIHNlbGYuaXRlcl9nbG9iYWxzKCk6CisgICAgICAgICAgICBpZiBuYW1lID09IHB5b3BfbmFtZS5wcm94eXZhbChzZXQoKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHB5b3BfdmFsdWUsICdnbG9iYWwnCisgICAgICAgIGZvciBweW9wX25hbWUsIHB5b3BfdmFsdWUgaW4gc2VsZi5pdGVyX2J1aWx0aW5zKCk6CisgICAgICAgICAgICBpZiBuYW1lID09IHB5b3BfbmFtZS5wcm94eXZhbChzZXQoKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHB5b3BfdmFsdWUsICdidWlsdGluJworICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCisgICAgZGVmIGZpbGVuYW1lKHNlbGYpOgorICAgICAgICAnJydHZXQgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgUHl0aG9uIHNvdXJjZSBmaWxlLCBhcyBhIHN0cmluZycnJworICAgICAgICBpZiBzZWxmLmlzX29wdGltaXplZF9vdXQoKToKKyAgICAgICAgICAgIHJldHVybiAnKGZyYW1lIGluZm9ybWF0aW9uIG9wdGltaXplZCBvdXQpJworICAgICAgICByZXR1cm4gc2VsZi5jb19maWxlbmFtZS5wcm94eXZhbChzZXQoKSkKKworICAgIGRlZiBjdXJyZW50X2xpbmVfbnVtKHNlbGYpOgorICAgICAgICAnJydHZXQgY3VycmVudCBsaW5lIG51bWJlciBhcyBhbiBpbnRlZ2VyICgxLWJhc2VkKQorCisgICAgICAgIFRyYW5zbGF0ZWQgZnJvbSBQeUZyYW1lX0dldExpbmVOdW1iZXIgYW5kIFB5Q29kZV9BZGRyMkxpbmUKKworICAgICAgICBTZWUgT2JqZWN0cy9sbm90YWJfbm90ZXMudHh0CisgICAgICAgICcnJworICAgICAgICBpZiBzZWxmLmlzX29wdGltaXplZF9vdXQoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZfdHJhY2UgPSBzZWxmLmZpZWxkKCdmX3RyYWNlJykKKyAgICAgICAgaWYgbG9uZyhmX3RyYWNlKSAhPSAwOgorICAgICAgICAgICAgIyB3ZSBoYXZlIGEgbm9uLU5VTEwgZl90cmFjZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZfbGluZW5vCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY28uYWRkcjJsaW5lKHNlbGYuZl9sYXN0aSkKKyAgICAgICAgICAgICNleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICMgICAgcmV0dXJuIHNlbGYuZl9saW5lbm8KKworICAgIGRlZiBjdXJyZW50X2xpbmUoc2VsZik6CisgICAgICAgICcnJ0dldCB0aGUgdGV4dCBvZiB0aGUgY3VycmVudCBzb3VyY2UgbGluZSBhcyBhIHN0cmluZywgd2l0aCBhIHRyYWlsaW5nCisgICAgICAgIG5ld2xpbmUgY2hhcmFjdGVyJycnCisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW1pemVkX291dCgpOgorICAgICAgICAgICAgcmV0dXJuICcoZnJhbWUgaW5mb3JtYXRpb24gb3B0aW1pemVkIG91dCknCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lKCksICdyJykgYXMgZjoKKyAgICAgICAgICAgIGFsbF9saW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICMgQ29udmVydCBmcm9tIDEtYmFzZWQgY3VycmVudF9saW5lX251bSB0byAwLWJhc2VkIGxpc3Qgb2Zmc2V0OgorICAgICAgICAgICAgcmV0dXJuIGFsbF9saW5lc1tzZWxmLmN1cnJlbnRfbGluZV9udW0oKS0xXQorCisgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpbWl6ZWRfb3V0KCk6CisgICAgICAgICAgICBvdXQud3JpdGUoJyhmcmFtZSBpbmZvcm1hdGlvbiBvcHRpbWl6ZWQgb3V0KScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgb3V0LndyaXRlKCdGcmFtZSAweCV4LCBmb3IgZmlsZSAlcywgbGluZSAlaSwgaW4gJXMgKCcKKyAgICAgICAgICAgICAgICAgICUgKHNlbGYuYXNfYWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb19maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9saW5lX251bSgpLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb19uYW1lKSkKKyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIGZvciBweW9wX25hbWUsIHB5b3BfdmFsdWUgaW4gc2VsZi5pdGVyX2xvY2FscygpOgorICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorCisgICAgICAgICAgICBvdXQud3JpdGUocHlvcF9uYW1lLnByb3h5dmFsKHZpc2l0ZWQpKQorICAgICAgICAgICAgb3V0LndyaXRlKCc9JykKKyAgICAgICAgICAgIHB5b3BfdmFsdWUud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisKKyAgICAgICAgb3V0LndyaXRlKCcpJykKKworY2xhc3MgUHlTZXRPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeVNldE9iamVjdCcKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgcmV0dXJuIFByb3h5QWxyZWFkeVZpc2l0ZWQoJyVzKC4uLiknICUgc2VsZi5zYWZlX3RwX25hbWUoKSkKKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgbWVtYmVycyA9IFtdCisgICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQorICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSsxKToKKyAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KKyAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQorICAgICAgICAgICAgaWYga2V5ICE9IDA6CisgICAgICAgICAgICAgICAga2V5X3Byb3h5ID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KS5wcm94eXZhbCh2aXNpdGVkKQorICAgICAgICAgICAgICAgIGlmIGtleV9wcm94eSAhPSAnPGR1bW15IGtleT4nOgorICAgICAgICAgICAgICAgICAgICBtZW1iZXJzLmFwcGVuZChrZXlfcHJveHkpCisgICAgICAgIGlmIHNlbGYuc2FmZV90cF9uYW1lKCkgPT0gJ2Zyb3plbnNldCc6CisgICAgICAgICAgICByZXR1cm4gZnJvemVuc2V0KG1lbWJlcnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2V0KG1lbWJlcnMpCisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICBvdXQud3JpdGUoc2VsZi5zYWZlX3RwX25hbWUoKSkKKworICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICBvdXQud3JpdGUoJyguLi4pJykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICBvdXQud3JpdGUoJyhbJykKKyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQorICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSsxKToKKyAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KKyAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQorICAgICAgICAgICAgaWYga2V5ICE9IDA6CisgICAgICAgICAgICAgICAgcHlvcF9rZXkgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihrZXkpCisgICAgICAgICAgICAgICAga2V5X3Byb3h5ID0gcHlvcF9rZXkucHJveHl2YWwodmlzaXRlZCkgIyBGSVhNRSEKKyAgICAgICAgICAgICAgICBpZiBrZXlfcHJveHkgIT0gJzxkdW1teSBrZXk+JzoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcsICcpCisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcHlvcF9rZXkud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgIG91dC53cml0ZSgnXSknKQorCisKK2NsYXNzIFB5U3RyaW5nT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlTdHJpbmdPYmplY3QnCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgZmllbGRfb2Jfc2l6ZSA9IHNlbGYuZmllbGQoJ29iX3NpemUnKQorICAgICAgICBmaWVsZF9vYl9zdmFsID0gc2VsZi5maWVsZCgnb2Jfc3ZhbCcpCisgICAgICAgIGNoYXJfcHRyID0gZmllbGRfb2Jfc3ZhbC5hZGRyZXNzLmNhc3QoX3R5cGVfdW5zaWduZWRfY2hhcl9wdHIpCisgICAgICAgIHJldHVybiAnJy5qb2luKFtjaHIoY2hhcl9wdHJbaV0pIGZvciBpIGluIHNhZmVfcmFuZ2UoZmllbGRfb2Jfc2l6ZSldKQorCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpCisKK2NsYXNzIFB5VHVwbGVPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeVR1cGxlT2JqZWN0JworCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAjIEdldCB0aGUgZ2RiLlZhbHVlIGZvciB0aGUgKFB5T2JqZWN0Kikgd2l0aCB0aGUgZ2l2ZW4gaW5kZXg6CisgICAgICAgIGZpZWxkX29iX2l0ZW0gPSBzZWxmLmZpZWxkKCdvYl9pdGVtJykKKyAgICAgICAgcmV0dXJuIGZpZWxkX29iX2l0ZW1baV0KKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgcmV0dXJuIFByb3h5QWxyZWFkeVZpc2l0ZWQoJyguLi4pJykKKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgcmVzdWx0ID0gdHVwbGUoW1B5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKHNlbGZbaV0pLnByb3h5dmFsKHZpc2l0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKGludF9mcm9tX2ludChzZWxmLmZpZWxkKCdvYl9zaXplJykpKV0pCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiB3cml0ZV9yZXByKHNlbGYsIG91dCwgdmlzaXRlZCk6CisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIG91dC53cml0ZSgnKC4uLiknKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgIG91dC53cml0ZSgnKCcpCisgICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2UoaW50X2Zyb21faW50KHNlbGYuZmllbGQoJ29iX3NpemUnKSkpOgorICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcsICcpCisgICAgICAgICAgICBlbGVtZW50ID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoc2VsZltpXSkKKyAgICAgICAgICAgIGVsZW1lbnQud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgIGlmIHNlbGYuZmllbGQoJ29iX3NpemUnKSA9PSAxOgorICAgICAgICAgICAgb3V0LndyaXRlKCcsKScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXQud3JpdGUoJyknKQorCitjbGFzcyBQeVR5cGVPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeVR5cGVPYmplY3QnCisKKworaWYgc3lzLm1heHVuaWNvZGUgPj0gMHgxMDAwMDoKKyAgICBfdW5pY2hyID0gdW5pY2hyCitlbHNlOgorICAgICMgTmVlZGVkIGZvciBwcm9wZXIgc3Vycm9nYXRlIHN1cHBvcnQgaWYgc2l6ZW9mKFB5X1VOSUNPREUpIGlzIDIgaW4gZ2RiCisgICAgZGVmIF91bmljaHIoeCk6CisgICAgICAgIGlmIHggPCAweDEwMDAwOgorICAgICAgICAgICAgcmV0dXJuIHVuaWNocih4KQorICAgICAgICB4IC09IDB4MTAwMDAKKyAgICAgICAgY2gxID0gMHhEODAwIHwgKHggPj4gMTApCisgICAgICAgIGNoMiA9IDB4REMwMCB8ICh4ICYgMHgzRkYpCisgICAgICAgIHJldHVybiB1bmljaHIoY2gxKSArIHVuaWNocihjaDIpCisKK2NsYXNzIFB5VW5pY29kZU9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgX3R5cGVuYW1lID0gJ1B5VW5pY29kZU9iamVjdCcKKworICAgIGRlZiBjaGFyX3dpZHRoKHNlbGYpOgorICAgICAgICBfdHlwZV9QeV9VTklDT0RFID0gZ2RiLmxvb2t1cF90eXBlKCdQeV9VTklDT0RFJykKKyAgICAgICAgcmV0dXJuIF90eXBlX1B5X1VOSUNPREUuc2l6ZW9mCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgICMgRnJvbSB1bmljb2Rlb2JqZWN0Lmg6CisgICAgICAgICMgICAgIFB5X3NzaXplX3QgbGVuZ3RoOyAgLyogTGVuZ3RoIG9mIHJhdyBVbmljb2RlIGRhdGEgaW4gYnVmZmVyICovCisgICAgICAgICMgICAgIFB5X1VOSUNPREUgKnN0cjsgICAgLyogUmF3IFVuaWNvZGUgYnVmZmVyICovCisgICAgICAgIGZpZWxkX2xlbmd0aCA9IGxvbmcoc2VsZi5maWVsZCgnbGVuZ3RoJykpCisgICAgICAgIGZpZWxkX3N0ciA9IHNlbGYuZmllbGQoJ3N0cicpCisKKyAgICAgICAgIyBHYXRoZXIgYSBsaXN0IG9mIGludHMgZnJvbSB0aGUgUHlfVU5JQ09ERSBhcnJheTsgdGhlc2UgYXJlIGVpdGhlcgorICAgICAgICAjIFVDUy0yIG9yIFVDUy00IGNvZGUgcG9pbnRzOgorICAgICAgICBpZiBzZWxmLmNoYXJfd2lkdGgoKSA+IDI6CisgICAgICAgICAgICBQeV9VTklDT0RFcyA9IFtpbnQoZmllbGRfc3RyW2ldKSBmb3IgaSBpbiBzYWZlX3JhbmdlKGZpZWxkX2xlbmd0aCldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEEgbW9yZSBlbGFib3JhdGUgcm91dGluZSBpZiBzaXplb2YoUHlfVU5JQ09ERSkgaXMgMiBpbiB0aGUKKyAgICAgICAgICAgICMgaW5mZXJpb3IgcHJvY2Vzczogd2UgbXVzdCBqb2luIHN1cnJvZ2F0ZSBwYWlycy4KKyAgICAgICAgICAgIFB5X1VOSUNPREVzID0gW10KKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICBsaW1pdCA9IHNhZmV0eV9saW1pdChmaWVsZF9sZW5ndGgpCisgICAgICAgICAgICB3aGlsZSBpIDwgbGltaXQ6CisgICAgICAgICAgICAgICAgdWNzID0gaW50KGZpZWxkX3N0cltpXSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgICAgICBpZiB1Y3MgPCAweEQ4MDAgb3IgdWNzID49IDB4REMwMCBvciBpID09IGZpZWxkX2xlbmd0aDoKKyAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERXMuYXBwZW5kKHVjcykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIFRoaXMgY291bGQgYmUgYSBzdXJyb2dhdGUgcGFpci4KKyAgICAgICAgICAgICAgICB1Y3MyID0gaW50KGZpZWxkX3N0cltpXSkKKyAgICAgICAgICAgICAgICBpZiB1Y3MyIDwgMHhEQzAwIG9yIHVjczIgPiAweERGRkY6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29kZSA9ICh1Y3MgJiAweDAzRkYpIDw8IDEwCisgICAgICAgICAgICAgICAgY29kZSB8PSB1Y3MyICYgMHgwM0ZGCisgICAgICAgICAgICAgICAgY29kZSArPSAweDAwMDEwMDAwCisgICAgICAgICAgICAgICAgUHlfVU5JQ09ERXMuYXBwZW5kKGNvZGUpCisgICAgICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyBDb252ZXJ0IHRoZSBpbnQgY29kZSBwb2ludHMgdG8gdW5pY29kZSBjaGFyYWN0ZXJzLCBhbmQgZ2VuZXJhdGUgYQorICAgICAgICAjIGxvY2FsIHVuaWNvZGUgaW5zdGFuY2UuCisgICAgICAgICMgVGhpcyBzcGxpdHMgc3Vycm9nYXRlIHBhaXJzIGlmIHNpemVvZihQeV9VTklDT0RFKSBpcyAyIGhlcmUgKGluIGdkYikuCisgICAgICAgIHJlc3VsdCA9IHUnJy5qb2luKFtfdW5pY2hyKHVjcykgZm9yIHVjcyBpbiBQeV9VTklDT0RFc10pCisgICAgICAgIHJldHVybiByZXN1bHQKKworCitkZWYgaW50X2Zyb21faW50KGdkYnZhbCk6CisgICAgcmV0dXJuIGludChzdHIoZ2RidmFsKSkKKworCitkZWYgc3RyaW5naWZ5KHZhbCk6CisgICAgIyBUT0RPOiByZXByKCkgcHV0cyBldmVyeXRoaW5nIG9uIG9uZSBsaW5lOyBwZm9ybWF0IGNhbiBiZSBuaWNlciwgYnV0CisgICAgIyBjYW4gbGVhZCB0byB2LmxvbmcgcmVzdWx0czsgdGhpcyBmdW5jdGlvbiBpc29sYXRlcyB0aGUgY2hvaWNlCisgICAgaWYgVHJ1ZToKKyAgICAgICAgcmV0dXJuIHJlcHIodmFsKQorICAgIGVsc2U6CisgICAgICAgIGZyb20gcHByaW50IGltcG9ydCBwZm9ybWF0CisgICAgICAgIHJldHVybiBwZm9ybWF0KHZhbCkKKworCitjbGFzcyBQeU9iamVjdFB0clByaW50ZXI6CisgICAgIlByaW50cyBhIChQeU9iamVjdCopIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBnZGJ2YWwpOgorICAgICAgICBzZWxmLmdkYnZhbCA9IGdkYnZhbAorCisgICAgZGVmIHRvX3N0cmluZyAoc2VsZik6CisgICAgICAgIHB5b3AgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmLmdkYnZhbCkKKyAgICAgICAgaWYgVHJ1ZToKKyAgICAgICAgICAgIHJldHVybiBweW9wLmdldF90cnVuY2F0ZWRfcmVwcihNQVhfT1VUUFVUX0xFTikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgR2VuZXJhdGUgZnVsbCBwcm94eSB2YWx1ZSB0aGVuIHN0cmluZ2lmeSBpdC4KKyAgICAgICAgICAgICMgRG9pbmcgc28gY291bGQgYmUgZXhwZW5zaXZlCisgICAgICAgICAgICBwcm94eXZhbCA9IHB5b3AucHJveHl2YWwoc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gc3RyaW5naWZ5KHByb3h5dmFsKQorCitkZWYgcHJldHR5X3ByaW50ZXJfbG9va3VwKGdkYnZhbCk6CisgICAgdHlwZSA9IGdkYnZhbC50eXBlLnVucXVhbGlmaWVkKCkKKyAgICBpZiB0eXBlLmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9QVFI6CisgICAgICAgIHR5cGUgPSB0eXBlLnRhcmdldCgpLnVucXVhbGlmaWVkKCkKKyAgICAgICAgdCA9IHN0cih0eXBlKQorICAgICAgICBpZiB0IGluICgiUHlPYmplY3QiLCAiUHlGcmFtZU9iamVjdCIpOgorICAgICAgICAgICAgcmV0dXJuIFB5T2JqZWN0UHRyUHJpbnRlcihnZGJ2YWwpCisKKyIiIgorRHVyaW5nIGRldmVsb3BtZW50LCBJJ3ZlIGJlZW4gbWFudWFsbHkgaW52b2tpbmcgdGhlIGNvZGUgaW4gdGhpcyB3YXk6CisoZ2RiKSBweXRob24KKworaW1wb3J0IHN5cworc3lzLnBhdGguYXBwZW5kKCcvaG9tZS9kYXZpZC9jb2RpbmcvcHl0aG9uLWdkYicpCitpbXBvcnQgbGlicHl0aG9uCitlbmQKKwordGhlbiByZWxvYWRpbmcgaXQgYWZ0ZXIgZWFjaCBlZGl0IGxpa2UgdGhpczoKKyhnZGIpIHB5dGhvbiByZWxvYWQobGlicHl0aG9uKQorCitUaGUgZm9sbG93aW5nIGNvZGUgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBwcmV0dHlwcmludGVyIGlzIHJlZ2lzdGVyZWQKK2lmIHRoZSBjb2RlIGlzIGF1dG9sb2FkZWQgYnkgZ2RiIHdoZW4gdmlzaXRpbmcgbGlicHl0aG9uLnNvLCBwcm92aWRlZAordGhhdCB0aGlzIHB5dGhvbiBmaWxlIGlzIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwYXRoIGFzIHRoZSBsaWJyYXJ5IChvciBpdHMKKy5kZWJ1ZyBmaWxlKSBwbHVzIGEgIi1nZGIucHkiIHN1ZmZpeCwgZS5nOgorICAvdXNyL2xpYi9saWJweXRob24yLjYuc28uMS4wLWdkYi5weQorICAvdXNyL2xpYi9kZWJ1Zy91c3IvbGliL2xpYnB5dGhvbjIuNi5zby4xLjAuZGVidWctZ2RiLnB5CisiIiIKK2RlZiByZWdpc3RlciAob2JqKToKKyAgICBpZiBvYmogPT0gTm9uZToKKyAgICAgICAgb2JqID0gZ2RiCisKKyAgICAjIFdpcmUgdXAgdGhlIHByZXR0eS1wcmludGVyCisgICAgb2JqLnByZXR0eV9wcmludGVycy5hcHBlbmQocHJldHR5X3ByaW50ZXJfbG9va3VwKQorCityZWdpc3RlciAoZ2RiLmN1cnJlbnRfb2JqZmlsZSAoKSkKKworCisKKyMgVW5mb3J0dW5hdGVseSwgdGhlIGV4YWN0IEFQSSBleHBvc2VkIGJ5IHRoZSBnZGIgbW9kdWxlIHZhcmllcyBzb21ld2hhdAorIyBmcm9tIGJ1aWxkIHRvIGJ1aWxkCisjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODI3OT8jbXNnMTAyMjc2CisKK2NsYXNzIEZyYW1lKG9iamVjdCk6CisgICAgJycnCisgICAgV3JhcHBlciBmb3IgZ2RiLkZyYW1lLCBhZGRpbmcgdmFyaW91cyBtZXRob2RzCisgICAgJycnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdkYmZyYW1lKToKKyAgICAgICAgc2VsZi5fZ2RiZnJhbWUgPSBnZGJmcmFtZQorCisgICAgZGVmIG9sZGVyKHNlbGYpOgorICAgICAgICBvbGRlciA9IHNlbGYuX2dkYmZyYW1lLm9sZGVyKCkKKyAgICAgICAgaWYgb2xkZXI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWUob2xkZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIG5ld2VyKHNlbGYpOgorICAgICAgICBuZXdlciA9IHNlbGYuX2dkYmZyYW1lLm5ld2VyKCkKKyAgICAgICAgaWYgbmV3ZXI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWUobmV3ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNlbGVjdChzZWxmKToKKyAgICAgICAgJycnSWYgc3VwcG9ydGVkLCBzZWxlY3QgdGhpcyBmcmFtZSBhbmQgcmV0dXJuIFRydWU7IHJldHVybiBGYWxzZSBpZiB1bnN1cHBvcnRlZAorCisgICAgICAgIE5vdCBhbGwgYnVpbGRzIGhhdmUgYSBnZGIuRnJhbWUuc2VsZWN0IG1ldGhvZDsgc2VlbXMgdG8gYmUgcHJlc2VudCBvbiBGZWRvcmEgMTIKKyAgICAgICAgb253YXJkcywgYnV0IGFic2VudCBvbiBVYnVudHUgYnVpbGRib3QnJycKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5fZ2RiZnJhbWUsICdzZWxlY3QnKToKKyAgICAgICAgICAgIHByaW50ICgnVW5hYmxlIHRvIHNlbGVjdCBmcmFtZTogJworICAgICAgICAgICAgICAgICAgICd0aGlzIGJ1aWxkIG9mIGdkYiBkb2VzIG5vdCBleHBvc2UgYSBnZGIuRnJhbWUuc2VsZWN0IG1ldGhvZCcpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fZ2RiZnJhbWUuc2VsZWN0KCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBnZXRfaW5kZXgoc2VsZik6CisgICAgICAgICcnJ0NhbGN1bGF0ZSBpbmRleCBvZiBmcmFtZSwgc3RhcnRpbmcgYXQgMCBmb3IgdGhlIG5ld2VzdCBmcmFtZSB3aXRoaW4KKyAgICAgICAgdGhpcyB0aHJlYWQnJycKKyAgICAgICAgaW5kZXggPSAwCisgICAgICAgICMgR28gZG93biB1bnRpbCB5b3UgcmVhY2ggdGhlIG5ld2VzdCBmcmFtZToKKyAgICAgICAgaXRlcl9mcmFtZSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaXRlcl9mcmFtZS5uZXdlcigpOgorICAgICAgICAgICAgaW5kZXggKz0gMQorICAgICAgICAgICAgaXRlcl9mcmFtZSA9IGl0ZXJfZnJhbWUubmV3ZXIoKQorICAgICAgICByZXR1cm4gaW5kZXgKKworICAgIGRlZiBpc19ldmFsZnJhbWVleChzZWxmKToKKyAgICAgICAgJycnSXMgdGhpcyBhIFB5RXZhbF9FdmFsRnJhbWVFeCBmcmFtZT8nJycKKyAgICAgICAgaWYgc2VsZi5fZ2RiZnJhbWUubmFtZSgpID09ICdQeUV2YWxfRXZhbEZyYW1lRXgnOgorICAgICAgICAgICAgJycnCisgICAgICAgICAgICBJIGJlbGlldmUgd2UgYWxzbyBuZWVkIHRvIGZpbHRlciBvbiB0aGUgaW5saW5lCisgICAgICAgICAgICBzdHJ1Y3QgZnJhbWVfaWQuaW5saW5lX2RlcHRoLCBvbmx5IHJlZ2FyZGluZyBmcmFtZXMgd2l0aAorICAgICAgICAgICAgYW4gaW5saW5lIGRlcHRoIG9mIDAgYXMgYWN0dWFsbHkgYmVpbmcgdGhpcyBmdW5jdGlvbgorCisgICAgICAgICAgICBTbyB3ZSByZWplY3QgdGhvc2Ugd2l0aCB0eXBlIGdkYi5JTkxJTkVfRlJBTUUKKyAgICAgICAgICAgICcnJworICAgICAgICAgICAgaWYgc2VsZi5fZ2RiZnJhbWUudHlwZSgpID09IGdkYi5OT1JNQUxfRlJBTUU6CisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGEgUHlFdmFsX0V2YWxGcmFtZUV4IGZyYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZ2V0X3B5b3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBzZWxmLl9nZGJmcmFtZS5yZWFkX3ZhcignZicpCisgICAgICAgICAgICByZXR1cm4gUHlGcmFtZU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihmKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X3NlbGVjdGVkX2ZyYW1lKGNscyk6CisgICAgICAgIF9nZGJmcmFtZSA9IGdkYi5zZWxlY3RlZF9mcmFtZSgpCisgICAgICAgIGlmIF9nZGJmcmFtZToKKyAgICAgICAgICAgIHJldHVybiBGcmFtZShfZ2RiZnJhbWUpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X3NlbGVjdGVkX3B5dGhvbl9mcmFtZShjbHMpOgorICAgICAgICAnJydUcnkgdG8gb2J0YWluIHRoZSBGcmFtZSBmb3IgdGhlIHB5dGhvbiBjb2RlIGluIHRoZSBzZWxlY3RlZCBmcmFtZSwKKyAgICAgICAgb3IgTm9uZScnJworICAgICAgICBmcmFtZSA9IGNscy5nZXRfc2VsZWN0ZWRfZnJhbWUoKQorCisgICAgICAgIHdoaWxlIGZyYW1lOgorICAgICAgICAgICAgaWYgZnJhbWUuaXNfZXZhbGZyYW1lZXgoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWUKKyAgICAgICAgICAgIGZyYW1lID0gZnJhbWUub2xkZXIoKQorCisgICAgICAgICMgTm90IGZvdW5kOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHByaW50X3N1bW1hcnkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfZXZhbGZyYW1lZXgoKToKKyAgICAgICAgICAgIHB5b3AgPSBzZWxmLmdldF9weW9wKCkKKyAgICAgICAgICAgIGlmIHB5b3A6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnIyVpICVzXG4nICUgKHNlbGYuZ2V0X2luZGV4KCksIHB5b3AuZ2V0X3RydW5jYXRlZF9yZXByKE1BWF9PVVRQVVRfTEVOKSkpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShweW9wLmN1cnJlbnRfbGluZSgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcjJWkgKHVuYWJsZSB0byByZWFkIHB5dGhvbiBmcmFtZSBpbmZvcm1hdGlvbilcbicgJSBzZWxmLmdldF9pbmRleCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnIyVpXG4nICUgc2VsZi5nZXRfaW5kZXgoKSkKKworY2xhc3MgUHlMaXN0KGdkYi5Db21tYW5kKToKKyAgICAnJydMaXN0IHRoZSBjdXJyZW50IFB5dGhvbiBzb3VyY2UgY29kZSwgaWYgYW55CisKKyAgICBVc2UKKyAgICAgICBweS1saXN0IFNUQVJUCisgICAgdG8gbGlzdCBhdCBhIGRpZmZlcmVudCBsaW5lIG51bWJlciB3aXRoaW4gdGhlIHB5dGhvbiBzb3VyY2UuCisKKyAgICBVc2UKKyAgICAgICBweS1saXN0IFNUQVJULCBFTkQKKyAgICB0byBsaXN0IGEgc3BlY2lmaWMgcmFuZ2Ugb2YgbGluZXMgd2l0aGluIHRoZSBweXRob24gc291cmNlLgorICAgICcnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBnZGIuQ29tbWFuZC5fX2luaXRfXyAoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweS1saXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0ZJTEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTVBMRVRFX05PTkUpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJncywgZnJvbV90dHkpOgorICAgICAgICBpbXBvcnQgcmUKKworICAgICAgICBzdGFydCA9IE5vbmUKKyAgICAgICAgZW5kID0gTm9uZQorCisgICAgICAgIG0gPSByZS5tYXRjaChyJ1xzKihcZCspXHMqJywgYXJncykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHN0YXJ0ID0gaW50KG0uZ3JvdXAoMCkpCisgICAgICAgICAgICBlbmQgPSBzdGFydCArIDEwCisKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInXHMqKFxkKylccyosXHMqKFxkKylccyonLCBhcmdzKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgc3RhcnQsIGVuZCA9IG1hcChpbnQsIG0uZ3JvdXBzKCkpCisKKyAgICAgICAgZnJhbWUgPSBGcmFtZS5nZXRfc2VsZWN0ZWRfcHl0aG9uX2ZyYW1lKCkKKyAgICAgICAgaWYgbm90IGZyYW1lOgorICAgICAgICAgICAgcHJpbnQgJ1VuYWJsZSB0byBsb2NhdGUgcHl0aG9uIGZyYW1lJworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcHlvcCA9IGZyYW1lLmdldF9weW9wKCkKKyAgICAgICAgaWYgbm90IHB5b3A6CisgICAgICAgICAgICBwcmludCAnVW5hYmxlIHRvIHJlYWQgaW5mb3JtYXRpb24gb24gcHl0aG9uIGZyYW1lJworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZmlsZW5hbWUgPSBweW9wLmZpbGVuYW1lKCkKKyAgICAgICAgbGluZW5vID0gcHlvcC5jdXJyZW50X2xpbmVfbnVtKCkKKworICAgICAgICBpZiBzdGFydCBpcyBOb25lOgorICAgICAgICAgICAgc3RhcnQgPSBsaW5lbm8gLSA1CisgICAgICAgICAgICBlbmQgPSBsaW5lbm8gKyA1CisKKyAgICAgICAgaWYgc3RhcnQ8MToKKyAgICAgICAgICAgIHN0YXJ0ID0gMQorCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgYWxsX2xpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgIyBzdGFydCBhbmQgZW5kIGFyZSAxLWJhc2VkLCBhbGxfbGluZXMgaXMgMC1iYXNlZDsKKyAgICAgICAgICAgICMgc28gW3N0YXJ0LTE6ZW5kXSBhcyBhIHB5dGhvbiBzbGljZSBnaXZlcyB1cyBbc3RhcnQsIGVuZF0gYXMgYQorICAgICAgICAgICAgIyBjbG9zZWQgaW50ZXJ2YWwKKyAgICAgICAgICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShhbGxfbGluZXNbc3RhcnQtMTplbmRdKToKKyAgICAgICAgICAgICAgICBsaW5lc3RyID0gc3RyKGkrc3RhcnQpCisgICAgICAgICAgICAgICAgIyBIaWdobGlnaHQgY3VycmVudCBsaW5lOgorICAgICAgICAgICAgICAgIGlmIGkgKyBzdGFydCA9PSBsaW5lbm86CisgICAgICAgICAgICAgICAgICAgIGxpbmVzdHIgPSAnPicgKyBsaW5lc3RyCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnJTRzICAgICVzJyAlIChsaW5lc3RyLCBsaW5lKSkKKworCisjIC4uLmFuZCByZWdpc3RlciB0aGUgY29tbWFuZDoKK1B5TGlzdCgpCisKK2RlZiBtb3ZlX2luX3N0YWNrKG1vdmVfdXApOgorICAgICcnJ01vdmUgdXAgb3IgZG93biB0aGUgc3RhY2sgKGZvciB0aGUgcHktdXAvcHktZG93biBjb21tYW5kKScnJworICAgIGZyYW1lID0gRnJhbWUuZ2V0X3NlbGVjdGVkX3B5dGhvbl9mcmFtZSgpCisgICAgd2hpbGUgZnJhbWU6CisgICAgICAgIGlmIG1vdmVfdXA6CisgICAgICAgICAgICBpdGVyX2ZyYW1lID0gZnJhbWUub2xkZXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaXRlcl9mcmFtZSA9IGZyYW1lLm5ld2VyKCkKKworICAgICAgICBpZiBub3QgaXRlcl9mcmFtZToKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgaXRlcl9mcmFtZS5pc19ldmFsZnJhbWVleCgpOgorICAgICAgICAgICAgIyBSZXN1bHQ6CisgICAgICAgICAgICBpZiBpdGVyX2ZyYW1lLnNlbGVjdCgpOgorICAgICAgICAgICAgICAgIGl0ZXJfZnJhbWUucHJpbnRfc3VtbWFyeSgpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmcmFtZSA9IGl0ZXJfZnJhbWUKKworICAgIGlmIG1vdmVfdXA6CisgICAgICAgIHByaW50ICdVbmFibGUgdG8gZmluZCBhbiBvbGRlciBweXRob24gZnJhbWUnCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQgJ1VuYWJsZSB0byBmaW5kIGEgbmV3ZXIgcHl0aG9uIGZyYW1lJworCitjbGFzcyBQeVVwKGdkYi5Db21tYW5kKToKKyAgICAnU2VsZWN0IGFuZCBwcmludCB0aGUgcHl0aG9uIHN0YWNrIGZyYW1lIHRoYXQgY2FsbGVkIHRoaXMgb25lIChpZiBhbnkpJworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ2RiLkNvbW1hbmQuX19pbml0X18gKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHktdXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfU1RBQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSkKKworCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdzLCBmcm9tX3R0eSk6CisgICAgICAgIG1vdmVfaW5fc3RhY2sobW92ZV91cD1UcnVlKQorCitjbGFzcyBQeURvd24oZ2RiLkNvbW1hbmQpOgorICAgICdTZWxlY3QgYW5kIHByaW50IHRoZSBweXRob24gc3RhY2sgZnJhbWUgY2FsbGVkIGJ5IHRoaXMgb25lIChpZiBhbnkpJworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ2RiLkNvbW1hbmQuX19pbml0X18gKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHktZG93biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9TVEFDSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01QTEVURV9OT05FKQorCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ3MsIGZyb21fdHR5KToKKyAgICAgICAgbW92ZV9pbl9zdGFjayhtb3ZlX3VwPUZhbHNlKQorCisjIE5vdCBhbGwgYnVpbGRzIG9mIGdkYiBoYXZlIGdkYi5GcmFtZS5zZWxlY3QKK2lmIGhhc2F0dHIoZ2RiLkZyYW1lLCAnc2VsZWN0Jyk6CisgICAgUHlVcCgpCisgICAgUHlEb3duKCkKKworY2xhc3MgUHlCYWNrdHJhY2UoZ2RiLkNvbW1hbmQpOgorICAgICdEaXNwbGF5IHRoZSBjdXJyZW50IHB5dGhvbiBmcmFtZSBhbmQgYWxsIHRoZSBmcmFtZXMgd2l0aGluIGl0cyBjYWxsIHN0YWNrIChpZiBhbnkpJworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ2RiLkNvbW1hbmQuX19pbml0X18gKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHktYnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfU1RBQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSkKKworCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdzLCBmcm9tX3R0eSk6CisgICAgICAgIGZyYW1lID0gRnJhbWUuZ2V0X3NlbGVjdGVkX3B5dGhvbl9mcmFtZSgpCisgICAgICAgIHdoaWxlIGZyYW1lOgorICAgICAgICAgICAgaWYgZnJhbWUuaXNfZXZhbGZyYW1lZXgoKToKKyAgICAgICAgICAgICAgICBmcmFtZS5wcmludF9zdW1tYXJ5KCkKKyAgICAgICAgICAgIGZyYW1lID0gZnJhbWUub2xkZXIoKQorCitQeUJhY2t0cmFjZSgpCisKK2NsYXNzIFB5UHJpbnQoZ2RiLkNvbW1hbmQpOgorICAgICdMb29rIHVwIHRoZSBnaXZlbiBweXRob24gdmFyaWFibGUgbmFtZSwgYW5kIHByaW50IGl0JworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ2RiLkNvbW1hbmQuX19pbml0X18gKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHktcHJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01QTEVURV9OT05FKQorCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ3MsIGZyb21fdHR5KToKKyAgICAgICAgbmFtZSA9IHN0cihhcmdzKQorCisgICAgICAgIGZyYW1lID0gRnJhbWUuZ2V0X3NlbGVjdGVkX3B5dGhvbl9mcmFtZSgpCisgICAgICAgIGlmIG5vdCBmcmFtZToKKyAgICAgICAgICAgIHByaW50ICdVbmFibGUgdG8gbG9jYXRlIHB5dGhvbiBmcmFtZScKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHB5b3BfZnJhbWUgPSBmcmFtZS5nZXRfcHlvcCgpCisgICAgICAgIGlmIG5vdCBweW9wX2ZyYW1lOgorICAgICAgICAgICAgcHJpbnQgJ1VuYWJsZSB0byByZWFkIGluZm9ybWF0aW9uIG9uIHB5dGhvbiBmcmFtZScKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHB5b3BfdmFyLCBzY29wZSA9IHB5b3BfZnJhbWUuZ2V0X3Zhcl9ieV9uYW1lKG5hbWUpCisKKyAgICAgICAgaWYgcHlvcF92YXI6CisgICAgICAgICAgICBwcmludCAoJyVzICVyID0gJXMnCisgICAgICAgICAgICAgICAgICAgJSAoc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBweW9wX3Zhci5nZXRfdHJ1bmNhdGVkX3JlcHIoTUFYX09VVFBVVF9MRU4pKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICclciBub3QgZm91bmQnICUgbmFtZQorCitQeVByaW50KCkKKworY2xhc3MgUHlMb2NhbHMoZ2RiLkNvbW1hbmQpOgorICAgICdMb29rIHVwIHRoZSBnaXZlbiBweXRob24gdmFyaWFibGUgbmFtZSwgYW5kIHByaW50IGl0JworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ2RiLkNvbW1hbmQuX19pbml0X18gKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHktbG9jYWxzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSkKKworCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdzLCBmcm9tX3R0eSk6CisgICAgICAgIG5hbWUgPSBzdHIoYXJncykKKworICAgICAgICBmcmFtZSA9IEZyYW1lLmdldF9zZWxlY3RlZF9weXRob25fZnJhbWUoKQorICAgICAgICBpZiBub3QgZnJhbWU6CisgICAgICAgICAgICBwcmludCAnVW5hYmxlIHRvIGxvY2F0ZSBweXRob24gZnJhbWUnCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBweW9wX2ZyYW1lID0gZnJhbWUuZ2V0X3B5b3AoKQorICAgICAgICBpZiBub3QgcHlvcF9mcmFtZToKKyAgICAgICAgICAgIHByaW50ICdVbmFibGUgdG8gcmVhZCBpbmZvcm1hdGlvbiBvbiBweXRob24gZnJhbWUnCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmb3IgcHlvcF9uYW1lLCBweW9wX3ZhbHVlIGluIHB5b3BfZnJhbWUuaXRlcl9sb2NhbHMoKToKKyAgICAgICAgICAgIHByaW50ICgnJXMgPSAlcycKKyAgICAgICAgICAgICAgICAgICAlIChweW9wX25hbWUucHJveHl2YWwoc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgIHB5b3BfdmFsdWUuZ2V0X3RydW5jYXRlZF9yZXByKE1BWF9PVVRQVVRfTEVOKSkpCisKK1B5TG9jYWxzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL2kxOG4vbWFrZWxvY2FsZWFsaWFzLnB5IGIvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKaW5kZXggNDNkZjM1YS4uNWIzNjMxZSAxMDA2NDQKLS0tIGEvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKKysrIGIvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKQEAgLTksNyArOSw3IEBACiBpbXBvcnQgbG9jYWxlCiAKICMgTG9jYXRpb24gb2YgdGhlIGFsaWFzIGZpbGUKLUxPQ0FMRV9BTElBUyA9ICcvdXNyL2xpYi9YMTEvbG9jYWxlL2xvY2FsZS5hbGlhcycKK0xPQ0FMRV9BTElBUyA9ICcvdXNyL3NoYXJlL1gxMS9sb2NhbGUvbG9jYWxlLmFsaWFzJwogCiBkZWYgcGFyc2UoZmlsZW5hbWUpOgogCmRpZmYgLS1naXQgYS9Ub29scy9pMThuL21zZ2ZtdC5weSBiL1Rvb2xzL2kxOG4vbXNnZm10LnB5CmluZGV4IDY0MzMxMzEuLjVkZDU0MzAgMTAwNzU1Ci0tLSBhL1Rvb2xzL2kxOG4vbXNnZm10LnB5CisrKyBiL1Rvb2xzL2kxOG4vbXNnZm10LnB5CkBAIC0xMzMsMTYgKzEzMywzOSBAQAogICAgICAgICBpZiBsWzBdID09ICcjJzoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICMgTm93IHdlIGFyZSBpbiBhIG1zZ2lkIHNlY3Rpb24sIG91dHB1dCBwcmV2aW91cyBzZWN0aW9uCi0gICAgICAgIGlmIGwuc3RhcnRzd2l0aCgnbXNnaWQnKToKKyAgICAgICAgaWYgbC5zdGFydHN3aXRoKCdtc2dpZCcpIGFuZCBub3QgbC5zdGFydHN3aXRoKCdtc2dpZF9wbHVyYWwnKToKICAgICAgICAgICAgIGlmIHNlY3Rpb24gPT0gU1RSOgogICAgICAgICAgICAgICAgIGFkZChtc2dpZCwgbXNnc3RyLCBmdXp6eSkKICAgICAgICAgICAgIHNlY3Rpb24gPSBJRAogICAgICAgICAgICAgbCA9IGxbNTpdCiAgICAgICAgICAgICBtc2dpZCA9IG1zZ3N0ciA9ICcnCisgICAgICAgICAgICBpc19wbHVyYWwgPSBGYWxzZQorICAgICAgICAjIFRoaXMgaXMgYSBtZXNzYWdlIHdpdGggcGx1cmFsIGZvcm1zCisgICAgICAgIGVsaWYgbC5zdGFydHN3aXRoKCdtc2dpZF9wbHVyYWwnKToKKyAgICAgICAgICAgIGlmIHNlY3Rpb24gIT0gSUQ6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgJ21zZ2lkX3BsdXJhbCBub3QgcHJlY2VlZGVkIGJ5IG1zZ2lkIG9uICVzOiVkJyAlXAorICAgICAgICAgICAgICAgICAgICAoaW5maWxlLCBsbm8pCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIGwgPSBsWzEyOl0KKyAgICAgICAgICAgIG1zZ2lkICs9ICdcMCcgIyBzZXBhcmF0b3Igb2Ygc2luZ3VsYXIgYW5kIHBsdXJhbAorICAgICAgICAgICAgaXNfcGx1cmFsID0gVHJ1ZQogICAgICAgICAjIE5vdyB3ZSBhcmUgaW4gYSBtc2dzdHIgc2VjdGlvbgogICAgICAgICBlbGlmIGwuc3RhcnRzd2l0aCgnbXNnc3RyJyk6CiAgICAgICAgICAgICBzZWN0aW9uID0gU1RSCi0gICAgICAgICAgICBsID0gbFs2Ol0KKyAgICAgICAgICAgIGlmIGwuc3RhcnRzd2l0aCgnbXNnc3RyWycpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc19wbHVyYWw6CisgICAgICAgICAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdwbHVyYWwgd2l0aG91dCBtc2dpZF9wbHVyYWwgb24gJXM6JWQnICVcCisgICAgICAgICAgICAgICAgICAgICAgICAoaW5maWxlLCBsbm8pCisgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICAgICAgbCA9IGwuc3BsaXQoJ10nLCAxKVsxXQorICAgICAgICAgICAgICAgIGlmIG1zZ3N0cjoKKyAgICAgICAgICAgICAgICAgICAgbXNnc3RyICs9ICdcMCcgIyBTZXBhcmF0b3Igb2YgdGhlIHZhcmlvdXMgcGx1cmFsIGZvcm1zCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGlzX3BsdXJhbDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgJ2luZGV4ZWQgbXNnc3RyIHJlcXVpcmVkIGZvciBwbHVyYWwgb24gICVzOiVkJyAlXAorICAgICAgICAgICAgICAgICAgICAgICAgKGluZmlsZSwgbG5vKQorICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgICAgIGwgPSBsWzY6XQogICAgICAgICAjIFNraXAgZW1wdHkgbGluZXMKICAgICAgICAgbCA9IGwuc3RyaXAoKQogICAgICAgICBpZiBub3QgbDoKZGlmZiAtLWdpdCBhL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weSBiL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmI0ZmZhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5CkBAIC0wLDAgKzEsNTM5IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBUaGlzIGZpbGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIGJvdGggUHl0aG9uIDIuNiBhbmQgUHl0aG9uID49IDMuMC4KKworaW1wb3J0IHRpbWUKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGl0ZXJ0b29scworZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCisKK291dCA9IHN5cy5zdGRvdXQKKworVEVYVF9FTkNPRElORyA9ICd1dGY4JworTkVXTElORVMgPSAnbGYnCisKKyMgQ29tcGF0aWJpbGl0eQordHJ5OgorICAgIHhyYW5nZQorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICB4cmFuZ2UgPSByYW5nZQorCitkZWYgdGV4dF9vcGVuKGZuLCBtb2RlLCBlbmNvZGluZz1Ob25lKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBvcGVuKGZuLCBtb2RlLCBlbmNvZGluZz1lbmNvZGluZyBvciBURVhUX0VOQ09ESU5HKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJldHVybiBvcGVuKGZuLCBtb2RlKQorCitkZWYgZ2V0X2ZpbGVfc2l6ZXMoKToKKyAgICBmb3IgcyBpbiBbJzIwIEtCJywgJzQwMCBLQicsICcxMCBNQiddOgorICAgICAgICBzaXplLCB1bml0ID0gcy5zcGxpdCgpCisgICAgICAgIHNpemUgPSBpbnQoc2l6ZSkgKiB7J0tCJzogMTAyNCwgJ01CJzogMTAyNCAqKiAyfVt1bml0XQorICAgICAgICB5aWVsZCBzLnJlcGxhY2UoJyAnLCAnJyksIHNpemUKKworZGVmIGdldF9iaW5hcnlfZmlsZXMoKToKKyAgICByZXR1cm4gKChuYW1lICsgIi5iaW4iLCBzaXplKSBmb3IgbmFtZSwgc2l6ZSBpbiBnZXRfZmlsZV9zaXplcygpKQorCitkZWYgZ2V0X3RleHRfZmlsZXMoKToKKyAgICByZXR1cm4gKCgiJXMtJXMtJXMudHh0IiAlIChuYW1lLCBURVhUX0VOQ09ESU5HLCBORVdMSU5FUyksIHNpemUpCisgICAgICAgIGZvciBuYW1lLCBzaXplIGluIGdldF9maWxlX3NpemVzKCkpCisKK2RlZiB3aXRoX29wZW5fbW9kZShtb2RlKToKKyAgICBkZWYgZGVjb3JhdGUoZik6CisgICAgICAgIGYuZmlsZV9vcGVuX21vZGUgPSBtb2RlCisgICAgICAgIHJldHVybiBmCisgICAgcmV0dXJuIGRlY29yYXRlCisKK2RlZiB3aXRoX3NpemVzKCpzaXplcyk6CisgICAgZGVmIGRlY29yYXRlKGYpOgorICAgICAgICBmLmZpbGVfc2l6ZXMgPSBzaXplcworICAgICAgICByZXR1cm4gZgorICAgIHJldHVybiBkZWNvcmF0ZQorCisKKyMgSGVyZSBiZWdpbiB0aGUgdGVzdHMKKworQHdpdGhfb3Blbl9tb2RlKCJyIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHJlYWRfYnl0ZXdpc2UoZik6CisgICAgIiIiIHJlYWQgb25lIHVuaXQgYXQgYSB0aW1lICIiIgorICAgIGYuc2VlaygwKQorICAgIHdoaWxlIGYucmVhZCgxKToKKyAgICAgICAgcGFzcworCitAd2l0aF9vcGVuX21vZGUoInIiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgcmVhZF9zbWFsbF9jaHVua3MoZik6CisgICAgIiIiIHJlYWQgMjAgdW5pdHMgYXQgYSB0aW1lICIiIgorICAgIGYuc2VlaygwKQorICAgIHdoaWxlIGYucmVhZCgyMCk6CisgICAgICAgIHBhc3MKKworQHdpdGhfb3Blbl9tb2RlKCJyIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHJlYWRfYmlnX2NodW5rcyhmKToKKyAgICAiIiIgcmVhZCA0MDk2IHVuaXRzIGF0IGEgdGltZSAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICB3aGlsZSBmLnJlYWQoNDA5Nik6CisgICAgICAgIHBhc3MKKworQHdpdGhfb3Blbl9tb2RlKCJyIikKK0B3aXRoX3NpemVzKCJzbWFsbCIsICJtZWRpdW0iLCAibGFyZ2UiKQorZGVmIHJlYWRfd2hvbGVfZmlsZShmKToKKyAgICAiIiIgcmVhZCB3aG9sZSBjb250ZW50cyBhdCBvbmNlICIiIgorICAgIGYuc2VlaygwKQorICAgIHdoaWxlIGYucmVhZCgpOgorICAgICAgICBwYXNzCisKK0B3aXRoX29wZW5fbW9kZSgicnQiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgcmVhZF9saW5lcyhmKToKKyAgICAiIiIgcmVhZCBvbmUgbGluZSBhdCBhIHRpbWUgIiIiCisgICAgZi5zZWVrKDApCisgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgcGFzcworCitAd2l0aF9vcGVuX21vZGUoInIiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgc2Vla19mb3J3YXJkX2J5dGV3aXNlKGYpOgorICAgICIiIiBzZWVrIGZvcndhcmQgb25lIHVuaXQgYXQgYSB0aW1lICIiIgorICAgIGYuc2VlaygwLCAyKQorICAgIHNpemUgPSBmLnRlbGwoKQorICAgIGYuc2VlaygwLCAwKQorICAgIGZvciBpIGluIHhyYW5nZSgwLCBzaXplIC0gMSk6CisgICAgICAgIGYuc2VlayhpLCAwKQorCitAd2l0aF9vcGVuX21vZGUoInIiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgc2Vla19mb3J3YXJkX2Jsb2Nrd2lzZShmKToKKyAgICAiIiIgc2VlayBmb3J3YXJkIDEwMDAgdW5pdHMgYXQgYSB0aW1lICIiIgorICAgIGYuc2VlaygwLCAyKQorICAgIHNpemUgPSBmLnRlbGwoKQorICAgIGYuc2VlaygwLCAwKQorICAgIGZvciBpIGluIHhyYW5nZSgwLCBzaXplIC0gMSwgMTAwMCk6CisgICAgICAgIGYuc2VlayhpLCAwKQorCitAd2l0aF9vcGVuX21vZGUoInJiIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHJlYWRfc2Vla19ieXRld2lzZShmKToKKyAgICAiIiIgYWx0ZXJuYXRlIHJlYWQgJiBzZWVrIG9uZSB1bml0ICIiIgorICAgIGYuc2VlaygwKQorICAgIHdoaWxlIGYucmVhZCgxKToKKyAgICAgICAgZi5zZWVrKDEsIDEpCisKK0B3aXRoX29wZW5fbW9kZSgicmIiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgcmVhZF9zZWVrX2Jsb2Nrd2lzZShmKToKKyAgICAiIiIgYWx0ZXJuYXRlIHJlYWQgJiBzZWVrIDEwMDAgdW5pdHMgIiIiCisgICAgZi5zZWVrKDApCisgICAgd2hpbGUgZi5yZWFkKDEwMDApOgorICAgICAgICBmLnNlZWsoMTAwMCwgMSkKKworCitAd2l0aF9vcGVuX21vZGUoInciKQorQHdpdGhfc2l6ZXMoInNtYWxsIikKK2RlZiB3cml0ZV9ieXRld2lzZShmLCBzb3VyY2UpOgorICAgICIiIiB3cml0ZSBvbmUgdW5pdCBhdCBhIHRpbWUgIiIiCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpKToKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaTppKzFdKQorCitAd2l0aF9vcGVuX21vZGUoInciKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgd3JpdGVfc21hbGxfY2h1bmtzKGYsIHNvdXJjZSk6CisgICAgIiIiIHdyaXRlIDIwIHVuaXRzIGF0IGEgdGltZSAiIiIKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSksIDIwKToKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaTppKzIwXSkKKworQHdpdGhfb3Blbl9tb2RlKCJ3IikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHdyaXRlX21lZGl1bV9jaHVua3MoZiwgc291cmNlKToKKyAgICAiIiIgd3JpdGUgNDA5NiB1bml0cyBhdCBhIHRpbWUgIiIiCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpLCA0MDk2KToKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaTppKzQwOTZdKQorCitAd2l0aF9vcGVuX21vZGUoInciKQorQHdpdGhfc2l6ZXMoImxhcmdlIikKK2RlZiB3cml0ZV9sYXJnZV9jaHVua3MoZiwgc291cmNlKToKKyAgICAiIiIgd3JpdGUgMWU2IHVuaXRzIGF0IGEgdGltZSAiIiIKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSksIDEwMDAwMDApOgorICAgICAgICBmLndyaXRlKHNvdXJjZVtpOmkrMTAwMDAwMF0pCisKKworQHdpdGhfb3Blbl9tb2RlKCJ3KyIpCitAd2l0aF9zaXplcygic21hbGwiKQorZGVmIG1vZGlmeV9ieXRld2lzZShmLCBzb3VyY2UpOgorICAgICIiIiBtb2RpZnkgb25lIHVuaXQgYXQgYSB0aW1lICIiIgorICAgIGYuc2VlaygwKQorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSk6CisgICAgICAgIGYud3JpdGUoc291cmNlW2k6aSsxXSkKKworQHdpdGhfb3Blbl9tb2RlKCJ3KyIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiBtb2RpZnlfc21hbGxfY2h1bmtzKGYsIHNvdXJjZSk6CisgICAgIiIiIG1vZGlmeSAyMCB1bml0cyBhdCBhIHRpbWUgIiIiCisgICAgZi5zZWVrKDApCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpLCAyMCk6CisgICAgICAgIGYud3JpdGUoc291cmNlW2k6aSsyMF0pCisKK0B3aXRoX29wZW5fbW9kZSgidysiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgbW9kaWZ5X21lZGl1bV9jaHVua3MoZiwgc291cmNlKToKKyAgICAiIiIgbW9kaWZ5IDQwOTYgdW5pdHMgYXQgYSB0aW1lICIiIgorICAgIGYuc2VlaygwKQorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSwgNDA5Nik6CisgICAgICAgIGYud3JpdGUoc291cmNlW2k6aSs0MDk2XSkKKworQHdpdGhfb3Blbl9tb2RlKCJ3YisiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgbW9kaWZ5X3NlZWtfZm9yd2FyZF9ieXRld2lzZShmLCBzb3VyY2UpOgorICAgICIiIiBhbHRlcm5hdGUgd3JpdGUgJiBzZWVrIG9uZSB1bml0ICIiIgorICAgIGYuc2VlaygwKQorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSwgMik6CisgICAgICAgIGYud3JpdGUoc291cmNlW2k6aSsxXSkKKyAgICAgICAgZi5zZWVrKGkrMikKKworQHdpdGhfb3Blbl9tb2RlKCJ3YisiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgbW9kaWZ5X3NlZWtfZm9yd2FyZF9ibG9ja3dpc2UoZiwgc291cmNlKToKKyAgICAiIiIgYWx0ZXJuYXRlIHdyaXRlICYgc2VlayAxMDAwIHVuaXRzICIiIgorICAgIGYuc2VlaygwKQorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSwgMjAwMCk6CisgICAgICAgIGYud3JpdGUoc291cmNlW2k6aSsxMDAwXSkKKyAgICAgICAgZi5zZWVrKGkrMjAwMCkKKworIyBYWFggdGhlIDIgZm9sbG93aW5nIHRlc3RzIGRvbid0IHdvcmsgd2l0aCBweTNrJ3MgdGV4dCBJTworQHdpdGhfb3Blbl9tb2RlKCJ3YisiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgcmVhZF9tb2RpZnlfYnl0ZXdpc2UoZiwgc291cmNlKToKKyAgICAiIiIgYWx0ZXJuYXRlIHJlYWQgJiB3cml0ZSBvbmUgdW5pdCAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSksIDIpOgorICAgICAgICBmLnJlYWQoMSkKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaSsxOmkrMl0pCisKK0B3aXRoX29wZW5fbW9kZSgid2IrIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHJlYWRfbW9kaWZ5X2Jsb2Nrd2lzZShmLCBzb3VyY2UpOgorICAgICIiIiBhbHRlcm5hdGUgcmVhZCAmIHdyaXRlIDEwMDAgdW5pdHMgIiIiCisgICAgZi5zZWVrKDApCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpLCAyMDAwKToKKyAgICAgICAgZi5yZWFkKDEwMDApCisgICAgICAgIGYud3JpdGUoc291cmNlW2krMTAwMDppKzIwMDBdKQorCisKK3JlYWRfdGVzdHMgPSBbCisgICAgcmVhZF9ieXRld2lzZSwgcmVhZF9zbWFsbF9jaHVua3MsIHJlYWRfbGluZXMsIHJlYWRfYmlnX2NodW5rcywKKyAgICBOb25lLCByZWFkX3dob2xlX2ZpbGUsIE5vbmUsCisgICAgc2Vla19mb3J3YXJkX2J5dGV3aXNlLCBzZWVrX2ZvcndhcmRfYmxvY2t3aXNlLAorICAgIHJlYWRfc2Vla19ieXRld2lzZSwgcmVhZF9zZWVrX2Jsb2Nrd2lzZSwKK10KKword3JpdGVfdGVzdHMgPSBbCisgICAgd3JpdGVfYnl0ZXdpc2UsIHdyaXRlX3NtYWxsX2NodW5rcywgd3JpdGVfbWVkaXVtX2NodW5rcywgd3JpdGVfbGFyZ2VfY2h1bmtzLAorXQorCittb2RpZnlfdGVzdHMgPSBbCisgICAgbW9kaWZ5X2J5dGV3aXNlLCBtb2RpZnlfc21hbGxfY2h1bmtzLCBtb2RpZnlfbWVkaXVtX2NodW5rcywKKyAgICBOb25lLAorICAgIG1vZGlmeV9zZWVrX2ZvcndhcmRfYnl0ZXdpc2UsIG1vZGlmeV9zZWVrX2ZvcndhcmRfYmxvY2t3aXNlLAorICAgIHJlYWRfbW9kaWZ5X2J5dGV3aXNlLCByZWFkX21vZGlmeV9ibG9ja3dpc2UsCitdCisKK2RlZiBydW5fZHVyaW5nKGR1cmF0aW9uLCBmdW5jKToKKyAgICBfdCA9IHRpbWUudGltZQorICAgIG4gPSAwCisgICAgc3RhcnQgPSBvcy50aW1lcygpCisgICAgc3RhcnRfdGltZXN0YW1wID0gX3QoKQorICAgIHJlYWxfc3RhcnQgPSBzdGFydFs0XSBvciBzdGFydF90aW1lc3RhbXAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBmdW5jKCkKKyAgICAgICAgbiArPSAxCisgICAgICAgIGlmIF90KCkgLSBzdGFydF90aW1lc3RhbXAgPiBkdXJhdGlvbjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgZW5kID0gb3MudGltZXMoKQorICAgIHJlYWwgPSAoZW5kWzRdIGlmIHN0YXJ0WzRdIGVsc2UgdGltZS50aW1lKCkpIC0gcmVhbF9zdGFydAorICAgIHJldHVybiBuLCByZWFsLCBzdW0oZW5kWzA6Ml0pIC0gc3VtKHN0YXJ0WzA6Ml0pCisKK2RlZiB3YXJtX2NhY2hlKGZpbGVuYW1lKToKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgIGYucmVhZCgpCisKKworZGVmIHJ1bl9hbGxfdGVzdHMob3B0aW9ucyk6CisgICAgZGVmIHByaW50X2xhYmVsKGZpbGVuYW1lLCBmdW5jKToKKyAgICAgICAgbmFtZSA9IHJlLnNwbGl0KHInWy0uXScsIGZpbGVuYW1lKVswXQorICAgICAgICBvdXQud3JpdGUoCisgICAgICAgICAgICAoIlslc10gJXMuLi4gIgorICAgICAgICAgICAgICAgICUgKG5hbWUuY2VudGVyKDcpLCBmdW5jLl9fZG9jX18uc3RyaXAoKSkKKyAgICAgICAgICAgICkubGp1c3QoNTIpKQorICAgICAgICBvdXQuZmx1c2goKQorCisgICAgZGVmIHByaW50X3Jlc3VsdHMoc2l6ZSwgbiwgcmVhbCwgY3B1KToKKyAgICAgICAgYncgPSBuICogZmxvYXQoc2l6ZSkgLyAxMDI0ICoqIDIgLyByZWFsCisgICAgICAgIGJ3ID0gKCIlNGQgTUIvcyIgaWYgYncgPiAxMDAgZWxzZSAiJS4zZyBNQi9zIikgJSBidworICAgICAgICBvdXQud3JpdGUoYncucmp1c3QoMTIpICsgIlxuIikKKyAgICAgICAgaWYgY3B1IDwgMC45MCAqIHJlYWw6CisgICAgICAgICAgICBvdXQud3JpdGUoIiAgIHdhcm5pbmc6IHRlc3QgYWJvdmUgdXNlZCBvbmx5ICVkJSUgQ1BVLCAiCisgICAgICAgICAgICAgICAgInJlc3VsdCBtYXkgYmUgZmxhd2VkIVxuIiAlICgxMDAuMCAqIGNwdSAvIHJlYWwpKQorCisgICAgZGVmIHJ1bl9vbmVfdGVzdChuYW1lLCBzaXplLCBvcGVuX2Z1bmMsIHRlc3RfZnVuYywgKmFyZ3MpOgorICAgICAgICBtb2RlID0gdGVzdF9mdW5jLmZpbGVfb3Blbl9tb2RlCisgICAgICAgIHByaW50X2xhYmVsKG5hbWUsIHRlc3RfZnVuYykKKyAgICAgICAgaWYgInciIG5vdCBpbiBtb2RlIG9yICIrIiBpbiBtb2RlOgorICAgICAgICAgICAgd2FybV9jYWNoZShuYW1lKQorICAgICAgICB3aXRoIG9wZW5fZnVuYyhuYW1lKSBhcyBmOgorICAgICAgICAgICAgbiwgcmVhbCwgY3B1ID0gcnVuX2R1cmluZygxLjUsIGxhbWJkYTogdGVzdF9mdW5jKGYsICphcmdzKSkKKyAgICAgICAgcHJpbnRfcmVzdWx0cyhzaXplLCBuLCByZWFsLCBjcHUpCisKKyAgICBkZWYgcnVuX3Rlc3RfZmFtaWx5KHRlc3RzLCBtb2RlX2ZpbHRlciwgZmlsZXMsIG9wZW5fZnVuYywgKm1ha2VfYXJncyk6CisgICAgICAgIGZvciB0ZXN0X2Z1bmMgaW4gdGVzdHM6CisgICAgICAgICAgICBpZiB0ZXN0X2Z1bmMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbW9kZV9maWx0ZXIgaW4gdGVzdF9mdW5jLmZpbGVfb3Blbl9tb2RlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgcyBpbiB0ZXN0X2Z1bmMuZmlsZV9zaXplczoKKyAgICAgICAgICAgICAgICBuYW1lLCBzaXplID0gZmlsZXNbc2l6ZV9uYW1lc1tzXV0KKyAgICAgICAgICAgICAgICAjbmFtZSArPSBmaWxlX2V4dAorICAgICAgICAgICAgICAgIGFyZ3MgPSB0dXBsZShmKG5hbWUsIHNpemUpIGZvciBmIGluIG1ha2VfYXJncykKKyAgICAgICAgICAgICAgICBydW5fb25lX3Rlc3QobmFtZSwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgb3Blbl9mdW5jLCB0ZXN0X2Z1bmMsICphcmdzKQorCisgICAgc2l6ZV9uYW1lcyA9IHsKKyAgICAgICAgInNtYWxsIjogMCwKKyAgICAgICAgIm1lZGl1bSI6IDEsCisgICAgICAgICJsYXJnZSI6IDIsCisgICAgfQorCisgICAgYmluYXJ5X2ZpbGVzID0gbGlzdChnZXRfYmluYXJ5X2ZpbGVzKCkpCisgICAgdGV4dF9maWxlcyA9IGxpc3QoZ2V0X3RleHRfZmlsZXMoKSkKKyAgICBpZiAiYiIgaW4gb3B0aW9uczoKKyAgICAgICAgcHJpbnQoIkJpbmFyeSB1bml0ID0gb25lIGJ5dGUiKQorICAgIGlmICJ0IiBpbiBvcHRpb25zOgorICAgICAgICBwcmludCgiVGV4dCB1bml0ID0gb25lIGNoYXJhY3RlciAoJXMtZGVjb2RlZCkiICUgVEVYVF9FTkNPRElORykKKworICAgICMgQmluYXJ5IHJlYWRzCisgICAgaWYgImIiIGluIG9wdGlvbnMgYW5kICJyIiBpbiBvcHRpb25zOgorICAgICAgICBwcmludCgiXG4qKiBCaW5hcnkgaW5wdXQgKipcbiIpCisgICAgICAgIHJ1bl90ZXN0X2ZhbWlseShyZWFkX3Rlc3RzLCAidCIsIGJpbmFyeV9maWxlcywgbGFtYmRhIGZuOiBvcGVuKGZuLCAicmIiKSkKKworICAgICMgVGV4dCByZWFkcworICAgIGlmICJ0IiBpbiBvcHRpb25zIGFuZCAiciIgaW4gb3B0aW9uczoKKyAgICAgICAgcHJpbnQoIlxuKiogVGV4dCBpbnB1dCAqKlxuIikKKyAgICAgICAgcnVuX3Rlc3RfZmFtaWx5KHJlYWRfdGVzdHMsICJiIiwgdGV4dF9maWxlcywgbGFtYmRhIGZuOiB0ZXh0X29wZW4oZm4sICJyIikpCisKKyAgICAjIEJpbmFyeSB3cml0ZXMKKyAgICBpZiAiYiIgaW4gb3B0aW9ucyBhbmQgInciIGluIG9wdGlvbnM6CisgICAgICAgIHByaW50KCJcbioqIEJpbmFyeSBhcHBlbmQgKipcbiIpCisgICAgICAgIGRlZiBtYWtlX3Rlc3Rfc291cmNlKG5hbWUsIHNpemUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKG5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisgICAgICAgIHJ1bl90ZXN0X2ZhbWlseSh3cml0ZV90ZXN0cywgInQiLCBiaW5hcnlfZmlsZXMsCisgICAgICAgICAgICBsYW1iZGEgZm46IG9wZW4ob3MuZGV2bnVsbCwgIndiIiksIG1ha2VfdGVzdF9zb3VyY2UpCisKKyAgICAjIFRleHQgd3JpdGVzCisgICAgaWYgInQiIGluIG9wdGlvbnMgYW5kICJ3IiBpbiBvcHRpb25zOgorICAgICAgICBwcmludCgiXG4qKiBUZXh0IGFwcGVuZCAqKlxuIikKKyAgICAgICAgZGVmIG1ha2VfdGVzdF9zb3VyY2UobmFtZSwgc2l6ZSk6CisgICAgICAgICAgICB3aXRoIHRleHRfb3BlbihuYW1lLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisgICAgICAgIHJ1bl90ZXN0X2ZhbWlseSh3cml0ZV90ZXN0cywgImIiLCB0ZXh0X2ZpbGVzLAorICAgICAgICAgICAgbGFtYmRhIGZuOiB0ZXh0X29wZW4ob3MuZGV2bnVsbCwgInciKSwgbWFrZV90ZXN0X3NvdXJjZSkKKworICAgICMgQmluYXJ5IG92ZXJ3cml0ZXMKKyAgICBpZiAiYiIgaW4gb3B0aW9ucyBhbmQgInciIGluIG9wdGlvbnM6CisgICAgICAgIHByaW50KCJcbioqIEJpbmFyeSBvdmVyd3JpdGUgKipcbiIpCisgICAgICAgIGRlZiBtYWtlX3Rlc3Rfc291cmNlKG5hbWUsIHNpemUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKG5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisgICAgICAgIHJ1bl90ZXN0X2ZhbWlseShtb2RpZnlfdGVzdHMsICJ0IiwgYmluYXJ5X2ZpbGVzLAorICAgICAgICAgICAgbGFtYmRhIGZuOiBvcGVuKGZuLCAicitiIiksIG1ha2VfdGVzdF9zb3VyY2UpCisKKyAgICAjIFRleHQgb3ZlcndyaXRlcworICAgIGlmICJ0IiBpbiBvcHRpb25zIGFuZCAidyIgaW4gb3B0aW9uczoKKyAgICAgICAgcHJpbnQoIlxuKiogVGV4dCBvdmVyd3JpdGUgKipcbiIpCisgICAgICAgIGRlZiBtYWtlX3Rlc3Rfc291cmNlKG5hbWUsIHNpemUpOgorICAgICAgICAgICAgd2l0aCB0ZXh0X29wZW4obmFtZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorICAgICAgICBydW5fdGVzdF9mYW1pbHkobW9kaWZ5X3Rlc3RzLCAiYiIsIHRleHRfZmlsZXMsCisgICAgICAgICAgICBsYW1iZGEgZm46IG9wZW4oZm4sICJyKyIpLCBtYWtlX3Rlc3Rfc291cmNlKQorCisKK2RlZiBwcmVwYXJlX2ZpbGVzKCk6CisgICAgcHJpbnQoIlByZXBhcmluZyBmaWxlcy4uLiIpCisgICAgIyBCaW5hcnkgZmlsZXMKKyAgICBmb3IgbmFtZSwgc2l6ZSBpbiBnZXRfYmluYXJ5X2ZpbGVzKCk6CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG5hbWUpIGFuZCBvcy5wYXRoLmdldHNpemUobmFtZSkgPT0gc2l6ZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHdpdGggb3BlbihuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShvcy51cmFuZG9tKHNpemUpKQorICAgICMgVGV4dCBmaWxlcworICAgIGNodW5rID0gW10KKyAgICB3aXRoIHRleHRfb3BlbihfX2ZpbGVfXywgInJVIiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjIDxpb2JlbmNoIHRleHQgY2h1bmsgbWFya2VyPiIpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAgICAgIkNvdWxkbid0IGZpbmQgY2h1bmsgbWFya2VyIGluICVzICEiICUgX19maWxlX18pCisgICAgICAgIGlmIE5FV0xJTkVTID09ICJhbGwiOgorICAgICAgICAgICAgaXQgPSBpdGVydG9vbHMuY3ljbGUoWyJcbiIsICJcciIsICJcclxuIl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpdCA9IGl0ZXJ0b29scy5yZXBlYXQoCisgICAgICAgICAgICAgICAgeyJjciI6ICJcciIsICJsZiI6ICJcbiIsICJjcmxmIjogIlxyXG4ifVtORVdMSU5FU10pCisgICAgICAgIGNodW5rID0gIiIuam9pbihsaW5lLnJlcGxhY2UoIlxuIiwgbmV4dChpdCkpIGZvciBsaW5lIGluIGYpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY2h1bmssIGJ5dGVzKToKKyAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZGVjb2RlKCd1dGY4JykKKyAgICAgICAgY2h1bmsgPSBjaHVuay5lbmNvZGUoVEVYVF9FTkNPRElORykKKyAgICBmb3IgbmFtZSwgc2l6ZSBpbiBnZXRfdGV4dF9maWxlcygpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShuYW1lKSBhbmQgb3MucGF0aC5nZXRzaXplKG5hbWUpID09IHNpemU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBoZWFkID0gY2h1bmsgKiAoc2l6ZSAvLyBsZW4oY2h1bmspKQorICAgICAgICB0YWlsID0gY2h1bmtbOnNpemUgJSBsZW4oY2h1bmspXQorICAgICAgICAjIEFkanVzdCB0YWlsIHRvIGVuZCBvbiBhIGNoYXJhY3RlciBib3VuZGFyeQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRhaWwuZGVjb2RlKFRFWFRfRU5DT0RJTkcpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgdGFpbCA9IHRhaWxbOi0xXQorICAgICAgICB3aXRoIG9wZW4obmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoaGVhZCkKKyAgICAgICAgICAgIGYud3JpdGUodGFpbCkKKworZGVmIG1haW4oKToKKyAgICBnbG9iYWwgVEVYVF9FTkNPRElORywgTkVXTElORVMKKworICAgIHVzYWdlID0gInVzYWdlOiAlcHJvZyBbLWh8LS1oZWxwXSBbb3B0aW9uc10iCisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYiIsICItLWJpbmFyeSIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iYmluYXJ5IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gYmluYXJ5IEkvTyB0ZXN0cyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdGV4dCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0idGV4dCIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icnVuIHRleHQgSS9PIHRlc3RzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXIiLCAiLS1yZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJyZWFkIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gcmVhZCB0ZXN0cyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi13IiwgIi0td3JpdGUiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9IndyaXRlIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gd3JpdGUgJiBtb2RpZnkgdGVzdHMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItRSIsICItLWVuY29kaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0iZW5jb2RpbmciLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZW5jb2RpbmcgZm9yIHRleHQgdGVzdHMgKGRlZmF1bHQ6ICVzKSIgJSBURVhUX0VOQ09ESU5HKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItTiIsICItLW5ld2xpbmVzIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0ibmV3bGluZXMiLCBkZWZhdWx0PSdsZicsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0ibGluZSBlbmRpbmdzIGZvciB0ZXh0IHRlc3RzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIob25lIG9mOiB7bGYgKGRlZmF1bHQpLCBjciwgY3JsZiwgYWxsfSkiKQorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYgYXJnczoKKyAgICAgICAgcGFyc2VyLmVycm9yKCJ1bmV4cGVjdGVkIGFyZ3VtZW50cyIpCisgICAgTkVXTElORVMgPSBvcHRpb25zLm5ld2xpbmVzLmxvd2VyKCkKKyAgICBpZiBORVdMSU5FUyBub3QgaW4gKCdsZicsICdjcicsICdjcmxmJywgJ2FsbCcpOgorICAgICAgICBwYXJzZXIuZXJyb3IoImludmFsaWQgJ25ld2xpbmVzJyBvcHRpb246ICVyIiAlIE5FV0xJTkVTKQorCisgICAgdGVzdF9vcHRpb25zID0gIiIKKyAgICBpZiBvcHRpb25zLnJlYWQ6CisgICAgICAgIHRlc3Rfb3B0aW9ucyArPSAiciIKKyAgICBpZiBvcHRpb25zLndyaXRlOgorICAgICAgICB0ZXN0X29wdGlvbnMgKz0gInciCisgICAgZWxpZiBub3Qgb3B0aW9ucy5yZWFkOgorICAgICAgICB0ZXN0X29wdGlvbnMgKz0gInJ3IgorICAgIGlmIG9wdGlvbnMudGV4dDoKKyAgICAgICAgdGVzdF9vcHRpb25zICs9ICJ0IgorICAgIGlmIG9wdGlvbnMuYmluYXJ5OgorICAgICAgICB0ZXN0X29wdGlvbnMgKz0gImIiCisgICAgZWxpZiBub3Qgb3B0aW9ucy50ZXh0OgorICAgICAgICB0ZXN0X29wdGlvbnMgKz0gInRiIgorCisgICAgaWYgb3B0aW9ucy5lbmNvZGluZzoKKyAgICAgICAgVEVYVF9FTkNPRElORyA9IG9wdGlvbnMuZW5jb2RpbmcKKworICAgIHByZXBhcmVfZmlsZXMoKQorICAgIHJ1bl9hbGxfdGVzdHModGVzdF9vcHRpb25zKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQorCisKKyMgLS0gVGhpcyBwYXJ0IHRvIGV4ZXJjaXNlIHRleHQgcmVhZGluZy4gRG9uJ3QgY2hhbmdlIGFueXRoaW5nISAtLQorIyA8aW9iZW5jaCB0ZXh0IGNodW5rIG1hcmtlcj4KKworIiIiCisxLgorR8OhdHRpciBhbGxhciwKK8Ohw7ByIGdhbmdpIGZyYW0sCit1bSBza2/DsGFzayBza3lsaSwKK3VtIHNreWdnbmFzdCBza3lsaSwKK8O+dsOtIGF0IMOzdsOtc3QgZXIgYXQgdml0YSwKK2h2YXIgw7N2aW5pcgorc2l0amEgw6EgZmxldGkgZnlyaXIuCisKKzIuCitHZWZlbmRyIGhlaWxpciEKK0dlc3RyIGVyIGlubiBrb21pbm4sCitodmFyIHNrYWwgc2l0amEgc2rDoT8KK01qw7ZrIGVyIGJyw6HDsHIsCitzw6EgZXIgw6EgYnLDtm5kdW0gc2thbAorc8OtbnMgb2YgZnJlaXN0YSBmcmFtYS4KKworMy4KK0VsZHMgZXIgw77DtnJmLAorw75laW1zIGlubiBlciBrb21pbm4KK29rIMOhIGtuw6kga2FsaW5uOworbWF0YXIgb2sgdsOhw7BhCitlciBtYW5uaSDDvsO2cmYsCivDvmVpbSBlciBoZWZyIHVtIGZqYWxsIGZhcml0LgorCis0LgorVmF0bnMgZXIgw77DtnJmLAorw75laW0gZXIgdGlsIHZlcsOwYXIga2VtciwKK8O+ZXJydSBvayDDvmrDs8OwbGHDsGFyLAorZ8Ozw7BzIG9mIMOmw7BpcywKK2VmIHPDqXIgZ2V0YSBtw6Z0dGksCitvcsOwcyBvayBlbmRyw77Dtmd1LgorCis1LgorVml0cyBlciDDvsO2cmYsCivDvmVpbSBlciB2w63DsGEgcmF0YXI7Citkw6ZsdCBlciBoZWltYSBodmF0OworYXQgYXVnYWJyYWfDsGkgdmVyw7ByLAorc8OhIGVyIGVra2kga2Fubgorb2sgbWXDsCBzbm90cnVtIHNpdHIuCisKKzYuCitBdCBoeWdnamFuZGkgc2lubmkKK3NreWxpLXQgbWHDsHIgaHLDpnNpbm4gdmVyYSwKK2hlbGRyIGfDpnRpbm4gYXQgZ2XDsGk7CivDvsOhIGVyIGhvcnNrciBvayDDvsO2Z3VsbAora2VtciBoZWltaXNnYXLDsGEgdGlsLAorc2phbGRhbiB2ZXLDsHIgdsOtdGkgdsO2cnVtLAorw752w60gYXQgw7Nicmlnw7ByYSB2aW4KK2bDpnIgbWHDsHIgYWxkcmVnaQorZW4gbWFubnZpdCBtaWtpdC4KKworNy4KK0lubiB2YXJpIGdlc3RyLAorZXIgdGlsIHZlcsOwYXIga2VtciwKK8O+dW5udSBobGrDs8OwaSDDvmVnaXIsCitleXJ1bSBobMO9w7BpciwKK2VuIGF1Z3VtIHNrb8OwYXI7CitzdsOhIG7DvXNpc2sgZnLDs8OwcmEgaHZlcnIgZnlyaXIuCisKKzguCitIaW5uIGVyIHPDpmxsLAorZXIgc8OpciBvZiBnZXRyCitsb2Ygb2sgbMOta25zdGFmaTsKK8OzZMOmbGxhIGVyIHZpw7Agw75hdCwKK2VyIG1hw7ByIGVpZ2Egc2thbAorYW5uYXJzIGJyasOzc3R1bSDDrS4KKyIiIgorCisiIiIKK0MnZXN0IHJldmVuaXIgdGFyZCwgamUgbGUgc2Vucywgc3VyIHVuIHN1amV0IHRyb3AgcmViYXR0dSBldCBkw6lqw6AgcHJlc3F1ZSBvdWJsacOpLiBNb24gw6l0YXQsIHF1aSBuZSBtZSBwZXJtZXQgcGx1cyBhdWN1biB0cmF2YWlsIHN1aXZpLCBtb24gYXZlcnNpb24gcG91ciBsZSBnZW5yZSBwb2zDqW1pcXVlLCBvbnQgY2F1c8OpIG1hIGxlbnRldXIgw6Agw6ljcmlyZSBldCBtYSByw6lwdWduYW5jZSDDoCBwdWJsaWVyLiBKJ2F1cmFpcyBtw6ptZSB0b3V0IMOgIGZhaXQgc3VwcHJpbcOpIGNlcyBMZXR0cmVzLCBvdSBwbHV0w7R0IGplIGxpZSBsZXMgYXVyYWlzIHBvaW50IMOpY3JpdGVzLCBzJ2lsIG4nZcO7dCDDqXTDqSBxdWVzdGlvbiBxdWUgZGUgbW9pIDogTWFpcyBtYSBwYXRyaWUgbmUgbSdlc3QgcGFzIHRlbGxlbWVudCBkZXZlbnVlIMOpdHJhbmfDqHJlIHF1ZSBqZSBwdWlzc2Ugdm9pciB0cmFucXVpbGxlbWVudCBvcHByaW1lciBzZXMgY2l0b3llbnMsIHN1cnRvdXQgbG9yc3F1J2lscyBuJ29udCBjb21wcm9taXMgbGV1cnMgZHJvaXRzIHF1J2VuIGTDqWZlbmRhbnQgbWEgY2F1c2UuIEplIHNlcmFpcyBsZSBkZXJuaWVyIGRlcyBob21tZXMgc2kgZGFucyB1bmUgdGVsbGUgb2NjYXNpb24gaifDqWNvdXRhaXMgdW4gc2VudGltZW50IHF1aSBuJ2VzdCBwbHVzIG5pIGRvdWNldXIgbmkgcGF0aWVuY2UsIG1haXMgZmFpYmxlc3NlIGV0IGzDomNoZXTDqSwgZGFucyBjZWx1aSBxdSdpbCBlbXDDqmNoZSBkZSByZW1wbGlyIHNvbiBkZXZvaXIuCitSaWVuIGRlIG1vaW5zIGltcG9ydGFudCBwb3VyIGxlIHB1YmxpYywgaidlbiBjb252aWVucywgcXVlIGxhIG1hdGnDqHJlIGRlIGNlcyBsZXR0cmVzLiBMYSBjb25zdGl0dXRpb24gZCd1bmUgcGV0aXRlIFLDqXB1YmxpcXVlLCBsZSBzb3J0IGQndW4gcGV0aXQgcGFydGljdWxpZXIsIGwnZXhwb3PDqSBkZSBxdWVscXVlcyBpbmp1c3RpY2VzLCBsYSByw6lmdXRhdGlvbiBkZSBxdWVscXVlcyBzb3BoaXNtZXMgOyB0b3V0IGNlbGEgbidhIHJpZW4gZW4gc29pIGQnYXNzZXogY29uc2lkw6lyYWJsZSBwb3VyIG3DqXJpdGVyIGJlYXVjb3VwIGRlIGxlY3RldXJzIDogbWFpcyBzaSBtZXMgc3VqZXRzIHNvbnQgcGV0aXRzIG1lcyBvYmpldHMgc29udCBncmFuZHMsIGV0IGRpZ25lcyBkZSBsJ2F0dGVudGlvbiBkZSB0b3V0IGhvbm7DqnRlIGhvbW1lLiBMYWlzc29ucyBHZW7DqHZlIMOgIHNhIHBsYWNlLCBldCBSb3Vzc2VhdSBkYW5zIHNhIGTDqXByZXNzaW9uIDsgbWFpcyBsYSByZWxpZ2lvbiwgbWFpcyBsYSBsaWJlcnTDqSwgbGEganVzdGljZSAhIHZvaWzDoCwgcXVpIHF1ZSB2b3VzIHNveWV6LCBjZSBxdWkgbidlc3QgcGFzIGF1LWRlc3NvdXMgZGUgdm91cy4KK1F1J29uIG5lIGNoZXJjaGUgcGFzIG3Dqm1lIGljaSBkYW5zIGxlIHN0eWxlIGxlIGTDqWRvbW1hZ2VtZW50IGRlIGwnYXJpZGl0w6kgZGUgbGEgbWF0acOocmUuIENldXggcXVlIHF1ZWxxdWVzIHRyYWl0cyBoZXVyZXV4IGRlIG1hIHBsdW1lIG9udCBzaSBmb3J0IGlycml0w6lzIHRyb3V2ZXJvbnQgZGUgcXVvaSBzJ2FwYWlzZXIgZGFucyBjZXMgbGV0dHJlcywgTCdob25uZXVyIGRlIGTDqWZlbmRyZSB1biBvcHByaW3DqSBlw7t0IGVuZmxhbW3DqSBtb24gY29ldXIgc2kgaidhdmFpcyBwYXJsw6kgcG91ciB1biBhdXRyZS4gUsOpZHVpdCBhdSB0cmlzdGUgZW1wbG9pIGRlIG1lIGTDqWZlbmRyZSBtb2ktbcOqbWUsIGonYWkgZMO7IG1lIGJvcm5lciDDoCByYWlzb25uZXIgOyBtJ8OpY2hhdWZmZXIgZcO7dCDDqXTDqSBtJ2F2aWxpci4gSidhdXJhaSBkb25jIHRyb3V2w6kgZ3LDomNlIGVuIGNlIHBvaW50IGRldmFudCBjZXV4IHF1aSBzJ2ltYWdpbmVudCBxdSdpbCBlc3QgZXNzZW50aWVsIMOgIGxhIHbDqXJpdMOpIGQnw6p0cmUgZGl0ZSBmcm9pZGVtZW50IDsgb3BpbmlvbiBxdWUgcG91cnRhbnQgaidhaSBwZWluZSDDoCBjb21wcmVuZHJlLiBMb3JzcXUndW5lIHZpdmUgcGVyc3Vhc2lvbiBub3VzIGFuaW1lLCBsZSBtb3llbiBkJ2VtcGxveWVyIHVuIGxhbmdhZ2UgZ2xhY8OpID8gUXVhbmQgQXJjaGltw6hkZSB0b3V0IHRyYW5zcG9ydMOpIGNvdXJhaXQgbnUgZGFucyBsZXMgcnVlcyBkZSBTeXJhY3VzZSwgZW4gYXZhaXQtaWwgbW9pbnMgdHJvdXbDqSBsYSB2w6lyaXTDqSBwYXJjZSBxdSdpbCBzZSBwYXNzaW9ubmFpdCBwb3VyIGVsbGUgPyBUb3V0IGF1IGNvbnRyYWlyZSwgY2VsdWkgcXVpIGxhIHNlbnQgbmUgcGV1dCBzJ2Fic3RlbmlyIGRlIGwnYWRvcmVyIDsgY2VsdWkgcXVpIGRlbWV1cmUgZnJvaWQgbmUgbCdhIHBhcyB2dWUuCitRdW9pIHF1J2lsIGVuIHNvaXQsIGplIHByaWUgbGVzIGxlY3RldXJzIGRlIHZvdWxvaXIgYmllbiBtZXR0cmUgw6AgcGFydCBtb24gYmVhdSBzdHlsZSwgZXQgZCdleGFtaW5lciBzZXVsZW1lbnQgc2kgamUgcmFpc29ubmUgYmllbiBvdSBtYWwgOyBjYXIgZW5maW4sIGRlIGNlbGEgc2V1bCBxdSd1biBhdXRldXIgcydleHByaW1lIGVuIGJvbnMgdGVybWVzLCBqZSBuZSB2b2lzIHBhcyBjb21tZW50IGlsIHBldXQgcydlbnN1aXZyZSBxdWUgY2V0IGF1dGV1ciBuZSBzYWl0IGNlIHF1J2lsIGRpdC4KKyIiIgpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL0VYQU1QTEUucHkgYi9Ub29scy9tb2R1bGF0b3IvRVhBTVBMRS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM2YTVhNy4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvRVhBTVBMRS5weQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSMKLSMgRXhhbXBsZSBpbnB1dCBmaWxlIGZvciBtb2R1bGF0b3IgaWYgeW91IGRvbid0IGhhdmUgdGsuCi0jCi0jIFlvdSBtYXkgYWxzbyBoYXZlIHRvIHN0cmlwIHNvbWUgaW1wb3J0cyBvdXQgb2YgbW9kdWxhdG9yIHRvIG1ha2UKLSMgaXQgd29yay4KLQotaW1wb3J0IGdlbm1vZHVsZQotCi0jCi0jIEdlbmVyYXRlIGNvZGUgZm9yIGEgc2ltcGxlIG9iamVjdCB3aXRoIGEgbWV0aG9kIGNhbGxlZCBzYW1wbGUKLQotbyA9IGdlbm1vZHVsZS5vYmplY3QoKQotby5uYW1lID0gJ3NpbXBsZSBvYmplY3QnCi1vLmFiYnJldiA9ICdzaW1wJwotby5tZXRob2RsaXN0ID0gWydzYW1wbGUnXQotby5mdW5jbGlzdCA9IFsnbmV3J10KLQotIwotIyBHZW5lcmF0ZSBjb2RlIGZvciBhbiBvYmplY3QgdGhhdCBsb29rcyBudW1iZXJpc2gKLSMKLW8yID0gZ2VubW9kdWxlLm9iamVjdCgpCi1vMi5uYW1lID0gJ251bWJlci1saWtlIG9iamVjdCcKLW8yLmFiYnJldiA9ICdubCcKLW8yLnR5cGVsaXN0ID0gWyd0cF9hc19udW1iZXInXQotbzIuZnVuY2xpc3QgPSBbJ25ldycsICd0cF9yZXByJywgJ3RwX2NvbXBhcmUnXQotCi0jCi0jIEdlbmVyYXRlIGNvZGUgZm9yIGEgbWV0aG9kIHdpdGggYSBmdWxsIGNvbXBsZW1lbnQgb2YgZnVuY3Rpb25zLAotIyBzb21lIG1ldGhvZHMsIGFjY2Vzc2libGUgYXMgc2VxdWVuY2UgYW5kIGFsbG93aW5nIHN0cnVjdG1lbWJlci5jIHR5cGUKLSMgc3RydWN0dXJlIGFjY2VzcyBhcyB3ZWxsLgotIwotbzMgPSBnZW5tb2R1bGUub2JqZWN0KCkKLW8zLm5hbWUgPSAnb3Zlci10aGUtdG9wIG9iamVjdCcKLW8zLmFiYnJldiA9ICdvdCcKLW8zLm1ldGhvZGxpc3QgPSBbJ21ldGhvZDEnLCAnbWV0aG9kMiddCi1vMy5mdW5jbGlzdCA9IFsnbmV3JywgJ3RwX2RlYWxsb2MnLCAndHBfcHJpbnQnLCAndHBfZ2V0YXR0cicsICd0cF9zZXRhdHRyJywKLSAgICAgICAgICAgICd0cF9jb21wYXJlJywgJ3RwX3JlcHInLCAndHBfaGFzaCddCi1vMy50eXBlbGlzdCA9IFsndHBfYXNfc2VxdWVuY2UnLCAnc3RydWN0dXJlJ10KLQotIwotIyBOb3cgZ2VuZXJhdGUgY29kZSBmb3IgYSBtb2R1bGUgdGhhdCBpbmNvcnBvcmF0ZXMgdGhlc2Ugb2JqZWN0IHR5cGVzLgotIyBBbHNvIGFkZCB0aGUgYm9pbGVycGxhdGVzIGZvciBmdW5jdGlvbnMgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiBlYWNoCi0jIHR5cGUuCi0jCi1tID0gZ2VubW9kdWxlLm1vZHVsZSgpCi1tLm5hbWUgPSAnc2FtcGxlJwotbS5hYmJyZXYgPSAnc2FtcGxlJwotbS5tZXRob2RsaXN0ID0gWyduZXdzaW1wbGUnLCAnbmV3bnVtYmVyaXNoJywgJ25ld290dCddCi1tLm9iamVjdHMgPSBbbywgbzIsIG8zXQotCi1mcCA9IG9wZW4oJ0VYQU1QTEVtb2R1bGUuYycsICd3JykKLWdlbm1vZHVsZS53cml0ZShmcCwgbSkKLWZwLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9SRUFETUUgYi9Ub29scy9tb2R1bGF0b3IvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWU4NmI0Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1UaGlzIGlzIHJlbGVhc2UgMS4yIG9mIG1vZHVsYXRvciwgYSBnZW5lcmF0b3Igb2YgYm9pbGVycGxhdGUgY29kZSBmb3IKLW1vZHVsZXMgdG8gYmUgd3JpdHRlbiBpbiBDLgotCi1EaWZmZXJlbmNlIGJldHdlZW4gMS4yIGFuZCAxLjE6IF9fZG9jX18gdGVtcGxhdGVzIGFyZSBub3cgZ2VuZXJhdGVkCi0odGhhbmtzIHRvIEppbSBGdWx0b24pLgotCi1EaWZmZXJlbmNlIGJldHdlZW4gMS4xIGFuZCAxLjA6IHRoZSB0ZW1wbGF0ZXMgbm93IHVzZSAibmV3LXN0eWxlIgotbmFtaW5nIGNvbnZlbnRpb25zLiBNYW55IHRoYW5rcyB0byBDaGFrIFRhbiA8dGFuQGVlLnJvY2hlc3Rlci5lZHU+IGZvcgotc3VwcGx5aW5nIHRoZW0uCi0KLVVzYWdlIHdoZW4geW91IGhhdmUgdGsgaXMgKnJlYWxseSogc2ltcGxlOiBzdGFydCBtb2R1bGF0b3IsIGZpbGwgb3V0Ci10aGUgZm9ybXMgc3BlY2lmeWluZyBhbGwgdGhlIG9iamVjdHMgYW5kIG1ldGhvZHMsIHRlbGwgbW9kdWxhdG9yCi13aGV0aGVyIG9iamVjdHMgc2hvdWxkIGFsc28gYmUgYWNjZXNzaWJsZSBhcyBzZXF1ZW5jZXMsIGV0YyBhbmQgcHJlc3MKLSdnZW5lcmF0ZSBjb2RlJy4gSXQgd2lsbCB3cml0ZSBhIGNvbXBsZXRlIHNrZWxldG9uIG1vZHVsZSBmb3IgeW91LgotCi1Vc2FnZSB3aGVuIHlvdSBkb24ndCBoYXZlIHRrIGlzIHNsaWdodGx5IG1vcmUgZGlmZmljdWx0LiBMb29rIGF0Ci1FWEFNUExFLnB5IGZvciBzb21lIGRldGFpbHMgKHRvIHJ1biwgdXNlICJweXRob24gRVhBTVBMRS5weSIpLiAgRG9uJ3QKLWJvdGhlciB3aXRoIEVYQU1QTEUucHkgaWYgeW91IGhhdmUgVGtpbnRlciEhIQotCi1PaCB5ZWFoOiB5b3UnbGwgcHJvYmFibHkgd2FudCB0byBjaGFuZ2UgVGVtcGxhdGVzL2NvcHlyaWdodCwgb3IgYWxsCi15b3VyIGNvZGUgZW5kcyB1cCBhcyBiZWluZyBjb3B5cmlnaHRlZCB0byBDV0k6LSkKLQotTGV0IG1lIGtub3cgd2hhdCB5b3UgdGhpbmssCi0JCQkJSmFjayBKYW5zZW4sIGphY2tAY3dpLm5sCi0JCQkJCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvU2Nyb2xsZWRMaXN0Ym94LnB5IGIvVG9vbHMvbW9kdWxhdG9yL1Njcm9sbGVkTGlzdGJveC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJiNTczOC4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvU2Nyb2xsZWRMaXN0Ym94LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyBBIFNjcm9sbGVkTGlzdCB3aWRnZXQgZmVlbHMgbGlrZSBhIGxpc3Qgd2lkZ2V0IGJ1dCBhbHNvIGhhcyBhCi0jIHZlcnRpY2FsIHNjcm9sbCBiYXIgb24gaXRzIHJpZ2h0LiAgKExhdGVyLCBvcHRpb25zIG1heSBiZSBhZGRlZCB0bwotIyBhZGQgYSBob3Jpem9udGFsIGJhciBhcyB3ZWxsLCB0byBtYWtlIHRoZSBiYXJzIGRpc2FwcGVhcgotIyBhdXRvbWF0aWNhbGx5IHdoZW4gbm90IG5lZWRlZCwgdG8gbW92ZSB0aGVtIHRvIHRoZSBvdGhlciBzaWRlIG9mIHRoZQotIyB3aW5kb3csIGV0Yy4pCi0jCi0jIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcGFzc2VkIHRvIHRoZSBMaXN0IHdpZGdldC4KLSMgQSBGcmFtZSB3aWRnZXQgaXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgbWFzdGVyIGFuZCB0aGUgbGlzdCwgdG8gaG9sZAotIyB0aGUgU2Nyb2xsYmFyIHdpZGdldC4KLSMgTW9zdCBtZXRob2RzIGNhbGxzIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgTGlzdCB3aWRnZXQ7IFBhY2sgbWV0aG9kcwotIyBhcmUgcmVkaXJlY3RlZCB0byB0aGUgRnJhbWUgd2lkZ2V0IGhvd2V2ZXIuCi0KLWZyb20gVGtpbnRlciBpbXBvcnQgKgotZnJvbSBUa2ludGVyIGltcG9ydCBfY25mbWVyZ2UKLQotY2xhc3MgU2Nyb2xsZWRMaXN0Ym94KExpc3Rib3gpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9KToKLSAgICAgICAgY25mID0gX2NuZm1lcmdlKGNuZikKLSAgICAgICAgZmNuZiA9IHt9Ci0gICAgICAgIHZjbmYgPSB7J25hbWUnOiAndmJhcicsCi0gICAgICAgICAgICBQYWNrOiB7J3NpZGUnOiAncmlnaHQnLCAnZmlsbCc6ICd5J30sfQotICAgICAgICBmb3IgayBpbiBjbmYua2V5cygpOgotICAgICAgICAgICAgaWYgdHlwZShrKSA9PSBDbGFzc1R5cGUgb3IgayA9PSAnbmFtZSc6Ci0gICAgICAgICAgICAgICAgZmNuZltrXSA9IGNuZltrXQotICAgICAgICAgICAgICAgIGRlbCBjbmZba10KLSAgICAgICAgc2VsZi5mcmFtZSA9IEZyYW1lKG1hc3RlciwgZmNuZikKLSAgICAgICAgc2VsZi52YmFyID0gU2Nyb2xsYmFyKHNlbGYuZnJhbWUsIHZjbmYpCi0gICAgICAgIGNuZltQYWNrXSA9IHsnc2lkZSc6ICdsZWZ0JywgJ2ZpbGwnOiAnYm90aCcsICdleHBhbmQnOiAneWVzJ30KLSAgICAgICAgY25mWyduYW1lJ10gPSAnbGlzdCcKLSAgICAgICAgTGlzdGJveC5fX2luaXRfXyhzZWxmLCBzZWxmLmZyYW1lLCBjbmYpCi0gICAgICAgIHNlbGZbJ3lzY3JvbGxjb21tYW5kJ10gPSAoc2VsZi52YmFyLCAnc2V0JykKLSAgICAgICAgc2VsZi52YmFyWydjb21tYW5kJ10gPSAoc2VsZiwgJ3l2aWV3JykKLQotICAgICAgICAjIENvcHkgUGFjayBtZXRob2RzIG9mIHNlbGYuZnJhbWUgLS0gaGFjayEKLSAgICAgICAgZm9yIG0gaW4gUGFjay5fX2RpY3RfXy5rZXlzKCk6Ci0gICAgICAgICAgICBpZiBtWzBdICE9ICdfJyBhbmQgbSAhPSAnY29uZmlnJzoKLSAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG0sIGdldGF0dHIoc2VsZi5mcmFtZSwgbSkpCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL21vZHVsZV9oZWFkIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9tb2R1bGVfaGVhZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUwMDEwOS4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL21vZHVsZV9oZWFkCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotc3RhdGljIFB5T2JqZWN0ICpFcnJvck9iamVjdDsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvbW9kdWxlX21ldGhvZCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvbW9kdWxlX21ldGhvZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0OGIxZi4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL21vZHVsZV9tZXRob2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0KLXN0YXRpYyBjaGFyICRhYmJyZXYkXyRtZXRob2QkX19kb2NfX1tdID0KLSIiCi07Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF8kbWV0aG9kJChQeU9iamVjdCAqc2VsZiAvKiBOb3QgdXNlZCAqLywgUHlPYmplY3QgKmFyZ3MpCi17Ci0KLQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiIpKQotCQlyZXR1cm4gTlVMTDsKLQlQeV9JTkNSRUYoUHlfTm9uZSk7Ci0JcmV0dXJuIFB5X05vbmU7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL21vZHVsZV90YWlsIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9tb2R1bGVfdGFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTljYzUwYi4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL21vZHVsZV90YWlsCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotCi0vKiBMaXN0IG9mIG1ldGhvZHMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlICovCi0KLXN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgJGFiYnJldiRfbWV0aG9kc1tdID0gewotCSRtZXRob2RsaXN0JAotCXtOVUxMLAkgKFB5Q0Z1bmN0aW9uKU5VTEwsIDAsIE5VTEx9CQkvKiBzZW50aW5lbCAqLwotfTsKLQotCi0vKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZSAoKm11c3QqIGJlIGNhbGxlZCBpbml0JG5hbWUkKSAqLwotCi1zdGF0aWMgY2hhciAkbmFtZSRfbW9kdWxlX2RvY3VtZW50YXRpb25bXSA9IAotIiIKLTsKLQotdm9pZAotaW5pdCRuYW1lJCgpCi17Ci0JUHlPYmplY3QgKm0sICpkOwotCi0JLyogQ3JlYXRlIHRoZSBtb2R1bGUgYW5kIGFkZCB0aGUgZnVuY3Rpb25zICovCi0JbSA9IFB5X0luaXRNb2R1bGU0KCIkbmFtZSQiLCAkYWJicmV2JF9tZXRob2RzLAotCQkkbmFtZSRfbW9kdWxlX2RvY3VtZW50YXRpb24sCi0JCShQeU9iamVjdCopTlVMTCxQWVRIT05fQVBJX1ZFUlNJT04pOwotCi0JLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KLQlkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLQlFcnJvck9iamVjdCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIiRuYW1lJC5lcnJvciIpOwotCVB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJlcnJvciIsIEVycm9yT2JqZWN0KTsKLQotCS8qIFhYWFggQWRkIGNvbnN0YW50cyBoZXJlICovCi0JCi0JLyogQ2hlY2sgZm9yIGVycm9ycyAqLwotCWlmIChQeUVycl9PY2N1cnJlZCgpKQotCQlQeV9GYXRhbEVycm9yKCJjYW4ndCBpbml0aWFsaXplIG1vZHVsZSAkbmFtZSQiKTsKLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfaGVhZCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X2hlYWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZDFmNmEuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfaGVhZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLQotLyogRGVjbGFyYXRpb25zIGZvciBvYmplY3RzIG9mIHR5cGUgJG5hbWUkICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlQeU9iamVjdF9IRUFECi0JLyogWFhYWCBBZGQgeW91ciBvd24gc3R1ZmYgaGVyZSAqLwotfSAkYWJicmV2JG9iamVjdDsKLQotc3RhdGljIFB5VHlwZU9iamVjdCAkQWJicmV2JHR5cGU7Ci0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9tZXRob2QgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9tZXRob2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNTE2MmMuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfbWV0aG9kCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotCi1zdGF0aWMgY2hhciAkYWJicmV2JF8kbWV0aG9kJF9fZG9jX19bXSA9IAotIiIKLTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkXyRtZXRob2QkKCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiIpKQotCQlyZXR1cm4gTlVMTDsKLQlQeV9JTkNSRUYoUHlfTm9uZSk7Ci0JcmV0dXJuIFB5X05vbmU7Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X21saXN0IGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfbWxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMmE5ZTEuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfbWxpc3QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLQotc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiAkYWJicmV2JF9tZXRob2RzW10gPSB7Ci0JJG1ldGhvZGxpc3QkCi0Je05VTEwsCQlOVUxMfQkJLyogc2VudGluZWwgKi8KLX07Ci0KLS8qIC0tLS0tLS0tLS0gKi8KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfbmV3IGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfbmV3CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGM1ZTM2Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X25ldworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLQotc3RhdGljICRhYmJyZXYkb2JqZWN0ICoKLW5ldyRhYmJyZXYkb2JqZWN0KCkKLXsKLQkkYWJicmV2JG9iamVjdCAqc2VsZjsKLQkKLQlzZWxmID0gUHlPYmplY3RfTkVXKCRhYmJyZXYkb2JqZWN0LCAmJEFiYnJldiR0eXBlKTsKLQlpZiAoc2VsZiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQkvKiBYWFhYIEFkZCB5b3VyIG93biBpbml0aWFsaXplcnMgaGVyZSAqLwotCXJldHVybiBzZWxmOwotfQotCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9zdHJ1Y3R1cmUgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9zdHJ1Y3R1cmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3M2FjOGQuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3Rfc3RydWN0dXJlCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotCi0vKiBDb2RlIHRvIGFjY2VzcyBzdHJ1Y3R1cmUgbWVtYmVycyBieSBhY2Nlc3NpbmcgYXR0cmlidXRlcyAqLwotCi0jaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCi0KLSNkZWZpbmUgT0ZGKHgpIG9mZnNldG9mKFhYWFhvYmplY3QsIHgpCi0KLXN0YXRpYyBzdHJ1Y3QgbWVtYmVybGlzdCAkYWJicmV2JF9tZW1iZXJsaXN0W10gPSB7Ci0JLyogWFhYWCBBZGQgbGluZXMgbGlrZSB7ICJmb28iLCBUX0lOVCwgT0ZGKGZvbyksIFJPIH0gICovCi0KLQl7TlVMTH0JLyogU2VudGluZWwgKi8KLX07Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9nZXRhdHRyKCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBjaGFyICpuYW1lKQotewotCVB5T2JqZWN0ICpydjsKLQkKLQkvKiBYWFhYIEFkZCB5b3VyIG93biBnZXRhdHRyIGNvZGUgaGVyZSAqLwotCXJ2ID0gUHlNZW1iZXJfR2V0KChjaGFyICopLypYWFhYKi8wLCAkYWJicmV2JF9tZW1iZXJsaXN0LCBuYW1lKTsKLQlpZiAocnYpCi0JCXJldHVybiBydjsKLQlQeUVycl9DbGVhcigpOwotCXJldHVybiBQeV9GaW5kTWV0aG9kKCRhYmJyZXYkX21ldGhvZHMsIChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOwotfQotCi0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX3NldGF0dHIoJGFiYnJldiRvYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp2KQotewotCS8qIFhYWFggQWRkIHlvdXIgb3duIHNldGF0dHIgY29kZSBoZXJlICovCi0JaWYgKCB2ID09IE5VTEwgKSB7Ci0JCVB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIkNhbm5vdCBkZWxldGUgYXR0cmlidXRlIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIFB5TWVtYmVyX1NldCgoY2hhciAqKS8qWFhYWCovMCwgJGFiYnJldiRfbWVtYmVybGlzdCwgbmFtZSwgdik7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90YWlsIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdGFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQxMzM0Yy4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90YWlsCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotCi1zdGF0aWMgY2hhciAkQWJicmV2JHR5cGVfX2RvY19fW10gPSAKLSIiCi07Ci0KLXN0YXRpYyBQeVR5cGVPYmplY3QgJEFiYnJldiR0eXBlID0gewotCVB5T2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUpCi0JMCwJCQkJLypvYl9zaXplKi8KLQkiJG5hbWUkIiwJCQkvKnRwX25hbWUqLwotCXNpemVvZigkYWJicmV2JG9iamVjdCksCQkvKnRwX2Jhc2ljc2l6ZSovCi0JMCwJCQkJLyp0cF9pdGVtc2l6ZSovCi0JLyogbWV0aG9kcyAqLwotCShkZXN0cnVjdG9yKSR0cF9kZWFsbG9jJCwJLyp0cF9kZWFsbG9jKi8KLQkocHJpbnRmdW5jKSR0cF9wcmludCQsCQkvKnRwX3ByaW50Ki8KLQkoZ2V0YXR0cmZ1bmMpJHRwX2dldGF0dHIkLAkvKnRwX2dldGF0dHIqLwotCShzZXRhdHRyZnVuYykkdHBfc2V0YXR0ciQsCS8qdHBfc2V0YXR0ciovCi0JKGNtcGZ1bmMpJHRwX2NvbXBhcmUkLAkJLyp0cF9jb21wYXJlKi8KLQkocmVwcmZ1bmMpJHRwX3JlcHIkLAkJLyp0cF9yZXByKi8KLQkkdHBfYXNfbnVtYmVyJCwJCQkvKnRwX2FzX251bWJlciovCi0JJHRwX2FzX3NlcXVlbmNlJCwJCS8qdHBfYXNfc2VxdWVuY2UqLwotCSR0cF9hc19tYXBwaW5nJCwJCS8qdHBfYXNfbWFwcGluZyovCi0JKGhhc2hmdW5jKSR0cF9oYXNoJCwJCS8qdHBfaGFzaCovCi0JKHRlcm5hcnlmdW5jKSR0cF9jYWxsJCwJCS8qdHBfY2FsbCovCi0JKHJlcHJmdW5jKSR0cF9zdHIkLAkJLyp0cF9zdHIqLwotCi0JLyogU3BhY2UgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KLQkwTCwwTCwwTCwwTCwKLQkkQWJicmV2JHR5cGVfX2RvY19fIC8qIERvY3VtZW50YXRpb24gc3RyaW5nICovCi19OwotCi0vKiBFbmQgb2YgY29kZSBmb3IgJG5hbWUkIG9iamVjdHMgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2FzX21hcHBpbmcgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9hc19tYXBwaW5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTIxM2I3Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2FzX21hcHBpbmcKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0KLS8qIENvZGUgdG8gYWNjZXNzICRuYW1lJCBvYmplY3RzIGFzIG1hcHBpbmdzICovCi0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX2xlbmd0aCgkYWJicmV2JG9iamVjdCAqc2VsZikKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgbWFwcGluZyAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfc3Vic2NyaXB0KCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqa2V5KQotewotCS8qIFhYWFggUmV0dXJuIHRoZSBpdGVtIG9mIHNlbGYgaW5kZXhlZCBieSBrZXkgKi8KLX0KLQotc3RhdGljIGludAotJGFiYnJldiRfYXNzX3N1YigkYWJicmV2JG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQotewotCS8qIFhYWFggUHV0IHcgaW4gc2VsZiB1bmRlciBrZXkgdiAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgUHlNYXBwaW5nTWV0aG9kcyAkYWJicmV2JF9hc19tYXBwaW5nID0gewotCShpbnF1aXJ5KSRhYmJyZXYkX2xlbmd0aCwJCS8qbXBfbGVuZ3RoKi8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9zdWJzY3JpcHQsCQkvKm1wX3N1YnNjcmlwdCovCi0JKG9iam9iamFyZ3Byb2MpJGFiYnJldiRfYXNzX3N1YiwJLyptcF9hc3Nfc3Vic2NyaXB0Ki8KLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9hc19udW1iZXIgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9hc19udW1iZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWFhOWEuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfbnVtYmVyCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLQotLyogQ29kZSB0byBhY2Nlc3MgJG5hbWUkIG9iamVjdHMgYXMgbnVtYmVycyAqLwotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfYWRkKCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdykKLXsKLQkvKiBYWFhYIEFkZCB0aGVtICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9zdWIoJGFiYnJldiRvYmplY3QgKnYsICRhYmJyZXYkb2JqZWN0ICp3KQotewotCS8qIFhYWFggU3VidHJhY3QgdGhlbSAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfbXVsKCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdykKLXsKLQkvKiBYWFhYIE11bHRpcGx5IHRoZW0gKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2RpdigkYWJicmV2JG9iamVjdCAqeCwgJGFiYnJldiRvYmplY3QgKnkpCi17Ci0JLyogWFhYWCBEaXZpZGUgdGhlbSAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfbW9kKCRhYmJyZXYkb2JqZWN0ICp4LCAkYWJicmV2JG9iamVjdCAqeSkKLXsKLQkvKiBYWFhYIE1vZHVsbyB0aGVtICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9kaXZtb2QoJGFiYnJldiRvYmplY3QgKngsICRhYmJyZXYkb2JqZWN0ICp5KQotewotCS8qIFhYWFggUmV0dXJuIDItdHVwbGUgd2l0aCBkaXYgYW5kIG1vZCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfcG93KCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdywgJGFiYnJldiRvYmplY3QgKnopCi17Ci0JLyogWFhYWCAqLwotfQkJCQkKLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX25lZygkYWJicmV2JG9iamVjdCAqdikKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9wb3MoJGFiYnJldiRvYmplY3QgKnYpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfYWJzKCRhYmJyZXYkb2JqZWN0ICp2KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIGludAotJGFiYnJldiRfbm9uemVybygkYWJicmV2JG9iamVjdCAqdikKLXsKLQkvKiBYWFhYIFJldHVybiAxIGlmIG5vbi16ZXJvICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9pbnZlcnQoJGFiYnJldiRvYmplY3QgKnYpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfbHNoaWZ0KCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdykKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9yc2hpZnQoJGFiYnJldiRvYmplY3QgKnYsICRhYmJyZXYkb2JqZWN0ICp3KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2FuZCgkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfeG9yKCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdykKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9vcigkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgaW50Ci0kYWJicmV2JF9jb2VyY2UoUHlPYmplY3QgKipwdiwgUHlPYmplY3QgKipwdykKLXsKLQkvKiBYWFhYIEkgaGF2ZW4ndCBhIGNsdWUuLi4gKi8KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2ludCgkYWJicmV2JG9iamVjdCAqdikKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9sb25nKCRhYmJyZXYkb2JqZWN0ICp2KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2Zsb2F0KCRhYmJyZXYkb2JqZWN0ICp2KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX29jdCgkYWJicmV2JG9iamVjdCAqdikKLXsKLQkvKiBYWFhYIFJldHVybiBvYmplY3QgYXMgb2N0YWwgc3RyaW5nb2JqZWN0ICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9oZXgoJGFiYnJldiRvYmplY3QgKnYpCi17Ci0JLyogWFhYWCBSZXR1cm4gb2JqZWN0IGFzIGhleCBzdHJpbmdvYmplY3QgKi8KLX0KLQotc3RhdGljIFB5TnVtYmVyTWV0aG9kcyAkYWJicmV2JF9hc19udW1iZXIgPSB7Ci0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfYWRkLAkvKm5iX2FkZCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfc3ViLAkvKm5iX3N1YnRyYWN0Ki8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9tdWwsCS8qbmJfbXVsdGlwbHkqLwotCShiaW5hcnlmdW5jKSRhYmJyZXYkX2RpdiwJLypuYl9kaXZpZGUqLwotCShiaW5hcnlmdW5jKSRhYmJyZXYkX21vZCwJLypuYl9yZW1haW5kZXIqLwotCShiaW5hcnlmdW5jKSRhYmJyZXYkX2Rpdm1vZCwJLypuYl9kaXZtb2QqLwotCSh0ZXJuYXJ5ZnVuYykkYWJicmV2JF9wb3csCS8qbmJfcG93ZXIqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfbmVnLAkvKm5iX25lZ2F0aXZlKi8KLQkodW5hcnlmdW5jKSRhYmJyZXYkX3BvcywJLypuYl9wb3NpdGl2ZSovCi0JKHVuYXJ5ZnVuYykkYWJicmV2JF9hYnMsCS8qbmJfYWJzb2x1dGUqLwotCShpbnF1aXJ5KSRhYmJyZXYkX25vbnplcm8sCS8qbmJfbm9uemVybyovCi0JKHVuYXJ5ZnVuYykkYWJicmV2JF9pbnZlcnQsCS8qbmJfaW52ZXJ0Ki8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9sc2hpZnQsCS8qbmJfbHNoaWZ0Ki8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9yc2hpZnQsCS8qbmJfcnNoaWZ0Ki8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9hbmQsCS8qbmJfYW5kKi8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF94b3IsCS8qbmJfeG9yKi8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9vciwJLypuYl9vciovCi0JKGNvZXJjaW9uKSRhYmJyZXYkX2NvZXJjZSwJLypuYl9jb2VyY2UqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfaW50LAkvKm5iX2ludCovCi0JKHVuYXJ5ZnVuYykkYWJicmV2JF9sb25nLAkvKm5iX2xvbmcqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfZmxvYXQsCS8qbmJfZmxvYXQqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfb2N0LAkvKm5iX29jdCovCi0JKHVuYXJ5ZnVuYykkYWJicmV2JF9oZXgsCS8qbmJfaGV4Ki8KLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2FzX3NlcXVlbmNlIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfc2VxdWVuY2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YzBiOTIuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfc2VxdWVuY2UKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0KLS8qIENvZGUgdG8gaGFuZGxlIGFjY2Vzc2luZyAkbmFtZSQgb2JqZWN0cyBhcyBzZXF1ZW5jZSBvYmplY3RzICovCi0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX2xlbmd0aCgkYWJicmV2JG9iamVjdCAqc2VsZikKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0ICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9jb25jYXQoJGFiYnJldiRvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpiYikKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBzZWxmIGFuZCBiYiAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfcmVwZWF0KCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBpbnQgbikKLXsKLQkvKiBYWFhYIFJldHVybiBhIG5ldyBvYmplY3QgdGhhdCBpcyBuIHRpbWVzIHNlbGYgKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2l0ZW0oJGFiYnJldiRvYmplY3QgKnNlbGYsIGludCBpKQotewotCS8qIFhYWFggUmV0dXJuIHRoZSBpLXRoIG9iamVjdCBvZiBzZWxmICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9zbGljZSgkYWJicmV2JG9iamVjdCAqc2VsZiwgaW50IGlsb3csIGludCBpaGlnaCkKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgaWxvdy4uaWhpZ2ggc2xpY2Ugb2Ygc2VsZiBpbiBhIG5ldyBvYmplY3QgKi8KLX0KLQotc3RhdGljIGludAotJGFiYnJldiRfYXNzX2l0ZW0oJGFiYnJldiRvYmplY3QgKnNlbGYsIGludCBpLCBQeU9iamVjdCAqdikKLXsKLQkvKiBYWFhYIEFzc2lnbiB0byB0aGUgaS10aCBlbGVtZW50IG9mIHNlbGYgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotJGFiYnJldiRfYXNzX3NsaWNlKFB5TGlzdE9iamVjdCAqc2VsZiwgaW50IGlsb3csIGludCBpaGlnaCwgUHlPYmplY3QgKnYpCi17Ci0JLyogWFhYWCBSZXBsYWNlIGlsb3cuLmloaWdoIHNsaWNlIG9mIHNlbGYgd2l0aCB2ICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyAkYWJicmV2JF9hc19zZXF1ZW5jZSA9IHsKLQkoaW5xdWlyeSkkYWJicmV2JF9sZW5ndGgsCQkvKnNxX2xlbmd0aCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfY29uY2F0LAkJLypzcV9jb25jYXQqLwotCShpbnRhcmdmdW5jKSRhYmJyZXYkX3JlcGVhdCwJCS8qc3FfcmVwZWF0Ki8KLQkoaW50YXJnZnVuYykkYWJicmV2JF9pdGVtLAkJLypzcV9pdGVtKi8KLQkoaW50aW50YXJnZnVuYykkYWJicmV2JF9zbGljZSwJCS8qc3Ffc2xpY2UqLwotCShpbnRvYmphcmdwcm9jKSRhYmJyZXYkX2Fzc19pdGVtLAkvKnNxX2Fzc19pdGVtKi8KLQkoaW50aW50b2JqYXJncHJvYykkYWJicmV2JF9hc3Nfc2xpY2UsCS8qc3FfYXNzX3NsaWNlKi8KLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9jYWxsIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfY2FsbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkzZjE3Zi4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9jYWxsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9jYWxsKCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgc2VsZiB3aXRoIGFyZ3VtZW50IGFyZ3MgKi8KLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfY29tcGFyZSBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2NvbXBhcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1M2JhZTAuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfY29tcGFyZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotCi1zdGF0aWMgaW50Ci0kYWJicmV2JF9jb21wYXJlKCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdykKLXsKLQkvKiBYWFhYIENvbXBhcmUgb2JqZWN0cyBhbmQgcmV0dXJuIC0xLCAwIG9yIDEgKi8KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2RlYWxsb2MgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9kZWFsbG9jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDA0MTlhLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2RlYWxsb2MKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotc3RhdGljIHZvaWQKLSRhYmJyZXYkX2RlYWxsb2MoJGFiYnJldiRvYmplY3QgKnNlbGYpCi17Ci0JLyogWFhYWCBBZGQgeW91ciBvd24gY2xlYW51cCBjb2RlIGhlcmUgKi8KLQlQeU1lbV9ERUwoc2VsZik7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9nZXRhdHRyIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfZ2V0YXR0cgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmExYjJlOC4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9nZXRhdHRyCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9nZXRhdHRyKCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBjaGFyICpuYW1lKQotewotCS8qIFhYWFggQWRkIHlvdXIgb3duIGdldGF0dHIgY29kZSBoZXJlICovCi0JcmV0dXJuIFB5X0ZpbmRNZXRob2QoJGFiYnJldiRfbWV0aG9kcywgKFB5T2JqZWN0ICopc2VsZiwgbmFtZSk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9oYXNoIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfaGFzaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ2M2Y2YS4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9oYXNoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0KLXN0YXRpYyBsb25nCi0kYWJicmV2JF9oYXNoKCRhYmJyZXYkb2JqZWN0ICpzZWxmKQotewotCS8qIFhYWFggUmV0dXJuIGEgaGFzaCBvZiBzZWxmIChvciAtMSkgKi8KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3ByaW50IGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfcHJpbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NDA4ZDIuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfcHJpbnQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotc3RhdGljIGludAotJGFiYnJldiRfcHJpbnQoJGFiYnJldiRvYmplY3QgKnNlbGYsIEZJTEUgKmZwLCBpbnQgZmxhZ3MpCi17Ci0JLyogWFhYWCBBZGQgY29kZSBoZXJlIHRvIHByaW50IHNlbGYgdG8gZnAgKi8KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3JlcHIgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9yZXByCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTIyMjI1Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3JlcHIKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX3JlcHIoJGFiYnJldiRvYmplY3QgKnNlbGYpCi17Ci0JUHlPYmplY3QgKnM7Ci0KLQkvKiBYWFhYIEFkZCBjb2RlIGhlcmUgdG8gcHV0IHNlbGYgaW50byBzICovCi0JcmV0dXJuIHM7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9zZXRhdHRyIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfc2V0YXR0cgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZlNGJjOC4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9zZXRhdHRyCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX3NldGF0dHIoJGFiYnJldiRvYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp2KQotewotCS8qIFNldCBhdHRyaWJ1dGUgJ25hbWUnIHRvIHZhbHVlICd2Jy4gdj09TlVMTCBtZWFucyBkZWxldGUgKi8KLQkKLQkvKiBYWFhYIEFkZCB5b3VyIG93biBzZXRhdHRyIGNvZGUgaGVyZSAqLwotCXJldHVybiAtMTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3N0ciBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3N0cgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzNjQ4ZS4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9zdHIKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9zdHIoJGFiYnJldiRvYmplY3QgKnNlbGYpCi17Ci0JUHlPYmplY3QgKnM7Ci0KLQkvKiBYWFhYIEFkZCBjb2RlIGhlcmUgdG8gcHV0IHNlbGYgaW50byBzICovCi0JcmV0dXJuIHM7Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9Ua2V4dHJhLnB5IGIvVG9vbHMvbW9kdWxhdG9yL1RrZXh0cmEucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDEyMjcxMDYuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RrZXh0cmEucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIEEgUHl0aG9uIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGRpYWxvZyBib3hlcyB3aXRoIGEgdGV4dCBtZXNzYWdlLAotIyBvcHRpb25hbCBiaXRtYXAsIGFuZCBhbnkgbnVtYmVyIG9mIGJ1dHRvbnMuCi0jIENmLiBPdXN0ZXJob3V0LCBUY2wgYW5kIHRoZSBUayBUb29sa2l0LCBGaWdzLiAyNy4yLTMsIHBwLiAyNjktMjcwLgotCi1mcm9tIFRraW50ZXIgaW1wb3J0ICoKLQotbWFpbldpZGdldCA9IE5vbmUKLQotZGVmIGRpYWxvZyhtYXN0ZXIsIHRpdGxlLCB0ZXh0LCBiaXRtYXAsIGRlZmF1bHQsICphcmdzKToKLQotICAgICMgMS4gQ3JlYXRlIHRoZSB0b3AtbGV2ZWwgd2luZG93IGFuZCBkaXZpZGUgaXQgaW50byB0b3AKLSAgICAjIGFuZCBib3R0b20gcGFydHMuCi0KLSAgICB3ID0gVG9wbGV2ZWwobWFzdGVyLCB7J2NsYXNzJzogJ0RpYWxvZyd9KQotICAgIHcudGl0bGUodGl0bGUpCi0gICAgdy5pY29ubmFtZSgnRGlhbG9nJykKLQotICAgIHRvcCA9IEZyYW1lKHcsIHsncmVsaWVmJzogJ3JhaXNlZCcsICdiZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICd0b3AnLCAnZmlsbCc6ICdib3RoJ319KQotICAgIGJvdCA9IEZyYW1lKHcsIHsncmVsaWVmJzogJ3JhaXNlZCcsICdiZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICdib3R0b20nLCAnZmlsbCc6ICdib3RoJ319KQotCi0gICAgIyAyLiBGaWxsIHRoZSB0b3AgcGFydCB3aXRoIHRoZSBiaXRtYXAgYW5kIG1lc3NhZ2UuCi0KLSAgICBtc2cgPSBNZXNzYWdlKHRvcCwKLSAgICAgICAgICAgICAgICAgIHsnd2lkdGgnOiAnM2knLAotICAgICAgICAgICAgICAgICAgICd0ZXh0JzogdGV4dCwKLSAgICAgICAgICAgICAgICAgICAnZm9udCc6ICctQWRvYmUtVGltZXMtTWVkaXVtLVItTm9ybWFsLSotMTgwLSonLAotICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICdyaWdodCcsICdleHBhbmQnOiAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6ICdib3RoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOiAnM20nLCAncGFkeSc6ICczbSd9fSkKLSAgICBpZiBiaXRtYXA6Ci0gICAgICAgIGJtID0gTGFiZWwodG9wLCB7J2JpdG1hcCc6IGJpdG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOiB7J3NpZGUnOiAnbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nfX0pCi0KLSAgICAjIDMuIENyZWF0ZSBhIHJvdyBvZiBidXR0b25zIGF0IHRoZSBib3R0b20gb2YgdGhlIGRpYWxvZy4KLQotICAgIGJ1dHRvbnMgPSBbXQotICAgIGkgPSAwCi0gICAgZm9yIGJ1dCBpbiBhcmdzOgotICAgICAgICBiID0gQnV0dG9uKGJvdCwgeyd0ZXh0JzogYnV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tYW5kJzogKCdzZXQnLCAnYnV0dG9uJywgaSl9KQotICAgICAgICBidXR0b25zLmFwcGVuZChiKQotICAgICAgICBpZiBpID09IGRlZmF1bHQ6Ci0gICAgICAgICAgICBiZCA9IEZyYW1lKGJvdCwgeydyZWxpZWYnOiAnc3Vua2VuJywgJ2JkJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ2xlZnQnLCAnZXhwYW5kJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnMm0nfX0pCi0gICAgICAgICAgICBiLmxpZnQoKQotICAgICAgICAgICAgYi5wYWNrICh7J2luJzogYmQsICdzaWRlJzogJ2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOiAnMm0nLCAncGFkeSc6ICcybScsCi0gICAgICAgICAgICAgICAgICAgICAnaXBhZHgnOiAnMm0nLCAnaXBhZHknOiAnMW0nfSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGIucGFjayAoeydzaWRlJzogJ2xlZnQnLCAnZXhwYW5kJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nLAotICAgICAgICAgICAgICAgICAgICAgJ2lwYWR5JzogJzJtJywgJ2lwYWR5JzogJzFtJ30pCi0gICAgICAgIGkgPSBpKzEKLQotICAgICMgNC4gU2V0IHVwIGEgYmluZGluZyBmb3IgPFJldHVybj4sIGlmIHRoZXJlJ3MgYSBkZWZhdWx0LAotICAgICMgc2V0IGEgZ3JhYiwgYW5kIGNsYWltIHRoZSBmb2N1cyB0b28uCi0KLSAgICBpZiBkZWZhdWx0ID49IDA6Ci0gICAgICAgIHcuYmluZCgnPFJldHVybj4nLAotICAgICAgICAgICAgICAgbGFtYmRhIGUsIGI9YnV0dG9uc1tkZWZhdWx0XSwgaT1kZWZhdWx0OgotICAgICAgICAgICAgICAgKGIuZmxhc2goKSwKLSAgICAgICAgICAgICAgICBiLnNldHZhcignYnV0dG9uJywgaSkpKQotCi0gICAgb2xkRm9jdXMgPSB3LnRrLmNhbGwoJ2ZvY3VzJykgIyBYWFgKLSAgICB3LmdyYWJfc2V0KCkKLSAgICB3LmZvY3VzKCkKLQotICAgICMgNS4gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcmVzcG9uZCwgdGhlbiByZXN0b3JlIHRoZSBmb2N1cwotICAgICMgYW5kIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGJ1dHRvbi4KLQotICAgIHcud2FpdHZhcignYnV0dG9uJykKLSAgICB3LmRlc3Ryb3koKQotICAgIHcudGsuY2FsbCgnZm9jdXMnLCBvbGRGb2N1cykgIyBYWFgKLSAgICByZXR1cm4gdy5nZXRpbnQody5nZXR2YXIoJ2J1dHRvbicpKQotCi1kZWYgc3RyZGlhbG9nKG1hc3RlciwgdGl0bGUsIHRleHQsIGJpdG1hcCwgZGVmYXVsdCwgKmFyZ3MpOgotCi0gICAgIyAxLiBDcmVhdGUgdGhlIHRvcC1sZXZlbCB3aW5kb3cgYW5kIGRpdmlkZSBpdCBpbnRvIHRvcAotICAgICMgYW5kIGJvdHRvbSBwYXJ0cy4KLQotICAgIHcgPSBUb3BsZXZlbChtYXN0ZXIsIHsnY2xhc3MnOiAnRGlhbG9nJ30pCi0gICAgdy50aXRsZSh0aXRsZSkKLSAgICB3Lmljb25uYW1lKCdEaWFsb2cnKQotCi0gICAgdG9wID0gRnJhbWUodywgeydyZWxpZWYnOiAncmFpc2VkJywgJ2JkJzogMSwKLSAgICAgICAgICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ3RvcCcsICdmaWxsJzogJ2JvdGgnfX0pCi0gICAgaWYgYXJnczoKLSAgICAgICAgYm90ID0gRnJhbWUodywgeydyZWxpZWYnOiAncmFpc2VkJywgJ2JkJzogMSwKLSAgICAgICAgICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ2JvdHRvbScsICdmaWxsJzogJ2JvdGgnfX0pCi0KLSAgICAjIDIuIEZpbGwgdGhlIHRvcCBwYXJ0IHdpdGggdGhlIGJpdG1hcCwgbWVzc2FnZSBhbmQgaW5wdXQgZmllbGQuCi0KLSAgICBpZiBiaXRtYXA6Ci0gICAgICAgIGJtID0gTGFiZWwodG9wLCB7J2JpdG1hcCc6IGJpdG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOiB7J3NpZGUnOiAnbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nfX0pCi0KLSAgICBtc2cgPSBNZXNzYWdlKHRvcCwKLSAgICAgICAgICAgICAgICAgIHsnd2lkdGgnOiAnM2knLAotICAgICAgICAgICAgICAgICAgICd0ZXh0JzogdGV4dCwKLSAgICAgICAgICAgICAgICAgICAnZm9udCc6ICctQWRvYmUtVGltZXMtTWVkaXVtLVItTm9ybWFsLSotMTgwLSonLAotICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICdsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOiAnYm90aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nfX0pCi0KLSAgICBmaWVsZCA9IEVudHJ5KHRvcCwKLSAgICAgICAgICAgICAgICAgIHsncmVsaWVmJzonc3Vua2VuJywKLSAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCc6MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzNtJywgJ3BhZHknOiczbSd9fSkKLSAgICAjIDMuIENyZWF0ZSBhIHJvdyBvZiBidXR0b25zIGF0IHRoZSBib3R0b20gb2YgdGhlIGRpYWxvZy4KLQotICAgIGJ1dHRvbnMgPSBbXQotICAgIGkgPSAwCi0gICAgZm9yIGJ1dCBpbiBhcmdzOgotICAgICAgICBiID0gQnV0dG9uKGJvdCwgeyd0ZXh0JzogYnV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tYW5kJzogKCdzZXQnLCAnYnV0dG9uJywgaSl9KQotICAgICAgICBidXR0b25zLmFwcGVuZChiKQotICAgICAgICBpZiBpID09IGRlZmF1bHQ6Ci0gICAgICAgICAgICBiZCA9IEZyYW1lKGJvdCwgeydyZWxpZWYnOiAnc3Vua2VuJywgJ2JkJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ2xlZnQnLCAnZXhwYW5kJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnMm0nfX0pCi0gICAgICAgICAgICBiLmxpZnQoKQotICAgICAgICAgICAgYi5wYWNrICh7J2luJzogYmQsICdzaWRlJzogJ2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOiAnMm0nLCAncGFkeSc6ICcybScsCi0gICAgICAgICAgICAgICAgICAgICAnaXBhZHgnOiAnMm0nLCAnaXBhZHknOiAnMW0nfSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGIucGFjayAoeydzaWRlJzogJ2xlZnQnLCAnZXhwYW5kJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nLAotICAgICAgICAgICAgICAgICAgICAgJ2lwYWR5JzogJzJtJywgJ2lwYWR5JzogJzFtJ30pCi0gICAgICAgIGkgPSBpKzEKLQotICAgICMgNC4gU2V0IHVwIGEgYmluZGluZyBmb3IgPFJldHVybj4sIGlmIHRoZXJlJ3MgYSBkZWZhdWx0LAotICAgICMgc2V0IGEgZ3JhYiwgYW5kIGNsYWltIHRoZSBmb2N1cyB0b28uCi0KLSAgICBpZiBub3QgYXJnczoKLSAgICAgICAgdy5iaW5kKCc8UmV0dXJuPicsIGxhbWJkYSBhcmcsIHRvcD10b3A6IHRvcC5zZXR2YXIoJ2J1dHRvbicsIDApKQotICAgICAgICBmaWVsZC5iaW5kKCc8UmV0dXJuPicsIGxhbWJkYSBhcmcsIHRvcD10b3A6IHRvcC5zZXR2YXIoJ2J1dHRvbicsIDApKQotICAgIGVsaWYgZGVmYXVsdCA+PSAwOgotICAgICAgICB3LmJpbmQoJzxSZXR1cm4+JywKLSAgICAgICAgICAgICAgIGxhbWJkYSBlLCBiPWJ1dHRvbnNbZGVmYXVsdF0sIGk9ZGVmYXVsdDoKLSAgICAgICAgICAgICAgIChiLmZsYXNoKCksCi0gICAgICAgICAgICAgICAgYi5zZXR2YXIoJ2J1dHRvbicsIGkpKSkKLSAgICAgICAgZmllbGQuYmluZCgnPFJldHVybj4nLAotICAgICAgICAgICAgICAgbGFtYmRhIGUsIGI9YnV0dG9uc1tkZWZhdWx0XSwgaT1kZWZhdWx0OgotICAgICAgICAgICAgICAgKGIuZmxhc2goKSwKLSAgICAgICAgICAgICAgICBiLnNldHZhcignYnV0dG9uJywgaSkpKQotCi0gICAgb2xkRm9jdXMgPSB3LnRrLmNhbGwoJ2ZvY3VzJykgIyBYWFgKLSAgICB3LmdyYWJfc2V0KCkKLSAgICBmaWVsZC5mb2N1cygpCi0KLSAgICAjIDUuIFdhaXQgZm9yIHRoZSB1c2VyIHRvIHJlc3BvbmQsIHRoZW4gcmVzdG9yZSB0aGUgZm9jdXMKLSAgICAjIGFuZCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBidXR0b24uCi0KLSAgICB3LndhaXR2YXIoJ2J1dHRvbicpCi0gICAgdiA9IGZpZWxkLmdldCgpCi0gICAgdy5kZXN0cm95KCkKLSAgICB3LnRrLmNhbGwoJ2ZvY3VzJywgb2xkRm9jdXMpICMgWFhYCi0gICAgaWYgYXJnczoKLSAgICAgICAgcmV0dXJuIHYsIHcuZ2V0aW50KHcuZ2V0dmFyKCdidXR0b24nKSkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gdgotCi1kZWYgbWVzc2FnZShzdHIpOgotICAgIGkgPSBkaWFsb2cobWFpbldpZGdldCwgJ01lc3NhZ2UnLCBzdHIsICcnLCAwLCAnT0snKQotCi1kZWYgYXNreW4oc3RyKToKLSAgICBpID0gZGlhbG9nKG1haW5XaWRnZXQsICdRdWVzdGlvbicsIHN0ciwgJycsIDAsICdObycsICdZZXMnKQotICAgIHJldHVybiBpCi0KLWRlZiBhc2t5bmMoc3RyKToKLSAgICBpID0gZGlhbG9nKG1haW5XaWRnZXQsICdRdWVzdGlvbicsIHN0ciwgJycsIDAsICdDYW5jZWwnLCAnTm8nLCAnWWVzJykKLSAgICByZXR1cm4gaS0xCi0KLWRlZiBhc2tzdHIoc3RyKToKLSAgICBpID0gc3RyZGlhbG9nKG1haW5XaWRnZXQsICdRdWVzdGlvbicsIHN0ciwgJycsIDApCi0gICAgcmV0dXJuIGkKLQotZGVmIGFza2ZpbGUoc3RyKTogICAgICAgIyBYWFhYIEZvciBub3cuLi4KLSAgICBpID0gc3RyZGlhbG9nKG1haW5XaWRnZXQsICdRdWVzdGlvbicsIHN0ciwgJycsIDApCi0gICAgcmV0dXJuIGkKLQotIyBUaGUgcmVzdCBpcyB0aGUgdGVzdCBwcm9ncmFtLgotCi1kZWYgX2dvKCk6Ci0gICAgaSA9IGRpYWxvZyhtYWluV2lkZ2V0LAotICAgICAgICAgICAgICAgJ05vdCBSZXNwb25kaW5nJywKLSAgICAgICAgICAgICAgICJUaGUgZmlsZSBzZXJ2ZXIgaXNuJ3QgcmVzcG9uZGluZyByaWdodCBub3c7ICIKLSAgICAgICAgICAgICAgICJJJ2xsIGtlZXAgdHJ5aW5nLiIsCi0gICAgICAgICAgICAgICAnJywKLSAgICAgICAgICAgICAgIC0xLAotICAgICAgICAgICAgICAgJ09LJykKLSAgICBwcmludCAncHJlc3NlZCBidXR0b24nLCBpCi0gICAgaSA9IGRpYWxvZyhtYWluV2lkZ2V0LAotICAgICAgICAgICAgICAgJ0ZpbGUgTW9kaWZpZWQnLAotICAgICAgICAgICAgICAgJ0ZpbGUgInRjbC5oIiBoYXMgYmVlbiBtb2RpZmllZCBzaW5jZSAnCi0gICAgICAgICAgICAgICAndGhlIGxhc3QgdGltZSBpdCB3YXMgc2F2ZWQuICcKLSAgICAgICAgICAgICAgICdEbyB5b3Ugd2FudCB0byBzYXZlIGl0IGJlZm9yZSBleGl0aW5nIHRoZSBhcHBsaWNhdGlvbj8nLAotICAgICAgICAgICAgICAgJ3dhcm5pbmcnLAotICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICdTYXZlIEZpbGUnLAotICAgICAgICAgICAgICAgJ0Rpc2NhcmQgQ2hhbmdlcycsCi0gICAgICAgICAgICAgICAnUmV0dXJuIFRvIEVkaXRvcicpCi0gICAgcHJpbnQgJ3ByZXNzZWQgYnV0dG9uJywgaQotICAgIHByaW50IG1lc3NhZ2UoJ1Rlc3Qgb2YgbWVzc2FnZScpCi0gICAgcHJpbnQgYXNreW4oJ1Rlc3Qgb2YgeWVzL25vJykKLSAgICBwcmludCBhc2t5bmMoJ1Rlc3Qgb2YgeWVzL25vL2NhbmNlbCcpCi0gICAgcHJpbnQgYXNrc3RyKCdUeXBlIGEgc3RyaW5nOicpCi0gICAgcHJpbnQgc3RyZGlhbG9nKG1haW5XaWRnZXQsICdRdWVzdGlvbicsICdBbm90aGVyIHN0cmluZzonLCAnJywKLSAgICAgICAgICAgICAgICAgIDAsICdTYXZlJywgJ1NhdmUgYXMgdGV4dCcpCi0KLWRlZiBfdGVzdCgpOgotICAgIGdsb2JhbCBtYWluV2lkZ2V0Ci0gICAgbWFpbldpZGdldCA9IEZyYW1lKCkKLSAgICBQYWNrLmNvbmZpZyhtYWluV2lkZ2V0KQotICAgIHN0YXJ0ID0gQnV0dG9uKG1haW5XaWRnZXQsCi0gICAgICAgICAgICAgICAgICAgeyd0ZXh0JzogJ1ByZXNzIEhlcmUgVG8gU3RhcnQnLCAnY29tbWFuZCc6IF9nb30pCi0gICAgc3RhcnQucGFjaygpCi0gICAgZW5kaXQgPSBCdXR0b24obWFpbldpZGdldCwKLSAgICAgICAgICAgICAgICAgICB7J3RleHQnOiAnRXhpdCcsCi0gICAgICAgICAgICAgICAgICAgICdjb21tYW5kJzogJ2V4aXQnLAotICAgICAgICAgICAgICAgICAgICBQYWNrOiB7J2ZpbGwnIDogJ2JvdGgnfX0pCi0gICAgbWFpbldpZGdldC5tYWlubG9vcCgpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgX3Rlc3QoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL2dlbm1vZHVsZS5weSBiL1Rvb2xzL21vZHVsYXRvci9nZW5tb2R1bGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRhMzA2ODQuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL2dlbm1vZHVsZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0jCi0jIEdlbm1vZHVsZSAtIEEgcHl0aG9uIHByb2dyYW0gdG8gaGVscCB5b3UgYnVpbGQgKHRlbXBsYXRlKSBtb2R1bGVzLgotIwotIyBVc2FnZToKLSMKLSMgbyA9IGdlbm1vZHVsZS5vYmplY3QoKQotIyBvLm5hbWUgPSAnZHdhcnZlIG9iamVjdCcKLSMgby5hYmJyZXYgPSAnZHcnCi0jIG8uZnVuY2xpc3QgPSBbJ25ldycsICdkZWFsbG9jJywgJ2dldGF0dHInLCAnc2V0YXR0ciddCi0jIG8ubWV0aG9kbGlzdCA9IFsnZGlnJ10KLSMKLSMgbSA9IGdlbm1vZHVsZS5tb2R1bGUoKQotIyBtLm5hbWUgPSAnYmVpbmdzJwotIyBtLmFiYnJldiA9ICdiZScKLSMgbS5tZXRob2RsaXN0ID0gWyduZXdkd2FydmUnXQotIyBtLm9iamVjdHMgPSBbb10KLSMKLSMgZ2VubW9kdWxlLndyaXRlKHN5cy5zdGRvdXQsIG0pCi0jCi1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWltcG9ydCB2YXJzdWJzdAotCi1lcnJvciA9ICdnZW5tb2R1bGUuZXJyb3InCi0KLSMKLSMgTmFtZXMgb2YgZnVuY3Rpb25zIGluIHRoZSBvYmplY3QtZGVzY3JpcHRpb24gc3RydWN0LgotIwotRlVOQ0xJU1QgPSBbJ25ldycsICd0cF9kZWFsbG9jJywgJ3RwX3ByaW50JywgJ3RwX2dldGF0dHInLCAndHBfc2V0YXR0cicsCi0gICAgICAgICAgICAndHBfY29tcGFyZScsICd0cF9yZXByJywgJ3RwX2hhc2gnLCAndHBfY2FsbCcsICd0cF9zdHInXQotVFlQRUxJU1QgPSBbJ3RwX2FzX251bWJlcicsICd0cF9hc19zZXF1ZW5jZScsICd0cF9hc19tYXBwaW5nJywgJ3N0cnVjdHVyZSddCi0KLSMKLSMgd3JpdGVyIGlzIGEgYmFzZSBjbGFzcyBmb3IgdGhlIG9iamVjdCBhbmQgbW9kdWxlIGNsYXNzZXMKLSMgaXQgY29udGFpbnMgY29kZSBjb21tb24gdG8gYm90aC4KLSMKLWNsYXNzIHdyaXRlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX3N1YnN0ID0gTm9uZQotCi0gICAgZGVmIG1ha2VzdWJzdChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3N1YnN0OgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX19kaWN0X18uaGFzX2tleSgnYWJicmV2Jyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hYmJyZXYgPSBzZWxmLm5hbWUKLSAgICAgICAgICAgIHNlbGYuQWJicmV2ID0gc2VsZi5hYmJyZXZbMF0udXBwZXIoKStzZWxmLmFiYnJldlsxOl0KLSAgICAgICAgICAgIHN1YnN0ID0gdmFyc3Vic3QuVmFyc3Vic3Qoc2VsZi5fX2RpY3RfXykKLSAgICAgICAgICAgIHN1YnN0LnVzZWluZGVudCgxKQotICAgICAgICAgICAgc2VsZi5fc3Vic3QgPSBzdWJzdC5zdWJzdAotCi0gICAgZGVmIGFkZGNvZGUoc2VsZiwgbmFtZSwgZnApOgotICAgICAgICBpZnAgPSBzZWxmLm9wZW50ZW1wbGF0ZShuYW1lKQotICAgICAgICBzZWxmLm1ha2VzdWJzdCgpCi0gICAgICAgIGQgPSBpZnAucmVhZCgpCi0gICAgICAgIGQgPSBzZWxmLl9zdWJzdChkKQotICAgICAgICBmcC53cml0ZShkKQotCi0gICAgZGVmIG9wZW50ZW1wbGF0ZShzZWxmLCBuYW1lKToKLSAgICAgICAgZm9yIHAgaW4gc3lzLnBhdGg6Ci0gICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihwLCBuYW1lKQotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZm4pOgotICAgICAgICAgICAgICAgIHJldHVybiBvcGVuKGZuLCAncicpCi0gICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihwLCAnVGVtcGxhdGVzJykKLSAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKGZuLCBuYW1lKQotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZm4pOgotICAgICAgICAgICAgICAgIHJldHVybiBvcGVuKGZuLCAncicpCi0gICAgICAgIHJhaXNlIGVycm9yLCAnVGVtcGxhdGUgJytuYW1lKycgbm90IGZvdW5kIGZvciAnK3NlbGYuX3R5cGUrJyAnKyBcCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUKLQotY2xhc3MgbW9kdWxlKHdyaXRlcik6Ci0gICAgX3R5cGUgPSAnbW9kdWxlJwotCi0gICAgZGVmIHdyaXRlY29kZShzZWxmLCBmcCk6Ci0gICAgICAgIHNlbGYuYWRkY29kZSgnY29weXJpZ2h0JywgZnApCi0gICAgICAgIHNlbGYuYWRkY29kZSgnbW9kdWxlX2hlYWQnLCBmcCkKLSAgICAgICAgZm9yIG8gaW4gc2VsZi5vYmplY3RzOgotICAgICAgICAgICAgby53cml0ZWhlYWQoZnApCi0gICAgICAgIGZvciBvIGluIHNlbGYub2JqZWN0czoKLSAgICAgICAgICAgIG8ud3JpdGVib2R5KGZwKQotICAgICAgICBuZXdfbWwgPSAnJwotICAgICAgICBmb3IgZm4gaW4gc2VsZi5tZXRob2RsaXN0OgotICAgICAgICAgICAgc2VsZi5tZXRob2QgPSBmbgotICAgICAgICAgICAgc2VsZi5hZGRjb2RlKCdtb2R1bGVfbWV0aG9kJywgZnApCi0gICAgICAgICAgICBuZXdfbWwgPSBuZXdfbWwgKyAoCi0gICAgICAgICAgICAgICAgICAgICAgJ3siJXMiLFx0KFB5Q0Z1bmN0aW9uKSVzXyVzLFx0TUVUSF9WQVJBUkdTLFx0JXNfJXNfX2RvY19ffSxcbicKLSAgICAgICAgICAgICAgICAgICAgICAlKGZuLCBzZWxmLmFiYnJldiwgZm4sIHNlbGYuYWJicmV2LCBmbikpCi0gICAgICAgIHNlbGYubWV0aG9kbGlzdCA9IG5ld19tbAotICAgICAgICBzZWxmLmFkZGNvZGUoJ21vZHVsZV90YWlsJywgZnApCi0KLWNsYXNzIG9iamVjdCh3cml0ZXIpOgotICAgIF90eXBlID0gJ29iamVjdCcKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYudHlwZWxpc3QgPSBbXQotICAgICAgICBzZWxmLm1ldGhvZGxpc3QgPSBbXQotICAgICAgICBzZWxmLmZ1bmNsaXN0ID0gWyduZXcnXQotICAgICAgICB3cml0ZXIuX19pbml0X18oc2VsZikKLQotICAgIGRlZiB3cml0ZWNvZGUoc2VsZiwgZnApOgotICAgICAgICBzZWxmLmFkZGNvZGUoJ2NvcHlyaWdodCcsIGZwKQotICAgICAgICBzZWxmLndyaXRlaGVhZChmcCkKLSAgICAgICAgc2VsZi53cml0ZWJvZHkoZnApCi0KLSAgICBkZWYgd3JpdGVoZWFkKHNlbGYsIGZwKToKLSAgICAgICAgc2VsZi5hZGRjb2RlKCdvYmplY3RfaGVhZCcsIGZwKQotCi0gICAgZGVmIHdyaXRlYm9keShzZWxmLCBmcCk6Ci0gICAgICAgIG5ld19tbCA9ICcnCi0gICAgICAgIGZvciBmbiBpbiBzZWxmLm1ldGhvZGxpc3Q6Ci0gICAgICAgICAgICBzZWxmLm1ldGhvZCA9IGZuCi0gICAgICAgICAgICBzZWxmLmFkZGNvZGUoJ29iamVjdF9tZXRob2QnLCBmcCkKLSAgICAgICAgICAgIG5ld19tbCA9IG5ld19tbCArICgKLSAgICAgICAgICAgICAgICAgICAgICAneyIlcyIsXHQoUHlDRnVuY3Rpb24pJXNfJXMsXHRNRVRIX1ZBUkFSR1MsXHQlc18lc19fZG9jX199LFxuJwotICAgICAgICAgICAgICAgICAgICAgICUoZm4sIHNlbGYuYWJicmV2LCBmbiwgc2VsZi5hYmJyZXYsIGZuKSkKLSAgICAgICAgc2VsZi5tZXRob2RsaXN0ID0gbmV3X21sCi0gICAgICAgIHNlbGYuYWRkY29kZSgnb2JqZWN0X21saXN0JywgZnApCi0KLSAgICAgICAgIyBBZGQgZ2V0YXR0ciBpZiB3ZSBoYXZlIG1ldGhvZHMKLSAgICAgICAgaWYgc2VsZi5tZXRob2RsaXN0IGFuZCBub3QgJ3RwX2dldGF0dHInIGluIHNlbGYuZnVuY2xpc3Q6Ci0gICAgICAgICAgICBzZWxmLmZ1bmNsaXN0Lmluc2VydCgwLCAndHBfZ2V0YXR0cicpCi0KLSAgICAgICAgZm9yIGZuIGluIEZVTkNMSVNUOgotICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBmbiwgJzAnKQotCi0gICAgICAgICMKLSAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIHN0cnVjdHVyZS1hY2Nlc3Mgb2JqZWN0czogcHV0IGdldGF0dHIgaW4gdGhlCi0gICAgICAgICMgbGlzdCBvZiBmdW5jdGlvbnMgYnV0IGRvbid0IGdlbmVyYXRlIGNvZGUgZm9yIGl0IGRpcmVjdGx5LAotICAgICAgICAjIHRoZSBjb2RlIGlzIG9idGFpbmVkIGZyb20gdGhlIG9iamVjdF9zdHJ1Y3R1cmUgdGVtcGxhdGUuCi0gICAgICAgICMgVGhlIHNhbWUgZ29lcyBmb3Igc2V0YXR0ci4KLSAgICAgICAgIwotICAgICAgICBpZiAnc3RydWN0dXJlJyBpbiBzZWxmLnR5cGVsaXN0OgotICAgICAgICAgICAgaWYgJ3RwX2dldGF0dHInIGluIHNlbGYuZnVuY2xpc3Q6Ci0gICAgICAgICAgICAgICAgc2VsZi5mdW5jbGlzdC5yZW1vdmUoJ3RwX2dldGF0dHInKQotICAgICAgICAgICAgaWYgJ3RwX3NldGF0dHInIGluIHNlbGYuZnVuY2xpc3Q6Ci0gICAgICAgICAgICAgICAgc2VsZi5mdW5jbGlzdC5yZW1vdmUoJ3RwX3NldGF0dHInKQotICAgICAgICAgICAgc2VsZi50cF9nZXRhdHRyID0gc2VsZi5hYmJyZXYgKyAnX2dldGF0dHInCi0gICAgICAgICAgICBzZWxmLnRwX3NldGF0dHIgPSBzZWxmLmFiYnJldiArICdfc2V0YXR0cicKLSAgICAgICAgZm9yIGZuIGluIHNlbGYuZnVuY2xpc3Q6Ci0gICAgICAgICAgICBzZWxmLmFkZGNvZGUoJ29iamVjdF8nK2ZuLCBmcCkKLSAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgZm4sICclc18lcyclKHNlbGYuYWJicmV2LCBmblszOl0pKQotICAgICAgICBmb3IgdG4gaW4gVFlQRUxJU1Q6Ci0gICAgICAgICAgICBzZXRhdHRyKHNlbGYsIHRuLCAnMCcpCi0gICAgICAgIGZvciB0biBpbiBzZWxmLnR5cGVsaXN0OgotICAgICAgICAgICAgc2VsZi5hZGRjb2RlKCdvYmplY3RfJyt0biwgZnApCi0gICAgICAgICAgICBzZXRhdHRyKHNlbGYsIHRuLCAnJiVzXyVzJyUoc2VsZi5hYmJyZXYsIHRuWzM6XSkpCi0gICAgICAgIHNlbGYuYWRkY29kZSgnb2JqZWN0X3RhaWwnLCBmcCkKLQotZGVmIHdyaXRlKGZwLCBvYmopOgotICAgIG9iai53cml0ZWNvZGUoZnApCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbyA9IG9iamVjdCgpCi0gICAgby5uYW1lID0gJ2R3YXJ2ZSBvYmplY3QnCi0gICAgby5hYmJyZXYgPSAnZHcnCi0gICAgby5mdW5jbGlzdCA9IFsnbmV3JywgJ3RwX2RlYWxsb2MnXQotICAgIG8ubWV0aG9kbGlzdCA9IFsnZGlnJ10KLSAgICBtID0gbW9kdWxlKCkKLSAgICBtLm5hbWUgPSAnYmVpbmdzJwotICAgIG0uYWJicmV2ID0gJ2JlJwotICAgIG0ubWV0aG9kbGlzdCA9IFsnbmV3ZHdhcnZlJ10KLSAgICBtLm9iamVjdHMgPSBbb10KLSAgICB3cml0ZShzeXMuc3Rkb3V0LCBtKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL21vZHVsYXRvci5weSBiL1Rvb2xzL21vZHVsYXRvci9tb2R1bGF0b3IucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDNlMDZiYzIuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL21vZHVsYXRvci5weQorKysgL2Rldi9udWxsCkBAIC0xLDM4MyArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIE1vZHVsYXRvciAtIEdlbmVyYXRlIHNrZWxldG9uIG1vZHVsZXMuCi0jCi0jIFRoZSB1c2VyIGZpbGxzIG91dCBzb21lIGZvcm1zIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUgbW9kdWxlCi0jIHNob3VsZCBzdXBwb3J0IChtZXRob2RzLCBvYmplY3RzKSwgbmFtZXMgb2YgdGhlc2UgdGhpbmdzLCBwcmVmaXhlcyB0bwotIyB1c2UgZm9yIEMgY29kZSwgd2hldGhlciB0aGUgb2JqZWN0cyBzaG91bGQgYWxzbyBzdXBwb3J0IGFjY2VzcyBhcyBudW1iZXJzLAotIyBldGMgZXRjIGV0Yy4KLSMgV2hlbiB0aGUgdXNlciBwcmVzc2VzICdHZW5lcmF0ZSBjb2RlJyB3ZSBnZW5lcmF0ZSBhIGNvbXBsZXRlIHNrZWxldG9uCi0jIG1vZHVsZSBpbiBDLgotIwotIyBBbHRlcm5hdGl2ZWx5LCB0aGUgc2VsZWN0aW9ucyBtYWRlIGNhbiBiZSBzYXZlIHRvIGEgcHl0aG9uIHNvdXJjZWZpbGUgYW5kCi0jIHRoaXMgc291cmNlZmlsZSBjYW4gYmUgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgKHJlc3VsdGluZyBpbiB0aGUgc2FtZQotIyBza2VsZXRvbiBDIGNvZGUpLgotIwotIyBKYWNrIEphbnNlbiwgQ1dJLCBPY3RvYmVyIDE5OTQuCi0jCi0KLWltcG9ydCBzeXMsIG9zCi1pZiBvcy5uYW1lIDw+ICdtYWMnOgotICAgIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnSE9NRSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9weXRob24vVG9vbHMvbW9kdWxhdG9yJykpCi0KLWZyb20gVGtpbnRlciBpbXBvcnQgKgotZnJvbSBUa2V4dHJhIGltcG9ydCAqCi1mcm9tIFNjcm9sbGVkTGlzdGJveCBpbXBvcnQgU2Nyb2xsZWRMaXN0Ym94Ci1pbXBvcnQgc3lzCi1pbXBvcnQgZ2VubW9kdWxlCi1pbXBvcnQgc3RyaW5nCi0KLW9vcHMgPSAnb29wcycKLQotSURFTlRTVEFSVENIQVJTID0gc3RyaW5nLmxldHRlcnMgKyAnXycKLUlERU5UQ0hBUlMgPSBzdHJpbmcubGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAnXycKLQotIyBDaGVjayB0aGF0IHN0cmluZyBpcyBhIGxlZ2FsIEMgaWRlbnRpZmllcgotZGVmIGNoZWNraWQoc3RyKToKLSAgICBpZiBub3Qgc3RyOiByZXR1cm4gMAotICAgIGlmIG5vdCBzdHJbMF0gaW4gSURFTlRTVEFSVENIQVJTOgotICAgICAgICByZXR1cm4gMAotICAgIGZvciBjIGluIHN0clsxOl06Ci0gICAgICAgIGlmIG5vdCBjIGluIElERU5UQ0hBUlM6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgIHJldHVybiAxCi0KLWRlZiBnZXRsaXN0bGlzdChsaXN0KToKLSAgICBydiA9IFtdCi0gICAgbiA9IGxpc3Quc2l6ZSgpCi0gICAgZm9yIGkgaW4gcmFuZ2Uobik6Ci0gICAgICAgIHJ2LmFwcGVuZChsaXN0LmdldChpKSkKLSAgICByZXR1cm4gcnYKLQotY2xhc3MgVUk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLm1haW4gPSBGcmFtZSgpCi0gICAgICAgIHNlbGYubWFpbi5wYWNrKCkKLSAgICAgICAgc2VsZi5tYWluLm1hc3Rlci50aXRsZSgnTW9kdWxhdG9yOiBNb2R1bGUgdmlldycpCi0gICAgICAgIHNlbGYuY21kZnJhbWUgPSBGcmFtZShzZWxmLm1haW4sIHsncmVsaWVmJzoncmFpc2VkJywgJ2JkJzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J3RvcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotICAgICAgICBzZWxmLm9iamZyYW1lID0gRnJhbWUoc2VsZi5tYWluLCB7UGFjazp7J3NpZGUnOid0b3AnLCAnZmlsbCc6J3gnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCc6MX19KQotCi0KLSAgICAgICAgc2VsZi5jaGVja19idXR0b24gPSBCdXR0b24oc2VsZi5jbWRmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3RleHQnOidDaGVjaycsICdjb21tYW5kJzpzZWxmLmNiX2NoZWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYuc2F2ZV9idXR0b24gPSBCdXR0b24oc2VsZi5jbWRmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3RleHQnOidTYXZlLi4uJywgJ2NvbW1hbmQnOnNlbGYuY2Jfc2F2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLmNvZGVfYnV0dG9uID0gQnV0dG9uKHNlbGYuY21kZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd0ZXh0JzonR2VuZXJhdGUgY29kZS4uLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tYW5kJzpzZWxmLmNiX2dlbmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5xdWl0X2J1dHRvbiA9IEJ1dHRvbihzZWxmLmNtZGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndGV4dCc6J1F1aXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCc6c2VsZi5jYl9xdWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J3JpZ2h0JywgJ3BhZHgnOicwLjVtJ319KQotCi0gICAgICAgIHNlbGYubW9kdWxlID0gVUlfbW9kdWxlKHNlbGYpCi0gICAgICAgIHNlbGYub2JqZWN0cyA9IFtdCi0gICAgICAgIHNlbGYubW9kaWZpZWQgPSAwCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBzZWxmLm1haW4ubWFpbmxvb3AoKQotCi0gICAgZGVmIGNiX3F1aXQoc2VsZiwgKmFyZ3MpOgotICAgICAgICBpZiBzZWxmLm1vZGlmaWVkOgotICAgICAgICAgICAgaWYgbm90IGFza3luKCdZb3UgaGF2ZSBub3Qgc2F2ZWRcbkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBxdWl0PycpOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICBzeXMuZXhpdCgwKQotCi0gICAgZGVmIGNiX2NoZWNrKHNlbGYsICphcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5tb2R1bGUuc3luY2hyb25pemUoKQotICAgICAgICAgICAgZm9yIG8gaW4gc2VsZi5vYmplY3RzOgotICAgICAgICAgICAgICAgIG8uc3luY2hyb25pemUoKQotICAgICAgICBleGNlcHQgb29wczoKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBjYl9zYXZlKHNlbGYsICphcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcHljb2RlID0gc2VsZi5tb2R1bGUuZ2VuY29kZSgnbScsIHNlbGYub2JqZWN0cykKLSAgICAgICAgZXhjZXB0IG9vcHM6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBmbiA9IGFza2ZpbGUoJ1B5dGhvbiBmaWxlIG5hbWU6ICcpCi0gICAgICAgIGlmIG5vdCBmbjoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGZwID0gb3BlbihmbiwgJ3cnKQotCi0gICAgICAgIGZwLndyaXRlKHB5Y29kZSkKLSAgICAgICAgZnAuY2xvc2UoKQotCi0gICAgZGVmIGNiX2dlbmNvZGUoc2VsZiwgKmFyZ3MpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBweWNvZGUgPSBzZWxmLm1vZHVsZS5nZW5jb2RlKCdtJywgc2VsZi5vYmplY3RzKQotICAgICAgICBleGNlcHQgb29wczoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBmbiA9IGFza2ZpbGUoJ0MgZmlsZSBuYW1lOiAnKQotICAgICAgICBpZiBub3QgZm46Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBmcCA9IG9wZW4oZm4sICd3JykKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBleGVjIHB5Y29kZQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBtZXNzYWdlKCdBbiBlcnJvciBvY2N1cnJlZDotKScpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZ2VubW9kdWxlLndyaXRlKGZwLCBtKQotICAgICAgICBmcC5jbG9zZSgpCi0KLWNsYXNzIFVJX21vZHVsZToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50KToKLSAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKLSAgICAgICAgc2VsZi5mcmFtZSA9IEZyYW1lKHBhcmVudC5vYmpmcmFtZSwgeydyZWxpZWYnOidyYWlzZWQnLCAnYmQnOicwLjJtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzondG9wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5mMSA9IEZyYW1lKHNlbGYuZnJhbWUsIHtQYWNrOnsnc2lkZSc6J3RvcCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotICAgICAgICBzZWxmLmYyID0gRnJhbWUoc2VsZi5mcmFtZSwge1BhY2s6eydzaWRlJzondG9wJywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0gICAgICAgIHNlbGYuZjMgPSBGcmFtZShzZWxmLmZyYW1lLCB7UGFjazp7J3NpZGUnOid0b3AnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5mNCA9IEZyYW1lKHNlbGYuZnJhbWUsIHtQYWNrOnsnc2lkZSc6J3RvcCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotCi0gICAgICAgIHNlbGYubDEgPSBMYWJlbChzZWxmLmYxLCB7J3RleHQnOidNb2R1bGU6JywgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLm5hbWVfZW50cnkgPSBFbnRyeShzZWxmLmYxLCB7J3JlbGllZic6J3N1bmtlbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeCc6JzAuNW0nLCAnZXhwYW5kJzoxfX0pCi0gICAgICAgIHNlbGYubDIgPSBMYWJlbChzZWxmLmYxLCB7J3RleHQnOidBYmJyZXY6JywgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLmFiYnJldl9lbnRyeSA9IEVudHJ5KHNlbGYuZjEsIHsncmVsaWVmJzonc3Vua2VuJywgJ3dpZHRoJzo1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHgnOicwLjVtJ319KQotCi0gICAgICAgIHNlbGYubDMgPSBMYWJlbChzZWxmLmYyLCB7J3RleHQnOidNZXRob2RzOicsIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5tZXRob2RfbGlzdCA9IFNjcm9sbGVkTGlzdGJveChzZWxmLmYyLCB7J3JlbGllZic6J3N1bmtlbicsJ2JkJzoyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAnZXhwYW5kJzoxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nLCAnZmlsbCc6J2JvdGgnfX0pCi0KLSAgICAgICAgc2VsZi5sNCA9IExhYmVsKHNlbGYuZjMsIHsndGV4dCc6J0FkZCBtZXRob2Q6JywgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLm1ldGhvZF9lbnRyeSA9IEVudHJ5KHNlbGYuZjMsIHsncmVsaWVmJzonc3Vua2VuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHgnOicwLjVtJywgJ2V4cGFuZCc6MX19KQotICAgICAgICBzZWxmLm1ldGhvZF9lbnRyeS5iaW5kKCc8UmV0dXJuPicsIHNlbGYuY2JfbWV0aG9kKQotICAgICAgICBzZWxmLmRlbGV0ZV9idXR0b24gPSBCdXR0b24oc2VsZi5mMywgeyd0ZXh0JzonRGVsZXRlIG1ldGhvZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1hbmQnOnNlbGYuY2JfZGVsbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotCi0gICAgICAgIHNlbGYubmV3b2JqX2J1dHRvbiA9IEJ1dHRvbihzZWxmLmY0LCB7J3RleHQnOiduZXcgb2JqZWN0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCc6c2VsZi5jYl9uZXdvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0KLSAgICBkZWYgY2JfZGVsbWV0aG9kKHNlbGYsICphcmdzKToKLSAgICAgICAgbGlzdCA9IHNlbGYubWV0aG9kX2xpc3QuY3Vyc2VsZWN0aW9uKCkKLSAgICAgICAgZm9yIGkgaW4gbGlzdDoKLSAgICAgICAgICAgIHNlbGYubWV0aG9kX2xpc3QuZGVsZXRlKGkpCi0KLSAgICBkZWYgY2JfbmV3b2JqKHNlbGYsICphcmcpOgotICAgICAgICBzZWxmLnBhcmVudC5vYmplY3RzLmFwcGVuZChVSV9vYmplY3Qoc2VsZi5wYXJlbnQpKQotCi0gICAgZGVmIGNiX21ldGhvZChzZWxmLCAqYXJnKToKLSAgICAgICAgbmFtZSA9IHNlbGYubWV0aG9kX2VudHJ5LmdldCgpCi0gICAgICAgIGlmIG5vdCBuYW1lOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYubWV0aG9kX2VudHJ5LmRlbGV0ZSgnMCcsICdlbmQnKQotICAgICAgICBzZWxmLm1ldGhvZF9saXN0Lmluc2VydCgnZW5kJywgbmFtZSkKLQotICAgIGRlZiBzeW5jaHJvbml6ZShzZWxmKToKLSAgICAgICAgbiA9IHNlbGYubmFtZV9lbnRyeS5nZXQoKQotICAgICAgICBpZiBub3QgbjoKLSAgICAgICAgICAgIG1lc3NhZ2UoJ01vZHVsZSBuYW1lIG5vdCBzZXQnKQotICAgICAgICAgICAgcmFpc2Ugb29wcwotICAgICAgICBpZiBub3QgY2hlY2tpZChuKToKLSAgICAgICAgICAgIG1lc3NhZ2UoJ01vZHVsZSBuYW1lIG5vdCBhbiBpZGVudGlmaWVyOlxuJytuKQotICAgICAgICAgICAgcmFpc2Ugb29wcwotICAgICAgICBpZiBub3Qgc2VsZi5hYmJyZXZfZW50cnkuZ2V0KCk6Ci0gICAgICAgICAgICBzZWxmLmFiYnJldl9lbnRyeS5pbnNlcnQoJ2VuZCcsIG4pCi0gICAgICAgIG0gPSBnZXRsaXN0bGlzdChzZWxmLm1ldGhvZF9saXN0KQotICAgICAgICBmb3IgbiBpbiBtOgotICAgICAgICAgICAgaWYgbm90IGNoZWNraWQobik6Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSgnTWV0aG9kIG5hbWUgbm90IGFuIGlkZW50aWZpZXI6XG4nK24pCi0gICAgICAgICAgICAgICAgcmFpc2Ugb29wcwotCi0gICAgZGVmIGdlbmNvZGUoc2VsZiwgbmFtZSwgb2JqZWN0cyk6Ci0gICAgICAgIHJ2ID0gJycKLSAgICAgICAgc2VsZi5zeW5jaHJvbml6ZSgpCi0gICAgICAgIGZvciBvIGluIG9iamVjdHM6Ci0gICAgICAgICAgICBvLnN5bmNocm9uaXplKCkKLSAgICAgICAgb25hbWVzID0gW10KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKG9iamVjdHMpKToKLSAgICAgICAgICAgIG9uYW1lID0gJ28lZCcgJSAoaSsxKQotICAgICAgICAgICAgcnYgPSBydiArIG9iamVjdHNbaV0uZ2VuY29kZShvbmFtZSkKLSAgICAgICAgICAgIG9uYW1lcy5hcHBlbmQob25hbWUpCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMgPSBnZW5tb2R1bGUubW9kdWxlKClcbicgJSAobmFtZSwpCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMubmFtZSA9ICVyXG4nICUgKG5hbWUsIHNlbGYubmFtZV9lbnRyeS5nZXQoKSkKLSAgICAgICAgcnYgPSBydiArICclcy5hYmJyZXYgPSAlclxuJyAlIChuYW1lLCBzZWxmLmFiYnJldl9lbnRyeS5nZXQoKSkKLSAgICAgICAgcnYgPSBydiArICclcy5tZXRob2RsaXN0ID0gJXJcbicgJSAobmFtZSwgZ2V0bGlzdGxpc3Qoc2VsZi5tZXRob2RfbGlzdCkpCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMub2JqZWN0cyA9IFslc11cbicgJSAobmFtZSwgJywnLmpvaW4ob25hbWVzKSkKLSAgICAgICAgcnYgPSBydiArICdcbicKLSAgICAgICAgcmV0dXJuIHJ2Ci0KLW9iamVjdF9udW1iZXIgPSAwCi0KLWNsYXNzIFVJX29iamVjdDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50KToKLSAgICAgICAgZ2xvYmFsIG9iamVjdF9udW1iZXIKLQotICAgICAgICBvYmplY3RfbnVtYmVyID0gb2JqZWN0X251bWJlciArIDEKLSAgICAgICAgc2VsZi5udW0gPSBvYmplY3RfbnVtYmVyCi0gICAgICAgIHNlbGYudnByZWYgPSAnbyVyXycgJSBzZWxmLm51bQotICAgICAgICBzZWxmLmZyYW1lID0gVG9wbGV2ZWwocGFyZW50Lm9iamZyYW1lKQotIyAgICAgICBzZWxmLmZyYW1lLnBhY2soKQotICAgICAgICBzZWxmLmZyYW1lLnRpdGxlKCdNb2R1bGF0b3I6IG9iamVjdCB2aWV3JykKLSMgICAgICAgc2VsZi5mcmFtZSA9IEZyYW1lKHBhcmVudC5vYmpmcmFtZSwgeydyZWxpZWYnOidyYWlzZWQnLCAnYmQnOicwLjJtJywKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzondG9wJywKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5mMSA9IEZyYW1lKHNlbGYuZnJhbWUsIHtQYWNrOnsnc2lkZSc6J3RvcCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotICAgICAgICBzZWxmLmYyID0gRnJhbWUoc2VsZi5mcmFtZSwge1BhY2s6eydzaWRlJzondG9wJywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0gICAgICAgIHNlbGYuZjMgPSBGcmFtZShzZWxmLmZyYW1lLCB7UGFjazp7J3NpZGUnOid0b3AnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5mNCA9IEZyYW1lKHNlbGYuZnJhbWUsIHtQYWNrOnsnc2lkZSc6J3RvcCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotCi0KLSAgICAgICAgc2VsZi5sMSA9IExhYmVsKHNlbGYuZjEsIHsndGV4dCc6J09iamVjdDonLCBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYubmFtZV9lbnRyeSA9IEVudHJ5KHNlbGYuZjEsIHsncmVsaWVmJzonc3Vua2VuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdwYWR4JzonMC41bScsICdleHBhbmQnOjF9fSkKLSAgICAgICAgc2VsZi5sMiA9IExhYmVsKHNlbGYuZjEsIHsndGV4dCc6J0FiYnJldjonLCBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYuYWJicmV2X2VudHJ5ID0gRW50cnkoc2VsZi5mMSwgeydyZWxpZWYnOidzdW5rZW4nLCAnd2lkdGgnOjUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeCc6JzAuNW0nfX0pCi0KLSAgICAgICAgc2VsZi5sMyA9IExhYmVsKHNlbGYuZjIsIHsndGV4dCc6J01ldGhvZHM6JywgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLm1ldGhvZF9saXN0ID0gU2Nyb2xsZWRMaXN0Ym94KHNlbGYuZjIsIHsncmVsaWVmJzonc3Vua2VuJywnYmQnOjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdleHBhbmQnOjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bScsICdmaWxsJzonYm90aCd9fSkKLQotICAgICAgICBzZWxmLmw0ID0gTGFiZWwoc2VsZi5mMywgeyd0ZXh0JzonQWRkIG1ldGhvZDonLCBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYubWV0aG9kX2VudHJ5ID0gRW50cnkoc2VsZi5mMywgeydyZWxpZWYnOidzdW5rZW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeCc6JzAuNW0nLCAnZXhwYW5kJzoxfX0pCi0gICAgICAgIHNlbGYubWV0aG9kX2VudHJ5LmJpbmQoJzxSZXR1cm4+Jywgc2VsZi5jYl9tZXRob2QpCi0gICAgICAgIHNlbGYuZGVsZXRlX2J1dHRvbiA9IEJ1dHRvbihzZWxmLmYzLCB7J3RleHQnOidEZWxldGUgbWV0aG9kJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCc6c2VsZi5jYl9kZWxtZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0KLQotICAgICAgICBzZWxmLmw1ID0gTGFiZWwoc2VsZi5mNCwgeyd0ZXh0JzonZnVuY3Rpb25zOicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYuZjUgPSBGcmFtZShzZWxmLmY0LCB7UGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J2JvdGgnfX0pCi0gICAgICAgIHNlbGYubDYgPSBMYWJlbChzZWxmLmY0LCB7J3RleHQnOidUeXBlczonLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5mNiA9IEZyYW1lKHNlbGYuZjQsIHtQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5mdW5jcyA9IHt9Ci0gICAgICAgIGZvciBpIGluIGdlbm1vZHVsZS5GVU5DTElTVDoKLSAgICAgICAgICAgIHZuYW1lID0gc2VsZi52cHJlZitpCi0gICAgICAgICAgICBzZWxmLmY1LnNldHZhcih2bmFtZSwgMCkKLSAgICAgICAgICAgIGIgPSBDaGVja2J1dHRvbihzZWxmLmY1LCB7J3ZhcmlhYmxlJzp2bmFtZSwgJ3RleHQnOmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzondG9wJywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuY2hvcic6J3cnLCdleHBhbmQnOjF9fSkKLSAgICAgICAgICAgIHNlbGYuZnVuY3NbaV0gPSBiCi0gICAgICAgIHNlbGYuZjUuc2V0dmFyKHNlbGYudnByZWYrJ25ldycsIDEpCi0KLSAgICAgICAgc2VsZi50eXBlcyA9IHt9Ci0gICAgICAgIGZvciBpIGluIGdlbm1vZHVsZS5UWVBFTElTVDoKLSAgICAgICAgICAgIHZuYW1lID0gc2VsZi52cHJlZiArIGkKLSAgICAgICAgICAgIHNlbGYuZjYuc2V0dmFyKHZuYW1lLCAwKQotICAgICAgICAgICAgYiA9IENoZWNrYnV0dG9uKHNlbGYuZjYsIHsndmFyaWFibGUnOnZuYW1lLCAndGV4dCc6aSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOid0b3AnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5jaG9yJzondyd9fSkKLSAgICAgICAgICAgIHNlbGYudHlwZXNbaV0gPSBiCi0KLSAgICBkZWYgY2JfbWV0aG9kKHNlbGYsICphcmcpOgotICAgICAgICBuYW1lID0gc2VsZi5tZXRob2RfZW50cnkuZ2V0KCkKLSAgICAgICAgaWYgbm90IG5hbWU6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5tZXRob2RfZW50cnkuZGVsZXRlKCcwJywgJ2VuZCcpCi0gICAgICAgIHNlbGYubWV0aG9kX2xpc3QuaW5zZXJ0KCdlbmQnLCBuYW1lKQotCi0gICAgZGVmIGNiX2RlbG1ldGhvZChzZWxmLCAqYXJncyk6Ci0gICAgICAgIGxpc3QgPSBzZWxmLm1ldGhvZF9saXN0LmN1cnNlbGVjdGlvbigpCi0gICAgICAgIGZvciBpIGluIGxpc3Q6Ci0gICAgICAgICAgICBzZWxmLm1ldGhvZF9saXN0LmRlbGV0ZShpKQotCi0gICAgZGVmIHN5bmNocm9uaXplKHNlbGYpOgotICAgICAgICBuID0gc2VsZi5uYW1lX2VudHJ5LmdldCgpCi0gICAgICAgIGlmIG5vdCBuOgotICAgICAgICAgICAgbWVzc2FnZSgnT2JqZWN0IG5hbWUgbm90IHNldCcpCi0gICAgICAgICAgICByYWlzZSBvb3BzCi0gICAgICAgIGlmIG5vdCBzZWxmLmFiYnJldl9lbnRyeS5nZXQoKToKLSAgICAgICAgICAgIHNlbGYuYWJicmV2X2VudHJ5Lmluc2VydCgnZW5kJywgbikKLSAgICAgICAgbiA9IHNlbGYuYWJicmV2X2VudHJ5LmdldCgpCi0gICAgICAgIGlmIG5vdCBjaGVja2lkKG4pOgotICAgICAgICAgICAgbWVzc2FnZSgnQWJicmV2aWF0aW9uIG5vdCBhbiBpZGVudGlmaWVyOlxuJytuKQotICAgICAgICAgICAgcmFpc2Ugb29wcwotICAgICAgICBtID0gZ2V0bGlzdGxpc3Qoc2VsZi5tZXRob2RfbGlzdCkKLSAgICAgICAgZm9yIG4gaW4gbToKLSAgICAgICAgICAgIGlmIG5vdCBjaGVja2lkKG4pOgotICAgICAgICAgICAgICAgIG1lc3NhZ2UoJ01ldGhvZCBuYW1lIG5vdCBhbiBpZGVudGlmaWVyOlxuJytuKQotICAgICAgICAgICAgICAgIHJhaXNlIG9vcHMKLSAgICAgICAgaWYgbToKLSAgICAgICAgICAgIHNlbGYuZjUuc2V0dmFyKHNlbGYudnByZWYrJ3RwX2dldGF0dHInLCAxKQotICAgICAgICBwYXNzCi0KLSAgICBkZWYgZ2VuY29kZShzZWxmLCBuYW1lKToKLSAgICAgICAgcnYgPSAnJwotICAgICAgICBydiA9IHJ2ICsgJyVzID0gZ2VubW9kdWxlLm9iamVjdCgpXG4nICUgKG5hbWUsKQotICAgICAgICBydiA9IHJ2ICsgJyVzLm5hbWUgPSAlclxuJyAlIChuYW1lLCBzZWxmLm5hbWVfZW50cnkuZ2V0KCkpCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMuYWJicmV2ID0gJXJcbicgJSAobmFtZSwgc2VsZi5hYmJyZXZfZW50cnkuZ2V0KCkpCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMubWV0aG9kbGlzdCA9ICVyXG4nICUgKG5hbWUsIGdldGxpc3RsaXN0KHNlbGYubWV0aG9kX2xpc3QpKQotICAgICAgICBmbCA9IFtdCi0gICAgICAgIGZvciBmbiBpbiBnZW5tb2R1bGUuRlVOQ0xJU1Q6Ci0gICAgICAgICAgICB2bmFtZSA9IHNlbGYudnByZWYgKyBmbgotICAgICAgICAgICAgaWYgc2VsZi5mNS5nZXR2YXIodm5hbWUpID09ICcxJzoKLSAgICAgICAgICAgICAgICBmbC5hcHBlbmQoZm4pCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMuZnVuY2xpc3QgPSAlclxuJyAlIChuYW1lLCBmbCkKLQotICAgICAgICBmbCA9IFtdCi0gICAgICAgIGZvciBmbiBpbiBnZW5tb2R1bGUuVFlQRUxJU1Q6Ci0gICAgICAgICAgICB2bmFtZSA9IHNlbGYudnByZWYgKyBmbgotICAgICAgICAgICAgaWYgc2VsZi5mNS5nZXR2YXIodm5hbWUpID09ICcxJzoKLSAgICAgICAgICAgICAgICBmbC5hcHBlbmQoZm4pCi0KLSAgICAgICAgcnYgPSBydiArICclcy50eXBlbGlzdCA9ICVyXG4nICUgKG5hbWUsIGZsKQotCi0gICAgICAgIHJ2ID0gcnYgKyAnXG4nCi0gICAgICAgIHJldHVybiBydgotCi0KLWRlZiBtYWluKCk6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA8IDI6Ci0gICAgICAgIHVpID0gVUkoKQotICAgICAgICB1aS5ydW4oKQotICAgIGVsaWYgbGVuKHN5cy5hcmd2KSA9PSAyOgotICAgICAgICBmcCA9IG9wZW4oc3lzLmFyZ3ZbMV0pCi0gICAgICAgIHB5Y29kZSA9IGZwLnJlYWQoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBleGVjIHB5Y29kZQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdBbiBlcnJvciBvY2N1cnJlZDotKVxuJykKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgICAgICMjZ2VubW9kdWxlLndyaXRlKHN5cy5zdGRvdXQsIG0pCi0gICAgZWxzZToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnVXNhZ2U6IG1vZHVsYXRvciBbZmlsZV1cbicpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL3ZhcnN1YnN0LnB5IGIvVG9vbHMvbW9kdWxhdG9yL3ZhcnN1YnN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjMzOTUwLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci92YXJzdWJzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMKLSMgVmFyaWFibGUgc3Vic3RpdHV0aW9uLiBWYXJpYWJsZXMgYXJlICRkZWxpbWl0ZWQkCi0jCi1pbXBvcnQgcmUKLQotZXJyb3IgPSAndmFyc3Vic3QuZXJyb3InCi0KLWNsYXNzIFZhcnN1YnN0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaWN0KToKLSAgICAgICAgc2VsZi5kaWN0ID0gZGljdAotICAgICAgICBzZWxmLnByb2cgPSByZS5jb21waWxlKCdcJChbYS16QS1aMC05X10qKVwkJykKLSAgICAgICAgc2VsZi5kb191c2VpbmRlbnQgPSAwCi0KLSAgICBkZWYgdXNlaW5kZW50KHNlbGYsIG9ub2ZmKToKLSAgICAgICAgc2VsZi5kb191c2VpbmRlbnQgPSBvbm9mZgotCi0gICAgZGVmIHN1YnN0KHNlbGYsIHMpOgotICAgICAgICBydiA9ICcnCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBtID0gc2VsZi5wcm9nLnNlYXJjaChzKQotICAgICAgICAgICAgaWYgbm90IG06Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJ2ICsgcwotICAgICAgICAgICAgcnYgPSBydiArIHNbOm0uc3RhcnQoKV0KLSAgICAgICAgICAgIHMgPSBzW20uZW5kKCk6XQotICAgICAgICAgICAgaWYgbS5lbmQoKSAtIG0uc3RhcnQoKSA9PSAyOgotICAgICAgICAgICAgICAgICMgRXNjYXBlZCBkb2xsYXIKLSAgICAgICAgICAgICAgICBydiA9IHJ2ICsgJyQnCi0gICAgICAgICAgICAgICAgcyA9IHNbMjpdCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIG5hbWUgPSBtLmdyb3VwKDEpCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5kaWN0Lmhhc19rZXkobmFtZSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IsICdObyBzdWNoIHZhcmlhYmxlOiAnK25hbWUKLSAgICAgICAgICAgIHZhbHVlID0gc2VsZi5kaWN0W25hbWVdCi0gICAgICAgICAgICBpZiBzZWxmLmRvX3VzZWluZGVudCBhbmQgJ1xuJyBpbiB2YWx1ZToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX21vZGluZGVudCh2YWx1ZSwgcnYpCi0gICAgICAgICAgICBydiA9IHJ2ICsgdmFsdWUKLQotICAgIGRlZiBfbW9kaW5kZW50KHNlbGYsIHZhbHVlLCBvbGQpOgotICAgICAgICBsYXN0bmwgPSBvbGQucmZpbmQoJ1xuJywgMCkgKyAxCi0gICAgICAgIGxhc3RubCA9IGxlbihvbGQpIC0gbGFzdG5sCi0gICAgICAgIHN1YiA9ICdcbicgKyAoJyAnKmxhc3RubCkKLSAgICAgICAgcmV0dXJuIHJlLnN1YignXG4nLCBzdWIsIHZhbHVlKQotCi1kZWYgX3Rlc3QoKToKLSAgICBpbXBvcnQgc3lzCi0gICAgaW1wb3J0IG9zCi0KLSAgICBzeXMuc3RkZXJyLndyaXRlKCctLSBDb3B5aW5nIHN0ZGluIHRvIHN0ZG91dCB3aXRoIGVudmlyb25tZW50IG1hcCAtLVxuJykKLSAgICBjID0gVmFyc3Vic3Qob3MuZW52aXJvbikKLSAgICBjLnVzZWluZGVudCgxKQotICAgIGQgPSBzeXMuc3RkaW4ucmVhZCgpCi0gICAgc3lzLnN0ZG91dC53cml0ZShjLnN1YnN0KGQpKQotICAgIHN5cy5leGl0KDEpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgX3Rlc3QoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL21lcmdlLnB5IGIvVG9vbHMvbXNpL21lcmdlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWRlMjA5Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21zaS9tZXJnZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLWltcG9ydCBtc2lsaWIsb3Msd2luMzJjb20sdGVtcGZpbGUsc3lzCi1QQ0JVSUxEPSJQQ0J1aWxkIgotY2VydG5hbWUgPSBOb25lCi1mcm9tIGNvbmZpZyBpbXBvcnQgKgotCi1XaW42NCA9ICJhbWQ2NCIgaW4gUENCVUlMRAotCi1tb2RfZGlyID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIlByb2dyYW1GaWxlcyJdLCAiQ29tbW9uIEZpbGVzIiwgIk1lcmdlIE1vZHVsZXMiKQotbXNpID0gTm9uZQotaWYgbGVuKHN5cy5hcmd2KT09MjoKLSAgICBtc2kgPSBzeXMuYXJndlsxXQotaWYgV2luNjQ6Ci0gICAgbW9kdWxlcyA9IFsiTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Nl94NjQubXNtIiwgInBvbGljeV85XzBfTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Nl94NjQubXNtIl0KLSAgICBpZiBub3QgbXNpOiBtc2kgPSAicHl0aG9uLSVzLmFtZDY0Lm1zaSIgJSBmdWxsX2N1cnJlbnRfdmVyc2lvbgotZWxzZToKLSAgICBtb2R1bGVzID0gWyJNaWNyb3NvZnRfVkM5MF9DUlRfeDg2Lm1zbSIsInBvbGljeV85XzBfTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Ni5tc20iXQotICAgIGlmIG5vdCBtc2k6IG1zaSA9ICJweXRob24tJXMubXNpIiAlIGZ1bGxfY3VycmVudF92ZXJzaW9uCi1mb3IgaSwgbiBpbiBlbnVtZXJhdGUobW9kdWxlcyk6Ci0gICAgbW9kdWxlc1tpXSA9IG9zLnBhdGguam9pbihtb2RfZGlyLCBuKQotCi1kZWYgbWVyZ2UobXNpLCBmZWF0dXJlLCByb290ZGlyLCBtb2R1bGVzKToKLSAgICBjYWJfYW5kX2ZpbGVjb3VudCA9IFtdCi0gICAgIyBTdGVwIDE6IE1lcmdlIGRhdGFiYXNlcywgZXh0cmFjdCBjYWJmaWxlcwotICAgIG0gPSBtc2lsaWIuTWFrZU1lcmdlMigpCi0gICAgbS5PcGVuTG9nKCJtZXJnZS5sb2ciKQotICAgIHByaW50ICJPcGVuZWQgTG9nIgotICAgIG0uT3BlbkRhdGFiYXNlKG1zaSkKLSAgICBwcmludCAiT3BlbmVkIERCIgotICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKLSAgICAgICAgcHJpbnQgbW9kdWxlCi0gICAgICAgIG0uT3Blbk1vZHVsZShtb2R1bGUsMCkKLSAgICAgICAgcHJpbnQgIk9wZW5lZCBNb2R1bGUiLG1vZHVsZQotICAgICAgICBtLk1lcmdlKGZlYXR1cmUsIHJvb3RkaXIpCi0gICAgICAgIHByaW50ICJFcnJvcnM6IgotICAgICAgICBmb3IgZSBpbiBtLkVycm9yczoKLSAgICAgICAgICAgIHByaW50IGUuVHlwZSwgZS5Nb2R1bGVUYWJsZSwgZS5EYXRhYmFzZVRhYmxlCi0gICAgICAgICAgICBwcmludCAiICAgTW9ka2V5czoiLAotICAgICAgICAgICAgZm9yIHMgaW4gZS5Nb2R1bGVLZXlzOiBwcmludCBzLAotICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgIHByaW50ICIgICBEQktleXM6IiwKLSAgICAgICAgICAgIGZvciBzIGluIGUuRGF0YWJhc2VLZXlzOiBwcmludCBzLAotICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgY2FibmFtZSA9IHRlbXBmaWxlLm1rdGVtcChzdWZmaXg9Ii5jYWIiKQotICAgICAgICBtLkV4dHJhY3RDQUIoY2FibmFtZSkKLSAgICAgICAgY2FiX2FuZF9maWxlY291bnQuYXBwZW5kKChjYWJuYW1lLCBsZW4obS5Nb2R1bGVGaWxlcykpKQotICAgICAgICBtLkNsb3NlTW9kdWxlKCkKLSAgICBtLkNsb3NlRGF0YWJhc2UoVHJ1ZSkKLSAgICBtLkNsb3NlTG9nKCkKLQotICAgICMgU3RlcCAyOiBBZGQgQ0FCIGZpbGVzCi0gICAgaSA9IG1zaWxpYi5NYWtlSW5zdGFsbGVyKCkKLSAgICBkYiA9IGkuT3BlbkRhdGFiYXNlKG1zaSwgd2luMzJjb20uY2xpZW50LmNvbnN0YW50cy5tc2lPcGVuRGF0YWJhc2VNb2RlVHJhbnNhY3QpCi0KLSAgICB2ID0gZGIuT3BlblZpZXcoIlNFTEVDVCBMYXN0U2VxdWVuY2UgRlJPTSBNZWRpYSIpCi0gICAgdi5FeGVjdXRlKE5vbmUpCi0gICAgbWF4bWVkaWEgPSAtMQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHIgPSB2LkZldGNoKCkKLSAgICAgICAgaWYgbm90IHI6IGJyZWFrCi0gICAgICAgIHNlcSA9IHIuSW50ZWdlckRhdGEoMSkKLSAgICAgICAgaWYgc2VxID4gbWF4bWVkaWE6Ci0gICAgICAgICAgICBtYXhtZWRpYSA9IHNlcQotICAgIHByaW50ICJTdGFydCBvZiBNZWRpYSIsIG1heG1lZGlhCi0KLSAgICBmb3IgY2FibmFtZSwgY291bnQgaW4gY2FiX2FuZF9maWxlY291bnQ6Ci0gICAgICAgIHN0cmVhbSA9ICJtZXJnZWQlZCIgJSBtYXhtZWRpYQotICAgICAgICBtc2lsaWIuYWRkX2RhdGEoZGIsICJNZWRpYSIsCi0gICAgICAgICAgICAgICAgWyhtYXhtZWRpYSsxLCBtYXhtZWRpYStjb3VudCwgTm9uZSwgIiMiK3N0cmVhbSwgTm9uZSwgTm9uZSldKQotICAgICAgICBtc2lsaWIuYWRkX3N0cmVhbShkYiwgc3RyZWFtLCAgY2FibmFtZSkKLSAgICAgICAgb3MudW5saW5rKGNhYm5hbWUpCi0gICAgICAgIG1heG1lZGlhICs9IGNvdW50Ci0gICAgIyBUaGUgbWVyZ2UgbW9kdWxlIHNldHMgQUxMVVNFUlMgdG8gMSBpbiB0aGUgcHJvcGVydHkgdGFibGUuIAotICAgICMgVGhpcyBpcyB1bmRlc2lyZWQ7IGRlbGV0ZSB0aGF0Ci0gICAgdiA9IGRiLk9wZW5WaWV3KCJERUxFVEUgRlJPTSBQcm9wZXJ0eSBXSEVSRSBQcm9wZXJ0eT0nQUxMVVNFUlMnIikKLSAgICB2LkV4ZWN1dGUoTm9uZSkKLSAgICB2LkNsb3NlKCkKLSAgICBkYi5Db21taXQoKQotCi1tZXJnZShtc2ksICJTaGFyZWRDUlQiLCAiVEFSR0VURElSIiwgbW9kdWxlcykKLQotIyBjZXJ0bmFtZSAoZnJvbSBjb25maWcucHkpIHNob3VsZCBiZSAoYSBzdWJzdHJpbmcgb2YpCi0jIHRoZSBjZXJ0aWZpY2F0ZSBzdWJqZWN0LCBlLmcuICJQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiIKLWlmIGNlcnRuYW1lOgotICAgIG9zLnN5c3RlbSgnc2lnbnRvb2wgc2lnbiAvbiAiJXMiIC90IGh0dHA6Ly90aW1lc3RhbXAudmVyaXNpZ24uY29tL3NjcmlwdHMvdGltZXN0YW1wLmRsbCAlcycgJSAoY2VydG5hbWUsIG1zaSkpCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbXNpLnB5IGIvVG9vbHMvbXNpL21zaS5weQppbmRleCBjNWU2MzBiLi5hMWY2N2I4IDEwMDY0NAotLS0gYS9Ub29scy9tc2kvbXNpLnB5CisrKyBiL1Rvb2xzL21zaS9tc2kucHkKQEAgLTEsMTIgKzEsMTMgQEAKICMgUHl0aG9uIE1TSSBHZW5lcmF0b3IKICMgKEMpIDIwMDMgTWFydGluIHYuIExvZXdpcwogIyBTZWUgIkZPTyIgaW4gY29tbWVudHMgcmVmZXJzIHRvIE1TRE4gc2VjdGlvbnMgd2l0aCB0aGUgdGl0bGUgRk9PLgotaW1wb3J0IG1zaWxpYiwgc2NoZW1hLCBzZXF1ZW5jZSwgb3MsIGdsb2IsIHRpbWUsIHJlLCBzaHV0aWwKK2ltcG9ydCBtc2lsaWIsIHNjaGVtYSwgc2VxdWVuY2UsIG9zLCBnbG9iLCB0aW1lLCByZSwgc2h1dGlsLCB6aXBmaWxlCiBmcm9tIG1zaWxpYiBpbXBvcnQgRmVhdHVyZSwgQ0FCLCBEaXJlY3RvcnksIERpYWxvZywgQmluYXJ5LCBhZGRfZGF0YQogaW1wb3J0IHVpc2FtcGxlCiBmcm9tIHdpbjMyY29tLmNsaWVudCBpbXBvcnQgY29uc3RhbnRzCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCiBmcm9tIHV1aWRzIGltcG9ydCBwcm9kdWN0X2NvZGVzCitpbXBvcnQgdGVtcGZpbGUKIAogIyBTZXR0aW5ncyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBjb25maWcucHkgYmVsb3cKICMgMCBmb3Igb2ZmaWNpYWwgcHl0aG9uLm9yZyByZWxlYXNlcwpAQCAtMjgsNiArMjksMTAgQEAKIFBDQlVJTEQ9IlBDYnVpbGQiCiAjIG1zdmNydCB2ZXJzaW9uCiBNU1ZDUiA9ICI5MCIKKyMgTmFtZSBvZiBjZXJ0aWZpY2F0ZSBpbiBkZWZhdWx0IHN0b3JlIHRvIHNpZ24gTVNJIHdpdGgKK2NlcnRuYW1lID0gTm9uZQorIyBNYWtlIGEgemlwIGZpbGUgY29udGFpbmluZyB0aGUgUERCIGZpbGVzIGZvciB0aGlzIGJ1aWxkPworcGRiemlwID0gVHJ1ZQogCiB0cnk6CiAgICAgZnJvbSBjb25maWcgaW1wb3J0ICoKQEAgLTExMSwxNCArMTE2LDE4IEBACiAgICAgIjI0IjoiezlCODFFNjE4LTIzMDEtNDAzNS1BQzc3LTc1RDlBQkVCNzMwMX0iLAogICAgICIyNSI6InsyZTQxYjExOC0zOGJkLTRjMWItYTg0MC02OTc3ZWZkMWI5MTF9IiwKICAgICAiMjYiOiJ7MzRlYmVjYWMtZjA0Ni00ZTFjLWIwZTMtOWJhYzNjZGFhY2ZhfSIsCisgICAgIjI3IjoiezRmZTIxYzc2LTE3NjAtNDM3Yi1hMmYyLTk5OTA5MTMwYTE3NX0iLAogICAgIH0gW21ham9yK21pbm9yXQogCiAjIENvbXB1dGUgdGhlIG5hbWUgdGhhdCBTcGhpbnggZ2l2ZXMgdG8gdGhlIGRvY2ZpbGUKIGRvY2ZpbGUgPSAiIgotaWYgbWljcm86Ci0gICAgZG9jZmlsZSA9IHN0cihtaWNybykKK2lmIGludChtaWNybyk6CisgICAgZG9jZmlsZSA9IG1pY3JvCiBpZiBsZXZlbCA8IDB4ZjoKLSAgICBkb2NmaWxlICs9ICcleCVzJyAlIChsZXZlbCwgc2VyaWFsKQorICAgIGlmIGxldmVsID09IDB4QzoKKyAgICAgICAgZG9jZmlsZSArPSAicmMlcyIgJSAoc2VyaWFsLCkKKyAgICBlbHNlOgorICAgICAgICBkb2NmaWxlICs9ICcleCVzJyAlIChsZXZlbCwgc2VyaWFsKQogZG9jZmlsZSA9ICdweXRob24lcyVzJXMuY2htJyAlIChtYWpvciwgbWlub3IsIGRvY2ZpbGUpCiAKICMgQnVpbGQgdGhlIG1pbmd3IGltcG9ydCBsaWJyYXJ5LCBsaWJweXRob25YWS5hCkBAIC0yMTQsNyArMjIzLDggQEAKICAgICAjIHNjaGVtYSByZXByZXNlbnRzIHRoZSBpbnN0YWxsZXIgMi4wIGRhdGFiYXNlIHNjaGVtYS4KICAgICAjIHNlcXVlbmNlIGlzIHRoZSBzZXQgb2Ygc3RhbmRhcmQgc2VxdWVuY2VzCiAgICAgIyAodWkvZXhlY3V0ZSwgYWRtaW4vYWR2dC9pbnN0YWxsKQotICAgIGRiID0gbXNpbGliLmluaXRfZGF0YWJhc2UoInB5dGhvbi0lcyVzLm1zaSIgJSAoZnVsbF9jdXJyZW50X3ZlcnNpb24sIG1zaWxpYi5hcmNoX2V4dCksCisgICAgbXNpbmFtZSA9ICJweXRob24tJXMlcy5tc2kiICUgKGZ1bGxfY3VycmVudF92ZXJzaW9uLCBtc2lsaWIuYXJjaF9leHQpCisgICAgZGIgPSBtc2lsaWIuaW5pdF9kYXRhYmFzZShtc2luYW1lLAogICAgICAgICAgICAgICAgICAgc2NoZW1hLCBQcm9kdWN0TmFtZT0iUHl0aG9uICIrZnVsbF9jdXJyZW50X3ZlcnNpb24rcHJvZHVjdHN1ZmZpeCwKICAgICAgICAgICAgICAgICAgIFByb2R1Y3RDb2RlPXByb2R1Y3RfY29kZSwKICAgICAgICAgICAgICAgICAgIFByb2R1Y3RWZXJzaW9uPWN1cnJlbnRfdmVyc2lvbiwKQEAgLTIzNyw3ICsyNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJQcm9kdWN0TGluZSIsICJQeXRob24lcyVzIiAlIChtYWpvciwgbWlub3IpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICBkYi5Db21taXQoKQotICAgIHJldHVybiBkYgorICAgIHJldHVybiBkYiwgbXNpbmFtZQogCiBkZWYgcmVtb3ZlX29sZF92ZXJzaW9ucyhkYik6CiAgICAgIkZpbGwgdGhlIHVwZ3JhZGUgdGFibGUuIgpAQCAtMzk4LDcgKzQwOCw3IEBACiAgICAgICAgICAgICAgICgiVmVyZGFuYVJlZDkiLCAiVmVyZGFuYSIsIDksIDI1NSwgMCksCiAgICAgICAgICAgICAgXSkKIAotICAgIGNvbXBpbGVhcmdzID0gcictV2kgIltUQVJHRVRESVJdTGliXGNvbXBpbGVhbGwucHkiIC1mIC14ICJiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfHB5M198cHkyX3Rlc3RfZ3JhbW1hciIgIltUQVJHRVRESVJdTGliIicKKyAgICBjb21waWxlYXJncyA9IHInLVdpICJbVEFSR0VURElSXUxpYlxjb21waWxlYWxsLnB5IiAtZiAteCAiYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xweTNfIiAiW1RBUkdFVERJUl1MaWIiJwogICAgIGxpYjJ0bzNhcmdzID0gcictYyAiaW1wb3J0IGxpYjJ0bzMucHlncmFtLCBsaWIydG8zLnBhdGNvbXA7bGliMnRvMy5wYXRjb21wLlBhdHRlcm5Db21waWxlcigpIicKICAgICAjIFNlZSAiQ3VzdG9tQWN0aW9uIFRhYmxlIgogICAgIGFkZF9kYXRhKGRiLCAiQ3VzdG9tQWN0aW9uIiwgWwpAQCAtNDk1LDkgKzUwNSw5IEBACiAgICAgICAiICAgIHdvdWxkIHN0aWxsIGJlIFB5dGhvbiBmb3IgRE9TLiIpCiAKICAgICBjID0gZXhpdF9kaWFsb2cudGV4dCgid2FybmluZyIsIDEzNSwgMjAwLCAyMjAsIDQwLCAweDMwMDAzLAotICAgICAgICAgICAgIntcXFZlcmRhbmFSZWQ5fVdhcm5pbmc6IFB5dGhvbiAyLjUueCBpcyB0aGUgbGFzdCAiCi0gICAgICAgICAgICAiUHl0aG9uIHJlbGVhc2UgZm9yIFdpbmRvd3MgOXguIikKLSAgICBjLmNvbmRpdGlvbigiSGlkZSIsICJOT1QgVmVyc2lvbjlYIikKKyAgICAgICAgICAgICJ7XFxWZXJkYW5hUmVkOX1XYXJuaW5nOiBQeXRob24gMi43LnggaXMgdGhlIGxhc3QgIgorICAgICAgICAgICAgIlB5dGhvbiByZWxlYXNlIGZvciBXaW5kb3dzIDIwMDAuIikKKyAgICBjLmNvbmRpdGlvbigiSGlkZSIsICJWZXJzaW9uTlQgPiA1MDAiKQogCiAgICAgZXhpdF9kaWFsb2cudGV4dCgiRGVzY3JpcHRpb24iLCAxMzUsIDIzNSwgMjIwLCAyMCwgMHgzMDAwMywKICAgICAgICAgICAgICAgICJDbGljayB0aGUgRmluaXNoIGJ1dHRvbiB0byBleGl0IHRoZSBJbnN0YWxsZXIuIikKQEAgLTEwMDEsOCArMTAxMSw2IEBACiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoImF1ZGlvdGVzdC5hdSIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoImNmZ3BhcnNlci4xIikKICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgic2dtbF9pbnB1dC5odG1sIikKLSAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgidGVzdC54bWwiKQotICAgICAgICAgICAgbGliLmFkZF9maWxlKCJ0ZXN0LnhtbC5vdXQiKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJ0ZXN0dGFyLnRhciIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInRlc3RfZGlmZmxpYl9leHBlY3QuaHRtbCIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoImNoZWNrX3NvdW5kY2FyZC52YnMiKQpAQCAtMTAxMSwxMCArMTAxOSwxNCBAQAogICAgICAgICAgICAgbGliLmdsb2IoIioudXVlIikKICAgICAgICAgICAgIGxpYi5nbG9iKCIqLnBlbSIpCiAgICAgICAgICAgICBsaWIuZ2xvYigiKi5wY2siKQotICAgICAgICAgICAgbGliLmFkZF9maWxlKCJyZWFkbWUudHh0Iiwgc3JjPSJSRUFETUUiKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJ6aXBkaXIuemlwIikKKyAgICAgICAgaWYgZGlyPT0ndGVzdHMnIGFuZCBwYXJlbnQucGh5c2ljYWw9PSdkaXN0dXRpbHMnOgorICAgICAgICAgICAgbGliLmFkZF9maWxlKCJTZXR1cC5zYW1wbGUiKQogICAgICAgICBpZiBkaXI9PSdkZWNpbWFsdGVzdGRhdGEnOgogICAgICAgICAgICAgbGliLmdsb2IoIiouZGVjVGVzdCIpCisgICAgICAgIGlmIGRpcj09J3htbHRlc3RkYXRhJzoKKyAgICAgICAgICAgIGxpYi5nbG9iKCIqLnhtbCIpCisgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInRlc3QueG1sLm91dCIpCiAgICAgICAgIGlmIGRpcj09J291dHB1dCc6CiAgICAgICAgICAgICBsaWIuZ2xvYigidGVzdF8qIikKICAgICAgICAgaWYgZGlyPT0naWRsZWxpYic6CkBAIC0xMTg3LDEwICsxMTk5LDEwIEBACiAgICAgaWYgaGF2ZV90Y2w6CiAgICAgICAgIHRjbF92ZXJicz1bCiAgICAgICAgICAgICAgKCJweS5JRExFIiwgLTEsIHBhdCAlICh0ZXN0cHJlZml4LCAiIiwgZXdpKSwgIiIsCi0gICAgICAgICAgICAgIHInIltUQVJHRVRESVJdcHl0aG9udy5leGUiICJbVEFSR0VURElSXUxpYlxpZGxlbGliXGlkbGUucHl3IiAtbiAtZSAiJTEiJywKKyAgICAgICAgICAgICAgciciW1RBUkdFVERJUl1weXRob253LmV4ZSIgIltUQVJHRVRESVJdTGliXGlkbGVsaWJcaWRsZS5weXciIC1lICIlMSInLAogICAgICAgICAgICAgICAiUkVHSVNUUlkudGNsIiksCiAgICAgICAgICAgICAgKCJweXcuSURMRSIsIC0xLCBwYXQgJSAodGVzdHByZWZpeCwgIk5vQ29uIiwgZXdpKSwgIiIsCi0gICAgICAgICAgICAgIHInIltUQVJHRVRESVJdcHl0aG9udy5leGUiICJbVEFSR0VURElSXUxpYlxpZGxlbGliXGlkbGUucHl3IiAtbiAtZSAiJTEiJywKKyAgICAgICAgICAgICAgciciW1RBUkdFVERJUl1weXRob253LmV4ZSIgIltUQVJHRVRESVJdTGliXGlkbGVsaWJcaWRsZS5weXciIC1lICIlMSInLAogICAgICAgICAgICAgICAiUkVHSVNUUlkudGNsIiksCiAgICAgICAgIF0KICAgICBhZGRfZGF0YShkYiwgIlJlZ2lzdHJ5IiwKQEAgLTEyODksNyArMTMwMSwxNyBAQAogICAgICAgICAgICAgICBdKQogICAgIGRiLkNvbW1pdCgpCiAKLWRiID0gYnVpbGRfZGF0YWJhc2UoKQorZGVmIGJ1aWxkX3BkYnppcCgpOgorICAgIHBkYmV4Y2x1ZGUgPSBbJ2tpbGxfcHl0aG9uLnBkYicsICdtYWtlX2J1aWxkaW5mby5wZGInLAorICAgICAgICAgICAgICAgICAgJ21ha2VfdmVyc2lvbmluZm8ucGRiJ10KKyAgICBwYXRoID0gInB5dGhvbi0lcyVzLXBkYi56aXAiICUgKGZ1bGxfY3VycmVudF92ZXJzaW9uLCBtc2lsaWIuYXJjaF9leHQpCisgICAgcGRiemlwID0gemlwZmlsZS5aaXBGaWxlKHBhdGgsICd3JykKKyAgICBmb3IgZiBpbiBnbG9iLmdsb2IxKG9zLnBhdGguam9pbihzcmNkaXIsIFBDQlVJTEQpLCAiKi5wZGIiKToKKyAgICAgICAgaWYgZiBub3QgaW4gcGRiZXhjbHVkZSBhbmQgbm90IGYuZW5kc3dpdGgoJ19kLnBkYicpOgorICAgICAgICAgICAgcGRiemlwLndyaXRlKG9zLnBhdGguam9pbihzcmNkaXIsIFBDQlVJTEQsIGYpLCBmKQorICAgIHBkYnppcC5jbG9zZSgpCisKK2RiLG1zaW5hbWUgPSBidWlsZF9kYXRhYmFzZSgpCiB0cnk6CiAgICAgYWRkX2ZlYXR1cmVzKGRiKQogICAgIGFkZF91aShkYikKQEAgLTEyOTksMyArMTMyMSw3OCBAQAogICAgIGRiLkNvbW1pdCgpCiBmaW5hbGx5OgogICAgIGRlbCBkYgorCisjIE1lcmdlIENSVCBpbnRvIE1TSSBmaWxlLiBUaGlzIHJlcXVpcmVzIHRoZSBkYXRhYmFzZSB0byBiZSBjbG9zZWQuCittb2RfZGlyID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIlByb2dyYW1GaWxlcyJdLCAiQ29tbW9uIEZpbGVzIiwgIk1lcmdlIE1vZHVsZXMiKQoraWYgbXNpbGliLldpbjY0OgorICAgIG1vZHVsZXMgPSBbIk1pY3Jvc29mdF9WQzkwX0NSVF94ODZfeDY0Lm1zbSIsICJwb2xpY3lfOV8wX01pY3Jvc29mdF9WQzkwX0NSVF94ODZfeDY0Lm1zbSJdCitlbHNlOgorICAgIG1vZHVsZXMgPSBbIk1pY3Jvc29mdF9WQzkwX0NSVF94ODYubXNtIiwicG9saWN5XzlfMF9NaWNyb3NvZnRfVkM5MF9DUlRfeDg2Lm1zbSJdCisKK2ZvciBpLCBuIGluIGVudW1lcmF0ZShtb2R1bGVzKToKKyAgICBtb2R1bGVzW2ldID0gb3MucGF0aC5qb2luKG1vZF9kaXIsIG4pCisKK2RlZiBtZXJnZShtc2ksIGZlYXR1cmUsIHJvb3RkaXIsIG1vZHVsZXMpOgorICAgIGNhYl9hbmRfZmlsZWNvdW50ID0gW10KKyAgICAjIFN0ZXAgMTogTWVyZ2UgZGF0YWJhc2VzLCBleHRyYWN0IGNhYmZpbGVzCisgICAgbSA9IG1zaWxpYi5NYWtlTWVyZ2UyKCkKKyAgICBtLk9wZW5Mb2coIm1lcmdlLmxvZyIpCisgICAgbS5PcGVuRGF0YWJhc2UobXNpKQorICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKKyAgICAgICAgcHJpbnQgbW9kdWxlCisgICAgICAgIG0uT3Blbk1vZHVsZShtb2R1bGUsMCkKKyAgICAgICAgbS5NZXJnZShmZWF0dXJlLCByb290ZGlyKQorICAgICAgICBwcmludCAiRXJyb3JzOiIKKyAgICAgICAgZm9yIGUgaW4gbS5FcnJvcnM6CisgICAgICAgICAgICBwcmludCBlLlR5cGUsIGUuTW9kdWxlVGFibGUsIGUuRGF0YWJhc2VUYWJsZQorICAgICAgICAgICAgcHJpbnQgIiAgIE1vZGtleXM6IiwKKyAgICAgICAgICAgIGZvciBzIGluIGUuTW9kdWxlS2V5czogcHJpbnQgcywKKyAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICBwcmludCAiICAgREJLZXlzOiIsCisgICAgICAgICAgICBmb3IgcyBpbiBlLkRhdGFiYXNlS2V5czogcHJpbnQgcywKKyAgICAgICAgICAgIHByaW50CisgICAgICAgIGNhYm5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoc3VmZml4PSIuY2FiIikKKyAgICAgICAgbS5FeHRyYWN0Q0FCKGNhYm5hbWUpCisgICAgICAgIGNhYl9hbmRfZmlsZWNvdW50LmFwcGVuZCgoY2FibmFtZSwgbGVuKG0uTW9kdWxlRmlsZXMpKSkKKyAgICAgICAgbS5DbG9zZU1vZHVsZSgpCisgICAgbS5DbG9zZURhdGFiYXNlKFRydWUpCisgICAgbS5DbG9zZUxvZygpCisKKyAgICAjIFN0ZXAgMjogQWRkIENBQiBmaWxlcworICAgIGkgPSBtc2lsaWIuTWFrZUluc3RhbGxlcigpCisgICAgZGIgPSBpLk9wZW5EYXRhYmFzZShtc2ksIGNvbnN0YW50cy5tc2lPcGVuRGF0YWJhc2VNb2RlVHJhbnNhY3QpCisKKyAgICB2ID0gZGIuT3BlblZpZXcoIlNFTEVDVCBMYXN0U2VxdWVuY2UgRlJPTSBNZWRpYSIpCisgICAgdi5FeGVjdXRlKE5vbmUpCisgICAgbWF4bWVkaWEgPSAtMQorICAgIHdoaWxlIDE6CisgICAgICAgIHIgPSB2LkZldGNoKCkKKyAgICAgICAgaWYgbm90IHI6IGJyZWFrCisgICAgICAgIHNlcSA9IHIuSW50ZWdlckRhdGEoMSkKKyAgICAgICAgaWYgc2VxID4gbWF4bWVkaWE6CisgICAgICAgICAgICBtYXhtZWRpYSA9IHNlcQorICAgIHByaW50ICJTdGFydCBvZiBNZWRpYSIsIG1heG1lZGlhCisKKyAgICBmb3IgY2FibmFtZSwgY291bnQgaW4gY2FiX2FuZF9maWxlY291bnQ6CisgICAgICAgIHN0cmVhbSA9ICJtZXJnZWQlZCIgJSBtYXhtZWRpYQorICAgICAgICBtc2lsaWIuYWRkX2RhdGEoZGIsICJNZWRpYSIsCisgICAgICAgICAgICAgICAgWyhtYXhtZWRpYSsxLCBtYXhtZWRpYStjb3VudCwgTm9uZSwgIiMiK3N0cmVhbSwgTm9uZSwgTm9uZSldKQorICAgICAgICBtc2lsaWIuYWRkX3N0cmVhbShkYiwgc3RyZWFtLCAgY2FibmFtZSkKKyAgICAgICAgb3MudW5saW5rKGNhYm5hbWUpCisgICAgICAgIG1heG1lZGlhICs9IGNvdW50CisgICAgIyBUaGUgbWVyZ2UgbW9kdWxlIHNldHMgQUxMVVNFUlMgdG8gMSBpbiB0aGUgcHJvcGVydHkgdGFibGUuCisgICAgIyBUaGlzIGlzIHVuZGVzaXJlZDsgZGVsZXRlIHRoYXQKKyAgICB2ID0gZGIuT3BlblZpZXcoIkRFTEVURSBGUk9NIFByb3BlcnR5IFdIRVJFIFByb3BlcnR5PSdBTExVU0VSUyciKQorICAgIHYuRXhlY3V0ZShOb25lKQorICAgIHYuQ2xvc2UoKQorICAgIGRiLkNvbW1pdCgpCisKK21lcmdlKG1zaW5hbWUsICJTaGFyZWRDUlQiLCAiVEFSR0VURElSIiwgbW9kdWxlcykKKworIyBjZXJ0bmFtZSAoZnJvbSBjb25maWcucHkpIHNob3VsZCBiZSAoYSBzdWJzdHJpbmcgb2YpCisjIHRoZSBjZXJ0aWZpY2F0ZSBzdWJqZWN0LCBlLmcuICJQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiIKK2lmIGNlcnRuYW1lOgorICAgIG9zLnN5c3RlbSgnc2lnbnRvb2wgc2lnbiAvbiAiJXMiIC90IGh0dHA6Ly90aW1lc3RhbXAudmVyaXNpZ24uY29tL3NjcmlwdHMvdGltZXN0YW1wLmRsbCAlcycgJSAoY2VydG5hbWUsIG1zaW5hbWUpKQorCitpZiBwZGJ6aXA6CisgICAgYnVpbGRfcGRiemlwKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS91dWlkcy5weSBiL1Rvb2xzL21zaS91dWlkcy5weQppbmRleCA4OTU0OThmLi4xMTYyMDQwIDEwMDY0NAotLS0gYS9Ub29scy9tc2kvdXVpZHMucHkKKysrIGIvVG9vbHMvbXNpL3V1aWRzLnB5CkBAIC03LDIzICs3LDYgQEAKICMgZ2VuZXJhdGVkLiBGb3Igb2ZmaWNpYWwgcmVsZWFzZXMsIHdlIHJlY29yZCB0aGUgcHJvZHVjdCBjb2RlcywKICMgc28gcGVvcGxlIGNhbiByZWZlciB0byB0aGVtLgogcHJvZHVjdF9jb2RlcyA9IHsKLSAgICAnMi40LjEwMSc6ICd7MGU5YjRkOGUtNmNkYS00NDZlLWEyMDgtN2I5MmYzZGRmZmEwfScsICMgMi40YTEsIHJlbGVhc2VkIGFzIGEgc25hcHNob3QKLSAgICAnMi40LjEwMic6ICd7MWI5OTg3NDUtNDkwMS00ZWRiLWJjNTItMjEzNjg5ZTFiOTIyfScsICMgMi40YTIKLSAgICAnMi40LjEwMyc6ICd7MzNmYzhiZDItMWU4Zi00YWRkLWE0MGEtYWRlMjcyOGQ1OTQyfScsICMgMi40YTMKLSAgICAnMi40LjExMSc6ICd7NTFhN2UyYTgtMjAyNS00ZWYwLTg2ZmYtZTZhYWI3NDJkMWZhfScsICMgMi40YjEKLSAgICAnMi40LjExMic6ICd7NGE1ZTdjMWQtYzY1OS00ZmUzLWI4YzktN2M2NWJkOWM5NWE1fScsICMgMi40YjIKLSAgICAnMi40LjEyMSc6ICd7NzU1MDg4MjEtYThlOS00MGE4LTk1YmQtZGJlNjAzM2RkYmVhfScsICMgMi40YzEKLSAgICAnMi40LjEyMic6ICd7ODNhOTExOGItNGJkZC00NzNiLWFmYzMtYmNiMTQyZmVjYTllfScsICMgMi40YzIKLSAgICAnMi40LjE1MCc6ICd7ODJkOTMwMmUtZjIwOS00ODA1LWI1NDgtNTIwODcwNDc0ODNhfScsICMgMi40LjAKLSAgICAnMi40LjExMjEnOid7YmUwMjc0MTEtOGU2Yi00NDQwLWEyOWItYjA3ZGYwNjkwMjMwfScsICMgMi40LjFjMQotICAgICcyLjQuMTEyMic6J3swMjgxODc1Mi00OGJmLTQwNzQtYTI4MS03YTQxMTRjNGYxYjF9JywgIyAyLjQuMWMyCi0gICAgJzIuNC4xMTUwJzonezRkNGY1MzQ2LTdlNGEtNDBiNS05Mzg3LWZkYjYxODEzNTdmY30nLCAjIDIuNC4xCi0gICAgJzIuNC4yMTIxJzonezVlZjlkNmI2LWRmNzgtNDVkMi1hYjA5LTE0Nzg2YTNjNWE5OX0nLCAjIDIuNC4yYzEKLSAgICAnMi40LjIxNTAnOid7YjE5MWU0OWMtZWEyMy00M2IyLWIyOGEtMTRlMDc4NDA2OWI4fScsICMgMi40LjIKLSAgICAnMi40LjMxMjEnOid7ZjY2OWVkNGQtMWRjZS00MWM0LTk2MTctZDk4NTM5NzE4N2ExfScsICMgMi40LjNjMQotICAgICcyLjQuMzE1MCc6J3s3NWU3MWFkZC0wNDJjLTRmMzAtYmZhYy1hOWVjNDIzNTEzMTN9JywgIyAyLjQuMwotICAgICcyLjQuNDEyMSc6J3tjZDI4NjJkYi0yMmE0LTQ2ODgtODc3Mi04NTQwN2VhMjE1NTB9JywgIyAyLjQuNGMxCi0gICAgJzIuNC40MTUwJzonezYwZTJjOGM5LTZjZjMtNGIxYS05NjE4LWUzMDQ5NDZjOTRlNn0nLCAjIDIuNC40CiAgICAgJzIuNS4xMDEnOiAne2JjMTRjZTNlLTVlNzItNGE2NC1hYzFmLWJmNTlhNTcxODk4Y30nLCAjIDIuNWExCiAgICAgJzIuNS4xMDInOiAnezVlZWQ1MWMxLThlOWQtNDA3MS05NGM1LWI0MGRlNWQ0OWJhNX0nLCAjIDIuNWEyCiAgICAgJzIuNS4xMDMnOiAnezczZGNkOTY2LWZmZWMtNDE1Zi1iYjM5LTgzNDJjMWY0NzAxN30nLCAjIDIuNWEzCkBAIC01OCw2ICs0MSwxNiBAQAogICAgICcyLjYuNTEyMSc6J3tlMGUyNzNkNy03NTk4LTQ3MDEtODMyNS1jOTBjMDY5ZmQ1ZmZ9JywgIyAyLjYuNWMxCiAgICAgJzIuNi41MTIyJzone2ZhMjI3Yjc2LTA2NzEtNGRjNi1iODI2LWMyZmYyYTcwZGZkNX0nLCAjIDIuNi41YzIKICAgICAnMi42LjUxNTAnOid7NDcyM2YxOTktZmE2NC00MjMzLThlNmUtOWZjY2M5NWExOGVlfScsICMgMi42LjUKLSAgICAnMi42LjYxMjEnOid7Mzk5Yjc1MDItODExOS00NDAwLTkyMTgtNDkwNjE5NGZlZGY1fScsICMgMi42LjZyYzEKLSAgICAnMi42LjYxNTAnOid7NjE1MWNmMjAtMGJkOC00MDIzLWE0YTAtNmE4NmRjZmU1OGU1fScsICMgMi42LjYKKyAgICAnMi43LjEwMSc6ICd7ZWNhMWJiZWYtNDMyYy00OWFlLWE2NjctYzIxM2NjN2JiZjIyfScsICMgMi43YTEKKyAgICAnMi43LjEwMic6ICd7MjFjZTE2ZWQtNzNjNC00NjBkLTliMTEtNTIyZjQxN2IyMDkwfScsICMgMi43YTIKKyAgICAnMi43LjEwMyc6ICd7NmU3ZGJkNTUtYmE0YS00OGFjLWE2ODgtNmM3NWRiNGQ3NTAwfScsICMgMi43YTMKKyAgICAnMi43LjEwNCc6ICd7ZWU3NzRiYTMtNzRhNS00OGQ5LWI0MjUtYjM1YTI4NzI2MGM4fScsICMgMi43YTQKKyAgICAnMi43LjExMSc6ICd7OWNmZDllYzctYTljNy00OTgwLWExYzYtMDU0ZmM2NDkzZWIzfScsICMgMi43YjEKKyAgICAnMi43LjExMic6ICd7OWE3MmZhZjYtYzMwNC00MTY1LTg1OTUtOTI5MWZmMzBjYWM2fScsICMgMi43YjIKKyAgICAnMi43LjEyMSc6ICd7ZjUzMGM5NGEtZGQ1My00ZGU5LTk0OGUtYjYzMmI5Y2I0OGQyfScsICMgMi43YzEKKyAgICAnMi43LjEyMic6ICd7ZjgwOTA1ZDItZGQ4ZC00YjhlLThhNDAtYzIzYzkzZGNhMDdkfScsICMgMi43YzIKKyAgICAnMi43LjE1MCc6ICd7MjBjMzE0MzUtMmEwYS00NTgwLWJlOGItYWMwNmZjMjQzY2E0fScsICMgMi43LjAKKyAgICAnMi43LjExMjEnOid7NjBhNDAzNmEtMzc0Yy00ZmQyLTg0YjktYmZhZTdkYjAzOTMxfScsICMgMi43LjFyYzEKKyAgICAnMi43LjExMjInOid7NTk2NWU3ZDEtNTU4NC00ZGU5LWIxM2EtNjk0ZTBiMmVlM2E2fScsICMgMi43LjFyYzIKKyAgICAnMi43LjExNTAnOid7MzI5Mzk4MjctZDhlNS00NzBhLWIxMjYtODcwZGIzYzY5ZmRmfScsICMgMi43LjEKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL3B5YmVuY2gvU2V0dXAucHkgYi9Ub29scy9weWJlbmNoL1NldHVwLnB5CmluZGV4IDIxZTY1NGEuLjMwOWYzZGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3B5YmVuY2gvU2V0dXAucHkKKysrIGIvVG9vbHMvcHliZW5jaC9TZXR1cC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KIAogIyBTZXR1cCBmaWxlIGZvciBweWJlbmNoCiAjCmRpZmYgLS1naXQgYS9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkgYi9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkKaW5kZXggODNhNjIxNy4uOWRlZTczMSAxMDA3NTUKLS0tIGEvVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5CisrKyBiL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weQpAQCAtMjMwLDcgKzIzMCw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYXQgbGVhc3Qgb25lIGNhbGlicmF0aW9uIHJ1biBpcyByZXF1aXJlZCcpCiAgICAgICAgICAgICBzZWxmLmNhbGlicmF0aW9uX3J1bnMgPSBjYWxpYnJhdGlvbl9ydW5zCiAgICAgICAgIGlmIHRpbWVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdGltZXIgPSB0aW1lcgorICAgICAgICAgICAgc2VsZi50aW1lciA9IHRpbWVyCiAKICAgICAgICAgIyBJbml0IHZhcmlhYmxlcwogICAgICAgICBzZWxmLnRpbWVzID0gW10KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvMnRvMyBiL1Rvb2xzL3NjcmlwdHMvMnRvMwppbmRleCAyYTQ0N2NmLi5mYmQ0YWE2IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzLzJ0bzMKKysrIGIvVG9vbHMvc2NyaXB0cy8ydG8zCkBAIC0xLDYgKzEsNSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi1mcm9tIGxpYjJ0bzMubWFpbiBpbXBvcnQgbWFpbgogaW1wb3J0IHN5cwotaW1wb3J0IG9zCitmcm9tIGxpYjJ0bzMubWFpbiBpbXBvcnQgbWFpbgogCiBzeXMuZXhpdChtYWluKCJsaWIydG8zLmZpeGVzIikpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL1JFQURNRSBiL1Rvb2xzL3NjcmlwdHMvUkVBRE1FCmluZGV4IDljN2I0MGUuLmVhZjlhZWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvUkVBRE1FCisrKyBiL1Rvb2xzL3NjcmlwdHMvUkVBRE1FCkBAIC00LDYgKzQsNyBAQAogCiBTZWUgYWxzbyB0aGUgRGVtby9zY3JpcHRzIGRpcmVjdG9yeSEKIAorYW5hbHl6ZV9keHAucHkJCUFuYWx5emVzIHRoZSByZXN1bHQgb2Ygc3lzLmdldGR4cCgpCiBieWV4dC5weQkJUHJpbnQgbGluZXMvd29yZHMvY2hhcnMgc3RhdHMgb2YgZmlsZXMgYnkgZXh0ZW5zaW9uCiBieXRleWVhcnMucHkJCVByaW50IHByb2R1Y3Qgb2YgYSBmaWxlJ3Mgc2l6ZSBhbmQgYWdlCiBjaGVja2FwcGVuZC5weQkJU2VhcmNoIGZvciBtdWx0aS1hcmd1bWVudCAuYXBwZW5kKCkgY2FsbHMKQEAgLTE4LDcgKzE5LDggQEAKIGRpZmYucHkJCQlQcmludCBmaWxlIGRpZmZzIGluIGNvbnRleHQsIHVuaWZpZWQsIG9yIG5kaWZmIGZvcm1hdHMKIGR1dHJlZS5weQkJRm9ybWF0IGR1KDEpIG91dHB1dCBhcyBhIHRyZWUgc29ydGVkIGJ5IHNpemUKIGVwdGFncy5weQkJQ3JlYXRlIEVtYWNzIFRBR1MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKLWZpbmRkaXYucHkJCUEgZ3JlcC1saWtlIHRvb2wgdGhhdCBsb29rcyBmb3IgZGl2aXNpb24gb3BlcmF0b3JzLgorZmluZF9yZWN1cnNpb25saW1pdC5weSAgRmluZCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgb24gdGhpcyBtYWNoaW5lIAorZmluZGRpdi5weQkJQSBncmVwLWxpa2UgdG9vbCB0aGF0IGxvb2tzIGZvciBkaXZpc2lvbiBvcGVyYXRvcnMKIGZpbmRsaW5rc3RvLnB5CQlSZWN1cnNpdmVseSBmaW5kIHN5bWJvbGljIGxpbmtzIHRvIGEgZ2l2ZW4gcGF0aCBwcmVmaXgKIGZpbmRub2NvZGluZy5weQkJRmluZCBzb3VyY2UgZmlsZXMgd2hpY2ggbmVlZCBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbgogZml4Y2lkLnB5CQlNYXNzaXZlIGlkZW50aWZpZXIgc3Vic3RpdHV0aW9uIG9uIEMgc291cmNlIGZpbGVzCkBAIC0yNyw4ICsyOSw4IEBACiBmaXhub3RpY2UucHkJCUZpeCB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiBzb3VyY2UgZmlsZXMKIGZpeHBzLnB5CQlGaXggUHl0aG9uIHNjcmlwdHMnIGZpcnN0IGxpbmUgKGlmICMhKQogZnRwbWlycm9yLnB5CQlGVFAgbWlycm9yIHNjcmlwdAotZ29vZ2xlLnB5CQlPcGVuIGEgd2ViYnJvd3NlciB3aXRoIEdvb2dsZS4KLWdwcm9mMmh0bWwucHkJCVRyYW5zZm9ybSBncHJvZigxKSBvdXRwdXQgaW50byB1c2VmdWwgSFRNTC4KK2dvb2dsZS5weQkJT3BlbiBhIHdlYmJyb3dzZXIgd2l0aCBHb29nbGUKK2dwcm9mMmh0bWwucHkJCVRyYW5zZm9ybSBncHJvZigxKSBvdXRwdXQgaW50byB1c2VmdWwgSFRNTAogaDJweS5weQkJCVRyYW5zbGF0ZSAjZGVmaW5lJ3MgaW50byBQeXRob24gYXNzaWdubWVudHMKIGhvdHNob3RtYWluLnB5CQlNYWluIHByb2dyYW0gdG8gcnVuIHNjcmlwdCB1bmRlciBjb250cm9sIG9mIGhvdHNob3QKIGlkbGUJCQlNYWluIHByb2dyYW0gdG8gc3RhcnQgSURMRQpAQCAtNTUsOSArNTcsMTAgQEAKIHJlZGVtby5weQkJQmFzaWMgcmVndWxhciBleHByZXNzaW9uIGRlbW9uc3RyYXRpb24gZmFjaWxpdHkKIHJlaW5kZW50LnB5CQlDaGFuZ2UgLnB5IGZpbGVzIHRvIHVzZSA0LXNwYWNlIGluZGVudHMuCiByZ3JlcC5weQkJUmV2ZXJzZSBncmVwIHRocm91Z2ggYSBmaWxlICh1c2VmdWwgZm9yIGJpZyBsb2dmaWxlcykKLXNldHVwLnB5CQlJbnN0YWxsIGFsbCBzY3JpcHRzIGxpc3RlZCBoZXJlLgorc2VydmUucHkJCVNtYWxsIHdzZ2lyZWYtYmFzZWQgd2ViIHNlcnZlciwgdXNlZCBpbiBtYWtlIHNlcnZlIGluIERvYworc2V0dXAucHkJCUluc3RhbGwgYWxsIHNjcmlwdHMgbGlzdGVkIGhlcmUKIHN1ZmYucHkJCQlTb3J0IGEgbGlzdCBvZiBmaWxlcyBieSBzdWZmaXgKLXN2bmVvbC5weQkJU2V0cyBzdm46ZW9sLXN0eWxlIG9uIGFsbCBmaWxlcyBpbiBkaXJlY3RvcnkuCitzdm5lb2wucHkJCVNldHMgc3ZuOmVvbC1zdHlsZSBvbiBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5CiB0ZXhjaGVjay5weSAgICAgICAgICAgICBWYWxpZGF0ZSBQeXRob24gTGFUZVggZm9ybWF0dGluZyAoUmF5bW9uZCBIZXR0aW5nZXIpCiB0ZXhpMmh0bWwucHkJCUNvbnZlcnQgR05VIHRleGluZm8gZmlsZXMgaW50byBIVE1MCiB0cmVlc3luYy5weQkJU3luY2hyb25pemUgc291cmNlIHRyZWVzICh2ZXJ5IGlkZW9zeW5jcmF0aWMpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2FuYWx5emVfZHhwLnB5IGIvVG9vbHMvc2NyaXB0cy9hbmFseXplX2R4cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU5MzFlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvc2NyaXB0cy9hbmFseXplX2R4cC5weQpAQCAtMCwwICsxLDEyOSBAQAorIiIiCitTb21lIGhlbHBlciBmdW5jdGlvbnMgdG8gYW5hbHl6ZSB0aGUgb3V0cHV0IG9mIHN5cy5nZXRkeHAoKSAod2hpY2ggaXMKK29ubHkgYXZhaWxhYmxlIGlmIFB5dGhvbiB3YXMgYnVpbHQgd2l0aCAtRERZTkFNSUNfRVhFQ1VUSU9OX1BST0ZJTEUpLgorVGhlc2Ugd2lsbCB0ZWxsIHlvdSB3aGljaCBvcGNvZGVzIGhhdmUgYmVlbiBleGVjdXRlZCBtb3N0IGZyZXF1ZW50bHkKK2luIHRoZSBjdXJyZW50IHByb2Nlc3MsIGFuZCwgaWYgUHl0aG9uIHdhcyBhbHNvIGJ1aWx0IHdpdGggLUREWFBBSVJTLAord2lsbCB0ZWxsIHlvdSB3aGljaCBpbnN0cnVjdGlvbiBfcGFpcnNfIHdlcmUgZXhlY3V0ZWQgbW9zdCBmcmVxdWVudGx5LAord2hpY2ggbWF5IGhlbHAgaW4gY2hvb3NpbmcgbmV3IGluc3RydWN0aW9ucy4KKworSWYgUHl0aG9uIHdhcyBidWlsdCB3aXRob3V0IC1ERFlOQU1JQ19FWEVDVVRJT05fUFJPRklMRSwgaW1wb3J0aW5nCit0aGlzIG1vZHVsZSB3aWxsIHJhaXNlIGEgUnVudGltZUVycm9yLgorCitJZiB5b3UncmUgcnVubmluZyBhIHNjcmlwdCB5b3Ugd2FudCB0byBwcm9maWxlLCBhIHNpbXBsZSB3YXkgdG8gZ2V0Cit0aGUgY29tbW9uIHBhaXJzIGlzOgorCiskIFBZVEhPTlBBVEg9JFBZVEhPTlBBVEg6PHB5dGhvbl9zcmNkaXI+L1Rvb2xzL3NjcmlwdHMgXAorLi9weXRob24gLWkgLU8gdGhlX3NjcmlwdC5weSAtLWFyZ3MKKy4uLgorPiBmcm9tIGFuYWx5emVfZHhwIGltcG9ydCAqCis+IHMgPSByZW5kZXJfY29tbW9uX3BhaXJzKCkKKz4gb3BlbignL3RtcC9zb21lX2ZpbGUnLCAndycpLndyaXRlKHMpCisiIiIKKworaW1wb3J0IGNvcHkKK2ltcG9ydCBvcGNvZGUKK2ltcG9ydCBvcGVyYXRvcgoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitpZiBub3QgaGFzYXR0cihzeXMsICJnZXRkeHAiKToKKyAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbid0IGltcG9ydCBhbmFseXplX2R4cDogUHl0aG9uIGJ1aWx0IHdpdGhvdXQiCisgICAgICAgICAgICAgICAgICAgICAgICIgLUREWU5BTUlDX0VYRUNVVElPTl9QUk9GSUxFLiIpCisKKworX3Byb2ZpbGVfbG9jayA9IHRocmVhZGluZy5STG9jaygpCitfY3VtdWxhdGl2ZV9wcm9maWxlID0gc3lzLmdldGR4cCgpCisKKyMgSWYgUHl0aG9uIHdhcyBidWlsdCB3aXRoIC1ERFhQQUlSUywgc3lzLmdldGR4cCgpIHJldHVybnMgYSBsaXN0IG9mCisjIGxpc3RzIG9mIGludHMuICBPdGhlcndpc2UgaXQgcmV0dXJucyBqdXN0IGEgbGlzdCBvZiBpbnRzLgorZGVmIGhhc19wYWlycyhwcm9maWxlKToKKyAgICAiIiJSZXR1cm5zIFRydWUgaWYgdGhlIFB5dGhvbiB0aGF0IHByb2R1Y2VkIHRoZSBhcmd1bWVudCBwcm9maWxlCisgICAgd2FzIGJ1aWx0IHdpdGggLUREWFBBSVJTLiIiIgorCisgICAgcmV0dXJuIGxlbihwcm9maWxlKSA+IDAgYW5kIGlzaW5zdGFuY2UocHJvZmlsZVswXSwgbGlzdCkKKworCitkZWYgcmVzZXRfcHJvZmlsZSgpOgorICAgICIiIkZvcmdldHMgYW55IGV4ZWN1dGlvbiBwcm9maWxlIHRoYXQgaGFzIGJlZW4gZ2F0aGVyZWQgc28gZmFyLiIiIgorICAgIHdpdGggX3Byb2ZpbGVfbG9jazoKKyAgICAgICAgc3lzLmdldGR4cCgpICAjIFJlc2V0cyB0aGUgaW50ZXJuYWwgcHJvZmlsZQorICAgICAgICBnbG9iYWwgX2N1bXVsYXRpdmVfcHJvZmlsZQorICAgICAgICBfY3VtdWxhdGl2ZV9wcm9maWxlID0gc3lzLmdldGR4cCgpICAjIDBzIG91dCBvdXIgY29weS4KKworCitkZWYgbWVyZ2VfcHJvZmlsZSgpOgorICAgICIiIlJlYWRzIHN5cy5nZXRkeHAoKSBhbmQgbWVyZ2VzIGl0IGludG8gdGhpcyBtb2R1bGUncyBjYWNoZWQgY29weS4KKworICAgIFdlIG5lZWQgdGhpcyBiZWNhdXNlIHN5cy5nZXRkeHAoKSAwcyBpdHNlbGYgZXZlcnkgdGltZSBpdCdzIGNhbGxlZC4iIiIKKworICAgIHdpdGggX3Byb2ZpbGVfbG9jazoKKyAgICAgICAgbmV3X3Byb2ZpbGUgPSBzeXMuZ2V0ZHhwKCkKKyAgICAgICAgaWYgaGFzX3BhaXJzKG5ld19wcm9maWxlKToKKyAgICAgICAgICAgIGZvciBmaXJzdF9pbnN0IGluIHJhbmdlKGxlbihfY3VtdWxhdGl2ZV9wcm9maWxlKSk6CisgICAgICAgICAgICAgICAgZm9yIHNlY29uZF9pbnN0IGluIHJhbmdlKGxlbihfY3VtdWxhdGl2ZV9wcm9maWxlW2ZpcnN0X2luc3RdKSk6CisgICAgICAgICAgICAgICAgICAgIF9jdW11bGF0aXZlX3Byb2ZpbGVbZmlyc3RfaW5zdF1bc2Vjb25kX2luc3RdICs9ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19wcm9maWxlW2ZpcnN0X2luc3RdW3NlY29uZF9pbnN0XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBpbnN0IGluIHJhbmdlKGxlbihfY3VtdWxhdGl2ZV9wcm9maWxlKSk6CisgICAgICAgICAgICAgICAgX2N1bXVsYXRpdmVfcHJvZmlsZVtpbnN0XSArPSBuZXdfcHJvZmlsZVtpbnN0XQorCisKK2RlZiBzbmFwc2hvdF9wcm9maWxlKCk6CisgICAgIiIiUmV0dXJucyB0aGUgY3VtdWxhdGl2ZSBleGVjdXRpb24gcHJvZmlsZSB1bnRpbCB0aGlzIGNhbGwuIiIiCisgICAgd2l0aCBfcHJvZmlsZV9sb2NrOgorICAgICAgICBtZXJnZV9wcm9maWxlKCkKKyAgICAgICAgcmV0dXJuIGNvcHkuZGVlcGNvcHkoX2N1bXVsYXRpdmVfcHJvZmlsZSkKKworCitkZWYgY29tbW9uX2luc3RydWN0aW9ucyhwcm9maWxlKToKKyAgICAiIiJSZXR1cm5zIHRoZSBtb3N0IGNvbW1vbiBvcGNvZGVzIGluIG9yZGVyIG9mIGRlc2NlbmRpbmcgZnJlcXVlbmN5LgorCisgICAgVGhlIHJlc3VsdCBpcyBhIGxpc3Qgb2YgdHVwbGVzIG9mIHRoZSBmb3JtCisgICAgICAob3Bjb2RlLCBvcG5hbWUsICMgb2Ygb2NjdXJyZW5jZXMpCisKKyAgICAiIiIKKyAgICBpZiBoYXNfcGFpcnMocHJvZmlsZSkgYW5kIHByb2ZpbGU6CisgICAgICAgIGluc3RfbGlzdCA9IHByb2ZpbGVbLTFdCisgICAgZWxzZToKKyAgICAgICAgaW5zdF9saXN0ID0gcHJvZmlsZQorICAgIHJlc3VsdCA9IFsob3AsIG9wY29kZS5vcG5hbWVbb3BdLCBjb3VudCkKKyAgICAgICAgICAgICAgZm9yIG9wLCBjb3VudCBpbiBlbnVtZXJhdGUoaW5zdF9saXN0KQorICAgICAgICAgICAgICBpZiBjb3VudCA+IDBdCisgICAgcmVzdWx0LnNvcnQoa2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoMiksIHJldmVyc2U9VHJ1ZSkKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGNvbW1vbl9wYWlycyhwcm9maWxlKToKKyAgICAiIiJSZXR1cm5zIHRoZSBtb3N0IGNvbW1vbiBvcGNvZGUgcGFpcnMgaW4gb3JkZXIgb2YgZGVzY2VuZGluZyBmcmVxdWVuY3kuCisKKyAgICBUaGUgcmVzdWx0IGlzIGEgbGlzdCBvZiB0dXBsZXMgb2YgdGhlIGZvcm0KKyAgICAgICgoMXN0IG9wY29kZSwgMm5kIG9wY29kZSksCisgICAgICAgKDFzdCBvcG5hbWUsIDJuZCBvcG5hbWUpLAorICAgICAgICMgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHBhaXIpCisKKyAgICAiIiIKKyAgICBpZiBub3QgaGFzX3BhaXJzKHByb2ZpbGUpOgorICAgICAgICByZXR1cm4gW10KKyAgICByZXN1bHQgPSBbKChvcDEsIG9wMiksIChvcGNvZGUub3BuYW1lW29wMV0sIG9wY29kZS5vcG5hbWVbb3AyXSksIGNvdW50KQorICAgICAgICAgICAgICAjIERyb3AgdGhlIHJvdyBvZiBzaW5nbGUtb3AgcHJvZmlsZXMgd2l0aCBbOi0xXQorICAgICAgICAgICAgICBmb3Igb3AxLCBvcDFwcm9maWxlIGluIGVudW1lcmF0ZShwcm9maWxlWzotMV0pCisgICAgICAgICAgICAgIGZvciBvcDIsIGNvdW50IGluIGVudW1lcmF0ZShvcDFwcm9maWxlKQorICAgICAgICAgICAgICBpZiBjb3VudCA+IDBdCisgICAgcmVzdWx0LnNvcnQoa2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoMiksIHJldmVyc2U9VHJ1ZSkKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIHJlbmRlcl9jb21tb25fcGFpcnMocHJvZmlsZT1Ob25lKToKKyAgICAiIiJSZW5kZXJzIHRoZSBtb3N0IGNvbW1vbiBvcGNvZGUgcGFpcnMgdG8gYSBzdHJpbmcgaW4gb3JkZXIgb2YKKyAgICBkZXNjZW5kaW5nIGZyZXF1ZW5jeS4KKworICAgIFRoZSByZXN1bHQgaXMgYSBzZXJpZXMgb2YgbGluZXMgb2YgdGhlIGZvcm06CisgICAgICAjIG9mIG9jY3VycmVuY2VzOiAoJzFzdCBvcG5hbWUnLCAnMm5kIG9wbmFtZScpCisKKyAgICAiIiIKKyAgICBpZiBwcm9maWxlIGlzIE5vbmU6CisgICAgICAgIHByb2ZpbGUgPSBzbmFwc2hvdF9wcm9maWxlKCkKKyAgICBkZWYgc2VxKCk6CisgICAgICAgIGZvciBfLCBvcHMsIGNvdW50IGluIGNvbW1vbl9wYWlycyhwcm9maWxlKToKKyAgICAgICAgICAgIHlpZWxkICIlczogJXNcbiIgJSAoY291bnQsIG9wcykKKyAgICByZXR1cm4gJycuam9pbihzZXEoKSkKZGlmZiAtLWdpdCBhL01pc2MvZmluZF9yZWN1cnNpb25saW1pdC5weSBiL1Rvb2xzL3NjcmlwdHMvZmluZF9yZWN1cnNpb25saW1pdC5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTWlzYy9maW5kX3JlY3Vyc2lvbmxpbWl0LnB5CnJlbmFtZSB0byBUb29scy9zY3JpcHRzL2ZpbmRfcmVjdXJzaW9ubGltaXQucHkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvaDJweS5weSBiL1Rvb2xzL3NjcmlwdHMvaDJweS5weQppbmRleCA2M2U3MzM2Li5jNjgxZTIzIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2gycHkucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CkBAIC05NSw3ICs5NSw3IEBACiAgICAgZm9yIHAgaW4gaWdub3JlczoKICAgICAgICAgYm9keSA9IHAuc3ViKCcgJywgYm9keSkKICAgICAjIHJlcGxhY2UgY2hhciBsaXRlcmFscyBieSBvcmQoLi4uKQotICAgIGJvZHkgPSBwX2NoYXIuc3ViKCdvcmQoXFwwKScsIGJvZHkpCisgICAgYm9keSA9IHBfY2hhci5zdWIoIm9yZCgnXFwxJykiLCBib2R5KQogICAgICMgQ29tcHV0ZSBuZWdhdGl2ZSBoZXhhZGVjaW1hbCBjb25zdGFudHMKICAgICBzdGFydCA9IDAKICAgICBVTUFYID0gMiooc3lzLm1heGludCsxKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9tYWlsZXJkYWVtb24ucHkgYi9Ub29scy9zY3JpcHRzL21haWxlcmRhZW1vbi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BhcnNlZW50aXRpZXMucHkgYi9Ub29scy9zY3JpcHRzL3BhcnNlZW50aXRpZXMucHkKaW5kZXggY2Y0ZTE3Yy4uNGE0NGZiNCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9wYXJzZWVudGl0aWVzLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGFyc2VlbnRpdGllcy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KICIiIiBVdGlsaXR5IGZvciBwYXJzaW5nIEhUTUwgZW50aXR5IGRlZmluaXRpb25zIGF2YWlsYWJsZSBmcm9tOgogCiAgICAgICBodHRwOi8vd3d3LnczLm9yZy8gYXMgZS5nLgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9wYXRjaGNoZWNrLnB5IGIvVG9vbHMvc2NyaXB0cy9wYXRjaGNoZWNrLnB5CmluZGV4IGUxOTRjOTguLmJjOGJjNzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQorKysgYi9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkKQEAgLTEsOCArMSwxNiBAQAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKIAogaW1wb3J0IHJlaW5kZW50CitpbXBvcnQgdW50YWJpZnkKKworCitkZWYgbl9maWxlc19zdHIoY291bnQpOgorICAgICIiIlJldHVybiAnTiBmaWxlKHMpJyB3aXRoIHRoZSBwcm9wZXIgcGx1cmFsaXR5IG9uICdmaWxlJy4iIiIKKyAgICByZXR1cm4gInt9IGZpbGV7fSIuZm9ybWF0KGNvdW50LCAicyIgaWYgY291bnQgIT0gMSBlbHNlICIiKQogCiAKIGRlZiBzdGF0dXMobWVzc2FnZSwgbW9kYWw9RmFsc2UsIGluZm89Tm9uZSk6CkBAIC0xNyw1MyArMjUsMTA1IEBACiAgICAgICAgICAgICBlbGlmIGluZm86CiAgICAgICAgICAgICAgICAgcHJpbnQgaW5mbyhyZXN1bHQpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHJlc3VsdDoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgInllcyIKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiTk8iCisgICAgICAgICAgICAgICAgcHJpbnQgInllcyIgaWYgcmVzdWx0IGVsc2UgIk5PIgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICByZXR1cm4gY2FsbF9meG4KICAgICByZXR1cm4gZGVjb3JhdGVkX2Z4bgogCi1Ac3RhdHVzKCJHZXR0aW5nIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkL2NoYW5nZWQiLAotICAgICAgICAgICAgaW5mbz1sYW1iZGEgeDogIiVzIGZpbGVzIiAlIGxlbih4KSkKLWRlZiBjaGFuZ2VkX2ZpbGVzKCk6Ci0gICAgIiIiUnVuIGBgc3ZuIHN0YXR1c2BgIGFuZCByZXR1cm4gYSBzZXQgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4KLSAgICBjaGFuZ2VkL2FkZGVkLiIiIgotICAgIGNtZCA9ICdzdm4gc3RhdHVzIC0tcXVpZXQgLS1ub24taW50ZXJhY3RpdmUgLS1pZ25vcmUtZXh0ZXJuYWxzJwotICAgIHN2bl9zdCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgIHN2bl9zdC53YWl0KCkKLSAgICBvdXRwdXQgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIHN2bl9zdC5zdGRvdXQucmVhZGxpbmVzKCldCi0gICAgZmlsZXMgPSBzZXQoKQotICAgIGZvciBsaW5lIGluIG91dHB1dDoKLSAgICAgICAgaWYgbm90IGxpbmVbMF0gaW4gKCdBJywgJ00nKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGxpbmVfcGFydHMgPSBsaW5lLnNwbGl0KCkKLSAgICAgICAgcGF0aCA9IGxpbmVfcGFydHNbLTFdCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgotICAgICAgICAgICAgZmlsZXMuYWRkKHBhdGgpCi0gICAgcmV0dXJuIGZpbGVzCiAKLUBzdGF0dXMoIkZpeGluZyB3aGl0ZXNwYWNlIiwgaW5mbz1sYW1iZGEgeDogIiVzIGZpbGVzIiAlIHgpCitAc3RhdHVzKCJHZXR0aW5nIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkL2NoYW5nZWQiLAorICAgICAgICBpbmZvPWxhbWJkYSB4OiBuX2ZpbGVzX3N0cihsZW4oeCkpKQorZGVmIGNoYW5nZWRfZmlsZXMoKToKKyAgICAiIiJHZXQgdGhlIGxpc3Qgb2YgY2hhbmdlZCBvciBhZGRlZCBmaWxlcyBmcm9tIHRoZSBWQ1MuIiIiCisgICAgaWYgb3MucGF0aC5pc2RpcignLmhnJyk6CisgICAgICAgIHZjcyA9ICdoZycKKyAgICAgICAgY21kID0gJ2hnIHN0YXR1cyAtLWFkZGVkIC0tbW9kaWZpZWQgLS1uby1zdGF0dXMnCisgICAgZWxpZiBvcy5wYXRoLmlzZGlyKCcuc3ZuJyk6CisgICAgICAgIHZjcyA9ICdzdm4nCisgICAgICAgIGNtZCA9ICdzdm4gc3RhdHVzIC0tcXVpZXQgLS1ub24taW50ZXJhY3RpdmUgLS1pZ25vcmUtZXh0ZXJuYWxzJworICAgIGVsc2U6CisgICAgICAgIHN5cy5leGl0KCduZWVkIGEgY2hlY2tvdXQgdG8gZ2V0IG1vZGlmaWVkIGZpbGVzJykKKworICAgIHN0ID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQuc3BsaXQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICB0cnk6CisgICAgICAgIHN0LndhaXQoKQorICAgICAgICBpZiB2Y3MgPT0gJ2hnJzoKKyAgICAgICAgICAgIHJldHVybiBbeC5kZWNvZGUoKS5yc3RyaXAoKSBmb3IgeCBpbiBzdC5zdGRvdXRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQgPSAoeC5kZWNvZGUoKS5yc3RyaXAoKS5yc3BsaXQoTm9uZSwgMSlbLTFdCisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gc3Quc3Rkb3V0IGlmIHhbMF0gaW4gJ0FNJykKKyAgICAgICAgcmV0dXJuIHNldChwYXRoIGZvciBwYXRoIGluIG91dHB1dCBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBzdC5zdGRvdXQuY2xvc2UoKQorCisKK2RlZiByZXBvcnRfbW9kaWZpZWRfZmlsZXMoZmlsZV9wYXRocyk6CisgICAgY291bnQgPSBsZW4oZmlsZV9wYXRocykKKyAgICBpZiBjb3VudCA9PSAwOgorICAgICAgICByZXR1cm4gbl9maWxlc19zdHIoY291bnQpCisgICAgZWxzZToKKyAgICAgICAgbGluZXMgPSBbInt9OiIuZm9ybWF0KG5fZmlsZXNfc3RyKGNvdW50KSldCisgICAgICAgIGZvciBwYXRoIGluIGZpbGVfcGF0aHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAge30iLmZvcm1hdChwYXRoKSkKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKworCitAc3RhdHVzKCJGaXhpbmcgd2hpdGVzcGFjZSIsIGluZm89cmVwb3J0X21vZGlmaWVkX2ZpbGVzKQogZGVmIG5vcm1hbGl6ZV93aGl0ZXNwYWNlKGZpbGVfcGF0aHMpOgogICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRoZSB3aGl0ZXNwYWNlIGZvciAucHkgZmlsZXMgaGF2ZSBiZWVuIG5vcm1hbGl6ZWQuIiIiCiAgICAgcmVpbmRlbnQubWFrZWJhY2t1cCA9IEZhbHNlICAjIE5vIG5lZWQgdG8gY3JlYXRlIGJhY2t1cHMuCi0gICAgcmVzdWx0ID0gbWFwKHJlaW5kZW50LmNoZWNrLCAoeCBmb3IgeCBpbiBmaWxlX3BhdGhzIGlmIHguZW5kc3dpdGgoJy5weScpKSkKLSAgICByZXR1cm4gc3VtKHJlc3VsdCkKKyAgICBmaXhlZCA9IFtdCisgICAgZm9yIHBhdGggaW4gKHggZm9yIHggaW4gZmlsZV9wYXRocyBpZiB4LmVuZHN3aXRoKCcucHknKSk6CisgICAgICAgIGlmIHJlaW5kZW50LmNoZWNrKHBhdGgpOgorICAgICAgICAgICAgZml4ZWQuYXBwZW5kKHBhdGgpCisgICAgcmV0dXJuIGZpeGVkCisKKworQHN0YXR1cygiRml4aW5nIEMgZmlsZSB3aGl0ZXNwYWNlIiwgaW5mbz1yZXBvcnRfbW9kaWZpZWRfZmlsZXMpCitkZWYgbm9ybWFsaXplX2Nfd2hpdGVzcGFjZShmaWxlX3BhdGhzKToKKyAgICAiIiJSZXBvcnQgaWYgYW55IEMgZmlsZXMgIiIiCisgICAgZml4ZWQgPSBbXQorICAgIGZvciBwYXRoIGluIGZpbGVfcGF0aHM6CisgICAgICAgIHdpdGggb3BlbihwYXRoLCAncicpIGFzIGY6CisgICAgICAgICAgICBpZiAnXHQnIG5vdCBpbiBmLnJlYWQoKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB1bnRhYmlmeS5wcm9jZXNzKHBhdGgsIDgsIHZlcmJvc2U9RmFsc2UpCisgICAgICAgIGZpeGVkLmFwcGVuZChwYXRoKQorICAgIHJldHVybiBmaXhlZAorCisKK3dzX3JlID0gcmUuY29tcGlsZShicidccysoXHI/XG4pJCcpCisKK0BzdGF0dXMoIkZpeGluZyBkb2NzIHdoaXRlc3BhY2UiLCBpbmZvPXJlcG9ydF9tb2RpZmllZF9maWxlcykKK2RlZiBub3JtYWxpemVfZG9jc193aGl0ZXNwYWNlKGZpbGVfcGF0aHMpOgorICAgIGZpeGVkID0gW10KKyAgICBmb3IgcGF0aCBpbiBmaWxlX3BhdGhzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIG5ld19saW5lcyA9IFt3c19yZS5zdWIoYnInXDEnLCBsaW5lKSBmb3IgbGluZSBpbiBsaW5lc10KKyAgICAgICAgICAgIGlmIG5ld19saW5lcyAhPSBsaW5lczoKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUocGF0aCwgcGF0aCArICcuYmFrJykKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZWxpbmVzKG5ld19saW5lcykKKyAgICAgICAgICAgICAgICBmaXhlZC5hcHBlbmQocGF0aCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgICAgICBwcmludCAnQ2Fubm90IGZpeCAlczogJXMnICUgKHBhdGgsIGVycikKKyAgICByZXR1cm4gZml4ZWQKKwogCiBAc3RhdHVzKCJEb2NzIG1vZGlmaWVkIiwgbW9kYWw9VHJ1ZSkKIGRlZiBkb2NzX21vZGlmaWVkKGZpbGVfcGF0aHMpOgotICAgICIiIlJlcG9ydCBpZiBhbnkgZmlsZXMgaW4gdGhlIERvY3MgZGlyZWN0b3J5LiIiIgotICAgIGZvciBwYXRoIGluIGZpbGVfcGF0aHM6Ci0gICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCgiRG9jIik6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHJldHVybiBGYWxzZQorICAgICIiIlJlcG9ydCBpZiBhbnkgZmlsZSBpbiB0aGUgRG9jIGRpcmVjdG9yeSBoYXMgYmVlbiBjaGFuZ2VkLiIiIgorICAgIHJldHVybiBib29sKGZpbGVfcGF0aHMpCisKIAogQHN0YXR1cygiTWlzYy9BQ0tTIHVwZGF0ZWQiLCBtb2RhbD1UcnVlKQogZGVmIGNyZWRpdF9naXZlbihmaWxlX3BhdGhzKToKICAgICAiIiJDaGVjayBpZiBNaXNjL0FDS1MgaGFzIGJlZW4gY2hhbmdlZC4iIiIKICAgICByZXR1cm4gJ01pc2MvQUNLUycgaW4gZmlsZV9wYXRocwogCisKIEBzdGF0dXMoIk1pc2MvTkVXUyB1cGRhdGVkIiwgbW9kYWw9VHJ1ZSkKIGRlZiByZXBvcnRlZF9uZXdzKGZpbGVfcGF0aHMpOgogICAgICIiIkNoZWNrIGlmIE1pc2MvTkVXUyBoYXMgYmVlbiBjaGFuZ2VkLiIiIgpAQCAtNzIsMTQgKzEzMiwyMiBAQAogCiBkZWYgbWFpbigpOgogICAgIGZpbGVfcGF0aHMgPSBjaGFuZ2VkX2ZpbGVzKCkKLSAgICAjIFBFUCA3LzggdmVyaWZpY2F0aW9uLgotICAgIG5vcm1hbGl6ZV93aGl0ZXNwYWNlKGZpbGVfcGF0aHMpCisgICAgcHl0aG9uX2ZpbGVzID0gW2ZuIGZvciBmbiBpbiBmaWxlX3BhdGhzIGlmIGZuLmVuZHN3aXRoKCcucHknKV0KKyAgICBjX2ZpbGVzID0gW2ZuIGZvciBmbiBpbiBmaWxlX3BhdGhzIGlmIGZuLmVuZHN3aXRoKCgnLmMnLCAnLmgnKSldCisgICAgZG9jX2ZpbGVzID0gW2ZuIGZvciBmbiBpbiBmaWxlX3BhdGhzIGlmIGZuLnN0YXJ0c3dpdGgoJ0RvYycpXQorICAgIHNwZWNpYWxfZmlsZXMgPSB7J01pc2MvQUNLUycsICdNaXNjL05FV1MnfSAmIHNldChmaWxlX3BhdGhzKQorICAgICMgUEVQIDggd2hpdGVzcGFjZSBydWxlcyBlbmZvcmNlbWVudC4KKyAgICBub3JtYWxpemVfd2hpdGVzcGFjZShweXRob25fZmlsZXMpCisgICAgIyBDIHJ1bGVzIGVuZm9yY2VtZW50LgorICAgIG5vcm1hbGl6ZV9jX3doaXRlc3BhY2UoY19maWxlcykKKyAgICAjIERvYyB3aGl0ZXNwYWNlIGVuZm9yY2VtZW50LgorICAgIG5vcm1hbGl6ZV9kb2NzX3doaXRlc3BhY2UoZG9jX2ZpbGVzKQogICAgICMgRG9jcyB1cGRhdGVkLgotICAgIGRvY3NfbW9kaWZpZWQoZmlsZV9wYXRocykKKyAgICBkb2NzX21vZGlmaWVkKGRvY19maWxlcykKICAgICAjIE1pc2MvQUNLUyBjaGFuZ2VkLgotICAgIGNyZWRpdF9naXZlbihmaWxlX3BhdGhzKQorICAgIGNyZWRpdF9naXZlbihzcGVjaWFsX2ZpbGVzKQogICAgICMgTWlzYy9ORVdTIGNoYW5nZWQuCi0gICAgcmVwb3J0ZWRfbmV3cyhmaWxlX3BhdGhzKQorICAgIHJlcG9ydGVkX25ld3Moc3BlY2lhbF9maWxlcykKIAogICAgICMgVGVzdCBzdWl0ZSBydW4gYW5kIHBhc3NlZC4KICAgICBwcmludApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9yZWluZGVudC1yc3QucHkgYi9Ub29scy9zY3JpcHRzL3JlaW5kZW50LXJzdC5weQppbmRleCBiZjQzMWQ5Li5jZWI4NGJmIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LXJzdC5weQorKysgYi9Ub29scy9zY3JpcHRzL3JlaW5kZW50LXJzdC5weQpAQCAtMywyNyArMywxMiBAQAogIyBNYWtlIGEgcmVTVCBmaWxlIGNvbXBsaWFudCB0byBvdXIgcHJlLWNvbW1pdCBob29rLgogIyBDdXJyZW50bHkganVzdCByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZS4KIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotaW1wb3J0IHN5cywgcmUsIHNodXRpbAoraW1wb3J0IHN5cwogCi13c19yZSA9IHJlLmNvbXBpbGUocidccysoXHI/XG4pJCcpCitpbXBvcnQgcGF0Y2hjaGVjawogCiBkZWYgbWFpbihhcmd2PXN5cy5hcmd2KToKLSAgICBydiA9IDAKLSAgICBmb3IgZmlsZW5hbWUgaW4gYXJndlsxOl06Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZjoKLSAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKLSAgICAgICAgICAgIG5ld19saW5lcyA9IFt3c19yZS5zdWIocidcMScsIGxpbmUpIGZvciBsaW5lIGluIGxpbmVzXQotICAgICAgICAgICAgaWYgbmV3X2xpbmVzICE9IGxpbmVzOgotICAgICAgICAgICAgICAgIHByaW50ICdGaXhpbmcgJXMuLi4nICUgZmlsZW5hbWUKLSAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnLmJhaycpCi0gICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6Ci0gICAgICAgICAgICAgICAgZi53cml0ZWxpbmVzKG5ld19saW5lcykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgotICAgICAgICAgICAgcHJpbnQgJ0Nhbm5vdCBmaXggJXM6ICVzJyAlIChmaWxlbmFtZSwgZXJyKQotICAgICAgICAgICAgcnYgPSAxCi0gICAgcmV0dXJuIHJ2CisgICAgcGF0Y2hjaGVjay5ub3JtYWxpemVfZG9jc193aGl0ZXNwYWNlKGFyZ3ZbMTpdKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvc2VydmUucHkgYi9Ub29scy9zY3JpcHRzL3NlcnZlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwMDYxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9zY3JpcHRzL3NlcnZlLnB5CkBAIC0wLDAgKzEsMzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorJycnCitTbWFsbCB3c2dpcmVmIGJhc2VkIHdlYiBzZXJ2ZXIuIFRha2VzIGEgcGF0aCB0byBzZXJ2ZSBmcm9tIGFuZCBhbgorb3B0aW9uYWwgcG9ydCBudW1iZXIgKGRlZmF1bHRzIHRvIDgwMDApLCB0aGVuIHRyaWVzIHRvIHNlcnZlIGZpbGVzLgorTWltZSB0eXBlcyBhcmUgZ3Vlc3NlZCBmcm9tIHRoZSBmaWxlIG5hbWVzLCA0MDQgZXJyb3JzIGFyZSB0aHJvd24KK2lmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZC4gVXNlZCBmb3IgdGhlIG1ha2Ugc2VydmUgdGFyZ2V0IGluIERvYy4KKycnJworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgbWltZXR5cGVzCitmcm9tIHdzZ2lyZWYgaW1wb3J0IHNpbXBsZV9zZXJ2ZXIsIHV0aWwKKworZGVmIGFwcChlbnZpcm9uLCByZXNwb25kKToKKworICAgIGZuID0gb3MucGF0aC5qb2luKHBhdGgsIGVudmlyb25bJ1BBVEhfSU5GTyddWzE6XSkKKyAgICBpZiAnLicgbm90IGluIGZuLnNwbGl0KG9zLnBhdGguc2VwKVstMV06CisgICAgICAgIGZuID0gb3MucGF0aC5qb2luKGZuLCAnaW5kZXguaHRtbCcpCisgICAgdHlwZSA9IG1pbWV0eXBlcy5ndWVzc190eXBlKGZuKVswXQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoZm4pOgorICAgICAgICByZXNwb25kKCcyMDAgT0snLCBbKCdDb250ZW50LVR5cGUnLCB0eXBlKV0pCisgICAgICAgIHJldHVybiB1dGlsLkZpbGVXcmFwcGVyKG9wZW4oZm4pKQorICAgIGVsc2U6CisgICAgICAgIHJlc3BvbmQoJzQwNCBOb3QgRm91bmQnLCBbKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXSkKKyAgICAgICAgcmV0dXJuIFsnbm90IGZvdW5kJ10KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwYXRoID0gc3lzLmFyZ3ZbMV0KKyAgICBwb3J0ID0gaW50KHN5cy5hcmd2WzJdKSBpZiBsZW4oc3lzLmFyZ3YpID4gMiBlbHNlIDgwMDAKKyAgICBodHRwZCA9IHNpbXBsZV9zZXJ2ZXIubWFrZV9zZXJ2ZXIoJycsIHBvcnQsIGFwcCkKKyAgICBwcmludCAiU2VydmluZyAlcyBvbiBwb3J0ICVzLCBjb250cm9sLUMgdG8gc3RvcCIgJSAocGF0aCwgcG9ydCkKKyAgICB0cnk6CisgICAgICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcHJpbnQgIlxiXGJTaHV0dGluZyBkb3duLiIKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkgYi9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CmluZGV4IDliZGYyMzUuLjgzZTczZGEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKKysrIGIvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQpAQCAtMjMsNyArMjMsNyBAQAogICAgIGZvciBmaWxlbmFtZSBpbiBhcmdzOgogICAgICAgICBwcm9jZXNzKGZpbGVuYW1lLCB0YWJzaXplKQogCi1kZWYgcHJvY2VzcyhmaWxlbmFtZSwgdGFic2l6ZSk6CitkZWYgcHJvY2VzcyhmaWxlbmFtZSwgdGFic2l6ZSwgdmVyYm9zZT1UcnVlKToKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQogICAgICAgICB0ZXh0ID0gZi5yZWFkKCkKQEAgLTQzLDEwICs0MywxMCBAQAogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKICAgICBleGNlcHQgb3MuZXJyb3I6CiAgICAgICAgIHBhc3MKLSAgICBmID0gb3BlbihmaWxlbmFtZSwgInciKQotICAgIGYud3JpdGUobmV3dGV4dCkKLSAgICBmLmNsb3NlKCkKLSAgICBwcmludCBmaWxlbmFtZQorICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKG5ld3RleHQpCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgZmlsZW5hbWUKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkgYi9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CmluZGV4IDQzMWE3NmQuLjE2NWM5MTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKKysrIGIvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQpAQCAtNDAsOCArNDAsNyBAQAogICAgICAgICAgICAgICAgICAgICdccyonCiAgICAgICAgICAgICAgICAgICAgJygjLispPycpCiAKLWRlZiBwYXJzZWNvZGVzKGNvZGVzLAotICAgICAgICAgICAgICAgbGVuPWxlbiwgZmlsdGVyPWZpbHRlcixyYW5nZT1yYW5nZSk6CitkZWYgcGFyc2Vjb2Rlcyhjb2RlcywgbGVuPWxlbiwgcmFuZ2U9cmFuZ2UpOgogCiAgICAgIiIiIENvbnZlcnRzIGNvZGUgY29tYmluYXRpb25zIHRvIGVpdGhlciBhIHNpbmdsZSBjb2RlIGludGVnZXIKICAgICAgICAgb3IgYSB0dXBsZSBvZiBpbnRlZ2Vycy4KQEAgLTYyLDcgKzYxLDcgQEAKICAgICAgICAgICAgIGxbaV0gPSBpbnQobFtpXSwxNikKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICBsW2ldID0gTm9uZQotICAgIGwgPSBmaWx0ZXIobGFtYmRhIHg6IHggaXMgbm90IE5vbmUsIGwpCisgICAgbCA9IFt4IGZvciB4IGluIGwgaWYgeCBpcyBub3QgTm9uZV0KICAgICBpZiBsZW4obCkgPT0gMToKICAgICAgICAgcmV0dXJuIGxbMF0KICAgICBlbHNlOgpAQCAtMTM4LDcgKzEzNyw3IEBACiAKICAgICBsID0gW10KICAgICBhcHBlbmQgPSBsLmFwcGVuZAotICAgIGlmIG1hcC5oYXNfa2V5KCJJREVOVElUWSIpOgorICAgIGlmICJJREVOVElUWSIgaW4gbWFwOgogICAgICAgICBhcHBlbmQoIiVzID0gY29kZWNzLm1ha2VfaWRlbnRpdHlfZGljdChyYW5nZSglZCkpIiAlCiAgICAgICAgICAgICAgICAodmFybmFtZSwgbWFwWyJJREVOVElUWSJdKSkKICAgICAgICAgYXBwZW5kKCIlcy51cGRhdGUoeyIgJSB2YXJuYW1lKQpAQCAtMTUwLDggKzE0OSw3IEBACiAgICAgICAgIHNwbGl0cyA9IDAKICAgICAgICAgaWRlbnRpdHkgPSAwCiAKLSAgICBtYXBwaW5ncyA9IG1hcC5pdGVtcygpCi0gICAgbWFwcGluZ3Muc29ydCgpCisgICAgbWFwcGluZ3MgPSBzb3J0ZWQobWFwLml0ZW1zKCkpCiAgICAgaSA9IDAKICAgICBrZXlfcHJlY2lzaW9uLCB2YWx1ZV9wcmVjaXNpb24gPSBwcmVjaXNpb25zCiAgICAgZm9yIG1hcGtleSwgbWFwdmFsdWUgaW4gbWFwcGluZ3M6CkBAIC0xOTksMTEgKzE5NywxMCBAQAogICAgIGFwcGVuZCgnJXMgPSAoJyAlIHZhcm5hbWUpCiAKICAgICAjIEFuYWx5emUgbWFwIGFuZCBjcmVhdGUgdGFibGUgZGljdAotICAgIG1hcHBpbmdzID0gbWFwLml0ZW1zKCkKLSAgICBtYXBwaW5ncy5zb3J0KCkKKyAgICBtYXBwaW5ncyA9IHNvcnRlZChtYXAuaXRlbXMoKSkKICAgICB0YWJsZSA9IHt9CiAgICAgbWF4a2V5ID0gMAotICAgIGlmIG1hcC5oYXNfa2V5KCdJREVOVElUWScpOgorICAgIGlmICdJREVOVElUWScgaW4gbWFwOgogICAgICAgICBmb3Iga2V5IGluIHJhbmdlKDI1Nik6CiAgICAgICAgICAgICB0YWJsZVtrZXldID0gKGtleSwgJycpCiAgICAgICAgIG1heGtleSA9IDI1NQpAQCAtNDIxLDYgKzQxOCw2IEBACiAKICAgICBpbXBvcnQgc3lzCiAgICAgaWYgMToKLSAgICAgICAgYXBwbHkoY29udmVydGRpcix0dXBsZShzeXMuYXJndlsxOl0pKQorICAgICAgICBjb252ZXJ0ZGlyKCpzeXMuYXJndlsxOl0pCiAgICAgZWxzZToKLSAgICAgICAgYXBwbHkocmV3cml0ZXB5dGhvbmRpcix0dXBsZShzeXMuYXJndlsxOl0pKQorICAgICAgICByZXdyaXRlcHl0aG9uZGlyKCpzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL2dlbndpbmNvZGVjLnB5IGIvVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWU3MjM0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlYy5weQpAQCAtMCwwICsxLDYxIEBACisiIiJUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgYSBQeXRob24gY29kZWMgbW9kdWxlIGZyb20gYSBXaW5kb3dzIENvZGUgUGFnZS4KKworSXQgdXNlcyB0aGUgZnVuY3Rpb24gTXVsdGlCeXRlVG9XaWRlQ2hhciB0byBnZW5lcmF0ZSBhIGRlY29kaW5nIHRhYmxlLgorIiIiCisKK2ltcG9ydCBjdHlwZXMKK2Zyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcworZnJvbSBnZW5jb2RlYyBpbXBvcnQgY29kZWdlbgoraW1wb3J0IHVuaWNvZGVkYXRhCisKK2RlZiBnZW53aW5tYXAoY29kZXBhZ2UpOgorICAgIE11bHRpQnl0ZVRvV2lkZUNoYXIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyLk11bHRpQnl0ZVRvV2lkZUNoYXIKKyAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyLmFyZ3R5cGVzID0gW3dpbnR5cGVzLlVJTlQsIHdpbnR5cGVzLkRXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ludHlwZXMuTFBDU1RSLCBjdHlwZXMuY19pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW50eXBlcy5MUFdTVFIsIGN0eXBlcy5jX2ludF0KKyAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyLnJlc3R5cGUgPSBjdHlwZXMuY19pbnQKKworICAgIGVuYzJ1bmkgPSB7fQorCisgICAgZm9yIGkgaW4gcmFuZ2UoMzIpICsgWzEyN106CisgICAgICAgIGVuYzJ1bmlbaV0gPSAoaSwgJ0NPTlRST0wgQ0hBUkFDVEVSJykKKworICAgIGZvciBpIGluIHJhbmdlKDI1Nik6CisgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoMikKKyAgICAgICAgcmV0ID0gTXVsdGlCeXRlVG9XaWRlQ2hhcigKKyAgICAgICAgICAgIGNvZGVwYWdlLCAwLAorICAgICAgICAgICAgY2hyKGkpLCAxLAorICAgICAgICAgICAgYnVmLCAyKQorICAgICAgICBhc3NlcnQgcmV0ID09IDEsICJpbnZhbGlkIGNvZGUgcGFnZSIKKyAgICAgICAgYXNzZXJ0IGJ1ZlsxXSA9PSAnXHgwMCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IHVuaWNvZGVkYXRhLm5hbWUoYnVmWzBdKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYW1lID0gZW5jMnVuaVtpXVsxXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIG5hbWUgPSAnJworCisgICAgICAgIGVuYzJ1bmlbaV0gPSAob3JkKGJ1ZlswXSksIG5hbWUpCisKKyAgICByZXR1cm4gZW5jMnVuaQorCitkZWYgZ2Vud2luY29kZWMoY29kZXBhZ2UpOgorICAgIGltcG9ydCBwbGF0Zm9ybQorICAgIG1hcCA9IGdlbndpbm1hcChjb2RlcGFnZSkKKyAgICBlbmNvZGluZ25hbWUgPSAnY3AlZCcgJSBjb2RlcGFnZQorICAgIGNvZGUgPSBjb2RlZ2VuKCIiLCBtYXAsIGVuY29kaW5nbmFtZSkKKyAgICAjIFJlcGxhY2UgZmlyc3QgbGluZXMgd2l0aCBvdXIgb3duIGRvY3N0cmluZworICAgIGNvZGUgPSAnJydcCisiIiJQeXRob24gQ2hhcmFjdGVyIE1hcHBpbmcgQ29kZWMgJXMgZ2VuZXJhdGVkIG9uIFdpbmRvd3M6CislcyB3aXRoIHRoZSBjb21tYW5kOgorICBweXRob24gVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlYy5weSAlcworIiIiIyIKKycnJyAlIChlbmNvZGluZ25hbWUsICcgJy5qb2luKHBsYXRmb3JtLndpbjMyX3ZlcigpKSwgY29kZXBhZ2UKKyAgICAgICkgKyBjb2RlLnNwbGl0KCciIiIjIicsIDEpWzFdCisKKyAgICBwcmludCBjb2RlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHN5cworICAgIGdlbndpbmNvZGVjKGludChzeXMuYXJndlsxXSkpCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL2dlbndpbmNvZGVjcy5iYXQgYi9Ub29scy91bmljb2RlL2dlbndpbmNvZGVjcy5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyOGQ4OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWNzLmJhdApAQCAtMCwwICsxLDcgQEAKK0ByZW0gUmVjcmVhdGUgc29tZSBweXRob24gY2hhcm1hcCBjb2RlY3MgZnJvbSB0aGUgV2luZG93cyBmdW5jdGlvbgorQHJlbSBNdWx0aUJ5dGVUb1dpZGVDaGFyLgorCitAY2QgL2QgJX5kcDAKK0Bta2RpciBidWlsZAorQHJlbSBBcmFiaWMgRE9TIGNvZGUgcGFnZQorYzpccHl0aG9uMjZccHl0aG9uIGdlbndpbmNvZGVjLnB5IDcyMCA+IGJ1aWxkL2NwNzIwLnB5CmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSBiL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5CmluZGV4IDNjZDVhMWYuLjNmNWFkNTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5CisrKyBiL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5CkBAIC0zMCwxMCArMzAsMTMgQEAKIFZFUlNJT04gPSAiMi42IgogCiAjIFRoZSBVbmljb2RlIERhdGFiYXNlCi1VTklEQVRBX1ZFUlNJT04gPSAiNS4xLjAiCitVTklEQVRBX1ZFUlNJT04gPSAiNS4yLjAiCiBVTklDT0RFX0RBVEEgPSAiVW5pY29kZURhdGElcy50eHQiCiBDT01QT1NJVElPTl9FWENMVVNJT05TID0gIkNvbXBvc2l0aW9uRXhjbHVzaW9ucyVzLnR4dCIKIEVBU1RBU0lBTl9XSURUSCA9ICJFYXN0QXNpYW5XaWR0aCVzLnR4dCIKK1VOSUhBTiA9ICJVbmloYW4lcy50eHQiCitERVJJVkVETk9STUFMSVpBVElPTl9QUk9QUyA9ICJEZXJpdmVkTm9ybWFsaXphdGlvblByb3BzJXMudHh0IgorTElORV9CUkVBSyA9ICJMaW5lQnJlYWslcy50eHQiCiAKIG9sZF92ZXJzaW9ucyA9IFsiMy4yLjAiXQogCkBAIC00OCw2ICs1MSw4IEBACiAKIEVBU1RBU0lBTldJRFRIX05BTUVTID0gWyAiRiIsICJIIiwgIlciLCAiTmEiLCAiQSIsICJOIiBdCiAKK01BTkRBVE9SWV9MSU5FX0JSRUFLUyA9IFsgIkJLIiwgIkNSIiwgIkxGIiwgIk5MIiBdCisKICMgbm90ZTogc2hvdWxkIG1hdGNoIGRlZmluaXRpb25zIGluIE9iamVjdHMvdW5pY29kZWN0eXBlLmMKIEFMUEhBX01BU0sgPSAweDAxCiBERUNJTUFMX01BU0sgPSAweDAyCkBAIC01OCw2ICs2Myw3IEBACiBUSVRMRV9NQVNLID0gMHg0MAogVVBQRVJfTUFTSyA9IDB4ODAKIE5PREVMVEFfTUFTSyA9IDB4MTAwCitOVU1FUklDX01BU0sgPSAweDIwMAogCiBkZWYgbWFrZXRhYmxlcyh0cmFjZT0wKToKIApAQCAtNjYsNyArNzIsMTAgQEAKICAgICB2ZXJzaW9uID0gIiIKICAgICB1bmljb2RlID0gVW5pY29kZURhdGEoVU5JQ09ERV9EQVRBICUgdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUE9TSVRJT05fRVhDTFVTSU9OUyAlIHZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEVBU1RBU0lBTl9XSURUSCAlIHZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVBU1RBU0lBTl9XSURUSCAlIHZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSUhBTiAlIHZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIERFUklWRUROT1JNQUxJWkFUSU9OX1BST1BTICUgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTElORV9CUkVBSyAlIHZlcnNpb24pCiAKICAgICBwcmludCBsZW4oZmlsdGVyKE5vbmUsIHVuaWNvZGUudGFibGUpKSwgImNoYXJhY3RlcnMiCiAKQEAgLTc0LDcgKzgzLDggQEAKICAgICAgICAgcHJpbnQgIi0tLSBSZWFkaW5nIiwgVU5JQ09ERV9EQVRBICUgKCItIit2ZXJzaW9uKSwgIi4uLiIKICAgICAgICAgb2xkX3VuaWNvZGUgPSBVbmljb2RlRGF0YShVTklDT0RFX0RBVEEgJSAoIi0iK3ZlcnNpb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBPU0lUSU9OX0VYQ0xVU0lPTlMgJSAoIi0iK3ZlcnNpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBU1RBU0lBTl9XSURUSCAlICgiLSIrdmVyc2lvbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFTVEFTSUFOX1dJRFRIICUgKCItIit2ZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTklIQU4gJSAoIi0iK3ZlcnNpb24pKQogICAgICAgICBwcmludCBsZW4oZmlsdGVyKE5vbmUsIG9sZF91bmljb2RlLnRhYmxlKSksICJjaGFyYWN0ZXJzIgogICAgICAgICBtZXJnZV9vbGRfdmVyc2lvbih2ZXJzaW9uLCB1bmljb2RlLCBvbGRfdW5pY29kZSkKIApAQCAtODcsNyArOTcsNyBAQAogCiBkZWYgbWFrZXVuaWNvZGVkYXRhKHVuaWNvZGUsIHRyYWNlKToKIAotICAgIGR1bW15ID0gKDAsIDAsIDAsIDAsIDApCisgICAgZHVtbXkgPSAoMCwgMCwgMCwgMCwgMCwgMCkKICAgICB0YWJsZSA9IFtkdW1teV0KICAgICBjYWNoZSA9IHswOiBkdW1teX0KICAgICBpbmRleCA9IFswXSAqIGxlbih1bmljb2RlLmNoYXJzKQpAQCAtMTA3LDggKzExNywxMCBAQAogICAgICAgICAgICAgYmlkaXJlY3Rpb25hbCA9IEJJRElSRUNUSU9OQUxfTkFNRVMuaW5kZXgocmVjb3JkWzRdKQogICAgICAgICAgICAgbWlycm9yZWQgPSByZWNvcmRbOV0gPT0gIlkiCiAgICAgICAgICAgICBlYXN0YXNpYW53aWR0aCA9IEVBU1RBU0lBTldJRFRIX05BTUVTLmluZGV4KHJlY29yZFsxNV0pCisgICAgICAgICAgICBub3JtYWxpemF0aW9ucXVpY2tjaGVjayA9IHJlY29yZFsxN10KICAgICAgICAgICAgIGl0ZW0gPSAoCi0gICAgICAgICAgICAgICAgY2F0ZWdvcnksIGNvbWJpbmluZywgYmlkaXJlY3Rpb25hbCwgbWlycm9yZWQsIGVhc3Rhc2lhbndpZHRoCisgICAgICAgICAgICAgICAgY2F0ZWdvcnksIGNvbWJpbmluZywgYmlkaXJlY3Rpb25hbCwgbWlycm9yZWQsIGVhc3Rhc2lhbndpZHRoLAorICAgICAgICAgICAgICAgIG5vcm1hbGl6YXRpb25xdWlja2NoZWNrCiAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgIyBhZGQgZW50cnkgdG8gaW5kZXggYW5kIGl0ZW0gdGFibGVzCiAgICAgICAgICAgICBpID0gY2FjaGUuZ2V0KGl0ZW0pCkBAIC0xNDgsOCArMTYwLDcgQEAKICAgICAgICAgICAgICAgICBwcmVmaXggPSBpCiAgICAgICAgICAgICAgICAgYXNzZXJ0IHByZWZpeCA8IDI1NgogICAgICAgICAgICAgICAgICMgY29udGVudAotICAgICAgICAgICAgICAgIGRlY29tcCA9IFtwcmVmaXggKyAobGVuKGRlY29tcCk8PDgpXSArXAotICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChsYW1iZGEgczogaW50KHMsIDE2KSwgZGVjb21wKQorICAgICAgICAgICAgICAgIGRlY29tcCA9IFtwcmVmaXggKyAobGVuKGRlY29tcCk8PDgpXSArIFtpbnQocywgMTYpIGZvciBzIGluIGRlY29tcF0KICAgICAgICAgICAgICAgICAjIENvbGxlY3QgTkZDIHBhaXJzCiAgICAgICAgICAgICAgICAgaWYgbm90IHByZWZpeCBhbmQgbGVuKGRlY29tcCkgPT0gMyBhbmQgXAogICAgICAgICAgICAgICAgICAgIGNoYXIgbm90IGluIHVuaWNvZGUuZXhjbHVzaW9ucyBhbmQgXApAQCAtMjIyLDcgKzIzMyw3IEBACiAgICAgcHJpbnQgPj5mcCwgXAogICAgICAgICAgICJjb25zdCBfUHlVbmljb2RlX0RhdGFiYXNlUmVjb3JkIF9QeVVuaWNvZGVfRGF0YWJhc2VfUmVjb3Jkc1tdID0geyIKICAgICBmb3IgaXRlbSBpbiB0YWJsZToKLSAgICAgICAgcHJpbnQgPj5mcCwgIiAgICB7JWQsICVkLCAlZCwgJWQsICVkfSwiICUgaXRlbQorICAgICAgICBwcmludCA+PmZwLCAiICAgIHslZCwgJWQsICVkLCAlZCwgJWQsICVkfSwiICUgaXRlbQogICAgIHByaW50ID4+ZnAsICJ9OyIKICAgICBwcmludCA+PmZwCiAKQEAgLTM0OCw2ICszNTksOSBAQAogICAgIHRhYmxlID0gW2R1bW15XQogICAgIGNhY2hlID0gezA6IGR1bW15fQogICAgIGluZGV4ID0gWzBdICogbGVuKHVuaWNvZGUuY2hhcnMpCisgICAgbnVtZXJpYyA9IHt9CisgICAgc3BhY2VzID0gW10KKyAgICBsaW5lYnJlYWtzID0gW10KIAogICAgIGZvciBjaGFyIGluIHVuaWNvZGUuY2hhcnM6CiAgICAgICAgIHJlY29yZCA9IHVuaWNvZGUudGFibGVbY2hhcl0KQEAgLTM1NSwxNiArMzY5LDE5IEBACiAgICAgICAgICAgICAjIGV4dHJhY3QgZGF0YWJhc2UgcHJvcGVydGllcwogICAgICAgICAgICAgY2F0ZWdvcnkgPSByZWNvcmRbMl0KICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWwgPSByZWNvcmRbNF0KKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSByZWNvcmRbMTZdCiAgICAgICAgICAgICBmbGFncyA9IDAKICAgICAgICAgICAgIGRlbHRhID0gVHJ1ZQogICAgICAgICAgICAgaWYgY2F0ZWdvcnkgaW4gWyJMbSIsICJMdCIsICJMdSIsICJMbCIsICJMbyJdOgogICAgICAgICAgICAgICAgIGZsYWdzIHw9IEFMUEhBX01BU0sKICAgICAgICAgICAgIGlmIGNhdGVnb3J5ID09ICJMbCI6CiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTE9XRVJfTUFTSwotICAgICAgICAgICAgaWYgY2F0ZWdvcnkgPT0gIlpsIiBvciBiaWRpcmVjdGlvbmFsID09ICJCIjoKKyAgICAgICAgICAgIGlmICdMaW5lX0JyZWFrJyBpbiBwcm9wZXJ0aWVzIG9yIGJpZGlyZWN0aW9uYWwgPT0gIkIiOgogICAgICAgICAgICAgICAgIGZsYWdzIHw9IExJTkVCUkVBS19NQVNLCisgICAgICAgICAgICAgICAgbGluZWJyZWFrcy5hcHBlbmQoY2hhcikKICAgICAgICAgICAgIGlmIGNhdGVnb3J5ID09ICJacyIgb3IgYmlkaXJlY3Rpb25hbCBpbiAoIldTIiwgIkIiLCAiUyIpOgogICAgICAgICAgICAgICAgIGZsYWdzIHw9IFNQQUNFX01BU0sKKyAgICAgICAgICAgICAgICBzcGFjZXMuYXBwZW5kKGNoYXIpCiAgICAgICAgICAgICBpZiBjYXRlZ29yeSA9PSAiTHQiOgogICAgICAgICAgICAgICAgIGZsYWdzIHw9IFRJVExFX01BU0sKICAgICAgICAgICAgIGlmIGNhdGVnb3J5ID09ICJMdSI6CkBAIC00MDcsNiArNDI0LDkgQEAKICAgICAgICAgICAgIGlmIHJlY29yZFs3XToKICAgICAgICAgICAgICAgICBmbGFncyB8PSBESUdJVF9NQVNLCiAgICAgICAgICAgICAgICAgZGlnaXQgPSBpbnQocmVjb3JkWzddKQorICAgICAgICAgICAgaWYgcmVjb3JkWzhdOgorICAgICAgICAgICAgICAgIGZsYWdzIHw9IE5VTUVSSUNfTUFTSworICAgICAgICAgICAgICAgIG51bWVyaWMuc2V0ZGVmYXVsdChyZWNvcmRbOF0sIFtdKS5hcHBlbmQoY2hhcikKICAgICAgICAgICAgIGl0ZW0gPSAoCiAgICAgICAgICAgICAgICAgdXBwZXIsIGxvd2VyLCB0aXRsZSwgZGVjaW1hbCwgZGlnaXQsIGZsYWdzCiAgICAgICAgICAgICAgICAgKQpAQCAtNDE4LDYgKzQzOCw5IEBACiAgICAgICAgICAgICBpbmRleFtjaGFyXSA9IGkKIAogICAgIHByaW50IGxlbih0YWJsZSksICJ1bmlxdWUgY2hhcmFjdGVyIHR5cGUgZW50cmllcyIKKyAgICBwcmludCBzdW0obWFwKGxlbiwgbnVtZXJpYy52YWx1ZXMoKSkpLCAibnVtZXJpYyBjb2RlIHBvaW50cyIKKyAgICBwcmludCBsZW4oc3BhY2VzKSwgIndoaXRlc3BhY2UgY29kZSBwb2ludHMiCisgICAgcHJpbnQgbGVuKGxpbmVicmVha3MpLCAibGluZWJyZWFrIGNvZGUgcG9pbnRzIgogCiAgICAgcHJpbnQgIi0tLSBXcml0aW5nIiwgRklMRSwgIi4uLiIKIApAQCAtNDM5LDYgKzQ2MiwxMDAgQEAKICAgICBBcnJheSgiaW5kZXgxIiwgaW5kZXgxKS5kdW1wKGZwLCB0cmFjZSkKICAgICBBcnJheSgiaW5kZXgyIiwgaW5kZXgyKS5kdW1wKGZwLCB0cmFjZSkKIAorICAgICMgR2VuZXJhdGUgY29kZSBmb3IgX1B5VW5pY29kZV9Ub051bWVyaWMoKQorICAgIG51bWVyaWNfaXRlbXMgPSBzb3J0ZWQobnVtZXJpYy5pdGVtcygpKQorICAgIHByaW50ID4+ZnAsICcvKiBSZXR1cm5zIHRoZSBudW1lcmljIHZhbHVlIGFzIGRvdWJsZSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzJworICAgIHByaW50ID4+ZnAsICcgKiBoYXZpbmcgdGhpcyBwcm9wZXJ0eSwgLTEuMCBvdGhlcndpc2UuJworICAgIHByaW50ID4+ZnAsICcgKi8nCisgICAgcHJpbnQgPj5mcCwgJ2RvdWJsZSBfUHlVbmljb2RlX1RvTnVtZXJpYyhQeV9VTklDT0RFIGNoKScKKyAgICBwcmludCA+PmZwLCAneycKKyAgICBwcmludCA+PmZwLCAnICAgIHN3aXRjaCAoY2gpIHsnCisgICAgZm9yIHZhbHVlLCBjb2RlcG9pbnRzIGluIG51bWVyaWNfaXRlbXM6CisgICAgICAgICMgVHVybiB0ZXh0IGludG8gZmxvYXQgbGl0ZXJhbHMKKyAgICAgICAgcGFydHMgPSB2YWx1ZS5zcGxpdCgnLycpCisgICAgICAgIHBhcnRzID0gW3JlcHIoZmxvYXQocGFydCkpIGZvciBwYXJ0IGluIHBhcnRzXQorICAgICAgICB2YWx1ZSA9ICcvJy5qb2luKHBhcnRzKQorCisgICAgICAgIGhhc3dpZGUgPSBGYWxzZQorICAgICAgICBoYXNub25ld2lkZSA9IEZhbHNlCisgICAgICAgIGNvZGVwb2ludHMuc29ydCgpCisgICAgICAgIGZvciBjb2RlcG9pbnQgaW4gY29kZXBvaW50czoKKyAgICAgICAgICAgIGlmIGNvZGVwb2ludCA8IDB4MTAwMDA6CisgICAgICAgICAgICAgICAgaGFzbm9uZXdpZGUgPSBUcnVlCisgICAgICAgICAgICBpZiBjb2RlcG9pbnQgPj0gMHgxMDAwMCBhbmQgbm90IGhhc3dpZGU6CisgICAgICAgICAgICAgICAgcHJpbnQgPj5mcCwgJyNpZmRlZiBQeV9VTklDT0RFX1dJREUnCisgICAgICAgICAgICAgICAgaGFzd2lkZSA9IFRydWUKKyAgICAgICAgICAgIHByaW50ID4+ZnAsICcgICAgY2FzZSAweCUwNFg6JyAlIChjb2RlcG9pbnQsKQorICAgICAgICBpZiBoYXN3aWRlIGFuZCBoYXNub25ld2lkZToKKyAgICAgICAgICAgIHByaW50ID4+ZnAsICcjZW5kaWYnCisgICAgICAgIHByaW50ID4+ZnAsICcgICAgICAgIHJldHVybiAoZG91YmxlKSAlczsnICUgKHZhbHVlLCkKKyAgICAgICAgaWYgaGFzd2lkZSBhbmQgbm90IGhhc25vbmV3aWRlOgorICAgICAgICAgICAgcHJpbnQgPj5mcCwgJyNlbmRpZicKKyAgICBwcmludCA+PmZwLCcgICAgfScKKyAgICBwcmludCA+PmZwLCcgICAgcmV0dXJuIC0xLjA7JworICAgIHByaW50ID4+ZnAsJ30nCisgICAgcHJpbnQgPj5mcAorCisgICAgIyBHZW5lcmF0ZSBjb2RlIGZvciBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZSgpCisgICAgcHJpbnQgPj5mcCwgIi8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgYmlkaXJlY3Rpb25hbCIKKyAgICBwcmludCA+PmZwLCAiICogdHlwZSAnV1MnLCAnQicgb3IgJ1MnIG9yIHRoZSBjYXRlZ29yeSAnWnMnLCAwIG90aGVyd2lzZS4iCisgICAgcHJpbnQgPj5mcCwgIiAqLyIKKyAgICBwcmludCA+PmZwLCAnaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKHJlZ2lzdGVyIGNvbnN0IFB5X1VOSUNPREUgY2gpJworICAgIHByaW50ID4+ZnAsICd7JworICAgIHByaW50ID4+ZnAsICcjaWZkZWYgV0FOVF9XQ1RZUEVfRlVOQ1RJT05TJworICAgIHByaW50ID4+ZnAsICcgICAgcmV0dXJuIGlzd3NwYWNlKGNoKTsnCisgICAgcHJpbnQgPj5mcCwgJyNlbHNlJworICAgIHByaW50ID4+ZnAsICcgICAgc3dpdGNoIChjaCkgeycKKworICAgIGhhc3dpZGUgPSBGYWxzZQorICAgIGhhc25vbmV3aWRlID0gRmFsc2UKKyAgICBmb3IgY29kZXBvaW50IGluIHNvcnRlZChzcGFjZXMpOgorICAgICAgICBpZiBjb2RlcG9pbnQgPCAweDEwMDAwOgorICAgICAgICAgICAgaGFzbm9uZXdpZGUgPSBUcnVlCisgICAgICAgIGlmIGNvZGVwb2ludCA+PSAweDEwMDAwIGFuZCBub3QgaGFzd2lkZToKKyAgICAgICAgICAgIHByaW50ID4+ZnAsICcjaWZkZWYgUHlfVU5JQ09ERV9XSURFJworICAgICAgICAgICAgaGFzd2lkZSA9IFRydWUKKyAgICAgICAgcHJpbnQgPj5mcCwgJyAgICBjYXNlIDB4JTA0WDonICUgKGNvZGVwb2ludCwpCisgICAgaWYgaGFzd2lkZSBhbmQgaGFzbm9uZXdpZGU6CisgICAgICAgIHByaW50ID4+ZnAsICcjZW5kaWYnCisgICAgcHJpbnQgPj5mcCwgJyAgICAgICAgcmV0dXJuIDE7JworICAgIGlmIGhhc3dpZGUgYW5kIG5vdCBoYXNub25ld2lkZToKKyAgICAgICAgcHJpbnQgPj5mcCwgJyNlbmRpZicKKworICAgIHByaW50ID4+ZnAsJyAgICB9JworICAgIHByaW50ID4+ZnAsJyAgICByZXR1cm4gMDsnCisgICAgcHJpbnQgPj5mcCwgJyNlbmRpZicKKyAgICBwcmludCA+PmZwLCd9JworICAgIHByaW50ID4+ZnAKKworICAgICMgR2VuZXJhdGUgY29kZSBmb3IgX1B5VW5pY29kZV9Jc0xpbmVicmVhaygpCisgICAgcHJpbnQgPj5mcCwgIi8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgbGluZSBicmVhayIKKyAgICBwcmludCA+PmZwLCAiICogcHJvcGVydHkgJ0JLJywgJ0NSJywgJ0xGJyBvciAnTkwnIG9yIGhhdmluZyBiaWRpcmVjdGlvbmFsIgorICAgIHByaW50ID4+ZnAsICIgKiB0eXBlICdCJywgMCBvdGhlcndpc2UuIgorICAgIHByaW50ID4+ZnAsICIgKi8iCisgICAgcHJpbnQgPj5mcCwgJ2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKHJlZ2lzdGVyIGNvbnN0IFB5X1VOSUNPREUgY2gpJworICAgIHByaW50ID4+ZnAsICd7JworICAgIHByaW50ID4+ZnAsICcgICAgc3dpdGNoIChjaCkgeycKKyAgICBoYXN3aWRlID0gRmFsc2UKKyAgICBoYXNub25ld2lkZSA9IEZhbHNlCisgICAgZm9yIGNvZGVwb2ludCBpbiBzb3J0ZWQobGluZWJyZWFrcyk6CisgICAgICAgIGlmIGNvZGVwb2ludCA8IDB4MTAwMDA6CisgICAgICAgICAgICBoYXNub25ld2lkZSA9IFRydWUKKyAgICAgICAgaWYgY29kZXBvaW50ID49IDB4MTAwMDAgYW5kIG5vdCBoYXN3aWRlOgorICAgICAgICAgICAgcHJpbnQgPj5mcCwgJyNpZmRlZiBQeV9VTklDT0RFX1dJREUnCisgICAgICAgICAgICBoYXN3aWRlID0gVHJ1ZQorICAgICAgICBwcmludCA+PmZwLCAnICAgIGNhc2UgMHglMDRYOicgJSAoY29kZXBvaW50LCkKKyAgICBpZiBoYXN3aWRlIGFuZCBoYXNub25ld2lkZToKKyAgICAgICAgcHJpbnQgPj5mcCwgJyNlbmRpZicKKyAgICBwcmludCA+PmZwLCAnICAgICAgICByZXR1cm4gMTsnCisgICAgaWYgaGFzd2lkZSBhbmQgbm90IGhhc25vbmV3aWRlOgorICAgICAgICBwcmludCA+PmZwLCAnI2VuZGlmJworCisgICAgcHJpbnQgPj5mcCwnICAgIH0nCisgICAgcHJpbnQgPj5mcCwnICAgIHJldHVybiAwOycKKyAgICBwcmludCA+PmZwLCd9JworICAgIHByaW50ID4+ZnAKKwogICAgIGZwLmNsb3NlKCkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDg2LDEyICs2MDMsMTAgQEAKICAgICB3b3JkbGlzdCA9IHdvcmRzLml0ZW1zKCkKIAogICAgICMgc29ydCBvbiBmYWxsaW5nIGZyZXF1ZW5jeSwgdGhlbiBieSBuYW1lCi0gICAgZGVmIGNtcHdvcmRzKChhd29yZCwgYWxpc3QpLChid29yZCwgYmxpc3QpKToKLSAgICAgICAgciA9IC1jbXAobGVuKGFsaXN0KSxsZW4oYmxpc3QpKQotICAgICAgICBpZiByOgotICAgICAgICAgICAgcmV0dXJuIHIKLSAgICAgICAgcmV0dXJuIGNtcChhd29yZCwgYndvcmQpCi0gICAgd29yZGxpc3Quc29ydChjbXB3b3JkcykKKyAgICBkZWYgd29yZF9rZXkoYSk6CisgICAgICAgIGF3b3JkLCBhbGlzdCA9IGEKKyAgICAgICAgcmV0dXJuIC1sZW4oYWxpc3QpLCBhd29yZAorICAgIHdvcmRsaXN0LnNvcnQoa2V5PXdvcmRfa2V5KQogCiAgICAgIyBmaWd1cmUgb3V0IGhvdyBtYW55IHBocmFzZWJvb2sgZXNjYXBlcyB3ZSBuZWVkCiAgICAgZXNjYXBlcyA9IDAKQEAgLTUxNSw3ICs2MzAsNyBAQAogICAgICMgbGVuZ3RoICh0byBtYXhpbWl6ZSBvdmVybGFwKQogCiAgICAgd29yZGxpc3QsIHdvcmR0YWlsID0gd29yZGxpc3RbOnNob3J0XSwgd29yZGxpc3Rbc2hvcnQ6XQotICAgIHdvcmR0YWlsLnNvcnQobGFtYmRhIGEsIGI6IGxlbihiWzBdKS1sZW4oYVswXSkpCisgICAgd29yZHRhaWwuc29ydChrZXk9bGFtYmRhIGE6IGFbMF0sIHJldmVyc2U9VHJ1ZSkKICAgICB3b3JkbGlzdC5leHRlbmQod29yZHRhaWwpCiAKICAgICAjIGdlbmVyYXRlIGxleGljb24gZnJvbSB3b3JkcwpAQCAtNjU2LDEyICs3NzEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgZWxpZiBrID09IDg6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIHByaW50ICJOVU1FUklDIixoZXgoaSksIGBvbGQudGFibGVbaV1ba11gLCBuZXcudGFibGVbaV1ba10KICAgICAgICAgICAgICAgICAgICAgICAgICMgU2luY2UgMCBlbmNvZGVzICJubyBjaGFuZ2UiLCB0aGUgb2xkIHZhbHVlIGlzIGJldHRlciBub3QgMAotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHZhbHVlICE9ICIwIiBhbmQgdmFsdWUgIT0gIi0xIgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHZhbHVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNfY2hhbmdlc1tpXSA9IC0xCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCByZS5tYXRjaCgiXlswLTldKyQiLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljX2NoYW5nZXNbaV0gPSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19jaGFuZ2VzW2ldID0gZmxvYXQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG51bWVyaWNfY2hhbmdlc1tpXSBub3QgaW4gKDAsIC0xKQogICAgICAgICAgICAgICAgICAgICBlbGlmIGsgPT0gOToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlID09ICdZJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXJyb3JlZF9jaGFuZ2VzW2ldID0gJzEnCkBAIC02NzksNiArNzkzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgZWxpZiBrID09IDE0OgogICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2UgdG8gc2ltcGxlIHRpdGxlY2FzZSBtYXBwaW5nOyBpZ25vcmUKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrID09IDE2OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2UgdG8gcHJvcGVydGllczsgbm90IHlldAorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgRGlmZmVyZW5jZShFeGNlcHRpb24pOnBhc3MKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIERpZmZlcmVuY2UsIChoZXgoaSksIGssIG9sZC50YWJsZVtpXSwgbmV3LnRhYmxlW2ldKQpAQCAtNjk0LDExICs4MTEsMTYgQEAKIAogIyBsb2FkIGEgdW5pY29kZS1kYXRhIGZpbGUgZnJvbSBkaXNrCiAKLWltcG9ydCBzeXMKLQogY2xhc3MgVW5pY29kZURhdGE6CisgICAgIyBSZWNvcmQgc3RydWN0dXJlOgorICAgICMgW0lELCBuYW1lLCBjYXRlZ29yeSwgY29tYmluaW5nLCBiaWRpLCBkZWNvbXAsICAoNikKKyAgICAjICBkZWNpbWFsLCBkaWdpdCwgbnVtZXJpYywgYmlkaS1taXJyb3JlZCwgVW5pY29kZS0xLW5hbWUsICgxMSkKKyAgICAjICBJU08tY29tbWVudCwgdXBwZXJjYXNlLCBsb3dlcmNhc2UsIHRpdGxlY2FzZSwgZWEtd2lkdGgsICgxNikKKyAgICAjICBwcm9wZXJ0aWVzXSAoMTcpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGV4Y2x1c2lvbnMsIGVhc3Rhc2lhbndpZHRoLCBleHBhbmQ9MSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBleGNsdXNpb25zLCBlYXN0YXNpYW53aWR0aCwgdW5paGFuLAorICAgICAgICAgICAgICAgICBkZXJpdmVkbm9ybWFsaXphdGlvbnByb3BzPU5vbmUsIGxpbmVicmVha3Byb3BzPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4cGFuZD0xKToKICAgICAgICAgc2VsZi5jaGFuZ2VkID0gW10KICAgICAgICAgZmlsZSA9IG9wZW4oZmlsZW5hbWUpCiAgICAgICAgIHRhYmxlID0gW05vbmVdICogMHgxMTAwMDAKQEAgLTc2Miw2ICs4ODQsNTggQEAKICAgICAgICAgICAgIGlmIHRhYmxlW2ldIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHRhYmxlW2ldLmFwcGVuZCh3aWR0aHNbaV0pCiAKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgMHgxMTAwMDApOgorICAgICAgICAgICAgaWYgdGFibGVbaV0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGFibGVbaV0uYXBwZW5kKHNldCgpKQorICAgICAgICBpZiBsaW5lYnJlYWtwcm9wczoKKyAgICAgICAgICAgIGZvciBzIGluIG9wZW4obGluZWJyZWFrcHJvcHMpOgorICAgICAgICAgICAgICAgIHMgPSBzLnBhcnRpdGlvbignIycpWzBdCisgICAgICAgICAgICAgICAgcyA9IFtpLnN0cmlwKCkgZm9yIGkgaW4gcy5zcGxpdCgnOycpXQorICAgICAgICAgICAgICAgIGlmIGxlbihzKSA8IDIgb3Igc1sxXSBub3QgaW4gTUFOREFUT1JZX0xJTkVfQlJFQUtTOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmICcuLicgbm90IGluIHNbMF06CisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gbGFzdCA9IGludChzWzBdLCAxNikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmaXJzdCwgbGFzdCA9IFtpbnQoYywgMTYpIGZvciBjIGluIHNbMF0uc3BsaXQoJy4uJyldCisgICAgICAgICAgICAgICAgZm9yIGNoYXIgaW4gcmFuZ2UoZmlyc3QsIGxhc3QrMSk6CisgICAgICAgICAgICAgICAgICAgIHRhYmxlW2NoYXJdWy0xXS5hZGQoJ0xpbmVfQnJlYWsnKQorCisgICAgICAgIGlmIGRlcml2ZWRub3JtYWxpemF0aW9ucHJvcHM6CisgICAgICAgICAgICBxdWlja2NoZWNrcyA9IFswXSAqIDB4MTEwMDAwICMgZGVmYXVsdCBpcyBZZXMKKyAgICAgICAgICAgIHFjX29yZGVyID0gJ05GRF9RQyBORktEX1FDIE5GQ19RQyBORktDX1FDJy5zcGxpdCgpCisgICAgICAgICAgICBmb3IgcyBpbiBvcGVuKGRlcml2ZWRub3JtYWxpemF0aW9ucHJvcHMpOgorICAgICAgICAgICAgICAgIGlmICcjJyBpbiBzOgorICAgICAgICAgICAgICAgICAgICBzID0gc1s6cy5pbmRleCgnIycpXQorICAgICAgICAgICAgICAgIHMgPSBbaS5zdHJpcCgpIGZvciBpIGluIHMuc3BsaXQoJzsnKV0KKyAgICAgICAgICAgICAgICBpZiBsZW4ocykgPCAyIG9yIHNbMV0gbm90IGluIHFjX29yZGVyOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHF1aWNrY2hlY2sgPSAnTU4nLmluZGV4KHNbMl0pICsgMSAjIE1heWJlIG9yIE5vCisgICAgICAgICAgICAgICAgcXVpY2tjaGVja19zaGlmdCA9IHFjX29yZGVyLmluZGV4KHNbMV0pKjIKKyAgICAgICAgICAgICAgICBxdWlja2NoZWNrIDw8PSBxdWlja2NoZWNrX3NoaWZ0CisgICAgICAgICAgICAgICAgaWYgJy4uJyBub3QgaW4gc1swXToKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBsYXN0ID0gaW50KHNbMF0sIDE2KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZpcnN0LCBsYXN0ID0gW2ludChjLCAxNikgZm9yIGMgaW4gc1swXS5zcGxpdCgnLi4nKV0KKyAgICAgICAgICAgICAgICBmb3IgY2hhciBpbiByYW5nZShmaXJzdCwgbGFzdCsxKToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCAocXVpY2tjaGVja3NbY2hhcl0+PnF1aWNrY2hlY2tfc2hpZnQpJjMKKyAgICAgICAgICAgICAgICAgICAgcXVpY2tjaGVja3NbY2hhcl0gfD0gcXVpY2tjaGVjaworICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgMHgxMTAwMDApOgorICAgICAgICAgICAgICAgIGlmIHRhYmxlW2ldIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB0YWJsZVtpXS5hcHBlbmQocXVpY2tjaGVja3NbaV0pCisKKyAgICAgICAgZm9yIGxpbmUgaW4gb3Blbih1bmloYW4pOgorICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnVSsnKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgY29kZSwgdGFnLCB2YWx1ZSA9IGxpbmUuc3BsaXQoTm9uZSwgMylbOjNdCisgICAgICAgICAgICBpZiB0YWcgbm90IGluICgna0FjY291bnRpbmdOdW1lcmljJywgJ2tQcmltYXJ5TnVtZXJpYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAna090aGVyTnVtZXJpYycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN0cmlwKCkucmVwbGFjZSgnLCcsICcnKQorICAgICAgICAgICAgaSA9IGludChjb2RlWzI6XSwgMTYpCisgICAgICAgICAgICAjIFBhdGNoIHRoZSBudW1lcmljIGZpZWxkCisgICAgICAgICAgICBpZiB0YWJsZVtpXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0YWJsZVtpXVs4XSA9IHZhbHVlCisKICAgICBkZWYgdXNlbGF0aW4xKHNlbGYpOgogICAgICAgICAjIHJlc3RyaWN0IGNoYXJhY3RlciByYW5nZSB0byBJU08gTGF0aW4gMQogICAgICAgICBzZWxmLmNoYXJzID0gcmFuZ2UoMjU2KQpAQCAtOTExLDcgKzEwODUsNiBAQAogICAgIHlvdSdsbCBnZXQuCiAgICAgIiIiCiAKLSAgICBpbXBvcnQgc3lzCiAgICAgaWYgdHJhY2U6CiAgICAgICAgIGRlZiBkdW1wKHQxLCB0Miwgc2hpZnQsIGJ5dGVzKToKICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIiVkKyVkIGJpbnMgYXQgc2hpZnQgJWQ7ICVkIGJ5dGVzIiAlICgKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvbWtzdHJpbmdwcmVwLnB5IGIvVG9vbHMvdW5pY29kZS9ta3N0cmluZ3ByZXAucHkKaW5kZXggYjVjYWNiOC4uOTlmY2FlNyAxMDA2NDQKLS0tIGEvVG9vbHMvdW5pY29kZS9ta3N0cmluZ3ByZXAucHkKKysrIGIvVG9vbHMvdW5pY29kZS9ta3N0cmluZ3ByZXAucHkKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdGFydCwgZW5kID0gZmllbGRzCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZSAiVW5wYWNraW5nIHByb2JsZW0iLCBsCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJVbnBhY2tpbmcgcHJvYmxlbSIsIGwpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdGFydCA9IGVuZCA9IGZpZWxkc1swXQogICAgICAgICBzdGFydCA9IGludChzdGFydCwgMTYpCkBAIC0xNDYsOCArMTQ2LDcgQEAKIG5hbWUsIHRhYmxlID0gdGFibGVzWzBdCiBkZWwgdGFibGVzWzBdCiBhc3NlcnQgbmFtZSA9PSAiQi4xIgotdGFibGUgPSB0YWJsZS5rZXlzKCkKLXRhYmxlLnNvcnQoKQordGFibGUgPSBzb3J0ZWQodGFibGUua2V5cygpKQogcHJpbnQgIiIiCiBiMV9zZXQgPSAiIiIgKyBjb21wYWN0X3NldCh0YWJsZSkgKyAiIiIKIGRlZiBpbl90YWJsZV9iMShjb2RlKToKQEAgLTE3Nyw4ICsxNzYsNyBAQAogICAgIGlmIG1hcChvcmQsIHVuaWNocihrKS5sb3dlcigpKSAhPSB2OgogICAgICAgICBiM19leGNlcHRpb25zW2tdID0gdSIiLmpvaW4obWFwKHVuaWNocix2KSkKIAotYjMgPSBiM19leGNlcHRpb25zLml0ZW1zKCkKLWIzLnNvcnQoKQorYjMgPSBzb3J0ZWQoYjNfZXhjZXB0aW9ucy5pdGVtcygpKQogCiBwcmludCAiIiIKIGIzX2V4Y2VwdGlvbnMgPSB7IiIiCkBAIC0zNTMsOCArMzUxLDcgQEAKIGRlbCB0YWJsZXNbMF0KIGFzc2VydCBuYW1lID09ICJDLjYiCiAKLXRhYmxlID0gdGFibGUua2V5cygpCi10YWJsZS5zb3J0KCkKK3RhYmxlID0gc29ydGVkKHRhYmxlLmtleXMoKSkKIAogcHJpbnQgIiIiCiBjNl9zZXQgPSAiIiIgKyBjb21wYWN0X3NldCh0YWJsZSkgKyAiIiIKQEAgLTM2Nyw4ICszNjQsNyBAQAogZGVsIHRhYmxlc1swXQogYXNzZXJ0IG5hbWUgPT0gIkMuNyIKIAotdGFibGUgPSB0YWJsZS5rZXlzKCkKLXRhYmxlLnNvcnQoKQordGFibGUgPSBzb3J0ZWQodGFibGUua2V5cygpKQogCiBwcmludCAiIiIKIGM3X3NldCA9ICIiIiArIGNvbXBhY3Rfc2V0KHRhYmxlKSArICIiIgpAQCAtMzgxLDggKzM3Nyw3IEBACiBkZWwgdGFibGVzWzBdCiBhc3NlcnQgbmFtZSA9PSAiQy44IgogCi10YWJsZSA9IHRhYmxlLmtleXMoKQotdGFibGUuc29ydCgpCit0YWJsZSA9IHNvcnRlZCh0YWJsZS5rZXlzKCkpCiAKIHByaW50ICIiIgogYzhfc2V0ID0gIiIiICsgY29tcGFjdF9zZXQodGFibGUpICsgIiIiCkBAIC0zOTUsOCArMzkwLDcgQEAKIGRlbCB0YWJsZXNbMF0KIGFzc2VydCBuYW1lID09ICJDLjkiCiAKLXRhYmxlID0gdGFibGUua2V5cygpCi10YWJsZS5zb3J0KCkKK3RhYmxlID0gc29ydGVkKHRhYmxlLmtleXMoKSkKIAogcHJpbnQgIiIiCiBjOV9zZXQgPSAiIiIgKyBjb21wYWN0X3NldCh0YWJsZSkgKyAiIiIKZGlmZiAtLWdpdCBhL1Rvb2xzL3dlYmNoZWNrZXIvd2NndWkucHkgYi9Ub29scy93ZWJjaGVja2VyL3djZ3VpLnB5CmluZGV4IGNmYzQwOTguLmNkNTMyNjMgMTAwNzU1Ci0tLSBhL1Rvb2xzL3dlYmNoZWNrZXIvd2NndWkucHkKKysrIGIvVG9vbHMvd2ViY2hlY2tlci93Y2d1aS5weQpAQCAtNjQsMTIgKzY0LDYgQEAKIGltcG9ydCB0a3Rvb2xzCiBpbXBvcnQgd2ViY2hlY2tlcgogCi0jIE92ZXJyaWRlIHNvbWUgZm9yIGEgd2Vha2VyIHBsYXRmb3JtCi1pZiBzeXMucGxhdGZvcm0gPT0gJ21hYyc6Ci0gICAgd2ViY2hlY2tlci5ERUZST09UID0gImh0dHA6Ly9ncmFpbC5jbnJpLnJlc3Rvbi52YS51cy8iCi0gICAgd2ViY2hlY2tlci5NQVhQQUdFID0gNTAwMDAKLSAgICB3ZWJjaGVja2VyLnZlcmJvc2UgPSA0Ci0KIGRlZiBtYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICd0Om06cXZhJykKZGlmZiAtLWdpdCBhL1Rvb2xzL3dlYmNoZWNrZXIvd2Vic3Vja2VyLnB5IGIvVG9vbHMvd2ViY2hlY2tlci93ZWJzdWNrZXIucHkKaW5kZXggZWYyZmE0NC4uZGY0YzhlMSAxMDA3NTUKLS0tIGEvVG9vbHMvd2ViY2hlY2tlci93ZWJzdWNrZXIucHkKKysrIGIvVG9vbHMvd2ViY2hlY2tlci93ZWJzdWNrZXIucHkKQEAgLTk3LDggKzk3LDYgQEAKICAgICAgICAgICAgIHBhdGggPSBwYXRoICsgImluZGV4Lmh0bWwiCiAgICAgICAgIGlmIG9zLnNlcCAhPSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gb3Muc2VwLmpvaW4ocGF0aC5zcGxpdCgiLyIpKQotICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAibWFjIjoKLSAgICAgICAgICAgICAgICBwYXRoID0gb3Muc2VwICsgcGF0aAogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGhvc3QsIHBhdGgpCiAgICAgICAgIHJldHVybiBwYXRoCiAKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBkN2NhM2EwLi5lY2ZkZmM0MDIgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTEsMTQgKzEsMTQgQEAKICMhIC9iaW4vc2gKLSMgRnJvbSBjb25maWd1cmUuaW4gUmV2aXNpb246IDgwNzAxIC4KKyMgRnJvbSBjb25maWd1cmUuaW4gUmV2aXNpb246IDg4NTY4IC4KICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1IGZvciBweXRob24gMi42LgorIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjggZm9yIHB5dGhvbiAyLjcuCiAjCi0jIFJlcG9ydCBidWdzIHRvIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHl0aG9uLWJ1Z3M+LgorIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy8+LgogIwogIwogIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCi0jIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotIyBJbmMuCisjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjCiAjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCkBAIC05Miw2ICs5Miw3IEBACiBJRlM9IiAiIgkkYXNfbmwiCiAKICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCithc19teXNlbGY9CiBjYXNlICQwIGluICMoKAogICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CiAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKQEAgLTIxNywxMSArMjE4LDE4IEBACiAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCiAJIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KIAkjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorCSMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KIAlCQVNIX0VOVj0vZGV2L251bGwKIAlFTlY9L2Rldi9udWxsCiAJKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCiAJZXhwb3J0IENPTkZJR19TSEVMTAotCWV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKwljYXNlICQtIGluICMgKCgoKAorCSAgKnYqeCogfCAqeCp2KiApIGFzX29wdHM9LXZ4IDs7CisJICAqdiogKSBhc19vcHRzPS12IDs7CisJICAqeCogKSBhc19vcHRzPS14IDs7CisJICAqICkgYXNfb3B0cz0gOzsKKwllc2FjCisJZXhlYyAiJENPTkZJR19TSEVMTCIgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQogZmkKIAogICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKQEAgLTIzMiwxMCArMjQwLDEwIEBACiAgICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgogICBlbHNlCiAgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhbmQKLSQwOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHl0aG9uLWJ1Z3MgYWJvdXQgeW91ciBzeXN0ZW0sCi0kMDogaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMKLSQwOiBtZXNzYWdlLiBUaGVuIGluc3RhbGwgYSBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1bgotJDA6IHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhIHNoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS4iCiskMDogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy8gYWJvdXQgeW91ciBzeXN0ZW0sIGluY2x1ZGluZworJDA6IGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMgbWVzc2FnZS4gVGhlbgorJDA6IGluc3RhbGwgYSBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1biB0aGUgc2NyaXB0CiskMDogdW5kZXIgc3VjaCBhIHNoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS4iCiAgIGZpCiAgIGV4aXQgMQogZmkKQEAgLTMyMCw3ICszMjgsNyBAQAogICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKICAgICBkb25lCiAgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgotICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgogCiAKIH0gIyBhc19mbl9ta2Rpcl9wCkBAIC0zNjAsMTkgKzM2OCwxOSBAQAogZmkgIyBhc19mbl9hcml0aAogCiAKLSMgYXNfZm5fZXJyb3IgRVJST1IgW0xJTkVOTyBMT0dfRkRdCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCiAjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKLSMgc2NyaXB0IHdpdGggc3RhdHVzICQ/LCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgogYXNfZm5fZXJyb3IgKCkKIHsKLSAgYXNfc3RhdHVzPSQ/OyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKLSAgaWYgdGVzdCAiJDMiOyB0aGVuCi0gICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMiJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMSIgPiYkMworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CiAgIGZpCi0gICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMSIgPiYyCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCiAgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cwogfSAjIGFzX2ZuX2Vycm9yCiAKQEAgLTUzNCw3ICs1NDIsNyBAQAogZXhlYyA2PiYxCiAKICMgTmFtZSBvZiB0aGUgaG9zdC4KLSMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIExpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCiAjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KIGFjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAogCkBAIC01NTMsOSArNTYxLDkgQEAKICMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgogUEFDS0FHRV9OQU1FPSdweXRob24nCiBQQUNLQUdFX1RBUk5BTUU9J3B5dGhvbicKLVBBQ0tBR0VfVkVSU0lPTj0nMi42JwotUEFDS0FHRV9TVFJJTkc9J3B5dGhvbiAyLjYnCi1QQUNLQUdFX0JVR1JFUE9SVD0naHR0cDovL3d3dy5weXRob24ub3JnL3B5dGhvbi1idWdzJworUEFDS0FHRV9WRVJTSU9OPScyLjcnCitQQUNLQUdFX1NUUklORz0ncHl0aG9uIDIuNycKK1BBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVncy5weXRob24ub3JnLycKIFBBQ0tBR0VfVVJMPScnCiAKIGFjX3VuaXF1ZV9maWxlPSJJbmNsdWRlL29iamVjdC5oIgpAQCAtNjE2LDExICs2MjQsMTQgQEAKIFVTRV9USFJFQURfTU9EVUxFCiBTSUdOQUxfT0JKUwogVVNFX1NJR05BTF9NT0RVTEUKK0xJQkZGSV9JTkNMVURFRElSCitQS0dfQ09ORklHCiBTSExJQlMKIENGTEFHU0ZPUlNIQVJFRAogTElOS0ZPUlNIQVJFRAogQ0NTSEFSRUQKIEJMRFNIQVJFRAorTERDWFhTSEFSRUQKIExEU0hBUkVECiBTTwogTElCVE9PTF9DUlVGVApAQCAtNjMzLDggKzY0NCwxMCBAQAogSU5TVEFMTF9TQ1JJUFQKIElOU1RBTExfUFJPR1JBTQogU1ZOVkVSU0lPTgorQVJGTEFHUwogQVIKIFJBTkxJQgorR05VTEQKIExJTktDQwogUlVOU0hBUkVECiBJTlNUU09OQU1FCkBAIC02NjIsNiArNjc1LDcgQEAKIEVYVFJBUExBVERJUgogU0dJX0FCSQogTUFDSERFUAorRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVgKIEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWAogRlJBTUVXT1JLQUxUSU5TVEFMTExBU1QKIEZSQU1FV09SS0FMVElOU1RBTExGSVJTVApAQCAtNjcyLDcgKzY4Niw2IEBACiBQWVRIT05GUkFNRVdPUktESVIKIFBZVEhPTkZSQU1FV09SS0lERU5USUZJRVIKIFBZVEhPTkZSQU1FV09SSwotTElQT182NEJJVF9GTEFHUwogTElQT18zMkJJVF9GTEFHUwogQVJDSF9SVU5fMzJCSVQKIFVOSVZFUlNBTFNESwpAQCAtNzMyLDcgKzc0NSw5IEBACiB3aXRoX3B5ZGVidWcKIGVuYWJsZV90b29sYm94X2dsdWUKIHdpdGhfbGlicword2l0aF9zeXN0ZW1fZXhwYXQKIHdpdGhfc3lzdGVtX2ZmaQord2l0aF9kYm1saWJvcmRlcgogd2l0aF9zaWduYWxfbW9kdWxlCiB3aXRoX2RlY190aHJlYWRzCiB3aXRoX3RocmVhZHMKQEAgLTc0MiwxMCArNzU3LDEyIEBACiB3aXRoX2RvY19zdHJpbmdzCiB3aXRoX3RzYwogd2l0aF9weW1hbGxvYword2l0aF92YWxncmluZAogd2l0aF93Y3R5cGVfZnVuY3Rpb25zCiB3aXRoX2ZwZWN0bAogd2l0aF9saWJtCiB3aXRoX2xpYmMKK2VuYWJsZV9iaWdfZGlnaXRzCiBlbmFibGVfdW5pY29kZQogJwogICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKQEAgLTgxOSw4ICs4MzYsOSBAQAogICBmaQogCiAgIGNhc2UgJGFjX29wdGlvbiBpbgotICAqPSopCWFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7Ci0gICopCWFjX29wdGFyZz15ZXMgOzsKKyAgKj0/KikgYWNfb3B0YXJnPWBleHByICJYJGFjX29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKKyAgKj0pICAgYWNfb3B0YXJnPSA7OworICAqKSAgICBhY19vcHRhcmc9eWVzIDs7CiAgIGVzYWMKIAogICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgpAQCAtODY1LDcgKzg4Myw3IEBACiAgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCiAgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgogICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAogICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKICAgICBjYXNlICRhY191c2VyX29wdHMgaW4KQEAgLTg5MSw3ICs5MDksNyBAQAogICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCiAgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgogICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAogICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKICAgICBjYXNlICRhY191c2VyX29wdHMgaW4KQEAgLTEwOTUsNyArMTExMyw3IEBACiAgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCiAgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgogICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAogICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKICAgICBjYXNlICRhY191c2VyX29wdHMgaW4KQEAgLTExMTEsNyArMTEyOSw3IEBACiAgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCiAgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgogICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAogICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKICAgICBjYXNlICRhY191c2VyX29wdHMgaW4KQEAgLTExNDEsOCArMTE1OSw4IEBACiAgIHwgLS14LWxpYnJhcj0qIHwgLS14LWxpYnJhPSogfCAtLXgtbGlicj0qIHwgLS14LWxpYj0qIHwgLS14LWxpPSogfCAtLXgtbD0qKQogICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKIAotICAtKikgYXNfZm5fZXJyb3IgInVucmVjb2duaXplZCBvcHRpb246IFxgJGFjX29wdGlvbicKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJGFjX29wdGlvbicKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCiAgICAgOzsKIAogICAqPSopCkBAIC0xMTUwLDcgKzExNjgsNyBAQAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KICAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKICAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKLSAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcYCRhY19lbnZ2YXInIiA7OwogICAgIGVzYWMKICAgICBldmFsICRhY19lbnZ2YXI9XCRhY19vcHRhcmcKICAgICBleHBvcnQgJGFjX2VudnZhciA7OwpAQCAtMTE2MCw3ICsxMTc4LDcgQEAKICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKICAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKICAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKLSAgICA6ICR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259CisgICAgOiAiJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0iCiAgICAgOzsKIAogICBlc2FjCkBAIC0xMTY4LDEzICsxMTg2LDEzIEBACiAKIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgogICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCi0gIGFzX2ZuX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iCisgIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iCiBmaQogCiBpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiOyB0aGVuCiAgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KICAgICBubykgOzsKLSAgICBmYXRhbCkgYXNfZm5fZXJyb3IgInVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiIDs7CisgICAgZmF0YWwpIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OwogICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKICAgZXNhYwogZmkKQEAgLTExOTcsNyArMTIxNSw3IEBACiAgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKICAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CiAgIGVzYWMKLSAgYXNfZm5fZXJyb3IgImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCisgIGFzX2ZuX2Vycm9yICQ/ICJleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIgogZG9uZQogCiAjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCkBAIC0xMjExLDggKzEyMjksOCBAQAogaWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCiAgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgogICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQotICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IElmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCi0gICAgSWYgYSBjcm9zcyBjb21waWxlciBpcyBkZXRlY3RlZCB0aGVuIGNyb3NzIGNvbXBpbGUgbW9kZSB3aWxsIGJlIHVzZWQuIiA+JjIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkIiA+JjIKICAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgogICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKICAgZmkKQEAgLTEyMjcsOSArMTI0NSw5IEBACiBhY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKIGFjX2xzX2RpPWBscyAtZGkgLmAgJiYKIGFjX3B3ZF9sc19kaT1gY2QgIiRhY19wd2QiICYmIGxzIC1kaSAuYCB8fAotICBhc19mbl9lcnJvciAid29ya2luZyBkaXJlY3RvcnkgY2Fubm90IGJlIGRldGVybWluZWQiCisgIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKIHRlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAotICBhc19mbl9lcnJvciAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgogCiAKICMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KQEAgLTEyNjgsMTEgKzEyODYsMTEgQEAKIGZpCiBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgogICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKLSAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKIGZpCiBhY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCiBhY19hYnNfY29uZmRpcj1gKAotCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgIiRhY19tc2ciCisJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCBhc19mbl9lcnJvciAkPyAiJGFjX21zZyIKIAlwd2QpYAogIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KIGlmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KQEAgLTEyOTgsNyArMTMxNiw3IEBACiAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgogICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCiAgIGNhdCA8PF9BQ0VPRgotXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDIuNiB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBweXRob24gMi43IHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTEzMTIsNyArMTMzMCw3IEBACiAgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKICAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCiAgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKyAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcgLi4uJyBtZXNzYWdlcwogICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCiAgIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCiAgIC1uLCAtLW5vLWNyZWF0ZSAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCkBAIC0xMzU5LDcgKzEzNzcsNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHB5dGhvbiAyLjY6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBweXRob24gMi43OiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTEzNzYsNiArMTM5NCw4IEBACiAgIC0tZW5hYmxlLXRvb2xib3gtZ2x1ZSAgIGRpc2FibGUvZW5hYmxlIE1hY09TWCBnbHVlIGNvZGUgZm9yIGV4dGVuc2lvbnMKICAgLS1lbmFibGUtaXB2NiAgICAgICAgICAgRW5hYmxlIGlwdjYgKHdpdGggaXB2NCkgc3VwcG9ydAogICAtLWRpc2FibGUtaXB2NiAgICAgICAgICBEaXNhYmxlIGlwdjYgc3VwcG9ydAorICAtLWVuYWJsZS1iaWctZGlnaXRzWz1CSVRTXQorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgYmlnIGRpZ2l0cyBmb3IgUHl0aG9uIGxvbmdzIFtbQklUUz0zMF1dCiAgIC0tZW5hYmxlLXVuaWNvZGVbPXVjc1syNF1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBVbmljb2RlIHN0cmluZ3MgKGRlZmF1bHQgaXMgdWNzMikKIApAQCAtMTM5NSw3ICsxNDE1LDEzIEBACiAgIC0td2l0aC1zdWZmaXg9LmV4ZSAgICAgIHNldCBleGVjdXRhYmxlIHN1ZmZpeAogICAtLXdpdGgtcHlkZWJ1ZyAgICAgICAgICBidWlsZCB3aXRoIFB5X0RFQlVHIGRlZmluZWQKICAgLS13aXRoLWxpYnM9J2xpYjEgLi4uJyAgbGluayBhZ2FpbnN0IGFkZGl0aW9uYWwgbGlicworICAtLXdpdGgtc3lzdGVtLWV4cGF0ICAgICBidWlsZCBweWV4cGF0IG1vZHVsZSB1c2luZyBhbiBpbnN0YWxsZWQgZXhwYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeQogICAtLXdpdGgtc3lzdGVtLWZmaSAgICAgICBidWlsZCBfY3R5cGVzIG1vZHVsZSB1c2luZyBhbiBpbnN0YWxsZWQgZmZpIGxpYnJhcnkKKyAgLS13aXRoLWRibWxpYm9yZGVyPWRiMTpkYjI6Li4uCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIGNoZWNrIGRiIGJhY2tlbmRzIGZvciBkYm0uIFZhbGlkIHZhbHVlIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb24gc2VwYXJhdGVkIHN0cmluZyB3aXRoIHRoZSBiYWNrZW5kIG5hbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGBuZGJtJywgYGdkYm0nIGFuZCBgYmRiJy4KICAgLS13aXRoLXNpZ25hbC1tb2R1bGUgICAgZGlzYWJsZS9lbmFibGUgc2lnbmFsIG1vZHVsZQogICAtLXdpdGgtZGVjLXRocmVhZHMgICAgICB1c2UgREVDIEFscGhhL09TRjEgdGhyZWFkLXNhZmUgbGlicmFyaWVzCiAgIC0td2l0aChvdXQpLXRocmVhZHNbPURJUkVDVE9SWV0KQEAgLTE0MDYsNiArMTQzMiw3IEBACiAgIC0td2l0aChvdXQpLWRvYy1zdHJpbmdzIGRpc2FibGUvZW5hYmxlIGRvY3VtZW50YXRpb24gc3RyaW5ncwogICAtLXdpdGgob3V0KS10c2MgICAgICAgICBlbmFibGUvZGlzYWJsZSB0aW1lc3RhbXAgY291bnRlciBwcm9maWxlCiAgIC0td2l0aChvdXQpLXB5bWFsbG9jICAgIGRpc2FibGUvZW5hYmxlIHNwZWNpYWxpemVkIG1hbGxvY3MKKyAgLS13aXRoLXZhbGdyaW5kICAgICAgICAgRW5hYmxlIFZhbGdyaW5kIHN1cHBvcnQKICAgLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMgdXNlIHdjdHlwZS5oIGZ1bmN0aW9ucwogICAtLXdpdGgtZnBlY3RsICAgICAgICAgICBlbmFibGUgU0lHRlBFIGNhdGNoaW5nCiAgIC0td2l0aC1saWJtPVNUUklORyAgICAgIG1hdGggbGlicmFyeQpAQCAtMTQyNCw3ICsxNDUxLDcgQEAKIFVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCiBpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCiAKLVJlcG9ydCBidWdzIHRvIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHl0aG9uLWJ1Z3M+LgorUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvPi4KIF9BQ0VPRgogYWNfc3RhdHVzPSQ/CiBmaQpAQCAtMTQ4NywxMCArMTUxNCwxMCBAQAogdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKLXB5dGhvbiBjb25maWd1cmUgMi42Ci1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjUKK3B5dGhvbiBjb25maWd1cmUgMi43CitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjgKIAotQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KIF9BQ0VPRgpAQCAtMTUzNCw3ICsxNTYxLDcgQEAKIAogCWFjX3JldHZhbD0xCiBmaQotICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KICAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCiAKIH0gIyBhY19mbl9jX3RyeV9jb21waWxlCkBAIC0xNTYwLDcgKzE1ODcsNyBAQAogICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKICAgZmkKICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPi9kZXYvbnVsbCAmJiB7CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKIAkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKIAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgogICAgICAgIH07IHRoZW4gOgpAQCAtMTU3MSw3ICsxNTk4LDcgQEAKIAogICAgIGFjX3JldHZhbD0xCiBmaQotICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KICAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCiAKIH0gIyBhY19mbl9jX3RyeV9jcHAKQEAgLTE1ODQsMTAgKzE2MTEsMTAgQEAKIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgKCkKIHsKICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBpZiB7IGFzX3Zhcj0kMzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgIGlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZmkKIGV2YWwgYWNfcmVzPVwkJDMKQEAgLTE2MjMsNyArMTY1MCw3IEBACiBlbHNlCiAgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQogJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CiAKQEAgLTE2NDYsMTcgKzE2NzMsMTUgQEAKICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQogJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0oIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gaHR0cDovL3d3dy5weXRob24ub3JnL3B5dGhvbi1idWdzICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorKCAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKICAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgogICAgIDs7CiBlc2FjCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQotaWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGV2YWwgIiQzPVwkYWNfaGVhZGVyX2NvbXBpbGVyIgpAQCAtMTY2NSw3ICsxNjkwLDcgQEAKIAkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQogJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQogZmkKLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCiAKIH0gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsCiAKQEAgLTE3MDYsNyArMTczMSw3IEBACiAgICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKIGZpCiAgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCiAgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAogCiB9ICMgYWNfZm5fY190cnlfcnVuCkBAIC0xNzIwLDcgKzE3NDUsNyBAQAogICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQotaWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTE3MzgsNyArMTc2Myw3IEBACiBldmFsIGFjX3Jlcz1cJCQzCiAJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKICRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCiAKIH0gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlCiAKQEAgLTE3ODMsNyArMTgwOCw3IEBACiAgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCiAgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbwotICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KICAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCiAKIH0gIyBhY19mbl9jX3RyeV9saW5rCkBAIC0xNzk3LDcgKzE4MjIsNyBAQAogICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQotaWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGV2YWwgIiQzPW5vIgpAQCAtMTgzOCwxMCArMTg2MywxMzcgQEAKIGV2YWwgYWNfcmVzPVwkJDMKIAkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQogJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KIAogfSAjIGFjX2ZuX2NfY2hlY2tfdHlwZQogCisjIGFjX2ZuX2NfZmluZF91aW50WF90IExJTkVOTyBCSVRTIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZHMgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIHdpdGggd2lkdGggQklUUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2ZpbmRfdWludFhfdCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVpbnQkMl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aW50JDJfdC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPW5vIgorICAgICAjIE9yZGVyIGlzIGltcG9ydGFudCAtIG5ldmVyIGNoZWNrIGEgdHlwZSB0aGF0IGlzIHBvdGVudGlhbGx5IHNtYWxsZXIKKyAgICAgIyB0aGFuIGhhbGYgb2YgdGhlIGV4cGVjdGVkIHRhcmdldCB3aWR0aC4KKyAgICAgZm9yIGFjX3R5cGUgaW4gdWludCQyX3QgJ3Vuc2lnbmVkIGludCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyBcCisJICd1bnNpZ25lZCBsb25nIGxvbmcgaW50JyAndW5zaWduZWQgc2hvcnQgaW50JyAndW5zaWduZWQgY2hhcic7IGRvCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCgkYWNfdHlwZSkgLTEgPj4gKCQyIC8gMiAtIDEpKSA+PiAoJDIgLyAyIC0gMSkgPT0gMyldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXNlICRhY190eXBlIGluICMoCisgIHVpbnQkMl90KSA6CisgICAgZXZhbCAiJDM9eWVzIiA7OyAjKAorICAqKSA6CisgICAgZXZhbCAiJDM9XCRhY190eXBlIiA7OworZXNhYworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkMyJcIiA9IHgibm8iOyB0aGVuIDoKKworZWxzZQorICBicmVhaworZmkKKyAgICAgZG9uZQorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfZmluZF91aW50WF90CisKKyMgYWNfZm5fY19maW5kX2ludFhfdCBMSU5FTk8gQklUUyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZHMgYSBzaWduZWQgaW50ZWdlciB0eXBlIHdpdGggd2lkdGggQklUUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2ZpbmRfaW50WF90ICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW50JDJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50JDJfdC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPW5vIgorICAgICAjIE9yZGVyIGlzIGltcG9ydGFudCAtIG5ldmVyIGNoZWNrIGEgdHlwZSB0aGF0IGlzIHBvdGVudGlhbGx5IHNtYWxsZXIKKyAgICAgIyB0aGFuIGhhbGYgb2YgdGhlIGV4cGVjdGVkIHRhcmdldCB3aWR0aC4KKyAgICAgZm9yIGFjX3R5cGUgaW4gaW50JDJfdCAnaW50JyAnbG9uZyBpbnQnIFwKKwkgJ2xvbmcgbG9uZyBpbnQnICdzaG9ydCBpbnQnICdzaWduZWQgY2hhcic7IGRvCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKwkgICAgIGVudW0geyBOID0gJDIgLyAyIC0gMSB9OworaW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgwIDwgKCRhY190eXBlKSAoKCgoKCRhY190eXBlKSAxIDw8IE4pIDw8IE4pIC0gMSkgKiAyICsgMSkpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKwkgICAgICAgIGVudW0geyBOID0gJDIgLyAyIC0gMSB9OworaW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJGFjX3R5cGUpICgoKCgoJGFjX3R5cGUpIDEgPDwgTikgPDwgTikgLSAxKSAqIDIgKyAxKQorCQkgPCAoJGFjX3R5cGUpICgoKCgoJGFjX3R5cGUpIDEgPDwgTikgPDwgTikgLSAxKSAqIDIgKyAyKSldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGNhc2UgJGFjX3R5cGUgaW4gIygKKyAgaW50JDJfdCkgOgorICAgIGV2YWwgIiQzPXllcyIgOzsgIygKKyAgKikgOgorICAgIGV2YWwgIiQzPVwkYWNfdHlwZSIgOzsKK2VzYWMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJDMiXCIgPSB4Im5vIjsgdGhlbiA6CisKK2Vsc2UKKyAgYnJlYWsKK2ZpCisgICAgIGRvbmUKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2ZpbmRfaW50WF90CisKICMgYWNfZm5fY19jb21wdXRlX2ludCBMSU5FTk8gRVhQUiBWQVIgSU5DTFVERVMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVHJpZXMgdG8gZmluZCB0aGUgY29tcGlsZS10aW1lIHZhbHVlIG9mIEVYUFIgaW4gYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMKQEAgLTIwMTUsNyArMjE2Nyw3IEBACiBybSAtZiBjb25mdGVzdC52YWwKIAogICBmaQotICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KICAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCiAKIH0gIyBhY19mbl9jX2NvbXB1dGVfaW50CkBAIC0yMDI4LDcgKzIxODAsNyBAQAogICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQotaWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTIwODMsNyArMjIzNSw3IEBACiBldmFsIGFjX3Jlcz1cJCQzCiAJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKICRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCiAKIH0gIyBhY19mbl9jX2NoZWNrX2Z1bmMKIApAQCAtMjA5Niw3ICsyMjQ4LDcgQEAKICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMi4kMyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuJDMuLi4gIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSQ0OyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKK2lmIGV2YWwgXCR7JDQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0yMTQwLDE5ICsyMjkyLDIyIEBACiBldmFsIGFjX3Jlcz1cJCQ0CiAJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKICRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCiAKIH0gIyBhY19mbl9jX2NoZWNrX21lbWJlcgogCi0jIGFjX2ZuX2NfY2hlY2tfZGVjbCBMSU5FTk8gU1lNQk9MIFZBUgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGVzdHMgd2hldGhlciBTWU1CT0wgaXMgZGVjbGFyZWQsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorIyBhY19mbl9jX2NoZWNrX2RlY2wgTElORU5PIFNZTUJPTCBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgU1lNQk9MIGlzIGRlY2xhcmVkIGluIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KIGFjX2ZuX2NfY2hlY2tfZGVjbCAoKQogewogICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkMiBpcyBkZWNsYXJlZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICQyIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9Ci1pZiB7IGFzX3Zhcj0kMzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgIGFzX2RlY2xfbmFtZT1gZWNobyAkMnxzZWQgJ3MvICooLiovLydgCisgIGFzX2RlY2xfdXNlPWBlY2hvICQyfHNlZCAtZSAncy8oLygoLycgLWUgJ3MvKS8pIDAmLycgLWUgJ3MvLC8pIDAmICgvZydgCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkYXNfZGVjbF9uYW1lIGlzIGRlY2xhcmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTIxNjEsOCArMjMxNiwxMiBAQAogaW50CiBtYWluICgpCiB7Ci0jaWZuZGVmICQyCi0gICh2b2lkKSAkMjsKKyNpZm5kZWYgJGFzX2RlY2xfbmFtZQorI2lmZGVmIF9fY3BsdXNwbHVzCisgICh2b2lkKSAkYXNfZGVjbF91c2U7CisjZWxzZQorICAodm9pZCkgJGFzX2RlY2xfbmFtZTsKKyNlbmRpZgogI2VuZGlmCiAKICAgOwpAQCAtMjE3OSwxNSArMjMzOCwxNSBAQAogZXZhbCBhY19yZXM9XCQkMwogCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiAkYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwogCiB9ICMgYWNfZm5fY19jaGVja19kZWNsCiBjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBweXRob24gJGFzX21lIDIuNiwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjUuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKK0l0IHdhcyBjcmVhdGVkIGJ5IHB5dGhvbiAkYXNfbWUgMi43LCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OC4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgICQgJDAgJEAKIApAQCAtMjI5NywxMSArMjQ1Niw5IEBACiAgIHsKICAgICBlY2hvCiAKLSAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKICMjIENhY2hlIHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLSAjIyIKICAgICBlY2hvCiAgICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKICgKQEAgLTIzMzUsMTEgKzI0OTIsOSBAQAogKQogICAgIGVjaG8KIAotICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBPdXRwdXQgdmFyaWFibGVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgICAgZWNobwogICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKICAgICBkbwpAQCAtMjM1MiwxMSArMjUwNyw5IEBACiAgICAgZWNobwogCiAgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKICMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKICAgICAgIGVjaG8KICAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCiAgICAgICBkbwpAQCAtMjM3MCwxMSArMjUyMyw5IEBACiAgICAgZmkKIAogICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0gIyMKKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLSAjIwogIyMgY29uZmRlZnMuaC4gIyMKLSMjIC0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tICMjIgogICAgICAgZWNobwogICAgICAgY2F0IGNvbmZkZWZzLmgKICAgICAgIGVjaG8KQEAgLTI0MjksNyArMjU4MCwxMiBAQAogYWNfc2l0ZV9maWxlMT1OT05FCiBhY19zaXRlX2ZpbGUyPU5PTkUKIGlmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KLSAgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEUKKyAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KKyAgY2FzZSAkQ09ORklHX1NJVEUgaW4gIygoCisgICAgLSopICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgICAqLyopIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFOzsKKyAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICBlc2FjCiBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgogICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKICAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQpAQCAtMjQ0NCw3ICsyNjAwLDExIEBACiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQogJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQogICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQotICAgIC4gIiRhY19zaXRlX2ZpbGUiCisgICAgLiAiJGFjX3NpdGVfZmlsZSIgXAorICAgICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiZmFpbGVkIHRvIGxvYWQgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KICAgZmkKIGRvbmUKIApAQCAtMjUyMCw3ICsyNjgwLDcgQEAKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9Ci0gIGFzX2ZuX2Vycm9yICJydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiAiJExJTkVOTyIgNQorICBhc19mbl9lcnJvciAkPyAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUKIGZpCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgTWFpbiBib2R5IG9mIHNjcmlwdC4gIyMKQEAgLTI1MzgsNiArMjY5OCwxMSBAQAogCiAKIAoraWYgdGVzdCAiJHByZWZpeCIgIT0gIi8iOyB0aGVuCisgICAgcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAtZSAncy9cLyQvL2cnYAorZmkKKworCiAKIAogIyBXZSBkb24ndCB1c2UgUEFDS0FHRV8gdmFyaWFibGVzLCBhbmQgdGhleSBjYXVzZSBjb25mbGljdHMKQEAgLTI1NDcsNyArMjcxMiw3IEBACiBtdiBjb25mZGVmcy5oLm5ldyBjb25mZGVmcy5oCiAKIAotVkVSU0lPTj0yLjYKK1ZFUlNJT049Mi43CiAKIAogU09WRVJTSU9OPTEuMApAQCAtMjYxNSw3ICsyNzgwLDcgQEAKIAkJVU5JVkVSU0FMU0RLPSRlbmFibGV2YWwKIAkJaWYgdGVzdCAhIC1kICIke1VOSVZFUlNBTFNES30iCiAJCXRoZW4KLQkJCWFzX2ZuX2Vycm9yICItLWVuYWJsZS11bml2ZXJzYWxzZGsgc3BlY2lmaWVzIG5vbi1leGlzdGluZyBTREs6ICR7VU5JVkVSU0FMU0RLfSIgIiRMSU5FTk8iIDUKKwkJCWFzX2ZuX2Vycm9yICQ/ICItLWVuYWJsZS11bml2ZXJzYWxzZGsgc3BlY2lmaWVzIG5vbi1leGlzdGluZyBTREs6ICR7VU5JVkVSU0FMU0RLfSIgIiRMSU5FTk8iIDUKIAkJZmkKIAkJOzsKIAllc2FjCkBAIC0yNjQyLDcgKzI4MDcsNiBAQAogCiBVTklWRVJTQUxfQVJDSFM9IjMyLWJpdCIKIAotCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzLi4uICIgPiY2OyB9CiAKQEAgLTI2NTUsNyArMjgxOSw3IEBACiAgICAgICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iIDsgdGhlbgogCQk6CiAJZWxzZQotCQlhc19mbl9lcnJvciAiLS13aXRoLXVuaXZlcnNhbC1hcmNocyB3aXRob3V0IC0tZW5hYmxlLXVuaXZlcnNhbHNkay4gU2VlIE1hYy9SRUFETUUiICIkTElORU5PIiA1CisJCWFzX2ZuX2Vycm9yICQ/ICItLXdpdGgtdW5pdmVyc2FsLWFyY2hzIHdpdGhvdXQgLS1lbmFibGUtdW5pdmVyc2Fsc2RrLiBTZWUgTWFjL1JFQURNRSIgIiRMSU5FTk8iIDUKIAlmaQogCiBlbHNlCkBAIC0yNjc1LDcgKzI4MzksNyBAQAogICAgIGlmIHRlc3QgIiR7ZW5hYmxlX2ZyYW1ld29ya30iOyB0aGVuCiAJICAgIDoKICAgICBlbHNlCi0JYXNfZm5fZXJyb3IgIi0td2l0aC1mcmFtZXdvcmstbmFtZSB3aXRob3V0IC0tZW5hYmxlLWZyYW1ld29yay4gU2VlIE1hYy9SRUFETUUiICIkTElORU5PIiA1CisJYXNfZm5fZXJyb3IgJD8gIi0td2l0aC1mcmFtZXdvcmstbmFtZSB3aXRob3V0IC0tZW5hYmxlLWZyYW1ld29yay4gU2VlIE1hYy9SRUFETUUiICIkTElORU5PIiA1CiAgICAgZmkKICAgICBQWVRIT05GUkFNRVdPUks9JHt3aXRodmFsfQogICAgIFBZVEhPTkZSQU1FV09SS0RJUj0ke3dpdGh2YWx9LmZyYW1ld29yawpAQCAtMjcxNCwyNiArMjg3OCw1NSBAQAogCQllbmFibGVfZnJhbWV3b3JrPQogCQk7OwogCSopCi0JCVBZVEhPTkZSQU1FV09SS1BSRUZJWD0kZW5hYmxldmFsCisJCVBZVEhPTkZSQU1FV09SS1BSRUZJWD0iJHtlbmFibGV2YWx9IgogCQlQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSPSRQWVRIT05GUkFNRVdPUktQUkVGSVgvJFBZVEhPTkZSQU1FV09SS0RJUgogCQlGUkFNRVdPUktJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUiCiAJCUZSQU1FV09SS0FMVElOU1RBTExGSVJTVD0iZnJhbWV3b3JraW5zdGFsbHN0cnVjdHVyZSBiaW5pbnN0YWxsIG1hbmluc3RhbGwiCi0JCWNhc2UgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgaW4KLQkJYWxsfDMtd2F5fGludGVsKQotCQkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHM0d2F5IGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHM0d2F5IgotCQkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHM0d2F5IGZyYW1ld29ya2FsdGluc3RhbGx1bml4dG9vbHM0d2F5IgotCQkJOzsKLQkJKikKLQkJCUZSQU1FV09SS0lOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHMiCi0JCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgotCQkJOzsKLQkJZXNhYworCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgorCiAJCWVsc2UKIAkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHtwcmVmaXh9IgogCQlmaQorCisJCWNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKwkJL1N5c3RlbSopCisJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKKwkJCWlmIHRlc3QgIiR7cHJlZml4fSIgPSAiTk9ORSIgOyB0aGVuCisJCQkJIyBTZWUgYmVsb3cKKwkJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9Ii91c3IiCisJCQlmaQorCQkJOzsKKworCQkvTGlicmFyeSopCisJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKKwkJCTs7CisKKwkJKi9MaWJyYXJ5L0ZyYW1ld29ya3MpCisJCQlNRElSPSJgZGlybmFtZSAiJHtlbmFibGV2YWx9ImAiCisJCQlNRElSPSJgZGlybmFtZSAiJHtNRElSfSJgIgorCQkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9IiR7TURJUn0vQXBwbGljYXRpb25zIgorCisJCQlpZiB0ZXN0ICIke3ByZWZpeH0iID0gIk5PTkUiOyB0aGVuCisJCQkJIyBVc2VyIGhhc24ndCBzcGVjaWZpZWQgdGhlCisJCQkJIyAtLXByZWZpeCBvcHRpb24sIGJ1dCB3YW50cyB0byBpbnN0YWxsCisJCQkJIyB0aGUgZnJhbWV3b3JrIGluIGEgbm9uLWRlZmF1bHQgbG9jYXRpb24sCisJCQkJIyBlbnN1cmUgdGhhdCB0aGUgY29tcGF0aWJpbGl0eSBsaW5rcyBnZXQKKwkJCQkjIGluc3RhbGxlZCByZWxhdGl2ZSB0byB0aGF0IHByZWZpeCBhcyB3ZWxsCisJCQkJIyBpbnN0ZWFkIG9mIGluIC91c3IvbG9jYWwuCisJCQkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIke01ESVJ9IgorCQkJZmkKKwkJCTs7CisKKwkJKikKKwkJCUZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYPSIvQXBwbGljYXRpb25zIgorCQkJOzsKKwkJZXNhYworCiAJCXByZWZpeD0kUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUi9WZXJzaW9ucy8kVkVSU0lPTgogCiAJCSMgQWRkIGZpbGVzIGZvciBNYWMgc3BlY2lmaWMgY29kZSB0byB0aGUgbGlzdCBvZiBvdXRwdXQKQEAgLTI3NjcsMTEgKzI5NjAsNiBAQAogCWZpCiAJZW5hYmxlX2ZyYW1ld29yaz0KIAotCWlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImFsbCIKLQl0aGVuCi0JCUZSQU1FV09SS0lOU1RBTExMQVNUPXVwZGF0ZTR3YXl1bml2ZXJzYWwKLQkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9dXBkYXRlNHdheXVuaXZlcnNhbAotCWZpCiAKIGZpCiAKQEAgLTI3ODYsOSArMjk3NCwxMCBAQAogCiAKIAorCiAjI0FDX0FSR19XSVRIKGR5bGQsCi0jIyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1keWxkLAotIyMgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgKE9wZW5TdGVwfFJoYXBzb2R5KSBkeW5hbWljIGxpbmtlcikpCisjIyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZHlsZF0sCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtVc2UgKE9wZW5TdGVwfFJoYXBzb2R5KSBkeW5hbWljIGxpbmtlcl0pKQogIyMKICMgU2V0IG5hbWUgZm9yIG1hY2hpbmUtZGVwZW5kZW50IGxpYnJhcnkgZmlsZXMKIApAQCAtMjc5Nyw3ICsyOTg2LDcgQEAKIGlmIHRlc3QgLXogIiRNQUNIREVQIgogdGhlbgogCWFjX3N5c19zeXN0ZW09YHVuYW1lIC1zYAotCWlmIHRlc3QgIiRhY19zeXNfc3lzdGVtIiA9ICJBSVgiIC1vICIkYWNfc3lzX3N5c3RlbSIgPSAiTW9udGVyZXk2NCIgXAorCWlmIHRlc3QgIiRhY19zeXNfc3lzdGVtIiA9ICJBSVgiIFwKIAktbyAiJGFjX3N5c19zeXN0ZW0iID0gIlVuaXhXYXJlIiAtbyAiJGFjX3N5c19zeXN0ZW0iID0gIk9wZW5VTklYIjsgdGhlbgogCQlhY19zeXNfcmVsZWFzZT1gdW5hbWUgLXZgCiAJZWxzZQpAQCAtMjg1NSw5ICszMDQ0LDEyIEBACiAgICMgTWFyYyBSZWNodAogICBOZXRCU0QvMS41IHwgTmV0QlNELzEuNS4qIHwgTmV0QlNELzEuNiB8IE5ldEJTRC8xLjYuKiB8IE5ldEJTRC8xLjZbQS1TXSkKICAgICBkZWZpbmVfeG9wZW5fc291cmNlPW5vOzsKLSAgIyBPbiBTb2xhcmlzIDIuNiwgc3lzL3dhaXQuaCBpcyBpbmNvbnNpc3RlbnQgaW4gdGhlIHVzYWdlCi0gICMgb2YgdW5pb24gX18/c2lndmFsLiBSZXBvcnRlZCBieSBTdHVhcnQgQmlzaG9wLgotICBTdW5PUy81LjYpCisgICMgRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgU29sYXJpcywgX1hPUEVOX1NPVVJDRSBpcyBub3Qgc28gbXVjaCBhCisgICMgcmVxdWVzdCB0byBlbmFibGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBzdGFuZGFyZCBhcyBhIHJlcXVlc3QKKyAgIyB0byBkaXNhYmxlIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHN0YW5kYXJkLiAgVGhlIGJlc3Qgd2F5CisgICMgZm9yIFB5dGhvbiB0byB1c2UgU29sYXJpcyBpcyBzaW1wbHkgdG8gbGVhdmUgX1hPUEVOX1NPVVJDRSBvdXQKKyAgIyBlbnRpcmVseSBhbmQgZGVmaW5lIF9fRVhURU5TSU9OU19fIGluc3RlYWQuCisgIFN1bk9TLyopCiAgICAgZGVmaW5lX3hvcGVuX3NvdXJjZT1ubzs7CiAgICMgT24gVW5peFdhcmUgNywgdV9sb25nIGlzIG5ldmVyIGRlZmluZWQgd2l0aCBfWE9QRU5fU09VUkNFLAogICAjIGJ1dCB1c2VkIGluIC91c3IvaW5jbHVkZS9uZXRpbmV0L3RjcC5oLiBSZXBvcnRlZCBieSBUaW0gUmljZS4KQEAgLTI5MDMsMzggKzMwOTUsMTcgQEAKIAogaWYgdGVzdCAkZGVmaW5lX3hvcGVuX3NvdXJjZSA9IHllcwogdGhlbgotICAjIE9uIFNvbGFyaXMgdy8gZysrIGl0IGFwcGVhcnMgdGhhdCBfWE9QRU5fU09VUkNFIGhhcyB0byBiZQotICAjIGRlZmluZWQgcHJlY2lzZWx5IGFzIGcrKyBkZWZpbmVzIGl0Ci0gICMgRnVydGhlcm1vcmUsIG9uIFNvbGFyaXMgMTAsIFhQRzYgcmVxdWlyZXMgdGhlIHVzZSBvZiBhIEM5OQotICAjIGNvbXBpbGVyCi0gIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCi0gICAgU3VuT1MvNS44fFN1bk9TLzUuOXxTdW5PUy81LjEwKQotCi0kYXNfZWNobyAiI2RlZmluZSBfWE9QRU5fU09VUkNFIDUwMCIgPj5jb25mZGVmcy5oCi0KLSAgICAgIDs7Ci0gICAgKikKIAogJGFzX2VjaG8gIiNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAiID4+Y29uZmRlZnMuaAogCi0gICAgICA7OwotICBlc2FjCiAKICAgIyBPbiBUcnU2NCBVbml4IDQuMEYsIGRlZmluaW5nIF9YT1BFTl9TT1VSQ0UgYWxzbyByZXF1aXJlcwogICAjIGRlZmluaXRpb24gb2YgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCBhbmQgX1BPU0lYX0NfU09VUkNFLCBvciBlbHNlCiAgICMgc2V2ZXJhbCBBUElzIGFyZSBub3QgZGVjbGFyZWQuIFNpbmNlIHRoaXMgaXMgYWxzbyBuZWVkZWQgaW4gc29tZQogICAjIGNhc2VzIGZvciBIUC1VWCwgd2UgZGVmaW5lIGl0IGdsb2JhbGx5LgotICAjIGV4Y2VwdCBmb3IgU29sYXJpcyAxMCwgd2hlcmUgaXQgbXVzdCBub3QgYmUgZGVmaW5lZCwKLSAgIyBhcyBpdCBpbXBsaWVzIFhQRzQuMgotICBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgotICAgIFN1bk9TLzUuMTApCi0gICAgICA7OwotICAgICopCiAKICRhc19lY2hvICIjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMSIgPj5jb25mZGVmcy5oCiAKLSAgICAgIDs7Ci0gIGVzYWMKIAogCiAkYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfQ19TT1VSQ0UgMjAwMTEyTCIgPj5jb25mZGVmcy5oCkBAIC0zMDIzLDcgKzMxOTQsNyBAQAogZWxzZQogCiAJY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgotCUFJWCopICAgQ0M9Y2NfcgorCUFJWCopICAgQ0M9JHtDQzoteGxjX3J9CiAJCXdpdGhvdXRfZ2NjPTs7CiAJQmVPUyopCiAJCWNhc2UgJEJFX0hPU1RfQ1BVIGluCkBAIC0zMDQwLDE1ICszMjExLDEyIEBACiAJCQlPUFQ9IiRPUFQgLU8iCiAJCQk7OwogCQkqKQotCQkJYXNfZm5fZXJyb3IgIlVua25vd24gQmVPUyBwbGF0Zm9ybSBcIiRCRV9IT1NUX0NQVVwiIiAiJExJTkVOTyIgNQorCQkJYXNfZm5fZXJyb3IgJD8gIlVua25vd24gQmVPUyBwbGF0Zm9ybSBcIiRCRV9IT1NUX0NQVVwiIiAiJExJTkVOTyIgNQogCQkJOzsKIAkJZXNhYwogCQlBUj0iXCQoc3JjZGlyKS9Nb2R1bGVzL2FyX2Jlb3MiCiAJCVJBTkxJQj06CiAJCTs7Ci0gICAgTW9udGVyZXkqKQotICAgICAgICBSQU5MSUI9OgotICAgICAgICB3aXRob3V0X2djYz07OwogCSopCXdpdGhvdXRfZ2NjPW5vOzsKIAllc2FjCiBmaQpAQCAtMzA1OSwxMCArMzIyNywxMyBAQAogIyBJZiB0aGUgdXNlciBzd2l0Y2hlcyBjb21waWxlcnMsIHdlIGNhbid0IGJlbGlldmUgdGhlIGNhY2hlCiBpZiB0ZXN0ICEgLXogIiRhY19jdl9wcm9nX0NDIiAtYSAhIC16ICIkQ0MiIC1hICIkQ0MiICE9ICIkYWNfY3ZfcHJvZ19DQyIKIHRoZW4KLSAgYXNfZm5fZXJyb3IgImNhY2hlZCBDQyBpcyBkaWZmZXJlbnQgLS0gdGhyb3cgYXdheSAkY2FjaGVfZmlsZQorICBhc19mbl9lcnJvciAkPyAiY2FjaGVkIENDIGlzIGRpZmZlcmVudCAtLSB0aHJvdyBhd2F5ICRjYWNoZV9maWxlCiAoaXQgaXMgYWxzbyBhIGdvb2QgaWRlYSB0byBkbyAnbWFrZSBjbGVhbicgYmVmb3JlIGNvbXBpbGluZykiICIkTElORU5PIiA1CiBmaQogCisjIElmIHRoZSB1c2VyIHNldCBDRkxBR1MsIHVzZSB0aGlzIGluc3RlYWQgb2YgdGhlIGF1dG9tYXRpY2FsbHkKKyMgZGV0ZXJtaW5lZCBzZXR0aW5nCitwcmVzZXRfY2ZsYWdzPSIkQ0ZMQUdTIgogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCkBAIC0zMDczLDcgKzMyNDQsNyBAQAogc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCkBAIC0zMTEzLDcgKzMyODQsNyBAQAogc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgpAQCAtMzE2Niw3ICszMzM3LDcgQEAKIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCkBAIC0zMjA2LDcgKzMzNzcsNyBAQAogc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCkBAIC0zMjY1LDcgKzM0MzYsNyBAQAogc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCkBAIC0zMzA5LDcgKzM0ODAsNyBAQAogc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCkBAIC0zMzYzLDggKzM1MzQsOCBAQAogCiB0ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQorYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAKICMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQpAQCAtMzQ3OCw5ICszNjQ5LDggQEAKIAogeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgIkMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KQEAgLTM1MjIsOCArMzY5Miw4IEBACiBlbHNlCiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiBmaQogcm0gLWYgY29uZnRlc3QgY29uZnRlc3QkYWNfY3ZfZXhlZXh0CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CkBAIC0zNTgwLDkgKzM3NTAsOSBAQAogICAgIGVsc2UKIAl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICJjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgogSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICAgZmkKICAgZmkKIGZpCkBAIC0zNTkzLDcgKzM3NjMsNyBAQAogYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfb2JqZXh0Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMzYzMyw4ICszODAzLDggQEAKIAogeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogZmkKIHJtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKQEAgLTM2NDQsNyArMzgxNCw3IEBACiBhY19vYmpleHQ9JE9CSkVYVAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0zNjgxLDcgKzM4NTEsNyBAQAogYWNfc2F2ZV9DRkxBR1M9JENGTEFHUwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfcHJvZ19jY19nKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCkBAIC0zNzU5LDcgKzM5MjksNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX2NjX2M4OSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2N2X3Byb2dfY2NfYzg5PW5vCkBAIC0zODU0LDYgKzQwMjQsMTAgQEAKIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKK2lmIHRlc3QgISAteiAiJHByZXNldF9jZmxhZ3MiCit0aGVuCisJQ0ZMQUdTPSRwcmVzZXRfY2ZsYWdzCitmaQogCiAKIApAQCAtMzg5NCw3ICs0MDY4LDcgQEAKIHNldCBkdW1teSBnKys7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3BhdGhfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2FzZSAkQ1hYIGluCkBAIC0zOTM1LDcgKzQxMDksNyBAQAogc2V0IGR1bW15IGMrKzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfcGF0aF9DWFgrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXNlICRDWFggaW4KQEAgLTM5ODYsNyArNDE2MCw3IEBACiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Byb2dfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KQEAgLTQwNTcsNyArNDIzMSw3IEBACiAgIENQUD0KIGZpCiBpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgotICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1BQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgaWYgJHthY19jdl9wcm9nX0NQUCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKQEAgLTQwODcsNyArNDI2MSw3IEBACiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAogICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwogICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgpAQCAtNDEwMywxMSArNDI3NywxMSBAQAogYWNfcHJlcHJvY19vaz06CiBicmVhawogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiAKIGRvbmUKICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKIGlmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKICAgYnJlYWsKIGZpCkBAIC00MTQ2LDcgKzQzMjAsNyBAQAogICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCiBjb250aW51ZQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiAKICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KQEAgLTQxNjIsMTggKzQzMzYsMTggQEAKIGFjX3ByZXByb2Nfb2s9OgogYnJlYWsKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAogCiBkb25lCiAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CiBpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CiAKIGVsc2UKICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2FzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiBmaQogCiBhY19leHQ9YwpAQCAtNDE4NSw3ICs0MzU5LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgpAQCAtNDIzNCw3ICs0NDA4LDcgQEAKICAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQogICBmaQogZWxzZQogICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKQEAgLTQyNDgsNyArNDQyMiw3IEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0VHUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfcGF0aF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCkBAIC00MzAwLDcgKzQ0NzQsNyBAQAogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0VHUkVQIjsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIGVncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CiAgIGZpCiBlbHNlCiAgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCkBAIC00MzE1LDcgKzQ0ODksNyBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC00NDMyLDggKzQ2MDYsNyBAQAogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAogIgotZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCi0gICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKIF9BQ0VPRgpAQCAtNDQ0NSw3ICs0NjE4LDcgQEAKIAogCiAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJtaW5peC9jb25maWcuaCIgImFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiA9IHh5ZXM7IHRoZW4gOgogICBNSU5JWD15ZXMKIGVsc2UKICAgTUlOSVg9CkBAIC00NDY3LDcgKzQ2NDAsNyBAQAogCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfXyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC00NTA1LDcgKzQ2NzgsNiBAQAogCiAKIAotCiAjIENoZWNrIGZvciB1bnN1cHBvcnRlZCBzeXN0ZW1zCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogYXRoZW9zKnxMaW51eCovMSopCkBAIC00NTY0LDEwICs0NzM2LDYgQEAKICAgICBjYXNlICRDQyBpbgogICAgIGNjfCovY2MpIENDPSIkQ0MgLUFlIjs7CiAgICAgZXNhYzs7Ci1Nb250ZXJleSopCi0gICAgY2FzZSAkQ0MgaW4KLSAgICBjYykgQ0M9IiRDQyAtV2wsLUJleHBvcnQiOzsKLSAgICBlc2FjOzsKIFN1bk9TKikKICAgICAjIFNvbWUgZnVuY3Rpb25zIGhhdmUgYSBwcm90b3R5cGUgb25seSB3aXRoIHRoYXQgZGVmaW5lLCBlLmcuIGNvbmZzdHIKIApAQCAtNDYzMyw4ICs0ODAxLDYgQEAKIAkgICAgICAgZXhwX2V4dHJhPSIuIgogCSAgIGZpCiAJICAgTElOS0NDPSJcJChzcmNkaXIpL01vZHVsZXMvbWFrZXhwX2FpeCBNb2R1bGVzL3B5dGhvbi5leHAgJGV4cF9leHRyYSBcJChMSUJSQVJZKTsgJExJTktDQyI7OwotCU1vbnRlcmV5NjQqKQotCSAgIExJTktDQz0iJExJTktDQyAtTC91c3IvbGliL2lhNjRsNjQiOzsKIAlRTlgqKQogCSAgICMgcWNjIG11c3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBvdGhlciBjb21waWxlcnMgZG8gbm90CiAJICAgIyBzdXBwb3J0IC1OLgpAQCAtNDY0NCw2ICs0ODEwLDI3IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJTktDQyIgPiY1CiAkYXNfZWNobyAiJExJTktDQyIgPiY2OyB9CiAKKyMgR05VTEQgaXMgc2V0IHRvICJ5ZXMiIGlmIHRoZSBHTlUgbGlua2VyIGlzIHVzZWQuICBJZiB0aGlzIGdvZXMgd3JvbmcKKyMgbWFrZSBzdXJlIHdlIGRlZmF1bHQgaGF2aW5nIGl0IHNldCB0byAibm8iOiB0aGlzIGlzIHVzZWQgYnkKKyMgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIgdG8ga25vdyBpZiBpdCBzaG91bGQgYWRkIC0tZW5hYmxlLW5ldy1kdGFncworIyB0byBsaW5rZXIgY29tbWFuZCBsaW5lcywgYW5kIGZhaWxpbmcgdG8gZGV0ZWN0IEdOVSBsZCBzaW1wbHkgcmVzdWx0cworIyBpbiB0aGUgc2FtZSBiYWhhdmlvdXIgYXMgYmVmb3JlLgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICBhY19wcm9nPWAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAKK2ZpCitjYXNlIGAiJGFjX3Byb2ciIC1WIDI+JjEgPCAvZGV2L251bGxgIGluCisgICAgICAqR05VKikKKyAgICAgICAgICBHTlVMRD15ZXM7OworICAgICAgKikKKyAgICAgICAgICBHTlVMRD1ubzs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdOVUxEIiA+JjUKKyRhc19lY2hvICIkR05VTEQiID4mNjsgfQorCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLWVuYWJsZS1zaGFyZWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0tZW5hYmxlLXNoYXJlZC4uLiAiID4mNjsgfQogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCkBAIC00Nzc0LDYgKzQ5NjEsMTAgQEAKIAlCTERMSUJSQVJZPSctTC4gLWxweXRob24kKFZFUlNJT04pJwogCVJVTlNIQVJFRD0nRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JHtEWUxEX0xJQlJBUllfUEFUSH0nCiAJOzsKKyAgICBBSVgqKQorCUxETElCUkFSWT0nbGlicHl0aG9uJChWRVJTSU9OKS5zbycKKwlSVU5TSEFSRUQ9TElCUEFUSD1gcHdkYDoke0xJQlBBVEh9CisJOzsKIAogICBlc2FjCiBlbHNlICMgc2hhcmVkIGlzIGRpc2FibGVkCkBAIC00NzkzLDcgKzQ5ODQsNyBAQAogc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCkBAIC00ODMzLDcgKzUwMjQsNyBAQAogc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgpAQCAtNDg4Nyw3ICs1MDc4LDcgQEAKIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX0FSKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgpAQCAtNDkyNSwxMiArNTExNiwxOSBAQAogdGVzdCAtbiAiJEFSIiB8fCBBUj0iYXIiCiAKIAorIyB0d2VhayBBUkZMQUdTIG9ubHkgaWYgdGhlIHVzZXIgZGlkbid0IHNldCBpdCBvbiB0aGUgY29tbWFuZCBsaW5lCisKK2lmIHRlc3QgLXogIiRBUkZMQUdTIgordGhlbgorICAgICAgICBBUkZMQUdTPSJyYyIKK2ZpCisKIAogIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdm52ZXJzaW9uIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBzdm52ZXJzaW9uOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVk5WRVJTSU9OK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfcHJvZ19TVk5WRVJTSU9OKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJFNWTlZFUlNJT04iOyB0aGVuCkBAIC00OTgxLDE2ICs1MTc5LDIyIEBACiBlc2FjCiBhY19hdXhfZGlyPQogZm9yIGFjX2RpciBpbiAiJHNyY2RpciIgIiRzcmNkaXIvLi4iICIkc3JjZGlyLy4uLy4uIjsgZG8KLSAgZm9yIGFjX3QgaW4gaW5zdGFsbC1zaCBpbnN0YWxsLnNoIHNodG9vbDsgZG8KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY190IjsgdGhlbgotICAgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci8kYWNfdCAtYyIKLSAgICAgIGJyZWFrIDIKLSAgICBmaQotICBkb25lCisgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQogZG9uZQogaWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiICIkTElORU5PIiA1CisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiICIkTElORU5PIiA1CiBmaQogCiAjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKQEAgLTUwMTksNyArNTIyMyw3IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAiID4mNjsgfQogaWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCi1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3BhdGhfaW5zdGFsbCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKQEAgLTUxNjMsNyArNTM2Nyw3IEBACiAJICAgIGlmIHRlc3QgIiRQeV9ERUJVRyIgPSAndHJ1ZScgOyB0aGVuCiAJCSMgT3B0aW1pemF0aW9uIG1lc3NlcyB1cCBkZWJ1Z2dlcnMsIHNvIHR1cm4gaXQgb2ZmIGZvcgogCQkjIGRlYnVnIGJ1aWxkcy4KLQkJT1BUPSItZyAtV2FsbCAkU1RSSUNUX1BST1RPIgorCQlPUFQ9Ii1nIC1PMCAtV2FsbCAkU1RSSUNUX1BST1RPIgogCSAgICBlbHNlCiAJCU9QVD0iLWcgJFdSQVAgLU8zIC1XYWxsICRTVFJJQ1RfUFJPVE8iCiAJICAgIGZpCkBAIC01MTgyLDE1ICs1Mzg2LDYgQEAKIAlPUFQ9Ii1PIgogCTs7CiAgICAgZXNhYwotCi0gICAgIyBUaGUgY3VycmVudCAoYmV0YSkgTW9udGVyZXkgY29tcGlsZXIgZGllcyB3aXRoIG9wdGltaXphdGlvbnMKLSAgICAjIFhYWCB3aGF0IGlzIE1vbnRlcmV5PyBEb2VzIGl0IHN0aWxsIGRpZSB3LyAtTz8gQ2FuIHdlIGdldCByaWQgb2YgdGhpcz8KLSAgICBjYXNlICRhY19zeXNfc3lzdGVtIGluCi0JTW9udGVyZXkqKQotCSAgICBPUFQ9IiIKLQkgICAgOzsKLSAgICBlc2FjCi0KIGZpCiAKIApAQCAtNTIwOSwyMCArNTQwNCwyNiBAQAogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZm5vLXN0cmljdC1hbGlhc2luZy4uLiAiID4mNjsgfQogICAgICBhY19zYXZlX2NjPSIkQ0MiCiAgICAgIENDPSIkQ0MgLWZuby1zdHJpY3QtYWxpYXNpbmciCi0gICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgYWNfY3Zfbm9fc3RyaWN0X2FsaWFzaW5nX29rPW5vCisgICAgIGlmICR7YWNfY3Zfbm9fc3RyaWN0X2FsaWFzaW5nX29rKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotaW50IG1haW4oKSB7IHJldHVybiAwOyB9CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CiBfQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9ub19zdHJpY3RfYWxpYXNpbmdfb2s9eWVzCiBlbHNlCiAgIGFjX2N2X25vX3N0cmljdF9hbGlhc2luZ19vaz1ubwogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIAogICAgICBDQz0iJGFjX3NhdmVfY2MiCkBAIC01MjUwLDcgKzU0NTEsNiBAQAogCURhcndpbiopCiAJICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCiAJICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgotCiAJICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYwogCSAgICB0aGVuCiAJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQiID4mNQpAQCAtNTI2OCw0OSArNTQ2OCw2IEBACiAkYXNfZWNobyAiJENDIiA+JjY7IH0KIAkgICAgZmkKIAotCi0JICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCVVOSVZFUlNBTF9BUkNIX0ZMQUdTPSIiCi0JICAgICAgICBpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzMi1iaXQiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0iIgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCi0KLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjY0LWJpdCIgOyB0aGVuCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJhbGwiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IC1leHRyYWN0IHBwYzc0MDAiCi0JCSAgIExJUE9fNjRCSVRfRkxBR1M9Ii1leHRyYWN0IHg4Nl82NCAtZXh0cmFjdCBwcGM2NCIKLQotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiaW50ZWwiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgotCQkgICBMSVBPXzY0QklUX0ZMQUdTPSItZXh0cmFjdCB4ODZfNjQiCi0KLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiAtZXh0cmFjdCBwcGM3NDAwIgotCQkgICBMSVBPXzY0QklUX0ZMQUdTPSItZXh0cmFjdCB4ODZfNjQiCi0KLQkJIGVsc2UKLQkgICAgICAgICAgIGFzX2ZuX2Vycm9yICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5IiAiJExJTkVOTyIgNQotCi0JCSBmaQotCi0KLQkJQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAke0NGTEFHU30iCi0JCWlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCi0JCXRoZW4KLQkJCUNGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCQlDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKLQkJZmkKLQkgICAgZmkKLQogCSAgICAjIENhbGN1bGF0ZSB0aGUgcmlnaHQgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQuCiAJICAgICMKIAkgICAgY3VyX3RhcmdldD1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBzZWQgJ3MvXCgxMFwuWzAtOV0qXCkuKi9cMS8nYApAQCAtNTM1Miw2ICs1NTA5LDUwIEBACiAJICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKIAkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwogCisJICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCisJCVVOSVZFUlNBTF9BUkNIX0ZMQUdTPSIiCisJICAgICAgICBpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzMi1iaXQiIDsgdGhlbgorCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCisJCSAgIEFSQ0hfUlVOXzMyQklUPSIiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKworCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiNjQtYml0IiA7IHRoZW4KKwkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKwkJICAgTElQT18zMkJJVF9GTEFHUz0iIgorCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKworCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KKwkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKwkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorCisJICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJpbnRlbCIgOyB0aGVuCisJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKwkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKKwkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisKKwkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KKwkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKKwkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorCisJCSBlbHNlCisJICAgICAgICAgICBhc19mbl9lcnJvciAkPyAicHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheSIgIiRMSU5FTk8iIDUKKworCQkgZmkKKworCisJCUNGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gJHtDRkxBR1N9IgorCQlpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgorCQl0aGVuCisJCQlDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKKwkJCUxERkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKKwkJCUNGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCisJCWZpCisKKwkgICAgZmkKKworCiAJICAgIDs7CiAJT1NGKikKIAkgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLW1pZWVlIgpAQCAtNTM5MywyNyArNTU5NCwyOSBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLU9QVDpPbGltaXQ9MCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1PUFQ6T2xpbWl0PTAuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfb3B0X29saW1pdF9vaytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X29wdF9vbGltaXRfb2srOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19zYXZlX2NjPSIkQ0MiCiBDQz0iJENDIC1PUFQ6T2xpbWl0PTAiCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X29wdF9vbGltaXRfb2s9bm8KLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotaW50IG1haW4oKSB7IHJldHVybiAwOyB9CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CiBfQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9vcHRfb2xpbWl0X29rPXllcwogZWxzZQogICBhY19jdl9vcHRfb2xpbWl0X29rPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKIAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogQ0M9IiRhY19zYXZlX2NjIgogZmkKIApAQCAtNTQzMywyNyArNTYzNiwyOSBAQAogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLU9saW1pdCAxNTAwIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLU9saW1pdCAxNTAwLi4uICIgPiY2OyB9Ci0gIGlmIHRlc3QgIiR7YWNfY3Zfb2xpbWl0X29rK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgaWYgJHthY19jdl9vbGltaXRfb2srOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19zYXZlX2NjPSIkQ0MiCiAgIENDPSIkQ0MgLU9saW1pdCAxNTAwIgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X29saW1pdF9vaz1ubwotZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi1pbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KIF9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X29saW1pdF9vaz15ZXMKIGVsc2UKICAgYWNfY3Zfb2xpbWl0X29rPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKIAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogICBDQz0iJGFjX3NhdmVfY2MiCiBmaQogCkBAIC01NDc1LDcgKzU2ODAsNiBAQAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAgICAgdm9pZCBmKGNoYXIqLC4uLilfX2F0dHJpYnV0ZSgoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDEsIDIpKSk7Ci0KIGludAogbWFpbiAoKQogewpAQCAtNTQ4MywxNSArNTY4NywxOSBAQAogICA7CiAgIHJldHVybiAwOwogfQorCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKIAorCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0FUVFJJQlVURV9GT1JNQVRfUEFSU0VUVVBMRSAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiBlbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIAogZmkKQEAgLTU1MDYsNyArNTcxNCw3IEBACiAjIG9wdGlvbnMgYmVmb3JlIHdlIGNhbiBjaGVjayB3aGV0aGVyIC1LcHRocmVhZCBpbXByb3ZlcyBhbnl0aGluZy4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgb3B0aW9ucyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIGFyZSBhdmFpbGFibGUgd2l0aG91dCBvcHRpb25zLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3B0aHJlYWRfaXNfZGVmYXVsdCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3B0aHJlYWRfaXNfZGVmYXVsdCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKQEAgLTU1NTksNyArNTc2Nyw3IEBACiAjIGZ1bmN0aW9uIGF2YWlsYWJsZS4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtS3B0aHJlYWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtS3B0aHJlYWQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfa3B0aHJlYWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9rcHRocmVhZCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX3NhdmVfY2M9IiRDQyIKQEAgLTU2MDgsNyArNTgxNiw3IEBACiAjIGZ1bmN0aW9uIGF2YWlsYWJsZS4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtS3RocmVhZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1LdGhyZWFkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2t0aHJlYWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9rdGhyZWFkKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfc2F2ZV9jYz0iJENDIgpAQCAtNTY1Nyw3ICs1ODY1LDcgQEAKICMgZnVuY3Rpb24gYXZhaWxhYmxlLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1wdGhyZWFkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLXB0aHJlYWQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdGhyZWFkK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfdGhyZWFkKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfc2F2ZV9jYz0iJENDIgpAQCAtNTc0Miw3ICs1OTUwLDcgQEAKICMgY2hlY2tzIGZvciBoZWFkZXIgZmlsZXMKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTU4NjMsMTIgKzYwNzEsMTEgQEAKIHN5cy90ZXJtaW8uaCBzeXMvdGltZS5oIFwKIHN5cy90aW1lcy5oIHN5cy90eXBlcy5oIHN5cy91bi5oIHN5cy91dHNuYW1lLmggc3lzL3dhaXQuaCBwdHkuaCBsaWJ1dGlsLmggXAogc3lzL3Jlc291cmNlLmggbmV0cGFja2V0L3BhY2tldC5oIHN5c2V4aXRzLmggYmx1ZXRvb3RoLmggXAotYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaAorYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaCBzcGF3bi5oIHV0aWwuaAogZG8gOgogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWV2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgotICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKQEAgLTU4ODIsNyArNjA4OSw3IEBACiAgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl9kaXJlbnRfJGFjX2hkciIgfCAkYXNfdHJfc2hgCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfaGRyIHRoYXQgZGVmaW5lcyBESVIiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY19oZHIgdGhhdCBkZWZpbmVzIERJUi4uLiAiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CitpZiBldmFsIFwkeyRhc19hY19IZWFkZXIrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC01OTA5LDggKzYxMTYsNyBAQAogZXZhbCBhY19yZXM9XCQkYXNfYWNfSGVhZGVyCiAJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKICRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLWV2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgotICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hkciIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKQEAgLTU5MjMsNyArNjEyOSw3IEBACiBpZiB0ZXN0ICRhY19oZWFkZXJfZGlyZW50ID0gZGlyZW50Lmg7IHRoZW4KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9vcGVuZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKQEAgLTU5NTcsMTEgKzYxNjMsMTEgQEAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICBjb25mdGVzdCRhY19leGVleHQKLSAgaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGlmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgogICBicmVhawogZmkKIGRvbmUKLWlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zZWFyY2hfb3BlbmRpcis6fSBmYWxzZTsgdGhlbiA6CiAKIGVsc2UKICAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KQEAgLTU5ODAsNyArNjE4Niw3IEBACiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpci4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCkBAIC02MDE0LDExICs2MjIwLDExIEBACiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgY29uZnRlc3QkYWNfZXhlZXh0Ci0gIGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKICAgYnJlYWsKIGZpCiBkb25lCi1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9vcGVuZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgogCiBlbHNlCiAgIGFjX2N2X3NlYXJjaF9vcGVuZGlyPW5vCkBAIC02MDM4LDcgKzYyNDQsNyBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3lzL3R5cGVzLmggZGVmaW5lcyBtYWtlZGV2IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3lzL3R5cGVzLmggZGVmaW5lcyBtYWtlZGV2Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaF9tYWtlZGV2K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfaGVhZGVyX3N5c190eXBlc19oX21ha2VkZXYrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC02MDY2LDcgKzYyNzIsNyBAQAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2hfbWFrZWRldiA9IG5vOyB0aGVuCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL21rZGV2LmgiICJhY19jdl9oZWFkZXJfc3lzX21rZGV2X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19ta2Rldl9oIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfbWtkZXZfaCIgPSB4eWVzOyB0aGVuIDoKIAogJGFzX2VjaG8gIiNkZWZpbmUgTUFKT1JfSU5fTUtERVYgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTYwNzYsNyArNjI4Miw3IEBACiAKICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19ta2Rldl9oID0gbm87IHRoZW4KICAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL3N5c21hY3Jvcy5oIiAiYWNfY3ZfaGVhZGVyX3N5c19zeXNtYWNyb3NfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3N5c21hY3Jvc19oIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfc3lzbWFjcm9zX2giID0geHllczsgdGhlbiA6CiAKICRhc19lY2hvICIjZGVmaW5lIE1BSk9SX0lOX1NZU01BQ1JPUyAxIiA+PmNvbmZkZWZzLmgKIApAQCAtNjA5Niw3ICs2MzAyLDcgQEAKICNlbmRpZgogCiAiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl90ZXJtX2giID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3Rlcm1faCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1RFUk1fSCAxCiBfQUNFT0YKQEAgLTYxMTgsNyArNjMyNCw3IEBACiAjZW5kaWYKIAogIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGludXhfbmV0bGlua19oIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9saW51eF9uZXRsaW5rX2giID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9MSU5VWF9ORVRMSU5LX0ggMQogX0FDRU9GCkBAIC02MjU3LDYgKzY0NjMsMTMgQEAKIGlmIHRlc3QgIiR1c2VfbGZzIiA9ICJ5ZXMiOyB0aGVuCiAjIFR3byBkZWZpbmVzIG5lZWRlZCB0byBlbmFibGUgbGFyZ2VmaWxlIHN1cHBvcnQgb24gdmFyaW91cyBwbGF0Zm9ybXMKICMgVGhlc2UgbWF5IGFmZmVjdCBzb21lIHR5cGVkZWZzCitjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgorQUlYKikKKworJGFzX2VjaG8gIiNkZWZpbmUgX0xBUkdFX0ZJTEVTIDEiID4+Y29uZmRlZnMuaAorCisgICAgOzsKK2VzYWMKIAogJGFzX2VjaG8gIiNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTYyNzQsNyArNjQ4Nyw3IEBACiAKICMgVHlwZSBhdmFpbGFiaWxpdHkgY2hlY2tzCiBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJtb2RlX3QiICJhY19jdl90eXBlX21vZGVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl90eXBlX21vZGVfdCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl90eXBlX21vZGVfdCIgPSB4eWVzOyB0aGVuIDoKIAogZWxzZQogCkBAIC02Mjg1LDcgKzY0OTgsNyBAQAogZmkKIAogYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAib2ZmX3QiICJhY19jdl90eXBlX29mZl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfb2ZmX3QiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9vZmZfdCIgPSB4eWVzOyB0aGVuIDoKIAogZWxzZQogCkBAIC02Mjk2LDcgKzY1MDksNyBAQAogZmkKIAogYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicGlkX3QiICJhY19jdl90eXBlX3BpZF90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcGlkX3QiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9waWRfdCIgPSB4eWVzOyB0aGVuIDoKIAogZWxzZQogCkBAIC02MzA2LDQxICs2NTE5LDEzIEBACiAKIGZpCiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl90eXBlX3NpZ25hbCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gKihzaWduYWwgKDAsIDApKSAoMCkgPT0gMTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl90eXBlX3NpZ25hbD1pbnQKLWVsc2UKLSAgYWNfY3ZfdHlwZV9zaWduYWw9dm9pZAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaWduYWwiID4mNQotJGFzX2VjaG8gIiRhY19jdl90eXBlX3NpZ25hbCIgPiY2OyB9CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUkVUU0lHVFlQRSAkYWNfY3ZfdHlwZV9zaWduYWwKKyNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCiBfQUNFT0YKIAotCiBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzaXplX3QiICJhY19jdl90eXBlX3NpemVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl90eXBlX3NpemVfdCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NpemVfdCIgPSB4eWVzOyB0aGVuIDoKIAogZWxzZQogCkBAIC02MzUyLDcgKzY1MzcsNyBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1aWRfdCBpbiBzeXMvdHlwZXMuaCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmguLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aWRfdCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3R5cGVfdWlkX3QrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC02MzgwLDggKzY1NjUsNTggQEAKIAogZmkKIAorYWNfZm5fY19maW5kX3VpbnRYX3QgIiRMSU5FTk8iICIzMiIgImFjX2N2X2NfdWludDMyX3QiCitjYXNlICRhY19jdl9jX3VpbnQzMl90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgX1VJTlQzMl9UIDEiID4+Y29uZmRlZnMuaAorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgdWludDMyX3QgJGFjX2N2X2NfdWludDMyX3QKK19BQ0VPRgorOzsKKyAgZXNhYworCithY19mbl9jX2ZpbmRfdWludFhfdCAiJExJTkVOTyIgIjY0IiAiYWNfY3ZfY191aW50NjRfdCIKK2Nhc2UgJGFjX2N2X2NfdWludDY0X3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBfVUlOVDY0X1QgMSIgPj5jb25mZGVmcy5oCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSB1aW50NjRfdCAkYWNfY3ZfY191aW50NjRfdAorX0FDRU9GCis7OworICBlc2FjCisKK2FjX2ZuX2NfZmluZF9pbnRYX3QgIiRMSU5FTk8iICIzMiIgImFjX2N2X2NfaW50MzJfdCIKK2Nhc2UgJGFjX2N2X2NfaW50MzJfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgaW50MzJfdCAkYWNfY3ZfY19pbnQzMl90CitfQUNFT0YKKzs7Citlc2FjCisKK2FjX2ZuX2NfZmluZF9pbnRYX3QgIiRMSU5FTk8iICI2NCIgImFjX2N2X2NfaW50NjRfdCIKK2Nhc2UgJGFjX2N2X2NfaW50NjRfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgaW50NjRfdCAkYWNfY3ZfY19pbnQ2NF90CitfQUNFT0YKKzs7Citlc2FjCisKIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNzaXplX3QiICJhY19jdl90eXBlX3NzaXplX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV9zc2l6ZV90IiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc3NpemVfdCIgPSB4eWVzOyB0aGVuIDoKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TU0laRV9UIDEiID4+Y29uZmRlZnMuaAogCkBAIC02Mzk2LDcgKzY2MzEsNyBAQAogIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBpbnQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2ludCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NpemVvZl9pbnQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChpbnQpKSIgImFjX2N2X3NpemVvZl9pbnQiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKQEAgLTY0MDUsOSArNjY0MCw4IEBACiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX2ludCIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludCkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KICAgIGVsc2UKICAgICAgYWNfY3Zfc2l6ZW9mX2ludD0wCiAgICBmaQpAQCAtNjQzMCw3ICs2NjY0LDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgbG9uZyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGxvbmcuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2xvbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2ZfbG9uZys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGxvbmcpKSIgImFjX2N2X3NpemVvZl9sb25nIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02NDM5LDkgKzY2NzMsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nIiA9IHllczsgdGhlbgogICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLXsgYXNfZm5fc2V0X3N0YXR1cyA3NwotYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9sb25nPTAKICAgIGZpCkBAIC02NDY0LDcgKzY2OTcsNyBAQAogIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiB2b2lkICoiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiB2b2lkICouLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NpemVvZl92b2lkX3ArOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mICh2b2lkICopKSIgImFjX2N2X3NpemVvZl92b2lkX3AiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKQEAgLTY0NzMsOSArNjcwNiw4IEBACiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX3ZvaWRfcCIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHZvaWQgKikKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAodm9pZCAqKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KICAgIGVsc2UKICAgICAgYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0wCiAgICBmaQpAQCAtNjQ5OCw3ICs2NzMwLDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2Ygc2hvcnQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBzaG9ydC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2Zfc2hvcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2Zfc2hvcnQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChzaG9ydCkpIiAiYWNfY3Zfc2l6ZW9mX3Nob3J0IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02NTA3LDkgKzY3MzksOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaG9ydCIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNob3J0KQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9zaG9ydD0wCiAgICBmaQpAQCAtNjUzMiw3ICs2NzYzLDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgZmxvYXQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBmbG9hdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfZmxvYXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2ZfZmxvYXQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChmbG9hdCkpIiAiYWNfY3Zfc2l6ZW9mX2Zsb2F0IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02NTQxLDkgKzY3NzIsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9mbG9hdCIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGZsb2F0KQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChmbG9hdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9mbG9hdD0wCiAgICBmaQpAQCAtNjU2Niw3ICs2Nzk2LDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgZG91YmxlIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgZG91YmxlLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2ZfZG91YmxlKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoZG91YmxlKSkiICJhY19jdl9zaXplb2ZfZG91YmxlIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02NTc1LDkgKzY4MDUsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9kb3VibGUiID0geWVzOyB0aGVuCiAgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoteyBhc19mbl9zZXRfc3RhdHVzIDc3Ci1hc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChkb3VibGUpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGRvdWJsZSkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9kb3VibGU9MAogICAgZmkKQEAgLTY2MDAsNyArNjgyOSw3IEBACiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGZwb3NfdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGZwb3NfdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfZnBvc190K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX2Zwb3NfdCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGZwb3NfdCkpIiAiYWNfY3Zfc2l6ZW9mX2Zwb3NfdCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgpAQCAtNjYwOSw5ICs2ODM4LDggQEAKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZnBvc190IiA9IHllczsgdGhlbgogICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLXsgYXNfZm5fc2V0X3N0YXR1cyA3NwotYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoZnBvc190KQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChmcG9zX3QpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICAgZWxzZQogICAgICBhY19jdl9zaXplb2ZfZnBvc190PTAKICAgIGZpCkBAIC02NjM0LDcgKzY4NjIsNyBAQAogIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBzaXplX3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBzaXplX3QuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NpemVvZl9zaXplX3QrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChzaXplX3QpKSIgImFjX2N2X3NpemVvZl9zaXplX3QiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKQEAgLTY2NDMsOSArNjg3MSw4IEBACiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX3NpemVfdCIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNpemVfdCkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2l6ZV90KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KICAgIGVsc2UKICAgICAgYWNfY3Zfc2l6ZW9mX3NpemVfdD0wCiAgICBmaQpAQCAtNjY2OCw3ICs2ODk1LDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgcGlkX3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBwaWRfdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfcGlkX3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2ZfcGlkX3QrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChwaWRfdCkpIiAiYWNfY3Zfc2l6ZW9mX3BpZF90IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02Njc3LDkgKzY5MDQsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9waWRfdCIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHBpZF90KQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChwaWRfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9waWRfdD0wCiAgICBmaQpAQCAtNjcyOSw3ICs2OTU1LDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgbG9uZyBsb25nIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgbG9uZyBsb25nLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9sb25nX2xvbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2ZfbG9uZ19sb25nKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAobG9uZyBsb25nKSkiICJhY19jdl9zaXplb2ZfbG9uZ19sb25nIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02NzM4LDkgKzY5NjQsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nX2xvbmciID0geWVzOyB0aGVuCiAgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoteyBhc19mbl9zZXRfc3RhdHVzIDc3Ci1hc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGxvbmcpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZykKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9MAogICAgZmkKQEAgLTY3NjgsNyArNjk5Myw3IEBACiBpbnQKIG1haW4gKCkKIHsKLWxvbmcgZG91YmxlIHg7IHggPSAobG9uZyBkb3VibGUpMC47Citsb25nIGRvdWJsZSB4OyB4ID0gKGxvbmcgZG91YmxlKTA7CiAgIDsKICAgcmV0dXJuIDA7CiB9CkBAIC02NzkxLDcgKzcwMTYsNyBAQAogIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGRvdWJsZSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGxvbmcgZG91YmxlLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGxvbmcgZG91YmxlKSkiICJhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKQEAgLTY4MDAsOSArNzAyNSw4IEBACiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmdfZG91YmxlIiA9IHllczsgdGhlbgogICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLXsgYXNfZm5fc2V0X3N0YXR1cyA3NwotYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBkb3VibGUpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgZG91YmxlKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KICAgIGVsc2UKICAgICAgYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTAKICAgIGZpCkBAIC02ODUzLDcgKzcwNzcsNyBAQAogIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBfQm9vbCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIF9Cb29sLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9fQm9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NpemVvZl9fQm9vbCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKF9Cb29sKSkiICJhY19jdl9zaXplb2ZfX0Jvb2wiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKQEAgLTY4NjIsOSArNzA4Niw4IEBACiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX19Cb29sIiA9IHllczsgdGhlbgogICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLXsgYXNfZm5fc2V0X3N0YXR1cyA3NwotYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoX0Jvb2wpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKF9Cb29sKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KICAgIGVsc2UKICAgICAgYWNfY3Zfc2l6ZW9mX19Cb29sPTAKICAgIGZpCkBAIC02ODg2LDggKzcxMDksMTEgQEAKIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnRwdHJfdCIgImFjX2N2X3R5cGVfdWludHB0cl90IiAiI2lmZGVmIEhBVkVfU1RESU5UX0gKICAgICAgICAgI2luY2x1ZGUgPHN0ZGludC5oPgogICAgICAgICAjZW5kaWYKKyAgICAgICAgI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorICAgICAgICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAgICAgICAgI2VuZGlmCiAiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludHB0cl90IiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludHB0cl90IiA9IHh5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfVUlOVFBUUl9UIDEKQEAgLTY4OTksNyArNzEyNSw3IEBACiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHVpbnRwdHJfdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHVpbnRwdHJfdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfdWludHB0cl90K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHVpbnRwdHJfdCkpIiAiYWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgpAQCAtNjkwOCw5ICs3MTM0LDggQEAKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfdWludHB0cl90IiA9IHllczsgdGhlbgogICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLXsgYXNfZm5fc2V0X3N0YXR1cyA3NwotYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAodWludHB0cl90KQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh1aW50cHRyX3QpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICAgZWxzZQogICAgICBhY19jdl9zaXplb2ZfdWludHB0cl90PTAKICAgIGZpCkBAIC02OTMwLDQ4ICs3MTU1LDQ1IEBACiBmaQogCiAKLQotIyBIbXBoLiBBQ19DSEVDS19TSVpFT0YoKSBkb2Vzbid0IGluY2x1ZGUgPHN5cy90eXBlcy5oPi4KKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2Ygb2ZmX3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBvZmZfdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2Zfb2ZmX3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2Zfb2ZmX3QrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X3NpemVvZl9vZmZfdD00Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRpby5oPgorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChvZmZfdCkpIiAiYWNfY3Zfc2l6ZW9mX29mZl90IiAgICAgICAgIgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLW1haW4oKQotewotICBGSUxFICpmPWZvcGVuKCJjb25mdGVzdHZhbCIsICJ3Iik7Ci0gIGlmICghZikgZXhpdCgxKTsKLSAgZnByaW50ZihmLCAiJWRcbiIsIHNpemVvZihvZmZfdCkpOwotICBleGl0KDApOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zfc2l6ZW9mX29mZl90PWBjYXQgY29uZnRlc3R2YWxgCisjZW5kaWYKKworIjsgdGhlbiA6CisKIGVsc2UKLSAgYWNfY3Zfc2l6ZW9mX29mZl90PTAKLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiRhY19jdl90eXBlX29mZl90IiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKG9mZl90KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX29mZl90PTAKKyAgIGZpCiBmaQogCi0KIGZpCi0KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX29mZl90IiA+JjUKICRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX29mZl90IiA+JjY7IH0KIAorCisKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX09GRl9UICRhY19jdl9zaXplb2Zfb2ZmX3QKIF9BQ0VPRgogCiAKKwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0Li4uICIgPiY2OyB9CiBpZiB0ZXN0ICIkaGF2ZV9sb25nX2xvbmciID0geWVzCkBAIC02OTkyLDQyICs3MjE0LDQyIEBACiAkYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotIyBBQ19DSEVDS19TSVpFT0YoKSBkb2Vzbid0IGluY2x1ZGUgPHRpbWUuaD4uCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHRpbWVfdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHRpbWVfdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfdGltZV90K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX3RpbWVfdCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgYWNfY3Zfc2l6ZW9mX3RpbWVfdD00Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRpby5oPgorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mICh0aW1lX3QpKSIgImFjX2N2X3NpemVvZl90aW1lX3QiICAgICAgICAiCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9USU1FX0gKICNpbmNsdWRlIDx0aW1lLmg+Ci1tYWluKCkKLXsKLSAgRklMRSAqZj1mb3BlbigiY29uZnRlc3R2YWwiLCAidyIpOwotICBpZiAoIWYpIGV4aXQoMSk7Ci0gIGZwcmludGYoZiwgIiVkXG4iLCBzaXplb2YodGltZV90KSk7Ci0gIGV4aXQoMCk7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9zaXplb2ZfdGltZV90PWBjYXQgY29uZnRlc3R2YWxgCisjZW5kaWYKKworIjsgdGhlbiA6CisKIGVsc2UKLSAgYWNfY3Zfc2l6ZW9mX3RpbWVfdD0wCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV90aW1lX3QiID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAodGltZV90KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3RpbWVfdD0wCisgICBmaQogZmkKIAotCiBmaQotCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl90aW1lX3QiID4mNQogJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfdGltZV90IiA+JjY7IH0KIAorCisKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX1RJTUVfVCAkYWNfY3Zfc2l6ZW9mX3RpbWVfdAogX0FDRU9GCkBAIC03MDQ4LDcgKzcyNzAsOCBAQAogaGF2ZV9wdGhyZWFkX3Q9bm8KIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyAgI2luY2x1ZGUgPHB0aHJlYWQuaD4KIGludAogbWFpbiAoKQogewpAQCAtNzA1Niw2ICs3Mjc5LDcgQEAKICAgOwogICByZXR1cm4gMDsKIH0KKwogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGhhdmVfcHRocmVhZF90PXllcwpAQCAtNzA2NCw0NiArNzI4OCw0NCBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3B0aHJlYWRfdCIgPiY1CiAkYXNfZWNobyAiJGhhdmVfcHRocmVhZF90IiA+JjY7IH0KIGlmIHRlc3QgIiRoYXZlX3B0aHJlYWRfdCIgPSB5ZXMgOyB0aGVuCi0gICMgQUNfQ0hFQ0tfU0laRU9GKCkgZG9lc24ndCBpbmNsdWRlIDxwdGhyZWFkLmg+LgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgcHRocmVhZF90IiA+JjUKKyAgIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBwdGhyZWFkX3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBwdGhyZWFkX3QuLi4gIiA+JjY7IH0KLSAgaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfcHRocmVhZF90K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdD00Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRpby5oPgorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChwdGhyZWFkX3QpKSIgImFjX2N2X3NpemVvZl9wdGhyZWFkX3QiICAgICAgICAiCisjaWZkZWYgSEFWRV9QVEhSRUFEX0gKICNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0gIG1haW4oKQotICB7Ci0gICAgRklMRSAqZj1mb3BlbigiY29uZnRlc3R2YWwiLCAidyIpOwotICAgIGlmICghZikgZXhpdCgxKTsKLSAgICBmcHJpbnRmKGYsICIlZFxuIiwgc2l6ZW9mKHB0aHJlYWRfdCkpOwotICAgIGV4aXQoMCk7Ci0gIH0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3NpemVvZl9wdGhyZWFkX3Q9YGNhdCBjb25mdGVzdHZhbGAKKyNlbmRpZgorCisiOyB0aGVuIDoKKwogZWxzZQotICBhY19jdl9zaXplb2ZfcHRocmVhZF90PTAKLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiRhY19jdl90eXBlX3B0aHJlYWRfdCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChwdGhyZWFkX3QpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfcHRocmVhZF90PTAKKyAgIGZpCiBmaQogCi0KIGZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfcHRocmVhZF90IiA+JjUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdCIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X3NpemVvZl9wdGhyZWFkX3QiID4mNjsgfQogCisKKwogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfUFRIUkVBRF9UICRhY19jdl9zaXplb2ZfcHRocmVhZF90CiBfQUNFT0YKIAorCiBmaQogQ0M9IiRhY19zYXZlX2NjIgogCkBAIC03MjA4LDcgKzc0MzAsNyBAQAogICAgIAkJTUFDT1NYX0RFRkFVTFRfQVJDSD0icHBjIgogICAgIAkJOzsKICAgICAJKikKLSAgICAJCWFzX2ZuX2Vycm9yICJVbmV4cGVjdGVkIG91dHB1dCBvZiAnYXJjaCcgb24gT1NYIiAiJExJTkVOTyIgNQorICAgIAkJYXNfZm5fZXJyb3IgJD8gIlVuZXhwZWN0ZWQgb3V0cHV0IG9mICdhcmNoJyBvbiBPU1giICIkTElORU5PIiA1CiAgICAgCQk7OwogICAgIAllc2FjCiAgICAgZWxzZQpAQCAtNzIyMCw3ICs3NDQyLDcgQEAKICAgICAJCU1BQ09TWF9ERUZBVUxUX0FSQ0g9InBwYzY0IgogICAgIAkJOzsKICAgICAJKikKLSAgICAJCWFzX2ZuX2Vycm9yICJVbmV4cGVjdGVkIG91dHB1dCBvZiAnYXJjaCcgb24gT1NYIiAiJExJTkVOTyIgNQorICAgIAkJYXNfZm5fZXJyb3IgJD8gIlVuZXhwZWN0ZWQgb3V0cHV0IG9mICdhcmNoJyBvbiBPU1giICIkTElORU5PIiA1CiAgICAgCQk7OwogICAgIAllc2FjCiAKQEAgLTcyNDYsNyArNzQ2OCw3IEBACiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIAlpZiB0ZXN0ICRlbmFibGVfc2hhcmVkID0gInllcyIKIAl0aGVuCi0JCWFzX2ZuX2Vycm9yICJTcGVjaWZ5aW5nIGJvdGggLS1lbmFibGUtc2hhcmVkIGFuZCAtLWVuYWJsZS1mcmFtZXdvcmsgaXMgbm90IHN1cHBvcnRlZCwgdXNlIG9ubHkgLS1lbmFibGUtZnJhbWV3b3JrIGluc3RlYWQuIFNlZSBNYWMvUkVBRE1FLiIgIiRMSU5FTk8iIDUKKwkJYXNfZm5fZXJyb3IgJD8gIlNwZWNpZnlpbmcgYm90aCAtLWVuYWJsZS1zaGFyZWQgYW5kIC0tZW5hYmxlLWZyYW1ld29yayBpcyBub3Qgc3VwcG9ydGVkLCB1c2Ugb25seSAtLWVuYWJsZS1mcmFtZXdvcmsgaW5zdGVhZC4gU2VlIE1hYy9SRUFETUUuIiAiJExJTkVOTyIgNQogCWZpCiBlbHNlCiAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTcyNzUsNiArNzQ5Nyw3IEBACiAKIAogCisKICMgU08gaXMgdGhlIGV4dGVuc2lvbiBvZiBzaGFyZWQgbGlicmFyaWVzIGAoaW5jbHVkaW5nIHRoZSBkb3QhKQogIyAtLSB1c3VhbGx5IC5zbywgLnNsIG9uIEhQLVVYLCAuZGxsIG9uIEN5Z3dpbgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBTTyIgPiY1CkBAIC03MzIxLDcgKzc1NDQsNyBAQAogdGhlbgogCWNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCiAJQUlYKikKLQkJQkxEU0hBUkVEPSJcJChzcmNkaXIpL01vZHVsZXMvbGRfc29fYWl4IFwkKENDKSAtYkk6TW9kdWxlcy9weXRob24uZXhwIgorCQlCTERTSEFSRUQ9IlwkKHNyY2RpcikvTW9kdWxlcy9sZF9zb19haXggXCQoQ0MpIC1iSTpcJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmV4cCIKIAkJTERTSEFSRUQ9IlwkKEJJTkxJQkRFU1QpL2NvbmZpZy9sZF9zb19haXggXCQoQ0MpIC1iSTpcJChCSU5MSUJERVNUKS9jb25maWcvcHl0aG9uLmV4cCIKIAkJOzsKIAlCZU9TKikKQEAgLTczMzEsMzYgKzc1NTQsNDcgQEAKIAlJUklYLzUqKSBMRFNIQVJFRD0ibGQgLXNoYXJlZCI7OwogCUlSSVgqLzYqKSBMRFNIQVJFRD0ibGQgJHtTR0lfQUJJfSAtc2hhcmVkIC1hbGwiOzsKIAlTdW5PUy81KikKLQkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIgotCQl0aGVuIExEU0hBUkVEPSckKENDKSAtc2hhcmVkJwotCQllbHNlIExEU0hBUkVEPSckKENDKSAtRyc7CisJCWlmIHRlc3QgIiRHQ0MiID0gInllcyIgOyB0aGVuCisJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCcKKwkJZWxzZQorCQkJTERTSEFSRUQ9JyQoQ0MpIC1HJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtRycKIAkJZmkgOzsKIAlocCp8SFAqKQotCQlpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi0JCXRoZW4gTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCi0JCWVsc2UgTERTSEFSRUQ9J2xkIC1iJzsKKwkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIiA7IHRoZW4KKwkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJworCQllbHNlCisJCQlMRFNIQVJFRD0nbGQgLWInCiAJCWZpIDs7CiAJT1NGKikgTERTSEFSRUQ9ImxkIC1zaGFyZWQgLWV4cGVjdF91bnJlc29sdmVkIFwiKlwiIjs7CiAJRGFyd2luLzEuMyopCi0JCUxEU0hBUkVEPSckKENDKSAkKExERkxBR1MpIC1idW5kbGUnCisJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlJworCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUnCiAJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIiA7IHRoZW4KIAkJCSMgTGluayBhZ2FpbnN0IHRoZSBmcmFtZXdvcmsuIEFsbCBleHRlcm5hbHMgc2hvdWxkIGJlIGRlZmluZWQuCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJworCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCWVsc2UKIAkJCSMgTm8gZnJhbWV3b3JrLiBJZ25vcmUgdW5kZWZpbmVkIHN5bWJvbHMsIGFzc3VtaW5nIHRoZXkgY29tZSBmcm9tIFB5dGhvbgogCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAtdW5kZWZpbmVkIHN1cHByZXNzIgorCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAtdW5kZWZpbmVkIHN1cHByZXNzIgogCQlmaSA7OwogCURhcndpbi8xLjQqfERhcndpbi81Lip8RGFyd2luLzYuKikKLQkJTERTSEFSRUQ9JyQoQ0MpICQoTERGTEFHUykgLWJ1bmRsZScKKwkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUnCisJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZScKIAkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiIDsgdGhlbgogCQkJIyBMaW5rIGFnYWluc3QgdGhlIGZyYW1ld29yay4gQWxsIGV4dGVybmFscyBzaG91bGQgYmUgZGVmaW5lZC4KIAkJCUJMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCisJCQlMRENYWFNIQVJFRD0iJExEQ1hYU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktQUkVGSVgpLyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKIAkJZWxzZQogCQkJIyBObyBmcmFtZXdvcmssIHVzZSB0aGUgUHl0aG9uIGFwcCBhcyBidW5kbGUtbG9hZGVyCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQlVJTERQWVRIT04pJwogCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJworCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJwogCQlmaSA7OwogCURhcndpbi8qKQogCQkjIFVzZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwIHdoZW5ldmVyIHBvc3NpYmxlICgxMC4zIGFuZCBsYXRlcikuCkBAIC03MzcxLDU5ICs3NjA1LDgxIEBACiAJCQlpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgogCQkJCUxERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKIAkJCWZpCi0JCQlMRFNIQVJFRD0nJChDQykgJChMREZMQUdTKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCisJCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCIKIAkJZWxzZQotCQkJTERTSEFSRUQ9JyQoQ0MpICQoTERGTEFHUykgLWJ1bmRsZScKKwkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlJwogCQkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiIDsgdGhlbgogCQkJCSMgTGluayBhZ2FpbnN0IHRoZSBmcmFtZXdvcmsuIEFsbCBleHRlcm5hbHMgc2hvdWxkIGJlIGRlZmluZWQuCiAJCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCisJCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCQllbHNlCiAJCQkJIyBObyBmcmFtZXdvcmssIHVzZSB0aGUgUHl0aG9uIGFwcCBhcyBidW5kbGUtbG9hZGVyCiAJCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJVSUxEUFlUSE9OKScKIAkJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSknCisJCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJwogCQkJZmkKIAkJZmkKIAkJOzsKLQlMaW51eCp8R05VKnxRTlgqKSBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCc7OwotCUJTRC9PUyovNCopIExEU0hBUkVEPSJnY2MgLXNoYXJlZCI7OworCUxpbnV4KnxHTlUqfFFOWCopCisJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnOzsKKwlCU0QvT1MqLzQqKQorCQlMRFNIQVJFRD0iZ2NjIC1zaGFyZWQiCisJCUxEQ1hYU0hBUkVEPSJnKysgLXNoYXJlZCI7OwogCUZyZWVCU0QqKQogCQlpZiBbICJgJENDIC1kTSAtRSAtIDwvZGV2L251bGwgfCBncmVwIF9fRUxGX19gIiAhPSAiIiBdCiAJCXRoZW4KLQkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkICR7TERGTEFHU30nCisJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCcKIAkJZWxzZQotCQkJTERTSEFSRUQ9ImxkIC1Cc2hhcmVhYmxlICR7TERGTEFHU30iCisJCQlMRFNIQVJFRD0ibGQgLUJzaGFyZWFibGUiCiAJCWZpOzsKIAlPcGVuQlNEKikKIAkJaWYgWyAiYCRDQyAtZE0gLUUgLSA8L2Rldi9udWxsIHwgZ3JlcCBfX0VMRl9fYCIgIT0gIiIgXQogCQl0aGVuCi0JCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQgJChDQ1NIQVJFRCkgJHtMREZMQUdTfScKKwkJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAkKENDU0hBUkVEKScKKwkJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQgJChDQ1NIQVJFRCknCiAJCWVsc2UKIAkJCQljYXNlIGB1bmFtZSAtcmAgaW4KIAkJCQlbMDFdLiogfCAyLlswLTddIHwgMi5bMC03XS4qKQogCQkJCSAgIExEU0hBUkVEPSJsZCAtQnNoYXJlYWJsZSAke0xERkxBR1N9IgogCQkJCSAgIDs7CiAJCQkJKikKLQkJCQkgICBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAkKENDU0hBUkVEKSAke0xERkxBR1N9JworCQkJCSAgIExEU0hBUkVEPSckKENDKSAtc2hhcmVkICQoQ0NTSEFSRUQpJworCQkJCSAgIExEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCAkKENDU0hBUkVEKScKIAkJCQkgICA7OwogCQkJCWVzYWMKIAkJZmk7OwotCU5ldEJTRCp8RHJhZ29uRmx5KikgTERTSEFSRUQ9ImNjIC1zaGFyZWQgJHtMREZMQUdTfSI7OworCU5ldEJTRCp8RHJhZ29uRmx5KikKKwkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCisJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCc7OwogCU9wZW5VTklYKnxVbml4V2FyZSopCi0JCWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLQkJdGhlbiBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKLQkJZWxzZSBMRFNIQVJFRD0nJChDQykgLUcnCisJCWlmIHRlc3QgIiRHQ0MiID0gInllcyIgOyB0aGVuCisJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCcKKwkJZWxzZQorCQkJTERTSEFSRUQ9JyQoQ0MpIC1HJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtRycKIAkJZmk7OwotCVNDT19TViopIExEU0hBUkVEPSckKENDKSAtV2wsLUcsLUJleHBvcnQnOzsKLQlNb250ZXJleSopIExEU0hBUkVEPSJjYyAtRyAtZHkgLUJkeW5hbWljIC1CZXhwb3J0IC1ML3Vzci9saWIvaWE2NGw2NCI7OwotCUNZR1dJTiopIExEU0hBUkVEPSJnY2MgLXNoYXJlZCAtV2wsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIjs7Ci0JYXRoZW9zKikgTERTSEFSRUQ9ImdjYyAtc2hhcmVkIjs7CisJU0NPX1NWKikKKwkJTERTSEFSRUQ9JyQoQ0MpIC1XbCwtRywtQmV4cG9ydCcKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtV2wsLUcsLUJleHBvcnQnOzsKKwlDWUdXSU4qKQorCQlMRFNIQVJFRD0iZ2NjIC1zaGFyZWQgLVdsLC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSIKKwkJTERDWFhTSEFSRUQ9ImcrKyAtc2hhcmVkIC1XbCwtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UiOzsKKwlhdGhlb3MqKQorCQlMRFNIQVJFRD0iZ2NjIC1zaGFyZWQiCisJCUxEQ1hYU0hBUkVEPSJnKysgLXNoYXJlZCI7OwogCSopCUxEU0hBUkVEPSJsZCI7OwogCWVzYWMKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEU0hBUkVEIiA+JjUKICRhc19lY2hvICIkTERTSEFSRUQiID4mNjsgfQorTERDWFhTSEFSRUQ9JHtMRENYWFNIQVJFRC0kTERTSEFSRUR9CiBCTERTSEFSRUQ9JHtCTERTSEFSRUQtJExEU0hBUkVEfQogIyBDQ1NIQVJFRCBhcmUgdGhlIEMgKmZsYWdzKiB1c2VkIHRvIGNyZWF0ZSBvYmplY3RzIHRvIGdvIGludG8gYSBzaGFyZWQKICMgbGlicmFyeSAobW9kdWxlKSAtLSB0aGlzIGlzIG9ubHkgbmVlZGVkIGZvciBhIGZldyBzeXN0ZW1zCkBAIC03NDU1LDcgKzc3MTEsNiBAQAogCQl0aGVuIENDU0hBUkVEPSItZlBJQyIKIAkJZWxzZSBDQ1NIQVJFRD0iLUtwaWMgLWJlbGYiCiAJCWZpOzsKLQlNb250ZXJleSopIENDU0hBUkVEPSItRyI7OwogCUlSSVgqLzYqKSAgY2FzZSAkQ0MgaW4KIAkJICAgKmdjYyopIENDU0hBUkVEPSItc2hhcmVkIjs7CiAJCSAgICopIENDU0hBUkVEPSIiOzsKQEAgLTc1NjYsNyArNzgyMSw3IEBACiAjIGNoZWNrcyBmb3IgbGlicmFyaWVzCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC03NjAwLDcgKzc4NTUsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9MSUJETCAxCiBfQUNFT0YKQEAgLTc2MTEsNyArNzg2Niw3IEBACiAJIyBEeW5hbWljIGxpbmtpbmcgZm9yIFN1bk9TL1NvbGFyaXMgYW5kIFNZU1YKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTc2NDUsNyArNzkwMCw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0xJQkRMRCAxCiBfQUNFT0YKQEAgLTc2NTksNyArNzkxNCw3IEBACiBpZiB0ZXN0ICIkd2l0aF90aHJlYWRzIiA9ICJ5ZXMiIC1vIC16ICIkd2l0aF90aHJlYWRzIjsgdGhlbgogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzZW1faW5pdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHNlbV9pbml0Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9zZW1faW5pdCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NlYXJjaF9zZW1faW5pdCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUwpAQCAtNzY5MywxMSArNzk0OCwxMSBAQAogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotICBpZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9zZW1faW5pdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGlmICR7YWNfY3Zfc2VhcmNoX3NlbV9pbml0Kzp9IGZhbHNlOyB0aGVuIDoKICAgYnJlYWsKIGZpCiBkb25lCi1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9zZW1faW5pdCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NlYXJjaF9zZW1faW5pdCs6fSBmYWxzZTsgdGhlbiA6CiAKIGVsc2UKICAgYWNfY3Zfc2VhcmNoX3NlbV9pbml0PW5vCkBAIC03NzIwLDcgKzc5NzUsNyBAQAogIyBjaGVjayBpZiB3ZSBuZWVkIGxpYmludGwgZm9yIGxvY2FsZSBmdW5jdGlvbnMKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHRleHRkb21haW4gaW4gLWxpbnRsIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0ZXh0ZG9tYWluIGluIC1saW50bC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfaW50bF90ZXh0ZG9tYWluK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX2ludGxfdGV4dGRvbWFpbis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTc3NTQsNyArODAwOSw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfaW50bF90ZXh0ZG9tYWluIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX2ludGxfdGV4dGRvbWFpbiIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9pbnRsX3RleHRkb21haW4iID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX2ludGxfdGV4dGRvbWFpbiIgPSB4eWVzOyB0aGVuIDoKIAogJGFzX2VjaG8gIiNkZWZpbmUgV0lUSF9MSUJJTlRMIDEiID4+Y29uZmRlZnMuaAogCkBAIC03NzY3LDcgKzgwMjIsOCBAQAogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdlbnVpbmUgQUlYIEMrKyBleHRlbnNpb25zIHN1cHBvcnQuLi4gIiA+JjY7IH0KIAkJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgIi91c3IvbHBwL3hsQy9pbmNsdWRlL2xvYWQuaCIKKworCQkgICNpbmNsdWRlIDxsb2FkLmg+CiBpbnQKIG1haW4gKCkKIHsKQEAgLTc3NzUsMTYgKzgwMzEsMjEgQEAKICAgOwogICByZXR1cm4gMDsKIH0KKwogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAKKwogJGFzX2VjaG8gIiNkZWZpbmUgQUlYX0dFTlVJTkVfQ1BMVVNQTFVTIDEiID4+Y29uZmRlZnMuaAogCi0JCQkgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorCQkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CisKIGVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKworCQkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQorCiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQ7OwpAQCAtNzc5NSw3ICs4MDU2LDcgQEAKICMgQmVPUycgc29ja2V0cyBhcmUgc3Rhc2hlZCBpbiBsaWJuZXQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0X29wZW4gaW4gLWxuc2wiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRfb3BlbiBpbiAtbG5zbC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfbnNsX3Rfb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9uc2xfdF9vcGVuKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtNzgyOSwxMyArODA5MCwxMyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX25zbF90X29wZW4iID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfbnNsX3Rfb3BlbiIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9uc2xfdF9vcGVuIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9uc2xfdF9vcGVuIiA9IHh5ZXM7IHRoZW4gOgogICBMSUJTPSItbG5zbCAkTElCUyIKIGZpCiAgIyBTVlI0CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzb2NrZXQgaW4gLWxzb2NrZXQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNvY2tldCBpbiAtbHNvY2tldC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfc29ja2V0X3NvY2tldCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9zb2NrZXRfc29ja2V0Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtNzg2OSw3ICs4MTMwLDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0IiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfc29ja2V0X3NvY2tldCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfc29ja2V0X3NvY2tldCIgPSB4eWVzOyB0aGVuIDoKICAgTElCUz0iLWxzb2NrZXQgJExJQlMiCiBmaQogICMgU1ZSNCBzb2NrZXRzCkBAIC03ODc4LDcgKzgxMzksNyBAQAogQmVPUyopCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzb2NrZXQgaW4gLWxuZXQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNvY2tldCBpbiAtbG5ldC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfbmV0X3NvY2tldCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9uZXRfc29ja2V0Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtNzkxMiw3ICs4MTczLDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9uZXRfc29ja2V0IiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX25ldF9zb2NrZXQiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfbmV0X3NvY2tldCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfbmV0X3NvY2tldCIgPSB4eWVzOyB0aGVuIDoKICAgTElCUz0iLWxuZXQgJExJQlMiCiBmaQogICMgQmVPUwpAQCAtNzkzNSw2ICs4MTk2LDEyMCBAQAogZmkKIAogCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRQS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyI7IHRoZW4KKyAgYWNfcHRfUEtHX0NPTkZJRz0kUEtHX0NPTkZJRworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9QS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhY19wdF9QS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkYWNfcHRfUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9QS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X1BLR19DT05GSUciID0geDsgdGhlbgorICAgIFBLR19DT05GSUc9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBQS0dfQ09ORklHPSRhY19wdF9QS0dfQ09ORklHCisgIGZpCitlbHNlCisgIFBLR19DT05GSUc9IiRhY19jdl9wYXRoX1BLR19DT05GSUciCitmaQorCisKKyMgQ2hlY2sgZm9yIHVzZSBvZiB0aGUgc3lzdGVtIGV4cGF0IGxpYnJhcnkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0td2l0aC1zeXN0ZW0tZXhwYXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0td2l0aC1zeXN0ZW0tZXhwYXQuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXN0ZW1fZXhwYXQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3N5c3RlbV9leHBhdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3lzdGVtX2V4cGF0OworZWxzZQorICB3aXRoX3N5c3RlbV9leHBhdD0ibm8iCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9zeXN0ZW1fZXhwYXQiID4mNQorJGFzX2VjaG8gIiR3aXRoX3N5c3RlbV9leHBhdCIgPiY2OyB9CisKICMgQ2hlY2sgZm9yIHVzZSBvZiB0aGUgc3lzdGVtIGxpYmZmaSBsaWJyYXJ5CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtc3lzdGVtLWZmaSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLXN5c3RlbS1mZmkuLi4gIiA+JjY7IH0KQEAgLTc5NDIsMTIgKzgzMTcsNDQgQEAKICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzdGVtX2ZmaSB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke3dpdGhfc3lzdGVtX2ZmaStzZXR9IiA9IHNldDsgdGhlbiA6CiAgIHdpdGh2YWw9JHdpdGhfc3lzdGVtX2ZmaTsKK2Vsc2UKKyAgd2l0aF9zeXN0ZW1fZmZpPSJubyIKK2ZpCisKKworaWYgdGVzdCAiJHdpdGhfc3lzdGVtX2ZmaSIgPSAieWVzIiAmJiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBMSUJGRklfSU5DTFVERURJUj0iYCIkUEtHX0NPTkZJRyIgbGliZmZpIC0tY2ZsYWdzLW9ubHktSSAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncy9eLUkvLztzLyAqJC8vJ2AiCitlbHNlCisgICAgTElCRkZJX0lOQ0xVREVESVI9IiIKIGZpCiAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRoX3N5c3RlbV9mZmkiID4mNQogJGFzX2VjaG8gIiR3aXRoX3N5c3RlbV9mZmkiID4mNjsgfQogCisjIENoZWNrIGZvciAtLXdpdGgtZGJtbGlib3JkZXIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0td2l0aC1kYm1saWJvcmRlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLWRibWxpYm9yZGVyLi4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGJtbGlib3JkZXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RibWxpYm9yZGVyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kYm1saWJvcmRlcjsKK2lmIHRlc3QgeCR3aXRoX2RibWxpYm9yZGVyID0geHllcwordGhlbgorYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtZGJtbGlib3JkZXI9ZGIxOmRiMjouLi4iICIkTElORU5PIiA1CitlbHNlCisgIGZvciBkYiBpbiBgZWNobyAkd2l0aF9kYm1saWJvcmRlciB8IHNlZCAncy86LyAvZydgOyBkbworICAgIGlmIHRlc3QgeCRkYiAhPSB4bmRibSAmJiB0ZXN0IHgkZGIgIT0geGdkYm0gJiYgdGVzdCB4JGRiICE9IHhiZGIKKyAgICB0aGVuCisgICAgICBhc19mbl9lcnJvciAkPyAicHJvcGVyIHVzYWdlIGlzIC0td2l0aC1kYm1saWJvcmRlcj1kYjE6ZGIyOi4uLiIgIiRMSU5FTk8iIDUKKyAgICBmaQorICBkb25lCitmaQorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRoX2RibWxpYm9yZGVyIiA+JjUKKyRhc19lY2hvICIkd2l0aF9kYm1saWJvcmRlciIgPiY2OyB9CisKICMgRGV0ZXJtaW5lIGlmIHNpZ25hbG1vZHVsZSBzaG91bGQgYmUgdXNlZC4KIAogCkBAIC04MTA1LDcgKzg1MTIsNyBAQAogICAgICRhc19lY2hvICIjZGVmaW5lIF9SRUVOVFJBTlQgMSIgPj5jb25mZGVmcy5oCiAKICAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiY3RocmVhZHMuaCIgImFjX2N2X2hlYWRlcl9jdGhyZWFkc19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9jdGhyZWFkc19oIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9jdGhyZWFkc19oIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBXSVRIX1RIUkVBRCAxIiA+PmNvbmZkZWZzLmgKIAogICAgICRhc19lY2hvICIjZGVmaW5lIENfVEhSRUFEUyAxIiA+PmNvbmZkZWZzLmgKQEAgLTgxMTgsNyArODUyNSw3IEBACiBlbHNlCiAKICAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibWFjaC9jdGhyZWFkcy5oIiAiYWNfY3ZfaGVhZGVyX21hY2hfY3RocmVhZHNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbWFjaF9jdGhyZWFkc19oIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9tYWNoX2N0aHJlYWRzX2giID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIFdJVEhfVEhSRUFEIDEiID4+Y29uZmRlZnMuaAogCiAgICAgJGFzX2VjaG8gIiNkZWZpbmUgQ19USFJFQURTIDEiID4+Y29uZmRlZnMuaApAQCAtODE4MCw3ICs4NTg3LDcgQEAKIAogICAgIExJQlM9JF9saWJzCiAgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicHRocmVhZF9kZXRhY2giICJhY19jdl9mdW5jX3B0aHJlYWRfZGV0YWNoIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX3B0aHJlYWRfZGV0YWNoIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcHRocmVhZF9kZXRhY2giID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIFdJVEhfVEhSRUFEIDEiID4+Y29uZmRlZnMuaAogCiAgICAgcG9zaXhfdGhyZWFkcz15ZXMKQEAgLTgxODgsNyArODU5NSw3IEBACiBlbHNlCiAKICAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiYXRoZW9zL3RocmVhZHMuaCIgImFjX2N2X2hlYWRlcl9hdGhlb3NfdGhyZWFkc19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9hdGhlb3NfdGhyZWFkc19oIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9hdGhlb3NfdGhyZWFkc19oIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBXSVRIX1RIUkVBRCAxIiA+PmNvbmZkZWZzLmgKIAogCkBAIC04MTk4LDcgKzg2MDUsNyBAQAogZWxzZQogCiAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImtlcm5lbC9PUy5oIiAiYWNfY3ZfaGVhZGVyX2tlcm5lbF9PU19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9rZXJuZWxfT1NfaCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfa2VybmVsX09TX2giID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIFdJVEhfVEhSRUFEIDEiID4+Y29uZmRlZnMuaAogCiAKQEAgLTgyMDksNyArODYxNiw3IEBACiAKICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkX2NyZWF0ZSBpbiAtbHB0aHJlYWRzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX2NyZWF0ZSBpbiAtbHB0aHJlYWRzLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9wdGhyZWFkc19wdGhyZWFkX2NyZWF0ZStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9wdGhyZWFkc19wdGhyZWFkX2NyZWF0ZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTgyNDMsNyArODY1MCw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcHRocmVhZHNfcHRocmVhZF9jcmVhdGUiID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfcHRocmVhZHNfcHRocmVhZF9jcmVhdGUiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfcHRocmVhZHNfcHRocmVhZF9jcmVhdGUiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRzX3B0aHJlYWRfY3JlYXRlIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBXSVRIX1RIUkVBRCAxIiA+PmNvbmZkZWZzLmgKIAogICAgIHBvc2l4X3RocmVhZHM9eWVzCkBAIC04MjUzLDcgKzg2NjAsNyBAQAogCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHRocmVhZF9jcmVhdGUgaW4gLWxjX3IiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1sY19yLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9jX3JfcHRocmVhZF9jcmVhdGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfY19yX3B0aHJlYWRfY3JlYXRlKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtODI4Nyw3ICs4Njk0LDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jX3JfcHRocmVhZF9jcmVhdGUiID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfY19yX3B0aHJlYWRfY3JlYXRlIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2NyZWF0ZSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfY19yX3B0aHJlYWRfY3JlYXRlIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBXSVRIX1RIUkVBRCAxIiA+PmNvbmZkZWZzLmgKIAogICAgIHBvc2l4X3RocmVhZHM9eWVzCkBAIC04Mjk3LDcgKzg3MDQsNyBAQAogCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgX19wdGhyZWFkX2NyZWF0ZV9zeXN0ZW0gaW4gLWxwdGhyZWFkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBfX3B0aHJlYWRfY3JlYXRlX3N5c3RlbSBpbiAtbHB0aHJlYWQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3B0aHJlYWRfX19wdGhyZWFkX2NyZWF0ZV9zeXN0ZW0rc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfcHRocmVhZF9fX3B0aHJlYWRfY3JlYXRlX3N5c3RlbSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTgzMzEsNyArODczOCw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcHRocmVhZF9fX3B0aHJlYWRfY3JlYXRlX3N5c3RlbSIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9wdGhyZWFkX19fcHRocmVhZF9jcmVhdGVfc3lzdGVtIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRfX19wdGhyZWFkX2NyZWF0ZV9zeXN0ZW0iID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRfX19wdGhyZWFkX2NyZWF0ZV9zeXN0ZW0iID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIFdJVEhfVEhSRUFEIDEiID4+Y29uZmRlZnMuaAogCiAgICAgcG9zaXhfdGhyZWFkcz15ZXMKQEAgLTgzNDEsNyArODc0OCw3IEBACiAKICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkX2NyZWF0ZSBpbiAtbGNtYSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9jcmVhdGUgaW4gLWxjbWEuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2NtYV9wdGhyZWFkX2NyZWF0ZStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9jbWFfcHRocmVhZF9jcmVhdGUrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC04Mzc1LDcgKzg3ODIsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2NtYV9wdGhyZWFkX2NyZWF0ZSIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9jbWFfcHRocmVhZF9jcmVhdGUiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfY21hX3B0aHJlYWRfY3JlYXRlIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jbWFfcHRocmVhZF9jcmVhdGUiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIFdJVEhfVEhSRUFEIDEiID4+Y29uZmRlZnMuaAogCiAgICAgcG9zaXhfdGhyZWFkcz15ZXMKQEAgLTg0MTUsNyArODgyMiw3IEBACiAKICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1c2NvbmZpZyBpbiAtbG1wYyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdXNjb25maWcgaW4gLWxtcGMuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX21wY191c2NvbmZpZytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9tcGNfdXNjb25maWcrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC04NDQ5LDcgKzg4NTYsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX21wY191c2NvbmZpZyIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9tcGNfdXNjb25maWciID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfbXBjX3VzY29uZmlnIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9tcGNfdXNjb25maWciID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIFdJVEhfVEhSRUFEIDEiID4+Y29uZmRlZnMuaAogCiAgICAgTElCUz0iJExJQlMgLWxtcGMiCkBAIC04NDYxLDcgKzg4NjgsNyBAQAogICAgIGlmIHRlc3QgIiRwb3NpeF90aHJlYWRzIiAhPSAieWVzIjsgdGhlbgogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdGhyX2NyZWF0ZSBpbiAtbHRocmVhZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhyX2NyZWF0ZSBpbiAtbHRocmVhZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfdGhyZWFkX3Rocl9jcmVhdGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfdGhyZWFkX3Rocl9jcmVhdGUrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC04NDk1LDcgKzg5MDIsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3RocmVhZF90aHJfY3JlYXRlIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX3RocmVhZF90aHJfY3JlYXRlIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3RocmVhZF90aHJfY3JlYXRlIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl90aHJlYWRfdGhyX2NyZWF0ZSIgPSB4eWVzOyB0aGVuIDoKICAgJGFzX2VjaG8gIiNkZWZpbmUgV0lUSF9USFJFQUQgMSIgPj5jb25mZGVmcy5oCiAKICAgICAgIExJQlM9IiRMSUJTIC1sdGhyZWFkIgpAQCAtODUzNiwxMSArODk0MywxNSBAQAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUyAxIiA+PmNvbmZkZWZzLmgKIAogCQkgICAgICAgOzsKKyAgICAgIEFJWC82KQorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICBlc2FjCiAKICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgUFRIUkVBRF9TQ09QRV9TWVNURU0gaXMgc3VwcG9ydGVkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGlmIFBUSFJFQURfU0NPUEVfU1lTVEVNIGlzIHN1cHBvcnRlZC4uLiAiID4mNjsgfQotICAgICAgaWYgdGVzdCAiJHthY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAgICAgaWYgJHthY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CkBAIC04NTgzLDcgKzg5OTQsNyBAQAogICAgICAgZm9yIGFjX2Z1bmMgaW4gcHRocmVhZF9zaWdtYXNrCiBkbyA6CiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInB0aHJlYWRfc2lnbWFzayIgImFjX2N2X2Z1bmNfcHRocmVhZF9zaWdtYXNrIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX3B0aHJlYWRfc2lnbWFzayIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3B0aHJlYWRfc2lnbWFzayIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1BUSFJFQURfU0lHTUFTSyAxCiBfQUNFT0YKQEAgLTg2MjIsNiArOTAzMyw3IEBACiBlbHNlCiAKICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQogICBpcHY2PW5vCkBAIC04NjQyLDEzICs5MDU0LDE3IEBACiAKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KICAgaXB2Nj15ZXMKKwogZWxzZQorCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQogICBpcHY2PW5vCisKIGZpCiBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCiAgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CkBAIC04NjYwLDI1ICs5MDc2LDMxIEBACiAkYXNfZWNob19uICJjaGVja2luZyBpZiBSRkMyNTUzIEFQSSBpcyBhdmFpbGFibGUuLi4gIiA+JjY7IH0KIAljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiBpbnQKIG1haW4gKCkKIHsKIHN0cnVjdCBzb2NrYWRkcl9pbjYgeDsKLXguc2luNl9zY29wZV9pZDsKKwkJCSAgICB4LnNpbjZfc2NvcGVfaWQ7CiAgIDsKICAgcmV0dXJuIDA7CiB9CisKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKworCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KLQkJaXB2Nj15ZXMKKwkgIGlwdjY9eWVzCisKIGVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKworCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9Ci0JCWlwdjY9bm8KKwkgIGlwdjY9bm8KKwogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKQEAgLTg3NjMsNyArOTE4NSw3IEBACiAJCQk7OwogCQlzb2xhcmlzKQogCQkJaWYgdGVzdCAtZiAvZXRjL25ldGNvbmZpZzsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAvdXNyL3hwZzQvYmluL2dyZXAgLXEgdGNwNiAvZXRjL25ldGNvbmZpZzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAkR1JFUCAtcSB0Y3A2IC9ldGMvbmV0Y29uZmlnOyB0aGVuCiAJCQkJaXB2NnR5cGU9JGkKIAkJCQlpcHY2dHJ5bGliYz15ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKQEAgLTg4NTMsNyArOTI3NSw4IEBACiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgT1NYIDEwLjUgU0RLIG9yIGxhdGVyLi4uICIgPiY2OyB9CiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgorCisgICNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+CiBpbnQKIG1haW4gKCkKIHsKQEAgLTg4NjEsMTQgKzkyODQsMTggQEAKICAgOwogICByZXR1cm4gMDsKIH0KKwogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAKKwogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9PU1gxMDVfU0RLIDEiID4+Y29uZmRlZnMuaAogCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CisKIGVsc2UKKwogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIApAQCAtODk0Miw2ICs5MzY5LDMzIEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfcHltYWxsb2MiID4mNQogJGFzX2VjaG8gIiR3aXRoX3B5bWFsbG9jIiA+JjY7IH0KIAorIyBDaGVjayBmb3IgVmFsZ3JpbmQgc3VwcG9ydAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLXZhbGdyaW5kIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLXdpdGgtdmFsZ3JpbmQuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC12YWxncmluZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdmFsZ3JpbmQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3ZhbGdyaW5kOworZWxzZQorICB3aXRoX3ZhbGdyaW5kPW5vCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfdmFsZ3JpbmQiID4mNQorJGFzX2VjaG8gIiR3aXRoX3ZhbGdyaW5kIiA+JjY7IH0KK2lmIHRlc3QgIiR3aXRoX3ZhbGdyaW5kIiAhPSBubzsgdGhlbgorICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ2YWxncmluZC92YWxncmluZC5oIiAiYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2giID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIFdJVEhfVkFMR1JJTkQgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gIlZhbGdyaW5kIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBoZWFkZXJzIG5vdCBhdmFpbGFibGUiICIkTElORU5PIiA1CisKK2ZpCisKKworZmkKKwogIyBDaGVjayBmb3IgLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0td2l0aC13Y3R5cGUtZnVuY3Rpb25zIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLXdpdGgtd2N0eXBlLWZ1bmN0aW9ucy4uLiAiID4mNjsgfQpAQCAtODk3NCw3ICs5NDI4LDcgQEAKIGZvciBhY19mdW5jIGluIGRsb3BlbgogZG8gOgogICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkbG9wZW4iICJhY19jdl9mdW5jX2Rsb3BlbiIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9ETE9QRU4gMQogX0FDRU9GCkBAIC05MDM5LDIwICs5NDkzLDIyIEBACiBmb3IgYWNfZnVuYyBpbiBhbGFybSBzZXRpdGltZXIgZ2V0aXRpbWVyIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGNob3duIFwKICBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZXhlY3YgZmNobW9kIGZjaG93biBmb3JrIGZwYXRoY29uZiBmdGltZSBmdHJ1bmNhdGUgXAogIGdhaV9zdHJlcnJvciBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCi0gZ2V0cHJpb3JpdHkgZ2V0cHdlbnQgZ2V0c3BuYW0gZ2V0c3BlbnQgZ2V0c2lkIGdldHdkIFwKLSBraWxsIGtpbGxwZyBsY2htb2QgbGNob3duIGxzdGF0IG1rZmlmbyBta25vZCBta3RpbWUgXAorIGdldHByaW9yaXR5IGdldHJlc3VpZCBnZXRyZXNnaWQgZ2V0cHdlbnQgZ2V0c3BuYW0gZ2V0c3BlbnQgZ2V0c2lkIGdldHdkIFwKKyBpbml0Z3JvdXBzIGtpbGwga2lsbHBnIGxjaG1vZCBsY2hvd24gbHN0YXQgbWtmaWZvIG1rbm9kIG1rdGltZSBcCiAgbXJlbWFwIG5pY2UgcGF0aGNvbmYgcGF1c2UgcGxvY2sgcG9sbCBwdGhyZWFkX2luaXQgXAogIHB1dGVudiByZWFkbGluayByZWFscGF0aCBcCi0gc2VsZWN0IHNldGVnaWQgc2V0ZXVpZCBzZXRnaWQgXAorIHNlbGVjdCBzZW1fb3BlbiBzZW1fdGltZWR3YWl0IHNlbV9nZXR2YWx1ZSBzZW1fdW5saW5rIHNldGVnaWQgc2V0ZXVpZCBcCisgc2V0Z2lkIFwKICBzZXRsb2NhbGUgc2V0cmVnaWQgc2V0cmV1aWQgc2V0c2lkIHNldHBnaWQgc2V0cGdycCBzZXR1aWQgc2V0dmJ1ZiBzbnByaW50ZiBcCisgc2V0bG9jYWxlIHNldHJlZ2lkIHNldHJldWlkIHNldHJlc3VpZCBzZXRyZXNnaWQgXAorIHNldHNpZCBzZXRwZ2lkIHNldHBncnAgc2V0dWlkIHNldHZidWYgc25wcmludGYgXAogIHNpZ2FjdGlvbiBzaWdpbnRlcnJ1cHQgc2lncmVsc2Ugc3RyZnRpbWUgXAogIHN5c2NvbmYgdGNnZXRwZ3JwIHRjc2V0cGdycCB0ZW1wbmFtIHRpbWVnbSB0aW1lcyB0bXBmaWxlIHRtcG5hbSB0bXBuYW1fciBcCiAgdHJ1bmNhdGUgdW5hbWUgdW5zZXRlbnYgdXRpbWVzIHdhaXRwaWQgd2FpdDMgd2FpdDQgd2NzY29sbCBfZ2V0cHR5CiBkbyA6CiAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgotZXZhbCBhc192YWw9XCQkYXNfYWNfdmFyCi0gICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKQEAgLTkwODAsNyArOTUzNiw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0hST09UIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTkxMDUsNyArOTU2MSw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElOSyAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05MTMwLDcgKzk1ODYsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZTUxJTksgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTE1NSw3ICs5NjExLDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GQ0hESVIgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTE4MCw3ICs5NjM2LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GU1lOQyAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05MjA1LDcgKzk2NjEsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZEQVRBU1lOQyAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05MjMwLDcgKzk2ODYsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0VQT0xMIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTkyNTgsNyArOTcxNCw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfS1FVRVVFIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTkyNzcsNyArOTczMyw2IEBACiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIGludApAQCAtOTI5Miw3ICs5NzQ3LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DVEVSTUlEX1IgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTMwMSw0MSArOTc1NiwxMDAgQEAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmxvY2siID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZsb2NrLi4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmbG9jayBkZWNsYXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmxvY2sgZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZmxvY2tfZGVjbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KLQogaW50CiBtYWluICgpCiB7CiB2b2lkKiBwID0gZmxvY2sKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfRkxPQ0sgMSIgPj5jb25mZGVmcy5oCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgYWNfY3ZfZmxvY2tfZGVjbD15ZXMKIGVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9CisgIGFjX2N2X2Zsb2NrX2RlY2w9bm8KIAogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mbG9ja19kZWNsIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZmxvY2tfZGVjbCIgPiY2OyB9CitpZiB0ZXN0ICJ4JHthY19jdl9mbG9ja19kZWNsfSIgPSB4eWVzOyB0aGVuCisgIGZvciBhY19mdW5jIGluIGZsb2NrCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImZsb2NrIiAiYWNfY3ZfZnVuY19mbG9jayIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19mbG9jayIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0ZMT0NLIDEKK19BQ0VPRgorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZsb2NrIGluIC1sYnNkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmbG9jayBpbiAtbGJzZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfYnNkX2Zsb2NrKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxic2QgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGZsb2NrICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZmxvY2sgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2JzZF9mbG9jaz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2JzZF9mbG9jaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfYnNkX2Zsb2NrIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2JzZF9mbG9jayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ic2RfZmxvY2siID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfRkxPQ0sgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgRkxPQ0tfTkVFRFNfTElCQlNEIDEiID4+Y29uZmRlZnMuaAorCisKK2ZpCisKKworZmkKK2RvbmUKKworZmkKKwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0cGFnZXNpemUiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdldHBhZ2VzaXplLi4uICIgPiY2OyB9CiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiBpbnQKQEAgLTkzNTAsNyArOTg2NCw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUUEFHRVNJWkUgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTM2NSw3ICs5ODc5LDcgQEAKIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfVFJVRStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Byb2dfVFJVRSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRUUlVFIjsgdGhlbgpAQCAtOTQwNSw3ICs5OTE5LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW5ldF9hdG9uIGluIC1sYyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5ldF9hdG9uIGluIC1sYy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfY19pbmV0X2F0b24rc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfY19pbmV0X2F0b24rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC05NDM5LDEyICs5OTUzLDEyIEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfY19pbmV0X2F0b24iID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfY19pbmV0X2F0b24iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfY19pbmV0X2F0b24iID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX2NfaW5ldF9hdG9uIiA9IHh5ZXM7IHRoZW4gOgogICAkYWNfY3ZfcHJvZ19UUlVFCiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGluZXRfYXRvbiBpbiAtbHJlc29sdiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5ldF9hdG9uIGluIC1scmVzb2x2Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9yZXNvbHZfaW5ldF9hdG9uK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX3Jlc29sdl9pbmV0X2F0b24rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC05NDc4LDcgKzk5OTIsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3Jlc29sdl9pbmV0X2F0b24iID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfcmVzb2x2X2luZXRfYXRvbiIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZXNvbHZfaW5ldF9hdG9uIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZXNvbHZfaW5ldF9hdG9uIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElCUkVTT0xWIDEKIF9BQ0VPRgpAQCAtOTQ5NSw3ICsxMDAwOSw3IEBACiAjIGV4aXQgUHl0aG9uCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjaGZsYWdzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBjaGZsYWdzLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfY2hmbGFncytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2hhdmVfY2hmbGFncys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKQEAgLTk1MjksNyArMTAwNDMsNyBAQAogJGFzX2VjaG8gIiRhY19jdl9oYXZlX2NoZmxhZ3MiID4mNjsgfQogaWYgdGVzdCAiJGFjX2N2X2hhdmVfY2hmbGFncyIgPSBjcm9zcyA7IHRoZW4KICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiY2hmbGFncyIgImFjX2N2X2Z1bmNfY2hmbGFncyIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19jaGZsYWdzIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfY2hmbGFncyIgPSB4eWVzOyB0aGVuIDoKICAgYWNfY3ZfaGF2ZV9jaGZsYWdzPSJ5ZXMiCiBlbHNlCiAgIGFjX2N2X2hhdmVfY2hmbGFncz0ibm8iCkBAIC05NTQ0LDcgKzEwMDU4LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGNoZmxhZ3MiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxjaGZsYWdzLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfbGNoZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9oYXZlX2xjaGZsYWdzKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgpAQCAtOTU3OCw3ICsxMDA5Miw3IEBACiAkYXNfZWNobyAiJGFjX2N2X2hhdmVfbGNoZmxhZ3MiID4mNjsgfQogaWYgdGVzdCAiJGFjX2N2X2hhdmVfbGNoZmxhZ3MiID0gY3Jvc3MgOyB0aGVuCiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImxjaGZsYWdzIiAiYWNfY3ZfZnVuY19sY2hmbGFncyIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19sY2hmbGFncyIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2xjaGZsYWdzIiA9IHh5ZXM7IHRoZW4gOgogICBhY19jdl9oYXZlX2xjaGZsYWdzPSJ5ZXMiCiBlbHNlCiAgIGFjX2N2X2hhdmVfbGNoZmxhZ3M9Im5vIgpAQCAtOTYwMiw3ICsxMDExNiw3IEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGluZmxhdGVDb3B5IGluIC1seiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5mbGF0ZUNvcHkgaW4gLWx6Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl96X2luZmxhdGVDb3B5K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX3pfaW5mbGF0ZUNvcHkrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC05NjM2LDcgKzEwMTUwLDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl96X2luZmxhdGVDb3B5IiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX3pfaW5mbGF0ZUNvcHkiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfel9pbmZsYXRlQ29weSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfel9pbmZsYXRlQ29weSIgPSB4eWVzOyB0aGVuIDoKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9aTElCX0NPUFkgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTk2NTUsNyArMTAxNjksNiBAQAogY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxuZXRkYi5oPgogCiBpbnQKQEAgLTk2NzAsNyArMTAxODMsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0hTVFJFUlJPUiAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05Njg1LDcgKzEwMTk4LDYgQEAKIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KQEAgLTk3MDMsNyArMTAyMTUsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0lORVRfQVRPTiAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05NzE4LDcgKzEwMjMwLDYgQEAKIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KQEAgLTk3MzYsNyArMTAyNDcsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0lORVRfUFRPTiAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05NzUxLDcgKzEwMjYyLDYgQEAKIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaWZkZWYgSEFWRV9HUlBfSAogI2luY2x1ZGUgPGdycC5oPgpAQCAtOTc2OSw3ICsxMDI3OSw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU0VUR1JPVVBTIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTk3ODMsNyArMTAyOTMsNyBAQAogZm9yIGFjX2Z1bmMgaW4gb3BlbnB0eQogZG8gOgogICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJvcGVucHR5IiAiYWNfY3ZfZnVuY19vcGVucHR5IgotaWYgdGVzdCAieCRhY19jdl9mdW5jX29wZW5wdHkiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19vcGVucHR5IiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfT1BFTlBUWSAxCiBfQUNFT0YKQEAgLTk3OTEsNyArMTAzMDEsNyBAQAogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBvcGVucHR5IGluIC1sdXRpbCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3Igb3BlbnB0eSBpbiAtbHV0aWwuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3V0aWxfb3BlbnB0eStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl91dGlsX29wZW5wdHkrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC05ODI1LDEzICsxMDMzNSwxMyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3V0aWxfb3BlbnB0eSIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl91dGlsX29wZW5wdHkiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfdXRpbF9vcGVucHR5IiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl91dGlsX29wZW5wdHkiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfT1BFTlBUWSAxIiA+PmNvbmZkZWZzLmgKICBMSUJTPSIkTElCUyAtbHV0aWwiCiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9wZW5wdHkgaW4gLWxic2QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG9wZW5wdHkgaW4gLWxic2QuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2JzZF9vcGVucHR5K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX2JzZF9vcGVucHR5Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtOTg2NSw3ICsxMDM3NSw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfYnNkX29wZW5wdHkiID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfYnNkX29wZW5wdHkiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfYnNkX29wZW5wdHkiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX2JzZF9vcGVucHR5IiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX09QRU5QVFkgMSIgPj5jb25mZGVmcy5oCiAgTElCUz0iJExJQlMgLWxic2QiCiBmaQpAQCAtOTg4MCw3ICsxMDM5MCw3IEBACiBmb3IgYWNfZnVuYyBpbiBmb3JrcHR5CiBkbyA6CiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImZvcmtwdHkiICJhY19jdl9mdW5jX2ZvcmtwdHkiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9ya3B0eSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2ZvcmtwdHkiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9GT1JLUFRZIDEKIF9BQ0VPRgpAQCAtOTg4OCw3ICsxMDM5OCw3IEBACiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZvcmtwdHkgaW4gLWx1dGlsIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBmb3JrcHR5IGluIC1sdXRpbC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfdXRpbF9mb3JrcHR5K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX3V0aWxfZm9ya3B0eSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTk5MjIsMTMgKzEwNDMyLDEzIEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfdXRpbF9mb3JrcHR5IiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX3V0aWxfZm9ya3B0eSIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl91dGlsX2ZvcmtwdHkiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX3V0aWxfZm9ya3B0eSIgPSB4eWVzOyB0aGVuIDoKICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GT1JLUFRZIDEiID4+Y29uZmRlZnMuaAogIExJQlM9IiRMSUJTIC1sdXRpbCIKIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZm9ya3B0eSBpbiAtbGJzZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZm9ya3B0eSBpbiAtbGJzZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfYnNkX2ZvcmtwdHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfYnNkX2ZvcmtwdHkrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC05OTYyLDcgKzEwNDcyLDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ic2RfZm9ya3B0eSIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9ic2RfZm9ya3B0eSIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ic2RfZm9ya3B0eSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfYnNkX2ZvcmtwdHkiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfRk9SS1BUWSAxIiA+PmNvbmZkZWZzLmgKICBMSUJTPSIkTElCUyAtbGJzZCIKIGZpCkBAIC05OTc5LDcgKzEwNDg5LDcgQEAKIGZvciBhY19mdW5jIGluIG1lbW1vdmUKIGRvIDoKICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAibWVtbW92ZSIgImFjX2N2X2Z1bmNfbWVtbW92ZSIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19tZW1tb3ZlIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbWVtbW92ZSIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX01FTU1PVkUgMQogX0FDRU9GCkBAIC05OTkzLDggKzEwNTAzLDcgQEAKIGRvIDoKICAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCi1ldmFsIGFzX3ZhbD1cJCRhc19hY192YXIKLSAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKIF9BQ0VPRgpAQCAtMTAwMDMsMzEgKzEwNTEyLDUwIEBACiBkb25lCiAKIAotZm9yIGFjX2Z1bmMgaW4gZHVwMiBnZXRjd2Qgc3RyZHVwCi1kbyA6Ci0gIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgotZXZhbCBhc192YWw9XCQkYXNfYWNfdmFyCi0gICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImR1cDIiICJhY19jdl9mdW5jX2R1cDIiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZHVwMiIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9EVVAyIDEiID4+Y29uZmRlZnMuaAogCiBlbHNlCiAgIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IgorICAqIiBkdXAyLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBkdXAyLiRhY19vYmpleHQiCiAgOzsKIGVzYWMKIAogZmkKLWRvbmUKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0Y3dkIiAiYWNfY3ZfZnVuY19nZXRjd2QiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0Y3dkIiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVENXRCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBnZXRjd2QuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIGdldGN3ZC4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cmR1cCIgImFjX2N2X2Z1bmNfc3RyZHVwIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cmR1cCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVFJEVVAgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgc3RyZHVwLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJkdXAuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQogCiAKIGZvciBhY19mdW5jIGluIGdldHBncnAKIGRvIDoKICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0cGdycCIgImFjX2N2X2Z1bmNfZ2V0cGdycCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRwZ3JwIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0cGdycCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0dFVFBHUlAgMQogX0FDRU9GCkBAIC0xMDA0Niw3ICsxMDU3NCw2IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEdFVFBHUlBfSEFWRV9BUkcgMSIgPj5jb25mZGVmcy5oCiAKLQogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCkBAIC0xMDA1Niw3ICsxMDU4Myw3IEBACiBmb3IgYWNfZnVuYyBpbiBzZXRwZ3JwCiBkbyA6CiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNldHBncnAiICJhY19jdl9mdW5jX3NldHBncnAiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2V0cGdycCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3NldHBncnAiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9TRVRQR1JQIDEKIF9BQ0VPRgpAQCAtMTAwNzUsNyArMTA2MDIsNiBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBTRVRQR1JQX0hBVkVfQVJHIDEiID4+Y29uZmRlZnMuaAogCi0KIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIApAQCAtMTAwODUsNyArMTA2MTEsNyBAQAogZm9yIGFjX2Z1bmMgaW4gZ2V0dGltZW9mZGF5CiBkbyA6CiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldHRpbWVvZmRheSIgImFjX2N2X2Z1bmNfZ2V0dGltZW9mZGF5IgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldHRpbWVvZmRheSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldHRpbWVvZmRheSIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCiBfQUNFT0YKQEAgLTEwMTY5LDIzICsxMDY5NSwyOSBAQAogaW50CiBtYWluICgpCiB7Ci0KIGdldGFkZHJpbmZvKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZ2V0YWRkcmluZm8gYnVnIiA+JjUKKyAgaGF2ZV9nZXRhZGRyaW5mbz15ZXMKK2Vsc2UKKyAgaGF2ZV9nZXRhZGRyaW5mbz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfZ2V0YWRkcmluZm8iID4mNQorJGFzX2VjaG8gIiRoYXZlX2dldGFkZHJpbmZvIiA+JjY7IH0KK2lmIHRlc3QgJGhhdmVfZ2V0YWRkcmluZm8gPSB5ZXMKK3RoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBnZXRhZGRyaW5mbyBidWciID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZ2V0YWRkcmluZm8gYnVnLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBidWdneSIgPiY1Ci0kYXNfZWNobyAiYnVnZ3kiID4mNjsgfQotYnVnZ3lnZXRhZGRyaW5mbz15ZXMKKyAgaWYgJHthY19jdl9idWdneV9nZXRhZGRyaW5mbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89eWVzCiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KQEAgLTEwMTk2LDcgKzEwNzI4LDcgQEAKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogCi1tYWluKCkKK2ludCBtYWluKCkKIHsKICAgaW50IHBhc3NpdmUsIGdhaWVyciwgaW5ldDQgPSAwLCBpbmV0NiA9IDA7CiAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpLCAqYWl0b3A7CkBAIC0xMDI2OCw0MCArMTA4MDAsMzUgQEAKIAogICBpZiAoYWl0b3ApCiAgICAgZnJlZWFkZHJpbmZvKGFpdG9wKTsKLSAgZXhpdCgwKTsKKyAgcmV0dXJuIDA7CiAKICBiYWQ6CiAgIGlmIChhaXRvcCkKICAgICBmcmVlYWRkcmluZm8oYWl0b3ApOwotICBleGl0KDEpOworICByZXR1cm4gMTsKIH0KIAogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGdvb2QiID4mNQotJGFzX2VjaG8gImdvb2QiID4mNjsgfQotYnVnZ3lnZXRhZGRyaW5mbz1ubworICBhY19jdl9idWdneV9nZXRhZGRyaW5mbz1ubwogZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogYnVnZ3kiID4mNQotJGFzX2VjaG8gImJ1Z2d5IiA+JjY7IH0KLWJ1Z2d5Z2V0YWRkcmluZm89eWVzCisgIGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvPXllcwogZmkKIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKICAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKLWVsc2UKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1idWdneWdldGFkZHJpbmZvPXllcworZmkKIAogZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiAKLWlmIHRlc3QgIiRidWdneWdldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCi0JaWYgdGVzdCAiJGlwdjYiID0gInllcyI7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm8iID4mNQorJGFzX2VjaG8gIiRhY19jdl9idWdneV9nZXRhZGRyaW5mbyIgPiY2OyB9CisKK2lmIHRlc3QgJGhhdmVfZ2V0YWRkcmluZm8gPSBubyAtbyAiJGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvIiA9IHllcwordGhlbgorCWlmIHRlc3QgJGlwdjYgPSB5ZXMKKwl0aGVuCiAJCWVjaG8gJ0ZhdGFsOiBZb3UgbXVzdCBnZXQgd29ya2luZyBnZXRhZGRyaW5mbygpIGZ1bmN0aW9uLicKIAkJZWNobyAnICAgICAgIG9yIHlvdSBjYW4gc3BlY2lmeSAiLS1kaXNhYmxlLWlwdjYiJy4KIAkJZXhpdCAxCkBAIC0xMDMxMSwxMCArMTA4MzgsMTEgQEAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMSIgPj5jb25mZGVmcy5oCiAKIGZpCisKIGZvciBhY19mdW5jIGluIGdldG5hbWVpbmZvCiBkbyA6CiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldG5hbWVpbmZvIiAiYWNfY3ZfZnVuY19nZXRuYW1laW5mbyIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRuYW1laW5mbyIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldG5hbWVpbmZvIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8gMQogX0FDRU9GCkBAIC0xMDMyNiw3ICsxMDg1NCw3IEBACiAjIGNoZWNrcyBmb3Igc3RydWN0dXJlcwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfdGltZStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2hlYWRlcl90aW1lKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTAzNjEsNyArMTA4ODksNyBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RydWN0IHRtIGlzIGluIHN5cy90aW1lLmggb3IgdGltZS5oIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RydWN0IHRtIGlzIGluIHN5cy90aW1lLmggb3IgdGltZS5oLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3N0cnVjdF90bStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3N0cnVjdF90bSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEwMzk4LDcgKzEwOTI2LDcgQEAKICNpbmNsdWRlIDwkYWNfY3Zfc3RydWN0X3RtPgogCiAiCi1pZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdG1fdG1fem9uZSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiID0geHllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9TVFJVQ1RfVE1fVE1fWk9ORSAxCkBAIC0xMDQxNCw3ICsxMDk0Miw3IEBACiBlbHNlCiAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInR6bmFtZSIgImFjX2N2X2hhdmVfZGVjbF90em5hbWUiICIjaW5jbHVkZSA8dGltZS5oPgogIgotaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfdHpuYW1lIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF90em5hbWUiID0geHllczsgdGhlbiA6CiAgIGFjX2hhdmVfZGVjbD0xCiBlbHNlCiAgIGFjX2hhdmVfZGVjbD0wCkBAIC0xMDQyNiw3ICsxMDk1NCw3IEBACiAKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdHpuYW1lIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0em5hbWUuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdmFyX3R6bmFtZStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Zhcl90em5hbWUrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xMDQ2Miw3ICsxMDk5MCw3IEBACiBmaQogCiBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0IiAic3RfcmRldiIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9yZGV2IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9yZGV2IiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9yZGV2IiA9IHh5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRfU1RfUkRFViAxCkBAIC0xMDQ3Miw3ICsxMTAwMCw3IEBACiBmaQogCiBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0IiAic3RfYmxrc2l6ZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9ibGtzaXplIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9ibGtzaXplIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9ibGtzaXplIiA9IHh5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxLU0laRSAxCkBAIC0xMDQ4Miw3ICsxMTAxMCw3IEBACiBmaQogCiBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0IiAic3RfZmxhZ3MiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfZmxhZ3MiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2ZsYWdzIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9mbGFncyIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUX1NUX0ZMQUdTIDEKQEAgLTEwNDkyLDcgKzExMDIwLDcgQEAKIGZpCiAKIGFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXQiICJzdF9nZW4iICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfZ2VuIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9nZW4iID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2dlbiIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUX1NUX0dFTiAxCkBAIC0xMDUwMiw3ICsxMTAzMCw3IEBACiBmaQogCiBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0IiAic3RfYmlydGh0aW1lIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2JpcnRodGltZSIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmlydGh0aW1lIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9iaXJ0aHRpbWUiID0geHllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CSVJUSFRJTUUgMQpAQCAtMTA1MTIsNyArMTEwNDAsNyBAQAogZmkKIAogYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdCIgInN0X2Jsb2NrcyIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9ibG9ja3MiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2Jsb2NrcyIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmxvY2tzIiA9IHh5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxPQ0tTIDEKQEAgLTEwNTM0LDkgKzExMDYyLDEwIEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHRpbWUuaCB0aGF0IGRlZmluZXMgYWx0em9uZSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGltZS5oIHRoYXQgZGVmaW5lcyBhbHR6b25lLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmUrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9oZWFkZXJfdGltZV9hbHR6b25lKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKKwogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8dGltZS5oPgpAQCAtMTA1NTQsNiArMTEwODMsNyBAQAogICBhY19jdl9oZWFkZXJfdGltZV9hbHR6b25lPW5vCiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKIGZpCiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZSIgPiY1CkBAIC0xMDU5NiwxMyArMTExMjYsMTIgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYWRkcmluZm8iID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFkZHJpbmZvLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3N0cnVjdF9hZGRyaW5mbytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3N0cnVjdF9hZGRyaW5mbys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotIwkJaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgogaW50CiBtYWluICgpCiB7CkBAIC0xMDYyOSw3ICsxMTE1OCw3IEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNvY2thZGRyX3N0b3JhZ2UiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNvY2thZGRyX3N0b3JhZ2UuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEwNjY1LDcgKzExMTk0LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNoYXIgaXMgdW5zaWduZWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBjaGFyIGlzIHVuc2lnbmVkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2NfY2hhcl91bnNpZ25lZCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2NfY2hhcl91bnNpZ25lZCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEwNjk3LDcgKzExMjI2LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2NfY29uc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9jX2NvbnN0Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTA4NDQsMTEgKzExMzczLDkgQEAKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogCi0KICRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAxIiA+PmNvbmZkZWZzLmgKIAotICBoYXZlX3Byb3RvdHlwZXM9eWVzCi0KKyAgIGhhdmVfcHJvdG90eXBlcz15ZXMKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9wcm90b3R5cGVzIiA+JjUKQEAgLTEwOTExLDcgKzExNDM4LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TT0NLRVRQQUlSIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTEwOTQ1LDYgKzExNDcyLDcgQEAKIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CisKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIApAQCAtMTA5ODYsNyArMTE1MTQsNyBAQAogCiAKIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGhvc3RieW5hbWVfciIgImFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZV9yIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGhvc3RieW5hbWVfciIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGhvc3RieW5hbWVfciIgPSB4eWVzOyB0aGVuIDoKIAogICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUiAxIiA+PmNvbmZkZWZzLmgKIApAQCAtMTEwMzQsNDMgKzExNTYyLDYgQEAKICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSMgICAgIGluY2x1ZGUgPG5ldGRiLmg+Ci0KLWludAotbWFpbiAoKQotewotCi0gICAgICBjaGFyICpuYW1lOwotICAgICAgc3RydWN0IGhvc3RlbnQgKmhlOwotICAgICAgY2hhciBidWZmZXJbMjA0OF07Ci0gICAgICBpbnQgYnVmbGVuID0gMjA0ODsKLSAgICAgIGludCBoX2Vycm5vcDsKLQotICAgICAgKHZvaWQpIGdldGhvc3RieW5hbWVfcihuYW1lLCBoZSwgYnVmZmVyLCBidWZsZW4sICZoX2Vycm5vcCkKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLSAgICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SIDEiID4+Y29uZmRlZnMuaAotCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzVfQVJHIDEiID4+Y29uZmRlZnMuaAotCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi1lbHNlCi0KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBnZXRob3N0YnluYW1lX3Igd2l0aCAzIGFyZ3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZ2V0aG9zdGJ5bmFtZV9yIHdpdGggMyBhcmdzLi4uICIgPiY2OyB9Ci0gICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KICMgICAgICAgaW5jbHVkZSA8bmV0ZGIuaD4KIAogaW50CkBAIC0xMTA3OSw5ICsxMTU3MCwxMSBAQAogCiAgICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpoZTsKLSAgICAgICAgc3RydWN0IGhvc3RlbnRfZGF0YSBkYXRhOworICAgICAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsKKyAgICAgICAgaW50IGJ1ZmxlbiA9IDIwNDg7CisgICAgICAgIGludCBoX2Vycm5vcDsKIAotICAgICAgICAodm9pZCkgZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIGhlLCAmZGF0YSk7CisgICAgICAgICh2b2lkKSBnZXRob3N0YnluYW1lX3IobmFtZSwgaGUsIGJ1ZmZlciwgYnVmbGVuLCAmaF9lcnJub3ApCiAKICAgOwogICByZXR1cm4gMDsKQEAgLTExMDkyLDcgKzExNTg1LDcgQEAKICAgICAgICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1IgMSIgPj5jb25mZGVmcy5oCiAKIAotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1JfM19BUkcgMSIgPj5jb25mZGVmcy5oCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUl81X0FSRyAxIiA+PmNvbmZkZWZzLmgKIAogICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQpAQCAtMTExMDEsNiArMTE1OTQsNDEgQEAKIAogICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBnZXRob3N0YnluYW1lX3Igd2l0aCAzIGFyZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZ2V0aG9zdGJ5bmFtZV9yIHdpdGggMyBhcmdzLi4uICIgPiY2OyB9CisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworIyAgICAgICAgICAgaW5jbHVkZSA8bmV0ZGIuaD4KKworaW50CittYWluICgpCit7CisKKyAgICAgICAgICAgIGNoYXIgKm5hbWU7CisgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaGU7CisgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudF9kYXRhIGRhdGE7CisKKyAgICAgICAgICAgICh2b2lkKSBnZXRob3N0YnluYW1lX3IobmFtZSwgaGUsICZkYXRhKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzNfQVJHIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitlbHNlCisKKyAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKQEAgLTExMTE3LDcgKzExNjQ1LDcgQEAKICAgZm9yIGFjX2Z1bmMgaW4gZ2V0aG9zdGJ5bmFtZQogZG8gOgogICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRob3N0YnluYW1lIiAiYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCiBfQUNFT0YKQEAgLTExMTM5LDEyICsxMTY2NywxMiBAQAogCiAjIExpbnV4IHJlcXVpcmVzIHRoaXMgZm9yIGNvcnJlY3QgZi5wLiBvcGVyYXRpb25zCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJfX2ZwdV9jb250cm9sIiAiYWNfY3ZfZnVuY19fX2ZwdV9jb250cm9sIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX19fZnB1X2NvbnRyb2wiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19fX2ZwdV9jb250cm9sIiA9IHh5ZXM7IHRoZW4gOgogCiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9fZnB1X2NvbnRyb2wgaW4gLWxpZWVlIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBfX2ZwdV9jb250cm9sIGluIC1saWVlZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfaWVlZV9fX2ZwdV9jb250cm9sK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX2llZWVfX19mcHVfY29udHJvbCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTExMTc4LDcgKzExNzA2LDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9pZWVlX19fZnB1X2NvbnRyb2wiID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfaWVlZV9fX2ZwdV9jb250cm9sIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2llZWVfX19mcHVfY29udHJvbCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfaWVlZV9fX2ZwdV9jb250cm9sIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElCSUVFRSAxCiBfQUNFT0YKQEAgLTExMjM1LDcgKzExNzYzLDcgQEAKIHRoZW4gTElCTT0kd2l0aHZhbAogICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogc2V0IExJQk09XCIkd2l0aHZhbFwiIiA+JjUKICRhc19lY2hvICJzZXQgTElCTT1cIiR3aXRodmFsXCIiID4mNjsgfQotZWxzZSBhc19mbl9lcnJvciAicHJvcGVyIHVzYWdlIGlzIC0td2l0aC1saWJtPVNUUklORyIgIiRMSU5FTk8iIDUKK2Vsc2UgYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtbGlibT1TVFJJTkciICIkTElORU5PIiA1CiBmaQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZGVmYXVsdCBMSUJNPVwiJExJQk1cIiIgPiY1CkBAIC0xMTI1OSw3ICsxMTc4Nyw3IEBACiB0aGVuIExJQkM9JHdpdGh2YWwKICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHNldCBMSUJDPVwiJHdpdGh2YWxcIiIgPiY1CiAkYXNfZWNobyAic2V0IExJQkM9XCIkd2l0aHZhbFwiIiA+JjY7IH0KLWVsc2UgYXNfZm5fZXJyb3IgInByb3BlciB1c2FnZSBpcyAtLXdpdGgtbGliYz1TVFJJTkciICIkTElORU5PIiA1CitlbHNlIGFzX2ZuX2Vycm9yICQ/ICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLWxpYmM9U1RSSU5HIiAiJExJTkVOTyIgNQogZmkKIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGRlZmF1bHQgTElCQz1cIiRMSUJDXCIiID4mNQpAQCAtMTEyNjcsMTIgKzExNzk1LDE4MSBAQAogZmkKIAogCi0jICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAqIENoZWNrIGZvciBtYXRoZW1hdGljYWwgZnVuY3Rpb25zICoKLSMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ2hlY2sgZm9yIHZhcmlvdXMgcHJvcGVydGllcyBvZiBmbG9hdGluZyBwb2ludCAqCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLUxJQlNfU0FWRT0kTElCUwotTElCUz0iJExJQlMgJExJQk0iCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgQyBkb3VibGVzIGFyZSBsaXR0bGUtZW5kaWFuIElFRUUgNzU0IGJpbmFyeTY0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQyBkb3VibGVzIGFyZSBsaXR0bGUtZW5kaWFuIElFRUUgNzU0IGJpbmFyeTY0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZT1ubworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluKCkgeworICAgIGRvdWJsZSB4ID0gOTAwNjEwNDA3MTgzMjU4MS4wOworICAgIGlmIChtZW1jbXAoJngsICJceDA1XHgwNFx4MDNceDAyXHgwMVx4ZmZceDNmXHg0MyIsIDgpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlPXllcworZWxzZQorICBhY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZT1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZSIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGUiID0geWVzCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIERPVUJMRV9JU19MSVRUTEVfRU5ESUFOX0lFRUU3NTQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBDIGRvdWJsZXMgYXJlIGJpZy1lbmRpYW4gSUVFRSA3NTQgYmluYXJ5NjQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBDIGRvdWJsZXMgYXJlIGJpZy1lbmRpYW4gSUVFRSA3NTQgYmluYXJ5NjQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfYmlnX2VuZGlhbl9kb3VibGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2JpZ19lbmRpYW5fZG91YmxlPW5vCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgoraW50IG1haW4oKSB7CisgICAgZG91YmxlIHggPSA5MDA2MTA0MDcxODMyNTgxLjA7CisgICAgaWYgKG1lbWNtcCgmeCwgIlx4NDNceDNmXHhmZlx4MDFceDAyXHgwM1x4MDRceDA1IiwgOCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGU9eWVzCitlbHNlCisgIGFjX2N2X2JpZ19lbmRpYW5fZG91YmxlPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9iaWdfZW5kaWFuX2RvdWJsZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2JpZ19lbmRpYW5fZG91YmxlIiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl9iaWdfZW5kaWFuX2RvdWJsZSIgPSB5ZXMKK3RoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgRE9VQkxFX0lTX0JJR19FTkRJQU5fSUVFRTc1NCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBTb21lIEFSTSBwbGF0Zm9ybXMgdXNlIGEgbWl4ZWQtZW5kaWFuIHJlcHJlc2VudGF0aW9uIGZvciBkb3VibGVzLgorIyBXaGlsZSBQeXRob24gZG9lc24ndCBjdXJyZW50bHkgaGF2ZSBmdWxsIHN1cHBvcnQgZm9yIHRoZXNlIHBsYXRmb3JtcworIyAoc2VlIGUuZy4sIGlzc3VlIDE3NjI1NjEpLCB3ZSBjYW4gYXQgbGVhc3QgbWFrZSBzdXJlIHRoYXQgZmxvYXQgPC0+IHN0cmluZworIyBjb252ZXJzaW9ucyB3b3JrLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEMgZG91YmxlcyBhcmUgQVJNIG1peGVkLWVuZGlhbiBJRUVFIDc1NCBiaW5hcnk2NCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEMgZG91YmxlcyBhcmUgQVJNIG1peGVkLWVuZGlhbiBJRUVFIDc1NCBiaW5hcnk2NC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9taXhlZF9lbmRpYW5fZG91YmxlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9taXhlZF9lbmRpYW5fZG91YmxlPW5vCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgoraW50IG1haW4oKSB7CisgICAgZG91YmxlIHggPSA5MDA2MTA0MDcxODMyNTgxLjA7CisgICAgaWYgKG1lbWNtcCgmeCwgIlx4MDFceGZmXHgzZlx4NDNceDA1XHgwNFx4MDNceDAyIiwgOCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZT1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X21peGVkX2VuZGlhbl9kb3VibGUiID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X21peGVkX2VuZGlhbl9kb3VibGUiID0geWVzCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIERPVUJMRV9JU19BUk1fTUlYRURfRU5ESUFOX0lFRUU3NTQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgVGhlIHNob3J0IGZsb2F0IHJlcHIgaW50cm9kdWNlZCBpbiBQeXRob24gMy4xIHJlcXVpcmVzIHRoZQorIyBjb3JyZWN0bHktcm91bmRlZCBzdHJpbmcgPC0+IGRvdWJsZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBmcm9tCisjIFB5dGhvbi9kdG9hLmMsIHdoaWNoIGluIHR1cm4gcmVxdWlyZSB0aGF0IHRoZSBGUFUgdXNlcyA1My1iaXQKKyMgcm91bmRpbmc7IHRoaXMgaXMgYSBwcm9ibGVtIG9uIHg4Niwgd2hlcmUgdGhlIHg4NyBGUFUgaGFzIGEgZGVmYXVsdAorIyByb3VuZGluZyBwcmVjaXNpb24gb2YgNjQgYml0cy4gIEZvciBnY2MveDg2LCB3ZSBjYW4gZml4IHRoaXMgYnkKKyMgdXNpbmcgaW5saW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCB0aGUgeDg3IEZQVSBjb250cm9sIHdvcmQuCisKKyMgVGhpcyBpbmxpbmUgYXNzZW1ibGVyIHN5bnRheCBtYXkgYWxzbyB3b3JrIGZvciBzdW5jYyBhbmQgaWNjLAorIyBzbyB3ZSB0cnkgaXQgb24gYWxsIHBsYXRmb3Jtcy4KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgeDg3IGNvbnRyb2wgd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgeDg3IGNvbnRyb2wgd29yZC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICB1bnNpZ25lZCBzaG9ydCBjdzsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY3cpKTsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRjdyAlMCIgOiA6ICJtIiAoY3cpKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGhhdmVfZ2NjX2FzbV9mb3JfeDg3PXllcworZWxzZQorICBoYXZlX2djY19hc21fZm9yX3g4Nz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX2djY19hc21fZm9yX3g4NyIgPiY1CiskYXNfZWNobyAiJGhhdmVfZ2NjX2FzbV9mb3JfeDg3IiA+JjY7IH0KK2lmIHRlc3QgIiRoYXZlX2djY19hc21fZm9yX3g4NyIgPSB5ZXMKK3RoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HQ0NfQVNNX0ZPUl9YODcgMSIgPj5jb25mZGVmcy5oCisKK2ZpCiAKICMgRGV0ZWN0IHdoZXRoZXIgc3lzdGVtIGFyaXRobWV0aWMgaXMgc3ViamVjdCB0byB4ODctc3R5bGUgZG91YmxlCiAjIHJvdW5kaW5nIGlzc3Vlcy4gIFRoZSByZXN1bHQgb2YgdGhpcyB0ZXN0IGhhcyBsaXR0bGUgbWVhbmluZyBvbiBub24KQEAgLTExMjgxLDEwICsxMTk3OCw5IEBACiAjIDAgb3RoZXJ3aXNlLiAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyOTM3IGZvciBtb3JlIGluZm8uCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB4ODctc3R5bGUgZG91YmxlIHJvdW5kaW5nIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciB4ODctc3R5bGUgZG91YmxlIHJvdW5kaW5nLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3g4N19kb3VibGVfcm91bmRpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotCisjICRCQVNFQ0ZMQUdTIG1heSBhZmZlY3QgdGhlIHJlc3VsdAorYWNfc2F2ZV9jYz0iJENDIgorQ0M9IiRDQyAkQkFTRUNGTEFHUyIKIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZz1ubwogZWxzZQpAQCAtMTEzMjAsOCArMTIwMTYsNyBAQAogICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAotZmkKLQorQ0M9IiRhY19zYXZlX2NjIgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl94ODdfZG91YmxlX3JvdW5kaW5nIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZyIgPiY2OyB9CiBpZiB0ZXN0ICIkYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZyIgPSB5ZXMKQEAgLTExMzMxLDEyICsxMjAyNiwxOCBAQAogCiBmaQogCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENoZWNrIGZvciBtYXRoZW1hdGljYWwgZnVuY3Rpb25zICoKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0xJQlNfU0FWRT0kTElCUworTElCUz0iJExJQlMgJExJQk0iCiAKICMgT24gRnJlZUJTRCA2LjIsIGl0IGFwcGVhcnMgdGhhdCB0YW5oKC0wLikgcmV0dXJucyAwLiBpbnN0ZWFkIG9mCiAjIC0wLiBvbiBzb21lIGFyY2hpdGVjdHVyZXMuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGFuaCBwcmVzZXJ2ZXMgdGhlIHNpZ24gb2YgemVybyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRhbmggcHJlc2VydmVzIHRoZSBzaWduIG9mIHplcm8uLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIApAQCAtMTEzNzgsMTIgKzEyMDc5LDIzIEBACiAKIGZpCiAKLWZvciBhY19mdW5jIGluIGFjb3NoIGFzaW5oIGF0YW5oIGNvcHlzaWduIGV4cG0xIGZpbml0ZSBoeXBvdCBsb2cxcAorZm9yIGFjX2Z1bmMgaW4gYWNvc2ggYXNpbmggYXRhbmggY29weXNpZ24gZXJmIGVyZmMgZXhwbTEgZmluaXRlIGdhbW1hCiBkbyA6CiAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgotZXZhbCBhc192YWw9XCQkYXNfYWNfdmFyCi0gICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworZm9yIGFjX2Z1bmMgaW4gaHlwb3QgbGdhbW1hIGxvZzFwIHJvdW5kIHRnYW1tYQorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQogX0FDRU9GCkBAIC0xMTM5Myw3ICsxMjEwNSw3IEBACiAKIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImlzaW5mIiAiYWNfY3ZfaGF2ZV9kZWNsX2lzaW5mIiAiI2luY2x1ZGUgPG1hdGguaD4KICIKLWlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2lzaW5mIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9pc2luZiIgPSB4eWVzOyB0aGVuIDoKICAgYWNfaGF2ZV9kZWNsPTEKIGVsc2UKICAgYWNfaGF2ZV9kZWNsPTAKQEAgLTExNDA0LDcgKzEyMTE2LDcgQEAKIF9BQ0VPRgogYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiaXNuYW4iICJhY19jdl9oYXZlX2RlY2xfaXNuYW4iICIjaW5jbHVkZSA8bWF0aC5oPgogIgotaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfaXNuYW4iID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2lzbmFuIiA9IHh5ZXM7IHRoZW4gOgogICBhY19oYXZlX2RlY2w9MQogZWxzZQogICBhY19oYXZlX2RlY2w9MApAQCAtMTE0MTUsNyArMTIxMjcsNyBAQAogX0FDRU9GCiBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJpc2Zpbml0ZSIgImFjX2N2X2hhdmVfZGVjbF9pc2Zpbml0ZSIgIiNpbmNsdWRlIDxtYXRoLmg+CiAiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9pc2Zpbml0ZSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfaXNmaW5pdGUiID0geHllczsgdGhlbiA6CiAgIGFjX2hhdmVfZGVjbD0xCiBlbHNlCiAgIGFjX2hhdmVfZGVjbD0wCkBAIC0xMTQyOCw5ICsxMjE0MCwxNDggQEAKIAogTElCUz0kTElCU19TQVZFCiAKKyMgRm9yIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUsIGNoZWNrIHRoYXQgc2VtX29wZW4KKyMgYWN0dWFsbHkgd29ya3MuICBGb3IgRnJlZUJTRCB2ZXJzaW9ucyA8PSA3LjIsCisjIHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgcHJvdmlkZXMgUE9TSVggc2VtYXBob3JlcworIyBpc24ndCBsb2FkZWQgYnkgZGVmYXVsdCwgc28gYW4gYXR0ZW1wdCB0byBjYWxsCisjIHNlbV9vcGVuIHJlc3VsdHMgaW4gYSAnU2lnbmFsIDEyJyBlcnJvci4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBQT1NJWCBzZW1hcGhvcmVzIGFyZSBlbmFibGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgUE9TSVggc2VtYXBob3JlcyBhcmUgZW5hYmxlZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wb3NpeF9zZW1hcGhvcmVzX2VuYWJsZWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZD15ZXMKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKK2ludCBtYWluKHZvaWQpIHsKKyAgc2VtX3QgKmEgPSBzZW1fb3BlbigiL2F1dG9jb25mIiwgT19DUkVBVCwgU19JUlVTUnxTX0lXVVNSLCAwKTsKKyAgaWYgKGEgPT0gU0VNX0ZBSUxFRCkgeworICAgIHBlcnJvcigic2VtX29wZW4iKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBzZW1fY2xvc2UoYSk7CisgIHNlbV91bmxpbmsoIi9hdXRvY29uZiIpOworICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkPXllcworZWxzZQorICBhY19jdl9wb3NpeF9zZW1hcGhvcmVzX2VuYWJsZWQ9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZCA9IG5vCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFBPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgTXVsdGlwcm9jZXNzaW5nIGNoZWNrIGZvciBicm9rZW4gc2VtX2dldHZhbHVlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBicm9rZW4gc2VtX2dldHZhbHVlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBicm9rZW4gc2VtX2dldHZhbHVlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2Jyb2tlbl9zZW1fZ2V0dmFsdWUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2Jyb2tlbl9zZW1fZ2V0dmFsdWU9eWVzCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitpbnQgbWFpbih2b2lkKXsKKyAgc2VtX3QgKmEgPSBzZW1fb3BlbigiL2F1dG9jZnR3IiwgT19DUkVBVCwgU19JUlVTUnxTX0lXVVNSLCAwKTsKKyAgaW50IGNvdW50OworICBpbnQgcmVzOworICBpZihhPT1TRU1fRkFJTEVEKXsKKyAgICBwZXJyb3IoInNlbV9vcGVuIik7CisgICAgcmV0dXJuIDE7CisKKyAgfQorICByZXMgPSBzZW1fZ2V0dmFsdWUoYSwgJmNvdW50KTsKKyAgc2VtX2Nsb3NlKGEpOworICBzZW1fdW5saW5rKCIvYXV0b2NmdHciKTsKKyAgcmV0dXJuIHJlcz09LTEgPyAxIDogMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZT1ubworZWxzZQorICBhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlPXllcworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlID0geWVzCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBkZXRlcm1pbmUgd2hhdCBzaXplIGRpZ2l0IHRvIHVzZSBmb3IgUHl0aG9uJ3MgbG9uZ3MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGlnaXQgc2l6ZSBmb3IgUHl0aG9uJ3MgbG9uZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGlnaXQgc2l6ZSBmb3IgUHl0aG9uJ3MgbG9uZ3MuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1iaWctZGlnaXRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2JpZ19kaWdpdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9iaWdfZGlnaXRzOyBjYXNlICRlbmFibGVfYmlnX2RpZ2l0cyBpbgoreWVzKQorICBlbmFibGVfYmlnX2RpZ2l0cz0zMCA7Oworbm8pCisgIGVuYWJsZV9iaWdfZGlnaXRzPTE1IDs7CisxNXwzMCkKKyAgOzsKKyopCisgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJGVuYWJsZV9iaWdfZGlnaXRzIGZvciAtLWVuYWJsZS1iaWctZGlnaXRzOyB2YWx1ZSBzaG91bGQgYmUgMTUgb3IgMzAiICIkTElORU5PIiA1IDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9iaWdfZGlnaXRzIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX2JpZ19kaWdpdHMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBZTE9OR19CSVRTX0lOX0RJR0lUICRlbmFibGVfYmlnX2RpZ2l0cworX0FDRU9GCisKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8gdmFsdWUgc3BlY2lmaWVkIiA+JjUKKyRhc19lY2hvICJubyB2YWx1ZSBzcGVjaWZpZWQiID4mNjsgfQorZmkKKworCiAjIGNoZWNrIGZvciB3Y2hhci5oCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAid2NoYXIuaCIgImFjX2N2X2hlYWRlcl93Y2hhcl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl93Y2hhcl9oIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl93Y2hhcl9oIiA9IHh5ZXM7IHRoZW4gOgogCiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfV0NIQVJfSCAxIiA+PmNvbmZkZWZzLmgKQEAgLTExNDUzLDcgKzEyMzA0LDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2Ygd2NoYXJfdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHdjaGFyX3QuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3djaGFyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2Zfd2NoYXJfdCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHdjaGFyX3QpKSIgImFjX2N2X3NpemVvZl93Y2hhcl90IiAgICAgICAgIiNpbmNsdWRlIDx3Y2hhci5oPgpAQCAtMTE0NjMsOSArMTIzMTQsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV93Y2hhcl90IiA9IHllczsgdGhlbgogICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLXsgYXNfZm5fc2V0X3N0YXR1cyA3NwotYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAod2NoYXJfdCkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAod2NoYXJfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl93Y2hhcl90PTAKICAgIGZpCkBAIC0xMTUyMCw3ICsxMjM3MCw3IEBACiAgICMgY2hlY2sgd2hldGhlciB3Y2hhcl90IGlzIHNpZ25lZCBvciBub3QKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdjaGFyX3QgaXMgc2lnbmVkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2NoYXJfdCBpcyBzaWduZWQuLi4gIiA+JjY7IH0KLSAgaWYgdGVzdCAiJHthY19jdl93Y2hhcl90X3NpZ25lZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGlmICR7YWNfY3Zfd2NoYXJfdF9zaWduZWQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCkBAIC0xMTU4NCw3ICsxMjQzNCw3IEBACiAgICAgICAkYXNfZWNobyAiI2RlZmluZSBQeV9VTklDT0RFX1NJWkUgNCIgPj5jb25mZGVmcy5oCiAKICAgICAgIDs7Ci0qKSBhc19mbl9lcnJvciAiaW52YWxpZCB2YWx1ZSBmb3IgLS1lbmFibGUtdW5pY29kZS4gVXNlIGVpdGhlciB1Y3MyIG9yIHVjczQgKGxvd2VyY2FzZSkuIiAiJExJTkVOTyIgNSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgZm9yIC0tZW5hYmxlLXVuaWNvZGUuIFVzZSBlaXRoZXIgdWNzMiBvciB1Y3M0IChsb3dlcmNhc2UpLiIgIiRMSU5FTk8iIDUgOzsKIGVzYWMKIAogCkBAIC0xMTYzMSw3ICsxMjQ4MSw3IEBACiAjIGNoZWNrIGZvciBlbmRpYW5uZXNzCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4uLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9jX2JpZ2VuZGlhbis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KQEAgLTExODQ5LDcgKzEyNjk5LDcgQEAKIAogICAgICA7OyAjKAogICAgKikKLSAgICAgYXNfZm5fZXJyb3IgInVua25vd24gZW5kaWFubmVzcworICAgICBhc19mbl9lcnJvciAkPyAidW5rbm93biBlbmRpYW5uZXNzCiAgcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiICIkTElORU5PIiA1IDs7CiAgZXNhYwogCkBAIC0xMTg1OCw3ICsxMjcwOCw3IEBACiAjIG9yIGZpbGxzIHdpdGggemVyb3MgKGxpa2UgdGhlIENyYXkgSjkwLCBhY2NvcmRpbmcgdG8gVGltIFBldGVycykuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcmlnaHQgc2hpZnQgZXh0ZW5kcyB0aGUgc2lnbiBiaXQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciByaWdodCBzaGlmdCBleHRlbmRzIHRoZSBzaWduIGJpdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKQEAgLTExODk3LDcgKzEyNzQ3LDcgQEAKICMgY2hlY2sgZm9yIGdldGNfdW5sb2NrZWQgYW5kIHJlbGF0ZWQgbG9ja2luZyBmdW5jdGlvbnMKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldGNfdW5sb2NrZWQoKSBhbmQgZnJpZW5kcyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0Y191bmxvY2tlZCgpIGFuZCBmcmllbmRzLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZ2V0Y191bmxvY2tlZCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2hhdmVfZ2V0Y191bmxvY2tlZCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKQEAgLTExOTk1LDcgKzEyODQ1LDcgQEAKICMgY2hlY2sgZm9yIHJlYWRsaW5lIDIuMQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcmxfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsIGluIC1scmVhZGxpbmUiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJsX2NhbGxiYWNrX2hhbmRsZXJfaW5zdGFsbCBpbiAtbHJlYWRsaW5lLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9yZWFkbGluZV9ybF9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfcmVhZGxpbmVfcmxfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtMTIwMjksNyArMTI4NzksNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NhbGxiYWNrX2hhbmRsZXJfaW5zdGFsbCIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9yZWFkbGluZV9ybF9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfcmVhZGxpbmVfcmxfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZWFkbGluZV9ybF9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwiID0geHllczsgdGhlbiA6CiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfUkxfQ0FMTEJBQ0sgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTEyMDQ1LDggKzEyODk1LDkgQEAKICAgaGF2ZV9yZWFkbGluZT15ZXMKIGVsc2UKICAgaGF2ZV9yZWFkbGluZT1ubworCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIGlmIHRlc3QgJGhhdmVfcmVhZGxpbmUgPSB5ZXMKIHRoZW4KICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTIwODAsNyArMTI5MzEsNyBAQAogIyBjaGVjayBmb3IgcmVhZGxpbmUgNC4wCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBybF9wcmVfaW5wdXRfaG9vayBpbiAtbHJlYWRsaW5lIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBybF9wcmVfaW5wdXRfaG9vayBpbiAtbHJlYWRsaW5lLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9yZWFkbGluZV9ybF9wcmVfaW5wdXRfaG9vaytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9yZWFkbGluZV9ybF9wcmVfaW5wdXRfaG9vays6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTEyMTE0LDcgKzEyOTY1LDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZWFkbGluZV9ybF9wcmVfaW5wdXRfaG9vayIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9yZWFkbGluZV9ybF9wcmVfaW5wdXRfaG9vayIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZWFkbGluZV9ybF9wcmVfaW5wdXRfaG9vayIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfcmVhZGxpbmVfcmxfcHJlX2lucHV0X2hvb2siID0geHllczsgdGhlbiA6CiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfUkxfUFJFX0lOUFVUX0hPT0sgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTEyMTI0LDcgKzEyOTc1LDcgQEAKICMgYWxzbyBpbiA0LjAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHJsX2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2sgaW4gLWxyZWFkbGluZSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcmxfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayBpbiAtbHJlYWRsaW5lLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9yZWFkbGluZV9ybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2srOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC0xMjE1OCw3ICsxMzAwOSw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcmVhZGxpbmVfcmxfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9yZWFkbGluZV9ybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2siID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2siID0geHllczsgdGhlbiA6CiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfUkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSyAxIiA+PmNvbmZkZWZzLmgKIApAQCAtMTIxNjgsNyArMTMwMTksNyBAQAogIyBjaGVjayBmb3IgcmVhZGxpbmUgNC4yCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBybF9jb21wbGV0aW9uX21hdGNoZXMgaW4gLWxyZWFkbGluZSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcmxfY29tcGxldGlvbl9tYXRjaGVzIGluIC1scmVhZGxpbmUuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NvbXBsZXRpb25fbWF0Y2hlcytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9yZWFkbGluZV9ybF9jb21wbGV0aW9uX21hdGNoZXMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC0xMjIwMiw3ICsxMzA1Myw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcmVhZGxpbmVfcmxfY29tcGxldGlvbl9tYXRjaGVzIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NvbXBsZXRpb25fbWF0Y2hlcyIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZWFkbGluZV9ybF9jb21wbGV0aW9uX21hdGNoZXMiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NvbXBsZXRpb25fbWF0Y2hlcyIgPSB4eWVzOyB0aGVuIDoKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9STF9DT01QTEVUSU9OX01BVENIRVMgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTEyMjE4LDggKzEzMDY5LDkgQEAKICAgaGF2ZV9yZWFkbGluZT15ZXMKIGVsc2UKICAgaGF2ZV9yZWFkbGluZT1ubworCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIGlmIHRlc3QgJGhhdmVfcmVhZGxpbmUgPSB5ZXMKIHRoZW4KICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTIyNDIsNyArMTMwOTQsNyBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBicm9rZW4gbmljZSgpIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBicm9rZW4gbmljZSgpLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Jyb2tlbl9uaWNlK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfYnJva2VuX25pY2UrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCkBAIC0xMjI4Myw3ICsxMzEzNSwxMCBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBicm9rZW4gcG9sbCgpIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBicm9rZW4gcG9sbCgpLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CitpZiAke2FjX2N2X2Jyb2tlbl9wb2xsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICBhY19jdl9icm9rZW5fcG9sbD1ubwogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xMjI5MSwyNyArMTMxNDYsMjEgQEAKIAogI2luY2x1ZGUgPHBvbGwuaD4KIAotaW50IG1haW4gKHZvaWQpCi0gICAgeworaW50IG1haW4oKQorewogICAgIHN0cnVjdCBwb2xsZmQgcG9sbF9zdHJ1Y3QgPSB7IDQyLCBQT0xMSU58UE9MTFBSSXxQT0xMT1VULCAwIH07CisgICAgaW50IHBvbGxfdGVzdDsKIAogICAgIGNsb3NlICg0Mik7CiAKLSAgICBpbnQgcG9sbF90ZXN0ID0gcG9sbCAoJnBvbGxfc3RydWN0LCAxLCAwKTsKLQorICAgIHBvbGxfdGVzdCA9IHBvbGwoJnBvbGxfc3RydWN0LCAxLCAwKTsKICAgICBpZiAocG9sbF90ZXN0IDwgMCkKLSAgICAgICAgewotICAgICAgICBleGl0KDApOwotICAgICAgICB9CisgICAgICAgIHJldHVybiAwOwogICAgIGVsc2UgaWYgKHBvbGxfdGVzdCA9PSAwICYmIHBvbGxfc3RydWN0LnJldmVudHMgIT0gUE9MTE5WQUwpCi0gICAgICAgIHsKLSAgICAgICAgZXhpdCgwKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgcmV0dXJuIDE7Cit9CiAKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CkBAIC0xMjMyMyw2ICsxMzE3Miw4IEBACiAgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CiBmaQogCitmaQorCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Jyb2tlbl9wb2xsIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfYnJva2VuX3BvbGwiID4mNjsgfQogaWYgdGVzdCAiJGFjX2N2X2Jyb2tlbl9wb2xsIiA9IHllcwpAQCAtMTIzMzksNyArMTMxOTAsNyBAQAogI2luY2x1ZGUgPCRhY19jdl9zdHJ1Y3RfdG0+CiAKICIKLWlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF90bV90bV96b25lIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdG1fdG1fem9uZSIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1NUUlVDVF9UTV9UTV9aT05FIDEKQEAgLTEyMzU1LDcgKzEzMjA2LDcgQEAKIGVsc2UKICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAidHpuYW1lIiAiYWNfY3ZfaGF2ZV9kZWNsX3R6bmFtZSIgIiNpbmNsdWRlIDx0aW1lLmg+CiAiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF90em5hbWUiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3R6bmFtZSIgPSB4eWVzOyB0aGVuIDoKICAgYWNfaGF2ZV9kZWNsPTEKIGVsc2UKICAgYWNfaGF2ZV9kZWNsPTAKQEAgLTEyMzY3LDcgKzEzMjE4LDcgQEAKIAogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0em5hbWUiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHR6bmFtZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl92YXJfdHpuYW1lK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfdmFyX3R6bmFtZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEyNDA2LDcgKzEzMjU3LDcgQEAKICMgY2hlY2sgdHpzZXQoMykgZXhpc3RzIGFuZCB3b3JrcyBsaWtlIHdlIGV4cGVjdCBpdCB0bwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyB0enNldCgpIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIHR6c2V0KCkuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfd29ya2luZ190enNldCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3dvcmtpbmdfdHpzZXQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCkBAIC0xMjUwMyw3ICsxMzM1NCw3IEBACiAjIExvb2sgZm9yIHN1YnNlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0dl9uc2VjIGluIHN0cnVjdCBzdGF0IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0dl9uc2VjIGluIHN0cnVjdCBzdGF0Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3N0YXRfdHZfbnNlYytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3N0YXRfdHZfbnNlYys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEyNTQwLDcgKzEzMzkxLDcgQEAKICMgTG9vayBmb3IgQlNEIHN0eWxlIHN1YnNlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0dl9uc2VjMiBpbiBzdHJ1Y3Qgc3RhdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdHZfbnNlYzIgaW4gc3RydWN0IHN0YXQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc3RhdF90dl9uc2VjMitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3N0YXRfdHZfbnNlYzIrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xMjU3Nyw3ICsxMzQyOCw3IEBACiAjIE9uIEhQL1VYIDExLjAsIG12d2RlbGNoIGlzIGEgYmxvY2sgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtdndkZWxjaCBpcyBhbiBleHByZXNzaW9uIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbXZ3ZGVsY2ggaXMgYW4gZXhwcmVzc2lvbi4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEyNjE0LDcgKzEzNDY1LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIFdJTkRPVyBoYXMgX2ZsYWdzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgV0lORE9XIGhhcyBfZmxhZ3MuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfd2luZG93X2hhc19mbGFncytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3dpbmRvd19oYXNfZmxhZ3MrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xMjY2Nyw3ICsxMzUxOCw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1VSU0VTX0lTX1RFUk1fUkVTSVpFRCAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC0xMjY5Myw3ICsxMzU0NCw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1VSU0VTX1JFU0laRV9URVJNIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTEyNzE5LDcgKzEzNTcwLDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DVVJTRVNfUkVTSVpFVEVSTSAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC0xMjc1OCwxNiArMTM2MDksOTEgQEAKICRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAlemQgcHJpbnRmKCkgZm9ybWF0IHN1cHBvcnQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICV6ZCBwcmludGYoKSBmb3JtYXQgc3VwcG9ydC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICJjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQoraWYgdGVzdCAiJGhhdmVfbG9uZ19sb25nIiA9IHllcwordGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAlbGxkIGFuZCAlbGx1IHByaW50ZigpIGZvcm1hdCBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAlbGxkIGFuZCAlbGx1IHByaW50ZigpIGZvcm1hdCBzdXBwb3J0Li4uICIgPiY2OyB9CisgIGlmICR7YWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9bm8KIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICNpbmNsdWRlIDxzdGRpby5oPgorICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzdHJpbmcuaD4KKworICAjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICNlbmRpZgorCisgIGludCBtYWluKCkKKyAgeworICAgICAgY2hhciBidWZmZXJbMjU2XTsKKworICAgICAgaWYgKHNwcmludGYoYnVmZmVyLCAiJWxsZCIsIChsb25nIGxvbmcpMTIzKSA8IDApCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBpZiAoc3RyY21wKGJ1ZmZlciwgIjEyMyIpKQorICAgICAgICAgIHJldHVybiAxOworCisgICAgICBpZiAoc3ByaW50ZihidWZmZXIsICIlbGxkIiwgKGxvbmcgbG9uZyktMTIzKSA8IDApCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBpZiAoc3RyY21wKGJ1ZmZlciwgIi0xMjMiKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgaWYgKHNwcmludGYoYnVmZmVyLCAiJWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpMTIzKSA8IDApCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBpZiAoc3RyY21wKGJ1ZmZlciwgIjEyMyIpKQorICAgICAgICAgIHJldHVybiAxOworCisgICAgICByZXR1cm4gMDsKKyAgfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9eWVzCitlbHNlCisgIGFjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdD1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdCIgPiY2OyB9CitmaQorCitpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0IiA9IHllcwordGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBQWV9GT1JNQVRfTE9OR19MT05HIFwibGxcIiIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2lmIHRlc3QgJGFjX3N5c19zeXN0ZW0gPSBEYXJ3aW4KK3RoZW4KKwlMSUJTPSIkTElCUyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAlemQgcHJpbnRmKCkgZm9ybWF0IHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICV6ZCBwcmludGYoKSBmb3JtYXQgc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oYXZlX3NpemVfdF9mb3JtYXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdD0iY3Jvc3MgLS0gYXNzdW1pbmcgeWVzIgorCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xMjgwMiwyMSArMTM3MjgsMjUgQEAKIAogICAgIHJldHVybiAwOwogfQorCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0kYXNfZWNobyAiI2RlZmluZSBQWV9GT1JNQVRfU0laRV9UIFwielwiIiA+PmNvbmZkZWZzLmgKLQorICBhY19jdl9oYXZlX3NpemVfdF9mb3JtYXQ9eWVzCiBlbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQorICBhY19jdl9oYXZlX3NpemVfdF9mb3JtYXQ9bm8KIGZpCiBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCiAgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CiBmaQogCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXZlX3NpemVfdF9mb3JtYXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oYXZlX3NpemVfdF9mb3JtYXQiID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdCIgIT0gbm8gOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFBZX0ZPUk1BVF9TSVpFX1QgXCJ6XCIiID4+Y29uZmRlZnMuaAorCitmaQogCiBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzb2NrbGVuX3QiICJhY19jdl90eXBlX3NvY2tsZW5fdCIgIgogI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKQEAgLTEyODI3LDcgKzEzNzU3LDcgQEAKICNlbmRpZgogCiAiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc29ja2xlbl90IiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc29ja2xlbl90IiA9IHh5ZXM7IHRoZW4gOgogCiBlbHNlCiAKQEAgLTEyODM2LDYgKzEzNzY2LDE0IEBACiBmaQogCiAKK2Nhc2UgJGFjX3N5c19zeXN0ZW0gaW4KK0FJWCopCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQlJPS0VOX1BJUEVfQlVGIDEiID4+Y29uZmRlZnMuaAorIDs7Citlc2FjCisKKwogCiAKIGZvciBoIGluIGAoY2QgJHNyY2RpcjtlY2hvIFB5dGhvbi90aHJlYWRfKi5oKWAKQEAgLTEyODQzLDEzICsxMzc4MSw2IEBACiAgIFRIUkVBREhFQURFUlM9IiRUSFJFQURIRUFERVJTIFwkKHNyY2RpcikvJGgiCiBkb25lCiAKLWlmIHRlc3QgJGFjX3N5c19zeXN0ZW0gPSBEYXJ3aW4KLXRoZW4KLQlMSUJTPSIkTElCUyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgotZmkKLQotCi0KIAogU1JDRElSUz0iUGFyc2VyIEdyYW1tYXIgT2JqZWN0cyBQeXRob24gTW9kdWxlcyBNYWMiCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBidWlsZCBkaXJlY3RvcmllcyIgPiY1CkBAIC0xMjg2Myw3ICsxMzc5NCw5IEBACiAkYXNfZWNobyAiZG9uZSIgPiY2OyB9CiAKICMgZ2VuZXJhdGUgb3V0cHV0IGZpbGVzCi1hY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlLnByZSBNb2R1bGVzL1NldHVwLmNvbmZpZyBNaXNjL3B5dGhvbi5wYyIKKworYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1vZHVsZXMvbGRfc29fYWl4IgogCiBjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKICMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQpAQCAtMTI5MjksMTAgKzEzODYyLDIxIEBACiAgICAgIDplbmQnID4+Y29uZmNhY2hlCiBpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCiAgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgotICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmCisgICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQogJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Ci0gICAgY2F0IGNvbmZjYWNoZSA+JGNhY2hlX2ZpbGUKKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCiAgIGVsc2UKICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKICRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQpAQCAtMTI5NDgsNiArMTM4OTIsNyBAQAogCiBhY19saWJvYmpzPQogYWNfbHRsaWJvYmpzPQorVT0KIGZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQogICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCiAgIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJwpAQCAtMTI5NjQsNyArMTM5MDksNyBAQAogCiAKIAotOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorOiAiJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30iCiBhY193cml0ZV9mYWlsPTAKIGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCiBhY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgpAQCAtMTMwNjUsNiArMTQwMTAsNyBAQAogSUZTPSIgIiIJJGFzX25sIgogCiAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorYXNfbXlzZWxmPQogY2FzZSAkMCBpbiAjKCgKICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwogICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCkBAIC0xMzExMCwxOSArMTQwNTYsMTkgQEAKICh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKIAogCi0jIGFzX2ZuX2Vycm9yIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQogIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCi0jIHNjcmlwdCB3aXRoIHN0YXR1cyAkPywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorIyBzY3JpcHQgd2l0aCBTVEFUVVMsIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KIGFzX2ZuX2Vycm9yICgpCiB7Ci0gIGFzX3N0YXR1cz0kPzsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCi0gIGlmIHRlc3QgIiQzIjsgdGhlbgotICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDIifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDEiID4mJDMKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAogICBmaQotICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDEiID4mMgorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgogICBhc19mbl9leGl0ICRhc19zdGF0dXMKIH0gIyBhc19mbl9lcnJvcgogCkBAIC0xMzMxOCw3ICsxNDI2NCw3IEBACiAgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhawogICAgIGRvbmUKICAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCi0gIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCiAKIAogfSAjIGFzX2ZuX21rZGlyX3AKQEAgLTEzMzcxLDggKzE0MzE3LDggQEAKICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgogIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KIGFjX2xvZz0iCi1UaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHB5dGhvbiAkYXNfbWUgMi42LCB3aGljaCB3YXMKLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDIuNywgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjguICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCiAgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUwpAQCAtMTM0MjcsMTcgKzE0MzczLDE3IEBACiBDb25maWd1cmF0aW9uIGhlYWRlcnM6CiAkY29uZmlnX2hlYWRlcnMKIAotUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9weXRob24tYnVncz4uIgorUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvPi4iCiAKIF9BQ0VPRgogY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBhY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgogYWNfY3NfdmVyc2lvbj0iXFwKLXB5dGhvbiBjb25maWcuc3RhdHVzIDIuNgotY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1LAorcHl0aG9uIGNvbmZpZy5zdGF0dXMgMi43Citjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjgsCiAgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgogCi1Db3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCiAKQEAgLTEzNDUzLDExICsxNDM5OSwxNiBAQAogd2hpbGUgdGVzdCAkIyAhPSAwCiBkbwogICBjYXNlICQxIGluCi0gIC0tKj0qKQorICAtLSo9PyopCiAgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKICAgICBhY19vcHRhcmc9YGV4cHIgIlgkMSIgOiAnWFtePV0qPVwoLipcKSdgCiAgICAgYWNfc2hpZnQ9OgogICAgIDs7CisgIC0tKj0pCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9CisgICAgYWNfc2hpZnQ9OgorICAgIDs7CiAgICopCiAgICAgYWNfb3B0aW9uPSQxCiAgICAgYWNfb3B0YXJnPSQyCkBAIC0xMzQ3OSw2ICsxNDQzMCw3IEBACiAgICAgJGFjX3NoaWZ0CiAgICAgY2FzZSAkYWNfb3B0YXJnIGluCiAgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAnJykgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgZmlsZSBhcmd1bWVudCIgOzsKICAgICBlc2FjCiAgICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIKICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKQEAgLTEzNDkxLDcgKzE0NDQzLDcgQEAKICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKICAgLS1oZSB8IC0taCkKICAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgotICAgIGFzX2ZuX2Vycm9yICJhbWJpZ3VvdXMgb3B0aW9uOiBcYCQxJworICAgIGFzX2ZuX2Vycm9yICQ/ICJhbWJpZ3VvdXMgb3B0aW9uOiBcYCQxJwogVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iOzsKICAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCiAgICAgJGFzX2VjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKQEAgLTEzNTAwLDcgKzE0NDUyLDcgQEAKICAgICBhY19jc19zaWxlbnQ9OiA7OwogCiAgICMgVGhpcyBpcyBhbiBlcnJvci4KLSAgLSopIGFzX2ZuX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJworICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJDEnCiBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKIAogICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlnX3RhcmdldHMgIiAkMSIKQEAgLTEzNTU3LDggKzE0NTA5LDEwIEBACiAgICAgIk1hYy9SZXNvdXJjZXMvYXBwL0luZm8ucGxpc3QiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFjL1Jlc291cmNlcy9hcHAvSW5mby5wbGlzdCIgOzsKICAgICAiTWFrZWZpbGUucHJlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlLnByZSIgOzsKICAgICAiTW9kdWxlcy9TZXR1cC5jb25maWciKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTW9kdWxlcy9TZXR1cC5jb25maWciIDs7CisgICAgIk1pc2MvcHl0aG9uLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1pc2MvcHl0aG9uLnBjIiA7OworICAgICJNb2R1bGVzL2xkX3NvX2FpeCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNb2R1bGVzL2xkX3NvX2FpeCIgOzsKIAotICAqKSBhc19mbl9lcnJvciAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKKyAgKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgYXJndW1lbnQ6IFxgJGFjX2NvbmZpZ190YXJnZXQnIiAiJExJTkVOTyIgNTs7CiAgIGVzYWMKIGRvbmUKIApAQCAtMTM1ODAsOSArMTQ1MzQsMTAgQEAKICMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgogJGRlYnVnIHx8CiB7Ci0gIHRtcD0KKyAgdG1wPSBhY190bXA9CiAgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/Ci0gIHsgdGVzdCAteiAiJHRtcCIgfHwgdGVzdCAhIC1kICIkdG1wIiB8fCBybSAtZnIgIiR0bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisgIDogIiR7YWNfdG1wOj0kdG1wfSIKKyAgeyB0ZXN0ICEgLWQgIiRhY190bXAiIHx8IHJtIC1mciAiJGFjX3RtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKICcgMAogICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQogfQpAQCAtMTM1OTAsMTIgKzE0NTQ1LDEzIEBACiAKIHsKICAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCi0gIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCisgIHRlc3QgLWQgIiR0bXAiCiB9ICB8fAogewogICB0bXA9Li9jb25mJCQtJFJBTkRPTQogICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKLX0gfHwgYXNfZm5fZXJyb3IgImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iICIkTElORU5PIiA1Cit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorYWNfdG1wPSR0bXAKIAogIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgogIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KQEAgLTEzNjEyLDEyICsxNDU2OCwxMiBAQAogZmkKIGFjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKIGlmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCi0gIGFjX2NzX2F3a19jcj0nXHInCisgIGFjX2NzX2F3a19jcj0nXFxyJwogZWxzZQogICBhY19jc19hd2tfY3I9JGFjX2NyCiBmaQogCi1lY2hvICdCRUdJTiB7JyA+IiR0bXAvc3ViczEuYXdrIiAmJgorZWNobyAnQkVHSU4geycgPiIkYWNfdG1wL3N1YnMxLmF3ayIgJiYKIF9BQ0VPRgogCiAKQEAgLTEzNjI2LDE4ICsxNDU4MiwxOCBAQAogICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCiAgIGVjaG8gIl9BQ0VPRiIKIH0gPmNvbmYkJHN1YnMuc2ggfHwKLSAgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQotYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICckJ2AKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2AKIGFjX2RlbGltPSclIV8hIyAnCiBmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KICAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKLSAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQogCiAgIGFjX2RlbGltX249YHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5hd2sgfCBncmVwIC1jIFhgCiAgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCiAgICAgYnJlYWsKICAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KLSAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQogICBlbHNlCiAgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKICAgZmkKQEAgLTEzNjQ1LDcgKzE0NjAxLDcgQEAKIHJtIC1mIGNvbmYkJHN1YnMuc2gKIAogY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi1jYXQgPj4iXCR0bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCiBfQUNFT0YKIHNlZCAtbiAnCiBoCkBAIC0xMzY5Myw3ICsxNDY0OSw3IEBACiBybSAtZiBjb25mJCRzdWJzLmF3awogY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBfQUNBV0sKLWNhdCA+PiJcJHRtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgogICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXldID0gMQogICBGUyA9ICIHIgogCkBAIC0xMzcyNSwyMSArMTQ2ODEsMjkgQEAKICAgc2VkICJzLyRhY19jclwkLy87IHMvJGFjX2NyLyRhY19jc19hd2tfY3IvZyIKIGVsc2UKICAgY2F0Ci1maSA8ICIkdG1wL3N1YnMxLmF3ayIgPiAiJHRtcC9zdWJzLmF3ayIgXAotICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitmaSA8ICIkYWNfdG1wL3N1YnMxLmF3ayIgPiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CiBfQUNFT0YKIAotIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSAkKHNyY2RpciksCi0jICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKICMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CiAjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCiBpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgotICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKLXMvOipcJChzcmNkaXIpOiovOi8KLXMvOipcJHtzcmNkaXJ9OiovOi8KLXMvOipAc3JjZGlyQDoqLzovCi1zL15cKFtePV0qPVsJIF0qXCk6Ki9cMS8KKyAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPVsJIF0qL3sKK2gKK3MvLy8KK3MvXi86Lworcy9bCSBdKiQvOi8KK3MvOlwkKHNyY2Rpcik6LzovZworcy86XCR7c3JjZGlyfTovOi9nCitzLzpAc3JjZGlyQDovOi9nCitzL146Ki8vCiBzLzoqJC8vCit4CitzL1woPVsJIF0qXCkuKi9cMS8KK0cKK3MvXG4vLwogcy9eW149XSo9WwkgXSokLy8KIH0nCiBmaQpAQCAtMTM3NTEsNyArMTQ3MTUsNyBAQAogIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19IRUFERVJTLgogIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBNYWtlZmlsZScuCiBpZiB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiOyB0aGVuCi1jYXQgPiIkdG1wL2RlZmluZXMuYXdrIiA8PFxfQUNBV0sgfHwKK2NhdCA+IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAogQkVHSU4gewogX0FDRU9GCiAKQEAgLTEzNzYzLDExICsxNDcyNywxMSBAQAogIyBoYW5kbGluZyBvZiBsb25nIGxpbmVzLgogYWNfZGVsaW09JyUhXyEjICcKIGZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSA6OyBkbwotICBhY190PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKLSAgaWYgdGVzdCAteiAiJGFjX3QiOyB0aGVuCisgIGFjX3R0PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKyAgaWYgdGVzdCAteiAiJGFjX3R0IjsgdGhlbgogICAgIGJyZWFrCiAgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBtYWtlICRDT05GSUdfSEVBREVSUyIgIiRMSU5FTk8iIDUKKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQogICBlbHNlCiAgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKICAgZmkKQEAgLTEzODUyLDcgKzE0ODE2LDcgQEAKIF9BQ0FXSwogX0FDRU9GCiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0gIGFzX2ZuX2Vycm9yICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBoZWFkZXJzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKIGZpICMgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIgogCiAKQEAgLTEzODY1LDcgKzE0ODI5LDcgQEAKICAgZXNhYwogICBjYXNlICRhY19tb2RlJGFjX3RhZyBpbgogICA6W0ZITF0qOiopOzsKLSAgOkwqIHwgOkMqOiopIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHRhZyBcYCRhY190YWcnIiAiJExJTkVOTyIgNTs7CisgIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OwogICA6W0ZIXS0pIGFjX3RhZz0tOi07OwogICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OwogICBlc2FjCkBAIC0xMzg4NCw3ICsxNDg0OCw3IEBACiAgICAgZm9yIGFjX2YKICAgICBkbwogICAgICAgY2FzZSAkYWNfZiBpbgotICAgICAgLSkgYWNfZj0iJHRtcC9zdGRpbiI7OworICAgICAgLSkgYWNfZj0iJGFjX3RtcC9zdGRpbiI7OwogICAgICAgKikgIyBMb29rIGZvciB0aGUgZmlsZSBmaXJzdCBpbiB0aGUgYnVpbGQgdHJlZSwgdGhlbiBpbiB0aGUgc291cmNlIHRyZWUKIAkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCiAJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCkBAIC0xMzg5Myw3ICsxNDg1Nyw3IEBACiAJICAgW1xcLyRdKikgZmFsc2U7OwogCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKIAkgICBlc2FjIHx8Ci0JICAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7CisJICAgYXNfZm5fZXJyb3IgMSAiY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogXGAkYWNfZiciICIkTElORU5PIiA1OzsKICAgICAgIGVzYWMKICAgICAgIGNhc2UgJGFjX2YgaW4gKlwnKikgYWNfZj1gJGFzX2VjaG8gIiRhY19mIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7IGVzYWMKICAgICAgIGFzX2ZuX2FwcGVuZCBhY19maWxlX2lucHV0cyAiICckYWNfZiciCkBAIC0xMzkxOSw4ICsxNDg4Myw4IEBACiAgICAgZXNhYwogCiAgICAgY2FzZSAkYWNfdGFnIGluCi0gICAgKjotOiogfCAqOi0pIGNhdCA+IiR0bXAvc3RkaW4iIFwKLSAgICAgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OworICAgICo6LToqIHwgKjotKSBjYXQgPiIkYWNfdG1wL3N0ZGluIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKICAgICBlc2FjCiAgICAgOzsKICAgZXNhYwpAQCAtMTQwNTAsMjMgKzE1MDE0LDI0IEBACiBzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CiAkYWNfZGF0YXJvb3RkaXJfaGFjawogIgotZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIgPiR0bXAvb3V0IFwKLSAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CitldmFsIHNlZCBcIlwkYWNfc2VkX2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfCAkQVdLIC1mICIkYWNfdG1wL3N1YnMuYXdrIiBcCisgID4kYWNfdG1wL291dCB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKIAogdGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKLSAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKLSAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiRhY190bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnIFwKKyAgICAgICIkYWNfdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJwotd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiY1Cit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mNQogJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCi13aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQuIiA+JjI7fQord2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjI7fQogCi0gIHJtIC1mICIkdG1wL3N0ZGluIgorICBybSAtZiAiJGFjX3RtcC9zdGRpbiIKICAgY2FzZSAkYWNfZmlsZSBpbgotICAtKSBjYXQgIiR0bXAvb3V0IiAmJiBybSAtZiAiJHRtcC9vdXQiOzsKLSAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJHRtcC9vdXQiICIkYWNfZmlsZSI7OworICAtKSBjYXQgIiRhY190bXAvb3V0IiAmJiBybSAtZiAiJGFjX3RtcC9vdXQiOzsKKyAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJGFjX3RtcC9vdXQiICIkYWNfZmlsZSI7OwogICBlc2FjIFwKLSAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogIDs7CiAgIDpIKQogICAjCkBAIC0xNDA3NSwyNyArMTUwNDAsMzIgQEAKICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgogICAgIHsKICAgICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAotICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJHRtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiCi0gICAgfSA+IiR0bXAvY29uZmlnLmgiIFwKLSAgICAgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQotICAgIGlmIGRpZmYgIiRhY19maWxlIiAiJHRtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKyAgICB9ID4iJGFjX3RtcC9jb25maWcuaCIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkYWNfdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKICRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KICAgICBlbHNlCiAgICAgICBybSAtZiAiJGFjX2ZpbGUiCi0gICAgICBtdiAiJHRtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCi0JfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgICBtdiAiJGFjX3RtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CiAgICAgZmkKICAgZWxzZQogICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAotICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJHRtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKLSAgICAgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKICAgZmkKICA7OwogCiAKICAgZXNhYwogCisKKyAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCisgICAgIk1vZHVsZXMvbGRfc29fYWl4IjpGKSBjaG1vZCAreCBNb2R1bGVzL2xkX3NvX2FpeCA7OworCisgIGVzYWMKIGRvbmUgIyBmb3IgYWNfdGFnCiAKIApAQCAtMTQxMDQsNyArMTUwNzQsNyBAQAogYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKIAogdGVzdCAkYWNfd3JpdGVfZmFpbCA9IDAgfHwKLSAgYXNfZm5fZXJyb3IgIndyaXRlIGZhaWx1cmUgY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisgIGFzX2ZuX2Vycm9yICQ/ICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQogCiAKICMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KQEAgLTE0MTI1LDcgKzE1MDk1LDcgQEAKICAgZXhlYyA1Pj5jb25maWcubG9nCiAgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCiAgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgotICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0ICQ/CisgICRhY19jc19zdWNjZXNzIHx8IGFzX2ZuX2V4aXQgMQogZmkKIGlmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyIgJiYgdGVzdCAiJGVuYWJsZV9vcHRpb25fY2hlY2tpbmciICE9IG5vOyB0aGVuCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1CmRpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KaW5kZXggZjNkMzRmMi4uZDA4MjE5MSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmluCisrKyBiL2NvbmZpZ3VyZS5pbgpAQCAtMSwxNyArMSwyNiBAQAogZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBkbmwgKiBQbGVhc2UgcnVuIGF1dG9yZWNvbmYgdG8gdGVzdCB5b3VyIGNoYW5nZXMhICoKIGRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotZG5sIE5PVEU6IGF1dG9jb25mIDIuNjQgZG9lc24ndCBzZWVtIHRvIHdvcmsgKHVzZSAyLjYxKS4KIAogIyBTZXQgVkVSU0lPTiBzbyB3ZSBvbmx5IG5lZWQgdG8gZWRpdCBpbiBvbmUgcGxhY2UgKGkuZS4sIGhlcmUpCi1tNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDIuNikKK200X2RlZmluZShQWVRIT05fVkVSU0lPTiwgMi43KQorCitBQ19QUkVSRVEoMi42NSkKIAogQUNfUkVWSVNJT04oJFJldmlzaW9uJCkKLUFDX1BSRVJFUSgyLjYxKQotQUNfSU5JVChweXRob24sIFBZVEhPTl9WRVJTSU9OLCBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHl0aG9uLWJ1Z3MpCitBQ19JTklUKHB5dGhvbiwgUFlUSE9OX1ZFUlNJT04sIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvKQogQUNfQ09ORklHX1NSQ0RJUihbSW5jbHVkZS9vYmplY3QuaF0pCiBBQ19DT05GSUdfSEVBREVSKHB5Y29uZmlnLmgpCiAKK2RubCBFbnN1cmUgdGhhdCBpZiBwcmVmaXggaXMgc3BlY2lmaWVkLCBpdCBkb2VzIG5vdCBlbmQgaW4gYSBzbGFzaC4gSWYKK2RubCBpdCBkb2VzLCB3ZSBnZXQgcGF0aCBuYW1lcyBjb250YWluaW5nICcvLycgd2hpY2ggaXMgYm90aCB1Z2x5IGFuZAorZG5sIGNhbiBjYXVzZSB0cm91YmxlLgorCitkbmwgTGFzdCBzbGFzaCBzaG91bGRuJ3QgYmUgc3RyaXBwZWQgaWYgcHJlZml4PS8KK2lmIHRlc3QgIiRwcmVmaXgiICE9ICIvIjsgdGhlbgorICAgIHByZWZpeD1gZWNobyAiJHByZWZpeCIgfCBzZWQgLWUgJ3MvXC8kLy9nJ2AKK2ZpICAgIAorCiBkbmwgVGhpcyBpcyBmb3Igc3R1ZmYgdGhhdCBhYnNvbHV0ZWx5IG11c3QgZW5kIHVwIGluIHB5Y29uZmlnLmguCiBkbmwgUGxlYXNlIHVzZSBweXBvcnQuaCBpbnN0ZWFkLCBpZiBwb3NzaWJsZS4KIEFIX1RPUChbCkBAIC03MSw3ICs4MCw3IEBACiAKIEFDX01TR19DSEVDS0lORyhbZm9yIC0tZW5hYmxlLXVuaXZlcnNhbHNka10pCiBBQ19BUkdfRU5BQkxFKHVuaXZlcnNhbHNkaywKLQlBQ19IRUxQX1NUUklORygtLWVuYWJsZS11bml2ZXJzYWxzZGtAPDpAPVNES0RJUkA6PkAsIEJ1aWxkIGFnYWluc3QgTWFjIE9TIFggMTAuNHUgU0RLIChwcGMvaTM4NikpLAorCUFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS11bml2ZXJzYWxzZGtAPDpAPVNES0RJUkA6PkBdLCBbQnVpbGQgYWdhaW5zdCBNYWMgT1MgWCAxMC40dSBTREsgKHBwYy9pMzg2KV0pLAogWwogCWNhc2UgJGVuYWJsZXZhbCBpbgogCXllcykKQEAgLTExMiwxMCArMTIxLDkgQEAKIAogVU5JVkVSU0FMX0FSQ0hTPSIzMi1iaXQiCiBBQ19TVUJTVChMSVBPXzMyQklUX0ZMQUdTKQotQUNfU1VCU1QoTElQT182NEJJVF9GTEFHUykKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXVuaXZlcnNhbC1hcmNocykKIEFDX0FSR19XSVRIKHVuaXZlcnNhbC1hcmNocywKLSAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtdW5pdmVyc2FsLWFyY2hzPUFSQ0gsIHNlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIikpLAorICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtdW5pdmVyc2FsLWFyY2hzPUFSQ0hdLCBbc2VsZWN0IGFyY2hpdGVjdHVyZXMgZm9yIHVuaXZlcnNhbCBidWlsZCAoIjMyLWJpdCIsICI2NC1iaXQiLCAiMy13YXkiLCAiaW50ZWwiIG9yICJhbGwiKV0pLAogWwogCUFDX01TR19SRVNVTFQoJHdpdGh2YWwpCiAJVU5JVkVSU0FMX0FSQ0hTPSIkd2l0aHZhbCIKQEAgLTEzMiw4ICsxNDAsOCBAQAogCiAKIEFDX0FSR19XSVRIKGZyYW1ld29yay1uYW1lLAotICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtZnJhbWV3b3JrLW5hbWU9RlJBTUVXT1JLLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBhbiBhbHRlcm5hdGUgbmFtZSBvZiB0aGUgZnJhbWV3b3JrIGJ1aWx0IHdpdGggLS1lbmFibGUtZnJhbWV3b3JrKSwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1mcmFtZXdvcmstbmFtZT1GUkFNRVdPUktdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3BlY2lmeSBhbiBhbHRlcm5hdGUgbmFtZSBvZiB0aGUgZnJhbWV3b3JrIGJ1aWx0IHdpdGggLS1lbmFibGUtZnJhbWV3b3JrXSksCiBbCiAgICAgaWYgdGVzdCAiJHtlbmFibGVfZnJhbWV3b3JrfSI7IHRoZW4KIAkgICAgOgpAQCAtMTUwLDcgKzE1OCw3IEBACiBdKQogZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKIEFDX0FSR19FTkFCTEUoZnJhbWV3b3JrLAotICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLWVuYWJsZS1mcmFtZXdvcmtAPDpAPUlOU1RBTExESVJAOj5ALCBCdWlsZCAoTWFjT1NYfERhcndpbikgZnJhbWV3b3JrKSwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZyYW1ld29ya0A8OkA9SU5TVEFMTERJUkA6PkBdLCBbQnVpbGQgKE1hY09TWHxEYXJ3aW4pIGZyYW1ld29ya10pLAogWwogCWNhc2UgJGVuYWJsZXZhbCBpbgogCXllcykgCkBAIC0xNzQsMjYgKzE4Miw1NSBAQAogCQllbmFibGVfZnJhbWV3b3JrPQogCQk7OwogCSopCi0JCVBZVEhPTkZSQU1FV09SS1BSRUZJWD0kZW5hYmxldmFsCisJCVBZVEhPTkZSQU1FV09SS1BSRUZJWD0iJHtlbmFibGV2YWx9IgogCQlQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSPSRQWVRIT05GUkFNRVdPUktQUkVGSVgvJFBZVEhPTkZSQU1FV09SS0RJUgogCQlGUkFNRVdPUktJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUiCiAJCUZSQU1FV09SS0FMVElOU1RBTExGSVJTVD0iZnJhbWV3b3JraW5zdGFsbHN0cnVjdHVyZSBiaW5pbnN0YWxsIG1hbmluc3RhbGwiCi0JCWNhc2UgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgaW4KLQkJYWxsfDMtd2F5fGludGVsKQotCQkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHM0d2F5IGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHM0d2F5IgotCQkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHM0d2F5IGZyYW1ld29ya2FsdGluc3RhbGx1bml4dG9vbHM0d2F5IgotCQkJOzsKLQkJKikKLQkJCUZSQU1FV09SS0lOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHMiCi0JCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgotCQkJOzsKLQkJZXNhYworCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgorCiAJCWVsc2UKIAkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHtwcmVmaXh9IgogCQlmaQorCisJCWNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKwkJL1N5c3RlbSopCisJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKKwkJCWlmIHRlc3QgIiR7cHJlZml4fSIgPSAiTk9ORSIgOyB0aGVuCisJCQkJIyBTZWUgYmVsb3cKKwkJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9Ii91c3IiCisJCQlmaQorCQkJOzsKKworCQkvTGlicmFyeSopCisJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKKwkJCTs7CisKKwkJKi9MaWJyYXJ5L0ZyYW1ld29ya3MpCisJCQlNRElSPSJgZGlybmFtZSAiJHtlbmFibGV2YWx9ImAiCisJCQlNRElSPSJgZGlybmFtZSAiJHtNRElSfSJgIgorCQkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9IiR7TURJUn0vQXBwbGljYXRpb25zIgorCisJCQlpZiB0ZXN0ICIke3ByZWZpeH0iID0gIk5PTkUiOyB0aGVuCisJCQkJIyBVc2VyIGhhc24ndCBzcGVjaWZpZWQgdGhlIAorCQkJCSMgLS1wcmVmaXggb3B0aW9uLCBidXQgd2FudHMgdG8gaW5zdGFsbAorCQkJCSMgdGhlIGZyYW1ld29yayBpbiBhIG5vbi1kZWZhdWx0IGxvY2F0aW9uLAorCQkJCSMgZW5zdXJlIHRoYXQgdGhlIGNvbXBhdGliaWxpdHkgbGlua3MgZ2V0CisJCQkJIyBpbnN0YWxsZWQgcmVsYXRpdmUgdG8gdGhhdCBwcmVmaXggYXMgd2VsbAorCQkJCSMgaW5zdGVhZCBvZiBpbiAvdXNyL2xvY2FsLgorCQkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHtNRElSfSIKKwkJCWZpCisJCQk7OworCisJCSopCisJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKKwkJCTs7CisJCWVzYWMKKwogCQlwcmVmaXg9JFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIvVmVyc2lvbnMvJFZFUlNJT04KIAogCQkjIEFkZCBmaWxlcyBmb3IgTWFjIHNwZWNpZmljIGNvZGUgdG8gdGhlIGxpc3Qgb2Ygb3V0cHV0CkBAIC0yMjAsMTEgKzI1Nyw2IEBACiAJZmkKIAllbmFibGVfZnJhbWV3b3JrPQogCi0JaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiAKLQl0aGVuCi0JCUZSQU1FV09SS0lOU1RBTExMQVNUPXVwZGF0ZTR3YXl1bml2ZXJzYWwKLQkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9dXBkYXRlNHdheXVuaXZlcnNhbAotCWZpCiBdKQogQUNfU1VCU1QoUFlUSE9ORlJBTUVXT1JLKQogQUNfU1VCU1QoUFlUSE9ORlJBTUVXT1JLSURFTlRJRklFUikKQEAgLTIzNiwxMCArMjY4LDExIEBACiBBQ19TVUJTVChGUkFNRVdPUktBTFRJTlNUQUxMRklSU1QpCiBBQ19TVUJTVChGUkFNRVdPUktBTFRJTlNUQUxMTEFTVCkKIEFDX1NVQlNUKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkKK0FDX1NVQlNUKEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYKQogCiAjI0FDX0FSR19XSVRIKGR5bGQsCi0jIyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1keWxkLAotIyMgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgKE9wZW5TdGVwfFJoYXBzb2R5KSBkeW5hbWljIGxpbmtlcikpCisjIyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZHlsZF0sCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtVc2UgKE9wZW5TdGVwfFJoYXBzb2R5KSBkeW5hbWljIGxpbmtlcl0pKQogIyMKICMgU2V0IG5hbWUgZm9yIG1hY2hpbmUtZGVwZW5kZW50IGxpYnJhcnkgZmlsZXMKIEFDX1NVQlNUKE1BQ0hERVApCkBAIC0yNDcsNyArMjgwLDcgQEAKIGlmIHRlc3QgLXogIiRNQUNIREVQIgogdGhlbgogCWFjX3N5c19zeXN0ZW09YHVuYW1lIC1zYAotCWlmIHRlc3QgIiRhY19zeXNfc3lzdGVtIiA9ICJBSVgiIC1vICIkYWNfc3lzX3N5c3RlbSIgPSAiTW9udGVyZXk2NCIgXAorCWlmIHRlc3QgIiRhY19zeXNfc3lzdGVtIiA9ICJBSVgiIFwKIAktbyAiJGFjX3N5c19zeXN0ZW0iID0gIlVuaXhXYXJlIiAtbyAiJGFjX3N5c19zeXN0ZW0iID0gIk9wZW5VTklYIjsgdGhlbgogCQlhY19zeXNfcmVsZWFzZT1gdW5hbWUgLXZgCiAJZWxzZQpAQCAtMzAyLDkgKzMzNSwxMiBAQAogICAjIE1hcmMgUmVjaHQKICAgTmV0QlNELzEuNSB8IE5ldEJTRC8xLjUuKiB8IE5ldEJTRC8xLjYgfCBOZXRCU0QvMS42LiogfCBOZXRCU0QvMS42QDw6QEEtU0A6PkApCiAgICAgZGVmaW5lX3hvcGVuX3NvdXJjZT1ubzs7Ci0gICMgT24gU29sYXJpcyAyLjYsIHN5cy93YWl0LmggaXMgaW5jb25zaXN0ZW50IGluIHRoZSB1c2FnZQotICAjIG9mIHVuaW9uIF9fP3NpZ3ZhbC4gUmVwb3J0ZWQgYnkgU3R1YXJ0IEJpc2hvcC4KLSAgU3VuT1MvNS42KQorICAjIEZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIFNvbGFyaXMsIF9YT1BFTl9TT1VSQ0UgaXMgbm90IHNvIG11Y2ggYQorICAjIHJlcXVlc3QgdG8gZW5hYmxlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgc3RhbmRhcmQgYXMgYSByZXF1ZXN0CisgICMgdG8gZGlzYWJsZSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzdGFuZGFyZC4gIFRoZSBiZXN0IHdheQorICAjIGZvciBQeXRob24gdG8gdXNlIFNvbGFyaXMgaXMgc2ltcGx5IHRvIGxlYXZlIF9YT1BFTl9TT1VSQ0Ugb3V0CisgICMgZW50aXJlbHkgYW5kIGRlZmluZSBfX0VYVEVOU0lPTlNfXyBpbnN0ZWFkLgorICBTdW5PUy8qKQogICAgIGRlZmluZV94b3Blbl9zb3VyY2U9bm87OwogICAjIE9uIFVuaXhXYXJlIDcsIHVfbG9uZyBpcyBuZXZlciBkZWZpbmVkIHdpdGggX1hPUEVOX1NPVVJDRSwKICAgIyBidXQgdXNlZCBpbiAvdXNyL2luY2x1ZGUvbmV0aW5ldC90Y3AuaC4gUmVwb3J0ZWQgYnkgVGltIFJpY2UuCkBAIC0zNTAsMzUgKzM4NiwxNSBAQAogCiBpZiB0ZXN0ICRkZWZpbmVfeG9wZW5fc291cmNlID0geWVzCiB0aGVuCi0gICMgT24gU29sYXJpcyB3LyBnKysgaXQgYXBwZWFycyB0aGF0IF9YT1BFTl9TT1VSQ0UgaGFzIHRvIGJlCi0gICMgZGVmaW5lZCBwcmVjaXNlbHkgYXMgZysrIGRlZmluZXMgaXQKLSAgIyBGdXJ0aGVybW9yZSwgb24gU29sYXJpcyAxMCwgWFBHNiByZXF1aXJlcyB0aGUgdXNlIG9mIGEgQzk5Ci0gICMgY29tcGlsZXIKLSAgY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KLSAgICBTdW5PUy81Ljh8U3VuT1MvNS45fFN1bk9TLzUuMTApCi0gICAgICBBQ19ERUZJTkUoX1hPUEVOX1NPVVJDRSwgNTAwLCAKLSAgICAgICAgICAgICAgICBEZWZpbmUgdG8gdGhlIGxldmVsIG9mIFgvT3BlbiB0aGF0IHlvdXIgc3lzdGVtIHN1cHBvcnRzKQotICAgICAgOzsKLSAgICAqKQotICAgICAgQUNfREVGSU5FKF9YT1BFTl9TT1VSQ0UsIDYwMCwgCi0gICAgICAgICAgICAgICAgRGVmaW5lIHRvIHRoZSBsZXZlbCBvZiBYL09wZW4gdGhhdCB5b3VyIHN5c3RlbSBzdXBwb3J0cykKLSAgICAgIDs7Ci0gIGVzYWMKKyAgQUNfREVGSU5FKF9YT1BFTl9TT1VSQ0UsIDYwMCwgCisgICAgICAgICAgICBEZWZpbmUgdG8gdGhlIGxldmVsIG9mIFgvT3BlbiB0aGF0IHlvdXIgc3lzdGVtIHN1cHBvcnRzKQogCiAgICMgT24gVHJ1NjQgVW5peCA0LjBGLCBkZWZpbmluZyBfWE9QRU5fU09VUkNFIGFsc28gcmVxdWlyZXMKICAgIyBkZWZpbml0aW9uIG9mIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgYW5kIF9QT1NJWF9DX1NPVVJDRSwgb3IgZWxzZQogICAjIHNldmVyYWwgQVBJcyBhcmUgbm90IGRlY2xhcmVkLiBTaW5jZSB0aGlzIGlzIGFsc28gbmVlZGVkIGluIHNvbWUKICAgIyBjYXNlcyBmb3IgSFAtVVgsIHdlIGRlZmluZSBpdCBnbG9iYWxseS4KLSAgIyBleGNlcHQgZm9yIFNvbGFyaXMgMTAsIHdoZXJlIGl0IG11c3Qgbm90IGJlIGRlZmluZWQsIAotICAjIGFzIGl0IGltcGxpZXMgWFBHNC4yCi0gIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCi0gICAgU3VuT1MvNS4xMCkKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIEFDX0RFRklORShfWE9QRU5fU09VUkNFX0VYVEVOREVELCAxLAotICAgICAgCQlEZWZpbmUgdG8gYWN0aXZhdGUgVW5peDk1LWFuZC1lYXJsaWVyIGZlYXR1cmVzKQotICAgICAgOzsKLSAgZXNhYworICBBQ19ERUZJTkUoX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgMSwKKyAgIAkgICAgRGVmaW5lIHRvIGFjdGl2YXRlIFVuaXg5NS1hbmQtZWFybGllciBmZWF0dXJlcykKIAogICBBQ19ERUZJTkUoX1BPU0lYX0NfU09VUkNFLCAyMDAxMTJMLCBEZWZpbmUgdG8gYWN0aXZhdGUgZmVhdHVyZXMgZnJvbSBJRUVFIFN0ZHMgMTAwMy4xLTIwMDEpCiAgIApAQCAtNDQ1LDcgKzQ2MSw3IEBACiAjIG9uIHRoYXQgZmlkZGxlcyB3aXRoIE9QVCBhbmQgQkFTRUNGTEFHUz8KIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRob3V0LWdjYykKIEFDX0FSR19XSVRIKGdjYywKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aG91dC1nY2MsbmV2ZXIgdXNlIGdjYyksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRob3V0LWdjY10sIFtuZXZlciB1c2UgZ2NjXSksCiBbCiAJY2FzZSAkd2l0aHZhbCBpbgogCW5vKQlDQz0ke0NDOi1jY30KQEAgLTQ1Niw3ICs0NzIsNyBAQAogCQl3aXRob3V0X2djYz0kd2l0aHZhbDs7CiAJZXNhY10sIFsKIAljYXNlICRhY19zeXNfc3lzdGVtIGluCi0JQUlYKikgICBDQz1jY19yCisJQUlYKikgICBDQz0ke0NDOi14bGNfcn0KIAkJd2l0aG91dF9nY2M9OzsKIAlCZU9TKikKIAkJY2FzZSAkQkVfSE9TVF9DUFUgaW4KQEAgLTQ3OSw5ICs0OTUsNiBAQAogCQlBUj0iXCQoc3JjZGlyKS9Nb2R1bGVzL2FyX2Jlb3MiCiAJCVJBTkxJQj06CiAJCTs7Ci0gICAgTW9udGVyZXkqKQotICAgICAgICBSQU5MSUI9OgotICAgICAgICB3aXRob3V0X2djYz07OwogCSopCXdpdGhvdXRfZ2NjPW5vOzsKIAllc2FjXSkKIEFDX01TR19SRVNVTFQoJHdpdGhvdXRfZ2NjKQpAQCAtNDkzLDEzICs1MDYsMjAgQEAKIChpdCBpcyBhbHNvIGEgZ29vZCBpZGVhIHRvIGRvICdtYWtlIGNsZWFuJyBiZWZvcmUgY29tcGlsaW5nKV0pCiBmaQogCisjIElmIHRoZSB1c2VyIHNldCBDRkxBR1MsIHVzZSB0aGlzIGluc3RlYWQgb2YgdGhlIGF1dG9tYXRpY2FsbHkKKyMgZGV0ZXJtaW5lZCBzZXR0aW5nCitwcmVzZXRfY2ZsYWdzPSIkQ0ZMQUdTIgogQUNfUFJPR19DQworaWYgdGVzdCAhIC16ICIkcHJlc2V0X2NmbGFncyIKK3RoZW4KKwlDRkxBR1M9JHByZXNldF9jZmxhZ3MKK2ZpCiAKIEFDX1NVQlNUKENYWCkKIEFDX1NVQlNUKE1BSU5DQykKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWN4eC1tYWluPTxjb21waWxlcj4pCiBBQ19BUkdfV0lUSChjeHhfbWFpbiwKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtY3h4LW1haW49PGNvbXBpbGVyPl0sCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWN4eC1tYWluPTxjb21waWxlcj5dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBpbGUgbWFpbigpIGFuZCBsaW5rIHB5dGhvbiBleGVjdXRhYmxlIHdpdGggQysrIGNvbXBpbGVyXSksCiBbCiAJCkBAIC01NTEsNyArNTcxLDcgQEAKIAogCiAjIGNoZWNrcyBmb3IgVU5JWCB2YXJpYW50cyB0aGF0IHNldCBDIHByZXByb2Nlc3NvciB2YXJpYWJsZXMKLUFDX0FJWAorQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCiAKICMgQ2hlY2sgZm9yIHVuc3VwcG9ydGVkIHN5c3RlbXMKIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCkBAIC01NjQsNyArNTg0LDcgQEAKIEFDX0VYRUVYVAogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtc3VmZml4KQogQUNfQVJHX1dJVEgoc3VmZml4LAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLXN1ZmZpeD0uZXhlLCBzZXQgZXhlY3V0YWJsZSBzdWZmaXgpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zdWZmaXg9LmV4ZV0sIFtzZXQgZXhlY3V0YWJsZSBzdWZmaXhdKSwKIFsKIAljYXNlICR3aXRodmFsIGluCiAJbm8pCUVYRUVYVD07OwpAQCAtNjAzLDEwICs2MjMsNiBAQAogICAgIGNhc2UgJENDIGluCiAgICAgY2N8Ki9jYykgQ0M9IiRDQyAtQWUiOzsKICAgICBlc2FjOzsKLU1vbnRlcmV5KikKLSAgICBjYXNlICRDQyBpbgotICAgIGNjKSBDQz0iJENDIC1XbCwtQmV4cG9ydCI7OwotICAgIGVzYWM7OwogU3VuT1MqKQogICAgICMgU29tZSBmdW5jdGlvbnMgaGF2ZSBhIHByb3RvdHlwZSBvbmx5IHdpdGggdGhhdCBkZWZpbmUsIGUuZy4gY29uZnN0cgogICAgIEFDX0RFRklORShfX0VYVEVOU0lPTlNfXywgMSwgW0RlZmluZWQgb24gU29sYXJpcyB0byBzZWUgYWRkaXRpb25hbCBmdW5jdGlvbiBwcm90b3R5cGVzLl0pCkBAIC02NjcsOCArNjgzLDYgQEAKIAkgICAgICAgZXhwX2V4dHJhPSIuIgogCSAgIGZpCiAJICAgTElOS0NDPSJcJChzcmNkaXIpL01vZHVsZXMvbWFrZXhwX2FpeCBNb2R1bGVzL3B5dGhvbi5leHAgJGV4cF9leHRyYSBcJChMSUJSQVJZKTsgJExJTktDQyI7OwotCU1vbnRlcmV5NjQqKQotCSAgIExJTktDQz0iJExJTktDQyAtTC91c3IvbGliL2lhNjRsNjQiOzsKIAlRTlgqKQogCSAgICMgcWNjIG11c3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBvdGhlciBjb21waWxlcnMgZG8gbm90CiAJICAgIyBzdXBwb3J0IC1OLgpAQCAtNjc3LDkgKzY5MSwyOCBAQAogZmkKIEFDX01TR19SRVNVTFQoJExJTktDQykKIAorIyBHTlVMRCBpcyBzZXQgdG8gInllcyIgaWYgdGhlIEdOVSBsaW5rZXIgaXMgdXNlZC4gIElmIHRoaXMgZ29lcyB3cm9uZworIyBtYWtlIHN1cmUgd2UgZGVmYXVsdCBoYXZpbmcgaXQgc2V0IHRvICJubyI6IHRoaXMgaXMgdXNlZCBieQorIyBkaXN0dXRpbHMudW5peGNjb21waWxlciB0byBrbm93IGlmIGl0IHNob3VsZCBhZGQgLS1lbmFibGUtbmV3LWR0YWdzCisjIHRvIGxpbmtlciBjb21tYW5kIGxpbmVzLCBhbmQgZmFpbGluZyB0byBkZXRlY3QgR05VIGxkIHNpbXBseSByZXN1bHRzCisjIGluIHRoZSBzYW1lIGJhaGF2aW91ciBhcyBiZWZvcmUuCitBQ19TVUJTVChHTlVMRCkKK0FDX01TR19DSEVDS0lORyhmb3IgR05VIGxkKQorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICBhY19wcm9nPWAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAKK2ZpCitjYXNlIGAiJGFjX3Byb2ciIC1WIDI+JjEgPCAvZGV2L251bGxgIGluCisgICAgICAqR05VKikKKyAgICAgICAgICBHTlVMRD15ZXM7OworICAgICAgKikKKyAgICAgICAgICBHTlVMRD1ubzs7Citlc2FjCitBQ19NU0dfUkVTVUxUKCRHTlVMRCkKKwogQUNfTVNHX0NIRUNLSU5HKGZvciAtLWVuYWJsZS1zaGFyZWQpCiBBQ19BUkdfRU5BQkxFKHNoYXJlZCwKLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS1lbmFibGUtc2hhcmVkLCBkaXNhYmxlL2VuYWJsZSBidWlsZGluZyBzaGFyZWQgcHl0aG9uIGxpYnJhcnkpKQorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2hhcmVkXSwgW2Rpc2FibGUvZW5hYmxlIGJ1aWxkaW5nIHNoYXJlZCBweXRob24gbGlicmFyeV0pKQogCiBpZiB0ZXN0IC16ICIkZW5hYmxlX3NoYXJlZCIKIHRoZW4gCkBAIC02OTQsMTMgKzcyNywxMyBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0tZW5hYmxlLXByb2ZpbGluZykKIEFDX0FSR19FTkFCTEUocHJvZmlsaW5nLAotICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLWVuYWJsZS1wcm9maWxpbmcsIGVuYWJsZSBDLWxldmVsIGNvZGUgcHJvZmlsaW5nKSwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXByb2ZpbGluZ10sIFtlbmFibGUgQy1sZXZlbCBjb2RlIHByb2ZpbGluZ10pLAogW2FjX3NhdmVfY2M9IiRDQyIKICBDQz0iJENDIC1wZyIKLSBBQ19UUllfUlVOKFtpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH1dLAotICAgYWNfZW5hYmxlX3Byb2ZpbGluZz0ieWVzIiwKLSAgIGFjX2VuYWJsZV9wcm9maWxpbmc9Im5vIiwKLSAgIGFjX2VuYWJsZV9wcm9maWxpbmc9Im5vIikKKyBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW2ludCBtYWluKCkgeyByZXR1cm4gMDsgfV1dKV0sCisgICBbYWNfZW5hYmxlX3Byb2ZpbGluZz0ieWVzIl0sCisgICBbYWNfZW5hYmxlX3Byb2ZpbGluZz0ibm8iXSwKKyAgIFthY19lbmFibGVfcHJvZmlsaW5nPSJubyJdKQogIENDPSIkYWNfc2F2ZV9jYyJdKQogQUNfTVNHX1JFU1VMVCgkYWNfZW5hYmxlX3Byb2ZpbGluZykKIApAQCAtNzgzLDYgKzgxNiwxMCBAQAogCUJMRExJQlJBUlk9Jy1MLiAtbHB5dGhvbiQoVkVSU0lPTiknCiAJUlVOU0hBUkVEPSdEWUxEX0xJQlJBUllfUEFUSD1gcHdkYDoke0RZTERfTElCUkFSWV9QQVRIfScKIAk7OworICAgIEFJWCopCisJTERMSUJSQVJZPSdsaWJweXRob24kKFZFUlNJT04pLnNvJworCVJVTlNIQVJFRD1MSUJQQVRIPWBwd2RgOiR7TElCUEFUSH0KKwk7OwogCiAgIGVzYWMKIGVsc2UgIyBzaGFyZWQgaXMgZGlzYWJsZWQKQEAgLTgwMCw2ICs4MzcsMTMgQEAKIEFDX1NVQlNUKEFSKQogQUNfQ0hFQ0tfUFJPR1MoQVIsIGFyIGFhbCwgYXIpCiAKKyMgdHdlYWsgQVJGTEFHUyBvbmx5IGlmIHRoZSB1c2VyIGRpZG4ndCBzZXQgaXQgb24gdGhlIGNvbW1hbmQgbGluZQorQUNfU1VCU1QoQVJGTEFHUykKK2lmIHRlc3QgLXogIiRBUkZMQUdTIgordGhlbgorICAgICAgICBBUkZMQUdTPSJyYyIKK2ZpCisKIEFDX1NVQlNUKFNWTlZFUlNJT04pCiBBQ19DSEVDS19QUk9HKFNWTlZFUlNJT04sIHN2bnZlcnNpb24sIGZvdW5kLCBub3QtZm91bmQpCiBpZiB0ZXN0ICRTVk5WRVJTSU9OID0gZm91bmQKQEAgLTgzMyw3ICs4NzcsNyBAQAogIyBDaGVjayBmb3IgLS13aXRoLXB5ZGVidWcKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXB5ZGVidWcpCiBBQ19BUkdfV0lUSChweWRlYnVnLCAKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1weWRlYnVnLCBidWlsZCB3aXRoIFB5X0RFQlVHIGRlZmluZWQpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1weWRlYnVnXSwgW2J1aWxkIHdpdGggUHlfREVCVUcgZGVmaW5lZF0pLAogWwogaWYgdGVzdCAiJHdpdGh2YWwiICE9IG5vCiB0aGVuIApAQCAtODc3LDcgKzkyMSw3IEBACiAJICAgIGlmIHRlc3QgIiRQeV9ERUJVRyIgPSAndHJ1ZScgOyB0aGVuCiAJCSMgT3B0aW1pemF0aW9uIG1lc3NlcyB1cCBkZWJ1Z2dlcnMsIHNvIHR1cm4gaXQgb2ZmIGZvcgogCQkjIGRlYnVnIGJ1aWxkcy4KLQkJT1BUPSItZyAtV2FsbCAkU1RSSUNUX1BST1RPIgorCQlPUFQ9Ii1nIC1PMCAtV2FsbCAkU1RSSUNUX1BST1RPIgogCSAgICBlbHNlCiAJCU9QVD0iLWcgJFdSQVAgLU8zIC1XYWxsICRTVFJJQ1RfUFJPVE8iCiAJICAgIGZpCkBAIC04OTYsMTUgKzk0MCw2IEBACiAJT1BUPSItTyIKIAk7OwogICAgIGVzYWMKLQotICAgICMgVGhlIGN1cnJlbnQgKGJldGEpIE1vbnRlcmV5IGNvbXBpbGVyIGRpZXMgd2l0aCBvcHRpbWl6YXRpb25zCi0gICAgIyBYWFggd2hhdCBpcyBNb250ZXJleT8gRG9lcyBpdCBzdGlsbCBkaWUgdy8gLU8/IENhbiB3ZSBnZXQgcmlkIG9mIHRoaXM/Ci0gICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgotCU1vbnRlcmV5KikKLQkgICAgT1BUPSIiCi0JICAgIDs7Ci0gICAgZXNhYwotCiBmaQogCiBBQ19TVUJTVChCQVNFQ0ZMQUdTKQpAQCAtOTIyLDEwICs5NTcsMTEgQEAKICAgICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciAkQ0MgYWNjZXB0cyAtZm5vLXN0cmljdC1hbGlhc2luZykKICAgICAgYWNfc2F2ZV9jYz0iJENDIgogICAgICBDQz0iJENDIC1mbm8tc3RyaWN0LWFsaWFzaW5nIgotICAgICBBQ19UUllfUlVOKFtpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH1dLAotICAgICBhY19jdl9ub19zdHJpY3RfYWxpYXNpbmdfb2s9eWVzLAotICAgICBhY19jdl9ub19zdHJpY3RfYWxpYXNpbmdfb2s9bm8sCi0gICAgIGFjX2N2X25vX3N0cmljdF9hbGlhc2luZ19vaz1ubykKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X25vX3N0cmljdF9hbGlhc2luZ19vaywKKyAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSldLAorCSBbYWNfY3Zfbm9fc3RyaWN0X2FsaWFzaW5nX29rPXllc10sCisJIFthY19jdl9ub19zdHJpY3RfYWxpYXNpbmdfb2s9bm9dKSkKICAgICAgQ0M9IiRhY19zYXZlX2NjIgogICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X25vX3N0cmljdF9hbGlhc2luZ19vaykKICAgICBpZiB0ZXN0ICRhY19jdl9ub19zdHJpY3RfYWxpYXNpbmdfb2sgPSB5ZXMKQEAgLTk1MCw3ICs5ODYsNiBAQAogCURhcndpbiopCiAJICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCiAJICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgotCiAJICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYwogCSAgICB0aGVuCiAJCUFDX01TR19DSEVDS0lORyh3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCkKQEAgLTk2Niw0OSArMTAwMSw2IEBACiAJCUFDX01TR19SRVNVTFQoJENDKQogCSAgICBmaQogCi0KLQkgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJVU5JVkVSU0FMX0FSQ0hfRkxBR1M9IiIKLQkgICAgICAgIGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMyLWJpdCIgOyB0aGVuCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIiCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKLQotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiNjQtYml0IiA7IHRoZW4KLQkJICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0KLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImFsbCIgOyB0aGVuCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYgLWV4dHJhY3QgcHBjNzQwMCIKLQkJICAgTElQT182NEJJVF9GTEFHUz0iLWV4dHJhY3QgeDg2XzY0IC1leHRyYWN0IHBwYzY0IgotCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJpbnRlbCIgOyB0aGVuCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCi0JCSAgIExJUE9fNjRCSVRfRkxBR1M9Ii1leHRyYWN0IHg4Nl82NCIKLQotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMy13YXkiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IC1leHRyYWN0IHBwYzc0MDAiCi0JCSAgIExJUE9fNjRCSVRfRkxBR1M9Ii1leHRyYWN0IHg4Nl82NCIKLQotCQkgZWxzZQotCSAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5XSkKLQotCQkgZmkKLQotCi0JCUNGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gJHtDRkxBR1N9IgotCQlpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgotCQl0aGVuCi0JCQlDRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgotCQkJQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCi0JCWZpCi0JICAgIGZpCi0KIAkgICAgIyBDYWxjdWxhdGUgdGhlIHJpZ2h0IGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkLgogCSAgICAjCiAJICAgIGN1cl90YXJnZXQ9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgc2VkICdzL1woMTBcLltbMC05XV0qXCkuKi9cMS8nYApAQCAtMTA1MCw2ICsxMDQyLDUwIEBACiAJICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKIAkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwogCisJICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCisJCVVOSVZFUlNBTF9BUkNIX0ZMQUdTPSIiCisJICAgICAgICBpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzMi1iaXQiIDsgdGhlbgorCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCisJCSAgIEFSQ0hfUlVOXzMyQklUPSIiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKworCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiNjQtYml0IiA7IHRoZW4KKwkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKwkJICAgTElQT18zMkJJVF9GTEFHUz0iIgorCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKworCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KKwkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKwkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorCisJICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJpbnRlbCIgOyB0aGVuCisJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKwkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKKwkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisKKwkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KKwkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKKwkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorCisJCSBlbHNlCisJICAgICAgICAgICBBQ19NU0dfRVJST1IoW3Byb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXldKQorCisJCSBmaQorCisKKwkJQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAke0NGTEFHU30iCisJCWlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iIAorCQl0aGVuCisJCQlDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKKwkJCUxERkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKKwkJCUNGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCisJCWZpCisKKwkgICAgZmkKKworCiAJICAgIDs7CiAJT1NGKikKIAkgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLW1pZWVlIgpAQCAtMTA5MywxMCArMTEyOSwxMSBAQAogQUNfQ0FDSEVfVkFMKGFjX2N2X29wdF9vbGltaXRfb2ssCiBbYWNfc2F2ZV9jYz0iJENDIgogQ0M9IiRDQyAtT1BUOk9saW1pdD0wIgotQUNfVFJZX1JVTihbaW50IG1haW4oKSB7IHJldHVybiAwOyB9XSwKLSAgYWNfY3Zfb3B0X29saW1pdF9vaz15ZXMsCi0gIGFjX2N2X29wdF9vbGltaXRfb2s9bm8sCi0gIGFjX2N2X29wdF9vbGltaXRfb2s9bm8pCitBQ19DT01QSUxFX0lGRUxTRSgKKyAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW11dKV0sCisgIFthY19jdl9vcHRfb2xpbWl0X29rPXllc10sCisgIFthY19jdl9vcHRfb2xpbWl0X29rPW5vXQorICApCiBDQz0iJGFjX3NhdmVfY2MiXSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X29wdF9vbGltaXRfb2spCiBpZiB0ZXN0ICRhY19jdl9vcHRfb2xpbWl0X29rID0geWVzOyB0aGVuCkBAIC0xMTE1LDEwICsxMTUyLDExIEBACiAgIEFDX0NBQ0hFX1ZBTChhY19jdl9vbGltaXRfb2ssCiAgIFthY19zYXZlX2NjPSIkQ0MiCiAgIENDPSIkQ0MgLU9saW1pdCAxNTAwIgotICBBQ19UUllfUlVOKFtpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH1dLAotICAgIGFjX2N2X29saW1pdF9vaz15ZXMsCi0gICAgYWNfY3Zfb2xpbWl0X29rPW5vLAotICAgIGFjX2N2X29saW1pdF9vaz1ubykKKyAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW11dKV0sCisgICAgW2FjX2N2X29saW1pdF9vaz15ZXNdLAorICAgIFthY19jdl9vbGltaXRfb2s9bm9dCisgICAgKQogICBDQz0iJGFjX3NhdmVfY2MiXSkKICAgQUNfTVNHX1JFU1VMVCgkYWNfY3Zfb2xpbWl0X29rKQogICBpZiB0ZXN0ICRhY19jdl9vbGltaXRfb2sgPSB5ZXM7IHRoZW4KQEAgLTExMzIsMTMgKzExNzAsMTUgQEAKICAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgZ2NjIHN1cHBvcnRzIFBhcnNlVHVwbGUgX19mb3JtYXRfXykKICAgc2F2ZV9DRkxBR1M9JENGTEFHUwogICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciIKLSAgQUNfVFJZX0NPTVBJTEUoWwotICAgIHZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpOwotICBdLCwKLSAgQUNfREVGSU5FKEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFLCAxLCBbRGVmaW5lIGlmIEdDQyBzdXBwb3J0cyBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMiwgMykpKV0pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSAgKQorICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbdm9pZCBmKGNoYXIqLC4uLilfX2F0dHJpYnV0ZSgoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDEsIDIpKSk7XV0sIFtbXV0pCisgIF0sWworICAgIEFDX0RFRklORShIQVZFX0FUVFJJQlVURV9GT1JNQVRfUEFSU0VUVVBMRSwgMSwKKyAgICAgIFtEZWZpbmUgaWYgR0NDIHN1cHBvcnRzIF9fYXR0cmlidXRlX18oKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKSkpXSkKKyAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChubykKKyAgXSkKICAgQ0ZMQUdTPSRzYXZlX0NGTEFHUwogZmkKIApAQCAtMTE0OSw3ICsxMTg5LDcgQEAKICMgb3B0aW9ucyBiZWZvcmUgd2UgY2FuIGNoZWNrIHdoZXRoZXIgLUtwdGhyZWFkIGltcHJvdmVzIGFueXRoaW5nLgogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgcHRocmVhZHMgYXJlIGF2YWlsYWJsZSB3aXRob3V0IG9wdGlvbnMpCiBBQ19DQUNIRV9WQUwoYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0LAotW0FDX1RSWV9SVU4oWworW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogCiB2b2lkKiByb3V0aW5lKHZvaWQqIHApe3JldHVybiBOVUxMO30KQEAgLTExNjEsMTQgKzEyMDEsMTEgQEAKICAgKHZvaWQpcHRocmVhZF9kZXRhY2gocCk7CiAgIHJldHVybiAwOwogfQotXSwKLVsKK11dKV0sWwogICBhY19jdl9wdGhyZWFkX2lzX2RlZmF1bHQ9eWVzCiAgIGFjX2N2X2t0aHJlYWQ9bm8KICAgYWNfY3ZfcHRocmVhZD1ubwotXSwKLSAgYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0PW5vLAotICBhY19jdl9wdGhyZWFkX2lzX2RlZmF1bHQ9bm8pCitdLFthY19jdl9wdGhyZWFkX2lzX2RlZmF1bHQ9bm9dLFthY19jdl9wdGhyZWFkX2lzX2RlZmF1bHQ9bm9dKQogXSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X3B0aHJlYWRfaXNfZGVmYXVsdCkKIApAQCAtMTE4Niw3ICsxMjIzLDcgQEAKIEFDX0NBQ0hFX1ZBTChhY19jdl9rcHRocmVhZCwKIFthY19zYXZlX2NjPSIkQ0MiCiBDQz0iJENDIC1LcHRocmVhZCIKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKIHZvaWQqIHJvdXRpbmUodm9pZCogcCl7cmV0dXJuIE5VTEw7fQpAQCAtMTE5OCwxMCArMTIzNSw3IEBACiAgICh2b2lkKXB0aHJlYWRfZGV0YWNoKHApOwogICByZXR1cm4gMDsKIH0KLV0sCi0gIGFjX2N2X2twdGhyZWFkPXllcywKLSAgYWNfY3Zfa3B0aHJlYWQ9bm8sCi0gIGFjX2N2X2twdGhyZWFkPW5vKQorXV0pXSxbYWNfY3Zfa3B0aHJlYWQ9eWVzXSxbYWNfY3Zfa3B0aHJlYWQ9bm9dLFthY19jdl9rcHRocmVhZD1ub10pCiBDQz0iJGFjX3NhdmVfY2MiXSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X2twdGhyZWFkKQogZmkKQEAgLTEyMTcsNyArMTI1MSw3IEBACiBBQ19DQUNIRV9WQUwoYWNfY3Zfa3RocmVhZCwKIFthY19zYXZlX2NjPSIkQ0MiCiBDQz0iJENDIC1LdGhyZWFkIgotQUNfVFJZX1JVTihbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAogdm9pZCogcm91dGluZSh2b2lkKiBwKXtyZXR1cm4gTlVMTDt9CkBAIC0xMjI5LDEwICsxMjYzLDcgQEAKICAgKHZvaWQpcHRocmVhZF9kZXRhY2gocCk7CiAgIHJldHVybiAwOwogfQotXSwKLSAgYWNfY3Zfa3RocmVhZD15ZXMsCi0gIGFjX2N2X2t0aHJlYWQ9bm8sCi0gIGFjX2N2X2t0aHJlYWQ9bm8pCitdXSldLFthY19jdl9rdGhyZWFkPXllc10sW2FjX2N2X2t0aHJlYWQ9bm9dLFthY19jdl9rdGhyZWFkPW5vXSkKIENDPSIkYWNfc2F2ZV9jYyJdKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfa3RocmVhZCkKIGZpCkBAIC0xMjQ4LDcgKzEyNzksNyBAQAogQUNfQ0FDSEVfVkFMKGFjX2N2X3RocmVhZCwKIFthY19zYXZlX2NjPSIkQ0MiCiBDQz0iJENDIC1wdGhyZWFkIgotQUNfVFJZX1JVTihbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAogdm9pZCogcm91dGluZSh2b2lkKiBwKXtyZXR1cm4gTlVMTDt9CkBAIC0xMjYwLDEwICsxMjkxLDcgQEAKICAgKHZvaWQpcHRocmVhZF9kZXRhY2gocCk7CiAgIHJldHVybiAwOwogfQotXSwKLSAgYWNfY3ZfcHRocmVhZD15ZXMsCi0gIGFjX2N2X3B0aHJlYWQ9bm8sCi0gIGFjX2N2X3B0aHJlYWQ9bm8pCitdXSldLFthY19jdl9wdGhyZWFkPXllc10sW2FjX2N2X3B0aHJlYWQ9bm9dLFthY19jdl9wdGhyZWFkPW5vXSkKIENDPSIkYWNfc2F2ZV9jYyJdKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfcHRocmVhZCkKIGZpCkBAIC0xMzA5LDExICsxMzM3LDExIEBACiAKIGRubCAjIGNoZWNrIGZvciBBTlNJIG9yIEsmUiAoInRyYWRpdGlvbmFsIikgcHJlcHJvY2Vzc29yCiBkbmwgQUNfTVNHX0NIRUNLSU5HKGZvciBDIHByZXByb2Nlc3NvciB0eXBlKQotZG5sIEFDX1RSWV9DT01QSUxFKFsKK2RubCBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiBkbmwgI2RlZmluZSBzcGFtKG5hbWUsIGRvYykgeyNuYW1lLCAmbmFtZSwgI25hbWUgIigpIC0tICIgZG9jfQogZG5sIGludCBmb287CiBkbmwgc3RydWN0IHtjaGFyICpuYW1lOyBpbnQgKmFkZHI7IGNoYXIgKmRvYzt9IGRlc2MgPSBzcGFtKGZvbywgInNvbWV0aGluZyIpOwotZG5sIF0sIFs7XSwgY3BwX3R5cGU9YW5zaSwgQUNfREVGSU5FKEhBVkVfT0xEX0NQUCkgY3BwX3R5cGU9dHJhZGl0aW9uYWwpCitkbmwgXV0sIFtbO11dKV0sW2NwcF90eXBlPWFuc2ldLFtBQ19ERUZJTkUoSEFWRV9PTERfQ1BQKSBjcHBfdHlwZT10cmFkaXRpb25hbF0pCiBkbmwgQUNfTVNHX1JFU1VMVCgkY3BwX3R5cGUpCiAKICMgY2hlY2tzIGZvciBoZWFkZXIgZmlsZXMKQEAgLTEzMjksNyArMTM1Nyw3IEBACiBzeXMvdGVybWlvLmggc3lzL3RpbWUuaCBcCiBzeXMvdGltZXMuaCBzeXMvdHlwZXMuaCBzeXMvdW4uaCBzeXMvdXRzbmFtZS5oIHN5cy93YWl0LmggcHR5LmggbGlidXRpbC5oIFwKIHN5cy9yZXNvdXJjZS5oIG5ldHBhY2tldC9wYWNrZXQuaCBzeXNleGl0cy5oIGJsdWV0b290aC5oIFwKLWJsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmgpCitibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oKQogQUNfSEVBREVSX0RJUkVOVAogQUNfSEVBREVSX01BSk9SCiAKQEAgLTEzNjAsMjYgKzEzODgsMjQgQEAKIAogIyBDaGVjayB3aGV0aGVyIHVzaW5nIG1ha2VkZXYgcmVxdWlyZXMgZGVmaW5pbmcgX09TRl9TT1VSQ0UKIEFDX01TR19DSEVDS0lORyhmb3IgbWFrZWRldikKLUFDX1RSWV9MSU5LKFsKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpZiBkZWZpbmVkKE1BSk9SX0lOX01LREVWKQogI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgogI2VsaWYgZGVmaW5lZChNQUpPUl9JTl9TWVNNQUNST1MpCiAjaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgogI2Vsc2UKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZiBdLAotCSAgICBbIG1ha2VkZXYoMCwgMCkgXSwKLQkgICAgYWNfY3ZfaGFzX21ha2VkZXY9eWVzLAotCSAgICBhY19jdl9oYXNfbWFrZWRldj1ubykKKyNlbmRpZiBdXSwgW1sgbWFrZWRldigwLCAwKSBdXSldLAorW2FjX2N2X2hhc19tYWtlZGV2PXllc10sCitbYWNfY3ZfaGFzX21ha2VkZXY9bm9dKQogaWYgdGVzdCAiJGFjX2N2X2hhc19tYWtlZGV2IiA9ICJubyI7IHRoZW4KICAgICAjIHdlIGRpZG4ndCBsaW5rLCB0cnkgaWYgX09TRl9TT1VSQ0Ugd2lsbCBhbGxvdyB1cyB0byBsaW5rCi0gICAgQUNfVFJZX0xJTksoWworICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNkZWZpbmUgX09TRl9TT1VSQ0UgMQogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICAgIF0sCi0gICAgWyBtYWtlZGV2KDAsIDApIF0sCi0gICAgYWNfY3ZfaGFzX21ha2VkZXY9eWVzLAotICAgIGFjX2N2X2hhc19tYWtlZGV2PW5vKQorICAgIF1dLCBbWyBtYWtlZGV2KDAsIDApIF1dKV0sCitbYWNfY3ZfaGFzX21ha2VkZXY9eWVzXSwKK1thY19jdl9oYXNfbWFrZWRldj1ub10pCiAgICAgaWYgdGVzdCAiJGFjX2N2X2hhc19tYWtlZGV2IiA9ICJ5ZXMiOyB0aGVuCiAgICAgICAgIEFDX0RFRklORShfT1NGX1NPVVJDRSwgMSwgW0RlZmluZSBfT1NGX1NPVVJDRSB0byBnZXQgdGhlIG1ha2VkZXYgbWFjcm8uXSkKICAgICBmaQpAQCAtMTM5OCwxMSArMTQyNCwxMSBAQAogCiB1c2VfbGZzPXllcwogQUNfTVNHX0NIRUNLSU5HKFNvbGFyaXMgTEZTIGJ1ZykKLUFDX1RSWV9DT01QSUxFKFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UgMQogI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgotXSxzdHJ1Y3QgcmxpbWl0IGZvbzssc29sX2xmc19idWc9bm8sc29sX2xmc19idWc9eWVzKQorXV0sIFtbc3RydWN0IHJsaW1pdCBmb287XV0pXSxbc29sX2xmc19idWc9bm9dLFtzb2xfbGZzX2J1Zz15ZXNdKQogQUNfTVNHX1JFU1VMVCgkc29sX2xmc19idWcpCiBpZiB0ZXN0ICIkc29sX2xmc19idWciID0gInllcyI7IHRoZW4KICAgdXNlX2xmcz1ubwpAQCAtMTQxMSw2ICsxNDM3LDEyIEBACiBpZiB0ZXN0ICIkdXNlX2xmcyIgPSAieWVzIjsgdGhlbgogIyBUd28gZGVmaW5lcyBuZWVkZWQgdG8gZW5hYmxlIGxhcmdlZmlsZSBzdXBwb3J0IG9uIHZhcmlvdXMgcGxhdGZvcm1zCiAjIFRoZXNlIG1heSBhZmZlY3Qgc29tZSB0eXBlZGVmcworY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KK0FJWCopCisgICAgQUNfREVGSU5FKF9MQVJHRV9GSUxFUywgMSwgCisgICAgW1RoaXMgbXVzdCBiZSBkZWZpbmVkIG9uIEFJWCBzeXN0ZW1zIHRvIGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQuXSkKKyAgICA7OworZXNhYwogQUNfREVGSU5FKF9MQVJHRUZJTEVfU09VUkNFLCAxLCAKIFtUaGlzIG11c3QgYmUgZGVmaW5lZCBvbiBzb21lIHN5c3RlbXMgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydC5dKQogQUNfREVGSU5FKF9GSUxFX09GRlNFVF9CSVRTLCA2NCwKQEAgLTE0MjgsMTEgKzE0NjAsMTUgQEAKIEFDX1RZUEVfTU9ERV9UCiBBQ19UWVBFX09GRl9UCiBBQ19UWVBFX1BJRF9UCi1BQ19UWVBFX1NJR05BTAorQUNfREVGSU5FX1VOUVVPVEVEKFtSRVRTSUdUWVBFXSxbdm9pZF0sW2Fzc3VtZSBDODkgc2VtYW50aWNzIHRoYXQgUkVUU0lHVFlQRSBpcyBhbHdheXMgdm9pZF0pCiBBQ19UWVBFX1NJWkVfVAogQUNfVFlQRV9VSURfVAorQUNfVFlQRV9VSU5UMzJfVAorQUNfVFlQRV9VSU5UNjRfVAorQUNfVFlQRV9JTlQzMl9UCitBQ19UWVBFX0lOVDY0X1QKIEFDX0NIRUNLX1RZUEUoc3NpemVfdCwKLSAgQUNfREVGSU5FKEhBVkVfU1NJWkVfVCwgMSwgRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgcHJvdmlkZXMgc3NpemVfdCksLCkKKyAgQUNfREVGSU5FKEhBVkVfU1NJWkVfVCwgMSwgW0RlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHByb3ZpZGVzIHNzaXplX3RdKSwsKQogCiAjIFNpemVzIG9mIHZhcmlvdXMgY29tbW9uIGJhc2ljIHR5cGVzCiAjIEFOU0kgQyByZXF1aXJlcyBzaXplb2YoY2hhcikgPT0gMSwgc28gbm8gbmVlZCB0byBjaGVjayBpdApAQCAtMTQ0OCwxMCArMTQ4NCwxMCBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxvbmcgbG9uZyBzdXBwb3J0KQogaGF2ZV9sb25nX2xvbmc9bm8KLUFDX1RSWV9DT01QSUxFKFtdLCBbbG9uZyBsb25nIHg7IHggPSAobG9uZyBsb25nKTA7XSwgWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW2xvbmcgbG9uZyB4OyB4ID0gKGxvbmcgbG9uZykwO11dKV0sWwogICBBQ19ERUZJTkUoSEFWRV9MT05HX0xPTkcsIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgdHlwZSBsb25nIGxvbmcuXSkgCiAgIGhhdmVfbG9uZ19sb25nPXllcwotXSkKK10sW10pCiBBQ19NU0dfUkVTVUxUKCRoYXZlX2xvbmdfbG9uZykKIGlmIHRlc3QgIiRoYXZlX2xvbmdfbG9uZyIgPSB5ZXMgOyB0aGVuCiBBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nLCA4KQpAQCAtMTQ1OSwxMCArMTQ5NSwxMCBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxvbmcgZG91YmxlIHN1cHBvcnQpCiBoYXZlX2xvbmdfZG91YmxlPW5vCi1BQ19UUllfQ09NUElMRShbXSwgW2xvbmcgZG91YmxlIHg7IHggPSAobG9uZyBkb3VibGUpMC47XSwgWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW2xvbmcgZG91YmxlIHg7IHggPSAobG9uZyBkb3VibGUpMDtdXSldLFsKICAgQUNfREVGSU5FKEhBVkVfTE9OR19ET1VCTEUsIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgdHlwZSBsb25nIGRvdWJsZS5dKQogICBoYXZlX2xvbmdfZG91YmxlPXllcwotXSkKK10sW10pCiBBQ19NU0dfUkVTVUxUKCRoYXZlX2xvbmdfZG91YmxlKQogaWYgdGVzdCAiJGhhdmVfbG9uZ19kb3VibGUiID0geWVzIDsgdGhlbgogQUNfQ0hFQ0tfU0laRU9GKGxvbmcgZG91YmxlLCAxMikKQEAgLTE0NzAsMTAgKzE1MDYsMTAgQEAKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBfQm9vbCBzdXBwb3J0KQogaGF2ZV9jOTlfYm9vbD1ubwotQUNfVFJZX0NPTVBJTEUoW10sIFtfQm9vbCB4OyB4ID0gKF9Cb29sKTA7XSwgWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW19Cb29sIHg7IHggPSAoX0Jvb2wpMDtdXSldLFsKICAgQUNfREVGSU5FKEhBVkVfQzk5X0JPT0wsIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgdHlwZSBfQm9vbC5dKSAKICAgaGF2ZV9jOTlfYm9vbD15ZXMKLV0pCitdLFtdKQogQUNfTVNHX1JFU1VMVCgkaGF2ZV9jOTlfYm9vbCkKIGlmIHRlc3QgIiRoYXZlX2M5OV9ib29sIiA9IHllcyA7IHRoZW4KIEFDX0NIRUNLX1NJWkVPRihfQm9vbCwgMSkKQEAgLTE0ODMsMjggKzE1MTksMTYgQEAKICAgIFtBQ19DSEVDS19TSVpFT0YodWludHB0cl90LCA0KV0sIAogICAgW10sIFsjaWZkZWYgSEFWRV9TVERJTlRfSAogICAgICAgICAjaW5jbHVkZSA8c3RkaW50Lmg+CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisgICAgICAgICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogICAgICAgICAjZW5kaWZdKQogCi0KLSMgSG1waC4gQUNfQ0hFQ0tfU0laRU9GKCkgZG9lc24ndCBpbmNsdWRlIDxzeXMvdHlwZXMuaD4uCi1BQ19NU0dfQ0hFQ0tJTkcoc2l6ZSBvZiBvZmZfdCkKLUFDX0NBQ0hFX1ZBTChhY19jdl9zaXplb2Zfb2ZmX3QsCi1bQUNfVFJZX1JVTihbI2luY2x1ZGUgPHN0ZGlvLmg+CitBQ19DSEVDS19TSVpFT0Yob2ZmX3QsIFtdLCBbCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotbWFpbigpCi17Ci0gIEZJTEUgKmY9Zm9wZW4oImNvbmZ0ZXN0dmFsIiwgInciKTsKLSAgaWYgKCFmKSBleGl0KDEpOwotICBmcHJpbnRmKGYsICIlZFxuIiwgc2l6ZW9mKG9mZl90KSk7Ci0gIGV4aXQoMCk7Ci19XSwKLWFjX2N2X3NpemVvZl9vZmZfdD1gY2F0IGNvbmZ0ZXN0dmFsYCwKLWFjX2N2X3NpemVvZl9vZmZfdD0wLAotYWNfY3Zfc2l6ZW9mX29mZl90PTQpCisjZW5kaWYKIF0pCi1BQ19NU0dfUkVTVUxUKCRhY19jdl9zaXplb2Zfb2ZmX3QpCi1BQ19ERUZJTkVfVU5RVU9URUQoU0laRU9GX09GRl9ULCAkYWNfY3Zfc2l6ZW9mX29mZl90LAotW1RoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gb2ZmX3QuXSkKIAogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydCkKIGlmIHRlc3QgIiRoYXZlX2xvbmdfbG9uZyIgPSB5ZXMKQEAgLTE1MjQsMjYgKzE1NDgsMTQgQEAKICAgQUNfTVNHX1JFU1VMVChubykKIGZpCiAKLSMgQUNfQ0hFQ0tfU0laRU9GKCkgZG9lc24ndCBpbmNsdWRlIDx0aW1lLmg+LgotQUNfTVNHX0NIRUNLSU5HKHNpemUgb2YgdGltZV90KQotQUNfQ0FDSEVfVkFMKGFjX2N2X3NpemVvZl90aW1lX3QsCi1bQUNfVFJZX1JVTihbI2luY2x1ZGUgPHN0ZGlvLmg+CitBQ19DSEVDS19TSVpFT0YodGltZV90LCBbXSwgWworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVElNRV9ICiAjaW5jbHVkZSA8dGltZS5oPgotbWFpbigpCi17Ci0gIEZJTEUgKmY9Zm9wZW4oImNvbmZ0ZXN0dmFsIiwgInciKTsKLSAgaWYgKCFmKSBleGl0KDEpOwotICBmcHJpbnRmKGYsICIlZFxuIiwgc2l6ZW9mKHRpbWVfdCkpOwotICBleGl0KDApOwotfV0sCi1hY19jdl9zaXplb2ZfdGltZV90PWBjYXQgY29uZnRlc3R2YWxgLAotYWNfY3Zfc2l6ZW9mX3RpbWVfdD0wLAotYWNfY3Zfc2l6ZW9mX3RpbWVfdD00KQorI2VuZGlmCiBdKQotQUNfTVNHX1JFU1VMVCgkYWNfY3Zfc2l6ZW9mX3RpbWVfdCkKLUFDX0RFRklORV9VTlFVT1RFRChTSVpFT0ZfVElNRV9ULCAkYWNfY3Zfc2l6ZW9mX3RpbWVfdCwgCi1bVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHRpbWVfdC5dKQotCiAKICMgaWYgaGF2ZSBwdGhyZWFkX3QgdGhlbiBkZWZpbmUgU0laRU9GX1BUSFJFQURfVAogYWNfc2F2ZV9jYz0iJENDIgpAQCAtMTU1NiwzNCArMTU2OCwyMiBAQAogZmkKIEFDX01TR19DSEVDS0lORyhmb3IgcHRocmVhZF90KQogaGF2ZV9wdGhyZWFkX3Q9bm8KLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sIFtwdGhyZWFkX3QgeDsgeCA9ICoocHRocmVhZF90KikwO10sIGhhdmVfcHRocmVhZF90PXllcykKK0FDX0NPTVBJTEVfSUZFTFNFKFsKKyAgQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHB0aHJlYWQuaD5dXSwgW1twdGhyZWFkX3QgeDsgeCA9ICoocHRocmVhZF90KikwO11dKQorXSxbaGF2ZV9wdGhyZWFkX3Q9eWVzXSxbXSkKIEFDX01TR19SRVNVTFQoJGhhdmVfcHRocmVhZF90KQogaWYgdGVzdCAiJGhhdmVfcHRocmVhZF90IiA9IHllcyA7IHRoZW4KLSAgIyBBQ19DSEVDS19TSVpFT0YoKSBkb2Vzbid0IGluY2x1ZGUgPHB0aHJlYWQuaD4uCi0gIEFDX01TR19DSEVDS0lORyhzaXplIG9mIHB0aHJlYWRfdCkKLSAgQUNfQ0FDSEVfVkFMKGFjX2N2X3NpemVvZl9wdGhyZWFkX3QsCi0gIFtBQ19UUllfUlVOKFsjaW5jbHVkZSA8c3RkaW8uaD4KKyAgQUNfQ0hFQ0tfU0laRU9GKHB0aHJlYWRfdCwgW10sIFsKKyNpZmRlZiBIQVZFX1BUSFJFQURfSAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSAgbWFpbigpCi0gIHsKLSAgICBGSUxFICpmPWZvcGVuKCJjb25mdGVzdHZhbCIsICJ3Iik7Ci0gICAgaWYgKCFmKSBleGl0KDEpOwotICAgIGZwcmludGYoZiwgIiVkXG4iLCBzaXplb2YocHRocmVhZF90KSk7Ci0gICAgZXhpdCgwKTsKLSAgfV0sCi0gIGFjX2N2X3NpemVvZl9wdGhyZWFkX3Q9YGNhdCBjb25mdGVzdHZhbGAsCi0gIGFjX2N2X3NpemVvZl9wdGhyZWFkX3Q9MCwKLSAgYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdD00KQorI2VuZGlmCiAgIF0pCi0gIEFDX01TR19SRVNVTFQoJGFjX2N2X3NpemVvZl9wdGhyZWFkX3QpCi0gIEFDX0RFRklORV9VTlFVT1RFRChTSVpFT0ZfUFRIUkVBRF9ULCAkYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdCwKLSAgIFtUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgcHRocmVhZF90Ll0pCiBmaQogQ0M9IiRhY19zYXZlX2NjIgogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0tZW5hYmxlLXRvb2xib3gtZ2x1ZSkKIEFDX0FSR19FTkFCTEUodG9vbGJveC1nbHVlLAotICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLWVuYWJsZS10b29sYm94LWdsdWUsIGRpc2FibGUvZW5hYmxlIE1hY09TWCBnbHVlIGNvZGUgZm9yIGV4dGVuc2lvbnMpKQorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdG9vbGJveC1nbHVlXSwgW2Rpc2FibGUvZW5hYmxlIE1hY09TWCBnbHVlIGNvZGUgZm9yIGV4dGVuc2lvbnNdKSkKIAogaWYgdGVzdCAteiAiJGVuYWJsZV90b29sYm94X2dsdWUiCiB0aGVuIApAQCAtMTY0MCw3ICsxNjQwLDcgQEAKICAgICAgICAgZWxzZSAKICAgICAgICAgICAgIExJQlRPT0xfQ1JVRlQ9IiIKICAgICBmaQotICAgIEFDX1RSWV9SVU4oWworICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgogICAgIGludCBtYWluKGludCBhcmdjLCBjaGFyKmFyZ3ZbXSkKICAgICB7CkBAIC0xNjUwLDkgKzE2NTAsNyBAQAogICAgICAgCSAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgfQotICAgIF0sIGFjX29zeF8zMmJpdD15ZXMsCi0gICAgICAgYWNfb3N4XzMyYml0PW5vLAotICAgICAgIGFjX29zeF8zMmJpdD15ZXMpCisgICAgXV0pXSxbYWNfb3N4XzMyYml0PXllc10sW2FjX29zeF8zMmJpdD1ub10sW2FjX29zeF8zMmJpdD15ZXNdKQogICAgIAogICAgIGlmIHRlc3QgIiR7YWNfb3N4XzMyYml0fSIgPSAieWVzIjsgdGhlbgogICAgIAljYXNlIGAvdXNyL2Jpbi9hcmNoYCBpbgpAQCAtMTcyMiw2ICsxNzIwLDcgQEAKICMgU2V0IGluZm8gYWJvdXQgc2hhcmVkIGxpYnJhcmllcy4KIEFDX1NVQlNUKFNPKQogQUNfU1VCU1QoTERTSEFSRUQpCitBQ19TVUJTVChMRENYWFNIQVJFRCkKIEFDX1NVQlNUKEJMRFNIQVJFRCkKIEFDX1NVQlNUKENDU0hBUkVEKQogQUNfU1VCU1QoTElOS0ZPUlNIQVJFRCkKQEAgLTE3NjQsNyArMTc2Myw3IEBACiB0aGVuCiAJY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KIAlBSVgqKQotCQlCTERTSEFSRUQ9IlwkKHNyY2RpcikvTW9kdWxlcy9sZF9zb19haXggXCQoQ0MpIC1iSTpNb2R1bGVzL3B5dGhvbi5leHAiCisJCUJMRFNIQVJFRD0iXCQoc3JjZGlyKS9Nb2R1bGVzL2xkX3NvX2FpeCBcJChDQykgLWJJOlwkKHNyY2RpcikvTW9kdWxlcy9weXRob24uZXhwIgogCQlMRFNIQVJFRD0iXCQoQklOTElCREVTVCkvY29uZmlnL2xkX3NvX2FpeCBcJChDQykgLWJJOlwkKEJJTkxJQkRFU1QpL2NvbmZpZy9weXRob24uZXhwIgogCQk7OwogCUJlT1MqKQpAQCAtMTc3NCwzNiArMTc3Myw0NyBAQAogCUlSSVgvNSopIExEU0hBUkVEPSJsZCAtc2hhcmVkIjs7CiAJSVJJWCovNiopIExEU0hBUkVEPSJsZCAke1NHSV9BQkl9IC1zaGFyZWQgLWFsbCI7OwogCVN1bk9TLzUqKSAKLQkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIgotCQl0aGVuIExEU0hBUkVEPSckKENDKSAtc2hhcmVkJwotCQllbHNlIExEU0hBUkVEPSckKENDKSAtRyc7CisJCWlmIHRlc3QgIiRHQ0MiID0gInllcyIgOyB0aGVuCisJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCcKKwkJZWxzZQorCQkJTERTSEFSRUQ9JyQoQ0MpIC1HJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtRycKIAkJZmkgOzsKIAlocCp8SFAqKQotCQlpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi0JCXRoZW4gTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCi0JCWVsc2UgTERTSEFSRUQ9J2xkIC1iJzsKKwkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIiA7IHRoZW4KKwkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJworCQllbHNlCisJCQlMRFNIQVJFRD0nbGQgLWInCiAJCWZpIDs7CiAJT1NGKikgTERTSEFSRUQ9ImxkIC1zaGFyZWQgLWV4cGVjdF91bnJlc29sdmVkIFwiKlwiIjs7CiAJRGFyd2luLzEuMyopCi0JCUxEU0hBUkVEPSckKENDKSAkKExERkxBR1MpIC1idW5kbGUnCisJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlJworCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUnCiAJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIiA7IHRoZW4KIAkJCSMgTGluayBhZ2FpbnN0IHRoZSBmcmFtZXdvcmsuIEFsbCBleHRlcm5hbHMgc2hvdWxkIGJlIGRlZmluZWQuCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJworCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCWVsc2UKIAkJCSMgTm8gZnJhbWV3b3JrLiBJZ25vcmUgdW5kZWZpbmVkIHN5bWJvbHMsIGFzc3VtaW5nIHRoZXkgY29tZSBmcm9tIFB5dGhvbgogCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAtdW5kZWZpbmVkIHN1cHByZXNzIgorCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAtdW5kZWZpbmVkIHN1cHByZXNzIgogCQlmaSA7OwogCURhcndpbi8xLjQqfERhcndpbi81Lip8RGFyd2luLzYuKikKLQkJTERTSEFSRUQ9JyQoQ0MpICQoTERGTEFHUykgLWJ1bmRsZScKKwkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUnCisJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZScKIAkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiIDsgdGhlbgogCQkJIyBMaW5rIGFnYWluc3QgdGhlIGZyYW1ld29yay4gQWxsIGV4dGVybmFscyBzaG91bGQgYmUgZGVmaW5lZC4KIAkJCUJMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCisJCQlMRENYWFNIQVJFRD0iJExEQ1hYU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktQUkVGSVgpLyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKIAkJZWxzZQogCQkJIyBObyBmcmFtZXdvcmssIHVzZSB0aGUgUHl0aG9uIGFwcCBhcyBidW5kbGUtbG9hZGVyCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQlVJTERQWVRIT04pJwogCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJworCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJwogCQlmaSA7OwogCURhcndpbi8qKQogCQkjIFVzZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwIHdoZW5ldmVyIHBvc3NpYmxlICgxMC4zIGFuZCBsYXRlcikuCkBAIC0xODE0LDU4ICsxODI0LDgwIEBACiAJCQlpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgogCQkJCUxERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKIAkJCWZpCi0JCQlMRFNIQVJFRD0nJChDQykgJChMREZMQUdTKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCisJCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCIKIAkJZWxzZQotCQkJTERTSEFSRUQ9JyQoQ0MpICQoTERGTEFHUykgLWJ1bmRsZScKKwkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlJwogCQkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiIDsgdGhlbgogCQkJCSMgTGluayBhZ2FpbnN0IHRoZSBmcmFtZXdvcmsuIEFsbCBleHRlcm5hbHMgc2hvdWxkIGJlIGRlZmluZWQuCiAJCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCisJCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCQllbHNlCiAJCQkJIyBObyBmcmFtZXdvcmssIHVzZSB0aGUgUHl0aG9uIGFwcCBhcyBidW5kbGUtbG9hZGVyCiAJCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJVSUxEUFlUSE9OKScKIAkJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSknCisJCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJwogCQkJZmkKIAkJZmkKIAkJOzsKLQlMaW51eCp8R05VKnxRTlgqKSBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCc7OwotCUJTRC9PUyovNCopIExEU0hBUkVEPSJnY2MgLXNoYXJlZCI7OworCUxpbnV4KnxHTlUqfFFOWCopCisJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnOzsKKwlCU0QvT1MqLzQqKQorCQlMRFNIQVJFRD0iZ2NjIC1zaGFyZWQiCisJCUxEQ1hYU0hBUkVEPSJnKysgLXNoYXJlZCI7OwogCUZyZWVCU0QqKQogCQlpZiBbWyAiYCRDQyAtZE0gLUUgLSA8L2Rldi9udWxsIHwgZ3JlcCBfX0VMRl9fYCIgIT0gIiIgXV0KIAkJdGhlbgotCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQgJHtMREZMQUdTfScKKwkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJwogCQllbHNlCi0JCQlMRFNIQVJFRD0ibGQgLUJzaGFyZWFibGUgJHtMREZMQUdTfSIKKwkJCUxEU0hBUkVEPSJsZCAtQnNoYXJlYWJsZSIKIAkJZmk7OwogCU9wZW5CU0QqKQogCQlpZiBbWyAiYCRDQyAtZE0gLUUgLSA8L2Rldi9udWxsIHwgZ3JlcCBfX0VMRl9fYCIgIT0gIiIgXV0KIAkJdGhlbgotCQkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkICQoQ0NTSEFSRUQpICR7TERGTEFHU30nCisJCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQgJChDQ1NIQVJFRCknCisJCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkICQoQ0NTSEFSRUQpJwogCQllbHNlCiAJCQkJY2FzZSBgdW5hbWUgLXJgIGluCiAJCQkJW1swMV1dLiogfCAyLltbMC03XV0gfCAyLltbMC03XV0uKikKIAkJCQkgICBMRFNIQVJFRD0ibGQgLUJzaGFyZWFibGUgJHtMREZMQUdTfSIKIAkJCQkgICA7OwogCQkJCSopCi0JCQkJICAgTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQgJChDQ1NIQVJFRCkgJHtMREZMQUdTfScKKwkJCQkgICBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAkKENDU0hBUkVEKScKKwkJCQkgICBMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQgJChDQ1NIQVJFRCknCiAJCQkJICAgOzsKIAkJCQllc2FjCiAJCWZpOzsKLQlOZXRCU0QqfERyYWdvbkZseSopIExEU0hBUkVEPSJjYyAtc2hhcmVkICR7TERGTEFHU30iOzsKKwlOZXRCU0QqfERyYWdvbkZseSopCisJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnOzsKIAlPcGVuVU5JWCp8VW5peFdhcmUqKQotCQlpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi0JCXRoZW4gTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCi0JCWVsc2UgTERTSEFSRUQ9JyQoQ0MpIC1HJworCQlpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiIDsgdGhlbgorCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnCisJCWVsc2UKKwkJCUxEU0hBUkVEPSckKENDKSAtRycKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLUcnCiAJCWZpOzsKLQlTQ09fU1YqKSBMRFNIQVJFRD0nJChDQykgLVdsLC1HLC1CZXhwb3J0Jzs7Ci0JTW9udGVyZXkqKSBMRFNIQVJFRD0iY2MgLUcgLWR5IC1CZHluYW1pYyAtQmV4cG9ydCAtTC91c3IvbGliL2lhNjRsNjQiOzsKLQlDWUdXSU4qKSBMRFNIQVJFRD0iZ2NjIC1zaGFyZWQgLVdsLC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSI7OwotCWF0aGVvcyopIExEU0hBUkVEPSJnY2MgLXNoYXJlZCI7OworCVNDT19TViopCisJCUxEU0hBUkVEPSckKENDKSAtV2wsLUcsLUJleHBvcnQnCisJCUxEQ1hYU0hBUkVEPSckKENYWCkgLVdsLC1HLC1CZXhwb3J0Jzs7CisJQ1lHV0lOKikKKwkJTERTSEFSRUQ9ImdjYyAtc2hhcmVkIC1XbCwtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UiCisJCUxEQ1hYU0hBUkVEPSJnKysgLXNoYXJlZCAtV2wsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIjs7CisJYXRoZW9zKikKKwkJTERTSEFSRUQ9ImdjYyAtc2hhcmVkIgorCQlMRENYWFNIQVJFRD0iZysrIC1zaGFyZWQiOzsKIAkqKQlMRFNIQVJFRD0ibGQiOzsKIAllc2FjCiBmaQogQUNfTVNHX1JFU1VMVCgkTERTSEFSRUQpCitMRENYWFNIQVJFRD0ke0xEQ1hYU0hBUkVELSRMRFNIQVJFRH0KIEJMRFNIQVJFRD0ke0JMRFNIQVJFRC0kTERTSEFSRUR9CiAjIENDU0hBUkVEIGFyZSB0aGUgQyAqZmxhZ3MqIHVzZWQgdG8gY3JlYXRlIG9iamVjdHMgdG8gZ28gaW50byBhIHNoYXJlZAogIyBsaWJyYXJ5IChtb2R1bGUpIC0tIHRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGEgZmV3IHN5c3RlbXMKQEAgLTE4OTYsNyArMTkyOCw2IEBACiAJCXRoZW4gQ0NTSEFSRUQ9Ii1mUElDIgogCQllbHNlIENDU0hBUkVEPSItS3BpYyAtYmVsZiIKIAkJZmk7OwotCU1vbnRlcmV5KikgQ0NTSEFSRUQ9Ii1HIjs7CiAJSVJJWCovNiopICBjYXNlICRDQyBpbgogCQkgICAqZ2NjKikgQ0NTSEFSRUQ9Ii1zaGFyZWQiOzsKIAkJICAgKikgQ0NTSEFSRUQ9IiI7OwpAQCAtMjAxNiwxMyArMjA0NywxNyBAQAogIyBjaGVja3MgZm9yIHN5c3RlbSBkZXBlbmRlbnQgQysrIGV4dGVuc2lvbnMgc3VwcG9ydAogY2FzZSAiJGFjX3N5c19zeXN0ZW0iIGluCiAJQUlYKikJQUNfTVNHX0NIRUNLSU5HKGZvciBnZW51aW5lIEFJWCBDKysgZXh0ZW5zaW9ucyBzdXBwb3J0KQotCQlBQ19UUllfTElOSyhbI2luY2x1ZGUgIi91c3IvbHBwL3hsQy9pbmNsdWRlL2xvYWQuaCJdLAotCQkJICAgIFtsb2FkQW5kSW5pdCgiIiwgMCwgIiIpXSwKLQkJCSAgICBbQUNfREVGSU5FKEFJWF9HRU5VSU5FX0NQTFVTUExVUywgMSwKKwkJQUNfTElOS19JRkVMU0UoWworCQkgIEFDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxsb2FkLmg+XV0sCisJCQkJICBbW2xvYWRBbmRJbml0KCIiLCAwLCAiIildXSkKKwkJXSxbCisJCSAgQUNfREVGSU5FKEFJWF9HRU5VSU5FX0NQTFVTUExVUywgMSwKICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIGZvciBBSVggaWYgeW91ciBjb21waWxlciBpcyBhIGdlbnVpbmUgSUJNIHhsQy94bENfcgogICAgICAgICAgICAgICAgICAgICAgICBhbmQgeW91IHdhbnQgc3VwcG9ydCBmb3IgQUlYIEMrKyBzaGFyZWQgZXh0ZW5zaW9uIG1vZHVsZXMuXSkKLQkJCSAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKLQkJCSAgICBbQUNfTVNHX1JFU1VMVChubyldKTs7CisJCSAgQUNfTVNHX1JFU1VMVCh5ZXMpCisJCV0sWworCQkgIEFDX01TR19SRVNVTFQobm8pCisJCV0pOzsKIAkqKSA7OwogZXNhYwogCkBAIC0yMDM5LDI2ICsyMDc0LDY0IEBACiAKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWxpYnMpCiBBQ19BUkdfV0lUSChsaWJzLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLWxpYnM9J2xpYjEgLi4uJywgbGluayBhZ2FpbnN0IGFkZGl0aW9uYWwgbGlicyksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYnM9J2xpYjEgLi4uJ10sIFtsaW5rIGFnYWluc3QgYWRkaXRpb25hbCBsaWJzXSksCiBbCiBBQ19NU0dfUkVTVUxUKCR3aXRodmFsKQogTElCUz0iJHdpdGh2YWwgJExJQlMiCiBdLAogW0FDX01TR19SRVNVTFQobm8pXSkKIAorQUNfUEFUSF9UT09MKFtQS0dfQ09ORklHXSwgW3BrZy1jb25maWddKQorCisjIENoZWNrIGZvciB1c2Ugb2YgdGhlIHN5c3RlbSBleHBhdCBsaWJyYXJ5CitBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1zeXN0ZW0tZXhwYXQpCitBQ19BUkdfV0lUSChzeXN0ZW1fZXhwYXQsCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXN5c3RlbS1leHBhdF0sIFtidWlsZCBweWV4cGF0IG1vZHVsZSB1c2luZyBhbiBpbnN0YWxsZWQgZXhwYXQgbGlicmFyeV0pLAorICAgICAgICAgICAgW10sCisgICAgICAgICAgICBbd2l0aF9zeXN0ZW1fZXhwYXQ9Im5vIl0pCisKK0FDX01TR19SRVNVTFQoJHdpdGhfc3lzdGVtX2V4cGF0KQorCiAjIENoZWNrIGZvciB1c2Ugb2YgdGhlIHN5c3RlbSBsaWJmZmkgbGlicmFyeQogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtc3lzdGVtLWZmaSkKIEFDX0FSR19XSVRIKHN5c3RlbV9mZmksCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtc3lzdGVtLWZmaSwgYnVpbGQgX2N0eXBlcyBtb2R1bGUgdXNpbmcgYW4gaW5zdGFsbGVkIGZmaSBsaWJyYXJ5KSkKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtc3lzdGVtLWZmaV0sIFtidWlsZCBfY3R5cGVzIG1vZHVsZSB1c2luZyBhbiBpbnN0YWxsZWQgZmZpIGxpYnJhcnldKSwKKyAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgW3dpdGhfc3lzdGVtX2ZmaT0ibm8iXSkKKworaWYgdGVzdCAiJHdpdGhfc3lzdGVtX2ZmaSIgPSAieWVzIiAmJiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBMSUJGRklfSU5DTFVERURJUj0iYCIkUEtHX0NPTkZJRyIgbGliZmZpIC0tY2ZsYWdzLW9ubHktSSAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncy9eLUkvLztzLyAqJC8vJ2AiCitlbHNlCisgICAgTElCRkZJX0lOQ0xVREVESVI9IiIKK2ZpCitBQ19TVUJTVChMSUJGRklfSU5DTFVERURJUikKIAogQUNfTVNHX1JFU1VMVCgkd2l0aF9zeXN0ZW1fZmZpKQogCisjIENoZWNrIGZvciAtLXdpdGgtZGJtbGlib3JkZXIKK0FDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWRibWxpYm9yZGVyKQorQUNfQVJHX1dJVEgoZGJtbGlib3JkZXIsCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWRibWxpYm9yZGVyPWRiMTpkYjI6Li4uXSwgW29yZGVyIHRvIGNoZWNrIGRiIGJhY2tlbmRzIGZvciBkYm0uIFZhbGlkIHZhbHVlIGlzIGEgY29sb24gc2VwYXJhdGVkIHN0cmluZyB3aXRoIHRoZSBiYWNrZW5kIG5hbWVzIGBuZGJtJywgYGdkYm0nIGFuZCBgYmRiJy5dKSwKK1sKK2lmIHRlc3QgeCR3aXRoX2RibWxpYm9yZGVyID0geHllcwordGhlbgorQUNfTVNHX0VSUk9SKFtwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLWRibWxpYm9yZGVyPWRiMTpkYjI6Li4uXSkKK2Vsc2UKKyAgZm9yIGRiIGluIGBlY2hvICR3aXRoX2RibWxpYm9yZGVyIHwgc2VkICdzLzovIC9nJ2A7IGRvCisgICAgaWYgdGVzdCB4JGRiICE9IHhuZGJtICYmIHRlc3QgeCRkYiAhPSB4Z2RibSAmJiB0ZXN0IHgkZGIgIT0geGJkYgorICAgIHRoZW4KKyAgICAgIEFDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC1kYm1saWJvcmRlcj1kYjE6ZGIyOi4uLl0pCisgICAgZmkKKyAgZG9uZQorZmldKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9kYm1saWJvcmRlcikKKwogIyBEZXRlcm1pbmUgaWYgc2lnbmFsbW9kdWxlIHNob3VsZCBiZSB1c2VkLgogQUNfU1VCU1QoVVNFX1NJR05BTF9NT0RVTEUpCiBBQ19TVUJTVChTSUdOQUxfT0JKUykKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXNpZ25hbC1tb2R1bGUpCiBBQ19BUkdfV0lUSChzaWduYWwtbW9kdWxlLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLXNpZ25hbC1tb2R1bGUsIGRpc2FibGUvZW5hYmxlIHNpZ25hbCBtb2R1bGUpKQorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zaWduYWwtbW9kdWxlXSwgW2Rpc2FibGUvZW5hYmxlIHNpZ25hbCBtb2R1bGVdKSkKIAogaWYgdGVzdCAteiAiJHdpdGhfc2lnbmFsX21vZHVsZSIKIHRoZW4gd2l0aF9zaWduYWxfbW9kdWxlPSJ5ZXMiCkBAIC0yMDgwLDcgKzIxNTMsNyBAQAogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtZGVjLXRocmVhZHMpCiBBQ19TVUJTVChMRExBU1QpCiBBQ19BUkdfV0lUSChkZWMtdGhyZWFkcywKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1kZWMtdGhyZWFkcywgdXNlIERFQyBBbHBoYS9PU0YxIHRocmVhZC1zYWZlIGxpYnJhcmllcyksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWRlYy10aHJlYWRzXSwgW3VzZSBERUMgQWxwaGEvT1NGMSB0aHJlYWQtc2FmZSBsaWJyYXJpZXNdKSwKIFsKIEFDX01TR19SRVNVTFQoJHdpdGh2YWwpCiBMRExBU1Q9LXRocmVhZHMKQEAgLTIxMDAsMTIgKzIxNzMsMTIgQEAKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXRocmVhZHMpCiBkbmwgcXVhZHJpZ3JhcGhzICJAPDpAIiBhbmQgIkA6PkAiIHByb2R1Y2UgIlsiIGFuZCAiXSIgaW4gdGhlIG91dHB1dAogQUNfQVJHX1dJVEgodGhyZWFkcywKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aChvdXQpLXRocmVhZHNAPDpAPURJUkVDVE9SWUA6PkAsIGRpc2FibGUvZW5hYmxlIHRocmVhZCBzdXBwb3J0KSkKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgob3V0KS10aHJlYWRzQDw6QD1ESVJFQ1RPUllAOj5AXSwgW2Rpc2FibGUvZW5hYmxlIHRocmVhZCBzdXBwb3J0XSkpCiAKICMgLS13aXRoLXRocmVhZCBpcyBkZXByZWNhdGVkLCBidXQgY2hlY2sgZm9yIGl0IGFueXdheQogZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKIEFDX0FSR19XSVRIKHRocmVhZCwKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aChvdXQpLXRocmVhZEA8OkA9RElSRUNUT1JZQDo+QCwgZGVwcmVjYXRlZDsgdXNlIC0td2l0aChvdXQpLXRocmVhZHMpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aChvdXQpLXRocmVhZEA8OkA9RElSRUNUT1JZQDo+QF0sIFtkZXByZWNhdGVkOyB1c2UgLS13aXRoKG91dCktdGhyZWFkc10pLAogICAgICAgICAgICAgW3dpdGhfdGhyZWFkcz0kd2l0aF90aHJlYWRdKQogCiBpZiB0ZXN0IC16ICIkd2l0aF90aHJlYWRzIgpAQCAtMjE4Niw3ICsyMjU5LDcgQEAKICAgICBUSFJFQURPQko9IlB5dGhvbi90aHJlYWQubyJdLFsKICAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1wdGgpCiAgICAgQUNfQVJHX1dJVEgoW3B0aF0sCi0gICAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLXB0aCwgdXNlIEdOVSBwdGggdGhyZWFkaW5nIGxpYnJhcmllcyksCisgICAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wdGhdLCBbdXNlIEdOVSBwdGggdGhyZWFkaW5nIGxpYnJhcmllc10pLAogICAgICAgICAgICAgICAgIFtBQ19NU0dfUkVTVUxUKCR3aXRodmFsKQogICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtXSVRIX1RIUkVBRF0pCiAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfUFRIXSwgMSwKQEAgLTIyMDEsMTAgKzIyNzQsMTAgQEAKICAgICBfbGlicz0kTElCUwogICAgIExJQlM9IiRMSUJTIC1scHRocmVhZCIKICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwdGhyZWFkX2NyZWF0ZSBpbiAtbHB0aHJlYWRdKQotICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8cHRocmVhZC5oPgorICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8cHRocmVhZC5oPgogCi12b2lkICogc3RhcnRfcm91dGluZSAodm9pZCAqYXJnKSB7IGV4aXQgKDApOyB9XSwgWwotcHRocmVhZF9jcmVhdGUgKE5VTEwsIE5VTEwsIHN0YXJ0X3JvdXRpbmUsIE5VTEwpXSwgWwordm9pZCAqIHN0YXJ0X3JvdXRpbmUgKHZvaWQgKmFyZykgeyBleGl0ICgwKTsgfV1dLCBbWworcHRocmVhZF9jcmVhdGUgKE5VTEwsIE5VTEwsIHN0YXJ0X3JvdXRpbmUsIE5VTEwpXV0pXSxbCiAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCiAgICAgQUNfREVGSU5FKFdJVEhfVEhSRUFEKQogICAgIHBvc2l4X3RocmVhZHM9eWVzCkBAIC0yMjcyLDE5ICsyMzQ1LDIyIEBACiAgICAgICAjIEJ1ZyA2NjI3ODc6IFVzaW5nIHNlbWFwaG9yZXMgY2F1c2VzIHVuZXhwbGljYWJsZSBoYW5ncyBvbiBTb2xhcmlzIDguCiAgICAgICBjYXNlICAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KICAgU3VuT1MvNS42KSBBQ19ERUZJTkUoSEFWRV9QVEhSRUFEX0RFU1RSVUNUT1IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgIERlZmluZWQgZm9yIFNvbGFyaXMgMi42IGJ1ZyBpbiBwdGhyZWFkIGhlYWRlci4pCisgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmVkIGZvciBTb2xhcmlzIDIuNiBidWcgaW4gcHRocmVhZCBoZWFkZXIuXSkKIAkJICAgICAgIDs7CiAgICAgICBTdW5PUy81LjgpIEFDX0RFRklORShIQVZFX0JST0tFTl9QT1NJWF9TRU1BUEhPUkVTLCAxLAotCQkgICAgICAgRGVmaW5lIGlmIHRoZSBQb3NpeCBzZW1hcGhvcmVzIGRvIG5vdCB3b3JrIG9uIHlvdXIgc3lzdGVtKQorCQkgICAgICAgW0RlZmluZSBpZiB0aGUgUG9zaXggc2VtYXBob3JlcyBkbyBub3Qgd29yayBvbiB5b3VyIHN5c3RlbV0pCiAJCSAgICAgICA7OwogICAgICAgQUlYLzUpIEFDX0RFRklORShIQVZFX0JST0tFTl9QT1NJWF9TRU1BUEhPUkVTLCAxLAotCQkgICAgICAgRGVmaW5lIGlmIHRoZSBQb3NpeCBzZW1hcGhvcmVzIGRvIG5vdCB3b3JrIG9uIHlvdXIgc3lzdGVtKQorCQkgICAgICAgW0RlZmluZSBpZiB0aGUgUG9zaXggc2VtYXBob3JlcyBkbyBub3Qgd29yayBvbiB5b3VyIHN5c3RlbV0pCiAJCSAgICAgICA7OworICAgICAgQUlYLzYpIEFDX0RFRklORShIQVZFX0JST0tFTl9QT1NJWF9TRU1BUEhPUkVTLCAxLAorICAgICAgICAgICAgICAgICAgICAgIERlZmluZSBpZiB0aGUgUG9zaXggc2VtYXBob3JlcyBkbyBub3Qgd29yayBvbiB5b3VyIHN5c3RlbSkKKyAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgZXNhYwogCiAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgUFRIUkVBRF9TQ09QRV9TWVNURU0gaXMgc3VwcG9ydGVkKQogICAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X3B0aHJlYWRfc3lzdGVtX3N1cHBvcnRlZCwKLSAgICAgIFtBQ19UUllfUlVOKFsjaW5jbHVkZSA8cHRocmVhZC5oPgorICAgICAgW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbI2luY2x1ZGUgPHB0aHJlYWQuaD4KICAgICAgIHZvaWQgKmZvbyh2b2lkICpwYXJtKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgfQpAQCAtMjI5NSwxMCArMjM3MSwxMCBAQAogICAgICAgICBpZiAocHRocmVhZF9hdHRyX3NldHNjb3BlKCZhdHRyLCBQVEhSRUFEX1NDT1BFX1NZU1RFTSkpIGV4aXQoLTEpOwogICAgICAgICBpZiAocHRocmVhZF9jcmVhdGUoJmlkLCAmYXR0ciwgZm9vLCBOVUxMKSkgZXhpdCgtMSk7CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgICB9XSwKLSAgICAgIGFjX2N2X3B0aHJlYWRfc3lzdGVtX3N1cHBvcnRlZD15ZXMsCi0gICAgICBhY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQ9bm8sCi0gICAgICBhY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQ9bm8pCisgICAgICB9XV0pXSwKKyAgICAgIFthY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQ9eWVzXSwKKyAgICAgIFthY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQ9bm9dLAorICAgICAgW2FjX2N2X3B0aHJlYWRfc3lzdGVtX3N1cHBvcnRlZD1ub10pCiAgICAgICBdKQogICAgICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfcHRocmVhZF9zeXN0ZW1fc3VwcG9ydGVkKQogICAgICAgaWYgdGVzdCAiJGFjX2N2X3B0aHJlYWRfc3lzdGVtX3N1cHBvcnRlZCIgPSAieWVzIjsgdGhlbgpAQCAtMjMzMyw3ICsyNDA5LDcgQEAKIAogWwogZG5sIHRoZSBjaGVjayBkb2VzIG5vdCB3b3JrIG9uIGNyb3NzIGNvbXBpbGF0aW9uIGNhc2UuLi4KLSAgQUNfVFJZX1JVTihbIC8qIEFGX0lORVQ2IGF2YWlsYWJsZSBjaGVjayAqLworICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWyAvKiBBRl9JTkVUNiBhdmFpbGFibGUgY2hlY2sgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiBtYWluKCkKQEAgLTIzNDMsMjUgKzI0MTksMzEgQEAKICBlbHNlCiAgICBleGl0KDApOwogfQotXSwKK11dKV0sWwogICBBQ19NU0dfUkVTVUxUKHllcykKLSAgaXB2Nj15ZXMsCi0gIEFDX01TR19SRVNVTFQobm8pCi0gIGlwdjY9bm8sCisgIGlwdjY9eWVzCitdLFsKICAgQUNfTVNHX1JFU1VMVChubykKICAgaXB2Nj1ubwotKQorXSxbCisgIEFDX01TR19SRVNVTFQobm8pCisgIGlwdjY9bm8KK10pCiAKIGlmIHRlc3QgIiRpcHY2IiA9ICJ5ZXMiOyB0aGVuCiAJQUNfTVNHX0NIRUNLSU5HKGlmIFJGQzI1NTMgQVBJIGlzIGF2YWlsYWJsZSkKLQlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dLAotCVtzdHJ1Y3Qgc29ja2FkZHJfaW42IHg7Ci14LnNpbjZfc2NvcGVfaWQ7XSwKLQkJQUNfTVNHX1JFU1VMVCh5ZXMpCi0JCWlwdjY9eWVzLAotCQlBQ19NU0dfUkVTVUxUKG5vLCBJUHY2IGRpc2FibGVkKQotCQlpcHY2PW5vKQorCUFDX0NPTVBJTEVfSUZFTFNFKFsKKwkgIEFDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XV0sCisJCQkgIFtbc3RydWN0IHNvY2thZGRyX2luNiB4OworCQkJICAgIHguc2luNl9zY29wZV9pZDtdXSkKKwldLFsKKwkgIEFDX01TR19SRVNVTFQoeWVzKQorCSAgaXB2Nj15ZXMKKwldLFsKKwkgIEFDX01TR19SRVNVTFQobm8sIElQdjYgZGlzYWJsZWQpCisJICBpcHY2PW5vCisJXSkKIGZpCiAKIGlmIHRlc3QgIiRpcHY2IiA9ICJ5ZXMiOyB0aGVuCkBAIC0yNDIwLDcgKzI1MDIsNyBAQAogCQkJOzsKIAkJc29sYXJpcykKIAkJCWlmIHRlc3QgLWYgL2V0Yy9uZXRjb25maWc7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgL3Vzci94cGc0L2Jpbi9ncmVwIC1xIHRjcDYgL2V0Yy9uZXRjb25maWc7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgJEdSRVAgLXEgdGNwNiAvZXRjL25ldGNvbmZpZzsgdGhlbgogCQkJCWlwdjZ0eXBlPSRpCiAJCQkJaXB2NnRyeWxpYmM9eWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCkBAIC0yNDgyLDE2ICsyNTY0LDE5IEBACiBmaQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIE9TWCAxMC41IFNESyBvciBsYXRlcikKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPl0sIEZTSU9SZWZOdW0gZlJlZiA9IDAsCi0gIEFDX0RFRklORShIQVZFX09TWDEwNV9TREssIDEsIERlZmluZSBpZiBjb21waWxpbmcgdXNpbmcgTWFjT1MgWCAxMC41IFNESyBvciBsYXRlci4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKK0FDX0NPTVBJTEVfSUZFTFNFKFsKKyAgQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD5dXSwgW1tGU0lPUmVmTnVtIGZSZWYgPSAwXV0pCitdLFsKKyAgQUNfREVGSU5FKEhBVkVfT1NYMTA1X1NESywgMSwgW0RlZmluZSBpZiBjb21waWxpbmcgdXNpbmcgTWFjT1MgWCAxMC41IFNESyBvciBsYXRlci5dKQorICBBQ19NU0dfUkVTVUxUKHllcykKK10sWwogICBBQ19NU0dfUkVTVUxUKG5vKQotKQorXSkKIAogIyBDaGVjayBmb3IgLS13aXRoLWRvYy1zdHJpbmdzCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1kb2Mtc3RyaW5ncykKIEFDX0FSR19XSVRIKGRvYy1zdHJpbmdzLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoKG91dCktZG9jLXN0cmluZ3MsIGRpc2FibGUvZW5hYmxlIGRvY3VtZW50YXRpb24gc3RyaW5ncykpCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktZG9jLXN0cmluZ3NdLCBbZGlzYWJsZS9lbmFibGUgZG9jdW1lbnRhdGlvbiBzdHJpbmdzXSkpCiAKIGlmIHRlc3QgLXogIiR3aXRoX2RvY19zdHJpbmdzIgogdGhlbiB3aXRoX2RvY19zdHJpbmdzPSJ5ZXMiCkBAIC0yNTA2LDcgKzI1OTEsNyBAQAogIyBDaGVjayBmb3IgUHl0aG9uLXNwZWNpZmljIG1hbGxvYyBzdXBwb3J0CiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC10c2MpCiBBQ19BUkdfV0lUSCh0c2MsCi1bICAtLXdpdGgob3V0KS10c2MgICAgICAgICBlbmFibGUvZGlzYWJsZSB0aW1lc3RhbXAgY291bnRlciBwcm9maWxlXSwgWworCSAgICBBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktdHNjXSxbZW5hYmxlL2Rpc2FibGUgdGltZXN0YW1wIGNvdW50ZXIgcHJvZmlsZV0pLFsKIGlmIHRlc3QgIiR3aXRodmFsIiAhPSBubwogdGhlbiAKICAgQUNfREVGSU5FKFdJVEhfVFNDLCAxLCAKQEAgLTI1MTksNyArMjYwNCw3IEBACiAjIENoZWNrIGZvciBQeXRob24tc3BlY2lmaWMgbWFsbG9jIHN1cHBvcnQKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXB5bWFsbG9jKQogQUNfQVJHX1dJVEgocHltYWxsb2MsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgob3V0KS1weW1hbGxvYywgZGlzYWJsZS9lbmFibGUgc3BlY2lhbGl6ZWQgbWFsbG9jcykpCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktcHltYWxsb2NdLCBbZGlzYWJsZS9lbmFibGUgc3BlY2lhbGl6ZWQgbWFsbG9jc10pKQogCiBpZiB0ZXN0IC16ICIkd2l0aF9weW1hbGxvYyIKIHRoZW4gd2l0aF9weW1hbGxvYz0ieWVzIgpAQCAtMjUzMSwxMCArMjYxNiwyMyBAQAogZmkKIEFDX01TR19SRVNVTFQoJHdpdGhfcHltYWxsb2MpCiAKKyMgQ2hlY2sgZm9yIFZhbGdyaW5kIHN1cHBvcnQKK0FDX01TR19DSEVDS0lORyhbZm9yIC0td2l0aC12YWxncmluZF0pCitBQ19BUkdfV0lUSChbdmFsZ3JpbmRdLAorICBBU19IRUxQX1NUUklORyhbLS13aXRoLXZhbGdyaW5kXSwgW0VuYWJsZSBWYWxncmluZCBzdXBwb3J0XSksLAorICB3aXRoX3ZhbGdyaW5kPW5vKQorQUNfTVNHX1JFU1VMVChbJHdpdGhfdmFsZ3JpbmRdKQoraWYgdGVzdCAiJHdpdGhfdmFsZ3JpbmQiICE9IG5vOyB0aGVuCisgICAgQUNfQ0hFQ0tfSEVBREVSKFt2YWxncmluZC92YWxncmluZC5oXSwKKyAgICAgIFtBQ19ERUZJTkUoW1dJVEhfVkFMR1JJTkRdLCAxLCBbRGVmaW5lIGlmIHlvdSB3YW50IHB5bWFsbG9jIHRvIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyB1bmRlciB2YWxncmluZF0pXSwKKyAgICAgIFtBQ19NU0dfRVJST1IoW1ZhbGdyaW5kIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBoZWFkZXJzIG5vdCBhdmFpbGFibGVdKV0KKyAgICApCitmaQorCiAjIENoZWNrIGZvciAtLXdpdGgtd2N0eXBlLWZ1bmN0aW9ucwogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtd2N0eXBlLWZ1bmN0aW9ucykKIEFDX0FSR19XSVRIKHdjdHlwZS1mdW5jdGlvbnMsIAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMsIHVzZSB3Y3R5cGUuaCBmdW5jdGlvbnMpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC13Y3R5cGUtZnVuY3Rpb25zXSwgW3VzZSB3Y3R5cGUuaCBmdW5jdGlvbnNdKSwKIFsKIGlmIHRlc3QgIiR3aXRodmFsIiAhPSBubwogdGhlbiAKQEAgLTI2MDUsMTIgKzI3MDMsMTUgQEAKIEFDX0NIRUNLX0ZVTkNTKGFsYXJtIHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAogIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBleGVjdiBmY2htb2QgZmNob3duIGZvcmsgZnBhdGhjb25mIGZ0aW1lIGZ0cnVuY2F0ZSBcCiAgZ2FpX3N0cmVycm9yIGdldGdyb3VwcyBnZXRsb2dpbiBnZXRsb2FkYXZnIGdldHBlZXJuYW1lIGdldHBnaWQgZ2V0cGlkIFwKLSBnZXRwcmlvcml0eSBnZXRwd2VudCBnZXRzcG5hbSBnZXRzcGVudCBnZXRzaWQgZ2V0d2QgXAotIGtpbGwga2lsbHBnIGxjaG1vZCBsY2hvd24gbHN0YXQgbWtmaWZvIG1rbm9kIG1rdGltZSBcCisgZ2V0cHJpb3JpdHkgZ2V0cmVzdWlkIGdldHJlc2dpZCBnZXRwd2VudCBnZXRzcG5hbSBnZXRzcGVudCBnZXRzaWQgZ2V0d2QgXAorIGluaXRncm91cHMga2lsbCBraWxscGcgbGNobW9kIGxjaG93biBsc3RhdCBta2ZpZm8gbWtub2QgbWt0aW1lIFwKICBtcmVtYXAgbmljZSBwYXRoY29uZiBwYXVzZSBwbG9jayBwb2xsIHB0aHJlYWRfaW5pdCBcCiAgcHV0ZW52IHJlYWRsaW5rIHJlYWxwYXRoIFwKLSBzZWxlY3Qgc2V0ZWdpZCBzZXRldWlkIHNldGdpZCBcCisgc2VsZWN0IHNlbV9vcGVuIHNlbV90aW1lZHdhaXQgc2VtX2dldHZhbHVlIHNlbV91bmxpbmsgc2V0ZWdpZCBzZXRldWlkIFwKKyBzZXRnaWQgXAogIHNldGxvY2FsZSBzZXRyZWdpZCBzZXRyZXVpZCBzZXRzaWQgc2V0cGdpZCBzZXRwZ3JwIHNldHVpZCBzZXR2YnVmIHNucHJpbnRmIFwKKyBzZXRsb2NhbGUgc2V0cmVnaWQgc2V0cmV1aWQgc2V0cmVzdWlkIHNldHJlc2dpZCBcCisgc2V0c2lkIHNldHBnaWQgc2V0cGdycCBzZXR1aWQgc2V0dmJ1ZiBzbnByaW50ZiBcCiAgc2lnYWN0aW9uIHNpZ2ludGVycnVwdCBzaWdyZWxzZSBzdHJmdGltZSBcCiAgc3lzY29uZiB0Y2dldHBncnAgdGNzZXRwZ3JwIHRlbXBuYW0gdGltZWdtIHRpbWVzIHRtcGZpbGUgdG1wbmFtIHRtcG5hbV9yIFwKICB0cnVuY2F0ZSB1bmFtZSB1bnNldGVudiB1dGltZXMgd2FpdHBpZCB3YWl0MyB3YWl0NCB3Y3Njb2xsIF9nZXRwdHkpCkBAIC0yNjE4LDU2ICsyNzE5LDU2IEBACiAjIEZvciBzb21lIGZ1bmN0aW9ucywgaGF2aW5nIGEgZGVmaW5pdGlvbiBpcyBub3Qgc3VmZmljaWVudCwgc2luY2UKICMgd2Ugd2FudCB0byB0YWtlIHRoZWlyIGFkZHJlc3MuCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGNocm9vdCkKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgdm9pZCAqeD1jaHJvb3QsCi0gIEFDX0RFRklORShIQVZFX0NIUk9PVCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnY2hyb290JyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbdm9pZCAqeD1jaHJvb3RdXSldLAorICBbQUNfREVGSU5FKEhBVkVfQ0hST09ULCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdjaHJvb3QnIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIEFDX01TR19DSEVDS0lORyhmb3IgbGluaykKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgdm9pZCAqeD1saW5rLAotICBBQ19ERUZJTkUoSEFWRV9MSU5LLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsaW5rJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbdm9pZCAqeD1saW5rXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0xJTkssIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2xpbmsnIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIEFDX01TR19DSEVDS0lORyhmb3Igc3ltbGluaykKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgdm9pZCAqeD1zeW1saW5rLAotICBBQ19ERUZJTkUoSEFWRV9TWU1MSU5LLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdzeW1saW5rJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbdm9pZCAqeD1zeW1saW5rXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX1NZTUxJTkssIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3N5bWxpbmsnIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIEFDX01TR19DSEVDS0lORyhmb3IgZmNoZGlyKQotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDx1bmlzdGQuaD5dLCB2b2lkICp4PWZjaGRpciwKLSAgQUNfREVGSU5FKEhBVkVfRkNIRElSLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdmY2hkaXInIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDx1bmlzdGQuaD5dXSwgW1t2b2lkICp4PWZjaGRpcl1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9GQ0hESVIsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ZjaGRpcicgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQogQUNfTVNHX0NIRUNLSU5HKGZvciBmc3luYykKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgdm9pZCAqeD1mc3luYywKLSAgQUNfREVGSU5FKEhBVkVfRlNZTkMsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ZzeW5jJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbdm9pZCAqeD1mc3luY11dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9GU1lOQywgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZnN5bmMnIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIEFDX01TR19DSEVDS0lORyhmb3IgZmRhdGFzeW5jKQotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDx1bmlzdGQuaD5dLCB2b2lkICp4PWZkYXRhc3luYywKLSAgQUNfREVGSU5FKEhBVkVfRkRBVEFTWU5DLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdmZGF0YXN5bmMnIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDx1bmlzdGQuaD5dXSwgW1t2b2lkICp4PWZkYXRhc3luY11dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9GREFUQVNZTkMsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ZkYXRhc3luYycgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQogQUNfTVNHX0NIRUNLSU5HKGZvciBlcG9sbCkKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+XSwgdm9pZCAqeD1lcG9sbF9jcmVhdGUsCi0gIEFDX0RFRklORShIQVZFX0VQT0xMLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdlcG9sbCcgZnVuY3Rpb25zLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvZXBvbGwuaD5dXSwgW1t2b2lkICp4PWVwb2xsX2NyZWF0ZV1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9FUE9MTCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGwnIGZ1bmN0aW9ucy4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGtxdWV1ZSkKLUFDX1RSWV9DT01QSUxFKFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvZXZlbnQuaD4KLSAgICBdLCBpbnQgeD1rcXVldWUoKSwKLSAgQUNfREVGSU5FKEhBVkVfS1FVRVVFLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdrcXVldWUnIGZ1bmN0aW9ucy4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKKyAgICBdXSwgW1tpbnQgeD1rcXVldWUoKV1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9LUVVFVUUsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2txdWV1ZScgZnVuY3Rpb25zLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKICMgT24gc29tZSBzeXN0ZW1zIChlZy4gRnJlZUJTRCA1KSwgd2Ugd291bGQgZmluZCBhIGRlZmluaXRpb24gb2YgdGhlCiAjIGZ1bmN0aW9ucyBjdGVybWlkX3IsIHNldGdyb3VwcyBpbiB0aGUgbGlicmFyeSwgYnV0IG5vIHByb3RvdHlwZQogIyAoZS5nLiBiZWNhdXNlIHdlIHVzZSBfWE9QRU5fU09VUkNFKS4gU2VlIHdoZXRoZXIgd2UgY2FuIHRha2UgdGhlaXIKQEAgLTI2NzUsMzQgKzI3NzYsNDEgQEAKICMgYmVjYXVzZSBvZiB0aGUgbWlzc2luZyBwcm90b3R5cGVzLgogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGN0ZXJtaWRfcikKLUFDX1RSWV9DT01QSUxFKFsKLSNpbmNsdWRlICJjb25mZGVmcy5oIiAKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpbmNsdWRlIDxzdGRpby5oPgotXSwgdm9pZCogcCA9IGN0ZXJtaWRfciwKLSAgQUNfREVGSU5FKEhBVkVfQ1RFUk1JRF9SLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdjdGVybWlkX3InIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorXV0sIFtbdm9pZCogcCA9IGN0ZXJtaWRfcl1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9DVEVSTUlEX1IsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2N0ZXJtaWRfcicgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQogCi1BQ19NU0dfQ0hFQ0tJTkcoZm9yIGZsb2NrKQotQUNfVFJZX0NPTVBJTEUoWwotI2luY2x1ZGUgImNvbmZkZWZzLmgiIAotI2luY2x1ZGUgPHN5cy9maWxlLmg+Ci1dLCB2b2lkKiBwID0gZmxvY2ssCi0gIEFDX0RFRklORShIQVZFX0ZMT0NLLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdmbG9jaycgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitBQ19DQUNIRV9DSEVDSyhbZm9yIGZsb2NrIGRlY2xhcmF0aW9uXSwgW2FjX2N2X2Zsb2NrX2RlY2xdLAorICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgIFsjaW5jbHVkZSA8c3lzL2ZpbGUuaD5dLAorICAgICAgW3ZvaWQqIHAgPSBmbG9ja10KKyAgICApXSwKKyAgICBbYWNfY3ZfZmxvY2tfZGVjbD15ZXNdLAorICAgIFthY19jdl9mbG9ja19kZWNsPW5vXQorICApCitdKQoraWYgdGVzdCAieCR7YWNfY3ZfZmxvY2tfZGVjbH0iID0geHllczsgdGhlbgorICBBQ19DSEVDS19GVU5DUyhmbG9jaywsCisgICAgQUNfQ0hFQ0tfTElCKGJzZCxmbG9jaywKKyAgICAgIFtBQ19ERUZJTkUoSEFWRV9GTE9DSykKKyAgICAgICBBQ19ERUZJTkUoRkxPQ0tfTkVFRFNfTElCQlNELCAxLCBEZWZpbmUgaWYgZmxvY2sgbmVlZHMgdG8gYmUgbGlua2VkIHdpdGggYnNkIGxpYnJhcnkuKQorICAgIF0pCisgICkKK2ZpCiAKIEFDX01TR19DSEVDS0lORyhmb3IgZ2V0cGFnZXNpemUpCi1BQ19UUllfQ09NUElMRShbCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIgCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci1dLCB2b2lkKiBwID0gZ2V0cGFnZXNpemUsCi0gIEFDX0RFRklORShIQVZFX0dFVFBBR0VTSVpFLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdnZXRwYWdlc2l6ZScgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitdXSwgW1t2b2lkKiBwID0gZ2V0cGFnZXNpemVdXSldLAorICBbQUNfREVGSU5FKEhBVkVfR0VUUEFHRVNJWkUsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2dldHBhZ2VzaXplJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiAKIGRubCBjaGVjayBmb3IgdHJ1ZQogQUNfQ0hFQ0tfUFJPR1MoVFJVRSwgdHJ1ZSwgL2Jpbi90cnVlKQpAQCAtMjcxNiw3ICsyODI0LDcgQEAKICMgT24gVHJ1NjQsIGNoZmxhZ3Mgc2VlbXMgdG8gYmUgcHJlc2VudCwgYnV0IGNhbGxpbmcgaXQgd2lsbAogIyBleGl0IFB5dGhvbgogQUNfQ0FDSEVfQ0hFQ0soW2ZvciBjaGZsYWdzXSwgW2FjX2N2X2hhdmVfY2hmbGFnc10sIFtkbmwKLUFDX1RSWV9SVU4oW1sKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbWwogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pCkBAIC0yNzI1LDE5ICsyODMzLDIwIEBACiAgICAgcmV0dXJuIDE7CiAgIHJldHVybiAwOwogfQotXV0sIGFjX2N2X2hhdmVfY2hmbGFncz15ZXMsCi0gICBhY19jdl9oYXZlX2NoZmxhZ3M9bm8sCi0gICBhY19jdl9oYXZlX2NoZmxhZ3M9Y3Jvc3MpCitdXV0pXSwKK1thY19jdl9oYXZlX2NoZmxhZ3M9eWVzXSwKK1thY19jdl9oYXZlX2NoZmxhZ3M9bm9dLAorW2FjX2N2X2hhdmVfY2hmbGFncz1jcm9zc10pCiBdKQogaWYgdGVzdCAiJGFjX2N2X2hhdmVfY2hmbGFncyIgPSBjcm9zcyA7IHRoZW4KICAgQUNfQ0hFQ0tfRlVOQyhbY2hmbGFnc10sIFthY19jdl9oYXZlX2NoZmxhZ3M9InllcyJdLCBbYWNfY3ZfaGF2ZV9jaGZsYWdzPSJubyJdKQogZmkKIGlmIHRlc3QgIiRhY19jdl9oYXZlX2NoZmxhZ3MiID0geWVzIDsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9DSEZMQUdTLCAxLCBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNoZmxhZ3MnIGZ1bmN0aW9uLikKKyAgQUNfREVGSU5FKEhBVkVfQ0hGTEFHUywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2hmbGFncycgZnVuY3Rpb24uXSkKIGZpCiAKIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGNoZmxhZ3NdLCBbYWNfY3ZfaGF2ZV9sY2hmbGFnc10sIFtkbmwKLUFDX1RSWV9SVU4oW1sKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbWwogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pCkBAIC0yNzQ2LDE1ICsyODU1LDEzIEBACiAgICAgcmV0dXJuIDE7CiAgIHJldHVybiAwOwogfQotXV0sIGFjX2N2X2hhdmVfbGNoZmxhZ3M9eWVzLAotICAgYWNfY3ZfaGF2ZV9sY2hmbGFncz1ubywKLSAgIGFjX2N2X2hhdmVfbGNoZmxhZ3M9Y3Jvc3MpCitdXV0pXSxbYWNfY3ZfaGF2ZV9sY2hmbGFncz15ZXNdLFthY19jdl9oYXZlX2xjaGZsYWdzPW5vXSxbYWNfY3ZfaGF2ZV9sY2hmbGFncz1jcm9zc10pCiBdKQogaWYgdGVzdCAiJGFjX2N2X2hhdmVfbGNoZmxhZ3MiID0gY3Jvc3MgOyB0aGVuCiAgIEFDX0NIRUNLX0ZVTkMoW2xjaGZsYWdzXSwgW2FjX2N2X2hhdmVfbGNoZmxhZ3M9InllcyJdLCBbYWNfY3ZfaGF2ZV9sY2hmbGFncz0ibm8iXSkKIGZpCiBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9sY2hmbGFncyIgPSB5ZXMgOyB0aGVuCi0gIEFDX0RFRklORShIQVZFX0xDSEZMQUdTLCAxLCBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxjaGZsYWdzJyBmdW5jdGlvbi4pCisgIEFDX0RFRklORShIQVZFX0xDSEZMQUdTLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsY2hmbGFncycgZnVuY3Rpb24uXSkKIGZpCiAKIGRubCBDaGVjayBpZiBzeXN0ZW0gemxpYiBoYXMgKkNvcHkoKSBmdW5jdGlvbnMKQEAgLTI3NzcsNyArMjg4NCw3IEBACiAJOzsKIGVzYWMKIAotQUNfQ0hFQ0tfTElCKHosIGluZmxhdGVDb3B5LCBBQ19ERUZJTkUoSEFWRV9aTElCX0NPUFksIDEsIERlZmluZSBpZiB0aGUgemxpYiBsaWJyYXJ5IGhhcyBpbmZsYXRlQ29weSkpCitBQ19DSEVDS19MSUIoeiwgaW5mbGF0ZUNvcHksIEFDX0RFRklORShIQVZFX1pMSUJfQ09QWSwgMSwgW0RlZmluZSBpZiB0aGUgemxpYiBsaWJyYXJ5IGhhcyBpbmZsYXRlQ29weV0pKQogCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogRGFyd2luLyopIApAQCAtMjc4Nyw1NSArMjg5NCw1MCBAQAogZXNhYwogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGhzdHJlcnJvcikKLUFDX1RSWV9MSU5LKFsKLSNpbmNsdWRlICJjb25mZGVmcy5oIiAKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpbmNsdWRlIDxuZXRkYi5oPgotXSwgdm9pZCogcCA9IGhzdHJlcnJvcjsgaHN0cmVycm9yKDApLAotICBBQ19ERUZJTkUoSEFWRV9IU1RSRVJST1IsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2hzdHJlcnJvcicgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitdXSwgW1t2b2lkKiBwID0gaHN0cmVycm9yOyBoc3RyZXJyb3IoMCldXSldLAorICBbQUNfREVGSU5FKEhBVkVfSFNUUkVSUk9SLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdoc3RyZXJyb3InIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBpbmV0X2F0b24pCi1BQ19UUllfTElOSyhbCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIgCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLV0sIHZvaWQqIHAgPSBpbmV0X2F0b247aW5ldF9hdG9uKDAsMCksCi0gIEFDX0RFRklORShIQVZFX0lORVRfQVRPTiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW5ldF9hdG9uJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK11dLCBbW3ZvaWQqIHAgPSBpbmV0X2F0b247aW5ldF9hdG9uKDAsMCldXSldLAorICBbQUNfREVGSU5FKEhBVkVfSU5FVF9BVE9OLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbmV0X2F0b24nIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBpbmV0X3B0b24pCi1BQ19UUllfQ09NUElMRShbCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIgCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLV0sIHZvaWQqIHAgPSBpbmV0X3B0b24sCi0gIEFDX0RFRklORShIQVZFX0lORVRfUFRPTiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW5ldF9wdG9uJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK11dLCBbW3ZvaWQqIHAgPSBpbmV0X3B0b25dXSldLAorICBbQUNfREVGSU5FKEhBVkVfSU5FVF9QVE9OLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbmV0X3B0b24nIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIAogIyBPbiBzb21lIHN5c3RlbXMsIHNldGdyb3VwcyBpcyBpbiB1bmlzdGQuaCwgb24gb3RoZXJzLCBpbiBncnAuaAogQUNfTVNHX0NIRUNLSU5HKGZvciBzZXRncm91cHMpCi1BQ19UUllfQ09NUElMRShbCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIgCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaWZkZWYgSEFWRV9HUlBfSAogI2luY2x1ZGUgPGdycC5oPgogI2VuZGlmCi1dLCAKLXZvaWQqIHAgPSBzZXRncm91cHMsCi0gIEFDX0RFRklORShIQVZFX1NFVEdST1VQUywgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnc2V0Z3JvdXBzJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK11dLCBbW3ZvaWQqIHAgPSBzZXRncm91cHNdXSldLAorICBbQUNfREVGSU5FKEhBVkVfU0VUR1JPVVBTLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdzZXRncm91cHMnIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIAogIyBjaGVjayBmb3Igb3BlbnB0eSBhbmQgZm9ya3B0eQogCkBAIC0yODYwLDMwICsyOTYyLDI3IEBACiAKIEFDX1JFUExBQ0VfRlVOQ1MoZHVwMiBnZXRjd2Qgc3RyZHVwKQogQUNfQ0hFQ0tfRlVOQ1MoZ2V0cGdycCwgCi0gIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgCi0gICBbZ2V0cGdycCgwKTtdLCAKLSAgIEFDX0RFRklORShHRVRQR1JQX0hBVkVfQVJHLCAxLAotICAgW0RlZmluZSBpZiBnZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgZ2V0cGdycCgwKS5dKQotICkKKyAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDx1bmlzdGQuaD5dXSwgW1tnZXRwZ3JwKDApO11dKV0sCisgICAgW0FDX0RFRklORShHRVRQR1JQX0hBVkVfQVJHLCAxLCBbRGVmaW5lIGlmIGdldHBncnAoKSBtdXN0IGJlIGNhbGxlZCBhcyBnZXRwZ3JwKDApLl0pXSwKKyAgICBbXSkKICkKIEFDX0NIRUNLX0ZVTkNTKHNldHBncnAsCi0gIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwKLSAgICBbc2V0cGdycCgwLDApO10sCi0gICAgQUNfREVGSU5FKFNFVFBHUlBfSEFWRV9BUkcsIDEsCi0gICAgW0RlZmluZSBpZiBzZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgc2V0cGdycCgwLCAwKS5dKQotICApCisgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbc2V0cGdycCgwLDApO11dKV0sCisgICAgW0FDX0RFRklORShTRVRQR1JQX0hBVkVfQVJHLCAxLCBbRGVmaW5lIGlmIHNldHBncnAoKSBtdXN0IGJlIGNhbGxlZCBhcyBzZXRwZ3JwKDAsIDApLl0pXSwKKyAgICBbXSkKICkKIEFDX0NIRUNLX0ZVTkNTKGdldHRpbWVvZmRheSwgCi0gIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3RpbWUuaD5dLCAKLSAgICBbZ2V0dGltZW9mZGF5KChzdHJ1Y3QgdGltZXZhbCopMCwoc3RydWN0IHRpbWV6b25lKikwKTtdLCAsCi0gICAgQUNfREVGSU5FKEdFVFRJTUVPRkRBWV9OT19UWiwgMSwKLSAgICBbRGVmaW5lIGlmIGdldHRpbWVvZmRheSgpIGRvZXMgbm90IGhhdmUgc2Vjb25kICh0aW1lem9uZSkgYXJndW1lbnQKLSAgICAgVGhpcyBpcyB0aGUgY2FzZSBvbiBNb3Rvcm9sYSBWNCAoUjQwVjQuMildKQotICApCisgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3RpbWUuaD5dXSwKKyAgCQkJCSAgICAgW1tnZXR0aW1lb2ZkYXkoKHN0cnVjdCB0aW1ldmFsKikwLChzdHJ1Y3QgdGltZXpvbmUqKTApO11dKV0sCisgICAgW10sCisgICAgW0FDX0RFRklORShHRVRUSU1FT0ZEQVlfTk9fVFosIDEsCisgICAgICBbRGVmaW5lIGlmIGdldHRpbWVvZmRheSgpIGRvZXMgbm90IGhhdmUgc2Vjb25kICh0aW1lem9uZSkgYXJndW1lbnQKKyAgICAgICBUaGlzIGlzIHRoZSBjYXNlIG9uIE1vdG9yb2xhIFY0IChSNDBWNC4yKV0pCisgICAgXSkKICkKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBtYWpvciwgbWlub3IsIGFuZCBtYWtlZGV2KQotQUNfVFJZX0xJTksoWworQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2lmIGRlZmluZWQoTUFKT1JfSU5fTUtERVYpCiAjaW5jbHVkZSA8c3lzL21rZGV2Lmg+CiAjZWxpZiBkZWZpbmVkKE1BSk9SX0lOX1NZU01BQ1JPUykKQEAgLTI4OTEsOSArMjk5MCw5IEBACiAjZWxzZQogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCi1dLFsKK11dLCBbWwogICBtYWtlZGV2KG1ham9yKDApLG1pbm9yKDApKTsKLV0sWworXV0pXSxbCiAgIEFDX0RFRklORShIQVZFX0RFVklDRV9NQUNST1MsIDEsCiAJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGV2aWNlIG1hY3Jvcy5dKQogICBBQ19NU0dfUkVTVUxUKHllcykKQEAgLTI5MDQsMjQgKzMwMDMsMjcgQEAKICMgT24gT1NGLzEgVjUuMSwgZ2V0YWRkcmluZm8gaXMgYXZhaWxhYmxlLCBidXQgYSBkZWZpbmUKICMgZm9yIFtub11nZXRhZGRyaW5mbyBpbiBuZXRkYi5oLiAKIEFDX01TR19DSEVDS0lORyhmb3IgZ2V0YWRkcmluZm8pCi1BQ19UUllfTElOSyhbCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPG5ldGRiLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KLV0sWwotZ2V0YWRkcmluZm8oTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci1dLCBbCi1BQ19NU0dfUkVTVUxUKHllcykKLUFDX01TR19DSEVDS0lORyhnZXRhZGRyaW5mbyBidWcpCi1BQ19UUllfUlVOKFsKK11dLCBbW2dldGFkZHJpbmZvKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpO11dKV0sCitbaGF2ZV9nZXRhZGRyaW5mbz15ZXNdLAorW2hhdmVfZ2V0YWRkcmluZm89bm9dKQorQUNfTVNHX1JFU1VMVCgkaGF2ZV9nZXRhZGRyaW5mbykKK2lmIHRlc3QgJGhhdmVfZ2V0YWRkcmluZm8gPSB5ZXMKK3RoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKGdldGFkZHJpbmZvIGJ1ZykKKyAgQUNfQ0FDSEVfVkFMKGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvLAorICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW1sKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXRkYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAKLW1haW4oKQoraW50IG1haW4oKQogewogICBpbnQgcGFzc2l2ZSwgZ2FpZXJyLCBpbmV0NCA9IDAsIGluZXQ2ID0gMDsKICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWksICphaXRvcDsKQEAgLTI5OTMsMjYgKzMwOTUsMjUgQEAKIAogICBpZiAoYWl0b3ApCiAgICAgZnJlZWFkZHJpbmZvKGFpdG9wKTsKLSAgZXhpdCgwKTsKKyAgcmV0dXJuIDA7CiAKICBiYWQ6CiAgIGlmIChhaXRvcCkKICAgICBmcmVlYWRkcmluZm8oYWl0b3ApOwotICBleGl0KDEpOworICByZXR1cm4gMTsKIH0KLV0sCi1BQ19NU0dfUkVTVUxUKGdvb2QpCi1idWdneWdldGFkZHJpbmZvPW5vLAotQUNfTVNHX1JFU1VMVChidWdneSkKLWJ1Z2d5Z2V0YWRkcmluZm89eWVzLAotQUNfTVNHX1JFU1VMVChidWdneSkKLWJ1Z2d5Z2V0YWRkcmluZm89eWVzKV0sIFsKLUFDX01TR19SRVNVTFQobm8pCi1idWdneWdldGFkZHJpbmZvPXllcwotXSkKK11dXSldLAorW2FjX2N2X2J1Z2d5X2dldGFkZHJpbmZvPW5vXSwKK1thY19jdl9idWdneV9nZXRhZGRyaW5mbz15ZXNdLAorW2FjX2N2X2J1Z2d5X2dldGFkZHJpbmZvPXllc10pKQorZmkKIAotaWYgdGVzdCAiJGJ1Z2d5Z2V0YWRkcmluZm8iID0gInllcyI7IHRoZW4KLQlpZiB0ZXN0ICIkaXB2NiIgPSAieWVzIjsgdGhlbgorQUNfTVNHX1JFU1VMVCgkYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm8pCisKK2lmIHRlc3QgJGhhdmVfZ2V0YWRkcmluZm8gPSBubyAtbyAiJGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvIiA9IHllcwordGhlbgorCWlmIHRlc3QgJGlwdjYgPSB5ZXMKKwl0aGVuCiAJCWVjaG8gJ0ZhdGFsOiBZb3UgbXVzdCBnZXQgd29ya2luZyBnZXRhZGRyaW5mbygpIGZ1bmN0aW9uLicKIAkJZWNobyAnICAgICAgIG9yIHlvdSBjYW4gc3BlY2lmeSAiLS1kaXNhYmxlLWlwdjYiJy4KIAkJZXhpdCAxCkBAIC0zMDIwLDYgKzMxMjEsNyBAQAogZWxzZQogCUFDX0RFRklORShIQVZFX0dFVEFERFJJTkZPLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbi5dKQogZmkKKwogQUNfQ0hFQ0tfRlVOQ1MoZ2V0bmFtZWluZm8pCiAKICMgY2hlY2tzIGZvciBzdHJ1Y3R1cmVzCkBAIC0zMDM0LDEwICszMTM2LDExIEBACiBBQ19TVFJVQ1RfU1RfQkxPQ0tTCiAKIEFDX01TR19DSEVDS0lORyhmb3IgdGltZS5oIHRoYXQgZGVmaW5lcyBhbHR6b25lKQotQUNfQ0FDSEVfVkFMKGFjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmUsCi1bQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDx0aW1lLmg+XSwgW3JldHVybiBhbHR6b25lO10sCi0gIGFjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmU9eWVzLAotICBhY19jdl9oZWFkZXJfdGltZV9hbHR6b25lPW5vKV0pCitBQ19DQUNIRV9WQUwoYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZSxbCisgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dGltZS5oPl1dLCBbW3JldHVybiBhbHR6b25lO11dKV0sCisgICAgW2FjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmU9eWVzXSwKKyAgICBbYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZT1ub10pCisgIF0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9oZWFkZXJfdGltZV9hbHR6b25lKQogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZSA9IHllczsgdGhlbgogICBBQ19ERUZJTkUoSEFWRV9BTFRaT05FLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91ciB0aW1lLmggZGVmaW5lcyBhbHR6b25lLl0pCkBAIC0zMDQ1LDI1ICszMTQ4LDIzIEBACiAKIHdhc19pdF9kZWZpbmVkPW5vCiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBzeXMvc2VsZWN0LmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQpCi1BQ19UUllfQ09NUElMRShbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci1dLCBbO10sIFsKK11dLCBbWztdXSldLFsKICAgQUNfREVGSU5FKFNZU19TRUxFQ1RfV0lUSF9TWVNfVElNRSwgMSwKICAgW0RlZmluZSBpZiAgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvc2VsZWN0Lmg+IGFuZCA8c3lzL3RpbWUuaD4KICAgICh3aGljaCB5b3UgY2FuJ3Qgb24gU0NPIE9EVCAzLjApLl0pIAogICB3YXNfaXRfZGVmaW5lZD15ZXMKLV0pCitdLFtdKQogQUNfTVNHX1JFU1VMVCgkd2FzX2l0X2RlZmluZWQpCiAKIEFDX01TR19DSEVDS0lORyhmb3IgYWRkcmluZm8pCiBBQ19DQUNIRV9WQUwoYWNfY3Zfc3RydWN0X2FkZHJpbmZvLAotQUNfVFJZX0NPTVBJTEUoWwotIwkJaW5jbHVkZSA8bmV0ZGIuaD5dLAotCVtzdHJ1Y3QgYWRkcmluZm8gYV0sCi0JYWNfY3Zfc3RydWN0X2FkZHJpbmZvPXllcywKLQlhY19jdl9zdHJ1Y3RfYWRkcmluZm89bm8pKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxuZXRkYi5oPl1dLCBbW3N0cnVjdCBhZGRyaW5mbyBhXV0pXSwKKyAgW2FjX2N2X3N0cnVjdF9hZGRyaW5mbz15ZXNdLAorICBbYWNfY3Zfc3RydWN0X2FkZHJpbmZvPW5vXSkpCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9zdHJ1Y3RfYWRkcmluZm8pCiBpZiB0ZXN0ICRhY19jdl9zdHJ1Y3RfYWRkcmluZm8gPSB5ZXM7IHRoZW4KIAlBQ19ERUZJTkUoSEFWRV9BRERSSU5GTywgMSwgW3N0cnVjdCBhZGRyaW5mbyAobmV0ZGIuaCldKQpAQCAtMzA3MSwxMiArMzE3MiwxMSBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHNvY2thZGRyX3N0b3JhZ2UpCiBBQ19DQUNIRV9WQUwoYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UsCi1BQ19UUllfQ09NUElMRShbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjCQlpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSMJCWluY2x1ZGUgPHN5cy9zb2NrZXQuaD5dLAotCVtzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzXSwKLQlhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZT15ZXMsCi0JYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9bm8pKQorIwkJaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLCBbW3N0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNdXSldLAorICBbYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9eWVzXSwKKyAgW2FjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPW5vXSkpCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSkKIGlmIHRlc3QgJGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlID0geWVzOyB0aGVuCiAJQUNfREVGSU5FKEhBVkVfU09DS0FERFJfU1RPUkFHRSwgMSwgW3N0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIChzeXMvc29ja2V0LmgpXSkKQEAgLTMwODksMzAgKzMxODksMzMgQEAKIAogd29ya3M9bm8KIEFDX01TR19DSEVDS0lORyhmb3Igd29ya2luZyB2b2xhdGlsZSkKLUFDX1RSWV9DT01QSUxFKFtdLFt2b2xhdGlsZSBpbnQgeDsgeCA9IDA7XSwgd29ya3M9eWVzLCAKLSAgQUNfREVGSU5FKHZvbGF0aWxlLCBbXSwgW0RlZmluZSB0byBlbXB0eSBpZiB0aGUga2V5d29yZCBkb2VzIG5vdCB3b3JrLl0pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbdm9sYXRpbGUgaW50IHg7IHggPSAwO11dKV0sCisgIFt3b3Jrcz15ZXNdLAorICBbQUNfREVGSU5FKHZvbGF0aWxlLCAsIFtEZWZpbmUgdG8gZW1wdHkgaWYgdGhlIGtleXdvcmQgZG9lcyBub3Qgd29yay5dKV0KICkKIEFDX01TR19SRVNVTFQoJHdvcmtzKQogCiB3b3Jrcz1ubwogQUNfTVNHX0NIRUNLSU5HKGZvciB3b3JraW5nIHNpZ25lZCBjaGFyKQotQUNfVFJZX0NPTVBJTEUoW10sIFtzaWduZWQgY2hhciBjO10sIHdvcmtzPXllcywgCi0gIEFDX0RFRklORShzaWduZWQsIFtdLCBbRGVmaW5lIHRvIGVtcHR5IGlmIHRoZSBrZXl3b3JkIGRvZXMgbm90IHdvcmsuXSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tzaWduZWQgY2hhciBjO11dKV0sCisgIFt3b3Jrcz15ZXNdLAorICBbQUNfREVGSU5FKHNpZ25lZCwgLCBbRGVmaW5lIHRvIGVtcHR5IGlmIHRoZSBrZXl3b3JkIGRvZXMgbm90IHdvcmsuXSldCiApCiBBQ19NU0dfUkVTVUxUKCR3b3JrcykKIAogaGF2ZV9wcm90b3R5cGVzPW5vCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHByb3RvdHlwZXMpCi1BQ19UUllfQ09NUElMRShbaW50IGZvbyhpbnQgeCkgeyByZXR1cm4gMDsgfV0sIFtyZXR1cm4gZm9vKDEwKTtdLFsKLSAgQUNfREVGSU5FKEhBVkVfUFJPVE9UWVBFUywgMSwgCi0gICBbRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rpb24gcHJvdG90eXBlXSkgCi0gIGhhdmVfcHJvdG90eXBlcz15ZXMKLV0pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbaW50IGZvbyhpbnQgeCkgeyByZXR1cm4gMDsgfV1dLCBbW3JldHVybiBmb28oMTApO11dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9QUk9UT1RZUEVTLCAxLCAKKyAgICAgW0RlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIHByb3RvdHlwZV0pIAorICAgaGF2ZV9wcm90b3R5cGVzPXllc10sCisgIFtdCispCiBBQ19NU0dfUkVTVUxUKCRoYXZlX3Byb3RvdHlwZXMpCiAKIHdvcmtzPW5vCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHZhcmlhYmxlIGxlbmd0aCBwcm90b3R5cGVzIGFuZCBzdGRhcmcuaCkKLUFDX1RSWV9DT01QSUxFKFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpbmNsdWRlIDxzdGRhcmcuaD4KIGludCBmb28oaW50IHgsIC4uLikgewogCXZhX2xpc3QgdmE7CkBAIC0zMTIyLDQ0ICszMjI1LDQ0IEBACiAJdmFfYXJnKHZhLCBkb3VibGUpOwogCXJldHVybiAwOwogfQotXSwgW3JldHVybiBmb28oMTAsICIiLCAzLjE0KTtdLCBbCitdXSwgW1tyZXR1cm4gZm9vKDEwLCAiIiwgMy4xNCk7XV0pXSxbCiAgIEFDX0RFRklORShIQVZFX1NUREFSR19QUk9UT1RZUEVTLCAxLAogICAgW0RlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIHZhcmlhYmxlIGxlbmd0aCBmdW5jdGlvbiBwcm90b3R5cGVzCiAgICAoZS5nLiB2b2lkIGZwcmludGYoRklMRSAqLCBjaGFyICosIC4uLik7KSAqYW5kKiA8c3RkYXJnLmg+XSkgCiAgIHdvcmtzPXllcwotXSkKK10sW10pCiBBQ19NU0dfUkVTVUxUKCR3b3JrcykKIAogIyBjaGVjayBmb3Igc29ja2V0cGFpcgogQUNfTVNHX0NIRUNLSU5HKGZvciBzb2NrZXRwYWlyKQotQUNfVFJZX0NPTVBJTEUoWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLV0sIHZvaWQgKng9c29ja2V0cGFpciwKLSAgQUNfREVGSU5FKEhBVkVfU09DS0VUUEFJUiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnc29ja2V0cGFpcicgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCitdXSwgW1t2b2lkICp4PXNvY2tldHBhaXJdXSldLAorICBbQUNfREVGSU5FKEhBVkVfU09DS0VUUEFJUiwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3NvY2tldHBhaXInIGZ1bmN0aW9uLl0pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubyldCiApCiAKICMgY2hlY2sgaWYgc29ja2FkZHIgaGFzIHNhX2xlbiBtZW1iZXIKIEFDX01TR19DSEVDS0lORyhpZiBzb2NrYWRkciBoYXMgc2FfbGVuIG1lbWJlcikKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0sCi1bc3RydWN0IHNvY2thZGRyIHg7Ci14LnNhX2xlbiA9IDA7XSwKLQlBQ19NU0dfUkVTVUxUKHllcykKLQlBQ19ERUZJTkUoSEFWRV9TT0NLQUREUl9TQV9MRU4sIDEsIFtEZWZpbmUgaWYgc29ja2FkZHIgaGFzIHNhX2xlbiBtZW1iZXJdKSwKLQlBQ19NU0dfUkVTVUxUKG5vKSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLCBbW3N0cnVjdCBzb2NrYWRkciB4OworeC5zYV9sZW4gPSAwO11dKV0sCisgIFtBQ19NU0dfUkVTVUxUKHllcykKKyAgIEFDX0RFRklORShIQVZFX1NPQ0tBRERSX1NBX0xFTiwgMSwgW0RlZmluZSBpZiBzb2NrYWRkciBoYXMgc2FfbGVuIG1lbWJlcl0pXSwKKyAgW0FDX01TR19SRVNVTFQobm8pXQorKQogCiB2YV9saXN0X2lzX2FycmF5PW5vCiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB2YV9saXN0IGlzIGFuIGFycmF5KQotQUNfVFJZX0NPTVBJTEUoWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2lmZGVmIEhBVkVfU1REQVJHX1BST1RPVFlQRVMKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNlbHNlCiAjaW5jbHVkZSA8dmFyYXJncy5oPgogI2VuZGlmCi1dLCBbdmFfbGlzdCBsaXN0MSwgbGlzdDI7IGxpc3QxID0gbGlzdDI7XSwgLCBbCitdXSwgW1t2YV9saXN0IGxpc3QxLCBsaXN0MjsgbGlzdDEgPSBsaXN0MjtdXSldLFtdLFsKICBBQ19ERUZJTkUoVkFfTElTVF9JU19BUlJBWSwgMSwgW0RlZmluZSBpZiBhIHZhX2xpc3QgaXMgYW4gYXJyYXkgb2Ygc29tZSBraW5kXSkgCiAgdmFfbGlzdF9pc19hcnJheT15ZXMKIF0pCkBAIC0zMTc0LDkgKzMyNzcsOSBAQAogICBBQ19NU0dfQ0hFQ0tJTkcoW2dldGhvc3RieW5hbWVfciB3aXRoIDYgYXJnc10pCiAgIE9MRF9DRkxBR1M9JENGTEFHUwogICBDRkxBR1M9IiRDRkxBR1MgJE1ZX0NQUEZMQUdTICRNWV9USFJFQURfQ1BQRkxBR1MgJE1ZX0NGTEFHUyIKLSAgQUNfVFJZX0NPTVBJTEUoWworICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjICAgaW5jbHVkZSA8bmV0ZGIuaD4KLSAgXSwgWworICBdXSwgW1sKICAgICBjaGFyICpuYW1lOwogICAgIHN0cnVjdCBob3N0ZW50ICpoZSwgKnJlczsKICAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsKQEAgLTMxODQsNDggKzMyODcsNTAgQEAKICAgICBpbnQgaF9lcnJub3A7CiAKICAgICAodm9pZCkgZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIGhlLCBidWZmZXIsIGJ1ZmxlbiwgJnJlcywgJmhfZXJybm9wKQotICBdLCBbCisgIF1dKV0sWwogICAgIEFDX0RFRklORShIQVZFX0dFVEhPU1RCWU5BTUVfUikKICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1JfNl9BUkcsIDEsCiAgICAgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSA2LWFyZyB2ZXJzaW9uIG9mIGdldGhvc3RieW5hbWVfcigpLl0pCiAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gIF0sIFsKKyAgXSxbCiAgICAgQUNfTVNHX1JFU1VMVChubykKICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2dldGhvc3RieW5hbWVfciB3aXRoIDUgYXJnc10pCi0gICAgQUNfVFJZX0NPTVBJTEUoWwotIyAgICAgaW5jbHVkZSA8bmV0ZGIuaD4KLSAgICBdLCBbCi0gICAgICBjaGFyICpuYW1lOwotICAgICAgc3RydWN0IGhvc3RlbnQgKmhlOwotICAgICAgY2hhciBidWZmZXJbMjA0OF07Ci0gICAgICBpbnQgYnVmbGVuID0gMjA0ODsKLSAgICAgIGludCBoX2Vycm5vcDsKLQotICAgICAgKHZvaWQpIGdldGhvc3RieW5hbWVfcihuYW1lLCBoZSwgYnVmZmVyLCBidWZsZW4sICZoX2Vycm5vcCkKLSAgICBdLCBbCi0gICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1IpCi0gICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1JfNV9BUkcsIDEsCi0gICAgICBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIDUtYXJnIHZlcnNpb24gb2YgZ2V0aG9zdGJ5bmFtZV9yKCkuXSkKLSAgICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgIF0sIFsKLSAgICAgIEFDX01TR19SRVNVTFQobm8pCi0gICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2dldGhvc3RieW5hbWVfciB3aXRoIDMgYXJnc10pCi0gICAgICBBQ19UUllfQ09NUElMRShbCisgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogIyAgICAgICBpbmNsdWRlIDxuZXRkYi5oPgotICAgICAgXSwgWworICAgICAgXV0sIFtbCiAgICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpoZTsKLSAgICAgICAgc3RydWN0IGhvc3RlbnRfZGF0YSBkYXRhOworICAgICAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsKKyAgICAgICAgaW50IGJ1ZmxlbiA9IDIwNDg7CisgICAgICAgIGludCBoX2Vycm5vcDsKIAotICAgICAgICAodm9pZCkgZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIGhlLCAmZGF0YSk7Ci0gICAgICBdLCBbCisgICAgICAgICh2b2lkKSBnZXRob3N0YnluYW1lX3IobmFtZSwgaGUsIGJ1ZmZlciwgYnVmbGVuLCAmaF9lcnJub3ApCisgICAgICBdXSldLAorICAgICAgWwogICAgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1IpCi0gICAgICAgIEFDX0RFRklORShIQVZFX0dFVEhPU1RCWU5BTUVfUl8zX0FSRywgMSwKLSAgICAgICAgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSAzLWFyZyB2ZXJzaW9uIG9mIGdldGhvc3RieW5hbWVfcigpLl0pCisgICAgICAgIEFDX0RFRklORShIQVZFX0dFVEhPU1RCWU5BTUVfUl81X0FSRywgMSwKKyAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIDUtYXJnIHZlcnNpb24gb2YgZ2V0aG9zdGJ5bmFtZV9yKCkuXSkKICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCiAgICAgICBdLCBbCiAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCi0gICAgICBdKQorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2dldGhvc3RieW5hbWVfciB3aXRoIDMgYXJnc10pCisgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyMgICAgICAgICAgIGluY2x1ZGUgPG5ldGRiLmg+CisgICAgICAgICAgXV0sIFtbCisgICAgICAgICAgICBjaGFyICpuYW1lOworICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhlOworICAgICAgICAgICAgc3RydWN0IGhvc3RlbnRfZGF0YSBkYXRhOworCisgICAgICAgICAgICAodm9pZCkgZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIGhlLCAmZGF0YSk7CisgICAgICAgICAgXV0pXSwKKyAgICAgICAgICBbCisgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1IpCisgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1JfM19BUkcsIDEsCisgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgMy1hcmcgdmVyc2lvbiBvZiBnZXRob3N0YnluYW1lX3IoKS5dKQorICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgICAgXSwgWworICAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgICBdKQogICAgIF0pCiAgIF0pCiAgIENGTEFHUz0kT0xEX0NGTEFHUwpAQCAtMzI1MCw3ICszMzU1LDcgQEAKICMgQ2hlY2sgZm9yIC0td2l0aC1mcGVjdGwKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWZwZWN0bCkKIEFDX0FSR19XSVRIKGZwZWN0bCwKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1mcGVjdGwsIGVuYWJsZSBTSUdGUEUgY2F0Y2hpbmcpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1mcGVjdGxdLCBbZW5hYmxlIFNJR0ZQRSBjYXRjaGluZ10pLAogWwogaWYgdGVzdCAiJHdpdGh2YWwiICE9IG5vCiB0aGVuIApAQCAtMzI3MCw3ICszMzc1LDcgQEAKIGVzYWMKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWxpYm09U1RSSU5HKQogQUNfQVJHX1dJVEgobGlibSwKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1saWJtPVNUUklORywgbWF0aCBsaWJyYXJ5KSwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGlibT1TVFJJTkddLCBbbWF0aCBsaWJyYXJ5XSksCiBbCiBpZiB0ZXN0ICIkd2l0aHZhbCIgPSBubwogdGhlbiBMSUJNPQpAQCAtMzI4Niw3ICszMzkxLDcgQEAKIEFDX1NVQlNUKExJQkMpCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1saWJjPVNUUklORykKIEFDX0FSR19XSVRIKGxpYmMsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtbGliYz1TVFJJTkcsIEMgbGlicmFyeSksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYmM9U1RSSU5HXSwgW0MgbGlicmFyeV0pLAogWwogaWYgdGVzdCAiJHdpdGh2YWwiID0gbm8KIHRoZW4gTElCQz0KQEAgLTMyOTgsMTIgKzM0MDMsMTA1IEBACiBmaV0sCiBbQUNfTVNHX1JFU1VMVChkZWZhdWx0IExJQkM9IiRMSUJDIildKQogCi0jICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAqIENoZWNrIGZvciBtYXRoZW1hdGljYWwgZnVuY3Rpb25zICoKLSMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ2hlY2sgZm9yIHZhcmlvdXMgcHJvcGVydGllcyBvZiBmbG9hdGluZyBwb2ludCAqCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLUxJQlNfU0FWRT0kTElCUwotTElCUz0iJExJQlMgJExJQk0iCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBDIGRvdWJsZXMgYXJlIGxpdHRsZS1lbmRpYW4gSUVFRSA3NTQgYmluYXJ5NjQpCitBQ19DQUNIRV9WQUwoYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGUsIFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8c3RyaW5nLmg+CitpbnQgbWFpbigpIHsKKyAgICBkb3VibGUgeCA9IDkwMDYxMDQwNzE4MzI1ODEuMDsKKyAgICBpZiAobWVtY21wKCZ4LCAiXHgwNVx4MDRceDAzXHgwMlx4MDFceGZmXHgzZlx4NDMiLCA4KSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAxOworfQorXV0pXSwKK1thY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZT15ZXNdLAorW2FjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlPW5vXSwKK1thY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZT1ub10pXSkKK0FDX01TR19SRVNVTFQoJGFjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlKQoraWYgdGVzdCAiJGFjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlIiA9IHllcwordGhlbgorICBBQ19ERUZJTkUoRE9VQkxFX0lTX0xJVFRMRV9FTkRJQU5fSUVFRTc1NCwgMSwKKyAgW0RlZmluZSBpZiBDIGRvdWJsZXMgYXJlIDY0LWJpdCBJRUVFIDc1NCBiaW5hcnkgZm9ybWF0LCBzdG9yZWQKKyAgIHdpdGggdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3RdKQorZmkKKworQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgQyBkb3VibGVzIGFyZSBiaWctZW5kaWFuIElFRUUgNzU0IGJpbmFyeTY0KQorQUNfQ0FDSEVfVkFMKGFjX2N2X2JpZ19lbmRpYW5fZG91YmxlLCBbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0cmluZy5oPgoraW50IG1haW4oKSB7CisgICAgZG91YmxlIHggPSA5MDA2MTA0MDcxODMyNTgxLjA7CisgICAgaWYgKG1lbWNtcCgmeCwgIlx4NDNceDNmXHhmZlx4MDFceDAyXHgwM1x4MDRceDA1IiwgOCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKK30KK11dKV0sCitbYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGU9eWVzXSwKK1thY19jdl9iaWdfZW5kaWFuX2RvdWJsZT1ub10sCitbYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGU9bm9dKV0pCitBQ19NU0dfUkVTVUxUKCRhY19jdl9iaWdfZW5kaWFuX2RvdWJsZSkKK2lmIHRlc3QgIiRhY19jdl9iaWdfZW5kaWFuX2RvdWJsZSIgPSB5ZXMKK3RoZW4KKyAgQUNfREVGSU5FKERPVUJMRV9JU19CSUdfRU5ESUFOX0lFRUU3NTQsIDEsCisgIFtEZWZpbmUgaWYgQyBkb3VibGVzIGFyZSA2NC1iaXQgSUVFRSA3NTQgYmluYXJ5IGZvcm1hdCwgc3RvcmVkCisgICB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3RdKQorZmkKKworIyBTb21lIEFSTSBwbGF0Zm9ybXMgdXNlIGEgbWl4ZWQtZW5kaWFuIHJlcHJlc2VudGF0aW9uIGZvciBkb3VibGVzLgorIyBXaGlsZSBQeXRob24gZG9lc24ndCBjdXJyZW50bHkgaGF2ZSBmdWxsIHN1cHBvcnQgZm9yIHRoZXNlIHBsYXRmb3JtcworIyAoc2VlIGUuZy4sIGlzc3VlIDE3NjI1NjEpLCB3ZSBjYW4gYXQgbGVhc3QgbWFrZSBzdXJlIHRoYXQgZmxvYXQgPC0+IHN0cmluZworIyBjb252ZXJzaW9ucyB3b3JrLgorQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgQyBkb3VibGVzIGFyZSBBUk0gbWl4ZWQtZW5kaWFuIElFRUUgNzU0IGJpbmFyeTY0KQorQUNfQ0FDSEVfVkFMKGFjX2N2X21peGVkX2VuZGlhbl9kb3VibGUsIFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8c3RyaW5nLmg+CitpbnQgbWFpbigpIHsKKyAgICBkb3VibGUgeCA9IDkwMDYxMDQwNzE4MzI1ODEuMDsKKyAgICBpZiAobWVtY21wKCZ4LCAiXHgwMVx4ZmZceDNmXHg0M1x4MDVceDA0XHgwM1x4MDIiLCA4KSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAxOworfQorXV0pXSwKK1thY19jdl9taXhlZF9lbmRpYW5fZG91YmxlPXllc10sCitbYWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZT1ub10sCitbYWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZT1ub10pXSkKK0FDX01TR19SRVNVTFQoJGFjX2N2X21peGVkX2VuZGlhbl9kb3VibGUpCitpZiB0ZXN0ICIkYWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZSIgPSB5ZXMKK3RoZW4KKyAgQUNfREVGSU5FKERPVUJMRV9JU19BUk1fTUlYRURfRU5ESUFOX0lFRUU3NTQsIDEsCisgIFtEZWZpbmUgaWYgQyBkb3VibGVzIGFyZSA2NC1iaXQgSUVFRSA3NTQgYmluYXJ5IGZvcm1hdCwgc3RvcmVkCisgICBpbiBBUk0gbWl4ZWQtZW5kaWFuIG9yZGVyIChieXRlIG9yZGVyIDQ1NjcwMTIzKV0pCitmaQorCisjIFRoZSBzaG9ydCBmbG9hdCByZXByIGludHJvZHVjZWQgaW4gUHl0aG9uIDMuMSByZXF1aXJlcyB0aGUKKyMgY29ycmVjdGx5LXJvdW5kZWQgc3RyaW5nIDwtPiBkb3VibGUgY29udmVyc2lvbiBmdW5jdGlvbnMgZnJvbQorIyBQeXRob24vZHRvYS5jLCB3aGljaCBpbiB0dXJuIHJlcXVpcmUgdGhhdCB0aGUgRlBVIHVzZXMgNTMtYml0CisjIHJvdW5kaW5nOyB0aGlzIGlzIGEgcHJvYmxlbSBvbiB4ODYsIHdoZXJlIHRoZSB4ODcgRlBVIGhhcyBhIGRlZmF1bHQKKyMgcm91bmRpbmcgcHJlY2lzaW9uIG9mIDY0IGJpdHMuICBGb3IgZ2NjL3g4Niwgd2UgY2FuIGZpeCB0aGlzIGJ5CisjIHVzaW5nIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgdGhlIHg4NyBGUFUgY29udHJvbCB3b3JkLgorCisjIFRoaXMgaW5saW5lIGFzc2VtYmxlciBzeW50YXggbWF5IGFsc28gd29yayBmb3Igc3VuY2MgYW5kIGljYywKKyMgc28gd2UgdHJ5IGl0IG9uIGFsbCBwbGF0Zm9ybXMuCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgeDg3IGNvbnRyb2wgd29yZCkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1sKKyAgdW5zaWduZWQgc2hvcnQgY3c7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGN3ICUwIiA6ICI9bSIgKGN3KSk7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiIDogOiAibSIgKGN3KSk7CitdXSldLFtoYXZlX2djY19hc21fZm9yX3g4Nz15ZXNdLFtoYXZlX2djY19hc21fZm9yX3g4Nz1ub10pCitBQ19NU0dfUkVTVUxUKCRoYXZlX2djY19hc21fZm9yX3g4NykKK2lmIHRlc3QgIiRoYXZlX2djY19hc21fZm9yX3g4NyIgPSB5ZXMKK3RoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9HQ0NfQVNNX0ZPUl9YODcsIDEsCisgICAgW0RlZmluZSBpZiB3ZSBjYW4gdXNlIGdjYyBpbmxpbmUgYXNzZW1ibGVyIHRvIGdldCBhbmQgc2V0IHg4NyBjb250cm9sIHdvcmRdKQorZmkKIAogIyBEZXRlY3Qgd2hldGhlciBzeXN0ZW0gYXJpdGhtZXRpYyBpcyBzdWJqZWN0IHRvIHg4Ny1zdHlsZSBkb3VibGUKICMgcm91bmRpbmcgaXNzdWVzLiAgVGhlIHJlc3VsdCBvZiB0aGlzIHRlc3QgaGFzIGxpdHRsZSBtZWFuaW5nIG9uIG5vbgpAQCAtMzMxMSw4ICszNTA5LDEwIEBACiAjIG1vZGUgaXMgcm91bmQtdG8tbmVhcmVzdCBhbmQgZG91YmxlIHJvdW5kaW5nIGlzc3VlcyBhcmUgcHJlc2VudCwgYW5kCiAjIDAgb3RoZXJ3aXNlLiAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyOTM3IGZvciBtb3JlIGluZm8uCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHg4Ny1zdHlsZSBkb3VibGUgcm91bmRpbmcpCi1BQ19DQUNIRV9WQUwoYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZywgWwotQUNfVFJZX1JVTihbCisjICRCQVNFQ0ZMQUdTIG1heSBhZmZlY3QgdGhlIHJlc3VsdAorYWNfc2F2ZV9jYz0iJENDIgorQ0M9IiRDQyAkQkFTRUNGTEFHUyIKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogaW50IG1haW4oKSB7CkBAIC0zMzMxLDEwICszNTMxLDExIEBACiAgICAgLyogYm90aCB0ZXN0cyBzaG93IGV2aWRlbmNlIG9mIGRvdWJsZSByb3VuZGluZyAqLwogICAgIGV4aXQoMSk7CiB9Ci1dLAotYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZz1ubywKLWFjX2N2X3g4N19kb3VibGVfcm91bmRpbmc9eWVzLAotYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZz1ubyldKQorXV0pXSwKK1thY19jdl94ODdfZG91YmxlX3JvdW5kaW5nPW5vXSwKK1thY19jdl94ODdfZG91YmxlX3JvdW5kaW5nPXllc10sCitbYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZz1ub10pCitDQz0iJGFjX3NhdmVfY2MiCiBBQ19NU0dfUkVTVUxUKCRhY19jdl94ODdfZG91YmxlX3JvdW5kaW5nKQogaWYgdGVzdCAiJGFjX2N2X3g4N19kb3VibGVfcm91bmRpbmciID0geWVzCiB0aGVuCkBAIC0zMzQyLDEyICszNTQzLDE4IEBACiAgIFtEZWZpbmUgaWYgYXJpdGhtZXRpYyBpcyBzdWJqZWN0IHRvIHg4Ny1zdHlsZSBkb3VibGUgcm91bmRpbmcgaXNzdWVdKQogZmkKIAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDaGVjayBmb3IgbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucyAqCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitMSUJTX1NBVkU9JExJQlMKK0xJQlM9IiRMSUJTICRMSUJNIgogCiAjIE9uIEZyZWVCU0QgNi4yLCBpdCBhcHBlYXJzIHRoYXQgdGFuaCgtMC4pIHJldHVybnMgMC4gaW5zdGVhZCBvZgogIyAtMC4gb24gc29tZSBhcmNoaXRlY3R1cmVzLgogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdGFuaCBwcmVzZXJ2ZXMgdGhlIHNpZ24gb2YgemVybykKIEFDX0NBQ0hFX1ZBTChhY19jdl90YW5oX3ByZXNlcnZlc196ZXJvX3NpZ24sIFsKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiBpbnQgbWFpbigpIHsKQEAgLTMzNTgsMTAgKzM1NjUsMTAgQEAKICAgICAgIGF0YW4yKHRhbmgoLTAuKSwgLTEuKSA9PSBhdGFuMigtMC4sIC0xLikpIGV4aXQoMCk7CiAgIGVsc2UgZXhpdCgxKTsKIH0KLV0sCi1hY19jdl90YW5oX3ByZXNlcnZlc196ZXJvX3NpZ249eWVzLAotYWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduPW5vLAotYWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduPW5vKV0pCitdXSldLAorW2FjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbj15ZXNdLAorW2FjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbj1ub10sCitbYWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduPW5vXSldKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduKQogaWYgdGVzdCAiJGFjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbiIgPSB5ZXMKIHRoZW4KQEAgLTMzNjksMTEgKzM1NzYsMTAzIEBACiAgIFtEZWZpbmUgaWYgdGFuaCgtMC4pIGlzIC0wLiwgb3IgaWYgcGxhdGZvcm0gZG9lc24ndCBoYXZlIHNpZ25lZCB6ZXJvc10pCiBmaQogCi1BQ19DSEVDS19GVU5DUyhbYWNvc2ggYXNpbmggYXRhbmggY29weXNpZ24gZXhwbTEgZmluaXRlIGh5cG90IGxvZzFwXSkKK0FDX0NIRUNLX0ZVTkNTKFthY29zaCBhc2luaCBhdGFuaCBjb3B5c2lnbiBlcmYgZXJmYyBleHBtMSBmaW5pdGUgZ2FtbWFdKQorQUNfQ0hFQ0tfRlVOQ1MoW2h5cG90IGxnYW1tYSBsb2cxcCByb3VuZCB0Z2FtbWFdKQogQUNfQ0hFQ0tfREVDTFMoW2lzaW5mLCBpc25hbiwgaXNmaW5pdGVdLCBbXSwgW10sIFtbI2luY2x1ZGUgPG1hdGguaD5dXSkKIAogTElCUz0kTElCU19TQVZFCiAKKyMgRm9yIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUsIGNoZWNrIHRoYXQgc2VtX29wZW4KKyMgYWN0dWFsbHkgd29ya3MuICBGb3IgRnJlZUJTRCB2ZXJzaW9ucyA8PSA3LjIsCisjIHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgcHJvdmlkZXMgUE9TSVggc2VtYXBob3JlcworIyBpc24ndCBsb2FkZWQgYnkgZGVmYXVsdCwgc28gYW4gYXR0ZW1wdCB0byBjYWxsCisjIHNlbV9vcGVuIHJlc3VsdHMgaW4gYSAnU2lnbmFsIDEyJyBlcnJvci4KK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIFBPU0lYIHNlbWFwaG9yZXMgYXJlIGVuYWJsZWQpCitBQ19DQUNIRV9WQUwoYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkLAorQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworaW50IG1haW4odm9pZCkgeworICBzZW1fdCAqYSA9IHNlbV9vcGVuKCIvYXV0b2NvbmYiLCBPX0NSRUFULCBTX0lSVVNSfFNfSVdVU1IsIDApOworICBpZiAoYSA9PSBTRU1fRkFJTEVEKSB7CisgICAgcGVycm9yKCJzZW1fb3BlbiIpOworICAgIHJldHVybiAxOworICB9CisgIHNlbV9jbG9zZShhKTsKKyAgc2VtX3VubGluaygiL2F1dG9jb25mIik7CisgIHJldHVybiAwOworfQorXV0pXSwKK1thY19jdl9wb3NpeF9zZW1hcGhvcmVzX2VuYWJsZWQ9eWVzXSwKK1thY19jdl9wb3NpeF9zZW1hcGhvcmVzX2VuYWJsZWQ9bm9dLAorW2FjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZD15ZXNdKQorKQorQUNfTVNHX1JFU1VMVCgkYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkKQoraWYgdGVzdCAkYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkID0gbm8KK3RoZW4KKyAgQUNfREVGSU5FKFBPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQsIDEsCisgICAgICAgICAgICBbRGVmaW5lIGlmIFBPU0lYIHNlbWFwaG9yZXMgYXJlbid0IGVuYWJsZWQgb24geW91ciBzeXN0ZW1dKQorZmkKKworIyBNdWx0aXByb2Nlc3NpbmcgY2hlY2sgZm9yIGJyb2tlbiBzZW1fZ2V0dmFsdWUKK0FDX01TR19DSEVDS0lORyhmb3IgYnJva2VuIHNlbV9nZXR2YWx1ZSkKK0FDX0NBQ0hFX1ZBTChhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlLAorQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworaW50IG1haW4odm9pZCl7CisgIHNlbV90ICphID0gc2VtX29wZW4oIi9hdXRvY2Z0dyIsIE9fQ1JFQVQsIFNfSVJVU1J8U19JV1VTUiwgMCk7CisgIGludCBjb3VudDsKKyAgaW50IHJlczsKKyAgaWYoYT09U0VNX0ZBSUxFRCl7CisgICAgcGVycm9yKCJzZW1fb3BlbiIpOworICAgIHJldHVybiAxOworCisgIH0KKyAgcmVzID0gc2VtX2dldHZhbHVlKGEsICZjb3VudCk7CisgIHNlbV9jbG9zZShhKTsKKyAgc2VtX3VubGluaygiL2F1dG9jZnR3Iik7CisgIHJldHVybiByZXM9PS0xID8gMSA6IDA7Cit9CitdXSldLAorW2FjX2N2X2Jyb2tlbl9zZW1fZ2V0dmFsdWU9bm9dLAorW2FjX2N2X2Jyb2tlbl9zZW1fZ2V0dmFsdWU9eWVzXSwKK1thY19jdl9icm9rZW5fc2VtX2dldHZhbHVlPXllc10pCispCitBQ19NU0dfUkVTVUxUKCRhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlKQoraWYgdGVzdCAkYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZSA9IHllcwordGhlbgorICBBQ19ERUZJTkUoSEFWRV9CUk9LRU5fU0VNX0dFVFZBTFVFLCAxLAorICBbZGVmaW5lIHRvIDEgaWYgeW91ciBzZW1fZ2V0dmFsdWUgaXMgYnJva2VuLl0pCitmaQorCisjIGRldGVybWluZSB3aGF0IHNpemUgZGlnaXQgdG8gdXNlIGZvciBQeXRob24ncyBsb25ncworQUNfTVNHX0NIRUNLSU5HKFtkaWdpdCBzaXplIGZvciBQeXRob24ncyBsb25nc10pCitBQ19BUkdfRU5BQkxFKGJpZy1kaWdpdHMsCitBU19IRUxQX1NUUklORyhbLS1lbmFibGUtYmlnLWRpZ2l0c0A8OkA9QklUU0A6PkBdLFt1c2UgYmlnIGRpZ2l0cyBmb3IgUHl0aG9uIGxvbmdzIFtbQklUUz0zMF1dXSksCitbY2FzZSAkZW5hYmxlX2JpZ19kaWdpdHMgaW4KK3llcykKKyAgZW5hYmxlX2JpZ19kaWdpdHM9MzAgOzsKK25vKQorICBlbmFibGVfYmlnX2RpZ2l0cz0xNSA7OworWzE1fDMwXSkKKyAgOzsKKyopCisgIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICRlbmFibGVfYmlnX2RpZ2l0cyBmb3IgLS1lbmFibGUtYmlnLWRpZ2l0czsgdmFsdWUgc2hvdWxkIGJlIDE1IG9yIDMwXSkgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoJGVuYWJsZV9iaWdfZGlnaXRzKQorQUNfREVGSU5FX1VOUVVPVEVEKFBZTE9OR19CSVRTX0lOX0RJR0lULCAkZW5hYmxlX2JpZ19kaWdpdHMsIFtEZWZpbmUgYXMgdGhlIHByZWZlcnJlZCBzaXplIGluIGJpdHMgb2YgbG9uZyBkaWdpdHNdKQorXSwKK1tBQ19NU0dfUkVTVUxUKG5vIHZhbHVlIHNwZWNpZmllZCldKQorCiAjIGNoZWNrIGZvciB3Y2hhci5oCiBBQ19DSEVDS19IRUFERVIod2NoYXIuaCwgWwogICBBQ19ERUZJTkUoSEFWRV9XQ0hBUl9ILCAxLCAKQEAgLTMzOTEsMTQgKzM2OTAsMTQgQEAKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBVQ1MtNCB0Y2wpCiBoYXZlX3VjczRfdGNsPW5vCi1BQ19UUllfQ09NUElMRShbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8dGNsLmg+CiAjaWYgVENMX1VURl9NQVggIT0gNgogIyBlcnJvciAiTk9UIFVDUzRfVENMIgotI2VuZGlmXSwgW10sIFsKKyNlbmRpZl1dLCBbW11dKV0sWwogICBBQ19ERUZJTkUoSEFWRV9VQ1M0X1RDTCwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRjbCBhbmQgVENMX1VURl9NQVg9PTZdKQogICBoYXZlX3VjczRfdGNsPXllcwotXSkKK10sW10pCiBBQ19NU0dfUkVTVUxUKCRoYXZlX3VjczRfdGNsKQogCiAjIGNoZWNrIHdoZXRoZXIgd2NoYXJfdCBpcyBzaWduZWQgb3Igbm90CkBAIC0zNDA3LDI0ICszNzA2LDI0IEBACiAgICMgY2hlY2sgd2hldGhlciB3Y2hhcl90IGlzIHNpZ25lZCBvciBub3QKICAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgd2NoYXJfdCBpcyBzaWduZWQpCiAgIEFDX0NBQ0hFX1ZBTChhY19jdl93Y2hhcl90X3NpZ25lZCwgWwotICBBQ19UUllfUlVOKFsKKyAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICAgI2luY2x1ZGUgPHdjaGFyLmg+CiAgIGludCBtYWluKCkKICAgewogCS8qIFN1Y2Nlc3M6IGV4aXQgY29kZSAwICovCiAgICAgICAgIGV4aXQoKCgod2NoYXJfdCkgLTEpIDwgKCh3Y2hhcl90KSAwKSkgPyAwIDogMSk7CiAgIH0KLSAgXSwKLSAgYWNfY3Zfd2NoYXJfdF9zaWduZWQ9eWVzLAotICBhY19jdl93Y2hhcl90X3NpZ25lZD1ubywKLSAgYWNfY3Zfd2NoYXJfdF9zaWduZWQ9eWVzKV0pCisgIF1dKV0sCisgIFthY19jdl93Y2hhcl90X3NpZ25lZD15ZXNdLAorICBbYWNfY3Zfd2NoYXJfdF9zaWduZWQ9bm9dLAorICBbYWNfY3Zfd2NoYXJfdF9zaWduZWQ9eWVzXSldKQogICBBQ19NU0dfUkVTVUxUKCRhY19jdl93Y2hhcl90X3NpZ25lZCkKIGZpCiAgIAogQUNfTVNHX0NIRUNLSU5HKHdoYXQgdHlwZSB0byB1c2UgZm9yIHVuaWNvZGUpCiBkbmwgcXVhZHJpZ3JhcGhzICJAPDpAIiBhbmQgIkA6PkAiIHByb2R1Y2UgIlsiIGFuZCAiXSIgaW4gdGhlIG91dHB1dAogQUNfQVJHX0VOQUJMRSh1bmljb2RlLCAKLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS1lbmFibGUtdW5pY29kZUA8OkA9dWNzQDw6QDI0QDo+QEA6PkAsIEVuYWJsZSBVbmljb2RlIHN0cmluZ3MgKGRlZmF1bHQgaXMgdWNzMikpLAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdW5pY29kZUA8OkA9dWNzQDw6QDI0QDo+QEA6PkBdLCBbRW5hYmxlIFVuaWNvZGUgc3RyaW5ncyAoZGVmYXVsdCBpcyB1Y3MyKV0pLAogICAgICAgICAgICAgICBbXSwKICAgICAgICAgICAgICAgW2VuYWJsZV91bmljb2RlPXllc10pCiAKQEAgLTM0OTUsMTUgKzM3OTQsMTUgQEAKICMgb3IgZmlsbHMgd2l0aCB6ZXJvcyAobGlrZSB0aGUgQ3JheSBKOTAsIGFjY29yZGluZyB0byBUaW0gUGV0ZXJzKS4KIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHJpZ2h0IHNoaWZ0IGV4dGVuZHMgdGhlIHNpZ24gYml0KQogQUNfQ0FDSEVfVkFMKGFjX2N2X3JzaGlmdF9leHRlbmRzX3NpZ24sIFsKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKIGludCBtYWluKCkKIHsKIAlleGl0KCgoLTEpPj4zID09IC0xKSA/IDAgOiAxKTsKIH0KLV0sCi1hY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduPXllcywKLWFjX2N2X3JzaGlmdF9leHRlbmRzX3NpZ249bm8sCi1hY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduPXllcyldKQorXV0pXSwKK1thY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduPXllc10sCitbYWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbj1ub10sCitbYWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbj15ZXNdKV0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduKQogaWYgdGVzdCAiJGFjX2N2X3JzaGlmdF9leHRlbmRzX3NpZ24iID0gbm8KIHRoZW4KQEAgLTM1MTUsMTIgKzM4MTQsMTIgQEAKICMgY2hlY2sgZm9yIGdldGNfdW5sb2NrZWQgYW5kIHJlbGF0ZWQgbG9ja2luZyBmdW5jdGlvbnMKIEFDX01TR19DSEVDS0lORyhmb3IgZ2V0Y191bmxvY2tlZCgpIGFuZCBmcmllbmRzKQogQUNfQ0FDSEVfVkFMKGFjX2N2X2hhdmVfZ2V0Y191bmxvY2tlZCwgWwotQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRpby5oPl0sWworQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzdGRpby5oPl1dLCBbWwogCUZJTEUgKmYgPSBmb3BlbigiL2Rldi9udWxsIiwgInIiKTsKIAlmbG9ja2ZpbGUoZik7CiAJZ2V0Y191bmxvY2tlZChmKTsKIAlmdW5sb2NrZmlsZShmKTsKLV0sIGFjX2N2X2hhdmVfZ2V0Y191bmxvY2tlZD15ZXMsIGFjX2N2X2hhdmVfZ2V0Y191bmxvY2tlZD1ubyldKQorXV0pXSxbYWNfY3ZfaGF2ZV9nZXRjX3VubG9ja2VkPXllc10sW2FjX2N2X2hhdmVfZ2V0Y191bmxvY2tlZD1ub10pXSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X2hhdmVfZ2V0Y191bmxvY2tlZCkKIGlmIHRlc3QgIiRhY19jdl9oYXZlX2dldGNfdW5sb2NrZWQiID0geWVzCiB0aGVuCkBAIC0zNTY3LDggKzM4NjYsMTAgQEAKICAgICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSByZWFkbGluZSAyLjFdKSwgLCRSRUFETElORV9MSUJTKQogCiAjIGNoZWNrIGZvciByZWFkbGluZSAyLjIKLUFDX1RSWV9DUFAoWyNpbmNsdWRlIDxyZWFkbGluZS9yZWFkbGluZS5oPl0sCi1oYXZlX3JlYWRsaW5lPXllcywgaGF2ZV9yZWFkbGluZT1ubykKK0FDX1BSRVBST0NfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWyNpbmNsdWRlIDxyZWFkbGluZS9yZWFkbGluZS5oPl1dKV0sCisgIFtoYXZlX3JlYWRsaW5lPXllc10sCisgIFtoYXZlX3JlYWRsaW5lPW5vXQorKQogaWYgdGVzdCAkaGF2ZV9yZWFkbGluZSA9IHllcwogdGhlbgogICBBQ19FR1JFUF9IRUFERVIoW2V4dGVybiBpbnQgcmxfY29tcGxldGlvbl9hcHBlbmRfY2hhcmFjdGVyO10sCkBAIC0zNTk3LDggKzM4OTgsMTAgQEAKICAgICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSByZWFkbGluZSA0LjJdKSwgLCRSRUFETElORV9MSUJTKQogCiAjIGFsc28gaW4gcmVhZGxpbmUgNC4yCi1BQ19UUllfQ1BQKFsjaW5jbHVkZSA8cmVhZGxpbmUvcmVhZGxpbmUuaD5dLAotaGF2ZV9yZWFkbGluZT15ZXMsIGhhdmVfcmVhZGxpbmU9bm8pCitBQ19QUkVQUk9DX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sjaW5jbHVkZSA8cmVhZGxpbmUvcmVhZGxpbmUuaD5dXSldLAorICBbaGF2ZV9yZWFkbGluZT15ZXNdLAorICBbaGF2ZV9yZWFkbGluZT1ub10KKykKIGlmIHRlc3QgJGhhdmVfcmVhZGxpbmUgPSB5ZXMKIHRoZW4KICAgQUNfRUdSRVBfSEVBREVSKFtleHRlcm4gaW50IHJsX2NhdGNoX3NpZ25hbHM7XSwKQEAgLTM2MTIsNyArMzkxNSw3IEBACiAKIEFDX01TR19DSEVDS0lORyhmb3IgYnJva2VuIG5pY2UoKSkKIEFDX0NBQ0hFX1ZBTChhY19jdl9icm9rZW5fbmljZSwgWwotQUNfVFJZX1JVTihbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwogaW50IG1haW4oKQogewogCWludCB2YWwxID0gbmljZSgxKTsKQEAgLTM2MjAsMTAgKzM5MjMsMTAgQEAKIAkJZXhpdCgwKTsKIAlleGl0KDEpOwogfQotXSwKLWFjX2N2X2Jyb2tlbl9uaWNlPXllcywKLWFjX2N2X2Jyb2tlbl9uaWNlPW5vLAotYWNfY3ZfYnJva2VuX25pY2U9bm8pXSkKK11dKV0sCitbYWNfY3ZfYnJva2VuX25pY2U9eWVzXSwKK1thY19jdl9icm9rZW5fbmljZT1ub10sCitbYWNfY3ZfYnJva2VuX25pY2U9bm9dKV0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9icm9rZW5fbmljZSkKIGlmIHRlc3QgIiRhY19jdl9icm9rZW5fbmljZSIgPSB5ZXMKIHRoZW4KQEAgLTM2MzIsMzQgKzM5MzUsMjkgQEAKIGZpCiAKIEFDX01TR19DSEVDS0lORyhmb3IgYnJva2VuIHBvbGwoKSkKLUFDX1RSWV9SVU4oWworQUNfQ0FDSEVfVkFMKGFjX2N2X2Jyb2tlbl9wb2xsLAorQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICNpbmNsdWRlIDxwb2xsLmg+CiAKLWludCBtYWluICh2b2lkKQotICAgIHsKK2ludCBtYWluKCkKK3sKICAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxfc3RydWN0ID0geyA0MiwgUE9MTElOfFBPTExQUkl8UE9MTE9VVCwgMCB9OwotICAgIAorICAgIGludCBwb2xsX3Rlc3Q7CisKICAgICBjbG9zZSAoNDIpOwogCi0gICAgaW50IHBvbGxfdGVzdCA9IHBvbGwgKCZwb2xsX3N0cnVjdCwgMSwgMCk7Ci0KKyAgICBwb2xsX3Rlc3QgPSBwb2xsKCZwb2xsX3N0cnVjdCwgMSwgMCk7CiAgICAgaWYgKHBvbGxfdGVzdCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgZXhpdCgwKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKICAgICBlbHNlIGlmIChwb2xsX3Rlc3QgPT0gMCAmJiBwb2xsX3N0cnVjdC5yZXZlbnRzICE9IFBPTExOVkFMKQotICAgICAgICB7Ci0gICAgICAgIGV4aXQoMCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CiAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLSAgICB9Ci1dLAotYWNfY3ZfYnJva2VuX3BvbGw9eWVzLAotYWNfY3ZfYnJva2VuX3BvbGw9bm8sCi1hY19jdl9icm9rZW5fcG9sbD1ubykKKyAgICAgICAgcmV0dXJuIDE7Cit9CitdXSldLAorW2FjX2N2X2Jyb2tlbl9wb2xsPXllc10sCitbYWNfY3ZfYnJva2VuX3BvbGw9bm9dLAorW2FjX2N2X2Jyb2tlbl9wb2xsPW5vXSkpCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9icm9rZW5fcG9sbCkKIGlmIHRlc3QgIiRhY19jdl9icm9rZW5fcG9sbCIgPSB5ZXMKIHRoZW4KQEAgLTM2NzUsNyArMzk3Myw3IEBACiAjIGNoZWNrIHR6c2V0KDMpIGV4aXN0cyBhbmQgd29ya3MgbGlrZSB3ZSBleHBlY3QgaXQgdG8KIEFDX01TR19DSEVDS0lORyhmb3Igd29ya2luZyB0enNldCgpKQogQUNfQ0FDSEVfVkFMKGFjX2N2X3dvcmtpbmdfdHpzZXQsIFsKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0zNzM4LDEwICs0MDM2LDEwIEBACiAKIAlleGl0KDApOwogfQotXSwKLWFjX2N2X3dvcmtpbmdfdHpzZXQ9eWVzLAotYWNfY3Zfd29ya2luZ190enNldD1ubywKLWFjX2N2X3dvcmtpbmdfdHpzZXQ9bm8pXSkKK11dKV0sCitbYWNfY3Zfd29ya2luZ190enNldD15ZXNdLAorW2FjX2N2X3dvcmtpbmdfdHpzZXQ9bm9dLAorW2FjX2N2X3dvcmtpbmdfdHpzZXQ9bm9dKV0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl93b3JraW5nX3R6c2V0KQogaWYgdGVzdCAiJGFjX2N2X3dvcmtpbmdfdHpzZXQiID0geWVzCiB0aGVuCkBAIC0zNzUyLDEzICs0MDUwLDEyIEBACiAjIExvb2sgZm9yIHN1YnNlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0CiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHR2X25zZWMgaW4gc3RydWN0IHN0YXQpCiBBQ19DQUNIRV9WQUwoYWNfY3Zfc3RhdF90dl9uc2VjLAotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvc3RhdC5oPl0sIFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3N0YXQuaD5dXSwgW1sKIHN0cnVjdCBzdGF0IHN0Owogc3Quc3RfbXRpbS50dl9uc2VjID0gMTsKLV0sCi1hY19jdl9zdGF0X3R2X25zZWM9eWVzLAotYWNfY3Zfc3RhdF90dl9uc2VjPW5vLAotYWNfY3Zfc3RhdF90dl9uc2VjPW5vKSkKK11dKV0sCitbYWNfY3Zfc3RhdF90dl9uc2VjPXllc10sCitbYWNfY3Zfc3RhdF90dl9uc2VjPW5vXSkpCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9zdGF0X3R2X25zZWMpCiBpZiB0ZXN0ICIkYWNfY3Zfc3RhdF90dl9uc2VjIiA9IHllcwogdGhlbgpAQCAtMzc2OSwxMyArNDA2NiwxMiBAQAogIyBMb29rIGZvciBCU0Qgc3R5bGUgc3Vic2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXQKIEFDX01TR19DSEVDS0lORyhmb3IgdHZfbnNlYzIgaW4gc3RydWN0IHN0YXQpCiBBQ19DQUNIRV9WQUwoYWNfY3Zfc3RhdF90dl9uc2VjMiwKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3N0YXQuaD5dLCBbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy9zdGF0Lmg+XV0sIFtbCiBzdHJ1Y3Qgc3RhdCBzdDsKIHN0LnN0X210aW1lc3BlYy50dl9uc2VjID0gMTsKLV0sCi1hY19jdl9zdGF0X3R2X25zZWMyPXllcywKLWFjX2N2X3N0YXRfdHZfbnNlYzI9bm8sCi1hY19jdl9zdGF0X3R2X25zZWMyPW5vKSkKK11dKV0sCitbYWNfY3Zfc3RhdF90dl9uc2VjMj15ZXNdLAorW2FjX2N2X3N0YXRfdHZfbnNlYzI9bm9dKSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X3N0YXRfdHZfbnNlYzIpCiBpZiB0ZXN0ICIkYWNfY3Zfc3RhdF90dl9uc2VjMiIgPSB5ZXMKIHRoZW4KQEAgLTM3ODYsMTIgKzQwODIsMTIgQEAKICMgT24gSFAvVVggMTEuMCwgbXZ3ZGVsY2ggaXMgYSBibG9jayB3aXRoIGEgcmV0dXJuIHN0YXRlbWVudAogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgbXZ3ZGVsY2ggaXMgYW4gZXhwcmVzc2lvbikKIEFDX0NBQ0hFX1ZBTChhY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uLAotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxjdXJzZXMuaD5dLCBbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPGN1cnNlcy5oPl1dLCBbWwogICBpbnQgcnRuOwogICBydG4gPSBtdndkZWxjaCgwLDAsMCk7Ci1dLCBhY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uPXllcywKLSAgIGFjX2N2X212d2RlbGNoX2lzX2V4cHJlc3Npb249bm8sCi0gICBhY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uPXllcykpCitdXSldLAorW2FjX2N2X212d2RlbGNoX2lzX2V4cHJlc3Npb249eWVzXSwKK1thY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uPW5vXSkpCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uKQogCiBpZiB0ZXN0ICIkYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbiIgPSB5ZXMKQEAgLTM4MDIsMTIgKzQwOTgsMTIgQEAKIAogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgV0lORE9XIGhhcyBfZmxhZ3MpCiBBQ19DQUNIRV9WQUwoYWNfY3Zfd2luZG93X2hhc19mbGFncywKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8Y3Vyc2VzLmg+XSwgWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxjdXJzZXMuaD5dXSwgW1sKICAgV0lORE9XICp3OwogICB3LT5fZmxhZ3MgPSAwOwotXSwgYWNfY3Zfd2luZG93X2hhc19mbGFncz15ZXMsCi0gICBhY19jdl93aW5kb3dfaGFzX2ZsYWdzPW5vLAotICAgYWNfY3Zfd2luZG93X2hhc19mbGFncz1ubykpCitdXSldLAorW2FjX2N2X3dpbmRvd19oYXNfZmxhZ3M9eWVzXSwKK1thY19jdl93aW5kb3dfaGFzX2ZsYWdzPW5vXSkpCiBBQ19NU0dfUkVTVUxUKCRhY19jdl93aW5kb3dfaGFzX2ZsYWdzKQogCiAKQEAgLTM4MTgsMjQgKzQxMTQsMjQgQEAKIGZpCiAKIEFDX01TR19DSEVDS0lORyhmb3IgaXNfdGVybV9yZXNpemVkKQotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxjdXJzZXMuaD5dLCB2b2lkICp4PWlzX3Rlcm1fcmVzaXplZCwKLSAgQUNfREVGSU5FKEhBVkVfQ1VSU0VTX0lTX1RFUk1fUkVTSVpFRCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaXNfdGVybV9yZXNpemVkJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8Y3Vyc2VzLmg+XV0sIFtbdm9pZCAqeD1pc190ZXJtX3Jlc2l6ZWRdXSldLAorICBbQUNfREVGSU5FKEhBVkVfQ1VSU0VTX0lTX1RFUk1fUkVTSVpFRCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaXNfdGVybV9yZXNpemVkJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubyldCiApCiAKIEFDX01TR19DSEVDS0lORyhmb3IgcmVzaXplX3Rlcm0pCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGN1cnNlcy5oPl0sIHZvaWQgKng9cmVzaXplX3Rlcm0sCi0gIEFDX0RFRklORShIQVZFX0NVUlNFU19SRVNJWkVfVEVSTSwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncmVzaXplX3Rlcm0nIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxjdXJzZXMuaD5dXSwgW1t2b2lkICp4PXJlc2l6ZV90ZXJtXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0NVUlNFU19SRVNJWkVfVEVSTSwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncmVzaXplX3Rlcm0nIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKV0KICkKIAogQUNfTVNHX0NIRUNLSU5HKGZvciByZXNpemV0ZXJtKQotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxjdXJzZXMuaD5dLCB2b2lkICp4PXJlc2l6ZXRlcm0sCi0gIEFDX0RFRklORShIQVZFX0NVUlNFU19SRVNJWkVURVJNLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdyZXNpemV0ZXJtJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8Y3Vyc2VzLmg+XV0sIFtbdm9pZCAqeD1yZXNpemV0ZXJtXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0NVUlNFU19SRVNJWkVURVJNLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdyZXNpemV0ZXJtJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubyldCiApCiAKIEFDX01TR19DSEVDS0lORyhmb3IgL2Rldi9wdG14KQpAQCAtMzg2MCw4ICs0MTU2LDYzIEBACiAgIEFDX01TR19SRVNVTFQobm8pCiBmaQogCi1BQ19NU0dfQ0hFQ0tJTkcoZm9yICV6ZCBwcmludGYoKSBmb3JtYXQgc3VwcG9ydCkKLUFDX1RSWV9SVU4oWyNpbmNsdWRlIDxzdGRpby5oPgoraWYgdGVzdCAiJGhhdmVfbG9uZ19sb25nIiA9IHllcwordGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoZm9yICVsbGQgYW5kICVsbHUgcHJpbnRmKCkgZm9ybWF0IHN1cHBvcnQpCisgIEFDX0NBQ0hFX1ZBTChhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQsCisgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbWworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyAgI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAjZW5kaWYKKworICBpbnQgbWFpbigpCisgIHsKKyAgICAgIGNoYXIgYnVmZmVyWzI1Nl07CisKKyAgICAgIGlmIChzcHJpbnRmKGJ1ZmZlciwgIiVsbGQiLCAobG9uZyBsb25nKTEyMykgPCAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgaWYgKHN0cmNtcChidWZmZXIsICIxMjMiKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgaWYgKHNwcmludGYoYnVmZmVyLCAiJWxsZCIsIChsb25nIGxvbmcpLTEyMykgPCAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgaWYgKHN0cmNtcChidWZmZXIsICItMTIzIikpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGlmIChzcHJpbnRmKGJ1ZmZlciwgIiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKTEyMykgPCAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgaWYgKHN0cmNtcChidWZmZXIsICIxMjMiKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgcmV0dXJuIDA7CisgIH0KKyAgXV1dKV0sCisgIFthY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9eWVzXSwKKyAgW2FjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdD1ub10sCisgIFthY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9bm9dKQorICApCisgIEFDX01TR19SRVNVTFQoJGFjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdCkKK2ZpCisKK2lmIHRlc3QgIiRhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQiID0geWVzCit0aGVuCisgIEFDX0RFRklORShQWV9GT1JNQVRfTE9OR19MT05HLCAibGwiLAorICBbRGVmaW5lIHRvIHByaW50ZiBmb3JtYXQgbW9kaWZpZXIgZm9yIGxvbmcgbG9uZyB0eXBlXSkKK2ZpCisKK2lmIHRlc3QgJGFjX3N5c19zeXN0ZW0gPSBEYXJ3aW4KK3RoZW4KKwlMSUJTPSIkTElCUyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorZmkKKworCitBQ19DQUNIRV9DSEVDSyhbZm9yICV6ZCBwcmludGYoKSBmb3JtYXQgc3VwcG9ydF0sIGFjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdCwgW2RubAorQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCkBAIC0zODk0LDE0ICs0MjQ1LDIwIEBACiAJcmV0dXJuIDE7CiAKICAgICByZXR1cm4gMDsKLX1dLAotW0FDX01TR19SRVNVTFQoeWVzKQotIEFDX0RFRklORShQWV9GT1JNQVRfU0laRV9ULCAieiIsIFtEZWZpbmUgdG8gcHJpbnRmIGZvcm1hdCBtb2RpZmllciBmb3IgUHlfc3NpemVfdF0pXSwKLSBBQ19NU0dfUkVTVUxUKG5vKSkKK30KK11dKV0sCitbYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0PXllc10sCitbYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0PW5vXSwKK1thY19jdl9oYXZlX3NpemVfdF9mb3JtYXQ9ImNyb3NzIC0tIGFzc3VtaW5nIHllcyIKK10pXSkKK2lmIHRlc3QgIiRhY19jdl9oYXZlX3NpemVfdF9mb3JtYXQiICE9IG5vIDsgdGhlbgorICBBQ19ERUZJTkUoUFlfRk9STUFUX1NJWkVfVCwgInoiLAorICBbRGVmaW5lIHRvIHByaW50ZiBmb3JtYXQgbW9kaWZpZXIgZm9yIFB5X3NzaXplX3RdKQorZmkKIAogQUNfQ0hFQ0tfVFlQRShzb2NrbGVuX3QsLAogICBBQ19ERUZJTkUoc29ja2xlbl90LGludCwKLSAgICAgICAgICAgIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3NvY2tldC5oPiBkb2VzIG5vdCBkZWZpbmUuKSxbCisgICAgICAgICAgICBbRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvc29ja2V0Lmg+IGRvZXMgbm90IGRlZmluZS5dKSxbCiAjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCkBAIC0zOTEwLDYgKzQyNjcsMTIgQEAKICNlbmRpZgogXSkKIAorY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgorQUlYKikKKyAgQUNfREVGSU5FKEhBVkVfQlJPS0VOX1BJUEVfQlVGLCAxLCBbRGVmaW5lIGlmIHRoZSBzeXN0ZW0gcmVwb3J0cyBhbiBpbnZhbGlkIFBJUEVfQlVGIHZhbHVlLl0pIDs7Citlc2FjCisKKwogQUNfU1VCU1QoVEhSRUFESEVBREVSUykKIAogZm9yIGggaW4gYChjZCAkc3JjZGlyO2VjaG8gUHl0aG9uL3RocmVhZF8qLmgpYApAQCAtMzkxNywxMyArNDI4MCw2IEBACiAgIFRIUkVBREhFQURFUlM9IiRUSFJFQURIRUFERVJTIFwkKHNyY2RpcikvJGgiCiBkb25lCiAKLWlmIHRlc3QgJGFjX3N5c19zeXN0ZW0gPSBEYXJ3aW4KLXRoZW4KLQlMSUJTPSIkTElCUyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgotZmkKLQotCi0KIEFDX1NVQlNUKFNSQ0RJUlMpCiBTUkNESVJTPSJQYXJzZXIgR3JhbW1hciBPYmplY3RzIFB5dGhvbiBNb2R1bGVzIE1hYyIKIEFDX01TR19DSEVDS0lORyhmb3IgYnVpbGQgZGlyZWN0b3JpZXMpCkBAIC0zOTM1LDcgKzQyOTEsOCBAQAogQUNfTVNHX1JFU1VMVChkb25lKQogCiAjIGdlbmVyYXRlIG91dHB1dCBmaWxlcwotQUNfQ09ORklHX0ZJTEVTKE1ha2VmaWxlLnByZSBNb2R1bGVzL1NldHVwLmNvbmZpZykKK0FDX0NPTkZJR19GSUxFUyhNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMpCitBQ19DT05GSUdfRklMRVMoW01vZHVsZXMvbGRfc29fYWl4XSwgW2NobW9kICt4IE1vZHVsZXMvbGRfc29fYWl4XSkKIEFDX09VVFBVVAogCiBlY2hvICJjcmVhdGluZyBNb2R1bGVzL1NldHVwIgpkaWZmIC0tZ2l0IGEvcHljb25maWcuaC5pbiBiL3B5Y29uZmlnLmguaW4KaW5kZXggZTA1YWI0YS4uNjVhZDdhYyAxMDA2NDQKLS0tIGEvcHljb25maWcuaC5pbgorKysgYi9weWNvbmZpZy5oLmluCkBAIC01LDYgKzUsOSBAQAogI2RlZmluZSBQeV9QWUNPTkZJR19ICiAKIAorLyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAqLworI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorCiAvKiBEZWZpbmUgZm9yIEFJWCBpZiB5b3VyIGNvbXBpbGVyIGlzIGEgZ2VudWluZSBJQk0geGxDL3hsQ19yIGFuZCB5b3Ugd2FudAogICAgc3VwcG9ydCBmb3IgQUlYIEMrKyBzaGFyZWQgZXh0ZW5zaW9uIG1vZHVsZXMuICovCiAjdW5kZWYgQUlYX0dFTlVJTkVfQ1BMVVNQTFVTCkBAIC0xOCw5ICsyMSwyNCBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBNYWNoIGN0aHJlYWRzIHBhY2thZ2UgKi8KICN1bmRlZiBDX1RIUkVBRFMKIAorLyogRGVmaW5lIGlmIEMgZG91YmxlcyBhcmUgNjQtYml0IElFRUUgNzU0IGJpbmFyeSBmb3JtYXQsIHN0b3JlZCBpbiBBUk0KKyAgIG1peGVkLWVuZGlhbiBvcmRlciAoYnl0ZSBvcmRlciA0NTY3MDEyMykgKi8KKyN1bmRlZiBET1VCTEVfSVNfQVJNX01JWEVEX0VORElBTl9JRUVFNzU0CisKKy8qIERlZmluZSBpZiBDIGRvdWJsZXMgYXJlIDY0LWJpdCBJRUVFIDc1NCBiaW5hcnkgZm9ybWF0LCBzdG9yZWQgd2l0aCB0aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAqLworI3VuZGVmIERPVUJMRV9JU19CSUdfRU5ESUFOX0lFRUU3NTQKKworLyogRGVmaW5lIGlmIEMgZG91YmxlcyBhcmUgNjQtYml0IElFRUUgNzU0IGJpbmFyeSBmb3JtYXQsIHN0b3JlZCB3aXRoIHRoZQorICAgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAqLworI3VuZGVmIERPVUJMRV9JU19MSVRUTEVfRU5ESUFOX0lFRUU3NTQKKwogLyogRGVmaW5lIGlmIC0tZW5hYmxlLWlwdjYgaXMgc3BlY2lmaWVkICovCiAjdW5kZWYgRU5BQkxFX0lQVjYKIAorLyogRGVmaW5lIGlmIGZsb2NrIG5lZWRzIHRvIGJlIGxpbmtlZCB3aXRoIGJzZCBsaWJyYXJ5LiAqLworI3VuZGVmIEZMT0NLX05FRURTX0xJQkJTRAorCiAvKiBEZWZpbmUgaWYgZ2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIGdldHBncnAoMCkuICovCiAjdW5kZWYgR0VUUEdSUF9IQVZFX0FSRwogCkBAIC02NCw2ICs4Miw5IEBACiAvKiBEZWZpbmUgaWYgbmljZSgpIHJldHVybnMgc3VjY2Vzcy9mYWlsdXJlIGluc3RlYWQgb2YgdGhlIG5ldyBwcmlvcml0eS4gKi8KICN1bmRlZiBIQVZFX0JST0tFTl9OSUNFCiAKKy8qIERlZmluZSBpZiB0aGUgc3lzdGVtIHJlcG9ydHMgYW4gaW52YWxpZCBQSVBFX0JVRiB2YWx1ZS4gKi8KKyN1bmRlZiBIQVZFX0JST0tFTl9QSVBFX0JVRgorCiAvKiBEZWZpbmUgaWYgcG9sbCgpIHNldHMgZXJybm8gb24gaW52YWxpZCBmaWxlIGRlc2NyaXB0b3JzLiAqLwogI3VuZGVmIEhBVkVfQlJPS0VOX1BPTEwKIApAQCAtNzMsNiArOTQsOSBAQAogLyogRGVmaW5lIGlmIHB0aHJlYWRfc2lnbWFzaygpIGRvZXMgbm90IHdvcmsgb24geW91ciBzeXN0ZW0uICovCiAjdW5kZWYgSEFWRV9CUk9LRU5fUFRIUkVBRF9TSUdNQVNLCiAKKy8qIGRlZmluZSB0byAxIGlmIHlvdXIgc2VtX2dldHZhbHVlIGlzIGJyb2tlbi4gKi8KKyN1bmRlZiBIQVZFX0JST0tFTl9TRU1fR0VUVkFMVUUKKwogLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgX0Jvb2wuICovCiAjdW5kZWYgSEFWRV9DOTlfQk9PTAogCkBAIC0xNjIsNiArMTg2LDEyIEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdlcG9sbCcgZnVuY3Rpb25zLiAqLwogI3VuZGVmIEhBVkVfRVBPTEwKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBlcmYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRVJGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXJmYycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9FUkZDCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9FUlJOT19ICiAKQEAgLTE4OSw3ICsyMTksNyBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmaW5pdGUnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRklOSVRFCiAKLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2Zsb2NrJyBmdW5jdGlvbi4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmxvY2snIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRkxPQ0sKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlvbi4gKi8KQEAgLTIyOCw2ICsyNTgsMTMgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2FpX3N0cmVycm9yJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dBSV9TVFJFUlJPUgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdhbW1hJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dBTU1BCisKKy8qIERlZmluZSBpZiB3ZSBjYW4gdXNlIGdjYyBpbmxpbmUgYXNzZW1ibGVyIHRvIGdldCBhbmQgc2V0IHg4NyBjb250cm9sIHdvcmQKKyAgICovCisjdW5kZWYgSEFWRV9HQ0NfQVNNX0ZPUl9YODcKKwogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVEFERFJJTkZPCiAKQEAgLTI4OCw2ICszMjUsMTIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHdlbnQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUUFdFTlQKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRyZXNnaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUkVTR0lECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cmVzdWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFJFU1VJRAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHNpZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRTSUQKIApAQCAtMzIxLDYgKzM2NCw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbmV0X3B0b24nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSU5FVF9QVE9OCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5pdGdyb3VwcycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTklUR1JPVVBTCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9JTlRUWVBFU19ICiAKQEAgLTM1NCw2ICs0MDAsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsY2hvd24nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTENIT1dOCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGdhbW1hJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xHQU1NQQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsJyBsaWJyYXJ5ICgtbGRsKS4gKi8KICN1bmRlZiBIQVZFX0xJQkRMCiAKQEAgLTUwNCw5ICs1NTMsMjQgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSByZWFkbGluZSA0LjAgKi8KICN1bmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcm91bmQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUk9VTkQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZWxlY3QnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU0VMRUNUCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2VtX2dldHZhbHVlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFTV9HRVRWQUxVRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbV9vcGVuJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFTV9PUEVOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2VtX3RpbWVkd2FpdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRU1fVElNRURXQUlUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2VtX3VubGluaycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRU1fVU5MSU5LCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0ZWdpZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TRVRFR0lECiAKQEAgLTUzNCw2ICs1OTgsMTIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVnaWQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU0VUUkVHSUQKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZXNnaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUUkVTR0lECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVzdWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVFJFU1VJRAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJldWlkJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NFVFJFVUlECiAKQEAgLTU3Myw2ICs2NDMsOSBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnc29ja2V0cGFpcicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TT0NLRVRQQUlSCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Bhd24uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TUEFXTl9ICisKIC8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHByb3ZpZGVzIHNzaXplX3QgKi8KICN1bmRlZiBIQVZFX1NTSVpFX1QKIApAQCAtNjEwLDI1ICs2ODMsMjUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Ryb3B0cy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NUUk9QVFNfSAogCi0vKiBEZWZpbmUgdG8gMSBpZiBgc3RfYmlydGh0aW1lJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0Jy4gKi8KKy8qIERlZmluZSB0byAxIGlmIGBzdF9iaXJ0aHRpbWUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdCcuICovCiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CSVJUSFRJTUUKIAotLyogRGVmaW5lIHRvIDEgaWYgYHN0X2Jsa3NpemUnIGlzIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLworLyogRGVmaW5lIHRvIDEgaWYgYHN0X2Jsa3NpemUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdCcuICovCiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFCiAKLS8qIERlZmluZSB0byAxIGlmIGBzdF9ibG9ja3MnIGlzIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLworLyogRGVmaW5lIHRvIDEgaWYgYHN0X2Jsb2NrcycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0Jy4gKi8KICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0JMT0NLUwogCi0vKiBEZWZpbmUgdG8gMSBpZiBgc3RfZmxhZ3MnIGlzIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLworLyogRGVmaW5lIHRvIDEgaWYgYHN0X2ZsYWdzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLwogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfRkxBR1MKIAotLyogRGVmaW5lIHRvIDEgaWYgYHN0X2dlbicgaXMgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdCcuICovCisvKiBEZWZpbmUgdG8gMSBpZiBgc3RfZ2VuJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLwogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfR0VOCiAKLS8qIERlZmluZSB0byAxIGlmIGBzdF9yZGV2JyBpcyBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0Jy4gKi8KKy8qIERlZmluZSB0byAxIGlmIGBzdF9yZGV2JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLwogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfUkRFVgogCi0vKiBEZWZpbmUgdG8gMSBpZiBgdG1fem9uZScgaXMgbWVtYmVyIG9mIGBzdHJ1Y3QgdG0nLiAqLworLyogRGVmaW5lIHRvIDEgaWYgYHRtX3pvbmUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdG0nLiAqLwogI3VuZGVmIEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91ciBgc3RydWN0IHN0YXQnIGhhcyBgc3RfYmxvY2tzJy4gRGVwcmVjYXRlZCwgdXNlCkBAIC03MzYsNiArODA5LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGVybS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1RFUk1fSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRnYW1tYScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9UR0FNTUEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0aHJlYWQuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9USFJFQURfSAogCkBAIC03ODUsNiArODYxLDkgQEAKICAgIEluY2x1ZGUvdW5pY29kZW9iamVjdC5oKS4gKi8KICN1bmRlZiBIQVZFX1VTQUJMRV9XQ0hBUl9UCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRpbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VUSUxfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1lcycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9VVElNRVMKIApAQCAtODQ1LDEyICs5MjQsMjQgQEAKIC8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KICN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKIAorLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCiAvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwogI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgogCisvKiBEZWZpbmUgaWYgUE9TSVggc2VtYXBob3JlcyBhcmVuJ3QgZW5hYmxlZCBvbiB5b3VyIHN5c3RlbSAqLworI3VuZGVmIFBPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQKKwogLyogRGVmaW5lZCBpZiBQVEhSRUFEX1NDT1BFX1NZU1RFTSBzdXBwb3J0ZWQuICovCiAjdW5kZWYgUFRIUkVBRF9TWVNURU1fU0NIRURfU1VQUE9SVEVECiAKKy8qIERlZmluZSBhcyB0aGUgcHJlZmVycmVkIHNpemUgaW4gYml0cyBvZiBsb25nIGRpZ2l0cyAqLworI3VuZGVmIFBZTE9OR19CSVRTX0lOX0RJR0lUCisKKy8qIERlZmluZSB0byBwcmludGYgZm9ybWF0IG1vZGlmaWVyIGZvciBsb25nIGxvbmcgdHlwZSAqLworI3VuZGVmIFBZX0ZPUk1BVF9MT05HX0xPTkcKKwogLyogRGVmaW5lIHRvIHByaW50ZiBmb3JtYXQgbW9kaWZpZXIgZm9yIFB5X3NzaXplX3QgKi8KICN1bmRlZiBQWV9GT1JNQVRfU0laRV9UCiAKQEAgLTg2OSw3ICs5NjAsNyBAQAogLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBVbmljb2RlIHR5cGUuICovCiAjdW5kZWYgUHlfVVNJTkdfVU5JQ09ERQogCi0vKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KKy8qIGFzc3VtZSBDODkgc2VtYW50aWNzIHRoYXQgUkVUU0lHVFlQRSBpcyBhbHdheXMgdm9pZCAqLwogI3VuZGVmIFJFVFNJR1RZUEUKIAogLyogRGVmaW5lIGlmIHNldHBncnAoKSBtdXN0IGJlIGNhbGxlZCBhcyBzZXRwZ3JwKDAsIDApLiAqLwpAQCAtOTAyLDEzICs5OTMsMTMgQEAKIC8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjdW5kZWYgU0laRU9GX0xPTkdfTE9ORwogCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFuIG9mZl90LiAqLworLyogVGhlIHNpemUgb2YgYG9mZl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9PRkZfVAogCiAvKiBUaGUgc2l6ZSBvZiBgcGlkX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjdW5kZWYgU0laRU9GX1BJRF9UCiAKLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBwdGhyZWFkX3QuICovCisvKiBUaGUgc2l6ZSBvZiBgcHRocmVhZF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9QVEhSRUFEX1QKIAogLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwpAQCAtOTE3LDcgKzEwMDgsNyBAQAogLyogVGhlIHNpemUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfU0laRV9UCiAKLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSB0aW1lX3QuICovCisvKiBUaGUgc2l6ZSBvZiBgdGltZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9USU1FX1QKIAogLyogVGhlIHNpemUgb2YgYHVpbnRwdHJfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KQEAgLTk0OCw2ICsxMDM5LDI4IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIDxzeXMvdGltZS5oPiBkZWNsYXJlcyBgc3RydWN0IHRtJy4gKi8KICN1bmRlZiBUTV9JTl9TWVNfVElNRQogCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBBSVggMywgSW50ZXJpeC4gICovCisjaWZuZGVmIF9BTExfU09VUkNFCisjIHVuZGVmIF9BTExfU09VUkNFCisjZW5kaWYKKy8qIEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVtLiAgKi8KKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyMgdW5kZWYgX0dOVV9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIHRocmVhZGluZyBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKyMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjZW5kaWYKKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEhQIE5vblN0b3AuICAqLworI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorI2VuZGlmCisvKiBFbmFibGUgZ2VuZXJhbCBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworI2VuZGlmCisKKwogLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIHVzZSBNYWNQeXRob24gbW9kdWxlcyBvbiBNYWNPU1ggaW4gdW5peC1QeXRob24uICovCiAjdW5kZWYgVVNFX1RPT0xCT1hfT0JKRUNUX0dMVUUKIApAQCAtOTg4LDIwICsxMTAxLDI0IEBACiAvKiBEZWZpbmUgdG8gcHJvZmlsZSB3aXRoIHRoZSBQZW50aXVtIHRpbWVzdGFtcCBjb3VudGVyICovCiAjdW5kZWYgV0lUSF9UU0MKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZQotICAgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwgYW5kIFZBWCkuICovCi0jdW5kZWYgV09SRFNfQklHRU5ESUFOCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgcHltYWxsb2MgdG8gYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIHVuZGVyIHZhbGdyaW5kICovCisjdW5kZWYgV0lUSF9WQUxHUklORAorCisvKiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwpLiAqLworI2lmIGRlZmluZWQgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECisjIGlmIGRlZmluZWQgX19CSUdfRU5ESUFOX18KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2Vsc2UKKyMgaWZuZGVmIFdPUkRTX0JJR0VORElBTgorIyAgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIGVuZGlmCisjZW5kaWYKIAogLyogRGVmaW5lIGlmIGFyaXRobWV0aWMgaXMgc3ViamVjdCB0byB4ODctc3R5bGUgZG91YmxlIHJvdW5kaW5nIGlzc3VlICovCiAjdW5kZWYgWDg3X0RPVUJMRV9ST1VORElORwogCi0vKiBEZWZpbmUgdG8gMSBpZiBvbiBBSVggMy4KLSAgIFN5c3RlbSBoZWFkZXJzIHNvbWV0aW1lcyBkZWZpbmUgdGhpcy4KLSAgIFdlIGp1c3Qgd2FudCB0byBhdm9pZCBhIHJlZGVmaW5pdGlvbiBlcnJvciBtZXNzYWdlLiAgKi8KLSNpZm5kZWYgX0FMTF9TT1VSQ0UKLSMgdW5kZWYgX0FMTF9TT1VSQ0UKLSNlbmRpZgotCiAvKiBEZWZpbmUgb24gT3BlbkJTRCB0byBhY3RpdmF0ZSBhbGwgbGlicmFyeSBmZWF0dXJlcyAqLwogI3VuZGVmIF9CU0RfU09VUkNFCiAKQEAgLTEwMjAsMjEgKzExMzcsNDEgQEAKIC8qIFRoaXMgbXVzdCBiZSBkZWZpbmVkIG9uIHNvbWUgc3lzdGVtcyB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0LiAqLwogI3VuZGVmIF9MQVJHRUZJTEVfU09VUkNFCiAKKy8qIERlZmluZSB0byAxIGlmIG9uIE1JTklYLiAqLworI3VuZGVmIF9NSU5JWAorCiAvKiBEZWZpbmUgb24gTmV0QlNEIHRvIGFjdGl2YXRlIGFsbCBsaWJyYXJ5IGZlYXR1cmVzICovCiAjdW5kZWYgX05FVEJTRF9TT1VSQ0UKIAogLyogRGVmaW5lIF9PU0ZfU09VUkNFIHRvIGdldCB0aGUgbWFrZWRldiBtYWNyby4gKi8KICN1bmRlZiBfT1NGX1NPVVJDRQogCisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLworI3VuZGVmIF9QT1NJWF8xX1NPVVJDRQorCiAvKiBEZWZpbmUgdG8gYWN0aXZhdGUgZmVhdHVyZXMgZnJvbSBJRUVFIFN0ZHMgMTAwMy4xLTIwMDEgKi8KICN1bmRlZiBfUE9TSVhfQ19TT1VSQ0UKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yIGBzdGF0JyBhbmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisjdW5kZWYgX1BPU0lYX1NPVVJDRQorCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcywgYW5kIHlvdXIgc3lzdGVtIGRvZXMgbm90IGRlZmluZSB0aGF0LiAqLwogI3VuZGVmIF9QT1NJWF9USFJFQURTCiAKIC8qIERlZmluZSB0byBmb3JjZSB1c2Ugb2YgdGhyZWFkLXNhZmUgZXJybm8sIGhfZXJybm8sIGFuZCBvdGhlciBmdW5jdGlvbnMgKi8KICN1bmRlZiBfUkVFTlRSQU5UCiAKKy8qIERlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludDMyX3QgdHlwZWRlZiBmcm9tIDxzeXMvc3luY2guaD4sCisgICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2VyZSBhbGxvd2VkLCB0aGUKKyAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCisjdW5kZWYgX1VJTlQzMl9UCisKKy8qIERlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludDY0X3QgdHlwZWRlZiBmcm9tIDxzeXMvc3luY2guaD4sCisgICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2VyZSBhbGxvd2VkLCB0aGUKKyAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCisjdW5kZWYgX1VJTlQ2NF9UCisKIC8qIERlZmluZSB0byB0aGUgbGV2ZWwgb2YgWC9PcGVuIHRoYXQgeW91ciBzeXN0ZW0gc3VwcG9ydHMgKi8KICN1bmRlZiBfWE9QRU5fU09VUkNFCiAKQEAgLTEwNjEsNiArMTE5OCwxNCBAQAogLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICovCiAjdW5kZWYgZ2lkX3QKIAorLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDMyIGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgaW50MzJfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYSBzaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgNjQgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiBpbnQ2NF90CisKIC8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KICN1bmRlZiBtb2RlX3QKIApAQCAtMTA4Miw2ICsxMjI3LDE0IEBACiAvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gKi8KICN1bmRlZiB1aWRfdAogCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMzIgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiB1aW50MzJfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgNjQgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiB1aW50NjRfdAorCiAvKiBEZWZpbmUgdG8gZW1wdHkgaWYgdGhlIGtleXdvcmQgZG9lcyBub3Qgd29yay4gKi8KICN1bmRlZiB2b2xhdGlsZQogCmRpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CmluZGV4IDRmZTFmNDUuLmY5NDc0NzggMTAwNjQ0Ci0tLSBhL3NldHVwLnB5CisrKyBiL3NldHVwLnB5CkBAIC02LDkgKzYsOSBAQAogaW1wb3J0IHN5cywgb3MsIGltcCwgcmUsIG9wdHBhcnNlCiBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKIGZyb20gcGxhdGZvcm0gaW1wb3J0IG1hY2hpbmUgYXMgcGxhdGZvcm1fbWFjaGluZQoraW1wb3J0IHN5c2NvbmZpZwogCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgdGV4dF9maWxlCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IEV4dGVuc2lvbiwgc2V0dXAKQEAgLTE3LDYgKzE3LDkgQEAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9saWIgaW1wb3J0IGluc3RhbGxfbGliCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCiAKKyMgV2VyZSB3ZSBjb21waWxlZCAtLXdpdGgtcHlkZWJ1ZyBvciB3aXRoICNkZWZpbmUgUHlfREVCVUc/CitDT01QSUxFRF9XSVRIX1BZREVCVUcgPSBoYXNhdHRyKHN5cywgJ2dldHRvdGFscmVmY291bnQnKQorCiAjIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgdG8gaG9sZCB0aGUgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGRpc2FibGVkLgogZGlzYWJsZWRfbW9kdWxlX2xpc3QgPSBbXQogCkBAIC0xNjQsNzMgKzE2Nyw2MCBAQAogICAgICAgICBpZiBub3Qgc3JjZGlyOgogICAgICAgICAgICAgIyBNYXliZSBydW5uaW5nIG9uIFdpbmRvd3MgYnV0IG5vdCB1c2luZyBDWUdXSU4/CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBzb3VyY2UgZGlyZWN0b3J5OyBjYW5ub3QgcHJvY2VlZC4iKQotCi0gICAgICAgICMgRmlndXJlIG91dCB0aGUgbG9jYXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlIGZvciBleHRlbnNpb24gbW9kdWxlcwotICAgICAgICAjIChUaGlzIGxvZ2ljIGlzIGNvcGllZCBpbiBkaXN0dXRpbHMudGVzdC50ZXN0X3N5c2NvbmZpZywKLSAgICAgICAgIyBzbyBidWlsZGluZyBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeSBkb2VzIG5vdCBicmVhayB0ZXN0X2Rpc3R1dGlscy4pCi0gICAgICAgIG1vZGRpciA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgc3JjZGlyLCAnTW9kdWxlcycpCi0gICAgICAgIG1vZGRpciA9IG9zLnBhdGgubm9ybXBhdGgobW9kZGlyKQotICAgICAgICBzcmNkaXIsIHRhaWwgPSBvcy5wYXRoLnNwbGl0KG1vZGRpcikKLSAgICAgICAgc3JjZGlyID0gb3MucGF0aC5ub3JtcGF0aChzcmNkaXIpCi0gICAgICAgIG1vZGRpciA9IG9zLnBhdGgubm9ybXBhdGgobW9kZGlyKQotCi0gICAgICAgIG1vZGRpcmxpc3QgPSBbbW9kZGlyXQotICAgICAgICBpbmNkaXJsaXN0ID0gWycuL0luY2x1ZGUnXQorICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmFic3BhdGgoc3JjZGlyKQorICAgICAgICBtb2RkaXJsaXN0ID0gW29zLnBhdGguam9pbihzcmNkaXIsICdNb2R1bGVzJyldCiAKICAgICAgICAgIyBQbGF0Zm9ybS1kZXBlbmRlbnQgbW9kdWxlIHNvdXJjZSBhbmQgaW5jbHVkZSBkaXJlY3RvcmllcworICAgICAgICBpbmNkaXJsaXN0ID0gW10KICAgICAgICAgcGxhdGZvcm0gPSBzZWxmLmdldF9wbGF0Zm9ybSgpCi0gICAgICAgIGlmIHBsYXRmb3JtIGluICgnZGFyd2luJywgJ21hYycpIGFuZCAoIi0tZGlzYWJsZS10b29sYm94LWdsdWUiIG5vdCBpbgorICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnZGFyd2luJyBhbmQgKCItLWRpc2FibGUtdG9vbGJveC1nbHVlIiBub3QgaW4KICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ09ORklHX0FSR1MiKSk6CiAgICAgICAgICAgICAjIE1hYyBPUyBYIGFsc28gaW5jbHVkZXMgc29tZSBtYWMtc3BlY2lmaWMgbW9kdWxlcwotICAgICAgICAgICAgbWFjbW9kZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBzcmNkaXIsICdNYWMvTW9kdWxlcycpCisgICAgICAgICAgICBtYWNtb2RkaXIgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCAnTWFjL01vZHVsZXMnKQogICAgICAgICAgICAgbW9kZGlybGlzdC5hcHBlbmQobWFjbW9kZGlyKQotICAgICAgICAgICAgaW5jZGlybGlzdC5hcHBlbmQoJy4vTWFjL0luY2x1ZGUnKQotCi0gICAgICAgIGFsbGRpcmxpc3QgPSBtb2RkaXJsaXN0ICsgaW5jZGlybGlzdAorICAgICAgICAgICAgaW5jZGlybGlzdC5hcHBlbmQob3MucGF0aC5qb2luKHNyY2RpciwgJ01hYy9JbmNsdWRlJykpCiAKICAgICAgICAgIyBGaXggdXAgdGhlIHBhdGhzIGZvciBzY3JpcHRzLCB0b28KICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24uc2NyaXB0cyA9IFtvcy5wYXRoLmpvaW4oc3JjZGlyLCBmaWxlbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5kaXN0cmlidXRpb24uc2NyaXB0c10KIAogICAgICAgICAjIFB5dGhvbiBoZWFkZXIgZmlsZXMKLSAgICAgICAgaGVhZGVycyA9IGdsb2IoIkluY2x1ZGUvKi5oIikgKyBbInB5Y29uZmlnLmgiXQotCisgICAgICAgIGhlYWRlcnMgPSBbc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZSgpXQorICAgICAgICBoZWFkZXJzICs9IGdsb2Iob3MucGF0aC5qb2luKHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGluY2x1ZGUnKSwgIiouaCIpKQogICAgICAgICBmb3IgZXh0IGluIHNlbGYuZXh0ZW5zaW9uc1s6XToKICAgICAgICAgICAgIGV4dC5zb3VyY2VzID0gWyBmaW5kX21vZHVsZV9maWxlKGZpbGVuYW1lLCBtb2RkaXJsaXN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBleHQuc291cmNlcyBdCiAgICAgICAgICAgICBpZiBleHQuZGVwZW5kcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBleHQuZGVwZW5kcyA9IFtmaW5kX21vZHVsZV9maWxlKGZpbGVuYW1lLCBhbGxkaXJsaXN0KQorICAgICAgICAgICAgICAgIGV4dC5kZXBlbmRzID0gW2ZpbmRfbW9kdWxlX2ZpbGUoZmlsZW5hbWUsIG1vZGRpcmxpc3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGV4dC5kZXBlbmRzXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBleHQuZGVwZW5kcyA9IFtdCiAgICAgICAgICAgICAjIHJlLWNvbXBpbGUgZXh0ZW5zaW9ucyBpZiBhIGhlYWRlciBmaWxlIGhhcyBiZWVuIGNoYW5nZWQKICAgICAgICAgICAgIGV4dC5kZXBlbmRzLmV4dGVuZChoZWFkZXJzKQogCi0gICAgICAgICAgICBleHQuaW5jbHVkZV9kaXJzLmFwcGVuZCggJy4nICkgIyB0byBnZXQgY29uZmlnLmgKLSAgICAgICAgICAgIGZvciBpbmNkaXIgaW4gaW5jZGlybGlzdDoKLSAgICAgICAgICAgICAgICBleHQuaW5jbHVkZV9kaXJzLmFwcGVuZCggb3MucGF0aC5qb2luKHNyY2RpciwgaW5jZGlyKSApCisgICAgICAgICAgICAjIHBsYXRmb3JtIHNwZWNpZmljIGluY2x1ZGUgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgIGV4dC5pbmNsdWRlX2RpcnMuZXh0ZW5kKGluY2Rpcmxpc3QpCiAKICAgICAgICAgICAgICMgSWYgYSBtb2R1bGUgaGFzIGFscmVhZHkgYmVlbiBidWlsdCBzdGF0aWNhbGx5LAogICAgICAgICAgICAgIyBkb24ndCBidWlsZCBpdCBoZXJlCiAgICAgICAgICAgICBpZiBleHQubmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CiAgICAgICAgICAgICAgICAgc2VsZi5leHRlbnNpb25zLnJlbW92ZShleHQpCiAKLSAgICAgICAgaWYgcGxhdGZvcm0gIT0gJ21hYyc6Ci0gICAgICAgICAgICAjIFBhcnNlIE1vZHVsZXMvU2V0dXAgYW5kIE1vZHVsZXMvU2V0dXAubG9jYWwgdG8gZmlndXJlIG91dCB3aGljaAotICAgICAgICAgICAgIyBtb2R1bGVzIGFyZSB0dXJuZWQgb24gaW4gdGhlIGZpbGUuCi0gICAgICAgICAgICByZW1vdmVfbW9kdWxlcyA9IFtdCi0gICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gKCdNb2R1bGVzL1NldHVwJywgJ01vZHVsZXMvU2V0dXAubG9jYWwnKToKLSAgICAgICAgICAgICAgICBpbnB1dCA9IHRleHRfZmlsZS5UZXh0RmlsZShmaWxlbmFtZSwgam9pbl9saW5lcz0xKQotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBpbnB1dC5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBicmVhawotICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgpCi0gICAgICAgICAgICAgICAgICAgIHJlbW92ZV9tb2R1bGVzLmFwcGVuZChsaW5lWzBdKQotICAgICAgICAgICAgICAgIGlucHV0LmNsb3NlKCkKKyAgICAgICAgIyBQYXJzZSBNb2R1bGVzL1NldHVwIGFuZCBNb2R1bGVzL1NldHVwLmxvY2FsIHRvIGZpZ3VyZSBvdXQgd2hpY2gKKyAgICAgICAgIyBtb2R1bGVzIGFyZSB0dXJuZWQgb24gaW4gdGhlIGZpbGUuCisgICAgICAgIHJlbW92ZV9tb2R1bGVzID0gW10KKyAgICAgICAgZm9yIGZpbGVuYW1lIGluICgnTW9kdWxlcy9TZXR1cCcsICdNb2R1bGVzL1NldHVwLmxvY2FsJyk6CisgICAgICAgICAgICBpbnB1dCA9IHRleHRfZmlsZS5UZXh0RmlsZShmaWxlbmFtZSwgam9pbl9saW5lcz0xKQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBsaW5lID0gaW5wdXQucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBicmVhaworICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICByZW1vdmVfbW9kdWxlcy5hcHBlbmQobGluZVswXSkKKyAgICAgICAgICAgIGlucHV0LmNsb3NlKCkKIAotICAgICAgICAgICAgZm9yIGV4dCBpbiBzZWxmLmV4dGVuc2lvbnNbOl06Ci0gICAgICAgICAgICAgICAgaWYgZXh0Lm5hbWUgaW4gcmVtb3ZlX21vZHVsZXM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXh0ZW5zaW9ucy5yZW1vdmUoZXh0KQorICAgICAgICBmb3IgZXh0IGluIHNlbGYuZXh0ZW5zaW9uc1s6XToKKyAgICAgICAgICAgIGlmIGV4dC5uYW1lIGluIHJlbW92ZV9tb2R1bGVzOgorICAgICAgICAgICAgICAgIHNlbGYuZXh0ZW5zaW9ucy5yZW1vdmUoZXh0KQogCiAgICAgICAgICMgV2hlbiB5b3UgcnVuICJtYWtlIENDPWFsdGNjIiBvciBzb21ldGhpbmcgc2ltaWxhciwgeW91IHJlYWxseSB3YW50CiAgICAgICAgICMgdGhvc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHBhc3NlZCBpbnRvIHRoZSBzZXR1cC5weSBwaGFzZS4gIEhlcmUncwpAQCAtMjYxLDcgKzI1MSw4IEBACiAKICAgICAgICAgaWYgbWlzc2luZzoKICAgICAgICAgICAgIHByaW50Ci0gICAgICAgICAgICBwcmludCAiRmFpbGVkIHRvIGZpbmQgdGhlIG5lY2Vzc2FyeSBiaXRzIHRvIGJ1aWxkIHRoZXNlIG1vZHVsZXM6IgorICAgICAgICAgICAgcHJpbnQgKCJQeXRob24gYnVpbGQgZmluaXNoZWQsIGJ1dCB0aGUgbmVjZXNzYXJ5IGJpdHMgdG8gYnVpbGQgIgorICAgICAgICAgICAgICAgICAgICJ0aGVzZSBtb2R1bGVzIHdlcmUgbm90IGZvdW5kOiIpCiAgICAgICAgICAgICBwcmludF90aHJlZV9jb2x1bW4obWlzc2luZykKICAgICAgICAgICAgIHByaW50ICgiVG8gZmluZCB0aGUgbmVjZXNzYXJ5IGJpdHMsIGxvb2sgaW4gc2V0dXAucHkgaW4iCiAgICAgICAgICAgICAgICAgICAgIiBkZXRlY3RfbW9kdWxlcygpIGZvciB0aGUgbW9kdWxlJ3MgbmFtZS4iKQpAQCAtMzkzLDcgKzM4NCwxMiBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHJldmVyc2VkKG9wdGlvbnMuZGlycyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3QoZGlyX2xpc3QsIGRpcmVjdG9yeSkKIAotICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJzoKKyAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICMgT1NYIG5vdGU6IERvbid0IGFkZCBMSUJESVIgYW5kIElOQ0xVREVESVIgdG8gYnVpbGRpbmcgYSBmcmFtZXdvcmsKKyAgICAgICAgICAgICMgKFBZVEhPTkZSQU1FV09SSyBpcyBzZXQpIHRvIGF2b2lkICMgbGlua2luZyBwcm9ibGVtcyB3aGVuCisgICAgICAgICAgICAjIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgdGhhbgorICAgICAgICAgICAgIyB0aGUgb25lIHRoYXQgaXMgY3VycmVudGx5IGluc3RhbGxlZCAoaXNzdWUgIzc0NzMpCiAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKQEAgLTQxOSw3ICs0MTUsNyBAQAogICAgICAgICBjb25maWdfaF92YXJzID0gc3lzY29uZmlnLnBhcnNlX2NvbmZpZ19oKG9wZW4oY29uZmlnX2gpKQogCiAgICAgICAgIHBsYXRmb3JtID0gc2VsZi5nZXRfcGxhdGZvcm0oKQotICAgICAgICAoc3JjZGlyLCkgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdzcmNkaXInKQorICAgICAgICBzcmNkaXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpCiAKICAgICAgICAgIyBDaGVjayBmb3IgQXRoZU9TIHdoaWNoIGhhcyBsaWJyYXJpZXMgaW4gbm9uLXN0YW5kYXJkIGxvY2F0aW9ucwogICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnYXRoZW9zJzoKQEAgLTQ1MSw3ICs0NDcsNyBAQAogCiAgICAgICAgICMgQ2hlY2sgZm9yIE1hY09TIFgsIHdoaWNoIGRvZXNuJ3QgbmVlZCBsaWJtLmEgYXQgYWxsCiAgICAgICAgIG1hdGhfbGlicyA9IFsnbSddCi0gICAgICAgIGlmIHBsYXRmb3JtIGluIFsnZGFyd2luJywgJ2Jlb3MnLCAnbWFjJ106CisgICAgICAgIGlmIHBsYXRmb3JtIGluIFsnZGFyd2luJywgJ2Jlb3MnXToKICAgICAgICAgICAgIG1hdGhfbGlicyA9IFtdCiAKICAgICAgICAgIyBYWFggT21pdHRlZCBtb2R1bGVzOiBnbCwgcHVyZSwgZGwsIFNHSS1zcGVjaWZpYyBtb2R1bGVzCkBAIC00NjIsMTYgKzQ1OCwxNyBAQAogICAgICAgICAjCiAKICAgICAgICAgIyBTb21lIG1vZHVsZXMgdGhhdCBhcmUgbm9ybWFsbHkgYWx3YXlzIG9uOgotICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfd2Vha3JlZicsIFsnX3dlYWtyZWYuYyddKSApCisgICAgICAgICNleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfd2Vha3JlZicsIFsnX3dlYWtyZWYuYyddKSApCiAKICAgICAgICAgIyBhcnJheSBvYmplY3RzCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2FycmF5JywgWydhcnJheW1vZHVsZS5jJ10pICkKICAgICAgICAgIyBjb21wbGV4IG1hdGggbGlicmFyeSBmdW5jdGlvbnMKLSAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignY21hdGgnLCBbJ2NtYXRobW9kdWxlLmMnXSwKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignY21hdGgnLCBbJ2NtYXRobW9kdWxlLmMnLCAnX21hdGguYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHM9WydfbWF0aC5oJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPW1hdGhfbGlicykgKQotCiAgICAgICAgICMgbWF0aCBsaWJyYXJ5IGZ1bmN0aW9ucywgZS5nLiBzaW4oKQotICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdtYXRoJywgIFsnbWF0aG1vZHVsZS5jJ10sCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ21hdGgnLCAgWydtYXRobW9kdWxlLmMnLCAnX21hdGguYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHM9WydfbWF0aC5oJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPW1hdGhfbGlicykgKQogICAgICAgICAjIGZhc3Qgc3RyaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50ZWQgaW4gQwogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdzdHJvcCcsIFsnc3Ryb3Btb2R1bGUuYyddKSApCkBAIC00OTUsMTAgKzQ5MiwxMSBAQAogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCJfaGVhcHEiLCBbIl9oZWFwcW1vZHVsZS5jIl0pICkKICAgICAgICAgIyBvcGVyYXRvci5hZGQoKSBhbmQgc2ltaWxhciBnb29kaWVzCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ29wZXJhdG9yJywgWydvcGVyYXRvci5jJ10pICkKLSAgICAgICAgIyBQeXRob24gMy4wIF9maWxlaW8gbW9kdWxlCi0gICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oIl9maWxlaW8iLCBbIl9maWxlaW8uYyJdKSApCi0gICAgICAgICMgUHl0aG9uIDMuMCBfYnl0ZXNpbyBtb2R1bGUKLSAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigiX2J5dGVzaW8iLCBbIl9ieXRlc2lvLmMiXSkgKQorICAgICAgICAjIFB5dGhvbiAzLjEgX2lvIGxpYnJhcnkKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigiX2lvIiwKKyAgICAgICAgICAgIFsiX2lvL2J1ZmZlcmVkaW8uYyIsICJfaW8vYnl0ZXNpby5jIiwgIl9pby9maWxlaW8uYyIsCisgICAgICAgICAgICAgIl9pby9pb2Jhc2UuYyIsICJfaW8vX2lvbW9kdWxlLmMiLCAiX2lvL3N0cmluZ2lvLmMiLCAiX2lvL3RleHRpby5jIl0sCisgICAgICAgICAgICAgZGVwZW5kcz1bIl9pby9faW9tb2R1bGUuaCJdLCBpbmNsdWRlX2RpcnM9WyJNb2R1bGVzL19pbyJdKSkKICAgICAgICAgIyBfZnVuY3Rvb2xzCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oIl9mdW5jdG9vbHMiLCBbIl9mdW5jdG9vbHNtb2R1bGUuYyJdKSApCiAgICAgICAgICMgX2pzb24gc3BlZWR1cHMKQEAgLTUzNiwyMCArNTM0LDIxIEBACiAgICAgICAgICMgc3VwcG9ydGVkLi4uKQogCiAgICAgICAgICMgZmNudGwoMikgYW5kIGlvY3RsKDIpCi0gICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2ZjbnRsJywgWydmY250bG1vZHVsZS5jJ10pICkKLSAgICAgICAgaWYgcGxhdGZvcm0gbm90IGluIFsnbWFjJ106Ci0gICAgICAgICAgICAjIHB3ZCgzKQotICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigncHdkJywgWydwd2Rtb2R1bGUuYyddKSApCi0gICAgICAgICAgICAjIGdycCgzKQotICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignZ3JwJywgWydncnBtb2R1bGUuYyddKSApCi0gICAgICAgICAgICAjIHNwd2QsIHNoYWRvdyBwYXNzd29yZHMKLSAgICAgICAgICAgIGlmIChjb25maWdfaF92YXJzLmdldCgnSEFWRV9HRVRTUE5BTScsIEZhbHNlKSBvcgotICAgICAgICAgICAgICAgICAgICBjb25maWdfaF92YXJzLmdldCgnSEFWRV9HRVRTUEVOVCcsIEZhbHNlKSk6Ci0gICAgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignc3B3ZCcsIFsnc3B3ZG1vZHVsZS5jJ10pICkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ3Nwd2QnKQorICAgICAgICBsaWJzID0gW10KKyAgICAgICAgaWYgKGNvbmZpZ19oX3ZhcnMuZ2V0KCdGTE9DS19ORUVEU19MSUJCU0QnLCBGYWxzZSkpOgorICAgICAgICAgICAgIyBNYXkgYmUgbmVjZXNzYXJ5IG9uIEFJWCBmb3IgZmxvY2sgZnVuY3Rpb24KKyAgICAgICAgICAgIGxpYnMgPSBbJ2JzZCddCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2ZjbnRsJywgWydmY250bG1vZHVsZS5jJ10sIGxpYnJhcmllcz1saWJzKSApCisgICAgICAgICMgcHdkKDMpCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3B3ZCcsIFsncHdkbW9kdWxlLmMnXSkgKQorICAgICAgICAjIGdycCgzKQorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdncnAnLCBbJ2dycG1vZHVsZS5jJ10pICkKKyAgICAgICAgIyBzcHdkLCBzaGFkb3cgcGFzc3dvcmRzCisgICAgICAgIGlmIChjb25maWdfaF92YXJzLmdldCgnSEFWRV9HRVRTUE5BTScsIEZhbHNlKSBvcgorICAgICAgICAgICAgICAgIGNvbmZpZ19oX3ZhcnMuZ2V0KCdIQVZFX0dFVFNQRU5UJywgRmFsc2UpKToKKyAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3Nwd2QnLCBbJ3Nwd2Rtb2R1bGUuYyddKSApCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtaXNzaW5nLmV4dGVuZChbJ3B3ZCcsICdncnAnLCAnc3B3ZCddKQorICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ3Nwd2QnKQogCiAgICAgICAgICMgc2VsZWN0KDIpOyBub3Qgb24gYW5jaWVudCBTeXN0ZW0gVgogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdzZWxlY3QnLCBbJ3NlbGVjdG1vZHVsZS5jJ10pICkKQEAgLTU2MiwxNyArNTYxLDE0IEBACiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2NQaWNrbGUnLCBbJ2NQaWNrbGUuYyddKSApCiAKICAgICAgICAgIyBNZW1vcnktbWFwcGVkIGZpbGVzIChhbHNvIHdvcmtzIG9uIFdpbjMyKS4KLSAgICAgICAgaWYgcGxhdGZvcm0gbm90IGluIFsnYXRoZW9zJywgJ21hYyddOgorICAgICAgICBpZiBwbGF0Zm9ybSBub3QgaW4gWydhdGhlb3MnXToKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ21tYXAnLCBbJ21tYXBtb2R1bGUuYyddKSApCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnbW1hcCcpCiAKICAgICAgICAgIyBMYW5jZSBFbGxpbmdoYXVzJ3Mgc3lzbG9nIG1vZHVsZQotICAgICAgICBpZiBwbGF0Zm9ybSBub3QgaW4gWydtYWMnXToKLSAgICAgICAgICAgICMgc3lzbG9nIGRhZW1vbiBpbnRlcmZhY2UKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3N5c2xvZycsIFsnc3lzbG9nbW9kdWxlLmMnXSkgKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ3N5c2xvZycpCisgICAgICAgICMgc3lzbG9nIGRhZW1vbiBpbnRlcmZhY2UKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignc3lzbG9nJywgWydzeXNsb2dtb2R1bGUuYyddKSApCiAKICAgICAgICAgIyBHZW9yZ2UgTmV2aWxsZS1OZWlsJ3MgdGltaW5nIG1vZHVsZToKICAgICAgICAgIyBEZXByZWNhdGVkIGluIFBFUCA0IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wZXBzL3BlcC0wMDA0Lmh0bWwKQEAgLTYyMSwxMyArNjE3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICMgSXNzdWUgNzM4NDogSWYgcmVhZGxpbmUgaXMgYWxyZWFkeSBsaW5rZWQgYWdhaW5zdCBjdXJzZXMsCiAgICAgICAgICMgdXNlIHRoZSBzYW1lIGxpYnJhcnkgZm9yIHRoZSByZWFkbGluZSBhbmQgY3Vyc2VzIG1vZHVsZXMuCi0gICAgICAgICMgRGlzYWJsZWQgc2luY2UgYXBwbGljYXRpb25zIHJlbHlpbmcgb24gbmN1cnNlc3cgbWlnaHQgYnJlYWsuCi0gICAgICAgICMKLSAgICAgICAgIyBpZiAnY3Vyc2VzJyBpbiByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnk6Ci0gICAgICAgICMgICAgY3Vyc2VzX2xpYnJhcnkgPSByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkKLSAgICAgICAgIyBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzdycpOgotICAgICAgICAjICguLi4pCi0gICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzdycpOgorICAgICAgICBpZiAnY3Vyc2VzJyBpbiByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnk6CisgICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9IHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeQorICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzdycpOgogICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAnbmN1cnNlc3cnCiAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ25jdXJzZXMnKToKICAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gJ25jdXJzZXMnCkBAIC02NjIsOCArNjU0LDggQEAKICAgICAgICAgICAgIGVsaWYgY3Vyc2VzX2xpYnJhcnk6CiAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoY3Vyc2VzX2xpYnJhcnkpCiAgICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvbGliL3Rlcm1jYXAnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1jYXAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyL2xpYi90ZXJtY2FwJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtY2FwJyk6CiAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoJ3Rlcm1jYXAnKQogICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigncmVhZGxpbmUnLCBbJ3JlYWRsaW5lLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPVsnL3Vzci9saWIvdGVybWNhcCddLApAQCAtNjcyLDE2ICs2NjQsMTMgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdyZWFkbGluZScpCiAKLSAgICAgICAgaWYgcGxhdGZvcm0gbm90IGluIFsnbWFjJ106Ci0gICAgICAgICAgICAjIGNyeXB0IG1vZHVsZS4KKyAgICAgICAgIyBjcnlwdCBtb2R1bGUuCiAKLSAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICdjcnlwdCcpOgotICAgICAgICAgICAgICAgIGxpYnMgPSBbJ2NyeXB0J10KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbGlicyA9IFtdCi0gICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdjcnlwdCcsIFsnY3J5cHRtb2R1bGUuYyddLCBsaWJyYXJpZXM9bGlicykgKQorICAgICAgICBpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnY3J5cHQnKToKKyAgICAgICAgICAgIGxpYnMgPSBbJ2NyeXB0J10KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdjcnlwdCcpCisgICAgICAgICAgICBsaWJzID0gW10KKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignY3J5cHQnLCBbJ2NyeXB0bW9kdWxlLmMnXSwgbGlicmFyaWVzPWxpYnMpICkKIAogICAgICAgICAjIENTViBmaWxlcwogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfY3N2JywgWydfY3N2LmMnXSkgKQpAQCAtNzM5LDE5ICs3MjgsMjQgQEAKICAgICAgICAgICAgICAgICBwcmludCAiSU9FcnJvciB3aGlsZSByZWFkaW5nIG9wZW5zc2h2Lmg6IiwgbXNnCiAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgICAgIG1pbl9vcGVuc3NsX3ZlciA9IDB4MDA5MDcwMDAKKyAgICAgICAgaGF2ZV9hbnlfb3BlbnNzbCA9IHNzbF9pbmNzIGlzIG5vdCBOb25lIGFuZCBzc2xfbGlicyBpcyBub3QgTm9uZQorICAgICAgICBoYXZlX3VzYWJsZV9vcGVuc3NsID0gKGhhdmVfYW55X29wZW5zc2wgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNzbF92ZXIgPj0gbWluX29wZW5zc2xfdmVyKQogCi0gICAgICAgIGlmIChzc2xfaW5jcyBpcyBub3QgTm9uZSBhbmQKLSAgICAgICAgICAgIHNzbF9saWJzIGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgICAgb3BlbnNzbF92ZXIgPj0gMHgwMDkwNzAwMCk6Ci0gICAgICAgICAgICAjIFRoZSBfaGFzaGxpYiBtb2R1bGUgd3JhcHMgb3B0aW1pemVkIGltcGxlbWVudGF0aW9ucwotICAgICAgICAgICAgIyBvZiBoYXNoIGZ1bmN0aW9ucyBmcm9tIHRoZSBPcGVuU1NMIGxpYnJhcnkuCi0gICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfaGFzaGxpYicsIFsnX2hhc2hvcGVuc3NsLmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzID0gc3NsX2luY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycyA9IHNzbF9saWJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbJ3NzbCcsICdjcnlwdG8nXSkgKQotICAgICAgICAgICAgIyB0aGVzZSBhcmVuJ3Qgc3RyaWN0bHkgbWlzc2luZyBzaW5jZSB0aGV5IGFyZSB1bm5lZWRlZC4KLSAgICAgICAgICAgICNtaXNzaW5nLmV4dGVuZChbJ19zaGEnLCAnX21kNSddKQotICAgICAgICBlbHNlOgorICAgICAgICBpZiBoYXZlX2FueV9vcGVuc3NsOgorICAgICAgICAgICAgaWYgaGF2ZV91c2FibGVfb3BlbnNzbDoKKyAgICAgICAgICAgICAgICAjIFRoZSBfaGFzaGxpYiBtb2R1bGUgd3JhcHMgb3B0aW1pemVkIGltcGxlbWVudGF0aW9ucworICAgICAgICAgICAgICAgICMgb2YgaGFzaCBmdW5jdGlvbnMgZnJvbSB0aGUgT3BlblNTTCBsaWJyYXJ5LgorICAgICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19oYXNobGliJywgWydfaGFzaG9wZW5zc2wuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzID0gc3NsX2luY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnMgPSBzc2xfbGlicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyA9IFsnc3NsJywgJ2NyeXB0byddKSApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgid2FybmluZzogb3BlbnNzbCAweCUwOHggaXMgdG9vIG9sZCBmb3IgX2hhc2hsaWIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNzbF92ZXIpCisgICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ19oYXNobGliJykKKyAgICAgICAgaWYgQ09NUElMRURfV0lUSF9QWURFQlVHIG9yIG5vdCBoYXZlX3VzYWJsZV9vcGVuc3NsOgogICAgICAgICAgICAgIyBUaGUgX3NoYSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgU0hBMSBoYXNoIGFsZ29yaXRobS4KICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19zaGEnLCBbJ3NoYW1vZHVsZS5jJ10pICkKICAgICAgICAgICAgICMgVGhlIF9tZDUgbW9kdWxlIGltcGxlbWVudHMgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENQpAQCAtNzYwLDkgKzc1NCw5IEBACiAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfbWQ1JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzID0gWydtZDVtb2R1bGUuYycsICdtZDUuYyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgPSBbJ21kNS5oJ10pICkKLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdfaGFzaGxpYicpCiAKLSAgICAgICAgaWYgKG9wZW5zc2xfdmVyIDwgMHgwMDkwODAwMCk6CisgICAgICAgIG1pbl9zaGEyX29wZW5zc2xfdmVyID0gMHgwMDkwODAwMAorICAgICAgICBpZiBDT01QSUxFRF9XSVRIX1BZREVCVUcgb3Igb3BlbnNzbF92ZXIgPCBtaW5fc2hhMl9vcGVuc3NsX3ZlcjoKICAgICAgICAgICAgICMgT3BlblNTTCBkb2Vzbid0IGRvIHRoZXNlIHVudGlsIDAuOS44IHNvIHdlJ2xsIGJyaW5nIG91ciBvd24gaGFzaAogICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3NoYTI1NicsIFsnc2hhMjU2bW9kdWxlLmMnXSkgKQogICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3NoYTUxMicsIFsnc2hhNTEybW9kdWxlLmMnXSkgKQpAQCAtNzgyLDggKzc3Niw4IEBACiAgICAgICAgICMgYSByZWxlYXNlLiAgTW9zdCBvcGVuIHNvdXJjZSBPU2VzIGNvbWUgd2l0aCBvbmUgb3IgbW9yZQogICAgICAgICAjIHZlcnNpb25zIG9mIEJlcmtlbGV5REIgYWxyZWFkeSBpbnN0YWxsZWQuCiAKLSAgICAgICAgbWF4X2RiX3ZlciA9ICg0LCA3KQotICAgICAgICBtaW5fZGJfdmVyID0gKDMsIDMpCisgICAgICAgIG1heF9kYl92ZXIgPSAoNCwgOCkKKyAgICAgICAgbWluX2RiX3ZlciA9ICg0LCAxKQogICAgICAgICBkYl9zZXR1cF9kZWJ1ZyA9IEZhbHNlICAgIyB2ZXJib3NlIGRlYnVnIHByaW50cyBmcm9tIHRoaXMgc2NyaXB0PwogCiAgICAgICAgIGRlZiBhbGxvd19kYl92ZXIoZGJfdmVyKToKQEAgLTEwNjEsNiArMTA1NSw4IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNxbGl0ZV9kZWZpbmVzLmFwcGVuZCgoJ01PRFVMRV9OQU1FJywgJ1xcInNxbGl0ZTNcXCInKSkKIAorICAgICAgICAgICAgIyBDb21tZW50IHRoaXMgb3V0IGlmIHlvdSB3YW50IHRoZSBzcWxpdGUzIG1vZHVsZSB0byBiZSBhYmxlIHRvIGxvYWQgZXh0ZW5zaW9ucy4KKyAgICAgICAgICAgIHNxbGl0ZV9kZWZpbmVzLmFwcGVuZCgoIlNRTElURV9PTUlUX0xPQURfRVhURU5TSU9OIiwgIjEiKSkKIAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICAgICAgICAgICMgSW4gZXZlcnkgZGlyZWN0b3J5IG9uIHRoZSBzZWFyY2ggcGF0aCBzZWFyY2ggZm9yIGEgZHluYW1pYwpAQCAtMTEyMCw1MyArMTExNiw4NyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ2JzZGRiMTg1JykKIAorICAgICAgICBkYm1fb3JkZXIgPSBbJ2dkYm0nXQogICAgICAgICAjIFRoZSBzdGFuZGFyZCBVbml4IGRibSBtb2R1bGU6CiAgICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiBbJ2N5Z3dpbiddOgotICAgICAgICAgICAgaWYgZmluZF9maWxlKCJuZGJtLmgiLCBpbmNfZGlycywgW10pIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICMgU29tZSBzeXN0ZW1zIGhhdmUgLWxuZGJtLCBvdGhlcnMgZG9uJ3QKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnbmRibScpOgotICAgICAgICAgICAgICAgICAgICBuZGJtX2xpYnMgPSBbJ25kYm0nXQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG5kYm1fbGlicyA9IFtdCi0gICAgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignZGJtJywgWydkYm1tb2R1bGUuYyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1bKCdIQVZFX05EQk1fSCcsTm9uZSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzID0gbmRibV9saWJzICkgKQotICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnZ2RibScpOgotICAgICAgICAgICAgICAgIGdkYm1fbGlicyA9IFsnZ2RibSddCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ2dkYm1fY29tcGF0Jyk6Ci0gICAgICAgICAgICAgICAgICAgIGdkYm1fbGlicy5hcHBlbmQoJ2dkYm1fY29tcGF0JykKLSAgICAgICAgICAgICAgICBpZiBmaW5kX2ZpbGUoImdkYm0vbmRibS5oIiwgaW5jX2RpcnMsIFtdKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICdkYm0nLCBbJ2RibW1vZHVsZS5jJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsoJ0hBVkVfR0RCTV9OREJNX0gnLE5vbmUpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyA9IGdkYm1fbGlicyApICkKLSAgICAgICAgICAgICAgICBlbGlmIGZpbmRfZmlsZSgiZ2RibS1uZGJtLmgiLCBpbmNfZGlycywgW10pIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgJ2RibScsIFsnZGJtbW9kdWxlLmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WygnSEFWRV9HREJNX0RBU0hfTkRCTV9IJyxOb25lKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBnZGJtX2xpYnMgKSApCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ2RibScpCi0gICAgICAgICAgICBlbGlmIGRiX2luY3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignZGJtJywgWydkYm1tb2R1bGUuYyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPWRibGliX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPWRibGliX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1kYl9pbmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1bKCdIQVZFX0JFUktEQl9IJyxOb25lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnREJfREJNX0hTRUFSQ0gnLE5vbmUpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1kYmxpYnMpKQorICAgICAgICAgICAgY29uZmlnX2FyZ3MgPSBbYXJnLnN0cmlwKCInIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJDT05GSUdfQVJHUyIpLnNwbGl0KCldCisgICAgICAgICAgICBkYm1fYXJncyA9IFthcmcgZm9yIGFyZyBpbiBjb25maWdfYXJncworICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXJnLnN0YXJ0c3dpdGgoJy0td2l0aC1kYm1saWJvcmRlcj0nKV0KKyAgICAgICAgICAgIGlmIGRibV9hcmdzOgorICAgICAgICAgICAgICAgIGRibV9vcmRlciA9IFthcmcuc3BsaXQoJz0nKVstMV0gZm9yIGFyZyBpbiBkYm1fYXJnc11bLTFdLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGJtX29yZGVyID0gIm5kYm06Z2RibTpiZGIiLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGRibWV4dCA9IE5vbmUKKyAgICAgICAgICAgIGZvciBjYW5kIGluIGRibV9vcmRlcjoKKyAgICAgICAgICAgICAgICBpZiBjYW5kID09ICJuZGJtIjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZmluZF9maWxlKCJuZGJtLmgiLCBpbmNfZGlycywgW10pIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBTb21lIHN5c3RlbXMgaGF2ZSAtbG5kYm0sIG90aGVycyBkb24ndAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZGJtJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRibV9saWJzID0gWyduZGJtJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRibV9saWJzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJidWlsZGluZyBkYm0gdXNpbmcgbmRibSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRibWV4dCA9IEV4dGVuc2lvbignZGJtJywgWydkYm1tb2R1bGUuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0hBVkVfTkRCTV9IJyxOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9bmRibV9saWJzKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGVsaWYgY2FuZCA9PSAiZ2RibSI6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICdnZGJtJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBnZGJtX2xpYnMgPSBbJ2dkYm0nXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZGJtX2NvbXBhdCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYm1fbGlicy5hcHBlbmQoJ2dkYm1fY29tcGF0JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbmRfZmlsZSgiZ2RibS9uZGJtLmgiLCBpbmNfZGlycywgW10pIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJidWlsZGluZyBkYm0gdXNpbmcgZ2RibSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYm1leHQgPSBFeHRlbnNpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYm0nLCBbJ2RibW1vZHVsZS5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdIQVZFX0dEQk1fTkRCTV9IJywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBnZGJtX2xpYnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbmRfZmlsZSgiZ2RibS1uZGJtLmgiLCBpbmNfZGlycywgW10pIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJidWlsZGluZyBkYm0gdXNpbmcgZ2RibSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYm1leHQgPSBFeHRlbnNpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYm0nLCBbJ2RibW1vZHVsZS5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdIQVZFX0dEQk1fREFTSF9OREJNX0gnLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyA9IGdkYm1fbGlicykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsaWYgY2FuZCA9PSAiYmRiIjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGJfaW5jcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJidWlsZGluZyBkYm0gdXNpbmcgYmRiIgorICAgICAgICAgICAgICAgICAgICAgICAgZGJtZXh0ID0gRXh0ZW5zaW9uKCdkYm0nLCBbJ2RibW1vZHVsZS5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPWRibGliX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1kYmxpYl9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzPWRiX2luY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnSEFWRV9CRVJLREJfSCcsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0RCX0RCTV9IU0VBUkNIJywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPWRibGlicykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBkYm1leHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZXh0cy5hcHBlbmQoZGJtZXh0KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnZGJtJykKIAogICAgICAgICAjIEFudGhvbnkgQmF4dGVyJ3MgZ2RibSBtb2R1bGUuICBHTlUgZGJtKDMpIHdpbGwgcmVxdWlyZSAtbGdkYm06Ci0gICAgICAgIGlmIChzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnZ2RibScpKToKKyAgICAgICAgaWYgKCdnZGJtJyBpbiBkYm1fb3JkZXIgYW5kCisgICAgICAgICAgICBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnZ2RibScpKToKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2dkYm0nLCBbJ2dkYm1tb2R1bGUuYyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbJ2dkYm0nXSApICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdnZGJtJykKIAogICAgICAgICAjIFVuaXgtb25seSBtb2R1bGVzCi0gICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiBbJ21hYycsICd3aW4zMiddOgorICAgICAgICBpZiBwbGF0Zm9ybSBub3QgaW4gWyd3aW4zMiddOgogICAgICAgICAgICAgIyBTdGVlbiBMdW1ob2x0J3MgdGVybWlvcyBtb2R1bGUKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3Rlcm1pb3MnLCBbJ3Rlcm1pb3MuYyddKSApCiAgICAgICAgICAgICAjIEplcmVteSBIeWx0b24ncyBybGltaXQgaW50ZXJmYWNlCkBAIC0xMjk1LDI4ICsxMzI1LDM1IEBACiAKICAgICAgICAgIyBJbnRlcmZhY2UgdG8gdGhlIEV4cGF0IFhNTCBwYXJzZXIKICAgICAgICAgIwotICAgICAgICAjIEV4cGF0IHdhcyB3cml0dGVuIGJ5IEphbWVzIENsYXJrIGFuZCBpcyBub3cgbWFpbnRhaW5lZCBieSBhCi0gICAgICAgICMgZ3JvdXAgb2YgZGV2ZWxvcGVycyBvbiBTb3VyY2VGb3JnZTsgc2VlIHd3dy5saWJleHBhdC5vcmcgZm9yCi0gICAgICAgICMgbW9yZSBpbmZvcm1hdGlvbi4gIFRoZSBweWV4cGF0IG1vZHVsZSB3YXMgd3JpdHRlbiBieSBQYXVsCi0gICAgICAgICMgUHJlc2NvZCBhZnRlciBhIHByb3RvdHlwZSBieSBKYWNrIEphbnNlbi4gIFRoZSBFeHBhdCBzb3VyY2UKLSAgICAgICAgIyBpcyBpbmNsdWRlZCBpbiBNb2R1bGVzL2V4cGF0Ly4gIFVzYWdlIG9mIGEgc3lzdGVtCi0gICAgICAgICMgc2hhcmVkIGxpYmV4cGF0LnNvL2V4cGF0LmRsbCBpcyBub3QgYWR2aXNlZC4KKyAgICAgICAgIyBFeHBhdCB3YXMgd3JpdHRlbiBieSBKYW1lcyBDbGFyayBhbmQgaXMgbm93IG1haW50YWluZWQgYnkgYSBncm91cCBvZgorICAgICAgICAjIGRldmVsb3BlcnMgb24gU291cmNlRm9yZ2U7IHNlZSB3d3cubGliZXhwYXQub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAjIFRoZSBweWV4cGF0IG1vZHVsZSB3YXMgd3JpdHRlbiBieSBQYXVsIFByZXNjb2QgYWZ0ZXIgYSBwcm90b3R5cGUgYnkKKyAgICAgICAgIyBKYWNrIEphbnNlbi4gIFRoZSBFeHBhdCBzb3VyY2UgaXMgaW5jbHVkZWQgaW4gTW9kdWxlcy9leHBhdC8uICBVc2FnZQorICAgICAgICAjIG9mIGEgc3lzdGVtIHNoYXJlZCBsaWJleHBhdC5zbyBpcyBwb3NzaWJsZSB3aXRoIC0td2l0aC1zeXN0ZW0tZXhwYXQKKyAgICAgICAgIyBjb25maWd1cmUgb3B0aW9uLgogICAgICAgICAjCiAgICAgICAgICMgTW9yZSBpbmZvcm1hdGlvbiBvbiBFeHBhdCBjYW4gYmUgZm91bmQgYXQgd3d3LmxpYmV4cGF0Lm9yZy4KICAgICAgICAgIwotICAgICAgICBleHBhdGluYyA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgc3JjZGlyLCAnTW9kdWxlcycsICdleHBhdCcpCi0gICAgICAgIGRlZmluZV9tYWNyb3MgPSBbCi0gICAgICAgICAgICAoJ0hBVkVfRVhQQVRfQ09ORklHX0gnLCAnMScpLAotICAgICAgICBdCisgICAgICAgIGlmICctLXdpdGgtc3lzdGVtLWV4cGF0JyBpbiBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNPTkZJR19BUkdTIik6CisgICAgICAgICAgICBleHBhdF9pbmMgPSBbXQorICAgICAgICAgICAgZGVmaW5lX21hY3JvcyA9IFtdCisgICAgICAgICAgICBleHBhdF9saWIgPSBbJ2V4cGF0J10KKyAgICAgICAgICAgIGV4cGF0X3NvdXJjZXMgPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhwYXRfaW5jID0gW29zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgc3JjZGlyLCAnTW9kdWxlcycsICdleHBhdCcpXQorICAgICAgICAgICAgZGVmaW5lX21hY3JvcyA9IFsKKyAgICAgICAgICAgICAgICAoJ0hBVkVfRVhQQVRfQ09ORklHX0gnLCAnMScpLAorICAgICAgICAgICAgXQorICAgICAgICAgICAgZXhwYXRfbGliID0gW10KKyAgICAgICAgICAgIGV4cGF0X3NvdXJjZXMgPSBbJ2V4cGF0L3htbHBhcnNlLmMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYXQveG1scm9sZS5jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGF0L3htbHRvay5jJ10KIAogICAgICAgICBleHRzLmFwcGVuZChFeHRlbnNpb24oJ3B5ZXhwYXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3JvcyA9IGRlZmluZV9tYWNyb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnMgPSBbZXhwYXRpbmNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcyA9IFsncHlleHBhdC5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGF0L3htbHBhcnNlLmMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYXQveG1scm9sZS5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGF0L3htbHRvay5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycyA9IGV4cGF0X2luYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyA9IGV4cGF0X2xpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMgPSBbJ3B5ZXhwYXQuYyddICsgZXhwYXRfc291cmNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKIAogICAgICAgICAjIEZyZWRyaWsgTHVuZGgncyBjRWxlbWVudFRyZWUgbW9kdWxlLiAgTm90ZSB0aGF0IHRoaXMgYWxzbwpAQCAtMTMyNiw3ICsxMzYzLDggQEAKICAgICAgICAgICAgIGRlZmluZV9tYWNyb3MuYXBwZW5kKCgnVVNFX1BZRVhQQVRfQ0FQSScsIE5vbmUpKQogICAgICAgICAgICAgZXh0cy5hcHBlbmQoRXh0ZW5zaW9uKCdfZWxlbWVudHRyZWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3MgPSBkZWZpbmVfbWFjcm9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycyA9IFtleHBhdGluY10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzID0gZXhwYXRfaW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyA9IGV4cGF0X2xpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzID0gWydfZWxlbWVudHRyZWUuYyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCiAgICAgICAgIGVsc2U6CkBAIC0xMzY0LDU2ICsxNDAyLDI5IEBACiAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbJ3dzMl8zMiddCiAKICAgICAgICAgZWxpZiBwbGF0Zm9ybSA9PSAnZGFyd2luJzogICAgICAgICAgIyBNYWMgT1NYCi0gICAgICAgICAgICBtYWNyb3MgPSBkaWN0KAotICAgICAgICAgICAgICAgIEhBVkVfU0VNX09QRU49MSwKLSAgICAgICAgICAgICAgICBIQVZFX1NFTV9USU1FRFdBSVQ9MCwKLSAgICAgICAgICAgICAgICBIQVZFX0ZEX1RSQU5TRkVSPTEsCi0gICAgICAgICAgICAgICAgSEFWRV9CUk9LRU5fU0VNX0dFVFZBTFVFPTEKLSAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBtYWNyb3MgPSBkaWN0KCkKICAgICAgICAgICAgIGxpYnJhcmllcyA9IFtdCiAKICAgICAgICAgZWxpZiBwbGF0Zm9ybSA9PSAnY3lnd2luJzogICAgICAgICAgIyBDeWd3aW4KLSAgICAgICAgICAgIG1hY3JvcyA9IGRpY3QoCi0gICAgICAgICAgICAgICAgSEFWRV9TRU1fT1BFTj0xLAotICAgICAgICAgICAgICAgIEhBVkVfU0VNX1RJTUVEV0FJVD0xLAotICAgICAgICAgICAgICAgIEhBVkVfRkRfVFJBTlNGRVI9MCwKLSAgICAgICAgICAgICAgICBIQVZFX0JST0tFTl9TRU1fVU5MSU5LPTEKLSAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBtYWNyb3MgPSBkaWN0KCkKICAgICAgICAgICAgIGxpYnJhcmllcyA9IFtdCiAKICAgICAgICAgZWxpZiBwbGF0Zm9ybSBpbiAoJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywgJ2ZyZWVic2Q3JywgJ2ZyZWVic2Q4Jyk6CiAgICAgICAgICAgICAjIEZyZWVCU0QncyBQMTAwMy4xYiBzZW1hcGhvcmUgc3VwcG9ydCBpcyB2ZXJ5IGV4cGVyaW1lbnRhbAogICAgICAgICAgICAgIyBhbmQgaGFzIG1hbnkga25vd24gcHJvYmxlbXMuIChhcyBvZiBKdW5lIDIwMDgpCi0gICAgICAgICAgICBtYWNyb3MgPSBkaWN0KCAgICAgICAgICAgICAgICAgICMgRnJlZUJTRAotICAgICAgICAgICAgICAgIEhBVkVfU0VNX09QRU49MCwKLSAgICAgICAgICAgICAgICBIQVZFX1NFTV9USU1FRFdBSVQ9MCwKLSAgICAgICAgICAgICAgICBIQVZFX0ZEX1RSQU5TRkVSPTEsCi0gICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbWFjcm9zID0gZGljdCgpCiAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbXQogCiAgICAgICAgIGVsaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnb3BlbmJzZCcpOgotICAgICAgICAgICAgbWFjcm9zID0gZGljdCggICAgICAgICAgICAgICAgICAjIE9wZW5CU0QKLSAgICAgICAgICAgICAgICBIQVZFX1NFTV9PUEVOPTAsICAgICAgICAgICAgIyBOb3QgaW1wbGVtZW50ZWQKLSAgICAgICAgICAgICAgICBIQVZFX1NFTV9USU1FRFdBSVQ9MCwKLSAgICAgICAgICAgICAgICBIQVZFX0ZEX1RSQU5TRkVSPTEsCi0gICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbWFjcm9zID0gZGljdCgpCiAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbXQogCiAgICAgICAgIGVsaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnbmV0YnNkJyk6Ci0gICAgICAgICAgICBtYWNyb3MgPSBkaWN0KCAgICAgICAgICAgICAgICAgICMgYXQgbGVhc3QgTmV0QlNEIDUKLSAgICAgICAgICAgICAgICBIQVZFX1NFTV9PUEVOPTEsCi0gICAgICAgICAgICAgICAgSEFWRV9TRU1fVElNRURXQUlUPTAsCi0gICAgICAgICAgICAgICAgSEFWRV9GRF9UUkFOU0ZFUj0xLAotICAgICAgICAgICAgICAgIEhBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRT0xCi0gICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbWFjcm9zID0gZGljdCgpCiAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbXQogCiAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExpbnV4IGFuZCBvdGhlciB1bmljZXMKLSAgICAgICAgICAgIG1hY3JvcyA9IGRpY3QoCi0gICAgICAgICAgICAgICAgSEFWRV9TRU1fT1BFTj0xLAotICAgICAgICAgICAgICAgIEhBVkVfU0VNX1RJTUVEV0FJVD0xLAotICAgICAgICAgICAgICAgIEhBVkVfRkRfVFJBTlNGRVI9MQotICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIG1hY3JvcyA9IGRpY3QoKQogICAgICAgICAgICAgbGlicmFyaWVzID0gWydydCddCiAKICAgICAgICAgaWYgcGxhdGZvcm0gPT0gJ3dpbjMyJzoKQEAgLTE0MjgsOCArMTQzOSw4IEBACiAgICAgICAgICAgICBtdWx0aXByb2Nlc3Npbmdfc3JjcyA9IFsgJ19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfbXVsdGlwcm9jZXNzaW5nL3NvY2tldF9jb25uZWN0aW9uLmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KLQotICAgICAgICAgICAgaWYgbWFjcm9zLmdldCgnSEFWRV9TRU1fT1BFTicsIEZhbHNlKToKKyAgICAgICAgICAgIGlmIChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0hBVkVfU0VNX09QRU4nKSBhbmQgbm90CisgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQT1NJWF9TRU1BUEhPUkVTX05PVF9FTkFCTEVEJykpOgogICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZ19zcmNzLmFwcGVuZCgnX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYycpCiAKICAgICAgICAgaWYgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX1RIUkVBRCcpOgpAQCAtMTQ0OSw4ICsxNDYwLDkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdsaW51eGF1ZGlvZGV2JykKIAotICAgICAgICBpZiBwbGF0Zm9ybSBpbiAoJ2xpbnV4MicsICdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnZnJlZWJzZDcnLCAnZnJlZWJzZDgnKToKKyAgICAgICAgaWYgKHBsYXRmb3JtIGluICgnbGludXgyJywgJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywKKyAgICAgICAgICAgICAgICAgICAgICAgICdmcmVlYnNkNycsICdmcmVlYnNkOCcpCisgICAgICAgICAgICBvciBwbGF0Zm9ybS5zdGFydHN3aXRoKCJnbnVrZnJlZWJzZCIpKToKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ29zc2F1ZGlvZGV2JywgWydvc3NhdWRpb2Rldi5jJ10pICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdvc3NhdWRpb2RldicpCkBAIC0xNjc1LDEwICsxNjg3LDEyIEBACiAgICAgICAgICMgVGhlIHZlcnNpb25zIHdpdGggZG90cyBhcmUgdXNlZCBvbiBVbml4LCBhbmQgdGhlIHZlcnNpb25zIHdpdGhvdXQKICAgICAgICAgIyBkb3RzIG9uIFdpbmRvd3MsIGZvciBkZXRlY3Rpb24gYnkgY3lnd2luLgogICAgICAgICB0Y2xsaWIgPSB0a2xpYiA9IHRjbF9pbmNsdWRlcyA9IHRrX2luY2x1ZGVzID0gTm9uZQotICAgICAgICBmb3IgdmVyc2lvbiBpbiBbJzguNScsICc4NScsICc4LjQnLCAnODQnLCAnOC4zJywgJzgzJywgJzguMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnODInLCAnOC4xJywgJzgxJywgJzguMCcsICc4MCddOgotICAgICAgICAgICAgdGtsaWIgPSBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAndGsnICsgdmVyc2lvbikKLSAgICAgICAgICAgIHRjbGxpYiA9IHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICd0Y2wnICsgdmVyc2lvbikKKyAgICAgICAgZm9yIHZlcnNpb24gaW4gWyc4LjYnLCAnODYnLCAnOC41JywgJzg1JywgJzguNCcsICc4NCcsICc4LjMnLCAnODMnLAorICAgICAgICAgICAgICAgICAgICAgICAgJzguMicsICc4MicsICc4LjEnLCAnODEnLCAnOC4wJywgJzgwJ106CisgICAgICAgICAgICB0a2xpYiA9IHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aycgKyB2ZXJzaW9uKQorICAgICAgICAgICAgdGNsbGliID0gc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0Y2wnICsgdmVyc2lvbikKICAgICAgICAgICAgIGlmIHRrbGliIGFuZCB0Y2xsaWI6CiAgICAgICAgICAgICAgICAgIyBFeGl0IHRoZSBsb29wIHdoZW4gd2UndmUgZm91bmQgdGhlIFRjbC9UayBsaWJyYXJpZXMKICAgICAgICAgICAgICAgICBicmVhawpAQCAtMTczNywxMSArMTc1MSwxMSBAQAogCiAgICAgICAgICMgQ2hlY2sgZm9yIEJMVCBleHRlbnNpb24KICAgICAgICAgaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycyArIGFkZGVkX2xpYl9kaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCTFQ4LjAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JMVDguMCcpOgogICAgICAgICAgICAgZGVmcy5hcHBlbmQoICgnV0lUSF9CTFQnLCAxKSApCiAgICAgICAgICAgICBsaWJzLmFwcGVuZCgnQkxUOC4wJykKICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzICsgYWRkZWRfbGliX2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JMVCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JMVCcpOgogICAgICAgICAgICAgZGVmcy5hcHBlbmQoICgnV0lUSF9CTFQnLCAxKSApCiAgICAgICAgICAgICBsaWJzLmFwcGVuZCgnQkxUJykKIApAQCAtMTc3OSw3ICsxNzkzLDcgQEAKICAgICBkZWYgY29uZmlndXJlX2N0eXBlc19kYXJ3aW4oc2VsZiwgZXh0KToKICAgICAgICAgIyBEYXJ3aW4gKE9TIFgpIHVzZXMgcHJlY29uZmlndXJlZCBmaWxlcywgaW4KICAgICAgICAgIyB0aGUgTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3ggZGlyZWN0b3J5LgotICAgICAgICAoc3JjZGlyLCkgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdzcmNkaXInKQorICAgICAgICBzcmNkaXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpCiAgICAgICAgIGZmaV9zcmNkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHNyY2RpciwgJ01vZHVsZXMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2N0eXBlcycsICdsaWJmZmlfb3N4JykpCiAgICAgICAgIHNvdXJjZXMgPSBbb3MucGF0aC5qb2luKGZmaV9zcmNkaXIsIHApCkBAIC0xODA4LDcgKzE4MjIsNyBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbmZpZ3VyZV9jdHlwZXNfZGFyd2luKGV4dCkKIAotICAgICAgICAgICAgKHNyY2RpciwpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnc3JjZGlyJykKKyAgICAgICAgICAgIHNyY2RpciA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3Zhcignc3JjZGlyJykKICAgICAgICAgICAgIGZmaV9idWlsZGRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX3RlbXAsICdsaWJmZmknKQogICAgICAgICAgICAgZmZpX3NyY2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oc3JjZGlyLCAnTW9kdWxlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3R5cGVzJywgJ2xpYmZmaScpKQpAQCAtMTgzNiw3ICsxODUwLDggQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgICAgIGZmaWNvbmZpZyA9IHt9Ci0gICAgICAgICAgICBleGVjIG9wZW4oZmZpX2NvbmZpZ2ZpbGUpIGluIGZmaWNvbmZpZworICAgICAgICAgICAgd2l0aCBvcGVuKGZmaV9jb25maWdmaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgIGV4ZWMgZiBpbiBmZmljb25maWcKIAogICAgICAgICAgICAgIyBBZGQgLlMgKHByZXByb2Nlc3NlZCBhc3NlbWJseSkgdG8gQyBjb21waWxlciBzb3VyY2UgZXh0ZW5zaW9ucy4KICAgICAgICAgICAgIHNlbGYuY29tcGlsZXIuc3JjX2V4dGVuc2lvbnMuYXBwZW5kKCcuUycpCkBAIC0xODYxLDExICsxODc2LDExIEBACiAgICAgICAgICAgICAgICAgICAgJ19jdHlwZXMvY2FsbGJhY2tzLmMnLAogICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL2NhbGxwcm9jLmMnLAogICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL3N0Z2RpY3QuYycsCi0gICAgICAgICAgICAgICAgICAgJ19jdHlwZXMvY2ZpZWxkLmMnLAotICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL21hbGxvY19jbG9zdXJlLmMnXQorICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL2NmaWVsZC5jJ10KICAgICAgICAgZGVwZW5kcyA9IFsnX2N0eXBlcy9jdHlwZXMuaCddCiAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgc291cmNlcy5hcHBlbmQoJ19jdHlwZXMvbWFsbG9jX2Nsb3N1cmUuYycpCiAgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZCgnX2N0eXBlcy9kYXJ3aW4vZGxmY25fc2ltcGxlLmMnKQogICAgICAgICAgICAgZXh0cmFfY29tcGlsZV9hcmdzLmFwcGVuZCgnLURNQUNPU1gnKQogICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnX2N0eXBlcy9kYXJ3aW4nKQpAQCAtMTkwNSw3ICsxOTIwLDkgQEAKICAgICAgICAgICAgICMgaW4gL3Vzci9pbmNsdWRlL2ZmaQogICAgICAgICAgICAgaW5jX2RpcnMuYXBwZW5kKCcvdXNyL2luY2x1ZGUvZmZpJykKIAotICAgICAgICBmZmlfaW5jID0gZmluZF9maWxlKCdmZmkuaCcsIFtdLCBpbmNfZGlycykKKyAgICAgICAgZmZpX2luYyA9IFtzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkZGSV9JTkNMVURFRElSIildCisgICAgICAgIGlmIG5vdCBmZmlfaW5jIG9yIGZmaV9pbmNbMF0gPT0gJyc6CisgICAgICAgICAgICBmZmlfaW5jID0gZmluZF9maWxlKCdmZmkuaCcsIFtdLCBpbmNfZGlycykKICAgICAgICAgaWYgZmZpX2luYyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGZmaV9oID0gZmZpX2luY1swXSArICcvZmZpLmgnCiAgICAgICAgICAgICBmcCA9IG9wZW4oZmZpX2gpCg==